ZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKaW5kZXggMzNkMDdjMC4uNWU5ODgwNiAxMDA2NDQKLS0tIGEvLmdpdGF0dHJpYnV0ZXMKKysrIGIvLmdpdGF0dHJpYnV0ZXMKQEAgLTEsNCArMSwzIEBACi0qICAgICAgICAgICB3aGl0ZXNwYWNlPWluZGVudC13aXRoLW5vbi10YWIsdHJhaWxpbmctc3BhY2Usc3BhY2UtYmVmb3JlLXRhYix0YWJ3aWR0aD00Ci0qICAgICAgICAgICBlbmNvZGluZz1VUy1BU0NJSQotZ2l0LWd1aS5zaCAgZW5jb2Rpbmc9VVRGLTgKLS9wby8qLnBvICAgIGVuY29kaW5nPVVURi04CisqIHdoaXRlc3BhY2U9IWluZGVudCx0cmFpbCxzcGFjZQorKi5bY2hdIHdoaXRlc3BhY2U9aW5kZW50LHRyYWlsLHNwYWNlCisqLnNoIHdoaXRlc3BhY2U9aW5kZW50LHRyYWlsLHNwYWNlCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCA2NDgzYjIxLi5hMTg4YTgyIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTEsOCArMSwyMzcgQEAKLS5EU19TdG9yZQotY29uZmlnLm1hawotR2l0IEd1aS5hcHAqCi1naXQtZ3VpLnRjbAotR0lULVZFUlNJT04tRklMRQotR0lULUdVSS1WQVJTCi1naXQtZ3VpCi1saWIvdGNsSW5kZXgKKy9HSVQtQlVJTEQtT1BUSU9OUworL0dJVC1DRkxBR1MKKy9HSVQtTERGTEFHUworL0dJVC1HVUktVkFSUworL0dJVC1QUkVGSVgKKy9HSVQtU0NSSVBULURFRklORVMKKy9HSVQtVVNFUi1BR0VOVAorL0dJVC1WRVJTSU9OLUZJTEUKKy9iaW4td3JhcHBlcnMvCisvZ2l0CisvZ2l0LWFkZAorL2dpdC1hZGQtLWludGVyYWN0aXZlCisvZ2l0LWFtCisvZ2l0LWFubm90YXRlCisvZ2l0LWFwcGx5CisvZ2l0LWFyY2hpbXBvcnQKKy9naXQtYXJjaGl2ZQorL2dpdC1iaXNlY3QKKy9naXQtYmlzZWN0LS1oZWxwZXIKKy9naXQtYmxhbWUKKy9naXQtYnJhbmNoCisvZ2l0LWJ1bmRsZQorL2dpdC1jYXQtZmlsZQorL2dpdC1jaGVjay1hdHRyCisvZ2l0LWNoZWNrLXJlZi1mb3JtYXQKKy9naXQtY2hlY2tvdXQKKy9naXQtY2hlY2tvdXQtaW5kZXgKKy9naXQtY2hlcnJ5CisvZ2l0LWNoZXJyeS1waWNrCisvZ2l0LWNsZWFuCisvZ2l0LWNsb25lCisvZ2l0LWNvbHVtbgorL2dpdC1jb21taXQKKy9naXQtY29tbWl0LXRyZWUKKy9naXQtY29uZmlnCisvZ2l0LWNvdW50LW9iamVjdHMKKy9naXQtY3JlZGVudGlhbAorL2dpdC1jcmVkZW50aWFsLWNhY2hlCisvZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbgorL2dpdC1jcmVkZW50aWFsLXN0b3JlCisvZ2l0LWN2c2V4cG9ydGNvbW1pdAorL2dpdC1jdnNpbXBvcnQKKy9naXQtY3Zzc2VydmVyCisvZ2l0LWRhZW1vbgorL2dpdC1kaWZmCisvZ2l0LWRpZmYtZmlsZXMKKy9naXQtZGlmZi1pbmRleAorL2dpdC1kaWZmLXRyZWUKKy9naXQtZGlmZnRvb2wKKy9naXQtZGlmZnRvb2wtLWhlbHBlcgorL2dpdC1kZXNjcmliZQorL2dpdC1mYXN0LWV4cG9ydAorL2dpdC1mYXN0LWltcG9ydAorL2dpdC1mZXRjaAorL2dpdC1mZXRjaC1wYWNrCisvZ2l0LWZpbHRlci1icmFuY2gKKy9naXQtZm10LW1lcmdlLW1zZworL2dpdC1mb3ItZWFjaC1yZWYKKy9naXQtZm9ybWF0LXBhdGNoCisvZ2l0LWZzY2sKKy9naXQtZnNjay1vYmplY3RzCisvZ2l0LWdjCisvZ2l0LWdldC10YXItY29tbWl0LWlkCisvZ2l0LWdyZXAKKy9naXQtaGFzaC1vYmplY3QKKy9naXQtaGVscAorL2dpdC1odHRwLWJhY2tlbmQKKy9naXQtaHR0cC1mZXRjaAorL2dpdC1odHRwLXB1c2gKKy9naXQtaW1hcC1zZW5kCisvZ2l0LWluZGV4LXBhY2sKKy9naXQtaW5pdAorL2dpdC1pbml0LWRiCisvZ2l0LWluc3Rhd2ViCisvZ2l0LWxvZworL2dpdC1sb3N0LWZvdW5kCisvZ2l0LWxzLWZpbGVzCisvZ2l0LWxzLXJlbW90ZQorL2dpdC1scy10cmVlCisvZ2l0LW1haWxpbmZvCisvZ2l0LW1haWxzcGxpdAorL2dpdC1tZXJnZQorL2dpdC1tZXJnZS1iYXNlCisvZ2l0LW1lcmdlLWluZGV4CisvZ2l0LW1lcmdlLWZpbGUKKy9naXQtbWVyZ2UtdHJlZQorL2dpdC1tZXJnZS1vY3RvcHVzCisvZ2l0LW1lcmdlLW9uZS1maWxlCisvZ2l0LW1lcmdlLW91cnMKKy9naXQtbWVyZ2UtcmVjdXJzaXZlCisvZ2l0LW1lcmdlLXJlc29sdmUKKy9naXQtbWVyZ2Utc3VidHJlZQorL2dpdC1tZXJnZXRvb2wKKy9naXQtbWVyZ2V0b29sLS1saWIKKy9naXQtbWt0YWcKKy9naXQtbWt0cmVlCisvZ2l0LW5hbWUtcmV2CisvZ2l0LW12CisvZ2l0LW5vdGVzCisvZ2l0LXA0CisvZ2l0LXBhY2stcmVkdW5kYW50CisvZ2l0LXBhY2stb2JqZWN0cworL2dpdC1wYWNrLXJlZnMKKy9naXQtcGFyc2UtcmVtb3RlCisvZ2l0LXBhdGNoLWlkCisvZ2l0LXBlZWstcmVtb3RlCisvZ2l0LXBydW5lCisvZ2l0LXBydW5lLXBhY2tlZAorL2dpdC1wdWxsCisvZ2l0LXB1c2gKKy9naXQtcXVpbHRpbXBvcnQKKy9naXQtcmVhZC10cmVlCisvZ2l0LXJlYmFzZQorL2dpdC1yZWJhc2UtLWFtCisvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUKKy9naXQtcmViYXNlLS1tZXJnZQorL2dpdC1yZWNlaXZlLXBhY2sKKy9naXQtcmVmbG9nCisvZ2l0LXJlbGluaworL2dpdC1yZW1vdGUKKy9naXQtcmVtb3RlLWh0dHAKKy9naXQtcmVtb3RlLWh0dHBzCisvZ2l0LXJlbW90ZS1mdHAKKy9naXQtcmVtb3RlLWZ0cHMKKy9naXQtcmVtb3RlLWZkCisvZ2l0LXJlbW90ZS1leHQKKy9naXQtcmVtb3RlLXRlc3RnaXQKKy9naXQtcmVwYWNrCisvZ2l0LXJlcGxhY2UKKy9naXQtcmVwby1jb25maWcKKy9naXQtcmVxdWVzdC1wdWxsCisvZ2l0LXJlcmVyZQorL2dpdC1yZXNldAorL2dpdC1yZXYtbGlzdAorL2dpdC1yZXYtcGFyc2UKKy9naXQtcmV2ZXJ0CisvZ2l0LXJtCisvZ2l0LXNlbmQtZW1haWwKKy9naXQtc2VuZC1wYWNrCisvZ2l0LXNoLWkxOG4KKy9naXQtc2gtaTE4bi0tZW52c3Vic3QKKy9naXQtc2gtc2V0dXAKKy9naXQtc2gtaTE4bgorL2dpdC1zaGVsbAorL2dpdC1zaG9ydGxvZworL2dpdC1zaG93CisvZ2l0LXNob3ctYnJhbmNoCisvZ2l0LXNob3ctaW5kZXgKKy9naXQtc2hvdy1yZWYKKy9naXQtc3RhZ2UKKy9naXQtc3Rhc2gKKy9naXQtc3RhdHVzCisvZ2l0LXN0cmlwc3BhY2UKKy9naXQtc3VibW9kdWxlCisvZ2l0LXN2bgorL2dpdC1zeW1ib2xpYy1yZWYKKy9naXQtdGFnCisvZ2l0LXRhci10cmVlCisvZ2l0LXVucGFjay1maWxlCisvZ2l0LXVucGFjay1vYmplY3RzCisvZ2l0LXVwZGF0ZS1pbmRleAorL2dpdC11cGRhdGUtcmVmCisvZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbworL2dpdC11cGxvYWQtYXJjaGl2ZQorL2dpdC11cGxvYWQtcGFjaworL2dpdC12YXIKKy9naXQtdmVyaWZ5LXBhY2sKKy9naXQtdmVyaWZ5LXRhZworL2dpdC13ZWItLWJyb3dzZQorL2dpdC13aGF0Y2hhbmdlZAorL2dpdC13cml0ZS10cmVlCisvZ2l0LWNvcmUtKi8/KgorL2dpdGstZ2l0L2dpdGstd2lzaAorL2dpdHdlYi9HSVRXRUItQlVJTEQtT1BUSU9OUworL2dpdHdlYi9naXR3ZWIuY2dpCisvZ2l0d2ViL3N0YXRpYy9naXR3ZWIuanMKKy9naXR3ZWIvc3RhdGljL2dpdHdlYi5taW4uKgorL3Rlc3QtY2htdGltZQorL3Rlc3QtY3R5cGUKKy90ZXN0LWRhdGUKKy90ZXN0LWRlbHRhCisvdGVzdC1kdW1wLWNhY2hlLXRyZWUKKy90ZXN0LXNjcmFwLWNhY2hlLXRyZWUKKy90ZXN0LWdlbnJhbmRvbQorL3Rlc3QtaW5kZXgtdmVyc2lvbgorL3Rlc3QtbGluZS1idWZmZXIKKy90ZXN0LW1hdGNoLXRyZWVzCisvdGVzdC1tZXJnZXNvcnQKKy90ZXN0LW1rdGVtcAorL3Rlc3QtcGFyc2Utb3B0aW9ucworL3Rlc3QtcGF0aC11dGlscworL3Rlc3QtcmVnZXgKKy90ZXN0LXJldmlzaW9uLXdhbGtpbmcKKy90ZXN0LXJ1bi1jb21tYW5kCisvdGVzdC1zaGExCisvdGVzdC1zaWdjaGFpbgorL3Rlc3Qtc3RyaW5nLWxpc3QKKy90ZXN0LXN1YnByb2Nlc3MKKy90ZXN0LXN2bi1mZQorL2NvbW1vbi1jbWRzLmgKKyoudGFyLmd6CisqLmRzYworKi5kZWIKKy9naXQuc3BlYworKi5leGUKKyouW2Fvc10KKyoucHlbY29dCisuZGVwZW5kLworKi5nY2RhCisqLmdjbm8KKyouZ2NvdgorL2NvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9ucworL2NvdmVyX2RiLworL2NvdmVyX2RiX2h0bWwvCisqKworL2NvbmZpZy5tYWsKKy9hdXRvbTR0ZS5jYWNoZQorL2NvbmZpZy5jYWNoZQorL2NvbmZpZy5sb2cKKy9jb25maWcuc3RhdHVzCisvY29uZmlnLm1hay5hdXRvZ2VuCisvY29uZmlnLm1hay5hcHBlbmQKKy9jb25maWd1cmUKKy90YWdzCisvVEFHUworL2NzY29wZSoKKyoub2JqCisqLmxpYgorKi5zbG4KKyouc3VvCisqLm5jYgorKi52Y3Byb2oKKyoudXNlcgorKi5pZGIKKyoucGRiCisvRGVidWcvCisvUmVsZWFzZS8KZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNmNGY4NwotLS0gL2Rldi9udWxsCisrKyBiLy5tYWlsbWFwCkBAIC0wLDAgKzEsODQgQEAKKyMKKyMgVGhpcyBsaXN0IGlzIHVzZWQgYnkgZ2l0LXNob3J0bG9nIHRvIGZpeCBhIGZldyBib3RjaGVkIG5hbWUgdHJhbnNsYXRpb25zCisjIGluIHRoZSBnaXQgYXJjaGl2ZSwgZWl0aGVyIGJlY2F1c2UgdGhlIGF1dGhvcidzIGZ1bGwgbmFtZSB3YXMgbWVzc2VkIHVwCisjIGFuZC9vciBub3QgYWx3YXlzIHdyaXR0ZW4gdGhlIHNhbWUgd2F5LCBtYWtpbmcgY29udHJpYnV0aW9ucyBmcm9tIHRoZQorIyBzYW1lIHBlcnNvbiBhcHBlYXJpbmcgbm90IHRvIGJlIHNvLgorIworCitBbGV4IEJlbm7DqWUgPGtlcm5lbC1oYWNrZXJAYmVubmVlLmNvbT4KK0FsZXhhbmRlciBHYXZyaWxvdiA8YW5nYXZyaWxvdkBnbWFpbC5jb20+CitBbmVlc2ggS3VtYXIgSy5WIDxhbmVlc2gua3VtYXJAZ21haWwuY29tPgorQnJpYW4gTS4gQ2FybHNvbiA8c2FuZGFsc0BjcnVzdHl0b290aHBhc3RlLmF0aC5jeD4KK0NocmlzIFNob2VtYWtlciA8Yy5zaG9lbWFrZXJAY294Lm5ldD4KK0RhbmEgTC4gSG93IDxkYW5haG93QGdtYWlsLmNvbT4KK0RhbmEgTC4gSG93IDxob3dAZGVhdGh2YWxsZXkuY3N3aXRjaC5jb20+CitEYW5pZWwgQmFya2Fsb3cgPGJhcmthbG93QGlhYmVydm9uLm9yZz4KK0RhdmlkIEQuIEtpbHplciA8ZGRraWx6ZXJAa2lsemVyLm5ldD4KK0RhdmlkIEvDpWdlZGFsIDxkYXZpZGtAbHlzYXRvci5saXUuc2U+CitEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitEZXNraW4gTWlsbGVyIDxkZXNraW5tQHVtaWNoLmVkdT4KK0RpcmsgU8O8c3Nlcm90dCA8bmV3c2xldHRlckBkaXJrLm15MS5jYz4KK0VyaWsgRmF5ZS1MdW5kIDxrdXNtYWJpdGVAZ21haWwuY29tPiA8a3VzbWFiaXRlQGdvb2dsZW1haWwuY29tPgorRnJlZHJpayBLdWl2aW5lbiA8ZnJla3UwNDVAc3R1ZGVudC5saXUuc2U+CitILiBQZXRlciBBbnZpbiA8aHBhQGJvbmRlLnNjLm9yaW9ubXVsdGkuY29tPgorSC4gUGV0ZXIgQW52aW4gPGhwYUB0YXplbmRhLnNjLm9yaW9ubXVsdGkuY29tPgorSC4gUGV0ZXIgQW52aW4gPGhwYUB0cmFudG9yLmhvcy5hbnZpbi5vcmc+CitIb3JzdCBILiB2b24gQnJhbmQgPHZvbmJyYW5kQGluZi51dGZzbS5jbD4KK8Swc21haWwgRMO2bm1leiA8aXNtYWlsQHBhcmR1cy5vcmcudHI+CitKYXkgU29mZmlhbiA8amF5c29mZmlhbitnaXRAZ21haWwuY29tPgorSm9hY2hpbSBCZXJkYWwgSGFnYSA8Y2poYWdhQGZ5cy51aW8ubm8+CitKb2hhbm5lcyBTaXh0IDxqNnRAa2RiZy5vcmc+IDxqb2hhbm5lcy5zaXh0QHRlbGVjb20uYXQ+CitKb2hhbm5lcyBTaXh0IDxqNnRAa2RiZy5vcmc+IDxqLnNpeHRAdmlzY292ZXJ5Lm5ldD4KK0pvaGFubmVzIFNpeHQgPGo2dEBrZGJnLm9yZz4gPEouU2l4dEBldWRhcHRpY3MuY29tPgorSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0pvbiBTZXltb3VyIDxqb25AYmxhY2tjdWJlcy5keW5kbnMub3JnPgorSm9uYXRoYW4gTmllZGVyIDxqcm5pZWRlckB1Y2hpY2Fnby5lZHU+CitKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IDxnaXRzdGVyQHBvYm94LmNvbT4KK0p1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gPGp1bmlvQHBvYm94LmNvbT4KK0p1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gPGp1bmlvQHR3aW5zdW4uY29tPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVua2lvQHR3aW5zdW4uY29tPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVuaW9AaGVyYS5rZXJuZWwub3JnPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVuaW9Aa2VybmVsLm9yZz4KK0p1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gPGp1bmtpb0Bjb3gubmV0PgorS2FybCBIYXNzZWxzdHLDtm0gPGtoYUB0cmVza2FsLmNvbT4KK0tlbnQgRW5nc3Ryb20gPGtlbnRAbHlzYXRvci5saXUuc2U+CitMYXJzIERvZWxsZSA8bGFycy5kb2VsbGVAb24tbGluZSAhIGRlPgorTGFycyBEb2VsbGUgPGxhcnMuZG9lbGxlQG9uLWxpbmUuZGU+CitMaSBIb25nIDxsZWVob25nQHBrdS5lZHUuY24+CitMdWthcyBTYW5kc3Ryw7ZtIDxsdWthc3NAZXRlay5jaGFsbWVycy5zZT4KK01hcnRpbiBMYW5naG9mZiA8bWFydGluQGxhcHRvcC5vcmc+CitNYXJ0aW4gdm9uIFp3ZWlnYmVyZ2sgPG1hcnRpbnZvbnpAZ21haWwuY29tPiA8bWFydGluLnZvbi56d2VpZ2JlcmdrQGdtYWlsLmNvbT4KK01pY2hhZWwgQ29sZW1hbiA8dHV0dWZhbkBnbWFpbC5jb20+CitNaWNoYWVsIEogR3J1YmVyIDxnaXRAZHJtaWNoYS53YXJwbWFpbC5uZXQ+IDxtaWNoYWVsamdydWJlcitnbWFuZUBmYXN0bWFpbC5mbT4KK01pY2hhZWwgVy4gT2xzb24gPG13b2xzb25AZ251Lm9yZz4KK01pY2hlbGUgQmFsbGFiaW8gPGJhcnJhX2N1ZGFAa2F0YW1haWwuY29tPgorTmFuYWtvIFNoaXJhaXNoaSA8bmFuYWtvM0BibHVlYm90dGxlLmNvbT4KK05hbmFrbyBTaGlyYWlzaGkgPG5hbmFrbzNAbGF2YWJpdC5jb20+CitOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5IDxwY2xvdWRzQGdtYWlsLmNvbT4KKzxuaWNvQGZsdXhuaWMubmV0PiA8bmljb0BjYW0ub3JnPgorUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+IDxwZXRlckBzdmFydGVuLmludGVybi5zb2Z0d29sdmVzLnBwLnNlPgorUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+IDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorUGhpbGlwcGUgQnJ1aGF0IDxib29rQGNwYW4ub3JnPgorUmFsZiBUaGllbG93IDxyYWxmLnRoaWVsb3dAZ21haWwuY29tPiA8cmFsZi50aGllbG93QGdvb2dsZW1haWwuY29tPgorUmFtc2F5IEFsbGFuIEpvbmVzIDxyYW1zYXlAcmFtc2F5MS5kZW1vbi5jby51az4KK1JlbsOpIFNjaGFyZmUgPHJlbmUuc2NoYXJmZUBsc3JmaXJlLmF0aC5jeD4KK1JvYmVydCBGaXR6c2ltb25zIDxyb2JmaXR6QDI3M2submV0PgorU2FtIFZpbGFpbiA8c2FtQHZpbGFpbi5uZXQ+CitTYW50aSBCw6lqYXIgPHNiZWphckBnbWFpbC5jb20+CitTZWFuIEVzdGFicm9va3MgPHNlYW5sa21sQHN5bXBhdGljby5jYT4KK1NoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KK1N0ZXZlbiBHcmltbSA8a29yZXRoQG1pZHdpbnRlci5jb20+CitUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorVG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50ZWwuY29tPgorVXdlIEtsZWluZS1Lw7ZuaWcgPFV3ZV9aZWlzYmVyZ2VyQGRpZ2kuY29tPgorVXdlIEtsZWluZS1Lw7ZuaWcgPFV3ZS5LbGVpbmUtS29lbmlnQGRpZ2kuY29tPgorVXdlIEtsZWluZS1Lw7ZuaWcgPHVrbGVpbmVrQGluZm9ybWF0aWsudW5pLWZyZWlidXJnLmRlPgorVXdlIEtsZWluZS1Lw7ZuaWcgPHV6ZWlzYmVyZ2VyQGlvLmZzZm9ydGguZGU+CitVd2UgS2xlaW5lLUvDtm5pZyA8emVpc2JlcmdAaW5mb3JtYXRpay51bmktZnJlaWJ1cmcuZGU+CitWaWxsZSBTa3l0dMOkIDxzY29wQHhlbWFjcy5vcmc+CitWaXRhbHkgIl9WaSIgU2h1a2VsYSA8cHVibGljX3ZpQHR1dC5ieT4KK1dpbGxpYW0gUHVyc2VsbCA8YmlsbC5wdXJzZWxsQGdtYWlsLmNvbT4KK1lPU0hJRlVKSSBIaWRlYWtpIDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KK2Fub255bW91cyA8bGludXhAaG9yaXpvbi5jb20+Cithbm9ueW1vdXMgPGxpbnV4QGhvcml6b24ubmV0PgpkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM2ZTU1NQotLS0gL2Rldi9udWxsCisrKyBiL0NPUFlJTkcKQEAgLTAsMCArMSwzNjAgQEAKKworIE5vdGUgdGhhdCB0aGUgb25seSB2YWxpZCB2ZXJzaW9uIG9mIHRoZSBHUEwgYXMgZmFyIGFzIHRoaXMgcHJvamVjdAorIGlzIGNvbmNlcm5lZCBpcyBfdGhpc18gcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIChpZSB2Miwgbm90CisgdjIuMiBvciB2My54IG9yIHdoYXRldmVyKSwgdW5sZXNzIGV4cGxpY2l0bHkgb3RoZXJ3aXNlIHN0YXRlZC4KKworIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorIGEgZ29vZCBpZGVhLCBJIGFsc28gYXNrIHRoYXQgcGVvcGxlIGludm9sdmVkIHdpdGggdGhlIHByb2plY3QgbWFrZQorIHRoZWlyIHByZWZlcmVuY2VzIGtub3duLiBJbiBwYXJ0aWN1bGFyLCBpZiB5b3UgdHJ1c3QgbWUgdG8gbWFrZSB0aGF0CisgZGVjaXNpb24sIHlvdSBtaWdodCBub3RlIHNvIGluIHlvdXIgY29weXJpZ2h0IG1lc3NhZ2UsIGllIHNvbWV0aGluZworIGxpa2UKKworCVRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KKwlhdCB0aGUgZGlzY3JldGlvbiBvZiBMaW51cy4KKworICBtaWdodCBhdm9pZCBpc3N1ZXMuIEJ1dCB3ZSBjYW4gYWxzbyBqdXN0IGRlY2lkZSB0byBzeW5jaHJvbml6ZSBhbmQKKyAgY29udGFjdCBhbGwgY29weXJpZ2h0IGhvbGRlcnMgb24gcmVjb3JkIGlmL3doZW4gdGhlIG9jY2FzaW9uIGFyaXNlcy4KKworCQkJTGludXMgVG9ydmFsZHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vLmdpdGF0dHJpYnV0ZXMgYi9Eb2N1bWVudGF0aW9uLy5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYjAzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKKyoudHh0IHdoaXRlc3BhY2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjJhZWJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTIgQEAKKyoueG1sCisqLmh0bWwKKyouWzEtOF0KKyoubWFkZQorKi50ZXhpCisqLnBkZgorZ2l0LmluZm8KK2dpdG1hbi5pbmZvCitob3d0by1pbmRleC50eHQKK2RvYy5kZXAKK2NtZHMtKi50eHQKK21hbnBhZ2UtYmFzZS11cmwueHNsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkYTZhYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcwpAQCAtMCwwICsxLDIyNCBAQAorTGlrZSBvdGhlciBwcm9qZWN0cywgd2UgYWxzbyBoYXZlIHNvbWUgZ3VpZGVsaW5lcyB0byBrZWVwIHRvIHRoZQorY29kZS4gIEZvciBnaXQgaW4gZ2VuZXJhbCwgdGhyZWUgcm91Z2ggcnVsZXMgYXJlOgorCisgLSBNb3N0IGltcG9ydGFudGx5LCB3ZSBuZXZlciBzYXkgIkl0J3MgaW4gUE9TSVg7IHdlJ2xsIGhhcHBpbHkKKyAgIGlnbm9yZSB5b3VyIG5lZWRzIHNob3VsZCB5b3VyIHN5c3RlbSBub3QgY29uZm9ybSB0byBpdC4iCisgICBXZSBsaXZlIGluIHRoZSByZWFsIHdvcmxkLgorCisgLSBIb3dldmVyLCB3ZSBvZnRlbiBzYXkgIkxldCdzIHN0YXkgYXdheSBmcm9tIHRoYXQgY29uc3RydWN0LAorICAgaXQncyBub3QgZXZlbiBpbiBQT1NJWCIuCisKKyAtIEluIHNwaXRlIG9mIHRoZSBhYm92ZSB0d28gcnVsZXMsIHdlIHNvbWV0aW1lcyBzYXkgIkFsdGhvdWdoCisgICB0aGlzIGlzIG5vdCBpbiBQT1NJWCwgaXQgKGlzIHNvIGNvbnZlbmllbnQgfCBtYWtlcyB0aGUgY29kZQorICAgbXVjaCBtb3JlIHJlYWRhYmxlIHwgaGFzIG90aGVyIGdvb2QgY2hhcmFjdGVyaXN0aWNzKSBhbmQKKyAgIHByYWN0aWNhbGx5IGFsbCB0aGUgcGxhdGZvcm1zIHdlIGNhcmUgYWJvdXQgc3VwcG9ydCBpdCwgc28KKyAgIGxldCdzIHVzZSBpdCIuCisKKyAgIEFnYWluLCB3ZSBsaXZlIGluIHRoZSByZWFsIHdvcmxkLCBhbmQgaXQgaXMgc29tZXRpbWVzIGEKKyAgIGp1ZGdlbWVudCBjYWxsLCB0aGUgZGVjaXNpb24gYmFzZWQgbW9yZSBvbiByZWFsIHdvcmxkCisgICBjb25zdHJhaW50cyBwZW9wbGUgZmFjZSB0aGFuIHdoYXQgdGhlIHBhcGVyIHN0YW5kYXJkIHNheXMuCisKKworQXMgZm9yIG1vcmUgY29uY3JldGUgZ3VpZGVsaW5lcywganVzdCBpbWl0YXRlIHRoZSBleGlzdGluZyBjb2RlCisodGhpcyBpcyBhIGdvb2QgZ3VpZGVsaW5lLCBubyBtYXR0ZXIgd2hpY2ggcHJvamVjdCB5b3UgYXJlCitjb250cmlidXRpbmcgdG8pLiBJdCBpcyBhbHdheXMgcHJlZmVyYWJsZSB0byBtYXRjaCB0aGUgX2xvY2FsXworY29udmVudGlvbi4gTmV3IGNvZGUgYWRkZWQgdG8gZ2l0IHN1aXRlIGlzIGV4cGVjdGVkIHRvIG1hdGNoCit0aGUgb3ZlcmFsbCBzdHlsZSBvZiBleGlzdGluZyBjb2RlLiBNb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nCitjb2RlIGlzIGV4cGVjdGVkIHRvIG1hdGNoIHRoZSBzdHlsZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbHJlYWR5Cit1c2VzIChldmVuIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG92ZXJhbGwgc3R5bGUgb2YgZXhpc3RpbmcgY29kZSkuCisKK0J1dCBpZiB5b3UgbXVzdCBoYXZlIGEgbGlzdCBvZiBydWxlcywgaGVyZSB0aGV5IGFyZS4KKworRm9yIHNoZWxsIHNjcmlwdHMgc3BlY2lmaWNhbGx5IChub3QgZXhoYXVzdGl2ZSk6CisKKyAtIFdlIHVzZSB0YWJzIGZvciBpbmRlbnRhdGlvbi4KKworIC0gQ2FzZSBhcm1zIGFyZSBpbmRlbnRlZCBhdCB0aGUgc2FtZSBkZXB0aCBhcyBjYXNlIGFuZCBlc2FjIGxpbmVzLgorCisgLSBSZWRpcmVjdGlvbiBvcGVyYXRvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gd2l0aCBzcGFjZSBiZWZvcmUsIGJ1dCBubworICAgc3BhY2UgYWZ0ZXIgdGhlbS4gIEluIG90aGVyIHdvcmRzLCB3cml0ZSAnZWNobyB0ZXN0ID4iJGZpbGUiJworICAgaW5zdGVhZCBvZiAnZWNobyB0ZXN0PiAkZmlsZScgb3IgJ2VjaG8gdGVzdCA+ICRmaWxlJy4gIE5vdGUgdGhhdAorICAgZXZlbiB0aG91Z2ggaXQgaXMgbm90IHJlcXVpcmVkIGJ5IFBPU0lYIHRvIGRvdWJsZS1xdW90ZSB0aGUKKyAgIHJlZGlyZWN0aW9uIHRhcmdldCBpbiBhIHZhcmlhYmxlIChhcyBzaG93biBhYm92ZSksIG91ciBjb2RlIGRvZXMgc28KKyAgIGJlY2F1c2Ugc29tZSB2ZXJzaW9ucyBvZiBiYXNoIGlzc3VlIGEgd2FybmluZyB3aXRob3V0IHRoZSBxdW90ZXMuCisKKyAtIFdlIHByZWZlciAkKCAuLi4gKSBmb3IgY29tbWFuZCBzdWJzdGl0dXRpb247IHVubGlrZSBgYCwgaXQKKyAgIHByb3Blcmx5IG5lc3RzLiAgSXQgc2hvdWxkIGhhdmUgYmVlbiB0aGUgd2F5IEJvdXJuZSBzcGVsbGVkCisgICBpdCBmcm9tIGRheSBvbmUsIGJ1dCB1bmZvcnR1bmF0ZWx5IGlzbid0LgorCisgLSBJZiB5b3Ugd2FudCB0byBmaW5kIG91dCBpZiBhIGNvbW1hbmQgaXMgYXZhaWxhYmxlIG9uIHRoZSB1c2VyJ3MKKyAgICRQQVRILCB5b3Ugc2hvdWxkIHVzZSAndHlwZSA8Y29tbWFuZD4nLCBpbnN0ZWFkIG9mICd3aGljaCA8Y29tbWFuZD4nLgorICAgVGhlIG91dHB1dCBvZiAnd2hpY2gnIGlzIG5vdCBtYWNoaW5lIHBhcnNlYWJsZSBhbmQgaXRzIGV4aXQgY29kZQorICAgaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuCisKKyAtIFdlIHVzZSBQT1NJWCBjb21wbGlhbnQgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbnMgYW5kIGF2b2lkIGJhc2hpc21zOworICAgbmFtZWx5OgorCisgICAtIFdlIHVzZSAke3BhcmFtZXRlci13b3JkfSBhbmQgaXRzIFstPT8rXSBzaWJsaW5ncywgYW5kIHRoZWlyCisgICAgIGNvbG9uJ2VkICJ1bnNldCBvciBudWxsIiBmb3JtLgorCisgICAtIFdlIHVzZSAke3BhcmFtZXRlciN3b3JkfSBhbmQgaXRzIFsjJV0gc2libGluZ3MsIGFuZCB0aGVpcgorICAgICBkb3VibGVkICJsb25nZXN0IG1hdGNoaW5nIiBmb3JtLgorCisgICAtIE5vICJTdWJzdHJpbmcgRXhwYW5zaW9uIiAke3BhcmFtZXRlcjpvZmZzZXQ6bGVuZ3RofS4KKworICAgLSBObyBzaGVsbCBhcnJheXMuCisKKyAgIC0gTm8gc3RybGVuICR7I3BhcmFtZXRlcn0uCisKKyAgIC0gTm8gcGF0dGVybiByZXBsYWNlbWVudCAke3BhcmFtZXRlci9wYXR0ZXJuL3N0cmluZ30uCisKKyAtIFdlIHVzZSBBcml0aG1ldGljIEV4cGFuc2lvbiAkKCggLi4uICkpLgorCisgLSBJbnNpZGUgQXJpdGhtZXRpYyBFeHBhbnNpb24sIHNwZWxsIHNoZWxsIHZhcmlhYmxlcyB3aXRoICQgaW4gZnJvbnQKKyAgIG9mIHRoZW0sIGFzIHNvbWUgc2hlbGxzIGRvIG5vdCBncm9rICQoKHgpKSB3aGlsZSBhY2NlcHRpbmcgJCgoJHgpKQorICAganVzdCBmaW5lIChlLmcuIGRhc2ggb2xkZXIgdGhhbiAwLjUuNCkuCisKKyAtIFdlIGRvIG5vdCB1c2UgUHJvY2VzcyBTdWJzdGl0dXRpb24gPChsaXN0KSBvciA+KGxpc3QpLgorCisgLSBEbyBub3Qgd3JpdGUgY29udHJvbCBzdHJ1Y3R1cmVzIG9uIGEgc2luZ2xlIGxpbmUgd2l0aCBzZW1pY29sb24uCisgICAidGhlbiIgc2hvdWxkIGJlIG9uIHRoZSBuZXh0IGxpbmUgZm9yIGlmIHN0YXRlbWVudHMsIGFuZCAiZG8iCisgICBzaG91bGQgYmUgb24gdGhlIG5leHQgbGluZSBmb3IgIndoaWxlIiBhbmQgImZvciIuCisKKyAtIFdlIHByZWZlciAidGVzdCIgb3ZlciAiWyAuLi4gXSIuCisKKyAtIFdlIGRvIG5vdCB3cml0ZSB0aGUgbm9pc2V3b3JkICJmdW5jdGlvbiIgaW4gZnJvbnQgb2Ygc2hlbGwKKyAgIGZ1bmN0aW9ucy4KKworIC0gV2UgcHJlZmVyIGEgc3BhY2UgYmV0d2VlbiB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIHBhcmVudGhlc2VzLiBUaGUKKyAgIG9wZW5pbmcgInsiIHNob3VsZCBhbHNvIGJlIG9uIHRoZSBzYW1lIGxpbmUuCisgICBFLmcuOiBteV9mdW5jdGlvbiAoKSB7CisKKyAtIEFzIHRvIHVzZSBvZiBncmVwLCBzdGljayB0byBhIHN1YnNldCBvZiBCUkUgKG5hbWVseSwgbm8gXHttLG5cfSwKKyAgIFs6Ol0sIFs9PV0sIG5vciBbLi5dKSBmb3IgcG9ydGFiaWxpdHkuCisKKyAgIC0gV2UgZG8gbm90IHVzZSBce20sblx9OworCisgICAtIFdlIGRvIG5vdCB1c2UgLUU7CisKKyAgIC0gV2UgZG8gbm90IHVzZSA/IG5vciArICh3aGljaCBhcmUgXHswLDFcfSBhbmQgXHsxLFx9CisgICAgIHJlc3BlY3RpdmVseSBpbiBCUkUpIGJ1dCB0aGF0IGdvZXMgd2l0aG91dCBzYXlpbmcgYXMgdGhlc2UKKyAgICAgYXJlIEVSRSBlbGVtZW50cyBub3QgQlJFIChub3RlIHRoYXQgXD8gYW5kIFwrIGFyZSBub3QgZXZlbiBwYXJ0CisgICAgIG9mIEJSRSAtLSBtYWtpbmcgdGhlbSBhY2Nlc3NpYmxlIGZyb20gQlJFIGlzIGEgR05VIGV4dGVuc2lvbikuCisKKyAtIFVzZSBHaXQncyBnZXR0ZXh0IHdyYXBwZXJzIGluIGdpdC1zaC1pMThuIHRvIG1ha2UgdGhlIHVzZXIKKyAgIGludGVyZmFjZSB0cmFuc2xhdGFibGUuIFNlZSAiTWFya2luZyBzdHJpbmdzIGZvciB0cmFuc2xhdGlvbiIgaW4KKyAgIHBvL1JFQURNRS4KKworRm9yIEMgcHJvZ3JhbXM6CisKKyAtIFdlIHVzZSB0YWJzIHRvIGluZGVudCwgYW5kIGludGVycHJldCB0YWJzIGFzIHRha2luZyB1cCB0bworICAgOCBzcGFjZXMuCisKKyAtIFdlIHRyeSB0byBrZWVwIHRvIGF0IG1vc3QgODAgY2hhcmFjdGVycyBwZXIgbGluZS4KKworIC0gV2hlbiBkZWNsYXJpbmcgcG9pbnRlcnMsIHRoZSBzdGFyIHNpZGVzIHdpdGggdGhlIHZhcmlhYmxlCisgICBuYW1lLCBpLmUuICJjaGFyICpzdHJpbmciLCBub3QgImNoYXIqIHN0cmluZyIgb3IKKyAgICJjaGFyICogc3RyaW5nIi4gIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHVuZGVyc3RhbmQgY29kZQorICAgbGlrZSAiY2hhciAqc3RyaW5nLCBjOyIuCisKKyAtIFdlIGF2b2lkIHVzaW5nIGJyYWNlcyB1bm5lY2Vzc2FyaWx5LiAgSS5lLgorCisJaWYgKGJsYSkgeworCQl4ID0gMTsKKwl9CisKKyAgIGlzIGZyb3duZWQgdXBvbi4gIEEgZ3JheSBhcmVhIGlzIHdoZW4gdGhlIHN0YXRlbWVudCBleHRlbmRzCisgICBvdmVyIGEgZmV3IGxpbmVzLCBhbmQvb3IgeW91IGhhdmUgYSBsZW5ndGh5IGNvbW1lbnQgYXRvcCBvZgorICAgaXQuICBBbHNvLCBsaWtlIGluIHRoZSBMaW51eCBrZXJuZWwsIGlmIHRoZXJlIGlzIGEgbG9uZyBsaXN0CisgICBvZiAiZWxzZSBpZiIgc3RhdGVtZW50cywgaXQgY2FuIG1ha2Ugc2Vuc2UgdG8gYWRkIGJyYWNlcyB0bworICAgc2luZ2xlIGxpbmUgYmxvY2tzLgorCisgLSBXZSB0cnkgdG8gYXZvaWQgYXNzaWdubWVudHMgaW5zaWRlIGlmKCkuCisKKyAtIFRyeSB0byBtYWtlIHlvdXIgY29kZSB1bmRlcnN0YW5kYWJsZS4gIFlvdSBtYXkgcHV0IGNvbW1lbnRzCisgICBpbiwgYnV0IGNvbW1lbnRzIGludmFyaWFibHkgdGVuZCB0byBzdGFsZSBvdXQgd2hlbiB0aGUgY29kZQorICAgdGhleSB3ZXJlIGRlc2NyaWJpbmcgY2hhbmdlcy4gIE9mdGVuIHNwbGl0dGluZyBhIGZ1bmN0aW9uCisgICBpbnRvIHR3byBtYWtlcyB0aGUgaW50ZW50aW9uIG9mIHRoZSBjb2RlIG11Y2ggY2xlYXJlci4KKworIC0gRG91YmxlIG5lZ2F0aW9uIGlzIG9mdGVuIGhhcmRlciB0byB1bmRlcnN0YW5kIHRoYW4gbm8gbmVnYXRpb24KKyAgIGF0IGFsbC4KKworIC0gU29tZSBjbGV2ZXIgdHJpY2tzLCBsaWtlIHVzaW5nIHRoZSAhISBvcGVyYXRvciB3aXRoIGFyaXRobWV0aWMKKyAgIGNvbnN0cnVjdHMsIGNhbiBiZSBleHRyZW1lbHkgY29uZnVzaW5nIHRvIG90aGVycy4gIEF2b2lkIHRoZW0sCisgICB1bmxlc3MgdGhlcmUgaXMgYSBjb21wZWxsaW5nIHJlYXNvbiB0byB1c2UgdGhlbS4KKworIC0gVXNlIHRoZSBBUEkuICBObywgcmVhbGx5LiAgV2UgaGF2ZSBhIHN0cmJ1ZiAodmFyaWFibGUgbGVuZ3RoCisgICBzdHJpbmcpLCBzZXZlcmFsIGFycmF5cyB3aXRoIHRoZSBBTExPQ19HUk9XKCkgbWFjcm8sIGEKKyAgIHN0cmluZ19saXN0IGZvciBzb3J0ZWQgc3RyaW5nIGxpc3RzLCBhIGhhc2ggbWFwIChtYXBwaW5nIHN0cnVjdAorICAgb2JqZWN0cykgbmFtZWQgInN0cnVjdCBkZWNvcmF0ZSIsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLgorCisgLSBXaGVuIHlvdSBjb21lIHVwIHdpdGggYW4gQVBJLCBkb2N1bWVudCBpdC4KKworIC0gVGhlIGZpcnN0ICNpbmNsdWRlIGluIEMgZmlsZXMsIGV4Y2VwdCBpbiBwbGF0Zm9ybSBzcGVjaWZpYworICAgY29tcGF0LyBpbXBsZW1lbnRhdGlvbnMsIHNob3VsZCBiZSBnaXQtY29tcGF0LXV0aWwuaCBvciBhbm90aGVyCisgICBoZWFkZXIgZmlsZSB0aGF0IGluY2x1ZGVzIGl0LCBzdWNoIGFzIGNhY2hlLmggb3IgYnVpbHRpbi5oLgorCisgLSBJZiB5b3UgYXJlIHBsYW5uaW5nIGEgbmV3IGNvbW1hbmQsIGNvbnNpZGVyIHdyaXRpbmcgaXQgaW4gc2hlbGwKKyAgIG9yIHBlcmwgZmlyc3QsIHNvIHRoYXQgY2hhbmdlcyBpbiBzZW1hbnRpY3MgY2FuIGJlIGVhc2lseQorICAgY2hhbmdlZCBhbmQgZGlzY3Vzc2VkLiAgTWFueSBnaXQgY29tbWFuZHMgc3RhcnRlZCBvdXQgbGlrZQorICAgdGhhdCwgYW5kIGEgZmV3IGFyZSBzdGlsbCBzY3JpcHRzLgorCisgLSBBdm9pZCBpbnRyb2R1Y2luZyBhIG5ldyBkZXBlbmRlbmN5IGludG8gZ2l0LiBUaGlzIG1lYW5zIHlvdQorICAgdXN1YWxseSBzaG91bGQgc3RheSBhd2F5IGZyb20gc2NyaXB0aW5nIGxhbmd1YWdlcyBub3QgYWxyZWFkeQorICAgdXNlZCBpbiB0aGUgZ2l0IGNvcmUgY29tbWFuZCBzZXQgKHVubGVzcyB5b3VyIGNvbW1hbmQgaXMgY2xlYXJseQorICAgc2VwYXJhdGUgZnJvbSBpdCwgc3VjaCBhcyBhbiBpbXBvcnRlciB0byBjb252ZXJ0IHJhbmRvbS1zY20tWAorICAgcmVwb3NpdG9yaWVzIHRvIGdpdCkuCisKKyAtIFdoZW4gd2UgcGFzcyA8c3RyaW5nLCBsZW5ndGg+IHBhaXIgdG8gZnVuY3Rpb25zLCB3ZSBzaG91bGQgdHJ5IHRvCisgICBwYXNzIHRoZW0gaW4gdGhhdCBvcmRlci4KKworIC0gVXNlIEdpdCdzIGdldHRleHQgd3JhcHBlcnMgdG8gbWFrZSB0aGUgdXNlciBpbnRlcmZhY2UKKyAgIHRyYW5zbGF0YWJsZS4gU2VlICJNYXJraW5nIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uIiBpbiBwby9SRUFETUUuCisKK1dyaXRpbmcgRG9jdW1lbnRhdGlvbjoKKworIEV2ZXJ5IHVzZXItdmlzaWJsZSBjaGFuZ2Ugc2hvdWxkIGJlIHJlZmxlY3RlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyBUaGUgc2FtZSBnZW5lcmFsIHJ1bGUgYXMgZm9yIGNvZGUgYXBwbGllcyAtLSBpbWl0YXRlIHRoZSBleGlzdGluZworIGNvbnZlbnRpb25zLiAgQSBmZXcgY29tbWVudGVkIGV4YW1wbGVzIGZvbGxvdyB0byBwcm92aWRlIHJlZmVyZW5jZQorIHdoZW4gd3JpdGluZyBvciBtb2RpZnlpbmcgY29tbWFuZCB1c2FnZSBzdHJpbmdzIGFuZCBzeW5vcHNpcyBzZWN0aW9ucworIGluIHRoZSBtYW51YWwgcGFnZXM6CisKKyBQbGFjZWhvbGRlcnMgYXJlIHNwZWxsZWQgaW4gbG93ZXJjYXNlIGFuZCBlbmNsb3NlZCBpbiBhbmdsZSBicmFja2V0czoKKyAgIDxmaWxlPgorICAgLS1zb3J0PTxrZXk+CisgICAtLWFiYnJldls9PG4+XQorCisgUG9zc2liaWxpdHkgb2YgbXVsdGlwbGUgb2NjdXJyZW5jZXMgaXMgaW5kaWNhdGVkIGJ5IHRocmVlIGRvdHM6CisgICA8ZmlsZT4uLi4KKyAgIChPbmUgb3IgbW9yZSBvZiA8ZmlsZT4uKQorCisgT3B0aW9uYWwgcGFydHMgYXJlIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0czoKKyAgIFs8ZXh0cmE+XQorICAgKFplcm8gb3Igb25lIDxleHRyYT4uKQorCisgICAtLWV4ZWMtcGF0aFs9PHBhdGg+XQorICAgKE9wdGlvbiB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50LiAgTm90ZSB0aGF0IHRoZSAiPSIgaXMgaW5zaWRlIHRoZQorICAgYnJhY2tldHMuKQorCisgICBbPHBhdGNoPi4uLl0KKyAgIChaZXJvIG9yIG1vcmUgb2YgPHBhdGNoPi4gIE5vdGUgdGhhdCB0aGUgZG90cyBhcmUgaW5zaWRlLCBub3QKKyAgIG91dHNpZGUgdGhlIGJyYWNrZXRzLikKKworIE11bHRpcGxlIGFsdGVybmF0aXZlcyBhcmUgaW5kaWNhdGVkIHdpdGggdmVydGljYWwgYmFyOgorICAgWy1xIHwgLS1xdWlldF0KKyAgIFstLXV0ZjggfCAtLW5vLXV0ZjhdCisKKyBQYXJlbnRoZXNlcyBhcmUgdXNlZCBmb3IgZ3JvdXBpbmc6CisgICBbKDxyZXY+fDxyYW5nZT4pLi4uXQorICAgKEFueSBudW1iZXIgb2YgZWl0aGVyIDxyZXY+IG9yIDxyYW5nZT4uICBQYXJlbnMgYXJlIG5lZWRlZCB0byBtYWtlCisgICBpdCBjbGVhciB0aGF0ICIuLi4iIHBlcnRhaW5zIHRvIGJvdGggPHJldj4gYW5kIDxyYW5nZT4uKQorCisgICBbKC1wIDxwYXJlbnQ+KS4uLl0KKyAgIChBbnkgbnVtYmVyIG9mIG9wdGlvbiAtcCwgZWFjaCB3aXRoIG9uZSA8cGFyZW50PiBhcmd1bWVudC4pCisKKyAgIGdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC1kIHwgPGJyYW5jaD4pCisgICAoT25lIGFuZCBvbmx5IG9uZSBvZiAiLWEiLCAiLWQiIG9yICI8YnJhbmNoPiIgX211c3RfIChubyBzcXVhcmUKKyAgIGJyYWNrZXRzKSBiZSBwcm92aWRlZC4pCisKKyBBbmQgYSBzb21ld2hhdCBtb3JlIGNvbnRyaXZlZCBleGFtcGxlOgorICAgLS1kaWZmLWZpbHRlcj1bKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0KKyAgIEhlcmUgIj0iIGlzIG91dHNpZGUgdGhlIGJyYWNrZXRzLCBiZWNhdXNlICItLWRpZmYtZmlsdGVyPSIgaXMgYQorICAgdmFsaWQgdXNhZ2UuICAiKiIgaGFzIGl0cyBvd24gcGFpciBvZiBicmFja2V0cywgYmVjYXVzZSBpdCBjYW4KKyAgIChvcHRpb25hbGx5KSBiZSBzcGVjaWZpZWQgb25seSB3aGVuIG9uZSBvciBtb3JlIG9mIHRoZSBsZXR0ZXJzIGlzCisgICBhbHNvIHByb3ZpZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3ZGZlMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKQEAgLTAsMCArMSwzNTEgQEAKK01BTjFfVFhUPSBcCisJJChmaWx0ZXItb3V0ICQoYWRkc3VmZml4IC50eHQsICQoQVJUSUNMRVMpICQoU1BfQVJUSUNMRVMpKSwgXAorCQkkKHdpbGRjYXJkIGdpdC0qLnR4dCkpIFwKKwlnaXRrLnR4dCBnaXR3ZWIudHh0IGdpdC50eHQKK01BTjVfVFhUPWdpdGF0dHJpYnV0ZXMudHh0IGdpdGlnbm9yZS50eHQgZ2l0bW9kdWxlcy50eHQgZ2l0aG9va3MudHh0IFwKKwlnaXRyZXBvc2l0b3J5LWxheW91dC50eHQgZ2l0d2ViLmNvbmYudHh0CitNQU43X1RYVD1naXRjbGkudHh0IGdpdHR1dG9yaWFsLnR4dCBnaXR0dXRvcmlhbC0yLnR4dCBcCisJZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQgZ2l0Y29yZS10dXRvcmlhbC50eHQgZ2l0Z2xvc3NhcnkudHh0IFwKKwlnaXRkaWZmY29yZS50eHQgZ2l0bmFtZXNwYWNlcy50eHQgZ2l0cmV2aXNpb25zLnR4dCBnaXR3b3JrZmxvd3MudHh0CitNQU43X1RYVCArPSBnaXRjcmVkZW50aWFscy50eHQKKworTUFOX1RYVCA9ICQoTUFOMV9UWFQpICQoTUFONV9UWFQpICQoTUFON19UWFQpCitNQU5fWE1MPSQocGF0c3Vic3QgJS50eHQsJS54bWwsJChNQU5fVFhUKSkKK01BTl9IVE1MPSQocGF0c3Vic3QgJS50eHQsJS5odG1sLCQoTUFOX1RYVCkpCisKK0RPQ19IVE1MPSQoTUFOX0hUTUwpCisKK0FSVElDTEVTID0gaG93dG8taW5kZXgKK0FSVElDTEVTICs9IGV2ZXJ5ZGF5CitBUlRJQ0xFUyArPSBnaXQtdG9vbHMKK0FSVElDTEVTICs9IGdpdC1iaXNlY3QtbGsyMDA5CisjIHdpdGggdGhlaXIgb3duIGZvcm1hdHRpbmcgcnVsZXMuCitTUF9BUlRJQ0xFUyA9IHVzZXItbWFudWFsCitTUF9BUlRJQ0xFUyArPSBob3d0by9yZXZlcnQtYnJhbmNoLXJlYmFzZQorU1BfQVJUSUNMRVMgKz0gaG93dG8vdXNpbmctbWVyZ2Utc3VidHJlZQorU1BfQVJUSUNMRVMgKz0gaG93dG8vdXNpbmctc2lnbmVkLXRhZy1pbi1wdWxsLXJlcXVlc3QKK0FQSV9ET0NTID0gJChwYXRzdWJzdCAlLnR4dCwlLCQoZmlsdGVyLW91dCB0ZWNobmljYWwvYXBpLWluZGV4LXNrZWwudHh0IHRlY2huaWNhbC9hcGktaW5kZXgudHh0LCAkKHdpbGRjYXJkIHRlY2huaWNhbC9hcGktKi50eHQpKSkKK1NQX0FSVElDTEVTICs9ICQoQVBJX0RPQ1MpCitTUF9BUlRJQ0xFUyArPSB0ZWNobmljYWwvYXBpLWluZGV4CisKK0RPQ19IVE1MICs9ICQocGF0c3Vic3QgJSwlLmh0bWwsJChBUlRJQ0xFUykgJChTUF9BUlRJQ0xFUykpCisKK0RPQ19NQU4xPSQocGF0c3Vic3QgJS50eHQsJS4xLCQoTUFOMV9UWFQpKQorRE9DX01BTjU9JChwYXRzdWJzdCAlLnR4dCwlLjUsJChNQU41X1RYVCkpCitET0NfTUFONz0kKHBhdHN1YnN0ICUudHh0LCUuNywkKE1BTjdfVFhUKSkKKworcHJlZml4Pz0kKEhPTUUpCitiaW5kaXI/PSQocHJlZml4KS9iaW4KK2h0bWxkaXI/PSQocHJlZml4KS9zaGFyZS9kb2MvZ2l0LWRvYworcGRmZGlyPz0kKHByZWZpeCkvc2hhcmUvZG9jL2dpdC1kb2MKK21hbmRpcj89JChwcmVmaXgpL3NoYXJlL21hbgorbWFuMWRpcj0kKG1hbmRpcikvbWFuMQorbWFuNWRpcj0kKG1hbmRpcikvbWFuNQorbWFuN2Rpcj0kKG1hbmRpcikvbWFuNworIyBERVNURElSPQorCitBU0NJSURPQyA9IGFzY2lpZG9jCitBU0NJSURPQ19FWFRSQSA9CitNQU5QQUdFX1hTTCA9IG1hbnBhZ2Utbm9ybWFsLnhzbAorWE1MVE8gPSB4bWx0bworWE1MVE9fRVhUUkEgPQorSU5TVEFMTD89aW5zdGFsbAorUk0gPz0gcm0gLWYKK01BTl9SRVBPID0gLi4vLi4vZ2l0LW1hbnBhZ2VzCitIVE1MX1JFUE8gPSAuLi8uLi9naXQtaHRtbGRvY3MKKworaW5mb2Rpcj89JChwcmVmaXgpL3NoYXJlL2luZm8KK01BS0VJTkZPPW1ha2VpbmZvCitJTlNUQUxMX0lORk89aW5zdGFsbC1pbmZvCitET0NCT09LMlhfVEVYST1kb2Nib29rMngtdGV4aQorREJMQVRFWD1kYmxhdGV4CitpZm5kZWYgUEVSTF9QQVRICisJUEVSTF9QQVRIID0gL3Vzci9iaW4vcGVybAorZW5kaWYKKworLWluY2x1ZGUgLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi9jb25maWcubWFrCisKKyMKKyMgRm9yIGRvY2Jvb2steHNsIC4uLgorIwktMS42OC4xLAlubyBleHRyYSBzZXR0aW5ncyBhcmUgbmVlZGVkPworIwkxLjY5LjAsCQlzZXQgQVNDSUlET0NfUk9GRj8KKyMJMS42OS4xLTEuNzEuMCwJc2V0IERPQ0JPT0tfU1VQUFJFU1NfU1A/CisjCTEuNzEuMSwJCXNldCBBU0NJSURPQ19ST0ZGPworIwkxLjcyLjAsCQlzZXQgRE9DQk9PS19YU0xfMTcyLgorIwkxLjczLjAtLAlubyBleHRyYSBzZXR0aW5ncyBhcmUgbmVlZGVkCisjCisKK2lmZGVmIERPQ0JPT0tfWFNMXzE3MgorQVNDSUlET0NfRVhUUkEgKz0gLWEgZ2l0LWFzY2lpZG9jLW5vLXJvZmYKK01BTlBBR0VfWFNMID0gbWFucGFnZS0xLjcyLnhzbAorZWxzZQorCWlmbmRlZiBBU0NJSURPQ19ST0ZGCisJIyBkb2Nib29rLXhzbCBhZnRlciAxLjcyIG5lZWRzIHRoZSByZWd1bGFyIFhTTCwgYnV0IHdpbGwgbm90CisJIyBwYXNzLXRocnUgcmF3IHJvZmYgY29kZXMgZnJvbSBhc2NpaWRvYy5jb25mLCBzbyB0dXJuIHRoZW0gb2ZmLgorCUFTQ0lJRE9DX0VYVFJBICs9IC1hIGdpdC1hc2NpaWRvYy1uby1yb2ZmCisJZW5kaWYKK2VuZGlmCitpZmRlZiBNQU5fQk9MRF9MSVRFUkFMCitYTUxUT19FWFRSQSArPSAtbSBtYW5wYWdlLWJvbGQtbGl0ZXJhbC54c2wKK2VuZGlmCitpZmRlZiBET0NCT09LX1NVUFBSRVNTX1NQCitYTUxUT19FWFRSQSArPSAtbSBtYW5wYWdlLXN1cHByZXNzLXNwLnhzbAorZW5kaWYKKworIyBOZXdlciBEb2NCb29rIHN0eWxlc2hlZXQgZW1pdHMgd2FybmluZyBjcnVmdCBpbiB0aGUgb3V0cHV0IHdoZW4KKyMgdGhpcyBpcyBub3Qgc2V0LCBhbmQgaWYgc2V0IGl0IHNob3dzIGFuIGFic29sdXRlIGxpbmsuICBPbGRlcgorIyBzdHlsZXNoZWV0cyBzaW1wbHkgaWdub3JlIHRoaXMgcGFyYW1ldGVyLgorIworIyBEaXN0cm9zIG1heSB3YW50IHRvIHVzZSBNQU5fQkFTRV9VUkw9ZmlsZTovLy9wYXRoL3RvL2dpdC9kb2NzLworIyBvciBzaW1pbGFyLgoraWZuZGVmIE1BTl9CQVNFX1VSTAorTUFOX0JBU0VfVVJMID0gZmlsZTovLyQoaHRtbGRpcikvCitlbmRpZgorWE1MVE9fRVhUUkEgKz0gLW0gbWFucGFnZS1iYXNlLXVybC54c2wKKworIyBJZiB5b3VyIHRhcmdldCBzeXN0ZW0gdXNlcyBHTlUgZ3JvZmYsIGl0IG1heSB0cnkgdG8gcmVuZGVyCisjIGFwb3N0cm9waGVzIGFzIGEgInByZXR0eSIgYXBvc3Ryb3BoZSB1c2luZyB1bmljb2RlLiAgVGhpcyBicmVha3MKKyMgY3V0JnBhc3RlLCBzbyB5b3Ugc2hvdWxkIHNldCBHTlVfUk9GRiB0byBmb3JjZSB0aGVtIHRvIGJlIEFTQ0lJCisjIGFwb3N0cm9waGVzLiAgVW5mb3J0dW5hdGVseSBkb2VzIG5vdCB3b3JrIHdpdGggbm9uLUdOVSByb2ZmLgoraWZkZWYgR05VX1JPRkYKK1hNTFRPX0VYVFJBICs9IC1tIG1hbnBhZ2UtcXVvdGUtYXBvcy54c2wKK2VuZGlmCisKK1NIRUxMX1BBVEggPz0gJChTSEVMTCkKKyMgU2hlbGwgcXVvdGU7CitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKKworaWZkZWYgREVGQVVMVF9QQUdFUgorREVGQVVMVF9QQUdFUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVGQVVMVF9QQUdFUikpCitBU0NJSURPQ19FWFRSQSArPSAtYSAnZ2l0LWRlZmF1bHQtcGFnZXI9JChERUZBVUxUX1BBR0VSX1NRKScKK2VuZGlmCisKK2lmZGVmIERFRkFVTFRfRURJVE9SCitERUZBVUxUX0VESVRPUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVGQVVMVF9FRElUT1IpKQorQVNDSUlET0NfRVhUUkEgKz0gLWEgJ2dpdC1kZWZhdWx0LWVkaXRvcj0kKERFRkFVTFRfRURJVE9SX1NRKScKK2VuZGlmCisKK1FVSUVUX1NVQkRJUjAgID0gKyQoTUFLRSkgLUMgIyBzcGFjZSB0byBzZXBhcmF0ZSAtQyBhbmQgc3ViZGlyCitRVUlFVF9TVUJESVIxICA9CisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHcpLHcpCitQUklOVF9ESVIgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorZWxzZSAjICJtYWtlIC13IgorTk9fU1VCRElSID0gOgorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK2lmbmRlZiBWCisJUVVJRVRfQVNDSUlET0MJPSBAZWNobyAnICAgJyBBU0NJSURPQyAkQDsKKwlRVUlFVF9YTUxUTwk9IEBlY2hvICcgICAnIFhNTFRPICRAOworCVFVSUVUX0RCMlRFWEkJPSBAZWNobyAnICAgJyBEQjJURVhJICRAOworCVFVSUVUX01BS0VJTkZPCT0gQGVjaG8gJyAgICcgTUFLRUlORk8gJEA7CisJUVVJRVRfREJMQVRFWAk9IEBlY2hvICcgICAnIERCTEFURVggJEA7CisJUVVJRVRfWFNMVFBST0MJPSBAZWNobyAnICAgJyBYU0xUUFJPQyAkQDsKKwlRVUlFVF9HRU4JPSBAZWNobyAnICAgJyBHRU4gJEA7CisJUVVJRVRfU1RERVJSCT0gMj4gL2Rldi9udWxsCisJUVVJRVRfU1VCRElSMAk9ICtAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjEJPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCisJCQkgICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCisJZXhwb3J0IFYKK2VuZGlmCitlbmRpZgorCithbGw6IGh0bWwgbWFuCisKK2h0bWw6ICQoRE9DX0hUTUwpCisKKyQoRE9DX0hUTUwpICQoRE9DX01BTjEpICQoRE9DX01BTjUpICQoRE9DX01BTjcpOiBhc2NpaWRvYy5jb25mCisKK21hbjogbWFuMSBtYW41IG1hbjcKK21hbjE6ICQoRE9DX01BTjEpCittYW41OiAkKERPQ19NQU41KQorbWFuNzogJChET0NfTUFONykKKworaW5mbzogZ2l0LmluZm8gZ2l0bWFuLmluZm8KKworcGRmOiB1c2VyLW1hbnVhbC5wZGYKKworaW5zdGFsbDogaW5zdGFsbC1tYW4KKworaW5zdGFsbC1tYW46IG1hbgorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKG1hbjFkaXIpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQobWFuNWRpcikKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChtYW43ZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0ICQoRE9DX01BTjEpICQoREVTVERJUikkKG1hbjFkaXIpCisJJChJTlNUQUxMKSAtbSA2NDQgJChET0NfTUFONSkgJChERVNURElSKSQobWFuNWRpcikKKwkkKElOU1RBTEwpIC1tIDY0NCAkKERPQ19NQU43KSAkKERFU1RESVIpJChtYW43ZGlyKQorCitpbnN0YWxsLWluZm86IGluZm8KKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChpbmZvZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0IGdpdC5pbmZvIGdpdG1hbi5pbmZvICQoREVTVERJUikkKGluZm9kaXIpCisJaWYgdGVzdCAtciAkKERFU1RESVIpJChpbmZvZGlyKS9kaXI7IHRoZW4gXAorCSAgJChJTlNUQUxMX0lORk8pIC0taW5mby1kaXI9JChERVNURElSKSQoaW5mb2RpcikgZ2l0LmluZm8gO1wKKwkgICQoSU5TVEFMTF9JTkZPKSAtLWluZm8tZGlyPSQoREVTVERJUikkKGluZm9kaXIpIGdpdG1hbi5pbmZvIDtcCisJZWxzZSBcCisJICBlY2hvICJObyBkaXJlY3RvcnkgZm91bmQgaW4gJChERVNURElSKSQoaW5mb2RpcikiID4mMiA7IFwKKwlmaQorCitpbnN0YWxsLXBkZjogcGRmCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQocGRmZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0IHVzZXItbWFudWFsLnBkZiAkKERFU1RESVIpJChwZGZkaXIpCisKK2luc3RhbGwtaHRtbDogaHRtbAorCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtd2ViZG9jLnNoICQoREVTVERJUikkKGh0bWxkaXIpCisKKy4uL0dJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCisJJChRVUlFVF9TVUJESVIwKS4uLyAkKFFVSUVUX1NVQkRJUjEpIEdJVC1WRVJTSU9OLUZJTEUKKworLWluY2x1ZGUgLi4vR0lULVZFUlNJT04tRklMRQorCisjCisjIERldGVybWluZSAiaW5jbHVkZTo6IiBmaWxlIHJlZmVyZW5jZXMgaW4gYXNjaWlkb2MgZmlsZXMuCisjCitkb2MuZGVwIDogJCh3aWxkY2FyZCAqLnR4dCkgYnVpbGQtZG9jZGVwLnBlcmwKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCsgJEAgJiYgXAorCSQoUEVSTF9QQVRIKSAuL2J1aWxkLWRvY2RlcC5wZXJsID4kQCsgJChRVUlFVF9TVERFUlIpICYmIFwKKwltdiAkQCsgJEAKKworLWluY2x1ZGUgZG9jLmRlcAorCitjbWRzX3R4dCA9IGNtZHMtYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycy50eHQgXAorCWNtZHMtYW5jaWxsYXJ5bWFuaXB1bGF0b3JzLnR4dCBcCisJY21kcy1tYWlucG9yY2VsYWluLnR4dCBcCisJY21kcy1wbHVtYmluZ2ludGVycm9nYXRvcnMudHh0IFwKKwljbWRzLXBsdW1iaW5nbWFuaXB1bGF0b3JzLnR4dCBcCisJY21kcy1zeW5jaGluZ3JlcG9zaXRvcmllcy50eHQgXAorCWNtZHMtc3luY2hlbHBlcnMudHh0IFwKKwljbWRzLXB1cmVoZWxwZXJzLnR4dCBcCisJY21kcy1mb3JlaWduc2NtaW50ZXJmYWNlLnR4dAorCiskKGNtZHNfdHh0KTogY21kLWxpc3QubWFkZQorCitjbWQtbGlzdC5tYWRlOiBjbWQtbGlzdC5wZXJsIC4uL2NvbW1hbmQtbGlzdC50eHQgJChNQU4xX1RYVCkKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAmJiBcCisJJChQRVJMX1BBVEgpIC4vY21kLWxpc3QucGVybCAuLi9jb21tYW5kLWxpc3QudHh0ICQoUVVJRVRfU1RERVJSKSAmJiBcCisJZGF0ZSA+JEAKKworY2xlYW46CisJJChSTSkgKi54bWwgKi54bWwrICouaHRtbCAqLmh0bWwrICouMSAqLjUgKi43CisJJChSTSkgKi50ZXhpICoudGV4aSsgKi50ZXhpKysgZ2l0LmluZm8gZ2l0bWFuLmluZm8KKwkkKFJNKSAqLnBkZgorCSQoUk0pIGhvd3RvLWluZGV4LnR4dCBob3d0by8qLmh0bWwgZG9jLmRlcAorCSQoUk0pIHRlY2huaWNhbC9hcGktKi5odG1sIHRlY2huaWNhbC9hcGktaW5kZXgudHh0CisJJChSTSkgJChjbWRzX3R4dCkgKi5tYWRlCisJJChSTSkgbWFucGFnZS1iYXNlLXVybC54c2wKKworJChNQU5fSFRNTCk6ICUuaHRtbCA6ICUudHh0CisJJChRVUlFVF9BU0NJSURPQykkKFJNKSAkQCsgJEAgJiYgXAorCSQoQVNDSUlET0MpIC1iIHhodG1sMTEgLWQgbWFucGFnZSAtZiBhc2NpaWRvYy5jb25mIFwKKwkJJChBU0NJSURPQ19FWFRSQSkgLWFnaXRfdmVyc2lvbj0kKEdJVF9WRVJTSU9OKSAtbyAkQCsgJDwgJiYgXAorCW12ICRAKyAkQAorCittYW5wYWdlLWJhc2UtdXJsLnhzbDogbWFucGFnZS1iYXNlLXVybC54c2wuaW4KKwlzZWQgInN8QEBNQU5fQkFTRV9VUkxAQHwkKE1BTl9CQVNFX1VSTCl8IiAkPCA+ICRACisKKyUuMSAlLjUgJS43IDogJS54bWwgbWFucGFnZS1iYXNlLXVybC54c2wKKwkkKFFVSUVUX1hNTFRPKSQoUk0pICRAICYmIFwKKwkkKFhNTFRPKSAtbSAkKE1BTlBBR0VfWFNMKSAkKFhNTFRPX0VYVFJBKSBtYW4gJDwKKworJS54bWwgOiAlLnR4dAorCSQoUVVJRVRfQVNDSUlET0MpJChSTSkgJEArICRAICYmIFwKKwkkKEFTQ0lJRE9DKSAtYiBkb2Nib29rIC1kIG1hbnBhZ2UgLWYgYXNjaWlkb2MuY29uZiBcCisJCSQoQVNDSUlET0NfRVhUUkEpIC1hZ2l0X3ZlcnNpb249JChHSVRfVkVSU0lPTikgLW8gJEArICQ8ICYmIFwKKwltdiAkQCsgJEAKKwordXNlci1tYW51YWwueG1sOiB1c2VyLW1hbnVhbC50eHQgdXNlci1tYW51YWwuY29uZgorCSQoUVVJRVRfQVNDSUlET0MpJChSTSkgJEArICRAICYmIFwKKwkkKEFTQ0lJRE9DKSAkKEFTQ0lJRE9DX0VYVFJBKSAtYiBkb2Nib29rIC1kIGJvb2sgLW8gJEArICQ8ICYmIFwKKwltdiAkQCsgJEAKKwordGVjaG5pY2FsL2FwaS1pbmRleC50eHQ6IHRlY2huaWNhbC9hcGktaW5kZXgtc2tlbC50eHQgXAorCXRlY2huaWNhbC9hcGktaW5kZXguc2ggJChwYXRzdWJzdCAlLCUudHh0LCQoQVBJX0RPQ1MpKQorCSQoUVVJRVRfR0VOKWNkIHRlY2huaWNhbCAmJiAnJChTSEVMTF9QQVRIX1NRKScgLi9hcGktaW5kZXguc2gKKwordGVjaG5pY2FsLyUuaHRtbDogQVNDSUlET0NfRVhUUkEgKz0gLWEgZ2l0LXJlbGF0aXZlLWh0bWwtcHJlZml4PS4uLworJChwYXRzdWJzdCAlLCUuaHRtbCwkKEFQSV9ET0NTKSB0ZWNobmljYWwvYXBpLWluZGV4KTogJS5odG1sIDogJS50eHQKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoQVNDSUlET0MpIC1iIHhodG1sMTEgLWYgYXNjaWlkb2MuY29uZiBcCisJCSQoQVNDSUlET0NfRVhUUkEpIC1hZ2l0X3ZlcnNpb249JChHSVRfVkVSU0lPTikgJCoudHh0CisKK1hTTFQgPSBkb2Nib29rLnhzbAorWFNMVE9QVFMgPSAtLXhpbmNsdWRlIC0tc3RyaW5ncGFyYW0gaHRtbC5zdHlsZXNoZWV0IGRvY2Jvb2steHNsLmNzcworCit1c2VyLW1hbnVhbC5odG1sOiB1c2VyLW1hbnVhbC54bWwgJChYU0xUKQorCSQoUVVJRVRfWFNMVFBST0MpJChSTSkgJEArICRAICYmIFwKKwl4c2x0cHJvYyAkKFhTTFRPUFRTKSAtbyAkQCsgJChYU0xUKSAkPCAmJiBcCisJbXYgJEArICRACisKK2dpdC5pbmZvOiB1c2VyLW1hbnVhbC50ZXhpCisJJChRVUlFVF9NQUtFSU5GTykkKE1BS0VJTkZPKSAtLW5vLXNwbGl0IC1vICRAIHVzZXItbWFudWFsLnRleGkKKwordXNlci1tYW51YWwudGV4aTogdXNlci1tYW51YWwueG1sCisJJChRVUlFVF9EQjJURVhJKSQoUk0pICRAKyAkQCAmJiBcCisJJChET0NCT09LMlhfVEVYSSkgdXNlci1tYW51YWwueG1sIC0tZW5jb2Rpbmc9VVRGLTggLS10by1zdGRvdXQgPiRAKysgJiYgXAorCSQoUEVSTF9QQVRIKSBmaXgtdGV4aS5wZXJsIDwkQCsrID4kQCsgJiYgXAorCXJtICRAKysgJiYgXAorCW12ICRAKyAkQAorCit1c2VyLW1hbnVhbC5wZGY6IHVzZXItbWFudWFsLnhtbAorCSQoUVVJRVRfREJMQVRFWCkkKFJNKSAkQCsgJEAgJiYgXAorCSQoREJMQVRFWCkgLW8gJEArIC1wIC9ldGMvYXNjaWlkb2MvZGJsYXRleC9hc2NpaWRvYy1kYmxhdGV4LnhzbCAtcyAvZXRjL2FzY2lpZG9jL2RibGF0ZXgvYXNjaWlkb2MtZGJsYXRleC5zdHkgJDwgJiYgXAorCW12ICRAKyAkQAorCitnaXRtYW4udGV4aTogJChNQU5fWE1MKSBjYXQtdGV4aS5wZXJsCisJJChRVUlFVF9EQjJURVhJKSQoUk0pICRAKyAkQCAmJiBcCisJKCQoZm9yZWFjaCB4bWwsJChNQU5fWE1MKSwkKERPQ0JPT0syWF9URVhJKSAtLWVuY29kaW5nPVVURi04IFwKKwkJLS10by1zdGRvdXQgJCh4bWwpICYmKSB0cnVlKSA+ICRAKysgJiYgXAorCSQoUEVSTF9QQVRIKSBjYXQtdGV4aS5wZXJsICRAIDwkQCsrID4kQCsgJiYgXAorCXJtICRAKysgJiYgXAorCW12ICRAKyAkQAorCitnaXRtYW4uaW5mbzogZ2l0bWFuLnRleGkKKwkkKFFVSUVUX01BS0VJTkZPKSQoTUFLRUlORk8pIC0tbm8tc3BsaXQgLS1uby12YWxpZGF0ZSAkKi50ZXhpCisKKyQocGF0c3Vic3QgJS50eHQsJS50ZXhpLCQoTUFOX1RYVCkpOiAlLnRleGkgOiAlLnhtbAorCSQoUVVJRVRfREIyVEVYSSkkKFJNKSAkQCsgJEAgJiYgXAorCSQoRE9DQk9PSzJYX1RFWEkpIC0tdG8tc3Rkb3V0ICQqLnhtbCA+JEArICYmIFwKKwltdiAkQCsgJEAKKworaG93dG8taW5kZXgudHh0OiBob3d0by1pbmRleC5zaCAkKHdpbGRjYXJkIGhvd3RvLyoudHh0KQorCSQoUVVJRVRfR0VOKSQoUk0pICRAKyAkQCAmJiBcCisJJyQoU0hFTExfUEFUSF9TUSknIC4vaG93dG8taW5kZXguc2ggJCh3aWxkY2FyZCBob3d0by8qLnR4dCkgPiRAKyAmJiBcCisJbXYgJEArICRACisKKyQocGF0c3Vic3QgJSwlLmh0bWwsJChBUlRJQ0xFUykpIDogJS5odG1sIDogJS50eHQKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoQVNDSUlET0MpICQoQVNDSUlET0NfRVhUUkEpIC1iIHhodG1sMTEgJCoudHh0CisKK1dFQkRPQ19ERVNUID0gL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MKKworaG93dG8vJS5odG1sOiBBU0NJSURPQ19FWFRSQSArPSAtYSBnaXQtcmVsYXRpdmUtaHRtbC1wcmVmaXg9Li4vCiskKHBhdHN1YnN0ICUudHh0LCUuaHRtbCwkKHdpbGRjYXJkIGhvd3RvLyoudHh0KSk6ICUuaHRtbCA6ICUudHh0CisJJChRVUlFVF9BU0NJSURPQykkKFJNKSAkQCsgJEAgJiYgXAorCXNlZCAtZSAnMSwvXiQkL2QnICQ8IHwgJChBU0NJSURPQykgJChBU0NJSURPQ19FWFRSQSkgLWIgeGh0bWwxMSAtID4kQCsgJiYgXAorCW12ICRAKyAkQAorCitpbnN0YWxsLXdlYmRvYyA6IGh0bWwKKwknJChTSEVMTF9QQVRIX1NRKScgLi9pbnN0YWxsLXdlYmRvYy5zaCAkKFdFQkRPQ19ERVNUKQorCisjIFlvdSBtdXN0IGhhdmUgYSBjbG9uZSBvZiBnaXQtaHRtbGRvY3MgYW5kIGdpdC1tYW5wYWdlcyByZXBvc2l0b3JpZXMKKyMgbmV4dCB0byB0aGUgZ2l0IHJlcG9zaXRvcnkgaXRzZWxmIGZvciB0aGUgZm9sbG93aW5nIHRvIHdvcmsuCisKK3F1aWNrLWluc3RhbGw6IHF1aWNrLWluc3RhbGwtbWFuCisKK3JlcXVpcmUtbWFucmVwbzo6CisJQGlmIHRlc3QgISAtZCAkKE1BTl9SRVBPKTsgXAorCXRoZW4gZWNobyAiZ2l0LW1hbnBhZ2VzIHJlcG9zaXRvcnkgbXVzdCBleGlzdCBhdCAkKE1BTl9SRVBPKSI7IGV4aXQgMTsgZmkKKworcXVpY2staW5zdGFsbC1tYW46IHJlcXVpcmUtbWFucmVwbworCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtZG9jLXF1aWNrLnNoICQoTUFOX1JFUE8pICQoREVTVERJUikkKG1hbmRpcikKKworcmVxdWlyZS1odG1scmVwbzo6CisJQGlmIHRlc3QgISAtZCAkKEhUTUxfUkVQTyk7IFwKKwl0aGVuIGVjaG8gImdpdC1odG1sZG9jcyByZXBvc2l0b3J5IG11c3QgZXhpc3QgYXQgJChIVE1MX1JFUE8pIjsgZXhpdCAxOyBmaQorCitxdWljay1pbnN0YWxsLWh0bWw6IHJlcXVpcmUtaHRtbHJlcG8KKwknJChTSEVMTF9QQVRIX1NRKScgLi9pbnN0YWxsLWRvYy1xdWljay5zaCAkKEhUTUxfUkVQTykgJChERVNURElSKSQoaHRtbGRpcikKKworcHJpbnQtbWFuMToKKwlAZm9yIGkgaW4gJChNQU4xX1RYVCk7IGRvIGVjaG8gJCRpOyBkb25lCisKKy5QSE9OWTogRk9SQ0UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTNmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjEudHh0CkBAIC0wLDAgKzEsNDIgQEAKK0dJVCB2MS41LjAuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisgIC0gQ2xhcmlmaWNhdGlvbnMgYW5kIGNvcnJlY3Rpb25zIHRvIDEuNS4wIHJlbGVhc2Ugbm90ZXMuCisKKyAgLSBUaGUgbWFpbiBkb2N1bWVudGF0aW9uIGRpZCBub3QgbGluayB0byBnaXQtcmVtb3RlIGRvY3VtZW50YXRpb24uCisKKyAgLSBDbGFyaWZpZWQgaW50cm9kdWN0b3J5IHRleHQgb2YgZ2l0LXJlYmFzZSBkb2N1bWVudGF0aW9uLgorCisgIC0gQ29udmVydGVkIHJlbWFpbmluZyBtZW50aW9ucyBvZiB1cGRhdGUtaW5kZXggb24gUG9yY2VsYWluCisgICAgZG9jdW1lbnRzIHRvIGdpdC1hZGQvZ2l0LXJtLgorCisgIC0gU29tZSBpMThuLiogY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2VyZSBpbmNvcnJlY3RseQorICAgIGRlc2NyaWJlZCBhcyBjb3JlLio7IGZpeGVkLgorCisqIEJ1Z2ZpeGVzCisKKyAgLSBnaXQtYWRkIGFuZCBnaXQtdXBkYXRlLWluZGV4IG9uIGEgZmlsZXN5c3RlbSBvbiB3aGljaAorICAgIGV4ZWN1dGFibGUgYml0cyBhcmUgdW5yZWxpYWJsZSBpbmNvcnJlY3RseSByZXVzZWQgc3RfbW9kZQorICAgIGJpdHMgZXZlbiB3aGVuIHRoZSBwYXRoIGNoYW5nZWQgYmV0d2VlbiBzeW1saW5rIGFuZCByZWd1bGFyCisgICAgZmlsZS4KKworICAtIGdpdC1kYWVtb24gbWFya3MgdGhlIGxpc3RlbmluZyBzb2NrZXRzIHdpdGggRkRfQ0xPRVhFQyBzbworICAgIHRoYXQgaXQgd29uJ3QgYmUgbGVha2VkIGludG8gdGhlIGNoaWxkcmVuLgorCisgIC0gc2VnZmF1bHQgZnJvbSBnaXQtYmxhbWUgd2hlbiB0aGUgbWFuZGF0b3J5IHBhdGhuYW1lCisgICAgcGFyYW1ldGVyIHdhcyBtaXNzaW5nIHdhcyBmaXhlZDsgdXNhZ2UoKSBtZXNzYWdlIGlzIGdpdmVuCisgICAgaW5zdGVhZC4KKworICAtIGdpdC1yZXYtbGlzdCBkaWQgbm90IHJlYWQgJEdJVF9ESVIvY29uZmlnIGZpbGUsIHdoaWNoIG1lYW5zCisgICAgdGhhdCBkaWQgbm90IGhvbm9yIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgY29ycmVjdGx5LgorCisqIFR3ZWFrcworCisgIC0gc2xpZGluZyBtbWFwKCkgaW5lZmZpY2llbnRseSBtbWFwZWQgdGhlIHNhbWUgcmVnaW9uIG9mIGEKKyAgICBwYWNrZmlsZSB3aXRoIGFuIGFjY2VzcyBwYXR0ZXJuIHRoYXQgdXNlZCBvYmplY3RzIGluIHRoZQorICAgIHJldmVyc2Ugb3JkZXIuICBUaGlzIGhhcyBiZWVuIG1hZGUgbW9yZSBlZmZpY2llbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDYxZTUwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4yLnR4dApAQCAtMCwwICsxLDY1IEBACitHSVQgdjEuNS4wLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4wLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtIEF1dG9tYXRlZCBtZXJnZSBjb25mbGljdCBoYW5kbGluZyB3aGVuIGNoYW5nZXMgdG8gc3ltYm9saWMKKyAgICBsaW5rcyBjb25mbGljdGVkIHdlcmUgY29tcGxldGVseSBicm9rZW4uICBUaGUgbWVyZ2UtcmVzb2x2ZQorICAgIHN0cmF0ZWd5IGNyZWF0ZWQgYSByZWd1bGFyIGZpbGUgd2l0aCBjb25mbGljdCBtYXJrZXJzIGluIGl0CisgICAgaW4gcGxhY2Ugb2YgdGhlIHN5bWJvbGljIGxpbmsuICBUaGUgZGVmYXVsdCBzdHJhdGVneSwKKyAgICBtZXJnZS1yZWN1cnNpdmUgd2FzIGV2ZW4gbW9yZSBicm9rZW4uICBJdCByZW1vdmVkIHRoZSBwYXRoCisgICAgdGhhdCB3YXMgcG9pbnRlZCBhdCBieSB0aGUgc3ltYm9saWMgbGluay4gIEJvdGggb2YgdGhlc2UKKyAgICBwcm9ibGVtcyBoYXZlIGJlZW4gZml4ZWQuCisKKyAgLSAnZ2l0IGRpZmYgbWFpbnQgbWFzdGVyIG5leHQnIGRpZCBub3QgY29ycmVjdGx5IGdpdmUgY29tYmluZWQKKyAgICBkaWZmIGFjcm9zcyB0aHJlZSB0cmVlcy4KKworICAtICdnaXQgZmFzdC1pbXBvcnQnIHBvcnRhYmlsaXR5IGZpeCBmb3IgU29sYXJpcy4KKworICAtICdnaXQgc2hvdy1yZWYgLS12ZXJpZnknIHdpdGhvdXQgYXJndW1lbnRzIGRpZCBub3QgZXJyb3Igb3V0CisgICAgYnV0IHNlZ2ZhdWx0ZWQuCisKKyAgLSAnZ2l0IGRpZmYgOnRyYWNrZWQtZmlsZSBgcHdkYC9hbi11bnRyYWNrZWQtZmlsZScgZ2F2ZSBhbiBleHRyYQorICAgIHNsYXNoZXMgYWZ0ZXIgYS8gYW5kIGIvLgorCisgIC0gJ2dpdCBmb3JtYXQtcGF0Y2gnIHByb2R1Y2VkIHRvbyBsb25nIGZpbGVuYW1lcyBpZiB0aGUgY29tbWl0CisgICAgbWVzc2FnZSBoYWQgdG9vIGxvbmcgbGluZSBhdCB0aGUgYmVnaW5uaW5nLgorCisgIC0gUnVubmluZyAnbWFrZSBhbGwnIGFuZCB0aGVuIHdpdGhvdXQgY2hhbmdpbmcgYW55dGhpbmcKKyAgICBydW5uaW5nICdtYWtlIGluc3RhbGwnIHN0aWxsIHJlYnVpbHQgc29tZSBmaWxlcy4gIFRoaXMKKyAgICB3YXMgaW5jb252ZW5pZW50IHdoZW4gYnVpbGRpbmcgYXMgeW91cnNlbGYgYW5kIHRoZW4KKyAgICBpbnN0YWxsaW5nIGFzIHJvb3QgKGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlCisgICAgZGlyZWN0b3J5IGlzIG9uIE5GUyBhbmQgcm9vdCBpcyBtYXBwZWQgdG8gbm9ib2R5KS4KKworICAtICdnaXQtcmVyZXJlJyBmYWlsZWQgdG8gZGVhbCB3aXRoIHR3byB1bmNvbmZsaWN0ZWQgcGF0aHMgdGhhdAorICAgIHNvcnRlZCBuZXh0IHRvIGVhY2ggb3RoZXIuCisKKyAgLSAnZ2l0LXJlcmVyZScgYXR0ZW1wdGVkIHRvIG9wZW4oMikgYSBzeW1saW5rIGFuZCBmYWlsZWQgaWYKKyAgICB0aGVyZSB3YXMgYSBjb25mbGljdC4gIFNpbmNlIGEgY29uZmxpY3RpbmcgY2hhbmdlIHRvIGEKKyAgICBzeW1saW5rIHdvdWxkIG5vdCBiZW5lZml0IGZyb20gcmVyZXJlIGFueXdheSwgdGhlIGNvbW1hbmQKKyAgICBub3cgaWdub3JlcyBjb25mbGljdGluZyBjaGFuZ2VzIHRvIHN5bWxpbmtzLgorCisgIC0gJ2dpdC1yZXBhY2snIGRpZCBub3QgbGlrZSB0byBwYXNzIG1vcmUgdGhhbiA2NCBhcmd1bWVudHMKKyAgICBpbnRlcm5hbGx5IHRvIHVuZGVybHlpbmcgJ3Jldi1saXN0JyBsb2dpYywgd2hpY2ggbWFkZSBpdAorICAgIGltcG9zc2libGUgdG8gcmVwYWNrIGFmdGVyIGFjY3VtdWxhdGluZyBtYW55IChzbWFsbCkgcGFja3MKKyAgICBpbiB0aGUgcmVwb3NpdG9yeS4KKworICAtICdnaXQtZGlmZicgdG8gcmV2aWV3IHRoZSBjb21iaW5lZCBkaWZmIGR1cmluZyBhIGNvbmZsaWN0ZWQKKyAgICBtZXJnZSB3ZXJlIG5vdCByZWFkaW5nIHRoZSB3b3JraW5nIHRyZWUgdmVyc2lvbiBjb3JyZWN0bHkKKyAgICB3aGVuIGNoYW5nZXMgdG8gYSBzeW1ib2xpYyBsaW5rIGNvbmZsaWN0ZWQuICBJdCBzaG91bGQgaGF2ZQorICAgIHJlYWQgdGhlIGRhdGEgdXNpbmcgcmVhZGxpbmsoMikgYnV0IHJlYWQgZnJvbSB0aGUgcmVndWxhcgorICAgIGZpbGUgdGhlIHN5bWJvbGljIGxpbmsgcG9pbnRlZCBhdC4KKworICAtICdnaXQtcmVtb3RlJyBkaWQgbm90IGxpa2UgcGVyaW9kIGluIGEgcmVtb3RlJ3MgbmFtZS4KKworKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworICAtIGFkZGVkIGFuZCBjbGFyaWZpZWQgY29yZS5iYXJlLCBjb3JlLmxlZ2FjeWhlYWRlcnMgY29uZmlndXJhdGlvbnMuCisKKyAgLSB1cGRhdGVkICJnaXQtY2xvbmUgLS1kZXB0aCIgZG9jdW1lbnRhdGlvbi4KKworCisqIEFzc29ydGVkIGdpdC1ndWkgZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDUwMGY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4zLnR4dApAQCAtMCwwICsxLDU4IEBACitHSVQgdjEuNS4wLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4wLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtICdnaXQuZWwnIGhvbm9ycyB0aGUgY29tbWl0IGNvZGluZyBzeXN0ZW0gZnJvbSB0aGUgY29uZmlndXJhdGlvbi4KKworICAtICdibGFtZXZpZXcnIGluIGNvbnRyaWIvIGNvcnJlY3RseSBkaWdzIGRlZXBlciB3aGVuIGEgbGluZSBpcworICAgIGNsaWNrZWQuCisKKyAgLSAnaHR0cC1wdXNoJyBjb3JyZWN0bHkgbWFrZXMgc3VyZSB0aGUgcmVtb3RlIHNpZGUgaGFzIGxlYWRpbmcKKyAgICBwYXRoLiAgRWFybGllciBpdCBzdGFydGVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIHBhdGgsIGFuZAorICAgIGluY29ycmVjdGx5LgorCisgIC0gJ2dpdC1tZXJnZScgZGlkIG5vdCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIHdoZW4gdGhlCisgICAgd29ya2luZyB0cmVlIHdhcyBkaXJ0eSBhbmQgY2Fubm90IGZhc3QgZm9yd2FyZC4gIEl0IGRvZXMKKyAgICBub3cuCisKKyAgLSAnY3ZzZXhwb3J0Y29tbWl0JyBkb2VzIG5vdCBsb3NlIHlldC10by1iZS11c2VkIG1lc3NhZ2UgZmlsZS4KKworICAtIGludC12cy1zaXplX3QgdHlwZWZpeCB3aGVuIHJ1bm5pbmcgY29tYmluZWQgZGlmZiBvbiBmaWxlcworICAgIG92ZXIgMkdCIGxvbmcuCisKKyAgLSAnZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1zdHJpcCcgc2hvdWxkIG5vdCB0b3VjaCB1bm1vZGlmaWVkCisgICAgbGluZXMuCisKKyAgLSAnZ2l0LW1haWxpbmZvJyBjaG9rZSB3aGVuIGEgbG9naWNhbCBoZWFkZXIgbGluZSB3YXMgdG9vIGxvbmcuCisKKyAgLSAnZ2l0IHNob3cgQS4uQicgZGlkIG5vdCBlcnJvciBvdXQuICBOZWdhdGl2ZSByZWYgKCJub3QgQSIgaW4KKyAgICB0aGlzIGV4YW1wbGUpIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZQorICAgIGNvbW1hbmQsIHNvIG5vdyBpdCBlcnJvcnMgb3V0LgorCisgIC0gJ2dpdCBmbXQtbWVyZ2UtbXNnIC0tZmlsZScgd2l0aG91dCBmaWxlIHBhcmFtZXRlciBkaWQgbm90CisgICAgY29ycmVjdGx5IGVycm9yIG91dC4KKworICAtICdnaXQgYXJjaGltcG9ydCcgYmFyZmVkIHVwb24gZW5jb3VudGVyaW5nIGEgY29tbWl0IHdpdGhvdXQKKyAgICBzdW1tYXJ5LgorCisgIC0gJ2dpdCBpbmRleC1wYWNrJyBkaWQgbm90IHByb3RlY3QgaXRzZWxmIGZyb20gZ2V0dGluZyBhIHNob3J0CisgICAgcmVhZCBvdXQgb2YgcHJlYWQoMikuCisKKyAgLSAnZ2l0IGh0dHAtcHVzaCcgaGFkIGEgZmV3IGJ1ZmZlciBvdmVycnVucy4KKworICAtIEJ1aWxkIGRlcGVuZGVuY3kgZml4ZXMgdG8gcmVidWlsZCBmZXRjaC5vIHdoZW4gb3RoZXIgaGVhZGVycworICAgIGNoYW5nZS4KKworKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworICAtIHVzZXItbWFudWFsIHVwZGF0ZXMuCisKKyAgLSBPcHRpb25zIHRvICdnaXQgcmVtb3RlIGFkZCcgd2VyZSBkZXNjcmliZWQgaW5zdWZmaWNpZW50bHkuCisKKyAgLSBDb25maWd1cmF0aW9uIGZvcm1hdC5zdWZmaXggd2FzIG5vdCBkb2N1bWVudGVkLgorCisgIC0gT3RoZXIgZm9ybWF0dGluZyBhbmQgc3BlbGxpbmcgZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWVmYTVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC40LnR4dApAQCAtMCwwICsxLDIyIEBACitHSVQgdjEuNS4wLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4wLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtIGdpdC5lbCBkb2VzIG5vdCBhZGQgZHVwbGljYXRlIHNpZ24tb2ZmIGxpbmVzLgorCisgIC0gZ2l0LWNvbW1pdCBzaG93cyB0aGUgZnVsbCBzdGF0IG9mIHRoZSByZXN1bHRpbmcgY29tbWl0LCBub3QKKyAgICBqdXN0IGFib3V0IHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdoZW4gcnVuIGZyb20KKyAgICBhIHN1YmRpcmVjdG9yeS4KKworICAtICJnaXQtY2hlY2tvdXQgLW0gJ0B7OCBob3VycyBhZ299JyIgaGFkIGEgZnVubnkgZmFpbHVyZSBmcm9tCisgICAgZXZhbDsgZml4ZWQuCisKKyAgLSBnaXQtZ3VpIHVwZGF0ZXMuCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyogVXNlciBtYW51YWwgdXBkYXRlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlYzNkNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNS50eHQKQEAgLTAsMCArMSwyNiBAQAorR0lUIHYxLjUuMC41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBnaXQtbWVyZ2UgKGhlbmNlIGdpdC1wdWxsKSBkaWQgbm90IHJlZnVzZSBmYXN0LWZvcndhcmRpbmcKKyAgICB3aGVuIHRoZSB3b3JraW5nIHRyZWUgaGFkIGxvY2FsIGNoYW5nZXMgdGhhdCB3b3VsZCBoYXZlCisgICAgY29uZmxpY3RlZCB3aXRoIGl0LgorCisgIC0gZ2l0LmVsIGRvZXMgbm90IGFkZCBkdXBsaWNhdGUgc2lnbi1vZmYgbGluZXMuCisKKyAgLSBnaXQtY29tbWl0IHNob3dzIHRoZSBmdWxsIHN0YXQgb2YgdGhlIHJlc3VsdGluZyBjb21taXQsIG5vdAorICAgIGp1c3QgYWJvdXQgdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2hlbiBydW4gZnJvbQorICAgIGEgc3ViZGlyZWN0b3J5LgorCisgIC0gImdpdC1jaGVja291dCAtbSAnQHs4IGhvdXJzIGFnb30nIiBoYWQgYSBmdW5ueSBmYWlsdXJlIGZyb20KKyAgICBldmFsOyBmaXhlZC4KKworICAtIGdpdC1ndWkgdXBkYXRlcy4KKworKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworKiBVc2VyIG1hbnVhbCB1cGRhdGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDIwMTVhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC42LnR4dApAQCAtMCwwICsxLDIxIEBACitHSVQgdjEuNS4wLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4wLjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtIGEgaGFuZGZ1bCBzbWFsbCBmaXhlcyB0byBnaXR3ZWIuCisKKyAgLSBidWlsZCBwcm9jZWR1cmUgZm9yIHVzZXItbWFudWFsIGlzIGZpeGVkIG5vdCB0byByZXF1aXJlIGxvY2FsbHkKKyAgICBpbnN0YWxsZWQgc3R5bGVzaGVldHMuCisKKyAgLSAiZ2l0IGNvbW1pdCAkcGF0aHMiIG9uIHBhdGhzIHdob3NlIGVhcmxpZXIgY29udGVudHMgd2VyZQorICAgIGFscmVhZHkgdXBkYXRlZCBpbiB0aGUgaW5kZXggd2VyZSBmYWlsaW5nIG91dC4KKworKiBEb2N1bWVudGF0aW9uCisKKyAgLSB1c2VyLW1hbnVhbCBoYXMgYmV0dGVyIGNyb3NzIHJlZmVyZW5jZXMuCisKKyAgLSBnaXR3ZWIgaW5zdGFsbGF0aW9uL2RlcGxveW1lbnQgcHJvY2VkdXJlIGlzIG5vdyBkb2N1bWVudGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwYWQzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNy50eHQKQEAgLTAsMCArMSwxOCBAQAorR0lUIHYxLjUuMC43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMC42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBnaXQtdXBsb2FkLXBhY2sgZmFpbGVkIHRvIGNsb3NlIHVudXNlZCBwaXBlIGVuZHMsIHJlc3VsdGluZworICAgIGluIG1hbnkgem9tYmllcyB0byBoYW5nIGFyb3VuZC4KKworICAtIGdpdC1yZXJlcmUgd2FzIHJlY29yZGluZyB0aGUgY29udGVudHMgb2YgZWFybGllciBodW5rcworICAgIGR1cGxpY2F0ZWQgaW4gbGF0ZXIgaHVua3MuICBUaGlzIHByZXZlbnRlZCByZXNvbHZpbmcgdGhlIHNhbWUKKyAgICBjb25mbGljdCB3aGVuIHBlcmZvcm1pbmcgdGhlIHNhbWUgbWVyZ2UgdGhlIG90aGVyIHdheSBhcm91bmQuCisKKyogRG9jdW1lbnRhdGlvbgorCisgIC0gYSBmZXcgZG9jdW1lbnRhdGlvbiBmaXhlcyBmcm9tIERlYmlhbiBwYWNrYWdlIG1haW50YWluZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjRiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLnR4dApAQCAtMCwwICsxLDQ2OSBAQAorR0lUIHYxLjUuMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworT2xkIG5ld3MKKy0tLS0tLS0tCisKK1RoaXMgc2VjdGlvbiBpcyBmb3IgcGVvcGxlIHdobyBhcmUgdXBncmFkaW5nIGZyb20gYW5jaWVudAordmVyc2lvbnMgb2YgZ2l0LiAgQWx0aG91Z2ggYWxsIG9mIHRoZSBjaGFuZ2VzIGluIHRoaXMgc2VjdGlvbgoraGFwcGVuZWQgYmVmb3JlIHRoZSBjdXJyZW50IHYxLjQuNCByZWxlYXNlLCB0aGV5IGFyZSBzdW1tYXJpemVkCitoZXJlIGluIHRoZSB2MS41LjAgcmVsZWFzZSBub3RlcyBmb3IgcGVvcGxlIHdobyBza2lwcGVkIGVhcmxpZXIKK3ZlcnNpb25zLgorCitBcyBvZiBnaXQgdjEuNS4wIHRoZXJlIGFyZSBzb21lIG9wdGlvbmFsIGZlYXR1cmVzIHRoYXQgY2hhbmdlcwordGhlIHJlcG9zaXRvcnkgdG8gYWxsb3cgZGF0YSB0byBiZSBzdG9yZWQgYW5kIHRyYW5zZmVycmVkIG1vcmUKK2VmZmljaWVudGx5LiAgVGhlc2UgZmVhdHVyZXMgYXJlIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQsIGFzIHRoZXkKK3dpbGwgbWFrZSB0aGUgcmVwb3NpdG9yeSB1bnVzYWJsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGdpdC4KK1NwZWNpZmljYWxseSwgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZToKKworIC0gVGhlcmUgaXMgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvcmUubGVnYWN5aGVhZGVycyB0aGF0CisgICBjaGFuZ2VzIHRoZSBmb3JtYXQgb2YgbG9vc2Ugb2JqZWN0cyBzbyB0aGF0IHRoZXkgYXJlIG1vcmUKKyAgIGVmZmljaWVudCB0byBwYWNrIGFuZCB0byBzZW5kIG91dCBvZiB0aGUgcmVwb3NpdG9yeSBvdmVyIGdpdAorICAgbmF0aXZlIHByb3RvY29sLCBzaW5jZSB2MS40LjIuICBIb3dldmVyLCBsb29zZSBvYmplY3RzCisgICB3cml0dGVuIGluIHRoZSBuZXcgZm9ybWF0IGNhbm5vdCBiZSByZWFkIGJ5IGdpdCBvbGRlciB0aGFuCisgICB0aGF0IHZlcnNpb247IHBlb3BsZSBmZXRjaGluZyBmcm9tIHlvdXIgcmVwb3NpdG9yeSB1c2luZworICAgb2xkZXIgY2xpZW50cyBvdmVyIGR1bWIgdHJhbnNwb3J0cyAoZS5nLiBodHRwKSB1c2luZyBvbGRlcgorICAgdmVyc2lvbnMgb2YgZ2l0IHdpbGwgYWxzbyBiZSBhZmZlY3RlZC4KKworICAgVG8gbGV0IGdpdCB1c2UgdGhlIG5ldyBsb29zZSBvYmplY3QgZm9ybWF0LCB5b3UgaGF2ZSB0bworICAgc2V0IGNvcmUubGVnYWN5aGVhZGVycyB0byBmYWxzZS4KKworIC0gU2luY2UgdjEuNC4zLCBjb25maWd1cmF0aW9uIHJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQgYWxsb3dzCisgICBwYWNrZmlsZSB0byBiZSBjcmVhdGVkIGluIG1vcmUgc3BhY2UgZWZmaWNpZW50IGZvcm1hdCwgd2hpY2gKKyAgIGNhbm5vdCBiZSByZWFkIGJ5IGdpdCBvbGRlciB0aGFuIHRoYXQgdmVyc2lvbi4KKworICAgVG8gbGV0IGdpdCB1c2UgdGhlIG5ldyBmb3JtYXQgZm9yIHBhY2tmaWxlcywgeW91IGhhdmUgdG8KKyAgIHNldCByZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IHRvIHRydWUuCisKK1RoZSBhYm92ZSB0d28gbmV3IGZlYXR1cmVzIGFyZSBub3QgZW5hYmxlZCBieSBkZWZhdWx0IGFuZCB5b3UKK2hhdmUgdG8gZXhwbGljaXRseSBhc2sgZm9yIHRoZW0sIGJlY2F1c2UgdGhleSBtYWtlIHJlcG9zaXRvcmllcwordW5yZWFkYWJsZSBieSBvbGRlciB2ZXJzaW9ucyBvZiBnaXQsIGFuZCBpbiB2MS41LjAgd2Ugc3RpbGwgZG8KK25vdCBlbmFibGUgdGhlbSBieSBkZWZhdWx0IGZvciB0aGUgc2FtZSByZWFzb24uICBXZSB3aWxsIGNoYW5nZQordGhpcyBkZWZhdWx0IHByb2JhYmx5IDEgeWVhciBhZnRlciAxLjQuMidzIHJlbGVhc2UsIHdoZW4gaXQgaXMKK3JlYXNvbmFibGUgdG8gZXhwZWN0IGV2ZXJ5Ym9keSB0byBoYXZlIG5ldyBlbm91Z2ggdmVyc2lvbiBvZgorZ2l0LgorCisgLSAnZ2l0IHBhY2stcmVmcycgYXBwZWFyZWQgaW4gdjEuNC40OyB0aGlzIGNvbW1hbmQgYWxsb3dzIHRhZ3MKKyAgIHRvIGJlIGFjY2Vzc2VkIG11Y2ggbW9yZSBlZmZpY2llbnRseSB0aGFuIHRoZSB0cmFkaXRpb25hbAorICAgJ29uZS1maWxlLXBlci10YWcnIGZvcm1hdC4gIE9sZGVyIGdpdC1uYXRpdmUgY2xpZW50cyBjYW4KKyAgIHN0aWxsIGZldGNoIGZyb20gYSByZXBvc2l0b3J5IHRoYXQgcGFja2VkIGFuZCBwcnVuZWQgcmVmcworICAgKHRoZSBzZXJ2ZXIgc2lkZSBuZWVkcyB0byBydW4gdGhlIHVwLXRvLWRhdGUgdmVyc2lvbiBvZiBnaXQpLAorICAgYnV0IG9sZGVyIGR1bWIgdHJhbnNwb3J0cyBjYW5ub3QuICBQYWNraW5nIG9mIHJlZnMgaXMgZG9uZSBieQorICAgYW4gZXhwbGljaXQgdXNlciBhY3Rpb24sIGVpdGhlciBieSB1c2Ugb2YgImdpdCBwYWNrLXJlZnMKKyAgIC0tcHJ1bmUiIGNvbW1hbmQgb3IgYnkgdXNlIG9mICJnaXQgZ2MiIGNvbW1hbmQuCisKKyAtICdnaXQgLXAnIHRvIHBhZ2luYXRlIGFueXRoaW5nIC0tIG1hbnkgY29tbWFuZHMgZG8gcGFnaW5hdGlvbgorICAgYnkgZGVmYXVsdCBvbiBhIHR0eS4gIEludHJvZHVjZWQgYmV0d2VlbiB2MS40LjEgYW5kIHYxLjQuMjsKKyAgIHRoaXMgbWF5IHN1cnByaXNlIG9sZCB0aW1lcnMuCisKKyAtICdnaXQgYXJjaGl2ZScgc3VwZXJzZWRlZCAnZ2l0IHRhci10cmVlJyBpbiB2MS40LjM7CisKKyAtICdnaXQgY3Zzc2VydmVyJyB3YXMgbmV3IGludmVudGlvbiBpbiB2MS4zLjA7CisKKyAtICdnaXQgcmVwby1jb25maWcnLCAnZ2l0IGdyZXAnLCAnZ2l0IHJlYmFzZScgYW5kICdnaXRrJyB3ZXJlCisgICBzZXJpb3VzbHkgZW5oYW5jZWQgZHVyaW5nIHYxLjQuMCB0aW1lcGVyaW9kLgorCisgLSAnZ2l0d2ViJyBiZWNhbWUgcGFydCBvZiBnaXQuZ2l0IGR1cmluZyB2MS40LjAgdGltZXBlcmlvZCBhbmQKKyAgIHNlcmlvdXNseSBtb2RpZmllZCBzaW5jZSB0aGVuLgorCisgLSByZWZsb2cgaXMgYW4gdjEuNC4wIGludmVudGlvbi4gIFRoaXMgYWxsb3dzIHlvdSB0byBuYW1lIGEKKyAgIHJldmlzaW9uIHRoYXQgYSBicmFuY2ggdXNlZCB0byBiZSBhdCAoZS5nLiAiZ2l0IGRpZmYKKyAgIG1hc3RlckB7eWVzdGVyZGF5fSBtYXN0ZXIiIGFsbG93cyB5b3UgdG8gc2VlIGNoYW5nZXMgc2luY2UKKyAgIHllc3RlcmRheSdzIHRpcCBvZiB0aGUgYnJhbmNoKS4KKworCitVcGRhdGVzIGluIHYxLjUuMCBzaW5jZSB2MS40LjQgc2VyaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogSW5kZXggbWFuaXB1bGF0aW9uCisKKyAtIGdpdC1hZGQgaXMgdG8gYWRkIGNvbnRlbnRzIHRvIHRoZSBpbmRleCAoYWthICJzdGFnaW5nIGFyZWEiCisgICBmb3IgdGhlIG5leHQgY29tbWl0KSwgd2hldGhlciB0aGUgZmlsZSB0aGUgY29udGVudHMgaGFwcGVuIHRvCisgICBiZSBpcyBhbiBleGlzdGluZyBvbmUgb3IgYSBuZXdseSBjcmVhdGVkIG9uZS4KKworIC0gZ2l0LWFkZCB3aXRob3V0IGFueSBhcmd1bWVudCBkb2VzIG5vdCBhZGQgZXZlcnl0aGluZworICAgYW55bW9yZS4gIFVzZSAnZ2l0LWFkZCAuJyBpbnN0ZWFkLiAgQWxzbyB5b3UgY2FuIGFkZAorICAgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMgd2l0aCBhbiAtZiBvcHRpb24uCisKKyAtIGdpdC1hZGQgdHJpZXMgdG8gYmUgbW9yZSBmcmllbmRseSB0byB1c2VycyBieSBvZmZlcmluZyBhbgorICAgaW50ZXJhY3RpdmUgbW9kZSAoImdpdC1hZGQgLWkiKS4KKworIC0gZ2l0LWNvbW1pdCA8cGF0aD4gdXNlZCB0byByZWZ1c2UgdG8gY29tbWl0IGlmIDxwYXRoPiB3YXMKKyAgIGRpZmZlcmVudCBiZXR3ZWVuIEhFQUQgYW5kIHRoZSBpbmRleCAoaS5lLiB1cGRhdGUtaW5kZXggd2FzCisgICB1c2VkIG9uIGl0IGVhcmxpZXIpLiAgVGhpcyBjaGVjayB3YXMgcmVtb3ZlZC4KKworIC0gZ2l0LXJtIGlzIG11Y2ggc2FuZXIgYW5kIHNhZmVyLiAgSXQgaXMgdXNlZCB0byByZW1vdmUgcGF0aHMKKyAgIGZyb20gYm90aCB0aGUgaW5kZXggZmlsZSBhbmQgdGhlIHdvcmtpbmcgdHJlZSwgYW5kIG1ha2VzIHN1cmUKKyAgIHlvdSBhcmUgbm90IGxvc2luZyBhbnkgbG9jYWwgbW9kaWZpY2F0aW9uIGJlZm9yZSBkb2luZyBzby4KKworIC0gZ2l0LXJlc2V0IDx0cmVlPiA8cGF0aHM+Li4uIGNhbiBiZSB1c2VkIHRvIHJldmVydCBpbmRleAorICAgZW50cmllcyBmb3Igc2VsZWN0ZWQgcGF0aHMuCisKKyAtIGdpdC11cGRhdGUtaW5kZXggaXMgbXVjaCBsZXNzIHZpc2libGUuICBNYW55IHN1Z2dlc3Rpb25zIHRvCisgICB1c2UgdGhlIGNvbW1hbmQgaW4gZ2l0IG91dHB1dCBhbmQgZG9jdW1lbnRhdGlvbiBoYXZlIG5vdyBiZWVuCisgICByZXBsYWNlZCBieSBzaW1wbGVyIGNvbW1hbmRzIHN1Y2ggYXMgImdpdCBhZGQiIG9yICJnaXQgcm0iLgorCisKKyogUmVwb3NpdG9yeSBsYXlvdXQgYW5kIG9iamVjdHMgdHJhbnNmZXIKKworIC0gVGhlIGRhdGEgZm9yIG9yaWdpbiByZXBvc2l0b3J5IGlzIHN0b3JlZCBpbiB0aGUgY29uZmlndXJhdGlvbgorICAgZmlsZSAkR0lUX0RJUi9jb25maWcsIG5vdCBpbiAkR0lUX0RJUi9yZW1vdGVzLywgZm9yIG5ld2x5CisgICBjcmVhdGVkIGNsb25lcy4gIFRoZSBsYXR0ZXIgaXMgc3RpbGwgc3VwcG9ydGVkIGFuZCB0aGVyZSBpcworICAgbm8gbmVlZCB0byBjb252ZXJ0IHlvdXIgZXhpc3RpbmcgcmVwb3NpdG9yeSBpZiB5b3UgYXJlCisgICBhbHJlYWR5IGNvbWZvcnRhYmxlIHdpdGggeW91ciB3b3JrZmxvdyB3aXRoIHRoZSBsYXlvdXQuCisKKyAtIGdpdC1jbG9uZSBhbHdheXMgdXNlcyB3aGF0IGlzIGtub3duIGFzICJzZXBhcmF0ZSByZW1vdGUiCisgICBsYXlvdXQgZm9yIGEgbmV3bHkgY3JlYXRlZCByZXBvc2l0b3J5IHdpdGggYSB3b3JraW5nIHRyZWUuCisKKyAgIEEgcmVwb3NpdG9yeSB3aXRoIHRoZSBzZXBhcmF0ZSByZW1vdGUgbGF5b3V0IHN0YXJ0cyB3aXRoIG9ubHkKKyAgIG9uZSBkZWZhdWx0IGJyYW5jaCwgJ21hc3RlcicsIHRvIGJlIHVzZWQgZm9yIHlvdXIgb3duCisgICBkZXZlbG9wbWVudC4gIFVubGlrZSB0aGUgdHJhZGl0aW9uYWwgbGF5b3V0IHRoYXQgY29waWVkIGFsbAorICAgdGhlIHVwc3RyZWFtIGJyYW5jaGVzIGludG8geW91ciBicmFuY2ggbmFtZXNwYWNlICh3aGlsZQorICAgcmVuYW1pbmcgdGhlaXIgJ21hc3RlcicgdG8geW91ciAnb3JpZ2luJyksIHRoZSBuZXcgbGF5b3V0CisgICBwdXRzIHVwc3RyZWFtIGJyYW5jaGVzIGludG8gbG9jYWwgInJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKKyAgIHdpdGggdGhlaXIgb3duIG5hbWVzcGFjZS4gVGhlc2UgY2FuIGJlIHJlZmVyZW5jZWQgd2l0aCBuYW1lcworICAgc3VjaCBhcyAib3JpZ2luLyR1cHN0cmVhbV9icmFuY2hfbmFtZSIgYW5kIGFyZSBzdG9yZWQgaW4KKyAgIC5naXQvcmVmcy9yZW1vdGVzIHJhdGhlciB0aGFuIC5naXQvcmVmcy9oZWFkcyB3aGVyZSBub3JtYWwKKyAgIGJyYW5jaGVzIGFyZSBzdG9yZWQuCisKKyAgIFRoaXMgbGF5b3V0IGtlZXBzIHlvdXIgb3duIGJyYW5jaCBuYW1lc3BhY2UgbGVzcyBjbHV0dGVyZWQsCisgICBhdm9pZHMgbmFtZSBjb2xsaXNpb24gd2l0aCB5b3VyIHVwc3RyZWFtLCBtYWtlcyBpdCBwb3NzaWJsZQorICAgdG8gYXV0b21hdGljYWxseSB0cmFjayBuZXcgYnJhbmNoZXMgY3JlYXRlZCBhdCB0aGUgcmVtb3RlCisgICBhZnRlciB5b3UgY2xvbmUgZnJvbSBpdCwgYW5kIG1ha2VzIGl0IGVhc2llciB0byBpbnRlcmFjdCB3aXRoCisgICBtb3JlIHRoYW4gb25lIHJlbW90ZSByZXBvc2l0b3J5ICh5b3UgY2FuIHVzZSAiZ2l0IHJlbW90ZSIgdG8KKyAgIGFkZCBvdGhlciByZXBvc2l0b3JpZXMgdG8gdHJhY2spLiAgVGhlcmUgbWlnaHQgYmUgc29tZQorICAgc3VycHJpc2VzOgorCisgICAqICdnaXQgYnJhbmNoJyBkb2VzIG5vdCBzaG93IHRoZSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoZXMuCisgICAgIEl0IG9ubHkgbGlzdHMgeW91ciBvd24gYnJhbmNoZXMuICBVc2UgJy1yJyBvcHRpb24gdG8gdmlldworICAgICB0aGUgdHJhY2tpbmcgYnJhbmNoZXMuCisKKyAgICogSWYgeW91IGFyZSBmb3JraW5nIG9mZiBvZiBhIGJyYW5jaCBvYnRhaW5lZCBmcm9tIHRoZQorICAgICB1cHN0cmVhbSwgeW91IHdvdWxkIGhhdmUgZG9uZSBzb21ldGhpbmcgbGlrZSAnZ2l0IGJyYW5jaAorICAgICBteS1uZXh0IG5leHQnLCBiZWNhdXNlIHRyYWRpdGlvbmFsIGxheW91dCBkcm9wcGVkIHRoZQorICAgICB0cmFja2luZyBicmFuY2ggJ25leHQnIGludG8geW91ciBvd24gYnJhbmNoIG5hbWVzcGFjZS4KKyAgICAgV2l0aCB0aGUgc2VwYXJhdGUgcmVtb3RlIGxheW91dCwgeW91IHNheSAnZ2l0IGJyYW5jaCBuZXh0CisgICAgIG9yaWdpbi9uZXh0Jywgd2hpY2ggYWxsb3dzIHlvdSB0byB1c2UgdGhlIG1hdGNoaW5nIG5hbWUKKyAgICAgJ25leHQnIGZvciB5b3VyIG93biBicmFuY2guICBJdCBhbHNvIGFsbG93cyB5b3UgdG8gdHJhY2sgYQorICAgICByZW1vdGUgb3RoZXIgdGhhbiAnb3JpZ2luJyAoaS5lLiB3aGVyZSB5b3UgaW5pdGlhbGx5IGNsb25lZAorICAgICBmcm9tKSBhbmQgZm9yayBvZmYgb2YgYSBicmFuY2ggZnJvbSB0aGVyZSB0aGUgc2FtZSB3YXkKKyAgICAgKGUuZy4gImdpdCBicmFuY2ggbWluZ3cgajZ0L21hc3RlciIpLgorCisgICBSZXBvc2l0b3JpZXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgdHJhZGl0aW9uYWwgbGF5b3V0IGNvbnRpbnVlCisgICB0byB3b3JrLgorCisgLSBOZXcgYnJhbmNoZXMgdGhhdCBhcHBlYXIgb24gdGhlIG9yaWdpbiBzaWRlIGFmdGVyIGEgY2xvbmUgaXMKKyAgIG1hZGUgYXJlIGFsc28gdHJhY2tlZCBhdXRvbWF0aWNhbGx5LiAgVGhpcyBpcyBkb25lIHdpdGggYW4KKyAgIHdpbGRjYXJkIHJlZnNwZWMgInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiLCB3aGljaAorICAgb2xkZXIgZ2l0IGRvZXMgbm90IHVuZGVyc3RhbmQsIHNvIGlmIHlvdSBjbG9uZSB3aXRoIDEuNS4wLAorICAgeW91IHdvdWxkIG5lZWQgdG8gZG93bmdyYWRlIHJlbW90ZS4qLmZldGNoIGluIHRoZQorICAgY29uZmlndXJhdGlvbiBmaWxlIHRvIHNwZWNpZnkgZWFjaCBicmFuY2ggeW91IGFyZSBpbnRlcmVzdGVkCisgICBpbiBpbmRpdmlkdWFsbHkgaWYgeW91IHBsYW4gdG8gZmV0Y2ggaW50byB0aGUgcmVwb3NpdG9yeSB3aXRoCisgICBvbGRlciB2ZXJzaW9ucyBvZiBnaXQgKGJ1dCB3aHkgd291bGQgeW91PykuCisKKyAtIFNpbWlsYXJseSwgd2lsZGNhcmQgcmVmc3BlYyAicmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9tZS8qIgorICAgY2FuIGJlIGdpdmVuIHRvICJnaXQtcHVzaCIgY29tbWFuZCB0byB1cGRhdGUgdGhlIHRyYWNraW5nCisgICBicmFuY2hlcyB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgdGhlIHJlcG9zaXRvcnkgeW91IGFyZSBwdXNoaW5nCisgICBmcm9tIG9uIHRoZSByZW1vdGUgc2lkZS4KKworIC0gZ2l0LWJyYW5jaCBhbmQgZ2l0LXNob3ctYnJhbmNoIGtub3cgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzCisgICAodXNlIHRoZSBjb21tYW5kIGxpbmUgc3dpdGNoICItciIgdG8gbGlzdCBvbmx5IHRyYWNrZWQgYnJhbmNoZXMpLgorCisgLSBnaXQtcHVzaCBjYW4gbm93IGJlIHVzZWQgdG8gZGVsZXRlIGEgcmVtb3RlIGJyYW5jaCBvciBhIHRhZy4KKyAgIFRoaXMgcmVxdWlyZXMgdGhlIHVwZGF0ZWQgZ2l0IG9uIHRoZSByZW1vdGUgc2lkZSAodXNlICJnaXQKKyAgIHB1c2ggPHJlbW90ZT4gOnJlZnMvaGVhZHMvPGJyYW5jaD4iIHRvIGRlbGV0ZSAiYnJhbmNoIikuCisKKyAtIGdpdC1wdXNoIG1vcmUgYWdncmVzc2l2ZWx5IGtlZXBzIHRoZSB0cmFuc2ZlcnJlZCBvYmplY3RzCisgICBwYWNrZWQuICBFYXJsaWVyIHdlIHJlY29tbWVuZGVkIHRvIG1vbml0b3IgYW1vdW50IG9mIGxvb3NlCisgICBvYmplY3RzIGFuZCByZXBhY2sgcmVndWxhcmx5LCBidXQgeW91IHNob3VsZCByZXBhY2sgd2hlbiB5b3UKKyAgIGFjY3VtdWxhdGVkIHRvbyBtYW55IHNtYWxsIHBhY2tzIHRoaXMgd2F5IGFzIHdlbGwuICBVcGRhdGVkCisgICBnaXQtY291bnQtb2JqZWN0cyBoZWxwcyB5b3Ugd2l0aCB0aGlzLgorCisgLSBnaXQtZmV0Y2ggYWxzbyBtb3JlIGFnZ3Jlc3NpdmVseSBrZWVwcyB0aGUgdHJhbnNmZXJyZWQgb2JqZWN0cworICAgcGFja2VkLiAgVGhpcyBiZWhhdmlvciBvZiBnaXQtcHVzaCBhbmQgZ2l0LWZldGNoIGNhbiBiZQorICAgdHdlYWtlZCB3aXRoIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gdHJhbnNmZXIudW5wYWNrbGltaXQgKGJ1dAorICAgdXN1YWxseSB0aGVyZSBzaG91bGQgbm90IGJlIGFueSBuZWVkIGZvciBhIHVzZXIgdG8gdHdlYWsgaXQpLgorCisgLSBBIG5ldyBjb21tYW5kLCBnaXQtcmVtb3RlLCBjYW4gaGVscCB5b3UgbWFuYWdlIHlvdXIgcmVtb3RlCisgICB0cmFja2luZyBicmFuY2ggZGVmaW5pdGlvbnMuCisKKyAtIFlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5IGV4cGxpY2l0IHBhdGhzIGZvciB1cGxvYWQtcGFjayBhbmQvb3IKKyAgIHJlY2VpdmUtcGFjayBkdWUgdG8geW91ciBzc2ggZGFlbW9uIGNvbmZpZ3VyYXRpb24gb24gdGhlCisgICBvdGhlciBlbmQuICBUaGlzIGNhbiBub3cgYmUgZG9uZSB2aWEgcmVtb3RlLioudXBsb2FkcGFjayBhbmQKKyAgIHJlbW90ZS4qLnJlY2VpdmVwYWNrIGNvbmZpZ3VyYXRpb24uCisKKworKiBCYXJlIHJlcG9zaXRvcmllcworCisgLSBDZXJ0YWluIGNvbW1hbmRzIGNoYW5nZSB0aGVpciBiZWhhdmlvciBpbiBhIGJhcmUgcmVwb3NpdG9yeQorICAgKGkuZS4gYSByZXBvc2l0b3J5IHdpdGhvdXQgYXNzb2NpYXRlZCB3b3JraW5nIHRyZWUpLiAgV2UgdXNlCisgICBhIGZhaXJseSBjb25zZXJ2YXRpdmUgaGV1cmlzdGljIChpZiAkR0lUX0RJUiBpcyAiLmdpdCIsIG9yCisgICBlbmRzIHdpdGggIi8uZ2l0IiwgdGhlIHJlcG9zaXRvcnkgaXMgbm90IGJhcmUpIHRvIGRlY2lkZSBpZiBhCisgICByZXBvc2l0b3J5IGlzIGJhcmUsIGJ1dCAiY29yZS5iYXJlIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgaGV1cmlzdGljIHdoZW4gaXQgbWlzaWRlbnRpZmllcworICAgeW91ciByZXBvc2l0b3J5LgorCisgLSBnaXQtZmV0Y2ggdXNlZCB0byBjb21wbGFpbiB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggYnV0CisgICB0aGlzIGlzIG5vdyBhbGxvd2VkIGZvciBhIGJhcmUgcmVwb3NpdG9yeS4gIFNvIGlzIHRoZSB1c2Ugb2YKKyAgICdnaXQtYnJhbmNoIC1mJyB0byB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLgorCisgLSBQb3JjZWxhaW4taXNoIGNvbW1hbmRzIHRoYXQgcmVxdWlyZSBhIHdvcmtpbmcgdHJlZSByZWZ1c2VzIHRvCisgICB3b3JrIGluIGEgYmFyZSByZXBvc2l0b3J5LgorCisKKyogUmVmbG9nCisKKyAtIFJlZmxvZyByZWNvcmRzIHRoZSBoaXN0b3J5IGZyb20gdGhlIHZpZXcgcG9pbnQgb2YgdGhlIGxvY2FsCisgICByZXBvc2l0b3J5LiBJbiBvdGhlciB3b3JkcywgcmVnYXJkbGVzcyBvZiB0aGUgcmVhbCBoaXN0b3J5LAorICAgdGhlIHJlZmxvZyBzaG93cyB0aGUgaGlzdG9yeSBhcyBzZWVuIGJ5IG9uZSBwYXJ0aWN1bGFyCisgICByZXBvc2l0b3J5ICh0aGlzIGVuYWJsZXMgeW91IHRvIGFzayAid2hhdCB3YXMgdGhlIGN1cnJlbnQKKyAgIHJldmlzaW9uIGluIF90aGlzXyByZXBvc2l0b3J5LCB5ZXN0ZXJkYXkgYXQgMXBtPyIpLiAgVGhpcworICAgZmFjaWxpdHkgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciByZXBvc2l0b3JpZXMgd2l0aCB3b3JraW5nCisgICB0cmVlcywgYW5kIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIHRoZSAiYnJhbmNoQHt0aW1lfSIgYW5kCisgICAiYnJhbmNoQHtOdGh9IiBub3RhdGlvbi4KKworIC0gImdpdCBzaG93LWJyYW5jaCIgbGVhcm5lZCBzaG93aW5nIHRoZSByZWZsb2cgZGF0YSB3aXRoIHRoZQorICAgbmV3IC1nIG9wdGlvbi4gICJnaXQgbG9nIiBoYXMgLWcgb3B0aW9uIHRvIHZpZXcgcmVmbG9nCisgICBlbnRyaWVzIGluIGEgbW9yZSB2ZXJib3NlIG1hbm5lci4KKworIC0gZ2l0LWJyYW5jaCBrbm93cyBob3cgdG8gcmVuYW1lIGJyYW5jaGVzIGFuZCBtb3ZlcyBleGlzdGluZworICAgcmVmbG9nIGRhdGEgZnJvbSB0aGUgb2xkIGJyYW5jaCB0byB0aGUgbmV3IG9uZS4KKworIC0gSW4gYWRkaXRpb24gdG8gdGhlIHJlZmxvZyBzdXBwb3J0IGluIHYxLjQuNCBzZXJpZXMsIEhFQUQKKyAgIHJlZmVyZW5jZSBtYWludGFpbnMgaXRzIG93biBsb2cuICAiSEVBREB7NS5taW51dGVzLmFnb30iCisgICBtZWFucyB0aGUgY29tbWl0IHlvdSB3ZXJlIGF0IDUgbWludXRlcyBhZ28sIHdoaWNoIHRha2VzCisgICBicmFuY2ggc3dpdGNoaW5nIGludG8gYWNjb3VudC4gIElmIHlvdSB3YW50IHRvIGtub3cgd2hlcmUgdGhlCisgICB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCB3YXMgYXQgNSBtaW51dGVzIGFnbywgeW91IG5lZWQgdG8KKyAgIGV4cGxpY2l0bHkgc2F5IGl0cyBuYW1lIChlLmcuICJtYXN0ZXJAezUubWludXRlcy5hZ299Iikgb3IKKyAgIG9taXQgdGhlIHJlZm5hbWUgYWx0b2dldGhlciBpLmUuICJAezUubWludXRlcy5hZ299Ii4KKworIC0gVGhlIGNvbW1pdHMgcmVmZXJyZWQgdG8gYnkgcmVmbG9nIGVudHJpZXMgYXJlIG5vdyBwcm90ZWN0ZWQKKyAgIGFnYWluc3QgcHJ1bmluZy4gIFRoZSBuZXcgY29tbWFuZCAiZ2l0IHJlZmxvZyBleHBpcmUiIGNhbiBiZQorICAgdXNlZCB0byB0cnVuY2F0ZSBvbGRlciByZWZsb2cgZW50cmllcyBhbmQgZW50cmllcyB0aGF0IHJlZmVyCisgICB0byBjb21taXRzIHRoYXQgaGF2ZSBiZWVuIHBydW5lZCBhd2F5IHByZXZpb3VzbHkgd2l0aCBvbGRlcgorICAgdmVyc2lvbnMgb2YgZ2l0LgorCisgICBFeGlzdGluZyByZXBvc2l0b3JpZXMgdGhhdCBoYXZlIGJlZW4gdXNpbmcgcmVmbG9nIG1heSBnZXQKKyAgIGNvbXBsYWludHMgZnJvbSBmc2NrLW9iamVjdHMgYW5kIG1heSBub3QgYmUgYWJsZSB0byBydW4KKyAgIGdpdC1yZXBhY2ssIGlmIHlvdSBoYWQgcnVuIGdpdC1wcnVuZSBmcm9tIG9sZGVyIGdpdDsgcGxlYXNlCisgICBydW4gImdpdCByZWZsb2cgZXhwaXJlIC0tc3RhbGUtZml4IC0tYWxsIiBmaXJzdCB0byByZW1vdmUKKyAgIHJlZmxvZyBlbnRyaWVzIHRoYXQgcmVmZXIgdG8gY29tbWl0cyB0aGF0IGFyZSBubyBsb25nZXIgaW4KKyAgIHRoZSByZXBvc2l0b3J5IHdoZW4gdGhhdCBoYXBwZW5zLgorCisKKyogQ3J1ZnRzIHJlbW92YWwKKworIC0gV2UgdXNlZCB0byBzYXkgIm9sZCBjb21taXRzIGFyZSByZXRyaWV2YWJsZSB1c2luZyByZWZsb2cgYW5kCisgICAnbWFzdGVyQHt5ZXN0ZXJkYXl9JyBzeW50YXggYXMgbG9uZyBhcyB5b3UgaGF2ZW4ndCBydW4KKyAgIGdpdC1wcnVuZSIuICBXZSBubyBsb25nZXIgaGF2ZSB0byBzYXkgdGhlIGxhdHRlciBoYWxmIG9mIHRoZQorICAgYWJvdmUgc2VudGVuY2UsIGFzIGdpdC1wcnVuZSBkb2VzIG5vdCByZW1vdmUgdGhpbmdzIHJlYWNoYWJsZQorICAgZnJvbSByZWZsb2cgZW50cmllcy4KKworIC0gVGhlcmUgaXMgYSB0b3BsZXZlbCBnYXJiYWdlIGNvbGxlY3RvciBzY3JpcHQsICdnaXQtZ2MnLCB0aGF0CisgICBydW5zIHBlcmlvZGljIGNsZWFudXAgZnVuY3Rpb25zLCBpbmNsdWRpbmcgJ2dpdC1yZXBhY2sgLWEgLWQnLAorICAgJ2dpdC1yZWZsb2cgZXhwaXJlJywgJ2dpdC1wYWNrLXJlZnMgLS1wcnVuZScsIGFuZCAnZ2l0LXJlcmVyZQorICAgZ2MnLgorCisgLSBUaGUgb3V0cHV0IGZyb20gZnNjayAoImZzY2stb2JqZWN0cyIgaXMgY2FsbGVkIGp1c3QgImZzY2siCisgICBub3csIGJ1dCB0aGUgb2xkIG5hbWUgY29udGludWVzIHRvIHdvcmspIHdhcyBuZWVkbGVzc2x5CisgICBhbGFybWluZyBpbiB0aGF0IGl0IHdhcm5lZCBtaXNzaW5nIG9iamVjdHMgdGhhdCBhcmUgcmVhY2hhYmxlCisgICBvbmx5IGZyb20gZGFuZ2xpbmcgb2JqZWN0cy4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIGFuZCB0aGUKKyAgIG91dHB1dCBpcyBtdWNoIG1vcmUgdXNlZnVsLgorCisKKyogRGV0YWNoZWQgSEVBRAorCisgLSBZb3UgY2FuIHVzZSAnZ2l0LWNoZWNrb3V0JyB0byBjaGVjayBvdXQgYW4gYXJiaXRyYXJ5IHJldmlzaW9uCisgICBvciBhIHRhZyBhcyB3ZWxsLCBpbnN0ZWFkIG9mIG5hbWVkIGJyYW5jaGVzLiAgVGhpcyB3aWxsCisgICBkaXNzb2NpYXRlIHlvdXIgSEVBRCBmcm9tIHRoZSBicmFuY2ggeW91IGFyZSBjdXJyZW50bHkgb24uCisKKyAgIEEgdHlwaWNhbCB1c2Ugb2YgdGhpcyBmZWF0dXJlIGlzIHRvICJsb29rIGFyb3VuZCIuICBFLmcuCisKKwkkIGdpdCBjaGVja291dCB2Mi42LjE2CisJLi4uIGNvbXBpbGUsIHRlc3QsIGV0Yy4KKwkkIGdpdCBjaGVja291dCB2Mi42LjE3CisJLi4uIGNvbXBpbGUsIHRlc3QsIGV0Yy4KKworIC0gQWZ0ZXIgZGV0YWNoaW5nIHlvdXIgSEVBRCwgeW91IGNhbiBnbyBiYWNrIHRvIGFuIGV4aXN0aW5nCisgICBicmFuY2ggd2l0aCB1c3VhbCAiZ2l0IGNoZWNrb3V0ICRicmFuY2giLiAgQWxzbyB5b3UgY2FuCisgICBzdGFydCBhIG5ldyBicmFuY2ggdXNpbmcgImdpdCBjaGVja291dCAtYiAkbmV3YnJhbmNoIiB0bworICAgc3RhcnQgYSBuZXcgYnJhbmNoIGF0IHRoYXQgY29tbWl0LgorCisgLSBZb3UgY2FuIGV2ZW4gcHVsbCBmcm9tIG90aGVyIHJlcG9zaXRvcmllcywgbWFrZSBtZXJnZXMgYW5kCisgICBjb21taXRzIHdoaWxlIHlvdXIgSEVBRCBpcyBkZXRhY2hlZC4gIEFsc28geW91IGNhbiB1c2UgImdpdAorICAgcmVzZXQiIHRvIGp1bXAgdG8gYXJiaXRyYXJ5IGNvbW1pdCwgd2hpbGUgc3RpbGwga2VlcGluZyB5b3VyCisgICBIRUFEIGRldGFjaGVkLgorCisgICBSZW1lbWJlciB0aGF0IGEgZGV0YWNoZWQgc3RhdGUgaXMgdm9sYXRpbGUsIGkuZS4gaXQgd2lsbCBiZSBmb3Jnb3R0ZW4KKyAgIGFzIHNvb24gYXMgeW91IG1vdmUgYXdheSBmcm9tIGl0IHdpdGggdGhlIGNoZWNrb3V0IG9yIHJlc2V0IGNvbW1hbmQsCisgICB1bmxlc3MgYSBicmFuY2ggaXMgY3JlYXRlZCBmcm9tIGl0IGFzIG1lbnRpb25lZCBhYm92ZS4gIEl0IGlzIGFsc28KKyAgIHBvc3NpYmxlIHRvIHJlc2N1ZSBhIGxvc3QgZGV0YWNoZWQgc3RhdGUgZnJvbSB0aGUgSEVBRCByZWZsb2cuCisKKworKiBQYWNrZWQgcmVmcworCisgLSBSZXBvc2l0b3JpZXMgd2l0aCBodW5kcmVkcyBvZiB0YWdzIGhhdmUgYmVlbiBwYXlpbmcgbGFyZ2UKKyAgIG92ZXJoZWFkLCBib3RoIGluIHN0b3JhZ2UgYW5kIGluIHJ1bnRpbWUsIGR1ZSB0byB0aGUKKyAgIHRyYWRpdGlvbmFsIG9uZS1yZWYtcGVyLWZpbGUgZm9ybWF0LiAgQSBuZXcgY29tbWFuZCwKKyAgIGdpdC1wYWNrLXJlZnMsIGNhbiBiZSB1c2VkIHRvICJwYWNrIiB0aGVtIGluIG1vcmUgZWZmaWNpZW50CisgICByZXByZXNlbnRhdGlvbiAoeW91IGNhbiBsZXQgZ2l0LWdjIGRvIHRoaXMgZm9yIHlvdSkuCisKKyAtIENsb25lcyBhbmQgZmV0Y2hlcyBvdmVyIGR1bWIgdHJhbnNwb3J0cyBhcmUgbm93IGF3YXJlIG9mCisgICBwYWNrZWQgcmVmcyBhbmQgY2FuIGRvd25sb2FkIGZyb20gcmVwb3NpdG9yaWVzIHRoYXQgdXNlCisgICB0aGVtLgorCisKKyogQ29uZmlndXJhdGlvbgorCisgLSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gY29sb3Igc2V0dGluZyBhcmUgY29uc29saWRhdGVkIHVuZGVyCisgICBjb2xvci4qIG5hbWVzcGFjZSAob2xkZXIgZGlmZi5jb2xvci4qLCBzdGF0dXMuY29sb3IuKiBhcmUKKyAgIHN0aWxsIHN1cHBvcnRlZCkuCisKKyAtICdnaXQtcmVwby1jb25maWcnIGNvbW1hbmQgaXMgYWNjZXNzaWJsZSBhcyAnZ2l0LWNvbmZpZycgbm93LgorCisKKyogVXBkYXRlZCBmZWF0dXJlcworCisgLSBnaXQtZGVzY3JpYmUgdXNlcyBiZXR0ZXIgY3JpdGVyaWEgdG8gcGljayBhIGJhc2UgcmVmLiAgSXQKKyAgIHVzZWQgdG8gcGljayB0aGUgb25lIHdpdGggdGhlIG5ld2VzdCB0aW1lc3RhbXAsIGJ1dCBub3cgaXQKKyAgIHBpY2tzIHRoZSBvbmUgdGhhdCBpcyB0b3BvbG9naWNhbGx5IHRoZSBjbG9zZXN0ICh0aGF0IGlzLAorICAgYW1vbmcgYW5jZXN0b3JzIG9mIGNvbW1pdCBDLCB0aGUgcmVmIFQgdGhhdCBoYXMgdGhlIHNob3J0ZXN0CisgICBvdXRwdXQgZnJvbSAiZ2l0LXJldi1saXN0IFQuLkMiIGlzIGNob3NlbikuCisKKyAtIGdpdC1kZXNjcmliZSBnaXZlcyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgc2luY2UgdGhlIGJhc2UgcmVmCisgICBiZXR3ZWVuIHRoZSByZWZuYW1lIGFuZCB0aGUgaGFzaCBzdWZmaXguICBFLmcuIHRoZSBjb21taXQgb25lCisgICBiZWZvcmUgdjIuNi4yMC1yYzYgaW4gdGhlIGtlcm5lbCByZXBvc2l0b3J5IGlzOgorCisJdjIuNi4yMC1yYzUtMzA2LWdhMjFiMDY5CisKKyAgIHdoaWNoIHRlbGxzIHlvdSB0aGF0IGl0cyBvYmplY3QgbmFtZSBiZWdpbnMgd2l0aCBhMjFiMDY5LAorICAgdjIuNi4yMC1yYzUgaXMgYW4gYW5jZXN0b3Igb2YgaXQgKG1lYW5pbmcsIHRoZSBjb21taXQKKyAgIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgLXJjNSBoYXMpLCBhbmQgdGhlcmUgYXJlIDMwNiBjb21taXRzCisgICBzaW5jZSB2Mi42LjIwLXJjNS4KKworIC0gZ2l0LWRlc2NyaWJlIHdpdGggLS1hYmJyZXY9MCBjYW4gYmUgdXNlZCB0byBzaG93IG9ubHkgdGhlCisgICBuYW1lIG9mIHRoZSBiYXNlIHJlZi4KKworIC0gZ2l0LWJsYW1lIGxlYXJuZWQgYSBuZXcgb3B0aW9uLCAtLWluY3JlbWVudGFsLCB0aGF0IHRlbGxzIGl0CisgICB0byBvdXRwdXQgdGhlIGJsYW1lcyBhcyB0aGV5IGFyZSBhc3NpZ25lZC4gIEEgc2FtcGxlIHNjcmlwdAorICAgdG8gdXNlIGl0IGlzIGFsc28gaW5jbHVkZWQgYXMgY29udHJpYi9ibGFtZXZpZXcuCisKKyAtIGdpdC1ibGFtZSBzdGFydHMgYW5ub3RhdGluZyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYnkgZGVmYXVsdC4KKworCisqIExlc3MgZXh0ZXJuYWwgZGVwZW5kZW5jeQorCisgLSBXZSBubyBsb25nZXIgcmVxdWlyZSB0aGUgIm1lcmdlIiBwcm9ncmFtIGZyb20gdGhlIFJDUyBzdWl0ZS4KKyAgIEFsbCAzLXdheSBmaWxlLWxldmVsIG1lcmdlcyBhcmUgbm93IGRvbmUgaW50ZXJuYWxseS4KKworIC0gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGdpdC1tZXJnZS1yZWN1cnNpdmUgd2hpY2ggd2FzCisgICBpbiBQeXRob24gaGFzIGJlZW4gcmVtb3ZlZDsgd2UgaGF2ZSBhIEMgaW1wbGVtZW50YXRpb24gb2YgaXQKKyAgIG5vdy4KKworIC0gZ2l0LXNob3J0bG9nIGlzIG5vIGxvbmdlciBhIFBlcmwgc2NyaXB0LiAgSXQgbm8gbG9uZ2VyCisgICByZXF1aXJlcyBvdXRwdXQgcGlwZWQgZnJvbSBnaXQtbG9nOyBpdCBjYW4gYWNjZXB0IHJldmlzaW9uCisgICBwYXJhbWV0ZXJzIGRpcmVjdGx5IG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKworKiBJMThuCisKKyAtIFdlIGhhdmUgYWx3YXlzIGVuY291cmFnZWQgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIGJlIGVuY29kZWQgaW4KKyAgIFVURi04LCBidXQgdGhlIHVzZXJzIGFyZSBhbGxvd2VkIHRvIHVzZSBsZWdhY3kgZW5jb2RpbmcgYXMKKyAgIGFwcHJvcHJpYXRlIGZvciB0aGVpciBwcm9qZWN0cy4gIFRoaXMgd2lsbCBjb250aW51ZSB0byBiZSB0aGUKKyAgIGNhc2UuICBIb3dldmVyLCBhIG5vbiBVVEYtOCBjb21taXQgZW5jb2RpbmcgX211c3RfIGJlCisgICBleHBsaWNpdGx5IHNldCB3aXRoIGkxOG4uY29tbWl0ZW5jb2RpbmcgaW4gdGhlIHJlcG9zaXRvcnkKKyAgIHdoZXJlIGEgY29tbWl0IGlzIG1hZGU7IG90aGVyd2lzZSBnaXQtY29tbWl0LXRyZWUgd2lsbAorICAgY29tcGxhaW4gaWYgdGhlIGxvZyBtZXNzYWdlIGRvZXMgbm90IGxvb2sgbGlrZSBhIHZhbGlkIFVURi04CisgICBzdHJpbmcuCisKKyAtIFRoZSB2YWx1ZSBvZiBpMThuLmNvbW1pdGVuY29kaW5nIGluIHRoZSBvcmlnaW5hdGluZworICAgcmVwb3NpdG9yeSBpcyByZWNvcmRlZCBpbiB0aGUgY29tbWl0IG9iamVjdCBvbiB0aGUgImVuY29kaW5nIgorICAgaGVhZGVyLCBpZiBpdCBpcyBub3QgVVRGLTguICBnaXQtbG9nIGFuZCBmcmllbmRzIG5vdGljZSB0aGlzLAorICAgYW5kIHJlZW5jb2RlcyB0aGUgbWVzc2FnZSB0byB0aGUgbG9nIG91dHB1dCBlbmNvZGluZyB3aGVuCisgICBkaXNwbGF5aW5nLCBpZiB0aGV5IGFyZSBkaWZmZXJlbnQuICBUaGUgbG9nIG91dHB1dCBlbmNvZGluZworICAgaXMgZGV0ZXJtaW5lZCBieSAiZ2l0IGxvZyAtLWVuY29kaW5nPTxlbmNvZGluZz4iLAorICAgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBjb25maWd1cmF0aW9uLCBvciBpMThuLmNvbW1pdGVuY29kaW5nCisgICBjb25maWd1cmF0aW9uLCBpbiB0aGUgZGVjcmVhc2luZyBvcmRlciBvZiBwcmVmZXJlbmNlLCBhbmQKKyAgIGRlZmF1bHRzIHRvIFVURi04LgorCisgLSBUb29scyBmb3IgZS1tYWlsZWQgcGF0Y2ggYXBwbGljYXRpb24gbm93IGRlZmF1bHQgdG8gLXUKKyAgIGJlaGF2aW9yOyBpLmUuIGl0IGFsd2F5cyByZS1jb2RlcyBmcm9tIHRoZSBlLW1haWxlZCBlbmNvZGluZworICAgdG8gdGhlIGVuY29kaW5nIHNwZWNpZmllZCB3aXRoIGkxOG4uY29tbWl0ZW5jb2RpbmcuICBUaGlzCisgICB1bmZvcnR1bmF0ZWx5IGZvcmNlcyBwcm9qZWN0cyB0aGF0IGhhdmUgaGFwcGlseSBiZWVuIHVzaW5nIGEKKyAgIGxlZ2FjeSBlbmNvZGluZyB3aXRob3V0IHNldHRpbmcgaTE4bi5jb21taXRlbmNvZGluZyB0byBzZXQKKyAgIHRoZSBjb25maWd1cmF0aW9uLCBidXQgdGFrZW4gd2l0aCBvdGhlciBpbXByb3ZlbWVudCwgcGxlYXNlCisgICBleGN1c2UgdXMgZm9yIHRoaXMgdmVyeSBtaW5vciBvbmUtdGltZSBpbmNvbnZlbmllbmNlLgorCisKKyogZS1tYWlsZWQgcGF0Y2hlcworCisgLSBTZWUgdGhlIGFib3ZlIEkxOG4gc2VjdGlvbi4KKworIC0gZ2l0LWZvcm1hdC1wYXRjaCBub3cgZW5hYmxlcyAtLWJpbmFyeSB3aXRob3V0IGJlaW5nIGFza2VkLgorICAgZ2l0LWFtIGRvZXMgX25vdF8gZGVmYXVsdCB0byBpdCwgYXMgc2VuZGluZyBiaW5hcnkgcGF0Y2ggdmlhCisgICBlLW1haWwgaXMgdW51c3VhbCBhbmQgaXMgaGFyZGVyIHRvIHJldmlldyB0aGFuIHRleHR1YWwKKyAgIHBhdGNoZXMgYW5kIGl0IGlzIHBydWRlbnQgdG8gcmVxdWlyZSB0aGUgcGVyc29uIHdobyBpcworICAgYXBwbHlpbmcgdGhlIHBhdGNoIHRvIGV4cGxpY2l0bHkgYXNrIGZvciBpdC4KKworIC0gVGhlIGRlZmF1bHQgc3VmZml4IGZvciBnaXQtZm9ybWF0LXBhdGNoIG91dHB1dCBpcyBub3cgIi5wYXRjaCIsCisgICBub3QgIi50eHQiLiAgVGhpcyBjYW4gYmUgY2hhbmdlZCB3aXRoIC0tc3VmZml4PS50eHQgb3B0aW9uLAorICAgb3Igc2V0dGluZyB0aGUgY29uZmlnIHZhcmlhYmxlICJmb3JtYXQuc3VmZml4IiB0byAiLnR4dCIuCisKKworKiBGb3JlaWduIFNDTSBpbnRlcmZhY2VzCisKKyAtIGdpdC1zdm4gbm93IHJlcXVpcmVzIHRoZSBQZXJsIFNWTjo6IGxpYnJhcmllcywgdGhlCisgICBjb21tYW5kLWxpbmUgYmFja2VuZCB3YXMgdG9vIHNsb3cgYW5kIGxpbWl0ZWQuCisKKyAtIHRoZSAnY29tbWl0JyBzdWJjb21tYW5kIG9mIGdpdC1zdm4gaGFzIGJlZW4gcmVuYW1lZCB0bworICAgJ3NldC10cmVlJywgYW5kICdkY29tbWl0JyBpcyB0aGUgcmVjb21tZW5kZWQgcmVwbGFjZW1lbnQgZm9yCisgICBkYXktdG8tZGF5IHdvcmsuCisKKyAtIGdpdCBmYXN0LWltcG9ydCBiYWNrZW5kLgorCisKKyogVXNlciBzdXBwb3J0CisKKyAtIFF1aXRlIGEgbG90IG9mIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KKworIC0gQmFzaCBjb21wbGV0aW9uIHNjcmlwdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgaGVhdmlseS4KKworIC0gQmV0dGVyIGVycm9yIG1lc3NhZ2VzIGZvciBvZnRlbiB1c2VkIFBvcmNlbGFpbmlzaCBjb21tYW5kcy4KKworIC0gR2l0IEdVSS4gIFRoaXMgaXMgYSBzaW1wbGUgVGsgYmFzZWQgZ3JhcGhpY2FsIGludGVyZmFjZSBmb3IKKyAgIGNvbW1vbiBHaXQgb3BlcmF0aW9ucy4KKworCisqIFNsaWRpbmcgbW1hcAorCisgLSBXZSB1c2VkIHRvIGFzc3VtZSB0aGF0IHdlIGNhbiBtbWFwIHRoZSB3aG9sZSBwYWNrZmlsZSB3aGlsZQorICAgaW4gdXNlLCBidXQgd2l0aCBhIGxhcmdlIHByb2plY3QgdGhpcyBjb25zdW1lcyBodWdlIHZpcnR1YWwKKyAgIG1lbW9yeSBzcGFjZSBhbmQgdHJ1bHkgaHVnZSBvbmVzIHdvdWxkIG5vdCBmaXQgaW4gdGhlCisgICB1c2VybGFuZCBhZGRyZXNzIHNwYWNlIG9uIDMyLWJpdCBwbGF0Zm9ybXMuICBXZSBub3cgbW1hcCBodWdlCisgICBwYWNrZmlsZSBpbiBwaWVjZXMgdG8gYXZvaWQgdGhpcyBwcm9ibGVtLgorCisKKyogU2hhbGxvdyBjbG9uZXMKKworIC0gVGhlcmUgaXMgYSBwYXJ0aWFsIHN1cHBvcnQgZm9yICdzaGFsbG93JyByZXBvc2l0b3JpZXMgdGhhdAorICAga2VlcHMgb25seSByZWNlbnQgaGlzdG9yeS4gIEEgJ3NoYWxsb3cgY2xvbmUnIGlzIGNyZWF0ZWQgYnkKKyAgIHNwZWNpZnlpbmcgaG93IGRlZXAgdGhhdCB0cnVuY2F0ZWQgaGlzdG9yeSBzaG91bGQgYmUKKyAgIChlLmcuICJnaXQgY2xvbmUgLS1kZXB0aCA1IGdpdDovL3NvbWUud2hlcmUvcmVwby5naXQiKS4KKworICAgQ3VycmVudGx5IGEgc2hhbGxvdyByZXBvc2l0b3J5IGhhcyBudW1iZXIgb2YgbGltaXRhdGlvbnM6CisKKyAgIC0gQ2xvbmluZyBhbmQgZmV0Y2hpbmcgX2Zyb21fIGEgc2hhbGxvdyBjbG9uZSBhcmUgbm90CisgICAgIHN1cHBvcnRlZCAobm9yIHRlc3RlZCAtLSBzbyB0aGV5IG1pZ2h0IHdvcmsgYnkgYWNjaWRlbnQgYnV0CisgICAgIHRoZXkgYXJlIG5vdCBleHBlY3RlZCB0bykuCisKKyAgIC0gUHVzaGluZyBmcm9tIG5vciBpbnRvIGEgc2hhbGxvdyBjbG9uZSBhcmUgbm90IGV4cGVjdGVkIHRvCisgICAgIHdvcmsuCisKKyAgIC0gTWVyZ2luZyBpbnNpZGUgYSBzaGFsbG93IHJlcG9zaXRvcnkgd291bGQgd29yayBhcyBsb25nIGFzIGEKKyAgICAgbWVyZ2UgYmFzZSBpcyBmb3VuZCBpbiB0aGUgcmVjZW50IGhpc3RvcnksIGJ1dCBvdGhlcndpc2UgaXQKKyAgICAgd2lsbCBiZSBsaWtlIG1lcmdpbmcgdW5yZWxhdGVkIGhpc3RvcmllcyBhbmQgbWF5IHJlc3VsdCBpbgorICAgICBodWdlIGNvbmZsaWN0cy4KKworICAgYnV0IHRoaXMgd291bGQgYmUgbW9yZSB0aGFuIGFkZXF1YXRlIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8KKyAgIGxvb2sgYXQgbmVhciB0aGUgdGlwIG9mIGEgYmlnIHByb2plY3Qgd2l0aCBhIGRlZXAgaGlzdG9yeSBhbmQKKyAgIHNlbmQgcGF0Y2hlcyBpbiBlLW1haWwgZm9ybWF0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0NzEyMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMS50eHQKQEAgLTAsMCArMSw2NSBAQAorR0lUIHYxLjUuMS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyAgLSBUaGUgLS1sZWZ0LXJpZ2h0IG9wdGlvbiBvZiByZXYtbGlzdCBhbmQgZnJpZW5kcyBpcyBkb2N1bWVudGVkLgorCisgIC0gVGhlIGRvY3VtZW50YXRpb24gZm9yIGN2c2ltcG9ydCBoYXMgYmVlbiBtYWpvcmx5IGltcHJvdmVkLgorCisgIC0gImdpdC1zaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmciIHdhcyBkb2N1bWVudGVkLgorCisqIEJ1Z2ZpeGVzCisKKyAgLSBUaGUgaW1wbGVtZW50YXRpb24gb2YgLXAgb3B0aW9uIGluICJnaXQgY3ZzZXhwb3J0Y29tbWl0IiBoYWQKKyAgICB0aGUgbWVhbmluZyBvZiAtQyAoY29udGV4dCByZWR1Y3Rpb24pIG9wdGlvbiB3cm9uZywgYW5kCisgICAgbG9vc2VuZWQgdGhlIGNvbnRleHQgcmVxdWlyZW1lbnRzIHdoZW4gaXQgd2FzIHRvbGQgdG8gYmUKKyAgICBzdHJpY3QuCisKKyAgLSAiZ2l0IGN2c3NlcnZlciIgZGlkIG5vdCBiZWhhdmUgbGlrZSB0aGUgcmVhbCBjdnNzZXJ2ZXIgd2hlbgorICAgIGNsaWVudCBzaWRlIHJlbW92ZWQgYSBmaWxlIGZyb20gdGhlIHdvcmtpbmcgdHJlZSB3aXRob3V0CisgICAgZG9pbmcgYW55dGhpbmcgZWxzZSBvbiB0aGUgcGF0aC4gIEluIHN1Y2ggYSBjYXNlLCBpdCBzaG91bGQKKyAgICByZXN0b3JlIGl0IGZyb20gdGhlIGNoZWNrZWQgb3V0IHJldmlzaW9uLgorCisgIC0gImdpdCBmc2NrIiBpc3N1ZWQgYW4gYWxhcm1pbmcgZXJyb3IgbWVzc2FnZSBvbiBkZXRhY2hlZAorICAgIEhFQUQuICBJdCBpcyBub3QgYW4gZXJyb3Igc2luY2UgYXQgbGVhc3QgMS41LjAuCisKKyAgLSAiZ2l0IHNlbmQtZW1haWwiIHByb2R1Y2VkIG9mIFJlZmVyZW5jZXMgaGVhZGVyIG9mIHVuYm91bmRlZCBsZW5ndGg7CisgICAgZml4ZWQgdGhpcyB3aXRoIGxpbmUtZm9sZGluZy4KKworICAtICJnaXQgYXJjaGl2ZSIgdG8gZG93bmxvYWQgZnJvbSByZW1vdGUgc2l0ZSBzaG91bGQgbm90CisgICAgcmVxdWlyZSB5b3UgdG8gYmUgaW4gYSBnaXQgcmVwb3NpdG9yeSwgYnV0IGl0IGluY29ycmVjdGx5CisgICAgZGlkLgorCisgIC0gImdpdCBhcHBseSIgaWdub3JlZCAtcDxuPiBmb3IgImRpZmYgLS1naXQiIGZvcm1hdHRlZAorICAgIHBhdGNoZXMuCisKKyAgLSAiZ2l0IHJlcmVyZSIgcmVjb3JkZWQgYSBjb25mbGljdCB0aGF0IGhhZCBvbmUgc2lkZSBlbXB0eQorICAgICh0aGUgb3RoZXIgc2lkZSBhZGRzKSBpbmNvcnJlY3RseTsgdGhpcyBtYWRlIG1lcmdpbmcgaW4gdGhlCisgICAgb3RoZXIgZGlyZWN0aW9uIGZhaWwgdG8gdXNlIHByZXZpb3VzbHkgcmVjb3JkZWQgcmVzb2x1dGlvbi4KKworICAtIHQ0MjAwIHRlc3Qgd2FzIGJyb2tlbiB3aGVyZSAid2MgLWwiIHBhZHMgaXRzIG91dHB1dCB3aXRoCisgICAgc3BhY2VzLgorCisgIC0gImdpdCBicmFuY2ggLW0gb2xkIG5ldyIgdG8gcmVuYW1lIGJyYW5jaCBkaWQgbm90IHdvcmsKKyAgICB3aXRob3V0IGEgY29uZmlndXJhdGlvbiBmaWxlIGluICIuZ2l0L2NvbmZpZyIuCisKKyAgLSBUaGUgc2FtcGxlIGhvb2sgZm9yIG5vdGlmaWNhdGlvbiBlLW1haWwgd2FzIG1pc25hbWVkLgorCisgIC0gZ2l0d2ViIGRpZCBub3Qgc2hvdyB0eXBlLWNoYW5naW5nIHBhdGNoIGNvcnJlY3RseSBpbiB0aGUKKyAgICBibG9iZGlmZiB2aWV3LgorCisgIC0gZ2l0LXN2biBkaWQgbm90IGVycm9yIG91dCB3aXRoIGluY29ycmVjdCBjb21tYW5kIGxpbmUgb3B0aW9ucy4KKworICAtIGdpdC1zdm4gZmVsbCBpbnRvIGFuIGluZmluaXRlIGxvb3Agd2hlbiBpbnNhbmVseSBsb25nIGNvbW1pdAorICAgIG1lc3NhZ2Ugd2FzIGZvdW5kLgorCisgIC0gZ2l0LXN2biBkY29tbWl0IGFuZCByZWJhc2Ugd2FzIGNvbmZ1c2VkIGJ5IHBhdGNoZXMgdGhhdCB3ZXJlCisgICAgbWVyZ2VkIGZyb20gYW5vdGhlciBicmFuY2ggdGhhdCBpcyBtYW5hZ2VkIGJ5IGdpdC1zdm4uCisKKyAgLSBnaXQtc3ZuIHVzZWQgdG8gZ2V0IGNvbmZ1c2VkIHdoZW4gZ2xvYmJpbmcgcmVtb3RlIGJyYW5jaC90YWcKKyAgICBzcGVjIChlLmcuICJicmFuY2hlcyA9IHByb2ovYnJhbmNoZXMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKQorICAgIGlzIHVzZWQgYW5kIHRoZXJlIHdhcyBhIHBsYWluIGZpbGUgdGhhdCBtYXRjaGVkIHRoZSBnbG9iLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4NDU2MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMi50eHQKQEAgLTAsMCArMSw1MCBAQAorR0lUIHYxLjUuMS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSAiZ2l0IGNsb25lIiBvdmVyIGh0dHAgZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCBoYXMgbG9zdCB0aGUKKyAgICBsb29zZSByZWZzIGJ5IHJ1bm5pbmcgImdpdCBwYWNrLXJlZnMiIHdlcmUgYnJva2VuIChhIGNvZGUgdG8KKyAgICBkZWFsIHdpdGggdGhpcyB3YXMgYWRkZWQgdG8gImdpdCBmZXRjaCIgaW4gdjEuNS4wLCBidXQgaXQKKyAgICB3YXMgbWlzc2luZyBmcm9tICJnaXQgY2xvbmUiKS4KKworICAtICJnaXQgZGlmZiBhLyBiLyIgaW5jb3JyZWN0bHkgZmVsbCBpbiAiZGlmZiBiZXR3ZWVuIHR3bworICAgIGZpbGVzeXN0ZW0gb2JqZWN0cyIgY29kZXBhdGgsIHdoZW4gdGhlIHVzZXIgbW9zdCBsaWtlbHkKKyAgICB3YW50ZWQgdG8gbGltaXQgdGhlIGV4dGVudCBvZiBvdXRwdXQgdG8gdHdvIHRyYWNrZWQKKyAgICBkaXJlY3Rvcmllcy4KKworICAtIGdpdC1xdWlsdGltcG9ydCBoYWQgdGhlIHNhbWUgYnVnIGFzIHdlIGZpeGVkIGZvcgorICAgIGdpdC1hcHBseW1ib3ggaW4gdjEuNS4xLjEgLS0gaXQgZ2F2ZSBhbiBhbGFybWluZyAiZGlkIG5vdAorICAgIGhhdmUgYW55IHBhdGNoIiBtZXNzYWdlIChidXQgZGlkIG5vdCBhY3R1YWxseSBmYWlsIGFuZCB3YXMKKyAgICBoYXJtbGVzcykuCisKKyAgLSB2YXJpb3VzIGdpdC1zdm4gZml4ZXMuCisKKyAgLSBTYW1wbGUgdXBkYXRlIGhvb2sgaW5jb3JyZWN0bHkgYWx3YXlzIHJlZnVzZWQgcmVxdWVzdHMgdG8KKyAgICBkZWxldGUgYnJhbmNoZXMgdGhyb3VnaCBwdXNoLgorCisgIC0gZ2l0LWJsYW1lIG9uIGEgdmVyeSBsb25nIHdvcmtpbmcgdHJlZSBwYXRoIGhhZCBidWZmZXIKKyAgICBvdmVycnVuIHByb2JsZW0uCisKKyAgLSBnaXQtYXBwbHkgZGlkIG5vdCBsaWtlIHRvIGJlIGZlZCB0d28gcGF0Y2hlcyBpbiBhIHJvdyB0aGF0IGNyZWF0ZWQKKyAgICBhbmQgdGhlbiBtb2RpZmllZCB0aGUgc2FtZSBmaWxlLgorCisgIC0gZ2l0LXN2biB3YXMgY29uZnVzZWQgd2hlbiBhIG5vbi1wcm9qZWN0IHdhcyBzdG9yZWQgZGlyZWN0bHkgdW5kZXIKKyAgICB0cnVuay8sIGJyYW5jaGVzLyBhbmQgdGFncy8uCisKKyAgLSBnaXQtc3ZuIHdhbnRzIHRoZSBFcnJvci5wbSBtb2R1bGUgdGhhdCB3YXMgYXQgbGVhc3QgYXMgbmV3CisgICAgYXMgd2hhdCB3ZSBzaGlwIGFzIHBhcnQgb2YgZ2l0OyBpbnN0YWxsIG91cnMgaW4gb3VyIHByaXZhdGUKKyAgICBpbnN0YWxsYXRpb24gbG9jYXRpb24gaWYgdGhlIG9uZSBvbiB0aGUgc3lzdGVtIGlzIG9sZGVyLgorCisgIC0gQW4gZWFybGllciB1cGRhdGUgdG8gY29tbWFuZCBsaW5lIGludGVnZXIgcGFyYW1ldGVyIHBhcnNlciB3YXMKKyAgICBib3RjaGVkIGFuZCBtYWRlICd1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8nIGNvbXBsZXRlbHkgdXNlbGVzcy4KKworCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisgIC0gVmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgZnJvbSBKLiBCcnVjZSBGaWVsZHMsIEZyYW5rCisgICAgTGljaHRlbmhlbGQsIEFsZXggUmllc2VuIGFuZCBvdGhlcnMuICBBbmRyZXcgUnVkZXIgc3RhcnRlZCBhCisgICAgd2FyIG9uIHVuZG9jdW1lbnRlZCBvcHRpb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2NDA4YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMy50eHQKQEAgLTAsMCArMSw0NSBAQAorR0lUIHYxLjUuMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBnaXQtYWRkIHRyaWVkIHRvIG9wdGltaXplIGJ5IGZpbmRpbmcgY29tbW9uIGxlYWRpbmcKKyAgICBkaXJlY3RvcmllcyBhY3Jvc3MgaXRzIGFyZ3VtZW50cyBidXQgYm90Y2hlZCwgY2F1c2luZyB2ZXJ5CisgICAgY29uZnVzZWQgYmVoYXZpb3VyLgorCisgIC0gdW5vZmZpY2lhbCBycG0uc3BlYyBmaWxlIHNoaXBwZWQgd2l0aCBnaXQgd2FzIGxldHRpbmcKKyAgICBFVENfR0lUQ09ORklHIHNldCB0byAvdXNyL2V0Yy9naXRjb25maWcuICBUd2VhayB0aGUgb2ZmaWNpYWwKKyAgICBNYWtlZmlsZSB0byBtYWtlIGl0IGhhcmRlciBmb3IgZGlzdHJvIHBlb3BsZSB0byBtYWtlIHRoZQorICAgIHNhbWUgbWlzdGFrZSwgYnkgc2V0dGluZyB0aGUgdmFyaWFibGUgdG8gL2V0Yy9naXRjb25maWcgaWYKKyAgICBwcmVmaXggaXMgc2V0IHRvIC91c3IuCisKKyAgLSBnaXQtc3ZuIGluY29uc2lzdGVudGx5IHN0cmlwcGVkIGF3YXkgdXNlcm5hbWUgZnJvbSB0aGUgVVJMCisgICAgb25seSB3aGVuIHN2bnN5bmNfcHJvcHMgd2FzIGluIHVzZS4KKworICAtIGdpdC1zdm4gZ290IGNvbmZ1c2VkIHdoZW4gaGFuZGxpbmcgc3ltbGlua3Mgb24gTWFjIE9TLgorCisgIC0gZ2l0LXNlbmQtZW1haWwgd2FzIG5vdCBxdW90aW5nIHJlY2lwaWVudCBuYW1lcyB0aGF0IGhhdmUKKyAgICBwZXJpb2QgJy4nIGluIHRoZW0uICBBbHNvIGl0IGRpZCBub3QgYWxsb3cgb3ZlcnJpZGluZworICAgIGVudmVsb3BlIHNlbmRlciwgd2hpY2ggbWFkZSBpdCBpbXBvc3NpYmxlIHRvIHNlbmQgcGF0Y2hlcyB0bworICAgIGNlcnRhaW4gc3Vic2NyaWJlci1vbmx5IGxpc3RzLgorCisgIC0gYnVpbHQtaW4gd3JpdGVfdHJlZSgpIHJvdXRpbmUgaGFkIGEgc2VxdWVuY2UgdGhhdCByZW5hbWVkIGEKKyAgICBmaWxlIHRoYXQgaXMgc3RpbGwgb3Blbiwgd2hpY2ggc29tZSBzeXN0ZW1zIGRpZCBub3QgbGlrZS4KKworICAtIHdoZW4gbWVtb3J5IGlzIHZlcnkgdGlnaHQsIHNsaWRpbmcgbW1hcCBjb2RlIHRvIHJlYWQKKyAgICBwYWNrZmlsZXMgaW5jb3JyZWN0bHkgY2xvc2VkIHRoZSBmZCB0aGF0IHdhcyBzdGlsbCBiZWluZworICAgIHVzZWQgdG8gcmVhZCB0aGUgcGFjay4KKworICAtIGltcG9ydC10YXJzIGNvbnRyaWJ1dGVkIGZyb250LWVuZCBmb3IgZmFzdGltcG9ydCB3YXMgcGFzc2luZworICAgIHdyb25nIGRpcmVjdG9yeSBtb2RlcyB3aXRob3V0IGNoZWNraW5nLgorCisgIC0gZ2l0LWZhc3RpbXBvcnQgdHJ1c3RlZCBpdHMgaW5wdXQgdG9vIG11Y2ggYW5kIGFsbG93ZWQgdG8KKyAgICBjcmVhdGUgY29ycnVwdCB0cmVlIG9iamVjdHMgd2l0aCBlbnRyaWVzIHdpdGhvdXQgYSBuYW1lLgorCisgIC0gZ2l0LWZldGNoIG5lZWRsZXNzbHkgYmFyZmVkIHdoZW4gdG9vIGxvbmcgcmVmbG9nIGFjdGlvbgorICAgIGRlc2NyaXB0aW9uIHdhcyBnaXZlbiBieSB0aGUgY2FsbGVyLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyZjY2YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNC50eHQKQEAgLTAsMCArMSwzMCBAQAorR0lUIHYxLjUuMS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSAiZ2l0LWh0dHAtZmV0Y2giIGRpZCBub3Qgd29yayBhcm91bmQgYSBidWcgaW4gbGliY3VybAorICAgIGVhcmxpZXIgdGhhbiA3LjE2IChjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoKSB3YXMgYnJva2VuKS4KKworICAtICJnaXQgY3Zzc2VydmVyIiBoYW5kbGVzIGEgZmlsZSB0aGF0IHdhcyBvbmNlIHJlbW92ZWQgYW5kCisgICAgdGhlbiBhZGRlZCBhZ2FpbiBjb3JyZWN0bHkuCisKKyAgLSBpbXBvcnQtdGFycyBzY3JpcHQgKGluIGNvbnRyaWIvKSBoYW5kbGVzIEdOVSB0YXIgYXJjaGl2ZXMKKyAgICB0aGF0IGNvbnRhaW4gcGF0aG5hbWVzIGxvbmdlciB0aGFuIDEwMCBieXRlcyAobG9uZy1saW5rCisgICAgZXh0ZW5zaW9uKSBjb3JyZWN0bHkuCisKKyAgLSB4ZGVsdGEgdGVzdCBwcm9ncmFtIGRpZCBub3QgYnVpbGQgY29ycmVjdGx5LgorCisgIC0gZ2l0d2ViIHNvbWV0aW1lcyB0cmllZCBpbmNvcnJlY3RseSB0byBhcHBseSBmdW5jdGlvbiB0bworICAgIGRlY29kZSB1dGY4IHR3aWNlLCByZXN1bHRpbmcgaW4gY29ycnVwdCBvdXRwdXQuCisKKyAgLSAiZ2l0IGJsYW1lIC1DIiBtaXNoYW5kbGVkIHRleHQgYXQgdGhlIGVuZCBvZiBhIGdyb3VwIG9mCisgICAgbGluZXMuCisKKyAgLSAiZ2l0IGxvZy9yZXYtbGlzdCAtLWJvdW5kYXJ5IiBkaWQgbm90IHByb2R1Y2Ugb3V0cHV0CisgICAgY29ycmVjdGx5IHdpdGhvdXQgLS1sZWZ0LXJpZ2h0IG9wdGlvbi4KKworICAtIE1hbnkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhYjhlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNS50eHQKQEAgLTAsMCArMSw0MiBAQAorR0lUIHYxLjUuMS41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMS40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBnaXQtc2VuZC1lbWFpbCBkaWQgbm90IHVuZGVyc3RhbmQgYWxpYXNlcyBmaWxlIGZvciBtdXR0LCB3aGljaAorICAgIGFsbG93cyBsZWFkaW5nIHdoaXRlc3BhY2VzLgorCisgIC0gZ2l0LWZvcm1hdC1wYXRjaCBlbWl0dGVkIENvbnRlbnQtVHlwZSBhbmQgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZworICAgIGhlYWRlcnMgZm9yIG5vbiBBU0NJSSBjb250ZW50cywgYnV0IGZhaWxlZCB0byBhZGQgTUlNRS1WZXJzaW9uLgorCisgIC0gZ2l0LW5hbWUtcmV2IGhhZCBhIGJ1ZmZlciBvdmVycnVuIHdpdGggYSBkZWVwIGhpc3RvcnkuCisKKyAgLSBjb250cmlidXRlZCBzY3JpcHQgaW1wb3J0LXRhcnMgZGlkIG5vdCBnZXQgdGhlIGRpcmVjdG9yeSBpbgorICAgIHRhciBhcmNoaXZlcyBpbnRlcnByZXRlZCBjb3JyZWN0bHkuCisKKyAgLSBnaXQtc3ZuIHdhcyByZXBvcnRlZCB0byBzZWdmYXVsdCBmb3IgbWFueSBwZW9wbGUgb24gbGlzdCBhbmQKKyAgICAjZ2l0OyBob3BlZnVsbHkgdGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICAtICJnaXQtc3ZuIGNsb25lIiBkb2VzIG5vdCB0cnkgdG8gbWluaW1pemUgdGhlIFVSTAorICAgIChpLmUuIGNvbm5lY3QgdG8gaGlnaGVyIGxldmVsIGhpZXJhcmNoeSkgYnkgZGVmYXVsdCwgYXMgdGhpcworICAgIGNhbiBwcmV2ZW50IGNsb25lIHRvIGZhaWwgaWYgb25seSBwYXJ0IG9mIHRoZSByZXBvc2l0b3J5CisgICAgKGUuZy4gJ3RydW5rJykgaXMgb3BlbiB0byBwdWJsaWMuCisKKyAgLSAiZ2l0IGNoZWNrb3V0IGJyYW5jaF4wIiBkaWQgbm90IGRldGFjaCB0aGUgaGVhZCB3aGVuIHlvdSBhcmUKKyAgICBhbHJlYWR5IG9uICdicmFuY2gnOyBiYWNrcG9ydGVkIHRoZSBmaXggZnJvbSB0aGUgJ21hc3RlcicuCisKKyAgLSAiZ2l0LWNvbmZpZyBzZWN0aW9uLnZhciIgZGlkIG5vdCBjb3JyZWN0bHkgd29yayB3aGVuCisgICAgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBmaWxlIGhhZCBib3RoIFtzZWN0aW9uXSBhbmQgW3NlY3Rpb24gIm5hbWUiXQorICAgIG5leHQgdG8gZWFjaCBvdGhlci4KKworICAtICJnaXQgY2xvbmUgLi4vb3RoZXItZGlyZWN0b3J5IiB3YXMgZm9vbGVkIGlmIHRoZSBjdXJyZW50CisgICAgZGlyZWN0b3J5ICRQV0QgcG9pbnRzIGF0IGlzIGEgc3ltYm9saWMgbGluay4KKworICAtIChidWlsZCkgdHJlZV9lbnRyeV9leHRyYWN0KCkgZnVuY3Rpb24gd2FzIGJvdGggc3RhdGljIGlubGluZQorICAgIGFuZCBleHRlcm4sIHdoaWNoIGNhdXNlZCB0cm91YmxlIGNvbXBpbGluZyB3aXRoIEZvcnRlMTIKKyAgICBjb21waWxlcnMgb24gU3VuLgorCisgIC0gTWFueSBtYW55IGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWYzYWMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS42LnR4dApAQCAtMCwwICsxLDQ1IEBACitHSVQgdjEuNS4xLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4xLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtIGdpdC1zZW5kLWVtYWlsIGRpZCBub3QgdW5kZXJzdGFuZCBhbGlhc2VzIGZpbGUgZm9yIG11dHQsIHdoaWNoCisgICAgYWxsb3dzIGxlYWRpbmcgd2hpdGVzcGFjZXMuCisKKyAgLSBnaXQtZm9ybWF0LXBhdGNoIGVtaXR0ZWQgQ29udGVudC1UeXBlIGFuZCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nCisgICAgaGVhZGVycyBmb3Igbm9uIEFTQ0lJIGNvbnRlbnRzLCBidXQgZmFpbGVkIHRvIGFkZCBNSU1FLVZlcnNpb24uCisKKyAgLSBnaXQtbmFtZS1yZXYgaGFkIGEgYnVmZmVyIG92ZXJydW4gd2l0aCBhIGRlZXAgaGlzdG9yeS4KKworICAtIGNvbnRyaWJ1dGVkIHNjcmlwdCBpbXBvcnQtdGFycyBkaWQgbm90IGdldCB0aGUgZGlyZWN0b3J5IGluCisgICAgdGFyIGFyY2hpdmVzIGludGVycHJldGVkIGNvcnJlY3RseS4KKworICAtIGdpdC1zdm4gd2FzIHJlcG9ydGVkIHRvIHNlZ2ZhdWx0IGZvciBtYW55IHBlb3BsZSBvbiBsaXN0IGFuZAorICAgICNnaXQ7IGhvcGVmdWxseSB0aGlzIGhhcyBiZWVuIGZpeGVkLgorCisgIC0gZ2l0LXN2biBhbHNvIGhhZCBhIGJ1ZyB0byBjcmFzaCBzdm5zZXJ2ZSBieSBzZW5kaW5nIGEgYmFkCisgICAgc2VxdWVuY2Ugb2YgcmVxdWVzdHMuCisKKyAgLSAiZ2l0LXN2biBjbG9uZSIgZG9lcyBub3QgdHJ5IHRvIG1pbmltaXplIHRoZSBVUkwKKyAgICAoaS5lLiBjb25uZWN0IHRvIGhpZ2hlciBsZXZlbCBoaWVyYXJjaHkpIGJ5IGRlZmF1bHQsIGFzIHRoaXMKKyAgICBjYW4gcHJldmVudCBjbG9uZSB0byBmYWlsIGlmIG9ubHkgcGFydCBvZiB0aGUgcmVwb3NpdG9yeQorICAgIChlLmcuICd0cnVuaycpIGlzIG9wZW4gdG8gcHVibGljLgorCisgIC0gImdpdCBjaGVja291dCBicmFuY2heMCIgZGlkIG5vdCBkZXRhY2ggdGhlIGhlYWQgd2hlbiB5b3UgYXJlCisgICAgYWxyZWFkeSBvbiAnYnJhbmNoJzsgYmFja3BvcnRlZCB0aGUgZml4IGZyb20gdGhlICdtYXN0ZXInLgorCisgIC0gImdpdC1jb25maWcgc2VjdGlvbi52YXIiIGRpZCBub3QgY29ycmVjdGx5IHdvcmsgd2hlbgorICAgIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZSBoYWQgYm90aCBbc2VjdGlvbl0gYW5kIFtzZWN0aW9uICJuYW1lIl0KKyAgICBuZXh0IHRvIGVhY2ggb3RoZXIuCisKKyAgLSAiZ2l0IGNsb25lIC4uL290aGVyLWRpcmVjdG9yeSIgd2FzIGZvb2xlZCBpZiB0aGUgY3VycmVudAorICAgIGRpcmVjdG9yeSAkUFdEIHBvaW50cyBhdCBpcyBhIHN5bWJvbGljIGxpbmsuCisKKyAgLSAoYnVpbGQpIHRyZWVfZW50cnlfZXh0cmFjdCgpIGZ1bmN0aW9uIHdhcyBib3RoIHN0YXRpYyBpbmxpbmUKKyAgICBhbmQgZXh0ZXJuLCB3aGljaCBjYXVzZWQgdHJvdWJsZSBjb21waWxpbmcgd2l0aCBGb3J0ZTEyCisgICAgY29tcGlsZXJzIG9uIFN1bi4KKworICAtIE1hbnkgbWFueSBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWVkMzY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS50eHQKQEAgLTAsMCArMSwzNzEgQEAKK0dJVCB2MS41LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNS4wCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIERlcHJlY2F0ZWQgY29tbWFuZHMgYW5kIG9wdGlvbnMuCisKKyAgLSBnaXQtZGlmZi1zdGFnZXMgYW5kIGdpdC1yZXNvbHZlIGhhdmUgYmVlbiByZW1vdmVkLgorCisqIE5ldyBjb21tYW5kcyBhbmQgb3B0aW9ucy4KKworICAtICJnaXQgbG9nIiBhbmQgZnJpZW5kcyB0YWtlIC0tcmV2ZXJzZSwgd2hpY2ggaW5zdHJ1Y3RzIHRoZW0KKyAgICB0byBnaXZlIHRoZWlyIG91dHB1dCBpbiB0aGUgb3JkZXIgb3Bwb3NpdGUgZnJvbSB0aGVpciB1c3VhbC4KKyAgICBUaGV5IHR5cGljYWxseSBvdXRwdXQgZnJvbSBuZXcgdG8gb2xkLCBidXQgd2l0aCB0aGlzIG9wdGlvbgorICAgIHRoZWlyIG91dHB1dCB3b3VsZCByZWFkIGZyb20gb2xkIHRvIG5ldy4gICJnaXQgc2hvcnRsb2ciCisgICAgdXN1YWxseSBsaXN0cyBvbGRlciBjb21taXRzIGZpcnN0LCBidXQgd2l0aCB0aGlzIG9wdGlvbiwKKyAgICB0aGV5IGFyZSBzaG93biBmcm9tIG5ldyB0byBvbGQuCisKKyAgLSAiZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6PHN0cmluZz4iIHRvIGFsbG93IG1vcmUgZmxleGlibGUKKyAgICBjdXN0b20gbG9nIG91dHB1dC4KKworICAtICJnaXQgZGlmZiIgbGVhcm5lZCAtLWlnbm9yZS1zcGFjZS1hdC1lb2wuICBUaGlzIGlzIGEgd2Vha2VyCisgICAgZm9ybSBvZiAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UuCisKKyAgLSAiZ2l0IGRpZmYgLS1uby1pbmRleCBwYXRoQSBwYXRoQiIgY2FuIGJlIHVzZWQgYXMgZGlmZgorICAgIHJlcGxhY2VtZW50IHdpdGggZ2l0IHNwZWNpZmljIGVuaGFuY2VtZW50cy4KKworICAtICJnaXQgZGlmZiAtLW5vLWluZGV4IiBjYW4gcmVhZCBmcm9tICctJyAoc3RhbmRhcmQgaW5wdXQpLgorCisgIC0gImdpdCBkaWZmIiBhbHNvIGxlYXJuZWQgLS1leGl0LWNvZGUgdG8gZXhpdCB3aXRoIG5vbi16ZXJvCisgICAgc3RhdHVzIHdoZW4gaXQgZm91bmQgZGlmZmVyZW5jZXMuICBJbiB0aGUgZnV0dXJlIHdlIG1pZ2h0CisgICAgd2FudCB0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQgYnV0IHRoYXQgd291bGQgYmUgYSByYXRoZXIgYmlnCisgICAgYmFja3dhcmQgaW5jb21wYXRpYmxlIGNoYW5nZTsgaXQgd2lsbCBzdGF5IGFzIGFuIG9wdGlvbiBmb3IKKyAgICBub3cuCisKKyAgLSAiZ2l0IGRpZmYgLS1xdWlldCIgaXMgLS1leGl0LWNvZGUgd2l0aCBvdXRwdXQgdHVybmVkIG9mZiwKKyAgICBtZWFudCBmb3Igc2NyaXB0ZWQgdXNlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFueQorICAgIHRyZWUtbGV2ZWwgZGlmZmVyZW5jZS4KKworICAtIFRleHR1YWwgcGF0Y2ggZ2VuZXJhdGlvbiB3aXRoICJnaXQgZGlmZiIgd2l0aG91dCAtdy8tYgorICAgIG9wdGlvbiBoYXMgYmVlbiBzaWduaWZpY2FudGx5IG9wdGltaXplZC4gICJnaXQgYmxhbWUiIGdvdAorICAgIGZhc3RlciBiZWNhdXNlIG9mIHRoZSBzYW1lIGNoYW5nZS4KKworICAtICJnaXQgbG9nIiBhbmQgImdpdCByZXYtbGlzdCIgaGFzIGJlZW4gb3B0aW1pemVkCisgICAgc2lnbmlmaWNhbnRseSB3aGVuIHRoZXkgYXJlIHVzZWQgd2l0aCBwYXRoc3BlY3MuCisKKyAgLSAiZ2l0IGJyYW5jaCAtLXRyYWNrIiBjYW4gYmUgdXNlZCB0byBzZXQgdXAgY29uZmlndXJhdGlvbgorICAgIHZhcmlhYmxlcyB0byBoZWxwIGl0IGVhc2llciB0byBiYXNlIHlvdXIgd29yayBvbiBicmFuY2hlcworICAgIHlvdSB0cmFjayBmcm9tIGEgcmVtb3RlIHNpdGUuCisKKyAgLSAiZ2l0IGZvcm1hdC1wYXRjaCAtLWF0dGFjaCIgbm93IGVtaXRzIGF0dGFjaG1lbnRzLiAgVXNlCisgICAgLS1pbmxpbmUgdG8gZ2V0IGFuIGlubGluZWQgbXVsdGlwYXJ0L21peGVkLgorCisgIC0gImdpdCBuYW1lLXJldiIgbGVhcm5lZCAtLXJlZnM9PHBhdHRlcm4+LCB0byBsaW1pdCB0aGUgdGFncworICAgIHVzZWQgZm9yIG5hbWluZyB0aGUgZ2l2ZW4gcmV2aXNpb25zIG9ubHkgdG8gdGhlIG9uZXMKKyAgICBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0dGVybi4KKworICAtICJnaXQgcmVtb3RlIHVwZGF0ZSIgaXMgdG8gcnVuICJnaXQgZmV0Y2giIGZvciBkZWZpbmVkIHJlbW90ZXMKKyAgICB0byB1cGRhdGUgdHJhY2tpbmcgYnJhbmNoZXMuCisKKyAgLSAiZ2l0IGN2c2ltcG9ydCIgY2FuIG5vdyB0YWtlICctZCcgdG8gdGFsayB3aXRoIGEgQ1ZTCisgICAgcmVwb3NpdG9yeSBkaWZmZXJlbnQgZnJvbSB3aGF0IGFyZSByZWNvcmRlZCBpbiBDVlMvUm9vdAorICAgIChvdmVycmlkaW5nIGl0IHdpdGggZW52aXJvbm1lbnQgQ1ZTUk9PVCBkb2VzIG5vdCB3b3JrKS4KKworICAtICJnaXQgYnVuZGxlIiBjYW4gaGVscCBzbmVha2VyLW5ldHRpbmcgeW91ciBjaGFuZ2VzIGJldHdlZW4KKyAgICByZXBvc2l0b3JpZXMuCisKKyAgLSAiZ2l0IG1lcmdldG9vbCIgY2FuIGhlbHAgMy13YXkgZmlsZS1sZXZlbCBjb25mbGljdAorICAgIHJlc29sdXRpb24gd2l0aCB5b3VyIGZhdm9yaXRlIGdyYXBoaWNhbCBtZXJnZSB0b29scy4KKworICAtIEEgbmV3IGNvbmZpZ3VyYXRpb24gImNvcmUuc3ltbGlua3MiIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUKKyAgICBzeW1saW5rcyBvbiBmaWxlc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZW07IHRoZXkgYXJlCisgICAgY2hlY2tlZCBvdXQgYXMgcmVndWxhciBmaWxlcyBpbnN0ZWFkLgorCisgIC0gWW91IGNhbiBuYW1lIGEgY29tbWl0IG9iamVjdCB3aXRoIGl0cyBmaXJzdCBsaW5lIG9mIHRoZQorICAgIG1lc3NhZ2UuICBUaGUgc3ludGF4IHRvIHVzZSBpcyAnOi9tZXNzYWdlIHRleHQnLiAgRS5nLgorCisgICAgJCBnaXQgc2hvdyAiOi9vYmplY3QgbmFtZTogaW50cm9kdWNlICc6LzxvbmVsaW5lIHByZWZpeD4nIG5vdGF0aW9uIgorCisgICAgbWVhbnMgdGhlIHNhbWUgdGhpbmcgYXM6CisKKyAgICAkIGdpdCBzaG93IDI4YTRkOTQwNDQzODA2NDEyZWZmYTI0NmVjYzc3NjhhMjE1NTNlYzcKKworICAtICJnaXQgYmlzZWN0IiBsZWFybmVkIGEgbmV3IGNvbW1hbmQgInJ1biIgdGhhdCB0YWtlcyBhIHNjcmlwdAorICAgIHRvIHJ1biBhZnRlciBlYWNoIHJldmlzaW9uIGlzIGNoZWNrZWQgb3V0IHRvIGRldGVybWluZSBpZiBpdAorICAgIGlzIGdvb2Qgb3IgYmFkLCB0byBhdXRvbWF0ZSB0aGUgYmlzZWN0aW9uIHByb2Nlc3MuCisKKyAgLSAiZ2l0IGxvZyIgZmFtaWx5IGxlYXJuZWQgYSBuZXcgdHJhdmVyc2FsIG9wdGlvbiAtLWZpcnN0LXBhcmVudCwKKyAgICB3aGljaCBkb2VzIHdoYXQgdGhlIG5hbWUgc3VnZ2VzdHMuCisKKworKiBVcGRhdGVkIGJlaGF2aW9yIG9mIGV4aXN0aW5nIGNvbW1hbmRzLgorCisgIC0gImdpdC1tZXJnZS1yZWN1cnNpdmUiIHVzZWQgdG8gYmFyZiB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4KKyAgICBvbmUgY29tbW9uIGFuY2VzdG9ycyBmb3IgdGhlIG1lcmdlLCBhbmQgbWVyZ2luZyB0aGVtIGhhZCBhCisgICAgcmVuYW1lL3JlbmFtZSBjb25mbGljdC4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAgLSAiZ2l0IGZzY2siIGRvZXMgbm90IGJhcmYgb24gY29ycnVwdCBsb29zZSBvYmplY3RzLgorCisgIC0gImdpdCBybSIgZG9lcyBub3QgcmVtb3ZlIG5ld2x5IGFkZGVkIGZpbGVzIHdpdGhvdXQgLWYuCisKKyAgLSAiZ2l0IGFyY2hpbXBvcnQiIGFsbG93cyByZW1hcHBpbmcgd2hlbiBjb21pbmcgdXAgd2l0aCBnaXQKKyAgICBicmFuY2ggbmFtZXMgZnJvbSBhcmNoIG5hbWVzLgorCisgIC0gZ2l0LXN2biBnb3QgYWxtb3N0IGEgcmV3cml0ZS4KKworICAtIGNvcmUuYXV0b2NybGYgY29uZmlndXJhdGlvbiwgd2hlbiBzZXQgdG8gJ3RydWUnLCBtYWtlcyBnaXQKKyAgICB0byBjb252ZXJ0IENSTEYgYXQgdGhlIGVuZCBvZiBsaW5lcyBpbiB0ZXh0IGZpbGVzIHRvIExGIHdoZW4KKyAgICByZWFkaW5nIGZyb20gdGhlIGZpbGVzeXN0ZW0sIGFuZCBjb252ZXJ0IGluIHJldmVyc2Ugd2hlbgorICAgIHdyaXRpbmcgdG8gdGhlIGZpbGVzeXN0ZW0uICBUaGUgdmFyaWFibGUgY2FuIGJlIHNldCB0bworICAgICdpbnB1dCcsIGluIHdoaWNoIGNhc2UgdGhlIGNvbnZlcnNpb24gaGFwcGVucyBvbmx5IHdoaWxlCisgICAgcmVhZGluZyBmcm9tIHRoZSBmaWxlc3lzdGVtIGJ1dCBmaWxlcyBhcmUgd3JpdHRlbiBvdXQgd2l0aAorICAgIExGIGF0IHRoZSBlbmQgb2YgbGluZXMuICBDdXJyZW50bHksIHdoaWNoIHBhdGhzIHRvIGNvbnNpZGVyCisgICAgJ3RleHQnIChpLmUuIGJlIHN1YmplY3RlZCB0byB0aGUgYXV0b2NybGYgbWVjaGFuaXNtKSBpcworICAgIGRlY2lkZWQgcHVyZWx5IGJhc2VkIG9uIHRoZSBjb250ZW50cywgYnV0IHRoZSBwbGFuIGlzIHRvCisgICAgYWxsb3cgdXNlcnMgdG8gZXhwbGljaXRseSBvdmVycmlkZSB0aGlzIGhldXJpc3RpYyBiYXNlZCBvbgorICAgIHBhdGhzLgorCisgIC0gVGhlIGJlaGF2aW9yIG9mICdnaXQtYXBwbHknLCB3aGVuIHJ1biBpbiBhIHN1YmRpcmVjdG9yeSwKKyAgICB3aXRob3V0IC0taW5kZXggbm9yIC0tY2FjaGVkIHdlcmUgaW5jb25zaXN0ZW50IHdpdGggdGhhdCBvZgorICAgIHRoZSBjb21tYW5kIHdpdGggdGhlc2Ugb3B0aW9ucy4gIFRoaXMgd2FzIGZpeGVkIHRvIG1hdGNoIHRoZQorICAgIGJlaGF2aW9yIHdpdGggLS1pbmRleC4gIEEgcGF0Y2ggdGhhdCBpcyBtZWFudCB0byBiZSBhcHBsaWVkCisgICAgd2l0aCAtcDEgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHByb2plY3QgdHJlZSBjYW4gYmUKKyAgICBhcHBsaWVkIHdpdGggYW55IGN1c3RvbSAtcDxuPiBvcHRpb24uICBBIHBhdGNoIHRoYXQgaXMgbm90CisgICAgcmVsYXRpdmUgdG8gdGhlIHRvcGxldmVsIG5lZWRzIHRvIGJlIGFwcGxpZWQgd2l0aCAtcDxuPgorICAgIG9wdGlvbiB3aXRoIG9yIHdpdGhvdXQgLS1pbmRleCAob3IgLS1jYWNoZWQpLgorCisgIC0gImdpdCBkaWZmIiBvdXRwdXRzIGEgdHJhaWxpbmcgSFQgd2hlbiBwYXRobmFtZXMgaGF2ZSBlbWJlZGRlZAorICAgIFNQIG9uICsrKy8tLS0gaGVhZGVyIGxpbmVzLCBpbiBvcmRlciB0byBoZWxwICJHTlUgcGF0Y2giIHRvCisgICAgcGFyc2UgaXRzIG91dHB1dC4gICJnaXQgYXBwbHkiIHdhcyBhbHJlYWR5IHVwZGF0ZWQgdG8gYWNjZXB0CisgICAgdGhpcyBtb2RpZmllZCBvdXRwdXQgZm9ybWF0IHNpbmNlIGNlNzQ2MThkIChTZXAgMjIsIDIwMDYpLgorCisgIC0gImdpdCBjdnNzZXJ2ZXIiIHJ1bnMgaG9va3MvdXBkYXRlIGFuZCBob25vcnMgaXRzIGV4aXQgc3RhdHVzLgorCisgIC0gImdpdCBjdnNzZXJ2ZXIiIGNhbiBiZSB0b2xkIHRvIHNlbmQgZXZlcnl0aGluZyB3aXRoIC1rYi4KKworICAtICJnaXQgZGlmZiAtLWNoZWNrIiBhbHNvIGhvbm9ycyB0aGUgLS1jb2xvciBvdXRwdXQgb3B0aW9uLgorCisgIC0gImdpdCBuYW1lLXJldiIgdXNlZCB0byBzdHJlc3MgdGhlIGZhY3QgdGhhdCBhIHJlZiBpcyBhIHRhZyB0b28KKyAgICBtdWNoLCBieSBzYXlpbmcgc29tZXRoaW5nIGxpa2UgInYxLjIuM14wfjIyIi4gIEl0IG5vdyBzYXlzCisgICAgInYxLjIuM34yMiIgaW4gc3VjaCBhIGNhc2UgKGl0IHN0aWxsIHNheXMgInYxLjIuM14wIiBpZiBpdCBkb2VzCisgICAgbm90IHRhbGsgYWJvdXQgYW4gYW5jZXN0b3Igb2YgdGhlIGNvbW1pdCB0aGF0IGlzIHRhZ2dlZCwgd2hpY2gKKyAgICBtYWtlcyBzZW5zZSkuCisKKyAgLSAiZ2l0IHJldi1saXN0IC0tYm91bmRhcnkiIG5vdyBzaG93cyBib3VuZGFyeSBtYXJrZXJzIGZvciB0aGUKKyAgICBjb21taXRzIG9taXR0ZWQgYnkgLS1tYXgtYWdlIGFuZCAtLW1heC1jb3VudCBjb25kaXRpb24uCisKKyAgLSBUaGUgY29uZmlndXJhdGlvbiBtZWNoYW5pc20gbm93IHJlYWRzICQocHJlZml4KS9ldGMvZ2l0Y29uZmlnLgorCisgIC0gImdpdCBhcHBseSAtLXZlcmJvc2UiIHNob3dzIHdoYXQgcHJlaW1hZ2UgbGluZXMgd2VyZSB3YW50ZWQKKyAgICB3aGVuIGl0IGNvdWxkbid0IGZpbmQgdGhlbS4KKworICAtICJnaXQgc3RhdHVzIiBpbiBhIHJlYWQtb25seSByZXBvc2l0b3J5IGdvdCBhIGJpdCBzYW5lci4KKworICAtICJnaXQgZmV0Y2giIChoZW5jZSAiZ2l0IGNsb25lIiBhbmQgImdpdCBwdWxsIikgYXJlIGxlc3MKKyAgICBub2lzeSB3aGVuIHRoZSBvdXRwdXQgZG9lcyBub3QgZ28gdG8gdHR5LgorCisgIC0gImdpdCBmZXRjaCIgYmV0d2VlbiByZXBvc2l0b3JpZXMgd2l0aCBtYW55IHJlZnMgd2VyZSBzbG93CisgICAgZXZlbiB3aGVuIHRoZXJlIGFyZSBub3QgbWFueSBjaGFuZ2VzIHRoYXQgbmVlZGVkCisgICAgdHJhbnNmZXJyaW5nLiAgVGhpcyBoYXMgYmVlbiBzcGVkIHVwIGJ5IHBhcnRpYWxseSByZXdyaXRpbmcKKyAgICB0aGUgaGVhdmllc3QgcGFydHMgaW4gQy4KKworICAtICJnaXQgbWFpbGluZm8iIHdoaWNoIHNwbGl0cyBhbiBlLW1haWwgaW50byBhIHBhdGNoIGFuZCB0aGUKKyAgICBtZXRhLWluZm9ybWF0aW9uIHdhcyByZXdyaXR0ZW4sIHRoYW5rcyB0byBEb24gWmlja3VzLiAgSXQKKyAgICBoYW5kbGVzIG5lc3RlZCBtdWx0aXBhcnQgYmV0dGVyLiAgVGhlIGNvbW1hbmQgd2FzIGJyb2tlbiBmb3IKKyAgICBhIGJyaWVmIHBlcmlvZCBvbiAnbWFzdGVyJyBicmFuY2ggc2luY2UgMS41LjAgYnV0IHRoZQorICAgIGJyZWFrYWdlIGlzIGZpeGVkIG5vdy4KKworICAtIHNlbmQtZW1haWwgbGVhcm5lZCBjb25maWd1cmFibGUgYmNjIGFuZCBjaGFpbi1yZXBseS10by4KKworICAtICJnaXQgcmVtb3RlIHNob3cgJHJlbW90ZSIgYWxzbyB0YWxrcyBhYm91dCBicmFuY2hlcyB0aGF0CisgICAgd291bGQgYmUgcHVzaGVkIGlmIHlvdSBydW4gImdpdCBwdXNoIHJlbW90ZSIuCisKKyAgLSBVc2luZyBvYmplY3RzIGZyb20gcGFja3MgaXMgbm93IHNlcmlvdXNseSBvcHRpbWl6ZWQgYnkgY2xldmVyCisgICAgdXNlIG9mIGEgY2FjaGUuICBUaGlzIHNob3VsZCBiZSBtb3N0IG5vdGljZWFibGUgaW4gZ2l0LWxvZworICAgIGZhbWlseSBvZiBjb21tYW5kcyB0aGF0IGludm9sdmUgcmVhZGluZyBtYW55IHRyZWUgb2JqZWN0cy4KKyAgICBJbiBhZGRpdGlvbiwgdHJhdmVyc2luZyByZXZpc2lvbnMgd2hpbGUgZmlsdGVyaW5nIGNoYW5nZXMKKyAgICB3aXRoIHBhdGhzcGVjcyBpcyBtYWRlIGZhc3RlciBieSB0ZXJtaW5hdGluZyB0aGUgY29tcGFyaXNvbgorICAgIGJldHdlZW4gdGhlIHRyZWVzIGFzIGVhcmx5IGFzIHBvc3NpYmxlLgorCisKKyogSG9va3MKKworICAtIFRoZSBwYXJ0IHRvIHNlbmQgb3V0IG5vdGlmaWNhdGlvbiBlLW1haWxzIHdhcyByZW1vdmVkIGZyb20KKyAgICB0aGUgc2FtcGxlIHVwZGF0ZSBob29rLCBhcyBpdCB3YXMgbm90IGFuIGFwcHJvcHJpYXRlIHBsYWNlCisgICAgdG8gZG8gc28uICBUaGUgcHJvcGVyIHBsYWNlIHRvIGRvIHRoaXMgaXMgdGhlIG5ldyBwb3N0LXJlY2VpdmUKKyAgICBob29rLiAgQW4gZXhhbXBsZSBob29rIGhhcyBiZWVuIGFkZGVkIHRvIGNvbnRyaWIvaG9va3MvLgorCisKKyogT3RoZXJzCisKKyAgLSBnaXQtcmV2ZXJ0LCBnaXQtZ2MgYW5kIGdpdC1jaGVycnktcGljayBhcmUgbm93IGJ1aWx0LWlucy4KKworRml4ZXMgc2luY2UgdjEuNS4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgYXJlIGFsbCBpbiB2MS41LjAueCBzZXJpZXMuCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyAgLSBDbGFyaWZpY2F0aW9ucyBhbmQgY29ycmVjdGlvbnMgdG8gMS41LjAgcmVsZWFzZSBub3Rlcy4KKworICAtIFRoZSBtYWluIGRvY3VtZW50YXRpb24gZGlkIG5vdCBsaW5rIHRvIGdpdC1yZW1vdGUgZG9jdW1lbnRhdGlvbi4KKworICAtIENsYXJpZmllZCBpbnRyb2R1Y3RvcnkgdGV4dCBvZiBnaXQtcmViYXNlIGRvY3VtZW50YXRpb24uCisKKyAgLSBDb252ZXJ0ZWQgcmVtYWluaW5nIG1lbnRpb25zIG9mIHVwZGF0ZS1pbmRleCBvbiBQb3JjZWxhaW4KKyAgICBkb2N1bWVudHMgdG8gZ2l0LWFkZC9naXQtcm0uCisKKyAgLSBTb21lIGkxOG4uKiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3ZXJlIGluY29ycmVjdGx5CisgICAgZGVzY3JpYmVkIGFzIGNvcmUuKjsgZml4ZWQuCisKKyAgLSBhZGRlZCBhbmQgY2xhcmlmaWVkIGNvcmUuYmFyZSwgY29yZS5sZWdhY3loZWFkZXJzIGNvbmZpZ3VyYXRpb25zLgorCisgIC0gdXBkYXRlZCAiZ2l0LWNsb25lIC0tZGVwdGgiIGRvY3VtZW50YXRpb24uCisKKyAgLSB1c2VyLW1hbnVhbCB1cGRhdGVzLgorCisgIC0gT3B0aW9ucyB0byAnZ2l0IHJlbW90ZSBhZGQnIHdlcmUgZGVzY3JpYmVkIGluc3VmZmljaWVudGx5LgorCisgIC0gQ29uZmlndXJhdGlvbiBmb3JtYXQuc3VmZml4IHdhcyBub3QgZG9jdW1lbnRlZC4KKworICAtIE90aGVyIGZvcm1hdHRpbmcgYW5kIHNwZWxsaW5nIGZpeGVzLgorCisgIC0gdXNlci1tYW51YWwgaGFzIGJldHRlciBjcm9zcyByZWZlcmVuY2VzLgorCisgIC0gZ2l0d2ViIGluc3RhbGxhdGlvbi9kZXBsb3ltZW50IHByb2NlZHVyZSBpcyBub3cgZG9jdW1lbnRlZC4KKworCisqIEJ1Z2ZpeGVzCisKKyAgLSBnaXQtdXBsb2FkLXBhY2sgY2xvc2VzIHVudXNlZCBwaXBlIGVuZHM7IGVhcmxpZXIgdGhpcyBjYXVzZWQKKyAgICBtYW55IHpvbWJpZXMgdG8gaGFuZyBhcm91bmQuCisKKyAgLSBnaXQtcmVyZXJlIHdhcyByZWNvcmRpbmcgdGhlIGNvbnRlbnRzIG9mIGVhcmxpZXIgaHVua3MKKyAgICBkdXBsaWNhdGVkIGluIGxhdGVyIGh1bmtzLiAgVGhpcyBwcmV2ZW50ZWQgcmVzb2x2aW5nIHRoZSBzYW1lCisgICAgY29uZmxpY3Qgd2hlbiBwZXJmb3JtaW5nIHRoZSBzYW1lIG1lcmdlIHRoZSBvdGhlciB3YXkgYXJvdW5kLgorCisgIC0gZ2l0LWFkZCBhbmQgZ2l0LXVwZGF0ZS1pbmRleCBvbiBhIGZpbGVzeXN0ZW0gb24gd2hpY2gKKyAgICBleGVjdXRhYmxlIGJpdHMgYXJlIHVucmVsaWFibGUgaW5jb3JyZWN0bHkgcmV1c2VkIHN0X21vZGUKKyAgICBiaXRzIGV2ZW4gd2hlbiB0aGUgcGF0aCBjaGFuZ2VkIGJldHdlZW4gc3ltbGluayBhbmQgcmVndWxhcgorICAgIGZpbGUuCisKKyAgLSBnaXQtZGFlbW9uIG1hcmtzIHRoZSBsaXN0ZW5pbmcgc29ja2V0cyB3aXRoIEZEX0NMT0VYRUMgc28KKyAgICB0aGF0IGl0IHdvbid0IGJlIGxlYWtlZCBpbnRvIHRoZSBjaGlsZHJlbi4KKworICAtIHNlZ2ZhdWx0IGZyb20gZ2l0LWJsYW1lIHdoZW4gdGhlIG1hbmRhdG9yeSBwYXRobmFtZQorICAgIHBhcmFtZXRlciB3YXMgbWlzc2luZyB3YXMgZml4ZWQ7IHVzYWdlKCkgbWVzc2FnZSBpcyBnaXZlbgorICAgIGluc3RlYWQuCisKKyAgLSBnaXQtcmV2LWxpc3QgZGlkIG5vdCByZWFkICRHSVRfRElSL2NvbmZpZyBmaWxlLCB3aGljaCBtZWFucworICAgIHRoYXQgZGlkIG5vdCBob25vciBpMThuLmxvZ291dHB1dGVuY29kaW5nIGNvcnJlY3RseS4KKworICAtIEF1dG9tYXRlZCBtZXJnZSBjb25mbGljdCBoYW5kbGluZyB3aGVuIGNoYW5nZXMgdG8gc3ltYm9saWMKKyAgICBsaW5rcyBjb25mbGljdGVkIHdlcmUgY29tcGxldGVseSBicm9rZW4uICBUaGUgbWVyZ2UtcmVzb2x2ZQorICAgIHN0cmF0ZWd5IGNyZWF0ZWQgYSByZWd1bGFyIGZpbGUgd2l0aCBjb25mbGljdCBtYXJrZXJzIGluIGl0CisgICAgaW4gcGxhY2Ugb2YgdGhlIHN5bWJvbGljIGxpbmsuICBUaGUgZGVmYXVsdCBzdHJhdGVneSwKKyAgICBtZXJnZS1yZWN1cnNpdmUgd2FzIGV2ZW4gbW9yZSBicm9rZW4uICBJdCByZW1vdmVkIHRoZSBwYXRoCisgICAgdGhhdCB3YXMgcG9pbnRlZCBhdCBieSB0aGUgc3ltYm9saWMgbGluay4gIEJvdGggb2YgdGhlc2UKKyAgICBwcm9ibGVtcyBoYXZlIGJlZW4gZml4ZWQuCisKKyAgLSAnZ2l0IGRpZmYgbWFpbnQgbWFzdGVyIG5leHQnIGRpZCBub3QgY29ycmVjdGx5IGdpdmUgY29tYmluZWQKKyAgICBkaWZmIGFjcm9zcyB0aHJlZSB0cmVlcy4KKworICAtICdnaXQgZmFzdC1pbXBvcnQnIHBvcnRhYmlsaXR5IGZpeCBmb3IgU29sYXJpcy4KKworICAtICdnaXQgc2hvdy1yZWYgLS12ZXJpZnknIHdpdGhvdXQgYXJndW1lbnRzIGRpZCBub3QgZXJyb3Igb3V0CisgICAgYnV0IHNlZ2ZhdWx0ZWQuCisKKyAgLSAnZ2l0IGRpZmYgOnRyYWNrZWQtZmlsZSBgcHdkYC9hbi11bnRyYWNrZWQtZmlsZScgZ2F2ZSBhbiBleHRyYQorICAgIHNsYXNoZXMgYWZ0ZXIgYS8gYW5kIGIvLgorCisgIC0gJ2dpdCBmb3JtYXQtcGF0Y2gnIHByb2R1Y2VkIHRvbyBsb25nIGZpbGVuYW1lcyBpZiB0aGUgY29tbWl0CisgICAgbWVzc2FnZSBoYWQgdG9vIGxvbmcgbGluZSBhdCB0aGUgYmVnaW5uaW5nLgorCisgIC0gUnVubmluZyAnbWFrZSBhbGwnIGFuZCB0aGVuIHdpdGhvdXQgY2hhbmdpbmcgYW55dGhpbmcKKyAgICBydW5uaW5nICdtYWtlIGluc3RhbGwnIHN0aWxsIHJlYnVpbHQgc29tZSBmaWxlcy4gIFRoaXMKKyAgICB3YXMgaW5jb252ZW5pZW50IHdoZW4gYnVpbGRpbmcgYXMgeW91cnNlbGYgYW5kIHRoZW4KKyAgICBpbnN0YWxsaW5nIGFzIHJvb3QgKGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlCisgICAgZGlyZWN0b3J5IGlzIG9uIE5GUyBhbmQgcm9vdCBpcyBtYXBwZWQgdG8gbm9ib2R5KS4KKworICAtICdnaXQtcmVyZXJlJyBmYWlsZWQgdG8gZGVhbCB3aXRoIHR3byB1bmNvbmZsaWN0ZWQgcGF0aHMgdGhhdAorICAgIHNvcnRlZCBuZXh0IHRvIGVhY2ggb3RoZXIuCisKKyAgLSAnZ2l0LXJlcmVyZScgYXR0ZW1wdGVkIHRvIG9wZW4oMikgYSBzeW1saW5rIGFuZCBmYWlsZWQgaWYKKyAgICB0aGVyZSB3YXMgYSBjb25mbGljdC4gIFNpbmNlIGEgY29uZmxpY3RpbmcgY2hhbmdlIHRvIGEKKyAgICBzeW1saW5rIHdvdWxkIG5vdCBiZW5lZml0IGZyb20gcmVyZXJlIGFueXdheSwgdGhlIGNvbW1hbmQKKyAgICBub3cgaWdub3JlcyBjb25mbGljdGluZyBjaGFuZ2VzIHRvIHN5bWxpbmtzLgorCisgIC0gJ2dpdC1yZXBhY2snIGRpZCBub3QgbGlrZSB0byBwYXNzIG1vcmUgdGhhbiA2NCBhcmd1bWVudHMKKyAgICBpbnRlcm5hbGx5IHRvIHVuZGVybHlpbmcgJ3Jldi1saXN0JyBsb2dpYywgd2hpY2ggbWFkZSBpdAorICAgIGltcG9zc2libGUgdG8gcmVwYWNrIGFmdGVyIGFjY3VtdWxhdGluZyBtYW55IChzbWFsbCkgcGFja3MKKyAgICBpbiB0aGUgcmVwb3NpdG9yeS4KKworICAtICdnaXQtZGlmZicgdG8gcmV2aWV3IHRoZSBjb21iaW5lZCBkaWZmIGR1cmluZyBhIGNvbmZsaWN0ZWQKKyAgICBtZXJnZSB3ZXJlIG5vdCByZWFkaW5nIHRoZSB3b3JraW5nIHRyZWUgdmVyc2lvbiBjb3JyZWN0bHkKKyAgICB3aGVuIGNoYW5nZXMgdG8gYSBzeW1ib2xpYyBsaW5rIGNvbmZsaWN0ZWQuICBJdCBzaG91bGQgaGF2ZQorICAgIHJlYWQgdGhlIGRhdGEgdXNpbmcgcmVhZGxpbmsoMikgYnV0IHJlYWQgZnJvbSB0aGUgcmVndWxhcgorICAgIGZpbGUgdGhlIHN5bWJvbGljIGxpbmsgcG9pbnRlZCBhdC4KKworICAtICdnaXQtcmVtb3RlJyBkaWQgbm90IGxpa2UgcGVyaW9kIGluIGEgcmVtb3RlJ3MgbmFtZS4KKworICAtICdnaXQuZWwnIGhvbm9ycyB0aGUgY29tbWl0IGNvZGluZyBzeXN0ZW0gZnJvbSB0aGUgY29uZmlndXJhdGlvbi4KKworICAtICdibGFtZXZpZXcnIGluIGNvbnRyaWIvIGNvcnJlY3RseSBkaWdzIGRlZXBlciB3aGVuIGEgbGluZSBpcworICAgIGNsaWNrZWQuCisKKyAgLSAnaHR0cC1wdXNoJyBjb3JyZWN0bHkgbWFrZXMgc3VyZSB0aGUgcmVtb3RlIHNpZGUgaGFzIGxlYWRpbmcKKyAgICBwYXRoLiAgRWFybGllciBpdCBzdGFydGVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIHBhdGgsIGFuZAorICAgIGluY29ycmVjdGx5LgorCisgIC0gJ2dpdC1tZXJnZScgZGlkIG5vdCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIHdoZW4gdGhlCisgICAgd29ya2luZyB0cmVlIHdhcyBkaXJ0eSBhbmQgY2Fubm90IGZhc3QgZm9yd2FyZC4gIEl0IGRvZXMKKyAgICBub3cuCisKKyAgLSAnY3ZzZXhwb3J0Y29tbWl0JyBkb2VzIG5vdCBsb3NlIHlldC10by1iZS11c2VkIG1lc3NhZ2UgZmlsZS4KKworICAtIGludC12cy1zaXplX3QgdHlwZWZpeCB3aGVuIHJ1bm5pbmcgY29tYmluZWQgZGlmZiBvbiBmaWxlcworICAgIG92ZXIgMkdCIGxvbmcuCisKKyAgLSAnZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1zdHJpcCcgc2hvdWxkIG5vdCB0b3VjaCB1bm1vZGlmaWVkCisgICAgbGluZXMuCisKKyAgLSAnZ2l0LW1haWxpbmZvJyBjaG9rZSB3aGVuIGEgbG9naWNhbCBoZWFkZXIgbGluZSB3YXMgdG9vIGxvbmcuCisKKyAgLSAnZ2l0IHNob3cgQS4uQicgZGlkIG5vdCBlcnJvciBvdXQuICBOZWdhdGl2ZSByZWYgKCJub3QgQSIgaW4KKyAgICB0aGlzIGV4YW1wbGUpIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZQorICAgIGNvbW1hbmQsIHNvIG5vdyBpdCBlcnJvcnMgb3V0LgorCisgIC0gJ2dpdCBmbXQtbWVyZ2UtbXNnIC0tZmlsZScgd2l0aG91dCBmaWxlIHBhcmFtZXRlciBkaWQgbm90CisgICAgY29ycmVjdGx5IGVycm9yIG91dC4KKworICAtICdnaXQgYXJjaGltcG9ydCcgYmFyZmVkIHVwb24gZW5jb3VudGVyaW5nIGEgY29tbWl0IHdpdGhvdXQKKyAgICBzdW1tYXJ5LgorCisgIC0gJ2dpdCBpbmRleC1wYWNrJyBkaWQgbm90IHByb3RlY3QgaXRzZWxmIGZyb20gZ2V0dGluZyBhIHNob3J0CisgICAgcmVhZCBvdXQgb2YgcHJlYWQoMikuCisKKyAgLSAnZ2l0IGh0dHAtcHVzaCcgaGFkIGEgZmV3IGJ1ZmZlciBvdmVycnVucy4KKworICAtIEJ1aWxkIGRlcGVuZGVuY3kgZml4ZXMgdG8gcmVidWlsZCBmZXRjaC5vIHdoZW4gb3RoZXIgaGVhZGVycworICAgIGNoYW5nZS4KKworICAtIGdpdC5lbCBkb2VzIG5vdCBhZGQgZHVwbGljYXRlIHNpZ24tb2ZmIGxpbmVzLgorCisgIC0gZ2l0LWNvbW1pdCBzaG93cyB0aGUgZnVsbCBzdGF0IG9mIHRoZSByZXN1bHRpbmcgY29tbWl0LCBub3QKKyAgICBqdXN0IGFib3V0IHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdoZW4gcnVuIGZyb20KKyAgICBhIHN1YmRpcmVjdG9yeS4KKworICAtICJnaXQtY2hlY2tvdXQgLW0gJ0B7OCBob3VycyBhZ299JyIgaGFkIGEgZnVubnkgZmFpbHVyZSBmcm9tCisgICAgZXZhbDsgZml4ZWQuCisKKyAgLSBnaXQtbWVyZ2UgKGhlbmNlIGdpdC1wdWxsKSBkaWQgbm90IHJlZnVzZSBmYXN0LWZvcndhcmRpbmcKKyAgICB3aGVuIHRoZSB3b3JraW5nIHRyZWUgaGFkIGxvY2FsIGNoYW5nZXMgdGhhdCB3b3VsZCBoYXZlCisgICAgY29uZmxpY3RlZCB3aXRoIGl0LgorCisgIC0gYSBoYW5kZnVsIHNtYWxsIGZpeGVzIHRvIGdpdHdlYi4KKworICAtIGJ1aWxkIHByb2NlZHVyZSBmb3IgdXNlci1tYW51YWwgaXMgZml4ZWQgbm90IHRvIHJlcXVpcmUgbG9jYWxseQorICAgIGluc3RhbGxlZCBzdHlsZXNoZWV0cy4KKworICAtICJnaXQgY29tbWl0ICRwYXRocyIgb24gcGF0aHMgd2hvc2UgZWFybGllciBjb250ZW50cyB3ZXJlCisgICAgYWxyZWFkeSB1cGRhdGVkIGluIHRoZSBpbmRleCB3ZXJlIGZhaWxpbmcgb3V0LgorCisKKyogVHdlYWtzCisKKyAgLSBzbGlkaW5nIG1tYXAoKSBpbmVmZmljaWVudGx5IG1tYXBlZCB0aGUgc2FtZSByZWdpb24gb2YgYQorICAgIHBhY2tmaWxlIHdpdGggYW4gYWNjZXNzIHBhdHRlcm4gdGhhdCB1c2VkIG9iamVjdHMgaW4gdGhlCisgICAgcmV2ZXJzZSBvcmRlci4gIFRoaXMgaGFzIGJlZW4gbWFkZSBtb3JlIGVmZmljaWVudC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTk4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjEudHh0CkBAIC0wLDAgKzEsNDcgQEAKK0dJVCB2MS41LjIuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBUZW1wb3JhcnkgZmlsZXMgdGhhdCBhcmUgdXNlZCB3aGVuIGludm9raW5nIGV4dGVybmFsIGRpZmYKKyAgICBwcm9ncmFtcyBkaWQgbm90IHRvbGVyYXRlIGEgbG9uZyBUTVBESVIuCisKKyAgLSBnaXQtZGFlbW9uIGRpZCBub3Qgbm90aWNlIHdoZW4gaXQgY291bGQgbm90IHdyaXRlIGludG8gaXRzCisgICAgcGlkIGZpbGUuCisKKyAgLSBnaXQtc3RhdHVzIGRpZCBub3QgaG9ub3IgY29yZS5leGNsdWRlc0ZpbGUgY29uZmlndXJhdGlvbiBsaWtlCisgICAgZ2l0LWFkZCBkaWQuCisKKyAgLSBnaXQtYW5ub3RhdGUgZGlkIG5vdCB3b3JrIGZyb20gYSBzdWJkaXJlY3Rvcnkgd2hpbGUKKyAgICBnaXQtYmxhbWUgZGlkLgorCisgIC0gZ2l0LWN2c3NlcnZlciBzaG91bGQgaGF2ZSBkaXNhYmxlZCBhY2Nlc3MgdG8gYSByZXBvc2l0b3J5CisgICAgd2l0aCAiZ2l0Y3ZzLnBzZXJ2ZXIuZW5hYmxlZCA9IGZhbHNlIiBzZXQgZXZlbiB3aGVuCisgICAgImdpdGN2cy5lbmFibGVkID0gdHJ1ZSIgd2FzIHNldCBhdCB0aGUgc2FtZSB0aW1lLiAgSXQKKyAgICBkaWRuJ3QuCisKKyAgLSBnaXQtY3ZzaW1wb3J0IGRpZCBub3Qgd29yayBjb3JyZWN0bHkgaW4gYSByZXBvc2l0b3J5IHdpdGgKKyAgICBpdHMgYnJhbmNoIGhlYWRzIHdlcmUgcGFja2VkIHdpdGggcGFjay1yZWZzLgorCisgIC0gaWRlbnQgdW5leHBhbnNpb24gdG8gc3F1YXNoICIkSWQ6IHh4eCAkIiB0aGF0IGlzIGluIHRoZQorICAgIHJlcG9zaXRvcnkgY29weSByZW1vdmVkIGluY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMuCisKKyAgLSBnaXQtc3ZuIG1pc2JlaGF2ZWQgd2hlbiB0aGUgc3VidmVyc2lvbiByZXBvc2l0b3J5IGRpZCBub3QKKyAgICBwcm92aWRlIE1ENSBjaGVja3N1bXMgZm9yIGZpbGVzLgorCisgIC0gZ2l0IHJlYmFzZSAoYW5kIGdpdCBhbSkgbWlzYmVoYXZlZCBvbiBjb21taXRzIHRoYXQgaGF2ZSAnXG4nCisgICAgKGxpdGVyYWxseSBiYWNrc2xhc2ggYW5kIGVuLCBub3QgYSBsaW5lZmVlZCkgaW4gdGhlIHRpdGxlLgorCisgIC0gY29kZSB0byBkZWNvZGUgYmFzZTg1IHVzZWQgaW4gYmluYXJ5IHBhdGNoZXMgaGFkIG9uZSBlcnJvcgorICAgIHJldHVybiBjb2RlcGF0aCB3cm9uZy4KKworICAtIFJGQzIwNDcgUSBlbmNvZGluZyBvdXRwdXQgYnkgZ2l0LWZvcm1hdC1wYXRjaCB1c2VkICdfJyBmb3IgYQorICAgIHNwYWNlLCB3aGljaCBpcyBub3QgdW5kZXJzdG9vZCBieSBzb21lIHByb2dyYW1zLiAgSXQgdXNlcyA9MjAKKyAgICB3aGljaCBpcyBzYWZlci4KKworICAtIGdpdC1mYXN0aW1wb3J0IC0taW1wb3J0LW1hcmtzIHdhcyBicm9rZW47IGZpeGVkLgorCisgIC0gQSBsb3Qgb2YgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBjbGFyaWZpY2F0aW9ucyBhbmQgZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmZhMzQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4yLnR4dApAQCAtMCwwICsxLDYxIEBACitHSVQgdjEuNS4yLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4yLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVXNhYmlsaXR5IGZpeAorCisgIC0gZ2l0LWd1aSBpcyBzaGlwcGVkIHdpdGggaXRzIHVwZGF0ZWQgYmxhbWUgaW50ZXJmYWNlLiAgSXQgaXMKKyAgICBydW1vcmVkIHRoYXQgdGhlIG9sZGVyIG9uZSB3YXMgbm90IGp1c3QgdW51c2FibGUgYnV0IHdhcworICAgIGFjdGl2ZSBoZWFsdGggaGF6YXJkLCBidXQgdGhpcyBvbmUgaXMgYWN0dWFsbHkgcHJldHR5LgorICAgIFBsZWFzZSBzZWUgZm9yIHlvdXJzZWxmLgorCisqIEJ1Z2ZpeGVzCisKKyAgLSAiZ2l0IGNoZWNrb3V0IGZ1YmFyIiB3YXMgdXR0ZXJseSBjb25mdXNlZCB3aGVuIHRoZXJlIGlzIGEKKyAgICBicmFuY2ggZnViYXIgYW5kIGEgdGFnIGZ1YmFyIGF0IHRoZSBzYW1lIHRpbWUuICBJdCBjb3JyZWN0bHkKKyAgICBjaGVja3Mgb3V0IHRoZSBicmFuY2ggZnViYXIgbm93LgorCisgIC0gImdpdCBjbG9uZSAvcGF0aC9mb28iIHRvIGNsb25lIGEgbG9jYWwgL3BhdGgvZm9vLmdpdAorICAgIHJlcG9zaXRvcnkgbGVmdCBhbiBpbmNvcnJlY3QgY29uZmlndXJhdGlvbi4KKworICAtICJnaXQgc2VuZC1lbWFpbCIgY29ycmVjdGx5IHVucXVvdGVzIFJGQyAyMDQ3IHF1b3RlZCBuYW1lcyBpbgorICAgIHRoZSBwYXRjaC1lbWFpbCBiZWZvcmUgdXNpbmcgdGhlaXIgdmFsdWVzLgorCisgIC0gV2UgZGlkIG5vdCBhY2NlcHQgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgZXBvY2ggb2xkZXIgdGhhbgorICAgIHllYXIgMjAwMCBhcyBhIHZhbGlkIHRpbWVzdGFtcC4gIFdlIG5vdyBpbnRlcnByZXQgcG9zaXRpdmUKKyAgICBpbnRlZ2VycyBtb3JlIHRoYW4gOCBkaWdpdHMgYXMgc3VjaCwgd2hpY2ggYWxsb3dzIHVzIHRvCisgICAgZXhwcmVzcyB0aW1lc3RhbXBzIG1vcmUgcmVjZW50IHRoYW4gTWFyY2ggMTk3My4KKworICAtIGdpdC1jdnNpbXBvcnQgZGlkIG5vdCB3b3JrIHdoZW4geW91IGhhdmUgR0lUX0RJUiB0byBwb2ludAorICAgIHlvdXIgcmVwb3NpdG9yeSBhdCBhIG5vbnN0YW5kYXJkIGxvY2F0aW9uLgorCisgIC0gU29tZSBzeXN0ZW1zIChub3RhYmx5LCBTb2xhcmlzKSBsYWNrIGhzdHJlcnJvcigpIHRvIG1ha2UKKyAgICBoX2Vycm5vIGh1bWFuIHJlYWRhYmxlOyBwcmVwYXJlIGEgcmVwbGFjZW1lbnQKKyAgICBpbXBsZW1lbnRhdGlvbi4KKworICAtIC5naXRpZ25vcmUgZmlsZSBsaXN0ZWQgZ2l0LWNvcmUuc3BlYyBidXQgd2hhdCB3ZSBnZW5lcmF0ZSBpcworICAgIGdpdC5zcGVjLCBhbmQgbm9ib2R5IG5vdGljZWQgZm9yIGEgbG9uZyB0aW1lLgorCisgIC0gImdpdC1tZXJnZS1yZWN1cnNpdmUiIGRvZXMgbm90IHRyeSB0byBydW4gZmlsZSBsZXZlbCBtZXJnZQorICAgIG9uIGJpbmFyeSBmaWxlcy4KKworICAtICJnaXQtYnJhbmNoIC0tdHJhY2siIGRpZCBub3QgY3JlYXRlIHRyYWNraW5nIGNvbmZpZ3VyYXRpb24KKyAgICBjb3JyZWN0bHkgd2hlbiB0aGUgYnJhbmNoIG5hbWUgaGFkIHNsYXNoIGluIGl0LgorCisgIC0gVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgc3BlY2lmaWVkIHdpdGggdXNlci5lbWFpbAorICAgIGNvbmZpZ3VyYXRpb24gd2FzIG92ZXJyaWRkZW4gYnkgRU1BSUwgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKyAgLSBUaGUgdHJlZSBwYXJzZXIgZGlkIG5vdCB3YXJuIGFib3V0IHRyZWUgZW50cmllcyB3aXRoCisgICAgbm9uc2Vuc2UgZmlsZSBtb2RlcywgYW5kIGFzc3VtZWQgdGhleSBtdXN0IGJlIGJsb2JzLgorCisgIC0gImdpdCBsb2cgLXoiIHdpdGhvdXQgYW55IG90aGVyIHJlcXVlc3QgdG8gZ2VuZXJhdGUgZGlmZiBzdGlsbAorICAgIGludm9rZWQgdGhlIGRpZmYgbWFjaGluZXJ5LCB3YXN0aW5nIGN5Y2xlcy4KKworKiBEb2N1bWVudGF0aW9uCisKKyAgLSBNYW55IHVwZGF0ZXMgdG8gZml4IHN0YWxlIG9yIG1pc3NpbmcgZG9jdW1lbnRhdGlvbi4KKworICAtIEFsdGhvdWdoIG91ciBkb2N1bWVudGF0aW9uIHdhcyBwcmltYXJpbHkgbWVhbnQgdG8gYmUgZm9ybWF0dGVkCisgICAgd2l0aCBBc2NpaURvYzcsIGZvcm1hdHRpbmcgd2l0aCBBc2NpaURvYzggaXMgc3VwcG9ydGVkIGJldHRlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZGIyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjMudHh0CkBAIC0wLDAgKzEsMjcgQEAKK0dJVCB2MS41LjIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjIuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQnVnZml4ZXMKKworICAgLSBWZXJzaW9uIDIgcGFjayBpbmRleCBmb3JtYXQgd2FzIGludHJvZHVjZWQgaW4gdmVyc2lvbiAxLjUuMgorICAgICB0byBzdXBwb3J0IHBhY2sgZmlsZXMgdGhhdCBoYXMgb2Zmc2V0IHRoYXQgY2Fubm90IGJlCisgICAgIHJlcHJlc2VudGVkIGluIDMyLWJpdC4gIFRoZSBydW50aW1lIGNvZGUgdG8gdmFsaWRhdGUgc3VjaAorICAgICBhbiBpbmRleCBtaXNoYW5kbGVkIHN1Y2ggYW4gaW5kZXggZm9yIGFuIGVtcHR5IHBhY2suCisKKyAgIC0gQ29tbWl0IHdhbGtlcnMgKG1vc3Qgbm90YWJseSwgZmV0Y2ggb3ZlciBodHRwIHByb3RvY29sKQorICAgICB0cmllZCB0byB0cmF2ZXJzZSBjb21taXQgb2JqZWN0cyBjb250YWluZWQgaW4gdHJlZXMgKGFrYQorICAgICBzdWJwcm9qZWN0KTsgdGhleSBzaG91bGRuJ3QuCisKKyAgIC0gQSBidWlsZCBvcHRpb24gTk9fUl9UT19HQ0NfTElOS0VSIHdhcyBub3QgZXhwbGFpbmVkIGluIE1ha2VmaWxlCisgICAgIGNvbW1lbnQgY29ycmVjdGx5LgorCisgKiBEb2N1bWVudGF0aW9uIEZpeGVzIGFuZCBVcGRhdGVzCisKKyAgIC0gZ2l0LWNvbmZpZyAtLXJlZ2V4cCB3YXMgbm90IGRvY3VtZW50ZWQgcHJvcGVybHkuCisKKyAgIC0gZ2l0LXJlcGFjayAtYSB3YXMgbm90IGRvY3VtZW50ZWQgcHJvcGVybHkuCisKKyAgIC0gZ2l0LXJlbW90ZSAtbiB3YXMgbm90IGRvY3VtZW50ZWQgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWNmZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi40LnR4dApAQCAtMCwwICsxLDI4IEBACitHSVQgdjEuNS4yLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4yLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEJ1Z2ZpeGVzCisKKyAgIC0gImdpdC1ndWkiIGJ1Z2ZpeGVzLCBpbmNsdWRpbmcgYSBoYW5kZnVsIGZpeGVzIHRvIHJ1biBpdAorICAgICBiZXR0ZXIgb24gQ3lnd2luL01TWVMuCisKKyAgIC0gImdpdCBjaGVja291dCIgZmFpbGVkIHRvIHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCisgICAgIGJyYW5jaGVzLCBvbmUgb2Ygd2hpY2ggaGFzICJmcm90eiAtPiB4eXp6eSIgc3ltbGluayBhbmQKKyAgICAgZmlsZSAieHl6enkvZmlsZnJlIiwgd2hpbGUgdGhlIG90aGVyIG9uZSBoYXMgYSBmaWxlCisgICAgICJmcm90ei9maWxmcmUiLgorCisgICAtICJnaXQgcHJ1bmUiIHVzZWQgdG8gc2VnZmF1bHQgdXBvbiBzZWVpbmcgYSBjb21taXQgdGhhdCBpcworICAgICByZWZlcnJlZCB0byBieSBhIHRyZWUgb2JqZWN0IChha2EgInN1YnByb2plY3QiKS4KKworICAgLSAiZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyAtLW5vLWluZGV4IiBtaXNoYW5kbGVkIGFuIGFkZGVkIGZpbGUuCisKKyAgIC0gImdpdCBhcHBseSAtLXJldmVyc2UgLS13aGl0ZXNwYWNlPXdhcm4iIHN0aWxsIGNvbXBsYWluZWQKKyAgICAgYWJvdXQgd2hpdGVzcGFjZXMgdGhhdCBhIGZvcndhcmQgYXBwbGljYXRpb24gd291bGQgaGF2ZQorICAgICBpbnRyb2R1Y2VkLgorCisgKiBEb2N1bWVudGF0aW9uIEZpeGVzIGFuZCBVcGRhdGVzCisKKyAgIC0gQSBoYW5kZnVsIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MjgxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjUudHh0CkBAIC0wLDAgKzEsMzAgQEAKK0dJVCB2MS41LjIuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjIuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQnVnZml4ZXMKKworICAgLSAiZ2l0IGFkZCAtdSIgaGFkIGEgc2VyaW91cyBkYXRhIGNvcnJ1cHRpb24gcHJvYmxlbSBpbiBvbmUKKyAgICAgc3BlY2lhbCBjYXNlICh3aGVuIHRoZSBjaGFuZ2VzIHRvIGEgc3ViZGlyZWN0b3J5J3MgZmlsZXMKKyAgICAgY29uc2lzdCBvbmx5IGRlbGV0aW9uIG9mIGZpbGVzKS4KKworICAgLSAiZ2l0IGFkZCAtdSA8cGF0aD4iIGRpZCBub3Qgd29yayBmcm9tIGEgc3ViZGlyZWN0b3J5LgorCisgICAtICJnaXQgYXBwbHkiIGxlZnQgYW4gZW1wdHkgZGlyZWN0b3J5IGFmdGVyIGFsbCBpdHMgZmlsZXMgYXJlCisgICAgIHJlbmFtZWQgYXdheS4KKworICAgLSAiZ2l0ICRhbnljbWQgZm9vL2JhciIsIHdoZW4gdGhlcmUgaXMgYSBmaWxlICdmb28nIGluIHRoZQorICAgICB3b3JraW5nIHRyZWUsIGNvbXBsYWluZWQgdGhhdCAiZ2l0ICRhbnljbWQgZm9vL2JhciAtLSIgZm9ybQorICAgICBzaG91bGQgYmUgdXNlZCB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiByZXZzIGFuZCBmaWxlcywKKyAgICAgd2hpY2ggd2FzIGNvbXBsZXRlbHkgYm9ndXMuCisKKyAgIC0gImdpdCBjaGVja291dC1pbmRleCIgYW5kIG90aGVyIGNvbW1hbmRzIHRoYXQgY2hlY2tzIG91dAorICAgICBmaWxlcyB0byB0aGUgd29yayB0cmVlIHRyaWVkIHVubGluaygyKSBvbiBkaXJlY3RvcmllcywKKyAgICAgd2hpY2ggaXMgYSBzYW5lIHRoaW5nIHRvIGRvIG9uIHNhbmUgc3lzdGVtcywgYnV0IG5vdCBvbgorICAgICBTb2xhcmlzIHdoZW4geW91IGFyZSByb290LgorCisgKiBEb2N1bWVudGF0aW9uIEZpeGVzIGFuZCBVcGRhdGVzCisKKyAgIC0gQSBoYW5kZnVsIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzI4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLnR4dApAQCAtMCwwICsxLDE5NyBAQAorR0lUIHYxLjUuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogUGx1bWJpbmcgbGV2ZWwgc3VwZXJwcm9qZWN0IHN1cHBvcnQuCisKKyAgWW91IGNhbiBpbmNsdWRlIGEgc3ViZGlyZWN0b3J5IHRoYXQgaGFzIGFuIGluZGVwZW5kZW50IGdpdAorICByZXBvc2l0b3J5IGluIHlvdXIgaW5kZXggYW5kIHRyZWUgb2JqZWN0cyBvZiB5b3VyIHByb2plY3QKKyAgKCJzdXBlcnByb2plY3QiKS4gIFRoaXMgcGx1bWJpbmcgKGkuZS4gImNvcmUiKSBsZXZlbAorICBzdXBlcnByb2plY3Qgc3VwcG9ydCBleHBsaWNpdGx5IGV4Y2x1ZGVzIHJlY3Vyc2l2ZSBiZWhhdmlvdXIuCisKKyAgVGhlICJzdWJwcm9qZWN0IiBlbnRyaWVzIGluIHRoZSBpbmRleCBhbmQgdHJlZXMgb2YgYSBzdXBlcnByb2plY3QKKyAgYXJlIGluY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGdpdC4gIEV4cGVyaW1lbnRpbmcgd2l0aAorICB0aGUgcGx1bWJpbmcgbGV2ZWwgc3VwcG9ydCBpcyBlbmNvdXJhZ2VkLCBidXQgYmUgd2FybmVkIHRoYXQKKyAgdW5sZXNzIGV2ZXJ5Ym9keSBpbiB5b3VyIHByb2plY3QgdXBkYXRlcyB0byB0aGlzIHJlbGVhc2Ugb3IKKyAgbGF0ZXIsIHVzaW5nIHRoaXMgZmVhdHVyZSB3b3VsZCBtYWtlIHlvdXIgcHJvamVjdAorICBpbmFjY2Vzc2libGUgYnkgcGVvcGxlIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgZ2l0LgorCisqIFBsdW1iaW5nIGxldmVsIGdpdGF0dHJpYnV0ZXMgc3VwcG9ydC4KKworICBUaGUgZ2l0YXR0cmlidXRlcyBtZWNoYW5pc20gYWxsb3dzIHlvdSB0byBhZGQgJ2F0dHJpYnV0ZXMnIHRvCisgIHBhdGhzIGluIHlvdXIgcHJvamVjdCwgYW5kIGFmZmVjdCB0aGUgd2F5IGNlcnRhaW4gZ2l0CisgIG9wZXJhdGlvbnMgd29yay4gIEN1cnJlbnRseSB5b3UgY2FuIGluZmx1ZW5jZSBpZiBhIHBhdGggaXMKKyAgY29uc2lkZXJlZCBhIGJpbmFyeSBvciB0ZXh0ICh0aGUgZm9ybWVyIHdvdWxkIGJlIHRyZWF0ZWQgYnkKKyAgJ2dpdCBkaWZmJyBub3QgdG8gcHJvZHVjZSB0ZXh0dWFsIG91dHB1dDsgdGhlIGxhdHRlciBjYW4gZ28KKyAgdGhyb3VnaCB0aGUgbGluZSBlbmRpbmdzIGNvbnZlcnNpb24gcHJvY2VzcyBpbiByZXBvc2l0b3JpZXMKKyAgd2l0aCBjb3JlLmF1dG9jcmxmIHNldCksIGV4cGFuZCBhbmQgdW5leHBhbmQgJyRJZCQnIGtleXdvcmQKKyAgd2l0aCBibG9iIG9iamVjdCBuYW1lLCBzcGVjaWZ5IGEgY3VzdG9tIDMtd2F5IG1lcmdlIGRyaXZlciwKKyAgYW5kIHNwZWNpZnkgYSBjdXN0b20gZGlmZiBkcml2ZXIuICBZb3UgY2FuIGFsc28gYXBwbHkKKyAgYXJiaXRyYXJ5IGZpbHRlciB0byBjb250ZW50cyBvbiBjaGVjay1pbi9jaGVjay1vdXQgY29kZXBhdGgKKyAgYnV0IHRoaXMgZmVhdHVyZSBpcyBhbiBleHRyZW1lbHkgc2hhcnAtZWRnZWQgcmF6b3IgYW5kIG5lZWRzCisgIHRvIGJlIGhhbmRsZWQgd2l0aCBjYXV0aW9uIChkbyBub3QgdXNlIGl0IHVubGVzcyB5b3UKKyAgdW5kZXJzdGFuZCB0aGUgZWFybGllciBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbiBvbiBrZXl3b3JkCisgIGV4cGFuc2lvbikuICBUaGVzZSBjb252ZXJzaW9ucyBhcHBseSB3aGVuIGNoZWNraW5nIGZpbGVzIGluCisgIG9yIG91dCwgYW5kIGV4cG9ydGluZyB2aWEgZ2l0LWFyY2hpdmUuCisKKyogVGhlIHBhY2tmaWxlIGZvcm1hdCBub3cgb3B0aW9uYWxseSBzdXBwb3J0cyA2NC1iaXQgaW5kZXguCisKKyAgVGhpcyByZWxlYXNlIHN1cHBvcnRzIHRoZSAidmVyc2lvbiAyIiBmb3JtYXQgb2YgdGhlIC5pZHgKKyAgZmlsZS4gIFRoaXMgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYSBodWdlIHBhY2tmaWxlCisgIG5lZWRzIG1vcmUgdGhhbiAzMi1iaXQgdG8gZXhwcmVzcyBvZmZzZXRzIG9mIG9iamVjdHMgaW4gdGhlCisgIHBhY2suCisKKyogQ29tZXMgd2l0aCBhbiB1cGRhdGVkIGdpdC1ndWkgMC43LjEKKworKiBVcGRhdGVkIGdpdHdlYjoKKworICAtIGNhbiBzaG93IGNvbWJpbmVkIGRpZmYgZm9yIG1lcmdlczsKKyAgLSB1c2VzIGZvbnQgc2l6ZSBvZiB1c2VyJ3MgcHJlZmVyZW5jZSwgbm90IGhhcmRjb2RlZCBpbiBwaXhlbHM7CisgIC0gY2FuIG5vdyAnZ3JlcCc7CisKKyogTmV3IGNvbW1hbmRzIGFuZCBvcHRpb25zLgorCisgIC0gImdpdCBiaXNlY3Qgc3RhcnQiIGNhbiBvcHRpb25hbGx5IHRha2UgYSBzaW5nbGUgYmFkIGNvbW1pdCBhbmQKKyAgICB6ZXJvIG9yIG1vcmUgZ29vZCBjb21taXRzIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAgLSAiZ2l0IHNob3J0bG9nIiBjYW4gb3B0aW9uYWxseSBiZSB0b2xkIHRvIHdyYXAgaXRzIG91dHB1dC4KKworICAtICJzdWJ0cmVlIiBtZXJnZSBzdHJhdGVneSBhbGxvd3MgYW5vdGhlciBwcm9qZWN0IHRvIGJlIG1lcmdlZCBpbiBhcworICAgIHlvdXIgc3ViZGlyZWN0b3J5LgorCisgIC0gImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgYSBuZXcgLS1zdWJqZWN0LXByZWZpeD08c3RyaW5nPgorICAgIG9wdGlvbiwgdG8gb3ZlcnJpZGUgdGhlIGJ1aWx0LWluICJbUEFUQ0hdIi4KKworICAtICJnaXQgYWRkIC11IiBpcyBhIHF1aWNrIHdheSB0byBkbyB0aGUgZmlyc3Qgc3RhZ2Ugb2YgImdpdAorICAgIGNvbW1pdCAtYSIgKGkuZS4gdXBkYXRlIHRoZSBpbmRleCB0byBtYXRjaCB0aGUgd29ya2luZworICAgIHRyZWUpOyBpdCBvYnZpb3VzbHkgZG9lcyBub3QgbWFrZSBhIGNvbW1pdC4KKworICAtICJnaXQgY2xlYW4iIGhvbm9ycyBhIG5ldyBjb25maWd1cmF0aW9uLCAiY2xlYW4ucmVxdWlyZWZvcmNlIi4gIFdoZW4KKyAgICBzZXQgdG8gdHJ1ZSwgdGhpcyBtYWtlcyAiZ2l0IGNsZWFuIiBhIG5vLW9wLCBwcmV2ZW50aW5nIHlvdQorICAgIGZyb20gbG9zaW5nIGZpbGVzIGJ5IHR5cGluZyAiZ2l0IGNsZWFuIiB3aGVuIHlvdSBtZWFudCB0bworICAgIHNheSAibWFrZSBjbGVhbiIuICBZb3UgY2FuIHN0aWxsIHNheSAiZ2l0IGNsZWFuIC1mIiB0bworICAgIG92ZXJyaWRlIHRoaXMuCisKKyAgLSAiZ2l0IGxvZyIgZmFtaWx5IG9mIGNvbW1hbmRzIGxlYXJuZWQgLS1kYXRlPXtsb2NhbCxyZWxhdGl2ZSxkZWZhdWx0fQorICAgIG9wdGlvbi4gIC0tZGF0ZT1yZWxhdGl2ZSBpcyBzeW5vbnltIHRvIHRoZSAtLXJlbGF0aXZlLWRhdGUuCisgICAgLS1kYXRlPWxvY2FsIGdpdmVzIHRoZSB0aW1lc3RhbXAgaW4gbG9jYWwgdGltZXpvbmUuCisKKyogVXBkYXRlZCBiZWhhdmlvciBvZiBleGlzdGluZyBjb21tYW5kcy4KKworICAtIFdoZW4gJEdJVF9DT01NSVRURVJfRU1BSUwgb3IgJEdJVF9BVVRIT1JfRU1BSUwgaXMgbm90IHNldAorICAgIGJ1dCAkRU1BSUwgaXMgc2V0LCB0aGUgbGF0dGVyIGlzIHVzZWQgYXMgYSBzdWJzdGl0dXRlLgorCisgIC0gImdpdCBkaWZmIC0tc3RhdCIgc2hvd3Mgc2l6ZSBvZiBwcmVpbWFnZSBhbmQgcG9zdGltYWdlIGJsb2JzCisgICAgZm9yIGJpbmFyeSBjb250ZW50cy4gIEVhcmxpZXIgaXQgb25seSBzYWlkICJCaW4iLgorCisgIC0gImdpdCBsb3N0LWZvdW5kIiBzaG93cyBzdHVmZiB0aGF0IGFyZSB1bnJlYWNoYWJsZSBleGNlcHQKKyAgICBmcm9tIHJlZmxvZ3MuCisKKyAgLSAiZ2l0IGNoZWNrb3V0IGJyYW5jaF4wIiBub3cgZGV0YWNoZXMgSEVBRCBhdCB0aGUgdGlwIGNvbW1pdAorICAgIG9uIHRoZSBuYW1lZCBicmFuY2gsIGluc3RlYWQgb2YganVzdCBzd2l0Y2hpbmcgdG8gdGhlCisgICAgYnJhbmNoICh1c2UgImdpdCBjaGVja291dCBicmFuY2giIHRvIHN3aXRjaCB0byB0aGUgYnJhbmNoLAorICAgIGFzIGJlZm9yZSkuCisKKyAgLSAiZ2l0IGJpc2VjdCBuZXh0IiBjYW4gYmUgdXNlZCBhZnRlciBnaXZpbmcgb25seSBhIGJhZCBjb21taXQKKyAgICB3aXRob3V0IGdpdmluZyBhIGdvb2Qgb25lICh0aGlzIHN0YXJ0cyBiaXNlY3Rpb24gaGFsZi13YXkgdG8KKyAgICB0aGUgcm9vdCBjb21taXQpLiAgV2UgdXNlZCB0byByZWZ1c2UgdG8gb3BlcmF0ZSB3aXRob3V0IGEKKyAgICBnb29kIGFuZCBhIGJhZCBjb21taXQuCisKKyAgLSAiZ2l0IHB1c2giLCB3aGVuIHB1c2hpbmcgaW50byBtb3JlIHRoYW4gb25lIHJlcG9zaXRvcnksIGRvZXMKKyAgICBub3Qgc3RvcCBhdCB0aGUgZmlyc3QgZXJyb3IuCisKKyAgLSAiZ2l0IGFyY2hpdmUiIGRvZXMgbm90IGluc2lzdCB5b3UgdG8gZ2l2ZSAtLWZvcm1hdCBwYXJhbWV0ZXIKKyAgICBhbnltb3JlOyBpdCBkZWZhdWx0cyB0byAidGFyIi4KKworICAtICJnaXQgY3Zzc2VydmVyIiBjYW4gdXNlIGJhY2tlbmRzIG90aGVyIHRoYW4gc3FsaXRlLgorCisgIC0gImdpdHZpZXciIChpbiBjb250cmliLyBzZWN0aW9uKSBsZWFybmVkIHRvIGJldHRlciBzdXBwb3J0CisgICAgImdpdC1hbm5vdGF0ZSIuCisKKyAgLSAiZ2l0IGRpZmYgJGNvbW1pdDE6JHBhdGgyICRjb21taXQyOiRwYXRoMiIgY2FuIG5vdyByZXBvcnQKKyAgICBtb2RlIGNoYW5nZXMgYmV0d2VlbiB0aGUgdHdvIGJsb2JzLgorCisgIC0gTG9jYWwgImdpdCBmZXRjaCIgZnJvbSBhIHJlcG9zaXRvcnkgd2hvc2Ugb2JqZWN0IHN0b3JlIGlzCisgICAgb25lIG9mIHRoZSBhbHRlcm5hdGVzIChlLmcuIGZldGNoaW5nIGZyb20gdGhlIG9yaWdpbiBpbiBhCisgICAgcmVwb3NpdG9yeSBjcmVhdGVkIHdpdGggImdpdCBjbG9uZSAtbCAtcyIpIGF2b2lkcworICAgIGRvd25sb2FkaW5nIG9iamVjdHMgdW5uZWNlc3NhcmlseS4KKworICAtICJnaXQgYmxhbWUiIHVzZXMgLm1haWxtYXAgdG8gY2Fub25pY2FsaXplIHRoZSBhdXRob3IgbmFtZQorICAgIGp1c3QgbGlrZSAiZ2l0IHNob3J0bG9nIiBkb2VzLgorCisgIC0gImdpdCBwYWNrLW9iamVjdHMiIHBheXMgYXR0ZW50aW9uIHRvIHBhY2suZGVwdGgKKyAgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgIC0gImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IiBkb2VzIG5vdCB1c2UgLm1zZyBmaWxlIGluCisgICAgdGhlIHdvcmtpbmcgdHJlZSB0byBwcmVwYXJlIGNvbW1pdCBtZXNzYWdlOyBpbnN0ZWFkIGl0IHVzZXMKKyAgICAkR0lUX0RJUi9NRVJHRV9NU0cgYXMgb3RoZXIgY29tbWFuZHMgZG8uCisKKyogQnVpbGRzCisKKyAgLSBnaXQtcDRpbXBvcnQgaGFzIG5ldmVyIGJlZW4gaW5zdGFsbGVkOyBub3cgdGhlcmUgaXMgYW4KKyAgICBpbnN0YWxsYXRpb24gb3B0aW9uIHRvIGRvIHNvLgorCisgIC0gZ2l0ayBhbmQgZ2l0LWd1aSBjYW4gYmUgY29uZmlndXJlZCBvdXQuCisKKyAgLSBHZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBwYWdlcyBhdXRvbWF0aWNhbGx5IGdldCB2ZXJzaW9uCisgICAgaW5mb3JtYXRpb24gZnJvbSBHSVRfVkVSU0lPTi4KKworICAtIFBhcmFsbGVsIGJ1aWxkIHdpdGggIm1ha2UgLWoiIGRlc2NlbmRpbmcgaW50byBzdWJkaXJlY3RvcnkKKyAgICB3YXMgZml4ZWQuCisKKyogUGVyZm9ybWFuY2UgVHdlYWtzCisKKyAgLSBPcHRpbWl6ZWQgImdpdC1yZXYtbGlzdCAtLWJpc2VjdCIgKGhlbmNlICJnaXQtYmlzZWN0IikuCisKKyAgLSBPcHRpbWl6ZWQgImdpdC1hZGQgJHBhdGgiIGluIGEgbGFyZ2UgZGlyZWN0b3J5LCBtb3N0IG9mCisgICAgd2hvc2UgY29udGVudHMgYXJlIGlnbm9yZWQuCisKKyAgLSBPcHRpbWl6ZWQgImdpdC1kaWZmLXRyZWUiIGZvciByZWR1Y2VkIG1lbW9yeSBmb290cHJpbnQuCisKKyAgLSBUaGUgcmVjdXJzaXZlIG1lcmdlIHN0cmF0ZWd5IHVwZGF0ZWQgYSB3b3JrdHJlZSBmaWxlIHRoYXQKKyAgICB3YXMgY2hhbmdlZCBpZGVudGljYWxseSBpbiB0d28gYnJhbmNoZXMsIHdoZW4gb25lIG9mIHRoZW0KKyAgICByZW5hbWVkIGl0LiAgV2UgZG8gbm90IGRvIHRoYXQgd2hlbiB0aGVyZSBpcyBubyByZW5hbWUsIHNvCisgICAgbWF0Y2ggdGhhdCBiZWhhdmlvdXIuICBUaGlzIGF2b2lkcyBleGNlc3NpdmUgcmVidWlsZHMuCisKKyAgLSBUaGUgZGVmYXVsdCBwYWNrIGRlcHRoIGhhcyBiZWVuIGluY3JlYXNlZCB0byA1MCwgYXMgdGhlCisgICAgcmVjZW50IGFkZGl0aW9uIG9mIGRlbHRhX2Jhc2VfY2FjaGUgbWFrZXMgZGVlcGVyIGRlbHRhIGNoYWlucworICAgIG11Y2ggbGVzcyBleHBlbnNpdmUgdG8gYWNjZXNzLiAgRGVwZW5kaW5nIG9uIHRoZSBwcm9qZWN0LCBpdCB3YXMKKyAgICByZXBvcnRlZCB0aGF0IHRoaXMgcmVkdWNlcyB0aGUgcmVzdWx0aW5nIHBhY2sgZmlsZSBieSAxMCUKKyAgICBvciBzby4KKworCitGaXhlcyBzaW5jZSB2MS41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjUuMSBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluCit0aGlzIHJlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyogQnVnZml4ZXMKKworICAtIFN3aXRjaGluZyBicmFuY2hlcyB3aXRoICJnaXQgY2hlY2tvdXQiIHJlZnVzZWQgdG8gd29yayB3aGVuCisgICAgYSBwYXRoIGNoYW5nZXMgZnJvbSBhIGZpbGUgdG8gYSBkaXJlY3RvcnkgYmV0d2VlbiB0aGUKKyAgICBjdXJyZW50IGJyYW5jaCBhbmQgdGhlIG5ldyBicmFuY2gsIGluIG9yZGVyIG5vdCB0byBsb3NlCisgICAgcG9zc2libGUgbG9jYWwgY2hhbmdlcyBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgaXMgYmVpbmcgdHVybmVkCisgICAgaW50byBhIGZpbGUgd2l0aCB0aGUgc3dpdGNoLiAgV2Ugbm93IGFsbG93IHN1Y2ggYSBicmFuY2gKKyAgICBzd2l0Y2ggYWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB0aGVyZSBpcyBubyBsb2NhbGx5IG1vZGlmaWVkCisgICAgZmlsZSBub3IgdW4taWdub3JlZCBmaWxlIGluIHRoZSBkaXJlY3RvcnkuICBUaGlzIGhhcyBub3QKKyAgICBiZWVuIGJhY2twb3J0ZWQgdG8gMS41LjEueCBzZXJpZXMsIGFzIGl0IGlzIHJhdGhlciBhbgorICAgIGludHJ1c2l2ZSBjaGFuZ2UuCisKKyAgLSBNZXJnaW5nIGJyYW5jaGVzIHRoYXQgaGF2ZSBhIGZpbGUgaW4gb25lIGFuZCBhIGRpcmVjdG9yeSBpbgorICAgIGFub3RoZXIgYXQgdGhlIHNhbWUgcGF0aCB1c2VkIHRvIGdldCBxdWl0ZSBjb25mdXNlZC4gIFdlCisgICAgaGFuZGxlIHN1Y2ggYSBjYXNlIGEgYml0IG1vcmUgY2FyZWZ1bGx5LCBldmVuIHRob3VnaCB0aGF0IGlzCisgICAgc3RpbGwgbGVmdCBhcyBhIGNvbmZsaWN0IGZvciB0aGUgdXNlciB0byBzb3J0IG91dC4gIFRoaXMKKyAgICB3aWxsIG5vdCBiZSBiYWNrcG9ydGVkIHRvIDEuNS4xLnggc2VyaWVzLCBhcyBpdCBpcyByYXRoZXIgYW4KKyAgICBpbnRydXNpdmUgY2hhbmdlLgorCisgIC0gZ2l0LWZldGNoIGhhZCB0cm91YmxlIHdpdGggYSByZW1vdGUgd2l0aCBpbnNhbmVseSBsYXJnZSBudW1iZXIKKyAgICBvZiByZWZzLgorCisgIC0gImdpdCBjbGVhbiAtZCAtWCIgbm93IGRvZXMgbm90IHJlbW92ZSBub24tZXhjbHVkZWQgZGlyZWN0b3JpZXMuCisKKyAgLSByZWJhc2luZyAod2l0aG91dCAtbSkgYSBzZXJpZXMgdGhhdCBjaGFuZ2VzIGEgc3ltbGluayB0byBhIGRpcmVjdG9yeQorICAgIGluIHRoZSBtaWRkbGUgb2YgYSBwYXRoIGNvbmZ1c2VkIGdpdC1hcHBseSBncmVhdGx5IGFuZCByZWZ1c2VkIHRvCisgICAgb3BlcmF0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjU0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjEudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dJVCB2MS41LjMuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHNvbGVseSB0byBmaXggdGhlIGdlbmVyYXRlZCBSUE0ncyBkZXBlbmRlbmNpZXMuICBXZSB1c2VkCit0byBoYXZlIGdpdC1wNCBwYWNrYWdlIGJ1dCB3ZSBkbyBub3QgYW55bW9yZS4gIEFzIHN1Z2dlc3RlZCBvbgordGhlIG1haWxpbmcgbGlzdCwgdGhpcyByZWxlYXNlIG1ha2VzIGdpdC1jb3JlICJPYnNvbGV0ZSIgZ2l0LXA0LAorc28gdGhhdCB5dW0gdXBkYXRlIHdvdWxkIG5vdCBjb21wbGFpbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYmRlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjIudHh0CkBAIC0wLDAgKzEsNTggQEAKK0dJVCB2MS41LjMuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjMuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogZ2l0LXB1c2ggc2VudCB0aGluIHBhY2tzIGJ5IGRlZmF1bHQsIHdoaWNoIHdhcyBub3QgZ29vZCBmb3IKKyAgIHRoZSBwdWJsaWMgZGlzdHJpYnV0aW9uIHNlcnZlciAobm8gcG9pbnQgaW4gc2F2aW5nIHRyYW5zZmVyCisgICB3aGlsZSBwdXNoaW5nOyBubyBwb2ludCBpbiBtYWtpbmcgdGhlIHJlc3VsdGluZyBwYWNrIGxlc3MKKyAgIG9wdGltdW0pLgorCisgKiBnaXQtc3ZuIHNvbWV0aW1lcyB0ZXJtaW5hdGVkIHdpdGggIk1hbGZvcm1lZCBuZXR3b3JrIGRhdGEiIHdoZW4KKyAgIHRhbGtpbmcgb3ZlciBzdm46Ly8gcHJvdG9jb2wuCisKKyAqIGdpdC1zZW5kLWVtYWlsIHJlLWlzc3VlZCB0aGUgc2FtZSBtZXNzYWdlLWlkIGFib3V0IDEwJSBvZiB0aGUKKyAgIHRpbWUgaWYgeW91IGZpcmVkIG9mZiAzMCBtZXNzYWdlcyB3aXRoaW4gYSBzaW5nbGUgc2Vjb25kLgorCisgKiBnaXQtc3Rhc2ggd2FzIG5vdCB0ZXJtaW5hdGluZyB0aGUgbG9nIG1lc3NhZ2Ugb2YgY29tbWl0cyBpdAorICAgaW50ZXJuYWxseSBjcmVhdGVzIHdpdGggTEYuCisKKyAqIGdpdC1hcHBseSBmYWlsZWQgdG8gY2hlY2sgdGhlIHNpemUgb2YgdGhlIHBhdGNoIGh1bmsgd2hlbiBpdHMKKyAgIGJlZ2lubmluZyBwYXJ0IG1hdGNoZWQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcHJlaW1hZ2UgZXhhY3RseSwKKyAgIGV2ZW4gdGhvdWdoIHRoZSBwcmVpbWFnZSByZWNvcmRlZCBpbiB0aGUgaHVuayB3YXMgbXVjaCBsYXJnZXIKKyAgICh0aGVyZWZvcmUgdGhlIHBhdGNoIHNob3VsZCBub3QgaGF2ZSBhcHBsaWVkKSwgbGVhZGluZyB0byBhCisgICBzZWdmYXVsdC4KKworICogImdpdCBybSBmb28gJiYgZ2l0IGNvbW1pdCBmb28iIGNvbXBsYWluZWQgdGhhdCAnZm9vJyBuZWVkcyB0bworICAgYmUgYWRkZWQgZmlyc3QsIGluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgcmVtb3ZhbCwgd2hpY2ggd2FzIGEKKyAgIG5vbnNlbnNlLgorCisgKiBnaXQgZ3JlcCAtYyBzYWlkICIvZGV2L251bGw6IDAiLgorCisgKiBnaXQtYWRkIC11IGZhaWxlZCB0byByZWNvZ25pemUgYSBibG9iIHdob3NlIHR5cGUgY2hhbmdlZAorICAgYmV0d2VlbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JrIHRyZWUuCisKKyAqIFRoZSBsaW1pdCB0byByZW5hbWUgZGV0ZWN0aW9uIGhhcyBiZWVuIHRpZ2h0ZW5lZCBhIGxvdCB0bworICAgcmVkdWNlIHBlcmZvcm1hbmNlIHByb2JsZW1zIHdpdGggYSBodWdlIGNoYW5nZS4KKworICogY3ZzaW1wb3J0IGFuZCBzdm5pbXBvcnQgYmFyZmVkIHdoZW4gdGhlIGlucHV0IHRyaWVkIHRvIG1vdmUKKyAgIGEgdGFnLgorCisgKiAiZ2l0IGFwcGx5IC1wTiIgZGlkIG5vdCBjaG9wIHRoZSByaWdodCBudW1iZXIgb2YgZGlyZWN0b3JpZXMuCisKKyAqICJnaXQgc3ZuaW1wb3J0IiBkaWQgbm90IGxpa2UgU1ZOIHRhZ3Mgd2l0aCBmdW5ueSBjaGFyYWN0ZXJzIGluIHRoZW0uCisKKyAqIGdpdC1ndWkgMC44LjMsIHdpdGggYXNzb3J0ZWQgZml4ZXMsIGluY2x1ZGluZzoKKworICAgLSBmb250LWNob29zZXIgb24gWDExIHdhcyB1bnVzYWJsZSB3aXRoIGxhcmdlIG51bWJlciBvZiBmb250czsKKyAgIC0gYSBkaWZmIHRoYXQgY29udGFpbmVkIGEgZGVsZXRlZCBzeW1saW5rIG1hZGUgaXQgYmFyZjsKKyAgIC0gYW4gdW50cmFja2VkIHN5bWJvbGljIGxpbmsgdG8gYSBkaXJlY3RvcnkgbWFkZSBpdCBmYXJ0OworICAgLSBhIGZpbGUgd2l0aCAlIGluIGl0cyBuYW1lIG1hZGUgaXQgdm9taXQ7CisKKworRG9jdW1lbnRhdGlvbiB1cGRhdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXNlciBtYW51YWwgaGFzIGJlZW4gc29tZXdoYXQgcmVzdHJ1Y3R1cmVkLiAgSSB0aGluayB0aGUgbmV3Citvcmdhbml6YXRpb24gaXMgbXVjaCBlYXNpZXIgdG8gcmVhZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMTM4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjMudHh0CkBAIC0wLDAgKzEsMzEgQEAKK0dJVCB2MS41LjMuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjMuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogZ2l0LXF1aWx0aW1wb3J0IGRpZCBub3QgbGlrZSBpdCB3aGVuIGEgcGF0Y2ggZGVzY3JpYmVkIGluIHRoZQorICAgc2VyaWVzIGZpbGUgZG9lcyBub3QgZXhpc3QuCisKKyAqIHA0IGltcG9ydGVyIG1pc3NlZCBleGVjdXRhYmxlIGJpdCBpbiBzb21lIGNhc2VzLgorCisgKiBUaGUgZGVmYXVsdCBzaGVsbCBvbiBzb21lIEZyZWVCU0QgZGlkIG5vdCBleGVjdXRlIHRoZQorICAgYXJndW1lbnQgcGFyc2luZyBjb2RlIGNvcnJlY3RseSBhbmQgbWFkZSBnaXQgdW51c2FibGUuCisKKyAqIGdpdC1zdm4gaW5jb3JyZWN0bHkgc3Bhd25lZCBwYWdlciBldmVuIHdoZW4gdGhlIHVzZXIKKyAgIGV4cGxpY2l0bHkgYXNrZWQgbm90IHRvLgorCisgKiBzYW1wbGUgcG9zdC1yZWNlaXZlIGhvb2sgb3ZlcnF1b3RlZCB0aGUgZW52ZWxvcGUgc2VuZGVyCisgICB2YWx1ZS4KKworICogZ2l0LWFtIGdvdCBjb25mdXNlZCB3aGVuIHRoZSBwYXRjaCBjb250YWluZWQgYSBjaGFuZ2UgdGhhdCBpcworICAgb25seSBhYm91dCB0eXBlIGFuZCBub3QgY29udGVudHMuCisKKyAqIGdpdC1tZXJnZXRvb2wgZGlkIG5vdCBzaG93IG91ciBhbmQgdGhlaXIgdmVyc2lvbiBvZiB0aGUKKyAgIGNvbmZsaWN0ZWQgZmlsZSB3aGVuIHN0YXJ0ZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgIHByb2plY3QuCisKKyAqIGdpdC1tZXJnZXRvb2wgZGlkIG5vdCBwYXNzIGNvcnJlY3Qgb3B0aW9ucyB3aGVuIGludm9raW5nIGRpZmYzLgorCisgKiBnaXQtbG9nIHNvbWV0aW1lcyBpbnZva2VkIHVuZGVybHlpbmcgImRpZmYiIG1hY2hpbmVyeQorICAgdW5uZWNlc3NhcmlseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNGIzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjQudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0dJVCB2MS41LjMuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjMuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQ2hhbmdlIHRvICJnaXQtbHMtZmlsZXMiIGluIHYxLjUuMy4zIHRoYXQgd2FzIGludHJvZHVjZWQgdG8gc3VwcG9ydAorICAgcGFydGlhbCBjb21taXQgb2YgcmVtb3ZhbCBiZXR0ZXIgaGFkIGEgc2VnZmF1bHRpbmcgYnVnLCB3aGljaCB3YXMKKyAgIGRpYWdub3NlZCBhbmQgZml4ZWQgYnkgS2VpdGggYW5kIENhcmwuCisKKyAqIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBmb3IgcmVuYW1lIGRldGVjdGlvbiBoYXMgYmVlbiBiYWNrcG9ydGVkCisgICBmcm9tIHRoZSAnbWFzdGVyJyBicmFuY2guCisKKyAqICJnaXQtZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKG51bXBhcmVudCknIiB3YXMgbm90IHdvcmtpbmcKKyAgIGNvcnJlY3RseSBhdCBhbGwsIGFuZCAtLWZvcm1hdD0nJShwYXJlbnQpJyB3YXMgbm90IHdvcmtpbmcgZm9yCisgICBtZXJnZSBjb21taXRzLgorCisgKiBTYW1wbGUgInBvc3QtcmVjZWl2ZS1ob29rIiBpbmNvcnJlY3RseSBzZW50IG91dCBwdXNoCisgICBub3RpZmljYXRpb24gZS1tYWlscyBtYXJrZWQgYXMgIkZyb206ICIgdGhlIGNvbW1pdHRlciBvZiB0aGUKKyAgIGNvbW1pdCB0aGF0IGhhcHBlbmVkIHRvIGJlIGF0IHRoZSB0aXAgb2YgdGhlIGJyYW5jaCB0aGF0IHdhcworICAgcHVzaGVkLCBub3QgZnJvbSB0aGUgcGVyc29uIHdobyBwdXNoZWQuCisKKyAqICJnaXQtcmVtb3RlIiBkaWQgbm90IGV4aXQgbm9uLXplcm8gc3RhdHVzIHVwb24gZXJyb3IuCisKKyAqICJnaXQtYWRkIC1pIiBkaWQgbm90IHJlc3BvbmQgdmVyeSB3ZWxsIHRvIEVPRiBmcm9tIHR0eSBub3IKKyAgIGJvZ3VzIGlucHV0LgorCisgKiAiZ2l0LXJlYmFzZSAtaSIgc3F1YXNoIHN1YmNvbW1hbmQgaW5jb3JyZWN0bHkgbWFkZSB0aGUKKyAgIGF1dGhvciBvZiBsYXRlciBjb21taXQgdGhlIGF1dGhvciBvZiByZXN1bHRpbmcgY29tbWl0LAorICAgaW5zdGVhZCBvZiB0YWtpbmcgZnJvbSB0aGUgZmlyc3Qgb25lIGluIHRoZSBzcXVhc2hlZCBzZXJpZXMuCisKKyAqICJnaXQtc3Rhc2ggYXBwbHkgLS1pbmRleCIgd2FzIG5vdCBkb2N1bWVudGVkLgorCisgKiBhdXRvY29uZmlndXJhdGlvbiBsZWFybmVkIHRoYXQgImFyIiBjb21tYW5kIGlzIGZvdW5kIGFzICJnYXMiIG9uCisgICBzb21lIHN5c3RlbXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmYxZDVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy41LnR4dApAQCAtMCwwICsxLDk0IEBACitHSVQgdjEuNS4zLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENvbWVzIHdpdGggZ2l0LWd1aSAwLjguNC4KKworICogImdpdC1jb25maWciIHNpbGVudGx5IGlnbm9yZWQgb3B0aW9ucyBhZnRlciAtLWxpc3Q7IG5vdyBpdCB3aWxsCisgICBlcnJvciBvdXQgd2l0aCBhIHVzYWdlIG1lc3NhZ2UuCisKKyAqICJnaXQtY29uZmlnIC0tZmlsZSIgZmFpbGVkIGlmIHRoZSBhcmd1bWVudCB1c2VkIGEgcmVsYXRpdmUgcGF0aAorICAgYXMgaXQgY2hhbmdlZCBkaXJlY3RvcmllcyBiZWZvcmUgb3BlbmluZyB0aGUgZmlsZS4KKworICogImdpdC1jb25maWcgLS1maWxlIiBub3cgZGlzcGxheXMgYSBwcm9wZXIgZXJyb3IgbWVzc2FnZSBpZiBpdAorICAgY2Fubm90IHJlYWQgdGhlIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAqICJnaXQtY29uZmlnIiwgImdpdC1kaWZmIiwgImdpdC1hcHBseSIgZmFpbGVkIGlmIHJ1biBmcm9tIGEKKyAgIHN1YmRpcmVjdG9yeSB3aXRoIHJlbGF0aXZlIEdJVF9ESVIgYW5kIEdJVF9XT1JLX1RSRUUgc2V0LgorCisgKiAiZ2l0LWJsYW1lIiBjcmFzaGVkIGlmIHJ1biBkdXJpbmcgYSBtZXJnZSBjb25mbGljdC4KKworICogImdpdC1hZGQgLWkiIGRpZCBub3QgaGFuZGxlIHNpbmdsZSBsaW5lIGh1bmtzIGNvcnJlY3RseS4KKworICogImdpdC1yZWJhc2UgLWkiIGFuZCAiZ2l0LXN0YXNoIGFwcGx5IiBmYWlsZWQgaWYgZXh0ZXJuYWwgZGlmZgorICAgZHJpdmVycyB3ZXJlIHVzZWQgZm9yIG9uZSBvciBtb3JlIGZpbGVzIGluIGEgY29tbWl0LiAgVGhleSBub3cKKyAgIGF2b2lkIGNhbGxpbmcgdGhlIGV4dGVybmFsIGRpZmYgZHJpdmVycy4KKworICogImdpdC1sb2cgLS1mb2xsb3ciIGRpZCBub3Qgd29yayB1bmxlc3MgZGlmZiBnZW5lcmF0aW9uIChlLmcuIC1wKQorICAgd2FzIGFsc28gcmVxdWVzdGVkLgorCisgKiAiZ2l0LWxvZyAtLWZvbGxvdyAtQiIgZGlkIG5vdCB3b3JrIGF0IGFsbC4gIEZpeGVkLgorCisgKiAiZ2l0LWxvZyAtTSAtQiIgZGlkIG5vdCBjb3JyZWN0bHkgaGFuZGxlIGNhc2VzIG9mIHZlcnkgbGFyZ2UgZmlsZXMKKyAgIGJlaW5nIHJlbmFtZWQgYW5kIHJlcGxhY2VkIGJ5IHZlcnkgc21hbGwgZmlsZXMgaW4gdGhlIHNhbWUgY29tbWl0LgorCisgKiAiZ2l0LWxvZyIgcHJpbnRlZCBleHRyYSBuZXdsaW5lcyBiZXR3ZWVuIGNvbW1pdHMgd2hlbiBhIGRpZmYKKyAgIHdhcyBnZW5lcmF0ZWQgaW50ZXJuYWxseSAoZS5nLiAtUyBvciAtLWZvbGxvdykgYnV0IG5vdCBkaXNwbGF5ZWQuCisKKyAqICJnaXQtcHVzaCIgZXJyb3IgbWVzc2FnZSBpcyBtb3JlIGhlbHBmdWwgd2hlbiBwdXNoaW5nIHRvIGEKKyAgIHJlcG9zaXRvcnkgd2l0aCBubyBtYXRjaGluZyByZWZzIGFuZCBub25lIHNwZWNpZmllZC4KKworICogImdpdC1wdXNoIiBub3cgcmVzcGVjdHMgKyAoZm9yY2UgcHVzaCkgb24gd2lsZGNhcmQgcmVmc3BlY3MsCisgICBtYXRjaGluZyB0aGUgYmVoYXZpb3Igb2YgZ2l0LWZldGNoLgorCisgKiAiZ2l0LWZpbHRlci1icmFuY2giIG5vdyB1cGRhdGVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIGl0CisgICBoYXMgZmluaXNoZWQgZmlsdGVyaW5nIHRoZSBjdXJyZW50IGJyYW5jaC4KKworICogImdpdC1pbnN0YXdlYiIgbm8gbG9uZ2VyIGZhaWxzIG9uIE1hYyBPUyBYLgorCisgKiAiZ2l0LWN2c2V4cG9ydGNvbW1pdCIgZGlkbid0IGFsd2F5cyBjcmVhdGUgbmV3IHBhcmVudCBkaXJlY3RvcmllcworICAgYmVmb3JlIHRyeWluZyB0byBjcmVhdGUgbmV3IGNoaWxkIGRpcmVjdG9yaWVzLiAgRml4ZWQuCisKKyAqICJnaXQtZmV0Y2giIHByaW50ZWQgYSBzY2FyeSAoYnV0IGJvZ3VzKSBlcnJvciBtZXNzYWdlIHdoaWxlCisgICBmZXRjaGluZyBhIHRhZyB0aGF0IHBvaW50ZWQgdG8gYSB0cmVlIG9yIGJsb2IuICBUaGUgZXJyb3IgZGlkCisgICBub3QgaW1wYWN0IGNvcnJlY3RuZXNzLCBvbmx5IHVzZXIgcGVyY2VwdGlvbi4gIFRoZSBib2d1cyBlcnJvcgorICAgaXMgbm8gbG9uZ2VyIHByaW50ZWQuCisKKyAqICJnaXQtbHMtZmlsZXMgLS1pZ25vcmVkIiBkaWQgbm90IHByb3Blcmx5IGRlc2NlbmQgaW50byBub24taWdub3JlZAorICAgZGlyZWN0b3JpZXMgdGhhdCB0aGVtc2VsdmVzIGNvbnRhaW5lZCBpZ25vcmVkIGZpbGVzIGlmIGRfdHlwZQorICAgd2FzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGZpbGVzeXN0ZW0uICBUaGlzIGJ1ZyBpbXBhY3RlZCBzeXN0ZW1zCisgICBzdWNoIGFzIEFGUy4gIEZpeGVkLgorCisgKiBHaXQgc2VnZmF1bHRlZCB3aGVuIHJlYWRpbmcgYW4gaW52YWxpZCAuZ2l0YXR0cmlidXRlcyBmaWxlLiAgRml4ZWQuCisKKyAqIHBvc3QtcmVjZWl2ZS1lbWFpbCBleGFtcGxlIGhvb2sgd2FzIGZpeGVkIGZvciBub24tZmFzdC1mb3J3YXJkCisgICB1cGRhdGVzLgorCisgKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMgZm9yIHN1cHBvcnRlZCAoYnV0IHByZXZpb3VzbHkgdW5kb2N1bWVudGVkKQorICAgb3B0aW9ucyBvZiAiZ2l0LWFyY2hpdmUiIGFuZCAiZ2l0LXJlZmxvZyIuCisKKyAqICJtYWtlIGNsZWFuIiBubyBsb25nZXIgZGVsZXRlcyB0aGUgY29uZmlndXJlIHNjcmlwdCB0aGF0IHNoaXBzCisgICB3aXRoIHRoZSBnaXQgdGFyYmFsbCwgbWFraW5nIG11bHRpcGxlIGFyY2hpdGVjdHVyZSBidWlsZHMgZWFzaWVyLgorCisgKiAiZ2l0LXJlbW90ZSBzaG93IG9yaWdpbiIgc3Bld2VkIGEgd2FybmluZyBtZXNzYWdlIGZyb20gUGVybAorICAgd2hlbiBubyByZW1vdGUgaXMgZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoIHZpYQorICAgYnJhbmNoLjxuYW1lPi5yZW1vdGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KKworICogQnVpbGRpbmcgd2l0aCBOT19QRVJMX01BS0VNQUtFUiBleGNlc3NpdmVseSByZWJ1aWx0IGNvbnRlbnRzCisgICBvZiBwZXJsLyBzdWJkaXJlY3RvcnkgYnkgcmV3cml0aW5nIHBlcmwubWFrLgorCisgKiBodHRwLnNzbFZlcmlmeSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHdlcmUgbm90IHVzZWQgaW4gc2NyaXB0ZWQKKyAgIFBvcmNlbGFpbnMuCisKKyAqICJnaXQtYWRkIiBsZWFrZWQgYSBiaXQgb2YgbWVtb3J5IHdoaWxlIHNjYW5uaW5nIGZvciBmaWxlcyB0byBhZGQuCisKKyAqIEEgZmV3IHdvcmthcm91bmRzIHRvIHNxdWVsY2ggZmFsc2Ugd2FybmluZ3MgZnJvbSByZWNlbnQgZ2NjIGhhdmUKKyAgIGJlZW4gYWRkZWQuCisKKyAqICJnaXQtc2VuZC1wYWNrICRyZW1vdGUgZnJvdHoiIHNlZ2ZhdWx0ZWQgd2hlbiB0aGVyZSBpcyBub3RoaW5nCisgICBuYW1lZCAnZnJvdHonIG9uIHRoZSBsb2NhbCBlbmQuCisKKyAqICJnaXQtcmViYXNlIC0taW50ZXJhY3RpdmUiIGRpZCBub3QgaGFuZGxlIGl0cyAiLS1zdHJhdGVneSIgb3B0aW9uCisgICBwcm9wZXJseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OWEyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjYudHh0CkBAIC0wLDAgKzEsNDggQEAKK0dJVCB2MS41LjMuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjMuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogZ2l0LWN2c2V4cG9ydGNvbW1pdCBoYW5kbGVzIHJvb3QgY29tbWl0cyBiZXR0ZXIuCisKKyAqIGdpdC1zdm4gZGNvbW1pdCB1c2VkIHRvIGNsb2JiZXIgd2hlbiBzZW5kaW5nIGEgc2VyaWVzIG9mCisgICBwYXRjaGVzLgorCisgKiBnaXQtc3ZuIGRjb21taXQgZmFpbGVkIGFmdGVyIGF0dGVtcHRpbmcgdG8gcmViYXNlIHdoZW4KKyAgIHN0YXJ0ZWQgd2l0aCBhIGRpcnR5IGluZGV4OyBub3cgaXQgc3RvcHMgdXBmcm9udC4KKworICogZ2l0LWdyZXAgc29tZXRpbWVzIHJlZnVzZWQgdG8gd29yayB3aGVuIHlvdXIgaW5kZXggd2FzCisgICB1bm1lcmdlZC4KKworICogImdpdC1ncmVwIC1BMSAtQjIiIGFjdGVkIGFzIGlmIGl0IHdhcyB0b2xkIHRvIHJ1biAiZ2l0IC1BMSAtQjIxIi4KKworICogZ2l0LWhhc2gtb2JqZWN0IGRpZCBub3QgaG9ub3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMsIHN1Y2ggYXMKKyAgIGNvcmUuY29tcHJlc3Npb24uCisKKyAqIGdpdC1pbmRleC1wYWNrIGNob2tlZCBvbiBhIGh1Z2UgcGFjayBvbiAzMi1iaXQgbWFjaGluZXMsIGV2ZW4gd2hlbgorICAgbGFyZ2UgZmlsZSBvZmZzZXRzIGFyZSBzdXBwb3J0ZWQuCisKKyAqIGF0b20gZmVlZHMgZnJvbSBnaXQtd2ViIHNhaWQgIjEwIiBmb3IgdGhlIG1vbnRoIG9mIE5vdmVtYmVyLgorCisgKiBhIG1lbW9yeSBsZWFrIGluIGNvbW1pdCB3YWxrZXIgd2FzIHBsdWdnZWQuCisKKyAqIFdoZW4gZ2l0LXNlbmQtZW1haWwgaW5zZXJ0ZWQgdGhlIG9yaWdpbmFsIGF1dGhvcidzIEZyb206CisgICBhZGRyZXNzIGluIGJvZHksIGl0IGRpZCBub3QgbWFyayB0aGUgbWVzc2FnZSB3aXRoCisgICBDb250ZW50LXR5cGU6IGFzIG5lZWRlZC4KKworICogZ2l0LXJldmVydCBhbmQgZ2l0LWNoZXJyeS1waWNrIGluY29ycmVjdGx5IHJlZnVzZWQgdG8gc3RhcnQKKyAgIHdoZW4gdGhlIHdvcmsgdHJlZSB3YXMgZGlydHkuCisKKyAqIGdpdC1jbGVhbiBkaWQgbm90IGhvbm9yIGNvcmUuZXhjbHVkZXNmaWxlIGNvbmZpZ3VyYXRpb24uCisKKyAqIGdpdC1hZGQgbWlzaGFuZGxlZCAiLmdpdGlnbm9yZSIgZmlsZXMgd2hlbiBhcHBseWluZyB0aGVtIHRvCisgICBzdWJkaXJlY3Rvcmllcy4KKworICogV2hpbGUgaW1wb3J0aW5nIGEgdG9vIGJyYW5jaHkgaGlzdG9yeSwgZ2l0LWZhc3RpbXBvcnQgZGlkIG5vdAorICAgaG9ub3IgZGVsdGEgZGVwdGggbGltaXQgcHJvcGVybHkuCisKKyAqIFN1cHBvcnQgZm9yIHpsaWIgaW1wbGVtZW50YXRpb25zIHRoYXQgbGFjayBaTElCX1ZFUk5VTSBhbmQgZGVmaW5pdGlvbgorICAgb2YgZGVmbGF0ZUJvdW5kKCkgaGFzIGJlZW4gYWRkZWQuCisKKyAqIFF1aXRlIGEgbG90IG9mIGRvY3VtZW50YXRpb24gY2xhcmlmaWNhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjY5MDYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy43LnR4dApAQCAtMCwwICsxLDQ1IEBACitHSVQgdjEuNS4zLjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdC1zZW5kLWVtYWlsIGFkZGVkIDgtYml0IGNvbnRlbnRzIHRvIHRoZSBwYXlsb2FkIHdpdGhvdXQKKyAgIG1hcmtpbmcgaXQgYXMgOC1iaXQgaW4gYSBDVEUgaGVhZGVyLgorCisgKiAiZ2l0LWJ1bmRsZSBjcmVhdGUgYS5ibmRsIEhFQUQiIGRlcmVmZXJlbmNlZCB0aGUgc3ltcmVmIGFuZAorICAgZGlkIG5vdCByZWNvcmQgdGhlIHJlZiBhcyAnSEVBRCc7IHRoaXMgcHJldmVudGVkIGEgYnVuZGxlCisgICBmcm9tIGJlaW5nIHVzZWQgYXMgYSBub3JtYWwgc291cmNlIG9mIGdpdC1jbG9uZS4KKworICogVGhlIGNvZGUgdG8gcmVqZWN0IG5vbnNlbnNlIGNvbW1hbmQgbGluZSBvZiB0aGUgZm9ybQorICAgImdpdC1jb21taXQgLWEgcGF0aHMuLi4iIGFuZCAiZ2l0LWNvbW1pdCAtLWludGVyYWN0aXZlCisgICBwYXRocy4uLiIgd2VyZSBicm9rZW4uCisKKyAqIEFkZGluZyBhIHNpZ25hdHVyZSB0aGF0IGlzIG5vdCBBU0NJSS1vbmx5IHRvIGFuIG9yaWdpbmFsCisgICBjb21taXQgdGhhdCBpcyBBU0NJSS1vbmx5IHdvdWxkIG1ha2UgdGhlIHJlc3VsdCBub24tQVNDSUkuCisgICAiZ2l0LWZvcm1hdC1wYXRjaCAtcyIgZGlkIG5vdCBtYXJrIHN1Y2ggYSBtZXNzYWdlIGNvcnJlY3RseQorICAgd2l0aCBNSU1FIGVuY29kaW5nIGhlYWRlci4KKworICogZ2l0LWFkZCBzb21ldGltZXMgZGlkIG5vdCBtYXJrIHRoZSByZXN1bHRpbmcgaW5kZXggZW50cnkKKyAgIHN0YXQtY2xlYW4uICBUaGlzIGFmZmVjdGVkIG9ubHkgY2FzZXMgd2hlbiBhZGRpbmcgdGhlCisgICBjb250ZW50cyB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgcHJldmlvdXNseSBzdGFnZWQKKyAgIGNvbnRlbnRzLCBhbmQgdGhlIHByZXZpb3VzIHN0YWdpbmcgbWFkZSB0aGUgaW5kZXggZW50cnkKKyAgICJyYWNpbHkgY2xlYW4iLgorCisgKiBnaXQtY29tbWl0IGRpZCBub3QgaG9ub3IgR0lUX0lOREVYX0ZJTEUgdGhlIHVzZXIgaGFkIGluIHRoZQorICAgZW52aXJvbm1lbnQuCisKKyAqIFdoZW4gY2hlY2tpbmcgb3V0IGEgcmV2aXNpb24sIGdpdC1jaGVja291dCBkaWQgbm90IHJlcG9ydCB3aGVyZSB0aGUKKyAgIHVwZGF0ZWQgSEVBRCBpcyBpZiB5b3UgaGFwcGVuZWQgdG8gaGF2ZSBhIGZpbGUgY2FsbGVkIEhFQUQgaW4gdGhlCisgICB3b3JrIHRyZWUuCisKKyAqICJnaXQtcmV2LWxpc3QgLS1vYmplY3RzIiBtaXNoYW5kbGVkIGEgdHJlZSB0aGF0IHBvaW50cyBhdCBhCisgICBzdWJtb2R1bGUuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiB3YXMgbm90IHJlYWR5IGZvciBwYWNrZWQgcmVmcyB0aGF0ICJnaXQgZ2MiIGNhbgorICAgcHJvZHVjZSBhbmQgZ2F2ZSBpbmNvcnJlY3QgcmVzdWx0cy4KKworICogTWFueSBzY3JpcHRlZCBQb3JjZWxhaW5zIHdlcmUgY29uZnVzZWQgd2hlbiB5b3UgaGFwcGVuZWQgdG8gaGF2ZSBhCisgICBmaWxlIGNhbGxlZCAiSEVBRCIgaW4geW91ciB3b3JrIHRyZWUuCisKK0Fsc28gaXQgY29udGFpbnMgdXBkYXRlcyB0byB0aGUgdXNlciBtYW51YWwgYW5kIGRvY3VtZW50YXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjgudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy44LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTNmZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy44LnR4dApAQCAtMCwwICsxLDI1IEBACitHSVQgdjEuNS4zLjggUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFNvbWUgZG9jdW1lbnRhdGlvbiB1c2VkICJlbWFpbC5jb20iIGFzIGFuIGV4YW1wbGUgZG9tYWluLgorCisgKiBnaXQtc3ZuIGZpeCB0byBoYW5kbGUgZnVua3kgYnJhbmNoIGFuZCBwcm9qZWN0IG5hbWVzIGdvaW5nIG92ZXIKKyAgIGh0dHAvaHR0cHMgY29ycmVjdGx5LgorCisgKiBnaXQtc3ZuIGZpeCB0byB0b25lIGRvd24gYSBuZWVkbGVzc2x5IGFsYXJtaW5nIHdhcm5pbmcgbWVzc2FnZS4KKworICogZ2l0LWNsb25lIGRpZCBub3QgY29ycmVjdGx5IHJlcG9ydCBlcnJvcnMgd2hpbGUgZmV0Y2hpbmcgb3ZlciBodHRwLgorCisgKiBnaXQtc2VuZC1lbWFpbCBhZGRlZCByZWR1bmRhbnQgTWVzc2FnZS1JZDogaGVhZGVyIHRvIHRoZSBvdXRnb2luZworICAgZS1tYWlsIHdoZW4gdGhlIHBhdGNoIHRleHQgYWxyZWFkeSBoYWQgb25lLgorCisgKiBhIHJlYWQtYmV5b25kLWVuZC1vZi1idWZmZXIgYnVnIGluIGNvbmZpZ3VyYXRpb24gZmlsZSB1cGRhdGVyIHdhcyBmaXhlZC4KKworICogZ2l0LWdyZXAgdXNlZCB0byBzaG93IHRoZSBzYW1lIGhpdCByZXBlYXRlZGx5IGZvciB1bm1lcmdlZCBwYXRocy4KKworICogQWZ0ZXIgYW1lbmRpbmcgdGhlIHBhdGNoIHRpdGxlIGluICJnaXQtYW0gLWkiLCB0aGUgY29tbWFuZCBkaWQgbm90CisgICByZXBvcnQgdGhlIHBhdGNoIGl0IGFwcGxpZWQgd2l0aCB0aGUgdXBkYXRlZCB0aXRsZS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjY4ZDNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy50eHQKQEAgLTAsMCArMSwzNjYgQEAKK0dJVCB2MS41LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSBjb21taXQgd2Fsa2VycyBvdGhlciB0aGFuIGh0dHAgYXJlIG9mZmljaWFsbHkgZGVwcmVjYXRlZCwKKyAgYnV0IHN0aWxsIHN1cHBvcnRlZCBmb3Igbm93LgorCisqIFRoZSBzdWJtb2R1bGUgc3VwcG9ydCBoYXMgUG9yY2VsYWluIGxheWVyLgorCisgIE5vdGUgdGhhdCB0aGUgY3VycmVudCBzdWJtb2R1bGUgc3VwcG9ydCBpcyBtaW5pbWFsIGFuZCB0aGlzIGlzCisgIGRlbGliZXJhdGVseSBzby4gIEEgZGVzaWduIGRlY2lzaW9uIHdlIG1hZGUgaXMgdGhhdCBvcGVyYXRpb25zCisgIGF0IHRoZSBzdXBlcm1vZHVsZSBsZXZlbCBkbyBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMgYnkKKyAgZGVmYXVsdC4gIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGxhdGVyIHdlIHdvdWxkIGFkZCBhCisgIG1lY2hhbmlzbSB0byB0ZWxsIGdpdCB3aGljaCBzdWJtb2R1bGVzIHRoZSB1c2VyIGlzIGludGVyZXN0ZWQKKyAgaW4sIGFuZCB0aGlzIGluZm9ybWF0aW9uIG1pZ2h0IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZQorICByZWN1cnNpdmUgYmVoYXZpb3VyIG9mIGNlcnRhaW4gY29tbWFuZHMgKGUuZy4gImdpdCBjaGVja291dCIKKyAgYW5kICJnaXQgZGlmZiIpLCBidXQgY3VycmVudGx5IHdlIGhhdmVuJ3QgYWdyZWVkIG9uIHdoYXQgdGhhdAorICBtZWNoYW5pc20gc2hvdWxkIGxvb2sgbGlrZS4gIFRoZXJlZm9yZSwgaWYgeW91IHVzZSBzdWJtb2R1bGVzLAorICB5b3Ugd291bGQgcHJvYmFibHkgbmVlZCAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIG9uIHRoZQorICBzdWJtb2R1bGVzIHlvdSBjYXJlIGFib3V0IGFmdGVyIHJ1bm5pbmcgYSAiZ2l0IGNoZWNrb3V0IiBhdAorICB0aGUgc3VwZXJtb2R1bGUgbGV2ZWwuCisKKyogVGhlcmUgYXJlIGEgaGFuZGZ1bCBwYWNrLW9iamVjdHMgY2hhbmdlcyB0byBoZWxwIHlvdSBjb3BlIGJldHRlcgorICB3aXRoIHJlcG9zaXRvcmllcyB3aXRoIHBhdGhvbG9naWNhbGx5IGxhcmdlIGJsb2JzIGluIHRoZW0uCisKKyogRm9yIHBlb3BsZSB3aG8gbmVlZCB0byBpbXBvcnQgZnJvbSBQZXJmb3JjZSwgYSBmcm9udC1lbmQgZm9yCisgIGZhc3QtaW1wb3J0IGlzIGluIGNvbnRyaWIvZmFzdC1pbXBvcnQvLgorCisqIENvbWVzIHdpdGggZ2l0LWd1aSAwLjguMi4KKworKiBDb21lcyB3aXRoIHVwZGF0ZWQgZ2l0ay4KKworKiBOZXcgY29tbWFuZHMgYW5kIG9wdGlvbnMuCisKKyAgLSAiZ2l0IGxvZyAtLWRhdGU9PGZvcm1hdD4iIGNhbiB1c2UgbW9yZSBmb3JtYXRzOiBpc284NjAxLCByZmMyODIyLgorCisgIC0gVGhlIGh1bmsgaGVhZGVyIG91dHB1dCBmcm9tICJnaXQgZGlmZiIgZmFtaWx5IGNhbiBiZSBjdXN0b21pemVkCisgICAgd2l0aCB0aGUgYXR0cmlidXRlcyBtZWNoYW5pc20uICBTZWUgZ2l0YXR0cmlidXRlcyg1KSBmb3IgZGV0YWlscy4KKworICAtICJnaXQgc3Rhc2giIGFsbG93cyB5b3UgdG8gcXVpY2tseSBzYXZlIGF3YXkgeW91ciB3b3JrIGluCisgICAgcHJvZ3Jlc3MgYW5kIHJlcGxheSBpdCBsYXRlciBvbiBhbiB1cGRhdGVkIHN0YXRlLgorCisgIC0gImdpdCByZWJhc2UiIGxlYXJuZWQgYW4gImludGVyYWN0aXZlIiBtb2RlIHRoYXQgbGV0IHlvdQorICAgIHBpY2sgYW5kIHJlb3JkZXIgd2hpY2ggY29tbWl0cyB0byByZWJ1aWxkLgorCisgIC0gImdpdCBmc2NrIiBjYW4gc2F2ZSBpdHMgZmluZGluZ3MgaW4gJEdJVF9ESVIvbG9zdC1mb3VuZCwgd2l0aG91dCBhCisgICAgc2VwYXJhdGUgaW52b2NhdGlvbiBvZiAiZ2l0IGxvc3QtZm91bmQiIGNvbW1hbmQuICBUaGUgYmxvYnMgc3RvcmVkIGJ5CisgICAgbG9zdC1mb3VuZCBhcmUgc3RvcmVkIGluIHBsYWluIGZvcm1hdCB0byBhbGxvdyB5b3UgdG8gZ3JlcCBpbiB0aGVtLgorCisgIC0gJEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAorICAgICRHSVRfRElSIHRvIHdvcmsgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgYSB3b3JraW5nIHRyZWUgdGhhdCBpcworICAgIG5vdCBsb2NhdGVkIGF0ICIkR0lUX0RJUi8uLiIuCisKKyAgLSBHaXZpbmcgIi0tZmlsZT08ZmlsZT4iIG9wdGlvbiB0byAiZ2l0IGNvbmZpZyIgaXMgdGhlIHNhbWUgYXMKKyAgICBydW5uaW5nIHRoZSBjb21tYW5kIHdpdGggR0lUX0NPTkZJRz08ZmlsZT4gZW52aXJvbm1lbnQuCisKKyAgLSAiZ2l0IGxvZyIgbGVhcm5lZCBhIG5ldyBvcHRpb24gIi0tZm9sbG93IiwgdG8gZm9sbG93CisgICAgcmVuYW1pbmcgaGlzdG9yeSBvZiBhIHNpbmdsZSBmaWxlLgorCisgIC0gImdpdCBmaWx0ZXItYnJhbmNoIiBsZXRzIHlvdSByZXdyaXRlIHRoZSByZXZpc2lvbiBoaXN0b3J5IG9mCisgICAgc3BlY2lmaWVkIGJyYW5jaGVzLiBZb3UgY2FuIHNwZWNpZnkgYSBudW1iZXIgb2YgZmlsdGVycyB0bworICAgIG1vZGlmeSB0aGUgY29tbWl0cywgZmlsZXMgYW5kIHRyZWVzLgorCisgIC0gImdpdCBjdnNzZXJ2ZXIiIGxlYXJuZWQgbmV3IG9wdGlvbnMgKC0tYmFzZS1wYXRoLCAtLWV4cG9ydC1hbGwsCisgICAgLS1zdHJpY3QtcGF0aHMpIGluc3BpcmVkIGJ5ICJnaXQgZGFlbW9uIi4KKworICAtICJnaXQgZGFlbW9uIC0tYmFzZS1wYXRoLXJlbGF4ZWQiIGNhbiBoZWxwIG1pZ3JhdGluZyBhIHJlcG9zaXRvcnkgVVJMCisgICAgdGhhdCBkaWQgbm90IHVzZSB0byB1c2UgLS1iYXNlLXBhdGggdG8gdXNlIC0tYmFzZS1wYXRoLgorCisgIC0gImdpdCBjb21taXQiIGNhbiB1c2UgIi10IHRlbXBsYXRlZmlsZSIgb3B0aW9uIGFuZCBjb21taXQudGVtcGxhdGUKKyAgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIHByaW1lIHRoZSBjb21taXQgbWVzc2FnZSBnaXZlbiB0byB5b3UgaW4gdGhlCisgICAgZWRpdG9yLgorCisgIC0gImdpdCBzdWJtb2R1bGUiIGNvbW1hbmQgaGVscHMgeW91IG1hbmFnZSB0aGUgcHJvamVjdHMgZnJvbQorICAgIHRoZSBzdXBlcnByb2plY3QgdGhhdCBjb250YWluIHRoZW0uCisKKyAgLSBJbiBhZGRpdGlvbiB0byBjb3JlLmNvbXByZXNzaW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9uLAorICAgIGNvcmUubG9vc2Vjb21wcmVzc2lvbiBhbmQgcGFjay5jb21wcmVzc2lvbiBvcHRpb25zIGNhbgorICAgIGluZGVwZW5kZW50bHkgdHdlYWsgemxpYiBjb21wcmVzc2lvbiBsZXZlbHMgdXNlZCBmb3IgbG9vc2UKKyAgICBhbmQgcGFja2VkIG9iamVjdHMuCisKKyAgLSAiZ2l0IGxzLXRyZWUgLWwiIHNob3dzIHNpemUgb2YgYmxvYnMgcG9pbnRlZCBhdCBieSB0aGUKKyAgICB0cmVlIGVudHJpZXMsIHNpbWlsYXIgdG8gIi9iaW4vbHMgLWwiLgorCisgIC0gImdpdCByZXYtbGlzdCIgbGVhcm5lZCAtLXJlZ2V4cC1pZ25vcmUtY2FzZSBhbmQKKyAgICAtLWV4dGVuZGVkLXJlZ2V4cCBvcHRpb25zIHRvIHR3ZWFrIGl0cyBtYXRjaGluZyBsb2dpYyB1c2VkCisgICAgZm9yIC0tZ3JlcCBmaWx0ZXJpbmcuCisKKyAgLSAiZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMiIGlzIGEgaGFuZGllciB3YXkgdG8gY2FsbCBtb3JlCisgICAgb2JzY3VyZSBjb21tYW5kICJnaXQgbmFtZS1yZXYgLS10YWdzIi4KKworICAtICJnaXQgZ2MgLS1hZ2dyZXNzaXZlIiB0ZWxscyB0aGUgY29tbWFuZCB0byBzcGVuZCBtb3JlIGN5Y2xlcworICAgIHRvIG9wdGltaXplIHRoZSByZXBvc2l0b3J5IGhhcmRlci4KKworICAtICJnaXQgcmVwYWNrIiBsZWFybmVkIGEgIndpbmRvdy1tZW1vcnkiIGxpbWl0IHdoaWNoCisgICAgZHluYW1pY2FsbHkgcmVkdWNlcyB0aGUgd2luZG93IHNpemUgdG8gc3RheSB3aXRoaW4gdGhlCisgICAgc3BlY2lmaWVkIG1lbW9yeSB1c2FnZS4KKworICAtICJnaXQgcmVwYWNrIiBjYW4gYmUgdG9sZCB0byBzcGxpdCByZXN1bHRpbmcgcGFja3MgdG8gYXZvaWQKKyAgICBleGNlZWRpbmcgbGltaXQgc3BlY2lmaWVkIHdpdGggIi0tbWF4LXBhY2stc2l6ZSIuCisKKyAgLSAiZ2l0IGZzY2siIGdhaW5lZCAtLXZlcmJvc2Ugb3B0aW9uLiAgVGhpcyBpcyByZWFsbHkgcmVhbGx5CisgICAgdmVyYm9zZSBidXQgaXQgbWlnaHQgaGVscCB5b3UgaWRlbnRpZnkgZXhhY3QgY29tbWl0IHRoYXQgaXMKKyAgICBjb3JydXB0IGluIHlvdXIgcmVwb3NpdG9yeS4KKworICAtICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIC0tbnVtYmVyZWQtZmlsZXMgb3B0aW9uLiAgVGhpcworICAgIG1heSBiZSB1c2VmdWwgZm9yIE1IIHVzZXJzLgorCisgIC0gImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgZm9ybWF0LnN1YmplY3RwcmVmaXggY29uZmlndXJhdGlvbgorICAgIHZhcmlhYmxlLCB3aGljaCBzZXJ2ZXMgdGhlIHNhbWUgcHVycG9zZSBhcyAiLS1zdWJqZWN0LXByZWZpeCIKKyAgICBvcHRpb24uCisKKyAgLSAiZ2l0IHRhZyAtbiAtbCIgc2hvd3MgdGFnIGFubm90YXRpb25zIHdoaWxlIGxpc3RpbmcgdGFncy4KKworICAtICJnaXQgY3ZzaW1wb3J0IiBjYW4gb3B0aW9uYWxseSB1c2UgdGhlIHNlcGFyYXRlLXJlbW90ZSBsYXlvdXQuCisKKyAgLSAiZ2l0IGJsYW1lIiBjYW4gYmUgdG9sZCB0byBzZWUgdGhyb3VnaCBjb21taXRzIHRoYXQgY2hhbmdlCisgICAgd2hpdGVzcGFjZXMgYW5kIGluZGVudGF0aW9uIGxldmVscyB3aXRoICItdyIgb3B0aW9uLgorCisgIC0gImdpdCBzZW5kLWVtYWlsIiBjYW4gYmUgdG9sZCBub3QgdG8gdGhyZWFkIHRoZSBtZXNzYWdlcyB3aGVuCisgICAgc2VuZGluZyBvdXQgbW9yZSB0aGFuIG9uZSBwYXRjaGVzLgorCisgIC0gImdpdCBzZW5kLWVtYWlsIiBjYW4gYWxzbyBiZSB0b2xkIGhvdyB0byBmaW5kIHdob20gdG8gY2MgdGhlCisgICAgbWVzc2FnZSB0byBmb3IgZWFjaCBtZXNzYWdlIHZpYSAtLWNjLWNtZC4KKworICAtICJnaXQgY29uZmlnIiBsZWFybmVkIE5VTCB0ZXJtaW5hdGVkIG91dHB1dCBmb3JtYXQgdmlhIC16IHRvCisgICAgaGVscCBzY3JpcHRzLgorCisgIC0gImdpdCBhZGQiIGxlYXJuZWQgIi0tcmVmcmVzaCA8cGF0aHM+Li4uIiBvcHRpb24gdG8gc2VsZWN0aXZlbHkgcmVmcmVzaAorICAgIHRoZSBjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbi4KKworICAtICJnaXQgaW5pdCAtcSIgbWFrZXMgdGhlIGNvbW1hbmQgcXVpZXRlci4KKworICAtICJnaXQgLXAgY29tbWFuZCIgbm93IGhhcyBhIGNvdXNpbiBvZiBvcHBvc2l0ZSBzZXgsICJnaXQgLS1uby1wYWdlcgorICAgIGNvbW1hbmQiLgorCisqIFVwZGF0ZWQgYmVoYXZpb3Igb2YgZXhpc3RpbmcgY29tbWFuZHMuCisKKyAgLSAiZ2l0d2ViIiBjYW4gb2ZmZXIgbXVsdGlwbGUgc25hcHNob3QgZm9ybWF0cy4KKworICAgICoqKk5PVEUqKiogVW5mb3J0dW5hdGVseSwgdGhpcyBjaGFuZ2VzIHRoZSBmb3JtYXQgb2YgdGhlCisgICAgJGZlYXR1cmV7c25hcHNob3R9e2RlZmF1bHR9IGVudHJ5IGluIHRoZSBwZXItc2l0ZQorICAgIGNvbmZpZ3VyYXRpb24gZmlsZSAnZ2l0d2ViX2NvbmZpZy5wZXJsJy4gIEl0IHVzZWQgdG8gYmUgYQorICAgIHRocmVlLWVsZW1lbnQgdHVwbGUgdGhhdCBkZXNjcmliZSBhIHNpbmdsZSBmb3JtYXQ7IHdpdGggdGhlCisgICAgbmV3IGNvbmZpZ3VyYXRpb24gaXRlbSBmb3JtYXQsIHlvdSBvbmx5IGhhdmUgdG8gc2F5IHRoZSBuYW1lCisgICAgb2YgdGhlIGZvcm1hdCAoJ3RneicsICd0YnoyJyBvciAnemlwJykuICBQbGVhc2UgdXBkYXRlIHRoZQorICAgIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlIGFjY29yZGluZ2x5LgorCisgIC0gImdpdCBjbG9uZSIgdXNlcyAtbCAoaGFyZGxpbmsgZmlsZXMgdW5kZXIgLmdpdCkgYnkgZGVmYXVsdCB3aGVuCisgICAgY2xvbmluZyBsb2NhbGx5LgorCisgIC0gVVJMIHVzZWQgZm9yICJnaXQgY2xvbmUiIGFuZCBmcmllbmRzIGNhbiBzcGVjaWZ5IG5vbnN0YW5kYXJkIFNTSCBwb3J0CisgICAgYnkgdXNpbmcgc3NoOi8vaG9zdDpwb3J0L3BhdGgvdG8vcmVwbyBzeW50YXguCisKKyAgLSAiZ2l0IGJ1bmRsZSBjcmVhdGUiIGNhbiBub3cgY3JlYXRlIGEgYnVuZGxlIHdpdGhvdXQgbmVnYXRpdmUgcmVmcywKKyAgICBpLmUuICJldmVyeXRoaW5nIHNpbmNlIHRoZSBiZWdpbm5pbmcgdXAgdG8gY2VydGFpbiBwb2ludHMiLgorCisgIC0gImdpdCBkaWZmIiAoYnV0IG5vdCB0aGUgcGx1bWJpbmcgbGV2ZWwgImdpdCBkaWZmLXRyZWUiKSBub3cKKyAgICByZWN1cnNpdmVseSBkZXNjZW5kcyBpbnRvIHRyZWVzIGJ5IGRlZmF1bHQuCisKKyAgLSAiZ2l0IGRpZmYiIGRvZXMgbm90IHNob3cgZGlmZmVyZW5jZXMgdGhhdCBjb21lIG9ubHkgZnJvbQorICAgIHN0YXQtZGlydGluZXNzIGluIHRoZSBmb3JtIG9mICJkaWZmIC0tZ2l0IiBoZWFkZXIgYW55bW9yZS4KKyAgICBJdCBydW5zICJ1cGRhdGUtaW5kZXggLS1yZWZyZXNoIiBzaWxlbnRseSBhcyBuZWVkZWQuCisKKyAgLSAiZ2l0IHRhZyAtbCIgdXNlZCB0byBtYXRjaCB0YWdzIGJ5IGdsb2JiaW5nIGl0cyBwYXJhbWV0ZXIgYXMgaWYgaXQKKyAgICBoYXMgd2lsZGNhcmQgJyonIG9uIGJvdGggZW5kcywgd2hpY2ggbWFkZSAiZ2l0IHRhZyAtbCBndWkiIHRvIG1hdGNoCisgICAgdGFnICdnaXRndWktMC43LjAnOyB0aGlzIHdhcyB2ZXJ5IGFubm95aW5nLiAgWW91IG5vdyBoYXZlIHRvIGFkZAorICAgIGFzdGVyaXNrIG9uIHRoZSBzaWRlcyB5b3Ugd2FudCB0byB3aWxkY2FyZCB5b3Vyc2VsZi4KKworICAtIFRoZSBlZGl0b3IgdG8gdXNlIHdpdGggbWFueSBpbnRlcmFjdGl2ZSBjb21tYW5kcyBjYW4gYmUKKyAgICBvdmVycmlkZGVuIHdpdGggR0lUX0VESVRPUiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgaWYgaXQKKyAgICBkb2VzIG5vdCBleGlzdCwgd2l0aCBjb3JlLmVkaXRvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgQXMKKyAgICBiZWZvcmUsIGlmIHlvdSBoYXZlIG5laXRoZXIsIGVudmlyb25tZW50IHZhcmlhYmxlcyBWSVNVQUwKKyAgICBhbmQgRURJVE9SIGFyZSBjb25zdWx0ZWQgaW4gdGhpcyBvcmRlciwgYW5kIHRoZW4gZmluYWxseSB3ZQorICAgIGZhbGwgYmFjayBvbiAidmkiLgorCisgIC0gImdpdCBybSAtLWNhY2hlZCIgZG9lcyBub3QgY29tcGxhaW4gd2hlbiByZW1vdmluZyBhIG5ld2x5CisgICAgYWRkZWQgZmlsZSBmcm9tIHRoZSBpbmRleCBhbnltb3JlLgorCisgIC0gT3B0aW9ucyB0byAiZ2l0IGxvZyIgdG8gYWZmZWN0IGhvdyAtLWdyZXAvLS1hdXRob3Igb3B0aW9ucyBsb29rIGZvcgorICAgIGdpdmVuIHN0cmluZ3Mgbm93IGhhdmUgc2hvcnRlciBhYmJyZXZpYXRpb25zLiAgLWkgaXMgZm9yIGlnbm9yZSBjYXNlLAorICAgIGFuZCAtRSBpcyBmb3IgZXh0ZW5kZWQgcmVnZXhwLgorCisgIC0gImdpdCBsb2ciIGxlYXJuZWQgLS1sb2ctc2l6ZSB0byBzaG93IHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4KKyAgICB0aGUgbG9nIG1lc3NhZ2UgcGFydCBvZiB0aGUgb3V0cHV0IHRvIGhlbHAgcWdpdC4KKworICAtICJnaXQgbG9nIC0tbmFtZS1zdGF0dXMiIGRvZXMgbm90IHJlcXVpcmUgeW91IHRvIGdpdmUgIi1yIiBhbnltb3JlLgorICAgIEFzIGEgZ2VuZXJhbCBydWxlLCBQb3JjZWxhaW4gY29tbWFuZHMgc2hvdWxkIHJlY3Vyc2Ugd2hlbiBzaG93aW5nCisgICAgZGlmZi4KKworICAtICJnaXQgZm9ybWF0LXBhdGNoIC0tcm9vdCBBIiBjYW4gYmUgdXNlZCB0byBmb3JtYXQgZXZlcnl0aGluZworICAgIHNpbmNlIHRoZSBiZWdpbm5pbmcgdXAgdG8gQS4gIFRoaXMgd2FzIHN1cHBvcnRlZCB3aXRoCisgICAgImdpdCBmb3JtYXQtcGF0Y2ggLS1yb290IEEgQSIgZm9yIGEgbG9uZyB0aW1lLCBidXQgd2FzIG5vdAorICAgIHByb3Blcmx5IGRvY3VtZW50ZWQuCisKKyAgLSAiZ2l0IHN2biBkY29tbWl0IiByZXRhaW5zIGxvY2FsIG1lcmdlIGluZm9ybWF0aW9uLgorCisgIC0gImdpdCBzdm5pbXBvcnQiIGFsbG93cyBhbiBlbXB0eSBzdHJpbmcgdG8gYmUgc3BlY2lmaWVkIGFzIHRoZQorICAgIHRydW5rLyBkaXJlY3RvcnkuICBUaGlzIGlzIG5lY2Vzc2FyeSB0byBzdWNrIGRhdGEgZnJvbSBhIFNWTgorICAgIHJlcG9zaXRvcnkgdGhhdCBkb2Ugbm90IGhhdmUgdHJ1bmsvIGJyYW5jaGVzLyBhbmQgdGFncy8gb3JnYW5pemF0aW9uCisgICAgYXQgYWxsLgorCisgIC0gImdpdCBjb25maWciIHRvIHNldCB2YWx1ZXMgYWxzbyBob25vcnMgdHlwZSBmbGFncyBsaWtlIC0tYm9vbAorICAgIGFuZCAtLWludC4KKworICAtIGNvcmUucXVvdGVwYXRoIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHVzZWQgdG8gbWFrZSB0ZXh0dWFsIGdpdAorICAgIG91dHB1dCB0byBlbWl0IG1vc3Qgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHBhdGggbGl0ZXJhbGx5LgorCisgIC0gImdpdCBtZXJnZXRvb2wiIGNob29zZXMgaXRzIGJhY2tlbmQgbW9yZSB3aXNlbHksIHRha2luZworICAgIG5vdGljZSBvZiBpdHMgZW52aXJvbm1lbnQgc3VjaCBhcyB1c2Ugb2YgWCwgR25vbWUvS0RFLCBldGMuCisKKyAgLSAiZ2l0d2ViIiBzaG93cyBtZXJnZSBjb21taXRzIGEgbG90IG5pY2VyIHRoYW4gYmVmb3JlLiAgVGhlCisgICAgZGVmYXVsdCB2aWV3IHVzZXMgbW9yZSBjb21wYWN0IC0tY2MgZm9ybWF0LCB3aGlsZSB0aGUgVUkKKyAgICBhbGxvd3MgdG8gY2hvb3NlIG5vcm1hbCBkaWZmIHdpdGggYW55IHBhcmVudC4KKworICAtIHNuYXBzaG90IGZpbGVzICJnaXR3ZWIiIGNyZWF0ZXMgZnJvbSBhIHJlcG9zaXRvcnkgYXQKKyAgICAkcGF0aC8kcHJvamVjdC8uZ2l0IGFyZSBtb3JlIHVzZWZ1bC4gIFdlIHVzZSAkcHJvamVjdCBwYXJ0CisgICAgaW4gdGhlIGZpbGVuYW1lLCB3aGljaCB3ZSB1c2VkIHRvIGRpc2NhcmQuCisKKyAgLSAiZ2l0IGN2c2ltcG9ydCIgY3JlYXRlcyBsaWdodHdlaWdodCB0YWdzOyB0aGVyZSBpcyBubworICAgIGludGVyZXN0aW5nIGluZm9ybWF0aW9uIHdlIGNhbiByZWNvcmQgaW4gYW4gYW5ub3RhdGVkIHRhZywKKyAgICBhbmQgdGhlIGhhbmRjcmFmdGVkIG9uZXMgdGhlIG9sZCBjb2RlIGNyZWF0ZWQgd2FzIG5vdAorICAgIHByb3Blcmx5IGZvcm1lZCBhbnl3YXkuCisKKyAgLSAiZ2l0IHB1c2giIHByZXRlbmRzIHRoYXQgeW91IGltbWVkaWF0ZWx5IGZldGNoZWQgYmFjayBmcm9tCisgICAgdGhlIHJlbW90ZSBieSB1cGRhdGluZyBjb3JyZXNwb25kaW5nIHJlbW90ZSB0cmFja2luZworICAgIGJyYW5jaGVzIGlmIHlvdSBoYXZlIGFueS4KKworICAtIFRoZSBkaWZmc3RhdCBnaXZlbiBhZnRlciBhIG1lcmdlIChvciBhIHB1bGwpIGhvbm9ycyB0aGUKKyAgICBjb2xvci5kaWZmIGNvbmZpZ3VyYXRpb24uCisKKyAgLSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiBpcyBub3cgY29tcGF0aWJsZSB3aXRoIHZhcmlvdXMgbWVzc2FnZSBzb3VyY2UKKyAgICBvcHRpb25zIHN1Y2ggYXMgLW0vLUMvLWMvLUYuCisKKyAgLSAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1zdHJpcCIgcmVtb3ZlcyBibGFuayBsaW5lcyBhZGRlZCBhdAorICAgIHRoZSBlbmQgb2YgdGhlIGZpbGUuCisKKyAgLSAiZ2l0IGZldGNoIiBvdmVyIGdpdCBuYXRpdmUgcHJvdG9jb2xzIHdpdGggIi12IiBvcHRpb24gc2hvd3MKKyAgICBjb25uZWN0aW9uIHN0YXR1cywgYW5kIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBvdGhlciBlbmQsIHRvCisgICAgaGVscCBkaWFnbm9zaW5nIHByb2JsZW1zLgorCisgIC0gV2UgdXNlZCB0byBoYXZlIGNvcmUubGVnYWN5aGVhZGVycyBjb25maWd1cmF0aW9uLCB3aGVuCisgICAgc2V0IHRvIGZhbHNlLCBhbGxvd2VkIGdpdCB0byB3cml0ZSBsb29zZSBvYmplY3RzIGluIGEgZm9ybWF0CisgICAgdGhhdCBtaW1pY3MgdGhlIGZvcm1hdCB1c2VkIGJ5IG9iamVjdHMgc3RvcmVkIGluIHBhY2tzLiAgSXQKKyAgICB0dXJucyBvdXQgdGhhdCB0aGlzIHdhcyBub3Qgc28gdXNlZnVsLiAgQWx0aG91Z2ggd2Ugd2lsbAorICAgIGNvbnRpbnVlIHRvIHJlYWQgb2JqZWN0cyB3cml0dGVuIGluIHRoYXQgZm9ybWF0LCB3ZSBkbyBub3QKKyAgICBob25vciB0aGF0IGNvbmZpZ3VyYXRpb24gYW55bW9yZSBhbmQgY3JlYXRlIGxvb3NlIG9iamVjdHMgaW4KKyAgICB0aGUgbGVnYWN5L3RyYWRpdGlvbmFsIGZvcm1hdC4KKworICAtICItLWZpbmQtY29waWVzLWhhcmRlciIgb3B0aW9uIHRvIGRpZmYgZmFtaWx5IGNhbiBub3cgYmUKKyAgICBzcGVsbGVkIGFzICItQyAtQyIgZm9yIGJyZXZpdHkuCisKKyAgLSAiZ2l0IG1haWxzcGxpdCIgKGhlbmNlICJnaXQgYW0iKSBjYW4gcmVhZCBmcm9tIE1haWxkaXIKKyAgICBmb3JtYXR0ZWQgbWFpbGJveGVzLgorCisgIC0gImdpdCBjdnNzZXJ2ZXIiIGRvZXMgbm90IGJhcmYgdXBvbiBzZWVpbmcgImN2cyBsb2dpbiIKKyAgICByZXF1ZXN0LgorCisgIC0gInBhY2stb2JqZWN0cyIgaG9ub3JzICJkZWx0YSIgYXR0cmlidXRlIHNldCBpbgorICAgIC5naXRhdHRyaWJ1dGVzLiAgSXQgZG9lcyBub3QgYXR0ZW1wdCB0byBkZWx0aWZ5IGJsb2JzIHRoYXQKKyAgICBjb21lIGZyb20gcGF0aHMgd2l0aCBkZWx0YSBhdHRyaWJ1dGUgc2V0IHRvIGZhbHNlLgorCisgIC0gIm5ldy13b3JrZGlyIiBzY3JpcHQgKGluIGNvbnRyaWIpIGNhbiBub3cgYmUgdXNlZCB3aXRoIGEKKyAgICBiYXJlIHJlcG9zaXRvcnkuCisKKyAgLSAiZ2l0IG1lcmdldG9vbCIgbGVhcm5lZCB0byB1c2UgZ3ZpbWRpZmYuCisKKyAgLSAiZ2l0dmlldyIgKGluIGNvbnRyaWIpIGhhcyBhIGJldHRlciBibGFtZSBpbnRlcmZhY2UuCisKKyAgLSAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgZGlkIG5vdCBoYW5kbGUgYSBjb21taXQgbG9nIG1lc3NhZ2UKKyAgICB0aGF0IGlzIGxhcmdlciB0aGFuIDE2a0I7IHRoZXkgZG8gbm93LgorCisgIC0gIi0tcHJldHR5PW9uZWxpbmUiIG91dHB1dCBmb3JtYXQgZm9yICJnaXQgbG9nIiBhbmQgZnJpZW5kcworICAgIGRlYWxzIHdpdGggIm1hbGZvcm1lZCIgY29tbWl0IGxvZyBtZXNzYWdlcyB0aGF0IGhhdmUgbW9yZQorICAgIHRoYW4gb25lIGxpbmVzIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYmV0dGVyLiAgV2UgdXNlZCB0bworICAgIHNob3cgdGhlIGZpcnN0IGxpbmUsIGN1dHRpbmcgdGhlIHRpdGxlIGF0IG1pZC1zZW50ZW5jZTsgd2UKKyAgICBjb25jYXRlbmF0ZSB0aGVtIGludG8gYSBzaW5nbGUgbGluZSBhbmQgdHJlYXQgdGhlIHJlc3VsdCBhcworICAgICJvbmVsaW5lIi4KKworICAtICJnaXQgcDRpbXBvcnQiIGhhcyBiZWVuIGRlbW90ZWQgdG8gY29udHJpYiBzdGF0dXMuICBGb3IKKyAgICBhIHN1cGVyaW9yIG9wdGlvbiwgY2hlY2tvdXQgdGhlICJnaXQgcDQiIGZyb250IGVuZCB0bworICAgICJnaXQgZmFzdC1pbXBvcnQiIChhbHNvIGluIGNvbnRyaWIpLiAgVGhlIG1hbiBwYWdlIGFuZCBwNAorICAgIHJwbSBoYXZlIGJlZW4gcmVtb3ZlZCBhcyB3ZWxsLgorCisgIC0gImdpdCBtYWlsaW5mbyIgKGhlbmNlICJhbSIpIG5vdyB0cmllcyB0byBzZWUgaWYgdGhlIG1lc3NhZ2UKKyAgICBpcyBpbiB1dGYtOCBmaXJzdCwgaW5zdGVhZCBvZiBhc3N1bWluZyBpc28tODg1OS0xLCBpZgorICAgIGluY29taW5nIGUtbWFpbCBkb2VzIG5vdCBzYXkgd2hhdCBlbmNvZGluZyBpdCBpcyBpbi4KKworKiBCdWlsZHMKKworICAtIG9sZC1zdHlsZSBmdW5jdGlvbiBkZWZpbml0aW9ucyAobW9zdCBub3RhYmx5LCBhIGZ1bmN0aW9uCisgICAgd2l0aG91dCBwYXJhbWV0ZXIgZGVmaW5lZCB3aXRoICJmdW5jKCkiLCBub3QgImZ1bmModm9pZCkiKQorICAgIGhhdmUgYmVlbiBlcmFkaWNhdGVkLgorCisgIC0gImdpdCB0YWciIGFuZCAiZ2l0IHZlcmlmeS10YWciIGhhdmUgYmVlbiByZXdyaXR0ZW4gaW4gQy4KKworKiBQZXJmb3JtYW5jZSBUd2Vha3MKKworICAtICJnaXQgcGFjay1vYmplY3RzIiBhdm9pZHMgcmUtZGVsdGlmaWNhdGlvbiBjb3N0IGJ5IGNhY2hpbmcKKyAgICBzbWFsbCBlbm91Z2ggZGVsdGEgcmVzdWx0cyBpdCBjcmVhdGVzIHdoaWxlIGxvb2tpbmcgZm9yIHRoZQorICAgIGJlc3QgZGVsdGEgY2FuZGlkYXRlcy4KKworICAtICJnaXQgcGFjay1vYmplY3RzIiBsZWFybmVkIGEgbmV3IGhldXJpc3RpYyB0byBwcmVmZXIgZGVsdGEKKyAgICB0aGF0IGlzIHNoYWxsb3dlciBpbiBkZXB0aCBvdmVyIHRoZSBzbWFsbGVzdCBkZWx0YQorICAgIHBvc3NpYmxlLiAgVGhpcyBpbXByb3ZlcyBib3RoIG92ZXJhbGwgcGFja2ZpbGUgYWNjZXNzCisgICAgcGVyZm9ybWFuY2UgYW5kIHBhY2tmaWxlIGRlbnNpdHkuCisKKyAgLSBkaWZmLWRlbHRhIGNvZGUgdGhhdCBpcyB1c2VkIGZvciBwYWNraW5nIGhhcyBiZWVuIGltcHJvdmVkCisgICAgdG8gd29yayBiZXR0ZXIgb24gYmlnIGZpbGVzLgorCisgIC0gd2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWNrIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5LAorICAgIHRoZSBydW50aW1lIHVzZWQgdG8gdHJ5IGZpbmRpbmcgYW4gb2JqZWN0IGFsd2F5cyBmcm9tIHRoZQorICAgIG5ld2VzdCBwYWNrZmlsZTsgaXQgbm93IHRyaWVzIHRoZSBzYW1lIHBhY2tmaWxlIGFzIHdlIGZvdW5kCisgICAgdGhlIG9iamVjdCByZXF1ZXN0ZWQgdGhlIGxhc3QgdGltZSwgd2hpY2ggZXhwbG9pdHMgdGhlCisgICAgbG9jYWxpdHkgb2YgcmVmZXJlbmNlcy4KKworICAtIHZlcmlmeWluZyBwYWNrIGNvbnRlbnRzIGRvbmUgYnkgImdpdCBmc2NrIC0tZnVsbCIgZ290IGJvb3N0CisgICAgYnkgY2FyZWZ1bGx5IGNob29zaW5nIHRoZSBvcmRlciB0byB2ZXJpZnkgb2JqZWN0cyBpbiB0aGVtLgorCisgIC0gImdpdCByZWFkLXRyZWUgLW0iIHRvIHJlYWQgaW50byBhbiBhbHJlYWR5IHBvcHVsYXRlZCBpbmRleAorICAgIGhhcyBiZWVuIG9wdGltaXplZCB2YXN0bHkuICBUaGUgZWZmZWN0IG9mIHRoaXMgY2FuIGJlIHNlZW4KKyAgICB3aGVuIHN3aXRjaGluZyBicmFuY2hlcyB0aGF0IGhhdmUgZGlmZmVyZW5jZXMgaW4gb25seSBhCisgICAgaGFuZGZ1bCBwYXRocy4KKworICAtICJnaXQgYWRkIHBhdGhzLi4uIiBhbmQgImdpdCBjb21taXQgcGF0aHMuLi4iIGhhcyBhbHNvIGJlZW4KKyAgICBoZWF2aWx5IG9wdGltaXplZC4KKworRml4ZXMgc2luY2UgdjEuNS4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS41LjIgbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbgordGhpcyByZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisqIEJ1Z2ZpeGVzCisKKyAgLSAiZ2l0d2ViIiBoYWQgdHJvdWJsZSBoYW5kbGluZyBub24gVVRGLTggdGV4dCB3aXRoIG9sZGVyCisgICAgRW5jb2RlLnBtIFBlcmwgbW9kdWxlLgorCisgIC0gImdpdCBzdm4iIG1pc3BhcnNlZCB0aGUgZGF0YSBmcm9tIHRoZSBjb21taXRzIGluIHRoZSByZXBvc2l0b3J5IHdoZW4KKyAgICB0aGUgdXNlciBoYWQgImNvbG9yLmRpZmYgPSB0cnVlIiBpbiB0aGUgY29uZmlndXJhdGlvbi4gIFRoaXMgaGFzIGJlZW4KKyAgICBmaXhlZC4KKworICAtIFRoZXJlIHdhcyBhIGNhc2Ugd2hlcmUgImdpdCBzdm4gZGNvbW1pdCIgY2xvYmJlcmVkIGNoYW5nZXMgbWFkZSBvbiB0aGUKKyAgICBTVk4gc2lkZSB3aGlsZSBjb21taXR0aW5nIG11bHRpcGxlIGNoYW5nZXMuCisKKyAgLSAiZ2l0LXdyaXRlLXRyZWUiIGhhZCBhIGJhZCBpbnRlcmFjdGlvbiB3aXRoIHJhY3ktZ2l0IGF2b2lkYW5jZSBhbmQKKyAgICBnaXRhdHRyaWJ1dGVzIG1lY2hhbmlzbXMuCisKKyAgLSAiZ2l0IC0tYmFyZSBjb21tYW5kIiBvdmVycm9kZSBleGlzdGluZyBHSVRfRElSIHNldHRpbmcgYW5kIGFsd2F5cworICAgIG1hZGUgaXQgdHJlYXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXMgR0lUX0RJUi4KKworICAtICJnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIiBkb2VzIG5vdCBjb21wbGFpbiBpZiB5b3UgZ2l2ZSB0aGUKKyAgICBzYW1lIHBhdGggcGF0dGVybiB0d2ljZSBieSBtaXN0YWtlLgorCisgIC0gImdpdCBpbml0IiBhdXRvZGV0ZWN0ZWQgY29yZS5maWxlbW9kZSBidXQgbm90IGNvcmUuc3ltbGlua3MsIHdoaWNoCisgICAgbWFkZSBhIG5ldyBkaXJlY3RvcnkgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICJnaXQgY2xvbmUiIGN1bWJlcnNvbWUKKyAgICB0byB1c2Ugb24gZmlsZXN5c3RlbXMgdGhhdCByZXF1aXJlIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvIGJlIHNldC4KKworICAtICJnaXQgbG9nIiBmYW1pbHkgb2YgY29tbWFuZHMgYmVoYXZlZCBkaWZmZXJlbnRseSB3aGVuIHJ1biBhcyAiZ2l0CisgICAgbG9nIiAobm8gcGF0aHNwZWMpIGFuZCBhcyAiZ2l0IGxvZyAtLSIgKGFnYWluLCBubyBwYXRoc3BlYykuICBUaGlzCisgICAgaW5jb25zaXN0ZW5jeSB3YXMgaW50cm9kdWNlZCBzb21ld2hlcmUgaW4gdjEuMy4wIHNlcmllcyBidXQgbm93IGhhcworICAgIGJlZW4gY29ycmVjdGVkLgorCisgIC0gImdpdCByZWJhc2UgLW0iIGluY29ycmVjdGx5IGRpc3BsYXllZCBjb21taXRzIHRoYXQgd2VyZSBza2lwcGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlNDRiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMS50eHQKQEAgLTAsMCArMSwxNyBAQAorR0lUIHYxLjUuNC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQtY29tbWl0IC1DICR0YWciIHVzZWQgdG8gd29yayBidXQgcmV3cml0ZSBpbiBDIGRvbmUgaW4KKyAgIDEuNS40IGJyb2tlIGl0LgorCisgKiBBbiBlbnRyeSBpbiB0aGUgLmdpdGF0dHJpYnV0ZXMgZmlsZSB0aGF0IG5hbWVzIGEgcGF0dGVybiBpbiBhCisgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeSBpdCBpcyBpbiBkaWQgbm90IG1hdGNoCisgICBjb3JyZWN0bHkgKGUuZy4gcGF0dGVybiAiYi8qLmMiIGluICJhLy5naXRhdHRyaWJ1dGVzIiBzaG91bGQKKyAgIG1hdGNoICJhL2IvZm9vLmMiIGJ1dCBpdCBkaWRuJ3QpLgorCisgKiBDdXN0b21pemVkIGNvbG9yIHNwZWNpZmljYXRpb24gd2FzIHBhcnNlZCBpbmNvcnJlY3RseSB3aGVuCisgICBudW1lcmljIGNvbG9yIHZhbHVlcyBhcmUgdXNlZC4gIFRoaXMgd2FzIGZpeGVkIGluIDEuNS40LjEuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDBkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjIudHh0CkBAIC0wLDAgKzEsNDMgQEAKK0dJVCB2MS41LjQuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgY29uZmlndXJhdGlvbiBwYXJzZXIgd2FzIG5vdCBwcmVwYXJlZCB0byBzZWUgc3RyaW5nCisgICB2YWx1ZWQgdmFyaWFibGVzIG1pc3NwZWxsZWQgYXMgYm9vbGVhbiBhbmQgc2VnZmF1bHRlZC4KKworICogVGVtcG9yYXJ5IGZpbGVzIGxlZnQgYmVoaW5kIGR1ZSB0byBpbnRlcnJ1cHRlZCBvYmplY3QKKyAgIHRyYW5zZmVycyB3ZXJlIG5vdCBjbGVhbmVkIHVwIHdpdGggImdpdCBwcnVuZSIuCisKKyAqICJnaXQgY29uZmlnIC0tdW5zZXQiIHdhcyBjb25mdXNlZCB3aGVuIHRoZSB1bnNldCB2YXJpYWJsZXMKKyAgIHdlcmUgc3BlbGxlZCB3aXRoIGNvbnRpbnVhdGlvbiBsaW5lcyBpbiB0aGUgY29uZmlnIGZpbGUuCisKKyAqIFRoZSBtZXJnZSBtZXNzYWdlIGRldGVjdGlvbiBpbiAiZ2l0IGN2c2ltcG9ydCIgZGlkIG5vdCBjYXRjaAorICAgYSBtZXNzYWdlIHRoYXQgYmVnYW4gd2l0aCAiTWVyZ2UuLi4iLgorCisgKiAiZ2l0IHN0YXR1cyIgc3VnZ2VzdHMgImdpdCBybSAtLWNhY2hlZCIgZm9yIHVuc3RhZ2luZyB0aGUKKyAgIGVhcmxpZXIgImdpdCBhZGQiIGJlZm9yZSB0aGUgaW5pdGlhbCBjb21taXQuCisKKyAqICJnaXQgc3RhdHVzIiBvdXRwdXQgd2FzIGluY29ycmVjdCBkdXJpbmcgYSBwYXJ0aWFsIGNvbW1pdC4KKworICogImdpdCBiaXNlY3QiIHJlZnVzZWQgdG8gc3RhcnQgd2hlbiB0aGUgSEVBRCB3YXMgZGV0YWNoZWQuCisKKyAqICJnaXQgYmlzZWN0IiBhbGxvd2VkIGEgd2lsZGNhcmQgY2hhcmFjdGVyIGluIHRoZSBjb21taXQKKyAgIG1lc3NhZ2UgZXhwYW5kZWQgd2hpbGUgd3JpdGluZyBpdHMgbG9nIGZpbGUuCisKKyAqIE1hbnVhbCBwYWdlcyB3ZXJlIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5IHdpdGggZG9jYm9vayB4c2wKKyAgIDEuNzI7IGFkZGVkIGEgd29ya2Fyb3VuZC4KKworICogImdpdC1jb21taXQgLUMgJHRhZyIgdXNlZCB0byB3b3JrIGJ1dCByZXdyaXRlIGluIEMgZG9uZSBpbgorICAgMS41LjQgYnJva2UgaXQuICBUaGlzIHdhcyBmaXhlZCBpbiAxLjUuNC4xLgorCisgKiBBbiBlbnRyeSBpbiB0aGUgLmdpdGF0dHJpYnV0ZXMgZmlsZSB0aGF0IG5hbWVzIGEgcGF0dGVybiBpbiBhCisgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeSBpdCBpcyBpbiBkaWQgbm90IG1hdGNoCisgICBjb3JyZWN0bHkgKGUuZy4gcGF0dGVybiAiYi8qLmMiIGluICJhLy5naXRhdHRyaWJ1dGVzIiBzaG91bGQKKyAgIG1hdGNoICJhL2IvZm9vLmMiIGJ1dCBpdCBkaWRuJ3QpLiAgVGhpcyB3YXMgZml4ZWQgaW4gMS41LjQuMS4KKworICogQ3VzdG9taXplZCBjb2xvciBzcGVjaWZpY2F0aW9uIHdhcyBwYXJzZWQgaW5jb3JyZWN0bHkgd2hlbgorICAgbnVtZXJpYyBjb2xvciB2YWx1ZXMgYXJlIHVzZWQuICBUaGlzIHdhcyBmaXhlZCBpbiAxLjUuNC4xLgorCisgKiBodHRwIHRyYW5zcG9ydCBtaXNiZWhhdmVkIHdoZW4gbGlua2VkIHdpdGggY3VybC1nbnV0bHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGZjNjdmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4zLnR4dApAQCAtMCwwICsxLDI3IEBACitHSVQgdjEuNS40LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS40LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFJQTSBzcGVjIHVzZWQgdG8gcHVsbCBpbiBldmVyeXRoaW5nIHdpdGggJ2dpdCcuICBUaGlzIGhhcyBiZWVuCisgICBjaGFuZ2VkIHNvIHRoYXQgJ2dpdCcgcGFja2FnZSBjb250YWlucyBqdXN0IHRoZSBjb3JlIHBhcnRzLAorICAgYW5kIHdlIG5vdyBzdXBwbHkgJ2dpdC1hbGwnIG1ldGFwYWNrYWdlIHRvIHNsdXJwIGluIGV2ZXJ5dGhpbmcuCisgICBUaGlzIHNob3VsZCBtYXRjaCBlbmQgdXNlcidzIGV4cGVjdGF0aW9uIGJldHRlci4KKworICogV2hlbiBzb21lIHJlZnMgZmFpbGVkIHRvIHVwZGF0ZSwgZ2l0LXB1c2ggcmVwb3J0ZWQgImZhaWx1cmUiCisgICB3aGljaCB3YXMgdW5jbGVhciBpZiBzb21lIG90aGVyIHJlZnMgd2VyZSB1cGRhdGVkIG9yIGFsbCBvZgorICAgdGhlbSBmYWlsZWQgYXRvbWljYWxseSAodGhlIGFuc3dlciBpcyB0aGUgZm9ybWVyKS4gIFJld29yZGVkCisgICB0aGUgbWVzc2FnZSB0byBjbGFyaWZ5IHRoaXMuCisKKyAqICJnaXQgY2xvbmUiIGZyb20gYSByZXBvc2l0b3J5IHdob3NlIEhFQUQgd2FzIG1pc2NvbmZpZ3VyZWQKKyAgIGRpZCBub3Qgc2V0IHVwIHRoZSByZW1vdGUgcHJvcGVybHkuICBOb3cgaXQgdHJpZXMgdG8gZG8KKyAgIGJldHRlci4KKworICogVXBkYXRlZCBnaXQtcHVzaCBkb2N1bWVudGF0aW9uIHRvIGNsYXJpZnkgd2hhdCAibWF0Y2hpbmciCisgICBtZWFucywgaW4gb3JkZXIgdG8gcmVkdWNlIHVzZXIgY29uZnVzaW9uLgorCisgKiBVcGRhdGVkIGdpdC1hZGQgZG9jdW1lbnRhdGlvbiB0byBjbGFyaWZ5ICJhZGQgLXUiIG9wZXJhdGVzIGluCisgICB0aGUgY3VycmVudCBzdWJkaXJlY3RvcnkgeW91IGFyZSBpbiwganVzdCBsaWtlIG90aGVyIGNvbW1hbmRzLgorCisgKiBnaXQtZ3VpIHVwZGF0ZXMgdG8gd29yayBvbiBPU1ggYW5kIFdpbmRvd3MgYmV0dGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzYzFhOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNC50eHQKQEAgLTAsMCArMSw2NiBAQAorR0lUIHYxLjUuNC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWlsZGluZyBhbmQgaW5zdGFsbGluZyB3aXRoIGFuIG92ZXJ0aWdodCB1bWFzayBzdWNoIGFzIDA3NyBtYWRlCisgICBpbnN0YWxsZWQgdGVtcGxhdGVzIHVucmVhZGFibGUgYnkgb3RoZXJzLCB3aGlsZSB0aGUgcmVzdCBvZiB0aGUgaW5zdGFsbAorICAgYXJlIGRvbmUgaW4gYSB3YXkgdGhhdCBpcyBmcmllbmRseSB0byB1bWFzayAwMjIuCisKKyAqICJnaXQgY3ZzZXhwb3J0Y29tbWl0IC13ICRjdnNkaXIiIG1pc2JlaGF2ZWQgd2hlbiBHSVRfRElSIGlzIHNldCB0byBhCisgICByZWxhdGl2ZSBkaXJlY3RvcnkuCisKKyAqICJnaXQgaHR0cC1wdXNoIiBoYWQgYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzIHRoYXQgY291bGQgbGVhZCBpdCB0bworICAgc2VnZmF1bHQuCisKKyAqIFdoZW4gImdpdCByZWJhc2UgLWkiIGdhdmUgY29udHJvbCBiYWNrIHRvIHRoZSB1c2VyIGZvciBhIGNvbW1pdCB0aGF0IGlzCisgICBtYXJrZWQgdG8gYmUgZWRpdGVkLCBpdCBqdXN0IHNhaWQgIm1vZGlmeSBpdCB3aXRoIGNvbW1pdCAtLWFtZW5kIiwKKyAgIHdpdGhvdXQgc2F5aW5nIHdoYXQgdG8gZG8gdG8gY29udGludWUgYWZ0ZXIgbW9kaWZ5aW5nIGl0LiAgR2l2ZSBhbgorICAgZXhwbGljaXQgaW5zdHJ1Y3Rpb24gdG8gcnVuICJyZWJhc2UgLS1jb250aW51ZSIgdG8gYmUgbW9yZSBoZWxwZnVsLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGluIDEuNS40LjMgaXNzdWVkIGEgYm9ndXMgZW1wdHkgSW4tUmVwbHktVG86IGhlYWRlci4KKworICogImdpdCBiaXNlY3QiIHNob3dlZCBteXN0ZXJpb3VzICJ3b24ndCBiaXNlY3Qgb24gc2Vla2VkIHRyZWUiIGVycm9yIG1lc3NhZ2UuCisgICBUaGlzIHdhcyBsZWZ0b3ZlciBmcm9tIENvZ2l0byBkYXlzIHRvIHByZXZlbnQgImJpc2VjdCIgc3RhcnRpbmcgZnJvbSBhCisgICBjZy1zZWVrZWQgc3RhdGUuICBXZSBzdGlsbCBrZWVwIHRoZSBDb2dpdG8gc2FmZXR5LCBidXQgcnVubmluZyAiZ2l0IGJpc2VjdAorICAgc3RhcnQiIHdoZW4gYW5vdGhlciBiaXNlY3Qgd2FzIGluIGVmZmVjdCB3aWxsIGNsZWFuIHVwIGFuZCBzdGFydCBvdmVyLgorCisgKiAiZ2l0IHB1c2giIHdpdGggYW4gZXhwbGljaXQgUEFUSCB0byByZWNlaXZlLXBhY2sgZGlkIG5vdCBxdWl0ZSB3b3JrIGlmCisgICByZWNlaXZlLXBhY2sgd2FzIG5vdCBvbiB1c3VhbCBQQVRILiAgV2UgZWFybGllciBmaXhlZCB0aGUgc2FtZSBpc3N1ZQorICAgd2l0aCAiZ2l0IGZldGNoIiBhbmQgdXBsb2FkLXBhY2ssIGJ1dCBzb21laG93IGZvcmdvdCB0byBkbyBzbyBpbiB0aGUKKyAgIG90aGVyIGRpcmVjdGlvbi4KKworICogZ2l0LWd1aSdzIGluZm8gZGlhbG9nIHdhcyBub3QgZGlzcGxheWVkIGNvcnJlY3RseSB3aGVuIHRoZSB1c2VyIHRyaWVzCisgICB0byBjb21taXQgbm90aGluZyAoaS5lLiB3aXRob3V0IHN0YWdpbmcgYW55dGhpbmcpLgorCisgKiAiZ2l0IHJldmVydCIgZGlkIG5vdCBwcm9wZXJseSBmYWlsIHdoZW4gYXR0ZW1wdGluZyB0byBydW4gd2l0aCBhCisgICBkaXJ0eSBpbmRleC4KKworICogImdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtLW5vLWZmIDxvdGhlcj4iIGluY29ycmVjdGx5IG1hZGUgY29tbWl0cy4KKworICogImdpdCBtZXJnZSAtLXNxdWFzaCAtLW5vLWZmIDxvdGhlcj4iLCB3aGljaCBpcyBhIG5vbnNlbnNlIGNvbWJpbmF0aW9uCisgICBvZiBvcHRpb25zLCB3YXMgbm90IHJlamVjdGVkLgorCisgKiAiZ2l0IGxzLXJlbW90ZSIgYW5kICJnaXQgcmVtb3RlIHNob3ciIGFnYWluc3QgYW4gZW1wdHkgcmVwb3NpdG9yeQorICAgZmFpbGVkLCBpbnN0ZWFkIG9mIGp1c3QgZ2l2aW5nIGFuIGVtcHR5IHJlc3VsdCAocmVncmVzc2lvbikuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIGRpZCBub3QgaGFuZGxlIGEgcmVuYW1lZCBwYXRoIHdob3NlIG5hbWUgbmVlZHMgdG8gYmUKKyAgIHF1b3RlZCwgZHVlIHRvIGEgYnVnIGluIHVucXVvdGVfY19zdHlsZSgpIGZ1bmN0aW9uLgorCisgKiAiZ2l0IGN2c2V4cG9ydGNvbW1pdCIgd2FzIGNvbmZ1c2VkIHdoZW4gbXVsdGlwbGUgZmlsZXMgd2l0aCB0aGUgc2FtZQorICAgYmFzZW5hbWUgbmVlZGVkIHRvIGJlIHB1c2hlZCBvdXQgaW4gdGhlIHNhbWUgY29tbWl0LgorCisgKiAiZ2l0IGRhZW1vbiIgZGlkIG5vdCBzZW5kIGVhcmx5IGVycm9ycyB0byBzeXNsb2cuCisKKyAqICJnaXQgbG9nIC0tbWVyZ2UiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggLS1sZWZ0LXJpZ2h0IG9wdGlvbi4KKworICogImdpdCBzdm4iIHByb21wdGVkIGZvciBjbGllbnQgY2VydCBwYXNzd29yZCBldmVyeSB0aW1lIGl0IGFjY2Vzc2VkIHRoZQorICAgc2VydmVyLgorCisgKiBUaGUgcmVzZXQgY29tbWFuZCBpbiAiZ2l0IGZhc3QtaW1wb3J0IiBkYXRhIHN0cmVhbSB3YXMgZG9jdW1lbnRlZCB0bworICAgZW5kIHdpdGggYW4gb3B0aW9uYWwgTEYsIGJ1dCBpdCBhY3R1YWxseSByZXF1aXJlZCBvbmUuCisKKyAqICJnaXQgc3ZuIGRjb21taXQvcmViYXNlIiBkaWQgbm90IGhvbm9yIC0tcmV3cml0ZS1yb290IG9wdGlvbi4KKworQWxzbyBpbmNsdWRlZCBhcmUgYSBoYW5kZnVsIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZDEzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjUudHh0CkBAIC0wLDAgKzEsNTYgQEAKK0dJVCB2MS41LjQuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjQuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBmZXRjaCB0aGVyZSIgd2hlbiB0aGUgVVJMIGluZm9ybWF0aW9uIGNhbWUgZnJvbSB0aGUgQ29naXRvIHN0eWxlCisgICBicmFuY2hlcy90aGVyZSBmaWxlIGRpZCBub3QgdXBkYXRlIHJlZnMvaGVhZHMvdGhlcmUgKHJlZ3Jlc3Npb24gaW4KKyAgIDEuNS40KS4KKworICogQm9ndXMgcmVmc3BlYyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgInJlbW90ZS50aGVyZS5mZXRjaCA9ID0iIHdlcmUgbm90CisgICBkZXRlY3RlZCBhcyBlcnJvcnMgKHJlZ3Jlc3Npb24gaW4gMS41LjQpLgorCisgKiBZb3UgY291bGRuJ3Qgc3BlY2lmeSBhIGN1c3RvbSBlZGl0b3Igd2hvc2UgcGF0aCBjb250YWlucyBhIHdoaXRlc3BhY2UKKyAgIHZpYSBHSVRfRURJVE9SIChhbmQgY29yZS5lZGl0b3IpLgorCisgKiBUaGUgc3ViZGlyZWN0b3J5IGZpbHRlciB0byAiZ2l0IGZpbHRlci1icmFuY2giIG1pc2hhbmRsZWQgYSBoaXN0b3J5CisgICB3aGVyZSB0aGUgc3ViZGlyZWN0b3J5IGJlY29tZXMgZW1wdHkgYW5kIHRoZW4gbGF0ZXIgYmVjb21lcyBub24tZW1wdHkuCisKKyAqICJnaXQgc2hvcnRsb2ciIGdhdmUgYW4gZW1wdHkgbGluZSBpZiB0aGUgb3JpZ2luYWwgY29tbWl0IG1lc3NhZ2Ugd2FzCisgICBtYWxmb3JtZWQgKGUuZy4gYSBib3RjaGVkIGltcG9ydCBmcm9tIGZvcmVpZ24gU0NNKS4gIE5vdyBpdCBmaW5kcyB0aGUKKyAgIGZpcnN0IG5vbi1lbXB0eSBsaW5lIGFuZCB1c2VzIGl0IGZvciBiZXR0ZXIgaW5mb3JtYXRpb24uCisKKyAqIFdoZW4gdGhlIHVzZXIgZmFpbHMgdG8gZ2l2ZSBhIHJldmlzaW9uIHBhcmFtZXRlciB0byAiZ2l0IHN2biIsIGFuIGVycm9yCisgICBmcm9tIHRoZSBQZXJsIGludGVycHJldGVyIHdhcyBpc3N1ZWQgYmVjYXVzZSB0aGUgc2NyaXB0IGxhY2tlZCBwcm9wZXIKKyAgIGVycm9yIGNoZWNraW5nLgorCisgKiBBZnRlciAiZ2l0IHJlYmFzZSIgc3RvcHBlZCBkdWUgdG8gY29uZmxpY3RzLCBpZiB0aGUgdXNlciBwbGF5ZWQgd2l0aAorICAgImdpdCByZXNldCIgYW5kIGZyaWVuZHMsICJnaXQgcmViYXNlIC0tYWJvcnQiIGZhaWxlZCB0byBnbyBiYWNrIHRvIHRoZQorICAgY29ycmVjdCBjb21taXQuCisKKyAqIEFkZGl0aW9uYWwgd29yayB0cmVlcyBwcmVwYXJlZCB3aXRoIGdpdC1uZXctd29ya2RpciAoaW4gY29udHJpYi8pIGRpZAorICAgbm90IHNoYXJlIGdpdC1zdm4gbWV0YWRhdGEgZGlyZWN0b3J5IC5naXQvc3ZuIHdpdGggdGhlIG9yaWdpbmFsLgorCisgKiAiZ2l0LW1lcmdlLXJlY3Vyc2l2ZSIgZGlkIG5vdCBtYXJrIGFkZGl0aW9uIG9mIHRoZSBzYW1lIHBhdGggd2l0aAorICAgZGlmZmVyZW50IGZpbGVtb2RlcyBjb3JyZWN0bHkgYXMgYSBjb25mbGljdC4KKworICogImdpdHdlYiIgZ2F2ZSBtYWxmb3JtZWQgVVJMIHdoZW4gcGF0aGluZm8gc3R5cGUgcGF0aHMgYXJlIGluIHVzZS4KKworICogIi1uIiBzdGFuZHMgZm9yICItLW5vLXRhZ3MiIGFnYWluIGZvciAiZ2l0IGZldGNoIi4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGRpZCBub3QgZGV0ZWN0IHRoZSBuZWVkIHRvIGFkZCA4LWJpdCBNSU1FIGhlYWRlcgorICAgd2hlbiB0aGUgdXNlciB1c2VkIGZvcm1hdC5oZWFkZXIgY29uZmlndXJhdGlvbi4KKworICogInJldn4iIHJldmlzaW9uIHNwZWNpZmllciB1c2VkIHRvIG1lYW4gInJldiIsIHdoaWNoIHdhcyBpbmNvbnNpc3RlbnQKKyAgIHdpdGggaG93ICJyZXZeIiB3b3JrZWQuICBOb3cgInJldn4iIGlzIHRoZSBzYW1lIGFzICJyZXZ+MSIgKGhlbmNlIGl0CisgICBhbHNvIGlzIHRoZSBzYW1lIGFzICJyZXZeMSIpLCBhbmQgInJldn4wIiBpcyB0aGUgc2FtZSBhcyAicmV2XjAiCisgICAoaS5lLiBpdCBoYXMgdG8gYmUgYSBjb21taXQpLgorCisgKiAiZ2l0IHF1aWx0aW1wb3J0IiBkaWQgbm90IGdyb2sgZW1wdHkgbGluZXMsIGxpbmVzIGluICJmaWxlIC1wTk5OIgorICAgZm9ybWF0IHRvIHNwZWNpZnkgdGhlIHByZWZpeCBsZXZlbHMgYW5kIGxpbmVzIHdpdGggdHJhaWxpbmcgY29tbWVudHMuCisKKyAqICJnaXQgcmViYXNlIC1tIiB0cmlnZ2VyZWQgcHJlLWNvbW1pdCB2ZXJpZmljYXRpb24sIHdoaWNoIG1hZGUKKyAgICJyZWJhc2UgLS1jb250aW51ZSIgaW1wb3NzaWJsZS4KKworQXMgdXN1YWwsIGl0IGFsc28gY29tZXMgd2l0aCBtYW55IGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIGNsYXJpZmljYXRpb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzYzNlNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNi50eHQKQEAgLTAsMCArMSw0MyBAQAorR0lUIHYxLjUuNC42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0kgcGVyc29uYWxseSBkbyBub3QgdGhpbmsgdGhlcmUgaXMgYW55IHJlYXNvbiBhbnlib2R5IHNob3VsZCB3YW50IHRvCitydW4gdjEuNS40Llggc2VyaWVzIHRoZXNlIGRheXMsIGJlY2F1c2UgJ21hc3RlcicgdmVyc2lvbiBpcyBhbHdheXMKK21vcmUgc3RhYmxlIHRoYW4gYW55IHRhZ2dlZCByZWxlYXNlZCB2ZXJzaW9uIG9mIGdpdC4KKworVGhpcyBpcyBwcmltYXJpbHkgdG8gZnV0dXJlcHJvb2YgImdpdC1zaGVsbCIgdG8gYWNjZXB0IHJlcXVlc3RzCit3aXRob3V0IGEgZGFzaCBiZXR3ZWVuICJnaXQiIGFuZCBzdWJjb21tYW5kIG5hbWUgKGUuZy4gImdpdAordXBsb2FkLXBhY2siKSB3aGljaCB0aGUgbmV3ZXIgY2xpZW50IHdpbGwgc3RhcnQgdG8gbWFrZSBzb21ldGltZSBpbgordGhlIGZ1dHVyZS4KKworRml4ZXMgc2luY2UgdjEuNS40LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENvbW1hbmQgbGluZSBvcHRpb24gIi1uIiB0byAiZ2l0LXJlcGFjayIgd2FzIG5vdCBjb3JyZWN0bHkgcGFyc2VkLgorCisgKiBFcnJvciBtZXNzYWdlcyBmcm9tICJnaXQtYXBwbHkiIHdoZW4gdGhlIHBhdGNoZmlsZSBjYW5ub3QgYmUgb3BlbmVkCisgICBoYXZlIGJlZW4gaW1wcm92ZWQuCisKKyAqIEVycm9yIG1lc3NhZ2VzIGZyb20gImdpdC1iaXNlY3QiIHdoZW4gZ2l2ZW4gbm9uc2Vuc2UgcmV2aXNpb25zIGhhdmUKKyAgIGJlZW4gaW1wcm92ZWQuCisKKyAqIHJlZmxvZyBzeW50YXggdGhhdCB1c2VzIHRpbWUgZS5nLiAiSEVBREB7MTAgc2Vjb25kcyBhZ299OnBhdGgiIGRpZCBub3QKKyAgIHN0b3AgcGFyc2luZyBhdCB0aGUgY2xvc2luZyAifSIuCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIF5tYXN0ZXJeMiIgcHJpbnRlZCBzb2xpdGFyeSAiXiIsCisgICBidXQgaXQgc2hvdWxkIHByaW50IG5vdGhpbmcuCisKKyAqICJnaXQgYXBwbHkiIGRpZCBub3QgZW5mb3JjZSAibWF0Y2ggYXQgdGhlIGJlZ2lubmluZyIgY29ycmVjdGx5LgorCisgKiBhIHBhdGggc3BlY2lmaWNhdGlvbiAiYS9iIiBpbiAuZ2l0YXR0cmlidXRlcyBmaWxlIHNob3VsZCBub3QgbWF0Y2gKKyAgICJzdWIvYS9iIiwgYnV0IGl0IGRpZC4KKworICogImdpdCBsb2cgLS1kYXRlLW9yZGVyIC0tdG9wby1vcmRlciIgZGlkIG5vdCBvdmVycmlkZSB0aGUgZWFybGllcgorICAgZGF0ZS1vcmRlciB3aXRoIHRvcG8tb3JkZXIgYXMgZXhwZWN0ZWQuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGRpZCBub3QgZXhwb3J0IG9jdG9wdXMgbWVyZ2VzIGNvcnJlY3RseS4KKworICogImdpdCBhcmNoaXZlIC0tcHJlZml4PSRwYXRoLyIgbWlzaGFuZGxlZCBnaXRhdHRyaWJ1dGVzLgorCitBcyB1c3VhbCwgaXQgYWxzbyBjb21lcyB3aXRoIG1hbnkgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgY2xhcmlmaWNhdGlvbnMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjVhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjcudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dJVCB2MS41LjQuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSAxLjUuNC43CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFJlbW92ZWQgc3VwcG9ydCBmb3IgYW4gb2Jzb2xldGUgZ2l0d2ViIHJlcXVlc3QgVVJJLCB3aG9zZQorICAgaW1wbGVtZW50YXRpb24gcmFuICJnaXQgZGlmZiIgUG9yY2VsYWluLCBpbnN0ZWFkIG9mIHVzaW5nIHBsdW1iaW5nLAorICAgd2hpY2ggd291bGQgaGF2ZSBydW4gYW4gZXh0ZXJuYWwgZGlmZiBjb21tYW5kIHNwZWNpZmllZCBpbiB0aGUKKyAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhcyB0aGUgZ2l0d2ViIHVzZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMzIzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LnR4dApAQCAtMCwwICsxLDM3NyBAQAorR0lUIHYxLjUuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVtb3ZhbAorLS0tLS0tLQorCisgKiAiZ2l0IHN2bmltcG9ydCIgd2FzIHJlbW92ZWQgaW4gZmF2b3Igb2YgImdpdCBzdm4iLiAgSXQgaXMgc3RpbGwgdGhlcmUKKyAgIGluIHRoZSBzb3VyY2UgdHJlZSAoY29udHJpYi9leGFtcGxlcykgYnV0IHVuc3VwcG9ydGVkLgorCisgKiBBcyBnaXQtY29tbWl0IGFuZCBnaXQtc3RhdHVzIGhhdmUgYmVlbiByZXdyaXR0ZW4sICJnaXQgcnVuc3RhdHVzIgorICAgaGVscGVyIHNjcmlwdCBsb3N0IGFsbCBpdHMgdXNlcnMgYW5kIGhhcyBiZWVuIHJlbW92ZWQuCisKKworVGVtcG9yYXJpbHkgZGlzYWJsZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgaHR0cC1wdXNoIiBpcyBrbm93biBub3QgdG8gd29yayB3ZWxsIHdpdGggY1VSTCBsaWJyYXJ5IG9sZGVyCisgICB0aGFuIDcuMTYsIGFuZCB3ZSBoYWQgcmVwb3J0cyBvZiByZXBvc2l0b3J5IGNvcnJ1cHRpb24uICBJdCBpcworICAgZGlzYWJsZWQgb24gc3VjaCBwbGF0Zm9ybXMgZm9yIG5vdy4gIFVuZm9ydHVuYXRlbHksIDEuNS4zLjggc2hhcmVzCisgICB0aGUgc2FtZSBpc3N1ZS4gIEluIG90aGVyIHdvcmRzLCB0aGlzIGRvZXMgbm90IG1lYW4geW91IHdpbGwgYmUKKyAgIGZpbmUgaWYgeW91IHN0aWNrIHRvIGFuIG9sZGVyIGdpdCByZWxlYXNlLiAgRm9yIG5vdywgcGxlYXNlIGRvIG5vdAorICAgdXNlIGh0dHAtcHVzaCBmcm9tIG9sZGVyIGdpdCB3aXRoIGNVUkwgb2xkZXIgdGhhbiA3LjE2IGlmIHlvdQorICAgdmFsdWUgeW91ciBkYXRhLiBBIHByb3BlciBmaXggd2lsbCBob3BlZnVsbHkgbWF0ZXJpYWxpemUgaW4KKyAgIGxhdGVyIHZlcnNpb25zLgorCisKK0RlcHJlY2F0aW9uIG5vdGljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogRnJvbSB2MS42LjAsIGdpdCB3aWxsIGJ5IGRlZmF1bHQgaW5zdGFsbCBkYXNoZWQgZm9ybSBvZiBjb21tYW5kcworICAgKGUuZy4gImdpdC1jb21taXQiKSBvdXRzaWRlIG9mIHVzZXJzJyBub3JtYWwgJFBBVEgsIGFuZCB3aWxsIGluc3RhbGwKKyAgIG9ubHkgc2VsZWN0ZWQgY29tbWFuZHMgKCJnaXQiIGl0c2VsZiwgYW5kICJnaXRrIikgaW4gJFBBVEguICBUaGlzCisgICBpbXBsaWVzOgorCisgICAtIFVzaW5nIGRhc2hlZCBmb3JtcyBvZiBnaXQgY29tbWFuZHMgKGUuZy4gImdpdC1jb21taXQiKSBmcm9tIHRoZQorICAgICBjb21tYW5kIGxpbmUgaGFzIGJlZW4gaW5mb3JtYWxseSBkZXByZWNhdGVkIHNpbmNlIGVhcmx5IDIwMDYsIGJ1dAorICAgICBub3cgaXQgb2ZmaWNpYWxseSBpcywgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiAgVXNlCisgICAgIGRhc2gtbGVzcyBmb3JtcyAoZS5nLiAiZ2l0IGNvbW1pdCIpIGluc3RlYWQuCisKKyAgIC0gVXNpbmcgZGFzaGVkIGZvcm1zIGZyb20geW91ciBzY3JpcHRzLCB3aXRob3V0IGZpcnN0IHByZXBlbmRpbmcgdGhlCisgICAgIHJldHVybiB2YWx1ZSBmcm9tICJnaXQgLS1leGVjLXBhdGgiIHRvIHRoZSBzY3JpcHRzJyBQQVRILCBoYXMgYmVlbgorICAgICBpbmZvcm1hbGx5IGRlcHJlY2F0ZWQgc2luY2UgZWFybHkgMjAwNiwgYnV0IG5vdyBpdCBvZmZpY2lhbGx5IGlzLgorCisgICAtIFVzZSBvZiBkYXNoZWQgZm9ybXMgd2l0aCAiUEFUSD0kKGdpdCAtLWV4ZWMtcGF0aCk6JFBBVEg7IGV4cG9ydAorICAgICBQQVRIIiBlYXJseSBpbiB5b3VyIHNjcmlwdCBpcyBub3QgZGVwcmVjYXRlZCB3aXRoIHRoaXMgY2hhbmdlLgorCisgICBVc2VycyBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byBhZGp1c3QgdGhlaXIgaGFiaXRzIGFuZCBzY3JpcHRzIG5vdworICAgdG8gcHJlcGFyZSBmb3IgdGhpcyBjaGFuZ2UuCisKKyAqIFRoZSBwb3N0LXJlY2VpdmUgaG9vayB3YXMgaW50cm9kdWNlZCBpbiBNYXJjaCAyMDA3IHRvIHN1cGVyc2VkZQorICAgdGhlIHBvc3QtdXBkYXRlIGhvb2ssIHByaW1hcmlseSB0byBvdmVyY29tZSB0aGUgY29tbWFuZCBsaW5lIGxlbmd0aAorICAgbGltaXRhdGlvbiBvZiB0aGUgbGF0dGVyLiAgVXNlIG9mIHBvc3QtdXBkYXRlIGhvb2sgd2lsbCBiZSBkZXByZWNhdGVkCisgICBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgZ2l0LCBzdGFydGluZyBmcm9tIHYxLjYuMC4KKworICogImdpdCBsb3N0LWZvdW5kIiB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiAiZ2l0IGZzY2siJ3MgLS1sb3N0LWZvdW5kCisgICBvcHRpb24sIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKworICogImdpdCBwZWVrLXJlbW90ZSIgaXMgZGVwcmVjYXRlZCwgYXMgImdpdCBscy1yZW1vdGUiIHdhcyB3cml0dGVuIGluIEMKKyAgIGFuZCB3b3JrcyBmb3IgYWxsIHRyYW5zcG9ydHM7ICJnaXQgcGVlay1yZW1vdGUiIHdpbGwgYmUgcmVtb3ZlZCBpbgorICAgdGhlIGZ1dHVyZS4KKworICogImdpdCByZXBvLWNvbmZpZyIgd2hpY2ggd2FzIGFuIG9sZCBuYW1lIGZvciAiZ2l0IGNvbmZpZyIgY29tbWFuZAorICAgaGFzIGJlZW4gc3VwcG9ydGVkIHdpdGhvdXQgYmVpbmcgYWR2ZXJ0aXNlZCBmb3IgYSBsb25nIHRpbWUuICBUaGUKKyAgIG5leHQgZmVhdHVyZSByZWxlYXNlIHdpbGwgcmVtb3ZlIGl0LgorCisgKiBGcm9tIHYxLjYuMCwgdGhlIHJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQgY29uZmlnIG9wdGlvbiB3aWxsIGRlZmF1bHQKKyAgIHRvIHRydWUsIHdoaWNoIHdpbGwgZ2l2ZSBkZW5zZXIgcGFja2ZpbGVzIChpLmUuIG1vcmUgZWZmaWNpZW50IHN0b3JhZ2UpLgorICAgVGhlIGRvd25zaWRlIGlzIHRoYXQgZ2l0IG9sZGVyIHRoYW4gdmVyc2lvbiAxLjQuNCB3aWxsIG5vdCBiZSBhYmxlCisgICB0byBkaXJlY3RseSB1c2UgYSByZXBvc2l0b3J5IHBhY2tlZCB1c2luZyB0aGlzIHNldHRpbmcuCisKKyAqIEZyb20gdjEuNi4wLCB0aGUgcGFjay5pbmRleHZlcnNpb24gY29uZmlnIG9wdGlvbiB3aWxsIGRlZmF1bHQgdG8gMiwKKyAgIHdoaWNoIGlzIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50LCBhbmQgbWFrZXMgcmVwYWNraW5nIG1vcmUgaW1tdW5lIHRvCisgICBkYXRhIGNvcnJ1cHRpb25zLiAgR2l0IG9sZGVyIHRoYW4gdmVyc2lvbiAxLjUuMiBtYXkgcmV2ZXJ0IHRvIHZlcnNpb24gMQorICAgb2YgdGhlIHBhY2sgaW5kZXggd2l0aCBhIG1hbnVhbCAiZ2l0IGluZGV4LXBhY2siIHRvIGJlIGFibGUgdG8gZGlyZWN0bHkKKyAgIGFjY2VzcyBjb3JyZXNwb25kaW5nIHBhY2sgZmlsZXMuCisKKworVXBkYXRlcyBzaW5jZSB2MS41LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENvbWVzIHdpdGggbXVjaCBpbXByb3ZlZCBnaXRrLCB3aXRoIGkxOG4uCisKKyAqIENvbWVzIHdpdGggZ2l0LWd1aSAwLjkuMiB3aXRoIGkxOG4uCisKKyAqIGdpdGsgaXMgbm93IG1lcmdlZCBhcyBhIHN1YmRpcmVjdG9yeSBvZiBnaXQuZ2l0IHByb2plY3QsIGluCisgICBwcmVwYXJhdGlvbiBmb3IgaXRzIGkxOG4uCisKKyAqIHByb2dyZXNzIGRpc3BsYXlzIGZyb20gbWFueSBjb21tYW5kcyBhcmUgYSBsb3QgbmljZXIgdG8gdGhlIGV5ZS4KKyAgIFRyYW5zZmVyIGNvbW1hbmRzIHNob3cgdGhyb3VnaHB1dCBkYXRhLgorCisgKiBtYW55IGNvbW1hbmRzIHRoYXQgcGF5IGF0dGVudGlvbiB0byBwZXItZGlyZWN0b3J5IC5naXRpZ25vcmUgbm93IGRvCisgICBzbyBsYXppbHksIHdoaWNoIG1ha2VzIHRoZSB1c3VhbCBjYXNlIGdvIG11Y2ggZmFzdGVyLgorCisgKiBPdXRwdXQgcHJvY2Vzc2luZyBmb3IgJy0tcHJldHR5PWZvcm1hdDo8dXNlciBmb3JtYXQ+JyBoYXMgYmVlbgorICAgb3B0aW1pemVkLgorCisgKiBSZW5hbWUgZGV0ZWN0aW9uIG9mIGRpZmYgZmFtaWx5IHdoaWxlIGRldGVjdGluZyBleGFjdCBtYXRjaGVzIGhhcworICAgYmVlbiBncmVhdGx5IG9wdGltaXplZC4KKworICogUmVuYW1lIGRldGVjdGlvbiBvZiBkaWZmIGZhbWlseSB0cmllcyB0byBtYWtlIG1vcmUgbmF0dXJhbCBsb29raW5nCisgICBwYWlyaW5nLiAgRWFybGllciwgaWYgbXVsdGlwbGUgaWRlbnRpY2FsIHJlbmFtZSBzb3VyY2VzIHdlcmUKKyAgIGZvdW5kIGluIHRoZSBwcmVpbWFnZSwgdGhlIHNvdXJjZSB1c2VkIHdhcyBwaWNrZWQgcHJldHR5IG11Y2ggYXQgcmFuZG9tLgorCisgKiBWYWx1ZSAidHJ1ZSIgZm9yIGNvbG9yLmRpZmYgYW5kIGNvbG9yLnN0YXR1cyBjb25maWd1cmF0aW9uIHVzZWQgdG8KKyAgIG1lYW4gImFsd2F5cyIgKGV2ZW4gd2hlbiB0aGUgb3V0cHV0IGlzIG5vdCBnb2luZyB0byBhIHRlcm1pbmFsKS4KKyAgIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIHRvIG1lYW4gdGhlIHNhbWUgdGhpbmcgYXMgImF1dG8iLgorCisgKiAiZ2l0IGRpZmYiIFBvcmNlbGFpbiBub3cgcmVzcGVjdHMgZGlmZi5leHRlcm5hbCBjb25maWd1cmF0aW9uLCB3aGljaAorICAgaXMgYW5vdGhlciB3YXkgdG8gc3BlY2lmeSBHSVRfRVhURVJOQUxfRElGRi4KKworICogImdpdCBkaWZmIiBjYW4gYmUgdG9sZCB0byB1c2UgZGlmZmVyZW50IHByZWZpeGVzIG90aGVyIHRoYW4KKyAgICJhLyIgYW5kICJiLyIgZS5nLiAiZ2l0IGRpZmYgLS1zcmMtcHJlZml4PWwvIC0tZHN0LXByZWZpeD1rLyIuCisKKyAqICJnaXQgZGlmZiIgc29tZXRpbWVzIGRpZCBub3QgcXVvdGUgcGF0aHMgd2l0aCBmdW5ueQorICAgY2hhcmFjdGVycyBwcm9wZXJseS4KKworICogImdpdCBsb2ciIChhbmQgYW55IHJldmlzaW9uIHRyYXZlcnNhbCBjb21tYW5kcykgbWlzYmVoYXZlZAorICAgd2hlbiAtLWRpZmYtZmlsdGVyIGlzIGdpdmVuIGJ1dCB3YXMgbm90IGFza2VkIHRvIGFjdHVhbGx5CisgICBwcm9kdWNlIGRpZmYuCisKKyAqIEhUVFAgcHJveHkgY2FuIGJlIHNwZWNpZmllZCBwZXIgcmVtb3RlIHJlcG9zaXRvcnkgdXNpbmcKKyAgIHJlbW90ZS4qLmh0dHBwcm94eSBjb25maWd1cmF0aW9uLCBvciBnbG9iYWwgaHR0cC5wcm94eSBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZS4KKworICogVmFyaW91cyBQZXJmb3JjZSBpbXBvcnRlciB1cGRhdGVzLgorCisgKiBFeGFtcGxlIHVwZGF0ZSBhbmQgcG9zdC1yZWNlaXZlIGhvb2tzIGhhdmUgYmVlbiBpbXByb3ZlZC4KKworICogQW55IGNvbW1hbmQgdGhhdCB3YW50cyB0byB0YWtlIGEgY29tbWl0IG9iamVjdCBuYW1lIGNhbiBub3cgdXNlCisgICAiOi9zdHJpbmciIHN5bnRheCB0byBuYW1lIGEgY29tbWl0LgorCisgKiAiZ2l0IHJlc2V0IiBpcyBub3cgYnVpbHQtaW4gYW5kIGl0cyBvdXRwdXQgY2FuIGJlIHNxdWVsY2hlZCB3aXRoIC1xLgorCisgKiAiZ2l0IHJlc2V0IC0taGFyZCIgZG9lcyBub3QgbWFrZSBhbnkgc2Vuc2UgaW4gYSBiYXJlCisgICByZXBvc2l0b3J5LCBidXQgZGlkIG5vdCBlcnJvciBvdXQ7IGZpeGVkLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGNhbiBvcHRpb25hbGx5IHRhbGsgb3ZlciBzc210cCBhbmQgdXNlIFNNVFAtQVVUSC4KKworICogImdpdCByZWJhc2UiIGxlYXJuZWQgLS13aGl0ZXNwYWNlIG9wdGlvbi4KKworICogSW4gImdpdCByZWJhc2UiLCB3aGVuIHlvdSBkZWNpZGUgbm90IHRvIHJlcGxheSBhIHBhcnRpY3VsYXIgY2hhbmdlCisgICBhZnRlciB0aGUgY29tbWFuZCBzdG9wcGVkIHdpdGggYSBjb25mbGljdCwgeW91IGNhbiBzYXkgImdpdCByZWJhc2UKKyAgIC0tc2tpcCIgd2l0aG91dCBmaXJzdCBydW5uaW5nICJnaXQgcmVzZXQgLS1oYXJkIiwgYXMgdGhlIGNvbW1hbmQgbm93CisgICBydW5zIGl0IGZvciB5b3UuCisKKyAqICJnaXQgcmViYXNlIC0taW50ZXJhY3RpdmUiIG1vZGUgY2FuIG5vdyB3b3JrIG9uIGRldGFjaGVkIEhFQUQuCisKKyAqIE90aGVyIG1pbm9yIHRvIHNlcmlvdXMgYnVncyBpbiAiZ2l0IHJlYmFzZSAtaSIgaGF2ZSBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IHJlYmFzZSIgbm93IGRldGFjaGVzIGhlYWQgZHVyaW5nIGl0cyBvcGVyYXRpb24sIHNvIGFmdGVyIGEKKyAgIHN1Y2Nlc3NmdWwgImdpdCByZWJhc2UiIG9wZXJhdGlvbiwgdGhlIHJlZmxvZyBlbnRyeSBicmFuY2hAezF9IGZvcgorICAgdGhlIGN1cnJlbnQgYnJhbmNoIHBvaW50cyBhdCB0aGUgY29tbWl0IGJlZm9yZSB0aGUgcmViYXNlIHdhcworICAgc3RhcnRlZC4KKworICogImdpdCByZWJhc2UgLWkiIGFsc28gdHJpZ2dlcnMgcmVyZXJlIHRvIGhlbHAgeW91ciByZXBlYXRlZCBtZXJnZXMuCisKKyAqICJnaXQgbWVyZ2UiIGNhbiBjYWxsIHRoZSAicG9zdC1tZXJnZSIgaG9vay4KKworICogImdpdCBwYWNrLW9iamVjdHMiIGNhbiBvcHRpb25hbGx5IHJ1biBkZWx0aWZpY2F0aW9uIHdpdGggbXVsdGlwbGUKKyAgIHRocmVhZHMuCisKKyAqICJnaXQgYXJjaGl2ZSIgY2FuIG9wdGlvbmFsbHkgc3Vic3RpdHV0ZSBrZXl3b3JkcyBpbiBmaWxlcyBtYXJrZWQgd2l0aAorICAgZXhwb3J0LXN1YnN0IGF0dHJpYnV0ZS4KKworICogImdpdCBjaGVycnktcGljayIgbWFkZSBhIG1pc2d1aWRlZCBhdHRlbXB0IHRvIHJlcGVhdCB0aGUgb3JpZ2luYWwKKyAgIGNvbW1hbmQgbGluZSBpbiB0aGUgZ2VuZXJhdGVkIGxvZyBtZXNzYWdlLCB3aGVuIHRvbGQgdG8gY2hlcnJ5LXBpY2sgYQorICAgY29tbWl0IGJ5IG5hbWluZyBhIHRhZyB0aGF0IHBvaW50cyBhdCBpdC4gIEl0IGRvZXMgbm90IGFueW1vcmUuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiBsZWFybmVkICUoeHh4ZGF0ZTo8ZGF0ZS1mb3JtYXQ+KSBzeW50YXggdG8gc2hvdyB0aGUKKyAgIHZhcmlvdXMgZGF0ZSBmaWVsZHMgaW4gZGlmZmVyZW50IGZvcm1hdHMuCisKKyAqICJnaXQgZ2MgLS1hdXRvIiBpcyBhIGxvdy1pbXBhY3Qgd2F5IHRvIGF1dG9tYXRpY2FsbHkgcnVuIGEgdmFyaWFudCBvZgorICAgImdpdCByZXBhY2siIHRoYXQgZG9lcyBub3QgbG9zZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyAocmVhZDogc2FmZXIKKyAgIHRoYW4gdGhlIHVzdWFsIG9uZSkgYWZ0ZXIgdGhlIHVzZXIgYWNjdW11bGF0ZXMgdG9vIG1hbnkgbG9vc2UKKyAgIG9iamVjdHMuCisKKyAqICJnaXQgY2xlYW4iIGhhcyBiZWVuIHJld3JpdHRlbiBpbiBDLgorCisgKiBZb3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBjbGVhbi5yZXF1aXJlRm9yY2UgdG8gImZhbHNlIiB0byBhbGxvdworICAgImdpdCBjbGVhbiIgd2l0aG91dCAtZiB0byBkbyBhbnkgZGFtYWdlIChsYWNrIG9mIHRoZSBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSB1c2VkIHRvIG1lYW4gImRvIG5vdCByZXF1aXJlIC1mIG9wdGlvbiB0byBsb3NlIHVudHJhY2tlZAorICAgZmlsZXMiLCBidXQgd2Ugbm93IHVzZSB0aGUgc2FmZXIgZGVmYXVsdCkuCisKKyAqIFRoZSBraW5kcyBvZiB3aGl0ZXNwYWNlIGVycm9ycyAiZ2l0IGRpZmYiIGFuZCAiZ2l0IGFwcGx5IiBub3RpY2UgKGFuZAorICAgZml4KSBjYW4gYmUgY29udHJvbGxlZCB2aWEgJ2NvcmUud2hpdGVzcGFjZScgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICAgYW5kICd3aGl0ZXNwYWNlJyBhdHRyaWJ1dGUgaW4gLmdpdGF0dHJpYnV0ZXMgZmlsZS4KKworICogImdpdCBwdXNoIiBsZWFybmVkIC0tZHJ5LXJ1biBvcHRpb24gdG8gc2hvdyB3aGF0IHdvdWxkIGhhcHBlbiBpZiBhCisgICBwdXNoIGlzIHJ1bi4KKworICogImdpdCBwdXNoIiBkb2VzIG5vdCB1cGRhdGUgYSB0cmFja2luZyByZWYgb24gdGhlIGxvY2FsIHNpZGUgd2hlbiB0aGUKKyAgIHJlbW90ZSByZWZ1c2VkIHRvIHVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyByZWYuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCAtLW1pcnJvciBvcHRpb24uICBUaGlzIGlzIHRvIHB1c2ggdGhlIGxvY2FsIHJlZnMKKyAgIG9uZS10by1vbmUgdG8gdGhlIHJlbW90ZSwgYW5kIGRlbGV0ZXMgcmVmcyBmcm9tIHRoZSByZW1vdGUgdGhhdCBkbworICAgbm90IGV4aXN0IGFueW1vcmUgaW4gdGhlIHJlcG9zaXRvcnkgb24gdGhlIHB1c2hpbmcgc2lkZS4KKworICogImdpdCBwdXNoIiBjYW4gcmVtb3ZlIGEgY29ycnVwdCByZWYgYXQgdGhlIHJlbW90ZSBzaXRlIHdpdGggdGhlIHVzdWFsCisgICAiOnJlZiIgcmVmc3BlYy4KKworICogImdpdCByZW1vdGUiIGtub3dzIC0tbWlycm9yIG1vZGUuICBUaGlzIGlzIHRvIHNldCB1cCBjb25maWd1cmF0aW9uIHRvCisgICBwdXNoIGludG8gYSByZW1vdGUgcmVwb3NpdG9yeSB0byBzdG9yZSBsb2NhbCBicmFuY2ggaGVhZHMgdG8gdGhlIHNhbWUKKyAgIGJyYW5jaCBvbiB0aGUgcmVtb3RlIHNpZGUsIGFuZCByZW1vdmUgYnJhbmNoIGhlYWRzIGxvY2FsbHkgcmVtb3ZlZAorICAgZnJvbSBsb2NhbCByZXBvc2l0b3J5IGF0IHRoZSBzYW1lIHRpbWUuICBTdWl0YWJsZSBmb3IgcHVzaGluZyBpbnRvIGEKKyAgIGJhY2stdXAgcmVwb3NpdG9yeS4KKworICogImdpdCByZW1vdGUiIGxlYXJuZWQgInJtIiBzdWJjb21tYW5kLgorCisgKiAiZ2l0IGN2c3NlcnZlciIgY2FuIGJlIHJ1biB2aWEgImdpdCBzaGVsbCIuICBBbHNvLCAiY3ZzIiBpcworICAgcmVjb2duaXplZCBhcyBhIHN5bm9ueW0gZm9yICJnaXQgY3Zzc2VydmVyIiwgc28gdGhhdCBDVlMgdXNlcnMKKyAgIGNhbiBiZSBzd2l0Y2hlZCB0byBnaXQganVzdCBieSBjaGFuZ2luZyB0aGVpciBsb2dpbiBzaGVsbC4KKworICogImdpdCBjdnNzZXJ2ZXIiIGFjdHMgbW9yZSBsaWtlIHJlY2VpdmUtcGFjayBieSBydW5uaW5nIHBvc3QtcmVjZWl2ZQorICAgYW5kIHBvc3QtdXBkYXRlIGhvb2tzLgorCisgKiAiZ2l0IGFtIiBhbmQgImdpdCByZWJhc2UiIGFyZSBmYXIgbGVzcyB2ZXJib3NlLgorCisgKiAiZ2l0IHB1bGwiIGxlYXJuZWQgdG8gcGFzcyAtLVtuby1dZmYgb3B0aW9uIHRvIHVuZGVybHlpbmcgImdpdAorICAgbWVyZ2UiLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIGlzIGEgZGlmZmVyZW50IHdheSB0byBpbnRlZ3JhdGUgd2hhdCB5b3UgZmV0Y2hlZAorICAgaW50byB5b3VyIGN1cnJlbnQgYnJhbmNoLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBwcm9kdWNlcyBkYXRhLXN0cmVhbSB0aGF0IGNhbiBiZSBmZWQgdG8gZmFzdC1pbXBvcnQKKyAgIHRvIHJlcHJvZHVjZSB0aGUgaGlzdG9yeSByZWNvcmRlZCBpbiBhIGdpdCByZXBvc2l0b3J5LgorCisgKiAiZ2l0IGFkZCAtaSIgdGFrZXMgcGF0aHNwZWNzIHRvIGxpbWl0IHRoZSBzZXQgb2YgZmlsZXMgdG8gd29yayBvbi4KKworICogImdpdCBhZGQgLXAiIGlzIGEgc2hvcnQtaGFuZCB0byBnbyBkaXJlY3RseSB0byB0aGUgc2VsZWN0aXZlIHBhdGNoCisgICBzdWJjb21tYW5kIGluIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5kIGxvb3AgYW5kIHRvIGV4aXQgd2hlbiBkb25lLgorCisgKiAiZ2l0IGFkZCAtaSIgVUkgaGFzIGJlZW4gY29sb3JpemVkLiAgVGhlIGludGVyYWN0aXZlIHByb21wdAorICAgYW5kIG1lbnUgY2FuIGJlIGNvbG9yZWQgYnkgc2V0dGluZyBjb2xvci5pbnRlcmFjdGl2ZQorICAgY29uZmlndXJhdGlvbi4gIFRoZSBkaWZmIG91dHB1dCAoaW5jbHVkaW5nIHRoZSBodW5rIHBpY2tlcikKKyAgIGFyZSBjb2xvcmVkIHdpdGggY29sb3IuZGlmZiBjb25maWd1cmF0aW9uLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IiBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIHNpbmdsZS1wYXJlbnQKKyAgIGNvbW1pdCB0aGF0IHJlY29yZHMgdGhlIHNhbWUgdHJlZSBhcyBpdHMgcGFyZW50LCBvdmVycmlkaW5nIHRoZSB1c3VhbAorICAgc2FmZXR5IHZhbHZlLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIiBjYW4gYW1lbmQgYSBtZXJnZSB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgdHJlZQorICAgZnJvbSBpdHMgZmlyc3QgcGFyZW50LgorCisgKiAiZ2l0IGNvbW1pdCIgdXNlZCB0byB1bmNvbmRpdGlvbmFsbHkgc3RyaXAgY29tbWVudCBsaW5lcyB0aGF0CisgICBiZWdhbiB3aXRoICcjJyBhbmQgcmVtb3ZlZCBleGNlc3MgYmxhbmsgbGluZXMuICBUaGlzIGJlaGF2aW9yIGhhcworICAgYmVlbiBtYWRlIGNvbmZpZ3VyYWJsZS4KKworICogImdpdCBjb21taXQiIGhhcyBiZWVuIHJld3JpdHRlbiBpbiBDLgorCisgKiAiZ2l0IHN0YXNoIHJhbmRvbS10ZXh0IiBkb2VzIG5vdCBjcmVhdGUgYSBuZXcgc3Rhc2ggYW55bW9yZS4gIEl0IHdhcworICAgYSBVSSBtaXN0YWtlLiAgVXNlICJnaXQgc3Rhc2ggc2F2ZSByYW5kb20tdGV4dCIsIG9yICJnaXQgc3Rhc2giCisgICAod2l0aG91dCBleHRyYSBhcmdzKSBmb3IgdGhhdC4KKworICogImdpdCBzdGFzaCBjbGVhciBleHRyYS10ZXh0IiBkb2VzIG5vdCBjbGVhciB0aGUgd2hvbGUgc3Rhc2gKKyAgIGFueW1vcmUuICBJdCBpcyB0ZW1wdGluZyB0byBleHBlY3QgImdpdCBzdGFzaCBjbGVhciBzdGFzaEB7Mn0iCisgICB0byBkcm9wIG9ubHkgYSBzaW5nbGUgbmFtZWQgc3Rhc2ggZW50cnksIGFuZCBpdCBpcyBydWRlIHRvCisgICBkaXNjYXJkIGV2ZXJ5dGhpbmcgd2hlbiB0aGF0IGlzIGFza2VkIChidXQgbm90IHByb3ZpZGVkKS4KKworICogImdpdCBwcnVuZSAtLWV4cGlyZSA8dGltZT4iIGNhbiBleGVtcHQgeW91bmcgbG9vc2Ugb2JqZWN0cyBmcm9tCisgICBnZXR0aW5nIHBydW5lZC4KKworICogImdpdCBicmFuY2ggLS1jb250YWlucyA8Y29tbWl0PiIgY2FuIGxpc3QgYnJhbmNoZXMgdGhhdCBhcmUKKyAgIGRlc2NlbmRhbnRzIG9mIGEgZ2l2ZW4gY29tbWl0LgorCisgKiAiZ2l0IGxvZyIgbGVhcm5lZCAtLWVhcmx5LW91dHB1dCBvcHRpb24gdG8gaGVscCBpbnRlcmFjdGl2ZSBHVUkKKyAgIGltcGxlbWVudGF0aW9ucy4KKworICogImdpdCBiaXNlY3QiIGxlYXJuZWQgInNraXAiIGFjdGlvbiB0byBtYXJrIHVudGVzdGFibGUgY29tbWl0cy4KKworICogImdpdCBiaXNlY3QgdmlzdWFsaXplIiBsZWFybmVkIGEgc2hvcnRlciBzeW5vbnltICJnaXQgYmlzZWN0IHZpZXciLgorCisgKiAiZ2l0IGJpc2VjdCB2aXN1YWxpemUiIHJ1bnMgImdpdCBsb2ciIGluIGEgbm9uLXdpbmRvd2VkCisgICBlbnZpcm9ubWVudHMuICBJdCBhbHNvIGNhbiBiZSB0b2xkIHdoYXQgY29tbWFuZCB0byBydW4gKGUuZy4gImdpdAorICAgYmlzZWN0IHZpc3VhbGl6ZSB0aWciKS4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgImZvcm1hdC5udW1iZXJlZCIgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICAgdG8gYXV0b21hdGljYWxseSB0dXJuIC0tbnVtYmVyZWQgb3B0aW9uIG9uIHdoZW4gbW9yZSB0aGFuIG9uZSBjb21taXRzCisgICBhcmUgZm9ybWF0dGVkLgorCisgKiAiZ2l0IGxzLWZpbGVzIiBsZWFybmVkICItLWV4Y2x1ZGUtc3RhbmRhcmQiIHRvIHVzZSB0aGUgY2FubmVkIHNldCBvZgorICAgZXhjbHVkZSBmaWxlcy4KKworICogImdpdCB0YWcgLWEgLWYgZXhpc3RpbmciIGJlZ2lucyB0aGUgZWRpdG9yIHNlc3Npb24gdXNpbmcgdGhlIGV4aXN0aW5nCisgICBhbm5vdGF0aW9uIG1lc3NhZ2UuCisKKyAqICJnaXQgdGFnIC1tIG9uZSAtbSBiYXIiIChtdWx0aXBsZSAtbSBvcHRpb25zKSBiZWhhdmVzIHNpbWlsYXJseSB0bworICAgImdpdCBjb21taXQiOyB0aGUgcGFyYW1ldGVycyB0byAtbSBvcHRpb25zIGFyZSBmb3JtYXR0ZWQgYXMgc2VwYXJhdGUKKyAgIHBhcmFncmFwaHMuCisKKyAqIFRoZSBmb3JtYXQgImdpdCBzaG93IiBvdXRwdXRzIGFuIGFubm90YXRlZCB0YWcgaGFzIGJlZW4gdXBkYXRlZCB0bworICAgaW5jbHVkZSAiVGFnZ2VyOiAiIGFuZCAiRGF0ZTogIiBsaW5lcyBmcm9tIHRoZSB0YWcgaXRzZWxmLiAgU3RyaWN0bHkKKyAgIHNwZWFraW5nIHRoaXMgaXMgYSBiYWNrd2FyZCBpbmNvbXBhdGlibGUgY2hhbmdlLCBidXQgdGhpcyBpcyBhCisgICByZWFzb25hYmxlIHVzYWJpbGl0eSBmaXggYW5kIHBlb3BsZSdzIHNjcmlwdHMgc2hvdWxkbid0IGhhdmUgYmVlbgorICAgcmVseWluZyBvbiB0aGUgZXhhY3Qgb3V0cHV0IGZyb20gImdpdCBzaG93IiBQb3JjZWxhaW4gYW55d2F5LgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgZGlkIG5vdCBub3RpY2UgZXJyb3JzIGZyb20gdW5kZXJseWluZyAiY3ZzcHMiCisgICBhbmQgcHJvZHVjZWQgYSBjb3JydXB0IGltcG9ydCBzaWxlbnRseS4KKworICogImdpdCBjdnNleHBvcnRjb21taXQiIGxlYXJuZWQgLXcgb3B0aW9uIHRvIHNwZWNpZnkgYW5kIHN3aXRjaCB0byB0aGUKKyAgIENWUyB3b3JraW5nIGRpcmVjdG9yeS4KKworICogImdpdCBjaGVja291dCIgZnJvbSBhIHN1YmRpcmVjdG9yeSBsZWFybmVkIHRvIHVzZSAiLi4vcGF0aCIgdG8gYWxsb3cKKyAgIGNoZWNraW5nIG91dCBhIHBhdGggb3V0c2lkZSB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2l0aG91dCBjZCdpbmcgdXAuCisKKyAqICJnaXQgY2hlY2tvdXQiIGZyb20gYW5kIHRvIGRldGFjaGVkIEhFQUQgbGVhdmVzIGEgYml0IG1vcmUKKyAgIGluZm9ybWF0aW9uIGluIHRoZSByZWZsb2cuCisKKyAqICJnaXQgc2VuZC1lbWFpbCAtLWRyeS1ydW4iIHNob3dzIGZ1bGwgaGVhZGVycyBmb3IgZWFzaWVyIGRpYWdub3Npcy4KKworICogImdpdCBtZXJnZS1vdXJzIiBpcyBub3cgYnVpbHQtaW4uCisKKyAqICJnaXQgc3ZuIiBsZWFybmVkICJpbmZvIiBhbmQgInNob3ctZXh0ZXJuYWxzIiBzdWJjb21tYW5kcy4KKworICogImdpdCBzdm4iIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5IGZhaWxlZCB0byByZWFkIHNldHRpbmdzIGZyb20gdGhlCisgICAuZ2l0L2NvbmZpZy4KKworICogImdpdCBzdm4iIGxlYXJuZWQgLS11c2UtbG9nLWF1dGhvciBvcHRpb24sIHdoaWNoIHBpY2tzIHVwIG1vcmUKKyAgIGRlc2NyaXB0aXZlIG5hbWUgZnJvbSBGcm9tOiBhbmQgU2lnbmVkLW9mZi1ieTogbGluZXMgaW4gdGhlIGNvbW1pdAorICAgbWVzc2FnZS4KKworICogImdpdCBzdm4iIHdhc3RlZCB3YXkgdG9vIG11Y2ggZGlzayB0byByZWNvcmQgcmV2aXNpb24gbWFwcGluZ3MKKyAgIGJldHdlZW4gc3ZuIGFuZCBnaXQ7IGEgbmV3IHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgbXVjaCBtb3JlIGNvbXBhY3QKKyAgIGZvciB0aGlzIGluZm9ybWF0aW9uIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gY29ycmVjdCB0aGlzLgorCisgKiAiZ2l0IHN2biIgbGVmdCB0ZW1wb3JhcnkgaW5kZXggZmlsZXMgaXQgdXNlZCB3aXRob3V0IGNsZWFuaW5nIHRoZW0KKyAgIHVwOyB0aGlzIHdhcyBjb3JyZWN0ZWQuCisKKyAqICJnaXQgc3RhdHVzIiBmcm9tIGEgc3ViZGlyZWN0b3J5IG5vdyBzaG93cyByZWxhdGl2ZSBwYXRocywgd2hpY2gKKyAgIG1ha2VzIGNvcHktYW5kLXBhc3RpbmcgZm9yIGdpdC1jaGVja291dC9naXQtYWRkL2dpdC1ybSBlYXNpZXIuICBUaGUKKyAgIHRyYWRpdGlvbmFsIGJlaGF2aW9yIHRvIHNob3cgdGhlIGZ1bGwgcGF0aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mCisgICB0aGUgd29yayB0cmVlIGNhbiBiZSBoYWQgYnkgc2V0dGluZyBzdGF0dXMucmVsYXRpdmVwYXRocworICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBmYWxzZS4KKworICogImdpdCBibGFtZSIga2VwdCB0ZXh0IGZvciBlYWNoIGFubm90YXRlZCByZXZpc2lvbiBpbiBjb3JlIG5lZWRsZXNzbHk7CisgICB0aGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBzaG9ydGxvZyIgbGVhcm5lZCB0byBkZWZhdWx0IHRvIEhFQUQgd2hlbiB0aGUgc3RhbmRhcmQgaW5wdXQgaXMKKyAgIGEgdGVybWluYWwgYW5kIHRoZSB1c2VyIGRpZCBub3QgZ2l2ZSBhbnkgcmV2aXNpb24gcGFyYW1ldGVyLgorCisgKiAiZ2l0IHNob3J0bG9nIiBsZWFybmVkICItZSIgb3B0aW9uIHRvIHNob3cgZS1tYWlsIGFkZHJlc3NlcyBhcyB3ZWxsIGFzCisgICBhdXRob3JzJyBuYW1lcy4KKworICogImdpdCBoZWxwIiBsZWFybmVkICItdyIgb3B0aW9uIHRvIHNob3cgZG9jdW1lbnRhdGlvbiBpbiBicm93c2Vycy4KKworICogSW4gYWRkaXRpb24gdGhlcmUgYXJlIHF1aXRlIGEgZmV3IGludGVybmFsIGNsZWFuLXVwcy4gTm90YWJseToKKworICAgLSBtYW55IGZvcmsvZXhlYyBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBydW4tY29tbWFuZCBBUEksCisgICAgIGJyb3VnaHQgZnJvbSB0aGUgbXN5c2dpdCBlZmZvcnQuCisKKyAgIC0gaW50cm9kdWN0aW9uIGFuZCBtb3JlIHVzZSBvZiB0aGUgb3B0aW9uIHBhcnNlciBBUEkuCisKKyAgIC0gZW5oYW5jZW1lbnQgYW5kIG1vcmUgdXNlIG9mIHRoZSBzdHJidWYgQVBJLgorCisgKiBNYWtlZmlsZSB0d2Vha3MgdG8gc3VwcG9ydCBIUC1VWCBpcyBpbi4KKworRml4ZXMgc2luY2UgdjEuNS4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS41LjMgbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbgordGhpcyByZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitUaGVzZSBmaXhlcyBhcmUgb25seSBpbiB2MS41LjQgYW5kIG5vdCBiYWNrcG9ydGVkIHRvIHYxLjUuMyBtYWludGVuYW5jZQorc2VyaWVzLgorCisgKiBUaGUgd2F5ICJnaXQgZGlmZiAtLWNoZWNrIiBiZWhhdmVzIGlzIG11Y2ggbW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIHdheQorICAgImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9d2FybiIgd29ya3MuCisKKyAqICJnaXQgc3ZuIiB0YWxraW5nIHdpdGggdGhlIFNWTiBvdmVyIEhUVFAgd2lsbCBjb3JyZWN0bHkgcXVvdGUgYnJhbmNoCisgICBhbmQgcHJvamVjdCBuYW1lcy4KKworICogImdpdCBjb25maWciIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgb24gcGxhdGZvcm1zIHRoYXQgZGVmaW5lCisgICBSRUdfTk9NQVRDSCB0byBhbiBldmVuIG51bWJlci4KKworICogUmVjZW50IHZlcnNpb25zIG9mIEFzY2lpRG9jIDggaGFzIGEgY2hhbmdlIHRvIGJyZWFrIG91cgorICAgZG9jdW1lbnRhdGlvbjsgYSB3b3JrYXJvdW5kIGhhcyBiZWVuIGltcGxlbWVudGVkLgorCisgKiAiZ2l0IGRpZmYgLS1jb2xvci13b3JkcyIgY29sb3JlZCBjb250ZXh0IGxpbmVzIGluIGEgd3JvbmcgY29sb3IuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGU0MTk3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4xLnR4dApAQCAtMCwwICsxLDQ0IEBACitHSVQgdjEuNS41LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS41CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcmNoaXZlIC0tcHJlZml4PSRwYXRoLyIgbWlzaGFuZGxlZCBnaXRhdHRyaWJ1dGVzLgorCisgKiAiZ2l0IGZldGNoIC12IiB0aGF0IGZldGNoZXMgaW50byBGRVRDSF9IRUFEIGRpZCBub3QgcmVwb3J0IHRoZSBzdW1tYXJ5CisgICB0aGUgc2FtZSB3YXkgYXMgZG9uZSBmb3IgdXBkYXRpbmcgdGhlIHRyYWNraW5nIHJlZnMuCisKKyAqICJnaXQgc3ZuIiBtaXNiZWhhdmVkIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjdXN0b21pemVkIHRoZSAiZ2l0CisgICBsb2ciIG91dHB1dCBmb3JtYXQgdXNpbmcgZm9ybWF0LnByZXR0eS4KKworICogImdpdCBzdWJtb2R1bGUgc3RhdHVzIiBsZWFrZWQgYW4gdW5uZWNlc3NhcnkgZXJyb3IgbWVzc2FnZS4KKworICogImdpdCBsb2cgLS1kYXRlLW9yZGVyIC0tdG9wby1vcmRlciIgZGlkIG5vdCBvdmVycmlkZSB0aGUgZWFybGllcgorICAgZGF0ZS1vcmRlciB3aXRoIHRvcG8tb3JkZXIgYXMgZXhwZWN0ZWQuCisKKyAqICJnaXQgYmlzZWN0IGdvb2QgJHRoaXMiIGRpZCBub3QgY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSByZXZpc2lvbgorICAgZ2l2ZW4gcHJvcGVybHkuCisKKyAqICJ1cmwuPHRoZXJlPi5pbnN0ZWFkT2YiIGRpZCBub3Qgd29yayBjb3JyZWN0bHkuCisKKyAqICJnaXQgY2xlYW4iIHJhbiBpbnNpZGUgc3ViZGlyZWN0b3J5IGJlaGF2ZWQgYXMgaWYgdGhlIGRpcmVjdG9yeSB3YXMKKyAgIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGZvciByZW1vdmFsIGJ5IHRoZSBlbmQgdXNlciBmcm9tIHRoZSB0b3AgbGV2ZWwuCisKKyAqICJnaXQgYmlzZWN0IiBmcm9tIGEgZGV0YWNoZWQgaGVhZCBsZWFrZWQgYW4gdW5uZWNlc3NhcnkgZXJyb3IgbWVzc2FnZS4KKworICogImdpdCBiaXNlY3QgZ29vZCAkYSAkYiIgd2hlbiAkYSBpcyBPayBidXQgJGIgaXMgYm9ndXMgc2hvdWxkIGhhdmUKKyAgIGF0b21pY2FsbHkgZmFpbGVkIGJlZm9yZSBtYXJraW5nICRhIGFzIGdvb2QuCisKKyAqICJnaXQgZm10LW1lcmdlLW1zZyIgZGlkIG5vdCBjbGVhbiB1cCBsZWFkaW5nIGVtcHR5IGxpbmVzIGZyb20gY29tbWl0CisgICBsb2cgbWVzc2FnZXMgbGlrZSAiZ2l0IGxvZyIgZmFtaWx5IGRvZXMuCisKKyAqICJnaXQgYW0iIHJlY29yZGVkIGEgY29tbWl0IHdpdGggZW1wdHkgU3ViamVjdDogbGluZSB3aXRob3V0CisgICBjb21wbGFpbmluZy4KKworICogd2hlbiBnaXZlbiBhIGNvbW1pdCBsb2cgbWVzc2FnZSB3aG9zZSBmaXJzdCBwYXJhZ3JhcGggY29uc2lzdHMgb2YKKyAgIG11bHRpcGxlIGxpbmVzLCAiZ2l0IHJlYmFzZSIgc3F1YXNoZWQgaXQgaW50byBhIHNpbmdsZSBsaW5lLgorCisgKiAiZ2l0IHJlbW90ZSBhZGQgJGJvZ3VzX25hbWUgJHVybCIgZGlkIG5vdCBjb21wbGFpbiBwcm9wZXJseS4KKworQWxzbyBjb21lcyB3aXRoIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkxYTdiMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMi50eHQKQEAgLTAsMCArMSwyNyBAQAorR0lUIHYxLjUuNS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHJlcGFjayAtbiIgd2FzIG1pc3Rha2VubHkgbWFkZSBuby1vcCBlYXJsaWVyLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgd2FudGVkIHRvIGFsd2F5cyBoYXZlIGltYXAuaG9zdCBldmVuIHdoZW4gdXNlIG9mCisgICBpbWFwLnR1bm5lbCBtYWRlIGl0IHVubmVjZXNzYXJ5LgorCisgKiByZWZsb2cgc3ludGF4IHRoYXQgdXNlcyB0aW1lIGUuZy4gIkhFQURAezEwIHNlY29uZHMgYWdvfTpwYXRoIiBkaWQgbm90CisgICBzdG9wIHBhcnNpbmcgYXQgdGhlIGNsb3NpbmcgIn0iLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBebWFzdGVyXjIiIHByaW50ZWQgc29saXRhcnkgIl4iLAorICAgYnV0IGl0IHNob3VsZCBwcmludCBub3RoaW5nLgorCisgKiAiZ2l0IGNvbW1pdCIgZGlkIG5vdCBkZXRlY3Qgd2hlbiBpdCBmYWlsZWQgdG8gd3JpdGUgdHJlZSBvYmplY3RzLgorCisgKiAiZ2l0IGZldGNoIiBzb21ldGltZXMgdHJhbnNmZXJyZWQgdG9vIG1hbnkgb2JqZWN0cyB1bm5lY2Vzc2FyaWx5LgorCisgKiBhIHBhdGggc3BlY2lmaWNhdGlvbiAiYS9iIiBpbiAuZ2l0YXR0cmlidXRlcyBmaWxlIHNob3VsZCBub3QgbWF0Y2gKKyAgICJzdWIvYS9iIi4KKworICogdmFyaW91cyBnaXR3ZWIgZml4ZXMuCisKK0Fsc28gY29tZXMgd2l0aCB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMmY5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjMudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dJVCB2MS41LjUuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBzZW5kLWVtYWlsIC0tY29tcG9zZSIgZGlkIG5vdCBub3RpY2UgdGhhdCBub24tYXNjaWkgY29udGVudHMKKyAgIG5lZWRlZCBzb21lIE1JTUUgbWFnaWMuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGRpZCBub3QgZXhwb3J0IG9jdG9wdXMgbWVyZ2VzIGNvcnJlY3RseS4KKworQWxzbyBjb21lcyB3aXRoIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwMjc5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNC50eHQKQEAgLTAsMCArMSw3IEBACitHSVQgdjEuNS41LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgbmFtZS1yZXYgLS1hbGwiIHVzZWQgdG8gc2VnZmF1bHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGZhMzYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS41LnR4dApAQCAtMCwwICsxLDExIEBACitHSVQgdjEuNS41LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSSBwZXJzb25hbGx5IGRvIG5vdCB0aGluayB0aGVyZSBpcyBhbnkgcmVhc29uIGFueWJvZHkgc2hvdWxkIHdhbnQgdG8KK3J1biB2MS41LjUuWCBzZXJpZXMgdGhlc2UgZGF5cywgYmVjYXVzZSAnbWFzdGVyJyB2ZXJzaW9uIGlzIGFsd2F5cworbW9yZSBzdGFibGUgdGhhbiBhbnkgdGFnZ2VkIHJlbGVhc2VkIHZlcnNpb24gb2YgZ2l0LgorCitUaGlzIGlzIHByaW1hcmlseSB0byBmdXR1cmVwcm9vZiAiZ2l0LXNoZWxsIiB0byBhY2NlcHQgcmVxdWVzdHMKK3dpdGhvdXQgYSBkYXNoIGJldHdlZW4gImdpdCIgYW5kIHN1YmNvbW1hbmQgbmFtZSAoZS5nLiAiZ2l0Cit1cGxvYWQtcGFjayIpIHdoaWNoIHRoZSBuZXdlciBjbGllbnQgd2lsbCBzdGFydCB0byBtYWtlIHNvbWV0aW1lIGluCit0aGUgZnV0dXJlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlODVjYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNi50eHQKQEAgLTAsMCArMSwxMCBAQAorR0lUIHYxLjUuNS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIDEuNS41LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogUmVtb3ZlZCBzdXBwb3J0IGZvciBhbiBvYnNvbGV0ZSBnaXR3ZWIgcmVxdWVzdCBVUkksIHdob3NlCisgICBpbXBsZW1lbnRhdGlvbiByYW4gImdpdCBkaWZmIiBQb3JjZWxhaW4sIGluc3RlYWQgb2YgdXNpbmcgcGx1bWJpbmcsCisgICB3aGljaCB3b3VsZCBoYXZlIHJ1biBhbiBleHRlcm5hbCBkaWZmIGNvbW1hbmQgc3BlY2lmaWVkIGluIHRoZQorICAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGFzIHRoZSBnaXR3ZWIgdXNlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzMjIxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUudHh0CkBAIC0wLDAgKzEsMjA3IEBACitHSVQgdjEuNS41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyAqIENvbWVzIHdpdGggZ2l0LWd1aSAwLjEwLjEKKworKHBvcnRhYmlsaXR5KQorCisgKiBXZSBzaG91bGRuJ3QgYXNrIGZvciBCU0QgZ3JvdXAgb3duZXJzaGlwIHNlbWFudGljcyBieSBzZXR0aW5nIGcrcyBiaXQKKyAgIG9uIGRpcmVjdG9yaWVzIG9uIG9sZGVyIEJTRCBzeXN0ZW1zIHRoYXQgcmVmdXNlcyBjaG1vZCgpIGJ5IG5vbiByb290CisgICB1c2Vycy4gIEJTRCBzZW1hbnRpY3MgaXMgdGhlIGRlZmF1bHQgdGhlcmUgYW55d2F5LgorCisgKiBCdW5jaCBvZiBwb3J0YWJpbGl0eSBpbXByb3ZlbWVudCBwYXRjaGVzIGNvbWluZyBmcm9tIGFuIGVmZm9ydCB0byBwb3J0CisgICB0byBTb2xhcmlzIGhhcyBiZWVuIGFwcGxpZWQuCisKKyhwZXJmb3JtYW5jZSkKKworICogT24gcGxhdGZvcm1zIHdpdGggc3Vib3B0aW1hbCBxc29ydCgzKSBpbXBsZW1lbnRhdGlvbiwgdGhlcmUKKyAgIGlzIGFuIG9wdGlvbiB0byB1c2UgbW9yZSByZWFzb25hYmxlIHN1YnN0aXR1dGUgd2Ugc2hpcCB3aXRoCisgICBvdXIgc29mdHdhcmUuCisKKyAqIE5ldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwYWNrLnBhY2tzaXplbGltaXQiIGNhbiBiZSB1c2VkCisgICBpbiBwbGFjZSBvZiBjb21tYW5kIGxpbmUgb3B0aW9uIC0tbWF4LXBhY2stc2l6ZS4KKworICogImdpdCBmZXRjaCIgb3ZlciB0aGUgbmF0aXZlIGdpdCBwcm90b2NvbCB1c2VkIHRvIG1ha2UgYQorICAgY29ubmVjdGlvbiB0byBmaW5kIG91dCB0aGUgc2V0IG9mIGN1cnJlbnQgcmVtb3RlIHJlZnMgYW5kCisgICBhbm90aGVyIHRvIGFjdHVhbGx5IGRvd25sb2FkIHRoZSBwYWNrIGRhdGEuICBXZSBub3cgdXNlIG9ubHkKKyAgIG9uZSBjb25uZWN0aW9uIGZvciB0aGVzZSB0YXNrcy4KKworICogImdpdCBjb21taXQiIGRvZXMgbm90IHJ1biBsc3RhdCgyKSBtb3JlIHRoYW4gbmVjZXNzYXJ5CisgICBhbnltb3JlLgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyAqIEJhc2ggY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIpIGFyZSBhd2FyZSBvZiBtb3JlIGNvbW1hbmRzIGFuZAorICAgb3B0aW9ucy4KKworICogWW91IGNhbiBiZSB3YXJuZWQgd2hlbiBjb3JlLmF1dG9jcmxmIGNvbnZlcnNpb24gaXMgYXBwbGllZCBpbgorICAgc3VjaCBhIHdheSB0aGF0IHJlc3VsdHMgaW4gYW4gaXJyZXZlcnNpYmxlIGNvbnZlcnNpb24uCisKKyAqIEEgY2F0Y2gtYWxsICJjb2xvci51aSIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0bworICAgZW5hYmxlIGNvbG9yaW5nIG9mIGFsbCBjb2xvci1jYXBhYmxlIGNvbW1hbmRzLCBpbnN0ZWFkIG9mCisgICBpbmRpdmlkdWFsIG9uZXMgc3VjaCBhcyAiY29sb3Iuc3RhdHVzIiBhbmQgImNvbG9yLmJyYW5jaCIuCisKKyAqIFRoZSBjb21tYW5kcyByZWZ1c2VkIHRvIHRha2UgYWJzb2x1dGUgcGF0aG5hbWVzIHdoZXJlIHRoZXkKKyAgIHJlcXVpcmUgcGF0aG5hbWVzIHJlbGF0aXZlIHRvIHRoZSB3b3JrIHRyZWUgb3IgdGhlIGN1cnJlbnQKKyAgIHN1YmRpcmVjdG9yeS4gIFRoZXkgbm93IGNhbiB0YWtlIGFic29sdXRlIHBhdGhuYW1lcyBpbiBzdWNoIGEKKyAgIGNhc2UgYXMgbG9uZyBhcyB0aGUgcGF0aG5hbWVzIGRvIG5vdCByZWZlciBvdXRzaWRlIG9mIHRoZQorICAgd29yayB0cmVlLiAgRS5nLiAiZ2l0IGFkZCAkKHB3ZCkvZm9vIiBub3cgd29ya3MuCisKKyAqIEVycm9yIG1lc3NhZ2VzIHVzZWQgdG8gYmUgc2VudCB0byBzdGRlcnIsIG9ubHkgdG8gZ2V0IGhpZGRlbiwKKyAgIHdoZW4gJFBBR0VSIHdhcyBpbiB1c2UuICBUaGV5IG5vdyBhcmUgc2VudCB0byBzdGRvdXQgYWxvbmcKKyAgIHdpdGggdGhlIGNvbW1hbmQgb3V0cHV0IHRvIGJlIHNob3duIGluIHRoZSAkUEFHRVIuCisKKyAqIEEgcGF0dGVybiAiZm9vLyIgaW4gLmdpdGlnbm9yZSBmaWxlIG5vdyBtYXRjaGVzIGEgZGlyZWN0b3J5CisgICAiZm9vIi4gIFBhdHRlcm4gImZvbyIgYWxzbyBtYXRjaGVzIGFzIGJlZm9yZS4KKworICogYmFzaCBjb21wbGV0aW9uJ3MgcHJvbXB0IGhlbHBlciBmdW5jdGlvbiBjYW4gdGFsayBhYm91dAorICAgb3BlcmF0aW9uIGluLXByb2dyZXNzIChlLmcuIG1lcmdlLCByZWJhc2UsIGV0Yy4pLgorCisgKiBDb25maWd1cmF0aW9uIHZhcmlhYmxlcyAidXJsLjx1c2V0aGlzPi5pbnN0ZWFkb2YgPSA8b3RoZXJ1cmw+IiBjYW4gYmUKKyAgIHVzZWQgdG8gdGVsbCAiZ2l0LWZldGNoIiBhbmQgImdpdC1wdXNoIiB0byB1c2UgZGlmZmVyZW50IFVSTCB0aGFuIHdoYXQKKyAgIGlzIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICogImdpdCBhZGQgLWkiIGJlaGF2ZXMgYmV0dGVyIGV2ZW4gYmVmb3JlIHlvdSBtYWtlIGFuIGluaXRpYWwgY29tbWl0LgorCisgKiAiZ2l0IGFtIiByZWZ1c2VkIHRvIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5IHdpdGhvdXQgYSBnb29kIHJlYXNvbi4KKworICogQWZ0ZXIgImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiBmaXhlcyB3aGl0ZXNwYWNlIGVycm9ycyBpbiBhIHBhdGNoLAorICAgYSBsaW5lIGJlZm9yZSB0aGUgZml4IGNhbiBhcHBlYXIgYXMgYSBjb250ZXh0IG9yIHByZWltYWdlIGxpbmUgaW4gYQorICAgbGF0ZXIgcGF0Y2gsIGNhdXNpbmcgdGhlIHBhdGNoIG5vdCB0byBhcHBseS4gIFRoZSBjb21tYW5kIG5vdyBrbm93cyB0bworICAgc2VlIHRocm91Z2ggd2hpdGVzcGFjZSBmaXhlcyBkb25lIHRvIGNvbnRleHQgbGluZXMgdG8gc3VjY2Vzc2Z1bGx5CisgICBhcHBseSBzdWNoIGEgcGF0Y2ggc2VyaWVzLgorCisgKiAiZ2l0IGJyYW5jaCIgKGFuZCAiZ2l0IGNoZWNrb3V0IC1iIikgdG8gYnJhbmNoIGZyb20gYSBsb2NhbCBicmFuY2ggY2FuCisgICBvcHRpb25hbGx5IHNldCAiYnJhbmNoLjxuYW1lPi5tZXJnZSIgdG8gbWFyayB0aGUgbmV3IGJyYW5jaCB0byBidWlsZCBvbgorICAgdGhlIG90aGVyIGxvY2FsIGJyYW5jaCwgd2hlbiAiYnJhbmNoLmF1dG9zZXR1cG1lcmdlIiBpcyBzZXQgdG8KKyAgICJhbHdheXMiLCBvciB3aGVuIHBhc3NpbmcgdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gIi0tdHJhY2siICh0aGlzIG9wdGlvbgorICAgd2FzIGlnbm9yZWQgd2hlbiBicmFuY2hpbmcgZnJvbSBsb2NhbCBicmFuY2hlcykuICBCeSBkZWZhdWx0LCB0aGlzIGRvZXMKKyAgIG5vdCBoYXBwZW4gd2hlbiBicmFuY2hpbmcgZnJvbSBhIGxvY2FsIGJyYW5jaC4KKworICogImdpdCBjaGVja291dCIgdG8gc3dpdGNoIHRvIGEgYnJhbmNoIHRoYXQgaGFzICJicmFuY2guPG5hbWU+Lm1lcmdlIiBzZXQKKyAgIChpLmUuIG1hcmtlZCB0byBidWlsZCBvbiBhbm90aGVyIGJyYW5jaCkgcmVwb3J0cyBob3cgbXVjaCB0aGUgYnJhbmNoCisgICBhbmQgdGhlIG90aGVyIGJyYW5jaCBkaXZlcmdlZC4KKworICogV2hlbiAiZ2l0IGNoZWNrb3V0IiBoYXMgdG8gdXBkYXRlIGEgbG90IG9mIHBhdGhzLCBpdCB1c2VkIHRvIGJlIHNpbGVudAorICAgZm9yIDQgc2Vjb25kcyBiZWZvcmUgaXQgc2hvd2VkIGFueSBwcm9ncmVzcyByZXBvcnQuICBJdCBpcyBub3cgYSBiaXQKKyAgIG1vcmUgaW1wYXRpZW50IGFuZCBzdGFydHMgc2hvd2luZyBwcm9ncmVzcyByZXBvcnQgZWFybHkuCisKKyAqICJnaXQgY29tbWl0IiBsZWFybmVkIGEgbmV3IGhvb2sgInByZXBhcmUtY29tbWl0LW1zZyIgdGhhdCBjYW4KKyAgIGluc3BlY3Qgd2hhdCBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgYW5kIHByZXBhcmUgdGhlIGNvbW1pdAorICAgbG9nIG1lc3NhZ2UgdGVtcGxhdGUgdG8gYmUgZWRpdGVkLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgY2FuIG5vdyB0YWtlIG1vcmUgdGhhbiBvbmUgLU0gb3B0aW9ucy4KKworICogImdpdCBkZXNjcmliZSIgbGVhcm5lZCB0byBsaW1pdCB0aGUgdGFncyB0byBiZSB1c2VkIGZvcgorICAgbmFtaW5nIHdpdGggLS1tYXRjaCBvcHRpb24uCisKKyAqICJnaXQgZGVzY3JpYmUgLS1jb250YWlucyIgbm93IGJhcmZzIHdoZW4gdGhlIG5hbWVkIGNvbW1pdAorICAgY2Fubm90IGJlIGRlc2NyaWJlZC4KKworICogImdpdCBkZXNjcmliZSAtLWV4YWN0LW1hdGNoIiBkZXNjcmliZXMgb25seSBjb21taXRzIHRoYXQgYXJlIHRhZ2dlZC4KKworICogImdpdCBkZXNjcmliZSAtLWxvbmciIGRlc2NyaWJlcyBhIHRhZ2dlZCBjb21taXQgYXMgJHRhZy0wLSRzaGExLAorICAgaW5zdGVhZCBvZiBqdXN0IHNob3dpbmcgdGhlIGV4YWN0IHRhZ25hbWUuCisKKyAqICJnaXQgZGVzY3JpYmUiIHdhcm5zIHdoZW4gdXNpbmcgYSB0YWcgd2hvc2UgbmFtZSBhbmQgcGF0aCBjb250cmFkaWN0CisgICB3aXRoIGVhY2ggb3RoZXIuCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCAiLS1yZWxhdGl2ZSIgb3B0aW9uIHRvIGxpbWl0IGFuZCBvdXRwdXQgcGF0aHMKKyAgIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGVuIHdvcmtpbmcgaW4gYSBzdWJkaXJlY3RvcnkuCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCAiLS1kaXJzdGF0IiBvcHRpb24gdG8gc2hvdyBiaXJkcy1leWUtc3VtbWFyeSBvZgorICAgY2hhbmdlcyBtb3JlIGNvbmNpc2VseSB0aGFuICItLWRpZmZzdGF0Ii4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgLS1jb3Zlci1sZXR0ZXIgb3B0aW9uIHRvIGdlbmVyYXRlIGEgY292ZXIKKyAgIGxldHRlciB0ZW1wbGF0ZS4KKworICogImdpdCBnYyIgbGVhcm5lZCAtLXF1aWV0IG9wdGlvbi4KKworICogImdpdCBnYyIgbm93IGF1dG9tYXRpY2FsbHkgcHJ1bmVzIHVucmVhY2hhYmxlIG9iamVjdHMgdGhhdCBhcmUgdHdvCisgICB3ZWVrcyBvbGQgb3Igb2xkZXIuCisKKyAqICJnaXQgZ2MgLS1hdXRvIiBjYW4gYmUgZGlzYWJsZWQgbW9yZSBlYXNpbHkgYnkganVzdCBzZXR0aW5nIGdjLmF1dG8KKyAgIHRvIHplcm8uICBJdCBhbHNvIHRvbGVyYXRlcyBtb3JlIHBhY2tmaWxlcyBieSBkZWZhdWx0LgorCisgKiAiZ2l0IGdyZXAiIG5vdyBrbm93cyAiLS1uYW1lLW9ubHkiIGlzIGEgc3lub255bSBmb3IgdGhlICItbCIgb3B0aW9uLgorCisgKiAiZ2l0IGhlbHAgPGFsaWFzPiIgbm93IHJlcG9ydHMgIidnaXQgPGFsaWFzPicgaXMgYWxpYXMgdG8gPHdoYXQ+IiwKKyAgIGluc3RlYWQgb2Ygc2F5aW5nICJObyBtYW51YWwgZW50cnkgZm9yIGdpdC08YWxpYXM+Ii4KKworICogImdpdCBoZWxwIiBjYW4gdXNlIGRpZmZlcmVudCBiYWNrZW5kcyB0byBzaG93IG1hbnVhbCBwYWdlcyBhbmQgdGhpcyBjYW4KKyAgIGJlIGNvbmZpZ3VyZWQgdXNpbmcgIm1hbi52aWV3ZXIiIGNvbmZpZ3VyYXRpb24uCisKKyAqICJnaXRrIiBkb2VzIG5vdCByZXN0b3JlIHdpbmRvdyBwb3NpdGlvbiBmcm9tICRIT01FLy5naXRrIGFueW1vcmUgKGl0CisgICBzdGlsbCByZXN0b3JlcyB0aGUgc2l6ZSkuCisKKyAqICJnaXQgbG9nIC0tZ3JlcD08d2hhdD4iIGxlYXJuZWQgIi0tZml4ZWQtc3RyaW5ncyIgb3B0aW9uIHRvIGxvb2sgZm9yCisgICA8d2hhdD4gd2l0aG91dCB0cmVhdGluZyBpdCBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKworICogImdpdCBndWkiIGxlYXJuZWQgYW4gYXV0by1zcGVsbCBjaGVja2luZy4KKworICogImdpdCBwdXNoIDxzb21ld2hlcmU+IEhFQUQiIGFuZCAiZ2l0IHB1c2ggPHNvbWV3aGVyZT4gK0hFQUQiIHdvcmtzIGFzCisgICBleHBlY3RlZDsgdGhleSBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCAoYW5kIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoKS4KKyAgIEluIGFkZGl0aW9uLCBIRUFEIGNhbiBiZSB3cml0dGVuIGFzIHRoZSB2YWx1ZSBvZiAicmVtb3RlLjx0aGVyZT4ucHVzaCIKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgInBhY2sudGhyZWFkcyIgaXMgc2V0IHRvIDAsICJnaXQKKyAgIHJlcGFjayIgYXV0byBkZXRlY3RzIHRoZSBudW1iZXIgb2YgQ1BVcyBhbmQgdXNlcyB0aGF0IG1hbnkgdGhyZWFkcy4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkIHRvIHByb21wdCBmb3IgcGFzc3dvcmRzCisgICBpbnRlcmFjdGl2ZWx5LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgYW4gZWFzaWVyIHdheSB0byBzdXBwcmVzcyBDQworICAgcmVjaXBpZW50cy4KKworICogImdpdCBzdGFzaCIgbGVhcm5lZCAicG9wIiBjb21tYW5kLCB0aGF0IGFwcGxpZXMgdGhlIGxhdGVzdCBzdGFzaCBhbmQKKyAgIHJlbW92ZXMgaXQgZnJvbSB0aGUgc3Rhc2gsIGFuZCAiZHJvcCIgY29tbWFuZCB0byBkaXNjYXJkIHRoZSBuYW1lZAorICAgc3Rhc2ggZW50cnkuCisKKyAqICJnaXQgc3VibW9kdWxlIiBsZWFybmVkIGEgbmV3IHN1YmNvbW1hbmQgInN1bW1hcnkiIHRvIHNob3cgdGhlCisgICBzeW1tZXRyaWMgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBIRUFEIHZlcnNpb24gYW5kIHRoZSB3b3JrIHRyZWUgdmVyc2lvbgorICAgb2YgdGhlIHN1Ym1vZHVsZSBjb21taXRzLgorCisgKiBWYXJpb3VzICJnaXQgY3ZzaW1wb3J0IiwgImdpdCBjdnNleHBvcnRjb21taXQiLCAiZ2l0IGN2c3NlcnZlciIsCisgICAiZ2l0IHN2biIgYW5kICJnaXQgcDQiIGltcHJvdmVtZW50cy4KKworKGludGVybmFsKQorCisgKiBEdXBsaWNhdGVkIGNvZGUgYmV0d2VlbiBnaXQtaGVscCBhbmQgZ2l0LWluc3Rhd2ViIHRoYXQKKyAgIGxhdW5jaGVzIHVzZXIncyBwcmVmZXJyZWQgYnJvd3NlciBoYXMgYmVlbiByZWZhY3RvcmVkLgorCisgKiBJdCBpcyBub3cgZWFzaWVyIHRvIHdyaXRlIHRlc3Qgc2NyaXB0cyB0aGF0IHJlY29yZHMga25vd24KKyAgIGJyZWFrYWdlcy4KKworICogImdpdCBjaGVja291dCIgaXMgcmV3cml0dGVuIGluIEMuCisKKyAqICJnaXQgcmVtb3RlIiBpcyByZXdyaXR0ZW4gaW4gQy4KKworICogVHdvIGNvbmZsaWN0IGh1bmtzIHRoYXQgYXJlIHNlcGFyYXRlZCBieSBhIHZlcnkgc2hvcnQgc3BhbiBvZiBjb21tb24KKyAgIGxpbmVzIGFyZSBub3cgY29hbGVzY2VkIGludG8gb25lIGxhcmdlciBodW5rLCB0byBtYWtlIHRoZSByZXN1bHQgZWFzaWVyCisgICB0byByZWFkLgorCisgKiBSdW4tY29tbWFuZCBBUEkncyB1c2Ugb2YgZmlsZSBkZXNjcmlwdG9ycyBpcyBkb2N1bWVudGVkIGNsZWFyZXIgYW5kCisgICBpcyBtb3JlIGNvbnNpc3RlbnQgbm93LgorCisgKiBkaWZmIG91dHB1dCBjYW4gYmUgc2VudCB0byBGSUxFICogdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSBzdGRvdXQuICBUaGlzCisgICB3aWxsIGhlbHAgcmVpbXBsZW1lbnRpbmcgbW9yZSB0aGluZ3MgaW4gQy4KKworRml4ZXMgc2luY2UgdjEuNS40CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS41LjQgbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbgordGhpcyByZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisgKiAiZ2l0LWh0dHAtcHVzaCIgZGlkIG5vdCBhbGxvdyBkZWxldGlvbiBvZiByZW1vdGUgcmVmIHdpdGggdGhlIHVzdWFsCisgICAicHVzaCA8cmVtb3RlPiA6PGJyYW5jaD4iIHN5bnRheC4KKworICogImdpdC1yZWJhc2UgLS1hYm9ydCIgZGlkIG5vdCBnbyBiYWNrIHRvIHRoZSByaWdodCBsb2NhdGlvbiBpZgorICAgImdpdC1yZXNldCIgd2FzIHJ1biBkdXJpbmcgdGhlICJnaXQtcmViYXNlIiBzZXNzaW9uLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgd2l0aG91dCBzZXR0aW5nIGltYXAuaG9zdCBkaWQgbm90IGVycm9yIG91dCBidXQKKyAgIHNlZ2ZhdWx0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODY0YjE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4xLnR4dApAQCAtMCwwICsxLDI4IEBACitHSVQgdjEuNS42LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS42CistLS0tLS0tLS0tLS0tLS0tLS0KKworKiBMYXN0IG1pbnV0ZSBjaGFuZ2UgYnJva2UgbG9vc2Ugb2JqZWN0IGNyZWF0aW9uIG9uIEFJWC4KKworKiAocGVyZm9ybWFuY2UgZml4KSBXZSB1c2VkIHRvIG1ha2UgJEdJVF9ESVIgYWJzb2x1dGUgcGF0aCBlYXJseSBpbiB0aGUKKyAgcHJvZ3JhbXMgYnV0IGtlZXBpbmcgaXQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGludGVybmFsbHkKKyAgZ2l2ZXMgMS0zIHBlci1jZW50IHBlcmZvcm1hbmNlIGJvb3N0LgorCisqIGJhc2ggY29tcGxldGlvbiBrbm93cyB0aGUgbmV3IC0tZ3JhcGggb3B0aW9uIHRvIGdpdC1sb2cgZmFtaWx5LgorCisKKyogZ2l0LWRpZmYgLWMvLS1jYyBzaG93ZWQgdW5uZWNlc3NhcnkgImRlbGV0aW9uIiBsaW5lcyBhdCB0aGUgY29udGV4dAorICBib3VuZGFyeS4KKworKiBnaXQtZm9yLWVhY2gtcmVmIGlnbm9yZWQgJShvYmplY3QpIGFuZCAlKHR5cGUpIHJlcXVlc3RzIGZvciB0YWcKKyAgb2JqZWN0cy4KKworKiBnaXQtbWVyZ2UgdXNhZ2UgaGFkIGEgdHlwby4KKworKiBSZWJ1aWxkaW5nIG9mIGdpdC1zdm4gbWV0YWluZm8gZGF0YWJhc2UgZGlkIG5vdCB0YWtlIHJld3JpdGVSb290CisgIG9wdGlvbiBpbnRvIGFjY291bnQuCisKKyogUnVubmluZyAiZ2l0LXJlYmFzZSAtLWNvbnRpbnVlLy0tc2tpcC8tLWFib3J0IiBiZWZvcmUgc3RhcnRpbmcgYQorICByZWJhc2UgZ2F2ZSBub25zZW5zZSBlcnJvciBtZXNzYWdlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDJhODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjIudHh0CkBAIC0wLDAgKzEsNDAgQEAKK0dJVCB2MS41LjYuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGdXR1cmVwcm9vZgorLS0tLS0tLS0tLS0KKworICogImdpdC1zaGVsbCIgYWNjZXB0cyByZXF1ZXN0cyB3aXRob3V0IGEgZGFzaCBiZXR3ZWVuICJnaXQiIGFuZAorICAgc3ViY29tbWFuZCBuYW1lIChlLmcuICJnaXQgdXBsb2FkLXBhY2siKSB3aGljaCB0aGUgbmV3ZXIgY2xpZW50IHdpbGwKKyAgIHN0YXJ0IHRvIG1ha2Ugc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KKworRml4ZXMgc2luY2UgdjEuNS42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBjbG9uZSIgZnJvbSBhIHJlbW90ZSB0aGF0IGlzIG5hbWVkIHdpdGggdXJsLmluc3RlYWRPZiBzZXR0aW5nIGluCisgICRIT01FLy5naXRjb25maWcgZGlkIG5vdCB3b3JrIHdlbGwuCisKKyogImdpdCBkZXNjcmliZSAtLWxvbmcgLS10YWdzIiBzZWdmYXVsdGVkIHdoZW4gdGhlIGRlc2NyaWJlZCByZXZpc2lvbiB3YXMKKyAgdGFnZ2VkIHdpdGggYSBsaWdodHdlaWdodCB0YWcuCisKKyogImdpdCBkaWZmIC0tY2hlY2siIGRpZCBub3QgcmVwb3J0IHRoZSByZXN1bHQgdmlhIGl0cyBleGl0IHN0YXR1cworICByZWxpYWJseS4KKworKiBXaGVuIHJlbW90ZSBzaWRlIHVzZWQgdG8gaGF2ZSBicmFuY2ggJ2ZvbycgYW5kIGdpdC1mZXRjaCBmaW5kcyB0aGF0IG5vdworICBpdCBoYXMgYnJhbmNoICdmb28vYmFyJywgaXQgcmVmdXNlcyB0byBsb3NlIHRoZSBleGlzdGluZyByZW1vdGUgdHJhY2tpbmcKKyAgYnJhbmNoIGFuZCBpdHMgcmVmbG9nLiAgVGhlIGVycm9yIG1lc3NhZ2UgaGFzIGJlZW4gaW1wcm92ZWQgdG8gc3VnZ2VzdAorICBwcnVuaW5nIHRoZSByZW1vdGUgaWYgdGhlIHVzZXIgd2FudHMgdG8gcHJvY2VlZCBhbmQgZ2V0IHRoZSBsYXRlc3Qgc2V0CisgIG9mIGJyYW5jaGVzIGZyb20gdGhlIHJlbW90ZSwgaW5jbHVkaW5nIHN1Y2ggJ2Zvby9iYXInLgorCisqICJnaXQgcmVzZXQgZmlsZSIgc2hvdWxkIG1lYW4gdGhlIHNhbWUgdGhpbmcgYXMgImdpdCByZXNldCBIRUFEIGZpbGUiLAorICBidXQgd2UgcmVxdWlyZWQgZGlzYW1iaWd1YXRpbmcgLS0gZXZlbiB3aGVuICJmaWxlIiBpcyBub3QgYW1iaWd1b3VzLgorCisqICJnaXQgc2hvdyIgc2VnZmF1bHRlZCB3aGVuIGFuIGFubm90YXRlZCB0YWcgdGhhdCBwb2ludHMgYXQgYW5vdGhlcgorICBhbm5vdGF0ZWQgdGFnIHdhcyBnaXZlbiB0byBpdC4KKworKiBPcHRpbWl6YXRpb24gZm9yIGEgbGFyZ2UgaW1wb3J0IHZpYSAiZ2l0LXN2biIgaW50cm9kdWNlZCBpbiB2MS41LjYgaGFkIGEKKyAgc2VyaW91cyBtZW1vcnkgYW5kIHRlbXBvcmFyeSBmaWxlIGxlYWssIHdoaWNoIG1hZGUgaXQgdW51c2FibGUgZm9yCisgIG1vZGVyYXRlbHkgbGFyZ2UgaW1wb3J0LgorCisqICJnaXQtc3ZuIiBtYW5nbGVkIHJlbW90ZSBuaWNrbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgdW5uZWNlc3NhcmlseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MWRkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjMudHh0CkBAIC0wLDAgKzEsNTIgQEAKK0dJVCB2MS41LjYuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBTZXR0aW5nIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSB0byB0cmFkaXRpb25hbCAidHJ1ZSIgdmFsdWUgd2FzIHN1cHBvc2VkIHRvIG1ha2UKKyAgdGhlIHJlcG9zaXRvcnkgZ3JvdXAgd3JpdGFibGUgYnV0IHNob3VsZCBub3QgYWZmZWN0IHBlcm1pc3Npb24gZm9yIG90aGVycy4KKyAgSG93ZXZlciwgc2luY2UgMS41LjYsIGl0IHdhcyBicm9rZW4gdG8gZHJvcCBwZXJtaXNzaW9uIGZvciBvdGhlcnMgd2hlbiB1bWFzayBpcworICAwMjIsIG1ha2luZyB0aGUgcmVwb3NpdG9yeSB1bnJlYWRhYmxlIGJ5IG90aGVycy4KKworKiBTZXR0aW5nIEdJVF9UUkFDRSB3aWxsIHJlcG9ydCBzcGF3bmluZyBvZiBleHRlcm5hbCBwcm9jZXNzIHZpYSBydW5fY29tbWFuZCgpLgorCisqIFVzaW5nIGFuIG9iamVjdCB3aXRoIHZlcnkgZGVlcCBkZWx0YSBjaGFpbiBwaW5uZWQgbWVtb3J5IG5lZWRlZCBmb3IgZXh0cmFjdGluZworICBpbnRlcm1lZGlhdGUgYmFzZSBvYmplY3RzIHVubmVjZXNzYXJpbHkgbG9uZywgbGVhZGluZyB0byBleGNlc3MgbWVtb3J5IHVzYWdlLgorCisqIEJhc2ggY29tcGxldGlvbiBzY3JpcHQgZGlkIG5vdCBub3RpY2UgJy0tJyBtYXJrZXIgb24gdGhlIGNvbW1hbmQKKyAgbGluZSBhbmQgdHJpZWQgdGhlIHJlbGF0aXZlbHkgc2xvdyAicmVmIGNvbXBsZXRpb24iIGV2ZW4gd2hlbgorICBjb21wbGV0aW5nIGFyZ3VtZW50cyBhZnRlciBvbmUuCisKKyogUmVnaXN0ZXJpbmcgYSBub24tZW1wdHkgYmxvYiByYWNpbHkgYW5kIHRoZW4gdHJ1bmNhdGluZyB0aGUgd29ya2luZworICB0cmVlIGZpbGUgZm9yIGl0IGNvbmZ1c2VkICJyYWN5LWdpdCBhdm9pZGFuY2UiIGxvZ2ljIGludG8gdGhpbmtpbmcKKyAgdGhhdCB0aGUgcGF0aCBpcyBub3cgdW5jaGFuZ2VkLgorCisqIFRoZSBzZWN0aW9uIHRoYXQgZGVzY3JpYmVzIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byBnaXQtYXJjaGl2ZSB3ZXJlIHBsYWNlZAorICBpbiBhIHdyb25nIHBsYWNlIGluIHRoZSBnaXRhdHRyaWJ1dGVzKDUpIG1hbnVhbCBwYWdlLgorCisqICJnaXQgYW0iIHdhcyBub3QgaGVscGZ1bCB0byB0aGUgdXNlcnMgd2hlbiBpdCBkZXRlY3RlZCB0aGF0IHRoZSBjb21taXR0ZXIKKyAgaW5mb3JtYXRpb24gaXMgbm90IHNldCB1cCBwcm9wZXJseSB5ZXQuCisKKyogImdpdCBjbG9uZSIgaGFkIGEgbGVmdG92ZXIgZGVidWdnaW5nIGZwcmludGYoKS4KKworKiAiZ2l0IGNsb25lIC1xIiB3YXMgbm90IHF1aWV0IGVub3VnaCBhcyBpdCB1c2VkIHRvIGFuZCBnYXZlIG9iamVjdCBjb3VudAorICBhbmQgcHJvZ3Jlc3MgcmVwb3J0cy4KKworKiAiZ2l0IGNsb25lIiBtYXJrZWQgZG93bmxvYWRlZCBwYWNrZmlsZSB3aXRoIC5rZWVwOyB0aGlzIGNvdWxkIGJlIGEKKyAgZ29vZCB0aGluZyBpZiB0aGUgcmVtb3RlIHNpZGUgaXMgd2VsbCBwYWNrZWQgYnV0IG90aGVyd2lzZSBub3QsCisgIGVzcGVjaWFsbHkgZm9yIGEgcHJvamVjdCB0aGF0IGlzIG5vdCByZWFsbHkgYmlnLgorCisqICJnaXQgZGFlbW9uIiB1c2VkIHRvIGNhbGwgc3lzbG9nKCkgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLCB3aGljaAorICBjb3VsZCByYWlzZSBzaWduYWxzIG9mIGl0cyBvd24gYnV0IGdlbmVyYWxseSBpcyBub3QgcmVlbnRyYW50LiAgVGhpcworICB3YXMgZml4ZWQgYnkgcmVzdHJ1Y3R1cmluZyB0aGUgY29kZSB0byByZXBvcnQgc3lzbG9nKCkgYWZ0ZXIgdGhlIGhhbmRsZXIKKyAgcmV0dXJucy4KKworKiBXaGVuICJnaXQgcHVzaCIgdHJpZXMgdG8gcmVtb3ZlIGEgcmVtb3RlIHJlZiwgYW5kIGNvcnJlc3BvbmRpbmcKKyAgdHJhY2tpbmcgcmVmIGlzIG1pc3NpbmcsIHdlIHVzZWQgdG8gcmVwb3J0IGVycm9yIChpLmUuIGZhaWx1cmUgdG8KKyAgcmVtb3ZlIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90IGV4aXN0KS4KKworKiAiZ2l0IG1haWxpbmZvIiAoaGVuY2UgImdpdCBhbSIpIGRpZCBub3QgaGFuZGxlIGNvbW1pdCBsb2cgbWVzc2FnZXMgaW4gYQorICBNSU1FIG11bHRpcGFydCBtYWlsIGNvcnJlY3RseS4KKworQ29udGFpbnMgb3RoZXIgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg5NjhmMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNC50eHQKQEAgLTAsMCArMSw0NyBAQAorR0lUIHYxLjUuNi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFZhcmlvdXMgY29tbWFuZHMgY291bGQgb3ZlcmZsb3cgaXRzIGludGVybmFsIGJ1ZmZlciBvbiBhIHBsYXRmb3JtCisgIHdpdGggc21hbGwgUEFUSF9NQVggdmFsdWUgaW4gYSByZXBvc2l0b3J5IHRoYXQgaGFzIGNvbnRlbnRzIHdpdGgKKyAgbG9uZyBwYXRobmFtZXMuCisKKyogVGhlcmUgd2Fzbid0IGEgd2F5IHRvIG1ha2UgLS1wcmV0dHk9Zm9ybWF0OiU8PiBzcGVjaWZpZXJzIHRvIGhvbm9yCisgIC5tYWlsbWFwIG5hbWUgcmV3cml0aW5nIGZvciBhdXRob3JzIGFuZCBjb21taXR0ZXJzLiAgTm93IHlvdSBjYW4gd2l0aAorICAlYU4gYW5kICVjTi4KKworKiBCYXNoIGNvbXBsZXRpb24gd2FzdGVkIHRvbyBtYW55IGN5Y2xlczsgdGhpcyBoYXMgYmVlbiBvcHRpbWl6ZWQgdG8gYmUKKyAgdXNhYmxlIGFnYWluLgorCisqIEJhc2ggY29tcGxldGlvbiBsb3N0IHJlZiBwYXJ0IHdoZW4gY29tcGxldGluZyBzb21ldGhpbmcgbGlrZSAiZ2l0IHNob3cKKyAgcHU6TWFrZWZpbGUiLgorCisqICJnaXQtY3Zzc2VydmVyIiBkaWQgbm90IGNsZWFuIHVwIGl0cyB0ZW1wb3Jhcnkgd29ya2luZyBhcmVhIGFmdGVyIGFubm90YXRlCisgIHJlcXVlc3QuCisKKyogImdpdC1kYWVtb24iIGNhbGxlZCBzeXNsb2coKSBmcm9tIGl0cyBzaWduYWwgaGFuZGxlciwgd2hpY2ggd2FzIGEKKyAgbm8tbm8uCisKKyogImdpdC1mZXRjaCIgaW50byBhbiBlbXB0eSByZXBvc2l0b3J5IHVzZWQgdG8gcmVtaW5kIHRoYXQgdGhlIGZldGNoIHdpbGwKKyAgIGJlIGh1Z2UgYnkgc2F5aW5nICJubyBjb21tb24gY29tbWl0cyIsIGJ1dCB0aGlzIHdhcyBhbiB1bm5lY2Vzc2FyeQorICAgbm9pc2U7IGl0IGlzIGFscmVhZHkga25vd24gYnkgdGhlIHVzZXIgYW55d2F5LgorCisqICJnaXQtaHR0cC1mZXRjaCIgd291bGQgaGF2ZSBzZWdmYXVsdGVkIHdoZW4gcGFjayBpZHggZmlsZSByZXRyaWV2ZWQKKyAgZnJvbSB0aGUgb3RoZXIgc2lkZSB3YXMgY29ycnVwdC4KKworKiAiZ2l0LWluZGV4LXBhY2siIHVzZWQgdG9vIG11Y2ggbWVtb3J5IHdoZW4gZGVhbGluZyB3aXRoIGEgZGVlcCBkZWx0YSBjaGFpbi4KKworKiAiZ2l0LW1haWxpbmZvIiAoaGVuY2UgImdpdC1hbSIpIGRpZCBub3QgY29ycmVjdGx5IGhhbmRsZSBpbi1ib2R5IFtQQVRDSF0KKyAgbGluZSB0byBvdmVycmlkZSB0aGUgY29tbWl0IHRpdGxlIHRha2VuIGZyb20gdGhlIG1haWwgU3ViamVjdCBoZWFkZXIuCisKKyogImdpdC1yZWJhc2UgLWkgLXAiIGxvc3QgcGFyZW50cyB0aGF0IGFyZSBub3QgaW52b2x2ZWQgaW4gdGhlIGhpc3RvcnkKKyAgYmVpbmcgcmV3cml0dGVuLgorCisqICJnaXQtcm0iIGxvc3QgdHJhY2sgb2Ygd2hlcmUgdGhlIGluZGV4IGZpbGUgd2FzIHdoZW4gR0lUX0RJUiB3YXMKKyAgc3BlY2lmaWVkIGFzIGEgcmVsYXRpdmUgcGF0aC4KKworKiAiZ2l0LXJldi1saXN0IC0tcXVpZXQiIHdhcyBub3QgcXVpZXQgYXMgYWR2ZXJ0aXNlZC4KKworQ29udGFpbnMgb3RoZXIgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjYTE3MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNS50eHQKQEAgLTAsMCArMSwyOSBAQAorR0lUIHYxLjUuNi41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNi40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgY3ZzaW1wb3J0IiB1c2VkIHRvIHNwaXQgb3V0ICJVTktOT1dOIExJTkUuLi4iIGRpYWdub3N0aWNzIHRvIHN0ZG91dC4KKworKiAiZ2l0IGNvbW1pdCAtRiBmaWxlbmFtZSIgYW5kICJnaXQgdGFnIC1GIGZpbGVuYW1lIiBydW4gZnJvbSBzdWJkaXJlY3RvcmllcworICBkaWQgbm90IHJlYWQgdGhlIHJpZ2h0IGZpbGUuCisKKyogImdpdCBpbml0IC0tdGVtcGxhdGU9IiB3aXRoIGJsYW5rICJ0ZW1wbGF0ZSIgcGFyYW1ldGVyIGxpbmtlZCBmaWxlcworICB1bmRlciByb290IGRpcmVjdG9yaWVzIHRvIC5naXQsIHdoaWNoIHdhcyBhIHRvdGFsIG5vbnNlbnNlLiAgSW5zdGVhZCwgaXQKKyAgbWVhbnMgIkkgZG8gbm90IHdhbnQgdG8gdXNlIGFueXRoaW5nIGZyb20gdGhlIHRlbXBsYXRlIGRpcmVjdG9yeSIuCisKKyogImdpdCBkaWZmLXRyZWUiIGFuZCBvdGhlciBkaWZmIHBsdW1iaW5nIGlnbm9yZWQgZGlmZi5yZW5hbWVsaW1pdCBjb25maWd1cmF0aW9uCisgIHZhcmlhYmxlIHdoZW4gdGhlIHVzZXIgZXhwbGljaXRseSBhc2tlZCBmb3IgcmVuYW1lIGRldGVjdGlvbi4KKworKiAiZ2l0IG5hbWUtcmV2IC0tbmFtZS1vbmx5IiBkaWQgbm90IHdvcmsgd2hlbiAiLS1zdGRpbiIgb3B0aW9uIHdhcyBpbiBlZmZlY3QuCisKKyogImdpdCBzaG93LWJyYW5jaCIgbWlzaGFuZGxlZCBpdHMgOHRoIGJyYW5jaC4KKworKiBBZGRpdGlvbiBvZiAiZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIiB0aGF0IGhhcHBlbmVkIGR1cmluZworICAxLjUuNiBjeWNsZSBicm9rZSAiZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1taXNzaW5nIi4KKworKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgcGFyc2UgY2hhcnNldCBmcm9tIGFuIGV4aXN0aW5nIENvbnRlbnQtdHlwZToKKyAgaGVhZGVyIHByb3Blcmx5LgorCitDb250YWlucyBvdGhlciB2YXJpb3VzIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWRhMjNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi42LnR4dApAQCAtMCwwICsxLDEwIEBACitHSVQgdjEuNS42LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgMS41LjYuNQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBSZW1vdmVkIHN1cHBvcnQgZm9yIGFuIG9ic29sZXRlIGdpdHdlYiByZXF1ZXN0IFVSSSwgd2hvc2UKKyAgIGltcGxlbWVudGF0aW9uIHJhbiAiZ2l0IGRpZmYiIFBvcmNlbGFpbiwgaW5zdGVhZCBvZiB1c2luZyBwbHVtYmluZywKKyAgIHdoaWNoIHdvdWxkIGhhdmUgcnVuIGFuIGV4dGVybmFsIGRpZmYgY29tbWFuZCBzcGVjaWZpZWQgaW4gdGhlCisgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gYXMgdGhlIGdpdHdlYiB1c2VyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQzZDhkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi50eHQKQEAgLTAsMCArMSwxMTUgQEAKK0dJVCB2MS41LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNS41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworKiBDb21lcyB3aXRoIHVwZGF0ZWQgZ2l0ayBhbmQgZ2l0LWd1aS4KKworKHBvcnRhYmlsaXR5KQorCisqIGdpdCB3aWxsIGJ1aWxkIG9uIEFJWCBiZXR0ZXIgdGhhbiBiZWZvcmUgbm93LgorCisqIGNvcmUuaWdub3JlY2FzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHdvcmsgYmV0dGVyIG9uCisgIGZpbGVzeXN0ZW1zIHRoYXQgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4KKworKiAiZ2l0IGluaXQiIG5vdyBhdXRvZGV0ZWN0cyB0aGUgY2FzZSBzZW5zaXRpdml0eSBvZiB0aGUgZmlsZXN5c3RlbSBhbmQKKyAgc2V0cyBjb3JlLmlnbm9yZWNhc2UgYWNjb3JkaW5nbHkuCisKKyogY3BpbyBpcyBubyBsb25nZXIgdXNlZDsgbmVpdGhlciAiY3VybCIgYmluYXJ5IChsaWJjdXJsIGlzIHN0aWxsIHVzZWQpLgorCisoZG9jdW1lbnRhdGlvbikKKworKiBNYW55IGZyZWVzdGFuZGluZyBkb2N1bWVudGF0aW9uIHBhZ2VzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgYW5kIG1hZGUKKyAgYXZhaWxhYmxlIHRvICJnaXQgaGVscCIgKGFrYSAibWFuIGdpdDxzb21ldGhpbmc+IikgYXMgc2VjdGlvbiA3IG9mCisgIHRoZSBtYW51YWwgcGFnZXMuIFRoaXMgbWVhbnMgYm9va21hcmtzIHRvIHNvbWUgSFRNTCBkb2N1bWVudGF0aW9uCisgIGZpbGVzIG1heSBuZWVkIHRvIGJlIHVwZGF0ZWQgKGVnICJ0dXRvcmlhbC5odG1sIiBiZWNhbWUKKyAgImdpdHR1dG9yaWFsLmh0bWwiKS4KKworKHBlcmZvcm1hbmNlKQorCisqICJnaXQgY2xvbmUiIHdhcyByZXdyaXR0ZW4gaW4gQy4gIFRoaXMgd2lsbCBob3BlZnVsbHkgaGVscCBjbG9uaW5nIGEKKyAgcmVwb3NpdG9yeSB3aXRoIGluc2FuZSBudW1iZXIgb2YgcmVmcy4KKworKiAiZ2l0IHJlYmFzZSAtLW9udG8gJHRoZXJlICRmcm9tICRicmFuY2giIHVzZWQgdG8gc3dpdGNoIHRvIHRoZSB0aXAgb2YKKyAgJGJyYW5jaCBvbmx5IHRvIGltbWVkaWF0ZWx5IHJlc2V0IGJhY2sgdG8gJGZyb20sIHNtdWRnaW5nIHdvcmsgdHJlZQorICBmaWxlcyB1bm5lY2Vzc2FyaWx5LiAgVGhpcyBoYXMgYmVlbiBvcHRpbWl6ZWQuCisKKyogT2JqZWN0IGNyZWF0aW9uIGNvZGVwYXRoIGluICJnaXQtc3ZuIiBoYXMgYmVlbiBvcHRpbWl6ZWQgYnkgZW5oYW5jaW5nCisgIHBsdW1iaW5nIGNvbW1hbmRzIGdpdC1jYXQtZmlsZSBhbmQgZ2l0LWhhc2gtb2JqZWN0LgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyogImdpdCBhZGQgLXAiIChhbmQgdGhlICJwYXRjaCIgc3ViY29tbWFuZCBvZiAiZ2l0IGFkZCAtaSIpIGNhbiBjaG9vc2UgdG8KKyAgYXBwbHkgKG9yIG5vdCBhcHBseSkgbW9kZSBjaGFuZ2VzIGluZGVwZW5kZW50bHkgZnJvbSBjb250ZW50cyBjaGFuZ2VzLgorCisqICJnaXQgYmlzZWN0IGhlbHAiIGdpdmVzIGxvbmdlciBhbmQgbW9yZSBoZWxwZnVsIHVzYWdlIGluZm9ybWF0aW9uLgorCisqICJnaXQgYmlzZWN0IiBkb2VzIG5vdCB1c2UgYSBzcGVjaWFsIGJyYW5jaCAiYmlzZWN0IiBhbnltb3JlOyBpbnN0ZWFkLCBpdAorICBkb2VzIGl0cyB3b3JrIG9uIGEgZGV0YWNoZWQgSEVBRC4KKworKiAiZ2l0IGJyYW5jaCIgKGFuZCAiZ2l0IGNoZWNrb3V0IC1iIikgY2FuIGJlIHRvbGQgdG8gc2V0IHVwCisgIGJyYW5jaC48bmFtZT4ucmViYXNlIGF1dG9tYXRpY2FsbHksIHNvIHRoYXQgbGF0ZXIgeW91IGNhbiBzYXkgImdpdCBwdWxsIgorICBhbmQgbWFnaWNhbGx5IGNhdXNlICJnaXQgcHVsbCAtLXJlYmFzZSIgdG8gaGFwcGVuLgorCisqICJnaXQgYnJhbmNoIC0tbWVyZ2VkIiBhbmQgImdpdCBicmFuY2ggLS1uby1tZXJnZWQiIGNhbiBiZSB1c2VkIHRvIGxpc3QKKyAgYnJhbmNoZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBtZXJnZWQgKG9yIG5vdCB5ZXQgbWVyZ2VkKSB0byB0aGUKKyAgY3VycmVudCBicmFuY2guCisKKyogImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IiBjYW4gYWRkIGEgc2lnbi1vZmYuCisKKyogImdpdCBjb21taXQiIG1lbnRpb25zIHRoZSBhdXRob3IgaWRlbnRpdHkgd2hlbiB5b3UgYXJlIGNvbW1pdHRpbmcKKyAgc29tZWJvZHkgZWxzZSdzIGNoYW5nZXMuCisKKyogImdpdCBkaWZmL2xvZyAtLWRpcnN0YXQiIG91dHB1dCBpcyBjb25zaXN0ZW50IGJldHdlZW4gYmluYXJ5IGFuZCB0ZXh0dWFsCisgIGNoYW5nZXMuCisKKyogImdpdCBmaWx0ZXItYnJhbmNoIiByZXdyaXRlcyBzaWduZWQgdGFncyBieSBkZW1vdGluZyB0aGVtIHRvIGFubm90YXRlZC4KKworKiAiZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLWJpbmFyeSIgY2FuIHByb2R1Y2UgYSBwYXRjaCB0aGF0IGxhY2sgYmluYXJ5CisgIGNoYW5nZXMgKGkuZS4gY2Fubm90IGJlIHVzZWQgdG8gcHJvcGFnYXRlIHRoZSB3aG9sZSBjaGFuZ2VzKSBtZWFudCBvbmx5CisgIGZvciByZXZpZXdpbmcuCisKKyogImdpdCBpbml0IC0tYmFyZSIgaXMgYSBzeW5vbnltIGZvciAiZ2l0IC0tYmFyZSBpbml0IiBub3cuCisKKyogImdpdCBnYyAtLWF1dG8iIGhvbm9ycyBhIG5ldyBwcmUtYXV0by1nYyBob29rIHRvIHRlbXBvcmFyaWx5IGRpc2FibGUgaXQuCisKKyogImdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDo8Y3VzdG9tIGZvcm1hdD4iIGdpdmVzIGEgTEYgYWZ0ZXIgZWFjaCBlbnRyeSwKKyAgaW5zdGVhZCBvZiBnaXZpbmcgYSBMRiBiZXR3ZWVuIGVhY2ggcGFpciBvZiBlbnRyaWVzIHdoaWNoIGlzIGhvdworICAiZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6PGN1c3RvbSBmb3JtYXQ+IiB3b3Jrcy4KKworKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbGVhcm5lZCB0aGUgIi0tZ3JhcGgiIG9wdGlvbiB0byBzaG93IHRoZSBhbmNlc3RyeQorICBncmFwaCBhdCB0aGUgbGVmdCBtYXJnaW4gb2YgdGhlIG91dHB1dC4KKworKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgY2FuIGJlIHRvbGQgdG8gdXNlIGRhdGUgZm9ybWF0IHRoYXQgaXMgZGlmZmVyZW50CisgIGZyb20gdGhlIGRlZmF1bHQgdmlhICdsb2cuZGF0ZScgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworKiAiZ2l0IHNlbmQtZW1haWwiIG5vdyBjYW4gc2VuZCBvdXQgbWVzc2FnZXMgb3V0c2lkZSBhIGdpdCByZXBvc2l0b3J5LgorCisqICJnaXQgc2VuZC1lbWFpbCAtLWNvbXBvc2UiIHdhcyBtYWRlIGF3YXJlIG9mIHJmYzIwNDcgcXVvdGluZy4KKworKiAiZ2l0IHN0YXR1cyIgY2FuIG9wdGlvbmFsbHkgaW5jbHVkZSBvdXRwdXQgZnJvbSAiZ2l0IHN1Ym1vZHVsZQorICBzdW1tYXJ5Ii4KKworKiAiZ2l0IHN2biIgbGVhcm5lZCAtLWFkZC1hdXRob3ItZnJvbSBvcHRpb24gdG8gcHJvcGFnYXRlIHRoZSBhdXRob3JzaGlwCisgIGJ5IG11bmdpbmcgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZS4KKworKiBuZXcgb2JqZWN0IGNyZWF0aW9uIGFuZCBsb29raW5nIHVwIGluICJnaXQgc3ZuIiBoYXMgYmVlbiBvcHRpbWl6ZWQuCisKKyogImdpdHdlYiIgY2FuIHJlYWQgZnJvbSBhIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworKGludGVybmFsKQorCisqICJnaXQgdW5wYWNrLW9iamVjdHMiIGFuZCAiZ2l0IHJlY2VpdmUtcGFjayIgaXMgbm93IG1vcmUgc3RyaWN0IGFib3V0CisgIGRldGVjdGluZyBicmVha2FnZSBpbiB0aGUgb2JqZWN0cyB0aGV5IHJlY2VpdmUgb3ZlciB0aGUgd2lyZS4KKworCitGaXhlcyBzaW5jZSB2MS41LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjUuNSBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluCit0aGlzIHJlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK0FuZCB0aGVyZSBhcmUgdG9vIG51bWVyb3VzIHNtYWxsIGZpeGVzIHRvIG90aGVyd2lzZSBub3RlIGhlcmUgOy0pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQ3YTFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4xLnR4dApAQCAtMCwwICsxLDM2IEBACitHSVQgdjEuNi4wLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGRpZmYgLS1jYyIgZGlkIG5vdCBob25vciBjb250ZW50IG1hbmdsaW5nIHNwZWNpZmllZCBieQorICBnaXRhdHRyaWJ1dGVzIGFuZCBjb3JlLmF1dG9jcmxmIHdoZW4gcmVhZGluZyBmcm9tIHRoZSB3b3JrIHRyZWUuCisKKyogImdpdCBkaWZmIC0tY2hlY2siIGluY29ycmVjdGx5IGRldGVjdGVkIG5ldyB0cmFpbGluZyBibGFuayBsaW5lcyB3aGVuCisgIHdoaXRlc3BhY2UgY2hlY2sgd2FzIGluIGVmZmVjdC4KKworKiAiZ2l0IGZvci1lYWNoLXJlZiIgdHJpZWQgdG8gZGVyZWZlcmVuY2UgTlVMTCB3aGVuIGFza2VkIGZvciAnJShib2R5KSIgb24KKyAgYSB0YWcgd2l0aCBhIHNpbmdsZSBpbmNvbXBsZXRlIGxpbmUgYXMgaXRzIHBheWxvYWQuCisKKyogImdpdCBmb3JtYXQtcGF0Y2giIHBlZWtlZCBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZyB3aGVuCisgICJmb3JtYXQuaGVhZGVycyIgdmFyaWFibGUgaXMgZW1wdHkgKGEgbWlzY29uZmlndXJhdGlvbikuCisKKyogImdpdCBoZWxwIGhlbHAiIGRpZCBub3Qgd29yayBjb3JyZWN0bHkuCisKKyogImdpdCBtYWlsaW5mbyIgKGhlbmNlICJnaXQgYW0iKSB3YXMgdW5oYXBweSB3aGVuIE1JTUUgbXVsdGlwYXJ0IG1lc3NhZ2UKKyAgY29udGFpbmVkIGdhcmJhZ2UgYWZ0ZXIgdGhlIGZpbmlzaGluZyBib3VuZGFyeS4KKworKiAiZ2l0IG1haWxpbmZvIiBhbHNvIHdhcyB1bmhhcHB5IHdoZW4gdGhlICJGcm9tOiAiIGxpbmUgb25seSBoYWQgYSBiYXJlCisgIGUtbWFpbCBhZGRyZXNzLgorCisqICJnaXQgbWVyZ2UiIGRpZCBub3QgcmVmcmVzaCB0aGUgaW5kZXggY29ycmVjdGx5IHdoZW4gYSBtZXJnZSByZXN1bHRlZCBpbgorICBhIGZhc3QtZm9yd2FyZC4KKworKiAiZ2l0IG1lcmdlIiBkaWQgbm90IHJlc29sdmUgYSB0cnVseSB0cml2aWFsIG1lcmdlcyB0aGF0IGNhbiBiZSBkb25lCisgIHdpdGhvdXQgY29udGVudCBsZXZlbCBtZXJnZXMuCisKKyogImdpdCBzdm4gZGNvbW1pdCIgdG8gYSByZXBvc2l0b3J5IHdpdGggVVJMIHRoYXQgaGFzIGVtYmVkZGVkIHVzZXJuYW1lcworICBkaWQgbm90IHdvcmsgY29ycmVjdGx5LgorCitDb250YWlucyBvdGhlciB2YXJpb3VzIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDhmYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4yLnR4dApAQCAtMCwwICsxLDgxIEBACitHSVQgdjEuNi4wLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4wLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogSW5zdGFsbGF0aW9uIG9uIHBsYXRmb3JtcyB0aGF0IG5lZWRzIC5leGUgc3VmZml4IHRvIGdpdC0qIHByb2dyYW1zIHdlcmUKKyAgYnJva2VuIGluIDEuNi4wLjEuCisKKyogSW5zdGFsbGF0aW9uIG9uIGZpbGVzeXN0ZW1zIHdpdGhvdXQgc3ltYm9saWMgbGlua3Mgc3VwcG9ydCBkaWQgbm90CisgIHdvcmsgd2VsbC4KKworKiBJbi10cmVlIGRvY3VtZW50YXRpb25zIGFuZCB0ZXN0IHNjcmlwdHMgbm93IHVzZSAiZ2l0IGZvbyIgZm9ybSB0byBzZXQgYQorICBiZXR0ZXIgZXhhbXBsZSwgaW5zdGVhZCBvZiB0aGUgImdpdC1mb28iIGZvcm0gKHdoaWNoIGlzIGFuIGFjY2VwdGFibGUKKyAgZm9ybSBpZiB5b3UgaGF2ZSAiUEFUSD0kKGdpdCAtLWV4ZWMtcGF0aCk6JFBBVEgiIGluIHlvdXIgc2NyaXB0KQorCisqIE1hbnkgY29tbWFuZHMgZGlkIG5vdCB1c2UgdGhlIGNvcnJlY3Qgd29ya2luZyB0cmVlIGxvY2F0aW9uIHdoZW4gdXNlZAorICB3aXRoIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQgc2V0dGluZ3MuCisKKyogU29tZSBzeXN0ZW1zIG5lZWQgdG8gdXNlIGNvbXBhdGliaWxpdHkgZm5tYXRjaCBhbmQgcmVnZXggbGlicmFyaWVzCisgIGluZGVwZW5kZW50IGZyb20gZWFjaCBvdGhlcjsgdGhlIGNvbXBhdC8gYXJlYSBoYXMgYmVlbiByZW9yZ2FuaXplZCB0bworICBhbGxvdyB0aGlzLgorCisKKyogImdpdCBhcHBseSAtLXVuaWRpZmYtemVybyIgaW5jb3JyZWN0bHkgYXBwbGllZCBhIC1VMCBwYXRjaCB0aGF0IGluc2VydHMKKyAgYSBuZXcgbGluZSBiZWZvcmUgdGhlIHNlY29uZCBsaW5lLgorCisqICJnaXQgYmxhbWUgLWMiIGRpZCBub3QgZXhhY3RseSB3b3JrIGxpa2UgImdpdCBhbm5vdGF0ZSIgd2hlbiByYW5nZQorICBib3VuZGFyaWVzIGFyZSBpbnZvbHZlZC4KKworKiAiZ2l0IGNoZWNrb3V0IGZpbGUiIHdoZW4gZmlsZSBpcyBzdGlsbCB1bm1lcmdlZCBjaGVja2VkIG91dCBjb250ZW50cyBmcm9tCisgIGEgcmFuZG9tIGhpZ2ggb3JkZXIgc3RhZ2UsIHdoaWNoIHdhcyBjb25mdXNpbmcuCisKKyogImdpdCBjbG9uZSAkdGhlcmUgJGhlcmUvIiB3aXRoIGV4dHJhIHRyYWlsaW5nIHNsYXNoZXMgYWZ0ZXIgZXhwbGljaXQKKyAgbG9jYWwgZGlyZWN0b3J5IG5hbWUgJGhlcmUgZGlkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgorCisqICJnaXQgZGlmZiIgb24gdHJhY2tlZCBjb250ZW50cyB3aXRoIENSTEYgbGluZSBlbmRpbmdzIGRpZCBub3QgZHJpdmUgImxlc3MiCisgIGludGVsbGlnZW50bHkgd2hlbiBzaG93aW5nIGFkZGVkIG9yIHJlbW92ZWQgbGluZXMuCisKKyogImdpdCBkaWZmIC0tZGlyc3RhdCAtTSIgZGlkIG5vdCBhZGQgY2hhbmdlcyBpbiBzdWJkaXJlY3RvcmllcyB1cAorICBjb3JyZWN0bHkgZm9yIHJlbmFtZWQgcGF0aHMuCisKKyogImdpdCBkaWZmIC0tY3VtdWxhdGl2ZSIgZGlkIG5vdCBpbXBseSAiLS1kaXJzdGF0Ii4KKworKiAiZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyIgZGlkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgorCisqICJnaXQgZ3VpIiBhbGxvd2VkIHVzZXJzIHRvIGZlZWQgcGF0Y2ggd2l0aG91dCBhbnkgY29udGV4dCB0byBiZSBhcHBsaWVkLgorCisqICJnaXQgZ3VpIiBib3RjaGVkIHBhcnNpbmcgImRpZmYiIG91dHB1dCB3aGVuIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHR3bworICBkYXNoZXMgYW5kIGEgc3BhY2UgZ2V0cyByZW1vdmVkIG9yIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHR3byBwbHVzZXMKKyAgYW5kIGEgc3BhY2UgZ2V0cyBhZGRlZC4KKworKiAiZ2l0IGd1aSIgdHJhbnNsYXRpb24gdXBkYXRlcyBhbmQgaTE4biBmaXhlcy4KKworKiAiZ2l0IGluZGV4LXBhY2siIGlzIG1vcmUgY2FyZWZ1bCBhZ2FpbnN0IGRpc2sgY29ycnVwdGlvbiB3aGlsZSBjb21wbGV0aW5nCisgIGEgdGhpbiBwYWNrLgorCisqICJnaXQgbG9nIC1pIC0tZ3JlcD1wYXR0ZXJuIiBkaWQgbm90IGlnbm9yZSBjYXNlOyBuZWl0aGVyICJnaXQgbG9nIC1FCisgIC0tZ3JlcD1wYXR0ZXJuIiB0cmlnZ2VyZWQgZXh0ZW5kZWQgcmVnZXhwLgorCisqICJnaXQgbG9nIC0tcHJldHR5PSIlYWQiIC0tZGF0ZT1zaG9ydCIgZGlkIG5vdCB1c2Ugc2hvcnQgZm9ybWF0IHdoZW4KKyAgc2hvd2luZyB0aGUgdGltZXN0YW1wLgorCisqICJnaXQgbG9nIC0tYXV0aG9yPWF1dGhvciIgbWF0Y2ggaW5jb3JyZWN0bHkgbWF0Y2hlZCB3aXRoIHRoZQorICB0aW1lc3RhbXAgcGFydCBvZiAiYXV0aG9yICIgbGluZSBpbiBjb21taXQgb2JqZWN0cy4KKworKiAiZ2l0IGxvZyAtRiAtLWF1dGhvcj1hdXRob3IiIGRpZCBub3Qgd29yayBhdCBhbGwuCisKKyogQnVpbGQgcHJvY2VkdXJlIGZvciAiZ2l0IHNoZWxsIiB0aGF0IHVzZWQgc3R1YiB2ZXJzaW9ucyBvZiBzb21lCisgIGZ1bmN0aW9ucyBhbmQgZ2xvYmFscyB3YXMgbm90IHVuZGVyc3Rvb2QgYnkgbGlua2VycyBvbiBzb21lIHBsYXRmb3Jtcy4KKworKiAiZ2l0IHN0YXNoIiB3YXMgZm9vbGVkIGJ5IGEgc3RhdC1kaXJ0eSBidXQgb3RoZXJ3aXNlIHVubW9kaWZpZWQgcGF0aHMKKyAgYW5kIHJlZnVzZWQgdG8gd29yayB1bnRpbCB0aGUgdXNlciByZWZyZXNoZWQgdGhlIGluZGV4LgorCisqICJnaXQgc3ZuIiB3YXMgYnJva2VuIG9uIFBlcmwgYmVmb3JlIDUuOCB3aXRoIHJlY2VudCBmaXhlcyB0byByZWR1Y2UKKyAgdXNlIG9mIHRlbXBvcmFyeSBmaWxlcy4KKworKiAiZ2l0IHZlcmlmeS1wYWNrIC12IiBkaWQgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4gZ2l2ZW4gbW9yZSB0aGFuIG9uZQorICBwYWNrZmlsZS4KKworQWxzbyBjb250YWlucyBtYW55IGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDU3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjMudHh0CkBAIC0wLDAgKzEsMTE3IEBACitHSVQgdjEuNi4wLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4wLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCIgZGlkIG5vdCBob25vciBjb3JlLmF1dG9jcmxmIHdoaWxlCisgIC0tZm9ybWF0PXRhciBkaWQuCisKKyogQ29udGludWluZyAiZ2l0IHJlYmFzZSAtaSIgd2FzIHZlcnkgY29uZnVzZWQgd2hlbiB0aGUgdXNlciBsZWZ0IG1vZGlmaWVkCisgIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgd2hpbGUgcmVzb2x2aW5nIGNvbmZsaWN0cy4KKworKiBDb250aW51aW5nICJnaXQgcmViYXNlIC1pIiB3YXMgYWxzbyB2ZXJ5IGNvbmZ1c2VkIHdoZW4gdGhlIHVzZXIgbGVmdAorICBzb21lIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBpbmRleCBhZnRlciAiZWRpdCIuCisKKyogImdpdCByZWJhc2UgLWkiIG5vdyBob25vcnMgdGhlIHByZS1yZWJhc2UgaG9vaywganVzdCBsaWtlIHRoZQorICBvdGhlciByZWJhc2UgaW1wbGVtZW50YXRpb25zICJnaXQgcmViYXNlIiBhbmQgImdpdCByZWJhc2UgLW0iLgorCisqICJnaXQgcmViYXNlIC1pIiBpbmNvcnJlY3RseSBhYm9ydGVkIHdoZW4gdGhlcmUgaXMgbm8gY29tbWl0IHRvIHJlcGxheS4KKworKiBCZWhhdmlvdXIgb2YgImdpdCBkaWZmIC0tcXVpZXQiIHdhcyBpbmNvbnNpc3RlbnQgd2l0aCAiZGlmZiAtLWV4aXQtY29kZSIKKyAgd2l0aCB0aGUgb3V0cHV0IHJlZGlyZWN0ZWQgdG8gL2Rldi9udWxsLgorCisqICJnaXQgZGlmZiAtLW5vLWluZGV4IiBvbiBiaW5hcnkgZmlsZXMgbm8gbG9uZ2VyIG91dHB1dHMgYSBib2d1cworICAiZGlmZiAtLWdpdCIgaGVhZGVyIGxpbmUuCisKKyogImdpdCBkaWZmIiBodW5rIGhlYWRlciBwYXR0ZXJucyB3aXRoIG11bHRpcGxlIGVsZW1lbnRzIHNlcGFyYXRlZCBieSBMRgorICB3ZXJlIG5vdCB1c2VkIGNvcnJlY3RseS4KKworKiBIdW5rIGhlYWRlcnMgaW4gImdpdCBkaWZmIiBkZWZhdWx0IHRvIHVzaW5nIGV4dGVuZGVkIHJlZ3VsYXIKKyAgZXhwcmVzc2lvbnMsIGZpeGluZyBzb21lIG9mIHRoZSBpbnRlcm5hbCBwYXR0ZXJucyBvbiBub24tR05VCisgIHBsYXRmb3Jtcy4KKworKiBOZXcgY29uZmlnICJkaWZmLioueGZ1bmNuYW1lIiBleHBvc2VzIGV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgZm9yIHVzZXIgc3BlY2lmaWVkIGh1bmsgaGVhZGVyIHBhdHRlcm5zLgorCisqICJnaXQgZ2MiIHdoZW4gZWplY3Rpbmcgb3RoZXJ3aXNlIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSBwYWNrZmlsZXMgaW50bworICBsb29zZSBmb3JtIGxlYWtlZCBtZW1vcnkuCisKKyogImdpdCBpbmRleC1wYWNrIiB3YXMgcmVjZW50bHkgYnJva2VuIGFuZCBtaXNoYW5kbGVkIG9iamVjdHMgYWRkZWQgYnkKKyAgdGhpbi1wYWNrIGNvbXBsZXRpb24gcHJvY2Vzc2luZyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCisKKyogImdpdCBpbmRleC1wYWNrIiB3YXMgcmVjZW50bHkgYnJva2VuIGFuZCBtaXNiZWhhdmVkIHdoZW4gcnVuIGZyb20gaW5zaWRlCisgIC5naXQvb2JqZWN0cy9wYWNrLyBkaXJlY3RvcnkuCisKKyogImdpdCBzdGFzaCBhcHBseSBzYXNoQHsxfSIgd2FzIGZpeGVkIHRvIGVycm9yIG91dC4gIFByaW9yIHZlcnNpb25zCisgIHdvdWxkIGhhdmUgYXBwbGllZCBzdGFzaEB7MH0gaW5jb3JyZWN0bHkuCisKKyogImdpdCBzdGFzaCBhcHBseSIgbm93IG9mZmVycyBhIGJldHRlciBzdWdnZXN0aW9uIG9uIGhvdyB0byBjb250aW51ZQorICBpZiB0aGUgd29ya2luZyB0cmVlIGlzIGN1cnJlbnRseSBkaXJ0eS4KKworKiAiZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0lKHN1YmplY3QpIiBmaXhlZCBmb3IgY29tbWl0cyB3aXRoIG5vCisgIG5vIG5ld2xpbmUgaW4gdGhlIG1lc3NhZ2UgYm9keS4KKworKiAiZ2l0IHJlbW90ZSIgZml4ZWQgdG8gcHJvdGVjdCBwcmludGYgZnJvbSB1c2VyIGlucHV0LgorCisqICJnaXQgcmVtb3RlIHNob3cgLXYiIG5vdyBkaXNwbGF5cyBhbGwgVVJMcyBvZiBhIHJlbW90ZS4KKworKiAiZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCIgd2FzIGNvbmZ1c2VkIHdoZW4gYnJhbmNoIGFscmVhZHkgZXhpc3RlZC4KKworKiAiZ2l0IGNoZWNrb3V0IC1xIiBvbmNlIGFnYWluIHN1cHByZXNzZXMgdGhlIGxvY2FsbHkgbW9kaWZpZWQgZmlsZSBsaXN0LgorCisqICJnaXQgY2xvbmUgLXEiLCAiZ2l0IGZldGNoIC1xIiBhc2tzIHJlbW90ZSBzaWRlIHRvIG5vdCBzZW5kCisgIHByb2dyZXNzIG1lc3NhZ2VzLCBhY3R1YWxseSBtYWtpbmcgdGhlaXIgb3V0cHV0IHF1aWV0LgorCisqIENyb3NzLWRpcmVjdG9yeSByZW5hbWVzIGFyZSBubyBsb25nZXIgdXNlZCB3aGVuIGNyZWF0aW5nIHBhY2tzLiAgVGhpcworICBhbGxvd3MgbW9yZSBncmFjZWZ1bCBiZWhhdmlvciBvbiBmaWxlc3lzdGVtcyBsaWtlIHNzaGZzLgorCisqIFN0YWxlIHRlbXBvcmFyeSBmaWxlcyB1bmRlciAkR0lUX0RJUi9vYmplY3RzL3BhY2sgYXJlIG5vdyBjbGVhbmVkIHVwCisgIGF1dG9tYXRpY2FsbHkgYnkgImdpdCBwcnVuZSIuCisKKyogImdpdCBtZXJnZSIgb25jZSBhZ2FpbiByZW1vdmVzIGRpcmVjdG9yaWVzIGFmdGVyIHRoZSBsYXN0IGZpbGUgaGFzCisgIGJlZW4gcmVtb3ZlZCBmcm9tIGl0IGR1cmluZyB0aGUgbWVyZ2UuCisKKyogImdpdCBtZXJnZSIgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUgc3RydWN0dXJlIGl0c2VsZiB3aGVuCisgIGVudW1lcmF0aW5nIHRoZSBwYXJlbnRzIG9mIHRoZSByZXN1bHRpbmcgY29tbWl0LgorCisqICJnaXQgYmxhbWUgLUMgLUMiIG5vIGxvbmdlciBzZWdmYXVsdHMgd2hpbGUgdHJ5aW5nIHRvIHBhc3MgYmxhbWUgaWYKKyAgIGl0IGVuY291bnRlcnMgYSBzdWJtb2R1bGUgcmVmZXJlbmNlLgorCisqICJnaXQgcm0iIGluY29ycmVjdGx5IGNsYWltZWQgdGhhdCB5b3UgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zIHdoZW4gYQorICBwYXRoIHdhcyBtZXJlbHkgc3RhdC1kaXJ0eS4KKworKiAiZ2l0IHN2biIgZml4ZWQgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIHdoZW4gJ3NldC10cmVlJyBmYWlsZWQsCisgICBpbnN0ZWFkIG9mIGEgUGVybCBjb21waWxlIGVycm9yLgorCisqICJnaXQgc3VibW9kdWxlIiBmaXhlZCB0byBoYW5kbGUgY2hlY2tpbmcgb3V0IGEgZGlmZmVyZW50IGNvbW1pdAorICB0aGFuIEhFQUQgYWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBzdWJtb2R1bGUuCisKKyogVGhlICJnaXQgY29tbWl0IiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlcmUgYXJlIHN0aWxsIHVubWVyZ2VkCisgIGZpbGVzIHByZXNlbnQgd2FzIGNsYXJpZmllZCB0byBtYXRjaCAiZ2l0IHdyaXRlLXRyZWUiLgorCisqICJnaXQgaW5pdCIgd2FzIGNvbmZ1c2VkIHdoZW4gY29yZS5iYXJlIG9yIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBhcmUgc2V0CisgIGluIHN5c3RlbSBvciB1c2VyIGdsb2JhbCBjb25maWd1cmF0aW9uIGZpbGUgYnkgbWlzdGFrZS4gIFdoZW4gLS1iYXJlIG9yCisgIC0tc2hhcmVkIGlzIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdGhlc2Ugbm93IG92ZXJyaWRlIHN1Y2gKKyAgc2V0dGluZ3MgbWFkZSBvdXRzaWRlIHRoZSByZXBvc2l0b3JpZXMuCisKKyogU29tZSBzZWdmYXVsdHMgZHVlIHRvIHVuY2F1Z2h0IE5VTEwgcG9pbnRlcnMgd2VyZSBmaXhlZCBpbiBtdWx0aXBsZQorICB0b29scyBzdWNoIGFzIGFwcGx5LCByZXNldCwgdXBkYXRlLWluZGV4LgorCisqIFNvbGFyaXMgYnVpbGRzIG5vdyBkZWZhdWx0IHRvIE9MRF9JQ09OVj0xIHRvIGF2b2lkIGNvbXBpbGUgd2FybmluZ3M7CisgIFNvbGFyaXMgOCBkb2VzIG5vdCBkZWZpbmUgTkVFRFNfTElCSUNPTlYgYnkgZGVmYXVsdC4KKworKiAiR2l0LnBtIiB0ZXN0cyByZWxpZWQgb24gdW5uZWNlc3NhcmlseSBtb3JlIHJlY2VudCB2ZXJzaW9uIG9mIFBlcmwuCisKKyogImdpdHdlYiIgdHJpZ2dlcmVkIHVuZGVmIHdhcm5pbmcgb24gY29tbWl0cyB3aXRob3V0IGxvZyBtZXNzYWdlcy4KKworKiAiZ2l0d2ViIiB0cmlnZ2VyZWQgdW5kZWYgd2FybmluZ3Mgb24gbWlzc2luZyB0cmVlcy4KKworKiAiZ2l0d2ViIiBub3cgcmVtb3ZlcyBQQVRIX0lORk8gZnJvbSBpdHMgVVJMcyBzbyB1c2VycyBkb24ndCBoYXZlCisgIHRvIG1hbnVhbGx5IHNldCB0aGUgVVJMIGluIHRoZSBnaXR3ZWIgY29uZmlndXJhdGlvbi4KKworKiBCYXNoIGNvbXBsZXRpb24gcmVtb3ZlZCBzdXBwb3J0IGZvciBsZWdhY3kgImdpdC1mZXRjaCIsICJnaXQtcHVzaCIKKyAgYW5kICJnaXQtcHVsbCIgYXMgdGhlc2UgYXJlIG5vIGxvbmdlciBpbnN0YWxsZWQuICBEYXNobGVzcyBmb3JtCisgICgiZ2l0IGZldGNoIikgaXMgc3RpbGwgaG93ZXZlciBzdXBwb3J0ZWQuCisKK01hbnkgb3RoZXIgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyMjY2MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNC50eHQKQEAgLTAsMCArMSwzOSBAQAorR0lUIHYxLjYuMC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICdnaXQgYWRkIC1wJyBzYWlkICJObyBjaGFuZ2VzIiB3aGVuIG9ubHkgYmluYXJ5IGZpbGVzIHdlcmUgY2hhbmdlZC4KKworKiAnZ2l0IGFyY2hpdmUnIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgaW4gYmFyZSByZXBvc2l0b3JpZXMuCisKKyogJ2dpdCBjaGVja291dCAtdCAtYiBuZXdicmFuY2gnIHdoZW4geW91IGFyZSBvbiBkZXRhY2hlZCBIRUFEIHdhcyBicm9rZW4uCisKKyogd2hlbiB3ZSByZWZ1c2UgdG8gZGV0ZWN0IHJlbmFtZXMgYmVjYXVzZSB0aGVyZSBhcmUgdG9vIG1hbnkgbmV3IG9yCisgIGRlbGV0ZWQgZmlsZXMsICdnaXQgZGlmZicgZGlkIG5vdCBzYXkgaG93IG1hbnkgdGhlcmUgYXJlLgorCisqICdnaXQgcHVzaCAtLW1pcnJvcicgdHJpZWQgYW5kIGZhaWxlZCB0byBwdXNoIHRoZSBzdGFzaDsgdGhlcmUgaXMgbm8KKyAgcG9pbnQgaW4gc2VuZGluZyBpdCB0byBiZWdpbiB3aXRoLgorCisqICdnaXQgcHVzaCcgZGlkIG5vdCB1cGRhdGUgdGhlIHJlbW90ZSB0cmFja2luZyByZWZlcmVuY2UgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKyAgcmVmIG9uIHRoZSByZW1vdGUgZW5kIGhhcHBlbmVkIHRvIGJlIGFscmVhZHkgdXAgdG8gZGF0ZS4KKworKiAnZ2l0IHB1bGwgJHRoZXJlICRicmFuY2g6JGN1cnJlbnRfYnJhbmNoJyBkaWQgbm90IHdvcmsgd2hlbiB5b3Ugd2VyZSBvbgorICBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybi4KKworKiB3aGVuIGdpdmluZyB1cCByZXNvbHZpbmcgYSBjb25mbGljdGVkIG1lcmdlLCAnZ2l0IHJlc2V0IC0taGFyZCcgZmFpbGVkCisgIHRvIHJlbW92ZSBuZXcgcGF0aHMgZnJvbSB0aGUgd29ya2luZyB0cmVlLgorCisqICdnaXQgc2VuZC1lbWFpbCcgaGFkIGEgc21hbGwgZmQgbGVhayB3aGlsZSBzY2FubmluZyBkaXJlY3RvcnkuCisKKyogJ2dpdCBzdGF0dXMnIGluY29ycmVjdGx5IHJlcG9ydGVkIGEgc3VibW9kdWxlIGRpcmVjdG9yeSBhcyBhbiB1bnRyYWNrZWQKKyAgZGlyZWN0b3J5LgorCisqICdnaXQgc3ZuJyB1c2VkIGRlcHJlY2F0ZWQgJ2dpdC1mb28nIGZvcm0gb2Ygc3ViY29tbWFuZCBpbnZvY2F0aW9uLgorCisqICdnaXQgdXBkYXRlLXJlZiAtZCcgdG8gcmVtb3ZlIGEgcmVmZXJlbmNlIGRpZCBub3QgaG9ub3IgLS1uby1kZXJlZiBvcHRpb24uCisKKyogUGx1Z2dlZCBzbWFsbCBtZW1sZWFrcyBoZXJlIGFuZCB0aGVyZS4KKworKiBBbHNvIGNvbnRhaW5zIG1hbnkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4YmI5NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNS50eHQKQEAgLTAsMCArMSw1NiBAQAorR0lUIHYxLjYuMC41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgY2hlY2tvdXQiIHVzZWQgdG8gY3Jhc2ggd2hlbiB5b3VyIEhFQUQgd2FzIHBvaW50aW5nIGF0IGEgZGVsZXRlZAorICBicmFuY2guCisKKyogImdpdCBjaGVja291dCIgZnJvbSBhbiB1bi1jaGVja2VkLW91dCBzdGF0ZSBkaWQgbm90IGFsbG93IHN3aXRjaGluZyBvdXQKKyAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoLgorCisqICJnaXQgZGlmZiIgYWx3YXlzIGFsbG93ZWQgR0lUX0VYVEVSTkFMX0RJRkYgYW5kIC0tbm8tZXh0LWRpZmYgd2FzIG5vLW9wIGZvcgorICB0aGUgY29tbWFuZC4KKworKiBHaXZpbmcgMyBvciBtb3JlIHRyZWUtaXNoIHRvICJnaXQgZGlmZiIgaXMgc3VwcG9zZWQgdG8gc2hvdyB0aGUgY29tYmluZWQKKyAgZGlmZiBmcm9tIHNlY29uZCBhbmQgc3Vic2VxdWVudCB0cmVlcyB0byB0aGUgZmlyc3Qgb25lLCBidXQgdGhlIG9yZGVyIHdhcworICBzY3Jld2VkIHVwLgorCisqICJnaXQgZmFzdC1leHBvcnQiIGRpZCBub3QgZXhwb3J0IGFsbCB0YWdzLgorCisqICJnaXQgbHMtZmlsZXMgLS13aXRoLXRyZWU9PHRyZWU+IiBkaWQgbm90IHdvcmsgd2l0aCBvcHRpb25zIG90aGVyCisgIHRoYW4gLWMsIG1vc3Qgbm90YWJseSB3aXRoIC1tLgorCisqICJnaXQgcGFjay1vYmplY3RzIiBkaWQgbm90IG1ha2UgaXRzIGJlc3QgZWZmb3J0IHRvIGhvbm9yIC0tbWF4LXBhY2stc2l6ZQorICBvcHRpb24gd2hlbiBhIHNpbmdsZSBmaXJzdCBvYmplY3QgYWxyZWFkeSBidXN0ZWQgdGhlIGdpdmVuIGxpbWl0IGFuZAorICBwbGFjZWQgbWFueSBvYmplY3RzIGluIGEgc2luZ2xlIHBhY2suCisKKyogImdpdC1wNCIgZmFzdCBpbXBvcnQgZnJvbnRlbmQgd2FzIHRvbyBlYWdlciB0byB0cmlnZ2VyIGl0cyBrZXl3b3JkIGV4cGFuc2lvbgorICBsb2dpYywgZXZlbiBvbiBhIGtleXdvcmQtbG9va2luZyBzdHJpbmcgdGhhdCBkb2VzIG5vdCBoYXZlIGNsb3NpbmcgJyQnIG9uIHRoZQorICBzYW1lIGxpbmUuCisKKyogImdpdCBwdXNoICR0aGVyZSIgd2hlbiB0aGUgcmVtb3RlICR0aGVyZSBpcyBkZWZpbmVkIGluICRHSVRfRElSL2JyYW5jaGVzLyR0aGVyZQorICBiZWhhdmVzIG1vcmUgbGlrZSB3aGF0IGNnLXB1c2ggZnJvbSBDb2dpdG8gdXNlZCB0byB3b3JrLgorCisqIHdoZW4gZ2l2aW5nIHVwIHJlc29sdmluZyBhIGNvbmZsaWN0ZWQgbWVyZ2UsICJnaXQgcmVzZXQgLS1oYXJkIiBmYWlsZWQKKyAgdG8gcmVtb3ZlIG5ldyBwYXRocyBmcm9tIHRoZSB3b3JraW5nIHRyZWUuCisKKyogImdpdCB0YWciIGRpZCBub3QgY29tcGxhaW4gd2hlbiBnaXZlbiBtdXR1YWxseSBpbmNvbXBhdGlibGUgc2V0IG9mIG9wdGlvbnMuCisKKyogVGhlIG1lc3NhZ2UgY29uc3RydWN0ZWQgaW4gdGhlIGludGVybmFsIGVkaXRvciB3YXMgZGlzY2FyZGVkIHdoZW4gImdpdAorICB0YWcgLXMiIGZhaWxlZCB0byBzaWduIHRoZSBtZXNzYWdlLCB3aGljaCB3YXMgb2Z0ZW4gY2F1c2VkIGJ5IHRoZSB1c2VyCisgIG5vdCBjb25maWd1cmluZyBHUEcgY29ycmVjdGx5LgorCisqICJtYWtlIGNoZWNrIiBjYW5ub3QgYmUgcnVuIHdpdGhvdXQgc3BhcnNlOyBwZW9wbGUgbWF5IGhhdmUgbWVhbnQgdG8gc2F5CisgICJtYWtlIHRlc3QiIGluc3RlYWQsIHNvIHN1Z2dlc3QgdGhhdC4KKworKiBJbnRlcm5hbCBkaWZmIG1hY2hpbmVyeSBoYWQgYSBjb3JuZXIgY2FzZSBwZXJmb3JtYW5jZSBidWcgdGhhdCBjaG9rZWQgb24KKyAgYSBsYXJnZSBmaWxlIHdpdGggbWFueSByZXBlYXRlZCBjb250ZW50cy4KKworKiAiZ2l0IHJlcGFjayIgdXNlZCB0byBncmFiIG9iamVjdHMgb3V0IG9mIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwCisgIGludG8gYSBuZXcgcGFjay4KKworKiBNYW55IHVuc2FmZSBjYWxsIHRvIHNwcmludGYoKSBzdHlsZSB2YXJhcmdzIGZ1bmN0aW9ucyBhcmUgY29ycmVjdGVkLgorCisqIEFsc28gY29udGFpbnMgcXVpdGUgYSBmZXcgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlY2UxZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNi50eHQKQEAgLTAsMCArMSwzMyBAQAorR0lUIHYxLjYuMC42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIDEuNi4wLjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBmc2NrIiBoYWQgYSBkZWVwIHJlY3Vyc2lvbiB0aGF0IHdhc3RlZCBzdGFjayBzcGFjZS4KKworICogImdpdCBmYXN0LWV4cG9ydCIgYW5kICJnaXQgZmFzdC1pbXBvcnQiIGNob2tlZCBvbiBhbiBvbGQgc3R5bGUKKyAgIGFubm90YXRlZCB0YWcgdGhhdCBsYWNrIHRoZSB0YWdnZXIgaW5mb3JtYXRpb24uCisKKyAqICJnaXQgbWVyZ2V0b29sIC0tIGZpbGUiIGRpZCBub3QgY29ycmVjdGx5IHNraXAgIi0tIiBtYXJrZXIgdGhhdAorICAgc2lnbmFscyB0aGUgZW5kIG9mIG9wdGlvbnMgbGlzdC4KKworICogImdpdCBzaG93ICR0YWciIHNlZ2ZhdWx0ZWQgd2hlbiBhbiBhbm5vdGF0ZWQgJHRhZyBwb2ludGVkIGF0IGEKKyAgIG5vbmV4aXN0ZW50IG9iamVjdC4KKworICogImdpdCBzaG93IDI+ZXJyb3IiIHdoZW4gdGhlIHN0YW5kYXJkIG91dHB1dCBpcyBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0ZWQKKyAgIHRvIHRoZSBwYWdlciByZWRpcmVjdGVkIHRoZSBzdGFuZGFyZCBlcnJvciB0byB0aGUgcGFnZXIgYXMgd2VsbDsgdGhlcmUKKyAgIHdhcyBubyBuZWVkIHRvLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgY29ycmVjdGx5IGhhbmRsZSBsaXN0IG9mIGFkZHJlc3NlcyB3aGVuCisgICB0aGV5IGhhZCBxdW90ZWQgY29tbWEgKGUuZy4gIkxhc3RuYW1lLCBHaXZlbm5hbWUiIDxtYWlsQGFkZHJlLnNzPikuCisKKyAqIExvZ2ljIHRvIGRpc2NvdmVyIGJyYW5jaCBhbmNlc3RyeSBpbiAiZ2l0IHN2biIgd2FzIHVucmVsaWFibGUgd2hlbgorICAgdGhlIHByb2Nlc3MgdG8gZmV0Y2ggaGlzdG9yeSB3YXMgaW50ZXJydXB0ZWQuCisKKyAqIFJlbW92ZWQgc3VwcG9ydCBmb3IgYW4gb2Jzb2xldGUgZ2l0d2ViIHJlcXVlc3QgVVJJLCB3aG9zZQorICAgaW1wbGVtZW50YXRpb24gcmFuICJnaXQgZGlmZiIgUG9yY2VsYWluLCBpbnN0ZWFkIG9mIHVzaW5nIHBsdW1iaW5nLAorICAgd2hpY2ggd291bGQgaGF2ZSBydW4gYW4gZXh0ZXJuYWwgZGlmZiBjb21tYW5kIHNwZWNpZmllZCBpbiB0aGUKKyAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhcyB0aGUgZ2l0d2ViIHVzZXIuCisKK0Fsc28gY29udGFpbnMgbnVtZXJvdXMgZG9jdW1lbnRhdGlvbiB0eXBvZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2VmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLnR4dApAQCAtMCwwICsxLDI1OCBAQAorR0lUIHYxLjYuMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXNlciB2aXNpYmxlIGNoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhlIGRlZmF1bHQgTWFrZWZpbGUgc2V0dGluZ3MsIG1vc3Qgb2YgdGhlIHByb2dyYW1zIGFyZSBub3cKK2luc3RhbGxlZCBvdXRzaWRlIHlvdXIgJFBBVEgsIGV4Y2VwdCBmb3IgImdpdCIsICJnaXRrIiBhbmQKK3NvbWUgc2VydmVyIHNpZGUgcHJvZ3JhbXMgdGhhdCBuZWVkIHRvIGJlIGFjY2Vzc2libGUgZm9yIHRlY2huaWNhbAorcmVhc29ucy4gIEludm9raW5nIGEgZ2l0IHN1YmNvbW1hbmQgYXMgImdpdC14eXp6eSIgZnJvbSB0aGUgY29tbWFuZAorbGluZSBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIGVhcmx5IDIwMDYgKGFuZCBvZmZpY2lhbGx5IGFubm91bmNlZCBpbgorMS41LjQgcmVsZWFzZSBub3Rlcyk7IHVzZSBvZiB0aGVtIGZyb20geW91ciBzY3JpcHRzIGFmdGVyIGFkZGluZworb3V0cHV0IGZyb20gImdpdCAtLWV4ZWMtcGF0aCIgdG8gdGhlICRQQVRIIGlzIHN0aWxsIHN1cHBvcnRlZCBpbiB0aGlzCityZWxlYXNlLCBidXQgdXNlcnMgYXJlIGFnYWluIHN0cm9uZ2x5IGVuY291cmFnZWQgdG8gYWRqdXN0IHRoZWlyCitzY3JpcHRzIHRvIHVzZSAiZ2l0IHh5enp5IiBmb3JtLCBhcyB3ZSB3aWxsIHN0b3AgaW5zdGFsbGluZworImdpdC14eXp6eSIgaGFyZGxpbmtzIGZvciBidWlsdC1pbiBjb21tYW5kcyBpbiBsYXRlciByZWxlYXNlcy4KKworQW4gZWFybGllciBjaGFuZ2UgdG8gcGFnZSAiZ2l0IHN0YXR1cyIgb3V0cHV0IHdhcyBvdmVyd2hlbG1pbmdseSB1bnBvcHVsYXIKK2FuZCBoYXMgYmVlbiByZXZlcnRlZC4KKworU291cmNlIGNoYW5nZXMgbmVlZGVkIGZvciBwb3J0aW5nIHRvIE1pbkdXIGVudmlyb25tZW50IGFyZSBub3cgYWxsIGluIHRoZQorbWFpbiBnaXQuZ2l0IGNvZGViYXNlLgorCitCeSBkZWZhdWx0LCBwYWNrZmlsZXMgY3JlYXRlZCB3aXRoIHRoaXMgdmVyc2lvbiB1c2VzIGRlbHRhLWJhc2Utb2Zmc2V0CitlbmNvZGluZyBpbnRyb2R1Y2VkIGluIHYxLjQuNC4gIFBhY2sgaWR4IGZpbGVzIGFyZSB1c2luZyB2ZXJzaW9uIDIgdGhhdAorYWxsb3dzIGxhcmdlciBwYWNrcyBhbmQgYWRkZWQgcm9idXN0bmVzcyB0aGFua3MgdG8gaXRzIENSQyBjaGVja2luZywKK2ludHJvZHVjZWQgaW4gdjEuNS4yIGFuZCB2MS40LjQuNS4gIElmIHlvdSB3YW50IHRvIGtlZXAgeW91ciByZXBvc2l0b3JpZXMKK2JhY2t3YXJkcyBjb21wYXRpYmxlIHBhc3QgdGhlc2UgdmVyc2lvbnMsIHNldCByZXBhY2sudXNlRGVsdGFCYXNlT2Zmc2V0Cit0byBmYWxzZSBvciBwYWNrLmluZGV4VmVyc2lvbiB0byAxLCByZXNwZWN0aXZlbHkuCisKK1dlIHVzZWQgdG8gcHJldmVudCBzYW1wbGUgaG9vayBzY3JpcHRzIHNoaXBwZWQgaW4gdGVtcGxhdGVzLyBmcm9tCit0cmlnZ2VyaW5nIGJ5IGRlZmF1bHQgYnkgcmVseWluZyBvbiB0aGUgZmFjdCB0aGF0IHdlIGluc3RhbGwgdGhlbSBhcwordW5leGVjdXRhYmxlLCBidXQgb24gc29tZSBmaWxlc3lzdGVtcywgdGhpcyBhcHByb2FjaCBkb2VzIG5vdCB3b3JrLgorVGhleSBhcmUgbm93IHNoaXBwZWQgd2l0aCAiLnNhbXBsZSIgc3VmZml4LiAgSWYgeW91IHdhbnQgdG8gYWN0aXZhdGUKK2FueSBvZiB0aGVzZSBzYW1wbGVzIGFzLWlzLCByZW5hbWUgdGhlbSB0byBkcm9wIHRoZSAiLnNhbXBsZSIgc3VmZml4LAoraW5zdGVhZCBvZiBydW5uaW5nICJjaG1vZCAreCIgb24gdGhlbS4gIEZvciBleGFtcGxlLCB5b3UgY2FuIHJlbmFtZQoraG9va3MvcG9zdC11cGRhdGUuc2FtcGxlIHRvIGhvb2tzL3Bvc3QtdXBkYXRlIHRvIGVuYWJsZSB0aGUgc2FtcGxlCitob29rIHRoYXQgcnVucyB1cGRhdGUtc2VydmVyLWluZm8sIGluIG9yZGVyIHRvIG1ha2UgcmVwb3NpdG9yaWVzCitmcmllbmRseSB0byBkdW1iIHByb3RvY29scyAoaS5lLiBIVFRQKS4KKworR0lUX0NPTkZJRywgd2hpY2ggd2FzIG9ubHkgZG9jdW1lbnRlZCBhcyBhZmZlY3RpbmcgImdpdCBjb25maWciLCBidXQKK2FjdHVhbGx5IGFmZmVjdGVkIGFsbCBnaXQgY29tbWFuZHMsIG5vdyBvbmx5IGFmZmVjdHMgImdpdCBjb25maWciLgorR0lUX0xPQ0FMX0NPTkZJRywgYWxzbyBvbmx5IGRvY3VtZW50ZWQgYXMgYWZmZWN0aW5nICJnaXQgY29uZmlnIiBhbmQKK25vdCBkaWZmZXJlbnQgZnJvbSBHSVRfQ09ORklHIGluIGEgdXNlZnVsIHdheSwgaXMgcmVtb3ZlZC4KKworVGhlICIuZG90ZXN0IiB0ZW1wb3JhcnkgYXJlYSAiZ2l0IGFtIiBhbmQgImdpdCByZWJhc2UiIHVzZSBpcyBub3cgbW92ZWQKK2luc2lkZSB0aGUgJEdJVF9ESVIsIHRvIGF2b2lkIG1pc3Rha2VzIG9mIGFkZGluZyBpdCB0byB0aGUgcHJvamVjdCBieQorYWNjaWRlbnQuCisKK0FuIGFuY2llbnQgbWVyZ2Ugc3RyYXRlZ3kgInN0dXBpZCIgaGFzIGJlZW4gcmVtb3ZlZC4KKworCitVcGRhdGVzIHNpbmNlIHYxLjUuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyogZ2l0LXA0IGluIGNvbnRyaWIgbGVhcm5lZCAiYWxsb3dTdWJtaXQiIGNvbmZpZ3VyYXRpb24gdG8gY29udHJvbCBvbgorICB3aGljaCBicmFuY2ggdG8gYWxsb3cgInN1Ym1pdCIgc3ViY29tbWFuZC4KKworKiBnaXQtZ3VpIGxlYXJuZWQgdG8gc3RhZ2UgY2hhbmdlcyBwZXItbGluZS4KKworKHBvcnRhYmlsaXR5KQorCisqIENoYW5nZXMgZm9yIE1pbkdXIHBvcnQgaGF2ZSBiZWVuIG1lcmdlZCwgdGhhbmtzIHRvIEpvaGFubmVzIFNpeHQgYW5kCisgIGdhbmdzLgorCisqIFNhbXBsZSBob29rIHNjcmlwdHMgc2hpcHBlZCBpbiB0ZW1wbGF0ZXMvIGFyZSBub3cgc3VmZml4ZWQgd2l0aAorICAqLnNhbXBsZS4KKworKiBwZXJsJ3MgaW4tcGxhY2UgZWRpdCAoLWkpIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRob3V0IGJhY2t1cCBmaWxlcyBvbiBXaW5kb3dzOworICBzb21lIHRlc3RzIGFyZSByZXdyaXR0ZW4gdG8gY29wZSB3aXRoIHRoaXMuCisKKyhkb2N1bWVudGF0aW9uKQorCisqIFVwZGF0ZWQgaG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZQorCisqIEdvdCByaWQgb2YgdXNhZ2Ugb2YgImdpdC1mb28iIGZyb20gdGhlIHR1dG9yaWFsIGFuZCBtYWRlIHR5cG9ncmFwaHkKKyAgbW9yZSBjb25zaXN0ZW50LgorCisqIERpc2FtYmlndWF0aW5nICItLSIgYmV0d2VlbiByZXZzIGFuZCBwYXRocyBpcyBmaW5hbGx5IGRvY3VtZW50ZWQuCisKKyhwZXJmb3JtYW5jZSwgcm9idXN0bmVzcywgc2FuaXR5IGV0Yy4pCisKKyogaW5kZXgtcGFjayB1c2VkIHRvbyBtdWNoIG1lbW9yeSB3aGVuIGRlYWxpbmcgd2l0aCBhIGRlZXAgZGVsdGEgY2hhaW4uCisgIFRoaXMgaGFzIGJlZW4gb3B0aW1pemVkLgorCisqIHJlZHVjZWQgZXhjZXNzaXZlIGlubGluaW5nIHRvIHNocmluayBzaXplIG9mIHRoZSAiZ2l0IiBiaW5hcnkuCisKKyogdmVyaWZ5LXBhY2sgY2hlY2tzIHRoZSBvYmplY3QgQ1JDIHdoZW4gdXNpbmcgdmVyc2lvbiAyIGlkeCBmaWxlcy4KKworKiBXaGVuIGFuIG9iamVjdCBpcyBjb3JydXB0IGluIGEgcGFjaywgdGhlIG9iamVjdCBiZWNhbWUgdW51c2FibGUgZXZlbgorICB3aGVuIHRoZSBzYW1lIG9iamVjdCBpcyBhdmFpbGFibGUgaW4gYSBsb29zZSBmb3JtLCAgV2Ugbm93IHRyeSBoYXJkZXIgdG8KKyAgZmFsbCBiYWNrIHRvIHRoZXNlIHJlZHVuZGFudCBvYmplY3RzIHdoZW4gYWJsZS4gIEluIHBhcnRpY3VsYXIsICJnaXQKKyAgcmVwYWNrIC1hIC1mIiBjYW4gYmUgdXNlZCB0byBmaXggc3VjaCBhIGNvcnJ1cHRpb24gYXMgbG9uZyBhcyBuZWNlc3NhcnkKKyAgb2JqZWN0cyBhcmUgYXZhaWxhYmxlLgorCisqIFBlcmZvcm1hbmNlIG9mICJnaXQtYmxhbWUgLUMgLUMiIG9wZXJhdGlvbiBpcyB2YXN0bHkgaW1wcm92ZWQuCisKKyogZ2l0LWNsb25lIGRvZXMgbm90IGNyZWF0ZSByZWZzIGluIGxvb3NlIGZvcm0gYW55bW9yZSAoaXQgYmVoYXZlcyBhcworICBpZiB5b3UgaW1tZWRpYXRlbHkgcmFuIGdpdC1wYWNrLXJlZnMgYWZ0ZXIgY2xvbmluZykuICBUaGlzIHdpbGwgaGVscAorICByZXBvc2l0b3JpZXMgd2l0aCBpbnNhbmVseSBsYXJnZSBudW1iZXIgb2YgcmVmcy4KKworKiBjb3JlLmZzeW5jb2JqZWN0ZmlsZXMgY29uZmlndXJhdGlvbiBjYW4gYmUgdXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgbG9vc2UKKyAgb2JqZWN0cyBjcmVhdGVkIHdpbGwgYmUgZnN5bmMnZWQgKHRoaXMgaXMgb25seSB1c2VmdWwgb24gZmlsZXN5c3RlbXMKKyAgdGhhdCBkb2VzIG5vdCBvcmRlciBkYXRhIHdyaXRlcyBwcm9wZXJseSkuCisKKyogImdpdCBjb21taXQtdHJlZSIgcGx1bWJpbmcgY2FuIG1ha2UgT2N0b3B1cyB3aXRoIG1vcmUgdGhhbiAxNiBwYXJlbnRzLgorICAiZ2l0IGNvbW1pdCIgaGFzIGJlZW4gY2FwYWJsZSBvZiB0aGlzIGZvciBxdWl0ZSBzb21lIHRpbWUuCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworKiBldmVuIG1vcmUgZG9jdW1lbnRhdGlvbiBwYWdlcyBhcmUgbm93IGFjY2Vzc2libGUgdmlhICJtYW4iIGFuZCAiZ2l0IGhlbHAiLgorCisqIEEgbmV3IGVudmlyb25tZW50IHZhcmlhYmxlIEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTIGNhbiBiZSB1c2VkIHRvIHN0b3AKKyAgdGhlIGRpc2NvdmVyeSBwcm9jZXNzIG9mIHRoZSB0b3BsZXZlbCBvZiB3b3JraW5nIHRyZWU7IHRoaXMgbWF5IGJlIHVzZWZ1bAorICB3aGVuIHlvdSBhcmUgd29ya2luZyBpbiBhIHNsb3cgbmV0d29yayBkaXNrIGFuZCBhcmUgb3V0c2lkZSBhbnkgd29ya2luZyB0cmVlLAorICBhcyBiYXNoLWNvbXBsZXRpb24gYW5kICJnaXQgaGVscCIgbWF5IHN0aWxsIG5lZWQgdG8gcnVuIGluIHRoZXNlIHBsYWNlcy4KKworKiBCeSBkZWZhdWx0LCBzdGFzaCBlbnRyaWVzIG5ldmVyIGV4cGlyZS4gIFNldCByZWZsb2dleHBpcmUgaW4gW2djCisgICJyZWZzL3N0YXNoIl0gdG8gYSByZWFzb25hYmxlIHZhbHVlIHRvIGdldCB0cmFkaXRpb25hbCBhdXRvLWV4cGlyYXRpb24KKyAgYmVoYXZpb3VyIGJhY2sKKworKiBMb25nc3RhbmRpbmcgbGF0ZW5jeSBpc3N1ZSB3aXRoIGJhc2ggY29tcGxldGlvbiBzY3JpcHQgaGFzIGJlZW4KKyAgYWRkcmVzc2VkLiAgVGhpcyB3aWxsIG5lZWQgdG8gYmUgYmFja21lcmdlZCB0byAnbWFpbnQnIGxhdGVyLgorCisqIHBhZ2VyLjxjbWQ+IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgdGhlCisgIGRlZmF1bHQgcGFnaW5nIGJlaGF2aW91ciBwZXIgY29tbWFuZC4KKworKiAiZ2l0LWFkZCAtaSIgaGFzIGEgbmV3IGFjdGlvbiAnZS9kaXQnIHRvIGFsbG93IHlvdSBlZGl0IHRoZSBwYXRjaCBodW5rCisgIG1hbnVhbGx5LgorCisqIGdpdC1hbSByZWNvcmRzIHRoZSBvcmlnaW5hbCB0aXAgb2YgdGhlIGJyYW5jaCBpbiBPUklHX0hFQUQgYmVmb3JlIGl0CisgIHN0YXJ0cyBhcHBseWluZyBwYXRjaGVzLgorCisqIGdpdC1hcHBseSBjYW4gaGFuZGxlIGEgcGF0Y2ggdGhhdCB0b3VjaGVzIHRoZSBzYW1lIHBhdGggbW9yZSB0aGFuIG9uY2UKKyAgbXVjaCBiZXR0ZXIgdGhhbiBiZWZvcmUuCisKKyogZ2l0LWFwcGx5IGNhbiBiZSB0b2xkIG5vdCB0byB0cnVzdCB0aGUgbGluZSBjb3VudHMgcmVjb3JkZWQgaW4gdGhlIGlucHV0CisgIHBhdGNoIGJ1dCByZWNvdW50LCB3aXRoIHRoZSBuZXcgLS1yZWNvdW50IG9wdGlvbi4KKworKiBnaXQtYXBwbHkgY2FuIGJlIHRvbGQgdG8gYXBwbHkgYSBwYXRjaCB0byBhIHBhdGggZGVlcGVyIHRoYW4gd2hhdCB0aGUKKyAgcGF0Y2ggcmVjb3JkcyB3aXRoIC0tZGlyZWN0b3J5IG9wdGlvbi4KKworKiBnaXQtYXJjaGl2ZSBjYW4gYmUgdG9sZCB0byBvbWl0IGNlcnRhaW4gcGF0aHMgZnJvbSBpdHMgb3V0cHV0IHVzaW5nCisgIGV4cG9ydC1pZ25vcmUgYXR0cmlidXRlcy4KKworKiBnaXQtYXJjaGl2ZSB1c2VzIHRoZSB6bGliIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwgd2hlbiBjcmVhdGluZworICB6aXAgYXJjaGl2ZS4KKworKiBnaXQtYXJjaGl2ZSdzIGNvbW1hbmQgbGluZSBvcHRpb25zIC0tZXhlYyBhbmQgLS1yZW1vdGUgY2FuIHRha2UgdGhlaXIKKyAgcGFyYW1ldGVycyBhcyBzZXBhcmF0ZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCBzaW1pbGFyIHRvIG90aGVyIGNvbW1hbmRzLgorICBJT1csIGJvdGggIi0tZXhlYz1wYXRoIiBhbmQgIi0tZXhlYyBwYXRoIiBhcmUgbm93IHN1cHBvcnRlZC4KKworKiBXaXRoIC12IG9wdGlvbiwgZ2l0LWJyYW5jaCBkZXNjcmliZXMgdGhlIHJlbW90ZSB0cmFja2luZyBzdGF0aXN0aWNzCisgIHNpbWlsYXIgdG8gdGhlIHdheSBnaXQtY2hlY2tvdXQgcmVwb3J0cyBieSBob3cgbWFueSBjb21taXRzIHlvdXIgYnJhbmNoCisgIGlzIGFoZWFkL2JlaGluZC4KKworKiBnaXQtYnJhbmNoJ3MgLS1jb250YWlucyBvcHRpb24gdXNlZCB0byBhbHdheXMgcmVxdWlyZSBhIGNvbW1pdCBwYXJhbWV0ZXIKKyAgdG8gbGltaXQgdGhlIGJyYW5jaGVzIHdpdGg7IGl0IG5vdyBkZWZhdWx0cyB0byBsaXN0IGJyYW5jaGVzIHRoYXQKKyAgY29udGFpbnMgSEVBRCBpZiB0aGlzIHBhcmFtZXRlciBpcyBvbWl0dGVkLgorCisqIGdpdC1icmFuY2gncyAtLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9uIHVzZWQgdG8gYWx3YXlzIGxpbWl0IHRoZQorICBicmFuY2hlcyByZWxhdGl2ZSB0byB0aGUgSEVBRCwgYnV0IHRoZXkgY2FuIG5vdyB0YWtlIGFuIG9wdGlvbmFsIGNvbW1pdAorICBhcmd1bWVudCB0aGF0IGlzIHVzZWQgaW4gcGxhY2Ugb2YgSEVBRC4KKworKiBnaXQtYnVuZGxlIGNhbiByZWFkIHRoZSByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCisKKyogZ2l0LWNoZXJyeS1waWNrIGNhbiByZXBsYXkgYSByb290IGNvbW1pdCBub3cuCisKKyogZ2l0LWNsb25lIGNhbiBjbG9uZSBmcm9tIGEgcmVtb3RlIHdob3NlIFVSTCB3b3VsZCBiZSByZXdyaXR0ZW4gYnkKKyAgY29uZmlndXJhdGlvbiBzdG9yZWQgaW4gJEhPTUUvLmdpdGNvbmZpZyBub3cuCisKKyogImdpdC1jbG9uZSAtLW1pcnJvciIgaXMgYSBoYW5keSB3YXkgdG8gc2V0IHVwIGEgYmFyZSBtaXJyb3IgcmVwb3NpdG9yeS4KKworKiBnaXQtY3Zzc2VydmVyIGxlYXJuZWQgdG8gcmVzcG9uZCB0byAiY3ZzIGNvIC1jIi4KKworKiBnaXQtZGlmZiAtLWNoZWNrIG5vdyBjaGVja3MgbGVmdG92ZXIgbWVyZ2UgY29uZmxpY3QgbWFya2Vycy4KKworKiAiZ2l0LWRpZmYgLXAiIGxlYXJuZWQgdG8gZ3JhYiBhIGJldHRlciBodW5rIGhlYWRlciBsaW5lcyBpbgorICBCaWJUZXgsIFBhc2NhbC9EZWxwaGksIGFuZCBSdWJ5IGZpbGVzIGFuZCBhbHNvIHBheXMgYXR0ZW50aW9uIHRvCisgIGNoYXB0ZXIgYW5kIHBhcnQgYm91bmRhcnkgaW4gVGVYIGRvY3VtZW50cy4KKworKiBXaGVuIHJlbW90ZSBzaWRlIHVzZWQgdG8gaGF2ZSBicmFuY2ggJ2ZvbycgYW5kIGdpdC1mZXRjaCBmaW5kcyB0aGF0IG5vdworICBpdCBoYXMgYnJhbmNoICdmb28vYmFyJywgaXQgcmVmdXNlcyB0byBsb3NlIHRoZSBleGlzdGluZyByZW1vdGUgdHJhY2tpbmcKKyAgYnJhbmNoIGFuZCBpdHMgcmVmbG9nLiAgVGhlIGVycm9yIG1lc3NhZ2UgaGFzIGJlZW4gaW1wcm92ZWQgdG8gc3VnZ2VzdAorICBwcnVuaW5nIHRoZSByZW1vdGUgaWYgdGhlIHVzZXIgd2FudHMgdG8gcHJvY2VlZCBhbmQgZ2V0IHRoZSBsYXRlc3Qgc2V0CisgIG9mIGJyYW5jaGVzIGZyb20gdGhlIHJlbW90ZSwgaW5jbHVkaW5nIHN1Y2ggJ2Zvby9iYXInLgorCisqIGZhc3QtZXhwb3J0IGxlYXJuZWQgdG8gZXhwb3J0IGFuZCBpbXBvcnQgbWFya3MgZmlsZTsgdGhpcyBjYW4gYmUgdXNlZCB0bworICBpbnRlcmZhY2Ugd2l0aCBmYXN0LWltcG9ydCBpbmNyZW1lbnRhbGx5LgorCisqIGZhc3QtaW1wb3J0IGFuZCBmYXN0LWV4cG9ydCBsZWFybmVkIHRvIGV4cG9ydCBhbmQgaW1wb3J0IGdpdGxpbmtzLgorCisqICJnaXRrIiBsZWZ0IGJhY2tncm91bmQgcHJvY2VzcyBiZWhpbmQgYWZ0ZXIgYmVpbmcgYXNrZWQgdG8gZGlnIHZlcnkgZGVlcAorICBoaXN0b3J5IGFuZCB0aGUgdXNlciBraWxsZWQgdGhlIFVJOyB0aGUgcHJvY2VzcyBpcyBraWxsZWQgd2hlbiB0aGUgVUkgZ29lcworICBhd2F5IG5vdy4KKworKiBnaXQtcmViYXNlIHJlY29yZHMgdGhlIG9yaWdpbmFsIHRpcCBvZiBicmFuY2ggaW4gT1JJR19IRUFEIGJlZm9yZSBpdCBpcworICByZXdvdW5kLgorCisqICJnaXQgcmVyZXJlIiBjYW4gYmUgdG9sZCB0byB1cGRhdGUgdGhlIGluZGV4IHdpdGggYXV0by1yZXVzZWQgcmVzb2x1dGlvbgorICB3aXRoIHJlcmVyZS5hdXRvdXBkYXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyogZ2l0LXJldi1wYXJzZSBsZWFybmVkICRjb21taXReISBhbmQgJGNvbW1pdF5AIG5vdGF0aW9ucyB1c2VkIGluICJsb2ciCisgIGZhbWlseS4gIFRoZXNlIG5vdGF0aW9ucyBhcmUgYXZhaWxhYmxlIGluIGdpdGsgYXMgd2VsbCwgYmVjYXVzZSB0aGUgZ2l0aworICBjb21tYW5kIGludGVybmFsbHkgdXNlcyByZXYtcGFyc2UgdG8gaW50ZXJwcmV0IGl0cyBhcmd1bWVudHMuCisKKyogZ2l0LXJldi1saXN0IGxlYXJuZWQgLS1jaGlsZHJlbiBvcHRpb24gdG8gc2hvdyBjaGlsZCBjb21taXRzIGl0CisgIGVuY291bnRlcmVkIGR1cmluZyB0aGUgdHJhdmVyc2FsLCBpbnN0ZWFkIG9mIHNob3dpbmcgcGFyZW50IGNvbW1pdHMuCisKKyogZ2l0LXNlbmQtbWFpbCBjYW4gdGFsayBub3QganVzdCBvdmVyIFNTTCBidXQgb3ZlciBUTFMgbm93LgorCisqIGdpdC1zaG9ydGxvZyBob25vcnMgY3VzdG9tIG91dHB1dCBmb3JtYXQgc3BlY2lmaWVkIHdpdGggIi0tcHJldHR5PWZvcm1hdDoiLgorCisqICJnaXQtc3Rhc2ggc2F2ZSIgbGVhcm5lZCAtLWtlZXAtaW5kZXggb3B0aW9uLiAgVGhpcyBsZXRzIHlvdSBzdGFzaCBhd2F5IHRoZQorICBsb2NhbCBjaGFuZ2VzIGFuZCBicmluZyB0aGUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4IHRvIHlvdXIgd29ya2luZworICB0cmVlIGZvciBleGFtaW5hdGlvbiBhbmQgdGVzdGluZy4KKworKiBnaXQtc3Rhc2ggYWxzbyBsZWFybmVkIGJyYW5jaCBzdWJjb21tYW5kIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggb3V0IG9mCisgIHN0YXNoZWQgY2hhbmdlcy4KKworKiBnaXQtc3RhdHVzIGdpdmVzIHRoZSByZW1vdGUgdHJhY2tpbmcgc3RhdGlzdGljcyBzaW1pbGFyIHRvIHRoZSB3YXkKKyAgZ2l0LWNoZWNrb3V0IHJlcG9ydHMgYnkgaG93IG1hbnkgY29tbWl0cyB5b3VyIGJyYW5jaCBpcyBhaGVhZC9iZWhpbmQuCisKKyogImdpdC1zdm4gZGNvbW1pdCIgaXMgbm93IGF3YXJlIG9mIGF1dG8tcHJvcHMgc2V0dGluZyB0aGUgc3VidmVyc2lvbiB1c2VyCisgIGhhcy4KKworKiBZb3UgY2FuIHRlbGwgImdpdCBzdGF0dXMgLXUiIHRvIGV2ZW4gbW9yZSBhZ2dyZXNzaXZlbHkgb21pdCBjaGVja2luZworICB1bnRyYWNrZWQgZmlsZXMgd2l0aCAtLXVudHJhY2tlZC1maWxlcz1uby4KKworKiBPcmlnaW5hbCBTSEEtMSB2YWx1ZSBmb3IgInVwZGF0ZS1yZWYgLWQiIGlzIG9wdGlvbmFsIG5vdy4KKworKiBFcnJvciBjb2RlcyBmcm9tIGdpdHdlYiBhcmUgbWFkZSBtb3JlIGRlc2NyaXB0aXZlIHdoZXJlIHBvc3NpYmxlLCByYXRoZXIKKyAgdGhhbiAiNDAzIGZvcmJpZGRlbiIgYXMgd2UgdXNlZCB0byBpc3N1ZSBldmVyeXdoZXJlLgorCisoaW50ZXJuYWwpCisKKyogZ2l0LW1lcmdlIGhhcyBiZWVuIHJlaW1wbGVtZW50ZWQgaW4gQy4KKworCitGaXhlcyBzaW5jZSB2MS41LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjUuNiBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluCit0aGlzIHJlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyAqIGdpdC1jbG9uZSBpZ25vcmVkIGl0cyAtdSBvcHRpb247IHRoZSBmaXggbmVlZHMgdG8gYmUgYmFja3BvcnRlZCB0bworICAgJ21haW50JzsKKworICogZ2l0LW12IHVzZWQgdG8gbG9zZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBjaGFuZ2VzIHRoYXQgYXJlIHN0YWdlZAorICAgYW5kIHRoYXQgYXJlIG9ubHkgaW4gdGhlIHdvcmtpbmcgdHJlZSwgYnkgc3RhZ2luZyBib3RoIGluIHRoZSBpbmRleAorICAgYWZ0ZXIgbW92aW5nIHN1Y2ggYSBwYXRoLgorCisgKiAiZ2l0LXJlYmFzZSAtaSAtcCIgcmV3cm90ZSB0aGUgcGFyZW50cyB0byB3cm9uZyBvbmVzIHdoZW4gYW1lbmRpbmcKKyAgIChlaXRoZXIgZWRpdCBvciBzcXVhc2gpIHdhcyBpbnZvbHZlZCwgYW5kIGRpZCBub3Qgd29yayBjb3JyZWN0bHkKKyAgIHdoZW4gZmFzdCBmb3J3YXJkaW5nLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzU5NGJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4xLnR4dApAQCAtMCwwICsxLDU5IEBACitHSVQgdjEuNi4xLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGFkZCBmcm90ei9uaXRmb2wiIHdoZW4gImZyb3R6IiBpcyBhIHN1Ym1vZHVsZSBzaG91bGQgaGF2ZSBlcnJvcmVkCisgIG91dCwgYnV0IGl0IGRpZG4ndC4KKworKiAiZ2l0IGFwcGx5IiB0b29rIGZpbGUgbW9kZXMgZnJvbSB0aGUgcGF0Y2ggdGV4dCBhbmQgdXBkYXRlZCB0aGUgbW9kZQorICBiaXRzIG9mIHRoZSB0YXJnZXQgdHJlZSBldmVuIHdoZW4gdGhlIHBhdGNoIHdhcyBub3QgYWJvdXQgbW9kZSBjaGFuZ2VzLgorCisqICJnaXQgYmlzZWN0IHZpZXciIG9uIEN5Z3dpbiBkaWQgbm90IGxhdW5jaCBnaXRrCisKKyogImdpdCBjaGVja291dCAkdHJlZSIgZGlkIG5vdCB0cmlnZ2VyIGFuIGVycm9yLgorCisqICJnaXQgY29tbWl0IiB0cmllZCB0byByZW1vdmUgQ09NTUlUX0VESVRNU0cgZnJvbSB0aGUgd29yayB0cmVlIGJ5IG1pc3Rha2UuCisKKyogImdpdCBkZXNjcmliZSAtLWFsbCIgY29tcGxhaW5lZCB3aGVuIGEgY29tbWl0IGlzIGRlc2NyaWJlZCB3aXRoIGEgdGFnLAorICB3aGljaCB3YXMgbm9uc2Vuc2UuCisKKyogImdpdCBkaWZmIC0tbm8taW5kZXggLS0iIGRpZCBub3QgdHJpZ2dlciBuby1pbmRleCAoYWthICJ1c2UgZ2l0LWRpZmYgYXMKKyAgYSByZXBsYWNlbWVudCBvZiBkaWZmIG9uIHVudHJhY2tlZCBmaWxlcyIpIGJlaGF2aW91ci4KKworKiAiZ2l0IGZvcm1hdC1wYXRjaCAtMSBIRUFEIiBvbiBhIHJvb3QgY29tbWl0IGZhaWxlZCB0byBwcm9kdWNlIHBhdGNoCisgIHRleHQuCisKKyogImdpdCBmc2NrIGJyYW5jaCIgZGlkIG5vdCB3b3JrIGFzIGFkdmVydGlzZWQ7IGluc3RlYWQgaXQgYmVoYXZlZCB0aGUgc2FtZQorICB3YXkgYXMgImdpdCBmc2NrIi4KKworKiAiZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JXMiIGRpZCBub3QgaGFuZGxlIGEgbXVsdGktbGluZSBzdWJqZWN0IHRoZQorICBzYW1lIHdheSBhcyBidWlsdC1pbiBsb2cgbGlzdGVycyAoaS5lLiBzaG9ydGxvZywgLS1wcmV0dHk9b25lbGluZSwgZXRjLikKKworKiAiZ2l0IGRhZW1vbiIsIGFuZCAiZ2l0IG1lcmdlLWZpbGUiIGFyZSBtb3JlIGNhcmVmdWwgd2hlbiBmcmVvcGVuIGZhaWxzCisgIGFuZCBiYXJmLCBpbnN0ZWFkIG9mIGdvaW5nIG9uIGFuZCB3cml0aW5nIHRvIHVub3BlbmVkIGZpbGVoYW5kbGUuCisKKyogImdpdCBodHRwLXB1c2giIGRpZCBub3QgbGlrZSBzb21lIFJGQyA0OTE4IGNvbXBsaWFudCBEQVYgc2VydmVyCisgIHJlc3BvbnNlcy4KKworKiAiZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSIgbWlzdGFrZW5seSBvdmVyd3JpdHRlbiBhbiB1bnRyYWNrZWQgZmlsZSBpbiB0aGUKKyAgd29yayB0cmVlIHVwb24gZGVsZXRlL21vZGlmeSBjb25mbGljdC4KKworKiAiZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSIgZGlkbid0IGxlYXZlIHRoZSBpbmRleCB1bm1lcmdlZCBmb3IgZW50cmllcyB3aXRoCisgIHJlbmFtZS9kZWxldGUgY29uZmxpY3RzLgorCisqICJnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIiBjbG9iYmVyZWQgdW50cmFja2VkIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUuCisKKyogImdpdCBtdiAtayIgd2l0aCBtb3JlIHRoYW4gb25lIGVycm9uZW91cyBwYXRocyBtaXNiZWhhdmVkLgorCisqICJnaXQgcmVhZC10cmVlIC1tIC11IiBoZW5jZSBicmFuY2ggc3dpdGNoaW5nIGluY29ycmVjdGx5IGxvc3QgYQorICBzdWJkaXJlY3RvcnkgaW4gcmFyZSBjYXNlcy4KKworKiAiZ2l0IHJlYmFzZSAtaSIgaXNzdWVkIGFuIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2UgdXBvbiBhIHVzZXIgZXJyb3Igb2YKKyAgbWFya2luZyB0aGUgZmlyc3QgY29tbWl0IHRvIGJlICJzcXVhc2giZWQuCisKKyogImdpdCBzaG9ydGxvZyIgZGlkIG5vdCBmb3JtYXQgYSBjb21taXQgbWVzc2FnZSB3aXRoIG11bHRpLWxpbmUKKyAgc3ViamVjdCBjb3JyZWN0bHkuCisKK01hbnkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzN2NiYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMi50eHQKQEAgLTAsMCArMSwzOSBAQAorR0lUIHYxLjYuMS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSBsb2dpYyBmb3IgcmVuYW1lIGRldGVjdGlvbiBpbiBpbnRlcm5hbCBkaWZmIHVzZWQgYnkgY29tbWFuZHMgbGlrZQorICAiZ2l0IGRpZmYiIGFuZCAiZ2l0IGJsYW1lIiBoYXMgYmVlbiBvcHRpbWl6ZWQgdG8gYXZvaWQgbG9hZGluZyB0aGUgc2FtZQorICBibG9iIHJlcGVhdGVkbHkuCisKKyogV2UgZGlkIG5vdCBhbGxvdyB3cml0aW5nIG91dCBhIGJsb2IgdGhhdCBpcyBsYXJnZXIgdGhhbiAyR0IgZm9yIG5vIGdvb2QKKyAgcmVhc29uLgorCisqICJnaXQgZm9ybWF0LXBhdGNoIC1vICRkaXIiLCB3aGVuICRkaXIgaXMgYSByZWxhdGl2ZSBkaXJlY3RvcnksIHVzZWQgaXQKKyAgYXMgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmsgdHJlZSwgbm90IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50CisgIGRpcmVjdG9yeS4KKworKiB2MS42LjEgaW50cm9kdWNlZCBhbiBvcHRpbWl6YXRpb24gZm9yICJnaXQgcHVzaCIgaW50byBhIHJlcG9zaXRvcnkgKEEpCisgIHRoYXQgYm9ycm93cyBpdHMgb2JqZWN0cyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSAoQikgdG8gYXZvaWQgc2VuZGluZworICBvYmplY3RzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiByZXBvc2l0b3J5IEIsIHdoZW4gdGhleSBhcmUgbm90IHlldCB1c2VkCisgIGJ5IHJlcG9zaXRvcnkgQS4gIEhvd2V2ZXIgdGhlIGNvZGUgb24gdGhlICJnaXQgcHVzaCIgc2VuZGVyIHNpZGUgd2FzCisgIGJ1Z2d5IGFuZCBkaWQgbm90IHdvcmsgd2hlbiByZXBvc2l0b3J5IEIgaGFkIG5ldyBvYmplY3RzIHRoYXQgYXJlIG5vdAorICBrbm93biBieSB0aGUgc2VuZGVyLiAgVGhpcyBjYXVzZWQgcHVzaGluZyBpbnRvIGEgImZvcmtlZCIgcmVwb3NpdG9yeQorICBzZXJ2ZWQgYnkgdjEuNi4xIHNvZnR3YXJlIHVzaW5nICJnaXQgcHVzaCIgZnJvbSB2MS42LjEgc29tZXRpbWVzIGRpZCBub3QKKyAgd29yay4gIFRoZSBidWcgd2FzIHB1cmVseSBvbiB0aGUgImdpdCBwdXNoIiBzZW5kZXIgc2lkZSwgYW5kIGhhcyBiZWVuCisgIGNvcnJlY3RlZC4KKworKiAiZ2l0IHN0YXR1cyAtdiIgZGlkIG5vdCBwYWludCBpdHMgZGlmZiBvdXRwdXQgaW4gY29sb3VyIGV2ZW4gd2hlbgorICBjb2xvci51aSBjb25maWd1cmF0aW9uIHdhcyBzZXQuCisKKyogImdpdCBscy10cmVlIiBsZWFybmVkIC0tZnVsbC10cmVlIG9wdGlvbiB0byBoZWxwIFBvcmNlbGFpbiBzY3JpcHRzIHRoYXQKKyAgd2FudCB0byBhbHdheXMgc2VlIHRoZSBmdWxsIHBhdGggcmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudCB3b3JraW5nCisgIGRpcmVjdG9yeS4KKworKiAiZ2l0IGdyZXAiIGluY29ycmVjdGx5IHNlYXJjaGVkIGluIHdvcmsgdHJlZSBwYXRocyBldmVuIHdoZW4gdGhleSBhcmUKKyAgbWFya2VkIGFzIGFzc3VtZS11bmNoYW5nZWQuICBJdCBub3cgc2VhcmNoZXMgaW4gdGhlIGluZGV4IGVudHJpZXMuCisKKyogImdpdCBnYyIgd2l0aCBubyBncmFjZSBwZXJpb2QgbmVlZGxlc3NseSBlamVjdGVkIHBhY2tlZCBidXQgdW5yZWFjaGFibGUKKyAgb2JqZWN0cyBpbiB0aGVpciBsb29zZSBmb3JtLCBvbmx5IHRvIGRlbGV0ZSB0aGVtIHJpZ2h0IGF3YXkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA4ZDgxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4zLnR4dApAQCAtMCwwICsxLDI4IEBACitHSVQgdjEuNi4xLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4xLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBkaWZmIC0tYmluYXJ5IHwgZ2l0IGFwcGx5IiBwaXBlbGluZSBkaWQgbm90IHdvcmsgd2VsbCB3aGVuCisgIGEgYmluYXJ5IGJsb2IgaXMgY2hhbmdlZCB0byBhIHN5bWJvbGljIGxpbmsuCisKKyogU29tZSBjb21iaW5hdGlvbnMgb2YgLWIvLXcvLS1pZ25vcmUtc3BhY2UtYXQtZW9sIHRvICJnaXQgZGlmZiIgZGlkCisgIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgorCisqICJnaXQgZ3JlcCIgZGlkIG5vdCBwYXNzIHRoZSAtSSAoaWdub3JlIGJpbmFyeSkgb3B0aW9uIHdoZW4KKyAgY2FsbGluZyBvdXQgYW4gZXh0ZXJuYWwgZ3JlcCBwcm9ncmFtLgorCisqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBpbmNsdWRlIEhFQUQgdG8gdGhlIHNldCBvZiBzdGFydGluZyBwb2ludHMKKyAgd2hlbiAtLWFsbCBpcyBnaXZlbi4gIFRoaXMgbWFrZXMgYSBkaWZmZXJlbmNlIHdoZW4geW91IGFyZSBub3QKKyAgb24gYW55IGJyYW5jaC4KKworKiAiZ2l0IG12IiB0byBtb3ZlIGFuIHVudHJhY2tlZCBmaWxlIHRvIG92ZXJ3cml0ZSBhIHRyYWNrZWQKKyAgY29udGVudHMgbWlzYmVoYXZlZC4KKworKiAiZ2l0IG1lcmdlIC1zIG9jdG9wdXMiIHdpdGggbWFueSBwb3RlbnRpYWwgbWVyZ2UgYmFzZXMgZGlkIG5vdAorICB3b3JrIGNvcnJlY3RseS4KKworKiBSUE0gYmluYXJ5IHBhY2thZ2UgaW5zdGFsbGVkIHRoZSBodG1sIG1hbnBhZ2VzIGluIGEgd3JvbmcgcGxhY2UuCisKK0Fsc28gaW5jbHVkZXMgbWlub3IgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYmFkNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjQudHh0CkBAIC0wLDAgKzEsNDEgQEAKK0dJVCB2MS42LjEuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjEuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAuZ2l0aWdub3JlIGxlYXJuZWQgdG8gaGFuZGxlIGJhY2tzbGFzaCBhcyBhIHF1b3RpbmcgbWVjaGFuaXNtIGZvcgorICBjb21tZW50IGludHJvZHVjdGlvbiBjaGFyYWN0ZXIgIiMiLgorICBUaGlzIGZpeCB3YXMgZmlyc3QgbWVyZ2VkIHRvIDEuNi4yLjEuCisKKyogImdpdCBmYXN0LWV4cG9ydCIgcHJvZHVjZWQgd3Jvbmcgb3V0cHV0IHdpdGggc29tZSBwYXJlbnRzIG1pc3NpbmcgZnJvbQorICBjb21taXRzLCB3aGVuIHRoZSBoaXN0b3J5IGlzIGNsb2NrLXNrZXdlZC4KKworKiAiZ2l0IGZhc3QtaW1wb3J0IiBzb21ldGltZXMgZmFpbGVkIHRvIHJlYWQgYmFjayBvYmplY3RzIGl0IGp1c3Qgd3JvdGUKKyAgb3V0IGFuZCBhYm9ydGVkLCBiZWNhdXNlIGl0IGZhaWxlZCB0byBmbHVzaCBzdGFsZSBjYWNoZWQgZGF0YS4KKworKiAiZ2l0LWxzLXRyZWUiIGFuZCAiZ2l0LWRpZmYtdHJlZSIgdXNlZCBhIHBhdGhzcGVjIGNvcnJlY3RseSB3aGVuCisgIGRlY2lkaW5nIHRvIGRlc2NlbmQgaW50byBhIHN1YmRpcmVjdG9yeSBidXQgdGhleSBkaWQgbm90IG1hdGNoIHRoZQorICBpbmRpdmlkdWFsIHBhdGhzIGNvcnJlY3RseS4gIFRoaXMgY2F1c2VkIHBhdGhzcGVjcyAiYWJjL2QgYWIiIHRvIG1hdGNoCisgICJhYmMvMCIgKCJhYmMvZCIgbWFkZSB0aGVtIGRlY2lkZSB0byBkZXNjZW5kIGludG8gdGhlIGRpcmVjdG9yeSAiYWJjLyIsCisgIGFuZCB0aGVuICJhYiIgaW5jb3JyZWN0bHkgbWF0Y2hlZCAiYWJjLzAiIHdoZW4gaXQgc2hvdWxkbid0KS4KKyAgVGhpcyBmaXggd2FzIGZpcnN0IG1lcmdlZCB0byAxLjYuMi4zLgorCisqIGltcG9ydC16aXBzIHNjcmlwdCAoaW4gY29udHJpYikgZGlkIG5vdCBjb21wdXRlIHRoZSBjb21tb24gZGlyZWN0b3J5CisgIHByZWZpeCBjb3JyZWN0bHkuCisgIFRoaXMgZml4IHdhcyBmaXJzdCBtZXJnZWQgdG8gMS42LjIuMi4KKworKiAiZ2l0IGluaXQiIHNlZ2ZhdWx0ZWQgd2hlbiBnaXZlbiBhbiBvdmVybG9uZyB0ZW1wbGF0ZSBsb2NhdGlvbiB2aWEKKyAgdGhlIC0tdGVtcGxhdGU9IG9wdGlvbi4KKyAgVGhpcyBmaXggd2FzIGZpcnN0IG1lcmdlZCB0byAxLjYuMi40LgorCisqICJnaXQgcmVwYWNrIiBkaWQgbm90IGVycm9yIG91dCB3aGVuIG5lY2Vzc2FyeSBvYmplY3Qgd2FzIG1pc3NpbmcgaW4gdGhlCisgIHJlcG9zaXRvcnkuCisKKyogZ2l0LXJlcGFjayAoaW52b2tlZCBmcm9tIGdpdC1nYykgZGlkIG5vdCB3b3JrIGFzIG5pY2VseSBhcyBpdCBzaG91bGQgaW4KKyAgYSByZXBvc2l0b3J5IHRoYXQgYm9ycm93cyBvYmplY3RzIGZyb20gbmVpZ2hib3VycyB2aWEgYWx0ZXJuYXRlcworICBtZWNoYW5pc20gZXNwZWNpYWxseSB3aGVuIHNvbWUgcGFja3MgYXJlIG1hcmtlZCB3aXRoIHRoZSAiLmtlZXAiIGZsYWcKKyAgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgcmVwYWNrZWQuCisgIFRoaXMgZml4IHdhcyBmaXJzdCBtZXJnZWQgdG8gMS42LjIuMy4KKworQWxzbyBpbmNsdWRlcyBtaW5vciBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE1MmE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS50eHQKQEAgLTAsMCArMSwyODAgQEAKK0dJVCB2MS42LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNi4wCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHNvbWUgY29tbWFuZHMgKGUuZy4gImdpdCBsb2ciLCAiZ2l0IGRpZmYiKSBzcGF3biBwYWdlciBpbnRlcm5hbGx5LCB3ZQordXNlZCB0byBtYWtlIHRoZSBwYWdlciB0aGUgcGFyZW50IHByb2Nlc3Mgb2YgdGhlIGdpdCBjb21tYW5kIHRoYXQgcHJvZHVjZXMKK291dHB1dC4gIFRoaXMgbWVhbnQgdGhhdCB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHdob2xlIHRoaW5nIGNvbWVzIGZyb20gdGhlCitwYWdlciwgbm90IHRoZSB1bmRlcmx5aW5nIGdpdCBjb21tYW5kLiAgV2Ugc3dhcHBlZCB0aGUgb3JkZXIgb2YgdGhlCitwcm9jZXNzZXMgYXJvdW5kIGFuZCB5b3Ugd2lsbCBzZWUgdGhlIGV4aXQgY29kZSBmcm9tIHRoZSBjb21tYW5kIGZyb20gbm93Citvbi4KKworKHN1YnN5c3RlbXMpCisKKyogZ2l0ayBjYW4gY2FsbCBvdXQgdG8gZ2l0LWd1aSB0byB2aWV3ICJnaXQgYmxhbWUiIG91dHB1dDsgZ2l0LWd1aSBpbiB0dXJuCisgIGNhbiBydW4gZ2l0ayBmcm9tIGl0cyBibGFtZSB2aWV3LgorCisqIFZhcmlvdXMgZ2l0LWd1aSB1cGRhdGVzIGluY2x1ZGluZyB1cGRhdGVkIHRyYW5zbGF0aW9ucy4KKworKiBWYXJpb3VzIGdpdHdlYiB1cGRhdGVzIGZyb20gcmVwby5vci5jeiBpbnN0YWxsYXRpb24uCisKKyogVXBkYXRlcyB0byBlbWFjcyBiaW5kaW5ncy4KKworKHBvcnRhYmlsaXR5KQorCisqIEEgZmV3IHRlc3Qgc2NyaXB0cyB1c2VkIG5vbnBvcnRhYmxlICJncmVwIiB0aGF0IGRpZCBub3Qgd29yayB3ZWxsIG9uCisgIHNvbWUgcGxhdGZvcm1zLCBlLmcuIFNvbGFyaXMuCisKKyogU2FtcGxlIHByZS1hdXRvLWdjIHNjcmlwdCBoYXMgT1MgWCBzdXBwb3J0LgorCisqIE1ha2VmaWxlIGhhcyBzdXBwb3J0IGZvciAoYW5jaWVudCkgRnJlZUJTRCA0LjkuCisKKyhwZXJmb3JtYW5jZSkKKworKiBNYW55IG9wZXJhdGlvbnMgdGhhdCBhcmUgbHN0YXQoMykgaGVhdnkgY2FuIGJlIHRvbGQgdG8gcHJlLWV4ZWN1dGUKKyAgbmVjZXNzYXJ5IGxzdGF0KDMpIGluIHBhcmFsbGVsIGJlZm9yZSB0aGVpciBtYWluIG9wZXJhdGlvbnMsIHdoaWNoCisgIHBvdGVudGlhbGx5IGdpdmVzIG11Y2ggaW1wcm92ZWQgcGVyZm9ybWFuY2UgZm9yIGNvbGQtY2FjaGUgY2FzZXMgb3IgaW4KKyAgZW52aXJvbm1lbnRzIHdpdGggd2VhayBtZXRhZGF0YSBjYWNoaW5nIChlLmcuIE5GUykuCisKKyogVGhlIHVuZGVybHlpbmcgZGlmZiBtYWNoaW5lcnkgdG8gcHJvZHVjZSB0ZXh0dWFsIG91dHB1dCBoYXMgYmVlbgorICBvcHRpbWl6ZWQsIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBmYXN0ZXIgImdpdCBibGFtZSIgcHJvY2Vzc2luZy4KKworKiBNb3N0IG9mIHRoZSB0ZXN0IHNjcmlwdHMgKGJ1dCBub3QgdGhlIG9uZXMgdGhhdCB0cnkgdG8gcnVuIHNlcnZlcnMpCisgIGNhbiBiZSBydW4gaW4gcGFyYWxsZWwuCisKKyogQmFzaCBjb21wbGV0aW9uIG9mIHJlZm5hbWVzIGluIGEgcmVwb3NpdG9yeSB3aXRoIG1hc3NpdmUgbnVtYmVyIG9mCisgIHJlZnMgaGFzIGJlZW4gb3B0aW1pemVkLgorCisqIEN5Z3dpbiBwb3J0IHVzZXMgbmF0aXZlIHN0YXQvbHN0YXQgaW1wbGVtZW50YXRpb25zIHdoZW4gYXBwbGljYWJsZSwKKyAgd2hpY2ggbGVhZHMgdG8gaW1wcm92ZWQgcGVyZm9ybWFuY2UuCisKKyogImdpdCBwdXNoIiBwYXlzIGF0dGVudGlvbiB0byBhbHRlcm5hdGUgcmVwb3NpdG9yaWVzIHRvIGF2b2lkIHNlbmRpbmcKKyAgdW5uZWNlc3Nhcnkgb2JqZWN0cy4KKworKiAiZ2l0IHN2biIgY2FuIHJlYnVpbGQgYW4gb3V0LW9mLWRhdGUgcmV2X21hcCBmaWxlLgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyogV2hlbiB5b3UgbWlzdHlwZSBhIGNvbW1hbmQgbmFtZSwgZ2l0IGhlbHBmdWxseSBzdWdnZXN0cyB3aGF0IGl0IGd1ZXNzZXMKKyAgeW91IG1pZ2h0IGhhdmUgbWVhbnQgdG8gc2F5LiAgaGVscC5hdXRvY29ycmVjdCBjb25maWd1cmF0aW9uIGNhbiBiZSBzZXQKKyAgdG8gYSBub24temVybyB2YWx1ZSB0byBhY2NlcHQgdGhlIHN1Z2dlc3Rpb24gd2hlbiBnaXQgY2FuIHVuaXF1ZWx5CisgIGd1ZXNzLgorCisqIFRoZSBwYWNrZmlsZSBtYWNoaW5lcnkgaG9wZWZ1bGx5IGlzIG1vcmUgcm9idXN0IHdoZW4gZGVhbGluZyB3aXRoCisgIGNvcnJ1cHQgcGFja3MgaWYgcmVkdW5kYW50IG9iamVjdHMgaW52b2x2ZWQgaW4gdGhlIGNvcnJ1cHRpb24gYXJlCisgIGF2YWlsYWJsZSBlbHNld2hlcmUuCisKKyogImdpdCBhZGQgLU4gcGF0aC4uLiIgYWRkcyB0aGUgbmFtZWQgcGF0aHMgYXMgYW4gZW1wdHkgYmxvYiwgc28gdGhhdAorICBzdWJzZXF1ZW50ICJnaXQgZGlmZiIgd2lsbCBzaG93IGEgZGlmZiBhcyBpZiB0aGV5IGFyZSBjcmVhdGlvbiBldmVudHMuCisKKyogImdpdCBhZGQiIGdhaW5lZCBhIGJ1aWx0LWluIHN5bm9ueW0gZm9yIHBlb3BsZSB3aG8gd2FudCB0byBzYXkgInN0YWdlCisgIGNoYW5nZXMiIGluc3RlYWQgb2YgImFkZCBjb250ZW50cyB0byB0aGUgc3RhZ2luZyBhcmVhIiB3aGljaCBhbW91bnRzCisgIHRvIHRoZSBzYW1lIHRoaW5nLgorCisqICJnaXQgYXBwbHkiIGxlYXJuZWQgLS1pbmNsdWRlPXBhdGhzIG9wdGlvbiwgc2ltaWxhciB0byB0aGUgZXhpc3RpbmcKKyAgLS1leGNsdWRlPXBhdGhzIG9wdGlvbi4KKworKiAiZ2l0IGJpc2VjdCIgaXMgY2FyZWZ1bCBhYm91dCBhIHVzZXIgbWlzdGFrZSBhbmQgc3VnZ2VzdHMgdGVzdGluZyBvZgorICBtZXJnZSBiYXNlIGZpcnN0IHdoZW4gZ29vZCBpcyBub3QgYSBzdHJpY3QgYW5jZXN0b3Igb2YgYmFkLgorCisqICJnaXQgYmlzZWN0IHNraXAiIGNhbiB0YWtlIGEgcmFuZ2Ugb2YgY29tbWl0cy4KKworKiAiZ2l0IGJsYW1lIiByZS1lbmNvZGVzIHRoZSBjb21taXQgbWV0YWluZm8gdG8gVVRGLTggZnJvbSBpMThuLmNvbW1pdEVuY29kaW5nCisgIGJ5IGRlZmF1bHQuCisKKyogImdpdCBjaGVjay1hdHRyIC0tc3RkaW4iIGNhbiBjaGVjayBhdHRyaWJ1dGVzIGZvciBtdWx0aXBsZSBwYXRocy4KKworKiAiZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luL2hhY2siIHVzZWQgdG8gYmUgYSBzeW50YXggZXJyb3IuICBJdCBub3cKKyAgRFdJTXMgdG8gY3JlYXRlIGEgY29ycmVzcG9uZGluZyBsb2NhbCBicmFuY2ggImhhY2siLCBpLmUuIGFjdHMgYXMgaWYgeW91CisgIHNhaWQgImdpdCBjaGVja291dCAtLXRyYWNrIC1iIGhhY2sgb3JpZ2luL2hhY2siLgorCisqICJnaXQgY2hlY2tvdXQgLS1vdXJzLy0tdGhlaXJzIiBjYW4gYmUgdXNlZCB0byBjaGVjayBvdXQgb25lIHNpZGUgb2YgYQorICBjb25mbGljdGluZyBtZXJnZSBkdXJpbmcgY29uZmxpY3QgcmVzb2x1dGlvbi4KKworKiAiZ2l0IGNoZWNrb3V0IC1tIiBjYW4gYmUgdXNlZCB0byByZWNyZWF0ZSB0aGUgaW5pdGlhbCBjb25mbGljdGVkIHN0YXRlCisgIGR1cmluZyBjb25mbGljdCByZXNvbHV0aW9uLgorCisqICJnaXQgY2hlcnJ5LXBpY2siIGNhbiBhbHNvIHV0aWxpemUgcmVyZXJlIGZvciBjb25mbGljdCByZXNvbHV0aW9uLgorCisqICJnaXQgY2xvbmUiIGxlYXJuZWQgdG8gYmUgdmVyYm9zZSB3aXRoIC12CisKKyogImdpdCBjb21taXQgLS1hdXRob3I9JG5hbWUiIGNhbiBsb29rIHVwIGF1dGhvciBuYW1lIGZyb20gZXhpc3RpbmcKKyAgY29tbWl0cy4KKworKiBvdXRwdXQgZnJvbSAiZ2l0IGNvbW1pdCIgaGFzIGJlZW4gcmV3b3JkZWQgaW4gYSBtb3JlIGNvbmNpc2UgYW5kIHlldAorICBtb3JlIGluZm9ybWF0aXZlIHdheS4KKworKiAiZ2l0IGNvdW50LW9iamVjdHMiIHJlcG9ydHMgdGhlIG9uLWRpc2sgZm9vdHByaW50IGZvciBwYWNrZmlsZXMgYW5kCisgIHRoZWlyIGNvcnJlc3BvbmRpbmcgaWR4IGZpbGVzLgorCisqICJnaXQgZGFlbW9uIiBsZWFybmVkIC0tbWF4LWNvbm5lY3Rpb25zPTxjb3VudD4gb3B0aW9uLgorCisqICJnaXQgZGFlbW9uIiBleHBvcnRzIFJFTU9URV9BRERSIHRvIHJlY29yZCBjbGllbnQgYWRkcmVzcywgc28gdGhhdAorICBzcGF3bmVkIHByb2dyYW1zIGNhbiBhY3QgZGlmZmVyZW50bHkgb24gaXQuCisKKyogImdpdCBkZXNjcmliZSAtLXRhZ3MiIGZhdm91cnMgY2xvc2VyIGxpZ2h0d2VpZ2h0IHRhZ3MgdGhhbiBmYXJ0aGVyCisgIGFubm90YXRlZCB0YWdzIG5vdy4KKworKiAiZ2l0IGRpZmYiIGxlYXJuZWQgdG8gbWltaWMgLS1zdXBwcmVzcy1ibGFuay1lbXB0eSBmcm9tIEdOVSBkaWZmIHZpYSBhCisgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgorCisqICJnaXQgZGlmZiIgbGVhcm5lZCB0byBwdXQgbW9yZSBzZW5zaWJsZSBodW5rIGhlYWRlcnMgZm9yIFB5dGhvbiwKKyAgSFRNTCBhbmQgT2JqQyBjb250ZW50cy4KKworKiAiZ2l0IGRpZmYiIGxlYXJuZWQgdG8gdmFyeSB0aGUgYS8gdnMgYi8gcHJlZml4IGRlcGVuZGluZyBvbiB3aGF0IGFyZQorICBiZWluZyBjb21wYXJlZCwgY29udHJvbGxlZCBieSBkaWZmLm1uZW1vbmljcHJlZml4IGNvbmZpZ3VyYXRpb24uCisKKyogImdpdCBkaWZmIiBsZWFybmVkIC0tZGlyc3RhdC1ieS1maWxlIHRvIGNvdW50IGNoYW5nZWQgZmlsZXMsIG5vdCBudW1iZXIKKyAgb2YgbGluZXMsIHdoZW4gc3VtbWFyaXppbmcgdGhlIGdsb2JhbCBwaWN0dXJlLgorCisqICJnaXQgZGlmZiIgbGVhcm5lZCAidGV4dGNvbnYiIGZpbHRlcnMgLS0tIGEgYmluYXJ5IG9yIGhhcmQtdG8tcmVhZAorICBjb250ZW50cyBjYW4gYmUgbXVuZ2VkIGludG8gaHVtYW4gcmVhZGFibGUgZm9ybSBhbmQgdGhlIGRpZmZlcmVuY2UKKyAgYmV0d2VlbiB0aGUgcmVzdWx0cyBvZiB0aGUgY29udmVyc2lvbiBjYW4gYmUgdmlld2VkIChvYnZpb3VzbHkgdGhpcworICBjYW5ub3QgcHJvZHVjZSBhIHBhdGNoIHRoYXQgY2FuIGJlIGFwcGxpZWQsIHNvIHRoaXMgaXMgZGlzYWJsZWQgaW4KKyAgZm9ybWF0LXBhdGNoIGFtb25nIG90aGVyIHRoaW5ncykuCisKKyogIi0tY2FjaGVkIiBvcHRpb24gdG8gImdpdCBkaWZmIGhhcyBhbiBlYXNpZXIgdG8gcmVtZW1iZXIgc3lub255bSAiLS1zdGFnZWQiLAorICB0byBhc2sgIndoYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gY29tbWl0IGFuZCB0aGUKKyAgY29udGVudHMgc3RhZ2VkIGluIHRoZSBpbmRleD8iCisKKyogImdpdCBmb3ItZWFjaC1yZWYiIGxlYXJuZWQgInJlZm5hbWU6c2hvcnQiIHRva2VuIHRoYXQgZ2l2ZXMgYW4KKyAgdW5hbWJpZ3VvdXNseSBhYmJyZXZpYXRlZCByZWZuYW1lLgorCisqIEF1dG8tbnVtYmVyaW5nIG9mIHRoZSBzdWJqZWN0IGxpbmVzIGlzIHRoZSBkZWZhdWx0IGZvciAiZ2l0CisgIGZvcm1hdC1wYXRjaCIgbm93LgorCisqICJnaXQgZ3JlcCIgbGVhcm5lZCB0byBhY2NlcHQgLXogc2ltaWxhciB0byBHTlUgZ3JlcC4KKworKiAiZ2l0IGhlbHAiIGxlYXJuZWQgdG8gdXNlIEdJVF9NQU5fVklFV0VSIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZQorICB1c2luZyAibWFuIiBwcm9ncmFtLgorCisqICJnaXQgaW1hcC1zZW5kIiBjYW4gb3B0aW9uYWxseSB0YWxrIFNTTC4KKworKiAiZ2l0IGluZGV4LXBhY2siIGlzIG1vcmUgY2FyZWZ1bCBhZ2FpbnN0IGRpc2sgY29ycnVwdGlvbiB3aGlsZQorICBjb21wbGV0aW5nIGEgdGhpbiBwYWNrLgorCisqICJnaXQgbG9nIC0tY2hlY2siIGFuZCAiZ2l0IGxvZyAtLWV4aXQtY29kZSIgcGFzc2VzIHRoZWlyIHVuZGVybHlpbmcgZGlmZgorICBzdGF0dXMgd2l0aCB0aGVpciBleGl0IHN0YXR1cyBjb2RlLgorCisqICJnaXQgbG9nIiBsZWFybmVkIC0tc2ltcGxpZnktbWVyZ2VzLCBhIG1pbGRlciB2YXJpYW50IG9mIC0tZnVsbC1oaXN0b3J5OworICAiZ2l0ayAtLXNpbXBsaWZ5LW1lcmdlcyIgaXMgZWFzaWVyIHRvIHZpZXcgdGhhbiB3aXRoIC0tZnVsbC1oaXN0b3J5LgorCisqICJnaXQgbG9nIiBsZWFybmVkICItLXNvdXJjZSIgdG8gc2hvdyB3aGF0IHJlZiBlYWNoIGNvbW1pdCB3YXMgcmVhY2hlZAorICBmcm9tLgorCisqICJnaXQgbG9nIiBhbHNvIGxlYXJuZWQgIi0tc2ltcGxpZnktYnktZGVjb3JhdGlvbiIgdG8gc2hvdyB0aGUKKyAgYmlyZHMtZXllLXZpZXcgb2YgdGhlIHRvcG9sb2d5IG9mIHRoZSBoaXN0b3J5LgorCisqICJnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDoiIGxlYXJuZWQgIiVkIiBmb3JtYXQgZWxlbWVudCB0aGF0IGluc2VydHMKKyAgbmFtZXMgb2YgdGFncyB0aGF0IHBvaW50IGF0IHRoZSBjb21taXQuCisKKyogImdpdCBtZXJnZSAtLXNxdWFzaCIgYW5kICJnaXQgbWVyZ2UgLS1uby1mZiIgaW50byBhbiB1bmJvcm4gYnJhbmNoIGFyZQorICBub3RpY2VkIGFzIHVzZXIgZXJyb3JzLgorCisqICJnaXQgbWVyZ2UgLXMgJHN0cmF0ZWd5IiBjYW4gdXNlIGEgY3VzdG9tIGJ1aWx0IHN0cmF0ZWd5IGlmIHlvdSBoYXZlIGEKKyAgY29tbWFuZCAiZ2l0LW1lcmdlLSRzdHJhdGVneSIgb24geW91ciAkUEFUSC4KKworKiAiZ2l0IHB1bGwiIChhbmQgImdpdCBmZXRjaCIpIGNhbiBiZSB0b2xkIHRvIG9wZXJhdGUgIi12ImVyYm9zZWx5IG9yCisgICItcSJ1aWV0bHkuCisKKyogImdpdCBwdXNoIiBjYW4gYmUgdG9sZCB0byByZWplY3QgZGVsZXRpb24gb2YgcmVmcyB3aXRoIHJlY2VpdmUuZGVueURlbGV0ZXMKKyAgY29uZmlndXJhdGlvbi4KKworKiAiZ2l0IHJlYmFzZSIgaG9ub3VycyBwcmUtcmViYXNlIGhvb2s7IHVzZSAtLW5vLXZlcmlmeSB0byBieXBhc3MgaXQuCisKKyogImdpdCByZWJhc2UgLXAiIHVzZXMgaW50ZXJhY3RpdmUgcmViYXNlIG1hY2hpbmVyeSBub3cgdG8gcHJlc2VydmUgdGhlIG1lcmdlcy4KKworKiAiZ2l0IHJlZmxvZyBleHBpcmUgYnJhbmNoIiBjYW4gYmUgdXNlZCBpbiBwbGFjZSBvZiAiZ2l0IHJlZmxvZyBleHBpcmUKKyAgcmVmcy9oZWFkcy9icmFuY2giLgorCisqICJnaXQgcmVtb3RlIHNob3cgJHJlbW90ZSIgbGlzdHMgcmVtb3RlIGJyYW5jaGVzIG9uZS1wZXItbGluZSBub3cuCisKKyogImdpdCBzZW5kLWVtYWlsIiBjYW4gYmUgZ2l2ZW4gcmV2aXNpb24gcmFuZ2UgaW5zdGVhZCBvZiBmaWxlcyBhbmQKKyAgbWFpbGRpcnMgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIGF1dG9tYXRpY2FsbHkgcnVucyBmb3JtYXQtcGF0Y2ggdG8KKyAgZ2VuZXJhdGUgcGF0Y2hlcyBmb3IgdGhlIGdpdmVuIHJldmlzaW9uIHJhbmdlLgorCisqICJnaXQgc3VibW9kdWxlIGZvcmVhY2giIHN1YmNvbW1hbmQgYWxsb3dzIHlvdSB0byBpdGVyYXRlIG92ZXIgY2hlY2tlZAorICBvdXQgc3VibW9kdWxlcy4KKworKiAiZ2l0IHN1Ym1vZHVsZSBzeW5jIiBzdWJjb21tYW5kcyBhbGxvd3MgeW91IHRvIHVwZGF0ZSB0aGUgb3JpZ2luIFVSTAorICByZWNvcmRlZCBpbiBzdWJtb2R1bGUgZGlyZWN0b3JpZXMgZnJvbSB0aGUgdG9wbGV2ZWwgLmdpdG1vZHVsZXMgZmlsZS4KKworKiAiZ2l0IHN2biBicmFuY2giIGNhbiBjcmVhdGUgbmV3IGJyYW5jaGVzIG9uIHRoZSBvdGhlciBlbmQuCisKKyogImdpdHdlYiIgY2FuIHVzZSBtb3JlIHNhbmVyIFBBVEhfSU5GTyBiYXNlZCBVUkwuCisKKyhpbnRlcm5hbCkKKworKiAiZ2l0IGhhc2gtb2JqZWN0IiBsZWFybmVkIHRvIGxpZSBhYm91dCB0aGUgcGF0aCBiZWluZyBoYXNoZWQsIHNvIHRoYXQKKyAgY29ycmVjdCBnaXRhdHRyaWJ1dGVzIHByb2Nlc3NpbmcgY2FuIGJlIGRvbmUgd2hpbGUgaGFzaGluZyBjb250ZW50cworICBzdG9yZWQgaW4gYSB0ZW1wb3JhcnkgZmlsZS4KKworKiB2YXJpb3VzIGNhbGxlcnMgb2YgZ2l0LW1lcmdlLXJlY3Vyc2l2ZSBhdm9pZCBmb3JraW5nIGl0IGFzIGFuIGV4dGVybmFsCisgIHByb2Nlc3MuCisKKyogR2l0IGNsYXNzIGRlZmluZWQgaW4gIkdpdC5wbSIgY2FuIGJlIHN1YmNsYXNzZXMgYSBiaXQgbW9yZSBlYXNpbHkuCisKKyogV2UgdXNlZCB0byBsaW5rIEdOVSByZWdleCBsaWJyYXJ5IGFzIGEgY29tcGF0aWJpbGl0eSBsYXllciBmb3Igc29tZQorICBwbGF0Zm9ybXMsIGJ1dCBpdCB0dXJucyBvdXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBtb3N0IG9mIHRoZW0uCisKKyogU29tZSBwYXRoIGhhbmRsaW5nIHJvdXRpbmVzIHVzZWQgZml4ZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgdXNlZCBhbHRlcm5hdGVseQorICBidXQgZGVwZW5kaW5nIG9uIHRoZSBjYWxsIGRlcHRoLCB0aGlzIGFycmFuZ2VtZW50IGxlZCB0byBoYXJkIHRvIHRyYWNrCisgIGJ1Z3MuICBUaGlzIGlzc3VlIGlzIGJlaW5nIGFkZHJlc3NlZC4KKworCitGaXhlcyBzaW5jZSB2MS42LjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuMC5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworKiBQb3JjZWxhaW5zIGltcGxlbWVudGVkIGFzIHNoZWxsIHNjcmlwdHMgd2VyZSB1dHRlcmx5IGNvbmZ1c2VkIHdoZW4geW91CisgIGVudGVyZWQgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgYSB3b3JrIHRyZWUgZnJvbSBzaWRld2F5cywgZm9sbG93aW5nIGEKKyAgc3ltYm9saWMgbGluayAodGhpcyBtYXkgbmVlZCB0byBiZSBiYWNrcG9ydGVkIHRvIG9sZGVyIHJlbGVhc2VzIGxhdGVyKS4KKworKiBUcmFja2luZyBzeW1ib2xpYyBsaW5rcyB3b3VsZCB3b3JrIGJldHRlciBvbiBmaWxlc3lzdGVtcyB3aG9zZSBsc3RhdCgpCisgIHJldHVybnMgaW5jb3JyZWN0IHN0X3NpemUgdmFsdWUgZm9yIHRoZW0uCisKKyogImdpdCBhZGQiIGFuZCAiZ2l0IHVwZGF0ZS1pbmRleCIgaW5jb3JyZWN0bHkgYWxsb3dlZCBhZGRpbmcgUy9GIHdoZW4gUworICBpcyBhIHRyYWNrZWQgc3ltbGluayB0aGF0IHBvaW50cyBhdCBhIGRpcmVjdG9yeSBEIHRoYXQgaGFzIGEgcGF0aCBGIGluCisgIGl0ICh3ZSBzdGlsbCBuZWVkIHRvIGZpeCBhIHNpbWlsYXIgbm9uc2Vuc2Ugd2hlbiBTIGlzIGEgc3VibW9kdWxlIGFuZCBGCisgIGlzIGEgcGF0aCBpbiBpdCkuCisKKyogImdpdCBhbSIgYWZ0ZXIgc3RvcHBpbmcgYXQgYSBicm9rZW4gcGF0Y2ggbG9zdCAtLXdoaXRlc3BhY2UsIC1DLCAtcCBhbmQKKyAgLS0zd2F5IG9wdGlvbnMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lIGluaXRpYWxseS4KKworKiAiZ2l0IGRpZmYgLS1zdGRpbiIgdXNlZCB0byB0YWtlIHR3byB0cmVlcyBvbiBhIGxpbmUgYW5kIGNvbXBhcmVkIHRoZW0sCisgIGJ1dCB3ZSBkcm9wcGVkIHN1cHBvcnQgZm9yIHN1Y2ggYSB1c2UgY2FzZSBsb25nIHRpbWUgYWdvLiAgVGhpcyBoYXMKKyAgYmVlbiByZXN1cnJlY3RlZC4KKworKiAiZ2l0IGZpbHRlci1icmFuY2giIGZhaWxlZCB0byByZXdyaXRlIGEgdGFnIG5hbWUgd2l0aCBzbGFzaGVzIGluIGl0LgorCisqICJnaXQgaHR0cC1wdXNoIiBkaWQgbm90IHVuZGVyc3RhbmQgVVJJIHNjaGVtZSBvdGhlciB0aGFuIG9wYXF1ZWxvY2t0b2tlbgorICB3aGVuIGFjcXVpcmluZyBhIGxvY2sgZnJvbSB0aGUgc2VydmVyICh0aGlzIG1heSBuZWVkIHRvIGJlIGJhY2twb3J0ZWQgdG8KKyAgb2xkZXIgcmVsZWFzZXMgbGF0ZXIpLgorCisqIEFmdGVyICJnaXQgcmViYXNlIC1wIiBzdG9wcGVkIHdpdGggY29uZmxpY3RzIHdoaWxlIHJlcGxheWluZyBhIG1lcmdlLAorICJnaXQgcmViYXNlIC0tY29udGludWUiIGRpZCBub3Qgd29yayAobWF5IG5lZWQgdG8gYmUgYmFja3BvcnRlZCB0byBvbGRlcgorICByZWxlYXNlcykuCisKKyogImdpdCByZXZlcnQiIHJlY29yZHMgcmVsYXRpdmUgdG8gd2hpY2ggcGFyZW50IGEgcmV2ZXJ0IHdhcyBtYWRlIHdoZW4KKyAgcmV2ZXJ0aW5nIGEgbWVyZ2UuICBUb2dldGhlciB3aXRoIG5ldyBkb2N1bWVudGF0aW9uIHRoYXQgZXhwbGFpbnMgaXNzdWVzCisgIGFyb3VuZCByZXZlcnRpbmcgYSBtZXJnZSBhbmQgbWVyZ2luZyBmcm9tIHRoZSB1cGRhdGVkIGJyYW5jaCBsYXRlciwgdGhpcworICBob3BlZnVsbHkgd2lsbCByZWR1Y2UgdXNlciBjb25mdXNpb24gKHRoaXMgbWF5IG5lZWQgdG8gYmUgYmFja3BvcnRlZCB0bworICBvbGRlciByZWxlYXNlcyBsYXRlcikuCisKKyogImdpdCBybSAtLWNhY2hlZCIgdXNlZCB0byBhbGxvdyBhbiBlbXB0eSBibG9iIHRoYXQgd2FzIGFkZGVkIGVhcmxpZXIgdG8KKyAgYmUgcmVtb3ZlZCB3aXRob3V0IC0tZm9yY2UsIGV2ZW4gd2hlbiB0aGUgZmlsZSBpbiB0aGUgd29yayB0cmVlIGhhcworICBzaW5jZSBiZWVuIG1vZGlmaWVkLgorCisqICJnaXQgcHVzaCAtLXRhZ3MgLS1hbGwgJHRoZXJlIiBmYWlsZWQgd2l0aCBnZW5lcmljIHVzYWdlIG1lc3NhZ2Ugd2l0aG91dAorICB0ZWxsaW5nIHNheWluZyB0aGVzZSB0d28gb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLgorCisqICJnaXQgbG9nIC0tYXV0aG9yLy0tY29tbWl0dGVyIiBtYXRjaCB1c2VkIHRvIHBvdGVudGlhbGx5IG1hdGNoIHRoZQorICB0aW1lc3RhbXAgcGFydCwgZXhwb3NpbmcgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgQWxzbyB0aGVzZSBkaWQKKyAgbm90IHdvcmsgd2l0aCAtLWZpeGVkLXN0cmluZ3MgbWF0Y2ggYXQgYWxsLgorCisqICJnaXR3ZWIiIGRpZCBub3QgbWFyayBub24tQVNDSUkgY2hhcmFjdGVycyBpbXBvcnRlZCBmcm9tIGV4dGVybmFsIEhUTUwgZnJhZ21lbnRzCisgIGNvcnJlY3RseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYTM2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjEudHh0CkBAIC0wLDAgKzEsMTkgQEAKK0dJVCB2MS42LjIuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisqIC5naXRpZ25vcmUgbGVhcm5lZCB0byBoYW5kbGUgYmFja3NsYXNoIGFzIGEgcXVvdGluZyBtZWNoYW5pc20gZm9yCisgIGNvbW1lbnQgaW50cm9kdWN0aW9uIGNoYXJhY3RlciAiIyIuCisKKyogdGltZXN0YW1wIG91dHB1dCBpbiAtLWRhdGU9cmVsYXRpdmUgbW9kZSB1c2VkIHRvIGRpc3BsYXkgdGltZXN0YW1wcyB0aGF0CisgIGFyZSBsb25nIHRpbWUgYWdvIGluIHRoZSBkZWZhdWx0IG1vZGU7IGl0IG5vdyB1c2VzICJOIHllYXJzIE0gbW9udGhzCisgIGFnbyIsIGFuZCAiTiB5ZWFycyBhZ28iLgorCisqIGdpdC1hZGQgLWkvLXAgbm93IHdvcmtzIHdpdGggbm9uLUFTQ0lJIHBhdGhuYW1lcy4KKworKiAiZ2l0IGhhc2gtb2JqZWN0IC13IiBkaWQgbm90IHJlYWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZyb20gdGhlCisgIGNvcnJlY3QgLmdpdCBkaXJlY3RvcnkuCisKKyogZ2l0LXNlbmQtZW1haWwgbGVhcm5lZCB0byBjb3JyZWN0bHkgaGFuZGxlIG11bHRpcGxlIENjOiBhZGRyZXNzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZhOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4yLnR4dApAQCAtMCwwICsxLDQ1IEBACitHSVQgdjEuNi4yLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4yLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQSBsb25nc3RhbmRpbmcgY29uZnVzaW5nIGRlc2NyaXB0aW9uIG9mIHdoYXQgLS1waWNrYXhlIG9wdGlvbiBvZgorICBnaXQtZGlmZiBkb2VzIGhhcyBiZWVuIGNsYXJpZmllZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworKiAiZ2l0LWJsYW1lIC1TIiBkaWQgbm90IHF1aXRlIHdvcmsgbmVhciB0aGUgY29tbWl0cyB0aGF0IHdlcmUgZ2l2ZW4KKyAgb24gdGhlIGNvbW1hbmQgbGluZSBjb3JyZWN0bHkuCisKKyogImdpdCBkaWZmIC0tcGlja2F4ZS1yZWdleHAiIGRpZCBub3QgY291bnQgb3ZlcmxhcHBpbmcgbWF0Y2hlcworICBjb3JyZWN0bHkuCisKKyogImdpdCBkaWZmIiBkaWQgbm90IGZlZWQgZmlsZXMgaW4gd29yay10cmVlIHJlcHJlc2VudGF0aW9uIHRvIGV4dGVybmFsCisgIGRpZmYgYW5kIHRleHRjb252LgorCisqICJnaXQtZmV0Y2giIGluIGEgcmVwb3NpdG9yeSB0aGF0IHdhcyBub3QgY2xvbmVkIGZyb20gYW55d2hlcmUgc2FpZAorICBpdCBjYW5ub3QgZmluZCAnb3JpZ2luJywgd2hpY2ggd2FzIGhhcmQgdG8gdW5kZXJzdGFuZCBmb3IgbmV3IHBlb3BsZS4KKworKiAiZ2l0LWZvcm1hdC1wYXRjaCAtLW51bWJlcmVkLWZpbGVzIC0tc3Rkb3V0IiBkaWQgbm90IGhhdmUgdG8gZGllIG9mCisgIGluY29tcGF0aWJsZSBvcHRpb25zOyBpdCBub3cgc2ltcGx5IGlnbm9yZXMgLS1udW1iZXJlZC1maWxlcyBhcyBubyBmaWxlcworICBhcmUgcHJvZHVjZWQgYW55d2F5LgorCisqICJnaXQtbHMtZmlsZXMgLS1kZWxldGVkIiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIEdJVF9ESVImR0lUX1dPUktfVFJFRS4KKworKiAiZ2l0LXJlYWQtdHJlZSBBIEIgQy4uLiIgd2l0aG91dCAtbSBvcHRpb24gaGFzIGJlZW4gYnJva2VuIGZvciBhIGxvbmcKKyAgdGltZS4KKworKiBnaXQtc2VuZC1lbWFpbCBpZ25vcmVkIC0taW4tcmVwbHktdG8gd2hlbiAtLW5vLXRocmVhZCB3YXMgZ2l2ZW4uCisKKyogJ2dpdC1zdWJtb2R1bGUgYWRkJyBkaWQgbm90IHRvbGVyYXRlIGV4dHJhIHNsYXNoZXMgYW5kIC4vIGluIHRoZSBwYXRoIGl0CisgIGFjY2VwdGVkIGZyb20gdGhlIGNvbW1hbmQgbGluZTsgaXQgbm93IGlzIG1vcmUgbGVuaWVudC4KKworKiBnaXQtc3ZuIG1pc2JlaGF2ZWQgd2hlbiB0aGUgcHJvamVjdCBjb250YWluZWQgYSBwYXRoIHRoYXQgYmVnYW4gd2l0aAorICB0d28gZGFzaGVzLgorCisqIGltcG9ydC16aXBzIHNjcmlwdCAoaW4gY29udHJpYikgZGlkIG5vdCBjb21wdXRlIHRoZSBjb21tb24gZGlyZWN0b3J5CisgIHByZWZpeCBjb3JyZWN0bHkuCisKKyogbWlzY29tcGlsYXRpb24gb2YgbmVnYXRlZCBlbnVtIGNvbnN0YW50cyBieSBvbGQgZ2NjICgyLjkpIGFmZmVjdGVkIHRoZQorICBjb2RlcGF0aHMgdG8gc3Bhd24gc3VicHJvY2Vzc2VzLgorCitNYW55IHNtYWxsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQgYXMgd2VsbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkM2MxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjMudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0dJVCB2MS42LjIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjIuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBTZXR0aW5nIGFuIG9jdGFsIG1vZGUgdmFsdWUgdG8gY29yZS5zaGFyZWRyZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gdG8KKyAgcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5IHRvIGdyb3VwIG1lbWJlcnMgZGlkIG5vdCB3b3JrIGFzCisgIGFkdmVydGlzZWQuCisKKyogQSBmYWlybHkgbGFyZ2UgYW5kIHRyaXZpYWwgbWVtb3J5IGxlYWsgd2hpbGUgcmV2LWxpc3Qgc2hvd3MgbGlzdCBvZgorICByZWFjaGFibGUgb2JqZWN0cyBoYXMgYmVlbiBpZGVudGlmaWVkIGFuZCBwbHVnZ2VkLgorCisqICJnaXQtY29tbWl0IC0taW50ZXJhY3RpdmUiIGRpZCBub3QgYWJvcnQgd2hlbiB1bmRlcmx5aW5nICJnaXQtYWRkIC1pIgorICBzaWduYWxlZCBhIGZhaWx1cmUuCisKKyogZ2l0LXJlcGFjayAoaW52b2tlZCBmcm9tIGdpdC1nYykgZGlkIG5vdCB3b3JrIGFzIG5pY2VseSBhcyBpdCBzaG91bGQgaW4KKyAgYSByZXBvc2l0b3J5IHRoYXQgYm9ycm93cyBvYmplY3RzIGZyb20gbmVpZ2hib3VycyB2aWEgYWx0ZXJuYXRlcworICBtZWNoYW5pc20gZXNwZWNpYWxseSB3aGVuIHNvbWUgcGFja3MgYXJlIG1hcmtlZCB3aXRoIHRoZSAiLmtlZXAiIGZsYWcKKyAgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgcmVwYWNrZWQuCisKK01hbnkgc21hbGwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZCBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiZjFkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuNC50eHQKQEAgLTAsMCArMSwzOSBAQAorR0lUIHYxLjYuMi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSBjb25maWd1cmF0aW9uIHBhcnNlciBoYWQgYSBidWZmZXIgb3ZlcmZsb3cgd2hpbGUgcGFyc2luZyBhbiBvdmVybG9uZworICB2YWx1ZS4KKworKiBwcnVuaW5nIHJlZmxvZyBlbnRyaWVzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGZyb20gdGhlIHRpcCBvZiB0aGUgcmVmCisgIGR1cmluZyAiZ2l0IHJlZmxvZyBwcnVuZSIgKGhlbmNlICJnaXQgZ2MiKSB3YXMgdmVyeSBpbmVmZmljaWVudC4KKworKiAiZ2l0LWFkZCAtcCIgbGFja2VkIGEgd2F5IHRvIHNheSAicSJ1aXQgdG8gcmVmdXNlIHN0YWdpbmcgYW55IGh1bmtzIGZvcgorICB0aGUgcmVtYWluaW5nIHBhdGhzLiAgWW91IGhhZCB0byBzYXkgImQiIGFuZCB0aGVuIF5DLgorCisqICJnaXQtY2hlY2tvdXQgPHRyZWUtaXNoPiA8c3VibW9kdWxlPiIgZGlkIG5vdCB1cGRhdGUgdGhlIGluZGV4IGVudHJ5IGF0CisgIHRoZSBuYW1lZCBwYXRoOyBpdCBub3cgZG9lcy4KKworKiAiZ2l0LWZhc3QtZXhwb3J0IiBjaG9rZWQgd2hlbiBzZWVpbmcgYSB0YWcgdGhhdCBkb2VzIG5vdCBwb2ludCBhdCBjb21taXQuCisKKyogImdpdCBpbml0IiBzZWdmYXVsdGVkIHdoZW4gZ2l2ZW4gYW4gb3ZlcmxvbmcgdGVtcGxhdGUgbG9jYXRpb24gdmlhCisgIHRoZSAtLXRlbXBsYXRlPSBvcHRpb24uCisKKyogImdpdC1scy10cmVlIiBhbmQgImdpdC1kaWZmLXRyZWUiIHVzZWQgYSBwYXRoc3BlYyBjb3JyZWN0bHkgd2hlbgorICBkZWNpZGluZyB0byBkZXNjZW5kIGludG8gYSBzdWJkaXJlY3RvcnkgYnV0IHRoZXkgZGlkIG5vdCBtYXRjaCB0aGUKKyAgaW5kaXZpZHVhbCBwYXRocyBjb3JyZWN0bHkuICBUaGlzIGNhdXNlZCBwYXRoc3BlY3MgImFiYy9kIGFiIiB0byBtYXRjaAorICAiYWJjLzAiICgiYWJjL2QiIG1hZGUgdGhlbSBkZWNpZGUgdG8gZGVzY2VuZCBpbnRvIHRoZSBkaXJlY3RvcnkgImFiYy8iLAorICBhbmQgdGhlbiAiYWIiIGluY29ycmVjdGx5IG1hdGNoZWQgImFiYy8wIiB3aGVuIGl0IHNob3VsZG4ndCkuCisKKyogImdpdC1tZXJnZS1yZWN1cnNpdmUiIHdhcyBicm9rZW4gd2hlbiBhIHN1Ym1vZHVsZSBlbnRyeSB3YXMgaW52b2x2ZWQgaW4KKyAgYSBjcmlzcy1jcm9zcyBtZXJnZSBzaXR1YXRpb24uCisKK01hbnkgc21hbGwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZCBhcyB3ZWxsLgorCistLS0KK2V4ZWMgPi92YXIvdG1wLzEKK2VjaG8gTz0kKGdpdCBkZXNjcmliZSBtYWludCkKK089djEuNi4yLjMtMzgtZzMxOGI4NDcKK2dpdCBzaG9ydGxvZyAtLW5vLW1lcmdlcyAkTy4ubWFpbnQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyM2Y5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjUudHh0CkBAIC0wLDAgKzEsMjEgQEAKK0dJVCB2MS42LjIuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjIuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGFwcGx5IiBtaXNoYW5kbGVkIGlmIHlvdSBmZWQgYSBnaXQgZ2VuZXJhdGVkIHBhdGNoIHRoYXQgcmVuYW1lcworICBmaWxlIEEgdG8gQiBhbmQgZmlsZSBCIHRvIEEgYXQgdGhlIHNhbWUgdGltZS4KKworKiAiZ2l0IGRpZmYgLWMgLXAiIChhbmQgImRpZmYgLS1jYyIpIGRpZCBub3QgZXhwZWN0IHRvIHNlZSBzdWJtb2R1bGUKKyAgZGlmZmVyZW5jZXMgYW5kIGluc3RlYWQgcmVmdXNlZCB0byB3b3JrLgorCisqICJnaXQgZ3JlcCAtZSAnKCciIHNlZ2ZhdWx0ZWQsIGluc3RlYWQgb2YgZGlhZ25vc2luZyBhIG1pc21hdGNoZWQKKyAgcGFyZW50aGVzZXMgZXJyb3IuCisKKyogImdpdCBmZXRjaCIgZ2VuZXJhdGVkIHBhY2tzIHdpdGggb2Zmc2V0LWRlbHRhIGVuY29kaW5nIHdoZW4gYm90aCBlbmRzIG9mCisgIHRoZSBjb25uZWN0aW9uIGFyZSBjYXBhYmxlIG9mIHByb2R1Y2luZyBvbmU7IHRoaXMgY2Fubm90IGJlIHJlYWQgYnkKKyAgYW5jaWVudCBnaXQgYW5kIHRoZSB1c2VyIHNob3VsZCBiZSBhYmxlIHRvIGRpc2FibGUgdGhpcyBieSBzZXR0aW5nCisgIHJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQgY29uZmlndXJhdGlvbiB0byBmYWxzZS4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDYwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLnR4dApAQCAtMCwwICsxLDE2NCBAQAorR0lUIHYxLjYuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworV2l0aCB0aGUgbmV4dCBtYWpvciByZWxlYXNlLCAiZ2l0IHB1c2giIGludG8gYSBicmFuY2ggdGhhdCBpcworY3VycmVudGx5IGNoZWNrZWQgb3V0IHdpbGwgYmUgcmVmdXNlZCBieSBkZWZhdWx0LiAgWW91IGNhbiBjaG9vc2UKK3doYXQgc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LgorCitUbyBlYXNlIHRoZSB0cmFuc2l0aW9uIHBsYW4sIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSBvZiBzdWNoIGEKK3B1c2ggcnVubmluZyB0aGlzIHJlbGVhc2Ugd2lsbCBpc3N1ZSBhIGJpZyB3YXJuaW5nIHdoZW4gdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG1pc3NpbmcuICBQbGVhc2UgcmVmZXIgdG86CisKKyAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQorICBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTA3NzU4L2ZvY3VzPTEwODAwNworCitmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCit0cmFuc2l0aW9uIHBsYW4uCisKK0ZvciBhIHNpbWlsYXIgcmVhc29uLCAiZ2l0IHB1c2ggJHRoZXJlIDoka2lsbGVkIiB0byBkZWxldGUgdGhlIGJyYW5jaAorJGtpbGxlZCBpbiBhIHJlbW90ZSByZXBvc2l0b3J5ICR0aGVyZSwgaWYgJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQKK2JyYW5jaCBwb2ludGVkIGF0IGJ5IGl0cyBIRUFELCBnZXRzIGEgbGFyZ2Ugd2FybmluZy4gIFlvdSBjYW4gY2hvb3NlIHdoYXQKK3Nob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCityZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50IGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworCitVcGRhdGVzIHNpbmNlIHYxLjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyogZ2l0LXN2biB1cGRhdGVzLgorCisqIGdpdHdlYiB1cGRhdGVzLCBpbmNsdWRpbmcgYSBuZXcgcGF0Y2ggdmlldyBhbmQgUlNTL0F0b20gZmVlZAorICBpbXByb3ZlbWVudHMuCisKKyogKGNvbnRyaWIvZW1hY3MpIGdpdC5lbCBub3cgaGFzIGNvbW1hbmRzIGZvciBjaGVja2luZyBvdXQgYSBicmFuY2gsCisgIGNyZWF0aW5nIGEgYnJhbmNoLCBjaGVycnktcGlja2luZyBhbmQgcmV2ZXJ0aW5nIGNvbW1pdHM7IHZjLWdpdC5lbAorICBpcyBub3Qgc2hpcHBlZCB3aXRoIGdpdCBhbnltb3JlIChpdCBpcyBwYXJ0IG9mIG9mZmljaWFsIEVtYWNzKS4KKworKHBlcmZvcm1hbmNlKQorCisqIHBhY2stb2JqZWN0cyBhdXRvZGV0ZWN0cyB0aGUgbnVtYmVyIG9mIENQVXMgYXZhaWxhYmxlIGFuZCB1c2VzIHRocmVhZGVkCisgIHZlcnNpb24uCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworKiBhdXRvbWF0aWMgdHlwbyBjb3JyZWN0aW9uIHdvcmtzIG9uIGFsaWFzZXMgYXMgd2VsbAorCisqIEB7LTF9IGlzIGEgd2F5IHRvIHJlZmVyIHRvIHRoZSBsYXN0IGJyYW5jaCB5b3Ugd2VyZSBvbi4gIFRoaXMgaXMKKyAgYWNjZXB0ZWQgbm90IG9ubHkgd2hlcmUgYW4gb2JqZWN0IG5hbWUgaXMgZXhwZWN0ZWQsIGJ1dCBhbnl3aGVyZQorICBhIGJyYW5jaCBuYW1lIGlzIGV4cGVjdGVkIGFuZCBhY3RzIGFzIGlmIHlvdSB0eXBlZCB0aGUgYnJhbmNoIG5hbWUuCisgIEUuZy4gImdpdCBicmFuY2ggLS10cmFjayBteWJyYW5jaCBAey0xfSIsICJnaXQgbWVyZ2UgQHstMX0iLCBhbmQKKyAgImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgQHstMX0iIHdvdWxkIHdvcmsgYXMgZXhwZWN0ZWQuCisKKyogV2hlbiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgcG9pbnRzIGF0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCB0aGF0CisgIGhhcyBiZWVuIHBydW5lZCBhd2F5LCBtYW55IGdpdCBvcGVyYXRpb25zIGlzc3VlZCB3YXJuaW5nIHdoZW4gdGhleQorICBpbnRlcm5hbGx5IGVudW1lcmF0ZWQgdGhlIHJlZnMuICBXZSBub3cgd2FybiBvbmx5IHdoZW4geW91IHNheSAib3JpZ2luIgorICB0byByZWZlciB0byB0aGF0IHBydW5lZCBicmFuY2guCisKKyogVGhlIGxvY2F0aW9uIG9mIC5tYWlsbWFwIGZpbGUgY2FuIGJlIGNvbmZpZ3VyZWQsIGFuZCBpdHMgZmlsZSBmb3JtYXQgd2FzCisgIGVuaGFuY2VkIHRvIGFsbG93IG1hcHBpbmcgYW4gaW5jb3JyZWN0IGUtbWFpbCBmaWVsZCBhcyB3ZWxsLgorCisqICJnaXQgYWRkIC1wIiBsZWFybmVkICdnJ290byBhY3Rpb24gdG8ganVtcCBkaXJlY3RseSB0byBhIGh1bmsuCisKKyogImdpdCBhZGQgLXAiIGxlYXJuZWQgdG8gZmluZCBhIGh1bmsgd2l0aCBnaXZlbiB0ZXh0IHdpdGggJy8nLgorCisqICJnaXQgYWRkIC1wIiBvcHRpb25hbGx5IGNhbiBiZSB0b2xkIHRvIHdvcmsgd2l0aCBqdXN0IHRoZSBjb21tYW5kIGxldHRlcgorICB3aXRob3V0IEVudGVyLgorCisqIHdoZW4gImdpdCBhbSIgc3RvcHMgdXBvbiBhIHBhdGNoIHRoYXQgZG9lcyBub3QgYXBwbHksIGl0IHNob3dzIHRoZQorICB0aXRsZSBvZiB0aGUgb2ZmZW5kaW5nIHBhdGNoLgorCisqICJnaXQgYW0gLS1kaXJlY3Rvcnk9PGRpcj4iIGFuZCAiZ2l0IGFtIC0tcmVqZWN0IiBwYXNzZXMgdGhlc2Ugb3B0aW9ucworICB0byB1bmRlcmx5aW5nICJnaXQgYXBwbHkiLgorCisqICJnaXQgYW0iIGxlYXJuZWQgLS1pZ25vcmUtZGF0ZSBvcHRpb24uCisKKyogImdpdCBibGFtZSIgYWxpZ25zIGF1dGhvciBuYW1lcyBiZXR0ZXIgd2hlbiB0aGV5IGFyZSBzcGVsbGVkIGluCisgIG5vbiBVUy1BU0NJSSBlbmNvZGluZy4KKworKiAiZ2l0IGNsb25lIiBub3cgbWFrZXMgaXRzIGJlc3QgZWZmb3J0IHdoZW4gY2xvbmluZyBmcm9tIGFuIGVtcHR5CisgIHJlcG9zaXRvcnkgdG8gc2V0IHVwIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRvIHJlZmVyIHRvIHRoZSByZW1vdGUKKyAgcmVwb3NpdG9yeS4KKworKiAiZ2l0IGNoZWNrb3V0IC0iIGlzIGEgc2hvcnRoYW5kIGZvciAiZ2l0IGNoZWNrb3V0IEB7LTF9Ii4KKworKiAiZ2l0IGNoZXJyeSIgZGVmYXVsdHMgdG8gd2hhdGV2ZXIgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHRyYWNraW5nIChpZgorICBleGlzdHMpIHdoZW4gdGhlIDx1cHN0cmVhbT4gYXJndW1lbnQgaXMgbm90IGdpdmVuLgorCisqICJnaXQgY3Zzc2VydmVyIiBjYW4gYmUgdG9sZCBub3QgdG8gYWRkIGV4dHJhICJ2aWEgZ2l0LUNWUyBlbXVsYXRvciIgdG8KKyAgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpdCBzZXJ2ZXMgdmlhIGdpdGN2cy5jb21taXRtc2dhbm5vdGF0aW9uCisgIGNvbmZpZ3VyYXRpb24uCisKKyogImdpdCBjdnNzZXJ2ZXIiIGxlYXJuZWQgdG8gaGFuZGxlICdub29wJyBjb21tYW5kIHNvbWUgQ1ZTIGNsaWVudHMgc2VlbQorICB0byBleHBlY3QgdG8gd29yay4KKworKiAiZ2l0IGRpZmYiIGxlYXJuZWQgYSBuZXcgb3B0aW9uIC0taW50ZXItaHVuay1jb250ZXh0IHRvIGNvYWxlc2NlIGNsb3NlCisgIGh1bmtzIHRvZ2V0aGVyIGFuZCBzaG93IGNvbnRleHQgYmV0d2VlbiB0aGVtLgorCisqIFRoZSBkZWZpbml0aW9uIG9mIHdoYXQgY29uc3RpdHV0ZXMgYSB3b3JkIGZvciAiZ2l0IGRpZmYgLS1jb2xvci13b3JkcyIKKyAgY2FuIGJlIGN1c3RvbWl6ZWQgdmlhIGdpdGF0dHJpYnV0ZXMsIGNvbW1hbmQgbGluZSBvciBhIGNvbmZpZ3VyYXRpb24uCisKKyogImdpdCBkaWZmIiBsZWFybmVkIC0tcGF0aWVuY2UgdG8gcnVuICJwYXRpZW5jZSBkaWZmIiBhbGdvcml0aG0uCisKKyogImdpdCBmaWx0ZXItYnJhbmNoIiBsZWFybmVkIC0tcHJ1bmUtZW1wdHkgb3B0aW9uIHRoYXQgZGlzY2FyZHMgY29tbWl0cworICB0aGF0IGRvIG5vdCBjaGFuZ2UgdGhlIGNvbnRlbnRzLgorCisqICJnaXQgZnNjayIgbm93IGNoZWNrcyBsb29zZSBvYmplY3RzIGluIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzLCBpbnN0ZWFkCisgIG9mIG1pc3JlcG9ydGluZyB0aGVtIGFzIG1pc3NpbmcuCisKKyogImdpdCBnYyAtLXBydW5lIiB3YXMgcmVzdXJyZWN0ZWQgdG8gYWxsb3cgImdpdCBnYyAtLW5vLXBydW5lIiBhbmQKKyAgZ2l2aW5nIG5vbi1kZWZhdWx0IGV4cGlyYXRpb24gcGVyaW9kIGUuZy4gImdpdCBnYyAtLXBydW5lPW5vdyIuCisKKyogImdpdCBncmVwIC13IiBhbmQgImdpdCBncmVwIiBmb3IgZml4ZWQgc3RyaW5ncyBoYXZlIGJlZW4gb3B0aW1pemVkLgorCisqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIC15KC0tbm8tcHJvbXB0KSBvcHRpb24gdG8gZGlzYWJsZSBwcm9tcHRpbmcuCisKKyogImdpdCByZWJhc2UgLWkiIGNhbiB0cmFuc3BsYW50IGEgaGlzdG9yeSBkb3duIHRvIHJvb3QgdG8gZWxzZXdoZXJlCisgIHdpdGggLS1yb290IG9wdGlvbi4KKworKiAiZ2l0IHJlc2V0IC0tbWVyZ2UiIGlzIGEgbmV3IG1vZGUgdGhhdCB3b3JrcyBzaW1pbGFyIHRvIHRoZSB3YXkKKyAgImdpdCBjaGVja291dCIgc3dpdGNoZXMgYnJhbmNoZXMsIHRha2luZyB0aGUgbG9jYWwgY2hhbmdlcyB3aGlsZQorICBzd2l0Y2hpbmcgdG8gYW5vdGhlciBjb21taXQuCisKKyogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBsZWFybmVkIC0tbm8tZmV0Y2ggb3B0aW9uLgorCisqICJnaXQgdGFnIiBsZWFybmVkIC0tY29udGFpbnMgdGhhdCB3b3JrcyB0aGUgc2FtZSB3YXkgYXMgdGhlIHNhbWUgb3B0aW9uCisgIGZyb20gImdpdCBicmFuY2giLgorCisKK0ZpeGVzIHNpbmNlIHYxLjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi4xLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitIZXJlIGFyZSBmaXhlcyB0aGF0IHRoaXMgcmVsZWFzZSBoYXMsIGJ1dCBoYXZlIG5vdCBiZWVuIGJhY2twb3J0ZWQgdG8KK3YxLjYuMS5YIHNlcmllcy4KKworKiAiZ2l0LWFkZCBzdWIvZmlsZSIgd2hlbiBzdWIgaXMgYSBzdWJtb2R1bGUgaW5jb3JyZWN0bHkgYWRkZWQgdGhlIHBhdGggdG8KKyAgdGhlIHN1cGVycHJvamVjdC4KKworKiAiZ2l0IGJ1bmRsZSIgZGlkIG5vdCBleGNsdWRlIGFubm90YXRlZCB0YWdzIGV2ZW4gd2hlbiBhIHJhbmdlIGdpdmVuCisgIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3YW50ZWQgdG8uCisKKyogImdpdCBmaWx0ZXItYnJhbmNoIiB1bm5lY2Vzc2FyaWx5IHJlZnVzZWQgdG8gd29yayB3aGVuIHlvdSBoYWQKKyAgY2hlY2tlZCBvdXQgYSBkaWZmZXJlbnQgY29tbWl0IGZyb20gd2hhdCBpcyByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0CisgIGluZGV4IGluIGEgc3VibW9kdWxlLgorCisqICJnaXQgZmlsdGVyLWJyYW5jaCIgaW5jb3JyZWN0bHkgdHJpZWQgdG8gdXBkYXRlIGEgbm9uZXhpc3RlbnQgd29yayB0cmVlCisgIGF0IHRoZSBlbmQgd2hlbiBpdCBpcyBydW4gaW4gYSBiYXJlIHJlcG9zaXRvcnkuCisKKyogImdpdCBnYyIgZGlkIG5vdCB3b3JrIGlmIHlvdXIgcmVwb3NpdG9yeSB3YXMgY3JlYXRlZCB3aXRoIGFuIGFuY2llbnQgZ2l0CisgIGFuZCBuZXZlciBoYWQgYW55IHBhY2sgZmlsZXMgaW4gaXQgYmVmb3JlLgorCisqICJnaXQgbWVyZ2V0b29sIiB1c2VkIHRvIGlnbm9yZSBhdXRvY3JsZiBhbmQgb3RoZXIgYXR0cmlidXRlcworICBiYXNlZCBjb250ZW50IHJld3JpdGluZy4KKworKiBicmFuY2ggc3dpdGNoaW5nIGFuZCBtZXJnZXMgaGFkIGEgc2lsbHkgYnVnIHRoYXQgZGlkIG5vdCB2YWxpZGF0ZQorICB0aGUgY29ycmVjdCBkaXJlY3Rvcnkgd2hlbiBtYWtpbmcgc3VyZSBhbiBleGlzdGluZyBzdWJkaXJlY3RvcnkgaXMKKyAgY2xlYW4uCisKKyogImdpdCAtcCBjbWQiIHdoZW4gY21kIGlzIG5vdCBhIGJ1aWx0LWluIG9uZSBsZWZ0IHRoZSBkaXNwbGF5IGluIGZ1bm55IHN0YXRlCisgIHdoZW4ga2lsbGVkIGluIHRoZSBtaWRkbGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDAwYjcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4xLnR4dApAQCAtMCwwICsxLDEwIEBACitHSVQgdjEuNi4zLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNoZWNrb3V0IC1iIG5ldy1icmFuY2giIHdpdGggYSBzdGFnZWQgY2hhbmdlIGluIHRoZSBpbmRleAorICBpbmNvcnJlY3RseSBwcmltZWQgdGhlIGluLWluZGV4IGNhY2hlLXRyZWUsIHJlc3VsdGluZyBhIHdyb25nIHRyZWUKKyAgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gb3V0IG9mIHRoZSBpbmRleC4gIFRoaXMgaXMgYSBncmF2ZSByZWdyZXNzaW9uCisgIHNpbmNlIHRoZSBsYXN0IDEuNi4yLlggbWFpbnRlbmFuY2UgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZjNmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjIudHh0CkBAIC0wLDAgKzEsNjEgQEAKK0dJVCB2MS42LjMuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjMuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQSBmZXcgY29kZXBhdGhzIHBpY2tlZCB1cCB0aGUgZmlyc3QgZmV3IGJ5dGVzIGZyb20gYW4gc2hhMVtdIGJ5CisgICBjYXN0aW5nIHRoZSAoY2hhciAqKSBwb2ludGVyIHRvIChpbnQgKik7IEdDQyA0LjQgZGlkIG5vdCBsaWtlIHRoaXMsCisgICBhbmQgYWJvcnRlZCBjb21waWxhdGlvbi4KKworICogU29tZSB1bmxpbmsoMikgZmFpbHVyZXMgd2VudCB1bmRpYWdub3NlZC4KKworICogVGhlICJyZWN1cnNpdmUiIG1lcmdlIHN0cmF0ZWd5IG1pc2JlaGF2ZWQgd2hlbiBmYWNlZCByZW5hbWUvZGVsZXRlCisgICBjb25mbGljdHMgd2hpbGUgY29taW5nIHVwIHdpdGggYW4gaW50ZXJtZWRpYXRlIG1lcmdlIGJhc2UuCisKKyAqIFRoZSBsb3ctbGV2ZWwgbWVyZ2UgYWxnb3JpdGhtIGRpZCBub3QgaGFuZGxlIGEgZGVnZW5lcmF0ZSBjYXNlIG9mCisgICBtZXJnaW5nIGEgZmlsZSB3aXRoIGl0c2VsZiB1c2luZyBpdHNlbGYgYXMgdGhlIGNvbW1vbiBhbmNlc3RvcgorICAgZ3JhY2VmdWxseS4gIEl0IHNob3VsZCBwcm9kdWNlIHRoZSBmaWxlIGl0c2VsZiwgYnV0IGluc3RlYWQKKyAgIHByb2R1Y2VkIGFuIGVtcHR5IHJlc3VsdC4KKworICogR0lUX1RSQUNFIG1lY2hhbmlzbSBzZWdmYXVsdGVkIHdoZW4gdHJhY2luZyBhIHNoZWxsLXF1b3RlZCBhbGlhc2VzLgorCisgKiBPcGVuQlNEIGFsc28gdXNlcyBzdF9jdGltc3BlYyBpbiAic3RydWN0IHN0YXQiLCBpbnN0ZWFkIG9mICJzdF9jdGltIi4KKworICogV2l0aCBOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTLCAibWFrZSBpbnN0YWxsIiBjYW4gYmUgdG9sZCBub3QgdG8KKyAgIGNyZWF0ZSBoYXJkbGlua3MgYmV0d2VlbiAkKGdpdGV4ZWNkaXIpL2dpdC0kYnVpbHRpbl9jb21tYW5kcyBhbmQKKyAgICQoYmluZGlyKS9naXQuCisKKyAqIGNvbW1hbmQgY29tcGxldGlvbiBjb2RlIGluIGJhc2ggZGlkIG5vdCByZWxpYWJseSBkZXRlY3QgdGhhdCB3ZSBhcmUKKyAgIGluIGEgYmFyZSByZXBvc2l0b3J5LgorCisgKiAiZ2l0IGFkZCAuIiBpbiBhbiBlbXB0eSBkaXJlY3RvcnkgY29tcGxhaW5lZCB0aGF0IHBhdGhzcGVjICIuIiBkaWQgbm90CisgICBtYXRjaCBhbnl0aGluZywgd2hpY2ggbWF5IGJlIHRlY2huaWNhbGx5IGNvcnJlY3QsIGJ1dCBub3QgdXNlZnVsLiAgV2UKKyAgIHNpbGVudGx5IG1ha2UgaXQgYSBuby1vcCBub3cuCisKKyAqICJnaXQgYWRkIC1wIiAoYW5kICJwYXRjaCIgYWN0aW9uIGluICJnaXQgYWRkIC1pIikgd2FzIGJyb2tlbiB3aGVuCisgICB0aGUgZmlyc3QgaHVuayB0aGF0IGFkZHMgYSBsaW5lIGF0IHRoZSB0b3Agd2FzIHNwbGl0IGludG8gdHdvIGFuZAorICAgYm90aCBoYWx2ZXMgYXJlIG1hcmtlZCB0byBiZSB1c2VkLgorCisgKiAiZ2l0IGJsYW1lIHBhdGgiIG1pc2JlaGF2ZWQgYXQgdGhlIGNvbW1pdCB3aGVyZSBwYXRoIGJlY2FtZSBmaWxlCisgICBmcm9tIGEgZGlyZWN0b3J5IHdpdGggc29tZSBmaWxlcyBpbiBpdC4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGhhZCBhIHNlZ2ZhdWx0aW5nIGJ1ZyB3aGVuIGRlYWxpbmcgd2l0aCBhIHRhZyBvYmplY3QKKyAgIGNyZWF0ZWQgYnkgYW4gYW5jaWVudCBnaXQuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC1rIiBzdGlsbCBhZGRlZCBwYXRjaCBudW1iZXJzIGlmIGZvcm1hdC5udW1iZXJlZAorICAgY29uZmlndXJhdGlvbiB3YXMgc2V0LgorCisgKiAiZ2l0IGdyZXAgLS1jb2xvciAnJyIgZGlkIG5vdCB0ZXJtaW5hdGUuICBUaGUgY29tbWFuZCBhbHNvIGhhZAorICAgc3VidGxlIGJ1Z3Mgd2l0aCBpdHMgLXcgb3B0aW9uLgorCisgKiBodHRwLXB1c2ggaGFkIGEgc21hbGwgdXNlLWFmdGVyLWZyZWUgYnVnLgorCisgKiAiZ2l0IHB1c2giIHdhcyBjb252ZXJ0aW5nIE9GU19ERUxUQSBwYWNrIHJlcHJlc2VudGF0aW9uIGludG8gbGVzcworICAgZWZmaWNpZW50IFJFRl9ERUxUQSByZXByZXNlbnRhdGlvbiB1bmNvbmRpdGlvbmFsbHkgdXBvbiB0cmFuc2ZlciwKKyAgIG1ha2luZyB0aGUgdHJhbnNmZXJyZWQgZGF0YSB1bm5lY2Vzc2FyaWx5IGxhcmdlci4KKworICogImdpdCByZW1vdGUgc2hvdyBvcmlnaW4iIHNlZ2ZhdWx0ZWQgd2hlbiBvcmlnaW4gd2FzIHN0aWxsIGVtcHR5LgorCitNYW55IG90aGVyIGdlbmVyYWwgdXNhYmlsaXR5IHVwZGF0ZXMgYXJvdW5kIGhlbHAgdGV4dCwgZGlhZ25vc3RpYyBtZXNzYWdlcworYW5kIGRvY3VtZW50YXRpb24gYXJlIGluY2x1ZGVkIGFzIHdlbGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzI4Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4zLnR4dApAQCAtMCwwICsxLDM4IEBACitHSVQgdjEuNi4zLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4zLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgYXJjaGl2ZSIgcnVubmluZyBvbiBDeWd3aW4gY2FuIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLgorCisgKiAiZ2l0IGRhZW1vbiIgZGlkIG5vdCBjb3JyZWN0bHkgcGFyc2UgdGhlIGluaXRpYWwgbGluZSB0aGF0IGNhcnJpZXMKKyAgIHZpcnR1YWwgaG9zdCByZXF1ZXN0IGluZm9ybWF0aW9uLgorCisgKiAiZ2l0IGRpZmYgLS10ZXh0Y29udiIgbGVha2VkIG1lbW9yeSBiYWRseSB3aGVuIHRoZSB0ZXh0Y29udiBmaWx0ZXIKKyAgIGVycm9yZWQgb3V0LgorCisgKiBUaGUgYnVpbHQtaW4gcmVndWxhciBleHByZXNzaW9ucyB0byBwaWNrIGZ1bmN0aW9uIG5hbWVzIHRvIHB1dCBvbgorICAgaHVuayBoZWFkZXIgbGluZXMgZm9yIGphdmEgYW5kIG9iamMgd2VyZSB2ZXJ5IGluZWZmaWNpZW50bHkgd3JpdHRlbi4KKworICogaW4gY2VydGFpbiBlcnJvciBzaXR1YXRpb25zIGdpdC1mZXRjaCAoYW5kIGdpdC1jbG9uZSkgb24gV2luZG93cyBkaWRuJ3QKKyAgIGRldGVjdCBjb25uZWN0aW9uIGFib3J0IGFuZCBlbmRlZCB1cCB3YWl0aW5nIGluZGVmaW5pdGVseS4KKworICogaW1wb3J0LXRhcnMgc2NyaXB0IChpbiBjb250cmliKSBkaWQgbm90IGltcG9ydCBzeW1ib2xpYyBsaW5rcyBjb3JyZWN0bHkuCisKKyAqIGh0dHAuYyB1c2VkIENVUkxPUFRfU1NMS0VZIGV2ZW4gb24gbGliY1VSTCB2ZXJzaW9uIDcuOS4yLCBldmVuIHRob3VnaAorICAgaXQgd2FzIG9ubHkgYXZhaWxhYmxlIHN0YXJ0aW5nIDcuOS4zLgorCisgKiBsb3ctbGV2ZWwgZmlsZWxldmVsIG1lcmdlIGRyaXZlciB1c2VkIHJldHVybiB2YWx1ZSBmcm9tIHN0cmR1cCgpCisgICB3aXRob3V0IGNoZWNraW5nIGlmIHdlIHJhbiBvdXQgb2YgbWVtb3J5LgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbGVmdCBzdHJheSBjbG9zaW5nIHBhcmVudGhlc2lzIGluIGl0cyByZWZsb2cgbWVzc2FnZS4KKworICogImdpdCByZW1vdGUgc2hvdyIgZGlkIG5vdCBzaG93IGFsbCB0aGUgVVJMcyBhc3NvY2lhdGVkIHdpdGggdGhlIG5hbWVkCisgICByZW1vdGUsIGV2ZW4gdGhvdWdoICJnaXQgcmVtb3RlIC12IiBkaWQuICBNYWRlIHRoZW0gY29uc2lzdGVudCBieQorICAgbWFraW5nIHRoZSBmb3JtZXIgc2hvdyBhbGwgVVJMcy4KKworICogIndoaXRlc3BhY2UiIGF0dHJpYnV0ZSB0aGF0IGlzIHNldCB3YXMgbWVhbnQgdG8gZGV0ZWN0IGFsbCBlcnJvcnMga25vd24KKyAgIHRvIGdpdCwgYnV0IGl0IHRvbGQgZ2l0IHRvIGlnbm9yZSB0cmFpbGluZyBjYXJyaWFnZS1yZXR1cm5zLgorCitJbmNsdWRlcyBvdGhlciBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkNDYxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuNC50eHQKQEAgLTAsMCArMSwzNiBAQAorR0lUIHYxLjYuMy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMy4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFkZCAtLW5vLWlnbm9yZS1lcnJvcnMiIGRpZCBub3Qgb3ZlcnJpZGUgY29uZmlndXJlZAorICAgYWRkLmlnbm9yZS1lcnJvcnMgY29uZmlndXJhdGlvbi4KKworICogImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiBkaWQgbm90IGZpeCB0cmFpbGluZyB3aGl0ZXNwYWNlIG9uIGFuCisgICBpbmNvbXBsZXRlIGxpbmUuCisKKyAqICJnaXQgYnJhbmNoIiBvcGVuZWQgdG9vIG1hbnkgY29tbWl0IG9iamVjdHMgdW5uZWNlc3NhcmlseS4KKworICogImdpdCBjaGVja291dCAtZiAkY29tbWl0IiB3aXRoIGEgcGF0aCB0aGF0IGlzIGEgZmlsZSAob3IgYSBzeW1saW5rKSBpbgorICAgdGhlIHdvcmsgdHJlZSB0byBhIGNvbW1pdCB0aGF0IGhhcyBhIGRpcmVjdG9yeSBhdCB0aGUgcGF0aCBpc3N1ZWQgYW4KKyAgIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2UuCisKKyAqICJnaXQgZGlmZiAtYy8tLWNjIiB3YXMgdmVyeSBpbmVmZmljaWVudCBpbiBjb2FsZXNjaW5nIHRoZSByZW1vdmVkIGxpbmVzCisgICBzaGFyZWQgYmV0d2VlbiBwYXJlbnRzLgorCisgKiAiZ2l0IGRpZmYgLWMvLS1jYyIgc2hvd2VkIHJlbW92ZWQgbGluZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpbGUKKyAgIGluY29ycmVjdGx5LgorCisgKiAiZ2l0IHJlbW90ZSBzaG93IG5pY2tuYW1lIiBkaWQgbm90IGhvbm9yIGNvbmZpZ3VyZWQKKyAgIHJlbW90ZS5uaWNrbmFtZS51cGxvYWRwYWNrIHdoZW4gaW5zcGVjdGluZyB0aGUgYnJhbmNoZXMgYXQgdGhlIHJlbW90ZS4KKworICogImdpdCByZXF1ZXN0LXB1bGwiIHdoZW4gdGFsa2luZyB0byB0aGUgdGVybWluYWwgZm9yIGEgcHJldmlldworICAgc2hvd2VkIHNvbWUgb2YgdGhlIG91dHB1dCBpbiB0aGUgcGFnZXIuCisKKyAqICJnaXQgcmVxdWVzdC1wdWxsIHN0YXJ0IG5pY2tuYW1lIFtlbmRdIiBkaWQgbm90IGhvbm9yIGNvbmZpZ3VyZWQKKyAgIHJlbW90ZS5uaWNrbmFtZS51cGxvYWRwYWNrIHdoZW4gaXQgcmFuIGdpdC1scy1yZW1vdGUgYWdhaW5zdCB0aGUgcmVtb3RlCisgICByZXBvc2l0b3J5IHRvIGxlYXJuIHRoZSBjdXJyZW50IHRpcCBvZiBicmFuY2hlcy4KKworSW5jbHVkZXMgb3RoZXIgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBtaW5vciBmaXhlcy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MThjNjg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy50eHQKQEAgLTAsMCArMSwxODIgQEAKK0dJVCB2MS42LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1dpdGggdGhlIG5leHQgbWFqb3IgcmVsZWFzZSwgImdpdCBwdXNoIiBpbnRvIGEgYnJhbmNoIHRoYXQgaXMKK2N1cnJlbnRseSBjaGVja2VkIG91dCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4gIFlvdSBjYW4gY2hvb3NlCit3aGF0IHNob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworVG8gZWFzZSB0aGUgdHJhbnNpdGlvbiBwbGFuLCB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2Ygc3VjaCBhCitwdXNoIHJ1bm5pbmcgdGhpcyByZWxlYXNlIHdpbGwgaXNzdWUgYSBiaWcgd2FybmluZyB3aGVuIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBtaXNzaW5nLiAgUGxlYXNlIHJlZmVyIHRvOgorCisgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKKyAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzEwNzc1OC9mb2N1cz0xMDgwMDcKKworZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQordHJhbnNpdGlvbiBwbGFuLgorCitGb3IgYSBzaW1pbGFyIHJlYXNvbiwgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2gKKyRraWxsZWQgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSAkdGhlcmUsIGlmICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50CiticmFuY2ggcG9pbnRlZCBhdCBieSBpdHMgSEVBRCwgZ2V0cyBhIGxhcmdlIHdhcm5pbmcuICBZb3UgY2FuIGNob29zZSB3aGF0CitzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKK1doZW4gdGhlIHVzZXIgZG9lcyBub3QgdGVsbCAiZ2l0IHB1c2giIHdoYXQgdG8gcHVzaCwgaXQgaGFzIGFsd2F5cworcHVzaGVkIG1hdGNoaW5nIHJlZnMuICBGb3Igc29tZSBwZW9wbGUgaXQgaXMgdW5leHBlY3RlZCwgYW5kIGEgbmV3Citjb25maWd1cmF0aW9uIHZhcmlhYmxlIHB1c2guZGVmYXVsdCBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIGFsbG93CitjaGFuZ2luZyBhIGRpZmZlcmVudCBkZWZhdWx0IGJlaGF2aW91ci4gIFRvIGFkdmVydGlzZSB0aGUgbmV3IGZlYXR1cmUsCithIGJpZyB3YXJuaW5nIGlzIGlzc3VlZCBpZiB0aGlzIGlzIG5vdCBjb25maWd1cmVkIGFuZCBhIGdpdCBwdXNoIHdpdGhvdXQKK2FyZ3VtZW50cyBpcyBhdHRlbXB0ZWQuCisKKworVXBkYXRlcyBzaW5jZSB2MS42LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisqIHZhcmlvdXMgZ2l0LXN2biB1cGRhdGVzLgorCisqIGdpdC1ndWkgdXBkYXRlcywgaW5jbHVkaW5nIGFuIHVwZGF0ZSB0byBSdXNzaWFuIHRyYW5zbGF0aW9uLCBhbmQgYQorICBmaXggdG8gYW4gaW5maW5pdGUgbG9vcCB3aGVuIHNob3dpbmcgYW4gZW1wdHkgZGlmZi4KKworKiBnaXRrIHVwZGF0ZXMsIGluY2x1ZGluZyBhbiB1cGRhdGUgdG8gUnVzc2lhbiB0cmFuc2xhdGlvbiBhbmQgaW1wcm92ZWQgV2luZG93cworICBzdXBwb3J0LgorCisocGVyZm9ybWFuY2UpCisKKyogbWFueSB1c2VzIG9mIGxzdGF0KDIpIGluIHRoZSBjb2RlcGF0aCBmb3IgImdpdCBjaGVja291dCIgaGF2ZSBiZWVuCisgIG9wdGltaXplZCBvdXQuCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworKiBCb29sZWFuIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgeWVzL25vIGNhbiBiZSB3cml0dGVuIGFzIG9uL29mZi4KKworKiByc3luYzovcGF0aC90by9yZXBvIGNhbiBiZSB1c2VkIHRvIHJ1biBnaXQgb3ZlciByc3luYyBmb3IgbG9jYWwKKyAgcmVwb3NpdG9yaWVzLiAgSXQgbWF5IG5vdCBiZSB1c2VmdWwgaW4gcHJhY3RpY2U7IG1lYW50IHByaW1hcmlseSBmb3IKKyAgdGVzdGluZy4KKworKiBodHRwIHRyYW5zcG9ydCBsZWFybmVkIHRvIHByb21wdCBhbmQgdXNlIHBhc3N3b3JkIHdoZW4gZmV0Y2hpbmcgZnJvbSBvcgorICBwdXNoaW5nIHRvIGh0dHA6Ly91c2VyQGhvc3QueHovIFVSTC4KKworKiAobXN5c2dpdCkgcHJvZ3Jlc3Mgb3V0cHV0IHRoYXQgaXMgc2VudCBvdmVyIHRoZSBzaWRlYmFuZCBwcm90b2NvbCBjYW4KKyAgYmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5IGluIFdpbmRvd3MgY29uc29sZS4KKworKiAiLS1wcmV0dHk9PHN0eWxlPiIgb3B0aW9uIHRvIHRoZSBsb2cgZmFtaWx5IG9mIGNvbW1hbmRzIGNhbiBub3cgYmUKKyAgc3BlbGxlZCBhcyAiLS1mb3JtYXQ9PHN0eWxlPiIuICBJbiBhZGRpdGlvbiwgLS1mb3JtYXQ9JWZvcm1hdHN0cmluZworICBpcyBhIHNob3J0LWhhbmQgZm9yIC0tcHJldHR5PXRmb3JtYXQ6JWZvcm1hdHN0cmluZy4KKworKiAiLS1vbmVsaW5lIiBpcyBhIHN5bm9ueW0gZm9yICItLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCIuCisKKyogIi0tZ3JhcGgiIHRvIHRoZSAiZ2l0IGxvZyIgZmFtaWx5IGNhbiBkcmF3IHRoZSBjb21taXQgYW5jZXN0cnkgZ3JhcGgKKyAgaW4gY29sb3JzLgorCisqIElmIHlvdSByZWFsaXplIHRoYXQgeW91IGJvdGNoZWQgdGhlIHBhdGNoIHdoZW4geW91IGFyZSBlZGl0aW5nIGh1bmtzCisgIHdpdGggdGhlICdlZGl0JyBhY3Rpb24gaW4gZ2l0LWFkZCAtaS8tcCwgeW91IGNhbiBhYm9ydCB0aGUgZWRpdG9yIHRvCisgIHRlbGwgZ2l0IG5vdCB0byBhcHBseSBpdC4KKworKiBAey0xfSBpcyBhIG5ldyB3YXkgdG8gcmVmZXIgdG8gdGhlIGxhc3QgYnJhbmNoIHlvdSB3ZXJlIG9uIGludHJvZHVjZWQgaW4KKyAgMS42LjIsIGJ1dCB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IHRlYWNoIHRoaXMgdG8gYSBmZXcKKyAgY29tbWFuZHMuICBOb3cgdGhlIHN5bnRheCB3b3JrcyB3aXRoICJicmFuY2ggLW0gQHstMX0gbmV3bmFtZSIuCisKKyogZ2l0LWFyY2hpdmUgbGVhcm5lZCAtLW91dHB1dD08ZmlsZT4gb3B0aW9uLgorCisqIGdpdC1hcmNoaXZlIHRha2VzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgdHJlZSBiZWluZyBhcmNoaXZlZDsgc3RyaWN0bHkKKyAgc3BlYWtpbmcsIHRoaXMgaXMgYW4gaW5jb21wYXRpYmxlIGJlaGF2aW91ciBjaGFuZ2UsIGJ1dCBpcyBhIGdvb2Qgb25lLgorICBVc2UgLS13b3JrdHJlZS1hdHRyaWJ1dGVzIG9wdGlvbiB0byBhbGxvdyBpdCB0byByZWFkIGF0dHJpYnV0ZXMgZnJvbQorICB0aGUgd29yayB0cmVlIGFzIGJlZm9yZSAoZGVwcmVjYXRlZCBnaXQtdGFyIHRyZWUgY29tbWFuZCBhbHdheXMgcmVhZHMKKyAgYXR0cmlidXRlcyBmcm9tIHRoZSB3b3JrIHRyZWUpLgorCisqIGdpdC1iaXNlY3Qgc2hvd3Mgbm90IGp1c3QgdGhlIG51bWJlciBvZiByZW1haW5pbmcgY29tbWl0cyB3aG9zZSBnb29kbmVzcworICBpcyB1bmtub3duLCBidXQgYWxzbyBzaG93cyB0aGUgZXN0aW1hdGVkIG51bWJlciBvZiByZW1haW5pbmcgcm91bmRzLgorCisqIFlvdSBjYW4gZ2l2ZSAtLWRhdGU9PGZvcm1hdD4gb3B0aW9uIHRvIGdpdC1ibGFtZS4KKworKiAiZ2l0LWJyYW5jaCAtciIgc2hvd3MgSEVBRCBzeW1yZWYgdGhhdCBwb2ludHMgYXQgYSByZW1vdGUgYnJhbmNoIGluCisgIGludGVyZXN0IG9mIGVhY2ggdHJhY2tlZCByZW1vdGUgcmVwb3NpdG9yeS4KKworKiAiZ2l0LWJyYW5jaCAtdiAtdiIgaXMgYSBuZXcgd2F5IHRvIGdldCBsaXN0IG9mIG5hbWVzIGZvciBicmFuY2hlcyBhbmQgdGhlCisgICJ1cHN0cmVhbSIgYnJhbmNoIGZvciB0aGVtLgorCisqIGdpdC1jb25maWcgbGVhcm5lZCAtZSBvcHRpb24gdG8gb3BlbiBhbiBlZGl0b3IgdG8gZWRpdCB0aGUgY29uZmlnIGZpbGUKKyAgZGlyZWN0bHkuCisKKyogZ2l0LWNsb25lIHJ1bnMgcG9zdC1jaGVja291dCBob29rIHdoZW4gcnVuIHdpdGhvdXQgLS1uby1jaGVja291dC4KKworKiBnaXQtZGlmZnRvb2wgaXMgbm93IHBhcnQgb2YgdGhlIG9mZmljaWFsbHkgc3VwcG9ydGVkIGNvbW1hbmQsIHByaW1hcmlseQorICBtYWludGFpbmVkIGJ5IERhdmlkIEFndWlsYXIuCisKKyogZ2l0LWZvci1lYWNoLXJlZiBsZWFybmVkIGEgbmV3ICJ1cHN0cmVhbSIgdG9rZW4uCisKKyogZ2l0LWZvcm1hdC1wYXRjaCBjYW4gYmUgdG9sZCB0byB1c2UgYXR0YWNobWVudCB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24sCisgIGZvcm1hdC5hdHRhY2guCisKKyogZ2l0LWZvcm1hdC1wYXRjaCBjYW4gYmUgdG9sZCB0byBwcm9kdWNlIGRlZXAgb3Igc2hhbGxvdyBtZXNzYWdlIHRocmVhZHMuCisKKyogZ2l0LWZvcm1hdC1wYXRjaCBjYW4gYmUgdG9sZCB0byBhbHdheXMgYWRkIHNpZ24tb2ZmIHdpdGggYSBjb25maWd1cmF0aW9uCisgIHZhcmlhYmxlLgorCisqIGdpdC1mb3JtYXQtcGF0Y2ggbGVhcm5lZCBmb3JtYXQuaGVhZGVycyBjb25maWd1cmF0aW9uIHRvIGFkZCBleHRyYQorICBoZWFkZXIgZmllbGRzIHRvIHRoZSBvdXRwdXQuICBUaGlzIGJlaGF2aW91ciBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZworICAtLWFkZC1oZWFkZXI9PGhlYWRlcj4gb3B0aW9uIG9mIHRoZSBjb21tYW5kLgorCisqIGdpdC1mb3JtYXQtcGF0Y2ggZ2l2ZXMgaHVtYW4gcmVhZGFibGUgbmFtZXMgdG8gdGhlIGF0dGFjaGVkIGZpbGVzLCB3aGVuCisgIHRvbGQgdG8gc2VuZCBwYXRjaGVzIGFzIGF0dGFjaG1lbnRzLgorCisqIGdpdC1ncmVwIGxlYXJuZWQgdG8gaGlnaGxpZ2h0IHRoZSBmb3VuZCBzdWJzdHJpbmdzIGluIGNvbG9yLgorCisqIGdpdC1pbWFwLXNlbmQgbGVhcm5lZCB0byB3b3JrIGFyb3VuZCBUaHVuZGVyYmlyZCdzIGluYWJpbGl0eSB0byBlYXNpbHkKKyAgZGlzYWJsZSBmb3JtYXQ9Zmxvd2VkIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbiwgaW1hcC5wcmVmb3JtYXR0ZWRIVE1MLgorCisqIGdpdC1yZWJhc2UgY2FuIGJlIHRvbGQgdG8gcmViYXNlIHRoZSBzZXJpZXMgZXZlbiBpZiB5b3VyIGJyYW5jaCBpcyBhCisgIGRlc2NlbmRhbnQgb2YgdGhlIGNvbW1pdCB5b3UgYXJlIHJlYmFzaW5nIG9udG8gd2l0aCAtLWZvcmNlLXJlYmFzZQorICBvcHRpb24uCisKKyogZ2l0LXJlYmFzZSBjYW4gYmUgdG9sZCB0byByZXBvcnQgZGlmZnN0YXQgd2l0aCB0aGUgLS1zdGF0IG9wdGlvbi4KKworKiBPdXRwdXQgZnJvbSBnaXQtcmVtb3RlIGNvbW1hbmQgaGFzIGJlZW4gdmFzdGx5IGltcHJvdmVkLgorCisqICJnaXQgcmVtb3RlIHVwZGF0ZSAtLXBydW5lICRyZW1vdGUiIHVwZGF0ZXMgZnJvbSB0aGUgbmFtZWQgcmVtb3RlIGFuZAorICB0aGVuIHBydW5lcyBzdGFsZSB0cmFja2luZyBicmFuY2hlcy4KKworKiBnaXQtc2VuZC1lbWFpbCBsZWFybmVkIC0tY29uZmlybSBvcHRpb24gdG8gcmV2aWV3IHRoZSBDYzogbGlzdCBiZWZvcmUKKyAgc2VuZGluZyB0aGUgbWVzc2FnZXMgb3V0LgorCisoZGV2ZWxvcGVycykKKworKiBUZXN0IHNjcmlwdHMgY2FuIGJlIHJ1biB1bmRlciB2YWxncmluZC4KKworKiBUZXN0IHNjcmlwdHMgY2FuIGJlIHJ1biB3aXRoIGluc3RhbGxlZCBnaXQuCisKKyogTWFrZWZpbGUgbGVhcm5lZCAnY292ZXJhZ2UnIG9wdGlvbiB0byBydW4gdGhlIHRlc3Qgc3VpdGVzIHdpdGgKKyAgY292ZXJhZ2UgdHJhY2tpbmcgZW5hYmxlZC4KKworKiBCdWlsZGluZyB0aGUgbWFucGFnZXMgd2l0aCBkb2Nib29rLXhzbCBiZXR3ZWVuIDEuNjkuMSBhbmQgMS43MS4xIG5vdworICByZXF1aXJlcyBzZXR0aW5nIERPQ0JPT0tfU1VQUFJFU1NfU1AgdG8gd29yayBhcm91bmQgYSBkb2Nib29rLXhzbCBidWcuCisgIFRoaXMgd29ya2Fyb3VuZCB1c2VkIHRvIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGNhdXNlcyBwcm9ibGVtcworICB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGRvY2Jvb2steHNsLiAgSW4gYWRkaXRpb24sIHRoZXJlIGFyZSBhIGZldyBtb3JlCisgIGtub2JzIHlvdSBjYW4gdHdlYWsgdG8gd29yayBhcm91bmQgaXNzdWVzIHdpdGggdmFyaW91cyB2ZXJzaW9ucyBvZiB0aGUKKyAgZG9jYm9vay14c2wgcGFja2FnZS4gIFNlZSBjb21tZW50cyBpbiBEb2N1bWVudGF0aW9uL01ha2VmaWxlIGZvciBkZXRhaWxzLgorCisqIFN1cHBvcnQgZm9yIGJ1aWxkaW5nIGFuZCB0ZXN0aW5nIGEgc3Vic2V0IG9mIGdpdCBvbiBhIHN5c3RlbSB3aXRob3V0IGEKKyAgd29ya2luZyBwZXJsIGhhcyBiZWVuIGltcHJvdmVkLgorCisKK0ZpeGVzIHNpbmNlIHYxLjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi4yLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitIZXJlIGFyZSBmaXhlcyB0aGF0IHRoaXMgcmVsZWFzZSBoYXMsIGJ1dCBoYXZlIG5vdCBiZWVuIGJhY2twb3J0ZWQgdG8KK3YxLjYuMi5YIHNlcmllcy4KKworKiAiZ2l0LWFwcGx5IiByZWplY3RlZCBhIHBhdGNoIHRoYXQgc3dhcHMgdHdvIGZpbGVzIChpLmUuIHJlbmFtZXMgQSB0byBCCisgIGFuZCBCIHRvIEEgYXQgdGhlIHNhbWUgdGltZSkuICBNYXkgbmVlZCB0byBiZSBiYWNrcG9ydGVkIGJ5IGNoZXJyeQorICBwaWNraW5nIGQ4YzgxZGYgYW5kIHRoZW4gN2ZhYzBlZSkuCisKKyogVGhlIGluaXRpYWwgY2hlY2tvdXQgZGlkIG5vdCByZWFkIHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIC5naXRhdHRyaWJ1dGUKKyAgZmlsZSB0aGF0IGlzIGJlaW5nIGNoZWNrZWQgb3V0LgorCisqIGdpdC1nYyBzcGVudCBleGNlc3NpdmUgYW1vdW50IG9mIHRpbWUgdG8gZGVjaWRlIGlmIGFuIG9iamVjdCBhcHBlYXJzCisgIGluIGEgbG9jYWxseSBleGlzdGluZyBwYWNrIChpZiBuZWVkZWQsIGJhY2twb3J0IGJ5IG1lcmdpbmcgNjllMDIwYSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDM5ZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4xLnR4dApAQCAtMCwwICsxLDQ2IEBACitHSVQgdjEuNi40LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gdW5xdW90ZWQgdmFsdWUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hlbiBpdCBjb250YWlucyBtb3JlIHRoYW4KKyAgIG9uZSB3aGl0ZXNwYWNlcyBpbiBhIHJvdywgZ290IHRoZW0gcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KKworICogImdpdCBhbSIgdXNlZCB0byBhY2NlcHQgYSBzaW5nbGUgcGllY2Ugb2YgZS1tYWlsIHBlciBmaWxlIChub3QgYSBtYm94KQorICAgYXMgaXRzIGlucHV0LCBidXQgbXVsdGlwbGUgaW5wdXQgZm9ybWF0IHN1cHBvcnQgaW4gdjEuNi40IGJyb2tlIGl0LgorICAgQXBwYXJlbnRseSBtYW55IHBlb3BsZSBoYXZlIGJlZW4gZGVwZW5kaW5nIG9uIHRoaXMgZmVhdHVyZS4KKworICogVGhlIHNob3J0IGhlbHAgdGV4dCBmb3IgImdpdCBmaWx0ZXItYnJhbmNoIiBjb21tYW5kIHdhcyBhIHNpbmdsZSBsb25nCisgICBsaW5lLCB3cmFwcGVkIGJ5IHRlcm1pbmFscywgYW5kIHdhcyBoYXJkIHRvIHJlYWQuCisKKyAqIFRoZSAicmVjdXJzaXZlIiBzdHJhdGVneSBvZiAiZ2l0IG1lcmdlIiBzZWdmYXVsdGVkIHdoZW4gYSBtZXJnZSBoYXMKKyAgIG1vcmUgdGhhbiBvbmUgbWVyZ2UtYmFzZXMsIGFuZCBtZXJnaW5nIG9mIHRoZXNlIG1lcmdlLWJhc2VzIGludm9sdmVzCisgICBhIHJlbmFtZS9yZW5hbWUgb3IgYSByZW5hbWUvYWRkIGNvbmZsaWN0LgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIGRpZCBub3QgdXNlIHRoZSByaWdodCBmb3JrIHBvaW50IHdoZW4gdGhlCisgICByZXBvc2l0b3J5IGhhcyBhbHJlYWR5IGZldGNoZWQgZnJvbSB0aGUgdXBzdHJlYW0gdGhhdCByZXdpbmRzIHRoZQorICAgYnJhbmNoIGl0IGlzIGJhc2VkIG9uIGluIGFuIGVhcmxpZXIgZmV0Y2guCisKKyAqIEV4cGxhaW4gdGhlIGNvbmNlcHQgb2YgZmFzdC1mb3J3YXJkIG1vcmUgZnVsbHkgaW4gImdpdCBwdXNoIgorICAgZG9jdW1lbnRhdGlvbiwgYW5kIGhpbnQgdG8gcmVmZXIgdG8gaXQgZnJvbSBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlCisgICBjb21tYW5kIHJlZnVzZXMgYW4gdXBkYXRlIHRvIHByb3RlY3QgdGhlIHVzZXIuCisKKyAqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBwYWNrLmRlbHRhY2FjaGVzaXplLCB1c2VkIGJ5ICJnaXQgcmVwYWNrIiwgaXMgbm93CisgICAyNTZNLCBpbnN0ZWFkIG9mIHVuYm91bmRlZC4gIE90aGVyd2lzZSBhIHJlcGFjayBvZiBhIG1vZGVyYXRlbHkgc2l6ZWQKKyAgIHJlcG9zaXRvcnkgd291bGQgbmVlZGxlc3NseSBlYXQgaW50byBzd2FwLgorCisgKiBEb2N1bWVudCBob3cgImdpdCByZXBhY2siIChoZW5jZSAiZ2l0IGdjIikgaW50ZXJhY3RzIHdpdGggYSByZXBvc2l0b3J5CisgICB0aGF0IGJvcnJvd3MgaXRzIG9iamVjdHMgZnJvbSBvdGhlciByZXBvc2l0b3JpZXMgKGUuZy4gb25lcyBjcmVhdGVkIGJ5CisgICAiZ2l0IGNsb25lIC1zIikuCisKKyAqICJnaXQgc2hvdyIgb24gYW4gYW5ub3RhdGVkIHRhZyBsYWNrZWQgYSBkZWxpbWl0aW5nIGJsYW5rIGxpbmUgYmV0d2VlbgorICAgdGhlIHRhZyBpdHNlbGYgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0IGl0IHRhZ3MuCisKKyAqICJnaXQgdmVyaWZ5LXBhY2sgLXYiIGVycm9uZW91c2x5IHJlcG9ydGVkIG51bWJlciBvZiBvYmplY3RzIHdpdGggdG9vCisgICBkZWVwIGRlbHRhIGRlcHRocyBhcyAiY2hhaW4gbGVuZ3RoIDAiIG9iamVjdHMuCisKKyAqIExvbmcgbmFtZXMgb2YgYXV0aG9ycyBhbmQgY29tbWl0dGVycyBvdXRzaWRlIFVTLUFTQ0lJIHdlcmUgc29tZXRpbWVzCisgICBpbmNvcnJlY3RseSBzaG93biBpbiAiZ2l0d2ViIi4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWVjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjIudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dJVCB2MS42LjQuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAtLWRhdGU9cmVsYXRpdmUgb3V0cHV0IGJldHdlZW4gMSBhbmQgNSB5ZWFycyBhZ28gcm91bmRlZCB0aGUgbnVtYmVyIG9mCisgICAgeWVhcnMgd2hlbiBzYXlpbmcgWCB5ZWFycyBZIG1vbnRocyBhZ28sIGluc3RlYWQgb2Ygcm91bmRpbmcgaXQgZG93bi4KKworKiAiZ2l0IGFkZCAtcCIgZGlkIG5vdCBoYW5kbGUgY2hhbmdlcyBpbiBleGVjdXRhYmxlIGJpdHMgY29ycmVjdGx5CisgIChhIHJlZ3Jlc3Npb24gYXJvdW5kIDEuNi4zKS4KKworKiAiZ2l0IGFwcGx5IiBkaWQgbm90IGhvbm9yIEdOVSBkaWZmJ3MgY29udmVudGlvbiB0byBtYXJrIHRoZSBjcmVhdGlvbi9kZWxldGlvbgorICBldmVudCB3aXRoIFVOSVggZXBvY2ggdGltZXN0YW1wIG9uIG1pc3Npbmcgc2lkZS4KKworKiAiZ2l0IGNoZWNrb3V0IiBpbmNvcnJlY3RseSByZW1vdmVkIGZpbGVzIGluIGEgZGlyZWN0b3J5IHBvaW50ZWQgYnkgYQorICBzeW1ib2xpYyBsaW5rIGR1cmluZyBhIGJyYW5jaCBzd2l0Y2ggdGhhdCByZXBsYWNlcyBhIGRpcmVjdG9yeSB3aXRoCisgIGEgc3ltYm9saWMgbGluay4KKworKiAiZ2l0IGNsZWFuIC1kIC1mIiBoYXBwaWx5IGRlc2NlbmRlZCBpbnRvIGEgc3ViZGlyZWN0b3J5IHRoYXQgaXMgbWFuYWdlZCBieSBhCisgIHNlcGFyYXRlIGdpdCByZXBvc2l0b3J5LiAgSXQgbm93IHJlcXVpcmVzIHR3byAtZiBvcHRpb25zIGZvciBzYWZldHkuCisKKyogImdpdCBmZXRjaC9wdXNoIiBvdmVyIGh0dHAgdHJhbnNwb3J0cyBoYWQgdHdvIHJhdGhlciBncmF2ZSBidWdzLgorCisqICJnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIiBkaWQgbm90IHByZXBhcmUgdGhlIGNvdmVyIGxldHRlciBmaWxlCisgIGZvciB1c2Ugd2l0aCBub24tQVNDSUkgc3RyaW5ncyB3aGVuIHRoZXJlIGFyZSB0aGUgc2VyaWVzIGNvbnRyaWJ1dG9ycyB3aXRoCisgIG5vbi1BU0NJSSBuYW1lcy4KKworKiAiZ2l0IHB1bGwgb3JpZ2luIGJyYW5jaCIgYW5kICJnaXQgZmV0Y2ggb3JpZ2luICYmIGdpdCBtZXJnZSBvcmlnaW4vYnJhbmNoIgorICBsZWZ0IGRpZmZlcmVudCBtZXJnZSBtZXNzYWdlcyBpbiB0aGUgcmVzdWx0aW5nIGNvbW1pdC4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDNlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjMudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0dJVCB2MS42LjQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNsb25lIiBmcm9tIGFuIGVtcHR5IHJlcG9zaXRvcnkgZ2F2ZSB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlLAorICBldmVuIHRob3VnaCBpdCBkaWQgZXZlcnl0aGluZyBlbHNlIGNvcnJlY3RseS4KKworKiAiZ2l0IGN2c3NlcnZlciIgaW52b2tlZCBnaXQgY29tbWFuZHMgdmlhICJnaXQtZm9vIiBzdHlsZSwgd2hpY2ggaGFzIGxvbmcKKyAgYmVlbiBkZXByZWNhdGVkLgorCisqICJnaXQgZmV0Y2giIGFuZCAiZ2l0IGNsb25lIiBoYWQgYW4gZXh0cmEgc2FuaXR5IGNoZWNrIHRvIHZlcmlmeSB0aGUKKyAgcHJlc2VuY2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgKi5wYWNrIGZpbGUgYmVmb3JlIGRvd25sb2FkaW5nICouaWR4CisgIGZpbGUgYnkgaXNzdWluZyBhIEhFQUQgcmVxdWVzdC4gIEdpdGh1YiBzZXJ2ZXIgaG93ZXZlciBzb21ldGltZXMKKyAgZ2F2ZSA1MDAgKEludGVybmFsIHNlcnZlciBlcnJvcikgcmVzcG9uc2UgdG8gSEVBRCBldmVuIGlmIGEgR0VUCisgIHJlcXVlc3QgZm9yICoucGFjayBmaWxlIHRvIHRoZSBzYW1lIFVSTCB3b3VsZCBoYXZlIHN1Y2NlZWRlZCwgYW5kIGJyb2tlCisgIGNsb25lIG92ZXIgSFRUUCBmcm9tIHNvbWUgb2YgdGhlaXIgcmVwb3NpdG9yaWVzLiAgQXMgYSB3b3JrYXJvdW5kLCB0aGlzCisgIHZlcmlmaWNhdGlvbiBoYXMgYmVlbiByZW1vdmVkIChhcyBpdCBpcyBub3QgYWJzb2x1dGVseSBuZWNlc3NhcnkpLgorCisqICJnaXQgZ3JlcCIgZGlkIG5vdCBsaWtlIHJlbGF0aXZlIHBhdGhuYW1lIHRvIHJlZmVyIG91dHNpZGUgdGhlIGN1cnJlbnQKKyAgZGlyZWN0b3J5IHdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyogYW4gZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgcHVzaCIgd2FzIGZvcm1hdHRlZCBpbiBhIHZlcnkgdWdseSB3YXkuCisKKyogImdpdCBzdm4iIGRpZCBub3QgcXVvdGUgdGhlIHN1YnZlcnNpb24gdXNlciBuYW1lIGNvcnJlY3RseSB3aGVuCisgIHJ1bm5pbmcgaXRzIGF1dGhvci1wcm9nIGhlbHBlciBwcm9ncmFtLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhZDQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuNC50eHQKQEAgLTAsMCArMSwyNiBAQAorR0lUIHYxLjYuNC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSB3b3JrYXJvdW5kIGZvciBHaXRodWIgc2VydmVyIHRoYXQgc29tZXRpbWVzIGdhdmUgNTAwIChJbnRlcm5hbCBzZXJ2ZXIKKyAgZXJyb3IpIHJlc3BvbnNlIHRvIEhFQUQgcmVxdWVzdHMgaW4gMS42LjQuMyBpbnRyb2R1Y2VkIGEgcmVncmVzc2lvbiB0aGF0CisgIGNhdXNlZCByZS1mZXRjaGluZyBwcm9qZWN0cyBvdmVyIGh0dHAgdG8gc2VnZmF1bHQgaW4gY2VydGFpbiBjYXNlcyBkdWUKKyAgdG8gdW5pbml0aWFsaXplZCBwb2ludGVyIGJlaW5nIGZyZWVkLgorCisqICJnaXQgcHVsbCIgb24gYW4gdW5ib3JuIGJyYW5jaCB1c2VkIHRvIGNvbnNpZGVyIGFueXRoaW5nIGluIHRoZSB3b3JrCisgIHRyZWUgYW5kIHRoZSBpbmRleCBkaXNjYXJkYWJsZS4KKworKiAiZ2l0IGRpZmYgLWIvdyIgZGlkIG5vdCB3b3JrIHdlbGwgb24gdGhlIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kIG9mCisgIHRoZSBmaWxlLCBkdWUgdG8gYW4gaW5jb3JyZWN0IGhhc2hpbmcgb2YgbGluZXMgaW4gdGhlIGxvdy1sZXZlbCB4ZGlmZgorICByb3V0aW5lcy4KKworKiAiZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PSRzb21ld2hlcmUiIHVzZWQgdG8gd29yayB3aGVuICRzb21ld2hlcmUgaXMKKyAgYSBzeW1ib2xpYyBsaW5rIHRvIGEgZGlyZWN0b3J5IGVsc2V3aGVyZSwgYnV0IHYxLjYuNC4yIGJyb2tlIGl0LgorCisqICJnaXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QiLCBpbnZva2VkIHdoZW4gcmVjZWl2ZS5mc2Nrb2JqZWN0cworICBjb25maWd1cmF0aW9uIGlzIHNldCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2YgImdpdCBwdXNoIiwgZGlkIG5vdAorICBwcm9wZXJseSBjaGVjayB0aGUgb2JqZWN0cywgZXNwZWNpYWxseSB0aGUgc3VibW9kdWxlIGxpbmtzLCBpdCByZWNlaXZlZC4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjMwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjUudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0dpdCB2MS42LjQuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogU2ltcGxpZmllZCBiYXNlODUgaW1wbGVtZW50YXRpb24uCisKKyAqIEFuIG92ZXJsb25nIGxpbmUgYWZ0ZXIgIi5naXRkaXI6ICIgaW4gYSBnaXQgZmlsZSBjYXVzZWQgb3V0IG9mIGJvdW5kcworICAgYWNjZXNzIHRvIGFuIGFycmF5IG9uIHRoZSBzdGFjay4KKworICogImdpdCBjb3VudC1vYmplY3RzIiBkaWQgbm90IGhhbmRsZSBwYWNrcyBsYXJnZXIgdGhhbiA0Ry4KKworICogImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbiIgZGlkIG5vdCBzdG9wIGF0IG5vbiBvcHRpb24KKyAgIHdoZW4gLS1rZWVwLWRhc2hkYXNoIHdhcyBpbiBlZmZlY3QuCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KKworT3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOTA0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LnR4dApAQCAtMCwwICsxLDE0NyBAQAorR0lUIHYxLjYuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworV2l0aCB0aGUgbmV4dCBtYWpvciByZWxlYXNlLCAiZ2l0IHB1c2giIGludG8gYSBicmFuY2ggdGhhdCBpcworY3VycmVudGx5IGNoZWNrZWQgb3V0IHdpbGwgYmUgcmVmdXNlZCBieSBkZWZhdWx0LiAgWW91IGNhbiBjaG9vc2UKK3doYXQgc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LgorCitUbyBlYXNlIHRoZSB0cmFuc2l0aW9uIHBsYW4sIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSBvZiBzdWNoIGEKK3B1c2ggcnVubmluZyB0aGlzIHJlbGVhc2Ugd2lsbCBpc3N1ZSBhIGJpZyB3YXJuaW5nIHdoZW4gdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG1pc3NpbmcuICBQbGVhc2UgcmVmZXIgdG86CisKKyAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQorICBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTA3NzU4L2ZvY3VzPTEwODAwNworCitmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCit0cmFuc2l0aW9uIHBsYW4uCisKK0ZvciBhIHNpbWlsYXIgcmVhc29uLCAiZ2l0IHB1c2ggJHRoZXJlIDoka2lsbGVkIiB0byBkZWxldGUgdGhlIGJyYW5jaAorJGtpbGxlZCBpbiBhIHJlbW90ZSByZXBvc2l0b3J5ICR0aGVyZSwgaWYgJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQKK2JyYW5jaCBwb2ludGVkIGF0IGJ5IGl0cyBIRUFELCBnZXRzIGEgbGFyZ2Ugd2FybmluZy4gIFlvdSBjYW4gY2hvb3NlIHdoYXQKK3Nob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCityZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50IGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworCitVcGRhdGVzIHNpbmNlIHYxLjYuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyAqIGdpdHdlYiBQZXJsIHN0eWxlIGNsZWFuLXVwLgorCisgKiBnaXQtc3ZuIHVwZGF0ZXMsIGluY2x1ZGluZyBhIG5ldyAtLWF1dGhvcnMtcHJvZyBvcHRpb24gdG8gbWFwIGF1dGhvcgorICAgbmFtZXMgYnkgaW52b2tpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbSwgJ2dpdCBzdm4gcmVzZXQnIHRvIHVud2luZAorICAgJ2dpdCBzdm4gZmV0Y2gnLCBzdXBwb3J0IGZvciBtb3JlIHRoYW4gb25lIGJyYW5jaGVzLCBkb2N1bWVudGluZworICAgb2YgdGhlIHVzZWZ1bCAtLW1pbmltaXplLXVybCBmZWF0dXJlLCBuZXcgImdpdCBzdm4gZ2MiIGNvbW1hbmQsIGV0Yy4KKworKHBvcnRhYmlsaXR5KQorCisgKiBXZSBmZWVkIGljb252IHdpdGggIlVURi04IiBpbnN0ZWFkIG9mICJ1dGY4IjsgdGhlIGZvcm1lciBpcworICAgdW5kZXJzdG9vZCBtb3JlIHdpZGVseS4gIFNpbWlsYXJseSB1cGRhdGVkIHRlc3Qgc2NyaXB0cyB0byB1c2UKKyAgIGVuY29kaW5nIG5hbWVzIG1vcmUgd2lkZWx5IHVuZGVyc3Rvb2QgKGUuZy4gdXNlICJJU084ODU5LTEiIGluc3RlYWQKKyAgIG9mICJJU08tODg1OS0xIikuCisKKyAqIFZhcmlvdXMgcG9ydGFiaWxpdHkgZml4ZXMvd29ya2Fyb3VuZHMgZm9yIGRpZmZlcmVudCB2aW50YWdlcyBvZgorICAgU3VuT1MsIElSSVgsIGFuZCBXaW5kb3dzLgorCisgKiBHaXQtb3Zlci1zc2ggdHJhbnNwb3J0IG9uIFdpbmRvd3Mgc3VwcG9ydHMgUHVUVFkgcGxpbmsgYW5kIFRvcnRvaXNlUGxpbmsuCisKKyhwZXJmb3JtYW5jZSkKKworICogTWFueSByZXBlYXRlZCB1c2Ugb2YgbHN0YXQoKSBhcmUgb3B0aW1pemVkIG91dCBpbiAiY2hlY2tvdXQiIGNvZGVwYXRoLgorCisgKiBnaXQtc3RhdHVzIChhbmQgdW5kZXJseWluZyBnaXQtZGlmZi1pbmRleCAtLWNhY2hlZCkgYXJlIG9wdGltaXplZAorICAgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgY2FjaGUtdHJlZSBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXguCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworICogImdpdCBhZGQgLS1lZGl0IiBsZXRzIHVzZXJzIGVkaXQgdGhlIHdob2xlIHBhdGNoIHRleHQgdG8gZmluZS10dW5lIHdoYXQKKyAgIGlzIGFkZGVkIHRvIHRoZSBpbmRleC4KKworICogImdpdCBhbSIgYWNjZXB0cyBTdEdJVCBzZXJpZXMgZmlsZSBhcyBpdHMgaW5wdXQuCisKKyAqICJnaXQgYmlzZWN0IHNraXAiIHNraXBzIHRvIGEgbW9yZSByYW5kb21seSBjaG9zZW4gcGxhY2UgaW4gdGhlIGhvcGUKKyAgIHRvIGF2b2lkIHRlc3RpbmcgYSBjb21taXQgdGhhdCBpcyB0b28gY2xvc2UgdG8gYSBjb21taXQgdGhhdCBpcworICAgYWxyZWFkeSBrbm93biB0byBiZSB1bnRlc3RhYmxlLgorCisgKiAiZ2l0IGN2c2V4cG9ydGNvbW1pdCIgbGVhcm5lZCAtayBvcHRpb24gdG8gc3RvcCBDVlMga2V5d29yZHMgZXhwYW5zaW9uCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGxlYXJuZWQgdG8gaGFuZGxlIGhpc3Rvcnkgc2ltcGxpZmljYXRpb24gbW9yZQorICAgZ3JhY2VmdWxseS4KKworICogImdpdCBmYXN0LWV4cG9ydCIgbGVhcm5lZCBhbiBvcHRpb24gLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0IHRvIGhhbmRsZQorICAgZGFuZ2xpbmcgdGFncyByZXN1bHRpbmcgZnJvbSBoaXN0b3J5IHNpbXBsaWZpY2F0aW9uIG1vcmUgdXNlZnVsbHkuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAtcCBvcHRpb24gdG8gc2hvdyB0aGUgbG9jYXRpb24gb2YgdGhlIG1hdGNoIHVzaW5nIHRoZQorICAgc2FtZSBjb250ZXh0IGh1bmsgbWFya2VyICJnaXQgZGlmZiIgdXNlcy4KKworICogaHR0cHMgdHJhbnNwb3J0IGNhbiBvcHRpb25hbGx5IGJlIHRvbGQgdGhhdCB0aGUgdXNlZCBjbGllbnQKKyAgIGNlcnRpZmljYXRlIGlzIHBhc3N3b3JkIHByb3RlY3RlZCwgaW4gd2hpY2ggY2FzZSBpdCBhc2tzIHRoZQorICAgcGFzc3dvcmQgb25seSBvbmNlLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgaXMgSVB2NiBhd2FyZS4KKworICogImdpdCBsb2cgLS1ncmFwaCIgZHJhd3MgZ3JhcGhzIG1vcmUgY29tcGFjdGx5IGJ5IHVzaW5nIGhvcml6b250YWwgbGluZXMKKyAgIHdoZW4gYWJsZS4KKworICogImdpdCBsb2cgLS1kZWNvcmF0ZSIgc2hvd3Mgc2hvcnRlciByZWZuYW1lcyBieSBzdHJpcHBpbmcgd2VsbC1rbm93bgorICAgcmVmcy8qIHByZWZpeC4KKworICogImdpdCBwdXNoICRuYW1lIiBob25vcnMgcmVtb3RlLiRuYW1lLnB1c2h1cmwgaWYgcHJlc2VudCBiZWZvcmUKKyAgIHVzaW5nIHJlbW90ZS4kbmFtZS51cmwuICBJbiBvdGhlciB3b3JkcywgdGhlIFVSTCB1c2VkIGZvciBmZXRjaGluZworICAgYW5kIHB1c2hpbmcgY2FuIGJlIGRpZmZlcmVudC4KKworICogImdpdCBzZW5kLWVtYWlsIiB1bmRlcnN0YW5kcyBxdW90ZWQgYWxpYXNlcyBpbiAubWFpbHJjIGZpbGVzIChtaWdodAorICAgaGF2ZSB0byBiZSBiYWNrcG9ydGVkIHRvIDEuNi4zLlgpLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGNhbiBmZXRjaCB0aGUgc2VuZGVyIGFkZHJlc3MgZnJvbSB0aGUgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgInNlbmRtYWlsLmZyb20iIChhbmQgInNlbmRtYWlsLjxpZGVudGl0eT4uZnJvbSIpLgorCisgKiAiZ2l0IHNob3ctYnJhbmNoIiBjYW4gY29sb3IgaXRzIG91dHB1dC4KKworICogImFkZCIgYW5kICJ1cGRhdGUiIHN1YmNvbW1hbmRzIHRvICJnaXQgc3VibW9kdWxlIiBsZWFybmVkIC0tcmVmZXJlbmNlCisgICBvcHRpb24gdG8gdXNlIGxvY2FsIGNsb25lIHdpdGggcmVmZXJlbmNlcy4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBsZWFybmVkIC0tcmViYXNlIG9wdGlvbiB0byB1cGRhdGUgY2hlY2tlZAorICAgb3V0IHN1Ym1vZHVsZXMgYnkgcmViYXNpbmcgdGhlIGxvY2FsIGNoYW5nZXMuCisKKyAqICJnaXR3ZWIiIGNhbiBvcHRpb25hbGx5IHVzZSBncmF2YXRhciB0byBhZG9ybiBhdXRob3IvY29tbWl0dGVyIG5hbWVzLgorCisoZGV2ZWxvcGVycykKKworICogQSBtYWpvciBwYXJ0IG9mIHRoZSAiZ2l0IGJpc2VjdCIgd3JhcHBlciBoYXMgbW92ZWQgdG8gQy4KKworICogRm9ybWF0dGluZyB3aXRoIHRoZSBuZXcgdmVyc2lvbiBvZiBBc2NpaURvYyA4LjQuMSBpcyBub3cgc3VwcG9ydGVkLgorCitGaXhlcyBzaW5jZSB2MS42LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuMy5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworSGVyZSBhcmUgZml4ZXMgdGhhdCB0aGlzIHJlbGVhc2UgaGFzLCBidXQgaGF2ZSBub3QgYmVlbiBiYWNrcG9ydGVkIHRvCit2MS42LjMuWCBzZXJpZXMuCisKKyAqICJnaXQgZGlmZi10cmVlIC1yIC10IiB1c2VkIHRvIG9taXQgbmV3IG9yIHJlbW92ZWQgZGlyZWN0b3JpZXMgZnJvbQorICAgdGhlIG91dHB1dC4gIGRmNTMzZjMgKGRpZmYtdHJlZSAtciAtdDogaW5jbHVkZSBhZGRlZC9yZW1vdmVkCisgICBkaXJlY3RvcmllcyBpbiB0aGUgb3V0cHV0LCAyMDA5LTA2LTEzKSBtYXkgbmVlZCB0byBiZSBjaGVycnktcGlja2VkCisgICB0byBiYWNrcG9ydCB0aGlzIGZpeC4KKworICogVGhlIHdheSBHaXQucG0gc2V0cyB1cCBhIFJlcG9zaXRvcnkgb2JqZWN0IHdhcyBub3QgZnJpZW5kbHkgdG8gY2FsbGVycworICAgdGhhdCBjaGRpciBhcm91bmQuICBJdCBub3cgaW50ZXJuYWxseSByZWNvcmRzIHRoZSByZXBvc2l0b3J5IGxvY2F0aW9uCisgICBhcyBhbiBhYnNvbHV0ZSBwYXRoIHdoZW4gYXV0b2RldGVjdGVkLgorCisgKiBSZW1vdmluZyBhIHNlY3Rpb24gd2l0aCAiZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIiwgd2hlbiBpdHMKKyAgIHNlY3Rpb24gaGVhZGVyIGhhcyBhIHZhcmlhYmxlIGRlZmluaXRpb24gb24gdGhlIHNhbWUgbGluZSwgbG9zdAorICAgdGhhdCB2YXJpYWJsZSBkZWZpbml0aW9uLgorCisgKiAiZ2l0IHJlYmFzZSAtcCAtLW9udG8iIHVzZWQgdG8gYWx3YXlzIGxlYXZlIHNpZGUgYnJhbmNoZXMgb2YgYSBtZXJnZQorICAgaW50YWN0LCBldmVuIHdoZW4gYm90aCBicmFuY2hlcyBhcmUgc3ViamVjdCB0byByZXdyaXRpbmcuCisKKyAqICJnaXQgcmVwYWNrIiB1c2VkIHRvIGZhaXRoZnVsbHkgZm9sbG93IGdyYWZ0cyBhbmQgY29uc2lkZXJlZCB0cnVlCisgICBwYXJlbnRzIHJlY29yZGVkIGluIHRoZSBjb21taXQgb2JqZWN0IHVucmVhY2hhYmxlIGZyb20gdGhlIGNvbW1pdC4KKyAgIEFmdGVyIHN1Y2ggYSByZXBhY2tpbmcsIHlvdSBjYW5ub3QgcmVtb3ZlIGdyYWZ0cyB3aXRob3V0IGNvcnJ1cHRpbmcKKyAgIHRoZSByZXBvc2l0b3J5LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgZGV0ZWN0IGVycm9uZW91cyBsb29wcyBpbiBhbGlhcyBleHBhbnNpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDliYTE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4xLnR4dApAQCAtMCwwICsxLDIwIEBACitHSVQgdjEuNi41LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gY29ycnVwdCBwYWNrIGNvdWxkIG1ha2UgY29kZXBhdGggdG8gcmVhZCBvYmplY3RzIGludG8gYW4KKyAgIGluZmluaXRlIGxvb3AuCisKKyAqIERvd25sb2FkIHRocm91Z2hwdXQgZGlzcGxheSB3YXMgYWx3YXlzIHNob3duIGluIEtpQi9zIGJ1dCBvbiBmYXN0IGxpbmtzCisgICBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlIHRvIHNob3cgaXQgaW4gTWlCL3MuCisKKyAqICJnaXQgZ3JlcCAtZiBmaWxlbmFtZSIgdXNlZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFuZCBzZWdmYXVsdGVkLgorCisgKiAiZ2l0IGNsb25lIC1iIGJyYW5jaCIgZ2F2ZSBhIHdyb25nIGNvbW1pdCBvYmplY3QgbmFtZSB0byBwb3N0LWNoZWNrb3V0CisgICBob29rLgorCisgKiAiZ2l0IHB1bGwiIG92ZXIgaHR0cCBkaWQgbm90IHdvcmsgb24gbXN5cy4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2NjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjIudHh0CkBAIC0wLDAgKzEsMTkgQEAKK0dJVCB2MS42LjUuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogSW5zdGFsbGF0aW9uIG9mIHRlbXBsYXRlcyB0cmlnZ2VyZWQgYSBidWcgaW4gYnVzeWJveCB3aGVuIHVzaW5nIHRhcgorICAgaW1wbGVtZW50YXRpb24gZnJvbSBpdC4KKworICogImdpdCBhZGQgLWkiIGluY29ycmVjdGx5IGlnbm9yZWQgcGF0aHMgdGhhdCBhcmUgYWxyZWFkeSBpbiB0aGUgaW5kZXgKKyAgIGlmIHRoZXkgbWF0Y2hlZCAuZ2l0aWdub3JlIHBhdHRlcm5zLgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tYWx3YXlzIiBzaG91bGQgaGF2ZSBwcm9kdWNlZCBzb21lIG91dHB1dCBldmVuIHRoZXJlCisgICB3ZXJlIG5vIHRhZ3MgaW4gdGhlIHJlcG9zaXRvcnksIGJ1dCBpdCBkaWRuJ3QuCisKKyAqICJnaXQgbHMtZmlsZXMiIHdoZW4gc2hvd2luZyB0cmFja2VkIGZpbGVzIGluY29ycmVjdGx5IHBhaWQgYXR0ZW50aW9uCisgICB0byB0aGUgZXhjbHVkZSBwYXR0ZXJucy4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZmFkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjMudHh0CkBAIC0wLDAgKzEsNjMgQEAKK0dpdCB2MS42LjUuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogaW5mby9ncmFmdHMgZmlsZSBkaWRuJ3QgaWdub3JlIHRyYWlsaW5nIENSIGF0IHRoZSBlbmQgb2YgbGluZXMuCisKKyAqIFBhY2thZ2VzIGdlbmVyYXRlZCBvbiBuZXdlciBGQyB3ZXJlIHVucmVhZGFibGUgYnkgb2xkZXIgdmVyc2lvbnMgb2YKKyAgIFJQTSBhcyB0aGUgbmV3IGRlZmF1bHQgaXMgdG8gdXNlIHN0cm9uZ2VyIGhhc2guCisKKyAqIG91dHB1dCBmcm9tICJnaXQgYmxhbWUiIHdhcyB1bnJlYWRhYmxlIHdoZW4gdGhlIGZpbGUgZW5kZWQgaW4gYW4KKyAgIGluY29tcGxldGUgbGluZS4KKworICogImdpdCBhZGQgLWkvLXAiIGRpZG4ndCBoYW5kbGUgZGVsZXRpb24gb2YgZW1wdHkgZmlsZXMgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNsb25lIiB0YWtlcyB1cCB0byB0d28gcGFyYW1ldGVycywgYnV0IGRpZCBub3QgY29tcGxhaW4gd2hlbgorICAgZ2l2ZW4gbW9yZSBhcmd1bWVudHMgdGhhbiBuZWNlc3NhcnkgYW5kIHNpbGVudGx5IGlnbm9yZWQgdGhlbS4KKworICogImdpdCBjdnNpbXBvcnQiIGRpZCBub3QgcmVhZCBmaWxlcyBnaXZlbiBhcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisgICBjb3JyZWN0bHkgd2hlbiBpdCBpcyBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworICogImdpdCBkaWZmIC0tY29sb3Itd29yZHMgLVUwIiBkaWRuJ3Qgd29yayBjb3JyZWN0bHkuCisKKyAqIFRoZSBoYW5kbGluZyBvZiBibGFuayBsaW5lcyBhdCB0aGUgZW5kIG9mIGZpbGUgYnkgImdpdCBkaWZmL2FwcGx5CisgICAtLXdoaXRlc3BhY2UiIHdhcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgb3RoZXIga2luZHMgb2YgZXJyb3JzLgorICAgVGhleSBhcmUgbm93IGNvbG9yZWQsIHdhcm5lZCBhZ2FpbnN0LCBhbmQgZml4ZWQgdGhlIHNhbWUgd2F5IGFzIG90aGVycy4KKworICogVGhlcmUgd2FzIG5vIHdheSB0byBhbGxvdyBibGFuayBsaW5lcyBhdCB0aGUgZW5kIG9mIGZpbGUgd2l0aG91dAorICAgYWxsb3dpbmcgZXh0cmEgYmxhbmtzIGF0IHRoZSBlbmQgb2YgbGluZXMuICBZb3UgY2FuIHVzZSBibGFuay1hdC1lb2YKKyAgIGFuZCBibGFuay1hdC1lb2wgd2hpdGVzcGFjZSBlcnJvciBjbGFzcyB0byBzcGVjaWZ5IHRoZW0gc2VwYXJhdGVseS4KKyAgIFRoZSBvbGQgdHJhaWxpbmctc3BhY2UgZXJyb3IgY2xhc3MgaXMgbm93IGEgc2hvcnQtaGFuZCB0byBzZXQgYm90aC4KKworICogIi1wIiBvcHRpb24gdG8gImdpdCBmb3JtYXQtcGF0Y2giIHdhcyBzdXBwb3NlZCB0byBzdXBwcmVzcyBkaWZmc3RhdAorICAgZ2VuZXJhdGlvbiwgYnV0IGl0IHdhcyBicm9rZW4gc2luY2UgMS42LjEuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBkaWQgbm90IGNvbXBpbGUgY2xlYW5seSB3aXRoIG5ld2VyIE9wZW5TU0wuCisKKyAqICJnaXQgaGVscCAtYSIgb3V0c2lkZSBvZiBhIGdpdCByZXBvc2l0b3J5IHdhcyBicm9rZW4uCisKKyAqICJnaXQgbHMtZmlsZXMgLWkiIHdhcyBzdXBwb3NlZCB0byBiZSBpbnZlcnNlIG9mICJnaXQgbHMtZmlsZXMiIHdpdGhvdXQgLWkKKyAgIHdpdGggcmVzcGVjdCB0byBleGNsdWRlIHBhdHRlcm5zLCBidXQgaXQgd2FzIGJyb2tlbiBzaW5jZSAxLjYuNS4yLgorCisgKiAiZ2l0IGxzLXJlbW90ZSIgb3V0c2lkZSBvZiBhIGdpdCByZXBvc2l0b3J5IG92ZXIgaHR0cCB3YXMgYnJva2VuLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgZ2F2ZSBib2d1cyBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIGNvbW1hbmQgd29yZCB3YXMKKyAgIG1pc3NwZWxsZWQuCisKKyAqICJnaXQgcmVjZWl2ZS1wYWNrIiB0aGF0IGlzIHJ1biBpbiByZXNwb25zZSB0byAiZ2l0IHB1c2giIGRpZCBub3QgcnVuCisgICBnYXJiYWdlIGNvbGxlY3Rpb24gbm9yIHVwZGF0ZS1zZXJ2ZXItaW5mbywgYnV0IGluIGxhcmdlciBob3N0aW5nIHNpdGVzLAorICAgdGhlc2UgYWxtb3N0IGFsd2F5cyBuZWVkIHRvIGJlIHJ1bi4gIFRvIGhlbHAgc2l0ZSBhZG1pbmlzdHJhdG9ycywgdGhlCisgICBjb21tYW5kIG5vdyBydW5zICJnYyAtLWF1dG8iIGFuZCAidS1zLWkiIGJ5IHNldHRpbmcgcmVjZWl2ZS5hdXRvZ2MKKyAgIGFuZCByZWNlaXZlLnVwZGF0ZXNlcnZlcmluZm8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMsIHJlc3BlY3RpdmVseS4KKworICogUmVsZWFzZSBub3RlcyBzcGVsbGVkIHRoZSBwYWNrYWdlIG5hbWUgd2l0aCBpbmNvcnJlY3QgY2FwaXRhbGl6YXRpb24uCisKKyAqICJnaXR3ZWIiIGRpZCBub3QgZXNjYXBlIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIGNvcnJlY3RseSBpbiB0aGUgVVJMLgorCisgKiAiZ2l0d2ViIiBzaG93ZWQgInBhdGNoIiBsaW5rIGV2ZW4gZm9yIG1lcmdlIGNvbW1pdHMuCisKKyAqICJnaXR3ZWIiIHNob3dlZCBpbmNvcnJlY3QgbGlua3MgZm9yIGJsb2IgbGluZSBudW1iZXJzIGluIHBhdGhpbmZvIG1vZGUuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2EyYTNlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS40LnR4dApAQCAtMCwwICsxLDMyIEBACitHaXQgdjEuNi41LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgaGVscCIgKHdpdGhvdXQgYXJndW1lbnQpIHVzZWQgdG8gY2hlY2sgaWYgeW91IGFyZSBpbiBhIGRpcmVjdG9yeQorICAgdW5kZXIgZ2l0IGNvbnRyb2wuIFRoZXJlIHdhcyBubyBicmVha2FnZSBpbiBiZWhhdmlvdXIgcGVyLXNlLCBidXQgdGhpcworICAgd2FzIHVubmVjZXNzYXJ5LgorCisgKiAiZ2l0IHBydW5lLXBhY2tlZCIgZ2F2ZSBwcm9ncmVzcyBvdXRwdXQgZXZlbiB3aGVuIGl0cyBzdGFuZGFyZCBlcnJvciBpcworICAgbm90IGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsOyB0aGlzIGNhdXNlZCBjcm9uIGpvYnMgdGhhdCBydW4gaXQgdG8KKyAgIHByb2R1Y2UgY3J1ZnRzLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyAtLWFsbC1wcm9ncmVzcyIgaXMgYW4gb3B0aW9uIHRvIGFzayBwcm9ncmVzcyBvdXRwdXQKKyAgIGZyb20gd3JpdGUtb2JqZWN0IHBoYXNlIF9pZl8gcHJvZ3Jlc3Mgb3V0cHV0IHdlcmUgdG8gYmUgcHJvZHVjZWQsIGFuZAorICAgc2hvdWxkbid0IGhhdmUgZm9yY2VkIHRoZSBwcm9ncmVzcyBvdXRwdXQuCisKKyAqICJnaXQgYXBwbHkgLXA8bj4gLS1kaXJlY3Rvcnk9PGVsc2V3aGVyZT4iIGRpZCBub3Qgd29yayB3ZWxsIGZvciBhCisgICBub24tZGVmYXVsdCB2YWx1ZSBvZiBuLgorCisgKiAiZ2l0IG1lcmdlIGZvbyBIRUFEIiB3YXMgbWlzcGFyc2VkIGFzIGFuIG9sZC1zdHlsZSBpbnZvY2F0aW9uIG9mIHRoZQorICAgY29tbWFuZCBhbmQgcHJvZHVjZWQgYSBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZS4gIEFzIGl0IGRvZXMgbm90IHNwZWNpZnkKKyAgIGFueSBvdGhlciBicmFuY2ggdG8gbWVyZ2UsIGl0IHNob3VsZG4ndCBiZSBtaXN0YWtlbiBhcyBzdWNoLiAgV2Ugd2lsbAorICAgcmVtb3ZlIHRoZSBvbGQgc3R5bGUgImdpdCBtZXJnZSA8bWVzc2FnZT4gSEVBRCA8Y29tbWl0Pi4uLiIgIHN5bnRheCBpbgorICAgZnV0dXJlIHZlcnNpb25zLCBidXQgbm90IGluIHRoaXMgcmVsZWFzZSwKKworICogImdpdCBtZXJnZSAtbSA8bWVzc2FnZT4gPGJyYW5jaD4uLi4iIGFkZGVkIHRoZSBzdGFuZGFyZCBtZXJnZSBtZXNzYWdlCisgICBvbiBpdHMgb3duIGFmdGVyIHVzZXItc3VwcGxpZWQgbWVzc2FnZSwgd2hpY2ggc2hvdWxkIGhhdmUgb3ZlcnJpZGRlbiB0aGUKKyAgIHN0YW5kYXJkIG9uZS4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZmM1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjUudHh0CkBAIC0wLDAgKzEsNDkgQEAKK0dpdCB2MS42LjUuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogTWFudWFsIHBhZ2VzIGNhbiBiZSBmb3JtYXR0ZWQgd2l0aCBvbGRlciB4bWx0byBhZ2Fpbi4KKworICogR1JFUF9PUFRJT05TIGV4cG9ydGVkIGZyb20gdXNlcidzIGVudmlyb25tZW50IGNvdWxkIGhhdmUgYnJva2VuCisgICBvdXIgc2NyaXB0ZWQgY29tbWFuZHMuCisKKyAqIEluIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGEgZmV3IHZhcmlhYmxlcyB0aGF0IG5hbWUgcGF0aHMgY2FuIGJlZ2luIHdpdGgKKyAgIH4vIGFuZCB+dXNlcm5hbWUvIGFuZCB0aGV5IGFyZSBleHBhbmRlZCBhcyBleHBlY3RlZC4gIFRoaXMgaXMgbm90IGEKKyAgIGJ1Z2ZpeCBidXQgMS42LjYgd2lsbCBoYXZlIHRoaXMgYW5kIHdpdGhvdXQgYmFja3BvcnRpbmcgdXNlcnMgY2Fubm90CisgICBlYXNpbHkgdXNlIHRoZSBzYW1lIH4vLmdpdGNvbmZpZyBhY3Jvc3MgdmVyc2lvbnMuCisKKyAqICJnaXQgZGlmZiAtQiAtTSIgZGlkIHRoZSBzYW1lIGNvbXB1dGF0aW9uIHRvIGhhc2ggbGluZXMgb2YgY29udGVudHMKKyAgIHR3aWNlLCBhbmQgaGVsZCBvbnRvIG1lbW9yeSBhZnRlciBpdCBoYXMgdXNlZCB0aGUgZGF0YSBpbiBpdAorICAgdW5uZWNlc3NhcmlseSBiZWZvcmUgaXQgZnJlZWQuCisKKyAqICJnaXQgZGlmZiAtQiIgYW5kICJnaXQgZGlmZiAtLWRpcnN0YXQiIHdhcyBub3QgY291bnRpbmcgbmV3bHkgYWRkZWQKKyAgIGNvbnRlbnRzIGNvcnJlY3RseS4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggcmV2aXNpb25zLi4uIC0tIHBhdGgiIGlzc3VlZCBhbiBpbmNvcnJlY3QgZXJyb3IKKyAgIG1lc3NhZ2UgdGhhdCBzdWdnZXN0ZWQgdG8gdXNlICItLSIgb24gdGhlIGNvbW1hbmQgbGluZSB3aGVuIHBhdGgKKyAgIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IHdvcmsgdHJlZSAoaXQgaXMgYSBzZXBhcmF0ZSBtYXR0ZXIgaWYKKyAgIGl0IG1ha2VzIHNlbnNlIHRvIGxpbWl0IGZvcm1hdC1wYXRjaCB3aXRoIHBhdGhzcGVjcyBsaWtlIHRoYXQKKyAgIHdpdGhvdXQgdXNpbmcgdGhlIC0tZnVsbC1kaWZmIG9wdGlvbikuCisKKyAqICJnaXQgZ3JlcCAtRiAtaSBTdFJpTmciIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC4KKworICogRW51bWVyYXRpb24gb2YgYXZhaWxhYmxlIG1lcmdlIHN0cmF0ZWdpZXMgaXRlcmF0ZWQgb3ZlciB0aGUgbGlzdCBvZgorICAgY29tbWFuZHMgaW4gYSB3cm9uZyB3YXksIHNvbWV0aW1lcyBwcm9kdWNpbmcgYW4gaW5jb3JyZWN0IHJlc3VsdC4KKworICogImdpdCBzaG9ydGxvZyIgZGlkIG5vdCBob25vciB0aGUgImVuY29kaW5nIiBoZWFkZXIgZW1iZWRkZWQgaW4gdGhlCisgICBjb21taXQgb2JqZWN0IGxpa2UgImdpdCBsb2ciIGRpZC4KKworICogUmVhZGluZyBwcm9ncmVzcyBtZXNzYWdlcyB0aGF0IGNvbWUgZnJvbSB0aGUgcmVtb3RlIHNpZGUgd2hpbGUgcnVubmluZworICAgImdpdCBwdWxsIiBpcyBnaXZlbiBwcmVjZWRlbmNlIG92ZXIgcmVhZGluZyB0aGUgYWN0dWFsIHBhY2sgZGF0YSB0bworICAgcHJldmVudCBnYXJibGVkIHByb2dyZXNzIG1lc3NhZ2Ugb24gdGhlIHVzZXIncyB0ZXJtaW5hbC4KKworICogImdpdCByZWJhc2UiIGdvdCBjb25mdXNlZCB3aGVuIHRoZSBsb2cgbWVzc2FnZSBiZWdhbiB3aXRoIGNlcnRhaW4KKyAgIHN0cmluZ3MgdGhhdCBsb29rZWQgbGlrZSBTdWJqZWN0OiwgRGF0ZTogb3IgRnJvbTogaGVhZGVyLgorCisgKiAiZ2l0IHJlc2V0IiBhY2NpZGVudGFsbHkgcnVuIGluIC5naXQvIGRpcmVjdG9yeSBjaGVja2VkIG91dCB0aGUKKyAgIHdvcmsgdHJlZSBjb250ZW50cyBpbiB0aGVyZS4KKworCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllYWY3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNi50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IHYxLjYuNS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFkZCAtcCIgaGFkIGEgcmVncmVzc2lvbiBzaW5jZSB2MS42LjUuMyB0aGF0IGJyb2tlIGRlbGV0aW9uIG9mCisgICBub24tZW1wdHkgZmlsZXMuCisKKyAqICJnaXQgYXJjaGl2ZSAtbyBvLnppcCAtLSBNYWtlZmlsZSIgcHJvZHVjZWQgYW4gYXJjaGl2ZSBpbiBvLnppcAorICAgYnV0IGluIFBPU0lYIHRhciBmb3JtYXQuCisKKyAqIEVycm9yIG1lc3NhZ2UgZ2l2ZW4gdG8gImdpdCBwdWxsIC0tcmViYXNlIiB3aGVuIHRoZSB1c2VyIGRpZG4ndCBnaXZlCisgICBlbm91Z2ggY2x1ZSBhcyB0byB3aGF0IGJyYW5jaCB0byBpbnRlZ3JhdGUgd2l0aCBzdGlsbCB0YWxrZWQgYWJvdXQKKyAgICJtZXJnaW5nIHdpdGgiIHRoZSBicmFuY2guCisKKyAqIEVycm9yIG1lc3NhZ2VzIGdpdmVuIGJ5ICJnaXQgbWVyZ2UiIHdoZW4gdGhlIG1lcmdlIHJlc3VsdGVkIGluIGEKKyAgIGZhc3QtZm9yd2FyZCBzdGlsbCB3ZXJlIGluIHBsdW1iaW5nIGxpbmdvLCBldmVuIHRob3VnaCBpbiB2MS42LjUKKyAgIHdlIHJld29yZGVkIG1lc3NhZ2VzIGluIG90aGVyIGNhc2VzLgorCisgKiBUaGUgcG9zdC11cGxvYWQtaG9vayBydW4gYnkgdXBsb2FkLXBhY2sgaW4gcmVzcG9uc2UgdG8gImdpdCBmZXRjaCIgaGFzCisgICBiZWVuIHJlbW92ZWQsIGR1ZSB0byBzZWN1cml0eSBjb25jZXJucyAodGhlIGhvb2sgZmlyc3QgYXBwZWFyZWQgaW4KKyAgIDEuNi41KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNTMwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjcudHh0CkBAIC0wLDAgKzEsMTkgQEAKK0dpdCB2MS42LjUuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBJZiBhIHVzZXIgc3BlY2lmaWVzIGEgY29sb3IgZm9yIGEgPHNsb3Q+IChpLmUuIGEgY2xhc3Mgb2YgdGhpbmdzIHRvIHNob3cKKyAgaW4gYSBwYXJ0aWN1bGFyIGNvbG9yKSB0aGF0IGlzIGtub3duIG9ubHkgYnkgbmV3ZXIgdmVyc2lvbnMgb2YgZ2l0CisgIChlLmcuICJjb2xvci5kaWZmLmZ1bmMiIHdhcyByZWNlbnRseSBhZGRlZCBmb3IgdXBjb21pbmcgMS42LjYgcmVsZWFzZSksCisgIGFuIG9sZGVyIHZlcnNpb24gb2YgZ2l0IHNob3VsZCBqdXN0IGlnbm9yZSB0aGVtLiAgSW5zdGVhZCB3ZSBkaWFnbm9zZWQKKyAgaXQgYXMgYW4gZXJyb3IuCisKKyogV2l0aCBoZWxwLmF1dG9jb3JyZWN0IHNldCB0byBub24temVybyB2YWx1ZSwgdGhlIGxvZ2ljIHRvIGd1ZXNzIHR5cG9zCisgIGluIHRoZSBzdWJjb21tYW5kIG5hbWUgbWlzZmlyZWQgYW5kIHJhbiBhIHJhbmRvbSBub25zZW5zZSBjb21tYW5kLgorCisqIElmIGEgY29tbWFuZCBpcyBydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIGFzIGEgcGF0aHNwZWMgaW5zaWRlIGEgYmFyZQorICByZXBvc2l0b3J5LCBlLmcuICJyZXYtbGlzdCBIRUFEIC0tIC9ob21lIiwgdGhlIGNvZGUgdHJpZWQgdG8gcnVuCisgIHN0cmxlbigpIG9uIE5VTEwsIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgZ2V0X2dpdF93b3JrX3RyZWUoKSwgYW5kCisgIHNlZ2ZhdWx0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjgudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS44LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjI0YmViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS44LnR4dApAQCAtMCwwICsxLDI4IEBACitHaXQgdjEuNi41LjggUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBjb3VudC1vYmplY3RzIiBkaWQgbm90IGhhbmRsZSBwYWNrZmlsZXMgdGhhdCBhcmUgYmlnZ2VyIHRoYW4gNEcgb24KKyAgcGxhdGZvcm1zIHdpdGggMzItYml0IG9mZl90LgorCisqICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IGFib3J0IGNsZWFubHkgaWYgaXQgZmFpbGVkIHRvIGxhdW5jaCB0aGUgZWRpdG9yLgorCisqICJnaXQgYmxhbWUiIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gY29tbWl0IGxhY2tlZCB0aGUgYXV0aG9yIG5hbWUuCisKKyogImdpdCBmYXN0LWltcG9ydCIgY2hva2VkIHdoZW4gaGFuZGxpbmcgYSB0YWcgdGhhdCBwb2ludHMgYXQgYW4gb2JqZWN0CisgIHRoYXQgaXMgbm90IGEgY29tbWl0LgorCisqICJnaXQgcmVzZXQgLS1oYXJkIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4gR0lUX1dPUktfVFJFRSBlbnZpcm9ubWVudAorICB2YXJpYWJsZSBpcyB1c2VkIHRvIHBvaW50IGF0IHRoZSByb290IG9mIHRoZSB0cnVlIHdvcmsgdHJlZS4KKworKiAiZ2l0IGdyZXAiIGZlZCBhIGJ1ZmZlciB0aGF0IGlzIG5vdCBOVUwtdGVybWluYXRlZCB0byB1bmRlcmx5aW5nCisgIHJlZ2V4ZWMoKS4KKworKiAiZ2l0IGNoZWNrb3V0IC1tIG90aGVyIiB3aGlsZSBvbiBhIGJyYW5jaCB0aGF0IGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdAorICBzZWdmYXVsdGVkLCBpbnN0ZWFkIG9mIGZhaWxpbmcuCisKKyogImdpdCBicmFuY2ggLWEgb3RoZXIiIHNob3VsZCBoYXZlIGRpYWdub3NlZCB0aGUgY29tbWFuZCBhcyBhbiBlcnJvci4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBhbHNvIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS45LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0NjlkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuOS50eHQKQEAgLTAsMCArMSwxOCBAQAorR2l0IHYxLjYuNS45IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS44CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBvdmVybG9uZyBsaW5lIGFmdGVyICIuZ2l0ZGlyOiAiIGluIGEgZ2l0IGZpbGUgY2F1c2VkIG91dCBvZiBib3VuZHMKKyAgIGFjY2VzcyB0byBhbiBhcnJheSBvbiB0aGUgc3RhY2suCisKKyAqICJnaXQgYmxhbWUgLUwgJHN0YXJ0LCRlbmQiIHNlZ2ZhdWx0ZWQgd2hlbiB0b28gbGFyZ2UgJHN0YXJ0IHdhcyBnaXZlbi4KKworICogImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbiIgZGlkIG5vdCBzdG9wIGF0IG5vbiBvcHRpb24KKyAgIHdoZW4gLS1rZWVwLWRhc2hkYXNoIHdhcyBpbiBlZmZlY3QuCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KKworT3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMTQxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LnR4dApAQCAtMCwwICsxLDE2OSBAQAorR0lUIHYxLjYuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworSW4gZ2l0IDEuNy4wLCB3aGljaCB3YXMgcGxhbm5lZCB0byBiZSB0aGUgcmVsZWFzZSBhZnRlciAxLjYuNSwgImdpdAorcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCB3aWxsIGJlIHJlZnVzZWQgYnkKK2RlZmF1bHQuCisKK1lvdSBjYW4gY2hvb3NlIHdoYXQgc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggaW4gdGhlIHJlY2VpdmluZworcmVwb3NpdG9yeS4KKworQWxzbywgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2ggJGtpbGxlZCBpbiBhIHJlbW90ZQorcmVwb3NpdG9yeSAkdGhlcmUsIHdoZW4gJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQgYnJhbmNoIHBvaW50ZWQgYXQgYnkKK2l0cyBIRUFELCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4KKworWW91IGNhbiBjaG9vc2Ugd2hhdCBzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCBpbiB0aGUgcmVjZWl2aW5nCityZXBvc2l0b3J5LgorCitUbyBlYXNlIHRoZSB0cmFuc2l0aW9uIHBsYW4sIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSBvZiBzdWNoIGEKK3B1c2ggcnVubmluZyB0aGlzIHJlbGVhc2Ugd2lsbCBpc3N1ZSBhIGJpZyB3YXJuaW5nIHdoZW4gdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG1pc3NpbmcuICBQbGVhc2UgcmVmZXIgdG86CisKKyAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQorICBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTA3NzU4L2ZvY3VzPTEwODAwNworCitmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCit0cmFuc2l0aW9uIHBsYW4uCisKK1VwZGF0ZXMgc2luY2UgdjEuNi40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogdmFyaW91cyB1cGRhdGVzIHRvIGdpdGssIGdpdC1zdm4gYW5kIGdpdHdlYi4KKworKHBvcnRhYmlsaXR5KQorCisgKiBtb3JlIGltcHJvdmVtZW50cyBvbiBtaW5ndyBwb3J0LgorCisgKiBtaW5ndyB3aWxsIGFsc28gZ2l2ZSBGUlNYIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgTEVTUworICAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIG9uZS4KKworICogaW5pdGlhbCBzdXBwb3J0IHRvIGNvbXBpbGUgZ2l0IG9uIFdpbmRvd3Mgd2l0aCBNU1ZDLgorCisocGVyZm9ybWFuY2UpCisKKyAqIE9uIG1ham9yIHBsYXRmb3JtcywgdGhlIHN5c3RlbSBjYW4gYmUgY29tcGlsZWQgdG8gdXNlIHdpdGggTGludXMncworICAgYmxvY2stc2hhMSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU0hBLTEgaGFzaCBhbGdvcml0aG0sIHdoaWNoCisgICBvdXRwZXJmb3JtcyB0aGUgZGVmYXVsdCBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiB3ZSBib3Jyb3dlZCBmcm9tCisgICBNb3ppbGxhLgorCisgKiBVbm5lY2Vzc2FyeSBpbmVmZmljaWVuY3kgaW4gZGVlcGVuaW5nIG9mIGEgc2hhbGxvdyByZXBvc2l0b3J5IGhhcworICAgYmVlbiByZW1vdmVkLgorCisgKiAiZ2l0IGNsb25lIiBkb2VzIG5vdCBncmFiIG9iamVjdHMgdGhhdCBpdCBkb2VzIG5vdCBuZWVkIChpLmUuCisgICByZWZlcmVuY2VkIG9ubHkgZnJvbSByZWZzIG91dHNpZGUgcmVmcy9oZWFkcyBhbmQgcmVmcy90YWdzCisgICBoaWVyYXJjaHkpIGFueW1vcmUuCisKKyAqIFRoZSAiZ2l0IiBtYWluIGJpbmFyeSB1c2VkIHRvIGxpbmsgd2l0aCBsaWJjdXJsLCB3aGljaCB0aGVuIGRyYWdnZWQKKyAgIGluIGEgbGFyZ2UgbnVtYmVyIG9mIGV4dGVybmFsIGxpYnJhcmllcy4gIFdoZW4gdXNpbmcgYmFzaWMgcGx1bWJpbmcKKyAgIGNvbW1hbmRzIGluIHNjcmlwdHMsIHRoaXMgdW5uZWNlc3NhcmlseSBzbG93ZWQgdGhpbmdzIGRvd24uICBXZSBub3cKKyAgIGltcGxlbWVudCBodHRwL2h0dHBzL2Z0cCB0cmFuc2ZlciBhcyBhIHNlcGFyYXRlIGV4ZWN1dGFibGUgYXMgd2UKKyAgIHVzZWQgdG8uCisKKyAqICJnaXQgY2xvbmUiIHJ1biBsb2NhbGx5IGhhcmRsaW5rcyBvciBjb3BpZXMgdGhlIGZpbGVzIGluIC5naXQvIHRvCisgICBuZXdseSBjcmVhdGVkIHJlcG9zaXRvcnkuICBJdCB1c2VkIHRvIGdpdmUgbmV3IG10aW1lIHRvIGNvcGllZCBmaWxlcywKKyAgIGJ1dCB0aGlzIGRlbGF5ZWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHRvIHRyaWdnZXIgdW5uZWNlc3NhcmlseSBpbiB0aGUKKyAgIGNsb25lZCByZXBvc2l0b3J5LiAgV2Ugbm93IHByZXNlcnZlIG10aW1lIGZvciB0aGVzZSBmaWxlcyB0byBhdm9pZAorICAgdGhpcyBpc3N1ZS4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiBIdW1hbiB3cml0YWJsZSBkYXRlIGZvcm1hdCB0byB2YXJpb3VzIG9wdGlvbnMsIGUuZy4gLS1zaW5jZT15ZXN0ZXJkYXksCisgICBtYXN0ZXJAezIwMDAuMDkuMTd9LCBhcmUgdGF1Z2h0IHRvIGluZmVyIHNvbWUgb21pdHRlZCBpbnB1dCBwcm9wZXJseS4KKworICogQSBmZXcgcHJvZ3JhbXMgZ2F2ZSB2ZXJib3NlICJhZHZpY2UiIG1lc3NhZ2VzIHRvIGhlbHAgdW5pbml0aWF0ZWQKKyAgIHBlb3BsZSB3aGVuIGlzc3VpbmcgZXJyb3IgbWVzc2FnZXMuICBBbiBpbmZyYXN0cnVjdHVyZSB0byBhbGxvdworICAgdXNlcnMgdG8gc3F1ZWxjaCB0aGVtIGhhcyBiZWVuIGludHJvZHVjZWQsIGFuZCBhIGZldyBzdWNoIG1lc3NhZ2VzCisgICBjYW4gYmUgc2lsZW5jZWQgbm93LgorCisgKiByZWZzL3JlcGxhY2UvIGhpZXJhcmNoeSBpcyBkZXNpZ25lZCB0byBiZSB1c2FibGUgYXMgYSByZXBsYWNlbWVudAorICAgb2YgdGhlICJncmFmdHMiIG1lY2hhbmlzbSwgd2l0aCB0aGUgYWRkZWQgYWR2YW50YWdlIHRoYXQgaXQgY2FuIGJlCisgICB0cmFuc2ZlcnJlZCBhY3Jvc3MgcmVwb3NpdG9yaWVzLgorCisgKiAiZ2l0IGFtIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgaWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMuCisKKyAqICJnaXQgYW0iIGhhbmRsZXMgaW5wdXQgZS1tYWlsIGZpbGVzIHRoYXQgaGFzIENSTEYgbGluZSBlbmRpbmdzIHNlbnNpYmx5LgorCisgKiAiZ2l0IGFtIiBsZWFybmVkICItLXNjaXNzb3JzIiBvcHRpb24gdG8gYWxsb3cgeW91IHRvIGRpc2NhcmQgZWFybHkgcGFydAorICAgb2YgYW4gaW5jb21pbmcgZS1tYWlsLgorCisgKiAiZ2l0IGFyY2hpdmUgLW8gb3V0cHV0LnppcCIgd29ya3Mgd2l0aG91dCBiZWluZyB0b2xkIHdoYXQgZm9ybWF0IHRvCisgICB1c2Ugd2l0aCBhbiBleHBsaWNpdCAiLS1mb3JtYXQ9emlwIi5vcHRpb24uCisKKyAqICJnaXQgY2hlY2tvdXQiLCAiZ2l0IHJlc2V0IiBhbmQgImdpdCBzdGFzaCIgbGVhcm5lZCB0byBwaWNrIGFuZAorICAgY2hvb3NlIHRvIHVzZSBzZWxlY3RlZCBjaGFuZ2VzIHlvdSBtYWRlLCBzaW1pbGFyIHRvICJnaXQgYWRkIC1wIi4KKworICogImdpdCBjbG9uZSIgbGVhcm5lZCBhICItYiIgb3B0aW9uIHRvIHBpY2sgYSBIRUFEIHRvIGNoZWNrIG91dAorICAgZGlmZmVyZW50IGZyb20gdGhlIHJlbW90ZSdzIGRlZmF1bHQgYnJhbmNoLgorCisgKiAiZ2l0IGNsb25lIiBsZWFybmVkIC0tcmVjdXJzaXZlIG9wdGlvbi4KKworICogImdpdCBjbG9uZSIgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkgb24gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSB1c2VkIHRvCisgICBjb3B5IGluZGl2aWR1YWwgb2JqZWN0IGZpbGVzIHdpdGhvdXQgcHJlc2VydmluZyB0aGUgb2xkIHRpbWVzdGFtcCwgZ2l2aW5nCisgICB0aGVtIGV4dHJhIGxpZmV0aW1lIGluIHRoZSBuZXcgcmVwb3NpdG9yeSB1bnRpbCB0aGV5IGdjJ2VkLgorCisgKiAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4gJGFyZ3MiIGlzIGEgbmV3IHJlY29tbWVuZGVkIHdheSB0byBhc2sgIndoYXQgd291bGQKKyAgIGhhcHBlbiBpZiBJIHRyeSB0byBjb21taXQgd2l0aCB0aGVzZSBhcmd1bWVudHMuIgorCisgKiAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4iIGFuZCAiZ2l0IHN0YXR1cyIgc2hvd3MgY29uZmxpY3RlZCBwYXRocyBpbiBhCisgICBzZXBhcmF0ZSBzZWN0aW9uIHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gc3BvdCBkdXJpbmcgYSBtZXJnZS4KKworICogImdpdCBjdnNpbXBvcnQiIG5vdyBzdXBwb3J0cyBwYXNzd29yZC1wcm90ZWN0ZWQgcHNlcnZlciBhY2Nlc3MgZXZlbgorICAgd2hlbiB0aGUgcGFzc3dvcmQgaXMgbm90IHRha2VuIGZyb20gfi8uY3ZzcGFzcyBmaWxlLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBsZWFybmVkIC0tbm8tZGF0YSBvcHRpb24gdGhhdCBjYW4gYmUgdXNlZnVsIHdoZW4KKyAgIHJlb3JkZXJpbmcgY29tbWl0cyBhbmQgdHJlZXMgd2l0aG91dCB0b3VjaGluZyB0aGUgY29udGVudHMgb2YKKyAgIGJsb2JzLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBoYXMgYSBwYWlyIG9mIG5ldyBmcm9udC1lbmQgaW4gY29udHJpYi8gYXJlYS4KKworICogImdpdCBpbml0IiBsZWFybmVkIHRvIG1rZGlyL2NoZGlyIGludG8gYSBkaXJlY3Rvcnkgd2hlbiBnaXZlbiBhbgorICAgZXh0cmEgYXJndW1lbnQgKGkuZS4gImdpdCBpbml0IHRoaXMiKS4KKworICogImdpdCBpbnN0YXdlYiIgb3B0aW9uYWxseSBjYW4gdXNlIG1vbmdvb3NlIGFzIHRoZSB3ZWIgc2VydmVyLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBjYW4gb3B0aW9uYWxseSBiZSB0b2xkIHdpdGggLS1kZWNvcmF0ZT1mdWxsIHRvCisgICBnaXZlIHRoZSByZWZlcmVuY2UgbmFtZSBpbiBmdWxsLgorCisgKiAiZ2l0IG1lcmdlIiBpc3N1ZWQgYW4gdW5uZWNlc3NhcmlseSBzY2FyeSBtZXNzYWdlIHdoZW4gaXQgZGV0ZWN0ZWQKKyAgIHRoYXQgdGhlIG1lcmdlIG1heSBoYXZlIHRvIHRvdWNoIHRoZSBwYXRoIHRoYXQgdGhlIHVzZXIgaGFzIGxvY2FsCisgICB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvLiBUaGUgbWVzc2FnZSBoYXMgYmVlbiByZXdvcmRlZCB0byBtYWtlIGl0CisgICBjbGVhciB0aGF0IHRoZSBjb21tYW5kIGFib3J0ZWQsIHdpdGhvdXQgZG9pbmcgYW55IGhhcm0uCisKKyAqICJnaXQgcHVzaCIgY2FuIGJlIHRvbGQgdG8gYmUgLS1xdWlldC4KKworICogImdpdCBwdXNoIiBwYXlzIGF0dGVudGlvbiB0byB1cmwuJGJhc2UucHVzaEluc3RlYWRPZiBhbmQgdXNlcyBhIFVSTAorICAgdGhhdCBpcyBkZXJpdmVkIGZyb20gdGhlIFVSTCB1c2VkIGZvciBmZXRjaGluZy4KKworICogaW5mb3JtYXRpb25hbCBvdXRwdXQgZnJvbSAiZ2l0IHJlc2V0IiB0aGF0IGxpc3RzIHRoZSBsb2NhbGx5IG1vZGlmaWVkCisgICBwYXRocyBpcyBtYWRlIGNvbnNpc3RlbnQgd2l0aCB0aGF0IG9mICJnaXQgY2hlY2tvdXQgJGFub3RoZXJfYnJhbmNoIi4KKworICogImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgdG8gZ2l2ZSBzdWJtb2R1bGUgbmFtZSB0byBzY3JpcHRzIHJ1biB3aXRoCisgICAiZm9yZWFjaCIgc3ViY29tbWFuZC4KKworICogdmFyaW91cyBzdWJjb21tYW5kcyB0byAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCAtLXJlY3Vyc2l2ZSBvcHRpb24uCisKKyAqICJnaXQgc3VibW9kdWxlIHN1bW1hcnkiIGxlYXJuZWQgLS1maWxlcyBvcHRpb24gdG8gY29tcGFyZSB0aGUgd29yaworICAgdHJlZSB2cyB0aGUgY29tbWl0IGJvdW5kIGF0IHN1Ym1vZHVsZSBwYXRoLCBpbnN0ZWFkIG9mIGNvbXBhcmluZworICAgdGhlIGluZGV4LgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiwgd2hpY2ggaXMgdGhlIHNlcnZlciBzaWRlIHN1cHBvcnQgZm9yICJnaXQgY2xvbmUiIGFuZAorICAgImdpdCBmZXRjaCIsIGNhbiBjYWxsIGEgbmV3IHBvc3QtdXBsb2FkLXBhY2sgaG9vayBmb3Igc3RhdGlzdGljcyBwdXJwb3Nlcy4KKworKGRldmVsb3BlcnMpCisKKyAqIFdpdGggR0lUX1RFU1RfT1BUUz0iLS1yb290PS9wL2EvdC9oIiwgdGVzdHMgY2FuIGJlIHJ1biBvdXRzaWRlIHRoZQorICAgc291cmNlIGRpcmVjdG9yeTsgdXNpbmcgdG1wZnMgbWF5IGdpdmUgZmFzdGVyIHR1cm5hcm91bmQuCisKKyAqIFdpdGggTk9fUEVSTF9NQUtFTUFLRVIgc2V0LCBERVNURElSPSBpcyBub3cgaG9ub3VyZWQsIHNvIHlvdSBjYW4KKyAgIGJ1aWxkIGZvciBvbmUgbG9jYXRpb24sIGFuZCBpbnN0YWxsIGludG8gYW5vdGhlciBsb2NhdGlvbiB0byB0YXIgaXQKKyAgIHVwLgorCitGaXhlcyBzaW5jZSB2MS42LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuNC5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZDBhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjEudHh0CkBAIC0wLDAgKzEsMzcgQEAKK0dpdCB2MS42LjYuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGJsYW1lIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGNvbW1pdCBsYWNrZWQgdGhlIGF1dGhvciBuYW1lLgorCisgKiAiZ2l0IGJyYW5jaCAtYSBuYW1lIiB3YXNuJ3QgZGlhZ25vc2VkIGFzIGFuIGVycm9yLgorCisgKiAiZ2l0IGNvdW50LW9iamVjdHMiIGRpZCBub3QgaGFuZGxlIHBhY2tmaWxlcyB0aGF0IGFyZSBiaWdnZXIgdGhhbiA0RyBvbgorICAgcGxhdGZvcm1zIHdpdGggMzItYml0IG9mZl90LgorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIG90aGVyIiB3aGlsZSBvbiBhIGJyYW5jaCB0aGF0IGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdAorICAgc2VnZmF1bHRlZCwgaW5zdGVhZCBvZiBmYWlsaW5nLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBjaG9rZWQgd2hlbiBmZWQgYSB0YWcgdGhhdCBkbyBub3QgcG9pbnQgYXQgYQorICAgY29tbWl0LgorCisgKiAiZ2l0IGdyZXAiIGZpbmRpbmcgZnJvbSB3b3JrIHRyZWUgZmlsZXMgY291bGQgaGF2ZSBmZWQgZ2FyYmFnZSB0bworICAgdGhlIHVuZGVybHlpbmcgcmVnZXhlYygzKS4KKworICogImdpdCBncmVwIC1MIiBkaWRuJ3Qgc2hvdyBlbXB0eSBmaWxlcyAodGhleSBzaG91bGQgbmV2ZXIgbWF0Y2gsIGFuZAorICAgdGhleSBzaG91bGQgYWx3YXlzIGFwcGVhciBpbiAtTCBvdXRwdXQgYXMgdW5tYXRjaGluZykuCisKKyAqICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IGFib3J0IGNsZWFubHkgaWYgaXQgZmFpbGVkIHRvIGxhdW5jaCB0aGUgZWRpdG9yLgorCisgKiAiZ2l0IHJlc2V0IC0taGFyZCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlIGlzIHVzZWQgdG8gcG9pbnQgYXQgdGhlIHJvb3Qgb2YgdGhlIHRydWUgd29yayB0cmVlLgorCisgKiBodHRwLWJhY2tlbmQgd2FzIG5vdCBsaXN0ZWQgaW4gdGhlIGNvbW1hbmQgbGlzdCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogQnVpbGRpbmcgb24gRnJlZUJTRCAoYm90aCA3IGFuZCA4KSBuZWVkcyBPTERfSUNPTlYgc2V0IGluIHRoZSBNYWtlZmlsZQorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIHNvbWUtYnJhbmNoIiB3aGlsZSBvbiBhbiB1bmJvcm4gYnJhbmNoIGNyYXNoZWQuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWFkZGMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4yLnR4dApAQCAtMCwwICsxLDQ2IEBACitHaXQgdjEuNi42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIHJlY3Vyc2l2ZSBtZXJnZSBkaWRuJ3QgY29ycmVjdGx5IGRpYWdub3NlIGl0cyBvd24gcHJvZ3JhbW1pbmcgZXJyb3JzLAorICAgYW5kIGluc3RlYWQgY2F1c2VkIHRoZSBjYWxsZXIgdG8gc2VnZmF1bHQuCisKKyAqIFRoZSBuZXcgInNtYXJ0IGh0dHAiIGF3YXJlIGNsaWVudHMgcHJvYmVkIHRoZSB3ZWIgc2VydmVycyB0byBzZWUgaWYKKyAgIHRoZXkgc3VwcG9ydCBzbWFydCBodHRwLCBidXQgZGlkIG5vdCBmYWxsIGJhY2sgdG8gZHVtYiBodHRwIHRyYW5zcG9ydAorICAgY29ycmVjdGx5IHdpdGggc29tZSBzZXJ2ZXJzLgorCisgKiBUaW1lIGJhc2VkIHJlZmxvZyBzeW50YXggZS5nLiAiQHt5ZXN0ZXJkYXl9IiBkaWRuJ3QgZGlhZ25vc2UgYSBtaXNzcGVsbGVkCisgICB0aW1lIHNwZWNpZmljYXRpb24gYW5kIGluc3RlYWQgYXNzdW1lZCAiQHtub3d9Ii4KKworICogImdpdCBhcmNoaXZlIEhFQUQgLS0gbm8tc3VjaC1kaXJlY3RvcnkiIHByb2R1Y2VkIGFuIGVtcHR5IGFyY2hpdmUKKyAgIHdpdGhvdXQgY29tcGxhaW5pbmcuCisKKyAqICJnaXQgYmxhbWUgLUwgc3RhcnQsZW5kIC0tIGZpbGUiIG1pc2JlaGF2ZWQgd2hlbiBnaXZlbiBhIHN0YXJ0IHRoYXQgaXMKKyAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpbGUuCisKKyAqICJnaXQgY2hlY2tvdXQgLW0iIGRpZG4ndCBjb3JyZWN0bHkgY2FsbCBjdXN0b20gbWVyZ2UgYmFja2VuZCBzdXBwbGllZAorICAgYnkgdGhlIGVuZCB1c2VyLgorCisgKiAiZ2l0IGNvbmZpZyAtZiA8ZmlsZT4iIG1pc2JlaGF2ZWQgd2hlbiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworICogImdpdCBjdnNzZXJ2ZXIiIGRpZG4ndCBsaWtlIGhhdmluZyByZWdleCBtZXRhY2hhcmFjdGVycyAoZS5nLiAnKycpIGluCisgICBDVlNST09UIGVudmlyb25tZW50LgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgbGFyZ2UgYmxvYnMgdGhhdCBtYXkKKyAgIGJ1c3QgdGhlIHBhY2sgc2l6ZSBsaW1pdC4KKworICogImdpdCBndWkiIGlzIHN1cHBvc2VkIHRvIHdvcmsgZXZlbiB3aGVuIGxhdW5jaGVkIGZyb20gaW5zaWRlIGEgLmdpdAorICAgZGlyZWN0b3J5LgorCisgKiAiZ2l0IGd1aSIgbWlzYmVoYXZlZCB3aGVuIGFwcGx5aW5nIGEgaHVuayB0aGF0IGVuZHMgd2l0aCBkZWxldGlvbi4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgaG9ub3IgaW1hcC5wcmVmb3JtYXR0ZWRIVE1MIGFzIGRvY3VtZW50ZWQuCisKKyAqICJnaXQgbG9nIiBmYW1pbHkgaW5jb3JyZWN0bHkgc2hvd2VkIHRoZSBjb21taXQgbm90ZXMgdW5jb25kaXRpb25hbGx5IGJ5CisgICBtaXN0YWtlLCB3aGljaCB3YXMgZXNwZWNpYWxseSBpcnJpdGF0aW5nIHdoZW4gcnVubmluZyAiZ2l0IGxvZyAtLW9uZWxpbmUiLgorCisgKiAiZ2l0IHN0YXR1cyIgc2hvdWxkbid0IHJlcXVpcmUgYW4gd3JpdGUgYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5LgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0ODNhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMy50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IHYxLjYuNi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBvdmVybG9uZyBsaW5lIGFmdGVyICIuZ2l0ZGlyOiAiIGluIGEgZ2l0IGZpbGUgY2F1c2VkIG91dCBvZiBib3VuZHMKKyAgIGFjY2VzcyB0byBhbiBhcnJheSBvbiB0aGUgc3RhY2suCisKKyAqICJnaXQgYmlzZWN0ICRwYXRoIiBkaWQgbm90IGNvcnJlY3RseSBkaWFnbm9zZSBhbiBlcnJvciB3aGVuIGdpdmVuIGEKKyAgIG5vbi1leGlzdGVudCBwYXRoLgorCisgKiAiZ2l0IGJsYW1lIC1MICRzdGFydCwkZW5kIiBzZWdmYXVsdGVkIHdoZW4gdG9vIGxhcmdlICRzdGFydCB3YXMgZ2l2ZW4uCisKKyAqICJnaXQgaW1hcC1zZW5kIiBkaWQgbm90IHdyaXRlIGRyYWZ0IGJveCB3aXRoIENSTEYgbGluZSBlbmRpbmdzIHBlciBSRkMuCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdG9wLWF0LW5vbi1vcHRpb24iIGRpZCBub3Qgc3RvcCBhdCBub24gb3B0aW9uCisgICB3aGVuIC0ta2VlcC1kYXNoZGFzaCB3YXMgaW4gZWZmZWN0LgorCisgKiAiZ2l0d2ViIiBjYW4gc29tZXRpbWVzIGJlIHRyaWNrZWQgaW50byBwYXJyb3R0aW5nIGEgZmlsZW5hbWUgYXJndW1lbnQKKyAgIGdpdmVuIGluIGEgcmVxdWVzdCB3aXRob3V0IHByb3Blcmx5IHF1b3RpbmcuCisKK090aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTBiNTljCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi50eHQKQEAgLTAsMCArMSwyMjQgQEAKK0dpdCB2MS42LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdGVzIG9uIGJlaGF2aW91ciBjaGFuZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogSW4gdGhpcyByZWxlYXNlLCAiZ2l0IGZzY2siIGRlZmF1bHRzIHRvICJnaXQgZnNjayAtLWZ1bGwiIGFuZAorICAgY2hlY2tzIHBhY2tmaWxlcywgYW5kIGJlY2F1c2Ugb2YgdGhpcyBpdCB3aWxsIHRha2UgbXVjaCBsb25nZXIgdG8KKyAgIGNvbXBsZXRlIHRoYW4gYmVmb3JlLiAgSWYgeW91IHByZWZlciBhIHF1aWNrZXIgY2hlY2sgb25seSBvbiBsb29zZQorICAgb2JqZWN0cyAodGhlIG9sZCBkZWZhdWx0KSwgeW91IGNhbiBzYXkgImdpdCBmc2NrIC0tbm8tZnVsbCIuICBUaGlzCisgICBoYXMgYmVlbiBzdXBwb3J0ZWQgYnkgMS41LjQgYW5kIG5ld2VyIHZlcnNpb25zIG9mIGdpdCwgc28gaXQgaXMKKyAgIHNhZmUgdG8gd3JpdGUgaXQgaW4geW91ciBzY3JpcHQgZXZlbiBpZiB5b3UgdXNlIHNsaWdodGx5IG9sZGVyIGdpdAorICAgb24gc29tZSBvZiB5b3VyIG1hY2hpbmVzLgorCitQcmVwYXJpbmcgeW91cnNlbHZlcyBmb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgaW4gMS43LjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBnaXQgMS43LjAsIHdoaWNoIGlzIHBsYW5uZWQgdG8gYmUgdGhlIHJlbGVhc2UgYWZ0ZXIgMS42LjYsIHRoZXJlIHdpbGwKK2JlIGEgaGFuZGZ1bCBvZiBiZWhhdmlvdXIgY2hhbmdlcyB0aGF0IHdpbGwgYnJlYWsgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworVGhlc2UgY2hhbmdlcyB3ZXJlIGRpc2N1c3NlZCBsb25nIHRpbWUgYWdvIGFuZCBleGlzdGluZyBiZWhhdmlvdXJzIGhhdmUKK2JlZW4gaWRlbnRpZmllZCBhcyBtb3JlIHByb2JsZW1hdGljIHRvIHRoZSB1c2VyYmFzZSB0aGFuIGtlZXBpbmcgdGhlbSBmb3IKK3RoZSBzYWtlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKK1doZW4gbmVjZXNzYXJ5LCBhIHRyYW5zaXRpb24gc3RyYXRlZ3kgZm9yIGV4aXN0aW5nIHVzZXJzIGhhcyBiZWVuIGRlc2lnbmVkCitub3QgdG8gZm9yY2UgdGhlbSBydW5uaW5nIGFyb3VuZCBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFuZAordXBkYXRpbmcgdGhlaXIgc2NyaXB0cyBpbiBvcmRlciB0byBlaXRoZXIga2VlcCB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3VyCitvciBhZGp1c3QgdG8gdGhlIG5ldyBiZWhhdmlvdXIsIG9uIHRoZSBkYXkgdGhlaXIgc3lzYWRtaW4gZGVjaWRlcyB0byBpbnN0YWxsCit0aGUgbmV3IHZlcnNpb24gb2YgZ2l0LiAgV2hlbiB3ZSBzd2l0Y2hlZCBmcm9tICJnaXQtZm9vIiB0byAiZ2l0IGZvbyIgaW4KKzEuNi4wLCBldmVuIHRob3VnaCB0aGUgY2hhbmdlIGhhZCBiZWVuIGFkdmVydGlzZWQgYW5kIHRoZSB0cmFuc2l0aW9uCitndWlkZSBoYWQgYmVlbiBwcm92aWRlZCBmb3IgYSB2ZXJ5IGxvbmcgdGltZSwgdGhlIHVzZXJzIHByb2NyYXN0aW5hdGVkCitkdXJpbmcgdGhlIGVudGlyZSB0cmFuc2l0aW9uIHBlcmlvZCwgYW5kIGVuZGVkIHVwIHBhbmlja2luZyBvbiB0aGUgZGF5Cit0aGVpciBzeXNhZG1pbnMgdXBkYXRlZCB0aGVpciBnaXQgaW5zdGFsbGF0aW9uLiAgV2UgYXJlIHRyeWluZyB0byBhdm9pZAorcmVwZWF0aW5nIHRoYXQgdW5wbGVhc2FudG5lc3MgaW4gdGhlIDEuNy4wIHJlbGVhc2UuCisKK0ZvciBjaGFuZ2VzIGRlY2lkZWQgdG8gYmUgaW4gMS43LjAsIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBhZmZlY3RlZAoraGF2ZSBiZWVuIG11Y2ggbG91ZGVyIHRvIHN0cm9uZ2x5IGRpc2NvdXJhZ2Ugc3VjaCBwcm9jcmFzdGluYXRpb24sIGFuZAordGhleSBjb250aW51ZSB0byBiZSBpbiB0aGlzIHJlbGVhc2UuICBJZiB5b3UgaGF2ZSBiZWVuIHVzaW5nIHJlY2VudAordmVyc2lvbnMgb2YgZ2l0LCB5b3Ugd291bGQgaGF2ZSBzZWVuIHdhcm5pbmdzIGlzc3VlZCB3aGVuIHlvdSB1c2VkCitmZWF0dXJlcyB3aG9zZSBiZWhhdmlvdXIgd2lsbCBjaGFuZ2UsIHdpdGggYSBjbGVhciBpbnN0cnVjdGlvbiBvbiBob3cKK3RvIGtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW91ciBpZiB5b3Ugd2FudCB0by4gIFlvdSBob3BlZnVsbHkgYXJlCithbHJlYWR5IHdlbGwgcHJlcGFyZWQuCisKK09mIGNvdXJzZSwgd2UgaGF2ZSBhbHNvIGJlZW4gZ2l2aW5nICJ0aGlzIGFuZCB0aGF0IHdpbGwgY2hhbmdlIGluCisxLjcuMDsgcHJlcGFyZSB5b3Vyc2VsdmVzIiB3YXJuaW5ncyBpbiB0aGUgcmVsZWFzZSBub3RlcyBhbmQKK2Fubm91bmNlbWVudCBtZXNzYWdlcyBmb3IgdGhlIHBhc3QgZmV3IHJlbGVhc2VzLiAgTGV0J3Mgc2VlIGhvdyB3ZWxsCit1c2VycyB3aWxsIGZhcmUgdGhpcyB0aW1lLgorCisgKiAiZ2l0IHB1c2giIGludG8gYSBicmFuY2ggdGhhdCBpcyBjdXJyZW50bHkgY2hlY2tlZCBvdXQgKGkuZS4gcG9pbnRlZCBieQorICAgSEVBRCBpbiBhIHJlcG9zaXRvcnkgdGhhdCBpcyBub3QgYmFyZSkgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuCisKKyAgIFNpbWlsYXJseSwgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2ggJGtpbGxlZAorICAgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSAkdGhlcmUsIHdoZW4gJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQKKyAgIGJyYW5jaCBwb2ludGVkIGF0IGJ5IGl0cyBIRUFELCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4KKworICAgU2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBhbmQKKyAgIHJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgdG8gJ2lnbm9yZScgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5CisgICBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGVzZSBzYWZldHkgZmVhdHVyZXMuICBWZXJzaW9ucyBvZiBnaXQKKyAgIHNpbmNlIDEuNi4yIGhhdmUgaXNzdWVkIGEgbG91ZCB3YXJuaW5nIHdoZW4geW91IHRyaWVkIHRvIGRvIHRoZXNlCisgICBvcGVyYXRpb25zIHdpdGhvdXQgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiwgc28gcmVwb3NpdG9yaWVzIG9mCisgICBwZW9wbGUgd2hvIHN0aWxsIG5lZWQgdG8gYmUgYWJsZSB0byBwZXJmb3JtIHN1Y2ggYSBwdXNoIHNob3VsZAorICAgYWxyZWFkeSBoYXZlIGJlZW4gZnV0dXJlIHByb29mZWQuCisKKyAgIFBsZWFzZSByZWZlciB0bzoKKworICAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQorICAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzEwNzc1OC9mb2N1cz0xMDgwMDcKKworICAgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQorICAgdHJhbnNpdGlvbiBwcm9jZXNzIHRoYXQgYWxyZWFkeSB0b29rIHBsYWNlIHNvIGZhci4KKworICogImdpdCBzZW5kLWVtYWlsIiB3aWxsIG5vdCBtYWtlIGRlZXAgdGhyZWFkcyBieSBkZWZhdWx0IHdoZW4gc2VuZGluZyBhCisgICBwYXRjaCBzZXJpZXMgd2l0aCBtb3JlIHRoYW4gdHdvIG1lc3NhZ2VzLiAgQWxsIG1lc3NhZ2VzIHdpbGwgYmUgc2VudAorICAgYXMgYSByZXBseSB0byB0aGUgZmlyc3QgbWVzc2FnZSwgaS5lLiBjb3ZlciBsZXR0ZXIuICBHaXQgMS42LjYgKHRoaXMKKyAgIHJlbGVhc2UpIHdpbGwgaXNzdWUgYSB3YXJuaW5nIGFib3V0IHRoZSB1cGNvbWluZyBkZWZhdWx0IGNoYW5nZSwgd2hlbgorICAgaXQgdXNlcyB0aGUgdHJhZGl0aW9uYWwgImRlZXAgdGhyZWFkaW5nIiBiZWhhdmlvdXIgYXMgdGhlIGJ1aWx0LWluCisgICBkZWZhdWx0LiAgVG8gc3F1ZWxjaCB0aGUgd2FybmluZyBidXQgc3RpbGwgdXNlIHRoZSAiZGVlcCB0aHJlYWRpbmciCisgICBiZWhhdmlvdXIsIGdpdmUgLS1jaGFpbi1yZXBseS10byBvcHRpb24gb3Igc2V0IHNlbmRlbWFpbC5jaGFpbnJlcGx5dG8KKyAgIHRvIHRydWUuCisKKyAgIEl0IGhhcyBiZWVuIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBzZW5kLWVtYWlsIHRvIHNlbmQgInNoYWxsb3cgdGhyZWFkIgorICAgYnkgc2V0dGluZyBzZW5kZW1haWwuY2hhaW5yZXBseXRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZmFsc2UuCisgICBUaGUgb25seSB0aGluZyAxLjcuMCByZWxlYXNlIHdpbGwgZG8gaXMgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHdoZW4KKyAgIHlvdSBoYXZlbid0IGNvbmZpZ3VyZWQgdGhhdCB2YXJpYWJsZS4KKworICogImdpdCBzdGF0dXMiIHdpbGwgbm90IGJlICJnaXQgY29tbWl0IC0tZHJ5LXJ1biIuICBUaGlzIGNoYW5nZSBkb2VzIG5vdAorICAgYWZmZWN0IHlvdSBpZiB5b3UgcnVuIHRoZSBjb21tYW5kIHdpdGhvdXQgcGF0aHNwZWMuCisKKyAgIE5vYm9keSBzYW5lIGZvdW5kIHRoZSBjdXJyZW50IGJlaGF2aW91ciBvZiAiZ2l0IHN0YXR1cyBNYWtlZmlsZSIgdXNlZnVsCisgICBub3IgbWVhbmluZ2Z1bCwgYW5kIGl0IGNvbmZ1c2VkIHVzZXJzLiAgImdpdCBjb21taXQgLS1kcnktcnVuIiBoYXMgYmVlbgorICAgcHJvdmlkZWQgYXMgYSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IGJlaGF2aW91ciBvZiB0aGlzIGNvbW1hbmQgc2luY2UKKyAgIDEuNi41LgorCisgKiAiZ2l0IGRpZmYiIHRyYWRpdGlvbmFsbHkgdHJlYXRlZCB2YXJpb3VzICJpZ25vcmUgd2hpdGVzcGFjZSIgb3B0aW9ucworICAgb25seSBhcyBhIHdheSB0byBmaWx0ZXIgdGhlIHBhdGNoIG91dHB1dC4gICJnaXQgZGlmZiAtLWV4aXQtY29kZSAtYiIKKyAgIGV4aXRlZCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBldmVuIGlmIGFsbCBjaGFuZ2VzIHdlcmUgYWJvdXQgY2hhbmdpbmcgdGhlCisgICBhbW91bnQgb2Ygd2hpdGVzcGFjZSBhbmQgbm90aGluZyBlbHNlLiAgYW5kICJnaXQgZGlmZiAtYiIgc2hvd2VkIHRoZQorICAgImRpZmYgLS1naXQiIGhlYWRlciBsaW5lIGZvciBzdWNoIGEgY2hhbmdlIHdpdGhvdXQgcGF0Y2ggdGV4dC4KKworICAgSW4gMS43LjAsIHRoZSAiaWdub3JlIHdoaXRlc3BhY2VzIiB3aWxsIGFmZmVjdCB0aGUgc2VtYW50aWNzIG9mIHRoZQorICAgZGlmZiBvcGVyYXRpb24gaXRzZWxmLiAgQSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhZmZlY3QgYW55dGhpbmcgYnV0CisgICB3aGl0ZXNwYWNlcyB3aWxsIGJlIHJlcG9ydGVkIHdpdGggemVybyBleGl0IHN0YXR1cyB3aGVuIHJ1biB3aXRoCisgICAtLWV4aXQtY29kZSwgYW5kIHRoZXJlIHdpbGwgbm90IGJlICJkaWZmIC0tZ2l0IiBoZWFkZXIgZm9yIHN1Y2ggYQorICAgY2hhbmdlLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNi41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogdmFyaW91cyBnaXRrIHVwZGF0ZXMgaW5jbHVkaW5nIHVzZSBvZiB0aGVtZWQgd2lkZ2V0cyB1bmRlciBUayA4LjUsCisgICBKYXBhbmVzZSB0cmFuc2xhdGlvbiwgYSBmaXggdG8gYSBidWcgd2hlbiBydW5uaW5nICJndWkgYmxhbWUiIGZyb20KKyAgIGEgc3ViZGlyZWN0b3J5LCBldGMuCisKKyAqIHZhcmlvdXMgZ2l0LWd1aSB1cGRhdGVzIGluY2x1ZGluZyBuZXcgdHJhbnNsYXRpb25zLCB3bSBzdGF0ZXMgZml4ZXMsCisgICBUayBidWcgd29ya2Fyb3VuZCBhZnRlciBxdWl0dGluZywgaW1wcm92ZWQgaGV1cmlzdGljcyB0byB0cmlnZ2VyIGdjLAorICAgZXRjLgorCisgKiB2YXJpb3VzIGdpdC1zdm4gdXBkYXRlcy4KKworICogImdpdCBmZXRjaCIgb3ZlciBodHRwIGxlYXJuZWQgYSBuZXcgbW9kZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZQorICAgdHJhZGl0aW9uYWwgImR1bWIgY29tbWl0IHdhbGtlciIuCisKKyhwb3J0YWJpbGl0eSkKKworICogaW1hcC1zZW5kIGNhbiBiZSBidWlsdCBvbiBtaW5ndyBwb3J0LgorCisocGVyZm9ybWFuY2UpCisKKyAqICJnaXQgZGlmZiAtQiIgaGFzIHNtYWxsZXIgbWVtb3J5IGZvb3RwcmludC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiBUaGUgb2JqZWN0IHJlcGxhY2UgbWVjaGFuaXNtIGNhbiBiZSBieXBhc3NlZCB3aXRoIC0tbm8tcmVwbGFjZS1vYmplY3RzCisgICBnbG9iYWwgb3B0aW9uIGdpdmVuIHRvIHRoZSAiZ2l0IiBwcm9ncmFtLgorCisgKiBJbiBjb25maWd1cmF0aW9uIGZpbGVzLCBhIGZldyB2YXJpYWJsZXMgdGhhdCBuYW1lIHBhdGhzIGNhbiBiZWdpbiB3aXRoIH4vCisgICBhbmQgfnVzZXJuYW1lLyBhbmQgdGhleSBhcmUgZXhwYW5kZWQgYXMgZXhwZWN0ZWQuCisKKyAqICJnaXQgc3ViY21kIC1oIiBub3cgc2hvd3Mgc2hvcnQgdXNhZ2UgaGVscCBmb3IgbWFueSBtb3JlIHN1YmNvbW1hbmRzLgorCisgKiAiZ2l0IGJpc2VjdCByZXNldCIgY2FuIHJlc2V0IHRvIGFuIGFyYml0cmFyeSBjb21taXQuCisKKyAqICJnaXQgY2hlY2tvdXQgZnJvdHoiIHdoZW4gdGhlcmUgaXMgbm8gbG9jYWwgYnJhbmNoICJmcm90eiIgYnV0IHRoZXJlCisgICBpcyBvbmx5IG9uZSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoICJmcm90eiIgaXMgdGFrZW4gYXMgYSByZXF1ZXN0IHRvCisgICBzdGFydCB0aGUgbmFtZWQgYnJhbmNoIGF0IHRoZSBjb3JyZXNwb25kaW5nIHJlbW90ZSB0cmFja2luZyBicmFuY2guCisKKyAqICJnaXQgY29tbWl0IC1jLy1DLy0tYW1lbmQiIGNhbiBiZSB0b2xkIHdpdGggYSBuZXcgIi0tcmVzZXQtYXV0aG9yIiBvcHRpb24KKyAgIHRvIGlnbm9yZSBhdXRob3JzaGlwIGluZm9ybWF0aW9uIGluIHRoZSBjb21taXQgaXQgaXMgdGFraW5nIHRoZSBtZXNzYWdlCisgICBmcm9tLgorCisgKiAiZ2l0IGRlc2NyaWJlIiBjYW4gYmUgdG9sZCB0byBhZGQgIi1kaXJ0eSIgc3VmZml4IHdpdGggIi0tZGlydHkiIG9wdGlvbi4KKworICogImdpdCBkaWZmIiBsZWFybmVkIC0tc3VibW9kdWxlIG9wdGlvbiB0byBzaG93IGEgbGlzdCBvZiBvbmUtbGluZSBsb2dzCisgICBpbnN0ZWFkIG9mIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGNvbW1pdCBvYmplY3QgbmFtZXMuCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCB0byBob25vciBkaWZmLmNvbG9yLmZ1bmMgY29uZmlndXJhdGlvbiB0byBwYWludAorICAgZnVuY3Rpb24gbmFtZSBoaW50IHByaW50ZWQgb24gdGhlIGh1bmsgaGVhZGVyICJAQCAtaixrICtsLG0gQEAiIGxpbmUKKyAgIGluIHRoZSBzcGVjaWZpZWQgY29sb3IuCisKKyAqICJnaXQgZmV0Y2giIGxlYXJuZWQgLS1hbGwgYW5kIC0tbXVsdGlwbGUgb3B0aW9ucywgdG8gcnVuIGZldGNoIGZyb20KKyAgIG1hbnkgcmVwb3NpdG9yaWVzLCBhbmQgLS1wcnVuZSBvcHRpb24gdG8gcmVtb3ZlIHJlbW90ZSB0cmFja2luZworICAgYnJhbmNoZXMgdGhhdCB3ZW50IHN0YWxlLiAgVGhlc2UgbWFrZSAiZ2l0IHJlbW90ZSB1cGRhdGUiIGFuZCAiZ2l0CisgICByZW1vdGUgcHJ1bmUiIGxlc3MgbmVjZXNzYXJ5ICh0aGVyZSBpcyBubyBwbGFuIHRvIHJlbW92ZSAicmVtb3RlCisgICB1cGRhdGUiIG5vciAicmVtb3RlIHBydW5lIiwgdGhvdWdoKS4KKworICogImdpdCBmc2NrIiBieSBkZWZhdWx0IGNoZWNrcyB0aGUgcGFja2ZpbGVzIChpLmUuICItLWZ1bGwiIGlzIHRoZQorICAgZGVmYXVsdCk7IHlvdSBjYW4gdHVybiBpdCBvZmYgd2l0aCAiZ2l0IGZzY2sgLS1uby1mdWxsIi4KKworICogImdpdCBncmVwIiBjYW4gdXNlIC1GIChmaXhlZCBzdHJpbmdzKSBhbmQgLWkgKGlnbm9yZSBjYXNlKSB0b2dldGhlci4KKworICogaW1wb3J0LXRhcnMgY29udHJpYnV0ZWQgZmFzdC1pbXBvcnQgZnJvbnRlbmQgbGVhcm5lZCBtb3JlIHR5cGVzIG9mCisgICBjb21wcmVzc2VkIHRhcmJhbGxzLgorCisgKiAiZ2l0IGluc3Rhd2ViIiBrbm93cyBob3cgdG8gdGFsayB3aXRoIG1vZF9jZ2lkIHRvIGFwYWNoZTIuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIHNob3dzIHRoZSBsb2NhdGlvbiBvZiBIRUFEIGFzIHdlbGwuCisKKyAqICJnaXQgbG9nIiBhbmQgImdpdCByZXYtbGlzdCIgbGVhcm5lZCB0byB0YWtlIHJldnMgYW5kIHBhdGhzcGVjcyBmcm9tCisgICB0aGUgc3RhbmRhcmQgaW5wdXQgd2l0aCB0aGUgbmV3ICItLXN0ZGluIiBvcHRpb24uCisKKyAqICItLXByZXR0eT1mb3JtYXQiIG9wdGlvbiB0byAibG9nIiBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZDoKKworICAgLiB0byB3cmFwIHRleHQgd2l0aCB0aGUgIiV3KCkiIHNwZWNpZmllci4KKyAgIC4gdG8gc2hvdyByZWZsb2cgaW5mb3JtYXRpb24gd2l0aCAiJWdbc2REXSIgc3BlY2lmaWVyLgorCisgKiAiZ2l0IG5vdGVzIiBjb21tYW5kIHRvIGFubm90YXRlIGV4aXN0aW5nIGNvbW1pdHMuCisKKyAqICJnaXQgbWVyZ2UiIChhbmQgImdpdCBwdWxsIikgbGVhcm5lZCAtLWZmLW9ubHkgb3B0aW9uIHRvIG1ha2UgaXQgZmFpbAorICAgaWYgdGhlIG1lcmdlIGRvZXMgbm90IHJlc3VsdCBpbiBhIGZhc3QtZm9yd2FyZC4KKworICogImdpdCBtZXJnZXRvb2wiIGxlYXJuZWQgdG8gdXNlIHA0bWVyZ2UuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkICJyZXdvcmQiIHRoYXQgYWN0cyBsaWtlICJlZGl0IiBidXQgaW1tZWRpYXRlbHkKKyAgIHN0YXJ0cyBhbiBlZGl0b3IgdG8gdHdlYWsgdGhlIGxvZyBtZXNzYWdlIHdpdGhvdXQgcmV0dXJuaW5nIGNvbnRyb2wgdG8KKyAgIHRoZSBzaGVsbCwgd2hpY2ggaXMgZG9uZSBieSAiZWRpdCIgdG8gZ2l2ZSBhbiBvcHBvcnR1bml0eSB0byB0d2VhayB0aGUKKyAgIGNvbnRlbnRzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGNhbiBiZSB0b2xkIHdpdGggIi0tZW52ZWxvcGUtc2VuZGVyPWF1dG8iIHRvIHVzZSB0aGUKKyAgIHNhbWUgYWRkcmVzcyBhcyAiRnJvbToiIGFkZHJlc3MgYXMgdGhlIGVudmVsb3BlIHNlbmRlciBhZGRyZXNzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHdpbGwgaXNzdWUgYSB3YXJuaW5nIHdoZW4gaXQgZGVmYXVsdHMgdG8gdGhlCisgICAtLWNoYWluLXJlcGx5LXRvIGJlaGF2aW91ciB3aXRob3V0IGJlaW5nIHRvbGQgYnkgdGhlIHVzZXIgYW5kCisgICBpbnN0cnVjdHMgdG8gcHJlcGFyZSBmb3IgdGhlIGNoYW5nZSBvZiB0aGUgZGVmYXVsdCBpbiAxLjcuMCByZWxlYXNlLgorCisgKiBJbiAiZ2l0IHN1Ym1vZHVsZSBhZGQgPHJlcG9zaXRvcnk+IDxwYXRoPiIsIDxwYXRoPiBpcyBub3cgb3B0aW9uYWwgYW5kCisgICBpbmZlcnJlZCBmcm9tIDxyZXBvc2l0b3J5PiB0aGUgc2FtZSB3YXkgImdpdCBjbG9uZSA8cmVwb3NpdG9yeT4iIGRvZXMuCisKKyAqICJnaXQgc3ZuIiBsZWFybmVkIHRvIHJlYWQgU1ZOIDEuNSsgYW5kIFNWSyBtZXJnZSB0aWNrZXRzLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCB0byByZWNyZWF0ZSBlbXB0eSBkaXJlY3RvcmllcyB0cmFja2VkIG9ubHkgYnkgU1ZOLgorCisgKiAiZ2l0d2ViIiBjYW4gb3B0aW9uYWxseSByZW5kZXIgaXRzICJibGFtZSIgb3V0cHV0IGluY3JlbWVudGFsbHkgKHRoaXMKKyAgIHJlcXVpcmVzIEphdmFTY3JpcHQgb24gdGhlIGNsaWVudCBzaWRlKS4KKworICogQXV0aG9yIG5hbWVzIHNob3duIGluIGdpdHdlYiBvdXRwdXQgYXJlIGxpbmtzIHRvIHNlYXJjaCBjb21taXRzIGJ5IHRoZQorICAgYXV0aG9yLgorCitGaXhlcyBzaW5jZSB2MS42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuNS5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZjViY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjEudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0dpdCB2MS43LjAuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBJbiBhIGZyZXNobHkgY3JlYXRlZCByZXBvc2l0b3J5ICJyZXYtcGFyc2UgSEVBRF4wIiBjb21wbGFpbmVkIHRoYXQKKyAgIGl0IGlzIGRhbmdsaW5nIHN5bXJlZiwgZXZlbiB0aG91Z2ggInJldi1wYXJzZSBIRUFEIiBkaWRuJ3QuCisKKyAqICJnaXQgc2hvdyA6bm8tc3VjaC1uYW1lIiB0cmllZCB0byBhY2Nlc3MgdGhlIGluZGV4IHdpdGhvdXQgYm91bmRzCisgICBjaGVjaywgbGVhZGluZyB0byBhIHBvdGVudGlhbCBzZWdmYXVsdC4KKworICogTWVzc2FnZSBmcm9tICJnaXQgY2hlcnJ5LXBpY2siIHdhcyBoYXJkZXIgdG8gcmVhZCBhbmQgdXNlIHRoYW4gbmVjZXNzYXJ5CisgICB3aGVuIGl0IHN0b3BwZWQgZHVlIHRvIGNvbmZsaWN0aW5nIGNoYW5nZXMuCisKKyAqIFdlIHJlZmVycmVkIHRvICIuZ2l0L3JlZnMvIiB0aHJvdWdob3V0IHRoZSBkb2N1bWVudGF0aW9uIHdoZW4gd2UKKyAgIG1lYW50IHRvIHRhbGsgYWJvdXQgYWJzdHJhY3Qgbm90aW9uIG9mICJyZWYgbmFtZXNwYWNlIi4gIEJlY2F1c2UKKyAgIHBlb3BsZSdzIHJlcG9zaXRvcmllcyBvZnRlbiBoYXZlIHBhY2tlZCByZWZzIHRoZXNlIGRheXMsIHRoaXMgd2FzCisgICBjb25mdXNpbmcuCisKKyAqICJnaXQgZGlmZiAtLW91dHB1dD0vcGF0aC90aGF0L2Nhbm5vdC9iZS93cml0dGVuIiBkaWQgbm90IGNvcnJlY3RseQorICAgZXJyb3Igb3V0LgorCisgKiAiZ2l0IGdyZXAgLWUgLXBhdHRlcm4tdGhhdC1iZWdpbi13aXRoLWRhc2ggcGF0aHMuLi4iIGNvdWxkIG5vdCBiZQorICAgc3BlbGxlZCBhcyAiZ2l0IGdyZXAgLS0gLXBhdHRlcm4tdGhhdC1iZWdpbi13aXRoLWRhc2ggcGF0aHMuLi4iIHdoaWNoCisgICB3b3VsZCBiZSBhIEdOVSB3YXkgdG8gdXNlICItLSIgYXMgImVuZCBvZiBvcHRpb25zIi4KKworICogImdpdCBncmVwIiBjb21waWxlZCB3aXRoIHRocmVhZGluZyBzdXBwb3J0IHRyaWVkIHRvIGFjY2VzcyBhbgorICAgdW5pbml0aWFsaXplZCBtdXRleCBvbiBib3hlcyB3aXRoIGEgc2luZ2xlIENQVS4KKworICogImdpdCBzdGFzaCBwb3AgLXEgLS1pbmRleCIgZmFpbGVkIGJlY2F1c2UgdGhlIHVubmVjZXNzYXJ5IC0taW5kZXgKKyAgIG9wdGlvbiB3YXMgcHJvcGFnYXRlZCB0byAiZ2l0IHN0YXNoIGRyb3AiIHRoYXQgaXMgaW50ZXJuYWxseSBydW4gYXQgdGhlCisgICBlbmQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiNDZjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMi50eHQKQEAgLTAsMCArMSw0MCBAQAorR2l0IHYxLjcuMC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBHSVRfUEFHRVIgd2FzIG5vdCBob25vcmVkIGNvbnNpc3RlbnRseSBieSBzb21lIHNjcmlwdGVkIFBvcmNlbGFpbnMsIG1vc3QKKyAgIG5vdGFibHkgImdpdCBhbSIuCisKKyAqIHVwZGF0aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyBhZnRlciB0ZWxsaW5nIGdpdCB0byBhZGQgdGhlbSB0byB0aGUKKyAgIGluZGV4IGFuZCB3aGlsZSBpdCBpcyBzdGlsbCB3b3JraW5nIGNyZWF0ZWQgZ2FyYmFnZSBvYmplY3QgZmlsZXMgaW4KKyAgIHRoZSByZXBvc2l0b3J5IHdpdGhvdXQgZGlhZ25vc2luZyBpdCBhcyBhbiBlcnJvci4KKworICogImdpdCBiaXNlY3QgLS0gcGF0aHNwZWMuLi4iIGRpZCBub3QgZGlhZ25vc2UgYW4gZXJyb3IgY29uZGl0aW9uIHByb3Blcmx5IHdoZW4KKyAgIHRoZSBzaW1wbGlmaWNhdGlvbiB3aXRoIGdpdmVuIHBhdGhzcGVjIG1hZGUgdGhlIGhpc3RvcnkgZW1wdHkuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1jaGVycnktcGljayBBLi4uQiIgbm93IGhhcyBhbiBvYnZpb3VzIG9wdGltaXphdGlvbiB3aGVuIHRoZQorICAgaGlzdG9yaWVzIGhhdmVuJ3QgZGl2ZXJnZWQgKGkuZS4gd2hlbiBvbmUgZW5kIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBvdGhlcikuCisKKyAqICJnaXQgZGlmZiAtLXF1aWV0IC13IiBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIGRpZG4ndCB3b3JrIHdpdGggYSBsYXJnZSBpbnB1dCwgYXMgaXQgbGFja2VkIHN1cHBvcnQKKyAgIGZvciBwcm9kdWNpbmcgdGhlIHBhY2sgaW5kZXggaW4gdjIgZm9ybWF0LgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZGlkbid0IHVzZSBDUkxGIGxpbmUgZW5kaW5ncyBvdmVyIHRoZSBpbWFwIHByb3RvY29sCisgICB3aGVuIHN0b3JpbmcgaXRzIHBheWxvYWQgdG8gdGhlIGRyYWZ0IGJveCwgdmlvbGF0aW5nIFJGQyAzNTAxLgorCisgKiAiZ2l0IGxvZyAtLWZvcm1hdD0nJXcoeCx5LHopJWInIiBhbmQgZnJpZW5kcyB0aGF0IHJld3JhcCBtZXNzYWdlCisgICBoYXMgYmVlbiBvcHRpbWl6ZWQgZm9yIHV0Zi04IHBheWxvYWQuCisKKyAqIEVycm9yIG1lc3NhZ2VzIGdlbmVyYXRlZCBvbiB0aGUgcmVjZWl2aW5nIGVuZCBkaWQgbm90IGNvbWUgYmFjayB0byAiZ2l0CisgICBwdXNoIi4KKworICogImdpdCBzdGF0dXMiIGluIDEuNy4wIGxhY2tlZCB0aGUgb3B0aW1pemF0aW9uIHdlIHVzZWQgdG8gaGF2ZSBpbiAxLjYuWCBzZXJpZXMKKyAgIHRvIHNwZWVkIHVwIHNjYW5uaW5nIG9mIGxhcmdlIHdvcmtpbmcgdHJlZS4KKworICogImdpdHdlYiIgZGlkIG5vdCBkaWFnbm9zZSBwYXJzaW5nIGVycm9ycyBwcm9wZXJseSB3aGlsZSByZWFkaW5nIHRpcyBjb25maWd1cmF0aW9uCisgICBmaWxlLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzU1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjMudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCB2MS43LjAuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogT2JqZWN0IGZpbGVzIGFyZSBjcmVhdGVkIGluIGEgbW9yZSBBQ0wgZnJpZW5kbHkgd2F5IGluIHJlcG9zaXRvcmllcworICAgd2hlcmUgZ3JvdXAgcGVybWlzc2lvbiBpcyBBQ0wgY29udHJvbGxlZC4KKworICogImdpdCBhZGQgLWkiIGRpZG4ndCBoYW5kbGUgYSBkZWxldGVkIHBhdGggdmVyeSB3ZWxsLgorCisgKiAiZ2l0IGJsYW1lIiBwYWRkZWQgbGluZSBudW1iZXJzIHdpdGggb25lIGV4dHJhIFNQIHdoZW4gdGhlIHRvdGFsIG51bWJlcgorICAgb2YgbGluZXMgd2FzIG9uZSBsZXNzIHRoYW4gbXVsdGlwbGUgb2YgdGVuIGR1ZSB0byBhbiBvZmYtYnktb25lIGVycm9yLgorCisgKiAiZ2l0IGZldGNoIC0tYWxsLy0tbXVsdGkiIHVzZWQgdG8gZGlzY2FyZCBpbmZvcm1hdGlvbiBmb3IgcmVtb3RlcyB0aGF0CisgICBhcmUgZmV0Y2hlZCBlYXJsaWVyLgorCisgKiAiZ2l0IGxvZyAtLWF1dGhvcj1tZSAtLWdyZXA9aXQiIHRyaWVkIHRvIGZpbmQgY29tbWl0cyB0aGF0IGhhdmUgIml0IgorICAgb3IgYXJlIHdyaXR0ZW4gYnkgIm1lIiwgaW5zdGVhZCBvZiB0aGUgb25lcyB0aGF0IGhhdmUgIml0IiBfYW5kXyBhcmUKKyAgIHdyaXR0ZW4gYnkgIm1lIi4KKworICogImdpdCBsb2cgLWcgYnJhbmNoIiBtaXNiZWhhdmVkIHdoZW4gdGhlcmUgd2FzIG5vIGVudHJpZXMgaW4gdGhlIHJlZmxvZworICAgZm9yIHRoZSBuYW1lZCBicmFuY2guCisKKyAqICJnaXQgbWFpbGluZm8iIChoZW5jZSAiZ2l0IGFtIikgaW5jb3JyZWN0bHkgcmVtb3ZlZCBpbml0aWFsIGluZGVudCBmcm9tCisgICBwYXJhZ3JhcGhzLgorCisgKiAiZ2l0IHBydW5lIiBhbmQgImdpdCByZWZsb2ciIChoZW5jZSAiZ2l0IGdjIiBhcyB3ZWxsKSBkaWRuJ3QgaG9ub3IKKyAgIGFuIGluc3RydWN0aW9uIG5ldmVyIHRvIGV4cGlyZSBieSBzZXR0aW5nIGdjLnJlZmxvZ2V4cGlyZSB0byBuZXZlci4KKworICogImdpdCBwdXNoIiBtaXNiZWhhdmVkIHdoZW4gYnJhbmNoLjxuYW1lPi5tZXJnZSB3YXMgY29uZmlndXJlZCB3aXRob3V0CisgICBtYXRjaGluZyBicmFuY2guPG5hbWU+LnJlbW90ZS4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjdmNjBlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC40LnR4dApAQCAtMCwwICsxLDI3IEBACitHaXQgdjEuNy4wLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE9wdGltaXplZCBudG9obC9odG9ubCBvbiBiaWctZW5kaWFuIG1hY2hpbmVzIHdlcmUgYnJva2VuLgorCisgKiBDb2xvciB2YWx1ZXMgZ2l2ZW4gdG8gImNvbG9yLjxjbWQ+LjxzbG90PiIgY29uZmlndXJhdGlvbiBjYW4gbm93IGhhdmUKKyAgIG1vcmUgdGhhbiBvbmUgYXR0cmlidXRlcyAoZS5nLiAiYm9sZCB1bCIpLgorCisgKiAiZ2l0IGFkZCAtdSBub25leGlzdGVudC1wYXRoIiBkaWQgbm90IGNvbXBsYWluLgorCisgKiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXgiIGRpZG4ndCB3b3JrIHdlbGwgd2hlbiBhbiBlYXJseSBwYXRjaCBpbgorICAgYSBwYXRjaCBzZXJpZXMgYWRkcyB0cmFpbGluZyBibGFuayBsaW5lcyBhbmQgYSBsYXRlciBvbmUgZGVwZW5kZWQgb24KKyAgIHN1Y2ggYSBibG9jayBvZiBibGFuayBsaW5lcyBhdCB0aGUgZW5kLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBkaWRuJ3QgY2hlY2sgZXJyb3Igc3RhdHVzIGFuZCBzdG9wIHdoZW4gbWFya3MgZmlsZQorICAgY2Fubm90IGJlIG9wZW5lZC4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0iIGdhdmUgdW53YXJyYW50ZWQgZXJyb3JzCisgICB3aGVuIHRoZSByYW5nZSB3YXMgZW1wdHksIGluc3RlYWQgb2Ygc2lsZW50bHkgZmluaXNoaW5nLgorCisgKiAiZ2l0IHJlbW90ZSBwcnVuZSIgZGlkIG5vdCBkZXRlY3QgcmVtb3RlIHRyYWNraW5nIHJlZnMgdGhhdCBiZWNhbWUKKyAgIGRhbmdsaW5nIGNvcnJlY3RseS4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTQ5YzkxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC41LnR4dApAQCAtMCwwICsxLDI2IEBACitHaXQgdjEuNy4wLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZGFlbW9uIiBmYWlsZWQgdG8gY29tcGlsZSBvbiBwbGF0Zm9ybXMgd2l0aG91dCBzb2NrYWRkcl9zdG9yYWdlIHR5cGUuCisKKyAqIE91dHB1dCBmcm9tICJnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSIgd2FzIHVucGFyc2FibGUgd2hlbiBhCisgICBjb21taXQgZGlkIG5vdCBoYXZlIGFueSBtZXNzYWdlLCB3aGljaCBpcyBhYm5vcm1hbCBidXQgcG9zc2libGUgaW4gYQorICAgcmVwb3NpdG9yeSBjb252ZXJ0ZWQgZnJvbSBmb3JlaWduIHNjbS4KKworICogImdpdCBzdGFzaCBzaG93IDxjb21taXQtdGhhdC1pcy1ub3QtYS1zdGFzaD4iIGdhdmUgYW4gZXJyb3IgbWVzc2FnZQorICAgdGhhdCB3YXMgbm90IHNvIHVzZWZ1bC4gIFJld29yZGVkIHRoZSBtZXNzYWdlIHRvICI8aXQ+IGlzIG5vdCBhCisgICBzdGFzaCIuCisKKyAqIFB5dGhvbiBzY3JpcHRzIGluIGNvbnRyaWIvIGFyZWEgbm93IHN0YXJ0IHdpdGggIiMhL3Vzci9iaW4vZW52IHB5dGhvbiIKKyAgIHRvIGhvbm9yIHVzZXIncyBQQVRILgorCisgKiAiZ2l0IGltYXAtc2VuZCIgdXNlZCB0byBtaXN0YWtlIGFueSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggIkZyb20gIiBhcyBhCisgICBtZXNzYWdlIHNlcGFyYXRvciBpbiBmb3JtYXQtcGF0Y2ggb3V0cHV0LgorCisgKiBTbWFydCBodHRwIHNlcnZlciBiYWNrZW5kIGZhaWxlZCB0byByZXBvcnQgYW4gaW50ZXJuYWwgc2VydmVyIGVycm9yIGFuZAorICAgaW5maW5pdGVseSBsb29wZWQgaW5zdGVhZCBhZnRlciBvdXRwdXQgcGlwZSB3YXMgY2xvc2VkLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODUyYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjYudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0dpdCB2MS43LjAuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBkaWZmIC0tc3RhdCIgdXNlZCAiaW50IiB0byBjb3VudCB0aGUgc2l6ZSBvZiBkaWZmZXJlbmNlcywKKyAgIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBvdmVyZmxvd2luZy4KKworICogImdpdCByZXYtbGlzdCAtLWFiYnJldi1jb21taXQiIGRlZmF1bHRlZCB0byA0MC1ieXRlIGFiYnJldmlhdGlvbnMsIHVubGlrZQorICAgbmV3ZXIgdG9vbHMgaW4gdGhlIGdpdCB0b29sc2V0LgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2I3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjcudHh0CkBAIC0wLDAgKzEsMTYgQEAKK0dpdCB2MS43LjAuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogIm1ha2UgTk9fQ1VSTD1Ob1RoYW5rcyBpbnN0YWxsIiB3YXMgYnJva2VuLgorCisgKiBBbiBvdmVybG9uZyBsaW5lIGFmdGVyICIuZ2l0ZGlyOiAiIGluIGEgZ2l0IGZpbGUgY2F1c2VkIG91dCBvZiBib3VuZHMKKyAgIGFjY2VzcyB0byBhbiBhcnJheSBvbiB0aGUgc3RhY2suCisKKyAqICJnaXQgY29uZmlnIC0tcGF0aCBjb25mLnZhciIgdG8gYXR0ZW1wdCB0byBleHBhbmQgYSB2YXJpYWJsZSBjb25mLnZhcgorICAgdGhhdCB1c2VzICJ+LyIgc2hvcnQtaGFuZCBzZWdmYXVsdGVkIHdoZW4gJEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIHdhcyBub3Qgc2V0LgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuOC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMDViNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjgudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dpdCB2MS43LjAuOCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHByaW1hcmlseSB0byBiYWNrcG9ydCBzdXBwb3J0IGZvciB0aGUgbmV3ICJhZGQuaWdub3JlRXJyb3JzIgorbmFtZSBnaXZlbiB0byB0aGUgZXhpc3RpbmcgImFkZC5pZ25vcmUtZXJyb3JzIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCitUaGUgbmV4dCB2ZXJzaW9uLCBHaXQgMS43LjQsIGFuZCBmdXR1cmUgdmVyc2lvbnMsIHdpbGwgc3VwcG9ydCBib3RoCitvbGQgYW5kIGluY29ycmVjdCBuYW1lIGFuZCB0aGUgbmV3IGNvcnJlY3RlZCBuYW1lLCBidXQgd2l0aG91dCB0aGlzCitiYWNrcG9ydCwgdXNlcnMgd2hvIHdhbnQgdG8gdXNlIHRoZSBuZXcgbmFtZSAiYWRkLmlnbm9yZUVycm9ycyIgaW4KK3RoZWlyIHJlcG9zaXRvcmllcyBjYW5ub3QgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuOS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYjMxNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjkudHh0CkBAIC0wLDAgKzEsOCBAQAorR2l0IHYxLjcuMC45IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC44CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0d2ViIiBjYW4gc29tZXRpbWVzIGJlIHRyaWNrZWQgaW50byBwYXJyb3R0aW5nIGEgZmlsZW5hbWUgYXJndW1lbnQKKyAgIGdpdmVuIGluIGEgcmVxdWVzdCB3aXRob3V0IHByb3Blcmx5IHF1b3RpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYjhjMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLnR4dApAQCAtMCwwICsxLDIxNCBAQAorR2l0IHYxLjcuMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworTm90ZXMgb24gYmVoYXZpb3VyIGNoYW5nZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHB1c2giIGludG8gYSBicmFuY2ggdGhhdCBpcyBjdXJyZW50bHkgY2hlY2tlZCBvdXQgKGkuZS4gcG9pbnRlZCBhdCBieQorICAgSEVBRCBpbiBhIHJlcG9zaXRvcnkgdGhhdCBpcyBub3QgYmFyZSkgaXMgcmVmdXNlZCBieSBkZWZhdWx0LgorCisgICBTaW1pbGFybHksICJnaXQgcHVzaCAkdGhlcmUgOiRraWxsZWQiIHRvIGRlbGV0ZSB0aGUgYnJhbmNoICRraWxsZWQKKyAgIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkgJHRoZXJlLCB3aGVuICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50CisgICBicmFuY2ggcG9pbnRlZCBhdCBieSBpdHMgSEVBRCwgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuCisKKyAgIFNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggYW5kCisgICByZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50IHRvICdpZ25vcmUnIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeQorICAgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlc2Ugc2FmZXR5IGZlYXR1cmVzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRvZXMgbm90IG1ha2UgZGVlcCB0aHJlYWRzIGJ5IGRlZmF1bHQgd2hlbiBzZW5kaW5nIGEKKyAgIHBhdGNoIHNlcmllcyB3aXRoIG1vcmUgdGhhbiB0d28gbWVzc2FnZXMuICBBbGwgbWVzc2FnZXMgd2lsbCBiZSBzZW50CisgICBhcyBhIHJlcGx5IHRvIHRoZSBmaXJzdCBtZXNzYWdlLCBpLmUuIGNvdmVyIGxldHRlci4KKworICAgSXQgaGFzIGJlZW4gcG9zc2libGUgYWxyZWFkeSB0byBjb25maWd1cmUgc2VuZC1lbWFpbCB0byBzZW5kICJzaGFsbG93IHRocmVhZCIKKyAgIGJ5IHNldHRpbmcgc2VuZGVtYWlsLmNoYWlucmVwbHl0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGZhbHNlLiAgVGhlCisgICBvbmx5IHRoaW5nIHRoaXMgcmVsZWFzZSBkb2VzIGlzIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB3aGVuIHlvdSBoYXZlbid0CisgICBjb25maWd1cmVkIHRoYXQgdmFyaWFibGUuCisKKyAqICJnaXQgc3RhdHVzIiBpcyBub3QgImdpdCBjb21taXQgLS1kcnktcnVuIiBhbnltb3JlLiAgVGhpcyBjaGFuZ2UgZG9lcworICAgbm90IGFmZmVjdCB5b3UgaWYgeW91IHJ1biB0aGUgY29tbWFuZCB3aXRob3V0IGFyZ3VtZW50LgorCisgKiAiZ2l0IGRpZmYiIHRyYWRpdGlvbmFsbHkgdHJlYXRlZCB2YXJpb3VzICJpZ25vcmUgd2hpdGVzcGFjZSIgb3B0aW9ucworICAgb25seSBhcyBhIHdheSB0byBmaWx0ZXIgdGhlIHBhdGNoIG91dHB1dC4gICJnaXQgZGlmZiAtLWV4aXQtY29kZSAtYiIKKyAgIGV4aXRlZCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBldmVuIGlmIGFsbCBjaGFuZ2VzIHdlcmUgYWJvdXQgY2hhbmdpbmcgdGhlCisgICBhbW91bnQgb2Ygd2hpdGVzcGFjZSBhbmQgbm90aGluZyBlbHNlOyAgYW5kICJnaXQgZGlmZiAtYiIgc2hvd2VkIHRoZQorICAgImRpZmYgLS1naXQiIGhlYWRlciBsaW5lIGZvciBzdWNoIGEgY2hhbmdlIHdpdGhvdXQgcGF0Y2ggdGV4dC4KKworICAgSW4gdGhpcyByZWxlYXNlLCB0aGUgImlnbm9yZSB3aGl0ZXNwYWNlcyIgb3B0aW9ucyBhZmZlY3QgdGhlIHNlbWFudGljcworICAgb2YgdGhlIGRpZmYgb3BlcmF0aW9uLiAgQSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBhZmZlY3QgYW55dGhpbmcgYnV0CisgICB3aGl0ZXNwYWNlcyBpcyByZXBvcnRlZCB3aXRoIHplcm8gZXhpdCBzdGF0dXMgd2hlbiBydW4gd2l0aAorICAgLS1leGl0LWNvZGUsIGFuZCB0aGVyZSBpcyBubyAiZGlmZiAtLWdpdCIgaGVhZGVyIGZvciBzdWNoIGEgY2hhbmdlLgorCisgKiBFeHRlcm5hbCBkaWZmIGFuZCB0ZXh0Y29udiBoZWxwZXJzIGFyZSBub3cgZXhlY3V0ZWQgdXNpbmcgdGhlIHNoZWxsLgorICAgVGhpcyBtYWtlcyB0aGVtIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBwcm9ncmFtcyBleGVjdXRlZCBieSBnaXQsIGFuZAorICAgYWxsb3dzIHlvdSB0byBwYXNzIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzIHRvIHRoZSBoZWxwZXJzLiBBbnkgaGVscGVyCisgICBwYXRocyBjb250YWluaW5nIHNwYWNlcyBvciBvdGhlciBtZXRhY2hhcmFjdGVycyBub3cgbmVlZCB0byBiZQorICAgc2hlbGwtcXVvdGVkLiAgVGhlIGFmZmVjdGVkIGhlbHBlcnMgYXJlIEdJVF9FWFRFUk5BTF9ESUZGIGluIHRoZQorICAgZW52aXJvbm1lbnQsIGFuZCBkaWZmLiouY29tbWFuZCBhbmQgZGlmZi4qLnRleHRjb252IGluIHRoZSBjb25maWcKKyAgIGZpbGUuCisKKyAqIFRoZSAtLW1heC1wYWNrLXNpemUgYXJndW1lbnQgdG8gJ2dpdCByZXBhY2snLCAnZ2l0IHBhY2stb2JqZWN0cycsIGFuZAorICAgJ2dpdCBmYXN0LWltcG9ydCcgd2FzIGFzc3VtaW5nIHRoZSBwcm92aWRlZCBzaXplIHRvIGJlIGV4cHJlc3NlZCBpbiBNaUIsCisgICB1bmxpa2UgdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlnIHZhcmlhYmxlIGFuZCBvdGhlciBzaW1pbGFyIG9wdGlvbnMgYWNjZXB0aW5nCisgICBhIHNpemUgdmFsdWUuICBJdCBpcyBub3cgZXhwZWN0aW5nIGEgc2l6ZSBleHByZXNzZWQgaW4gYnl0ZXMsIHdpdGggYSBwb3NzaWJsZQorICAgdW5pdCBzdWZmaXggb2YgJ2snLCAnbScsIG9yICdnJy4KKworVXBkYXRlcyBzaW5jZSB2MS42LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiB1cGRhdGVzOyBhZGRzICJvcHRpb24iIGFuZCAiZmVhdHVyZSIgdG8gZGV0ZWN0IHRoZQorICAgbWlzbWF0Y2ggYmV0d2VlbiBmYXN0LWltcG9ydCBhbmQgdGhlIGZyb250ZW5kcyB0aGF0IHByb2R1Y2UgdGhlIGlucHV0CisgICBzdHJlYW0uCisKKyAqICJnaXQgc3ZuIiBzdXBwb3J0IG9mIHN1YnZlcnNpb24gIm1lcmdlIHRpY2tldHMiIGFuZCBtaXNjZWxsYW5lb3VzIGZpeGVzLgorCisgKiAiZ2l0ayIgYW5kICJnaXQgZ3VpIiB0cmFuc2xhdGlvbiB1cGRhdGVzLgorCisgKiAiZ2l0d2ViIiB1cGRhdGVzIChjb2RlIGNsZWFuLXVwLCBsb2FkIGNoZWNraW5nIGV0Yy4pCisKKyhwb3J0YWJpbGl0eSkKKworICogU29tZSBtb3JlIE1TVkMgcG9ydGFiaWxpdHkgcGF0Y2hlcyBmb3IgbXN5c2dpdCBwb3J0LgorCisgKiBNaW5pbXVtIFB0aHJlYWRzIGVtdWxhdGlvbiBmb3IgbXN5c2dpdCBwb3J0LgorCisocGVyZm9ybWFuY2UpCisKKyAqIE1vcmUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgcGF0Y2hlcyBmb3IgbXN5c2dpdCBwb3J0LgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyAqIE1vcmUgY29tbWFuZHMgbGVhcm5lZCAiLS1xdWlldCIgYW5kICItLVtuby1dcHJvZ3Jlc3MiIG9wdGlvbnMuCisKKyAqIFZhcmlvdXMgY29tbWFuZHMgZ2l2ZW4gYnkgdGhlIGVuZCB1c2VyIChlLmcuIGRpZmYudHlwZS50ZXh0Y29udiwKKyAgIGFuZCBHSVRfRURJVE9SKSBjYW4gYmUgc3BlY2lmaWVkIHdpdGggY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gIEUuZy4gaXQKKyAgIGlzIG5vdyBwb3NzaWJsZSB0byBzYXkgIltkaWZmICJ1dGY4ZG9jIl0gdGV4dGNvbnYgPSBua2YgLXciLgorCisgKiAic3BhcnNlIGNoZWNrb3V0IiBmZWF0dXJlIGFsbG93cyBvbmx5IHBhcnQgb2YgdGhlIHdvcmsgdHJlZSB0byBiZQorICAgY2hlY2tlZCBvdXQuCisKKyAqIEhUVFAgdHJhbnNmZXIgY2FuIHVzZSBhdXRoZW50aWNhdGlvbiBzY2hlbWUgb3RoZXIgdGhhbiBiYXNpYworICAgKGkuZS4vZS5nLiBkaWdlc3QpLgorCisgKiBTd2l0Y2hpbmcgZnJvbSBhIHZlcnNpb24gb2Ygc3VwZXJwcm9qZWN0IHRoYXQgdXNlZCB0byBoYXZlIGEgc3VibW9kdWxlCisgICB0byBhbm90aGVyIHZlcnNpb24gb2Ygc3VwZXJwcm9qZWN0IHRoYXQgbm8gbG9uZ2VyIGhhcyBpdCBkaWQgbm90IHJlbW92ZQorICAgdGhlIHN1Ym1vZHVsZSBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGQgKG5hbWVseSwgd2hlbiB5b3UgYXJlIG5vdAorICAgaW50ZXJlc3RlZCBpbiB0aGUgc3VibW9kdWxlIGF0IGFsbCBhbmQgZGlkbid0IGNsb25lL2NoZWNrb3V0KS4KKworICogQSBuZXcgYXR0cmlidXRlIGNvbmZsaWN0LW1hcmtlci1zaXplIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgc2l6ZSBvZgorICAgdGhlIGNvbmZsaWN0IG1hcmtlcnMgZnJvbSB0aGUgZGVmYXVsdCA3OyB0aGlzIGlzIHVzZWZ1bCB3aGVuIHRyYWNrZWQKKyAgIGNvbnRlbnRzIChlLmcuIGdpdC1tZXJnZSBkb2N1bWVudGF0aW9uKSBoYXZlIHN0cmluZ3MgdGhhdCByZXNlbWJsZSB0aGUKKyAgIGNvbmZsaWN0IG1hcmtlcnMuCisKKyAqIEEgbmV3IHN5bnRheCAiPGJyYW5jaD5Ae3Vwc3RyZWFtfSIgY2FuIGJlIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZSB0bworICAgc3Vic3RpdHV0ZSB0aGUgbmFtZSBvZiB0aGUgInVwc3RyZWFtIiBvZiB0aGUgYnJhbmNoLiAgTWlzc2luZyBicmFuY2gKKyAgIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaCwgc28gImdpdCBmZXRjaCAmJiBnaXQgbWVyZ2UgQHt1cHN0cmVhbX0iCisgICB3aWxsIGJlIGVxdWl2YWxlbnQgdG8gImdpdCBwdWxsIi4KKworICogImdpdCBhbSAtLXJlc29sdmVkIiBoYXMgYSBzeW5vbnltICJnaXQgYW0gLS1jb250aW51ZSIuCisKKyAqICJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIiBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIChzdXJwcmlzZSEpIHVwc3RyZWFtLAorICAgaS5lLiB3aGVyZSB0aGUgYnJhbmNoIGlzIHN1cHBvc2VkIHRvIHB1bGwgYW5kIG1lcmdlIGZyb20gKG9yIHJlYmFzZSBvbnRvKS4KKworICogImdpdCBjaGVja291dCBBLi4uQiIgaXMgYSB3YXkgdG8gZGV0YWNoIEhFQUQgYXQgdGhlIG1lcmdlIGJhc2UgYmV0d2VlbgorICAgQSBhbmQgQi4KKworICogImdpdCBjaGVja291dCAtbSBwYXRoIiB0byByZXNldCB0aGUgd29yayB0cmVlIGZpbGUgYmFjayBpbnRvIHRoZQorICAgY29uZmxpY3RlZCBzdGF0ZSB3b3JrcyBldmVuIHdoZW4geW91IGFscmVhZHkgcmFuICJnaXQgYWRkIHBhdGgiIGFuZAorICAgcmVzb2x2ZWQgdGhlIGNvbmZsaWN0cy4KKworICogImdpdCBjb21taXQgLS1kYXRlPSc8ZGF0ZT4nIiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgYXV0aG9yIGRhdGUKKyAgIGp1c3QgbGlrZSAiZ2l0IGNvbW1pdCAtLWF1dGhvcj0nPG5hbWU+IDxlbWFpbD4nIiBjYW4gYmUgdXNlZCB0bworICAgb3ZlcnJpZGUgdGhlIGF1dGhvciBpZGVudGl0eS4KKworICogImdpdCBjb21taXQgLS1uby1zdGF0dXMiIGNhbiBiZSB1c2VkIHRvIG9taXQgdGhlIGxpc3Rpbmcgb2YgdGhlIGluZGV4CisgICBhbmQgdGhlIHdvcmsgdHJlZSBzdGF0dXMgaW4gdGhlIGVkaXRvciB1c2VkIHRvIHByZXBhcmUgdGhlIGxvZyBtZXNzYWdlLgorCisgKiAiZ2l0IGNvbW1pdCIgd2FybnMgYSBiaXQgbW9yZSBhZ2dyZXNzaXZlbHkgdW50aWwgeW91IGNvbmZpZ3VyZSB1c2VyLmVtYWlsLAorICAgd2hvc2UgZGVmYXVsdCB2YWx1ZSBhbG1vc3QgYWx3YXlzIGlzIG5vdCAoYW5kIGZ1bmRhbWVudGFsbHkgY2Fubm90IGJlKQorICAgd2hhdCB5b3Ugd2FudC4KKworICogImdpdCBkaWZmdG9vbCIgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gaW50ZWdyYXRlIGl0CisgICB3aXRoIGdpdGsuCisKKyAqICJnaXQgZmV0Y2ggLS1hbGwiIGNhbiBub3cgYmUgdXNlZCBpbiBwbGFjZSBvZiAiZ2l0IHJlbW90ZSB1cGRhdGUiLgorCisgKiAiZ2l0IGdyZXAiIGRvZXMgbm90IHJlbHkgb24gZXh0ZXJuYWwgZ3JlcCBhbnltb3JlLiAgSXQgY2FuIHVzZSBtb3JlIHRoYW4KKyAgIG9uZSB0aHJlYWQgdG8gYWNjZWxlcmF0ZSB0aGUgb3BlcmF0aW9uLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgIi0tcXVpZXQiIG9wdGlvbi4KKworICogImdpdCBsb2ciIGFuZCBmcmllbmRzIGxlYXJuZWQgIi0tZ2xvYj1oZWFkcy8qIiBzeW50YXggdGhhdCBpcyBhIG1vcmUKKyAgIGZsZXhpYmxlIHdheSB0byBjb21wbGVtZW50ICItLWJyYW5jaGVzLy0tdGFncy8tLXJlbW90ZXMiLgorCisgKiAiZ2l0IG1lcmdlIiBsZWFybmVkIHRvIHBhc3Mgb3B0aW9ucyBzcGVjaWZpYyB0byBzdHJhdGVneS1iYWNrZW5kcy4gIEUuZy4KKworICAgIC0gImdpdCBtZXJnZSAtWHN1YnRyZWU9cGF0aC90by9kaXJlY3RvcnkiIGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIHN1YnRyZWUKKyAgICAgIHN0cmF0ZWd5IGhvdyBtdWNoIHRvIHNoaWZ0IHRoZSB0cmVlcyBleHBsaWNpdGx5LgorCisgICAgLSAiZ2l0IG1lcmdlIC1YdGhlaXJzIiBjYW4gYmUgdXNlZCB0byBhdXRvLW1lcmdlIGFzIG11Y2ggYXMgcG9zc2libGUsCisgICAgICB3aGlsZSBkaXNjYXJkaW5nIHlvdXIgb3duIGNoYW5nZXMgYW5kIHRha2luZyBtZXJnZWQgdmVyc2lvbiBpbgorICAgICAgY29uZmxpY3RlZCByZWdpb25zLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgImdpdCBwdXNoIG9yaWdpbiAtLWRlbGV0ZSBicmFuY2giLCBhIHN5bnRhY3RpYyBzdWdhcgorICAgZm9yICJnaXQgcHVzaCBvcmlnaW4gOmJyYW5jaCIuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCAiZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gb3JpZ2luIGZvcmtlcjpmb3JrZWUiIHRoYXQKKyAgIGxldHMgeW91IGNvbmZpZ3VyZSB5b3VyICJmb3JrZXIiIGJyYW5jaCB0byBsYXRlciBwdWxsIGZyb20gImZvcmtlZSIKKyAgIGJyYW5jaCBhdCAib3JpZ2luIi4KKworICogImdpdCByZWJhc2UgLS1vbnRvIEEuLi5CIiBtZWFucyB0aGUgaGlzdG9yeSBpcyByZXBsYXllZCBvbiB0b3Agb2YgdGhlCisgICBtZXJnZSBiYXNlIGJldHdlZW4gQSBhbmQgQi4KKworICogImdpdCByZWJhc2UgLWkiIGxlYXJuZWQgbmV3IGFjdGlvbiAiZml4dXAiIHRoYXQgc3F1YXNoZXMgdGhlIGNoYW5nZQorICAgYnV0IGRvZXMgbm90IGFmZmVjdCBleGlzdGluZyBsb2cgbWVzc2FnZS4KKworICogImdpdCByZWJhc2UgLWkiIGFsc28gbGVhcm5lZCAtLWF1dG9zcXVhc2ggb3B0aW9uIHRoYXQgaXMgdXNlZnVsCisgICB0b2dldGhlciB3aXRoIHRoZSBuZXcgImZpeHVwIiBhY3Rpb24uCisKKyAqICJnaXQgcmVtb3RlIiBsZWFybmVkIHNldC11cmwgc3ViY29tbWFuZCB0aGF0IHVwZGF0ZXMgKHN1cnByaXNlISkgdXJsCisgICBmb3IgYW4gZXhpc3RpbmcgcmVtb3RlIG5pY2tuYW1lLgorCisgKiAiZ2l0IHJlcmVyZSIgbGVhcm5lZCAiZm9yZ2V0IHBhdGgiIHN1YmNvbW1hbmQuICBUb2dldGhlciB3aXRoICJnaXQKKyAgIGNoZWNrb3V0IC1tIHBhdGgiIGl0IHdpbGwgYmUgdXNlZnVsIHdoZW4geW91IHJlY29yZGVkIGEgd3JvbmcKKyAgIHJlc29sdXRpb24uCisKKyAqIFVzZSBvZiAiZ2l0IHJlc2V0IC0tbWVyZ2UiIGhhcyBiZWNvbWUgZWFzaWVyIHdoZW4gcmVzZXR0aW5nIGF3YXkgYQorICAgY29uZmxpY3RlZCBtZXNzIGxlZnQgaW4gdGhlIHdvcmsgdHJlZS4KKworICogImdpdCByZXJlcmUiIGhhZCByZXJlcmUuYXV0b3VwZGF0ZSBjb25maWd1cmF0aW9uIGJ1dCB0aGVyZSB3YXMgbm8gd2F5CisgICB0byBjb3VudGVybWFuZCBpdCBmcm9tIHRoZSBjb21tYW5kIGxpbmU7IC0tbm8tcmVyZXJlLWF1dG91cGRhdGUgb3B0aW9uCisgICBnaXZlbiB0byAibWVyZ2UiLCAicmV2ZXJ0IiwgZXRjLiBmaXhlcyB0aGlzLgorCisgKiAiZ2l0IHN0YXR1cyIgbGVhcm5lZCAiLXMoaG9ydCkiIG91dHB1dCBmb3JtYXQuCisKKyhkZXZlbG9wZXJzKQorCisgKiBUaGUgaW5mcmFzdHJ1Y3R1cmUgdG8gYnVpbGQgZm9yZWlnbiBTQ00gaW50ZXJmYWNlIGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqIE1hbnkgbW9yZSBjb21tYW5kcyBhcmUgbm93IGJ1aWx0LWluLgorCisgKiBUSFJFQURFRF9ERUxUQV9TRUFSQ0ggaXMgbm8gbW9yZS4gIElmIHlvdSBidWlsZCB3aXRoIHRocmVhZHMsIGRlbHRhCisgICBjb21wcmVzc2lvbiB3aWxsIGFsd2F5cyB0YWtlIGFkdmFudGFnZSBvZiBpdC4KKworRml4ZXMgc2luY2UgdjEuNi42CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjYuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyAqICJnaXQgYnJhbmNoIC1kIGJyYW5jaCIgdXNlZCB0byByZWZ1c2UgZGVsZXRpbmcgdGhlIGJyYW5jaCBldmVuIHdoZW4KKyAgIHRoZSBicmFuY2ggaXMgZnVsbHkgbWVyZ2VkIHRvIGl0cyB1cHN0cmVhbSBicmFuY2ggaWYgaXQgaXMgbm90IG1lcmdlZAorICAgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgSXQgbm93IGRlbGV0ZXMgaXQgaW4gc3VjaCBhIGNhc2UuCisKKyAqICJmaWx0ZXItYnJhbmNoIiBjb21tYW5kIGluY29ycmVjdGx5IHNhaWQgLS1wcnVuZS1lbXB0eSBhbmQgLS1maWx0ZXItY29tbWl0CisgICB3ZXJlIGluY29tcGF0aWJsZTsgdGhlIGxhdHRlciBzaG91bGQgYmUgcmVhZCBhcyAtLWNvbW1pdC1maWx0ZXIuCisKKyAqIFdoZW4gdXNpbmcgImdpdCBzdGF0dXMiIG9yIGFza2luZyAiZ2l0IGRpZmYiIHRvIGNvbXBhcmUgdGhlIHdvcmsgdHJlZQorICAgd2l0aCBzb21ldGhpbmcsIHRoZXkgdXNlZCB0byBjb25zaWRlciB0aGF0IGEgY2hlY2tlZC1vdXQgc3VibW9kdWxlIHdpdGgKKyAgIHVuY29tbWl0dGVkIGNoYW5nZXMgaXMgbm90IG1vZGlmaWVkOyB0aGlzIGNvdWxkIGNhdXNlIHBlb3BsZSB0byBmb3JnZXQKKyAgIGNvbW1pdHRpbmcgdGhlc2UgY2hhbmdlcyBpbiB0aGUgc3VibW9kdWxlIGJlZm9yZSBjb21taXR0aW5nIGluIHRoZQorICAgc3VwZXJwcm9qZWN0LiBUaGV5IG5vdyBjb25zaWRlciBzdWNoIGEgY2hhbmdlIGFzIGEgbW9kaWZpY2F0aW9uIGFuZAorICAgImdpdCBkaWZmIiB3aWxsIGFwcGVuZCBhICItZGlydHkiIHRvIHRoZSB3b3JrIHRyZWUgc2lkZSB3aGVuIGdlbmVyYXRpbmcKKyAgIHBhdGNoIG91dHB1dCBvciB3aGVuIHVzZWQgd2l0aCB0aGUgLS1zdWJtb2R1bGUgb3B0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2YjMxNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMS50eHQKQEAgLTAsMCArMSw5NiBAQAorR2l0IHYxLjcuMS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEF1dGhlbnRpY2F0aW9uIG92ZXIgaHR0cCB0cmFuc3BvcnQgY2FuIG5vdyBiZSBtYWRlIGxhemlseSwgaW4gdGhhdCB0aGUKKyAgIHJlcXVlc3QgY2FuIGZpcnN0IGdvIHRvIGEgVVJMIHdpdGhvdXQgdXNlcm5hbWUsIGdldCBhIDQwMSByZXNwb25zZSBhbmQKKyAgIHRoZW4gdGhlIGNsaWVudCB3aWxsIGFzayBmb3IgdGhlIHVzZXJuYW1lIHRvIHVzZS4KKworICogV2UgdXNlZCB0byBtaXN0YWtlbmx5IHRoaW5rICIuLi93b3JrIiBpcyBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgY3VycmVudAorICAgZGlyZWN0b3J5IHdoZW4gd2UgYXJlIGluICIuLi93b3JrLXh5eiIuCisKKyAqIFRoZSBhdHRyaWJ1dGUgbWVjaGFuaXNtIG5vdyBhbGxvd3MgYW4gZW50cnkgdGhhdCB1c2VzIGFuIGF0dHJpYnV0ZQorICAgbWFjcm8gdGhhdCBzZXQvdW5zZXQgb25lIGF0dHJpYnV0ZSwgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYW4KKyAgIG92ZXJyaWRpbmcgc2V0dGluZzsgdGhpcyBtYWtlcyBhdHRyaWJ1dGUgbWFjcm9zIG11Y2ggZWFzaWVyIHRvIHVzZS4KKworICogV2UgZGlkbid0IHJlY29nbml6ZSB0aW1lem9uZSAiWiIgYXMgYSBzeW5vbnltIGZvciAiVVRDIiAoNzViMzdlNzApLgorCisgKiBJbiAxLjcuMCwgcmVhZC10cmVlIGFuZCB1c2VyIGNvbW1hbmRzIHRoYXQgdXNlIHRoZSBtZWNoYW5pc20gc3VjaCBhcworICAgY2hlY2tvdXQgYW5kIG1lcmdlIHdlcmUgZml4ZWQgdG8gaGFuZGxlIHN3aXRjaGluZyBiZXR3ZWVuIGJyYW5jaGVzIG9uZQorICAgb2Ygd2hpY2ggaGFzIGEgZmlsZSB3aGlsZSB0aGUgb3RoZXIgaGFzIGEgZGlyZWN0b3J5IGF0IHRoZSBzYW1lIHBhdGgKKyAgIGNvcnJlY3RseSBldmVuIHdoZW4gdGhlcmUgYXJlIHNvbWUgImNvbmZ1c2luZyIgcGF0aG5hbWVzIGluIHRoZW0uICBCdXQKKyAgIHRoZSBhbGdvcml0aG0gdXNlZCBmb3IgdGhpcyBmaXggd2FzIHN1Ym9wdGltYWwgYW5kIGhhZCBhIHRlcnJpYmxlCisgICBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBlc3BlY2lhbGx5IGluIGxhcmdlciB0cmVlcy4KKworICogImdpdCBhbSAtMyIgZGlkIG5vdCBzaG93IGRpYWdub3NpcyB3aGVuIHRoZSBwYXRjaCBpbiB0aGUgbWVzc2FnZSB3YXMgY29ycnVwdC4KKworICogQWZ0ZXIgImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiByZW1vdmVkIHRyYWlsaW5nIGJsYW5rIGxpbmVzIGluIGFuCisgICBwYXRjaCBpbiBhIHBhdGNoIHNlcmllcywgaXQgZmFpbGVkIHRvIGFwcGx5IGxhdGVyIHBhdGNoZXMgdGhhdCBkZXBlbmQKKyAgIG9uIHRoZSBwcmVzZW5jZSBvZiBzdWNoIGJsYW5rIGxpbmVzLgorCisgKiAiZ2l0IGJ1bmRsZSAtLXN0ZGluIiBzZWdmYXVsdGVkLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBhbmQgImdpdCByZWJhc2UiIG92ZXJ3cm90ZSBwYXRocyB0aGF0IGFyZSBtYXJrZWQgImFzc3VtZQorICAgdW5jaGFuZ2VkIi4KKworICogImdpdCBjb21taXQgLS1hbWVuZCIgb24gYSBjb21taXQgd2l0aCBhbiBpbnZhbGlkIGF1dGhvci1uYW1lIGxpbmUgdGhhdAorICAgbGFja3MgdGhlIGRpc3BsYXkgbmFtZSBkaWRuJ3Qgd29yay4KKworICogImdpdCBkZXNjcmliZSIgZGlkIG5vdCB0aWUtYnJlYWsgdGFncyB0aGF0IHBvaW50IGF0IHRoZSBzYW1lIGNvbW1pdAorICAgY29ycmVjdGx5OyBuZXdlciBvbmVzIGFyZSBwcmVmZXJyZWQgYnkgcGF5aW5nIGF0dGVudGlvbiB0byB0aGUKKyAgIHRhZ2dlciBkYXRlIG5vdy4KKworICogImdpdCBkaWZmIiB1c2VkIHRvIHRlbGwgdW5kZXJseWluZyB4ZGlmZiBtYWNoaW5lcnkgdG8gd29yayB2ZXJ5IGhhcmQgdG8KKyAgIG1pbmltaXplIHRoZSBvdXRwdXQsIGJ1dCB0aGlzIG9mdGVuIHdhcyBzcGVuZGluZyB0b28gbWFueSBleHRyYSBjeWNsZXMKKyAgIGZvciB2ZXJ5IGxpdHRsZSBnYWluLgorCisgKiAiZ2l0IGRpZmYgLS1jb2xvciIgZGlkIG5vdCBwYWludCBleHRlbmRlZCBkaWZmIGhlYWRlcnMgcGVyIGxpbmUKKyAgIChpLmUuIHRoZSBjb2xvcmluZyBlc2NhcGUgc2VxdWVuY2UgZGlkbid0IGVuZCBhdCB0aGUgZW5kIG9mIGxpbmUpLAorICAgd2hpY2ggY29uZnVzZWQgImxlc3MgLVIiLgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIEhUVFAgdmVyaWZpZXMgdGhlIGRvd25sb2FkZWQgcGFja2ZpbGVzIG1vcmUgcm9idXN0bHkuCisKKyAqIFRoZSBtZW1vcnkgdXNhZ2UgYnkgImdpdCBpbmRleC1wYWNrIiAocnVuIGR1cmluZyAiZ2l0IGZldGNoIiBhbmQgImdpdAorICAgcHVzaCIpIGdvdCBsZWFuZXIuCisKKyAqICJHSVRfRElSPWZvby5naXQgZ2l0IGluaXQgLS1iYXJlIGJhci5naXQiIGNyZWF0ZWQgZm9vLmdpdCBpbnN0ZWFkIG9mIGJhci5naXQuCisKKyAqICJnaXQgbG9nIC0tYWJicmV2PSRudW0gLS1mb3JtYXQ9JyVoJyBpZ25vcmVkIC0tYWJicmV2PSRudW0uCisKKyAqICJnaXQgbHMtZmlsZXMgLi4vb3V0L3NpZGUvY3dkIiByZWZ1c2VkIHRvIHdvcmsuCisKKyAqICJnaXQgbWVyZ2UgLS1sb2ciIHVzZWQgdG8gcmVwbGFjZSB0aGUgY3VzdG9tIG1lc3NhZ2UgZ2l2ZW4gYnkgIi1tIiB3aXRoCisgICB0aGUgc2hvcnRsb2csIGluc3RlYWQgb2YgYXBwZW5kaW5nIHRvIGl0LgorCisgKiAiZ2l0IG5vdGVzIGNvcHkiIHdpdGhvdXQgYW55IG90aGVyIGFyZ3VtZW50IHNlZ2ZhdWx0ZWQuCisKKyAqICJnaXQgcHVsbCIgYWNjZXB0ZWQgIi0tZHJ5LXJ1biIsIGdhdmUgaXQgdG8gdW5kZXJseWluZyAiZ2l0IGZldGNoIiBidXQKKyAgIGlnbm9yZWQgdGhlIG9wdGlvbiBpdHNlbGYsIHJlc3VsdGluZyBpbiBhIGJvZ3VzIGF0dGVtcHQgdG8gbWVyZ2UKKyAgIHVucmVsYXRlZCBjb21taXQuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IGZhaXRoZnVsbHkgcmVwcm9kdWNlIGEgbWFsZm9ybWVkIGF1dGhvciBpZGVudCwgdGhhdAorICAgaXMgb2Z0ZW4gc2VlbiBpbiBhIHJlcG9zaXRvcnkgY29udmVydGVkIGZyb20gZm9yZWlnbiBTQ01zLgorCisgKiAiZ2l0IHJlc2V0IC0taGFyZCIgc3RhcnRlZCBmcm9tIGEgd3JvbmcgZGlyZWN0b3J5IGFuZCBhIHdvcmtpbmcgdHJlZSBpbgorICAgYSBub25zdGFuZGFyZCBsb2NhdGlvbiBpcyBpbiB1c2UgZ290IGNvbmZ1c2VkLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxhY2tlZCBhIHdheSB0byBzcGVjaWZ5IHRoZSBkb21haW5uYW1lIHVzZWQgaW4gdGhlCisgICBFSExPL0hFTE8gZXhjaGFuZ2UsIGNhdXNpbmcgcmVqZWN0ZWQgY29ubmVjdGlvbiBmcm9tIHBpY2t5IHNlcnZlcnMuCisgICBJdCBsZWFybmVkIC0tc210cC1kb21haW4gb3B0aW9uIHRvIHNvbHZlIHRoaXMgaXNzdWUuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCBkZWNsYXJlIGEgY29udGVudC10cmFuc2Zlci1lbmNvZGluZyBhbmQKKyAgIGNvbnRlbnQtdHlwZSBldmVuIHdoZW4gaXRzIHBheWxvYWQgbmVlZHMgdG8gYmUgc2VudCBpbiA4LWJpdC4KKworICogImdpdCBzaG93IC1DIC1DIiBhbmQgb3RoZXIgY29ybmVyIGNhc2VzIGxvc3QgZGlmZiBtZXRhaW5mbyBvdXRwdXQKKyAgIGluIDEuNy4wLgorCisgKiAiZ2l0IHN0YXNoIiBpbmNvcnJlY3RseSBsb3N0IHBhdGhzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCB3ZXJlCisgICBwcmV2aW91c2x5IHJlbW92ZWQgZnJvbSB0aGUgaW5kZXguCisKKyAqICJnaXQgc3RhdHVzIiBzdG9wcGVkIHJlZnJlc2hpbmcgdGhlIGluZGV4IGJ5IG1pc3Rha2UgaW4gMS43LjEuCisKKyAqICJnaXQgc3RhdHVzIiBzaG93ZWQgZXhjZXNzICJoaW50cyIgZXZlbiB3aGVuIGFkdmljZS5zdGF0dXNIaW50cyBpcyBzZXQgdG8gZmFsc2UuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiYTE0ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMi50eHQKQEAgLTAsMCArMSwyOCBAQAorR2l0IHYxLjcuMS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGNvbW1pdCIgZGlkIG5vdCBob25vciBHSVRfUkVGTE9HX0FDVElPTiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgcmVzdWx0aW5nCisgICByZWZsb2cgbWVzc2FnZXMgZm9yIGNoZXJyeS1waWNrIGFuZCByZXZlcnQgYWN0aW9ucyB0byBiZSByZWNvcmRlZCBhcyAiY29tbWl0Ii4KKworICogImdpdCBjbG9uZS9mZXRjaC9wdWxsIiBpc3N1ZWQgYW4gaW5jb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2hlbiBhIHJlZiBhbmQKKyAgIGEgc3ltcmVmIHRoYXQgcG9pbnRzIHRvIHRoZSByZWYgd2VyZSB1cGRhdGVkIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzCisgICBvYnZpb3VzbHkgd291bGQgdXBkYXRlIHRoZW0gdG8gdGhlIHNhbWUgdmFsdWUsIGFuZCBzaG91bGQgbm90IHJlc3VsdCBpbgorICAgYW4gZXJyb3IgY29uZGl0aW9uLgorCisgKiAiZ2l0IGRpZmYiIGluc2lkZSBhIHRyZWUgd2l0aCBtYW55IHBhdGhuYW1lcyB0aGF0IGhhdmUgY2VydGFpbgorICAgY2hhcmFjdGVycyBoYXMgYmVjb21lIHZlcnkgc2xvdyBpbiAxLjcuMCBieSBtaXN0YWtlLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uIiBkaWQgbm90IHN0b3AgYXQgbm9uIG9wdGlvbgorICAgd2hlbiAtLWtlZXAtZGFzaGRhc2ggd2FzIGluIGVmZmVjdC4KKworICogQW4gb3ZlcmxvbmcgbGluZSBhZnRlciAiLmdpdGRpcjogIiBpbiBhIGdpdCBmaWxlIGNhdXNlZCBvdXQgb2YgYm91bmRzCisgICBhY2Nlc3MgdG8gYW4gYXJyYXkgb24gdGhlIHN0YWNrLgorCisgKiAiZ2l0IGNvbmZpZyAtLXBhdGggY29uZi52YXIiIHRvIGF0dGVtcHQgdG8gZXhwYW5kIGEgdmFyaWFibGUgY29uZi52YXIKKyAgIHRoYXQgdXNlcyAifi8iIHNob3J0LWhhbmQgc2VnZmF1bHRlZCB3aGVuICRIT01FIGVudmlyb25tZW50IHZhcmlhYmxlCisgICB3YXMgbm90IHNldC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE4NTE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS4zLnR4dApAQCAtMCwwICsxLDEwIEBACitHaXQgdjEuNy4xLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBwcmltYXJpbHkgdG8gYmFja3BvcnQgc3VwcG9ydCBmb3IgdGhlIG5ldyAiYWRkLmlnbm9yZUVycm9ycyIKK25hbWUgZ2l2ZW4gdG8gdGhlIGV4aXN0aW5nICJhZGQuaWdub3JlLWVycm9ycyIgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworVGhlIG5leHQgdmVyc2lvbiwgR2l0IDEuNy40LCBhbmQgZnV0dXJlIHZlcnNpb25zLCB3aWxsIHN1cHBvcnQgYm90aAorb2xkIGFuZCBpbmNvcnJlY3QgbmFtZSBhbmQgdGhlIG5ldyBjb3JyZWN0ZWQgbmFtZSwgYnV0IHdpdGhvdXQgdGhpcworYmFja3BvcnQsIHVzZXJzIHdobyB3YW50IHRvIHVzZSB0aGUgbmV3IG5hbWUgImFkZC5pZ25vcmVFcnJvcnMiIGluCit0aGVpciByZXBvc2l0b3JpZXMgY2Fubm90IHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzczNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS40LnR4dApAQCAtMCwwICsxLDggQEAKK0dpdCB2MS43LjEuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdHdlYiIgY2FuIHNvbWV0aW1lcyBiZSB0cmlja2VkIGludG8gcGFycm90dGluZyBhIGZpbGVuYW1lIGFyZ3VtZW50CisgICBnaXZlbiBpbiBhIHJlcXVlc3Qgd2l0aG91dCBwcm9wZXJseSBxdW90aW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDg5ZmVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS50eHQKQEAgLTAsMCArMSw4OSBAQAorR2l0IHYxLjcuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEVyaWMgUmF5bW9uZCBpcyB0aGUgbWFpbnRhaW5lciBvZiB1cGRhdGVkIENJQWJvdCBzY3JpcHRzLCBpbiBjb250cmliLy4KKworICogZ2l0ayB1cGRhdGVzLgorCisgKiBTb21lIGNvbW1hbmRzIChlLmcuIHN2biBhbmQgaHR0cCBpbnRlcmZhY2VzKSB0aGF0IGludGVyYWN0aXZlbHkgYXNrCisgICBmb3IgYSBwYXNzd29yZCBjYW4gYmUgdG9sZCB0byB1c2UgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBnaXZlbiB2aWEKKyAgIEdJVF9BU0tQQVNTLgorCisgKiBDb25mbGljdCBtYXJrZXJzIHRoYXQgbGVhZCB0aGUgY29tbW9uIGFuY2VzdG9yIGluIGRpZmYzLXN0eWxlIG91dHB1dAorICAgbm93IGhhdmUgYSBsYWJlbCwgd2hpY2ggaG9wZWZ1bGx5IHdvdWxkIGhlbHAgdGhpcmQtcGFydHkgdG9vbHMgdGhhdAorICAgZXhwZWN0IG9uZS4KKworICogQ29tZXMgd2l0aCBhbiB1cGRhdGVkIGJhc2gtY29tcGxldGlvbiBzY3JpcHQuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgIi0ta2VlcC1jciIgb3B0aW9uIHRvIGhhbmRsZSBpbnB1dHMgdGhhdCBhcmUKKyAgIGEgbWl4dHVyZSBvZiBjaGFuZ2VzIHRvIGZpbGVzIHdpdGggYW5kIHdpdGhvdXQgQ1JMRiBsaW5lIGVuZGluZ3MuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBsZWFybmVkIC1SIG9wdGlvbiB0byBsZWF2ZSByZXZpc2lvbiBtYXBwaW5nIGJldHdlZW4KKyAgIENWUyByZXZpc2lvbnMgYW5kIHJlc3VsdGluZyBnaXQgY29tbWl0cy4KKworICogImdpdCBkaWZmIC0tc3VibW9kdWxlIiBub3RpY2VzIGFuZCBkZXNjcmliZXMgZGlydHkgc3VibW9kdWxlcy4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGxlYXJuZWQgJShzeW1yZWYpLCAlKHN5bXJlZjpzaG9ydCkgYW5kICUoZmxhZykKKyAgIHRva2Vucy4KKworICogImdpdCBoYXNoLW9iamVjdCAtLXN0ZGluLXBhdGhzIiBjYW4gdGFrZSAiLS1uby1maWx0ZXJzIiBvcHRpb24gbm93LgorCisgKiAiZ2l0IGluaXQiIGNhbiBiZSB0b2xkIHRvIGxvb2sgYXQgaW5pdC50ZW1wbGF0ZWRpciBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSAob2J2aW91c2x5IHRoYXQgaGFzIHRvIGNvbWUgZnJvbSBlaXRoZXIgL2V0Yy9naXRjb25maWcgb3IKKyAgICRIT01FLy5naXRjb25maWcpLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgIi0tbm8taW5kZXgiIG9wdGlvbiwgdG8gc2VhcmNoIGluc2lkZSBjb250ZW50cyB0aGF0CisgICBhcmUgbm90IG1hbmFnZWQgYnkgZ2l0LgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgLS1jb2xvcj1hdXRvL2Fsd2F5cy9uZXZlci4KKworICogImdpdCBncmVwIiBsZWFybmVkIHRvIHBhaW50IGZpbGVuYW1lIGFuZCBsaW5lLW51bWJlciBpbiBjb2xvcnMuCisKKyAqICJnaXQgbG9nIC1wIC0tZmlyc3QtcGFyZW50IC1tIiBzaG93cyBvbmUtcGFyZW50IGRpZmYgZm9yIG1lcmdlCisgICBjb21taXRzLCBpbnN0ZWFkIG9mIHNob3dpbmcgY29tYmluZWQgZGlmZi4KKworICogImdpdCBtZXJnZS1maWxlIiBsZWFybmVkIHRvIHVzZSBjdXN0b20gY29uZmxpY3QgbWFya2VyIHNpemUgYW5kIGFsc28KKyAgIHRvIHVzZSB0aGUgInVuaW9uIG1lcmdlIiBiZWhhdmlvdXIuCisKKyAqICJnaXQgbm90ZXMiIGNvbW1hbmQgaGFzIGJlZW4gcmV3cml0dGVuIGluIEMgYW5kIGxlYXJuZWQgbWFueSBjb21tYW5kcworICAgYW5kIGZlYXR1cmVzIHRvIGhlbHAgeW91IGNhcnJ5IG5vdGVzIGZvcndhcmQgYWNyb3NzIHJlYmFzZXMgYW5kIGFtZW5kcy4KKworICogImdpdCByZXF1ZXN0LXB1bGwiIGlkZW50aWZpZXMgdGhlIGNvbW1pdCB0aGUgcmVxdWVzdCBpcyByZWxhdGl2ZSB0byBpbgorICAgYSBtb3JlIHJlYWRhYmxlIHdheS4KKworICogImdpdCByZXNldCIgbGVhcm5lZCAiLS1rZWVwIiBvcHRpb24gdGhhdCBsZXRzIHlvdSBkaXNjYXJkIGNvbW1pdHMKKyAgIG5lYXIgdGhlIHRpcCB3aGlsZSBwcmVzZXJ2aW5nIHlvdXIgbG9jYWwgY2hhbmdlcyBpbiBhIHdheSBzaW1pbGFyCisgICB0byBob3cgImdpdCBjaGVja291dCBicmFuY2giIGRvZXMuCisKKyAqICJnaXQgc3RhdHVzIiBub3RpY2VzIGFuZCBkZXNjcmliZXMgZGlydHkgc3VibW9kdWxlcy4KKworICogImdpdCBzdm4iIHNob3VsZCB3b3JrIGJldHRlciB3aGVuIGludGVyYWN0aW5nIHdpdGggcmVwb3NpdG9yaWVzCisgICB3aXRoIENSTEYgbGluZSBlbmRpbmdzLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgbGVhcm5lZCB0byBzdXBwb3J0IENSQU0tTUQ1IGF1dGhlbnRpY2F0aW9uLgorCisgKiAiZ2l0d2ViIiBpbnN0YWxsYXRpb24gcHJvY2VkdXJlIGNhbiB1c2UgIm1pbmlmaWVkIiBqcy9jc3MgZmlsZXMKKyAgIGJldHRlci4KKworICogVmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKK0ZpeGVzIHNpbmNlIHYxLjcuMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNy4wLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisgKiAiZ2l0IGFkZCBmcm90ei9uaXRmb2wiIGRpZCBub3QgY29tcGxhaW4gd2hlbiB0aGUgZW50aXJlIGZyb3R6LyBkaXJlY3RvcnkKKyAgIHdhcyBpZ25vcmVkLgorCisgKiAiZ2l0IGRpZmYgLS1zdGF0IiB1c2VkICJpbnQiIHRvIGNvdW50IHRoZSBzaXplIG9mIGRpZmZlcmVuY2VzLAorICAgd2hpY2ggY291bGQgcmVzdWx0IGluIG92ZXJmbG93aW5nLgorCisgKiAiZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUiIGRpZG4ndCB0ZXJtaW5hdGUgYSByZWNvcmQgd2l0aCBMRiBmb3IKKyAgIGNvbW1pdHMgd2l0aG91dCBhbnkgbWVzc2FnZS4KKworICogImdpdCByZXYtbGlzdCAtLWFiYnJldi1jb21taXQiIGRlZmF1bHRlZCB0byA0MC1ieXRlIGFiYnJldmlhdGlvbnMsIHVubGlrZQorICAgbmV3ZXIgdG9vbHMgaW4gdGhlIGdpdCB0b29sc2V0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDZhOTY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMS50eHQKQEAgLTAsMCArMSw3OCBAQAorR2l0IHYxLjcuMTAuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWRkaXRpb25zIHNpbmNlIHYxLjcuMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xvY2FsaXphdGlvbiBtZXNzYWdlIGZpbGVzIGZvciBEYW5pc2ggYW5kIEdlcm1hbiBoYXZlIGJlZW4gYWRkZWQuCisKKworRml4ZXMgc2luY2UgdjEuNy4xMAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFkZCAtcCIgaXMgbm90IGRlc2lnbmVkIHRvIGRlYWwgd2l0aCB1bm1lcmdlZCBwYXRocyBidXQgZGlkCisgICBub3QgZXhjbHVkZSB0aGVtIGFuZCB0cmllZCB0byBhcHBseSBmdW5ueSBwYXRjaGVzIG9ubHkgdG8gZmFpbC4KKworICogImdpdCBibGFtZSIgc3RhcnRlZCBtaXNzaW5nIHF1aXRlIGEgZmV3IGNoYW5nZXMgZnJvbSB0aGUgb3JpZ2luCisgICBzaW5jZSB3ZSBzdG9wcGVkIHVzaW5nIHRoZSBkaWZmIG1pbmltYWxpemF0aW9uIGJ5IGRlZmF1bHQgaW4gdjEuNy4yCisgICBlcmEuCisKKyAqIFdoZW4gUEFUSCBjb250YWlucyBhbiB1bnJlYWRhYmxlIGRpcmVjdG9yeSwgYWxpYXMgZXhwYW5zaW9uIGNvZGUKKyAgIGRpZCBub3Qga2ljayBpbiwgYW5kIGZhaWxlZCB3aXRoIGFuIGVycm9yIHRoYXQgc2FpZCAiZ2l0LXN1YmNtZCIKKyAgIHdhcyBub3QgZm91bmQuCisKKyAqICJnaXQgY2xlYW4gLWQgLWYiIChub3QgIi1kIC1mIC1mIikgaXMgc3VwcG9zZWQgdG8gcHJvdGVjdCBuZXN0ZWQKKyAgIHdvcmtpbmcgdHJlZXMgb2YgaW5kZXBlbmRlbnQgZ2l0IHJlcG9zaXRvcmllcyB0aGF0IGV4aXN0IGluIHRoZQorICAgY3VycmVudCBwcm9qZWN0IHdvcmtpbmcgdHJlZSBmcm9tIGdldHRpbmcgcmVtb3ZlZCwgYnV0IHRoZQorICAgcHJvdGVjdGlvbiBhcHBsaWVkIG9ubHkgdG8gc3VjaCB3b3JraW5nIHRyZWVzIHRoYXQgYXJlIGF0IHRoZQorICAgdG9wLWxldmVsIG9mIHRoZSBjdXJyZW50IHByb2plY3QgYnkgbWlzdGFrZS4KKworICogImdpdCBjb21taXQgLS1hdXRob3I9JG5hbWUiIGRpZCBub3QgdGVsbCB0aGUgbmFtZSB0aGF0IHdhcyBiZWluZworICAgcmVjb3JkZWQgaW4gdGhlIHJlc3VsdGluZyBjb21taXQgdG8gaG9va3MsIGV2ZW4gdGhvdWdoIGl0IGRvZXMgZG8KKyAgIHNvIHdoZW4gdGhlIGVuZCB1c2VyIG92ZXJyb2RlIHRoZSBhdXRob3JzaGlwIHZpYSB0aGUKKyAgICJHSVRfQVVUSE9SX05BTUUiIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgKiBXaGVuICJnaXQgY29tbWl0IC0tdGVtcGxhdGUgRiIgZXJyb3JzIG91dCBiZWNhdXNlIHRoZSB1c2VyIGRpZCBub3QKKyAgIHRvdWNoIHRoZSBtZXNzYWdlLCBpdCBjbGFpbWVkIHRoYXQgaXQgYWJvcnRzIGR1ZSB0byAiZW1wdHkKKyAgIG1lc3NhZ2UiLCB3aGljaCB3YXMgdXR0ZXJseSB3cm9uZy4KKworICogVGhlIHJlZ2V4cCBjb25maWd1cmVkIHdpdGggZGlmZi53b3JkcmVnZXggd2FzIGluY29ycmVjdGx5IHJldXNlZAorICAgYWNyb3NzIGZpbGVzLgorCisgKiBBbiBhZ2Utb2xkIGNvcm5lciBjYXNlIGJ1ZyBpbiBjb21iaW5lIGRpZmYgKG9ubHkgdHJpZ2dlcmVkIHdpdGggLVUwCisgICBhbmQgdGhlIGh1bmsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBuZWVkcyB0byBiZSBzaG93bikgaGFzCisgICBiZWVuIGZpeGVkLgorCisgKiBSZW5hbWUgZGV0ZWN0aW9uIGxvZ2ljIHVzZWQgdG8gbWF0Y2ggdHdvIGVtcHR5IGZpbGVzIGFzIHJlbmFtZXMKKyAgIGR1cmluZyBtZXJnZS1yZWN1cnNpdmUsIGxlYWRpbmcgdG8gdW5uYXR1cmFsIG1pc21lcmdlcy4KKworICogVGhlIHBhcnNlciBpbiAiZmFzdC1pbXBvcnQiIGRpZCBub3QgZGlhZ25vc2UgIjo5IiBzdHlsZSByZWZlcmVuY2VzCisgICB0aGF0IGlzIG5vdCBmb2xsb3dlZCBieSByZXF1aXJlZCBTUC9MRiBhcyBhbiBlcnJvci4KKworICogV2hlbiAiZ2l0IGZldGNoIiBlbmNvdW50ZXJzIHJlcG9zaXRvcmllcyB3aXRoIHRvbyBtYW55IHJlZmVyZW5jZXMsCisgICB0aGUgY29tbWFuZCBsaW5lIG9mICJmZXRjaC1wYWNrIiB0aGF0IGlzIHJ1biBieSBhIGhlbHBlcgorICAgZS5nLiByZW1vdGUtY3VybCwgbWF5IGZhaWwgdG8gaG9sZCBhbGwgb2YgdGhlbS4gTm93IHN1Y2ggYW4KKyAgIGludGVybmFsIGludm9jYXRpb24gY2FuIGZlZWQgdGhlIHJlZmVyZW5jZXMgdGhyb3VnaCB0aGUgc3RhbmRhcmQKKyAgIGlucHV0IG9mICJmZXRjaC1wYWNrIi4KKworICogImdpdCBmZXRjaCIgdGhhdCByZWN1cnNlcyBpbnRvIHN1Ym1vZHVsZXMgb24gZGVtYW5kIGRpZCBub3QgY2hlY2sKKyAgIGlmIGl0IG5lZWRzIHRvIGdvIGludG8gc3VibW9kdWxlcyB3aGVuIG5vbiBicmFuY2hlcyAobW9zdCBub3RhYmx5LAorICAgdGFncykgYXJlIGZldGNoZWQuCisKKyAqICJsb2cgLXAgLS1ncmFwaCIgdXNlZCB3aXRoICItLXN0YXQiIGhhZCBhIGZldyBmb3JtYXR0aW5nIGVycm9yLgorCisgKiBSdW5uaW5nICJub3RlcyBtZXJnZSAtLWNvbW1pdCIgZmFpbGVkIHRvIHBlcmZvcm0gY29ycmVjdGx5IHdoZW4gcnVuCisgICBmcm9tIGFueSBkaXJlY3RvcnkgaW5zaWRlICRHSVRfRElSLy4gIFdoZW4gIm5vdGVzIG1lcmdlIiBzdG9wcyB3aXRoCisgICBjb25mbGljdHMsICRHSVRfRElSL05PVEVTX01FUkdFX1dPUktUUkVFIGlzIHRoZSBwbGFjZSBhIHVzZXIgZWRpdHMKKyAgIHRvIHJlc29sdmUgaXQuCisKKyAqIFRoZSAncHVzaCB0byB1cHN0cmVhbScgaW1wbGVtZW50YXRpb24gd2FzIGJyb2tlbiBpbiBzb21lIGNvcm5lcgorICAgY2FzZXMuICJnaXQgcHVzaCAkdGhlcmUiIHdpdGhvdXQgcmVmc3BlYywgd2hlbiB0aGUgY3VycmVudCBicmFuY2gKKyAgIGlzIHNldCB0byBwdXNoIHRvIGEgcmVtb3RlIGRpZmZlcmVudCBmcm9tICR0aGVyZSwgdXNlZCB0byBwdXNoIHRvCisgICAkdGhlcmUgdXNpbmcgdGhlIHVwc3RyZWFtIGluZm9ybWF0aW9uIHRvIGEgcmVtb3RlIHVucmVsZWF0ZWQgdG8KKyAgICR0aGVyZS4KKworICogR2l2aW5nICItLWNvbnRpbnVlIiB0byBhIGNvbmZsaWN0ZWQgInJlYmFzZSAtaSIgc2Vzc2lvbiBza2lwcGVkIGEKKyAgIGNvbW1pdCB0aGF0IG9ubHkgcmVzdWx0cyBpbiBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3ZTlkNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjIudHh0CkBAIC0wLDAgKzEsODUgQEAKK0dpdCB2MS43LjEwLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTAuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSB0ZXN0IHNjYWZmb2xkaW5nIGZvciBnaXQtZGFlbW9uIHdhcyBmbGFreS4KKworICogVGhlIHRlc3Qgc2NhZmZvbGRpbmcgZm9yIGZhc3QtaW1wb3J0IHdhcyBmbGFreS4KKworICogVGhlIGZpbGVzeXN0ZW0gYm91bmRhcnkgd2FzIG5vdCBjb3JyZWN0bHkgcmVwb3J0ZWQgd2hlbiAuZ2l0IGRpcmVjdG9yeQorICAgZGlzY292ZXJ5IHN0b3BwZWQgYXQgYSBtb3VudCBwb2ludC4KKworICogSFRUUCB0cmFuc3BvcnQgdGhhdCByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiBkaWQgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4KKyAgIG11bHRpcGxlIGNvbm5lY3Rpb25zIGFyZSB1c2VkIHNpbXVsdGFuZW91c2x5LgorCisgKiBNaW5vciBtZW1vcnkgbGVhayBkdXJpbmcgdW5wYWNrX3RyZWVzIChoZW5jZSAibWVyZ2UiIGFuZCAiY2hlY2tvdXQiCisgICB0byBjaGVjayBvdXQgYW5vdGhlciBicmFuY2gpIGhhcyBiZWVuIHBsdWdnZWQuCisKKyAqIEluIHRoZSBvbGRlciBkYXlzLCB0aGUgaGVhZGVyICJDb25mbGljdHM6IiBpbiAiY2hlcnJ5LXBpY2siIGFuZCAibWVyZ2UiCisgICB3YXMgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgbGluZSBmcm9tIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgZm9sbG93IGZvcgorICAgcmVhZGFiaWxpdHksIGJ1dCB3aGVuICJtZXJnZSIgd2FzIHJld3JpdHRlbiBpbiBDLCB3ZSBsb3N0IGl0IGJ5CisgICBtaXN0YWtlLiBSZW1vdmUgdGhlIG5ld2xpbmUgZnJvbSAiY2hlcnJ5LXBpY2siIHRvIG1ha2UgdGhlbSBtYXRjaAorICAgYWdhaW4uCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgcGFyc2VyIGNob2tlZCAiZ2l0IGNoZXJyeS1waWNrICRuYW1lIiB3aGVuICRuYW1lIGNhbgorICAgYmUgYm90aCByZXZpc2lvbiBuYW1lIGFuZCBhIHBhdGhuYW1lLCBldmVuIHRob3VnaCAkbmFtZSBjYW4gbmV2ZXIgYmUgYQorICAgcGF0aCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY29tbWFuZC4KKworICogVGhlICJpbmNsdWRlLnBhdGgiIGZhY2lsaXR5IGluIHRoZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbSBhZGRlZCBpbgorICAgMS43LjEwIGZvcmdvdCB0byBpbnRlcnByZXQgIn4vcGF0aCIgYW5kICJ+dXNlci9wYXRoIiBhcyBpdCBzaG91bGQuCisKKyAqICJnaXQgY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24iIHRvIHJlbmFtZSBhbiBleGlzdGluZyBzZWN0aW9uIGludG8gYQorICAgYm9ndXMgb25lIGRpZCBub3QgY2hlY2sgdGhlIG5ldyBuYW1lLgorCisgKiBUaGUgImRpZmYgLS1uby1pbmRleCIgY29kZXBhdGggdXNlZCBsaW1pdGVkLWxlbmd0aCBidWZmZXJzLCByaXNraW5nCisgICBwYXRobmFtZXMgZ2V0dGluZyB0cnVuY2F0ZWQuICBVcGRhdGUgaXQgdG8gdXNlIHRoZSBzdHJidWYgQVBJLgorCisgKiBUaGUgcmVwb3J0IGZyb20gImdpdCBmZXRjaCIgc2FpZCAibmV3IGJyYW5jaCIgZXZlbiBmb3IgYSBub24gYnJhbmNoCisgICByZWYuCisKKyAqIFRoZSBodHRwLWJhY2tlbmQgKHRoZSBzZXJ2ZXIgc2lkZSBvZiB0aGUgc21hcnQgaHR0cCB0cmFuc2ZlcikgdXNlZAorICAgdG8gb3ZlcndyaXRlIEdJVF9DT01NSVRURVJfTkFNRSBhbmQgR0lUX0NPTU1JVFRFUl9FTUFJTCB3aXRoIHRoZQorICAgdmFsdWUgb2J0YWluZWQgZnJvbSBSRU1PVEVfVVNFUiB1bmNvbmRpdGlvbmFsbHksIG1ha2luZyBpdAorICAgaW1wb3NzaWJsZSBmb3IgdGhlIHNlcnZlciBzaWRlIHNpdGUtc3BlY2lmaWMgY3VzdG9taXphdGlvbiB0byB1c2UKKyAgIGRpZmZlcmVudCBpZGVudGl0eSBzb3VyY2VzIHRvIGFmZmVjdCB0aGUgbmFtZXMgbG9nZ2VkLiBJdCBub3cgdXNlcworICAgUkVNT1RFX1VTRVIgb25seSBhcyBhIGZhbGxiYWNrIHZhbHVlLgorCisgKiAibG9nIC0tZ3JhcGgiIHdhcyBub3QgdmVyeSBmcmllbmRseSB3aXRoICItLXN0YXQiIG9wdGlvbiBhbmQgaXRzCisgICBvdXRwdXQgaGFkIGxpbmUgYnJlYWtzIGF0IHdyb25nIHBsYWNlcy4KKworICogT2N0b3B1cyBtZXJnZSBzdHJhdGVneSBkaWQgbm90IHJlZHVjZSBoZWFkcyB0aGF0IGFyZSByZWNvcmRlZCBpbiB0aGUKKyAgIGZpbmFsIGNvbW1pdCBjb3JyZWN0bHkuCisKKyAqICJnaXQgcHVzaCIgb3ZlciBzbWFydC1odHRwIGxvc3QgcHJvZ3Jlc3Mgb3V0cHV0IGEgZmV3IHJlbGVhc2VzIGFnbzsKKyAgIHRoaXMgcmVsZWFzZSByZXN1cnJlY3RzIGl0LgorCisgKiBUaGUgZXJyb3IgYW5kIGFkdmljZSBtZXNzYWdlcyBnaXZlbiBieSAiZ2l0IHB1c2giIHdoZW4gaXQgZmFpbHMgZHVlCisgICB0byBub24tZmYgd2VyZSBub3QgdmVyeSBoZWxwZnVsIHRvIG5ldyB1c2VyczsgaXQgaGFzIGJlZW4gYnJva2VuCisgICBpbnRvIHRocmVlIGNhc2VzLCBhbmQgZWFjaCBpcyBnaXZlbiBhIHNlcGFyYXRlIGFkdmljZSBtZXNzYWdlLgorCisgKiBUaGUgaW5zbiBzaGVldCBnaXZlbiBieSAicmViYXNlIC1pIiBkaWQgbm90IG1ha2UgaXQgY2xlYXIgdGhhdCB0aGUKKyAgIGluc24gbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQgdG8gYWZmZWN0IHRoZSBvcmRlciBvZiB0aGUgY29tbWl0cyBpbgorICAgdGhlIHJlc3VsdGluZyBoaXN0b3J5LgorCisgKiAiZ2l0IHJlcGFjayIgdXNlZCB0byB3cml0ZSBvdXQgdW5yZWFjaGFibGUgb2JqZWN0cyBhcyBsb29zZSBvYmplY3RzCisgICB3aGVuIHJlcGFja2luZywgZXZlbiBpZiBzdWNoIGxvb3NlIG9iamVjdHMgd2lsbCBpbW1lZGlhdGVseSBwcnVuZWQKKyAgIGR1ZSB0byBpdHMgYWdlLgorCisgKiBBIGNvbnRyaWIgc2NyaXB0ICJyZXJlcmUtdHJhaW4iIGRpZCBub3Qgd29yayBvdXQgb2YgdGhlIGJveCB1bmxlc3MKKyAgIHVzZXIgZnV0emVkIHdpdGggaGVyICRQQVRILgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4IiB1c2VkIHRvIGVtaXQgbm90aGluZyB3aGVuIHJ1biBhdCB0aGUKKyAgIHRvcC1sZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLCBidXQgbm93IGl0IGdpdmVzIGEgYmxhbmsgbGluZS4KKworICogVGhlIGkxOG4gb2YgZXJyb3IgbWVzc2FnZSAiZ2l0IHN0YXNoIHNhdmUiIHdhcyBub3QgcHJvcGVybHkgZG9uZS4KKworICogImdpdCBzdWJtb2R1bGUiIHVzZWQgYSBzZWQgc2NyaXB0IHRoYXQgc29tZSBwbGF0Zm9ybXMgbWlzaGFuZGxlZC4KKworICogV2hlbiB1c2luZyBhIFBlcmwgc2NyaXB0IG9uIGEgc3lzdGVtIHdoZXJlICJwZXJsIiBmb3VuZCBvbiB1c2VyJ3MKKyAgICRQQVRIIGNvdWxkIGJlIGFuY2llbnQgb3Igb3RoZXJ3aXNlIGJyb2tlbiwgd2UgYWxsb3cgYnVpbGRlcnMgdG8KKyAgIHNwZWNpZnkgdGhlIHBhdGggdG8gYSBnb29kIGNvcHkgb2YgUGVybCB3aXRoICRQRVJMX1BBVEguICBUaGUKKyAgIGdpdHdlYiB0ZXN0IGZvcmdvdCB0byB1c2UgdGhhdCBQZXJsIHdoZW4gcnVubmluZyBpdHMgdGVzdC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDNmYmYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMy50eHQKQEAgLTAsMCArMSw0MyBAQAorR2l0IHYxLjcuMTAuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIG1lc3NhZ2UgZmlsZSBmb3IgR2VybWFuIHRyYW5zbGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgYSBiaXQuCisKKyAqIFJ1bm5pbmcgImdpdCBjaGVja291dCIgb24gYW4gdW5ib3JuIGJyYW5jaCB1c2VkIHRvIGNvcnJ1cHQgSEVBRC4KKworICogV2hlbiBjaGVja2luZyBvdXQgYW5vdGhlciBjb21taXQgZnJvbSBhbiBhbHJlYWR5IGRldGFjaGVkIHN0YXRlLCB3ZQorICAgdXNlZCB0byByZXBvcnQgYWxsIGNvbW1pdHMgdGhhdCBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGUKKyAgIHJlZnMgYXMgbG9zc2FnZSwgYnV0IHNvbWUgb2YgdGhlbSBtaWdodCBiZSByZWFjaGFibGUgZnJvbSB0aGUgbmV3CisgICBIRUFELCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byB3YXJuIGFib3V0IHRoZW0uCisKKyAqIFNvbWUgdGltZSBhZ28sICJnaXQgY2xvbmUiIGxvc3QgdGhlIHByb2dyZXNzIG91dHB1dCBmb3IgaXRzCisgICAiY2hlY2tvdXQiIHBoYXNlOyB3aGVuIHJ1biB3aXRob3V0IGFueSAiLS1xdWlldCIgb3B0aW9uLCBpdCBzaG91bGQKKyAgIGdpdmUgcHJvZ3Jlc3MgdG8gdGhlIGxlbmd0aHkgb3BlcmF0aW9uLgorCisgKiBUaGUgZGlyZWN0b3J5IHBhdGggdXNlZCBpbiAiZ2l0IGRpZmYgLS1uby1pbmRleCIsIHdoZW4gaXQgcmVjdXJzZXMKKyAgIGRvd24sIHdhcyBicm9rZW4gd2l0aCBhIHJlY2VudCB1cGRhdGUgYWZ0ZXIgdjEuNy4xMC4xIHJlbGVhc2UuCisKKyAqICJsb2cgLXogLS1wcmV0dHk9dGZvcm1hdDouLi4iIGRpZCBub3QgdGVybWluYXRlIGVhY2ggcmVjb3JkIHdpdGgKKyAgIE5VTC4gIFRoZSBmaXggaXMgbm90IGVudGlyZWx5IGNvcnJlY3Qgd2hlbiB0aGUgb3V0cHV0IGFsc28gYXNrcyBmb3IKKyAgIC0tcGF0Y2ggYW5kL29yIC0tc3RhdCwgdGhvdWdoLgorCisgKiBUaGUgRFdJTSBiZWhhdmlvdXIgZm9yICJsb2cgLS1wcmV0dHk9Zm9ybWF0OiVnZCAtZyIgd2FzIHNvbWV3aGF0CisgICBicm9rZW4gYW5kIGdhdmUgdW5kdWUgcHJlY2VkZW5jZSB0byBjb25maWd1cmVkIGxvZy5kYXRlLCBjYXVzaW5nCisgICAiZ2l0IHN0YXNoIGxpc3QiIHRvIHNob3cgInN0YXNoQHt0aW1lIHN0YW1wIHN0cmluZ30iLgorCisgKiAiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiIgaWdub3JlZCAiLS1icmFuY2giIG9wdGlvbiBieSBtaXN0YWtlLiAgVGhlCisgICBvdXRwdXQgZm9yICJnaXQgc3RhdHVzIC0tYnJhbmNoIC16IiB3YXMgYWxzbyBpbmNvcnJlY3QgYW5kIGRpZCBub3QKKyAgIHRlcm1pbmF0ZSB0aGUgcmVjb3JkIGZvciB0aGUgY3VycmVudCBicmFuY2ggbmFtZSB3aXRoIE5VTCBhcyBhc2tlZC4KKworICogV2hlbiBhIHN1Ym1vZHVsZSByZXBvc2l0b3J5IHVzZXMgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSBtZWNoYW5pc20sCisgICBzb21lIGNvbW1hbmRzIHRoYXQgd2VyZSBzdGFydGVkIGZyb20gdGhlIHN1cGVycHJvamVjdCBkaWQgbm90CisgICBub3RpY2UgaXQgYW5kIGZhaWxlZCB3aXRoICJObyBzdWNoIG9iamVjdCIgZXJyb3JzLiAgVGhlIHN1YmNvbW1hbmRzCisgICBvZiAiZ2l0IHN1Ym1vZHVsZSIgY29tbWFuZCB0aGF0IHJlY3Vyc2VkIGludG8gdGhlIHN1Ym1vZHVsZSBpbiBhCisgICBzZXBhcmF0ZSBwcm9jZXNzIHdlcmUgT0s7IG9ubHkgdGhlIG9uZXMgdGhhdCBjaGVhdGVkIGFuZCBwZWVrZWQKKyAgIGRpcmVjdGx5IGludG8gdGhlIHN1Ym1vZHVsZSdzIHJlcG9zaXRvcnkgZnJvbSB0aGUgcHJpbWFyeSBwcm9jZXNzCisgICB3ZXJlIGFmZmVjdGVkLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjY3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC40LnR4dApAQCAtMCwwICsxLDI5IEBACitHaXQgdjEuNy4xMC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEwLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgbWVzc2FnZSBmaWxlIGZvciBTd2VkaXNoIHRyYW5zbGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgYSBiaXQuCisKKyAqIEEgbmFtZSB0YWtlbiBmcm9tIG1haWxtYXAgd2FzIGNvcGllZCBpbnRvIGFuIGludGVybmFsIGJ1ZmZlcgorICAgaW5jb3JyZWN0bHkgYW5kIGNvdWxkIG92ZXJ1biB0aGUgYnVmZmVyIGlmIGl0IGlzIHRvbyBsb25nLgorCisgKiBBIG1hbGZvcm1lZCBjb21taXQgb2JqZWN0IHRoYXQgaGFzIGEgaGVhZGVyIGxpbmUgY2hvbXBlZCBpbiB0aGUKKyAgIG1pZGRsZSBjb3VsZCBraWxsIGdpdCB3aXRoIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLgorCisgKiBBbiBhdXRob3IvY29tbWl0dGVyIG5hbWUgdGhhdCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgd2FzIG1pc2hhbmRsZWQKKyAgIGFzIGFuIGludmFsaWQgbmFtZSBieSBtaXN0YWtlLgorCisgKiBUaGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGZvciBhIGxhcmdlICJnaXQgY2hlY2tvdXQiIHdhcyBzZW50IHRvCisgICBzdGRlcnIgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXJtaW5hbC4KKworICogImdpdCBncmVwIC1lICckcGF0dGVybiciLCB1bmxpa2UgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhdHRlcm5zIGFyZQorICAgcmVhZCBmcm9tIGEgZmlsZSwgZGlkIG5vdCB0cmVhdCBpbmRpdmlkdWFsIGxpbmVzIGluIHRoZSBnaXZlbgorICAgcGF0dGVybiBhcmd1bWVudCBhcyBzZXBhcmF0ZSByZWd1bGFyIGV4cHJlc3Npb25zIGFzIGl0IHNob3VsZC4KKworICogV2hlbiAiZ2l0IHJlYmFzZSIgd2FzIGdpdmVuIGEgYmFkIGNvbW1pdCB0byByZXBsYXkgdGhlIGhpc3Rvcnkgb24sCisgICBpdHMgZXJyb3IgbWVzc2FnZSBkaWQgbm90IGNvcnJlY3RseSBnaXZlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQKKyAgIGl0IGhhZCB0cm91YmxlIHBhcnNpbmcuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiMTc3MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjUudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dpdCB2MS43LjEwLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTAuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGRpZCBub3QgZ2l2ZSBhIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUKKyAgIHNhbWUgbWFyayBlcnJvbmVvdXNseSBhcHBlYXJlZCB0d2ljZSBpbiB0aGUgLS1pbXBvcnQtbWFya3MgaW5wdXQuCisKKyAqICJnaXQgcmViYXNlIC1wIiB1c2VkIHRvIHBheSBhdHRlbnRpb24gdG8gcmViYXNlLmF1dG9zcXVhc2ggd2hpY2gKKyAgICB3YXMgd3JvbmcuICAiZ2l0IHJlYmFzZSAtcCAtaSIgc2hvdWxkLCBidXQgImdpdCByZWJhc2UgLXAiIGJ5CisgICAgaXRzZWxmIHNob3VsZCBub3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMDBiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLnR4dApAQCAtMCwwICsxLDIxOSBAQAorR2l0IHYxLjcuMTAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb21wYXRpYmlsaXR5IE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEZyb20gdGhpcyByZWxlYXNlIG9uLCB0aGUgImdpdCBtZXJnZSIgY29tbWFuZCBpbiBhbiBpbnRlcmFjdGl2ZQorICAgc2Vzc2lvbiB3aWxsIHN0YXJ0IGFuIGVkaXRvciB3aGVuIGl0IGF1dG9tYXRpY2FsbHkgcmVzb2x2ZXMgdGhlCisgICBtZXJnZSBmb3IgdGhlIHVzZXIgdG8gZXhwbGFpbiB0aGUgcmVzdWx0aW5nIGNvbW1pdCwganVzdCBsaWtlIHRoZQorICAgImdpdCBjb21taXQiIGNvbW1hbmQgZG9lcyB3aGVuIGl0IHdhc24ndCBnaXZlbiBhIGNvbW1pdCBtZXNzYWdlLgorCisgICBJZiB5b3UgaGF2ZSBhIHNjcmlwdCB0aGF0IHJ1bnMgImdpdCBtZXJnZSIgYW5kIGtlZXBzIGl0cyBzdGFuZGFyZAorICAgaW5wdXQgYW5kIG91dHB1dCBhdHRhY2hlZCB0byB0aGUgdXNlcidzIHRlcm1pbmFsLCBhbmQgaWYgeW91IGRvIG5vdAorICAgd2FudCB0aGUgdXNlciB0byBleHBsYWluIHRoZSByZXN1bHRpbmcgbWVyZ2UgY29tbWl0cywgeW91IGNhbgorICAgZXhwb3J0IEdJVF9NRVJHRV9BVVRPRURJVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQgdG8gIm5vIiwgbGlrZQorICAgdGhpczoKKworCSMhL2Jpbi9zaAorCUdJVF9NRVJHRV9BVVRPRURJVD1ubworCWV4cG9ydCBHSVRfTUVSR0VfQVVUT0VESVQKKworICAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yIChpZiB5b3Ugd2FudCB5b3VyIHVzZXJzIHRvIGV4cGxhaW4gdGhlaXIKKyAgIG1lcmdlIGNvbW1pdHMsIHlvdSBkbyBub3QgaGF2ZSB0byBkbyBhbnl0aGluZykuICBBbHRlcm5hdGl2ZWx5LCB5b3UKKyAgIGNhbiBnaXZlIHRoZSAiLS1uby1lZGl0IiBvcHRpb24gdG8gaW5kaXZpZHVhbCBpbnZvY2F0aW9ucyBvZiB0aGUKKyAgICJnaXQgbWVyZ2UiIGNvbW1hbmQgaWYgeW91IGtub3cgZXZlcnlib2R5IHdobyB1c2VzIHlvdXIgc2NyaXB0IGhhcworICAgR2l0IHYxLjcuOCBvciBuZXdlci4KKworICogVGhlICItLWJpbmFyeS8tYiIgb3B0aW9ucyB0byAiZ2l0IGFtIiBoYXZlIGJlZW4gYSBuby1vcCBmb3IgcXVpdGUgYQorICAgd2hpbGUgYW5kIHdlcmUgZGVwcmVjYXRlZCBpbiBtaWQgMjAwOCAodjEuNi4wKS4gIFdoZW4geW91IGdpdmUgdGhlc2UKKyAgIG9wdGlvbnMgdG8gImdpdCBhbSIsIGl0IHdpbGwgbm93IHdhcm4gYW5kIGFzayB5b3Ugbm90IHRvIHVzZSB0aGVtLgorCisgKiBXaGVuIHlvdSBkbyBub3QgdGVsbCB3aGljaCBicmFuY2hlcyBhbmQgdGFncyB0byBwdXNoIHRvIHRoZSAiZ2l0CisgICBwdXNoIiBjb21tYW5kIGluIGFueSB3YXksIHRoZSBjb21tYW5kIHVzZWQgIm1hdGNoaW5nIHJlZnMiIHJ1bGUgdG8KKyAgIHVwZGF0ZSByZW1vdGUgYnJhbmNoZXMgYW5kIHRhZ3Mgd2l0aCBicmFuY2hlcyBhbmQgdGFncyB3aXRoIHRoZQorICAgc2FtZSBuYW1lIHlvdSBsb2NhbGx5IGhhdmUuICBJbiBmdXR1cmUgdmVyc2lvbnMgb2YgR2l0LCB0aGlzIHdpbGwKKyAgIGNoYW5nZSB0byBwdXNoIG91dCBvbmx5IHlvdXIgY3VycmVudCBicmFuY2ggYWNjb3JkaW5nIHRvIGVpdGhlciB0aGUKKyAgICJ1cHN0cmVhbSIgb3IgdGhlICJjdXJyZW50IiBydWxlLiAgQWx0aG91Z2ggInVwc3RyZWFtIiBtYXkgYmUgbW9yZQorICAgcG93ZXJmdWwgb25jZSB0aGUgdXNlciB1bmRlcnN0YW5kcyBHaXQgYmV0dGVyLCB0aGUgc2VtYW50aWNzCisgICAiY3VycmVudCIgZ2l2ZXMgaXMgc2ltcGxlciBhbmQgZWFzaWVyIHRvIHVuZGVyc3RhbmQgZm9yIGJlZ2lubmVycworICAgYW5kIG1heSBiZSBhIHNhZmVyIGFuZCBiZXR0ZXIgZGVmYXVsdCBvcHRpb24uICBXZSBoYXZlbid0IGRlY2lkZWQKKyAgIHlldCB3aGljaCBvbmUgdG8gc3dpdGNoIHRvLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNy45CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogdmFyaW91cyAiZ2l0ayIgdXBkYXRlcy4KKyAgIC0gc2hvdyB0aGUgcGF0aCB0byB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSBpbiB0aGUgd2luZG93IHRpdGxlCisgICAtIHVwZGF0ZSBwcmVmZXJlbmNlIGVkaXQgZGlhbG9nCisgICAtIGRpc3BsYXkgZmlsZSBsaXN0IGNvcnJlY3RseSB3aGVuIGRpcmVjdG9yaWVzIGFyZSBnaXZlbiBvbiBjb21tYW5kIGxpbmUKKyAgIC0gbWFrZSAiZ2l0LWRlc2NyaWJlIiBvdXRwdXQgaW4gdGhlIGxvZyBtZXNzYWdlIGludG8gYSBjbGlja2FibGUgbGluaworICAgLSBhdm9pZCBtYXRjaGluZyB0aGUgVU5JWCB0aW1lc3RhbXAgcGFydCB3aGVuIHNlYXJjaGluZyBhbGwgZmllbGRzCisgICAtIGdpdmUgcHJlZmVyZW5jZSB0byBzeW1ib2xpYyBmb250IG5hbWVzIGxpa2Ugc2FucyAmIG1vbm9zcGFjZQorICAgLSBhbGxvdyBjb21wYXJpbmcgdHdvIGNvbW1pdHMgdXNpbmcgYSBtYXJrCisgICAtICJnaXRrIiBob25vcnMgbG9nLnNob3dyb290IGNvbmZpZ3VyYXRpb24uCisKKyAqIFRlYW1zIGZvciBsb2NhbGl6aW5nIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBQb3JjZWxhaW4gbGF5ZXIgb2YKKyAgIGNvbW1hbmRzIGFyZSBzdGFydGluZyB0byBmb3JtLCB0aGFua3MgdG8gSmlhbmcgWGluIHdobyB2b2x1bnRlZXJlZAorICAgdG8gYmUgdGhlIGxvY2FsaXphdGlvbiBjb29yZGluYXRvci4gIFRyYW5zbGF0ZWQgbWVzc2FnZXMgZm9yCisgICBzaW1wbGlmaWVkIENoaW5lc2UsIFN3ZWRpc2ggYW5kIFBvcnR1Z3Vlc2UgYXJlIGF2YWlsYWJsZS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtIGxlYXJuZWQgYW4gImluY2x1ZGUiIGZhY2lsaXR5OyBhbgorICAgYXNzaWdubWVudCB0byB0aGUgaW5jbHVkZS5wYXRoIHBzZXVkby12YXJpYWJsZSBjYXVzZXMgdGhlIG5hbWVkCisgICBmaWxlIHRvIGJlIGluY2x1ZGVkIGluLXBsYWNlIHdoZW4gR2l0IGxvb2tzIHVwIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlcy4KKworICogQSBjb250ZW50IGZpbHRlciAoY2xlYW4vc211ZGdlKSB1c2VkIHRvIGJlIGp1c3QgYSB3YXkgdG8gbWFrZSB0aGUKKyAgIHJlY29yZGVkIGNvbnRlbnRzICJtb3JlIHVzZWZ1bCIsIGFuZCBhbGxvd2VkIHRvIGZhaWw7IGEgZmlsdGVyIGNhbgorICAgbm93IG9wdGlvbmFsbHkgYmUgbWFya2VkIGFzICJyZXF1aXJlZCIuCisKKyAqIE9wdGlvbnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAiLS1uby0iIChlLmcuIHRoZSAiLS1uby12ZXJpZnkiCisgICBvcHRpb24gb2YgdGhlICJnaXQgY29tbWl0IiBjb21tYW5kKSBjYW4gYmUgbmVnYXRlZCBieSBvbWl0dGluZworICAgIm5vLSIgZnJvbSBpdHMgbmFtZSwgZS5nLiAiZ2l0IGNvbW1pdCAtLXZlcmlmeSIuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgdG8gcGFzcyAiLWIiIG9wdGlvbiB0byB1bmRlcmx5aW5nICJnaXQgbWFpbGluZm8iLCBzbworICAgdGhhdCBhIGJyYWNrZXRlZCBzdHJpbmcgb3RoZXIgdGhhbiAiUEFUQ0giIGF0IHRoZSBiZWdpbm5pbmcgY2FuIGJlIGtlcHQuCisKKyAqICJnaXQgY2xvbmUiIGxlYXJuZWQgIi0tc2luZ2xlLWJyYW5jaCIgb3B0aW9uIHRvIGxpbWl0IGNsb25pbmcgdG8gYQorICAgc2luZ2xlIGJyYW5jaCAoc3VycHJpc2UhKTsgdGFncyB0aGF0IGRvIG5vdCBwb2ludCBpbnRvIHRoZSBoaXN0b3J5CisgICBvZiB0aGUgYnJhbmNoIGFyZSBub3QgZmV0Y2hlZC4KKworICogImdpdCBjbG9uZSIgbGVhcm5lZCB0byBkZXRhY2ggdGhlIEhFQUQgaW4gdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5CisgICB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcyBhIHRhZyB3aXRoICItLWJyYW5jaCIgKGUuZy4sICItLWJyYW5jaD12MS4wIikuCisgICBDbG9uZSBhbHNvIGxlYXJuZWQgdG8gcHJpbnQgdGhlIHVzdWFsICJkZXRhY2hlZCBIRUFEIiBhZHZpY2UgaW4gc3VjaAorICAgYSBjYXNlLCBzaW1pbGFyIHRvICJnaXQgY2hlY2tvdXQgdjEuMCIuCisKKyAqIFdoZW4gc2hvd2luZyBhIHBhdGNoIHdoaWxlIGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcywgdGhlIGNvbnRleHQKKyAgIGxpbmVzIGFyZSB0YWtlbiBmcm9tIHRoZSBwb3N0aW1hZ2UsIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIHRvCisgICB2aWV3IHRoZSBvdXRwdXQuCisKKyAqICJnaXQgZGlmZiAtLXN0YXQiIGxlYXJuZWQgdG8gYWRqdXN0IHRoZSB3aWR0aCBvZiB0aGUgb3V0cHV0IG9uCisgICB3aWRlciB0ZXJtaW5hbHMsIGFuZCBnaXZlIG1vcmUgY29sdW1ucyB0byBwYXRobmFtZXMgYXMgbmVlZGVkLgorCisgKiAiZGlmZi1oaWdobGlnaHQiIGZpbHRlciAoaW4gY29udHJpYi8pIHdhcyB1cGRhdGVkIHRvIHByb2R1Y2UgbW9yZQorICAgYWVzdGhldGljYWxseSBwbGVhc2luZyBvdXRwdXQuCisKKyAqICJmc2NrIiBsZWFybmVkICItLW5vLWRhbmdsaW5nIiBvcHRpb24gdG8gb21pdCBkYW5nbGluZyBvYmplY3QKKyAgIGluZm9ybWF0aW9uLgorCisgKiAiZ2l0IGxvZyAtRyIgYW5kICJnaXQgbG9nIC1TIiBsZWFybmVkIHRvIHBheSBhdHRlbnRpb24gdG8gdGhlICItaSIKKyAgIG9wdGlvbi4gIFdpdGggIi1pIiwgImxvZyAtRyIgaWdub3JlcyB0aGUgY2FzZSB3aGVuIGZpbmRpbmcgcGF0Y2gKKyAgIGh1bmtzIHRoYXQgaW50cm9kdWNlIG9yIHJlbW92ZSBhIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICBwYXR0ZXJuLiAgU2ltaWxhcmx5IHdpdGggIi1pIiwgImxvZyAtUyIgaWdub3JlcyB0aGUgY2FzZSB3aGVuCisgICBmaW5kaW5nIHRoZSBjb21taXQgdGhlIGdpdmVuIGJsb2NrIG9mIHRleHQgYXBwZWFycyBvciBkaXNhcHBlYXJzCisgICBmcm9tIHRoZSBmaWxlLgorCisgKiAiZ2l0IG1lcmdlIiBpbiBhbiBpbnRlcmFjdGl2ZSBzZXNzaW9uIGxlYXJuZWQgdG8gc3Bhd24gdGhlIGVkaXRvcgorICAgYnkgZGVmYXVsdCB0byBsZXQgdGhlIHVzZXIgZWRpdCB0aGUgYXV0by1nZW5lcmF0ZWQgbWVyZ2UgbWVzc2FnZSwKKyAgIHRvIGVuY291cmFnZSBwZW9wbGUgdG8gZXhwbGFpbiB0aGVpciBtZXJnZXMgYmV0dGVyLiBMZWdhY3kgc2NyaXB0cworICAgY2FuIGV4cG9ydCBHSVRfTUVSR0VfQVVUT0VESVQ9bm8gdG8gcmV0YWluIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yLgorICAgQm90aCAiZ2l0IG1lcmdlIiBhbmQgImdpdCBwdWxsIiBjYW4gYmUgZ2l2ZW4gLS1uby1lZGl0IGZyb20gdGhlCisgICBjb21tYW5kIGxpbmUgdG8gYWNjZXB0IHRoZSBhdXRvLWdlbmVyYXRlZCBtZXJnZSBtZXNzYWdlLgorCisgKiBUaGUgYWR2aWNlIG1lc3NhZ2UgZ2l2ZW4gd2hlbiB0aGUgdXNlciBkaWRuJ3QgZ2l2ZSBlbm91Z2ggY2x1ZSBvbgorICAgd2hhdCB0byBtZXJnZSB0byAiZ2l0IHB1bGwiIGFuZCAiZ2l0IG1lcmdlIiBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBiZSBtb3JlIGNvbmNpc2UgYW5kIGVhc2llciB0byB1bmRlcnN0YW5kLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgdGhlICItLXBydW5lIiBvcHRpb24sIHNpbWlsYXIgdG8gImdpdCBmZXRjaCIuCisKKyAqIFRoZSB3aG9sZSBkaXJlY3RvcnkgdGhhdCBob3VzZXMgYSB0b3AtbGV2ZWwgc3VwZXJwcm9qZWN0IG1hbmFnZWQgYnkKKyAgICJnaXQgc3VibW9kdWxlIiBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBwbGFjZS4KKworICogImdpdCBzeW1ib2xpYy1yZWYiIGxlYXJuZWQgdGhlICItLXNob3J0IiBvcHRpb24gdG8gYWJicmV2aWF0ZSB0aGUKKyAgIHJlZm5hbWUgaXQgc2hvd3MgdW5hbWJpZ3VvdXNseS4KKworICogImdpdCB0YWcgLS1saXN0IiBjYW4gYmUgZ2l2ZW4gIi0tcG9pbnRzLWF0IDxvYmplY3Q+IiB0byBsaW1pdCBpdHMKKyAgIG91dHB1dCB0byB0aG9zZSB0aGF0IHBvaW50IGF0IHRoZSBnaXZlbiBvYmplY3QuCisKKyAqICJnaXR3ZWIiIGFsbG93cyBpbnRlcm1lZGlhdGUgZW50cmllcyBpbiB0aGUgZGlyZWN0b3J5IGhpZXJhcmNoeQorICAgdGhhdCBsZWFkcyB0byBhIHByb2plY3QgdG8gYmUgY2xpY2tlZCwgd2hpY2ggaW4gdHVybiBzaG93cyB0aGUKKyAgIGxpc3Qgb2YgcHJvamVjdHMgaW5zaWRlIHRoYXQgZGlyZWN0b3J5LgorCisgKiAiZ2l0d2ViIiBsZWFybmVkIHRvIHJlYWQgdmFyaW91cyBwaWVjZXMgb2YgaW5mb3JtYXRpb24gZm9yIHRoZQorICAgcmVwb3NpdG9yaWVzIGxhemlseSwgaW5zdGVhZCBvZiByZWFkaW5nIGV2ZXJ5dGhpbmcgdGhhdCBjb3VsZCBiZQorICAgbmVlZGVkIChpbmNsdWRpbmcgdGhlIG9uZXMgdGhhdCBhcmUgbm90IG5lY2Vzc2FyeSBmb3IgYSBzcGVjaWZpYworICAgdGFzaykuCisKKyAqIFByb2plY3Qgc2VhcmNoIGluICJnaXR3ZWIiIHNob3dzIHRoZSBzdWJzdHJpbmcgdGhhdCBtYXRjaGVkIGluIHRoZQorICAgcHJvamVjdCBuYW1lIGFuZCBkZXNjcmlwdGlvbiBoaWdobGlnaHRlZC4KKworICogSFRUUCB0cmFuc3BvcnQgbGVhcm5lZCB0byBhdXRoZW50aWNhdGUgd2l0aCBhIHByb3h5IGlmIG5lZWRlZC4KKworICogQSBuZXcgc2NyaXB0ICJkaWZmYWxsIiBpcyBhZGRlZCB0byBjb250cmliLzsgaXQgZHJpdmVzIGFuCisgICBleHRlcm5hbCB0b29sIHRvIHBlcmZvcm0gYSBkaXJlY3RvcnkgZGlmZiBvZiB0d28gR2l0IHJldmlzaW9ucworICAgaW4gb25lIGdvLCB1bmxpa2UgImRpZmZ0b29sIiB0aGF0IGNvbXBhcmVzIG9uZSBmaWxlIGF0IGEgdGltZS4KKworRm9yZWlnbiBJbnRlcmZhY2UKKworICogSW1wcm92ZWQgaGFuZGxpbmcgb2Ygdmlld3MsIGxhYmVscyBhbmQgYnJhbmNoZXMgaW4gImdpdC1wNCIgKGluIGNvbnRyaWIpLgorCisgKiAiZ2l0LXA0IiAoaW4gY29udHJpYikgc3VmZmVyZWQgZnJvbSB1bm5lY2Vzc2FyeSBtZXJnZSBjb25mbGljdHMgd2hlbgorICAgcDQgZXhwYW5kZWQgdGhlIGVtYmVkZGVkICRSQ1MkLWxpa2Uga2V5d29yZHM7IGl0IGNhbiBiZSBub3cgdG9sZCB0bworICAgdW5leHBhbmQgdGhlbS4KKworICogU29tZSAiZ2l0LXN2biIgdXBkYXRlcy4KKworICogInZjcy1zdm4iLyJzdm4tZmUiIGxlYXJuZWQgdG8gcmVhZCBkdW1wcyB3aXRoIHN2bi1kZWx0YXMgYW5kCisgICBzdXBwb3J0IGluY3JlbWVudGFsIGltcG9ydHMuCisKKyAqICJnaXQgZGlmZnRvb2wvbWVyZ2V0b29sIiBsZWFybmVkIHRvIGRyaXZlIERlbHRhV2Fsa2VyLgorCitQZXJmb3JtYW5jZQorCisgKiBVbm5lY2Vzc2FyeSBjYWxscyB0byBwYXJzZV9vYmplY3QoKSAiZ2l0IHVwbG9hZC1wYWNrIiBtYWtlcyBpbgorICAgcmVzcG9uc2UgdG8gImdpdCBmZXRjaCIsIGhhdmUgYmVlbiBlbGltaW5hdGVkLCB0byBoZWxwIHBlcmZvcm1hbmNlCisgICBpbiByZXBvc2l0b3JpZXMgd2l0aCBleGNlc3NpdmUgbnVtYmVyIG9mIHJlZnMuCisKK0ludGVybmFsIEltcGxlbWVudGF0aW9uIChwbGVhc2UgcmVwb3J0IHBvc3NpYmxlIHJlZ3Jlc3Npb25zKQorCisgKiBSZWN1cnNpdmUgY2FsbCBjaGFpbnMgaW4gImdpdCBpbmRleC1wYWNrIiB0byBkZWFsIHdpdGggbG9uZyBkZWx0YQorICAgY2hhaW5zIGhhdmUgYmVlbiBmbGF0dGVuZWQsIHRvIHJlZHVjZSB0aGUgc3RhY2sgZm9vdHByaW50LgorCisgKiBVc2Ugb2YgYWRkX2V4dHJhX3JlZigpIEFQSSBpcyBub3cgZ29uZSwgdG8gbWFrZSBpdCBwb3NzaWJsZSB0bworICAgY2xlYW5seSByZXN0cnVjdHVyZSB0aGUgb3ZlcmFsbCByZWZzIEFQSS4KKworICogVGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgb2YgImdpdCBwYWNrLW9iamVjdHMiIG5vdyB1c2VzIHBhcnNlLW9wdGlvbnMKKyAgIEFQSS4KKworICogVGhlIHRlc3Qgc3VpdGUgc3VwcG9ydHMgdGhlIG5ldyAidGVzdF9wYXVzZSIgaGVscGVyIGZ1bmN0aW9uLgorCisgKiBQYXJhbGxlbCB0byB0aGUgdGVzdCBzdWl0ZSwgdGhlcmUgaXMgYSBiZWdpbm5pbmcgb2YgcGVyZm9ybWFuY2UKKyAgIGJlbmNobWFya2luZyBmcmFtZXdvcmsuCisKKyAqIHQvTWFrZWZpbGUgaXMgYWRqdXN0ZWQgdG8gcHJldmVudCBuZXdlciB2ZXJzaW9ucyBvZiBHTlUgbWFrZSBmcm9tCisgICBydW5uaW5nIHRlc3RzIGluIHNlZW1pbmdseSByYW5kb20gb3JkZXIuCisKKyAqIFRoZSBjb2RlIHRvIGNoZWNrIGlmIGEgcGF0aCBwb2ludHMgYXQgYSBmaWxlIGJleW9uZCBhIHN5bWJvbGljIGxpbmsKKyAgIGhhcyBiZWVuIHJlc3RydWN0dXJlZCB0byBiZSB0aHJlYWQtc2FmZS4KKworICogV2hlbiBwcnVuaW5nIGRpcmVjdG9yaWVzIHRoYXQgaGFzIGJlY29tZSBlbXB0eSBkdXJpbmcgImdpdCBwcnVuZSIKKyAgIGFuZCAiZ2l0IHBydW5lLXBhY2tlZCIsIGNhbGwgY2xvc2VkaXIoKSB0aGF0IGl0ZXJhdGVzIG92ZXIgYQorICAgZGlyZWN0b3J5IGJlZm9yZSBybWRpcigpIGl0LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy45CistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS43LjkgaW4gdGhlIG1haW50ZW5hbmNlCityZWxlYXNlcyBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiBCdWlsZCB3aXRoIE5PX1BFUkxfTUFLRU1BS0VSIHdhcyBicm9rZW4gYW5kIEdpdDo6STE4TiBkaWQgbm90IHdvcmsKKyAgIHdpdGggdmVyc2lvbnMgb2YgUGVybCBvbGRlciB0aGFuIDUuOC4zLgorICAgKG1lcmdlIDVlYjY2MGUgYWIvcGVybC1pMThuIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCB0YWcgLXMiIGhvbm9yZWQgImdwZy5wcm9ncmFtIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHNpbmNlCisgICAxLjcuOSwgYnV0ICJnaXQgdGFnIC12IiBhbmQgImdpdCB2ZXJpZnktdGFnIiBkaWRuJ3QuCisgICAobWVyZ2UgYTJjMjUwNiBhei92ZXJpZnktdGFnLXVzZS1ncGctY29uZmlnIGxhdGVyIHRvIG1haW50KS4KKworICogImNvbmZpZ3VyZSIgc2NyaXB0IGxlYXJuZWQgdG8gdGFrZSAiLS13aXRoLXNhbmUtdG9vbC1wYXRoIiBmcm9tIHRoZQorICAgY29tbWFuZCBsaW5lIHRvIHJlY29yZCBTQU5FX1RPT0xfUEFUSCAodXNlZCB0byBhdm9pZCBicm9rZW4gcGxhdGZvcm0KKyAgIHRvb2xzIGluIC91c3IvYmluKSBpbiBjb25maWcubWFrLmF1dG9nZW4uICBUaGlzIG1heSBiZSB1c2VmdWwgZm9yCisgICBwZW9wbGUgb24gU29sYXJpcyB3aG8gaGF2ZSBzYW5lciB0b29scyBvdXRzaWRlIC91c3IveHBnWzQ2XS9iaW4uCisKKyAqIHpzaCBwb3J0IG9mIGJhc2ggY29tcGxldGlvbiBzY3JpcHQgbmVlZGVkIGFub3RoZXIgd29ya2Fyb3VuZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3ZWNjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjEudHh0CkBAIC0wLDAgKzEsOSBAQAorR2l0IHYxLjcuMTEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgY3Jvc3MgbGlua3MgaW4gdGhlIEhUTUwgdmVyc2lvbiBvZiBtYW51YWwgcGFnZXMgd2VyZSBicm9rZW4uCisKK0Fsc28gY29udGFpbnMgbWlub3IgdHlwb2ZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDI0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4yLnR4dApAQCAtMCwwICsxLDUzIEBACitHaXQgdjEuNy4xMS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBPbiBDeWd3aW4sIHRoZSBwbGF0Zm9ybSBwcmVhZCgyKSBpcyBub3QgdGhyZWFkIHNhZmUsIGp1c3QgbGlrZSBvdXIKKyAgIG93biBjb21wYXQvIGVtdWxhdGlvbiwgYW5kIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBpbmRleC1wYWNrCisgICBwcm9ncmFtLiAgTWFrZWZpbGUgdmFyaWFibGUgTk9fVEhSRUFEX1NBRkVfUFJFQUQgY2FuIGJlIGRlZmluZWQgdG8KKyAgIGF2b2lkIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGluIGEgdGhyZWFkZWQgcHJvZ3JhbS4KKworICogImdpdCBhZGQiIGFsbG93cyBhZGRpbmcgYSByZWd1bGFyIGZpbGUgdG8gdGhlIHBhdGggd2hlcmUgYQorICAgc3VibW9kdWxlIHVzZWQgdG8gZXhpc3QsIGJ1dCAiZ2l0IHVwZGF0ZS1pbmRleCIgZG9lcyBub3QgYWxsb3cgYW4KKyAgIGVxdWl2YWxlbnQgb3BlcmF0aW9uIHRvIFBvcmNlbGFpbiB3cml0ZXJzLgorCisgKiAiZ2l0IGFyY2hpdmUiIGluY29ycmVjdGx5IGNvbXB1dGVkIHRoZSBoZWFkZXIgY2hlY2tzdW07IHRoZSBzeW1wdG9tCisgICB3YXMgb2JzZXJ2ZWQgb25seSB3aGVuIHVzaW5nIHBhdGhuYW1lcyB3aXRoIGhpLWJpdCBzZXQuCisKKyAqICJnaXQgYmxhbWUiIGRpZCBub3QgdHJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhYmJyZXZpYXRlZCBjb21taXQKKyAgIG9iamVjdCBuYW1lcyBpbiBpdHMgb3V0cHV0IGFyZSB1bmlxdWUuCisKKyAqIFJ1bm5pbmcgImdpdCBidW5kbGUgdmVyaWZ5IiBvbiBhIGJ1bmRsZSB0aGF0IHJlY29yZHMgYSBjb21wbGV0ZQorICAgaGlzdG9yeSBzYWlkICJpdCByZXF1aXJlcyB0aGVzZSAwIGNvbW1pdHMiLgorCisgKiAiZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCIgdG8gY2xvbmUgYSBzaW5nbGUgYnJhbmNoIGRpZCBub3QgbGltaXQKKyAgIHRoZSBjbG9uaW5nIHRvIHRoZSBzcGVjaWZpZWQgYnJhbmNoLgorCisgKiAiZ2l0IGRpZmYgLS1uby1pbmRleCIgZGlkIG5vdCBjb3JyZWN0bHkgaGFuZGxlIHJlbGF0aXZlIHBhdGhzIGFuZAorICAgZGlkIG5vdCBjb3JyZWN0bHkgZ2l2ZSBleGl0IGNvZGVzIHdoZW4gcnVuIHVuZGVyICItLXF1aWV0IiBvcHRpb24uCisKKyAqICJnaXQgZGlmZiAtLW5vLWluZGV4IiBkaWQgbm90IHdvcmsgd2l0aCBwYWdlcnMgY29ycmVjdGx5LgorCisgKiAiZ2l0IGRpZmYgQ09QWUlORyBIRUFEOkNPUFlJTkciIGdhdmUgYSBub25zZW5zZSBlcnJvciBtZXNzYWdlIHRoYXQKKyAgIGNsYWltZWQgdGhhdCB0aGUgdHJlZWlzaCBIRUFEIGRpZCBub3QgaGF2ZSBDT1BZSU5HIGluIGl0LgorCisgKiBXaGVuICJnaXQgbG9nIiBnZXRzICItLXNpbXBsaWZ5LW1lcmdlcy9ieS1kZWNvcmF0aW9uIiB0b2dldGhlciB3aXRoCisgICAiLS1maXJzdC1wYXJlbnQiLCB0aGUgY29tYmluYXRpb24gb2YgdGhlc2Ugb3B0aW9ucyBtYWtlcyB0aGUKKyAgIHNpbXBsaWZpY2F0aW9uIGxvZ2ljIHRvIHVzZSBpbi1jb3JlIGNvbW1pdCBvYmplY3RzIHRoYXQgaGF2ZW4ndAorICAgYmVlbiBleGFtaW5lZCBmb3IgcmVsZXZhbmNlLCBlaXRoZXIgcHJvZHVjaW5nIGluY29ycmVjdCByZXN1bHQgb3IKKyAgIHRha2luZyB0b28gbG9uZyB0byBwcm9kdWNlIGFueSBvdXRwdXQuICBUZWFjaCB0aGUgc2ltcGxpZmljYXRpb24KKyAgIGxvZ2ljIHRvIGlnbm9yZSBjb21taXRzIHRoYXQgdGhlIGZpcnN0LXBhcmVudCB0cmF2ZXJzYWwgbG9naWMKKyAgIGlnbm9yZWQgd2hlbiBib3RoIGFyZSBpbiBlZmZlY3QgdG8gd29yayBhcm91bmQgdGhlIGlzc3VlLgorCisgKiAiZ2l0IGxzLWZpbGVzIC0tZXhjbHVkZT10IC1pIiBkaWQgbm90IGNvbnNpZGVyIGFueXRoaW5nIHVuZGVyIHQvIGFzCisgICBleGNsdWRlZCwgYXMgaXQgZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvIGV4Y2x1c2lvbiBvZiBsZWFkaW5nIHBhdGhzCisgICB3aGlsZSB3YWxraW5nIHRoZSBpbmRleC4gIE90aGVyIHR3byB1c2VycyBvZiBleGNsdWRlZCgpIGFyZSBhbHNvCisgICB1cGRhdGVkLgorCisgKiAiZ2l0IHJlcXVlc3QtcHVsbCAkdXJsIGRldiIgd2hlbiB0aGUgdGlwIG9mICJkZXYiIGJyYW5jaCB3YXMgdGFnZ2VkCisgICB3aXRoICJleHQ0LWZvci1saW51cyIgdXNlZCB0aGUgY29udGVudHMgZnJvbSB0aGUgdGFnIGluIHRoZSBvdXRwdXQKKyAgIGJ1dCBzdGlsbCBhc2tlZCB0aGUgImRldiIgYnJhbmNoIHRvIGJlIHB1bGxlZCwgbm90IHRoZSB0YWcuCisKK0Fsc28gY29udGFpbnMgbWlub3IgdHlwb2ZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NDk0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4zLnR4dApAQCAtMCwwICsxLDUzIEBACitHaXQgdjEuNy4xMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgcHVzaCAkdGhlcmUgOmJvZ28iIChhbmQgaXRzIGVxdWl2YWxlbnQKKyAgICJnaXQgcHVzaCAkdGhlcmUgLS1kZWxldGUgYm9nbyIpIG1lbnRpb25lZCB0aGF0IHdlIHRyaWVkIGFuZCBmYWlsZWQKKyAgIHRvIGd1ZXNzIHdoYXQgcmVmIGlzIGJlaW5nIGRlbGV0ZWQgYmFzZWQgb24gdGhlIExIUyBvZiB0aGUgcmVmc3BlYywKKyAgIHdoaWNoIHdlIGRvbid0LgorCisgKiBBIGhhbmRmdWwgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdlIGNyZWF0ZSBoYWQgdGlnaHRlciB0aGFuCisgICBuZWNlc3NhcnkgcGVybWlzc2lvbiBiaXRzIHdoZW4gdGhlIHVzZXIgd2FudGVkIHRvIGhhdmUgZ3JvdXAKKyAgIHdyaXRhYmlsaXR5IChlLmcuIGJ5IHNldHRpbmcgInVtYXNrIDAwMiIpLgorCisgKiAiY29tbWl0IC0tYW1lbmQiIHVzZWQgdG8gcmVmdXNlIGFtZW5kaW5nIGEgY29tbWl0IHdpdGggYW4gZW1wdHkgbG9nCisgICBtZXNzYWdlLCB3aXRoIG9yIHdpdGhvdXQgIi0tYWxsb3ctZW1wdHktbWVzc2FnZSIuCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQgLS1vbmx5IC0tIiB3YXMgbWVhbnQgdG8gYWxsb3cgIkNsZXZlciIgcGVvcGxlIHRvCisgICByZXdyaXRlIHRoZSBjb21taXQgbWVzc2FnZSB3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlIGV2ZW4gd2hlbiB0aGV5CisgICBoYXZlIGFscmVhZHkgY2hhbmdlcyBmb3IgdGhlIG5leHQgY29tbWl0IGFkZGVkIHRvIHRoZWlyIGluZGV4LCBidXQKKyAgIGl0IG5ldmVyIHdvcmtlZCBhcyBhZHZlcnRpc2VkIHNpbmNlIGl0IHdhcyBpbnRyb2R1Y2VkIGluIDEuMy4wIGVyYS4KKworICogRXZlbiB0aG91Z2ggdGhlIGluZGV4IGNhbiByZWNvcmQgcGF0aG5hbWVzIGxvbmdlciB0aGFuIDE8PDEyIGJ5dGVzLAorICAgaW4gc29tZSBwbGFjZXMgd2Ugd2VyZSBub3QgY29tcGFyaW5nIHRoZW0gaW4gZnVsbCwgcG90ZW50aWFsbHkKKyAgIHJlcGxhY2luZyBpbmRleCBlbnRyaWVzIGluc3RlYWQgb2YgYWRkaW5nLgorCisgKiAiZ2l0IHNob3ciJ3MgYXV0by13YWxraW5nIGJlaGF2aW91ciB3YXMgYW4gdW5yZWxpYWJsZSBhbmQKKyAgIHVucHJlZGljdGFibGUgaGFjazsgaXQgbm93IGJlaGF2ZXMganVzdCBsaWtlICJnaXQgbG9nIiBkb2VzIHdoZW4gaXQKKyAgIHdhbGtzLgorCisgKiAiZ2l0IGRpZmYiLCAiZ2l0IHN0YXR1cyIgYW5kIGFueXRoaW5nIHRoYXQgaW50ZXJuYWxseSB1c2VzIHRoZQorICAgY29tcGFyaXNvbiBtYWNoaW5lcnkgd2FzIHV0dGVybHkgYnJva2VuIHdoZW4gdGhlIGRpZmZlcmVuY2UKKyAgIGludm9sdmVkIGEgZmlsZSB3aXRoICItIiBhcyBpdHMgbmFtZS4gIFRoaXMgd2FzIGR1ZSB0byB0aGUgd2F5ICJnaXQKKyAgIGRpZmYgLS1uby1pbmRleCIgd2FzIGluY29ycmVjdGx5IGJvbHRlZCBvbiB0byB0aGUgc3lzdGVtLCBtYWtpbmcKKyAgIGFueSBjb21wYXJpc29uIHRoYXQgaW52b2x2ZXMgYSBmaWxlICItIiBhdCB0aGUgcm9vdCBsZXZlbAorICAgaW5jb3JyZWN0bHkgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKworICogV2UgZGlkIG5vdCBoYXZlIHRlc3QgdG8gbWFrZSBzdXJlICJnaXQgcmViYXNlIiB3aXRob3V0IGV4dHJhIG9wdGlvbnMKKyAgIGZpbHRlcnMgb3V0IGFuIGVtcHR5IGNvbW1pdCBpbiB0aGUgb3JpZ2luYWwgaGlzdG9yeS4KKworICogImdpdCBmYXN0LWV4cG9ydCIgcHJvZHVjZWQgYW4gaW5wdXQgc3RyZWFtIGZvciBmYXN0LWltcG9ydCB3aXRob3V0CisgICBwcm9wZXJseSBxdW90aW5nIHBhdGhuYW1lcyB3aGVuIHRoZXkgY29udGFpbiBTUHMgaW4gdGhlbS4KKworICogImdpdCBjaGVja291dCAtLWRldGFjaCIsIHdoZW4geW91IGFyZSBzdGlsbCBvbiBhbiB1bmJvcm4gYnJhbmNoLAorICAgc2hvdWxkIGJlIGZvcmJpZGRlbiwgYnV0IGl0IHdhc24ndC4KKworICogU29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgUGVybCB0ZXJtaW5hdGVzICJsaW5lcyIgd2l0aCBDUkxGIGV2ZW4gd2hlbgorICAgdGhlIHNjcmlwdCBpcyBvcGVyYXRpbmcgb24ganVzdCBhIHNlcXVlbmNlIG9mIGJ5dGVzLiAgTWFrZSBzdXJlIHRvCisgICB1c2UgIiRQRVJMX1BBVEgiLCB0aGUgdmVyc2lvbiBvZiBQZXJsIHRoZSB1c2VyIHRvbGQgR2l0IHRvIHVzZSwgaW4KKyAgIG91ciB0ZXN0cyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBicmVha2FnZXMgaW4gdGVzdHMuCisKK0Fsc28gY29udGFpbnMgbWlub3IgdHlwb2ZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjQwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS40LnR4dApAQCAtMCwwICsxLDMxIEBACitHaXQgdjEuNy4xMS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiJEdJVF9ESVIvQ09NTUlUX0VESVRNU0ciIGZpbGUgdGhhdCBpcyB1c2VkIHRvIGhvbGQgdGhlIGNvbW1pdCBsb2cKKyAgIG1lc3NhZ2UgdXNlciBlZGl0cyB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAqIFRoZSBhZHZpc2UoKSBmdW5jdGlvbiBkaWQgbm90IHVzZSB2YXJhcmdzIGNvcnJlY3RseSB0byBmb3JtYXQKKyAgIGl0cyBtZXNzYWdlLgorCisgKiBXaGVuICJnaXQgYW0iIGZhaWxlZCwgb2xkIHRpbWVycyBrbmV3IHRvIGNoZWNrIC5naXQvcmViYXNlLWFwcGx5L3BhdGNoCisgICB0byBzZWUgd2hhdCB3ZW50IHdyb25nLCBidXQgd2UgbmV2ZXIgdG9sZCB0aGUgdXNlcnMgYWJvdXQgaXQuCisKKyAqICJnaXQgY29tbWl0LXRyZWUiIGxlYXJuZWQgYSBtb3JlIG5hdHVyYWwgIi1wIDxwYXJlbnQ+IDx0cmVlPiIgb3JkZXIKKyAgIG9mIGFyZ3VtZW50cyBsb25nIHRpbWUgYWdvLCBidXQgcmVjZW50bHkgZm9yZ290IGl0IGJ5IG1pc3Rha2UuCisKKyAqICJnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIiBkaWQgbm90IG91dHB1dCBhbnl0aGluZyBmb3IgYSB0eXBlY2hhbmdlCisgICBmaWxlcGFpciB3aGVuIEdJVF9FWFRFUk5BTF9ESUZGIGlzIGluIGVmZmVjdC4KKworICogSW4gMS43LjkgZXJhLCB3ZSB0YXVnaHQgImdpdCByZWJhc2UiIGFib3V0IHRoZSByYXcgdGltZXN0YW1wIGZvcm1hdAorICAgYnV0IHdlIGRpZCBub3QgdGVhY2ggdGhlIHNhbWUgdHJpY2sgdG8gImZpbHRlci1icmFuY2giLCB3aGljaCByb2xsZWQKKyAgIGEgc2ltaWxhciBsb2dpYyBvbiBpdHMgb3duLgorCisgKiBXaGVuICJnaXQgc3VibW9kdWxlIGFkZCIgY2xvbmVzIGEgc3VibW9kdWxlIHJlcG9zaXRvcnksIGl0IGNhbiBnZXQKKyAgIGNvbmZ1c2VkIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRpbmcgc3VibW9kdWxlIHJlcG9zaXRvcnkgaW4gdGhlCisgICBzdXBlcnByb2plY3QncyAuZ2l0LyBkaXJlY3Rvcnkgd2hlbiB0aGVyZSBpcyBhIHN5bWJvbGljIGxpbmsgaW4gdGhlCisgICBwYXRoIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworQWxzbyBjb250YWlucyBtaW5vciB0eXBvZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyZWQ4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjUudHh0CkBAIC0wLDAgKzEsMzYgQEAKK0dpdCB2MS43LjExLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTEuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBNYWtlZmlsZSBydWxlIHRvIGNyZWF0ZSBhc3NlbWJseSBvdXRwdXQgKHByaW1hcmlseSBmb3IKKyAgIGRlYnVnZ2luZyBwdXJwb3NlcykgZGlkIG5vdCBjcmVhdGUgaXQgbmV4dCB0byB0aGUgc291cmNlLgorCisgKiBUaGUgY29kZSB0byBhdm9pZCBtaXN0YWtlbiBhdHRlbXB0IHRvIGFkZCB0aGUgb2JqZWN0IGRpcmVjdG9yeQorICAgaXRzZWxmIGFzIGl0cyBvd24gYWx0ZXJuYXRlIGNvdWxkIHJlYWQgYmV5b25kIGVuZCBvZiBhIHN0cmluZyB3aGlsZQorICAgY29tcGFyaXNvbi4KKworICogT24gc29tZSBhcmNoaXRlY3R1cmVzLCAiYmxvY2stc2hhMSIgZGlkIG5vdCBjb21waWxlIGNvcnJlY3RseQorICAgd2hlbiBjb21waWxlcnMgaW5mZXJyZWQgYWxpZ25tZW50IGd1YXJhbnRlZXMgZnJvbSBvdXIgc291cmNlIHdlCisgICBkaWQgbm90IGludGVuZCB0byBtYWtlLgorCisgKiBXaGVuIHRhbGtpbmcgdG8gYSByZW1vdGUgcnVubmluZyBzc2ggb24gSVB2NiBlbmFibGVkIGhvc3QsIHdob3NlCisgICBhZGRyZXNzIGlzIHNwZWxsZWQgYXMgIltIT1NUXTpQT1JUIiwgd2UgZGlkIG5vdCBwYXJzZSB0aGUgYWRkcmVzcworICAgY29ycmVjdGx5IGFuZCBmYWlsZWQgdG8gY29ubmVjdC4KKworICogZ2l0LWJsYW1lLmVsIChpbiBjb21wYXQvKSBoYXZlIGJlZW4gdXBkYXRlZCB0byB1c2UgRWxpc3AgbW9yZQorICAgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNoZWNrb3V0IDxicmFuY2huYW1lPiIgdG8gY29tZSBiYWNrIGZyb20gYSBkZXRhY2hlZCBIRUFEIHN0YXRlCisgICBpbmNvcnJlY3RseSBjb21wdXRlZCByZWFjaGFiaWxpdHkgb2YgdGhlIGRldGFjaGVkIEhFQUQsIHJlc3VsdGluZworICAgaW4gdW5uZWNlc3Nhcnkgd2FybmluZ3MuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBkaWQgbm90IHN1cHBvcnQgLS10b29sLWhlbHAgb3B0aW9uIHRvIGdpdmUgdGhlIGxpc3QKKyAgIG9mIHN1cHBvcnRlZCBiYWNrZW5kcywgbGlrZSAiZ2l0IGRpZmZ0b29sIiBkb2VzLgorCisgKiAiZ2l0IGdyZXAiIHN0b3BwZWQgc3Bhd25pbmcgYW4gZXh0ZXJuYWwgImdyZXAiIGxvbmcgdGltZSBhZ28sIGJ1dCBhCisgICBkdXBsaWNhdGVkIHRlc3QgdG8gY2hlY2sgaW50ZXJuYWwgYW5kIGV4dGVybmFsICJncmVwIiB3YXMgbGVmdAorICAgYmVoaW5kLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIHR5cG9maXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTdkM2MzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNi50eHQKQEAgLTAsMCArMSw4NCBAQAorR2l0IHYxLjcuMTEuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMS41CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImNpYWJvdCIgc2NyaXB0IChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZCB3aXRoIGV4dGVuc2l2ZQorICAgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBmb28iIGVycm9yZWQgb3V0IHdpdGggIk5vdCBhIGRpcmVjdG9yeSIgd2hlbiB0aGUgdXNlciBoYWQgYQorICAgbm9uLWRpcmVjdG9yeSBvbiAkUEFUSCwgYW5kIHdvcnNlIHlldCBpdCBtYXNrZWQgYW4gYWxpYXMgImZvbyIgZnJvbQorICAgcnVubmluZy4KKworICogV2hlbiB0aGUgdXNlciBleHBvcnRzIGEgbm9uLWRlZmF1bHQgSUZTIHdpdGhvdXQgSFQsIHNjcmlwdHMgdGhhdAorICAgcmVseSBvbiBiZWluZyBhYmxlIHRvIHBhcnNlICJscy1maWxlcyAtcyB8IHdoaWxlIHJlYWQgYSBiIGMuLi4iCisgICBzdGFydGVkIHRvIGZhaWwuICBQcm90ZWN0IHRoZW0gZnJvbSBzdWNoIGEgbWlzY29uZmlndXJhdGlvbi4KKworICogV2hlbiB0aGUgdXNlciBnaXZlcyBhbiBhcmd1bWVudCB0aGF0IGNhbiBiZSB0YWtlbiBhcyBib3RoIGEKKyAgIHJldmlzaW9uIG5hbWUgYW5kIGEgcGF0aG5hbWUgd2l0aG91dCBkaXNhbWJpZ3VhdGluZyB3aXRoICItLSIsIHdlCisgICB1c2VkIHRvIGdpdmUgYSBoZWxwIG1lc3NhZ2UgIlVzZSAnLS0nIHRvIHNlcGFyYXRlIi4gIFRoZSBtZXNzYWdlCisgICBoYXMgYmVlbiBjbGFyaWZpZWQgdG8gc2hvdyB3aGVyZSB0aGF0ICctLScgZ29lcyBvbiB0aGUgY29tbWFuZAorICAgbGluZS4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXQgaGFkIGEgY29uZnVzaW5nCisgICBleGFtcGxlLgorCisgKiBPbGRlciBwYXJ0cyBvZiB0aGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliZWQgYXMgaWYgaGF2aW5nIGEgcmVndWxhcgorICAgZmlsZSBpbiAuZ2l0L3JlZnMvIGhpZXJhcmNoeSB3ZXJlIHRoZSBvbmx5IHdheSB0byBoYXZlIGJyYW5jaGVzIGFuZAorICAgdGFncywgd2hpY2ggaXMgbm90IHRydWUgZm9yIHF1aXRlIHNvbWUgdGltZS4KKworICogSXQgd2FzIGdlbmVyYWxseSB1bmRlcnN0b29kIHRoYXQgIi0tbG9uZy1vcHRpb24icyB0byBtYW55IG9mIG91cgorICAgc3ViY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIHRoZSB1bmlxdWUgcHJlZml4LCBidXQgaXQgd2FzIG5vdAorICAgZWFzeSB0byBmaW5kIGl0IGRlc2NyaWJlZCBmb3IgbmV3IHJlYWRlcnMgb2YgdGhlIGRvY3VtZW50YXRpb24gc2V0LgorCisgKiBUaGUgIi0tdG9wby1vcmRlciIsICItLWRhdGUtb3JkZXIiIChhbmQgdGhlIGxhY2sgb2YgZWl0aGVyIG1lYW5zCisgICB0aGUgZGVmYXVsdCBvcmRlcikgb3B0aW9ucyB0byAicmV2LWxpc3QiIGFuZCAibG9nIiBmYW1pbHkgb2YKKyAgIGNvbW1hbmRzIHdlcmUgcG9vcmx5IGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBjb21taXQgLS1hbWVuZCIgbGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxvZyBtZXNzYWdlIGFuZCB0aGVuCisgICBkaWVkIHdoZW4gdGhlIGh1bWFuLXJlYWRhYmxlIGNvbW1pdHRlciBuYW1lIHdhcyBnaXZlbgorICAgaW5zdWZmaWNpZW50bHkgYnkgZ2V0cHdlbnQoMykuCisKKyAqIFRoZSBleGl0IHN0YXR1cyBjb2RlIGZyb20gImdpdCBjb25maWciIHdhcyB3YXkgb3ZlcnNwZWNpZmllZCB3aGlsZQorICAgYmVpbmcgaW5jb3JyZWN0LiAgVGhlIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgdG8gZ2l2ZSB0aGUKKyAgIGRvY3VtZW50ZWQgc3RhdHVzIGZvciBhIGNhc2UgdGhhdCB3YXMgZG9jdW1lbnRlZCwgYW5kIGludHJvZHVjZSBhCisgICBuZXcgY29kZSBmb3IgImFsbCBvdGhlciBlcnJvcnMiLgorCisgKiBUaGUgb3V0cHV0IGZyb20gImdpdCBkaWZmIC1CIiBmb3IgYSBmaWxlIHRoYXQgZW5kcyB3aXRoIGFuCisgICBpbmNvbXBsZXRlIGxpbmUgZGlkIG5vdCBwdXQgIlwgTm8gbmV3bGluZS4uLiIgb24gYSBsaW5lIG9mIGl0cyBvd24uCisKKyAqICJnaXQgZGlmZiIgaGFkIGEgY29uZnVzaW9uIGJldHdlZW4gdGFraW5nIGRhdGEgZnJvbSBhIHBhdGggaW4gdGhlCisgICB3b3JraW5nIHRyZWUgYW5kIHRha2luZyBkYXRhIGZyb20gYW4gb2JqZWN0IHRoYXQgaGFwcGVucyB0byBoYXZlCisgICBuYW1lIDB7NDB9IHJlY29yZGVkIGluIGEgdHJlZS4KKworICogVGhlICItLXJlYmFzZSIgb3B0aW9uIHRvICJnaXQgcHVsbCIgY2FuIGJlIGFiYnJldmlhdGVkIHRvICItciIsCisgICBidXQgd2UgZGlkbid0IGRvY3VtZW50IGl0LgorCisgKiBXaGVuICJnaXQgcHVzaCIgdHJpZ2dlcmVkIHRoZSBhdXRvbWF0aWMgZ2Mgb24gdGhlIHJlY2VpdmluZyBlbmQsIGEKKyAgIG1lc3NhZ2UgZnJvbSAiZ2l0IHBydW5lIiB0aGF0IHNhaWQgaXQgd2FzIHJlbW92aW5nIGNydWZ0IGxlYWtlZCB0bworICAgdGhlIHN0YW5kYXJkIG91dHB1dCwgYnJlYWtpbmcgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wuCisKKyAqIFRoZSByZWZsb2cgZW50cmllcyBsZWZ0IGJ5ICJnaXQgcmViYXNlIiBhbmQgImdpdCByZWJhc2UgLWkiIHdlcmUKKyAgIGluY29uc2lzdGVudCAodGhlIGludGVyYWN0aXZlIG9uZSBnYXZlIGFuIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lKS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IHVucXVvdGUgZW5jb2RlZCB3b3JkcyB0aGF0IGFwcGVhciBvbiB0aGUKKyAgIGhlYWRlciBjb3JyZWN0bHksIGFuZCBsb3N0ICJfIiBmcm9tIHN0cmluZ3MuCisKKyAqICJnaXQgc3Rhc2ggYXBwbHkvcG9wIiBkaWQgbm90IHRyaWdnZXIgInJlcmVyZSIgdXBvbiBjb25mbGljdHMKKyAgIHVubGlrZSBvdGhlciBtZXJneSBvcGVyYXRpb25zLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSA8Y21kPiBwYXRoIiBkaWQgbm90IGVycm9yIG91dCB3aGVuIHRoZSBwYXRoIHRvIHRoZQorICAgc3VibW9kdWxlIHdhcyBtaXNzcGVsdC4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIC1mIiBkaWQgbm90IHVwZGF0ZSBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlCisgICB0aGF0IGhhcyBsb2NhbCBjaGFuZ2VzLgorICAgKG1lcmdlIDAxZDQ3MjEgc3ovc3VibW9kdWxlLWZvcmNlLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXR3ZWIiIHdoZW4gdXNlZCB3aXRoIFBBVEhfSU5GTyBmYWlsZWQgdG8gbm90aWNlIGRpcmVjdG9yaWVzIHdpdGgKKyAgIFNQIChhbmQgb3RoZXIgY2hhcmFjdGVycyB0aGF0IG5lZWQgVVJMLXN0eWxlIHF1b3RpbmcpIGluIHRoZW0uCisKKyAqIEZhbGxiYWNrICdnZXRwYXNzJyBpbXBsZW1lbnRhdGlvbiBtYWRlIHVucG9ydGFibGUgdXNlIG9mIHN0ZGlvIEFQSS4KKworICogQSB1dGlsaXR5IHNoZWxsIGZ1bmN0aW9uIHRlc3Rfc2VxIGhhcyBiZWVuIGFkZGVkIGFzIGEgcmVwbGFjZW1lbnQKKyAgIGZvciB0aGUgJ3NlcScgdXRpbGl0eSBmb3VuZCBvbiBzb21lIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlNzlkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjcudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0dpdCB2MS43LjExLjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTEuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBzeW5vcHNpcyBzYWlkICJjaGVja291dCBbLUIgYnJhbmNoXSIgdG8gbWFrZSBpdCBjbGVhciB0aGUKKyAgIGJyYW5jaCBuYW1lIGlzIGEgcGFyYW1ldGVyIHRvIHRoZSBvcHRpb24sIGJ1dCB0aGUgaGVhZGluZyBmb3IgdGhlCisgICBvcHRpb24gZGVzY3JpcHRpb24gd2FzICItQjo6Iiwgbm90ICItQiBicmFuY2g6OiIsIG1ha2luZyB0aGUKKyAgIGRvY3VtZW50YXRpb24gbWlzbGVhZGluZy4KKworICogR2l0IHNoaXBzIHdpdGggYSBmYWxsLWJhY2sgcmVnZXhwIGltcGxlbWVudGF0aW9uIGZvciBwbGF0Zm9ybXMgd2l0aAorICAgYnVnZ3kgcmVnZXhwIGxpYnJhcnksIGJ1dCBpdCB3YXMgZWFzeSBmb3IgcGVvcGxlIHRvIGtlZXAgdXNpbmcgdGhlaXIKKyAgIHBsYXRmb3JtIHJlZ2V4cC4gIEEgbmV3IHRlc3QgaGFzIGJlZW4gYWRkZWQgdG8gY2hlY2sgdGhpcy4KKworICogImdpdCBhcHBseSAtcDAiIGRpZCBub3QgcGFyc2UgcGF0aG5hbWVzIG9uICJkaWZmIC0tZ2l0IiBsaW5lCisgICBjb3JyZWN0bHkuICBUaGlzIGNhdXNlZCBwYXRjaGVzIHRoYXQgaGFkIHBhdGhuYW1lcyBpbiBubyBvdGhlcgorICAgcGxhY2VzIHRvIGJlIG1pc3Rha2VubHkgcmVqZWN0ZWQgKG1vc3Qgbm90YWJseSwgYmluYXJ5IHBhdGNoIHRoYXQKKyAgIGRvZXMgbm90IHJlbmFtZSBub3IgY2hhbmdlIG1vZGUpLiAgVGV4dHVhbCBwYXRjaGVzLCByZW5hbWVzIG9yIG1vZGUKKyAgIGNoYW5nZXMgaGF2ZSBwcmVpbWFnZSBhbmQgcG9zdGltYWdlIHBhdGhuYW1lcyBpbiBkaWZmZXJlbnQgcGxhY2VzCisgICBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgcGFyc2VkIHVuYW1iaWd1b3VzbHkgYW5kIGRpZCBub3Qgc3VmZmVyIGZyb20KKyAgIHRoaXMgcHJvYmxlbS4KKworICogQWZ0ZXIgImdpdGsiIHNob3dlZCB0aGUgY29udGVudHMgb2YgYSB0YWcsIG5laXRoZXIgIlJlcmVhZAorICAgcmVmZXJlbmNlcyIgbm9yICJSZWxvYWQiIGRpZCBub3QgdXBkYXRlIHdoYXQgaXMgc2hvd24gYXMgdGhlCisgICBjb250ZW50cyBvZiBpdCwgd2hlbiB0aGUgdXNlciBvdmVyd3JvdGUgdGhlIHRhZyB3aXRoICJnaXQgdGFnIC1mIi4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGRpZCBub3QgY3VycmVjdGx5IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSAtLXNvcnQKKyAgIG9wdGlvbi4KKworICogImdpdCBsb2cgLi4iIGVycm9yZWQgb3V0IHNheWluZyBpdCBpcyBib3RoIHJldiByYW5nZSBhbmQgYSBwYXRoCisgICB3aGVuIHRoZXJlIGlzIG5vIGRpc2FtYmlndWF0aW5nICItLSIgaXMgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgIFVwZGF0ZSB0aGUgY29tbWFuZCBsaW5lIHBhcnNlciB0byBpbnRlcnByZXQgIi4uIiBhcyBhIHBhdGggaW4gc3VjaAorICAgYSBjYXNlLgorCisgKiBQdXNoaW5nIHRvIHNtYXJ0IEhUVFAgc2VydmVyIHdpdGggcmVjZW50IEdpdCBmYWlscyB3aXRob3V0IGhhdmluZworICAgdGhlIHVzZXJuYW1lIGluIHRoZSBVUkwgdG8gZm9yY2UgYXV0aGVudGljYXRpb24sIGlmIHRoZSBzZXJ2ZXIgaXMKKyAgIGNvbmZpZ3VyZWQgdG8gYWxsb3cgR0VUIGFub255bW91c2x5LCB3aGlsZSByZXF1aXJpbmcgYXV0aGVudGljYXRpb24KKyAgIGZvciBQT1NULgorCisgKiAiZ2l0IHNob3cgLS1mb3JtYXQ9JyVjaSciIGRpZCBub3QgZ2l2ZSB0aW1lc3RhbXAgY29ycmVjdGx5IGZvcgorICAgY29tbWl0cyBjcmVhdGVkIHdpdGhvdXQgaHVtYW4gcmVhZGFibGUgbmFtZSBvbiAiY29tbWl0dGVyIiBsaW5lLgorICAgKG1lcmdlIGUyN2RkYjYgamMvbWFpbnQtaWRlbnQtbWlzc2luZy1odW1hbi1uYW1lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzaG93IC0tcXVpZXQiIG91Z2h0IHRvIGJlIGEgc3lub255bSBmb3IgImdpdCBzaG93IC1zIiwgYnV0CisgICB3YXNuJ3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViOTU0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLnR4dApAQCAtMCwwICsxLDEzOSBAQAorR2l0IHYxLjcuMTEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQSBuZXcgbW9kZSBmb3IgcHVzaCwgInNpbXBsZSIsIHdoaWNoIGlzIGEgY3Jvc3MgYmV0d2VlbiAiY3VycmVudCIKKyAgIGFuZCAidXBzdHJlYW0iLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiAiZ2l0IHB1c2giIHdpdGhvdXQgYW55IHJlZnNwZWMKKyAgIHdpbGwgcHVzaCB0aGUgY3VycmVudCBicmFuY2ggb3V0IHRvIHRoZSBzYW1lIG5hbWUgYXQgdGhlIHJlbW90ZQorICAgcmVwb3NpdG9yeSBvbmx5IHdoZW4gaXQgaXMgc2V0IHRvIHRyYWNrIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZQorICAgbmFtZSBvdmVyIHRoZXJlLiAgVGhlIHBsYW4gaXMgdG8gbWFrZSB0aGlzIG1vZGUgdGhlIG5ldyBkZWZhdWx0CisgICB2YWx1ZSB3aGVuIHB1c2guZGVmYXVsdCBpcyBub3QgY29uZmlndXJlZC4KKworICogQSBjb3VwbGUgb2YgY29tbWFuZHMgbGVhcm5lZCB0aGUgIi0tY29sdW1uIiBvcHRpb24gdG8gcHJvZHVjZQorICAgY29sdW1uYXIgb3V0cHV0LgorCisgKiBBIHRoaXJkLXBhcnR5IHRvb2wgImdpdCBzdWJ0cmVlIiBpcyBkaXN0cmlidXRlZCBpbiBjb250cmliLworCisgKiBBIHJlbW90ZSBoZWxwZXIgdGhhdCBhY3RzIGFzIGEgcHJveHkgYW5kIGNhY2hlcyBzc2wgc2Vzc2lvbiBmb3IgdGhlCisgICBodHRwczovLyB0cmFuc3BvcnQgaXMgYWRkZWQgdG8gdGhlIGNvbnRyaWIvIGFyZWEuCisKKyAqIEVycm9yIG1lc3NhZ2VzIGdpdmVuIHdoZW4gQHt1fSBpcyB1c2VkIGZvciBhIGJyYW5jaCB3aXRob3V0IGl0cworICAgdXBzdHJlYW0gY29uZmlndXJlZCBoYXZlIGJlZW4gY2xhcmlmaWVkLgorCisgKiBFdmVuIHdpdGggdGhlICItcSJ1aWV0IG9wdGlvbiwgImNoZWNrb3V0IiB1c2VkIHRvIHJlcG9ydCBzZXR0aW5nIHVwCisgICB0cmFja2luZy4gIEFsc28gImJyYW5jaCIgbGVhcm5lZCB0aGUgIi1xInVpZXQgb3B0aW9uIHRvIHNxdWVsY2gKKyAgIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4KKworICogWW91ciBidWlsZCBwbGF0Zm9ybSBtYXkgc3VwcG9ydCBoYXJkbGlua3MgYnV0IHlvdSBtYXkgcHJlZmVyIG5vdCB0bworICAgdXNlIHRoZW0sIGUuZy4gd2hlbiBpbnN0YWxsaW5nIHRvIERFU1RESVIgdG8gbWFrZSBhIHRhcmJhbGwgYW5kCisgICB1bnRhcnJpbmcgb24gYSBmaWxlc3lzdGVtIHRoYXQgaGFzIHBvb3Igc3VwcG9ydCBmb3IgaGFyZGxpbmtzLgorICAgVGhlcmUgaXMgYSBNYWtlZmlsZSBvcHRpb24gTk9fSU5TVEFMTF9IQVJETElOS1MgZm9yIHlvdS4KKworICogVGhlIHNtYXJ0LWh0dHAgYmFja2VuZCB1c2VkIHRvIGFsd2F5cyBvdmVycmlkZSBHSVRfQ09NTUlUVEVSXyoKKyAgIHZhcmlhYmxlcyB3aXRoIFJFTU9URV9VU0VSIGFuZCBSRU1PVEVfQUREUiwgYnV0IHRoZXNlIHZhcmlhYmxlcyBhcmUKKyAgIG5vdyBwcmVzZXJ2ZWQgd2hlbiBzZXQuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgdGhlICItLWluY2x1ZGUiIG9wdGlvbiwgd2hpY2ggaXMgYW4gb3Bwb3NpdGUgb2YKKyAgIGV4aXN0aW5nIHRoZSAiLS1leGNsdWRlIiBvcHRpb24uCisKKyAqIFdoZW4gImdpdCBhbSAtMyIgbmVlZHMgdG8gZmFsbCBiYWNrIHRvIGFuIGFwcGxpY2F0aW9uIG9mIHRoZSBwYXRjaAorICAgdG8gYSBzeW50aGVzaXplZCBwcmVpbWFnZSBmb2xsb3dlZCBieSBhIDMtd2F5IG1lcmdlLCB0aGUgcGF0aHMgdGhhdAorICAgbmVlZGVkIHN1Y2ggdHJlYXRtZW50IGFyZSBub3cgcmVwb3J0ZWQgdG8gdGhlIGVuZCB1c2VyLCBzbyB0aGF0IHRoZQorICAgcmVzdWx0IGluIHRoZW0gY2FuIGJlIGV5ZWJhbGxlZCB3aXRoIGV4dHJhIGNhcmUuCisKKyAqIFRoZSBvdXRwdXQgZnJvbSAiZGlmZi9sb2cgLS1zdGF0IiB1c2VkIHRvIGFsd2F5cyBhbGxvY2F0ZSA0IGNvbHVtbnMKKyAgIHRvIHNob3cgdGhlIG51bWJlciBvZiBtb2RpZmllZCBsaW5lcywgYnV0IG5vdCBhbnltb3JlLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBsZWFybmVkIHRoZSAiLS1kaXItZGlmZiIgb3B0aW9uIHRvIHNwYXduIGV4dGVybmFsCisgICBkaWZmIHRvb2xzIHRoYXQgY2FuIGNvbXBhcmUgdHdvIGRpcmVjdG9yeSBoaWVyYXJjaGllcyBhdCBhIHRpbWUKKyAgIGFmdGVyIHBvcHVsYXRpbmcgdHdvIHRlbXBvcmFyeSBkaXJlY3RvcmllcywgaW5zdGVhZCBvZiBydW5uaW5nIGFuCisgICBpbnN0YW5jZSBvZiB0aGUgZXh0ZXJuYWwgdG9vbCBvbmNlIHBlciBhIGZpbGUgcGFpci4KKworICogVGhlICJmbXQtbWVyZ2UtbXNnIiBjb21tYW5kIGxlYXJuZWQgdG8gbGlzdCB0aGUgcHJpbWFyeSBjb250cmlidXRvcnMKKyAgIGludm9sdmVkIGluIHRoZSBzaWRlIHRvcGljIHlvdSBhcmUgbWVyZ2luZyBpbiBhIGNvbW1lbnQgaW4gdGhlIG1lcmdlCisgICBjb21taXQgdGVtcGxhdGUuCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkga2VlcCBjb21taXRzIHRoYXQgZG8gbm90CisgICBpbnRyb2R1Y2UgYW55IGNoYW5nZSBpbiB0aGUgb3JpZ2luYWwgaGlzdG9yeS4KKworICogImdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgbG9vayBpbnRvIHRoZQorICAgaGlzdG9yaWVzIG9mIHN1Ym1vZHVsZXMgYm91bmQgdG8gdGhlIHN1cGVycHJvamVjdCBhbmQgcHVzaCB0aGVtCisgICBvdXQuCisKKyAqIEEgJ3NuYXBzaG90JyByZXF1ZXN0IHRvICJnaXR3ZWIiIGhvbm9ycyBJZi1Nb2RpZmllZC1TaW5jZTogaGVhZGVyLAorICAgYmFzZWQgb24gdGhlIGNvbW1pdCBkYXRlLgorCisgKiAiZ2l0d2ViIiBsZWFybmVkIHRvIGhpZ2hsaWdodCB0aGUgcGF0Y2ggaXQgb3V0cHV0cyBldmVuIG1vcmUuCisKK0ZvcmVpZ24gSW50ZXJmYWNlCisKKyAqICJnaXQgc3ZuIiB1c2VkIHRvIGRpZSB3aXRoIHVud2FudGVkIFNJR1BJUEUgd2hlbiB0YWxraW5nIHdpdGggYW4gSFRUUAorICAgc2VydmVyIHRoYXQgdXNlcyBrZWVwLWFsaXZlLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCB0byB1c2UgcGxhdGZvcm0gc3BlY2lmaWMgYXV0aGVudGljYXRpb24KKyAgIHByb3ZpZGVycywgZS5nLiBnbm9tZS1rZXlyaW5nLCBrd2FsbGV0LCBldGMuCisKKyAqICJnaXQgcDQiIGhhcyBiZWVuIG1vdmVkIG91dCBvZiB0aGUgY29udHJpYi8gYXJlYSBhbmQgaGFzIHNlZW4gbW9yZQorICAgd29yayBvbiBpbXBvcnRpbmcgbGFiZWxzIGFzIHRhZ3MgZnJvbSAoYW5kIGV4cG9ydGluZyB0YWdzIGFzIGxhYmVscworICAgdG8pIHA0LgorCitQZXJmb3JtYW5jZSBhbmQgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24gKHBsZWFzZSByZXBvcnQgcG9zc2libGUgcmVncmVzc2lvbnMpCisKKyAqIEJhc2ggY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBoYXZlIGJlZW4gY2xlYW5lZCB1cCB0byBtYWtlCisgICBmdXR1cmUgd29yayBvbiBpdCBzaW1wbGVyLgorCisgKiBBbiBleHBlcmltZW50YWwgInZlcnNpb24gNCIgZm9ybWF0IG9mIHRoZSBpbmRleCBmaWxlIGhhcyBiZWVuCisgICBpbnRyb2R1Y2VkIHRvIHJlZHVjZSBvbi1kaXNrIGZvb3RwcmludCBhbmQgSS9PIG92ZXJoZWFkLgorCisgKiAiZ2l0IGFyY2hpdmUiIGxlYXJuZWQgdG8gcHJvZHVjZSBpdHMgb3V0cHV0IHdpdGhvdXQgcmVhZGluZyB0aGUKKyAgIGJsb2Igb2JqZWN0IGl0IHdyaXRlcyBvdXQgaW4gbWVtb3J5IGluIGl0cyBlbnRpcmV0eS4KKworICogImdpdCBpbmRleC1wYWNrIiB0aGF0IHJ1bnMgd2hlbiBmZXRjaGluZyBvciBwdXNoaW5nIG9iamVjdHMgdG8KKyAgIGNvbXBsZXRlIHRoZSBwYWNrZmlsZSBvbiB0aGUgcmVjZWl2aW5nIGVuZCBsZWFybmVkIHRvIHVzZSBtdWx0aXBsZQorICAgdGhyZWFkcyB0byBkbyBpdHMgam9iIHdoZW4gYXZhaWxhYmxlLgorCisgKiBUaGUgY29kZSB0byBjb21wdXRlIGhhc2ggdmFsdWVzIGZvciBsaW5lcyB1c2VkIGJ5IHRoZSBpbnRlcm5hbCBkaWZmCisgICBlbmdpbmUgd2FzIG9wdGltaXplZCBvbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzLCB1c2luZyB0aGUgc2FtZQorICAgdHJpY2sgdGhlIGtlcm5lbCBmb2xrcyBjYW1lIHVwIHdpdGguCisKKyAqICJnaXQgYXBwbHkiIGhhZCBzb21lIG1lbW9yeSBsZWFrcyBwbHVnZ2VkLgorCisgKiBTZXR0aW5nIHVwIGEgcmV2aXNpb24gdHJhdmVyc2FsIHdpdGggbWFueSBzdGFydGluZyBwb2ludHMgd2FzCisgICBpbmVmZmljaWVudCBhcyB0aGVzZSB3ZXJlIHBsYWNlZCBpbiBhIGRhdGUtb3JkZXIgcHJpb3JpdHkgcXVldWUKKyAgIG9uZS1ieS1vbmUuICBOb3cgdGhleSBhcmUgY29sbGVjdGVkIGluIHRoZSBxdWV1ZSB1bm9yZGVyZWQgZmlyc3QsCisgICBhbmQgc29ydGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBnZXR0aW5nIHVzZWQuCisKKyAqIE1vcmUgbG93ZXItbGV2ZWwgY29tbWFuZHMgbGVhcm5lZCB0byB1c2UgdGhlIHN0cmVhbWluZyBBUEkgdG8gcmVhZAorICAgZnJvbSB0aGUgb2JqZWN0IHN0b3JlIHdpdGhvdXQga2VlcGluZyBldmVyeXRoaW5nIGluIGNvcmUuCisKKyAqIFRoZSB3ZWlnaHRpbmcgcGFyYW1ldGVycyB0byBzdWdnZXN0aW9uIGNvbW1hbmQgbmFtZSB0eXBvIGhhdmUgYmVlbgorICAgdHdlYWtlZCwgc28gdGhhdCAiZ2l0IHRhZ3MiIHdpbGwgc3VnZ2VzdCAidGFnPyIgYW5kIG5vdCAic3RhZ2U/Ii4KKworICogQmVjYXVzZSAic2giIG9uIHRoZSB1c2VyJ3MgUEFUSCBtYXkgYmUgdXR0ZXJseSBicm9rZW4gb24gc29tZQorICAgc3lzdGVtcywgcnVuLWNvbW1hbmQgQVBJIG5vdyB1c2VzIFNIRUxMX1BBVEgsIG5vdCAvYmluL3NoLCB3aGVuCisgICBzcGF3bmluZyBhbiBleHRlcm5hbCBjb21tYW5kIChub3QgYXBwbGljYWJsZSB0byBXaW5kb3dzIHBvcnQpLgorCisgKiBUaGUgQVBJIHRvIGl0ZXJhdGUgb3ZlciB0aGUgcmVmcy8gaGllcmFyY2h5IGhhcyBiZWVuIHR3ZWFrZWQgdG8KKyAgIGFsbG93IHdhbGtpbmcgb25seSBhIHN1YnNldCBvZiBpdCBtb3JlIGVmZmljaWVudGx5LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy4xMAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuMTAgaW4gdGhlIG1haW50ZW5hbmNlCityZWxlYXNlcyBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBpbml0IiB1c2VkIHRvIHJlcG9ydCAicmVnaXN0ZXJlZCBmb3IgcGF0aCAuLi4iCisgICBldmVuIGZvciBzdWJtb2R1bGVzIHRoYXQgd2VyZSByZWdpc3RlcmVkIGVhcmxpZXIuCisgICAoY2hlcnJ5LXBpY2sgYzFjMjU5ZSBqbC9zdWJtb2R1bGUtcmVwb3J0LW5ldy1wYXRoLW9uY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1zdGF0IiB1c2VkIHRvIGZ1bGx5IGNvdW50IGEgYmluYXJ5IGZpbGUgd2l0aCBtb2RpZmllZAorICAgZXhlY3V0aW9uIGJpdHMgd2hvc2UgY29udGVudHMgaXMgdW5tb2RpZmllZCwgd2hpY2ggd2FzIG5vdCBxdWl0ZQorICAgcmlnaHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZjA0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4xLnR4dApAQCAtMCwwICsxLDEzNCBAQAorR2l0IDEuNy4xMi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcHBseSAtcDAiIGRpZCBub3QgcGFyc2UgcGF0aG5hbWVzIG9uICJkaWZmIC0tZ2l0IiBsaW5lCisgICBjb3JyZWN0bHkuICBUaGlzIGNhdXNlZCBwYXRjaGVzIHRoYXQgaGFkIHBhdGhuYW1lcyBpbiBubyBvdGhlcgorICAgcGxhY2VzIHRvIGJlIG1pc3Rha2VubHkgcmVqZWN0ZWQgKG1vc3Qgbm90YWJseSwgYmluYXJ5IHBhdGNoIHRoYXQKKyAgIGRvZXMgbm90IHJlbmFtZSBub3IgY2hhbmdlIG1vZGUpLiAgVGV4dHVhbCBwYXRjaGVzLCByZW5hbWVzIG9yIG1vZGUKKyAgIGNoYW5nZXMgaGF2ZSBwcmVpbWFnZSBhbmQgcG9zdGltYWdlIHBhdGhuYW1lcyBpbiBkaWZmZXJlbnQgcGxhY2VzCisgICBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgcGFyc2VkIHVuYW1iaWd1b3VzbHkgYW5kIGRpZCBub3Qgc3VmZmVyIGZyb20KKyAgIHRoaXMgcHJvYmxlbS4KKworICogImdpdCBjaGVycnktcGljayBBIEMgQiIgdXNlZCB0byByZXBsYXkgY2hhbmdlcyBpbiBBIGFuZCB0aGVuIEIgYW5kCisgICB0aGVuIEMgaWYgdGhlc2UgdGhyZWUgY29tbWl0cyBoYWQgY29tbWl0dGVyIHRpbWVzdGFtcHMgaW4gdGhhdAorICAgb3JkZXIsIHdoaWNoIGlzIG5vdCB3aGF0IHRoZSB1c2VyIHdobyBzYWlkICJBIEMgQiIgbmF0dXJhbGx5CisgICBleHBlY3RzLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIiBsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbG9nIG1lc3NhZ2UgYW5kIHRoZW4KKyAgIGRpZWQgd2hlbiB0aGUgaHVtYW4tcmVhZGFibGUgY29tbWl0dGVyIG5hbWUgd2FzIGdpdmVuCisgICBpbnN1ZmZpY2llbnRseSBieSBnZXRwd2VudCgzKS4KKworICogU29tZSBjYXBhYmlsaXRpZXMgd2VyZSBhc2tlZCBieSBmZXRjaC1wYWNrIGV2ZW4gd2hlbiB1cGxvYWQtcGFjaworICAgZGlkIG5vdCBhZHZlcnRpc2UgdGhhdCB0aGV5IGFyZSBhdmFpbGFibGUuICBmZXRjaC1wYWNrIGhhcyBiZWVuCisgICBmaXhlZCBub3QgdG8gZG8gc28uCisKKyAqICJnaXQgZGlmZiIgaGFkIGEgY29uZnVzaW9uIGJldHdlZW4gdGFraW5nIGRhdGEgZnJvbSBhIHBhdGggaW4gdGhlCisgICB3b3JraW5nIHRyZWUgYW5kIHRha2luZyBkYXRhIGZyb20gYW4gb2JqZWN0IHRoYXQgaGFwcGVucyB0byBoYXZlCisgICBuYW1lIDB7NDB9IHJlY29yZGVkIGluIGEgdHJlZS4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGRpZCBub3QgY29ycmVjdGx5IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSAtLXNvcnQKKyAgIG9wdGlvbi4KKworICogImdpdCBsb2cgLi4iIGVycm9yZWQgb3V0IHNheWluZyBpdCBpcyBib3RoIHJldiByYW5nZSBhbmQgYSBwYXRoCisgICB3aGVuIHRoZXJlIGlzIG5vIGRpc2FtYmlndWF0aW5nICItLSIgaXMgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgIFVwZGF0ZSB0aGUgY29tbWFuZCBsaW5lIHBhcnNlciB0byBpbnRlcnByZXQgIi4uIiBhcyBhIHBhdGggaW4gc3VjaAorICAgYSBjYXNlLgorCisgKiBUaGUgIi0tdG9wby1vcmRlciIsICItLWRhdGUtb3JkZXIiIChhbmQgdGhlIGxhY2sgb2YgZWl0aGVyIG1lYW5zCisgICB0aGUgZGVmYXVsdCBvcmRlcikgb3B0aW9ucyB0byAicmV2LWxpc3QiIGFuZCAibG9nIiBmYW1pbHkgb2YKKyAgIGNvbW1hbmRzIHdlcmUgcG9vcmx5IGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBwcnVuZSIgd2l0aG91dCAiLXYiIHVzZWQgdG8gd2FybiBhYm91dCBsZWZ0b3ZlciB0ZW1wb3JhcnkKKyAgIGZpbGVzICh3aGljaCBpcyBhbiBpbmRpY2F0aW9uIG9mIGFuIGVhcmxpZXIgYWJvcnRlZCBvcGVyYXRpb24pLgorCisgKiBQdXNoaW5nIHRvIHNtYXJ0IEhUVFAgc2VydmVyIHdpdGggcmVjZW50IEdpdCBmYWlscyB3aXRob3V0IGhhdmluZworICAgdGhlIHVzZXJuYW1lIGluIHRoZSBVUkwgdG8gZm9yY2UgYXV0aGVudGljYXRpb24sIGlmIHRoZSBzZXJ2ZXIgaXMKKyAgIGNvbmZpZ3VyZWQgdG8gYWxsb3cgR0VUIGFub255bW91c2x5LCB3aGlsZSByZXF1aXJpbmcgYXV0aGVudGljYXRpb24KKyAgIGZvciBQT1NULgorCisgKiBUaGUgcmVmbG9nIGVudHJpZXMgbGVmdCBieSAiZ2l0IHJlYmFzZSIgYW5kICJnaXQgcmViYXNlIC1pIiB3ZXJlCisgICBpbmNvbnNpc3RlbnQgKHRoZSBpbnRlcmFjdGl2ZSBvbmUgZ2F2ZSBhbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSkuCisKKyAqIFdoZW4gImdpdCBwdXNoIiB0cmlnZ2VyZWQgdGhlIGF1dG9tYXRpYyBnYyBvbiB0aGUgcmVjZWl2aW5nIGVuZCwgYQorICAgbWVzc2FnZSBmcm9tICJnaXQgcHJ1bmUiIHRoYXQgc2FpZCBpdCB3YXMgcmVtb3ZpbmcgY3J1ZnQgbGVha2VkIHRvCisgICB0aGUgc3RhbmRhcmQgb3V0cHV0LCBicmVha2luZyB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbC4KKworICogImdpdCBzaG93IC0tcXVpZXQiIG91Z2h0IHRvIGJlIGEgc3lub255bSBmb3IgImdpdCBzaG93IC1zIiwgYnV0CisgICB3YXNuJ3QuCisKKyAqICJnaXQgc2hvdyAtLWZvcm1hdD0nJWNpJyIgZGlkIG5vdCBnaXZlIHRpbWVzdGFtcCBjb3JyZWN0bHkgZm9yCisgICBjb21taXRzIGNyZWF0ZWQgd2l0aG91dCBodW1hbiByZWFkYWJsZSBuYW1lIG9uICJjb21taXR0ZXIiIGxpbmUuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCB1bnF1b3RlIGVuY29kZWQgd29yZHMgdGhhdCBhcHBlYXIgb24gdGhlCisgICBoZWFkZXIgY29ycmVjdGx5LCBhbmQgbG9zdCAiXyIgZnJvbSBzdHJpbmdzLgorCisgKiBUaGUgaW50ZXJhY3RpdmUgcHJvbXB0ICJnaXQgc2VuZC1lbWFpbCIgZ2l2ZXMgd2FzIGVycm9yIHByb25lLiBJdAorICAgYXNrZWQgIldoYXQgZS1tYWlsIGFkZHJlc3MgZG8geW91IHdhbnQgdG8gdXNlPyIgd2l0aCB0aGUgYWRkcmVzcyBpdAorICAgZ3Vlc3NlZCAoY29ycmVjdGx5KSB0aGUgdXNlciB3b3VsZCB3YW50IHRvIHVzZSBpbiBpdHMgcHJvbXB0LAorICAgdGVtcHRpbmcgdGhlIHVzZXIgdG8gc2F5ICJ5Ii4gQnV0IHRoZSByZXNwb25zZSB3YXMgdGFrZW4gYXMgIk5vLAorICAgcGxlYXNlIHVzZSAneScgYXMgdGhlIGUtbWFpbCBhZGRyZXNzIGluc3RlYWQiLCB3aGljaCBpcyBtb3N0CisgICBjZXJ0YWlubHkgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQuCisKKyAqICJnaXR3ZWIiIHdoZW4gdXNlZCB3aXRoIFBBVEhfSU5GTyBmYWlsZWQgdG8gbm90aWNlIGRpcmVjdG9yaWVzIHdpdGgKKyAgIFNQIChhbmQgb3RoZXIgY2hhcmFjdGVycyB0aGF0IG5lZWQgVVJMLXN0eWxlIHF1b3RpbmcpIGluIHRoZW0uCisKKyAqIFdoZW4gdGhlIHVzZXIgZ2l2ZXMgYW4gYXJndW1lbnQgdGhhdCBjYW4gYmUgdGFrZW4gYXMgYm90aCBhCisgICByZXZpc2lvbiBuYW1lIGFuZCBhIHBhdGhuYW1lIHdpdGhvdXQgZGlzYW1iaWd1YXRpbmcgd2l0aCAiLS0iLCB3ZQorICAgdXNlZCB0byBnaXZlIGEgaGVscCBtZXNzYWdlICJVc2UgJy0tJyB0byBzZXBhcmF0ZSIuICBUaGUgbWVzc2FnZQorICAgaGFzIGJlZW4gY2xhcmlmaWVkIHRvIHNob3cgd2hlcmUgdGhhdCAnLS0nIGdvZXMgb24gdGhlIGNvbW1hbmQKKyAgIGxpbmUuCisKKyAqIFdoZW4gdGhlIHVzZXIgZXhwb3J0cyBhIG5vbi1kZWZhdWx0IElGUyB3aXRob3V0IEhULCBzY3JpcHRzIHRoYXQKKyAgIHJlbHkgb24gYmVpbmcgYWJsZSB0byBwYXJzZSAibHMtZmlsZXMgLXMgfCB3aGlsZSByZWFkIGEgYiBjLi4uIgorICAgc3RhcnRlZCB0byBmYWlsLiAgUHJvdGVjdCB0aGVtIGZyb20gc3VjaCBhIG1pc2NvbmZpZ3VyYXRpb24uCisKKyAqIFRoZSBhdHRyaWJ1dGUgc3lzdGVtIG1heSBiZSBhc2tlZCBmb3IgYSBwYXRoIHRoYXQgaXRzZWxmIG9yIGl0cworICAgbGVhZGluZyBkaXJlY3RvcmllcyBubyBsb25nZXIgZXhpc3RzIGluIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBpdCBpcworICAgZmluZSBpZiB3ZSBjYW5ub3Qgb3BlbiAuZ2l0YXR0cmlidXRlIGZpbGUgaW4gc3VjaCBhIGNhc2UuICBGYWlsdXJlCisgICB0byBvcGVuIHBlci1kaXJlY3RvcnkgLmdpdGF0dHJpYnV0ZXMgd2l0aCBlcnJvciBzdGF0dXMgb3RoZXIgdGhhbgorICAgRU5PRU5UIGFuZCBFTk9URElSIHNob3VsZCBiZSBkaWFnbm9zZWQsIGJ1dCBpdCB3YXNuJ3QuCisKKyAqIEFmdGVyICJnaXRrIiBzaG93ZWQgdGhlIGNvbnRlbnRzIG9mIGEgdGFnLCBuZWl0aGVyICJSZXJlYWQKKyAgIHJlZmVyZW5jZXMiIG5vciAiUmVsb2FkIiBkaWQgbm90IHVwZGF0ZSB3aGF0IGlzIHNob3duIGFzIHRoZQorICAgY29udGVudHMgb2YgaXQsIHdoZW4gdGhlIHVzZXIgb3Zlcndyb3RlIHRoZSB0YWcgd2l0aCAiZ2l0IHRhZyAtZiIuCisKKyAqICJjaWFib3QiIHNjcmlwdCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCBleHRlbnNpdmUKKyAgIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXQtanVtcCIgc2NyaXB0IChpbiBjb250cmliLykgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbgorICAgZGlmZi5ub3ByZWZpeCBvciBkaWZmLm1uZW1vbmljcHJlZml4IGlzIGluIGVmZmVjdC4KKworICogT2xkZXIgcGFydHMgb2YgdGhlIGRvY3VtZW50YXRpb24gZGVzY3JpYmVkIGFzIGlmIGhhdmluZyBhIHJlZ3VsYXIKKyAgIGZpbGUgaW4gLmdpdC9yZWZzLyBoaWVyYXJjaHkgd2VyZSB0aGUgb25seSB3YXkgdG8gaGF2ZSBicmFuY2hlcyBhbmQKKyAgIHRhZ3MsIHdoaWNoIGlzIG5vdCB0cnVlIGZvciBxdWl0ZSBzb21lIHRpbWUuCisKKyAqIEEgdXRpbGl0eSBzaGVsbCBmdW5jdGlvbiB0ZXN0X3NlcSBoYXMgYmVlbiBhZGRlZCBhcyBhIHJlcGxhY2VtZW50CisgICBmb3IgdGhlICdzZXEnIHV0aWxpdHkgZm91bmQgb24gc29tZSBwbGF0Zm9ybXMuCisKKyAqIENvbXBhdGliaWxpdHkgd3JhcHBlciB0byBsZWFybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZQorICAgZGVzY3JpcHRvcnMgd2UgY2FuIG9wZW4gYXJvdW5kIHN5c2NvbmYoX1NDX09QRU5fTUFYKSBhbmQKKyAgIGdldHJsaW1pdChSTElNSVRfTk9fRklMRSkgaGFzIGJlZW4gaW50cm9kdWNlZCBmb3IgcG9ydGFiaWxpdHkuCisKKyAqIFdlIHVzZWQgY3VybF9lYXN5X3N0cmVycm9yKCkgd2l0aG91dCBjaGVja2luZyB2ZXJzaW9uIG9mIGNVUkwsCisgICBicmVha2luZyB0aGUgYnVpbGQgZm9yIHZlcnNpb25zIGJlZm9yZSBjdXJsIDcuMTIuMC4KKworICogQ29kZSB0byB3b3JrIGFyb3VuZCBNYWNPUyBYIFVURi04IGdvdGNoYSBoYXMgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBGYWxsYmFjayAnZ2V0cGFzcycgaW1wbGVtZW50YXRpb24gbWFkZSB1bnBvcnRhYmxlIHVzZSBvZiBzdGRpbyBBUEkuCisKKyAqIFRoZSAiLS1yZWJhc2UiIG9wdGlvbiB0byAiZ2l0IHB1bGwiIGNhbiBiZSBhYmJyZXZpYXRlZCB0byAiLXIiLAorICAgYnV0IHdlIGRpZG4ndCBkb2N1bWVudCBpdC4KKworICogSXQgd2FzIGdlbmVyYWxseSB1bmRlcnN0b29kIHRoYXQgIi0tbG9uZy1vcHRpb24icyB0byBtYW55IG9mIG91cgorICAgc3ViY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIHRoZSB1bmlxdWUgcHJlZml4LCBidXQgaXQgd2FzIG5vdAorICAgZWFzeSB0byBmaW5kIGl0IGRlc2NyaWJlZCBmb3IgbmV3IHJlYWRlcnMgb2YgdGhlIGRvY3VtZW50YXRpb24gc2V0LgorCisgKiBUaGUgc3lub3BzaXMgc2FpZCAiY2hlY2tvdXQgWy1CIGJyYW5jaF0iIHRvIG1ha2UgaXQgY2xlYXIgdGhlCisgICBicmFuY2ggbmFtZSBpcyBhIHBhcmFtZXRlciB0byB0aGUgb3B0aW9uLCBidXQgdGhlIGhlYWRpbmcgZm9yIHRoZQorICAgb3B0aW9uIGRlc2NyaXB0aW9uIHdhcyAiLUI6OiIsIG5vdCAiLUIgYnJhbmNoOjoiLCBtYWtpbmcgdGhlCisgICBkb2N1bWVudGF0aW9uIG1pc2xlYWRpbmcuCisKK0Fsc28gY29udGFpbnMgbnVtZXJvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTI1NTc0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMi50eHQKQEAgLTAsMCArMSw0MCBAQAorR2l0IDEuNy4xMi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTIuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdoZW4gImdpdCBhbSIgaXMgZmVkIGFuIGlucHV0IHRoYXQgaGFzIG11bHRpcGxlICJDb250ZW50LXR5cGU6IC4uLiIKKyAgIGhlYWRlciwgaXQgZGlkIG5vdCBncm9rIGNoYXJzZXQ9IGF0dHJpYnV0ZSBjb3JyZWN0bHkuCisKKyAqIEV2ZW4gZHVyaW5nIGEgY29uZmxpY3RlZCBtZXJnZSwgImdpdCBibGFtZSAkcGF0aCIgYWx3YXlzIG1lYW50IHRvCisgICBibGFtZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIHRoZSAid29ya2luZyB0cmVlIiB2ZXJzaW9uOyBtYWtlIGl0CisgICBtb3JlIHVzZWZ1bCBieSBzaG93aW5nIGNsZWFubHkgbWVyZ2VkIHBhcnRzIGFzIGNvbWluZyBmcm9tIHRoZSBvdGhlcgorICAgYnJhbmNoIHRoYXQgaXMgYmVpbmcgbWVyZ2VkLgorCisgKiAiZ2l0IGJsYW1lIE1BS0VGSUxFIiBydW4gaW4gYSBoaXN0b3J5IHRoYXQgaGFzICJNYWtlZmlsZSIgYnV0IG5vdAorICAgIk1BS0VGSUxFIiBzaG91bGQgc2F5ICJObyBzdWNoIGZpbGUgTUFLRUZJTEUgaW4gSEVBRCIsIGJ1dCBnb3QKKyAgIGNvbmZ1c2VkIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIGFuZCBmYWlsZWQgdG8gZG8gc28uCisKKyAqICJnaXQgZmV0Y2ggLS1hbGwiLCB3aGVuIHBhc3NlZCAiLS1uby10YWdzIiwgZGlkIG5vdCBob25vciB0aGUKKyAgICItLW5vLXRhZ3MiIG9wdGlvbiB3aGlsZSBmZXRjaGluZyBmcm9tIGluZGl2aWR1YWwgcmVtb3RlcyAodGhlIHNhbWUKKyAgIGlzc3VlIGV4aXN0ZWQgd2l0aCAiLS10YWdzIiwgYnV0IGNvbWJpbmF0aW9uICItLWFsbCAtLXRhZ3MiIG1ha2VzCisgICBtdWNoIGxlc3Mgc2Vuc2UgdGhhbiAiLS1hbGwgLS1uby10YWdzIikuCisKKyAqICJnaXQgbG9nL2RpZmYvZm9ybWF0LXBhdGNoIC0tc3RhdCIgc2hvd2VkIHRoZSAiTiBsaW5lKHMpIGFkZGVkIgorICAgY29tbWVudCBpbiB1c2VyJ3MgbG9jYWxlIGFuZCBjYXVzZWQgY2FyZWxlc3Mgc3VibWl0dGVycyB0byBzZW5kCisgICBwYXRjaGVzIHdpdGggc3VjaCBhIGxpbmUgaW4gdGhlbSB0byBwcm9qZWN0cyB3aG9zZSBwcm9qZWN0IGxhbmd1YWdlCisgICBpcyBub3QgdGhlaXIgbGFuZ3VhZ2UsIG1pbGRseSBpcnJpdGF0aW5nIG90aGVycy4gTG9jYWxpemF0aW9uIHRvCisgICB0aGUgbGluZSBoYXMgYmVlbiBkaXNhYmxlZCBmb3Igbm93LgorCisgKiAiZ2l0IGxvZyAtLWFsbC1tYXRjaCAtLWdyZXA9QSAtLWdyZXA9QiIgb3VnaHQgdG8gc2hvdyBjb21taXRzIHRoYXQKKyAgIG1lbnRpb24gYm90aCBBIGFuZCBCLCBidXQgd2hlbiB0aGVzZSB0aHJlZSBvcHRpb25zIGFyZSB1c2VkIHdpdGgKKyAgIC0tYXV0aG9yIG9yIC0tY29tbWl0dGVyLCBpdCBzaG93ZWQgY29tbWl0cyB0aGF0IG1lbnRpb24gZWl0aGVyIEEgb3IKKyAgIEIgKG9yIGJvdGgpIGluc3RlYWQuCisKKyAqIFRoZSBzdWJjb21tYW5kIHRvIHJlbW92ZSB0aGUgZGVmaW5pdGlvbiBvZiBhIHJlbW90ZSBpbiAiZ2l0IHJlbW90ZSIKKyAgIHdhcyBuYW1lZCAicm0iIGV2ZW4gdGhvdWdoIGFsbCBvdGhlciBzdWJjb21tYW5kcyB3ZXJlIHNwZWxsZWQgb3V0LgorICAgSW50cm9kdWNlICJnaXQgcmVtb3RlIHJlbW92ZSIgdG8gcmVtb3ZlIGNvbmZ1c2lvbiwgYW5kIGtlZXAgInJtIiBhcworICAgYSBiYWNrd2FyZCBjb21wYXRpYmxlIHN5bm9ueW0uCisKK0Fsc28gY29udGFpbnMgYSBoYW5kZnVsIG9mIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkYTQyNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCAxLjcuMTIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEyLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFtIiBtaXNoYW5kbGVkIGEgcGF0Y2ggYXR0YWNoZWQgYXMgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisgICAoZS5nLiBub3QgdGV4dC8qKTsgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyAoZS5nLiBiYXNlNjQpIHdhcyBub3QKKyAgIGhvbm9yZWQgY29ycmVjdGx5LgorCisgKiBJdCB3YXMgdW5jbGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgImdpdCBibGFtZSIgdGhhdCBpdCBpcworICAgdW5uZWNlc3NhcnkgZm9yIHVzZXJzIHRvIHVzZSB0aGUgIi0tZm9sbG93IiBvcHRpb24uCisKKyAqIEEgcmVwb3NpdG9yeSBjcmVhdGVkIHdpdGggImdpdCBjbG9uZSAtLXNpbmdsZSIgaGFkIGl0cyBmZXRjaAorICAgcmVmc3BlY3Mgc2V0IHVwIGp1c3QgbGlrZSBhIGNsb25lIHdpdGhvdXQgIi0tc2luZ2xlIiwgbGVhZGluZyB0aGUKKyAgIHN1YnNlcXVlbnQgImdpdCBmZXRjaCIgdG8gc2x1cnAgYWxsIHRoZSBvdGhlciBicmFuY2hlcywgZGVmZWF0aW5nCisgICB0aGUgd2hvbGUgcG9pbnQgb2Ygc3BlY2lmeWluZyAib25seSB0aGlzIGJyYW5jaCIuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgaHR0cCBoYWQgYW4gb2xkIHdvcmthcm91bmQgZm9yIGFuIHVubGlrZWx5IHNlcnZlcgorICAgbWlzY29uZmlndXJhdGlvbjsgaXQgdHVybnMgb3V0IHRoYXQgdGhpcyBodXJ0cyBkZWJ1Z2dhYmlsaXR5IG9mIHRoZQorICAgY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsLCBhbmQgaGFzIGJlZW4gcmV2ZXJ0ZWQuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgaHR0cCBhZHZlcnRpc2VkIHRoYXQgaXQgc3VwcG9ydHMgImRlZmxhdGUiLCB3aGljaAorICAgaXMgbXVjaCBsZXNzIGNvbW1vbiwgYW5kIGRpZCBub3QgYWR2ZXJ0aXNlIHRoZSBtb3JlIGNvbW1vbiAiZ3ppcCIgb24KKyAgIGl0cyBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyLgorCisgKiAiZ2l0IHJlY2VpdmUtcGFjayIgKHRoZSBjb3VudGVycGFydCB0byAiZ2l0IHB1c2giKSBkaWQgbm90IGdpdmUKKyAgIHByb2dyZXNzIG91dHB1dCB3aGlsZSBwcm9jZXNzaW5nIG9iamVjdHMgaXQgcmVjZWl2ZWQgdG8gdGhlIHB1c2VyCisgICB3aGVuIHJ1biBvdmVyIHRoZSBzbWFydC1odHRwIHByb3RvY29sLgorCisgKiAiZ2l0IHN0YXR1cyIgaG9ub3JlZCB0aGUgaWdub3JlPWRpcnR5IHNldHRpbmdzIGluIC5naXRtb2R1bGVzIGJ1dAorICAgImdpdCBjb21taXQiIGRpZG4ndC4KKworQWxzbyBjb250YWlucyBhIGhhbmRmdWwgb2YgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmRhM2NjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuNC50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IDEuNy4xMi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTIuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgdGhlIGR1bWItaHR0cCByZXZpc2lvbiB3YWxrZXIgY291bGQgc2VnZmF1bHQgd2hlbgorICAgY3VybCdzIG11bHRpIGludGVyZmFjZSB3YXMgdXNlZC4KKworICogSXQgd2FzIHBvc3NpYmxlIHRvIGdpdmUgc3BlY2lmaWMgcGF0aHMgZm9yICJhc2NpaWRvYyIgYW5kIG90aGVyCisgICB0b29scyBpbiB0aGUgZG9jdW1lbnRhdGlvbiB0b29sY2hhaW4sIGJ1dCBub3QgZm9yICJ4bWx0byIuCisKKyAqICJnaXR3ZWIiIGRpZCBub3QgZ2l2ZSB0aGUgY29ycmVjdCBjb21taXR0ZXIgdGltZXpvbmUgaW4gaXRzIGZlZWQKKyAgIG91dHB1dCBkdWUgdG8gYSB0eXBvLgorCisgKiBUaGUgIi1Yb3VycyIgKGFuZCBzaW1pbGFybHkgLVh0aGVpcnMpIGJhY2tlbmQgb3B0aW9uIHRvICJnaXQKKyAgIG1lcmdlIC1zIHJlY3Vyc2l2ZSIgd2FzIGlnbm9yZWQgZm9yIGJpbmFyeSBmaWxlcy4gIE5vdyBpdCBpcworICAgaG9ub3JlZC4KKworICogVGhlICJiaW5hcnkiIHN5bnRoZXRpYyBhdHRyaWJ1dGUgbWFkZSAiZGlmZiIgdG8gdHJlYXQgdGhlIHBhdGggYXMKKyAgIGJpbmFyeSwgYnV0IG5vdCAibWVyZ2UiLgorCitBbHNvIGNvbnRhaW5zIG1hbnkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMGQ4YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi50eHQKQEAgLTAsMCArMSwxMzYgQEAKK0dpdCB2MS43LjEyIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjExCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEdpdCBjYW4gYmUgdG9sZCB0byBub3JtYWxpemUgcGF0aG5hbWVzIGl0IHJlYWQgZnJvbSByZWFkZGlyKDMpIGFuZAorICAgYWxsIGFyZ3VtZW50cyBpdCBnb3QgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGludG8gcHJlY29tcG9zZWQgVVRGLTgKKyAgIChhc3N1bWluZyB0aGF0IHRoZXkgY29tZSBhcyBkZWNvbXBvc2VkIFVURi04KSwgaW4gb3JkZXIgdG8gd29yaworICAgYXJvdW5kIGlzc3VlcyBvbiBNYWMgT1MuCisKKyAgIEkgdGhpbmsgdGhlcmUgc3RpbGwgYXJlIG90aGVyIHBsYWNlcyB0aGF0IG5lZWQgY29udmVyc2lvbgorICAgKGUuZy4gcGF0aHMgdGhhdCBhcmUgcmVhZCBmcm9tIHN0ZGluIGZvciBzb21lIGNvbW1hbmRzKSwgYnV0IHRoaXMKKyAgIHNob3VsZCBiZSBhIGdvb2QgZmlyc3Qgc3RlcCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgorCisgKiBQZXItdXNlciAkSE9NRS8uZ2l0Y29uZmlnIGZpbGUgY2FuIG9wdGlvbmFsbHkgYmUgc3RvcmVkIGluCisgICAkSE9NRS8uY29uZmlnL2dpdC9jb25maWcgaW5zdGVhZCwgd2hpY2ggaXMgaW4gbGluZSB3aXRoIFhERy4KKworICogVGhlIHZhbHVlIG9mIGNvcmUuYXR0cmlidXRlc2ZpbGUgYW5kIGNvcmUuZXhjbHVkZXNmaWxlIGRlZmF1bHQgdG8KKyAgICRIT01FLy5jb25maWcvZ2l0L2F0dHJpYnV0ZXMgYW5kICRIT01FLy5jb25maWcvZ2l0L2lnbm9yZSByZXNwZWN0aXZlbHkKKyAgIHdoZW4gdGhlc2UgZmlsZXMgZXhpc3QuCisKKyAqIExvZ2ljIHRvIGRpc2FtYmlndWF0ZSBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMgaGF2ZSBiZWVuIHRhdWdodCB0bworICAgdGFrZSBhZHZhbnRhZ2Ugb2Ygb2JqZWN0IHR5cGVzIHRoYXQgYXJlIGV4cGVjdGVkIGluIHRoZSBjb250ZXh0LAorICAgZS5nLiBYWFhYWFggaW4gdGhlICJnaXQgZGVzY3JpYmUiIG91dHB1dCB2MS4yLjMtZ1hYWFhYWCBtdXN0IGJlIGEKKyAgIGNvbW1pdCBvYmplY3QsIG5vdCBhIGJsb2Igbm9yIGEgdHJlZS4gIFRoaXMgd2lsbCBoZWxwIHVzIHByb2xvbmcKKyAgIHRoZSBsaWZldGltZSBvZiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMuCisKKyAqICJnaXQgYXBwbHkiIGxlYXJuZWQgdG8gd2lnZ2xlIHRoZSBiYXNlIHZlcnNpb24gYW5kIHBlcmZvcm0gdGhyZWUtd2F5CisgICBtZXJnZSB3aGVuIGEgcGF0Y2ggZG9lcyBub3QgZXhhY3RseSBhcHBseSB0byB0aGUgdmVyc2lvbiB5b3UgaGF2ZS4KKworICogU2NyaXB0ZWQgUG9yY2VsYWluIHdyaXRlcnMgbm93IGhhdmUgYWNjZXNzIHRvIHRoZSBjcmVkZW50aWFsIEFQSSB2aWEKKyAgIHRoZSAiZ2l0IGNyZWRlbnRpYWwiIHBsdW1iaW5nIGNvbW1hbmQuCisKKyAqICJnaXQgaGVscCIgdXNlZCB0byBhbHdheXMgZGVmYXVsdCB0byAibWFuIiBmb3JtYXQgZXZlbiBvbiBwbGF0Zm9ybXMKKyAgIHdoZXJlICJtYW4iIHZpZXdlciBpcyBub3Qgd2lkZWx5IGF2YWlsYWJsZS4KKworICogImdpdCBjbG9uZSAtLWxvY2FsICRwYXRoIiBzdGFydGVkIGl0cyBsaWZlIGFzIGFuIGV4cGVyaW1lbnQgdG8KKyAgIG9wdGlvbmFsbHkgdXNlIGxpbmsvY29weSB3aGVuIGNsb25pbmcgYSByZXBvc2l0b3J5IG9uIHRoZSBkaXNrLCBidXQKKyAgIHdlIGRpZG4ndCBkZXByZWNhdGUgaXQgYWZ0ZXIgd2UgbWFkZSB0aGUgb3B0aW9uIGEgbm8tb3AgdG8gYWx3YXlzCisgICB1c2UgdGhlIG9wdGltaXphdGlvbi4gIFRoZSBjb21tYW5kIGxlYXJuZWQgIi0tbm8tbG9jYWwiIG9wdGlvbiB0bworICAgdHVybiB0aGlzIG9mZiwgYXMgYSBtb3JlIGV4cGxpY2l0IGFsdGVybmF0aXZlIG92ZXIgdXNlIG9mIGZpbGU6Ly8KKyAgIFVSTC4KKworICogImdpdCBmZXRjaCIgYW5kIGZyaWVuZHMgdXNlZCB0byBzYXkgInJlbW90ZSBzaWRlIGh1bmcgdXAKKyAgIHVuZXhwZWN0ZWRseSIgd2hlbiB0aGV5IGZhaWxlZCB0byBnZXQgcmVzcG9uc2UgdGhleSBleHBlY3QgZnJvbSB0aGUKKyAgIG90aGVyIHNpZGUsIGJ1dCBvbmUgY29tbW9uIHJlYXNvbiB3aHkgdGhleSBkb24ndCBnZXQgZXhwZWN0ZWQKKyAgIHJlc3BvbnNlIGlzIHRoYXQgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGRvZXMgbm90IGV4aXN0IG9yIGNhbm5vdCBiZQorICAgcmVhZC4gVGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhpcyBjYXNlIHdhcyB1cGRhdGVkIHRvIGdpdmUgYmV0dGVyCisgICBoaW50cyB0byB0aGUgdXNlci4KKworICogImdpdCBoZWxwIC13ICRjbWQiIGNhbiBzaG93IEhUTUwgdmVyc2lvbiBvZiBkb2N1bWVudGF0aW9uIGZvcgorICAgImdpdC0kY21kIiBieSBzZXR0aW5nIGhlbHAuaHRtbHBhdGggdG8gc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlCisgICBkZWZhdWx0IGxvY2F0aW9uIHdoZXJlIHRoZSBidWlsZCBwcm9jZWR1cmUgaW5zdGFsbHMgdGhlbSBsb2NhbGx5OworICAgdGhlIHZhcmlhYmxlIGNhbiBldmVuIHBvaW50IGF0IGEgaHR0cDovLyBVUkwuCisKKyAqICJnaXQgcmViYXNlIFstaV0gLS1yb290ICR0aXAiIGNhbiBub3cgYmUgdXNlZCB0byByZXdyaXRlIGFsbCB0aGUKKyAgIGhpc3RvcnkgbGVhZGluZyB0byAiJHRpcCIgZG93biB0byB0aGUgcm9vdCBjb21taXQuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkICIteCA8Y21kPiIgdG8gaW5zZXJ0ICJleGVjIDxjbWQ+IiBhZnRlcgorICAgZWFjaCBjb21taXQgaW4gdGhlIHJlc3VsdGluZyBoaXN0b3J5LgorCisgKiAiZ2l0IHN0YXR1cyIgZ2l2ZXMgZmluZXIgY2xhc3NpZmljYXRpb24gdG8gdmFyaW91cyBzdGF0ZXMgb2YgcGF0aHMKKyAgIGluIGNvbmZsaWN0ZWQgc3RhdGUgYW5kIG9mZmVyIGFkdmljZSBtZXNzYWdlcyBpbiBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCB0byBkZWFsIHdpdGggbmVzdGVkIHN1Ym1vZHVsZSBzdHJ1Y3R1cmUKKyAgIHdoZXJlIGEgbW9kdWxlIGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBtb2R1bGUgd2hvc2Ugb3JpZ2luIGlzCisgICBzcGVjaWZpZWQgYXMgYSByZWxhdGl2ZSBVUkwgdG8gaXRzIHN1cGVycHJvamVjdCdzIG9yaWdpbi4KKworICogQSByYXRoZXIgaGVhdnktaXNoICJnaXQgY29tcGxldGlvbiIgc2NyaXB0IGhhcyBiZWVuIHNwbGl0IHRvIGNyZWF0ZQorICAgYSBzZXBhcmF0ZSAiZ2l0IHByb21wdGluZyIgc2NyaXB0LCB0byBoZWxwIGxhenktYXV0b2xvYWRpbmcgb2YgdGhlCisgICBjb21wbGV0aW9uIHBhcnQgd2hpbGUgbWFraW5nIHByb21wdGluZyBwYXJ0IGFsd2F5cyBhdmFpbGFibGUuCisKKyAqICJnaXR3ZWIiIHBheXMgYXR0ZW50aW9uIHRvIHZhcmlvdXMgZm9ybXMgb2YgY3JlZGl0cyB0aGF0IGFyZQorICAgc2ltaWxhciB0byAiU2lnbmVkLW9mZi1ieToiIGxpbmVzIGluIHRoZSBjb21taXQgb2JqZWN0cyBhbmQKKyAgIGhpZ2hsaWdodHMgdGhlbSBhY2NvcmRpbmdseS4KKworCitGb3JlaWduIEludGVyZmFjZQorCisgKiAibWVkaWF3aWtpIiByZW1vdGUgaGVscGVyIChpbiBjb250cmliLykgbGVhcm5lZCB0byBoYW5kbGUgZmlsZQorICAgYXR0YWNobWVudHMuCisKKyAqICJnaXQgcDQiIG5vdyB1c2VzICJKb2JzOiIgYW5kICJwNCBtb3ZlIiB3aGVuIGFwcHJvcHJpYXRlLgorCisgKiB2Y3Mtc3ZuIGhhcyBiZWVuIHVwZGF0ZWQgdG8gY2xlYW4tdXAgY29tcGlsYXRpb24sIGxpZnQgMzItYml0CisgICBsaW1pdGF0aW9ucywgZXRjLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLiAocGxlYXNlIHJlcG9ydCBwb3NzaWJsZSByZWdyZXNzaW9ucykKKworICogU29tZSB0ZXN0cyBzaG93ZWQgZmFsc2UgZmFpbHVyZXMgY2F1c2VkIGJ5IGEgYnVnIGluIGVjcnlwdG9mcy4KKworICogV2Ugbm8gbG9uZ2VyIHVzZSBBc2NpaURvYzcgc3ludGF4IGluIG91ciBkb2N1bWVudGF0aW9uIGFuZCBmYXZvciBhCisgICBtb3JlIG1vZGVybiBzdHlsZS4KKworICogImdpdCBhbSAtLXJlYmFzaW5nIiBjb2RlcGF0aCB3YXMgdGF1Z2h0IHRvIGdyYWIgYXV0aG9yc2hpcCwgbG9nCisgICBtZXNzYWdlIGFuZCB0aGUgcGF0Y2ggdGV4dCBkaXJlY3RseSBvdXQgb2YgZXhpc3RpbmcgY29tbWl0cy4gIFRoaXMKKyAgIHdpbGwgaGVscCByZWJhc2luZyBjb21taXRzIHRoYXQgaGF2ZSBjb25mdXNpbmcgImRpZmYiIG91dHB1dCBpbgorICAgdGhlaXIgbG9nIG1lc3NhZ2VzLgorCisgKiAiZ2l0IGluZGV4LXBhY2siIGFuZCAiZ2l0IHBhY2stb2JqZWN0cyIgdXNlIHN0cmVhbWluZyBBUEkgdG8gcmVhZAorICAgZnJvbSB0aGUgb2JqZWN0IHN0b3JlIHRvIGF2b2lkIGhhdmluZyB0byBob2xkIGEgbGFyZ2UgYmxvYiBvYmplY3QKKyAgIGluLWNvcmUgd2hpbGUgdGhleSBhcmUgZG9pbmcgdGhlaXIgdGhpbmcuCisKKyAqIENvZGUgdG8gbWF0Y2ggcGF0aHMgd2l0aCBleGNsdWRlIHBhdHRlcm5zIGxlYXJuZWQgdG8gYXZvaWQgY2FsbGluZworICAgZm5tYXRjaCgpIGJ5IGNvbXBhcmluZyBmaXhlZCBsZWFkaW5nIHN1YnN0cmluZyBsaXRlcmFsbHkgd2hlbgorICAgcG9zc2libGUuCisKKyAqICJnaXQgbG9nIC1uIDEgLS0gcmFyZWx5LXRvdWNoZWQtcGF0aCIgd2FzIHNwZW5kaW5nIHVubmVjZXNzYXJ5CisgICBjeWNsZXMgYWZ0ZXIgc2hvd2luZyB0aGUgZmlyc3QgY2hhbmdlIHRvIGZpbmQgdGhlIG5leHQgb25lLCBvbmx5IHRvCisgICBkaXNjYXJkIGl0LgorCisgKiAiZ2l0IHN2biIgZ290IGEgbGFyZ2UtbG9va2luZyBjb2RlIHJlb3JnYW5pemF0aW9uIGF0IHRoZSBsYXN0CisgICBtaW51dGUgYmVmb3JlIHRoZSBjb2RlIGZyZWV6ZS4KKworCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy4xMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuMTEgaW4gdGhlIG1haW50ZW5hbmNlCityZWxlYXNlcyBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQiIHdhcyBjb25mdXNlZCB3aGVuIHRoZSBzdXBlcnByb2plY3QgZGlkIG5vdCBoYXZlCisgICBpdHMgcmVwb3NpdG9yeSBpbiBpdHMgdXN1YWwgcGxhY2UgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgR0lUX0RJUgorICAgYW5kIEdJVF9XT1JLX1RSRUUgd2FzIHVzZWQgdG8gYWNjZXNzIGl0LgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIiBsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbG9nIG1lc3NhZ2UgYW5kIHRoZW4gZGllZAorICAgd2hlbiB0aGUgaHVtYW4tcmVhZGFibGUgY29tbWl0dGVyIG5hbWUgd2FzIGdpdmVuIGluc3VmZmljaWVudGx5IGJ5CisgICBnZXRwd2VudCgzKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDNjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjEudHh0CkBAIC0wLDAgKzEsMjUgQEAKK0dpdCB2MS43LjIuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGluc3Rhd2ViIiB3YXNuJ3QgdXNlZnVsIHdoZW4geW91ciBBcGFjaGUgd2FzIGluc3RhbGxlZCB1bmRlciBhCisgICBuYW1lIG90aGVyIHRoYW4gYXBhY2hlMiAoZS5nLiAiaHR0cGQiKS4KKworICogU2ltaWxhcmx5LCAiZ2l0IHdlYi0tYnJvd3NlIiAoaW52b2tlZCBieSAiZ2l0IGhlbHAgLXciKSBsZWFybmVkIHRoYXQKKyAgIGNocm9tZSBicm93c2VyIGlzIHNvbWV0aW1lcyBjYWxsZWQgZ29vZ2xlLWNocm9tZS4KKworICogQW4gb3ZlcmxvbmcgbGluZSBhZnRlciAiLmdpdGRpcjogIiBpbiBhIGdpdCBmaWxlIGNhdXNlZCBvdXQgb2YgYm91bmRzCisgICBhY2Nlc3MgdG8gYW4gYXJyYXkgb24gdGhlIHN0YWNrLgorCisgKiAiZ2l0IGNvbmZpZyAtLXBhdGggY29uZi52YXIiIHRvIGF0dGVtcHQgdG8gZXhwYW5kIGEgdmFyaWFibGUgY29uZi52YXIKKyAgIHRoYXQgdXNlcyAifi8iIHNob3J0LWhhbmQgc2VnZmF1bHRlZCB3aGVuICRIT01FIGVudmlyb25tZW50IHZhcmlhYmxlCisgICB3YXMgbm90IHNldC4KKworICogRG9jdW1lbnRhdGlvbiBvbiBDeWd3aW4gZmFpbGVkIHRvIGJ1aWxkLgorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgcHVsbCBibGFyZyIgd2hlbiAnYmxhcmcnIGlzIGFuIHVua25vd24KKyAgIHJlbW90ZSBuYW1lIGhhcyBiZWVuIGltcHJvdmVkLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZWI2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjIudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0dpdCB2MS43LjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogT2JqZWN0IHRyYW5zZmVyIG92ZXIgc21hcnQgaHR0cCB0cmFuc3BvcnQgZGVhZGxvY2tlZCB0aGUgY2xpZW50IHdoZW4KKyAgIHRoZSByZW1vdGUgSFRUUCBzZXJ2ZXIgcmV0dXJuZWQgYSBmYWlsdXJlLCBpbnN0ZWFkIG9mIGVycm9yaW5nIGl0IG91dC4KKworICogZ2l0LWd1aSBob25vcnMgY3VzdG9tIHRleHRjb252IGZpbHRlcnMgd2hlbiBzaG93aW5nIGRpZmYgYW5kIGJsYW1lOworCisgKiBnaXQgZGlmZiAtLXJlbGF0aXZlPXN1YmRpciAod2l0aG91dCB0aGUgbmVjZXNzYXJ5IHRyYWlsaW5nIC8pIGRpZCBub3QKKyAgIHdvcmsgd2VsbDsKKworICogImdpdCBkaWZmLWZpbGVzIC1wIC0tc3VibW9kdWxlIiB3YXMgcmVjZW50bHkgYnJva2VuOworCisgKiAiZ2l0IGNoZWNrb3V0IC1iIG4gJzovdG9rZW4nIiBkaWQgbm90IHdvcms7CisKKyAqICJnaXQgaW5kZXgtcGFjayIgKGhlbmNlICJnaXQgZmV0Y2gvY2xvbmUvcHVsbC9wdXNoIikgZW5hYmxlZCB0aGUgb2JqZWN0CisgICByZXBsYWNlbWVudCBtYWNoaW5lcnkgYnkgbWlzdGFrZSAoaXQgbmV2ZXIgc2hvdWxkIGhhdmUpOworCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMDk2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjMudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0dpdCB2MS43LjIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjIuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2hlbiBwZW9wbGUgdHJ5IGluc2FuZSB0aGluZ3Mgc3VjaCBhcyBkZWx0YS1jb21wcmVzc2luZyA0R2lCIGZpbGVzLCB3ZQorICAgdGhyZXcgYW4gYXNzZXJ0aW9uIGZhaWx1cmUuCisKKyAqICJnaXQgYXJjaGl2ZSIgZ2F2ZSB0aGUgZnVsbCBjb21taXQgSUQgZm9yICIkRm9ybWF0OiVoJCIuCisKKyAqICJnaXQgZmV0Y2ggLS10YWdzIiBkaWQgbm90IGZldGNoIHRhZ3Mgd2hlbiByZW1vdGUuPG5pY2s+LnRhZ29wdCB3YXMgc2V0CisgICB0byAtLW5vLXRhZ3MuICBUaGUgY29tbWFuZCBsaW5lIG9wdGlvbiBub3cgb3ZlcnJpZGVzIHRoZSBjb25maWd1cmF0aW9uCisgICBzZXR0aW5nLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShvYmplY3RuYW1lOnNob3J0KSciIGhhcyBiZWVuIGNvbXBsZXRlbHkKKyAgIGJyb2tlbiBmb3IgYSBsb25nIHRpbWUuCisKKyAqICJnaXQgZ2MiIGluY29ycmVjdGx5IHBydW5lZCBhIHJlcmVyZSByZWNvcmQgdGhhdCB3YXMgY3JlYXRlZCBsb25nCisgICB0aW1lIGFnbyBidXQgc3RpbGwgaXMgYWN0aXZlbHkgYW5kIHJlcGVhdGVkbHkgdXNlZC4KKworICogImdpdCBsb2cgLS1mb2xsb3cgLU0gLXAiIHdhcyBzZXJpb3VzbHkgYnJva2VuIGluIDEuNy4yLCByZXBvcnRpbmcKKyAgIGFzc2VydGlvbiBmYWlsdXJlLgorCisgKiBSdW5uaW5nICJnaXQgbG9nIiB3aXRoIGFuIGluY29ycmVjdCBvcHRpb24gc3RhcnRlZCBwYWdlciBuZXZlcnRoZWxlc3MsCisgICBmb3JjaW5nIHRoZSB1c2VyIHRvIGRpc21pc3MgaXQuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZSB1c2VyIGhhcyBkaWZmLnJlbmFtZXMKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgc2V0LgorCisgKiBBbiBlYXJsaWVyIChhbmQgcmF0aGVyIG9sZCkgZml4IHRvICJnaXQgcmViYXNlIiBhZ2FpbnN0IGEgcmViYXNlZAorICAgdXBzdHJlYW0gYnJva2UgYSBtb3JlIG5vcm1hbCwgbm9uIHJlYmFzZWQgdXBzdHJlYW0gY2FzZSByYXRoZXIgYmFkbHksCisgICBhdHRlbXB0aW5nIHRvIHJlLWFwcGx5IHBhdGNoZXMgdGhhdCBhcmUgYWxyZWFkeSBhY2NlcHRlZCB1cHN0cmVhbS4KKworICogImdpdCBzdWJtb2R1bGUgc3luYyIgZm9yZ290IHRvIHVwZGF0ZSB0aGUgc3VwZXJwcm9qZWN0J3MgY29uZmlnIGZpbGUKKyAgIHdoZW4gc3VibW9kdWxlIFVSTCBjaGFuZ2VkLgorCisgKiAiZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lIiBkaWQgbm90IHJlbW92ZSBhIGRpcmVjdG9yeSB0aGF0IGhhcworICAgYmVjb21lIGVtcHR5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5NTBhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNC50eHQKQEAgLTAsMCArMSwxMCBAQAorR2l0IHYxLjcuMi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgcHJpbWFyaWx5IHRvIGJhY2twb3J0IHN1cHBvcnQgZm9yIHRoZSBuZXcgImFkZC5pZ25vcmVFcnJvcnMiCituYW1lIGdpdmVuIHRvIHRoZSBleGlzdGluZyAiYWRkLmlnbm9yZS1lcnJvcnMiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK1RoZSBuZXh0IHZlcnNpb24sIEdpdCAxLjcuNCwgYW5kIGZ1dHVyZSB2ZXJzaW9ucywgd2lsbCBzdXBwb3J0IGJvdGgKK29sZCBhbmQgaW5jb3JyZWN0IG5hbWUgYW5kIHRoZSBuZXcgY29ycmVjdGVkIG5hbWUsIGJ1dCB3aXRob3V0IHRoaXMKK2JhY2twb3J0LCB1c2VycyB3aG8gd2FudCB0byB1c2UgdGhlIG5ldyBuYW1lICJhZGQuaWdub3JlRXJyb3JzIiBpbgordGhlaXIgcmVwb3NpdG9yaWVzIGNhbm5vdCB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5NzZjNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNS50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjEuNy4yLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4yLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVjZjAxMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIudHh0CkBAIC0wLDAgKzEsMTUxIEBACitHaXQgdjEuNy4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogY29yZS5lb2wgY29uZmlndXJhdGlvbiBhbmQgdGV4dC9lb2wgYXR0cmlidXRlcyBhcmUgdGhlIG5ldyB3YXkgdG8gY29udHJvbAorICAgdGhlIGVuZCBvZiBsaW5lIGNvbnZlbnRpb25zIGZvciBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLgorCisgKiBjb3JlLmF1dG9jcmxmIGhhcyBiZWVuIG1hZGUgc2FmZXIgLSBpdCB3aWxsIG5vdyBvbmx5IGhhbmRsZSBsaW5lCisgICBlbmRpbmdzIGZvciBuZXcgZmlsZXMgYW5kIGZpbGVzIHRoYXQgYXJlIExGLW9ubHkgaW4gdGhlCisgICByZXBvc2l0b3J5LiBUbyBub3JtYWxpemUgY29udGVudCB0aGF0IGhhcyBiZWVuIGNoZWNrZWQgaW4gd2l0aAorICAgQ1JMRiwgdXNlIHRoZSBuZXcgZW9sL3RleHQgYXR0cmlidXRlcy4KKworICogVGhlIHdoaXRlc3BhY2UgcnVsZXMgdXNlZCBpbiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZSIgYW5kICJnaXQgZGlmZiIKKyAgIGdhaW5lZCBhIG5ldyBtZW1iZXIgaW4gdGhlIGZhbWlseSAodGFiLWluLWluZGVudCkgdG8gaGVscCBwcm9qZWN0cyB3aXRoCisgICBwb2xpY3kgdG8gaW5kZW50IG9ubHkgd2l0aCBzcGFjZXMuCisKKyAqIFdoZW4gd29ya2luZyBmcm9tIGEgc3ViZGlyZWN0b3J5LCBieSBkZWZhdWx0LCBnaXQgZG9lcyBub3QgbG9vayBmb3IgaXRzCisgICBtZXRhZGlyZWN0b3J5ICIuZ2l0IiBhY3Jvc3MgZmlsZXN5c3RlbXMsIHByaW1hcmlseSB0byBoZWxwIHBlb3BsZSB3aG8KKyAgIGhhdmUgaW52b2NhdGlvbnMgb2YgZ2l0IGluIHRoZWlyIGN1c3RvbSBQUzEgcHJvbXB0cywgYXMgYmVpbmcgb3V0c2lkZQorICAgb2YgYSBnaXQgcmVwb3NpdG9yeSB3b3VsZCBsb29rIGZvciAiLmdpdCIgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIHJvb3QKKyAgIGRpcmVjdG9yeSwgYW5kIE5GUyBtb3VudHMgYXJlIG9mdGVuIHNsb3cuICBESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0KKyAgIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHRlbGwgZ2l0IG5vdCB0byBzdG9wIGF0IGEKKyAgIGZpbGVzeXN0ZW0gYm91bmRhcnkuCisKKyAqIFVzYWdlIGhlbHAgbWVzc2FnZXMgZ2VuZXJhdGVkIGJ5IHBhcnNlLW9wdGlvbnMgbGlicmFyeSAoaS5lLiBtb3N0CisgICBvZiB0aGUgUG9yY2VsYWluIGNvbW1hbmRzKSBhcmUgc2VudCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IG5vdy4KKworICogJzovPHN0cmluZz4nIG5vdGF0aW9uIHRvIGxvb2sgZm9yIGEgY29tbWl0IG5vdyB0YWtlcyByZWd1bGFyIGV4cHJlc3Npb24KKyAgIGFuZCBpdCBpcyBub3QgYW5jaG9yZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tbWl0IGxvZyBtZXNzYWdlCisgICBhbnltb3JlICh0aGlzIGlzIGEgYmFja3dhcmQgaW5jb21wYXRpYmxlIGNoYW5nZSkuCisKKyAqICJnaXQiIHdyYXBwZXIgbGVhcm5lZCAiLWMgbmFtZT12YWx1ZSIgb3B0aW9uIHRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICogSW1wcm92ZWQgcG9ydGFiaWxpdHkgZm9yIHZhcmlvdXMgcGxhdGZvcm1zIGluY2x1ZGluZyBvbGRlciBTdW5PUywKKyAgIEhQLVVYIDEwLzExLCBBSVgsIFRydTY0LCBldGMuIGFuZCBwbGF0Zm9ybXMgd2l0aCBQeXRob24gMi40LgorCisgKiBUaGUgbWVzc2FnZSBmcm9tICJnaXQgYW0gLTMiIGhhcyBiZWVuIGltcHJvdmVkIHdoZW4gY29uZmxpY3QKKyAgIHJlc29sdXRpb24gZW5kZWQgdXAgbWFraW5nIHRoZSBwYXRjaCBhIG5vLW9wLgorCisgKiAiZ2l0IGJsYW1lIiBhcHBsaWVzIHRoZSB0ZXh0Y29udiBmaWx0ZXIgdG8gdGhlIGNvbnRlbnRzIGl0IHdvcmtzCisgICBvbiwgd2hlbiBhdmFpbGFibGUuCisKKyAqICJnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3YnJhbmNoIiBpcyBzaW1pbGFyIHRvICItYiBuZXdicmFuY2giIGJ1dAorICAgcHJlcGFyZXMgdG8gY3JlYXRlIGEgcm9vdCBjb21taXQgdGhhdCBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBleGlzdGluZworICAgY29tbWl0LgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBsZWFybmVkIHRvIHBpY2sgYSByYW5nZSBvZiBjb21taXRzCisgICAoZS5nLiAiY2hlcnJ5LXBpY2sgQS4uQiIgYW5kICJjaGVycnktcGljayAtLXN0ZGluIiksIHNvIGRpZCAiZ2l0CisgICByZXZlcnQiOyB0aGVzZSBkbyBub3Qgc3VwcG9ydCB0aGUgbmljZXIgc2VxdWVuY2luZyBjb250cm9sICJyZWJhc2UKKyAgIFstaV0iIGhhcywgdGhvdWdoLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBhbmQgImdpdCByZXZlcnQiIGxlYXJuZWQgLS1zdHJhdGVneSBvcHRpb24gdG8gc3BlY2lmeQorICAgdGhlIG1lcmdlIHN0cmF0ZWd5IHRvIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIHRocmVlLXdheSBtZXJnZXMuCisKKyAqICJnaXQgY3Zzc2VydmVyIiBjYW4gYmUgdG9sZCB0byB1c2UgcHNlcnZlcjsgaXRzIHBhc3N3b3JkIGZpbGUgY2FuIGJlCisgICBzdG9yZWQgb3V0c2lkZSB0aGUgcmVwb3NpdG9yeS4KKworICogVGhlIG91dHB1dCBmcm9tIHRoZSB0ZXh0Y29udiBmaWx0ZXIgdXNlZCBieSAiZ2l0IGRpZmYiIGNhbiBiZSBjYWNoZWQgdG8KKyAgIHNwZWVkIHVwIHRoZWlyIHJldXNlLgorCisgKiAiZ2l0IGRpZmYgLS13b3JkLWRpZmY9PG1vZGU+IiBleHRlbmRzIHRoZSBleGlzdGluZyAiLS1jb2xvci13b3JkcyIKKyAgIG9wdGlvbiwgbWFraW5nIGl0IG1vcmUgdXNlZnVsIGluIGNvbG9yLWNoYWxsZW5nZWQgZW52aXJvbm1lbnRzLgorCisgKiBUaGUgcmVnZXhwIHRvIGRldGVjdCBmdW5jdGlvbiBoZWFkZXJzIHVzZWQgYnkgImdpdCBkaWZmIiBmb3IgUEhQIGhhcworICAgYmVlbiBlbmhhbmNlZCBmb3IgdmlzaWJpbGl0eSBtb2RpZmllcnMgKHB1YmxpYywgcHJvdGVjdGVkLCBldGMuKSB0bworICAgYmV0dGVyIHN1cHBvcnQgUEhQNS4KKworICogImRpZmYubm9wcmVmaXgiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gaW1wbGljaXRseQorICAgYXNrIGZvciAiZGlmZiAtLW5vLXByZWZpeCIgYmVoYXZpb3VyLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgbGVhcm5lZCAiJShvYmplY3RuYW1lOnNob3J0KSIgdGhhdCBnaXZlcyB0aGUgb2JqZWN0CisgICBuYW1lIGFiYnJldmlhdGVkLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAtLXNpZ25hdHVyZSBvcHRpb24gYW5kIGZvcm1hdC5zaWduYXR1cmUKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gY3VzdG9taXplIHRoZSBlLW1haWwgc2lnbmF0dXJlIHVzZWQgaW4gdGhlCisgICBvdXRwdXQuCisKKyAqIFZhcmlvdXMgb3B0aW9ucyB0byAiZ2l0IGdyZXAiIChlLmcuIC0tY291bnQsIC0tbmFtZS1vbmx5KSB3b3JrIGJldHRlcgorICAgd2l0aCBiaW5hcnkgZmlsZXMuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAiLU92aSIgdG8gb3BlbiB0aGUgZmlsZXMgd2l0aCBoaXRzIGluIHlvdXIgZWRpdG9yLgorCisgKiAiZ2l0IGhlbHAgLXciIGxlYXJuZWQgImNocm9tZSIgYW5kICJjaHJvbWl1bSIgYnJvd3NlcnMuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIHNob3dzIGNvbW1pdCBkZWNvcmF0aW9ucyBpbiB2YXJpb3VzIGNvbG91cnMuCisKKyAqICJnaXQgbG9nIC0tZm9sbG93IDxwYXRoPiIgZm9sbG93cyBhY3Jvc3MgY29waWVzIChpdCB1c2VkIHRvIG9ubHkgZm9sbG93CisgICByZW5hbWVzKS4gIFRoaXMgbWF5IG1ha2UgdGhlIHByb2Nlc3NpbmcgbW9yZSBleHBlbnNpdmUuCisKKyAqICJnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDo8dGVtcGxhdGU+IiBzcGVjaWZpZXIgbGVhcm5lZCAiJSA8c29tZXRoaW5nPiIKKyAgIG1hZ2ljIHRoYXQgaW5zZXJ0cyBhIHNwYWNlIG9ubHkgd2hlbiAlPHNvbWV0aGluZz4gZXhwYW5kcyB0byBhCisgICBub24tZW1wdHkgc3RyaW5nOyB0aGlzIGlzIHNpbWlsYXIgdG8gIiUrPHNvbWV0aGluZz4iIG1hZ2ljLCBidXQgaXMKKyAgIHVzZWZ1bCBpbiBhIGNvbnRleHQgdG8gZ2VuZXJhdGUgYSBzaW5nbGUgbGluZSBvdXRwdXQuCisKKyAqICJnaXQgbm90ZXMgcHJ1bmUiIGxlYXJuZWQgIi1uIiAoZHJ5LXJ1bikgYW5kICItdiIgb3B0aW9ucywgc2ltaWxhciB0bworICAgd2hhdCAiZ2l0IHBydW5lIiBoYXMuCisKKyAqICJnaXQgcGF0Y2gtaWQiIGNhbiBiZSBmZWQgYSBtYm94IHdpdGhvdXQgZ2V0dGluZyBjb25mdXNlZCBieSB0aGUKKyAgIHNpZ25hdHVyZSBsaW5lIGluIHRoZSBmb3JtYXQtcGF0Y2ggb3V0cHV0LgorCisgKiAiZ2l0IHJlbW90ZSIgbGVhcm5lZCAic2V0LWJyYW5jaGVzIiBzdWJjb21tYW5kLgorCisgKiAiZ2l0IHJldi1saXN0IEEuLkIiIGxlYXJuZWQgLS1hbmNlc3RyeS1wYXRoIG9wdGlvbiB0byBmdXJ0aGVyIGxpbWl0CisgICB0aGUgcmVzdWx0IHRvIHRoZSBjb21taXRzIHRoYXQgYXJlIG9uIHRoZSBhbmNlc3RyeSBjaGFpbiBiZXR3ZWVuIEEgYW5kCisgICBCIChpLmUuIGNvbW1pdHMgdGhhdCBhcmUgbm90IGRlc2NlbmRhbnRzIG9mIEEgYXJlIGV4Y2x1ZGVkKS4KKworICogImdpdCBzaG93IC01IiBpcyBlcXVpdmFsZW50IHRvICJnaXQgc2hvdyAtLWRvLXdhbGsgNSI7IHRoaXMgaXMgc2ltaWxhcgorICAgdG8gdGhlIHVwZGF0ZSB0byBtYWtlICJnaXQgc2hvdyBtYXN0ZXIuLm5leHQiIHdhbGsgdGhlIGhpc3RvcnksCisgICBpbnRyb2R1Y2VkIGluIDEuNi40LgorCisgKiAiZ2l0IHN0YXR1cyBbLXNdIC0taWdub3JlZCIgY2FuIGJlIHVzZWQgdG8gbGlzdCBpZ25vcmVkIHBhdGhzLgorCisgKiAiZ2l0IHN0YXR1cyAtcyAtYiIgc2hvd3MgdGhlIGN1cnJlbnQgYnJhbmNoIGluIHRoZSBvdXRwdXQuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkICItLWlnbm9yZS1zdWJtb2R1bGVzIiBvcHRpb24uCisKKyAqIFZhcmlvdXMgImdpdHdlYiIgZW5oYW5jZW1lbnRzIGFuZCBjbGVhbi11cHMsIGluY2x1ZGluZyBzeW50YXgKKyAgIGhpZ2hsaWdodGluZywgInBsYWNrdXAiIHN1cHBvcnQgZm9yIGluc3Rhd2ViLCAuZmNnaSBzdWZmaXggdG8gcnVuCisgICBpdCBhcyBGYXN0Q0dJIHNjcmlwdCwgZXRjLgorCisgKiBUaGUgdGVzdCBoYXJuZXNzIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcHJvZHVjZSBUQVAtZnJpZW5kbHkgb3V0cHV0LgorCisgKiBNYW55IGRvY3VtZW50YXRpb24gaW1wcm92ZW1lbnQgcGF0Y2hlcyBhcmUgYWxzbyBpbmNsdWRlZC4KKworCitGaXhlcyBzaW5jZSB2MS43LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjcuMS5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogV2UgZGlkbid0IFVSTCBkZWNvZGUgImZpbGU6Ly8vcGF0aC90by9yZXBvIiBjb3JyZWN0bHkgd2hlbiBwYXRoL3RvL3JlcG8KKyAgIGhhZCBwZXJjZW50LWVuY29kZWQgY2hhcmFjdGVycyAoNjM4Nzk0YywgOWQyZTk0MiwgY2U4M2VkYSwgM2M3M2ExZCkuCisKKyAqICJnaXQgY2xvbmUiIGRpZCBub3QgY29uZmlndXJlIHJlbW90ZS5vcmlnaW4udXJsIGNvcnJlY3RseSBmb3IgYmFyZQorICAgY2xvbmVzIChkZjYxYzg4OSkuCisKKyAqICJnaXQgZGlmZiAtLWdyYXBoIiB3b3JrcyBiZXR0ZXIgd2l0aCAiLS1jb2xvci13b3JkcyIgYW5kIG90aGVyIG9wdGlvbnMKKyAgICg4MWZhMDI0Li40Mjk3YzBhKS4KKworICogImdpdCBkaWZmIiBjb3VsZCBzaG93IGFtYmlndW91cyBhYmJyZXZpYXRpb24gb2YgYmxvYiBvYmplY3QgbmFtZXMgb24KKyAgIGl0cyAiaW5kZXgiIGxpbmUgKDNlNWExODgpLgorCisgKiAiZ2l0IHJlc2V0IC0taGFyZCIgc3RhcnRlZCBmcm9tIGEgd3JvbmcgZGlyZWN0b3J5IGFuZCBhIHdvcmtpbmcgdHJlZSBpbgorICAgYSBub25zdGFuZGFyZCBsb2NhdGlvbiBpcyBpbiB1c2UgZ290IGNvbmZ1c2VkICg1NjBmYjZhMSkuCisKKyAqICJnaXQgcmVhZC10cmVlIC1tIEEgQiIgdXNlZCB0byBzd2l0Y2ggdG8gYnJhbmNoIEIgd2hpbGUgcmV0YWluaW5nCisgICBsb2NhbCBjaGFuZ2VzIGFkZGVkIGFuIGluY29ycmVjdCBjYWNoZS10cmVlIGluZm9ybWF0aW9uIChiMWY0NzUxNCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDJjOTNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4xLnR4dApAQCAtMCwwICsxLDE0IEBACitHaXQgdjEuNy4zLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBzdGFzaCBzaG93IHN0YXNoQHskbn0iIHdhcyBhY2NpZGVudGFsbHkgYnJva2VuIGluIDEuNy4zICgiZ2l0CisgICBzdGFzaCBzaG93IiB3aXRob3V0IGFueSBhcmd1bWVudCBzdGlsbCB3b3JrZWQsIHRob3VnaCkuCisKKyAqICJnaXQgc3Rhc2ggYnJhbmNoICRicmFuY2ggc3Rhc2hAeyRufSIgd2FzIGFjY2lkZW50YWxseSBicm9rZW4gaW4KKyAgIDEuNy4zIGFuZCBzdGFydGVkIGRyb3BwaW5nIHRoZSBuYW1lZCBzdGFzaCBldmVuIHdoZW4gYnJhbmNoIGNyZWF0aW9uCisgICBmYWlsZWQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5M2I4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMi50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjEuNy4zLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBwcmltYXJpbHkgdG8gcHVzaCBvdXQgbWFueSBkb2N1bWVudGF0aW9uIGZpeGVzIGFjY3VtdWxhdGVkIHNpbmNlCit0aGUgMS43LjMuMSByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyYjI0NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMy50eHQKQEAgLTAsMCArMSw1NCBAQAorR2l0IHYxLjcuMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIGFkZGl0aW9uIHRvIHRoZSB1c3VhbCBmaXhlcywgdGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgc3VwcG9ydCBmb3IKK3RoZSBuZXcgImFkZC5pZ25vcmVFcnJvcnMiIG5hbWUgZ2l2ZW4gdG8gdGhlIGV4aXN0aW5nICJhZGQuaWdub3JlLWVycm9ycyIKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK1RoZSBuZXh0IHZlcnNpb24sIEdpdCAxLjcuNCwgYW5kIGZ1dHVyZSB2ZXJzaW9ucywgd2lsbCBzdXBwb3J0IGJvdGgKK29sZCBhbmQgaW5jb3JyZWN0IG5hbWUgYW5kIHRoZSBuZXcgY29ycmVjdGVkIG5hbWUsIGJ1dCB3aXRob3V0IHRoaXMKK2JhY2twb3J0LCB1c2VycyB3aG8gd2FudCB0byB1c2UgdGhlIG5ldyBuYW1lICJhZGQuaWdub3JlRXJyb3JzIiBpbgordGhlaXIgcmVwb3NpdG9yaWVzIGNhbm5vdCB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgorCitGaXhlcyBzaW5jZSB2MS43LjMuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcHBseSIgc2VnZmF1bHRlZCB3aGVuIGEgYm9ndXMgaW5wdXQgaXMgZmVkIHRvIGl0LgorCisgKiBSdW5uaW5nICJnaXQgY2hlcnJ5LXBpY2sgLS1mZiIgb24gYSByb290IGNvbW1pdCBzZWdmYXVsdGVkLgorCisgKiAiZGlmZiIsICJibGFtZSIgYW5kIGZyaWVuZHMgaW5jb3JyZWN0bHkgYXBwbGllZCB0ZXh0Y29udiBmaWx0ZXJzIHRvCisgICBzeW1saW5rcy4KKworICogSGlnaGxpZ2h0aW5nIG9mIHdoaXRlc3BhY2UgYnJlYWthZ2UgaW4gImRpZmYiIG91dHB1dCB3YXMgc2hvd2luZworICAgaW5jb3JyZWN0IGFtb3VudCBvZiB3aGl0ZXNwYWNlcyB3aGVuIGJsYW5rLWF0LWVvbCBpcyBzZXQgYW5kIHRoZSBsaW5lCisgICBjb25zaXN0ZWQgb25seSBvZiB3aGl0ZXNwYWNlcyBhbmQgYSBUQUIuCisKKyAqICJkaWZmIiB3YXMgb3Zlcmx5IGluZWZmaWNpZW50IHdoZW4gdHJ5aW5nIHRvIGZpbmQgdGhlIGxpbmUgdG8gdXNlIGZvcgorICAgdGhlIGZ1bmN0aW9uIGhlYWRlciAoaS5lLiBlcXVpdmFsZW50IHRvIC0tc2hvdy1jLWZ1bmN0aW9uIG9mIEdOVSBkaWZmKS4KKworICogImdpdCBpbWFwLXNlbmQiIGRlcGVuZHMgb24gbGliY3J5cHRvIGJ1dCBvdXIgYnVpbGQgcnVsZSByZWxpZWQgb24gdGhlCisgICBsaW5rZXIgdG8gaW1wbGljaXRseSBsaW5rIGl0IHZpYSBsaWJzc2wsIHdoaWNoIHdhcyB3cm9uZy4KKworICogImdpdCBtZXJnZS1maWxlIiBjYW4gYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgc3ViZGlyZWN0b3J5IG5vdy4KKworICogImdpdCByZXBhY2sgLWYiIGV4cGFuZGVkIGFuZCByZWNvbXByZXNzZWQgbm9uLWRlbHRhIG9iamVjdHMgaW4gdGhlCisgICBleGlzdGluZyBwYWNrLCB3aGljaCB3YXMgd2FzdGVmdWwuICBVc2UgbmV3ICItRiIgb3B0aW9uIGlmIHlvdSByZWFsbHkKKyAgIHdhbnQgdG8gKGUuZy4gd2hlbiBjaGFuZ2luZyB0aGUgcGFjay5jb21wcmVzc2lvbiBsZXZlbCkuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1mb3JtYXQ9Ii4uLiV4MDAuLi4iIGluY29ycmVjdGx5IGNob3BwZWQgaXRzIG91dHB1dAorICAgYXQgTlVMLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgY29ycmVjdGx5IHJlbW92ZSBkdXBsaWNhdGUgbWFpbCBhZGRyZXNzZXMgZnJvbQorICAgdGhlIENjOiBoZWFkZXIgdGhhdCBhcHBlYXIgb24gdGhlIFRvOiBoZWFkZXIuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi9jb21wbGV0aW9uKSBpZ25vcmVkIGxpZ2h0d2VpZ2h0IHRhZ3MKKyAgIGluIF9fZ2l0X3BzMSgpLgorCisgKiAiZ2l0LWJsYW1lIiBtb2RlIChpbiBjb250cmliL2VtYWNzKSBkaWRuJ3Qgc2F5IChyZXF1aXJlICdmb3JtYXQtc3BlYykKKyAgIGV2ZW4gdGhvdWdoIGl0IGRlcGVuZHMgb24gaXQ7IGl0IGRpZG4ndCB3b3JrIHdpdGggRW1hY3MgMjIgb3Igb2xkZXIKKyAgIHVubGVzcyBHbnVzIGlzIHVzZWQuCisKKyAqICJnaXQtcDQiIChpbiBjb250cmliLykgZGlkIG5vdCBjb3JyZWN0bHkgaGFuZGxlIGRlbGV0ZWQgZmlsZXMuCisKK090aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGFsc28gaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTdmN2MxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy40LnR4dApAQCAtMCwwICsxLDQ1IEBACitHaXQgdjEuNy4zLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4zLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFNtYXJ0IEhUVFAgdHJhbnNwb3J0IHVzZWQgdG8gaW5jb3JyZWN0bHkgcmV0cnkgcmVkaXJlY3RlZCBQT1NUCisgICByZXF1ZXN0IHdpdGggR0VUIHJlcXVlc3QuCisKKyAqICJnaXQgYXBwbHkiIGRpZCBub3QgY29ycmVjdGx5IGhhbmRsZSBwYXRjaGVzIHRoYXQgb25seSBjaGFuZ2UgbW9kZXMKKyAgIGlmIHRvbGQgdG8gYXBwbHkgd2hpbGUgc3RyaXBwaW5nIGxlYWRpbmcgcGF0aHMgd2l0aCAtcCBvcHRpb24uCisKKyAqICJnaXQgYXBwbHkiIGNhbiBkZWFsIHdpdGggcGF0Y2hlcyB3aXRoIHRpbWV6b25lIGZvcm1hdHRlZCB3aXRoIGEKKyAgIGNvbG9uIGJldHdlZW4gdGhlIGhvdXJzIGFuZCBtaW51dGVzIHBhcnQgKGUuZy4gIi0wODowMCIgaW5zdGVhZCBvZgorICAgIi0wODAwIikuCisKKyAqICJnaXQgY2hlY2tvdXQiIHJlbW92ZWQgYW4gdW50cmFja2VkIGZpbGUgImZvbyIgZnJvbSB0aGUgd29ya2luZworICAgdHJlZSB3aGVuIHN3aXRjaGluZyB0byBhIGJyYW5jaCB0aGF0IGNvbnRhaW5zIGEgdHJhY2tlZCBwYXRoCisgICAiZm9vL2JhciIuICBQcmV2ZW50IHRoaXMsIGp1c3QgbGlrZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29uZmxpY3RpbmcKKyAgIHBhdGggd2VyZSAiZm9vIiAoYzc1MmU3Zi4uNzk4MDg3MmQpLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBvciAiZ2l0IHJldmVydCIgcmVmdXNlZCB0byB3b3JrIHdoZW4gYSBwYXRoIHRoYXQKKyAgIHdvdWxkIGJlIG1vZGlmaWVkIGJ5IHRoZSBvcGVyYXRpb24gd2FzIHN0YXQtZGlydHkgd2l0aG91dCBhIHJlYWwKKyAgIGRpZmZlcmVuY2UgaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgorCisgKiAiZ2l0IGRpZmYgLS1jaGVjayIgcmVwb3J0ZWQgYW4gaW5jb3JyZWN0IGxpbmUgbnVtYmVyIGZvciBhZGRlZAorICAgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiBmaWxlLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZmFpbGVkIHRvIGJ1aWxkIHVuZGVyIE5PX09QRU5TU0wuCisKKyAqIFNldHRpbmcgbG9nLmRlY29yYXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gIjAiIG9yICIxIiB0byBtZWFuCisgICAiZmFsc2UiIG9yICJ0cnVlIiBkaWQgbm90IHdvcmsuCisKKyAqICJnaXQgcHVzaCIgb3ZlciBkdW1iIEhUVFAgcHJvdG9jb2wgZGlkIG5vdCB3b3JrIGFnYWluc3QgV2ViREFWCisgICBzZXJ2ZXJzIHRoYXQgZGlkIG5vdCB0ZXJtaW5hdGUgYSBjb2xsZWN0aW9uIG5hbWUgd2l0aCBhIHNsYXNoLgorCisgKiAiZ2l0IHRhZyAtdiIgZGlkIG5vdCB3b3JrIHdpdGggR1BHIHNpZ25hdHVyZXMgaW4gcmZjMTk5MSBtb2RlLgorCisgKiBUaGUgcG9zdC1yZWNlaXZlLWVtYWlsIHNhbXBsZSBob29rIHdhcyBhY2NpZGVudGFsbHkgYnJva2VuIGluIDEuNy4zLjMKKyAgIHVwZGF0ZS4KKworICogImdpdHdlYiIgY2FuIHNvbWV0aW1lcyBiZSB0cmlja2VkIGludG8gcGFycm90dGluZyBhIGZpbGVuYW1lIGFyZ3VtZW50CisgICBnaXZlbiBpbiBhIHJlcXVlc3Qgd2l0aG91dCBwcm9wZXJseSBxdW90aW5nLgorCitPdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBhbHNvIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmM2JhNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuNS50eHQKQEAgLTAsMCArMSwzNCBAQAorR2l0IDEuNy4zLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgKiBUaGUgeGZ1bmNuYW1lIHBhdHRlcm4gdXNlZCBieSAiZ2l0IGRpZmYiIGFuZCAiZ2l0IGdyZXAiIHRvIHNob3cgdGhlCisgICBsYXN0IG5vdGFibGUgbGluZSBpbiBjb250ZXh0IHdlcmUgYnJva2VuIGZvciBweXRob24gYW5kIHJ1YnkgZm9yIGEgbG9uZworICAgdGltZS4KKworICogImdpdCBtZXJnZSIgaW50byBhbiB1bmJvcm4gYnJhbmNoIHJlbW92ZWQgYW4gdW50cmFja2VkIGZpbGUgImZvbyIgZnJvbQorICAgdGhlIHdvcmtpbmcgdHJlZSB3aGVuIG1lcmdlZCBicmFuY2ggaGFkICJmb28iICh0aGlzIGZpeCB3YXMgYWxyZWFkeSBpbgorICAgMS43LjMuMyBidXQgd2FzIG9taXR0ZWQgZnJvbSB0aGUgcmVsZWFzZSBub3RlcyBieSBtaXN0YWtlKS4KKworICogImdpdCBzdGF0dXMgLXMiIGRpZCBub3QgcXVvdGUgdW5wcmludGFibGUgY2hhcmFjdGVycyBpbiBwYXRocyBhcworICAgZG9jdW1lbnRlZC4KKworICogImdpdCBhbSAtLWFib3J0IiB1c2VkIHRvIGFsd2F5cyByZXNldCB0byB0aGUgY29tbWl0IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgIHRoZSBsYXN0ICJhbSIgaW52b2NhdGlvbiB0aGF0IGhhcyBzdG9wcGVkLCBsb3NpbmcgYW55IHVucmVsYXRlZCBjb21taXRzCisgICB0aGF0IG1heSBoYXZlIGJlZW4gbWFkZSBzaW5jZSB0aGVuLiAgTm93IGl0IHJlZnJhaW5zIGZyb20gZG9pbmcgc28gYW5kCisgICBpbnN0ZWFkIGlzc3VlcyBhIHdhcm5pbmcuCisKKyAqICJnaXQgYmxhbWUiIGluY29ycmVjdGx5IHJldXNlZCBib2d1c2x5IGNhY2hlZCByZXN1bHQgb2YgdGV4dGNvbnYKKyAgIGZpbHRlciBmb3IgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlLgorCisgKiAiZ2l0IGNvbW1pdCIgdXNlZCB0byBhYm9ydCBhZnRlciB0aGUgdXNlciBlZGl0ZWQgdGhlIGxvZyBtZXNzYWdlCisgICB3aGVuIHRoZSBjb21taXR0ZXIgaW5mb3JtYXRpb24gd2FzIG5vdCBjb3JyZWN0bHkgc2V0IHVwLiAgSXQgbm93CisgICBhYm9ydHMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZGl0b3IuCisKKyAqICJnaXQgY29tbWl0IC0tZGF0ZT1pbnZhbGlkIiB1c2VkIHRvIHNpbGVudGx5IGlnbm9yZSB0aGUgaW5jb3JyZWN0bHkKKyAgIHNwZWNpZmllZCBkYXRlOyBpdCBpcyBub3cgZGlhZ25vc2VkIGFzIGFuIGVycm9yLgorCisgKiAiZ2l0IHJlYmFzZSAtLXNraXAiIHRvIHNraXAgdGhlIGxhc3QgY29tbWl0IGluIGEgc2VyaWVzIHVzZWQgdG8gZmFpbAorICAgdG8gcnVuIHBvc3QtcmV3cml0ZSBob29rIGFuZCB0byBjb3B5IG5vdGVzIGZyb20gb2xkIGNvbW1pdHMgdGhhdCBoYXZlCisgICBzdWNjZXNzZnVsbHkgYmVlbiByZWJhc2VkIHNvIGZhci4gIE5vdyBpdCBkbyAoYmFja21lcmdlIGVmODhhZDIpLgorCisgKiAiZ2l0d2ViIiB0cmllZCB0byBzaG93IGEgd3JvbmcgZmVlZCBsb2dvIHdoZW4gbm9uZSB3YXMgc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDljMzMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy50eHQKQEAgLTAsMCArMSw3NiBAQAorR2l0IHYxLjcuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdC1ndWksIG5vdyBhdCB2ZXJzaW9uIDAuMTMuMCwgZ290IHZhcmlvdXMgdXBkYXRlcyBhbmQgYSBuZXcKKyAgIG1haW50YWluZXIsIFBhdCBUaG95dHMuCisKKyAqIEdpdHdlYiBhbGxvd3MgaXRzIGNvbmZpZ3VyYXRpb24gdG8gY2hhbmdlIHBlciBlYWNoIHJlcXVlc3Q7IGl0IHVzZWQgdG8KKyAgIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gb25jZSB1cG9uIHN0YXJ0dXAuCisKKyAqIFdoZW4gZ2l0IGZpbmRzIGEgY29ycnVwdCBvYmplY3QsIGl0IG5vdyByZXBvcnRzIHRoZSBmaWxlIHRoYXQgY29udGFpbnMKKyAgIGl0LgorCisgKiAiZ2l0IGNoZWNrb3V0IC1CIDxpdD4iIGlzIGEgc2hvcnRlciB3YXkgdG8gc2F5ICJnaXQgYnJhbmNoIC1mIDxpdD4iCisgICBmb2xsb3dlZCBieSAiZ2l0IGNoZWNrb3V0IDxpdD4iLgorCisgKiBXaGVuICJnaXQgY2hlY2tvdXQiIG9yICJnaXQgbWVyZ2UiIHJlZnVzZSB0byBwcm9jZWVkIGluIG9yZGVyIHRvCisgICBwcm90ZWN0IGxvY2FsIG1vZGlmaWNhdGlvbiB0byB5b3VyIHdvcmtpbmcgdHJlZSwgdGhleSB1c2VkIHRvIHN0b3AKKyAgIGFmdGVyIHNob3dpbmcganVzdCBvbmUgcGF0aCB0aGF0IG1pZ2h0IGJlIGxvc3QuICBUaGV5IG5vdyBzaG93IGFsbCwKKyAgIGluIGEgZm9ybWF0IHRoYXQgaXMgZWFzaWVyIHRvIHJlYWQuCisKKyAqICJnaXQgY2xlYW4iIGxlYXJuZWQgIi1lIiAoIi0tZXhjbHVkZSIpIG9wdGlvbi4KKworICogSHVuayBoZWFkZXJzIHByb2R1Y2VkIGZvciBDIyBmaWxlcyBieSAiZ2l0IGRpZmYiIGFuZCBmcmllbmRzIHNob3cgbW9yZQorICAgcmVsZXZhbnQgY29udGV4dCB0aGFuIGJlZm9yZS4KKworICogZGlmZi5pZ25vcmVzdWJtb2R1bGVzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gc3F1ZWxjaCB0aGUKKyAgIGRpZmZlcmVuY2VzIGluIHN1Ym1vZHVsZXMgcmVwb3J0ZWQgd2hlbiBydW5uaW5nIGNvbW1hbmRzIChlLmcuICJkaWZmIiwKKyAgICJzdGF0dXMiLCBldGMuKSBhdCB0aGUgc3VwZXJwcm9qZWN0IGxldmVsLgorCisgKiBodHRwLnVzZXJhZ2VudCBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpZSB3aG8geW91IGFyZSB0byB5b3VyCisgICByZXN0cmljdGl2ZSBmaXJld2FsbC4KKworICogImdpdCByZWJhc2UgLS1zdHJhdGVneSA8cz4iIGxlYXJuZWQgIi1YIiBvcHRpb24gdG8gcGFzcyBleHRyYSBvcHRpb25zCisgICB0aGF0IGFyZSB1bmRlcnN0b29kIGJ5IHRoZSBjaG9zZW4gbWVyZ2Ugc3RyYXRlZ3kuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkICJleGVjIiB0aGF0IHlvdSBjYW4gaW5zZXJ0IGludG8gdGhlIGluc24gc2hlZXQKKyAgIHRvIHJ1biBhIGNvbW1hbmQgYmV0d2VlbiBpdHMgc3RlcHMuCisKKyAqICJnaXQgcmViYXNlIiBiZXR3ZWVuIGJyYW5jaGVzIHRoYXQgaGF2ZSBtYW55IGJpbmFyeSBjaGFuZ2VzIHRoYXQgZG8KKyAgIG5vdCBjb25mbGljdCBzaG91bGQgYmUgZmFzdGVyLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgcGVla3MgaW50byByZWJhc2UuYXV0b3NxdWFzaCBjb25maWd1cmF0aW9uIGFuZCBhY3RzIGFzCisgICBpZiB5b3UgZ2F2ZSAtLWF1dG9zcXVhc2ggZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKworRml4ZXMgc2luY2UgdjEuNy4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS43LjIuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyAqICJnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIiAod2hpY2ggaXMgdGhlIGRlZmF1bHQpIGRpZCBub3QgaGFuZGxlIGNhc2VzCisgICB3aGVyZSBhIGRpcmVjdG9yeSBiZWNvbWVzIGEgZmlsZSAob3IgdmljZSB2ZXJzYSkgdmVyeSB3ZWxsLgorCisgKiAiZ2l0IGZldGNoIiBhbmQgZnJpZW5kcyB3ZXJlIGFjY2lkZW50YWxseSBicm9rZW4gZm9yIHVybCB3aXRoICIrIiBpbgorICAgaXRzIHBhdGgsIGUuZy4gImdpdDovL2dpdC5nbm9tZS5vcmcvZ3RrKyIuCisKKyAqICJnaXQgZmV0Y2ggJHVybCIgKGkuZS4gd2l0aG91dCByZWZzcGVjcykgd2FzIGJyb2tlbiBmb3IgcXVpdGUgc29tZQorICAgdGltZSwgaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGhhcHBlbiB0byBiZSB0cmFja2luZyBzb21lIHJlbW90ZS4KKworICogImdpdCBscy10cmVlIGRpciBkaXJnYXJiYWdlIiwgd2hlbiAiZGlyIiB3YXMgYSBkaXJlY3RvcnksCisgICBpbmNvcnJlY3RseSByZWN1cnNlZCBpbnRvICJkaXIiLgorCisgKiAiZ2l0IG5vdGUgcmVtb3ZlIiBjcmVhdGVkIHVubmVjZXNzYXJ5IGV4dHJhIGNvbW1pdCB3aGVuIG5hbWVkIG9iamVjdAorICAgZGlkIG5vdCBoYXZlIGFueSBub3RlIHRvIGJlZ2luIHdpdGguCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IHdvcmsgd2VsbCBpZiB5b3UgaGFkIGRpZmYubm9wcmVmaXggY29uZmlndXJlZC4KKworICogImdpdCAtYyBmb289YmFyIHN1YmNtZCIgZGlkIG5vdCB3b3JrIHdlbGwgZm9yIHN1YmNtZCB0aGF0IGlzIG5vdAorICAgaW1wbGVtZW50ZWQgYXMgYSBidWlsdC1pbiBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5MjNhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMS50eHQKQEAgLTAsMCArMSwyNyBAQAorR2l0IHYxLjcuNC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE9uIFdpbmRvd3MgcGxhdGZvcm0sIHRoZSBjb2RlcGF0aCB0byBzcGF3biBhIG5ldyBjaGlsZCBwcm9jZXNzIGZvcmdvdAorICAgdG8gZmlyc3QgZmx1c2ggdGhlIG91dHB1dCBidWZmZXIuCisKKyAqICJnaXQgYnVuZGxlIiBkaWQgbm90IHVzZSBPRlNfREVMVEEgZW5jb2RpbmcsIG1ha2luZyBpdHMgb3V0cHV0IGEgZmV3CisgICBwZXItY2VudCBsYXJnZXIgdGhhbiBuZWNlc3NhcmlseS4KKworICogVGhlIG9wdGlvbiB0byB0ZWxsICJnaXQgY2xvbmUiIHRvIHJlY3Vyc2UgaW50byB0aGUgc3VibW9kdWxlcyB3YXMKKyAgIG1pc3NwZWxsZWQgd2l0aCBhbiB1bmRlcnNjb3JlICItLXJlY3Vyc2Vfc3VibW9kdWxlcyIuCisKKyAqICJnaXQgZGlmZiAtLWNhY2hlZCBIRUFEIiBiZWZvcmUgdGhlIGZpcnN0IGNvbW1pdCBkb2VzIHdoYXQgYW4gZW5kIHVzZXIKKyAgIHdvdWxkIGV4cGVjdCAobmFtZWx5LCBzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIHdpdGhvdXQgZnVydGhlciAiZ2l0CisgICBhZGQiKS4KKworICogImdpdCBmYXN0LWltcG9ydCIgZGlkbid0IGFjY2VwdCB0aGUgY29tbWFuZCB0byBhc2sgZm9yICJub3RlcyIgZmVhdHVyZQorICAgdG8gYmUgcHJlc2VudCBpbiBpdHMgaW5wdXQgc3RyZWFtLCBldmVuIHRob3VnaCBpdCB3YXMgY2FwYWJsZSBvZiB0aGUKKyAgIGZlYXR1cmUuCisKKyAqICJnaXQgZnNjayIgZ2F2ZSB1cCBzY2FubmluZyBsb29zZSBvYmplY3QgZmlsZXMgaW4gZGlyZWN0b3JpZXMgd2l0aAorICAgZ2FyYmFnZSBmaWxlcy4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjRjZTFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4yLnR4dApAQCAtMCwwICsxLDU4IEBACitHaXQgdjEuNy40LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy40LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE1hbnkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIHRvIG1hdGNoICJnaXQgY21kIC1oIiBvdXRwdXQgYW5kIHRoZQorICAgZ2l0LWNtZCBtYW51YWwgcGFnZS4KKworICogV2UgdXNlZCB0byBrZWVwIG9uZSBmaWxlIGRlc2NyaXB0b3Igb3BlbiBmb3IgZWFjaCBhbmQgZXZlcnkgcGFja2ZpbGUKKyAgIHRoYXQgd2UgaGF2ZSBhIG1tYXAgd2luZG93IG9uIGl0IChyZWFkOiAiaW4gdXNlIiksIGV2ZW4gd2hlbiBmb3IgdmVyeQorICAgdGlueSBwYWNrZmlsZXMuICBXZSBub3cgY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBlYXJseSB3aGVuIHRoZSBlbnRpcmUKKyAgIHBhY2tmaWxlIGZpdHMgaW5zaWRlIG9uZSBtbWFwIHdpbmRvdy4KKworICogImdpdCBiaXNlY3QgdmlzdWFsaXplIiB0cmllZCB0byBydW4gImdpdGsiIGluIHdpbmRvd2luZworICAgZW52aXJvbm1lbnRzIGV2ZW4gd2hlbiAiZ2l0ayIgaXMgbm90IGluc3RhbGxlZCwgcmVzdWx0aW5nIGluIGEKKyAgIHN0cmFuZ2UgZXJyb3IgbWVzc2FnZS4KKworICogImdpdCBjbG9uZSAvbm8vc3VjaC9wYXRoIiBkaWQgbm90IGZhaWwgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNvbW1pdCIgZGlkIG5vdCBjb3JyZWN0bHkgZXJyb3Igb3V0IHdoZW4gdGhlIHVzZXIgYXNrZWQgdG8gdXNlIGEKKyAgIG5vbiBleGlzdGVudCBmaWxlIGFzIHRoZSBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZS4KKworICogImdpdCBkaWZmIC0tc3RhdCAtQiIgcmFuIG9uIGJpbmFyeSBmaWxlcyBjb3VudGVkIHRoZSBjaGFuZ2VzIGluIGxpbmVzLAorICAgd2hpY2ggd2FzIG5vbnNlbnNpY2FsLgorCisgKiAiZ2l0IGRpZmYgLU0iIG9wcG9ydHVuaXN0aWNhbGx5IGRldGVjdGVkIGNvcGllcywgd2hpY2ggd2FzIG5vdAorICAgbmVjZXNzYXJpbHkgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IHdoZW4gaXQgaXMgaW50ZXJuYWxseSBydW4gYnkKKyAgIHJlY3Vyc2l2ZSBtZXJnZS4KKworICogImdpdCBkaWZmdG9vbCIgZGlkbid0IHRlbGwgKGcpdmltZGlmZiB0aGF0IHRoZSBmaWxlcyBpdCBpcyByZWFkaW5nIGFyZQorICAgdG8gYmUgb3BlbmVkIHJlYWQtb25seS4KKworICogImdpdCBtZXJnZSIgZGlkbid0IHBheSBhdHRlbnRpb24gdG8gcHJlcGFyZS1jb21taXQtbXNnIGhvb2ssIGV2ZW4KKyAgIHRob3VnaCBpZiBhIG1lcmdlIGlzIGNvbmZsaWN0ZWQgYW5kIG1hbnVhbGx5IHJlc29sdmVkLCB0aGUgc3Vic2VxdWVudAorICAgImdpdCBjb21taXQiIHdvdWxkIGhhdmUgdHJpZ2dlcmVkIHRoZSBob29rLCB3aGljaCB3YXMgaW5jb25zaXN0ZW50LgorCisgKiAiZ2l0IHBhdGNoLWlkIiAoYW5kIGNvbW1hbmRzIGxpa2UgImZvcm1hdC1wYXRjaCAtLWlnbm9yZS1pbi11cHN0cmVhbSIKKyAgIHRoYXQgdXNlIGl0IGFzIHRoZWlyIGludGVybmFsIGxvZ2ljKSBoYW5kbGVkIGNoYW5nZXMgdG8gZmlsZXMgdGhhdCBlbmQKKyAgIHdpdGggaW5jb21wbGV0ZSBsaW5lcyBpbmNvcnJlY3RseS4KKworICogVGhlIG9mZmljaWFsIHZhbHVlIHRvIHRlbGwgImdpdCBwdXNoIiB0byBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBiYWNrCisgICB0byB1cGRhdGUgdGhlIHVwc3RyZWFtIGJyYW5jaCBpdCBmb3JrZWQgZnJvbSBpcyBub3cgY2FsbGVkICJ1cHN0cmVhbSIuCisgICBUaGUgb2xkIG5hbWUgInRyYWNraW5nIiBpcyBhbmQgd2lsbCBiZSBzdXBwb3J0ZWQuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgdXNlZCB0byBob25vciB0aGUgLS1tZXJnZS8tLXJlYmFzZSBvcHRpb24gKG9yCisgICBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzKSBldmVuIGZvciBhIG5ld2x5IGNsb25lZAorICAgc3VicHJvamVjdCwgd2hpY2ggbWFkZSBubyBzZW5zZSAoc28vc3VibW9kdWxlLW5vLXVwZGF0ZS1maXJzdC10aW1lKS4KKworICogZ2l0d2ViJ3MgImhpZ2hsaWdodCIgaW50ZXJmYWNlIG1pc2hhbmRsZWQgdGFicy4KKworICogZ2l0d2ViIGRpZG4ndCB1bmRlcnN0YW5kIHRpbWV6b25lcyB3aXRoIEdNVCBvZmZzZXQgdGhhdCBpcyBub3QKKyAgIG11bHRpcGxlIG9mIGEgd2hvbGUgaG91ci4KKworICogZ2l0d2ViIGhhZCBhIGZldyBmb3J3YXJkLWluY29tcGF0aWJsZSBzeW50YWN0aWMgY29uc3RydWN0cyBhbmQKKyAgIGFsc28gdXNlZCBpbmNvcnJlY3QgdmFyaWFibGUgd2hlbiBzaG93aW5nIHRoZSBmaWxlIG1vZGUgaW4gYSBkaWZmLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYTNkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjMudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2MS43LjQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjQuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcHBseSIgdXNlZCB0byBjb25mdXNlIGxpbmVzIHVwZGF0ZWQgYnkgcHJldmlvdXMgaHVua3MgYXMgbGluZXMKKyAgIHRoYXQgZXhpc3RlZCBiZWZvcmUgd2hlbiBhcHBseWluZyBhIGh1bmssIGNvbnRyaWJ1dGluZyBtaXNhcHBsaWNhdGlvbgorICAgb2YgcGF0Y2hlcyB3aXRoIG9mZnNldHMuCisKKyAqICJnaXQgYnJhbmNoIC0tdHJhY2siIChhbmQgImdpdCBjaGVja291dCAtLXRyYWNrIC0tYnJhbmNoIikgdXNlZCB0bworICAgYWxsb3cgc2V0dGluZyB1cCBhIHJhbmRvbSBub24tYnJhbmNoIHRoYXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBmb2xsb3cKKyAgIGFzIHRoZSAidXBzdHJlYW0iLiAgVGhlIGNvbW1hbmQgY29ycmVjdGx5IGRpYWdub3NlcyBpdCBhcyBhbiBlcnJvci4KKworICogImdpdCBjaGVja291dCAkb3RoZXJfYnJhbmNoIiBzaWxlbnRseSByZW1vdmVkIHVudHJhY2tlZCBzeW1ib2xpYyBsaW5rcworICAgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0IGFyZSBpbiB0aGUgd2F5IGluIG9yZGVyIHRvIGNoZWNrIG91dCBwYXRocworICAgdW5kZXIgaXQgZnJvbSB0aGUgbmFtZWQgYnJhbmNoLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgZGlkIG5vdCBiYWlsIG91dCBpbW1lZGlhdGVseSB3aGVuIHRoZSBjdnMgc2VydmVyIGNhbm5vdAorICAgYmUgcmVhY2hlZCwgc3Bld2luZyB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcyB0aGF0IGNvbXBsYWluIGFib3V0IHRoZQorICAgc2VydmVyIHJlc3BvbnNlIHRoYXQgaXQgbmV2ZXIgZ290LgorCisgKiAiZ2l0IGRpZmYgLS1xdWlldCIgZGlkIG5vdCB3b3JrIHZlcnkgd2VsbCB3aXRoIHRoZSAiLS1kaWZmLWZpbHRlciIKKyAgIG9wdGlvbi4KKworICogImdpdCBncmVwIC1uIiBsYWNrZWQgYSBsb25nLWhhbmQgc3lub255bSAtLWxpbmUtbnVtYmVyLgorCisgKiAiZ2l0IHN0YXNoIGFwcGx5IiByZXBvcnRlZCB0aGUgcmVzdWx0IG9mIGl0cyBvcGVyYXRpb24gYnkgcnVubmluZworICAgImdpdCBzdGF0dXMiIGZyb20gdGhlIHRvcC1sZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlOyBpdCBzaG91bGQgKGFuZAorICAgbm93IGRvZXMpIHJ1biBpdCBmcm9tIHRoZSB1c2VyJ3Mgd29ya2luZyBkaXJlY3RvcnkuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYwNmUwNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNC50eHQKQEAgLTAsMCArMSwzNSBAQAorR2l0IHYxLjcuNC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb21waWxhdGlvbiBvZiBzaGExX2ZpbGUuYyBvbiBCU0QgcGxhdGZvcm1zIHdlcmUgYnJva2VuIGR1ZSB0byBvdXIKKyAgIHJlY2VudCB1c2Ugb2YgZ2V0cmxpbWl0KCkgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9yZXNvdXJjZS5oPi4KKworICogImdpdCBjb25maWciIGRpZCBub3QgZGlhZ25vc2UgaW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBkaWQgbm90IHdyYXAgYSBsb25nIHN1YmplY3QgbGluZSB0aGF0IHJlc3VsdGVkIGZyb20KKyAgIHJmYzIwNDcgZW5jb2RpbmcuCisKKyAqICJnaXQgaW5zdGF3ZWIiIHNob3VsZCB3b3JrIGJldHRlciBhZ2FpbiB3aXRoIHBsYWNrdXAuCisKKyAqICJnaXQgbG9nIC0tbWF4LWNvdW50PTQgLVNmb29iYXIiIG5vdyBzaG93cyA0IGNvbW1pdHMgdGhhdCBjaGFuZ2VzIHRoZQorICAgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHN0cmluZyAiZm9vYmFyIjsgaXQgdXNlZCB0byBzY2FuIG9ubHkgZm9yIDQKKyAgIGNvbW1pdHMgYW5kIHRoZW4gZW1pdHRlZCBvbmx5IG1hdGNoaW5nIG9uZXMuCisKKyAqICJnaXQgbG9nIC0tZmlyc3QtcGFyZW50IC0tYm91bmRhcnkgJGNeLi4kYyIgc2VnZmF1bHRlZCBvbiBhIG1lcmdlLgorCisgKiAiZ2l0IHB1bGwiIGludG8gYW4gZW1wdHkgYnJhbmNoIHNob3VsZCBoYXZlIGJlaGF2ZWQgYXMgaWYKKyAgIGZhc3QtZm9yd2FyZGluZyBmcm9tIGVtcHRpbmVzcyB0byB0aGUgdmVyc2lvbiBiZWluZyBwdWxsZWQsIHdpdGgKKyAgIHRoZSB1c3VhbCBwcm90ZWN0aW9uIGFnYWluc3Qgb3ZlcndyaXRpbmcgdW50cmFja2VkIGZpbGVzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgdGhhdCBpcyBydW4gd2hpbGUgYSBtZXJnZSBpbiB0aGUgc3VwZXJwcm9qZWN0IGlzIGluCisgICBjb25mbGljdGVkIHN0YXRlIHRyaWVkIHRvIHByb2Nlc3MgZWFjaCBjb25mbGljdGVkIHN1Ym1vZHVsZSB1cCB0bworICAgdGhyZWUgdGltZXMuCisKKyAqICJnaXQgc3RhdHVzIiBzcGVudCBhbGwgdGhlIGVmZm9ydCB0byBub3RpY2UgcmFjaWx5LWNsZWFuIGluZGV4IGVudHJpZXMKKyAgIGJ1dCBkaWRuJ3QgdXBkYXRlIHRoZSBpbmRleCBmaWxlIHRvIGhlbHAgbGF0ZXIgb3BlcmF0aW9ucyBnbyBmYXN0ZXIgaW4KKyAgIHNvbWUgY2FzZXMuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhMGVlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNS50eHQKQEAgLTAsMCArMSw0IEBACitHaXQgdjEuNy40LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjb250YWlucyBvbmx5IG1pbm9yIGRvY3VtZW50YXRpb24gZml4ZXMgYWNjdW11bGF0ZWQgc2luY2UgMS43LjQuNC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDViY2E3MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQudHh0CkBAIC0wLDAgKzEsMTU2IEBACitHaXQgdjEuNy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGRvY3VtZW50YXRpb24gTWFrZWZpbGUgbm93IGFzc3VtZXMgYnkgZGVmYXVsdCBhc2NpaWRvYyA4IGFuZAorICAgZG9jYm9vay14c2wgPj0gMS43My4gSWYgeW91IGhhdmUgb2xkZXIgdmVyc2lvbnMsIHlvdSBjYW4gc2V0CisgICBBU0NJSURPQzcgYW5kIEFTQ0lJRE9DX1JPRkYsIHJlc3BlY3RpdmVseS4KKworICogVGhlIG9wdGlvbiBwYXJzZXJzIG9mIHZhcmlvdXMgY29tbWFuZHMgdGhhdCBjcmVhdGUgbmV3IGJyYW5jaGVzIChvcgorICAgcmVuYW1lIGV4aXN0aW5nIG9uZXMgdG8gYSBuZXcgbmFtZSkgd2VyZSB0b28gbG9vc2UgYW5kIHVzZXJzIHdlcmUKKyAgIGFsbG93ZWQgdG8gZ2l2ZSBhIGJyYW5jaCBhIG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBhIGRhc2ggYnkgY3JlYXRpdmUKKyAgIGFidXNlIG9mIHRoZWlyIGNvbW1hbmQgbGluZSBvcHRpb25zLCB3aGljaCBvbmx5IGxlZCB0byBidXJuaW5nCisgICB0aGVtc2VsdmVzLiAgVGhlIG5hbWUgb2YgYSBicmFuY2ggY2Fubm90IGJlZ2luIHdpdGggYSBkYXNoIG5vdy4KKworICogU3lzdGVtLXdpZGUgZmFsbGJhY2sgZGVmYXVsdCBhdHRyaWJ1dGVzIGNhbiBiZSBzdG9yZWQgaW4KKyAgIC9ldGMvZ2l0YXR0cmlidXRlczsgdGhlIGNvcmUuYXR0cmlidXRlc2ZpbGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4KKyAgIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSBwYXRoIHRvIHRoaXMgZmlsZS4KKworICogVGhlIHRocmVhZCBzdHJ1Y3R1cmUgZ2VuZXJhdGVkIGJ5ICJnaXQgc2VuZC1lbWFpbCIgaGFzIGNoYW5nZWQKKyAgIHNsaWdodGx5LiAgU2V0dGluZyB0aGUgY292ZXIgbGV0dGVyIG9mIHRoZSBsYXRlc3Qgc2VyaWVzIGFzIGEgcmVwbHkKKyAgIHRvIHRoZSBjb3ZlciBsZXR0ZXIgb2YgdGhlIHByZXZpb3VzIHNlcmllcyB3aXRoIC0taW4tcmVwbHktdG8gdXNlZAorICAgdG8gbWFrZSB0aGUgbmV3IGNvdmVyIGxldHRlciBhbmQgYWxsIHRoZSBwYXRjaGVzIHJlcGxpZXMgdG8gdGhlCisgICBjb3ZlciBsZXR0ZXIgb2YgdGhlIHByZXZpb3VzIHNlcmllczsgdGhpcyBoYXMgYmVlbiBjaGFuZ2VkIHRvIG1ha2UKKyAgIHRoZSBwYXRjaGVzIGluIHRoZSBuZXcgc2VyaWVzIHJlcGxpZXMgdG8gdGhlIG5ldyBjb3ZlciBsZXR0ZXIuCisKKyAqIFRoZSBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IGluIGNvbnRyaWIvIGhhcyBiZWVuIGFkanVzdGVkIHRvIGJlIHVzYWJsZSB3aXRoCisgICBCYXNoIDQgKG9wdGlvbnMgd2l0aCAnPXZhbHVlJyBkaWRuJ3QgY29tcGxldGUpLiAgSXQgaGFzIGJlZW4gYWxzbyBtYWRlCisgICB1c2FibGUgd2l0aCB6c2guCisKKyAqIERpZmZlcmVudCBwYWdlcnMgY2FuIGJlIGNob3NlbiBkZXBlbmRpbmcgb24gd2hpY2ggc3ViY29tbWFuZCBpcworICAgYmVpbmcgcnVuIHVuZGVyIHRoZSBwYWdlciwgdXNpbmcgdGhlICJwYWdlci48c3ViY29tbWFuZD4iIHZhcmlhYmxlLgorCisgKiBUaGUgaGFyZGNvZGVkIHRhYi13aWR0aCBvZiA4IHRoYXQgaXMgdXNlZCBpbiB3aGl0ZXNwYWNlIGJyZWFrYWdlIGNoZWNrcyBpcyBub3cKKyAgIGNvbmZpZ3VyYWJsZSB2aWEgdGhlIGF0dHJpYnV0ZXMgbWVjaGFuaXNtLgorCisgKiBTdXBwb3J0IG9mIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMgKGkuZS4gImNvcmUuaWdub3JlY2FzZSIpIGhhcworICAgYmVlbiBpbXByb3ZlZC4gIEZvciBleGFtcGxlLCB0aGUgZ2l0aWdub3JlIG1lY2hhbmlzbSBkaWRuJ3QgcGF5IGF0dGVudGlvbgorICAgdG8gY2FzZSBpbnNlbnNpdGl2aXR5LgorCisgKiBUaGUgPHRyZWU+OjxwYXRoPiBzeW50YXggZm9yIG5hbWluZyBhIGJsb2IgaW4gYSB0cmVlLCBhbmQgdGhlIDo8cGF0aD4KKyAgIHN5bnRheCBmb3IgbmFtaW5nIGEgYmxvYiBpbiB0aGUgaW5kZXggKGUuZy4gIm1hc3RlcjpNYWtlZmlsZSIsCisgICAiOmhlbGxvLmMiKSBoYXZlIGJlZW4gZXh0ZW5kZWQuICBZb3UgY2FuIHN0YXJ0IDxwYXRoPiB3aXRoICIuLyIgdG8KKyAgIGltcGxpY2l0bHkgaGF2ZSB0aGUgKHN1YilkaXJlY3RvcnkgeW91IGFyZSBpbiBwcmVmaXhlZCB0byB0aGUKKyAgIGxvb2t1cC4gIFNpbWlsYXJseSwgIjouLi9NYWtlZmlsZSIgZnJvbSBhIHN1YmRpcmVjdG9yeSB3b3VsZCBtZWFuCisgICAidGhlIE1ha2VmaWxlIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGluIHRoZSBpbmRleCIuCisKKyAqICJnaXQgYmxhbWUiIGxlYXJuZWQgdGhlIC0tc2hvdy1lbWFpbCBvcHRpb24gdG8gZGlzcGxheSB0aGUgZS1tYWlsCisgICBhZGRyZXNzZXMgaW5zdGVhZCBvZiB0aGUgbmFtZXMgb2YgYXV0aG9ycy4KKworICogImdpdCBjb21taXQiIGxlYXJuZWQgdGhlIC0tZml4dXAgYW5kIC0tc3F1YXNoIG9wdGlvbnMgdG8gaGVscCBsYXRlciBpbnZvY2F0aW9uCisgICBvZiBpbnRlcmFjdGl2ZSByZWJhc2UuCisKKyAqIENvbW1hbmQgbGluZSBvcHRpb25zIHRvICJnaXQgY3ZzaW1wb3J0IiB3aG9zZSBuYW1lcyBhcmUgaW4gY2FwaXRhbAorICAgbGV0dGVycyAoLUEsIC1NLCAtUiBhbmQgLVMpIGNhbiBub3cgYmUgc3BlY2lmaWVkIGFzIHRoZSBkZWZhdWx0IGluCisgICB0aGUgLmdpdC9jb25maWcgZmlsZSBieSB0aGVpciBsb25nZXIgbmFtZXMgKGN2c2ltcG9ydC5hdXRob3JzRmlsZSwKKyAgIGN2c2ltcG9ydC5tZXJnZVJlZ2V4LCBjdnNpbXBvcnQudHJhY2tSZXZpc2lvbnMsIGN2c2ltcG9ydC5pZ25vcmVQYXRocykuCisKKyAqICJnaXQgZGFlbW9uIiBjYW4gYmUgYnVpbHQgaW4gdGhlIE1pbkdXIGVudmlyb25tZW50LgorCisgKiAiZ2l0IGRhZW1vbiIgY2FuIHRha2UgbW9yZSB0aGFuIG9uZSAtLWxpc3RlbiBvcHRpb24gdG8gbGlzdGVuIHRvCisgICBtdWx0aXBsZSBhZGRyZXNzZXMuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1leGFjdC1tYXRjaCIgd2FzIG9wdGltaXplZCBub3QgdG8gcmVhZCBjb21taXQKKyAgIG9iamVjdHMgdW5uZWNlc3NhcmlseS4KKworICogImdpdCBkaWZmIiBhbmQgImdpdCBncmVwIiBsZWFybmVkIHdoYXQgZnVuY3Rpb25zIGFuZCBzdWJyb3V0aW5lcworICAgaW4gRm9ydHJhbiwgUGFzY2FsIGFuZCBQZXJsIGxvb2sgbGlrZS4KKworICogImdpdCBmZXRjaCIgbGVhcm5lZCB0aGUgIi0tcmVjdXJzZS1zdWJtb2R1bGVzIiBvcHRpb24uCisKKyAqICJnaXQgbWVyZ2V0b29sIiB0ZWxscyB2aW0vZ3ZpbSB0byBzaG93IGEgdGhyZWUtd2F5IGRpZmYgYnkgZGVmYXVsdAorICAgKHVzZSB2aW1kaWZmMi9ndmltZGlmZjIgYXMgdGhlIHRvb2wgbmFtZSBmb3Igb2xkIGJlaGF2aW9yKS4KKworICogImdpdCBsb2cgLUc8cGF0dGVybj4iIGxpbWl0cyB0aGUgb3V0cHV0IHRvIGNvbW1pdHMgd2hvc2UgY2hhbmdlIGhhcworICAgYWRkZWQgb3IgZGVsZXRlZCBsaW5lcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJuLgorCisgKiAiZ2l0IHJlYWQtdHJlZSIgd2l0aCBubyBhcmd1bWVudCBhcyBhIHdheSB0byBlbXB0eSB0aGUgaW5kZXggaXMKKyAgIGRlcHJlY2F0ZWQ7IHdlIG1pZ2h0IHdhbnQgdG8gcmVtb3ZlIGl0IGluIHRoZSBmdXR1cmUuICBVc2VycyBjYW4KKyAgIHVzZSB0aGUgbmV3IC0tZW1wdHkgb3B0aW9uIHRvIGJlIG1vcmUgZXhwbGljaXQgaW5zdGVhZC4KKworICogImdpdCByZXBhY2sgLWYiIGRvZXMgbm90IHNwZW5kIGN5Y2xlcyB0byByZWNvbXByZXNzIG9iamVjdHMgaW4gdGhlCisgICBub24tZGVsdGEgcmVwcmVzZW50YXRpb24gYW55bW9yZSAodXNlIC1GIGlmIHlvdSByZWFsbHkgbWVhbiBpdAorICAgZS5nLiBhZnRlciB5b3UgY2hhbmdlZCB0aGUgY29yZS5jb21wcmVzc2lvbiB2YXJpYWJsZSBzZXR0aW5nKS4KKworICogImdpdCBtZXJnZSAtLWxvZyIgdXNlZCB0byBsaW1pdCB0aGUgcmVzdWx0aW5nIG1lcmdlIGxvZyB0byAyMAorICAgZW50cmllczsgdGhpcyBpcyBub3cgY3VzdG9taXphYmxlIGJ5IGdpdmluZyBlLmcuICItLWxvZz00NyIuCisKKyAqICJnaXQgbWVyZ2UiIG1heSB3b3JrIGJldHRlciB3aGVuIGFsbCBmaWxlcyB3ZXJlIG1vdmVkIG91dCBvZiBhCisgICBkaXJlY3RvcnkgaW4gb25lIGJyYW5jaCB3aGlsZSBhIG5ldyBmaWxlIGlzIGNyZWF0ZWQgaW4gcGxhY2Ugb2YgdGhhdAorICAgZGlyZWN0b3J5IGluIHRoZSBvdGhlciBicmFuY2guCisKKyAqICJnaXQgbWVyZ2UiIGxlYXJuZWQgdGhlICItLWFib3J0IiBvcHRpb24sIHN5bm9ueW1vdXMgdG8KKyAgICJnaXQgcmVzZXQgLS1tZXJnZSIgd2hlbiBhIG1lcmdlIGlzIGluIHByb2dyZXNzLgorCisgKiAiZ2l0IG5vdGVzIiBsZWFybmVkIHRoZSAibWVyZ2UiIHN1YmNvbW1hbmQgdG8gbWVyZ2Ugbm90ZXMgcmVmcy4KKyAgIEluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG1hbnVhbCBjb25mbGljdCByZXNvbHV0aW9uLCB0aGVyZSBhcmUKKyAgIGFsc28gc2V2ZXJhbCBub3RlcyBtZXJnZSBzdHJhdGVnaWVzIGZvciBhdXRvbWF0aWNhbGx5IHJlc29sdmluZworICAgbm90ZXMgbWVyZ2UgY29uZmxpY3RzLgorCisgKiAiZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2giIGNhbiB1c2UgU0hBLTEgb2JqZWN0IG5hbWVzIHRvIG5hbWUgdGhlCisgICBjb21taXQgd2hpY2ggaXMgdG8gYmUgZml4ZWQgdXAgKGUuZy4gImZpeHVwISBlODNjNTE2MyIpLgorCisgKiBUaGUgZGVmYXVsdCAicmVjdXJzaXZlIiBtZXJnZSBzdHJhdGVneSBsZWFybmVkIHRoZSAtLXJlbmFtZS10aHJlc2hvbGQKKyAgIG9wdGlvbiB0byBpbmZsdWVuY2UgdGhlIHJlbmFtZSBkZXRlY3Rpb24sIHNpbWlsYXIgdG8gdGhlIC1NIG9wdGlvbgorICAgb2YgImdpdCBkaWZmIi4gIEZyb20gdGhlICJnaXQgbWVyZ2UiIGZyb250ZW5kLCB0aGUgIi1YPHN0cmF0ZWd5IG9wdGlvbj4iCisgICBpbnRlcmZhY2UsIGUuZy4gImdpdCBtZXJnZSAtWHJlbmFtZS10aHJlc2hvbGQ9NTAlIC4uLiIsIGNhbiBiZSB1c2VkCisgICB0byB0cmlnZ2VyIHRoaXMuCisKKyAqIFRoZSAicmVjdXJzaXZlIiBzdHJhdGVneSBhbHNvIGxlYXJuZWQgdG8gaWdub3JlIHZhcmlvdXMgd2hpdGVzcGFjZQorICAgY2hhbmdlczsgdGhlIG1vc3Qgbm90YWJsZSBpcyAtWGlnbm9yZS1zcGFjZS1hdC1lb2wuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCAiLS10by1jbWQiLCBzaW1pbGFyIHRvICItLWNjLWNtZCIsIHRvIHJlYWQKKyAgIHRoZSByZWNpcGllbnQgbGlzdCBmcm9tIGEgY29tbWFuZCBvdXRwdXQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byByZWFkIGFuZCB1c2UgIlRvOiIgZnJvbSBpdHMgaW5wdXQgZmlsZXMuCisKKyAqIHlvdSBjYW4gZXh0ZW5kICJnaXQgc2hlbGwiLCB3aGljaCBpcyBvZnRlbiB1c2VkIG9uIGJveGVzIHRoYXQgYWxsb3cKKyAgIGdpdC1vbmx5IGxvZ2luIG92ZXIgc3NoIGFzIGxvZ2luIHNoZWxsLCB3aXRoIGEgY3VzdG9tIHNldCBvZgorICAgY29tbWFuZHMuCisKKyAqIFRoZSBjdXJyZW50IGJyYW5jaCBuYW1lIGluICJnaXQgc3RhdHVzIiBvdXRwdXQgY2FuIGJlIGNvbG9yZWQgZGlmZmVyZW50bHkKKyAgIGZyb20gdGhlIGdlbmVyaWMgaGVhZGVyIGNvbG9yIGJ5IHNldHRpbmcgdGhlICJjb2xvci5zdGF0dXMuYnJhbmNoIiB2YXJpYWJsZS4KKworICogImdpdCBzdWJtb2R1bGUgc3luYyIgdXBkYXRlcyBtZXRhaW5mb3JtYXRpb24gZm9yIGFsbCBzdWJtb2R1bGVzLAorICAgbm90IGp1c3QgdGhlIG9uZXMgdGhhdCBoYXZlIGJlZW4gY2hlY2tlZCBvdXQuCisKKyAqIGdpdHdlYiBjYW4gdXNlIGEgY3VzdG9tICdoaWdobGlnaHQnIGNvbW1hbmQgd2l0aCBpdHMgY29uZmlndXJhdGlvbiBmaWxlLgorCisgKiBvdGhlciBnaXR3ZWIgdXBkYXRlcy4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdGhlIHYxLjcuMy5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdCBsb2cgLS1hdXRob3I9bWUgLS1hdXRob3I9aGVyIiBkaWQgbm90IGZpbmQgY29tbWl0cyB3cml0dGVuIGJ5CisgICBtZSBvciBieSBoZXI7IGluc3RlYWQgaXQgbG9va2VkIGZvciBjb21taXRzIHdyaXR0ZW4gYnkgbWUgYW5kIGJ5CisgICBoZXIsIHdoaWNoIGlzIGltcG9zc2libGUuCisKKyAqICJnaXQgcHVzaCAtLXByb2dyZXNzIiBzaG93cyBwcm9ncmVzcyBpbmRpY2F0b3JzIG5vdy4KKworICogImdpdCByZWJhc2UgLWkiIHNob3dlZCBhIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlIHdoZW4gZ2l2ZW4gYQorICAgYnJhbmNoIG5hbWUgdGhhdCBkb2VzIG5vdCBleGlzdC4KKworICogImdpdCByZXBhY2siIHBsYWNlcyBpdHMgdGVtcG9yYXJ5IHBhY2tzIHVuZGVyICRHSVRfT0JKRUNUX0RJUkVDVE9SWS9wYWNrCisgICBpbnN0ZWFkIG9mICRHSVRfT0JKRUNUX0RJUkVDVE9SWS8gdG8gYXZvaWQgY3Jvc3MgZGlyZWN0b3J5IHJlbmFtZXMuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAtLW90aGVyLWZsYWdzIiBwYXNzZXMgZmxhZ3MgZG93bgorICAgdG8gaXRzIHN1Ymludm9jYXRpb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlYmQ3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMS50eHQKQEAgLTAsMCArMSw0NyBAQAorR2l0IHYxLjcuNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdoZW4gYW4gb2JqZWN0ICIkdHJlZTokcGF0aCIgZG9lcyBub3QgZXhpc3QsIGlmICRwYXRoIGRvZXMgZXhpc3QgaW4gdGhlCisgICBzdWJ0cmVlIG9mICR0cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHN1YmRpcmVjdG9yeSB0aGUgdXNlciBpcyBpbiwKKyAgIGdpdCBub3cgc3VnZ2VzdHMgdXNpbmcgIiR0cmVlOi4vJHBhdGgiIGluIGFkZGl0aW9uIHRvIHRoZSBhZHZpY2UgdG8gdXNlCisgICB0aGUgZnVsbCBwYXRoIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZS4KKworICogVGhlICItLWRhdGU9cmVsYXRpdmUiIG91dHB1dCBmb3JtYXQgdXNlZCB0byBzYXkgIlggeWVhcnMsIDEyIG1vbnRocyIKKyAgIHdoZW4gaXQgc2hvdWxkIGhhdmUgc2FpZCAiWCsxIHllYXJzIi4KKworICogVGhlIHNtYXJ0LUhUVFAgdHJhbnNmZXIgd2FzIGJyb2tlbiBpbiAxLjcuNSB3aGVuIHRoZSBjbGllbnQgbmVlZHMKKyAgIHRvIGlzc3VlIGEgc21hbGwgUE9TVCAod2hpY2ggdXNlcyBjb250ZW50LWxlbmd0aCkgYW5kIHRoZW4gYSBsYXJnZQorICAgUE9TVCAod2hpY2ggdXNlcyBjaHVua2VkKSBiYWNrIHRvIGJhY2suCisKKyAqICJnaXQgY2xlYW4iIHVzZWQgdG8gZmFpbCBvbiBhbiBlbXB0eSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgcmVhZGFibGUsCisgICBldmVuIHRob3VnaCBybWRpcigyKSBjb3VsZCByZW1vdmUgc3VjaCBhIGRpcmVjdG9yeS4gIE5vdyB3ZSBhdHRlbXB0IGl0CisgICBhcyB0aGUgbGFzdCByZXNvcnQuCisKKyAqIFRoZSAiLS1kaXJzdGF0IiBvcHRpb24gb2YgImRpZmYiIGZhbWlseSBvZiBjb21tYW5kcyB1c2VkIHRvIHRvdGFsbHkKKyAgIGlnbm9yZSBhIGNoYW5nZSB0aGF0IG9ubHkgcmVhcnJhbmdlZCBsaW5lcyB3aXRoaW4gYSBmaWxlLiAgU3VjaCBhCisgICBjaGFuZ2Ugbm93IGNvdW50cyBhcyBhdCBsZWFzdCBhIG1pbmltdW0gYnV0IG5vbiB6ZXJvIGNoYW5nZS4KKworICogVGhlICItLWRpcnN0YXQiIG9wdGlvbiBvZiAiZGlmZiIgZmFtaWx5IG9mIGNvbW1hbmRzIHVzZWQgdG8gdXNlIHRoZQorICAgcGF0aG5hbWUgaW4gdGhlIG9yaWdpbmFsLCBpbnN0ZWFkIG9mIHRoZSBwYXRobmFtZSBpbiB0aGUgcmVzdWx0LAorICAgd2hlbiByZW5hbWVzIGFyZSBpbnZvbHZlZC4KKworICogImdpdCBwYWNrLW9iamVjdCIgZGlkIG5vdCB0YWtlIGNvcmUuYmlnZmlsZXRocmVhc2hvbGQgaW50byBhY2NvdW50CisgICAodW5saWtlIGZhc3QtaW1wb3J0KTsgbm93IGl0IGRvZXMuCisKKyAqICJnaXQgcmVmbG9nIiBpZ25vcmVkIG9wdGlvbnMgbGlrZSAiLS1mb3JtYXQ9Li4iIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAqICJnaXQgc3Rhc2ggYXBwbHkiIHVzZWQgdG8gcmVmdXNlIHRvIHdvcmsgaWYgdGhlcmUgd2FzIGFueSBjaGFuZ2UgaW4KKyAgIHRoZSB3b3JraW5nIHRyZWUsIGV2ZW4gd2hlbiB0aGUgY2hhbmdlIGRpZCBub3Qgb3ZlcmxhcCB3aXRoIHRoZSBjaGFuZ2UKKyAgIHRoZSBzdGFzaCByZWNvcmRlZC4KKworICogImdpdCBzdGFzaCBhcHBseSBAezk5OTk5fSIgd2FzIG5vdCBkaWFnbm9zZWQgYXMgYW4gZXJyb3IsIGV2ZW4gd2hlbiB5b3UKKyAgIGRpZCBub3QgaGF2ZSB0aGF0IG1hbnkgc3Rhc2ggZW50cmllcy4KKworICogQW4gZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgc2VuZC1lbWFpbCIgdG8gZGlhZ25vc2UgYSBicm9rZW4gU01UUAorICAgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIGxhY2tlZCBhIHNwYWNlIGJldHdlZW4gImhlbGxvPTxzbXRwLWRvbWFpbj4iCisgICBhbmQgInBvcnQ9PHNtdHAtc2VydmVyLXBvcnQ+Ii4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTFlYjdjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4yLnR4dApAQCAtMCwwICsxLDU3IEBACitHaXQgdjEuNy41LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHJlbGVhc2Ugbm90ZXMgdG8gMS43LjUuMSBmb3Jnb3QgdG8gbWVudGlvbjoKKworICogImdpdCBzdGFzaCAtcCAtLW5vLWtlZXAtaW5kZXgiIGFuZCAiZ2l0IHN0YXNoIC0tbm8ta2VlcC1pbmRleCAtcCIgbm93CisgICBtZWFuIHRoZSBzYW1lIHRoaW5nLgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiAoaGVuY2UgImdpdCBwdXNoIiBvdmVyIGdpdCBuYXRpdmUgcHJvdG9jb2wpIGhhZCBhCisgICBzdWJ0bGUgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suCisKK0ZpeGVzIHNpbmNlIHYxLjcuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFkZCAtcCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIGEgaHVuayBpcyBzcGxpdCBhbmQgdGhlbgorICAgb25lIG9mIHRoZW0gd2FzIGdpdmVuIHRvIHRoZSBlZGl0b3IuCisKKyAqICJnaXQgYWRkIC11IiBkaWQgbm90IHJlc29sdmUgYSBjb25mbGljdCB3aGVyZSBvdXIgaGlzdG9yeSBkZWxldGVkIGFuZAorICAgdGhlaXIgaGlzdG9yeSBtb2RpZmllZCB0aGUgc2FtZSBmaWxlLCBhbmQgdGhlIHdvcmtpbmcgdHJlZSByZXNvbHZlZCB0bworICAga2VlcCBhIGZpbGUuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBkaWQgbm90IGtub3cgdGhhdCBDVlNOVCBzdG9yZXMgaXRzIHBhc3N3b3JkIGZpbGUgaW4gYQorICAgbG9jYXRpb24gZGlmZmVyZW50IGZyb20gdGhlIHRyYWRpdGlvbmFsIENWUy4KKworICogImdpdCBkaWZmLWZpbGVzIiBkaWQgbm90IHNob3cgdGhlIG1vZGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgd29ya2luZworICAgdHJlZSBzaWRlIG9mIGFuIHVubWVyZ2VkIHBhdGggY29ycmVjdGx5LgorCisgKiAiZ2l0IGRpZmYgLU0gLS1jYWNoZWQiIHVzZWQgdG8gdXNlIHVubWVyZ2VkIHBhdGggYXMgYSBwb3NzaWJsZSByZW5hbWUKKyAgIHNvdXJjZSBjYW5kaWRhdGUsIHdoaWNoIG1hZGUgbm8gc2Vuc2UuCisKKyAqIFRoZSBvcHRpb24gbmFtZSBwYXJzZXIgaW4gImdpdCBmYXN0LWltcG9ydCIgdXNlZCBwcmVmaXggbWF0Y2hlcyBmb3IKKyAgIHNvbWUgb3B0aW9ucyB3aGVyZSBpdCBzaG91bGRuJ3QsIGFuZCBhY2NlcHRlZCBub24tZXhpc3RlbnQgb3B0aW9ucywKKyAgIGUuZy4gIi0tcmVsYXRpdmUtbWFya3NtaXRoIiBvciAiLS1mb3JjZXBzIi4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGRpZCBub3QgcXVvdGUgUkZDODIyIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyAgIGVtYWlsIGFkZHJlc3MgKGUuZyBGcm9tOiBKdW5pbyBDLiBIYW1hbm8gPGpjaEBleGFtcGxlLmNvbT4sIG5vdAorICAgRnJvbTogIkp1bmlvIEMuIEhhbWFubyIgPGpjaEBleGFtcGxlLmNvbT4pLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgd2hlbiBydW4gd2l0aCAiLS1xdWlldCIgb3B0aW9uIHVzZWQgdG8gcHJvZHVjZSBhCisgICBub25zZW5zZSByZXN1bHQgdGhhdCBjb25zaXN0cyBvZiBhbHRlcm5hdGluZyBlbXB0eSBvdXRwdXQuCisKKyAqIEluICJnaXQgbWVyZ2UiLCBwZXItYnJhbmNoIGJyYW5jaC48bmFtZT4ubWVyZ2VvcHRpb25zIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlcyBkaWQgbm90IG92ZXJyaWRlIHRoZSBmYWxsYmFjayBkZWZhdWx0IG1lcmdlLjxvcHRpb24+CisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzdWNoIGFzIG1lcmdlLmZmLCBtZXJnZS5sb2csIGV0Yy4KKworICogImdpdCBtZXJnZS1vbmUtZmlsZSIgZGlkIG5vdCBob25vciBHSVRfV09SS19UUkVFIHNldHRpbmdzIHdoZW4KKyAgIGhhbmRsaW5nIGEgImJvdGggc2lkZXMgYWRkZWQsIGRpZmZlcmVudGx5IiBjb25mbGljdC4KKworICogImdpdCBtZXJnZXRvb2wiIGRpZCBub3QgaGFuZGxlIGNvbmZsaWN0ZWQgc3VibW91ZHVsZXMgZ3JhY2VmdWxseS4KKworICogImdpdC1wNCIgKGluIGNvbnRyaWIpIHVzZWQgYSB3cm9uZyBiYXNlIGltYWdlIHdoaWxlIG1lcmdlIGEgZmlsZSB0aGF0CisgICB3YXMgYWRkZWQgb24gYm90aCBicmFuY2hlcyBkaWZmZXJlbnRseS4KKworICogImdpdCByZWJhc2UgLWkgLXAiIGZhaWxlZCB0byBwcmVzZXJ2ZSB0aGUgaGlzdG9yeSB3aGVuIHRoZXJlIGlzIGEKKyAgIHJlZHVuZGFudCBtZXJnZSBjcmVhdGVkIHdpdGggdGhlIC0tbm8tZmYgb3B0aW9uLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMDMzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjMudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2MS43LjUuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGJhc2ggY29tcGxldGlvbiBzY3JpcHRzIHNob3VsZCBjb3JyZWN0bHkgd29yayB1c2luZyB6c2gncyBiYXNoCisgICBjb21wbGV0aW9uIGVtdWxhdGlvbiBsYXllciBub3cuCisKKyAqIFNldHRpbmcgJChwcmVmaXgpIGluIGNvbmZpZy5tYWsgZGlkIG5vdCBhZmZlY3Qgd2hlcmUgZXRjL2dpdGNvbmZpZworICAgZmlsZSBpcyByZWFkIGZyb20sIGV2ZW4gdGhvdWdoIHBhc3NpbmcgaXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIG9mCisgICAkKE1BS0UpIGRpZC4KKworICogVGhlIGxvZ2ljIHRvIGhhbmRsZSAiJiIgKGV4cGFuZCB0byBVTklYIHVzZXJuYW1lKSBpbiBHRUNPUyBmaWVsZAorICAgbWlzY291bnRlZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGl0IGZvcm1hdHRlZC4KKworICogImdpdCBjaGVycnktcGljayAtcyByZXNvbHZlIiBmYWlsZWQgdG8gY2hlcnJ5LXBpY2sgYSByb290IGNvbW1pdC4KKworICogImdpdCBkaWZmIC0td29yZC1kaWZmIiBtaXNiZWhhdmVkIHdoZW4gZGlmZi5zdXBwcmVzcy1ibGFuay1lbXB0eSB3YXMKKyAgIGluIGVmZmVjdC4KKworICogImdpdCBsb2cgLS1zdGRpbiBwYXRoIiB3aXRoIGFuIGlucHV0IHRoYXQgaGFzIGFkZGl0aW9uYWwgcGF0aHNwZWMKKyAgIHVzZWQgdG8gY29ycnVwdCBtZW1vcnkuCisKKyAqICJnaXQgc2VuZC1wYWNrIiAoaGVuY2UgImdpdCBwdXNoIikgb3ZlciBzbWFsdC1IVFRQIHByb3RvY29sIGNvdWxkCisgICBkZWFkbG9jayB3aGVuIHRoZSBjbGllbnQgc2lkZSBwYWNrLW9iamVjdCBkaWVkIGVhcmx5LgorCisgKiBDb21wcmVzc2VkIHRhcmJhbGwgZ2l0d2ViIGdlbmVyYXRlcyB1c2VkIHRvIGJlIG1hZGUgd2l0aCB0aGUgdGltZXN0YW1wCisgICBvZiB0aGUgdGFyYmFsbCBnZW5lcmF0aW9uOyB0aGlzIHdhcyBiYWQgYmVjYXVzZSBzbmFwc2hvdCBmcm9tIHRoZSBzYW1lCisgICB0cmVlIHNob3VsZCByZXN1bHQgaW4gYSBzYW1lIHRhcmJhbGwuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzZjQ1NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuNC50eHQKQEAgLTAsMCArMSwyMSBAQAorR2l0IHYxLjcuNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgc2luZ2xlLWtleSBtb2RlIG9mICJnaXQgYWRkIC1wIiB3YXMgZWFzaWx5IGZvb2xlZCBpbnRvIHRoaW5raW5nCisgICB0aGF0IGl0IHdhcyB0b2xkIHRvIGFkZCBldmVydGhpbmcgKCdhJykgd2hlbiB1cC1hcnJvdyB3YXMgcHJlc3NlZCBieQorICAgbWlzdGFrZS4KKworICogU2V0dGluZyBhIGdpdCBjb21tYW5kIHRoYXQgdXNlcyBjdXN0b20gY29uZmlndXJhdGlvbiB2aWEgIi1jIHZhcj12YWwiCisgICBhcyBhbiBhbGlhcyBjYXVzZWQgYSBjcmFzaCBkdWUgdG8gYSByZWFsbG9jKDMpIGZhaWx1cmUuCisKKyAqICJnaXQgZGlmZiAtQyAtQyIgdXNlZCB0byBkaXNhYmxlIHRoZSByZW5hbWUgZGV0ZWN0aW9uIGVudGlyZWx5IHdoZW4KKyAgIHRoZXJlIGFyZSB0b28gbWFueSBjb3B5IGNhbmRpZGF0ZSBwYXRocyBpbiB0aGUgdHJlZTsgbm93IGl0IGZhbGxzCisgICBiYWNrIHRvICItQyIgd2hlbiBkb2luZyBzbyB3b3VsZCBrZWVwIHRoZSBjb3B5IGNhbmRpZGF0ZSBwYXRocworICAgdW5kZXIgdGhlIHJlbmFtZSBkZXRlY3Rpb24gbGltaXQuCisKKyAqICJnaXQgcmVyZXJlIiBkaWQgbm90IGRpYWdub3NlIGEgY29ycnVwdCBNRVJHRV9SUiBmaWxlIGluIHNvbWUgY2FzZXMuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODc5MTljCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS50eHQKQEAgLTAsMCArMSwxMzIgQEAKK0dpdCB2MS43LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBWYXJpb3VzIE1pbkdXIHBvcnRhYmlsaXR5IGZpeGVzLgorCisgKiBWYXJpb3VzIGdpdC1wNCBlbmhhbmNlbWVudHMgKGluIGNvbnRyaWIpLgorCisgKiBWYXJpb3VzIHZjcy1zdm4sIGdpdC1zdm4gYW5kIGdpdGsgZW5oYW5jZW1lbnRzIGFuZCBmaXhlcy4KKworICogVmFyaW91cyBnaXQtZ3VpIHVwZGF0ZXMgKDAuMTQuMCkuCisKKyAqIFVwZGF0ZSB0byBtb3JlIG1vZGVybiBIUC1VWCBwb3J0LgorCisgKiBUaGUgY29kZWJhc2UgaXMgZ2V0dGluZyBwcmVwYXJlZCBmb3IgaTE4bi9sMTBuOyBubyB0cmFuc2xhdGVkCisgICBzdHJpbmdzIG5vciB0cmFuc2xhdGlvbiBtZWNoYW5pc20gaW4gdGhlIGNvZGUgeWV0LCBidXQgdGhlIHN0cmluZ3MKKyAgIGFyZSBiZWluZyBtYXJrZWQgZm9yIGwxMG4uCisKKyAqIFRoZSBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IGNhbiBub3cgY29tcGxldGUgc3ltbWV0cmljIGRpZmZlcmVuY2UKKyAgIGZvciAiZ2l0IGRpZmYiIGNvbW1hbmQsIGUuZy4gImdpdCBkaWZmIC4uLmJyYTxUQUI+Ii4KKworICogVGhlIGRlZmF1bHQgbWluaW11bSBsZW5ndGggb2YgYWJicmV2aWF0ZWQgYW5kIHVuaXF1ZSBvYmplY3QgbmFtZXMKKyAgIGNhbiBub3cgYmUgY29uZmlndXJlZCBieSBzZXR0aW5nIHRoZSBjb3JlLmFiYnJldiBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZS4KKworICogImdpdCBhcHBseSAtdiIgcmVwb3J0cyBvZmZzZXQgbGluZXMgd2hlbiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgYXQKKyAgIHRoZSBleGFjdCBsb2NhdGlvbiByZWNvcmRlZCBpbiB0aGUgZGlmZiBvdXRwdXQuCisKKyAqICJnaXQgY29uZmlnIiB1c2VkIHRvIGJlIGFsc28ga25vd24gYXMgImdpdCByZXBvLWNvbmZpZyIsIGJ1dCB0aGUgb2xkCisgICBuYW1lIGlzIG5vdyBvZmZpY2lhbGx5IGRlcHJlY2F0ZWQuCisKKyAqICJnaXQgY2hlY2tvdXQgLS1kZXRhY2ggPGNvbW1pdD4iIGlzIGEgbW9yZSB1c2VyIGZyaWVuZGx5IHN5bm9ueW0gZm9yCisgICAiZ2l0IGNoZWNrb3V0IDxjb21taXQ+XjAiLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBwZXJmb3JtZWQgb24gZGV0YWNoZWQgSEVBRCBnaXZlcyBhIHdhcm5pbmcgYW5kCisgICBhZHZpY2Ugd2hlbiB0aGUgY29tbWl0IGJlaW5nIGxlZnQgYmVoaW5kIHdpbGwgYmVjb21lIHVucmVhY2hhYmxlIGZyb20KKyAgIGFueSBicmFuY2ggb3IgdGFnLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBhbmQgImdpdCByZXZlcnQiIGNhbiBiZSB0b2xkIHRvIHVzZSBhIGN1c3RvbSBtZXJnZQorICAgc3RyYXRlZ3ksIHNpbWlsYXIgdG8gImdpdCByZWJhc2UiLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiByZW1lbWJlcnMgd2hpY2ggY29tbWl0IGZhaWxlZCB0byBhcHBseSB3aGVuIGl0IGlzCisgICBzdG9wcGVkIGJ5IGNvbmZsaWN0cywgbWFraW5nIGl0IHVubmVjZXNzYXJ5IHRvIHVzZSAiY29tbWl0IC1jICRjb21taXQiCisgICB0byBjb25jbHVkZSBpdC4KKworICogImdpdCBjdnNpbXBvcnQiIGJhaWxzIG91dCBpbW1lZGlhdGVseSB3aGVuIHRoZSBjdnMgc2VydmVyIGNhbm5vdCBiZQorICAgcmVhY2hlZCwgd2l0aG91dCBzcGV3aW5nIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2VzIHRoYXQgY29tcGxhaW4gYWJvdXQKKyAgIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaXQgbmV2ZXIgZ290LgorCisgKiAiZ2l0IGZldGNoIiB2cyAiZ2l0IHVwbG9hZC1wYWNrIiB0cmFuc2ZlciBsZWFybmVkICduby1kb25lJworICAgcHJvdG9jb2wgZXh0ZW5zaW9uIHRvIHNhdmUgb25lIHJvdW5kLXRyaXAgYWZ0ZXIgdGhlIGNvbnRlbnQKKyAgIG5lZ290aWF0aW9uIGlzIGRvbmUuIFRoaXMgc2F2ZXMgb25lIEhUVFAgUlBDLCByZWR1Y2luZyB0aGUgb3ZlcmFsbAorICAgbGF0ZW5jeSBmb3IgYSB0cml2aWFsIGZldGNoLgorCisgKiAiZ2l0IGZldGNoIiBjYW4gYmUgdG9sZCB0byByZWN1cnNpdmVseSBmZXRjaCBzdWJtb2R1bGVzIG9uLWRlbWFuZC4KKworICogImdpdCBncmVwIC1mIDxmaWxlbmFtZT4iIGxlYXJuZWQgdG8gdHJlYXQgIi0iIGFzICJyZWFkIGZyb20gdGhlCisgICBzdGFuZGFyZCBpbnB1dCBzdHJlYW0iLgorCisgKiAiZ2l0IGdyZXAgLS1uby1pbmRleCIgZGlkIG5vdCBob25vciBwYXRoc3BlY3MgY29ycmVjdGx5LCByZXR1cm5pbmcKKyAgIHBhdGhzIG91dHNpZGUgdGhlIHNwZWNpZmllZCBhcmVhLgorCisgKiAiZ2l0IGluaXQiIGxlYXJuZWQgdGhlIC0tc2VwYXJhdGUtZ2l0LWRpciBvcHRpb24gdG8gYWxsb3cgdGhlIGdpdAorICAgZGlyZWN0b3J5IGZvciBhIG5ldyByZXBvc2l0b3J5IGNyZWF0ZWQgZWxzZXdoZXJlIGFuZCBsaW5rZWQgdmlhIHRoZQorICAgZ2l0ZGlyIG1lY2hhbmlzbS4gVGhpcyBpcyBwcmltYXJpbHkgdG8gaGVscCBzdWJtb2R1bGUgc3VwcG9ydCBsYXRlcgorICAgdG8gc3dpdGNoIGJldHdlZW4gYSBicmFuY2ggb2Ygc3VwZXJwcm9qZWN0IHRoYXQgaGFzIHRoZSBzdWJtb2R1bGUKKyAgIGFuZCBhbm90aGVyIHRoYXQgZG9lcyBub3QuCisKKyAqICJnaXQgbG9nIiB0eXBlIGNvbW1hbmRzIG5vdyB1bmRlcnN0YW5kIGdsb2JiaW5nIHBhdGhzcGVjcy4gIFlvdQorICAgY2FuIHNheSAiZ2l0IGxvZyAtLSAnKi50eHQnIiBmb3IgZXhhbXBsZS4KKworICogImdpdCBsb2ciIGZhbWlseSBvZiBjb21tYW5kcyBsZWFybmVkIC0tY2hlcnJ5IGFuZCAtLWNoZXJyeS1tYXJrCisgICBvcHRpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gdmlldyB0d28gZGl2ZXJnZWQgYnJhbmNoZXMgd2hpbGUgb21pdHRpbmcKKyAgIG9yIGhpZ2hsaWdodGluZyBlcXVpdmFsZW50IGNoYW5nZXMgdGhhdCBhcHBlYXIgb24gYm90aCBzaWRlcyBvZiBhCisgICBzeW1tZXRyaWMgZGlmZmVyZW5jZSAoZS5nLiAibG9nIC0tY2hlcnJ5IEEuLi5CIikuCisKKyAqIEEgbGF6eSAiZ2l0IG1lcmdlIiB0aGF0IGRpZG4ndCBzYXkgd2hhdCB0byBtZXJnZSB1c2VkIHRvIGJlIGFuIGVycm9yLgorICAgV2hlbiBydW4gb24gYSBicmFuY2ggdGhhdCBoYXMgYW4gdXBzdHJlYW0gZGVmaW5lZCwgaG93ZXZlciwgdGhlIGNvbW1hbmQKKyAgIG5vdyBtZXJnZXMgZnJvbSB0aGUgY29uZmlndXJlZCB1cHN0cmVhbS4KKworICogImdpdCBtZXJnZXRvb2wiIGxlYXJuZWQgaG93IHRvIGRyaXZlICJiZXlvbmQgY29tcGFyZSAzIiBhcyB3ZWxsLgorCisgKiAiZ2l0IHJlcmVyZSBmb3JnZXQiIHdpdGhvdXQgcGF0aHNwZWMgdXNlZCB0byBmb3JnZXQgYWxsIHRoZSBzYXZlZAorICAgY29uZmxpY3RzIHRoYXQgcmVsYXRlIHRvIHRoZSBjdXJyZW50IG1lcmdlOyBpdCBub3cgcmVxdWlyZXMgeW91IHRvCisgICBnaXZlIGl0IHBhdGhzcGVjcy4KKworICogImdpdCByZXYtbGlzdCAtLW9iamVjdHMgJHJldnMgLS0gJHBhdGhzcGVjIiBub3cgbGltaXRzIHRoZSBvYmplY3RzIGxpc3RlZAorICAgaW4gaXRzIG91dHB1dCBwcm9wZXJseSB3aXRoIHRoZSBwYXRoc3BlYywgaW4gcHJlcGFyYXRpb24gZm9yIG5hcnJvdworICAgY2xvbmVzLgorCisgKiAiZ2l0IHB1c2giIHdpdGggbm8gcGFyYW1ldGVycyBnaXZlcyBiZXR0ZXIgYWR2aWNlIG1lc3NhZ2VzIHdoZW4KKyAgICJ0cmFja2luZyIgaXMgdXNlZCBhcyB0aGUgcHVzaC5kZWZhdWx0IHNlbWFudGljcyBvciB0aGVyZSBpcyBubyByZW1vdGUKKyAgIGNvbmZpZ3VyZWQgeWV0LgorCisgKiBBIHBvc3NpYmxlIHZhbHVlIHRvIHRoZSAicHVzaC5kZWZhdWx0IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLAorICAgJ3RyYWNraW5nJywgZ2FpbmVkIGEgc3lub255bSB0aGF0IG1vcmUgbmF0dXJhbGx5IGRlc2NyaWJlcyB3aGF0IGl0CisgICBkb2VzLCAndXBzdHJlYW0nLgorCisgKiAiZ2l0IHJlcmVyZSIgbGVhcm5lZCBhIG5ldyBzdWJjb21tYW5kICJyZW1haW5pbmciIHRoYXQgaXMgc2ltaWxhciB0bworICAgInN0YXR1cyIgYW5kIGxpc3RzIHRoZSBwYXRocyB0aGF0IGhhZCBjb25mbGljdHMgd2hpY2ggYXJlIGtub3duIHRvCisgICByZXJlcmUsIGJ1dCBleGNsdWRlcyB0aGUgcGF0aHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMKKyAgIHJlc29sdmVkIGluIHRoZSBpbmRleCBmcm9tIGl0cyBvdXRwdXQuICAiZ2l0IG1lcmdldG9vbCIgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gdXNlIHRoaXMgZmFjaWxpdHkuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKworRml4ZXMgc2luY2UgdjEuNy40CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB0aGUgdjEuNy40LlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisgKiAiZ2l0IGZldGNoIiBmcm9tIGEgY2xpZW50IHRoYXQgaXMgbW9zdGx5IGZvbGxvd2luZyB0aGUgcmVtb3RlCisgICBuZWVkbGVzc2x5IHRvbGQgYWxsIG9mIGl0cyByZWZzIHRvIHRoZSBzZXJ2ZXIgZm9yIGJvdGggc2lkZXMgdG8KKyAgIGNvbXB1dGUgdGhlIHNldCBvZiBvYmplY3RzIHRoYXQgbmVlZCB0byBiZSB0cmFuc2ZlcnJlZCBlZmZpY2llbnRseSwKKyAgIGluc3RlYWQgb2Ygc3RvcHBpbmcgd2hlbiB0aGUgc2VydmVyIGhlYXJkIGVub3VnaC4gSW4gYSBwcm9qZWN0IHdpdGgKKyAgIG1hbnkgdGFncywgdGhpcyB0dXJucyBvdXQgdG8gYmUgZXh0cmVtZWx5IHdhc3RlZnVsLCBlc3BlY2lhbGx5IG92ZXIKKyAgIHRoZSBzbWFydCBIVFRQIHRyYW5zcG9ydCAoc3AvbWFpbnQte3VwbG9hZCxmZXRjaH0tcGFjay1zdG9wLWVhcmx5fjEpLgorCisgKiAiZ2l0IGZldGNoIiBydW4gZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCB1c2VzIHRoZSBzYW1lIHJlcG9zaXRvcnkgYXMKKyAgIGl0cyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIGFzIHRoZSByZXBvc2l0b3J5IGl0IGlzIGZldGNoaW5nIGZyb20KKyAgIGRpZCBub3QgdGVsbCB0aGUgc2VydmVyIHRoYXQgaXQgYWxyZWFkeSBoYXMgYWNjZXNzIHRvIG9iamVjdHMKKyAgIHJlYWNoYWJsZSBmcm9tIHRoZSByZWZzIGluIHRoZWlyIGNvbW1vbiBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlLAorICAgY2F1c2luZyBpdCB0byBmZXRjaCB1bm5lY2Vzc2FyeSBvYmplY3RzIChqYy9tYWludC1mZXRjaC1hbHQpLgorCisgKiAiZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3IiIGNyZWF0ZWQgYSBjb25maWd1cmF0aW9uIHRoYXQgaXMgc3VpdGFibGUgZm9yCisgICBkb2luZyBib3RoIGEgbWlycm9yIGZldGNoIGFuZCBhIG1pcnJvciBwdXNoIGF0IHRoZSBzYW1lIHRpbWUsIHdoaWNoCisgICBtYWRlIGxpdHRsZSBzZW5zZS4gIFdlIG5vdyB3YXJuIGFuZCByZXF1aXJlIHRoZSBjb21tYW5kIGxpbmUgdG8gc3BlY2lmeQorICAgZWl0aGVyIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2guCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmU0NmFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi4xLnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQgdjEuNy42LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy42CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVmFyaW91cyBjb2RlcGF0aHMgdGhhdCBpbnZva2VkIHpsaWIgZGVmbGF0ZS9pbmZsYXRlIGFzc3VtZWQgdGhhdCB0aGVzZQorICAgZnVuY3Rpb25zIGNhbiBjb21wcmVzcyBvciB1bmNvbXByZXNzIG1vcmUgdGhhbiA0R0IgZGF0YSBpbiBvbmUgY2FsbCBvbgorICAgcGxhdGZvcm1zIHdpdGggNjQtYml0IGxvbmcsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCB1bmV4ZWN1dGFibGUiIHJlcG9ydGVkIHRoYXQgInVuZXhlY3V0YWJsZSIgd2FzIG5vdCBmb3VuZCwgZXZlbgorICAgdGhvdWdoIHRoZSBhY3R1YWwgZXJyb3Igd2FzIHRoYXQgInVuZXhlY3V0YWJsZSIgd2FzIGZvdW5kIGJ1dCBkaWQKKyAgIG5vdCBoYXZlIGEgcHJvcGVyIHNoZS1iYW5nIGxpbmUgdG8gYmUgZXhlY3V0ZWQuCisKKyAqIEVycm9yIGV4aXRzIGZyb20gJFBBR0VSIHdlcmUgc2lsZW50bHkgaWdub3JlZC4KKworICogImdpdCBjaGVja291dCAtYiA8YnJhbmNoPiIgd2FzIGNvbmZ1c2VkIHdoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgYQorICAgYnJhbmNoIHdob3NlIG5hbWUgZW5kcyB3aXRoICItZyIgZm9sbG93ZWQgYnkgaGV4YWRlY2ltYWwgZGlnaXRzLAorICAgYW5kIHJlZnVzZWQgdG8gd29yay4KKworICogImdpdCBjaGVja291dCAtYiA8YnJhbmNoPiIgc29tZXRpbWVzIHdyb3RlIGEgYm9ndXMgcmVmbG9nIGVudHJ5LAorICAgY2F1c2luZyBsYXRlciAiZ2l0IGNoZWNrb3V0IC0iIHRvIGZhaWwuCisKKyAqICJnaXQgZGlmZiAtLWNjIiBsZWFybmVkIHRvIGNvcnJlY3RseSBpZ25vcmUgYmluYXJ5IGZpbGVzLgorCisgKiAiZ2l0IGRpZmYgLWMvLS1jYyIgbWlzaGFuZGxlZCBhIGRlbGV0aW9uIHRoYXQgcmVzb2x2ZXMgYSBjb25mbGljdCwgYW5kCisgICBsb29rZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSBpbnN0ZWFkLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBmb3Jnb3QgdG8gcXVvdGUgcGF0aG5hbWVzIHdpdGggdW5zYWZlIGNoYXJhY3RlcnMKKyAgIGluIGl0cyBvdXRwdXQuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgc21hcnQtaHR0cCB0cmFuc3BvcnQgdXNlZCB0byBhYm9ydCB3aGVuIHRoZQorICAgcmVwb3NpdG9yeSB3YXMgdXBkYXRlZCBiZXR3ZWVuIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gYW5kIHRoZQorICAgc3Vic2VxdWVudCBvYmplY3QgdHJhbnNmZXIuCisKKyAqICJnaXQgZmV0Y2giIGRpZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMgaW4gc3ViZGlyZWN0b3JpZXMuCisKKyAqICJnaXQgbHMtdHJlZSIgZGlkIG5vdCBlcnJvciBvdXQgd2hlbiBhc2tlZCB0byBzaG93IGEgY29ycnVwdCB0cmVlLgorCisgKiAiZ2l0IHB1bGwiIHdpdGhvdXQgYW55IGFyZ3VtZW50IGxlZnQgYW4gZXh0cmEgd2hpdGVzcGFjZSBhZnRlciB0aGUKKyAgIGNvbW1hbmQgbmFtZSBpbiBpdHMgcmVmbG9nLgorCisgKiAiZ2l0IHB1c2ggLS1xdWlldCIgd2FzIG5vdCByZWFsbHkgcXVpZXQuCisKKyAqICJnaXQgcmViYXNlIC1pIC1wIiBpbmNvcnJlY3RseSBkcm9wcGVkIGNvbW1pdHMgZnJvbSBzaWRlIGJyYW5jaGVzLgorCisgKiAiZ2l0IHJlc2V0IFs8Y29tbWl0Pl0gcGF0aHMuLi4iIGRpZCBub3QgcmVzZXQgdGhlIGluZGV4IGVudHJ5IGNvcnJlY3RseQorICAgZm9yIHVubWVyZ2VkIHBhdGhzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQiIGRpZCBub3QgYWxsb3cgYSByZWxhdGl2ZSByZXBvc2l0b3J5IHBhdGggd2hlbgorICAgdGhlIHN1cGVycHJvamVjdCBkaWQgbm90IGhhdmUgYW55IGRlZmF1bHQgcmVtb3RlIHVybC4KKworICogImdpdCBzdWJtb2R1bGUgZm9yZWFjaCIgZmFpbGVkIHRvIGNvcnJlY3RseSBnaXZlIHRoZSBzdGFuZGFyZCBpbnB1dCB0bworICAgdGhlIHVzZXItc3VwcGxpZWQgY29tbWFuZCBpdCBpbnZva2VkLgorCisgKiBzdWJtb2R1bGVzIHRoYXQgdGhlIHVzZXIgaGFzIG5ldmVyIHNob3dlZCBpbnRlcmVzdCBpbiBieSBydW5uaW5nCisgICAiZ2l0IHN1Ym1vZHVsZSBpbml0IiB3YXMgaW5jb3JyZWN0bHkgbWFya2VkIGFzIGludGVyZXN0aW5nIGJ5ICJnaXQKKyAgIHN1Ym1vZHVsZSBzeW5jIi4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcXVpZXQiIHdhcyBub3QgcmVhbGx5IHF1aWV0LgorCisgICogImdpdCB0YWcgLWwgPGdsb2I+Li4uIiBkaWQgbm90IHRha2UgbXVsdGlwbGUgZ2xvYiBwYXR0ZXJucyBmcm9tIHRoZQorICAgY29tbWFuZCBsaW5lLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhZTQxNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMi50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjEuNy42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIHYxLjcuNi4xIGJyb2tlICJnaXQgcHVzaCAtLXF1aWV0IjsgaXQgdXNlZCB0byBiZSBhIG5vLW9wIGFnYWluc3QgYW4gb2xkCisgICB2ZXJzaW9uIG9mIEdpdCBydW5uaW5nIG9uIHRoZSBvdGhlciBlbmQsIGJ1dCB2MS43LjYuMSBtYWRlIGl0IGFib3J0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5NzE4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMy50eHQKQEAgLTAsMCArMSwyNCBAQAorR2l0IHYxLjcuNi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IC1jIHZhcj12YWx1ZSBzdWJjbWQiIG1pc3BhcnNlZCB0aGUgY3VzdG9tIGNvbmZpZ3VyYXRpb24gd2hlbgorICAgdmFsdWUgY29udGFpbmVkIGFuIGVxdWFsIHNpZ24uCisKKyAqICJnaXQgZmV0Y2giIGhhZCBhIG1ham9yIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24sIHdhc3RpbmcgbWFueQorICAgbmVlZGxlc3MgY3ljbGVzIGluIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGVyZSBpcyBubyBzdWJtb2R1bGVzCisgICBwcmVzZW50LiBUaGlzIHdhcyBlc3BlY2lhbGx5IGJhZCwgd2hlbiB0aGVyZSB3ZXJlIG1hbnkgcmVmcy4KKworICogImdpdCByZWZsb2cgJHJlZm5hbWUiIGRpZCBub3QgZGVmYXVsdCB0byB0aGUgInNob3ciIHN1YmNvbW1hbmQgYXMKKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFkdmVydGlzZWQgdGhlIGNvbW1hbmQgdG8gZG8uCisKKyAqICJnaXQgcmVzZXQiIGRpZCBub3QgbGVhdmUgbWVhbmluZ2Z1bCBsb2cgbWVzc2FnZSBpbiB0aGUgcmVmbG9nLgorCisgKiAiZ2l0IHN0YXR1cyAtLWlnbm9yZWQiIGRpZCBub3Qgc2hvdyBpZ25vcmVkIGl0ZW1zIHdoZW4gdGhlcmUgaXMgbm8KKyAgIHVudHJhY2tlZCBpdGVtcy4KKworICogImdpdCB0YWcgLS1jb250YWlucyAkY29tbWl0IiB3YXMgdW5uZWNlc3NhcmlseSBpbmVmZmljaWVudC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5YWNhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNC50eHQKQEAgLTAsMCArMSwzMiBAQAorR2l0IHYxLjcuNi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZXJyb3IgcmVwb3J0aW5nIGxvZ2ljIG9mICJnaXQgYW0iIHdoZW4gdGhlIGNvbW1hbmQgaXMgZmVkIGEgZmlsZQorICAgd2hvc2UgbWFpbC1zdG9yYWdlIGZvcm1hdCBpcyB1bmtub3duIHdhcyBmaXhlZC4KKworICogImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gQHstMX0gZm9vIiBkaWQgbm90IGV4cGFuZCBAey0xfSBjb3JyZWN0bHkuCisKKyAqICJnaXQgY2hlY2stcmVmLWZvcm1hdCAtLXByaW50IiB1c2VkIHRvIHBhcnJvdCBhIGNhbmRpZGF0ZSBzdHJpbmcgdGhhdAorICAgYmVnYW4gd2l0aCBhIHNsYXNoIChlLmcuIC9yZWZzL2hlYWRzL21hc3Rlcikgd2l0aG91dCBzdHJpcHBpbmcgaXQsIHRvIG1ha2UKKyAgIHRoZSByZXN1bHQgYSBzdWl0YWJseSBub3JtYWxpemVkIHN0cmluZyB0aGUgY2FsbGVyIGNhbiBhcHBlbmQgdG8gIiRHSVRfRElSLyIuCisKKyAqICJnaXQgY2xvbmUiIGZhaWxlZCB0byBjbG9uZSBsb2NhbGx5IGZyb20gYSAiLmdpdCIgZmlsZSB0aGF0IGl0c2VsZgorICAgaXMgbm90IGEgZGlyZWN0b3J5IGJ1dCBpcyBhIHBvaW50ZXIgdG8gb25lLgorCisgKiAiZ2l0IGNsb25lIiBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSB0aGF0IGJvcnJvd3MgZnJvbSBhbm90aGVyCisgICBvYmplY3Qgc3RvcmUgdXNpbmcgYSByZWxhdGl2ZSBwYXRoIGluIGl0cyBvYmplY3RzL2luZm8vYWx0ZXJuYXRlcworICAgZmlsZSBkaWQgbm90IGFkanVzdCB0aGUgYWx0ZXJuYXRlcyBpbiB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1kaXJ0eSIgZGlkIG5vdCByZWZyZXNoIHRoZSBpbmRleCBiZWZvcmUgY2hlY2tpbmcgdGhlCisgICBzdGF0ZSBvZiB0aGUgd29ya2luZyB0cmVlIGZpbGVzLgorCisgKiAiZ2l0IGxzLWZpbGVzIC4uLyRwYXRoIiB0aGF0IGlzIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5IHJlcG9ydGVkIGVycm9ycworICAgaW5jb3JyZWN0bHkgd2hlbiB0aGVyZSBpcyBubyBzdWNoIHBhdGggdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBwYXRoc3BlYy4KKworICogImdpdCBtZXJnZXRvb2wiIGNvdWxkIGxvb3AgZm9yZXZlciBwcm9tcHRpbmcgd2hlbiBub3RoaW5nIGNhbiBiZSByZWFkCisgICBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxMzEzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNS50eHQKQEAgLTAsMCArMSwyNiBAQAorR2l0IHYxLjcuNi41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNi40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZGF0ZSBwYXJzZXIgZGlkIG5vdCBhY2NlcHQgdGltZXpvbmUgZGVzaWduYXRvcnMgdGhhdCBsYWNrIG1pbnV0ZXMKKyAgIHBhcnQgYW5kIGFsc28gaGFzIGEgY29sb24gYmV0d2VlbiAiaGg6bW0iLgorCisgKiBBZnRlciBmZXRjaGluZyBmcm9tIGEgcmVtb3RlIHRoYXQgaGFzIHZlcnkgbG9uZyByZWZuYW1lLCB0aGUgcmVwb3J0aW5nCisgICBvdXRwdXQgY291bGQgaGF2ZSBjb3JydXB0ZWQgYnkgb3ZlcnJ1bm5pbmcgYSBzdGF0aWMgYnVmZmVyLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgZGlkIG5vdCB1c2UgaXRzIGFyZ3VtZW50cyBhcyBwYXRoc3BlYywgYnV0IGFzIGEgcGF0aCB0bworICAgdGhlIGZpbGUgdGhhdCBtYXkgbm90IGV2ZW4gaGF2ZSBhbnkgY29uZmxpY3QuCisKKyAqICJnaXQgbmFtZS1yZXYgLS1hbGwiIHRyaWVkIHRvIG5hbWUgYWxsIF9vYmplY3RzXywgbmF0dXJhbGx5IGZhaWxpbmcgdG8KKyAgIGRlc2NyaWJlIG1hbnkgYmxvYnMgYW5kIHRyZWVzLCBpbnN0ZWFkIG9mIHNob3dpbmcgb25seSBjb21taXRzIGFzCisgICBhZHZlcnRpc2VkIGluIGl0cyBkb2N1bWVudGF0aW9uLgorCisgKiAiZ2l0IHJlbW90ZSByZW5hbWUgJGEgJGIiIHdlcmUgbm90IGNhcmVmdWwgdG8gbWF0Y2ggdGhlIHJlbW90ZSBuYW1lCisgICBhZ2FpbnN0ICRhIChpLmUuIHNvdXJjZSBzaWRlIG9mIHRoZSByZW1vdGUgbmlja25hbWUpLgorCisgKiAiZ2l0d2ViIiB1c2VkIHRvIHByb2R1Y2UgYSBub24td29ya2luZyBsaW5rIHdoaWxlIHNob3dpbmcgdGhlIGNvbnRlbnRzCisgICBvZiBhIGJsb2IsIHdoZW4gSmF2YVNjcmlwdCBhY3Rpb25zIGFyZSBlbmFibGVkLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzQzZTAwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi42LnR4dApAQCAtMCwwICsxLDE2IEBACitHaXQgdjEuNy42LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjb2RlIHRvIGxvb2sgdXAgYXR0cmlidXRlcyBmb3IgcGF0aHMgcmV1c2VkIGVudHJpZXMgZnJvbSBhIHdyb25nCisgICBkaXJlY3Rvcnkgd2hlbiB0d28gcGF0aHMgaW4gcXVlc3Rpb24gYXJlIGluIGFkamFjZW50IGRpcmVjdG9yaWVzIGFuZAorICAgdGhlIG5hbWUgb2YgdGhlIG9uZSBkaXJlY3RvcnkgaXMgYSBwcmVmaXggb2YgdGhlIG90aGVyLgorCisgKiBXaGVuIHByb2R1Y2luZyBhICJ0aGluIHBhY2siIChwcmltYXJpbHkgdXNlZCBpbiBidW5kbGVzIGFuZCBzbWFydAorICAgSFRUUCB0cmFuc2ZlcnMpIG91dCBvZiBhIGZ1bGx5IHBhY2tlZCByZXBvc2l0b3J5LCB3ZSB1bm5lY2Vzc2FyaWx5CisgICBhdm9pZGVkIHNlbmRpbmcgcmVjZW50IG9iamVjdHMgYXMgYSBkZWx0YSBhZ2FpbnN0IG9iamVjdHMgd2Uga25vdworICAgdGhlIG90aGVyIHNpZGUgaGFzLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzQ5OGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LnR4dApAQCAtMCwwICsxLDEzNiBAQAorR2l0IHYxLjcuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFZhcmlvdXMgZ2l0LXN2biB1cGRhdGVzLgorCisgKiBVcGRhdGVzIHRoZSB3YXkgY29udGVudCB0YWdzIGFyZSBoYW5kbGVkIGluIGdpdHdlYi4gIEFsc28gYWRkcworICAgYSBVSSB0byBjaG9vc2UgY29tbW9uIHRpbWV6b25lIGZvciBkaXNwbGF5aW5nIHRoZSBkYXRlcy4KKworICogU2ltaWxhciB0byBicmFuY2ggbmFtZXMsIHRhZ25hbWVzIHRoYXQgYmVnaW4gd2l0aCAiLSIgYXJlIG5vdworICAgZGlzYWxsb3dlZC4KKworICogQ2xlYW4tdXAgb2YgdGhlIEMgcGFydCBvZiBpMThuIChidXQgbm90IGwxMG4tLS1wbGVhc2Ugd2FpdCkKKyAgIGNvbnRpbnVlcy4KKworICogVGhlIHNjcmlwdGluZyBwYXJ0IG9mIHRoZSBjb2RlYmFzZSBpcyBnZXR0aW5nIHByZXBhcmVkIGZvciBpMThuL2wxMG4uCisKKyAqIFB1c2hpbmcgYW5kIHB1bGxpbmcgZnJvbSBhIHJlcG9zaXRvcnkgd2l0aCBsYXJnZSBudW1iZXIgb2YgcmVmcyB0aGF0CisgICBwb2ludCB0byBpZGVudGljYWwgY29tbWl0cyBhcmUgb3B0aW1pemVkIGJ5IG5vdCBsaXN0aW5nIHRoZSBzYW1lIGNvbW1pdAorICAgZHVyaW5nIHRoZSBjb21tb24gYW5jZXN0b3IgbmVnb3RpYXRpb24gZXhjaGFuZ2Ugd2l0aCB0aGUgb3RoZXIgc2lkZS4KKworICogQWRkaW5nIGEgZmlsZSBsYXJnZXIgdGhhbiBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgKGRlZmF1bHRzIHRvIDEvMiBHaWcpCisgICB1c2luZyAiZ2l0IGFkZCIgd2lsbCBzZW5kIHRoZSBjb250ZW50cyBzdHJhaWdodCB0byBhIHBhY2tmaWxlIHdpdGhvdXQKKyAgIGhhdmluZyB0byBob2xkIGl0IGFuZCBpdHMgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBib3RoIGF0IHRoZSBzYW1lCisgICB0aW1lIGluIG1lbW9yeS4KKworICogUHJvY2Vzc2VzIHNwYXduZWQgYnkgIlthbGlhc10gPG5hbWU+ID0gIXByb2Nlc3MiIGluIHRoZSBjb25maWd1cmF0aW9uCisgICBjYW4gaW5zcGVjdCBHSVRfUFJFRklYIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGxlYXJuIHdoZXJlIGluIHRoZQorICAgd29ya2luZyB0cmVlIHRoZSBvcmlnaW5hbCBjb21tYW5kIHdhcyBpbnZva2VkLgorCisgKiBBIG1hZ2ljIHBhdGhzcGVjICI6LyIgdGVsbHMgYSBjb21tYW5kIHRoYXQgbGltaXRzIGl0cyBvcGVyYXRpb24gdG8KKyAgIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGVuIHJhbiBmcm9tIGEgc3ViZGlyZWN0b3J5IHRvIHdvcmsgb24gdGhlCisgICBlbnRpcmUgd29ya2luZyB0cmVlLiBJbiBnZW5lcmFsLCAiOi9wYXRoL3RvL2ZpbGUiIHdvdWxkIGJlIHJlbGF0aXZlCisgICB0byB0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlIGhpZXJhcmNoeS4KKworICAgQWZ0ZXIgImdpdCByZXNldCAtLWhhcmQ7IGVkaXQgTWFrZWZpbGU7IGNkIHQvIiwgImdpdCBhZGQgLXUiIHdvdWxkCisgICBiZSBhIG5vLW9wLCBidXQgImdpdCBhZGQgLXUgOi8iIHdvdWxkIGFkZCB0aGUgdXBkYXRlZCBjb250ZW50cyBvZgorICAgdGhlIE1ha2VmaWxlIGF0IHRoZSB0b3AgbGV2ZWwuIElmIHlvdSB3YW50IHRvIG5hbWUgYSBwYXRoIGluIHRoZQorICAgY3VycmVudCBzdWJkaXJlY3Rvcnkgd2hvc2UgdW51c3VhbCBuYW1lIGJlZ2lucyB3aXRoICI6LyIsIHlvdSBjYW4KKyAgIG5hbWUgaXQgYnkgIi4vOi90aGF0L3BhdGgiIG9yIGJ5ICJcOi90aGF0L3BhdGgiLgorCisgKiAiZ2l0IGJsYW1lIiBsZWFybmVkICItLWFiYnJldls9PG4+XSIgb3B0aW9uIHRvIGNvbnRyb2wgdGhlIG1pbmltdW0KKyAgIG51bWJlciBvZiBoZXhkaWdpdHMgc2hvd24gZm9yIGNvbW1pdCBvYmplY3QgbmFtZXMuCisKKyAqICJnaXQgYmxhbWUiIGxlYXJuZWQgIi0tbGluZS1wb3JjZWxhaW4iIHRoYXQgaXMgbGVzcyBlZmZpY2llbnQgYnV0IGlzCisgICBlYXNpZXIgdG8gcGFyc2UuCisKKyAqIEFib3J0aW5nICJnaXQgY29tbWl0IC0taW50ZXJhY3RpdmUiIGRpc2NhcmRzIHVwZGF0ZXMgdG8gdGhlIGluZGV4CisgICBtYWRlIGR1cmluZyB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbi4KKworICogImdpdCBjb21taXQiIGxlYXJuZWQgYSAiLS1wYXRjaCIgb3B0aW9uIHRvIGRpcmVjdGx5IGp1bXAgdG8gdGhlCisgICBwZXItaHVuayBzZWxlY3Rpb24gVUkgb2YgdGhlIGludGVyYWN0aXZlIG1vZGUuCisKKyAqICJnaXQgZGlmZiIgYW5kIGl0cyBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZCAtLWRpcnN0YXQ9MCB0byBzaG93CisgICBkaXJlY3RvcmllcyB0aGF0IGNvbnRyaWJ1dGUgbGVzcyB0aGFuIDAuMSUgb2YgY2hhbmdlcy4KKworICogImdpdCBkaWZmIiBhbmQgaXRzIGZhbWlseSBvZiBjb21tYW5kcyBsZWFybmVkIC0tZGlyc3RhdD1saW5lcyBtb2RlIHRvCisgICBhc3Nlc3MgZGFtYWdlIHRvIHRoZSBkaXJlY3RvcnkgYmFzZWQgb24gbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBwYXRjaAorICAgb3V0cHV0LCBub3QgYmFzZWQgb24gdGhlIHNpbWlsYXJpdHkgbnVtYmVycy4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgIi0tcXVpZXQiIG9wdGlvbiB0byBzdXBwcmVzcyB0aGUgb3V0cHV0IG9mCisgICB0aGUgbmFtZXMgb2YgZ2VuZXJhdGVkIGZpbGVzLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgcXVvdGVzIHBlb3BsZSdzIG5hbWVzIHdoZW4gaXQgaGFzIFJGQzgyMiBzcGVjaWFsCisgICBjaGFyYWN0ZXJzIGluIGl0LCBlLmcuICJKdW5pbyBDLiBIYW1hbm8iIDxqY2hAZXhhbXBsZS5jb20+LiAgRWFybGllcgorICAgaXQgd2FzIHVwIHRvIHRoZSB1c2VyIHRvIGRvIHRoaXMgd2hlbiB1c2luZyBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgY2FuIHRha2UgYW4gZW1wdHkgLS1zdWJqZWN0LXByZWZpeCBub3cuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCB0aGUgIi1QIiBvcHRpb24gdG8gdGFrZSBwY3JlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisKKyAqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBsZWFybmVkIGEgbmV3ICItLW5vdGVzIiBvcHRpb24gdG8gcmVwbGFjZSB0aGUKKyAgICItLXNob3ctbm90ZXMiIG9wdGlvbi4gIFVubGlrZSAiLS1zaG93LW5vdGVzIiwgIi0tbm90ZXM9PHJlZj4iIGRvZXMKKyAgIG5vdCBpbXBseSBzaG93aW5nIHRoZSBkZWZhdWx0IG5vdGVzLgorCisgKiBUaGV5IGFsc28gbGVhcm5lZCBhIGxvZy5hYmJyZXZDb21taXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBhdWdtZW50CisgICB0aGUgLS1hYmJyZXYtY29tbWl0IGNvbW1hbmQgbGluZSBvcHRpb24uCisKKyAqICJnaXQgbHMtcmVtb3RlIiBsZWFybmVkICItLWV4aXQtY29kZSIgb3B0aW9uIHRvIGNvbnNpZGVyIGl0IGEKKyAgIGRpZmZlcmVudCBraW5kIG9mIGVycm9yIHdoZW4gbm8gcmVtb3RlIHJlZiB0byBiZSBzaG93bi4KKworICogImdpdCBtZXJnZSIgbGVhcm5lZCAiLSIgYXMgYSBzaG9ydC1oYW5kIGZvciAidGhlIHByZXZpb3VzIGJyYW5jaCIsIGp1c3QKKyAgIGxpa2UgdGhlIHdheSAiZ2l0IGNoZWNrb3V0IC0iIHdvcmtzLgorCisgKiAiZ2l0IG1lcmdlIiB1c2VzICJtZXJnZS5mZiIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBkZWNpZGUgdG8gYWx3YXlzCisgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgKGkuZS4gLS1uby1mZiwgYWthIG1lcmdlLmZmPW5vKSwgcmVmdXNlIHRvIGNyZWF0ZQorICAgYSBtZXJnZSBjb21taXQgKGkuZS4gLS1mZi1vbmx5LCBha2EgbWVyZ2UuZmY9b25seSkuIFNldHRpbmcgbWVyZ2UuZmY9eWVzCisgICAob3Igbm90IHNldHRpbmcgaXQgYXQgYWxsKSByZXN0b3JlcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgYWxsb3dpbmcKKyAgIGZhc3QtZm9yd2FyZCB0byBoYXBwZW4gd2hlbiBwb3NzaWJsZS4KKworICogcDQtaW1wb3J0IChmcm9tIGNvbnRyaWIpIGxlYXJuZWQgYSBuZXcgb3B0aW9uIC0tcHJlc2VydmUtdXNlci4KKworICogImdpdCByZWFkLXRyZWUgLW0iIGxlYXJuZWQgIi0tZHJ5LXJ1biIgb3B0aW9uIHRoYXQgcmVwb3J0cyBpZiBhIG1lcmdlCisgICB3b3VsZCBmYWlsIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGluZGV4IG5vciB0aGUgd29ya2luZyB0cmVlLgorCisgKiAiZ2l0IHJlYmFzZSIgdGhhdCBkb2VzIG5vdCBzcGVjaWZ5IG9uIHRvcCBvZiB3aGljaCBicmFuY2ggdG8gcmViYXNlCisgICB0aGUgY3VycmVudCBicmFuY2ggbm93IHVzZXMgQHt1cHN0cmVhbX0gb2YgdGhlIGN1cnJlbnQgYnJhbmNoLgorCisgKiAiZ2l0IHJlYmFzZSIgZmluaXNoZWQgZWl0aGVyIG5vcm1hbGx5IG9yIHdpdGggLS1hYm9ydCBkaWQgbm90CisgICB1cGRhdGUgdGhlIHJlZmxvZyBmb3IgSEVBRCB0byByZWNvcmQgdGhlIGV2ZW50IHRvIGNvbWUgYmFjayB0bworICAgd2hlcmUgaXQgc3RhcnRlZCBmcm9tLgorCisgKiAiZ2l0IHJlbW90ZSBhZGQgLXQgb25seS10aGlzLWJyYW5jaCAtLW1pcnJvcj1mZXRjaCIgaXMgbm93IGFsbG93ZWQuIEVhcmxpZXIKKyAgIGEgZmV0Y2gtbW9kZSBtaXJyb3IgbWVhbnQgbWlycm9yIGV2ZXJ5dGhpbmcsIGJ1dCBub3cgaXQgb25seSBtZWFucyByZWZzIGFyZQorICAgbm90IHJlbmFtZWQuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1jb3VudCIgdXNlZCB3aXRoICItLWNoZXJyeS1tYXJrIiBjb3VudHMgdGhlIGNoZXJyeS1waWNrZWQKKyAgIGNvbW1pdHMgc2VwYXJhdGVseSwgcHJvZHVjaW5nIG1vcmUgYSB1c2VmdWwgb3V0cHV0LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGxlYXJuZWQgIi0tZm9yY2UiIG9wdGlvbiB0byBnZXQgcmlkIG9mIGxvY2FsCisgICBjaGFuZ2VzIGluIHN1Ym1vZHVsZXMgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSB1cC10by1kYXRlIHZlcnNpb24uCisKKyAqICJnaXQgc3RhdHVzIiBhbmQgZnJpZW5kcyBpZ25vcmUgLmdpdG1vZHVsZXMgZmlsZSB3aGlsZSB0aGUgZmlsZSBpcworICAgc3RpbGwgaW4gYSBjb25mbGljdGVkIHN0YXRlIGR1cmluZyBhIG1lcmdlLCB0byBhdm9pZCB1c2luZyBpbmZvcm1hdGlvbgorICAgdGhhdCBpcyBub3QgZmluYWwgYW5kIHBvc3NpYmx5IGNvcnJ1cHQgd2l0aCBjb25mbGljdCBtYXJrZXJzLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBtaW5vciBtaXNjZWxsYW5lb3VzCitjaGFuZ2VzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgaW4gMS43LjUuWCBtYWludGVuYW5jZSB0cmFjayBhcmUKK2luY2x1ZGVkIGluIHRoaXMgcmVsZWFzZS4KKworICogImdpdCBjb25maWciIHVzZWQgdG8gY2hva2Ugd2l0aCBhbiBpbnNhbmVseSBsb25nIGxpbmUuCisgICAobWVyZ2UgZWYvbWFpbnQtc3RyYnVmLWluaXQgbGF0ZXIpCisKKyAqICJnaXQgZGlmZiAtLXF1aWV0IiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIC0tZGlmZi1maWx0ZXIuCisgICAobWVyZ2UgamsvZGlmZi1ub3Qtc28tcXVpY2sgbGF0ZXIpCisKKyAqICJnaXQgc3RhdHVzIC16IiBkaWQgbm90IGRlZmF1bHQgdG8gLS1wb3JjZWxhaW4gb3V0cHV0IGZvcm1hdC4KKyAgIChtZXJnZSBiYy9tYWludC1zdGF0dXMtei10by11c2UtcG9yY2VsYWluIGxhdGVyKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5YjgzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMS50eHQKQEAgLTAsMCArMSw2MCBAQAorR2l0IHYxLjcuNy4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE9uIHNvbWUgQlNEIHN5c3RlbXMsIGFkZGluZyArcyBiaXQgb24gZGlyZWN0b3JpZXMgaXMgZGV0cmltZW50YWwKKyAgIChpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIEJTRCB0byBiZWdpbiB3aXRoKS4gImdpdCBpbml0IC0tc2hhcmVkIgorICAgaGFzIGJlZW4gdXBkYXRlZCB0byB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdpdGhvdXQgZXh0cmEgbWFrZWZpbGUKKyAgIHNldHRpbmdzIG9uIHBsYXRmb3JtcyB0aGUgTWFrZWZpbGUga25vd3MgYWJvdXQuCisKKyAqIEFmdGVyIGluY29ycmVjdGx5IHdyaXR0ZW4gdGhpcmQtcGFydHkgdG9vbHMgc3RvcmUgYSB0YWcgb2JqZWN0IGluCisgICBIRUFELCBnaXQgZGlhZ25vc2VkIGl0IGFzIGEgcmVwb3NpdG9yeSBjb3JydXB0aW9uIGFuZCByZWZ1c2VkIHRvCisgICBwcm9jZWVkIGluIG9yZGVyIHRvIGF2b2lkIHNwcmVhZGluZyB0aGUgZGFtYWdlLiBXZSBub3cgZ3JhY2VmdWxseQorICAgcmVjb3ZlciBmcm9tIHN1Y2ggYSBzaXR1YXRpb24gYnkgcHJldGVuZGluZyBhcyBpZiB0aGUgY29tbWl0IHRoYXQKKyAgIGlzIHBvaW50ZWQgYXQgYnkgdGhlIHRhZyB3ZXJlIGluIEhFQUQuCisKKyAqICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWVycm9yIiBkaWQgbm90IGJvdGhlciB0byByZXBvcnQgdGhlIGV4YWN0CisgICBsaW5lIG51bWJlciBpbiB0aGUgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VkIG5ldyBibGFuayBsaW5lcyBhdCB0aGUgZW5kCisgICBvZiB0aGUgZmlsZS4KKworICogImdpdCBhcHBseSAtLWluZGV4IiBkaWQgbm90IGNoZWNrIGNvcnJ1cHRlZCBwYXRjaC4KKworICogImdpdCBjaGVja291dCAkdHJlZSAkZGlyZWN0b3J5LyIgcmVzdXJyZWN0ZWQgcGF0aHMgbG9jYWxseSByZW1vdmVkIG9yCisgICBtb2RpZmllZCBvbmx5IGluIHRoZSB3b3JraW5nIHRyZWUgaW4gJGRpcmVjdG9yeS8gdGhhdCBkaWQgbm90IGFwcGVhcgorICAgaW4gJGRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gJHRyZWUuIFRoZXkgc2hvdWxkIGhhdmUgYmVlbiBrZXB0IGludGFjdC4KKworICogImdpdCBkaWZmICR0cmVlICRwYXRoIiB1c2VkIHRvIGFwcGx5IHRoZSBwYXRoc3BlYyBhdCB0aGUgb3V0cHV0IHN0YWdlLAorICAgcmVhZGluZyB0aGUgd2hvbGUgdHJlZSwgd2FzdGluZyByZXNvdXJjZXMuCisKKyAqIFRoZSBjb2RlIHRvIGNoZWNrIGZvciB1cGRhdGVkIHN1Ym1vZHVsZXMgZHVyaW5nIGEgImdpdCBmZXRjaCIgb2YgdGhlCisgICBzdXBlcnByb2plY3QgaGFkIGFuIHVubmVjZXNzYXJ5IHF1YWRyYXRpYyBsb29wLgorCisgKiAiZ2l0IGZldGNoIiBmcm9tIGEgbGFyZ2UgYnVuZGxlIGRpZCBub3QgZW5hYmxlIHRoZSBwcm9ncmVzcyBvdXRwdXQuCisKKyAqIFdoZW4gImdpdCBmc2NrIC0tbG9zdC1hbmQtZm91bmQiIGZvdW5kIHRoYXQgYW4gZW1wdHkgYmxvYiBvYmplY3QgaW4gdGhlCisgICBvYmplY3Qgc3RvcmUgaXMgdW5yZWFjaGFibGUsIGl0IGluY29ycmVjdGx5IHJlcG9ydGVkIGFuIGVycm9yIGFmdGVyCisgICB3cml0aW5nIHRoZSBsb3N0IGJsb2Igb3V0IHN1Y2Nlc3NmdWxseS4KKworICogImdpdCBmaWx0ZXItYnJhbmNoIiBkaWQgbm90IHJlZnJlc2ggdGhlIGluZGV4IGJlZm9yZSBjaGVja2luZyB0aGF0IHRoZQorICAgd29ya2luZyB0cmVlIHdhcyBjbGVhbi4KKworICogImdpdCBncmVwICR0cmVlIiB3aGVuIHJ1biB3aXRoIG11bHRpcGxlIHRocmVhZHMgaGFkIGFuIHVuc2FmZSBhY2Nlc3MgdG8KKyAgIHRoZSBvYmplY3QgZGF0YWJhc2UgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHByb3RlY3RlZCB3aXRoIG11dGV4LgorCisgKiBUaGUgIi0tYW5jZXN0cnktcGF0aCIgb3B0aW9uIHRvICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBtaXNiZWhhdmVkIGluIGEKKyAgIGhpc3Rvcnkgd2l0aCBjb21wbGV4IGNyaXNzLWNyb3NzIG1lcmdlcyBhbmQgc2hvd2VkIGFuIHVuaW50ZXJlc3RpbmcKKyAgIHNpZGUgaGlzdG9yeSBhcyB3ZWxsLgorCisgKiBUZXN0IHQxMzA0IGFzc3VtZWQgTE9HTkFNRSBpcyBhbHdheXMgc2V0LCB3aGljaCBtYXkgbm90IGJlIHRydWUgb24KKyAgIHNvbWUgc3lzdGVtcy4KKworICogVGVzdHMgd2l0aCAtLXZhbGdyaW5kIGZhaWxlZCB0byBmaW5kICJtZXJnZXRvb2wiIHNjcmlwdGxldHMuCisKKyAqICJnaXQgcGF0Y2gtaWQiIG1pc2NvbXB1dGVkIHRoZSBwYXRjaC1pZCBpbiBhIHBhdGNoIHRoYXQgaGFzIGEgbGluZSBsb25nZXIKKyAgIHRoYW4gMWtCLgorCisgKiBXaGVuIGFuICJleGVjIiBpbnNuIGZhaWxlZCBhZnRlciBtb2RpZnlpbmcgdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZworICAgdHJlZSBkdXJpbmcgInJlYmFzZSAtaSIsIHdlIG5vdyBjaGVjayBhbmQgd2FybiB0aGF0IHRoZSBjaGFuZ2VzIG5lZWQgdG8KKyAgIGJlIGNsZWFuZWQgdXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmJiZWYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4yLnR4dApAQCAtMCwwICsxLDQ0IEBACitHaXQgdjEuNy43LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy43LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdlIHVzZWQgdG8gZHJvcCBlcnJvciBtZXNzYWdlcyBmcm9tIGxpYmN1cmwgb24gY2VydGFpbiBraW5kcyBvZgorICAgZXJyb3JzLgorCisgKiBFcnJvciByZXBvcnQgZnJvbSBzbWFydCBIVFRQIHRyYW5zcG9ydCwgd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMKKyAgIGJyb2tlbiBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNmZXIsIHNob3dlZCBhIHVzZWxlc3MgbWVzc2FnZSBvbgorICAgYSBjb3JydXB0IHBhY2tldC4KKworICogImdpdCBmZXRjaCAtLXBydW5lIiB3YXMgdW5zYWZlIHdoZW4gdXNlZCB3aXRoIHJlZnNwZWNzIGZyb20gdGhlCisgICBjb21tYW5kIGxpbmUuCisKKyAqIFRoZSBhdHRyaWJ1dGUgbWVjaGFuaXNtIGRpZCBub3QgdXNlIGNhc2UgaW5zZW5zaXRpdmUgbWF0Y2ggd2hlbgorICAgY29yZS5pZ25vcmVjYXNlIHdhcyBzZXQuCisKKyAqICJnaXQgYmlzZWN0IiBkaWQgbm90IG5vdGljZSB3aGVuIGl0IGZhaWxlZCB0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZQorICAgdG8gdGhlIG5leHQgY29tbWl0IHRvIGJlIHRlc3RlZC4KKworICogImdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXJlZ2V4cCIgZmFpbGVkIHRvIHNlcGFyYXRlIHRoZSB2YXJpYWJsZSBuYW1lCisgICBhbmQgaXRzIHZhbHVlICJ0cnVlIiB3aGVuIHRoZSB2YXJpYWJsZSBpcyBkZWZpbmVkIHdpdGhvdXQgIj0gdHJ1ZSIuCisKKyAqICJnaXQgcmVtb3RlIHJlbmFtZSAkYSAkYiIgd2VyZSBub3QgY2FyZWZ1bCB0byBtYXRjaCB0aGUgcmVtb3RlIG5hbWUKKyAgIGFnYWluc3QgJGEgKGkuZS4gc291cmNlIHNpZGUgb2YgdGhlIHJlbW90ZSBuaWNrbmFtZSkuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBkaWQgbm90IHVzZSBpdHMgYXJndW1lbnRzIGFzIHBhdGhzcGVjLCBidXQgYXMgYSBwYXRoIHRvCisgICB0aGUgZmlsZSB0aGF0IG1heSBub3QgZXZlbiBoYXZlIGFueSBjb25mbGljdC4KKworICogImdpdCBkaWZmIC0tW251bV1zdGF0IiB1c2VkIHRvIHVzZSB0aGUgbnVtYmVyIG9mIGxpbmVzIG9mIGNvbnRleHQKKyAgIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0LCBwb3RlbnRpYWxseSBnaXZpbmcgZGlmZmVyZW50IHJlc3VsdHMgZnJvbQorICAgImdpdCBkaWZmIHwgZGlmZnN0YXQiIGFuZCBjb25mdXNpbmcgdGhlIHVzZXJzLgorCisgKiAiZ2l0IHB1bGwiIGFuZCAiZ2l0IHJlYmFzZSIgZGlkIG5vdCB3b3JrIHdlbGwgZXZlbiB3aGVuIEdJVF9XT1JLX1RSRUUgaXMKKyAgIHNldCBjb3JyZWN0bHkgd2l0aCBHSVRfRElSIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBvdXRzaWRlIHRoZSB3b3JraW5nCisgICB0cmVlLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgaG9ub3IgdGhlIGNvbmZpZ3VyZWQgaG9zdG5hbWUgd2hlbiByZXN0YXJ0aW5nCisgICB0aGUgSEVMTy9FSExPIGV4Y2hhbmdlIGFmdGVyIHN3aXRjaGluZyBUTFMgb24uCisKKyAqICJnaXR3ZWIiIHVzZWQgdG8gcHJvZHVjZSBhIG5vbi13b3JraW5nIGxpbmsgd2hpbGUgc2hvd2luZyB0aGUgY29udGVudHMKKyAgIG9mIGEgYmxvYiwgd2hlbiBKYXZhU2NyaXB0IGFjdGlvbnMgYXJlIGVuYWJsZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTMwMWYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4zLnR4dApAQCAtMCwwICsxLDE5IEBACitHaXQgdjEuNy43LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy43LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFkanVzdCB0aGUgInF1aWNrLWluc3RhbGwtZG9jIiBwcm9jZWR1cmVzIGFzIHByZWZvcm1hdHRlZAorICAgaHRtbC9tYW5wYWdlIGFyZSBubyBsb25nZXIgaW4gdGhlIHNvdXJjZSByZXBvc2l0b3J5LgorCisgKiBUaGUgbG9naWMgdG8gb3B0aW1pemUgdGhlIGxvY2FsaXR5IG9mIHRoZSBkYXRhIGluIGEgcGFjayBpbnRyb2R1Y2VkIGluCisgICAxLjcuNyB3YXMgZ3Jvc3NseSBpbmVmZmljaWVudC4KKworICogVGhlIGxvZ2ljIHRvIGZpbHRlciBvdXQgZm9ya2VkIHByb2plY3RzIGluIHRoZSBwcm9qZWN0IGxpc3QgaW4KKyAgICJnaXR3ZWIiIHdhcyBicm9rZW4gZm9yIHNvbWUgdGltZS4KKworICogImdpdCBicmFuY2ggLW0vLU0iIGFkdmVydGlzZWQgdG8gdXBkYXRlIFJFTkFNRV9SRUYgcmVmIGluIHRoZQorICAgY29tbWl0IGxvZyBtZXNzYWdlIHRoYXQgaW50cm9kdWNlZCB0aGUgZmVhdHVyZSBidXQgbm90IGFueXdoZXJlIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiwgYW5kIG5ldmVyIGRpZCB1cGRhdGUgc3VjaCBhIHJlZiBhbnl3YXkuIFRoaXMKKyAgIHVuZG9jdW1lbnRlZCBtaXNmZWF0dXJlIHRoYXQgZGlkIG5vdCBleGlzdCBoYXMgYmVlbiBleGNpc2VkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyMzQ0OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNC50eHQKQEAgLTAsMCArMSwxNCBAQAorR2l0IHYxLjcuNy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGZldyBoZWFkZXIgZGVwZW5kZW5jaWVzIHdlcmUgbWlzc2luZyBmcm9tIHRoZSBNYWtlZmlsZS4KKworICogU29tZSBuZXdlciBwYXJ0cyBvZiB0aGUgY29kZSB1c2VkIEM5OSBfX1ZBX0FSR1NfXyB3aGlsZSB3ZSBzdGlsbAorICAgdHJ5IHRvIGNhdGVyIHRvIG9sZGVyIGNvbXBpbGVycy4KKworICogImdpdCBuYW1lLXJldiAtLWFsbCIgdHJpZWQgdG8gbmFtZSBhbGwgX29iamVjdHNfLCBuYXR1cmFsbHkgZmFpbGluZyB0bworICAgZGVzY3JpYmUgbWFueSBibG9icyBhbmQgdHJlZXMsIGluc3RlYWQgb2Ygc2hvd2luZyBvbmx5IGNvbW1pdHMgYXMKKyAgIGFkdmVydGlzZWQgaW4gaXRzIGRvY3VtZW50YXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjA5MzE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy41LnR4dApAQCAtMCwwICsxLDE0IEBACitHaXQgdjEuNy43LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy43LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFmdGVyIGZldGNoaW5nIGZyb20gYSByZW1vdGUgdGhhdCBoYXMgdmVyeSBsb25nIHJlZm5hbWUsIHRoZSByZXBvcnRpbmcKKyAgIG91dHB1dCBjb3VsZCBoYXZlIGNvcnJ1cHRlZCBieSBvdmVycnVubmluZyBhIHN0YXRpYyBidWZmZXIuCisKKyAqICJnaXQgY2hlY2tvdXQiIGFuZCAiZ2l0IG1lcmdlIiB0cmVhdGVkIGluLXRyZWUgLmdpdGlnbm9yZSBhbmQgZXhjbHVkZQorICAgZmlsZSBpbiAkR0lUX0RJUi9pbmZvLyBkaXJlY3RvcnkgaW5jb25zaXN0ZW50bHkgd2hlbiBkZWNpZGluZyB3aGljaAorICAgdW50cmFja2VkIGZpbGVzIGFyZSBpZ25vcmVkIGFuZCBleHBlbmRhYmxlLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGY2MDZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy42LnR4dApAQCAtMCwwICsxLDIwIEBACitHaXQgdjEuNy43LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy43LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjb2RlIHRvIGxvb2sgdXAgYXR0cmlidXRlcyBmb3IgcGF0aHMgcmV1c2VkIGVudHJpZXMgZnJvbSBhIHdyb25nCisgICBkaXJlY3Rvcnkgd2hlbiB0d28gcGF0aHMgaW4gcXVlc3Rpb24gYXJlIGluIGFkamFjZW50IGRpcmVjdG9yaWVzIGFuZAorICAgdGhlIG5hbWUgb2YgdGhlIG9uZSBkaXJlY3RvcnkgaXMgYSBwcmVmaXggb2YgdGhlIG90aGVyLgorCisgKiBBIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBkZWVwZXIgaGllcmFyY2h5IGdpdmVuIHRvIHRoZSAiZGlmZi1pbmRleCIgY29tbWFuZCwKKyAgIGUuZy4gImdpdCBkaWZmLWluZGV4IEhFQUQgLS0gJyoudHh0JyIsIGluY29ycmVjdGx5IHJlcG9ydGVkIGFkZGl0aW9ucyBvZgorICAgbWF0Y2hpbmcgZmlsZXMgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGNoYW5nZS4KKworICogV2hlbiBwcm9kdWNpbmcgYSAidGhpbiBwYWNrIiAocHJpbWFyaWx5IHVzZWQgaW4gYnVuZGxlcyBhbmQgc21hcnQKKyAgIEhUVFAgdHJhbnNmZXJzKSBvdXQgb2YgYSBmdWxseSBwYWNrZWQgcmVwb3NpdG9yeSwgd2UgdW5uZWNlc3NhcmlseQorICAgYXZvaWRlZCBzZW5kaW5nIHJlY2VudCBvYmplY3RzIGFzIGEgZGVsdGEgYWdhaW5zdCBvYmplY3RzIHdlIGtub3cKKyAgIHRoZSBvdGhlciBzaWRlIGhhcy4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5MTE4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNy50eHQKQEAgLTAsMCArMSwxMyBAQAorR2l0IHYxLjcuNy43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBlcnJvciBtZXNzYWdlIGZyb20gJ2dpdCBidW5kbGUnIGhhZCBhbiB1bm1hdGNoZWQgc2luZ2xlIHF1b3RlIHBhaXIgaW4gaXQuCisKKyAqICdnaXQgZGlmZiAtLWhpc3RvZ3JhbScgb3B0aW9uIHdhcyBub3QgZGVzY3JpYmVkLgorCisgKiAnZ2l0IGltYXAtc2VuZCcgY2FycmllZCBhbiB1bnVzZWQgZGVhZCBjb2RlLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NTVjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LnR4dApAQCAtMCwwICsxLDEzNCBAQAorR2l0IHYxLjcuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBzY3JpcHRpbmcgcGFydCBvZiB0aGUgY29kZWJhc2UgaXMgZ2V0dGluZyBwcmVwYXJlZCBmb3IgaTE4bi9sMTBuLgorCisgKiBJbnRlcml4LCBDeWd3aW4gYW5kIE1pbml4IHBvcnRzIGdvdCB1cGRhdGVkLgorCisgKiBWYXJpb3VzIHVwZGF0ZXMgdG8gZ2l0LXA0IChpbiBjb250cmliLyksIGZhc3QtaW1wb3J0LCBhbmQgZ2l0LXN2bi4KKworICogR2l0d2ViIGxlYXJuZWQgdG8gcmVhZCBmcm9tIC9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mIHdoZW4gaXQgZXhpc3RzLAorICAgYmVmb3JlIHJlYWRpbmcgZnJvbSBnaXR3ZWJfY29uZmlnLnBlcmwgb3IgZnJvbSAvZXRjL2dpdHdlYi5jb25mCisgICAodGhpcyBsYXN0IG9uZSBpcyByZWFkIG9ubHkgd2hlbiBwZXItcmVwb3NpdG9yeSBnaXR3ZWJfY29uZmlnLnBlcmwKKyAgIGRvZXMgbm90IGV4aXN0KS4KKworICogVmFyaW91cyBjb2RlcGF0aHMgdGhhdCBpbnZva2VkIHpsaWIgZGVmbGF0ZS9pbmZsYXRlIGFzc3VtZWQgdGhhdCB0aGVzZQorICAgZnVuY3Rpb25zIGNhbiBjb21wcmVzcyBvciB1bmNvbXByZXNzIG1vcmUgdGhhbiA0R0IgZGF0YSBpbiBvbmUgY2FsbCBvbgorICAgcGxhdGZvcm1zIHdpdGggNjQtYml0IGxvbmcsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogR2l0IG5vdyByZWNvZ25pemVzIGxvb3NlIG9iamVjdHMgd3JpdHRlbiBieSBvdGhlciBpbXBsZW1lbnRhdGlvbnMgdGhhdAorICAgdXNlIGEgbm9uLXN0YW5kYXJkIHdpbmRvdyBzaXplIGZvciB6bGliIGRlZmxhdGlvbiAoZS5nLiBBZ2l0IHJ1bm5pbmcgb24KKyAgIEFuZHJvaWQgd2l0aCA0a2Igd2luZG93KS4gV2UgdXNlZCB0byByZWplY3QgYW55dGhpbmcgdGhhdCB3YXMgbm90CisgICBkZWZsYXRlZCB3aXRoIDMya2Igd2luZG93LgorCisgKiBJbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2Ugb2YgcGFnZXIgYW5kIGNvbG9yaW5nIG9mIHRoZSBvdXRwdXQgaGFzCisgICBiZWVuIGltcHJvdmVkLCBlc3BlY2lhbGx5IHdoZW4gYSBjb21tYW5kIHRoYXQgaXMgbm90IGJ1aWx0LWluIHdhcworICAgaW52b2x2ZWQuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgdG8gcGFzcyB0aGUgIi0tZXhjbHVkZT08cGF0aD4iIG9wdGlvbiB0aHJvdWdoIHRvIHVuZGVybHlpbmcKKyAgICJnaXQgYXBwbHkiLgorCisgKiBZb3UgY2FuIG5vdyBmZWVkIG1hbnkgZW1wdHkgbGluZXMgYmVmb3JlIGZlZWRpbmcgYW4gbWJveCBmaWxlIHRvCisgICAiZ2l0IGFtIi4KKworICogImdpdCBhcmNoaXZlIiBjYW4gYmUgdG9sZCB0byBwYXNzIHRoZSBvdXRwdXQgdG8gZ3ppcCBjb21wcmVzc2lvbiBhbmQKKyAgIHByb2R1Y2UgImFyY2hpdmUudGFyLmd6Ii4KKworICogImdpdCBiaXNlY3QiIGNhbiBiZSB1c2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IChwcm92aWRlZCB0aGF0IHRoZSB0ZXN0CisgICB5b3UgcGVyZm9ybSBwZXIgZWFjaCBpdGVyYXRpb24gZG9lcyBub3QgbmVlZCBhIHdvcmtpbmcgdHJlZSwgb2YKKyAgIGNvdXJzZSkuCisKKyAqIFRoZSBsZW5ndGggb2YgYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWVzIGluICJnaXQgYnJhbmNoIC12IiBvdXRwdXQKKyAgIG5vdyBob25vcnMgdGhlIGNvcmUuYWJicmV2IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgY2hlY2stYXR0ciIgY2FuIHRha2UgcmVsYXRpdmUgcGF0aHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisgKiAiZ2l0IGNoZWNrLWF0dHIiIGxlYXJuZWQgYW4gIi0tYWxsIiBvcHRpb24gdG8gbGlzdCB0aGUgYXR0cmlidXRlcyBmb3IgYQorICAgZ2l2ZW4gcGF0aC4KKworICogImdpdCBjaGVja291dCIgKGJvdGggdGhlIGNvZGUgdG8gdXBkYXRlIHRoZSBmaWxlcyB1cG9uIGNoZWNraW5nIG91dCBhCisgICBkaWZmZXJlbnQgYnJhbmNoIGFuZCB0aGUgY29kZSB0byBjaGVja291dCBhIHNwZWNpZmljIHNldCBvZiBmaWxlcykgbGVhcm5lZAorICAgdG8gc3RyZWFtIHRoZSBkYXRhIGZyb20gb2JqZWN0IHN0b3JlIHdoZW4gcG9zc2libGUsIHdpdGhvdXQgaGF2aW5nIHRvCisgICByZWFkIHRoZSBlbnRpcmUgY29udGVudHMgb2YgYSBmaWxlIGludG8gbWVtb3J5IGZpcnN0LiBBbiBlYXJsaWVyIHJvdW5kCisgICBvZiB0aGlzIGNvZGUgdGhhdCBpcyBub3QgaW4gYW55IHJlbGVhc2VkIHZlcnNpb24gaGFkIGEgbGFyZ2UgbGVhayBidXQKKyAgIG5vdyBpdCBoYXMgYmVlbiBwbHVnZ2VkLgorCisgKiAiZ2l0IGNsb25lIiBjYW4gbm93IHRha2UgYSAiLS1jb25maWcga2V5PXZhbHVlIiBvcHRpb24gdG8gc2V0IHRoZQorICAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGluaXRpYWwgY2hlY2tvdXQuCisKKyAqICJnaXQgY29tbWl0IDxwYXRocz4uLi4iIG5vdyBsZXRzIHlvdSBmZWVkIHJlbGF0aXZlIHBhdGhzcGVjcyB0aGF0CisgICByZWZlciB0byBvdXRzaWRlIHlvdXIgY3VycmVudCBzdWJkaXJlY3RvcnkuCisKKyAqICJnaXQgZGlmZiAtLXN0YXQiIGxlYXJuZWQgYSAtLXN0YXQtY291bnQgb3B0aW9uIHRvIGxpbWl0IHRoZSBvdXRwdXQgb2YKKyAgIGEgZGlmZnN0YXQgcmVwb3J0LgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgYSAiLS1oaXN0b2dyYW0iIG9wdGlvbiB0byB1c2UgYSBkaWZmZXJlbnQgZGlmZgorICAgZ2VuZXJhdGlvbiBtYWNoaW5lcnkgc3RvbGVuIGZyb20gamdpdCwgd2hpY2ggbWlnaHQgZ2l2ZSBiZXR0ZXIKKyAgIHBlcmZvcm1hbmNlLgorCisgKiAiZ2l0IGRpZmYiIGhhZCBhIHdlaXJkIHdvcnN0IGNhc2UgYmVoYXZpb3VyIHRoYXQgY2FuIGJlIHRyaWdnZXJlZAorICAgd2hlbiBjb21wYXJpbmcgZmlsZXMgd2l0aCBwb3RlbnRpYWxseSBtYW55IHBsYWNlcyB0aGF0IGNvdWxkIG1hdGNoLgorCisgKiAiZ2l0IGZldGNoIiwgImdpdCBwdXNoIiBhbmQgZnJpZW5kcyBubyBsb25nZXIgc2hvdyBjb25uZWN0aW9uCisgICBlcnJvcnMgZm9yIGFkZHJlc3NlcyB0aGF0IGNvdWxkbid0IGJlIGNvbm5lY3RlZCB0byB3aGVuIGF0IGxlYXN0IG9uZQorICAgYWRkcmVzcyBzdWNjZWVkcyAodGhpcyBpcyBhcmd1YWJseSBhIHJlZ3Jlc3Npb24gYnV0IGEgZGVsaWJlcmF0ZQorICAgb25lKS4KKworICogImdpdCBncmVwIiBsZWFybmVkICItLWJyZWFrIiBhbmQgIi0taGVhZGluZyIgb3B0aW9ucywgdG8gbGV0IHVzZXJzIG1pbWljCisgICB0aGUgb3V0cHV0IGZvcm1hdCBvZiAiYWNrIi4KKworICogImdpdCBncmVwIiBsZWFybmVkIGEgIi1XIiBvcHRpb24gdGhhdCBzaG93cyB3aWRlciBjb250ZXh0IHVzaW5nIHRoZSBzYW1lCisgICBsb2dpYyB1c2VkIGJ5ICJnaXQgZGlmZiIgdG8gZGV0ZXJtaW5lIHRoZSBodW5rIGhlYWRlci4KKworICogSW52b2tpbmcgdGhlIGxvdy1sZXZlbCAiZ2l0IGh0dHAtZmV0Y2giIHdpdGhvdXQgIi1hIiBvcHRpb24gKHdoaWNoCisgICBnaXQgaXRzZWxmIG5ldmVyIGRpZC0tLW5vcm1hbCB1c2VycyBzaG91bGQgbm90IGhhdmUgdG8gd29ycnkgYWJvdXQKKyAgIHRoaXMpIGlzIG5vdyBkZXByZWNhdGVkLgorCisgKiBUaGUgIi0tZGVjb3JhdGUiIG9wdGlvbiB0byAiZ2l0IGxvZyIgYW5kIGl0cyBmYW1pbHkgbGVhcm5lZCB0bworICAgaGlnaGxpZ2h0IGdyYWZ0ZWQgYW5kIHJlcGxhY2VkIGNvbW1pdHMuCisKKyAqICJnaXQgcmViYXNlIG1hc3RlciB0b3BjaSIgbm8gbG9uZ2VyIHNwZXdzIHVzYWdlIGhpbnRzIGFmdGVyIGdpdmluZworICAgdGhlICJmYXRhbDogbm8gc3VjaCBicmFuY2g6IHRvcGNpIiBlcnJvciBtZXNzYWdlLgorCisgKiBUaGUgcmVjdXJzaXZlIG1lcmdlIHN0cmF0ZWd5IGltcGxlbWVudGF0aW9uIGdvdCBhIGZhaXJseSBsYXJnZQorICAgZml4IGZvciBtYW55IGNvcm5lciBjYXNlcyB0aGF0IG1heSByYXJlbHkgaGFwcGVuIGluIHJlYWwgd29ybGQKKyAgIHByb2plY3RzIChpdCBoYXMgYmVlbiB2ZXJpZmllZCB0aGF0IG5vbmUgb2YgdGhlIDE2MDAwKyBtZXJnZXMgaW4KKyAgIHRoZSBMaW51eCBrZXJuZWwgaGlzdG9yeSBiYWNrIHRvIHYyLjYuMTIgaXMgYWZmZWN0ZWQgd2l0aCB0aGUKKyAgIGNvcm5lciBjYXNlIGJ1Z3MgdGhpcyB1cGRhdGUgZml4ZXMpLgorCisgKiAiZ2l0IHN0YXNoIiBsZWFybmVkIGFuICItLWluY2x1ZGUtdW50cmFja2VkIG9wdGlvbiIuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgdXNlZCB0byBzdG9wIGF0IHRoZSBmaXJzdCBlcnJvciB1cGRhdGluZyBhCisgICBzdWJtb2R1bGU7IGl0IG5vdyBnb2VzIG9uIHRvIHVwZGF0ZSBvdGhlciBzdWJtb2R1bGVzIHRoYXQgY2FuIGJlCisgICB1cGRhdGVkLCBhbmQgcmVwb3J0cyB0aGUgb25lcyB3aXRoIGVycm9ycyBhdCB0aGUgZW5kLgorCisgKiAiZ2l0IHB1c2giIGNhbiBiZSB0b2xkIHdpdGggdGhlICItLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayIgb3B0aW9uIHRvCisgICByZWZ1c2UgcHVzaGluZyBvZiB0aGUgc3VwZXJtb2R1bGUsIGlmIGFueSBvZiBpdHMgc3VibW9kdWxlcycKKyAgIGNvbW1pdHMgaGFzbid0IGJlZW4gcHVzaGVkIG91dCB0byB0aGVpciByZW1vdGVzLgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiBhbmQgImdpdCByZWNlaXZlLXBhY2siIGxlYXJuZWQgdG8gcHJldGVuZCB0aGF0IG9ubHkgYQorICAgc3Vic2V0IG9mIHRoZSByZWZzIGV4aXN0IGluIGEgcmVwb3NpdG9yeS4gVGhpcyBtYXkgaGVscCBhIHNpdGUgdG8KKyAgIHB1dCBtYW55IHRpbnkgcmVwb3NpdG9yaWVzIGludG8gb25lIHJlcG9zaXRvcnkgKHRoaXMgd291bGQgbm90IGJlCisgICB1c2VmdWwgZm9yIGxhcmdlciByZXBvc2l0b3JpZXMgYXMgcmVwYWNraW5nIHdvdWxkIGJlIHByb2JsZW1hdGljKS4KKworICogImdpdCB2ZXJpZnktcGFjayIgaGFzIGJlZW4gcmV3cml0dGVuIHRvIHVzZSB0aGUgImluZGV4LXBhY2siIG1hY2hpbmVyeQorICAgdGhhdCBpcyBtb3JlIGVmZmljaWVudCBpbiByZWFkaW5nIG9iamVjdHMgaW4gcGFja2ZpbGVzLgorCisgKiB0ZXN0IHNjcmlwdHMgZm9yIGdpdHdlYiB0cmllZCB0byBydW4gZXZlbiB3aGVuIENHSS1yZWxhdGVkIHBlcmwgbW9kdWxlcworICAgYXJlIG5vdCBpbnN0YWxsZWQ7IHRoZXkgbm93IGV4aXQgZWFybHkgd2hlbiB0aGUgbGF0dGVyIGFyZSB1bmF2YWlsYWJsZS4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgbWlub3IgbWlzY2VsbGFuZW91cworY2hhbmdlcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgZml4ZXMgaW4gdGhlIDEuNy42LlggbWFpbnRlbmFuY2UgdHJhY2sgYXJlCitpbmNsdWRlZCBpbiB0aGlzIHJlbGVhc2UuCisKKyAqICJnaXQgYnJhbmNoIC1tIiBhbmQgImdpdCBjaGVja291dCAtYiIgaW5jb3JyZWN0bHkgYWxsb3dlZCB0aGUgdGlwCisgICBvZiB0aGUgYnJhbmNoIHRoYXQgaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0IHVwZGF0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2RjOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4xLnR4dApAQCAtMCwwICsxLDM4IEBACitHaXQgdjEuNy44LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy44CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogSW4gc29tZSBjb2RlcGF0aHMgKG5vdGFibHksIGNoZWNrb3V0IGFuZCBtZXJnZSksIHRoZSBpZ25vcmUgcGF0dGVybnMKKyAgIHJlY29yZGVkIGluICRHSVRfRElSL2luZm8vZXhjbHVkZSB3ZXJlIG5vdCBob25vcmVkLiBUaGV5IG5vdyBhcmUuCisKKyAqICJnaXQgYXBwbHkgLS1jaGVjayIgZGlkIG5vdCBlcnJvciBvdXQgd2hlbiBnaXZlbiBhbiBlbXB0eSBpbnB1dAorICAgd2l0aG91dCBhbnkgcGF0Y2guCisKKyAqICJnaXQgYXJjaGl2ZSIgbWlzdGFrZW5seSBhbGxvd2VkIHJlbW90ZSBjbGllbnRzIHRvIGFzayBmb3IgY29tbWl0cworICAgdGhhdCBhcmUgbm90IGF0IHRoZSB0aXAgb2YgYW55IHJlZi4KKworICogImdpdCBjaGVja291dCIgYW5kICJnaXQgbWVyZ2UiIHRyZWF0ZWQgaW4tdHJlZSAuZ2l0aWdub3JlIGFuZCBleGNsdWRlCisgICBmaWxlIGluICRHSVRfRElSL2luZm8vIGRpcmVjdG9yeSBpbmNvbnNpc3RlbnRseSB3aGVuIGRlY2lkaW5nIHdoaWNoCisgICB1bnRyYWNrZWQgZmlsZXMgYXJlIGlnbm9yZWQgYW5kIGV4cGVuZGFibGUuCisKKyAqIExGLXRvLUNSTEYgc3RyZWFtaW5nIGZpbHRlciB1c2VkIHdoZW4gY2hlY2tpbmcgb3V0IGEgbGFyZ2UtaXNoIGJsb2IKKyAgIGZlbGwgaW50byBhbiBpbmZpbml0ZSBsb29wIHdpdGggYSByYXJlIGlucHV0LgorCisgKiBUaGUgZnVuY3Rpb24gaGVhZGVyIHBhdHRlcm4gZm9yIGZpbGVzIHdpdGggImRpZmY9Y3BwIiBhdHRyaWJ1dGUgZGlkCisgICBub3QgY29uc2lkZXIgInR5cGUgKmZ1bmNuYW1lKHR5cGUgcGFyYW0xLC4uLiIgYXMgdGhlIGJlZ2lubmluZyBvZiBhCisgICBmdW5jdGlvbi4KKworICogVGhlIGVycm9yIG1lc3NhZ2UgZnJvbSAiZ2l0IGRpZmYiIGFuZCAiZ2l0IHN0YXR1cyIgd2hlbiB0aGV5IGZhaWwKKyAgIHRvIGluc3BlY3QgY2hhbmdlcyBpbiBzdWJtb2R1bGVzIGRpZCBub3QgcmVwb3J0IHdoaWNoIHN1Ym1vZHVsZSB0aGV5CisgICBoYWQgdHJvdWJsZSB3aXRoLgorCisgKiBBZnRlciBmZXRjaGluZyBmcm9tIGEgcmVtb3RlIHRoYXQgaGFzIHZlcnkgbG9uZyByZWZuYW1lLCB0aGUgcmVwb3J0aW5nCisgICBvdXRwdXQgY291bGQgaGF2ZSBjb3JydXB0ZWQgYnkgb3ZlcnJ1bm5pbmcgYSBzdGF0aWMgYnVmZmVyLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgYXZvaWRzIGNyZWF0aW5nIGN5Y2xpYyBkZXBlbmRlbmNpZXMgYW1vbmcgZGVsdGFzCisgICB3aGVuIHNlZWluZyBhIGJyb2tlbiBwYWNrZmlsZSB0aGF0IHJlY29yZHMgdGhlIHNhbWUgb2JqZWN0IGluIGJvdGgKKyAgIHRoZSBkZWZsYXRlZCBmb3JtIGFuZCBhcyBhIGRlbHRhLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzRmNGVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4yLnR4dApAQCAtMCwwICsxLDcxIEBACitHaXQgdjEuNy44LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy44LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFBvcmNlbGFpbiBjb21tYW5kcyBsaWtlICJnaXQgcmVzZXQiIGRpZCBub3QgZGlzdGluZ3Vpc2ggZGVsZXRpb25zCisgICBhbmQgdHlwZS1jaGFuZ2VzIGZyb20gb3JkaW5hcnkgbW9kaWZpY2F0aW9uLCBhbmQgcmVwb3J0ZWQgdGhlbSB3aXRoCisgICB0aGUgc2FtZSAnTScgbW9uaWtlci4gVGhleSBub3cgdXNlICdEJyAoZm9yIGRlbGV0aW9uKSBhbmQgJ1QnIChmb3IKKyAgIHR5cGUtY2hhbmdlKSB0byBtYXRjaCAiZ2l0IHN0YXR1cyAtcyIgYW5kICJnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIi4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXJzZXIgdXNlZCBmb3Igc2l6ZXMgKGUuZy4gYmlnRmlsZVRocmVzaG9sZCkKKyAgIGRpZCBub3QgY29ycmVjdGx5IGludGVycHJldCAnZycgc3VmZml4LgorCisgKiBUaGUgcmVwbGFjZW1lbnQgaW1wbGVtZW50aW9uIGZvciBzbnByaW50ZiB1c2VkIG9uIHBsYXRmb3JtcyB3aXRoCisgICBuYXRpdmUgc25wcmludGYgdGhhdCBpcyBicm9rZW4gZGlkIG5vdCB1c2UgdmFfY29weSBjb3JyZWN0bHkuCisKKyAqIExGLXRvLUNSTEYgc3RyZWFtaW5nIGZpbHRlciByZXBsYWNlZCBhbGwgTEYgd2l0aCBDUkxGLCB3aGljaCBtaWdodAorICAgYmUgdGVjaGluaWNhbGx5IGNvcnJlY3QgYnV0IG5vdCBmcmllbmRseSB0byBwZW9wbGUgd2hvIGFyZSB0cnlpbmcKKyAgIHRvIHJlY292ZXIgZnJvbSBlYXJsaWVyIG1pc3Rha2VzIG9mIHVzaW5nIENSTEYgaW4gdGhlIHJlcG9zaXRvcnkKKyAgIGRhdGEgaW4gdGhlIGZpcnN0IHBsYWNlLiBJdCBub3cgcmVmcmFpbnMgZnJvbSBkb2luZyBzbyBmb3IgTEYgdGhhdAorICAgZm9sbG93cyBhIENSLgorCisgKiBnaXQgbmF0aXZlIGNvbm5lY3Rpb24gZ29pbmcgb3ZlciBUQ1AgKG5vdCBvdmVyIFNTSCkgZGlkIG5vdCBzZXQKKyAgIFNPX0tFRVBBTElWRSBvcHRpb24gd2hpY2ggZmFpbGVkIHRvIHJlY2VpdmUgbGluayBsYXllciBlcnJvcnMuCisKKyAqICJnaXQgYnJhbmNoIC1tIDxjdXJyZW50IGJyYW5jaD4gSEVBRCIgaXMgYW4gb2J2aW91cyBuby1vcCBidXQgd2FzIG5vdAorICAgYWxsb3dlZC4KKworICogImdpdCBjaGVja291dCAtbSIgZGlkIG5vdCByZWNyZWF0ZSB0aGUgY29uZmxpY3RlZCBzdGF0ZSBpbiBhICJib3RoCisgICBzaWRlcyBhZGRlZCwgd2l0aG91dCBhbnkgY29tbW9uIGFuY2VzdG9yIHZlcnNpb24iIGNvbmZsaWN0CisgICBzaXR1YXRpb24uCisKKyAqICJnaXQgY2hlcnJ5LXBpY2sgJGNvbW1pdCIgKG5vdCBhIHJhbmdlKSBjcmVhdGVkIGFuIHVubmVjZXNzYXJ5CisgICBzZXF1ZW5jZXIgc3RhdGUgYW5kIGludGVyZmVyZWQgd2l0aCB2YWxpZCB3b3JrZmxvdyB0byB1c2UgdGhlCisgICBjb21tYW5kIGR1cmluZyBhIHNlc3Npb24gdG8gY2hlcnJ5LXBpY2sgbXVsdGlwbGUgY29tbWl0cy4KKworICogWW91IGNvdWxkIG1ha2UgImdpdCBjb21taXQiIHNlZ2ZhdWx0IGJ5IGdpdmluZyB0aGUgIi0tbm8tbWVzc2FnZSIKKyAgIG9wdGlvbi4KKworICogImZhc3QtaW1wb3J0IiBkaWQgbm90IGNvcnJlY3RseSB1cGRhdGUgYW4gZXhpc3Rpbmcgbm90ZXMgdHJlZSwKKyAgIHBvc3NpYmx5IGNvcnJ1cHRpbmcgdGhlIGZhbi1vdXQuCisKKyAqICJnaXQgZmV0Y2gtcGFjayIgYWNjZXB0ZWQgdW5xdWFsaWZpZWQgcmVmcyB0aGF0IGRvIG5vdCBiZWdpbiB3aXRoCisgICByZWZzLyBieSBtaXN0YWtlIGFuZCBjb21wZW5zYXRlZCBpdCBieSBtYXRjaGluZyB0aGUgcmVmc3BlYyB3aXRoCisgICB0YWlsLW1hdGNoLCB3aGljaCB3YXMgZG91Ymx5IHdyb25nLiBUaGlzIGJyb2tlIGZldGNoaW5nIGZyb20gYQorICAgcmVwb3NpdG9yeSB3aXRoIGEgZnVubnkgbmFtZWQgcmVmICJyZWZzL2Zvby9yZWZzL2hlYWRzL21hc3RlciIgYW5kIGEKKyAgICdtYXN0ZXInIGJyYW5jaCB3aXRoICJnaXQgZmV0Y2gtcGFjayByZWZzL2hlYWRzL21hc3RlciIsIGFzIHRoZQorICAgY29tbWFuZCBpbmNvcnJlY3RseSBjb25zaWRlcmVkIHRoZSBmb3JtZXIgYSAibWF0Y2giLgorCisgKiAiZ2l0IGxvZyAtLWZvbGxvdyIgZGlkIG5vdCBob25vciB0aGUgcmVuYW1lIHRocmVzaG9sZCBzY29yZSBnaXZlbgorICAgd2l0aCB0aGUgLU0gb3B0aW9uIChlLmcuICItTTUwJSIpLgorCisgKiAiZ2l0IG12IiBnYXZlIHN1Ym9wdGltYWwgZXJyb3Ivd2FybmluZyBtZXNzYWdlcyB3aGVuIGl0IG92ZXJ3cml0ZXMKKyAgIHRhcmdldCBmaWxlcy4gSXQgYWxzbyBkaWQgbm90IHBheSBhdHRlbnRpb24gdG8gIi12IiBvcHRpb24uCisKKyAqIEF1dGhlbnRpY2F0ZWQgImdpdCBwdXNoIiBvdmVyIGR1bWIgSFRUUCB3ZXJlIGJyb2tlbiB3aXRoIGEgcmVjZW50CisgICBjaGFuZ2UgYW5kIGZhaWxlZCB3aXRob3V0IGFza2luZyBmb3IgcGFzc3dvcmQgd2hlbiB1c2VybmFtZSBpcworICAgZ2l2ZW4uCisKKyAqICJnaXQgcHVzaCIgdG8gYW4gZW1wdHkgcmVwb3NpdG9yeSBvdmVyIEhUVFAgd2VyZSBicm9rZW4gd2l0aCBhCisgICByZWNlbnQgY2hhbmdlIHRvIHRoZSByZWYgaGFuZGxpbmcuCisKKyAqICJnaXQgcHVzaCAtdiIgZm9yZ290IGhvdyB0byBiZSB2ZXJib3NlIGJ5IG1pc3Rha2UuIEl0IG5vdyBwcm9wZXJseQorICAgYmVjb21lcyB2ZXJib3NlIHdoZW4gYXNrZWQgdG8uCisKKyAqIFdoZW4gYSAicmV3b3JkIiBhY3Rpb24gaW4gImdpdCByZWJhc2UgLWkiIGZhaWxlZCB0byBydW4gImNvbW1pdCAtLWFtZW5kIiwKKyAgIHdlIGRpZCBub3QgZ2l2ZSB0aGUgY29udHJvbCBiYWNrIHRvIHRoZSB1c2VyIHRvIHJlc29sdmUgdGhlIHNpdHVhdGlvbiwgYW5kCisgICBpbnN0ZWFkIGtlcHQgdGhlIG9yaWdpbmFsIGNvbW1pdCBsb2cgbWVzc2FnZS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyNzE0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguMy50eHQKQEAgLTAsMCArMSwxNiBAQAorR2l0IHYxLjcuOC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBdHRlbXB0IHRvIGZldGNoIGZyb20gYW4gZW1wdHkgZmlsZSBwcmV0ZW5kaW5nIGl0IHRvIGJlIGEgYnVuZGxlIGRpZAorICAgbm90IGVycm9yIG91dCBjb3JyZWN0bHkuCisKKyAqIGdpdHdlYiBkaWQgbm90IGNvcnJlY3RseSBmYWxsIGJhY2sgdG8gY29uZmlndXJlZCAkZmFsbGJhY2tfZW5jb2RpbmcKKyAgIHRoYXQgaXMgbm90ICdsYXRpbjEnLgorCisgKiAiZ2l0IGNsb25lIC0tZGVwdGggJG4iIGRpZCBub3QgY2F0Y2ggYSBub24tbnVtYmVyIGdpdmVuIGFzICRuIGFzIGFuCisgICBlcnJvci4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlYmRiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNC50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IHYxLjcuOC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgY29kZSB0byBsb29rIHVwIGF0dHJpYnV0ZXMgZm9yIHBhdGhzIHJldXNlZCBlbnRyaWVzIGZyb20gYSB3cm9uZworICAgZGlyZWN0b3J5IHdoZW4gdHdvIHBhdGhzIGluIHF1ZXN0aW9uIGFyZSBpbiBhZGphY2VudCBkaXJlY3RvcmllcyBhbmQKKyAgIHRoZSBuYW1lIG9mIHRoZSBvbmUgZGlyZWN0b3J5IGlzIGEgcHJlZml4IG9mIHRoZSBvdGhlci4KKworICogQSB3aWxkY2FyZCB0aGF0IG1hdGNoZXMgZGVlcGVyIGhpZXJhcmNoeSBnaXZlbiB0byB0aGUgImRpZmYtaW5kZXgiIGNvbW1hbmQsCisgICBlLmcuICJnaXQgZGlmZi1pbmRleCBIRUFEIC0tICcqLnR4dCciLCBpbmNvcnJlY3RseSByZXBvcnRlZCBhZGRpdGlvbnMgb2YKKyAgIG1hdGNoaW5nIGZpbGVzIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2UuCisKKyAqIFdoZW4gcHJvZHVjaW5nIGEgInRoaW4gcGFjayIgKHByaW1hcmlseSB1c2VkIGluIGJ1bmRsZXMgYW5kIHNtYXJ0CisgICBIVFRQIHRyYW5zZmVycykgb3V0IG9mIGEgZnVsbHkgcGFja2VkIHJlcG9zaXRvcnksIHdlIHVubmVjZXNzYXJpbHkKKyAgIGF2b2lkZWQgc2VuZGluZyByZWNlbnQgb2JqZWN0cyBhcyBhIGRlbHRhIGFnYWluc3Qgb2JqZWN0cyB3ZSBrbm93CisgICB0aGUgb3RoZXIgc2lkZSBoYXMuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCBwcm9wZXJseSB0cmVhdCBzZW5kZW1haWwubXVsdGllZGl0IGFzIGEKKyAgIGJvb2xlYW4gKGUuZy4gc2V0dGluZyBpdCB0byAiZmFsc2UiIGRpZCBub3QgdHVybiBpdCBvZmYpLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTFmZDJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC41LnR4dApAQCAtMCwwICsxLDE5IEBACitHaXQgdjEuNy44LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy44LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIERlcGVuZGVuY3kgb24gb3VyIHRocmVhZC11dGlscy5oIGhlYWRlciBmaWxlIHdhcyBtaXNzaW5nIGZvcgorICAgb2JqZWN0cyB0aGF0IGRlcGVuZCBvbiBpdCBpbiB0aGUgTWFrZWZpbGUuCisKKyAqICJnaXQgYW0iIHdoZW4gZmVkIGFuIGVtcHR5IGZpbGUgZGlkIG5vdCBjb3JyZWN0bHkgZmluaXNoIHJlYWRpbmcgaXQKKyAgIHdoZW4gaXQgYXR0ZW1wdHMgdG8gZ3Vlc3MgdGhlIGlucHV0IGZvcm1hdC4KKworICogImdpdCBncmVwIC1QIiAod2hlbiBQQ1JFIGlzIGVuYWJsZWQgaW4gdGhlIGJ1aWxkKSBkaWQgbm90IG1hdGNoIHRoZQorICAgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZSBsaW5lIGNvcnJlY3RseSB3aXRoIF4gYW5kICQuCisKKyAqICJnaXQgcmViYXNlIC1tIiB0cmllZCB0byBydW4gImdpdCBub3RlcyBjb3B5IiBuZWVkbGVzc2x5IHdoZW4KKyAgIG5vdGhpbmcgd2FzIHJld3JpdHRlbi4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliZjJiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNi50eHQKQEAgLTAsMCArMSwyMiBAQAorR2l0IHYxLjcuOC42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOC41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBlcnJvciBtZXNzYWdlIGZyb20gJ2dpdCBidW5kbGUnIGhhZCBhbiB1bm1hdGNoZWQgc2luZ2xlIHF1b3RlIHBhaXIgaW4gaXQuCisKKyAqICdnaXQgZGlmZiAtLWhpc3RvZ3JhbScgb3B0aW9uIHdhcyBub3QgZGVzY3JpYmVkLgorCisgKiBEb2N1bWVudGF0aW9uIGZvciAnZ2l0IHJldi1saXN0JyBoYWQgbWlub3IgZm9ybWF0dGluZyBlcnJvcnMuCisKKyAqICdnaXQgaW1hcC1zZW5kJyBjYXJyaWVkIGFuIHVudXNlZCBkZWFkIGNvZGUuCisKKyAqIFRoZSB3YXkgJ2dpdCBmZXRjaCcgaW1wbGVtZW50ZWQgaXRzIGNvbm5lY3Rpdml0eSBjaGVjayBvdmVyCisgICByZWNlaXZlZCBvYmplY3RzIHdhcyBvdmVybHkgcGVzc2ltaXN0aWMsIGFuZCB3YXN0ZWQgYSBsb3Qgb2YKKyAgIGN5Y2xlcy4KKworICogVmFyaW91cyBtaW5vciBiYWNrcG9ydHMgb2YgZml4ZXMgZnJvbSB0aGUgJ21hc3RlcicgYW5kIHRoZSAnbWFpbnQnCisgICBicmFuY2guCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjgudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkOTBiYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjgudHh0CkBAIC0wLDAgKzEsMTYxIEBACitHaXQgdjEuNy44IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuNworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogU29tZSBnaXQtc3ZuLCBnaXQtZ3VpLCBnaXQtcDQgKGluIGNvbnRyaWIpIGFuZCBtc3lzZ2l0IHVwZGF0ZXMuCisKKyAqIFVwZGF0ZXMgdG8gYmFzaCBjb21wbGV0aW9uIHNjcmlwdHMuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgaGFzIGJlZW4gdGF1Z2h0IHRvIHRha2UgYWR2YW50YWdlIG9mIGNvbXB1dGVkCisgICBkZXBlbmRlbmN5IGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY29tcGxpZXIgc3VwcG9ydHMgaXQuCisKKyAqIFRoZSBkYXRlIHBhcnNlciBub3cgYWNjZXB0cyB0aW1lem9uZSBkZXNpZ25hdG9ycyB0aGF0IGxhY2sgbWludXRlcworICAgcGFydCBhbmQgYWxzbyBoYXMgYSBjb2xvbiBiZXR3ZWVuICJoaDptbSIuCisKKyAqIFRoZSBjb250ZW50cyBvZiB0aGUgL2V0Yy9tYWlsbmFtZSBmaWxlLCBpZiBleGlzdHMsIGlzIHVzZWQgYXMgdGhlCisgICBkZWZhdWx0IHZhbHVlIG9mIHRoZSBob3N0bmFtZSBwYXJ0IG9mIHRoZSBjb21taXR0ZXIvYXV0aG9yIGUtbWFpbC4KKworICogImdpdCBhbSIgbGVhcm5lZCBob3cgdG8gcmVhZCBmcm9tIHBhdGNoZXMgZ2VuZXJhdGVkIGJ5IEhnLgorCisgKiAiZ2l0IGFyY2hpdmUiIHRhbGtpbmcgd2l0aCBhIHJlbW90ZSByZXBvc2l0b3J5IGNhbiByZXBvcnQgZXJyb3JzCisgICBmcm9tIHRoZSByZW1vdGUgc2lkZSBpbiBhIG1vcmUgaW5mb3JtYXRpdmUgd2F5LgorCisgKiAiZ2l0IGJyYW5jaCIgbGVhcm5lZCBhbiBleHBsaWNpdCAtLWxpc3Qgb3B0aW9uIHRvIGFzayBmb3IgYnJhbmNoZXMKKyAgIGxpc3RlZCwgb3B0aW9uYWxseSB3aXRoIGEgZ2xvYiBtYXRjaGluZyBwYXR0ZXJuIHRvIGxpbWl0IGl0cyBvdXRwdXQuCisKKyAqICJnaXQgY2hlY2stYXR0ciIgbGVhcm5lZCAiLS1jYWNoZWQiIG9wdGlvbiB0byBsb29rIGF0IC5naXRhdHRyaWJ1dGVzCisgICBmaWxlcyBmcm9tIHRoZSBpbmRleCwgbm90IGZyb20gdGhlIHdvcmtpbmcgdHJlZS4KKworICogVmFyaWFudHMgb2YgImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IiB0aGF0IHRha2UgbXVsdGlwbGUKKyAgIGNvbW1pdHMgbGVhcm5lZCB0byAiLS1jb250aW51ZSIgYW5kICItLWFib3J0Ii4KKworICogImdpdCBkYWVtb24iIGdpdmVzIG1vcmUgaHVtYW4gcmVhZGJsZSBlcnJvciBtZXNzYWdlcyB0byBjbGllbnRzCisgICB1c2luZyBFUlIgcGFja2V0cyB3aGVuIGFwcHJvcHJpYXRlLgorCisgKiBFcnJvcnMgYXQgdGhlIG5ldHdvcmsgbGF5ZXIgaXMgbG9nZ2VkIGJ5ICJnaXQgZGFlbW9uIi4KKworICogImdpdCBkaWZmIiBsZWFybmVkICItLW1pbmltYWwiIG9wdGlvbiB0byBzcGVuZCBleHRyYSBjeWNsZXMgdG8gY29tZQorICAgdXAgd2l0aCBhIG1pbmltYWwgcGF0Y2ggb3V0cHV0LgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgIi0tZnVuY3Rpb24tY29udGV4dCIgb3B0aW9uIHRvIHNob3cgdGhlIHdob2xlCisgICBmdW5jdGlvbiBhcyBjb250ZXh0IHRoYXQgd2FzIGFmZmVjdGVkIGJ5IGEgY2hhbmdlLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBjYW4gYmUgdG9sZCB0byBza2lwIGxhdW5jaGluZyB0aGUgdG9vbCBmb3IgYSBwYXRoIGJ5CisgICBhbnN3ZXJpbmcgJ24nIHRvIGl0cyBwcm9tcHQuCisKKyAqICJnaXQgZmV0Y2giIGxlYXJuZWQgdG8gaG9ub3IgdHJhbnNmZXIuZnNja29iamVjdHMgY29uZmlndXJhdGlvbiB0bworICAgdmFsaWRhdGUgdGhlIG9iamVjdHMgdGhhdCB3ZXJlIHJlY2VpdmVkIGZyb20gdGhlIG90aGVyIGVuZCwganVzdCBsaWtlCisgICAiZ2l0IHJlY2VpdmUtcGFjayIgKHRoZSByZWNlaXZpbmcgZW5kIG9mICJnaXQgcHVzaCIpIGRvZXMuCisKKyAqICJnaXQgZmV0Y2giIG1ha2VzIHN1cmUgdGhhdCB0aGUgc2V0IG9mIG9iamVjdHMgaXQgcmVjZWl2ZWQgZnJvbSB0aGUKKyAgIG90aGVyIGVuZCBhY3R1YWxseSBjb21wbGV0ZXMgdGhlIGhpc3RvcnkgYmVmb3JlIHVwZGF0aW5nIHRoZSByZWZzLgorICAgImdpdCByZWNlaXZlLXBhY2siICh0aGUgcmVjZWl2aW5nIGVuZCBvZiAiZ2l0IHB1c2giKSBsZWFybmVkIHRvIGRvIHRoZQorICAgc2FtZS4KKworICogImdpdCBmZXRjaCIgbGVhcm5lZCB0aGF0IGZldGNoaW5nL2Nsb25pbmcgZnJvbSBhIHJlZ3VsYXIgZmlsZSBvbiB0aGUKKyAgIGZpbGVzeXN0ZW0gaXMgbm90IG5lY2Vzc2FyaWx5IGEgcmVxdWVzdCB0byB1bnBhY2sgYSBidW5kbGUgZmlsZTsgdGhlCisgICBmaWxlIGNvdWxkIGJlICIuZ2l0IiB3aXRoICJnaXRkaXI6IDxwYXRoPiIgaW4gaXQuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiBsZWFybmVkICIlKGNvbnRlbnRzOnN1YmplY3QpIiwgIiUoY29udGVudHM6Ym9keSkiCisgICBhbmQgIiUoY29udGVudHM6c2lnbmF0dXJlKSIuIFRoZSBsYXN0IG9uZSBpcyB1c2VmdWwgZm9yIHNpZ25lZCB0YWdzLgorCisgKiAiZ2l0IGdyZXAiIHVzZWQgdG8gaW5jb3JyZWN0bHkgcGF5IGF0dGVudGlvbiB0byAuZ2l0aWdub3JlIGZpbGVzCisgICBzY2F0dGVyZWQgaW4gdGhlIGRpcmVjdG9yeSBpdCB3YXMgd29ya2luZyBpbiBldmVuIHdoZW4gIi0tbm8taW5kZXgiCisgICBvcHRpb24gd2FzIHVzZWQuIEl0IG5vIGxvbmdlciBkb2VzIHRoaXMuIFRoZSAiLS1leGNsdWRlLXN0YW5kYXJkIgorICAgb3B0aW9uIG5lZWRzIHRvIGJlIGdpdmVuIHRvIGV4cGxpY2l0bHkgYWN0aXZhdGUgdGhlIGlnbm9yZQorICAgbWVjaGFuaXNtLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgIi0tdW50cmFja2VkIiBvcHRpb24sIHdoZXJlIGdpdmVuIHBhdHRlcm5zIGFyZQorICAgIHNlYXJjaGVkIGluIHVudHJhY2tlZCAoYnV0IG5vdCBpZ25vcmVkKSBmaWxlcyBhcyB3ZWxsIGFzIHRyYWNrZWQKKyAgICBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLCBzbyB0aGF0IG1hdGNoZXMgaW4gbmV3IGJ1dCBub3QgeWV0CisgICAgYWRkZWQgZmlsZXMgZG8gbm90IGdldCBtaXNzZWQuCisKKyAqIFRoZSByZWN1cnNpdmUgbWVyZ2UgYmFja2VuZCBubyBsb25nZXIgbG9va3MgZm9yIG1lYW5pbmdsZXNzCisgICBleGlzdGluZyBtZXJnZXMgaW4gc3VibW9kdWxlcyB1bmxlc3MgaW4gdGhlIG91dGVybW9zdCBtZXJnZS4KKworICogImdpdCBsb2ciIGFuZCBmcmllbmRzIGxlYXJuZWQgIi0tY2hpbGRyZW4iIG9wdGlvbi4KKworICogImdpdCBscy1yZW1vdGUiIGxlYXJuZWQgdG8gcmVzcG9uZCB0byAiLWgiKGVscCkgcmVxdWVzdHMuCisKKyAqICJtZWRpYXdpa2kiIHJlbW90ZSBoZWxwZXIgY2FuIGludGVyYWN0IHdpdGggKHN1cnByaXNlISkgTWVkaWFXaWtpCisgICB3aXRoICJnaXQgZmV0Y2giICYgImdpdCBwdXNoIi4KKworICogImdpdCBtZXJnZSIgbGVhcm5lZCB0aGUgIi0tZWRpdCIgb3B0aW9uIHRvIGFsbG93IHVzZXJzIHRvIGVkaXQgdGhlCisgICBtZXJnZSBjb21taXQgbG9nIG1lc3NhZ2UuCisKKyAqICJnaXQgcmViYXNlIC1pIiBjYW4gYmUgdG9sZCB0byB1c2Ugc3BlY2lhbCBwdXJwb3NlIGVkaXRvciBzdWl0YWJsZQorICAgb25seSBmb3IgaXRzIGluc24gc2hlZXQgdmlhIHNlcXVlbmNlLmVkaXRvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgdG8gcmVzcG9uZCB0byAiLWgiKGVscCkgcmVxdWVzdHMuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgYWxsb3dzIHRoZSB2YWx1ZSBnaXZlbiB0byBzZW5kZW1haWwuYWxpYXNmaWxlIHRvIGJlZ2luCisgICB3aXRoICJ+LyIgdG8gcmVmZXIgdG8gdGhlICRIT01FIGRpcmVjdG9yeS4KKworICogImdpdCBzZW5kLWVtYWlsIiBmb3JjZXMgdXNlIG9mIEF1dGhlbjo6U0FTTDo6UGVybCB0byB3b3JrIGFyb3VuZAorICAgaXNzdWVzIGJldHdlZW4gQXV0aGVuOjpTQVNMOjpDeXJ1cyBhbmQgQVVUSCBQTEFJTi9MT0dJTi4KKworICogImdpdCBzdGFzaCIgbGVhcm5lZCAiLS1pbmNsdWRlLXVudHJhY2tlZCIgb3B0aW9uIHRvIHN0YXNoIGF3YXkKKyAgIHVudHJhY2tlZC9pZ25vcmVkIGNydWZ0IGZyb20gdGhlIHdvcmtpbmcgdHJlZS4KKworICogImdpdCBzdWJtb2R1bGUgY2xvbmUiIGRvZXMgbm90IGxlYWsgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgVUkKKyAgIGxldmVsIHVubmVjZXNzYXJpbHkgYW55bW9yZS4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBsZWFybmVkIHRvIGhvbm9yICJub25lIiBhcyB0aGUgdmFsdWUgZm9yCisgICBzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZSB0byBzcGVjaWZ5IHRoYXQgdGhlIG5hbWVkIHN1Ym1vZHVsZSBzaG91bGQKKyAgIG5vdCBiZSBjaGVja2VkIG91dCBieSBkZWZhdWx0LgorCisgKiBXaGVuIHBvcHVsYXRpbmcgYSBuZXcgc3VibW9kdWxlIGRpcmVjdG9yeSB3aXRoICJnaXQgc3VibW9kdWxlIGluaXQiLAorICAgdGhlICRHSVRfRElSIG1ldGFpbmZvcm1hdGlvbiBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZXMgaXMgY3JlYXRlZCBpbnNpZGUKKyAgICRHSVRfRElSL21vZHVsZXMvPG5hbWU+LyBkaXJlY3Rvcnkgb2YgdGhlIHN1cGVycHJvamVjdCBhbmQgcmVmZXJlbmNlZAorICAgdmlhIHRoZSBnaXRmaWxlIG1lY2hhbmlzbS4gVGhpcyBpcyB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHN3aXRjaAorICAgYmV0d2VlbiBjb21taXRzIGluIHRoZSBzdXBlcnByb2plY3QgdGhhdCBoYXMgYW5kIGRvZXMgbm90IGhhdmUgdGhlCisgICBzdWJtb2R1bGUgaW4gdGhlIHRyZWUgd2l0aG91dCByZS1jbG9uaW5nLgorCisgKiAiZ2l0d2ViIiBsZWFrZWQgdW5lc2NhcGVkIGNvbnRyb2wgY2hhcmFjdGVycyBmcm9tIHN5bnRheCBoaWxpdGVyCisgICBvdXRwdXRzLgorCisgKiAiZ2l0d2ViIiBjYW4gYmUgdG9sZCB0byBnaXZlIGN1c3RvbSBzdHJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgSFRNTAorICAgSEVBRCBlbGVtZW50LgorCisgKiAiZ2l0d2ViIiBub3cgaGFzIGl0cyBvd24gbWFudWFsIHBhZ2VzLgorCisKK0Fsc28gY29udGFpbnMgb3RoZXIgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBtaW5vciBjb2RlIGNsZWFudXBzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuNworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCBmaXhlcyBpbiB0aGUgMS43LjcuWCBtYWludGVuYW5jZSB0cmFjayBhcmUKK2luY2x1ZGVkIGluIHRoaXMgcmVsZWFzZS4KKworICogSFRUUCB0cmFuc3BvcnQgZGlkIG5vdCB1c2UgcHVzaHVybCBjb3JyZWN0bHksIGFuZCBhbHNvIGRpZCBub3QgdGVsbAorICAgd2hhdCBob3N0IGl0IGlzIHRyeWluZyB0byBhdXRoZW50aWNhdGUgd2l0aCB3aGVuIGFza2luZyBmb3IKKyAgIGNyZWRlbnRpYWxzLgorICAgKG1lcmdlIGRlYmE0OTMgamsvaHR0cC1hdXRoIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBibGFtZSIgd2FzIGFib3J0ZWQgaWYgc3RhcnRlZCBmcm9tIGFuIHVuY29tbWl0dGVkIGNvbnRlbnQgYW5kCisgICB0aGUgcGF0aCBoYWQgdGhlIHRleHRjb252IGZpbHRlciBpbiBlZmZlY3QuCisgICAobWVyZ2UgODUxODA4OCBzcy9ibGFtZS10ZXh0Y29udi1mYWtlLXdvcmtpbmctdHJlZSBsYXRlciB0byBtYWludCkuCisKKyAqIEFkZGluZyBtYW55IHJlZnMgdG8gdGhlIGxvY2FsIHJlcG9zaXRvcnkgaW4gb25lIGdvIChlLmcuICJnaXQgZmV0Y2giCisgICB0aGF0IGZldGNoZXMgbWFueSB0YWdzKSBhbmQgbG9va2luZyB1cCBhIHJlZiBieSBuYW1lIGluIGEgcmVwb3NpdG9yeQorICAgd2l0aCB0b28gbWFueSByZWZzIHdlcmUgdW5uZWNlc3NhcmlseSBzbG93LgorICAgKG1lcmdlIDE3ZDY4YTU0ZCBqcC9nZXQtcmVmLWRpci11bnNvcnRlZCBsYXRlciB0byBtYWludCkuCisKKyAqIFJlcG9ydCBmcm9tICJnaXQgY29tbWl0IiBvbiB1bnRyYWNrZWQgZmlsZXMgd2FzIGNvbmZ1c2VkIHVuZGVyCisgICBjb3JlLmlnbm9yZWNhc2Ugb3B0aW9uLgorICAgKG1lcmdlIDM5NWM3MzU2IGprL25hbWUtaGFzaC1kaXJlbnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1lcmdlIiBkaWQgbm90IHVuZGVyc3RhbmQgIjovPHBhdHRlcm4+IiBhcyBhIHdheSB0byBuYW1lIGEgY29tbWl0LgorCisgIiAiZ2l0IHB1c2giIG9uIHRoZSByZWNlaXZpbmcgZW5kIHVzZWQgdG8gY2FsbCBwb3N0LXJlY2VpdmUgYW5kIHBvc3QtdXBkYXRlCisgICBob29rcyBmb3IgYXR0ZW1wdGVkIHJlbW92YWwgb2Ygbm9uLWV4aXN0aW5nIHJlZnMuCisgICAobWVyZ2UgMTYwYjgxZWQgcGgvcHVzaC10by1kZWxldGUtbm90aGluZyBsYXRlciB0byBtYWludCkuCisKKyAqIEhlbHAgdGV4dCBmb3IgImdpdCByZW1vdGUgc2V0LXVybCIgYW5kICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyIKKyAgIHdlcmUgbWlzc3BlbGxlZC4KKyAgIChtZXJnZSBjNDk5MDRlIGZjL3JlbW90ZS1zZXR1cmwtdXNhZ2UtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2NTZjZGYwIGpjL3JlbW90ZS1zZXRicmFuY2hlcy11c2FnZS1maXggbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1NzE4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMS50eHQKQEAgLTAsMCArMSw2MyBAQAorR2l0IHYxLjcuOS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBtYWtlZmlsZSBhbGxvd2VkIGVudmlyb25tZW50IHZhcmlhYmxlIFggc2VlcCBpbnRvIGl0IHJlc3VsdCBpbgorICAgY29tbWFuZCBuYW1lcyBzdWZmaXhlZCB3aXRoIHVubmVjZXNzYXJ5IHN0cmluZ3MuCisKKyAqIFRoZSBzZXQgb2YgaW5jbHVkZWQgaGVhZGVyIGZpbGVzIGluIGNvbXBhdC9pbmV0LXtudG9wLHB0b259CisgICB3cmFwcGVycyB3YXMgdXBkYXRlZCBmb3IgV2luZG93cyBzb21lIHRpbWUgYWdvLCBidXQgaW4gYSB3YXkgdGhhdAorICAgYnJva2UgU29sYXJpcyBidWlsZC4KKworICogcnBtYnVpbGQgbm90aWNlZCBhbiB1bnBhY2thZ2VkIGJ1dCBpbnN0YWxsZWQgKi5tbyBmaWxlIGFuZCBmYWlsZWQuCisKKyAqIFN1YnByb2Nlc3NlcyBzcGF3bmVkIGZyb20gdmFyaW91cyBnaXQgcHJvZ3JhbXMgd2VyZSBvZnRlbiBsZWZ0IHJ1bm5pbmcKKyAgIHRvIGNvbXBsZXRpb24gZXZlbiB3aGVuIHRoZSB0b3AtbGV2ZWwgcHJvY2VzcyB3YXMga2lsbGVkLgorCisgKiAiZ2l0IGFkZCAtZSIgbGVhcm5lZCBub3QgdG8gc2hvdyBhIGRpZmYgZm9yIGFuIG90aGVyd2lzZSB1bm1vZGlmaWVkCisgICBzdWJtb2R1bGUgdGhhdCBvbmx5IGhhcyB1bmNvbW1pdHRlZCBsb2NhbCBjaGFuZ2VzIGluIHRoZSBwYXRjaAorICAgcHJlcGFyZWQgYnkgZm9yIHRoZSB1c2VyIHRvIGVkaXQuCisKKyAqIFR5cG8gaW4gImdpdCBicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uIG15LXRwb2ljIiB3YXMgbm90IGRpYWdub3NlZC4KKworICogVXNpbmcgImdpdCBncmVwIC1sLy1MIiB0b2dldGhlciB3aXRoIG9wdGlvbnMgLVcgb3IgLS1icmVhayBtYXkgbm90CisgICBtYWtlIG11Y2ggc2Vuc2UgYXMgdGhlIG91dHB1dCBpcyB0byBvbmx5IGNvdW50IHRoZSBudW1iZXIgb2YgaGl0cworICAgYW5kIHRoZXJlIGlzIG5vIHBsYWNlIGZvciBmaWxlIGJyZWFrcywgYnV0IHRoZSBsYXR0ZXIgb3B0aW9ucyBtYWRlCisgICAiLWwvLUwiIHRvIG1pc2NvdW50IHRoZSBoaXRzLgorCisgKiAiZ2l0IGxvZyAtLWZpcnN0LXBhcmVudCAkcGF0aHNwZWMiIGRpZCBub3Qgc3RheSBvbiB0aGUgZmlyc3QgcGFyZW50CisgICBjaGFpbiBhbmQgdmVlcmVkIGludG8gc2lkZSBicmFuY2ggZnJvbSB3aGljaCB0aGUgd2hvbGUgY2hhbmdlIHRvIHRoZQorICAgc3BlY2lmaWVkIHBhdGhzIGNhbWUuCisKKyAqICJnaXQgbWVyZ2UgLS1uby1lZGl0ICR0YWciIGZhaWxlZCB0byBob25vciB0aGUgLS1uby1lZGl0IG9wdGlvbi4KKworICogImdpdCBtZXJnZSAtLWZmLW9ubHkgJHRhZyIgZmFpbGVkIGJlY2F1c2UgaXQgY2Fubm90IHJlY29yZCB0aGUKKyAgIHJlcXVpcmVkIG1lcmdldGFnIHdpdGhvdXQgY3JlYXRpbmcgYSBtZXJnZSwgYnV0IHRoaXMgaXMgc28gY29tbW9uCisgICBvcGVyYXRpb24gZm9yIGJyYW5jaCB0aGF0IGlzIHVzZWQgX29ubHlfIHRvIGZvbGxvdyB0aGUgdXBzdHJlYW0sIHNvCisgICBpdCB3YXMgY2hhbmdlZCB0byBhbGxvdyBmYXN0LWZvcndhcmRpbmcgd2l0aG91dCByZWNvcmRpbmcgdGhlIG1lcmdldGFnLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbm93IGdpdmVzIGFuIGVtcHR5IGZpbGUgYXMgdGhlIGNvbW1vbiBiYXNlIHZlcnNpb24KKyAgIHRvIHRoZSBiYWNrZW5kIHdoZW4gZGVhbGluZyB3aXRoIHRoZSAiYm90aCBzaWRlcyBhZGRlZCwgZGlmZmVyZW50bHkiCisgICBjYXNlLgorCisgKiAiZ2l0IHB1c2ggLXEiIHdhcyBub3Qgc3VmZmljaWVudGx5IHF1aWV0LgorCisgKiBXaGVuICJnaXQgcHVzaCIgZmFpbHMgdG8gdXBkYXRlIGFueSByZWZzLCB0aGUgY2xpZW50IHNpZGUgZGlkIG5vdAorICAgcmVwb3J0IGFuIGVycm9yIGNvcnJlY3RseSB0byB0aGUgZW5kIHVzZXIuCisKKyAqICJyZWJhc2UiIGFuZCAiY29tbWl0IC0tYW1lbmQiIGZhaWxlZCB0byB3b3JrIG9uIGNvbW1pdHMgd2l0aCBhbmNpZW50CisgICB0aW1lc3RhbXBzIG5lYXIgeWVhciAxOTcwLgorCisgKiBXaGVuIGFza2luZyBmb3IgYSB0YWcgdG8gYmUgcHVsbGVkLCAicmVxdWVzdC1wdWxsIiBkaWQgbm90IHNob3cgdGhlCisgICBuYW1lIG9mIHRoZSB0YWcgcHJlZml4ZWQgd2l0aCAidGFncy8iLCB3aGljaCB3b3VsZCBoYXZlIGhlbHBlZCBvbGRlcgorICAgY2xpZW50cy4KKworICogImdpdCBzdWJtb2R1bGUgYWRkICRwYXRoIiBmb3Jnb3QgdG8gcmVjb21wdXRlIHRoZSBuYW1lIHRvIGJlIHN0b3JlZAorICAgaW4gLmdpdG1vZHVsZXMgd2hlbiB0aGUgc3VibW9kdWxlIGF0ICRwYXRoIHdhcyBvbmNlIGFkZGVkIHRvIHRoZQorICAgc3VwZXJwcm9qZWN0IGFuZCBhbHJlYWR5IGluaXRpYWxpemVkLgorCisgKiBNYW55IHNtYWxsIGNvcm5lciBjYXNlIGJ1Z3Mgb24gImdpdCB0YWcgLW4iIHdhcyBjb3JyZWN0ZWQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDBkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjIudHh0CkBAIC0wLDAgKzEsNjkgQEAKK0dpdCB2MS43LjkuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjkuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQmFzaCBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGRpZCBub3QgbGlrZSBhIHBhdHRlcm4gdGhhdAorICAgYmVnaW5zIHdpdGggYSBkYXNoIHRvIGJlIHBhc3NlZCB0byBfX2dpdF9wczEgaGVscGVyIGZ1bmN0aW9uLgorCisgKiBBZGFwdGF0aW9uIG9mIHRoZSBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgZm9yIHpzaAorICAgaW5jb3JyZWN0bHkgbGlzdGVkIGFsbCBzdWJjb21tYW5kcyB3aGVuICJnaXQgPFRBQj48VEFCPiIgd2FzIGdpdmVuCisgICB0byBhc2sgZm9yIGxpc3Qgb2YgcG9yY2VsYWluIHN1YmNvbW1hbmRzLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGZvciBwcm9maWxlLWRpcmVjdGVkIG9wdGltaXplZCBiaW5hcnkgd2FzIG5vdAorICAgd29ya2luZyB2ZXJ5IHdlbGwuCisKKyAqIFNvbWUgc3lzdGVtcyBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayAtbGNoYXJzZXQgdG8gZ2V0IGxvY2FsZV9jaGFyc2V0KCkuCisKKyAqIHQ1NTQxIGlnbm9yZWQgdXNlci1zdXBwbGllZCBwb3J0IG51bWJlciB1c2VkIGZvciBIVFRQIHNlcnZlciB0ZXN0aW5nLgorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBlbWl0dGVkIHdoZW4gd2Ugc2VlIGFuIGVtcHR5IGxvb3NlIG9iamVjdCB3YXMKKyAgIG5vdCBwaHJhc2VkIGNvcnJlY3RseS4KKworICogVGhlIGNvZGUgdG8gYXNrIGZvciBwYXNzd29yZCBkaWQgbm90IGZhbGwgYmFjayB0byB0aGUgdGVybWluYWwKKyAgIGlucHV0IHdoZW4gR0lUX0FTS1BBU1MgaXMgc2V0IGJ1dCBkb2VzIG5vdCB3b3JrIChlLmcuIGxhY2sgb2YgWAorICAgd2l0aCBHVUkgYXNrcGFzcyBoZWxwZXIpLgorCisgKiBXZSBmYWlsZWQgdG8gZ2l2ZSB0aGUgdHJ1ZSB0ZXJtaW5hbCB3aWR0aCB0byBhbnkgc3ViY29tbWFuZCB3aGVuCisgICB0aGV5IGFyZSBpbnZva2VkIHdpdGggdGhlIHBhZ2VyLCBpLmUuICJnaXQgLXAgY21kIi4KKworICogbWFwX3VzZXIoKSB3YXMgbm90IHJld3JpdGluZyBpdHMgb3V0cHV0IGNvcnJlY3RseSwgd2hpY2ggcmVzdWx0ZWQKKyAgIGluIHRoZSB1c2VyIHZpc2libGUgc3ltcHRvbSB0aGF0ICJnaXQgYmxhbWUgLWUiIHNvbWV0aW1lcyBzaG93ZWQKKyAgIGV4Y2VzcyAnPicgYXQgdGhlIGVuZCBvZiBlbWFpbCBhZGRyZXNzZXMuCisKKyAqICJnaXQgY2hlY2tvdXQgLWIiIGRpZCBub3QgYWxsb3cgc3dpdGNoaW5nIG91dCBvZiBhbiB1bmJvcm4gYnJhbmNoLgorCisgKiBXaGVuIHlvdSBoYXZlIGJvdGggLi4uL2ZvbyBhbmQgLi4uL2Zvby5naXQsICJnaXQgY2xvbmUgLi4uL2ZvbyIgZGlkIG5vdAorICAgZmF2b3IgdGhlIGZvcm1lciBidXQgdGhlIGxhdHRlci4KKworICogImdpdCBjb21taXQiIHJlZnVzZWQgdG8gY3JlYXRlIGEgY29tbWl0IHdoZW4gZW50cmllcyBhZGRlZCB3aXRoCisgICAiYWRkIC1OIiByZW1haW5lZCBpbiB0aGUgaW5kZXgsIHdpdGhvdXQgdGVsbGluZyBHaXQgd2hhdCB0aGVpciBjb250ZW50CisgICBpbiB0aGUgbmV4dCBjb21taXQgc2hvdWxkIGJlLiBXZSBzaG91bGQgaGF2ZSBjcmVhdGVkIHRoZSBjb21taXQgd2l0aG91dAorICAgdGhlc2UgcGF0aHMuCisKKyAqICJnaXQgZGlmZiAtLXN0YXQiIHNhaWQgImZpbGVzIiwgImluc2VydGlvbnMiLCBhbmQgImRlbGV0aW9ucyIgZXZlbgorICAgd2hlbiBpdCBpcyBzaG93aW5nIG9uZSAiZmlsZSIsIG9uZSAiaW5zZXJ0aW9uIiBvciBvbmUgImRlbGV0aW9uIi4KKworICogVGhlIG91dHB1dCBmcm9tICJnaXQgZGlmZiAtLXN0YXQiIGZvciB0d28gcGF0aHMgdGhhdCBoYXZlIHRoZSBzYW1lCisgICBhbW91bnQgb2YgY2hhbmdlcyBzaG93ZWQgZ3JhcGggYmFycyBvZiBkaWZmZXJlbnQgbGVuZ3RoIGR1ZSB0byB0aGUKKyAgIHdheSB3ZSBoYW5kbGVkIHJvdW5kaW5nIGVycm9ycy4KKworICogImdpdCBncmVwIiBkaWQgbm90IHBheSBhdHRlbnRpb24gdG8gLWRpZmYgKGhlbmNlIC1iaW5hcnkpIGF0dHJpYnV0ZS4KKworICogVGhlIHRyYW5zcG9ydCBwcm9ncmFtcyAoZmV0Y2gsIHB1c2gsIGNsb25lKWlnbm9yZWQgLS1uby1wcm9ncmVzcworICAgYW5kIHNob3dlZCBwcm9ncmVzcyB3aGVuIHNlbmRpbmcgdGhlaXIgb3V0cHV0IHRvIGEgdGVybWluYWwuCisKKyAqIFNvbWV0aW1lcyBlcnJvciBzdGF0dXMgZGV0ZWN0ZWQgYnkgYSBjaGVjayBpbiBhbiBlYXJsaWVyIHBoYXNlIG9mCisgICAiZ2l0IHJlY2VpdmUtcGFjayIgKHRoZSBvdGhlciBlbmQgb2YgImdpdCBwdXNoIikgd2FzIGxvc3QgYnkgbGF0ZXIKKyAgIGNoZWNrcywgcmVzdWx0aW5nIGluIGZhbHNlIGluZGljYXRpb24gb2Ygc3VjY2Vzcy4KKworICogImdpdCByZXYtbGlzdCAtLXZlcmlmeSIgc29tZXRpbWVzIHNraXBwZWQgdmVyaWZpY2F0aW9uIGRlcGVuZGluZyBvbgorICAgdGhlIHBoYXNlIG9mIHRoZSBtb29uLCB3aGljaCBkYXRlcyBiYWNrIHRvIDEuNy44Lnggc2VyaWVzLgorCisgKiBTZWFyY2ggYm94IGluICJnaXR3ZWIiIGRpZCBub3QgYWNjZXB0IG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGNvcnJlY3RseS4KKworICogU2VhcmNoIGludGVyZmFjZSBvZiAiZ2l0d2ViIiBkaWQgbm90IHNob3cgbXVsdGlwbGUgbWF0Y2hlcyBpbiB0aGUgc2FtZSBmaWxlCisgICBjb3JyZWN0bHkuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYzY1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjMudHh0CkBAIC0wLDAgKzEsNTEgQEAKK0dpdCB2MS43LjkuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjkuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBwNCIgKGluIGNvbnRyaWIvKSBzdWJtaXQgdGhlIGNoYW5nZXMgdG8gYSB3cm9uZyBwbGFjZSB3aGVuIHRoZQorICAgIi0tdXNlLWNsaWVudC1zcGVjIiBvcHRpb24gaXMgc2V0LgorCisgKiBUaGUgY29uZmlnLm1hay5hdXRvZ2VuIGdlbmVyYXRlZCBieSBvcHRpb25hbCBhdXRvY29uZiBzdXBwb3J0IHRyaWVkCisgICB0byBsaW5rIHRoZSBiaW5hcnkgd2l0aCAtbGludGwgZXZlbiB3aGVuIGxpYmludGwuaCBpcyBtaXNzaW5nIGZyb20KKyAgIHRoZSBzeXN0ZW0uCisKKyAqIFdoZW4gdGhlIGZpbHRlciBkcml2ZXIgZXhpdHMgYmVmb3JlIHJlYWRpbmcgdGhlIGNvbnRlbnQgYmVmb3JlIHRoZQorICAgbWFpbiBnaXQgcHJvY2VzcyB3cml0ZXMgdGhlIGNvbnRlbnRzIHRvIGJlIGZpbHRlcmVkIHRvIHRoZSBwaXBlIHRvCisgICBpdCwgdGhlIGxhdHRlciBjb3VsZCBiZSBraWxsZWQgd2l0aCBTSUdQSVBFIGluc3RlYWQgb2YgaWdub3JpbmcKKyAgIHN1Y2ggYW4gZXZlbnQgYXMgYW4gZXJyb3IuCisKKyAqICJnaXQgYWRkIC0tcmVmcmVzaCA8cGF0aHNwZWM+IiB1c2VkIHRvIHdhcm4gYWJvdXQgdW5tZXJnZWQgcGF0aHMKKyAgIG91dHNpZGUgdGhlIGdpdmVuIHBhdGhzcGVjLgorCisgKiBUaGUgYnVsayBjaGVjay1pbiBjb2RlcGF0aCBpbiAiZ2l0IGFkZCIgc3RyZWFtZWQgY29udGVudHMgdGhhdAorICAgbmVlZHMgc211ZGdlL2NsZWFuIGZpbHRlcnMgd2l0aG91dCBydW5uaW5nIHRoZW0sIGluc3RlYWQgb2YgcHVudGluZworICAgYW5kIGRlbGVnYXRpbmcgdG8gdGhlIGNvZGVwYXRoIHRvIHJ1biBmaWx0ZXJzIGFmdGVyIHNsdXJwaW5nCisgICBldmVyeXRoaW5nIHRvIGNvcmUuCisKKyAqICJnaXQgYnJhbmNoIC0td2l0aCAkdGhhdCIgYXNzdW1lZCBpbmNvcnJlY3RseSB0aGF0IHRoZSB1c2VyIHdpbGwgbmV2ZXIKKyAgIGFzayB0aGUgcXVlc3Rpb24gd2l0aCBub25zZW5zZSB2YWx1ZSBpbiAkdGhhdC4KKworICogImdpdCBidW5kbGUgY3JlYXRlIiBwcm9kdWNlZCBhIGNvcnJ1cHQgYnVuZGxlIGZpbGUgdXBvbiBzZWVpbmcKKyAgIGNvbW1pdHMgd2l0aCBleGNlc3NpdmVseSBsb25nIHN1YmplY3QgbGluZS4KKworICogV2hlbiBhIHJlbW90ZSBoZWxwZXIgZXhpdHMgYmVmb3JlIHJlYWRpbmcgdGhlIGJsYW5rIGxpbmUgZnJvbSB0aGUKKyAgIG1haW4gZ2l0IHByb2Nlc3MgdG8gc2lnbmFsIHRoZSBlbmQgb2YgY29tbWFuZHMsIHRoZSBsYXR0ZXIgY291bGQgYmUKKyAgIGtpbGxlZCB3aXRoIFNJR1BJUEUuIEluc3RlYWQgd2Ugc2hvdWxkIGlnbm9yZSBzdWNoIGV2ZW50IGFzIGEKKyAgIG5vbi1lcnJvci4KKworICogVGhlIGNvbW1pdCBsb2cgdGVtcGxhdGUgZ2l2ZW4gd2l0aCAiZ2l0IG1lcmdlIC0tZWRpdCIgZGlkIG5vdCBoYXZlCisgICBhIHNob3J0IGluc3RydWN0aXZlIHRleHQgbGlrZSB3aGF0ICJnaXQgY29tbWl0IiBnaXZlcy4KKworICogImdpdCByZXYtbGlzdCAtLXZlcmlmeS1vYmplY3RzIC1xIiBvbWl0dGVkIHRoZSBleHRyYSB2ZXJpZmljYXRpb24KKyAgIGl0IG5lZWRzIHRvIGRvIG92ZXIgImdpdCByZXYtbGlzdCAtLW9iamVjdHMgLXEiIGJ5IG1pc3Rha2UuCisKKyAqICJnaXR3ZWIiIHVzZWQgdG8gZHJvcCB3YXJuaW5ncyBpbiB0aGUgbG9nIGZpbGUgd2hlbiAiaGVhZHMiIHZpZXcgaXMKKyAgIGFjY2Vzc2VkIGluIGEgcmVwb3NpdG9yeSB3aG9zZSBIRUFEIGRvZXMgbm90IHBvaW50IGF0IGEgdmFsaWQKKyAgIGJyYW5jaC4KKworICogQW4gaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBnaXZlbiBieSBhbiBlbmQgdXNlciBtYWRlCisgICAiZ2l0d2ViIiB0byByZXR1cm4gZ2FyYmxlZCByZXNwb25zZS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyMTdhMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNC50eHQKQEAgLTAsMCArMSwyNCBAQAorR2l0IHYxLjcuOS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgY29kZSB0byBzeW50aGVzaXplIHRoZSBmYWtlIGFuY2VzdG9yIHRyZWUgdXNlZCBieSAzLXdheSBtZXJnZQorICAgZmFsbGJhY2sgaW4gImdpdCBhbSIgd2FzIG5vdCBwcmVwYXJlZCB0byByZWFkIGEgcGF0Y2ggY3JlYXRlZCB3aXRoCisgICBhIG5vbi1zdGFuZGFyZCAtcDxudW0+IHZhbHVlLgorCisgKiAiZ2l0IGJ1bmRsZSIgZGlkIG5vdCByZWNvcmQgYm91bmRhcnkgY29tbWl0cyBjb3JyZWN0bHkgd2hlbiB0aGVyZQorICAgYXJlIG1hbnkgb2YgdGhlbS4KKworICogImdpdCBkaWZmLWluZGV4IiBhbmQgaXRzIGZyaWVuZHMgYXQgdGhlIHBsdW1iaW5nIGxldmVsIHNob3dlZCB0aGUKKyAgICJkaWZmIC0tZ2l0IiBoZWFkZXIgYW5kIG5vdGhpbmcgZWxzZSBmb3IgYSBwYXRoIHdob3NlIGNhY2hlZCBzdGF0CisgICBpbmZvIGlzIGRpcnR5IHdpdGhvdXQgYWN0dWFsIGRpZmZlcmVuY2Ugd2hlbiBhc2tlZCB0byBwcm9kdWNlIGEKKyAgIHBhdGNoLiBUaGlzIHdhcyBhIGxvbmdzdGFuZGluZyBidWcgdGhhdCB3ZSBjb3VsZCBoYXZlIGZpeGVkIGxvbmcKKyAgIHRpbWUgYWdvLgorCisgKiAiZ2l0d2ViIiBkaWQgdXNlIHF1b3RlbWV0YSgpIHRvIHByZXBhcmUgc2VhcmNoIHN0cmluZyB3aGVuIGFza2VkIHRvCisgICBkbyBhIGZpeGVkLXN0cmluZyBwcm9qZWN0IHNlYXJjaCwgYnV0IGRpZCBub3QgdXNlIGl0IGJ5IG1pc3Rha2UgYW5kCisgICB1c2VkIHRoZSB1c2VyLXN1cHBsaWVkIHN0cmluZyBpbnN0ZWFkLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWNjMmJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS41LnR4dApAQCAtMCwwICsxLDIzIEBACitHaXQgdjEuNy45LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdoZW4gImdpdCBjb25maWciIGRpYWdub3NlcyBhbiBlcnJvciBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQKKyAgIHNob3dzIHRoZSBsaW5lIG51bWJlciBmb3IgdGhlIG9mZmVuZGluZyBsaW5lLCBpdCBtaXNjb3VudGVkIGlmIHRoZQorICAgZXJyb3Igd2FzIGF0IHRoZSBlbmQgb2YgbGluZS4KKworICogImdpdCBmYXN0LWltcG9ydCIgYWNjZXB0ZWQgImxzIiBjb21tYW5kIHdpdGggYW4gZW1wdHkgcGF0aCBieQorICAgbWlzdGFrZS4KKworICogVmFyaW91cyBuZXctaXNoIG91dHB1dCBkZWNvcmF0aW9uIG1vZGVzIG9mICJnaXQgZ3JlcCIgd2VyZSBub3QKKyAgIGRvY3VtZW50ZWQgaW4gdGhlIG1hbnVhbCdzIHN5bm9wc2lzIHNlY3Rpb24uCisKKyAqIFRoZSAicmVtYWluaW5nIiBzdWJjb21tYW5kIHRvICJnaXQgcmVyZXJlIiB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAqICJnaXR3ZWIiIHVzZWQgdG8gZHJvcCB3YXJuaW5ncyBpbiB0aGUgbG9nIGZpbGUgd2hlbiAiaGVhZHMiIHZpZXcgaXMKKyAgIGFjY2Vzc2VkIGluIGEgcmVwb3NpdG9yeSB3aG9zZSBIRUFEIGRvZXMgbm90IHBvaW50IGF0IGEgdmFsaWQKKyAgIGJyYW5jaC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiZjg4MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNi50eHQKQEAgLTAsMCArMSwxMiBAQAorR2l0IHYxLjcuOS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOS41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IG1lcmdlICR0YWciIHRvIG1lcmdlIGFuIGFubm90YXRlZCB0YWcgYWx3YXlzIG9wZW5zIHRoZSBlZGl0b3IKKyAgIGR1cmluZyBhbiBpbnRlcmFjdGl2ZSBlZGl0IHNlc3Npb24uIHYxLjcuMTAgc2VyaWVzIGludHJvZHVjZWQgYW4KKyAgIGVudmlyb25tZW50IHZhcmlhYmxlIEdJVF9NRVJHRV9BVVRPRURJVCB0byBoZWxwIG9sZGVyIHNjcmlwdHMgZGVjbGluZQorICAgdGhpcyBiZWhhdmlvdXIsIGJ1dCB0aGUgbWFpbnRlbmFuY2UgdHJhY2sgc2hvdWxkIGFsc28gc3VwcG9ydCBpdC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2NjdkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNy50eHQKQEAgLTAsMCArMSwxMyBAQAorR2l0IHYxLjcuOS43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOS42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBlcnJvciBtZXNzYWdlIGZyb20gJ2dpdCBidW5kbGUnIGhhZCBhbiB1bm1hdGNoZWQgc2luZ2xlIHF1b3RlIHBhaXIgaW4gaXQuCisKKyAqIFRoZSB3YXkgJ2dpdCBmZXRjaCcgaW1wbGVtZW50ZWQgaXRzIGNvbm5lY3Rpdml0eSBjaGVjayBvdmVyCisgICByZWNlaXZlZCBvYmplY3RzIHdhcyBvdmVybHkgcGVzc2ltaXN0aWMsIGFuZCB3YXN0ZWQgYSBsb3Qgb2YKKyAgIGN5Y2xlcy4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTMyMGFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS50eHQKQEAgLTAsMCArMSwxMTIgQEAKK0dpdCB2MS43LjkgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy44CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBnaXRrIHVwZGF0ZXMgYWNjdW11bGF0ZWQgc2luY2UgZWFybHkgMjAxMS4KKworICogZ2l0LWd1aSB1cGRhdGVkIHRvIDAuMTYuMC4KKworICogZ2l0LXA0IChpbiBjb250cmliLykgdXBkYXRlcy4KKworICogR2l0IHVzZXMgZ2V0dGV4dCB0byB0cmFuc2xhdGUgaXRzIG1vc3QgY29tbW9uIGludGVyZmFjZSBtZXNzYWdlcworICAgaW50byB0aGUgdXNlcidzIGxhbmd1YWdlIGlmIHRyYW5zbGF0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCB0aGUKKyAgIGxvY2FsZSBpcyBhcHByb3ByaWF0ZWx5IHNldC4gRGlzdHJpYnV0b3JzIGNhbiBkcm9wIG5ldyBQTyBmaWxlcworICAgaW4gcG8vIHRvIGFkZCBuZXcgdHJhbnNsYXRpb25zLgorCisgKiBUaGUgY29kZSB0byBoYW5kbGUgdXNlcm5hbWUvcGFzc3dvcmQgZm9yIEhUVFAgdHJhbnNhY3Rpb25zIHVzZWQgaW4KKyAgICJnaXQgcHVzaCIgJiAiZ2l0IGZldGNoIiBsZWFybmVkIHRvIHRhbGsgImNyZWRlbnRpYWwgQVBJIiB0bworICAgZXh0ZXJuYWwgcHJvZ3JhbXMgdG8gY2FjaGUgb3Igc3RvcmUgdGhlbSwgdG8gYWxsb3cgaW50ZWdyYXRpb24gd2l0aAorICAgcGxhdGZvcm0gbmF0aXZlIGtleWNoYWluIG1lY2hhbmlzbXMuCisKKyAqIFRoZSBpbnB1dCBwcm9tcHRzIGluIHRoZSB0ZXJtaW5hbCB1c2Ugb3VyIG93biBnZXRwYXNzKCkgcmVwbGFjZW1lbnQKKyAgIHdoZW4gcG9zc2libGUuIEhUVFAgdHJhbnNhY3Rpb25zIHVzZWQgdG8gYXNrIGZvciB0aGUgdXNlcm5hbWUgd2l0aG91dAorICAgZWNob2luZyBiYWNrIHdoYXQgd2FzIHR5cGVkLCBidXQgd2l0aCB0aGlzIGNoYW5nZSB5b3Ugd2lsbCBzZWUgaXQgYXMKKyAgIHlvdSB0eXBlLgorCisgKiBUaGUgaW50ZXJuYWxzIG9mICJyZXZlcnQvY2hlcnJ5LXBpY2siIGhhdmUgYmVlbiB0d2Vha2VkIHRvIHByZXBhcmUKKyAgIGJ1aWxkaW5nIG1vcmUgZ2VuZXJpYyAic2VxdWVuY2VyIiBvbiB0b3Agb2YgdGhlIGltcGxlbWVudGF0aW9uIHRoYXQKKyAgIGRyaXZlcyB0aGVtLgorCisgKiAiZ2l0IHJldi1wYXJzZSBGRVRDSF9IRUFEIiBhZnRlciAiZ2l0IGZldGNoIiB3aXRob3V0IHNwZWNpZnlpbmcKKyAgIHdoYXQgdG8gZmV0Y2ggZnJvbSB0aGUgY29tbWFuZCBsaW5lIHdpbGwgbm93IHNob3cgdGhlIGNvbW1pdCB0aGF0CisgICB3b3VsZCBiZSBtZXJnZWQgaWYgdGhlIGNvbW1hbmQgd2VyZSAiZ2l0IHB1bGwiLgorCisgKiAiZ2l0IGFkZCIgbGVhcm5lZCB0byBzdHJlYW0gbGFyZ2UgZmlsZXMgZGlyZWN0bHkgaW50byBhIHBhY2tmaWxlCisgICBpbnN0ZWFkIG9mIHdyaXRpbmcgdGhlbSBpbnRvIGluZGl2aWR1YWwgbG9vc2Ugb2JqZWN0IGZpbGVzLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1CIDxjdXJyZW50IGJyYW5jaD4gPGVsc2V3aGVyZT4iIGlzIGEgbW9yZSBpbnR1aXRpdmUKKyAgIHdheSB0byBzcGVsbCAiZ2l0IHJlc2V0IC0ta2VlcCA8ZWxzZXdoZXJlPiIuCisKKyAqICJnaXQgY2hlY2tvdXQiIGFuZCAiZ2l0IG1lcmdlIiBsZWFybmVkICItLW5vLW92ZXJ3cml0ZS1pZ25vcmUiIG9wdGlvbgorICAgdG8gdGVsbCBHaXQgdGhhdCB1bnRyYWNrZWQgYW5kIGlnbm9yZWQgZmlsZXMgYXJlIG5vdCBleHBlbmRhYmxlLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIiBsZWFybmVkICItLW5vLWVkaXQiIG9wdGlvbiB0byBzYXkgdGhhdCB0aGUKKyAgIHVzZXIgaXMgYW1lbmRpbmcgdGhlIHRyZWUgYmVpbmcgcmVjb3JkZWQsIHdpdGhvdXQgdXBkYXRpbmcgdGhlCisgICBjb21taXQgbG9nIG1lc3NhZ2UuCisKKyAqICJnaXQgY29tbWl0IiBhbmQgImdpdCByZXNldCIgcmUtbGVhcm5lZCB0aGUgb3B0aW1pemF0aW9uIHRvIHByaW1lCisgICB0aGUgY2FjaGUtdHJlZSBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXgsIHdoaWNoIG1ha2VzIGl0IGZhc3RlciB0bworICAgd3JpdGUgYSB0cmVlIG9iamVjdCBvdXQgYWZ0ZXIgdGhlIGluZGV4IGVudHJpZXMgYXJlIHVwZGF0ZWQuCisKKyAqICJnaXQgY29tbWl0IiBkZXRlY3RzIGFuZCByZWplY3RzIGFuIGF0dGVtcHQgdG8gc3R1ZmYgTlVMIGJ5dGUgaW4KKyAgIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuCisKKyAqICJnaXQgY29tbWl0IiBsZWFybmVkICItUyIgdG8gR1BHLXNpZ24gdGhlIGNvbW1pdDsgdGhpcyBjYW4gYmUgc2hvd24KKyAgIHdpdGggdGhlICItLXNob3ctc2lnbmF0dXJlIiBvcHRpb24gdG8gImdpdCBsb2ciLgorCisgKiBmc2NrIGFuZCBwcnVuZSBhcmUgcmVsYXRpdmVseSBsZW5ndGh5IG9wZXJhdGlvbnMgdGhhdCBzdGlsbCBnbworICAgc2lsZW50IHdoaWxlIG1ha2luZyB0aGUgZW5kLXVzZXIgd2FpdC4gVGhleSBsZWFybmVkIHRvIGdpdmUgcHJvZ3Jlc3MKKyAgIG91dHB1dCBsaWtlIG90aGVyIHNsb3cgb3BlcmF0aW9ucy4KKworICogVGhlIHNldCBvZiBidWlsdC1pbiBmdW5jdGlvbi1oZWFkZXIgcGF0dGVybnMgZm9yIHZhcmlvdXMgbGFuZ3VhZ2VzCisgICBrbm93cyBNQVRMQUIuCisKKyAqICJnaXQgbG9nIC0tZm9ybWF0PSc8Zm9ybWF0PiciIGxlYXJuZWQgbmV3ICVnW25OZUVdIHNwZWNpZmllcnMgdG8KKyAgIHNob3cgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVmbG9nIGVudHJpZXMgd2hlbiB3YWxraW5nIHRoZSByZWZsb2cKKyAgIChpLmUuIHdpdGggIi1nIikuCisKKyAqICJnaXQgcHVsbCIgY2FuIGJlIHVzZWQgdG8gZmV0Y2ggYW5kIG1lcmdlIGFuIGFubm90YXRlZC9zaWduZWQgdGFnLAorICAgaW5zdGVhZCBvZiB0aGUgdGlwIG9mIGEgdG9waWMgYnJhbmNoLiBUaGUgR1BHIHNpZ25hdHVyZSBmcm9tIHRoZQorICAgc2lnbmVkIHRhZyBpcyByZWNvcmRlZCBpbiB0aGUgcmVzdWx0aW5nIG1lcmdlIGNvbW1pdCBmb3IgbGF0ZXIKKyAgIGF1ZGl0aW5nLgorCisgKiAiZ2l0IGxvZyIgbGVhcm5lZCAiLS1zaG93LXNpZ25hdHVyZSIgb3B0aW9uIHRvIHNob3cgdGhlIHNpZ25lZCB0YWcKKyAgIHRoYXQgd2FzIG1lcmdlZCB0aGF0IGlzIGVtYmVkZGVkIGluIHRoZSBtZXJnZSBjb21taXQuIEl0IGFsc28gY2FuCisgICBzaG93IHRoZSBzaWduYXR1cmUgbWFkZSBvbiB0aGUgY29tbWl0IHdpdGggImdpdCBjb21taXQgLVMiLgorCisgKiAiZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24iIGNhbiBiZSB1c2VkIHRvIGFkZCBkZXNjcmlwdGl2ZSB0ZXh0CisgICB0byBleHBsYWluIHdoYXQgYSB0b3BpYyBicmFuY2ggaXMgYWJvdXQuCisKKyAqICJnaXQgZm10LW1lcmdlLW1zZyIgbGVhcm5lZCB0byB0YWtlIHRoZSBicmFuY2ggZGVzY3JpcHRpb24gaW50bworICAgYWNjb3VudCB3aGVuIHByZXBhcmluZyBhIG1lcmdlIHN1bW1hcnkgdGhhdCAiZ2l0IG1lcmdlIiByZWNvcmRzCisgICB3aGVuIG1lcmdpbmcgYSBsb2NhbCBicmFuY2guCisKKyAqICJnaXQgcmVxdWVzdC1wdWxsIiBoYXMgYmVlbiB1cGRhdGVkIHRvIGNvbnZleSBtb3JlIGluZm9ybWF0aW9uCisgICB1c2VmdWwgZm9yIGludGVncmF0b3JzIHRvIGRlY2lkZSBpZiBhIHRvcGljIGlzIHdvcnRoIG1lcmdpbmcgYW5kCisgICB3aGF0IGlzIHB1bGxlZCBpcyBpbmRlZWQgd2hhdCB0aGUgcmVxdWVzdG9yIGFza2VkIHRvIHB1bGwsCisgICBpbmNsdWRpbmc6CisKKyAgIC0gdGhlIHRpcCBvZiB0aGUgYnJhbmNoIGJlaW5nIHJlcXVlc3RlZCB0byBiZSBtZXJnZWQ7CisgICAtIHRoZSBicmFuY2ggZGVzY3JpcHRpb24gZGVzY3JpYmluZyB3aGF0IHRoZSB0b3BpYyBpcyBhYm91dDsKKyAgIC0gdGhlIGNvbnRlbnRzIG9mIHRoZSBhbm5vdGF0ZWQgdGFnLCB3aGVuIHJlcXVlc3RpbmcgdG8gcHVsbCBhIHRhZy4KKworICogImdpdCBwdWxsIiBsZWFybmVkIHRvIG5vdGljZSAncHVsbC5yZWJhc2UnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsCisgICB3aGljaCBzZXJ2ZXMgYXMgYSBnbG9iYWwgZmFsbGJhY2sgZm9yIHNldHRpbmcgJ2JyYW5jaC48bmFtZT4ucmViYXNlJworICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBwZXIgYnJhbmNoLgorCisgKiAiZ2l0IHRhZyIgbGVhcm5lZCAiLS1jbGVhbnVwIiBvcHRpb24gdG8gY29udHJvbCBob3cgdGhlIHdoaXRlc3BhY2VzCisgICBhbmQgZW1wdHkgbGluZXMgaW4gdGFnIG1lc3NhZ2UgYXJlIGNsZWFuZWQgdXAuCisKKyAqICJnaXR3ZWIiIGxlYXJuZWQgdG8gc2hvdyBzaWRlLWJ5LXNpZGUgZGlmZi4KKworQWxzbyBjb250YWlucyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuOAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjEuNy44IGluIHRoZSBtYWludGVuYW5jZQorcmVsZWFzZXMgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSByZWxlYXNlIG5vdGVzIHRvIHRoZW0gZm9yCitkZXRhaWxzKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmNmFjZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAudHh0CkBAIC0wLDAgKzEsMjYzIEBACitHaXQgdjEuOC4wIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UsIHdlIHdpbGwgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgImdpdAorcHVzaCIgY29tbWFuZC4gIFdoZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZQoraGF2ZSB1c2VkIHRoZSB0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUKK3NlbnQgdG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lCituYW1lIG92ZXIgdGhlcmUpLiAgV2Ugd2lsbCBub3cgdXNlIHRoZSAic2ltcGxlIiBzZW1hbnRpY3MsIHRoYXQgcHVzaGVzIHRoZQorY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUgb25seSB3aGVuIHRoZSBjdXJyZW50CiticmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQgcmVtb3RlIGJyYW5jaC4gIFRoZXJlIGlzIGEgdXNlcgorcHJlZmVyZW5jZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwdXNoLmRlZmF1bHQiIHRvIGNoYW5nZSB0aGlzLCBhbmQKKyJnaXQgcHVzaCIgd2lsbCB3YXJuIGFib3V0IHRoZSB1cGNvbWluZyBjaGFuZ2UgdW50aWwgeW91IHNldCB0aGlzCit2YXJpYWJsZS4KKworImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0iIGlzIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIGEKK3JlbGF0aXZlbHkgZGlzdGFudCBmdXR1cmUuICAiZ2l0IGJyYW5jaCBbLXV8LS1zZXQtdXBzdHJlYW0tdG9dIiBoYXMKK2JlZW4gaW50cm9kdWNlZCB3aXRoIGEgc2FuZXIgb3JkZXIgb2YgYXJndW1lbnRzLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNy4xMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBBIGNyZWRlbnRpYWwgaGVscGVyIGZvciBXaW4zMiB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIGtleWNoYWluIG9mCisgICB0aGUgbG9nZ2VkLWluIHVzZXIgaGFzIGJlZW4gYWRkZWQuCisKKyAqIEFuIGluaXRpYWwgcG9ydCB0byBIUCBOb25TdG9wLgorCisgKiBBIGNyZWRlbnRpYWwgaGVscGVyIHRvIGFsbG93IGFjY2VzcyB0byB0aGUgR25vbWUga2V5cmluZyBoYXMgYmVlbgorICAgYWRkZWQuCisKKyAqIFdoZW4gImdpdCBhbSIgc2FuaXRpemVzIHRoZSAiU3ViamVjdDoiIGxpbmUsIHdlIHN0cmlwIHRoZSBwcmVmaXggZnJvbQorICAgIlJlOiBzdWJqZWN0IiBhbmQgYWxzbyBmcm9tIGEgbGVzcyBjb21tb24gInJlOiBzdWJqZWN0IiwgYnV0IGxlZnQKKyAgIHRoZSBldmVuIGxlc3MgY29tbW9uICJSRTogc3ViamVjdCIgaW50YWN0LiBXZSBzdHJpcCB0aGF0IG5vdywgdG9vLgorCisgKiBJdCB3YXMgdGVtcHRpbmcgdG8gc2F5ICJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIiLAorICAgYnV0IHRoYXQgdGVsbHMgR2l0IHRvIGFycmFuZ2UgdGhlIGxvY2FsIGJyYW5jaCAib3JpZ2luL21hc3RlciIgdG8KKyAgIGludGVncmF0ZSB3aXRoIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgYnJhbmNoLCB3aGljaCBpcyBoaWdobHkKKyAgIHVubGlrZWx5IHdoYXQgdGhlIHVzZXIgbWVhbnQuICBUaGUgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IHVzZSB0aGUKKyAgIG5ldyAiLS1zZXQtdXBzdHJlYW0tdG8iICh3aXRoIGEgc2hvcnQtYW5kLXN3ZWV0ICItdSIpIG9wdGlvbgorICAgaW5zdGVhZC4KKworICogImdpdCBjaGVycnktcGljayIgbGVhcm5lZCB0aGUgIi0tYWxsb3ctZW1wdHktbWVzc2FnZSIgb3B0aW9uIHRvCisgICBhbGxvdyBpdCB0byByZXBsYXkgYSBjb21taXQgd2l0aG91dCBhbnkgbG9nIG1lc3NhZ2UuCisKKyAqIEFmdGVyICJnaXQgY2hlcnJ5LXBpY2sgLXMiIGdhdmUgY29udHJvbCBiYWNrIHRvIHRoZSB1c2VyIGFza2luZworICAgaGVscCB0byByZXNvbHZlIGNvbmZsaWN0cywgY29uY2x1ZGluZyAiZ2l0IGNvbW1pdCIgdXNlZCB0byBuZWVkIHRvCisgICBiZSBydW4gd2l0aCAiLXMiIGlmIHRoZSB1c2VyIHdhbnRzIHRvIHNpZ24gaXQgb2ZmOyBub3cgdGhlIGNvbW1hbmQKKyAgIGxlYXZlcyB0aGUgc2lnbi1vZmYgbGluZSBpbiB0aGUgbG9nIHRlbXBsYXRlLgorCisgKiAiZ2l0IGRhZW1vbiIgbGVhcm5lZCB0aGUgIi0tYWNjZXNzLWhvb2siIG9wdGlvbiB0byBhbGxvdyBhbgorICAgZXh0ZXJuYWwgY29tbWFuZCB0byBkZWNsaW5lIHNlcnZpY2UgYmFzZWQgb24gdGhlIGNsaWVudCBhZGRyZXNzLAorICAgcmVwb3NpdG9yeSBwYXRoLCBldGMuCisKKyAqICJnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiIgbGVhcm5lZCB0byB1c2Ugc3ltYm9saWMgbGlua3MgdG8gcHJlcGFyZQorICAgYSB0ZW1wb3JhcnkgY29weSBvZiB0aGUgd29ya2luZyB0cmVlIHdoZW4gYXZhaWxhYmxlLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdG8gdXNlIGEgbm9uLXN0YW5kYXJkIHBhdHRlcm4gdHlwZSBieSBkZWZhdWx0IGlmCisgICBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdGVsbHMgaXQgdG8uCisKKyAqICJnaXQgbG9nIC1nIiBsZWFybmVkIHRoZSAiLS1ncmVwLXJlZmxvZz08cGF0dGVybj4iIG9wdGlvbiB0byBsaW1pdAorICAgaXRzIG91dHB1dCB0byBjb21taXRzIHdpdGggYSByZWZsb2cgbWVzc2FnZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICBwYXR0ZXJuLgorCisgKiAiZ2l0IG1lcmdlLWJhc2UiIGxlYXJuZWQgdGhlICItLWlzLWFuY2VzdG9yIEEgQiIgb3B0aW9uIHRvIHRlbGwgaWYgQSBpcworICAgYW4gYW5jZXN0b3Igb2YgQi4gIFRoZSByZXN1bHQgaXMgaW5kaWNhdGVkIGJ5IGl0cyBleGl0IHN0YXR1cyBjb2RlLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbm93IGFsbG93cyB1c2VycyB0byBvdmVycmlkZSB0aGUgYWN0dWFsIGNvbW1hbmQgdXNlZAorICAgd2l0aCB0aGUgbWVyZ2V0b29sLiRuYW1lLmNtZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGV2ZW4gZm9yIGJ1aWx0LWluCisgICBtZXJnZXRvb2wgYmFja2VuZHMuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkIHRoZSAiLS1lZGl0LXRvZG8iIG9wdGlvbiB0byBvcGVuIGFuIGVkaXRvcgorICAgdG8gZWRpdCB0aGUgaW5zdHJ1Y3Rpb24gc2hlZXQuCisKKworRm9yZWlnbiBJbnRlcmZhY2UKKworICogImdpdCBzdm4iIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yayB3aXRoIFNWTiAxLjcuCisKKyAqICJnaXQgcDQiIGxlYXJuZWQgdGhlICItLWNvbmZsaWN0cyIgb3B0aW9uIHRvIHNwZWNpZnkgd2hhdCB0byBkbyB3aGVuCisgICBlbmNvdW50ZXJpbmcgYSBjb25mbGljdCBkdXJpbmcgInA0IHN1Ym1pdCIuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuIChwbGVhc2UgcmVwb3J0IHBvc3NpYmxlIHJlZ3Jlc3Npb25zKQorCisgKiBHaXQgc2hpcHMgd2l0aCBhIGZhbGwtYmFjayByZWdleHAgaW1wbGVtZW50YXRpb24gZm9yIHBsYXRmb3JtcyB3aXRoCisgICBidWdneSByZWdleHAgbGlicmFyeSwgYnV0IGl0IHdhcyBlYXN5IGZvciBwZW9wbGUgdG8ga2VlcCB1c2luZyB0aGVpcgorICAgcGxhdGZvcm0gcmVnZXhwIGJ5IG1pc3Rha2UuICBBIG5ldyB0ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIGNoZWNrIHRoaXMuCisKKyAqIFRoZSAiY2hlY2stZG9jcyIgYnVpbGQgdGFyZ2V0IGhhcyBiZWVuIHVwZGF0ZWQgYW5kIGdyZWF0bHkKKyAgIHNpbXBsaWZpZWQuCisKKyAqIFRoZSB0ZXN0IHN1aXRlIGlzIHJ1biB1bmRlciBNQUxMT0NfQ0hFQ0tfIHdoZW4gcnVubmluZyB3aXRoIGEgZ2xpYmMKKyAgIHRoYXQgc3VwcG9ydHMgdGhlIGZlYXR1cmUuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBUZVhpbmZvIGZvcm1hdCB3YXMgdXNpbmcgaW5kZW50ZWQgb3V0cHV0CisgICBmb3IgbWF0ZXJpYWxzIG1lYW50IHRvIGJlIGV4YW1wbGVzIHRoYXQgYXJlIGJldHRlciB0eXBlc2V0IGluCisgICBtb25vc3BhY2UuCisKKyAqIENvbXBhdGliaWxpdHkgd3JhcHBlciBhcm91bmQgc29tZSBta2RpcigyKSBpbXBsZW1lbnRhdGlvbnMgdGhhdAorICAgcmVqZWN0IHBhcmFtZXRlcnMgd2l0aCB0cmFpbGluZyBzbGFzaCBoYXMgYmVlbiBpbnRyb2R1Y2VkLgorCisgKiBDb21wYXRpYmlsaXR5IHdyYXBwZXIgZm9yIHN5c3RlbXMgdGhhdCBsYWNrIHVzYWJsZSBzZXRpdGltZXIoKSBoYXMKKyAgIGJlZW4gYWRkZWQuCisKKyAqIFRoZSBvcHRpb24gcGFyc2luZyBvZiAiZ2l0IGNoZWNrb3V0IiBoYWQgZXJyb3IgY2hlY2tpbmcsIGR3aW0gYW5kCisgICBkZWZhdWx0aW5nIG1pc3Npbmcgb3B0aW9ucywgYWxsIG1peGVkIGluIHRoZSBjb2RlLCBhbmQgaXNzdWluZyBhbgorICAgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSB3aXRoIHVzZWZ1bCBjb250ZXh0IHdhcyBnZXR0aW5nIGhhcmRlci4KKyAgIFRoZSBjb2RlIGhhcyBiZWVuIHJlb3JnYW5pemVkIHRvIGFsbG93IGdpdmluZyBhIHByb3BlciBkaWFnbm9zaXMKKyAgIHdoZW4gdGhlIHVzZXIgc2F5cyAiZ2l0IGNoZWNrb3V0IC1iIC10IGZvbyBiYXIiIChlLmcuICItdCIgaXMgbm90IGEKKyAgIGdvb2QgbmFtZSBmb3IgYSBicmFuY2gpLgorCisgKiBNYW55IGludGVybmFsIHVzZXMgb2YgYSAiZ2l0IG1lcmdlLWJhc2UiIGVxdWl2YWxlbnQgd2VyZSBvbmx5IHRvIHNlZQorICAgaWYgb25lIGNvbW1pdCBmYXN0LWZvcndhcmRzIHRvIHRoZSBvdGhlciwgd2hpY2ggZGlkIG5vdCBuZWVkIHRoZQorICAgZnVsbCBzZXQgb2YgbWVyZ2UgYmFzZXMgdG8gYmUgY29tcHV0ZWQuIFRoZXkgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8KKyAgIHVzZSBsZXNzIGV4cGVuc2l2ZSBjaGVja3MuCisKKyAqIFRoZSBoZXVyaXN0aWNzIHRvIGRldGVjdCBhbmQgc2lsZW50bHkgY29udmVydCBsYXRpbjEgdG8gdXRmOCB3aGVuCisgICB3ZSB3ZXJlIHRvbGQgdG8gdXNlIHV0Zi04IGluIHRoZSBsb2cgbWVzc2FnZSBoYXMgYmVlbiB0cmFuc3BsYW50ZWQKKyAgIGZyb20gIm1haWxpbmZvIiB0byAiY29tbWl0IiBhbmQgImNvbW1pdC10cmVlIi4KKworICogTWVzc2FnZXMgZ2l2ZW4gYnkgImdpdCA8c3ViY29tbWFuZD4gLWgiIGZyb20gbWFueSBzdWJjb21tYW5kcyBoYXZlCisgICBiZWVuIG1hcmtlZCBmb3IgdHJhbnNsYXRpb24uCisKKworQWxzbyBjb250YWlucyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS43LjEyIGluIHRoZQorbWFpbnRlbmFuY2UgdHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSByZWxlYXNlIG5vdGVzCit0byB0aGVtIGZvciBkZXRhaWxzKS4KKworICogVGhlIGF0dHJpYnV0ZSBzeXN0ZW0gbWF5IGJlIGFza2VkIGZvciBhIHBhdGggdGhhdCBpdHNlbGYgb3IgaXRzCisgICBsZWFkaW5nIGRpcmVjdG9yaWVzIG5vIGxvbmdlciBleGlzdHMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgYW5kIGl0IGlzCisgICBmaW5lIGlmIHdlIGNhbm5vdCBvcGVuIC5naXRhdHRyaWJ1dGUgZmlsZSBpbiBzdWNoIGEgY2FzZS4gIEZhaWx1cmUKKyAgIHRvIG9wZW4gcGVyLWRpcmVjdG9yeSAuZ2l0YXR0cmlidXRlcyB3aXRoIGVycm9yIHN0YXR1cyBvdGhlciB0aGFuCisgICBFTk9FTlQgYW5kIEVOT1RESVIgc2hvdWxkIGJlIGRpYWdub3NlZCwgYnV0IGl0IHdhc24ndC4KKworICogV2hlbiBsb29raW5nIGZvciAkSE9NRS8uZ2l0Y29uZmlnIGV0Yy4sIGl0IGlzIE9LIGlmIHdlIGNhbm5vdCByZWFkCisgICB0aGVtIGJlY2F1c2UgdGhleSBkbyBub3QgZXhpc3QsIGJ1dCB3ZSBkaWQgbm90IGRpYWdub3NlIGV4aXN0aW5nCisgICBmaWxlcyB0aGF0IHdlIGNhbm5vdCByZWFkLgorCisgKiBXaGVuICJnaXQgYW0iIGlzIGZlZCBhbiBpbnB1dCB0aGF0IGhhcyBtdWx0aXBsZSAiQ29udGVudC10eXBlOiAuLi4iCisgICBoZWFkZXIsIGl0IGRpZCBub3QgZ3JvayBjaGFyc2V0PSBhdHRyaWJ1dGUgY29ycmVjdGx5LgorCisgKiAiZ2l0IGFtIiBtaXNoYW5kbGVkIGEgcGF0Y2ggYXR0YWNoZWQgYXMgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisgICAoZS5nLiBub3QgdGV4dC8qKTsgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyAoZS5nLiBiYXNlNjQpIHdhcyBub3QKKyAgIGhvbm9yZWQgY29ycmVjdGx5LgorCisgKiAiZ2l0IGJsYW1lIE1BS0VGSUxFIiBydW4gaW4gYSBoaXN0b3J5IHRoYXQgaGFzICJNYWtlZmlsZSIgYnV0IG5vdAorICAgIk1BS0VGSUxFIiBzaG91bGQgc2F5ICJObyBzdWNoIGZpbGUgTUFLRUZJTEUgaW4gSEVBRCIsIGJ1dCBnb3QKKyAgIGNvbmZ1c2VkIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIGFuZCBmYWlsZWQgdG8gZG8gc28uCisKKyAqIEV2ZW4gZHVyaW5nIGEgY29uZmxpY3RlZCBtZXJnZSwgImdpdCBibGFtZSAkcGF0aCIgYWx3YXlzIG1lYW50IHRvCisgICBibGFtZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIHRoZSAid29ya2luZyB0cmVlIiB2ZXJzaW9uOyBtYWtlIGl0CisgICBtb3JlIHVzZWZ1bCBieSBzaG93aW5nIGNsZWFubHkgbWVyZ2VkIHBhcnRzIGFzIGNvbWluZyBmcm9tIHRoZSBvdGhlcgorICAgYnJhbmNoIHRoYXQgaXMgYmVpbmcgbWVyZ2VkLgorCisgKiBJdCB3YXMgdW5jbGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgImdpdCBibGFtZSIgdGhhdCBpdCBpcworICAgdW5uZWNlc3NhcnkgZm9yIHVzZXJzIHRvIHVzZSB0aGUgIi0tZm9sbG93IiBvcHRpb24uCisKKyAqIE91dHB1dCBmcm9tICJnaXQgYnJhbmNoIC12IiBjb250YWlucyAiKG5vIGJyYW5jaCkiIHRoYXQgY291bGQgYmUKKyAgIGxvY2FsaXplZCwgYnV0IHRoZSBjb2RlIHRvIGFsaWduIGl0IGFsb25nIHdpdGggdGhlIG5hbWVzIG9mCisgICBicmFuY2hlcyB3YXMgY291bnRpbmcgaW4gYnl0ZXMsIG5vdCBpbiBkaXNwbGF5IGNvbHVtbnMuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2sgQSBDIEIiIHVzZWQgdG8gcmVwbGF5IGNoYW5nZXMgaW4gQSBhbmQgdGhlbiBCIGFuZAorICAgdGhlbiBDIGlmIHRoZXNlIHRocmVlIGNvbW1pdHMgaGFkIGNvbW1pdHRlciB0aW1lc3RhbXBzIGluIHRoYXQKKyAgIG9yZGVyLCB3aGljaCBpcyBub3Qgd2hhdCB0aGUgdXNlciB3aG8gc2FpZCAiQSBDIEIiIG5hdHVyYWxseQorICAgZXhwZWN0cy4KKworICogQSByZXBvc2l0b3J5IGNyZWF0ZWQgd2l0aCAiZ2l0IGNsb25lIC0tc2luZ2xlIiBoYWQgaXRzIGZldGNoCisgICByZWZzcGVjcyBzZXQgdXAganVzdCBsaWtlIGEgY2xvbmUgd2l0aG91dCAiLS1zaW5nbGUiLCBsZWFkaW5nIHRoZQorICAgc3Vic2VxdWVudCAiZ2l0IGZldGNoIiB0byBzbHVycCBhbGwgdGhlIG90aGVyIGJyYW5jaGVzLCBkZWZlYXRpbmcKKyAgIHRoZSB3aG9sZSBwb2ludCBvZiBzcGVjaWZ5aW5nICJvbmx5IHRoaXMgYnJhbmNoIi4KKworICogRG9jdW1lbnRhdGlvbiB0YWxrZWQgYWJvdXQgImZpcnN0IGxpbmUgb2YgY29tbWl0IGxvZyIgd2hlbiBpdCBtZWFudAorICAgdGhlIHRpdGxlIG9mIHRoZSBjb21taXQuICBUaGUgZGVzY3JpcHRpb24gd2FzIGNsYXJpZmllZCBieSBkZWZpbmluZworICAgaG93IHRoZSB0aXRsZSBpcyBkZWNpZGVkIGFuZCByZXdvcmRpbmcgdGhlIGNhc3VhbCBtZW50aW9uIG9mICJmaXJzdAorICAgbGluZSIgdG8gInRpdGxlIi4KKworICogImdpdCBjdnNpbXBvcnQiIGRpZCBub3QgdGhvcm91Z2hseSBjbGVhbnNlIHRhZyBuYW1lcyB0aGF0IGl0CisgICBpbmZlcnJlZCBmcm9tIHRoZSBuYW1lcyBvZiB0aGUgdGFncyBpdCBvYnRhaW5lZCBmcm9tIENWUywgd2hpY2gKKyAgIGNhdXNlZCAiZ2l0IHRhZyIgdG8gYmFyZiBhbmQgc3RvcCB0aGUgaW1wb3J0IGluIHRoZSBtaWRkbGUuCisKKyAqIEVhcmxpZXIgd2UgbWFkZSB0aGUgZGlmZnN0YXQgc3VtbWFyeSBsaW5lIHRoYXQgc2hvd3MgdGhlIG51bWJlciBvZgorICAgbGluZXMgYWRkZWQvZGVsZXRlZCBsb2NhbGl6YWJsZSwgYnV0IGl0IHdhcyBmb3VuZCBpcnJpdGF0aW5nIGhhdmluZworICAgdG8gc2VlIHRoZW0gaW4gdmFyaW91cyBsYW5ndWFnZXMgb24gYSBsaXN0IHdob3NlIGRpc2N1c3Npb24gbGFuZ3VhZ2UKKyAgIGlzIEVuZ2xpc2gsIGFuZCB0aGlzIGNoYW5nZSBoYXMgYmVlbiByZXZlcnRlZC4KKworICogImdpdCBmZXRjaCAtLWFsbCIsIHdoZW4gcGFzc2VkICItLW5vLXRhZ3MiLCBkaWQgbm90IGhvbm9yIHRoZQorICAgIi0tbm8tdGFncyIgb3B0aW9uIHdoaWxlIGZldGNoaW5nIGZyb20gaW5kaXZpZHVhbCByZW1vdGVzICh0aGUgc2FtZQorICAgaXNzdWUgZXhpc3RlZCB3aXRoICItLXRhZ3MiLCBidXQgdGhlIGNvbWJpbmF0aW9uICItLWFsbCAtLXRhZ3MiIG1ha2VzCisgICBtdWNoIGxlc3Mgc2Vuc2UgdGhhbiAiLS1hbGwgLS1uby10YWdzIikuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgaHR0cCBoYWQgYW4gb2xkIHdvcmthcm91bmQgZm9yIGFuIHVubGlrZWx5IHNlcnZlcgorICAgbWlzY29uZmlndXJhdGlvbjsgaXQgdHVybnMgb3V0IHRoYXQgdGhpcyBodXJ0cyBkZWJ1Z2dhYmlsaXR5IG9mIHRoZQorICAgY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsLCBhbmQgaGFzIGJlZW4gcmV2ZXJ0ZWQuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgaHR0cCBhZHZlcnRpc2VkIHRoYXQgaXQgc3VwcG9ydHMgImRlZmxhdGUiLCB3aGljaAorICAgaXMgbXVjaCBsZXNzIGNvbW1vbiwgYW5kIGRpZCBub3QgYWR2ZXJ0aXNlIHRoZSBtb3JlIGNvbW1vbiAiZ3ppcCIgb24KKyAgIGl0cyBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyLgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIHRoZSBkdW1iLWh0dHAgcmV2aXNpb24gd2Fsa2VyIGNvdWxkIHNlZ2ZhdWx0IHdoZW4KKyAgIGN1cmwncyBtdWx0aSBpbnRlcmZhY2Ugd2FzIHVzZWQuCisKKyAqICJnaXQgZ2MgLS1hdXRvIiBub3RpZmllZCB0aGUgdXNlciB0aGF0IGF1dG8tcGFja2luZyBoYXMgdHJpZ2dlcmVkCisgICAgZXZlbiB1bmRlciB0aGUgIi0tcXVpZXQiIG9wdGlvbi4KKworICogQWZ0ZXIgImdpdGsiIHNob3dlZCB0aGUgY29udGVudHMgb2YgYSB0YWcsIG5laXRoZXIgIlJlcmVhZAorICAgcmVmZXJlbmNlcyIgbm9yICJSZWxvYWQiIHVwZGF0ZWQgd2hhdCBpcyBzaG93biBhcyB0aGUKKyAgIGNvbnRlbnRzIG9mIGl0IHdoZW4gdGhlIHVzZXIgb3Zlcndyb3RlIHRoZSB0YWcgd2l0aCAiZ2l0IHRhZyAtZiIuCisKKyAqICJnaXQgbG9nIC0tYWxsLW1hdGNoIC0tZ3JlcD1BIC0tZ3JlcD1CIiBvdWdodCB0byBzaG93IGNvbW1pdHMgdGhhdAorICAgbWVudGlvbiBib3RoIEEgYW5kIEIsIGJ1dCB3aGVuIHRoZXNlIHRocmVlIG9wdGlvbnMgYXJlIHVzZWQgd2l0aAorICAgLS1hdXRob3Igb3IgLS1jb21taXR0ZXIsIGl0IHNob3dlZCBjb21taXRzIHRoYXQgbWVudGlvbiBlaXRoZXIgQSBvcgorICAgQiAob3IgYm90aCkgaW5zdGVhZC4KKworICogVGhlICItWG91cnMiIGJhY2tlbmQgb3B0aW9uIHRvICJnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIiB3YXMgaWdub3JlZAorICAgZm9yIGJpbmFyeSBmaWxlcy4KKworICogImdpdCBwNCIsIHdoZW4gIi0tdXNlLWNsaWVudC1zcGVjIiBhbmQgIi0tZGV0ZWN0LWJyYW5jaGVzIiBhcmUgdXNlZAorICAgdG9nZXRoZXIsIG1pc2RldGVjdGVkIGJyYW5jaGVzLgorCisgKiAiZ2l0IHJlY2VpdmUtcGFjayIgKHRoZSBjb3VudGVycGFydCB0byAiZ2l0IHB1c2giKSBkaWQgbm90IGdpdmUKKyAgIHByb2dyZXNzIG91dHB1dCB3aGlsZSBwcm9jZXNzaW5nIG9iamVjdHMgaXQgcmVjZWl2ZWQgdG8gdGhlIHB1c2VyCisgICB3aGVuIHJ1biBvdmVyIHRoZSBzbWFydC1odHRwIHByb3RvY29sLgorCisgKiBXaGVuIHlvdSBtaXNzcGVsbCB0aGUgY29tbWFuZCBuYW1lIHlvdSBnaXZlIHRvIHRoZSAiZXhlYyIgYWN0aW9uIGluCisgICB0aGUgImdpdCByZWJhc2UgLWkiIGluc3RydWN0aW9uIHNoZWV0IHlvdSB3ZXJlIHRvbGQgdGhhdCAncmViYXNlJyBpcyBub3QgYQorICAgZ2l0IHN1YmNvbW1hbmQgZnJvbSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIi4KKworICogVGhlIHN1YmNvbW1hbmQgaW4gImdpdCByZW1vdGUiIHRvIHJlbW92ZSBhIGRlZmluZWQgcmVtb3RlIHdhcworICAgInJtIiBhbmQgdGhlIGNvbW1hbmQgZGlkIG5vdCB0YWtlIGEgZnVsbHktc3BlbGxlZCAicmVtb3ZlIi4KKworICogVGhlIGludGVyYWN0aXZlIHByb21wdCB0aGF0ICJnaXQgc2VuZC1lbWFpbCIgZ2l2ZXMgd2FzIGVycm9yIHByb25lLiBJdAorICAgYXNrZWQgIldoYXQgZS1tYWlsIGFkZHJlc3MgZG8geW91IHdhbnQgdG8gdXNlPyIgd2l0aCB0aGUgYWRkcmVzcyBpdAorICAgZ3Vlc3NlZCAoY29ycmVjdGx5KSB0aGUgdXNlciB3b3VsZCB3YW50IHRvIHVzZSBpbiBpdHMgcHJvbXB0LAorICAgdGVtcHRpbmcgdGhlIHVzZXIgdG8gc2F5ICJ5Ii4gQnV0IHRoZSByZXNwb25zZSB3YXMgdGFrZW4gYXMgIk5vLAorICAgcGxlYXNlIHVzZSAneScgYXMgdGhlIGUtbWFpbCBhZGRyZXNzIGluc3RlYWQiLCB3aGljaCBpcyBtb3N0CisgICBjZXJ0YWlubHkgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQuCisKKyAqICJnaXQgc2hvdyAtLWZvcm1hdD0nJWNpJyIgZGlkIG5vdCBnaXZlIHRoZSB0aW1lc3RhbXAgY29ycmVjdGx5IGZvcgorICAgY29tbWl0cyBjcmVhdGVkIHdpdGhvdXQgaHVtYW4gcmVhZGFibGUgbmFtZSBvbiB0aGUgImNvbW1pdHRlciIgbGluZS4KKworICogImdpdCBzaG93IC0tcXVpZXQiIG91Z2h0IHRvIGJlIGEgc3lub255bSBmb3IgImdpdCBzaG93IC1zIiwgYnV0CisgICB3YXNuJ3QuCisKKyAqICJnaXQgc3VibW9kdWxlIGZyb3R6IiB3YXMgbm90IGRpYWdub3NlZCBhcyAiZnJvdHoiIGJlaW5nIGFuIHVua25vd24KKyAgIHN1YmNvbW1hbmQgdG8gImdpdCBzdWJtb2R1bGUiOyB0aGUgdXNlciBpbnN0ZWFkIGdvdCBhIGNvbXBsYWludAorICAgdGhhdCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMiIHdhcyBydW4gd2l0aCBhbiB1bmtub3duIHBhdGggImZyb3R6Ii4KKworICogImdpdCBzdGF0dXMiIGhvbm9yZWQgdGhlIGlnbm9yZT1kaXJ0eSBzZXR0aW5ncyBpbiAuZ2l0bW9kdWxlcyBidXQKKyAgICJnaXQgY29tbWl0IiBkaWRuJ3QuCisKKyAqICJnaXR3ZWIiIGRpZCBub3QgZ2l2ZSB0aGUgY29ycmVjdCBjb21taXR0ZXIgdGltZXpvbmUgaW4gaXRzIGZlZWQKKyAgIG91dHB1dCBkdWUgdG8gYSB0eXBvLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiZjJjOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTAsMCArMSw0MzIgQEAKK0NoZWNrbGlzdCAoYW5kIGEgc2hvcnQgdmVyc2lvbiBmb3IgdGhlIGltcGF0aWVudCk6CisKKwlDb21taXRzOgorCisJLSBtYWtlIGNvbW1pdHMgb2YgbG9naWNhbCB1bml0cworCS0gY2hlY2sgZm9yIHVubmVjZXNzYXJ5IHdoaXRlc3BhY2Ugd2l0aCAiZ2l0IGRpZmYgLS1jaGVjayIKKwkgIGJlZm9yZSBjb21taXR0aW5nCisJLSBkbyBub3QgY2hlY2sgaW4gY29tbWVudGVkIG91dCBjb2RlIG9yIHVubmVlZGVkIGZpbGVzCisJLSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGJlIGEgc2hvcnQKKwkgIGRlc2NyaXB0aW9uICg1MCBjaGFyYWN0ZXJzIGlzIHRoZSBzb2Z0IGxpbWl0LCBzZWUgRElTQ1VTU0lPTgorCSAgaW4gZ2l0LWNvbW1pdCgxKSksIGFuZCBzaG91bGQgc2tpcCB0aGUgZnVsbCBzdG9wCisJLSB0aGUgYm9keSBzaG91bGQgcHJvdmlkZSBhIG1lYW5pbmdmdWwgY29tbWl0IG1lc3NhZ2UsIHdoaWNoOgorCSAgLiBleHBsYWlucyB0aGUgcHJvYmxlbSB0aGUgY2hhbmdlIHRyaWVzIHRvIHNvbHZlLCBpb3csIHdoYXQKKwkgICAgaXMgd3Jvbmcgd2l0aCB0aGUgY3VycmVudCBjb2RlIHdpdGhvdXQgdGhlIGNoYW5nZS4KKwkgIC4ganVzdGlmaWVzIHRoZSB3YXkgdGhlIGNoYW5nZSBzb2x2ZXMgdGhlIHByb2JsZW0sIGlvdywgd2h5CisJICAgIHRoZSByZXN1bHQgd2l0aCB0aGUgY2hhbmdlIGlzIGJldHRlci4KKwkgIC4gYWx0ZXJuYXRlIHNvbHV0aW9ucyBjb25zaWRlcmVkIGJ1dCBkaXNjYXJkZWQsIGlmIGFueS4KKwktIGRlc2NyaWJlIGNoYW5nZXMgaW4gaW1wZXJhdGl2ZSBtb29kLCBlLmcuICJtYWtlIHh5enp5IGRvIGZyb3R6IgorCSAgaW5zdGVhZCBvZiAiW1RoaXMgcGF0Y2hdIG1ha2VzIHh5enp5IGRvIGZyb3R6IiBvciAiW0ldIGNoYW5nZWQKKwkgIHh5enp5IHRvIGRvIGZyb3R6IiwgYXMgaWYgeW91IGFyZSBnaXZpbmcgb3JkZXJzIHRvIHRoZSBjb2RlYmFzZQorCSAgdG8gY2hhbmdlIGl0cyBiZWhhdmlvdXIuCisJLSB0cnkgdG8gbWFrZSBzdXJlIHlvdXIgZXhwbGFuYXRpb24gY2FuIGJlIHVuZGVyc3Rvb2Qgd2l0aG91dAorCSAgZXh0ZXJuYWwgcmVzb3VyY2VzLiBJbnN0ZWFkIG9mIGdpdmluZyBhIFVSTCB0byBhIG1haWxpbmcgbGlzdAorCSAgYXJjaGl2ZSwgc3VtbWFyaXplIHRoZSByZWxldmFudCBwb2ludHMgb2YgdGhlIGRpc2N1c3Npb24uCisJLSBhZGQgYSAiU2lnbmVkLW9mZi1ieTogWW91ciBOYW1lIDx5b3VAZXhhbXBsZS5jb20+IiBsaW5lIHRvIHRoZQorCSAgY29tbWl0IG1lc3NhZ2UgKG9yIGp1c3QgdXNlIHRoZSBvcHRpb24gIi1zIiB3aGVuIGNvbW1pdHRpbmcpCisJICB0byBjb25maXJtIHRoYXQgeW91IGFncmVlIHRvIHRoZSBEZXZlbG9wZXIncyBDZXJ0aWZpY2F0ZSBvZiBPcmlnaW4KKwktIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRlc3RzIGZvciB0aGUgYnVnIHlvdSBhcmUgZml4aW5nCisJLSBtYWtlIHN1cmUgdGhhdCB0aGUgdGVzdCBzdWl0ZSBwYXNzZXMgYWZ0ZXIgeW91ciBjb21taXQKKworCVBhdGNoOgorCisJLSB1c2UgImdpdCBmb3JtYXQtcGF0Y2ggLU0iIHRvIGNyZWF0ZSB0aGUgcGF0Y2gKKwktIGRvIG5vdCBQR1Agc2lnbiB5b3VyIHBhdGNoCisJLSBkbyBub3QgYXR0YWNoIHlvdXIgcGF0Y2gsIGJ1dCByZWFkIGluIHRoZSBtYWlsCisJICBib2R5LCB1bmxlc3MgeW91IGNhbm5vdCB0ZWFjaCB5b3VyIG1haWxlciB0bworCSAgbGVhdmUgdGhlIGZvcm1hdHRpbmcgb2YgdGhlIHBhdGNoIGFsb25lLgorCS0gYmUgY2FyZWZ1bCBkb2luZyBjdXQgJiBwYXN0ZSBpbnRvIHlvdXIgbWFpbGVyLCBub3QgdG8KKwkgIGNvcnJ1cHQgd2hpdGVzcGFjZXMuCisJLSBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gKHdoaWNoIGlzIHVuc3VpdGFibGUgZm9yCisJICB0aGUgY29tbWl0IG1lc3NhZ2UpIGJldHdlZW4gdGhlICItLS0iIGFuZCB0aGUgZGlmZnN0YXQKKwktIGlmIHlvdSBjaGFuZ2UsIGFkZCwgb3IgcmVtb3ZlIGEgY29tbWFuZCBsaW5lIG9wdGlvbiBvcgorCSAgbWFrZSBzb21lIG90aGVyIHVzZXIgaW50ZXJmYWNlIGNoYW5nZSwgdGhlIGFzc29jaWF0ZWQKKwkgIGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQgYXMgd2VsbC4KKwktIGlmIHlvdXIgbmFtZSBpcyBub3Qgd3JpdGFibGUgaW4gQVNDSUksIG1ha2Ugc3VyZSB0aGF0CisJICB5b3Ugc2VuZCBvZmYgYSBtZXNzYWdlIGluIHRoZSBjb3JyZWN0IGVuY29kaW5nLgorCS0gc2VuZCB0aGUgcGF0Y2ggdG8gdGhlIGxpc3QgKGdpdEB2Z2VyLmtlcm5lbC5vcmcpIGFuZCB0aGUKKwkgIG1haW50YWluZXIgKGdpdHN0ZXJAcG9ib3guY29tKSBpZiAoYW5kIG9ubHkgaWYpIHRoZSBwYXRjaAorCSAgaXMgcmVhZHkgZm9yIGluY2x1c2lvbi4gSWYgeW91IHVzZSBnaXQtc2VuZC1lbWFpbCgxKSwKKwkgIHBsZWFzZSB0ZXN0IGl0IGZpcnN0IGJ5IHNlbmRpbmcgZW1haWwgdG8geW91cnNlbGYuCisJLSBzZWUgYmVsb3cgZm9yIGluc3RydWN0aW9ucyBzcGVjaWZpYyB0byB5b3VyIG1haWxlcgorCitMb25nIHZlcnNpb246CisKK0kgc3RhcnRlZCByZWFkaW5nIG92ZXIgdGhlIFN1Ym1pdHRpbmdQYXRjaGVzIGRvY3VtZW50IGZvciBMaW51eAora2VybmVsLCBwcmltYXJpbHkgYmVjYXVzZSBJIHdhbnRlZCB0byBoYXZlIGEgZG9jdW1lbnQgc2ltaWxhciB0bworaXQgZm9yIHRoZSBjb3JlIEdJVCB0byBtYWtlIHN1cmUgcGVvcGxlIHVuZGVyc3RhbmQgd2hhdCB0aGV5IGFyZQorZG9pbmcgd2hlbiB0aGV5IHdyaXRlICJTaWduZWQtb2ZmLWJ5IiBsaW5lLgorCitCdXQgdGhlIHBhdGNoIHN1Ym1pc3Npb24gcmVxdWlyZW1lbnRzIGFyZSBhIGxvdCBtb3JlIHJlbGF4ZWQKK2hlcmUgb24gdGhlIHRlY2huaWNhbC9jb250ZW50cyBmcm9udCwgYmVjYXVzZSB0aGUgY29yZSBHSVQgaXMKK3Rob3VzYW5kIHRpbWVzIHNtYWxsZXIgOy0pLiAgU28gaGVyZSBpcyBvbmx5IHRoZSByZWxldmFudCBiaXRzLgorCisoMCkgRGVjaWRlIHdoYXQgdG8gYmFzZSB5b3VyIHdvcmsgb24uCisKK0luIGdlbmVyYWwsIGFsd2F5cyBiYXNlIHlvdXIgd29yayBvbiB0aGUgb2xkZXN0IGJyYW5jaCB0aGF0IHlvdXIKK2NoYW5nZSBpcyByZWxldmFudCB0by4KKworIC0gQSBidWdmaXggc2hvdWxkIGJlIGJhc2VkIG9uICdtYWludCcgaW4gZ2VuZXJhbC4gSWYgdGhlIGJ1ZyBpcyBub3QKKyAgIHByZXNlbnQgaW4gJ21haW50JywgYmFzZSBpdCBvbiAnbWFzdGVyJy4gRm9yIGEgYnVnIHRoYXQncyBub3QgeWV0CisgICBpbiAnbWFzdGVyJywgZmluZCB0aGUgdG9waWMgdGhhdCBpbnRyb2R1Y2VzIHRoZSByZWdyZXNzaW9uLCBhbmQKKyAgIGJhc2UgeW91ciB3b3JrIG9uIHRoZSB0aXAgb2YgdGhlIHRvcGljLgorCisgLSBBIG5ldyBmZWF0dXJlIHNob3VsZCBiZSBiYXNlZCBvbiAnbWFzdGVyJyBpbiBnZW5lcmFsLiBJZiB0aGUgbmV3CisgICBmZWF0dXJlIGRlcGVuZHMgb24gYSB0b3BpYyB0aGF0IGlzIGluICdwdScsIGJ1dCBub3QgaW4gJ21hc3RlcicsCisgICBiYXNlIHlvdXIgd29yayBvbiB0aGUgdGlwIG9mIHRoYXQgdG9waWMuCisKKyAtIENvcnJlY3Rpb25zIGFuZCBlbmhhbmNlbWVudHMgdG8gYSB0b3BpYyBub3QgeWV0IGluICdtYXN0ZXInIHNob3VsZAorICAgYmUgYmFzZWQgb24gdGhlIHRpcCBvZiB0aGF0IHRvcGljLiBJZiB0aGUgdG9waWMgaGFzIG5vdCBiZWVuIG1lcmdlZAorICAgdG8gJ25leHQnLCBpdCdzIGFscmlnaHQgdG8gYWRkIGEgbm90ZSB0byBzcXVhc2ggbWlub3IgY29ycmVjdGlvbnMKKyAgIGludG8gdGhlIHNlcmllcy4KKworIC0gSW4gdGhlIGV4Y2VwdGlvbmFsIGNhc2UgdGhhdCBhIG5ldyBmZWF0dXJlIGRlcGVuZHMgb24gc2V2ZXJhbCB0b3BpY3MKKyAgIG5vdCBpbiAnbWFzdGVyJywgc3RhcnQgd29ya2luZyBvbiAnbmV4dCcgb3IgJ3B1JyBwcml2YXRlbHkgYW5kIHNlbmQKKyAgIG91dCBwYXRjaGVzIGZvciBkaXNjdXNzaW9uLiBCZWZvcmUgdGhlIGZpbmFsIG1lcmdlLCB5b3UgbWF5IGhhdmUgdG8KKyAgIHdhaXQgdW50aWwgc29tZSBvZiB0aGUgZGVwZW5kZW50IHRvcGljcyBncmFkdWF0ZSB0byAnbWFzdGVyJywgYW5kCisgICByZWJhc2UgeW91ciB3b3JrLgorCitUbyBmaW5kIHRoZSB0aXAgb2YgYSB0b3BpYyBicmFuY2gsIHJ1biAiZ2l0IGxvZyAtLWZpcnN0LXBhcmVudAorbWFzdGVyLi5wdSIgYW5kIGxvb2sgZm9yIHRoZSBtZXJnZSBjb21taXQuIFRoZSBzZWNvbmQgcGFyZW50IG9mIHRoaXMKK2NvbW1pdCBpcyB0aGUgdGlwIG9mIHRoZSB0b3BpYyBicmFuY2guCisKKygxKSBNYWtlIHNlcGFyYXRlIGNvbW1pdHMgZm9yIGxvZ2ljYWxseSBzZXBhcmF0ZSBjaGFuZ2VzLgorCitVbmxlc3MgeW91ciBwYXRjaCBpcyByZWFsbHkgdHJpdmlhbCwgeW91IHNob3VsZCBub3QgYmUgc2VuZGluZworb3V0IGEgcGF0Y2ggdGhhdCB3YXMgZ2VuZXJhdGVkIGJldHdlZW4geW91ciB3b3JraW5nIHRyZWUgYW5kCit5b3VyIGNvbW1pdCBoZWFkLiAgSW5zdGVhZCwgYWx3YXlzIG1ha2UgYSBjb21taXQgd2l0aCBjb21wbGV0ZQorY29tbWl0IG1lc3NhZ2UgYW5kIGdlbmVyYXRlIGEgc2VyaWVzIG9mIHBhdGNoZXMgZnJvbSB5b3VyCityZXBvc2l0b3J5LiAgSXQgaXMgYSBnb29kIGRpc2NpcGxpbmUuCisKK0dpdmUgYW4gZXhwbGFuYXRpb24gZm9yIHRoZSBjaGFuZ2UocykgdGhhdCBpcyBkZXRhaWxlZCBlbm91Z2ggc28KK3RoYXQgcGVvcGxlIGNhbiBqdWRnZSBpZiBpdCBpcyBnb29kIHRoaW5nIHRvIGRvLCB3aXRob3V0IHJlYWRpbmcKK3RoZSBhY3R1YWwgcGF0Y2ggdGV4dCB0byBkZXRlcm1pbmUgaG93IHdlbGwgdGhlIGNvZGUgZG9lcyB3aGF0Cit0aGUgZXhwbGFuYXRpb24gcHJvbWlzZXMgdG8gZG8uCisKK0lmIHlvdXIgZGVzY3JpcHRpb24gc3RhcnRzIHRvIGdldCB0b28gbG9uZywgdGhhdCdzIGEgc2lnbiB0aGF0IHlvdQorcHJvYmFibHkgbmVlZCB0byBzcGxpdCB1cCB5b3VyIGNvbW1pdCB0byBmaW5lciBncmFpbmVkIHBpZWNlcy4KK1RoYXQgYmVpbmcgc2FpZCwgcGF0Y2hlcyB3aGljaCBwbGFpbmx5IGRlc2NyaWJlIHRoZSB0aGluZ3MgdGhhdAoraGVscCByZXZpZXdlcnMgY2hlY2sgdGhlIHBhdGNoLCBhbmQgZnV0dXJlIG1haW50YWluZXJzIHVuZGVyc3RhbmQKK3RoZSBjb2RlLCBhcmUgdGhlIG1vc3QgYmVhdXRpZnVsIHBhdGNoZXMuICBEZXNjcmlwdGlvbnMgdGhhdCBzdW1tYXJpc2UKK3RoZSBwb2ludCBpbiB0aGUgc3ViamVjdCB3ZWxsLCBhbmQgZGVzY3JpYmUgdGhlIG1vdGl2YXRpb24gZm9yIHRoZQorY2hhbmdlLCB0aGUgYXBwcm9hY2ggdGFrZW4gYnkgdGhlIGNoYW5nZSwgYW5kIGlmIHJlbGV2YW50IGhvdyB0aGlzCitkaWZmZXJzIHN1YnN0YW50aWFsbHkgZnJvbSB0aGUgcHJpb3IgdmVyc2lvbiwgYXJlIGFsbCBnb29kIHRoaW5ncwordG8gaGF2ZS4KKworT2gsIGFub3RoZXIgdGhpbmcuICBJIGFtIHBpY2t5IGFib3V0IHdoaXRlc3BhY2VzLiAgTWFrZSBzdXJlIHlvdXIKK2NoYW5nZXMgZG8gbm90IHRyaWdnZXIgZXJyb3JzIHdpdGggdGhlIHNhbXBsZSBwcmUtY29tbWl0IGhvb2sgc2hpcHBlZAoraW4gdGVtcGxhdGVzL2hvb2tzLS1wcmUtY29tbWl0LiAgVG8gaGVscCBlbnN1cmUgdGhpcyBkb2VzIG5vdCBoYXBwZW4sCitydW4gZ2l0IGRpZmYgLS1jaGVjayBvbiB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjb21taXQuCisKKworKDFhKSBUcnkgdG8gYmUgbmljZSB0byBvbGRlciBDIGNvbXBpbGVycworCitXZSB0cnkgdG8gc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgQyBjb21waWxlcnMgdG8gY29tcGlsZQorZ2l0IHdpdGguIFRoYXQgbWVhbnMgdGhhdCB5b3Ugc2hvdWxkIG5vdCB1c2UgQzk5IGluaXRpYWxpemVycywgZXZlbgoraWYgYSBsb3Qgb2YgY29tcGlsZXJzIGdyb2sgaXQuCisKK0Fsc28sIHZhcmlhYmxlcyBoYXZlIHRvIGJlIGRlY2xhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJsb2NrCisoeW91IGNhbiBjaGVjayB0aGlzIHdpdGggZ2NjLCB1c2luZyB0aGUgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQKK29wdGlvbikuCisKK0Fub3RoZXIgdGhpbmc6IE5VTEwgcG9pbnRlcnMgc2hhbGwgYmUgd3JpdHRlbiBhcyBOVUxMLCBub3QgYXMgMC4KKworCisoMikgR2VuZXJhdGUgeW91ciBwYXRjaCB1c2luZyBnaXQgdG9vbHMgb3V0IG9mIHlvdXIgY29tbWl0cy4KKworZ2l0IGJhc2VkIGRpZmYgdG9vbHMgZ2VuZXJhdGUgdW5pZGlmZiB3aGljaCBpcyB0aGUgcHJlZmVycmVkIGZvcm1hdC4KKworWW91IGRvIG5vdCBoYXZlIHRvIGJlIGFmcmFpZCB0byB1c2UgLU0gb3B0aW9uIHRvICJnaXQgZGlmZiIgb3IKKyJnaXQgZm9ybWF0LXBhdGNoIiwgaWYgeW91ciBwYXRjaCBpbnZvbHZlcyBmaWxlIHJlbmFtZXMuICBUaGUKK3JlY2VpdmluZyBlbmQgY2FuIGhhbmRsZSB0aGVtIGp1c3QgZmluZS4KKworUGxlYXNlIG1ha2Ugc3VyZSB5b3VyIHBhdGNoIGRvZXMgbm90IGluY2x1ZGUgYW55IGV4dHJhIGZpbGVzCit3aGljaCBkbyBub3QgYmVsb25nIGluIGEgcGF0Y2ggc3VibWlzc2lvbi4gIE1ha2Ugc3VyZSB0byByZXZpZXcKK3lvdXIgcGF0Y2ggYWZ0ZXIgZ2VuZXJhdGluZyBpdCwgdG8gZW5zdXJlIGFjY3VyYWN5LiAgQmVmb3JlCitzZW5kaW5nIG91dCwgcGxlYXNlIG1ha2Ugc3VyZSBpdCBjbGVhbmx5IGFwcGxpZXMgdG8gdGhlICJtYXN0ZXIiCiticmFuY2ggaGVhZC4gIElmIHlvdSBhcmUgcHJlcGFyaW5nIGEgd29yayBiYXNlZCBvbiAibmV4dCIgYnJhbmNoLAordGhhdCBpcyBmaW5lLCBidXQgcGxlYXNlIG1hcmsgaXQgYXMgc3VjaC4KKworCisoMykgU2VuZGluZyB5b3VyIHBhdGNoZXMuCisKK1Blb3BsZSBvbiB0aGUgZ2l0IG1haWxpbmcgbGlzdCBuZWVkIHRvIGJlIGFibGUgdG8gcmVhZCBhbmQKK2NvbW1lbnQgb24gdGhlIGNoYW5nZXMgeW91IGFyZSBzdWJtaXR0aW5nLiAgSXQgaXMgaW1wb3J0YW50IGZvcgorYSBkZXZlbG9wZXIgdG8gYmUgYWJsZSB0byAicXVvdGUiIHlvdXIgY2hhbmdlcywgdXNpbmcgc3RhbmRhcmQKK2UtbWFpbCB0b29scywgc28gdGhhdCB0aGV5IG1heSBjb21tZW50IG9uIHNwZWNpZmljIHBvcnRpb25zIG9mCit5b3VyIGNvZGUuICBGb3IgdGhpcyByZWFzb24sIGFsbCBwYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQKKyJpbmxpbmUiLiAgV0FSTklORzogQmUgd2FyeSBvZiB5b3VyIE1VQXMgd29yZC13cmFwCitjb3JydXB0aW5nIHlvdXIgcGF0Y2guICBEbyBub3QgY3V0LW4tcGFzdGUgeW91ciBwYXRjaDsgeW91IGNhbgorbG9zZSB0YWJzIHRoYXQgd2F5IGlmIHlvdSBhcmUgbm90IGNhcmVmdWwuCisKK0l0IGlzIGEgY29tbW9uIGNvbnZlbnRpb24gdG8gcHJlZml4IHlvdXIgc3ViamVjdCBsaW5lIHdpdGgKK1tQQVRDSF0uICBUaGlzIGxldHMgcGVvcGxlIGVhc2lseSBkaXN0aW5ndWlzaCBwYXRjaGVzIGZyb20gb3RoZXIKK2UtbWFpbCBkaXNjdXNzaW9ucy4gIFVzZSBvZiBhZGRpdGlvbmFsIG1hcmtlcnMgYWZ0ZXIgUEFUQ0ggYW5kCit0aGUgY2xvc2luZyBicmFja2V0IHRvIG1hcmsgdGhlIG5hdHVyZSBvZiB0aGUgcGF0Y2ggaXMgYWxzbworZW5jb3VyYWdlZC4gIEUuZy4gW1BBVENIL1JGQ10gaXMgb2Z0ZW4gdXNlZCB3aGVuIHRoZSBwYXRjaCBpcworbm90IHJlYWR5IHRvIGJlIGFwcGxpZWQgYnV0IGl0IGlzIGZvciBkaXNjdXNzaW9uLCBbUEFUQ0ggdjJdLAorW1BBVENIIHYzXSBldGMuIGFyZSBvZnRlbiBzZWVuIHdoZW4geW91IGFyZSBzZW5kaW5nIGFuIHVwZGF0ZSB0bword2hhdCB5b3UgaGF2ZSBwcmV2aW91c2x5IHNlbnQuCisKKyJnaXQgZm9ybWF0LXBhdGNoIiBjb21tYW5kIGZvbGxvd3MgdGhlIGJlc3QgY3VycmVudCBwcmFjdGljZSB0bworZm9ybWF0IHRoZSBib2R5IG9mIGFuIGUtbWFpbCBtZXNzYWdlLiAgQXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKK3BhdGNoIHNob3VsZCBjb21lIHlvdXIgY29tbWl0IG1lc3NhZ2UsIGVuZGluZyB3aXRoIHRoZQorU2lnbmVkLW9mZi1ieTogbGluZXMsIGFuZCBhIGxpbmUgdGhhdCBjb25zaXN0cyBvZiB0aHJlZSBkYXNoZXMsCitmb2xsb3dlZCBieSB0aGUgZGlmZnN0YXQgaW5mb3JtYXRpb24gYW5kIHRoZSBwYXRjaCBpdHNlbGYuICBJZgoreW91IGFyZSBmb3J3YXJkaW5nIGEgcGF0Y2ggZnJvbSBzb21lYm9keSBlbHNlLCBvcHRpb25hbGx5LCBhdAordGhlIGJlZ2lubmluZyBvZiB0aGUgZS1tYWlsIG1lc3NhZ2UganVzdCBiZWZvcmUgdGhlIGNvbW1pdAorbWVzc2FnZSBzdGFydHMsIHlvdSBjYW4gcHV0IGEgIkZyb206ICIgbGluZSB0byBuYW1lIHRoYXQgcGVyc29uLgorCitZb3Ugb2Z0ZW4gd2FudCB0byBhZGQgYWRkaXRpb25hbCBleHBsYW5hdGlvbiBhYm91dCB0aGUgcGF0Y2gsCitvdGhlciB0aGFuIHRoZSBjb21taXQgbWVzc2FnZSBpdHNlbGYuICBQbGFjZSBzdWNoICJjb3ZlciBsZXR0ZXIiCittYXRlcmlhbCBiZXR3ZWVuIHRoZSB0aHJlZSBkYXNoIGxpbmVzIGFuZCB0aGUgZGlmZnN0YXQuCisKK0RvIG5vdCBhdHRhY2ggdGhlIHBhdGNoIGFzIGEgTUlNRSBhdHRhY2htZW50LCBjb21wcmVzc2VkIG9yIG5vdC4KK0RvIG5vdCBsZXQgeW91ciBlLW1haWwgY2xpZW50IHNlbmQgcXVvdGVkLXByaW50YWJsZS4gIERvIG5vdCBsZXQKK3lvdXIgZS1tYWlsIGNsaWVudCBzZW5kIGZvcm1hdD1mbG93ZWQgd2hpY2ggd291bGQgZGVzdHJveQord2hpdGVzcGFjZXMgaW4geW91ciBwYXRjaGVzLiBNYW55Citwb3B1bGFyIGUtbWFpbCBhcHBsaWNhdGlvbnMgd2lsbCBub3QgYWx3YXlzIHRyYW5zbWl0IGEgTUlNRQorYXR0YWNobWVudCBhcyBwbGFpbiB0ZXh0LCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBjb21tZW50IG9uCit5b3VyIGNvZGUuICBBIE1JTUUgYXR0YWNobWVudCBhbHNvIHRha2VzIGEgYml0IG1vcmUgdGltZSB0bworcHJvY2Vzcy4gIFRoaXMgZG9lcyBub3QgZGVjcmVhc2UgdGhlIGxpa2VsaWhvb2Qgb2YgeW91cgorTUlNRS1hdHRhY2hlZCBjaGFuZ2UgYmVpbmcgYWNjZXB0ZWQsIGJ1dCBpdCBtYWtlcyBpdCBtb3JlIGxpa2VseQordGhhdCBpdCB3aWxsIGJlIHBvc3Rwb25lZC4KKworRXhjZXB0aW9uOiAgSWYgeW91ciBtYWlsZXIgaXMgbWFuZ2xpbmcgcGF0Y2hlcyB0aGVuIHNvbWVvbmUgbWF5IGFzaworeW91IHRvIHJlLXNlbmQgdGhlbSB1c2luZyBNSU1FLCB0aGF0IGlzIE9LLgorCitEbyBub3QgUEdQIHNpZ24geW91ciBwYXRjaCwgYXQgbGVhc3QgZm9yIG5vdy4gIE1vc3QgbGlrZWx5LCB5b3VyCittYWludGFpbmVyIG9yIG90aGVyIHBlb3BsZSBvbiB0aGUgbGlzdCB3b3VsZCBub3QgaGF2ZSB5b3VyIFBHUAora2V5IGFuZCB3b3VsZCBub3QgYm90aGVyIG9idGFpbmluZyBpdCBhbnl3YXkuICBZb3VyIHBhdGNoIGlzIG5vdAoranVkZ2VkIGJ5IHdobyB5b3UgYXJlOyBhIGdvb2QgcGF0Y2ggZnJvbSBhbiB1bmtub3duIG9yaWdpbiBoYXMgYQorZmFyIGJldHRlciBjaGFuY2Ugb2YgYmVpbmcgYWNjZXB0ZWQgdGhhbiBhIHBhdGNoIGZyb20gYSBrbm93biwKK3Jlc3BlY3RlZCBvcmlnaW4gdGhhdCBpcyBkb25lIHBvb3JseSBvciBkb2VzIGluY29ycmVjdCB0aGluZ3MuCisKK0lmIHlvdSByZWFsbHkgcmVhbGx5IHJlYWxseSByZWFsbHkgd2FudCB0byBkbyBhIFBHUCBzaWduZWQKK3BhdGNoLCBmb3JtYXQgaXQgYXMgIm11bHRpcGFydC9zaWduZWQiLCBub3QgYSB0ZXh0L3BsYWluIG1lc3NhZ2UKK3RoYXQgc3RhcnRzIHdpdGggJy0tLS0tQkVHSU4gUEdQIFNJR05FRCBNRVNTQUdFLS0tLS0nLiAgVGhhdCBpcworbm90IGEgdGV4dC9wbGFpbiwgaXQncyBzb21ldGhpbmcgZWxzZS4KKworVW5sZXNzIHlvdXIgcGF0Y2ggaXMgYSB2ZXJ5IHRyaXZpYWwgYW5kIGFuIG9idmlvdXNseSBjb3JyZWN0IG9uZSwKK2ZpcnN0IHNlbmQgaXQgd2l0aCAiVG86IiBzZXQgdG8gdGhlIG1haWxpbmcgbGlzdCwgd2l0aCAiY2M6IiBsaXN0aW5nCitwZW9wbGUgd2hvIGFyZSBpbnZvbHZlZCBpbiB0aGUgYXJlYSB5b3UgYXJlIHRvdWNoaW5nICh0aGUgb3V0cHV0IGZyb20KKyJnaXQgYmxhbWUgJHBhdGgiIGFuZCAiZ2l0IHNob3J0bG9nIC0tbm8tbWVyZ2VzICRwYXRoIiB3b3VsZCBoZWxwIHRvCitpZGVudGlmeSB0aGVtKSwgdG8gc29saWNpdCBjb21tZW50cyBhbmQgcmV2aWV3cy4gIEFmdGVyIHRoZSBsaXN0CityZWFjaGVkIGEgY29uc2Vuc3VzIHRoYXQgaXQgaXMgYSBnb29kIGlkZWEgdG8gYXBwbHkgdGhlIHBhdGNoLCByZS1zZW5kCitpdCB3aXRoICJUbzoiIHNldCB0byB0aGUgbWFpbnRhaW5lciBhbmQgb3B0aW9uYWxseSAiY2M6IiB0aGUgbGlzdCBmb3IKK2luY2x1c2lvbi4gIERvIG5vdCBmb3JnZXQgdG8gYWRkIHRyYWlsZXJzIHN1Y2ggYXMgIkFja2VkLWJ5OiIsCisiUmV2aWV3ZWQtYnk6IiBhbmQgIlRlc3RlZC1ieToiIGFmdGVyIHlvdXIgIlNpZ25lZC1vZmYtYnk6IiBsaW5lIGFzCituZWNlc3NhcnkuCisKKworKDQpIFNpZ24geW91ciB3b3JrCisKK1RvIGltcHJvdmUgdHJhY2tpbmcgb2Ygd2hvIGRpZCB3aGF0LCB3ZSd2ZSBib3Jyb3dlZCB0aGUKKyJzaWduLW9mZiIgcHJvY2VkdXJlIGZyb20gdGhlIExpbnV4IGtlcm5lbCBwcm9qZWN0IG9uIHBhdGNoZXMKK3RoYXQgYXJlIGJlaW5nIGVtYWlsZWQgYXJvdW5kLiAgQWx0aG91Z2ggY29yZSBHSVQgaXMgYSBsb3QKK3NtYWxsZXIgcHJvamVjdCBpdCBpcyBhIGdvb2QgZGlzY2lwbGluZSB0byBmb2xsb3cgaXQuCisKK1RoZSBzaWduLW9mZiBpcyBhIHNpbXBsZSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGV4cGxhbmF0aW9uIGZvcgordGhlIHBhdGNoLCB3aGljaCBjZXJ0aWZpZXMgdGhhdCB5b3Ugd3JvdGUgaXQgb3Igb3RoZXJ3aXNlIGhhdmUKK3RoZSByaWdodCB0byBwYXNzIGl0IG9uIGFzIGEgb3Blbi1zb3VyY2UgcGF0Y2guICBUaGUgcnVsZXMgYXJlCitwcmV0dHkgc2ltcGxlOiBpZiB5b3UgY2FuIGNlcnRpZnkgdGhlIGJlbG93OgorCisgICAgICAgIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEKKworICAgICAgICBCeSBtYWtpbmcgYSBjb250cmlidXRpb24gdG8gdGhpcyBwcm9qZWN0LCBJIGNlcnRpZnkgdGhhdDoKKworICAgICAgICAoYSkgVGhlIGNvbnRyaWJ1dGlvbiB3YXMgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0IGJ5IG1lIGFuZCBJCisgICAgICAgICAgICBoYXZlIHRoZSByaWdodCB0byBzdWJtaXQgaXQgdW5kZXIgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UKKyAgICAgICAgICAgIGluZGljYXRlZCBpbiB0aGUgZmlsZTsgb3IKKworICAgICAgICAoYikgVGhlIGNvbnRyaWJ1dGlvbiBpcyBiYXNlZCB1cG9uIHByZXZpb3VzIHdvcmsgdGhhdCwgdG8gdGhlIGJlc3QKKyAgICAgICAgICAgIG9mIG15IGtub3dsZWRnZSwgaXMgY292ZXJlZCB1bmRlciBhbiBhcHByb3ByaWF0ZSBvcGVuIHNvdXJjZQorICAgICAgICAgICAgbGljZW5zZSBhbmQgSSBoYXZlIHRoZSByaWdodCB1bmRlciB0aGF0IGxpY2Vuc2UgdG8gc3VibWl0IHRoYXQKKyAgICAgICAgICAgIHdvcmsgd2l0aCBtb2RpZmljYXRpb25zLCB3aGV0aGVyIGNyZWF0ZWQgaW4gd2hvbGUgb3IgaW4gcGFydAorICAgICAgICAgICAgYnkgbWUsIHVuZGVyIHRoZSBzYW1lIG9wZW4gc291cmNlIGxpY2Vuc2UgKHVubGVzcyBJIGFtCisgICAgICAgICAgICBwZXJtaXR0ZWQgdG8gc3VibWl0IHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UpLCBhcyBpbmRpY2F0ZWQKKyAgICAgICAgICAgIGluIHRoZSBmaWxlOyBvcgorCisgICAgICAgIChjKSBUaGUgY29udHJpYnV0aW9uIHdhcyBwcm92aWRlZCBkaXJlY3RseSB0byBtZSBieSBzb21lIG90aGVyCisgICAgICAgICAgICBwZXJzb24gd2hvIGNlcnRpZmllZCAoYSksIChiKSBvciAoYykgYW5kIEkgaGF2ZSBub3QgbW9kaWZpZWQKKyAgICAgICAgICAgIGl0LgorCisJKGQpIEkgdW5kZXJzdGFuZCBhbmQgYWdyZWUgdGhhdCB0aGlzIHByb2plY3QgYW5kIHRoZSBjb250cmlidXRpb24KKwkgICAgYXJlIHB1YmxpYyBhbmQgdGhhdCBhIHJlY29yZCBvZiB0aGUgY29udHJpYnV0aW9uIChpbmNsdWRpbmcgYWxsCisJICAgIHBlcnNvbmFsIGluZm9ybWF0aW9uIEkgc3VibWl0IHdpdGggaXQsIGluY2x1ZGluZyBteSBzaWduLW9mZikgaXMKKwkgICAgbWFpbnRhaW5lZCBpbmRlZmluaXRlbHkgYW5kIG1heSBiZSByZWRpc3RyaWJ1dGVkIGNvbnNpc3RlbnQgd2l0aAorCSAgICB0aGlzIHByb2plY3Qgb3IgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UocykgaW52b2x2ZWQuCisKK3RoZW4geW91IGp1c3QgYWRkIGEgbGluZSBzYXlpbmcKKworCVNpZ25lZC1vZmYtYnk6IFJhbmRvbSBKIERldmVsb3BlciA8cmFuZG9tQGRldmVsb3Blci5leGFtcGxlLm9yZz4KKworVGhpcyBsaW5lIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIGJ5IGdpdCBpZiB5b3UgcnVuIHRoZSBnaXQtY29tbWl0Citjb21tYW5kIHdpdGggdGhlIC1zIG9wdGlvbi4KKworTm90aWNlIHRoYXQgeW91IGNhbiBwbGFjZSB5b3VyIG93biBTaWduZWQtb2ZmLWJ5OiBsaW5lIHdoZW4KK2ZvcndhcmRpbmcgc29tZWJvZHkgZWxzZSdzIHBhdGNoIHdpdGggdGhlIGFib3ZlIHJ1bGVzIGZvcgorRC1DLU8uICBJbmRlZWQgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIGRvIHNvLiAgRG8gbm90IGZvcmdldCB0bworcGxhY2UgYW4gaW4tYm9keSAiRnJvbTogIiBsaW5lIGF0IHRoZSBiZWdpbm5pbmcgdG8gcHJvcGVybHkgYXR0cmlidXRlCit0aGUgY2hhbmdlIHRvIGl0cyB0cnVlIGF1dGhvciAoc2VlICgyKSBhYm92ZSkuCisKK0Fsc28gbm90aWNlIHRoYXQgYSByZWFsIG5hbWUgaXMgdXNlZCBpbiB0aGUgU2lnbmVkLW9mZi1ieTogbGluZS4gUGxlYXNlCitkb24ndCBoaWRlIHlvdXIgcmVhbCBuYW1lLgorCitJZiB5b3UgbGlrZSwgeW91IGNhbiBwdXQgZXh0cmEgdGFncyBhdCB0aGUgZW5kOgorCisxLiAiUmVwb3J0ZWQtYnk6IiBpcyB1c2VkIHRvIGNyZWRpdCBzb21lb25lIHdobyBmb3VuZCB0aGUgYnVnIHRoYXQKKyAgIHRoZSBwYXRjaCBhdHRlbXB0cyB0byBmaXguCisyLiAiQWNrZWQtYnk6IiBzYXlzIHRoYXQgdGhlIHBlcnNvbiB3aG8gaXMgbW9yZSBmYW1pbGlhciB3aXRoIHRoZSBhcmVhCisgICB0aGUgcGF0Y2ggYXR0ZW1wdHMgdG8gbW9kaWZ5IGxpa2VkIHRoZSBwYXRjaC4KKzMuICJSZXZpZXdlZC1ieToiLCB1bmxpa2UgdGhlIG90aGVyIHRhZ3MsIGNhbiBvbmx5IGJlIG9mZmVyZWQgYnkgdGhlCisgICByZXZpZXdlciBhbmQgbWVhbnMgdGhhdCBzaGUgaXMgY29tcGxldGVseSBzYXRpc2ZpZWQgdGhhdCB0aGUgcGF0Y2gKKyAgIGlzIHJlYWR5IGZvciBhcHBsaWNhdGlvbi4gIEl0IGlzIHVzdWFsbHkgb2ZmZXJlZCBvbmx5IGFmdGVyIGEKKyAgIGRldGFpbGVkIHJldmlldy4KKzQuICJUZXN0ZWQtYnk6IiBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHBlcnNvbiBhcHBsaWVkIHRoZSBwYXRjaAorICAgYW5kIGZvdW5kIGl0IHRvIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LgorCitZb3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIHRhZyBvciB1c2Ugb25lIHRoYXQncyBpbiBjb21tb24gdXNhZ2UKK3N1Y2ggYXMgIlRoYW5rcy10bzoiLCAiQmFzZWQtb24tcGF0Y2gtYnk6Iiwgb3IgIk1lbnRvcmVkLWJ5OiIuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQW4gaWRlYWwgcGF0Y2ggZmxvdworCitIZXJlIGlzIGFuIGlkZWFsIHBhdGNoIGZsb3cgZm9yIHRoaXMgcHJvamVjdCB0aGUgY3VycmVudCBtYWludGFpbmVyCitzdWdnZXN0cyB0byB0aGUgY29udHJpYnV0b3JzOgorCisgKDApIFlvdSBjb21lIHVwIHdpdGggYW4gaXRjaC4gIFlvdSBjb2RlIGl0IHVwLgorCisgKDEpIFNlbmQgaXQgdG8gdGhlIGxpc3QgYW5kIGNjIHBlb3BsZSB3aG8gbWF5IG5lZWQgdG8ga25vdyBhYm91dAorICAgICB0aGUgY2hhbmdlLgorCisgICAgIFRoZSBwZW9wbGUgd2hvIG1heSBuZWVkIHRvIGtub3cgYXJlIHRoZSBvbmVzIHdob3NlIGNvZGUgeW91CisgICAgIGFyZSBidXRjaGVyaW5nLiAgVGhlc2UgcGVvcGxlIGhhcHBlbiB0byBiZSB0aGUgb25lcyB3aG8gYXJlCisgICAgIG1vc3QgbGlrZWx5IHRvIGJlIGtub3dsZWRnZWFibGUgZW5vdWdoIHRvIGhlbHAgeW91LCBidXQKKyAgICAgdGhleSBoYXZlIG5vIG9ibGlnYXRpb24gdG8gaGVscCB5b3UgKGkuZS4geW91IGFzayBmb3IgaGVscCwKKyAgICAgZG9uJ3QgZGVtYW5kKS4gICJnaXQgbG9nIC1wIC0tICRhcmVhX3lvdV9hcmVfbW9kaWZ5aW5nIiB3b3VsZAorICAgICBoZWxwIHlvdSBmaW5kIG91dCB3aG8gdGhleSBhcmUuCisKKyAoMikgWW91IGdldCBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50cy4gIFlvdSBtYXkKKyAgICAgZXZlbiBnZXQgdGhlbSBpbiBhICJvbiB0b3Agb2YgeW91ciBjaGFuZ2UiIHBhdGNoIGZvcm0uCisKKyAoMykgUG9saXNoLCByZWZpbmUsIGFuZCByZS1zZW5kIHRvIHRoZSBsaXN0IGFuZCB0aGUgcGVvcGxlIHdobworICAgICBzcGVuZCB0aGVpciB0aW1lIHRvIGltcHJvdmUgeW91ciBwYXRjaC4gIEdvIGJhY2sgdG8gc3RlcCAoMikuCisKKyAoNCkgVGhlIGxpc3QgZm9ybXMgY29uc2Vuc3VzIHRoYXQgdGhlIGxhc3Qgcm91bmQgb2YgeW91ciBwYXRjaCBpcworICAgICBnb29kLiAgU2VuZCBpdCB0byB0aGUgbGlzdCBhbmQgY2MgdGhlIG1haW50YWluZXIuCisKKyAoNSkgQSB0b3BpYyBicmFuY2ggaXMgY3JlYXRlZCB3aXRoIHRoZSBwYXRjaCBhbmQgaXMgbWVyZ2VkIHRvICduZXh0JywKKyAgICAgYW5kIGNvb2tlZCBmdXJ0aGVyIGFuZCBldmVudHVhbGx5IGdyYWR1YXRlcyB0byAnbWFzdGVyJy4KKworSW4gYW55IHRpbWUgYmV0d2VlbiB0aGUgKDIpLSgzKSBjeWNsZSwgdGhlIG1haW50YWluZXIgbWF5IHBpY2sgaXQgdXAKK2Zyb20gdGhlIGxpc3QgYW5kIHF1ZXVlIGl0IHRvICdwdScsIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvcgorcGVvcGxlIHBsYXkgd2l0aCBpdCB3aXRob3V0IGhhdmluZyB0byBwaWNrIHVwIGFuZCBhcHBseSB0aGUgcGF0Y2ggdG8KK3RoZWlyIHRyZWVzIHRoZW1zZWx2ZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorS25vdyB0aGUgc3RhdHVzIG9mIHlvdXIgcGF0Y2ggYWZ0ZXIgc3VibWlzc2lvbgorCisqIFlvdSBjYW4gdXNlIEdpdCBpdHNlbGYgdG8gZmluZCBvdXQgd2hlbiB5b3VyIHBhdGNoIGlzIG1lcmdlZCBpbgorICBtYXN0ZXIuICdnaXQgcHVsbCAtLXJlYmFzZScgd2lsbCBhdXRvbWF0aWNhbGx5IHNraXAgYWxyZWFkeS1hcHBsaWVkCisgIHBhdGNoZXMsIGFuZCB3aWxsIGxldCB5b3Uga25vdy4gVGhpcyB3b3JrcyBvbmx5IGlmIHlvdSByZWJhc2Ugb24gdG9wCisgIG9mIHRoZSBicmFuY2ggaW4gd2hpY2ggeW91ciBwYXRjaCBoYXMgYmVlbiBtZXJnZWQgKGkuZS4gaXQgd2lsbCBub3QKKyAgdGVsbCB5b3UgaWYgeW91ciBwYXRjaCBpcyBtZXJnZWQgaW4gcHUgaWYgeW91IHJlYmFzZSBvbiB0b3Agb2YKKyAgbWFzdGVyKS4KKworKiBSZWFkIHRoZSBnaXQgbWFpbGluZyBsaXN0LCB0aGUgbWFpbnRhaW5lciByZWd1bGFybHkgcG9zdHMgbWVzc2FnZXMKKyAgZW50aXRsZWQgIldoYXQncyBjb29raW5nIGluIGdpdC5naXQiIGFuZCAiV2hhdCdzIGluIGdpdC5naXQiIGdpdmluZworICB0aGUgc3RhdHVzIG9mIHZhcmlvdXMgcHJvcG9zZWQgY2hhbmdlcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNVUEgc3BlY2lmaWMgaGludHMKKworU29tZSBvZiBwYXRjaGVzIEkgcmVjZWl2ZSBvciBwaWNrIHVwIGZyb20gdGhlIGxpc3Qgc2hhcmUgY29tbW9uCitwYXR0ZXJucyBvZiBicmVha2FnZS4gIFBsZWFzZSBtYWtlIHN1cmUgeW91ciBNVUEgaXMgc2V0IHVwCitwcm9wZXJseSBub3QgdG8gY29ycnVwdCB3aGl0ZXNwYWNlcy4KKworU2VlIHRoZSBESVNDVVNTSU9OIHNlY3Rpb24gb2YgZ2l0LWZvcm1hdC1wYXRjaCgxKSBmb3IgaGludHMgb24KK2NoZWNraW5nIHlvdXIgcGF0Y2ggYnkgbWFpbGluZyBpdCB0byB5b3Vyc2VsZiBhbmQgYXBwbHlpbmcgd2l0aAorZ2l0LWFtKDEpLgorCitXaGlsZSB5b3UgYXJlIGF0IGl0LCBjaGVjayB0aGUgcmVzdWx0aW5nIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tCithIHRyaWFsIHJ1biBvZiBhcHBseWluZyB0aGUgcGF0Y2guICBJZiB3aGF0IGlzIGluIHRoZSByZXN1bHRpbmcKK2NvbW1pdCBpcyBub3QgZXhhY3RseSB3aGF0IHlvdSB3b3VsZCB3YW50IHRvIHNlZSwgaXQgaXMgdmVyeQorbGlrZWx5IHRoYXQgeW91ciBtYWludGFpbmVyIHdvdWxkIGVuZCB1cCBoYW5kIGVkaXRpbmcgdGhlIGxvZworbWVzc2FnZSB3aGVuIGhlIGFwcGxpZXMgeW91ciBwYXRjaC4gIFRoaW5ncyBsaWtlICJIaSwgdGhpcyBpcyBteQorZmlyc3QgcGF0Y2guXG4iLCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcHV0IGluIHRoZSBwYXRjaCBlLW1haWwsCitzaG91bGQgY29tZSBhZnRlciB0aGUgdGhyZWUtZGFzaCBsaW5lIHRoYXQgc2lnbmFscyB0aGUgZW5kIG9mIHRoZQorY29tbWl0IG1lc3NhZ2UuCisKKworUGluZQorLS0tLQorCisoSm9oYW5uZXMgU2NoaW5kZWxpbikKKworSSBkb24ndCBrbm93IGhvdyBtYW55IHBlb3BsZSBzdGlsbCB1c2UgcGluZSwgYnV0IGZvciB0aG9zZSBwb29yCitzb3VscyBpdCBtYXkgYmUgZ29vZCB0byBtZW50aW9uIHRoYXQgdGhlIHF1ZWxsLWZsb3dlZC10ZXh0IGlzCituZWVkZWQgZm9yIHJlY2VudCB2ZXJzaW9ucy4KKworLi4uIHRoZSAibm8tc3RyaXAtd2hpdGVzcGFjZS1iZWZvcmUtc2VuZCIgb3B0aW9uLCB0b28uIEFGQUlLIGl0Cit3YXMgaW50cm9kdWNlZCBpbiA0LjYwLgorCisoTGludXMgVG9ydmFsZHMpCisKK0FuZCA0LjU4IG5lZWRzIGF0IGxlYXN0IHRoaXMuCisKKy0tLQorZGlmZi10cmVlIDgzMjZkZDgzNTBiZTY0YWM3ZmM4MDVmNjU2M2ExZDYxYWQxMGQzMmMgKGZyb20gZTg4NmE2MWY3NmVkZjU0MTA1NzNlOTJlMzhjZTIyOTc0ZjljNDBmMSkKK0F1dGhvcjogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGc1Lm9zZGwub3JnPgorRGF0ZTogICBNb24gQXVnIDE1IDE3OjIzOjUxIDIwMDUgLTA3MDAKKworICAgIEZpeCBwaW5lIHdoaXRlc3BhY2UtY29ycnVwdGlvbiBidWcKKworICAgIFRoZXJlJ3Mgbm8gZXhjdXNlIGZvciB1bmNvbmRpdGlvbmFsbHkgcmVtb3Zpbmcgd2hpdGVzcGFjZSBmcm9tCisgICAgdGhlIHBpY28gYnVmZmVycyBvbiBjbG9zZS4KKworZGlmZiAtLWdpdCBhL3BpY28vcGljby5jIGIvcGljby9waWNvLmMKKy0tLSBhL3BpY28vcGljby5jCisrKysgYi9waWNvL3BpY28uYworQEAgLTIxOSw3ICsyMTksOSBAQCBQSUNPICpwbTsKKwkgICAgc3dpdGNoKHBpY29fYWxsX2RvbmUpewkvKiBwcmVwYXJlIGZvci9oYW5kbGUgZmluYWwgZXZlbnRzICovCisJICAgICAgY2FzZSBDT01QX0VYSVQgOgkJLyogYWxyZWFkeSBjb25maXJtZWQgKi8KKwkJcGFja2hlYWRlcigpOworKyNpZiAwCisJCXN0cmlwd2hpdGVzcGFjZSgpOworKyNlbmRpZgorCQljIHw9IENPTVBfRVhJVDsKKwkJYnJlYWs7CisKKworKERhbmllbCBCYXJrYWxvdykKKworPiBBIHBhdGNoIHRvIFN1Ym1pdHRpbmdQYXRjaGVzLCBNVUEgc3BlY2lmaWMgaGVscCBzZWN0aW9uIGZvcgorPiB1c2VycyBvZiBQaW5lIDQuNjMgd291bGQgYmUgdmVyeSBtdWNoIGFwcHJlY2lhdGVkLgorCitBaCwgaXQgbG9va3MgbGlrZSBhIHJlY2VudCB2ZXJzaW9uIGNoYW5nZWQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgdG8gZG8gdGhlCityaWdodCB0aGluZywgYW5kIGludmVydGVkIHRoZSBzZW5zZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24uIChFaXRoZXIKK3RoYXQgb3IgR2VudG9vIGRpZCBpdC4pIFNvIHlvdSBuZWVkIHRvIHNldCB0aGUKKyJuby1zdHJpcC13aGl0ZXNwYWNlLWJlZm9yZS1zZW5kIiBvcHRpb24sIHVubGVzcyB0aGUgb3B0aW9uIHlvdSBoYXZlIGlzCisic3RyaXAtd2hpdGVzcGFjZS1iZWZvcmUtc2VuZCIsIGluIHdoaWNoIGNhc2UgeW91IHNob3VsZCBhdm9pZCBjaGVja2luZworaXQuCisKKworVGh1bmRlcmJpcmQsIEtNYWlsLCBHTWFpbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgdGhlIE1VQS1TUEVDSUZJQyBISU5UUyBzZWN0aW9uIG9mIGdpdC1mb3JtYXQtcGF0Y2goMSkuCisKK0dudXMKKy0tLS0KKworJ3wnIGluIHRoZSAqU3VtbWFyeSogYnVmZmVyIGNhbiBiZSB1c2VkIHRvIHBpcGUgdGhlIGN1cnJlbnQKK21lc3NhZ2UgdG8gYW4gZXh0ZXJuYWwgcHJvZ3JhbSwgYW5kIHRoaXMgaXMgYSBoYW5keSB3YXkgdG8gZHJpdmUKKyJnaXQgYW0iLiAgSG93ZXZlciwgaWYgdGhlIG1lc3NhZ2UgaXMgTUlNRSBlbmNvZGVkLCB3aGF0IGlzCitwaXBlZCBpbnRvIHRoZSBwcm9ncmFtIGlzIHRoZSByZXByZXNlbnRhdGlvbiB5b3Ugc2VlIGluIHlvdXIKKypBcnRpY2xlKiBidWZmZXIgYWZ0ZXIgdW53cmFwcGluZyBNSU1FLiAgVGhpcyBpcyBvZnRlbiBub3Qgd2hhdAoreW91IHdvdWxkIHdhbnQgZm9yIHR3byByZWFzb25zLiAgSXQgdGVuZHMgdG8gc2NyZXcgdXAgbm9uIEFTQ0lJCitjaGFyYWN0ZXJzIChtb3N0IG5vdGFibHkgaW4gcGVvcGxlJ3MgbmFtZXMpLCBhbmQgYWxzbword2hpdGVzcGFjZXMgKGZhdGFsIGluIHBhdGNoZXMpLiAgUnVubmluZyAnQy11IGcnIHRvIGRpc3BsYXkgdGhlCittZXNzYWdlIGluIHJhdyBmb3JtIGJlZm9yZSB1c2luZyAnfCcgdG8gcnVuIHRoZSBwaXBlIGNhbiB3b3JrCit0aGlzIHByb2JsZW0gYXJvdW5kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mIGIvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNzNhODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FzY2lpZG9jLmNvbmYKQEAgLTAsMCArMSw5NyBAQAorIyMgbGlua2dpdDogbWFjcm8KKyMKKyMgVXNhZ2U6IGxpbmtnaXQ6Y29tbWFuZFttYW5wYWdlLXNlY3Rpb25dCisjCisjIE5vdGUsIHswfSBpcyB0aGUgbWFucGFnZSBzZWN0aW9uLCB3aGlsZSB7dGFyZ2V0fSBpcyB0aGUgY29tbWFuZC4KKyMKKyMgU2hvdyBHSVQgbGluayBhczogPGNvbW1hbmQ+KDxzZWN0aW9uPik7IGlmIHNlY3Rpb24gaXMgZGVmaW5lZCwgZWxzZSBqdXN0IHNob3cKKyMgdGhlIGNvbW1hbmQuCisKK1ttYWNyb3NdCisoP3N1KVtcXF0/KD9QPG5hbWU+bGlua2dpdCk6KD9QPHRhcmdldD5cUyo/KVxbKD9QPGF0dHJsaXN0Pi4qPylcXT0KKworW2F0dHJpYnV0ZXNdCithc3Rlcmlzaz0mIzQyOworcGx1cz0mIzQzOworY2FyZXQ9JiM5NDsKK3N0YXJ0c2I9JiM5MTsKK2VuZHNiPSYjOTM7CitiYWNrc2xhc2g9JiM5MjsKK3RpbGRlPSYjMTI2OworYXBvc3Ryb3BoZT0mIzM5OworYmFja3RpY2s9JiM5NjsKK2xpdGRkPSYjNDU7JiM0NTsKKworaWZkZWY6OmJhY2tlbmQtZG9jYm9va1tdCitbbGlua2dpdC1pbmxpbmVtYWNyb10KK3swJXt0YXJnZXR9fQorezAjPGNpdGVyZWZlbnRyeT59Cit7MCM8cmVmZW50cnl0aXRsZT57dGFyZ2V0fTwvcmVmZW50cnl0aXRsZT48bWFudm9sbnVtPnswfTwvbWFudm9sbnVtPn0KK3swIzwvY2l0ZXJlZmVudHJ5Pn0KK2VuZGlmOjpiYWNrZW5kLWRvY2Jvb2tbXQorCitpZmRlZjo6YmFja2VuZC1kb2Nib29rW10KK2lmbmRlZjo6Z2l0LWFzY2lpZG9jLW5vLXJvZmZbXQorIyAidW5icmVhayIgZG9jYm9vay14c2wgdjEuNjggZm9yIG1hbnBhZ2VzLiB2MS42OSB3b3JrcyB3aXRoIG9yIHdpdGhvdXQgdGhpcy4KKyMgdjEuNzIgYnJlYWtzIHdpdGggdGhpcyBiZWNhdXNlIGl0IHJlcGxhY2VzIGRvdHMgbm90IGluIHJvZmYgcmVxdWVzdHMuCitbbGlzdGluZ2Jsb2NrXQorPGV4YW1wbGU+PHRpdGxlPnt0aXRsZX08L3RpdGxlPgorPGxpdGVyYWxsYXlvdXQgY2xhc3M9Im1vbm9zcGFjZWQiPgoraWZkZWY6OmRvY3R5cGUtbWFucGFnZVtdCismIzEwOy5mdCBDJiMxMDsKK2VuZGlmOjpkb2N0eXBlLW1hbnBhZ2VbXQorfAoraWZkZWY6OmRvY3R5cGUtbWFucGFnZVtdCismIzEwOy5mdCYjMTA7CitlbmRpZjo6ZG9jdHlwZS1tYW5wYWdlW10KKzwvbGl0ZXJhbGxheW91dD4KK3t0aXRsZSN9PC9leGFtcGxlPgorZW5kaWY6OmdpdC1hc2NpaWRvYy1uby1yb2ZmW10KKworaWZkZWY6OmdpdC1hc2NpaWRvYy1uby1yb2ZmW10KK2lmZGVmOjpkb2N0eXBlLW1hbnBhZ2VbXQorIyBUaGUgZm9sbG93aW5nIHR3byBzbWFsbCB3b3JrYXJvdW5kcyBpbnNlcnQgYSBzaW1wbGUgcGFyYWdyYXBoIGFmdGVyIHNjcmVlbgorW2xpc3RpbmdibG9ja10KKzxleGFtcGxlPjx0aXRsZT57dGl0bGV9PC90aXRsZT4KKzxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KK3wKKzwvbGl0ZXJhbGxheW91dD48c2ltcGFyYT48L3NpbXBhcmE+Cit7dGl0bGUjfTwvZXhhbXBsZT4KKworW3ZlcnNlYmxvY2tdCis8Zm9ybWFscGFyYXtpZD8gaWQ9IntpZH0ifT48dGl0bGU+e3RpdGxlfTwvdGl0bGU+PHBhcmE+Cit7dGl0bGUlfTxsaXRlcmFsbGF5b3V0e2lkPyBpZD0ie2lkfSJ9Pgore3RpdGxlI308bGl0ZXJhbGxheW91dD4KK3wKKzwvbGl0ZXJhbGxheW91dD4KK3t0aXRsZSN9PC9wYXJhPjwvZm9ybWFscGFyYT4KK3t0aXRsZSV9PHNpbXBhcmE+PC9zaW1wYXJhPgorZW5kaWY6OmRvY3R5cGUtbWFucGFnZVtdCitlbmRpZjo6Z2l0LWFzY2lpZG9jLW5vLXJvZmZbXQorZW5kaWY6OmJhY2tlbmQtZG9jYm9va1tdCisKK2lmZGVmOjpkb2N0eXBlLW1hbnBhZ2VbXQoraWZkZWY6OmJhY2tlbmQtZG9jYm9va1tdCitbaGVhZGVyXQordGVtcGxhdGU6OltoZWFkZXItZGVjbGFyYXRpb25zXQorPHJlZmVudHJ5PgorPHJlZm1ldGE+Cis8cmVmZW50cnl0aXRsZT57bWFudGl0bGV9PC9yZWZlbnRyeXRpdGxlPgorPG1hbnZvbG51bT57bWFudm9sbnVtfTwvbWFudm9sbnVtPgorPHJlZm1pc2NpbmZvIGNsYXNzPSJzb3VyY2UiPkdpdDwvcmVmbWlzY2luZm8+Cis8cmVmbWlzY2luZm8gY2xhc3M9InZlcnNpb24iPntnaXRfdmVyc2lvbn08L3JlZm1pc2NpbmZvPgorPHJlZm1pc2NpbmZvIGNsYXNzPSJtYW51YWwiPkdpdCBNYW51YWw8L3JlZm1pc2NpbmZvPgorPC9yZWZtZXRhPgorPHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPnttYW5uYW1lfTwvcmVmbmFtZT4KKyAgPHJlZnB1cnBvc2U+e21hbnB1cnBvc2V9PC9yZWZwdXJwb3NlPgorPC9yZWZuYW1lZGl2PgorZW5kaWY6OmJhY2tlbmQtZG9jYm9va1tdCitlbmRpZjo6ZG9jdHlwZS1tYW5wYWdlW10KKworaWZkZWY6OmJhY2tlbmQteGh0bWwxMVtdCitbYXR0cmlidXRlc10KK2dpdC1yZWxhdGl2ZS1odG1sLXByZWZpeD0KK1tsaW5rZ2l0LWlubGluZW1hY3JvXQorPGEgaHJlZj0ie2dpdC1yZWxhdGl2ZS1odG1sLXByZWZpeH17dGFyZ2V0fS5odG1sIj57dGFyZ2V0fXswPyh7MH0pfTwvYT4KK2VuZGlmOjpiYWNrZW5kLXhodG1sMTFbXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhNTFkYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQKQEAgLTAsMCArMSwxMjAgQEAKKy1iOjoKKwlTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzLiAgVGhpcyBjYW4gYWxzbworCWJlIGNvbnRyb2xsZWQgdmlhIHRoZSBgYmxhbWUuYmxhbmtib3VuZGFyeWAgY29uZmlnIG9wdGlvbi4KKworLS1yb290OjoKKwlEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMuICBUaGlzIGNhbiBhbHNvIGJlCisJY29udHJvbGxlZCB2aWEgdGhlIGBibGFtZS5zaG93cm9vdGAgY29uZmlnIG9wdGlvbi4KKworLS1zaG93LXN0YXRzOjoKKwlJbmNsdWRlIGFkZGl0aW9uYWwgc3RhdGlzdGljcyBhdCB0aGUgZW5kIG9mIGJsYW1lIG91dHB1dC4KKworLUwgPHN0YXJ0Piw8ZW5kPjo6CisJQW5ub3RhdGUgb25seSB0aGUgZ2l2ZW4gbGluZSByYW5nZS4gIDxzdGFydD4gYW5kIDxlbmQ+IGNhbiB0YWtlCisJb25lIG9mIHRoZXNlIGZvcm1zOgorCisJLSBudW1iZXIKKysKK0lmIDxzdGFydD4gb3IgPGVuZD4gaXMgYSBudW1iZXIsIGl0IHNwZWNpZmllcyBhbgorYWJzb2x1dGUgbGluZSBudW1iZXIgKGxpbmVzIGNvdW50IGZyb20gMSkuCisrCisKKy0gL3JlZ2V4LworKworVGhpcyBmb3JtIHdpbGwgdXNlIHRoZSBmaXJzdCBsaW5lIG1hdGNoaW5nIHRoZSBnaXZlbgorUE9TSVggcmVnZXguICBJZiA8ZW5kPiBpcyBhIHJlZ2V4LCBpdCB3aWxsIHNlYXJjaAorc3RhcnRpbmcgYXQgdGhlIGxpbmUgZ2l2ZW4gYnkgPHN0YXJ0Pi4KKysKKworLSArb2Zmc2V0IG9yIC1vZmZzZXQKKysKK1RoaXMgaXMgb25seSB2YWxpZCBmb3IgPGVuZD4gYW5kIHdpbGwgc3BlY2lmeSBhIG51bWJlcgorb2YgbGluZXMgYmVmb3JlIG9yIGFmdGVyIHRoZSBsaW5lIGdpdmVuIGJ5IDxzdGFydD4uCisrCisKKy1sOjoKKwlTaG93IGxvbmcgcmV2IChEZWZhdWx0OiBvZmYpLgorCistdDo6CisJU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpLgorCistUyA8cmV2cy1maWxlPjo6CisJVXNlIHJldmlzaW9ucyBmcm9tIHJldnMtZmlsZSBpbnN0ZWFkIG9mIGNhbGxpbmcgbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0uCisKKy0tcmV2ZXJzZTo6CisJV2FsayBoaXN0b3J5IGZvcndhcmQgaW5zdGVhZCBvZiBiYWNrd2FyZC4gSW5zdGVhZCBvZiBzaG93aW5nCisJdGhlIHJldmlzaW9uIGluIHdoaWNoIGEgbGluZSBhcHBlYXJlZCwgdGhpcyBzaG93cyB0aGUgbGFzdAorCXJldmlzaW9uIGluIHdoaWNoIGEgbGluZSBoYXMgZXhpc3RlZC4gVGhpcyByZXF1aXJlcyBhIHJhbmdlIG9mCisJcmV2aXNpb24gbGlrZSBTVEFSVC4uRU5EIHdoZXJlIHRoZSBwYXRoIHRvIGJsYW1lIGV4aXN0cyBpbgorCVNUQVJULgorCistcDo6CistLXBvcmNlbGFpbjo6CisJU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbi4KKworLS1saW5lLXBvcmNlbGFpbjo6CisJU2hvdyB0aGUgcG9yY2VsYWluIGZvcm1hdCwgYnV0IG91dHB1dCBjb21taXQgaW5mb3JtYXRpb24gZm9yCisJZWFjaCBsaW5lLCBub3QganVzdCB0aGUgZmlyc3QgdGltZSBhIGNvbW1pdCBpcyByZWZlcmVuY2VkLgorCUltcGxpZXMgLS1wb3JjZWxhaW4uCisKKy0taW5jcmVtZW50YWw6OgorCVNob3cgdGhlIHJlc3VsdCBpbmNyZW1lbnRhbGx5IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvcgorCW1hY2hpbmUgY29uc3VtcHRpb24uCisKKy0tZW5jb2Rpbmc9PGVuY29kaW5nPjo6CisJU3BlY2lmaWVzIHRoZSBlbmNvZGluZyB1c2VkIHRvIG91dHB1dCBhdXRob3IgbmFtZXMKKwlhbmQgY29tbWl0IHN1bW1hcmllcy4gU2V0dGluZyBpdCB0byBgbm9uZWAgbWFrZXMgYmxhbWUKKwlvdXRwdXQgdW5jb252ZXJ0ZWQgZGF0YS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorCWRpc2N1c3Npb24gYWJvdXQgZW5jb2RpbmcgaW4gdGhlIGxpbmtnaXQ6Z2l0LWxvZ1sxXQorCW1hbnVhbCBwYWdlLgorCistLWNvbnRlbnRzIDxmaWxlPjo6CisJV2hlbiA8cmV2PiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY29tbWFuZCBhbm5vdGF0ZXMgdGhlCisJY2hhbmdlcyBzdGFydGluZyBiYWNrd2FyZHMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGNvcHkuCisJVGhpcyBmbGFnIG1ha2VzIHRoZSBjb21tYW5kIHByZXRlbmQgYXMgaWYgdGhlIHdvcmtpbmcKKwl0cmVlIGNvcHkgaGFzIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgZmlsZSAoc3BlY2lmeQorCWAtYCB0byBtYWtlIHRoZSBjb21tYW5kIHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQpLgorCistLWRhdGUgPGZvcm1hdD46OgorCVRoZSB2YWx1ZSBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZXM6CisJe3JlbGF0aXZlLGxvY2FsLGRlZmF1bHQsaXNvLHJmYyxzaG9ydH0uIElmIC0tZGF0ZSBpcyBub3QKKwlwcm92aWRlZCwgdGhlIHZhbHVlIG9mIHRoZSBibGFtZS5kYXRlIGNvbmZpZyB2YXJpYWJsZSBpcworCXVzZWQuIElmIHRoZSBibGFtZS5kYXRlIGNvbmZpZyB2YXJpYWJsZSBpcyBhbHNvIG5vdCBzZXQsIHRoZQorCWlzbyBmb3JtYXQgaXMgdXNlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIFNlZSB0aGUgZGlzY3Vzc2lvbgorCW9mIHRoZSAtLWRhdGUgb3B0aW9uIGF0IGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KKworLU18PG51bT58OjoKKwlEZXRlY3QgbW92ZWQgb3IgY29waWVkIGxpbmVzIHdpdGhpbiBhIGZpbGUuIFdoZW4gYSBjb21taXQKKwltb3ZlcyBvciBjb3BpZXMgYSBibG9jayBvZiBsaW5lcyAoZS5nLiB0aGUgb3JpZ2luYWwgZmlsZQorCWhhcyBBIGFuZCB0aGVuIEIsIGFuZCB0aGUgY29tbWl0IGNoYW5nZXMgaXQgdG8gQiBhbmQgdGhlbgorCUEpLCB0aGUgdHJhZGl0aW9uYWwgJ2JsYW1lJyBhbGdvcml0aG0gbm90aWNlcyBvbmx5IGhhbGYgb2YKKwl0aGUgbW92ZW1lbnQgYW5kIHR5cGljYWxseSBibGFtZXMgdGhlIGxpbmVzIHRoYXQgd2VyZSBtb3ZlZAorCXVwIChpLmUuIEIpIHRvIHRoZSBwYXJlbnQgYW5kIGFzc2lnbnMgYmxhbWUgdG8gdGhlIGxpbmVzIHRoYXQKKwl3ZXJlIG1vdmVkIGRvd24gKGkuZS4gQSkgdG8gdGhlIGNoaWxkIGNvbW1pdC4gIFdpdGggdGhpcworCW9wdGlvbiwgYm90aCBncm91cHMgb2YgbGluZXMgYXJlIGJsYW1lZCBvbiB0aGUgcGFyZW50IGJ5CisJcnVubmluZyBleHRyYSBwYXNzZXMgb2YgaW5zcGVjdGlvbi4KKysKKzxudW0+IGlzIG9wdGlvbmFsIGJ1dCBpdCBpcyB0aGUgbG93ZXIgYm91bmQgb24gdGhlIG51bWJlciBvZgorYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgdGhhdCBnaXQgbXVzdCBkZXRlY3QgYXMgbW92aW5nL2NvcHlpbmcKK3dpdGhpbiBhIGZpbGUgZm9yIGl0IHRvIGFzc29jaWF0ZSB0aG9zZSBsaW5lcyB3aXRoIHRoZSBwYXJlbnQKK2NvbW1pdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjAuCisKKy1DfDxudW0+fDo6CisJSW4gYWRkaXRpb24gdG8gYC1NYCwgZGV0ZWN0IGxpbmVzIG1vdmVkIG9yIGNvcGllZCBmcm9tIG90aGVyCisJZmlsZXMgdGhhdCB3ZXJlIG1vZGlmaWVkIGluIHRoZSBzYW1lIGNvbW1pdC4gIFRoaXMgaXMKKwl1c2VmdWwgd2hlbiB5b3UgcmVvcmdhbml6ZSB5b3VyIHByb2dyYW0gYW5kIG1vdmUgY29kZQorCWFyb3VuZCBhY3Jvc3MgZmlsZXMuICBXaGVuIHRoaXMgb3B0aW9uIGlzIGdpdmVuIHR3aWNlLAorCXRoZSBjb21tYW5kIGFkZGl0aW9uYWxseSBsb29rcyBmb3IgY29waWVzIGZyb20gb3RoZXIKKwlmaWxlcyBpbiB0aGUgY29tbWl0IHRoYXQgY3JlYXRlcyB0aGUgZmlsZS4gV2hlbiB0aGlzCisJb3B0aW9uIGlzIGdpdmVuIHRocmVlIHRpbWVzLCB0aGUgY29tbWFuZCBhZGRpdGlvbmFsbHkKKwlsb29rcyBmb3IgY29waWVzIGZyb20gb3RoZXIgZmlsZXMgaW4gYW55IGNvbW1pdC4KKysKKzxudW0+IGlzIG9wdGlvbmFsIGJ1dCBpdCBpcyB0aGUgbG93ZXIgYm91bmQgb24gdGhlIG51bWJlciBvZgorYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgdGhhdCBnaXQgbXVzdCBkZXRlY3QgYXMgbW92aW5nL2NvcHlpbmcKK2JldHdlZW4gZmlsZXMgZm9yIGl0IHRvIGFzc29jaWF0ZSB0aG9zZSBsaW5lcyB3aXRoIHRoZSBwYXJlbnQKK2NvbW1pdC4gQW5kIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDQwLiBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZQorYC1DYCBvcHRpb25zIGdpdmVuLCB0aGUgPG51bT4gYXJndW1lbnQgb2YgdGhlIGxhc3QgYC1DYCB3aWxsCit0YWtlIGVmZmVjdC4KKworLWg6OgorCVNob3cgaGVscCBtZXNzYWdlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9idWlsZC1kb2NkZXAucGVybCBiL0RvY3VtZW50YXRpb24vYnVpbGQtZG9jZGVwLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmE0MjA1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYnVpbGQtZG9jZGVwLnBlcmwKQEAgLTAsMCArMSw0NiBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK215ICVpbmNsdWRlID0gKCk7CitteSAlaW5jbHVkZWQgPSAoKTsKKworZm9yIG15ICR0ZXh0ICg8Ki50eHQ+KSB7CisgICAgb3BlbiBJLCAnPCcsICR0ZXh0IHx8IGRpZSAiY2Fubm90IHJlYWQ6ICR0ZXh0IjsKKyAgICB3aGlsZSAoPEk+KSB7CisJaWYgKC9eaW5jbHVkZTo6LykgeworCSAgICBjaG9tcDsKKwkgICAgcy9eaW5jbHVkZTo6XHMqLy87CisJICAgIHMvXFtcXS8vOworCSAgICAkaW5jbHVkZXskdGV4dH17JF99ID0gMTsKKwkgICAgJGluY2x1ZGVkeyRffSA9IDE7CisJfQorICAgIH0KKyAgICBjbG9zZSBJOworfQorCisjIERvIHdlIGNhcmUgYWJvdXQgY2hhaW5lZCBpbmNsdWRlcz8/PworbXkgJGNoYW5nZWQgPSAxOword2hpbGUgKCRjaGFuZ2VkKSB7CisgICAgJGNoYW5nZWQgPSAwOworICAgIHdoaWxlIChteSAoJHRleHQsICRpbmNsdWRlZCkgPSBlYWNoICVpbmNsdWRlKSB7CisJZm9yIG15ICRpIChrZXlzICUkaW5jbHVkZWQpIHsKKwkgICAgIyAkdGV4dCBoYXMgaW5jbHVkZTo6JGk7IGlmICRpIGluY2x1ZGVzICRqCisJICAgICMgJHRleHQgaW5kaXJlY3RseSBpbmNsdWRlcyAkai4KKwkgICAgaWYgKGV4aXN0cyAkaW5jbHVkZXskaX0pIHsKKwkJZm9yIG15ICRqIChrZXlzICV7JGluY2x1ZGV7JGl9fSkgeworCQkgICAgaWYgKCFleGlzdHMgJGluY2x1ZGV7JHRleHR9eyRqfSkgeworCQkJJGluY2x1ZGV7JHRleHR9eyRqfSA9IDE7CisJCQkkaW5jbHVkZWR7JGp9ID0gMTsKKwkJCSRjaGFuZ2VkID0gMTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKword2hpbGUgKG15ICgkdGV4dCwgJGluY2x1ZGVkKSA9IGVhY2ggJWluY2x1ZGUpIHsKKyAgICBpZiAoISBleGlzdHMgJGluY2x1ZGVkeyR0ZXh0fSAmJgorCShteSAkYmFzZSA9ICR0ZXh0KSA9fiBzL1wudHh0JC8vKSB7CisJcHJpbnQgIiRiYXNlLmh0bWwgJGJhc2UueG1sIDogIiwgam9pbigiICIsIGtleXMgJSRpbmNsdWRlZCksICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jYXQtdGV4aS5wZXJsIGIvRG9jdW1lbnRhdGlvbi9jYXQtdGV4aS5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyOGVjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NhdC10ZXhpLnBlcmwKQEAgLTAsMCArMSw0MiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK215IEBtZW51ID0gKCk7CitteSAkb3V0cHV0ID0gJEFSR1ZbMF07CisKK29wZW4gVE1QLCAnPicsICIkb3V0cHV0LnRtcCI7CisKK3doaWxlICg8U1RESU4+KSB7CisJbmV4dCBpZiAoL15cXGlucHV0IHRleGluZm8vLi4vXEBub2RlIFRvcC8pOworCW5leHQgaWYgKC9eXEBieWUvIHx8IC9eXC5mdC8pOworCWlmIChzL15cQHRvcCAoLiopL1xAbm9kZSAkMSwsLFRvcC8pIHsKKwkJcHVzaCBAbWVudSwgJDE7CisJfQorCXMvXChcQHB4cmVme1xbKFVSTFN8UkVNT1RFUylcXX1cKS8vOworCXByaW50IFRNUDsKK30KK2Nsb3NlIFRNUDsKKworcHJpbnRmICdcaW5wdXQgdGV4aW5mbworQHNldGZpbGVuYW1lIGdpdG1hbi5pbmZvCitAZG9jdW1lbnRlbmNvZGluZyBVVEYtOAorQGRpcmNhdGVnb3J5IERldmVsb3BtZW50CitAZGlyZW50cnkKKyogR2l0IE1hbiBQYWdlczogKGdpdG1hbikuICBNYW51YWwgcGFnZXMgZm9yIEdpdCByZXZpc2lvbiBjb250cm9sIHN5c3RlbQorQGVuZCBkaXJlbnRyeQorQG5vZGUgVG9wLCwsIChkaXIpCitAdG9wIEdpdCBNYW51YWwgUGFnZXMKK0Bkb2N1bWVudGxhbmd1YWdlIGVuCitAbWVudQorJywgJG1lbnVbMF07CisKK2ZvciAoQG1lbnUpIHsKKwlwcmludCAiKiAke199OjpcbiI7Cit9CitwcmludCAiXEBlbmQgbWVudVxuIjsKK29wZW4gVE1QLCAnPCcsICIkb3V0cHV0LnRtcCI7Cit3aGlsZSAoPFRNUD4pIHsKKwlwcmludDsKK30KK2Nsb3NlIFRNUDsKK3ByaW50ICJcQGJ5ZVxuIjsKK3VubGluayAiJG91dHB1dC50bXAiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jbWQtbGlzdC5wZXJsIGIvRG9jdW1lbnRhdGlvbi9jbWQtbGlzdC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0Zjk5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NtZC1saXN0LnBlcmwKQEAgLTAsMCArMSw3NCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBGaWxlOjpDb21wYXJlIHF3KGNvbXBhcmUpOworCitzdWIgZm9ybWF0X29uZSB7CisJbXkgKCRvdXQsICRuYW1lYXR0cikgPSBAXzsKKwlteSAoJG5hbWUsICRhdHRyKSA9IEAkbmFtZWF0dHI7CisJbXkgKCRzdGF0ZSwgJGRlc2NyaXB0aW9uKTsKKwkkc3RhdGUgPSAwOworCW9wZW4gSSwgJzwnLCAiJG5hbWUudHh0IiBvciBkaWUgIk5vIHN1Y2ggZmlsZSAkbmFtZS50eHQiOworCXdoaWxlICg8ST4pIHsKKwkJaWYgKC9eTkFNRSQvKSB7CisJCQkkc3RhdGUgPSAxOworCQkJbmV4dDsKKwkJfQorCQlpZiAoJHN0YXRlID09IDEgJiYgL14tLS0tJC8pIHsKKwkJCSRzdGF0ZSA9IDI7CisJCQluZXh0OworCQl9CisJCW5leHQgaWYgKCRzdGF0ZSAhPSAyKTsKKwkJY2hvbXA7CisJCSRkZXNjcmlwdGlvbiA9ICRfOworCQlsYXN0OworCX0KKwljbG9zZSBJOworCWlmICghZGVmaW5lZCAkZGVzY3JpcHRpb24pIHsKKwkJZGllICJObyBkZXNjcmlwdGlvbiBmb3VuZCBpbiAkbmFtZS50eHQiOworCX0KKwlpZiAobXkgKCR2ZXJpZnlfbmFtZSwgJHRleHQpID0gKCRkZXNjcmlwdGlvbiA9fiAvXigkbmFtZSkgLSAoLiopLykpIHsKKwkJcHJpbnQgJG91dCAibGlua2dpdDokbmFtZVxbMVxdOjpcblx0IjsKKwkJaWYgKCRhdHRyID1+IC8gZGVwcmVjYXRlZCAvKSB7CisJCQlwcmludCAkb3V0ICIoZGVwcmVjYXRlZCkgIjsKKwkJfQorCQlwcmludCAkb3V0ICIkdGV4dC5cblxuIjsKKwl9CisJZWxzZSB7CisJCWRpZSAiRGVzY3JpcHRpb24gZG9lcyBub3QgbWF0Y2ggJG5hbWU6ICRkZXNjcmlwdGlvbiI7CisJfQorfQorCitteSAlY21kcyA9ICgpOworZm9yIChzb3J0IDw+KSB7CisJbmV4dCBpZiAvXiMvOworCisJY2hvbXA7CisJbXkgKCRuYW1lLCAkY2F0LCAkYXR0cikgPSAvXihcUyspXHMrKC4qPykoPzpccysoLiopKT8kLzsKKwkkYXR0ciA9ICcnIHVubGVzcyBkZWZpbmVkICRhdHRyOworCXB1c2ggQHskY21kc3skY2F0fX0sIFskbmFtZSwgIiAkYXR0ciAiXTsKK30KKworZm9yIG15ICRjYXQgKHF3KGFuY2lsbGFyeWludGVycm9nYXRvcnMKKwkJYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCisJCW1haW5wb3JjZWxhaW4KKwkJcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCisJCXBsdW1iaW5nbWFuaXB1bGF0b3JzCisJCXN5bmNoaW5ncmVwb3NpdG9yaWVzCisJCWZvcmVpZ25zY21pbnRlcmZhY2UKKwkJcHVyZWhlbHBlcnMKKwkJc3luY2hlbHBlcnMpKSB7CisJbXkgJG91dCA9ICJjbWRzLSRjYXQudHh0IjsKKwlvcGVuIE8sICc+JywgIiRvdXQrIiBvciBkaWUgIkNhbm5vdCBvcGVuIG91dHB1dCBmaWxlICRvdXQrIjsKKwlmb3IgKEB7JGNtZHN7JGNhdH19KSB7CisJCWZvcm1hdF9vbmUoXCpPLCAkXyk7CisJfQorCWNsb3NlIE87CisKKwlpZiAoLWYgIiRvdXQiICYmIGNvbXBhcmUoIiRvdXQiLCAiJG91dCsiKSA9PSAwKSB7CisJCXVubGluayAiJG91dCsiOworCX0KKwllbHNlIHsKKwkJcHJpbnQgU1RERVJSICIkb3V0XG4iOworCQlyZW5hbWUgIiRvdXQrIiwgIiRvdXQiOworCX0KK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWYzMjBiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CkBAIC0wLDAgKzEsMjA4NCBAQAorQ09ORklHVVJBVElPTiBGSUxFCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGdpdCBjb25maWd1cmF0aW9uIGZpbGUgY29udGFpbnMgYSBudW1iZXIgb2YgdmFyaWFibGVzIHRoYXQgYWZmZWN0Cit0aGUgZ2l0IGNvbW1hbmQncyBiZWhhdmlvci4gVGhlIGAuZ2l0L2NvbmZpZ2AgZmlsZSBpbiBlYWNoIHJlcG9zaXRvcnkKK2lzIHVzZWQgdG8gc3RvcmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoYXQgcmVwb3NpdG9yeSwgYW5kCitgJEhPTUUvLmdpdGNvbmZpZ2AgaXMgdXNlZCB0byBzdG9yZSBhIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gYXMKK2ZhbGxiYWNrIHZhbHVlcyBmb3IgdGhlIGAuZ2l0L2NvbmZpZ2AgZmlsZS4gVGhlIGZpbGUgYC9ldGMvZ2l0Y29uZmlnYAorY2FuIGJlIHVzZWQgdG8gc3RvcmUgYSBzeXN0ZW0td2lkZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisKK1RoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgdXNlZCBieSBib3RoIHRoZSBnaXQgcGx1bWJpbmcKK2FuZCB0aGUgcG9yY2VsYWlucy4gVGhlIHZhcmlhYmxlcyBhcmUgZGl2aWRlZCBpbnRvIHNlY3Rpb25zLCB3aGVyZWluCit0aGUgZnVsbHkgcXVhbGlmaWVkIHZhcmlhYmxlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIGl0c2VsZiBpcyB0aGUgbGFzdAorZG90LXNlcGFyYXRlZCBzZWdtZW50IGFuZCB0aGUgc2VjdGlvbiBuYW1lIGlzIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBsYXN0Citkb3QuIFRoZSB2YXJpYWJsZSBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgYWxsb3cgb25seSBhbHBoYW51bWVyaWMKK2NoYXJhY3RlcnMgYW5kIGAtYCwgYW5kIG11c3Qgc3RhcnQgd2l0aCBhbiBhbHBoYWJldGljIGNoYXJhY3Rlci4gIFNvbWUKK3ZhcmlhYmxlcyBtYXkgYXBwZWFyIG11bHRpcGxlIHRpbWVzLgorCitTeW50YXgKK35+fn5+fgorCitUaGUgc3ludGF4IGlzIGZhaXJseSBmbGV4aWJsZSBhbmQgcGVybWlzc2l2ZTsgd2hpdGVzcGFjZXMgYXJlIG1vc3RseQoraWdub3JlZC4gIFRoZSAnIycgYW5kICc7JyBjaGFyYWN0ZXJzIGJlZ2luIGNvbW1lbnRzIHRvIHRoZSBlbmQgb2YgbGluZSwKK2JsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLgorCitUaGUgZmlsZSBjb25zaXN0cyBvZiBzZWN0aW9ucyBhbmQgdmFyaWFibGVzLiAgQSBzZWN0aW9uIGJlZ2lucyB3aXRoCit0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiBpbiBzcXVhcmUgYnJhY2tldHMgYW5kIGNvbnRpbnVlcyB1bnRpbCB0aGUgbmV4dAorc2VjdGlvbiBiZWdpbnMuICBTZWN0aW9uIG5hbWVzIGFyZSBub3QgY2FzZSBzZW5zaXRpdmUuICBPbmx5IGFscGhhbnVtZXJpYworY2hhcmFjdGVycywgYC1gIGFuZCBgLmAgYXJlIGFsbG93ZWQgaW4gc2VjdGlvbiBuYW1lcy4gIEVhY2ggdmFyaWFibGUKK211c3QgYmVsb25nIHRvIHNvbWUgc2VjdGlvbiwgd2hpY2ggbWVhbnMgdGhhdCB0aGVyZSBtdXN0IGJlIGEgc2VjdGlvbgoraGVhZGVyIGJlZm9yZSB0aGUgZmlyc3Qgc2V0dGluZyBvZiBhIHZhcmlhYmxlLgorCitTZWN0aW9ucyBjYW4gYmUgZnVydGhlciBkaXZpZGVkIGludG8gc3Vic2VjdGlvbnMuICBUbyBiZWdpbiBhIHN1YnNlY3Rpb24KK3B1dCBpdHMgbmFtZSBpbiBkb3VibGUgcXVvdGVzLCBzZXBhcmF0ZWQgYnkgc3BhY2UgZnJvbSB0aGUgc2VjdGlvbiBuYW1lLAoraW4gdGhlIHNlY3Rpb24gaGVhZGVyLCBsaWtlIGluIHRoZSBleGFtcGxlIGJlbG93OgorCistLS0tLS0tLQorCVtzZWN0aW9uICJzdWJzZWN0aW9uIl0KKworLS0tLS0tLS0KKworU3Vic2VjdGlvbiBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUgYW5kIGNhbiBjb250YWluIGFueSBjaGFyYWN0ZXJzIGV4Y2VwdAorbmV3bGluZSAoZG91YmxlcXVvdGUgYCJgIGFuZCBiYWNrc2xhc2ggaGF2ZSB0byBiZSBlc2NhcGVkIGFzIGBcImAgYW5kIGBcXGAsCityZXNwZWN0aXZlbHkpLiAgU2VjdGlvbiBoZWFkZXJzIGNhbm5vdCBzcGFuIG11bHRpcGxlCitsaW5lcy4gIFZhcmlhYmxlcyBtYXkgYmVsb25nIGRpcmVjdGx5IHRvIGEgc2VjdGlvbiBvciB0byBhIGdpdmVuIHN1YnNlY3Rpb24uCitZb3UgY2FuIGhhdmUgYFtzZWN0aW9uXWAgaWYgeW91IGhhdmUgYFtzZWN0aW9uICJzdWJzZWN0aW9uIl1gLCBidXQgeW91Citkb24ndCBuZWVkIHRvLgorCitUaGVyZSBpcyBhbHNvIGEgZGVwcmVjYXRlZCBgW3NlY3Rpb24uc3Vic2VjdGlvbl1gIHN5bnRheC4gV2l0aCB0aGlzCitzeW50YXgsIHRoZSBzdWJzZWN0aW9uIG5hbWUgaXMgY29udmVydGVkIHRvIGxvd2VyLWNhc2UgYW5kIGlzIGFsc28KK2NvbXBhcmVkIGNhc2Ugc2Vuc2l0aXZlbHkuIFRoZXNlIHN1YnNlY3Rpb24gbmFtZXMgZm9sbG93IHRoZSBzYW1lCityZXN0cmljdGlvbnMgYXMgc2VjdGlvbiBuYW1lcy4KKworQWxsIHRoZSBvdGhlciBsaW5lcyAoYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGxpbmUgYWZ0ZXIgdGhlIHNlY3Rpb24KK2hlYWRlcikgYXJlIHJlY29nbml6ZWQgYXMgc2V0dGluZyB2YXJpYWJsZXMsIGluIHRoZSBmb3JtCisnbmFtZSA9IHZhbHVlJy4gIElmIHRoZXJlIGlzIG5vIGVxdWFsIHNpZ24gb24gdGhlIGxpbmUsIHRoZSBlbnRpcmUgbGluZQoraXMgdGFrZW4gYXMgJ25hbWUnIGFuZCB0aGUgdmFyaWFibGUgaXMgcmVjb2duaXplZCBhcyBib29sZWFuICJ0cnVlIi4KK1RoZSB2YXJpYWJsZSBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgYWxsb3cgb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycworYW5kIGAtYCwgYW5kIG11c3Qgc3RhcnQgd2l0aCBhbiBhbHBoYWJldGljIGNoYXJhY3Rlci4gIFRoZXJlIGNhbiBiZSBtb3JlCit0aGFuIG9uZSB2YWx1ZSBmb3IgYSBnaXZlbiB2YXJpYWJsZTsgd2Ugc2F5IHRoZW4gdGhhdCB0aGUgdmFyaWFibGUgaXMKK211bHRpdmFsdWVkLgorCitMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGluIGEgdmFyaWFibGUgdmFsdWUgaXMgZGlzY2FyZGVkLgorSW50ZXJuYWwgd2hpdGVzcGFjZSB3aXRoaW4gYSB2YXJpYWJsZSB2YWx1ZSBpcyByZXRhaW5lZCB2ZXJiYXRpbS4KKworVGhlIHZhbHVlcyBmb2xsb3dpbmcgdGhlIGVxdWFscyBzaWduIGluIHZhcmlhYmxlIGFzc2lnbiBhcmUgYWxsIGVpdGhlcgorYSBzdHJpbmcsIGFuIGludGVnZXIsIG9yIGEgYm9vbGVhbi4gIEJvb2xlYW4gdmFsdWVzIG1heSBiZSBnaXZlbiBhcyB5ZXMvbm8sCisxLzAsIHRydWUvZmFsc2Ugb3Igb24vb2ZmLiAgQ2FzZSBpcyBub3Qgc2lnbmlmaWNhbnQgaW4gYm9vbGVhbiB2YWx1ZXMsIHdoZW4KK2NvbnZlcnRpbmcgdmFsdWUgdG8gdGhlIGNhbm9uaWNhbCBmb3JtIHVzaW5nICctLWJvb2wnIHR5cGUgc3BlY2lmaWVyOworJ2dpdCBjb25maWcnIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG91dHB1dCBpcyAidHJ1ZSIgb3IgImZhbHNlIi4KKworU3RyaW5nIHZhbHVlcyBtYXkgYmUgZW50aXJlbHkgb3IgcGFydGlhbGx5IGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMuCitZb3UgbmVlZCB0byBlbmNsb3NlIHZhcmlhYmxlIHZhbHVlcyBpbiBkb3VibGUgcXVvdGVzIGlmIHlvdSB3YW50IHRvCitwcmVzZXJ2ZSBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UsIG9yIGlmIHRoZSB2YXJpYWJsZSB2YWx1ZSBjb250YWlucworY29tbWVudCBjaGFyYWN0ZXJzIChpLmUuIGl0IGNvbnRhaW5zICcjJyBvciAnOycpLgorRG91YmxlIHF1b3RlIGAiYCBhbmQgYmFja3NsYXNoIGBcYCBjaGFyYWN0ZXJzIGluIHZhcmlhYmxlIHZhbHVlcyBtdXN0CitiZSBlc2NhcGVkOiB1c2UgYFwiYCBmb3IgYCJgIGFuZCBgXFxgIGZvciBgXGAuCisKK1RoZSBmb2xsb3dpbmcgZXNjYXBlIHNlcXVlbmNlcyAoYmVzaWRlIGBcImAgYW5kIGBcXGApIGFyZSByZWNvZ25pemVkOgorYFxuYCBmb3IgbmV3bGluZSBjaGFyYWN0ZXIgKE5MKSwgYFx0YCBmb3IgaG9yaXpvbnRhbCB0YWJ1bGF0aW9uIChIVCwgVEFCKQorYW5kIGBcYmAgZm9yIGJhY2tzcGFjZSAoQlMpLiAgTm8gb3RoZXIgY2hhciBlc2NhcGUgc2VxdWVuY2UsIG5vciBvY3RhbAorY2hhciBzZXF1ZW5jZXMgYXJlIHZhbGlkLgorCitWYXJpYWJsZSB2YWx1ZXMgZW5kaW5nIGluIGEgYFxgIGFyZSBjb250aW51ZWQgb24gdGhlIG5leHQgbGluZSBpbiB0aGUKK2N1c3RvbWFyeSBVTklYIGZhc2hpb24uCisKK1NvbWUgdmFyaWFibGVzIG1heSByZXF1aXJlIGEgc3BlY2lhbCB2YWx1ZSBmb3JtYXQuCisKK0luY2x1ZGVzCit+fn5+fn5+fgorCitZb3UgY2FuIGluY2x1ZGUgb25lIGNvbmZpZyBmaWxlIGZyb20gYW5vdGhlciBieSBzZXR0aW5nIHRoZSBzcGVjaWFsCitgaW5jbHVkZS5wYXRoYCB2YXJpYWJsZSB0byB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBpbmNsdWRlZC4gVGhlCitpbmNsdWRlZCBmaWxlIGlzIGV4cGFuZGVkIGltbWVkaWF0ZWx5LCBhcyBpZiBpdHMgY29udGVudHMgaGFkIGJlZW4KK2ZvdW5kIGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgaW5jbHVkZSBkaXJlY3RpdmUuIElmIHRoZSB2YWx1ZSBvZiB0aGUKK2BpbmNsdWRlLnBhdGhgIHZhcmlhYmxlIGlzIGEgcmVsYXRpdmUgcGF0aCwgdGhlIHBhdGggaXMgY29uc2lkZXJlZCB0byBiZQorcmVsYXRpdmUgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB3aGljaCB0aGUgaW5jbHVkZSBkaXJlY3RpdmUgd2FzCitmb3VuZC4gVGhlIHZhbHVlIG9mIGBpbmNsdWRlLnBhdGhgIGlzIHN1YmplY3QgdG8gdGlsZGUgZXhwYW5zaW9uOiBgfi9gCitpcyBleHBhbmRlZCB0byB0aGUgdmFsdWUgb2YgYCRIT01FYCwgYW5kIGB+dXNlci9gIHRvIHRoZSBzcGVjaWZpZWQKK3VzZXIncyBob21lIGRpcmVjdG9yeS4gU2VlIGJlbG93IGZvciBleGFtcGxlcy4KKworRXhhbXBsZQorfn5+fn5+fgorCisJIyBDb3JlIHZhcmlhYmxlcworCVtjb3JlXQorCQk7IERvbid0IHRydXN0IGZpbGUgbW9kZXMKKwkJZmlsZW1vZGUgPSBmYWxzZQorCisJIyBPdXIgZGlmZiBhbGdvcml0aG0KKwlbZGlmZl0KKwkJZXh0ZXJuYWwgPSAvdXNyL2xvY2FsL2Jpbi9kaWZmLXdyYXBwZXIKKwkJcmVuYW1lcyA9IHRydWUKKworCVticmFuY2ggImRldmVsIl0KKwkJcmVtb3RlID0gb3JpZ2luCisJCW1lcmdlID0gcmVmcy9oZWFkcy9kZXZlbAorCisJIyBQcm94eSBzZXR0aW5ncworCVtjb3JlXQorCQlnaXRQcm94eT0ic3NoIiBmb3IgImtlcm5lbC5vcmciCisJCWdpdFByb3h5PWRlZmF1bHQtcHJveHkgOyBmb3IgdGhlIHJlc3QKKworCVtpbmNsdWRlXQorCQlwYXRoID0gL3BhdGgvdG8vZm9vLmluYyA7IGluY2x1ZGUgYnkgYWJzb2x1dGUgcGF0aAorCQlwYXRoID0gZm9vIDsgZXhwYW5kICJmb28iIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGZpbGUKKwkJcGF0aCA9IH4vZm9vIDsgZXhwYW5kICJmb28iIGluIHlvdXIgJEhPTUUgZGlyZWN0b3J5CisKK1ZhcmlhYmxlcworfn5+fn5+fn5+CisKK05vdGUgdGhhdCB0aGlzIGxpc3QgaXMgbm9uLWNvbXByZWhlbnNpdmUgYW5kIG5vdCBuZWNlc3NhcmlseSBjb21wbGV0ZS4KK0ZvciBjb21tYW5kLXNwZWNpZmljIHZhcmlhYmxlcywgeW91IHdpbGwgZmluZCBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24KK2luIHRoZSBhcHByb3ByaWF0ZSBtYW51YWwgcGFnZS4gWW91IHdpbGwgZmluZCBhIGRlc2NyaXB0aW9uIG9mIG5vbi1jb3JlCitwb3JjZWxhaW4gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaW4gdGhlIHJlc3BlY3RpdmUgcG9yY2VsYWluIGRvY3VtZW50YXRpb24uCisKK2FkdmljZS4qOjoKKwlUaGVzZSB2YXJpYWJsZXMgY29udHJvbCB2YXJpb3VzIG9wdGlvbmFsIGhlbHAgbWVzc2FnZXMgZGVzaWduZWQgdG8KKwlhaWQgbmV3IHVzZXJzLiBBbGwgJ2FkdmljZS4qJyB2YXJpYWJsZXMgZGVmYXVsdCB0byAndHJ1ZScsIGFuZCB5b3UKKwljYW4gdGVsbCBHaXQgdGhhdCB5b3UgZG8gbm90IG5lZWQgaGVscCBieSBzZXR0aW5nIHRoZXNlIHRvICdmYWxzZSc6CisrCistLQorCXB1c2hOb25GYXN0Rm9yd2FyZDo6CisJCVNldCB0aGlzIHZhcmlhYmxlIHRvICdmYWxzZScgaWYgeW91IHdhbnQgdG8gZGlzYWJsZQorCQkncHVzaE5vbkZGQ3VycmVudCcsICdwdXNoTm9uRkZEZWZhdWx0JywgYW5kCisJCSdwdXNoTm9uRkZNYXRjaGluZycgc2ltdWx0YW5lb3VzbHkuCisJcHVzaE5vbkZGQ3VycmVudDo6CisJCUFkdmljZSBzaG93biB3aGVuIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gZmFpbHMgZHVlIHRvIGEKKwkJbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorCXB1c2hOb25GRkRlZmF1bHQ6OgorCQlBZHZpY2UgdG8gc2V0ICdwdXNoLmRlZmF1bHQnIHRvICd1cHN0cmVhbScgb3IgJ2N1cnJlbnQnCisJCXdoZW4geW91IHJhbiBsaW5rZ2l0OmdpdC1wdXNoWzFdIGFuZCBwdXNoZWQgJ21hdGNoaW5nCisJCXJlZnMnIGJ5IGRlZmF1bHQgKGkuZS4geW91IGRpZCBub3QgcHJvdmlkZSBhbiBleHBsaWNpdAorCQlyZWZzcGVjLCBhbmQgbm8gJ3B1c2guZGVmYXVsdCcgY29uZmlndXJhdGlvbiB3YXMgc2V0KQorCQlhbmQgaXQgcmVzdWx0ZWQgaW4gYSBub24tZmFzdC1mb3J3YXJkIGVycm9yLgorCXB1c2hOb25GRk1hdGNoaW5nOjoKKwkJQWR2aWNlIHNob3duIHdoZW4geW91IHJhbiBsaW5rZ2l0OmdpdC1wdXNoWzFdIGFuZCBwdXNoZWQKKwkJJ21hdGNoaW5nIHJlZnMnIGV4cGxpY2l0bHkgKGkuZS4geW91IHVzZWQgJzonLCBvcgorCQlzcGVjaWZpZWQgYSByZWZzcGVjIHRoYXQgaXNuJ3QgeW91ciBjdXJyZW50IGJyYW5jaCkgYW5kCisJCWl0IHJlc3VsdGVkIGluIGEgbm9uLWZhc3QtZm9yd2FyZCBlcnJvci4KKwlzdGF0dXNIaW50czo6CisJCVNob3cgZGlyZWN0aW9ucyBvbiBob3cgdG8gcHJvY2VlZCBmcm9tIHRoZSBjdXJyZW50CisJCXN0YXRlIGluIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtc3RhdHVzWzFdIGFuZCBpbgorCQl0aGUgdGVtcGxhdGUgc2hvd24gd2hlbiB3cml0aW5nIGNvbW1pdCBtZXNzYWdlcyBpbgorCQlsaW5rZ2l0OmdpdC1jb21taXRbMV0uCisJY29tbWl0QmVmb3JlTWVyZ2U6OgorCQlBZHZpY2Ugc2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1tZXJnZVsxXSByZWZ1c2VzIHRvCisJCW1lcmdlIHRvIGF2b2lkIG92ZXJ3cml0aW5nIGxvY2FsIGNoYW5nZXMuCisJcmVzb2x2ZUNvbmZsaWN0OjoKKwkJQWR2aWNlcyBzaG93biBieSB2YXJpb3VzIGNvbW1hbmRzIHdoZW4gY29uZmxpY3RzCisJCXByZXZlbnQgdGhlIG9wZXJhdGlvbiBmcm9tIGJlaW5nIHBlcmZvcm1lZC4KKwlpbXBsaWNpdElkZW50aXR5OjoKKwkJQWR2aWNlIG9uIGhvdyB0byBzZXQgeW91ciBpZGVudGl0eSBjb25maWd1cmF0aW9uIHdoZW4KKwkJeW91ciBpbmZvcm1hdGlvbiBpcyBndWVzc2VkIGZyb20gdGhlIHN5c3RlbSB1c2VybmFtZSBhbmQKKwkJZG9tYWluIG5hbWUuCisJZGV0YWNoZWRIZWFkOjoKKwkJQWR2aWNlIHNob3duIHdoZW4geW91IHVzZWQgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gdG8KKwkJbW92ZSB0byB0aGUgZGV0YWNoIEhFQUQgc3RhdGUsIHRvIGluc3RydWN0IGhvdyB0byBjcmVhdGUKKwkJYSBsb2NhbCBicmFuY2ggYWZ0ZXIgdGhlIGZhY3QuCisJYW1Xb3JrRGlyOjoKKwkJQWR2aWNlIHRoYXQgc2hvd3MgdGhlIGxvY2F0aW9uIG9mIHRoZSBwYXRjaCBmaWxlIHdoZW4KKwkJbGlua2dpdDpnaXQtYW1bMV0gZmFpbHMgdG8gYXBwbHkgaXQuCistLQorCitjb3JlLmZpbGVNb2RlOjoKKwlJZiBmYWxzZSwgdGhlIGV4ZWN1dGFibGUgYml0IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGluZGV4IGFuZAorCXRoZSB3b3JraW5nIHRyZWUgYXJlIGlnbm9yZWQ7IHVzZWZ1bCBvbiBicm9rZW4gZmlsZXN5c3RlbXMgbGlrZSBGQVQuCisJU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4KKysKK1RoZSBkZWZhdWx0IGlzIHRydWUsIGV4Y2VwdCBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBvciBsaW5rZ2l0OmdpdC1pbml0WzFdCit3aWxsIHByb2JlIGFuZCBzZXQgY29yZS5maWxlTW9kZSBmYWxzZSBpZiBhcHByb3ByaWF0ZSB3aGVuIHRoZQorcmVwb3NpdG9yeSBpcyBjcmVhdGVkLgorCitjb3JlLmlnbm9yZUN5Z3dpbkZTVHJpY2tzOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgYnkgQ3lnd2luIGltcGxlbWVudGF0aW9uIG9mIEdpdC4gSWYgZmFsc2UsCisJdGhlIEN5Z3dpbiBzdGF0KCkgYW5kIGxzdGF0KCkgZnVuY3Rpb25zIGFyZSB1c2VkLiBUaGlzIG1heSBiZSB1c2VmdWwKKwlpZiB5b3VyIHJlcG9zaXRvcnkgY29uc2lzdHMgb2YgYSBmZXcgc2VwYXJhdGUgZGlyZWN0b3JpZXMgam9pbmVkIGluCisJb25lIGhpZXJhcmNoeSB1c2luZyBDeWd3aW4gbW91bnQuIElmIHRydWUsIEdpdCB1c2VzIG5hdGl2ZSBXaW4zMiBBUEkKKwl3aGVuZXZlciBpdCBpcyBwb3NzaWJsZSBhbmQgZmFsbHMgYmFjayB0byBDeWd3aW4gZnVuY3Rpb25zIG9ubHkgdG8KKwloYW5kbGUgc3ltYm9sIGxpbmtzLiBUaGUgbmF0aXZlIG1vZGUgaXMgbW9yZSB0aGFuIHR3aWNlIGZhc3RlciB0aGFuCisJbm9ybWFsIEN5Z3dpbiBsL3N0YXQoKSBmdW5jdGlvbnMuIFRydWUgYnkgZGVmYXVsdCwgdW5sZXNzIGNvcmUuZmlsZW1vZGUKKwlpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGlnbm9yZUN5Z3dpbkZTVHJpY2tzIGlzIGlnbm9yZWQgYXMgQ3lnd2luJ3MKKwlQT1NJWCBlbXVsYXRpb24gaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBjb3JlLmZpbGVtb2RlLgorCitjb3JlLmlnbm9yZWNhc2U6OgorCUlmIHRydWUsIHRoaXMgb3B0aW9uIGVuYWJsZXMgdmFyaW91cyB3b3JrYXJvdW5kcyB0byBlbmFibGUKKwlnaXQgdG8gd29yayBiZXR0ZXIgb24gZmlsZXN5c3RlbXMgdGhhdCBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLAorCWxpa2UgRkFULiBGb3IgZXhhbXBsZSwgaWYgYSBkaXJlY3RvcnkgbGlzdGluZyBmaW5kcworCSJtYWtlZmlsZSIgd2hlbiBnaXQgZXhwZWN0cyAiTWFrZWZpbGUiLCBnaXQgd2lsbCBhc3N1bWUKKwlpdCBpcyByZWFsbHkgdGhlIHNhbWUgZmlsZSwgYW5kIGNvbnRpbnVlIHRvIHJlbWVtYmVyIGl0IGFzCisJIk1ha2VmaWxlIi4KKysKK1RoZSBkZWZhdWx0IGlzIGZhbHNlLCBleGNlcHQgbGlua2dpdDpnaXQtY2xvbmVbMV0gb3IgbGlua2dpdDpnaXQtaW5pdFsxXQord2lsbCBwcm9iZSBhbmQgc2V0IGNvcmUuaWdub3JlY2FzZSB0cnVlIGlmIGFwcHJvcHJpYXRlIHdoZW4gdGhlIHJlcG9zaXRvcnkKK2lzIGNyZWF0ZWQuCisKK2NvcmUucHJlY29tcG9zZXVuaWNvZGU6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZCBieSBNYWMgT1MgaW1wbGVtZW50YXRpb24gb2YgZ2l0LgorCVdoZW4gY29yZS5wcmVjb21wb3NldW5pY29kZT10cnVlLCBnaXQgcmV2ZXJ0cyB0aGUgdW5pY29kZSBkZWNvbXBvc2l0aW9uCisJb2YgZmlsZW5hbWVzIGRvbmUgYnkgTWFjIE9TLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHNoYXJpbmcgYSByZXBvc2l0b3J5CisJYmV0d2VlbiBNYWMgT1MgYW5kIExpbnV4IG9yIFdpbmRvd3MuCisJKEdpdCBmb3IgV2luZG93cyAxLjcuMTAgb3IgaGlnaGVyIGlzIG5lZWRlZCwgb3IgZ2l0IHVuZGVyIGN5Z3dpbiAxLjcpLgorCVdoZW4gZmFsc2UsIGZpbGUgbmFtZXMgYXJlIGhhbmRsZWQgZnVsbHkgdHJhbnNwYXJlbnQgYnkgZ2l0LAorCXdoaWNoIGlzIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBnaXQuCisKK2NvcmUudHJ1c3RjdGltZTo6CisJSWYgZmFsc2UsIHRoZSBjdGltZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlCisJd29ya2luZyB0cmVlIGFyZSBpZ25vcmVkOyB1c2VmdWwgd2hlbiB0aGUgaW5vZGUgY2hhbmdlIHRpbWUKKwlpcyByZWd1bGFybHkgbW9kaWZpZWQgYnkgc29tZXRoaW5nIG91dHNpZGUgR2l0IChmaWxlIHN5c3RlbQorCWNyYXdsZXJzIGFuZCBzb21lIGJhY2t1cCBzeXN0ZW1zKS4KKwlTZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLiBUcnVlIGJ5IGRlZmF1bHQuCisKK2NvcmUucXVvdGVwYXRoOjoKKwlUaGUgY29tbWFuZHMgdGhhdCBvdXRwdXQgcGF0aHMgKGUuZy4gJ2xzLWZpbGVzJywKKwknZGlmZicpLCB3aGVuIG5vdCBnaXZlbiB0aGUgYC16YCBvcHRpb24sIHdpbGwgcXVvdGUKKwkidW51c3VhbCIgY2hhcmFjdGVycyBpbiB0aGUgcGF0aG5hbWUgYnkgZW5jbG9zaW5nIHRoZQorCXBhdGhuYW1lIGluIGEgZG91YmxlLXF1b3RlIHBhaXIgYW5kIHdpdGggYmFja3NsYXNoZXMgdGhlCisJc2FtZSB3YXkgc3RyaW5ncyBpbiBDIHNvdXJjZSBjb2RlIGFyZSBxdW90ZWQuICBJZiB0aGlzCisJdmFyaWFibGUgaXMgc2V0IHRvIGZhbHNlLCB0aGUgYnl0ZXMgaGlnaGVyIHRoYW4gMHg4MCBhcmUKKwlub3QgcXVvdGVkIGJ1dCBvdXRwdXQgYXMgdmVyYmF0aW0uICBOb3RlIHRoYXQgZG91YmxlCisJcXVvdGUsIGJhY2tzbGFzaCBhbmQgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBhbHdheXMKKwlxdW90ZWQgd2l0aG91dCBgLXpgIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YgdGhpcworCXZhcmlhYmxlLgorCitjb3JlLmVvbDo6CisJU2V0cyB0aGUgbGluZSBlbmRpbmcgdHlwZSB0byB1c2UgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvcgorCWZpbGVzIHRoYXQgaGF2ZSB0aGUgYHRleHRgIHByb3BlcnR5IHNldC4gIEFsdGVybmF0aXZlcyBhcmUKKwknbGYnLCAnY3JsZicgYW5kICduYXRpdmUnLCB3aGljaCB1c2VzIHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZQorCWxpbmUgZW5kaW5nLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYG5hdGl2ZWAuICBTZWUKKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZW5kLW9mLWxpbmUKKwljb252ZXJzaW9uLgorCitjb3JlLnNhZmVjcmxmOjoKKwlJZiB0cnVlLCBtYWtlcyBnaXQgY2hlY2sgaWYgY29udmVydGluZyBgQ1JMRmAgaXMgcmV2ZXJzaWJsZSB3aGVuCisJZW5kLW9mLWxpbmUgY29udmVyc2lvbiBpcyBhY3RpdmUuICBHaXQgd2lsbCB2ZXJpZnkgaWYgYSBjb21tYW5kCisJbW9kaWZpZXMgYSBmaWxlIGluIHRoZSB3b3JrIHRyZWUgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuCisJRm9yIGV4YW1wbGUsIGNvbW1pdHRpbmcgYSBmaWxlIGZvbGxvd2VkIGJ5IGNoZWNraW5nIG91dCB0aGUKKwlzYW1lIGZpbGUgc2hvdWxkIHlpZWxkIHRoZSBvcmlnaW5hbCBmaWxlIGluIHRoZSB3b3JrIHRyZWUuICBJZgorCXRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciB0aGUgY3VycmVudCBzZXR0aW5nIG9mCisJYGNvcmUuYXV0b2NybGZgLCBnaXQgd2lsbCByZWplY3QgdGhlIGZpbGUuICBUaGUgdmFyaWFibGUgY2FuCisJYmUgc2V0IHRvICJ3YXJuIiwgaW4gd2hpY2ggY2FzZSBnaXQgd2lsbCBvbmx5IHdhcm4gYWJvdXQgYW4KKwlpcnJldmVyc2libGUgY29udmVyc2lvbiBidXQgY29udGludWUgdGhlIG9wZXJhdGlvbi4KKysKK0NSTEYgY29udmVyc2lvbiBiZWFycyBhIHNsaWdodCBjaGFuY2Ugb2YgY29ycnVwdGluZyBkYXRhLgorV2hlbiBpdCBpcyBlbmFibGVkLCBnaXQgd2lsbCBjb252ZXJ0IENSTEYgdG8gTEYgZHVyaW5nIGNvbW1pdCBhbmQgTEYgdG8KK0NSTEYgZHVyaW5nIGNoZWNrb3V0LiAgQSBmaWxlIHRoYXQgY29udGFpbnMgYSBtaXh0dXJlIG9mIExGIGFuZAorQ1JMRiBiZWZvcmUgdGhlIGNvbW1pdCBjYW5ub3QgYmUgcmVjcmVhdGVkIGJ5IGdpdC4gIEZvciB0ZXh0CitmaWxlcyB0aGlzIGlzIHRoZSByaWdodCB0aGluZyB0byBkbzogaXQgY29ycmVjdHMgbGluZSBlbmRpbmdzCitzdWNoIHRoYXQgd2UgaGF2ZSBvbmx5IExGIGxpbmUgZW5kaW5ncyBpbiB0aGUgcmVwb3NpdG9yeS4KK0J1dCBmb3IgYmluYXJ5IGZpbGVzIHRoYXQgYXJlIGFjY2lkZW50YWxseSBjbGFzc2lmaWVkIGFzIHRleHQgdGhlCitjb252ZXJzaW9uIGNhbiBjb3JydXB0IGRhdGEuCisrCitJZiB5b3UgcmVjb2duaXplIHN1Y2ggY29ycnVwdGlvbiBlYXJseSB5b3UgY2FuIGVhc2lseSBmaXggaXQgYnkKK3NldHRpbmcgdGhlIGNvbnZlcnNpb24gdHlwZSBleHBsaWNpdGx5IGluIC5naXRhdHRyaWJ1dGVzLiAgUmlnaHQKK2FmdGVyIGNvbW1pdHRpbmcgeW91IHN0aWxsIGhhdmUgdGhlIG9yaWdpbmFsIGZpbGUgaW4geW91ciB3b3JrCit0cmVlIGFuZCB0aGlzIGZpbGUgaXMgbm90IHlldCBjb3JydXB0ZWQuICBZb3UgY2FuIGV4cGxpY2l0bHkgdGVsbAorZ2l0IHRoYXQgdGhpcyBmaWxlIGlzIGJpbmFyeSBhbmQgZ2l0IHdpbGwgaGFuZGxlIHRoZSBmaWxlCithcHByb3ByaWF0ZWx5LgorKworVW5mb3J0dW5hdGVseSwgdGhlIGRlc2lyZWQgZWZmZWN0IG9mIGNsZWFuaW5nIHVwIHRleHQgZmlsZXMgd2l0aAorbWl4ZWQgbGluZSBlbmRpbmdzIGFuZCB0aGUgdW5kZXNpcmVkIGVmZmVjdCBvZiBjb3JydXB0aW5nIGJpbmFyeQorZmlsZXMgY2Fubm90IGJlIGRpc3Rpbmd1aXNoZWQuICBJbiBib3RoIGNhc2VzIENSTEZzIGFyZSByZW1vdmVkCitpbiBhbiBpcnJldmVyc2libGUgd2F5LiAgRm9yIHRleHQgZmlsZXMgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcKK3RvIGRvIGJlY2F1c2UgQ1JMRnMgYXJlIGxpbmUgZW5kaW5ncywgd2hpbGUgZm9yIGJpbmFyeSBmaWxlcworY29udmVydGluZyBDUkxGcyBjb3JydXB0cyBkYXRhLgorKworTm90ZSwgdGhpcyBzYWZldHkgY2hlY2sgZG9lcyBub3QgbWVhbiB0aGF0IGEgY2hlY2tvdXQgd2lsbCBnZW5lcmF0ZSBhCitmaWxlIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgZmlsZSBmb3IgYSBkaWZmZXJlbnQgc2V0dGluZyBvZgorYGNvcmUuZW9sYCBhbmQgYGNvcmUuYXV0b2NybGZgLCBidXQgb25seSBmb3IgdGhlIGN1cnJlbnQgb25lLiAgRm9yCitleGFtcGxlLCBhIHRleHQgZmlsZSB3aXRoIGBMRmAgd291bGQgYmUgYWNjZXB0ZWQgd2l0aCBgY29yZS5lb2w9bGZgCithbmQgY291bGQgbGF0ZXIgYmUgY2hlY2tlZCBvdXQgd2l0aCBgY29yZS5lb2w9Y3JsZmAsIGluIHdoaWNoIGNhc2UgdGhlCityZXN1bHRpbmcgZmlsZSB3b3VsZCBjb250YWluIGBDUkxGYCwgYWx0aG91Z2ggdGhlIG9yaWdpbmFsIGZpbGUKK2NvbnRhaW5lZCBgTEZgLiAgSG93ZXZlciwgaW4gYm90aCB3b3JrIHRyZWVzIHRoZSBsaW5lIGVuZGluZ3Mgd291bGQgYmUKK2NvbnNpc3RlbnQsIHRoYXQgaXMgZWl0aGVyIGFsbCBgTEZgIG9yIGFsbCBgQ1JMRmAsIGJ1dCBuZXZlciBtaXhlZC4gIEEKK2ZpbGUgd2l0aCBtaXhlZCBsaW5lIGVuZGluZ3Mgd291bGQgYmUgcmVwb3J0ZWQgYnkgdGhlIGBjb3JlLnNhZmVjcmxmYAorbWVjaGFuaXNtLgorCitjb3JlLmF1dG9jcmxmOjoKKwlTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gInRydWUiIGlzIGFsbW9zdCB0aGUgc2FtZSBhcyBzZXR0aW5nCisJdGhlIGB0ZXh0YCBhdHRyaWJ1dGUgdG8gImF1dG8iIG9uIGFsbCBmaWxlcyBleGNlcHQgdGhhdCB0ZXh0CisJZmlsZXMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIG5vcm1hbGl6ZWQ6IGZpbGVzIHRoYXQgY29udGFpbgorCWBDUkxGYCBpbiB0aGUgcmVwb3NpdG9yeSB3aWxsIG5vdCBiZSB0b3VjaGVkLiAgVXNlIHRoaXMKKwlzZXR0aW5nIGlmIHlvdSB3YW50IHRvIGhhdmUgYENSTEZgIGxpbmUgZW5kaW5ncyBpbiB5b3VyCisJd29ya2luZyBkaXJlY3RvcnkgZXZlbiB0aG91Z2ggdGhlIHJlcG9zaXRvcnkgZG9lcyBub3QgaGF2ZQorCW5vcm1hbGl6ZWQgbGluZSBlbmRpbmdzLiAgVGhpcyB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvICdpbnB1dCcsCisJaW4gd2hpY2ggY2FzZSBubyBvdXRwdXQgY29udmVyc2lvbiBpcyBwZXJmb3JtZWQuCisKK2NvcmUuc3ltbGlua3M6OgorCUlmIGZhbHNlLCBzeW1ib2xpYyBsaW5rcyBhcmUgY2hlY2tlZCBvdXQgYXMgc21hbGwgcGxhaW4gZmlsZXMgdGhhdAorCWNvbnRhaW4gdGhlIGxpbmsgdGV4dC4gbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdIGFuZAorCWxpbmtnaXQ6Z2l0LWFkZFsxXSB3aWxsIG5vdCBjaGFuZ2UgdGhlIHJlY29yZGVkIHR5cGUgdG8gcmVndWxhcgorCWZpbGUuIFVzZWZ1bCBvbiBmaWxlc3lzdGVtcyBsaWtlIEZBVCB0aGF0IGRvIG5vdCBzdXBwb3J0CisJc3ltYm9saWMgbGlua3MuCisrCitUaGUgZGVmYXVsdCBpcyB0cnVlLCBleGNlcHQgbGlua2dpdDpnaXQtY2xvbmVbMV0gb3IgbGlua2dpdDpnaXQtaW5pdFsxXQord2lsbCBwcm9iZSBhbmQgc2V0IGNvcmUuc3ltbGlua3MgZmFsc2UgaWYgYXBwcm9wcmlhdGUgd2hlbiB0aGUgcmVwb3NpdG9yeQoraXMgY3JlYXRlZC4KKworY29yZS5naXRQcm94eTo6CisJQSAicHJveHkgY29tbWFuZCIgdG8gZXhlY3V0ZSAoYXMgJ2NvbW1hbmQgaG9zdCBwb3J0JykgaW5zdGVhZAorCW9mIGVzdGFibGlzaGluZyBkaXJlY3QgY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlIHNlcnZlciB3aGVuCisJdXNpbmcgdGhlIGdpdCBwcm90b2NvbCBmb3IgZmV0Y2hpbmcuIElmIHRoZSB2YXJpYWJsZSB2YWx1ZSBpcworCWluIHRoZSAiQ09NTUFORCBmb3IgRE9NQUlOIiBmb3JtYXQsIHRoZSBjb21tYW5kIGlzIGFwcGxpZWQgb25seQorCW9uIGhvc3RuYW1lcyBlbmRpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIGRvbWFpbiBzdHJpbmcuIFRoaXMgdmFyaWFibGUKKwltYXkgYmUgc2V0IG11bHRpcGxlIHRpbWVzIGFuZCBpcyBtYXRjaGVkIGluIHRoZSBnaXZlbiBvcmRlcjsKKwl0aGUgZmlyc3QgbWF0Y2ggd2lucy4KKysKK0NhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX1BST1hZX0NPTU1BTkQnIGVudmlyb25tZW50IHZhcmlhYmxlCisod2hpY2ggYWx3YXlzIGFwcGxpZXMgdW5pdmVyc2FsbHksIHdpdGhvdXQgdGhlIHNwZWNpYWwgImZvciIKK2hhbmRsaW5nKS4KKysKK1RoZSBzcGVjaWFsIHN0cmluZyBgbm9uZWAgY2FuIGJlIHVzZWQgYXMgdGhlIHByb3h5IGNvbW1hbmQgdG8KK3NwZWNpZnkgdGhhdCBubyBwcm94eSBiZSB1c2VkIGZvciBhIGdpdmVuIGRvbWFpbiBwYXR0ZXJuLgorVGhpcyBpcyB1c2VmdWwgZm9yIGV4Y2x1ZGluZyBzZXJ2ZXJzIGluc2lkZSBhIGZpcmV3YWxsIGZyb20KK3Byb3h5IHVzZSwgd2hpbGUgZGVmYXVsdGluZyB0byBhIGNvbW1vbiBwcm94eSBmb3IgZXh0ZXJuYWwgZG9tYWlucy4KKworY29yZS5pZ25vcmVTdGF0OjoKKwlJZiB0cnVlLCBjb21tYW5kcyB3aGljaCBtb2RpZnkgYm90aCB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgKKwl3aWxsIG1hcmsgdGhlIHVwZGF0ZWQgcGF0aHMgd2l0aCB0aGUgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCBpbiB0aGUKKwlpbmRleC4gVGhlc2UgbWFya2VkIGZpbGVzIGFyZSB0aGVuIGFzc3VtZWQgdG8gc3RheSB1bmNoYW5nZWQgaW4gdGhlCisJd29ya2luZyB0cmVlLCB1bnRpbCB5b3UgbWFyayB0aGVtIG90aGVyd2lzZSBtYW51YWxseSAtIEdpdCB3aWxsIG5vdAorCWRldGVjdCB0aGUgZmlsZSBjaGFuZ2VzCWJ5IGxzdGF0KCkgY2FsbHMuIFRoaXMgaXMgdXNlZnVsIG9uIHN5c3RlbXMKKwl3aGVyZSB0aG9zZSBhcmUgdmVyeSBzbG93LCBzdWNoIGFzIE1pY3Jvc29mdCBXaW5kb3dzLgorCVNlZSBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0uCisJRmFsc2UgYnkgZGVmYXVsdC4KKworY29yZS5wcmVmZXJTeW1saW5rUmVmczo6CisJSW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAic3ltcmVmIiBmb3JtYXQgZm9yIEhFQUQKKwlhbmQgb3RoZXIgc3ltYm9saWMgcmVmZXJlbmNlIGZpbGVzLCB1c2Ugc3ltYm9saWMgbGlua3MuCisJVGhpcyBpcyBzb21ldGltZXMgbmVlZGVkIHRvIHdvcmsgd2l0aCBvbGQgc2NyaXB0cyB0aGF0CisJZXhwZWN0IEhFQUQgdG8gYmUgYSBzeW1ib2xpYyBsaW5rLgorCitjb3JlLmJhcmU6OgorCUlmIHRydWUgdGhpcyByZXBvc2l0b3J5IGlzIGFzc3VtZWQgdG8gYmUgJ2JhcmUnIGFuZCBoYXMgbm8KKwl3b3JraW5nIGRpcmVjdG9yeSBhc3NvY2lhdGVkIHdpdGggaXQuICBJZiB0aGlzIGlzIHRoZSBjYXNlIGEKKwludW1iZXIgb2YgY29tbWFuZHMgdGhhdCByZXF1aXJlIGEgd29ya2luZyBkaXJlY3Rvcnkgd2lsbCBiZQorCWRpc2FibGVkLCBzdWNoIGFzIGxpbmtnaXQ6Z2l0LWFkZFsxXSBvciBsaW5rZ2l0OmdpdC1tZXJnZVsxXS4KKysKK1RoaXMgc2V0dGluZyBpcyBhdXRvbWF0aWNhbGx5IGd1ZXNzZWQgYnkgbGlua2dpdDpnaXQtY2xvbmVbMV0gb3IKK2xpbmtnaXQ6Z2l0LWluaXRbMV0gd2hlbiB0aGUgcmVwb3NpdG9yeSB3YXMgY3JlYXRlZC4gIEJ5IGRlZmF1bHQgYQorcmVwb3NpdG9yeSB0aGF0IGVuZHMgaW4gIi8uZ2l0IiBpcyBhc3N1bWVkIHRvIGJlIG5vdCBiYXJlIChiYXJlID0KK2ZhbHNlKSwgd2hpbGUgYWxsIG90aGVyIHJlcG9zaXRvcmllcyBhcmUgYXNzdW1lZCB0byBiZSBiYXJlIChiYXJlCis9IHRydWUpLgorCitjb3JlLndvcmt0cmVlOjoKKwlTZXQgdGhlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZS4KKwlUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBHSVRfV09SS19UUkVFIGVudmlyb25tZW50CisJdmFyaWFibGUgYW5kIHRoZSAnLS13b3JrLXRyZWUnIGNvbW1hbmQgbGluZSBvcHRpb24uCisJVGhlIHZhbHVlIGNhbiBiZSBhbiBhYnNvbHV0ZSBwYXRoIG9yIHJlbGF0aXZlIHRvIHRoZSBwYXRoIHRvCisJdGhlIC5naXQgZGlyZWN0b3J5LCB3aGljaCBpcyBlaXRoZXIgc3BlY2lmaWVkIGJ5IC0tZ2l0LWRpcgorCW9yIEdJVF9ESVIsIG9yIGF1dG9tYXRpY2FsbHkgZGlzY292ZXJlZC4KKwlJZiAtLWdpdC1kaXIgb3IgR0lUX0RJUiBpcyBzcGVjaWZpZWQgYnV0IG5vbmUgb2YKKwktLXdvcmstdHJlZSwgR0lUX1dPUktfVFJFRSBhbmQgY29yZS53b3JrdHJlZSBpcyBzcGVjaWZpZWQsCisJdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgcmVnYXJkZWQgYXMgdGhlIHRvcCBsZXZlbAorCW9mIHlvdXIgd29ya2luZyB0cmVlLgorKworTm90ZSB0aGF0IHRoaXMgdmFyaWFibGUgaXMgaG9ub3JlZCBldmVuIHdoZW4gc2V0IGluIGEgY29uZmlndXJhdGlvbgorZmlsZSBpbiBhICIuZ2l0IiBzdWJkaXJlY3Rvcnkgb2YgYSBkaXJlY3RvcnkgYW5kIGl0cyB2YWx1ZSBkaWZmZXJzCitmcm9tIHRoZSBsYXR0ZXIgZGlyZWN0b3J5IChlLmcuICIvcGF0aC90by8uZ2l0L2NvbmZpZyIgaGFzCitjb3JlLndvcmt0cmVlIHNldCB0byAiL2RpZmZlcmVudC9wYXRoIiksIHdoaWNoIGlzIG1vc3QgbGlrZWx5IGEKK21pc2NvbmZpZ3VyYXRpb24uICBSdW5uaW5nIGdpdCBjb21tYW5kcyBpbiB0aGUgIi9wYXRoL3RvIiBkaXJlY3Rvcnkgd2lsbAorc3RpbGwgdXNlICIvZGlmZmVyZW50L3BhdGgiIGFzIHRoZSByb290IG9mIHRoZSB3b3JrIHRyZWUgYW5kIGNhbiBjYXVzZQorY29uZnVzaW9uIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgKGUuZy4geW91IGFyZSBjcmVhdGluZyBhCityZWFkLW9ubHkgc25hcHNob3Qgb2YgdGhlIHNhbWUgaW5kZXggdG8gYSBsb2NhdGlvbiBkaWZmZXJlbnQgZnJvbSB0aGUKK3JlcG9zaXRvcnkncyB1c3VhbCB3b3JraW5nIHRyZWUpLgorCitjb3JlLmxvZ0FsbFJlZlVwZGF0ZXM6OgorCUVuYWJsZSB0aGUgcmVmbG9nLiBVcGRhdGVzIHRvIGEgcmVmIDxyZWY+IGlzIGxvZ2dlZCB0byB0aGUgZmlsZQorCSIkR0lUX0RJUi9sb2dzLzxyZWY+IiwgYnkgYXBwZW5kaW5nIHRoZSBuZXcgYW5kIG9sZAorCVNIQTEsIHRoZSBkYXRlL3RpbWUgYW5kIHRoZSByZWFzb24gb2YgdGhlIHVwZGF0ZSwgYnV0CisJb25seSB3aGVuIHRoZSBmaWxlIGV4aXN0cy4gIElmIHRoaXMgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlIGlzIHNldCB0byB0cnVlLCBtaXNzaW5nICIkR0lUX0RJUi9sb2dzLzxyZWY+IgorCWZpbGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZvciBicmFuY2ggaGVhZHMgKGkuZS4gdW5kZXIKKwlyZWZzL2hlYWRzLyksIHJlbW90ZSByZWZzIChpLmUuIHVuZGVyIHJlZnMvcmVtb3Rlcy8pLAorCW5vdGUgcmVmcyAoaS5lLiB1bmRlciByZWZzL25vdGVzLyksIGFuZCB0aGUgc3ltYm9saWMgcmVmIEhFQUQuCisrCitUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGF0IGNvbW1pdAord2FzIHRoZSB0aXAgb2YgYSBicmFuY2ggIjIgZGF5cyBhZ28iLgorKworVGhpcyB2YWx1ZSBpcyB0cnVlIGJ5IGRlZmF1bHQgaW4gYSByZXBvc2l0b3J5IHRoYXQgaGFzCithIHdvcmtpbmcgZGlyZWN0b3J5IGFzc29jaWF0ZWQgd2l0aCBpdCwgYW5kIGZhbHNlIGJ5CitkZWZhdWx0IGluIGEgYmFyZSByZXBvc2l0b3J5LgorCitjb3JlLnJlcG9zaXRvcnlGb3JtYXRWZXJzaW9uOjoKKwlJbnRlcm5hbCB2YXJpYWJsZSBpZGVudGlmeWluZyB0aGUgcmVwb3NpdG9yeSBmb3JtYXQgYW5kIGxheW91dAorCXZlcnNpb24uCisKK2NvcmUuc2hhcmVkUmVwb3NpdG9yeTo6CisJV2hlbiAnZ3JvdXAnIChvciAndHJ1ZScpLCB0aGUgcmVwb3NpdG9yeSBpcyBtYWRlIHNoYXJlYWJsZSBiZXR3ZWVuCisJc2V2ZXJhbCB1c2VycyBpbiBhIGdyb3VwIChtYWtpbmcgc3VyZSBhbGwgdGhlIGZpbGVzIGFuZCBvYmplY3RzIGFyZQorCWdyb3VwLXdyaXRhYmxlKS4gV2hlbiAnYWxsJyAob3IgJ3dvcmxkJyBvciAnZXZlcnlib2R5JyksIHRoZQorCXJlcG9zaXRvcnkgd2lsbCBiZSByZWFkYWJsZSBieSBhbGwgdXNlcnMsIGFkZGl0aW9uYWxseSB0byBiZWluZworCWdyb3VwLXNoYXJlYWJsZS4gV2hlbiAndW1hc2snIChvciAnZmFsc2UnKSwgZ2l0IHdpbGwgdXNlIHBlcm1pc3Npb25zCisJcmVwb3J0ZWQgYnkgdW1hc2soMikuIFdoZW4gJzB4eHgnLCB3aGVyZSAnMHh4eCcgaXMgYW4gb2N0YWwgbnVtYmVyLAorCWZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHdpbGwgaGF2ZSB0aGlzIG1vZGUgdmFsdWUuICcweHh4JyB3aWxsIG92ZXJyaWRlCisJdXNlcidzIHVtYXNrIHZhbHVlICh3aGVyZWFzIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgb25seSBvdmVycmlkZQorCXJlcXVlc3RlZCBwYXJ0cyBvZiB0aGUgdXNlcidzIHVtYXNrIHZhbHVlKS4gRXhhbXBsZXM6ICcwNjYwJyB3aWxsIG1ha2UKKwl0aGUgcmVwbyByZWFkL3dyaXRlLWFibGUgZm9yIHRoZSBvd25lciBhbmQgZ3JvdXAsIGJ1dCBpbmFjY2Vzc2libGUgdG8KKwlvdGhlcnMgKGVxdWl2YWxlbnQgdG8gJ2dyb3VwJyB1bmxlc3MgdW1hc2sgaXMgZS5nLiAnMDAyMicpLiAnMDY0MCcgaXMgYQorCXJlcG9zaXRvcnkgdGhhdCBpcyBncm91cC1yZWFkYWJsZSBidXQgbm90IGdyb3VwLXdyaXRhYmxlLgorCVNlZSBsaW5rZ2l0OmdpdC1pbml0WzFdLiBGYWxzZSBieSBkZWZhdWx0LgorCitjb3JlLndhcm5BbWJpZ3VvdXNSZWZzOjoKKwlJZiB0cnVlLCBnaXQgd2lsbCB3YXJuIHlvdSBpZiB0aGUgcmVmIG5hbWUgeW91IHBhc3NlZCBpdCBpcyBhbWJpZ3VvdXMKKwlhbmQgbWlnaHQgbWF0Y2ggbXVsdGlwbGUgcmVmcyBpbiB0aGUgLmdpdC9yZWZzLyB0cmVlLiBUcnVlIGJ5IGRlZmF1bHQuCisKK2NvcmUuY29tcHJlc3Npb246OgorCUFuIGludGVnZXIgLTEuLjksIGluZGljYXRpbmcgYSBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsLgorCS0xIGlzIHRoZSB6bGliIGRlZmF1bHQuIDAgbWVhbnMgbm8gY29tcHJlc3Npb24sCisJYW5kIDEuLjkgYXJlIHZhcmlvdXMgc3BlZWQvc2l6ZSB0cmFkZW9mZnMsIDkgYmVpbmcgc2xvd2VzdC4KKwlJZiBzZXQsIHRoaXMgcHJvdmlkZXMgYSBkZWZhdWx0IHRvIG90aGVyIGNvbXByZXNzaW9uIHZhcmlhYmxlcywKKwlzdWNoIGFzICdjb3JlLmxvb3NlY29tcHJlc3Npb24nIGFuZCAncGFjay5jb21wcmVzc2lvbicuCisKK2NvcmUubG9vc2Vjb21wcmVzc2lvbjo6CisJQW4gaW50ZWdlciAtMS4uOSwgaW5kaWNhdGluZyB0aGUgY29tcHJlc3Npb24gbGV2ZWwgZm9yIG9iamVjdHMgdGhhdAorCWFyZSBub3QgaW4gYSBwYWNrIGZpbGUuIC0xIGlzIHRoZSB6bGliIGRlZmF1bHQuIDAgbWVhbnMgbm8KKwljb21wcmVzc2lvbiwgYW5kIDEuLjkgYXJlIHZhcmlvdXMgc3BlZWQvc2l6ZSB0cmFkZW9mZnMsIDkgYmVpbmcKKwlzbG93ZXN0LiAgSWYgbm90IHNldCwgIGRlZmF1bHRzIHRvIGNvcmUuY29tcHJlc3Npb24uICBJZiB0aGF0IGlzCisJbm90IHNldCwgIGRlZmF1bHRzIHRvIDEgKGJlc3Qgc3BlZWQpLgorCitjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemU6OgorCU51bWJlciBvZiBieXRlcyBvZiBhIHBhY2sgZmlsZSB0byBtYXAgaW50byBtZW1vcnkgaW4gYQorCXNpbmdsZSBtYXBwaW5nIG9wZXJhdGlvbi4gIExhcmdlciB3aW5kb3cgc2l6ZXMgbWF5IGFsbG93CisJeW91ciBzeXN0ZW0gdG8gcHJvY2VzcyBhIHNtYWxsZXIgbnVtYmVyIG9mIGxhcmdlIHBhY2sgZmlsZXMKKwltb3JlIHF1aWNrbHkuICBTbWFsbGVyIHdpbmRvdyBzaXplcyB3aWxsIG5lZ2F0aXZlbHkgYWZmZWN0CisJcGVyZm9ybWFuY2UgZHVlIHRvIGluY3JlYXNlZCBjYWxscyB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzCisJbWVtb3J5IG1hbmFnZXIsIGJ1dCBtYXkgaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIGFjY2Vzc2luZworCWEgbGFyZ2UgbnVtYmVyIG9mIGxhcmdlIHBhY2sgZmlsZXMuCisrCitEZWZhdWx0IGlzIDEgTWlCIGlmIE5PX01NQVAgd2FzIHNldCBhdCBjb21waWxlIHRpbWUsIG90aGVyd2lzZSAzMgorTWlCIG9uIDMyIGJpdCBwbGF0Zm9ybXMgYW5kIDEgR2lCIG9uIDY0IGJpdCBwbGF0Zm9ybXMuICBUaGlzIHNob3VsZAorYmUgcmVhc29uYWJsZSBmb3IgYWxsIHVzZXJzL29wZXJhdGluZyBzeXN0ZW1zLiAgWW91IHByb2JhYmx5IGRvCitub3QgbmVlZCB0byBhZGp1c3QgdGhpcyB2YWx1ZS4KKysKK0NvbW1vbiB1bml0IHN1ZmZpeGVzIG9mICdrJywgJ20nLCBvciAnZycgYXJlIHN1cHBvcnRlZC4KKworY29yZS5wYWNrZWRHaXRMaW1pdDo6CisJTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gbWFwIHNpbXVsdGFuZW91c2x5IGludG8gbWVtb3J5CisJZnJvbSBwYWNrIGZpbGVzLiAgSWYgR2l0IG5lZWRzIHRvIGFjY2VzcyBtb3JlIHRoYW4gdGhpcyBtYW55CisJYnl0ZXMgYXQgb25jZSB0byBjb21wbGV0ZSBhbiBvcGVyYXRpb24gaXQgd2lsbCB1bm1hcCBleGlzdGluZworCXJlZ2lvbnMgdG8gcmVjbGFpbSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugd2l0aGluIHRoZSBwcm9jZXNzLgorKworRGVmYXVsdCBpcyAyNTYgTWlCIG9uIDMyIGJpdCBwbGF0Zm9ybXMgYW5kIDggR2lCIG9uIDY0IGJpdCBwbGF0Zm9ybXMuCitUaGlzIHNob3VsZCBiZSByZWFzb25hYmxlIGZvciBhbGwgdXNlcnMvb3BlcmF0aW5nIHN5c3RlbXMsIGV4Y2VwdCBvbgordGhlIGxhcmdlc3QgcHJvamVjdHMuICBZb3UgcHJvYmFibHkgZG8gbm90IG5lZWQgdG8gYWRqdXN0IHRoaXMgdmFsdWUuCisrCitDb21tb24gdW5pdCBzdWZmaXhlcyBvZiAnaycsICdtJywgb3IgJ2cnIGFyZSBzdXBwb3J0ZWQuCisKK2NvcmUuZGVsdGFCYXNlQ2FjaGVMaW1pdDo6CisJTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVzZXJ2ZSBmb3IgY2FjaGluZyBiYXNlIG9iamVjdHMKKwl0aGF0IG1heSBiZSByZWZlcmVuY2VkIGJ5IG11bHRpcGxlIGRlbHRpZmllZCBvYmplY3RzLiAgQnkgc3RvcmluZyB0aGUKKwllbnRpcmUgZGVjb21wcmVzc2VkIGJhc2Ugb2JqZWN0cyBpbiBhIGNhY2hlIEdpdCBpcyBhYmxlCisJdG8gYXZvaWQgdW5wYWNraW5nIGFuZCBkZWNvbXByZXNzaW5nIGZyZXF1ZW50bHkgdXNlZCBiYXNlCisJb2JqZWN0cyBtdWx0aXBsZSB0aW1lcy4KKysKK0RlZmF1bHQgaXMgMTYgTWlCIG9uIGFsbCBwbGF0Zm9ybXMuICBUaGlzIHNob3VsZCBiZSByZWFzb25hYmxlCitmb3IgYWxsIHVzZXJzL29wZXJhdGluZyBzeXN0ZW1zLCBleGNlcHQgb24gdGhlIGxhcmdlc3QgcHJvamVjdHMuCitZb3UgcHJvYmFibHkgZG8gbm90IG5lZWQgdG8gYWRqdXN0IHRoaXMgdmFsdWUuCisrCitDb21tb24gdW5pdCBzdWZmaXhlcyBvZiAnaycsICdtJywgb3IgJ2cnIGFyZSBzdXBwb3J0ZWQuCisKK2NvcmUuYmlnRmlsZVRocmVzaG9sZDo6CisJRmlsZXMgbGFyZ2VyIHRoYW4gdGhpcyBzaXplIGFyZSBzdG9yZWQgZGVmbGF0ZWQsIHdpdGhvdXQKKwlhdHRlbXB0aW5nIGRlbHRhIGNvbXByZXNzaW9uLiAgU3RvcmluZyBsYXJnZSBmaWxlcyB3aXRob3V0CisJZGVsdGEgY29tcHJlc3Npb24gYXZvaWRzIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UsIGF0IHRoZQorCXNsaWdodCBleHBlbnNlIG9mIGluY3JlYXNlZCBkaXNrIHVzYWdlLgorKworRGVmYXVsdCBpcyA1MTIgTWlCIG9uIGFsbCBwbGF0Zm9ybXMuICBUaGlzIHNob3VsZCBiZSByZWFzb25hYmxlCitmb3IgbW9zdCBwcm9qZWN0cyBhcyBzb3VyY2UgY29kZSBhbmQgb3RoZXIgdGV4dCBmaWxlcyBjYW4gc3RpbGwKK2JlIGRlbHRhIGNvbXByZXNzZWQsIGJ1dCBsYXJnZXIgYmluYXJ5IG1lZGlhIGZpbGVzIHdvbid0IGJlLgorKworQ29tbW9uIHVuaXQgc3VmZml4ZXMgb2YgJ2snLCAnbScsIG9yICdnJyBhcmUgc3VwcG9ydGVkLgorCitjb3JlLmV4Y2x1ZGVzZmlsZTo6CisJSW4gYWRkaXRpb24gdG8gJy5naXRpZ25vcmUnIChwZXItZGlyZWN0b3J5KSBhbmQKKwknLmdpdC9pbmZvL2V4Y2x1ZGUnLCBnaXQgbG9va3MgaW50byB0aGlzIGZpbGUgZm9yIHBhdHRlcm5zCisJb2YgZmlsZXMgd2hpY2ggYXJlIG5vdCBtZWFudCB0byBiZSB0cmFja2VkLiAgImB+L2AiIGlzIGV4cGFuZGVkCisJdG8gdGhlIHZhbHVlIG9mIGAkSE9NRWAgYW5kICJgfnVzZXIvYCIgdG8gdGhlIHNwZWNpZmllZCB1c2VyJ3MKKwlob21lIGRpcmVjdG9yeS4gSXRzIGRlZmF1bHQgdmFsdWUgaXMgJFhER19DT05GSUdfSE9NRS9naXQvaWdub3JlLgorCUlmICRYREdfQ09ORklHX0hPTUUgaXMgZWl0aGVyIG5vdCBzZXQgb3IgZW1wdHksICRIT01FLy5jb25maWcvZ2l0L2lnbm9yZQorCWlzIHVzZWQgaW5zdGVhZC4gU2VlIGxpbmtnaXQ6Z2l0aWdub3JlWzVdLgorCitjb3JlLmFza3Bhc3M6OgorCVNvbWUgY29tbWFuZHMgKGUuZy4gc3ZuIGFuZCBodHRwIGludGVyZmFjZXMpIHRoYXQgaW50ZXJhY3RpdmVseQorCWFzayBmb3IgYSBwYXNzd29yZCBjYW4gYmUgdG9sZCB0byB1c2UgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBnaXZlbgorCXZpYSB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZS4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfQVNLUEFTUycKKwllbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgbm90IHNldCwgZmFsbCBiYWNrIHRvIHRoZSB2YWx1ZSBvZiB0aGUKKwknU1NIX0FTS1BBU1MnIGVudmlyb25tZW50IHZhcmlhYmxlIG9yLCBmYWlsaW5nIHRoYXQsIGEgc2ltcGxlIHBhc3N3b3JkCisJcHJvbXB0LiBUaGUgZXh0ZXJuYWwgcHJvZ3JhbSBzaGFsbCBiZSBnaXZlbiBhIHN1aXRhYmxlIHByb21wdCBhcworCWNvbW1hbmQgbGluZSBhcmd1bWVudCBhbmQgd3JpdGUgdGhlIHBhc3N3b3JkIG9uIGl0cyBTVERPVVQuCisKK2NvcmUuYXR0cmlidXRlc2ZpbGU6OgorCUluIGFkZGl0aW9uIHRvICcuZ2l0YXR0cmlidXRlcycgKHBlci1kaXJlY3RvcnkpIGFuZAorCScuZ2l0L2luZm8vYXR0cmlidXRlcycsIGdpdCBsb29rcyBpbnRvIHRoaXMgZmlsZSBmb3IgYXR0cmlidXRlcworCShzZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdKS4gUGF0aCBleHBhbnNpb25zIGFyZSBtYWRlIHRoZSBzYW1lCisJd2F5IGFzIGZvciBgY29yZS5leGNsdWRlc2ZpbGVgLiBJdHMgZGVmYXVsdCB2YWx1ZSBpcworCSRYREdfQ09ORklHX0hPTUUvZ2l0L2F0dHJpYnV0ZXMuIElmICRYREdfQ09ORklHX0hPTUUgaXMgZWl0aGVyIG5vdAorCXNldCBvciBlbXB0eSwgJEhPTUUvLmNvbmZpZy9naXQvYXR0cmlidXRlcyBpcyB1c2VkIGluc3RlYWQuCisKK2NvcmUuZWRpdG9yOjoKKwlDb21tYW5kcyBzdWNoIGFzIGBjb21taXRgIGFuZCBgdGFnYCB0aGF0IGxldHMgeW91IGVkaXQKKwltZXNzYWdlcyBieSBsYXVuY2hpbmcgYW4gZWRpdG9yIHVzZXMgdGhlIHZhbHVlIG9mIHRoaXMKKwl2YXJpYWJsZSB3aGVuIGl0IGlzIHNldCwgYW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorCWBHSVRfRURJVE9SYCBpcyBub3Qgc2V0LiAgU2VlIGxpbmtnaXQ6Z2l0LXZhclsxXS4KKworc2VxdWVuY2UuZWRpdG9yOjoKKwlUZXh0IGVkaXRvciB1c2VkIGJ5IGBnaXQgcmViYXNlIC1pYCBmb3IgZWRpdGluZyB0aGUgcmViYXNlIGluc24gZmlsZS4KKwlUaGUgdmFsdWUgaXMgbWVhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgdGhlIHNoZWxsIHdoZW4gaXQgaXMgdXNlZC4KKwlJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9TRVFVRU5DRV9FRElUT1JgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCVdoZW4gbm90IGNvbmZpZ3VyZWQgdGhlIGRlZmF1bHQgY29tbWl0IG1lc3NhZ2UgZWRpdG9yIGlzIHVzZWQgaW5zdGVhZC4KKworY29yZS5wYWdlcjo6CisJVGhlIGNvbW1hbmQgdGhhdCBnaXQgd2lsbCB1c2UgdG8gcGFnaW5hdGUgb3V0cHV0LiAgQ2FuCisJYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgR0lUX1BBR0VSYCBlbnZpcm9ubWVudAorCXZhcmlhYmxlLiAgTm90ZSB0aGF0IGdpdCBzZXRzIHRoZSBgTEVTU2AgZW52aXJvbm1lbnQKKwl2YXJpYWJsZSB0byBgRlJTWGAgaWYgaXQgaXMgdW5zZXQgd2hlbiBpdCBydW5zIHRoZQorCXBhZ2VyLiAgT25lIGNhbiBjaGFuZ2UgdGhlc2Ugc2V0dGluZ3MgYnkgc2V0dGluZyB0aGUKKwlgTEVTU2AgdmFyaWFibGUgdG8gc29tZSBvdGhlciB2YWx1ZS4gIEFsdGVybmF0ZWx5LAorCXRoZXNlIHNldHRpbmdzIGNhbiBiZSBvdmVycmlkZGVuIG9uIGEgcHJvamVjdCBvcgorCWdsb2JhbCBiYXNpcyBieSBzZXR0aW5nIHRoZSBgY29yZS5wYWdlcmAgb3B0aW9uLgorCVNldHRpbmcgYGNvcmUucGFnZXJgIGhhcyBubyBhZmZlY3Qgb24gdGhlIGBMRVNTYAorCWVudmlyb25tZW50IHZhcmlhYmxlIGJlaGF2aW91ciBhYm92ZSwgc28gaWYgeW91IHdhbnQKKwl0byBvdmVycmlkZSBnaXQncyBkZWZhdWx0IHNldHRpbmdzIHRoaXMgd2F5LCB5b3UgbmVlZAorCXRvIGJlIGV4cGxpY2l0LiAgRm9yIGV4YW1wbGUsIHRvIGRpc2FibGUgdGhlIFMgb3B0aW9uCisJaW4gYSBiYWNrd2FyZCBjb21wYXRpYmxlIG1hbm5lciwgc2V0IGBjb3JlLnBhZ2VyYAorCXRvIGBsZXNzIC0rJExFU1MgLUZSWGAuICBUaGlzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQorCXNoZWxsIGJ5IGdpdCwgd2hpY2ggd2lsbCB0cmFuc2xhdGUgdGhlIGZpbmFsIGNvbW1hbmQgdG8KKwlgTEVTUz1GUlNYIGxlc3MgLStGUlNYIC1GUlhgLgorCitjb3JlLndoaXRlc3BhY2U6OgorCUEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY29tbW9uIHdoaXRlc3BhY2UgcHJvYmxlbXMgdG8KKwlub3RpY2UuICAnZ2l0IGRpZmYnIHdpbGwgdXNlIGBjb2xvci5kaWZmLndoaXRlc3BhY2VgIHRvCisJaGlnaGxpZ2h0IHRoZW0sIGFuZCAnZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1lcnJvcicgd2lsbAorCWNvbnNpZGVyIHRoZW0gYXMgZXJyb3JzLiAgWW91IGNhbiBwcmVmaXggYC1gIHRvIGRpc2FibGUKKwlhbnkgb2YgdGhlbSAoZS5nLiBgLXRyYWlsaW5nLXNwYWNlYCk6CisrCisqIGBibGFuay1hdC1lb2xgIHRyZWF0cyB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lCisgIGFzIGFuIGVycm9yIChlbmFibGVkIGJ5IGRlZmF1bHQpLgorKiBgc3BhY2UtYmVmb3JlLXRhYmAgdHJlYXRzIGEgc3BhY2UgY2hhcmFjdGVyIHRoYXQgYXBwZWFycyBpbW1lZGlhdGVseQorICBiZWZvcmUgYSB0YWIgY2hhcmFjdGVyIGluIHRoZSBpbml0aWFsIGluZGVudCBwYXJ0IG9mIHRoZSBsaW5lIGFzIGFuCisgIGVycm9yIChlbmFibGVkIGJ5IGRlZmF1bHQpLgorKiBgaW5kZW50LXdpdGgtbm9uLXRhYmAgdHJlYXRzIGEgbGluZSB0aGF0IGlzIGluZGVudGVkIHdpdGggc3BhY2UKKyAgY2hhcmFjdGVycyBpbnN0ZWFkIG9mIHRoZSBlcXVpdmFsZW50IHRhYnMgYXMgYW4gZXJyb3IgKG5vdCBlbmFibGVkIGJ5CisgIGRlZmF1bHQpLgorKiBgdGFiLWluLWluZGVudGAgdHJlYXRzIGEgdGFiIGNoYXJhY3RlciBpbiB0aGUgaW5pdGlhbCBpbmRlbnQgcGFydCBvZgorICB0aGUgbGluZSBhcyBhbiBlcnJvciAobm90IGVuYWJsZWQgYnkgZGVmYXVsdCkuCisqIGBibGFuay1hdC1lb2ZgIHRyZWF0cyBibGFuayBsaW5lcyBhZGRlZCBhdCB0aGUgZW5kIG9mIGZpbGUgYXMgYW4gZXJyb3IKKyAgKGVuYWJsZWQgYnkgZGVmYXVsdCkuCisqIGB0cmFpbGluZy1zcGFjZWAgaXMgYSBzaG9ydC1oYW5kIHRvIGNvdmVyIGJvdGggYGJsYW5rLWF0LWVvbGAgYW5kCisgIGBibGFuay1hdC1lb2ZgLgorKiBgY3ItYXQtZW9sYCB0cmVhdHMgYSBjYXJyaWFnZS1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIGFzCisgIHBhcnQgb2YgdGhlIGxpbmUgdGVybWluYXRvciwgaS5lLiB3aXRoIGl0LCBgdHJhaWxpbmctc3BhY2VgCisgIGRvZXMgbm90IHRyaWdnZXIgaWYgdGhlIGNoYXJhY3RlciBiZWZvcmUgc3VjaCBhIGNhcnJpYWdlLXJldHVybgorICBpcyBub3QgYSB3aGl0ZXNwYWNlIChub3QgZW5hYmxlZCBieSBkZWZhdWx0KS4KKyogYHRhYndpZHRoPTxuPmAgdGVsbHMgaG93IG1hbnkgY2hhcmFjdGVyIHBvc2l0aW9ucyBhIHRhYiBvY2N1cGllczsgdGhpcworICBpcyByZWxldmFudCBmb3IgYGluZGVudC13aXRoLW5vbi10YWJgIGFuZCB3aGVuIGdpdCBmaXhlcyBgdGFiLWluLWluZGVudGAKKyAgZXJyb3JzLiBUaGUgZGVmYXVsdCB0YWIgd2lkdGggaXMgOC4gQWxsb3dlZCB2YWx1ZXMgYXJlIDEgdG8gNjMuCisKK2NvcmUuZnN5bmNvYmplY3RmaWxlczo6CisJVGhpcyBib29sZWFuIHdpbGwgZW5hYmxlICdmc3luYygpJyB3aGVuIHdyaXRpbmcgb2JqZWN0IGZpbGVzLgorKworVGhpcyBpcyBhIHRvdGFsIHdhc3RlIG9mIHRpbWUgYW5kIGVmZm9ydCBvbiBhIGZpbGVzeXN0ZW0gdGhhdCBvcmRlcnMKK2RhdGEgd3JpdGVzIHByb3Blcmx5LCBidXQgY2FuIGJlIHVzZWZ1bCBmb3IgZmlsZXN5c3RlbXMgdGhhdCBkbyBub3QgdXNlCitqb3VybmFsbGluZyAodHJhZGl0aW9uYWwgVU5JWCBmaWxlc3lzdGVtcykgb3IgdGhhdCBvbmx5IGpvdXJuYWwgbWV0YWRhdGEKK2FuZCBub3QgZmlsZSBjb250ZW50cyAoT1MgWCdzIEhGUyssIG9yIExpbnV4IGV4dDMgd2l0aCAiZGF0YT13cml0ZWJhY2siKS4KKworY29yZS5wcmVsb2FkaW5kZXg6OgorCUVuYWJsZSBwYXJhbGxlbCBpbmRleCBwcmVsb2FkIGZvciBvcGVyYXRpb25zIGxpa2UgJ2dpdCBkaWZmJworKworVGhpcyBjYW4gc3BlZWQgdXAgb3BlcmF0aW9ucyBsaWtlICdnaXQgZGlmZicgYW5kICdnaXQgc3RhdHVzJyBlc3BlY2lhbGx5CitvbiBmaWxlc3lzdGVtcyBsaWtlIE5GUyB0aGF0IGhhdmUgd2VhayBjYWNoaW5nIHNlbWFudGljcyBhbmQgdGh1cworcmVsYXRpdmVseSBoaWdoIElPIGxhdGVuY2llcy4gIFdpdGggdGhpcyBzZXQgdG8gJ3RydWUnLCBnaXQgd2lsbCBkbyB0aGUKK2luZGV4IGNvbXBhcmlzb24gdG8gdGhlIGZpbGVzeXN0ZW0gZGF0YSBpbiBwYXJhbGxlbCwgYWxsb3dpbmcKK292ZXJsYXBwaW5nIElPJ3MuCisKK2NvcmUuY3JlYXRlT2JqZWN0OjoKKwlZb3UgY2FuIHNldCB0aGlzIHRvICdsaW5rJywgaW4gd2hpY2ggY2FzZSBhIGhhcmRsaW5rIGZvbGxvd2VkIGJ5CisJYSBkZWxldGUgb2YgdGhlIHNvdXJjZSBhcmUgdXNlZCB0byBtYWtlIHN1cmUgdGhhdCBvYmplY3QgY3JlYXRpb24KKwl3aWxsIG5vdCBvdmVyd3JpdGUgZXhpc3Rpbmcgb2JqZWN0cy4KKysKK09uIHNvbWUgZmlsZSBzeXN0ZW0vb3BlcmF0aW5nIHN5c3RlbSBjb21iaW5hdGlvbnMsIHRoaXMgaXMgdW5yZWxpYWJsZS4KK1NldCB0aGlzIGNvbmZpZyBzZXR0aW5nIHRvICdyZW5hbWUnIHRoZXJlOyBIb3dldmVyLCBUaGlzIHdpbGwgcmVtb3ZlIHRoZQorY2hlY2sgdGhhdCBtYWtlcyBzdXJlIHRoYXQgZXhpc3Rpbmcgb2JqZWN0IGZpbGVzIHdpbGwgbm90IGdldCBvdmVyd3JpdHRlbi4KKworY29yZS5ub3Rlc1JlZjo6CisJV2hlbiBzaG93aW5nIGNvbW1pdCBtZXNzYWdlcywgYWxzbyBzaG93IG5vdGVzIHdoaWNoIGFyZSBzdG9yZWQgaW4KKwl0aGUgZ2l2ZW4gcmVmLiAgVGhlIHJlZiBtdXN0IGJlIGZ1bGx5IHF1YWxpZmllZC4gIElmIHRoZSBnaXZlbgorCXJlZiBkb2VzIG5vdCBleGlzdCwgaXQgaXMgbm90IGFuIGVycm9yIGJ1dCBtZWFucyB0aGF0IG5vCisJbm90ZXMgc2hvdWxkIGJlIHByaW50ZWQuCisrCitUaGlzIHNldHRpbmcgZGVmYXVsdHMgdG8gInJlZnMvbm90ZXMvY29tbWl0cyIsIGFuZCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBieQordGhlICdHSVRfTk9URVNfUkVGJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFNlZSBsaW5rZ2l0OmdpdC1ub3Rlc1sxXS4KKworY29yZS5zcGFyc2VDaGVja291dDo6CisJRW5hYmxlICJzcGFyc2UgY2hlY2tvdXQiIGZlYXR1cmUuIFNlZSBzZWN0aW9uICJTcGFyc2UgY2hlY2tvdXQiIGluCisJbGlua2dpdDpnaXQtcmVhZC10cmVlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb3JlLmFiYnJldjo6CisJU2V0IHRoZSBsZW5ndGggb2JqZWN0IG5hbWVzIGFyZSBhYmJyZXZpYXRlZCB0by4gIElmIHVuc3BlY2lmaWVkLAorCW1hbnkgY29tbWFuZHMgYWJicmV2aWF0ZSB0byA3IGhleGRpZ2l0cywgd2hpY2ggbWF5IG5vdCBiZSBlbm91Z2gKKwlmb3IgYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWVzIHRvIHN0YXkgdW5pcXVlIGZvciBzdWZmaWNpZW50bHkgbG9uZworCXRpbWUuCisKK2FkZC5pZ25vcmUtZXJyb3JzOjoKK2FkZC5pZ25vcmVFcnJvcnM6OgorCVRlbGxzICdnaXQgYWRkJyB0byBjb250aW51ZSBhZGRpbmcgZmlsZXMgd2hlbiBzb21lIGZpbGVzIGNhbm5vdCBiZQorCWFkZGVkIGR1ZSB0byBpbmRleGluZyBlcnJvcnMuIEVxdWl2YWxlbnQgdG8gdGhlICctLWlnbm9yZS1lcnJvcnMnCisJb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LWFkZFsxXS4gIE9sZGVyIHZlcnNpb25zIG9mIGdpdCBhY2NlcHQgb25seQorCWBhZGQuaWdub3JlLWVycm9yc2AsIHdoaWNoIGRvZXMgbm90IGZvbGxvdyB0aGUgdXN1YWwgbmFtaW5nCisJY29udmVudGlvbiBmb3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuICBOZXdlciB2ZXJzaW9ucyBvZiBnaXQKKwlob25vciBgYWRkLmlnbm9yZUVycm9yc2AgYXMgd2VsbC4KKworYWxpYXMuKjo6CisJQ29tbWFuZCBhbGlhc2VzIGZvciB0aGUgbGlua2dpdDpnaXRbMV0gY29tbWFuZCB3cmFwcGVyIC0gZS5nLgorCWFmdGVyIGRlZmluaW5nICJhbGlhcy5sYXN0ID0gY2F0LWZpbGUgY29tbWl0IEhFQUQiLCB0aGUgaW52b2NhdGlvbgorCSJnaXQgbGFzdCIgaXMgZXF1aXZhbGVudCB0byAiZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIi4gVG8gYXZvaWQKKwljb25mdXNpb24gYW5kIHRyb3VibGVzIHdpdGggc2NyaXB0IHVzYWdlLCBhbGlhc2VzIHRoYXQKKwloaWRlIGV4aXN0aW5nIGdpdCBjb21tYW5kcyBhcmUgaWdub3JlZC4gQXJndW1lbnRzIGFyZSBzcGxpdCBieQorCXNwYWNlcywgdGhlIHVzdWFsIHNoZWxsIHF1b3RpbmcgYW5kIGVzY2FwaW5nIGlzIHN1cHBvcnRlZC4KKwlxdW90ZSBwYWlyIGFuZCBhIGJhY2tzbGFzaCBjYW4gYmUgdXNlZCB0byBxdW90ZSB0aGVtLgorKworSWYgdGhlIGFsaWFzIGV4cGFuc2lvbiBpcyBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uIHBvaW50LAoraXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2hlbGwgY29tbWFuZC4gIEZvciBleGFtcGxlLCBkZWZpbmluZworImFsaWFzLm5ldyA9ICFnaXRrIC0tYWxsIC0tbm90IE9SSUdfSEVBRCIsIHRoZSBpbnZvY2F0aW9uCisiZ2l0IG5ldyIgaXMgZXF1aXZhbGVudCB0byBydW5uaW5nIHRoZSBzaGVsbCBjb21tYW5kCisiZ2l0ayAtLWFsbCAtLW5vdCBPUklHX0hFQUQiLiAgTm90ZSB0aGF0IHNoZWxsIGNvbW1hbmRzIHdpbGwgYmUKK2V4ZWN1dGVkIGZyb20gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgYSByZXBvc2l0b3J5LCB3aGljaCBtYXkKK25vdCBuZWNlc3NhcmlseSBiZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisnR0lUX1BSRUZJWCcgaXMgc2V0IGFzIHJldHVybmVkIGJ5IHJ1bm5pbmcgJ2dpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeCcKK2Zyb20gdGhlIG9yaWdpbmFsIGN1cnJlbnQgZGlyZWN0b3J5LiBTZWUgbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLgorCithbS5rZWVwY3I6OgorCUlmIHRydWUsIGdpdC1hbSB3aWxsIGNhbGwgZ2l0LW1haWxzcGxpdCBmb3IgcGF0Y2hlcyBpbiBtYm94IGZvcm1hdAorCXdpdGggcGFyYW1ldGVyICctLWtlZXAtY3InLiBJbiB0aGlzIGNhc2UgZ2l0LW1haWxzcGxpdCB3aWxsCisJbm90IHJlbW92ZSBgXHJgIGZyb20gbGluZXMgZW5kaW5nIHdpdGggYFxyXG5gLiBDYW4gYmUgb3ZlcnJpZGRlbgorCWJ5IGdpdmluZyAnLS1uby1rZWVwLWNyJyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisJU2VlIGxpbmtnaXQ6Z2l0LWFtWzFdLCBsaW5rZ2l0OmdpdC1tYWlsc3BsaXRbMV0uCisKK2FwcGx5Lmlnbm9yZXdoaXRlc3BhY2U6OgorCVdoZW4gc2V0IHRvICdjaGFuZ2UnLCB0ZWxscyAnZ2l0IGFwcGx5JyB0byBpZ25vcmUgY2hhbmdlcyBpbgorCXdoaXRlc3BhY2UsIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgJy0taWdub3JlLXNwYWNlLWNoYW5nZScKKwlvcHRpb24uCisJV2hlbiBzZXQgdG8gb25lIG9mOiBubywgbm9uZSwgbmV2ZXIsIGZhbHNlIHRlbGxzICdnaXQgYXBwbHknIHRvCisJcmVzcGVjdCBhbGwgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcy4KKwlTZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0uCisKK2FwcGx5LndoaXRlc3BhY2U6OgorCVRlbGxzICdnaXQgYXBwbHknIGhvdyB0byBoYW5kbGUgd2hpdGVzcGFjZXMsIGluIHRoZSBzYW1lIHdheQorCWFzIHRoZSAnLS13aGl0ZXNwYWNlJyBvcHRpb24uIFNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXS4KKworYnJhbmNoLmF1dG9zZXR1cG1lcmdlOjoKKwlUZWxscyAnZ2l0IGJyYW5jaCcgYW5kICdnaXQgY2hlY2tvdXQnIHRvIHNldCB1cCBuZXcgYnJhbmNoZXMKKwlzbyB0aGF0IGxpbmtnaXQ6Z2l0LXB1bGxbMV0gd2lsbCBhcHByb3ByaWF0ZWx5IG1lcmdlIGZyb20gdGhlCisJc3RhcnRpbmcgcG9pbnQgYnJhbmNoLiBOb3RlIHRoYXQgZXZlbiBpZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0LAorCXRoaXMgYmVoYXZpb3IgY2FuIGJlIGNob3NlbiBwZXItYnJhbmNoIHVzaW5nIHRoZSBgLS10cmFja2AKKwlhbmQgYC0tbm8tdHJhY2tgIG9wdGlvbnMuIFRoZSB2YWxpZCBzZXR0aW5ncyBhcmU6IGBmYWxzZWAgLS0gbm8KKwlhdXRvbWF0aWMgc2V0dXAgaXMgZG9uZTsgYHRydWVgIC0tIGF1dG9tYXRpYyBzZXR1cCBpcyBkb25lIHdoZW4gdGhlCisJc3RhcnRpbmcgcG9pbnQgaXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoOyBgYWx3YXlzYCAtLQorCWF1dG9tYXRpYyBzZXR1cCBpcyBkb25lIHdoZW4gdGhlIHN0YXJ0aW5nIHBvaW50IGlzIGVpdGhlciBhCisJbG9jYWwgYnJhbmNoIG9yIHJlbW90ZS10cmFja2luZworCWJyYW5jaC4gVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gdHJ1ZS4KKworYnJhbmNoLmF1dG9zZXR1cHJlYmFzZTo6CisJV2hlbiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCB3aXRoICdnaXQgYnJhbmNoJyBvciAnZ2l0IGNoZWNrb3V0JworCXRoYXQgdHJhY2tzIGFub3RoZXIgYnJhbmNoLCB0aGlzIHZhcmlhYmxlIHRlbGxzIGdpdCB0byBzZXQKKwl1cCBwdWxsIHRvIHJlYmFzZSBpbnN0ZWFkIG9mIG1lcmdlIChzZWUgImJyYW5jaC48bmFtZT4ucmViYXNlIikuCisJV2hlbiBgbmV2ZXJgLCByZWJhc2UgaXMgbmV2ZXIgYXV0b21hdGljYWxseSBzZXQgdG8gdHJ1ZS4KKwlXaGVuIGBsb2NhbGAsIHJlYmFzZSBpcyBzZXQgdG8gdHJ1ZSBmb3IgdHJhY2tlZCBicmFuY2hlcyBvZgorCW90aGVyIGxvY2FsIGJyYW5jaGVzLgorCVdoZW4gYHJlbW90ZWAsIHJlYmFzZSBpcyBzZXQgdG8gdHJ1ZSBmb3IgdHJhY2tlZCBicmFuY2hlcyBvZgorCXJlbW90ZS10cmFja2luZyBicmFuY2hlcy4KKwlXaGVuIGBhbHdheXNgLCByZWJhc2Ugd2lsbCBiZSBzZXQgdG8gdHJ1ZSBmb3IgYWxsIHRyYWNraW5nCisJYnJhbmNoZXMuCisJU2VlICJicmFuY2guYXV0b3NldHVwbWVyZ2UiIGZvciBkZXRhaWxzIG9uIGhvdyB0byBzZXQgdXAgYQorCWJyYW5jaCB0byB0cmFjayBhbm90aGVyIGJyYW5jaC4KKwlUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byBuZXZlci4KKworYnJhbmNoLjxuYW1lPi5yZW1vdGU6OgorCVdoZW4gaW4gYnJhbmNoIDxuYW1lPiwgaXQgdGVsbHMgJ2dpdCBmZXRjaCcgYW5kICdnaXQgcHVzaCcgd2hpY2gKKwlyZW1vdGUgdG8gZmV0Y2ggZnJvbS9wdXNoIHRvLiAgSXQgZGVmYXVsdHMgdG8gYG9yaWdpbmAgaWYgbm8gcmVtb3RlIGlzCisJY29uZmlndXJlZC4gYG9yaWdpbmAgaXMgYWxzbyB1c2VkIGlmIHlvdSBhcmUgbm90IG9uIGFueSBicmFuY2guCisKK2JyYW5jaC48bmFtZT4ubWVyZ2U6OgorCURlZmluZXMsIHRvZ2V0aGVyIHdpdGggYnJhbmNoLjxuYW1lPi5yZW1vdGUsIHRoZSB1cHN0cmVhbSBicmFuY2gKKwlmb3IgdGhlIGdpdmVuIGJyYW5jaC4gSXQgdGVsbHMgJ2dpdCBmZXRjaCcvJ2dpdCBwdWxsJy8nZ2l0IHJlYmFzZScgd2hpY2gKKwlicmFuY2ggdG8gbWVyZ2UgYW5kIGNhbiBhbHNvIGFmZmVjdCAnZ2l0IHB1c2gnIChzZWUgcHVzaC5kZWZhdWx0KS4KKwlXaGVuIGluIGJyYW5jaCA8bmFtZT4sIGl0IHRlbGxzICdnaXQgZmV0Y2gnIHRoZSBkZWZhdWx0CisJcmVmc3BlYyB0byBiZSBtYXJrZWQgZm9yIG1lcmdpbmcgaW4gRkVUQ0hfSEVBRC4gVGhlIHZhbHVlIGlzCisJaGFuZGxlZCBsaWtlIHRoZSByZW1vdGUgcGFydCBvZiBhIHJlZnNwZWMsIGFuZCBtdXN0IG1hdGNoIGEKKwlyZWYgd2hpY2ggaXMgZmV0Y2hlZCBmcm9tIHRoZSByZW1vdGUgZ2l2ZW4gYnkKKwkiYnJhbmNoLjxuYW1lPi5yZW1vdGUiLgorCVRoZSBtZXJnZSBpbmZvcm1hdGlvbiBpcyB1c2VkIGJ5ICdnaXQgcHVsbCcgKHdoaWNoIGF0IGZpcnN0IGNhbGxzCisJJ2dpdCBmZXRjaCcpIHRvIGxvb2t1cCB0aGUgZGVmYXVsdCBicmFuY2ggZm9yIG1lcmdpbmcuIFdpdGhvdXQKKwl0aGlzIG9wdGlvbiwgJ2dpdCBwdWxsJyBkZWZhdWx0cyB0byBtZXJnZSB0aGUgZmlyc3QgcmVmc3BlYyBmZXRjaGVkLgorCVNwZWNpZnkgbXVsdGlwbGUgdmFsdWVzIHRvIGdldCBhbiBvY3RvcHVzIG1lcmdlLgorCUlmIHlvdSB3aXNoIHRvIHNldHVwICdnaXQgcHVsbCcgc28gdGhhdCBpdCBtZXJnZXMgaW50byA8bmFtZT4gZnJvbQorCWFub3RoZXIgYnJhbmNoIGluIHRoZSBsb2NhbCByZXBvc2l0b3J5LCB5b3UgY2FuIHBvaW50CisJYnJhbmNoLjxuYW1lPi5tZXJnZSB0byB0aGUgZGVzaXJlZCBicmFuY2gsIGFuZCB1c2UgdGhlIHNwZWNpYWwgc2V0dGluZworCWAuYCAoYSBwZXJpb2QpIGZvciBicmFuY2guPG5hbWU+LnJlbW90ZS4KKworYnJhbmNoLjxuYW1lPi5tZXJnZW9wdGlvbnM6OgorCVNldHMgZGVmYXVsdCBvcHRpb25zIGZvciBtZXJnaW5nIGludG8gYnJhbmNoIDxuYW1lPi4gVGhlIHN5bnRheCBhbmQKKwlzdXBwb3J0ZWQgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhvc2Ugb2YgbGlua2dpdDpnaXQtbWVyZ2VbMV0sIGJ1dAorCW9wdGlvbiB2YWx1ZXMgY29udGFpbmluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGN1cnJlbnRseSBub3QKKwlzdXBwb3J0ZWQuCisKK2JyYW5jaC48bmFtZT4ucmViYXNlOjoKKwlXaGVuIHRydWUsIHJlYmFzZSB0aGUgYnJhbmNoIDxuYW1lPiBvbiB0b3Agb2YgdGhlIGZldGNoZWQgYnJhbmNoLAorCWluc3RlYWQgb2YgbWVyZ2luZyB0aGUgZGVmYXVsdCBicmFuY2ggZnJvbSB0aGUgZGVmYXVsdCByZW1vdGUgd2hlbgorCSJnaXQgcHVsbCIgaXMgcnVuLiBTZWUgInB1bGwucmViYXNlIiBmb3IgZG9pbmcgdGhpcyBpbiBhIG5vbgorCWJyYW5jaC1zcGVjaWZpYyBtYW5uZXIuCisrCisqTk9URSo6IHRoaXMgaXMgYSBwb3NzaWJseSBkYW5nZXJvdXMgb3BlcmF0aW9uOyBkbyAqbm90KiB1c2UKK2l0IHVubGVzcyB5b3UgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIChzZWUgbGlua2dpdDpnaXQtcmViYXNlWzFdCitmb3IgZGV0YWlscykuCisKK2Jyb3dzZXIuPHRvb2w+LmNtZDo6CisJU3BlY2lmeSB0aGUgY29tbWFuZCB0byBpbnZva2UgdGhlIHNwZWNpZmllZCBicm93c2VyLiBUaGUKKwlzcGVjaWZpZWQgY29tbWFuZCBpcyBldmFsdWF0ZWQgaW4gc2hlbGwgd2l0aCB0aGUgVVJMcyBwYXNzZWQKKwlhcyBhcmd1bWVudHMuIChTZWUgbGlua2dpdDpnaXQtd2Vie2xpdGRkfWJyb3dzZVsxXS4pCisKK2Jyb3dzZXIuPHRvb2w+LnBhdGg6OgorCU92ZXJyaWRlIHRoZSBwYXRoIGZvciB0aGUgZ2l2ZW4gdG9vbCB0aGF0IG1heSBiZSB1c2VkIHRvCisJYnJvd3NlIEhUTUwgaGVscCAoc2VlICctdycgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWhlbHBbMV0pIG9yIGEKKwl3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViIChzZWUgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0pLgorCitjbGVhbi5yZXF1aXJlRm9yY2U6OgorCUEgYm9vbGVhbiB0byBtYWtlIGdpdC1jbGVhbiBkbyBub3RoaW5nIHVubGVzcyBnaXZlbiAtZgorCW9yIC1uLiAgIERlZmF1bHRzIHRvIHRydWUuCisKK2NvbG9yLmJyYW5jaDo6CisJQSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIGNvbG9yIGluIHRoZSBvdXRwdXQgb2YKKwlsaW5rZ2l0OmdpdC1icmFuY2hbMV0uIE1heSBiZSBzZXQgdG8gYGFsd2F5c2AsCisJYGZhbHNlYCAob3IgYG5ldmVyYCkgb3IgYGF1dG9gIChvciBgdHJ1ZWApLCBpbiB3aGljaCBjYXNlIGNvbG9ycyBhcmUgdXNlZAorCW9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIHRvIGEgdGVybWluYWwuIERlZmF1bHRzIHRvIGZhbHNlLgorCitjb2xvci5icmFuY2guPHNsb3Q+OjoKKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgYnJhbmNoIGNvbG9yYXRpb24uIGA8c2xvdD5gIGlzIG9uZSBvZgorCWBjdXJyZW50YCAodGhlIGN1cnJlbnQgYnJhbmNoKSwgYGxvY2FsYCAoYSBsb2NhbCBicmFuY2gpLAorCWByZW1vdGVgIChhIHJlbW90ZS10cmFja2luZyBicmFuY2ggaW4gcmVmcy9yZW1vdGVzLyksIGBwbGFpbmAgKG90aGVyCisJcmVmcykuCisrCitUaGUgdmFsdWUgZm9yIHRoZXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGlzIGEgbGlzdCBvZiBjb2xvcnMgKGF0IG1vc3QKK3R3bykgYW5kIGF0dHJpYnV0ZXMgKGF0IG1vc3Qgb25lKSwgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gIFRoZSBjb2xvcnMKK2FjY2VwdGVkIGFyZSBgbm9ybWFsYCwgYGJsYWNrYCwgYHJlZGAsIGBncmVlbmAsIGB5ZWxsb3dgLCBgYmx1ZWAsCitgbWFnZW50YWAsIGBjeWFuYCBhbmQgYHdoaXRlYDsgdGhlIGF0dHJpYnV0ZXMgYXJlIGBib2xkYCwgYGRpbWAsIGB1bGAsCitgYmxpbmtgIGFuZCBgcmV2ZXJzZWAuICBUaGUgZmlyc3QgY29sb3IgZ2l2ZW4gaXMgdGhlIGZvcmVncm91bmQ7IHRoZQorc2Vjb25kIGlzIHRoZSBiYWNrZ3JvdW5kLiAgVGhlIHBvc2l0aW9uIG9mIHRoZSBhdHRyaWJ1dGUsIGlmIGFueSwKK2RvZXNuJ3QgbWF0dGVyLgorCitjb2xvci5kaWZmOjoKKwlXaGV0aGVyIHRvIHVzZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgdG8gYWRkIGNvbG9yIHRvIHBhdGNoZXMuCisJSWYgdGhpcyBpcyBzZXQgdG8gYGFsd2F5c2AsIGxpbmtnaXQ6Z2l0LWRpZmZbMV0sCisJbGlua2dpdDpnaXQtbG9nWzFdLCBhbmQgbGlua2dpdDpnaXQtc2hvd1sxXSB3aWxsIHVzZSBjb2xvcgorCWZvciBhbGwgcGF0Y2hlcy4gIElmIGl0IGlzIHNldCB0byBgdHJ1ZWAgb3IgYGF1dG9gLCB0aG9zZQorCWNvbW1hbmRzIHdpbGwgb25seSB1c2UgY29sb3Igd2hlbiBvdXRwdXQgaXMgdG8gdGhlIHRlcm1pbmFsLgorCURlZmF1bHRzIHRvIGZhbHNlLgorKworVGhpcyBkb2VzIG5vdCBhZmZlY3QgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIG5vciB0aGUKKydnaXQtZGlmZi17YXN0ZXJpc2t9JyBwbHVtYmluZyBjb21tYW5kcy4gIENhbiBiZSBvdmVycmlkZGVuIG9uIHRoZQorY29tbWFuZCBsaW5lIHdpdGggdGhlIGAtLWNvbG9yWz08d2hlbj5dYCBvcHRpb24uCisKK2NvbG9yLmRpZmYuPHNsb3Q+OjoKKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgZGlmZiBjb2xvcml6YXRpb24uICBgPHNsb3Q+YCBzcGVjaWZpZXMKKwl3aGljaCBwYXJ0IG9mIHRoZSBwYXRjaCB0byB1c2UgdGhlIHNwZWNpZmllZCBjb2xvciwgYW5kIGlzIG9uZQorCW9mIGBwbGFpbmAgKGNvbnRleHQgdGV4dCksIGBtZXRhYCAobWV0YWluZm9ybWF0aW9uKSwgYGZyYWdgCisJKGh1bmsgaGVhZGVyKSwgJ2Z1bmMnIChmdW5jdGlvbiBpbiBodW5rIGhlYWRlciksIGBvbGRgIChyZW1vdmVkIGxpbmVzKSwKKwlgbmV3YCAoYWRkZWQgbGluZXMpLCBgY29tbWl0YCAoY29tbWl0IGhlYWRlcnMpLCBvciBgd2hpdGVzcGFjZWAKKwkoaGlnaGxpZ2h0aW5nIHdoaXRlc3BhY2UgZXJyb3JzKS4gVGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgbWF5IGJlCisJc3BlY2lmaWVkIGFzIGluIGNvbG9yLmJyYW5jaC48c2xvdD4uCisKK2NvbG9yLmRlY29yYXRlLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yICdnaXQgbG9nIC0tZGVjb3JhdGUnIG91dHB1dC4gIGA8c2xvdD5gIGlzIG9uZQorCW9mIGBicmFuY2hgLCBgcmVtb3RlQnJhbmNoYCwgYHRhZ2AsIGBzdGFzaGAgb3IgYEhFQURgIGZvciBsb2NhbAorCWJyYW5jaGVzLCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMsIHRhZ3MsIHN0YXNoIGFuZCBIRUFELCByZXNwZWN0aXZlbHkuCisKK2NvbG9yLmdyZXA6OgorCVdoZW4gc2V0IHRvIGBhbHdheXNgLCBhbHdheXMgaGlnaGxpZ2h0IG1hdGNoZXMuICBXaGVuIGBmYWxzZWAgKG9yCisJYG5ldmVyYCksIG5ldmVyLiAgV2hlbiBzZXQgdG8gYHRydWVgIG9yIGBhdXRvYCwgdXNlIGNvbG9yIG9ubHkKKwl3aGVuIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiB0byB0aGUgdGVybWluYWwuICBEZWZhdWx0cyB0byBgZmFsc2VgLgorCitjb2xvci5ncmVwLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yIGdyZXAgY29sb3JpemF0aW9uLiAgYDxzbG90PmAgc3BlY2lmaWVzIHdoaWNoCisJcGFydCBvZiB0aGUgbGluZSB0byB1c2UgdGhlIHNwZWNpZmllZCBjb2xvciwgYW5kIGlzIG9uZSBvZgorKworLS0KK2Bjb250ZXh0YDs7CisJbm9uLW1hdGNoaW5nIHRleHQgaW4gY29udGV4dCBsaW5lcyAod2hlbiB1c2luZyBgLUFgLCBgLUJgLCBvciBgLUNgKQorYGZpbGVuYW1lYDs7CisJZmlsZW5hbWUgcHJlZml4ICh3aGVuIG5vdCB1c2luZyBgLWhgKQorYGZ1bmN0aW9uYDs7CisJZnVuY3Rpb24gbmFtZSBsaW5lcyAod2hlbiB1c2luZyBgLXBgKQorYGxpbmVudW1iZXJgOzsKKwlsaW5lIG51bWJlciBwcmVmaXggKHdoZW4gdXNpbmcgYC1uYCkKK2BtYXRjaGA7OworCW1hdGNoaW5nIHRleHQKK2BzZWxlY3RlZGA7OworCW5vbi1tYXRjaGluZyB0ZXh0IGluIHNlbGVjdGVkIGxpbmVzCitgc2VwYXJhdG9yYDs7CisJc2VwYXJhdG9ycyBiZXR3ZWVuIGZpZWxkcyBvbiBhIGxpbmUgKGA6YCwgYC1gLCBhbmQgYD1gKQorCWFuZCBiZXR3ZWVuIGh1bmtzIChgLS1gKQorLS0KKysKK1RoZSB2YWx1ZXMgb2YgdGhlc2UgdmFyaWFibGVzIG1heSBiZSBzcGVjaWZpZWQgYXMgaW4gY29sb3IuYnJhbmNoLjxzbG90Pi4KKworY29sb3IuaW50ZXJhY3RpdmU6OgorCVdoZW4gc2V0IHRvIGBhbHdheXNgLCBhbHdheXMgdXNlIGNvbG9ycyBmb3IgaW50ZXJhY3RpdmUgcHJvbXB0cworCWFuZCBkaXNwbGF5cyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5ICJnaXQtYWRkIC0taW50ZXJhY3RpdmUiKS4KKwlXaGVuIGZhbHNlIChvciBgbmV2ZXJgKSwgbmV2ZXIuICBXaGVuIHNldCB0byBgdHJ1ZWAgb3IgYGF1dG9gLCB1c2UKKwljb2xvcnMgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgdG8gdGhlIHRlcm1pbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4KKworY29sb3IuaW50ZXJhY3RpdmUuPHNsb3Q+OjoKKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgJ2dpdCBhZGQgLS1pbnRlcmFjdGl2ZScKKwlvdXRwdXQuIGA8c2xvdD5gIG1heSBiZSBgcHJvbXB0YCwgYGhlYWRlcmAsIGBoZWxwYCBvciBgZXJyb3JgLCBmb3IKKwlmb3VyIGRpc3RpbmN0IHR5cGVzIG9mIG5vcm1hbCBvdXRwdXQgZnJvbSBpbnRlcmFjdGl2ZQorCWNvbW1hbmRzLiAgVGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgbWF5IGJlIHNwZWNpZmllZCBhcworCWluIGNvbG9yLmJyYW5jaC48c2xvdD4uCisKK2NvbG9yLnBhZ2VyOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3JlZCBvdXRwdXQgd2hlbiB0aGUgcGFnZXIgaXMgaW4KKwl1c2UgKGRlZmF1bHQgaXMgdHJ1ZSkuCisKK2NvbG9yLnNob3dicmFuY2g6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciBpbiB0aGUgb3V0cHV0IG9mCisJbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0uIE1heSBiZSBzZXQgdG8gYGFsd2F5c2AsCisJYGZhbHNlYCAob3IgYG5ldmVyYCkgb3IgYGF1dG9gIChvciBgdHJ1ZWApLCBpbiB3aGljaCBjYXNlIGNvbG9ycyBhcmUgdXNlZAorCW9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIHRvIGEgdGVybWluYWwuIERlZmF1bHRzIHRvIGZhbHNlLgorCitjb2xvci5zdGF0dXM6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciBpbiB0aGUgb3V0cHV0IG9mCisJbGlua2dpdDpnaXQtc3RhdHVzWzFdLiBNYXkgYmUgc2V0IHRvIGBhbHdheXNgLAorCWBmYWxzZWAgKG9yIGBuZXZlcmApIG9yIGBhdXRvYCAob3IgYHRydWVgKSwgaW4gd2hpY2ggY2FzZSBjb2xvcnMgYXJlIHVzZWQKKwlvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyB0byBhIHRlcm1pbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4KKworY29sb3Iuc3RhdHVzLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yIHN0YXR1cyBjb2xvcml6YXRpb24uIGA8c2xvdD5gIGlzCisJb25lIG9mIGBoZWFkZXJgICh0aGUgaGVhZGVyIHRleHQgb2YgdGhlIHN0YXR1cyBtZXNzYWdlKSwKKwlgYWRkZWRgIG9yIGB1cGRhdGVkYCAoZmlsZXMgd2hpY2ggYXJlIGFkZGVkIGJ1dCBub3QgY29tbWl0dGVkKSwKKwlgY2hhbmdlZGAgKGZpbGVzIHdoaWNoIGFyZSBjaGFuZ2VkIGJ1dCBub3QgYWRkZWQgaW4gdGhlIGluZGV4KSwKKwlgdW50cmFja2VkYCAoZmlsZXMgd2hpY2ggYXJlIG5vdCB0cmFja2VkIGJ5IGdpdCksCisJYGJyYW5jaGAgKHRoZSBjdXJyZW50IGJyYW5jaCksIG9yCisJYG5vYnJhbmNoYCAodGhlIGNvbG9yIHRoZSAnbm8gYnJhbmNoJyB3YXJuaW5nIGlzIHNob3duIGluLCBkZWZhdWx0aW5nCisJdG8gcmVkKS4gVGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgbWF5IGJlIHNwZWNpZmllZCBhcyBpbgorCWNvbG9yLmJyYW5jaC48c2xvdD4uCisKK2NvbG9yLnVpOjoKKwlUaGlzIHZhcmlhYmxlIGRldGVybWluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHZhcmlhYmxlcyBzdWNoCisJYXMgYGNvbG9yLmRpZmZgIGFuZCBgY29sb3IuZ3JlcGAgdGhhdCBjb250cm9sIHRoZSB1c2Ugb2YgY29sb3IKKwlwZXIgY29tbWFuZCBmYW1pbHkuIEl0cyBzY29wZSB3aWxsIGV4cGFuZCBhcyBtb3JlIGNvbW1hbmRzIGxlYXJuCisJY29uZmlndXJhdGlvbiB0byBzZXQgYSBkZWZhdWx0IGZvciB0aGUgYC0tY29sb3JgIG9wdGlvbi4gIFNldCBpdAorCXRvIGBhbHdheXNgIGlmIHlvdSB3YW50IGFsbCBvdXRwdXQgbm90IGludGVuZGVkIGZvciBtYWNoaW5lCisJY29uc3VtcHRpb24gdG8gdXNlIGNvbG9yLCB0byBgdHJ1ZWAgb3IgYGF1dG9gIGlmIHlvdSB3YW50IHN1Y2gKKwlvdXRwdXQgdG8gdXNlIGNvbG9yIHdoZW4gd3JpdHRlbiB0byB0aGUgdGVybWluYWwsIG9yIHRvIGBmYWxzZWAgb3IKKwlgbmV2ZXJgIGlmIHlvdSBwcmVmZXIgZ2l0IGNvbW1hbmRzIG5vdCB0byB1c2UgY29sb3IgdW5sZXNzIGVuYWJsZWQKKwlleHBsaWNpdGx5IHdpdGggc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9yIHRoZSBgLS1jb2xvcmAgb3B0aW9uLgorCitjb2x1bW4udWk6OgorCVNwZWNpZnkgd2hldGhlciBzdXBwb3J0ZWQgY29tbWFuZHMgc2hvdWxkIG91dHB1dCBpbiBjb2x1bW5zLgorCVRoaXMgdmFyaWFibGUgY29uc2lzdHMgb2YgYSBsaXN0IG9mIHRva2VucyBzZXBhcmF0ZWQgYnkgc3BhY2VzCisJb3IgY29tbWFzOgorKworLS0KK2BhbHdheXNgOzsKKwlhbHdheXMgc2hvdyBpbiBjb2x1bW5zCitgbmV2ZXJgOzsKKwluZXZlciBzaG93IGluIGNvbHVtbnMKK2BhdXRvYDs7CisJc2hvdyBpbiBjb2x1bW5zIGlmIHRoZSBvdXRwdXQgaXMgdG8gdGhlIHRlcm1pbmFsCitgY29sdW1uYDs7CisJZmlsbCBjb2x1bW5zIGJlZm9yZSByb3dzIChkZWZhdWx0KQorYHJvd2A7OworCWZpbGwgcm93cyBiZWZvcmUgY29sdW1ucworYHBsYWluYDs7CisJc2hvdyBpbiBvbmUgY29sdW1uCitgZGVuc2VgOzsKKwltYWtlIHVuZXF1YWwgc2l6ZSBjb2x1bW5zIHRvIHV0aWxpemUgbW9yZSBzcGFjZQorYG5vZGVuc2VgOzsKKwltYWtlIGVxdWFsIHNpemUgY29sdW1ucworLS0KKysKK1RoaXMgb3B0aW9uIGRlZmF1bHRzIHRvICduZXZlcicuCisKK2NvbHVtbi5icmFuY2g6OgorCVNwZWNpZnkgd2hldGhlciB0byBvdXRwdXQgYnJhbmNoIGxpc3RpbmcgaW4gYGdpdCBicmFuY2hgIGluIGNvbHVtbnMuCisJU2VlIGBjb2x1bW4udWlgIGZvciBkZXRhaWxzLgorCitjb2x1bW4uc3RhdHVzOjoKKwlTcGVjaWZ5IHdoZXRoZXIgdG8gb3V0cHV0IHVudHJhY2tlZCBmaWxlcyBpbiBgZ2l0IHN0YXR1c2AgaW4gY29sdW1ucy4KKwlTZWUgYGNvbHVtbi51aWAgZm9yIGRldGFpbHMuCisKK2NvbHVtbi50YWc6OgorCVNwZWNpZnkgd2hldGhlciB0byBvdXRwdXQgdGFnIGxpc3RpbmcgaW4gYGdpdCB0YWdgIGluIGNvbHVtbnMuCisJU2VlIGBjb2x1bW4udWlgIGZvciBkZXRhaWxzLgorCitjb21taXQuc3RhdHVzOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgaW5jbHVzaW9uIG9mIHN0YXR1cyBpbmZvcm1hdGlvbiBpbiB0aGUKKwljb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSB3aGVuIHVzaW5nIGFuIGVkaXRvciB0byBwcmVwYXJlIHRoZSBjb21taXQKKwltZXNzYWdlLiAgRGVmYXVsdHMgdG8gdHJ1ZS4KKworY29tbWl0LnRlbXBsYXRlOjoKKwlTcGVjaWZ5IGEgZmlsZSB0byB1c2UgYXMgdGhlIHRlbXBsYXRlIGZvciBuZXcgY29tbWl0IG1lc3NhZ2VzLgorCSJgfi9gIiBpcyBleHBhbmRlZCB0byB0aGUgdmFsdWUgb2YgYCRIT01FYCBhbmQgImB+dXNlci9gIiB0byB0aGUKKwlzcGVjaWZpZWQgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgorCitjcmVkZW50aWFsLmhlbHBlcjo6CisJU3BlY2lmeSBhbiBleHRlcm5hbCBoZWxwZXIgdG8gYmUgY2FsbGVkIHdoZW4gYSB1c2VybmFtZSBvcgorCXBhc3N3b3JkIGNyZWRlbnRpYWwgaXMgbmVlZGVkOyB0aGUgaGVscGVyIG1heSBjb25zdWx0IGV4dGVybmFsCisJc3RvcmFnZSB0byBhdm9pZCBwcm9tcHRpbmcgdGhlIHVzZXIgZm9yIHRoZSBjcmVkZW50aWFscy4gU2VlCisJbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XSBmb3IgZGV0YWlscy4KKworY3JlZGVudGlhbC51c2VIdHRwUGF0aDo6CisJV2hlbiBhY3F1aXJpbmcgY3JlZGVudGlhbHMsIGNvbnNpZGVyIHRoZSAicGF0aCIgY29tcG9uZW50IG9mIGFuIGh0dHAKKwlvciBodHRwcyBVUkwgdG8gYmUgaW1wb3J0YW50LiBEZWZhdWx0cyB0byBmYWxzZS4gU2VlCisJbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY3JlZGVudGlhbC51c2VybmFtZTo6CisJSWYgbm8gdXNlcm5hbWUgaXMgc2V0IGZvciBhIG5ldHdvcmsgYXV0aGVudGljYXRpb24sIHVzZSB0aGlzIHVzZXJuYW1lCisJYnkgZGVmYXVsdC4gU2VlIGNyZWRlbnRpYWwuPGNvbnRleHQ+LiogYmVsb3csIGFuZAorCWxpbmtnaXQ6Z2l0Y3JlZGVudGlhbHNbN10uCisKK2NyZWRlbnRpYWwuPHVybD4uKjo6CisJQW55IG9mIHRoZSBjcmVkZW50aWFsLiogb3B0aW9ucyBhYm92ZSBjYW4gYmUgYXBwbGllZCBzZWxlY3RpdmVseSB0bworCXNvbWUgY3JlZGVudGlhbHMuIEZvciBleGFtcGxlICJjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20udXNlcm5hbWUiCisJd291bGQgc2V0IHRoZSBkZWZhdWx0IHVzZXJuYW1lIG9ubHkgZm9yIGh0dHBzIGNvbm5lY3Rpb25zIHRvCisJZXhhbXBsZS5jb20uIFNlZSBsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddIGZvciBkZXRhaWxzIG9uIGhvdyBVUkxzIGFyZQorCW1hdGNoZWQuCisKK2luY2x1ZGU6OmRpZmYtY29uZmlnLnR4dFtdCisKK2RpZmZ0b29sLjx0b29sPi5wYXRoOjoKKwlPdmVycmlkZSB0aGUgcGF0aCBmb3IgdGhlIGdpdmVuIHRvb2wuICBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlCisJeW91ciB0b29sIGlzIG5vdCBpbiB0aGUgUEFUSC4KKworZGlmZnRvb2wuPHRvb2w+LmNtZDo6CisJU3BlY2lmeSB0aGUgY29tbWFuZCB0byBpbnZva2UgdGhlIHNwZWNpZmllZCBkaWZmIHRvb2wuCisJVGhlIHNwZWNpZmllZCBjb21tYW5kIGlzIGV2YWx1YXRlZCBpbiBzaGVsbCB3aXRoIHRoZSBmb2xsb3dpbmcKKwl2YXJpYWJsZXMgYXZhaWxhYmxlOiAgJ0xPQ0FMJyBpcyBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeQorCWZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGRpZmYgcHJlLWltYWdlIGFuZCAnUkVNT1RFJworCWlzIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMKKwlvZiB0aGUgZGlmZiBwb3N0LWltYWdlLgorCitkaWZmdG9vbC5wcm9tcHQ6OgorCVByb21wdCBiZWZvcmUgZWFjaCBpbnZvY2F0aW9uIG9mIHRoZSBkaWZmIHRvb2wuCisKK2RpZmYud29yZFJlZ2V4OjoKKwlBIFBPU0lYIEV4dGVuZGVkIFJlZ3VsYXIgRXhwcmVzc2lvbiB1c2VkIHRvIGRldGVybWluZSB3aGF0IGlzIGEgIndvcmQiCisJd2hlbiBwZXJmb3JtaW5nIHdvcmQtYnktd29yZCBkaWZmZXJlbmNlIGNhbGN1bGF0aW9ucy4gIENoYXJhY3RlcgorCXNlcXVlbmNlcyB0aGF0IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYXJlICJ3b3JkcyIsIGFsbCBvdGhlcgorCWNoYXJhY3RlcnMgYXJlICppZ25vcmFibGUqIHdoaXRlc3BhY2UuCisKK2ZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzOjoKKwlUaGlzIG9wdGlvbiBjYW4gYmUgZWl0aGVyIHNldCB0byBhIGJvb2xlYW4gdmFsdWUgb3IgdG8gJ29uLWRlbWFuZCcuCisJU2V0dGluZyBpdCB0byBhIGJvb2xlYW4gY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgZmV0Y2ggYW5kIHB1bGwgdG8KKwl1bmNvbmRpdGlvbmFsbHkgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMgd2hlbiBzZXQgdG8gdHJ1ZSBvciB0byBub3QKKwlyZWN1cnNlIGF0IGFsbCB3aGVuIHNldCB0byBmYWxzZS4gV2hlbiBzZXQgdG8gJ29uLWRlbWFuZCcgKHRoZSBkZWZhdWx0CisJdmFsdWUpLCBmZXRjaCBhbmQgcHVsbCB3aWxsIG9ubHkgcmVjdXJzZSBpbnRvIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZQorCXdoZW4gaXRzIHN1cGVycHJvamVjdCByZXRyaWV2ZXMgYSBjb21taXQgdGhhdCB1cGRhdGVzIHRoZSBzdWJtb2R1bGUncworCXJlZmVyZW5jZS4KKworZmV0Y2guZnNja09iamVjdHM6OgorCUlmIGl0IGlzIHNldCB0byB0cnVlLCBnaXQtZmV0Y2gtcGFjayB3aWxsIGNoZWNrIGFsbCBmZXRjaGVkCisJb2JqZWN0cy4gSXQgd2lsbCBhYm9ydCBpbiB0aGUgY2FzZSBvZiBhIG1hbGZvcm1lZCBvYmplY3Qgb3IgYQorCWJyb2tlbiBsaW5rLiBUaGUgcmVzdWx0IG9mIGFuIGFib3J0IGFyZSBvbmx5IGRhbmdsaW5nIG9iamVjdHMuCisJRGVmYXVsdHMgdG8gZmFsc2UuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZSBvZiBgdHJhbnNmZXIuZnNja09iamVjdHNgCisJaXMgdXNlZCBpbnN0ZWFkLgorCitmZXRjaC51bnBhY2tMaW1pdDo6CisJSWYgdGhlIG51bWJlciBvZiBvYmplY3RzIGZldGNoZWQgb3ZlciB0aGUgZ2l0IG5hdGl2ZQorCXRyYW5zZmVyIGlzIGJlbG93IHRoaXMKKwlsaW1pdCwgdGhlbiB0aGUgb2JqZWN0cyB3aWxsIGJlIHVucGFja2VkIGludG8gbG9vc2Ugb2JqZWN0CisJZmlsZXMuIEhvd2V2ZXIgaWYgdGhlIG51bWJlciBvZiByZWNlaXZlZCBvYmplY3RzIGVxdWFscyBvcgorCWV4Y2VlZHMgdGhpcyBsaW1pdCB0aGVuIHRoZSByZWNlaXZlZCBwYWNrIHdpbGwgYmUgc3RvcmVkIGFzCisJYSBwYWNrLCBhZnRlciBhZGRpbmcgYW55IG1pc3NpbmcgZGVsdGEgYmFzZXMuICBTdG9yaW5nIHRoZQorCXBhY2sgZnJvbSBhIHB1c2ggY2FuIG1ha2UgdGhlIHB1c2ggb3BlcmF0aW9uIGNvbXBsZXRlIGZhc3RlciwKKwllc3BlY2lhbGx5IG9uIHNsb3cgZmlsZXN5c3RlbXMuICBJZiBub3Qgc2V0LCB0aGUgdmFsdWUgb2YKKwlgdHJhbnNmZXIudW5wYWNrTGltaXRgIGlzIHVzZWQgaW5zdGVhZC4KKworZm9ybWF0LmF0dGFjaDo6CisJRW5hYmxlIG11bHRpcGFydC9taXhlZCBhdHRhY2htZW50cyBhcyB0aGUgZGVmYXVsdCBmb3IKKwknZm9ybWF0LXBhdGNoJy4gIFRoZSB2YWx1ZSBjYW4gYWxzbyBiZSBhIGRvdWJsZSBxdW90ZWQgc3RyaW5nCisJd2hpY2ggd2lsbCBlbmFibGUgYXR0YWNobWVudHMgYXMgdGhlIGRlZmF1bHQgYW5kIHNldCB0aGUKKwl2YWx1ZSBhcyB0aGUgYm91bmRhcnkuICBTZWUgdGhlIC0tYXR0YWNoIG9wdGlvbiBpbgorCWxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KKworZm9ybWF0Lm51bWJlcmVkOjoKKwlBIGJvb2xlYW4gd2hpY2ggY2FuIGVuYWJsZSBvciBkaXNhYmxlIHNlcXVlbmNlIG51bWJlcnMgaW4gcGF0Y2gKKwlzdWJqZWN0cy4gIEl0IGRlZmF1bHRzIHRvICJhdXRvIiB3aGljaCBlbmFibGVzIGl0IG9ubHkgaWYgdGhlcmUKKwlpcyBtb3JlIHRoYW4gb25lIHBhdGNoLiAgSXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGFsbAorCW1lc3NhZ2VzIGJ5IHNldHRpbmcgaXQgdG8gInRydWUiIG9yICJmYWxzZSIuICBTZWUgLS1udW1iZXJlZAorCW9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0uCisKK2Zvcm1hdC5oZWFkZXJzOjoKKwlBZGRpdGlvbmFsIGVtYWlsIGhlYWRlcnMgdG8gaW5jbHVkZSBpbiBhIHBhdGNoIHRvIGJlIHN1Ym1pdHRlZAorCWJ5IG1haWwuICBTZWUgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCitmb3JtYXQudG86OgorZm9ybWF0LmNjOjoKKwlBZGRpdGlvbmFsIHJlY2lwaWVudHMgdG8gaW5jbHVkZSBpbiBhIHBhdGNoIHRvIGJlIHN1Ym1pdHRlZAorCWJ5IG1haWwuICBTZWUgdGhlIC0tdG8gYW5kIC0tY2Mgb3B0aW9ucyBpbgorCWxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KKworZm9ybWF0LnN1YmplY3RwcmVmaXg6OgorCVRoZSBkZWZhdWx0IGZvciBmb3JtYXQtcGF0Y2ggaXMgdG8gb3V0cHV0IGZpbGVzIHdpdGggdGhlICdbUEFUQ0hdJworCXN1YmplY3QgcHJlZml4LiBVc2UgdGhpcyB2YXJpYWJsZSB0byBjaGFuZ2UgdGhhdCBwcmVmaXguCisKK2Zvcm1hdC5zaWduYXR1cmU6OgorCVRoZSBkZWZhdWx0IGZvciBmb3JtYXQtcGF0Y2ggaXMgdG8gb3V0cHV0IGEgc2lnbmF0dXJlIGNvbnRhaW5pbmcKKwl0aGUgZ2l0IHZlcnNpb24gbnVtYmVyLiBVc2UgdGhpcyB2YXJpYWJsZSB0byBjaGFuZ2UgdGhhdCBkZWZhdWx0LgorCVNldCB0aGlzIHZhcmlhYmxlIHRvIHRoZSBlbXB0eSBzdHJpbmcgKCIiKSB0byBzdXBwcmVzcworCXNpZ25hdHVyZSBnZW5lcmF0aW9uLgorCitmb3JtYXQuc3VmZml4OjoKKwlUaGUgZGVmYXVsdCBmb3IgZm9ybWF0LXBhdGNoIGlzIHRvIG91dHB1dCBmaWxlcyB3aXRoIHRoZSBzdWZmaXgKKwlgLnBhdGNoYC4gVXNlIHRoaXMgdmFyaWFibGUgdG8gY2hhbmdlIHRoYXQgc3VmZml4IChtYWtlIHN1cmUgdG8KKwlpbmNsdWRlIHRoZSBkb3QgaWYgeW91IHdhbnQgaXQpLgorCitmb3JtYXQucHJldHR5OjoKKwlUaGUgZGVmYXVsdCBwcmV0dHkgZm9ybWF0IGZvciBsb2cvc2hvdy93aGF0Y2hhbmdlZCBjb21tYW5kLAorCVNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0sIGxpbmtnaXQ6Z2l0LXNob3dbMV0sCisJbGlua2dpdDpnaXQtd2hhdGNoYW5nZWRbMV0uCisKK2Zvcm1hdC50aHJlYWQ6OgorCVRoZSBkZWZhdWx0IHRocmVhZGluZyBzdHlsZSBmb3IgJ2dpdCBmb3JtYXQtcGF0Y2gnLiAgQ2FuIGJlCisJYSBib29sZWFuIHZhbHVlLCBvciBgc2hhbGxvd2Agb3IgYGRlZXBgLiAgYHNoYWxsb3dgIHRocmVhZGluZworCW1ha2VzIGV2ZXJ5IG1haWwgYSByZXBseSB0byB0aGUgaGVhZCBvZiB0aGUgc2VyaWVzLAorCXdoZXJlIHRoZSBoZWFkIGlzIGNob3NlbiBmcm9tIHRoZSBjb3ZlciBsZXR0ZXIsIHRoZQorCWAtLWluLXJlcGx5LXRvYCwgYW5kIHRoZSBmaXJzdCBwYXRjaCBtYWlsLCBpbiB0aGlzIG9yZGVyLgorCWBkZWVwYCB0aHJlYWRpbmcgbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cyBvbmUuCisJQSB0cnVlIGJvb2xlYW4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgYHNoYWxsb3dgLCBhbmQgYSBmYWxzZQorCXZhbHVlIGRpc2FibGVzIHRocmVhZGluZy4KKworZm9ybWF0LnNpZ25vZmY6OgorICAgIEEgYm9vbGVhbiB2YWx1ZSB3aGljaCBsZXRzIHlvdSBlbmFibGUgdGhlIGAtcy8tLXNpZ25vZmZgIG9wdGlvbiBvZgorICAgIGZvcm1hdC1wYXRjaCBieSBkZWZhdWx0LiAqTm90ZToqIEFkZGluZyB0aGUgU2lnbmVkLW9mZi1ieTogbGluZSB0byBhCisgICAgcGF0Y2ggc2hvdWxkIGJlIGEgY29uc2Npb3VzIGFjdCBhbmQgbWVhbnMgdGhhdCB5b3UgY2VydGlmeSB5b3UgaGF2ZQorICAgIHRoZSByaWdodHMgdG8gc3VibWl0IHRoaXMgd29yayB1bmRlciB0aGUgc2FtZSBvcGVuIHNvdXJjZSBsaWNlbnNlLgorICAgIFBsZWFzZSBzZWUgdGhlICdTdWJtaXR0aW5nUGF0Y2hlcycgZG9jdW1lbnQgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi4KKworZmlsdGVyLjxkcml2ZXI+LmNsZWFuOjoKKwlUaGUgY29tbWFuZCB3aGljaCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnQgb2YgYSB3b3JrdHJlZQorCWZpbGUgdG8gYSBibG9iIHVwb24gY2hlY2tpbi4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yCisJZGV0YWlscy4KKworZmlsdGVyLjxkcml2ZXI+LnNtdWRnZTo6CisJVGhlIGNvbW1hbmQgd2hpY2ggaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBjb250ZW50IG9mIGEgYmxvYgorCW9iamVjdCB0byBhIHdvcmt0cmVlIGZpbGUgdXBvbiBjaGVja291dC4gIFNlZQorCWxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworZ2MuYWdncmVzc2l2ZVdpbmRvdzo6CisJVGhlIHdpbmRvdyBzaXplIHBhcmFtZXRlciB1c2VkIGluIHRoZSBkZWx0YSBjb21wcmVzc2lvbgorCWFsZ29yaXRobSB1c2VkIGJ5ICdnaXQgZ2MgLS1hZ2dyZXNzaXZlJy4gIFRoaXMgZGVmYXVsdHMKKwl0byAyNTAuCisKK2djLmF1dG86OgorCVdoZW4gdGhlcmUgYXJlIGFwcHJveGltYXRlbHkgbW9yZSB0aGFuIHRoaXMgbWFueSBsb29zZQorCW9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnksIGBnaXQgZ2MgLS1hdXRvYCB3aWxsIHBhY2sgdGhlbS4KKwlTb21lIFBvcmNlbGFpbiBjb21tYW5kcyB1c2UgdGhpcyBjb21tYW5kIHRvIHBlcmZvcm0gYQorCWxpZ2h0LXdlaWdodCBnYXJiYWdlIGNvbGxlY3Rpb24gZnJvbSB0aW1lIHRvIHRpbWUuICBUaGUKKwlkZWZhdWx0IHZhbHVlIGlzIDY3MDAuICBTZXR0aW5nIHRoaXMgdG8gMCBkaXNhYmxlcyBpdC4KKworZ2MuYXV0b3BhY2tsaW1pdDo6CisJV2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuIHRoaXMgbWFueSBwYWNrcyB0aGF0IGFyZSBub3QKKwltYXJrZWQgd2l0aCBgKi5rZWVwYCBmaWxlIGluIHRoZSByZXBvc2l0b3J5LCBgZ2l0IGdjCisJLS1hdXRvYCBjb25zb2xpZGF0ZXMgdGhlbSBpbnRvIG9uZSBsYXJnZXIgcGFjay4gIFRoZQorCWRlZmF1bHQJdmFsdWUgaXMgNTAuICBTZXR0aW5nIHRoaXMgdG8gMCBkaXNhYmxlcyBpdC4KKworZ2MucGFja3JlZnM6OgorCVJ1bm5pbmcgYGdpdCBwYWNrLXJlZnNgIGluIGEgcmVwb3NpdG9yeSByZW5kZXJzIGl0CisJdW5jbG9uYWJsZSBieSBHaXQgdmVyc2lvbnMgcHJpb3IgdG8gMS41LjEuMiBvdmVyIGR1bWIKKwl0cmFuc3BvcnRzIHN1Y2ggYXMgSFRUUC4gIFRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGV0aGVyCisJJ2dpdCBnYycgcnVucyBgZ2l0IHBhY2stcmVmc2AuIFRoaXMgY2FuIGJlIHNldCB0byBgbm90YmFyZWAKKwl0byBlbmFibGUgaXQgd2l0aGluIGFsbCBub24tYmFyZSByZXBvcyBvciBpdCBjYW4gYmUgc2V0IHRvIGEKKwlib29sZWFuIHZhbHVlLiAgVGhlIGRlZmF1bHQgaXMgYHRydWVgLgorCitnYy5wcnVuZWV4cGlyZTo6CisJV2hlbiAnZ2l0IGdjJyBpcyBydW4sIGl0IHdpbGwgY2FsbCAncHJ1bmUgLS1leHBpcmUgMi53ZWVrcy5hZ28nLgorCU92ZXJyaWRlIHRoZSBncmFjZSBwZXJpb2Qgd2l0aCB0aGlzIGNvbmZpZyB2YXJpYWJsZS4gIFRoZSB2YWx1ZQorCSJub3ciIG1heSBiZSB1c2VkIHRvIGRpc2FibGUgdGhpcyAgZ3JhY2UgcGVyaW9kIGFuZCBhbHdheXMgcHJ1bmUKKwl1bnJlYWNoYWJsZSBvYmplY3RzIGltbWVkaWF0ZWx5LgorCitnYy5yZWZsb2dleHBpcmU6OgorZ2MuPHBhdHRlcm4+LnJlZmxvZ2V4cGlyZTo6CisJJ2dpdCByZWZsb2cgZXhwaXJlJyByZW1vdmVzIHJlZmxvZyBlbnRyaWVzIG9sZGVyIHRoYW4KKwl0aGlzIHRpbWU7IGRlZmF1bHRzIHRvIDkwIGRheXMuICBXaXRoICI8cGF0dGVybj4iIChlLmcuCisJInJlZnMvc3Rhc2giKSBpbiB0aGUgbWlkZGxlIHRoZSBzZXR0aW5nIGFwcGxpZXMgb25seSB0bworCXRoZSByZWZzIHRoYXQgbWF0Y2ggdGhlIDxwYXR0ZXJuPi4KKworZ2MucmVmbG9nZXhwaXJldW5yZWFjaGFibGU6OgorZ2MuPHJlZj4ucmVmbG9nZXhwaXJldW5yZWFjaGFibGU6OgorCSdnaXQgcmVmbG9nIGV4cGlyZScgcmVtb3ZlcyByZWZsb2cgZW50cmllcyBvbGRlciB0aGFuCisJdGhpcyB0aW1lIGFuZCBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHRoZSBjdXJyZW50IHRpcDsKKwlkZWZhdWx0cyB0byAzMCBkYXlzLiAgV2l0aCAiPHBhdHRlcm4+IiAoZS5nLiAicmVmcy9zdGFzaCIpCisJaW4gdGhlIG1pZGRsZSwgdGhlIHNldHRpbmcgYXBwbGllcyBvbmx5IHRvIHRoZSByZWZzIHRoYXQKKwltYXRjaCB0aGUgPHBhdHRlcm4+LgorCitnYy5yZXJlcmVyZXNvbHZlZDo6CisJUmVjb3JkcyBvZiBjb25mbGljdGVkIG1lcmdlIHlvdSByZXNvbHZlZCBlYXJsaWVyIGFyZQorCWtlcHQgZm9yIHRoaXMgbWFueSBkYXlzIHdoZW4gJ2dpdCByZXJlcmUgZ2MnIGlzIHJ1bi4KKwlUaGUgZGVmYXVsdCBpcyA2MCBkYXlzLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlcmVyZVsxXS4KKworZ2MucmVyZXJldW5yZXNvbHZlZDo6CisJUmVjb3JkcyBvZiBjb25mbGljdGVkIG1lcmdlIHlvdSBoYXZlIG5vdCByZXNvbHZlZCBhcmUKKwlrZXB0IGZvciB0aGlzIG1hbnkgZGF5cyB3aGVuICdnaXQgcmVyZXJlIGdjJyBpcyBydW4uCisJVGhlIGRlZmF1bHQgaXMgMTUgZGF5cy4gIFNlZSBsaW5rZ2l0OmdpdC1yZXJlcmVbMV0uCisKK2dpdGN2cy5jb21taXRtc2dhbm5vdGF0aW9uOjoKKwlBcHBlbmQgdGhpcyBzdHJpbmcgdG8gZWFjaCBjb21taXQgbWVzc2FnZS4gU2V0IHRvIGVtcHR5IHN0cmluZworCXRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLiBEZWZhdWx0cyB0byAidmlhIGdpdC1DVlMgZW11bGF0b3IiLgorCitnaXRjdnMuZW5hYmxlZDo6CisJV2hldGhlciB0aGUgQ1ZTIHNlcnZlciBpbnRlcmZhY2UgaXMgZW5hYmxlZCBmb3IgdGhpcyByZXBvc2l0b3J5LgorCVNlZSBsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0uCisKK2dpdGN2cy5sb2dmaWxlOjoKKwlQYXRoIHRvIGEgbG9nIGZpbGUgd2hlcmUgdGhlIENWUyBzZXJ2ZXIgaW50ZXJmYWNlIHdlbGwuLi4gbG9ncworCXZhcmlvdXMgc3R1ZmYuIFNlZSBsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0uCisKK2dpdGN2cy51c2VjcmxmYXR0cjo6CisJSWYgdHJ1ZSwgdGhlIHNlcnZlciB3aWxsIGxvb2sgdXAgdGhlIGVuZC1vZi1saW5lIGNvbnZlcnNpb24KKwlhdHRyaWJ1dGVzIGZvciBmaWxlcyB0byBkZXRlcm1pbmUgdGhlICctaycgbW9kZXMgdG8gdXNlLiBJZgorCXRoZSBhdHRyaWJ1dGVzIGZvcmNlIGdpdCB0byB0cmVhdCBhIGZpbGUgYXMgdGV4dCwKKwl0aGUgJy1rJyBtb2RlIHdpbGwgYmUgbGVmdCBibGFuayBzbyBDVlMgY2xpZW50cyB3aWxsCisJdHJlYXQgaXQgYXMgdGV4dC4gSWYgdGhleSBzdXBwcmVzcyB0ZXh0IGNvbnZlcnNpb24sIHRoZSBmaWxlCisJd2lsbCBiZSBzZXQgd2l0aCAnLWtiJyBtb2RlLCB3aGljaCBzdXBwcmVzc2VzIGFueSBuZXdsaW5lIG11bmdpbmcKKwl0aGUgY2xpZW50IG1pZ2h0IG90aGVyd2lzZSBkby4gSWYgdGhlIGF0dHJpYnV0ZXMgZG8gbm90IGFsbG93CisJdGhlIGZpbGUgdHlwZSB0byBiZSBkZXRlcm1pbmVkLCB0aGVuICdnaXRjdnMuYWxsYmluYXJ5JyBpcworCXVzZWQuIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0uCisKK2dpdGN2cy5hbGxiaW5hcnk6OgorCVRoaXMgaXMgdXNlZCBpZiAnZ2l0Y3ZzLnVzZWNybGZhdHRyJyBkb2VzIG5vdCByZXNvbHZlCisJdGhlIGNvcnJlY3QgJy1rYicgbW9kZSB0byB1c2UuIElmIHRydWUsIGFsbAorCXVucmVzb2x2ZWQgZmlsZXMgYXJlIHNlbnQgdG8gdGhlIGNsaWVudCBpbgorCW1vZGUgJy1rYicuIFRoaXMgY2F1c2VzIHRoZSBjbGllbnQgdG8gdHJlYXQgdGhlbQorCWFzIGJpbmFyeSBmaWxlcywgd2hpY2ggc3VwcHJlc3NlcyBhbnkgbmV3bGluZSBtdW5naW5nIGl0CisJb3RoZXJ3aXNlIG1pZ2h0IGRvLiBBbHRlcm5hdGl2ZWx5LCBpZiBpdCBpcyBzZXQgdG8gImd1ZXNzIiwKKwl0aGVuIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUgZXhhbWluZWQgdG8gZGVjaWRlIGlmCisJaXQgaXMgYmluYXJ5LCBzaW1pbGFyIHRvICdjb3JlLmF1dG9jcmxmJy4KKworZ2l0Y3ZzLmRibmFtZTo6CisJRGF0YWJhc2UgdXNlZCBieSBnaXQtY3Zzc2VydmVyIHRvIGNhY2hlIHJldmlzaW9uIGluZm9ybWF0aW9uCisJZGVyaXZlZCBmcm9tIHRoZSBnaXQgcmVwb3NpdG9yeS4gVGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUKKwl1c2VkIGRhdGFiYXNlIGRyaXZlciwgZm9yIFNRTGl0ZSAod2hpY2ggaXMgdGhlIGRlZmF1bHQgZHJpdmVyKSB0aGlzCisJaXMgYSBmaWxlbmFtZS4gU3VwcG9ydHMgdmFyaWFibGUgc3Vic3RpdHV0aW9uIChzZWUKKwlsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0gZm9yIGRldGFpbHMpLiBNYXkgbm90IGNvbnRhaW4gc2VtaWNvbG9ucyAoYDtgKS4KKwlEZWZhdWx0OiAnJUdnaXRjdnMuJW0uc3FsaXRlJworCitnaXRjdnMuZGJkcml2ZXI6OgorCVVzZWQgUGVybCBEQkkgZHJpdmVyLiBZb3UgY2FuIHNwZWNpZnkgYW55IGF2YWlsYWJsZSBkcml2ZXIKKyAgICAgICAgZm9yIHRoaXMgaGVyZSwgYnV0IGl0IG1pZ2h0IG5vdCB3b3JrLiBnaXQtY3Zzc2VydmVyIGlzIHRlc3RlZAorCXdpdGggJ0RCRDo6U1FMaXRlJywgcmVwb3J0ZWQgdG8gd29yayB3aXRoICdEQkQ6OlBnJywgYW5kCisJcmVwb3J0ZWQgKm5vdCogdG8gd29yayB3aXRoICdEQkQ6Om15c3FsJy4gRXhwZXJpbWVudGFsIGZlYXR1cmUuCisJTWF5IG5vdCBjb250YWluIGRvdWJsZSBjb2xvbnMgKGA6YCkuIERlZmF1bHQ6ICdTUUxpdGUnLgorCVNlZSBsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0uCisKK2dpdGN2cy5kYnVzZXIsIGdpdGN2cy5kYnBhc3M6OgorCURhdGFiYXNlIHVzZXIgYW5kIHBhc3N3b3JkLiBPbmx5IHVzZWZ1bCBpZiBzZXR0aW5nICdnaXRjdnMuZGJkcml2ZXInLAorCXNpbmNlIFNRTGl0ZSBoYXMgbm8gY29uY2VwdCBvZiBkYXRhYmFzZSB1c2VycyBhbmQvb3IgcGFzc3dvcmRzLgorCSdnaXRjdnMuZGJ1c2VyJyBzdXBwb3J0cyB2YXJpYWJsZSBzdWJzdGl0dXRpb24gKHNlZQorCWxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXSBmb3IgZGV0YWlscykuCisKK2dpdGN2cy5kYlRhYmxlTmFtZVByZWZpeDo6CisJRGF0YWJhc2UgdGFibGUgbmFtZSBwcmVmaXguICBQcmVwZW5kZWQgdG8gdGhlIG5hbWVzIG9mIGFueQorCWRhdGFiYXNlIHRhYmxlcyB1c2VkLCBhbGxvd2luZyBhIHNpbmdsZSBkYXRhYmFzZSB0byBiZSB1c2VkCisJZm9yIHNldmVyYWwgcmVwb3NpdG9yaWVzLiAgU3VwcG9ydHMgdmFyaWFibGUgc3Vic3RpdHV0aW9uIChzZWUKKwlsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0gZm9yIGRldGFpbHMpLiAgQW55IG5vbi1hbHBoYWJldGljCisJY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdW5kZXJzY29yZXMuCisKK0FsbCBnaXRjdnMgdmFyaWFibGVzIGV4Y2VwdCBmb3IgJ2dpdGN2cy51c2VjcmxmYXR0cicgYW5kCisnZ2l0Y3ZzLmFsbGJpbmFyeScgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGFzCisnZ2l0Y3ZzLjxhY2Nlc3NfbWV0aG9kPi48dmFybmFtZT4nICh3aGVyZSAnYWNjZXNzX21ldGhvZCcKK2lzIG9uZSBvZiAiZXh0IiBhbmQgInBzZXJ2ZXIiKSB0byBtYWtlIHRoZW0gYXBwbHkgb25seSBmb3IgdGhlIGdpdmVuCithY2Nlc3MgbWV0aG9kLgorCitnaXR3ZWIuY2F0ZWdvcnk6OgorZ2l0d2ViLmRlc2NyaXB0aW9uOjoKK2dpdHdlYi5vd25lcjo6CitnaXR3ZWIudXJsOjoKKwlTZWUgbGlua2dpdDpnaXR3ZWJbMV0gZm9yIGRlc2NyaXB0aW9uLgorCitnaXR3ZWIuYXZhdGFyOjoKK2dpdHdlYi5ibGFtZTo6CitnaXR3ZWIuZ3JlcDo6CitnaXR3ZWIuaGlnaGxpZ2h0OjoKK2dpdHdlYi5wYXRjaGVzOjoKK2dpdHdlYi5waWNrYXhlOjoKK2dpdHdlYi5yZW1vdGVfaGVhZHM6OgorZ2l0d2ViLnNob3dzaXplczo6CitnaXR3ZWIuc25hcHNob3Q6OgorCVNlZSBsaW5rZ2l0OmdpdHdlYi5jb25mWzVdIGZvciBkZXNjcmlwdGlvbi4KKworZ3JlcC5saW5lTnVtYmVyOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlICctbicgb3B0aW9uIGJ5IGRlZmF1bHQuCisKK2dyZXAucGF0dGVyblR5cGU6OgorCVNldCB0aGUgZGVmYXVsdCBtYXRjaGluZyBiZWhhdmlvci4gVXNpbmcgYSB2YWx1ZSBvZiAnYmFzaWMnLCAnZXh0ZW5kZWQnLAorCSdmaXhlZCcsIG9yICdwZXJsJyB3aWxsIGVuYWJsZSB0aGUgJy0tYmFzaWMtcmVnZXhwJywgJy0tZXh0ZW5kZWQtcmVnZXhwJywKKwknLS1maXhlZC1zdHJpbmdzJywgb3IgJy0tcGVybC1yZWdleHAnIG9wdGlvbiBhY2NvcmRpbmdseSwgd2hpbGUgdGhlCisJdmFsdWUgJ2RlZmF1bHQnIHdpbGwgcmV0dXJuIHRvIHRoZSBkZWZhdWx0IG1hdGNoaW5nIGJlaGF2aW9yLgorCitncmVwLmV4dGVuZGVkUmVnZXhwOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlICctLWV4dGVuZGVkLXJlZ2V4cCcgb3B0aW9uIGJ5IGRlZmF1bHQuIFRoaXMKKwlvcHRpb24gaXMgaWdub3JlZCB3aGVuIHRoZSAnZ3JlcC5wYXR0ZXJuVHlwZScgb3B0aW9uIGlzIHNldCB0byBhIHZhbHVlCisJb3RoZXIgdGhhbiAnZGVmYXVsdCcuCisKK2dwZy5wcm9ncmFtOjoKKwlVc2UgdGhpcyBjdXN0b20gcHJvZ3JhbSBpbnN0ZWFkIG9mICJncGciIGZvdW5kIG9uICRQQVRIIHdoZW4KKwltYWtpbmcgb3IgdmVyaWZ5aW5nIGEgUEdQIHNpZ25hdHVyZS4gVGhlIHByb2dyYW0gbXVzdCBzdXBwb3J0IHRoZQorCXNhbWUgY29tbWFuZCBsaW5lIGludGVyZmFjZSBhcyBHUEcsIG5hbWVseSwgdG8gdmVyaWZ5IGEgZGV0YWNoZWQKKwlzaWduYXR1cmUsICJncGcgLS12ZXJpZnkgJGZpbGUgLSA8JHNpZ25hdHVyZSIgaXMgcnVuLCBhbmQgdGhlCisJcHJvZ3JhbSBpcyBleHBlY3RlZCB0byBzaWduYWwgYSBnb29kIHNpZ25hdHVyZSBieSBleGl0aW5nIHdpdGgKKwljb2RlIDAsIGFuZCB0byBnZW5lcmF0ZSBhbiBhc2NpaS1hcm1vcmVkIGRldGFjaGVkIHNpZ25hdHVyZSwgdGhlCisJc3RhbmRhcmQgaW5wdXQgb2YgImdwZyAtYnNhdSAka2V5IiBpcyBmZWQgd2l0aCB0aGUgY29udGVudHMgdG8gYmUKKwlzaWduZWQsIGFuZCB0aGUgcHJvZ3JhbSBpcyBleHBlY3RlZCB0byBzZW5kIHRoZSByZXN1bHQgdG8gaXRzCisJc3RhbmRhcmQgb3V0cHV0LgorCitndWkuY29tbWl0bXNnd2lkdGg6OgorCURlZmluZXMgaG93IHdpZGUgdGhlIGNvbW1pdCBtZXNzYWdlIHdpbmRvdyBpcyBpbiB0aGUKKwlsaW5rZ2l0OmdpdC1ndWlbMV0uICI3NSIgaXMgdGhlIGRlZmF1bHQuCisKK2d1aS5kaWZmY29udGV4dDo6CisJU3BlY2lmaWVzIGhvdyBtYW55IGNvbnRleHQgbGluZXMgc2hvdWxkIGJlIHVzZWQgaW4gY2FsbHMgdG8gZGlmZgorCW1hZGUgYnkgdGhlIGxpbmtnaXQ6Z2l0LWd1aVsxXS4gVGhlIGRlZmF1bHQgaXMgIjUiLgorCitndWkuZW5jb2Rpbmc6OgorCVNwZWNpZmllcyB0aGUgZGVmYXVsdCBlbmNvZGluZyB0byB1c2UgZm9yIGRpc3BsYXlpbmcgb2YKKwlmaWxlIGNvbnRlbnRzIGluIGxpbmtnaXQ6Z2l0LWd1aVsxXSBhbmQgbGlua2dpdDpnaXRrWzFdLgorCUl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlICdlbmNvZGluZycgYXR0cmlidXRlCisJZm9yIHJlbGV2YW50IGZpbGVzIChzZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdKS4KKwlJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGUgdG9vbHMgZGVmYXVsdCB0byB0aGUKKwlsb2NhbGUgZW5jb2RpbmcuCisKK2d1aS5tYXRjaHRyYWNraW5nYnJhbmNoOjoKKwlEZXRlcm1pbmVzIGlmIG5ldyBicmFuY2hlcyBjcmVhdGVkIHdpdGggbGlua2dpdDpnaXQtZ3VpWzFdIHNob3VsZAorCWRlZmF1bHQgdG8gdHJhY2tpbmcgcmVtb3RlIGJyYW5jaGVzIHdpdGggbWF0Y2hpbmcgbmFtZXMgb3IKKwlub3QuIERlZmF1bHQ6ICJmYWxzZSIuCisKK2d1aS5uZXdicmFuY2h0ZW1wbGF0ZTo6CisJSXMgdXNlZCBhcyBzdWdnZXN0ZWQgbmFtZSB3aGVuIGNyZWF0aW5nIG5ldyBicmFuY2hlcyB1c2luZyB0aGUKKwlsaW5rZ2l0OmdpdC1ndWlbMV0uCisKK2d1aS5wcnVuZWR1cmluZ2ZldGNoOjoKKwkidHJ1ZSIgaWYgbGlua2dpdDpnaXQtZ3VpWzFdIHNob3VsZCBwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgd2hlbgorCXBlcmZvcm1pbmcgYSBmZXRjaC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgImZhbHNlIi4KKworZ3VpLnRydXN0bXRpbWU6OgorCURldGVybWluZXMgaWYgbGlua2dpdDpnaXQtZ3VpWzFdIHNob3VsZCB0cnVzdCB0aGUgZmlsZSBtb2RpZmljYXRpb24KKwl0aW1lc3RhbXAgb3Igbm90LiBCeSBkZWZhdWx0IHRoZSB0aW1lc3RhbXBzIGFyZSBub3QgdHJ1c3RlZC4KKworZ3VpLnNwZWxsaW5nZGljdGlvbmFyeTo6CisJU3BlY2lmaWVzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIHNwZWxsIGNoZWNraW5nIGNvbW1pdCBtZXNzYWdlcyBpbgorCXRoZSBsaW5rZ2l0OmdpdC1ndWlbMV0uIFdoZW4gc2V0IHRvICJub25lIiBzcGVsbCBjaGVja2luZyBpcyB0dXJuZWQKKwlvZmYuCisKK2d1aS5mYXN0Y29weWJsYW1lOjoKKwlJZiB0cnVlLCAnZ2l0IGd1aSBibGFtZScgdXNlcyBgLUNgIGluc3RlYWQgb2YgYC1DIC1DYCBmb3Igb3JpZ2luYWwKKwlsb2NhdGlvbiBkZXRlY3Rpb24uIEl0IG1ha2VzIGJsYW1lIHNpZ25pZmljYW50bHkgZmFzdGVyIG9uIGh1Z2UKKwlyZXBvc2l0b3JpZXMgYXQgdGhlIGV4cGVuc2Ugb2YgbGVzcyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4KKworZ3VpLmNvcHlibGFtZXRocmVzaG9sZDo6CisJU3BlY2lmaWVzIHRoZSB0aHJlc2hvbGQgdG8gdXNlIGluICdnaXQgZ3VpIGJsYW1lJyBvcmlnaW5hbCBsb2NhdGlvbgorCWRldGVjdGlvbiwgbWVhc3VyZWQgaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIFNlZSB0aGUKKwlsaW5rZ2l0OmdpdC1ibGFtZVsxXSBtYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29weSBkZXRlY3Rpb24uCisKK2d1aS5ibGFtZWhpc3RvcnljdHg6OgorCVNwZWNpZmllcyB0aGUgcmFkaXVzIG9mIGhpc3RvcnkgY29udGV4dCBpbiBkYXlzIHRvIHNob3cgaW4KKwlsaW5rZ2l0OmdpdGtbMV0gZm9yIHRoZSBzZWxlY3RlZCBjb21taXQsIHdoZW4gdGhlIGBTaG93IEhpc3RvcnkKKwlDb250ZXh0YCBtZW51IGl0ZW0gaXMgaW52b2tlZCBmcm9tICdnaXQgZ3VpIGJsYW1lJy4gSWYgdGhpcworCXZhcmlhYmxlIGlzIHNldCB0byB6ZXJvLCB0aGUgd2hvbGUgaGlzdG9yeSBpcyBzaG93bi4KKworZ3VpdG9vbC48bmFtZT4uY21kOjoKKwlTcGVjaWZpZXMgdGhlIHNoZWxsIGNvbW1hbmQgbGluZSB0byBleGVjdXRlIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgaXRlbQorCW9mIHRoZSBsaW5rZ2l0OmdpdC1ndWlbMV0gYFRvb2xzYCBtZW51IGlzIGludm9rZWQuIFRoaXMgb3B0aW9uIGlzCisJbWFuZGF0b3J5IGZvciBldmVyeSB0b29sLiBUaGUgY29tbWFuZCBpcyBleGVjdXRlZCBmcm9tIHRoZSByb290IG9mCisJdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgaW4gdGhlIGVudmlyb25tZW50IGl0IHJlY2VpdmVzIHRoZSBuYW1lIG9mCisJdGhlIHRvb2wgYXMgJ0dJVF9HVUlUT09MJywgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmaWxlIGFzCisJJ0ZJTEVOQU1FJywgYW5kIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBhcyAnQ1VSX0JSQU5DSCcgKGlmCisJdGhlIGhlYWQgaXMgZGV0YWNoZWQsICdDVVJfQlJBTkNIJyBpcyBlbXB0eSkuCisKK2d1aXRvb2wuPG5hbWU+Lm5lZWRzZmlsZTo6CisJUnVuIHRoZSB0b29sIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkIGluIHRoZSBHVUkuIEl0IGd1YXJhbnRlZXMKKwl0aGF0ICdGSUxFTkFNRScgaXMgbm90IGVtcHR5LgorCitndWl0b29sLjxuYW1lPi5ub2NvbnNvbGU6OgorCVJ1biB0aGUgY29tbWFuZCBzaWxlbnRseSwgd2l0aG91dCBjcmVhdGluZyBhIHdpbmRvdyB0byBkaXNwbGF5IGl0cworCW91dHB1dC4KKworZ3VpdG9vbC48bmFtZT4ubm9yZXNjYW46OgorCURvbid0IHJlc2NhbiB0aGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIGNoYW5nZXMgYWZ0ZXIgdGhlIHRvb2wKKwlmaW5pc2hlcyBleGVjdXRpb24uCisKK2d1aXRvb2wuPG5hbWU+LmNvbmZpcm06OgorCVNob3cgYSBjb25maXJtYXRpb24gZGlhbG9nIGJlZm9yZSBhY3R1YWxseSBydW5uaW5nIHRoZSB0b29sLgorCitndWl0b29sLjxuYW1lPi5hcmdwcm9tcHQ6OgorCVJlcXVlc3QgYSBzdHJpbmcgYXJndW1lbnQgZnJvbSB0aGUgdXNlciwgYW5kIHBhc3MgaXQgdG8gdGhlIHRvb2wKKwl0aHJvdWdoIHRoZSAnQVJHUycgZW52aXJvbm1lbnQgdmFyaWFibGUuIFNpbmNlIHJlcXVlc3RpbmcgYW4KKwlhcmd1bWVudCBpbXBsaWVzIGNvbmZpcm1hdGlvbiwgdGhlICdjb25maXJtJyBvcHRpb24gaGFzIG5vIGVmZmVjdAorCWlmIHRoaXMgaXMgZW5hYmxlZC4gSWYgdGhlIG9wdGlvbiBpcyBzZXQgdG8gJ3RydWUnLCAneWVzJywgb3IgJzEnLAorCXRoZSBkaWFsb2cgdXNlcyBhIGJ1aWx0LWluIGdlbmVyaWMgcHJvbXB0OyBvdGhlcndpc2UgdGhlIGV4YWN0CisJdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGlzIHVzZWQuCisKK2d1aXRvb2wuPG5hbWU+LnJldnByb21wdDo6CisJUmVxdWVzdCBhIHNpbmdsZSB2YWxpZCByZXZpc2lvbiBmcm9tIHRoZSB1c2VyLCBhbmQgc2V0IHRoZQorCSdSRVZJU0lPTicgZW52aXJvbm1lbnQgdmFyaWFibGUuIEluIG90aGVyIGFzcGVjdHMgdGhpcyBvcHRpb24KKwlpcyBzaW1pbGFyIHRvICdhcmdwcm9tcHQnLCBhbmQgY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBpdC4KKworZ3VpdG9vbC48bmFtZT4ucmV2dW5tZXJnZWQ6OgorCVNob3cgb25seSB1bm1lcmdlZCBicmFuY2hlcyBpbiB0aGUgJ3JldnByb21wdCcgc3ViZGlhbG9nLgorCVRoaXMgaXMgdXNlZnVsIGZvciB0b29scyBzaW1pbGFyIHRvIG1lcmdlIG9yIHJlYmFzZSwgYnV0IG5vdAorCWZvciB0aGluZ3MgbGlrZSBjaGVja291dCBvciByZXNldC4KKworZ3VpdG9vbC48bmFtZT4udGl0bGU6OgorCVNwZWNpZmllcyB0aGUgdGl0bGUgdG8gdXNlIGZvciB0aGUgcHJvbXB0IGRpYWxvZy4gVGhlIGRlZmF1bHQKKwlpcyB0aGUgdG9vbCBuYW1lLgorCitndWl0b29sLjxuYW1lPi5wcm9tcHQ6OgorCVNwZWNpZmllcyB0aGUgZ2VuZXJhbCBwcm9tcHQgc3RyaW5nIHRvIGRpc3BsYXkgYXQgdGhlIHRvcCBvZgorCXRoZSBkaWFsb2csIGJlZm9yZSBzdWJzZWN0aW9ucyBmb3IgJ2FyZ3Byb21wdCcgYW5kICdyZXZwcm9tcHQnLgorCVRoZSBkZWZhdWx0IHZhbHVlIGluY2x1ZGVzIHRoZSBhY3R1YWwgY29tbWFuZC4KKworaGVscC5icm93c2VyOjoKKwlTcGVjaWZ5IHRoZSBicm93c2VyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRpc3BsYXkgaGVscCBpbiB0aGUKKwknd2ViJyBmb3JtYXQuIFNlZSBsaW5rZ2l0OmdpdC1oZWxwWzFdLgorCitoZWxwLmZvcm1hdDo6CisJT3ZlcnJpZGUgdGhlIGRlZmF1bHQgaGVscCBmb3JtYXQgdXNlZCBieSBsaW5rZ2l0OmdpdC1oZWxwWzFdLgorCVZhbHVlcyAnbWFuJywgJ2luZm8nLCAnd2ViJyBhbmQgJ2h0bWwnIGFyZSBzdXBwb3J0ZWQuICdtYW4nIGlzCisJdGhlIGRlZmF1bHQuICd3ZWInIGFuZCAnaHRtbCcgYXJlIHRoZSBzYW1lLgorCitoZWxwLmF1dG9jb3JyZWN0OjoKKwlBdXRvbWF0aWNhbGx5IGNvcnJlY3QgYW5kIGV4ZWN1dGUgbWlzdHlwZWQgY29tbWFuZHMgYWZ0ZXIKKwl3YWl0aW5nIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2lzZWNvbmRzICgwLjEgc2VjKS4gSWYgbW9yZQorCXRoYW4gb25lIGNvbW1hbmQgY2FuIGJlIGRlZHVjZWQgZnJvbSB0aGUgZW50ZXJlZCB0ZXh0LCBub3RoaW5nCisJd2lsbCBiZSBleGVjdXRlZC4gIElmIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBpcyBuZWdhdGl2ZSwKKwl0aGUgY29ycmVjdGVkIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbW1lZGlhdGVseS4gSWYgdGhlCisJdmFsdWUgaXMgMCAtIHRoZSBjb21tYW5kIHdpbGwgYmUganVzdCBzaG93biBidXQgbm90IGV4ZWN1dGVkLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQuCisKK2h0dHAucHJveHk6OgorCU92ZXJyaWRlIHRoZSBIVFRQIHByb3h5LCBub3JtYWxseSBjb25maWd1cmVkIHVzaW5nIHRoZSAnaHR0cF9wcm94eScsCisJJ2h0dHBzX3Byb3h5JywgYW5kICdhbGxfcHJveHknIGVudmlyb25tZW50IHZhcmlhYmxlcyAoc2VlCisJYGN1cmwoMSlgKS4gIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gb24gYSBwZXItcmVtb3RlIGJhc2lzOyBzZWUKKwlyZW1vdGUuPG5hbWU+LnByb3h5CisKK2h0dHAuY29va2llZmlsZTo6CisJRmlsZSBjb250YWluaW5nIHByZXZpb3VzbHkgc3RvcmVkIGNvb2tpZSBsaW5lcyB3aGljaCBzaG91bGQgYmUgdXNlZAorCWluIHRoZSBnaXQgaHR0cCBzZXNzaW9uLCBpZiB0aGV5IG1hdGNoIHRoZSBzZXJ2ZXIuIFRoZSBmaWxlIGZvcm1hdAorCW9mIHRoZSBmaWxlIHRvIHJlYWQgY29va2llcyBmcm9tIHNob3VsZCBiZSBwbGFpbiBIVFRQIGhlYWRlcnMgb3IKKwl0aGUgTmV0c2NhcGUvTW96aWxsYSBjb29raWUgZmlsZSBmb3JtYXQgKHNlZSBsaW5rZ2l0OmN1cmxbMV0pLgorCU5PVEUgdGhhdCB0aGUgZmlsZSBzcGVjaWZpZWQgd2l0aCBodHRwLmNvb2tpZWZpbGUgaXMgb25seSB1c2VkIGFzCisJaW5wdXQuIE5vIGNvb2tpZXMgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGZpbGUuCisKK2h0dHAuc3NsVmVyaWZ5OjoKKwlXaGV0aGVyIHRvIHZlcmlmeSB0aGUgU1NMIGNlcnRpZmljYXRlIHdoZW4gZmV0Y2hpbmcgb3IgcHVzaGluZworCW92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX1NTTF9OT19WRVJJRlknIGVudmlyb25tZW50CisJdmFyaWFibGUuCisKK2h0dHAuc3NsQ2VydDo6CisJRmlsZSBjb250YWluaW5nIHRoZSBTU0wgY2VydGlmaWNhdGUgd2hlbiBmZXRjaGluZyBvciBwdXNoaW5nCisJb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfU1NMX0NFUlQnIGVudmlyb25tZW50CisJdmFyaWFibGUuCisKK2h0dHAuc3NsS2V5OjoKKwlGaWxlIGNvbnRhaW5pbmcgdGhlIFNTTCBwcml2YXRlIGtleSB3aGVuIGZldGNoaW5nIG9yIHB1c2hpbmcKKwlvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9TU0xfS0VZJyBlbnZpcm9ubWVudAorCXZhcmlhYmxlLgorCitodHRwLnNzbENlcnRQYXNzd29yZFByb3RlY3RlZDo6CisJRW5hYmxlIGdpdCdzIHBhc3N3b3JkIHByb21wdCBmb3IgdGhlIFNTTCBjZXJ0aWZpY2F0ZS4gIE90aGVyd2lzZQorCU9wZW5TU0wgd2lsbCBwcm9tcHQgdGhlIHVzZXIsIHBvc3NpYmx5IG1hbnkgdGltZXMsIGlmIHRoZQorCWNlcnRpZmljYXRlIG9yIHByaXZhdGUga2V5IGlzIGVuY3J5cHRlZC4gIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZQorCSdHSVRfU1NMX0NFUlRfUEFTU1dPUkRfUFJPVEVDVEVEJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworaHR0cC5zc2xDQUluZm86OgorCUZpbGUgY29udGFpbmluZyB0aGUgY2VydGlmaWNhdGVzIHRvIHZlcmlmeSB0aGUgcGVlciB3aXRoIHdoZW4KKwlmZXRjaGluZyBvciBwdXNoaW5nIG92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZQorCSdHSVRfU1NMX0NBSU5GTycgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK2h0dHAuc3NsQ0FQYXRoOjoKKwlQYXRoIGNvbnRhaW5pbmcgZmlsZXMgd2l0aCB0aGUgQ0EgY2VydGlmaWNhdGVzIHRvIHZlcmlmeSB0aGUgcGVlcgorCXdpdGggd2hlbiBmZXRjaGluZyBvciBwdXNoaW5nIG92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuCisJYnkgdGhlICdHSVRfU1NMX0NBUEFUSCcgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK2h0dHAubWF4UmVxdWVzdHM6OgorCUhvdyBtYW55IEhUVFAgcmVxdWVzdHMgdG8gbGF1bmNoIGluIHBhcmFsbGVsLiBDYW4gYmUgb3ZlcnJpZGRlbgorCWJ5IHRoZSAnR0lUX0hUVFBfTUFYX1JFUVVFU1RTJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gRGVmYXVsdCBpcyA1LgorCitodHRwLm1pblNlc3Npb25zOjoKKwlUaGUgbnVtYmVyIG9mIGN1cmwgc2Vzc2lvbnMgKGNvdW50ZWQgYWNyb3NzIHNsb3RzKSB0byBiZSBrZXB0IGFjcm9zcworCXJlcXVlc3RzLiBUaGV5IHdpbGwgbm90IGJlIGVuZGVkIHdpdGggY3VybF9lYXN5X2NsZWFudXAoKSB1bnRpbAorCWh0dHBfY2xlYW51cCgpIGlzIGludm9rZWQuIElmIFVTRV9DVVJMX01VTFRJIGlzIG5vdCBkZWZpbmVkLCB0aGlzCisJdmFsdWUgd2lsbCBiZSBjYXBwZWQgYXQgMS4gRGVmYXVsdHMgdG8gMS4KKworaHR0cC5wb3N0QnVmZmVyOjoKKwlNYXhpbXVtIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGJ1ZmZlciB1c2VkIGJ5IHNtYXJ0IEhUVFAKKwl0cmFuc3BvcnRzIHdoZW4gUE9TVGluZyBkYXRhIHRvIHRoZSByZW1vdGUgc3lzdGVtLgorCUZvciByZXF1ZXN0cyBsYXJnZXIgdGhhbiB0aGlzIGJ1ZmZlciBzaXplLCBIVFRQLzEuMSBhbmQKKwlUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCBpcyB1c2VkIHRvIGF2b2lkIGNyZWF0aW5nIGEKKwltYXNzaXZlIHBhY2sgZmlsZSBsb2NhbGx5LiAgRGVmYXVsdCBpcyAxIE1pQiwgd2hpY2ggaXMKKwlzdWZmaWNpZW50IGZvciBtb3N0IHJlcXVlc3RzLgorCitodHRwLmxvd1NwZWVkTGltaXQsIGh0dHAubG93U3BlZWRUaW1lOjoKKwlJZiB0aGUgSFRUUCB0cmFuc2ZlciBzcGVlZCBpcyBsZXNzIHRoYW4gJ2h0dHAubG93U3BlZWRMaW1pdCcKKwlmb3IgbG9uZ2VyIHRoYW4gJ2h0dHAubG93U3BlZWRUaW1lJyBzZWNvbmRzLCB0aGUgdHJhbnNmZXIgaXMgYWJvcnRlZC4KKwlDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9IVFRQX0xPV19TUEVFRF9MSU1JVCcgYW5kCisJJ0dJVF9IVFRQX0xPV19TUEVFRF9USU1FJyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKK2h0dHAubm9FUFNWOjoKKwlBIGJvb2xlYW4gd2hpY2ggZGlzYWJsZXMgdXNpbmcgb2YgRVBTViBmdHAgY29tbWFuZCBieSBjdXJsLgorCVRoaXMgY2FuIGhlbHBmdWwgd2l0aCBzb21lICJwb29yIiBmdHAgc2VydmVycyB3aGljaCBkb24ndAorCXN1cHBvcnQgRVBTViBtb2RlLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9DVVJMX0ZUUF9OT19FUFNWJworCWVudmlyb25tZW50IHZhcmlhYmxlLiBEZWZhdWx0IGlzIGZhbHNlIChjdXJsIHdpbGwgdXNlIEVQU1YpLgorCitodHRwLnVzZXJhZ2VudDo6CisJVGhlIEhUVFAgVVNFUl9BR0VOVCBzdHJpbmcgcHJlc2VudGVkIHRvIGFuIEhUVFAgc2VydmVyLiAgVGhlIGRlZmF1bHQKKwl2YWx1ZSByZXByZXNlbnRzIHRoZSB2ZXJzaW9uIG9mIHRoZSBjbGllbnQgZ2l0IHN1Y2ggYXMgZ2l0LzEuNy4xLgorCVRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhpcyB2YWx1ZSB0byBhIG1vcmUgY29tbW9uIHZhbHVlCisJc3VjaCBhcyBNb3ppbGxhLzQuMC4gIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSwgZm9yIGluc3RhbmNlLCBpZgorCWNvbm5lY3RpbmcgdGhyb3VnaCBhIGZpcmV3YWxsIHRoYXQgcmVzdHJpY3RzIEhUVFAgY29ubmVjdGlvbnMgdG8gYSBzZXQKKwlvZiBjb21tb24gVVNFUl9BR0VOVCBzdHJpbmdzIChidXQgbm90IGluY2x1ZGluZyB0aG9zZSBsaWtlIGdpdC8xLjcuMSkuCisJQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfSFRUUF9VU0VSX0FHRU5UJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworaTE4bi5jb21taXRFbmNvZGluZzo6CisJQ2hhcmFjdGVyIGVuY29kaW5nIHRoZSBjb21taXQgbWVzc2FnZXMgYXJlIHN0b3JlZCBpbjsgZ2l0IGl0c2VsZgorCWRvZXMgbm90IGNhcmUgcGVyIHNlLCBidXQgdGhpcyBpbmZvcm1hdGlvbiBpcyBuZWNlc3NhcnkgZS5nLiB3aGVuCisJaW1wb3J0aW5nIGNvbW1pdHMgZnJvbSBlbWFpbHMgb3IgaW4gdGhlIGdpdGsgZ3JhcGhpY2FsIGhpc3RvcnkKKwlicm93c2VyIChhbmQgcG9zc2libHkgYXQgb3RoZXIgcGxhY2VzIGluIHRoZSBmdXR1cmUgb3IgaW4gb3RoZXIKKwlwb3JjZWxhaW5zKS4gU2VlIGUuZy4gbGlua2dpdDpnaXQtbWFpbGluZm9bMV0uIERlZmF1bHRzIHRvICd1dGYtOCcuCisKK2kxOG4ubG9nT3V0cHV0RW5jb2Rpbmc6OgorCUNoYXJhY3RlciBlbmNvZGluZyB0aGUgY29tbWl0IG1lc3NhZ2VzIGFyZSBjb252ZXJ0ZWQgdG8gd2hlbgorCXJ1bm5pbmcgJ2dpdCBsb2cnIGFuZCBmcmllbmRzLgorCitpbWFwOjoKKwlUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaW4gdGhlICdpbWFwJyBzZWN0aW9uIGFyZSBkZXNjcmliZWQKKwlpbiBsaW5rZ2l0OmdpdC1pbWFwLXNlbmRbMV0uCisKK2luaXQudGVtcGxhdGVkaXI6OgorCVNwZWNpZnkgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIGNvcGllZC4KKwkoU2VlIHRoZSAiVEVNUExBVEUgRElSRUNUT1JZIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWluaXRbMV0uKQorCitpbnN0YXdlYi5icm93c2VyOjoKKwlTcGVjaWZ5IHRoZSBwcm9ncmFtIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGJyb3dzZSB5b3VyIHdvcmtpbmcKKwlyZXBvc2l0b3J5IGluIGdpdHdlYi4gU2VlIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdLgorCitpbnN0YXdlYi5odHRwZDo6CisJVGhlIEhUVFAgZGFlbW9uIGNvbW1hbmQtbGluZSB0byBzdGFydCBnaXR3ZWIgb24geW91ciB3b3JraW5nCisJcmVwb3NpdG9yeS4gU2VlIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdLgorCitpbnN0YXdlYi5sb2NhbDo6CisJSWYgdHJ1ZSB0aGUgd2ViIHNlcnZlciBzdGFydGVkIGJ5IGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdIHdpbGwKKwliZSBib3VuZCB0byB0aGUgbG9jYWwgSVAgKDEyNy4wLjAuMSkuCisKK2luc3Rhd2ViLm1vZHVsZXBhdGg6OgorCVRoZSBkZWZhdWx0IG1vZHVsZSBwYXRoIGZvciBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXSB0byB1c2UKKwlpbnN0ZWFkIG9mIC91c3IvbGliL2FwYWNoZTIvbW9kdWxlcy4gIE9ubHkgdXNlZCBpZiBodHRwZAorCWlzIEFwYWNoZS4KKworaW5zdGF3ZWIucG9ydDo6CisJVGhlIHBvcnQgbnVtYmVyIHRvIGJpbmQgdGhlIGdpdHdlYiBodHRwZCB0by4gU2VlCisJbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0uCisKK2ludGVyYWN0aXZlLnNpbmdsZWtleTo6CisJSW4gaW50ZXJhY3RpdmUgY29tbWFuZHMsIGFsbG93IHRoZSB1c2VyIHRvIHByb3ZpZGUgb25lLWxldHRlcgorCWlucHV0IHdpdGggYSBzaW5nbGUga2V5IChpLmUuLCB3aXRob3V0IGhpdHRpbmcgZW50ZXIpLgorCUN1cnJlbnRseSB0aGlzIGlzIHVzZWQgYnkgdGhlIGAtLXBhdGNoYCBtb2RlIG9mCisJbGlua2dpdDpnaXQtYWRkWzFdLCBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwgbGlua2dpdDpnaXQtY29tbWl0WzFdLAorCWxpbmtnaXQ6Z2l0LXJlc2V0WzFdLCBhbmQgbGlua2dpdDpnaXQtc3Rhc2hbMV0uIE5vdGUgdGhhdCB0aGlzCisJc2V0dGluZyBpcyBzaWxlbnRseSBpZ25vcmVkIGlmIHBvcnRhYmxlIGtleXN0cm9rZSBpbnB1dAorCWlzIG5vdCBhdmFpbGFibGUuCisKK2xvZy5hYmJyZXZDb21taXQ6OgorCUlmIHRydWUsIG1ha2VzIGxpbmtnaXQ6Z2l0LWxvZ1sxXSwgbGlua2dpdDpnaXQtc2hvd1sxXSwgYW5kCisJbGlua2dpdDpnaXQtd2hhdGNoYW5nZWRbMV0gYXNzdW1lIGAtLWFiYnJldi1jb21taXRgLiBZb3UgbWF5CisJb3ZlcnJpZGUgdGhpcyBvcHRpb24gd2l0aCBgLS1uby1hYmJyZXYtY29tbWl0YC4KKworbG9nLmRhdGU6OgorCVNldCB0aGUgZGVmYXVsdCBkYXRlLXRpbWUgbW9kZSBmb3IgdGhlICdsb2cnIGNvbW1hbmQuCisJU2V0dGluZyBhIHZhbHVlIGZvciBsb2cuZGF0ZSBpcyBzaW1pbGFyIHRvIHVzaW5nICdnaXQgbG9nJydzCisJYC0tZGF0ZWAgb3B0aW9uLiAgUG9zc2libGUgdmFsdWVzIGFyZSBgcmVsYXRpdmVgLCBgbG9jYWxgLAorCWBkZWZhdWx0YCwgYGlzb2AsIGByZmNgLCBhbmQgYHNob3J0YDsgc2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXQorCWZvciBkZXRhaWxzLgorCitsb2cuZGVjb3JhdGU6OgorCVByaW50IG91dCB0aGUgcmVmIG5hbWVzIG9mIGFueSBjb21taXRzIHRoYXQgYXJlIHNob3duIGJ5IHRoZSBsb2cKKwljb21tYW5kLiBJZiAnc2hvcnQnIGlzIHNwZWNpZmllZCwgdGhlIHJlZiBuYW1lIHByZWZpeGVzICdyZWZzL2hlYWRzLycsCisJJ3JlZnMvdGFncy8nIGFuZCAncmVmcy9yZW1vdGVzLycgd2lsbCBub3QgYmUgcHJpbnRlZC4gSWYgJ2Z1bGwnIGlzCisJc3BlY2lmaWVkLCB0aGUgZnVsbCByZWYgbmFtZSAoaW5jbHVkaW5nIHByZWZpeCkgd2lsbCBiZSBwcmludGVkLgorCVRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGxvZyBjb21tYW5kcyAnLS1kZWNvcmF0ZScgb3B0aW9uLgorCitsb2cuc2hvd3Jvb3Q6OgorCUlmIHRydWUsIHRoZSBpbml0aWFsIGNvbW1pdCB3aWxsIGJlIHNob3duIGFzIGEgYmlnIGNyZWF0aW9uIGV2ZW50LgorCVRoaXMgaXMgZXF1aXZhbGVudCB0byBhIGRpZmYgYWdhaW5zdCBhbiBlbXB0eSB0cmVlLgorCVRvb2xzIGxpa2UgbGlua2dpdDpnaXQtbG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LXdoYXRjaGFuZ2VkWzFdLCB3aGljaAorCW5vcm1hbGx5IGhpZGUgdGhlIHJvb3QgY29tbWl0IHdpbGwgbm93IHNob3cgaXQuIFRydWUgYnkgZGVmYXVsdC4KKworbWFpbG1hcC5maWxlOjoKKwlUaGUgbG9jYXRpb24gb2YgYW4gYXVnbWVudGluZyBtYWlsbWFwIGZpbGUuIFRoZSBkZWZhdWx0CisJbWFpbG1hcCwgbG9jYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgcmVwb3NpdG9yeSwgaXMgbG9hZGVkCisJZmlyc3QsIHRoZW4gdGhlIG1haWxtYXAgZmlsZSBwb2ludGVkIHRvIGJ5IHRoaXMgdmFyaWFibGUuCisJVGhlIGxvY2F0aW9uIG9mIHRoZSBtYWlsbWFwIGZpbGUgbWF5IGJlIGluIGEgcmVwb3NpdG9yeQorCXN1YmRpcmVjdG9yeSwgb3Igc29tZXdoZXJlIG91dHNpZGUgb2YgdGhlIHJlcG9zaXRvcnkgaXRzZWxmLgorCVNlZSBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBhbmQgbGlua2dpdDpnaXQtYmxhbWVbMV0uCisKK21hbi52aWV3ZXI6OgorCVNwZWNpZnkgdGhlIHByb2dyYW1zIHRoYXQgbWF5IGJlIHVzZWQgdG8gZGlzcGxheSBoZWxwIGluIHRoZQorCSdtYW4nIGZvcm1hdC4gU2VlIGxpbmtnaXQ6Z2l0LWhlbHBbMV0uCisKK21hbi48dG9vbD4uY21kOjoKKwlTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGludm9rZSB0aGUgc3BlY2lmaWVkIG1hbiB2aWV3ZXIuIFRoZQorCXNwZWNpZmllZCBjb21tYW5kIGlzIGV2YWx1YXRlZCBpbiBzaGVsbCB3aXRoIHRoZSBtYW4gcGFnZQorCXBhc3NlZCBhcyBhcmd1bWVudC4gKFNlZSBsaW5rZ2l0OmdpdC1oZWxwWzFdLikKKworbWFuLjx0b29sPi5wYXRoOjoKKwlPdmVycmlkZSB0aGUgcGF0aCBmb3IgdGhlIGdpdmVuIHRvb2wgdGhhdCBtYXkgYmUgdXNlZCB0bworCWRpc3BsYXkgaGVscCBpbiB0aGUgJ21hbicgZm9ybWF0LiBTZWUgbGlua2dpdDpnaXQtaGVscFsxXS4KKworaW5jbHVkZTo6bWVyZ2UtY29uZmlnLnR4dFtdCisKK21lcmdldG9vbC48dG9vbD4ucGF0aDo6CisJT3ZlcnJpZGUgdGhlIHBhdGggZm9yIHRoZSBnaXZlbiB0b29sLiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZQorCXlvdXIgdG9vbCBpcyBub3QgaW4gdGhlIFBBVEguCisKK21lcmdldG9vbC48dG9vbD4uY21kOjoKKwlTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGludm9rZSB0aGUgc3BlY2lmaWVkIG1lcmdlIHRvb2wuICBUaGUKKwlzcGVjaWZpZWQgY29tbWFuZCBpcyBldmFsdWF0ZWQgaW4gc2hlbGwgd2l0aCB0aGUgZm9sbG93aW5nCisJdmFyaWFibGVzIGF2YWlsYWJsZTogJ0JBU0UnIGlzIHRoZSBuYW1lIG9mIGEgdGVtcG9yYXJ5IGZpbGUKKwljb250YWluaW5nIHRoZSBjb21tb24gYmFzZSBvZiB0aGUgZmlsZXMgdG8gYmUgbWVyZ2VkLCBpZiBhdmFpbGFibGU7CisJJ0xPQ0FMJyBpcyB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mCisJdGhlIGZpbGUgb24gdGhlIGN1cnJlbnQgYnJhbmNoOyAnUkVNT1RFJyBpcyB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeQorCWZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgZnJvbSB0aGUgYnJhbmNoIGJlaW5nCisJbWVyZ2VkOyAnTUVSR0VEJyBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byB3aGljaCB0aGUgbWVyZ2UKKwl0b29sIHNob3VsZCB3cml0ZSB0aGUgcmVzdWx0cyBvZiBhIHN1Y2Nlc3NmdWwgbWVyZ2UuCisKK21lcmdldG9vbC48dG9vbD4udHJ1c3RFeGl0Q29kZTo6CisJRm9yIGEgY3VzdG9tIG1lcmdlIGNvbW1hbmQsIHNwZWNpZnkgd2hldGhlciB0aGUgZXhpdCBjb2RlIG9mCisJdGhlIG1lcmdlIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG1lcmdlIHdhcworCXN1Y2Nlc3NmdWwuICBJZiB0aGlzIGlzIG5vdCBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBtZXJnZSB0YXJnZXQgZmlsZQorCXRpbWVzdGFtcCBpcyBjaGVja2VkIGFuZCB0aGUgbWVyZ2UgYXNzdW1lZCB0byBoYXZlIGJlZW4gc3VjY2Vzc2Z1bAorCWlmIHRoZSBmaWxlIGhhcyBiZWVuIHVwZGF0ZWQsIG90aGVyd2lzZSB0aGUgdXNlciBpcyBwcm9tcHRlZCB0bworCWluZGljYXRlIHRoZSBzdWNjZXNzIG9mIHRoZSBtZXJnZS4KKworbWVyZ2V0b29sLmtlZXBCYWNrdXA6OgorCUFmdGVyIHBlcmZvcm1pbmcgYSBtZXJnZSwgdGhlIG9yaWdpbmFsIGZpbGUgd2l0aCBjb25mbGljdCBtYXJrZXJzCisJY2FuIGJlIHNhdmVkIGFzIGEgZmlsZSB3aXRoIGEgYC5vcmlnYCBleHRlbnNpb24uICBJZiB0aGlzIHZhcmlhYmxlCisJaXMgc2V0IHRvIGBmYWxzZWAgdGhlbiB0aGlzIGZpbGUgaXMgbm90IHByZXNlcnZlZC4gIERlZmF1bHRzIHRvCisJYHRydWVgIChpLmUuIGtlZXAgdGhlIGJhY2t1cCBmaWxlcykuCisKK21lcmdldG9vbC5rZWVwVGVtcG9yYXJpZXM6OgorCVdoZW4gaW52b2tpbmcgYSBjdXN0b20gbWVyZ2UgdG9vbCwgZ2l0IHVzZXMgYSBzZXQgb2YgdGVtcG9yYXJ5CisJZmlsZXMgdG8gcGFzcyB0byB0aGUgdG9vbC4gSWYgdGhlIHRvb2wgcmV0dXJucyBhbiBlcnJvciBhbmQgdGhpcworCXZhcmlhYmxlIGlzIHNldCB0byBgdHJ1ZWAsIHRoZW4gdGhlc2UgdGVtcG9yYXJ5IGZpbGVzIHdpbGwgYmUKKwlwcmVzZXJ2ZWQsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciB0aGUgdG9vbCBoYXMKKwlleGl0ZWQuIERlZmF1bHRzIHRvIGBmYWxzZWAuCisKK21lcmdldG9vbC5wcm9tcHQ6OgorCVByb21wdCBiZWZvcmUgZWFjaCBpbnZvY2F0aW9uIG9mIHRoZSBtZXJnZSByZXNvbHV0aW9uIHByb2dyYW0uCisKK25vdGVzLmRpc3BsYXlSZWY6OgorCVRoZSAoZnVsbHkgcXVhbGlmaWVkKSByZWZuYW1lIGZyb20gd2hpY2ggdG8gc2hvdyBub3RlcyB3aGVuCisJc2hvd2luZyBjb21taXQgbWVzc2FnZXMuICBUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBjYW4gYmUgc2V0CisJdG8gYSBnbG9iLCBpbiB3aGljaCBjYXNlIG5vdGVzIGZyb20gYWxsIG1hdGNoaW5nIHJlZnMgd2lsbCBiZQorCXNob3duLiAgWW91IG1heSBhbHNvIHNwZWNpZnkgdGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisJc2V2ZXJhbCB0aW1lcy4gIEEgd2FybmluZyB3aWxsIGJlIGlzc3VlZCBmb3IgcmVmcyB0aGF0IGRvIG5vdAorCWV4aXN0LCBidXQgYSBnbG9iIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55IHJlZnMgaXMgc2lsZW50bHkKKwlpZ25vcmVkLgorKworVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGBHSVRfTk9URVNfRElTUExBWV9SRUZgCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hpY2ggbXVzdCBiZSBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHJlZnMgb3IKK2dsb2JzLgorKworVGhlIGVmZmVjdGl2ZSB2YWx1ZSBvZiAiY29yZS5ub3Rlc1JlZiIgKHBvc3NpYmx5IG92ZXJyaWRkZW4gYnkKK0dJVF9OT1RFU19SRUYpIGlzIGFsc28gaW1wbGljaXRseSBhZGRlZCB0byB0aGUgbGlzdCBvZiByZWZzIHRvIGJlCitkaXNwbGF5ZWQuCisKK25vdGVzLnJld3JpdGUuPGNvbW1hbmQ+OjoKKwlXaGVuIHJld3JpdGluZyBjb21taXRzIHdpdGggPGNvbW1hbmQ+IChjdXJyZW50bHkgYGFtZW5kYCBvcgorCWByZWJhc2VgKSBhbmQgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gYHRydWVgLCBnaXQKKwlhdXRvbWF0aWNhbGx5IGNvcGllcyB5b3VyIG5vdGVzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZQorCXJld3JpdHRlbiBjb21taXQuICBEZWZhdWx0cyB0byBgdHJ1ZWAsIGJ1dCBzZWUKKwkibm90ZXMucmV3cml0ZVJlZiIgYmVsb3cuCisKK25vdGVzLnJld3JpdGVNb2RlOjoKKwlXaGVuIGNvcHlpbmcgbm90ZXMgZHVyaW5nIGEgcmV3cml0ZSAoc2VlIHRoZQorCSJub3Rlcy5yZXdyaXRlLjxjb21tYW5kPiIgb3B0aW9uKSwgZGV0ZXJtaW5lcyB3aGF0IHRvIGRvIGlmCisJdGhlIHRhcmdldCBjb21taXQgYWxyZWFkeSBoYXMgYSBub3RlLiAgTXVzdCBiZSBvbmUgb2YKKwlgb3ZlcndyaXRlYCwgYGNvbmNhdGVuYXRlYCwgb3IgYGlnbm9yZWAuICBEZWZhdWx0cyB0bworCWBjb25jYXRlbmF0ZWAuCisrCitUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYEdJVF9OT1RFU19SRVdSSVRFX01PREVgCitlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworbm90ZXMucmV3cml0ZVJlZjo6CisJV2hlbiBjb3B5aW5nIG5vdGVzIGR1cmluZyBhIHJld3JpdGUsIHNwZWNpZmllcyB0aGUgKGZ1bGx5CisJcXVhbGlmaWVkKSByZWYgd2hvc2Ugbm90ZXMgc2hvdWxkIGJlIGNvcGllZC4gIFRoZSByZWYgbWF5IGJlIGEKKwlnbG9iLCBpbiB3aGljaCBjYXNlIG5vdGVzIGluIGFsbCBtYXRjaGluZyByZWZzIHdpbGwgYmUgY29waWVkLgorCVlvdSBtYXkgYWxzbyBzcGVjaWZ5IHRoaXMgY29uZmlndXJhdGlvbiBzZXZlcmFsIHRpbWVzLgorKworRG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWU7IHlvdSBtdXN0IGNvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIHRvCitlbmFibGUgbm90ZSByZXdyaXRpbmcuICBTZXQgaXQgdG8gYHJlZnMvbm90ZXMvY29tbWl0c2AgdG8gZW5hYmxlCityZXdyaXRpbmcgZm9yIHRoZSBkZWZhdWx0IGNvbW1pdCBub3Rlcy4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgR0lUX05PVEVTX1JFV1JJVEVfUkVGYAorZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoaWNoIG11c3QgYmUgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiByZWZzIG9yCitnbG9icy4KKworcGFjay53aW5kb3c6OgorCVRoZSBzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCBieSBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0gd2hlbiBubworCXdpbmRvdyBzaXplIGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuIERlZmF1bHRzIHRvIDEwLgorCitwYWNrLmRlcHRoOjoKKwlUaGUgbWF4aW11bSBkZWx0YSBkZXB0aCB1c2VkIGJ5IGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSB3aGVuIG5vCisJbWF4aW11bSBkZXB0aCBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiBEZWZhdWx0cyB0byA1MC4KKworcGFjay53aW5kb3dNZW1vcnk6OgorCVRoZSB3aW5kb3cgbWVtb3J5IHNpemUgbGltaXQgdXNlZCBieSBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0KKwl3aGVuIG5vIGxpbWl0IGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGUgdmFsdWUgY2FuIGJlCisJc3VmZml4ZWQgd2l0aCAiayIsICJtIiwgb3IgImciLiAgRGVmYXVsdHMgdG8gMCwgbWVhbmluZyBubworCWxpbWl0LgorCitwYWNrLmNvbXByZXNzaW9uOjoKKwlBbiBpbnRlZ2VyIC0xLi45LCBpbmRpY2F0aW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBmb3Igb2JqZWN0cworCWluIGEgcGFjayBmaWxlLiAtMSBpcyB0aGUgemxpYiBkZWZhdWx0LiAwIG1lYW5zIG5vCisJY29tcHJlc3Npb24sIGFuZCAxLi45IGFyZSB2YXJpb3VzIHNwZWVkL3NpemUgdHJhZGVvZmZzLCA5IGJlaW5nCisJc2xvd2VzdC4gIElmIG5vdCBzZXQsICBkZWZhdWx0cyB0byBjb3JlLmNvbXByZXNzaW9uLiAgSWYgdGhhdCBpcworCW5vdCBzZXQsICBkZWZhdWx0cyB0byAtMSwgdGhlIHpsaWIgZGVmYXVsdCwgd2hpY2ggaXMgImEgZGVmYXVsdAorCWNvbXByb21pc2UgYmV0d2VlbiBzcGVlZCBhbmQgY29tcHJlc3Npb24gKGN1cnJlbnRseSBlcXVpdmFsZW50CisJdG8gbGV2ZWwgNikuIgorKworTm90ZSB0aGF0IGNoYW5naW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHJlY29tcHJlc3MKK2FsbCBleGlzdGluZyBvYmplY3RzLiBZb3UgY2FuIGZvcmNlIHJlY29tcHJlc3Npb24gYnkgcGFzc2luZyB0aGUgLUYgb3B0aW9uCit0byBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0uCisKK3BhY2suZGVsdGFDYWNoZVNpemU6OgorCVRoZSBtYXhpbXVtIG1lbW9yeSBpbiBieXRlcyB1c2VkIGZvciBjYWNoaW5nIGRlbHRhcyBpbgorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSBiZWZvcmUgd3JpdGluZyB0aGVtIG91dCB0byBhIHBhY2suCisJVGhpcyBjYWNoZSBpcyB1c2VkIHRvIHNwZWVkIHVwIHRoZSB3cml0aW5nIG9iamVjdCBwaGFzZSBieSBub3QKKwloYXZpbmcgdG8gcmVjb21wdXRlIHRoZSBmaW5hbCBkZWx0YSByZXN1bHQgb25jZSB0aGUgYmVzdCBtYXRjaAorCWZvciBhbGwgb2JqZWN0cyBpcyBmb3VuZC4gIFJlcGFja2luZyBsYXJnZSByZXBvc2l0b3JpZXMgb24gbWFjaGluZXMKKwl3aGljaCBhcmUgdGlnaHQgd2l0aCBtZW1vcnkgbWlnaHQgYmUgYmFkbHkgaW1wYWN0ZWQgYnkgdGhpcyB0aG91Z2gsCisJZXNwZWNpYWxseSBpZiB0aGlzIGNhY2hlIHB1c2hlcyB0aGUgc3lzdGVtIGludG8gc3dhcHBpbmcuCisJQSB2YWx1ZSBvZiAwIG1lYW5zIG5vIGxpbWl0LiBUaGUgc21hbGxlc3Qgc2l6ZSBvZiAxIGJ5dGUgbWF5IGJlCisJdXNlZCB0byB2aXJ0dWFsbHkgZGlzYWJsZSB0aGlzIGNhY2hlLiBEZWZhdWx0cyB0byAyNTYgTWlCLgorCitwYWNrLmRlbHRhQ2FjaGVMaW1pdDo6CisJVGhlIG1heGltdW0gc2l6ZSBvZiBhIGRlbHRhLCB0aGF0IGlzIGNhY2hlZCBpbgorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4gVGhpcyBjYWNoZSBpcyB1c2VkIHRvIHNwZWVkIHVwIHRoZQorCXdyaXRpbmcgb2JqZWN0IHBoYXNlIGJ5IG5vdCBoYXZpbmcgdG8gcmVjb21wdXRlIHRoZSBmaW5hbCBkZWx0YQorCXJlc3VsdCBvbmNlIHRoZSBiZXN0IG1hdGNoIGZvciBhbGwgb2JqZWN0cyBpcyBmb3VuZC4gRGVmYXVsdHMgdG8gMTAwMC4KKworcGFjay50aHJlYWRzOjoKKwlTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHNwYXduIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0CisJZGVsdGEgbWF0Y2hlcy4gIFRoaXMgcmVxdWlyZXMgdGhhdCBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0KKwliZSBjb21waWxlZCB3aXRoIHB0aHJlYWRzIG90aGVyd2lzZSB0aGlzIG9wdGlvbiBpcyBpZ25vcmVkIHdpdGggYQorCXdhcm5pbmcuIFRoaXMgaXMgbWVhbnQgdG8gcmVkdWNlIHBhY2tpbmcgdGltZSBvbiBtdWx0aXByb2Nlc3NvcgorCW1hY2hpbmVzLiBUaGUgcmVxdWlyZWQgYW1vdW50IG9mIG1lbW9yeSBmb3IgdGhlIGRlbHRhIHNlYXJjaCB3aW5kb3cKKwlpcyBob3dldmVyIG11bHRpcGxpZWQgYnkgdGhlIG51bWJlciBvZiB0aHJlYWRzLgorCVNwZWNpZnlpbmcgMCB3aWxsIGNhdXNlIGdpdCB0byBhdXRvLWRldGVjdCB0aGUgbnVtYmVyIG9mIENQVSdzCisJYW5kIHNldCB0aGUgbnVtYmVyIG9mIHRocmVhZHMgYWNjb3JkaW5nbHkuCisKK3BhY2suaW5kZXhWZXJzaW9uOjoKKwlTcGVjaWZ5IHRoZSBkZWZhdWx0IHBhY2sgaW5kZXggdmVyc2lvbi4gIFZhbGlkIHZhbHVlcyBhcmUgMSBmb3IKKwlsZWdhY3kgcGFjayBpbmRleCB1c2VkIGJ5IEdpdCB2ZXJzaW9ucyBwcmlvciB0byAxLjUuMiwgYW5kIDIgZm9yCisJdGhlIG5ldyBwYWNrIGluZGV4IHdpdGggY2FwYWJpbGl0aWVzIGZvciBwYWNrcyBsYXJnZXIgdGhhbiA0IEdCCisJYXMgd2VsbCBhcyBwcm9wZXIgcHJvdGVjdGlvbiBhZ2FpbnN0IHRoZSByZXBhY2tpbmcgb2YgY29ycnVwdGVkCisJcGFja3MuICBWZXJzaW9uIDIgaXMgdGhlIGRlZmF1bHQuICBOb3RlIHRoYXQgdmVyc2lvbiAyIGlzIGVuZm9yY2VkCisJYW5kIHRoaXMgY29uZmlnIG9wdGlvbiBpZ25vcmVkIHdoZW5ldmVyIHRoZSBjb3JyZXNwb25kaW5nIHBhY2sgaXMKKwlsYXJnZXIgdGhhbiAyIEdCLgorKworSWYgeW91IGhhdmUgYW4gb2xkIGdpdCB0aGF0IGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIHZlcnNpb24gMiBgKi5pZHhgIGZpbGUsCitjbG9uaW5nIG9yIGZldGNoaW5nIG92ZXIgYSBub24gbmF0aXZlIHByb3RvY29sIChlLmcuICJodHRwIiBhbmQgInJzeW5jIikKK3RoYXQgd2lsbCBjb3B5IGJvdGggYCoucGFja2AgZmlsZSBhbmQgY29ycmVzcG9uZGluZyBgKi5pZHhgIGZpbGUgZnJvbSB0aGUKK290aGVyIHNpZGUgbWF5IGdpdmUgeW91IGEgcmVwb3NpdG9yeSB0aGF0IGNhbm5vdCBiZSBhY2Nlc3NlZCB3aXRoIHlvdXIKK29sZGVyIHZlcnNpb24gb2YgZ2l0LiBJZiB0aGUgYCoucGFja2AgZmlsZSBpcyBzbWFsbGVyIHRoYW4gMiBHQiwgaG93ZXZlciwKK3lvdSBjYW4gdXNlIGxpbmtnaXQ6Z2l0LWluZGV4LXBhY2tbMV0gb24gdGhlICoucGFjayBmaWxlIHRvIHJlZ2VuZXJhdGUKK3RoZSBgKi5pZHhgIGZpbGUuCisKK3BhY2sucGFja1NpemVMaW1pdDo6CisJVGhlIG1heGltdW0gc2l6ZSBvZiBhIHBhY2suICBUaGlzIHNldHRpbmcgb25seSBhZmZlY3RzCisJcGFja2luZyB0byBhIGZpbGUgd2hlbiByZXBhY2tpbmcsIGkuZS4gdGhlIGdpdDovLyBwcm90b2NvbAorCWlzIHVuYWZmZWN0ZWQuICBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYC0tbWF4LXBhY2stc2l6ZWAKKwlvcHRpb24gb2YgbGlua2dpdDpnaXQtcmVwYWNrWzFdLiBUaGUgbWluaW11bSBzaXplIGFsbG93ZWQgaXMKKwlsaW1pdGVkIHRvIDEgTWlCLiBUaGUgZGVmYXVsdCBpcyB1bmxpbWl0ZWQuCisJQ29tbW9uIHVuaXQgc3VmZml4ZXMgb2YgJ2snLCAnbScsIG9yICdnJyBhcmUKKwlzdXBwb3J0ZWQuCisKK3BhZ2VyLjxjbWQ+OjoKKwlJZiB0aGUgdmFsdWUgaXMgYm9vbGVhbiwgdHVybnMgb24gb3Igb2ZmIHBhZ2luYXRpb24gb2YgdGhlCisJb3V0cHV0IG9mIGEgcGFydGljdWxhciBnaXQgc3ViY29tbWFuZCB3aGVuIHdyaXRpbmcgdG8gYSB0dHkuCisJT3RoZXJ3aXNlLCB0dXJucyBvbiBwYWdpbmF0aW9uIGZvciB0aGUgc3ViY29tbWFuZCB1c2luZyB0aGUKKwlwYWdlciBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlIG9mIGBwYWdlci48Y21kPmAuICBJZiBgLS1wYWdpbmF0ZWAKKwlvciBgLS1uby1wYWdlcmAgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0IHRha2VzCisJcHJlY2VkZW5jZSBvdmVyIHRoaXMgb3B0aW9uLiAgVG8gZGlzYWJsZSBwYWdpbmF0aW9uIGZvciBhbGwKKwljb21tYW5kcywgc2V0IGBjb3JlLnBhZ2VyYCBvciBgR0lUX1BBR0VSYCB0byBgY2F0YC4KKworcHJldHR5LjxuYW1lPjo6CisJQWxpYXMgZm9yIGEgLS1wcmV0dHk9IGZvcm1hdCBzdHJpbmcsIGFzIHNwZWNpZmllZCBpbgorCWxpbmtnaXQ6Z2l0LWxvZ1sxXS4gQW55IGFsaWFzZXMgZGVmaW5lZCBoZXJlIGNhbiBiZSB1c2VkIGp1c3QKKwlhcyB0aGUgYnVpbHQtaW4gcHJldHR5IGZvcm1hdHMgY291bGQuIEZvciBleGFtcGxlLAorCXJ1bm5pbmcgYGdpdCBjb25maWcgcHJldHR5LmNoYW5nZWxvZyAiZm9ybWF0OiogJUggJXMiYAorCXdvdWxkIGNhdXNlIHRoZSBpbnZvY2F0aW9uIGBnaXQgbG9nIC0tcHJldHR5PWNoYW5nZWxvZ2AKKwl0byBiZSBlcXVpdmFsZW50IHRvIHJ1bm5pbmcgYGdpdCBsb2cgIi0tcHJldHR5PWZvcm1hdDoqICVIICVzImAuCisJTm90ZSB0aGF0IGFuIGFsaWFzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhIGJ1aWx0LWluIGZvcm1hdAorCXdpbGwgYmUgc2lsZW50bHkgaWdub3JlZC4KKworcHVsbC5yZWJhc2U6OgorCVdoZW4gdHJ1ZSwgcmViYXNlIGJyYW5jaGVzIG9uIHRvcCBvZiB0aGUgZmV0Y2hlZCBicmFuY2gsIGluc3RlYWQKKwlvZiBtZXJnaW5nIHRoZSBkZWZhdWx0IGJyYW5jaCBmcm9tIHRoZSBkZWZhdWx0IHJlbW90ZSB3aGVuICJnaXQKKwlwdWxsIiBpcyBydW4uIFNlZSAiYnJhbmNoLjxuYW1lPi5yZWJhc2UiIGZvciBzZXR0aW5nIHRoaXMgb24gYQorCXBlci1icmFuY2ggYmFzaXMuCisrCisqTk9URSo6IHRoaXMgaXMgYSBwb3NzaWJseSBkYW5nZXJvdXMgb3BlcmF0aW9uOyBkbyAqbm90KiB1c2UKK2l0IHVubGVzcyB5b3UgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIChzZWUgbGlua2dpdDpnaXQtcmViYXNlWzFdCitmb3IgZGV0YWlscykuCisKK3B1bGwub2N0b3B1czo6CisJVGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIHdoZW4gcHVsbGluZyBtdWx0aXBsZSBicmFuY2hlcworCWF0IG9uY2UuCisKK3B1bGwudHdvaGVhZDo6CisJVGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIHdoZW4gcHVsbGluZyBhIHNpbmdsZSBicmFuY2guCisKK3B1c2guZGVmYXVsdDo6CisJRGVmaW5lcyB0aGUgYWN0aW9uIGdpdCBwdXNoIHNob3VsZCB0YWtlIGlmIG5vIHJlZnNwZWMgaXMgZ2l2ZW4KKwlvbiB0aGUgY29tbWFuZCBsaW5lLCBubyByZWZzcGVjIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIHJlbW90ZSwgYW5kCisJbm8gcmVmc3BlYyBpcyBpbXBsaWVkIGJ5IGFueSBvZiB0aGUgb3B0aW9ucyBnaXZlbiBvbiB0aGUgY29tbWFuZAorCWxpbmUuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisrCistLQorKiBgbm90aGluZ2AgLSBkbyBub3QgcHVzaCBhbnl0aGluZy4KKyogYG1hdGNoaW5nYCAtIHB1c2ggYWxsIGJyYW5jaGVzIGhhdmluZyB0aGUgc2FtZSBuYW1lIGluIGJvdGggZW5kcy4KKyAgVGhpcyBpcyBmb3IgdGhvc2Ugd2hvIHByZXBhcmUgYWxsIHRoZSBicmFuY2hlcyBpbnRvIGEgcHVibGlzaGFibGUKKyAgc2hhcGUgYW5kIHRoZW4gcHVzaCB0aGVtIG91dCB3aXRoIGEgc2luZ2xlIGNvbW1hbmQuICBJdCBpcyBub3QKKyAgYXBwcm9wcmlhdGUgZm9yIHB1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgc2hhcmVkIGJ5IG11bHRpcGxlIHVzZXJzLAorICBzaW5jZSBsb2NhbGx5IHN0YWxsZWQgYnJhbmNoZXMgd2lsbCBhdHRlbXB0IGEgbm9uLWZhc3QgZm9yd2FyZCBwdXNoCisgIGlmIG90aGVyIHVzZXJzIHVwZGF0ZWQgdGhlIGJyYW5jaC4KKyAgKworICBUaGlzIGlzIGN1cnJlbnRseSB0aGUgZGVmYXVsdCwgYnV0IEdpdCAyLjAgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHQKKyAgdG8gYHNpbXBsZWAuCisqIGB1cHN0cmVhbWAgLSBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCB0byBpdHMgdXBzdHJlYW0gYnJhbmNoLgorICBXaXRoIHRoaXMsIGBnaXQgcHVzaGAgd2lsbCB1cGRhdGUgdGhlIHNhbWUgcmVtb3RlIHJlZiBhcyB0aGUgb25lIHdoaWNoCisgIGlzIG1lcmdlZCBieSBgZ2l0IHB1bGxgLCBtYWtpbmcgYHB1c2hgIGFuZCBgcHVsbGAgc3ltbWV0cmljYWwuCisgIFNlZSAiYnJhbmNoLjxuYW1lPi5tZXJnZSIgZm9yIGhvdyB0byBjb25maWd1cmUgdGhlIHVwc3RyZWFtIGJyYW5jaC4KKyogYHNpbXBsZWAgLSBsaWtlIGB1cHN0cmVhbWAsIGJ1dCByZWZ1c2VzIHRvIHB1c2ggaWYgdGhlIHVwc3RyZWFtCisgIGJyYW5jaCdzIG5hbWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxvY2FsIG9uZS4gVGhpcyBpcyB0aGUgc2FmZXN0CisgIG9wdGlvbiBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIGJlZ2lubmVycy4gSXQgd2lsbCBiZWNvbWUgdGhlIGRlZmF1bHQKKyAgaW4gR2l0IDIuMC4KKyogYGN1cnJlbnRgIC0gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggdG8gYSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZS4KKy0tCisrCitUaGUgYHNpbXBsZWAsIGBjdXJyZW50YCBhbmQgYHVwc3RyZWFtYCBtb2RlcyBhcmUgZm9yIHRob3NlIHdobyB3YW50IHRvCitwdXNoIG91dCBhIHNpbmdsZSBicmFuY2ggYWZ0ZXIgZmluaXNoaW5nIHdvcmssIGV2ZW4gd2hlbiB0aGUgb3RoZXIKK2JyYW5jaGVzIGFyZSBub3QgeWV0IHJlYWR5IHRvIGJlIHB1c2hlZCBvdXQuIElmIHlvdSBhcmUgd29ya2luZyB3aXRoCitvdGhlciBwZW9wbGUgdG8gcHVzaCBpbnRvIHRoZSBzYW1lIHNoYXJlZCByZXBvc2l0b3J5LCB5b3Ugd291bGQgd2FudAordG8gdXNlIG9uZSBvZiB0aGVzZS4KKworcmViYXNlLnN0YXQ6OgorCVdoZXRoZXIgdG8gc2hvdyBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSBzaW5jZSB0aGUgbGFzdAorCXJlYmFzZS4gRmFsc2UgYnkgZGVmYXVsdC4KKworcmViYXNlLmF1dG9zcXVhc2g6OgorCUlmIHNldCB0byB0cnVlIGVuYWJsZSAnLS1hdXRvc3F1YXNoJyBvcHRpb24gYnkgZGVmYXVsdC4KKworcmVjZWl2ZS5hdXRvZ2M6OgorCUJ5IGRlZmF1bHQsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBydW4gImdpdC1nYyAtLWF1dG8iIGFmdGVyCisJcmVjZWl2aW5nIGRhdGEgZnJvbSBnaXQtcHVzaCBhbmQgdXBkYXRpbmcgcmVmcy4gIFlvdSBjYW4gc3RvcAorCWl0IGJ5IHNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBmYWxzZS4KKworcmVjZWl2ZS5mc2NrT2JqZWN0czo6CisJSWYgaXQgaXMgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBjaGVjayBhbGwgcmVjZWl2ZWQKKwlvYmplY3RzLiBJdCB3aWxsIGFib3J0IGluIHRoZSBjYXNlIG9mIGEgbWFsZm9ybWVkIG9iamVjdCBvciBhCisJYnJva2VuIGxpbmsuIFRoZSByZXN1bHQgb2YgYW4gYWJvcnQgYXJlIG9ubHkgZGFuZ2xpbmcgb2JqZWN0cy4KKwlEZWZhdWx0cyB0byBmYWxzZS4gSWYgbm90IHNldCwgdGhlIHZhbHVlIG9mIGB0cmFuc2Zlci5mc2NrT2JqZWN0c2AKKwlpcyB1c2VkIGluc3RlYWQuCisKK3JlY2VpdmUudW5wYWNrTGltaXQ6OgorCUlmIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyByZWNlaXZlZCBpbiBhIHB1c2ggaXMgYmVsb3cgdGhpcworCWxpbWl0IHRoZW4gdGhlIG9iamVjdHMgd2lsbCBiZSB1bnBhY2tlZCBpbnRvIGxvb3NlIG9iamVjdAorCWZpbGVzLiBIb3dldmVyIGlmIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgb2JqZWN0cyBlcXVhbHMgb3IKKwlleGNlZWRzIHRoaXMgbGltaXQgdGhlbiB0aGUgcmVjZWl2ZWQgcGFjayB3aWxsIGJlIHN0b3JlZCBhcworCWEgcGFjaywgYWZ0ZXIgYWRkaW5nIGFueSBtaXNzaW5nIGRlbHRhIGJhc2VzLiAgU3RvcmluZyB0aGUKKwlwYWNrIGZyb20gYSBwdXNoIGNhbiBtYWtlIHRoZSBwdXNoIG9wZXJhdGlvbiBjb21wbGV0ZSBmYXN0ZXIsCisJZXNwZWNpYWxseSBvbiBzbG93IGZpbGVzeXN0ZW1zLiAgSWYgbm90IHNldCwgdGhlIHZhbHVlIG9mCisJYHRyYW5zZmVyLnVucGFja0xpbWl0YCBpcyB1c2VkIGluc3RlYWQuCisKK3JlY2VpdmUuZGVueURlbGV0ZXM6OgorCUlmIHNldCB0byB0cnVlLCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgZGVueSBhIHJlZiB1cGRhdGUgdGhhdCBkZWxldGVzCisJdGhlIHJlZi4gVXNlIHRoaXMgdG8gcHJldmVudCBzdWNoIGEgcmVmIGRlbGV0aW9uIHZpYSBhIHB1c2guCisKK3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQ6OgorCUlmIHNldCB0byB0cnVlLCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgZGVueSBhIHJlZiB1cGRhdGUgdGhhdAorCWRlbGV0ZXMgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBicmFuY2ggb2YgYSBub24tYmFyZSByZXBvc2l0b3J5LgorCityZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoOjoKKwlJZiBzZXQgdG8gdHJ1ZSBvciAicmVmdXNlIiwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIGRlbnkgYSByZWYgdXBkYXRlCisJdG8gdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBicmFuY2ggb2YgYSBub24tYmFyZSByZXBvc2l0b3J5LgorCVN1Y2ggYSBwdXNoIGlzIHBvdGVudGlhbGx5IGRhbmdlcm91cyBiZWNhdXNlIGl0IGJyaW5ncyB0aGUgSEVBRAorCW91dCBvZiBzeW5jIHdpdGggdGhlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUuIElmIHNldCB0byAid2FybiIsCisJcHJpbnQgYSB3YXJuaW5nIG9mIHN1Y2ggYSBwdXNoIHRvIHN0ZGVyciwgYnV0IGFsbG93IHRoZSBwdXNoIHRvCisJcHJvY2VlZC4gSWYgc2V0IHRvIGZhbHNlIG9yICJpZ25vcmUiLCBhbGxvdyBzdWNoIHB1c2hlcyB3aXRoIG5vCisJbWVzc2FnZS4gRGVmYXVsdHMgdG8gInJlZnVzZSIuCisKK3JlY2VpdmUuZGVueU5vbkZhc3RGb3J3YXJkczo6CisJSWYgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBkZW55IGEgcmVmIHVwZGF0ZSB3aGljaCBpcworCW5vdCBhIGZhc3QtZm9yd2FyZC4gVXNlIHRoaXMgdG8gcHJldmVudCBzdWNoIGFuIHVwZGF0ZSB2aWEgYSBwdXNoLAorCWV2ZW4gaWYgdGhhdCBwdXNoIGlzIGZvcmNlZC4gVGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzCisJc2V0IHdoZW4gaW5pdGlhbGl6aW5nIGEgc2hhcmVkIHJlcG9zaXRvcnkuCisKK3JlY2VpdmUudXBkYXRlc2VydmVyaW5mbzo6CisJSWYgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbworCWFmdGVyIHJlY2VpdmluZyBkYXRhIGZyb20gZ2l0LXB1c2ggYW5kIHVwZGF0aW5nIHJlZnMuCisKK3JlbW90ZS48bmFtZT4udXJsOjoKKwlUaGUgVVJMIG9mIGEgcmVtb3RlIHJlcG9zaXRvcnkuICBTZWUgbGlua2dpdDpnaXQtZmV0Y2hbMV0gb3IKKwlsaW5rZ2l0OmdpdC1wdXNoWzFdLgorCityZW1vdGUuPG5hbWU+LnB1c2h1cmw6OgorCVRoZSBwdXNoIFVSTCBvZiBhIHJlbW90ZSByZXBvc2l0b3J5LiAgU2VlIGxpbmtnaXQ6Z2l0LXB1c2hbMV0uCisKK3JlbW90ZS48bmFtZT4ucHJveHk6OgorCUZvciByZW1vdGVzIHRoYXQgcmVxdWlyZSBjdXJsIChodHRwLCBodHRwcyBhbmQgZnRwKSwgdGhlIFVSTCB0bworCXRoZSBwcm94eSB0byB1c2UgZm9yIHRoYXQgcmVtb3RlLiAgU2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgdG8KKwlkaXNhYmxlIHByb3h5aW5nIGZvciB0aGF0IHJlbW90ZS4KKworcmVtb3RlLjxuYW1lPi5mZXRjaDo6CisJVGhlIGRlZmF1bHQgc2V0IG9mICJyZWZzcGVjIiBmb3IgbGlua2dpdDpnaXQtZmV0Y2hbMV0uIFNlZQorCWxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorCityZW1vdGUuPG5hbWU+LnB1c2g6OgorCVRoZSBkZWZhdWx0IHNldCBvZiAicmVmc3BlYyIgZm9yIGxpbmtnaXQ6Z2l0LXB1c2hbMV0uIFNlZQorCWxpbmtnaXQ6Z2l0LXB1c2hbMV0uCisKK3JlbW90ZS48bmFtZT4ubWlycm9yOjoKKwlJZiB0cnVlLCBwdXNoaW5nIHRvIHRoaXMgcmVtb3RlIHdpbGwgYXV0b21hdGljYWxseSBiZWhhdmUKKwlhcyBpZiB0aGUgYC0tbWlycm9yYCBvcHRpb24gd2FzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKK3JlbW90ZS48bmFtZT4uc2tpcERlZmF1bHRVcGRhdGU6OgorCUlmIHRydWUsIHRoaXMgcmVtb3RlIHdpbGwgYmUgc2tpcHBlZCBieSBkZWZhdWx0IHdoZW4gdXBkYXRpbmcKKwl1c2luZyBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBvciB0aGUgYHVwZGF0ZWAgc3ViY29tbWFuZCBvZgorCWxpbmtnaXQ6Z2l0LXJlbW90ZVsxXS4KKworcmVtb3RlLjxuYW1lPi5za2lwRmV0Y2hBbGw6OgorCUlmIHRydWUsIHRoaXMgcmVtb3RlIHdpbGwgYmUgc2tpcHBlZCBieSBkZWZhdWx0IHdoZW4gdXBkYXRpbmcKKwl1c2luZyBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBvciB0aGUgYHVwZGF0ZWAgc3ViY29tbWFuZCBvZgorCWxpbmtnaXQ6Z2l0LXJlbW90ZVsxXS4KKworcmVtb3RlLjxuYW1lPi5yZWNlaXZlcGFjazo6CisJVGhlIGRlZmF1bHQgcHJvZ3JhbSB0byBleGVjdXRlIG9uIHRoZSByZW1vdGUgc2lkZSB3aGVuIHB1c2hpbmcuICBTZWUKKwlvcHRpb24gXC0tcmVjZWl2ZS1wYWNrIG9mIGxpbmtnaXQ6Z2l0LXB1c2hbMV0uCisKK3JlbW90ZS48bmFtZT4udXBsb2FkcGFjazo6CisJVGhlIGRlZmF1bHQgcHJvZ3JhbSB0byBleGVjdXRlIG9uIHRoZSByZW1vdGUgc2lkZSB3aGVuIGZldGNoaW5nLiAgU2VlCisJb3B0aW9uIFwtLXVwbG9hZC1wYWNrIG9mIGxpbmtnaXQ6Z2l0LWZldGNoLXBhY2tbMV0uCisKK3JlbW90ZS48bmFtZT4udGFnb3B0OjoKKwlTZXR0aW5nIHRoaXMgdmFsdWUgdG8gXC0tbm8tdGFncyBkaXNhYmxlcyBhdXRvbWF0aWMgdGFnIGZvbGxvd2luZyB3aGVuCisJZmV0Y2hpbmcgZnJvbSByZW1vdGUgPG5hbWU+LiBTZXR0aW5nIGl0IHRvIFwtLXRhZ3Mgd2lsbCBmZXRjaCBldmVyeQorCXRhZyBmcm9tIHJlbW90ZSA8bmFtZT4sIGV2ZW4gaWYgdGhleSBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHJlbW90ZQorCWJyYW5jaCBoZWFkcy4gUGFzc2luZyB0aGVzZSBmbGFncyBkaXJlY3RseSB0byBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBjYW4KKwlvdmVycmlkZSB0aGlzIHNldHRpbmcuIFNlZSBvcHRpb25zIFwtLXRhZ3MgYW5kIFwtLW5vLXRhZ3Mgb2YKKwlsaW5rZ2l0OmdpdC1mZXRjaFsxXS4KKworcmVtb3RlLjxuYW1lPi52Y3M6OgorCVNldHRpbmcgdGhpcyB0byBhIHZhbHVlIDx2Y3M+IHdpbGwgY2F1c2UgZ2l0IHRvIGludGVyYWN0IHdpdGgKKwl0aGUgcmVtb3RlIHdpdGggdGhlIGdpdC1yZW1vdGUtPHZjcz4gaGVscGVyLgorCityZW1vdGVzLjxncm91cD46OgorCVRoZSBsaXN0IG9mIHJlbW90ZXMgd2hpY2ggYXJlIGZldGNoZWQgYnkgImdpdCByZW1vdGUgdXBkYXRlCisJPGdyb3VwPiIuICBTZWUgbGlua2dpdDpnaXQtcmVtb3RlWzFdLgorCityZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0OjoKKwlCeSBkZWZhdWx0LCBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0gY3JlYXRlcyBwYWNrcyB0aGF0IHVzZQorCWRlbHRhLWJhc2Ugb2Zmc2V0LiBJZiB5b3UgbmVlZCB0byBzaGFyZSB5b3VyIHJlcG9zaXRvcnkgd2l0aAorCWdpdCBvbGRlciB0aGFuIHZlcnNpb24gMS40LjQsIGVpdGhlciBkaXJlY3RseSBvciB2aWEgYSBkdW1iCisJcHJvdG9jb2wgc3VjaCBhcyBodHRwLCB0aGVuIHlvdSBuZWVkIHRvIHNldCB0aGlzIG9wdGlvbiB0bworCSJmYWxzZSIgYW5kIHJlcGFjay4gQWNjZXNzIGZyb20gb2xkIGdpdCB2ZXJzaW9ucyBvdmVyIHRoZQorCW5hdGl2ZSBwcm90b2NvbCBhcmUgdW5hZmZlY3RlZCBieSB0aGlzIG9wdGlvbi4KKworcmVyZXJlLmF1dG91cGRhdGU6OgorCVdoZW4gc2V0IHRvIHRydWUsIGBnaXQtcmVyZXJlYCB1cGRhdGVzIHRoZSBpbmRleCB3aXRoIHRoZQorCXJlc3VsdGluZyBjb250ZW50cyBhZnRlciBpdCBjbGVhbmx5IHJlc29sdmVzIGNvbmZsaWN0cyB1c2luZworCXByZXZpb3VzbHkgcmVjb3JkZWQgcmVzb2x1dGlvbi4gIERlZmF1bHRzIHRvIGZhbHNlLgorCityZXJlcmUuZW5hYmxlZDo6CisJQWN0aXZhdGUgcmVjb3JkaW5nIG9mIHJlc29sdmVkIGNvbmZsaWN0cywgc28gdGhhdCBpZGVudGljYWwKKwljb25mbGljdCBodW5rcyBjYW4gYmUgcmVzb2x2ZWQgYXV0b21hdGljYWxseSwgc2hvdWxkIHRoZXkgYmUKKwllbmNvdW50ZXJlZCBhZ2Fpbi4gIEJ5IGRlZmF1bHQsIGxpbmtnaXQ6Z2l0LXJlcmVyZVsxXSBpcworCWVuYWJsZWQgaWYgdGhlcmUgaXMgYW4gYHJyLWNhY2hlYCBkaXJlY3RvcnkgdW5kZXIgdGhlCisJYCRHSVRfRElSYCwgZS5nLiBpZiAicmVyZXJlIiB3YXMgcHJldmlvdXNseSB1c2VkIGluIHRoZQorCXJlcG9zaXRvcnkuCisKK3NlbmRlbWFpbC5pZGVudGl0eTo6CisJQSBjb25maWd1cmF0aW9uIGlkZW50aXR5LiBXaGVuIGdpdmVuLCBjYXVzZXMgdmFsdWVzIGluIHRoZQorCSdzZW5kZW1haWwuPGlkZW50aXR5Picgc3Vic2VjdGlvbiB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlcgorCXZhbHVlcyBpbiB0aGUgJ3NlbmRlbWFpbCcgc2VjdGlvbi4gVGhlIGRlZmF1bHQgaWRlbnRpdHkgaXMKKwl0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5pZGVudGl0eScuCisKK3NlbmRlbWFpbC5zbXRwZW5jcnlwdGlvbjo6CisJU2VlIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0gZm9yIGRlc2NyaXB0aW9uLiAgTm90ZSB0aGF0IHRoaXMKKwlzZXR0aW5nIGlzIG5vdCBzdWJqZWN0IHRvIHRoZSAnaWRlbnRpdHknIG1lY2hhbmlzbS4KKworc2VuZGVtYWlsLnNtdHBzc2w6OgorCURlcHJlY2F0ZWQgYWxpYXMgZm9yICdzZW5kZW1haWwuc210cGVuY3J5cHRpb24gPSBzc2wnLgorCitzZW5kZW1haWwuPGlkZW50aXR5Pi4qOjoKKwlJZGVudGl0eS1zcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgJ3NlbmRlbWFpbC4qJyBwYXJhbWV0ZXJzCisJZm91bmQgYmVsb3csIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgdGhvc2Ugd2hlbiB0aGUgdGhpcworCWlkZW50aXR5IGlzIHNlbGVjdGVkLCB0aHJvdWdoIGNvbW1hbmQtbGluZSBvcgorCSdzZW5kZW1haWwuaWRlbnRpdHknLgorCitzZW5kZW1haWwuYWxpYXNlc2ZpbGU6Ogorc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGU6Ogorc2VuZGVtYWlsLmJjYzo6CitzZW5kZW1haWwuY2M6Ogorc2VuZGVtYWlsLmNjY21kOjoKK3NlbmRlbWFpbC5jaGFpbnJlcGx5dG86Ogorc2VuZGVtYWlsLmNvbmZpcm06Ogorc2VuZGVtYWlsLmVudmVsb3Blc2VuZGVyOjoKK3NlbmRlbWFpbC5mcm9tOjoKK3NlbmRlbWFpbC5tdWx0aWVkaXQ6Ogorc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2M6Ogorc2VuZGVtYWlsLnNtdHBwYXNzOjoKK3NlbmRlbWFpbC5zdXBwcmVzc2NjOjoKK3NlbmRlbWFpbC5zdXBwcmVzc2Zyb206Ogorc2VuZGVtYWlsLnRvOjoKK3NlbmRlbWFpbC5zbXRwZG9tYWluOjoKK3NlbmRlbWFpbC5zbXRwc2VydmVyOjoKK3NlbmRlbWFpbC5zbXRwc2VydmVycG9ydDo6CitzZW5kZW1haWwuc210cHNlcnZlcm9wdGlvbjo6CitzZW5kZW1haWwuc210cHVzZXI6Ogorc2VuZGVtYWlsLnRocmVhZDo6CitzZW5kZW1haWwudmFsaWRhdGU6OgorCVNlZSBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdIGZvciBkZXNjcmlwdGlvbi4KKworc2VuZGVtYWlsLnNpZ25lZG9mZmNjOjoKKwlEZXByZWNhdGVkIGFsaWFzIGZvciAnc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2MnLgorCitzaG93YnJhbmNoLmRlZmF1bHQ6OgorCVRoZSBkZWZhdWx0IHNldCBvZiBicmFuY2hlcyBmb3IgbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0uCisJU2VlIGxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdLgorCitzdGF0dXMucmVsYXRpdmVQYXRoczo6CisJQnkgZGVmYXVsdCwgbGlua2dpdDpnaXQtc3RhdHVzWzFdIHNob3dzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZQorCWN1cnJlbnQgZGlyZWN0b3J5LiBTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYGZhbHNlYCBzaG93cyBwYXRocworCXJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QgKHRoaXMgd2FzIHRoZSBkZWZhdWx0IGZvciBnaXQKKwlwcmlvciB0byB2MS41LjQpLgorCitzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzOjoKKwlCeSBkZWZhdWx0LCBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gYW5kIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBzaG93CisJZmlsZXMgd2hpY2ggYXJlIG5vdCBjdXJyZW50bHkgdHJhY2tlZCBieSBHaXQuIERpcmVjdG9yaWVzIHdoaWNoCisJY29udGFpbiBvbmx5IHVudHJhY2tlZCBmaWxlcywgYXJlIHNob3duIHdpdGggdGhlIGRpcmVjdG9yeSBuYW1lCisJb25seS4gU2hvd2luZyB1bnRyYWNrZWQgZmlsZXMgbWVhbnMgdGhhdCBHaXQgbmVlZHMgdG8gbHN0YXQoKSBhbGwKKwlhbGwgdGhlIGZpbGVzIGluIHRoZSB3aG9sZSByZXBvc2l0b3J5LCB3aGljaCBtaWdodCBiZSBzbG93IG9uIHNvbWUKKwlzeXN0ZW1zLiBTbywgdGhpcyB2YXJpYWJsZSBjb250cm9scyBob3cgdGhlIGNvbW1hbmRzIGRpc3BsYXlzCisJdGhlIHVudHJhY2tlZCBmaWxlcy4gUG9zc2libGUgdmFsdWVzIGFyZToKKysKKy0tCisqIGBub2AgLSBTaG93IG5vIHVudHJhY2tlZCBmaWxlcy4KKyogYG5vcm1hbGAgLSBTaG93IHVudHJhY2tlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisqIGBhbGxgIC0gU2hvdyBhbHNvIGluZGl2aWR1YWwgZmlsZXMgaW4gdW50cmFja2VkIGRpcmVjdG9yaWVzLgorLS0KKysKK0lmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gJ25vcm1hbCcuCitUaGlzIHZhcmlhYmxlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC11fC0tdW50cmFja2VkLWZpbGVzIG9wdGlvbgorb2YgbGlua2dpdDpnaXQtc3RhdHVzWzFdIGFuZCBsaW5rZ2l0OmdpdC1jb21taXRbMV0uCisKK3N0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5OjoKKwlEZWZhdWx0cyB0byBmYWxzZS4KKwlJZiB0aGlzIGlzIHNldCB0byBhIG5vbiB6ZXJvIG51bWJlciBvciB0cnVlIChpZGVudGljYWwgdG8gLTEgb3IgYW4KKwl1bmxpbWl0ZWQgbnVtYmVyKSwgdGhlIHN1Ym1vZHVsZSBzdW1tYXJ5IHdpbGwgYmUgZW5hYmxlZCBhbmQgYQorCXN1bW1hcnkgb2YgY29tbWl0cyBmb3IgbW9kaWZpZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNob3duIChzZWUKKwktLXN1bW1hcnktbGltaXQgb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LXN1Ym1vZHVsZVsxXSkuCisKK3N1Ym1vZHVsZS48bmFtZT4ucGF0aDo6CitzdWJtb2R1bGUuPG5hbWU+LnVybDo6CitzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZTo6CisJVGhlIHBhdGggd2l0aGluIHRoaXMgcHJvamVjdCwgVVJMLCBhbmQgdGhlIHVwZGF0aW5nIHN0cmF0ZWd5CisJZm9yIGEgc3VibW9kdWxlLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBpbml0aWFsbHkgcG9wdWxhdGVkCisJYnkgJ2dpdCBzdWJtb2R1bGUgaW5pdCc7IGVkaXQgdGhlbSB0byBvdmVycmlkZSB0aGUKKwlVUkwgYW5kIG90aGVyIHZhbHVlcyBmb3VuZCBpbiB0aGUgYC5naXRtb2R1bGVzYCBmaWxlLiAgU2VlCisJbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGFuZCBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0gZm9yIGRldGFpbHMuCisKK3N1Ym1vZHVsZS48bmFtZT4uZmV0Y2hSZWN1cnNlU3VibW9kdWxlczo6CisJVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2YgdGhpcworCXN1Ym1vZHVsZS4gSXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIC0tW25vLV1yZWN1cnNlLXN1Ym1vZHVsZXMKKwljb21tYW5kIGxpbmUgb3B0aW9uIHRvICJnaXQgZmV0Y2giIGFuZCAiZ2l0IHB1bGwiLgorCVRoaXMgc2V0dGluZyB3aWxsIG92ZXJyaWRlIHRoYXQgZnJvbSBpbiB0aGUgbGlua2dpdDpnaXRtb2R1bGVzWzVdCisJZmlsZS4KKworc3VibW9kdWxlLjxuYW1lPi5pZ25vcmU6OgorCURlZmluZXMgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzICJnaXQgc3RhdHVzIiBhbmQgdGhlIGRpZmYgZmFtaWx5IHNob3cKKwlhIHN1Ym1vZHVsZSBhcyBtb2RpZmllZC4gV2hlbiBzZXQgdG8gImFsbCIsIGl0IHdpbGwgbmV2ZXIgYmUgY29uc2lkZXJlZAorCW1vZGlmaWVkLCAiZGlydHkiIHdpbGwgaWdub3JlIGFsbCBjaGFuZ2VzIHRvIHRoZSBzdWJtb2R1bGVzIHdvcmsgdHJlZSBhbmQKKwl0YWtlcyBvbmx5IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIEhFQUQgb2YgdGhlIHN1Ym1vZHVsZSBhbmQgdGhlIGNvbW1pdAorCXJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QgaW50byBhY2NvdW50LiAidW50cmFja2VkIiB3aWxsIGFkZGl0aW9uYWxseQorCWxldCBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgdHJhY2tlZCBmaWxlcyBpbiB0aGVpciB3b3JrIHRyZWUgc2hvdyB1cC4KKwlVc2luZyAibm9uZSIgKHRoZSBkZWZhdWx0IHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHNldCkgYWxzbyBzaG93cworCXN1Ym1vZHVsZXMgdGhhdCBoYXZlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVpciB3b3JrIHRyZWUgYXMgY2hhbmdlZC4KKwlUaGlzIHNldHRpbmcgb3ZlcnJpZGVzIGFueSBzZXR0aW5nIG1hZGUgaW4gLmdpdG1vZHVsZXMgZm9yIHRoaXMgc3VibW9kdWxlLAorCWJvdGggc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZSBieSB1c2luZyB0aGUKKwkiLS1pZ25vcmUtc3VibW9kdWxlcyIgb3B0aW9uLgorCit0YXIudW1hc2s6OgorCVRoaXMgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHBlcm1pc3Npb24gYml0cyBvZgorCXRhciBhcmNoaXZlIGVudHJpZXMuICBUaGUgZGVmYXVsdCBpcyAwMDAyLCB3aGljaCB0dXJucyBvZmYgdGhlCisJd29ybGQgd3JpdGUgYml0LiAgVGhlIHNwZWNpYWwgdmFsdWUgInVzZXIiIGluZGljYXRlcyB0aGF0IHRoZQorCWFyY2hpdmluZyB1c2VyJ3MgdW1hc2sgd2lsbCBiZSB1c2VkIGluc3RlYWQuICBTZWUgdW1hc2soMikgYW5kCisJbGlua2dpdDpnaXQtYXJjaGl2ZVsxXS4KKwordHJhbnNmZXIuZnNja09iamVjdHM6OgorCVdoZW4gYGZldGNoLmZzY2tPYmplY3RzYCBvciBgcmVjZWl2ZS5mc2NrT2JqZWN0c2AgYXJlCisJbm90IHNldCwgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbnN0ZWFkLgorCURlZmF1bHRzIHRvIGZhbHNlLgorCit0cmFuc2Zlci51bnBhY2tMaW1pdDo6CisJV2hlbiBgZmV0Y2gudW5wYWNrTGltaXRgIG9yIGByZWNlaXZlLnVucGFja0xpbWl0YCBhcmUKKwlub3Qgc2V0LCB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluc3RlYWQuCisJVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwLgorCit1cmwuPGJhc2U+Lmluc3RlYWRPZjo6CisJQW55IFVSTCB0aGF0IHN0YXJ0cyB3aXRoIHRoaXMgdmFsdWUgd2lsbCBiZSByZXdyaXR0ZW4gdG8KKwlzdGFydCwgaW5zdGVhZCwgd2l0aCA8YmFzZT4uIEluIGNhc2VzIHdoZXJlIHNvbWUgc2l0ZSBzZXJ2ZXMgYQorCWxhcmdlIG51bWJlciBvZiByZXBvc2l0b3JpZXMsIGFuZCBzZXJ2ZXMgdGhlbSB3aXRoIG11bHRpcGxlCisJYWNjZXNzIG1ldGhvZHMsIGFuZCBzb21lIHVzZXJzIG5lZWQgdG8gdXNlIGRpZmZlcmVudCBhY2Nlc3MKKwltZXRob2RzLCB0aGlzIGZlYXR1cmUgYWxsb3dzIHBlb3BsZSB0byBzcGVjaWZ5IGFueSBvZiB0aGUKKwllcXVpdmFsZW50IFVSTHMgYW5kIGhhdmUgZ2l0IGF1dG9tYXRpY2FsbHkgcmV3cml0ZSB0aGUgVVJMIHRvCisJdGhlIGJlc3QgYWx0ZXJuYXRpdmUgZm9yIHRoZSBwYXJ0aWN1bGFyIHVzZXIsIGV2ZW4gZm9yIGEKKwluZXZlci1iZWZvcmUtc2VlbiByZXBvc2l0b3J5IG9uIHRoZSBzaXRlLiAgV2hlbiBtb3JlIHRoYW4gb25lCisJaW5zdGVhZE9mIHN0cmluZ3MgbWF0Y2ggYSBnaXZlbiBVUkwsIHRoZSBsb25nZXN0IG1hdGNoIGlzIHVzZWQuCisKK3VybC48YmFzZT4ucHVzaEluc3RlYWRPZjo6CisJQW55IFVSTCB0aGF0IHN0YXJ0cyB3aXRoIHRoaXMgdmFsdWUgd2lsbCBub3QgYmUgcHVzaGVkIHRvOworCWluc3RlYWQsIGl0IHdpbGwgYmUgcmV3cml0dGVuIHRvIHN0YXJ0IHdpdGggPGJhc2U+LCBhbmQgdGhlCisJcmVzdWx0aW5nIFVSTCB3aWxsIGJlIHB1c2hlZCB0by4gSW4gY2FzZXMgd2hlcmUgc29tZSBzaXRlIHNlcnZlcworCWEgbGFyZ2UgbnVtYmVyIG9mIHJlcG9zaXRvcmllcywgYW5kIHNlcnZlcyB0aGVtIHdpdGggbXVsdGlwbGUKKwlhY2Nlc3MgbWV0aG9kcywgc29tZSBvZiB3aGljaCBkbyBub3QgYWxsb3cgcHVzaCwgdGhpcyBmZWF0dXJlCisJYWxsb3dzIHBlb3BsZSB0byBzcGVjaWZ5IGEgcHVsbC1vbmx5IFVSTCBhbmQgaGF2ZSBnaXQKKwlhdXRvbWF0aWNhbGx5IHVzZSBhbiBhcHByb3ByaWF0ZSBVUkwgdG8gcHVzaCwgZXZlbiBmb3IgYQorCW5ldmVyLWJlZm9yZS1zZWVuIHJlcG9zaXRvcnkgb24gdGhlIHNpdGUuICBXaGVuIG1vcmUgdGhhbiBvbmUKKwlwdXNoSW5zdGVhZE9mIHN0cmluZ3MgbWF0Y2ggYSBnaXZlbiBVUkwsIHRoZSBsb25nZXN0IG1hdGNoIGlzCisJdXNlZC4gIElmIGEgcmVtb3RlIGhhcyBhbiBleHBsaWNpdCBwdXNodXJsLCBnaXQgd2lsbCBpZ25vcmUgdGhpcworCXNldHRpbmcgZm9yIHRoYXQgcmVtb3RlLgorCit1c2VyLmVtYWlsOjoKKwlZb3VyIGVtYWlsIGFkZHJlc3MgdG8gYmUgcmVjb3JkZWQgaW4gYW55IG5ld2x5IGNyZWF0ZWQgY29tbWl0cy4KKwlDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9BVVRIT1JfRU1BSUwnLCAnR0lUX0NPTU1JVFRFUl9FTUFJTCcsIGFuZAorCSdFTUFJTCcgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdC10cmVlWzFdLgorCit1c2VyLm5hbWU6OgorCVlvdXIgZnVsbCBuYW1lIHRvIGJlIHJlY29yZGVkIGluIGFueSBuZXdseSBjcmVhdGVkIGNvbW1pdHMuCisJQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfQVVUSE9SX05BTUUnIGFuZCAnR0lUX0NPTU1JVFRFUl9OQU1FJworCWVudmlyb25tZW50IHZhcmlhYmxlcy4gIFNlZSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXS4KKwordXNlci5zaWduaW5na2V5OjoKKwlJZiBsaW5rZ2l0OmdpdC10YWdbMV0gaXMgbm90IHNlbGVjdGluZyB0aGUga2V5IHlvdSB3YW50IGl0IHRvCisJYXV0b21hdGljYWxseSB3aGVuIGNyZWF0aW5nIGEgc2lnbmVkIHRhZywgeW91IGNhbiBvdmVycmlkZSB0aGUKKwlkZWZhdWx0IHNlbGVjdGlvbiB3aXRoIHRoaXMgdmFyaWFibGUuICBUaGlzIG9wdGlvbiBpcyBwYXNzZWQKKwl1bmNoYW5nZWQgdG8gZ3BnJ3MgLS1sb2NhbC11c2VyIHBhcmFtZXRlciwgc28geW91IG1heSBzcGVjaWZ5IGEga2V5CisJdXNpbmcgYW55IG1ldGhvZCB0aGF0IGdwZyBzdXBwb3J0cy4KKword2ViLmJyb3dzZXI6OgorCVNwZWNpZnkgYSB3ZWIgYnJvd3NlciB0aGF0IG1heSBiZSB1c2VkIGJ5IHNvbWUgY29tbWFuZHMuCisJQ3VycmVudGx5IG9ubHkgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0gYW5kIGxpbmtnaXQ6Z2l0LWhlbHBbMV0KKwltYXkgdXNlIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kYXRlLWZvcm1hdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9kYXRlLWZvcm1hdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMDBmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RhdGUtZm9ybWF0cy50eHQKQEAgLTAsMCArMSwyNiBAQAorREFURSBGT1JNQVRTCistLS0tLS0tLS0tLS0KKworVGhlIEdJVF9BVVRIT1JfREFURSwgR0lUX0NPTU1JVFRFUl9EQVRFIGVudmlyb25tZW50IHZhcmlhYmxlcworaWZkZWY6OmdpdC1jb21taXRbXQorYW5kIHRoZSBgLS1kYXRlYCBvcHRpb24KK2VuZGlmOjpnaXQtY29tbWl0W10KK3N1cHBvcnQgdGhlIGZvbGxvd2luZyBkYXRlIGZvcm1hdHM6CisKK0dpdCBpbnRlcm5hbCBmb3JtYXQ6OgorCUl0IGlzIGA8dW5peCB0aW1lc3RhbXA+IDx0aW1lem9uZSBvZmZzZXQ+YCwgd2hlcmUgYDx1bml4CisJdGltZXN0YW1wPmAgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLgorCWA8dGltZXpvbmUgb2Zmc2V0PmAgaXMgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBvZmZzZXQgZnJvbSBVVEMuCisJRm9yIGV4YW1wbGUgQ0VUICh3aGljaCBpcyAyIGhvdXJzIGFoZWFkIFVUQykgaXMgYCswMjAwYC4KKworUkZDIDI4MjI6OgorCVRoZSBzdGFuZGFyZCBlbWFpbCBmb3JtYXQgYXMgZGVzY3JpYmVkIGJ5IFJGQyAyODIyLCBmb3IgZXhhbXBsZQorCWBUaHUsIDA3IEFwciAyMDA1IDIyOjEzOjEzICswMjAwYC4KKworSVNPIDg2MDE6OgorCVRpbWUgYW5kIGRhdGUgc3BlY2lmaWVkIGJ5IHRoZSBJU08gODYwMSBzdGFuZGFyZCwgZm9yIGV4YW1wbGUKKwlgMjAwNS0wNC0wN1QyMjoxMzoxM2AuIFRoZSBwYXJzZXIgYWNjZXB0cyBhIHNwYWNlIGluc3RlYWQgb2YgdGhlCisJYFRgIGNoYXJhY3RlciBhcyB3ZWxsLgorKworTk9URTogSW4gYWRkaXRpb24sIHRoZSBkYXRlIHBhcnQgaXMgYWNjZXB0ZWQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXRzOgorYFlZWVkuTU0uRERgLCBgTU0vREQvWVlZWWAgYW5kIGBERC5NTS5ZWVlZYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWNvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhOTBhOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1jb25maWcudHh0CkBAIC0wLDAgKzEsMTQwIEBACitkaWZmLmF1dG9yZWZyZXNoaW5kZXg6OgorCVdoZW4gdXNpbmcgJ2dpdCBkaWZmJyB0byBjb21wYXJlIHdpdGggd29yayB0cmVlCisJZmlsZXMsIGRvIG5vdCBjb25zaWRlciBzdGF0LW9ubHkgY2hhbmdlIGFzIGNoYW5nZWQuCisJSW5zdGVhZCwgc2lsZW50bHkgcnVuIGBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaGAgdG8KKwl1cGRhdGUgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uIGZvciBwYXRocyB3aG9zZQorCWNvbnRlbnRzIGluIHRoZSB3b3JrIHRyZWUgbWF0Y2ggdGhlIGNvbnRlbnRzIGluIHRoZQorCWluZGV4LiAgVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gdHJ1ZS4gIE5vdGUgdGhhdCB0aGlzCisJYWZmZWN0cyBvbmx5ICdnaXQgZGlmZicgUG9yY2VsYWluLCBhbmQgbm90IGxvd2VyIGxldmVsCisJJ2RpZmYnIGNvbW1hbmRzIHN1Y2ggYXMgJ2dpdCBkaWZmLWZpbGVzJy4KKworZGlmZi5kaXJzdGF0OjoKKwlBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGAtLWRpcnN0YXRgIHBhcmFtZXRlcnMgc3BlY2lmeWluZyB0aGUKKwlkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBgLS1kaXJzdGF0YCBvcHRpb24gdG8gbGlua2dpdDpnaXQtZGlmZlsxXWAKKwlhbmQgZnJpZW5kcy4gVGhlIGRlZmF1bHRzIGNhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBjb21tYW5kIGxpbmUKKwkodXNpbmcgYC0tZGlyc3RhdD08cGFyYW0xLHBhcmFtMiwuLi4+YCkuIFRoZSBmYWxsYmFjayBkZWZhdWx0cworCSh3aGVuIG5vdCBjaGFuZ2VkIGJ5IGBkaWZmLmRpcnN0YXRgKSBhcmUgYGNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzYC4KKwlUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZToKKysKKy0tCitgY2hhbmdlc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBjb3VudGluZyB0aGUgbGluZXMgdGhhdCBoYXZlIGJlZW4KKwlyZW1vdmVkIGZyb20gdGhlIHNvdXJjZSwgb3IgYWRkZWQgdG8gdGhlIGRlc3RpbmF0aW9uLiBUaGlzIGlnbm9yZXMKKwl0aGUgYW1vdW50IG9mIHB1cmUgY29kZSBtb3ZlbWVudHMgd2l0aGluIGEgZmlsZS4gIEluIG90aGVyIHdvcmRzLAorCXJlYXJyYW5naW5nIGxpbmVzIGluIGEgZmlsZSBpcyBub3QgY291bnRlZCBhcyBtdWNoIGFzIG90aGVyIGNoYW5nZXMuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIG5vIHBhcmFtZXRlciBpcyBnaXZlbi4KK2BsaW5lc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBkb2luZyB0aGUgcmVndWxhciBsaW5lLWJhc2VkIGRpZmYKKwlhbmFseXNpcywgYW5kIHN1bW1pbmcgdGhlIHJlbW92ZWQvYWRkZWQgbGluZSBjb3VudHMuIChGb3IgYmluYXJ5CisJZmlsZXMsIGNvdW50IDY0LWJ5dGUgY2h1bmtzIGluc3RlYWQsIHNpbmNlIGJpbmFyeSBmaWxlcyBoYXZlIG5vCisJbmF0dXJhbCBjb25jZXB0IG9mIGxpbmVzKS4gVGhpcyBpcyBhIG1vcmUgZXhwZW5zaXZlIGAtLWRpcnN0YXRgCisJYmVoYXZpb3IgdGhhbiB0aGUgYGNoYW5nZXNgIGJlaGF2aW9yLCBidXQgaXQgZG9lcyBjb3VudCByZWFycmFuZ2VkCisJbGluZXMgd2l0aGluIGEgZmlsZSBhcyBtdWNoIGFzIG90aGVyIGNoYW5nZXMuIFRoZSByZXN1bHRpbmcgb3V0cHV0CisJaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgeW91IGdldCBmcm9tIHRoZSBvdGhlciBgLS0qc3RhdGAgb3B0aW9ucy4KK2BmaWxlc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIGZpbGVzIGNoYW5nZWQuCisJRWFjaCBjaGFuZ2VkIGZpbGUgY291bnRzIGVxdWFsbHkgaW4gdGhlIGRpcnN0YXQgYW5hbHlzaXMuIFRoaXMgaXMKKwl0aGUgY29tcHV0YXRpb25hbGx5IGNoZWFwZXN0IGAtLWRpcnN0YXRgIGJlaGF2aW9yLCBzaW5jZSBpdCBkb2VzCisJbm90IGhhdmUgdG8gbG9vayBhdCB0aGUgZmlsZSBjb250ZW50cyBhdCBhbGwuCitgY3VtdWxhdGl2ZWA7OworCUNvdW50IGNoYW5nZXMgaW4gYSBjaGlsZCBkaXJlY3RvcnkgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGFzIHdlbGwuCisJTm90ZSB0aGF0IHdoZW4gdXNpbmcgYGN1bXVsYXRpdmVgLCB0aGUgc3VtIG9mIHRoZSBwZXJjZW50YWdlcworCXJlcG9ydGVkIG1heSBleGNlZWQgMTAwJS4gVGhlIGRlZmF1bHQgKG5vbi1jdW11bGF0aXZlKSBiZWhhdmlvciBjYW4KKwliZSBzcGVjaWZpZWQgd2l0aCB0aGUgYG5vbmN1bXVsYXRpdmVgIHBhcmFtZXRlci4KKzxsaW1pdD47OworCUFuIGludGVnZXIgcGFyYW1ldGVyIHNwZWNpZmllcyBhIGN1dC1vZmYgcGVyY2VudCAoMyUgYnkgZGVmYXVsdCkuCisJRGlyZWN0b3JpZXMgY29udHJpYnV0aW5nIGxlc3MgdGhhbiB0aGlzIHBlcmNlbnRhZ2Ugb2YgdGhlIGNoYW5nZXMKKwlhcmUgbm90IHNob3duIGluIHRoZSBvdXRwdXQuCistLQorKworRXhhbXBsZTogVGhlIGZvbGxvd2luZyB3aWxsIGNvdW50IGNoYW5nZWQgZmlsZXMsIHdoaWxlIGlnbm9yaW5nCitkaXJlY3RvcmllcyB3aXRoIGxlc3MgdGhhbiAxMCUgb2YgdGhlIHRvdGFsIGFtb3VudCBvZiBjaGFuZ2VkIGZpbGVzLAorYW5kIGFjY3VtdWxhdGluZyBjaGlsZCBkaXJlY3RvcnkgY291bnRzIGluIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXM6CitgZmlsZXMsMTAsY3VtdWxhdGl2ZWAuCisKK2RpZmYuc3RhdEdyYXBoV2lkdGg6OgorCUxpbWl0IHRoZSB3aWR0aCBvZiB0aGUgZ3JhcGggcGFydCBpbiAtLXN0YXQgb3V0cHV0LiBJZiBzZXQsIGFwcGxpZXMKKwl0byBhbGwgY29tbWFuZHMgZ2VuZXJhdGluZyAtLXN0YXQgb3V0cHV0IGV4Y2VwdCBmb3JtYXQtcGF0Y2guCisKK2RpZmYuZXh0ZXJuYWw6OgorCUlmIHRoaXMgY29uZmlnIHZhcmlhYmxlIGlzIHNldCwgZGlmZiBnZW5lcmF0aW9uIGlzIG5vdAorCXBlcmZvcm1lZCB1c2luZyB0aGUgaW50ZXJuYWwgZGlmZiBtYWNoaW5lcnksIGJ1dCB1c2luZyB0aGUKKwlnaXZlbiBjb21tYW5kLiAgQ2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYEdJVF9FWFRFUk5BTF9ESUZGJworCWVudmlyb25tZW50IHZhcmlhYmxlLiAgVGhlIGNvbW1hbmQgaXMgY2FsbGVkIHdpdGggcGFyYW1ldGVycworCWFzIGRlc2NyaWJlZCB1bmRlciAiZ2l0IERpZmZzIiBpbiBsaW5rZ2l0OmdpdFsxXS4gIE5vdGU6IGlmCisJeW91IHdhbnQgdG8gdXNlIGFuIGV4dGVybmFsIGRpZmYgcHJvZ3JhbSBvbmx5IG9uIGEgc3Vic2V0IG9mCisJeW91ciBmaWxlcywgeW91CW1pZ2h0IHdhbnQgdG8gdXNlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBpbnN0ZWFkLgorCitkaWZmLmlnbm9yZVN1Ym1vZHVsZXM6OgorCVNldHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgLS1pZ25vcmUtc3VibW9kdWxlcy4gTm90ZSB0aGF0IHRoaXMKKwlhZmZlY3RzIG9ubHkgJ2dpdCBkaWZmJyBQb3JjZWxhaW4sIGFuZCBub3QgbG93ZXIgbGV2ZWwgJ2RpZmYnCisJY29tbWFuZHMgc3VjaCBhcyAnZ2l0IGRpZmYtZmlsZXMnLiAnZ2l0IGNoZWNrb3V0JyBhbHNvIGhvbm9ycworCXRoaXMgc2V0dGluZyB3aGVuIHJlcG9ydGluZyB1bmNvbW1pdHRlZCBjaGFuZ2VzLgorCitkaWZmLm1uZW1vbmljcHJlZml4OjoKKwlJZiBzZXQsICdnaXQgZGlmZicgdXNlcyBhIHByZWZpeCBwYWlyIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlCisJc3RhbmRhcmQgImEvIiBhbmQgImIvIiBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBjb21wYXJlZC4gIFdoZW4KKwl0aGlzIGNvbmZpZ3VyYXRpb24gaXMgaW4gZWZmZWN0LCByZXZlcnNlIGRpZmYgb3V0cHV0IGFsc28gc3dhcHMKKwl0aGUgb3JkZXIgb2YgdGhlIHByZWZpeGVzOgorYGdpdCBkaWZmYDs7CisJY29tcGFyZXMgdGhlIChpKW5kZXggYW5kIHRoZSAodylvcmsgdHJlZTsKK2BnaXQgZGlmZiBIRUFEYDs7CisJIGNvbXBhcmVzIGEgKGMpb21taXQgYW5kIHRoZSAodylvcmsgdHJlZTsKK2BnaXQgZGlmZiAtLWNhY2hlZGA7OworCWNvbXBhcmVzIGEgKGMpb21taXQgYW5kIHRoZSAoaSluZGV4OworYGdpdCBkaWZmIEhFQUQ6ZmlsZTEgZmlsZTJgOzsKKwljb21wYXJlcyBhbiAobyliamVjdCBhbmQgYSAodylvcmsgdHJlZSBlbnRpdHk7CitgZ2l0IGRpZmYgLS1uby1pbmRleCBhIGJgOzsKKwljb21wYXJlcyB0d28gbm9uLWdpdCB0aGluZ3MgKDEpIGFuZCAoMikuCisKK2RpZmYubm9wcmVmaXg6OgorCUlmIHNldCwgJ2dpdCBkaWZmJyBkb2VzIG5vdCBzaG93IGFueSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcHJlZml4LgorCitkaWZmLnJlbmFtZUxpbWl0OjoKKwlUaGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gcGVyZm9ybWluZyB0aGUgY29weS9yZW5hbWUKKwlkZXRlY3Rpb247IGVxdWl2YWxlbnQgdG8gdGhlICdnaXQgZGlmZicgb3B0aW9uICctbCcuCisKK2RpZmYucmVuYW1lczo6CisJVGVsbHMgZ2l0IHRvIGRldGVjdCByZW5hbWVzLiAgSWYgc2V0IHRvIGFueSBib29sZWFuIHZhbHVlLCBpdAorCXdpbGwgZW5hYmxlIGJhc2ljIHJlbmFtZSBkZXRlY3Rpb24uICBJZiBzZXQgdG8gImNvcGllcyIgb3IKKwkiY29weSIsIGl0IHdpbGwgZGV0ZWN0IGNvcGllcywgYXMgd2VsbC4KKworZGlmZi5zdXBwcmVzc0JsYW5rRW1wdHk6OgorCUEgYm9vbGVhbiB0byBpbmhpYml0IHRoZSBzdGFuZGFyZCBiZWhhdmlvciBvZiBwcmludGluZyBhIHNwYWNlCisJYmVmb3JlIGVhY2ggZW1wdHkgb3V0cHV0IGxpbmUuIERlZmF1bHRzIHRvIGZhbHNlLgorCitkaWZmLjxkcml2ZXI+LmNvbW1hbmQ6OgorCVRoZSBjdXN0b20gZGlmZiBkcml2ZXIgY29tbWFuZC4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0KKwlmb3IgZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi54ZnVuY25hbWU6OgorCVRoZSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0aGUgZGlmZiBkcml2ZXIgc2hvdWxkIHVzZSB0bworCXJlY29nbml6ZSB0aGUgaHVuayBoZWFkZXIuICBBIGJ1aWx0LWluIHBhdHRlcm4gbWF5IGFsc28gYmUgdXNlZC4KKwlTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCitkaWZmLjxkcml2ZXI+LmJpbmFyeTo6CisJU2V0IHRoaXMgb3B0aW9uIHRvIHRydWUgdG8gbWFrZSB0aGUgZGlmZiBkcml2ZXIgdHJlYXQgZmlsZXMgYXMKKwliaW5hcnkuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCitkaWZmLjxkcml2ZXI+LnRleHRjb252OjoKKwlUaGUgY29tbWFuZCB0aGF0IHRoZSBkaWZmIGRyaXZlciBzaG91bGQgY2FsbCB0byBnZW5lcmF0ZSB0aGUKKwl0ZXh0LWNvbnZlcnRlZCB2ZXJzaW9uIG9mIGEgZmlsZS4gIFRoZSByZXN1bHQgb2YgdGhlCisJY29udmVyc2lvbiBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgaHVtYW4tcmVhZGFibGUgZGlmZi4gIFNlZQorCWxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi53b3JkcmVnZXg6OgorCVRoZSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0aGUgZGlmZiBkcml2ZXIgc2hvdWxkIHVzZSB0bworCXNwbGl0IHdvcmRzIGluIGEgbGluZS4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yCisJZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi5jYWNoZXRleHRjb252OjoKKwlTZXQgdGhpcyBvcHRpb24gdG8gdHJ1ZSB0byBtYWtlIHRoZSBkaWZmIGRyaXZlciBjYWNoZSB0aGUgdGV4dAorCWNvbnZlcnNpb24gb3V0cHV0cy4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK2RpZmYudG9vbDo6CisJVGhlIGRpZmYgdG9vbCB0byBiZSB1c2VkIGJ5IGxpbmtnaXQ6Z2l0LWRpZmZ0b29sWzFdLiAgVGhpcworCW9wdGlvbiBvdmVycmlkZXMgYG1lcmdlLnRvb2xgLCBhbmQgaGFzIHRoZSBzYW1lIHZhbGlkIGJ1aWx0LWluCisJdmFsdWVzIGFzIGBtZXJnZS50b29sYCBtaW51cyAidG9ydG9pc2VtZXJnZSIgYW5kIHBsdXMKKwkia29tcGFyZSIuICBBbnkgb3RoZXIgdmFsdWUgaXMgdHJlYXRlZCBhcyBhIGN1c3RvbSBkaWZmIHRvb2wsCisJYW5kIHRoZXJlIG11c3QgYmUgYSBjb3JyZXNwb25kaW5nIGBkaWZmdG9vbC48dG9vbD4uY21kYAorCW9wdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVjN2U3OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CkBAIC0wLDAgKzEsMTY5IEBACitSYXcgb3V0cHV0IGZvcm1hdAorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJhdyBvdXRwdXQgZm9ybWF0IGZyb20gImdpdC1kaWZmLWluZGV4IiwgImdpdC1kaWZmLXRyZWUiLAorImdpdC1kaWZmLWZpbGVzIiBhbmQgImdpdCBkaWZmIC0tcmF3IiBhcmUgdmVyeSBzaW1pbGFyLgorCitUaGVzZSBjb21tYW5kcyBhbGwgY29tcGFyZSB0d28gc2V0cyBvZiB0aGluZ3M7IHdoYXQgaXMKK2NvbXBhcmVkIGRpZmZlcnM6CisKK2dpdC1kaWZmLWluZGV4IDx0cmVlLWlzaD46OgorICAgICAgICBjb21wYXJlcyB0aGUgPHRyZWUtaXNoPiBhbmQgdGhlIGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtLgorCitnaXQtZGlmZi1pbmRleCAtLWNhY2hlZCA8dHJlZS1pc2g+OjoKKyAgICAgICAgY29tcGFyZXMgdGhlIDx0cmVlLWlzaD4gYW5kIHRoZSBpbmRleC4KKworZ2l0LWRpZmYtdHJlZSBbLXJdIDx0cmVlLWlzaC0xPiA8dHJlZS1pc2gtMj4gWzxwYXR0ZXJuPi4uLl06OgorICAgICAgICBjb21wYXJlcyB0aGUgdHJlZXMgbmFtZWQgYnkgdGhlIHR3byBhcmd1bWVudHMuCisKK2dpdC1kaWZmLWZpbGVzIFs8cGF0dGVybj4uLi5dOjoKKyAgICAgICAgY29tcGFyZXMgdGhlIGluZGV4IGFuZCB0aGUgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0uCisKK1RoZSAiZ2l0LWRpZmYtdHJlZSIgY29tbWFuZCBiZWdpbnMgaXRzIG91dHB1dCBieSBwcmludGluZyB0aGUgaGFzaCBvZgord2hhdCBpcyBiZWluZyBjb21wYXJlZC4gQWZ0ZXIgdGhhdCwgYWxsIHRoZSBjb21tYW5kcyBwcmludCBvbmUgb3V0cHV0CitsaW5lIHBlciBjaGFuZ2VkIGZpbGUuCisKK0FuIG91dHB1dCBsaW5lIGlzIGZvcm1hdHRlZCB0aGlzIHdheToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbi1wbGFjZSBlZGl0ICA6MTAwNjQ0IDEwMDY0NCBiY2QxMjM0Li4uIDAxMjM0NTYuLi4gTSBmaWxlMAorY29weS1lZGl0ICAgICAgOjEwMDY0NCAxMDA2NDQgYWJjZDEyMy4uLiAxMjM0NTY3Li4uIEM2OCBmaWxlMSBmaWxlMgorcmVuYW1lLWVkaXQgICAgOjEwMDY0NCAxMDA2NDQgYWJjZDEyMy4uLiAxMjM0NTY3Li4uIFI4NiBmaWxlMSBmaWxlMworY3JlYXRlICAgICAgICAgOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAxMjM0NTY3Li4uIEEgZmlsZTQKK2RlbGV0ZSAgICAgICAgIDoxMDA2NDQgMDAwMDAwIDEyMzQ1NjcuLi4gMDAwMDAwMC4uLiBEIGZpbGU1Cit1bm1lcmdlZCAgICAgICA6MDAwMDAwIDAwMDAwMCAwMDAwMDAwLi4uIDAwMDAwMDAuLi4gVSBmaWxlNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoYXQgaXMsIGZyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0OgorCisuIGEgY29sb24uCisuIG1vZGUgZm9yICJzcmMiOyAwMDAwMDAgaWYgY3JlYXRpb24gb3IgdW5tZXJnZWQuCisuIGEgc3BhY2UuCisuIG1vZGUgZm9yICJkc3QiOyAwMDAwMDAgaWYgZGVsZXRpb24gb3IgdW5tZXJnZWQuCisuIGEgc3BhY2UuCisuIHNoYTEgZm9yICJzcmMiOyAwXHs0MFx9IGlmIGNyZWF0aW9uIG9yIHVubWVyZ2VkLgorLiBhIHNwYWNlLgorLiBzaGExIGZvciAiZHN0IjsgMFx7NDBcfSBpZiBjcmVhdGlvbiwgdW5tZXJnZWQgb3IgImxvb2sgYXQgd29yayB0cmVlIi4KKy4gYSBzcGFjZS4KKy4gc3RhdHVzLCBmb2xsb3dlZCBieSBvcHRpb25hbCAic2NvcmUiIG51bWJlci4KKy4gYSB0YWIgb3IgYSBOVUwgd2hlbiAnLXonIG9wdGlvbiBpcyB1c2VkLgorLiBwYXRoIGZvciAic3JjIgorLiBhIHRhYiBvciBhIE5VTCB3aGVuICcteicgb3B0aW9uIGlzIHVzZWQ7IG9ubHkgZXhpc3RzIGZvciBDIG9yIFIuCisuIHBhdGggZm9yICJkc3QiOyBvbmx5IGV4aXN0cyBmb3IgQyBvciBSLgorLiBhbiBMRiBvciBhIE5VTCB3aGVuICcteicgb3B0aW9uIGlzIHVzZWQsIHRvIHRlcm1pbmF0ZSB0aGUgcmVjb3JkLgorCitQb3NzaWJsZSBzdGF0dXMgbGV0dGVycyBhcmU6CisKKy0gQTogYWRkaXRpb24gb2YgYSBmaWxlCistIEM6IGNvcHkgb2YgYSBmaWxlIGludG8gYSBuZXcgb25lCistIEQ6IGRlbGV0aW9uIG9mIGEgZmlsZQorLSBNOiBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRlbnRzIG9yIG1vZGUgb2YgYSBmaWxlCistIFI6IHJlbmFtaW5nIG9mIGEgZmlsZQorLSBUOiBjaGFuZ2UgaW4gdGhlIHR5cGUgb2YgdGhlIGZpbGUKKy0gVTogZmlsZSBpcyB1bm1lcmdlZCAoeW91IG11c3QgY29tcGxldGUgdGhlIG1lcmdlIGJlZm9yZSBpdCBjYW4KK2JlIGNvbW1pdHRlZCkKKy0gWDogInVua25vd24iIGNoYW5nZSB0eXBlIChtb3N0IHByb2JhYmx5IGEgYnVnLCBwbGVhc2UgcmVwb3J0IGl0KQorCitTdGF0dXMgbGV0dGVycyBDIGFuZCBSIGFyZSBhbHdheXMgZm9sbG93ZWQgYnkgYSBzY29yZSAoZGVub3RpbmcgdGhlCitwZXJjZW50YWdlIG9mIHNpbWlsYXJpdHkgYmV0d2VlbiB0aGUgc291cmNlIGFuZCB0YXJnZXQgb2YgdGhlIG1vdmUgb3IKK2NvcHkpLCBhbmQgYXJlIHRoZSBvbmx5IG9uZXMgdG8gYmUgc28uCisKKzxzaGExPiBpcyBzaG93biBhcyBhbGwgMCdzIGlmIGEgZmlsZSBpcyBuZXcgb24gdGhlIGZpbGVzeXN0ZW0KK2FuZCBpdCBpcyBvdXQgb2Ygc3luYyB3aXRoIHRoZSBpbmRleC4KKworRXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDEwMDY0NCA1YmU0YTQuLi4uLi4gMDAwMDAwLi4uLi4uIE0gZmlsZS5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBgLXpgIG9wdGlvbiBpcyBub3QgdXNlZCwgVEFCLCBMRiwgYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzCitpbiBwYXRobmFtZXMgYXJlIHJlcHJlc2VudGVkIGFzIGBcdGAsIGBcbmAsIGFuZCBgXFxgLAorcmVzcGVjdGl2ZWx5LgorCitkaWZmIGZvcm1hdCBmb3IgbWVyZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyJnaXQtZGlmZi10cmVlIiwgImdpdC1kaWZmLWZpbGVzIiBhbmQgImdpdC1kaWZmIC0tcmF3IgorY2FuIHRha2UgJy1jJyBvciAnLS1jYycgb3B0aW9uCit0byBnZW5lcmF0ZSBkaWZmIG91dHB1dCBhbHNvIGZvciBtZXJnZSBjb21taXRzLiAgVGhlIG91dHB1dCBkaWZmZXJzCitmcm9tIHRoZSBmb3JtYXQgZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisuIHRoZXJlIGlzIGEgY29sb24gZm9yIGVhY2ggcGFyZW50CisuIHRoZXJlIGFyZSBtb3JlICJzcmMiIG1vZGVzIGFuZCAic3JjIiBzaGExCisuIHN0YXR1cyBpcyBjb25jYXRlbmF0ZWQgc3RhdHVzIGNoYXJhY3RlcnMgZm9yIGVhY2ggcGFyZW50CisuIG5vIG9wdGlvbmFsICJzY29yZSIgbnVtYmVyCisuIHNpbmdsZSBwYXRoLCBvbmx5IGZvciAiZHN0IgorCitFeGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgZmFiYWRiOC4uLiBjYzk1ZWIwLi4uIDQ4NjY1MTAuLi4gTU0JZGVzY3JpYmUuYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCAnY29tYmluZWQgZGlmZicgbGlzdHMgb25seSBmaWxlcyB3aGljaCB3ZXJlIG1vZGlmaWVkIGZyb20KK2FsbCBwYXJlbnRzLgorCisKK2luY2x1ZGU6OmRpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0W10KKworCitvdGhlciBkaWZmIGZvcm1hdHMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYC0tc3VtbWFyeWAgb3B0aW9uIGRlc2NyaWJlcyBuZXdseSBhZGRlZCwgZGVsZXRlZCwgcmVuYW1lZCBhbmQKK2NvcGllZCBmaWxlcy4gIFRoZSBgLS1zdGF0YCBvcHRpb24gYWRkcyBkaWZmc3RhdCgxKSBncmFwaCB0byB0aGUKK291dHB1dC4gIFRoZXNlIG9wdGlvbnMgY2FuIGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgb3B0aW9ucywgc3VjaCBhcworYC1wYCwgYW5kIGFyZSBtZWFudCBmb3IgaHVtYW4gY29uc3VtcHRpb24uCisKK1doZW4gc2hvd2luZyBhIGNoYW5nZSB0aGF0IGludm9sdmVzIGEgcmVuYW1lIG9yIGEgY29weSwgYC0tc3RhdGAgb3V0cHV0Citmb3JtYXRzIHRoZSBwYXRobmFtZXMgY29tcGFjdGx5IGJ5IGNvbWJpbmluZyBjb21tb24gcHJlZml4IGFuZCBzdWZmaXggb2YKK3RoZSBwYXRobmFtZXMuICBGb3IgZXhhbXBsZSwgYSBjaGFuZ2UgdGhhdCBtb3ZlcyBgYXJjaC9pMzg2L01ha2VmaWxlYCB0bworYGFyY2gveDg2L01ha2VmaWxlYCB3aGlsZSBtb2RpZnlpbmcgNCBsaW5lcyB3aWxsIGJlIHNob3duIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithcmNoL3tpMzg2ID0+IHg4Nn0vTWFrZWZpbGUgICAgfCAgIDQgKy0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGAtLW51bXN0YXRgIG9wdGlvbiBnaXZlcyB0aGUgZGlmZnN0YXQoMSkgaW5mb3JtYXRpb24gYnV0IGlzIGRlc2lnbmVkCitmb3IgZWFzaWVyIG1hY2hpbmUgY29uc3VtcHRpb24uICBBbiBlbnRyeSBpbiBgLS1udW1zdGF0YCBvdXRwdXQgbG9va3MKK2xpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMQkyCVJFQURNRQorMwkxCWFyY2gve2kzODYgPT4geDg2fS9NYWtlZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGF0IGlzLCBmcm9tIGxlZnQgdG8gcmlnaHQ6CisKKy4gdGhlIG51bWJlciBvZiBhZGRlZCBsaW5lczsKKy4gYSB0YWI7CisuIHRoZSBudW1iZXIgb2YgZGVsZXRlZCBsaW5lczsKKy4gYSB0YWI7CisuIHBhdGhuYW1lIChwb3NzaWJseSB3aXRoIHJlbmFtZS9jb3B5IGluZm9ybWF0aW9uKTsKKy4gYSBuZXdsaW5lLgorCitXaGVuIGAtemAgb3V0cHV0IG9wdGlvbiBpcyBpbiBlZmZlY3QsIHRoZSBvdXRwdXQgaXMgZm9ybWF0dGVkIHRoaXMgd2F5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxCTIJUkVBRE1FIE5VTAorMwkxCU5VTCBhcmNoL2kzODYvTWFrZWZpbGUgTlVMIGFyY2gveDg2L01ha2VmaWxlIE5VTAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGF0IGlzOgorCisuIHRoZSBudW1iZXIgb2YgYWRkZWQgbGluZXM7CisuIGEgdGFiOworLiB0aGUgbnVtYmVyIG9mIGRlbGV0ZWQgbGluZXM7CisuIGEgdGFiOworLiBhIE5VTCAob25seSBleGlzdHMgaWYgcmVuYW1lZC9jb3BpZWQpOworLiBwYXRobmFtZSBpbiBwcmVpbWFnZTsKKy4gYSBOVUwgKG9ubHkgZXhpc3RzIGlmIHJlbmFtZWQvY29waWVkKTsKKy4gcGF0aG5hbWUgaW4gcG9zdGltYWdlIChvbmx5IGV4aXN0cyBpZiByZW5hbWVkL2NvcGllZCk7CisuIGEgTlVMLgorCitUaGUgZXh0cmEgYE5VTGAgYmVmb3JlIHRoZSBwcmVpbWFnZSBwYXRoIGluIHJlbmFtZWQgY2FzZSBpcyB0byBhbGxvdworc2NyaXB0cyB0aGF0IHJlYWQgdGhlIG91dHB1dCB0byB0ZWxsIGlmIHRoZSBjdXJyZW50IHJlY29yZCBiZWluZyByZWFkIGlzCithIHNpbmdsZS1wYXRoIHJlY29yZCBvciBhIHJlbmFtZS9jb3B5IHJlY29yZCB3aXRob3V0IHJlYWRpbmcgYWhlYWQuCitBZnRlciByZWFkaW5nIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzLCByZWFkaW5nIHVwIHRvIGBOVUxgIHdvdWxkIHlpZWxkCit0aGUgcGF0aG5hbWUsIGJ1dCBpZiB0aGF0IGlzIGBOVUxgLCB0aGUgcmVjb3JkIHdpbGwgc2hvdyB0d28gcGF0aHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWdlbmVyYXRlLXBhdGNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWY0OTlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWdlbmVyYXRlLXBhdGNoLnR4dApAQCAtMCwwICsxLDE4NSBAQAorR2VuZXJhdGluZyBwYXRjaGVzIHdpdGggLXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gImdpdC1kaWZmLWluZGV4IiwgImdpdC1kaWZmLXRyZWUiLCBvciAiZ2l0LWRpZmYtZmlsZXMiIGFyZSBydW4KK3dpdGggYSAnLXAnIG9wdGlvbiwgImdpdCBkaWZmIiB3aXRob3V0IHRoZSAnLS1yYXcnIG9wdGlvbiwgb3IKKyJnaXQgbG9nIiB3aXRoIHRoZSAiLXAiIG9wdGlvbiwgdGhleQorZG8gbm90IHByb2R1Y2UgdGhlIG91dHB1dCBkZXNjcmliZWQgYWJvdmU7IGluc3RlYWQgdGhleSBwcm9kdWNlIGEKK3BhdGNoIGZpbGUuICBZb3UgY2FuIGN1c3RvbWl6ZSB0aGUgY3JlYXRpb24gb2Ygc3VjaCBwYXRjaGVzIHZpYSB0aGUKK0dJVF9FWFRFUk5BTF9ESUZGIGFuZCB0aGUgR0lUX0RJRkZfT1BUUyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKK1doYXQgdGhlIC1wIG9wdGlvbiBwcm9kdWNlcyBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aGUgdHJhZGl0aW9uYWwKK2RpZmYgZm9ybWF0OgorCisxLiAgIEl0IGlzIHByZWNlZGVkIHdpdGggYSAiZ2l0IGRpZmYiIGhlYWRlciB0aGF0IGxvb2tzIGxpa2UgdGhpczoKKworICAgICAgIGRpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUyCisrCitUaGUgYGEvYCBhbmQgYGIvYCBmaWxlbmFtZXMgYXJlIHRoZSBzYW1lIHVubGVzcyByZW5hbWUvY29weSBpcworaW52b2x2ZWQuICBFc3BlY2lhbGx5LCBldmVuIGZvciBhIGNyZWF0aW9uIG9yIGEgZGVsZXRpb24sCitgL2Rldi9udWxsYCBpcyBfbm90XyB1c2VkIGluIHBsYWNlIG9mIHRoZSBgYS9gIG9yIGBiL2AgZmlsZW5hbWVzLgorKworV2hlbiByZW5hbWUvY29weSBpcyBpbnZvbHZlZCwgYGZpbGUxYCBhbmQgYGZpbGUyYCBzaG93IHRoZQorbmFtZSBvZiB0aGUgc291cmNlIGZpbGUgb2YgdGhlIHJlbmFtZS9jb3B5IGFuZCB0aGUgbmFtZSBvZgordGhlIGZpbGUgdGhhdCByZW5hbWUvY29weSBwcm9kdWNlcywgcmVzcGVjdGl2ZWx5LgorCisyLiAgIEl0IGlzIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGV4dGVuZGVkIGhlYWRlciBsaW5lczoKKworICAgICAgIG9sZCBtb2RlIDxtb2RlPgorICAgICAgIG5ldyBtb2RlIDxtb2RlPgorICAgICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDxtb2RlPgorICAgICAgIG5ldyBmaWxlIG1vZGUgPG1vZGU+CisgICAgICAgY29weSBmcm9tIDxwYXRoPgorICAgICAgIGNvcHkgdG8gPHBhdGg+CisgICAgICAgcmVuYW1lIGZyb20gPHBhdGg+CisgICAgICAgcmVuYW1lIHRvIDxwYXRoPgorICAgICAgIHNpbWlsYXJpdHkgaW5kZXggPG51bWJlcj4KKyAgICAgICBkaXNzaW1pbGFyaXR5IGluZGV4IDxudW1iZXI+CisgICAgICAgaW5kZXggPGhhc2g+Li48aGFzaD4gPG1vZGU+CisrCitGaWxlIG1vZGVzIGFyZSBwcmludGVkIGFzIDYtZGlnaXQgb2N0YWwgbnVtYmVycyBpbmNsdWRpbmcgdGhlIGZpbGUgdHlwZQorYW5kIGZpbGUgcGVybWlzc2lvbiBiaXRzLgorKworUGF0aCBuYW1lcyBpbiBleHRlbmRlZCBoZWFkZXJzIGRvIG5vdCBpbmNsdWRlIHRoZSBgYS9gIGFuZCBgYi9gIHByZWZpeGVzLgorKworVGhlIHNpbWlsYXJpdHkgaW5kZXggaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdW5jaGFuZ2VkIGxpbmVzLCBhbmQKK3RoZSBkaXNzaW1pbGFyaXR5IGluZGV4IGlzIHRoZSBwZXJjZW50YWdlIG9mIGNoYW5nZWQgbGluZXMuICBJdAoraXMgYSByb3VuZGVkIGRvd24gaW50ZWdlciwgZm9sbG93ZWQgYnkgYSBwZXJjZW50IHNpZ24uICBUaGUKK3NpbWlsYXJpdHkgaW5kZXggdmFsdWUgb2YgMTAwJSBpcyB0aHVzIHJlc2VydmVkIGZvciB0d28gZXF1YWwKK2ZpbGVzLCB3aGlsZSAxMDAlIGRpc3NpbWlsYXJpdHkgbWVhbnMgdGhhdCBubyBsaW5lIGZyb20gdGhlIG9sZAorZmlsZSBtYWRlIGl0IGludG8gdGhlIG5ldyBvbmUuCisrCitUaGUgaW5kZXggbGluZSBpbmNsdWRlcyB0aGUgU0hBLTEgY2hlY2tzdW0gYmVmb3JlIGFuZCBhZnRlciB0aGUgY2hhbmdlLgorVGhlIDxtb2RlPiBpcyBpbmNsdWRlZCBpZiB0aGUgZmlsZSBtb2RlIGRvZXMgbm90IGNoYW5nZTsgb3RoZXJ3aXNlLAorc2VwYXJhdGUgbGluZXMgaW5kaWNhdGUgdGhlIG9sZCBhbmQgdGhlIG5ldyBtb2RlLgorCiszLiAgVEFCLCBMRiwgZG91YmxlIHF1b3RlIGFuZCBiYWNrc2xhc2ggY2hhcmFjdGVycyBpbiBwYXRobmFtZXMKKyAgICBhcmUgcmVwcmVzZW50ZWQgYXMgYFx0YCwgYFxuYCwgYFwiYCBhbmQgYFxcYCwgcmVzcGVjdGl2ZWx5LgorICAgIElmIHRoZXJlIGlzIG5lZWQgZm9yIHN1Y2ggc3Vic3RpdHV0aW9uIHRoZW4gdGhlIHdob2xlCisgICAgcGF0aG5hbWUgaXMgcHV0IGluIGRvdWJsZSBxdW90ZXMuCisKKzQuICBBbGwgdGhlIGBmaWxlMWAgZmlsZXMgaW4gdGhlIG91dHB1dCByZWZlciB0byBmaWxlcyBiZWZvcmUgdGhlCisgICAgY29tbWl0LCBhbmQgYWxsIHRoZSBgZmlsZTJgIGZpbGVzIHJlZmVyIHRvIGZpbGVzIGFmdGVyIHRoZSBjb21taXQuCisgICAgSXQgaXMgaW5jb3JyZWN0IHRvIGFwcGx5IGVhY2ggY2hhbmdlIHRvIGVhY2ggZmlsZSBzZXF1ZW50aWFsbHkuICBGb3IKKyAgICBleGFtcGxlLCB0aGlzIHBhdGNoIHdpbGwgc3dhcCBhIGFuZCBiOgorCisgICAgICBkaWZmIC0tZ2l0IGEvYSBiL2IKKyAgICAgIHJlbmFtZSBmcm9tIGEKKyAgICAgIHJlbmFtZSB0byBiCisgICAgICBkaWZmIC0tZ2l0IGEvYiBiL2EKKyAgICAgIHJlbmFtZSBmcm9tIGIKKyAgICAgIHJlbmFtZSB0byBhCisKKworY29tYmluZWQgZGlmZiBmb3JtYXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FueSBkaWZmLWdlbmVyYXRpbmcgY29tbWFuZCBjYW4gdGFrZSB0aGUgYC1jYCBvciBgLS1jY2Agb3B0aW9uIHRvCitwcm9kdWNlIGEgJ2NvbWJpbmVkIGRpZmYnIHdoZW4gc2hvd2luZyBhIG1lcmdlLiBUaGlzIGlzIHRoZSBkZWZhdWx0Citmb3JtYXQgd2hlbiBzaG93aW5nIG1lcmdlcyB3aXRoIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gb3IKK2xpbmtnaXQ6Z2l0LXNob3dbMV0uIE5vdGUgYWxzbyB0aGF0IHlvdSBjYW4gZ2l2ZSB0aGUgYC1tJyBvcHRpb24gdG8gYW55CitvZiB0aGVzZSBjb21tYW5kcyB0byBmb3JjZSBnZW5lcmF0aW9uIG9mIGRpZmZzIHdpdGggaW5kaXZpZHVhbCBwYXJlbnRzCitvZiBhIG1lcmdlLgorCitBICdjb21iaW5lZCBkaWZmJyBmb3JtYXQgbG9va3MgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KK2RpZmYgLS1jb21iaW5lZCBkZXNjcmliZS5jCitpbmRleCBmYWJhZGI4LGNjOTVlYjAuLjQ4NjY1MTAKKy0tLSBhL2Rlc2NyaWJlLmMKKysrKyBiL2Rlc2NyaWJlLmMKK0BAQCAtOTgsMjAgLTk4LDEyICs5OCwyMCBAQEAKKwlyZXR1cm4gKGFfZGF0ZSA+IGJfZGF0ZSkgPyAtMSA6IChhX2RhdGUgPT0gYl9kYXRlKSA/IDAgOiAxOworICB9CisKKy0gc3RhdGljIHZvaWQgZGVzY3JpYmUoY2hhciAqYXJnKQorIC1zdGF0aWMgdm9pZCBkZXNjcmliZShzdHJ1Y3QgY29tbWl0ICpjbWl0LCBpbnQgbGFzdF9vbmUpCisrK3N0YXRpYyB2b2lkIGRlc2NyaWJlKGNoYXIgKmFyZywgaW50IGxhc3Rfb25lKQorICB7CisgKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworICsJc3RydWN0IGNvbW1pdCAqY21pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisJc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CisJc3RydWN0IGNvbW1pdF9uYW1lICpuOworCisgKwlpZiAoZ2V0X3NoYTEoYXJnLCBzaGExKSA8IDApCisgKwkJdXNhZ2UoZGVzY3JpYmVfdXNhZ2UpOworICsJY21pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworICsJaWYgKCFjbWl0KQorICsJCXVzYWdlKGRlc2NyaWJlX3VzYWdlKTsKKyArCisJaWYgKCFpbml0aWFsaXplZCkgeworCQlpbml0aWFsaXplZCA9IDE7CisJCWZvcl9lYWNoX3JlZihnZXRfbmFtZSk7CistLS0tLS0tLS0tLS0KKworMS4gICBJdCBpcyBwcmVjZWRlZCB3aXRoIGEgImdpdCBkaWZmIiBoZWFkZXIsIHRoYXQgbG9va3MgbGlrZQorICAgICB0aGlzICh3aGVuICctYycgb3B0aW9uIGlzIHVzZWQpOgorCisgICAgICAgZGlmZiAtLWNvbWJpbmVkIGZpbGUKKysKK29yIGxpa2UgdGhpcyAod2hlbiAnLS1jYycgb3B0aW9uIGlzIHVzZWQpOgorCisgICAgICAgZGlmZiAtLWNjIGZpbGUKKworMi4gICBJdCBpcyBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBleHRlbmRlZCBoZWFkZXIgbGluZXMKKyAgICAgKHRoaXMgZXhhbXBsZSBzaG93cyBhIG1lcmdlIHdpdGggdHdvIHBhcmVudHMpOgorCisgICAgICAgaW5kZXggPGhhc2g+LDxoYXNoPi4uPGhhc2g+CisgICAgICAgbW9kZSA8bW9kZT4sPG1vZGU+Li48bW9kZT4KKyAgICAgICBuZXcgZmlsZSBtb2RlIDxtb2RlPgorICAgICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDxtb2RlPiw8bW9kZT4KKysKK1RoZSBgbW9kZSA8bW9kZT4sPG1vZGU+Li48bW9kZT5gIGxpbmUgYXBwZWFycyBvbmx5IGlmIGF0IGxlYXN0IG9uZSBvZgordGhlIDxtb2RlPiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcmVzdC4gRXh0ZW5kZWQgaGVhZGVycyB3aXRoCitpbmZvcm1hdGlvbiBhYm91dCBkZXRlY3RlZCBjb250ZW50cyBtb3ZlbWVudCAocmVuYW1lcyBhbmQKK2NvcHlpbmcgZGV0ZWN0aW9uKSBhcmUgZGVzaWduZWQgdG8gd29yayB3aXRoIGRpZmYgb2YgdHdvCis8dHJlZS1pc2g+IGFuZCBhcmUgbm90IHVzZWQgYnkgY29tYmluZWQgZGlmZiBmb3JtYXQuCisKKzMuICAgSXQgaXMgZm9sbG93ZWQgYnkgdHdvLWxpbmUgZnJvbS1maWxlL3RvLWZpbGUgaGVhZGVyCisKKyAgICAgICAtLS0gYS9maWxlCisgICAgICAgKysrIGIvZmlsZQorKworU2ltaWxhciB0byB0d28tbGluZSBoZWFkZXIgZm9yIHRyYWRpdGlvbmFsICd1bmlmaWVkJyBkaWZmCitmb3JtYXQsIGAvZGV2L251bGxgIGlzIHVzZWQgdG8gc2lnbmFsIGNyZWF0ZWQgb3IgZGVsZXRlZAorZmlsZXMuCisKKzQuICAgQ2h1bmsgaGVhZGVyIGZvcm1hdCBpcyBtb2RpZmllZCB0byBwcmV2ZW50IHBlb3BsZSBmcm9tCisgICAgIGFjY2lkZW50YWxseSBmZWVkaW5nIGl0IHRvIGBwYXRjaCAtcDFgLiBDb21iaW5lZCBkaWZmIGZvcm1hdAorICAgICB3YXMgY3JlYXRlZCBmb3IgcmV2aWV3IG9mIG1lcmdlIGNvbW1pdCBjaGFuZ2VzLCBhbmQgd2FzIG5vdAorICAgICBtZWFudCBmb3IgYXBwbHkuIFRoZSBjaGFuZ2UgaXMgc2ltaWxhciB0byB0aGUgY2hhbmdlIGluIHRoZQorICAgICBleHRlbmRlZCAnaW5kZXgnIGhlYWRlcjoKKworICAgICAgIEBAQCA8ZnJvbS1maWxlLXJhbmdlPiA8ZnJvbS1maWxlLXJhbmdlPiA8dG8tZmlsZS1yYW5nZT4gQEBACisrCitUaGVyZSBhcmUgKG51bWJlciBvZiBwYXJlbnRzICsgMSkgYEBgIGNoYXJhY3RlcnMgaW4gdGhlIGNodW5rCitoZWFkZXIgZm9yIGNvbWJpbmVkIGRpZmYgZm9ybWF0LgorCitVbmxpa2UgdGhlIHRyYWRpdGlvbmFsICd1bmlmaWVkJyBkaWZmIGZvcm1hdCwgd2hpY2ggc2hvd3MgdHdvCitmaWxlcyBBIGFuZCBCIHdpdGggYSBzaW5nbGUgY29sdW1uIHRoYXQgaGFzIGAtYCAobWludXMgLS0KK2FwcGVhcnMgaW4gQSBidXQgcmVtb3ZlZCBpbiBCKSwgYCtgIChwbHVzIC0tIG1pc3NpbmcgaW4gQSBidXQKK2FkZGVkIHRvIEIpLCBvciBgIiAiYCAoc3BhY2UgLS0gdW5jaGFuZ2VkKSBwcmVmaXgsIHRoaXMgZm9ybWF0Citjb21wYXJlcyB0d28gb3IgbW9yZSBmaWxlcyBmaWxlMSwgZmlsZTIsLi4uIHdpdGggb25lIGZpbGUgWCwgYW5kCitzaG93cyBob3cgWCBkaWZmZXJzIGZyb20gZWFjaCBvZiBmaWxlTi4gIE9uZSBjb2x1bW4gZm9yIGVhY2ggb2YKK2ZpbGVOIGlzIHByZXBlbmRlZCB0byB0aGUgb3V0cHV0IGxpbmUgdG8gbm90ZSBob3cgWCdzIGxpbmUgaXMKK2RpZmZlcmVudCBmcm9tIGl0LgorCitBIGAtYCBjaGFyYWN0ZXIgaW4gdGhlIGNvbHVtbiBOIG1lYW5zIHRoYXQgdGhlIGxpbmUgYXBwZWFycyBpbgorZmlsZU4gYnV0IGl0IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgcmVzdWx0LiAgQSBgK2AgY2hhcmFjdGVyCitpbiB0aGUgY29sdW1uIE4gbWVhbnMgdGhhdCB0aGUgbGluZSBhcHBlYXJzIGluIHRoZSByZXN1bHQsCithbmQgZmlsZU4gZG9lcyBub3QgaGF2ZSB0aGF0IGxpbmUgKGluIG90aGVyIHdvcmRzLCB0aGUgbGluZSB3YXMKK2FkZGVkLCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoYXQgcGFyZW50KS4KKworSW4gdGhlIGFib3ZlIGV4YW1wbGUgb3V0cHV0LCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHdhcyBjaGFuZ2VkCitmcm9tIGJvdGggZmlsZXMgKGhlbmNlIHR3byBgLWAgcmVtb3ZhbHMgZnJvbSBib3RoIGZpbGUxIGFuZAorZmlsZTIsIHBsdXMgYCsrYCB0byBtZWFuIG9uZSBsaW5lIHRoYXQgd2FzIGFkZGVkIGRvZXMgbm90IGFwcGVhcgoraW4gZWl0aGVyIGZpbGUxIG5vciBmaWxlMikuICBBbHNvIGVpZ2h0IG90aGVyIGxpbmVzIGFyZSB0aGUgc2FtZQorZnJvbSBmaWxlMSBidXQgZG8gbm90IGFwcGVhciBpbiBmaWxlMiAoaGVuY2UgcHJlZml4ZWQgd2l0aCBgK2ApLgorCitXaGVuIHNob3duIGJ5IGBnaXQgZGlmZi10cmVlIC1jYCwgaXQgY29tcGFyZXMgdGhlIHBhcmVudHMgb2YgYQorbWVyZ2UgY29tbWl0IHdpdGggdGhlIG1lcmdlIHJlc3VsdCAoaS5lLiBmaWxlMS4uZmlsZU4gYXJlIHRoZQorcGFyZW50cykuICBXaGVuIHNob3duIGJ5IGBnaXQgZGlmZi1maWxlcyAtY2AsIGl0IGNvbXBhcmVzIHRoZQordHdvIHVucmVzb2x2ZWQgbWVyZ2UgcGFyZW50cyB3aXRoIHRoZSB3b3JraW5nIHRyZWUgZmlsZQorKGkuZS4gZmlsZTEgaXMgc3RhZ2UgMiBha2EgIm91ciB2ZXJzaW9uIiwgZmlsZTIgaXMgc3RhZ2UgMyBha2EKKyJ0aGVpciB2ZXJzaW9uIikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0YjIxNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dApAQCAtMCwwICsxLDQ3OSBAQAorLy8gUGxlYXNlIGRvbid0IHJlbW92ZSB0aGlzIGNvbW1lbnQgYXMgYXNjaWlkb2MgYmVoYXZlcyBiYWRseSB3aGVuCisvLyB0aGUgZmlyc3Qgbm9uLWVtcHR5IGxpbmUgaXMgaWZkZWYvaWZuZGVmLiBUaGUgc3ltcHRvbSBpcyB0aGF0CisvLyB3aXRob3V0IHRoaXMgY29tbWVudCB0aGUgPGdpdC1kaWZmLWNvcmU+IGF0dHJpYnV0ZSBjb25kaXRpb25hbGx5CisvLyBkZWZpbmVkIGJlbG93IGVuZHMgdXAgYmVpbmcgZGVmaW5lZCB1bmNvbmRpdGlvbmFsbHkuCisvLyBMYXN0IGNoZWNrZWQgd2l0aCBhc2NpaWRvYyA3LjAuMi4KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KK2lmbmRlZjo6Z2l0LWRpZmZbXQoraWZuZGVmOjpnaXQtbG9nW10KKzpnaXQtZGlmZi1jb3JlOiAxCitlbmRpZjo6Z2l0LWxvZ1tdCitlbmRpZjo6Z2l0LWRpZmZbXQorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCitpZmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCistcDo6CistLW5vLXN0YXQ6OgorCUdlbmVyYXRlIHBsYWluIHBhdGNoZXMgd2l0aG91dCBhbnkgZGlmZnN0YXRzLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLXA6OgorLXU6OgorLS1wYXRjaDo6CisJR2VuZXJhdGUgcGF0Y2ggKHNlZSBzZWN0aW9uIG9uIGdlbmVyYXRpbmcgcGF0Y2hlcykuCisJe2dpdC1kaWZmPyBUaGlzIGlzIHRoZSBkZWZhdWx0Ln0KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLVU8bj46OgorLS11bmlmaWVkPTxuPjo6CisJR2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgb2YgY29udGV4dCBpbnN0ZWFkIG9mCisJdGhlIHVzdWFsIHRocmVlLgoraWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKwlJbXBsaWVzIGAtcGAuCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCistLXJhdzo6CisJR2VuZXJhdGUgdGhlIHJhdyBmb3JtYXQuCisJe2dpdC1kaWZmLWNvcmU/IFRoaXMgaXMgdGhlIGRlZmF1bHQufQorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLS1wYXRjaC13aXRoLXJhdzo6CisJU3lub255bSBmb3IgYC1wIC0tcmF3YC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLS1taW5pbWFsOjoKKwlTcGVuZCBleHRyYSB0aW1lIHRvIG1ha2Ugc3VyZSB0aGUgc21hbGxlc3QgcG9zc2libGUKKwlkaWZmIGlzIHByb2R1Y2VkLgorCistLXBhdGllbmNlOjoKKwlHZW5lcmF0ZSBhIGRpZmYgdXNpbmcgdGhlICJwYXRpZW5jZSBkaWZmIiBhbGdvcml0aG0uCisKKy0taGlzdG9ncmFtOjoKKwlHZW5lcmF0ZSBhIGRpZmYgdXNpbmcgdGhlICJoaXN0b2dyYW0gZGlmZiIgYWxnb3JpdGhtLgorCistLXN0YXRbPTx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dXTo6CisJR2VuZXJhdGUgYSBkaWZmc3RhdC4gQnkgZGVmYXVsdCwgYXMgbXVjaCBzcGFjZSBhcyBuZWNlc3NhcnkKKwl3aWxsIGJlIHVzZWQgZm9yIHRoZSBmaWxlbmFtZSBwYXJ0LCBhbmQgdGhlIHJlc3QgZm9yIHRoZSBncmFwaAorCXBhcnQuIE1heGltdW0gd2lkdGggZGVmYXVsdHMgdG8gdGVybWluYWwgd2lkdGgsIG9yIDgwIGNvbHVtbnMKKwlpZiBub3QgY29ubmVjdGVkIHRvIGEgdGVybWluYWwsIGFuZCBjYW4gYmUgb3ZlcnJpZGRlbiBieQorCWA8d2lkdGg+YC4gVGhlIHdpZHRoIG9mIHRoZSBmaWxlbmFtZSBwYXJ0IGNhbiBiZSBsaW1pdGVkIGJ5CisJZ2l2aW5nIGFub3RoZXIgd2lkdGggYDxuYW1lLXdpZHRoPmAgYWZ0ZXIgYSBjb21tYS4gVGhlIHdpZHRoCisJb2YgdGhlIGdyYXBoIHBhcnQgY2FuIGJlIGxpbWl0ZWQgYnkgdXNpbmcKKwlgLS1zdGF0LWdyYXBoLXdpZHRoPTx3aWR0aD5gIChhZmZlY3RzIGFsbCBjb21tYW5kcyBnZW5lcmF0aW5nCisJYSBzdGF0IGdyYXBoKSBvciBieSBzZXR0aW5nIGBkaWZmLnN0YXRHcmFwaFdpZHRoPTx3aWR0aD5gCisJKGRvZXMgbm90IGFmZmVjdCBgZ2l0IGZvcm1hdC1wYXRjaGApLgorCUJ5IGdpdmluZyBhIHRoaXJkIHBhcmFtZXRlciBgPGNvdW50PmAsIHlvdSBjYW4gbGltaXQgdGhlCisJb3V0cHV0IHRvIHRoZSBmaXJzdCBgPGNvdW50PmAgbGluZXMsIGZvbGxvd2VkIGJ5IGAuLi5gIGlmCisJdGhlcmUgYXJlIG1vcmUuCisrCitUaGVzZSBwYXJhbWV0ZXJzIGNhbiBhbHNvIGJlIHNldCBpbmRpdmlkdWFsbHkgd2l0aCBgLS1zdGF0LXdpZHRoPTx3aWR0aD5gLAorYC0tc3RhdC1uYW1lLXdpZHRoPTxuYW1lLXdpZHRoPmAgYW5kIGAtLXN0YXQtY291bnQ9PGNvdW50PmAuCisKKy0tbnVtc3RhdDo6CisJU2ltaWxhciB0byBgLS1zdGF0YCwgYnV0IHNob3dzIG51bWJlciBvZiBhZGRlZCBhbmQKKwlkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24gYW5kIHBhdGhuYW1lIHdpdGhvdXQKKwlhYmJyZXZpYXRpb24sIHRvIG1ha2UgaXQgbW9yZSBtYWNoaW5lIGZyaWVuZGx5LiAgRm9yCisJYmluYXJ5IGZpbGVzLCBvdXRwdXRzIHR3byBgLWAgaW5zdGVhZCBvZiBzYXlpbmcKKwlgMCAwYC4KKworLS1zaG9ydHN0YXQ6OgorCU91dHB1dCBvbmx5IHRoZSBsYXN0IGxpbmUgb2YgdGhlIGAtLXN0YXRgIGZvcm1hdCBjb250YWluaW5nIHRvdGFsCisJbnVtYmVyIG9mIG1vZGlmaWVkIGZpbGVzLCBhcyB3ZWxsIGFzIG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZAorCWxpbmVzLgorCistLWRpcnN0YXRbPTxwYXJhbTEscGFyYW0yLC4uLj5dOjoKKwlPdXRwdXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiByZWxhdGl2ZSBhbW91bnQgb2YgY2hhbmdlcyBmb3IgZWFjaAorCXN1Yi1kaXJlY3RvcnkuIFRoZSBiZWhhdmlvciBvZiBgLS1kaXJzdGF0YCBjYW4gYmUgY3VzdG9taXplZCBieQorCXBhc3NpbmcgaXQgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwYXJhbWV0ZXJzLgorCVRoZSBkZWZhdWx0cyBhcmUgY29udHJvbGxlZCBieSB0aGUgYGRpZmYuZGlyc3RhdGAgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKwlUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZToKKysKKy0tCitgY2hhbmdlc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBjb3VudGluZyB0aGUgbGluZXMgdGhhdCBoYXZlIGJlZW4KKwlyZW1vdmVkIGZyb20gdGhlIHNvdXJjZSwgb3IgYWRkZWQgdG8gdGhlIGRlc3RpbmF0aW9uLiBUaGlzIGlnbm9yZXMKKwl0aGUgYW1vdW50IG9mIHB1cmUgY29kZSBtb3ZlbWVudHMgd2l0aGluIGEgZmlsZS4gIEluIG90aGVyIHdvcmRzLAorCXJlYXJyYW5naW5nIGxpbmVzIGluIGEgZmlsZSBpcyBub3QgY291bnRlZCBhcyBtdWNoIGFzIG90aGVyIGNoYW5nZXMuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIG5vIHBhcmFtZXRlciBpcyBnaXZlbi4KK2BsaW5lc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBkb2luZyB0aGUgcmVndWxhciBsaW5lLWJhc2VkIGRpZmYKKwlhbmFseXNpcywgYW5kIHN1bW1pbmcgdGhlIHJlbW92ZWQvYWRkZWQgbGluZSBjb3VudHMuIChGb3IgYmluYXJ5CisJZmlsZXMsIGNvdW50IDY0LWJ5dGUgY2h1bmtzIGluc3RlYWQsIHNpbmNlIGJpbmFyeSBmaWxlcyBoYXZlIG5vCisJbmF0dXJhbCBjb25jZXB0IG9mIGxpbmVzKS4gVGhpcyBpcyBhIG1vcmUgZXhwZW5zaXZlIGAtLWRpcnN0YXRgCisJYmVoYXZpb3IgdGhhbiB0aGUgYGNoYW5nZXNgIGJlaGF2aW9yLCBidXQgaXQgZG9lcyBjb3VudCByZWFycmFuZ2VkCisJbGluZXMgd2l0aGluIGEgZmlsZSBhcyBtdWNoIGFzIG90aGVyIGNoYW5nZXMuIFRoZSByZXN1bHRpbmcgb3V0cHV0CisJaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgeW91IGdldCBmcm9tIHRoZSBvdGhlciBgLS0qc3RhdGAgb3B0aW9ucy4KK2BmaWxlc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIGZpbGVzIGNoYW5nZWQuCisJRWFjaCBjaGFuZ2VkIGZpbGUgY291bnRzIGVxdWFsbHkgaW4gdGhlIGRpcnN0YXQgYW5hbHlzaXMuIFRoaXMgaXMKKwl0aGUgY29tcHV0YXRpb25hbGx5IGNoZWFwZXN0IGAtLWRpcnN0YXRgIGJlaGF2aW9yLCBzaW5jZSBpdCBkb2VzCisJbm90IGhhdmUgdG8gbG9vayBhdCB0aGUgZmlsZSBjb250ZW50cyBhdCBhbGwuCitgY3VtdWxhdGl2ZWA7OworCUNvdW50IGNoYW5nZXMgaW4gYSBjaGlsZCBkaXJlY3RvcnkgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGFzIHdlbGwuCisJTm90ZSB0aGF0IHdoZW4gdXNpbmcgYGN1bXVsYXRpdmVgLCB0aGUgc3VtIG9mIHRoZSBwZXJjZW50YWdlcworCXJlcG9ydGVkIG1heSBleGNlZWQgMTAwJS4gVGhlIGRlZmF1bHQgKG5vbi1jdW11bGF0aXZlKSBiZWhhdmlvciBjYW4KKwliZSBzcGVjaWZpZWQgd2l0aCB0aGUgYG5vbmN1bXVsYXRpdmVgIHBhcmFtZXRlci4KKzxsaW1pdD47OworCUFuIGludGVnZXIgcGFyYW1ldGVyIHNwZWNpZmllcyBhIGN1dC1vZmYgcGVyY2VudCAoMyUgYnkgZGVmYXVsdCkuCisJRGlyZWN0b3JpZXMgY29udHJpYnV0aW5nIGxlc3MgdGhhbiB0aGlzIHBlcmNlbnRhZ2Ugb2YgdGhlIGNoYW5nZXMKKwlhcmUgbm90IHNob3duIGluIHRoZSBvdXRwdXQuCistLQorKworRXhhbXBsZTogVGhlIGZvbGxvd2luZyB3aWxsIGNvdW50IGNoYW5nZWQgZmlsZXMsIHdoaWxlIGlnbm9yaW5nCitkaXJlY3RvcmllcyB3aXRoIGxlc3MgdGhhbiAxMCUgb2YgdGhlIHRvdGFsIGFtb3VudCBvZiBjaGFuZ2VkIGZpbGVzLAorYW5kIGFjY3VtdWxhdGluZyBjaGlsZCBkaXJlY3RvcnkgY291bnRzIGluIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXM6CitgLS1kaXJzdGF0PWZpbGVzLDEwLGN1bXVsYXRpdmVgLgorCistLXN1bW1hcnk6OgorCU91dHB1dCBhIGNvbmRlbnNlZCBzdW1tYXJ5IG9mIGV4dGVuZGVkIGhlYWRlciBpbmZvcm1hdGlvbgorCXN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMuCisKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCistLXBhdGNoLXdpdGgtc3RhdDo6CisJU3lub255bSBmb3IgYC1wIC0tc3RhdGAuCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKKy16OjoKK2lmZGVmOjpnaXQtbG9nW10KKwlTZXBhcmF0ZSB0aGUgY29tbWl0cyB3aXRoIE5VTHMgaW5zdGVhZCBvZiB3aXRoIG5ldyBuZXdsaW5lcy4KKysKK0Fsc28sIHdoZW4gYC0tcmF3YCBvciBgLS1udW1zdGF0YCBoYXMgYmVlbiBnaXZlbiwgZG8gbm90IG11bmdlCitwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycy4KK2VuZGlmOjpnaXQtbG9nW10KK2lmbmRlZjo6Z2l0LWxvZ1tdCisJV2hlbiBgLS1yYXdgLCBgLS1udW1zdGF0YCwgYC0tbmFtZS1vbmx5YCBvciBgLS1uYW1lLXN0YXR1c2AgaGFzIGJlZW4KKwlnaXZlbiwgZG8gbm90IG11bmdlIHBhdGhuYW1lcyBhbmQgdXNlIE5VTHMgYXMgb3V0cHV0IGZpZWxkIHRlcm1pbmF0b3JzLgorZW5kaWY6OmdpdC1sb2dbXQorKworV2l0aG91dCB0aGlzIG9wdGlvbiwgZWFjaCBwYXRobmFtZSBvdXRwdXQgd2lsbCBoYXZlIFRBQiwgTEYsIGRvdWJsZSBxdW90ZXMsCithbmQgYmFja3NsYXNoIGNoYXJhY3RlcnMgcmVwbGFjZWQgd2l0aCBgXHRgLCBgXG5gLCBgXCJgLCBhbmQgYFxcYCwKK3Jlc3BlY3RpdmVseSwgYW5kIHRoZSBwYXRobmFtZSB3aWxsIGJlIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMgaWYKK2FueSBvZiB0aG9zZSByZXBsYWNlbWVudHMgb2NjdXJyZWQuCisKKy0tbmFtZS1vbmx5OjoKKwlTaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcy4KKworLS1uYW1lLXN0YXR1czo6CisJU2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcy4gU2VlIHRoZSBkZXNjcmlwdGlvbgorCW9mIHRoZSBgLS1kaWZmLWZpbHRlcmAgb3B0aW9uIG9uIHdoYXQgdGhlIHN0YXR1cyBsZXR0ZXJzIG1lYW4uCisKKy0tc3VibW9kdWxlWz08Zm9ybWF0Pl06OgorCVNwZWNpZnkgaG93IGRpZmZlcmVuY2VzIGluIHN1Ym1vZHVsZXMgYXJlIHNob3duLiAgV2hlbiBgLS1zdWJtb2R1bGVgCisJb3IgYC0tc3VibW9kdWxlPWxvZ2AgaXMgZ2l2ZW4sIHRoZSAnbG9nJyBmb3JtYXQgaXMgdXNlZC4gIFRoaXMgZm9ybWF0IGxpc3RzCisJdGhlIGNvbW1pdHMgaW4gdGhlIHJhbmdlIGxpa2UgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGBzdW1tYXJ5YCBkb2VzLgorCU9taXR0aW5nIHRoZSBgLS1zdWJtb2R1bGVgIG9wdGlvbiBvciBzcGVjaWZ5aW5nIGAtLXN1Ym1vZHVsZT1zaG9ydGAsCisJdXNlcyB0aGUgJ3Nob3J0JyBmb3JtYXQuIFRoaXMgZm9ybWF0IGp1c3Qgc2hvd3MgdGhlIG5hbWVzIG9mIHRoZSBjb21taXRzCisJYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSByYW5nZS4KKworLS1jb2xvcls9PHdoZW4+XTo6CisJU2hvdyBjb2xvcmVkIGRpZmYuCisJVGhlIHZhbHVlIG11c3QgYmUgYGFsd2F5c2AgKHRoZSBkZWZhdWx0IGZvciBgPHdoZW4+YCksIGBuZXZlcmAsIG9yIGBhdXRvYC4KKwlUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbmV2ZXJgLgoraWZkZWY6OmdpdC1kaWZmW10KKwlJdCBjYW4gYmUgY2hhbmdlZCBieSB0aGUgYGNvbG9yLnVpYCBhbmQgYGNvbG9yLmRpZmZgCisJY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KK2VuZGlmOjpnaXQtZGlmZltdCisKKy0tbm8tY29sb3I6OgorCVR1cm4gb2ZmIGNvbG9yZWQgZGlmZi4KK2lmZGVmOjpnaXQtZGlmZltdCisJVGhpcyBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorZW5kaWY6OmdpdC1kaWZmW10KKwlJdCBpcyB0aGUgc2FtZSBhcyBgLS1jb2xvcj1uZXZlcmAuCisKKy0td29yZC1kaWZmWz08bW9kZT5dOjoKKwlTaG93IGEgd29yZCBkaWZmLCB1c2luZyB0aGUgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3Jkcy4KKwlCeSBkZWZhdWx0LCB3b3JkcyBhcmUgZGVsaW1pdGVkIGJ5IHdoaXRlc3BhY2U7IHNlZQorCWAtLXdvcmQtZGlmZi1yZWdleGAgYmVsb3cuICBUaGUgPG1vZGU+IGRlZmF1bHRzIHRvICdwbGFpbicsIGFuZAorCW11c3QgYmUgb25lIG9mOgorKworLS0KK2NvbG9yOjoKKwlIaWdobGlnaHQgY2hhbmdlZCB3b3JkcyB1c2luZyBvbmx5IGNvbG9ycy4gIEltcGxpZXMgYC0tY29sb3JgLgorcGxhaW46OgorCVNob3cgd29yZHMgYXMgYFstcmVtb3ZlZC1dYCBhbmQgYHsrYWRkZWQrfWAuICBNYWtlcyBubworCWF0dGVtcHRzIHRvIGVzY2FwZSB0aGUgZGVsaW1pdGVycyBpZiB0aGV5IGFwcGVhciBpbiB0aGUgaW5wdXQsCisJc28gdGhlIG91dHB1dCBtYXkgYmUgYW1iaWd1b3VzLgorcG9yY2VsYWluOjoKKwlVc2UgYSBzcGVjaWFsIGxpbmUtYmFzZWQgZm9ybWF0IGludGVuZGVkIGZvciBzY3JpcHQKKwljb25zdW1wdGlvbi4gIEFkZGVkL3JlbW92ZWQvdW5jaGFuZ2VkIHJ1bnMgYXJlIHByaW50ZWQgaW4gdGhlCisJdXN1YWwgdW5pZmllZCBkaWZmIGZvcm1hdCwgc3RhcnRpbmcgd2l0aCBhIGArYC9gLWAvYCBgCisJY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgYW5kIGV4dGVuZGluZyB0byB0aGUKKwllbmQgb2YgdGhlIGxpbmUuICBOZXdsaW5lcyBpbiB0aGUgaW5wdXQgYXJlIHJlcHJlc2VudGVkIGJ5IGEKKwl0aWxkZSBgfmAgb24gYSBsaW5lIG9mIGl0cyBvd24uCitub25lOjoKKwlEaXNhYmxlIHdvcmQgZGlmZiBhZ2Fpbi4KKy0tCisrCitOb3RlIHRoYXQgZGVzcGl0ZSB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgbW9kZSwgY29sb3IgaXMgdXNlZCB0bworaGlnaGxpZ2h0IHRoZSBjaGFuZ2VkIHBhcnRzIGluIGFsbCBtb2RlcyBpZiBlbmFibGVkLgorCistLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+OjoKKwlVc2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMsIGluc3RlYWQgb2YgY29uc2lkZXJpbmcKKwlydW5zIG9mIG5vbi13aGl0ZXNwYWNlIHRvIGJlIGEgd29yZC4gIEFsc28gaW1wbGllcworCWAtLXdvcmQtZGlmZmAgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IGVuYWJsZWQuCisrCitFdmVyeSBub24tb3ZlcmxhcHBpbmcgbWF0Y2ggb2YgdGhlCis8cmVnZXg+IGlzIGNvbnNpZGVyZWQgYSB3b3JkLiAgQW55dGhpbmcgYmV0d2VlbiB0aGVzZSBtYXRjaGVzIGlzCitjb25zaWRlcmVkIHdoaXRlc3BhY2UgYW5kIGlnbm9yZWQoISkgZm9yIHRoZSBwdXJwb3NlcyBvZiBmaW5kaW5nCitkaWZmZXJlbmNlcy4gIFlvdSBtYXkgd2FudCB0byBhcHBlbmQgYHxbXls6c3BhY2U6XV1gIHRvIHlvdXIgcmVndWxhcgorZXhwcmVzc2lvbiB0byBtYWtlIHN1cmUgdGhhdCBpdCBtYXRjaGVzIGFsbCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgorQSBtYXRjaCB0aGF0IGNvbnRhaW5zIGEgbmV3bGluZSBpcyBzaWxlbnRseSB0cnVuY2F0ZWQoISkgYXQgdGhlCituZXdsaW5lLgorKworVGhlIHJlZ2V4IGNhbiBhbHNvIGJlIHNldCB2aWEgYSBkaWZmIGRyaXZlciBvciBjb25maWd1cmF0aW9uIG9wdGlvbiwgc2VlCitsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbMV0gb3IgbGlua2dpdDpnaXQtY29uZmlnWzFdLiAgR2l2aW5nIGl0IGV4cGxpY2l0bHkKK292ZXJyaWRlcyBhbnkgZGlmZiBkcml2ZXIgb3IgY29uZmlndXJhdGlvbiBzZXR0aW5nLiAgRGlmZiBkcml2ZXJzCitvdmVycmlkZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorCistLWNvbG9yLXdvcmRzWz08cmVnZXg+XTo6CisJRXF1aXZhbGVudCB0byBgLS13b3JkLWRpZmY9Y29sb3JgIHBsdXMgKGlmIGEgcmVnZXggd2FzCisJc3BlY2lmaWVkKSBgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PmAuCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKKy0tbm8tcmVuYW1lczo6CisJVHVybiBvZmYgcmVuYW1lIGRldGVjdGlvbiwgZXZlbiB3aGVuIHRoZSBjb25maWd1cmF0aW9uCisJZmlsZSBnaXZlcyB0aGUgZGVmYXVsdCB0byBkbyBzby4KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKy0tY2hlY2s6OgorCVdhcm4gaWYgY2hhbmdlcyBpbnRyb2R1Y2Ugd2hpdGVzcGFjZSBlcnJvcnMuICBXaGF0IGFyZQorCWNvbnNpZGVyZWQgd2hpdGVzcGFjZSBlcnJvcnMgaXMgY29udHJvbGxlZCBieSBgY29yZS53aGl0ZXNwYWNlYAorCWNvbmZpZ3VyYXRpb24uICBCeSBkZWZhdWx0LCB0cmFpbGluZyB3aGl0ZXNwYWNlcyAoaW5jbHVkaW5nCisJbGluZXMgdGhhdCBzb2xlbHkgY29uc2lzdCBvZiB3aGl0ZXNwYWNlcykgYW5kIGEgc3BhY2UgY2hhcmFjdGVyCisJdGhhdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRhYiBjaGFyYWN0ZXIgaW5zaWRlIHRoZQorCWluaXRpYWwgaW5kZW50IG9mIHRoZSBsaW5lIGFyZSBjb25zaWRlcmVkIHdoaXRlc3BhY2UgZXJyb3JzLgorCUV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIHByb2JsZW1zIGFyZSBmb3VuZC4gTm90IGNvbXBhdGlibGUKKwl3aXRoIC0tZXhpdC1jb2RlLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistLWZ1bGwtaW5kZXg6OgorCUluc3RlYWQgb2YgdGhlIGZpcnN0IGhhbmRmdWwgb2YgY2hhcmFjdGVycywgc2hvdyB0aGUgZnVsbAorCXByZS0gYW5kIHBvc3QtaW1hZ2UgYmxvYiBvYmplY3QgbmFtZXMgb24gdGhlICJpbmRleCIKKwlsaW5lIHdoZW4gZ2VuZXJhdGluZyBwYXRjaCBmb3JtYXQgb3V0cHV0LgorCistLWJpbmFyeTo6CisJSW4gYWRkaXRpb24gdG8gYC0tZnVsbC1pbmRleGAsIG91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQKKwljYW4gYmUgYXBwbGllZCB3aXRoIGBnaXQtYXBwbHlgLgorCistLWFiYnJldls9PG4+XTo6CisJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgb2JqZWN0CisJbmFtZSBpbiBkaWZmLXJhdyBmb3JtYXQgb3V0cHV0IGFuZCBkaWZmLXRyZWUgaGVhZGVyCisJbGluZXMsIHNob3cgb25seSBhIHBhcnRpYWwgcHJlZml4LiAgVGhpcyBpcworCWluZGVwZW5kZW50IG9mIHRoZSBgLS1mdWxsLWluZGV4YCBvcHRpb24gYWJvdmUsIHdoaWNoIGNvbnRyb2xzCisJdGhlIGRpZmYtcGF0Y2ggb3V0cHV0IGZvcm1hdC4gIE5vbiBkZWZhdWx0IG51bWJlciBvZgorCWRpZ2l0cyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggYC0tYWJicmV2PTxuPmAuCisKKy1CWzxuPl1bLzxtPl06OgorLS1icmVhay1yZXdyaXRlc1s9WzxuPl1bLzxtPl1dOjoKKwlCcmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kCisJY3JlYXRlLiBUaGlzIHNlcnZlcyB0d28gcHVycG9zZXM6CisrCitJdCBhZmZlY3RzIHRoZSB3YXkgYSBjaGFuZ2UgdGhhdCBhbW91bnRzIHRvIGEgdG90YWwgcmV3cml0ZSBvZiBhIGZpbGUKK25vdCBhcyBhIHNlcmllcyBvZiBkZWxldGlvbiBhbmQgaW5zZXJ0aW9uIG1peGVkIHRvZ2V0aGVyIHdpdGggYSB2ZXJ5CitmZXcgbGluZXMgdGhhdCBoYXBwZW4gdG8gbWF0Y2ggdGV4dHVhbGx5IGFzIHRoZSBjb250ZXh0LCBidXQgYXMgYQorc2luZ2xlIGRlbGV0aW9uIG9mIGV2ZXJ5dGhpbmcgb2xkIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIGluc2VydGlvbiBvZgorZXZlcnl0aGluZyBuZXcsIGFuZCB0aGUgbnVtYmVyIGBtYCBjb250cm9scyB0aGlzIGFzcGVjdCBvZiB0aGUgLUIKK29wdGlvbiAoZGVmYXVsdHMgdG8gNjAlKS4gYC1CLzcwJWAgc3BlY2lmaWVzIHRoYXQgbGVzcyB0aGFuIDMwJSBvZiB0aGUKK29yaWdpbmFsIHNob3VsZCByZW1haW4gaW4gdGhlIHJlc3VsdCBmb3IgZ2l0IHRvIGNvbnNpZGVyIGl0IGEgdG90YWwKK3Jld3JpdGUgKGkuZS4gb3RoZXJ3aXNlIHRoZSByZXN1bHRpbmcgcGF0Y2ggd2lsbCBiZSBhIHNlcmllcyBvZgorZGVsZXRpb24gYW5kIGluc2VydGlvbiBtaXhlZCB0b2dldGhlciB3aXRoIGNvbnRleHQgbGluZXMpLgorKworV2hlbiB1c2VkIHdpdGggLU0sIGEgdG90YWxseS1yZXdyaXR0ZW4gZmlsZSBpcyBhbHNvIGNvbnNpZGVyZWQgYXMgdGhlCitzb3VyY2Ugb2YgYSByZW5hbWUgKHVzdWFsbHkgLU0gb25seSBjb25zaWRlcnMgYSBmaWxlIHRoYXQgZGlzYXBwZWFyZWQKK2FzIHRoZSBzb3VyY2Ugb2YgYSByZW5hbWUpLCBhbmQgdGhlIG51bWJlciBgbmAgY29udHJvbHMgdGhpcyBhc3BlY3Qgb2YKK3RoZSAtQiBvcHRpb24gKGRlZmF1bHRzIHRvIDUwJSkuIGAtQjIwJWAgc3BlY2lmaWVzIHRoYXQgYSBjaGFuZ2Ugd2l0aAorYWRkaXRpb24gYW5kIGRlbGV0aW9uIGNvbXBhcmVkIHRvIDIwJSBvciBtb3JlIG9mIHRoZSBmaWxlJ3Mgc2l6ZSBhcmUKK2VsaWdpYmxlIGZvciBiZWluZyBwaWNrZWQgdXAgYXMgYSBwb3NzaWJsZSBzb3VyY2Ugb2YgYSByZW5hbWUgdG8KK2Fub3RoZXIgZmlsZS4KKworLU1bPG4+XTo6CistLWZpbmQtcmVuYW1lc1s9PG4+XTo6CitpZm5kZWY6OmdpdC1sb2dbXQorCURldGVjdCByZW5hbWVzLgorZW5kaWY6OmdpdC1sb2dbXQoraWZkZWY6OmdpdC1sb2dbXQorCUlmIGdlbmVyYXRpbmcgZGlmZnMsIGRldGVjdCBhbmQgcmVwb3J0IHJlbmFtZXMgZm9yIGVhY2ggY29tbWl0LgorCUZvciBmb2xsb3dpbmcgZmlsZXMgYWNyb3NzIHJlbmFtZXMgd2hpbGUgdHJhdmVyc2luZyBoaXN0b3J5LCBzZWUKKwlgLS1mb2xsb3dgLgorZW5kaWY6OmdpdC1sb2dbXQorCUlmIGBuYCBpcyBzcGVjaWZpZWQsIGl0IGlzIGEgdGhyZXNob2xkIG9uIHRoZSBzaW1pbGFyaXR5CisJaW5kZXggKGkuZS4gYW1vdW50IG9mIGFkZGl0aW9uL2RlbGV0aW9ucyBjb21wYXJlZCB0byB0aGUKKwlmaWxlJ3Mgc2l6ZSkuIEZvciBleGFtcGxlLCBgLU05MCVgIG1lYW5zIGdpdCBzaG91bGQgY29uc2lkZXIgYQorCWRlbGV0ZS9hZGQgcGFpciB0byBiZSBhIHJlbmFtZSBpZiBtb3JlIHRoYW4gOTAlIG9mIHRoZSBmaWxlCisJaGFzbid0IGNoYW5nZWQuCisKKy1DWzxuPl06OgorLS1maW5kLWNvcGllc1s9PG4+XTo6CisJRGV0ZWN0IGNvcGllcyBhcyB3ZWxsIGFzIHJlbmFtZXMuICBTZWUgYWxzbyBgLS1maW5kLWNvcGllcy1oYXJkZXJgLgorCUlmIGBuYCBpcyBzcGVjaWZpZWQsIGl0IGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciBgLU08bj5gLgorCistLWZpbmQtY29waWVzLWhhcmRlcjo6CisJRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGJ5IGRlZmF1bHQsIGAtQ2Agb3B0aW9uIGZpbmRzIGNvcGllcyBvbmx5CisJaWYgdGhlIG9yaWdpbmFsIGZpbGUgb2YgdGhlIGNvcHkgd2FzIG1vZGlmaWVkIGluIHRoZSBzYW1lCisJY2hhbmdlc2V0LiAgVGhpcyBmbGFnIG1ha2VzIHRoZSBjb21tYW5kCisJaW5zcGVjdCB1bm1vZGlmaWVkIGZpbGVzIGFzIGNhbmRpZGF0ZXMgZm9yIHRoZSBzb3VyY2Ugb2YKKwljb3B5LiAgVGhpcyBpcyBhIHZlcnkgZXhwZW5zaXZlIG9wZXJhdGlvbiBmb3IgbGFyZ2UKKwlwcm9qZWN0cywgc28gdXNlIGl0IHdpdGggY2F1dGlvbi4gIEdpdmluZyBtb3JlIHRoYW4gb25lCisJYC1DYCBvcHRpb24gaGFzIHRoZSBzYW1lIGVmZmVjdC4KKworLUQ6OgorLS1pcnJldmVyc2libGUtZGVsZXRlOjoKKwlPbWl0IHRoZSBwcmVpbWFnZSBmb3IgZGVsZXRlcywgaS5lLiBwcmludCBvbmx5IHRoZSBoZWFkZXIgYnV0IG5vdAorCXRoZSBkaWZmIGJldHdlZW4gdGhlIHByZWltYWdlIGFuZCBgL2Rldi9udWxsYC4gVGhlIHJlc3VsdGluZyBwYXRjaAorCWlzIG5vdCBtZWFudCB0byBiZSBhcHBsaWVkIHdpdGggYHBhdGNoYCBub3IgYGdpdCBhcHBseWA7IHRoaXMgaXMKKwlzb2xlbHkgZm9yIHBlb3BsZSB3aG8gd2FudCB0byBqdXN0IGNvbmNlbnRyYXRlIG9uIHJldmlld2luZyB0aGUKKwl0ZXh0IGFmdGVyIHRoZSBjaGFuZ2UuIEluIGFkZGl0aW9uLCB0aGUgb3V0cHV0IG9idmlvdXNseSBsYWNrCisJZW5vdWdoIGluZm9ybWF0aW9uIHRvIGFwcGx5IHN1Y2ggYSBwYXRjaCBpbiByZXZlcnNlLCBldmVuIG1hbnVhbGx5LAorCWhlbmNlIHRoZSBuYW1lIG9mIHRoZSBvcHRpb24uCisrCitXaGVuIHVzZWQgdG9nZXRoZXIgd2l0aCBgLUJgLCBvbWl0IGFsc28gdGhlIHByZWltYWdlIGluIHRoZSBkZWxldGlvbiBwYXJ0CitvZiBhIGRlbGV0ZS9jcmVhdGUgcGFpci4KKworLWw8bnVtPjo6CisJVGhlIGAtTWAgYW5kIGAtQ2Agb3B0aW9ucyByZXF1aXJlIE8obl4yKSBwcm9jZXNzaW5nIHRpbWUgd2hlcmUgbgorCWlzIHRoZSBudW1iZXIgb2YgcG90ZW50aWFsIHJlbmFtZS9jb3B5IHRhcmdldHMuICBUaGlzCisJb3B0aW9uIHByZXZlbnRzIHJlbmFtZS9jb3B5IGRldGVjdGlvbiBmcm9tIHJ1bm5pbmcgaWYKKwl0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyB0aGUgc3BlY2lmaWVkCisJbnVtYmVyLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLS1kaWZmLWZpbHRlcj1bKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV06OgorCVNlbGVjdCBvbmx5IGZpbGVzIHRoYXQgYXJlIEFkZGVkIChgQWApLCBDb3BpZWQgKGBDYCksCisJRGVsZXRlZCAoYERgKSwgTW9kaWZpZWQgKGBNYCksIFJlbmFtZWQgKGBSYCksIGhhdmUgdGhlaXIKKwl0eXBlIChpLmUuIHJlZ3VsYXIgZmlsZSwgc3ltbGluaywgc3VibW9kdWxlLCAuLi4pIGNoYW5nZWQgKGBUYCksCisJYXJlIFVubWVyZ2VkIChgVWApLCBhcmUKKwlVbmtub3duIChgWGApLCBvciBoYXZlIGhhZCB0aGVpciBwYWlyaW5nIEJyb2tlbiAoYEJgKS4KKwlBbnkgY29tYmluYXRpb24gb2YgdGhlIGZpbHRlciBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgbm9uZSkgY2FuIGJlIHVzZWQuCisJV2hlbiBgKmAgKEFsbC1vci1ub25lKSBpcyBhZGRlZCB0byB0aGUgY29tYmluYXRpb24sIGFsbAorCXBhdGhzIGFyZSBzZWxlY3RlZCBpZiB0aGVyZSBpcyBhbnkgZmlsZSB0aGF0IG1hdGNoZXMKKwlvdGhlciBjcml0ZXJpYSBpbiB0aGUgY29tcGFyaXNvbjsgaWYgdGhlcmUgaXMgbm8gZmlsZQorCXRoYXQgbWF0Y2hlcyBvdGhlciBjcml0ZXJpYSwgbm90aGluZyBpcyBzZWxlY3RlZC4KKworLVM8c3RyaW5nPjo6CisJTG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBpbnRyb2R1Y2Ugb3IgcmVtb3ZlIGFuIGluc3RhbmNlIG9mCisJPHN0cmluZz4uIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBzdHJpbmcgc2ltcGx5CisJYXBwZWFyaW5nIGluIGRpZmYgb3V0cHV0OyBzZWUgdGhlICdwaWNrYXhlJyBlbnRyeSBpbgorCWxpbmtnaXQ6Z2l0ZGlmZmNvcmVbN10gZm9yIG1vcmUgZGV0YWlscy4KKworLUc8cmVnZXg+OjoKKwlMb29rIGZvciBkaWZmZXJlbmNlcyB3aG9zZSBhZGRlZCBvciByZW1vdmVkIGxpbmUgbWF0Y2hlcworCXRoZSBnaXZlbiA8cmVnZXg+LgorCistLXBpY2theGUtYWxsOjoKKwlXaGVuIGAtU2Agb3IgYC1HYCBmaW5kcyBhIGNoYW5nZSwgc2hvdyBhbGwgdGhlIGNoYW5nZXMgaW4gdGhhdAorCWNoYW5nZXNldCwgbm90IGp1c3QgdGhlIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgY2hhbmdlCisJaW4gPHN0cmluZz4uCisKKy0tcGlja2F4ZS1yZWdleDo6CisJTWFrZSB0aGUgPHN0cmluZz4gbm90IGEgcGxhaW4gc3RyaW5nIGJ1dCBhbiBleHRlbmRlZCBQT1NJWAorCXJlZ2V4IHRvIG1hdGNoLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistTzxvcmRlcmZpbGU+OjoKKwlPdXRwdXQgdGhlIHBhdGNoIGluIHRoZSBvcmRlciBzcGVjaWZpZWQgaW4gdGhlCisJPG9yZGVyZmlsZT4sIHdoaWNoIGhhcyBvbmUgc2hlbGwgZ2xvYiBwYXR0ZXJuIHBlciBsaW5lLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLVI6OgorCVN3YXAgdHdvIGlucHV0czsgdGhhdCBpcywgc2hvdyBkaWZmZXJlbmNlcyBmcm9tIGluZGV4IG9yCisJb24tZGlzayBmaWxlIHRvIHRyZWUgY29udGVudHMuCisKKy0tcmVsYXRpdmVbPTxwYXRoPl06OgorCVdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QsIGl0IGNhbiBiZQorCXRvbGQgdG8gZXhjbHVkZSBjaGFuZ2VzIG91dHNpZGUgdGhlIGRpcmVjdG9yeSBhbmQgc2hvdworCXBhdGhuYW1lcyByZWxhdGl2ZSB0byBpdCB3aXRoIHRoaXMgb3B0aW9uLiAgV2hlbiB5b3UgYXJlCisJbm90IGluIGEgc3ViZGlyZWN0b3J5IChlLmcuIGluIGEgYmFyZSByZXBvc2l0b3J5KSwgeW91CisJY2FuIG5hbWUgd2hpY2ggc3ViZGlyZWN0b3J5IHRvIG1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZQorCXRvIGJ5IGdpdmluZyBhIDxwYXRoPiBhcyBhbiBhcmd1bWVudC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLWE6OgorLS10ZXh0OjoKKwlUcmVhdCBhbGwgZmlsZXMgYXMgdGV4dC4KKworLS1pZ25vcmUtc3BhY2UtYXQtZW9sOjoKKwlJZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGF0IEVPTC4KKworLWI6OgorLS1pZ25vcmUtc3BhY2UtY2hhbmdlOjoKKwlJZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZS4gIFRoaXMgaWdub3JlcyB3aGl0ZXNwYWNlCisJYXQgbGluZSBlbmQsIGFuZCBjb25zaWRlcnMgYWxsIG90aGVyIHNlcXVlbmNlcyBvZiBvbmUgb3IKKwltb3JlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBiZSBlcXVpdmFsZW50LgorCistdzo6CistLWlnbm9yZS1hbGwtc3BhY2U6OgorCUlnbm9yZSB3aGl0ZXNwYWNlIHdoZW4gY29tcGFyaW5nIGxpbmVzLiAgVGhpcyBpZ25vcmVzCisJZGlmZmVyZW5jZXMgZXZlbiBpZiBvbmUgbGluZSBoYXMgd2hpdGVzcGFjZSB3aGVyZSB0aGUgb3RoZXIKKwlsaW5lIGhhcyBub25lLgorCistLWludGVyLWh1bmstY29udGV4dD08bGluZXM+OjoKKwlTaG93IHRoZSBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcywgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIKKwlvZiBsaW5lcywgdGhlcmVieSBmdXNpbmcgaHVua3MgdGhhdCBhcmUgY2xvc2UgdG8gZWFjaCBvdGhlci4KKworLVc6OgorLS1mdW5jdGlvbi1jb250ZXh0OjoKKwlTaG93IHdob2xlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBvZiBjaGFuZ2VzLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQoraWZuZGVmOjpnaXQtbG9nW10KKy0tZXhpdC1jb2RlOjoKKwlNYWtlIHRoZSBwcm9ncmFtIGV4aXQgd2l0aCBjb2RlcyBzaW1pbGFyIHRvIGRpZmYoMSkuCisJVGhhdCBpcywgaXQgZXhpdHMgd2l0aCAxIGlmIHRoZXJlIHdlcmUgZGlmZmVyZW5jZXMgYW5kCisJMCBtZWFucyBubyBkaWZmZXJlbmNlcy4KKworLS1xdWlldDo6CisJRGlzYWJsZSBhbGwgb3V0cHV0IG9mIHRoZSBwcm9ncmFtLiBJbXBsaWVzIGAtLWV4aXQtY29kZWAuCitlbmRpZjo6Z2l0LWxvZ1tdCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKKy0tZXh0LWRpZmY6OgorCUFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkLiBJZiB5b3Ugc2V0IGFuCisJZXh0ZXJuYWwgZGlmZiBkcml2ZXIgd2l0aCBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0sIHlvdSBuZWVkCisJdG8gdXNlIHRoaXMgb3B0aW9uIHdpdGggbGlua2dpdDpnaXQtbG9nWzFdIGFuZCBmcmllbmRzLgorCistLW5vLWV4dC1kaWZmOjoKKwlEaXNhbGxvdyBleHRlcm5hbCBkaWZmIGRyaXZlcnMuCisKKy0tdGV4dGNvbnY6OgorLS1uby10ZXh0Y29udjo6CisJQWxsb3cgKG9yIGRpc2FsbG93KSBleHRlcm5hbCB0ZXh0IGNvbnZlcnNpb24gZmlsdGVycyB0byBiZSBydW4KKwl3aGVuIGNvbXBhcmluZyBiaW5hcnkgZmlsZXMuIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yCisJZGV0YWlscy4gQmVjYXVzZSB0ZXh0Y29udiBmaWx0ZXJzIGFyZSB0eXBpY2FsbHkgYSBvbmUtd2F5CisJY29udmVyc2lvbiwgdGhlIHJlc3VsdGluZyBkaWZmIGlzIHN1aXRhYmxlIGZvciBodW1hbgorCWNvbnN1bXB0aW9uLCBidXQgY2Fubm90IGJlIGFwcGxpZWQuIEZvciB0aGlzIHJlYXNvbiwgdGV4dGNvbnYKKwlmaWx0ZXJzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgb25seSBmb3IgbGlua2dpdDpnaXQtZGlmZlsxXSBhbmQKKwlsaW5rZ2l0OmdpdC1sb2dbMV0sIGJ1dCBub3QgZm9yIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSBvcgorCWRpZmYgcGx1bWJpbmcgY29tbWFuZHMuCisKKy0taWdub3JlLXN1Ym1vZHVsZXNbPTx3aGVuPl06OgorCUlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbi4gPHdoZW4+IGNhbiBiZQorCWVpdGhlciAibm9uZSIsICJ1bnRyYWNrZWQiLCAiZGlydHkiIG9yICJhbGwiLCB3aGljaCBpcyB0aGUgZGVmYXVsdAorCVVzaW5nICJub25lIiB3aWxsIGNvbnNpZGVyIHRoZSBzdWJtb2R1bGUgbW9kaWZpZWQgd2hlbiBpdCBlaXRoZXIgY29udGFpbnMKKwl1bnRyYWNrZWQgb3IgbW9kaWZpZWQgZmlsZXMgb3IgaXRzIEhFQUQgZGlmZmVycyBmcm9tIHRoZSBjb21taXQgcmVjb3JkZWQKKwlpbiB0aGUgc3VwZXJwcm9qZWN0IGFuZCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgc2V0dGluZ3Mgb2YgdGhlCisJJ2lnbm9yZScgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBvciBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0uIFdoZW4KKwkidW50cmFja2VkIiBpcyB1c2VkIHN1Ym1vZHVsZXMgYXJlIG5vdCBjb25zaWRlcmVkIGRpcnR5IHdoZW4gdGhleSBvbmx5CisJY29udGFpbiB1bnRyYWNrZWQgY29udGVudCAoYnV0IHRoZXkgYXJlIHN0aWxsIHNjYW5uZWQgZm9yIG1vZGlmaWVkCisJY29udGVudCkuIFVzaW5nICJkaXJ0eSIgaWdub3JlcyBhbGwgY2hhbmdlcyB0byB0aGUgd29yayB0cmVlIG9mIHN1Ym1vZHVsZXMsCisJb25seSBjaGFuZ2VzIHRvIHRoZSBjb21taXRzIHN0b3JlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGFyZSBzaG93biAodGhpcyB3YXMKKwl0aGUgYmVoYXZpb3IgdW50aWwgMS43LjApLiBVc2luZyAiYWxsIiBoaWRlcyBhbGwgY2hhbmdlcyB0byBzdWJtb2R1bGVzLgorCistLXNyYy1wcmVmaXg9PHByZWZpeD46OgorCVNob3cgdGhlIGdpdmVuIHNvdXJjZSBwcmVmaXggaW5zdGVhZCBvZiAiYS8iLgorCistLWRzdC1wcmVmaXg9PHByZWZpeD46OgorCVNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mICJiLyIuCisKKy0tbm8tcHJlZml4OjoKKwlEbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeC4KKworRm9yIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24gb24gdGhlc2UgY29tbW9uIG9wdGlvbnMsIHNlZSBhbHNvCitsaW5rZ2l0OmdpdGRpZmZjb3JlWzddLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb2Nib29rLXhzbC5jc3MgYi9Eb2N1bWVudGF0aW9uL2RvY2Jvb2steHNsLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTFjOGYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kb2Nib29rLXhzbC5jc3MKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgIENTUyBzdHlsZXNoZWV0IGZvciBYSFRNTCBwcm9kdWNlZCBieSBEb2NCb29rIFhTTCBzdHlsZXNoZWV0cy4KKyAgVGVzdGVkIHdpdGggWFNMIHN0eWxlc2hlZXRzIDEuNjEuMiwgMS42Ny4yCisqLworCitzcGFuLnN0cm9uZyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitib2R5IGJsb2NrcXVvdGUgeworICBtYXJnaW4tdG9wOiAuNzVlbTsKKyAgbGluZS1oZWlnaHQ6IDEuNTsKKyAgbWFyZ2luLWJvdHRvbTogLjc1ZW07Cit9CisKK2h0bWwgYm9keSB7CisgIG1hcmdpbjogMWVtIDUlIDFlbSA1JTsKKyAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Cit9CisKK2JvZHkgZGl2IHsKKyAgbWFyZ2luOiAwOworfQorCitoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LAorZGl2LnRvYyBwIGIsCitkaXYubGlzdC1vZi1maWd1cmVzIHAgYiwKK2Rpdi5saXN0LW9mLXRhYmxlcyBwIGIsCitkaXYuYWJzdHJhY3QgcC50aXRsZQoreworICBjb2xvcjogIzUyN2JiZDsKKyAgZm9udC1mYW1pbHk6IHRhaG9tYSwgdmVyZGFuYSwgc2Fucy1zZXJpZjsKK30KKworZGl2LnRvYyBwOmZpcnN0LWNoaWxkLAorZGl2Lmxpc3Qtb2YtZmlndXJlcyBwOmZpcnN0LWNoaWxkLAorZGl2Lmxpc3Qtb2YtdGFibGVzIHA6Zmlyc3QtY2hpbGQsCitkaXYuZXhhbXBsZSBwLnRpdGxlCit7CisgIG1hcmdpbi1ib3R0b206IDAuMmVtOworfQorCitib2R5IGgxIHsKKyAgbWFyZ2luOiAuMGVtIDAgMCAtNCU7CisgIGxpbmUtaGVpZ2h0OiAxLjM7CisgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBzaWx2ZXI7Cit9CisKK2JvZHkgaDIgeworICBtYXJnaW46IDAuNWVtIDAgMCAtNCU7CisgIGxpbmUtaGVpZ2h0OiAxLjM7CisgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBzaWx2ZXI7Cit9CisKK2JvZHkgaDMgeworICBtYXJnaW46IC44ZW0gMCAwIC0zJTsKKyAgbGluZS1oZWlnaHQ6IDEuMzsKK30KKworYm9keSBoNCB7CisgIG1hcmdpbjogLjhlbSAwIDAgLTMlOworICBsaW5lLWhlaWdodDogMS4zOworfQorCitib2R5IGg1IHsKKyAgbWFyZ2luOiAuOGVtIDAgMCAtMiU7CisgIGxpbmUtaGVpZ2h0OiAxLjM7Cit9CisKK2JvZHkgaDYgeworICBtYXJnaW46IC44ZW0gMCAwIC0xJTsKKyAgbGluZS1oZWlnaHQ6IDEuMzsKK30KKworYm9keSBociB7CisgIGJvcmRlcjogbm9uZTsgLyogQnJva2VuIG9uIElFNiAqLworfQorZGl2LmZvb3Rub3RlcyBociB7CisgIGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsKK30KKworZGl2Lm5hdmhlYWRlciB0aCwgZGl2Lm5hdmhlYWRlciB0ZCwgZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworICBmb250LXNpemU6IDAuOWVtOworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6ICM1MjdiYmQ7Cit9CitkaXYubmF2aGVhZGVyIGltZywgZGl2Lm5hdmZvb3RlciBpbWcgeworICBib3JkZXItc3R5bGU6IG5vbmU7Cit9CitkaXYubmF2aGVhZGVyIGEsIGRpdi5uYXZmb290ZXIgYSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOworfQorCitib2R5IHRkIHsKKyAgbGluZS1oZWlnaHQ6IDEuMgorfQorCitib2R5IHRoIHsKKyAgbGluZS1oZWlnaHQ6IDEuMjsKK30KKworb2wgeworICBsaW5lLWhlaWdodDogMS4yOworfQorCit1bCwgYm9keSBkaXIsIGJvZHkgbWVudSB7CisgIGxpbmUtaGVpZ2h0OiAxLjI7Cit9CisKK2h0bWwgeworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7Cit9CisKK2JvZHkgaDEsIGJvZHkgaDIsIGJvZHkgaDMsIGJvZHkgaDQsIGJvZHkgaDUsIGJvZHkgaDYgeworICBtYXJnaW4tbGVmdDogMAorfQorCitib2R5IHByZSB7CisgIG1hcmdpbjogMC41ZW0gMTAlIDAuNWVtIDFlbTsKKyAgbGluZS1oZWlnaHQ6IDEuMDsKKyAgY29sb3I6IG5hdnk7Cit9CisKK3R0LmxpdGVyYWwsIGNvZGUubGl0ZXJhbCB7CisgIGNvbG9yOiBuYXZ5OworICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKK30KKworY29kZS5saXRlcmFsOmJlZm9yZSB7IGNvbnRlbnQ6ICInIjsgfQorY29kZS5saXRlcmFsOmFmdGVyIHsgY29udGVudDogIiciOyB9CisKK2VtIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworICBjb2xvcjogIzA2NDsKK30KKworZGl2LmxpdGVyYWxsYXlvdXQgcCB7CisgIHBhZGRpbmc6IDBlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKK2Rpdi5saXRlcmFsbGF5b3V0IHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgbWFyZ2luOiAwZW07CisgIGNvbG9yOiBuYXZ5OworICBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7CisgIGJhY2tncm91bmQ6ICNmNGY0ZjQ7CisgIHBhZGRpbmc6IDAuNWVtOworfQorCisucHJvZ3JhbWxpc3RpbmcsIC5zY3JlZW4geworICBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7CisgIGJhY2tncm91bmQ6ICNmNGY0ZjQ7CisgIG1hcmdpbjogMC41ZW0gMTAlIDAuNWVtIDA7CisgIHBhZGRpbmc6IDAuNWVtIDFlbTsKK30KKworZGl2LnNpZGViYXIgeworICBiYWNrZ3JvdW5kOiAjZmZmZmVlOworICBtYXJnaW46IDEuMGVtIDEwJSAwLjVlbSAwOworICBwYWRkaW5nOiAwLjVlbSAxZW07CisgIGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsKK30KK2Rpdi5zaWRlYmFyICogeyBwYWRkaW5nOiAwOyB9CitkaXYuc2lkZWJhciBkaXYgeyBtYXJnaW46IDA7IH0KK2Rpdi5zaWRlYmFyIHAudGl0bGUgeworICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuMmVtOworfQorCitkaXYuYmlibGlvbWl4ZWQgeworICBtYXJnaW46IDAuNWVtIDUlIDAuNWVtIDFlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGR0IHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CitkaXYuZ2xvc3NhcnkgZGQgcCB7CisgIG1hcmdpbi10b3A6IDAuMmVtOworfQorCitkbCB7CisgIG1hcmdpbjogLjhlbSAwOworICBsaW5lLWhlaWdodDogMS4yOworfQorCitkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCitkdCBzcGFuLnRlcm0geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIGNvbG9yOiBuYXZ5OworfQorCitkaXYudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwOworfQorCitkaXYuaXRlbWl6ZWRsaXN0IGxpLCBkaXYub3JkZXJlZGxpc3QgbGkgeworICBtYXJnaW4tbGVmdDogLTAuOGVtOworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKwordWwsIG9sIHsKKyAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlOworfQorCitkaXYuc2lkZWJhciB1bCwgZGl2LnNpZGViYXIgb2wgeworICAgIG1hcmdpbi1sZWZ0OiAyLjhlbTsKK30KKworZGl2Lml0ZW1pemVkbGlzdCBwLnRpdGxlLAorZGl2Lm9yZGVyZWRsaXN0IHAudGl0bGUsCitkaXYudmFyaWFibGVsaXN0IHAudGl0bGUKK3sKKyAgbWFyZ2luLWJvdHRvbTogLTAuOGVtOworfQorCitkaXYucmV2aGlzdG9yeSB0YWJsZSB7CisgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisgIGJvcmRlcjogbm9uZTsKK30KK2Rpdi5yZXZoaXN0b3J5IHRoIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogIzUyN2JiZDsKKyAgZm9udC1mYW1pbHk6IHRhaG9tYSwgdmVyZGFuYSwgc2Fucy1zZXJpZjsKK30KK2Rpdi5yZXZoaXN0b3J5IHRkIHsKKyAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOworfQorCisvKiBLZWVwIFRPQyBhbmQgaW5kZXggbGluZXMgY2xvc2UgdG9nZXRoZXIuICovCitkaXYudG9jIGRsLCBkaXYudG9jIGR0LAorZGl2Lmxpc3Qtb2YtZmlndXJlcyBkbCwgZGl2Lmxpc3Qtb2YtZmlndXJlcyBkdCwKK2Rpdi5saXN0LW9mLXRhYmxlcyBkbCwgZGl2Lmxpc3Qtb2YtdGFibGVzIGR0LAorZGl2LmluZGV4ZGl2IGRsLCBkaXYuaW5kZXhkaXYgZHQKK3sKKyAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKKyAgbWFyZ2luLXRvcDogMDsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KKworLyoKKyAgVGFibGUgc3R5bGluZyBkb2VzIG5vdCB3b3JrIGJlY2F1c2Ugb2Ygb3ZlcnJpZGluZyBhdHRyaWJ1dGVzIGluCisgIGdlbmVyYXRlZCBIVE1MLgorKi8KK2Rpdi50YWJsZSB0YWJsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlIHRhYmxlCit7CisgICAgbWFyZ2luLWxlZnQ6IDA7CisgICAgbWFyZ2luLXJpZ2h0OiA1JTsKKyAgICBtYXJnaW4tYm90dG9tOiAwLjhlbTsKK30KK2Rpdi5pbmZvcm1hbHRhYmxlIHRhYmxlCit7CisgICAgbWFyZ2luLXRvcDogMC40ZW0KK30KK2Rpdi50YWJsZSB0aGVhZCwKK2Rpdi50YWJsZSB0Zm9vdCwKK2Rpdi50YWJsZSB0Ym9keSwKK2Rpdi5pbmZvcm1hbHRhYmxlIHRoZWFkLAorZGl2LmluZm9ybWFsdGFibGUgdGZvb3QsCitkaXYuaW5mb3JtYWx0YWJsZSB0Ym9keQoreworICAgIC8qIE5vIGVmZmVjdCBpbiBJRTYuICovCisgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICM1MjdiYmQ7CisgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM1MjdiYmQ7Cit9CitkaXYudGFibGUgdGhlYWQsIGRpdi50YWJsZSB0Zm9vdCwKK2Rpdi5pbmZvcm1hbHRhYmxlIHRoZWFkLCBkaXYuaW5mb3JtYWx0YWJsZSB0Zm9vdAoreworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitkaXYubWVkaWFvYmplY3QgaW1nIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7CisgICAgbWFyZ2luLWJvdHRvbTogMC44ZW07Cit9CitkaXYuZmlndXJlIHAudGl0bGUsCitkaXYudGFibGUgcC50aXRsZQoreworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDAuNGVtOworfQorCitAbWVkaWEgcHJpbnQgeworICBkaXYubmF2aGVhZGVyLCBkaXYubmF2Zm9vdGVyIHsgZGlzcGxheTogbm9uZTsgfQorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb2Nib29rLnhzbCBiL0RvY3VtZW50YXRpb24vZG9jYm9vay54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4YjA1YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZG9jYm9vay54c2wKQEAgLTAsMCArMSw4IEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249JzEuMCc+CisgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQvaHRtbC9kb2Nib29rLnhzbCIvPgorIDx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIKKyAgICAgZW5jb2Rpbmc9IlVURi04IiBpbmRlbnQ9Im5vIgorICAgICBkb2N0eXBlLXB1YmxpYz0iLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIKKyAgICAgZG9jdHlwZS1zeXN0ZW09Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiIC8+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ldmVyeWRheS50eHQgYi9Eb2N1bWVudGF0aW9uL2V2ZXJ5ZGF5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDgzMzdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ldmVyeWRheS50eHQKQEAgLTAsMCArMSw0MTMgQEAKK0V2ZXJ5ZGF5IEdJVCBXaXRoIDIwIENvbW1hbmRzIE9yIFNvCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis8PEluZGl2aWR1YWwgRGV2ZWxvcGVyIChTdGFuZGFsb25lKT4+IGNvbW1hbmRzIGFyZSBlc3NlbnRpYWwgZm9yCithbnlib2R5IHdobyBtYWtlcyBhIGNvbW1pdCwgZXZlbiBmb3Igc29tZWJvZHkgd2hvIHdvcmtzIGFsb25lLgorCitJZiB5b3Ugd29yayB3aXRoIG90aGVyIHBlb3BsZSwgeW91IHdpbGwgbmVlZCBjb21tYW5kcyBsaXN0ZWQgaW4KK3RoZSA8PEluZGl2aWR1YWwgRGV2ZWxvcGVyIChQYXJ0aWNpcGFudCk+PiBzZWN0aW9uIGFzIHdlbGwuCisKK1Blb3BsZSB3aG8gcGxheSB0aGUgPDxJbnRlZ3JhdG9yPj4gcm9sZSBuZWVkIHRvIGxlYXJuIHNvbWUgbW9yZQorY29tbWFuZHMgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLgorCis8PFJlcG9zaXRvcnkgQWRtaW5pc3RyYXRpb24+PiBjb21tYW5kcyBhcmUgZm9yIHN5c3RlbQorYWRtaW5pc3RyYXRvcnMgd2hvIGFyZSByZXNwb25zaWJsZSBmb3IgdGhlIGNhcmUgYW5kIGZlZWRpbmcKK29mIGdpdCByZXBvc2l0b3JpZXMuCisKKworSW5kaXZpZHVhbCBEZXZlbG9wZXIgKFN0YW5kYWxvbmUpW1tJbmRpdmlkdWFsIERldmVsb3BlciAoU3RhbmRhbG9uZSldXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHN0YW5kYWxvbmUgaW5kaXZpZHVhbCBkZXZlbG9wZXIgZG9lcyBub3QgZXhjaGFuZ2UgcGF0Y2hlcyB3aXRoCitvdGhlciBwZW9wbGUsIGFuZCB3b3JrcyBhbG9uZSBpbiBhIHNpbmdsZSByZXBvc2l0b3J5LCB1c2luZyB0aGUKK2ZvbGxvd2luZyBjb21tYW5kcy4KKworICAqIGxpbmtnaXQ6Z2l0LWluaXRbMV0gdG8gY3JlYXRlIGEgbmV3IHJlcG9zaXRvcnkuCisKKyAgKiBsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXSB0byBzZWUgd2hlcmUgeW91IGFyZS4KKworICAqIGxpbmtnaXQ6Z2l0LWxvZ1sxXSB0byBzZWUgd2hhdCBoYXBwZW5lZC4KKworICAqIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIGFuZCBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gdG8gc3dpdGNoCisgICAgYnJhbmNoZXMuCisKKyAgKiBsaW5rZ2l0OmdpdC1hZGRbMV0gdG8gbWFuYWdlIHRoZSBpbmRleCBmaWxlLgorCisgICogbGlua2dpdDpnaXQtZGlmZlsxXSBhbmQgbGlua2dpdDpnaXQtc3RhdHVzWzFdIHRvIHNlZSB3aGF0CisgICAgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGRvaW5nLgorCisgICogbGlua2dpdDpnaXQtY29tbWl0WzFdIHRvIGFkdmFuY2UgdGhlIGN1cnJlbnQgYnJhbmNoLgorCisgICogbGlua2dpdDpnaXQtcmVzZXRbMV0gYW5kIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdICh3aXRoCisgICAgcGF0aG5hbWUgcGFyYW1ldGVycykgdG8gdW5kbyBjaGFuZ2VzLgorCisgICogbGlua2dpdDpnaXQtbWVyZ2VbMV0gdG8gbWVyZ2UgYmV0d2VlbiBsb2NhbCBicmFuY2hlcy4KKworICAqIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXSB0byBtYWludGFpbiB0b3BpYyBicmFuY2hlcy4KKworICAqIGxpbmtnaXQ6Z2l0LXRhZ1sxXSB0byBtYXJrIGtub3duIHBvaW50LgorCitFeGFtcGxlcworfn5+fn5+fn4KKworVXNlIGEgdGFyYmFsbCBhcyBhIHN0YXJ0aW5nIHBvaW50IGZvciBhIG5ldyByZXBvc2l0b3J5Ljo6CisrCistLS0tLS0tLS0tLS0KKyQgdGFyIHp4ZiBmcm90ei50YXIuZ3oKKyQgY2QgZnJvdHoKKyQgZ2l0IGluaXQKKyQgZ2l0IGFkZCAuIDwxPgorJCBnaXQgY29tbWl0IC1tICJpbXBvcnQgb2YgZnJvdHogc291cmNlIHRyZWUuIgorJCBnaXQgdGFnIHYyLjQzIDwyPgorLS0tLS0tLS0tLS0tCisrCis8MT4gYWRkIGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorPDI+IG1ha2UgYSBsaWdodHdlaWdodCwgdW5hbm5vdGF0ZWQgdGFnLgorCitDcmVhdGUgYSB0b3BpYyBicmFuY2ggYW5kIGRldmVsb3AuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgYWxzYS1hdWRpbyA8MT4KKyQgZWRpdC9jb21waWxlL3Rlc3QKKyQgZ2l0IGNoZWNrb3V0IC0tIGN1cnNlcy91eF9hdWRpb19vc3MuYyA8Mj4KKyQgZ2l0IGFkZCBjdXJzZXMvdXhfYXVkaW9fYWxzYS5jIDwzPgorJCBlZGl0L2NvbXBpbGUvdGVzdAorJCBnaXQgZGlmZiBIRUFEIDw0PgorJCBnaXQgY29tbWl0IC1hIC1zIDw1PgorJCBlZGl0L2NvbXBpbGUvdGVzdAorJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReIDw2PgorJCBlZGl0L2NvbXBpbGUvdGVzdAorJCBnaXQgZGlmZiBPUklHX0hFQUQgPDc+CiskIGdpdCBjb21taXQgLWEgLWMgT1JJR19IRUFEIDw4PgorJCBnaXQgY2hlY2tvdXQgbWFzdGVyIDw5PgorJCBnaXQgbWVyZ2UgYWxzYS1hdWRpbyA8MTA+CiskIGdpdCBsb2cgLS1zaW5jZT0nMyBkYXlzIGFnbycgPDExPgorJCBnaXQgbG9nIHYyLjQzLi4gY3Vyc2VzLyA8MTI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBjcmVhdGUgYSBuZXcgdG9waWMgYnJhbmNoLgorPDI+IHJldmVydCB5b3VyIGJvdGNoZWQgY2hhbmdlcyBpbiBgY3Vyc2VzL3V4X2F1ZGlvX29zcy5jYC4KKzwzPiB5b3UgbmVlZCB0byB0ZWxsIGdpdCBpZiB5b3UgYWRkZWQgYSBuZXcgZmlsZTsgcmVtb3ZhbCBhbmQKK21vZGlmaWNhdGlvbiB3aWxsIGJlIGNhdWdodCBpZiB5b3UgZG8gYGdpdCBjb21taXQgLWFgIGxhdGVyLgorPDQ+IHRvIHNlZSB3aGF0IGNoYW5nZXMgeW91IGFyZSBjb21taXR0aW5nLgorPDU+IGNvbW1pdCBldmVyeXRoaW5nIGFzIHlvdSBoYXZlIHRlc3RlZCwgd2l0aCB5b3VyIHNpZ24tb2ZmLgorPDY+IHRha2UgdGhlIGxhc3QgY29tbWl0IGJhY2ssIGtlZXBpbmcgd2hhdCBpcyBpbiB0aGUgd29ya2luZyB0cmVlLgorPDc+IGxvb2sgYXQgdGhlIGNoYW5nZXMgc2luY2UgdGhlIHByZW1hdHVyZSBjb21taXQgd2UgdG9vayBiYWNrLgorPDg+IHJlZG8gdGhlIGNvbW1pdCB1bmRvbmUgaW4gdGhlIHByZXZpb3VzIHN0ZXAsIHVzaW5nIHRoZSBtZXNzYWdlCit5b3Ugb3JpZ2luYWxseSB3cm90ZS4KKzw5PiBzd2l0Y2ggdG8gdGhlIG1hc3RlciBicmFuY2guCis8MTA+IG1lcmdlIGEgdG9waWMgYnJhbmNoIGludG8geW91ciBtYXN0ZXIgYnJhbmNoLgorPDExPiByZXZpZXcgY29tbWl0IGxvZ3M7IG90aGVyIGZvcm1zIHRvIGxpbWl0IG91dHB1dCBjYW4gYmUKK2NvbWJpbmVkIGFuZCBpbmNsdWRlIGAtLW1heC1jb3VudD0xMGAgKHNob3cgMTAgY29tbWl0cyksCitgLS11bnRpbD0yMDA1LTEyLTEwYCwgZXRjLgorPDEyPiB2aWV3IG9ubHkgdGhlIGNoYW5nZXMgdGhhdCB0b3VjaCB3aGF0J3MgaW4gYGN1cnNlcy9gCitkaXJlY3RvcnksIHNpbmNlIGB2Mi40M2AgdGFnLgorCisKK0luZGl2aWR1YWwgRGV2ZWxvcGVyIChQYXJ0aWNpcGFudClbW0luZGl2aWR1YWwgRGV2ZWxvcGVyIChQYXJ0aWNpcGFudCldXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZGV2ZWxvcGVyIHdvcmtpbmcgYXMgYSBwYXJ0aWNpcGFudCBpbiBhIGdyb3VwIHByb2plY3QgbmVlZHMgdG8KK2xlYXJuIGhvdyB0byBjb21tdW5pY2F0ZSB3aXRoIG90aGVycywgYW5kIHVzZXMgdGhlc2UgY29tbWFuZHMgaW4KK2FkZGl0aW9uIHRvIHRoZSBvbmVzIG5lZWRlZCBieSBhIHN0YW5kYWxvbmUgZGV2ZWxvcGVyLgorCisgICogbGlua2dpdDpnaXQtY2xvbmVbMV0gZnJvbSB0aGUgdXBzdHJlYW0gdG8gcHJpbWUgeW91ciBsb2NhbAorICAgIHJlcG9zaXRvcnkuCisKKyAgKiBsaW5rZ2l0OmdpdC1wdWxsWzFdIGFuZCBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBmcm9tICJvcmlnaW4iCisgICAgdG8ga2VlcCB1cC10by1kYXRlIHdpdGggdGhlIHVwc3RyZWFtLgorCisgICogbGlua2dpdDpnaXQtcHVzaFsxXSB0byBzaGFyZWQgcmVwb3NpdG9yeSwgaWYgeW91IGFkb3B0IENWUworICAgIHN0eWxlIHNoYXJlZCByZXBvc2l0b3J5IHdvcmtmbG93LgorCisgICogbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHRvIHByZXBhcmUgZS1tYWlsIHN1Ym1pc3Npb24sIGlmCisgICAgeW91IGFkb3B0IExpbnV4IGtlcm5lbC1zdHlsZSBwdWJsaWMgZm9ydW0gd29ya2Zsb3cuCisKK0V4YW1wbGVzCit+fn5+fn5+fgorCitDbG9uZSB0aGUgdXBzdHJlYW0gYW5kIHdvcmsgb24gaXQuICBGZWVkIGNoYW5nZXMgdG8gdXBzdHJlYW0uOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS8uLi4vdG9ydmFsZHMvbGludXgtMi42IG15Mi42CiskIGNkIG15Mi42CiskIGVkaXQvY29tcGlsZS90ZXN0OyBnaXQgY29tbWl0IC1hIC1zIDwxPgorJCBnaXQgZm9ybWF0LXBhdGNoIG9yaWdpbiA8Mj4KKyQgZ2l0IHB1bGwgPDM+CiskIGdpdCBsb2cgLXAgT1JJR19IRUFELi4gYXJjaC9pMzg2IGluY2x1ZGUvYXNtLWkzODYgPDQ+CiskIGdpdCBwdWxsIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi8uLi4vamdhcnppay9saWJhdGEtZGV2LmdpdCBBTEwgPDU+CiskIGdpdCByZXNldCAtLWhhcmQgT1JJR19IRUFEIDw2PgorJCBnaXQgZ2MgPDc+CiskIGdpdCBmZXRjaCAtLXRhZ3MgPDg+CistLS0tLS0tLS0tLS0KKysKKzwxPiByZXBlYXQgYXMgbmVlZGVkLgorPDI+IGV4dHJhY3QgcGF0Y2hlcyBmcm9tIHlvdXIgYnJhbmNoIGZvciBlLW1haWwgc3VibWlzc2lvbi4KKzwzPiBgZ2l0IHB1bGxgIGZldGNoZXMgZnJvbSBgb3JpZ2luYCBieSBkZWZhdWx0IGFuZCBtZXJnZXMgaW50byB0aGUKK2N1cnJlbnQgYnJhbmNoLgorPDQ+IGltbWVkaWF0ZWx5IGFmdGVyIHB1bGxpbmcsIGxvb2sgYXQgdGhlIGNoYW5nZXMgZG9uZSB1cHN0cmVhbQorc2luY2UgbGFzdCB0aW1lIHdlIGNoZWNrZWQsIG9ubHkgaW4gdGhlCithcmVhIHdlIGFyZSBpbnRlcmVzdGVkIGluLgorPDU+IGZldGNoIGZyb20gYSBzcGVjaWZpYyBicmFuY2ggZnJvbSBhIHNwZWNpZmljIHJlcG9zaXRvcnkgYW5kIG1lcmdlLgorPDY+IHJldmVydCB0aGUgcHVsbC4KKzw3PiBnYXJiYWdlIGNvbGxlY3QgbGVmdG92ZXIgb2JqZWN0cyBmcm9tIHJldmVydGVkIHB1bGwuCis8OD4gZnJvbSB0aW1lIHRvIHRpbWUsIG9idGFpbiBvZmZpY2lhbCB0YWdzIGZyb20gdGhlIGBvcmlnaW5gCithbmQgc3RvcmUgdGhlbSB1bmRlciBgLmdpdC9yZWZzL3RhZ3MvYC4KKworCitQdXNoIGludG8gYW5vdGhlciByZXBvc2l0b3J5Ljo6CisrCistLS0tLS0tLS0tLS0KK3NhdGVsbGl0ZSQgZ2l0IGNsb25lIG1vdGhlcnNoaXA6ZnJvdHogZnJvdHogPDE+CitzYXRlbGxpdGUkIGNkIGZyb3R6CitzYXRlbGxpdGUkIGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICdeKHJlbW90ZXxicmFuY2gpXC4nIDwyPgorcmVtb3RlLm9yaWdpbi51cmwgbW90aGVyc2hpcDpmcm90egorcmVtb3RlLm9yaWdpbi5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qCiticmFuY2gubWFzdGVyLnJlbW90ZSBvcmlnaW4KK2JyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIKK3NhdGVsbGl0ZSQgZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnB1c2ggXAorICAgICAgICAgICBtYXN0ZXI6cmVmcy9yZW1vdGVzL3NhdGVsbGl0ZS9tYXN0ZXIgPDM+CitzYXRlbGxpdGUkIGVkaXQvY29tcGlsZS90ZXN0L2NvbW1pdAorc2F0ZWxsaXRlJCBnaXQgcHVzaCBvcmlnaW4gPDQ+CisKK21vdGhlcnNoaXAkIGNkIGZyb3R6Cittb3RoZXJzaGlwJCBnaXQgY2hlY2tvdXQgbWFzdGVyCittb3RoZXJzaGlwJCBnaXQgbWVyZ2Ugc2F0ZWxsaXRlL21hc3RlciA8NT4KKy0tLS0tLS0tLS0tLQorKworPDE+IG1vdGhlcnNoaXAgbWFjaGluZSBoYXMgYSBmcm90eiByZXBvc2l0b3J5IHVuZGVyIHlvdXIgaG9tZQorZGlyZWN0b3J5OyBjbG9uZSBmcm9tIGl0IHRvIHN0YXJ0IGEgcmVwb3NpdG9yeSBvbiB0aGUgc2F0ZWxsaXRlCittYWNoaW5lLgorPDI+IGNsb25lIHNldHMgdGhlc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYnkgZGVmYXVsdC4KK0l0IGFycmFuZ2VzIGBnaXQgcHVsbGAgdG8gZmV0Y2ggYW5kIHN0b3JlIHRoZSBicmFuY2hlcyBvZiBtb3RoZXJzaGlwCittYWNoaW5lIHRvIGxvY2FsIGByZW1vdGVzL29yaWdpbi8qYCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCis8Mz4gYXJyYW5nZSBgZ2l0IHB1c2hgIHRvIHB1c2ggbG9jYWwgYG1hc3RlcmAgYnJhbmNoIHRvCitgcmVtb3Rlcy9zYXRlbGxpdGUvbWFzdGVyYCBicmFuY2ggb2YgdGhlIG1vdGhlcnNoaXAgbWFjaGluZS4KKzw0PiBwdXNoIHdpbGwgc3Rhc2ggb3VyIHdvcmsgYXdheSBvbiBgcmVtb3Rlcy9zYXRlbGxpdGUvbWFzdGVyYAorcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBvbiB0aGUgbW90aGVyc2hpcCBtYWNoaW5lLiAgWW91IGNvdWxkIHVzZSB0aGlzCithcyBhIGJhY2stdXAgbWV0aG9kLgorPDU+IG9uIG1vdGhlcnNoaXAgbWFjaGluZSwgbWVyZ2UgdGhlIHdvcmsgZG9uZSBvbiB0aGUgc2F0ZWxsaXRlCittYWNoaW5lIGludG8gdGhlIG1hc3RlciBicmFuY2guCisKK0JyYW5jaCBvZmYgb2YgYSBzcGVjaWZpYyB0YWcuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgcHJpdmF0ZTIuNi4xNCB2Mi42LjE0IDwxPgorJCBlZGl0L2NvbXBpbGUvdGVzdDsgZ2l0IGNvbW1pdCAtYQorJCBnaXQgY2hlY2tvdXQgbWFzdGVyCiskIGdpdCBmb3JtYXQtcGF0Y2ggLWsgLW0gLS1zdGRvdXQgdjIuNi4xNC4ucHJpdmF0ZTIuNi4xNCB8CisgIGdpdCBhbSAtMyAtayA8Mj4KKy0tLS0tLS0tLS0tLQorKworPDE+IGNyZWF0ZSBhIHByaXZhdGUgYnJhbmNoIGJhc2VkIG9uIGEgd2VsbCBrbm93biAoYnV0IHNvbWV3aGF0IGJlaGluZCkKK3RhZy4KKzwyPiBmb3J3YXJkIHBvcnQgYWxsIGNoYW5nZXMgaW4gYHByaXZhdGUyLjYuMTRgIGJyYW5jaCB0byBgbWFzdGVyYCBicmFuY2gKK3dpdGhvdXQgYSBmb3JtYWwgIm1lcmdpbmciLgorCisKK0ludGVncmF0b3JbW0ludGVncmF0b3JdXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZmFpcmx5IGNlbnRyYWwgcGVyc29uIGFjdGluZyBhcyB0aGUgaW50ZWdyYXRvciBpbiBhIGdyb3VwCitwcm9qZWN0IHJlY2VpdmVzIGNoYW5nZXMgbWFkZSBieSBvdGhlcnMsIHJldmlld3MgYW5kIGludGVncmF0ZXMKK3RoZW0gYW5kIHB1Ymxpc2hlcyB0aGUgcmVzdWx0IGZvciBvdGhlcnMgdG8gdXNlLCB1c2luZyB0aGVzZQorY29tbWFuZHMgaW4gYWRkaXRpb24gdG8gdGhlIG9uZXMgbmVlZGVkIGJ5IHBhcnRpY2lwYW50cy4KKworICAqIGxpbmtnaXQ6Z2l0LWFtWzFdIHRvIGFwcGx5IHBhdGNoZXMgZS1tYWlsZWQgaW4gZnJvbSB5b3VyCisgICAgY29udHJpYnV0b3JzLgorCisgICogbGlua2dpdDpnaXQtcHVsbFsxXSB0byBtZXJnZSBmcm9tIHlvdXIgdHJ1c3RlZCBsaWV1dGVuYW50cy4KKworICAqIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSB0byBwcmVwYXJlIGFuZCBzZW5kIHN1Z2dlc3RlZAorICAgIGFsdGVybmF0aXZlIHRvIGNvbnRyaWJ1dG9ycy4KKworICAqIGxpbmtnaXQ6Z2l0LXJldmVydFsxXSB0byB1bmRvIGJvdGNoZWQgY29tbWl0cy4KKworICAqIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gdG8gcHVibGlzaCB0aGUgYmxlZWRpbmcgZWRnZS4KKworCitFeGFtcGxlcworfn5+fn5+fn4KKworTXkgdHlwaWNhbCBHSVQgZGF5Ljo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN0YXR1cyA8MT4KKyQgZ2l0IHNob3ctYnJhbmNoIDwyPgorJCBtYWlseCA8Mz4KKyYgcyAyIDMgNCA1IC4vK3RvLWFwcGx5CismIHMgNyA4IC4vK2hvbGQtbGludXMKKyYgcQorJCBnaXQgY2hlY2tvdXQgLWIgdG9waWMvb25lIG1hc3RlcgorJCBnaXQgYW0gLTMgLWkgLXMgLXUgLi8rdG8tYXBwbHkgPDQ+CiskIGNvbXBpbGUvdGVzdAorJCBnaXQgY2hlY2tvdXQgLWIgaG9sZC9saW51cyAmJiBnaXQgYW0gLTMgLWkgLXMgLXUgLi8raG9sZC1saW51cyA8NT4KKyQgZ2l0IGNoZWNrb3V0IHRvcGljL29uZSAmJiBnaXQgcmViYXNlIG1hc3RlciA8Nj4KKyQgZ2l0IGNoZWNrb3V0IHB1ICYmIGdpdCByZXNldCAtLWhhcmQgbmV4dCA8Nz4KKyQgZ2l0IG1lcmdlIHRvcGljL29uZSB0b3BpYy90d28gJiYgZ2l0IG1lcmdlIGhvbGQvbGludXMgPDg+CiskIGdpdCBjaGVja291dCBtYWludAorJCBnaXQgY2hlcnJ5LXBpY2sgbWFzdGVyfjQgPDk+CiskIGNvbXBpbGUvdGVzdAorJCBnaXQgdGFnIC1zIC1tICJHSVQgMC45OS45eCIgdjAuOTkuOXggPDEwPgorJCBnaXQgZmV0Y2gga28gJiYgZ2l0IHNob3ctYnJhbmNoIG1hc3RlciBtYWludCAndGFncy9rby0qJyA8MTE+CiskIGdpdCBwdXNoIGtvIDwxMj4KKyQgZ2l0IHB1c2gga28gdjAuOTkuOXggPDEzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gc2VlIHdoYXQgSSB3YXMgaW4gdGhlIG1pZGRsZSBvZiBkb2luZywgaWYgYW55LgorPDI+IHNlZSB3aGF0IHRvcGljIGJyYW5jaGVzIEkgaGF2ZSBhbmQgdGhpbmsgYWJvdXQgaG93IHJlYWR5Cit0aGV5IGFyZS4KKzwzPiByZWFkIG1haWxzLCBzYXZlIG9uZXMgdGhhdCBhcmUgYXBwbGljYWJsZSwgYW5kIHNhdmUgb3RoZXJzCit0aGF0IGFyZSBub3QgcXVpdGUgcmVhZHkuCis8ND4gYXBwbHkgdGhlbSwgaW50ZXJhY3RpdmVseSwgd2l0aCBteSBzaWduLW9mZnMuCis8NT4gY3JlYXRlIHRvcGljIGJyYW5jaCBhcyBuZWVkZWQgYW5kIGFwcGx5LCBhZ2FpbiB3aXRoIG15CitzaWduLW9mZnMuCis8Nj4gcmViYXNlIGludGVybmFsIHRvcGljIGJyYW5jaCB0aGF0IGhhcyBub3QgYmVlbiBtZXJnZWQgdG8gdGhlCittYXN0ZXIsIG5vciBleHBvc2VkIGFzIGEgcGFydCBvZiBhIHN0YWJsZSBicmFuY2guCis8Nz4gcmVzdGFydCBgcHVgIGV2ZXJ5IHRpbWUgZnJvbSB0aGUgbmV4dC4KKzw4PiBhbmQgYnVuZGxlIHRvcGljIGJyYW5jaGVzIHN0aWxsIGNvb2tpbmcuCis8OT4gYmFja3BvcnQgYSBjcml0aWNhbCBmaXguCis8MTA+IGNyZWF0ZSBhIHNpZ25lZCB0YWcuCis8MTE+IG1ha2Ugc3VyZSBJIGRpZCBub3QgYWNjaWRlbnRhbGx5IHJld2luZCBtYXN0ZXIgYmV5b25kIHdoYXQgSQorYWxyZWFkeSBwdXNoZWQgb3V0LiAgYGtvYCBzaG9ydGhhbmQgcG9pbnRzIGF0IHRoZSByZXBvc2l0b3J5IEkgaGF2ZQorYXQga2VybmVsLm9yZywgYW5kIGxvb2tzIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorJCBjYXQgLmdpdC9yZW1vdGVzL2tvCitVUkw6IGtlcm5lbC5vcmc6L3B1Yi9zY20vZ2l0L2dpdC5naXQKK1B1bGw6IG1hc3RlcjpyZWZzL3RhZ3Mva28tbWFzdGVyCitQdWxsOiBuZXh0OnJlZnMvdGFncy9rby1uZXh0CitQdWxsOiBtYWludDpyZWZzL3RhZ3Mva28tbWFpbnQKK1B1c2g6IG1hc3RlcgorUHVzaDogbmV4dAorUHVzaDogK3B1CitQdXNoOiBtYWludAorLS0tLS0tLS0tLS0tCisrCitJbiB0aGUgb3V0cHV0IGZyb20gYGdpdCBzaG93LWJyYW5jaGAsIGBtYXN0ZXJgIHNob3VsZCBoYXZlCitldmVyeXRoaW5nIGBrby1tYXN0ZXJgIGhhcywgYW5kIGBuZXh0YCBzaG91bGQgaGF2ZQorZXZlcnl0aGluZyBga28tbmV4dGAgaGFzLgorCis8MTI+IHB1c2ggb3V0IHRoZSBibGVlZGluZyBlZGdlLgorPDEzPiBwdXNoIHRoZSB0YWcgb3V0LCB0b28uCisKKworUmVwb3NpdG9yeSBBZG1pbmlzdHJhdGlvbltbUmVwb3NpdG9yeSBBZG1pbmlzdHJhdGlvbl1dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSByZXBvc2l0b3J5IGFkbWluaXN0cmF0b3IgdXNlcyB0aGUgZm9sbG93aW5nIHRvb2xzIHRvIHNldCB1cAorYW5kIG1haW50YWluIGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeSBieSBkZXZlbG9wZXJzLgorCisgICogbGlua2dpdDpnaXQtZGFlbW9uWzFdIHRvIGFsbG93IGFub255bW91cyBkb3dubG9hZCBmcm9tCisgICAgcmVwb3NpdG9yeS4KKworICAqIGxpbmtnaXQ6Z2l0LXNoZWxsWzFdIGNhbiBiZSB1c2VkIGFzIGEgJ3Jlc3RyaWN0ZWQgbG9naW4gc2hlbGwnCisgICAgZm9yIHNoYXJlZCBjZW50cmFsIHJlcG9zaXRvcnkgdXNlcnMuCisKK2xpbms6aG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHRbdXBkYXRlIGhvb2sgaG93dG9dIGhhcyBhIGdvb2QKK2V4YW1wbGUgb2YgbWFuYWdpbmcgYSBzaGFyZWQgY2VudHJhbCByZXBvc2l0b3J5LgorCisKK0V4YW1wbGVzCit+fn5+fn5+fgorV2UgYXNzdW1lIHRoZSBmb2xsb3dpbmcgaW4gL2V0Yy9zZXJ2aWNlczo6CisrCistLS0tLS0tLS0tLS0KKyQgZ3JlcCA5NDE4IC9ldGMvc2VydmljZXMKK2dpdAkJOTQxOC90Y3AJCSMgR2l0IFZlcnNpb24gQ29udHJvbCBTeXN0ZW0KKy0tLS0tLS0tLS0tLQorCitSdW4gZ2l0LWRhZW1vbiB0byBzZXJ2ZSAvcHViL3NjbSBmcm9tIGluZXRkLjo6CisrCistLS0tLS0tLS0tLS0KKyQgZ3JlcCBnaXQgL2V0Yy9pbmV0ZC5jb25mCitnaXQJc3RyZWFtCXRjcAlub3dhaXQJbm9ib2R5IFwKKyAgL3Vzci9iaW4vZ2l0LWRhZW1vbiBnaXQtZGFlbW9uIC0taW5ldGQgLS1leHBvcnQtYWxsIC9wdWIvc2NtCistLS0tLS0tLS0tLS0KKysKK1RoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBsaW5lIHNob3VsZCBiZSBvbiBvbmUgbGluZS4KKworUnVuIGdpdC1kYWVtb24gdG8gc2VydmUgL3B1Yi9zY20gZnJvbSB4aW5ldGQuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBjYXQgL2V0Yy94aW5ldGQuZC9naXQtZGFlbW9uCisjIGRlZmF1bHQ6IG9mZgorIyBkZXNjcmlwdGlvbjogVGhlIGdpdCBzZXJ2ZXIgb2ZmZXJzIGFjY2VzcyB0byBnaXQgcmVwb3NpdG9yaWVzCitzZXJ2aWNlIGdpdAoreworICAgICAgICBkaXNhYmxlID0gbm8KKyAgICAgICAgdHlwZSAgICAgICAgICAgID0gVU5MSVNURUQKKyAgICAgICAgcG9ydCAgICAgICAgICAgID0gOTQxOAorICAgICAgICBzb2NrZXRfdHlwZSAgICAgPSBzdHJlYW0KKyAgICAgICAgd2FpdCAgICAgICAgICAgID0gbm8KKyAgICAgICAgdXNlciAgICAgICAgICAgID0gbm9ib2R5CisgICAgICAgIHNlcnZlciAgICAgICAgICA9IC91c3IvYmluL2dpdC1kYWVtb24KKyAgICAgICAgc2VydmVyX2FyZ3MgICAgID0gLS1pbmV0ZCAtLWV4cG9ydC1hbGwgLS1iYXNlLXBhdGg9L3B1Yi9zY20KKyAgICAgICAgbG9nX29uX2ZhaWx1cmUgICs9IFVTRVJJRAorfQorLS0tLS0tLS0tLS0tCisrCitDaGVjayB5b3VyIHhpbmV0ZCg4KSBkb2N1bWVudGF0aW9uIGFuZCBzZXR1cCwgdGhpcyBpcyBmcm9tIGEgRmVkb3JhIHN5c3RlbS4KK090aGVycyBtaWdodCBiZSBkaWZmZXJlbnQuCisKK0dpdmUgcHVzaC9wdWxsIG9ubHkgYWNjZXNzIHRvIGRldmVsb3BlcnMuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBncmVwIGdpdCAvZXRjL3Bhc3N3ZCA8MT4KK2FsaWNlOng6MTAwMDoxMDAwOjovaG9tZS9hbGljZTovdXNyL2Jpbi9naXQtc2hlbGwKK2JvYjp4OjEwMDE6MTAwMTo6L2hvbWUvYm9iOi91c3IvYmluL2dpdC1zaGVsbAorY2luZHk6eDoxMDAyOjEwMDI6Oi9ob21lL2NpbmR5Oi91c3IvYmluL2dpdC1zaGVsbAorZGF2aWQ6eDoxMDAzOjEwMDM6Oi9ob21lL2RhdmlkOi91c3IvYmluL2dpdC1zaGVsbAorJCBncmVwIGdpdCAvZXRjL3NoZWxscyA8Mj4KKy91c3IvYmluL2dpdC1zaGVsbAorLS0tLS0tLS0tLS0tCisrCis8MT4gbG9nLWluIHNoZWxsIGlzIHNldCB0byAvdXNyL2Jpbi9naXQtc2hlbGwsIHdoaWNoIGRvZXMgbm90CithbGxvdyBhbnl0aGluZyBidXQgYGdpdCBwdXNoYCBhbmQgYGdpdCBwdWxsYC4gIFRoZSB1c2VycyBzaG91bGQKK2dldCBhbiBzc2ggYWNjZXNzIHRvIHRoZSBtYWNoaW5lLgorPDI+IGluIG1hbnkgZGlzdHJpYnV0aW9ucyAvZXRjL3NoZWxscyBuZWVkcyB0byBsaXN0IHdoYXQgaXMgdXNlZAorYXMgdGhlIGxvZ2luIHNoZWxsLgorCitDVlMtc3R5bGUgc2hhcmVkIHJlcG9zaXRvcnkuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBncmVwIGdpdCAvZXRjL2dyb3VwIDwxPgorZ2l0Ong6OTQxODphbGljZSxib2IsY2luZHksZGF2aWQKKyQgY2QgL2hvbWUvZGV2by5naXQKKyQgbHMgLWwgPDI+CisgIGxyd3hyd3hyd3ggICAxIGRhdmlkIGdpdCAgICAxNyBEZWMgIDQgMjI6NDAgSEVBRCAtPiByZWZzL2hlYWRzL21hc3RlcgorICBkcnd4cndzci14ICAgMiBkYXZpZCBnaXQgIDQwOTYgRGVjICA0IDIyOjQwIGJyYW5jaGVzCisgIC1ydy1ydy1yLS0gICAxIGRhdmlkIGdpdCAgICA4NCBEZWMgIDQgMjI6NDAgY29uZmlnCisgIC1ydy1ydy1yLS0gICAxIGRhdmlkIGdpdCAgICA1OCBEZWMgIDQgMjI6NDAgZGVzY3JpcHRpb24KKyAgZHJ3eHJ3c3IteCAgIDIgZGF2aWQgZ2l0ICA0MDk2IERlYyAgNCAyMjo0MCBob29rcworICAtcnctcnctci0tICAgMSBkYXZpZCBnaXQgMzc1MDQgRGVjICA0IDIyOjQwIGluZGV4CisgIGRyd3hyd3NyLXggICAyIGRhdmlkIGdpdCAgNDA5NiBEZWMgIDQgMjI6NDAgaW5mbworICBkcnd4cndzci14ICAgNCBkYXZpZCBnaXQgIDQwOTYgRGVjICA0IDIyOjQwIG9iamVjdHMKKyAgZHJ3eHJ3c3IteCAgIDQgZGF2aWQgZ2l0ICA0MDk2IE5vdiAgNyAxNDo1OCByZWZzCisgIGRyd3hyd3NyLXggICAyIGRhdmlkIGdpdCAgNDA5NiBEZWMgIDQgMjI6NDAgcmVtb3RlcworJCBscyAtbCBob29rcy91cGRhdGUgPDM+CisgIC1yLXhyLXhyLXggICAxIGRhdmlkIGdpdCAgMzUzNiBEZWMgIDQgMjI6NDAgdXBkYXRlCiskIGNhdCBpbmZvL2FsbG93ZWQtdXNlcnMgPDQ+CityZWZzL2hlYWRzL21hc3RlcglhbGljZVx8Y2luZHkKK3JlZnMvaGVhZHMvZG9jLXVwZGF0ZQlib2IKK3JlZnMvdGFncy92WzAtOV0qCWRhdmlkCistLS0tLS0tLS0tLS0KKysKKzwxPiBwbGFjZSB0aGUgZGV2ZWxvcGVycyBpbnRvIHRoZSBzYW1lIGdpdCBncm91cC4KKzwyPiBhbmQgbWFrZSB0aGUgc2hhcmVkIHJlcG9zaXRvcnkgd3JpdGFibGUgYnkgdGhlIGdyb3VwLgorPDM+IHVzZSB1cGRhdGUtaG9vayBleGFtcGxlIGJ5IENhcmwgZnJvbSBEb2N1bWVudGF0aW9uL2hvd3RvLworZm9yIGJyYW5jaCBwb2xpY3kgY29udHJvbC4KKzw0PiBhbGljZSBhbmQgY2luZHkgY2FuIHB1c2ggaW50byBtYXN0ZXIsIG9ubHkgYm9iIGNhbiBwdXNoIGludG8gZG9jLXVwZGF0ZS4KK2RhdmlkIGlzIHRoZSByZWxlYXNlIG1hbmFnZXIgYW5kIGlzIHRoZSBvbmx5IHBlcnNvbiB3aG8gY2FuCitjcmVhdGUgYW5kIHB1c2ggdmVyc2lvbiB0YWdzLgorCitIVFRQIHNlcnZlciB0byBzdXBwb3J0IGR1bWIgcHJvdG9jb2wgdHJhbnNmZXIuOjoKKysKKy0tLS0tLS0tLS0tLQorZGV2JCBnaXQgdXBkYXRlLXNlcnZlci1pbmZvIDwxPgorZGV2JCBmdHAgdXNlckBpc3AuZXhhbXBsZS5jb20gPDI+CitmdHA+IGNwIC1yIC5naXQgL2hvbWUvdXNlci9teXByb2plY3QuZ2l0CistLS0tLS0tLS0tLS0KKysKKzwxPiBtYWtlIHN1cmUgeW91ciBpbmZvL3JlZnMgYW5kIG9iamVjdHMvaW5mby9wYWNrcyBhcmUgdXAtdG8tZGF0ZQorPDI+IHVwbG9hZCB0byBwdWJsaWMgSFRUUCBzZXJ2ZXIgaG9zdGVkIGJ5IHlvdXIgSVNQLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkNjQ3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKQEAgLTAsMCArMSwxMjkgQEAKKy0tYWxsOjoKKwlGZXRjaCBhbGwgcmVtb3Rlcy4KKworLWE6OgorLS1hcHBlbmQ6OgorCUFwcGVuZCByZWYgbmFtZXMgYW5kIG9iamVjdCBuYW1lcyBvZiBmZXRjaGVkIHJlZnMgdG8gdGhlCisJZXhpc3RpbmcgY29udGVudHMgb2YgYC5naXQvRkVUQ0hfSEVBRGAuICBXaXRob3V0IHRoaXMKKwlvcHRpb24gb2xkIGRhdGEgaW4gYC5naXQvRkVUQ0hfSEVBRGAgd2lsbCBiZSBvdmVyd3JpdHRlbi4KKworLS1kZXB0aD08ZGVwdGg+OjoKKwlEZWVwZW4gdGhlIGhpc3Rvcnkgb2YgYSAnc2hhbGxvdycgcmVwb3NpdG9yeSBjcmVhdGVkIGJ5CisJYGdpdCBjbG9uZWAgd2l0aCBgLS1kZXB0aD08ZGVwdGg+YCBvcHRpb24gKHNlZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXSkKKwl0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjb21taXRzIGZyb20gdGhlIHRpcCBvZiBlYWNoIHJlbW90ZQorCWJyYW5jaCBoaXN0b3J5LiBUYWdzIGZvciB0aGUgZGVlcGVuZWQgY29tbWl0cyBhcmUgbm90IGZldGNoZWQuCisKK2lmbmRlZjo6Z2l0LXB1bGxbXQorLS1kcnktcnVuOjoKKwlTaG93IHdoYXQgd291bGQgYmUgZG9uZSwgd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZXMuCitlbmRpZjo6Z2l0LXB1bGxbXQorCistZjo6CistLWZvcmNlOjoKKwlXaGVuICdnaXQgZmV0Y2gnIGlzIHVzZWQgd2l0aCBgPHJicmFuY2g+OjxsYnJhbmNoPmAKKwlyZWZzcGVjLCBpdCByZWZ1c2VzIHRvIHVwZGF0ZSB0aGUgbG9jYWwgYnJhbmNoCisJYDxsYnJhbmNoPmAgdW5sZXNzIHRoZSByZW1vdGUgYnJhbmNoIGA8cmJyYW5jaD5gIGl0CisJZmV0Y2hlcyBpcyBhIGRlc2NlbmRhbnQgb2YgYDxsYnJhbmNoPmAuICBUaGlzIG9wdGlvbgorCW92ZXJyaWRlcyB0aGF0IGNoZWNrLgorCistazo6CistLWtlZXA6OgorCUtlZXAgZG93bmxvYWRlZCBwYWNrLgorCitpZm5kZWY6OmdpdC1wdWxsW10KKy0tbXVsdGlwbGU6OgorCUFsbG93IHNldmVyYWwgPHJlcG9zaXRvcnk+IGFuZCA8Z3JvdXA+IGFyZ3VtZW50cyB0byBiZQorCXNwZWNpZmllZC4gTm8gPHJlZnNwZWM+cyBtYXkgYmUgc3BlY2lmaWVkLgorCistcDo6CistLXBydW5lOjoKKwlBZnRlciBmZXRjaGluZywgcmVtb3ZlIGFueSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgd2hpY2gKKwlubyBsb25nZXIgZXhpc3QJb24gdGhlIHJlbW90ZS4KK2VuZGlmOjpnaXQtcHVsbFtdCisKK2lmZGVmOjpnaXQtcHVsbFtdCistLW5vLXRhZ3M6OgorZW5kaWY6OmdpdC1wdWxsW10KK2lmbmRlZjo6Z2l0LXB1bGxbXQorLW46OgorLS1uby10YWdzOjoKK2VuZGlmOjpnaXQtcHVsbFtdCisJQnkgZGVmYXVsdCwgdGFncyB0aGF0IHBvaW50IGF0IG9iamVjdHMgdGhhdCBhcmUgZG93bmxvYWRlZAorCWZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5IGFyZSBmZXRjaGVkIGFuZCBzdG9yZWQgbG9jYWxseS4KKwlUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGlzIGF1dG9tYXRpYyB0YWcgZm9sbG93aW5nLiBUaGUgZGVmYXVsdAorCWJlaGF2aW9yIGZvciBhIHJlbW90ZSBtYXkgYmUgc3BlY2lmaWVkIHdpdGggdGhlIHJlbW90ZS48bmFtZT4udGFnb3B0CisJc2V0dGluZy4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistdDo6CistLXRhZ3M6OgorCU1vc3Qgb2YgdGhlIHRhZ3MgYXJlIGZldGNoZWQgYXV0b21hdGljYWxseSBhcyBicmFuY2gKKwloZWFkcyBhcmUgZG93bmxvYWRlZCwgYnV0IHRhZ3MgdGhhdCBkbyBub3QgcG9pbnQgYXQKKwlvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoZSBicmFuY2ggaGVhZHMgdGhhdCBhcmUgYmVpbmcKKwl0cmFja2VkIHdpbGwgbm90IGJlIGZldGNoZWQgYnkgdGhpcyBtZWNoYW5pc20uICBUaGlzCisJZmxhZyBsZXRzIGFsbCB0YWdzIGFuZCB0aGVpciBhc3NvY2lhdGVkIG9iamVjdHMgYmUKKwlkb3dubG9hZGVkLiBUaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYSByZW1vdGUgbWF5IGJlCisJc3BlY2lmaWVkIHdpdGggdGhlIHJlbW90ZS48bmFtZT4udGFnb3B0IHNldHRpbmcuIFNlZQorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXNbPXllc3xvbi1kZW1hbmR8bm9dOjoKKwlUaGlzIG9wdGlvbiBjb250cm9scyBpZiBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIG5ldyBjb21taXRzIG9mCisJcG9wdWxhdGVkIHN1Ym1vZHVsZXMgc2hvdWxkIGJlIGZldGNoZWQgdG9vLiBJdCBjYW4gYmUgdXNlZCBhcyBhCisJYm9vbGVhbiBvcHRpb24gdG8gY29tcGxldGVseSBkaXNhYmxlIHJlY3Vyc2lvbiB3aGVuIHNldCB0byAnbm8nIG9yIHRvCisJdW5jb25kaXRpb25hbGx5IHJlY3Vyc2UgaW50byBhbGwgcG9wdWxhdGVkIHN1Ym1vZHVsZXMgd2hlbiBzZXQgdG8KKwkneWVzJywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkIHdpdGhvdXQgYW55CisJdmFsdWUuIFVzZSAnb24tZGVtYW5kJyB0byBvbmx5IHJlY3Vyc2UgaW50byBhIHBvcHVsYXRlZCBzdWJtb2R1bGUKKwl3aGVuIHRoZSBzdXBlcnByb2plY3QgcmV0cmlldmVzIGEgY29tbWl0IHRoYXQgdXBkYXRlcyB0aGUgc3VibW9kdWxlJ3MKKwlyZWZlcmVuY2UgdG8gYSBjb21taXQgdGhhdCBpc24ndCBhbHJlYWR5IGluIHRoZSBsb2NhbCBzdWJtb2R1bGUKKwljbG9uZS4KKworLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCURpc2FibGUgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKHRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcworCXVzaW5nIHRoZSAnLS1yZWN1cnNlLXN1Ym1vZHVsZXM9bm8nIG9wdGlvbikuCisKKy0tc3VibW9kdWxlLXByZWZpeD08cGF0aD46OgorCVByZXBlbmQgPHBhdGg+IHRvIHBhdGhzIHByaW50ZWQgaW4gaW5mb3JtYXRpdmUgbWVzc2FnZXMKKwlzdWNoIGFzICJGZXRjaGluZyBzdWJtb2R1bGUgZm9vIi4gIFRoaXMgb3B0aW9uIGlzIHVzZWQKKwlpbnRlcm5hbGx5IHdoZW4gcmVjdXJzaW5nIG92ZXIgc3VibW9kdWxlcy4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXMtZGVmYXVsdD1beWVzfG9uLWRlbWFuZF06OgorCVRoaXMgb3B0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSB0byB0ZW1wb3JhcmlseSBwcm92aWRlIGEKKwlub24tbmVnYXRpdmUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIC0tcmVjdXJzZS1zdWJtb2R1bGVzCisJb3B0aW9uLiAgQWxsIG90aGVyIG1ldGhvZHMgb2YgY29uZmlndXJpbmcgZmV0Y2gncyBzdWJtb2R1bGUKKwlyZWN1cnNpb24gKHN1Y2ggYXMgc2V0dGluZ3MgaW4gbGlua2dpdDpnaXRtb2R1bGVzWzVdIGFuZAorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkgb3ZlcnJpZGUgdGhpcyBvcHRpb24sIGFzIGRvZXMKKwlzcGVjaWZ5aW5nIC0tW25vLV1yZWN1cnNlLXN1Ym1vZHVsZXMgZGlyZWN0bHkuCitlbmRpZjo6Z2l0LXB1bGxbXQorCistdTo6CistLXVwZGF0ZS1oZWFkLW9rOjoKKwlCeSBkZWZhdWx0ICdnaXQgZmV0Y2gnIHJlZnVzZXMgdG8gdXBkYXRlIHRoZSBoZWFkIHdoaWNoCisJY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBmbGFnIGRpc2FibGVzIHRoZQorCWNoZWNrLiAgVGhpcyBpcyBwdXJlbHkgZm9yIHRoZSBpbnRlcm5hbCB1c2UgZm9yICdnaXQgcHVsbCcKKwl0byBjb21tdW5pY2F0ZSB3aXRoICdnaXQgZmV0Y2gnLCBhbmQgdW5sZXNzIHlvdSBhcmUKKwlpbXBsZW1lbnRpbmcgeW91ciBvd24gUG9yY2VsYWluIHlvdSBhcmUgbm90IHN1cHBvc2VkIHRvCisJdXNlIGl0LgorCistLXVwbG9hZC1wYWNrIDx1cGxvYWQtcGFjaz46OgorCVdoZW4gZ2l2ZW4sIGFuZCB0aGUgcmVwb3NpdG9yeSB0byBmZXRjaCBmcm9tIGlzIGhhbmRsZWQKKwlieSAnZ2l0IGZldGNoLXBhY2snLCAnLS1leGVjPTx1cGxvYWQtcGFjaz4nIGlzIHBhc3NlZCB0bworCXRoZSBjb21tYW5kIHRvIHNwZWNpZnkgbm9uLWRlZmF1bHQgcGF0aCBmb3IgdGhlIGNvbW1hbmQKKwlydW4gb24gdGhlIG90aGVyIGVuZC4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistcTo6CistLXF1aWV0OjoKKwlQYXNzIC0tcXVpZXQgdG8gZ2l0LWZldGNoLXBhY2sgYW5kIHNpbGVuY2UgYW55IG90aGVyIGludGVybmFsbHkKKwl1c2VkIGdpdCBjb21tYW5kcy4gUHJvZ3Jlc3MgaXMgbm90IHJlcG9ydGVkIHRvIHRoZSBzdGFuZGFyZCBlcnJvcgorCXN0cmVhbS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLgorZW5kaWY6OmdpdC1wdWxsW10KKworLS1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIC1xCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmIHRoZQorCXN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZml4LXRleGkucGVybCBiL0RvY3VtZW50YXRpb24vZml4LXRleGkucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjdkNzhmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maXgtdGV4aS5wZXJsCkBAIC0wLDAgKzEsMTUgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworCit3aGlsZSAoPD4pIHsKKwlpZiAoL15cQHNldGZpbGVuYW1lLykgeworCQkkXyA9ICJcQHNldGZpbGVuYW1lIGdpdC5pbmZvXG4iOworCX0gZWxzaWYgKC9eXEBkaXJlbnRyeS8pIHsKKwkJcHJpbnQgJ0BkaXJjYXRlZ29yeSBEZXZlbG9wbWVudAorQGRpcmVudHJ5CisqIEdpdDogKGdpdCkuICAgICAgICAgICBBIGZhc3QgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0KK0BlbmQgZGlyZW50cnkKKyc7CX0KKwl1bmxlc3MgKC9eXEBkaXJlbnRyeS8uLi9eXEBlbmQgZGlyZW50cnkvKSB7CisJCXByaW50OworCX0KK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWUzNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0CkBAIC0wLDAgKzEsMzg5IEBACitnaXQtYWRkKDEpCis9PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1hZGQgLSBBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGFkZCcgWy1uXSBbLXZdIFstLWZvcmNlIHwgLWZdIFstLWludGVyYWN0aXZlIHwgLWldIFstLXBhdGNoIHwgLXBdCisJICBbLS1lZGl0IHwgLWVdIFstLWFsbCB8IFstLXVwZGF0ZSB8IC11XV0gWy0taW50ZW50LXRvLWFkZCB8IC1OXQorCSAgWy0tcmVmcmVzaF0gWy0taWdub3JlLWVycm9yc10gWy0taWdub3JlLW1pc3NpbmddIFstLV0KKwkgIFs8ZmlsZXBhdHRlcm4+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCB1cGRhdGVzIHRoZSBpbmRleCB1c2luZyB0aGUgY3VycmVudCBjb250ZW50IGZvdW5kIGluCit0aGUgd29ya2luZyB0cmVlLCB0byBwcmVwYXJlIHRoZSBjb250ZW50IHN0YWdlZCBmb3IgdGhlIG5leHQgY29tbWl0LgorSXQgdHlwaWNhbGx5IGFkZHMgdGhlIGN1cnJlbnQgY29udGVudCBvZiBleGlzdGluZyBwYXRocyBhcyBhIHdob2xlLAorYnV0IHdpdGggc29tZSBvcHRpb25zIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gYWRkIGNvbnRlbnQgd2l0aAorb25seSBwYXJ0IG9mIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyBhcHBsaWVkLCBvcgorcmVtb3ZlIHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSB3b3JraW5nIHRyZWUgYW55bW9yZS4KKworVGhlICJpbmRleCIgaG9sZHMgYSBzbmFwc2hvdCBvZiB0aGUgY29udGVudCBvZiB0aGUgd29ya2luZyB0cmVlLCBhbmQgaXQKK2lzIHRoaXMgc25hcHNob3QgdGhhdCBpcyB0YWtlbiBhcyB0aGUgY29udGVudHMgb2YgdGhlIG5leHQgY29tbWl0LiAgVGh1cworYWZ0ZXIgbWFraW5nIGFueSBjaGFuZ2VzIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIGJlZm9yZSBydW5uaW5nCit0aGUgY29tbWl0IGNvbW1hbmQsIHlvdSBtdXN0IHVzZSB0aGUgYGFkZGAgY29tbWFuZCB0byBhZGQgYW55IG5ldyBvcgorbW9kaWZpZWQgZmlsZXMgdG8gdGhlIGluZGV4LgorCitUaGlzIGNvbW1hbmQgY2FuIGJlIHBlcmZvcm1lZCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgYSBjb21taXQuICBJdCBvbmx5CithZGRzIHRoZSBjb250ZW50IG9mIHRoZSBzcGVjaWZpZWQgZmlsZShzKSBhdCB0aGUgdGltZSB0aGUgYWRkIGNvbW1hbmQgaXMKK3J1bjsgaWYgeW91IHdhbnQgc3Vic2VxdWVudCBjaGFuZ2VzIGluY2x1ZGVkIGluIHRoZSBuZXh0IGNvbW1pdCwgdGhlbgoreW91IG11c3QgcnVuIGBnaXQgYWRkYCBhZ2FpbiB0byBhZGQgdGhlIG5ldyBjb250ZW50IHRvIHRoZSBpbmRleC4KKworVGhlIGBnaXQgc3RhdHVzYCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHN1bW1hcnkgb2Ygd2hpY2gKK2ZpbGVzIGhhdmUgY2hhbmdlcyB0aGF0IGFyZSBzdGFnZWQgZm9yIHRoZSBuZXh0IGNvbW1pdC4KKworVGhlIGBnaXQgYWRkYCBjb21tYW5kIHdpbGwgbm90IGFkZCBpZ25vcmVkIGZpbGVzIGJ5IGRlZmF1bHQuICBJZiBhbnkKK2lnbm9yZWQgZmlsZXMgd2VyZSBleHBsaWNpdGx5IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBgZ2l0IGFkZGAKK3dpbGwgZmFpbCB3aXRoIGEgbGlzdCBvZiBpZ25vcmVkIGZpbGVzLiAgSWdub3JlZCBmaWxlcyByZWFjaGVkIGJ5CitkaXJlY3RvcnkgcmVjdXJzaW9uIG9yIGZpbGVuYW1lIGdsb2JiaW5nIHBlcmZvcm1lZCBieSBHaXQgKHF1b3RlIHlvdXIKK2dsb2JzIGJlZm9yZSB0aGUgc2hlbGwpIHdpbGwgYmUgc2lsZW50bHkgaWdub3JlZC4gIFRoZSAnZ2l0IGFkZCcgY29tbWFuZCBjYW4KK2JlIHVzZWQgdG8gYWRkIGlnbm9yZWQgZmlsZXMgd2l0aCB0aGUgYC1mYCAoZm9yY2UpIG9wdGlvbi4KKworUGxlYXNlIHNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZm9yIGFsdGVybmF0aXZlIHdheXMgdG8gYWRkIGNvbnRlbnQgdG8gYQorY29tbWl0LgorCisKK09QVElPTlMKKy0tLS0tLS0KKzxmaWxlcGF0dGVybj4uLi46OgorCUZpbGVzIHRvIGFkZCBjb250ZW50IGZyb20uICBGaWxlZ2xvYnMgKGUuZy4gYCouY2ApIGNhbgorCWJlIGdpdmVuIHRvIGFkZCBhbGwgbWF0Y2hpbmcgZmlsZXMuICBBbHNvIGEKKwlsZWFkaW5nIGRpcmVjdG9yeSBuYW1lIChlLmcuIGBkaXJgIHRvIGFkZCBgZGlyL2ZpbGUxYAorCWFuZCBgZGlyL2ZpbGUyYCkgY2FuIGJlIGdpdmVuIHRvIGFkZCBhbGwgZmlsZXMgaW4gdGhlCisJZGlyZWN0b3J5LCByZWN1cnNpdmVseS4KKworLW46OgorLS1kcnktcnVuOjoKKwlEb24ndCBhY3R1YWxseSBhZGQgdGhlIGZpbGUocyksIGp1c3Qgc2hvdyBpZiB0aGV5IGV4aXN0IGFuZC9vciB3aWxsCisJYmUgaWdub3JlZC4KKworLXY6OgorLS12ZXJib3NlOjoKKyAgICAgICAgQmUgdmVyYm9zZS4KKworLWY6OgorLS1mb3JjZTo6CisJQWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzLgorCistaTo6CistLWludGVyYWN0aXZlOjoKKwlBZGQgbW9kaWZpZWQgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSBpbnRlcmFjdGl2ZWx5IHRvCisJdGhlIGluZGV4LiBPcHRpb25hbCBwYXRoIGFyZ3VtZW50cyBtYXkgYmUgc3VwcGxpZWQgdG8gbGltaXQKKwlvcGVyYXRpb24gdG8gYSBzdWJzZXQgb2YgdGhlIHdvcmtpbmcgdHJlZS4gU2VlIGBgSW50ZXJhY3RpdmUKKwltb2RlJycgZm9yIGRldGFpbHMuCisKKy1wOjoKKy0tcGF0Y2g6OgorCUludGVyYWN0aXZlbHkgY2hvb3NlIGh1bmtzIG9mIHBhdGNoIGJldHdlZW4gdGhlIGluZGV4IGFuZCB0aGUKKwl3b3JrIHRyZWUgYW5kIGFkZCB0aGVtIHRvIHRoZSBpbmRleC4gVGhpcyBnaXZlcyB0aGUgdXNlciBhIGNoYW5jZQorCXRvIHJldmlldyB0aGUgZGlmZmVyZW5jZSBiZWZvcmUgYWRkaW5nIG1vZGlmaWVkIGNvbnRlbnRzIHRvIHRoZQorCWluZGV4LgorKworVGhpcyBlZmZlY3RpdmVseSBydW5zIGBhZGQgLS1pbnRlcmFjdGl2ZWAsIGJ1dCBieXBhc3NlcyB0aGUKK2luaXRpYWwgY29tbWFuZCBtZW51IGFuZCBkaXJlY3RseSBqdW1wcyB0byB0aGUgYHBhdGNoYCBzdWJjb21tYW5kLgorU2VlIGBgSW50ZXJhY3RpdmUgbW9kZScnIGZvciBkZXRhaWxzLgorCistZSwgXC0tZWRpdDo6CisJT3BlbiB0aGUgZGlmZiB2cy4gdGhlIGluZGV4IGluIGFuIGVkaXRvciBhbmQgbGV0IHRoZSB1c2VyCisJZWRpdCBpdC4gIEFmdGVyIHRoZSBlZGl0b3Igd2FzIGNsb3NlZCwgYWRqdXN0IHRoZSBodW5rIGhlYWRlcnMKKwlhbmQgYXBwbHkgdGhlIHBhdGNoIHRvIHRoZSBpbmRleC4KKysKK1RoZSBpbnRlbnQgb2YgdGhpcyBvcHRpb24gaXMgdG8gcGljayBhbmQgY2hvb3NlIGxpbmVzIG9mIHRoZSBwYXRjaCB0bworYXBwbHksIG9yIGV2ZW4gdG8gbW9kaWZ5IHRoZSBjb250ZW50cyBvZiBsaW5lcyB0byBiZSBzdGFnZWQuIFRoaXMgY2FuIGJlCitxdWlja2VyIGFuZCBtb3JlIGZsZXhpYmxlIHRoYW4gdXNpbmcgdGhlIGludGVyYWN0aXZlIGh1bmsgc2VsZWN0b3IuCitIb3dldmVyLCBpdCBpcyBlYXN5IHRvIGNvbmZ1c2Ugb25lc2VsZiBhbmQgY3JlYXRlIGEgcGF0Y2ggdGhhdCBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIGluZGV4LiBTZWUgRURJVElORyBQQVRDSEVTIGJlbG93LgorCistdTo6CistLXVwZGF0ZTo6CisJT25seSBtYXRjaCA8ZmlsZXBhdHRlcm4+IGFnYWluc3QgYWxyZWFkeSB0cmFja2VkIGZpbGVzIGluCisJdGhlIGluZGV4IHJhdGhlciB0aGFuIHRoZSB3b3JraW5nIHRyZWUuIFRoYXQgbWVhbnMgdGhhdCBpdAorCXdpbGwgbmV2ZXIgc3RhZ2UgbmV3IGZpbGVzLCBidXQgdGhhdCBpdCB3aWxsIHN0YWdlIG1vZGlmaWVkCisJbmV3IGNvbnRlbnRzIG9mIHRyYWNrZWQgZmlsZXMgYW5kIHRoYXQgaXQgd2lsbCByZW1vdmUgZmlsZXMKKwlmcm9tIHRoZSBpbmRleCBpZiB0aGUgY29ycmVzcG9uZGluZyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlCisJaGF2ZSBiZWVuIHJlbW92ZWQuCisrCitJZiBubyA8ZmlsZXBhdHRlcm4+IGlzIGdpdmVuLCBkZWZhdWx0IHRvICIuIjsgaW4gb3RoZXIgd29yZHMsCit1cGRhdGUgYWxsIHRyYWNrZWQgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBpdHMKK3N1YmRpcmVjdG9yaWVzLgorCistQTo6CistLWFsbDo6CisJTGlrZSBgLXVgLCBidXQgbWF0Y2ggPGZpbGVwYXR0ZXJuPiBhZ2FpbnN0IGZpbGVzIGluIHRoZQorCXdvcmtpbmcgdHJlZSBpbiBhZGRpdGlvbiB0byB0aGUgaW5kZXguIFRoYXQgbWVhbnMgdGhhdCBpdAorCXdpbGwgZmluZCBuZXcgZmlsZXMgYXMgd2VsbCBhcyBzdGFnaW5nIG1vZGlmaWVkIGNvbnRlbnQgYW5kCisJcmVtb3ZpbmcgZmlsZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSB3b3JraW5nIHRyZWUuCisKKy1OOjoKKy0taW50ZW50LXRvLWFkZDo6CisJUmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyLiBBbiBlbnRyeQorCWZvciB0aGUgcGF0aCBpcyBwbGFjZWQgaW4gdGhlIGluZGV4IHdpdGggbm8gY29udGVudC4gVGhpcyBpcworCXVzZWZ1bCBmb3IsIGFtb25nIG90aGVyIHRoaW5ncywgc2hvd2luZyB0aGUgdW5zdGFnZWQgY29udGVudCBvZgorCXN1Y2ggZmlsZXMgd2l0aCBgZ2l0IGRpZmZgIGFuZCBjb21taXR0aW5nIHRoZW0gd2l0aCBgZ2l0IGNvbW1pdAorCS1hYC4KKworLS1yZWZyZXNoOjoKKwlEb24ndCBhZGQgdGhlIGZpbGUocyksIGJ1dCBvbmx5IHJlZnJlc2ggdGhlaXIgc3RhdCgpCisJaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4LgorCistLWlnbm9yZS1lcnJvcnM6OgorCUlmIHNvbWUgZmlsZXMgY291bGQgbm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIGluZGV4aW5nCisJdGhlbSwgZG8gbm90IGFib3J0IHRoZSBvcGVyYXRpb24sIGJ1dCBjb250aW51ZSBhZGRpbmcgdGhlCisJb3RoZXJzLiBUaGUgY29tbWFuZCBzaGFsbCBzdGlsbCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzLgorCVRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBhZGQuaWdub3JlRXJyb3JzYCBjYW4gYmUgc2V0IHRvCisJdHJ1ZSB0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorCistLWlnbm9yZS1taXNzaW5nOjoKKwlUaGlzIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuLiBCeSB1c2luZworCXRoaXMgb3B0aW9uIHRoZSB1c2VyIGNhbiBjaGVjayBpZiBhbnkgb2YgdGhlIGdpdmVuIGZpbGVzIHdvdWxkCisJYmUgaWdub3JlZCwgbm8gbWF0dGVyIGlmIHRoZXkgYXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgd29yaworCXRyZWUgb3Igbm90LgorCitcLS06OgorCVRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20KKwl0aGUgbGlzdCBvZiBmaWxlcywgKHVzZWZ1bCB3aGVuIGZpbGVuYW1lcyBtaWdodCBiZSBtaXN0YWtlbgorCWZvciBjb21tYW5kLWxpbmUgb3B0aW9ucykuCisKKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5leGNsdWRlc2ZpbGVgIGluZGljYXRlcyBhIHBhdGggdG8gYQorZmlsZSBjb250YWluaW5nIHBhdHRlcm5zIG9mIGZpbGUgbmFtZXMgdG8gZXhjbHVkZSBmcm9tIGdpdC1hZGQsIHNpbWlsYXIgdG8KKyRHSVRfRElSL2luZm8vZXhjbHVkZS4gIFBhdHRlcm5zIGluIHRoZSBleGNsdWRlIGZpbGUgYXJlIHVzZWQgaW4gYWRkaXRpb24gdG8KK3Rob3NlIGluIGluZm8vZXhjbHVkZS4gIFNlZSBsaW5rZ2l0OmdpdGlnbm9yZVs1XS4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBBZGRzIGNvbnRlbnQgZnJvbSBhbGwgYCoudHh0YCBmaWxlcyB1bmRlciBgRG9jdW1lbnRhdGlvbmAgZGlyZWN0b3J5CithbmQgaXRzIHN1YmRpcmVjdG9yaWVzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBhZGQgRG9jdW1lbnRhdGlvbi9cKi50eHQKKy0tLS0tLS0tLS0tLQorKworTm90ZSB0aGF0IHRoZSBhc3RlcmlzayBgKmAgaXMgcXVvdGVkIGZyb20gdGhlIHNoZWxsIGluIHRoaXMKK2V4YW1wbGU7IHRoaXMgbGV0cyB0aGUgY29tbWFuZCBpbmNsdWRlIHRoZSBmaWxlcyBmcm9tCitzdWJkaXJlY3RvcmllcyBvZiBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeS4KKworKiBDb25zaWRlcnMgYWRkaW5nIGNvbnRlbnQgZnJvbSBhbGwgZ2l0LSouc2ggc2NyaXB0czoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGdpdC0qLnNoCistLS0tLS0tLS0tLS0KKysKK0JlY2F1c2UgdGhpcyBleGFtcGxlIGxldHMgdGhlIHNoZWxsIGV4cGFuZCB0aGUgYXN0ZXJpc2sgKGkuZS4geW91IGFyZQorbGlzdGluZyB0aGUgZmlsZXMgZXhwbGljaXRseSksIGl0IGRvZXMgbm90IGNvbnNpZGVyCitgc3ViZGlyL2dpdC1mb28uc2hgLgorCitJbnRlcmFjdGl2ZSBtb2RlCistLS0tLS0tLS0tLS0tLS0tCitXaGVuIHRoZSBjb21tYW5kIGVudGVycyB0aGUgaW50ZXJhY3RpdmUgbW9kZSwgaXQgc2hvd3MgdGhlCitvdXRwdXQgb2YgdGhlICdzdGF0dXMnIHN1YmNvbW1hbmQsIGFuZCB0aGVuIGdvZXMgaW50byBpdHMKK2ludGVyYWN0aXZlIGNvbW1hbmQgbG9vcC4KKworVGhlIGNvbW1hbmQgbG9vcCBzaG93cyB0aGUgbGlzdCBvZiBzdWJjb21tYW5kcyBhdmFpbGFibGUsIGFuZAorZ2l2ZXMgYSBwcm9tcHQgIldoYXQgbm93PiAiLiAgSW4gZ2VuZXJhbCwgd2hlbiB0aGUgcHJvbXB0IGVuZHMKK3dpdGggYSBzaW5nbGUgJz4nLCB5b3UgY2FuIHBpY2sgb25seSBvbmUgb2YgdGhlIGNob2ljZXMgZ2l2ZW4KK2FuZCB0eXBlIHJldHVybiwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyAgICAqKiogQ29tbWFuZHMgKioqCisgICAgICAxOiBzdGF0dXMgICAgICAgMjogdXBkYXRlICAgICAgIDM6IHJldmVydCAgICAgICA0OiBhZGQgdW50cmFja2VkCisgICAgICA1OiBwYXRjaCAgICAgICAgNjogZGlmZiAgICAgICAgIDc6IHF1aXQgICAgICAgICA4OiBoZWxwCisgICAgV2hhdCBub3c+IDEKKy0tLS0tLS0tLS0tLQorCitZb3UgYWxzbyBjb3VsZCBzYXkgYHNgIG9yIGBzdGFgIG9yIGBzdGF0dXNgIGFib3ZlIGFzIGxvbmcgYXMgdGhlCitjaG9pY2UgaXMgdW5pcXVlLgorCitUaGUgbWFpbiBjb21tYW5kIGxvb3AgaGFzIDYgc3ViY29tbWFuZHMgKHBsdXMgaGVscCBhbmQgcXVpdCkuCisKK3N0YXR1czo6CisKKyAgIFRoaXMgc2hvd3MgdGhlIGNoYW5nZSBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IChpLmUuIHdoYXQgd2lsbCBiZQorICAgY29tbWl0dGVkIGlmIHlvdSBzYXkgYGdpdCBjb21taXRgKSwgYW5kIGJldHdlZW4gaW5kZXggYW5kCisgICB3b3JraW5nIHRyZWUgZmlsZXMgKGkuZS4gd2hhdCB5b3UgY291bGQgc3RhZ2UgZnVydGhlciBiZWZvcmUKKyAgIGBnaXQgY29tbWl0YCB1c2luZyBgZ2l0IGFkZGApIGZvciBlYWNoIHBhdGguICBBIHNhbXBsZSBvdXRwdXQKKyAgIGxvb2tzIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBzdGFnZWQgICAgIHVuc3RhZ2VkIHBhdGgKKyAgICAgMTogICAgICAgYmluYXJ5ICAgICAgbm90aGluZyBmb28ucG5nCisgICAgIDI6ICAgICArNDAzLy0zNSAgICAgICAgKzEvLTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAorLS0tLS0tLS0tLS0tCisrCitJdCBzaG93cyB0aGF0IGZvby5wbmcgaGFzIGRpZmZlcmVuY2VzIGZyb20gSEVBRCAoYnV0IHRoYXQgaXMKK2JpbmFyeSBzbyBsaW5lIGNvdW50IGNhbm5vdCBiZSBzaG93bikgYW5kIHRoZXJlIGlzIG5vCitkaWZmZXJlbmNlIGJldHdlZW4gaW5kZXhlZCBjb3B5IGFuZCB0aGUgd29ya2luZyB0cmVlCit2ZXJzaW9uIChpZiB0aGUgd29ya2luZyB0cmVlIHZlcnNpb24gd2VyZSBhbHNvIGRpZmZlcmVudCwKKydiaW5hcnknIHdvdWxkIGhhdmUgYmVlbiBzaG93biBpbiBwbGFjZSBvZiAnbm90aGluZycpLiAgVGhlCitvdGhlciBmaWxlLCBnaXQtYWRke2xpdGRkfWludGVyYWN0aXZlLnBlcmwsIGhhcyA0MDMgbGluZXMgYWRkZWQKK2FuZCAzNSBsaW5lcyBkZWxldGVkIGlmIHlvdSBjb21taXQgd2hhdCBpcyBpbiB0aGUgaW5kZXgsIGJ1dAord29ya2luZyB0cmVlIGZpbGUgaGFzIGZ1cnRoZXIgbW9kaWZpY2F0aW9ucyAob25lIGFkZGl0aW9uIGFuZAorb25lIGRlbGV0aW9uKS4KKwordXBkYXRlOjoKKworICAgVGhpcyBzaG93cyB0aGUgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBpc3N1ZXMgYW4gIlVwZGF0ZT4+IgorICAgcHJvbXB0LiAgV2hlbiB0aGUgcHJvbXB0IGVuZHMgd2l0aCBkb3VibGUgJz4+JywgeW91IGNhbgorICAgbWFrZSBtb3JlIHRoYW4gb25lIHNlbGVjdGlvbiwgY29uY2F0ZW5hdGVkIHdpdGggd2hpdGVzcGFjZSBvcgorICAgY29tbWEuICBBbHNvIHlvdSBjYW4gc2F5IHJhbmdlcy4gIEUuZy4gIjItNSA3LDkiIHRvIGNob29zZQorICAgMiwzLDQsNSw3LDkgZnJvbSB0aGUgbGlzdC4gIElmIHRoZSBzZWNvbmQgbnVtYmVyIGluIGEgcmFuZ2UgaXMKKyAgIG9taXR0ZWQsIGFsbCByZW1haW5pbmcgcGF0Y2hlcyBhcmUgdGFrZW4uICBFLmcuICI3LSIgdG8gY2hvb3NlCisgICA3LDgsOSBmcm9tIHRoZSBsaXN0LiAgWW91IGNhbiBzYXkgJyonIHRvIGNob29zZSBldmVyeXRoaW5nLgorKworV2hhdCB5b3UgY2hvc2UgYXJlIHRoZW4gaGlnaGxpZ2h0ZWQgd2l0aCAnKicsCitsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgc3RhZ2VkICAgICB1bnN0YWdlZCBwYXRoCisgIDE6ICAgICAgIGJpbmFyeSAgICAgIG5vdGhpbmcgZm9vLnBuZworKiAyOiAgICAgKzQwMy8tMzUgICAgICAgICsxLy0xIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKKy0tLS0tLS0tLS0tLQorKworVG8gcmVtb3ZlIHNlbGVjdGlvbiwgcHJlZml4IHRoZSBpbnB1dCB3aXRoIGAtYAorbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tCitVcGRhdGU+PiAtMgorLS0tLS0tLS0tLS0tCisrCitBZnRlciBtYWtpbmcgdGhlIHNlbGVjdGlvbiwgYW5zd2VyIHdpdGggYW4gZW1wdHkgbGluZSB0byBzdGFnZSB0aGUKK2NvbnRlbnRzIG9mIHdvcmtpbmcgdHJlZSBmaWxlcyBmb3Igc2VsZWN0ZWQgcGF0aHMgaW4gdGhlIGluZGV4LgorCityZXZlcnQ6OgorCisgIFRoaXMgaGFzIGEgdmVyeSBzaW1pbGFyIFVJIHRvICd1cGRhdGUnLCBhbmQgdGhlIHN0YWdlZAorICBpbmZvcm1hdGlvbiBmb3Igc2VsZWN0ZWQgcGF0aHMgYXJlIHJldmVydGVkIHRvIHRoYXQgb2YgdGhlCisgIEhFQUQgdmVyc2lvbi4gIFJldmVydGluZyBuZXcgcGF0aHMgbWFrZXMgdGhlbSB1bnRyYWNrZWQuCisKK2FkZCB1bnRyYWNrZWQ6OgorCisgIFRoaXMgaGFzIGEgdmVyeSBzaW1pbGFyIFVJIHRvICd1cGRhdGUnIGFuZAorICAncmV2ZXJ0JywgYW5kIGxldHMgeW91IGFkZCB1bnRyYWNrZWQgcGF0aHMgdG8gdGhlIGluZGV4LgorCitwYXRjaDo6CisKKyAgVGhpcyBsZXRzIHlvdSBjaG9vc2Ugb25lIHBhdGggb3V0IG9mIGEgJ3N0YXR1cycgbGlrZSBzZWxlY3Rpb24uCisgIEFmdGVyIGNob29zaW5nIHRoZSBwYXRoLCBpdCBwcmVzZW50cyB0aGUgZGlmZiBiZXR3ZWVuIHRoZSBpbmRleAorICBhbmQgdGhlIHdvcmtpbmcgdHJlZSBmaWxlIGFuZCBhc2tzIHlvdSBpZiB5b3Ugd2FudCB0byBzdGFnZQorICB0aGUgY2hhbmdlIG9mIGVhY2ggaHVuay4gIFlvdSBjYW4gc2VsZWN0IG9uZSBvZiB0aGUgZm9sbG93aW5nCisgIG9wdGlvbnMgYW5kIHR5cGUgcmV0dXJuOgorCisgICAgICAgeSAtIHN0YWdlIHRoaXMgaHVuaworICAgICAgIG4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rCisgICAgICAgcSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKKyAgICAgICBhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKKyAgICAgICBkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBub3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorICAgICAgIGcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvCisgICAgICAgLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleAorICAgICAgIGogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVuaworICAgICAgIEogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rCisgICAgICAgayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVuaworICAgICAgIEsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVuaworICAgICAgIHMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rcworICAgICAgIGUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmsKKyAgICAgICA/IC0gcHJpbnQgaGVscAorKworQWZ0ZXIgZGVjaWRpbmcgdGhlIGZhdGUgZm9yIGFsbCBodW5rcywgaWYgdGhlcmUgaXMgYW55IGh1bmsKK3RoYXQgd2FzIGNob3NlbiwgdGhlIGluZGV4IGlzIHVwZGF0ZWQgd2l0aCB0aGUgc2VsZWN0ZWQgaHVua3MuCisrCitZb3UgY2FuIG9taXQgaGF2aW5nIHRvIHR5cGUgcmV0dXJuIGhlcmUsIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIGBpbnRlcmFjdGl2ZS5zaW5nbGVrZXlgIHRvIGB0cnVlYC4KKworZGlmZjo6CisKKyAgVGhpcyBsZXRzIHlvdSByZXZpZXcgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCAoaS5lLiBiZXR3ZWVuCisgIEhFQUQgYW5kIGluZGV4KS4KKworCitFRElUSU5HIFBBVENIRVMKKy0tLS0tLS0tLS0tLS0tLQorCitJbnZva2luZyBgZ2l0IGFkZCAtZWAgb3Igc2VsZWN0aW5nIGBlYCBmcm9tIHRoZSBpbnRlcmFjdGl2ZSBodW5rCitzZWxlY3RvciB3aWxsIG9wZW4gYSBwYXRjaCBpbiB5b3VyIGVkaXRvcjsgYWZ0ZXIgdGhlIGVkaXRvciBleGl0cywgdGhlCityZXN1bHQgaXMgYXBwbGllZCB0byB0aGUgaW5kZXguIFlvdSBhcmUgZnJlZSB0byBtYWtlIGFyYml0cmFyeSBjaGFuZ2VzCit0byB0aGUgcGF0Y2gsIGJ1dCBub3RlIHRoYXQgc29tZSBjaGFuZ2VzIG1heSBoYXZlIGNvbmZ1c2luZyByZXN1bHRzLCBvcgorZXZlbiByZXN1bHQgaW4gYSBwYXRjaCB0aGF0IGNhbm5vdCBiZSBhcHBsaWVkLiAgSWYgeW91IHdhbnQgdG8gYWJvcnQgdGhlCitvcGVyYXRpb24gZW50aXJlbHkgKGkuZS4sIHN0YWdlIG5vdGhpbmcgbmV3IGluIHRoZSBpbmRleCksIHNpbXBseSBkZWxldGUKK2FsbCBsaW5lcyBvZiB0aGUgcGF0Y2guIFRoZSBsaXN0IGJlbG93IGRlc2NyaWJlcyBzb21lIGNvbW1vbiB0aGluZ3MgeW91CittYXkgc2VlIGluIGEgcGF0Y2gsIGFuZCB3aGljaCBlZGl0aW5nIG9wZXJhdGlvbnMgbWFrZSBzZW5zZSBvbiB0aGVtLgorCistLQorYWRkZWQgY29udGVudDo6CisKK0FkZGVkIGNvbnRlbnQgaXMgcmVwcmVzZW50ZWQgYnkgbGluZXMgYmVnaW5uaW5nIHdpdGggIntwbHVzfSIuIFlvdSBjYW4KK3ByZXZlbnQgc3RhZ2luZyBhbnkgYWRkaXRpb24gbGluZXMgYnkgZGVsZXRpbmcgdGhlbS4KKworcmVtb3ZlZCBjb250ZW50OjoKKworUmVtb3ZlZCBjb250ZW50IGlzIHJlcHJlc2VudGVkIGJ5IGxpbmVzIGJlZ2lubmluZyB3aXRoICItIi4gWW91IGNhbgorcHJldmVudCBzdGFnaW5nIHRoZWlyIHJlbW92YWwgYnkgY29udmVydGluZyB0aGUgIi0iIHRvIGEgIiAiIChzcGFjZSkuCisKK21vZGlmaWVkIGNvbnRlbnQ6OgorCitNb2RpZmllZCBjb250ZW50IGlzIHJlcHJlc2VudGVkIGJ5ICItIiBsaW5lcyAocmVtb3ZpbmcgdGhlIG9sZCBjb250ZW50KQorZm9sbG93ZWQgYnkgIntwbHVzfSIgbGluZXMgKGFkZGluZyB0aGUgcmVwbGFjZW1lbnQgY29udGVudCkuIFlvdSBjYW4KK3ByZXZlbnQgc3RhZ2luZyB0aGUgbW9kaWZpY2F0aW9uIGJ5IGNvbnZlcnRpbmcgIi0iIGxpbmVzIHRvICIgIiwgYW5kCityZW1vdmluZyAie3BsdXN9IiBsaW5lcy4gQmV3YXJlIHRoYXQgbW9kaWZ5aW5nIG9ubHkgaGFsZiBvZiB0aGUgcGFpciBpcworbGlrZWx5IHRvIGludHJvZHVjZSBjb25mdXNpbmcgY2hhbmdlcyB0byB0aGUgaW5kZXguCistLQorCitUaGVyZSBhcmUgYWxzbyBtb3JlIGNvbXBsZXggb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQuIEJ1dCBiZXdhcmUKK3RoYXQgYmVjYXVzZSB0aGUgcGF0Y2ggaXMgYXBwbGllZCBvbmx5IHRvIHRoZSBpbmRleCBhbmQgbm90IHRoZSB3b3JraW5nCit0cmVlLCB0aGUgd29ya2luZyB0cmVlIHdpbGwgYXBwZWFyIHRvICJ1bmRvIiB0aGUgY2hhbmdlIGluIHRoZSBpbmRleC4KK0ZvciBleGFtcGxlLCBpbnRyb2R1Y2luZyBhIG5ldyBsaW5lIGludG8gdGhlIGluZGV4IHRoYXQgaXMgaW4gbmVpdGhlcgordGhlIEhFQUQgbm9yIHRoZSB3b3JraW5nIHRyZWUgd2lsbCBzdGFnZSB0aGUgbmV3IGxpbmUgZm9yIGNvbW1pdCwgYnV0Cit0aGUgbGluZSB3aWxsIGFwcGVhciB0byBiZSByZXZlcnRlZCBpbiB0aGUgd29ya2luZyB0cmVlLgorCitBdm9pZCB1c2luZyB0aGVzZSBjb25zdHJ1Y3RzLCBvciBkbyBzbyB3aXRoIGV4dHJlbWUgY2F1dGlvbi4KKworLS0KK3JlbW92aW5nIHVudG91Y2hlZCBjb250ZW50OjoKKworQ29udGVudCB3aGljaCBkb2VzIG5vdCBkaWZmZXIgYmV0d2VlbiB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBtYXkgYmUKK3Nob3duIG9uIGNvbnRleHQgbGluZXMsIGJlZ2lubmluZyB3aXRoIGEgIiAiIChzcGFjZSkuICBZb3UgY2FuIHN0YWdlCitjb250ZXh0IGxpbmVzIGZvciByZW1vdmFsIGJ5IGNvbnZlcnRpbmcgdGhlIHNwYWNlIHRvIGEgIi0iLiBUaGUKK3Jlc3VsdGluZyB3b3JraW5nIHRyZWUgZmlsZSB3aWxsIGFwcGVhciB0byByZS1hZGQgdGhlIGNvbnRlbnQuCisKK21vZGlmeWluZyBleGlzdGluZyBjb250ZW50OjoKKworT25lIGNhbiBhbHNvIG1vZGlmeSBjb250ZXh0IGxpbmVzIGJ5IHN0YWdpbmcgdGhlbSBmb3IgcmVtb3ZhbCAoYnkKK2NvbnZlcnRpbmcgIiAiIHRvICItIikgYW5kIGFkZGluZyBhICJ7cGx1c30iIGxpbmUgd2l0aCB0aGUgbmV3IGNvbnRlbnQuCitTaW1pbGFybHksIG9uZSBjYW4gbW9kaWZ5ICJ7cGx1c30iIGxpbmVzIGZvciBleGlzdGluZyBhZGRpdGlvbnMgb3IKK21vZGlmaWNhdGlvbnMuIEluIGFsbCBjYXNlcywgdGhlIG5ldyBtb2RpZmljYXRpb24gd2lsbCBhcHBlYXIgcmV2ZXJ0ZWQKK2luIHRoZSB3b3JraW5nIHRyZWUuCisKK25ldyBjb250ZW50OjoKKworWW91IG1heSBhbHNvIGFkZCBuZXcgY29udGVudCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBwYXRjaDsgc2ltcGx5CithZGQgbmV3IGxpbmVzLCBlYWNoIHN0YXJ0aW5nIHdpdGggIntwbHVzfSIuIFRoZSBhZGRpdGlvbiB3aWxsIGFwcGVhcgorcmV2ZXJ0ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKy0tCisKK1RoZXJlIGFyZSBhbHNvIHNldmVyYWwgb3BlcmF0aW9ucyB3aGljaCBzaG91bGQgYmUgYXZvaWRlZCBlbnRpcmVseSwgYXMKK3RoZXkgd2lsbCBtYWtlIHRoZSBwYXRjaCBpbXBvc3NpYmxlIHRvIGFwcGx5OgorCisqIGFkZGluZyBjb250ZXh0ICgiICIpIG9yIHJlbW92YWwgKCItIikgbGluZXMKKyogZGVsZXRpbmcgY29udGV4dCBvciByZW1vdmFsIGxpbmVzCisqIG1vZGlmeWluZyB0aGUgY29udGVudHMgb2YgY29udGV4dCBvciByZW1vdmFsIGxpbmVzCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtc3RhdHVzWzFdCitsaW5rZ2l0OmdpdC1ybVsxXQorbGlua2dpdDpnaXQtcmVzZXRbMV0KK2xpbmtnaXQ6Z2l0LW12WzFdCitsaW5rZ2l0OmdpdC1jb21taXRbMV0KK2xpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQ1N2E4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CkBAIC0wLDAgKzEsMjAwIEBACitnaXQtYW0oMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYW0gLSBBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGFtJyBbLS1zaWdub2ZmXSBbLS1rZWVwXSBbLS1rZWVwLWNyIHwgLS1uby1rZWVwLWNyXSBbLS11dGY4IHwgLS1uby11dGY4XQorCSBbLS0zd2F5XSBbLS1pbnRlcmFjdGl2ZV0gWy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGVdCisJIFstLWlnbm9yZS1kYXRlXSBbLS1pZ25vcmUtc3BhY2UtY2hhbmdlIHwgLS1pZ25vcmUtd2hpdGVzcGFjZV0KKwkgWy0td2hpdGVzcGFjZT08b3B0aW9uPl0gWy1DPG4+XSBbLXA8bj5dIFstLWRpcmVjdG9yeT08ZGlyPl0KKwkgWy0tZXhjbHVkZT08cGF0aD5dIFstLWluY2x1ZGU9PHBhdGg+XSBbLS1yZWplY3RdIFstcSB8IC0tcXVpZXRdCisJIFstLXNjaXNzb3JzIHwgLS1uby1zY2lzc29yc10KKwkgWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXQorJ2dpdCBhbScgKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1NwbGl0cyBtYWlsIG1lc3NhZ2VzIGluIGEgbWFpbGJveCBpbnRvIGNvbW1pdCBsb2cgbWVzc2FnZSwKK2F1dGhvcnNoaXAgaW5mb3JtYXRpb24gYW5kIHBhdGNoZXMsIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlCitjdXJyZW50IGJyYW5jaC4KKworT1BUSU9OUworLS0tLS0tLQorKDxtYm94Pnw8TWFpbGRpcj4pLi4uOjoKKwlUaGUgbGlzdCBvZiBtYWlsYm94IGZpbGVzIHRvIHJlYWQgcGF0Y2hlcyBmcm9tLiBJZiB5b3UgZG8gbm90CisJc3VwcGx5IHRoaXMgYXJndW1lbnQsIHRoZSBjb21tYW5kIHJlYWRzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCUlmIHlvdSBzdXBwbHkgZGlyZWN0b3JpZXMsIHRoZXkgd2lsbCBiZSB0cmVhdGVkIGFzIE1haWxkaXJzLgorCistczo6CistLXNpZ25vZmY6OgorCUFkZCBhIGBTaWduZWQtb2ZmLWJ5OmAgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UsIHVzaW5nCisJdGhlIGNvbW1pdHRlciBpZGVudGl0eSBvZiB5b3Vyc2VsZi4KKworLWs6OgorLS1rZWVwOjoKKwlQYXNzIGAta2AgZmxhZyB0byAnZ2l0IG1haWxpbmZvJyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KKworLS1rZWVwLW5vbi1wYXRjaDo6CisJUGFzcyBgLWJgIGZsYWcgdG8gJ2dpdCBtYWlsaW5mbycgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCisKKy0ta2VlcC1jcjo6CistLW5vLWtlZXAtY3I6OgorCVdpdGggYC0ta2VlcC1jcmAsIGNhbGwgJ2dpdCBtYWlsc3BsaXQnIChzZWUgbGlua2dpdDpnaXQtbWFpbHNwbGl0WzFdKQorCXdpdGggdGhlIHNhbWUgb3B0aW9uLCB0byBwcmV2ZW50IGl0IGZyb20gc3RyaXBwaW5nIENSIGF0IHRoZSBlbmQgb2YKKwlsaW5lcy4gYGFtLmtlZXBjcmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZQorCWRlZmF1bHQgYmVoYXZpb3VyLiAgYC0tbm8ta2VlcC1jcmAgaXMgdXNlZnVsIHRvIG92ZXJyaWRlIGBhbS5rZWVwY3JgLgorCistYzo6CistLXNjaXNzb3JzOjoKKwlSZW1vdmUgZXZlcnl0aGluZyBpbiBib2R5IGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUgKHNlZQorCWxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KKworLS1uby1zY2lzc29yczo6CisJSWdub3JlIHNjaXNzb3JzIGxpbmVzIChzZWUgbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgorCistcTo6CistLXF1aWV0OjoKKwlCZSBxdWlldC4gT25seSBwcmludCBlcnJvciBtZXNzYWdlcy4KKworLXU6OgorLS11dGY4OjoKKwlQYXNzIGAtdWAgZmxhZyB0byAnZ2l0IG1haWxpbmZvJyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KKwlUaGUgcHJvcG9zZWQgY29tbWl0IGxvZyBtZXNzYWdlIHRha2VuIGZyb20gdGhlIGUtbWFpbAorCWlzIHJlLWNvZGVkIGludG8gVVRGLTggZW5jb2RpbmcgKGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKwlgaTE4bi5jb21taXRlbmNvZGluZ2AgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBwcm9qZWN0J3MKKwlwcmVmZXJyZWQgZW5jb2RpbmcgaWYgaXQgaXMgbm90IFVURi04KS4KKysKK1RoaXMgd2FzIG9wdGlvbmFsIGluIHByaW9yIHZlcnNpb25zIG9mIGdpdCwgYnV0IG5vdyBpdCBpcyB0aGUKK2RlZmF1bHQuICAgWW91IGNhbiB1c2UgYC0tbm8tdXRmOGAgdG8gb3ZlcnJpZGUgdGhpcy4KKworLS1uby11dGY4OjoKKwlQYXNzIGAtbmAgZmxhZyB0byAnZ2l0IG1haWxpbmZvJyAoc2VlCisJbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgorCistMzo6CistLTN3YXk6OgorCVdoZW4gdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGNsZWFubHksIGZhbGwgYmFjayBvbgorCTMtd2F5IG1lcmdlIGlmIHRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icworCWl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvIGFuZCB3ZSBoYXZlIHRob3NlIGJsb2JzCisJYXZhaWxhYmxlIGxvY2FsbHkuCisKKy0taWdub3JlLWRhdGU6OgorLS1pZ25vcmUtc3BhY2UtY2hhbmdlOjoKKy0taWdub3JlLXdoaXRlc3BhY2U6OgorLS13aGl0ZXNwYWNlPTxvcHRpb24+OjoKKy1DPG4+OjoKKy1wPG4+OjoKKy0tZGlyZWN0b3J5PTxkaXI+OjoKKy0tZXhjbHVkZT08cGF0aD46OgorLS1pbmNsdWRlPTxwYXRoPjo6CistLXJlamVjdDo6CisJVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byB0aGUgJ2dpdCBhcHBseScgKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkKKwlwcm9ncmFtIHRoYXQgYXBwbGllcworCXRoZSBwYXRjaC4KKworLWk6OgorLS1pbnRlcmFjdGl2ZTo6CisJUnVuIGludGVyYWN0aXZlbHkuCisKKy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGU6OgorCUJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgcmVjb3JkcyB0aGUgZGF0ZSBmcm9tIHRoZSBlLW1haWwKKwltZXNzYWdlIGFzIHRoZSBjb21taXQgYXV0aG9yIGRhdGUsIGFuZCB1c2VzIHRoZSB0aW1lIG9mCisJY29tbWl0IGNyZWF0aW9uIGFzIHRoZSBjb21taXR0ZXIgZGF0ZS4gVGhpcyBhbGxvd3MgdGhlCisJdXNlciB0byBsaWUgYWJvdXQgdGhlIGNvbW1pdHRlciBkYXRlIGJ5IHVzaW5nIHRoZSBzYW1lCisJdmFsdWUgYXMgdGhlIGF1dGhvciBkYXRlLgorCistLWlnbm9yZS1kYXRlOjoKKwlCeSBkZWZhdWx0IHRoZSBjb21tYW5kIHJlY29yZHMgdGhlIGRhdGUgZnJvbSB0aGUgZS1tYWlsCisJbWVzc2FnZSBhcyB0aGUgY29tbWl0IGF1dGhvciBkYXRlLCBhbmQgdXNlcyB0aGUgdGltZSBvZgorCWNvbW1pdCBjcmVhdGlvbiBhcyB0aGUgY29tbWl0dGVyIGRhdGUuIFRoaXMgYWxsb3dzIHRoZQorCXVzZXIgdG8gbGllIGFib3V0IHRoZSBhdXRob3IgZGF0ZSBieSB1c2luZyB0aGUgc2FtZQorCXZhbHVlIGFzIHRoZSBjb21taXR0ZXIgZGF0ZS4KKworLS1za2lwOjoKKwlTa2lwIHRoZSBjdXJyZW50IHBhdGNoLiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgd2hlbgorCXJlc3RhcnRpbmcgYW4gYWJvcnRlZCBwYXRjaC4KKworLS1jb250aW51ZTo6Cistcjo6CistLXJlc29sdmVkOjoKKwlBZnRlciBhIHBhdGNoIGZhaWx1cmUgKGUuZy4gYXR0ZW1wdGluZyB0byBhcHBseQorCWNvbmZsaWN0aW5nIHBhdGNoKSwgdGhlIHVzZXIgaGFzIGFwcGxpZWQgaXQgYnkgaGFuZCBhbmQKKwl0aGUgaW5kZXggZmlsZSBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgYXBwbGljYXRpb24uCisJTWFrZSBhIGNvbW1pdCB1c2luZyB0aGUgYXV0aG9yc2hpcCBhbmQgY29tbWl0IGxvZworCWV4dHJhY3RlZCBmcm9tIHRoZSBlLW1haWwgbWVzc2FnZSBhbmQgdGhlIGN1cnJlbnQgaW5kZXgKKwlmaWxlLCBhbmQgY29udGludWUuCisKKy0tcmVzb2x2ZW1zZz08bXNnPjo6CisJV2hlbiBhIHBhdGNoIGZhaWx1cmUgb2NjdXJzLCA8bXNnPiB3aWxsIGJlIHByaW50ZWQKKwl0byB0aGUgc2NyZWVuIGJlZm9yZSBleGl0aW5nLiAgVGhpcyBvdmVycmlkZXMgdGhlCisJc3RhbmRhcmQgbWVzc2FnZSBpbmZvcm1pbmcgeW91IHRvIHVzZSBgLS1yZXNvbHZlZGAKKwlvciBgLS1za2lwYCB0byBoYW5kbGUgdGhlIGZhaWx1cmUuICBUaGlzIGlzIHNvbGVseQorCWZvciBpbnRlcm5hbCB1c2UgYmV0d2VlbiAnZ2l0IHJlYmFzZScgYW5kICdnaXQgYW0nLgorCistLWFib3J0OjoKKwlSZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhlIGNvbW1pdCBhdXRob3IgbmFtZSBpcyB0YWtlbiBmcm9tIHRoZSAiRnJvbTogIiBsaW5lIG9mIHRoZQorbWVzc2FnZSwgYW5kIGNvbW1pdCBhdXRob3IgZGF0ZSBpcyB0YWtlbiBmcm9tIHRoZSAiRGF0ZTogIiBsaW5lCitvZiB0aGUgbWVzc2FnZS4gIFRoZSAiU3ViamVjdDogIiBsaW5lIGlzIHVzZWQgYXMgdGhlIHRpdGxlIG9mCit0aGUgY29tbWl0LCBhZnRlciBzdHJpcHBpbmcgY29tbW9uIHByZWZpeCAiW1BBVENIIDxhbnl0aGluZz5dIi4KK1RoZSAiU3ViamVjdDogIiBsaW5lIGlzIHN1cHBvc2VkIHRvIGNvbmNpc2VseSBkZXNjcmliZSB3aGF0IHRoZQorY29tbWl0IGlzIGFib3V0IGluIG9uZSBsaW5lIG9mIHRleHQuCisKKyJGcm9tOiAiIGFuZCAiU3ViamVjdDogIiBsaW5lcyBzdGFydGluZyB0aGUgYm9keSBvdmVycmlkZSB0aGUgcmVzcGVjdGl2ZQorY29tbWl0IGF1dGhvciBuYW1lIGFuZCB0aXRsZSB2YWx1ZXMgdGFrZW4gZnJvbSB0aGUgaGVhZGVycy4KKworVGhlIGNvbW1pdCBtZXNzYWdlIGlzIGZvcm1lZCBieSB0aGUgdGl0bGUgdGFrZW4gZnJvbSB0aGUKKyJTdWJqZWN0OiAiLCBhIGJsYW5rIGxpbmUgYW5kIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIHVwIHRvCit3aGVyZSB0aGUgcGF0Y2ggYmVnaW5zLiAgRXhjZXNzIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiBlYWNoCitsaW5lIGlzIGF1dG9tYXRpY2FsbHkgc3RyaXBwZWQuCisKK1RoZSBwYXRjaCBpcyBleHBlY3RlZCB0byBiZSBpbmxpbmUsIGRpcmVjdGx5IGZvbGxvd2luZyB0aGUKK21lc3NhZ2UuICBBbnkgbGluZSB0aGF0IGlzIG9mIHRoZSBmb3JtOgorCisqIHRocmVlLWRhc2hlcyBhbmQgZW5kLW9mLWxpbmUsIG9yCisqIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoICJkaWZmIC0iLCBvcgorKiBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCAiSW5kZXg6ICIKKworaXMgdGFrZW4gYXMgdGhlIGJlZ2lubmluZyBvZiBhIHBhdGNoLCBhbmQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZQoraXMgdGVybWluYXRlZCBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2Ygc3VjaCBhIGxpbmUuCisKK1doZW4gaW5pdGlhbGx5IGludm9raW5nIGBnaXQgYW1gLCB5b3UgZ2l2ZSBpdCB0aGUgbmFtZXMgb2YgdGhlIG1haWxib3hlcwordG8gcHJvY2Vzcy4gIFVwb24gc2VlaW5nIHRoZSBmaXJzdCBwYXRjaCB0aGF0IGRvZXMgbm90IGFwcGx5LCBpdAorYWJvcnRzIGluIHRoZSBtaWRkbGUuICBZb3UgY2FuIHJlY292ZXIgZnJvbSB0aGlzIGluIG9uZSBvZiB0d28gd2F5czoKKworLiBza2lwIHRoZSBjdXJyZW50IHBhdGNoIGJ5IHJlLXJ1bm5pbmcgdGhlIGNvbW1hbmQgd2l0aCB0aGUgJy0tc2tpcCcKKyAgb3B0aW9uLgorCisuIGhhbmQgcmVzb2x2ZSB0aGUgY29uZmxpY3QgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgdXBkYXRlCisgIHRoZSBpbmRleCBmaWxlIHRvIGJyaW5nIGl0IGludG8gYSBzdGF0ZSB0aGF0IHRoZSBwYXRjaCBzaG91bGQKKyAgaGF2ZSBwcm9kdWNlZC4gIFRoZW4gcnVuIHRoZSBjb21tYW5kIHdpdGggdGhlICctLXJlc29sdmVkJyBvcHRpb24uCisKK1RoZSBjb21tYW5kIHJlZnVzZXMgdG8gcHJvY2VzcyBuZXcgbWFpbGJveGVzIHVudGlsIHRoZSBjdXJyZW50CitvcGVyYXRpb24gaXMgZmluaXNoZWQsIHNvIGlmIHlvdSBkZWNpZGUgdG8gc3RhcnQgb3ZlciBmcm9tIHNjcmF0Y2gsCitydW4gYGdpdCBhbSAtLWFib3J0YCBiZWZvcmUgcnVubmluZyB0aGUgY29tbWFuZCB3aXRoIG1haWxib3gKK25hbWVzLgorCitCZWZvcmUgYW55IHBhdGNoZXMgYXJlIGFwcGxpZWQsIE9SSUdfSEVBRCBpcyBzZXQgdG8gdGhlIHRpcCBvZiB0aGUKK2N1cnJlbnQgYnJhbmNoLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCBtdWx0aXBsZQorY29tbWl0cywgbGlrZSBydW5uaW5nICdnaXQgYW0nIG9uIHRoZSB3cm9uZyBicmFuY2ggb3IgYW4gZXJyb3IgaW4gdGhlCitjb21taXRzIHRoYXQgaXMgbW9yZSBlYXNpbHkgZml4ZWQgYnkgY2hhbmdpbmcgdGhlIG1haWxib3ggKGUuZy4KK2Vycm9ycyBpbiB0aGUgIkZyb206IiBsaW5lcykuCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1hcHBseVsxXS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hbm5vdGF0ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbm5vdGF0ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmZDQ4MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFubm90YXRlLnR4dApAQCAtMCwwICsxLDMzIEBACitnaXQtYW5ub3RhdGUoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYW5ub3RhdGUgLSBBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm9ybWF0aW9uCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBhbm5vdGF0ZScgW29wdGlvbnNdIGZpbGUgW3JldmlzaW9uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0Fubm90YXRlcyBlYWNoIGxpbmUgaW4gdGhlIGdpdmVuIGZpbGUgd2l0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjb21taXQKK3doaWNoIGludHJvZHVjZWQgdGhlIGxpbmUuIE9wdGlvbmFsbHkgYW5ub3RhdGVzIGZyb20gYSBnaXZlbiByZXZpc2lvbi4KKworVGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgY29tbWFuZCBhbmQgbGlua2dpdDpnaXQtYmxhbWVbMV0gaXMgdGhhdAordGhleSB1c2Ugc2xpZ2h0bHkgZGlmZmVyZW50IG91dHB1dCBmb3JtYXRzLCBhbmQgdGhpcyBjb21tYW5kIGV4aXN0cyBvbmx5Citmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB0byBzdXBwb3J0IGV4aXN0aW5nIHNjcmlwdHMsIGFuZCBwcm92aWRlIGEgbW9yZQorZmFtaWxpYXIgY29tbWFuZCBuYW1lIGZvciBwZW9wbGUgY29taW5nIGZyb20gb3RoZXIgU0NNIHN5c3RlbXMuCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6OmJsYW1lLW9wdGlvbnMudHh0W10KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1ibGFtZVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzRiODRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0CkBAIC0wLDAgKzEsMjY0IEBACitnaXQtYXBwbHkoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYXBwbHkgLSBBcHBseSBhIHBhdGNoIHRvIGZpbGVzIGFuZC9vciB0byB0aGUgaW5kZXgKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYXBwbHknIFstLXN0YXRdIFstLW51bXN0YXRdIFstLXN1bW1hcnldIFstLWNoZWNrXSBbLS1pbmRleF0gWy0tM3dheV0KKwkgIFstLWFwcGx5XSBbLS1uby1hZGRdIFstLWJ1aWxkLWZha2UtYW5jZXN0b3I9PGZpbGU+XSBbLVIgfCAtLXJldmVyc2VdCisJICBbLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQgfCAtLWJpbmFyeV0gWy0tcmVqZWN0XSBbLXpdCisJICBbLXA8bj5dIFstQzxuPl0gWy0taW5hY2N1cmF0ZS1lb2ZdIFstLXJlY291bnRdIFstLWNhY2hlZF0KKwkgIFstLWlnbm9yZS1zcGFjZS1jaGFuZ2UgfCAtLWlnbm9yZS13aGl0ZXNwYWNlIF0KKwkgIFstLXdoaXRlc3BhY2U9KG5vd2Fybnx3YXJufGZpeHxlcnJvcnxlcnJvci1hbGwpXQorCSAgWy0tZXhjbHVkZT08cGF0aD5dIFstLWluY2x1ZGU9PHBhdGg+XSBbLS1kaXJlY3Rvcnk9PHJvb3Q+XQorCSAgWy0tdmVyYm9zZV0gWzxwYXRjaD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgdGhlIHN1cHBsaWVkIGRpZmYgb3V0cHV0IChpLmUuICJhIHBhdGNoIikgYW5kIGFwcGxpZXMgaXQgdG8gZmlsZXMuCitXaXRoIHRoZSBgLS1pbmRleGAgb3B0aW9uIHRoZSBwYXRjaCBpcyBhbHNvIGFwcGxpZWQgdG8gdGhlIGluZGV4LCBhbmQKK3dpdGggdGhlIGAtLWNhY2hlZGAgb3B0aW9uIHRoZSBwYXRjaCBpcyBvbmx5IGFwcGxpZWQgdG8gdGhlIGluZGV4LgorV2l0aG91dCB0aGVzZSBvcHRpb25zLCB0aGUgY29tbWFuZCBhcHBsaWVzIHRoZSBwYXRjaCBvbmx5IHRvIGZpbGVzLAorYW5kIGRvZXMgbm90IHJlcXVpcmUgdGhlbSB0byBiZSBpbiBhIGdpdCByZXBvc2l0b3J5LgorCitUaGlzIGNvbW1hbmQgYXBwbGllcyB0aGUgcGF0Y2ggYnV0IGRvZXMgbm90IGNyZWF0ZSBhIGNvbW1pdC4gIFVzZQorbGlua2dpdDpnaXQtYW1bMV0gdG8gY3JlYXRlIGNvbW1pdHMgZnJvbSBwYXRjaGVzIGdlbmVyYXRlZCBieQorbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIGFuZC9vciByZWNlaXZlZCBieSBlbWFpbC4KKworT1BUSU9OUworLS0tLS0tLQorPHBhdGNoPi4uLjo6CisJVGhlIGZpbGVzIHRvIHJlYWQgdGhlIHBhdGNoIGZyb20uICAnLScgY2FuIGJlIHVzZWQgdG8gcmVhZAorCWZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCistLXN0YXQ6OgorCUluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZQorCWlucHV0LiAgVHVybnMgb2ZmICJhcHBseSIuCisKKy0tbnVtc3RhdDo6CisJU2ltaWxhciB0byBgLS1zdGF0YCwgYnV0IHNob3dzIHRoZSBudW1iZXIgb2YgYWRkZWQgYW5kCisJZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIGFuZCB0aGUgcGF0aG5hbWUgd2l0aG91dAorCWFiYnJldmlhdGlvbiwgdG8gbWFrZSBpdCBtb3JlIG1hY2hpbmUgZnJpZW5kbHkuICBGb3IKKwliaW5hcnkgZmlsZXMsIG91dHB1dHMgdHdvIGAtYCBpbnN0ZWFkIG9mIHNheWluZworCWAwIDBgLiAgVHVybnMgb2ZmICJhcHBseSIuCisKKy0tc3VtbWFyeTo6CisJSW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIGNvbmRlbnNlZAorCXN1bW1hcnkgb2YgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSBnaXQgZGlmZiBleHRlbmRlZAorCWhlYWRlcnMsIHN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMuCisJVHVybnMgb2ZmICJhcHBseSIuCisKKy0tY2hlY2s6OgorCUluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzCisJYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCB3b3JraW5nIHRyZWUgYW5kL29yIHRoZSBpbmRleAorCWZpbGUgYW5kIGRldGVjdHMgZXJyb3JzLiAgVHVybnMgb2ZmICJhcHBseSIuCisKKy0taW5kZXg6OgorCVdoZW4gYC0tY2hlY2tgIGlzIGluIGVmZmVjdCwgb3Igd2hlbiBhcHBseWluZyB0aGUgcGF0Y2gKKwkod2hpY2ggaXMgdGhlIGRlZmF1bHQgd2hlbiBub25lIG9mIHRoZSBvcHRpb25zIHRoYXQKKwlkaXNhYmxlcyBpdCBpcyBpbiBlZmZlY3QpLCBtYWtlIHN1cmUgdGhlIHBhdGNoIGlzCisJYXBwbGljYWJsZSB0byB3aGF0IHRoZSBjdXJyZW50IGluZGV4IGZpbGUgcmVjb3Jkcy4gIElmCisJdGhlIGZpbGUgdG8gYmUgcGF0Y2hlZCBpbiB0aGUgd29ya2luZyB0cmVlIGlzIG5vdAorCXVwLXRvLWRhdGUsIGl0IGlzIGZsYWdnZWQgYXMgYW4gZXJyb3IuICBUaGlzIGZsYWcgYWxzbworCWNhdXNlcyB0aGUgaW5kZXggZmlsZSB0byBiZSB1cGRhdGVkLgorCistLWNhY2hlZDo6CisJQXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUuIEluc3RlYWQgdGFrZSB0aGUKKwljYWNoZWQgZGF0YSwgYXBwbHkgdGhlIHBhdGNoLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgaW5kZXgKKwl3aXRob3V0IHVzaW5nIHRoZSB3b3JraW5nIHRyZWUuIFRoaXMgaW1wbGllcyBgLS1pbmRleGAuCisKKy0zOjoKKy0tM3dheTo6CisJV2hlbiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlIGlmCisJdGhlIHBhdGNoIHJlY29yZHMgdGhlIGlkZW50aXR5IG9mIGJsb2JzIGl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvLAorCWFuZCB3ZSBoYXZlIHRob3NlIGJsb2JzIGF2YWlsYWJsZSBsb2NhbGx5LCBwb3NzaWJseSBsZWF2aW5nIHRoZQorCWNvbmZsaWN0IG1hcmtlcnMgaW4gdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZm9yIHRoZSB1c2VyIHRvCisJcmVzb2x2ZS4gIFRoaXMgb3B0aW9uIGltcGxpZXMgdGhlIGAtLWluZGV4YCBvcHRpb24sIGFuZCBpcyBpbmNvbXBhdGlibGUKKwl3aXRoIHRoZSBgLS1yZWplY3RgIGFuZCB0aGUgYC0tY2FjaGVkYCBvcHRpb25zLgorCistLWJ1aWxkLWZha2UtYW5jZXN0b3I9PGZpbGU+OjoKKwlOZXdlciAnZ2l0IGRpZmYnIG91dHB1dCBoYXMgZW1iZWRkZWQgJ2luZGV4IGluZm9ybWF0aW9uJworCWZvciBlYWNoIGJsb2IgdG8gaGVscCBpZGVudGlmeSB0aGUgb3JpZ2luYWwgdmVyc2lvbiB0aGF0CisJdGhlIHBhdGNoIGFwcGxpZXMgdG8uICBXaGVuIHRoaXMgZmxhZyBpcyBnaXZlbiwgYW5kIGlmCisJdGhlIG9yaWdpbmFsIHZlcnNpb25zIG9mIHRoZSBibG9icyBhcmUgYXZhaWxhYmxlIGxvY2FsbHksCisJYnVpbGRzIGEgdGVtcG9yYXJ5IGluZGV4IGNvbnRhaW5pbmcgdGhvc2UgYmxvYnMuCisrCitXaGVuIGEgcHVyZSBtb2RlIGNoYW5nZSBpcyBlbmNvdW50ZXJlZCAod2hpY2ggaGFzIG5vIGluZGV4IGluZm9ybWF0aW9uKSwKK3RoZSBpbmZvcm1hdGlvbiBpcyByZWFkIGZyb20gdGhlIGN1cnJlbnQgaW5kZXggaW5zdGVhZC4KKworLVI6OgorLS1yZXZlcnNlOjoKKwlBcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZS4KKworLS1yZWplY3Q6OgorCUZvciBhdG9taWNpdHksICdnaXQgYXBwbHknIGJ5IGRlZmF1bHQgZmFpbHMgdGhlIHdob2xlIHBhdGNoIGFuZAorCWRvZXMgbm90IHRvdWNoIHRoZSB3b3JraW5nIHRyZWUgd2hlbiBzb21lIG9mIHRoZSBodW5rcworCWRvIG5vdCBhcHBseS4gIFRoaXMgb3B0aW9uIG1ha2VzIGl0IGFwcGx5CisJdGhlIHBhcnRzIG9mIHRoZSBwYXRjaCB0aGF0IGFyZSBhcHBsaWNhYmxlLCBhbmQgbGVhdmUgdGhlCisJcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcy4KKworLXo6OgorCVdoZW4gYC0tbnVtc3RhdGAgaGFzIGJlZW4gZ2l2ZW4sIGRvIG5vdCBtdW5nZSBwYXRobmFtZXMsCisJYnV0IHVzZSBhIE5VTC10ZXJtaW5hdGVkIG1hY2hpbmUtcmVhZGFibGUgZm9ybWF0LgorKworV2l0aG91dCB0aGlzIG9wdGlvbiwgZWFjaCBwYXRobmFtZSBvdXRwdXQgd2lsbCBoYXZlIFRBQiwgTEYsIGRvdWJsZSBxdW90ZXMsCithbmQgYmFja3NsYXNoIGNoYXJhY3RlcnMgcmVwbGFjZWQgd2l0aCBgXHRgLCBgXG5gLCBgXCJgLCBhbmQgYFxcYCwKK3Jlc3BlY3RpdmVseSwgYW5kIHRoZSBwYXRobmFtZSB3aWxsIGJlIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMgaWYKK2FueSBvZiB0aG9zZSByZXBsYWNlbWVudHMgb2NjdXJyZWQuCisKKy1wPG4+OjoKKwlSZW1vdmUgPG4+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMuIFRoZQorCWRlZmF1bHQgaXMgMS4KKworLUM8bj46OgorCUVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2Ygc3Vycm91bmRpbmcgY29udGV4dCBtYXRjaCBiZWZvcmUKKwlhbmQgYWZ0ZXIgZWFjaCBjaGFuZ2UuICBXaGVuIGZld2VyIGxpbmVzIG9mIHN1cnJvdW5kaW5nCisJY29udGV4dCBleGlzdCB0aGV5IGFsbCBtdXN0IG1hdGNoLiAgQnkgZGVmYXVsdCBubyBjb250ZXh0IGlzCisJZXZlciBpZ25vcmVkLgorCistLXVuaWRpZmYtemVybzo6CisJQnkgZGVmYXVsdCwgJ2dpdCBhcHBseScgZXhwZWN0cyB0aGF0IHRoZSBwYXRjaCBiZWluZworCWFwcGxpZWQgaXMgYSB1bmlmaWVkIGRpZmYgd2l0aCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0LgorCVRoaXMgcHJvdmlkZXMgZ29vZCBzYWZldHkgbWVhc3VyZXMsIGJ1dCBicmVha3MgZG93biB3aGVuCisJYXBwbHlpbmcgYSBkaWZmIGdlbmVyYXRlZCB3aXRoIGAtLXVuaWZpZWQ9MGAuIFRvIGJ5cGFzcyB0aGVzZQorCWNoZWNrcyB1c2UgYC0tdW5pZGlmZi16ZXJvYC4KKysKK05vdGUsIGZvciB0aGUgcmVhc29ucyBzdGF0ZWQgYWJvdmUgdXNhZ2Ugb2YgY29udGV4dC1mcmVlIHBhdGNoZXMgaXMKK2Rpc2NvdXJhZ2VkLgorCistLWFwcGx5OjoKKwlJZiB5b3UgdXNlIGFueSBvZiB0aGUgb3B0aW9ucyBtYXJrZWQgIlR1cm5zIG9mZgorCSdhcHBseSciIGFib3ZlLCAnZ2l0IGFwcGx5JyByZWFkcyBhbmQgb3V0cHV0cyB0aGUKKwlyZXF1ZXN0ZWQgaW5mb3JtYXRpb24gd2l0aG91dCBhY3R1YWxseSBhcHBseWluZyB0aGUKKwlwYXRjaC4gIEdpdmUgdGhpcyBmbGFnIGFmdGVyIHRob3NlIGZsYWdzIHRvIGFsc28gYXBwbHkKKwl0aGUgcGF0Y2guCisKKy0tbm8tYWRkOjoKKwlXaGVuIGFwcGx5aW5nIGEgcGF0Y2gsIGlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUKKwlwYXRjaC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gZXh0cmFjdCB0aGUgY29tbW9uIHBhcnQgYmV0d2VlbgorCXR3byBmaWxlcyBieSBmaXJzdCBydW5uaW5nICdkaWZmJyBvbiB0aGVtIGFuZCBhcHBseWluZworCXRoZSByZXN1bHQgd2l0aCB0aGlzIG9wdGlvbiwgd2hpY2ggd291bGQgYXBwbHkgdGhlCisJZGVsZXRpb24gcGFydCBidXQgbm90IHRoZSBhZGRpdGlvbiBwYXJ0LgorCistLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudDo6CistLWJpbmFyeTo6CisJSGlzdG9yaWNhbGx5IHdlIGRpZCBub3QgYWxsb3cgYmluYXJ5IHBhdGNoIGFwcGxpZWQKKwl3aXRob3V0IGFuIGV4cGxpY2l0IHBlcm1pc3Npb24gZnJvbSB0aGUgdXNlciwgYW5kIHRoaXMKKwlmbGFnIHdhcyB0aGUgd2F5IHRvIGRvIHNvLiAgQ3VycmVudGx5IHdlIGFsd2F5cyBhbGxvdyBiaW5hcnkKKwlwYXRjaCBhcHBsaWNhdGlvbiwgc28gdGhpcyBpcyBhIG5vLW9wLgorCistLWV4Y2x1ZGU9PHBhdGgtcGF0dGVybj46OgorCURvbid0IGFwcGx5IGNoYW5nZXMgdG8gZmlsZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGggcGF0dGVybi4gVGhpcyBjYW4KKwliZSB1c2VmdWwgd2hlbiBpbXBvcnRpbmcgcGF0Y2hzZXRzLCB3aGVyZSB5b3Ugd2FudCB0byBleGNsdWRlIGNlcnRhaW4KKwlmaWxlcyBvciBkaXJlY3Rvcmllcy4KKworLS1pbmNsdWRlPTxwYXRoLXBhdHRlcm4+OjoKKwlBcHBseSBjaGFuZ2VzIHRvIGZpbGVzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIHBhdHRlcm4uIFRoaXMgY2FuCisJYmUgdXNlZnVsIHdoZW4gaW1wb3J0aW5nIHBhdGNoc2V0cywgd2hlcmUgeW91IHdhbnQgdG8gaW5jbHVkZSBjZXJ0YWluCisJZmlsZXMgb3IgZGlyZWN0b3JpZXMuCisrCitXaGVuIGAtLWV4Y2x1ZGVgIGFuZCBgLS1pbmNsdWRlYCBwYXR0ZXJucyBhcmUgdXNlZCwgdGhleSBhcmUgZXhhbWluZWQgaW4gdGhlCitvcmRlciB0aGV5IGFwcGVhciBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgdGhlIGZpcnN0IG1hdGNoIGRldGVybWluZXMgaWYgYQorcGF0Y2ggdG8gZWFjaCBwYXRoIGlzIHVzZWQuICBBIHBhdGNoIHRvIGEgcGF0aCB0aGF0IGRvZXMgbm90IG1hdGNoIGFueQoraW5jbHVkZS9leGNsdWRlIHBhdHRlcm4gaXMgdXNlZCBieSBkZWZhdWx0IGlmIHRoZXJlIGlzIG5vIGluY2x1ZGUgcGF0dGVybgorb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIGlnbm9yZWQgaWYgdGhlcmUgaXMgYW55IGluY2x1ZGUgcGF0dGVybi4KKworLS1pZ25vcmUtc3BhY2UtY2hhbmdlOjoKKy0taWdub3JlLXdoaXRlc3BhY2U6OgorCVdoZW4gYXBwbHlpbmcgYSBwYXRjaCwgaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBpbiBjb250ZXh0CisJbGluZXMgaWYgbmVjZXNzYXJ5LgorCUNvbnRleHQgbGluZXMgd2lsbCBwcmVzZXJ2ZSB0aGVpciB3aGl0ZXNwYWNlLCBhbmQgdGhleSB3aWxsIG5vdAorCXVuZGVyZ28gd2hpdGVzcGFjZSBmaXhpbmcgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlCisJYC0td2hpdGVzcGFjZWAgb3B0aW9uLiBOZXcgbGluZXMgd2lsbCBzdGlsbCBiZSBmaXhlZCwgdGhvdWdoLgorCistLXdoaXRlc3BhY2U9PGFjdGlvbj46OgorCVdoZW4gYXBwbHlpbmcgYSBwYXRjaCwgZGV0ZWN0IGEgbmV3IG9yIG1vZGlmaWVkIGxpbmUgdGhhdCBoYXMKKwl3aGl0ZXNwYWNlIGVycm9ycy4gIFdoYXQgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSBlcnJvcnMgaXMKKwljb250cm9sbGVkIGJ5IGBjb3JlLndoaXRlc3BhY2VgIGNvbmZpZ3VyYXRpb24uICBCeSBkZWZhdWx0LAorCXRyYWlsaW5nIHdoaXRlc3BhY2VzIChpbmNsdWRpbmcgbGluZXMgdGhhdCBzb2xlbHkgY29uc2lzdCBvZgorCXdoaXRlc3BhY2VzKSBhbmQgYSBzcGFjZSBjaGFyYWN0ZXIgdGhhdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZAorCWJ5IGEgdGFiIGNoYXJhY3RlciBpbnNpZGUgdGhlIGluaXRpYWwgaW5kZW50IG9mIHRoZSBsaW5lIGFyZQorCWNvbnNpZGVyZWQgd2hpdGVzcGFjZSBlcnJvcnMuCisrCitCeSBkZWZhdWx0LCB0aGUgY29tbWFuZCBvdXRwdXRzIHdhcm5pbmcgbWVzc2FnZXMgYnV0IGFwcGxpZXMgdGhlIHBhdGNoLgorV2hlbiBgZ2l0LWFwcGx5YCBpcyB1c2VkIGZvciBzdGF0aXN0aWNzIGFuZCBub3QgYXBwbHlpbmcgYQorcGF0Y2gsIGl0IGRlZmF1bHRzIHRvIGBub3dhcm5gLgorKworWW91IGNhbiB1c2UgZGlmZmVyZW50IGA8YWN0aW9uPmAgdmFsdWVzIHRvIGNvbnRyb2wgdGhpcworYmVoYXZpb3I6CisrCisqIGBub3dhcm5gIHR1cm5zIG9mZiB0aGUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3YXJuaW5nLgorKiBgd2FybmAgb3V0cHV0cyB3YXJuaW5ncyBmb3IgYSBmZXcgc3VjaCBlcnJvcnMsIGJ1dCBhcHBsaWVzIHRoZQorICBwYXRjaCBhcy1pcyAoZGVmYXVsdCkuCisqIGBmaXhgIG91dHB1dHMgd2FybmluZ3MgZm9yIGEgZmV3IHN1Y2ggZXJyb3JzLCBhbmQgYXBwbGllcyB0aGUKKyAgcGF0Y2ggYWZ0ZXIgZml4aW5nIHRoZW0gKGBzdHJpcGAgaXMgYSBzeW5vbnltIC0tLSB0aGUgdG9vbAorICB1c2VkIHRvIGNvbnNpZGVyIG9ubHkgdHJhaWxpbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFzIGVycm9ycywgYW5kIHRoZQorICBmaXggaW52b2x2ZWQgJ3N0cmlwcGluZycgdGhlbSwgYnV0IG1vZGVybiBnaXRzIGRvIG1vcmUpLgorKiBgZXJyb3JgIG91dHB1dHMgd2FybmluZ3MgZm9yIGEgZmV3IHN1Y2ggZXJyb3JzLCBhbmQgcmVmdXNlcworICB0byBhcHBseSB0aGUgcGF0Y2guCisqIGBlcnJvci1hbGxgIGlzIHNpbWlsYXIgdG8gYGVycm9yYCBidXQgc2hvd3MgYWxsIGVycm9ycy4KKworLS1pbmFjY3VyYXRlLWVvZjo6CisJVW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBzb21lIHZlcnNpb25zIG9mICdkaWZmJyBkbyBub3QgY29ycmVjdGx5CisJZGV0ZWN0IGEgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBBcyBhIHJlc3VsdCwgcGF0Y2hlcworCWNyZWF0ZWQgYnkgc3VjaCAnZGlmZicgcHJvZ3JhbXMgZG8gbm90IHJlY29yZCBpbmNvbXBsZXRlIGxpbmVzCisJY29ycmVjdGx5LiBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGFwcGx5aW5nIHN1Y2ggcGF0Y2hlcyBieQorCXdvcmtpbmcgYXJvdW5kIHRoaXMgYnVnLgorCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCBwcm9ncmVzcyB0byBzdGRlcnIuIEJ5IGRlZmF1bHQsIG9ubHkgYSBtZXNzYWdlIGFib3V0IHRoZQorCWN1cnJlbnQgcGF0Y2ggYmVpbmcgYXBwbGllZCB3aWxsIGJlIHByaW50ZWQuIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UKKwlhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIHJlcG9ydGVkLgorCistLXJlY291bnQ6OgorCURvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycywgYnV0IGluZmVyIHRoZW0KKwlieSBpbnNwZWN0aW5nIHRoZSBwYXRjaCAoZS5nLiBhZnRlciBlZGl0aW5nIHRoZSBwYXRjaCB3aXRob3V0CisJYWRqdXN0aW5nIHRoZSBodW5rIGhlYWRlcnMgYXBwcm9wcmlhdGVseSkuCisKKy0tZGlyZWN0b3J5PTxyb290Pjo6CisJUHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcy4gIElmIGEgIi1wIiBhcmd1bWVudCB3YXMgYWxzbyBwYXNzZWQsCisJaXQgaXMgYXBwbGllZCBiZWZvcmUgcHJlcGVuZGluZyB0aGUgbmV3IHJvb3QuCisrCitGb3IgZXhhbXBsZSwgYSBwYXRjaCB0aGF0IHRhbGtzIGFib3V0IHVwZGF0aW5nIGBhL2dpdC1ndWkuc2hgIHRvIGBiL2dpdC1ndWkuc2hgCitjYW4gYmUgYXBwbGllZCB0byB0aGUgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlIGBtb2R1bGVzL2dpdC1ndWkvZ2l0LWd1aS5zaGAgYnkKK3J1bm5pbmcgYGdpdCBhcHBseSAtLWRpcmVjdG9yeT1tb2R1bGVzL2dpdC1ndWlgLgorCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK2FwcGx5Lmlnbm9yZXdoaXRlc3BhY2U6OgorCVNldCB0byAnY2hhbmdlJyBpZiB5b3Ugd2FudCBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgdG8gYmUgaWdub3JlZCBieSBkZWZhdWx0LgorCVNldCB0byBvbmUgb2Y6IG5vLCBub25lLCBuZXZlciwgZmFsc2UgaWYgeW91IHdhbnQgY2hhbmdlcyBpbgorCXdoaXRlc3BhY2UgdG8gYmUgc2lnbmlmaWNhbnQuCithcHBseS53aGl0ZXNwYWNlOjoKKwlXaGVuIG5vIGAtLXdoaXRlc3BhY2VgIGZsYWcgaXMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZAorCWxpbmUsIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQuCisKK1N1Ym1vZHVsZXMKKy0tLS0tLS0tLS0KK0lmIHRoZSBwYXRjaCBjb250YWlucyBhbnkgY2hhbmdlcyB0byBzdWJtb2R1bGVzIHRoZW4gJ2dpdCBhcHBseScKK3RyZWF0cyB0aGVzZSBjaGFuZ2VzIGFzIGZvbGxvd3MuCisKK0lmIGAtLWluZGV4YCBpcyBzcGVjaWZpZWQgKGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSksIHRoZW4gdGhlIHN1Ym1vZHVsZQorY29tbWl0cyBtdXN0IG1hdGNoIHRoZSBpbmRleCBleGFjdGx5IGZvciB0aGUgcGF0Y2ggdG8gYXBwbHkuICBJZiBhbnkKK29mIHRoZSBzdWJtb2R1bGVzIGFyZSBjaGVja2VkLW91dCwgdGhlbiB0aGVzZSBjaGVjay1vdXRzIGFyZSBjb21wbGV0ZWx5CitpZ25vcmVkLCBpLmUuLCB0aGV5IGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgdXAtdG8tZGF0ZSBvciBjbGVhbiBhbmQgdGhleQorYXJlIG5vdCB1cGRhdGVkLgorCitJZiBgLS1pbmRleGAgaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aGUgc3VibW9kdWxlIGNvbW1pdHMgaW4gdGhlIHBhdGNoCithcmUgaWdub3JlZCBhbmQgb25seSB0aGUgYWJzZW5jZSBvciBwcmVzZW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZworc3ViZGlyZWN0b3J5IGlzIGNoZWNrZWQgYW5kIChpZiBwb3NzaWJsZSkgdXBkYXRlZC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1hbVsxXS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpbXBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NTA0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaW1wb3J0LnR4dApAQCAtMCwwICsxLDExMiBAQAorZ2l0LWFyY2hpbXBvcnQoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1hcmNoaW1wb3J0IC0gSW1wb3J0IGFuIEFyY2ggcmVwb3NpdG9yeSBpbnRvIGdpdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBhcmNoaW1wb3J0JyBbLWhdIFstdl0gWy1vXSBbLWFdIFstZl0gWy1UXSBbLUQgZGVwdGhdIFstdCB0ZW1wZGlyXQorICAgICAgICAgICAgICAgPGFyY2hpdmUvYnJhbmNoPls6PGdpdC1icmFuY2g+XSAuLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbXBvcnRzIGEgcHJvamVjdCBmcm9tIG9uZSBvciBtb3JlIEFyY2ggcmVwb3NpdG9yaWVzLiBJdCB3aWxsIGZvbGxvdyBicmFuY2hlcworYW5kIHJlcG9zaXRvcmllcyB3aXRoaW4gdGhlIG5hbWVzcGFjZXMgZGVmaW5lZCBieSB0aGUgPGFyY2hpdmUvYnJhbmNoPgorcGFyYW1ldGVycyBzdXBwbGllZC4gSWYgaXQgY2Fubm90IGZpbmQgdGhlIHJlbW90ZSBicmFuY2ggYSBtZXJnZSBjb21lcyBmcm9tCitpdCB3aWxsIGp1c3QgaW1wb3J0IGl0IGFzIGEgcmVndWxhciBjb21taXQuIElmIGl0IGNhbiBmaW5kIGl0LCBpdCB3aWxsIG1hcmsgaXQKK2FzIGEgbWVyZ2Ugd2hlbmV2ZXIgcG9zc2libGUgKHNlZSBkaXNjdXNzaW9uIGJlbG93KS4KKworVGhlIHNjcmlwdCBleHBlY3RzIHlvdSB0byBwcm92aWRlIHRoZSBrZXkgcm9vdHMgd2hlcmUgaXQgY2FuIHN0YXJ0IHRoZSBpbXBvcnQKK2Zyb20gYW4gJ2luaXRpYWwgaW1wb3J0JyBvciAndGFnJyB0eXBlIG9mIEFyY2ggY29tbWl0LiBJdCB3aWxsIGZvbGxvdyBhbmQKK2ltcG9ydCBuZXcgYnJhbmNoZXMgd2l0aGluIHRoZSBwcm92aWRlZCByb290cy4KKworSXQgZXhwZWN0cyB0byBiZSBkZWFsaW5nIHdpdGggb25lIHByb2plY3Qgb25seS4gSWYgaXQgc2VlcworYnJhbmNoZXMgdGhhdCBoYXZlIGRpZmZlcmVudCByb290cywgaXQgd2lsbCByZWZ1c2UgdG8gcnVuLiBJbiB0aGF0IGNhc2UsCitlZGl0IHlvdXIgPGFyY2hpdmUvYnJhbmNoPiBwYXJhbWV0ZXJzIHRvIGRlZmluZSBjbGVhcmx5IHRoZSBzY29wZSBvZiB0aGUKK2ltcG9ydC4KKworJ2dpdCBhcmNoaW1wb3J0JyB1c2VzIGB0bGFgIGV4dGVuc2l2ZWx5IGluIHRoZSBiYWNrZ3JvdW5kIHRvIGFjY2VzcyB0aGUKK0FyY2ggcmVwb3NpdG9yeS4KK01ha2Ugc3VyZSB5b3UgaGF2ZSBhIHJlY2VudCB2ZXJzaW9uIG9mIGB0bGFgIGF2YWlsYWJsZSBpbiB0aGUgcGF0aC4gYHRsYWAgbXVzdAora25vdyBhYm91dCB0aGUgcmVwb3NpdG9yaWVzIHlvdSBwYXNzIHRvICdnaXQgYXJjaGltcG9ydCcuCisKK0ZvciB0aGUgaW5pdGlhbCBpbXBvcnQsICdnaXQgYXJjaGltcG9ydCcgZXhwZWN0cyB0byBmaW5kIGl0c2VsZiBpbiBhbiBlbXB0eQorZGlyZWN0b3J5LiBUbyBmb2xsb3cgdGhlIGRldmVsb3BtZW50IG9mIGEgcHJvamVjdCB0aGF0IHVzZXMgQXJjaCwgcmVydW4KKydnaXQgYXJjaGltcG9ydCcgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBpbml0aWFsIGltcG9ydCB0byBwZXJmb3JtCitpbmNyZW1lbnRhbCBpbXBvcnRzLgorCitXaGlsZSAnZ2l0IGFyY2hpbXBvcnQnIHdpbGwgdHJ5IHRvIGNyZWF0ZSBzZW5zaWJsZSBicmFuY2ggbmFtZXMgZm9yIHRoZQorYXJjaGl2ZXMgdGhhdCBpdCBpbXBvcnRzLCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgZ2l0IGJyYW5jaCBuYW1lcworbWFudWFsbHkuICBUbyBkbyBzbywgd3JpdGUgYSBnaXQgYnJhbmNoIG5hbWUgYWZ0ZXIgZWFjaCA8YXJjaGl2ZS9icmFuY2g+CitwYXJhbWV0ZXIsIHNlcGFyYXRlZCBieSBhIGNvbG9uLiAgVGhpcyB3YXksIHlvdSBjYW4gc2hvcnRlbiB0aGUgQXJjaAorYnJhbmNoIG5hbWVzIGFuZCBjb252ZXJ0IEFyY2ggamFyZ29uIHRvIGdpdCBqYXJnb24sIGZvciBleGFtcGxlIG1hcHBpbmcgYQorIlBST0pFQ1R7bGl0ZGR9ZGV2b3tsaXRkZH1WRVJTSU9OIiBicmFuY2ggdG8gIm1hc3RlciIuCisKK0Fzc29jaWF0aW5nIG11bHRpcGxlIEFyY2ggYnJhbmNoZXMgdG8gb25lIGdpdCBicmFuY2ggaXMgcG9zc2libGU7IHRoZQorcmVzdWx0IHdpbGwgbWFrZSB0aGUgbW9zdCBzZW5zZSBvbmx5IGlmIG5vIGNvbW1pdHMgYXJlIG1hZGUgdG8gdGhlIGZpcnN0CiticmFuY2gsIGFmdGVyIHRoZSBzZWNvbmQgYnJhbmNoIGlzIGNyZWF0ZWQuICBTdGlsbCwgdGhpcyBpcyB1c2VmdWwgdG8KK2NvbnZlcnQgQXJjaCByZXBvc2l0b3JpZXMgdGhhdCBoYWQgYmVlbiByb3RhdGVkIHBlcmlvZGljYWxseS4KKworCitNRVJHRVMKKy0tLS0tLQorUGF0Y2ggbWVyZ2UgZGF0YSBmcm9tIEFyY2ggaXMgdXNlZCB0byBtYXJrIG1lcmdlcyBpbiBnaXQgYXMgd2VsbC4gZ2l0Citkb2VzIG5vdCBjYXJlIG11Y2ggYWJvdXQgdHJhY2tpbmcgcGF0Y2hlcywgYW5kIG9ubHkgY29uc2lkZXJzIGEgbWVyZ2Ugd2hlbiBhCiticmFuY2ggaW5jb3Jwb3JhdGVzIGFsbCB0aGUgY29tbWl0cyBzaW5jZSB0aGUgcG9pbnQgdGhleSBmb3JrZWQuIFRoZSBlbmQgcmVzdWx0CitpcyB0aGF0IGdpdCB3aWxsIGhhdmUgYSBnb29kIGlkZWEgb2YgaG93IGZhciBicmFuY2hlcyBoYXZlIGRpdmVyZ2VkLiBTbyB0aGUKK2ltcG9ydCBwcm9jZXNzIGRvZXMgbG9zZSBzb21lIHBhdGNoLXRyYWRpbmcgbWV0YWRhdGEuCisKK0ZvcnR1bmF0ZWx5LCB3aGVuIHlvdSB0cnkgYW5kIG1lcmdlIGJyYW5jaGVzIGltcG9ydGVkIGZyb20gQXJjaCwKK2dpdCB3aWxsIGZpbmQgYSBnb29kIG1lcmdlIGJhc2UsIGFuZCBpdCBoYXMgYSBnb29kIGNoYW5jZSBvZiBpZGVudGlmeWluZworcGF0Y2hlcyB0aGF0IGhhdmUgYmVlbiB0cmFkZWQgb3V0LW9mLXNlcXVlbmNlIGJldHdlZW4gdGhlIGJyYW5jaGVzLgorCitPUFRJT05TCistLS0tLS0tCisKKy1oOjoKKwlEaXNwbGF5IHVzYWdlLgorCistdjo6CisJVmVyYm9zZSBvdXRwdXQuCisKKy1UOjoKKwlNYW55IHRhZ3MuIFdpbGwgY3JlYXRlIGEgdGFnIGZvciBldmVyeSBjb21taXQsIHJlZmxlY3RpbmcgdGhlIGNvbW1pdAorCW5hbWUgaW4gdGhlIEFyY2ggcmVwb3NpdG9yeS4KKworLWY6OgorCVVzZSB0aGUgZmFzdCBwYXRjaHNldCBpbXBvcnQgc3RyYXRlZ3kuICBUaGlzIGNhbiBiZSBzaWduaWZpY2FudGx5CisJZmFzdGVyIGZvciBsYXJnZSB0cmVlcywgYnV0IGNhbm5vdCBoYW5kbGUgZGlyZWN0b3J5IHJlbmFtZXMgb3IKKwlwZXJtaXNzaW9ucyBjaGFuZ2VzLiAgVGhlIGRlZmF1bHQgc3RyYXRlZ3kgaXMgc2xvdyBhbmQgc2FmZS4KKworLW86OgorCVVzZSB0aGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkLXN0eWxlIGJyYW5jaCBuYW1lcyB1c2VkIGJ5CisJZWFybGllciB2ZXJzaW9ucyBvZiAnZ2l0IGFyY2hpbXBvcnQnLiAgT2xkLXN0eWxlIGJyYW5jaCBuYW1lcworCXdlcmUgY2F0ZWdvcnl7bGl0ZGR9YnJhbmNoLCB3aGVyZWFzIG5ldy1zdHlsZSBicmFuY2ggbmFtZXMgYXJlCisJYXJjaGl2ZSxjYXRlZ29yeXtsaXRkZH1icmFuY2h7bGl0ZGR9dmVyc2lvbi4gIEluIGJvdGggY2FzZXMsIG5hbWVzIGdpdmVuCisJb24gdGhlIGNvbW1hbmQtbGluZSB3aWxsIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWNhbGx5LWdlbmVyYXRlZAorCW9uZXMuCisKKy1EIDxkZXB0aD46OgorCUZvbGxvdyBtZXJnZSBhbmNlc3RyeSBhbmQgYXR0ZW1wdCB0byBpbXBvcnQgdHJlZXMgdGhhdCBoYXZlIGJlZW4KKwltZXJnZWQgZnJvbS4gIFNwZWNpZnkgYSBkZXB0aCBncmVhdGVyIHRoYW4gMSBpZiBwYXRjaCBsb2dzIGhhdmUgYmVlbgorCXBydW5lZC4KKworLWE6OgorCUF0dGVtcHQgdG8gYXV0by1yZWdpc3RlciBhcmNoaXZlcyBhdCBodHRwOi8vbWlycm9ycy5zb3VyY2Vjb250cm9sLm5ldAorCVRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aXRoIHRoZSAtRCBvcHRpb24uCisKKy10IDx0bXBkaXI+OjoKKwlPdmVycmlkZSB0aGUgZGVmYXVsdCB0ZW1wZGlyLgorCisKKzxhcmNoaXZlL2JyYW5jaD46OgorCUFyY2hpdmUvYnJhbmNoIGlkZW50aWZpZXIgaW4gYSBmb3JtYXQgdGhhdCBgdGxhIGxvZ2AgdW5kZXJzdGFuZHMuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZDczZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dApAQCAtMCwwICsxLDE5MiBAQAorZ2l0LWFyY2hpdmUoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1hcmNoaXZlIC0gQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYXJjaGl2ZScgWy0tZm9ybWF0PTxmbXQ+XSBbLS1saXN0XSBbLS1wcmVmaXg9PHByZWZpeD4vXSBbPGV4dHJhPl0KKwkgICAgICBbLW8gfCAtLW91dHB1dD08ZmlsZT5dIFstLXdvcmt0cmVlLWF0dHJpYnV0ZXNdCisJICAgICAgWy0tcmVtb3RlPTxyZXBvPiBbLS1leGVjPTxnaXQtdXBsb2FkLWFyY2hpdmU+XV0gPHRyZWUtaXNoPgorCSAgICAgIFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQ3JlYXRlcyBhbiBhcmNoaXZlIG9mIHRoZSBzcGVjaWZpZWQgZm9ybWF0IGNvbnRhaW5pbmcgdGhlIHRyZWUKK3N0cnVjdHVyZSBmb3IgdGhlIG5hbWVkIHRyZWUsIGFuZCB3cml0ZXMgaXQgb3V0IHRvIHRoZSBzdGFuZGFyZAorb3V0cHV0LiAgSWYgPHByZWZpeD4gaXMgc3BlY2lmaWVkIGl0IGlzCitwcmVwZW5kZWQgdG8gdGhlIGZpbGVuYW1lcyBpbiB0aGUgYXJjaGl2ZS4KKworJ2dpdCBhcmNoaXZlJyBiZWhhdmVzIGRpZmZlcmVudGx5IHdoZW4gZ2l2ZW4gYSB0cmVlIElEIHZlcnN1cyB3aGVuCitnaXZlbiBhIGNvbW1pdCBJRCBvciB0YWcgSUQuICBJbiB0aGUgZmlyc3QgY2FzZSB0aGUgY3VycmVudCB0aW1lIGlzCit1c2VkIGFzIHRoZSBtb2RpZmljYXRpb24gdGltZSBvZiBlYWNoIGZpbGUgaW4gdGhlIGFyY2hpdmUuICBJbiB0aGUgbGF0dGVyCitjYXNlIHRoZSBjb21taXQgdGltZSBhcyByZWNvcmRlZCBpbiB0aGUgcmVmZXJlbmNlZCBjb21taXQgb2JqZWN0IGlzCit1c2VkIGluc3RlYWQuICBBZGRpdGlvbmFsbHkgdGhlIGNvbW1pdCBJRCBpcyBzdG9yZWQgaW4gYSBnbG9iYWwKK2V4dGVuZGVkIHBheCBoZWFkZXIgaWYgdGhlIHRhciBmb3JtYXQgaXMgdXNlZDsgaXQgY2FuIGJlIGV4dHJhY3RlZAordXNpbmcgJ2dpdCBnZXQtdGFyLWNvbW1pdC1pZCcuIEluIFpJUCBmaWxlcyBpdCBpcyBzdG9yZWQgYXMgYSBmaWxlCitjb21tZW50LgorCitPUFRJT05TCistLS0tLS0tCisKKy0tZm9ybWF0PTxmbXQ+OjoKKwlGb3JtYXQgb2YgdGhlIHJlc3VsdGluZyBhcmNoaXZlOiAndGFyJyBvciAnemlwJy4gSWYgdGhpcyBvcHRpb24KKwlpcyBub3QgZ2l2ZW4sIGFuZCB0aGUgb3V0cHV0IGZpbGUgaXMgc3BlY2lmaWVkLCB0aGUgZm9ybWF0IGlzCisJaW5mZXJyZWQgZnJvbSB0aGUgZmlsZW5hbWUgaWYgcG9zc2libGUgKGUuZy4gd3JpdGluZyB0byAiZm9vLnppcCIKKwltYWtlcyB0aGUgb3V0cHV0IHRvIGJlIGluIHRoZSB6aXAgZm9ybWF0KS4gT3RoZXJ3aXNlIHRoZSBvdXRwdXQKKwlmb3JtYXQgaXMgYHRhcmAuCisKKy1sOjoKKy0tbGlzdDo6CisJU2hvdyBhbGwgYXZhaWxhYmxlIGZvcm1hdHMuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUmVwb3J0IHByb2dyZXNzIHRvIHN0ZGVyci4KKworLS1wcmVmaXg9PHByZWZpeD4vOjoKKwlQcmVwZW5kIDxwcmVmaXg+LyB0byBlYWNoIGZpbGVuYW1lIGluIHRoZSBhcmNoaXZlLgorCistbyA8ZmlsZT46OgorLS1vdXRwdXQ9PGZpbGU+OjoKKwlXcml0ZSB0aGUgYXJjaGl2ZSB0byA8ZmlsZT4gaW5zdGVhZCBvZiBzdGRvdXQuCisKKy0td29ya3RyZWUtYXR0cmlidXRlczo6CisJTG9vayBmb3IgYXR0cmlidXRlcyBpbiAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSB0b28uCisKKzxleHRyYT46OgorCVRoaXMgY2FuIGJlIGFueSBvcHRpb25zIHRoYXQgdGhlIGFyY2hpdmVyIGJhY2tlbmQgdW5kZXJzdGFuZHMuCisJU2VlIG5leHQgc2VjdGlvbi4KKworLS1yZW1vdGU9PHJlcG8+OjoKKwlJbnN0ZWFkIG9mIG1ha2luZyBhIHRhciBhcmNoaXZlIGZyb20gdGhlIGxvY2FsIHJlcG9zaXRvcnksCisJcmV0cmlldmUgYSB0YXIgYXJjaGl2ZSBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuCisKKy0tZXhlYz08Z2l0LXVwbG9hZC1hcmNoaXZlPjo6CisJVXNlZCB3aXRoIC0tcmVtb3RlIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlCisJJ2dpdC11cGxvYWQtYXJjaGl2ZScgb24gdGhlIHJlbW90ZSBzaWRlLgorCis8dHJlZS1pc2g+OjoKKwlUaGUgdHJlZSBvciBjb21taXQgdG8gcHJvZHVjZSBhbiBhcmNoaXZlIGZvci4KKworPHBhdGg+OjoKKwlXaXRob3V0IGFuIG9wdGlvbmFsIHBhdGggcGFyYW1ldGVyLCBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yaWVzCisJb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXJlIGluY2x1ZGVkIGluIHRoZSBhcmNoaXZlLgorCUlmIG9uZSBvciBtb3JlIHBhdGhzIGFyZSBzcGVjaWZpZWQsIG9ubHkgdGhlc2UgYXJlIGluY2x1ZGVkLgorCitCQUNLRU5EIEVYVFJBIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit6aXAKK35+fgorLTA6OgorCVN0b3JlIHRoZSBmaWxlcyBpbnN0ZWFkIG9mIGRlZmxhdGluZyB0aGVtLgorLTk6OgorCUhpZ2hlc3QgYW5kIHNsb3dlc3QgY29tcHJlc3Npb24gbGV2ZWwuICBZb3UgY2FuIHNwZWNpZnkgYW55CisJbnVtYmVyIGZyb20gMSB0byA5IHRvIGFkanVzdCBjb21wcmVzc2lvbiBzcGVlZCBhbmQgcmF0aW8uCisKKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCit0YXIudW1hc2s6OgorCVRoaXMgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHBlcm1pc3Npb24gYml0cyBvZgorCXRhciBhcmNoaXZlIGVudHJpZXMuICBUaGUgZGVmYXVsdCBpcyAwMDAyLCB3aGljaCB0dXJucyBvZmYgdGhlCisJd29ybGQgd3JpdGUgYml0LiAgVGhlIHNwZWNpYWwgdmFsdWUgInVzZXIiIGluZGljYXRlcyB0aGF0IHRoZQorCWFyY2hpdmluZyB1c2VyJ3MgdW1hc2sgd2lsbCBiZSB1c2VkIGluc3RlYWQuICBTZWUgdW1hc2soMikgZm9yCisJZGV0YWlscy4gIElmIGAtLXJlbW90ZWAgaXMgdXNlZCB0aGVuIG9ubHkgdGhlIGNvbmZpZ3VyYXRpb24gb2YKKwl0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdGFrZXMgZWZmZWN0LgorCit0YXIuPGZvcm1hdD4uY29tbWFuZDo6CisJVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBzaGVsbCBjb21tYW5kIHRocm91Z2ggd2hpY2ggdGhlIHRhcgorCW91dHB1dCBnZW5lcmF0ZWQgYnkgYGdpdCBhcmNoaXZlYCBzaG91bGQgYmUgcGlwZWQuIFRoZSBjb21tYW5kCisJaXMgZXhlY3V0ZWQgdXNpbmcgdGhlIHNoZWxsIHdpdGggdGhlIGdlbmVyYXRlZCB0YXIgZmlsZSBvbiBpdHMKKwlzdGFuZGFyZCBpbnB1dCwgYW5kIHNob3VsZCBwcm9kdWNlIHRoZSBmaW5hbCBvdXRwdXQgb24gaXRzCisJc3RhbmRhcmQgb3V0cHV0LiBBbnkgY29tcHJlc3Npb24tbGV2ZWwgb3B0aW9ucyB3aWxsIGJlIHBhc3NlZAorCXRvIHRoZSBjb21tYW5kIChlLmcuLCAiLTkiKS4gQW4gb3V0cHV0IGZpbGUgd2l0aCB0aGUgc2FtZQorCWV4dGVuc2lvbiBhcyBgPGZvcm1hdD5gIHdpbGwgYmUgdXNlIHRoaXMgZm9ybWF0IGlmIG5vIG90aGVyCisJZm9ybWF0IGlzIGdpdmVuLgorKworVGhlICJ0YXIuZ3oiIGFuZCAidGd6IiBmb3JtYXRzIGFyZSBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgYW5kIGRlZmF1bHQgdG8KK2BnemlwIC1jbmAuIFlvdSBtYXkgb3ZlcnJpZGUgdGhlbSB3aXRoIGN1c3RvbSBjb21tYW5kcy4KKwordGFyLjxmb3JtYXQ+LnJlbW90ZTo6CisJSWYgdHJ1ZSwgZW5hYmxlIGA8Zm9ybWF0PmAgZm9yIHVzZSBieSByZW1vdGUgY2xpZW50cyB2aWEKKwlsaW5rZ2l0OmdpdC11cGxvYWQtYXJjaGl2ZVsxXS4gRGVmYXVsdHMgdG8gZmFsc2UgZm9yCisJdXNlci1kZWZpbmVkIGZvcm1hdHMsIGJ1dCB0cnVlIGZvciB0aGUgInRhci5neiIgYW5kICJ0Z3oiCisJZm9ybWF0cy4KKworQVRUUklCVVRFUworLS0tLS0tLS0tLQorCitleHBvcnQtaWdub3JlOjoKKwlGaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCB0aGUgYXR0cmlidXRlIGV4cG9ydC1pZ25vcmUgd29uJ3QgYmUKKwlhZGRlZCB0byBhcmNoaXZlIGZpbGVzLiAgU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworZXhwb3J0LXN1YnN0OjoKKwlJZiB0aGUgYXR0cmlidXRlIGV4cG9ydC1zdWJzdCBpcyBzZXQgZm9yIGEgZmlsZSB0aGVuIGdpdCB3aWxsCisJZXhwYW5kIHNldmVyYWwgcGxhY2Vob2xkZXJzIHdoZW4gYWRkaW5nIHRoaXMgZmlsZSB0byBhbiBhcmNoaXZlLgorCVNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK05vdGUgdGhhdCBhdHRyaWJ1dGVzIGFyZSBieSBkZWZhdWx0IHRha2VuIGZyb20gdGhlIGAuZ2l0YXR0cmlidXRlc2AgZmlsZXMKK2luIHRoZSB0cmVlIHRoYXQgaXMgYmVpbmcgYXJjaGl2ZWQuICBJZiB5b3Ugd2FudCB0byB0d2VhayB0aGUgd2F5IHRoZQorb3V0cHV0IGlzIGdlbmVyYXRlZCBhZnRlciB0aGUgZmFjdCAoZS5nLiB5b3UgY29tbWl0dGVkIHdpdGhvdXQgYWRkaW5nIGFuCithcHByb3ByaWF0ZSBleHBvcnQtaWdub3JlIGluIGl0cyBgLmdpdGF0dHJpYnV0ZXNgKSwgYWRqdXN0IHRoZSBjaGVja2VkIG91dAorYC5naXRhdHRyaWJ1dGVzYCBmaWxlIGFzIG5lY2Vzc2FyeSBhbmQgdXNlIGAtLXdvcmt0cmVlLWF0dHJpYnV0ZXNgCitvcHRpb24uICBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4ga2VlcCBuZWNlc3NhcnkgYXR0cmlidXRlcyB0aGF0IHNob3VsZCBhcHBseQord2hpbGUgYXJjaGl2aW5nIGFueSB0cmVlIGluIHlvdXIgYCRHSVRfRElSL2luZm8vYXR0cmlidXRlc2AgZmlsZS4KKworRVhBTVBMRVMKKy0tLS0tLS0tCitgZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIC0tcHJlZml4PWp1bmsvIEhFQUQgfCAoY2QgL3Zhci90bXAvICYmIHRhciB4ZiAtKWA6OgorCisJQ3JlYXRlIGEgdGFyIGFyY2hpdmUgdGhhdCBjb250YWlucyB0aGUgY29udGVudHMgb2YgdGhlCisJbGF0ZXN0IGNvbW1pdCBvbiB0aGUgY3VycmVudCBicmFuY2gsIGFuZCBleHRyYWN0IGl0IGluIHRoZQorCWAvdmFyL3RtcC9qdW5rYCBkaXJlY3RvcnkuCisKK2BnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9Z2l0LTEuNC4wLyB2MS40LjAgfCBnemlwID5naXQtMS40LjAudGFyLmd6YDo6CisKKwlDcmVhdGUgYSBjb21wcmVzc2VkIHRhcmJhbGwgZm9yIHYxLjQuMCByZWxlYXNlLgorCitgZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyLmd6IC0tcHJlZml4PWdpdC0xLjQuMC8gdjEuNC4wID5naXQtMS40LjAudGFyLmd6YDo6CisKKwlTYW1lIGFzIGFib3ZlLCBidXQgdXNpbmcgdGhlIGJ1aWx0aW4gdGFyLmd6IGhhbmRsaW5nLgorCitgZ2l0IGFyY2hpdmUgLS1wcmVmaXg9Z2l0LTEuNC4wLyAtbyBnaXQtMS40LjAudGFyLmd6IHYxLjQuMGA6OgorCisJU2FtZSBhcyBhYm92ZSwgYnV0IHRoZSBmb3JtYXQgaXMgaW5mZXJyZWQgZnJvbSB0aGUgb3V0cHV0IGZpbGUuCisKK2BnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9Z2l0LTEuNC4wLyB2MS40LjBee3RyZWV9IHwgZ3ppcCA+Z2l0LTEuNC4wLnRhci5nemA6OgorCisJQ3JlYXRlIGEgY29tcHJlc3NlZCB0YXJiYWxsIGZvciB2MS40LjAgcmVsZWFzZSwgYnV0IHdpdGhvdXQgYQorCWdsb2JhbCBleHRlbmRlZCBwYXggaGVhZGVyLgorCitgZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIC0tcHJlZml4PWdpdC1kb2NzLyBIRUFEOkRvY3VtZW50YXRpb24vID4gZ2l0LTEuNC4wLWRvY3MuemlwYDo6CisKKwlQdXQgZXZlcnl0aGluZyBpbiB0aGUgY3VycmVudCBoZWFkJ3MgRG9jdW1lbnRhdGlvbi8gZGlyZWN0b3J5CisJaW50byAnZ2l0LTEuNC4wLWRvY3MuemlwJywgd2l0aCB0aGUgcHJlZml4ICdnaXQtZG9jcy8nLgorCitgZ2l0IGFyY2hpdmUgLW8gbGF0ZXN0LnppcCBIRUFEYDo6CisKKwlDcmVhdGUgYSBaaXAgYXJjaGl2ZSB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiB0aGUgbGF0ZXN0CisJY29tbWl0IG9uIHRoZSBjdXJyZW50IGJyYW5jaC4gTm90ZSB0aGF0IHRoZSBvdXRwdXQgZm9ybWF0IGlzCisJaW5mZXJyZWQgYnkgdGhlIGV4dGVuc2lvbiBvZiB0aGUgb3V0cHV0IGZpbGUuCisKK2BnaXQgY29uZmlnIHRhci50YXIueHouY29tbWFuZCAieHogLWMiYDo6CisKKwlDb25maWd1cmUgYSAidGFyLnh6IiBmb3JtYXQgZm9yIG1ha2luZyBMWk1BLWNvbXByZXNzZWQgdGFyZmlsZXMuCisJWW91IGNhbiB1c2UgaXQgc3BlY2lmeWluZyBgLS1mb3JtYXQ9dGFyLnh6YCwgb3IgYnkgY3JlYXRpbmcgYW4KKwlvdXRwdXQgZmlsZSBsaWtlIGAtbyBmb28udGFyLnh6YC4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyYmEzNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0CkBAIC0wLDAgKzEsMTM1OCBAQAorRmlnaHRpbmcgcmVncmVzc2lvbnMgd2l0aCBnaXQgYmlzZWN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpBdXRob3I6IENocmlzdGlhbiBDb3VkZXIKKzpFbWFpbDogY2hyaXNjb29sQHR1eGZhbWlseS5vcmcKKzpEYXRlOiAyMDA5LzExLzA4CisKK0Fic3RyYWN0CistLS0tLS0tLQorCisiZ2l0IGJpc2VjdCIgZW5hYmxlcyBzb2Z0d2FyZSB1c2VycyBhbmQgZGV2ZWxvcGVycyB0byBlYXNpbHkgZmluZCB0aGUKK2NvbW1pdCB0aGF0IGludHJvZHVjZWQgYSByZWdyZXNzaW9uLiBXZSBzaG93IHdoeSBpdCBpcyBpbXBvcnRhbnQgdG8KK2hhdmUgZ29vZCB0b29scyB0byBmaWdodCByZWdyZXNzaW9ucy4gV2UgZGVzY3JpYmUgaG93ICJnaXQgYmlzZWN0Igord29ya3MgZnJvbSB0aGUgb3V0c2lkZSBhbmQgdGhlIGFsZ29yaXRobXMgaXQgdXNlcyBpbnNpZGUuIFRoZW4gd2UKK2V4cGxhaW4gaG93IHRvIHRha2UgYWR2YW50YWdlIG9mICJnaXQgYmlzZWN0IiB0byBpbXByb3ZlIGN1cnJlbnQKK3ByYWN0aWNlcy4gQW5kIHdlIGRpc2N1c3MgaG93ICJnaXQgYmlzZWN0IiBjb3VsZCBpbXByb3ZlIGluIHRoZQorZnV0dXJlLgorCisKK0ludHJvZHVjdGlvbiB0byAiZ2l0IGJpc2VjdCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IGlzIGEgRGlzdHJpYnV0ZWQgVmVyc2lvbiBDb250cm9sIHN5c3RlbSAoRFZDUykgY3JlYXRlZCBieSBMaW51cworVG9ydmFsZHMgYW5kIG1haW50YWluZWQgYnkgSnVuaW8gSGFtYW5vLgorCitJbiBHaXQgbGlrZSBpbiBtYW55IG90aGVyIFZlcnNpb24gQ29udHJvbCBTeXN0ZW1zIChWQ1MpLCB0aGUgZGlmZmVyZW50CitzdGF0ZXMgb2YgdGhlIGRhdGEgdGhhdCBpcyBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0gYXJlIGNhbGxlZAorY29tbWl0cy4gQW5kLCBhcyBWQ1MgYXJlIG1vc3RseSB1c2VkIHRvIG1hbmFnZSBzb2Z0d2FyZSBzb3VyY2UgY29kZSwKK3NvbWV0aW1lcyAiaW50ZXJlc3RpbmciIGNoYW5nZXMgb2YgYmVoYXZpb3IgaW4gdGhlIHNvZnR3YXJlIGFyZQoraW50cm9kdWNlZCBpbiBzb21lIGNvbW1pdHMuCisKK0luIGZhY3QgcGVvcGxlIGFyZSBzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBjb21taXRzIHRoYXQgaW50cm9kdWNlIGEKKyJiYWQiIGJlaGF2aW9yLCBjYWxsZWQgYSBidWcgb3IgYSByZWdyZXNzaW9uLiBUaGV5IGFyZSBpbnRlcmVzdGVkIGluCit0aGVzZSBjb21taXRzIGJlY2F1c2UgYSBjb21taXQgKGhvcGVmdWxseSkgY29udGFpbnMgYSB2ZXJ5IHNtYWxsIHNldAorb2Ygc291cmNlIGNvZGUgY2hhbmdlcy4gQW5kIGl0J3MgbXVjaCBlYXNpZXIgdG8gdW5kZXJzdGFuZCBhbmQKK3Byb3Blcmx5IGZpeCBhIHByb2JsZW0gd2hlbiB5b3Ugb25seSBuZWVkIHRvIGNoZWNrIGEgdmVyeSBzbWFsbCBzZXQgb2YKK2NoYW5nZXMsIHRoYW4gd2hlbiB5b3UgZG9uJ3Qga25vdyB3aGVyZSBsb29rIGluIHRoZSBmaXJzdCBwbGFjZS4KKworU28gdG8gaGVscCBwZW9wbGUgZmluZCBjb21taXRzIHRoYXQgaW50cm9kdWNlIGEgImJhZCIgYmVoYXZpb3IsIHRoZQorImdpdCBiaXNlY3QiIHNldCBvZiBjb21tYW5kcyB3YXMgaW52ZW50ZWQuIEFuZCBpdCBmb2xsb3dzIG9mIGNvdXJzZQordGhhdCBpbiAiZ2l0IGJpc2VjdCIgcGFybGFuY2UsIGNvbW1pdHMgd2hlcmUgdGhlICJpbnRlcmVzdGluZworYmVoYXZpb3IiIGlzIHByZXNlbnQgYXJlIGNhbGxlZCAiYmFkIiBjb21taXRzLCB3aGlsZSBvdGhlciBjb21taXRzIGFyZQorY2FsbGVkICJnb29kIiBjb21taXRzLiBBbmQgYSBjb21taXQgdGhhdCBpbnRyb2R1Y2UgdGhlIGJlaGF2aW9yIHdlIGFyZQoraW50ZXJlc3RlZCBpbiBpcyBjYWxsZWQgYSAiZmlyc3QgYmFkIGNvbW1pdCIuIE5vdGUgdGhhdCB0aGVyZSBjb3VsZCBiZQorbW9yZSB0aGFuIG9uZSAiZmlyc3QgYmFkIGNvbW1pdCIgaW4gdGhlIGNvbW1pdCBzcGFjZSB3ZSBhcmUgc2VhcmNoaW5nLgorCitTbyAiZ2l0IGJpc2VjdCIgaXMgZGVzaWduZWQgdG8gaGVscCBmaW5kIGEgImZpcnN0IGJhZCBjb21taXQiLiBBbmQgdG8KK2JlIGFzIGVmZmljaWVudCBhcyBwb3NzaWJsZSwgaXQgdHJpZXMgdG8gcGVyZm9ybSBhIGJpbmFyeSBzZWFyY2guCisKKworRmlnaHRpbmcgcmVncmVzc2lvbnMgb3ZlcnZpZXcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ3Jlc3Npb25zOiBhIGJpZyBwcm9ibGVtCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitSZWdyZXNzaW9ucyBhcmUgYSBiaWcgcHJvYmxlbSBpbiB0aGUgc29mdHdhcmUgaW5kdXN0cnkuIEJ1dCBpdCdzCitkaWZmaWN1bHQgdG8gcHV0IHNvbWUgcmVhbCBudW1iZXJzIGJlaGluZCB0aGF0IGNsYWltLgorCitUaGVyZSBhcmUgc29tZSBudW1iZXJzIGFib3V0IGJ1Z3MgaW4gZ2VuZXJhbCwgbGlrZSBhIE5JU1Qgc3R1ZHkgaW4KKzIwMDIgPDwxPj4gdGhhdCBzYWlkOgorCitfX19fX19fX19fX19fCitTb2Z0d2FyZSBidWdzLCBvciBlcnJvcnMsIGFyZSBzbyBwcmV2YWxlbnQgYW5kIHNvIGRldHJpbWVudGFsIHRoYXQKK3RoZXkgY29zdCB0aGUgVS5TLiBlY29ub215IGFuIGVzdGltYXRlZCAkNTkuNSBiaWxsaW9uIGFubnVhbGx5LCBvcgorYWJvdXQgMC42IHBlcmNlbnQgb2YgdGhlIGdyb3NzIGRvbWVzdGljIHByb2R1Y3QsIGFjY29yZGluZyB0byBhIG5ld2x5CityZWxlYXNlZCBzdHVkeSBjb21taXNzaW9uZWQgYnkgdGhlIERlcGFydG1lbnQgb2YgQ29tbWVyY2UncyBOYXRpb25hbAorSW5zdGl0dXRlIG9mIFN0YW5kYXJkcyBhbmQgVGVjaG5vbG9neSAoTklTVCkuIEF0IHRoZSBuYXRpb25hbCBsZXZlbCwKK292ZXIgaGFsZiBvZiB0aGUgY29zdHMgYXJlIGJvcm5lIGJ5IHNvZnR3YXJlIHVzZXJzIGFuZCB0aGUgcmVtYWluZGVyCitieSBzb2Z0d2FyZSBkZXZlbG9wZXJzL3ZlbmRvcnMuICBUaGUgc3R1ZHkgYWxzbyBmb3VuZCB0aGF0LCBhbHRob3VnaAorYWxsIGVycm9ycyBjYW5ub3QgYmUgcmVtb3ZlZCwgbW9yZSB0aGFuIGEgdGhpcmQgb2YgdGhlc2UgY29zdHMsIG9yIGFuCitlc3RpbWF0ZWQgJDIyLjIgYmlsbGlvbiwgY291bGQgYmUgZWxpbWluYXRlZCBieSBhbiBpbXByb3ZlZCB0ZXN0aW5nCitpbmZyYXN0cnVjdHVyZSB0aGF0IGVuYWJsZXMgZWFybGllciBhbmQgbW9yZSBlZmZlY3RpdmUgaWRlbnRpZmljYXRpb24KK2FuZCByZW1vdmFsIG9mIHNvZnR3YXJlIGRlZmVjdHMuIFRoZXNlIGFyZSB0aGUgc2F2aW5ncyBhc3NvY2lhdGVkIHdpdGgKK2ZpbmRpbmcgYW4gaW5jcmVhc2VkIHBlcmNlbnRhZ2UgKGJ1dCBub3QgMTAwIHBlcmNlbnQpIG9mIGVycm9ycyBjbG9zZXIKK3RvIHRoZSBkZXZlbG9wbWVudCBzdGFnZXMgaW4gd2hpY2ggdGhleSBhcmUgaW50cm9kdWNlZC4gQ3VycmVudGx5LAorb3ZlciBoYWxmIG9mIGFsbCBlcnJvcnMgYXJlIG5vdCBmb3VuZCB1bnRpbCAiZG93bnN0cmVhbSIgaW4gdGhlCitkZXZlbG9wbWVudCBwcm9jZXNzIG9yIGR1cmluZyBwb3N0LXNhbGUgc29mdHdhcmUgdXNlLgorX19fX19fX19fX19fXworCitBbmQgdGhlbjoKKworX19fX19fX19fX19fXworU29mdHdhcmUgZGV2ZWxvcGVycyBhbHJlYWR5IHNwZW5kIGFwcHJveGltYXRlbHkgODAgcGVyY2VudCBvZgorZGV2ZWxvcG1lbnQgY29zdHMgb24gaWRlbnRpZnlpbmcgYW5kIGNvcnJlY3RpbmcgZGVmZWN0cywgYW5kIHlldCBmZXcKK3Byb2R1Y3RzIG9mIGFueSB0eXBlIG90aGVyIHRoYW4gc29mdHdhcmUgYXJlIHNoaXBwZWQgd2l0aCBzdWNoIGhpZ2gKK2xldmVscyBvZiBlcnJvcnMuCitfX19fX19fX19fX19fCisKK0V2ZW50dWFsbHkgdGhlIGNvbmNsdXNpb24gc3RhcnRlZCB3aXRoOgorCitfX19fX19fX19fX19fCitUaGUgcGF0aCB0byBoaWdoZXIgc29mdHdhcmUgcXVhbGl0eSBpcyBzaWduaWZpY2FudGx5IGltcHJvdmVkIHNvZnR3YXJlCit0ZXN0aW5nLgorX19fX19fX19fX19fXworCitUaGVyZSBhcmUgb3RoZXIgZXN0aW1hdGVzIHNheWluZyB0aGF0IDgwJSBvZiB0aGUgY29zdCByZWxhdGVkIHRvCitzb2Z0d2FyZSBpcyBhYm91dCBtYWludGVuYW5jZSA8PDI+Pi4KKworVGhvdWdoLCBhY2NvcmRpbmcgdG8gV2lraXBlZGlhIDw8Mz4+OgorCitfX19fX19fX19fX19fCitBIGNvbW1vbiBwZXJjZXB0aW9uIG9mIG1haW50ZW5hbmNlIGlzIHRoYXQgaXQgaXMgbWVyZWx5IGZpeGluZworYnVncy4gSG93ZXZlciwgc3R1ZGllcyBhbmQgc3VydmV5cyBvdmVyIHRoZSB5ZWFycyBoYXZlIGluZGljYXRlZCB0aGF0Cit0aGUgbWFqb3JpdHksIG92ZXIgODAlLCBvZiB0aGUgbWFpbnRlbmFuY2UgZWZmb3J0IGlzIHVzZWQgZm9yCitub24tY29ycmVjdGl2ZSBhY3Rpb25zIChQaWdvc2t5IDE5OTcpLiBUaGlzIHBlcmNlcHRpb24gaXMgcGVycGV0dWF0ZWQKK2J5IHVzZXJzIHN1Ym1pdHRpbmcgcHJvYmxlbSByZXBvcnRzIHRoYXQgaW4gcmVhbGl0eSBhcmUgZnVuY3Rpb25hbGl0eQorZW5oYW5jZW1lbnRzIHRvIHRoZSBzeXN0ZW0uCitfX19fX19fX19fX19fCisKK0J1dCB3ZSBjYW4gZ3Vlc3MgdGhhdCBpbXByb3Zpbmcgb24gZXhpc3Rpbmcgc29mdHdhcmUgaXMgdmVyeSBjb3N0bHkKK2JlY2F1c2UgeW91IGhhdmUgdG8gd2F0Y2ggb3V0IGZvciByZWdyZXNzaW9ucy4gQXQgbGVhc3QgdGhpcyB3b3VsZAorbWFrZSB0aGUgYWJvdmUgc3R1ZGllcyBjb25zaXN0ZW50IGFtb25nIHRoZW1zZWx2ZXMuCisKK09mIGNvdXJzZSBzb21lIGtpbmQgb2Ygc29mdHdhcmUgaXMgZGV2ZWxvcGVkLCB0aGVuIHVzZWQgZHVyaW5nIHNvbWUKK3RpbWUgd2l0aG91dCBiZWluZyBpbXByb3ZlZCBvbiBtdWNoLCBhbmQgdGhlbiBmaW5hbGx5IHRocm93biBhd2F5LiBJbgordGhpcyBjYXNlLCBvZiBjb3Vyc2UsIHJlZ3Jlc3Npb25zIG1heSBub3QgYmUgYSBiaWcgcHJvYmxlbS4gQnV0IG9uIHRoZQorb3RoZXIgaGFuZCwgdGhlcmUgaXMgYSBsb3Qgb2YgYmlnIHNvZnR3YXJlIHRoYXQgaXMgY29udGludWFsbHkKK2RldmVsb3BlZCBhbmQgbWFpbnRhaW5lZCBkdXJpbmcgeWVhcnMgb3IgZXZlbiB0ZW5zIG9mIHllYXJzIGJ5IGEgbG90CitvZiBwZW9wbGUuIEFuZCBhcyB0aGVyZSBhcmUgb2Z0ZW4gbWFueSBwZW9wbGUgd2hvIGRlcGVuZCAoc29tZXRpbWVzCitjcml0aWNhbGx5KSBvbiBzdWNoIHNvZnR3YXJlLCByZWdyZXNzaW9ucyBhcmUgYSByZWFsbHkgYmlnIHByb2JsZW0uCisKK09uZSBzdWNoIHNvZnR3YXJlIGlzIHRoZSBsaW51eCBrZXJuZWwuIEFuZCBpZiB3ZSBsb29rIGF0IHRoZSBsaW51eAora2VybmVsLCB3ZSBjYW4gc2VlIHRoYXQgYSBsb3Qgb2YgdGltZSBhbmQgZWZmb3J0IGlzIHNwZW50IHRvIGZpZ2h0CityZWdyZXNzaW9ucy4gVGhlIHJlbGVhc2UgY3ljbGUgc3RhcnQgd2l0aCBhIDIgd2Vla3MgbG9uZyBtZXJnZQord2luZG93LiBUaGVuIHRoZSBmaXJzdCByZWxlYXNlIGNhbmRpZGF0ZSAocmMpIHZlcnNpb24gaXMgdGFnZ2VkLiBBbmQKK2FmdGVyIHRoYXQgYWJvdXQgNyBvciA4IG1vcmUgcmMgdmVyc2lvbnMgd2lsbCBhcHBlYXIgd2l0aCBhcm91bmQgb25lCit3ZWVrIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBiZWZvcmUgdGhlIGZpbmFsIHJlbGVhc2UuCisKK1RoZSB0aW1lIGJldHdlZW4gdGhlIGZpcnN0IHJjIHJlbGVhc2UgYW5kIHRoZSBmaW5hbCByZWxlYXNlIGlzCitzdXBwb3NlZCB0byBiZSB1c2VkIHRvIHRlc3QgcmMgdmVyc2lvbnMgYW5kIGZpZ2h0IGJ1Z3MgYW5kIGVzcGVjaWFsbHkKK3JlZ3Jlc3Npb25zLiBBbmQgdGhpcyB0aW1lIGlzIG1vcmUgdGhhbiA4MCUgb2YgdGhlIHJlbGVhc2UgY3ljbGUKK3RpbWUuIEJ1dCB0aGlzIGlzIG5vdCB0aGUgZW5kIG9mIHRoZSBmaWdodCB5ZXQsIGFzIG9mIGNvdXJzZSBpdAorY29udGludWVzIGFmdGVyIHRoZSByZWxlYXNlLgorCitBbmQgdGhlbiB0aGlzIGlzIHdoYXQgSW5nbyBNb2xuYXIgKGEgd2VsbCBrbm93biBsaW51eCBrZXJuZWwKK2RldmVsb3Blcikgc2F5cyBhYm91dCBoaXMgdXNlIG9mIGdpdCBiaXNlY3Q6CisKK19fX19fX19fX19fX18KK0kgbW9zdCBhY3RpdmVseSB1c2UgaXQgZHVyaW5nIHRoZSBtZXJnZSB3aW5kb3cgKHdoZW4gYSBsb3Qgb2YgdHJlZXMKK2dldCBtZXJnZWQgdXBzdHJlYW0gYW5kIHdoZW4gdGhlIGluZmx1eCBvZiBidWdzIGlzIHRoZSBoaWdoZXN0KSAtIGFuZAoreWVzLCB0aGVyZSBoYXZlIGJlZW4gY2FzZXMgdGhhdCBpIHVzZWQgaXQgbXVsdGlwbGUgdGltZXMgYSBkYXkuIE15CithdmVyYWdlIGlzIHJvdWdobHkgb25jZSBhIGRheS4KK19fX19fX19fX19fX18KKworU28gcmVncmVzc2lvbnMgYXJlIGZvdWdodCBhbGwgdGhlIHRpbWUgYnkgZGV2ZWxvcGVycywgYW5kIGluZGVlZCBpdCBpcword2VsbCBrbm93biB0aGF0IGJ1Z3Mgc2hvdWxkIGJlIGZpeGVkIGFzIHNvb24gYXMgcG9zc2libGUsIHNvIGFzIHNvb24KK2FzIHRoZXkgYXJlIGZvdW5kLiBUaGF0J3Mgd2h5IGl0IGlzIGludGVyZXN0aW5nIHRvIGhhdmUgZ29vZCB0b29scyBmb3IKK3RoaXMgcHVycG9zZS4KKworT3RoZXIgdG9vbHMgdG8gZmlnaHQgcmVncmVzc2lvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NvIHdoYXQgYXJlIHRoZSB0b29scyB1c2VkIHRvIGZpZ2h0IHJlZ3Jlc3Npb25zPyBUaGV5IGFyZSBuZWFybHkgdGhlCitzYW1lIGFzIHRob3NlIHVzZWQgdG8gZmlnaHQgcmVndWxhciBidWdzLiBUaGUgb25seSBzcGVjaWZpYyB0b29scyBhcmUKK3Rlc3Qgc3VpdGVzIGFuZCB0b29scyBzaW1pbGFyIGFzICJnaXQgYmlzZWN0Ii4KKworVGVzdCBzdWl0ZXMgYXJlIHZlcnkgbmljZS4gQnV0IHdoZW4gdGhleSBhcmUgdXNlZCBhbG9uZSwgdGhleSBhcmUKK3N1cHBvc2VkIHRvIGJlIHVzZWQgc28gdGhhdCBhbGwgdGhlIHRlc3RzIGFyZSBjaGVja2VkIGFmdGVyIGVhY2gKK2NvbW1pdC4gVGhpcyBtZWFucyB0aGF0IHRoZXkgYXJlIG5vdCB2ZXJ5IGVmZmljaWVudCwgYmVjYXVzZSBtYW55Cit0ZXN0cyBhcmUgcnVuIGZvciBubyBpbnRlcmVzdGluZyByZXN1bHQsIGFuZCB0aGV5IHN1ZmZlciBmcm9tCitjb21iaW5hdGlvbmFsIGV4cGxvc2lvbi4KKworSW4gZmFjdCB0aGUgcHJvYmxlbSBpcyB0aGF0IGJpZyBzb2Z0d2FyZSBvZnRlbiBoYXMgbWFueSBkaWZmZXJlbnQKK2NvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhhdCBlYWNoIHRlc3QgY2FzZSBzaG91bGQgcGFzcyBmb3IgZWFjaAorY29uZmlndXJhdGlvbiBhZnRlciBlYWNoIGNvbW1pdC4gU28gaWYgeW91IGhhdmUgZm9yIGVhY2ggcmVsZWFzZTogTgorY29uZmlndXJhdGlvbnMsIE0gY29tbWl0cyBhbmQgVCB0ZXN0IGNhc2VzLCB5b3Ugc2hvdWxkIHBlcmZvcm06CisKKy0tLS0tLS0tLS0tLS0KK04gKiBNICogVCB0ZXN0cworLS0tLS0tLS0tLS0tLQorCit3aGVyZSBOLCBNIGFuZCBUIGFyZSBhbGwgZ3Jvd2luZyB3aXRoIHRoZSBzaXplIHlvdXIgc29mdHdhcmUuCisKK1NvIHZlcnkgc29vbiBpdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byBjb21wbGV0ZWx5IHRlc3QgZXZlcnl0aGluZy4KKworQW5kIGlmIHNvbWUgYnVncyBzbGlwIHRocm91Z2ggeW91ciB0ZXN0IHN1aXRlLCB0aGVuIHlvdSBjYW4gYWRkIGEgdGVzdAordG8geW91ciB0ZXN0IHN1aXRlLiBCdXQgaWYgeW91IHdhbnQgdG8gdXNlIHlvdXIgbmV3IGltcHJvdmVkIHRlc3QKK3N1aXRlIHRvIGZpbmQgd2hlcmUgdGhlIGJ1ZyBzbGlwcGVkIGluLCB0aGVuIHlvdSB3aWxsIGVpdGhlciBoYXZlIHRvCitlbXVsYXRlIGEgYmlzZWN0aW9uIHByb2Nlc3Mgb3IgeW91IHdpbGwgcGVyaGFwcyBibHVudGx5IHRlc3QgZWFjaAorY29tbWl0IGJhY2t3YXJkIHN0YXJ0aW5nIGZyb20gdGhlICJiYWQiIGNvbW1pdCB5b3UgaGF2ZSB3aGljaCBtYXkgYmUKK3Zlcnkgd2FzdGVmdWwuCisKKyJnaXQgYmlzZWN0IiBvdmVydmlldworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N0YXJ0aW5nIGEgYmlzZWN0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgZmlyc3QgImdpdCBiaXNlY3QiIHN1YmNvbW1hbmQgdG8gdXNlIGlzICJnaXQgYmlzZWN0IHN0YXJ0IiB0bworc3RhcnQgdGhlIHNlYXJjaC4gVGhlbiBib3VuZHMgbXVzdCBiZSBzZXQgdG8gbGltaXQgdGhlIGNvbW1pdAorc3BhY2UuIFRoaXMgaXMgZG9uZSB1c3VhbGx5IGJ5IGdpdmluZyBvbmUgImJhZCIgYW5kIGF0IGxlYXN0IG9uZQorImdvb2QiIGNvbW1pdC4gVGhleSBjYW4gYmUgcGFzc2VkIGluIHRoZSBpbml0aWFsIGNhbGwgdG8gImdpdCBiaXNlY3QKK3N0YXJ0IiBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBbQkFEIFtHT09ELi4uXV0KKy0tLS0tLS0tLS0tLS0KKworb3IgdGhleSBjYW4gYmUgc2V0IHVzaW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgYmFkIFtDT01NSVRdCistLS0tLS0tLS0tLS0tCisKK2FuZDoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGdvb2QgW0NPTU1JVC4uLl0KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgQkFELCBHT09EIGFuZCBDT01NSVQgYXJlIGFsbCBuYW1lcyB0aGF0IGNhbiBiZSByZXNvbHZlZCB0byBhCitjb21taXQuCisKK1RoZW4gImdpdCBiaXNlY3QiIHdpbGwgY2hlY2tvdXQgYSBjb21taXQgb2YgaXRzIGNob29zaW5nIGFuZCBhc2sgdGhlCit1c2VyIHRvIHRlc3QgaXQsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IHYyLjYuMjcgdjIuNi4yNQorQmlzZWN0aW5nOiAxMDkyOCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTQgc3RlcHMpCitbMmVjNjVmOGI4OWVhMDAzYzI3ZmY3NzIzNTI1YTJlZTMzNWEyYjM5M10geDg2OiBjbGVhbiB1cCB1c2luZyBtYXhfbG93X3BmbiBvbiAzMi1iaXQKKy0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IHRoZSBleGFtcGxlIHRoYXQgd2Ugd2lsbCB1c2UgaXMgcmVhbGx5IGEgdG95IGV4YW1wbGUsIHdlCit3aWxsIGJlIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCBjb21taXQgdGhhdCBoYXMgYSB2ZXJzaW9uIGxpa2UKKyIyLjYuMjYtc29tZXRoaW5nIiwgdGhhdCBpcyB0aGUgY29tbWl0IHRoYXQgaGFzIGEgIlNVQkxFVkVMID0gMjYiIGxpbmUKK2luIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUuIFRoaXMgaXMgYSB0b3kgZXhhbXBsZSBiZWNhdXNlIHRoZXJlIGFyZQorYmV0dGVyIHdheXMgdG8gZmluZCB0aGlzIGNvbW1pdCB3aXRoIGdpdCB0aGFuIHVzaW5nICJnaXQgYmlzZWN0IiAoZm9yCitleGFtcGxlICJnaXQgYmxhbWUiIG9yICJnaXQgbG9nIC1TPHN0cmluZz4iKS4KKworRHJpdmluZyBhIGJpc2VjdGlvbiBtYW51YWxseQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBdCB0aGlzIHBvaW50IHRoZXJlIGFyZSBiYXNpY2FsbHkgMiB3YXlzIHRvIGRyaXZlIHRoZSBzZWFyY2guIEl0IGNhbgorYmUgZHJpdmVuIG1hbnVhbGx5IGJ5IHRoZSB1c2VyIG9yIGl0IGNhbiBiZSBkcml2ZW4gYXV0b21hdGljYWxseSBieSBhCitzY3JpcHQgb3IgYSBjb21tYW5kLgorCitJZiB0aGUgdXNlciBpcyBkcml2aW5nIGl0LCB0aGVuIGF0IGVhY2ggc3RlcCBvZiB0aGUgc2VhcmNoLCB0aGUgdXNlcgord2lsbCBoYXZlIHRvIHRlc3QgdGhlIGN1cnJlbnQgY29tbWl0IGFuZCBzYXkgaWYgaXQgaXMgImdvb2QiIG9yICJiYWQiCit1c2luZyB0aGUgImdpdCBiaXNlY3QgZ29vZCIgb3IgImdpdCBiaXNlY3QgYmFkIiBjb21tYW5kcyByZXNwZWN0aXZlbHkKK3RoYXQgaGF2ZSBiZWVuIGRlc2NyaWJlZCBhYm92ZS4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBiYWQKK0Jpc2VjdGluZzogNTQ4MCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTMgc3RlcHMpCitbNjZjMGIzOTRmMDhmZDg5MjM2NTE1YzFjODQ0ODVlYTcxMmExNTdiZV0gS1ZNOiBraWxsIGZpbGUtPmZfY291bnQgYWJ1c2UgaW4ga3ZtCistLS0tLS0tLS0tLS0tCisKK0FuZCBhZnRlciBhIGZldyBtb3JlIHN0ZXBzIGxpa2UgdGhhdCwgImdpdCBiaXNlY3QiIHdpbGwgZXZlbnR1YWxseQorZmluZCBhIGZpcnN0IGJhZCBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBiYWQKKzJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQKK2NvbW1pdCAyZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkCitBdXRob3I6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KK0RhdGU6ICAgU2F0IE1heSAzIDExOjU5OjQ0IDIwMDggLTA3MDAKKworICAgIExpbnV4IDIuNi4yNi1yYzEKKworOjEwMDY0NCAxMDA2NDQgNWNmODI1ODE5NTMzMWE0ZGJkZGRmZjA4YjhkNjg2NDI2MzhlZWE1NyA0NDkyOTg0ZWZjMDlhYjcyZmY2MjE5YTdiYzIxZmI2YTk1N2M0Y2Q1IE0gICAgICBNYWtlZmlsZQorLS0tLS0tLS0tLS0tLQorCitBdCB0aGlzIHBvaW50IHdlIGNhbiBzZWUgd2hhdCB0aGUgY29tbWl0IGRvZXMsIGNoZWNrIGl0IG91dCAoaWYgaXQncworbm90IGFscmVhZHkgY2hlY2tlZCBvdXQpIG9yIHRpbmtlciB3aXRoIGl0LCBmb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyBIRUFECitjb21taXQgMmRkY2NhMzZjOGJjZmEyNTE3MjRmZTM0MmM4MzI3NDUxOTg4YmUwZAorQXV0aG9yOiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CitEYXRlOiAgIFNhdCBNYXkgMyAxMTo1OTo0NCAyMDA4IC0wNzAwCisKKyAgICBMaW51eCAyLjYuMjYtcmMxCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCA1Y2Y4MjU4Li40NDkyOTg0IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMSw3ICsxLDcgQEAKKyBWRVJTSU9OID0gMgorIFBBVENITEVWRUwgPSA2CistU1VCTEVWRUwgPSAyNQorLUVYVFJBVkVSU0lPTiA9CisrU1VCTEVWRUwgPSAyNgorK0VYVFJBVkVSU0lPTiA9IC1yYzEKKyBOQU1FID0gRnVua3kgV2Vhc2VsIGlzIEppZ2d5IHdpdCBpdAorCisgIyAqRE9DVU1FTlRBVElPTioKKy0tLS0tLS0tLS0tLS0KKworQW5kIHdoZW4gd2UgYXJlIGZpbmlzaGVkIHdlIGNhbiB1c2UgImdpdCBiaXNlY3QgcmVzZXQiIHRvIGdvIGJhY2sgdG8KK3RoZSBicmFuY2ggd2Ugd2VyZSBpbiBiZWZvcmUgd2Ugc3RhcnRlZCBiaXNlY3Rpbmc6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCByZXNldAorQ2hlY2tpbmcgb3V0IGZpbGVzOiAxMDAlICgyMTU0OS8yMTU0OSksIGRvbmUuCitQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyAyZGRjY2EzLi4uIExpbnV4IDIuNi4yNi1yYzEKK1N3aXRjaGVkIHRvIGJyYW5jaCAnbWFzdGVyJworLS0tLS0tLS0tLS0tLQorCitEcml2aW5nIGEgYmlzZWN0aW9uIGF1dG9tYXRpY2FsbHkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgb3RoZXIgd2F5IHRvIGRyaXZlIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBpcyB0byB0ZWxsICJnaXQgYmlzZWN0IgordG8gbGF1bmNoIGEgc2NyaXB0IG9yIGNvbW1hbmQgYXQgZWFjaCBiaXNlY3Rpb24gc3RlcCB0byBrbm93IGlmIHRoZQorY3VycmVudCBjb21taXQgaXMgImdvb2QiIG9yICJiYWQiLiBUbyBkbyB0aGF0LCB3ZSB1c2UgdGhlICJnaXQgYmlzZWN0CitydW4iIGNvbW1hbmQuIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgdjIuNi4yNyB2Mi42LjI1CitCaXNlY3Rpbmc6IDEwOTI4IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSAxNCBzdGVwcykKK1syZWM2NWY4Yjg5ZWEwMDNjMjdmZjc3MjM1MjVhMmVlMzM1YTJiMzkzXSB4ODY6IGNsZWFuIHVwIHVzaW5nIG1heF9sb3dfcGZuIG9uIDMyLWJpdAorJAorJCBnaXQgYmlzZWN0IHJ1biBncmVwICdeU1VCTEVWRUwgPSAyNScgTWFrZWZpbGUKK3J1bm5pbmcgZ3JlcCBeU1VCTEVWRUwgPSAyNSBNYWtlZmlsZQorQmlzZWN0aW5nOiA1NDgwIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSAxMyBzdGVwcykKK1s2NmMwYjM5NGYwOGZkODkyMzY1MTVjMWM4NDQ4NWVhNzEyYTE1N2JlXSBLVk06IGtpbGwgZmlsZS0+Zl9jb3VudCBhYnVzZSBpbiBrdm0KK3J1bm5pbmcgZ3JlcCBeU1VCTEVWRUwgPSAyNSBNYWtlZmlsZQorU1VCTEVWRUwgPSAyNQorQmlzZWN0aW5nOiAyNzQwIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSAxMiBzdGVwcykKK1s2NzEyOTQ3MTk2MjhmMTY3MWZhZWZkNDg4Mjc2NDg4NmY4YWQwOGNiXSBWNEwvRFZCKDc4NzkpOiBBZGRpbmcgY3gxOCBTdXBwb3J0IGZvciBteGw1MDA1cworLi4uCisuLi4KK3J1bm5pbmcgZ3JlcCBeU1VCTEVWRUwgPSAyNSBNYWtlZmlsZQorQmlzZWN0aW5nOiAwIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSAwIHN0ZXBzKQorWzJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGRdIExpbnV4IDIuNi4yNi1yYzEKK3J1bm5pbmcgZ3JlcCBeU1VCTEVWRUwgPSAyNSBNYWtlZmlsZQorMmRkY2NhMzZjOGJjZmEyNTE3MjRmZTM0MmM4MzI3NDUxOTg4YmUwZCBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdAorY29tbWl0IDJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQKK0F1dGhvcjogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgorRGF0ZTogICBTYXQgTWF5IDMgMTE6NTk6NDQgMjAwOCAtMDcwMAorCisgICAgTGludXggMi42LjI2LXJjMQorCis6MTAwNjQ0IDEwMDY0NCA1Y2Y4MjU4MTk1MzMxYTRkYmRkZGZmMDhiOGQ2ODY0MjYzOGVlYTU3IDQ0OTI5ODRlZmMwOWFiNzJmZjYyMTlhN2JjMjFmYjZhOTU3YzRjZDUgTSAgICAgIE1ha2VmaWxlCitiaXNlY3QgcnVuIHN1Y2Nlc3MKKy0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBleGFtcGxlLCB3ZSBwYXNzZWQgImdyZXAgJ15TVUJMRVZFTCA9IDI1JyBNYWtlZmlsZSIgYXMKK3BhcmFtZXRlciB0byAiZ2l0IGJpc2VjdCBydW4iLiBUaGlzIG1lYW5zIHRoYXQgYXQgZWFjaCBzdGVwLCB0aGUgZ3JlcAorY29tbWFuZCB3ZSBwYXNzZWQgd2lsbCBiZSBsYXVuY2hlZC4gQW5kIGlmIGl0IGV4aXRzIHdpdGggY29kZSAwICh0aGF0CittZWFucyBzdWNjZXNzKSB0aGVuIGdpdCBiaXNlY3Qgd2lsbCBtYXJrIHRoZSBjdXJyZW50IHN0YXRlIGFzCisiZ29vZCIuIElmIGl0IGV4aXRzIHdpdGggY29kZSAxIChvciBhbnkgY29kZSBiZXR3ZWVuIDEgYW5kIDEyNworaW5jbHVkZWQsIGV4Y2VwdCB0aGUgc3BlY2lhbCBjb2RlIDEyNSksIHRoZW4gdGhlIGN1cnJlbnQgc3RhdGUgd2lsbCBiZQorbWFya2VkIGFzICJiYWQiLgorCitFeGl0IGNvZGUgYmV0d2VlbiAxMjggYW5kIDI1NSBhcmUgc3BlY2lhbCB0byAiZ2l0IGJpc2VjdCBydW4iLiBUaGV5CittYWtlIGl0IHN0b3AgaW1tZWRpYXRlbHkgdGhlIGJpc2VjdGlvbiBwcm9jZXNzLiBUaGlzIGlzIHVzZWZ1bCBmb3IKK2V4YW1wbGUgaWYgdGhlIGNvbW1hbmQgcGFzc2VkIHRha2VzIHRvbyBsb25nIHRvIGNvbXBsZXRlLCBiZWNhdXNlIHlvdQorY2FuIGtpbGwgaXQgd2l0aCBhIHNpZ25hbCBhbmQgaXQgd2lsbCBzdG9wIHRoZSBiaXNlY3Rpb24gcHJvY2Vzcy4KKworSXQgY2FuIGFsc28gYmUgdXNlZnVsIGluIHNjcmlwdHMgcGFzc2VkIHRvICJnaXQgYmlzZWN0IHJ1biIgdG8gImV4aXQKKzI1NSIgaWYgc29tZSB2ZXJ5IGFibm9ybWFsIHNpdHVhdGlvbiBpcyBkZXRlY3RlZC4KKworQXZvaWRpbmcgdW50ZXN0YWJsZSBjb21taXRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU29tZXRpbWVzIGl0IGhhcHBlbnMgdGhhdCB0aGUgY3VycmVudCBzdGF0ZSBjYW5ub3QgYmUgdGVzdGVkLCBmb3IKK2V4YW1wbGUgaWYgaXQgZG9lcyBub3QgY29tcGlsZSBiZWNhdXNlIHRoZXJlIHdhcyBhIGJ1ZyBwcmV2ZW50aW5nIGl0CithdCB0aGF0IHRpbWUuIFRoaXMgaXMgd2hhdCB0aGUgc3BlY2lhbCBleGl0IGNvZGUgMTI1IGlzIGZvci4gSXQgdGVsbHMKKyJnaXQgYmlzZWN0IHJ1biIgdGhhdCB0aGUgY3VycmVudCBjb21taXQgc2hvdWxkIGJlIG1hcmtlZCBhcwordW50ZXN0YWJsZSBhbmQgdGhhdCBhbm90aGVyIG9uZSBzaG91bGQgYmUgY2hvc2VuIGFuZCBjaGVja2VkIG91dC4KKworSWYgdGhlIGJpc2VjdGlvbiBwcm9jZXNzIGlzIGRyaXZlbiBtYW51YWxseSwgeW91IGNhbiB1c2UgImdpdCBiaXNlY3QKK3NraXAiIHRvIGRvIHRoZSBzYW1lIHRoaW5nLiAoSW4gZmFjdCB0aGUgc3BlY2lhbCBleGl0IGNvZGUgMTI1IG1ha2VzCisiZ2l0IGJpc2VjdCBydW4iIHVzZSAiZ2l0IGJpc2VjdCBza2lwIiBpbiB0aGUgYmFja2dyb3VuZC4pCisKK09yIGlmIHlvdSB3YW50IG1vcmUgY29udHJvbCwgeW91IGNhbiBpbnNwZWN0IHRoZSBjdXJyZW50IHN0YXRlIHVzaW5nCitmb3IgZXhhbXBsZSAiZ2l0IGJpc2VjdCB2aXN1YWxpemUiLiBJdCB3aWxsIGxhdW5jaCBnaXRrIChvciAiZ2l0IGxvZyIKK2lmIHRoZSBESVNQTEFZIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQpIHRvIGhlbHAgeW91IGZpbmQgYQorYmV0dGVyIGJpc2VjdGlvbiBwb2ludC4KKworRWl0aGVyIHdheSwgaWYgeW91IGhhdmUgYSBzdHJpbmcgb2YgdW50ZXN0YWJsZSBjb21taXRzLCBpdCBtaWdodAoraGFwcGVuIHRoYXQgdGhlIHJlZ3Jlc3Npb24geW91IGFyZSBsb29raW5nIGZvciBoYXMgYmVlbiBpbnRyb2R1Y2VkIGJ5CitvbmUgb2YgdGhlc2UgdW50ZXN0YWJsZSBjb21taXRzLiBJbiB0aGlzIGNhc2UgaXQncyBub3QgcG9zc2libGUgdG8KK3RlbGwgZm9yIHN1cmUgd2hpY2ggY29tbWl0IGludHJvZHVjZWQgdGhlIHJlZ3Jlc3Npb24uCisKK1NvIGlmIHlvdSB1c2VkICJnaXQgYmlzZWN0IHNraXAiIChvciB0aGUgcnVuIHNjcmlwdCBleGl0ZWQgd2l0aAorc3BlY2lhbCBjb2RlIDEyNSkgeW91IGNvdWxkIGdldCBhIHJlc3VsdCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0KK1RoZXJlIGFyZSBvbmx5ICdza2lwJ3BlZCBjb21taXRzIGxlZnQgdG8gdGVzdC4KK1RoZSBmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZjoKKzE1NzIyZjJmYTMyOGVhYmE5NzAyMjg5OGEzMDVmZmM4MTcyZGI2YjEKKzc4ZTg2Y2YzZTg1MGJkNzU1YmI3MTgzMWY0MmUyMDA2MjZmYmQxZTAKK2UxNWI3M2FkM2RiOWI0OGQ3ZDFhZGUzMmY4Y2QyM2E3NTFmZTBhY2UKKzA3MGVhYjIzMDMwMjQ3MDZmMjkyNDgyMmJmZWM4Yjk4NDdlNGFjMWIKK1dlIGNhbm5vdCBiaXNlY3QgbW9yZSEKKy0tLS0tLS0tLS0tLS0KKworU2F2aW5nIGEgbG9nIGFuZCByZXBsYXlpbmcgaXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmIHlvdSB3YW50IHRvIHNob3cgb3RoZXIgcGVvcGxlIHlvdXIgYmlzZWN0aW9uIHByb2Nlc3MsIHlvdSBjYW4gZ2V0IGEKK2xvZyB1c2luZyBmb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGxvZyA+IGJpc2VjdF9sb2cudHh0CistLS0tLS0tLS0tLS0tCisKK0FuZCBpdCBpcyBwb3NzaWJsZSB0byByZXBsYXkgaXQgdXNpbmc6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCByZXBsYXkgYmlzZWN0X2xvZy50eHQKKy0tLS0tLS0tLS0tLS0KKworCisiZ2l0IGJpc2VjdCIgZGV0YWlscworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmlzZWN0aW9uIGFsZ29yaXRobQorfn5+fn5+fn5+fn5+fn5+fn5+fgorCitBcyB0aGUgR2l0IGNvbW1pdHMgZm9ybSBhIGRpcmVjdGVkIGFjeWNsaWMgZ3JhcGggKERBRyksIGZpbmRpbmcgdGhlCitiZXN0IGJpc2VjdGlvbiBjb21taXQgdG8gdGVzdCBhdCBlYWNoIHN0ZXAgaXMgbm90IHNvIHNpbXBsZS4gQW55d2F5CitMaW51cyBmb3VuZCBhbmQgaW1wbGVtZW50ZWQgYSAidHJ1bHkgc3R1cGlkIiBhbGdvcml0aG0sIGxhdGVyIGltcHJvdmVkCitieSBKdW5pbyBIYW1hbm8sIHRoYXQgd29ya3MgcXVpdGUgd2VsbC4KKworU28gdGhlIGFsZ29yaXRobSB1c2VkIGJ5ICJnaXQgYmlzZWN0IiB0byBmaW5kIHRoZSBiZXN0IGJpc2VjdGlvbgorY29tbWl0IHdoZW4gdGhlcmUgYXJlIG5vIHNraXBwZWQgY29tbWl0cyBpcyB0aGUgZm9sbG93aW5nOgorCisxKSBrZWVwIG9ubHkgdGhlIGNvbW1pdHMgdGhhdDoKKworYSkgYXJlIGFuY2VzdG9yIG9mIHRoZSAiYmFkIiBjb21taXQgKGluY2x1ZGluZyB0aGUgImJhZCIgY29tbWl0IGl0c2VsZiksCitiKSBhcmUgbm90IGFuY2VzdG9yIG9mIGEgImdvb2QiIGNvbW1pdCAoZXhjbHVkaW5nIHRoZSAiZ29vZCIgY29tbWl0cykuCisKK1RoaXMgbWVhbnMgdGhhdCB3ZSBnZXQgcmlkIG9mIHRoZSB1bmludGVyZXN0aW5nIGNvbW1pdHMgaW4gdGhlIERBRy4KKworRm9yIGV4YW1wbGUgaWYgd2Ugc3RhcnQgd2l0aCBhIGdyYXBoIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLQorRy1ZLUctVy1XLVctWC1YLVgtWAorCSAgIFwgLworCSAgICBXLVctQgorCSAgIC8KK1ktLS1HLVctLS1XCisgXCAvICAgXAorWS1ZICAgICBYLVgtWC1YCisKKy0+IHRpbWUgZ29lcyB0aGlzIHdheSAtPgorLS0tLS0tLS0tLS0tLQorCit3aGVyZSBCIGlzIHRoZSAiYmFkIiBjb21taXQsICJHIiBhcmUgImdvb2QiIGNvbW1pdHMgYW5kIFcsIFgsIGFuZCBZCithcmUgb3RoZXIgY29tbWl0cywgd2Ugd2lsbCBnZXQgdGhlIGZvbGxvd2luZyBncmFwaCBhZnRlciB0aGlzIGZpcnN0CitzdGVwOgorCistLS0tLS0tLS0tLS0tCitXLVctVworICAgICBcCisgICAgICBXLVctQgorICAgICAvCitXLS0tVworLS0tLS0tLS0tLS0tLQorCitTbyBvbmx5IHRoZSBXIGFuZCBCIGNvbW1pdHMgd2lsbCBiZSBrZXB0LiBCZWNhdXNlIGNvbW1pdHMgWCBhbmQgWSB3aWxsCitoYXZlIGJlZW4gcmVtb3ZlZCBieSBydWxlcyBhKSBhbmQgYikgcmVzcGVjdGl2ZWx5LCBhbmQgYmVjYXVzZSBjb21taXRzCitHIGFyZSByZW1vdmVkIGJ5IHJ1bGUgYikgdG9vLgorCitOb3RlIGZvciBnaXQgdXNlcnMsIHRoYXQgaXQgaXMgZXF1aXZhbGVudCBhcyBrZWVwaW5nIG9ubHkgdGhlIGNvbW1pdAorZ2l2ZW4gYnk6CisKKy0tLS0tLS0tLS0tLS0KK2dpdCByZXYtbGlzdCBCQUQgLS1ub3QgR09PRDEgR09PRDIuLi4KKy0tLS0tLS0tLS0tLS0KKworQWxzbyBub3RlIHRoYXQgd2UgZG9uJ3QgcmVxdWlyZSB0aGUgY29tbWl0cyB0aGF0IGFyZSBrZXB0IHRvIGJlCitkZXNjZW5kYW50cyBvZiBhICJnb29kIiBjb21taXQuIFNvIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgY29tbWl0cyBXCithbmQgWiB3aWxsIGJlIGtlcHQ6CisKKy0tLS0tLS0tLS0tLS0KK0ctVy1XLVctQgorICAgLworWi1aCistLS0tLS0tLS0tLS0tCisKKzIpIHN0YXJ0aW5nIGZyb20gdGhlICJnb29kIiBlbmRzIG9mIHRoZSBncmFwaCwgYXNzb2NpYXRlIHRvIGVhY2gKK2NvbW1pdCB0aGUgbnVtYmVyIG9mIGFuY2VzdG9ycyBpdCBoYXMgcGx1cyBvbmUKKworRm9yIGV4YW1wbGUgd2l0aCB0aGUgZm9sbG93aW5nIGdyYXBoIHdoZXJlIEggaXMgdGhlICJiYWQiIGNvbW1pdCBhbmQgQQorYW5kIEQgYXJlIHNvbWUgcGFyZW50cyBvZiBzb21lICJnb29kIiBjb21taXRzOgorCistLS0tLS0tLS0tLS0tCitBLUItQworICAgICBcCisgICAgICBGLUctSAorICAgICAvCitELS0tRQorLS0tLS0tLS0tLS0tLQorCit0aGlzIHdpbGwgZ2l2ZToKKworLS0tLS0tLS0tLS0tLQorMSAyIDMKK0EtQi1DCisgICAgIFw2IDcgOAorICAgICAgRi1HLUgKKzEgICAyLworRC0tLUUKKy0tLS0tLS0tLS0tLS0KKworMykgYXNzb2NpYXRlIHRvIGVhY2ggY29tbWl0OiBtaW4oWCwgTiAtIFgpCisKK3doZXJlIFggaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gdGhlIGNvbW1pdCBpbiBzdGVwIDIpIGFuZCBOIGlzIHRoZQordG90YWwgbnVtYmVyIG9mIGNvbW1pdHMgaW4gdGhlIGdyYXBoLgorCitJbiB0aGUgYWJvdmUgZXhhbXBsZSB3ZSBoYXZlIE4gPSA4LCBzbyB0aGlzIHdpbGwgZ2l2ZToKKworLS0tLS0tLS0tLS0tLQorMSAyIDMKK0EtQi1DCisgICAgIFwyIDEgMAorICAgICAgRi1HLUgKKzEgICAyLworRC0tLUUKKy0tLS0tLS0tLS0tLS0KKworNCkgdGhlIGJlc3QgYmlzZWN0aW9uIHBvaW50IGlzIHRoZSBjb21taXQgd2l0aCB0aGUgaGlnaGVzdCBhc3NvY2lhdGVkCitudW1iZXIKKworU28gaW4gdGhlIGFib3ZlIGV4YW1wbGUgdGhlIGJlc3QgYmlzZWN0aW9uIHBvaW50IGlzIGNvbW1pdCBDLgorCis1KSBub3RlIHRoYXQgc29tZSBzaG9ydGN1dHMgYXJlIGltcGxlbWVudGVkIHRvIHNwZWVkIHVwIHRoZSBhbGdvcml0aG0KKworQXMgd2Uga25vdyBOIGZyb20gdGhlIGJlZ2lubmluZywgd2Uga25vdyB0aGF0IG1pbihYLCBOIC0gWCkgY2FuJ3QgYmUKK2dyZWF0ZXIgdGhhbiBOLzIuIFNvIGR1cmluZyBzdGVwcyAyKSBhbmQgMyksIGlmIHdlIHdvdWxkIGFzc29jaWF0ZSBOLzIKK3RvIGEgY29tbWl0LCB0aGVuIHdlIGtub3cgdGhpcyBpcyB0aGUgYmVzdCBiaXNlY3Rpb24gcG9pbnQuIFNvIGluIHRoaXMKK2Nhc2Ugd2UgY2FuIGp1c3Qgc3RvcCBwcm9jZXNzaW5nIGFueSBvdGhlciBjb21taXQgYW5kIHJldHVybiB0aGUKK2N1cnJlbnQgY29tbWl0LgorCitCaXNlY3Rpb24gYWxnb3JpdGhtIGRlYnVnZ2luZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRm9yIGFueSBjb21taXQgZ3JhcGgsIHlvdSBjYW4gc2VlIHRoZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2gKK2NvbW1pdCB1c2luZyAiZ2l0IHJldi1saXN0IC0tYmlzZWN0LWFsbCIuCisKK0ZvciBleGFtcGxlLCBmb3IgdGhlIGFib3ZlIGdyYXBoLCBhIGNvbW1hbmQgbGlrZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LWxpc3QgLS1iaXNlY3QtYWxsIEJBRCAtLW5vdCBHT09EMSBHT09EMgorLS0tLS0tLS0tLS0tLQorCit3b3VsZCBvdXRwdXQgc29tZXRoaW5nIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0KK2UxNWI3M2FkM2RiOWI0OGQ3ZDFhZGUzMmY4Y2QyM2E3NTFmZTBhY2UgKGRpc3Q9MykKKzE1NzIyZjJmYTMyOGVhYmE5NzAyMjg5OGEzMDVmZmM4MTcyZGI2YjEgKGRpc3Q9MikKKzc4ZTg2Y2YzZTg1MGJkNzU1YmI3MTgzMWY0MmUyMDA2MjZmYmQxZTAgKGRpc3Q9MikKK2ExOTM5ZDlhMTQyZGU5NzIwOTRhZjRkZGU5YTU0NGU1NzdkZGVmMGUgKGRpc3Q9MikKKzA3MGVhYjIzMDMwMjQ3MDZmMjkyNDgyMmJmZWM4Yjk4NDdlNGFjMWIgKGRpc3Q9MSkKK2EzODY0ZDRmMzJhM2JmNWVkMTc3ZGRlZjU5ODQ5MGEwODc2MGI3MGQgKGRpc3Q9MSkKK2E0MWJhYTcxN2RkNzRmMTE4MGFiZjU1ZTkzNDFiYzdhMGJiOWQ1NTYgKGRpc3Q9MSkKKzllNjIyYTZkYWQ0MDNiNzFjNDA5Nzk3NDNiYjlkNWJlMTdiMTZiZDYgKGRpc3Q9MCkKKy0tLS0tLS0tLS0tLS0KKworQmlzZWN0aW9uIGFsZ29yaXRobSBkaXNjdXNzZWQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZpcnN0IGxldCdzIGRlZmluZSAiYmVzdCBiaXNlY3Rpb24gcG9pbnQiLiBXZSB3aWxsIHNheSB0aGF0IGEgY29tbWl0IFgKK2lzIGEgYmVzdCBiaXNlY3Rpb24gcG9pbnQgb3IgYSBiZXN0IGJpc2VjdGlvbiBjb21taXQgaWYga25vd2luZyBpdHMKK3N0YXRlICgiZ29vZCIgb3IgImJhZCIpIGdpdmVzIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGUgd2hldGhlcgordGhlIHN0YXRlIG9mIHRoZSBjb21taXQgaGFwcGVucyB0byBiZSAiZ29vZCIgb3IgImJhZCIuCisKK1RoaXMgbWVhbnMgdGhhdCB0aGUgYmVzdCBiaXNlY3Rpb24gY29tbWl0cyBhcmUgdGhlIGNvbW1pdHMgd2hlcmUgdGhlCitmb2xsb3dpbmcgZnVuY3Rpb24gaXMgbWF4aW11bToKKworLS0tLS0tLS0tLS0tLQorZihYKSA9IG1pbihpbmZvcm1hdGlvbl9pZl9nb29kKFgpLCBpbmZvcm1hdGlvbl9pZl9iYWQoWCkpCistLS0tLS0tLS0tLS0tCisKK3doZXJlIGluZm9ybWF0aW9uX2lmX2dvb2QoWCkgaXMgdGhlIGluZm9ybWF0aW9uIHdlIGdldCBpZiBYIGlzIGdvb2QKK2FuZCBpbmZvcm1hdGlvbl9pZl9iYWQoWCkgaXMgdGhlIGluZm9ybWF0aW9uIHdlIGdldCBpZiBYIGlzIGJhZC4KKworTm93IHdlIHdpbGwgc3VwcG9zZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lICJmaXJzdCBiYWQgY29tbWl0Ii4gVGhpcworbWVhbnMgdGhhdCBhbGwgaXRzIGRlc2NlbmRhbnRzIGFyZSAiYmFkIiBhbmQgYWxsIHRoZSBvdGhlciBjb21taXRzIGFyZQorImdvb2QiLiBBbmQgd2Ugd2lsbCBzdXBwb3NlIHRoYXQgYWxsIGNvbW1pdHMgaGF2ZSBhbiBlcXVhbCBwcm9iYWJpbGl0eQorb2YgYmVpbmcgZ29vZCBvciBiYWQsIG9yIG9mIGJlaW5nIHRoZSBmaXJzdCBiYWQgY29tbWl0LCBzbyBrbm93aW5nIHRoZQorc3RhdGUgb2YgYyBjb21taXRzIGdpdmVzIGFsd2F5cyB0aGUgc2FtZSBhbW91bnQgb2YgaW5mb3JtYXRpb24KK3doZXJldmVyIHRoZXNlIGMgY29tbWl0cyBhcmUgb24gdGhlIGdyYXBoIGFuZCB3aGF0ZXZlciBjIGlzLiAoU28gd2UKK3N1cHBvc2UgdGhhdCB0aGVzZSBjb21taXRzIGJlaW5nIGZvciBleGFtcGxlIG9uIGEgYnJhbmNoIG9yIG5lYXIgYQorZ29vZCBvciBhIGJhZCBjb21taXQgZG9lcyBub3QgZ2l2ZSBtb3JlIG9yIGxlc3MgaW5mb3JtYXRpb24pLgorCitMZXQncyBhbHNvIHN1cHBvc2UgdGhhdCB3ZSBoYXZlIGEgY2xlYW5lZCB1cCBncmFwaCBsaWtlIG9uZSBhZnRlciBzdGVwCisxKSBpbiB0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSBhYm92ZS4gVGhpcyBtZWFucyB0aGF0IHdlIGNhbiBtZWFzdXJlCit0aGUgaW5mb3JtYXRpb24gd2UgZ2V0IGluIHRlcm1zIG9mIG51bWJlciBvZiBjb21taXQgd2UgY2FuIHJlbW92ZSBmcm9tCit0aGUgZ3JhcGguLgorCitBbmQgbGV0J3MgdGFrZSBhIGNvbW1pdCBYIGluIHRoZSBncmFwaC4KKworSWYgWCBpcyBmb3VuZCB0byBiZSAiZ29vZCIsIHRoZW4gd2Uga25vdyB0aGF0IGl0cyBhbmNlc3RvcnMgYXJlIGFsbAorImdvb2QiLCBzbyB3ZSB3YW50IHRvIHNheSB0aGF0OgorCistLS0tLS0tLS0tLS0tCitpbmZvcm1hdGlvbl9pZl9nb29kKFgpID0gbnVtYmVyX29mX2FuY2VzdG9ycyhYKSAgKFRSVUUpCistLS0tLS0tLS0tLS0tCisKK0FuZCB0aGlzIGlzIHRydWUgYmVjYXVzZSBhdCBzdGVwIDEpIGIpIHdlIHJlbW92ZSB0aGUgYW5jZXN0b3JzIG9mIHRoZQorImdvb2QiIGNvbW1pdHMuCisKK0lmIFggaXMgZm91bmQgdG8gYmUgImJhZCIsIHRoZW4gd2Uga25vdyB0aGF0IGl0cyBkZXNjZW5kYW50cyBhcmUgYWxsCisiYmFkIiwgc28gd2Ugd2FudCB0byBzYXkgdGhhdDoKKworLS0tLS0tLS0tLS0tLQoraW5mb3JtYXRpb25faWZfYmFkKFgpID0gbnVtYmVyX29mX2Rlc2NlbmRhbnRzKFgpICAoV1JPTkcpCistLS0tLS0tLS0tLS0tCisKK0J1dCB0aGlzIGlzIHdyb25nIGJlY2F1c2UgYXQgc3RlcCAxKSBhKSB3ZSBrZWVwIG9ubHkgdGhlIGFuY2VzdG9ycyBvZgordGhlIGJhZCBjb21taXQuIFNvIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIHdoZW4gYSBjb21taXQgaXMgbWFya2VkIGFzCisiYmFkIiwgYmVjYXVzZSB3ZSBhbHNvIGtub3cgdGhhdCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBwcmV2aW91cyAiYmFkIgorY29tbWl0IHRoYXQgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlIG5ldyAiYmFkIiBjb21taXQgYXJlIG5vdCB0aGUKK2ZpcnN0IGJhZCBjb21taXQuIFdlIGRvbid0IGtub3cgaWYgdGhleSBhcmUgZ29vZCBvciBiYWQsIGJ1dCB3ZSBrbm93Cit0aGF0IHRoZXkgYXJlIG5vdCB0aGUgZmlyc3QgYmFkIGNvbW1pdCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhbmNlc3Rvcgorb2YgdGhlIG5ldyAiYmFkIiBjb21taXQuCisKK1NvIHdoZW4gYSBjb21taXQgaXMgbWFya2VkIGFzICJiYWQiIHdlIGtub3cgd2UgY2FuIHJlbW92ZSBhbGwgdGhlCitjb21taXRzIGluIHRoZSBncmFwaCBleGNlcHQgdGhvc2UgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIHRoZSBuZXcgImJhZCIKK2NvbW1pdC4gVGhpcyBtZWFucyB0aGF0OgorCistLS0tLS0tLS0tLS0tCitpbmZvcm1hdGlvbl9pZl9iYWQoWCkgPSBOIC0gbnVtYmVyX29mX2FuY2VzdG9ycyhYKSAgKFRSVUUpCistLS0tLS0tLS0tLS0tCisKK3doZXJlIE4gaXMgdGhlIG51bWJlciBvZiBjb21taXRzIGluIHRoZSAoY2xlYW5lZCB1cCkgZ3JhcGguCisKK1NvIGluIHRoZSBlbmQgdGhpcyBtZWFucyB0aGF0IHRvIGZpbmQgdGhlIGJlc3QgYmlzZWN0aW9uIGNvbW1pdHMgd2UKK3Nob3VsZCBtYXhpbWl6ZSB0aGUgZnVuY3Rpb246CisKKy0tLS0tLS0tLS0tLS0KK2YoWCkgPSBtaW4obnVtYmVyX29mX2FuY2VzdG9ycyhYKSwgTiAtIG51bWJlcl9vZl9hbmNlc3RvcnMoWCkpCistLS0tLS0tLS0tLS0tCisKK0FuZCB0aGlzIGlzIG5pY2UgYmVjYXVzZSBhdCBzdGVwIDIpIHdlIGNvbXB1dGUgbnVtYmVyX29mX2FuY2VzdG9ycyhYKQorYW5kIHNvIGF0IHN0ZXAgMykgd2UgY29tcHV0ZSBmKFgpLgorCitMZXQncyB0YWtlIHRoZSBmb2xsb3dpbmcgZ3JhcGggYXMgYW4gZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorCSAgICBHLUgtSS1KCisJICAgLyAgICAgICBcCitBLUItQy1ELUUtRiAgICAgICAgIE8KKwkgICBcICAgICAgIC8KKwkgICAgSy1MLU0tTgorLS0tLS0tLS0tLS0tLQorCitJZiB3ZSBjb21wdXRlIHRoZSBmb2xsb3dpbmcgbm9uIG9wdGltYWwgZnVuY3Rpb24gb24gaXQ6CisKKy0tLS0tLS0tLS0tLS0KK2coWCkgPSBtaW4obnVtYmVyX29mX2FuY2VzdG9ycyhYKSwgbnVtYmVyX29mX2Rlc2NlbmRhbnRzKFgpKQorLS0tLS0tLS0tLS0tLQorCit3ZSBnZXQ6CisKKy0tLS0tLS0tLS0tLS0KKwkgICAgNCAzIDIgMQorCSAgICBHLUgtSS1KCisxIDIgMyA0IDUgNi8gICAgICAgXDAKK0EtQi1DLUQtRS1GICAgICAgICAgTworCSAgIFwgICAgICAgLworCSAgICBLLUwtTS1OCisJICAgIDQgMyAyIDEKKy0tLS0tLS0tLS0tLS0KKworYnV0IHdpdGggdGhlIGFsZ29yaXRobSB1c2VkIGJ5IGdpdCBiaXNlY3Qgd2UgZ2V0OgorCistLS0tLS0tLS0tLS0tCisJICAgIDcgNyA2IDUKKwkgICAgRy1ILUktSgorMSAyIDMgNCA1IDYvICAgICAgIFwwCitBLUItQy1ELUUtRiAgICAgICAgIE8KKwkgICBcICAgICAgIC8KKwkgICAgSy1MLU0tTgorCSAgICA3IDcgNiA1CistLS0tLS0tLS0tLS0tCisKK1NvIHdlIGNob3NlIEcsIEgsIEsgb3IgTCBhcyB0aGUgYmVzdCBiaXNlY3Rpb24gcG9pbnQsIHdoaWNoIGlzIGJldHRlcgordGhhbiBGLiBCZWNhdXNlIGlmIGZvciBleGFtcGxlIEwgaXMgYmFkLCB0aGVuIHdlIHdpbGwga25vdyBub3Qgb25seQordGhhdCBMLCBNIGFuZCBOIGFyZSBiYWQgYnV0IGFsc28gdGhhdCBHLCBILCBJIGFuZCBKIGFyZSBub3QgdGhlIGZpcnN0CitiYWQgY29tbWl0IChzaW5jZSB3ZSBzdXBwb3NlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlyc3QgYmFkIGNvbW1pdAorYW5kIGl0IG11c3QgYmUgYW4gYW5jZXN0b3Igb2YgTCkuCisKK1NvIHRoZSBjdXJyZW50IGFsZ29yaXRobSBzZWVtcyB0byBiZSB0aGUgYmVzdCBwb3NzaWJsZSBnaXZlbiB3aGF0IHdlCitpbml0aWFsbHkgc3VwcG9zZWQuCisKK1NraXAgYWxnb3JpdGhtCit+fn5+fn5+fn5+fn5+fgorCitXaGVuIHNvbWUgY29tbWl0cyBoYXZlIGJlZW4gc2tpcHBlZCAodXNpbmcgImdpdCBiaXNlY3Qgc2tpcCIpLCB0aGVuCit0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSBpcyB0aGUgc2FtZSBmb3Igc3RlcCAxKSB0byAzKS4gQnV0IHRoZW4gd2UgdXNlCityb3VnaGx5IHRoZSBmb2xsb3dpbmcgc3RlcHM6CisKKzYpIHNvcnQgdGhlIGNvbW1pdCBieSBkZWNyZWFzaW5nIGFzc29jaWF0ZWQgdmFsdWUKKworNykgaWYgdGhlIGZpcnN0IGNvbW1pdCBoYXMgbm90IGJlZW4gc2tpcHBlZCwgd2UgY2FuIHJldHVybiBpdCBhbmQgc3RvcAoraGVyZQorCis4KSBvdGhlcndpc2UgZmlsdGVyIG91dCBhbGwgdGhlIHNraXBwZWQgY29tbWl0cyBpbiB0aGUgc29ydGVkIGxpc3QKKworOSkgdXNlIGEgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChQUk5HKSB0byBnZW5lcmF0ZSBhIHJhbmRvbQorbnVtYmVyIGJldHdlZW4gMCBhbmQgMQorCisxMCkgbXVsdGlwbHkgdGhpcyByYW5kb20gbnVtYmVyIHdpdGggaXRzIHNxdWFyZSByb290IHRvIGJpYXMgaXQgdG93YXJkCiswCisKKzExKSBtdWx0aXBseSB0aGUgcmVzdWx0IGJ5IHRoZSBudW1iZXIgb2YgY29tbWl0cyBpbiB0aGUgZmlsdGVyZWQgbGlzdAordG8gZ2V0IGFuIGluZGV4IGludG8gdGhpcyBsaXN0CisKKzEyKSByZXR1cm4gdGhlIGNvbW1pdCBhdCB0aGUgY29tcHV0ZWQgaW5kZXgKKworU2tpcCBhbGdvcml0aG0gZGlzY3Vzc2VkCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQWZ0ZXIgc3RlcCA3KSAoaW4gdGhlIHNraXAgYWxnb3JpdGhtKSwgd2UgY291bGQgY2hlY2sgaWYgdGhlIHNlY29uZAorY29tbWl0IGhhcyBiZWVuIHNraXBwZWQgYW5kIHJldHVybiBpdCBpZiBpdCBpcyBub3QgdGhlIGNhc2UuIEFuZCBpbgorZmFjdCB0aGF0IHdhcyB0aGUgYWxnb3JpdGhtIHdlIHVzZWQgZnJvbSB3aGVuICJnaXQgYmlzZWN0IHNraXAiIHdhcworZGV2ZWxvcGVkIGluIGdpdCB2ZXJzaW9uIDEuNS40IChyZWxlYXNlZCBvbiBGZWJydWFyeSAxc3QgMjAwOCkgdW50aWwKK2dpdCB2ZXJzaW9uIDEuNi40IChyZWxlYXNlZCBKdWx5IDI5dGggMjAwOSkuCisKK0J1dCBJbmdvIE1vbG5hciBhbmQgSC4gUGV0ZXIgQW52aW4gKGFub3RoZXIgd2VsbCBrbm93biBsaW51eCBrZXJuZWwKK2RldmVsb3BlcikgYm90aCBjb21wbGFpbmVkIHRoYXQgc29tZXRpbWVzIHRoZSBiZXN0IGJpc2VjdGlvbiBwb2ludHMKK2FsbCBoYXBwZW5lZCB0byBiZSBpbiBhbiBhcmVhIHdoZXJlIGFsbCB0aGUgY29tbWl0cyBhcmUKK3VudGVzdGFibGUuIEFuZCBpbiB0aGlzIGNhc2UgdGhlIHVzZXIgd2FzIGFza2VkIHRvIHRlc3QgbWFueQordW50ZXN0YWJsZSBjb21taXRzLCB3aGljaCBjb3VsZCBiZSB2ZXJ5IGluZWZmaWNpZW50LgorCitJbmRlZWQgdW50ZXN0YWJsZSBjb21taXRzIGFyZSBvZnRlbiB1bnRlc3RhYmxlIGJlY2F1c2UgYSBicmVha2FnZSB3YXMKK2ludHJvZHVjZWQgYXQgb25lIHRpbWUsIGFuZCB0aGF0IGJyZWFrYWdlIHdhcyBmaXhlZCBvbmx5IGFmdGVyIG1hbnkKK290aGVyIGNvbW1pdHMgd2VyZSBpbnRyb2R1Y2VkLgorCitUaGlzIGJyZWFrYWdlIGlzIG9mIGNvdXJzZSBtb3N0IG9mIHRoZSB0aW1lIHVucmVsYXRlZCB0byB0aGUgYnJlYWthZ2UKK3dlIGFyZSB0cnlpbmcgdG8gbG9jYXRlIGluIHRoZSBjb21taXQgZ3JhcGguIEJ1dCBpdCBwcmV2ZW50cyB1cyB0bwora25vdyBpZiB0aGUgaW50ZXJlc3RpbmcgImJhZCBiZWhhdmlvciIgaXMgcHJlc2VudCBvciBub3QuCisKK1NvIGl0IGlzIGEgZmFjdCB0aGF0IGNvbW1pdHMgbmVhciBhbiB1bnRlc3RhYmxlIGNvbW1pdCBoYXZlIGEgaGlnaAorcHJvYmFiaWxpdHkgb2YgYmVpbmcgdW50ZXN0YWJsZSB0aGVtc2VsdmVzLiBBbmQgdGhlIGJlc3QgYmlzZWN0aW9uCitjb21taXRzIGFyZSBvZnRlbiBmb3VuZCB0b2dldGhlciB0b28gKGR1ZSB0byB0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSkuCisKK1RoaXMgaXMgd2h5IGl0IGlzIGEgYmFkIGlkZWEgdG8ganVzdCBjaG9zZSB0aGUgbmV4dCBiZXN0IHVuc2tpcHBlZAorYmlzZWN0aW9uIGNvbW1pdCB3aGVuIHRoZSBmaXJzdCBvbmUgaGFzIGJlZW4gc2tpcHBlZC4KKworV2UgZm91bmQgdGhhdCBtb3N0IGNvbW1pdHMgb24gdGhlIGdyYXBoIG1heSBnaXZlIHF1aXRlIGEgbG90IG9mCitpbmZvcm1hdGlvbiB3aGVuIHRoZXkgYXJlIHRlc3RlZC4gQW5kIHRoZSBjb21taXRzIHRoYXQgd2lsbCBub3Qgb24KK2F2ZXJhZ2UgZ2l2ZSBhIGxvdCBvZiBpbmZvcm1hdGlvbiBhcmUgdGhlIG9uZSBuZWFyIHRoZSBnb29kIGFuZCBiYWQKK2NvbW1pdHMuCisKK1NvIHVzaW5nIGEgUFJORyB3aXRoIGEgYmlhcyB0byBmYXZvciBjb21taXRzIGF3YXkgZnJvbSB0aGUgZ29vZCBhbmQKK2JhZCBjb21taXRzIGxvb2tlZCBsaWtlIGEgZ29vZCBjaG9pY2UuCisKK09uZSBvYnZpb3VzIGltcHJvdmVtZW50IHRvIHRoaXMgYWxnb3JpdGhtIHdvdWxkIGJlIHRvIGxvb2sgZm9yIGEKK2NvbW1pdCB0aGF0IGhhcyBhbiBhc3NvY2lhdGVkIHZhbHVlIG5lYXIgdGhlIG9uZSBvZiB0aGUgYmVzdCBiaXNlY3Rpb24KK2NvbW1pdCwgYW5kIHRoYXQgaXMgb24gYW5vdGhlciBicmFuY2gsIGJlZm9yZSB1c2luZyB0aGUgUFJORy4gQmVjYXVzZQoraWYgc3VjaCBhIGNvbW1pdCBleGlzdHMsIHRoZW4gaXQgaXMgbm90IHZlcnkgbGlrZWx5IHRvIGJlIHVudGVzdGFibGUKK3Rvbywgc28gaXQgd2lsbCBwcm9iYWJseSBnaXZlIG1vcmUgaW5mb3JtYXRpb24gdGhhbiBhIG5lYXJseSByYW5kb21seQorY2hvc2VuIG9uZS4KKworQ2hlY2tpbmcgbWVyZ2UgYmFzZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXJlIGlzIGFub3RoZXIgdHdlYWsgaW4gdGhlIGJpc2VjdGlvbiBhbGdvcml0aG0gdGhhdCBoYXMgbm90IGJlZW4KK2Rlc2NyaWJlZCBpbiB0aGUgImJpc2VjdGlvbiBhbGdvcml0aG0iIGFib3ZlLgorCitXZSBzdXBwb3NlZCBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZXMgdGhhdCB0aGUgImdvb2QiIGNvbW1pdHMgd2VyZQorYW5jZXN0b3JzIG9mIHRoZSAiYmFkIiBjb21taXQuIEJ1dCB0aGlzIGlzIG5vdCBhIHJlcXVpcmVtZW50IG9mICJnaXQKK2Jpc2VjdCIuCisKK09mIGNvdXJzZSB0aGUgImJhZCIgY29tbWl0IGNhbm5vdCBiZSBhbiBhbmNlc3RvciBvZiBhICJnb29kIiBjb21taXQsCitiZWNhdXNlIHRoZSBhbmNlc3RvcnMgb2YgdGhlIGdvb2QgY29tbWl0cyBhcmUgc3VwcG9zZWQgdG8gYmUKKyJnb29kIi4gQW5kIGFsbCB0aGUgImdvb2QiIGNvbW1pdHMgbXVzdCBiZSByZWxhdGVkIHRvIHRoZSBiYWQgY29tbWl0LgorVGhleSBjYW5ub3QgYmUgb24gYSBicmFuY2ggdGhhdCBoYXMgbm8gbGluayB3aXRoIHRoZSBicmFuY2ggb2YgdGhlCisiYmFkIiBjb21taXQuIEJ1dCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBnb29kIGNvbW1pdCB0byBiZSByZWxhdGVkIHRvIGEKK2JhZCBjb21taXQgYW5kIHlldCBub3QgYmUgbmVpdGhlciBvbmUgb2YgaXRzIGFuY2VzdG9yIG5vciBvbmUgb2YgaXRzCitkZXNjZW5kYW50cy4KKworRm9yIGV4YW1wbGUsIHRoZXJlIGNhbiBiZSBhICJtYWluIiBicmFuY2gsIGFuZCBhICJkZXYiIGJyYW5jaCB0aGF0IHdhcworZm9ya2VkIG9mIHRoZSBtYWluIGJyYW5jaCBhdCBhIGNvbW1pdCBuYW1lZCAiRCIgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tCitBLUItQy1ELUUtRi1HICA8LS1tYWluCisgICAgICAgXAorCUgtSS1KICA8LS1kZXYKKy0tLS0tLS0tLS0tLS0KKworVGhlIGNvbW1pdCAiRCIgaXMgY2FsbGVkIGEgIm1lcmdlIGJhc2UiIGZvciBicmFuY2ggIm1haW4iIGFuZCAiZGV2IgorYmVjYXVzZSBpdCdzIHRoZSBiZXN0IGNvbW1vbiBhbmNlc3RvciBmb3IgdGhlc2UgYnJhbmNoZXMgZm9yIGEgbWVyZ2UuCisKK05vdyBsZXQncyBzdXBwb3NlIHRoYXQgY29tbWl0IEogaXMgYmFkIGFuZCBjb21taXQgRyBpcyBnb29kIGFuZCB0aGF0Cit3ZSBhcHBseSB0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSBsaWtlIGl0IGhhcyBiZWVuIHByZXZpb3VzbHkKK2Rlc2NyaWJlZC4KKworQXMgZGVzY3JpYmVkIGluIHN0ZXAgMSkgYikgb2YgdGhlIGJpc2VjdGlvbiBhbGdvcml0aG0sIHdlIHJlbW92ZSBhbGwKK3RoZSBhbmNlc3RvcnMgb2YgdGhlIGdvb2QgY29tbWl0cyBiZWNhdXNlIHRoZXkgYXJlIHN1cHBvc2VkIHRvIGJlIGdvb2QKK3Rvby4KKworU28gd2Ugd291bGQgYmUgbGVmdCB3aXRoIG9ubHk6CisKKy0tLS0tLS0tLS0tLS0KK0gtSS1KCistLS0tLS0tLS0tLS0tCisKK0J1dCB3aGF0IGhhcHBlbnMgaWYgdGhlIGZpcnN0IGJhZCBjb21taXQgaXMgIkIiIGFuZCBpZiBpdCBoYXMgYmVlbgorZml4ZWQgaW4gdGhlICJtYWluIiBicmFuY2ggYnkgY29tbWl0ICJGIj8KKworVGhlIHJlc3VsdCBvZiBzdWNoIGEgYmlzZWN0aW9uIHdvdWxkIGJlIHRoYXQgd2Ugd291bGQgZmluZCB0aGF0IEggaXMKK3RoZSBmaXJzdCBiYWQgY29tbWl0LCB3aGVuIGluIGZhY3QgaXQncyBCLiBTbyB0aGF0IHdvdWxkIGJlIHdyb25nIQorCitBbmQgeWVzIGl0IGNhbiBoYXBwZW4gaW4gcHJhY3RpY2UgdGhhdCBwZW9wbGUgd29ya2luZyBvbiBvbmUgYnJhbmNoCithcmUgbm90IGF3YXJlIHRoYXQgcGVvcGxlIHdvcmtpbmcgb24gYW5vdGhlciBicmFuY2ggZml4ZWQgYSBidWchIEl0Citjb3VsZCBhbHNvIGhhcHBlbiB0aGF0IEYgZml4ZWQgbW9yZSB0aGFuIG9uZSBidWcgb3IgdGhhdCBpdCBpcyBhCityZXZlcnQgb2Ygc29tZSBiaWcgZGV2ZWxvcG1lbnQgZWZmb3J0IHRoYXQgd2FzIG5vdCByZWFkeSB0byBiZQorcmVsZWFzZWQuCisKK0luIGZhY3QgZGV2ZWxvcG1lbnQgdGVhbXMgb2Z0ZW4gbWFpbnRhaW4gYm90aCBhIGRldmVsb3BtZW50IGJyYW5jaCBhbmQKK2EgbWFpbnRlbmFuY2UgYnJhbmNoLCBhbmQgaXQgd291bGQgYmUgcXVpdGUgZWFzeSBmb3IgdGhlbSBpZiAiZ2l0CitiaXNlY3QiIGp1c3Qgd29ya2VkIHdoZW4gdGhleSB3YW50IHRvIGJpc2VjdCBhIHJlZ3Jlc3Npb24gb24gdGhlCitkZXZlbG9wbWVudCBicmFuY2ggdGhhdCBpcyBub3Qgb24gdGhlIG1haW50ZW5hbmNlIGJyYW5jaC4gVGhleSBzaG91bGQKK2JlIGFibGUgdG8gc3RhcnQgYmlzZWN0aW5nIHVzaW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgZGV2IG1haW4KKy0tLS0tLS0tLS0tLS0KKworVG8gZW5hYmxlIHRoYXQgYWRkaXRpb25hbCBuaWNlIGZlYXR1cmUsIHdoZW4gYSBiaXNlY3Rpb24gaXMgc3RhcnRlZAorYW5kIHdoZW4gc29tZSBnb29kIGNvbW1pdHMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlIGJhZCBjb21taXQsIHdlCitmaXJzdCBjb21wdXRlIHRoZSBtZXJnZSBiYXNlcyBiZXR3ZWVuIHRoZSBiYWQgYW5kIHRoZSBnb29kIGNvbW1pdHMgYW5kCit3ZSBjaG9zZSB0aGVzZSBtZXJnZSBiYXNlcyBhcyB0aGUgZmlyc3QgY29tbWl0cyB0aGF0IHdpbGwgYmUgY2hlY2tlZAorb3V0IGFuZCB0ZXN0ZWQuCisKK0lmIGl0IGhhcHBlbnMgdGhhdCBvbmUgbWVyZ2UgYmFzZSBpcyBiYWQsIHRoZW4gdGhlIGJpc2VjdGlvbiBwcm9jZXNzCitpcyBzdG9wcGVkIHdpdGggYSBtZXNzYWdlIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0KK1RoZSBtZXJnZSBiYXNlIEJCQkJCQiBpcyBiYWQuCitUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiBCQkJCQkIgYW5kIFtHR0dHR0csLi4uXS4KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgQkJCQkJCIGlzIHRoZSBzaGExIGhhc2ggb2YgdGhlIGJhZCBtZXJnZSBiYXNlIGFuZCBbR0dHR0dHLC4uLl0KK2lzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHNoYTEgb2YgdGhlIGdvb2QgY29tbWl0cy4KKworSWYgc29tZSBvZiB0aGUgbWVyZ2UgYmFzZXMgYXJlIHNraXBwZWQsIHRoZW4gdGhlIGJpc2VjdGlvbiBwcm9jZXNzCitjb250aW51ZXMsIGJ1dCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgaXMgcHJpbnRlZCBmb3IgZWFjaCBza2lwcGVkIG1lcmdlCitiYXNlOgorCistLS0tLS0tLS0tLS0tCitXYXJuaW5nOiB0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuIEJCQkJCQiBhbmQgW0dHR0dHRywuLi5dIG11c3QgYmUgc2tpcHBlZC4KK1NvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCBiYWQgY29tbWl0IGlzIGJldHdlZW4gTU1NTU1NIGFuZCBCQkJCQkIuCitXZSBjb250aW51ZSBhbnl3YXkuCistLS0tLS0tLS0tLS0tCisKK3doZXJlIEJCQkJCQiBpcyB0aGUgc2hhMSBoYXNoIG9mIHRoZSBiYWQgY29tbWl0LCBNTU1NTU0gaXMgdGhlIHNoYTEKK2hhc2ggb2YgdGhlIG1lcmdlIGJhc2UgdGhhdCBpcyBza2lwcGVkIGFuZCBbR0dHR0dHLC4uLl0gIGlzIGEgY29tbWEKK3NlcGFyYXRlZCBsaXN0IG9mIHRoZSBzaGExIG9mIHRoZSBnb29kIGNvbW1pdHMuCisKK1NvIGlmIHRoZXJlIGlzIG5vIGJhZCBtZXJnZSBiYXNlLCB0aGUgYmlzZWN0aW9uIHByb2Nlc3MgY29udGludWVzIGFzCit1c3VhbCBhZnRlciB0aGlzIHN0ZXAuCisKK0Jlc3QgYmlzZWN0aW5nIHByYWN0aWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzaW5nIHRlc3Qgc3VpdGVzIGFuZCBnaXQgYmlzZWN0IHRvZ2V0aGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB5b3UgYm90aCBoYXZlIGEgdGVzdCBzdWl0ZSBhbmQgdXNlIGdpdCBiaXNlY3QsIHRoZW4gaXQgYmVjb21lcyBsZXNzCitpbXBvcnRhbnQgdG8gY2hlY2sgdGhhdCBhbGwgdGVzdHMgcGFzcyBhZnRlciBlYWNoIGNvbW1pdC4gVGhvdWdoIG9mCitjb3Vyc2UgaXQgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gaGF2ZSBzb21lIGNoZWNrcyB0byBhdm9pZAorYnJlYWtpbmcgdG9vIG1hbnkgdGhpbmdzIGJlY2F1c2UgaXQgY291bGQgbWFrZSBiaXNlY3Rpbmcgb3RoZXIgYnVncworbW9yZSBkaWZmaWN1bHQuCisKK1lvdSBjYW4gZm9jdXMgeW91ciBlZmZvcnRzIHRvIGNoZWNrIGF0IGEgZmV3IHBvaW50cyAoZm9yIGV4YW1wbGUgcmMKK2FuZCBiZXRhIHJlbGVhc2VzKSB0aGF0IGFsbCB0aGUgVCB0ZXN0IGNhc2VzIHBhc3MgZm9yIGFsbCB0aGUgTgorY29uZmlndXJhdGlvbnMuIEFuZCB3aGVuIHNvbWUgdGVzdHMgZG9uJ3QgcGFzcyB5b3UgY2FuIHVzZSAiZ2l0CitiaXNlY3QiIChvciBiZXR0ZXIgImdpdCBiaXNlY3QgcnVuIikuIFNvIHlvdSBzaG91bGQgcGVyZm9ybSByb3VnaGx5OgorCistLS0tLS0tLS0tLS0tCitjICogTiAqIFQgKyBiICogTSAqIGxvZzIoTSkgdGVzdHMKKy0tLS0tLS0tLS0tLS0KKword2hlcmUgYyBpcyB0aGUgbnVtYmVyIG9mIHJvdW5kcyBvZiB0ZXN0IChzbyBhIHNtYWxsIGNvbnN0YW50KSBhbmQgYiBpcwordGhlIHJhdGlvIG9mIGJ1ZyBwZXIgY29tbWl0IChob3BlZnVsbHkgYSBzbWFsbCBjb25zdGFudCB0b28pLgorCitTbyBvZiBjb3Vyc2UgaXQncyBtdWNoIGJldHRlciBhcyBpdCdzIE8oTiAqIFQpIHZzIE8oTiAqIFQgKiBNKSBpZgoreW91IHdvdWxkIHRlc3QgZXZlcnl0aGluZyBhZnRlciBlYWNoIGNvbW1pdC4KKworVGhpcyBtZWFucyB0aGF0IHRlc3Qgc3VpdGVzIGFyZSBnb29kIHRvIHByZXZlbnQgc29tZSBidWdzIGZyb20gYmVpbmcKK2NvbW1pdHRlZCBhbmQgdGhleSBhcmUgYWxzbyBxdWl0ZSBnb29kIHRvIHRlbGwgeW91IHRoYXQgeW91IGhhdmUgc29tZQorYnVncy4gQnV0IHRoZXkgYXJlIG5vdCBzbyBnb29kIHRvIHRlbGwgeW91IHdoZXJlIHNvbWUgYnVncyBoYXZlIGJlZW4KK2ludHJvZHVjZWQuIFRvIHRlbGwgeW91IHRoYXQgZWZmaWNpZW50bHksIGdpdCBiaXNlY3QgaXMgbmVlZGVkLgorCitUaGUgb3RoZXIgbmljZSB0aGluZyB3aXRoIHRlc3Qgc3VpdGVzLCBpcyB0aGF0IHdoZW4geW91IGhhdmUgb25lLCB5b3UKK2FscmVhZHkga25vdyBob3cgdG8gdGVzdCBmb3IgYmFkIGJlaGF2aW9yLiBTbyB5b3UgY2FuIHVzZSB0aGlzCitrbm93bGVkZ2UgdG8gY3JlYXRlIGEgbmV3IHRlc3QgY2FzZSBmb3IgImdpdCBiaXNlY3QiIHdoZW4gaXQgYXBwZWFycwordGhhdCB0aGVyZSBpcyBhIHJlZ3Jlc3Npb24uIFNvIGl0IHdpbGwgYmUgZWFzaWVyIHRvIGJpc2VjdCB0aGUgYnVnIGFuZAorZml4IGl0LiBBbmQgdGhlbiB5b3UgY2FuIGFkZCB0aGUgdGVzdCBjYXNlIHlvdSBqdXN0IGNyZWF0ZWQgdG8geW91cgordGVzdCBzdWl0ZS4KKworU28gaWYgeW91IGtub3cgaG93IHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGFuZCBob3cgdG8gYmlzZWN0LCB5b3Ugd2lsbCBiZQorc3ViamVjdCB0byBhIHZpcnR1b3VzIGNpcmNsZToKKworbW9yZSB0ZXN0cyA9PiBlYXNpZXIgdG8gY3JlYXRlIHRlc3RzID0+IGVhc2llciB0byBiaXNlY3QgPT4gbW9yZSB0ZXN0cworCitTbyB0ZXN0IHN1aXRlcyBhbmQgImdpdCBiaXNlY3QiIGFyZSBjb21wbGVtZW50YXJ5IHRvb2xzIHRoYXQgYXJlIHZlcnkKK3Bvd2VyZnVsIGFuZCBlZmZpY2llbnQgd2hlbiB1c2VkIHRvZ2V0aGVyLgorCitCaXNlY3RpbmcgYnVpbGQgZmFpbHVyZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIHZlcnkgZWFzaWx5IGF1dG9tYXRpY2FsbHkgYmlzZWN0IGJyb2tlbiBidWlsZHMgdXNpbmcgc29tZXRoaW5nCitsaWtlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgQkFEIEdPT0QKKyQgZ2l0IGJpc2VjdCBydW4gbWFrZQorLS0tLS0tLS0tLS0tLQorCitQYXNzaW5nIHNoIC1jICJzb21lIGNvbW1hbmRzIiB0byAiZ2l0IGJpc2VjdCBydW4iCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcnVuIHNoIC1jICJtYWtlIHx8IGV4aXQgMTI1OyAuL215X2FwcCB8IGdyZXAgJ2dvb2Qgb3V0cHV0JyIKKy0tLS0tLS0tLS0tLS0KKworT24gdGhlIG90aGVyIGhhbmQgaWYgeW91IGRvIHRoaXMgb2Z0ZW4sIHRoZW4gaXQgY2FuIGJlIHdvcnRoIGhhdmluZworc2NyaXB0cyB0byBhdm9pZCB0b28gbXVjaCB0eXBpbmcuCisKK0ZpbmRpbmcgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSGVyZSBpcyBhbiBleGFtcGxlIHNjcmlwdCB0aGF0IGNvbWVzIHNsaWdodGx5IG1vZGlmaWVkIGZyb20gYSByZWFsCit3b3JsZCBzY3JpcHQgdXNlZCBieSBKdW5pbyBIYW1hbm8gPDw0Pj4uCisKK1RoaXMgc2NyaXB0IGNhbiBiZSBwYXNzZWQgdG8gImdpdCBiaXNlY3QgcnVuIiB0byBmaW5kIHRoZSBjb21taXQgdGhhdAoraW50cm9kdWNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb246CisKKy0tLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorCisjIEJ1aWxkIGVycm9ycyBhcmUgbm90IHdoYXQgSSBhbSBpbnRlcmVzdGVkIGluLgorbWFrZSBteV9hcHAgfHwgZXhpdCAyNTUKKworIyBXZSBhcmUgY2hlY2tpbmcgaWYgaXQgc3RvcHMgaW4gYSByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLCBzbworIyBsZXQgaXQgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLi4uCisKKy4vbXlfYXBwID5sb2cgMj4mMSAmCisKKyMgLi4uIGFuZCBncmFiIGl0cyBwcm9jZXNzIElELgorcGlkPSQhCisKKyMgLi4uIGFuZCB0aGVuIHdhaXQgZm9yIHN1ZmZpY2llbnRseSBsb25nLgorc2xlZXAgJE5PUk1BTF9USU1FCisKKyMgLi4uIGFuZCB0aGVuIHNlZSBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCB0aGVyZS4KK2lmIGtpbGwgLTAgJHBpZAordGhlbgorCSMgSXQgaXMgc3RpbGwgcnVubmluZyAtLSB0aGF0IGlzIGJhZC4KKwlraWxsICRwaWQ7IHNsZWVwIDE7IGtpbGwgJHBpZDsKKwlleGl0IDEKK2Vsc2UKKwkjIEl0IGhhcyBhbHJlYWR5IGZpbmlzaGVkICh0aGUgJHBpZCBwcm9jZXNzIHdhcyBubyBtb3JlKSwKKwkjIGFuZCB3ZSBhcmUgaGFwcHkuCisJZXhpdCAwCitmaQorLS0tLS0tLS0tLS0tLQorCitGb2xsb3dpbmcgZ2VuZXJhbCBiZXN0IHByYWN0aWNlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSXQgaXMgb2J2aW91c2x5IGEgZ29vZCBpZGVhIG5vdCB0byBoYXZlIGNvbW1pdHMgd2l0aCBjaGFuZ2VzIHRoYXQKK2tub3dpbmdseSBicmVhayB0aGluZ3MsIGV2ZW4gaWYgc29tZSBvdGhlciBjb21taXRzIGxhdGVyIGZpeCB0aGUKK2JyZWFrYWdlLgorCitJdCBpcyBhbHNvIGEgZ29vZCBpZGVhIHdoZW4gdXNpbmcgYW55IFZDUyB0byBoYXZlIG9ubHkgb25lIHNtYWxsCitsb2dpY2FsIGNoYW5nZSBpbiBlYWNoIGNvbW1pdC4KKworVGhlIHNtYWxsZXIgdGhlIGNoYW5nZXMgaW4geW91ciBjb21taXQsIHRoZSBtb3N0IGVmZmVjdGl2ZSAiZ2l0CitiaXNlY3QiIHdpbGwgYmUuIEFuZCB5b3Ugd2lsbCBwcm9iYWJseSBuZWVkICJnaXQgYmlzZWN0IiBsZXNzIGluIHRoZQorZmlyc3QgcGxhY2UsIGFzIHNtYWxsIGNoYW5nZXMgYXJlIGVhc2llciB0byByZXZpZXcgZXZlbiBpZiB0aGV5IGFyZQorb25seSByZXZpZXdlZCBieSB0aGUgY29tbWl0dGVyLgorCitBbm90aGVyIGdvb2QgaWRlYSBpcyB0byBoYXZlIGdvb2QgY29tbWl0IG1lc3NhZ2VzLiBUaGV5IGNhbiBiZSB2ZXJ5CitoZWxwZnVsIHRvIHVuZGVyc3RhbmQgd2h5IHNvbWUgY2hhbmdlcyB3ZXJlIG1hZGUuCisKK1RoZXNlIGdlbmVyYWwgYmVzdCBwcmFjdGljZXMgYXJlIHZlcnkgaGVscGZ1bCBpZiB5b3UgYmlzZWN0IG9mdGVuLgorCitBdm9pZGluZyBidWcgcHJvbmUgbWVyZ2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZpcnN0IG1lcmdlcyBieSB0aGVtc2VsdmVzIGNhbiBpbnRyb2R1Y2Ugc29tZSByZWdyZXNzaW9ucyBldmVuIHdoZW4KK3RoZSBtZXJnZSBuZWVkcyBubyBzb3VyY2UgY29kZSBjb25mbGljdCByZXNvbHV0aW9uLiBUaGlzIGlzIGJlY2F1c2UgYQorc2VtYW50aWMgY2hhbmdlIGNhbiBoYXBwZW4gaW4gb25lIGJyYW5jaCB3aGlsZSB0aGUgb3RoZXIgYnJhbmNoIGlzIG5vdAorYXdhcmUgb2YgaXQuCisKK0ZvciBleGFtcGxlIG9uZSBicmFuY2ggY2FuIGNoYW5nZSB0aGUgc2VtYW50aWMgb2YgYSBmdW5jdGlvbiB3aGlsZSB0aGUKK290aGVyIGJyYW5jaCBhZGQgbW9yZSBjYWxscyB0byB0aGUgc2FtZSBmdW5jdGlvbi4KKworVGhpcyBpcyBtYWRlIG11Y2ggd29yc2UgaWYgbWFueSBmaWxlcyBoYXZlIHRvIGJlIGZpeGVkIHRvIHJlc29sdmUKK2NvbmZsaWN0cy4gVGhhdCdzIHdoeSBzdWNoIG1lcmdlcyBhcmUgY2FsbGVkICJldmlsIG1lcmdlcyIuIFRoZXkgY2FuCittYWtlIHJlZ3Jlc3Npb25zIHZlcnkgZGlmZmljdWx0IHRvIHRyYWNrIGRvd24uIEl0IGNhbiBldmVuIGJlCittaXNsZWFkaW5nIHRvIGtub3cgdGhlIGZpcnN0IGJhZCBjb21taXQgaWYgaXQgaGFwcGVucyB0byBiZSBzdWNoIGEKK21lcmdlLCBiZWNhdXNlIHBlb3BsZSBtaWdodCB0aGluayB0aGF0IHRoZSBidWcgY29tZXMgZnJvbSBiYWQgY29uZmxpY3QKK3Jlc29sdXRpb24gd2hlbiBpdCBjb21lcyBmcm9tIGEgc2VtYW50aWMgY2hhbmdlIGluIG9uZSBicmFuY2guCisKK0FueXdheSAiZ2l0IHJlYmFzZSIgY2FuIGJlIHVzZWQgdG8gbGluZWFyaXplIGhpc3RvcnkuIFRoaXMgY2FuIGJlIHVzZWQKK2VpdGhlciB0byBhdm9pZCBtZXJnaW5nIGluIHRoZSBmaXJzdCBwbGFjZS4gT3IgaXQgY2FuIGJlIHVzZWQgdG8KK2Jpc2VjdCBvbiBhIGxpbmVhciBoaXN0b3J5IGluc3RlYWQgb2YgdGhlIG5vbiBsaW5lYXIgb25lLCBhcyB0aGlzCitzaG91bGQgZ2l2ZSBtb3JlIGluZm9ybWF0aW9uIGluIGNhc2Ugb2YgYSBzZW1hbnRpYyBjaGFuZ2UgaW4gb25lCiticmFuY2guCisKK01lcmdlcyBjYW4gYmUgYWxzbyBtYWRlIHNpbXBsZXIgYnkgdXNpbmcgc21hbGxlciBicmFuY2hlcyBvciBieSB1c2luZworbWFueSB0b3BpYyBicmFuY2hlcyBpbnN0ZWFkIG9mIG9ubHkgbG9uZyB2ZXJzaW9uIHJlbGF0ZWQgYnJhbmNoZXMuCisKK0FuZCB0ZXN0aW5nIGNhbiBiZSBkb25lIG1vcmUgb2Z0ZW4gaW4gc3BlY2lhbCBpbnRlZ3JhdGlvbiBicmFuY2hlcworbGlrZSBsaW51eC1uZXh0IGZvciB0aGUgbGludXgga2VybmVsLgorCitBZGFwdGluZyB5b3VyIHdvcmstZmxvdworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQSBzcGVjaWFsIHdvcmstZmxvdyB0byBwcm9jZXNzIHJlZ3Jlc3Npb25zIGNhbiBnaXZlIGdyZWF0IHJlc3VsdHMuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHdvcmstZmxvdyB1c2VkIGJ5IEFuZHJlYXMgRXJpY3Nzb246CisKKyogd3JpdGUsIGluIHRoZSB0ZXN0IHN1aXRlLCBhIHRlc3Qgc2NyaXB0IHRoYXQgZXhwb3NlcyB0aGUgcmVncmVzc2lvbgorKiB1c2UgImdpdCBiaXNlY3QgcnVuIiB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGl0CisqIGZpeCB0aGUgYnVnIHRoYXQgaXMgb2Z0ZW4gbWFkZSBvYnZpb3VzIGJ5IHRoZSBwcmV2aW91cyBzdGVwCisqIGNvbW1pdCBib3RoIHRoZSBmaXggYW5kIHRoZSB0ZXN0IHNjcmlwdCAoYW5kIGlmIG5lZWRlZCBtb3JlIHRlc3RzKQorCitBbmQgaGVyZSBpcyB3aGF0IEFuZHJlYXMgc2FpZCBhYm91dCB0aGlzIHdvcmstZmxvdyA8PDU+PjoKKworX19fX19fX19fX19fXworVG8gZ2l2ZSBzb21lIGhhcmQgZmlndXJlcywgd2UgdXNlZCB0byBoYXZlIGFuIGF2ZXJhZ2UgcmVwb3J0LXRvLWZpeAorY3ljbGUgb2YgMTQyLjYgaG91cnMgKGFjY29yZGluZyB0byBvdXIgc29tZXdoYXQgd2VpcmQgYnVnLXRyYWNrZXIKK3doaWNoIGp1c3QgbWVhc3VyZXMgd2FsbC1jbG9jayB0aW1lKS4gU2luY2Ugd2UgbW92ZWQgdG8gZ2l0LCB3ZSd2ZQorbG93ZXJlZCB0aGF0IHRvIDE2LjIgaG91cnMuIFByaW1hcmlseSBiZWNhdXNlIHdlIGNhbiBzdGF5IG9uIHRvcCBvZgordGhlIGJ1ZyBmaXhpbmcgbm93LCBhbmQgYmVjYXVzZSBldmVyeW9uZSdzIGpvY2tleWluZyB0byBnZXQgdG8gZml4CitidWdzICh3ZSdyZSBxdWl0ZSBwcm91ZCBvZiBob3cgbGF6eSB3ZSBhcmUgdG8gbGV0IGdpdCBmaW5kIHRoZSBidWdzCitmb3IgdXMpLiBFYWNoIG5ldyByZWxlYXNlIHJlc3VsdHMgaW4gfjQwJSBmZXdlciBidWdzIChhbG1vc3QgY2VydGFpbmx5CitkdWUgdG8gaG93IHdlIG5vdyBmZWVsIGFib3V0IHdyaXRpbmcgdGVzdHMpLgorX19fX19fX19fX19fXworCitDbGVhcmx5IHRoaXMgd29yay1mbG93IHVzZXMgdGhlIHZpcnR1b3VzIGNpcmNsZSBiZXR3ZWVuIHRlc3Qgc3VpdGVzCithbmQgImdpdCBiaXNlY3QiLiBJbiBmYWN0IGl0IG1ha2VzIGl0IHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgdG8gZGVhbAord2l0aCByZWdyZXNzaW9uLgorCitJbiBvdGhlciBtZXNzYWdlcyBBbmRyZWFzIHNheXMgdGhhdCB0aGV5IGFsc28gdXNlIHRoZSAiYmVzdCBwcmFjdGljZXMiCitkZXNjcmliZWQgYWJvdmU6IHNtYWxsIGxvZ2ljYWwgY29tbWl0cywgdG9waWMgYnJhbmNoZXMsIG5vIGV2aWwKK21lcmdlLC4uLiBUaGVzZSBwcmFjdGljZXMgYWxsIGltcHJvdmUgdGhlIGJpc2VjdGFiaWxpdHkgb2YgdGhlIGNvbW1pdAorZ3JhcGgsIGJ5IG1ha2luZyBpdCBlYXNpZXIgYW5kIG1vcmUgdXNlZnVsIHRvIGJpc2VjdC4KKworU28gYSBnb29kIHdvcmstZmxvdyBzaG91bGQgYmUgZGVzaWduZWQgYXJvdW5kIHRoZSBhYm92ZSBwb2ludHMuIFRoYXQKK2lzIG1ha2luZyBiaXNlY3RpbmcgZWFzaWVyLCBtb3JlIHVzZWZ1bCBhbmQgc3RhbmRhcmQuCisKK0ludm9sdmluZyBRQSBwZW9wbGUgYW5kIGlmIHBvc3NpYmxlIGVuZCB1c2Vycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK09uZSBuaWNlIGFib3V0ICJnaXQgYmlzZWN0IiBpcyB0aGF0IGl0IGlzIG5vdCBvbmx5IGEgZGV2ZWxvcGVyCit0b29sLiBJdCBjYW4gZWZmZWN0aXZlbHkgYmUgdXNlZCBieSBRQSBwZW9wbGUgb3IgZXZlbiBlbmQgdXNlcnMgKGlmCit0aGV5IGhhdmUgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBvciBpZiB0aGV5IGNhbiBnZXQgYWNjZXNzIHRvIGFsbAordGhlIGJ1aWxkcykuCisKK1RoZXJlIHdhcyBhIGRpc2N1c3Npb24gYXQgb25lIHBvaW50IG9uIHRoZSBsaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0CitvZiB3aGV0aGVyIGl0IHdhcyBvayB0byBhbHdheXMgYXNrIGVuZCB1c2VyIHRvIGJpc2VjdCwgYW5kIHZlcnkgZ29vZAorcG9pbnRzIHdlcmUgbWFkZSB0byBzdXBwb3J0IHRoZSBwb2ludCBvZiB2aWV3IHRoYXQgaXQgaXMgb2suCisKK0ZvciBleGFtcGxlIERhdmlkIE1pbGxlciB3cm90ZSA8PDY+PjoKKworX19fX19fX19fX19fXworV2hhdCBwZW9wbGUgZG9uJ3QgZ2V0IGlzIHRoYXQgdGhpcyBpcyBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgImVuZCBub2RlCitwcmluY2lwbGUiIGFwcGxpZXMuIFdoZW4geW91IGhhdmUgbGltaXRlZCByZXNvdXJjZXMgKGhlcmU6IGRldmVsb3BlcnMpCit5b3UgZG9uJ3QgcHVzaCB0aGUgYnVsayBvZiB0aGUgYnVyZGVuIHVwb24gdGhlbS4gSW5zdGVhZCB5b3UgcHVzaAordGhpbmdzIG91dCB0byB0aGUgcmVzb3VyY2UgeW91IGhhdmUgYSBsb3Qgb2YsIHRoZSBlbmQgbm9kZXMgKGhlcmU6Cit1c2VycyksIHNvIHRoYXQgdGhlIHNpdHVhdGlvbiBhY3R1YWxseSBzY2FsZXMuCitfX19fX19fX19fX19fCisKK1RoaXMgbWVhbnMgdGhhdCBpdCBpcyBvZnRlbiAiY2hlYXBlciIgaWYgUUEgcGVvcGxlIG9yIGVuZCB1c2VycyBjYW4gZG8KK2l0LgorCitXaGF0IGlzIGludGVyZXN0aW5nIHRvbyBpcyB0aGF0IGVuZCB1c2VycyB0aGF0IGFyZSByZXBvcnRpbmcgYnVncyAob3IKK1FBIHBlb3BsZSB0aGF0IHJlcHJvZHVjZWQgYSBidWcpIGhhdmUgYWNjZXNzIHRvIHRoZSBlbnZpcm9ubWVudCB3aGVyZQordGhlIGJ1ZyBoYXBwZW5zLiBTbyB0aGV5IGNhbiBvZnRlbiBtb3JlIGVhc2lseSByZXByb2R1Y2UgYQorcmVncmVzc2lvbi4gQW5kIGlmIHRoZXkgY2FuIGJpc2VjdCwgdGhlbiBtb3JlIGluZm9ybWF0aW9uIHdpbGwgYmUKK2V4dHJhY3RlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCB3aGVyZSB0aGUgYnVnIGhhcHBlbnMsIHdoaWNoIG1lYW5zIHRoYXQKK2l0IHdpbGwgYmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIHRoZW4gZml4IHRoZSBidWcuCisKK0ZvciBvcGVuIHNvdXJjZSBwcm9qZWN0cyBpdCBjYW4gYmUgYSBnb29kIHdheSB0byBnZXQgbW9yZSB1c2VmdWwKK2NvbnRyaWJ1dGlvbnMgZnJvbSBlbmQgdXNlcnMsIGFuZCB0byBpbnRyb2R1Y2UgdGhlbSB0byBRQSBhbmQKK2RldmVsb3BtZW50IGFjdGl2aXRpZXMuCisKK1VzaW5nIGNvbXBsZXggc2NyaXB0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0luIHNvbWUgY2FzZXMgbGlrZSBmb3Iga2VybmVsIGRldmVsb3BtZW50IGl0IGNhbiBiZSB3b3J0aCBkZXZlbG9waW5nCitjb21wbGV4IHNjcmlwdHMgdG8gYmUgYWJsZSB0byBmdWxseSBhdXRvbWF0ZSBiaXNlY3RpbmcuCisKK0hlcmUgaXMgd2hhdCBJbmdvIE1vbG5hciBzYXlzIGFib3V0IHRoYXQgPDw3Pj46CisKK19fX19fX19fX19fX18KK2kgaGF2ZSBhIGZ1bGx5IGF1dG9tYXRlZCBib290dXAtaGFuZyBiaXNlY3Rpb24gc2NyaXB0LiBJdCBpcyBiYXNlZCBvbgorImdpdC1iaXNlY3QgcnVuIi4gSSBydW4gdGhlIHNjcmlwdCwgaXQgYnVpbGRzIGFuZCBib290cyBrZXJuZWxzIGZ1bGx5CithdXRvbWF0aWNhbGx5LCBhbmQgd2hlbiB0aGUgYm9vdHVwIGZhaWxzICh0aGUgc2NyaXB0IG5vdGljZXMgdGhhdCB2aWEKK3RoZSBzZXJpYWwgbG9nLCB3aGljaCBpdCBjb250aW51b3VzbHkgd2F0Y2hlcyAtIG9yIHZpYSBhIHRpbWVvdXQsIGlmCit0aGUgc3lzdGVtIGRvZXMgbm90IGNvbWUgdXAgd2l0aGluIDEwIG1pbnV0ZXMgaXQncyBhICJiYWQiIGtlcm5lbCksCit0aGUgc2NyaXB0IHJhaXNlcyBteSBhdHRlbnRpb24gdmlhIGEgYmVlcCBhbmQgaSBwb3dlciBjeWNsZSB0aGUgdGVzdAorYm94LiAoeWVhaCwgaSBzaG91bGQgbWFrZSB1c2Ugb2YgYSBtYW5hZ2VkIHBvd2VyIG91dGxldCB0byAxMDAlCithdXRvbWF0ZSBpdCkKK19fX19fX19fX19fX18KKworQ29tYmluaW5nIHRlc3Qgc3VpdGVzLCBnaXQgYmlzZWN0IGFuZCBvdGhlciBzeXN0ZW1zIHRvZ2V0aGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2UgaGF2ZSBzZWVuIHRoYXQgdGVzdCBzdWl0ZXMgYW4gZ2l0IGJpc2VjdCBhcmUgdmVyeSBwb3dlcmZ1bCB3aGVuCit1c2VkIHRvZ2V0aGVyLiBJdCBjYW4gYmUgZXZlbiBtb3JlIHBvd2VyZnVsIGlmIHlvdSBjYW4gY29tYmluZSB0aGVtCit3aXRoIG90aGVyIHN5c3RlbXMuCisKK0ZvciBleGFtcGxlIHNvbWUgdGVzdCBzdWl0ZXMgY291bGQgYmUgcnVuIGF1dG9tYXRpY2FsbHkgYXQgbmlnaHQgd2l0aAorc29tZSB1bnVzdWFsIChvciBldmVuIHJhbmRvbSkgY29uZmlndXJhdGlvbnMuIEFuZCBpZiBhIHJlZ3Jlc3Npb24gaXMKK2ZvdW5kIGJ5IGEgdGVzdCBzdWl0ZSwgdGhlbiAiZ2l0IGJpc2VjdCIgY2FuIGJlIGF1dG9tYXRpY2FsbHkKK2xhdW5jaGVkLCBhbmQgaXRzIHJlc3VsdCBjYW4gYmUgZW1haWxlZCB0byB0aGUgYXV0aG9yIG9mIHRoZSBmaXJzdCBiYWQKK2NvbW1pdCBmb3VuZCBieSAiZ2l0IGJpc2VjdCIsIGFuZCBwZXJoYXBzIG90aGVyIHBlb3BsZSB0b28uIEFuZCBhIG5ldworZW50cnkgaW4gdGhlIGJ1ZyB0cmFja2luZyBzeXN0ZW0gY291bGQgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHRvby4KKworCitUaGUgZnV0dXJlIG9mIGJpc2VjdGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworImdpdCByZXBsYWNlIgorfn5+fn5+fn5+fn5+fgorCitXZSBzYXcgZWFybGllciB0aGF0ICJnaXQgYmlzZWN0IHNraXAiIGlzIG5vdyB1c2luZyBhIFBSTkcgdG8gdHJ5IHRvCithdm9pZCBhcmVhcyBpbiB0aGUgY29tbWl0IGdyYXBoIHdoZXJlIGNvbW1pdHMgYXJlIHVudGVzdGFibGUuIFRoZQorcHJvYmxlbSBpcyB0aGF0IHNvbWV0aW1lcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCB3aWxsIGJlIGluIGFuCit1bnRlc3RhYmxlIGFyZWEuCisKK1RvIHNpbXBsaWZ5IHRoZSBkaXNjdXNzaW9uIHdlIHdpbGwgc3VwcG9zZSB0aGF0IHRoZSB1bnRlc3RhYmxlIGFyZWEgaXMKK2Egc2ltcGxlIHN0cmluZyBvZiBjb21taXRzIGFuZCB0aGF0IGl0IHdhcyBjcmVhdGVkIGJ5IGEgYnJlYWthZ2UKK2ludHJvZHVjZWQgYnkgb25lIGNvbW1pdCAobGV0J3MgY2FsbCBpdCBCQkMgZm9yIGJpc2VjdCBicmVha2luZworY29tbWl0KSBhbmQgbGF0ZXIgZml4ZWQgYnkgYW5vdGhlciBvbmUgKGxldCdzIGNhbGwgaXQgQkZDIGZvciBiaXNlY3QKK2ZpeGluZyBjb21taXQpLgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorLi4uLVktQkJDLVgxLVgyLVgzLVg0LVg1LVg2LUJGQy1aLS4uLgorLS0tLS0tLS0tLS0tLQorCit3aGVyZSB3ZSBrbm93IHRoYXQgWSBpcyBnb29kIGFuZCBCRkMgaXMgYmFkLCBhbmQgd2hlcmUgQkJDIGFuZCBYMSB0bworWDYgYXJlIHVudGVzdGFibGUuCisKK0luIHRoaXMgY2FzZSBpZiB5b3UgYXJlIGJpc2VjdGluZyBtYW51YWxseSwgd2hhdCB5b3UgY2FuIGRvIGlzIGNyZWF0ZQorYSBzcGVjaWFsIGJyYW5jaCB0aGF0IHN0YXJ0cyBqdXN0IGJlZm9yZSB0aGUgQkJDLiBUaGUgZmlyc3QgY29tbWl0IGluCit0aGlzIGJyYW5jaCBzaG91bGQgYmUgdGhlIEJCQyB3aXRoIHRoZSBCRkMgc3F1YXNoZWQgaW50byBpdC4gQW5kIHRoZQorb3RoZXIgY29tbWl0cyBpbiB0aGUgYnJhbmNoIHNob3VsZCBiZSB0aGUgY29tbWl0cyBiZXR3ZWVuIEJCQyBhbmQgQkZDCityZWJhc2VkIG9uIHRoZSBmaXJzdCBjb21taXQgb2YgdGhlIGJyYW5jaCBhbmQgdGhlbiB0aGUgY29tbWl0IGFmdGVyCitCRkMgYWxzbyByZWJhc2VkIG9uLgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorICAgICAgKEJCQytCRkMpLVgxJy1YMictWDMnLVg0Jy1YNSctWDYnLVonCisgICAgIC8KKy4uLi1ZLUJCQy1YMS1YMi1YMy1YNC1YNS1YNi1CRkMtWi0uLi4KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgY29tbWl0cyBxdW90ZWQgd2l0aCAnIGhhdmUgYmVlbiByZWJhc2VkLgorCitZb3UgY2FuIGVhc2lseSBjcmVhdGUgc3VjaCBhIGJyYW5jaCB3aXRoIEdpdCB1c2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuCisKK0ZvciBleGFtcGxlIHVzaW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCByZWJhc2UgLWkgWSBaCistLS0tLS0tLS0tLS0tCisKK2FuZCB0aGVuIG1vdmluZyBCRkMgYWZ0ZXIgQkJDIGFuZCBzcXVhc2hpbmcgaXQuCisKK0FmdGVyIHRoYXQgeW91IGNhbiBzdGFydCBiaXNlY3RpbmcgYXMgdXN1YWwgaW4gdGhlIG5ldyBicmFuY2ggYW5kIHlvdQorc2hvdWxkIGV2ZW50dWFsbHkgZmluZCB0aGUgZmlyc3QgYmFkIGNvbW1pdC4KKworRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBaJyBZCistLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBhcmUgdXNpbmcgImdpdCBiaXNlY3QgcnVuIiwgeW91IGNhbiB1c2UgdGhlIHNhbWUgbWFudWFsIGZpeCB1cAorYXMgYWJvdmUsIGFuZCB0aGVuIHN0YXJ0IGFub3RoZXIgImdpdCBiaXNlY3QgcnVuIiBpbiB0aGUgc3BlY2lhbAorYnJhbmNoLiBPciBhcyB0aGUgImdpdCBiaXNlY3QiIG1hbiBwYWdlIHNheXMsIHRoZSBzY3JpcHQgcGFzc2VkIHRvCisiZ2l0IGJpc2VjdCBydW4iIGNhbiBhcHBseSBhIHBhdGNoIGJlZm9yZSBpdCBjb21waWxlcyBhbmQgdGVzdCB0aGUKK3NvZnR3YXJlIDw8OD4+LiBUaGUgcGF0Y2ggc2hvdWxkIHR1cm4gYSBjdXJyZW50IHVudGVzdGFibGUgY29tbWl0cworaW50byBhIHRlc3RhYmxlIG9uZS4gU28gdGhlIHRlc3Rpbmcgd2lsbCByZXN1bHQgaW4gImdvb2QiIG9yICJiYWQiIGFuZAorImdpdCBiaXNlY3QiIHdpbGwgYmUgYWJsZSB0byBmaW5kIHRoZSBmaXJzdCBiYWQgY29tbWl0LiBBbmQgdGhlIHNjcmlwdAorc2hvdWxkIG5vdCBmb3JnZXQgdG8gcmVtb3ZlIHRoZSBwYXRjaCBvbmNlIHRoZSB0ZXN0aW5nIGlzIGRvbmUgYmVmb3JlCitleGl0aW5nIGZyb20gdGhlIHNjcmlwdC4KKworKE5vdGUgdGhhdCBpbnN0ZWFkIG9mIGEgcGF0Y2ggeW91IGNhbiB1c2UgImdpdCBjaGVycnktcGljayBCRkMiIHRvCithcHBseSB0aGUgZml4LCBhbmQgaW4gdGhpcyBjYXNlIHlvdSBzaG91bGQgdXNlICJnaXQgcmVzZXQgLS1oYXJkCitIRUFEXiIgdG8gcmV2ZXJ0IHRoZSBjaGVycnktcGljayBhZnRlciB0ZXN0aW5nIGFuZCBiZWZvcmUgcmV0dXJuaW5nCitmcm9tIHRoZSBzY3JpcHQuKQorCitCdXQgdGhlIGFib3ZlIHdheXMgdG8gd29yayBhcm91bmQgdW50ZXN0YWJsZSBhcmVhcyBhcmUgYSBsaXR0bGUgYml0CitjbHVua3kuIFVzaW5nIHNwZWNpYWwgYnJhbmNoZXMgaXMgbmljZSBiZWNhdXNlIHRoZXNlIGJyYW5jaGVzIGNhbiBiZQorc2hhcmVkIGJ5IGRldmVsb3BlcnMgbGlrZSB1c3VhbCBicmFuY2hlcywgYnV0IHRoZSByaXNrIGlzIHRoYXQgcGVvcGxlCit3aWxsIGdldCBtYW55IHN1Y2ggYnJhbmNoZXMuIEFuZCBpdCBkaXNydXB0cyB0aGUgbm9ybWFsICJnaXQgYmlzZWN0Igord29yay1mbG93LiBTbywgaWYgeW91IHdhbnQgdG8gdXNlICJnaXQgYmlzZWN0IHJ1biIgY29tcGxldGVseQorYXV0b21hdGljYWxseSwgeW91IGhhdmUgdG8gYWRkIHNwZWNpYWwgY29kZSBpbiB5b3VyIHNjcmlwdCB0byByZXN0YXJ0CitiaXNlY3Rpb24gaW4gdGhlIHNwZWNpYWwgYnJhbmNoZXMuCisKK0FueXdheSBvbmUgY2FuIG5vdGljZSBpbiB0aGUgYWJvdmUgc3BlY2lhbCBicmFuY2ggZXhhbXBsZSB0aGF0IHRoZSBaJworYW5kIFogY29tbWl0cyBzaG91bGQgcG9pbnQgdG8gdGhlIHNhbWUgc291cmNlIGNvZGUgc3RhdGUgKHRoZSBzYW1lCisidHJlZSIgaW4gZ2l0IHBhcmxhbmNlKS4gVGhhdCdzIGJlY2F1c2UgWicgcmVzdWx0IGZyb20gYXBwbHlpbmcgdGhlCitzYW1lIGNoYW5nZXMgYXMgWiBqdXN0IGluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG9yZGVyLgorCitTbyBpZiB3ZSBjb3VsZCBqdXN0ICJyZXBsYWNlIiBaIGJ5IFonIHdoZW4gd2UgYmlzZWN0LCB0aGVuIHdlIHdvdWxkCitub3QgbmVlZCB0byBhZGQgYW55dGhpbmcgdG8gYSBzY3JpcHQuIEl0IHdvdWxkIGp1c3Qgd29yayBmb3IgYW55b25lIGluCit0aGUgcHJvamVjdCBzaGFyaW5nIHRoZSBzcGVjaWFsIGJyYW5jaGVzIGFuZCB0aGUgcmVwbGFjZW1lbnRzLgorCitXaXRoIHRoZSBleGFtcGxlIGFib3ZlIHRoYXQgd291bGQgZ2l2ZToKKworLS0tLS0tLS0tLS0tLQorICAgICAgKEJCQytCRkMpLVgxJy1YMictWDMnLVg0Jy1YNSctWDYnLVonLS4uLgorICAgICAvCisuLi4tWS1CQkMtWDEtWDItWDMtWDQtWDUtWDYtQkZDLVoKKy0tLS0tLS0tLS0tLS0KKworVGhhdCdzIHdoeSB0aGUgImdpdCByZXBsYWNlIiBjb21tYW5kIHdhcyBjcmVhdGVkLiBUZWNobmljYWxseSBpdAorc3RvcmVzIHJlcGxhY2VtZW50cyAicmVmcyIgaW4gdGhlICJyZWZzL3JlcGxhY2UvIiBoaWVyYXJjaHkuIFRoZXNlCisicmVmcyIgYXJlIGxpa2UgYnJhbmNoZXMgKHRoYXQgYXJlIHN0b3JlZCBpbiAicmVmcy9oZWFkcy8iKSBvciB0YWdzCisodGhhdCBhcmUgc3RvcmVkIGluICJyZWZzL3RhZ3MiKSwgYW5kIHRoYXQgbWVhbnMgdGhhdCB0aGV5IGNhbgorYXV0b21hdGljYWxseSBiZSBzaGFyZWQgbGlrZSBicmFuY2hlcyBvciB0YWdzIGFtb25nIGRldmVsb3BlcnMuCisKKyJnaXQgcmVwbGFjZSIgaXMgYSB2ZXJ5IHBvd2VyZnVsIG1lY2hhbmlzbS4gSXQgY2FuIGJlIHVzZWQgdG8gZml4Citjb21taXRzIGluIGFscmVhZHkgcmVsZWFzZWQgaGlzdG9yeSwgZm9yIGV4YW1wbGUgdG8gY2hhbmdlIHRoZSBjb21taXQKK21lc3NhZ2Ugb3IgdGhlIGF1dGhvci4gQW5kIGl0IGNhbiBhbHNvIGJlIHVzZWQgaW5zdGVhZCBvZiBnaXQgImdyYWZ0cyIKK3RvIGxpbmsgYSByZXBvc2l0b3J5IHdpdGggYW5vdGhlciBvbGQgcmVwb3NpdG9yeS4KKworSW4gZmFjdCBpdCdzIHRoaXMgbGFzdCBmZWF0dXJlIHRoYXQgInNvbGQiIGl0IHRvIHRoZSBnaXQgY29tbXVuaXR5LCBzbworaXQgaXMgbm93IGluIHRoZSAibWFzdGVyIiBicmFuY2ggb2YgZ2l0J3MgZ2l0IHJlcG9zaXRvcnkgYW5kIGl0IHNob3VsZAorYmUgcmVsZWFzZWQgaW4gZ2l0IDEuNi41IGluIE9jdG9iZXIgb3IgTm92ZW1iZXIgMjAwOS4KKworT25lIHByb2JsZW0gd2l0aCAiZ2l0IHJlcGxhY2UiIGlzIHRoYXQgY3VycmVudGx5IGl0IHN0b3JlcyBhbGwgdGhlCityZXBsYWNlbWVudHMgcmVmcyBpbiAicmVmcy9yZXBsYWNlLyIsIGJ1dCBpdCB3b3VsZCBiZSBwZXJoYXBzIGJldHRlcgoraWYgdGhlIHJlcGxhY2VtZW50IHJlZnMgdGhhdCBhcmUgdXNlZnVsIG9ubHkgZm9yIGJpc2VjdGluZyB3b3VsZCBiZSBpbgorInJlZnMvcmVwbGFjZS9iaXNlY3QvIi4gVGhpcyB3YXkgdGhlIHJlcGxhY2VtZW50IHJlZnMgY291bGQgYmUgdXNlZAorb25seSBmb3IgYmlzZWN0aW5nLCB3aGlsZSBvdGhlciByZWZzIGRpcmVjdGx5IGluICJyZWZzL3JlcGxhY2UvIiB3b3VsZAorYmUgdXNlZCBuZWFybHkgYWxsIHRoZSB0aW1lLgorCitCaXNlY3Rpbmcgc3BvcmFkaWMgYnVncworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQW5vdGhlciBwb3NzaWJsZSBpbXByb3ZlbWVudCB0byAiZ2l0IGJpc2VjdCIgd291bGQgYmUgdG8gb3B0aW9uYWxseQorYWRkIHNvbWUgcmVkdW5kYW5jeSB0byB0aGUgdGVzdHMgcGVyZm9ybWVkIHNvIHRoYXQgaXQgd291bGQgYmUgbW9yZQorcmVsaWFibGUgd2hlbiB0cmFja2luZyBzcG9yYWRpYyBidWdzLgorCitUaGlzIGhhcyBiZWVuIHJlcXVlc3RlZCBieSBzb21lIGtlcm5lbCBkZXZlbG9wZXJzIGJlY2F1c2Ugc29tZSBidWdzCitjYWxsZWQgc3BvcmFkaWMgYnVncyBkbyBub3QgYXBwZWFyIGluIGFsbCB0aGUga2VybmVsIGJ1aWxkcyBiZWNhdXNlCit0aGV5IGFyZSB2ZXJ5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorCitUaGUgaWRlYSBpcyB0aGF0IGV2ZXJ5IDMgdGVzdCBmb3IgZXhhbXBsZSwgImdpdCBiaXNlY3QiIGNvdWxkIGFzayB0aGUKK3VzZXIgdG8gdGVzdCBhIGNvbW1pdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZm91bmQgdG8gYmUgImdvb2QiIG9yCisiYmFkIiAoYmVjYXVzZSBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyBiZWVuCitmb3VuZCB0byBiZSAiZ29vZCIgb3IgImJhZCIgcmVzcGVjdGl2ZWx5KS4gSWYgaXQgaGFwcGVucyB0aGF0IGEgY29tbWl0CitoYXMgYmVlbiBwcmV2aW91c2x5IGluY29ycmVjdGx5IGNsYXNzaWZpZWQgdGhlbiB0aGUgYmlzZWN0aW9uIGNhbiBiZQorYWJvcnRlZCBlYXJseSwgaG9wZWZ1bGx5IGJlZm9yZSB0b28gbWFueSBtaXN0YWtlcyBoYXZlIGJlZW4gbWFkZS4gVGhlbgordGhlIHVzZXIgd2lsbCBoYXZlIHRvIGxvb2sgYXQgd2hhdCBoYXBwZW5lZCBhbmQgdGhlbiByZXN0YXJ0IHRoZQorYmlzZWN0aW9uIHVzaW5nIGEgZml4ZWQgYmlzZWN0IGxvZy4KKworVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3QgY2FsbGVkIEJCQ2hvcCBjcmVhdGVkIGJ5IEVhbGR3dWxmIFd1ZmZpbmdhCitvbiBHaXRodWIgdGhhdCBkb2VzIHNvbWV0aGluZyBsaWtlIHRoYXQgdXNpbmcgQmF5ZXNpYW4gU2VhcmNoIFRoZW9yeQorPDw5Pj46CisKK19fX19fX19fX19fX18KK0JCQ2hvcCBpcyBsaWtlICdnaXQgYmlzZWN0JyAob3IgZXF1aXZhbGVudCksIGJ1dCB3b3JrcyB3aGVuIHlvdXIgYnVnCitpcyBpbnRlcm1pdHRlbnQuIFRoYXQgaXMsIGl0IHdvcmtzIGluIHRoZSBwcmVzZW5jZSBvZiBmYWxzZSBuZWdhdGl2ZXMKKyh3aGVuIGEgdmVyc2lvbiBoYXBwZW5zIHRvIHdvcmsgdGhpcyB0aW1lIGV2ZW4gdGhvdWdoIGl0IGNvbnRhaW5zIHRoZQorYnVnKS4gSXQgYXNzdW1lcyB0aGF0IHRoZXJlIGFyZSBubyBmYWxzZSBwb3NpdGl2ZXMgKGluIHByaW5jaXBsZSwgdGhlCitzYW1lIGFwcHJvYWNoIHdvdWxkIHdvcmssIGJ1dCBhZGRpbmcgaXQgbWF5IGJlIG5vbi10cml2aWFsKS4KK19fX19fX19fX19fX18KKworQnV0IEJCQ2hvcCBpcyBpbmRlcGVuZGVudCBvZiBhbnkgVkNTIGFuZCBpdCB3b3VsZCBiZSBlYXNpZXIgZm9yIEdpdAordXNlcnMgdG8gaGF2ZSBzb21ldGhpbmcgaW50ZWdyYXRlZCBpbiBHaXQuCisKK0NvbmNsdXNpb24KKy0tLS0tLS0tLS0KKworV2UgaGF2ZSBzZWVuIHRoYXQgcmVncmVzc2lvbnMgYXJlIGFuIGltcG9ydGFudCBwcm9ibGVtLCBhbmQgdGhhdCAiZ2l0CitiaXNlY3QiIGhhcyBuaWNlIGZlYXR1cmVzIHRoYXQgY29tcGxlbWVudCB2ZXJ5IHdlbGwgcHJhY3RpY2VzIGFuZAorb3RoZXIgdG9vbHMsIGVzcGVjaWFsbHkgdGVzdCBzdWl0ZXMsIHRoYXQgYXJlIGdlbmVyYWxseSB1c2VkIHRvIGZpZ2h0CityZWdyZXNzaW9ucy4gQnV0IGl0IG1pZ2h0IGJlIG5lZWRlZCB0byBjaGFuZ2Ugc29tZSB3b3JrLWZsb3dzIGFuZAorKGJhZCkgaGFiaXRzIHRvIGdldCB0aGUgbW9zdCBvdXQgb2YgaXQuCisKK1NvbWUgaW1wcm92ZW1lbnRzIHRvIHRoZSBhbGdvcml0aG1zIGluc2lkZSAiZ2l0IGJpc2VjdCIgYXJlIHBvc3NpYmxlCithbmQgc29tZSBuZXcgZmVhdHVyZXMgY291bGQgaGVscCBpbiBzb21lIGNhc2VzLCBidXQgb3ZlcmFsbCAiZ2l0CitiaXNlY3QiIHdvcmtzIGFscmVhZHkgdmVyeSB3ZWxsLCBpcyB1c2VkIGEgbG90LCBhbmQgaXMgYWxyZWFkeSB2ZXJ5Cit1c2VmdWwuIFRvIGJhY2sgdXAgdGhhdCBsYXN0IGNsYWltLCBsZXQncyBnaXZlIHRoZSBmaW5hbCB3b3JkIHRvIEluZ28KK01vbG5hciB3aGVuIGhlIHdhcyBhc2tlZCBieSB0aGUgYXV0aG9yIGhvdyBtdWNoIHRpbWUgZG9lcyBoZSB0aGluaworImdpdCBiaXNlY3QiIHNhdmVzIGhpbSB3aGVuIGhlIHVzZXMgaXQ6CisKK19fX19fX19fX19fX18KK2EgX2xvdF8uCisKK0Fib3V0IHRlbiB5ZWFycyBhZ28gZGlkIGkgZG8gbXkgZmlyc3QgJ2Jpc2VjdGlvbicgb2YgYSBMaW51eCBwYXRjaAorcXVldWUuIFRoYXQgd2FzIHByaW9yIHRoZSBHaXQgKGFuZCBldmVuIHByaW9yIHRoZSBCaXRLZWVwZXIpIGRheXMuIEkKK2xpdGVyYWxseSBkYXlzIHNwZW50IHNvcnRpbmcgb3V0IHBhdGNoZXMsIGNyZWF0aW5nIHdoYXQgaW4gZXNzZW5jZQord2VyZSBzdGFuZGFsb25lIGNvbW1pdHMgdGhhdCBpIGd1ZXNzZWQgdG8gYmUgcmVsYXRlZCB0byB0aGF0IGJ1Zy4KKworSXQgd2FzIGEgdG9vbCBvZiBhYnNvbHV0ZSBsYXN0IHJlc29ydC4gSSdkIHJhdGhlciBzcGVuZCBkYXlzIGxvb2tpbmcKK2F0IHByaW50ayBvdXRwdXQgdGhhbiBkbyBhIG1hbnVhbCAncGF0Y2ggYmlzZWN0aW9uJy4KKworV2l0aCBHaXQgYmlzZWN0IGl0J3MgYSBicmVlemU6IGluIHRoZSBiZXN0IGNhc2UgaSBjYW4gZ2V0IGEgfjE1IHN0ZXAKK2tlcm5lbCBiaXNlY3Rpb24gZG9uZSBpbiAyMC0zMCBtaW51dGVzLCBpbiBhbiBhdXRvbWF0ZWQgd2F5LiBFdmVuIHdpdGgKK21hbnVhbCBoZWxwIG9yIHdoZW4gYmlzZWN0aW5nIG11bHRpcGxlLCBvdmVybGFwcGluZyBidWdzLCBpdCdzIHJhcmVseQorbW9yZSB0aGFuIGFuIGhvdXIuCisKK0luIGZhY3QgaXQncyBpbnZhbHVhYmxlIGJlY2F1c2UgdGhlcmUgYXJlIGJ1Z3MgaSB3b3VsZCBuZXZlciBldmVuCitfdHJ5XyB0byBkZWJ1ZyBpZiBpdCB3YXNuJ3QgZm9yIGdpdCBiaXNlY3QuIEluIHRoZSBwYXN0IHRoZXJlIHdlcmUgYnVnCitwYXR0ZXJucyB0aGF0IHdlcmUgaW1tZWRpYXRlbHkgaG9wZWxlc3MgZm9yIG1lIHRvIGRlYnVnIC0gYXQgYmVzdCBpCitjb3VsZCBzZW5kIHRoZSBjcmFzaC9idWcgc2lnbmF0dXJlIHRvIGxrbWwgYW5kIGhvcGUgdGhhdCBzb21lb25lIGVsc2UKK2NhbiB0aGluayBvZiBzb21ldGhpbmcuCisKK0FuZCBldmVuIGlmIGEgYmlzZWN0aW9uIGZhaWxzIHRvZGF5IGl0IHRlbGxzIHVzIHNvbWV0aGluZyB2YWx1YWJsZQorYWJvdXQgdGhlIGJ1ZzogdGhhdCBpdCdzIG5vbi1kZXRlcm1pbmlzdGljIC0gdGltaW5nIG9yIGtlcm5lbCBpbWFnZQorbGF5b3V0IGRlcGVuZGVudC4KKworU28gZ2l0IGJpc2VjdCBpcyB1bmNvbmRpdGlvbmFsIGdvb2RuZXNzIC0gYW5kIGZlZWwgZnJlZSB0byBxdW90ZSB0aGF0Cis7LSkKK19fX19fX19fX19fX18KKworQWNrbm93bGVkZ2VtZW50cworLS0tLS0tLS0tLS0tLS0tLQorCitNYW55IHRoYW5rcyB0byBKdW5pbyBIYW1hbm8gZm9yIGhpcyBoZWxwIGluIHJldmlld2luZyB0aGlzIHBhcGVyLCBmb3IKK3Jldmlld2luZyB0aGUgcGF0Y2hlcyBJIHNlbnQgdG8gdGhlIGdpdCBtYWlsaW5nIGxpc3QsIGZvciBkaXNjdXNzaW5nCitzb21lIGlkZWFzIGFuZCBoZWxwaW5nIG1lIGltcHJvdmUgdGhlbSwgZm9yIGltcHJvdmluZyAiZ2l0IGJpc2VjdCIgYQorbG90IGFuZCBmb3IgaGlzIGF3ZXNvbWUgd29yayBpbiBtYWludGFpbmluZyBhbmQgZGV2ZWxvcGluZyBHaXQuCisKK01hbnkgdGhhbmtzIHRvIEluZ28gTW9sbmFyIGZvciBnaXZpbmcgbWUgdmVyeSB1c2VmdWwgaW5mb3JtYXRpb24gdGhhdAorYXBwZWFycyBpbiB0aGlzIHBhcGVyLCBmb3IgY29tbWVudGluZyBvbiB0aGlzIHBhcGVyLCBmb3IgaGlzCitzdWdnZXN0aW9ucyB0byBpbXByb3ZlICJnaXQgYmlzZWN0IiBhbmQgZm9yIGV2YW5nZWxpemluZyAiZ2l0IGJpc2VjdCIKK29uIHRoZSBsaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0cy4KKworTWFueSB0aGFua3MgdG8gTGludXMgVG9ydmFsZHMgZm9yIGludmVudGluZywgZGV2ZWxvcGluZyBhbmQKK2V2YW5nZWxpemluZyAiZ2l0IGJpc2VjdCIsIEdpdCBhbmQgTGludXguCisKK01hbnkgdGhhbmtzIHRvIHRoZSBtYW55IG90aGVyIGdyZWF0IHBlb3BsZSB3aG8gaGVscGVkIG9uZSB3YXkgb3IKK2Fub3RoZXIgd2hlbiBJIHdvcmtlZCBvbiBnaXQsIGVzcGVjaWFsbHkgdG8gQW5kcmVhcyBFcmljc3NvbiwgSm9oYW5uZXMKK1NjaGluZGVsaW4sIEguIFBldGVyIEFudmluLCBEYW5pZWwgQmFya2Fsb3csIEJpbGwgTGVhciwgSm9obiBIYXdsZXksCitTaGF3biBPLiBQaWVyY2UsIEplZmYgS2luZywgU2FtIFZpbGFpbiwgSm9uIFNleW1vdXIuCisKK01hbnkgdGhhbmtzIHRvIHRoZSBMaW51eC1Lb25ncmVzcyBwcm9ncmFtIGNvbW1pdHRlZSBmb3IgY2hvb3NpbmcgdGhlCithdXRob3IgdG8gZ2l2ZW4gYSB0YWxrIGFuZCBmb3IgcHVibGlzaGluZyB0aGlzIHBhcGVyLgorCitSZWZlcmVuY2VzCistLS0tLS0tLS0tCisKKy0gW1tbMV1dXSBodHRwOi8vd3d3Lm5pc3QuZ292L3B1YmxpY19hZmZhaXJzL3JlbGVhc2VzL24wMi0xMC5odG1bJ1NvZnR3YXJlIEVycm9ycyBDb3N0IFUuUy4gRWNvbm9teSAkNTkuNSBCaWxsaW9uIEFubnVhbGx5Jy4gTmlzdCBOZXdzIFJlbGVhc2UuXQorLSBbW1syXV1dIGh0dHA6Ly9qYXZhLnN1bi5jb20vZG9jcy9jb2RlY29udi9odG1sL0NvZGVDb252ZW50aW9ucy5kb2MuaHRtbCMxNjcxMlsnQ29kZSBDb252ZW50aW9ucyBmb3IgdGhlIEphdmEgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UnLiBTdW4gTWljcm9zeXN0ZW1zLl0KKy0gW1tbM11dXSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NvZnR3YXJlX21haW50ZW5hbmNlWydTb2Z0d2FyZSBtYWludGVuYW5jZScuIFdpa2lwZWRpYS5dCistIFtbWzRdXV0gaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC80NTE5NS9bSnVuaW8gQyBIYW1hbm8uICdBdXRvbWF0ZWQgYmlzZWN0IHN1Y2Nlc3Mgc3RvcnknLiBHbWFuZS5dCistIFtbWzVdXV0gaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMzE3MTU0L1tDaHJpc3RpYW4gQ291ZGVyLiAnRnVsbHkgYXV0b21hdGVkIGJpc2VjdGluZyB3aXRoICJnaXQgYmlzZWN0IHJ1biInLiBMV04ubmV0Ll0KKy0gW1tbNl1dXSBodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8yNzc4NzIvW0pvbmF0aGFuIENvcmJldC4gJ0Jpc2VjdGlvbiBkaXZpZGVzIHVzZXJzIGFuZCBkZXZlbG9wZXJzJy4gTFdOLm5ldC5dCistIFtbWzddXV0gaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmxpbnV4LnNjc2kvMzY2NTIvW0luZ28gTW9sbmFyLiAnUmU6IEJVRyAyLjYuMjMtcmMzIGNhbid0IHNlZSBzZCBwYXJ0aXRpb25zIG9uIEFscGhhJy4gR21hbmUuXQorLSBbW1s4XV1dIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzL2dpdC1iaXNlY3QuaHRtbFtKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0LiAnZ2l0LWJpc2VjdCgxKSBNYW51YWwgUGFnZScuIExpbnV4IEtlcm5lbCBBcmNoaXZlcy5dCistIFtbWzldXV0gaHR0cDovL2dpdGh1Yi5jb20vRWFsZHd1bGYvYmJjaG9wW0VhbGR3dWxmLiAnYmJjaG9wJy4gR2l0SHViLl0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZjQ2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CkBAIC0wLDAgKzEsMzg1IEBACitnaXQtYmlzZWN0KDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1iaXNlY3QgLSBGaW5kIGJ5IGJpbmFyeSBzZWFyY2ggdGhlIGNoYW5nZSB0aGF0IGludHJvZHVjZWQgYSBidWcKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYmlzZWN0JyA8c3ViY29tbWFuZD4gPG9wdGlvbnM+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhlIGNvbW1hbmQgdGFrZXMgdmFyaW91cyBzdWJjb21tYW5kcywgYW5kIGRpZmZlcmVudCBvcHRpb25zIGRlcGVuZGluZworb24gdGhlIHN1YmNvbW1hbmQ6CisKKyBnaXQgYmlzZWN0IGhlbHAKKyBnaXQgYmlzZWN0IHN0YXJ0IFstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dCisgZ2l0IGJpc2VjdCBiYWQgWzxyZXY+XQorIGdpdCBiaXNlY3QgZ29vZCBbPHJldj4uLi5dCisgZ2l0IGJpc2VjdCBza2lwIFsoPHJldj58PHJhbmdlPikuLi5dCisgZ2l0IGJpc2VjdCByZXNldCBbPGNvbW1pdD5dCisgZ2l0IGJpc2VjdCB2aXN1YWxpemUKKyBnaXQgYmlzZWN0IHJlcGxheSA8bG9nZmlsZT4KKyBnaXQgYmlzZWN0IGxvZworIGdpdCBiaXNlY3QgcnVuIDxjbWQ+Li4uCisKK1RoaXMgY29tbWFuZCB1c2VzICdnaXQgcmV2LWxpc3QgLS1iaXNlY3QnIHRvIGhlbHAgZHJpdmUgdGhlCitiaW5hcnkgc2VhcmNoIHByb2Nlc3MgdG8gZmluZCB3aGljaCBjaGFuZ2UgaW50cm9kdWNlZCBhIGJ1ZywgZ2l2ZW4gYW4KK29sZCAiZ29vZCIgY29tbWl0IG9iamVjdCBuYW1lIGFuZCBhIGxhdGVyICJiYWQiIGNvbW1pdCBvYmplY3QgbmFtZS4KKworR2V0dGluZyBoZWxwCit+fn5+fn5+fn5+fn4KKworVXNlICJnaXQgYmlzZWN0IiB0byBnZXQgYSBzaG9ydCB1c2FnZSBkZXNjcmlwdGlvbiwgYW5kICJnaXQgYmlzZWN0CitoZWxwIiBvciAiZ2l0IGJpc2VjdCAtaCIgdG8gZ2V0IGEgbG9uZyB1c2FnZSBkZXNjcmlwdGlvbi4KKworQmFzaWMgYmlzZWN0IGNvbW1hbmRzOiBzdGFydCwgYmFkLCBnb29kCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVXNpbmcgdGhlIExpbnV4IGtlcm5lbCB0cmVlIGFzIGFuIGV4YW1wbGUsIGJhc2ljIHVzZSBvZiB0aGUgYmlzZWN0Citjb21tYW5kIGlzIGFzIGZvbGxvd3M6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0CiskIGdpdCBiaXNlY3QgYmFkICAgICAgICAgICAgICAgICAjIEN1cnJlbnQgdmVyc2lvbiBpcyBiYWQKKyQgZ2l0IGJpc2VjdCBnb29kIHYyLjYuMTMtcmMyICAgICMgdjIuNi4xMy1yYzIgd2FzIHRoZSBsYXN0IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdGVkIHRoYXQgd2FzIGdvb2QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHlvdSBoYXZlIHNwZWNpZmllZCBhdCBsZWFzdCBvbmUgYmFkIGFuZCBvbmUgZ29vZCB2ZXJzaW9uLCB0aGUKK2NvbW1hbmQgYmlzZWN0cyB0aGUgcmV2aXNpb24gdHJlZSBhbmQgb3V0cHV0cyBzb21ldGhpbmcgc2ltaWxhciB0bwordGhlIGZvbGxvd2luZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCaXNlY3Rpbmc6IDY3NSByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3RhdGUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2V0IG9mIHJldmlzaW9ucyBpcyB0aGVuIGNoZWNrZWQgb3V0LgorWW91IHdvdWxkIG5vdyBjb21waWxlIHRoYXQga2VybmVsIGFuZCBib290IGl0LiBJZiB0aGUgYm9vdGVkIGtlcm5lbAord29ya3MgY29ycmVjdGx5LCB5b3Ugd291bGQgdGhlbiBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGdvb2QJCQkjIHRoaXMgb25lIGlzIGdvb2QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgb3V0cHV0IG9mIHRoaXMgY29tbWFuZCB3b3VsZCBiZSBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Jpc2VjdGluZzogMzM3IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBrZWVwIHJlcGVhdGluZyB0aGlzIHByb2Nlc3MsIGNvbXBpbGluZyB0aGUgdHJlZSwgdGVzdGluZyBpdCwgYW5kCitkZXBlbmRpbmcgb24gd2hldGhlciBpdCBpcyBnb29kIG9yIGJhZCBpc3N1aW5nIHRoZSBjb21tYW5kICJnaXQgYmlzZWN0IGdvb2QiCitvciAiZ2l0IGJpc2VjdCBiYWQiIHRvIGFzayBmb3IgdGhlIG5leHQgYmlzZWN0aW9uLgorCitFdmVudHVhbGx5IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSByZXZpc2lvbnMgbGVmdCB0byBiaXNlY3QsIGFuZCB5b3UKK3dpbGwgaGF2ZSBiZWVuIGxlZnQgd2l0aCB0aGUgZmlyc3QgYmFkIGtlcm5lbCByZXZpc2lvbiBpbiAicmVmcy9iaXNlY3QvYmFkIi4KKworQmlzZWN0IHJlc2V0Cit+fn5+fn5+fn5+fn4KKworQWZ0ZXIgYSBiaXNlY3Qgc2Vzc2lvbiwgdG8gY2xlYW4gdXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSBhbmQgcmV0dXJuIHRvCit0aGUgb3JpZ2luYWwgSEVBRCwgaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCByZXNldAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIHRoaXMgd2lsbCByZXR1cm4geW91ciB0cmVlIHRvIHRoZSBjb21taXQgdGhhdCB3YXMgY2hlY2tlZAorb3V0IGJlZm9yZSBgZ2l0IGJpc2VjdCBzdGFydGAuICAoQSBuZXcgYGdpdCBiaXNlY3Qgc3RhcnRgIHdpbGwgYWxzbyBkbwordGhhdCwgYXMgaXQgY2xlYW5zIHVwIHRoZSBvbGQgYmlzZWN0aW9uIHN0YXRlLikKKworV2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudCwgeW91IGNhbiByZXR1cm4gdG8gYSBkaWZmZXJlbnQgY29tbWl0CitpbnN0ZWFkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBleGFtcGxlLCBgZ2l0IGJpc2VjdCByZXNldCBIRUFEYCB3aWxsIGxlYXZlIHlvdSBvbiB0aGUgY3VycmVudAorYmlzZWN0aW9uIGNvbW1pdCBhbmQgYXZvaWQgc3dpdGNoaW5nIGNvbW1pdHMgYXQgYWxsLCB3aGlsZSBgZ2l0IGJpc2VjdAorcmVzZXQgYmlzZWN0L2JhZGAgd2lsbCBjaGVjayBvdXQgdGhlIGZpcnN0IGJhZCByZXZpc2lvbi4KKworQmlzZWN0IHZpc3VhbGl6ZQorfn5+fn5+fn5+fn5+fn5+fgorCitUbyBzZWUgdGhlIGN1cnJlbnRseSByZW1haW5pbmcgc3VzcGVjdHMgaW4gJ2dpdGsnLCBpc3N1ZSB0aGUgZm9sbG93aW5nCitjb21tYW5kIGR1cmluZyB0aGUgYmlzZWN0aW9uIHByb2Nlc3M6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHZpc3VhbGl6ZQorLS0tLS0tLS0tLS0tCisKK2B2aWV3YCBtYXkgYWxzbyBiZSB1c2VkIGFzIGEgc3lub255bSBmb3IgYHZpc3VhbGl6ZWAuCisKK0lmIHRoZSAnRElTUExBWScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCwgJ2dpdCBsb2cnIGlzIHVzZWQKK2luc3RlYWQuICBZb3UgY2FuIGFsc28gZ2l2ZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBzdWNoIGFzIGAtcGAgYW5kCitgLS1zdGF0YC4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgdmlldyAtLXN0YXQKKy0tLS0tLS0tLS0tLQorCitCaXNlY3QgbG9nIGFuZCBiaXNlY3QgcmVwbGF5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FmdGVyIGhhdmluZyBtYXJrZWQgcmV2aXNpb25zIGFzIGdvb2Qgb3IgYmFkLCBpc3N1ZSB0aGUgZm9sbG93aW5nCitjb21tYW5kIHRvIHNob3cgd2hhdCBoYXMgYmVlbiBkb25lIHNvIGZhcjoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgbG9nCistLS0tLS0tLS0tLS0KKworSWYgeW91IGRpc2NvdmVyIHRoYXQgeW91IG1hZGUgYSBtaXN0YWtlIGluIHNwZWNpZnlpbmcgdGhlIHN0YXR1cyBvZiBhCityZXZpc2lvbiwgeW91IGNhbiBzYXZlIHRoZSBvdXRwdXQgb2YgdGhpcyBjb21tYW5kIHRvIGEgZmlsZSwgZWRpdCBpdCB0bworcmVtb3ZlIHRoZSBpbmNvcnJlY3QgZW50cmllcywgYW5kIHRoZW4gaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0bworcmV0dXJuIHRvIGEgY29ycmVjdGVkIHN0YXRlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCByZXNldAorJCBnaXQgYmlzZWN0IHJlcGxheSB0aGF0LWZpbGUKKy0tLS0tLS0tLS0tLQorCitBdm9pZGluZyB0ZXN0aW5nIGEgY29tbWl0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmLCBpbiB0aGUgbWlkZGxlIG9mIGEgYmlzZWN0IHNlc3Npb24sIHlvdSBrbm93IHRoYXQgdGhlIG5leHQgc3VnZ2VzdGVkCityZXZpc2lvbiBpcyBub3QgYSBnb29kIG9uZSB0byB0ZXN0IChlLmcuIHRoZSBjaGFuZ2UgdGhlIGNvbW1pdAoraW50cm9kdWNlcyBpcyBrbm93biBub3QgdG8gd29yayBpbiB5b3VyIGVudmlyb25tZW50IGFuZCB5b3Uga25vdyBpdAorZG9lcyBub3QgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIHRoZSBidWcgeW91IGFyZSBjaGFzaW5nKSwgeW91IG1heQord2FudCB0byBmaW5kIGEgbmVhcmJ5IGNvbW1pdCBhbmQgdHJ5IHRoYXQgaW5zdGVhZC4KKworRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGdvb2QvYmFkCQkJIyBwcmV2aW91cyByb3VuZCB3YXMgZ29vZCBvciBiYWQuCitCaXNlY3Rpbmc6IDMzNyByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMKKyQgZ2l0IGJpc2VjdCB2aXN1YWxpemUJCQkjIG9vcHMsIHRoYXQgaXMgdW5pbnRlcmVzdGluZy4KKyQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjMJCSMgdHJ5IDMgcmV2aXNpb25zIGJlZm9yZSB3aGF0CisJCQkJCSMgd2FzIHN1Z2dlc3RlZAorLS0tLS0tLS0tLS0tCisKK1RoZW4gY29tcGlsZSBhbmQgdGVzdCB0aGUgY2hvc2VuIHJldmlzaW9uLCBhbmQgYWZ0ZXJ3YXJkcyBtYXJrCit0aGUgcmV2aXNpb24gYXMgZ29vZCBvciBiYWQgaW4gdGhlIHVzdWFsIG1hbm5lci4KKworQmlzZWN0IHNraXAKK35+fn5+fn5+fn5+fgorCitJbnN0ZWFkIG9mIGNob29zaW5nIGJ5IHlvdXJzZWxmIGEgbmVhcmJ5IGNvbW1pdCwgeW91IGNhbiBhc2sgZ2l0Cit0byBkbyBpdCBmb3IgeW91IGJ5IGlzc3VpbmcgdGhlIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHNraXAgICAgICAgICAgICAgICAgICMgQ3VycmVudCB2ZXJzaW9uIGNhbm5vdCBiZSB0ZXN0ZWQKKy0tLS0tLS0tLS0tLQorCitCdXQgZ2l0IG1heSBldmVudHVhbGx5IGJlIHVuYWJsZSB0byB0ZWxsIHRoZSBmaXJzdCBiYWQgY29tbWl0IGFtb25nCithIGJhZCBjb21taXQgYW5kIG9uZSBvciBtb3JlIHNraXBwZWQgY29tbWl0cy4KKworWW91IGNhbiBldmVuIHNraXAgYSByYW5nZSBvZiBjb21taXRzLCBpbnN0ZWFkIG9mIGp1c3Qgb25lIGNvbW1pdCwKK3VzaW5nIHRoZSAiJzxjb21taXQxPicuLic8Y29tbWl0Mj4nIiBub3RhdGlvbi4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHNraXAgdjIuNS4udjIuNgorLS0tLS0tLS0tLS0tCisKK1RoaXMgdGVsbHMgdGhlIGJpc2VjdCBwcm9jZXNzIHRoYXQgbm8gY29tbWl0IGFmdGVyIGB2Mi41YCwgdXAgdG8gYW5kCitpbmNsdWRpbmcgYHYyLjZgLCBzaG91bGQgYmUgdGVzdGVkLgorCitOb3RlIHRoYXQgaWYgeW91IGFsc28gd2FudCB0byBza2lwIHRoZSBmaXJzdCBjb21taXQgb2YgdGhlIHJhbmdlIHlvdQord291bGQgaXNzdWUgdGhlIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHNraXAgdjIuNSB2Mi41Li52Mi42CistLS0tLS0tLS0tLS0KKworVGhpcyB0ZWxscyB0aGUgYmlzZWN0IHByb2Nlc3MgdGhhdCB0aGUgY29tbWl0cyBiZXR3ZWVuIGB2Mi41YCBpbmNsdWRlZAorYW5kIGB2Mi42YCBpbmNsdWRlZCBzaG91bGQgYmUgc2tpcHBlZC4KKworCitDdXR0aW5nIGRvd24gYmlzZWN0aW9uIGJ5IGdpdmluZyBtb3JlIHBhcmFtZXRlcnMgdG8gYmlzZWN0IHN0YXJ0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gZnVydGhlciBjdXQgZG93biB0aGUgbnVtYmVyIG9mIHRyaWFscywgaWYgeW91IGtub3cgd2hhdCBwYXJ0IG9mCit0aGUgdHJlZSBpcyBpbnZvbHZlZCBpbiB0aGUgcHJvYmxlbSB5b3UgYXJlIHRyYWNraW5nIGRvd24sIGJ5IHNwZWNpZnlpbmcKK3BhdGggcGFyYW1ldGVycyB3aGVuIGlzc3VpbmcgdGhlIGBiaXNlY3Qgc3RhcnRgIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IC0tIGFyY2gvaTM4NiBpbmNsdWRlL2FzbS1pMzg2CistLS0tLS0tLS0tLS0KKworSWYgeW91IGtub3cgYmVmb3JlaGFuZCBtb3JlIHRoYW4gb25lIGdvb2QgY29tbWl0LCB5b3UgY2FuIG5hcnJvdyB0aGUKK2Jpc2VjdCBzcGFjZSBkb3duIGJ5IHNwZWNpZnlpbmcgYWxsIG9mIHRoZSBnb29kIGNvbW1pdHMgaW1tZWRpYXRlbHkgYWZ0ZXIKK3RoZSBiYWQgY29tbWl0IHdoZW4gaXNzdWluZyB0aGUgYGJpc2VjdCBzdGFydGAgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgdjIuNi4yMC1yYzYgdjIuNi4yMC1yYzQgdjIuNi4yMC1yYzEgLS0KKyAgICAgICAgICAgICAgICAgICAjIHYyLjYuMjAtcmM2IGlzIGJhZAorICAgICAgICAgICAgICAgICAgICMgdjIuNi4yMC1yYzQgYW5kIHYyLjYuMjAtcmMxIGFyZSBnb29kCistLS0tLS0tLS0tLS0KKworQmlzZWN0IHJ1bgorfn5+fn5+fn5+fgorCitJZiB5b3UgaGF2ZSBhIHNjcmlwdCB0aGF0IGNhbiB0ZWxsIGlmIHRoZSBjdXJyZW50IHNvdXJjZSBjb2RlIGlzIGdvb2QKK29yIGJhZCwgeW91IGNhbiBiaXNlY3QgYnkgaXNzdWluZyB0aGUgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcnVuIG15X3NjcmlwdCBhcmd1bWVudHMKKy0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgdGhlIHNjcmlwdCAoYG15X3NjcmlwdGAgaW4gdGhlIGFib3ZlIGV4YW1wbGUpIHNob3VsZAorZXhpdCB3aXRoIGNvZGUgMCBpZiB0aGUgY3VycmVudCBzb3VyY2UgY29kZSBpcyBnb29kLCBhbmQgZXhpdCB3aXRoIGEKK2NvZGUgYmV0d2VlbiAxIGFuZCAxMjcgKGluY2x1c2l2ZSksIGV4Y2VwdCAxMjUsIGlmIHRoZSBjdXJyZW50Citzb3VyY2UgY29kZSBpcyBiYWQuCisKK0FueSBvdGhlciBleGl0IGNvZGUgd2lsbCBhYm9ydCB0aGUgYmlzZWN0IHByb2Nlc3MuIEl0IHNob3VsZCBiZSBub3RlZAordGhhdCBhIHByb2dyYW0gdGhhdCB0ZXJtaW5hdGVzIHZpYSAiZXhpdCgtMSkiIGxlYXZlcyAkPyA9IDI1NSwgKHNlZSB0aGUKK2V4aXQoMykgbWFudWFsIHBhZ2UpLCBhcyB0aGUgdmFsdWUgaXMgY2hvcHBlZCB3aXRoICImIDAzNzciLgorCitUaGUgc3BlY2lhbCBleGl0IGNvZGUgMTI1IHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIGN1cnJlbnQgc291cmNlIGNvZGUKK2Nhbm5vdCBiZSB0ZXN0ZWQuIElmIHRoZSBzY3JpcHQgZXhpdHMgd2l0aCB0aGlzIGNvZGUsIHRoZSBjdXJyZW50CityZXZpc2lvbiB3aWxsIGJlIHNraXBwZWQgKHNlZSBgZ2l0IGJpc2VjdCBza2lwYCBhYm92ZSkuIDEyNSB3YXMgY2hvc2VuCithcyB0aGUgaGlnaGVzdCBzZW5zaWJsZSB2YWx1ZSB0byB1c2UgZm9yIHRoaXMgcHVycG9zZSwgYmVjYXVzZSAxMjYgYW5kIDEyNworYXJlIHVzZWQgYnkgUE9TSVggc2hlbGxzIHRvIHNpZ25hbCBzcGVjaWZpYyBlcnJvciBzdGF0dXMgKDEyNyBpcyBmb3IKK2NvbW1hbmQgbm90IGZvdW5kLCAxMjYgaXMgZm9yIGNvbW1hbmQgZm91bmQgYnV0IG5vdCBleGVjdXRhYmxlLS0tdGhlc2UKK2RldGFpbHMgZG8gbm90IG1hdHRlciwgYXMgdGhleSBhcmUgbm9ybWFsIGVycm9ycyBpbiB0aGUgc2NyaXB0LCBhcyBmYXIgYXMKKyJiaXNlY3QgcnVuIiBpcyBjb25jZXJuZWQpLgorCitZb3UgbWF5IG9mdGVuIGZpbmQgdGhhdCBkdXJpbmcgYSBiaXNlY3Qgc2Vzc2lvbiB5b3Ugd2FudCB0byBoYXZlCit0ZW1wb3JhcnkgbW9kaWZpY2F0aW9ucyAoZS5nLiBzLyNkZWZpbmUgREVCVUcgMC8jZGVmaW5lIERFQlVHIDEvIGluIGEKK2hlYWRlciBmaWxlLCBvciAicmV2aXNpb24gdGhhdCBkb2VzIG5vdCBoYXZlIHRoaXMgY29tbWl0IG5lZWRzIHRoaXMKK3BhdGNoIGFwcGxpZWQgdG8gd29yayBhcm91bmQgYW5vdGhlciBwcm9ibGVtIHRoaXMgYmlzZWN0aW9uIGlzIG5vdAoraW50ZXJlc3RlZCBpbiIpIGFwcGxpZWQgdG8gdGhlIHJldmlzaW9uIGJlaW5nIHRlc3RlZC4KKworVG8gY29wZSB3aXRoIHN1Y2ggYSBzaXR1YXRpb24sIGFmdGVyIHRoZSBpbm5lciAnZ2l0IGJpc2VjdCcgZmluZHMgdGhlCituZXh0IHJldmlzaW9uIHRvIHRlc3QsIHRoZSBzY3JpcHQgY2FuIGFwcGx5IHRoZSBwYXRjaAorYmVmb3JlIGNvbXBpbGluZywgcnVuIHRoZSByZWFsIHRlc3QsIGFuZCBhZnRlcndhcmRzIGRlY2lkZSBpZiB0aGUKK3JldmlzaW9uIChwb3NzaWJseSB3aXRoIHRoZSBuZWVkZWQgcGF0Y2gpIHBhc3NlZCB0aGUgdGVzdCBhbmQgdGhlbgorcmV3aW5kIHRoZSB0cmVlIHRvIHRoZSBwcmlzdGluZSBzdGF0ZS4gIEZpbmFsbHkgdGhlIHNjcmlwdCBzaG91bGQgZXhpdAord2l0aCB0aGUgc3RhdHVzIG9mIHRoZSByZWFsIHRlc3QgdG8gbGV0IHRoZSAiZ2l0IGJpc2VjdCBydW4iIGNvbW1hbmQgbG9vcAorZGV0ZXJtaW5lIHRoZSBldmVudHVhbCBvdXRjb21lIG9mIHRoZSBiaXNlY3Qgc2Vzc2lvbi4KKworT1BUSU9OUworLS0tLS0tLQorLS1uby1jaGVja291dDo6CisrCitEbyBub3QgY2hlY2tvdXQgdGhlIG5ldyB3b3JraW5nIHRyZWUgYXQgZWFjaCBpdGVyYXRpb24gb2YgdGhlIGJpc2VjdGlvbgorcHJvY2Vzcy4gSW5zdGVhZCBqdXN0IHVwZGF0ZSBhIHNwZWNpYWwgcmVmZXJlbmNlIG5hbWVkICdCSVNFQ1RfSEVBRCcgdG8gbWFrZQoraXQgcG9pbnQgdG8gdGhlIGNvbW1pdCB0aGF0IHNob3VsZCBiZSB0ZXN0ZWQuCisrCitUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIHdoZW4gdGhlIHRlc3QgeW91IHdvdWxkIHBlcmZvcm0gaW4gZWFjaCBzdGVwCitkb2VzIG5vdCByZXF1aXJlIGEgY2hlY2tlZCBvdXQgdHJlZS4KKysKK0lmIHRoZSByZXBvc2l0b3J5IGlzIGJhcmUsIGAtLW5vLWNoZWNrb3V0YCBpcyBhc3N1bWVkLgorCitFWEFNUExFUworLS0tLS0tLS0KKworKiBBdXRvbWF0aWNhbGx5IGJpc2VjdCBhIGJyb2tlbiBidWlsZCBiZXR3ZWVuIHYxLjIgYW5kIEhFQUQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIHYxLjIgLS0gICAgICAjIEhFQUQgaXMgYmFkLCB2MS4yIGlzIGdvb2QKKyQgZ2l0IGJpc2VjdCBydW4gbWFrZSAgICAgICAgICAgICAgICAjICJtYWtlIiBidWlsZHMgdGhlIGFwcAorLS0tLS0tLS0tLS0tCisKKyogQXV0b21hdGljYWxseSBiaXNlY3QgYSB0ZXN0IGZhaWx1cmUgYmV0d2VlbiBvcmlnaW4gYW5kIEhFQUQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIG9yaWdpbiAtLSAgICAjIEhFQUQgaXMgYmFkLCBvcmlnaW4gaXMgZ29vZAorJCBnaXQgYmlzZWN0IHJ1biBtYWtlIHRlc3QgICAgICAgICAgICMgIm1ha2UgdGVzdCIgYnVpbGRzIGFuZCB0ZXN0cworLS0tLS0tLS0tLS0tCisKKyogQXV0b21hdGljYWxseSBiaXNlY3QgYSBicm9rZW4gdGVzdCBjYXNlOgorKworLS0tLS0tLS0tLS0tCiskIGNhdCB+L3Rlc3Quc2gKKyMhL2Jpbi9zaAorbWFrZSB8fCBleGl0IDEyNSAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBza2lwcyBicm9rZW4gYnVpbGRzCit+L2NoZWNrX3Rlc3RfY2FzZS5zaCAgICAgICAgICAgICAgICAgIyBkb2VzIHRoZSB0ZXN0IGNhc2UgcGFzcz8KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIEhFQUR+MTAgLS0gICAjIGN1bHByaXQgaXMgYW1vbmcgdGhlIGxhc3QgMTAKKyQgZ2l0IGJpc2VjdCBydW4gfi90ZXN0LnNoCistLS0tLS0tLS0tLS0KKysKK0hlcmUgd2UgdXNlIGEgInRlc3Quc2giIGN1c3RvbSBzY3JpcHQuIEluIHRoaXMgc2NyaXB0LCBpZiAibWFrZSIKK2ZhaWxzLCB3ZSBza2lwIHRoZSBjdXJyZW50IGNvbW1pdC4KKyJjaGVja190ZXN0X2Nhc2Uuc2giIHNob3VsZCAiZXhpdCAwIiBpZiB0aGUgdGVzdCBjYXNlIHBhc3NlcywKK2FuZCAiZXhpdCAxIiBvdGhlcndpc2UuCisrCitJdCBpcyBzYWZlciBpZiBib3RoICJ0ZXN0LnNoIiBhbmQgImNoZWNrX3Rlc3RfY2FzZS5zaCIgYXJlCitvdXRzaWRlIHRoZSByZXBvc2l0b3J5IHRvIHByZXZlbnQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGJpc2VjdCwKK21ha2UgYW5kIHRlc3QgcHJvY2Vzc2VzIGFuZCB0aGUgc2NyaXB0cy4KKworKiBBdXRvbWF0aWNhbGx5IGJpc2VjdCB3aXRoIHRlbXBvcmFyeSBtb2RpZmljYXRpb25zIChob3QtZml4KToKKysKKy0tLS0tLS0tLS0tLQorJCBjYXQgfi90ZXN0LnNoCisjIS9iaW4vc2gKKworIyB0d2VhayB0aGUgd29ya2luZyB0cmVlIGJ5IG1lcmdpbmcgdGhlIGhvdC1maXggYnJhbmNoCisjIGFuZCB0aGVuIGF0dGVtcHQgYSBidWlsZAoraWYJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGhvdC1maXggJiYKKwltYWtlCit0aGVuCisJIyBydW4gcHJvamVjdCBzcGVjaWZpYyB0ZXN0IGFuZCByZXBvcnQgaXRzIHN0YXR1cworCX4vY2hlY2tfdGVzdF9jYXNlLnNoCisJc3RhdHVzPSQ/CitlbHNlCisJIyB0ZWxsIHRoZSBjYWxsZXIgdGhpcyBpcyB1bnRlc3RhYmxlCisJc3RhdHVzPTEyNQorZmkKKworIyB1bmRvIHRoZSB0d2VhayB0byBhbGxvdyBjbGVhbiBmbGlwcGluZyB0byB0aGUgbmV4dCBjb21taXQKK2dpdCByZXNldCAtLWhhcmQKKworIyByZXR1cm4gY29udHJvbAorZXhpdCAkc3RhdHVzCistLS0tLS0tLS0tLS0KKysKK1RoaXMgYXBwbGllcyBtb2RpZmljYXRpb25zIGZyb20gYSBob3QtZml4IGJyYW5jaCBiZWZvcmUgZWFjaCB0ZXN0IHJ1biwKK2UuZy4gaW4gY2FzZSB5b3VyIGJ1aWxkIG9yIHRlc3QgZW52aXJvbm1lbnQgY2hhbmdlZCBzbyB0aGF0IG9sZGVyCityZXZpc2lvbnMgbWF5IG5lZWQgYSBmaXggd2hpY2ggbmV3ZXIgb25lcyBoYXZlIGFscmVhZHkuIChNYWtlIHN1cmUgdGhlCitob3QtZml4IGJyYW5jaCBpcyBiYXNlZCBvZmYgYSBjb21taXQgd2hpY2ggaXMgY29udGFpbmVkIGluIGFsbCByZXZpc2lvbnMKK3doaWNoIHlvdSBhcmUgYmlzZWN0aW5nLCBzbyB0aGF0IHRoZSBtZXJnZSBkb2VzIG5vdCBwdWxsIGluIHRvbyBtdWNoLCBvcgordXNlIGBnaXQgY2hlcnJ5LXBpY2tgIGluc3RlYWQgb2YgYGdpdCBtZXJnZWAuKQorCisqIEF1dG9tYXRpY2FsbHkgYmlzZWN0IGEgYnJva2VuIHRlc3QgY2FzZToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgSEVBRH4xMCAtLSAgICMgY3VscHJpdCBpcyBhbW9uZyB0aGUgbGFzdCAxMAorJCBnaXQgYmlzZWN0IHJ1biBzaCAtYyAibWFrZSB8fCBleGl0IDEyNTsgfi9jaGVja190ZXN0X2Nhc2Uuc2giCistLS0tLS0tLS0tLS0KKysKK1RoaXMgc2hvd3MgdGhhdCB5b3UgY2FuIGRvIHdpdGhvdXQgYSBydW4gc2NyaXB0IGlmIHlvdSB3cml0ZSB0aGUgdGVzdAorb24gYSBzaW5nbGUgbGluZS4KKworKiBMb2NhdGUgYSBnb29kIHJlZ2lvbiBvZiB0aGUgb2JqZWN0IGdyYXBoIGluIGEgZGFtYWdlZCByZXBvc2l0b3J5CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIDxrbm93bi1nb29kLWNvbW1pdD4gWyA8Ym91bmRhcnktY29tbWl0PiAuLi4gXSAtLW5vLWNoZWNrb3V0CiskIGdpdCBiaXNlY3QgcnVuIHNoIC1jICcKKwlHT09EPSQoZ2l0IGZvci1lYWNoLXJlZiAiLS1mb3JtYXQ9JShvYmplY3RuYW1lKSIgcmVmcy9iaXNlY3QvZ29vZC0qKSAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgQklTRUNUX0hFQUQgLS1ub3QgJEdPT0QgPnRtcC4kJCAmJgorCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgPi9kZXYvbnVsbCA8dG1wLiQkCisJcmM9JD8KKwlybSAtZiB0bXAuJCQKKwl0ZXN0ICRyYyA9IDAnCisKKy0tLS0tLS0tLS0tLQorKworSW4gdGhpcyBjYXNlLCB3aGVuICdnaXQgYmlzZWN0IHJ1bicgZmluaXNoZXMsIGJpc2VjdC9iYWQgd2lsbCByZWZlciB0byBhIGNvbW1pdCB0aGF0CitoYXMgYXQgbGVhc3Qgb25lIHBhcmVudCB3aG9zZSByZWFjaGFibGUgZ3JhcGggaXMgZnVsbHkgdHJhdmVyc2FibGUgaW4gdGhlIHNlbnNlCityZXF1aXJlZCBieSAnZ2l0IHBhY2sgb2JqZWN0cycuCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rOmdpdC1iaXNlY3QtbGsyMDA5Lmh0bWxbRmlnaHRpbmcgcmVncmVzc2lvbnMgd2l0aCBnaXQgYmlzZWN0XSwKK2xpbmtnaXQ6Z2l0LWJsYW1lWzFdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDQxNzNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0CkBAIC0wLDAgKzEsMjI3IEBACitnaXQtYmxhbWUoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYmxhbWUgLSBTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGJsYW1lJyBbLWNdIFstYl0gWy1sXSBbLS1yb290XSBbLXRdIFstZl0gWy1uXSBbLXNdIFstZV0gWy1wXSBbLXddIFstLWluY3JlbWVudGFsXSBbLUwgbixtXQorCSAgICBbLVMgPHJldnMtZmlsZT5dIFstTV0gWy1DXSBbLUNdIFstQ10gWy0tc2luY2U9PGRhdGU+XSBbLS1hYmJyZXY9PG4+XQorCSAgICBbPHJldj4gfCAtLWNvbnRlbnRzIDxmaWxlPiB8IC0tcmV2ZXJzZSA8cmV2Pl0gWy0tXSA8ZmlsZT4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0Fubm90YXRlcyBlYWNoIGxpbmUgaW4gdGhlIGdpdmVuIGZpbGUgd2l0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZXZpc2lvbiB3aGljaAorbGFzdCBtb2RpZmllZCB0aGUgbGluZS4gT3B0aW9uYWxseSwgc3RhcnQgYW5ub3RhdGluZyBmcm9tIHRoZSBnaXZlbiByZXZpc2lvbi4KKworVGhlIGNvbW1hbmQgY2FuIGFsc28gbGltaXQgdGhlIHJhbmdlIG9mIGxpbmVzIGFubm90YXRlZC4KKworVGhlIG9yaWdpbiBvZiBsaW5lcyBpcyBhdXRvbWF0aWNhbGx5IGZvbGxvd2VkIGFjcm9zcyB3aG9sZS1maWxlCityZW5hbWVzIChjdXJyZW50bHkgdGhlcmUgaXMgbm8gb3B0aW9uIHRvIHR1cm4gdGhlIHJlbmFtZS1mb2xsb3dpbmcKK29mZikuIFRvIGZvbGxvdyBsaW5lcyBtb3ZlZCBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIsIG9yIHRvIGZvbGxvdworbGluZXMgdGhhdCB3ZXJlIGNvcGllZCBhbmQgcGFzdGVkIGZyb20gYW5vdGhlciBmaWxlLCBldGMuLCBzZWUgdGhlCitgLUNgIGFuZCBgLU1gIG9wdGlvbnMuCisKK1RoZSByZXBvcnQgZG9lcyBub3QgdGVsbCB5b3UgYW55dGhpbmcgYWJvdXQgbGluZXMgd2hpY2ggaGF2ZSBiZWVuIGRlbGV0ZWQgb3IKK3JlcGxhY2VkOyB5b3UgbmVlZCB0byB1c2UgYSB0b29sIHN1Y2ggYXMgJ2dpdCBkaWZmJyBvciB0aGUgInBpY2theGUiCitpbnRlcmZhY2UgYnJpZWZseSBtZW50aW9uZWQgaW4gdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGguCisKK0FwYXJ0IGZyb20gc3VwcG9ydGluZyBmaWxlIGFubm90YXRpb24sIGdpdCBhbHNvIHN1cHBvcnRzIHNlYXJjaGluZyB0aGUKK2RldmVsb3BtZW50IGhpc3RvcnkgZm9yIHdoZW4gYSBjb2RlIHNuaXBwZXQgb2NjdXJyZWQgaW4gYSBjaGFuZ2UuIFRoaXMgbWFrZXMgaXQKK3Bvc3NpYmxlIHRvIHRyYWNrIHdoZW4gYSBjb2RlIHNuaXBwZXQgd2FzIGFkZGVkIHRvIGEgZmlsZSwgbW92ZWQgb3IgY29waWVkCitiZXR3ZWVuIGZpbGVzLCBhbmQgZXZlbnR1YWxseSBkZWxldGVkIG9yIHJlcGxhY2VkLiBJdCB3b3JrcyBieSBzZWFyY2hpbmcgZm9yCithIHRleHQgc3RyaW5nIGluIHRoZSBkaWZmLiBBIHNtYWxsIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSAtUydibGFtZV91c2FnZScKKzUwNDBmMTdlYmExNTUwNGJhZDY2YjE0YTY0NWJkZGQ5YjAxNWViYjcgYmxhbWUgLVMgPGFuY2VzdHJ5LWZpbGU+CitlYTRjN2Y5YmY2OWU3ODFkZDBjZDg4ZDJiY2NiMmJmNWNjMTVjOWE3IGdpdC1ibGFtZTogTWFrZSB0aGUgb3V0cHV0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPUFRJT05TCistLS0tLS0tCitpbmNsdWRlOjpibGFtZS1vcHRpb25zLnR4dFtdCisKKy1jOjoKKwlVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgbGlua2dpdDpnaXQtYW5ub3RhdGVbMV0gKERlZmF1bHQ6IG9mZikuCisKKy0tc2NvcmUtZGVidWc6OgorCUluY2x1ZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIG1vdmVtZW50IG9mCisJbGluZXMgYmV0d2VlbiBmaWxlcyAoc2VlIGAtQ2ApIGFuZCBsaW5lcyBtb3ZlZCB3aXRoaW4gYQorCWZpbGUgKHNlZSBgLU1gKS4gIFRoZSBmaXJzdCBudW1iZXIgbGlzdGVkIGlzIHRoZSBzY29yZS4KKwlUaGlzIGlzIHRoZSBudW1iZXIgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgZGV0ZWN0ZWQKKwlhcyBoYXZpbmcgYmVlbiBtb3ZlZCBiZXR3ZWVuIG9yIHdpdGhpbiBmaWxlcy4gIFRoaXMgbXVzdCBiZSBhYm92ZQorCWEgY2VydGFpbiB0aHJlc2hvbGQgZm9yICdnaXQgYmxhbWUnIHRvIGNvbnNpZGVyIHRob3NlIGxpbmVzCisJb2YgY29kZSB0byBoYXZlIGJlZW4gbW92ZWQuCisKKy1mOjoKKy0tc2hvdy1uYW1lOjoKKwlTaG93IHRoZSBmaWxlbmFtZSBpbiB0aGUgb3JpZ2luYWwgY29tbWl0LiAgQnkgZGVmYXVsdAorCXRoZSBmaWxlbmFtZSBpcyBzaG93biBpZiB0aGVyZSBpcyBhbnkgbGluZSB0aGF0IGNhbWUgZnJvbSBhCisJZmlsZSB3aXRoIGEgZGlmZmVyZW50IG5hbWUsIGR1ZSB0byByZW5hbWUgZGV0ZWN0aW9uLgorCistbjo6CistLXNob3ctbnVtYmVyOjoKKwlTaG93IHRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgY29tbWl0IChEZWZhdWx0OiBvZmYpLgorCistczo6CisJU3VwcHJlc3MgdGhlIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgZnJvbSB0aGUgb3V0cHV0LgorCistZTo6CistLXNob3ctZW1haWw6OgorCVNob3cgdGhlIGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIGF1dGhvciBuYW1lIChEZWZhdWx0OiBvZmYpLgorCistdzo6CisJSWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgdGhlIHBhcmVudCdzIHZlcnNpb24gYW5kCisJdGhlIGNoaWxkJ3MgdG8gZmluZCB3aGVyZSB0aGUgbGluZXMgY2FtZSBmcm9tLgorCistLWFiYnJldj08bj46OgorCUluc3RlYWQgb2YgdXNpbmcgdGhlIGRlZmF1bHQgNysxIGhleGFkZWNpbWFsIGRpZ2l0cyBhcyB0aGUKKwlhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSwgdXNlIDxuPisxIGRpZ2l0cy4gTm90ZSB0aGF0IDEgY29sdW1uCisJaXMgdXNlZCBmb3IgYSBjYXJldCB0byBtYXJrIHRoZSBib3VuZGFyeSBjb21taXQuCisKKworVEhFIFBPUkNFTEFJTiBGT1JNQVQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgZm9ybWF0LCBlYWNoIGxpbmUgaXMgb3V0cHV0IGFmdGVyIGEgaGVhZGVyOyB0aGUKK2hlYWRlciBhdCB0aGUgbWluaW11bSBoYXMgdGhlIGZpcnN0IGxpbmUgd2hpY2ggaGFzOgorCistIDQwLWJ5dGUgU0hBLTEgb2YgdGhlIGNvbW1pdCB0aGUgbGluZSBpcyBhdHRyaWJ1dGVkIHRvOworLSB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGxpbmUgaW4gdGhlIG9yaWdpbmFsIGZpbGU7CistIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgbGluZSBpbiB0aGUgZmluYWwgZmlsZTsKKy0gb24gYSBsaW5lIHRoYXQgc3RhcnRzIGEgZ3JvdXAgb2YgbGluZXMgZnJvbSBhIGRpZmZlcmVudAorICBjb21taXQgdGhhbiB0aGUgcHJldmlvdXMgb25lLCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoaXMKKyAgZ3JvdXAuICBPbiBzdWJzZXF1ZW50IGxpbmVzIHRoaXMgZmllbGQgaXMgYWJzZW50LgorCitUaGlzIGhlYWRlciBsaW5lIGlzIGZvbGxvd2VkIGJ5IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24KK2F0IGxlYXN0IG9uY2UgZm9yIGVhY2ggY29tbWl0OgorCistIHRoZSBhdXRob3IgbmFtZSAoImF1dGhvciIpLCBlbWFpbCAoImF1dGhvci1tYWlsIiksIHRpbWUKKyAgKCJhdXRob3ItdGltZSIpLCBhbmQgdGltZXpvbmUgKCJhdXRob3ItdHoiKTsgc2ltaWxhcmx5CisgIGZvciBjb21taXR0ZXIuCistIHRoZSBmaWxlbmFtZSBpbiB0aGUgY29tbWl0IHRoYXQgdGhlIGxpbmUgaXMgYXR0cmlidXRlZCB0by4KKy0gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSAoInN1bW1hcnkiKS4KKworVGhlIGNvbnRlbnRzIG9mIHRoZSBhY3R1YWwgbGluZSBpcyBvdXRwdXQgYWZ0ZXIgdGhlIGFib3ZlCitoZWFkZXIsIHByZWZpeGVkIGJ5IGEgVEFCLiBUaGlzIGlzIHRvIGFsbG93IGFkZGluZyBtb3JlCitoZWFkZXIgZWxlbWVudHMgbGF0ZXIuCisKK1RoZSBwb3JjZWxhaW4gZm9ybWF0IGdlbmVyYWxseSBzdXBwcmVzc2VzIGNvbW1pdCBpbmZvcm1hdGlvbiB0aGF0IGhhcworYWxyZWFkeSBiZWVuIHNlZW4uIEZvciBleGFtcGxlLCB0d28gbGluZXMgdGhhdCBhcmUgYmxhbWVkIHRvIHRoZSBzYW1lCitjb21taXQgd2lsbCBib3RoIGJlIHNob3duLCBidXQgdGhlIGRldGFpbHMgZm9yIHRoYXQgY29tbWl0IHdpbGwgYmUgc2hvd24KK29ubHkgb25jZS4gVGhpcyBpcyBtb3JlIGVmZmljaWVudCwgYnV0IG1heSByZXF1aXJlIG1vcmUgc3RhdGUgYmUga2VwdCBieQordGhlIHJlYWRlci4gVGhlIGAtLWxpbmUtcG9yY2VsYWluYCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gb3V0cHV0IGZ1bGwKK2NvbW1pdCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBsaW5lLCBhbGxvd2luZyBzaW1wbGVyIChidXQgbGVzcyBlZmZpY2llbnQpCit1c2FnZSBsaWtlOgorCisJIyBjb3VudCB0aGUgbnVtYmVyIG9mIGxpbmVzIGF0dHJpYnV0ZWQgdG8gZWFjaCBhdXRob3IKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBmaWxlIHwKKwlzZWQgLW4gJ3MvXmF1dGhvciAvL3AnIHwKKwlzb3J0IHwgdW5pcSAtYyB8IHNvcnQgLXJuCisKKworU1BFQ0lGWUlORyBSQU5HRVMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSAnZ2l0IGJsYW1lJyBhbmQgJ2dpdCBhbm5vdGF0ZScgaW4gb2xkZXIgdmVyc2lvbnMgb2YgZ2l0LCB0aGUgZXh0ZW50CitvZiB0aGUgYW5ub3RhdGlvbiBjYW4gYmUgbGltaXRlZCB0byBib3RoIGxpbmUgcmFuZ2VzIGFuZCByZXZpc2lvbgorcmFuZ2VzLiAgV2hlbiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gZmluZGluZyB0aGUgb3JpZ2luIGZvcgorbGluZXMgNDAtNjAgZm9yIGZpbGUgYGZvb2AsIHlvdSBjYW4gdXNlIHRoZSBgLUxgIG9wdGlvbiBsaWtlIHNvCisodGhleSBtZWFuIHRoZSBzYW1lIHRoaW5nIC0tIGJvdGggYXNrIGZvciAyMSBsaW5lcyBzdGFydGluZyBhdAorbGluZSA0MCk6CisKKwlnaXQgYmxhbWUgLUwgNDAsNjAgZm9vCisJZ2l0IGJsYW1lIC1MIDQwLCsyMSBmb28KKworQWxzbyB5b3UgY2FuIHVzZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzcGVjaWZ5IHRoZSBsaW5lIHJhbmdlOgorCisJZ2l0IGJsYW1lIC1MICcvXnN1YiBoZWxsbyB7LywvXn0kLycgZm9vCisKK3doaWNoIGxpbWl0cyB0aGUgYW5ub3RhdGlvbiB0byB0aGUgYm9keSBvZiB0aGUgYGhlbGxvYCBzdWJyb3V0aW5lLgorCitXaGVuIHlvdSBhcmUgbm90IGludGVyZXN0ZWQgaW4gY2hhbmdlcyBvbGRlciB0aGFuIHZlcnNpb24KK3YyLjYuMTgsIG9yIGNoYW5nZXMgb2xkZXIgdGhhbiAzIHdlZWtzLCB5b3UgY2FuIHVzZSByZXZpc2lvbgorcmFuZ2Ugc3BlY2lmaWVycyAgc2ltaWxhciB0byAnZ2l0IHJldi1saXN0JzoKKworCWdpdCBibGFtZSB2Mi42LjE4Li4gLS0gZm9vCisJZ2l0IGJsYW1lIC0tc2luY2U9My53ZWVrcyAtLSBmb28KKworV2hlbiByZXZpc2lvbiByYW5nZSBzcGVjaWZpZXJzIGFyZSB1c2VkIHRvIGxpbWl0IHRoZSBhbm5vdGF0aW9uLAorbGluZXMgdGhhdCBoYXZlIG5vdCBjaGFuZ2VkIHNpbmNlIHRoZSByYW5nZSBib3VuZGFyeSAoZWl0aGVyIHRoZQorY29tbWl0IHYyLjYuMTggb3IgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCB0aGF0IGlzIG1vcmUgdGhhbiAzCit3ZWVrcyBvbGQgaW4gdGhlIGFib3ZlIGV4YW1wbGUpIGFyZSBibGFtZWQgZm9yIHRoYXQgcmFuZ2UKK2JvdW5kYXJ5IGNvbW1pdC4KKworQSBwYXJ0aWN1bGFybHkgdXNlZnVsIHdheSBpcyB0byBzZWUgaWYgYW4gYWRkZWQgZmlsZSBoYXMgbGluZXMKK2NyZWF0ZWQgYnkgY29weS1hbmQtcGFzdGUgZnJvbSBleGlzdGluZyBmaWxlcy4gIFNvbWV0aW1lcyB0aGlzCitpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2ZWxvcGVyIHdhcyBiZWluZyBzbG9wcHkgYW5kIGRpZCBub3QKK3JlZmFjdG9yIHRoZSBjb2RlIHByb3Blcmx5LiAgWW91IGNhbiBmaXJzdCBmaW5kIHRoZSBjb21taXQgdGhhdAoraW50cm9kdWNlZCB0aGUgZmlsZSB3aXRoOgorCisJZ2l0IGxvZyAtLWRpZmYtZmlsdGVyPUEgLS1wcmV0dHk9c2hvcnQgLS0gZm9vCisKK2FuZCB0aGVuIGFubm90YXRlIHRoZSBjaGFuZ2UgYmV0d2VlbiB0aGUgY29tbWl0IGFuZCBpdHMKK3BhcmVudHMsIHVzaW5nIGBjb21taXReIWAgbm90YXRpb246CisKKwlnaXQgYmxhbWUgLUMgLUMgLWYgJGNvbW1pdF4hIC0tIGZvbworCisKK0lOQ1JFTUVOVEFMIE9VVFBVVAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gY2FsbGVkIHdpdGggYC0taW5jcmVtZW50YWxgIG9wdGlvbiwgdGhlIGNvbW1hbmQgb3V0cHV0cyB0aGUKK3Jlc3VsdCBhcyBpdCBpcyBidWlsdC4gIFRoZSBvdXRwdXQgZ2VuZXJhbGx5IHdpbGwgdGFsayBhYm91dAorbGluZXMgdG91Y2hlZCBieSBtb3JlIHJlY2VudCBjb21taXRzIGZpcnN0IChpLmUuIHRoZSBsaW5lcyB3aWxsCitiZSBhbm5vdGF0ZWQgb3V0IG9mIG9yZGVyKSBhbmQgaXMgbWVhbnQgdG8gYmUgdXNlZCBieQoraW50ZXJhY3RpdmUgdmlld2Vycy4KKworVGhlIG91dHB1dCBmb3JtYXQgaXMgc2ltaWxhciB0byB0aGUgUG9yY2VsYWluIGZvcm1hdCwgYnV0IGl0Citkb2VzIG5vdCBjb250YWluIHRoZSBhY3R1YWwgbGluZXMgZnJvbSB0aGUgZmlsZSB0aGF0IGlzIGJlaW5nCithbm5vdGF0ZWQuCisKKy4gRWFjaCBibGFtZSBlbnRyeSBhbHdheXMgc3RhcnRzIHdpdGggYSBsaW5lIG9mOgorCisJPDQwLWJ5dGUgaGV4IHNoYTE+IDxzb3VyY2VsaW5lPiA8cmVzdWx0bGluZT4gPG51bV9saW5lcz4KKysKK0xpbmUgbnVtYmVycyBjb3VudCBmcm9tIDEuCisKKy4gVGhlIGZpcnN0IHRpbWUgdGhhdCBhIGNvbW1pdCBzaG93cyB1cCBpbiB0aGUgc3RyZWFtLCBpdCBoYXMgdmFyaW91cworICBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBpdCBwcmludGVkIG91dCB3aXRoIGEgb25lLXdvcmQgdGFnIGF0IHRoZQorICBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIGRlc2NyaWJpbmcgdGhlIGV4dHJhIGNvbW1pdCBpbmZvcm1hdGlvbiAoYXV0aG9yLAorICBlbWFpbCwgY29tbWl0dGVyLCBkYXRlcywgc3VtbWFyeSwgZXRjLikuCisKKy4gVW5saWtlIHRoZSBQb3JjZWxhaW4gZm9ybWF0LCB0aGUgZmlsZW5hbWUgaW5mb3JtYXRpb24gaXMgYWx3YXlzCisgIGdpdmVuIGFuZCB0ZXJtaW5hdGVzIHRoZSBlbnRyeToKKworCSJmaWxlbmFtZSIgPHdoaXRlc3BhY2UtcXVvdGVkLWZpbGVuYW1lLWdvZXMtaGVyZT4KKysKK2FuZCB0aHVzIGl0IGlzIHJlYWxseSBxdWl0ZSBlYXN5IHRvIHBhcnNlIGZvciBzb21lIGxpbmUtIGFuZCB3b3JkLW9yaWVudGVkCitwYXJzZXIgKHdoaWNoIHNob3VsZCBiZSBxdWl0ZSBuYXR1cmFsIGZvciBtb3N0IHNjcmlwdGluZyBsYW5ndWFnZXMpLgorKworW05PVEVdCitGb3IgcGVvcGxlIHdobyBkbyBwYXJzaW5nOiB0byBtYWtlIGl0IG1vcmUgcm9idXN0LCBqdXN0IGlnbm9yZSBhbnkKK2xpbmVzIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0IG9uZSAoIjxzaGExPiIgYW5kICJmaWxlbmFtZSIgbGluZXMpCit3aGVyZSB5b3UgZG8gbm90IHJlY29nbml6ZSB0aGUgdGFnIHdvcmRzIChvciBjYXJlIGFib3V0IHRoYXQgcGFydGljdWxhcgorb25lKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAiZXh0ZW5kZWQgaW5mb3JtYXRpb24iIGxpbmVzLiBUaGF0IHdheSwgaWYKK3RoZXJlIGlzIGV2ZXIgYWRkZWQgaW5mb3JtYXRpb24gKGxpa2UgdGhlIGNvbW1pdCBlbmNvZGluZyBvciBleHRlbmRlZAorY29tbWl0IGNvbW1lbnRhcnkpLCBhIGJsYW1lIHZpZXdlciB3aWxsIG5vdCBjYXJlLgorCisKK01BUFBJTkcgQVVUSE9SUworLS0tLS0tLS0tLS0tLS0tCisKK2luY2x1ZGU6Om1haWxtYXAudHh0W10KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWFubm90YXRlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhMjI1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKQEAgLTAsMCArMSwyODYgQEAKK2dpdC1icmFuY2goMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWJyYW5jaCAtIExpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBicmFuY2gnIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy1yIHwgLWFdCisJWy0tbGlzdF0gWy12IFstLWFiYnJldj08bGVuZ3RoPiB8IC0tbm8tYWJicmV2XV0KKwlbLS1jb2x1bW5bPTxvcHRpb25zPl0gfCAtLW5vLWNvbHVtbl0KKwlbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQgfCAtLWNvbnRhaW5zKSBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXQorJ2dpdCBicmFuY2gnIFstLXNldC11cHN0cmVhbSB8IC0tdHJhY2sgfCAtLW5vLXRyYWNrXSBbLWxdIFstZl0gPGJyYW5jaG5hbWU+IFs8c3RhcnQtcG9pbnQ+XQorJ2dpdCBicmFuY2gnICgtLXNldC11cHN0cmVhbS10bz08dXBzdHJlYW0+IHwgLXUgPHVwc3RyZWFtPikgWzxicmFuY2huYW1lPl0KKydnaXQgYnJhbmNoJyAtLXVuc2V0LXVwc3RyZWFtIFs8YnJhbmNobmFtZT5dCisnZ2l0IGJyYW5jaCcgKC1tIHwgLU0pIFs8b2xkYnJhbmNoPl0gPG5ld2JyYW5jaD4KKydnaXQgYnJhbmNoJyAoLWQgfCAtRCkgWy1yXSA8YnJhbmNobmFtZT4uLi4KKydnaXQgYnJhbmNoJyAtLWVkaXQtZGVzY3JpcHRpb24gWzxicmFuY2huYW1lPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1dpdGggbm8gYXJndW1lbnRzLCBleGlzdGluZyBicmFuY2hlcyBhcmUgbGlzdGVkIGFuZCB0aGUgY3VycmVudCBicmFuY2ggd2lsbAorYmUgaGlnaGxpZ2h0ZWQgd2l0aCBhbiBhc3Rlcmlzay4gIE9wdGlvbiBgLXJgIGNhdXNlcyB0aGUgcmVtb3RlLXRyYWNraW5nCiticmFuY2hlcyB0byBiZSBsaXN0ZWQsIGFuZCBvcHRpb24gYC1hYCBzaG93cyBib3RoLiBUaGlzIGxpc3QgbW9kZSBpcyBhbHNvCithY3RpdmF0ZWQgYnkgdGhlIGAtLWxpc3RgIG9wdGlvbiAoc2VlIGJlbG93KS4KKzxwYXR0ZXJuPiByZXN0cmljdHMgdGhlIG91dHB1dCB0byBtYXRjaGluZyBicmFuY2hlcywgdGhlIHBhdHRlcm4gaXMgYSBzaGVsbAord2lsZGNhcmQgKGkuZS4sIG1hdGNoZWQgdXNpbmcgZm5tYXRjaCgzKSkuCitNdWx0aXBsZSBwYXR0ZXJucyBtYXkgYmUgZ2l2ZW47IGlmIGFueSBvZiB0aGVtIG1hdGNoZXMsIHRoZSBicmFuY2ggaXMgc2hvd24uCisKK1dpdGggYC0tY29udGFpbnNgLCBzaG93cyBvbmx5IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIG5hbWVkIGNvbW1pdAorKGluIG90aGVyIHdvcmRzLCB0aGUgYnJhbmNoZXMgd2hvc2UgdGlwIGNvbW1pdHMgYXJlIGRlc2NlbmRhbnRzIG9mIHRoZQorbmFtZWQgY29tbWl0KS4gIFdpdGggYC0tbWVyZ2VkYCwgb25seSBicmFuY2hlcyBtZXJnZWQgaW50byB0aGUgbmFtZWQKK2NvbW1pdCAoaS5lLiB0aGUgYnJhbmNoZXMgd2hvc2UgdGlwIGNvbW1pdHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBuYW1lZAorY29tbWl0KSB3aWxsIGJlIGxpc3RlZC4gIFdpdGggYC0tbm8tbWVyZ2VkYCBvbmx5IGJyYW5jaGVzIG5vdCBtZXJnZWQgaW50bwordGhlIG5hbWVkIGNvbW1pdCB3aWxsIGJlIGxpc3RlZC4gIElmIHRoZSA8Y29tbWl0PiBhcmd1bWVudCBpcyBtaXNzaW5nIGl0CitkZWZhdWx0cyB0byAnSEVBRCcgKGkuZS4gdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2gpLgorCitUaGUgY29tbWFuZCdzIHNlY29uZCBmb3JtIGNyZWF0ZXMgYSBuZXcgYnJhbmNoIGhlYWQgbmFtZWQgPGJyYW5jaG5hbWU+Cit3aGljaCBwb2ludHMgdG8gdGhlIGN1cnJlbnQgJ0hFQUQnLCBvciA8c3RhcnQtcG9pbnQ+IGlmIGdpdmVuLgorCitOb3RlIHRoYXQgdGhpcyB3aWxsIGNyZWF0ZSB0aGUgbmV3IGJyYW5jaCwgYnV0IGl0IHdpbGwgbm90IHN3aXRjaCB0aGUKK3dvcmtpbmcgdHJlZSB0byBpdDsgdXNlICJnaXQgY2hlY2tvdXQgPG5ld2JyYW5jaD4iIHRvIHN3aXRjaCB0byB0aGUKK25ldyBicmFuY2guCisKK1doZW4gYSBsb2NhbCBicmFuY2ggaXMgc3RhcnRlZCBvZmYgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBnaXQgc2V0cyB1cCB0aGUKK2JyYW5jaCBzbyB0aGF0ICdnaXQgcHVsbCcgd2lsbCBhcHByb3ByaWF0ZWx5IG1lcmdlIGZyb20KK3RoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLiBUaGlzIGJlaGF2aW9yIG1heSBiZSBjaGFuZ2VkIHZpYSB0aGUgZ2xvYmFsCitgYnJhbmNoLmF1dG9zZXR1cG1lcmdlYCBjb25maWd1cmF0aW9uIGZsYWcuIFRoYXQgc2V0dGluZyBjYW4gYmUKK292ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGAtLXRyYWNrYCBhbmQgYC0tbm8tdHJhY2tgIG9wdGlvbnMsIGFuZAorY2hhbmdlZCBsYXRlciB1c2luZyBgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10b2AuCisKK1dpdGggYSBgLW1gIG9yIGAtTWAgb3B0aW9uLCA8b2xkYnJhbmNoPiB3aWxsIGJlIHJlbmFtZWQgdG8gPG5ld2JyYW5jaD4uCitJZiA8b2xkYnJhbmNoPiBoYWQgYSBjb3JyZXNwb25kaW5nIHJlZmxvZywgaXQgaXMgcmVuYW1lZCB0byBtYXRjaAorPG5ld2JyYW5jaD4sIGFuZCBhIHJlZmxvZyBlbnRyeSBpcyBjcmVhdGVkIHRvIHJlbWVtYmVyIHRoZSBicmFuY2gKK3JlbmFtaW5nLiBJZiA8bmV3YnJhbmNoPiBleGlzdHMsIC1NIG11c3QgYmUgdXNlZCB0byBmb3JjZSB0aGUgcmVuYW1lCit0byBoYXBwZW4uCisKK1dpdGggYSBgLWRgIG9yIGAtRGAgb3B0aW9uLCBgPGJyYW5jaG5hbWU+YCB3aWxsIGJlIGRlbGV0ZWQuICBZb3UgbWF5CitzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgYnJhbmNoIGZvciBkZWxldGlvbi4gIElmIHRoZSBicmFuY2ggY3VycmVudGx5CitoYXMgYSByZWZsb2cgdGhlbiB0aGUgcmVmbG9nIHdpbGwgYWxzbyBiZSBkZWxldGVkLgorCitVc2UgYC1yYCB0b2dldGhlciB3aXRoIGAtZGAgdG8gZGVsZXRlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4gTm90ZSwgdGhhdCBpdAorb25seSBtYWtlcyBzZW5zZSB0byBkZWxldGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGlmIHRoZXkgbm8gbG9uZ2VyIGV4aXN0CitpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgb3IgaWYgJ2dpdCBmZXRjaCcgd2FzIGNvbmZpZ3VyZWQgbm90IHRvIGZldGNoCit0aGVtIGFnYWluLiBTZWUgYWxzbyB0aGUgJ3BydW5lJyBzdWJjb21tYW5kIG9mIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXSBmb3IgYQord2F5IHRvIGNsZWFuIHVwIGFsbCBvYnNvbGV0ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisKKworT1BUSU9OUworLS0tLS0tLQorLWQ6OgorLS1kZWxldGU6OgorCURlbGV0ZSBhIGJyYW5jaC4gVGhlIGJyYW5jaCBtdXN0IGJlIGZ1bGx5IG1lcmdlZCBpbiBpdHMKKwl1cHN0cmVhbSBicmFuY2gsIG9yIGluIGBIRUFEYCBpZiBubyB1cHN0cmVhbSB3YXMgc2V0IHdpdGgKKwlgLS10cmFja2Agb3IgYC0tc2V0LXVwc3RyZWFtYC4KKworLUQ6OgorCURlbGV0ZSBhIGJyYW5jaCBpcnJlc3BlY3RpdmUgb2YgaXRzIG1lcmdlZCBzdGF0dXMuCisKKy1sOjoKKy0tY3JlYXRlLXJlZmxvZzo6CisJQ3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2cuICBUaGlzIGFjdGl2YXRlcyByZWNvcmRpbmcgb2YKKwlhbGwgY2hhbmdlcyBtYWRlIHRvIHRoZSBicmFuY2ggcmVmLCBlbmFibGluZyB1c2Ugb2YgZGF0ZQorCWJhc2VkIHNoYTEgZXhwcmVzc2lvbnMgc3VjaCBhcyAiPGJyYW5jaG5hbWU+QFx7eWVzdGVyZGF5fSIuCisJTm90ZSB0aGF0IGluIG5vbi1iYXJlIHJlcG9zaXRvcmllcywgcmVmbG9ncyBhcmUgdXN1YWxseQorCWVuYWJsZWQgYnkgZGVmYXVsdCBieSB0aGUgYGNvcmUubG9nYWxscmVmdXBkYXRlc2AgY29uZmlnIG9wdGlvbi4KKworLWY6OgorLS1mb3JjZTo6CisJUmVzZXQgPGJyYW5jaG5hbWU+IHRvIDxzdGFydHBvaW50PiBpZiA8YnJhbmNobmFtZT4gZXhpc3RzCisJYWxyZWFkeS4gV2l0aG91dCBgLWZgICdnaXQgYnJhbmNoJyByZWZ1c2VzIHRvIGNoYW5nZSBhbiBleGlzdGluZyBicmFuY2guCisKKy1tOjoKKy0tbW92ZTo6CisJTW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlZmxvZy4KKworLU06OgorCU1vdmUvcmVuYW1lIGEgYnJhbmNoIGV2ZW4gaWYgdGhlIG5ldyBicmFuY2ggbmFtZSBhbHJlYWR5IGV4aXN0cy4KKworLS1jb2xvcls9PHdoZW4+XTo6CisJQ29sb3IgYnJhbmNoZXMgdG8gaGlnaGxpZ2h0IGN1cnJlbnQsIGxvY2FsLCBhbmQKKwlyZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisJVGhlIHZhbHVlIG11c3QgYmUgYWx3YXlzICh0aGUgZGVmYXVsdCksIG5ldmVyLCBvciBhdXRvLgorCistLW5vLWNvbG9yOjoKKwlUdXJuIG9mZiBicmFuY2ggY29sb3JzLCBldmVuIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBnaXZlcyB0aGUKKwlkZWZhdWx0IHRvIGNvbG9yIG91dHB1dC4KKwlTYW1lIGFzIGAtLWNvbG9yPW5ldmVyYC4KKworLS1jb2x1bW5bPTxvcHRpb25zPl06OgorLS1uby1jb2x1bW46OgorCURpc3BsYXkgYnJhbmNoIGxpc3RpbmcgaW4gY29sdW1ucy4gU2VlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKwljb2x1bW4uYnJhbmNoIGZvciBvcHRpb24gc3ludGF4LmAtLWNvbHVtbmAgYW5kIGAtLW5vLWNvbHVtbmAKKwl3aXRob3V0IG9wdGlvbnMgYXJlIGVxdWl2YWxlbnQgdG8gJ2Fsd2F5cycgYW5kICduZXZlcicgcmVzcGVjdGl2ZWx5LgorKworVGhpcyBvcHRpb24gaXMgb25seSBhcHBsaWNhYmxlIGluIG5vbi12ZXJib3NlIG1vZGUuCisKKy1yOjoKKy0tcmVtb3Rlczo6CisJTGlzdCBvciBkZWxldGUgKGlmIHVzZWQgd2l0aCAtZCkgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4KKworLWE6OgorLS1hbGw6OgorCUxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYW5kIGxvY2FsIGJyYW5jaGVzLgorCistLWxpc3Q6OgorCUFjdGl2YXRlIHRoZSBsaXN0IG1vZGUuIGBnaXQgYnJhbmNoIDxwYXR0ZXJuPmAgd291bGQgdHJ5IHRvIGNyZWF0ZSBhIGJyYW5jaCwKKwl1c2UgYGdpdCBicmFuY2ggLS1saXN0IDxwYXR0ZXJuPmAgdG8gbGlzdCBtYXRjaGluZyBicmFuY2hlcy4KKworLXY6OgorLXZ2OjoKKy0tdmVyYm9zZTo6CisJV2hlbiBpbiBsaXN0IG1vZGUsCisJc2hvdyBzaGExIGFuZCBjb21taXQgc3ViamVjdCBsaW5lIGZvciBlYWNoIGhlYWQsIGFsb25nIHdpdGgKKwlyZWxhdGlvbnNoaXAgdG8gdXBzdHJlYW0gYnJhbmNoIChpZiBhbnkpLiBJZiBnaXZlbiB0d2ljZSwgcHJpbnQKKwl0aGUgbmFtZSBvZiB0aGUgdXBzdHJlYW0gYnJhbmNoLCBhcyB3ZWxsIChzZWUgYWxzbyBgZ2l0IHJlbW90ZQorCXNob3cgPHJlbW90ZT5gKS4KKworLXE6OgorLS1xdWlldDo6CisJQmUgbW9yZSBxdWlldCB3aGVuIGNyZWF0aW5nIG9yIGRlbGV0aW5nIGEgYnJhbmNoLCBzdXBwcmVzc2luZworCW5vbi1lcnJvciBtZXNzYWdlcy4KKworLS1hYmJyZXY9PGxlbmd0aD46OgorCUFsdGVyIHRoZSBzaGExJ3MgbWluaW11bSBkaXNwbGF5IGxlbmd0aCBpbiB0aGUgb3V0cHV0IGxpc3RpbmcuCisJVGhlIGRlZmF1bHQgdmFsdWUgaXMgNyBhbmQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBjb3JlLmFiYnJldmAKKwljb25maWcgb3B0aW9uLgorCistLW5vLWFiYnJldjo6CisJRGlzcGxheSB0aGUgZnVsbCBzaGExcyBpbiB0aGUgb3V0cHV0IGxpc3RpbmcgcmF0aGVyIHRoYW4gYWJicmV2aWF0aW5nIHRoZW0uCisKKy10OjoKKy0tdHJhY2s6OgorCVdoZW4gY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCBzZXQgdXAgY29uZmlndXJhdGlvbiB0byBtYXJrIHRoZQorCXN0YXJ0LXBvaW50IGJyYW5jaCBhcyAidXBzdHJlYW0iIGZyb20gdGhlIG5ldyBicmFuY2guIFRoaXMKKwljb25maWd1cmF0aW9uIHdpbGwgdGVsbCBnaXQgdG8gc2hvdyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlCisJdHdvIGJyYW5jaGVzIGluIGBnaXQgc3RhdHVzYCBhbmQgYGdpdCBicmFuY2ggLXZgLiBGdXJ0aGVybW9yZSwKKwlpdCBkaXJlY3RzIGBnaXQgcHVsbGAgd2l0aG91dCBhcmd1bWVudHMgdG8gcHVsbCBmcm9tIHRoZQorCXVwc3RyZWFtIHdoZW4gdGhlIG5ldyBicmFuY2ggaXMgY2hlY2tlZCBvdXQuCisrCitUaGlzIGJlaGF2aW9yIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhlIHN0YXJ0IHBvaW50IGlzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4KK1NldCB0aGUgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gYGZhbHNlYCBpZiB5b3UKK3dhbnQgYGdpdCBjaGVja291dGAgYW5kIGBnaXQgYnJhbmNoYCB0byBhbHdheXMgYmVoYXZlIGFzIGlmICctLW5vLXRyYWNrJword2VyZSBnaXZlbi4gU2V0IGl0IHRvIGBhbHdheXNgIGlmIHlvdSB3YW50IHRoaXMgYmVoYXZpb3Igd2hlbiB0aGUKK3N0YXJ0LXBvaW50IGlzIGVpdGhlciBhIGxvY2FsIG9yIHJlbW90ZS10cmFja2luZyBicmFuY2guCisKKy0tbm8tdHJhY2s6OgorCURvIG5vdCBzZXQgdXAgInVwc3RyZWFtIiBjb25maWd1cmF0aW9uLCBldmVuIGlmIHRoZQorCWJyYW5jaC5hdXRvc2V0dXBtZXJnZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHRydWUuCisKKy0tc2V0LXVwc3RyZWFtOjoKKwlJZiBzcGVjaWZpZWQgYnJhbmNoIGRvZXMgbm90IGV4aXN0IHlldCBvciBpZiBgLS1mb3JjZWAgaGFzIGJlZW4KKwlnaXZlbiwgYWN0cyBleGFjdGx5IGxpa2UgYC0tdHJhY2tgLiBPdGhlcndpc2Ugc2V0cyB1cCBjb25maWd1cmF0aW9uCisJbGlrZSBgLS10cmFja2Agd291bGQgd2hlbiBjcmVhdGluZyB0aGUgYnJhbmNoLCBleGNlcHQgdGhhdCB3aGVyZQorCWJyYW5jaCBwb2ludHMgdG8gaXMgbm90IGNoYW5nZWQuCisKKy11IDx1cHN0cmVhbT46OgorLS1zZXQtdXBzdHJlYW0tdG89PHVwc3RyZWFtPjo6CisJU2V0IHVwIDxicmFuY2huYW1lPidzIHRyYWNraW5nIGluZm9ybWF0aW9uIHNvIDx1cHN0cmVhbT4gaXMKKwljb25zaWRlcmVkIDxicmFuY2huYW1lPidzIHVwc3RyZWFtIGJyYW5jaC4gSWYgbm8gPGJyYW5jaG5hbWU+CisJaXMgc3BlY2lmaWVkLCB0aGVuIGl0IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4KKworLS11bnNldC11cHN0cmVhbTo6CisJUmVtb3ZlIHRoZSB1cHN0cmVhbSBpbmZvcm1hdGlvbiBmb3IgPGJyYW5jaG5hbWU+LiBJZiBubyBicmFuY2gKKwlpcyBzcGVjaWZpZWQgaXQgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorCistLWVkaXQtZGVzY3JpcHRpb246OgorCU9wZW4gYW4gZWRpdG9yIGFuZCBlZGl0IHRoZSB0ZXh0IHRvIGV4cGxhaW4gd2hhdCB0aGUgYnJhbmNoIGlzCisJZm9yLCB0byBiZSB1c2VkIGJ5IHZhcmlvdXMgb3RoZXIgY29tbWFuZHMgKGUuZy4gYHJlcXVlc3QtcHVsbGApLgorCistLWNvbnRhaW5zIFs8Y29tbWl0Pl06OgorCU9ubHkgbGlzdCBicmFuY2hlcyB3aGljaCBjb250YWluIHRoZSBzcGVjaWZpZWQgY29tbWl0IChIRUFECisJaWYgbm90IHNwZWNpZmllZCkuCisKKy0tbWVyZ2VkIFs8Y29tbWl0Pl06OgorCU9ubHkgbGlzdCBicmFuY2hlcyB3aG9zZSB0aXBzIGFyZSByZWFjaGFibGUgZnJvbSB0aGUKKwlzcGVjaWZpZWQgY29tbWl0IChIRUFEIGlmIG5vdCBzcGVjaWZpZWQpLgorCistLW5vLW1lcmdlZCBbPGNvbW1pdD5dOjoKKwlPbmx5IGxpc3QgYnJhbmNoZXMgd2hvc2UgdGlwcyBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHRoZQorCXNwZWNpZmllZCBjb21taXQgKEhFQUQgaWYgbm90IHNwZWNpZmllZCkuCisKKzxicmFuY2huYW1lPjo6CisJVGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB0byBjcmVhdGUgb3IgZGVsZXRlLgorCVRoZSBuZXcgYnJhbmNoIG5hbWUgbXVzdCBwYXNzIGFsbCBjaGVja3MgZGVmaW5lZCBieQorCWxpbmtnaXQ6Z2l0LWNoZWNrLXJlZi1mb3JtYXRbMV0uICBTb21lIG9mIHRoZXNlIGNoZWNrcworCW1heSByZXN0cmljdCB0aGUgY2hhcmFjdGVycyBhbGxvd2VkIGluIGEgYnJhbmNoIG5hbWUuCisKKzxzdGFydC1wb2ludD46OgorCVRoZSBuZXcgYnJhbmNoIGhlYWQgd2lsbCBwb2ludCB0byB0aGlzIGNvbW1pdC4gIEl0IG1heSBiZQorCWdpdmVuIGFzIGEgYnJhbmNoIG5hbWUsIGEgY29tbWl0LWlkLCBvciBhIHRhZy4gIElmIHRoaXMKKwlvcHRpb24gaXMgb21pdHRlZCwgdGhlIGN1cnJlbnQgSEVBRCB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKworPG9sZGJyYW5jaD46OgorCVRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGJyYW5jaCB0byByZW5hbWUuCisKKzxuZXdicmFuY2g+OjoKKwlUaGUgbmV3IG5hbWUgZm9yIGFuIGV4aXN0aW5nIGJyYW5jaC4gVGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGZvcgorCTxicmFuY2huYW1lPiBhcHBseS4KKworCitFeGFtcGxlcworLS0tLS0tLS0KKworU3RhcnQgZGV2ZWxvcG1lbnQgZnJvbSBhIGtub3duIHRhZzo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vLi4uL2xpbnV4LTIuNiBteTIuNgorJCBjZCBteTIuNgorJCBnaXQgYnJhbmNoIG15Mi42LjE0IHYyLjYuMTQgICA8MT4KKyQgZ2l0IGNoZWNrb3V0IG15Mi42LjE0CistLS0tLS0tLS0tLS0KKysKKzwxPiBUaGlzIHN0ZXAgYW5kIHRoZSBuZXh0IG9uZSBjb3VsZCBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIHN0ZXAgd2l0aAorImNoZWNrb3V0IC1iIG15Mi42LjE0IHYyLjYuMTQiLgorCitEZWxldGUgYW4gdW5uZWVkZWQgYnJhbmNoOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvLi4uL2dpdC5naXQgbXkuZ2l0CiskIGNkIG15LmdpdAorJCBnaXQgYnJhbmNoIC1kIC1yIG9yaWdpbi90b2RvIG9yaWdpbi9odG1sIG9yaWdpbi9tYW4gICA8MT4KKyQgZ2l0IGJyYW5jaCAtRCB0ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBEZWxldGUgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyAidG9kbyIsICJodG1sIiBhbmQgIm1hbiIuIFRoZSBuZXh0CisnZmV0Y2gnIG9yICdwdWxsJyB3aWxsIGNyZWF0ZSB0aGVtIGFnYWluIHVubGVzcyB5b3UgY29uZmlndXJlIHRoZW0gbm90IHRvLgorU2VlIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorPDI+IERlbGV0ZSB0aGUgInRlc3QiIGJyYW5jaCBldmVuIGlmIHRoZSAibWFzdGVyIiBicmFuY2ggKG9yIHdoaWNoZXZlciBicmFuY2gKK2lzIGN1cnJlbnRseSBjaGVja2VkIG91dCkgZG9lcyBub3QgaGF2ZSBhbGwgY29tbWl0cyBmcm9tIHRoZSB0ZXN0IGJyYW5jaC4KKworCitOb3RlcworLS0tLS0KKworSWYgeW91IGFyZSBjcmVhdGluZyBhIGJyYW5jaCB0aGF0IHlvdSB3YW50IHRvIGNoZWNrb3V0IGltbWVkaWF0ZWx5LCBpdCBpcworZWFzaWVyIHRvIHVzZSB0aGUgZ2l0IGNoZWNrb3V0IGNvbW1hbmQgd2l0aCBpdHMgYC1iYCBvcHRpb24gdG8gY3JlYXRlCithIGJyYW5jaCBhbmQgY2hlY2sgaXQgb3V0IHdpdGggYSBzaW5nbGUgY29tbWFuZC4KKworVGhlIG9wdGlvbnMgYC0tY29udGFpbnNgLCBgLS1tZXJnZWRgIGFuZCBgLS1uby1tZXJnZWRgIHNlcnZlIHRocmVlIHJlbGF0ZWQKK2J1dCBkaWZmZXJlbnQgcHVycG9zZXM6CisKKy0gYC0tY29udGFpbnMgPGNvbW1pdD5gIGlzIHVzZWQgdG8gZmluZCBhbGwgYnJhbmNoZXMgd2hpY2ggd2lsbCBuZWVkCisgIHNwZWNpYWwgYXR0ZW50aW9uIGlmIDxjb21taXQ+IHdlcmUgdG8gYmUgcmViYXNlZCBvciBhbWVuZGVkLCBzaW5jZSB0aG9zZQorICBicmFuY2hlcyBjb250YWluIHRoZSBzcGVjaWZpZWQgPGNvbW1pdD4uCisKKy0gYC0tbWVyZ2VkYCBpcyB1c2VkIHRvIGZpbmQgYWxsIGJyYW5jaGVzIHdoaWNoIGNhbiBiZSBzYWZlbHkgZGVsZXRlZCwKKyAgc2luY2UgdGhvc2UgYnJhbmNoZXMgYXJlIGZ1bGx5IGNvbnRhaW5lZCBieSBIRUFELgorCistIGAtLW5vLW1lcmdlZGAgaXMgdXNlZCB0byBmaW5kIGJyYW5jaGVzIHdoaWNoIGFyZSBjYW5kaWRhdGVzIGZvciBtZXJnaW5nCisgIGludG8gSEVBRCwgc2luY2UgdGhvc2UgYnJhbmNoZXMgYXJlIG5vdCBmdWxseSBjb250YWluZWQgYnkgSEVBRC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVjay1yZWYtZm9ybWF0WzFdLAorbGlua2dpdDpnaXQtZmV0Y2hbMV0sCitsaW5rZ2l0OmdpdC1yZW1vdGVbMV0sCitsaW5rOnVzZXItbWFudWFsLmh0bWwjd2hhdC1pcy1hLWJyYW5jaFtgYFVuZGVyc3RhbmRpbmcgaGlzdG9yeTogV2hhdCBpcworYSBicmFuY2g/JyddIGluIHRoZSBHaXQgVXNlcidzIE1hbnVhbC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmE2YjBhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dApAQCAtMCwwICsxLDIwNiBAQAorZ2l0LWJ1bmRsZSgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYnVuZGxlIC0gTW92ZSBvYmplY3RzIGFuZCByZWZzIGJ5IGFyY2hpdmUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYnVuZGxlJyBjcmVhdGUgPGZpbGU+IDxnaXQtcmV2LWxpc3QtYXJncz4KKydnaXQgYnVuZGxlJyB2ZXJpZnkgPGZpbGU+CisnZ2l0IGJ1bmRsZScgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0KKydnaXQgYnVuZGxlJyB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1NvbWUgd29ya2Zsb3dzIHJlcXVpcmUgdGhhdCBvbmUgb3IgbW9yZSBicmFuY2hlcyBvZiBkZXZlbG9wbWVudCBvbiBvbmUKK21hY2hpbmUgYmUgcmVwbGljYXRlZCBvbiBhbm90aGVyIG1hY2hpbmUsIGJ1dCB0aGUgdHdvIG1hY2hpbmVzIGNhbm5vdAorYmUgZGlyZWN0bHkgY29ubmVjdGVkLCBhbmQgdGhlcmVmb3JlIHRoZSBpbnRlcmFjdGl2ZSBnaXQgcHJvdG9jb2xzIChnaXQsCitzc2gsIHJzeW5jLCBodHRwKSBjYW5ub3QgYmUgdXNlZC4gIFRoaXMgY29tbWFuZCBwcm92aWRlcyBzdXBwb3J0IGZvcgorJ2dpdCBmZXRjaCcgYW5kICdnaXQgcHVsbCcgdG8gb3BlcmF0ZSBieSBwYWNrYWdpbmcgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcworaW4gYW4gYXJjaGl2ZSBhdCB0aGUgb3JpZ2luYXRpbmcgbWFjaGluZSwgdGhlbiBpbXBvcnRpbmcgdGhvc2UgaW50bworYW5vdGhlciByZXBvc2l0b3J5IHVzaW5nICdnaXQgZmV0Y2gnIGFuZCAnZ2l0IHB1bGwnCithZnRlciBtb3ZpbmcgdGhlIGFyY2hpdmUgYnkgc29tZSBtZWFucyAoZS5nLiwgYnkgc25lYWtlcm5ldCkuICBBcyBubworZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgcmVwb3NpdG9yaWVzIGV4aXN0cywgdGhlIHVzZXIgbXVzdCBzcGVjaWZ5IGEKK2Jhc2lzIGZvciB0aGUgYnVuZGxlIHRoYXQgaXMgaGVsZCBieSB0aGUgZGVzdGluYXRpb24gcmVwb3NpdG9yeTogdGhlCitidW5kbGUgYXNzdW1lcyB0aGF0IGFsbCBvYmplY3RzIGluIHRoZSBiYXNpcyBhcmUgYWxyZWFkeSBpbiB0aGUKK2Rlc3RpbmF0aW9uIHJlcG9zaXRvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKworY3JlYXRlIDxmaWxlPjo6CisJVXNlZCB0byBjcmVhdGUgYSBidW5kbGUgbmFtZWQgJ2ZpbGUnLiAgVGhpcyByZXF1aXJlcyB0aGUKKwknZ2l0LXJldi1saXN0LWFyZ3MnIGFyZ3VtZW50cyB0byBkZWZpbmUgdGhlIGJ1bmRsZSBjb250ZW50cy4KKwordmVyaWZ5IDxmaWxlPjo6CisJVXNlZCB0byBjaGVjayB0aGF0IGEgYnVuZGxlIGZpbGUgaXMgdmFsaWQgYW5kIHdpbGwgYXBwbHkKKwljbGVhbmx5IHRvIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuICBUaGlzIGluY2x1ZGVzIGNoZWNrcyBvbiB0aGUKKwlidW5kbGUgZm9ybWF0IGl0c2VsZiBhcyB3ZWxsIGFzIGNoZWNraW5nIHRoYXQgdGhlIHByZXJlcXVpc2l0ZQorCWNvbW1pdHMgZXhpc3QgYW5kIGFyZSBmdWxseSBsaW5rZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4KKwknZ2l0IGJ1bmRsZScgcHJpbnRzIGEgbGlzdCBvZiBtaXNzaW5nIGNvbW1pdHMsIGlmIGFueSwgYW5kIGV4aXRzCisJd2l0aCBhIG5vbi16ZXJvIHN0YXR1cy4KKworbGlzdC1oZWFkcyA8ZmlsZT46OgorCUxpc3RzIHRoZSByZWZlcmVuY2VzIGRlZmluZWQgaW4gdGhlIGJ1bmRsZS4gIElmIGZvbGxvd2VkIGJ5IGEKKwlsaXN0IG9mIHJlZmVyZW5jZXMsIG9ubHkgcmVmZXJlbmNlcyBtYXRjaGluZyB0aG9zZSBnaXZlbiBhcmUKKwlwcmludGVkIG91dC4KKwordW5idW5kbGUgPGZpbGU+OjoKKwlQYXNzZXMgdGhlIG9iamVjdHMgaW4gdGhlIGJ1bmRsZSB0byAnZ2l0IGluZGV4LXBhY2snCisJZm9yIHN0b3JhZ2UgaW4gdGhlIHJlcG9zaXRvcnksIHRoZW4gcHJpbnRzIHRoZSBuYW1lcyBvZiBhbGwKKwlkZWZpbmVkIHJlZmVyZW5jZXMuIElmIGEgbGlzdCBvZiByZWZlcmVuY2VzIGlzIGdpdmVuLCBvbmx5CisJcmVmZXJlbmNlcyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgbGlzdCBhcmUgcHJpbnRlZC4gVGhpcyBjb21tYW5kIGlzCisJcmVhbGx5IHBsdW1iaW5nLCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb25seSBieSAnZ2l0IGZldGNoJy4KKworPGdpdC1yZXYtbGlzdC1hcmdzPjo6CisJQSBsaXN0IG9mIGFyZ3VtZW50cywgYWNjZXB0YWJsZSB0byAnZ2l0IHJldi1wYXJzZScgYW5kCisJJ2dpdCByZXYtbGlzdCcgKGFuZCBjb250YWluaW5nIGEgbmFtZWQgcmVmLCBzZWUgU1BFQ0lGWUlORyBSRUZFUkVOQ0VTCisJYmVsb3cpLCB0aGF0IHNwZWNpZmllcyB0aGUgc3BlY2lmaWMgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcworCXRvIHRyYW5zcG9ydC4gIEZvciBleGFtcGxlLCBgbWFzdGVyfjEwLi5tYXN0ZXJgIGNhdXNlcyB0aGUKKwljdXJyZW50IG1hc3RlciByZWZlcmVuY2UgdG8gYmUgcGFja2FnZWQgYWxvbmcgd2l0aCBhbGwgb2JqZWN0cworCWFkZGVkIHNpbmNlIGl0cyAxMHRoIGFuY2VzdG9yIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGV4cGxpY2l0CisJbGltaXQgdG8gdGhlIG51bWJlciBvZiByZWZlcmVuY2VzIGFuZCBvYmplY3RzIHRoYXQgbWF5IGJlCisJcGFja2FnZWQuCisKKworWzxyZWZuYW1lPi4uLl06OgorCUEgbGlzdCBvZiByZWZlcmVuY2VzIHVzZWQgdG8gbGltaXQgdGhlIHJlZmVyZW5jZXMgcmVwb3J0ZWQgYXMKKwlhdmFpbGFibGUuIFRoaXMgaXMgcHJpbmNpcGFsbHkgb2YgdXNlIHRvICdnaXQgZmV0Y2gnLCB3aGljaAorCWV4cGVjdHMgdG8gcmVjZWl2ZSBvbmx5IHRob3NlIHJlZmVyZW5jZXMgYXNrZWQgZm9yIGFuZCBub3QKKwluZWNlc3NhcmlseSBldmVyeXRoaW5nIGluIHRoZSBwYWNrIChpbiB0aGlzIGNhc2UsICdnaXQgYnVuZGxlJyBhY3RzCisJbGlrZSAnZ2l0IGZldGNoLXBhY2snKS4KKworU1BFQ0lGWUlORyBSRUZFUkVOQ0VTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJ2dpdCBidW5kbGUnIHdpbGwgb25seSBwYWNrYWdlIHJlZmVyZW5jZXMgdGhhdCBhcmUgc2hvd24gYnkKKydnaXQgc2hvdy1yZWYnOiB0aGlzIGluY2x1ZGVzIGhlYWRzLCB0YWdzLCBhbmQgcmVtb3RlIGhlYWRzLiAgUmVmZXJlbmNlcworc3VjaCBhcyBgbWFzdGVyfjFgIGNhbm5vdCBiZSBwYWNrYWdlZCwgYnV0IGFyZSBwZXJmZWN0bHkgc3VpdGFibGUgZm9yCitkZWZpbmluZyB0aGUgYmFzaXMuICBNb3JlIHRoYW4gb25lIHJlZmVyZW5jZSBtYXkgYmUgcGFja2FnZWQsIGFuZCBtb3JlCit0aGFuIG9uZSBiYXNpcyBjYW4gYmUgc3BlY2lmaWVkLiAgVGhlIG9iamVjdHMgcGFja2FnZWQgYXJlIHRob3NlIG5vdAorY29udGFpbmVkIGluIHRoZSB1bmlvbiBvZiB0aGUgZ2l2ZW4gYmFzZXMuICBFYWNoIGJhc2lzIGNhbiBiZQorc3BlY2lmaWVkIGV4cGxpY2l0bHkgKGUuZy4gYF5tYXN0ZXJ+MTBgKSwgb3IgaW1wbGljaXRseSAoZS5nLgorYG1hc3Rlcn4xMC4ubWFzdGVyYCwgYC0tc2luY2U9MTAuZGF5cy5hZ28gbWFzdGVyYCkuCisKK0l0IGlzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhlIGJhc2lzIHVzZWQgYmUgaGVsZCBieSB0aGUgZGVzdGluYXRpb24uCitJdCBpcyBva2F5IHRvIGVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uLCBjYXVzaW5nIHRoZSBidW5kbGUgZmlsZQordG8gY29udGFpbiBvYmplY3RzIGFscmVhZHkgaW4gdGhlIGRlc3RpbmF0aW9uLCBhcyB0aGVzZSBhcmUgaWdub3JlZAord2hlbiB1bnBhY2tpbmcgYXQgdGhlIGRlc3RpbmF0aW9uLgorCitFWEFNUExFCistLS0tLS0tCisKK0Fzc3VtZSB5b3Ugd2FudCB0byB0cmFuc2ZlciB0aGUgaGlzdG9yeSBmcm9tIGEgcmVwb3NpdG9yeSBSMSBvbiBtYWNoaW5lIEEKK3RvIGFub3RoZXIgcmVwb3NpdG9yeSBSMiBvbiBtYWNoaW5lIEIuCitGb3Igd2hhdGV2ZXIgcmVhc29uLCBkaXJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIEEgYW5kIEIgaXMgbm90IGFsbG93ZWQsCitidXQgd2UgY2FuIG1vdmUgZGF0YSBmcm9tIEEgdG8gQiB2aWEgc29tZSBtZWNoYW5pc20gKENELCBlbWFpbCwgZXRjLikuCitXZSB3YW50IHRvIHVwZGF0ZSBSMiB3aXRoIGRldmVsb3BtZW50IG1hZGUgb24gdGhlIGJyYW5jaCBtYXN0ZXIgaW4gUjEuCisKK1RvIGJvb3RzdHJhcCB0aGUgcHJvY2VzcywgeW91IGNhbiBmaXJzdCBjcmVhdGUgYSBidW5kbGUgdGhhdCBkb2VzIG5vdCBoYXZlCithbnkgYmFzaXMuIFlvdSBjYW4gdXNlIGEgdGFnIHRvIHJlbWVtYmVyIHVwIHRvIHdoYXQgY29tbWl0IHlvdSBsYXN0Citwcm9jZXNzZWQsIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzeSB0byBsYXRlciB1cGRhdGUgdGhlIG90aGVyIHJlcG9zaXRvcnkKK3dpdGggYW4gaW5jcmVtZW50YWwgYnVuZGxlOgorCistLS0tLS0tLS0tLS0tLS0tCittYWNoaW5lQSQgY2QgUjEKK21hY2hpbmVBJCBnaXQgYnVuZGxlIGNyZWF0ZSBmaWxlLmJ1bmRsZSBtYXN0ZXIKK21hY2hpbmVBJCBnaXQgdGFnIC1mIGxhc3RSMmJ1bmRsZSBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiB5b3UgdHJhbnNmZXIgZmlsZS5idW5kbGUgdG8gdGhlIHRhcmdldCBtYWNoaW5lIEIuIElmIHlvdSBhcmUgY3JlYXRpbmcKK3RoZSByZXBvc2l0b3J5IG9uIG1hY2hpbmUgQiwgdGhlbiB5b3UgY2FuIGNsb25lIGZyb20gdGhlIGJ1bmRsZSBhcyBpZiBpdAord2VyZSBhIHJlbW90ZSByZXBvc2l0b3J5IGluc3RlYWQgb2YgY3JlYXRpbmcgYW4gZW1wdHkgcmVwb3NpdG9yeSBhbmQgdGhlbgorcHVsbGluZyBvciBmZXRjaGluZyBvYmplY3RzIGZyb20gdGhlIGJ1bmRsZToKKworLS0tLS0tLS0tLS0tLS0tLQorbWFjaGluZUIkIGdpdCBjbG9uZSAvaG9tZS9tZS90bXAvZmlsZS5idW5kbGUgUjIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGRlZmluZSBhIHJlbW90ZSBjYWxsZWQgIm9yaWdpbiIgaW4gdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5IHRoYXQKK2xldHMgeW91IGZldGNoIGFuZCBwdWxsIGZyb20gdGhlIGJ1bmRsZS4gVGhlICRHSVRfRElSL2NvbmZpZyBmaWxlIGluIFIyIHdpbGwKK2hhdmUgYW4gZW50cnkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tyZW1vdGUgIm9yaWdpbiJdCisgICAgdXJsID0gL2hvbWUvbWUvdG1wL2ZpbGUuYnVuZGxlCisgICAgZmV0Y2ggPSByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gdXBkYXRlIHRoZSByZXN1bHRpbmcgbWluZS5naXQgcmVwb3NpdG9yeSwgeW91IGNhbiBmZXRjaCBvciBwdWxsIGFmdGVyCityZXBsYWNpbmcgdGhlIGJ1bmRsZSBzdG9yZWQgYXQgL2hvbWUvbWUvdG1wL2ZpbGUuYnVuZGxlIHdpdGggaW5jcmVtZW50YWwKK3VwZGF0ZXMuCisKK0FmdGVyIHdvcmtpbmcgc29tZSBtb3JlIGluIHRoZSBvcmlnaW5hbCByZXBvc2l0b3J5LCB5b3UgY2FuIGNyZWF0ZSBhbgoraW5jcmVtZW50YWwgYnVuZGxlIHRvIHVwZGF0ZSB0aGUgb3RoZXIgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLQorbWFjaGluZUEkIGNkIFIxCittYWNoaW5lQSQgZ2l0IGJ1bmRsZSBjcmVhdGUgZmlsZS5idW5kbGUgbGFzdFIyYnVuZGxlLi5tYXN0ZXIKK21hY2hpbmVBJCBnaXQgdGFnIC1mIGxhc3RSMmJ1bmRsZSBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IHRoZW4gdHJhbnNmZXIgdGhlIGJ1bmRsZSB0byB0aGUgb3RoZXIgbWFjaGluZSB0byByZXBsYWNlCisvaG9tZS9tZS90bXAvZmlsZS5idW5kbGUsIGFuZCBwdWxsIGZyb20gaXQuCisKKy0tLS0tLS0tLS0tLS0tLS0KK21hY2hpbmVCJCBjZCBSMgorbWFjaGluZUIkIGdpdCBwdWxsCistLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBrbm93IHVwIHRvIHdoYXQgY29tbWl0IHRoZSBpbnRlbmRlZCByZWNpcGllbnQgcmVwb3NpdG9yeSBzaG91bGQKK2hhdmUgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLCB5b3UgY2FuIHVzZSB0aGF0IGtub3dsZWRnZSB0byBzcGVjaWZ5IHRoZQorYmFzaXMsIGdpdmluZyBhIGN1dC1vZmYgcG9pbnQgdG8gbGltaXQgdGhlIHJldmlzaW9ucyBhbmQgb2JqZWN0cyB0aGF0IGdvCitpbiB0aGUgcmVzdWx0aW5nIGJ1bmRsZS4gVGhlIHByZXZpb3VzIGV4YW1wbGUgdXNlZCB0aGUgbGFzdFIyYnVuZGxlIHRhZworZm9yIHRoaXMgcHVycG9zZSwgYnV0IHlvdSBjYW4gdXNlIGFueSBvdGhlciBvcHRpb25zIHRoYXQgeW91IHdvdWxkIGdpdmUgdG8KK3RoZSBsaW5rZ2l0OmdpdC1sb2dbMV0gY29tbWFuZC4gSGVyZSBhcmUgbW9yZSBleGFtcGxlczoKKworWW91IGNhbiB1c2UgYSB0YWcgdGhhdCBpcyBwcmVzZW50IGluIGJvdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJ1bmRsZSBjcmVhdGUgbXlidW5kbGUgdjEuMC4wLi5tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiB1c2UgYSBiYXNpcyBiYXNlZCBvbiB0aW1lOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBidW5kbGUgY3JlYXRlIG15YnVuZGxlIC0tc2luY2U9MTAuZGF5cyBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiB1c2UgdGhlIG51bWJlciBvZiBjb21taXRzOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBidW5kbGUgY3JlYXRlIG15YnVuZGxlIC0xMCBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBydW4gYGdpdC1idW5kbGUgdmVyaWZ5YCB0byBzZWUgaWYgeW91IGNhbiBleHRyYWN0IGZyb20gYSBidW5kbGUKK3RoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIGJhc2lzOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBidW5kbGUgdmVyaWZ5IG15YnVuZGxlCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBsaXN0IHdoYXQgY29tbWl0cyB5b3UgbXVzdCBoYXZlIGluIG9yZGVyIHRvIGV4dHJhY3QgZnJvbSB0aGUKK2J1bmRsZSBhbmQgd2lsbCBlcnJvciBvdXQgaWYgeW91IGRvIG5vdCBoYXZlIHRoZW0uCisKK0EgYnVuZGxlIGZyb20gYSByZWNpcGllbnQgcmVwb3NpdG9yeSdzIHBvaW50IG9mIHZpZXcgaXMganVzdCBsaWtlIGEKK3JlZ3VsYXIgcmVwb3NpdG9yeSB3aGljaCBpdCBmZXRjaGVzIG9yIHB1bGxzIGZyb20uIFlvdSBjYW4sIGZvciBleGFtcGxlLCBtYXAKK3JlZmVyZW5jZXMgd2hlbiBmZXRjaGluZzoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggbXlidW5kbGUgbWFzdGVyOmxvY2FsUmVmCistLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWxzbyBzZWUgd2hhdCByZWZlcmVuY2VzIGl0IG9mZmVyczoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbHMtcmVtb3RlIG15YnVuZGxlCistLS0tLS0tLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYjk1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQKQEAgLTAsMCArMSwxMDUgQEAKK2dpdC1jYXQtZmlsZSgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jYXQtZmlsZSAtIFByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2F0LWZpbGUnICgtdCB8IC1zIHwgLWUgfCAtcCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgKSA8b2JqZWN0PgorJ2dpdCBjYXQtZmlsZScgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSA8IDxsaXN0LW9mLW9iamVjdHM+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW4gaXRzIGZpcnN0IGZvcm0sIHRoZSBjb21tYW5kIHByb3ZpZGVzIHRoZSBjb250ZW50IG9yIHRoZSB0eXBlIG9mIGFuIG9iamVjdCBpbgordGhlIHJlcG9zaXRvcnkuIFRoZSB0eXBlIGlzIHJlcXVpcmVkIHVubGVzcyAnLXQnIG9yICctcCcgaXMgdXNlZCB0byBmaW5kIHRoZQorb2JqZWN0IHR5cGUsIG9yICctcycgaXMgdXNlZCB0byBmaW5kIHRoZSBvYmplY3Qgc2l6ZSwgb3IgJy0tdGV4dGNvbnYnIGlzIHVzZWQKKyh3aGljaCBpbXBsaWVzIHR5cGUgImJsb2IiKS4KKworSW4gdGhlIHNlY29uZCBmb3JtLCBhIGxpc3Qgb2Ygb2JqZWN0cyAoc2VwYXJhdGVkIGJ5IGxpbmVmZWVkcykgaXMgcHJvdmlkZWQgb24KK3N0ZGluLCBhbmQgdGhlIFNIQTEsIHR5cGUsIGFuZCBzaXplIG9mIGVhY2ggb2JqZWN0IGlzIHByaW50ZWQgb24gc3Rkb3V0LgorCitPUFRJT05TCistLS0tLS0tCis8b2JqZWN0Pjo6CisJVGhlIG5hbWUgb2YgdGhlIG9iamVjdCB0byBzaG93LgorCUZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIG9iamVjdCBuYW1lcywgc2VlCisJdGhlICJTUEVDSUZZSU5HIFJFVklTSU9OUyIgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKworLXQ6OgorCUluc3RlYWQgb2YgdGhlIGNvbnRlbnQsIHNob3cgdGhlIG9iamVjdCB0eXBlIGlkZW50aWZpZWQgYnkKKwk8b2JqZWN0Pi4KKworLXM6OgorCUluc3RlYWQgb2YgdGhlIGNvbnRlbnQsIHNob3cgdGhlIG9iamVjdCBzaXplIGlkZW50aWZpZWQgYnkKKwk8b2JqZWN0Pi4KKworLWU6OgorCVN1cHByZXNzIGFsbCBvdXRwdXQ7IGluc3RlYWQgZXhpdCB3aXRoIHplcm8gc3RhdHVzIGlmIDxvYmplY3Q+CisJZXhpc3RzIGFuZCBpcyBhIHZhbGlkIG9iamVjdC4KKworLXA6OgorCVByZXR0eS1wcmludCB0aGUgY29udGVudHMgb2YgPG9iamVjdD4gYmFzZWQgb24gaXRzIHR5cGUuCisKKzx0eXBlPjo6CisJVHlwaWNhbGx5IHRoaXMgbWF0Y2hlcyB0aGUgcmVhbCB0eXBlIG9mIDxvYmplY3Q+IGJ1dCBhc2tpbmcKKwlmb3IgYSB0eXBlIHRoYXQgY2FuIHRyaXZpYWxseSBiZSBkZXJlZmVyZW5jZWQgZnJvbSB0aGUgZ2l2ZW4KKwk8b2JqZWN0PiBpcyBhbHNvIHBlcm1pdHRlZC4gIEFuIGV4YW1wbGUgaXMgdG8gYXNrIGZvciBhCisJInRyZWUiIHdpdGggPG9iamVjdD4gYmVpbmcgYSBjb21taXQgb2JqZWN0IHRoYXQgY29udGFpbnMgaXQsCisJb3IgdG8gYXNrIGZvciBhICJibG9iIiB3aXRoIDxvYmplY3Q+IGJlaW5nIGEgdGFnIG9iamVjdCB0aGF0CisJcG9pbnRzIGF0IGl0LgorCistLXRleHRjb252OjoKKwlTaG93IHRoZSBjb250ZW50IGFzIHRyYW5zZm9ybWVkIGJ5IGEgdGV4dGNvbnYgZmlsdGVyLiBJbiB0aGlzIGNhc2UsCisJPG9iamVjdD4gaGFzIGJlIG9mIHRoZSBmb3JtIDx0cmVlaXNoPjo8cGF0aD4sIG9yIDo8cGF0aD4gaW4gb3JkZXIKKwl0byBhcHBseSB0aGUgZmlsdGVyIHRvIHRoZSBjb250ZW50IHJlY29yZGVkIGluIHRoZSBpbmRleCBhdCA8cGF0aD4uCisKKy0tYmF0Y2g6OgorCVByaW50IHRoZSBTSEExLCB0eXBlLCBzaXplLCBhbmQgY29udGVudHMgb2YgZWFjaCBvYmplY3QgcHJvdmlkZWQgb24KKwlzdGRpbi4gTWF5IG5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cy4KKworLS1iYXRjaC1jaGVjazo6CisJUHJpbnQgdGhlIFNIQTEsIHR5cGUsIGFuZCBzaXplIG9mIGVhY2ggb2JqZWN0IHByb3ZpZGVkIG9uIHN0ZGluLiBNYXkgbm90CisJYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgb3B0aW9ucyBvciBhcmd1bWVudHMuCisKK09VVFBVVAorLS0tLS0tCitJZiAnLXQnIGlzIHNwZWNpZmllZCwgb25lIG9mIHRoZSA8dHlwZT4uCisKK0lmICctcycgaXMgc3BlY2lmaWVkLCB0aGUgc2l6ZSBvZiB0aGUgPG9iamVjdD4gaW4gYnl0ZXMuCisKK0lmICctZScgaXMgc3BlY2lmaWVkLCBubyBvdXRwdXQuCisKK0lmICctcCcgaXMgc3BlY2lmaWVkLCB0aGUgY29udGVudHMgb2YgPG9iamVjdD4gYXJlIHByZXR0eS1wcmludGVkLgorCitJZiA8dHlwZT4gaXMgc3BlY2lmaWVkLCB0aGUgcmF3ICh0aG91Z2ggdW5jb21wcmVzc2VkKSBjb250ZW50cyBvZiB0aGUgPG9iamVjdD4KK3dpbGwgYmUgcmV0dXJuZWQuCisKK0lmICctLWJhdGNoJyBpcyBzcGVjaWZpZWQsIG91dHB1dCBvZiB0aGUgZm9sbG93aW5nIGZvcm0gaXMgcHJpbnRlZCBmb3IgZWFjaAorb2JqZWN0IHNwZWNpZmllZCBvbiBzdGRpbjoKKworLS0tLS0tLS0tLS0tCis8c2hhMT4gU1AgPHR5cGU+IFNQIDxzaXplPiBMRgorPGNvbnRlbnRzPiBMRgorLS0tLS0tLS0tLS0tCisKK0lmICctLWJhdGNoLWNoZWNrJyBpcyBzcGVjaWZpZWQsIG91dHB1dCBvZiB0aGUgZm9sbG93aW5nIGZvcm0gaXMgcHJpbnRlZCBmb3IKK2VhY2ggb2JqZWN0IHNwZWNpZmllZCBvbiBzdGRpbjoKKworLS0tLS0tLS0tLS0tCis8c2hhMT4gU1AgPHR5cGU+IFNQIDxzaXplPiBMRgorLS0tLS0tLS0tLS0tCisKK0ZvciBib3RoICctLWJhdGNoJyBhbmQgJy0tYmF0Y2gtY2hlY2snLCBvdXRwdXQgb2YgdGhlIGZvbGxvd2luZyBmb3JtIGlzIHByaW50ZWQKK2ZvciBlYWNoIG9iamVjdCBzcGVjaWZpZWQgb24gc3RkaW4gdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tCis8b2JqZWN0PiBTUCBtaXNzaW5nIExGCistLS0tLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYmRiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dApAQCAtMCwwICsxLDEwOSBAQAorZ2l0LWNoZWNrLWF0dHIoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVjay1hdHRyIC0gRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrLWF0dHInIFstYSB8IC0tYWxsIHwgYXR0ci4uLl0gWy0tXSBwYXRobmFtZS4uLgorJ2dpdCBjaGVjay1hdHRyJyAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCBhdHRyLi4uXSA8IDxsaXN0LW9mLXBhdGhzPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ZvciBldmVyeSBwYXRobmFtZSwgdGhpcyBjb21tYW5kIHdpbGwgbGlzdCBpZiBlYWNoIGF0dHJpYnV0ZSBpcyAndW5zcGVjaWZpZWQnLAorJ3NldCcsIG9yICd1bnNldCcgYXMgYSBnaXRhdHRyaWJ1dGUgb24gdGhhdCBwYXRobmFtZS4KKworT1BUSU9OUworLS0tLS0tLQorLWEsIC0tYWxsOjoKKwlMaXN0IGFsbCBhdHRyaWJ1dGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisJcGF0aHMuICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkLCB0aGVuICd1bnNwZWNpZmllZCcgYXR0cmlidXRlcworCXdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuCisKKy0tY2FjaGVkOjoKKwlDb25zaWRlciBgLmdpdGF0dHJpYnV0ZXNgIGluIHRoZSBpbmRleCBvbmx5LCBpZ25vcmluZyB0aGUgd29ya2luZyB0cmVlLgorCistLXN0ZGluOjoKKwlSZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiBpbnN0ZWFkIG9mIGZyb20gdGhlIGNvbW1hbmQtbGluZS4KKworLXo6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXN0ZGluYDsgcGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIGEKKwlOVUwgY2hhcmFjdGVyIGluc3RlYWQgb2YgYSBsaW5lZmVlZCBjaGFyYWN0ZXIuCisKK1wtLTo6CisJSW50ZXJwcmV0IGFsbCBwcmVjZWRpbmcgYXJndW1lbnRzIGFzIGF0dHJpYnV0ZXMgYW5kIGFsbCBmb2xsb3dpbmcKKwlhcmd1bWVudHMgYXMgcGF0aCBuYW1lcy4KKworSWYgbm9uZSBvZiBgLS1zdGRpbmAsIGAtLWFsbGAsIG9yIGAtLWAgaXMgdXNlZCwgdGhlIGZpcnN0IGFyZ3VtZW50Cit3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gYXR0cmlidXRlIGFuZCB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIGFzCitwYXRobmFtZXMuCisKK09VVFBVVAorLS0tLS0tCisKK1RoZSBvdXRwdXQgaXMgb2YgdGhlIGZvcm06Cis8cGF0aD4gQ09MT04gU1AgPGF0dHJpYnV0ZT4gQ09MT04gU1AgPGluZm8+IExGCisKKzxwYXRoPiBpcyB0aGUgcGF0aCBvZiBhIGZpbGUgYmVpbmcgcXVlcmllZCwgPGF0dHJpYnV0ZT4gaXMgYW4gYXR0cmlidXRlCitiZWluZyBxdWVyaWVkIGFuZCA8aW5mbz4gY2FuIGJlIGVpdGhlcjoKKworJ3Vuc3BlY2lmaWVkJzs7IHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIHBhdGguCisndW5zZXQnOzsJd2hlbiB0aGUgYXR0cmlidXRlIGlzIGRlZmluZWQgYXMgZmFsc2UuCisnc2V0Jzs7CQl3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBhcyB0cnVlLgorPHZhbHVlPjs7CXdoZW4gYSB2YWx1ZSBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgYXR0cmlidXRlLgorCitFWEFNUExFUworLS0tLS0tLS0KKworSW4gdGhlIGV4YW1wbGVzLCB0aGUgZm9sbG93aW5nICcuZ2l0YXR0cmlidXRlcycgZmlsZSBpcyB1c2VkOgorLS0tLS0tLS0tLS0tLS0tCisqLmphdmEgZGlmZj1qYXZhIC1jcmxmIG15QXR0cgorTm9NeUF0dHIuamF2YSAhbXlBdHRyCitSRUFETUUgY2F2ZWF0PXVuc3BlY2lmaWVkCistLS0tLS0tLS0tLS0tLS0KKworKiBMaXN0aW5nIGEgc2luZ2xlIGF0dHJpYnV0ZToKKy0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2stYXR0ciBkaWZmIG9yZy9leGFtcGxlL015Q2xhc3MuamF2YQorb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBkaWZmOiBqYXZhCistLS0tLS0tLS0tLS0tLS0KKworKiBMaXN0aW5nIG11bHRpcGxlIGF0dHJpYnV0ZXMgZm9yIGEgZmlsZToKKy0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2stYXR0ciBjcmxmIGRpZmYgbXlBdHRyIC0tIG9yZy9leGFtcGxlL015Q2xhc3MuamF2YQorb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBjcmxmOiB1bnNldAorb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBkaWZmOiBqYXZhCitvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmE6IG15QXR0cjogc2V0CistLS0tLS0tLS0tLS0tLS0KKworKiBMaXN0aW5nIGFsbCBhdHRyaWJ1dGVzIGZvciBhIGZpbGU6CistLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrLWF0dHIgLS1hbGwgLS0gb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhCitvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmE6IGRpZmY6IGphdmEKK29yZy9leGFtcGxlL015Q2xhc3MuamF2YTogbXlBdHRyOiBzZXQKKy0tLS0tLS0tLS0tLS0tLQorCisqIExpc3RpbmcgYW4gYXR0cmlidXRlIGZvciBtdWx0aXBsZSBmaWxlczoKKy0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2stYXR0ciBteUF0dHIgLS0gb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhIG9yZy9leGFtcGxlL05vTXlBdHRyLmphdmEKK29yZy9leGFtcGxlL015Q2xhc3MuamF2YTogbXlBdHRyOiBzZXQKK29yZy9leGFtcGxlL05vTXlBdHRyLmphdmE6IG15QXR0cjogdW5zcGVjaWZpZWQKKy0tLS0tLS0tLS0tLS0tLQorCisqIE5vdCBhbGwgdmFsdWVzIGFyZSBlcXVhbGx5IHVuYW1iaWd1b3VzOgorLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVjay1hdHRyIGNhdmVhdCBSRUFETUUKK1JFQURNRTogY2F2ZWF0OiB1bnNwZWNpZmllZAorLS0tLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stcmVmLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwMDlkMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CkBAIC0wLDAgKzEsMTI2IEBACitnaXQtY2hlY2stcmVmLWZvcm1hdCgxKQorPT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNoZWNrLXJlZi1mb3JtYXQgLSBFbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgbmFtZSBpcyB3ZWxsIGZvcm1lZAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2hlY2stcmVmLWZvcm1hdCcgWy0tbm9ybWFsaXplXQorICAgICAgIFstLVtuby1dYWxsb3ctb25lbGV2ZWxdIFstLXJlZnNwZWMtcGF0dGVybl0KKyAgICAgICA8cmVmbmFtZT4KKydnaXQgY2hlY2stcmVmLWZvcm1hdCcgLS1icmFuY2ggPGJyYW5jaG5hbWUtc2hvcnRoYW5kPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NoZWNrcyBpZiBhIGdpdmVuICdyZWZuYW1lJyBpcyBhY2NlcHRhYmxlLCBhbmQgZXhpdHMgd2l0aCBhIG5vbi16ZXJvCitzdGF0dXMgaWYgaXQgaXMgbm90LgorCitBIHJlZmVyZW5jZSBpcyB1c2VkIGluIGdpdCB0byBzcGVjaWZ5IGJyYW5jaGVzIGFuZCB0YWdzLiAgQQorYnJhbmNoIGhlYWQgaXMgc3RvcmVkIGluIHRoZSBgcmVmcy9oZWFkc2AgaGllcmFyY2h5LCB3aGlsZQorYSB0YWcgaXMgc3RvcmVkIGluIHRoZSBgcmVmcy90YWdzYCBoaWVyYXJjaHkgb2YgdGhlIHJlZiBuYW1lc3BhY2UKKyh0eXBpY2FsbHkgaW4gYCRHSVRfRElSL3JlZnMvaGVhZHNgIGFuZCBgJEdJVF9ESVIvcmVmcy90YWdzYAorZGlyZWN0b3JpZXMgb3IsIGFzIGVudHJpZXMgaW4gZmlsZSBgJEdJVF9ESVIvcGFja2VkLXJlZnNgCitpZiByZWZzIGFyZSBwYWNrZWQgYnkgYGdpdCBnY2ApLgorCitnaXQgaW1wb3NlcyB0aGUgZm9sbG93aW5nIHJ1bGVzIG9uIGhvdyByZWZlcmVuY2VzIGFyZSBuYW1lZDoKKworLiBUaGV5IGNhbiBpbmNsdWRlIHNsYXNoIGAvYCBmb3IgaGllcmFyY2hpY2FsIChkaXJlY3RvcnkpCisgIGdyb3VwaW5nLCBidXQgbm8gc2xhc2gtc2VwYXJhdGVkIGNvbXBvbmVudCBjYW4gYmVnaW4gd2l0aCBhCisgIGRvdCBgLmAgb3IgZW5kIHdpdGggdGhlIHNlcXVlbmNlIGAubG9ja2AuCisKKy4gVGhleSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGAvYC4gVGhpcyBlbmZvcmNlcyB0aGUgcHJlc2VuY2Ugb2YgYQorICBjYXRlZ29yeSBsaWtlIGBoZWFkcy9gLCBgdGFncy9gIGV0Yy4gYnV0IHRoZSBhY3R1YWwgbmFtZXMgYXJlIG5vdAorICByZXN0cmljdGVkLiAgSWYgdGhlIGAtLWFsbG93LW9uZWxldmVsYCBvcHRpb24gaXMgdXNlZCwgdGhpcyBydWxlCisgIGlzIHdhaXZlZC4KKworLiBUaGV5IGNhbm5vdCBoYXZlIHR3byBjb25zZWN1dGl2ZSBkb3RzIGAuLmAgYW55d2hlcmUuCisKKy4gVGhleSBjYW5ub3QgaGF2ZSBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMgKGkuZS4gYnl0ZXMgd2hvc2UKKyAgdmFsdWVzIGFyZSBsb3dlciB0aGFuIFwwNDAsIG9yIFwxNzcgYERFTGApLCBzcGFjZSwgdGlsZGUgYH5gLAorICBjYXJldCBgXmAsIG9yIGNvbG9uIGA6YCBhbnl3aGVyZS4KKworLiBUaGV5IGNhbm5vdCBoYXZlIHF1ZXN0aW9uLW1hcmsgYD9gLCBhc3RlcmlzayBgKmAsIG9yIG9wZW4KKyAgYnJhY2tldCBgW2AgYW55d2hlcmUuICBTZWUgdGhlIGAtLXJlZnNwZWMtcGF0dGVybmAgb3B0aW9uIGJlbG93IGZvcgorICBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlLgorCisuIFRoZXkgY2Fubm90IGJlZ2luIG9yIGVuZCB3aXRoIGEgc2xhc2ggYC9gIG9yIGNvbnRhaW4gbXVsdGlwbGUKKyAgY29uc2VjdXRpdmUgc2xhc2hlcyAoc2VlIHRoZSBgLS1ub3JtYWxpemVgIG9wdGlvbiBiZWxvdyBmb3IgYW4KKyAgZXhjZXB0aW9uIHRvIHRoaXMgcnVsZSkKKworLiBUaGV5IGNhbm5vdCBlbmQgd2l0aCBhIGRvdCBgLmAuCisKKy4gVGhleSBjYW5ub3QgY29udGFpbiBhIHNlcXVlbmNlIGBAe2AuCisKKy4gVGhleSBjYW5ub3QgY29udGFpbiBhIGBcYC4KKworVGhlc2UgcnVsZXMgbWFrZSBpdCBlYXN5IGZvciBzaGVsbCBzY3JpcHQgYmFzZWQgdG9vbHMgdG8gcGFyc2UKK3JlZmVyZW5jZSBuYW1lcywgcGF0aG5hbWUgZXhwYW5zaW9uIGJ5IHRoZSBzaGVsbCB3aGVuIGEgcmVmZXJlbmNlIG5hbWUgaXMgdXNlZAordW5xdW90ZWQgKGJ5IG1pc3Rha2UpLCBhbmQgYWxzbyBhdm9pZHMgYW1iaWd1aXRpZXMgaW4gY2VydGFpbgorcmVmZXJlbmNlIG5hbWUgZXhwcmVzc2lvbnMgKHNlZSBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSk6CisKKy4gQSBkb3VibGUtZG90IGAuLmAgaXMgb2Z0ZW4gdXNlZCBhcyBpbiBgcmVmMS4ucmVmMmAsIGFuZCBpbiBzb21lCisgIGNvbnRleHRzIHRoaXMgbm90YXRpb24gbWVhbnMgYF5yZWYxIHJlZjJgIChpLmUuIG5vdCBpbgorICBgcmVmMWAgYW5kIGluIGByZWYyYCkuCisKKy4gQSB0aWxkZSBgfmAgYW5kIGNhcmV0IGBeYCBhcmUgdXNlZCB0byBpbnRyb2R1Y2UgdGhlIHBvc3RmaXgKKyAgJ250aCBwYXJlbnQnIGFuZCAncGVlbCBvbmlvbicgb3BlcmF0aW9uLgorCisuIEEgY29sb24gYDpgIGlzIHVzZWQgYXMgaW4gYHNyY3JlZjpkc3RyZWZgIHRvIG1lYW4gInVzZSBzcmNyZWZcJ3MKKyAgdmFsdWUgYW5kIHN0b3JlIGl0IGluIGRzdHJlZiIgaW4gZmV0Y2ggYW5kIHB1c2ggb3BlcmF0aW9ucy4KKyAgSXQgbWF5IGFsc28gYmUgdXNlZCB0byBzZWxlY3QgYSBzcGVjaWZpYyBvYmplY3Qgc3VjaCBhcyB3aXRoCisgICdnaXQgY2F0LWZpbGUnOiAiZ2l0IGNhdC1maWxlIGJsb2IgdjEuMy4zOnJlZnMuYyIuCisKKy4gYXQtb3Blbi1icmFjZSBgQHtgIGlzIHVzZWQgYXMgYSBub3RhdGlvbiB0byBhY2Nlc3MgYSByZWZsb2cgZW50cnkuCisKK1dpdGggdGhlIGAtLWJyYW5jaGAgb3B0aW9uLCBpdCBleHBhbmRzIHRoZSBgYHByZXZpb3VzIGJyYW5jaCBzeW50YXgnJworYEB7LW59YC4gIEZvciBleGFtcGxlLCBgQHstMX1gIGlzIGEgd2F5IHRvIHJlZmVyIHRoZSBsYXN0IGJyYW5jaCB5b3UKK3dlcmUgb24uICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgdXNlZCBieSBwb3JjZWxhaW5zIHRvIGFjY2VwdCB0aGlzCitzeW50YXggYW55d2hlcmUgYSBicmFuY2ggbmFtZSBpcyBleHBlY3RlZCwgc28gdGhleSBjYW4gYWN0IGFzIGlmIHlvdQordHlwZWQgdGhlIGJyYW5jaCBuYW1lLgorCitPUFRJT05TCistLS0tLS0tCistLWFsbG93LW9uZWxldmVsOjoKKy0tbm8tYWxsb3ctb25lbGV2ZWw6OgorCUNvbnRyb2xzIHdoZXRoZXIgb25lLWxldmVsIHJlZm5hbWVzIGFyZSBhY2NlcHRlZCAoaS5lLiwKKwlyZWZuYW1lcyB0aGF0IGRvIG5vdCBjb250YWluIG11bHRpcGxlIGAvYC1zZXBhcmF0ZWQKKwljb21wb25lbnRzKS4gIFRoZSBkZWZhdWx0IGlzIGAtLW5vLWFsbG93LW9uZWxldmVsYC4KKworLS1yZWZzcGVjLXBhdHRlcm46OgorCUludGVycHJldCA8cmVmbmFtZT4gYXMgYSByZWZlcmVuY2UgbmFtZSBwYXR0ZXJuIGZvciBhIHJlZnNwZWMKKwkoYXMgdXNlZCB3aXRoIHJlbW90ZSByZXBvc2l0b3JpZXMpLiAgSWYgdGhpcyBvcHRpb24gaXMKKwllbmFibGVkLCA8cmVmbmFtZT4gaXMgYWxsb3dlZCB0byBjb250YWluIGEgc2luZ2xlIGAqYAorCWluIHBsYWNlIG9mIGEgb25lIGZ1bGwgcGF0aG5hbWUgY29tcG9uZW50IChlLmcuLAorCWBmb28vKi9iYXJgIGJ1dCBub3QgYGZvby9iYXIqYCkuCisKKy0tbm9ybWFsaXplOjoKKwlOb3JtYWxpemUgJ3JlZm5hbWUnIGJ5IHJlbW92aW5nIGFueSBsZWFkaW5nIHNsYXNoIChgL2ApCisJY2hhcmFjdGVycyBhbmQgY29sbGFwc2luZyBydW5zIG9mIGFkamFjZW50IHNsYXNoZXMgYmV0d2VlbgorCW5hbWUgY29tcG9uZW50cyBpbnRvIGEgc2luZ2xlIHNsYXNoLiAgSWZmIHRoZSBub3JtYWxpemVkCisJcmVmbmFtZSBpcyB2YWxpZCB0aGVuIHByaW50IGl0IHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdAorCXdpdGggYSBzdGF0dXMgb2YgMC4gIChgLS1wcmludGAgaXMgYSBkZXByZWNhdGVkIHdheSB0byBzcGVsbAorCWAtLW5vcm1hbGl6ZWAuKQorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIFByaW50IHRoZSBuYW1lIG9mIHRoZSBwcmV2aW91cyBicmFuY2g6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggQHstMX0KKy0tLS0tLS0tLS0tLQorCisqIERldGVybWluZSB0aGUgcmVmZXJlbmNlIG5hbWUgdG8gdXNlIGZvciBhIG5ldyBicmFuY2g6CisrCistLS0tLS0tLS0tLS0KKyQgcmVmPSQoZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1ub3JtYWxpemUgInJlZnMvaGVhZHMvJG5ld2JyYW5jaCIpIHx8CitkaWUgIndlIGRvIG5vdCBsaWtlICckbmV3YnJhbmNoJyBhcyBhIGJyYW5jaCBuYW1lLiIKKy0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDMzZTdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0CkBAIC0wLDAgKzEsMTc3IEBACitnaXQtY2hlY2tvdXQtaW5kZXgoMSkKKz09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlY2tvdXQtaW5kZXggLSBDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2hlY2tvdXQtaW5kZXgnIFstdV0gWy1xXSBbLWFdIFstZl0gWy1uXSBbLS1wcmVmaXg9PHN0cmluZz5dCisJCSAgIFstLXN0YWdlPTxudW1iZXI+fGFsbF0KKwkJICAgWy0tdGVtcF0KKwkJICAgWy16XSBbLS1zdGRpbl0KKwkJICAgWy0tXSBbPGZpbGU+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1dpbGwgY29weSBhbGwgZmlsZXMgbGlzdGVkIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeQorKG5vdCBvdmVyd3JpdGluZyBleGlzdGluZyBmaWxlcykuCisKK09QVElPTlMKKy0tLS0tLS0KKy11OjoKKy0taW5kZXg6OgorCXVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGZvciB0aGUgY2hlY2tlZCBvdXQgZW50cmllcyBpbgorCXRoZSBpbmRleCBmaWxlLgorCistcTo6CistLXF1aWV0OjoKKwliZSBxdWlldCBpZiBmaWxlcyBleGlzdCBvciBhcmUgbm90IGluIHRoZSBpbmRleAorCistZjo6CistLWZvcmNlOjoKKwlmb3JjZXMgb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzCisKKy1hOjoKKy0tYWxsOjoKKwljaGVja3Mgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXguICBDYW5ub3QgYmUgdXNlZAorCXRvZ2V0aGVyIHdpdGggZXhwbGljaXQgZmlsZW5hbWVzLgorCistbjo6CistLW5vLWNyZWF0ZTo6CisJRG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzLCBvbmx5IHJlZnJlc2ggZmlsZXMgYWxyZWFkeSBjaGVja2VkCisJb3V0LgorCistLXByZWZpeD08c3RyaW5nPjo6CisJV2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiAodXN1YWxseSBhIGRpcmVjdG9yeQorCWluY2x1ZGluZyBhIHRyYWlsaW5nIC8pCisKKy0tc3RhZ2U9PG51bWJlcj58YWxsOjoKKwlJbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB1bm1lcmdlZCBlbnRyaWVzLCBjb3B5IG91dCB0aGUKKwlmaWxlcyBmcm9tIG5hbWVkIHN0YWdlLiAgPG51bWJlcj4gbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMuCisJTm90ZTogLS1zdGFnZT1hbGwgYXV0b21hdGljYWxseSBpbXBsaWVzIC0tdGVtcC4KKworLS10ZW1wOjoKKwlJbnN0ZWFkIG9mIGNvcHlpbmcgdGhlIGZpbGVzIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeQorCXdyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcy4gIFRoZSB0ZW1wb3JhcnkgbmFtZQorCWFzc29jaWF0aW9ucyB3aWxsIGJlIHdyaXR0ZW4gdG8gc3Rkb3V0LgorCistLXN0ZGluOjoKKwlJbnN0ZWFkIG9mIHRha2luZyBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIGNvbW1hbmQgbGluZSwKKwlyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuICBQYXRocyBhcmUKKwlzZXBhcmF0ZWQgYnkgTEYgKGkuZS4gb25lIHBhdGggcGVyIGxpbmUpIGJ5IGRlZmF1bHQuCisKKy16OjoKKwlPbmx5IG1lYW5pbmdmdWwgd2l0aCBgLS1zdGRpbmA7IHBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aAorCU5VTCBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBMRi4KKworXC0tOjoKKwlEbyBub3QgaW50ZXJwcmV0IGFueSBtb3JlIGFyZ3VtZW50cyBhcyBvcHRpb25zLgorCitUaGUgb3JkZXIgb2YgdGhlIGZsYWdzIHVzZWQgdG8gbWF0dGVyLCBidXQgbm90IGFueW1vcmUuCisKK0p1c3QgZG9pbmcgYGdpdCBjaGVja291dC1pbmRleGAgZG9lcyBub3RoaW5nLiBZb3UgcHJvYmFibHkgbWVhbnQKK2BnaXQgY2hlY2tvdXQtaW5kZXggLWFgLiBBbmQgaWYgeW91IHdhbnQgdG8gZm9yY2UgaXQsIHlvdSB3YW50CitgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hYC4KKworSW50dWl0aXZlbmVzcyBpcyBub3QgdGhlIGdvYWwgaGVyZS4gUmVwZWF0YWJpbGl0eSBpcy4gVGhlIHJlYXNvbiBmb3IKK3RoZSAibm8gYXJndW1lbnRzIG1lYW5zIG5vIHdvcmsiIGJlaGF2aW9yIGlzIHRoYXQgZnJvbSBzY3JpcHRzIHlvdSBhcmUKK3N1cHBvc2VkIHRvIGJlIGFibGUgdG8gZG86CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZmluZCAuIC1uYW1lICcqLmgnIC1wcmludDAgfCB4YXJncyAtMCBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLS0KKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBmb3JjZSBhbGwgZXhpc3RpbmcgYCouaGAgZmlsZXMgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGVpcgorY2FjaGVkIGNvcGllcy4gSWYgYW4gZW1wdHkgY29tbWFuZCBsaW5lIGltcGxpZWQgImFsbCIsIHRoZW4gdGhpcyB3b3VsZAorZm9yY2UtcmVmcmVzaCBldmVyeXRoaW5nIGluIHRoZSBpbmRleCwgd2hpY2ggd2FzIG5vdCB0aGUgcG9pbnQuICBCdXQKK3NpbmNlICdnaXQgY2hlY2tvdXQtaW5kZXgnIGFjY2VwdHMgLS1zdGRpbiBpdCB3b3VsZCBiZSBmYXN0ZXIgdG8gdXNlOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGZpbmQgLiAtbmFtZSAnKi5oJyAtcHJpbnQwIHwgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC16IC0tc3RkaW4KKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGAtLWAgaXMganVzdCBhIGdvb2QgaWRlYSB3aGVuIHlvdSBrbm93IHRoZSByZXN0IHdpbGwgYmUgZmlsZW5hbWVzOworaXQgd2lsbCBwcmV2ZW50IHByb2JsZW1zIHdpdGggYSBmaWxlbmFtZSBvZiwgZm9yIGV4YW1wbGUsICBgLWFgLgorVXNpbmcgYC0tYCBpcyBwcm9iYWJseSBhIGdvb2QgcG9saWN5IGluIHNjcmlwdHMuCisKKworVXNpbmcgLS10ZW1wIG9yIC0tc3RhZ2U9YWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1doZW4gYC0tdGVtcGAgaXMgdXNlZCAob3IgaW1wbGllZCBieSBgLS1zdGFnZT1hbGxgKQorJ2dpdCBjaGVja291dC1pbmRleCcgd2lsbCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBmb3IgZWFjaCBpbmRleAorZW50cnkgYmVpbmcgY2hlY2tlZCBvdXQuICBUaGUgaW5kZXggd2lsbCBub3QgYmUgdXBkYXRlZCB3aXRoIHN0YXQKK2luZm9ybWF0aW9uLiAgVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBjYWxsZXIgbmVlZHMgYWxsCitzdGFnZXMgb2YgYWxsIHVubWVyZ2VkIGVudHJpZXMgc28gdGhhdCB0aGUgdW5tZXJnZWQgZmlsZXMgY2FuIGJlCitwcm9jZXNzZWQgYnkgYW4gZXh0ZXJuYWwgbWVyZ2UgdG9vbC4KKworQSBsaXN0aW5nIHdpbGwgYmUgd3JpdHRlbiB0byBzdGRvdXQgcHJvdmlkaW5nIHRoZSBhc3NvY2lhdGlvbiBvZgordGVtcG9yYXJ5IGZpbGUgbmFtZXMgdG8gdHJhY2tlZCBwYXRoIG5hbWVzLiAgVGhlIGxpc3RpbmcgZm9ybWF0CitoYXMgdHdvIHZhcmlhdGlvbnM6CisKKyAgICAuIHRlbXBuYW1lIFRBQiBwYXRoIFJTCisrCitUaGUgZmlyc3QgZm9ybWF0IGlzIHdoYXQgZ2V0cyB1c2VkIHdoZW4gYC0tc3RhZ2VgIGlzIG9taXR0ZWQgb3IKK2lzIG5vdCBgLS1zdGFnZT1hbGxgLiBUaGUgZmllbGQgdGVtcG5hbWUgaXMgdGhlIHRlbXBvcmFyeSBmaWxlCituYW1lIGhvbGRpbmcgdGhlIGZpbGUgY29udGVudCBhbmQgcGF0aCBpcyB0aGUgdHJhY2tlZCBwYXRoIG5hbWUgaW4KK3RoZSBpbmRleC4gIE9ubHkgdGhlIHJlcXVlc3RlZCBlbnRyaWVzIGFyZSBvdXRwdXQuCisKKyAgICAuIHN0YWdlMXRlbXAgU1Agc3RhZ2UydGVtcCBTUCBzdGFnZTN0bXAgVEFCIHBhdGggUlMKKysKK1RoZSBzZWNvbmQgZm9ybWF0IGlzIHdoYXQgZ2V0cyB1c2VkIHdoZW4gYC0tc3RhZ2U9YWxsYC4gIFRoZSB0aHJlZQorc3RhZ2UgdGVtcG9yYXJ5IGZpZWxkcyAoc3RhZ2UxdGVtcCwgc3RhZ2UydGVtcCwgc3RhZ2UzdGVtcCkgbGlzdCB0aGUKK25hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIGlmIHRoZXJlIGlzIGEgc3RhZ2UgZW50cnkgaW4gdGhlIGluZGV4CitvciBgLmAgaWYgdGhlcmUgaXMgbm8gc3RhZ2UgZW50cnkuICBQYXRocyB3aGljaCBvbmx5IGhhdmUgYSBzdGFnZSAwCitlbnRyeSB3aWxsIGFsd2F5cyBiZSBvbWl0dGVkIGZyb20gdGhlIG91dHB1dC4KKworSW4gYm90aCBmb3JtYXRzIFJTICh0aGUgcmVjb3JkIHNlcGFyYXRvcikgaXMgbmV3bGluZSBieSBkZWZhdWx0CitidXQgd2lsbCBiZSB0aGUgbnVsbCBieXRlIGlmIC16IHdhcyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KK1RoZSB0ZW1wb3JhcnkgZmlsZSBuYW1lcyBhcmUgYWx3YXlzIHNhZmUgc3RyaW5nczsgdGhleSB3aWxsIG5ldmVyCitjb250YWluIGRpcmVjdG9yeSBzZXBhcmF0b3JzIG9yIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gIFRoZSBwYXRoCitmaWVsZCBpcyBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCB0aGUgdGVtcG9yYXJ5CitmaWxlIG5hbWVzIGFyZSBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkuCisKK0lmIHRoZSBvYmplY3QgYmVpbmcgY29waWVkIG91dCB0byBhIHRlbXBvcmFyeSBmaWxlIGlzIGEgc3ltYm9saWMKK2xpbmsgdGhlIGNvbnRlbnQgb2YgdGhlIGxpbmsgd2lsbCBiZSB3cml0dGVuIHRvIGEgbm9ybWFsIGZpbGUuICBJdCBpcwordXAgdG8gdGhlIGVuZC11c2VyIG9yIHRoZSBQb3JjZWxhaW4gdG8gbWFrZSB1c2Ugb2YgdGhpcyBpbmZvcm1hdGlvbi4KKworCitFWEFNUExFUworLS0tLS0tLS0KK1RvIHVwZGF0ZSBhbmQgcmVmcmVzaCBvbmx5IHRoZSBmaWxlcyBhbHJlYWR5IGNoZWNrZWQgb3V0OjoKKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC1uIC1mIC1hICYmIGdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKKy0tLS0tLS0tLS0tLS0tLS0KKworVXNpbmcgJ2dpdCBjaGVja291dC1pbmRleCcgdG8gImV4cG9ydCBhbiBlbnRpcmUgdHJlZSI6OgorCVRoZSBwcmVmaXggYWJpbGl0eSBiYXNpY2FsbHkgbWFrZXMgaXQgdHJpdmlhbCB0byB1c2UKKwknZ2l0IGNoZWNrb3V0LWluZGV4JyBhcyBhbiAiZXhwb3J0IGFzIHRyZWUiIGZ1bmN0aW9uLgorCUp1c3QgcmVhZCB0aGUgZGVzaXJlZCB0cmVlIGludG8gdGhlIGluZGV4LCBhbmQgZG86CisrCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD1naXQtZXhwb3J0LWRpci8gLWEKKy0tLS0tLS0tLS0tLS0tLS0KKysKK2BnaXQgY2hlY2tvdXQtaW5kZXhgIHdpbGwgImV4cG9ydCIgdGhlIGluZGV4IGludG8gdGhlIHNwZWNpZmllZAorZGlyZWN0b3J5LgorKworVGhlIGZpbmFsICIvIiBpcyBpbXBvcnRhbnQuIFRoZSBleHBvcnRlZCBuYW1lIGlzIGxpdGVyYWxseSBqdXN0CitwcmVmaXhlZCB3aXRoIHRoZSBzcGVjaWZpZWQgc3RyaW5nLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZQorZm9sbG93aW5nIGV4YW1wbGUuCisKK0V4cG9ydCBmaWxlcyB3aXRoIGEgcHJlZml4OjoKKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PS5tZXJnZWQtIE1ha2VmaWxlCistLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIHdpbGwgY2hlY2sgb3V0IHRoZSBjdXJyZW50bHkgY2FjaGVkIGNvcHkgb2YgYE1ha2VmaWxlYAoraW50byB0aGUgZmlsZSBgLm1lcmdlZC1NYWtlZmlsZWAuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NThhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKQEAgLTAsMCArMSw0NDAgQEAKK2dpdC1jaGVja291dCgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVja291dCAtIENoZWNrb3V0IGEgYnJhbmNoIG9yIHBhdGhzIHRvIHRoZSB3b3JraW5nIHRyZWUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrb3V0JyBbLXFdIFstZl0gWy1tXSBbPGJyYW5jaD5dCisnZ2l0IGNoZWNrb3V0JyBbLXFdIFstZl0gWy1tXSBbLS1kZXRhY2hdIFs8Y29tbWl0Pl0KKydnaXQgY2hlY2tvdXQnIFstcV0gWy1mXSBbLW1dIFtbLWJ8LUJ8LS1vcnBoYW5dIDxuZXdfYnJhbmNoPl0gWzxzdGFydF9wb2ludD5dCisnZ2l0IGNoZWNrb3V0JyBbLWZ8LS1vdXJzfC0tdGhlaXJzfC1tfC0tY29uZmxpY3Q9PHN0eWxlPl0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzPi4uLgorJ2dpdCBjaGVja291dCcgWy1wfC0tcGF0Y2hdIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1VwZGF0ZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byBtYXRjaCB0aGUgdmVyc2lvbiBpbiB0aGUgaW5kZXgKK29yIHRoZSBzcGVjaWZpZWQgdHJlZS4gIElmIG5vIHBhdGhzIGFyZSBnaXZlbiwgJ2dpdCBjaGVja291dCcgd2lsbAorYWxzbyB1cGRhdGUgYEhFQURgIHRvIHNldCB0aGUgc3BlY2lmaWVkIGJyYW5jaCBhcyB0aGUgY3VycmVudAorYnJhbmNoLgorCisnZ2l0IGNoZWNrb3V0JyBbPGJyYW5jaD5dOjoKKydnaXQgY2hlY2tvdXQnIC1ifC1CIDxuZXdfYnJhbmNoPiBbPHN0YXJ0IHBvaW50Pl06OgorJ2dpdCBjaGVja291dCcgWy0tZGV0YWNoXSBbPGNvbW1pdD5dOjoKKworCVRoaXMgZm9ybSBzd2l0Y2hlcyBicmFuY2hlcyBieSB1cGRhdGluZyB0aGUgaW5kZXgsIHdvcmtpbmcKKwl0cmVlLCBhbmQgSEVBRCB0byByZWZsZWN0IHRoZSBzcGVjaWZpZWQgYnJhbmNoIG9yIGNvbW1pdC4KKysKK0lmIGAtYmAgaXMgZ2l2ZW4sIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIGFzIGlmIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXQord2VyZSBjYWxsZWQgYW5kIHRoZW4gY2hlY2tlZCBvdXQ7IGluIHRoaXMgY2FzZSB5b3UgY2FuCit1c2UgdGhlIGAtLXRyYWNrYCBvciBgLS1uby10cmFja2Agb3B0aW9ucywgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8KKydnaXQgYnJhbmNoJy4gIEFzIGEgY29udmVuaWVuY2UsIGAtLXRyYWNrYCB3aXRob3V0IGAtYmAgaW1wbGllcyBicmFuY2gKK2NyZWF0aW9uOyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGAtLXRyYWNrYCBiZWxvdy4KKysKK0lmIGAtQmAgaXMgZ2l2ZW4sIDxuZXdfYnJhbmNoPiBpcyBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgZXhpc3Q7IG90aGVyd2lzZSwgaXQKK2lzIHJlc2V0LiBUaGlzIGlzIHRoZSB0cmFuc2FjdGlvbmFsIGVxdWl2YWxlbnQgb2YKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1mIDxicmFuY2g+IFs8c3RhcnQgcG9pbnQ+XQorJCBnaXQgY2hlY2tvdXQgPGJyYW5jaD4KKy0tLS0tLS0tLS0tLQorKwordGhhdCBpcyB0byBzYXksIHRoZSBicmFuY2ggaXMgbm90IHJlc2V0L2NyZWF0ZWQgdW5sZXNzICJnaXQgY2hlY2tvdXQiIGlzCitzdWNjZXNzZnVsLgorCisnZ2l0IGNoZWNrb3V0JyBbLXB8LS1wYXRjaF0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLjo6CisKKwlXaGVuIDxwYXRocz4gb3IgYC0tcGF0Y2hgIGFyZSBnaXZlbiwgJ2dpdCBjaGVja291dCcgZG9lcyAqbm90KgorCXN3aXRjaCBicmFuY2hlcy4gIEl0IHVwZGF0ZXMgdGhlIG5hbWVkIHBhdGhzIGluIHRoZSB3b3JraW5nIHRyZWUKKwlmcm9tIHRoZSBpbmRleCBmaWxlIG9yIGZyb20gYSBuYW1lZCA8dHJlZS1pc2g+IChtb3N0IG9mdGVuIGEKKwljb21taXQpLiAgSW4gdGhpcyBjYXNlLCB0aGUgYC1iYCBhbmQgYC0tdHJhY2tgIG9wdGlvbnMgYXJlCisJbWVhbmluZ2xlc3MgYW5kIGdpdmluZyBlaXRoZXIgb2YgdGhlbSByZXN1bHRzIGluIGFuIGVycm9yLiAgVGhlCisJPHRyZWUtaXNoPiBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgdHJlZS1pc2gKKwkoaS5lLiAgY29tbWl0LCB0YWcgb3IgdHJlZSkgdG8gdXBkYXRlIHRoZSBpbmRleCBmb3IgdGhlIGdpdmVuCisJcGF0aHMgYmVmb3JlIHVwZGF0aW5nIHRoZSB3b3JraW5nIHRyZWUuCisrCitUaGUgaW5kZXggbWF5IGNvbnRhaW4gdW5tZXJnZWQgZW50cmllcyBiZWNhdXNlIG9mIGEgcHJldmlvdXMgZmFpbGVkIG1lcmdlLgorQnkgZGVmYXVsdCwgaWYgeW91IHRyeSB0byBjaGVjayBvdXQgc3VjaCBhbiBlbnRyeSBmcm9tIHRoZSBpbmRleCwgdGhlCitjaGVja291dCBvcGVyYXRpb24gd2lsbCBmYWlsIGFuZCBub3RoaW5nIHdpbGwgYmUgY2hlY2tlZCBvdXQuCitVc2luZyBgLWZgIHdpbGwgaWdub3JlIHRoZXNlIHVubWVyZ2VkIGVudHJpZXMuICBUaGUgY29udGVudHMgZnJvbSBhCitzcGVjaWZpYyBzaWRlIG9mIHRoZSBtZXJnZSBjYW4gYmUgY2hlY2tlZCBvdXQgb2YgdGhlIGluZGV4IGJ5Cit1c2luZyBgLS1vdXJzYCBvciBgLS10aGVpcnNgLiAgV2l0aCBgLW1gLCBjaGFuZ2VzIG1hZGUgdG8gdGhlIHdvcmtpbmcgdHJlZQorZmlsZSBjYW4gYmUgZGlzY2FyZGVkIHRvIHJlLWNyZWF0ZSB0aGUgb3JpZ2luYWwgY29uZmxpY3RlZCBtZXJnZSByZXN1bHQuCisKK09QVElPTlMKKy0tLS0tLS0KKy1xOjoKKy0tcXVpZXQ6OgorCVF1aWV0LCBzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcy4KKworLWY6OgorLS1mb3JjZTo6CisJV2hlbiBzd2l0Y2hpbmcgYnJhbmNoZXMsIHByb2NlZWQgZXZlbiBpZiB0aGUgaW5kZXggb3IgdGhlCisJd29ya2luZyB0cmVlIGRpZmZlcnMgZnJvbSBIRUFELiAgVGhpcyBpcyB1c2VkIHRvIHRocm93IGF3YXkKKwlsb2NhbCBjaGFuZ2VzLgorKworV2hlbiBjaGVja2luZyBvdXQgcGF0aHMgZnJvbSB0aGUgaW5kZXgsIGRvIG5vdCBmYWlsIHVwb24gdW5tZXJnZWQKK2VudHJpZXM7IGluc3RlYWQsIHVubWVyZ2VkIGVudHJpZXMgYXJlIGlnbm9yZWQuCisKKy0tb3Vyczo6CistLXRoZWlyczo6CisJV2hlbiBjaGVja2luZyBvdXQgcGF0aHMgZnJvbSB0aGUgaW5kZXgsIGNoZWNrIG91dCBzdGFnZSAjMgorCSgnb3VycycpIG9yICMzICgndGhlaXJzJykgZm9yIHVubWVyZ2VkIHBhdGhzLgorCistYiA8bmV3X2JyYW5jaD46OgorCUNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgPG5ld19icmFuY2g+IGFuZCBzdGFydCBpdCBhdAorCTxzdGFydF9wb2ludD47IHNlZSBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yIGRldGFpbHMuCisKKy1CIDxuZXdfYnJhbmNoPjo6CisJQ3JlYXRlcyB0aGUgYnJhbmNoIDxuZXdfYnJhbmNoPiBhbmQgc3RhcnQgaXQgYXQgPHN0YXJ0X3BvaW50PjsKKwlpZiBpdCBhbHJlYWR5IGV4aXN0cywgdGhlbiByZXNldCBpdCB0byA8c3RhcnRfcG9pbnQ+LiBUaGlzIGlzCisJZXF1aXZhbGVudCB0byBydW5uaW5nICJnaXQgYnJhbmNoIiB3aXRoICItZiI7IHNlZQorCWxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IgZGV0YWlscy4KKworLXQ6OgorLS10cmFjazo6CisJV2hlbiBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHNldCB1cCAidXBzdHJlYW0iIGNvbmZpZ3VyYXRpb24uIFNlZQorCSItLXRyYWNrIiBpbiBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yIGRldGFpbHMuCisrCitJZiBubyAnLWInIG9wdGlvbiBpcyBnaXZlbiwgdGhlIG5hbWUgb2YgdGhlIG5ldyBicmFuY2ggd2lsbCBiZQorZGVyaXZlZCBmcm9tIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLiAgSWYgInJlbW90ZXMvIiBvciAicmVmcy9yZW1vdGVzLyIKK2lzIHByZWZpeGVkIGl0IGlzIHN0cmlwcGVkIGF3YXksIGFuZCB0aGVuIHRoZSBwYXJ0IHVwIHRvIHRoZQorbmV4dCBzbGFzaCAod2hpY2ggd291bGQgYmUgdGhlIG5pY2tuYW1lIG9mIHRoZSByZW1vdGUpIGlzIHJlbW92ZWQuCitUaGlzIHdvdWxkIHRlbGwgdXMgdG8gdXNlICJoYWNrIiBhcyB0aGUgbG9jYWwgYnJhbmNoIHdoZW4gYnJhbmNoaW5nCitvZmYgb2YgIm9yaWdpbi9oYWNrIiAob3IgInJlbW90ZXMvb3JpZ2luL2hhY2siLCBvciBldmVuCisicmVmcy9yZW1vdGVzL29yaWdpbi9oYWNrIikuICBJZiB0aGUgZ2l2ZW4gbmFtZSBoYXMgbm8gc2xhc2gsIG9yIHRoZSBhYm92ZQorZ3Vlc3NpbmcgcmVzdWx0cyBpbiBhbiBlbXB0eSBuYW1lLCB0aGUgZ3Vlc3NpbmcgaXMgYWJvcnRlZC4gIFlvdSBjYW4KK2V4cGxpY2l0bHkgZ2l2ZSBhIG5hbWUgd2l0aCAnLWInIGluIHN1Y2ggYSBjYXNlLgorCistLW5vLXRyYWNrOjoKKwlEbyBub3Qgc2V0IHVwICJ1cHN0cmVhbSIgY29uZmlndXJhdGlvbiwgZXZlbiBpZiB0aGUKKwlicmFuY2guYXV0b3NldHVwbWVyZ2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyB0cnVlLgorCistbDo6CisJQ3JlYXRlIHRoZSBuZXcgYnJhbmNoJ3MgcmVmbG9nOyBzZWUgbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvcgorCWRldGFpbHMuCisKKy0tZGV0YWNoOjoKKwlSYXRoZXIgdGhhbiBjaGVja2luZyBvdXQgYSBicmFuY2ggdG8gd29yayBvbiBpdCwgY2hlY2sgb3V0IGEKKwljb21taXQgZm9yIGluc3BlY3Rpb24gYW5kIGRpc2NhcmRhYmxlIGV4cGVyaW1lbnRzLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgImdpdCBjaGVja291dCA8Y29tbWl0PiIgd2hlbgorCTxjb21taXQ+IGlzIG5vdCBhIGJyYW5jaCBuYW1lLiAgU2VlIHRoZSAiREVUQUNIRUQgSEVBRCIgc2VjdGlvbgorCWJlbG93IGZvciBkZXRhaWxzLgorCistLW9ycGhhbiA8bmV3X2JyYW5jaD46OgorCUNyZWF0ZSBhIG5ldyAnb3JwaGFuJyBicmFuY2gsIG5hbWVkIDxuZXdfYnJhbmNoPiwgc3RhcnRlZCBmcm9tCisJPHN0YXJ0X3BvaW50PiBhbmQgc3dpdGNoIHRvIGl0LiAgVGhlIGZpcnN0IGNvbW1pdCBtYWRlIG9uIHRoaXMKKwluZXcgYnJhbmNoIHdpbGwgaGF2ZSBubyBwYXJlbnRzIGFuZCBpdCB3aWxsIGJlIHRoZSByb290IG9mIGEgbmV3CisJaGlzdG9yeSB0b3RhbGx5IGRpc2Nvbm5lY3RlZCBmcm9tIGFsbCB0aGUgb3RoZXIgYnJhbmNoZXMgYW5kCisJY29tbWl0cy4KKysKK1RoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSBhcmUgYWRqdXN0ZWQgYXMgaWYgeW91IGhhZCBwcmV2aW91c2x5IHJ1bgorImdpdCBjaGVja291dCA8c3RhcnRfcG9pbnQ+Ii4gIFRoaXMgYWxsb3dzIHlvdSB0byBzdGFydCBhIG5ldyBoaXN0b3J5Cit0aGF0IHJlY29yZHMgYSBzZXQgb2YgcGF0aHMgc2ltaWxhciB0byA8c3RhcnRfcG9pbnQ+IGJ5IGVhc2lseSBydW5uaW5nCisiZ2l0IGNvbW1pdCAtYSIgdG8gbWFrZSB0aGUgcm9vdCBjb21taXQuCisrCitUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSB0cmVlIGZyb20gYSBjb21taXQKK3dpdGhvdXQgZXhwb3NpbmcgaXRzIGZ1bGwgaGlzdG9yeS4gWW91IG1pZ2h0IHdhbnQgdG8gZG8gdGhpcyB0byBwdWJsaXNoCithbiBvcGVuIHNvdXJjZSBicmFuY2ggb2YgYSBwcm9qZWN0IHdob3NlIGN1cnJlbnQgdHJlZSBpcyAiY2xlYW4iLCBidXQKK3dob3NlIGZ1bGwgaGlzdG9yeSBjb250YWlucyBwcm9wcmlldGFyeSBvciBvdGhlcndpc2UgZW5jdW1iZXJlZCBiaXRzIG9mCitjb2RlLgorKworSWYgeW91IHdhbnQgdG8gc3RhcnQgYSBkaXNjb25uZWN0ZWQgaGlzdG9yeSB0aGF0IHJlY29yZHMgYSBzZXQgb2YgcGF0aHMKK3RoYXQgaXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIG9mIDxzdGFydF9wb2ludD4sIHRoZW4geW91IHNob3VsZAorY2xlYXIgdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIHJpZ2h0IGFmdGVyIGNyZWF0aW5nIHRoZSBvcnBoYW4KK2JyYW5jaCBieSBydW5uaW5nICJnaXQgcm0gLXJmIC4iIGZyb20gdGhlIHRvcCBsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLgorQWZ0ZXJ3YXJkcyB5b3Ugd2lsbCBiZSByZWFkeSB0byBwcmVwYXJlIHlvdXIgbmV3IGZpbGVzLCByZXBvcHVsYXRpbmcgdGhlCit3b3JraW5nIHRyZWUsIGJ5IGNvcHlpbmcgdGhlbSBmcm9tIGVsc2V3aGVyZSwgZXh0cmFjdGluZyBhIHRhcmJhbGwsIGV0Yy4KKworLW06OgorLS1tZXJnZTo6CisJV2hlbiBzd2l0Y2hpbmcgYnJhbmNoZXMsCisJaWYgeW91IGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9ucyB0byBvbmUgb3IgbW9yZSBmaWxlcyB0aGF0CisJYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgdGhlIGJyYW5jaCB0bworCXdoaWNoIHlvdSBhcmUgc3dpdGNoaW5nLCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHN3aXRjaAorCWJyYW5jaGVzIGluIG9yZGVyIHRvIHByZXNlcnZlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiBjb250ZXh0LgorCUhvd2V2ZXIsIHdpdGggdGhpcyBvcHRpb24sIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gdGhlIGN1cnJlbnQKKwlicmFuY2gsIHlvdXIgd29ya2luZyB0cmVlIGNvbnRlbnRzLCBhbmQgdGhlIG5ldyBicmFuY2gKKwlpcyBkb25lLCBhbmQgeW91IHdpbGwgYmUgb24gdGhlIG5ldyBicmFuY2guCisrCitXaGVuIGEgbWVyZ2UgY29uZmxpY3QgaGFwcGVucywgdGhlIGluZGV4IGVudHJpZXMgZm9yIGNvbmZsaWN0aW5nCitwYXRocyBhcmUgbGVmdCB1bm1lcmdlZCwgYW5kIHlvdSBuZWVkIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cworYW5kIG1hcmsgdGhlIHJlc29sdmVkIHBhdGhzIHdpdGggYGdpdCBhZGRgIChvciBgZ2l0IHJtYCBpZiB0aGUgbWVyZ2UKK3Nob3VsZCByZXN1bHQgaW4gZGVsZXRpb24gb2YgdGhlIHBhdGgpLgorKworV2hlbiBjaGVja2luZyBvdXQgcGF0aHMgZnJvbSB0aGUgaW5kZXgsIHRoaXMgb3B0aW9uIGxldHMgeW91IHJlY3JlYXRlCit0aGUgY29uZmxpY3RlZCBtZXJnZSBpbiB0aGUgc3BlY2lmaWVkIHBhdGhzLgorCistLWNvbmZsaWN0PTxzdHlsZT46OgorCVRoZSBzYW1lIGFzIC0tbWVyZ2Ugb3B0aW9uIGFib3ZlLCBidXQgY2hhbmdlcyB0aGUgd2F5IHRoZQorCWNvbmZsaWN0aW5nIGh1bmtzIGFyZSBwcmVzZW50ZWQsIG92ZXJyaWRpbmcgdGhlCisJbWVyZ2UuY29uZmxpY3RzdHlsZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgUG9zc2libGUgdmFsdWVzIGFyZQorCSJtZXJnZSIgKGRlZmF1bHQpIGFuZCAiZGlmZjMiIChpbiBhZGRpdGlvbiB0byB3aGF0IGlzIHNob3duIGJ5CisJIm1lcmdlIiBzdHlsZSwgc2hvd3MgdGhlIG9yaWdpbmFsIGNvbnRlbnRzKS4KKworLXA6OgorLS1wYXRjaDo6CisJSW50ZXJhY3RpdmVseSBzZWxlY3QgaHVua3MgaW4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUKKwk8dHJlZS1pc2g+IChvciB0aGUgaW5kZXgsIGlmIHVuc3BlY2lmaWVkKSBhbmQgdGhlIHdvcmtpbmcKKwl0cmVlLiAgVGhlIGNob3NlbiBodW5rcyBhcmUgdGhlbiBhcHBsaWVkIGluIHJldmVyc2UgdG8gdGhlCisJd29ya2luZyB0cmVlIChhbmQgaWYgYSA8dHJlZS1pc2g+IHdhcyBzcGVjaWZpZWQsIHRoZSBpbmRleCkuCisrCitUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiB1c2UgYGdpdCBjaGVja291dCAtcGAgdG8gc2VsZWN0aXZlbHkgZGlzY2FyZAorZWRpdHMgZnJvbSB5b3VyIGN1cnJlbnQgd29ya2luZyB0cmVlLiBTZWUgdGhlIGBgSW50ZXJhY3RpdmUgTW9kZScnCitzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWFkZFsxXSB0byBsZWFybiBob3cgdG8gb3BlcmF0ZSB0aGUgYC0tcGF0Y2hgIG1vZGUuCisKKzxicmFuY2g+OjoKKwlCcmFuY2ggdG8gY2hlY2tvdXQ7IGlmIGl0IHJlZmVycyB0byBhIGJyYW5jaCAoaS5lLiwgYSBuYW1lIHRoYXQsCisJd2hlbiBwcmVwZW5kZWQgd2l0aCAicmVmcy9oZWFkcy8iLCBpcyBhIHZhbGlkIHJlZiksIHRoZW4gdGhhdAorCWJyYW5jaCBpcyBjaGVja2VkIG91dC4gT3RoZXJ3aXNlLCBpZiBpdCByZWZlcnMgdG8gYSB2YWxpZAorCWNvbW1pdCwgeW91ciBIRUFEIGJlY29tZXMgImRldGFjaGVkIiBhbmQgeW91IGFyZSBubyBsb25nZXIgb24KKwlhbnkgYnJhbmNoIChzZWUgYmVsb3cgZm9yIGRldGFpbHMpLgorKworQXMgYSBzcGVjaWFsIGNhc2UsIHRoZSBgIkB7LU59ImAgc3ludGF4IGZvciB0aGUgTi10aCBsYXN0IGJyYW5jaAorY2hlY2tzIG91dCB0aGUgYnJhbmNoIChpbnN0ZWFkIG9mIGRldGFjaGluZykuICBZb3UgbWF5IGFsc28gc3BlY2lmeQorYC1gIHdoaWNoIGlzIHN5bm9ueW1vdXMgd2l0aCBgIkB7LTF9ImAuCisrCitBcyBhIGZ1cnRoZXIgc3BlY2lhbCBjYXNlLCB5b3UgbWF5IHVzZSBgIkEuLi5CImAgYXMgYSBzaG9ydGN1dCBmb3IgdGhlCittZXJnZSBiYXNlIG9mIGBBYCBhbmQgYEJgIGlmIHRoZXJlIGlzIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UuIFlvdSBjYW4KK2xlYXZlIG91dCBhdCBtb3N0IG9uZSBvZiBgQWAgYW5kIGBCYCwgaW4gd2hpY2ggY2FzZSBpdCBkZWZhdWx0cyB0byBgSEVBRGAuCisKKzxuZXdfYnJhbmNoPjo6CisJTmFtZSBmb3IgdGhlIG5ldyBicmFuY2guCisKKzxzdGFydF9wb2ludD46OgorCVRoZSBuYW1lIG9mIGEgY29tbWl0IGF0IHdoaWNoIHRvIHN0YXJ0IHRoZSBuZXcgYnJhbmNoOyBzZWUKKwlsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yIGRldGFpbHMuIERlZmF1bHRzIHRvIEhFQUQuCisKKzx0cmVlLWlzaD46OgorCVRyZWUgdG8gY2hlY2tvdXQgZnJvbSAod2hlbiBwYXRocyBhcmUgZ2l2ZW4pLiBJZiBub3Qgc3BlY2lmaWVkLAorCXRoZSBpbmRleCB3aWxsIGJlIHVzZWQuCisKKworCitERVRBQ0hFRCBIRUFECistLS0tLS0tLS0tLS0tCitIRUFEIG5vcm1hbGx5IHJlZmVycyB0byBhIG5hbWVkIGJyYW5jaCAoZS5nLiAnbWFzdGVyJykuIE1lYW53aGlsZSwgZWFjaAorYnJhbmNoIHJlZmVycyB0byBhIHNwZWNpZmljIGNvbW1pdC4gTGV0J3MgbG9vayBhdCBhIHJlcG8gd2l0aCB0aHJlZQorY29tbWl0cywgb25lIG9mIHRoZW0gdGFnZ2VkLCBhbmQgd2l0aCBicmFuY2ggJ21hc3RlcicgY2hlY2tlZCBvdXQ6CisKKy0tLS0tLS0tLS0tLQorCSAgIEhFQUQgKHJlZmVycyB0byBicmFuY2ggJ21hc3RlcicpCisJICAgIHwKKwkgICAgdgorYS0tLWItLS1jICBicmFuY2ggJ21hc3RlcicgKHJlZmVycyB0byBjb21taXQgJ2MnKQorICAgIF4KKyAgICB8CisgIHRhZyAndjIuMCcgKHJlZmVycyB0byBjb21taXQgJ2InKQorLS0tLS0tLS0tLS0tCisKK1doZW4gYSBjb21taXQgaXMgY3JlYXRlZCBpbiB0aGlzIHN0YXRlLCB0aGUgYnJhbmNoIGlzIHVwZGF0ZWQgdG8gcmVmZXIgdG8KK3RoZSBuZXcgY29tbWl0LiBTcGVjaWZpY2FsbHksICdnaXQgY29tbWl0JyBjcmVhdGVzIGEgbmV3IGNvbW1pdCAnZCcsIHdob3NlCitwYXJlbnQgaXMgY29tbWl0ICdjJywgYW5kIHRoZW4gdXBkYXRlcyBicmFuY2ggJ21hc3RlcicgdG8gcmVmZXIgdG8gbmV3Citjb21taXQgJ2QnLiBIRUFEIHN0aWxsIHJlZmVycyB0byBicmFuY2ggJ21hc3RlcicgYW5kIHNvIGluZGlyZWN0bHkgbm93IHJlZmVycwordG8gY29tbWl0ICdkJzoKKworLS0tLS0tLS0tLS0tCiskIGVkaXQ7IGdpdCBhZGQ7IGdpdCBjb21taXQKKworCSAgICAgICBIRUFEIChyZWZlcnMgdG8gYnJhbmNoICdtYXN0ZXInKQorCQl8CisJCXYKK2EtLS1iLS0tYy0tLWQgIGJyYW5jaCAnbWFzdGVyJyAocmVmZXJzIHRvIGNvbW1pdCAnZCcpCisgICAgXgorICAgIHwKKyAgdGFnICd2Mi4wJyAocmVmZXJzIHRvIGNvbW1pdCAnYicpCistLS0tLS0tLS0tLS0KKworSXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIGNoZWNrb3V0IGEgY29tbWl0IHRoYXQgaXMgbm90IGF0Cit0aGUgdGlwIG9mIGFueSBuYW1lZCBicmFuY2gsIG9yIGV2ZW4gdG8gY3JlYXRlIGEgbmV3IGNvbW1pdCB0aGF0IGlzIG5vdAorcmVmZXJlbmNlZCBieSBhIG5hbWVkIGJyYW5jaC4gTGV0J3MgbG9vayBhdCB3aGF0IGhhcHBlbnMgd2hlbiB3ZQorY2hlY2tvdXQgY29tbWl0ICdiJyAoaGVyZSB3ZSBzaG93IHR3byB3YXlzIHRoaXMgbWF5IGJlIGRvbmUpOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IHYyLjAgICMgb3IKKyQgZ2l0IGNoZWNrb3V0IG1hc3Rlcl5eCisKKyAgIEhFQUQgKHJlZmVycyB0byBjb21taXQgJ2InKQorICAgIHwKKyAgICB2CithLS0tYi0tLWMtLS1kICBicmFuY2ggJ21hc3RlcicgKHJlZmVycyB0byBjb21taXQgJ2QnKQorICAgIF4KKyAgICB8CisgIHRhZyAndjIuMCcgKHJlZmVycyB0byBjb21taXQgJ2InKQorLS0tLS0tLS0tLS0tCisKK05vdGljZSB0aGF0IHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggY2hlY2tvdXQgY29tbWFuZCB3ZSB1c2UsIEhFQUQgbm93IHJlZmVycworZGlyZWN0bHkgdG8gY29tbWl0ICdiJy4gVGhpcyBpcyBrbm93biBhcyBiZWluZyBpbiBkZXRhY2hlZCBIRUFEIHN0YXRlLgorSXQgbWVhbnMgc2ltcGx5IHRoYXQgSEVBRCByZWZlcnMgdG8gYSBzcGVjaWZpYyBjb21taXQsIGFzIG9wcG9zZWQgdG8KK3JlZmVycmluZyB0byBhIG5hbWVkIGJyYW5jaC4gTGV0J3Mgc2VlIHdoYXQgaGFwcGVucyB3aGVuIHdlIGNyZWF0ZSBhIGNvbW1pdDoKKworLS0tLS0tLS0tLS0tCiskIGVkaXQ7IGdpdCBhZGQ7IGdpdCBjb21taXQKKworICAgICBIRUFEIChyZWZlcnMgdG8gY29tbWl0ICdlJykKKyAgICAgIHwKKyAgICAgIHYKKyAgICAgIGUKKyAgICAgLworYS0tLWItLS1jLS0tZCAgYnJhbmNoICdtYXN0ZXInIChyZWZlcnMgdG8gY29tbWl0ICdkJykKKyAgICBeCisgICAgfAorICB0YWcgJ3YyLjAnIChyZWZlcnMgdG8gY29tbWl0ICdiJykKKy0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBub3cgYSBuZXcgY29tbWl0ICdlJywgYnV0IGl0IGlzIHJlZmVyZW5jZWQgb25seSBieSBIRUFELiBXZSBjYW4KK29mIGNvdXJzZSBhZGQgeWV0IGFub3RoZXIgY29tbWl0IGluIHRoaXMgc3RhdGU6CisKKy0tLS0tLS0tLS0tLQorJCBlZGl0OyBnaXQgYWRkOyBnaXQgY29tbWl0CisKKwkgSEVBRCAocmVmZXJzIHRvIGNvbW1pdCAnZicpCisJICB8CisJICB2CisgICAgICBlLS0tZgorICAgICAvCithLS0tYi0tLWMtLS1kICBicmFuY2ggJ21hc3RlcicgKHJlZmVycyB0byBjb21taXQgJ2QnKQorICAgIF4KKyAgICB8CisgIHRhZyAndjIuMCcgKHJlZmVycyB0byBjb21taXQgJ2InKQorLS0tLS0tLS0tLS0tCisKK0luIGZhY3QsIHdlIGNhbiBwZXJmb3JtIGFsbCB0aGUgbm9ybWFsIGdpdCBvcGVyYXRpb25zLiBCdXQsIGxldCdzIGxvb2sKK2F0IHdoYXQgaGFwcGVucyB3aGVuIHdlIHRoZW4gY2hlY2tvdXQgbWFzdGVyOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorCisJICAgICAgIEhFQUQgKHJlZmVycyB0byBicmFuY2ggJ21hc3RlcicpCisgICAgICBlLS0tZiAgICAgfAorICAgICAvICAgICAgICAgIHYKK2EtLS1iLS0tYy0tLWQgIGJyYW5jaCAnbWFzdGVyJyAocmVmZXJzIHRvIGNvbW1pdCAnZCcpCisgICAgXgorICAgIHwKKyAgdGFnICd2Mi4wJyAocmVmZXJzIHRvIGNvbW1pdCAnYicpCistLS0tLS0tLS0tLS0KKworSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBhdCB0aGlzIHBvaW50IG5vdGhpbmcgcmVmZXJzIHRvIGNvbW1pdAorJ2YnLiBFdmVudHVhbGx5IGNvbW1pdCAnZicgKGFuZCBieSBleHRlbnNpb24gY29tbWl0ICdlJykgd2lsbCBiZSBkZWxldGVkCitieSB0aGUgcm91dGluZSBnaXQgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3MsIHVubGVzcyB3ZSBjcmVhdGUgYSByZWZlcmVuY2UKK2JlZm9yZSB0aGF0IGhhcHBlbnMuIElmIHdlIGhhdmUgbm90IHlldCBtb3ZlZCBhd2F5IGZyb20gY29tbWl0ICdmJywKK2FueSBvZiB0aGVzZSB3aWxsIGNyZWF0ZSBhIHJlZmVyZW5jZSB0byBpdDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiBmb28gICA8MT4KKyQgZ2l0IGJyYW5jaCBmb28gICAgICAgIDwyPgorJCBnaXQgdGFnIGZvbyAgICAgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKworPDE+IGNyZWF0ZXMgYSBuZXcgYnJhbmNoICdmb28nLCB3aGljaCByZWZlcnMgdG8gY29tbWl0ICdmJywgYW5kIHRoZW4KK3VwZGF0ZXMgSEVBRCB0byByZWZlciB0byBicmFuY2ggJ2ZvbycuIEluIG90aGVyIHdvcmRzLCB3ZSdsbCBubyBsb25nZXIKK2JlIGluIGRldGFjaGVkIEhFQUQgc3RhdGUgYWZ0ZXIgdGhpcyBjb21tYW5kLgorCis8Mj4gc2ltaWxhcmx5IGNyZWF0ZXMgYSBuZXcgYnJhbmNoICdmb28nLCB3aGljaCByZWZlcnMgdG8gY29tbWl0ICdmJywKK2J1dCBsZWF2ZXMgSEVBRCBkZXRhY2hlZC4KKworPDM+IGNyZWF0ZXMgYSBuZXcgdGFnICdmb28nLCB3aGljaCByZWZlcnMgdG8gY29tbWl0ICdmJywKK2xlYXZpbmcgSEVBRCBkZXRhY2hlZC4KKworSWYgd2UgaGF2ZSBtb3ZlZCBhd2F5IGZyb20gY29tbWl0ICdmJywgdGhlbiB3ZSBtdXN0IGZpcnN0IHJlY292ZXIgaXRzIG9iamVjdAorbmFtZSAodHlwaWNhbGx5IGJ5IHVzaW5nIGdpdCByZWZsb2cpLCBhbmQgdGhlbiB3ZSBjYW4gY3JlYXRlIGEgcmVmZXJlbmNlIHRvCitpdC4gRm9yIGV4YW1wbGUsIHRvIHNlZSB0aGUgbGFzdCB0d28gY29tbWl0cyB0byB3aGljaCBIRUFEIHJlZmVycmVkLCB3ZQorY2FuIHVzZSBlaXRoZXIgb2YgdGhlc2UgY29tbWFuZHM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVmbG9nIC0yIEhFQUQgIyBvcgorJCBnaXQgbG9nIC1nIC0yIEhFQUQKKy0tLS0tLS0tLS0tLQorCitFWEFNUExFUworLS0tLS0tLS0KKworLiBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIGNoZWNrcyBvdXQgdGhlIGBtYXN0ZXJgIGJyYW5jaCwgcmV2ZXJ0cwordGhlIGBNYWtlZmlsZWAgdG8gdHdvIHJldmlzaW9ucyBiYWNrLCBkZWxldGVzIGhlbGxvLmMgYnkKK21pc3Rha2UsIGFuZCBnZXRzIGl0IGJhY2sgZnJvbSB0aGUgaW5kZXguCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG1hc3RlciAgICAgICAgICAgICA8MT4KKyQgZ2l0IGNoZWNrb3V0IG1hc3Rlcn4yIE1ha2VmaWxlICA8Mj4KKyQgcm0gLWYgaGVsbG8uYworJCBnaXQgY2hlY2tvdXQgaGVsbG8uYyAgICAgICAgICAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gc3dpdGNoIGJyYW5jaAorPDI+IHRha2UgYSBmaWxlIG91dCBvZiBhbm90aGVyIGNvbW1pdAorPDM+IHJlc3RvcmUgaGVsbG8uYyBmcm9tIHRoZSBpbmRleAorKworSWYgeW91IHdhbnQgdG8gY2hlY2sgb3V0IF9hbGxfIEMgc291cmNlIGZpbGVzIG91dCBvZiB0aGUgaW5kZXgsCit5b3UgY2FuIHNheQorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtLSAnKi5jJworLS0tLS0tLS0tLS0tCisrCitOb3RlIHRoZSBxdW90ZXMgYXJvdW5kIGAqLmNgLiAgVGhlIGZpbGUgYGhlbGxvLmNgIHdpbGwgYWxzbyBiZQorY2hlY2tlZCBvdXQsIGV2ZW4gdGhvdWdoIGl0IGlzIG5vIGxvbmdlciBpbiB0aGUgd29ya2luZyB0cmVlLAorYmVjYXVzZSB0aGUgZmlsZSBnbG9iYmluZyBpcyB1c2VkIHRvIG1hdGNoIGVudHJpZXMgaW4gdGhlIGluZGV4Cisobm90IGluIHRoZSB3b3JraW5nIHRyZWUgYnkgdGhlIHNoZWxsKS4KKysKK0lmIHlvdSBoYXZlIGFuIHVuZm9ydHVuYXRlIGJyYW5jaCB0aGF0IGlzIG5hbWVkIGBoZWxsby5jYCwgdGhpcworc3RlcCB3b3VsZCBiZSBjb25mdXNlZCBhcyBhbiBpbnN0cnVjdGlvbiB0byBzd2l0Y2ggdG8gdGhhdCBicmFuY2guCitZb3Ugc2hvdWxkIGluc3RlYWQgd3JpdGU6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC0tIGhlbGxvLmMKKy0tLS0tLS0tLS0tLQorCisuIEFmdGVyIHdvcmtpbmcgaW4gdGhlIHdyb25nIGJyYW5jaCwgc3dpdGNoaW5nIHRvIHRoZSBjb3JyZWN0CiticmFuY2ggd291bGQgYmUgZG9uZSB1c2luZzoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbXl0b3BpYworLS0tLS0tLS0tLS0tCisrCitIb3dldmVyLCB5b3VyICJ3cm9uZyIgYnJhbmNoIGFuZCBjb3JyZWN0ICJteXRvcGljIiBicmFuY2ggbWF5CitkaWZmZXIgaW4gZmlsZXMgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCBsb2NhbGx5LCBpbiB3aGljaCBjYXNlCit0aGUgYWJvdmUgY2hlY2tvdXQgd291bGQgZmFpbCBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG15dG9waWMKK2Vycm9yOiBZb3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIHRvICdmcm90eic7IG5vdCBzd2l0Y2hpbmcgYnJhbmNoZXMuCistLS0tLS0tLS0tLS0KKysKK1lvdSBjYW4gZ2l2ZSB0aGUgYC1tYCBmbGFnIHRvIHRoZSBjb21tYW5kLCB3aGljaCB3b3VsZCB0cnkgYQordGhyZWUtd2F5IG1lcmdlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtbSBteXRvcGljCitBdXRvLW1lcmdpbmcgZnJvdHoKKy0tLS0tLS0tLS0tLQorKworQWZ0ZXIgdGhpcyB0aHJlZS13YXkgbWVyZ2UsIHRoZSBsb2NhbCBtb2RpZmljYXRpb25zIGFyZSBfbm90XworcmVnaXN0ZXJlZCBpbiB5b3VyIGluZGV4IGZpbGUsIHNvIGBnaXQgZGlmZmAgd291bGQgc2hvdyB5b3Ugd2hhdAorY2hhbmdlcyB5b3UgbWFkZSBzaW5jZSB0aGUgdGlwIG9mIHRoZSBuZXcgYnJhbmNoLgorCisuIFdoZW4gYSBtZXJnZSBjb25mbGljdCBoYXBwZW5zIGR1cmluZyBzd2l0Y2hpbmcgYnJhbmNoZXMgd2l0aAordGhlIGAtbWAgb3B0aW9uLCB5b3Ugd291bGQgc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1tIG15dG9waWMKK0F1dG8tbWVyZ2luZyBmcm90egorRVJST1I6IE1lcmdlIGNvbmZsaWN0IGluIGZyb3R6CitmYXRhbDogbWVyZ2UgcHJvZ3JhbSBmYWlsZWQKKy0tLS0tLS0tLS0tLQorKworQXQgdGhpcyBwb2ludCwgYGdpdCBkaWZmYCBzaG93cyB0aGUgY2hhbmdlcyBjbGVhbmx5IG1lcmdlZCBhcyBpbgordGhlIHByZXZpb3VzIGV4YW1wbGUsIGFzIHdlbGwgYXMgdGhlIGNoYW5nZXMgaW4gdGhlIGNvbmZsaWN0ZWQKK2ZpbGVzLiAgRWRpdCBhbmQgcmVzb2x2ZSB0aGUgY29uZmxpY3QgYW5kIG1hcmsgaXQgcmVzb2x2ZWQgd2l0aAorYGdpdCBhZGRgIGFzIHVzdWFsOgorKworLS0tLS0tLS0tLS0tCiskIGVkaXQgZnJvdHoKKyQgZ2l0IGFkZCBmcm90egorLS0tLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDVkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKQEAgLTAsMCArMSwyMjQgQEAKK2dpdC1jaGVycnktcGljaygxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVycnktcGljayAtIEFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVycnktcGljaycgWy0tZWRpdF0gWy1uXSBbLW0gcGFyZW50LW51bWJlcl0gWy1zXSBbLXhdIFstLWZmXSA8Y29tbWl0Pi4uLgorJ2dpdCBjaGVycnktcGljaycgLS1jb250aW51ZQorJ2dpdCBjaGVycnktcGljaycgLS1xdWl0CisnZ2l0IGNoZXJyeS1waWNrJyAtLWFib3J0CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXZlbiBvbmUgb3IgbW9yZSBleGlzdGluZyBjb21taXRzLCBhcHBseSB0aGUgY2hhbmdlIGVhY2ggb25lCitpbnRyb2R1Y2VzLCByZWNvcmRpbmcgYSBuZXcgY29tbWl0IGZvciBlYWNoLiAgVGhpcyByZXF1aXJlcyB5b3VyCit3b3JraW5nIHRyZWUgdG8gYmUgY2xlYW4gKG5vIG1vZGlmaWNhdGlvbnMgZnJvbSB0aGUgSEVBRCBjb21taXQpLgorCitXaGVuIGl0IGlzIG5vdCBvYnZpb3VzIGhvdyB0byBhcHBseSBhIGNoYW5nZSwgdGhlIGZvbGxvd2luZworaGFwcGVuczoKKworMS4gVGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBgSEVBRGAgcG9pbnRlciBzdGF5IGF0IHRoZSBsYXN0IGNvbW1pdAorICAgc3VjY2Vzc2Z1bGx5IG1hZGUuCisyLiBUaGUgYENIRVJSWV9QSUNLX0hFQURgIHJlZiBpcyBzZXQgdG8gcG9pbnQgYXQgdGhlIGNvbW1pdCB0aGF0CisgICBpbnRyb2R1Y2VkIHRoZSBjaGFuZ2UgdGhhdCBpcyBkaWZmaWN1bHQgdG8gYXBwbHkuCiszLiBQYXRocyBpbiB3aGljaCB0aGUgY2hhbmdlIGFwcGxpZWQgY2xlYW5seSBhcmUgdXBkYXRlZCBib3RoCisgICBpbiB0aGUgaW5kZXggZmlsZSBhbmQgaW4geW91ciB3b3JraW5nIHRyZWUuCis0LiBGb3IgY29uZmxpY3RpbmcgcGF0aHMsIHRoZSBpbmRleCBmaWxlIHJlY29yZHMgdXAgdG8gdGhyZWUKKyAgIHZlcnNpb25zLCBhcyBkZXNjcmliZWQgaW4gdGhlICJUUlVFIE1FUkdFIiBzZWN0aW9uIG9mCisgICBsaW5rZ2l0OmdpdC1tZXJnZVsxXS4gIFRoZSB3b3JraW5nIHRyZWUgZmlsZXMgd2lsbCBpbmNsdWRlCisgICBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb25mbGljdCBicmFja2V0ZWQgYnkgdGhlIHVzdWFsCisgICBjb25mbGljdCBtYXJrZXJzIGA8PDw8PDw8YCBhbmQgYD4+Pj4+Pj5gLgorNS4gTm8gb3RoZXIgbW9kaWZpY2F0aW9ucyBhcmUgbWFkZS4KKworU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBzb21lIGhpbnRzIG9uIHJlc29sdmluZyBzdWNoCitjb25mbGljdHMuCisKK09QVElPTlMKKy0tLS0tLS0KKzxjb21taXQ+Li4uOjoKKwlDb21taXRzIHRvIGNoZXJyeS1waWNrLgorCUZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIGNvbW1pdHMsIHNlZQorCWxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddLgorCVNldHMgb2YgY29tbWl0cyBjYW4gYmUgcGFzc2VkIGJ1dCBubyB0cmF2ZXJzYWwgaXMgZG9uZSBieQorCWRlZmF1bHQsIGFzIGlmIHRoZSAnLS1uby13YWxrJyBvcHRpb24gd2FzIHNwZWNpZmllZCwgc2VlCisJbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIGEgcmFuZ2Ugd2lsbAorCWZlZWQgYWxsIDxjb21taXQ+Li4uIGFyZ3VtZW50cyB0byBhIHNpbmdsZSByZXZpc2lvbiB3YWxrCisJKHNlZSBhIGxhdGVyIGV4YW1wbGUgdGhhdCB1c2VzICdtYWludCBtYXN0ZXIuLm5leHQnKS4KKworLWU6OgorLS1lZGl0OjoKKwlXaXRoIHRoaXMgb3B0aW9uLCAnZ2l0IGNoZXJyeS1waWNrJyB3aWxsIGxldCB5b3UgZWRpdCB0aGUgY29tbWl0CisJbWVzc2FnZSBwcmlvciB0byBjb21taXR0aW5nLgorCisteDo6CisJV2hlbiByZWNvcmRpbmcgdGhlIGNvbW1pdCwgYXBwZW5kIGEgbGluZSB0aGF0IHNheXMKKwkiKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgLi4uKSIgdG8gdGhlIG9yaWdpbmFsIGNvbW1pdAorCW1lc3NhZ2UgaW4gb3JkZXIgdG8gaW5kaWNhdGUgd2hpY2ggY29tbWl0IHRoaXMgY2hhbmdlIHdhcworCWNoZXJyeS1waWNrZWQgZnJvbS4gIFRoaXMgaXMgZG9uZSBvbmx5IGZvciBjaGVycnkKKwlwaWNrcyB3aXRob3V0IGNvbmZsaWN0cy4gIERvIG5vdCB1c2UgdGhpcyBvcHRpb24gaWYKKwl5b3UgYXJlIGNoZXJyeS1waWNraW5nIGZyb20geW91ciBwcml2YXRlIGJyYW5jaCBiZWNhdXNlCisJdGhlIGluZm9ybWF0aW9uIGlzIHVzZWxlc3MgdG8gdGhlIHJlY2lwaWVudC4gIElmIG9uIHRoZQorCW90aGVyIGhhbmQgeW91IGFyZSBjaGVycnktcGlja2luZyBiZXR3ZWVuIHR3byBwdWJsaWNseQorCXZpc2libGUgYnJhbmNoZXMgKGUuZy4gYmFja3BvcnRpbmcgYSBmaXggdG8gYQorCW1haW50ZW5hbmNlIGJyYW5jaCBmb3IgYW4gb2xkZXIgcmVsZWFzZSBmcm9tIGEKKwlkZXZlbG9wbWVudCBicmFuY2gpLCBhZGRpbmcgdGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUKKwl1c2VmdWwuCisKKy1yOjoKKwlJdCB1c2VkIHRvIGJlIHRoYXQgdGhlIGNvbW1hbmQgZGVmYXVsdGVkIHRvIGRvIGAteGAKKwlkZXNjcmliZWQgYWJvdmUsIGFuZCBgLXJgIHdhcyB0byBkaXNhYmxlIGl0LiAgTm93IHRoZQorCWRlZmF1bHQgaXMgbm90IHRvIGRvIGAteGAgc28gdGhpcyBvcHRpb24gaXMgYSBuby1vcC4KKworLW0gcGFyZW50LW51bWJlcjo6CistLW1haW5saW5lIHBhcmVudC1udW1iZXI6OgorCVVzdWFsbHkgeW91IGNhbm5vdCBjaGVycnktcGljayBhIG1lcmdlIGJlY2F1c2UgeW91IGRvIG5vdCBrbm93IHdoaWNoCisJc2lkZSBvZiB0aGUgbWVyZ2Ugc2hvdWxkIGJlIGNvbnNpZGVyZWQgdGhlIG1haW5saW5lLiAgVGhpcworCW9wdGlvbiBzcGVjaWZpZXMgdGhlIHBhcmVudCBudW1iZXIgKHN0YXJ0aW5nIGZyb20gMSkgb2YKKwl0aGUgbWFpbmxpbmUgYW5kIGFsbG93cyBjaGVycnktcGljayB0byByZXBsYXkgdGhlIGNoYW5nZQorCXJlbGF0aXZlIHRvIHRoZSBzcGVjaWZpZWQgcGFyZW50LgorCistbjo6CistLW5vLWNvbW1pdDo6CisJVXN1YWxseSB0aGUgY29tbWFuZCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBzZXF1ZW5jZSBvZiBjb21taXRzLgorCVRoaXMgZmxhZyBhcHBsaWVzIHRoZSBjaGFuZ2VzIG5lY2Vzc2FyeSB0byBjaGVycnktcGljaworCWVhY2ggbmFtZWQgY29tbWl0IHRvIHlvdXIgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgsCisJd2l0aG91dCBtYWtpbmcgYW55IGNvbW1pdC4gIEluIGFkZGl0aW9uLCB3aGVuIHRoaXMKKwlvcHRpb24gaXMgdXNlZCwgeW91ciBpbmRleCBkb2VzIG5vdCBoYXZlIHRvIG1hdGNoIHRoZQorCUhFQUQgY29tbWl0LiAgVGhlIGNoZXJyeS1waWNrIGlzIGRvbmUgYWdhaW5zdCB0aGUKKwliZWdpbm5pbmcgc3RhdGUgb2YgeW91ciBpbmRleC4KKysKK1RoaXMgaXMgdXNlZnVsIHdoZW4gY2hlcnJ5LXBpY2tpbmcgbW9yZSB0aGFuIG9uZSBjb21taXRzJworZWZmZWN0IHRvIHlvdXIgaW5kZXggaW4gYSByb3cuCisKKy1zOjoKKy0tc2lnbm9mZjo6CisJQWRkIFNpZ25lZC1vZmYtYnkgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQgbWVzc2FnZS4KKworLS1mZjo6CisJSWYgdGhlIGN1cnJlbnQgSEVBRCBpcyB0aGUgc2FtZSBhcyB0aGUgcGFyZW50IG9mIHRoZQorCWNoZXJyeS1waWNrJ2VkIGNvbW1pdCwgdGhlbiBhIGZhc3QgZm9yd2FyZCB0byB0aGlzIGNvbW1pdCB3aWxsCisJYmUgcGVyZm9ybWVkLgorCistLWFsbG93LWVtcHR5OjoKKwlCeSBkZWZhdWx0LCBjaGVycnktcGlja2luZyBhbiBlbXB0eSBjb21taXQgd2lsbCBmYWlsLAorCWluZGljYXRpbmcgdGhhdCBhbiBleHBsaWNpdCBpbnZvY2F0aW9uIG9mIGBnaXQgY29tbWl0CisJLS1hbGxvdy1lbXB0eWAgaXMgcmVxdWlyZWQuIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyB0aGF0CisJYmVoYXZpb3IsIGFsbG93aW5nIGVtcHR5IGNvbW1pdHMgdG8gYmUgcHJlc2VydmVkIGF1dG9tYXRpY2FsbHkKKwlpbiBhIGNoZXJyeS1waWNrLiBOb3RlIHRoYXQgd2hlbiAiLS1mZiIgaXMgaW4gZWZmZWN0LCBlbXB0eQorCWNvbW1pdHMgdGhhdCBtZWV0IHRoZSAiZmFzdC1mb3J3YXJkIiByZXF1aXJlbWVudCB3aWxsIGJlIGtlcHQKKwlldmVuIHdpdGhvdXQgdGhpcyBvcHRpb24uICBOb3RlIGFsc28sIHRoYXQgdXNlIG9mIHRoaXMgb3B0aW9uIG9ubHkKKwlrZWVwcyBjb21taXRzIHRoYXQgd2VyZSBpbml0aWFsbHkgZW1wdHkgKGkuZS4gdGhlIGNvbW1pdCByZWNvcmRlZCB0aGUKKwlzYW1lIHRyZWUgYXMgaXRzIHBhcmVudCkuICBDb21taXRzIHdoaWNoIGFyZSBtYWRlIGVtcHR5IGR1ZSB0byBhCisJcHJldmlvdXMgY29tbWl0IGFyZSBkcm9wcGVkLiAgVG8gZm9yY2UgdGhlIGluY2x1c2lvbiBvZiB0aG9zZSBjb21taXRzCisJdXNlIGAtLWtlZXAtcmVkdW5kYW50LWNvbW1pdHNgLgorCistLWFsbG93LWVtcHR5LW1lc3NhZ2U6OgorCUJ5IGRlZmF1bHQsIGNoZXJyeS1waWNraW5nIGEgY29tbWl0IHdpdGggYW4gZW1wdHkgbWVzc2FnZSB3aWxsIGZhaWwuCisJVGhpcyBvcHRpb24gb3ZlcnJpZGVzIHRoYXQgYmVoYXZpb3VyLCBhbGxvd2luZyBjb21taXRzIHdpdGggZW1wdHkKKwltZXNzYWdlcyB0byBiZSBjaGVycnkgcGlja2VkLgorCistLWtlZXAtcmVkdW5kYW50LWNvbW1pdHM6OgorCUlmIGEgY29tbWl0IGJlaW5nIGNoZXJyeSBwaWNrZWQgZHVwbGljYXRlcyBhIGNvbW1pdCBhbHJlYWR5IGluIHRoZQorCWN1cnJlbnQgaGlzdG9yeSwgaXQgd2lsbCBiZWNvbWUgZW1wdHkuICBCeSBkZWZhdWx0IHRoZXNlCisJcmVkdW5kYW50IGNvbW1pdHMgYXJlIGlnbm9yZWQuICBUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhhdCBiZWhhdmlvciBhbmQKKwljcmVhdGVzIGFuIGVtcHR5IGNvbW1pdCBvYmplY3QuICBJbXBsaWVzIGAtLWFsbG93LWVtcHR5YC4KKworLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKwlVc2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5LiAgU2hvdWxkIG9ubHkgYmUgdXNlZCBvbmNlLgorCVNlZSB0aGUgTUVSR0UgU1RSQVRFR0lFUyBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdCisJZm9yIGRldGFpbHMuCisKKy1YPG9wdGlvbj46OgorLS1zdHJhdGVneS1vcHRpb249PG9wdGlvbj46OgorCVBhc3MgdGhlIG1lcmdlIHN0cmF0ZWd5LXNwZWNpZmljIG9wdGlvbiB0aHJvdWdoIHRvIHRoZQorCW1lcmdlIHN0cmF0ZWd5LiAgU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBkZXRhaWxzLgorCitTRVFVRU5DRVIgU1VCQ09NTUFORFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZTo6c2VxdWVuY2VyLnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorYGdpdCBjaGVycnktcGljayBtYXN0ZXJgOjoKKworCUFwcGx5IHRoZSBjaGFuZ2UgaW50cm9kdWNlZCBieSB0aGUgY29tbWl0IGF0IHRoZSB0aXAgb2YgdGhlCisJbWFzdGVyIGJyYW5jaCBhbmQgY3JlYXRlIGEgbmV3IGNvbW1pdCB3aXRoIHRoaXMgY2hhbmdlLgorCitgZ2l0IGNoZXJyeS1waWNrIC4ubWFzdGVyYDo6CitgZ2l0IGNoZXJyeS1waWNrIF5IRUFEIG1hc3RlcmA6OgorCisJQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBhbGwgY29tbWl0cyB0aGF0IGFyZSBhbmNlc3RvcnMKKwlvZiBtYXN0ZXIgYnV0IG5vdCBvZiBIRUFEIHRvIHByb2R1Y2UgbmV3IGNvbW1pdHMuCisKK2BnaXQgY2hlcnJ5LXBpY2sgbWFpbnQgbmV4dCBebWFzdGVyYDo6CitgZ2l0IGNoZXJyeS1waWNrIG1haW50IG1hc3Rlci4ubmV4dGA6OgorCisJQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBhbGwgY29tbWl0cyB0aGF0IGFyZQorCWFuY2VzdG9ycyBvZiBtYWludCBvciBuZXh0LCBidXQgbm90IG1hc3RlciBvciBhbnkgb2YgaXRzCisJYW5jZXN0b3JzLiAgTm90ZSB0aGF0IHRoZSBsYXR0ZXIgZG9lcyBub3QgbWVhbiBgbWFpbnRgIGFuZAorCWV2ZXJ5dGhpbmcgYmV0d2VlbiBgbWFzdGVyYCBhbmQgYG5leHRgOyBzcGVjaWZpY2FsbHksCisJYG1haW50YCB3aWxsIG5vdCBiZSB1c2VkIGlmIGl0IGlzIGluY2x1ZGVkIGluIGBtYXN0ZXJgLgorCitgZ2l0IGNoZXJyeS1waWNrIG1hc3Rlcn40IG1hc3Rlcn4yYDo6CisKKwlBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBmaWZ0aCBhbmQgdGhpcmQgbGFzdAorCWNvbW1pdHMgcG9pbnRlZCB0byBieSBtYXN0ZXIgYW5kIGNyZWF0ZSAyIG5ldyBjb21taXRzIHdpdGgKKwl0aGVzZSBjaGFuZ2VzLgorCitgZ2l0IGNoZXJyeS1waWNrIC1uIG1hc3Rlcn4xIG5leHRgOjoKKworCUFwcGx5IHRvIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkCisJYnkgdGhlIHNlY29uZCBsYXN0IGNvbW1pdCBwb2ludGVkIHRvIGJ5IG1hc3RlciBhbmQgYnkgdGhlIGxhc3QKKwljb21taXQgcG9pbnRlZCB0byBieSBuZXh0LCBidXQgZG8gbm90IGNyZWF0ZSBhbnkgY29tbWl0IHdpdGgKKwl0aGVzZSBjaGFuZ2VzLgorCitgZ2l0IGNoZXJyeS1waWNrIC0tZmYgLi5uZXh0YDo6CisKKwlJZiBoaXN0b3J5IGlzIGxpbmVhciBhbmQgSEVBRCBpcyBhbiBhbmNlc3RvciBvZiBuZXh0LCB1cGRhdGUKKwl0aGUgd29ya2luZyB0cmVlIGFuZCBhZHZhbmNlIHRoZSBIRUFEIHBvaW50ZXIgdG8gbWF0Y2ggbmV4dC4KKwlPdGhlcndpc2UsIGFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhvc2UgY29tbWl0cyB0aGF0CisJYXJlIGluIG5leHQgYnV0IG5vdCBIRUFEIHRvIHRoZSBjdXJyZW50IGJyYW5jaCwgY3JlYXRpbmcgYSBuZXcKKwljb21taXQgZm9yIGVhY2ggbmV3IGNoYW5nZS4KKworYGdpdCByZXYtbGlzdCAtLXJldmVyc2UgbWFzdGVyIC0tIFJFQURNRSB8IGdpdCBjaGVycnktcGljayAtbiAtLXN0ZGluYDo6CisKKwlBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IGFsbCBjb21taXRzIG9uIHRoZSBtYXN0ZXIKKwlicmFuY2ggdGhhdCB0b3VjaGVkIFJFQURNRSB0byB0aGUgd29ya2luZyB0cmVlIGFuZCBpbmRleCwKKwlzbyB0aGUgcmVzdWx0IGNhbiBiZSBpbnNwZWN0ZWQgYW5kIG1hZGUgaW50byBhIHNpbmdsZSBuZXcKKwljb21taXQgaWYgc3VpdGFibGUuCisKK1RoZSBmb2xsb3dpbmcgc2VxdWVuY2UgYXR0ZW1wdHMgdG8gYmFja3BvcnQgYSBwYXRjaCwgYmFpbHMgb3V0IGJlY2F1c2UKK3RoZSBjb2RlIHRoZSBwYXRjaCBhcHBsaWVzIHRvIGhhcyBjaGFuZ2VkIHRvbyBtdWNoLCBhbmQgdGhlbiB0cmllcworYWdhaW4sIHRoaXMgdGltZSBleGVyY2lzaW5nIG1vcmUgY2FyZSBhYm91dCBtYXRjaGluZyB1cCBjb250ZXh0IGxpbmVzLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZXJyeS1waWNrIHRvcGljXiAgICAgICAgICAgICA8MT4KKyQgZ2l0IGRpZmYgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IHJlc2V0IC0tbWVyZ2UgT1JJR19IRUFEICAgICAgICA8Mz4KKyQgZ2l0IGNoZXJyeS1waWNrIC1YcGF0aWVuY2UgdG9waWNeICA8ND4KKy0tLS0tLS0tLS0tLQorPDE+IGFwcGx5IHRoZSBjaGFuZ2UgdGhhdCB3b3VsZCBiZSBzaG93biBieSBgZ2l0IHNob3cgdG9waWNeYC4KK0luIHRoaXMgZXhhbXBsZSwgdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHNvCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZmxpY3QgaXMgd3JpdHRlbiB0byB0aGUgaW5kZXggYW5kCit3b3JraW5nIHRyZWUgYW5kIG5vIG5ldyBjb21taXQgcmVzdWx0cy4KKzwyPiBzdW1tYXJpemUgY2hhbmdlcyB0byBiZSByZWNvbmNpbGVkCis8Mz4gY2FuY2VsIHRoZSBjaGVycnktcGljay4gIEluIG90aGVyIHdvcmRzLCByZXR1cm4gdG8gdGhlCitwcmUtY2hlcnJ5LXBpY2sgc3RhdGUsIHByZXNlcnZpbmcgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMgeW91IGhhZCBpbgordGhlIHdvcmtpbmcgdHJlZS4KKzw0PiB0cnkgdG8gYXBwbHkgdGhlIGNoYW5nZSBpbnRyb2R1Y2VkIGJ5IGB0b3BpY15gIGFnYWluLAorc3BlbmRpbmcgZXh0cmEgdGltZSB0byBhdm9pZCBtaXN0YWtlcyBiYXNlZCBvbiBpbmNvcnJlY3RseSBtYXRjaGluZworY29udGV4dCBsaW5lcy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZXZlcnRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmMxOWM3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dApAQCAtMCwwICsxLDY5IEBACitnaXQtY2hlcnJ5KDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVycnkgLSBGaW5kIGNvbW1pdHMgbm90IG1lcmdlZCB1cHN0cmVhbQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2hlcnJ5JyBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGUgY2hhbmdlc2V0IChvciAiZGlmZiIpIG9mIGVhY2ggY29tbWl0IGJldHdlZW4gdGhlIGZvcmstcG9pbnQgYW5kIDxoZWFkPgoraXMgY29tcGFyZWQgYWdhaW5zdCBlYWNoIGNvbW1pdCBiZXR3ZWVuIHRoZSBmb3JrLXBvaW50IGFuZCA8dXBzdHJlYW0+LgorVGhlIGNvbW1pdHMgYXJlIGNvbXBhcmVkIHdpdGggdGhlaXIgJ3BhdGNoIGlkJywgb2J0YWluZWQgZnJvbQordGhlICdnaXQgcGF0Y2gtaWQnIHByb2dyYW0uCisKK0V2ZXJ5IGNvbW1pdCB0aGF0IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIDx1cHN0cmVhbT4gYnJhbmNoCitoYXMgaXRzIGlkIChzaGExKSByZXBvcnRlZCwgcHJlZml4ZWQgYnkgYSBzeW1ib2wuICBUaGUgb25lcyB0aGF0IGhhdmUKK2VxdWl2YWxlbnQgY2hhbmdlIGFscmVhZHkKK2luIHRoZSA8dXBzdHJlYW0+IGJyYW5jaCBhcmUgcHJlZml4ZWQgd2l0aCBhIG1pbnVzICgtKSBzaWduLCBhbmQgdGhvc2UKK3RoYXQgb25seSBleGlzdCBpbiB0aGUgPGhlYWQ+IGJyYW5jaCBhcmUgcHJlZml4ZWQgd2l0aCBhIHBsdXMgKCspIHN5bWJvbDoKKworICAgICAgICAgICAgICAgX18qX18qX18qX18qX18+IDx1cHN0cmVhbT4KKyAgICAgICAgICAgICAgLworICAgIGZvcmstcG9pbnQKKyAgICAgICAgICAgICAgXF9fK19fK19fLV9fK19fK19fLV9fK19fPiA8aGVhZD4KKworCitJZiBhIDxsaW1pdD4gaGFzIGJlZW4gZ2l2ZW4gdGhlbiB0aGUgY29tbWl0cyBhbG9uZyB0aGUgPGhlYWQ+IGJyYW5jaCB1cAordG8gYW5kIGluY2x1ZGluZyA8bGltaXQ+IGFyZSBub3QgcmVwb3J0ZWQ6CisKKyAgICAgICAgICAgICAgIF9fKl9fKl9fKl9fKl9fPiA8dXBzdHJlYW0+CisgICAgICAgICAgICAgIC8KKyAgICBmb3JrLXBvaW50CisgICAgICAgICAgICAgIFxfXypfXypfXzxsaW1pdD5fXy1fXytfXz4gPGhlYWQ+CisKKworQmVjYXVzZSAnZ2l0IGNoZXJyeScgY29tcGFyZXMgdGhlIGNoYW5nZXNldCByYXRoZXIgdGhhbiB0aGUgY29tbWl0IGlkCisoc2hhMSksIHlvdSBjYW4gdXNlICdnaXQgY2hlcnJ5JyB0byBmaW5kIG91dCBpZiBhIGNvbW1pdCB5b3UgbWFkZSBsb2NhbGx5CitoYXMgYmVlbiBhcHBsaWVkIDx1cHN0cmVhbT4gdW5kZXIgYSBkaWZmZXJlbnQgY29tbWl0IGlkLiAgRm9yIGV4YW1wbGUsCit0aGlzIHdpbGwgaGFwcGVuIGlmIHlvdSdyZSBmZWVkaW5nIHBhdGNoZXMgPHVwc3RyZWFtPiB2aWEgZW1haWwgcmF0aGVyCit0aGFuIHB1c2hpbmcgb3IgcHVsbGluZyBjb21taXRzIGRpcmVjdGx5LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy12OjoKKwlWZXJib3NlLgorCis8dXBzdHJlYW0+OjoKKwlVcHN0cmVhbSBicmFuY2ggdG8gY29tcGFyZSBhZ2FpbnN0LgorCURlZmF1bHRzIHRvIHRoZSBmaXJzdCB0cmFja2VkIHJlbW90ZSBicmFuY2gsIGlmIGF2YWlsYWJsZS4KKworPGhlYWQ+OjoKKwlXb3JraW5nIGJyYW5jaDsgZGVmYXVsdHMgdG8gSEVBRC4KKworPGxpbWl0Pjo6CisJRG8gbm90IHJlcG9ydCBjb21taXRzIHVwIHRvIChhbmQgaW5jbHVkaW5nKSBsaW1pdC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wYXRjaC1pZFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNpdG9vbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaXRvb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YTExYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaXRvb2wudHh0CkBAIC0wLDAgKzEsMjUgQEAKK2dpdC1jaXRvb2woMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNpdG9vbCAtIEdyYXBoaWNhbCBhbHRlcm5hdGl2ZSB0byBnaXQtY29tbWl0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaXRvb2wnCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSBUY2wvVGsgYmFzZWQgZ3JhcGhpY2FsIGludGVyZmFjZSB0byByZXZpZXcgbW9kaWZpZWQgZmlsZXMsIHN0YWdlCit0aGVtIGludG8gdGhlIGluZGV4LCBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIGFuZCByZWNvcmQgdGhlIG5ldworY29tbWl0IG9udG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBpbnRlcmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUKK3RvIHRoZSBsZXNzIGludGVyYWN0aXZlICdnaXQgY29tbWl0JyBwcm9ncmFtLgorCisnZ2l0IGNpdG9vbCcgaXMgYWN0dWFsbHkgYSBzdGFuZGFyZCBhbGlhcyBmb3IgYGdpdCBndWkgY2l0b29sYC4KK1NlZSBsaW5rZ2l0OmdpdC1ndWlbMV0gZm9yIG1vcmUgZGV0YWlscy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0MmMwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dApAQCAtMCwwICsxLDcyIEBACitnaXQtY2xlYW4oMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2xlYW4gLSBSZW1vdmUgdW50cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2xlYW4nIFstZF0gWy1mXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGg+Li4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitDbGVhbnMgdGhlIHdvcmtpbmcgdHJlZSBieSByZWN1cnNpdmVseSByZW1vdmluZyBmaWxlcyB0aGF0IGFyZSBub3QKK3VuZGVyIHZlcnNpb24gY29udHJvbCwgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKK05vcm1hbGx5LCBvbmx5IGZpbGVzIHVua25vd24gdG8gZ2l0IGFyZSByZW1vdmVkLCBidXQgaWYgdGhlICcteCcKK29wdGlvbiBpcyBzcGVjaWZpZWQsIGlnbm9yZWQgZmlsZXMgYXJlIGFsc28gcmVtb3ZlZC4gVGhpcyBjYW4sIGZvcgorZXhhbXBsZSwgYmUgdXNlZnVsIHRvIHJlbW92ZSBhbGwgYnVpbGQgcHJvZHVjdHMuCisKK0lmIGFueSBvcHRpb25hbCBgPHBhdGg+Li4uYCBhcmd1bWVudHMgYXJlIGdpdmVuLCBvbmx5IHRob3NlIHBhdGhzCithcmUgYWZmZWN0ZWQuCisKK09QVElPTlMKKy0tLS0tLS0KKy1kOjoKKwlSZW1vdmUgdW50cmFja2VkIGRpcmVjdG9yaWVzIGluIGFkZGl0aW9uIHRvIHVudHJhY2tlZCBmaWxlcy4KKwlJZiBhbiB1bnRyYWNrZWQgZGlyZWN0b3J5IGlzIG1hbmFnZWQgYnkgYSBkaWZmZXJlbnQgZ2l0CisJcmVwb3NpdG9yeSwgaXQgaXMgbm90IHJlbW92ZWQgYnkgZGVmYXVsdC4gIFVzZSAtZiBvcHRpb24gdHdpY2UKKwlpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHN1Y2ggYSBkaXJlY3RvcnkuCisKKy1mOjoKKy0tZm9yY2U6OgorCUlmIHRoZSBnaXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjbGVhbi5yZXF1aXJlRm9yY2UgaXMgbm90IHNldAorCXRvIGZhbHNlLCAnZ2l0IGNsZWFuJyB3aWxsIHJlZnVzZSB0byBydW4gdW5sZXNzIGdpdmVuIC1mIG9yIC1uLgorCistbjo6CistLWRyeS1ydW46OgorCURvbid0IGFjdHVhbGx5IHJlbW92ZSBhbnl0aGluZywganVzdCBzaG93IHdoYXQgd291bGQgYmUgZG9uZS4KKworLXE6OgorLS1xdWlldDo6CisJQmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycywgYnV0IG5vdCB0aGUgZmlsZXMgdGhhdCBhcmUKKwlzdWNjZXNzZnVsbHkgcmVtb3ZlZC4KKworLWUgPHBhdHRlcm4+OjoKKy0tZXhjbHVkZT08cGF0dGVybj46OgorCUluIGFkZGl0aW9uIHRvIHRob3NlIGZvdW5kIGluIC5naXRpZ25vcmUgKHBlciBkaXJlY3RvcnkpIGFuZAorCSRHSVRfRElSL2luZm8vZXhjbHVkZSwgYWxzbyBjb25zaWRlciB0aGVzZSBwYXR0ZXJucyB0byBiZSBpbiB0aGUKKwlzZXQgb2YgdGhlIGlnbm9yZSBydWxlcyBpbiBlZmZlY3QuCisKKy14OjoKKwlEb24ndCB1c2UgdGhlIHN0YW5kYXJkIGlnbm9yZSBydWxlcyByZWFkIGZyb20gLmdpdGlnbm9yZSAocGVyCisJZGlyZWN0b3J5KSBhbmQgJEdJVF9ESVIvaW5mby9leGNsdWRlLCBidXQgZG8gc3RpbGwgdXNlIHRoZSBpZ25vcmUKKwlydWxlcyBnaXZlbiB3aXRoIGAtZWAgb3B0aW9ucy4gIFRoaXMgYWxsb3dzIHJlbW92aW5nIGFsbCB1bnRyYWNrZWQKKwlmaWxlcywgaW5jbHVkaW5nIGJ1aWxkIHByb2R1Y3RzLiAgVGhpcyBjYW4gYmUgdXNlZCAocG9zc2libHkgaW4KKwljb25qdW5jdGlvbiB3aXRoICdnaXQgcmVzZXQnKSB0byBjcmVhdGUgYSBwcmlzdGluZQorCXdvcmtpbmcgZGlyZWN0b3J5IHRvIHRlc3QgYSBjbGVhbiBidWlsZC4KKworLVg6OgorCVJlbW92ZSBvbmx5IGZpbGVzIGlnbm9yZWQgYnkgZ2l0LiAgVGhpcyBtYXkgYmUgdXNlZnVsIHRvIHJlYnVpbGQKKwlldmVyeXRoaW5nIGZyb20gc2NyYXRjaCwgYnV0IGtlZXAgbWFudWFsbHkgY3JlYXRlZCBmaWxlcy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdGlnbm9yZVs1XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDk4ZWYzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CkBAIC0wLDAgKzEsMjgzIEBACitnaXQtY2xvbmUoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2xvbmUgLSBDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2xvbmUnIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+XQorCSAgWy1sXSBbLXNdIFstLW5vLWhhcmRsaW5rc10gWy1xXSBbLW5dIFstLWJhcmVdIFstLW1pcnJvcl0KKwkgIFstbyA8bmFtZT5dIFstYiA8bmFtZT5dIFstdSA8dXBsb2FkLXBhY2s+XSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XQorCSAgWy0tc2VwYXJhdGUtZ2l0LWRpciA8Z2l0IGRpcj5dCisJICBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1bbm8tXXNpbmdsZS1icmFuY2hdCisJICBbLS1yZWN1cnNpdmV8LS1yZWN1cnNlLXN1Ym1vZHVsZXNdIFstLV0gPHJlcG9zaXRvcnk+CisJICBbPGRpcmVjdG9yeT5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitDbG9uZXMgYSByZXBvc2l0b3J5IGludG8gYSBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeSwgY3JlYXRlcworcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGZvciBlYWNoIGJyYW5jaCBpbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnkKKyh2aXNpYmxlIHVzaW5nIGBnaXQgYnJhbmNoIC1yYCksIGFuZCBjcmVhdGVzIGFuZCBjaGVja3Mgb3V0IGFuCitpbml0aWFsIGJyYW5jaCB0aGF0IGlzIGZvcmtlZCBmcm9tIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSdzCitjdXJyZW50bHkgYWN0aXZlIGJyYW5jaC4KKworQWZ0ZXIgdGhlIGNsb25lLCBhIHBsYWluIGBnaXQgZmV0Y2hgIHdpdGhvdXQgYXJndW1lbnRzIHdpbGwgdXBkYXRlCithbGwgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgYW5kIGEgYGdpdCBwdWxsYCB3aXRob3V0Cithcmd1bWVudHMgd2lsbCBpbiBhZGRpdGlvbiBtZXJnZSB0aGUgcmVtb3RlIG1hc3RlciBicmFuY2ggaW50byB0aGUKK2N1cnJlbnQgbWFzdGVyIGJyYW5jaCwgaWYgYW55ICh0aGlzIGlzIHVudHJ1ZSB3aGVuICItLXNpbmdsZS1icmFuY2giCitpcyBnaXZlbjsgc2VlIGJlbG93KS4KKworVGhpcyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgYWNoaWV2ZWQgYnkgY3JlYXRpbmcgcmVmZXJlbmNlcyB0bwordGhlIHJlbW90ZSBicmFuY2ggaGVhZHMgdW5kZXIgYHJlZnMvcmVtb3Rlcy9vcmlnaW5gIGFuZAorYnkgaW5pdGlhbGl6aW5nIGByZW1vdGUub3JpZ2luLnVybGAgYW5kIGByZW1vdGUub3JpZ2luLmZldGNoYAorY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKKworT1BUSU9OUworLS0tLS0tLQorLS1sb2NhbDo6CistbDo6CisJV2hlbiB0aGUgcmVwb3NpdG9yeSB0byBjbG9uZSBmcm9tIGlzIG9uIGEgbG9jYWwgbWFjaGluZSwKKwl0aGlzIGZsYWcgYnlwYXNzZXMgdGhlIG5vcm1hbCAiZ2l0IGF3YXJlIiB0cmFuc3BvcnQKKwltZWNoYW5pc20gYW5kIGNsb25lcyB0aGUgcmVwb3NpdG9yeSBieSBtYWtpbmcgYSBjb3B5IG9mCisJSEVBRCBhbmQgZXZlcnl0aGluZyB1bmRlciBvYmplY3RzIGFuZCByZWZzIGRpcmVjdG9yaWVzLgorCVRoZSBmaWxlcyB1bmRlciBgLmdpdC9vYmplY3RzL2AgZGlyZWN0b3J5IGFyZSBoYXJkbGlua2VkCisJdG8gc2F2ZSBzcGFjZSB3aGVuIHBvc3NpYmxlLgorKworSWYgdGhlIHJlcG9zaXRvcnkgaXMgc3BlY2lmaWVkIGFzIGEgbG9jYWwgcGF0aCAoZS5nLiwgYC9wYXRoL3RvL3JlcG9gKSwKK3RoaXMgaXMgdGhlIGRlZmF1bHQsIGFuZCAtLWxvY2FsIGlzIGVzc2VudGlhbGx5IGEgbm8tb3AuICBJZiB0aGUKK3JlcG9zaXRvcnkgaXMgc3BlY2lmaWVkIGFzIGEgVVJMLCB0aGVuIHRoaXMgZmxhZyBpcyBpZ25vcmVkIChhbmQgd2UKK25ldmVyIHVzZSB0aGUgbG9jYWwgb3B0aW1pemF0aW9ucykuICBTcGVjaWZ5aW5nIGAtLW5vLWxvY2FsYCB3aWxsCitvdmVycmlkZSB0aGUgZGVmYXVsdCB3aGVuIGAvcGF0aC90by9yZXBvYCBpcyBnaXZlbiwgdXNpbmcgdGhlIHJlZ3VsYXIKK2dpdCB0cmFuc3BvcnQgaW5zdGVhZC4KKysKK1RvIGZvcmNlIGNvcHlpbmcgaW5zdGVhZCBvZiBoYXJkbGlua2luZyAod2hpY2ggbWF5IGJlIGRlc2lyYWJsZSBpZiB5b3UKK2FyZSB0cnlpbmcgdG8gbWFrZSBhIGJhY2stdXAgb2YgeW91ciByZXBvc2l0b3J5KSwgYnV0IHN0aWxsIGF2b2lkIHRoZQordXN1YWwgImdpdCBhd2FyZSIgdHJhbnNwb3J0IG1lY2hhbmlzbSwgYC0tbm8taGFyZGxpbmtzYCBjYW4gYmUgdXNlZC4KKworLS1uby1oYXJkbGlua3M6OgorCU9wdGltaXplIHRoZSBjbG9uaW5nIHByb2Nlc3MgZnJvbSBhIHJlcG9zaXRvcnkgb24gYQorCWxvY2FsIGZpbGVzeXN0ZW0gYnkgY29weWluZyBmaWxlcyB1bmRlciBgLmdpdC9vYmplY3RzYAorCWRpcmVjdG9yeS4KKworLS1zaGFyZWQ6OgorLXM6OgorCVdoZW4gdGhlIHJlcG9zaXRvcnkgdG8gY2xvbmUgaXMgb24gdGhlIGxvY2FsIG1hY2hpbmUsCisJaW5zdGVhZCBvZiB1c2luZyBoYXJkIGxpbmtzLCBhdXRvbWF0aWNhbGx5IHNldHVwCisJYC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgIHRvIHNoYXJlIHRoZSBvYmplY3RzCisJd2l0aCB0aGUgc291cmNlIHJlcG9zaXRvcnkuICBUaGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkKKwlzdGFydHMgb3V0IHdpdGhvdXQgYW55IG9iamVjdCBvZiBpdHMgb3duLgorKworKk5PVEUqOiB0aGlzIGlzIGEgcG9zc2libHkgZGFuZ2Vyb3VzIG9wZXJhdGlvbjsgZG8gKm5vdCogdXNlCitpdCB1bmxlc3MgeW91IHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzLiBJZiB5b3UgY2xvbmUgeW91cgorcmVwb3NpdG9yeSB1c2luZyB0aGlzIG9wdGlvbiBhbmQgdGhlbiBkZWxldGUgYnJhbmNoZXMgKG9yIHVzZSBhbnkKK290aGVyIGdpdCBjb21tYW5kIHRoYXQgbWFrZXMgYW55IGV4aXN0aW5nIGNvbW1pdCB1bnJlZmVyZW5jZWQpIGluIHRoZQorc291cmNlIHJlcG9zaXRvcnksIHNvbWUgb2JqZWN0cyBtYXkgYmVjb21lIHVucmVmZXJlbmNlZCAob3IgZGFuZ2xpbmcpLgorVGhlc2Ugb2JqZWN0cyBtYXkgYmUgcmVtb3ZlZCBieSBub3JtYWwgZ2l0IG9wZXJhdGlvbnMgKHN1Y2ggYXMgYGdpdCBjb21taXRgKQord2hpY2ggYXV0b21hdGljYWxseSBjYWxsIGBnaXQgZ2MgLS1hdXRvYC4gKFNlZSBsaW5rZ2l0OmdpdC1nY1sxXS4pCitJZiB0aGVzZSBvYmplY3RzIGFyZSByZW1vdmVkIGFuZCB3ZXJlIHJlZmVyZW5jZWQgYnkgdGhlIGNsb25lZCByZXBvc2l0b3J5LAordGhlbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnkgd2lsbCBiZWNvbWUgY29ycnVwdC4KKysKK05vdGUgdGhhdCBydW5uaW5nIGBnaXQgcmVwYWNrYCB3aXRob3V0IHRoZSBgLWxgIG9wdGlvbiBpbiBhIHJlcG9zaXRvcnkKK2Nsb25lZCB3aXRoIGAtc2Agd2lsbCBjb3B5IG9iamVjdHMgZnJvbSB0aGUgc291cmNlIHJlcG9zaXRvcnkgaW50byBhIHBhY2sKK2luIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSwgcmVtb3ZpbmcgdGhlIGRpc2sgc3BhY2Ugc2F2aW5ncyBvZiBgY2xvbmUgLXNgLgorSXQgaXMgc2FmZSwgaG93ZXZlciwgdG8gcnVuIGBnaXQgZ2NgLCB3aGljaCB1c2VzIHRoZSBgLWxgIG9wdGlvbiBieQorZGVmYXVsdC4KKysKK0lmIHlvdSB3YW50IHRvIGJyZWFrIHRoZSBkZXBlbmRlbmN5IG9mIGEgcmVwb3NpdG9yeSBjbG9uZWQgd2l0aCBgLXNgIG9uCitpdHMgc291cmNlIHJlcG9zaXRvcnksIHlvdSBjYW4gc2ltcGx5IHJ1biBgZ2l0IHJlcGFjayAtYWAgdG8gY29weSBhbGwKK29iamVjdHMgZnJvbSB0aGUgc291cmNlIHJlcG9zaXRvcnkgaW50byBhIHBhY2sgaW4gdGhlIGNsb25lZCByZXBvc2l0b3J5LgorCistLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT46OgorCUlmIHRoZSByZWZlcmVuY2UgcmVwb3NpdG9yeSBpcyBvbiB0aGUgbG9jYWwgbWFjaGluZSwKKwlhdXRvbWF0aWNhbGx5IHNldHVwIGAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzYCB0bworCW9idGFpbiBvYmplY3RzIGZyb20gdGhlIHJlZmVyZW5jZSByZXBvc2l0b3J5LiAgVXNpbmcKKwlhbiBhbHJlYWR5IGV4aXN0aW5nIHJlcG9zaXRvcnkgYXMgYW4gYWx0ZXJuYXRlIHdpbGwKKwlyZXF1aXJlIGZld2VyIG9iamVjdHMgdG8gYmUgY29waWVkIGZyb20gdGhlIHJlcG9zaXRvcnkKKwliZWluZyBjbG9uZWQsIHJlZHVjaW5nIG5ldHdvcmsgYW5kIGxvY2FsIHN0b3JhZ2UgY29zdHMuCisrCisqTk9URSo6IHNlZSB0aGUgTk9URSBmb3IgdGhlIGAtLXNoYXJlZGAgb3B0aW9uLgorCistLXF1aWV0OjoKKy1xOjoKKwlPcGVyYXRlIHF1aWV0bHkuICBQcm9ncmVzcyBpcyBub3QgcmVwb3J0ZWQgdG8gdGhlIHN0YW5kYXJkCisJZXJyb3Igc3RyZWFtLiBUaGlzIGZsYWcgaXMgYWxzbyBwYXNzZWQgdG8gdGhlIGByc3luYycKKwljb21tYW5kIHdoZW4gZ2l2ZW4uCisKKy0tdmVyYm9zZTo6Cistdjo6CisJUnVuIHZlcmJvc2VseS4gRG9lcyBub3QgYWZmZWN0IHRoZSByZXBvcnRpbmcgb2YgcHJvZ3Jlc3Mgc3RhdHVzCisJdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4KKworLS1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIC1xCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmIHRoZQorCXN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworLS1uby1jaGVja291dDo6Cistbjo6CisJTm8gY2hlY2tvdXQgb2YgSEVBRCBpcyBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGNsb25lIGlzIGNvbXBsZXRlLgorCistLWJhcmU6OgorCU1ha2UgYSAnYmFyZScgR0lUIHJlcG9zaXRvcnkuICBUaGF0IGlzLCBpbnN0ZWFkIG9mCisJY3JlYXRpbmcgYDxkaXJlY3Rvcnk+YCBhbmQgcGxhY2luZyB0aGUgYWRtaW5pc3RyYXRpdmUKKwlmaWxlcyBpbiBgPGRpcmVjdG9yeT4vLmdpdGAsIG1ha2UgdGhlIGA8ZGlyZWN0b3J5PmAKKwlpdHNlbGYgdGhlIGAkR0lUX0RJUmAuIFRoaXMgb2J2aW91c2x5IGltcGxpZXMgdGhlIGAtbmAKKwliZWNhdXNlIHRoZXJlIGlzIG5vd2hlcmUgdG8gY2hlY2sgb3V0IHRoZSB3b3JraW5nIHRyZWUuCisJQWxzbyB0aGUgYnJhbmNoIGhlYWRzIGF0IHRoZSByZW1vdGUgYXJlIGNvcGllZCBkaXJlY3RseQorCXRvIGNvcnJlc3BvbmRpbmcgbG9jYWwgYnJhbmNoIGhlYWRzLCB3aXRob3V0IG1hcHBpbmcKKwl0aGVtIHRvIGByZWZzL3JlbW90ZXMvb3JpZ2luL2AuICBXaGVuIHRoaXMgb3B0aW9uIGlzCisJdXNlZCwgbmVpdGhlciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm9yIHRoZSByZWxhdGVkCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQuCisKKy0tbWlycm9yOjoKKwlTZXQgdXAgYSBtaXJyb3Igb2YgdGhlIHNvdXJjZSByZXBvc2l0b3J5LiAgVGhpcyBpbXBsaWVzIGAtLWJhcmVgLgorCUNvbXBhcmVkIHRvIGAtLWJhcmVgLCBgLS1taXJyb3JgIG5vdCBvbmx5IG1hcHMgbG9jYWwgYnJhbmNoZXMgb2YgdGhlCisJc291cmNlIHRvIGxvY2FsIGJyYW5jaGVzIG9mIHRoZSB0YXJnZXQsIGl0IG1hcHMgYWxsIHJlZnMgKGluY2x1ZGluZworCXJlbW90ZS10cmFja2luZyBicmFuY2hlcywgbm90ZXMgZXRjLikgYW5kIHNldHMgdXAgYSByZWZzcGVjIGNvbmZpZ3VyYXRpb24gc3VjaAorCXRoYXQgYWxsIHRoZXNlIHJlZnMgYXJlIG92ZXJ3cml0dGVuIGJ5IGEgYGdpdCByZW1vdGUgdXBkYXRlYCBpbiB0aGUKKwl0YXJnZXQgcmVwb3NpdG9yeS4KKworLS1vcmlnaW4gPG5hbWU+OjoKKy1vIDxuYW1lPjo6CisJSW5zdGVhZCBvZiB1c2luZyB0aGUgcmVtb3RlIG5hbWUgYG9yaWdpbmAgdG8ga2VlcCB0cmFjaworCW9mIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5LCB1c2UgYDxuYW1lPmAuCisKKy0tYnJhbmNoIDxuYW1lPjo6CistYiA8bmFtZT46OgorCUluc3RlYWQgb2YgcG9pbnRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgSEVBRCB0byB0aGUgYnJhbmNoIHBvaW50ZWQKKwl0byBieSB0aGUgY2xvbmVkIHJlcG9zaXRvcnkncyBIRUFELCBwb2ludCB0byBgPG5hbWU+YCBicmFuY2gKKwlpbnN0ZWFkLiBJbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnksIHRoaXMgaXMgdGhlIGJyYW5jaCB0aGF0IHdpbGwKKwliZSBjaGVja2VkIG91dC4KKwlgLS1icmFuY2hgIGNhbiBhbHNvIHRha2UgdGFncyBhbmQgZGV0YWNoZXMgdGhlIEhFQUQgYXQgdGhhdCBjb21taXQKKwlpbiB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkuCisKKy0tdXBsb2FkLXBhY2sgPHVwbG9hZC1wYWNrPjo6CistdSA8dXBsb2FkLXBhY2s+OjoKKwlXaGVuIGdpdmVuLCBhbmQgdGhlIHJlcG9zaXRvcnkgdG8gY2xvbmUgZnJvbSBpcyBhY2Nlc3NlZAorCXZpYSBzc2gsIHRoaXMgc3BlY2lmaWVzIGEgbm9uLWRlZmF1bHQgcGF0aCBmb3IgdGhlIGNvbW1hbmQKKwlydW4gb24gdGhlIG90aGVyIGVuZC4KKworLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pjo6CisJU3BlY2lmeSB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZDsKKwkoU2VlIHRoZSAiVEVNUExBVEUgRElSRUNUT1JZIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWluaXRbMV0uKQorCistLWNvbmZpZyA8a2V5Pj08dmFsdWU+OjoKKy1jIDxrZXk+PTx2YWx1ZT46OgorCVNldCBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW4gdGhlIG5ld2x5LWNyZWF0ZWQgcmVwb3NpdG9yeTsKKwl0aGlzIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSBhZnRlciB0aGUgcmVwb3NpdG9yeSBpcworCWluaXRpYWxpemVkLCBidXQgYmVmb3JlIHRoZSByZW1vdGUgaGlzdG9yeSBpcyBmZXRjaGVkIG9yIGFueQorCWZpbGVzIGNoZWNrZWQgb3V0LiAgVGhlIGtleSBpcyBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgZXhwZWN0ZWQgYnkKKwlsaW5rZ2l0OmdpdC1jb25maWdbMV0gKGUuZy4sIGBjb3JlLmVvbD10cnVlYCkuIElmIG11bHRpcGxlCisJdmFsdWVzIGFyZSBnaXZlbiBmb3IgdGhlIHNhbWUga2V5LCBlYWNoIHZhbHVlIHdpbGwgYmUgd3JpdHRlbiB0bworCXRoZSBjb25maWcgZmlsZS4gVGhpcyBtYWtlcyBpdCBzYWZlLCBmb3IgZXhhbXBsZSwgdG8gYWRkCisJYWRkaXRpb25hbCBmZXRjaCByZWZzcGVjcyB0byB0aGUgb3JpZ2luIHJlbW90ZS4KKworLS1kZXB0aCA8ZGVwdGg+OjoKKwlDcmVhdGUgYSAnc2hhbGxvdycgY2xvbmUgd2l0aCBhIGhpc3RvcnkgdHJ1bmNhdGVkIHRvIHRoZQorCXNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zLiAgQSBzaGFsbG93IHJlcG9zaXRvcnkgaGFzIGEKKwludW1iZXIgb2YgbGltaXRhdGlvbnMgKHlvdSBjYW5ub3QgY2xvbmUgb3IgZmV0Y2ggZnJvbQorCWl0LCBub3IgcHVzaCBmcm9tIG5vciBpbnRvIGl0KSwgYnV0IGlzIGFkZXF1YXRlIGlmIHlvdQorCWFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHJlY2VudCBoaXN0b3J5IG9mIGEgbGFyZ2UgcHJvamVjdAorCXdpdGggYSBsb25nIGhpc3RvcnksIGFuZCB3b3VsZCB3YW50IHRvIHNlbmQgaW4gZml4ZXMKKwlhcyBwYXRjaGVzLgorCistLXNpbmdsZS1icmFuY2g6OgorCUNsb25lIG9ubHkgdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgdGlwIG9mIGEgc2luZ2xlIGJyYW5jaCwKKwllaXRoZXIgc3BlY2lmaWVkIGJ5IHRoZSBgLS1icmFuY2hgIG9wdGlvbiBvciB0aGUgcHJpbWFyeQorCWJyYW5jaCByZW1vdGUncyBgSEVBRGAgcG9pbnRzIGF0LiBXaGVuIGNyZWF0aW5nIGEgc2hhbGxvdworCWNsb25lIHdpdGggdGhlIGAtLWRlcHRoYCBvcHRpb24sIHRoaXMgaXMgdGhlIGRlZmF1bHQsIHVubGVzcworCWAtLW5vLXNpbmdsZS1icmFuY2hgIGlzIGdpdmVuIHRvIGZldGNoIHRoZSBoaXN0b3JpZXMgbmVhciB0aGUKKwl0aXBzIG9mIGFsbCBicmFuY2hlcy4KKwlGdXJ0aGVyIGZldGNoZXMgaW50byB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkgd2lsbCBvbmx5IHVwZGF0ZSB0aGUKKwlyZW1vdGUgdHJhY2tpbmcgYnJhbmNoIGZvciB0aGUgYnJhbmNoIHRoaXMgb3B0aW9uIHdhcyB1c2VkIGZvciB0aGUKKwlpbml0aWFsIGNsb25pbmcuICBJZiB0aGUgSEVBRCBhdCB0aGUgcmVtb3RlIGRpZCBub3QgcG9pbnQgYXQgYW55CisJYnJhbmNoIHdoZW4gYC0tc2luZ2xlLWJyYW5jaGAgY2xvbmUgd2FzIG1hZGUsIG5vIHJlbW90ZSB0cmFja2luZworCWJyYW5jaCBpcyBjcmVhdGVkLgorCistLXJlY3Vyc2l2ZTo6CistLXJlY3Vyc2Utc3VibW9kdWxlczo6CisJQWZ0ZXIgdGhlIGNsb25lIGlzIGNyZWF0ZWQsIGluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMgd2l0aGluLAorCXVzaW5nIHRoZWlyIGRlZmF1bHQgc2V0dGluZ3MuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBydW5uaW5nCisJYGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZWAgaW1tZWRpYXRlbHkgYWZ0ZXIKKwl0aGUgY2xvbmUgaXMgZmluaXNoZWQuIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgdGhlIGNsb25lZAorCXJlcG9zaXRvcnkgZG9lcyBub3QgaGF2ZSBhIHdvcmt0cmVlL2NoZWNrb3V0IChpLmUuIGlmIGFueSBvZgorCWAtLW5vLWNoZWNrb3V0YC9gLW5gLCBgLS1iYXJlYCwgb3IgYC0tbWlycm9yYCBpcyBnaXZlbikKKworLS1zZXBhcmF0ZS1naXQtZGlyPTxnaXQgZGlyPjo6CisJSW5zdGVhZCBvZiBwbGFjaW5nIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSB3aGVyZSBpdCBpcyBzdXBwb3NlZAorCXRvIGJlLCBwbGFjZSB0aGUgY2xvbmVkIHJlcG9zaXRvcnkgYXQgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksCisJdGhlbiBtYWtlIGEgZmlsZXN5dGVtLWFnbm9zdGljIGdpdCBzeW1ib2xpYyBsaW5rIHRvIHRoZXJlLgorCVRoZSByZXN1bHQgaXMgZ2l0IHJlcG9zaXRvcnkgY2FuIGJlIHNlcGFyYXRlZCBmcm9tIHdvcmtpbmcKKwl0cmVlLgorCisKKzxyZXBvc2l0b3J5Pjo6CisJVGhlIChwb3NzaWJseSByZW1vdGUpIHJlcG9zaXRvcnkgdG8gY2xvbmUgZnJvbS4gIFNlZSB0aGUKKwk8PFVSTFMsVVJMUz4+IHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3BlY2lmeWluZworCXJlcG9zaXRvcmllcy4KKworPGRpcmVjdG9yeT46OgorCVRoZSBuYW1lIG9mIGEgbmV3IGRpcmVjdG9yeSB0byBjbG9uZSBpbnRvLiAgVGhlICJodW1hbmlzaCIKKwlwYXJ0IG9mIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpcyB1c2VkIGlmIG5vIGRpcmVjdG9yeSBpcworCWV4cGxpY2l0bHkgZ2l2ZW4gKGByZXBvYCBmb3IgYC9wYXRoL3RvL3JlcG8uZ2l0YCBhbmQgYGZvb2AKKwlmb3IgYGhvc3QueHo6Zm9vLy5naXRgKS4gIENsb25pbmcgaW50byBhbiBleGlzdGluZyBkaXJlY3RvcnkKKwlpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eS4KKworOmdpdC1jbG9uZTogMQoraW5jbHVkZTo6dXJscy50eHRbXQorCitFeGFtcGxlcworLS0tLS0tLS0KKworKiBDbG9uZSBmcm9tIHVwc3RyZWFtOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtLy4uLi9saW51eC0yLjYgbXkyLjYKKyQgY2QgbXkyLjYKKyQgbWFrZQorLS0tLS0tLS0tLS0tCisKKworKiBNYWtlIGEgbG9jYWwgY2xvbmUgdGhhdCBib3Jyb3dzIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aXRob3V0IGNoZWNraW5nIHRoaW5ncyBvdXQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIC1sIC1zIC1uIC4gLi4vY29weQorJCBjZCAuLi9jb3B5CiskIGdpdCBzaG93LWJyYW5jaAorLS0tLS0tLS0tLS0tCisKKworKiBDbG9uZSBmcm9tIHVwc3RyZWFtIHdoaWxlIGJvcnJvd2luZyBmcm9tIGFuIGV4aXN0aW5nIGxvY2FsIGRpcmVjdG9yeToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgLS1yZWZlcmVuY2UgbXkyLjYgXAorCWdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vLi4uL2xpbnV4LTIuNyBcCisJbXkyLjcKKyQgY2QgbXkyLjcKKy0tLS0tLS0tLS0tLQorCisKKyogQ3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IHRvIHB1Ymxpc2ggeW91ciBjaGFuZ2VzIHRvIHRoZSBwdWJsaWM6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIC0tYmFyZSAtbCAvaG9tZS9wcm9qLy5naXQgL3B1Yi9zY20vcHJvai5naXQKKy0tLS0tLS0tLS0tLQorCisKKyogQ3JlYXRlIGEgcmVwb3NpdG9yeSBvbiB0aGUga2VybmVsLm9yZyBtYWNoaW5lIHRoYXQgYm9ycm93cyBmcm9tIExpbnVzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSAtLWJhcmUgLWwgLXMgL3B1Yi9zY20vLi4uL3RvcnZhbGRzL2xpbnV4LTIuNi5naXQgXAorICAgIC9wdWIvc2NtLy4uLi9tZS9zdWJzeXMtMi42LmdpdAorLS0tLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29sdW1uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbHVtbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2ZjFjYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbHVtbi50eHQKQEAgLTAsMCArMSw1MyBAQAorZ2l0LWNvbHVtbigxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY29sdW1uIC0gRGlzcGxheSBkYXRhIGluIGNvbHVtbnMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNvbHVtbicgWy0tY29tbWFuZD08bmFtZT5dIFstLVtyYXctXW1vZGU9PG1vZGU+XSBbLS13aWR0aD08d2lkdGg+XQorCSAgICAgWy0taW5kZW50PTxzdHJpbmc+XSBbLS1ubD08c3RyaW5nPl0gWy0tcGFkZGluZz08bj5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIGZvcm1hdHMgaXRzIGlucHV0IGludG8gbXVsdGlwbGUgY29sdW1ucy4KKworT1BUSU9OUworLS0tLS0tLQorLS1jb21tYW5kPTxuYW1lPjo6CisJTG9vayB1cCBsYXlvdXQgbW9kZSB1c2luZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvbHVtbi48bmFtZT4gYW5kCisJY29sdW1uLnVpLgorCistLW1vZGU9PG1vZGU+OjoKKwlTcGVjaWZ5IGxheW91dCBtb2RlLiBTZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjb2x1bW4udWkgZm9yIG9wdGlvbgorCXN5bnRheC4KKworLS1yYXctbW9kZT08bj46OgorCVNhbWUgYXMgLS1tb2RlIGJ1dCB0YWtlIG1vZGUgZW5jb2RlZCBhcyBhIG51bWJlci4gVGhpcyBpcyBtYWlubHkgdXNlZAorCWJ5IG90aGVyIGNvbW1hbmRzIHRoYXQgaGF2ZSBhbHJlYWR5IHBhcnNlZCBsYXlvdXQgbW9kZS4KKworLS13aWR0aD08d2lkdGg+OjoKKwlTcGVjaWZ5IHRoZSB0ZXJtaW5hbCB3aWR0aC4gQnkgZGVmYXVsdCAnZ2l0IGNvbHVtbicgd2lsbCBkZXRlY3QgdGhlCisJdGVybWluYWwgd2lkdGgsIG9yIGZhbGwgYmFjayB0byA4MCBpZiBpdCBpcyB1bmFibGUgdG8gZG8gc28uCisKKy0taW5kZW50PTxzdHJpbmc+OjoKKwlTdHJpbmcgdG8gYmUgcHJpbnRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZS4KKworLS1ubD08Tj46OgorCVN0cmluZyB0byBiZSBwcmludGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLAorCWluY2x1ZGluZyBuZXdsaW5lIGNoYXJhY3Rlci4KKworLS1wYWRkaW5nPTxOPjo6CisJVGhlIG51bWJlciBvZiBzcGFjZXMgYmV0d2VlbiBjb2x1bW5zLiBPbmUgc3BhY2UgYnkgZGVmYXVsdC4KKworCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBOZ3V5ZW4gVGhhaSBOZ29jIER1eSA8cGNsb3Vkc0BnbWFpbC5jb20+CisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNWEwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQKQEAgLTAsMCArMSwxMDYgQEAKK2dpdC1jb21taXQtdHJlZSgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jb21taXQtdHJlZSAtIENyZWF0ZSBhIG5ldyBjb21taXQgb2JqZWN0CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNvbW1pdC10cmVlJyA8dHJlZT4gWygtcCA8cGFyZW50PikuLi5dIDwgY2hhbmdlbG9nCisnZ2l0IGNvbW1pdC10cmVlJyBbKC1wIDxwYXJlbnQ+KS4uLl0gWygtbSA8bWVzc2FnZT4pLi4uXSBbKC1GIDxmaWxlPikuLi5dIDx0cmVlPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgaXMgdXN1YWxseSBub3Qgd2hhdCBhbiBlbmQgdXNlciB3YW50cyB0byBydW4gZGlyZWN0bHkuICBTZWUKK2xpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBpbnN0ZWFkLgorCitDcmVhdGVzIGEgbmV3IGNvbW1pdCBvYmplY3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRyZWUgb2JqZWN0IGFuZAorZW1pdHMgdGhlIG5ldyBjb21taXQgb2JqZWN0IGlkIG9uIHN0ZG91dC4gVGhlIGxvZyBtZXNzYWdlIGlzIHJlYWQKK2Zyb20gdGhlIHN0YW5kYXJkIGlucHV0LCB1bmxlc3MgYC1tYCBvciBgLUZgIG9wdGlvbnMgYXJlIGdpdmVuLgorCitBIGNvbW1pdCBvYmplY3QgbWF5IGhhdmUgYW55IG51bWJlciBvZiBwYXJlbnRzLiBXaXRoIGV4YWN0bHkgb25lCitwYXJlbnQsIGl0IGlzIGFuIG9yZGluYXJ5IGNvbW1pdC4gSGF2aW5nIG1vcmUgdGhhbiBvbmUgcGFyZW50IG1ha2VzCit0aGUgY29tbWl0IGEgbWVyZ2UgYmV0d2VlbiBzZXZlcmFsIGxpbmVzIG9mIGhpc3RvcnkuIEluaXRpYWwgKHJvb3QpCitjb21taXRzIGhhdmUgbm8gcGFyZW50cy4KKworV2hpbGUgYSB0cmVlIHJlcHJlc2VudHMgYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSBzdGF0ZSBvZiBhIHdvcmtpbmcKK2RpcmVjdG9yeSwgYSBjb21taXQgcmVwcmVzZW50cyB0aGF0IHN0YXRlIGluICJ0aW1lIiwgYW5kIGV4cGxhaW5zIGhvdwordG8gZ2V0IHRoZXJlLgorCitOb3JtYWxseSBhIGNvbW1pdCB3b3VsZCBpZGVudGlmeSBhIG5ldyAiSEVBRCIgc3RhdGUsIGFuZCB3aGlsZSBnaXQKK2RvZXNuJ3QgY2FyZSB3aGVyZSB5b3Ugc2F2ZSB0aGUgbm90ZSBhYm91dCB0aGF0IHN0YXRlLCBpbiBwcmFjdGljZSB3ZQordGVuZCB0byBqdXN0IHdyaXRlIHRoZSByZXN1bHQgdG8gdGhlIGZpbGUgdGhhdCBpcyBwb2ludGVkIGF0IGJ5CitgLmdpdC9IRUFEYCwgc28gdGhhdCB3ZSBjYW4gYWx3YXlzIHNlZSB3aGF0IHRoZSBsYXN0IGNvbW1pdHRlZAorc3RhdGUgd2FzLgorCitPUFRJT05TCistLS0tLS0tCis8dHJlZT46OgorCUFuIGV4aXN0aW5nIHRyZWUgb2JqZWN0CisKKy1wIDxwYXJlbnQ+OjoKKwlFYWNoICctcCcgaW5kaWNhdGVzIHRoZSBpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0LgorCistbSA8bWVzc2FnZT46OgorCUEgcGFyYWdyYXBoIGluIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuIFRoaXMgY2FuIGJlIGdpdmVuIG1vcmUgdGhhbgorCW9uY2UgYW5kIGVhY2ggPG1lc3NhZ2U+IGJlY29tZXMgaXRzIG93biBwYXJhZ3JhcGguCisKKy1GIDxmaWxlPjo6CisJUmVhZCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIGZpbGUuIFVzZSBgLWAgdG8gcmVhZAorCWZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCisKK0NvbW1pdCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgY29tbWl0IGVuY2Fwc3VsYXRlczoKKworLSBhbGwgcGFyZW50IG9iamVjdCBpZHMKKy0gYXV0aG9yIG5hbWUsIGVtYWlsIGFuZCBkYXRlCistIGNvbW1pdHRlciBuYW1lIGFuZCBlbWFpbCBhbmQgdGhlIGNvbW1pdCB0aW1lLgorCitXaGlsZSBwYXJlbnQgb2JqZWN0IGlkcyBhcmUgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYXV0aG9yIGFuZAorY29tbWl0dGVyIGluZm9ybWF0aW9uIGlzIHRha2VuIGZyb20gdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsCitpZiBzZXQ6CisKKwlHSVRfQVVUSE9SX05BTUUKKwlHSVRfQVVUSE9SX0VNQUlMCisJR0lUX0FVVEhPUl9EQVRFCisJR0lUX0NPTU1JVFRFUl9OQU1FCisJR0lUX0NPTU1JVFRFUl9FTUFJTAorCUdJVF9DT01NSVRURVJfREFURQorCUVNQUlMCisKKyhuYiAiPCIsICI+IiBhbmQgIlxuInMgYXJlIHN0cmlwcGVkKQorCitJbiBjYXNlIChzb21lIG9mKSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQsIHRoZSBpbmZvcm1hdGlvbgoraXMgdGFrZW4gZnJvbSB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyB1c2VyLm5hbWUgYW5kIHVzZXIuZW1haWwsIG9yLCBpZiBub3QKK3ByZXNlbnQsIHN5c3RlbSB1c2VyIG5hbWUgYW5kIHRoZSBob3N0bmFtZSB1c2VkIGZvciBvdXRnb2luZyBtYWlsICh0YWtlbgorZnJvbSBgL2V0Yy9tYWlsbmFtZWAgYW5kIGZhbGxpbmcgYmFjayB0byB0aGUgZnVsbHkgcXVhbGlmaWVkIGhvc3RuYW1lIHdoZW4KK3RoYXQgZmlsZSBkb2VzIG5vdCBleGlzdCkuCisKK0EgY29tbWl0IGNvbW1lbnQgaXMgcmVhZCBmcm9tIHN0ZGluLiBJZiBhIGNoYW5nZWxvZworZW50cnkgaXMgbm90IHByb3ZpZGVkIHZpYSAiPCIgcmVkaXJlY3Rpb24sICdnaXQgY29tbWl0LXRyZWUnIHdpbGwganVzdCB3YWl0Citmb3Igb25lIHRvIGJlIGVudGVyZWQgYW5kIHRlcm1pbmF0ZWQgd2l0aCBeRC4KKworaW5jbHVkZTo6ZGF0ZS1mb3JtYXRzLnR4dFtdCisKK0Rpc2N1c3Npb24KKy0tLS0tLS0tLS0KKworaW5jbHVkZTo6aTE4bi50eHRbXQorCitGSUxFUworLS0tLS0KKy9ldGMvbWFpbG5hbWUKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC13cml0ZS10cmVlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5NGFjOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKQEAgLTAsMCArMSw0MzIgQEAKK2dpdC1jb21taXQoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNvbW1pdCAtIFJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjb21taXQnIFstYSB8IC0taW50ZXJhY3RpdmUgfCAtLXBhdGNoXSBbLXNdIFstdl0gWy11PG1vZGU+XSBbLS1hbWVuZF0KKwkgICBbLS1kcnktcnVuXSBbKC1jIHwgLUMgfCAtLWZpeHVwIHwgLS1zcXVhc2gpIDxjb21taXQ+XQorCSAgIFstRiA8ZmlsZT4gfCAtbSA8bXNnPl0gWy0tcmVzZXQtYXV0aG9yXSBbLS1hbGxvdy1lbXB0eV0KKwkgICBbLS1hbGxvdy1lbXB0eS1tZXNzYWdlXSBbLS1uby12ZXJpZnldIFstZV0gWy0tYXV0aG9yPTxhdXRob3I+XQorCSAgIFstLWRhdGU9PGRhdGU+XSBbLS1jbGVhbnVwPTxtb2RlPl0gWy0tc3RhdHVzIHwgLS1uby1zdGF0dXNdCisJICAgWy1pIHwgLW9dIFstLV0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitTdG9yZXMgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGluZGV4IGluIGEgbmV3IGNvbW1pdCBhbG9uZword2l0aCBhIGxvZyBtZXNzYWdlIGZyb20gdGhlIHVzZXIgZGVzY3JpYmluZyB0aGUgY2hhbmdlcy4KKworVGhlIGNvbnRlbnQgdG8gYmUgYWRkZWQgY2FuIGJlIHNwZWNpZmllZCBpbiBzZXZlcmFsIHdheXM6CisKKzEuIGJ5IHVzaW5nICdnaXQgYWRkJyB0byBpbmNyZW1lbnRhbGx5ICJhZGQiIGNoYW5nZXMgdG8gdGhlCisgICBpbmRleCBiZWZvcmUgdXNpbmcgdGhlICdjb21taXQnIGNvbW1hbmQgKE5vdGU6IGV2ZW4gbW9kaWZpZWQKKyAgIGZpbGVzIG11c3QgYmUgImFkZGVkIik7CisKKzIuIGJ5IHVzaW5nICdnaXQgcm0nIHRvIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUKKyAgIGFuZCB0aGUgaW5kZXgsIGFnYWluIGJlZm9yZSB1c2luZyB0aGUgJ2NvbW1pdCcgY29tbWFuZDsKKworMy4gYnkgbGlzdGluZyBmaWxlcyBhcyBhcmd1bWVudHMgdG8gdGhlICdjb21taXQnIGNvbW1hbmQsIGluIHdoaWNoCisgICBjYXNlIHRoZSBjb21taXQgd2lsbCBpZ25vcmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4LCBhbmQgaW5zdGVhZAorICAgcmVjb3JkIHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlIGxpc3RlZCBmaWxlcyAod2hpY2ggbXVzdCBhbHJlYWR5CisgICBiZSBrbm93biB0byBnaXQpOworCis0LiBieSB1c2luZyB0aGUgLWEgc3dpdGNoIHdpdGggdGhlICdjb21taXQnIGNvbW1hbmQgdG8gYXV0b21hdGljYWxseQorICAgImFkZCIgY2hhbmdlcyBmcm9tIGFsbCBrbm93biBmaWxlcyAoaS5lLiBhbGwgZmlsZXMgdGhhdCBhcmUgYWxyZWFkeQorICAgbGlzdGVkIGluIHRoZSBpbmRleCkgYW5kIHRvIGF1dG9tYXRpY2FsbHkgInJtIiBmaWxlcyBpbiB0aGUgaW5kZXgKKyAgIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgd29ya2luZyB0cmVlLCBhbmQgdGhlbiBwZXJmb3JtIHRoZQorICAgYWN0dWFsIGNvbW1pdDsKKworNS4gYnkgdXNpbmcgdGhlIC0taW50ZXJhY3RpdmUgb3IgLS1wYXRjaCBzd2l0Y2hlcyB3aXRoIHRoZSAnY29tbWl0JyBjb21tYW5kCisgICB0byBkZWNpZGUgb25lIGJ5IG9uZSB3aGljaCBmaWxlcyBvciBodW5rcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgY29tbWl0LAorICAgYmVmb3JlIGZpbmFsaXppbmcgdGhlIG9wZXJhdGlvbi4gU2VlIHRoZSBgYEludGVyYWN0aXZlIE1vZGUnJyBzZWN0aW9uIG9mCisgICBsaW5rZ2l0OmdpdC1hZGRbMV0gdG8gbGVhcm4gaG93IHRvIG9wZXJhdGUgdGhlc2UgbW9kZXMuCisKK1RoZSBgLS1kcnktcnVuYCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gb2J0YWluIGEKK3N1bW1hcnkgb2Ygd2hhdCBpcyBpbmNsdWRlZCBieSBhbnkgb2YgdGhlIGFib3ZlIGZvciB0aGUgbmV4dAorY29tbWl0IGJ5IGdpdmluZyB0aGUgc2FtZSBzZXQgb2YgcGFyYW1ldGVycyAob3B0aW9ucyBhbmQgcGF0aHMpLgorCitJZiB5b3UgbWFrZSBhIGNvbW1pdCBhbmQgdGhlbiBmaW5kIGEgbWlzdGFrZSBpbW1lZGlhdGVseSBhZnRlcgordGhhdCwgeW91IGNhbiByZWNvdmVyIGZyb20gaXQgd2l0aCAnZ2l0IHJlc2V0Jy4KKworCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFsbDo6CisJVGVsbCB0aGUgY29tbWFuZCB0byBhdXRvbWF0aWNhbGx5IHN0YWdlIGZpbGVzIHRoYXQgaGF2ZQorCWJlZW4gbW9kaWZpZWQgYW5kIGRlbGV0ZWQsIGJ1dCBuZXcgZmlsZXMgeW91IGhhdmUgbm90CisJdG9sZCBnaXQgYWJvdXQgYXJlIG5vdCBhZmZlY3RlZC4KKworLXA6OgorLS1wYXRjaDo6CisJVXNlIHRoZSBpbnRlcmFjdGl2ZSBwYXRjaCBzZWxlY3Rpb24gaW50ZXJmYWNlIHRvIGNob3NlCisJd2hpY2ggY2hhbmdlcyB0byBjb21taXQuIFNlZSBsaW5rZ2l0OmdpdC1hZGRbMV0gZm9yCisJZGV0YWlscy4KKworLUMgPGNvbW1pdD46OgorLS1yZXVzZS1tZXNzYWdlPTxjb21taXQ+OjoKKwlUYWtlIGFuIGV4aXN0aW5nIGNvbW1pdCBvYmplY3QsIGFuZCByZXVzZSB0aGUgbG9nIG1lc3NhZ2UKKwlhbmQgdGhlIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24gKGluY2x1ZGluZyB0aGUgdGltZXN0YW1wKQorCXdoZW4gY3JlYXRpbmcgdGhlIGNvbW1pdC4KKworLWMgPGNvbW1pdD46OgorLS1yZWVkaXQtbWVzc2FnZT08Y29tbWl0Pjo6CisJTGlrZSAnLUMnLCBidXQgd2l0aCAnLWMnIHRoZSBlZGl0b3IgaXMgaW52b2tlZCwgc28gdGhhdAorCXRoZSB1c2VyIGNhbiBmdXJ0aGVyIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlLgorCistLWZpeHVwPTxjb21taXQ+OjoKKwlDb25zdHJ1Y3QgYSBjb21taXQgbWVzc2FnZSBmb3IgdXNlIHdpdGggYHJlYmFzZSAtLWF1dG9zcXVhc2hgLgorCVRoZSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHRoZSBzdWJqZWN0IGxpbmUgZnJvbSB0aGUgc3BlY2lmaWVkCisJY29tbWl0IHdpdGggYSBwcmVmaXggb2YgImZpeHVwISAiLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXQorCWZvciBkZXRhaWxzLgorCistLXNxdWFzaD08Y29tbWl0Pjo6CisJQ29uc3RydWN0IGEgY29tbWl0IG1lc3NhZ2UgZm9yIHVzZSB3aXRoIGByZWJhc2UgLS1hdXRvc3F1YXNoYC4KKwlUaGUgY29tbWl0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lIGlzIHRha2VuIGZyb20gdGhlIHNwZWNpZmllZAorCWNvbW1pdCB3aXRoIGEgcHJlZml4IG9mICJzcXVhc2ghICIuICBDYW4gYmUgdXNlZCB3aXRoIGFkZGl0aW9uYWwKKwljb21taXQgbWVzc2FnZSBvcHRpb25zIChgLW1gL2AtY2AvYC1DYC9gLUZgKS4gU2VlCisJbGlua2dpdDpnaXQtcmViYXNlWzFdIGZvciBkZXRhaWxzLgorCistLXJlc2V0LWF1dGhvcjo6CisJV2hlbiB1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCBvcHRpb25zLCBvciB3aGVuIGNvbW1pdHRpbmcgYWZ0ZXIgYQorCWEgY29uZmxpY3RpbmcgY2hlcnJ5LXBpY2ssIGRlY2xhcmUgdGhhdCB0aGUgYXV0aG9yc2hpcCBvZiB0aGUKKwlyZXN1bHRpbmcgY29tbWl0IG5vdyBiZWxvbmdzIG9mIHRoZSBjb21taXR0ZXIuIFRoaXMgYWxzbyByZW5ld3MKKwl0aGUgYXV0aG9yIHRpbWVzdGFtcC4KKworLS1zaG9ydDo6CisJV2hlbiBkb2luZyBhIGRyeS1ydW4sIGdpdmUgdGhlIG91dHB1dCBpbiB0aGUgc2hvcnQtZm9ybWF0LiBTZWUKKwlsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gZm9yIGRldGFpbHMuIEltcGxpZXMgYC0tZHJ5LXJ1bmAuCisKKy0tYnJhbmNoOjoKKwlTaG93IHRoZSBicmFuY2ggYW5kIHRyYWNraW5nIGluZm8gZXZlbiBpbiBzaG9ydC1mb3JtYXQuCisKKy0tcG9yY2VsYWluOjoKKwlXaGVuIGRvaW5nIGEgZHJ5LXJ1biwgZ2l2ZSB0aGUgb3V0cHV0IGluIGEgcG9yY2VsYWluLXJlYWR5CisJZm9ybWF0LiBTZWUgbGlua2dpdDpnaXQtc3RhdHVzWzFdIGZvciBkZXRhaWxzLiBJbXBsaWVzCisJYC0tZHJ5LXJ1bmAuCisKKy16OjoKKy0tbnVsbDo6CisJV2hlbiBzaG93aW5nIGBzaG9ydGAgb3IgYHBvcmNlbGFpbmAgc3RhdHVzIG91dHB1dCwgdGVybWluYXRlCisJZW50cmllcyBpbiB0aGUgc3RhdHVzIG91dHB1dCB3aXRoIE5VTCwgaW5zdGVhZCBvZiBMRi4gSWYgbm8KKwlmb3JtYXQgaXMgZ2l2ZW4sIGltcGxpZXMgdGhlIGAtLXBvcmNlbGFpbmAgb3V0cHV0IGZvcm1hdC4KKworLUYgPGZpbGU+OjoKKy0tZmlsZT08ZmlsZT46OgorCVRha2UgdGhlIGNvbW1pdCBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIGZpbGUuICBVc2UgJy0nIHRvCisJcmVhZCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKworLS1hdXRob3I9PGF1dGhvcj46OgorCU92ZXJyaWRlIHRoZSBjb21taXQgYXV0aG9yLiBTcGVjaWZ5IGFuIGV4cGxpY2l0IGF1dGhvciB1c2luZyB0aGUKKwlzdGFuZGFyZCBgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT5gIGZvcm1hdC4gT3RoZXJ3aXNlIDxhdXRob3I+CisJaXMgYXNzdW1lZCB0byBiZSBhIHBhdHRlcm4gYW5kIGlzIHVzZWQgdG8gc2VhcmNoIGZvciBhbiBleGlzdGluZworCWNvbW1pdCBieSB0aGF0IGF1dGhvciAoaS5lLiByZXYtbGlzdCAtLWFsbCAtaSAtLWF1dGhvcj08YXV0aG9yPik7CisJdGhlIGNvbW1pdCBhdXRob3IgaXMgdGhlbiBjb3BpZWQgZnJvbSB0aGUgZmlyc3Qgc3VjaCBjb21taXQgZm91bmQuCisKKy0tZGF0ZT08ZGF0ZT46OgorCU92ZXJyaWRlIHRoZSBhdXRob3IgZGF0ZSB1c2VkIGluIHRoZSBjb21taXQuCisKKy1tIDxtc2c+OjoKKy0tbWVzc2FnZT08bXNnPjo6CisJVXNlIHRoZSBnaXZlbiA8bXNnPiBhcyB0aGUgY29tbWl0IG1lc3NhZ2UuCisKKy10IDxmaWxlPjo6CistLXRlbXBsYXRlPTxmaWxlPjo6CisJV2hlbiBlZGl0aW5nIHRoZSBjb21taXQgbWVzc2FnZSwgc3RhcnQgdGhlIGVkaXRvciB3aXRoIHRoZQorCWNvbnRlbnRzIGluIHRoZSBnaXZlbiBmaWxlLiAgVGhlIGBjb21taXQudGVtcGxhdGVgIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZSBpcyBvZnRlbiB1c2VkIHRvIGdpdmUgdGhpcyBvcHRpb24gaW1wbGljaXRseSB0byB0aGUKKwljb21tYW5kLiAgVGhpcyBtZWNoYW5pc20gY2FuIGJlIHVzZWQgYnkgcHJvamVjdHMgdGhhdCB3YW50IHRvCisJZ3VpZGUgcGFydGljaXBhbnRzIHdpdGggc29tZSBoaW50cyBvbiB3aGF0IHRvIHdyaXRlIGluIHRoZSBtZXNzYWdlCisJaW4gd2hhdCBvcmRlci4gIElmIHRoZSB1c2VyIGV4aXRzIHRoZSBlZGl0b3Igd2l0aG91dCBlZGl0aW5nIHRoZQorCW1lc3NhZ2UsIHRoZSBjb21taXQgaXMgYWJvcnRlZC4gIFRoaXMgaGFzIG5vIGVmZmVjdCB3aGVuIGEgbWVzc2FnZQorCWlzIGdpdmVuIGJ5IG90aGVyIG1lYW5zLCBlLmcuIHdpdGggdGhlIGAtbWAgb3IgYC1GYCBvcHRpb25zLgorCistczo6CistLXNpZ25vZmY6OgorCUFkZCBTaWduZWQtb2ZmLWJ5IGxpbmUgYnkgdGhlIGNvbW1pdHRlciBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQKKwlsb2cgbWVzc2FnZS4KKworLW46OgorLS1uby12ZXJpZnk6OgorCVRoaXMgb3B0aW9uIGJ5cGFzc2VzIHRoZSBwcmUtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzLgorCVNlZSBhbHNvIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKKy0tYWxsb3ctZW1wdHk6OgorCVVzdWFsbHkgcmVjb3JkaW5nIGEgY29tbWl0IHRoYXQgaGFzIHRoZSBleGFjdCBzYW1lIHRyZWUgYXMgaXRzCisJc29sZSBwYXJlbnQgY29tbWl0IGlzIGEgbWlzdGFrZSwgYW5kIHRoZSBjb21tYW5kIHByZXZlbnRzIHlvdQorCWZyb20gbWFraW5nIHN1Y2ggYSBjb21taXQuICBUaGlzIG9wdGlvbiBieXBhc3NlcyB0aGUgc2FmZXR5LCBhbmQKKwlpcyBwcmltYXJpbHkgZm9yIHVzZSBieSBmb3JlaWduIFNDTSBpbnRlcmZhY2Ugc2NyaXB0cy4KKworLS1hbGxvdy1lbXB0eS1tZXNzYWdlOjoKKyAgICAgICBMaWtlIC0tYWxsb3ctZW1wdHkgdGhpcyBjb21tYW5kIGlzIHByaW1hcmlseSBmb3IgdXNlIGJ5IGZvcmVpZ24KKyAgICAgICBTQ00gaW50ZXJmYWNlIHNjcmlwdHMuIEl0IGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgY29tbWl0IHdpdGggYW4KKyAgICAgICBlbXB0eSBjb21taXQgbWVzc2FnZSB3aXRob3V0IHVzaW5nIHBsdW1iaW5nIGNvbW1hbmRzIGxpa2UKKyAgICAgICBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXS4KKworLS1jbGVhbnVwPTxtb2RlPjo6CisJVGhpcyBvcHRpb24gc2V0cyBob3cgdGhlIGNvbW1pdCBtZXNzYWdlIGlzIGNsZWFuZWQgdXAuCisJVGhlICAnPG1vZGU+JyBjYW4gYmUgb25lIG9mICd2ZXJiYXRpbScsICd3aGl0ZXNwYWNlJywgJ3N0cmlwJywKKwlhbmQgJ2RlZmF1bHQnLiBUaGUgJ2RlZmF1bHQnIG1vZGUgd2lsbCBzdHJpcCBsZWFkaW5nIGFuZAorCXRyYWlsaW5nIGVtcHR5IGxpbmVzIGFuZCAjY29tbWVudGFyeSBmcm9tIHRoZSBjb21taXQgbWVzc2FnZQorCW9ubHkgaWYgdGhlIG1lc3NhZ2UgaXMgdG8gYmUgZWRpdGVkLiBPdGhlcndpc2Ugb25seSB3aGl0ZXNwYWNlCisJcmVtb3ZlZC4gVGhlICd2ZXJiYXRpbScgbW9kZSBkb2VzIG5vdCBjaGFuZ2UgbWVzc2FnZSBhdCBhbGwsCisJJ3doaXRlc3BhY2UnIHJlbW92ZXMganVzdCBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgbGluZXMKKwlhbmQgJ3N0cmlwJyByZW1vdmVzIGJvdGggd2hpdGVzcGFjZSBhbmQgY29tbWVudGFyeS4KKworLWU6OgorLS1lZGl0OjoKKwlUaGUgbWVzc2FnZSB0YWtlbiBmcm9tIGZpbGUgd2l0aCBgLUZgLCBjb21tYW5kIGxpbmUgd2l0aAorCWAtbWAsIGFuZCBmcm9tIGZpbGUgd2l0aCBgLUNgIGFyZSB1c3VhbGx5IHVzZWQgYXMgdGhlCisJY29tbWl0IGxvZyBtZXNzYWdlIHVubW9kaWZpZWQuICBUaGlzIG9wdGlvbiBsZXRzIHlvdQorCWZ1cnRoZXIgZWRpdCB0aGUgbWVzc2FnZSB0YWtlbiBmcm9tIHRoZXNlIHNvdXJjZXMuCisKKy0tYW1lbmQ6OgorCVVzZWQgdG8gYW1lbmQgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2guIFByZXBhcmUgdGhlIHRyZWUKKwlvYmplY3QgeW91IHdvdWxkIHdhbnQgdG8gcmVwbGFjZSB0aGUgbGF0ZXN0IGNvbW1pdCBhcyB1c3VhbAorCSh0aGlzIGluY2x1ZGVzIHRoZSB1c3VhbCAtaS8tbyBhbmQgZXhwbGljaXQgcGF0aHMpLCBhbmQgdGhlCisJY29tbWl0IGxvZyBlZGl0b3IgaXMgc2VlZGVkIHdpdGggdGhlIGNvbW1pdCBtZXNzYWdlIGZyb20gdGhlCisJdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaC4gVGhlIGNvbW1pdCB5b3UgY3JlYXRlIHJlcGxhY2VzIHRoZQorCWN1cnJlbnQgdGlwIC0tIGlmIGl0IHdhcyBhIG1lcmdlLCBpdCB3aWxsIGhhdmUgdGhlIHBhcmVudHMgb2YKKwl0aGUgY3VycmVudCB0aXAgYXMgcGFyZW50cyAtLSBzbyB0aGUgY3VycmVudCB0b3AgY29tbWl0IGlzCisJZGlzY2FyZGVkLgorCistLW5vLXBvc3QtcmV3cml0ZTo6CisJQnlwYXNzIHRoZSBwb3N0LXJld3JpdGUgaG9vay4KKworKworLS0KK0l0IGlzIGEgcm91Z2ggZXF1aXZhbGVudCBmb3I6CistLS0tLS0KKwkkIGdpdCByZXNldCAtLXNvZnQgSEVBRF4KKwkkIC4uLiBkbyBzb21ldGhpbmcgZWxzZSB0byBjb21lIHVwIHdpdGggdGhlIHJpZ2h0IHRyZWUgLi4uCisJJCBnaXQgY29tbWl0IC1jIE9SSUdfSEVBRAorCistLS0tLS0KK2J1dCBjYW4gYmUgdXNlZCB0byBhbWVuZCBhIG1lcmdlIGNvbW1pdC4KKy0tCisrCitZb3Ugc2hvdWxkIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZXdyaXRpbmcgaGlzdG9yeSBpZiB5b3UKK2FtZW5kIGEgY29tbWl0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBwdWJsaXNoZWQuICAoU2VlIHRoZSAiUkVDT1ZFUklORworRlJPTSBVUFNUUkVBTSBSRUJBU0UiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXQtcmViYXNlWzFdLikKKworLWk6OgorLS1pbmNsdWRlOjoKKwlCZWZvcmUgbWFraW5nIGEgY29tbWl0IG91dCBvZiBzdGFnZWQgY29udGVudHMgc28gZmFyLAorCXN0YWdlIHRoZSBjb250ZW50cyBvZiBwYXRocyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lCisJYXMgd2VsbC4gIFRoaXMgaXMgdXN1YWxseSBub3Qgd2hhdCB5b3Ugd2FudCB1bmxlc3MgeW91CisJYXJlIGNvbmNsdWRpbmcgYSBjb25mbGljdGVkIG1lcmdlLgorCistbzo6CistLW9ubHk6OgorCU1ha2UgYSBjb21taXQgb25seSBmcm9tIHRoZSBwYXRocyBzcGVjaWZpZWQgb24gdGhlCisJY29tbWFuZCBsaW5lLCBkaXNyZWdhcmRpbmcgYW55IGNvbnRlbnRzIHRoYXQgaGF2ZSBiZWVuCisJc3RhZ2VkIHNvIGZhci4gVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlIG9mIG9wZXJhdGlvbiBvZgorCSdnaXQgY29tbWl0JyBpZiBhbnkgcGF0aHMgYXJlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsCisJaW4gd2hpY2ggY2FzZSB0aGlzIG9wdGlvbiBjYW4gYmUgb21pdHRlZC4KKwlJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAnLS1hbWVuZCcsIHRoZW4KKwlubyBwYXRocyBuZWVkIHRvIGJlIHNwZWNpZmllZCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYW1lbmQKKwl0aGUgbGFzdCBjb21taXQgd2l0aG91dCBjb21taXR0aW5nIGNoYW5nZXMgdGhhdCBoYXZlCisJYWxyZWFkeSBiZWVuIHN0YWdlZC4KKworLXVbPG1vZGU+XTo6CistLXVudHJhY2tlZC1maWxlc1s9PG1vZGU+XTo6CisJU2hvdyB1bnRyYWNrZWQgZmlsZXMuCisrCitUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvICdhbGwnKSwgYW5kIGlzIHVzZWQgdG8KK3NwZWNpZnkgdGhlIGhhbmRsaW5nIG9mIHVudHJhY2tlZCBmaWxlczsgd2hlbiAtdSBpcyBub3QgdXNlZCwgdGhlCitkZWZhdWx0IGlzICdub3JtYWwnLCBpLmUuIHNob3cgdW50cmFja2VkIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKysKK1RoZSBwb3NzaWJsZSBvcHRpb25zIGFyZToKKysKKwktICdubycgICAgIC0gU2hvdyBubyB1bnRyYWNrZWQgZmlsZXMKKwktICdub3JtYWwnIC0gU2hvd3MgdW50cmFja2VkIGZpbGVzIGFuZCBkaXJlY3RvcmllcworCS0gJ2FsbCcgICAgLSBBbHNvIHNob3dzIGluZGl2aWR1YWwgZmlsZXMgaW4gdW50cmFja2VkIGRpcmVjdG9yaWVzLgorKworVGhlIGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgZG9jdW1lbnRlZCBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy12OjoKKy0tdmVyYm9zZTo6CisJU2hvdyB1bmlmaWVkIGRpZmYgYmV0d2VlbiB0aGUgSEVBRCBjb21taXQgYW5kIHdoYXQKKwl3b3VsZCBiZSBjb21taXR0ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UKKwl0ZW1wbGF0ZS4gIE5vdGUgdGhhdCB0aGlzIGRpZmYgb3V0cHV0IGRvZXNuJ3QgaGF2ZSBpdHMKKwlsaW5lcyBwcmVmaXhlZCB3aXRoICcjJy4KKworLXE6OgorLS1xdWlldDo6CisJU3VwcHJlc3MgY29tbWl0IHN1bW1hcnkgbWVzc2FnZS4KKworLS1kcnktcnVuOjoKKwlEbyBub3QgY3JlYXRlIGEgY29tbWl0LCBidXQgc2hvdyBhIGxpc3Qgb2YgcGF0aHMgdGhhdCBhcmUKKwl0byBiZSBjb21taXR0ZWQsIHBhdGhzIHdpdGggbG9jYWwgY2hhbmdlcyB0aGF0IHdpbGwgYmUgbGVmdAorCXVuY29tbWl0dGVkIGFuZCBwYXRocyB0aGF0IGFyZSB1bnRyYWNrZWQuCisKKy0tc3RhdHVzOjoKKwlJbmNsdWRlIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtc3RhdHVzWzFdIGluIHRoZSBjb21taXQKKwltZXNzYWdlIHRlbXBsYXRlIHdoZW4gdXNpbmcgYW4gZWRpdG9yIHRvIHByZXBhcmUgdGhlIGNvbW1pdAorCW1lc3NhZ2UuICBEZWZhdWx0cyB0byBvbiwgYnV0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjb21taXQuc3RhdHVzLgorCistLW5vLXN0YXR1czo6CisJRG8gbm90IGluY2x1ZGUgdGhlIG91dHB1dCBvZiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gaW4gdGhlCisJY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUgd2hlbiB1c2luZyBhbiBlZGl0b3IgdG8gcHJlcGFyZSB0aGUKKwlkZWZhdWx0IGNvbW1pdCBtZXNzYWdlLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKKzxmaWxlPi4uLjo6CisJV2hlbiBmaWxlcyBhcmUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIGNvbW1hbmQKKwljb21taXRzIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgZmlsZXMsIHdpdGhvdXQKKwlyZWNvcmRpbmcgdGhlIGNoYW5nZXMgYWxyZWFkeSBzdGFnZWQuICBUaGUgY29udGVudHMgb2YKKwl0aGVzZSBmaWxlcyBhcmUgYWxzbyBzdGFnZWQgZm9yIHRoZSBuZXh0IGNvbW1pdCBvbiB0b3AKKwlvZiB3aGF0IGhhdmUgYmVlbiBzdGFnZWQgYmVmb3JlLgorCis6Z2l0LWNvbW1pdDogMQoraW5jbHVkZTo6ZGF0ZS1mb3JtYXRzLnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorV2hlbiByZWNvcmRpbmcgeW91ciBvd24gd29yaywgdGhlIGNvbnRlbnRzIG9mIG1vZGlmaWVkIGZpbGVzIGluCit5b3VyIHdvcmtpbmcgdHJlZSBhcmUgdGVtcG9yYXJpbHkgc3RvcmVkIHRvIGEgc3RhZ2luZyBhcmVhCitjYWxsZWQgdGhlICJpbmRleCIgd2l0aCAnZ2l0IGFkZCcuICBBIGZpbGUgY2FuIGJlCityZXZlcnRlZCBiYWNrLCBvbmx5IGluIHRoZSBpbmRleCBidXQgbm90IGluIHRoZSB3b3JraW5nIHRyZWUsCit0byB0aGF0IG9mIHRoZSBsYXN0IGNvbW1pdCB3aXRoIGBnaXQgcmVzZXQgSEVBRCAtLSA8ZmlsZT5gLAord2hpY2ggZWZmZWN0aXZlbHkgcmV2ZXJ0cyAnZ2l0IGFkZCcgYW5kIHByZXZlbnRzIHRoZSBjaGFuZ2VzIHRvCit0aGlzIGZpbGUgZnJvbSBwYXJ0aWNpcGF0aW5nIGluIHRoZSBuZXh0IGNvbW1pdC4gIEFmdGVyIGJ1aWxkaW5nCit0aGUgc3RhdGUgdG8gYmUgY29tbWl0dGVkIGluY3JlbWVudGFsbHkgd2l0aCB0aGVzZSBjb21tYW5kcywKK2BnaXQgY29tbWl0YCAod2l0aG91dCBhbnkgcGF0aG5hbWUgcGFyYW1ldGVyKSBpcyB1c2VkIHRvIHJlY29yZCB3aGF0CitoYXMgYmVlbiBzdGFnZWQgc28gZmFyLiAgVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBmb3JtIG9mIHRoZQorY29tbWFuZC4gIEFuIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorJCBlZGl0IGhlbGxvLmMKKyQgZ2l0IHJtIGdvb2RieWUuYworJCBnaXQgYWRkIGhlbGxvLmMKKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tCisKK0luc3RlYWQgb2Ygc3RhZ2luZyBmaWxlcyBhZnRlciBlYWNoIGluZGl2aWR1YWwgY2hhbmdlLCB5b3UgY2FuCit0ZWxsIGBnaXQgY29tbWl0YCB0byBub3RpY2UgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbGVzIHdob3NlCitjb250ZW50cyBhcmUgdHJhY2tlZCBpbgoreW91ciB3b3JraW5nIHRyZWUgYW5kIGRvIGNvcnJlc3BvbmRpbmcgYGdpdCBhZGRgIGFuZCBgZ2l0IHJtYAorZm9yIHlvdS4gIFRoYXQgaXMsIHRoaXMgZXhhbXBsZSBkb2VzIHRoZSBzYW1lIGFzIHRoZSBlYXJsaWVyCitleGFtcGxlIGlmIHRoZXJlIGlzIG5vIG90aGVyIGNoYW5nZSBpbiB5b3VyIHdvcmtpbmcgdHJlZToKKworLS0tLS0tLS0tLS0tCiskIGVkaXQgaGVsbG8uYworJCBybSBnb29kYnllLmMKKyQgZ2l0IGNvbW1pdCAtYQorLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kIGBnaXQgY29tbWl0IC1hYCBmaXJzdCBsb29rcyBhdCB5b3VyIHdvcmtpbmcgdHJlZSwKK25vdGljZXMgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCBoZWxsby5jIGFuZCByZW1vdmVkIGdvb2RieWUuYywKK2FuZCBwZXJmb3JtcyBuZWNlc3NhcnkgYGdpdCBhZGRgIGFuZCBgZ2l0IHJtYCBmb3IgeW91LgorCitBZnRlciBzdGFnaW5nIGNoYW5nZXMgdG8gbWFueSBmaWxlcywgeW91IGNhbiBhbHRlciB0aGUgb3JkZXIgdGhlCitjaGFuZ2VzIGFyZSByZWNvcmRlZCBpbiwgYnkgZ2l2aW5nIHBhdGhuYW1lcyB0byBgZ2l0IGNvbW1pdGAuCitXaGVuIHBhdGhuYW1lcyBhcmUgZ2l2ZW4sIHRoZSBjb21tYW5kIG1ha2VzIGEgY29tbWl0IHRoYXQKK29ubHkgcmVjb3JkcyB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBuYW1lZCBwYXRoczoKKworLS0tLS0tLS0tLS0tCiskIGVkaXQgaGVsbG8uYyBoZWxsby5oCiskIGdpdCBhZGQgaGVsbG8uYyBoZWxsby5oCiskIGVkaXQgTWFrZWZpbGUKKyQgZ2l0IGNvbW1pdCBNYWtlZmlsZQorLS0tLS0tLS0tLS0tCisKK1RoaXMgbWFrZXMgYSBjb21taXQgdGhhdCByZWNvcmRzIHRoZSBtb2RpZmljYXRpb24gdG8gYE1ha2VmaWxlYC4KK1RoZSBjaGFuZ2VzIHN0YWdlZCBmb3IgYGhlbGxvLmNgIGFuZCBgaGVsbG8uaGAgYXJlIG5vdCBpbmNsdWRlZAoraW4gdGhlIHJlc3VsdGluZyBjb21taXQuICBIb3dldmVyLCB0aGVpciBjaGFuZ2VzIGFyZSBub3QgbG9zdCAtLQordGhleSBhcmUgc3RpbGwgc3RhZ2VkIGFuZCBtZXJlbHkgaGVsZCBiYWNrLiAgQWZ0ZXIgdGhlIGFib3ZlCitzZXF1ZW5jZSwgaWYgeW91IGRvOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tCisKK3RoaXMgc2Vjb25kIGNvbW1pdCB3b3VsZCByZWNvcmQgdGhlIGNoYW5nZXMgdG8gYGhlbGxvLmNgIGFuZAorYGhlbGxvLmhgIGFzIGV4cGVjdGVkLgorCitBZnRlciBhIG1lcmdlIChpbml0aWF0ZWQgYnkgJ2dpdCBtZXJnZScgb3IgJ2dpdCBwdWxsJykgc3RvcHMKK2JlY2F1c2Ugb2YgY29uZmxpY3RzLCBjbGVhbmx5IG1lcmdlZAorcGF0aHMgYXJlIGFscmVhZHkgc3RhZ2VkIHRvIGJlIGNvbW1pdHRlZCBmb3IgeW91LCBhbmQgcGF0aHMgdGhhdAorY29uZmxpY3RlZCBhcmUgbGVmdCBpbiB1bm1lcmdlZCBzdGF0ZS4gIFlvdSB3b3VsZCBoYXZlIHRvIGZpcnN0CitjaGVjayB3aGljaCBwYXRocyBhcmUgY29uZmxpY3Rpbmcgd2l0aCAnZ2l0IHN0YXR1cycKK2FuZCBhZnRlciBmaXhpbmcgdGhlbSBtYW51YWxseSBpbiB5b3VyIHdvcmtpbmcgdHJlZSwgeW91IHdvdWxkCitzdGFnZSB0aGUgcmVzdWx0IGFzIHVzdWFsIHdpdGggJ2dpdCBhZGQnOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN0YXR1cyB8IGdyZXAgdW5tZXJnZWQKK3VubWVyZ2VkOiBoZWxsby5jCiskIGVkaXQgaGVsbG8uYworJCBnaXQgYWRkIGhlbGxvLmMKKy0tLS0tLS0tLS0tLQorCitBZnRlciByZXNvbHZpbmcgY29uZmxpY3RzIGFuZCBzdGFnaW5nIHRoZSByZXN1bHQsIGBnaXQgbHMtZmlsZXMgLXVgCit3b3VsZCBzdG9wIG1lbnRpb25pbmcgdGhlIGNvbmZsaWN0ZWQgcGF0aC4gIFdoZW4geW91IGFyZSBkb25lLAorcnVuIGBnaXQgY29tbWl0YCB0byBmaW5hbGx5IHJlY29yZCB0aGUgbWVyZ2U6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0KKworQXMgd2l0aCB0aGUgY2FzZSB0byByZWNvcmQgeW91ciBvd24gY2hhbmdlcywgeW91IGNhbiB1c2UgYC1hYAorb3B0aW9uIHRvIHNhdmUgdHlwaW5nLiAgT25lIGRpZmZlcmVuY2UgaXMgdGhhdCBkdXJpbmcgYSBtZXJnZQorcmVzb2x1dGlvbiwgeW91IGNhbm5vdCB1c2UgYGdpdCBjb21taXRgIHdpdGggcGF0aG5hbWVzIHRvCithbHRlciB0aGUgb3JkZXIgdGhlIGNoYW5nZXMgYXJlIGNvbW1pdHRlZCwgYmVjYXVzZSB0aGUgbWVyZ2UKK3Nob3VsZCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBjb21taXQuICBJbiBmYWN0LCB0aGUgY29tbWFuZAorcmVmdXNlcyB0byBydW4gd2hlbiBnaXZlbiBwYXRobmFtZXMgKGJ1dCBzZWUgYC1pYCBvcHRpb24pLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhvdWdoIG5vdCByZXF1aXJlZCwgaXQncyBhIGdvb2QgaWRlYSB0byBiZWdpbiB0aGUgY29tbWl0IG1lc3NhZ2UKK3dpdGggYSBzaW5nbGUgc2hvcnQgKGxlc3MgdGhhbiA1MCBjaGFyYWN0ZXIpIGxpbmUgc3VtbWFyaXppbmcgdGhlCitjaGFuZ2UsIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSBhbmQgdGhlbiBhIG1vcmUgdGhvcm91Z2ggZGVzY3JpcHRpb24uCitUaGUgdGV4dCB1cCB0byB0aGUgZmlyc3QgYmxhbmsgbGluZSBpbiBhIGNvbW1pdCBtZXNzYWdlIGlzIHRyZWF0ZWQKK2FzIHRoZSBjb21taXQgdGl0bGUsIGFuZCB0aGF0IHRpdGxlIGlzIHVzZWQgdGhyb3VnaG91dCBnaXQuCitGb3IgZXhhbXBsZSwgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHR1cm5zIGEgY29tbWl0IGludG8gZW1haWwsIGFuZCBpdCB1c2VzCit0aGUgdGl0bGUgb24gdGhlIFN1YmplY3QgbGluZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNvbW1pdCBpbiB0aGUgYm9keS4KKworaW5jbHVkZTo6aTE4bi50eHRbXQorCitFTlZJUk9OTUVOVCBBTkQgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGVkaXRvciB1c2VkIHRvIGVkaXQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSB3aWxsIGJlIGNob3NlbiBmcm9tIHRoZQorR0lUX0VESVRPUiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIGNvcmUuZWRpdG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHRoZQorVklTVUFMIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciB0aGUgRURJVE9SIGVudmlyb25tZW50IHZhcmlhYmxlIChpbiB0aGF0CitvcmRlcikuICBTZWUgbGlua2dpdDpnaXQtdmFyWzFdIGZvciBkZXRhaWxzLgorCitIT09LUworLS0tLS0KK1RoaXMgY29tbWFuZCBjYW4gcnVuIGBjb21taXQtbXNnYCwgYHByZXBhcmUtY29tbWl0LW1zZ2AsIGBwcmUtY29tbWl0YCwKK2FuZCBgcG9zdC1jb21taXRgIGhvb2tzLiAgU2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV0gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorCitGSUxFUworLS0tLS0KKworYCRHSVRfRElSL0NPTU1JVF9FRElUTVNHYDo6CisJVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb21taXQgbWVzc2FnZSBvZiBhIGNvbW1pdCBpbiBwcm9ncmVzcy4KKwlJZiBgZ2l0IGNvbW1pdGAgZXhpdHMgZHVlIHRvIGFuIGVycm9yIGJlZm9yZSBjcmVhdGluZyBhIGNvbW1pdCwKKwlhbnkgY29tbWl0IG1lc3NhZ2UgdGhhdCBoYXMgYmVlbiBwcm92aWRlZCBieSB0aGUgdXNlciAoZS5nLiwgaW4KKwlhbiBlZGl0b3Igc2Vzc2lvbikgd2lsbCBiZSBhdmFpbGFibGUgaW4gdGhpcyBmaWxlLCBidXQgd2lsbCBiZQorCW92ZXJ3cml0dGVuIGJ5IHRoZSBuZXh0IGludm9jYXRpb24gb2YgYGdpdCBjb21taXRgLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWFkZFsxXSwKK2xpbmtnaXQ6Z2l0LXJtWzFdLAorbGlua2dpdDpnaXQtbXZbMV0sCitsaW5rZ2l0OmdpdC1tZXJnZVsxXSwKK2xpbmtnaXQ6Z2l0LWNvbW1pdC10cmVlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlYTA3OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKQEAgLTAsMCArMSwzNjIgQEAKK2dpdC1jb25maWcoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNvbmZpZyAtIEdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gW3R5cGVdIFstenwtLW51bGxdIG5hbWUgW3ZhbHVlIFt2YWx1ZV9yZWdleF1dCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFt0eXBlXSAtLWFkZCBuYW1lIHZhbHVlCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFt0eXBlXSAtLXJlcGxhY2UtYWxsIG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbdHlwZV0gWy16fC0tbnVsbF0gLS1nZXQgbmFtZSBbdmFsdWVfcmVnZXhdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFt0eXBlXSBbLXp8LS1udWxsXSAtLWdldC1hbGwgbmFtZSBbdmFsdWVfcmVnZXhdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFt0eXBlXSBbLXp8LS1udWxsXSAtLWdldC1yZWdleHAgbmFtZV9yZWdleCBbdmFsdWVfcmVnZXhdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tdW5zZXQgbmFtZSBbdmFsdWVfcmVnZXhdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tdW5zZXQtYWxsIG5hbWUgW3ZhbHVlX3JlZ2V4XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLXJlbmFtZS1zZWN0aW9uIG9sZF9uYW1lIG5ld19uYW1lCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tcmVtb3ZlLXNlY3Rpb24gbmFtZQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbLXp8LS1udWxsXSAtbCB8IC0tbGlzdAorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLWdldC1jb2xvciBuYW1lIFtkZWZhdWx0XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLWdldC1jb2xvcmJvb2wgbmFtZSBbc3Rkb3V0LWlzLXR0eV0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gLWUgfCAtLWVkaXQKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitZb3UgY2FuIHF1ZXJ5L3NldC9yZXBsYWNlL3Vuc2V0IG9wdGlvbnMgd2l0aCB0aGlzIGNvbW1hbmQuIFRoZSBuYW1lIGlzCithY3R1YWxseSB0aGUgc2VjdGlvbiBhbmQgdGhlIGtleSBzZXBhcmF0ZWQgYnkgYSBkb3QsIGFuZCB0aGUgdmFsdWUgd2lsbCBiZQorZXNjYXBlZC4KKworTXVsdGlwbGUgbGluZXMgY2FuIGJlIGFkZGVkIHRvIGFuIG9wdGlvbiBieSB1c2luZyB0aGUgJy0tYWRkJyBvcHRpb24uCitJZiB5b3Ugd2FudCB0byB1cGRhdGUgb3IgdW5zZXQgYW4gb3B0aW9uIHdoaWNoIGNhbiBvY2N1ciBvbiBtdWx0aXBsZQorbGluZXMsIGEgUE9TSVggcmVnZXhwIGB2YWx1ZV9yZWdleGAgbmVlZHMgdG8gYmUgZ2l2ZW4uICBPbmx5IHRoZQorZXhpc3RpbmcgdmFsdWVzIHRoYXQgbWF0Y2ggdGhlIHJlZ2V4cCBhcmUgdXBkYXRlZCBvciB1bnNldC4gIElmCit5b3Ugd2FudCB0byBoYW5kbGUgdGhlIGxpbmVzIHRoYXQgZG8gKm5vdCogbWF0Y2ggdGhlIHJlZ2V4LCBqdXN0CitwcmVwZW5kIGEgc2luZ2xlIGV4Y2xhbWF0aW9uIG1hcmsgaW4gZnJvbnQgKHNlZSBhbHNvIDw8RVhBTVBMRVM+PikuCisKK1RoZSB0eXBlIHNwZWNpZmllciBjYW4gYmUgZWl0aGVyICctLWludCcgb3IgJy0tYm9vbCcsIHRvIG1ha2UKKydnaXQgY29uZmlnJyBlbnN1cmUgdGhhdCB0aGUgdmFyaWFibGUocykgYXJlIG9mIHRoZSBnaXZlbiB0eXBlIGFuZAorY29udmVydCB0aGUgdmFsdWUgdG8gdGhlIGNhbm9uaWNhbCBmb3JtIChzaW1wbGUgZGVjaW1hbCBudW1iZXIgZm9yIGludCwKK2EgInRydWUiIG9yICJmYWxzZSIgc3RyaW5nIGZvciBib29sKSwgb3IgJy0tcGF0aCcsIHdoaWNoIGRvZXMgc29tZQorcGF0aCBleHBhbnNpb24gKHNlZSAnLS1wYXRoJyBiZWxvdykuICBJZiBubyB0eXBlIHNwZWNpZmllciBpcyBwYXNzZWQsIG5vCitjaGVja3Mgb3IgdHJhbnNmb3JtYXRpb25zIGFyZSBwZXJmb3JtZWQgb24gdGhlIHZhbHVlLgorCitXaGVuIHJlYWRpbmcsIHRoZSB2YWx1ZXMgYXJlIHJlYWQgZnJvbSB0aGUgc3lzdGVtLCBnbG9iYWwgYW5kCityZXBvc2l0b3J5IGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZXMgYnkgZGVmYXVsdCwgYW5kIG9wdGlvbnMKKyctLXN5c3RlbScsICctLWdsb2JhbCcsICctLWxvY2FsJyBhbmQgJy0tZmlsZSA8ZmlsZW5hbWU+JyBjYW4gYmUKK3VzZWQgdG8gdGVsbCB0aGUgY29tbWFuZCB0byByZWFkIGZyb20gb25seSB0aGF0IGxvY2F0aW9uIChzZWUgPDxGSUxFUz4+KS4KKworV2hlbiB3cml0aW5nLCB0aGUgbmV3IHZhbHVlIGlzIHdyaXR0ZW4gdG8gdGhlIHJlcG9zaXRvcnkgbG9jYWwKK2NvbmZpZ3VyYXRpb24gZmlsZSBieSBkZWZhdWx0LCBhbmQgb3B0aW9ucyAnLS1zeXN0ZW0nLCAnLS1nbG9iYWwnLAorJy0tZmlsZSA8ZmlsZW5hbWU+JyBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBjb21tYW5kIHRvIHdyaXRlIHRvCit0aGF0IGxvY2F0aW9uICh5b3UgY2FuIHNheSAnLS1sb2NhbCcgYnV0IHRoYXQgaXMgdGhlIGRlZmF1bHQpLgorCitUaGlzIGNvbW1hbmQgd2lsbCBmYWlsIHdpdGggbm9uLXplcm8gc3RhdHVzIHVwb24gZXJyb3IuICBTb21lIGV4aXQKK2NvZGVzIGFyZToKKworLiBUaGUgY29uZmlnIGZpbGUgaXMgaW52YWxpZCAocmV0PTMpLAorLiBjYW4gbm90IHdyaXRlIHRvIHRoZSBjb25maWcgZmlsZSAocmV0PTQpLAorLiBubyBzZWN0aW9uIG9yIG5hbWUgd2FzIHByb3ZpZGVkIChyZXQ9MiksCisuIHRoZSBzZWN0aW9uIG9yIGtleSBpcyBpbnZhbGlkIChyZXQ9MSksCisuIHlvdSB0cnkgdG8gdW5zZXQgYW4gb3B0aW9uIHdoaWNoIGRvZXMgbm90IGV4aXN0IChyZXQ9NSksCisuIHlvdSB0cnkgdG8gdW5zZXQvc2V0IGFuIG9wdGlvbiBmb3Igd2hpY2ggbXVsdGlwbGUgbGluZXMgbWF0Y2ggKHJldD01KSwgb3IKKy4geW91IHRyeSB0byB1c2UgYW4gaW52YWxpZCByZWdleHAgKHJldD02KS4KKworT24gc3VjY2VzcywgdGhlIGNvbW1hbmQgcmV0dXJucyB0aGUgZXhpdCBjb2RlIDAuCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1yZXBsYWNlLWFsbDo6CisJRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZXBsYWNlIGF0IG1vc3Qgb25lIGxpbmUuIFRoaXMgcmVwbGFjZXMKKwlhbGwgbGluZXMgbWF0Y2hpbmcgdGhlIGtleSAoYW5kIG9wdGlvbmFsbHkgdGhlIHZhbHVlX3JlZ2V4KS4KKworLS1hZGQ6OgorCUFkZHMgYSBuZXcgbGluZSB0byB0aGUgb3B0aW9uIHdpdGhvdXQgYWx0ZXJpbmcgYW55IGV4aXN0aW5nCisJdmFsdWVzLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyBwcm92aWRpbmcgJ14kJyBhcyB0aGUgdmFsdWVfcmVnZXgKKwlpbiBgLS1yZXBsYWNlLWFsbGAuCisKKy0tZ2V0OjoKKwlHZXQgdGhlIHZhbHVlIGZvciBhIGdpdmVuIGtleSAob3B0aW9uYWxseSBmaWx0ZXJlZCBieSBhIHJlZ2V4CisJbWF0Y2hpbmcgdGhlIHZhbHVlKS4gUmV0dXJucyBlcnJvciBjb2RlIDEgaWYgdGhlIGtleSB3YXMgbm90CisJZm91bmQgYW5kIGVycm9yIGNvZGUgMiBpZiBtdWx0aXBsZSBrZXkgdmFsdWVzIHdlcmUgZm91bmQuCisKKy0tZ2V0LWFsbDo6CisJTGlrZSBnZXQsIGJ1dCBkb2VzIG5vdCBmYWlsIGlmIHRoZSBudW1iZXIgb2YgdmFsdWVzIGZvciB0aGUga2V5CisJaXMgbm90IGV4YWN0bHkgb25lLgorCistLWdldC1yZWdleHA6OgorCUxpa2UgLS1nZXQtYWxsLCBidXQgaW50ZXJwcmV0cyB0aGUgbmFtZSBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQKKwl3cml0ZXMgb3V0IHRoZSBrZXkgbmFtZXMuICBSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgaXMgY3VycmVudGx5CisJY2FzZS1zZW5zaXRpdmUgYW5kIGRvbmUgYWdhaW5zdCBhIGNhbm9uaWNhbGl6ZWQgdmVyc2lvbiBvZiB0aGUga2V5CisJaW4gd2hpY2ggc2VjdGlvbiBhbmQgdmFyaWFibGUgbmFtZXMgYXJlIGxvd2VyY2FzZWQsIGJ1dCBzdWJzZWN0aW9uCisJbmFtZXMgYXJlIG5vdC4KKworLS1nbG9iYWw6OgorCUZvciB3cml0aW5nIG9wdGlvbnM6IHdyaXRlIHRvIGdsb2JhbCB+Ly5naXRjb25maWcgZmlsZSByYXRoZXIgdGhhbgorCXRoZSByZXBvc2l0b3J5IC5naXQvY29uZmlnLCB3cml0ZSB0byAkWERHX0NPTkZJR19IT01FL2dpdC9jb25maWcgZmlsZQorCWlmIHRoaXMgZmlsZSBleGlzdHMgYW5kIHRoZSB+Ly5naXRjb25maWcgZmlsZSBkb2Vzbid0LgorKworRm9yIHJlYWRpbmcgb3B0aW9uczogcmVhZCBvbmx5IGZyb20gZ2xvYmFsIH4vLmdpdGNvbmZpZyBhbmQgZnJvbQorJFhER19DT05GSUdfSE9NRS9naXQvY29uZmlnIHJhdGhlciB0aGFuIGZyb20gYWxsIGF2YWlsYWJsZSBmaWxlcy4KKysKK1NlZSBhbHNvIDw8RklMRVM+Pi4KKworLS1zeXN0ZW06OgorCUZvciB3cml0aW5nIG9wdGlvbnM6IHdyaXRlIHRvIHN5c3RlbS13aWRlICQocHJlZml4KS9ldGMvZ2l0Y29uZmlnCisJcmF0aGVyIHRoYW4gdGhlIHJlcG9zaXRvcnkgLmdpdC9jb25maWcuCisrCitGb3IgcmVhZGluZyBvcHRpb25zOiByZWFkIG9ubHkgZnJvbSBzeXN0ZW0td2lkZSAkKHByZWZpeCkvZXRjL2dpdGNvbmZpZworcmF0aGVyIHRoYW4gZnJvbSBhbGwgYXZhaWxhYmxlIGZpbGVzLgorKworU2VlIGFsc28gPDxGSUxFUz4+LgorCistZiBjb25maWctZmlsZTo6CistLWZpbGUgY29uZmlnLWZpbGU6OgorCVVzZSB0aGUgZ2l2ZW4gY29uZmlnIGZpbGUgaW5zdGVhZCBvZiB0aGUgb25lIHNwZWNpZmllZCBieSBHSVRfQ09ORklHLgorCistLXJlbW92ZS1zZWN0aW9uOjoKKwlSZW1vdmUgdGhlIGdpdmVuIHNlY3Rpb24gZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCistLXJlbmFtZS1zZWN0aW9uOjoKKwlSZW5hbWUgdGhlIGdpdmVuIHNlY3Rpb24gdG8gYSBuZXcgbmFtZS4KKworLS11bnNldDo6CisJUmVtb3ZlIHRoZSBsaW5lIG1hdGNoaW5nIHRoZSBrZXkgZnJvbSBjb25maWcgZmlsZS4KKworLS11bnNldC1hbGw6OgorCVJlbW92ZSBhbGwgbGluZXMgbWF0Y2hpbmcgdGhlIGtleSBmcm9tIGNvbmZpZyBmaWxlLgorCistbDo6CistLWxpc3Q6OgorCUxpc3QgYWxsIHZhcmlhYmxlcyBzZXQgaW4gY29uZmlnIGZpbGUuCisKKy0tYm9vbDo6CisJJ2dpdCBjb25maWcnIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG91dHB1dCBpcyAidHJ1ZSIgb3IgImZhbHNlIgorCistLWludDo6CisJJ2dpdCBjb25maWcnIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG91dHB1dCBpcyBhIHNpbXBsZQorCWRlY2ltYWwgbnVtYmVyLiAgQW4gb3B0aW9uYWwgdmFsdWUgc3VmZml4IG9mICdrJywgJ20nLCBvciAnZycKKwlpbiB0aGUgY29uZmlnIGZpbGUgd2lsbCBjYXVzZSB0aGUgdmFsdWUgdG8gYmUgbXVsdGlwbGllZAorCWJ5IDEwMjQsIDEwNDg1NzYsIG9yIDEwNzM3NDE4MjQgcHJpb3IgdG8gb3V0cHV0LgorCistLWJvb2wtb3ItaW50OjoKKwknZ2l0IGNvbmZpZycgd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IG1hdGNoZXMgdGhlIGZvcm1hdCBvZgorCWVpdGhlciAtLWJvb2wgb3IgLS1pbnQsIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworLS1wYXRoOjoKKwknZ2l0LWNvbmZpZycgd2lsbCBleHBhbmQgbGVhZGluZyAne3RpbGRlfScgdG8gdGhlIHZhbHVlIG9mCisJJyRIT01FJywgYW5kICd7dGlsZGV9dXNlcicgdG8gdGhlIGhvbWUgZGlyZWN0b3J5IGZvciB0aGUKKwlzcGVjaWZpZWQgdXNlci4gIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgd2hlbiBzZXR0aW5nIHRoZQorCXZhbHVlIChidXQgeW91IGNhbiB1c2UgJ2dpdCBjb25maWcgYmxhIHt0aWxkZX0vJyBmcm9tIHRoZQorCWNvbW1hbmQgbGluZSB0byBsZXQgeW91ciBzaGVsbCBkbyB0aGUgZXhwYW5zaW9uKS4KKworLXo6OgorLS1udWxsOjoKKwlGb3IgYWxsIG9wdGlvbnMgdGhhdCBvdXRwdXQgdmFsdWVzIGFuZC9vciBrZXlzLCBhbHdheXMKKwllbmQgdmFsdWVzIHdpdGggdGhlIG51bGwgY2hhcmFjdGVyIChpbnN0ZWFkIG9mIGEKKwluZXdsaW5lKS4gVXNlIG5ld2xpbmUgaW5zdGVhZCBhcyBhIGRlbGltaXRlciBiZXR3ZWVuCisJa2V5IGFuZCB2YWx1ZS4gVGhpcyBhbGxvd3MgZm9yIHNlY3VyZSBwYXJzaW5nIG9mIHRoZQorCW91dHB1dCB3aXRob3V0IGdldHRpbmcgY29uZnVzZWQgZS5nLiBieSB2YWx1ZXMgdGhhdAorCWNvbnRhaW4gbGluZSBicmVha3MuCisKKy0tZ2V0LWNvbG9yYm9vbCBuYW1lIFtzdGRvdXQtaXMtdHR5XTo6CisKKwlGaW5kIHRoZSBjb2xvciBzZXR0aW5nIGZvciBgbmFtZWAgKGUuZy4gYGNvbG9yLmRpZmZgKSBhbmQgb3V0cHV0CisJInRydWUiIG9yICJmYWxzZSIuICBgc3Rkb3V0LWlzLXR0eWAgc2hvdWxkIGJlIGVpdGhlciAidHJ1ZSIgb3IKKwkiZmFsc2UiLCBhbmQgaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY29uZmlndXJhdGlvbiBzYXlzCisJImF1dG8iLiAgSWYgYHN0ZG91dC1pcy10dHlgIGlzIG1pc3NpbmcsIHRoZW4gY2hlY2tzIHRoZSBzdGFuZGFyZAorCW91dHB1dCBvZiB0aGUgY29tbWFuZCBpdHNlbGYsIGFuZCBleGl0cyB3aXRoIHN0YXR1cyAwIGlmIGNvbG9yCisJaXMgdG8gYmUgdXNlZCwgb3IgZXhpdHMgd2l0aCBzdGF0dXMgMSBvdGhlcndpc2UuCisJV2hlbiB0aGUgY29sb3Igc2V0dGluZyBmb3IgYG5hbWVgIGlzIHVuZGVmaW5lZCwgdGhlIGNvbW1hbmQgdXNlcworCWBjb2xvci51aWAgYXMgZmFsbGJhY2suCisKKy0tZ2V0LWNvbG9yIG5hbWUgW2RlZmF1bHRdOjoKKworCUZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQgZm9yIGBuYW1lYCAoZS5nLiBgY29sb3IuZGlmZi5uZXdgKSBhbmQKKwlvdXRwdXQgaXQgYXMgdGhlIEFOU0kgY29sb3IgZXNjYXBlIHNlcXVlbmNlIHRvIHRoZSBzdGFuZGFyZAorCW91dHB1dC4gIFRoZSBvcHRpb25hbCBgZGVmYXVsdGAgcGFyYW1ldGVyIGlzIHVzZWQgaW5zdGVhZCwgaWYKKwl0aGVyZSBpcyBubyBjb2xvciBjb25maWd1cmVkIGZvciBgbmFtZWAuCisKKy1lOjoKKy0tZWRpdDo6CisJT3BlbnMgYW4gZWRpdG9yIHRvIG1vZGlmeSB0aGUgc3BlY2lmaWVkIGNvbmZpZyBmaWxlOyBlaXRoZXIKKwknLS1zeXN0ZW0nLCAnLS1nbG9iYWwnLCBvciByZXBvc2l0b3J5IChkZWZhdWx0KS4KKworLS1pbmNsdWRlczo6CistLW5vLWluY2x1ZGVzOjoKKwlSZXNwZWN0IGBpbmNsdWRlLipgIGRpcmVjdGl2ZXMgaW4gY29uZmlnIGZpbGVzIHdoZW4gbG9va2luZyB1cAorCXZhbHVlcy4gRGVmYXVsdHMgdG8gb24uCisKK1tbRklMRVNdXQorRklMRVMKKy0tLS0tCisKK0lmIG5vdCBzZXQgZXhwbGljaXRseSB3aXRoICctLWZpbGUnLCB0aGVyZSBhcmUgZm91ciBmaWxlcyB3aGVyZQorJ2dpdCBjb25maWcnIHdpbGwgc2VhcmNoIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnM6CisKKyRHSVRfRElSL2NvbmZpZzo6CisJUmVwb3NpdG9yeSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuCisKK34vLmdpdGNvbmZpZzo6CisJVXNlci1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuIEFsc28gY2FsbGVkICJnbG9iYWwiCisJY29uZmlndXJhdGlvbiBmaWxlLgorCiskWERHX0NPTkZJR19IT01FL2dpdC9jb25maWc6OgorCVNlY29uZCB1c2VyLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4gSWYgJFhER19DT05GSUdfSE9NRSBpcyBub3Qgc2V0CisJb3IgZW1wdHksICRIT01FLy5jb25maWcvZ2l0L2NvbmZpZyB3aWxsIGJlIHVzZWQuIEFueSBzaW5nbGUtdmFsdWVkCisJdmFyaWFibGUgc2V0IGluIHRoaXMgZmlsZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHdoYXRldmVyIGlzIGluCisJfi8uZ2l0Y29uZmlnLiAgSXQgaXMgYSBnb29kIGlkZWEgbm90IHRvIGNyZWF0ZSB0aGlzIGZpbGUgaWYKKwl5b3Ugc29tZXRpbWVzIHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQsIGFzIHN1cHBvcnQgZm9yIHRoaXMKKwlmaWxlIHdhcyBhZGRlZCBmYWlybHkgcmVjZW50bHkuCisKKyQocHJlZml4KS9ldGMvZ2l0Y29uZmlnOjoKKwlTeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuCisKK0lmIG5vIGZ1cnRoZXIgb3B0aW9ucyBhcmUgZ2l2ZW4sIGFsbCByZWFkaW5nIG9wdGlvbnMgd2lsbCByZWFkIGFsbCBvZiB0aGVzZQorZmlsZXMgdGhhdCBhcmUgYXZhaWxhYmxlLiBJZiB0aGUgZ2xvYmFsIG9yIHRoZSBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uCitmaWxlIGFyZSBub3QgYXZhaWxhYmxlIHRoZXkgd2lsbCBiZSBpZ25vcmVkLiBJZiB0aGUgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uCitmaWxlIGlzIG5vdCBhdmFpbGFibGUgb3IgcmVhZGFibGUsICdnaXQgY29uZmlnJyB3aWxsIGV4aXQgd2l0aCBhIG5vbi16ZXJvCitlcnJvciBjb2RlLiBIb3dldmVyLCBpbiBuZWl0aGVyIGNhc2Ugd2lsbCBhbiBlcnJvciBtZXNzYWdlIGJlIGlzc3VlZC4KKworQWxsIHdyaXRpbmcgb3B0aW9ucyB3aWxsIHBlciBkZWZhdWx0IHdyaXRlIHRvIHRoZSByZXBvc2l0b3J5IHNwZWNpZmljCitjb25maWd1cmF0aW9uIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGFsc28gYWZmZWN0cyBvcHRpb25zIGxpa2UgJy0tcmVwbGFjZS1hbGwnCithbmQgJy0tdW5zZXQnLiAqJ2dpdCBjb25maWcnIHdpbGwgb25seSBldmVyIGNoYW5nZSBvbmUgZmlsZSBhdCBhIHRpbWUqLgorCitZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIHJ1bGVzIGVpdGhlciBieSBjb21tYW5kIGxpbmUgb3B0aW9ucyBvciBieSBlbnZpcm9ubWVudAordmFyaWFibGVzLiBUaGUgJy0tZ2xvYmFsJyBhbmQgdGhlICctLXN5c3RlbScgb3B0aW9ucyB3aWxsIGxpbWl0IHRoZSBmaWxlIHVzZWQKK3RvIHRoZSBnbG9iYWwgb3Igc3lzdGVtLXdpZGUgZmlsZSByZXNwZWN0aXZlbHkuIFRoZSBHSVRfQ09ORklHIGVudmlyb25tZW50Cit2YXJpYWJsZSBoYXMgYSBzaW1pbGFyIGVmZmVjdCwgYnV0IHlvdSBjYW4gc3BlY2lmeSBhbnkgZmlsZW5hbWUgeW91IHdhbnQuCisKKworRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tCisKK0dJVF9DT05GSUc6OgorCVRha2UgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZ2l2ZW4gZmlsZSBpbnN0ZWFkIG9mIC5naXQvY29uZmlnLgorCVVzaW5nIHRoZSAiLS1nbG9iYWwiIG9wdGlvbiBmb3JjZXMgdGhpcyB0byB+Ly5naXRjb25maWcuIFVzaW5nIHRoZQorCSItLXN5c3RlbSIgb3B0aW9uIGZvcmNlcyB0aGlzIHRvICQocHJlZml4KS9ldGMvZ2l0Y29uZmlnLgorCitTZWUgYWxzbyA8PEZJTEVTPj4uCisKKworW1tFWEFNUExFU11dCitFWEFNUExFUworLS0tLS0tLS0KKworR2l2ZW4gYSAuZ2l0L2NvbmZpZyBsaWtlIHRoaXM6CisKKwkjCisJIyBUaGlzIGlzIHRoZSBjb25maWcgZmlsZSwgYW5kCisJIyBhICcjJyBvciAnOycgY2hhcmFjdGVyIGluZGljYXRlcworCSMgYSBjb21tZW50CisJIworCisJOyBjb3JlIHZhcmlhYmxlcworCVtjb3JlXQorCQk7IERvbid0IHRydXN0IGZpbGUgbW9kZXMKKwkJZmlsZW1vZGUgPSBmYWxzZQorCisJOyBPdXIgZGlmZiBhbGdvcml0aG0KKwlbZGlmZl0KKwkJZXh0ZXJuYWwgPSAvdXNyL2xvY2FsL2Jpbi9kaWZmLXdyYXBwZXIKKwkJcmVuYW1lcyA9IHRydWUKKworCTsgUHJveHkgc2V0dGluZ3MKKwlbY29yZV0KKwkJZ2l0cHJveHk9cHJveHktY29tbWFuZCBmb3Iga2VybmVsLm9yZworCQlnaXRwcm94eT1kZWZhdWx0LXByb3h5IDsgZm9yIGFsbCB0aGUgcmVzdAorCit5b3UgY2FuIHNldCB0aGUgZmlsZW1vZGUgdG8gdHJ1ZSB3aXRoCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgdHJ1ZQorLS0tLS0tLS0tLS0tCisKK1RoZSBoeXBvdGhldGljYWwgcHJveHkgY29tbWFuZCBlbnRyaWVzIGFjdHVhbGx5IGhhdmUgYSBwb3N0Zml4IHRvIGRpc2Nlcm4KK3doYXQgVVJMIHRoZXkgYXBwbHkgdG8uIEhlcmUgaXMgaG93IHRvIGNoYW5nZSB0aGUgZW50cnkgZm9yIGtlcm5lbC5vcmcKK3RvICJzc2giLgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyBjb3JlLmdpdHByb3h5ICcic3NoIiBmb3Iga2VybmVsLm9yZycgJ2ZvciBrZXJuZWwub3JnJCcKKy0tLS0tLS0tLS0tLQorCitUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmx5IHRoZSBrZXkvdmFsdWUgcGFpciBmb3Iga2VybmVsLm9yZyBpcyByZXBsYWNlZC4KKworVG8gZGVsZXRlIHRoZSBlbnRyeSBmb3IgcmVuYW1lcywgZG8KKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS11bnNldCBkaWZmLnJlbmFtZXMKKy0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBkZWxldGUgYW4gZW50cnkgZm9yIGEgbXVsdGl2YXIgKGxpa2UgY29yZS5naXRwcm94eSBhYm92ZSksCit5b3UgaGF2ZSB0byBwcm92aWRlIGEgcmVnZXggbWF0Y2hpbmcgdGhlIHZhbHVlIG9mIGV4YWN0bHkgb25lIGxpbmUuCisKK1RvIHF1ZXJ5IHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBrZXksIGRvCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIC0tZ2V0IGNvcmUuZmlsZW1vZGUKKy0tLS0tLS0tLS0tLQorCitvcgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyBjb3JlLmZpbGVtb2RlCistLS0tLS0tLS0tLS0KKworb3IsIHRvIHF1ZXJ5IGEgbXVsdGl2YXI6CisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIC0tZ2V0IGNvcmUuZ2l0cHJveHkgImZvciBrZXJuZWwub3JnJCIKKy0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBrbm93IGFsbCB0aGUgdmFsdWVzIGZvciBhIG11bHRpdmFyLCBkbzoKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS1nZXQtYWxsIGNvcmUuZ2l0cHJveHkKKy0tLS0tLS0tLS0tLQorCitJZiB5b3UgbGlrZSB0byBsaXZlIGRhbmdlcm91c2x5LCB5b3UgY2FuIHJlcGxhY2UgKmFsbCogY29yZS5naXRwcm94eSBieSBhCituZXcgb25lIHdpdGgKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBjb3JlLmdpdHByb3h5IHNzaAorLS0tLS0tLS0tLS0tCisKK0hvd2V2ZXIsIGlmIHlvdSByZWFsbHkgb25seSB3YW50IHRvIHJlcGxhY2UgdGhlIGxpbmUgZm9yIHRoZSBkZWZhdWx0IHByb3h5LAoraS5lLiB0aGUgb25lIHdpdGhvdXQgYSAiZm9yIC4uLiIgcG9zdGZpeCwgZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgY29yZS5naXRwcm94eSBzc2ggJyEgZm9yICcKKy0tLS0tLS0tLS0tLQorCitUbyBhY3R1YWxseSBtYXRjaCBvbmx5IHZhbHVlcyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmssIHlvdSBoYXZlIHRvCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIHNlY3Rpb24ua2V5IHZhbHVlICdbIV0nCistLS0tLS0tLS0tLS0KKworVG8gYWRkIGEgbmV3IHByb3h5LCB3aXRob3V0IGFsdGVyaW5nIGFueSBvZiB0aGUgZXhpc3Rpbmcgb25lcywgdXNlCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIC0tYWRkIGNvcmUuZ2l0cHJveHkgJyJwcm94eS1jb21tYW5kIiBmb3IgZXhhbXBsZS5jb20nCistLS0tLS0tLS0tLS0KKworQW4gZXhhbXBsZSB0byB1c2UgY3VzdG9taXplZCBjb2xvciBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGluIHlvdXIKK3NjcmlwdDoKKworLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKK1dTPSQoZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBjb2xvci5kaWZmLndoaXRlc3BhY2UgImJsdWUgcmV2ZXJzZSIpCitSRVNFVD0kKGdpdCBjb25maWcgLS1nZXQtY29sb3IgIiIgInJlc2V0IikKK2VjaG8gIiR7V1N9eW91ciB3aGl0ZXNwYWNlIGNvbG9yIG9yIGJsdWUgcmV2ZXJzZSR7UkVTRVR9IgorLS0tLS0tLS0tLS0tCisKK2luY2x1ZGU6OmNvbmZpZy50eHRbXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvdW50LW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY291bnQtb2JqZWN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjODBjZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvdW50LW9iamVjdHMudHh0CkBAIC0wLDAgKzEsMzEgQEAKK2dpdC1jb3VudC1vYmplY3RzKDEpCis9PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY291bnQtb2JqZWN0cyAtIENvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjb3VudC1vYmplY3RzJyBbLXZdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb3VudHMgdGhlIG51bWJlciBvZiB1bnBhY2tlZCBvYmplY3QgZmlsZXMgYW5kIGRpc2sgc3BhY2UgY29uc3VtZWQgYnkKK3RoZW0sIHRvIGhlbHAgeW91IGRlY2lkZSB3aGVuIGl0IGlzIGEgZ29vZCB0aW1lIHRvIHJlcGFjay4KKworCitPUFRJT05TCistLS0tLS0tCistdjo6CistLXZlcmJvc2U6OgorCUluIGFkZGl0aW9uIHRvIHRoZSBudW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyBhbmQgZGlzaworCXNwYWNlIGNvbnN1bWVkLCBpdCByZXBvcnRzIHRoZSBudW1iZXIgb2YgaW4tcGFjaworCW9iamVjdHMsIG51bWJlciBvZiBwYWNrcywgZGlzayBzcGFjZSBjb25zdW1lZCBieSB0aG9zZSBwYWNrcywKKwlhbmQgbnVtYmVyIG9mIG9iamVjdHMgdGhhdCBjYW4gYmUgcmVtb3ZlZCBieSBydW5uaW5nCisJYGdpdCBwcnVuZS1wYWNrZWRgLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNWRiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24udHh0CkBAIC0wLDAgKzEsMjYgQEAKK2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24oMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbiAtIFRlbXBvcmFyaWx5IHN0b3JlIHVzZXIgY3JlZGVudGlhbHMgaW4gbWVtb3J5CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZ2l0IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbiA8c29ja2V0PgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworTk9URTogWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gaW52b2tlIHRoaXMgY29tbWFuZCB5b3Vyc2VsZjsgaXQgaXMKK3N0YXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIHlvdSB1c2UgbGlua2dpdDpnaXQtY3JlZGVudGlhbC1jYWNoZVsxXS4KKworVGhpcyBjb21tYW5kIGxpc3RlbnMgb24gdGhlIFVuaXggZG9tYWluIHNvY2tldCBzcGVjaWZpZWQgYnkgYDxzb2NrZXQ+YAorZm9yIGBnaXQtY3JlZGVudGlhbC1jYWNoZWAgY2xpZW50cy4gQ2xpZW50cyBtYXkgc3RvcmUgYW5kIHJldHJpZXZlCitjcmVkZW50aWFscy4gRWFjaCBjcmVkZW50aWFsIGlzIGhlbGQgZm9yIGEgdGltZW91dCBzcGVjaWZpZWQgYnkgdGhlCitjbGllbnQ7IG9uY2Ugbm8gY3JlZGVudGlhbHMgYXJlIGhlbGQsIHRoZSBkYWVtb24gZXhpdHMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1jYWNoZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLWNhY2hlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWZmNWZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1jYWNoZS50eHQKQEAgLTAsMCArMSw3NyBAQAorZ2l0LWNyZWRlbnRpYWwtY2FjaGUoMSkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jcmVkZW50aWFsLWNhY2hlIC0gSGVscGVyIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHBhc3N3b3JkcyBpbiBtZW1vcnkKKworU1lOT1BTSVMKKy0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAnY2FjaGUgW29wdGlvbnNdJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCBjYWNoZXMgY3JlZGVudGlhbHMgaW4gbWVtb3J5IGZvciB1c2UgYnkgZnV0dXJlIGdpdAorcHJvZ3JhbXMuIFRoZSBzdG9yZWQgY3JlZGVudGlhbHMgbmV2ZXIgdG91Y2ggdGhlIGRpc2ssIGFuZCBhcmUgZm9yZ290dGVuCithZnRlciBhIGNvbmZpZ3VyYWJsZSB0aW1lb3V0LiAgVGhlIGNhY2hlIGlzIGFjY2Vzc2libGUgb3ZlciBhIFVuaXgKK2RvbWFpbiBzb2NrZXQsIHJlc3RyaWN0ZWQgdG8gdGhlIGN1cnJlbnQgdXNlciBieSBmaWxlc3lzdGVtIHBlcm1pc3Npb25zLgorCitZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBpbnZva2UgdGhpcyBjb21tYW5kIGRpcmVjdGx5OyBpdCBpcyBtZWFudCB0bworYmUgdXNlZCBhcyBhIGNyZWRlbnRpYWwgaGVscGVyIGJ5IG90aGVyIHBhcnRzIG9mIGdpdC4gU2VlCitsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddIG9yIGBFWEFNUExFU2AgYmVsb3cuCisKK09QVElPTlMKKy0tLS0tLS0KKworLS10aW1lb3V0IDxzZWNvbmRzPjo6CisKKwlOdW1iZXIgb2Ygc2Vjb25kcyB0byBjYWNoZSBjcmVkZW50aWFscyAoZGVmYXVsdDogOTAwKS4KKworLS1zb2NrZXQgPHBhdGg+OjoKKworCVVzZSBgPHBhdGg+YCB0byBjb250YWN0IGEgcnVubmluZyBjYWNoZSBkYWVtb24gKG9yIHN0YXJ0IGEgbmV3CisJY2FjaGUgZGFlbW9uIGlmIG9uZSBpcyBub3Qgc3RhcnRlZCkuIERlZmF1bHRzIHRvCisJYH4vLmdpdC1jcmVkZW50aWFsLWNhY2hlL3NvY2tldGAuIElmIHlvdXIgaG9tZSBkaXJlY3RvcnkgaXMgb24gYQorCW5ldHdvcmstbW91bnRlZCBmaWxlc3lzdGVtLCB5b3UgbWF5IG5lZWQgdG8gY2hhbmdlIHRoaXMgdG8gYQorCWxvY2FsIGZpbGVzeXN0ZW0uCisKK0NPTlRST0xMSU5HIFRIRSBEQUVNT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHdvdWxkIGxpa2UgdGhlIGRhZW1vbiB0byBleGl0IGVhcmx5LCBmb3JnZXR0aW5nIGFsbCBjYWNoZWQKK2NyZWRlbnRpYWxzIGJlZm9yZSB0aGVpciB0aW1lb3V0LCB5b3UgY2FuIGlzc3VlIGFuIGBleGl0YCBhY3Rpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgY3JlZGVudGlhbC1jYWNoZSBleGl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFWEFNUExFUworLS0tLS0tLS0KKworVGhlIHBvaW50IG9mIHRoaXMgaGVscGVyIGlzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHRpbWVzIHlvdSBtdXN0IHR5cGUKK3lvdXIgdXNlcm5hbWUgb3IgcGFzc3dvcmQuIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciBjYWNoZQorJCBnaXQgcHVzaCBodHRwOi8vZXhhbXBsZS5jb20vcmVwby5naXQKK1VzZXJuYW1lOiA8dHlwZSB5b3VyIHVzZXJuYW1lPgorUGFzc3dvcmQ6IDx0eXBlIHlvdXIgcGFzc3dvcmQ+CisKK1t3b3JrIGZvciA1IG1vcmUgbWludXRlc10KKyQgZ2l0IHB1c2ggaHR0cDovL2V4YW1wbGUuY29tL3JlcG8uZ2l0CitbeW91ciBjcmVkZW50aWFscyBhcmUgdXNlZCBhdXRvbWF0aWNhbGx5XQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gcHJvdmlkZSBvcHRpb25zIHZpYSB0aGUgY3JlZGVudGlhbC5oZWxwZXIgY29uZmlndXJhdGlvbgordmFyaWFibGUgKHRoaXMgZXhhbXBsZSBkcm9wcyB0aGUgY2FjaGUgdGltZSB0byA1IG1pbnV0ZXMpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgJ2NhY2hlIC0tdGltZW91dD0zMDAnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1zdG9yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLXN0b3JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjdjMDNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1zdG9yZS50eHQKQEAgLTAsMCArMSw3NSBAQAorZ2l0LWNyZWRlbnRpYWwtc3RvcmUoMSkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jcmVkZW50aWFsLXN0b3JlIC0gSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2sKKworU1lOT1BTSVMKKy0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICdzdG9yZSBbb3B0aW9uc10nCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitOT1RFOiBVc2luZyB0aGlzIGhlbHBlciB3aWxsIHN0b3JlIHlvdXIgcGFzc3dvcmRzIHVuZW5jcnlwdGVkIG9uIGRpc2ssCitwcm90ZWN0ZWQgb25seSBieSBmaWxlc3lzdGVtIHBlcm1pc3Npb25zLiBJZiB0aGlzIGlzIG5vdCBhbiBhY2NlcHRhYmxlCitzZWN1cml0eSB0cmFkZW9mZiwgdHJ5IGxpbmtnaXQ6Z2l0LWNyZWRlbnRpYWwtY2FjaGVbMV0sIG9yIGZpbmQgYSBoZWxwZXIKK3RoYXQgaW50ZWdyYXRlcyB3aXRoIHNlY3VyZSBzdG9yYWdlIHByb3ZpZGVkIGJ5IHlvdXIgb3BlcmF0aW5nIHN5c3RlbS4KKworVGhpcyBjb21tYW5kIHN0b3JlcyBjcmVkZW50aWFscyBpbmRlZmluaXRlbHkgb24gZGlzayBmb3IgdXNlIGJ5IGZ1dHVyZQorZ2l0IHByb2dyYW1zLgorCitZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBpbnZva2UgdGhpcyBjb21tYW5kIGRpcmVjdGx5OyBpdCBpcyBtZWFudCB0bworYmUgdXNlZCBhcyBhIGNyZWRlbnRpYWwgaGVscGVyIGJ5IG90aGVyIHBhcnRzIG9mIGdpdC4gU2VlCitsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddIG9yIGBFWEFNUExFU2AgYmVsb3cuCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1zdG9yZT08cGF0aD46OgorCisJVXNlIGA8cGF0aD5gIHRvIHN0b3JlIGNyZWRlbnRpYWxzLiBUaGUgZmlsZSB3aWxsIGhhdmUgaXRzCisJZmlsZXN5c3RlbSBwZXJtaXNzaW9ucyBzZXQgdG8gcHJldmVudCBvdGhlciB1c2VycyBvbiB0aGUgc3lzdGVtCisJZnJvbSByZWFkaW5nIGl0LCBidXQgd2lsbCBub3QgYmUgZW5jcnlwdGVkIG9yIG90aGVyd2lzZQorCXByb3RlY3RlZC4gRGVmYXVsdHMgdG8gYH4vLmdpdC1jcmVkZW50aWFsc2AuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUaGUgcG9pbnQgb2YgdGhpcyBoZWxwZXIgaXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgdGltZXMgeW91IG11c3QgdHlwZQoreW91ciB1c2VybmFtZSBvciBwYXNzd29yZC4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyIHN0b3JlCiskIGdpdCBwdXNoIGh0dHA6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdAorVXNlcm5hbWU6IDx0eXBlIHlvdXIgdXNlcm5hbWU+CitQYXNzd29yZDogPHR5cGUgeW91ciBwYXNzd29yZD4KKworW3NldmVyYWwgZGF5cyBsYXRlcl0KKyQgZ2l0IHB1c2ggaHR0cDovL2V4YW1wbGUuY29tL3JlcG8uZ2l0CitbeW91ciBjcmVkZW50aWFscyBhcmUgdXNlZCBhdXRvbWF0aWNhbGx5XQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NUT1JBR0UgRk9STUFUCistLS0tLS0tLS0tLS0tLQorCitUaGUgYC5naXQtY3JlZGVudGlhbHNgIGZpbGUgaXMgc3RvcmVkIGluIHBsYWludGV4dC4gRWFjaCBjcmVkZW50aWFsIGlzCitzdG9yZWQgb24gaXRzIG93biBsaW5lIGFzIGEgVVJMIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraHR0cHM6Ly91c2VyOnBhc3NAZXhhbXBsZS5jb20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGdpdCBuZWVkcyBhdXRoZW50aWNhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIFVSTCBjb250ZXh0LAorY3JlZGVudGlhbC1zdG9yZSB3aWxsIGNvbnNpZGVyIHRoYXQgY29udGV4dCBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdAorZWFjaCBlbnRyeSBpbiB0aGUgY3JlZGVudGlhbHMgZmlsZS4gIElmIHRoZSBwcm90b2NvbCwgaG9zdG5hbWUsIGFuZAordXNlcm5hbWUgKGlmIHdlIGFscmVhZHkgaGF2ZSBvbmUpIG1hdGNoLCB0aGVuIHRoZSBwYXNzd29yZCBpcyByZXR1cm5lZAordG8gZ2l0LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YgY29uZmlndXJhdGlvbiBpbiBsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMGU5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLnR4dApAQCAtMCwwICsxLDE1NCBAQAorZ2l0LWNyZWRlbnRpYWwoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jcmVkZW50aWFsIC0gUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBjcmVkZW50aWFsIDxmaWxsfGFwcHJvdmV8cmVqZWN0PgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgaGFzIGFuIGludGVybmFsIGludGVyZmFjZSBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBjcmVkZW50aWFscworZnJvbSBzeXN0ZW0tc3BlY2lmaWMgaGVscGVycywgYXMgd2VsbCBhcyBwcm9tcHRpbmcgdGhlIHVzZXIgZm9yCit1c2VybmFtZXMgYW5kIHBhc3N3b3Jkcy4gVGhlIGdpdC1jcmVkZW50aWFsIGNvbW1hbmQgZXhwb3NlcyB0aGlzCitpbnRlcmZhY2UgdG8gc2NyaXB0cyB3aGljaCBtYXkgd2FudCB0byByZXRyaWV2ZSwgc3RvcmUsIG9yIHByb21wdCBmb3IKK2NyZWRlbnRpYWxzIGluIHRoZSBzYW1lIG1hbm5lciBhcyBnaXQuIFRoZSBkZXNpZ24gb2YgdGhpcyBzY3JpcHRhYmxlCitpbnRlcmZhY2UgbW9kZWxzIHRoZSBpbnRlcm5hbCBDIEFQSTsgc2VlCitsaW5rOnRlY2huaWNhbC9hcGktY3JlZGVudGlhbHMudHh0W3RoZSBnaXQgY3JlZGVudGlhbCBBUEldIGZvciBtb3JlCitiYWNrZ3JvdW5kIG9uIHRoZSBjb25jZXB0cy4KKworZ2l0LWNyZWRlbnRpYWwgdGFrZXMgYW4gImFjdGlvbiIgb3B0aW9uIG9uIHRoZSBjb21tYW5kLWxpbmUgKG9uZSBvZgorYGZpbGxgLCBgYXBwcm92ZWAsIG9yIGByZWplY3RgKSBhbmQgcmVhZHMgYSBjcmVkZW50aWFsIGRlc2NyaXB0aW9uCitvbiBzdGRpbiAoc2VlIDw8SU9GTVQsSU5QVVQvT1VUUFVUIEZPUk1BVD4+KS4KKworSWYgdGhlIGFjdGlvbiBpcyBgZmlsbGAsIGdpdC1jcmVkZW50aWFsIHdpbGwgYXR0ZW1wdCB0byBhZGQgInVzZXJuYW1lIgorYW5kICJwYXNzd29yZCIgYXR0cmlidXRlcyB0byB0aGUgZGVzY3JpcHRpb24gYnkgcmVhZGluZyBjb25maWcgZmlsZXMsCitieSBjb250YWN0aW5nIGFueSBjb25maWd1cmVkIGNyZWRlbnRpYWwgaGVscGVycywgb3IgYnkgcHJvbXB0aW5nIHRoZQordXNlci4gVGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhdHRyaWJ1dGVzIG9mIHRoZSBjcmVkZW50aWFsCitkZXNjcmlwdGlvbiBhcmUgdGhlbiBwcmludGVkIHRvIHN0ZG91dCB0b2dldGhlciB3aXRoIHRoZSBhdHRyaWJ1dGVzCithbHJlYWR5IHByb3ZpZGVkLgorCitJZiB0aGUgYWN0aW9uIGlzIGBhcHByb3ZlYCwgZ2l0LWNyZWRlbnRpYWwgd2lsbCBzZW5kIHRoZSBkZXNjcmlwdGlvbgordG8gYW55IGNvbmZpZ3VyZWQgY3JlZGVudGlhbCBoZWxwZXJzLCB3aGljaCBtYXkgc3RvcmUgdGhlIGNyZWRlbnRpYWwKK2ZvciBsYXRlciB1c2UuCisKK0lmIHRoZSBhY3Rpb24gaXMgYHJlamVjdGAsIGdpdC1jcmVkZW50aWFsIHdpbGwgc2VuZCB0aGUgZGVzY3JpcHRpb24gdG8KK2FueSBjb25maWd1cmVkIGNyZWRlbnRpYWwgaGVscGVycywgd2hpY2ggbWF5IGVyYXNlIGFueSBzdG9yZWQKK2NyZWRlbnRpYWwgbWF0Y2hpbmcgdGhlIGRlc2NyaXB0aW9uLgorCitJZiB0aGUgYWN0aW9uIGlzIGBhcHByb3ZlYCBvciBgcmVqZWN0YCwgbm8gb3V0cHV0IHNob3VsZCBiZSBlbWl0dGVkLgorCitUWVBJQ0FMIFVTRSBPRiBHSVQgQ1JFREVOVElBTAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gYXBwbGljYXRpb24gdXNpbmcgZ2l0LWNyZWRlbnRpYWwgd2lsbCB0eXBpY2FsbHkgdXNlIGBnaXQKK2NyZWRlbnRpYWxgIGZvbGxvd2luZyB0aGVzZSBzdGVwczoKKworICAxLiBHZW5lcmF0ZSBhIGNyZWRlbnRpYWwgZGVzY3JpcHRpb24gYmFzZWQgb24gdGhlIGNvbnRleHQuCisrCitGb3IgZXhhbXBsZSwgaWYgd2Ugd2FudCBhIHBhc3N3b3JkIGZvcgorYGh0dHBzOi8vZXhhbXBsZS5jb20vZm9vLmdpdGAsIHdlIG1pZ2h0IGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcKK2NyZWRlbnRpYWwgZGVzY3JpcHRpb24gKGRvbid0IGZvcmdldCB0aGUgYmxhbmsgbGluZSBhdCB0aGUgZW5kOyBpdAordGVsbHMgYGdpdCBjcmVkZW50aWFsYCB0aGF0IHRoZSBhcHBsaWNhdGlvbiBmaW5pc2hlZCBmZWVkaW5nIGFsbCB0aGUKK2luZm9tYXRpb24gaXQgaGFzKToKKworCSBwcm90b2NvbD1odHRwcworCSBob3N0PWV4YW1wbGUuY29tCisJIHBhdGg9Zm9vLmdpdAorCisgIDIuIEFzayBnaXQtY3JlZGVudGlhbCB0byBnaXZlIHVzIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZvciB0aGlzCisgICAgIGRlc2NyaXB0aW9uLiBUaGlzIGlzIGRvbmUgYnkgcnVubmluZyBgZ2l0IGNyZWRlbnRpYWwgZmlsbGAsCisgICAgIGZlZWRpbmcgdGhlIGRlc2NyaXB0aW9uIGZyb20gc3RlcCAoMSkgdG8gaXRzIHN0YW5kYXJkIGlucHV0LiBUaGUgY29tcGxldGUKKyAgICAgY3JlZGVudGlhbCBkZXNjcmlwdGlvbiAoaW5jbHVkaW5nIHRoZSBjcmVkZW50aWFsIHBlciBzZSwgaS5lLiB0aGUKKyAgICAgbG9naW4gYW5kIHBhc3N3b3JkKSB3aWxsIGJlIHByb2R1Y2VkIG9uIHN0YW5kYXJkIG91dHB1dCwgbGlrZToKKworCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWJvYgorCXBhc3N3b3JkPXNlY3IzdAorKworSW4gbW9zdCBjYXNlcywgdGhpcyBtZWFucyB0aGUgYXR0cmlidXRlcyBnaXZlbiBpbiB0aGUgaW5wdXQgd2lsbCBiZQorcmVwZWF0ZWQgaW4gdGhlIG91dHB1dCwgYnV0IGdpdCBtYXkgYWxzbyBtb2RpZnkgdGhlIGNyZWRlbnRpYWwKK2Rlc2NyaXB0aW9uLCBmb3IgZXhhbXBsZSBieSByZW1vdmluZyB0aGUgYHBhdGhgIGF0dHJpYnV0ZSB3aGVuIHRoZQorcHJvdG9jb2wgaXMgSFRUUChzKSBhbmQgYGNyZWRlbnRpYWwudXNlSHR0cFBhdGhgIGlzIGZhbHNlLgorKworSWYgdGhlIGBnaXQgY3JlZGVudGlhbGAga25ldyBhYm91dCB0aGUgcGFzc3dvcmQsIHRoaXMgc3RlcCBtYXkKK25vdCBoYXZlIGludm9sdmVkIHRoZSB1c2VyIGFjdHVhbGx5IHR5cGluZyB0aGlzIHBhc3N3b3JkICh0aGUKK3VzZXIgbWF5IGhhdmUgdHlwZWQgYSBwYXNzd29yZCB0byB1bmxvY2sgdGhlIGtleWNoYWluIGluc3RlYWQsCitvciBubyB1c2VyIGludGVyYWN0aW9uIHdhcyBkb25lIGlmIHRoZSBrZXljaGFpbiB3YXMgYWxyZWFkeQordW5sb2NrZWQpIGJlZm9yZSBpdCByZXR1cm5lZCBgcGFzc3dvcmQ9c2VjcjN0YC4KKworICAzLiBVc2UgdGhlIGNyZWRlbnRpYWwgKGUuZy4sIGFjY2VzcyB0aGUgVVJMIHdpdGggdGhlIHVzZXJuYW1lIGFuZAorICAgICBwYXNzd29yZCBmcm9tIHN0ZXAgKDIpKSwgYW5kIHNlZSBpZiBpdCdzIGFjY2VwdGVkLgorCisgIDQuIFJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSBwYXNzd29yZC4gSWYgdGhlCisgICAgIGNyZWRlbnRpYWwgYWxsb3dlZCB0aGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSwgdGhlbgorICAgICBpdCBjYW4gYmUgbWFya2VkIHdpdGggYW4gImFwcHJvdmUiIGFjdGlvbiB0byB0ZWxsIGBnaXQKKyAgICAgY3JlZGVudGlhbGAgdG8gcmV1c2UgaXQgaW4gaXRzIG5leHQgaW52b2NhdGlvbi4gSWYgdGhlIGNyZWRlbnRpYWwKKyAgICAgd2FzIHJlamVjdGVkIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB1c2UgdGhlICJyZWplY3QiIGFjdGlvbiBzbworICAgICB0aGF0IGBnaXQgY3JlZGVudGlhbGAgd2lsbCBhc2sgZm9yIGEgbmV3IHBhc3N3b3JkIGluIGl0cyBuZXh0CisgICAgIGludm9jYXRpb24uIEluIGVpdGhlciBjYXNlLCBgZ2l0IGNyZWRlbnRpYWxgIHNob3VsZCBiZSBmZWQgd2l0aAorICAgICB0aGUgY3JlZGVudGlhbCBkZXNjcmlwdGlvbiBvYnRhaW5lZCBmcm9tIHN0ZXAgKDIpICh3aGljaCBhbHNvCisgICAgIGNvbnRhaW4gdGhlIG9uZXMgcHJvdmlkZWQgaW4gc3RlcCAoMSkpLgorCitbW0lPRk1UXV0KK0lOUFVUL09VVFBVVCBGT1JNQVQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGdpdCBjcmVkZW50aWFsYCByZWFkcyBhbmQvb3Igd3JpdGVzIChkZXBlbmRpbmcgb24gdGhlIGFjdGlvbiB1c2VkKQorY3JlZGVudGlhbCBpbmZvcm1hdGlvbiBpbiBpdHMgc3RhbmRhcmQgaW5wdXQvb3V0cHV0LiBUaGlzIGluZm9ybWF0aW9uCitjYW4gY29ycmVzcG9uZCBlaXRoZXIgdG8ga2V5cyBmb3Igd2hpY2ggYGdpdCBjcmVkZW50aWFsYCB3aWxsIG9idGFpbgordGhlIGxvZ2luL3Bhc3N3b3JkIGluZm9ybWF0aW9uIChlLmcuIGhvc3QsIHByb3RvY29sLCBwYXRoKSwgb3IgdG8gdGhlCithY3R1YWwgY3JlZGVudGlhbCBkYXRhIHRvIGJlIG9idGFpbmVkIChsb2dpbi9wYXNzd29yZCkuCisKK1RoZSBjcmVkZW50aWFsIGlzIHNwbGl0IGludG8gYSBzZXQgb2YgbmFtZWQgYXR0cmlidXRlcywgd2l0aCBvbmUKK2F0dHJpYnV0ZSBwZXIgbGluZS4gRWFjaCBhdHRyaWJ1dGUgaXMKK3NwZWNpZmllZCBieSBhIGtleS12YWx1ZSBwYWlyLCBzZXBhcmF0ZWQgYnkgYW4gYD1gIChlcXVhbHMpIHNpZ24sCitmb2xsb3dlZCBieSBhIG5ld2xpbmUuIFRoZSBrZXkgbWF5IGNvbnRhaW4gYW55IGJ5dGVzIGV4Y2VwdCBgPWAsCituZXdsaW5lLCBvciBOVUwuIFRoZSB2YWx1ZSBtYXkgY29udGFpbiBhbnkgYnl0ZXMgZXhjZXB0IG5ld2xpbmUgb3IgTlVMLgorSW4gYm90aCBjYXNlcywgYWxsIGJ5dGVzIGFyZSB0cmVhdGVkIGFzLWlzIChpLmUuLCB0aGVyZSBpcyBubyBxdW90aW5nLAorYW5kIG9uZSBjYW5ub3QgdHJhbnNtaXQgYSB2YWx1ZSB3aXRoIG5ld2xpbmUgb3IgTlVMIGluIGl0KS4gVGhlIGxpc3Qgb2YKK2F0dHJpYnV0ZXMgaXMgdGVybWluYXRlZCBieSBhIGJsYW5rIGxpbmUgb3IgZW5kLW9mLWZpbGUuCitHaXQgdW5kZXJzdGFuZHMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorCitgcHJvdG9jb2xgOjoKKworCVRoZSBwcm90b2NvbCBvdmVyIHdoaWNoIHRoZSBjcmVkZW50aWFsIHdpbGwgYmUgdXNlZCAoZS5nLiwKKwlgaHR0cHNgKS4KKworYGhvc3RgOjoKKworCVRoZSByZW1vdGUgaG9zdG5hbWUgZm9yIGEgbmV0d29yayBjcmVkZW50aWFsLgorCitgcGF0aGA6OgorCisJVGhlIHBhdGggd2l0aCB3aGljaCB0aGUgY3JlZGVudGlhbCB3aWxsIGJlIHVzZWQuIEUuZy4sIGZvcgorCWFjY2Vzc2luZyBhIHJlbW90ZSBodHRwcyByZXBvc2l0b3J5LCB0aGlzIHdpbGwgYmUgdGhlCisJcmVwb3NpdG9yeSdzIHBhdGggb24gdGhlIHNlcnZlci4KKworYHVzZXJuYW1lYDo6CisKKwlUaGUgY3JlZGVudGlhbCdzIHVzZXJuYW1lLCBpZiB3ZSBhbHJlYWR5IGhhdmUgb25lIChlLmcuLCBmcm9tIGEKKwlVUkwsIGZyb20gdGhlIHVzZXIsIG9yIGZyb20gYSBwcmV2aW91c2x5IHJ1biBoZWxwZXIpLgorCitgcGFzc3dvcmRgOjoKKworCVRoZSBjcmVkZW50aWFsJ3MgcGFzc3dvcmQsIGlmIHdlIGFyZSBhc2tpbmcgaXQgdG8gYmUgc3RvcmVkLgorCitgdXJsYDo6CisKKwlXaGVuIHRoaXMgc3BlY2lhbCBhdHRyaWJ1dGUgaXMgcmVhZCBieSBgZ2l0IGNyZWRlbnRpYWxgLCB0aGUKKwl2YWx1ZSBpcyBwYXJzZWQgYXMgYSBVUkwgYW5kIHRyZWF0ZWQgYXMgaWYgaXRzIGNvbnN0aXR1ZW50IHBhcnRzCisJd2VyZSByZWFkIChlLmcuLCBgdXJsPWh0dHBzOi8vZXhhbXBsZS5jb21gIHdvdWxkIGJlaGF2ZSBhcyBpZgorCWBwcm90b2NvbD1odHRwc2AgYW5kIGBob3N0PWV4YW1wbGUuY29tYCBoYWQgYmVlbiBwcm92aWRlZCkuIFRoaXMKKwljYW4gaGVscCBjYWxsZXJzIGF2b2lkIHBhcnNpbmcgVVJMcyB0aGVtc2VsdmVzLiAgTm90ZSB0aGF0IGFueQorCWNvbXBvbmVudHMgd2hpY2ggYXJlIG1pc3NpbmcgZnJvbSB0aGUgVVJMIChlLmcuLCB0aGVyZSBpcyBubworCXVzZXJuYW1lIGluIHRoZSBleGFtcGxlIGFib3ZlKSB3aWxsIGJlIHNldCB0byBlbXB0eTsgaWYgeW91IHdhbnQKKwl0byBwcm92aWRlIGEgVVJMIGFuZCBvdmVycmlkZSBzb21lIGF0dHJpYnV0ZXMsIHByb3ZpZGUgdGhlIFVSTAorCWF0dHJpYnV0ZSBmaXJzdCwgZm9sbG93ZWQgYnkgYW55IG92ZXJyaWRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNleHBvcnRjb21taXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNzljZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNleHBvcnRjb21taXQudHh0CkBAIC0wLDAgKzEsMTE4IEBACitnaXQtY3ZzZXhwb3J0Y29tbWl0KDEpCis9PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jdnNleHBvcnRjb21taXQgLSBFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGN2c2V4cG9ydGNvbW1pdCcgWy1oXSBbLXVdIFstdl0gWy1jXSBbLVBdIFstcF0gWy1hXSBbLWQgY3Zzcm9vdF0KKwlbLXcgY3Zzd29ya2Rpcl0gWy1XXSBbLWZdIFstbSBtc2dwcmVmaXhdIFtQQVJFTlRDT01NSVRdIENPTU1JVElECisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitFeHBvcnRzIGEgY29tbWl0IGZyb20gR0lUIHRvIGEgQ1ZTIGNoZWNrb3V0LCBtYWtpbmcgaXQgZWFzaWVyCit0byBtZXJnZSBwYXRjaGVzIGZyb20gYSBnaXQgcmVwb3NpdG9yeSBpbnRvIGEgQ1ZTIHJlcG9zaXRvcnkuCisKK1NwZWNpZnkgdGhlIG5hbWUgb2YgYSBDVlMgY2hlY2tvdXQgdXNpbmcgdGhlIC13IHN3aXRjaCBvciBleGVjdXRlIGl0Citmcm9tIHRoZSByb290IG9mIHRoZSBDVlMgd29ya2luZyBjb3B5LiBJbiB0aGUgbGF0dGVyIGNhc2UgR0lUX0RJUiBtdXN0CitiZSBkZWZpbmVkLiBTZWUgZXhhbXBsZXMgYmVsb3cuCisKK0l0IGRvZXMgaXRzIGJlc3QgdG8gZG8gdGhlIHNhZmUgdGhpbmcsIGl0IHdpbGwgY2hlY2sgdGhhdCB0aGUgZmlsZXMgYXJlCit1bmNoYW5nZWQgYW5kIHVwIHRvIGRhdGUgaW4gdGhlIENWUyBjaGVja291dCwgYW5kIGl0IHdpbGwgbm90IGF1dG9jb21taXQKK2J5IGRlZmF1bHQuCisKK1N1cHBvcnRzIGZpbGUgYWRkaXRpb25zLCByZW1vdmFscywgYW5kIGNvbW1pdHMgdGhhdCBhZmZlY3QgYmluYXJ5IGZpbGVzLgorCitJZiB0aGUgY29tbWl0IGlzIGEgbWVyZ2UgY29tbWl0LCB5b3UgbXVzdCB0ZWxsICdnaXQgY3ZzZXhwb3J0Y29tbWl0JyB3aGF0CitwYXJlbnQgdGhlIGNoYW5nZXNldCBzaG91bGQgYmUgZG9uZSBhZ2FpbnN0LgorCitPUFRJT05TCistLS0tLS0tCisKKy1jOjoKKwlDb21taXQgYXV0b21hdGljYWxseSBpZiB0aGUgcGF0Y2ggYXBwbGllZCBjbGVhbmx5LiBJdCB3aWxsIG5vdAorCWNvbW1pdCBpZiBhbnkgaHVua3MgZmFpbCB0byBhcHBseSBvciB0aGVyZSB3ZXJlIG90aGVyIHByb2JsZW1zLgorCistcDo6CisJQmUgcGVkYW50aWMgKHBhcmFub2lkKSB3aGVuIGFwcGx5aW5nIHBhdGNoZXMuIEludm9rZXMgcGF0Y2ggd2l0aAorCS0tZnV6ej0wCisKKy1hOjoKKwlBZGQgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbi4gQWRkcyBBdXRob3IgbGluZSwgYW5kIENvbW1pdHRlciAoaWYKKwlkaWZmZXJlbnQgZnJvbSBBdXRob3IpIHRvIHRoZSBtZXNzYWdlLgorCistZDo6CisJU2V0IGFuIGFsdGVybmF0aXZlIENWU1JPT1QgdG8gdXNlLiAgVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgQ1ZTCisJLWQgcGFyYW1ldGVyLiAgVXN1YWxseSB1c2VycyB3aWxsIG5vdCB3YW50IHRvIHNldCB0aGlzLCBleGNlcHQKKwlpZiB1c2luZyBDVlMgaW4gYW4gYXN5bW1ldHJpYyBmYXNoaW9uLgorCistZjo6CisJRm9yY2UgdGhlIG1lcmdlIGV2ZW4gaWYgdGhlIGZpbGVzIGFyZSBub3QgdXAgdG8gZGF0ZS4KKworLVA6OgorCUZvcmNlIHRoZSBwYXJlbnQgY29tbWl0LCBldmVuIGlmIGl0IGlzIG5vdCBhIGRpcmVjdCBwYXJlbnQuCisKKy1tOjoKKwlQcmVwZW5kIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoIHRoZSBwcm92aWRlZCBwcmVmaXguCisJVXNlZnVsIGZvciBwYXRjaCBzZXJpZXMgYW5kIHRoZSBsaWtlLgorCistdTo6CisJVXBkYXRlIGFmZmVjdGVkIGZpbGVzIGZyb20gQ1ZTIHJlcG9zaXRvcnkgYmVmb3JlIGF0dGVtcHRpbmcgZXhwb3J0LgorCistazo6CisJUmV2ZXJzZSBDVlMga2V5d29yZCBleHBhbnNpb24gKGUuZy4gJFJldmlzaW9uOiAxLjIuMy40JAorCWJlY29tZXMgJFJldmlzaW9uJCkgaW4gd29ya2luZyBDVlMgY2hlY2tvdXQgYmVmb3JlIGFwcGx5aW5nIHBhdGNoLgorCistdzo6CisJU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIENWUyBjaGVja291dCB0byB1c2UgZm9yIHRoZSBleHBvcnQuIFRoaXMKKwlvcHRpb24gZG9lcyBub3QgcmVxdWlyZSBHSVRfRElSIHRvIGJlIHNldCBiZWZvcmUgZXhlY3V0aW9uIGlmIHRoZQorCWN1cnJlbnQgZGlyZWN0b3J5IGlzIHdpdGhpbiBhIGdpdCByZXBvc2l0b3J5LiAgVGhlIGRlZmF1bHQgaXMgdGhlCisJdmFsdWUgb2YgJ2N2c2V4cG9ydGNvbW1pdC5jdnNkaXInLgorCistVzo6CisJVGVsbCBjdnNleHBvcnRjb21taXQgdGhhdCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBub3Qgb25seQorCWEgR2l0IGNoZWNrb3V0LCBidXQgYWxzbyB0aGUgQ1ZTIGNoZWNrb3V0LiAgVGhlcmVmb3JlLCBHaXQgd2lsbAorCXJlc2V0IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgcGFyZW50IGNvbW1pdCBiZWZvcmUgcHJvY2VlZGluZy4KKworLXY6OgorCVZlcmJvc2UuCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK2N2c2V4cG9ydGNvbW1pdC5jdnNkaXI6OgorCVRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBDVlMgY2hlY2tvdXQgdG8gdXNlIGZvciB0aGUgZXhwb3J0LgorCitFWEFNUExFUworLS0tLS0tLS0KKworTWVyZ2Ugb25lIHBhdGNoIGludG8gQ1ZTOjoKKysKKy0tLS0tLS0tLS0tLQorJCBleHBvcnQgR0lUX0RJUj1+L3Byb2plY3QvLmdpdAorJCBjZCB+L3Byb2plY3RfY3ZzX2NoZWNrb3V0CiskIGdpdCBjdnNleHBvcnRjb21taXQgLXYgPGNvbW1pdC1zaGExPgorJCBjdnMgY29tbWl0IC1GIC5tc2cgPGZpbGVzPgorLS0tLS0tLS0tLS0tCisKK01lcmdlIG9uZSBwYXRjaCBpbnRvIENWUyAoLWMgYW5kIC13IG9wdGlvbnMpLiBUaGUgd29ya2luZyBkaXJlY3RvcnkgaXMgd2l0aGluIHRoZSBHaXQgUmVwbzo6CisrCistLS0tLS0tLS0tLS0KKwkkIGdpdCBjdnNleHBvcnRjb21taXQgLXYgLWMgLXcgfi9wcm9qZWN0X2N2c19jaGVja291dCA8Y29tbWl0LXNoYTE+CistLS0tLS0tLS0tLS0KKworTWVyZ2UgcGVuZGluZyBwYXRjaGVzIGludG8gQ1ZTIGF1dG9tYXRpY2FsbHkgLS0gb25seSBpZiB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nOjoKKysKKy0tLS0tLS0tLS0tLQorJCBleHBvcnQgR0lUX0RJUj1+L3Byb2plY3QvLmdpdAorJCBjZCB+L3Byb2plY3RfY3ZzX2NoZWNrb3V0CiskIGdpdCBjaGVycnkgY3ZzaGVhZCBteWhlYWQgfCBzZWQgLW4gJ3MvXisgLy9wJyB8IHhhcmdzIC1sMSBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jIC1wIC12CistLS0tLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Njk1YWIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dApAQCAtMCwwICsxLDIyMiBAQAorZ2l0LWN2c2ltcG9ydCgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY3ZzaW1wb3J0IC0gU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY3ZzaW1wb3J0JyBbLW8gPGJyYW5jaC1mb3ItSEVBRD5dIFstaF0gWy12XSBbLWQgPENWU1JPT1Q+XQorCSAgICAgIFstQSA8YXV0aG9yLWNvbnYtZmlsZT5dIFstcCA8b3B0aW9ucy1mb3ItY3ZzcHM+XSBbLVAgPGZpbGU+XQorCSAgICAgIFstQyA8Z2l0X3JlcG9zaXRvcnk+XSBbLXogPGZ1eno+XSBbLWldIFsta10gWy11XSBbLXMgPHN1YnN0Pl0KKwkgICAgICBbLWFdIFstbV0gWy1NIDxyZWdleD5dIFstUyA8cmVnZXg+XSBbLUwgPGNvbW1pdGxpbWl0Pl0KKwkgICAgICBbLXIgPHJlbW90ZT5dIFstUl0gWzxDVlNfbW9kdWxlPl0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ltcG9ydHMgYSBDVlMgcmVwb3NpdG9yeSBpbnRvIGdpdC4gSXQgd2lsbCBlaXRoZXIgY3JlYXRlIGEgbmV3CityZXBvc2l0b3J5LCBvciBpbmNyZW1lbnRhbGx5IGltcG9ydCBpbnRvIGFuIGV4aXN0aW5nIG9uZS4KKworU3BsaXR0aW5nIHRoZSBDVlMgbG9nIGludG8gcGF0Y2ggc2V0cyBpcyBkb25lIGJ5ICdjdnNwcycuCitBdCBsZWFzdCB2ZXJzaW9uIDIuMSBpcyByZXF1aXJlZC4KKworKldBUk5JTkc6KiBmb3IgY2VydGFpbiBzaXR1YXRpb25zIHRoZSBpbXBvcnQgbGVhZHMgdG8gaW5jb3JyZWN0IHJlc3VsdHMuCitQbGVhc2Ugc2VlIHRoZSBzZWN0aW9uIDw8aXNzdWVzLElTU1VFUz4+IGZvciBmdXJ0aGVyIHJlZmVyZW5jZS4KKworWW91IHNob3VsZCAqbmV2ZXIqIGRvIGFueSB3b3JrIG9mIHlvdXIgb3duIG9uIHRoZSBicmFuY2hlcyB0aGF0IGFyZQorY3JlYXRlZCBieSAnZ2l0IGN2c2ltcG9ydCcuICBCeSBkZWZhdWx0IGluaXRpYWwgaW1wb3J0IHdpbGwgY3JlYXRlIGFuZCBwb3B1bGF0ZSBhCisibWFzdGVyIiBicmFuY2ggZnJvbSB0aGUgQ1ZTIHJlcG9zaXRvcnkncyBtYWluIGJyYW5jaCB3aGljaCB5b3UncmUgZnJlZQordG8gd29yayB3aXRoOyBhZnRlciB0aGF0LCB5b3UgbmVlZCB0byAnZ2l0IG1lcmdlJyBpbmNyZW1lbnRhbCBpbXBvcnRzLCBvcgorYW55IENWUyBicmFuY2hlcywgeW91cnNlbGYuICBJdCBpcyBhZHZpc2FibGUgdG8gc3BlY2lmeSBhIG5hbWVkIHJlbW90ZSB2aWEKKy1yIHRvIHNlcGFyYXRlIGFuZCBwcm90ZWN0IHRoZSBpbmNvbWluZyBicmFuY2hlcy4KKworSWYgeW91IGludGVuZCB0byBzZXQgdXAgYSBzaGFyZWQgcHVibGljIHJlcG9zaXRvcnkgdGhhdCBhbGwgZGV2ZWxvcGVycyBjYW4KK3JlYWQvd3JpdGUsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0sIHRoZW4geW91Citwcm9iYWJseSB3YW50IHRvIG1ha2UgYSBiYXJlIGNsb25lIG9mIHRoZSBpbXBvcnRlZCByZXBvc2l0b3J5LAorYW5kIHVzZSB0aGUgY2xvbmUgYXMgdGhlIHNoYXJlZCByZXBvc2l0b3J5LgorU2VlIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XS4KKworCitPUFRJT05TCistLS0tLS0tCistdjo6CisJVmVyYm9zaXR5OiBsZXQgJ2N2c2ltcG9ydCcgcmVwb3J0IHdoYXQgaXQgaXMgZG9pbmcuCisKKy1kIDxDVlNST09UPjo6CisJVGhlIHJvb3Qgb2YgdGhlIENWUyBhcmNoaXZlLiBNYXkgYmUgbG9jYWwgKGEgc2ltcGxlIHBhdGgpIG9yIHJlbW90ZTsKKwljdXJyZW50bHksIG9ubHkgdGhlIDpsb2NhbDosIDpleHQ6IGFuZCA6cHNlcnZlcjogYWNjZXNzIG1ldGhvZHMKKwlhcmUgc3VwcG9ydGVkLiBJZiBub3QgZ2l2ZW4sICdnaXQgY3ZzaW1wb3J0JyB3aWxsIHRyeSB0byByZWFkIGl0CisJZnJvbSBgQ1ZTL1Jvb3RgLiBJZiBubyBzdWNoIGZpbGUgZXhpc3RzLCBpdCBjaGVja3MgZm9yIHRoZQorCWBDVlNST09UYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworPENWU19tb2R1bGU+OjoKKwlUaGUgQ1ZTIG1vZHVsZSB5b3Ugd2FudCB0byBpbXBvcnQuIFJlbGF0aXZlIHRvIDxDVlNST09UPi4KKwlJZiBub3QgZ2l2ZW4sICdnaXQgY3ZzaW1wb3J0JyB0cmllcyB0byByZWFkIGl0IGZyb20KKwlgQ1ZTL1JlcG9zaXRvcnlgLgorCistQyA8dGFyZ2V0LWRpcj46OgorICAgICAgICBUaGUgZ2l0IHJlcG9zaXRvcnkgdG8gaW1wb3J0IHRvLiAgSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0CisgICAgICAgIGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworLXIgPHJlbW90ZT46OgorCVRoZSBnaXQgcmVtb3RlIHRvIGltcG9ydCB0aGlzIENWUyByZXBvc2l0b3J5IGludG8uCisJTW92ZXMgYWxsIENWUyBicmFuY2hlcyBpbnRvIHJlbW90ZXMvPHJlbW90ZT4vPGJyYW5jaD4KKwlha2luIHRvIHRoZSB3YXkgJ2dpdCBjbG9uZScgdXNlcyAnb3JpZ2luJyBieSBkZWZhdWx0LgorCistbyA8YnJhbmNoLWZvci1IRUFEPjo6CisJV2hlbiBubyByZW1vdGUgaXMgc3BlY2lmaWVkICh2aWEgLXIpIHRoZSAnSEVBRCcgYnJhbmNoCisJZnJvbSBDVlMgaXMgaW1wb3J0ZWQgdG8gdGhlICdvcmlnaW4nIGJyYW5jaCB3aXRoaW4gdGhlIGdpdAorCXJlcG9zaXRvcnksIGFzICdIRUFEJyBhbHJlYWR5IGhhcyBhIHNwZWNpYWwgbWVhbmluZyBmb3IgZ2l0LgorCVdoZW4gYSByZW1vdGUgaXMgc3BlY2lmaWVkIHRoZSAnSEVBRCcgYnJhbmNoIGlzIG5hbWVkCisJcmVtb3Rlcy88cmVtb3RlPi9tYXN0ZXIgbWlycm9yaW5nICdnaXQgY2xvbmUnIGJlaGF2aW91ci4KKwlVc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gaW1wb3J0IGludG8gYSBkaWZmZXJlbnQKKwlicmFuY2guCisrCitVc2UgJy1vIG1hc3RlcicgZm9yIGNvbnRpbnVpbmcgYW4gaW1wb3J0IHRoYXQgd2FzIGluaXRpYWxseSBkb25lIGJ5Cit0aGUgb2xkIGN2czJnaXQgdG9vbC4KKworLWk6OgorCUltcG9ydC1vbmx5OiBkb24ndCBwZXJmb3JtIGEgY2hlY2tvdXQgYWZ0ZXIgaW1wb3J0aW5nLiAgVGhpcyBvcHRpb24KKwllbnN1cmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggcmVtYWluIHVudG91Y2hlZCBhbmQgd2lsbAorCW5vdCBjcmVhdGUgdGhlbSBpZiB0aGV5IGRvIG5vdCBleGlzdC4KKworLWs6OgorCUtpbGwga2V5d29yZHM6IHdpbGwgZXh0cmFjdCBmaWxlcyB3aXRoICcta2snIGZyb20gdGhlIENWUyBhcmNoaXZlCisJdG8gYXZvaWQgbm9pc3kgY2hhbmdlc2V0cy4gSGlnaGx5IHJlY29tbWVuZGVkLCBidXQgb2ZmIGJ5IGRlZmF1bHQKKwl0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggZWFybHkgaW1wb3J0ZWQgdHJlZXMuCisKKy11OjoKKwlDb252ZXJ0IHVuZGVyc2NvcmVzIGluIHRhZyBhbmQgYnJhbmNoIG5hbWVzIHRvIGRvdHMuCisKKy1zIDxzdWJzdD46OgorCVN1YnN0aXR1dGUgdGhlIGNoYXJhY3RlciAiLyIgaW4gYnJhbmNoIG5hbWVzIHdpdGggPHN1YnN0PgorCistcCA8b3B0aW9ucy1mb3ItY3ZzcHM+OjoKKwlBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGN2c3BzLgorCVRoZSBvcHRpb25zICctdScgYW5kICctQScgYXJlIGltcGxpY2l0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4KKysKK0lmIHlvdSBuZWVkIHRvIHBhc3MgbXVsdGlwbGUgb3B0aW9ucywgc2VwYXJhdGUgdGhlbSB3aXRoIGEgY29tbWEuCisKKy16IDxmdXp6Pjo6CisJUGFzcyB0aGUgdGltZXN0YW1wIGZ1enogZmFjdG9yIHRvIGN2c3BzLCBpbiBzZWNvbmRzLiBJZiB1bnNldCwKKwljdnNwcyBkZWZhdWx0cyB0byAzMDBzLgorCistUCA8Y3ZzcHMtb3V0cHV0LWZpbGU+OjoKKwlJbnN0ZWFkIG9mIGNhbGxpbmcgY3ZzcHMsIHJlYWQgdGhlIHByb3ZpZGVkIGN2c3BzIG91dHB1dCBmaWxlLiBVc2VmdWwKKwlmb3IgZGVidWdnaW5nIG9yIHdoZW4gY3ZzcHMgaXMgYmVpbmcgaGFuZGxlZCBvdXRzaWRlIGN2c2ltcG9ydC4KKworLW06OgorCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgb3B0aW9uCisJd2lsbCBlbmFibGUgZGVmYXVsdCByZWdleGVzIHRoYXQgdHJ5IHRvIGNhcHR1cmUgdGhlIHNvdXJjZQorCWJyYW5jaCBuYW1lIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlLgorCistTSA8cmVnZXg+OjoKKwlBdHRlbXB0IHRvIGRldGVjdCBtZXJnZXMgYmFzZWQgb24gdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGggYSBjdXN0b20KKwlyZWdleC4gSXQgY2FuIGJlIHVzZWQgd2l0aCAnLW0nIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCByZWdleGVzCisJYXMgd2VsbC4gWW91IG11c3QgZXNjYXBlIGZvcndhcmQgc2xhc2hlcy4KKysKK1RoZSByZWdleCBtdXN0IGNhcHR1cmUgdGhlIHNvdXJjZSBicmFuY2ggbmFtZSBpbiAkMS4KKysKK1RoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHNldmVyYWwgdGltZXMgdG8gcHJvdmlkZSBzZXZlcmFsIGRldGVjdGlvbiByZWdleGVzLgorCistUyA8cmVnZXg+OjoKKwlTa2lwIHBhdGhzIG1hdGNoaW5nIHRoZSByZWdleC4KKworLWE6OgorCUltcG9ydCBhbGwgY29tbWl0cywgaW5jbHVkaW5nIHJlY2VudCBvbmVzLiBjdnNpbXBvcnQgYnkgZGVmYXVsdAorCXNraXBzIGNvbW1pdHMgdGhhdCBoYXZlIGEgdGltZXN0YW1wIGxlc3MgdGhhbiAxMCBtaW51dGVzIGFnby4KKworLUwgPGxpbWl0Pjo6CisJTGltaXQgdGhlIG51bWJlciBvZiBjb21taXRzIGltcG9ydGVkLiBXb3JrYXJvdW5kIGZvciBjYXNlcyB3aGVyZQorCWN2c2ltcG9ydCBsZWFrcyBtZW1vcnkuCisKKy1BIDxhdXRob3ItY29udi1maWxlPjo6CisJQ1ZTIGJ5IGRlZmF1bHQgdXNlcyB0aGUgVW5peCB1c2VybmFtZSB3aGVuIHdyaXRpbmcgaXRzCisJY29tbWl0IGxvZ3MuIFVzaW5nIHRoaXMgb3B0aW9uIGFuZCBhbiBhdXRob3ItY29udi1maWxlCisJaW4gdGhpcyBmb3JtYXQKKysKKy0tLS0tLS0tLQorCWV4b249QW5kcmVhcyBFcmljc3NvbiA8YWVAb3A1LnNlPgorCXNwYXduPVNpbW9uIFBhd24gPHNwYXduQGZyb2ctcG9uZC5vcmc+CisKKy0tLS0tLS0tLQorKworJ2dpdCBjdnNpbXBvcnQnIHdpbGwgbWFrZSBpdCBhcHBlYXIgYXMgdGhvc2UgYXV0aG9ycyBoYWQKK3RoZWlyIEdJVF9BVVRIT1JfTkFNRSBhbmQgR0lUX0FVVEhPUl9FTUFJTCBzZXQgcHJvcGVybHkKK2FsbCBhbG9uZy4KKysKK0ZvciBjb252ZW5pZW5jZSwgdGhpcyBkYXRhIGlzIHNhdmVkIHRvIGAkR0lUX0RJUi9jdnMtYXV0aG9yc2AKK2VhY2ggdGltZSB0aGUgJy1BJyBvcHRpb24gaXMgcHJvdmlkZWQgYW5kIHJlYWQgZnJvbSB0aGF0IHNhbWUKK2ZpbGUgZWFjaCB0aW1lICdnaXQgY3ZzaW1wb3J0JyBpcyBydW4uCisrCitJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgZmVhdHVyZSBpZiB5b3UgaW50ZW5kIHRvCitleHBvcnQgY2hhbmdlcyBiYWNrIHRvIENWUyBhZ2FpbiBsYXRlciB3aXRoCisnZ2l0IGN2c2V4cG9ydGNvbW1pdCcuCisKKy1SOjoKKwlHZW5lcmF0ZSBhIGAkR0lUX0RJUi9jdnMtcmV2aXNpb25zYCBmaWxlIGNvbnRhaW5pbmcgYSBtYXBwaW5nIGZyb20gQ1ZTCisJcmV2aXNpb24gbnVtYmVycyB0byBuZXdseS1jcmVhdGVkIEdpdCBjb21taXQgSURzLiAgVGhlIGdlbmVyYXRlZCBmaWxlCisJd2lsbCBjb250YWluIG9uZSBsaW5lIGZvciBlYWNoIChmaWxlbmFtZSwgcmV2aXNpb24pIHBhaXIgaW1wb3J0ZWQ7CisJZWFjaCBsaW5lIHdpbGwgbG9vayBsaWtlCisrCistLS0tLS0tLS0KK3NyYy93aWRnZXQuYyAxLjEgMWQ4NjJmMTczY2RjNzMyNWI2ZmE2ZDJhZTFjZmQ2MWZkMWI1MTJiNworLS0tLS0tLS0tCisrCitUaGUgcmV2aXNpb24gZGF0YSBpcyBhcHBlbmRlZCB0byB0aGUgZmlsZSBpZiBpdCBhbHJlYWR5IGV4aXN0cywgZm9yIHVzZSB3aGVuCitkb2luZyBpbmNyZW1lbnRhbCBpbXBvcnRzLgorKworVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBDVlMgcmV2aXNpb24gbnVtYmVycyBzdG9yZWQgaW4gY29tbWl0CittZXNzYWdlcywgYnVnLXRyYWNraW5nIHN5c3RlbXMsIGVtYWlsIGFyY2hpdmVzLCBhbmQgdGhlIGxpa2UuCisKKy1oOjoKKwlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCisKK09VVFBVVAorLS0tLS0tCitJZiAnLXYnIGlzIHNwZWNpZmllZCwgdGhlIHNjcmlwdCByZXBvcnRzIHdoYXQgaXQgaXMgZG9pbmcuCisKK090aGVyd2lzZSwgc3VjY2VzcyBpcyBpbmRpY2F0ZWQgdGhlIFVuaXggd2F5LCBpLmUuIGJ5IHNpbXBseSBleGl0aW5nIHdpdGgKK2EgemVybyBleGl0IHN0YXR1cy4KKworW1tpc3N1ZXNdXQorSVNTVUVTCistLS0tLS0KK1Byb2JsZW1zIHJlbGF0ZWQgdG8gdGltZXN0YW1wczoKKworICogSWYgdGltZXN0YW1wcyBvZiBjb21taXRzIGluIHRoZSBDVlMgcmVwb3NpdG9yeSBhcmUgbm90IHN0YWJsZSBlbm91Z2gKKyAgIHRvIGJlIHVzZWQgZm9yIG9yZGVyaW5nIGNvbW1pdHMgY2hhbmdlcyBtYXkgc2hvdyB1cCBpbiB0aGUgd3JvbmcKKyAgIG9yZGVyLgorICogSWYgYW55IGZpbGVzIHdlcmUgZXZlciAiY3ZzIGltcG9ydCJlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiwgaW1wb3J0IG9mCisgICBtb3JlIHRoYW4gb25lIHZlbmRvciByZWxlYXNlKSB0aGUgSEVBRCBjb250YWlucyB0aGUgd3JvbmcgY29udGVudC4KKyAqIElmIHRoZSB0aW1lc3RhbXAgb3JkZXIgb2YgZGlmZmVyZW50IGZpbGVzIGNyb3NzIHRoZSByZXZpc2lvbiBvcmRlcgorICAgd2l0aGluIHRoZSBjb21taXQgbWF0Y2hpbmcgdGltZSB3aW5kb3cgdGhlIG9yZGVyIG9mIGNvbW1pdHMgbWF5IGJlCisgICB3cm9uZy4KKworUHJvYmxlbXMgcmVsYXRlZCB0byBicmFuY2hlczoKKworICogQnJhbmNoZXMgb24gd2hpY2ggbm8gY29tbWl0cyBoYXZlIGJlZW4gbWFkZSBhcmUgbm90IGltcG9ydGVkLgorICogQWxsIGZpbGVzIGZyb20gdGhlIGJyYW5jaGluZyBwb2ludCBhcmUgYWRkZWQgdG8gYSBicmFuY2ggZXZlbiBpZgorICAgbmV2ZXIgYWRkZWQgaW4gQ1ZTLgorICogVGhpcyBhcHBsaWVzIHRvIGZpbGVzIGFkZGVkIHRvIHRoZSBzb3VyY2UgYnJhbmNoICphZnRlciogYSBkYXVnaHRlcgorICAgYnJhbmNoIHdhcyBjcmVhdGVkOiBpZiBwcmV2aW91c2x5IG5vIGNvbW1pdCB3YXMgbWFkZSBvbiB0aGUgZGF1Z2h0ZXIKKyAgIGJyYW5jaCB0aGV5IHdpbGwgZXJyb25lb3VzbHkgYmUgYWRkZWQgdG8gdGhlIGRhdWdodGVyIGJyYW5jaCBpbiBnaXQuCisKK1Byb2JsZW1zIHJlbGF0ZWQgdG8gdGFnczoKKworKiBNdWx0aXBsZSB0YWdzIG9uIHRoZSBzYW1lIHJldmlzaW9uIGFyZSBub3QgaW1wb3J0ZWQuCisKK0lmIHlvdSBzdXNwZWN0IHRoYXQgYW55IG9mIHRoZXNlIGlzc3VlcyBtYXkgYXBwbHkgdG8gdGhlIHJlcG9zaXRvcnkgeW91Cit3YW50IHRvIGltcG9ydCBjb25zaWRlciB1c2luZyB0aGVzZSBhbHRlcm5hdGl2ZSB0b29scyB3aGljaCBwcm92ZWQgdG8gYmUKK21vcmUgc3RhYmxlIGluIHByYWN0aWNlOgorCisqIGN2czJnaXQgKHBhcnQgb2YgY3ZzMnN2biksIGBodHRwOi8vY3ZzMnN2bi50aWdyaXMub3JnYAorKiBwYXJzZWN2cywgYGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9+a2VpdGhwL3BhcnNlY3ZzYAorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZDgxNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0CkBAIC0wLDAgKzEsMzk2IEBACitnaXQtY3Zzc2VydmVyKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jdnNzZXJ2ZXIgLSBBIENWUyBzZXJ2ZXIgZW11bGF0b3IgZm9yIGdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KKworU1NIOgorCitbdmVyc2VdCitleHBvcnQgQ1ZTX1NFUlZFUj0iZ2l0IGN2c3NlcnZlciIKKydjdnMnIC1kIDpleHQ6dXNlckBzZXJ2ZXIvcGF0aC9yZXBvLmdpdCBjbyA8SEVBRF9uYW1lPgorCitwc2VydmVyICgvZXRjL2luZXRkLmNvbmYpOgorCitbdmVyc2VdCitjdnNwc2VydmVyIHN0cmVhbSB0Y3Agbm93YWl0IG5vYm9keSAvdXNyL2Jpbi9naXQtY3Zzc2VydmVyIGdpdC1jdnNzZXJ2ZXIgcHNlcnZlcgorCitVc2FnZToKKworW3ZlcnNlXQorJ2dpdC1jdnNzZXJ2ZXInIFtvcHRpb25zXSBbcHNlcnZlcnxzZXJ2ZXJdIFs8ZGlyZWN0b3J5PiAuLi5dCisKK09QVElPTlMKKy0tLS0tLS0KKworQWxsIHRoZXNlIG9wdGlvbnMgb2J2aW91c2x5IG9ubHkgbWFrZSBzZW5zZSBpZiBlbmZvcmNlZCBieSB0aGUgc2VydmVyIHNpZGUuCitUaGV5IGhhdmUgYmVlbiBpbXBsZW1lbnRlZCB0byByZXNlbWJsZSB0aGUgbGlua2dpdDpnaXQtZGFlbW9uWzFdIG9wdGlvbnMgYXMKK2Nsb3NlbHkgYXMgcG9zc2libGUuCisKKy0tYmFzZS1wYXRoIDxwYXRoPjo6CitQcmVwZW5kICdwYXRoJyB0byByZXF1ZXN0ZWQgQ1ZTUk9PVAorCistLXN0cmljdC1wYXRoczo6CitEb24ndCBhbGxvdyByZWN1cnNpbmcgaW50byBzdWJkaXJlY3RvcmllcworCistLWV4cG9ydC1hbGw6OgorRG9uJ3QgY2hlY2sgZm9yIGBnaXRjdnMuZW5hYmxlZGAgaW4gY29uZmlnLiBZb3UgYWxzbyBoYXZlIHRvIHNwZWNpZnkgYSBsaXN0CitvZiBhbGxvd2VkIGRpcmVjdG9yaWVzIChzZWUgYmVsb3cpIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzIG9wdGlvbi4KKworLVY6OgorLS12ZXJzaW9uOjoKK1ByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKworLWg6OgorLUg6OgorLS1oZWxwOjoKK1ByaW50IHVzYWdlIGluZm9ybWF0aW9uIGFuZCBleGl0CisKKzxkaXJlY3Rvcnk+OjoKK1lvdSBjYW4gc3BlY2lmeSBhIGxpc3Qgb2YgYWxsb3dlZCBkaXJlY3Rvcmllcy4gSWYgbm8gZGlyZWN0b3JpZXMKK2FyZSBnaXZlbiwgYWxsIGFyZSBhbGxvd2VkLiBUaGlzIGlzIGFuIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24sIGdpdGN2cworYWNjZXNzIHN0aWxsIG5lZWRzIHRvIGJlIGVuYWJsZWQgYnkgdGhlIGBnaXRjdnMuZW5hYmxlZGAgY29uZmlnIG9wdGlvbgordW5sZXNzICctLWV4cG9ydC1hbGwnIHdhcyBnaXZlbiwgdG9vLgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGFwcGxpY2F0aW9uIGlzIGEgQ1ZTIGVtdWxhdGlvbiBsYXllciBmb3IgZ2l0LgorCitJdCBpcyBoaWdobHkgZnVuY3Rpb25hbC4gSG93ZXZlciwgbm90IGFsbCBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCwKK2FuZCBmb3IgdGhvc2UgbWV0aG9kcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCwKK25vdCBhbGwgc3dpdGNoZXMgYXJlIGltcGxlbWVudGVkLgorCitUZXN0aW5nIGhhcyBiZWVuIGRvbmUgdXNpbmcgYm90aCB0aGUgQ0xJIENWUyBjbGllbnQsIGFuZCB0aGUgRWNsaXBzZSBDVlMKK3BsdWdpbi4gTW9zdCBmdW5jdGlvbmFsaXR5IHdvcmtzIGZpbmUgd2l0aCBib3RoIG9mIHRoZXNlIGNsaWVudHMuCisKK0xJTUlUQVRJT05TCistLS0tLS0tLS0tLQorCitDVlMgY2xpZW50cyBjYW5ub3QgdGFnLCBicmFuY2ggb3IgcGVyZm9ybSBHSVQgbWVyZ2VzLgorCisnZ2l0LWN2c3NlcnZlcicgbWFwcyBHSVQgYnJhbmNoZXMgdG8gQ1ZTIG1vZHVsZXMuIFRoaXMgaXMgdmVyeSBkaWZmZXJlbnQKK2Zyb20gd2hhdCBtb3N0IENWUyB1c2VycyB3b3VsZCBleHBlY3Qgc2luY2UgaW4gQ1ZTIG1vZHVsZXMgdXN1YWxseSByZXByZXNlbnQKK29uZSBvciBtb3JlIGRpcmVjdG9yaWVzLgorCitJTlNUQUxMQVRJT04KKy0tLS0tLS0tLS0tLQorCisxLiBJZiB5b3UgYXJlIGdvaW5nIHRvIG9mZmVyIENWUyBhY2Nlc3MgdmlhIHBzZXJ2ZXIsIGFkZCBhIGxpbmUgaW4KKyAgIC9ldGMvaW5ldGQuY29uZiBsaWtlCisrCistLQorLS0tLS0tCisgICBjdnNwc2VydmVyIHN0cmVhbSB0Y3Agbm93YWl0IG5vYm9keSBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIKKworLS0tLS0tCitOb3RlOiBTb21lIGluZXRkIHNlcnZlcnMgbGV0IHlvdSBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlCitpbmRlcGVuZGVudGx5IG9mIHRoZSB2YWx1ZSBvZiBhcmd2WzBdIChpLmUuIHRoZSBuYW1lIHRoZSBwcm9ncmFtIGFzc3VtZXMKK2l0IHdhcyBleGVjdXRlZCB3aXRoKS4gSW4gdGhpcyBjYXNlIHRoZSBjb3JyZWN0IGxpbmUgaW4gL2V0Yy9pbmV0ZC5jb25mCitsb29rcyBsaWtlCisKKy0tLS0tLQorICAgY3ZzcHNlcnZlciBzdHJlYW0gdGNwIG5vd2FpdCBub2JvZHkgL3Vzci9iaW4vZ2l0LWN2c3NlcnZlciBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIKKworLS0tLS0tCisKK09ubHkgYW5vbnltb3VzIGFjY2VzcyBpcyBwcm92aWRlZCBieSBwc2VydmUgYnkgZGVmYXVsdC4gVG8gY29tbWl0IHlvdQord2lsbCBoYXZlIHRvIGNyZWF0ZSBwc2VydmVyIGFjY291bnRzLCBzaW1wbHkgYWRkIGEgZ2l0Y3ZzLmF1dGhkYgorc2V0dGluZyBpbiB0aGUgY29uZmlnIGZpbGUgb2YgdGhlIHJlcG9zaXRvcmllcyB5b3Ugd2FudCB0aGUgY3Zzc2VydmVyCit0byBhbGxvdyB3cml0ZXMgdG8sIGZvciBleGFtcGxlOgorCistLS0tLS0KKworICAgW2dpdGN2c10KKwlhdXRoZGIgPSAvZXRjL2N2c3NlcnZlci9wYXNzd2QKKworLS0tLS0tCitUaGUgZm9ybWF0IG9mIHRoZXNlIGZpbGVzIGlzIHVzZXJuYW1lIGZvbGxvd2VkIGJ5IHRoZSBjcnlwdGVkIHBhc3N3b3JkLAorZm9yIGV4YW1wbGU6CisKKy0tLS0tLQorICAgbXl1c2VyOiQxT3l4NXI5bWRHWjIKKyAgIG15dXNlcjokMSRCQSlAJHZibk1KTUR5bTd0QTMyQWFtWHJtLi8KKy0tLS0tLQorWW91IGNhbiB1c2UgdGhlICdodHBhc3N3ZCcgZmFjaWxpdHkgdGhhdCBjb21lcyB3aXRoIEFwYWNoZSB0byBtYWtlIHRoZXNlCitmaWxlcywgYnV0IEFwYWNoZSdzIE1ENSBjcnlwdCBtZXRob2QgZGlmZmVycyBmcm9tIHRoZSBvbmUgdXNlZCBieSBtb3N0IEMKK2xpYnJhcnkncyBjcnlwdCgpIGZ1bmN0aW9uLCBzbyBkb24ndCB1c2UgdGhlIC1tIG9wdGlvbi4KKworQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHByb2R1Y2UgdGhlIHBhc3N3b3JkIHdpdGggcGVybCdzIGNyeXB0KCkgb3BlcmF0b3I6CistLS0tLQorICAgcGVybCAtZSAnbXkgKCR1c2VyLCAkcGFzcykgPSBAQVJHVjsgcHJpbnRmICIlczolc1xuIiwgJHVzZXIsIGNyeXB0KCR1c2VyLCAkcGFzcyknICRVU0VSIHBhc3N3b3JkCistLS0tLQorCitUaGVuIHByb3ZpZGUgeW91ciBwYXNzd29yZCB2aWEgdGhlIHBzZXJ2ZXIgbWV0aG9kLCBmb3IgZXhhbXBsZToKKy0tLS0tLQorICAgY3ZzIC1kOnBzZXJ2ZXI6c29tZXVzZXI6c29tZXBhc3N3b3JkIDxhdD4gc2VydmVyL3BhdGgvcmVwby5naXQgY28gPEhFQURfbmFtZT4KKy0tLS0tLQorTm8gc3BlY2lhbCBzZXR1cCBpcyBuZWVkZWQgZm9yIFNTSCBhY2Nlc3MsIG90aGVyIHRoYW4gaGF2aW5nIEdJVCB0b29scworaW4gdGhlIFBBVEguIElmIHlvdSBoYXZlIGNsaWVudHMgdGhhdCBkbyBub3QgYWNjZXB0IHRoZSBDVlNfU0VSVkVSCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgeW91IGNhbiByZW5hbWUgJ2dpdC1jdnNzZXJ2ZXInIHRvIGBjdnNgLgorCitOb3RlOiBOZXdlciBDVlMgdmVyc2lvbnMgKD49IDEuMTIuMTEpIGFsc28gc3VwcG9ydCBzcGVjaWZ5aW5nCitDVlNfU0VSVkVSIGRpcmVjdGx5IGluIENWU1JPT1QgbGlrZQorCistLS0tLS0KK2N2cyAtZCAiOmV4dDtDVlNfU0VSVkVSPWdpdCBjdnNzZXJ2ZXI6dXNlckBzZXJ2ZXIvcGF0aC9yZXBvLmdpdCIgY28gPEhFQURfbmFtZT4KKy0tLS0tLQorVGhpcyBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IGl0IHdpbGwgYmUgc2F2ZWQgaW4geW91ciAnQ1ZTL1Jvb3QnIGZpbGVzIGFuZAoreW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgYWx3YXlzIHNldHRpbmcgdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLiAgU1NIIHVzZXJzIHJlc3RyaWN0ZWQgdG8gJ2dpdC1zaGVsbCcgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdAord2l0aCBDVlNfU0VSVkVSIChhbmQgc2hvdWxkbid0KSBhcyAnZ2l0LXNoZWxsJyB1bmRlcnN0YW5kcyBgY3ZzYCB0byBtZWFuCisnZ2l0LWN2c3NlcnZlcicgYW5kIHByZXRlbmRzIHRoYXQgdGhlIG90aGVyIGVuZCBydW5zIHRoZSByZWFsICdjdnMnIGJldHRlci4KKy0tCisyLiBGb3IgZWFjaCByZXBvIHRoYXQgeW91IHdhbnQgYWNjZXNzaWJsZSBmcm9tIENWUyB5b3UgbmVlZCB0byBlZGl0IGNvbmZpZyBpbgorICAgdGhlIHJlcG8gYW5kIGFkZCB0aGUgZm9sbG93aW5nIHNlY3Rpb24uCisrCistLQorLS0tLS0tCisgICBbZ2l0Y3ZzXQorICAgICAgICBlbmFibGVkPTEKKyAgICAgICAgIyBvcHRpb25hbCBmb3IgZGVidWdnaW5nCisgICAgICAgIGxvZ2ZpbGU9L3BhdGgvdG8vbG9nZmlsZQorCistLS0tLS0KK05vdGU6IHlvdSBuZWVkIHRvIGVuc3VyZSBlYWNoIHVzZXIgdGhhdCBpcyBnb2luZyB0byBpbnZva2UgJ2dpdC1jdnNzZXJ2ZXInIGhhcword3JpdGUgYWNjZXNzIHRvIHRoZSBsb2cgZmlsZSBhbmQgdG8gdGhlIGRhdGFiYXNlIChzZWUKKzw8ZGJiYWNrZW5kLERhdGFiYXNlIEJhY2tlbmQ+Pi4gSWYgeW91IHdhbnQgdG8gb2ZmZXIgd3JpdGUgYWNjZXNzIG92ZXIKK1NTSCwgdGhlIHVzZXJzIG9mIGNvdXJzZSBhbHNvIG5lZWQgd3JpdGUgYWNjZXNzIHRvIHRoZSBnaXQgcmVwb3NpdG9yeSBpdHNlbGYuCisKK1lvdSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgZWFjaCByZXBvc2l0b3J5IGlzICJiYXJlIiAod2l0aG91dCBhIGdpdCBpbmRleAorZmlsZSkgZm9yIGBjdnMgY29tbWl0YCB0byB3b3JrLiBTZWUgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLgorCitbW2NvbmZpZ2FjY2Vzc21ldGhvZF1dCitBbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgY2FuIGFsc28gYmUgb3ZlcnJpZGRlbiBmb3IgYSBzcGVjaWZpYyBtZXRob2Qgb2YKK2FjY2Vzcy4gVmFsaWQgbWV0aG9kIG5hbWVzIGFyZSAiZXh0IiAoZm9yIFNTSCBhY2Nlc3MpIGFuZCAicHNlcnZlciIuIFRoZQorZm9sbG93aW5nIGV4YW1wbGUgY29uZmlndXJhdGlvbiB3b3VsZCBkaXNhYmxlIHBzZXJ2ZXIgYWNjZXNzIHdoaWxlIHN0aWxsCithbGxvd2luZyBhY2Nlc3Mgb3ZlciBTU0guCistLS0tLS0KKyAgIFtnaXRjdnNdCisgICAgICAgIGVuYWJsZWQ9MAorCisgICBbZ2l0Y3ZzICJleHQiXQorICAgICAgICBlbmFibGVkPTEKKy0tLS0tLQorLS0KKzMuIElmIHlvdSBkaWRuJ3Qgc3BlY2lmeSB0aGUgQ1ZTUk9PVC9DVlNfU0VSVkVSIGRpcmVjdGx5IGluIHRoZSBjaGVja291dCBjb21tYW5kLAorICAgYXV0b21hdGljYWxseSBzYXZpbmcgaXQgaW4geW91ciAnQ1ZTL1Jvb3QnIGZpbGVzLCB0aGVuIHlvdSBuZWVkIHRvIHNldCB0aGVtCisgICBleHBsaWNpdGx5IGluIHlvdXIgZW52aXJvbm1lbnQuICBDVlNST09UIHNob3VsZCBiZSBzZXQgYXMgcGVyIG5vcm1hbCwgYnV0IHRoZQorICAgZGlyZWN0b3J5IHNob3VsZCBwb2ludCBhdCB0aGUgYXBwcm9wcmlhdGUgZ2l0IHJlcG8uICBBcyBhYm92ZSwgZm9yIFNTSCBjbGllbnRzCisgICBfbm90XyByZXN0cmljdGVkIHRvICdnaXQtc2hlbGwnLCBDVlNfU0VSVkVSIHNob3VsZCBiZSBzZXQgdG8gJ2dpdC1jdnNzZXJ2ZXInLgorKworLS0KKy0tLS0tLQorICAgICBleHBvcnQgQ1ZTUk9PVD06ZXh0OnVzZXJAc2VydmVyOi92YXIvZ2l0L3Byb2plY3QuZ2l0CisgICAgIGV4cG9ydCBDVlNfU0VSVkVSPSJnaXQgY3Zzc2VydmVyIgorLS0tLS0tCistLQorNC4gRm9yIFNTSCBjbGllbnRzIHRoYXQgd2lsbCBtYWtlIGNvbW1pdHMsIG1ha2Ugc3VyZSB0aGVpciBzZXJ2ZXItc2lkZQorICAgLnNzaC9lbnZpcm9ubWVudCBmaWxlcyAob3IgLmJhc2hyYywgZXRjLiwgYWNjb3JkaW5nIHRvIHRoZWlyIHNwZWNpZmljIHNoZWxsKQorICAgZXhwb3J0IGFwcHJvcHJpYXRlIHZhbHVlcyBmb3IgR0lUX0FVVEhPUl9OQU1FLCBHSVRfQVVUSE9SX0VNQUlMLAorICAgR0lUX0NPTU1JVFRFUl9OQU1FLCBhbmQgR0lUX0NPTU1JVFRFUl9FTUFJTC4gIEZvciBTU0ggY2xpZW50cyB3aG9zZSBsb2dpbgorICAgc2hlbGwgaXMgYmFzaCwgLmJhc2hyYyBtYXkgYmUgYSByZWFzb25hYmxlIGFsdGVybmF0aXZlLgorCis1LiBDbGllbnRzIHNob3VsZCBub3cgYmUgYWJsZSB0byBjaGVjayBvdXQgdGhlIHByb2plY3QuIFVzZSB0aGUgQ1ZTICdtb2R1bGUnCisgICBuYW1lIHRvIGluZGljYXRlIHdoYXQgR0lUICdoZWFkJyB5b3Ugd2FudCB0byBjaGVjayBvdXQuICBUaGlzIGFsc28gc2V0cyB0aGUKKyAgIG5hbWUgb2YgeW91ciBuZXdseSBjaGVja2VkLW91dCBkaXJlY3RvcnksIHVubGVzcyB5b3UgdGVsbCBpdCBvdGhlcndpc2Ugd2l0aAorICAgYC1kIDxkaXJfbmFtZT5gLiAgRm9yIGV4YW1wbGUsIHRoaXMgY2hlY2tzIG91dCAnbWFzdGVyJyBicmFuY2ggdG8gdGhlCisgICBgcHJvamVjdC1tYXN0ZXJgIGRpcmVjdG9yeToKKysKKy0tLS0tLQorICAgICBjdnMgY28gLWQgcHJvamVjdC1tYXN0ZXIgbWFzdGVyCistLS0tLS0KKworW1tkYmJhY2tlbmRdXQorRGF0YWJhc2UgQmFja2VuZAorLS0tLS0tLS0tLS0tLS0tLQorCisnZ2l0LWN2c3NlcnZlcicgdXNlcyBvbmUgZGF0YWJhc2UgcGVyIGdpdCBoZWFkIChpLmUuIENWUyBtb2R1bGUpIHRvCitzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVwb3NpdG9yeSB0byBtYWludGFpbiBjb25zaXN0ZW50CitDVlMgcmV2aXNpb24gbnVtYmVycy4gVGhlIGRhdGFiYXNlIG5lZWRzIHRvIGJlCit1cGRhdGVkIChpLmUuIHdyaXR0ZW4gdG8pIGFmdGVyIGV2ZXJ5IGNvbW1pdC4KKworSWYgdGhlIGNvbW1pdCBpcyBkb25lIGRpcmVjdGx5IGJ5IHVzaW5nIGBnaXRgIChhcyBvcHBvc2VkIHRvCit1c2luZyAnZ2l0LWN2c3NlcnZlcicpIHRoZSB1cGRhdGUgd2lsbCBuZWVkIHRvIGhhcHBlbiBvbiB0aGUKK25leHQgcmVwb3NpdG9yeSBhY2Nlc3MgYnkgJ2dpdC1jdnNzZXJ2ZXInLCBpbmRlcGVuZGVudCBvZgorYWNjZXNzIG1ldGhvZCBhbmQgcmVxdWVzdGVkIG9wZXJhdGlvbi4KKworVGhhdCBtZWFucyB0aGF0IGV2ZW4gaWYgeW91IG9mZmVyIG9ubHkgcmVhZCBhY2Nlc3MgKGUuZy4gYnkgdXNpbmcKK3RoZSBwc2VydmVyIG1ldGhvZCksICdnaXQtY3Zzc2VydmVyJyBzaG91bGQgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8KK3RoZSBkYXRhYmFzZSB0byB3b3JrIHJlbGlhYmx5IChvdGhlcndpc2UgeW91IG5lZWQgdG8gbWFrZSBzdXJlCit0aGF0IHRoZSBkYXRhYmFzZSBpcyB1cC10by1kYXRlIGFueSB0aW1lICdnaXQtY3Zzc2VydmVyJyBpcyBleGVjdXRlZCkuCisKK0J5IGRlZmF1bHQgaXQgdXNlcyBTUUxpdGUgZGF0YWJhc2VzIGluIHRoZSBnaXQgZGlyZWN0b3J5LCBuYW1lZAorYGdpdGN2cy48bW9kdWxlX25hbWU+LnNxbGl0ZWAuIE5vdGUgdGhhdCB0aGUgU1FMaXRlIGJhY2tlbmQgY3JlYXRlcwordGVtcG9yYXJ5IGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgZGF0YWJhc2UgZmlsZSBvbgord3JpdGUgc28gaXQgbWlnaHQgbm90IGJlIGVub3VnaCB0byBncmFudCB0aGUgdXNlcnMgdXNpbmcKKydnaXQtY3Zzc2VydmVyJyB3cml0ZSBhY2Nlc3MgdG8gdGhlIGRhdGFiYXNlIGZpbGUgd2l0aG91dCBncmFudGluZwordGhlbSB3cml0ZSBhY2Nlc3MgdG8gdGhlIGRpcmVjdG9yeSwgdG9vLgorCitUaGUgZGF0YWJhc2UgY2FuIG5vdCBiZSByZWxpYWJseSByZWdlbmVyYXRlZCBpbiBhCitjb25zaXN0ZW50IGZvcm0gYWZ0ZXIgdGhlIGJyYW5jaCBpdCBpcyB0cmFja2luZyBoYXMgY2hhbmdlZC4KK0V4YW1wbGU6IEZvciBtZXJnZWQgYnJhbmNoZXMsICdnaXQtY3Zzc2VydmVyJyBvbmx5IHRyYWNrcworb25lIGJyYW5jaCBvZiBkZXZlbG9wbWVudCwgYW5kIGFmdGVyIGEgJ2dpdCBtZXJnZScgYW4KK2luY3JlbWVudGFsbHkgdXBkYXRlZCBkYXRhYmFzZSBtYXkgdHJhY2sgYSBkaWZmZXJlbnQgYnJhbmNoCit0aGFuIGEgZGF0YWJhc2UgcmVnZW5lcmF0ZWQgZnJvbSBzY3JhdGNoLCBjYXVzaW5nIGluY29uc2lzdGVudAorQ1ZTIHJldmlzaW9uIG51bWJlcnMuIGBnaXQtY3Zzc2VydmVyYCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hpY2gKK2JyYW5jaCBpdCB3b3VsZCBoYXZlIHBpY2tlZCBpZiBpdCBoYWQgYmVlbiBydW4gaW5jcmVtZW50YWxseQorcHJlLW1lcmdlLiBTbyBpZiB5b3UgaGF2ZSB0byBmdWxseSBvciBwYXJ0aWFsbHkgKGZyb20gb2xkCitiYWNrdXApIHJlZ2VuZXJhdGUgdGhlIGRhdGFiYXNlLCB5b3Ugc2hvdWxkIGJlIHN1c3BpY2lvdXMKK29mIHByZS1leGlzdGluZyBDVlMgc2FuZGJveGVzLgorCitZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgZGF0YWJhc2UgYmFja2VuZCB3aXRoIHRoZSBmb2xsb3dpbmcKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGVzOgorCitDb25maWd1cmluZyBkYXRhYmFzZSBiYWNrZW5kCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKydnaXQtY3Zzc2VydmVyJyB1c2VzIHRoZSBQZXJsIERCSSBtb2R1bGUuIFBsZWFzZSBhbHNvIHJlYWQKK2l0cyBkb2N1bWVudGF0aW9uIGlmIGNoYW5naW5nIHRoZXNlIHZhcmlhYmxlcywgZXNwZWNpYWxseQorYWJvdXQgYERCSS0+Y29ubmVjdCgpYC4KKworZ2l0Y3ZzLmRibmFtZTo6CisJRGF0YWJhc2UgbmFtZS4gVGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUKKwlzZWxlY3RlZCBkYXRhYmFzZSBkcml2ZXIsIGZvciBTUUxpdGUgdGhpcyBpcyBhIGZpbGVuYW1lLgorCVN1cHBvcnRzIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiAoc2VlIGJlbG93KS4gTWF5CisJbm90IGNvbnRhaW4gc2VtaWNvbG9ucyAoYDtgKS4KKwlEZWZhdWx0OiAnJUdnaXRjdnMuJW0uc3FsaXRlJworCitnaXRjdnMuZGJkcml2ZXI6OgorCVVzZWQgREJJIGRyaXZlci4gWW91IGNhbiBzcGVjaWZ5IGFueSBhdmFpbGFibGUgZHJpdmVyCisJZm9yIHRoaXMgaGVyZSwgYnV0IGl0IG1pZ2h0IG5vdCB3b3JrLiBjdnNzZXJ2ZXIgaXMgdGVzdGVkCisJd2l0aCAnREJEOjpTUUxpdGUnLCByZXBvcnRlZCB0byB3b3JrIHdpdGgKKwknREJEOjpQZycsIGFuZCByZXBvcnRlZCAqbm90KiB0byB3b3JrIHdpdGggJ0RCRDo6bXlzcWwnLgorCVBsZWFzZSByZWdhcmQgdGhpcyBhcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS4gTWF5IG5vdAorCWNvbnRhaW4gY29sb25zIChgOmApLgorCURlZmF1bHQ6ICdTUUxpdGUnCisKK2dpdGN2cy5kYnVzZXI6OgorCURhdGFiYXNlIHVzZXIuIE9ubHkgdXNlZnVsIGlmIHNldHRpbmcgYGRiZHJpdmVyYCwgc2luY2UKKwlTUUxpdGUgaGFzIG5vIGNvbmNlcHQgb2YgZGF0YWJhc2UgdXNlcnMuIFN1cHBvcnRzIHZhcmlhYmxlCisJc3Vic3RpdHV0aW9uIChzZWUgYmVsb3cpLgorCitnaXRjdnMuZGJwYXNzOjoKKwlEYXRhYmFzZSBwYXNzd29yZC4gIE9ubHkgdXNlZnVsIGlmIHNldHRpbmcgYGRiZHJpdmVyYCwgc2luY2UKKwlTUUxpdGUgaGFzIG5vIGNvbmNlcHQgb2YgZGF0YWJhc2UgcGFzc3dvcmRzLgorCitnaXRjdnMuZGJUYWJsZU5hbWVQcmVmaXg6OgorCURhdGFiYXNlIHRhYmxlIG5hbWUgcHJlZml4LiAgU3VwcG9ydHMgdmFyaWFibGUgc3Vic3RpdHV0aW9uCisJKHNlZSBiZWxvdykuICBBbnkgbm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkCisJd2l0aCB1bmRlcnNjb3Jlcy4KKworQWxsIHZhcmlhYmxlcyBjYW4gYWxzbyBiZSBzZXQgcGVyIGFjY2VzcyBtZXRob2QsIHNlZSA8PGNvbmZpZ2FjY2Vzc21ldGhvZCxhYm92ZT4+LgorCitWYXJpYWJsZSBzdWJzdGl0dXRpb24KK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorSW4gYGRiZHJpdmVyYCBhbmQgYGRidXNlcmAgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisKKyVHOjoKKwlnaXQgZGlyZWN0b3J5IG5hbWUKKyVnOjoKKwlnaXQgZGlyZWN0b3J5IG5hbWUsIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCBmb3IKKwlhbHBoYS1udW1lcmljIG9uZXMsIGAuYCwgYW5kIGAtYCBhcmUgcmVwbGFjZWQgd2l0aAorCWBfYCAodGhpcyBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHRoZSBkaXJlY3RvcnkKKwluYW1lIGluIGEgZmlsZW5hbWUgaWYgd2FudGVkKQorJW06OgorCUNWUyBtb2R1bGUvZ2l0IGhlYWQgbmFtZQorJWE6OgorCWFjY2VzcyBtZXRob2QgKG9uZSBvZiAiZXh0IiBvciAicHNlcnZlciIpCisldTo6CisJTmFtZSBvZiB0aGUgdXNlciBydW5uaW5nICdnaXQtY3Zzc2VydmVyJy4KKwlJZiBubyBuYW1lIGNhbiBiZSBkZXRlcm1pbmVkLCB0aGUKKwludW1lcmljIHVpZCBpcyB1c2VkLgorCitFTlZJUk9OTUVOVAorLS0tLS0tLS0tLS0KKworVGhlc2UgdmFyaWFibGVzIG9idmlhdGUgdGhlIG5lZWQgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zIGluIHNvbWUKK2NpcmN1bXN0YW5jZXMsIGFsbG93aW5nIGVhc2llciByZXN0cmljdGVkIHVzYWdlIHRocm91Z2ggZ2l0LXNoZWxsLgorCitHSVRfQ1ZTU0VSVkVSX0JBU0VfUEFUSCB0YWtlcyB0aGUgcGxhY2Ugb2YgdGhlIGFyZ3VtZW50IHRvIC0tYmFzZS1wYXRoLgorCitHSVRfQ1ZTU0VSVkVSX1JPT1Qgc3BlY2lmaWVzIGEgc2luZ2xlLWRpcmVjdG9yeSB3aGl0ZWxpc3QuIFRoZQorcmVwb3NpdG9yeSBtdXN0IHN0aWxsIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgYWNjZXNzIHRocm91Z2gKK2dpdC1jdnNzZXJ2ZXIsIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworV2hlbiB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHNldCwgdGhlIGNvcnJlc3BvbmRpbmcKK2NvbW1hbmQtbGluZSBhcmd1bWVudHMgbWF5IG5vdCBiZSB1c2VkLgorCitFY2xpcHNlIENWUyBDbGllbnQgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBnZXQgYSBjaGVja291dCB3aXRoIHRoZSBFY2xpcHNlIENWUyBjbGllbnQ6CisKKzEuIFNlbGVjdCAiQ3JlYXRlIGEgbmV3IHByb2plY3QgLT4gRnJvbSBDVlMgY2hlY2tvdXQiCisyLiBDcmVhdGUgYSBuZXcgbG9jYXRpb24uIFNlZSB0aGUgbm90ZXMgYmVsb3cgZm9yIGRldGFpbHMgb24gaG93IHRvIGNob29zZSB0aGUKKyAgIHJpZ2h0IHByb3RvY29sLgorMy4gQnJvd3NlIHRoZSAnbW9kdWxlcycgYXZhaWxhYmxlLiBJdCB3aWxsIGdpdmUgeW91IGEgbGlzdCBvZiB0aGUgaGVhZHMgaW4KKyAgIHRoZSByZXBvc2l0b3J5LiBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byBicm93c2UgdGhlIHRyZWUgZnJvbSB0aGVyZS4gT25seQorICAgdGhlIGhlYWRzLgorNC4gUGljayAnSEVBRCcgd2hlbiBpdCBhc2tzIHdoYXQgYnJhbmNoL3RhZyB0byBjaGVjayBvdXQuIFVudGljayB0aGUKKyAgICJsYXVuY2ggY29tbWl0IHdpemFyZCIgdG8gYXZvaWQgY29tbWl0dGluZyB0aGUgLnByb2plY3QgZmlsZS4KKworUHJvdG9jb2wgbm90ZXM6IElmIHlvdSBhcmUgdXNpbmcgYW5vbnltb3VzIGFjY2VzcyB2aWEgcHNlcnZlciwganVzdCBzZWxlY3QgdGhhdC4KK1Rob3NlIHVzaW5nIFNTSCBhY2Nlc3Mgc2hvdWxkIGNob29zZSB0aGUgJ2V4dCcgcHJvdG9jb2wsIGFuZCBjb25maWd1cmUgJ2V4dCcKK2FjY2VzcyBvbiB0aGUgUHJlZmVyZW5jZXMtPlRlYW0tPkNWUy0+RXh0Q29ubmVjdGlvbiBwYW5lLiBTZXQgQ1ZTX1NFUlZFUiB0bworImBnaXQgY3Zzc2VydmVyYCIuIE5vdGUgdGhhdCBwYXNzd29yZCBzdXBwb3J0IGlzIG5vdCBnb29kIHdoZW4gdXNpbmcgJ2V4dCcsCit5b3Ugd2lsbCBkZWZpbml0ZWx5IHdhbnQgdG8gaGF2ZSBTU0gga2V5cyBzZXR1cC4KKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBqdXN0IHVzZSB0aGUgbm9uLXN0YW5kYXJkIGV4dHNzaCBwcm90b2NvbCB0aGF0IEVjbGlwc2UKK29mZmVyLiBJbiB0aGF0IGNhc2UgQ1ZTX1NFUlZFUiBpcyBpZ25vcmVkLCBhbmQgeW91IHdpbGwgaGF2ZSB0byByZXBsYWNlCit0aGUgY3ZzIHV0aWxpdHkgb24gdGhlIHNlcnZlciB3aXRoICdnaXQtY3Zzc2VydmVyJyBvciBtYW5pcHVsYXRlIHlvdXIgYC5iYXNocmNgCitzbyB0aGF0IGNhbGxpbmcgJ2N2cycgZWZmZWN0aXZlbHkgY2FsbHMgJ2dpdC1jdnNzZXJ2ZXInLgorCitDbGllbnRzIGtub3duIHRvIHdvcmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIENWUyAxLjEyLjkgb24gRGViaWFuCistIENWUyAxLjExLjE3IG9uIE1hY09TWCAoZnJvbSBGaW5rIHBhY2thZ2UpCistIEVjbGlwc2UgMy4wLCAzLjEuMiBvbiBNYWNPU1ggKHNlZSBFY2xpcHNlIENWUyBDbGllbnQgTm90ZXMpCistIFRvcnRvaXNlQ1ZTCisKK09wZXJhdGlvbnMgc3VwcG9ydGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgdGhlIG9wZXJhdGlvbnMgcmVxdWlyZWQgZm9yIG5vcm1hbCB1c2UgYXJlIHN1cHBvcnRlZCwgaW5jbHVkaW5nCitjaGVja291dCwgZGlmZiwgc3RhdHVzLCB1cGRhdGUsIGxvZywgYWRkLCByZW1vdmUsIGNvbW1pdC4KK0xlZ2FjeSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgKGVkaXQsIHdhdGNoIGFuZCByZWxhdGVkKS4KK0V4cG9ydHMgYW5kIHRhZ2dpbmcgKHRhZ3MgYW5kIGJyYW5jaGVzKSBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIHN0YWdlLgorCitDUkxGIExpbmUgRW5kaW5nIENvbnZlcnNpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0J5IGRlZmF1bHQgdGhlIHNlcnZlciBsZWF2ZXMgdGhlICctaycgbW9kZSBibGFuayBmb3IgYWxsIGZpbGVzLAord2hpY2ggY2F1c2VzIHRoZSBDVlMgY2xpZW50IHRvIHRyZWF0IHRoZW0gYXMgYSB0ZXh0IGZpbGVzLCBzdWJqZWN0Cit0byBlbmQtb2YtbGluZSBjb252ZXJzaW9uIG9uIHNvbWUgcGxhdGZvcm1zLgorCitZb3UgY2FuIG1ha2UgdGhlIHNlcnZlciB1c2UgdGhlIGVuZC1vZi1saW5lIGNvbnZlcnNpb24gYXR0cmlidXRlcyB0bworc2V0IHRoZSAnLWsnIG1vZGVzIGZvciBmaWxlcyBieSBzZXR0aW5nIHRoZSBgZ2l0Y3ZzLnVzZWNybGZhdHRyYAorY29uZmlnIHZhcmlhYmxlLiAgU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorYWJvdXQgZW5kLW9mLWxpbmUgY29udmVyc2lvbi4KKworQWx0ZXJuYXRpdmVseSwgaWYgYGdpdGN2cy51c2VjcmxmYXR0cmAgY29uZmlnIGlzIG5vdCBlbmFibGVkCitvciB0aGUgYXR0cmlidXRlcyBkbyBub3QgYWxsb3cgYXV0b21hdGljIGRldGVjdGlvbiBmb3IgYSBmaWxlbmFtZSwgdGhlbgordGhlIHNlcnZlciB1c2VzIHRoZSBgZ2l0Y3ZzLmFsbGJpbmFyeWAgY29uZmlnIGZvciB0aGUgZGVmYXVsdCBzZXR0aW5nLgorSWYgYGdpdGN2cy5hbGxiaW5hcnlgIGlzIHNldCwgdGhlbiBmaWxlIG5vdCBvdGhlcndpc2UKK3NwZWNpZmllZCB3aWxsIGRlZmF1bHQgdG8gJy1rYicgbW9kZS4gT3RoZXJ3aXNlIHRoZSAnLWsnIG1vZGUKK2lzIGxlZnQgYmxhbmsuIEJ1dCBpZiBgZ2l0Y3ZzLmFsbGJpbmFyeWAgaXMgc2V0IHRvICJndWVzcyIsIHRoZW4KK3RoZSBjb3JyZWN0ICctaycgbW9kZSB3aWxsIGJlIGd1ZXNzZWQgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mCit0aGUgZmlsZS4KKworRm9yIGJlc3QgY29uc2lzdGVuY3kgd2l0aCAnY3ZzJywgaXQgaXMgcHJvYmFibHkgYmVzdCB0byBvdmVycmlkZSB0aGUKK2RlZmF1bHRzIGJ5IHNldHRpbmcgYGdpdGN2cy51c2VjcmxmYXR0cmAgdG8gdHJ1ZSwKK2FuZCBgZ2l0Y3ZzLmFsbGJpbmFyeWAgdG8gImd1ZXNzIi4KKworRGVwZW5kZW5jaWVzCistLS0tLS0tLS0tLS0KKydnaXQtY3Zzc2VydmVyJyBkZXBlbmRzIG9uIERCRDo6U1FMaXRlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNTA5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0CkBAIC0wLDAgKzEsMzEwIEBACitnaXQtZGFlbW9uKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kYWVtb24gLSBBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBnaXQgcmVwb3NpdG9yaWVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkYWVtb24nIFstLXZlcmJvc2VdIFstLXN5c2xvZ10gWy0tZXhwb3J0LWFsbF0KKwkgICAgIFstLXRpbWVvdXQ9PG4+XSBbLS1pbml0LXRpbWVvdXQ9PG4+XSBbLS1tYXgtY29ubmVjdGlvbnM9PG4+XQorCSAgICAgWy0tc3RyaWN0LXBhdGhzXSBbLS1iYXNlLXBhdGg9PHBhdGg+XSBbLS1iYXNlLXBhdGgtcmVsYXhlZF0KKwkgICAgIFstLXVzZXItcGF0aCB8IC0tdXNlci1wYXRoPTxwYXRoPl0KKwkgICAgIFstLWludGVycG9sYXRlZC1wYXRoPTxwYXRodGVtcGxhdGU+XQorCSAgICAgWy0tcmV1c2VhZGRyXSBbLS1kZXRhY2hdIFstLXBpZC1maWxlPTxmaWxlPl0KKwkgICAgIFstLWVuYWJsZT08c2VydmljZT5dIFstLWRpc2FibGU9PHNlcnZpY2U+XQorCSAgICAgWy0tYWxsb3ctb3ZlcnJpZGU9PHNlcnZpY2U+XSBbLS1mb3JiaWQtb3ZlcnJpZGU9PHNlcnZpY2U+XQorCSAgICAgWy0tYWNjZXNzLWhvb2s9PHBhdGg+XQorCSAgICAgWy0taW5ldGQgfCBbLS1saXN0ZW49PGhvc3Rfb3JfaXBhZGRyPl0gWy0tcG9ydD08bj5dIFstLXVzZXI9PHVzZXI+IFstLWdyb3VwPTxncm91cD5dXQorCSAgICAgWzxkaXJlY3Rvcnk+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0EgcmVhbGx5IHNpbXBsZSBUQ1AgZ2l0IGRhZW1vbiB0aGF0IG5vcm1hbGx5IGxpc3RlbnMgb24gcG9ydCAiREVGQVVMVF9HSVRfUE9SVCIKK2FrYSA5NDE4LiAgSXQgd2FpdHMgZm9yIGEgY29ubmVjdGlvbiBhc2tpbmcgZm9yIGEgc2VydmljZSwgYW5kIHdpbGwgc2VydmUKK3RoYXQgc2VydmljZSBpZiBpdCBpcyBlbmFibGVkLgorCitJdCB2ZXJpZmllcyB0aGF0IHRoZSBkaXJlY3RvcnkgaGFzIHRoZSBtYWdpYyBmaWxlICJnaXQtZGFlbW9uLWV4cG9ydC1vayIsIGFuZAoraXQgd2lsbCByZWZ1c2UgdG8gZXhwb3J0IGFueSBnaXQgZGlyZWN0b3J5IHRoYXQgaGFzbid0IGV4cGxpY2l0bHkgYmVlbiBtYXJrZWQKK2ZvciBleHBvcnQgdGhpcyB3YXkgKHVubGVzcyB0aGUgJy0tZXhwb3J0LWFsbCcgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCkuIElmIHlvdQorcGFzcyBzb21lIGRpcmVjdG9yeSBwYXRocyBhcyAnZ2l0IGRhZW1vbicgYXJndW1lbnRzLCB5b3UgY2FuIGZ1cnRoZXIgcmVzdHJpY3QKK3RoZSBvZmZlcnMgdG8gYSB3aGl0ZWxpc3QgY29tcHJpc2luZyBvZiB0aG9zZS4KKworQnkgZGVmYXVsdCwgb25seSBgdXBsb2FkLXBhY2tgIHNlcnZpY2UgaXMgZW5hYmxlZCwgd2hpY2ggc2VydmVzCisnZ2l0IGZldGNoLXBhY2snIGFuZCAnZ2l0IGxzLXJlbW90ZScgY2xpZW50cywgd2hpY2ggYXJlIGludm9rZWQKK2Zyb20gJ2dpdCBmZXRjaCcsICdnaXQgcHVsbCcsIGFuZCAnZ2l0IGNsb25lJy4KKworVGhpcyBpcyBpZGVhbGx5IHN1aXRlZCBmb3IgcmVhZC1vbmx5IHVwZGF0ZXMsIGkuZS4sIHB1bGxpbmcgZnJvbQorZ2l0IHJlcG9zaXRvcmllcy4KKworQW4gYHVwbG9hZC1hcmNoaXZlYCBhbHNvIGV4aXN0cyB0byBzZXJ2ZSAnZ2l0IGFyY2hpdmUnLgorCitPUFRJT05TCistLS0tLS0tCistLXN0cmljdC1wYXRoczo6CisJTWF0Y2ggcGF0aHMgZXhhY3RseSAoaS5lLiBkb24ndCBhbGxvdyAiL2Zvby9yZXBvIiB3aGVuIHRoZSByZWFsIHBhdGggaXMKKwkiL2Zvby9yZXBvLmdpdCIgb3IgIi9mb28vcmVwby8uZ2l0IikgYW5kIGRvbid0IGRvIHVzZXItcmVsYXRpdmUgcGF0aHMuCisJJ2dpdCBkYWVtb24nIHdpbGwgcmVmdXNlIHRvIHN0YXJ0IHdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgbm8KKwl3aGl0ZWxpc3QgaXMgc3BlY2lmaWVkLgorCistLWJhc2UtcGF0aD08cGF0aD46OgorCVJlbWFwIGFsbCB0aGUgcGF0aCByZXF1ZXN0cyBhcyByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcGF0aC4KKwlUaGlzIGlzIHNvcnQgb2YgIkdJVCByb290IiAtIGlmIHlvdSBydW4gJ2dpdCBkYWVtb24nIHdpdGgKKwknLS1iYXNlLXBhdGg9L3Nydi9naXQnIG9uIGV4YW1wbGUuY29tLCB0aGVuIGlmIHlvdSBsYXRlciB0cnkgdG8gcHVsbAorCSdnaXQ6Ly9leGFtcGxlLmNvbS9oZWxsby5naXQnLCAnZ2l0IGRhZW1vbicgd2lsbCBpbnRlcnByZXQgdGhlIHBhdGgKKwlhcyAnL3Nydi9naXQvaGVsbG8uZ2l0Jy4KKworLS1iYXNlLXBhdGgtcmVsYXhlZDo6CisJSWYgLS1iYXNlLXBhdGggaXMgZW5hYmxlZCBhbmQgcmVwbyBsb29rdXAgZmFpbHMsIHdpdGggdGhpcyBvcHRpb24KKwknZ2l0IGRhZW1vbicgd2lsbCBhdHRlbXB0IHRvIGxvb2t1cCB3aXRob3V0IHByZWZpeGluZyB0aGUgYmFzZSBwYXRoLgorCVRoaXMgaXMgdXNlZnVsIGZvciBzd2l0Y2hpbmcgdG8gLS1iYXNlLXBhdGggdXNhZ2UsIHdoaWxlIHN0aWxsCisJYWxsb3dpbmcgdGhlIG9sZCBwYXRocy4KKworLS1pbnRlcnBvbGF0ZWQtcGF0aD08cGF0aHRlbXBsYXRlPjo6CisJVG8gc3VwcG9ydCB2aXJ0dWFsIGhvc3RpbmcsIGFuIGludGVycG9sYXRlZCBwYXRoIHRlbXBsYXRlIGNhbiBiZQorCXVzZWQgdG8gZHluYW1pY2FsbHkgY29uc3RydWN0IGFsdGVybmF0ZSBwYXRocy4gIFRoZSB0ZW1wbGF0ZQorCXN1cHBvcnRzICVIIGZvciB0aGUgdGFyZ2V0IGhvc3RuYW1lIGFzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQgYnV0CisJY29udmVydGVkIHRvIGFsbCBsb3dlcmNhc2UsICVDSCBmb3IgdGhlIGNhbm9uaWNhbCBob3N0bmFtZSwKKwklSVAgZm9yIHRoZSBzZXJ2ZXIncyBJUCBhZGRyZXNzLCAlUCBmb3IgdGhlIHBvcnQgbnVtYmVyLAorCWFuZCAlRCBmb3IgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIG5hbWVkIHJlcG9zaXRvcnkuCisJQWZ0ZXIgaW50ZXJwb2xhdGlvbiwgdGhlIHBhdGggaXMgdmFsaWRhdGVkIGFnYWluc3QgdGhlIGRpcmVjdG9yeQorCXdoaXRlbGlzdC4KKworLS1leHBvcnQtYWxsOjoKKwlBbGxvdyBwdWxsaW5nIGZyb20gYWxsIGRpcmVjdG9yaWVzIHRoYXQgbG9vayBsaWtlIEdJVCByZXBvc2l0b3JpZXMKKwkoaGF2ZSB0aGUgJ29iamVjdHMnIGFuZCAncmVmcycgc3ViZGlyZWN0b3JpZXMpLCBldmVuIGlmIHRoZXkKKwlkbyBub3QgaGF2ZSB0aGUgJ2dpdC1kYWVtb24tZXhwb3J0LW9rJyBmaWxlLgorCistLWluZXRkOjoKKwlIYXZlIHRoZSBzZXJ2ZXIgcnVuIGFzIGFuIGluZXRkIHNlcnZpY2UuIEltcGxpZXMgLS1zeXNsb2cuCisJSW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2gsIC0tcG9ydCwgLS1saXN0ZW4sIC0tdXNlciBhbmQgLS1ncm91cAorCW9wdGlvbnMuCisKKy0tbGlzdGVuPTxob3N0X29yX2lwYWRkcj46OgorCUxpc3RlbiBvbiBhIHNwZWNpZmljIElQIGFkZHJlc3Mgb3IgaG9zdG5hbWUuICBJUCBhZGRyZXNzZXMgY2FuCisJYmUgZWl0aGVyIGFuIElQdjQgYWRkcmVzcyBvciBhbiBJUHY2IGFkZHJlc3MgaWYgc3VwcG9ydGVkLiAgSWYgSVB2NgorCWlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gLS1saXN0ZW49aG9zdG5hbWUgaXMgYWxzbyBub3Qgc3VwcG9ydGVkIGFuZAorCS0tbGlzdGVuIG11c3QgYmUgZ2l2ZW4gYW4gSVB2NCBhZGRyZXNzLgorCUNhbiBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKwlJbmNvbXBhdGlibGUgd2l0aCAnLS1pbmV0ZCcgb3B0aW9uLgorCistLXBvcnQ9PG4+OjoKKwlMaXN0ZW4gb24gYW4gYWx0ZXJuYXRpdmUgcG9ydC4gIEluY29tcGF0aWJsZSB3aXRoICctLWluZXRkJyBvcHRpb24uCisKKy0taW5pdC10aW1lb3V0PTxuPjo6CisJVGltZW91dCAoaW4gc2Vjb25kcykgYmV0d2VlbiB0aGUgbW9tZW50IHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCisJYW5kIHRoZSBjbGllbnQgcmVxdWVzdCBpcyByZWNlaXZlZCAodHlwaWNhbGx5IGEgcmF0aGVyIGxvdyB2YWx1ZSwgc2luY2UKKwl0aGF0IHNob3VsZCBiZSBiYXNpY2FsbHkgaW1tZWRpYXRlKS4KKworLS10aW1lb3V0PTxuPjo6CisJVGltZW91dCAoaW4gc2Vjb25kcykgZm9yIHNwZWNpZmljIGNsaWVudCBzdWItcmVxdWVzdHMuIFRoaXMgaW5jbHVkZXMKKwl0aGUgdGltZSBpdCB0YWtlcyBmb3IgdGhlIHNlcnZlciB0byBwcm9jZXNzIHRoZSBzdWItcmVxdWVzdCBhbmQgdGhlCisJdGltZSBzcGVudCB3YWl0aW5nIGZvciB0aGUgbmV4dCBjbGllbnQncyByZXF1ZXN0LgorCistLW1heC1jb25uZWN0aW9ucz08bj46OgorCU1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgY2xpZW50cywgZGVmYXVsdHMgdG8gMzIuICBTZXQgaXQgdG8KKwl6ZXJvIGZvciBubyBsaW1pdC4KKworLS1zeXNsb2c6OgorCUxvZyB0byBzeXNsb2cgaW5zdGVhZCBvZiBzdGRlcnIuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2VzIG5vdCBpbXBseQorCS0tdmVyYm9zZSwgdGh1cyBieSBkZWZhdWx0IG9ubHkgZXJyb3IgY29uZGl0aW9ucyB3aWxsIGJlIGxvZ2dlZC4KKworLS11c2VyLXBhdGg6OgorLS11c2VyLXBhdGg9PHBhdGg+OjoKKwlBbGxvdyB7dGlsZGV9dXNlciBub3RhdGlvbiB0byBiZSB1c2VkIGluIHJlcXVlc3RzLiAgV2hlbgorCXNwZWNpZmllZCB3aXRoIG5vIHBhcmFtZXRlciwgcmVxdWVzdHMgdG8KKwlnaXQ6Ly9ob3N0L3t0aWxkZX1hbGljZS9mb28gaXMgdGFrZW4gYXMgYSByZXF1ZXN0IHRvIGFjY2VzcworCSdmb28nIHJlcG9zaXRvcnkgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IG9mIHVzZXIgYGFsaWNlYC4KKwlJZiBgLS11c2VyLXBhdGg9cGF0aGAgaXMgc3BlY2lmaWVkLCB0aGUgc2FtZSByZXF1ZXN0IGlzCisJdGFrZW4gYXMgYSByZXF1ZXN0IHRvIGFjY2VzcyBgcGF0aC9mb29gIHJlcG9zaXRvcnkgaW4KKwl0aGUgaG9tZSBkaXJlY3Rvcnkgb2YgdXNlciBgYWxpY2VgLgorCistLXZlcmJvc2U6OgorCUxvZyBkZXRhaWxzIGFib3V0IHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyBhbmQgcmVxdWVzdGVkIGZpbGVzLgorCistLXJldXNlYWRkcjo6CisJVXNlIFNPX1JFVVNFQUREUiB3aGVuIGJpbmRpbmcgdGhlIGxpc3RlbmluZyBzb2NrZXQuCisJVGhpcyBhbGxvd3MgdGhlIHNlcnZlciB0byByZXN0YXJ0IHdpdGhvdXQgd2FpdGluZyBmb3IKKwlvbGQgY29ubmVjdGlvbnMgdG8gdGltZSBvdXQuCisKKy0tZGV0YWNoOjoKKwlEZXRhY2ggZnJvbSB0aGUgc2hlbGwuIEltcGxpZXMgLS1zeXNsb2cuCisKKy0tcGlkLWZpbGU9PGZpbGU+OjoKKwlTYXZlIHRoZSBwcm9jZXNzIGlkIGluICdmaWxlJy4gIElnbm9yZWQgd2hlbiB0aGUgZGFlbW9uCisJaXMgcnVuIHVuZGVyIGAtLWluZXRkYC4KKworLS11c2VyPTx1c2VyPjo6CistLWdyb3VwPTxncm91cD46OgorCUNoYW5nZSBkYWVtb24ncyB1aWQgYW5kIGdpZCBiZWZvcmUgZW50ZXJpbmcgdGhlIHNlcnZpY2UgbG9vcC4KKwlXaGVuIG9ubHkgYC0tdXNlcmAgaXMgZ2l2ZW4gd2l0aG91dCBgLS1ncm91cGAsIHRoZQorCXByaW1hcnkgZ3JvdXAgSUQgZm9yIHRoZSB1c2VyIGlzIHVzZWQuICBUaGUgdmFsdWVzIG9mCisJdGhlIG9wdGlvbiBhcmUgZ2l2ZW4gdG8gYGdldHB3bmFtKDMpYCBhbmQgYGdldGdybmFtKDMpYAorCWFuZCBudW1lcmljIElEcyBhcmUgbm90IHN1cHBvcnRlZC4KKysKK0dpdmluZyB0aGVzZSBvcHRpb25zIGlzIGFuIGVycm9yIHdoZW4gdXNlZCB3aXRoIGAtLWluZXRkYDsgdXNlCit0aGUgZmFjaWxpdHkgb2YgaW5ldCBkYWVtb24gdG8gYWNoaWV2ZSB0aGUgc2FtZSBiZWZvcmUgc3Bhd25pbmcKKydnaXQgZGFlbW9uJyBpZiBuZWVkZWQuCisKKy0tZW5hYmxlPTxzZXJ2aWNlPjo6CistLWRpc2FibGU9PHNlcnZpY2U+OjoKKwlFbmFibGUvZGlzYWJsZSB0aGUgc2VydmljZSBzaXRlLXdpZGUgcGVyIGRlZmF1bHQuICBOb3RlCisJdGhhdCBhIHNlcnZpY2UgZGlzYWJsZWQgc2l0ZS13aWRlIGNhbiBzdGlsbCBiZSBlbmFibGVkCisJcGVyIHJlcG9zaXRvcnkgaWYgaXQgaXMgbWFya2VkIG92ZXJyaWRhYmxlIGFuZCB0aGUKKwlyZXBvc2l0b3J5IGVuYWJsZXMgdGhlIHNlcnZpY2Ugd2l0aCBhIGNvbmZpZ3VyYXRpb24KKwlpdGVtLgorCistLWFsbG93LW92ZXJyaWRlPTxzZXJ2aWNlPjo6CistLWZvcmJpZC1vdmVycmlkZT08c2VydmljZT46OgorCUFsbG93L2ZvcmJpZCBvdmVycmlkaW5nIHRoZSBzaXRlLXdpZGUgZGVmYXVsdCB3aXRoIHBlcgorCXJlcG9zaXRvcnkgY29uZmlndXJhdGlvbi4gIEJ5IGRlZmF1bHQsIGFsbCB0aGUgc2VydmljZXMKKwlhcmUgb3ZlcnJpZGFibGUuCisKKy0taW5mb3JtYXRpdmUtZXJyb3JzOjoKKy0tbm8taW5mb3JtYXRpdmUtZXJyb3JzOjoKKwlXaGVuIGluZm9ybWF0aXZlIGVycm9ycyBhcmUgdHVybmVkIG9uLCBnaXQtZGFlbW9uIHdpbGwgcmVwb3J0CisJbW9yZSB2ZXJib3NlIGVycm9ycyB0byB0aGUgY2xpZW50LCBkaWZmZXJlbnRpYXRpbmcgY29uZGl0aW9ucworCWxpa2UgIm5vIHN1Y2ggcmVwb3NpdG9yeSIgZnJvbSAicmVwb3NpdG9yeSBub3QgZXhwb3J0ZWQiLiBUaGlzCisJaXMgbW9yZSBjb252ZW5pZW50IGZvciBjbGllbnRzLCBidXQgbWF5IGxlYWsgaW5mb3JtYXRpb24gYWJvdXQKKwl0aGUgZXhpc3RlbmNlIG9mIHVuZXhwb3J0ZWQgcmVwb3NpdG9yaWVzLiAgV2hlbiBpbmZvcm1hdGl2ZQorCWVycm9ycyBhcmUgbm90IGVuYWJsZWQsIGFsbCBlcnJvcnMgcmVwb3J0ICJhY2Nlc3MgZGVuaWVkIiB0byB0aGUKKwljbGllbnQuIFRoZSBkZWZhdWx0IGlzIC0tbm8taW5mb3JtYXRpdmUtZXJyb3JzLgorCistLWFjY2Vzcy1ob29rPTxwYXRoPjo6CisJRXZlcnkgdGltZSBhIGNsaWVudCBjb25uZWN0cywgZmlyc3QgcnVuIGFuIGV4dGVybmFsIGNvbW1hbmQKKwlzcGVjaWZpZWQgYnkgdGhlIDxwYXRoPiB3aXRoIHNlcnZpY2UgbmFtZSAoZS5nLiAidXBsb2FkLXBhY2siKSwKKwlwYXRoIHRvIHRoZSByZXBvc2l0b3J5LCBob3N0bmFtZSAoJUgpLCBjYW5vbmljYWwgaG9zdG5hbWUKKwkoJUNIKSwgaXAgYWRkcmVzcyAoJUlQKSwgYW5kIHRjcCBwb3J0ICglUCkgYXMgaXRzIGNvbW1hbmQgbGluZQorCWFyZ3VtZW50cy4gVGhlIGV4dGVybmFsIGNvbW1hbmQgY2FuIGRlY2lkZSB0byBkZWNsaW5lIHRoZQorCXNlcnZpY2UgYnkgZXhpdGluZyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIChvciB0byBhbGxvdyBpdCBieQorCWV4aXRpbmcgd2l0aCBhIHplcm8gc3RhdHVzKS4gIEl0IGNhbiBhbHNvIGxvb2sgYXQgdGhlICRSRU1PVEVfQUREUgorCWFuZCAkUkVNT1RFX1BPUlQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGxlYXJuIGFib3V0IHRoZQorCXJlcXVlc3RvciB3aGVuIG1ha2luZyB0aGlzIGRlY2lzaW9uLgorKworVGhlIGV4dGVybmFsIGNvbW1hbmQgY2FuIG9wdGlvbmFsbHkgd3JpdGUgYSBzaW5nbGUgbGluZSB0byBpdHMKK3N0YW5kYXJkIG91dHB1dCB0byBiZSBzZW50IHRvIHRoZSByZXF1ZXN0b3IgYXMgYW4gZXJyb3IgbWVzc2FnZSB3aGVuCitpdCBkZWNsaW5lcyB0aGUgc2VydmljZS4KKworPGRpcmVjdG9yeT46OgorCUEgZGlyZWN0b3J5IHRvIGFkZCB0byB0aGUgd2hpdGVsaXN0IG9mIGFsbG93ZWQgZGlyZWN0b3JpZXMuIFVubGVzcworCS0tc3RyaWN0LXBhdGhzIGlzIHNwZWNpZmllZCB0aGlzIHdpbGwgYWxzbyBpbmNsdWRlIHN1YmRpcmVjdG9yaWVzCisJb2YgZWFjaCBuYW1lZCBkaXJlY3RvcnkuCisKK1NFUlZJQ0VTCistLS0tLS0tLQorCitUaGVzZSBzZXJ2aWNlcyBjYW4gYmUgZ2xvYmFsbHkgZW5hYmxlZC9kaXNhYmxlZCB1c2luZyB0aGUKK2NvbW1hbmQgbGluZSBvcHRpb25zIG9mIHRoaXMgY29tbWFuZC4gIElmIGEgZmluZXItZ3JhaW5lZAorY29udHJvbCBpcyBkZXNpcmVkIChlLmcuIHRvIGFsbG93ICdnaXQgYXJjaGl2ZScgdG8gYmUgcnVuCithZ2FpbnN0IG9ubHkgaW4gYSBmZXcgc2VsZWN0ZWQgcmVwb3NpdG9yaWVzIHRoZSBkYWVtb24gc2VydmVzKSwKK3RoZSBwZXItcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGZpbGUgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIG9yCitkaXNhYmxlIHRoZW0uCisKK3VwbG9hZC1wYWNrOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IGZldGNoLXBhY2snIGFuZCAnZ2l0IGxzLXJlbW90ZScKKwljbGllbnRzLiAgSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYSByZXBvc2l0b3J5IGNhbgorCWRpc2FibGUgaXQgYnkgc2V0dGluZyBgZGFlbW9uLnVwbG9hZHBhY2tgIGNvbmZpZ3VyYXRpb24KKwlpdGVtIHRvIGBmYWxzZWAuCisKK3VwbG9hZC1hcmNoaXZlOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUnLiAgSXQgaXMgZGlzYWJsZWQgYnkKKwlkZWZhdWx0LCBidXQgYSByZXBvc2l0b3J5IGNhbiBlbmFibGUgaXQgYnkgc2V0dGluZworCWBkYWVtb24udXBsb2FkYXJjaGAgY29uZmlndXJhdGlvbiBpdGVtIHRvIGB0cnVlYC4KKworcmVjZWl2ZS1wYWNrOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IHNlbmQtcGFjaycgY2xpZW50cywgYWxsb3dpbmcgYW5vbnltb3VzCisJcHVzaC4gIEl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFzIHRoZXJlIGlzIF9ub18KKwlhdXRoZW50aWNhdGlvbiBpbiB0aGUgcHJvdG9jb2wgKGluIG90aGVyIHdvcmRzLCBhbnlib2R5CisJY2FuIHB1c2ggYW55dGhpbmcgaW50byB0aGUgcmVwb3NpdG9yeSwgaW5jbHVkaW5nIHJlbW92YWwKKwlvZiByZWZzKS4gIFRoaXMgaXMgc29sZWx5IG1lYW50IGZvciBhIGNsb3NlZCBMQU4gc2V0dGluZworCXdoZXJlIGV2ZXJ5Ym9keSBpcyBmcmllbmRseS4gIFRoaXMgc2VydmljZSBjYW4gYmUKKwllbmFibGVkIGJ5IHNldHRpbmcgYGRhZW1vbi5yZWNlaXZlcGFja2AgY29uZmlndXJhdGlvbiBpdGVtIHRvCisJYHRydWVgLgorCitFWEFNUExFUworLS0tLS0tLS0KK1dlIGFzc3VtZSB0aGUgZm9sbG93aW5nIGluIC9ldGMvc2VydmljZXM6OgorKworLS0tLS0tLS0tLS0tCiskIGdyZXAgOTQxOCAvZXRjL3NlcnZpY2VzCitnaXQJCTk0MTgvdGNwCQkjIEdpdCBWZXJzaW9uIENvbnRyb2wgU3lzdGVtCistLS0tLS0tLS0tLS0KKworJ2dpdCBkYWVtb24nIGFzIGluZXRkIHNlcnZlcjo6CisJVG8gc2V0IHVwICdnaXQgZGFlbW9uJyBhcyBhbiBpbmV0ZCBzZXJ2aWNlIHRoYXQgaGFuZGxlcyBhbnkKKwlyZXBvc2l0b3J5IHVuZGVyIHRoZSB3aGl0ZWxpc3RlZCBzZXQgb2YgZGlyZWN0b3JpZXMsIC9wdWIvZm9vCisJYW5kIC9wdWIvYmFyLCBwbGFjZSBhbiBlbnRyeSBsaWtlIHRoZSBmb2xsb3dpbmcgaW50bworCS9ldGMvaW5ldGQgYWxsIG9uIG9uZSBsaW5lOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IHN0cmVhbSB0Y3Agbm93YWl0IG5vYm9keSAgL3Vzci9iaW4vZ2l0CisJCWdpdCBkYWVtb24gLS1pbmV0ZCAtLXZlcmJvc2UgLS1leHBvcnQtYWxsCisJCS9wdWIvZm9vIC9wdWIvYmFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisnZ2l0IGRhZW1vbicgYXMgaW5ldGQgc2VydmVyIGZvciB2aXJ0dWFsIGhvc3RzOjoKKwlUbyBzZXQgdXAgJ2dpdCBkYWVtb24nIGFzIGFuIGluZXRkIHNlcnZpY2UgdGhhdCBoYW5kbGVzCisJcmVwb3NpdG9yaWVzIGZvciBkaWZmZXJlbnQgdmlydHVhbCBob3N0cywgYHd3dy5leGFtcGxlLmNvbWAKKwlhbmQgYHd3dy5leGFtcGxlLm9yZ2AsIHBsYWNlIGFuIGVudHJ5IGxpa2UgdGhlIGZvbGxvd2luZyBpbnRvCisJYC9ldGMvaW5ldGRgIGFsbCBvbiBvbmUgbGluZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWdpdCBzdHJlYW0gdGNwIG5vd2FpdCBub2JvZHkgL3Vzci9iaW4vZ2l0CisJCWdpdCBkYWVtb24gLS1pbmV0ZCAtLXZlcmJvc2UgLS1leHBvcnQtYWxsCisJCS0taW50ZXJwb2xhdGVkLXBhdGg9L3B1Yi8lSCVECisJCS9wdWIvd3d3LmV4YW1wbGUub3JnL3NvZnR3YXJlCisJCS9wdWIvd3d3LmV4YW1wbGUuY29tL3NvZnR3YXJlCisJCS9zb2Z0d2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitJbiB0aGlzIGV4YW1wbGUsIHRoZSByb290LWxldmVsIGRpcmVjdG9yeSBgL3B1YmAgd2lsbCBjb250YWluCithIHN1YmRpcmVjdG9yeSBmb3IgZWFjaCB2aXJ0dWFsIGhvc3QgbmFtZSBzdXBwb3J0ZWQuCitGdXJ0aGVyLCBib3RoIGhvc3RzIGFkdmVydGlzZSByZXBvc2l0b3JpZXMgc2ltcGx5IGFzCitgZ2l0Oi8vd3d3LmV4YW1wbGUuY29tL3NvZnR3YXJlL3JlcG8uZ2l0YC4gIEZvciBwcmUtMS40LjAKK2NsaWVudHMsIGEgc3ltbGluayBmcm9tIGAvc29mdHdhcmVgIGludG8gdGhlIGFwcHJvcHJpYXRlCitkZWZhdWx0IHJlcG9zaXRvcnkgY291bGQgYmUgbWFkZSBhcyB3ZWxsLgorCisKKydnaXQgZGFlbW9uJyBhcyByZWd1bGFyIGRhZW1vbiBmb3IgdmlydHVhbCBob3N0czo6CisJVG8gc2V0IHVwICdnaXQgZGFlbW9uJyBhcyBhIHJlZ3VsYXIsIG5vbi1pbmV0ZCBzZXJ2aWNlIHRoYXQKKwloYW5kbGVzIHJlcG9zaXRvcmllcyBmb3IgbXVsdGlwbGUgdmlydHVhbCBob3N0cyBiYXNlZCBvbgorCXRoZWlyIElQIGFkZHJlc3Nlcywgc3RhcnQgdGhlIGRhZW1vbiBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlnaXQgZGFlbW9uIC0tdmVyYm9zZSAtLWV4cG9ydC1hbGwKKwkJLS1pbnRlcnBvbGF0ZWQtcGF0aD0vcHViLyVJUC8lRAorCQkvcHViLzE5Mi4xNjguMS4yMDAvc29mdHdhcmUKKwkJL3B1Yi8xMC4xMC4yMjAuMjMvc29mdHdhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSW4gdGhpcyBleGFtcGxlLCB0aGUgcm9vdC1sZXZlbCBkaXJlY3RvcnkgYC9wdWJgIHdpbGwgY29udGFpbgorYSBzdWJkaXJlY3RvcnkgZm9yIGVhY2ggdmlydHVhbCBob3N0IElQIGFkZHJlc3Mgc3VwcG9ydGVkLgorUmVwb3NpdG9yaWVzIGNhbiBzdGlsbCBiZSBhY2Nlc3NlZCBieSBob3N0bmFtZSB0aG91Z2gsIGFzc3VtaW5nCit0aGV5IGNvcnJlc3BvbmQgdG8gdGhlc2UgSVAgYWRkcmVzc2VzLgorCitzZWxlY3RpdmVseSBlbmFibGUvZGlzYWJsZSBzZXJ2aWNlcyBwZXIgcmVwb3NpdG9yeTo6CisJVG8gZW5hYmxlICdnaXQgYXJjaGl2ZSAtLXJlbW90ZScgYW5kIGRpc2FibGUgJ2dpdCBmZXRjaCcgYWdhaW5zdAorCWEgcmVwb3NpdG9yeSwgaGF2ZSB0aGUgZm9sbG93aW5nIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisJcmVwb3NpdG9yeSAodGhhdCBpcyB0aGUgZmlsZSAnY29uZmlnJyBuZXh0IHRvICdIRUFEJywgJ3JlZnMnIGFuZAorCSdvYmplY3RzJykuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJW2RhZW1vbl0KKwkJdXBsb2FkcGFjayA9IGZhbHNlCisJCXVwbG9hZGFyY2ggPSB0cnVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tCisnZ2l0IGRhZW1vbicgd2lsbCBzZXQgUkVNT1RFX0FERFIgdG8gdGhlIElQIGFkZHJlc3Mgb2YgdGhlIGNsaWVudAordGhhdCBjb25uZWN0ZWQgdG8gaXQsIGlmIHRoZSBJUCBhZGRyZXNzIGlzIGF2YWlsYWJsZS4gUkVNT1RFX0FERFIgd2lsbAorYmUgYXZhaWxhYmxlIGluIHRoZSBlbnZpcm9ubWVudCBvZiBob29rcyBjYWxsZWQgd2hlbgorc2VydmljZXMgYXJlIHBlcmZvcm1lZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkNmJiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dApAQCAtMCwwICsxLDE2MSBAQAorZ2l0LWRlc2NyaWJlKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWRlc2NyaWJlIC0gU2hvdyB0aGUgbW9zdCByZWNlbnQgdGFnIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYSBjb21taXQKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGVzY3JpYmUnIFstLWFsbF0gWy0tdGFnc10gWy0tY29udGFpbnNdIFstLWFiYnJldj08bj5dIDxjb21taXR0aXNoPi4uLgorJ2dpdCBkZXNjcmliZScgWy0tYWxsXSBbLS10YWdzXSBbLS1jb250YWluc10gWy0tYWJicmV2PTxuPl0gLS1kaXJ0eVs9PG1hcms+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoZSBjb21tYW5kIGZpbmRzIHRoZSBtb3N0IHJlY2VudCB0YWcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBhCitjb21taXQuICBJZiB0aGUgdGFnIHBvaW50cyB0byB0aGUgY29tbWl0LCB0aGVuIG9ubHkgdGhlIHRhZyBpcworc2hvd24uICBPdGhlcndpc2UsIGl0IHN1ZmZpeGVzIHRoZSB0YWcgbmFtZSB3aXRoIHRoZSBudW1iZXIgb2YKK2FkZGl0aW9uYWwgY29tbWl0cyBvbiB0b3Agb2YgdGhlIHRhZ2dlZCBvYmplY3QgYW5kIHRoZQorYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUgb2YgdGhlIG1vc3QgcmVjZW50IGNvbW1pdC4KKworQnkgZGVmYXVsdCAod2l0aG91dCAtLWFsbCBvciAtLXRhZ3MpIGBnaXQgZGVzY3JpYmVgIG9ubHkgc2hvd3MKK2Fubm90YXRlZCB0YWdzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW5ub3RhdGVkIHRhZ3MKK3NlZSB0aGUgLWEgYW5kIC1zIG9wdGlvbnMgdG8gbGlua2dpdDpnaXQtdGFnWzFdLgorCitPUFRJT05TCistLS0tLS0tCis8Y29tbWl0dGlzaD4uLi46OgorCUNvbW1pdHRpc2ggb2JqZWN0IG5hbWVzIHRvIGRlc2NyaWJlLgorCistLWRpcnR5Wz08bWFyaz5dOjoKKwlEZXNjcmliZSB0aGUgd29ya2luZyB0cmVlLgorCUl0IG1lYW5zIGRlc2NyaWJlIEhFQUQgYW5kIGFwcGVuZHMgPG1hcms+IChgLWRpcnR5YCBieQorCWRlZmF1bHQpIGlmIHRoZSB3b3JraW5nIHRyZWUgaXMgZGlydHkuCisKKy0tYWxsOjoKKwlJbnN0ZWFkIG9mIHVzaW5nIG9ubHkgdGhlIGFubm90YXRlZCB0YWdzLCB1c2UgYW55IHJlZgorCWZvdW5kIGluIGByZWZzL2AgbmFtZXNwYWNlLiAgVGhpcyBvcHRpb24gZW5hYmxlcyBtYXRjaGluZworCWFueSBrbm93biBicmFuY2gsIHJlbW90ZS10cmFja2luZyBicmFuY2gsIG9yIGxpZ2h0d2VpZ2h0IHRhZy4KKworLS10YWdzOjoKKwlJbnN0ZWFkIG9mIHVzaW5nIG9ubHkgdGhlIGFubm90YXRlZCB0YWdzLCB1c2UgYW55IHRhZworCWZvdW5kIGluIGByZWZzL3RhZ3NgIG5hbWVzcGFjZS4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbWF0Y2hpbmcKKwlhIGxpZ2h0d2VpZ2h0IChub24tYW5ub3RhdGVkKSB0YWcuCisKKy0tY29udGFpbnM6OgorCUluc3RlYWQgb2YgZmluZGluZyB0aGUgdGFnIHRoYXQgcHJlZGF0ZXMgdGhlIGNvbW1pdCwgZmluZAorCXRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0LCBhbmQgdGh1cyBjb250YWlucyBpdC4KKwlBdXRvbWF0aWNhbGx5IGltcGxpZXMgLS10YWdzLgorCistLWFiYnJldj08bj46OgorCUluc3RlYWQgb2YgdXNpbmcgdGhlIGRlZmF1bHQgNyBoZXhhZGVjaW1hbCBkaWdpdHMgYXMgdGhlCisJYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUsIHVzZSA8bj4gZGlnaXRzLCBvciBhcyBtYW55IGRpZ2l0cworCWFzIG5lZWRlZCB0byBmb3JtIGEgdW5pcXVlIG9iamVjdCBuYW1lLiAgQW4gPG4+IG9mIDAKKwl3aWxsIHN1cHByZXNzIGxvbmcgZm9ybWF0LCBvbmx5IHNob3dpbmcgdGhlIGNsb3Nlc3QgdGFnLgorCistLWNhbmRpZGF0ZXM9PG4+OjoKKwlJbnN0ZWFkIG9mIGNvbnNpZGVyaW5nIG9ubHkgdGhlIDEwIG1vc3QgcmVjZW50IHRhZ3MgYXMKKwljYW5kaWRhdGVzIHRvIGRlc2NyaWJlIHRoZSBpbnB1dCBjb21taXR0aXNoIGNvbnNpZGVyCisJdXAgdG8gPG4+IGNhbmRpZGF0ZXMuICBJbmNyZWFzaW5nIDxuPiBhYm92ZSAxMCB3aWxsIHRha2UKKwlzbGlnaHRseSBsb25nZXIgYnV0IG1heSBwcm9kdWNlIGEgbW9yZSBhY2N1cmF0ZSByZXN1bHQuCisJQW4gPG4+IG9mIDAgd2lsbCBjYXVzZSBvbmx5IGV4YWN0IG1hdGNoZXMgdG8gYmUgb3V0cHV0LgorCistLWV4YWN0LW1hdGNoOjoKKwlPbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIChhIHRhZyBkaXJlY3RseSByZWZlcmVuY2VzIHRoZQorCXN1cHBsaWVkIGNvbW1pdCkuICBUaGlzIGlzIGEgc3lub255bSBmb3IgLS1jYW5kaWRhdGVzPTAuCisKKy0tZGVidWc6OgorCVZlcmJvc2VseSBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZWFyY2hpbmcgc3RyYXRlZ3kKKwliZWluZyBlbXBsb3llZCB0byBzdGFuZGFyZCBlcnJvci4gIFRoZSB0YWcgbmFtZSB3aWxsIHN0aWxsCisJYmUgcHJpbnRlZCB0byBzdGFuZGFyZCBvdXQuCisKKy0tbG9uZzo6CisJQWx3YXlzIG91dHB1dCB0aGUgbG9uZyBmb3JtYXQgKHRoZSB0YWcsIHRoZSBudW1iZXIgb2YgY29tbWl0cworCWFuZCB0aGUgYWJicmV2aWF0ZWQgY29tbWl0IG5hbWUpIGV2ZW4gd2hlbiBpdCBtYXRjaGVzIGEgdGFnLgorCVRoaXMgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gc2VlIHBhcnRzIG9mIHRoZSBjb21taXQgb2JqZWN0IG5hbWUKKwlpbiAiZGVzY3JpYmUiIG91dHB1dCwgZXZlbiB3aGVuIHRoZSBjb21taXQgaW4gcXVlc3Rpb24gaGFwcGVucyB0byBiZQorCWEgdGFnZ2VkIHZlcnNpb24uICBJbnN0ZWFkIG9mIGp1c3QgZW1pdHRpbmcgdGhlIHRhZyBuYW1lLCBpdCB3aWxsCisJZGVzY3JpYmUgc3VjaCBhIGNvbW1pdCBhcyB2MS4yLTAtZ2RlYWRiZWUgKDB0aCBjb21taXQgc2luY2UgdGFnIHYxLjIKKwl0aGF0IHBvaW50cyBhdCBvYmplY3QgZGVhZGJlZS4uLi4pLgorCistLW1hdGNoIDxwYXR0ZXJuPjo6CisJT25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXR0ZXJuIChjYW4gYmUgdXNlZCB0byBhdm9pZAorCWxlYWtpbmcgcHJpdmF0ZSB0YWdzIG1hZGUgZnJvbSB0aGUgcmVwb3NpdG9yeSkuCisKKy0tYWx3YXlzOjoKKwlTaG93IHVuaXF1ZWx5IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2suCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitXaXRoIHNvbWV0aGluZyBsaWtlIGdpdC5naXQgY3VycmVudCB0cmVlLCBJIGdldDoKKworCVt0b3J2YWxkc0BnNSBnaXRdJCBnaXQgZGVzY3JpYmUgcGFyZW50CisJdjEuMC40LTE0LWcyNDE0NzIxCisKK2kuZS4gdGhlIGN1cnJlbnQgaGVhZCBvZiBteSAicGFyZW50IiBicmFuY2ggaXMgYmFzZWQgb24gdjEuMC40LAorYnV0IHNpbmNlIGl0IGhhcyBhIGZldyBjb21taXRzIG9uIHRvcCBvZiB0aGF0LAorZGVzY3JpYmUgaGFzIGFkZGVkIHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb21taXRzICgiMTQiKSBhbmQKK2FuIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lIGZvciB0aGUgY29tbWl0IGl0c2VsZiAoIjI0MTQ3MjEiKQorYXQgdGhlIGVuZC4KKworVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGNvbW1pdHMgaXMgdGhlIG51bWJlcgorb2YgY29tbWl0cyB3aGljaCB3b3VsZCBiZSBkaXNwbGF5ZWQgYnkgImdpdCBsb2cgdjEuMC40Li5wYXJlbnQiLgorVGhlIGhhc2ggc3VmZml4IGlzICItZyIgKyA3LWNoYXIgYWJicmV2aWF0aW9uIGZvciB0aGUgdGlwIGNvbW1pdAorb2YgcGFyZW50ICh3aGljaCB3YXMgYDI0MTQ3MjFiMTk0NDUzZjA1ODA3OWQ4OTdkMTNjNGUzNzdmOTJkYzZgKS4KK1RoZSAiZyIgcHJlZml4IHN0YW5kcyBmb3IgImdpdCIgYW5kIGlzIHVzZWQgdG8gYWxsb3cgZGVzY3JpYmluZyB0aGUgdmVyc2lvbiBvZgorYSBzb2Z0d2FyZSBkZXBlbmRpbmcgb24gdGhlIFNDTSB0aGUgc29mdHdhcmUgaXMgbWFuYWdlZCB3aXRoLiBUaGlzIGlzIHVzZWZ1bAoraW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgcGVvcGxlIG1heSB1c2UgZGlmZmVyZW50IFNDTXMuCisKK0RvaW5nIGEgJ2dpdCBkZXNjcmliZScgb24gYSB0YWctbmFtZSB3aWxsIGp1c3Qgc2hvdyB0aGUgdGFnIG5hbWU6CisKKwlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0IGRlc2NyaWJlIHYxLjAuNAorCXYxLjAuNAorCitXaXRoIC0tYWxsLCB0aGUgY29tbWFuZCBjYW4gdXNlIGJyYW5jaCBoZWFkcyBhcyByZWZlcmVuY2VzLCBzbwordGhlIG91dHB1dCBzaG93cyB0aGUgcmVmZXJlbmNlIHBhdGggYXMgd2VsbDoKKworCVt0b3J2YWxkc0BnNSBnaXRdJCBnaXQgZGVzY3JpYmUgLS1hbGwgLS1hYmJyZXY9NCB2MS4wLjVeMgorCXRhZ3MvdjEuMC4wLTIxLWc5NzViCisKKwlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0IGRlc2NyaWJlIC0tYWxsIC0tYWJicmV2PTQgSEVBRF4KKwloZWFkcy9sdC9kZXNjcmliZS03LWc5NzViCisKK1dpdGggLS1hYmJyZXYgc2V0IHRvIDAsIHRoZSBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlCitjbG9zZXN0IHRhZ25hbWUgd2l0aG91dCBhbnkgc3VmZml4OgorCisJW3RvcnZhbGRzQGc1IGdpdF0kIGdpdCBkZXNjcmliZSAtLWFiYnJldj0wIHYxLjAuNV4yCisJdGFncy92MS4wLjAKKworTm90ZSB0aGF0IHRoZSBzdWZmaXggeW91IGdldCBpZiB5b3UgdHlwZSB0aGVzZSBjb21tYW5kcyB0b2RheSBtYXkgYmUKK2xvbmdlciB0aGFuIHdoYXQgTGludXMgc2F3IGFib3ZlIHdoZW4gaGUgcmFuIHRoZXNlIGNvbW1hbmRzLCBhcyB5b3VyCitnaXQgcmVwb3NpdG9yeSBtYXkgaGF2ZSBuZXcgY29tbWl0cyB3aG9zZSBvYmplY3QgbmFtZXMgYmVnaW4gd2l0aAorOTc1YiB0aGF0IGRpZCBub3QgZXhpc3QgYmFjayB0aGVuLCBhbmQgIi1nOTc1YiIgc3VmZml4IGFsb25lIG1heSBub3QKK2JlIHN1ZmZpY2llbnQgdG8gZGlzYW1iaWd1YXRlIHRoZXNlIGNvbW1pdHMuCisKKworU0VBUkNIIFNUUkFURUdZCistLS0tLS0tLS0tLS0tLS0KKworRm9yIGVhY2ggY29tbWl0dGlzaCBzdXBwbGllZCwgJ2dpdCBkZXNjcmliZScgd2lsbCBmaXJzdCBsb29rIGZvcgorYSB0YWcgd2hpY2ggdGFncyBleGFjdGx5IHRoYXQgY29tbWl0LiAgQW5ub3RhdGVkIHRhZ3Mgd2lsbCBhbHdheXMKK2JlIHByZWZlcnJlZCBvdmVyIGxpZ2h0d2VpZ2h0IHRhZ3MsIGFuZCB0YWdzIHdpdGggbmV3ZXIgZGF0ZXMgd2lsbAorYWx3YXlzIGJlIHByZWZlcnJlZCBvdmVyIHRhZ3Mgd2l0aCBvbGRlciBkYXRlcy4gIElmIGFuIGV4YWN0IG1hdGNoCitpcyBmb3VuZCwgaXRzIG5hbWUgd2lsbCBiZSBvdXRwdXQgYW5kIHNlYXJjaGluZyB3aWxsIHN0b3AuCisKK0lmIGFuIGV4YWN0IG1hdGNoIHdhcyBub3QgZm91bmQsICdnaXQgZGVzY3JpYmUnIHdpbGwgd2FsayBiYWNrCit0aHJvdWdoIHRoZSBjb21taXQgaGlzdG9yeSB0byBsb2NhdGUgYW4gYW5jZXN0b3IgY29tbWl0IHdoaWNoCitoYXMgYmVlbiB0YWdnZWQuICBUaGUgYW5jZXN0b3IncyB0YWcgd2lsbCBiZSBvdXRwdXQgYWxvbmcgd2l0aCBhbgorYWJicmV2aWF0aW9uIG9mIHRoZSBpbnB1dCBjb21taXR0aXNoJ3MgU0hBMS4KKworSWYgbXVsdGlwbGUgdGFncyB3ZXJlIGZvdW5kIGR1cmluZyB0aGUgd2FsayB0aGVuIHRoZSB0YWcgd2hpY2gKK2hhcyB0aGUgZmV3ZXN0IGNvbW1pdHMgZGlmZmVyZW50IGZyb20gdGhlIGlucHV0IGNvbW1pdHRpc2ggd2lsbCBiZQorc2VsZWN0ZWQgYW5kIG91dHB1dC4gIEhlcmUgZmV3ZXN0IGNvbW1pdHMgZGlmZmVyZW50IGlzIGRlZmluZWQgYXMKK3RoZSBudW1iZXIgb2YgY29tbWl0cyB3aGljaCB3b3VsZCBiZSBzaG93biBieSBgZ2l0IGxvZyB0YWcuLmlucHV0YAord2lsbCBiZSB0aGUgc21hbGxlc3QgbnVtYmVyIG9mIGNvbW1pdHMgcG9zc2libGUuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWZpbGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY3NzRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQKQEAgLTAsMCArMSw1MiBAQAorZ2l0LWRpZmYtZmlsZXMoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kaWZmLWZpbGVzIC0gQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGRpZmYtZmlsZXMnIFstcV0gWy0wfC0xfC0yfC0zfC1jfC0tY2NdIFs8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQ29tcGFyZXMgdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleC4gIFdoZW4gcGF0aHMKK2FyZSBzcGVjaWZpZWQsIGNvbXBhcmVzIG9ubHkgdGhvc2UgbmFtZWQgcGF0aHMuICBPdGhlcndpc2UgYWxsCitlbnRyaWVzIGluIHRoZSBpbmRleCBhcmUgY29tcGFyZWQuICBUaGUgb3V0cHV0IGZvcm1hdCBpcyB0aGUKK3NhbWUgYXMgZm9yICdnaXQgZGlmZi1pbmRleCcgYW5kICdnaXQgZGlmZi10cmVlJy4KKworT1BUSU9OUworLS0tLS0tLQoraW5jbHVkZTo6ZGlmZi1vcHRpb25zLnR4dFtdCisKKy0xIC0tYmFzZTo6CistMiAtLW91cnM6OgorLTMgLS10aGVpcnM6OgorLTA6OgorCURpZmYgYWdhaW5zdCB0aGUgImJhc2UiIHZlcnNpb24sICJvdXIgYnJhbmNoIiBvciAidGhlaXIKKwlicmFuY2giIHJlc3BlY3RpdmVseS4gIFdpdGggdGhlc2Ugb3B0aW9ucywgZGlmZnMgZm9yCisJbWVyZ2VkIGVudHJpZXMgYXJlIG5vdCBzaG93bi4KKysKK1RoZSBkZWZhdWx0IGlzIHRvIGRpZmYgYWdhaW5zdCBvdXIgYnJhbmNoICgtMikgYW5kIHRoZQorY2xlYW5seSByZXNvbHZlZCBwYXRocy4gIFRoZSBvcHRpb24gLTAgY2FuIGJlIGdpdmVuIHRvCitvbWl0IGRpZmYgb3V0cHV0IGZvciB1bm1lcmdlZCBlbnRyaWVzIGFuZCBqdXN0IHNob3cgIlVubWVyZ2VkIi4KKworLWM6OgorLS1jYzo6CisJVGhpcyBjb21wYXJlcyBzdGFnZSAyIChvdXIgYnJhbmNoKSwgc3RhZ2UgMyAodGhlaXIKKwlicmFuY2gpIGFuZCB0aGUgd29ya2luZyB0cmVlIGZpbGUgYW5kIG91dHB1dHMgYSBjb21iaW5lZAorCWRpZmYsIHNpbWlsYXIgdG8gdGhlIHdheSAnZGlmZi10cmVlJyBzaG93cyBhIG1lcmdlCisJY29tbWl0IHdpdGggdGhlc2UgZmxhZ3MuCisKKy1xOjoKKwlSZW1haW4gc2lsZW50IGV2ZW4gb24gbm9uZXhpc3RlbnQgZmlsZXMKKworCitpbmNsdWRlOjpkaWZmLWZvcm1hdC50eHRbXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiN2M1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CkBAIC0wLDAgKzEsMTIyIEBACitnaXQtZGlmZi1pbmRleCgxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWRpZmYtaW5kZXggLSBDb21wYXJlcyBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGJldHdlZW4gdGhlIGluZGV4IGFuZCByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGRpZmYtaW5kZXgnIFstbV0gWy0tY2FjaGVkXSBbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgdGhlIGJsb2JzIGZvdW5kIHZpYSBhIHRyZWUKK29iamVjdCB3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IGluZGV4IGFuZCwgb3B0aW9uYWxseQoraWdub3JpbmcgdGhlIHN0YXQgc3RhdGUgb2YgdGhlIGZpbGUgb24gZGlzay4gIFdoZW4gcGF0aHMgYXJlCitzcGVjaWZpZWQsIGNvbXBhcmVzIG9ubHkgdGhvc2UgbmFtZWQgcGF0aHMuICBPdGhlcndpc2UgYWxsCitlbnRyaWVzIGluIHRoZSBpbmRleCBhcmUgY29tcGFyZWQuCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCis8dHJlZS1pc2g+OjoKKwlUaGUgaWQgb2YgYSB0cmVlIG9iamVjdCB0byBkaWZmIGFnYWluc3QuCisKKy0tY2FjaGVkOjoKKwlkbyBub3QgY29uc2lkZXIgdGhlIG9uLWRpc2sgZmlsZSBhdCBhbGwKKworLW06OgorCUJ5IGRlZmF1bHQsIGZpbGVzIHJlY29yZGVkIGluIHRoZSBpbmRleCBidXQgbm90IGNoZWNrZWQKKwlvdXQgYXJlIHJlcG9ydGVkIGFzIGRlbGV0ZWQuICBUaGlzIGZsYWcgbWFrZXMKKwknZ2l0IGRpZmYtaW5kZXgnIHNheSB0aGF0IGFsbCBub24tY2hlY2tlZC1vdXQgZmlsZXMgYXJlIHVwCisJdG8gZGF0ZS4KKworaW5jbHVkZTo6ZGlmZi1mb3JtYXQudHh0W10KKworT3BlcmF0aW5nIE1vZGVzCistLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gdHJ1c3QgdGhlIGluZGV4IGZpbGUgZW50aXJlbHkKKyh1c2luZyB0aGUgJy0tY2FjaGVkJyBmbGFnKSBvciBhc2sgdGhlIGRpZmYgbG9naWMgdG8gc2hvdyBhbnkgZmlsZXMKK3RoYXQgZG9uJ3QgbWF0Y2ggdGhlIHN0YXQgc3RhdGUgYXMgYmVpbmcgInRlbnRhdGl2ZWx5IGNoYW5nZWQiLiAgQm90aAorb2YgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgdmVyeSB1c2VmdWwgaW5kZWVkLgorCitDYWNoZWQgTW9kZQorLS0tLS0tLS0tLS0KK0lmICctLWNhY2hlZCcgaXMgc3BlY2lmaWVkLCBpdCBhbGxvd3MgeW91IHRvIGFzazoKKworCXNob3cgbWUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gSEVBRCBhbmQgdGhlIGN1cnJlbnQgaW5kZXgKKwljb250ZW50cyAodGhlIG9uZXMgSSdkIHdyaXRlIHVzaW5nICdnaXQgd3JpdGUtdHJlZScpCisKK0ZvciBleGFtcGxlLCBsZXQncyBzYXkgdGhhdCB5b3UgaGF2ZSB3b3JrZWQgb24geW91ciB3b3JraW5nIGRpcmVjdG9yeSwgdXBkYXRlZAorc29tZSBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIGFyZSByZWFkeSB0byBjb21taXQuIFlvdSB3YW50IHRvIHNlZSBleGFjdGx5Cisqd2hhdCogeW91IGFyZSBnb2luZyB0byBjb21taXQsIHdpdGhvdXQgaGF2aW5nIHRvIHdyaXRlIGEgbmV3IHRyZWUKK29iamVjdCBhbmQgY29tcGFyZSBpdCB0aGF0IHdheSwgYW5kIHRvIGRvIHRoYXQsIHlvdSBqdXN0IGRvCisKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFECisKK0V4YW1wbGU6IGxldCdzIHNheSBJIGhhZCByZW5hbWVkIGBjb21taXQuY2AgdG8gYGdpdC1jb21taXQuY2AsIGFuZCBJIGhhZAorZG9uZSBhbiBgdXBkYXRlLWluZGV4YCB0byBtYWtlIHRoYXQgZWZmZWN0aXZlIGluIHRoZSBpbmRleCBmaWxlLgorYGdpdCBkaWZmLWZpbGVzYCB3b3VsZG4ndCBzaG93IGFueXRoaW5nIGF0IGFsbCwgc2luY2UgdGhlIGluZGV4IGZpbGUKK21hdGNoZXMgbXkgd29ya2luZyBkaXJlY3RvcnkuIEJ1dCBkb2luZyBhICdnaXQgZGlmZi1pbmRleCcgZG9lczoKKworICB0b3J2YWxkc0BwcGM5NzA6fi9naXQ+IGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQKKyAgLTEwMDY0NCBibG9iICAgIDQxNjFhZWNjNjcwMGEyZWI1NzllODQyYWYwYjdmMjJiOTg0NDNmNzQgICAgICAgIGNvbW1pdC5jCisgICsxMDA2NDQgYmxvYiAgICA0MTYxYWVjYzY3MDBhMmViNTc5ZTg0MmFmMGI3ZjIyYjk4NDQzZjc0ICAgICAgICBnaXQtY29tbWl0LmMKKworWW91IGNhbiBzZWUgZWFzaWx5IHRoYXQgdGhlIGFib3ZlIGlzIGEgcmVuYW1lLgorCitJbiBmYWN0LCBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWRgICpzaG91bGQqIGFsd2F5cyBiZSBlbnRpcmVseSBlcXVpdmFsZW50IHRvCithY3R1YWxseSBkb2luZyBhICdnaXQgd3JpdGUtdHJlZScgYW5kIGNvbXBhcmluZyB0aGF0LiBFeGNlcHQgdGhpcyBvbmUgaXMgbXVjaAorbmljZXIgZm9yIHRoZSBjYXNlIHdoZXJlIHlvdSBqdXN0IHdhbnQgdG8gY2hlY2sgd2hlcmUgeW91IGFyZS4KKworU28gZG9pbmcgYSBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWRgIGlzIGJhc2ljYWxseSB2ZXJ5IHVzZWZ1bCB3aGVuIHlvdSBhcmUKK2Fza2luZyB5b3Vyc2VsZiAid2hhdCBoYXZlIEkgYWxyZWFkeSBtYXJrZWQgZm9yIGJlaW5nIGNvbW1pdHRlZCwgYW5kCit3aGF0J3MgdGhlIGRpZmZlcmVuY2UgdG8gYSBwcmV2aW91cyB0cmVlIi4KKworTm9uLWNhY2hlZCBNb2RlCistLS0tLS0tLS0tLS0tLS0KK1RoZSAibm9uLWNhY2hlZCIgbW9kZSB0YWtlcyBhIGRpZmZlcmVudCBhcHByb2FjaCwgYW5kIGlzIHBvdGVudGlhbGx5Cit0aGUgbW9yZSB1c2VmdWwgb2YgdGhlIHR3byBpbiB0aGF0IHdoYXQgaXQgZG9lcyBjYW4ndCBiZSBlbXVsYXRlZCB3aXRoCithICdnaXQgd3JpdGUtdHJlZScgKyAnZ2l0IGRpZmYtdHJlZScuIFRodXMgdGhhdCdzIHRoZSBkZWZhdWx0IG1vZGUuCitUaGUgbm9uLWNhY2hlZCB2ZXJzaW9uIGFza3MgdGhlIHF1ZXN0aW9uOgorCisgIHNob3cgbWUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gSEVBRCBhbmQgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dAorICB0cmVlIC0gaW5kZXggY29udGVudHMgX2FuZF8gZmlsZXMgdGhhdCBhcmVuJ3QgdXAtdG8tZGF0ZQorCit3aGljaCBpcyBvYnZpb3VzbHkgYSB2ZXJ5IHVzZWZ1bCBxdWVzdGlvbiB0b28sIHNpbmNlIHRoYXQgdGVsbHMgeW91IHdoYXQKK3lvdSAqY291bGQqIGNvbW1pdC4gQWdhaW4sIHRoZSBvdXRwdXQgbWF0Y2hlcyB0aGUgJ2dpdCBkaWZmLXRyZWUgLXInCitvdXRwdXQgdG8gYSB0ZWUsIGJ1dCB3aXRoIGEgdHdpc3QuCisKK1RoZSB0d2lzdCBpcyB0aGF0IGlmIHNvbWUgZmlsZSBkb2Vzbid0IG1hdGNoIHRoZSBpbmRleCwgd2UgZG9uJ3QgaGF2ZQorYSBiYWNraW5nIHN0b3JlIHRoaW5nIGZvciBpdCwgYW5kIHdlIHVzZSB0aGUgbWFnaWMgImFsbC16ZXJvIiBzaGExIHRvCitzaG93IHRoYXQuIFNvIGxldCdzIHNheSB0aGF0IHlvdSBoYXZlIGVkaXRlZCBga2VybmVsL3NjaGVkLmNgLCBidXQKK2hhdmUgbm90IGFjdHVhbGx5IGRvbmUgYSAnZ2l0IHVwZGF0ZS1pbmRleCcgb24gaXQgeWV0IC0gdGhlcmUgaXMgbm8KKyJvYmplY3QiIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IHN0YXRlLCBhbmQgeW91IGdldDoKKworICB0b3J2YWxkc0BwcGM5NzA6fi92Mi42L2xpbnV4PiBnaXQgZGlmZi1pbmRleCAtLWFiYnJldiBIRUFECisgIDoxMDA2NDQgMTAwNjY0IDc0NzZiYi4uLiAwMDAwMDAuLi4gICAgICBrZXJuZWwvc2NoZWQuYworCitpLmUuLCBpdCBzaG93cyB0aGF0IHRoZSB0cmVlIGhhcyBjaGFuZ2VkLCBhbmQgdGhhdCBga2VybmVsL3NjaGVkLmNgIGhhcyBpcworbm90IHVwLXRvLWRhdGUgYW5kIG1heSBjb250YWluIG5ldyBzdHVmZi4gVGhlIGFsbC16ZXJvIHNoYTEgbWVhbnMgdGhhdCB0bworZ2V0IHRoZSByZWFsIGRpZmYsIHlvdSBuZWVkIHRvIGxvb2sgYXQgdGhlIG9iamVjdCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkKK2RpcmVjdGx5IHJhdGhlciB0aGFuIGRvIGFuIG9iamVjdC10by1vYmplY3QgZGlmZi4KKworTk9URTogQXMgd2l0aCBvdGhlciBjb21tYW5kcyBvZiB0aGlzIHR5cGUsICdnaXQgZGlmZi1pbmRleCcgZG9lcyBub3QKK2FjdHVhbGx5IGxvb2sgYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGF0IGFsbC4gU28gbWF5YmUKK2BrZXJuZWwvc2NoZWQuY2AgaGFzbid0IGFjdHVhbGx5IGNoYW5nZWQsIGFuZCBpdCdzIGp1c3QgdGhhdCB5b3UKK3RvdWNoZWQgaXQuIEluIGVpdGhlciBjYXNlLCBpdCdzIGEgbm90ZSB0aGF0IHlvdSBuZWVkIHRvCisnZ2l0IHVwZGF0ZS1pbmRleCcgaXQgdG8gbWFrZSB0aGUgaW5kZXggYmUgaW4gc3luYy4KKworTk9URTogWW91IGNhbiBoYXZlIGEgbWl4dHVyZSBvZiBmaWxlcyBzaG93IHVwIGFzICJoYXMgYmVlbiB1cGRhdGVkIgorYW5kICJpcyBzdGlsbCBkaXJ0eSBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkiIHRvZ2V0aGVyLiBZb3UgY2FuIGFsd2F5cwordGVsbCB3aGljaCBmaWxlIGlzIGluIHdoaWNoIHN0YXRlLCBzaW5jZSB0aGUgImhhcyBiZWVuIHVwZGF0ZWQiIG9uZXMKK3Nob3cgYSB2YWxpZCBzaGExLCBhbmQgdGhlICJub3QgaW4gc3luYyB3aXRoIHRoZSBpbmRleCIgb25lcyB3aWxsCithbHdheXMgaGF2ZSB0aGUgc3BlY2lhbCBhbGwtemVybyBzaGExLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Mzk0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0CkBAIC0wLDAgKzEsMTY3IEBACitnaXQtZGlmZi10cmVlKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kaWZmLXRyZWUgLSBDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkaWZmLXRyZWUnIFstLXN0ZGluXSBbLW1dIFstc10gWy12XSBbLS1uby1jb21taXQtaWRdIFstLXByZXR0eV0KKwkgICAgICBbLXRdIFstcl0gWy1jIHwgLS1jY10gWy0tcm9vdF0gWzxjb21tb24gZGlmZiBvcHRpb25zPl0KKwkgICAgICA8dHJlZS1pc2g+IFs8dHJlZS1pc2g+XSBbPHBhdGg+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIHRoZSBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cy4KKworSWYgdGhlcmUgaXMgb25seSBvbmUgPHRyZWUtaXNoPiBnaXZlbiwgdGhlIGNvbW1pdCBpcyBjb21wYXJlZCB3aXRoIGl0cyBwYXJlbnRzCisoc2VlIC0tc3RkaW4gYmVsb3cpLgorCitOb3RlIHRoYXQgJ2dpdCBkaWZmLXRyZWUnIGNhbiB1c2UgdGhlIHRyZWUgZW5jYXBzdWxhdGVkIGluIGEgY29tbWl0IG9iamVjdC4KKworT1BUSU9OUworLS0tLS0tLQoraW5jbHVkZTo6ZGlmZi1vcHRpb25zLnR4dFtdCisKKzx0cmVlLWlzaD46OgorCVRoZSBpZCBvZiBhIHRyZWUgb2JqZWN0LgorCis8cGF0aD4uLi46OgorCUlmIHByb3ZpZGVkLCB0aGUgcmVzdWx0cyBhcmUgbGltaXRlZCB0byBhIHN1YnNldCBvZiBmaWxlcworCW1hdGNoaW5nIG9uZSBvZiB0aGVzZSBwcmVmaXggc3RyaW5ncy4KKwlpLmUuLCBmaWxlIG1hdGNoZXMgYC9ePHBhdHRlcm4xPnw8cGF0dGVybjI+fC4uLi9gCisJTm90ZSB0aGF0IHRoaXMgcGFyYW1ldGVyIGRvZXMgbm90IHByb3ZpZGUgYW55IHdpbGRjYXJkIG9yIHJlZ2V4cAorCWZlYXR1cmVzLgorCistcjo6CisgICAgICAgIHJlY3Vyc2UgaW50byBzdWItdHJlZXMKKworLXQ6OgorCXNob3cgdHJlZSBlbnRyeSBpdHNlbGYgYXMgd2VsbCBhcyBzdWJ0cmVlcy4gIEltcGxpZXMgLXIuCisKKy0tcm9vdDo6CisJV2hlbiAnLS1yb290JyBpcyBzcGVjaWZpZWQgdGhlIGluaXRpYWwgY29tbWl0IHdpbGwgYmUgc2hvd24gYXMgYSBiaWcKKwljcmVhdGlvbiBldmVudC4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgZGlmZiBhZ2FpbnN0IHRoZSBOVUxMIHRyZWUuCisKKy0tc3RkaW46OgorCVdoZW4gJy0tc3RkaW4nIGlzIHNwZWNpZmllZCwgdGhlIGNvbW1hbmQgZG9lcyBub3QgdGFrZQorCTx0cmVlLWlzaD4gYXJndW1lbnRzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIEluc3RlYWQsIGl0CisJcmVhZHMgbGluZXMgY29udGFpbmluZyBlaXRoZXIgdHdvIDx0cmVlPiwgb25lIDxjb21taXQ+LCBvciBhCisJbGlzdCBvZiA8Y29tbWl0PiBmcm9tIGl0cyBzdGFuZGFyZCBpbnB1dC4gIChVc2UgYSBzaW5nbGUgc3BhY2UKKwlhcyBzZXBhcmF0b3IuKQorKworV2hlbiB0d28gdHJlZXMgYXJlIGdpdmVuLCBpdCBjb21wYXJlcyB0aGUgZmlyc3QgdHJlZSB3aXRoIHRoZSBzZWNvbmQuCitXaGVuIGEgc2luZ2xlIGNvbW1pdCBpcyBnaXZlbiwgaXQgY29tcGFyZXMgdGhlIGNvbW1pdCB3aXRoIGl0cworcGFyZW50cy4gIFRoZSByZW1haW5pbmcgY29tbWl0cywgd2hlbiBnaXZlbiwgYXJlIHVzZWQgYXMgaWYgdGhleSBhcmUKK3BhcmVudHMgb2YgdGhlIGZpcnN0IGNvbW1pdC4KKysKK1doZW4gY29tcGFyaW5nIHR3byB0cmVlcywgdGhlIElEIG9mIGJvdGggdHJlZXMgKHNlcGFyYXRlZCBieSBhIHNwYWNlCithbmQgdGVybWluYXRlZCBieSBhIG5ld2xpbmUpIGlzIHByaW50ZWQgYmVmb3JlIHRoZSBkaWZmZXJlbmNlLiAgV2hlbgorY29tcGFyaW5nIGNvbW1pdHMsIHRoZSBJRCBvZiB0aGUgZmlyc3QgKG9yIG9ubHkpIGNvbW1pdCwgZm9sbG93ZWQgYnkgYQorbmV3bGluZSwgaXMgcHJpbnRlZC4KKysKK1RoZSBmb2xsb3dpbmcgZmxhZ3MgZnVydGhlciBhZmZlY3QgdGhlIGJlaGF2aW9yIHdoZW4gY29tcGFyaW5nCitjb21taXRzIChidXQgbm90IHRyZWVzKS4KKworLW06OgorCUJ5IGRlZmF1bHQsICdnaXQgZGlmZi10cmVlIC0tc3RkaW4nIGRvZXMgbm90IHNob3cKKwlkaWZmZXJlbmNlcyBmb3IgbWVyZ2UgY29tbWl0cy4gIFdpdGggdGhpcyBmbGFnLCBpdCBzaG93cworCWRpZmZlcmVuY2VzIHRvIHRoYXQgY29tbWl0IGZyb20gYWxsIG9mIGl0cyBwYXJlbnRzLiBTZWUKKwlhbHNvICctYycuCisKKy1zOjoKKwlCeSBkZWZhdWx0LCAnZ2l0IGRpZmYtdHJlZSAtLXN0ZGluJyBzaG93cyBkaWZmZXJlbmNlcywKKwllaXRoZXIgaW4gbWFjaGluZS1yZWFkYWJsZSBmb3JtICh3aXRob3V0ICctcCcpIG9yIGluIHBhdGNoCisJZm9ybSAod2l0aCAnLXAnKS4gIFRoaXMgb3V0cHV0IGNhbiBiZSBzdXBwcmVzc2VkLiAgSXQgaXMKKwlvbmx5IHVzZWZ1bCB3aXRoICctdicgZmxhZy4KKworLXY6OgorCVRoaXMgZmxhZyBjYXVzZXMgJ2dpdCBkaWZmLXRyZWUgLS1zdGRpbicgdG8gYWxzbyBzaG93CisJdGhlIGNvbW1pdCBtZXNzYWdlIGJlZm9yZSB0aGUgZGlmZmVyZW5jZXMuCisKK2luY2x1ZGU6OnByZXR0eS1vcHRpb25zLnR4dFtdCisKKy0tbm8tY29tbWl0LWlkOjoKKwknZ2l0IGRpZmYtdHJlZScgb3V0cHV0cyBhIGxpbmUgd2l0aCB0aGUgY29tbWl0IElEIHdoZW4KKwlhcHBsaWNhYmxlLiAgVGhpcyBmbGFnIHN1cHByZXNzZWQgdGhlIGNvbW1pdCBJRCBvdXRwdXQuCisKKy1jOjoKKwlUaGlzIGZsYWcgY2hhbmdlcyB0aGUgd2F5IGEgbWVyZ2UgY29tbWl0IGlzIGRpc3BsYXllZAorCSh3aGljaCBtZWFucyBpdCBpcyB1c2VmdWwgb25seSB3aGVuIHRoZSBjb21tYW5kIGlzIGdpdmVuCisJb25lIDx0cmVlLWlzaD4sIG9yICctLXN0ZGluJykuICBJdCBzaG93cyB0aGUgZGlmZmVyZW5jZXMKKwlmcm9tIGVhY2ggb2YgdGhlIHBhcmVudHMgdG8gdGhlIG1lcmdlIHJlc3VsdCBzaW11bHRhbmVvdXNseQorCWluc3RlYWQgb2Ygc2hvd2luZyBwYWlyd2lzZSBkaWZmIGJldHdlZW4gYSBwYXJlbnQgYW5kIHRoZQorCXJlc3VsdCBvbmUgYXQgYSB0aW1lICh3aGljaCBpcyB3aGF0IHRoZSAnLW0nIG9wdGlvbiBkb2VzKS4KKwlGdXJ0aGVybW9yZSwgaXQgbGlzdHMgb25seSBmaWxlcyB3aGljaCB3ZXJlIG1vZGlmaWVkCisJZnJvbSBhbGwgcGFyZW50cy4KKworLS1jYzo6CisJVGhpcyBmbGFnIGNoYW5nZXMgdGhlIHdheSBhIG1lcmdlIGNvbW1pdCBwYXRjaCBpcyBkaXNwbGF5ZWQsCisJaW4gYSBzaW1pbGFyIHdheSB0byB0aGUgJy1jJyBvcHRpb24uIEl0IGltcGxpZXMgdGhlICctYycKKwlhbmQgJy1wJyBvcHRpb25zIGFuZCBmdXJ0aGVyIGNvbXByZXNzZXMgdGhlIHBhdGNoIG91dHB1dAorCWJ5IG9taXR0aW5nIHVuaW50ZXJlc3RpbmcgaHVua3Mgd2hvc2UgdGhlIGNvbnRlbnRzIGluIHRoZSBwYXJlbnRzCisJaGF2ZSBvbmx5IHR3byB2YXJpYW50cyBhbmQgdGhlIG1lcmdlIHJlc3VsdCBwaWNrcyBvbmUgb2YgdGhlbQorCXdpdGhvdXQgbW9kaWZpY2F0aW9uLiAgV2hlbiBhbGwgaHVua3MgYXJlIHVuaW50ZXJlc3RpbmcsIHRoZSBjb21taXQKKwlpdHNlbGYgYW5kIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgaXMgbm90IHNob3duLCBqdXN0IGxpa2UgaW4gYW55IG90aGVyCisJImVtcHR5IGRpZmYiIGNhc2UuCisKKy0tYWx3YXlzOjoKKwlTaG93IHRoZSBjb21taXQgaXRzZWxmIGFuZCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGV2ZW4KKwlpZiB0aGUgZGlmZiBpdHNlbGYgaXMgZW1wdHkuCisKKworaW5jbHVkZTo6cHJldHR5LWZvcm1hdHMudHh0W10KKworCitMaW1pdGluZyBPdXRwdXQKKy0tLS0tLS0tLS0tLS0tLQorSWYgeW91J3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBkaWZmZXJlbmNlcyBpbiBhIHN1YnNldCBvZiBmaWxlcywgZm9yCitleGFtcGxlIHNvbWUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzLCB5b3UgbWlnaHQgZG86CisKKwlnaXQgZGlmZi10cmVlIC1yIDx0cmVlLWlzaD4gPHRyZWUtaXNoPiBhcmNoL2lhNjQgaW5jbHVkZS9hc20taWE2NAorCithbmQgaXQgd2lsbCBvbmx5IHNob3cgeW91IHdoYXQgY2hhbmdlZCBpbiB0aG9zZSB0d28gZGlyZWN0b3JpZXMuCisKK09yIGlmIHlvdSBhcmUgc2VhcmNoaW5nIGZvciB3aGF0IGNoYW5nZWQgaW4ganVzdCBga2VybmVsL3NjaGVkLmNgLCBqdXN0IGRvCisKKwlnaXQgZGlmZi10cmVlIC1yIDx0cmVlLWlzaD4gPHRyZWUtaXNoPiBrZXJuZWwvc2NoZWQuYworCithbmQgaXQgd2lsbCBpZ25vcmUgYWxsIGRpZmZlcmVuY2VzIHRvIG90aGVyIGZpbGVzLgorCitUaGUgcGF0dGVybiBpcyBhbHdheXMgdGhlIHByZWZpeCwgYW5kIGlzIG1hdGNoZWQgZXhhY3RseS4gIFRoZXJlIGFyZSBubword2lsZGNhcmRzLiAgRXZlbiBzdHJpY3RlciwgaXQgaGFzIHRvIG1hdGNoIGEgY29tcGxldGUgcGF0aCBjb21wb25lbnQuCitJLmUuICJmb28iIGRvZXMgbm90IHBpY2sgdXAgYGZvb2Jhci5oYC4gICJmb28iIGRvZXMgbWF0Y2ggYGZvby9iYXIuaGAKK3NvIGl0IGNhbiBiZSB1c2VkIHRvIG5hbWUgc3ViZGlyZWN0b3JpZXMuCisKK0FuIGV4YW1wbGUgb2Ygbm9ybWFsIHVzYWdlIGlzOgorCisgIHRvcnZhbGRzQHBwYzk3MDp+L2dpdD4gZ2l0IGRpZmYtdHJlZSAtLWFiYnJldiA1MzE5ZTQKKyAgOjEwMDY2NCAxMDA2NjQgYWMzNDhiLi4uIGEwMTUxMy4uLglnaXQtZnNjay1vYmplY3RzLmMKKword2hpY2ggdGVsbHMgeW91IHRoYXQgdGhlIGxhc3QgY29tbWl0IGNoYW5nZWQganVzdCBvbmUgZmlsZSAoaXQncyBmcm9tCit0aGlzIG9uZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvbW1pdCAzYzZmN2NhMTlhZDQwNDNlOWU3MmZhOTQxMDZmMzUyODk3ZTY1MWE4Cit0cmVlIDUzMTllNGQ2MDljZGQyODIwNjljYzRkY2UzM2MxZGI1NTk1MzliMDMKK3BhcmVudCBiNGU2MjhlYTMwZDVhYjM2MDYxMTlkMmVhNWNhZWFiMTQxZDM4ZGY3CithdXRob3IgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQHBwYzk3MC5vc2RsLm9yZz4gU2F0IEFwciA5IDEyOjAyOjMwIDIwMDUKK2NvbW1pdHRlciBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAcHBjOTcwLm9zZGwub3JnPiBTYXQgQXByIDkgMTI6MDI6MzAgMjAwNQorCitNYWtlICJnaXQtZnNjay1vYmplY3RzIiBwcmludCBvdXQgYWxsIHRoZSByb290IGNvbW1pdHMgaXQgZmluZHMuCisKK09uY2UgSSBkbyB0aGUgcmVmZXJlbmNlIHRyYWNraW5nLCBJJ2xsIGFsc28gbWFrZSBpdCBwcmludCBvdXQgYWxsIHRoZQorSEVBRCBjb21taXRzIGl0IGZpbmRzLCB3aGljaCBpcyBldmVuIG1vcmUgaW50ZXJlc3RpbmcuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbiBjYXNlIHlvdSBjYXJlKS4KKworCitpbmNsdWRlOjpkaWZmLWZvcm1hdC50eHRbXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkMDgxOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CkBAIC0wLDAgKzEsMTc5IEBACitnaXQtZGlmZigxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWRpZmYgLSBTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGRpZmYnIFtvcHRpb25zXSBbPGNvbW1pdD5dIFstLV0gWzxwYXRoPi4uLl0KKydnaXQgZGlmZicgW29wdGlvbnNdIC0tY2FjaGVkIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBkaWZmJyBbb3B0aW9uc10gPGNvbW1pdD4gPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBkaWZmJyBbb3B0aW9uc10gWy0tbm8taW5kZXhdIFstLV0gPHBhdGg+IDxwYXRoPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1Nob3cgY2hhbmdlcyBiZXR3ZWVuIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBvciBhIHRyZWUsIGNoYW5nZXMKK2JldHdlZW4gdGhlIGluZGV4IGFuZCBhIHRyZWUsIGNoYW5nZXMgYmV0d2VlbiB0d28gdHJlZXMsIG9yIGNoYW5nZXMKK2JldHdlZW4gdHdvIGZpbGVzIG9uIGRpc2suCisKKydnaXQgZGlmZicgWy0tb3B0aW9uc10gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgY2hhbmdlcyB5b3UgbWFkZSByZWxhdGl2ZSB0bworCXRoZSBpbmRleCAoc3RhZ2luZyBhcmVhIGZvciB0aGUgbmV4dCBjb21taXQpLiAgSW4gb3RoZXIKKwl3b3JkcywgdGhlIGRpZmZlcmVuY2VzIGFyZSB3aGF0IHlvdSBfY291bGRfIHRlbGwgZ2l0IHRvCisJZnVydGhlciBhZGQgdG8gdGhlIGluZGV4IGJ1dCB5b3Ugc3RpbGwgaGF2ZW4ndC4gIFlvdSBjYW4KKwlzdGFnZSB0aGVzZSBjaGFuZ2VzIGJ5IHVzaW5nIGxpbmtnaXQ6Z2l0LWFkZFsxXS4KKysKK0lmIGV4YWN0bHkgdHdvIHBhdGhzIGFyZSBnaXZlbiBhbmQgYXQgbGVhc3Qgb25lIHBvaW50cyBvdXRzaWRlCit0aGUgY3VycmVudCByZXBvc2l0b3J5LCAnZ2l0IGRpZmYnIHdpbGwgY29tcGFyZSB0aGUgdHdvIGZpbGVzIC8KK2RpcmVjdG9yaWVzLiBUaGlzIGJlaGF2aW9yIGNhbiBiZSBmb3JjZWQgYnkgLS1uby1pbmRleC4KKworJ2dpdCBkaWZmJyBbLS1vcHRpb25zXSAtLWNhY2hlZCBbPGNvbW1pdD5dIFstLV0gWzxwYXRoPi4uLl06OgorCisJVGhpcyBmb3JtIGlzIHRvIHZpZXcgdGhlIGNoYW5nZXMgeW91IHN0YWdlZCBmb3IgdGhlIG5leHQKKwljb21taXQgcmVsYXRpdmUgdG8gdGhlIG5hbWVkIDxjb21taXQ+LiAgVHlwaWNhbGx5IHlvdQorCXdvdWxkIHdhbnQgY29tcGFyaXNvbiB3aXRoIHRoZSBsYXRlc3QgY29tbWl0LCBzbyBpZiB5b3UKKwlkbyBub3QgZ2l2ZSA8Y29tbWl0PiwgaXQgZGVmYXVsdHMgdG8gSEVBRC4KKwlJZiBIRUFEIGRvZXMgbm90IGV4aXN0IChlLmcuIHVuYm9ybmVkIGJyYW5jaGVzKSBhbmQKKwk8Y29tbWl0PiBpcyBub3QgZ2l2ZW4sIGl0IHNob3dzIGFsbCBzdGFnZWQgY2hhbmdlcy4KKwktLXN0YWdlZCBpcyBhIHN5bm9ueW0gb2YgLS1jYWNoZWQuCisKKydnaXQgZGlmZicgWy0tb3B0aW9uc10gPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgY2hhbmdlcyB5b3UgaGF2ZSBpbiB5b3VyCisJd29ya2luZyB0cmVlIHJlbGF0aXZlIHRvIHRoZSBuYW1lZCA8Y29tbWl0Pi4gIFlvdSBjYW4KKwl1c2UgSEVBRCB0byBjb21wYXJlIGl0IHdpdGggdGhlIGxhdGVzdCBjb21taXQsIG9yIGEKKwlicmFuY2ggbmFtZSB0byBjb21wYXJlIHdpdGggdGhlIHRpcCBvZiBhIGRpZmZlcmVudAorCWJyYW5jaC4KKworJ2dpdCBkaWZmJyBbLS1vcHRpb25zXSA8Y29tbWl0PiA8Y29tbWl0PiBbLS1dIFs8cGF0aD4uLi5dOjoKKworCVRoaXMgaXMgdG8gdmlldyB0aGUgY2hhbmdlcyBiZXR3ZWVuIHR3byBhcmJpdHJhcnkKKwk8Y29tbWl0Pi4KKworJ2dpdCBkaWZmJyBbLS1vcHRpb25zXSA8Y29tbWl0Pi4uPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGlzIHN5bm9ueW1vdXMgdG8gdGhlIHByZXZpb3VzIGZvcm0uICBJZiA8Y29tbWl0PiBvbgorCW9uZSBzaWRlIGlzIG9taXR0ZWQsIGl0IHdpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMKKwl1c2luZyBIRUFEIGluc3RlYWQuCisKKydnaXQgZGlmZicgWy0tb3B0aW9uc10gPGNvbW1pdD5cLi4uPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgY2hhbmdlcyBvbiB0aGUgYnJhbmNoIGNvbnRhaW5pbmcKKwlhbmQgdXAgdG8gdGhlIHNlY29uZCA8Y29tbWl0Piwgc3RhcnRpbmcgYXQgYSBjb21tb24gYW5jZXN0b3IKKwlvZiBib3RoIDxjb21taXQ+LiAgImdpdCBkaWZmIEFcLi4uQiIgaXMgZXF1aXZhbGVudCB0bworCSJnaXQgZGlmZiAkKGdpdC1tZXJnZS1iYXNlIEEgQikgQiIuICBZb3UgY2FuIG9taXQgYW55IG9uZQorCW9mIDxjb21taXQ+LCB3aGljaCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHVzaW5nIEhFQUQgaW5zdGVhZC4KKworSnVzdCBpbiBjYXNlIGlmIHlvdSBhcmUgZG9pbmcgc29tZXRoaW5nIGV4b3RpYywgaXQgc2hvdWxkIGJlCitub3RlZCB0aGF0IGFsbCBvZiB0aGUgPGNvbW1pdD4gaW4gdGhlIGFib3ZlIGRlc2NyaXB0aW9uLCBleGNlcHQKK2luIHRoZSBsYXN0IHR3byBmb3JtcyB0aGF0IHVzZSAiLi4iIG5vdGF0aW9ucywgY2FuIGJlIGFueQorPHRyZWU+LiAgVGhlIHRoaXJkIGZvcm0gKCdnaXQgZGlmZiA8Y29tbWl0PiA8Y29tbWl0PicpIGNhbiBhbHNvCitiZSB1c2VkIHRvIGNvbXBhcmUgdHdvIDxibG9iPiBvYmplY3RzLgorCitGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCA8Y29tbWl0Piwgc2VlCisiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCitIb3dldmVyLCAiZGlmZiIgaXMgYWJvdXQgY29tcGFyaW5nIHR3byBfZW5kcG9pbnRzXywgbm90IHJhbmdlcywKK2FuZCB0aGUgcmFuZ2Ugbm90YXRpb25zICgiPGNvbW1pdD4uLjxjb21taXQ+IiBhbmQKKyI8Y29tbWl0PlwuLi48Y29tbWl0PiIpIGRvIG5vdCBtZWFuIGEgcmFuZ2UgYXMgZGVmaW5lZCBpbiB0aGUKKyJTUEVDSUZZSU5HIFJBTkdFUyIgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKworT1BUSU9OUworLS0tLS0tLQorOmdpdC1kaWZmOiAxCitpbmNsdWRlOjpkaWZmLW9wdGlvbnMudHh0W10KKworPHBhdGg+Li4uOjoKKwlUaGUgPHBhdGhzPiBwYXJhbWV0ZXJzLCB3aGVuIGdpdmVuLCBhcmUgdXNlZCB0byBsaW1pdAorCXRoZSBkaWZmIHRvIHRoZSBuYW1lZCBwYXRocyAoeW91IGNhbiBnaXZlIGRpcmVjdG9yeQorCW5hbWVzIGFuZCBnZXQgZGlmZiBmb3IgYWxsIGZpbGVzIHVuZGVyIHRoZW0pLgorCisKK2luY2x1ZGU6OmRpZmYtZm9ybWF0LnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitWYXJpb3VzIHdheXMgdG8gY2hlY2sgeW91ciB3b3JraW5nIHRyZWU6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmICAgICAgICAgICAgPDE+CiskIGdpdCBkaWZmIC0tY2FjaGVkICAgPDI+CiskIGdpdCBkaWZmIEhFQUQgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBDaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgbm90IHlldCBzdGFnZWQgZm9yIHRoZSBuZXh0IGNvbW1pdC4KKzwyPiBDaGFuZ2VzIGJldHdlZW4gdGhlIGluZGV4IGFuZCB5b3VyIGxhc3QgY29tbWl0OyB3aGF0IHlvdQord291bGQgYmUgY29tbWl0dGluZyBpZiB5b3UgcnVuICJnaXQgY29tbWl0IiB3aXRob3V0ICItYSIgb3B0aW9uLgorPDM+IENoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBzaW5jZSB5b3VyIGxhc3QgY29tbWl0OyB3aGF0IHlvdQord291bGQgYmUgY29tbWl0dGluZyBpZiB5b3UgcnVuICJnaXQgY29tbWl0IC1hIgorCitDb21wYXJpbmcgd2l0aCBhcmJpdHJhcnkgY29tbWl0czo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgdGVzdCAgICAgICAgICAgIDwxPgorJCBnaXQgZGlmZiBIRUFEIC0tIC4vdGVzdCAgPDI+CiskIGdpdCBkaWZmIEhFQUReIEhFQUQgICAgICA8Mz4KKy0tLS0tLS0tLS0tLQorKworPDE+IEluc3RlYWQgb2YgdXNpbmcgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2gsIGNvbXBhcmUgd2l0aCB0aGUKK3RpcCBvZiAidGVzdCIgYnJhbmNoLgorPDI+IEluc3RlYWQgb2YgY29tcGFyaW5nIHdpdGggdGhlIHRpcCBvZiAidGVzdCIgYnJhbmNoLCBjb21wYXJlIHdpdGgKK3RoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoLCBidXQgbGltaXQgdGhlIGNvbXBhcmlzb24gdG8gdGhlCitmaWxlICJ0ZXN0Ii4KKzwzPiBDb21wYXJlIHRoZSB2ZXJzaW9uIGJlZm9yZSB0aGUgbGFzdCBjb21taXQgYW5kIHRoZSBsYXN0IGNvbW1pdC4KKworQ29tcGFyaW5nIGJyYW5jaGVzOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiB0b3BpYyBtYXN0ZXIgICAgPDE+CiskIGdpdCBkaWZmIHRvcGljLi5tYXN0ZXIgICA8Mj4KKyQgZ2l0IGRpZmYgdG9waWMuLi5tYXN0ZXIgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gQ2hhbmdlcyBiZXR3ZWVuIHRoZSB0aXBzIG9mIHRoZSB0b3BpYyBhbmQgdGhlIG1hc3RlciBicmFuY2hlcy4KKzwyPiBTYW1lIGFzIGFib3ZlLgorPDM+IENoYW5nZXMgdGhhdCBvY2N1cnJlZCBvbiB0aGUgbWFzdGVyIGJyYW5jaCBzaW5jZSB3aGVuIHRoZSB0b3BpYworYnJhbmNoIHdhcyBzdGFydGVkIG9mZiBpdC4KKworTGltaXRpbmcgdGhlIGRpZmYgb3V0cHV0OjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiAtLWRpZmYtZmlsdGVyPU1SQyAgICAgICAgICAgIDwxPgorJCBnaXQgZGlmZiAtLW5hbWUtc3RhdHVzICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgZGlmZiBhcmNoL2kzODYgaW5jbHVkZS9hc20taTM4NiAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gU2hvdyBvbmx5IG1vZGlmaWNhdGlvbiwgcmVuYW1lIGFuZCBjb3B5LCBidXQgbm90IGFkZGl0aW9uCitub3IgZGVsZXRpb24uCis8Mj4gU2hvdyBvbmx5IG5hbWVzIGFuZCB0aGUgbmF0dXJlIG9mIGNoYW5nZSwgYnV0IG5vdCBhY3R1YWwKK2RpZmYgb3V0cHV0LgorPDM+IExpbWl0IGRpZmYgb3V0cHV0IHRvIG5hbWVkIHN1YnRyZWVzLgorCitNdW5naW5nIHRoZSBkaWZmIG91dHB1dDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgLS1maW5kLWNvcGllcy1oYXJkZXIgLUIgLUMgIDwxPgorJCBnaXQgZGlmZiAtUiAgICAgICAgICAgICAgICAgICAgICAgICAgPDI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCByZW5hbWVzLCBjb3BpZXMgYW5kIGNvbXBsZXRlCityZXdyaXRlcyAodmVyeSBleHBlbnNpdmUpLgorPDI+IE91dHB1dCBkaWZmIGluIHJldmVyc2UuCisKK1NFRSBBTFNPCistLS0tLS0tLQorZGlmZigxKSwKK2xpbmtnaXQ6Z2l0LWRpZmZ0b29sWzFdLAorbGlua2dpdDpnaXQtbG9nWzFdLAorbGlua2dpdDpnaXRkaWZmY29yZVs3XSwKK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwKK2xpbmtnaXQ6Z2l0LWFwcGx5WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczY2E3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmdG9vbC50eHQKQEAgLTAsMCArMSwxMzEgQEAKK2dpdC1kaWZmdG9vbCgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kaWZmdG9vbCAtIFNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGlmZnRvb2wnIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorJ2dpdCBkaWZmdG9vbCcgaXMgYSBnaXQgY29tbWFuZCB0aGF0IGFsbG93cyB5b3UgdG8gY29tcGFyZSBhbmQgZWRpdCBmaWxlcworYmV0d2VlbiByZXZpc2lvbnMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMuICAnZ2l0IGRpZmZ0b29sJyBpcyBhIGZyb250ZW5kCit0byAnZ2l0IGRpZmYnIGFuZCBhY2NlcHRzIHRoZSBzYW1lIG9wdGlvbnMgYW5kIGFyZ3VtZW50cy4gU2VlCitsaW5rZ2l0OmdpdC1kaWZmWzFdLgorCitPUFRJT05TCistLS0tLS0tCistZDo6CistLWRpci1kaWZmOjoKKwlDb3B5IHRoZSBtb2RpZmllZCBmaWxlcyB0byBhIHRlbXBvcmFyeSBsb2NhdGlvbiBhbmQgcGVyZm9ybQorCWEgZGlyZWN0b3J5IGRpZmYgb24gdGhlbS4gVGhpcyBtb2RlIG5ldmVyIHByb21wdHMgYmVmb3JlCisJbGF1bmNoaW5nIHRoZSBkaWZmIHRvb2wuCisKKy15OjoKKy0tbm8tcHJvbXB0OjoKKwlEbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wuCisKKy0tcHJvbXB0OjoKKwlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgZGlmZiB0b29sLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyOyB0aGUgb3B0aW9uIGlzIHByb3ZpZGVkIHRvCisJb3ZlcnJpZGUgYW55IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKKy10IDx0b29sPjo6CistLXRvb2w9PHRvb2w+OjoKKwlVc2UgdGhlIGRpZmYgdG9vbCBzcGVjaWZpZWQgYnkgPHRvb2w+LiAgVmFsaWQgdmFsdWVzIGluY2x1ZGUKKwllbWVyZ2UsIGtvbXBhcmUsIG1lbGQsIGFuZCB2aW1kaWZmLiBSdW4gYGdpdCBkaWZmdG9vbCAtLXRvb2wtaGVscGAKKwlmb3IgdGhlIGxpc3Qgb2YgdmFsaWQgPHRvb2w+IHNldHRpbmdzLgorKworSWYgYSBkaWZmIHRvb2wgaXMgbm90IHNwZWNpZmllZCwgJ2dpdCBkaWZmdG9vbCcKK3dpbGwgdXNlIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBkaWZmLnRvb2xgLiAgSWYgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBkaWZmLnRvb2xgIGlzIG5vdCBzZXQsICdnaXQgZGlmZnRvb2wnCit3aWxsIHBpY2sgYSBzdWl0YWJsZSBkZWZhdWx0LgorKworWW91IGNhbiBleHBsaWNpdGx5IHByb3ZpZGUgYSBmdWxsIHBhdGggdG8gdGhlIHRvb2wgYnkgc2V0dGluZyB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGRpZmZ0b29sLjx0b29sPi5wYXRoYC4gRm9yIGV4YW1wbGUsIHlvdQorY2FuIGNvbmZpZ3VyZSB0aGUgYWJzb2x1dGUgcGF0aCB0byBrZGlmZjMgYnkgc2V0dGluZworYGRpZmZ0b29sLmtkaWZmMy5wYXRoYC4gT3RoZXJ3aXNlLCAnZ2l0IGRpZmZ0b29sJyBhc3N1bWVzIHRoZQordG9vbCBpcyBhdmFpbGFibGUgaW4gUEFUSC4KKysKK0luc3RlYWQgb2YgcnVubmluZyBvbmUgb2YgdGhlIGtub3duIGRpZmYgdG9vbHMsCisnZ2l0IGRpZmZ0b29sJyBjYW4gYmUgY3VzdG9taXplZCB0byBydW4gYW4gYWx0ZXJuYXRpdmUgcHJvZ3JhbQorYnkgc3BlY2lmeWluZyB0aGUgY29tbWFuZCBsaW5lIHRvIGludm9rZSBpbiBhIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIGBkaWZmdG9vbC48dG9vbD4uY21kYC4KKysKK1doZW4gJ2dpdCBkaWZmdG9vbCcgaXMgaW52b2tlZCB3aXRoIHRoaXMgdG9vbCAoZWl0aGVyIHRocm91Z2ggdGhlCitgLXRgIG9yIGAtLXRvb2xgIG9wdGlvbiBvciB0aGUgYGRpZmYudG9vbGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSkKK3RoZSBjb25maWd1cmVkIGNvbW1hbmQgbGluZSB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgZm9sbG93aW5nCit2YXJpYWJsZXMgYXZhaWxhYmxlOiBgJExPQ0FMYCBpcyBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeQorZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZGlmZiBwcmUtaW1hZ2UgYW5kIGAkUkVNT1RFYAoraXMgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cworb2YgdGhlIGRpZmYgcG9zdC1pbWFnZS4gIGAkTUVSR0VEYCBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3aGljaCBpcworYmVpbmcgY29tcGFyZWQuIGAkQkFTRWAgaXMgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkKK3dpdGggY3VzdG9tIG1lcmdlIHRvb2wgY29tbWFuZHMgYW5kIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyBgJE1FUkdFRGAuCisKKy0tdG9vbC1oZWxwOjoKKwlQcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAuCisKKy0tc3ltbGlua3M6OgorLS1uby1zeW1saW5rczo6CisJJ2dpdCBkaWZmdG9vbCcncyBkZWZhdWx0IGJlaGF2aW9yIGlzIGNyZWF0ZSBzeW1saW5rcyB0byB0aGUKKwl3b3JraW5nIHRyZWUgd2hlbiBydW4gaW4gYC0tZGlyLWRpZmZgIG1vZGUuCisrCisJU3BlY2lmeWluZyBgLS1uby1zeW1saW5rc2AgaW5zdHJ1Y3RzICdnaXQgZGlmZnRvb2wnIHRvIGNyZWF0ZQorCWNvcGllcyBpbnN0ZWFkLiAgYC0tbm8tc3ltbGlua3NgIGlzIHRoZSBkZWZhdWx0IG9uIFdpbmRvd3MuCisKKy14IDxjb21tYW5kPjo6CistLWV4dGNtZD08Y29tbWFuZD46OgorCVNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcy4KKwknZ2l0LWRpZmZ0b29sJyBpZ25vcmVzIHRoZSBjb25maWd1cmVkIGRlZmF1bHRzIGFuZCBydW5zCisJYCRjb21tYW5kICRMT0NBTCAkUkVNT1RFYCB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKwlBZGRpdGlvbmFsbHksIGAkQkFTRWAgaXMgc2V0IGluIHRoZSBlbnZpcm9ubWVudC4KKworLWc6OgorLS1ndWk6OgorCVdoZW4gJ2dpdC1kaWZmdG9vbCcgaXMgaW52b2tlZCB3aXRoIHRoZSBgLWdgIG9yIGAtLWd1aWAgb3B0aW9uCisJdGhlIGRlZmF1bHQgZGlmZiB0b29sIHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBjb25maWd1cmVkCisJYGRpZmYuZ3VpdG9vbGAgdmFyaWFibGUgaW5zdGVhZCBvZiBgZGlmZi50b29sYC4KKworU2VlIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gZm9yIHRoZSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkIG9wdGlvbnMuCisKK0NPTkZJRyBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0KKydnaXQgZGlmZnRvb2wnIGZhbGxzIGJhY2sgdG8gJ2dpdCBtZXJnZXRvb2wnIGNvbmZpZyB2YXJpYWJsZXMgd2hlbiB0aGUKK2RpZmZ0b29sIGVxdWl2YWxlbnRzIGhhdmUgbm90IGJlZW4gZGVmaW5lZC4KKworZGlmZi50b29sOjoKKwlUaGUgZGVmYXVsdCBkaWZmIHRvb2wgdG8gdXNlLgorCitkaWZmLmd1aXRvb2w6OgorCVRoZSBkZWZhdWx0IGRpZmYgdG9vbCB0byB1c2Ugd2hlbiBgLS1ndWlgIGlzIHNwZWNpZmllZC4KKworZGlmZnRvb2wuPHRvb2w+LnBhdGg6OgorCU92ZXJyaWRlIHRoZSBwYXRoIGZvciB0aGUgZ2l2ZW4gdG9vbC4gIFRoaXMgaXMgdXNlZnVsIGluIGNhc2UKKwl5b3VyIHRvb2wgaXMgbm90IGluIHRoZSBQQVRILgorCitkaWZmdG9vbC48dG9vbD4uY21kOjoKKwlTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGludm9rZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbC4KKysKK1NlZSB0aGUgYC0tdG9vbD08dG9vbD5gIG9wdGlvbiBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzLgorCitkaWZmdG9vbC5wcm9tcHQ6OgorCVByb21wdCBiZWZvcmUgZWFjaCBpbnZvY2F0aW9uIG9mIHRoZSBkaWZmIHRvb2wuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZGlmZlsxXTo6CisJIFNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMKKworbGlua2dpdDpnaXQtbWVyZ2V0b29sWzFdOjoKKwlSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cworCitsaW5rZ2l0OmdpdC1jb25maWdbMV06OgorCSBHZXQgYW5kIHNldCByZXBvc2l0b3J5IG9yIGdsb2JhbCBvcHRpb25zCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDg3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKQEAgLTAsMCArMSwxNDUgQEAKK2dpdC1mYXN0LWV4cG9ydCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mYXN0LWV4cG9ydCAtIEdpdCBkYXRhIGV4cG9ydGVyCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZhc3QtZXhwb3J0IFtvcHRpb25zXScgfCAnZ2l0IGZhc3QtaW1wb3J0JworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgcHJvZ3JhbSBkdW1wcyB0aGUgZ2l2ZW4gcmV2aXNpb25zIGluIGEgZm9ybSBzdWl0YWJsZSB0byBiZSBwaXBlZAoraW50byAnZ2l0IGZhc3QtaW1wb3J0Jy4KKworWW91IGNhbiB1c2UgaXQgYXMgYSBodW1hbi1yZWFkYWJsZSBidW5kbGUgcmVwbGFjZW1lbnQgKHNlZQorbGlua2dpdDpnaXQtYnVuZGxlWzFdKSwgb3IgYXMgYSBraW5kIG9mIGFuIGludGVyYWN0aXZlCisnZ2l0IGZpbHRlci1icmFuY2gnLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy0tcHJvZ3Jlc3M9PG4+OjoKKwlJbnNlcnQgJ3Byb2dyZXNzJyBzdGF0ZW1lbnRzIGV2ZXJ5IDxuPiBvYmplY3RzLCB0byBiZSBzaG93biBieQorCSdnaXQgZmFzdC1pbXBvcnQnIGR1cmluZyBpbXBvcnQuCisKKy0tc2lnbmVkLXRhZ3M9KHZlcmJhdGltfHdhcm58c3RyaXB8YWJvcnQpOjoKKwlTcGVjaWZ5IGhvdyB0byBoYW5kbGUgc2lnbmVkIHRhZ3MuICBTaW5jZSBhbnkgdHJhbnNmb3JtYXRpb24KKwlhZnRlciB0aGUgZXhwb3J0IGNhbiBjaGFuZ2UgdGhlIHRhZyBuYW1lcyAod2hpY2ggY2FuIGFsc28gaGFwcGVuCisJd2hlbiBleGNsdWRpbmcgcmV2aXNpb25zKSB0aGUgc2lnbmF0dXJlcyB3aWxsIG5vdCBtYXRjaC4KKysKK1doZW4gYXNraW5nIHRvICdhYm9ydCcgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhpcyBwcm9ncmFtIHdpbGwgZGllCit3aGVuIGVuY291bnRlcmluZyBhIHNpZ25lZCB0YWcuICBXaXRoICdzdHJpcCcsIHRoZSB0YWdzIHdpbGwgYmUgbWFkZQordW5zaWduZWQsIHdpdGggJ3ZlcmJhdGltJywgdGhleSB3aWxsIGJlIHNpbGVudGx5IGV4cG9ydGVkCithbmQgd2l0aCAnd2FybicsIHRoZXkgd2lsbCBiZSBleHBvcnRlZCwgYnV0IHlvdSB3aWxsIHNlZSBhIHdhcm5pbmcuCisKKy0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD0oYWJvcnR8ZHJvcHxyZXdyaXRlKTo6CisJU3BlY2lmeSBob3cgdG8gaGFuZGxlIHRhZ3Mgd2hvc2UgdGFnZ2VkIG9iamVjdCBpcyBmaWx0ZXJlZCBvdXQuCisJU2luY2UgcmV2aXNpb25zIGFuZCBmaWxlcyB0byBleHBvcnQgY2FuIGJlIGxpbWl0ZWQgYnkgcGF0aCwKKwl0YWdnZWQgb2JqZWN0cyBtYXkgYmUgZmlsdGVyZWQgY29tcGxldGVseS4KKysKK1doZW4gYXNraW5nIHRvICdhYm9ydCcgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhpcyBwcm9ncmFtIHdpbGwgZGllCit3aGVuIGVuY291bnRlcmluZyBzdWNoIGEgdGFnLiAgV2l0aCAnZHJvcCcgaXQgd2lsbCBvbWl0IHN1Y2ggdGFncyBmcm9tCit0aGUgb3V0cHV0LiAgV2l0aCAncmV3cml0ZScsIGlmIHRoZSB0YWdnZWQgb2JqZWN0IGlzIGEgY29tbWl0LCBpdCB3aWxsCityZXdyaXRlIHRoZSB0YWcgdG8gdGFnIGFuIGFuY2VzdG9yIGNvbW1pdCAodmlhIHBhcmVudCByZXdyaXRpbmc7IHNlZQorbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0pCisKKy1NOjoKKy1DOjoKKwlQZXJmb3JtIG1vdmUgYW5kL29yIGNvcHkgZGV0ZWN0aW9uLCBhcyBkZXNjcmliZWQgaW4gdGhlCisJbGlua2dpdDpnaXQtZGlmZlsxXSBtYW51YWwgcGFnZSwgYW5kIHVzZSBpdCB0byBnZW5lcmF0ZQorCXJlbmFtZSBhbmQgY29weSBjb21tYW5kcyBpbiB0aGUgb3V0cHV0IGR1bXAuCisrCitOb3RlIHRoYXQgZWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIGNvbW1hbmQgZGlkIG5vdCBjb21wbGFpbiBhbmQKK3Byb2R1Y2VkIGluY29ycmVjdCByZXN1bHRzIGlmIHlvdSBnYXZlIHRoZXNlIG9wdGlvbnMuCisKKy0tZXhwb3J0LW1hcmtzPTxmaWxlPjo6CisJRHVtcHMgdGhlIGludGVybmFsIG1hcmtzIHRhYmxlIHRvIDxmaWxlPiB3aGVuIGNvbXBsZXRlLgorCU1hcmtzIGFyZSB3cml0dGVuIG9uZSBwZXIgbGluZSBhcyBgOm1hcmtpZCBTSEEtMWAuIE9ubHkgbWFya3MKKwlmb3IgcmV2aXNpb25zIGFyZSBkdW1wZWQ7IG1hcmtzIGZvciBibG9icyBhcmUgaWdub3JlZC4KKwlCYWNrZW5kcyBjYW4gdXNlIHRoaXMgZmlsZSB0byB2YWxpZGF0ZSBpbXBvcnRzIGFmdGVyIHRoZXkKKwloYXZlIGJlZW4gY29tcGxldGVkLCBvciB0byBzYXZlIHRoZSBtYXJrcyB0YWJsZSBhY3Jvc3MKKwlpbmNyZW1lbnRhbCBydW5zLiAgQXMgPGZpbGU+IGlzIG9ubHkgb3BlbmVkIGFuZCB0cnVuY2F0ZWQKKwlhdCBjb21wbGV0aW9uLCB0aGUgc2FtZSBwYXRoIGNhbiBhbHNvIGJlIHNhZmVseSBnaXZlbiB0bworCVwtLWltcG9ydC1tYXJrcy4KKworLS1pbXBvcnQtbWFya3M9PGZpbGU+OjoKKwlCZWZvcmUgcHJvY2Vzc2luZyBhbnkgaW5wdXQsIGxvYWQgdGhlIG1hcmtzIHNwZWNpZmllZCBpbgorCTxmaWxlPi4gIFRoZSBpbnB1dCBmaWxlIG11c3QgZXhpc3QsIG11c3QgYmUgcmVhZGFibGUsIGFuZAorCW11c3QgdXNlIHRoZSBzYW1lIGZvcm1hdCBhcyBwcm9kdWNlZCBieSBcLS1leHBvcnQtbWFya3MuCisrCitBbnkgY29tbWl0cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIG1hcmtlZCB3aWxsIG5vdCBiZSBleHBvcnRlZCBhZ2Fpbi4KK0lmIHRoZSBiYWNrZW5kIHVzZXMgYSBzaW1pbGFyIFwtLWltcG9ydC1tYXJrcyBmaWxlLCB0aGlzIGFsbG93cyBmb3IKK2luY3JlbWVudGFsIGJpZGlyZWN0aW9uYWwgZXhwb3J0aW5nIG9mIHRoZSByZXBvc2l0b3J5IGJ5IGtlZXBpbmcgdGhlCittYXJrcyB0aGUgc2FtZSBhY3Jvc3MgcnVucy4KKworLS1mYWtlLW1pc3NpbmctdGFnZ2VyOjoKKwlTb21lIG9sZCByZXBvc2l0b3JpZXMgaGF2ZSB0YWdzIHdpdGhvdXQgYSB0YWdnZXIuICBUaGUKKwlmYXN0LWltcG9ydCBwcm90b2NvbCB3YXMgcHJldHR5IHN0cmljdCBhYm91dCB0aGF0LCBhbmQgZGlkIG5vdAorCWFsbG93IHRoYXQuICBTbyBmYWtlIGEgdGFnZ2VyIHRvIGJlIGFibGUgdG8gZmFzdC1pbXBvcnQgdGhlCisJb3V0cHV0LgorCistLXVzZS1kb25lLWZlYXR1cmU6OgorCVN0YXJ0IHRoZSBzdHJlYW0gd2l0aCBhICdmZWF0dXJlIGRvbmUnIHN0YW56YSwgYW5kIHRlcm1pbmF0ZQorCWl0IHdpdGggYSAnZG9uZScgY29tbWFuZC4KKworLS1uby1kYXRhOjoKKwlTa2lwIG91dHB1dCBvZiBibG9iIG9iamVjdHMgYW5kIGluc3RlYWQgcmVmZXIgdG8gYmxvYnMgdmlhCisJdGhlaXIgb3JpZ2luYWwgU0hBLTEgaGFzaC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gcmV3cml0aW5nIHRoZQorCWRpcmVjdG9yeSBzdHJ1Y3R1cmUgb3IgaGlzdG9yeSBvZiBhIHJlcG9zaXRvcnkgd2l0aG91dAorCXRvdWNoaW5nIHRoZSBjb250ZW50cyBvZiBpbmRpdmlkdWFsIGZpbGVzLiAgTm90ZSB0aGF0IHRoZQorCXJlc3VsdGluZyBzdHJlYW0gY2FuIG9ubHkgYmUgdXNlZCBieSBhIHJlcG9zaXRvcnkgd2hpY2gKKwlhbHJlYWR5IGNvbnRhaW5zIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cy4KKworLS1mdWxsLXRyZWU6OgorCVRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgZmFzdC1leHBvcnQgdG8gaXNzdWUgYSAiZGVsZXRlYWxsIgorCWRpcmVjdGl2ZSBmb3IgZWFjaCBjb21taXQgZm9sbG93ZWQgYnkgYSBmdWxsIGxpc3Qgb2YgYWxsIGZpbGVzCisJaW4gdGhlIGNvbW1pdCAoYXMgb3Bwb3NlZCB0byBqdXN0IGxpc3RpbmcgdGhlIGZpbGVzIHdoaWNoIGFyZQorCWRpZmZlcmVudCBmcm9tIHRoZSBjb21taXQncyBmaXJzdCBwYXJlbnQpLgorCitbPGdpdC1yZXYtbGlzdC1hcmdzPi4uLl06OgorICAgICAgIEEgbGlzdCBvZiBhcmd1bWVudHMsIGFjY2VwdGFibGUgdG8gJ2dpdCByZXYtcGFyc2UnIGFuZAorICAgICAgICdnaXQgcmV2LWxpc3QnLCB0aGF0IHNwZWNpZmllcyB0aGUgc3BlY2lmaWMgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcworICAgICAgIHRvIGV4cG9ydC4gIEZvciBleGFtcGxlLCBgbWFzdGVyfjEwLi5tYXN0ZXJgIGNhdXNlcyB0aGUKKyAgICAgICBjdXJyZW50IG1hc3RlciByZWZlcmVuY2UgdG8gYmUgZXhwb3J0ZWQgYWxvbmcgd2l0aCBhbGwgb2JqZWN0cworICAgICAgIGFkZGVkIHNpbmNlIGl0cyAxMHRoIGFuY2VzdG9yIGNvbW1pdC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZhc3QtZXhwb3J0IC0tYWxsIHwgKGNkIC9lbXB0eS9yZXBvc2l0b3J5ICYmIGdpdCBmYXN0LWltcG9ydCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGV4cG9ydCB0aGUgd2hvbGUgcmVwb3NpdG9yeSBhbmQgaW1wb3J0IGl0IGludG8gdGhlIGV4aXN0aW5nCitlbXB0eSByZXBvc2l0b3J5LiAgRXhjZXB0IGZvciByZWVuY29kaW5nIGNvbW1pdHMgdGhhdCBhcmUgbm90IGluCitVVEYtOCwgaXQgd291bGQgYmUgYSBvbmUtdG8tb25lIG1pcnJvci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZhc3QtZXhwb3J0IG1hc3Rlcn41Li5tYXN0ZXIgfAorCXNlZCAic3xyZWZzL2hlYWRzL21hc3RlcnxyZWZzL2hlYWRzL290aGVyfCIgfAorCWdpdCBmYXN0LWltcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtYWtlcyBhIG5ldyBicmFuY2ggY2FsbGVkICdvdGhlcicgZnJvbSAnbWFzdGVyfjUuLm1hc3RlcicKKyhpLmUuIGlmICdtYXN0ZXInIGhhcyBsaW5lYXIgaGlzdG9yeSwgaXQgd2lsbCB0YWtlIHRoZSBsYXN0IDUgY29tbWl0cykuCisKK05vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhhdCBub25lIG9mIHRoZSBibG9icyBhbmQgY29tbWl0IG1lc3NhZ2VzCityZWZlcmVuY2VkIGJ5IHRoYXQgcmV2aXNpb24gcmFuZ2UgY29udGFpbnMgdGhlIHN0cmluZworJ3JlZnMvaGVhZHMvbWFzdGVyJy4KKworCitMaW1pdGF0aW9ucworLS0tLS0tLS0tLS0KKworU2luY2UgJ2dpdCBmYXN0LWltcG9ydCcgY2Fubm90IHRhZyB0cmVlcywgeW91IHdpbGwgbm90IGJlCithYmxlIHRvIGV4cG9ydCB0aGUgbGludXgtMi42LmdpdCByZXBvc2l0b3J5IGNvbXBsZXRlbHksIGFzIGl0IGNvbnRhaW5zCithIHRhZyByZWZlcmVuY2luZyBhIHRyZWUgaW5zdGVhZCBvZiBhIGNvbW1pdC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWltcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWltcG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwM2E3YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dApAQCAtMCwwICsxLDE0MzIgQEAKK2dpdC1mYXN0LWltcG9ydCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mYXN0LWltcG9ydCAtIEJhY2tlbmQgZm9yIGZhc3QgR2l0IGRhdGEgaW1wb3J0ZXJzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitmcm9udGVuZCB8ICdnaXQgZmFzdC1pbXBvcnQnIFtvcHRpb25zXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgcHJvZ3JhbSBpcyB1c3VhbGx5IG5vdCB3aGF0IHRoZSBlbmQgdXNlciB3YW50cyB0byBydW4gZGlyZWN0bHkuCitNb3N0IGVuZCB1c2VycyB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGV4aXN0aW5nIGZyb250ZW5kIHByb2dyYW1zLAord2hpY2ggcGFyc2VzIGEgc3BlY2lmaWMgdHlwZSBvZiBmb3JlaWduIHNvdXJjZSBhbmQgZmVlZHMgdGhlIGNvbnRlbnRzCitzdG9yZWQgdGhlcmUgdG8gJ2dpdCBmYXN0LWltcG9ydCcuCisKK2Zhc3QtaW1wb3J0IHJlYWRzIGEgbWl4ZWQgY29tbWFuZC9kYXRhIHN0cmVhbSBmcm9tIHN0YW5kYXJkIGlucHV0IGFuZAord3JpdGVzIG9uZSBvciBtb3JlIHBhY2tmaWxlcyBkaXJlY3RseSBpbnRvIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuCitXaGVuIEVPRiBpcyByZWNlaXZlZCBvbiBzdGFuZGFyZCBpbnB1dCwgZmFzdCBpbXBvcnQgd3JpdGVzIG91dAordXBkYXRlZCBicmFuY2ggYW5kIHRhZyByZWZzLCBmdWxseSB1cGRhdGluZyB0aGUgY3VycmVudCByZXBvc2l0b3J5Cit3aXRoIHRoZSBuZXdseSBpbXBvcnRlZCBkYXRhLgorCitUaGUgZmFzdC1pbXBvcnQgYmFja2VuZCBpdHNlbGYgY2FuIGltcG9ydCBpbnRvIGFuIGVtcHR5IHJlcG9zaXRvcnkgKG9uZSB0aGF0CitoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGJ5ICdnaXQgaW5pdCcpIG9yIGluY3JlbWVudGFsbHkKK3VwZGF0ZSBhbiBleGlzdGluZyBwb3B1bGF0ZWQgcmVwb3NpdG9yeS4gIFdoZXRoZXIgb3Igbm90IGluY3JlbWVudGFsCitpbXBvcnRzIGFyZSBzdXBwb3J0ZWQgZnJvbSBhIHBhcnRpY3VsYXIgZm9yZWlnbiBzb3VyY2UgZGVwZW5kcyBvbgordGhlIGZyb250ZW5kIHByb2dyYW0gaW4gdXNlLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy0tZGF0ZS1mb3JtYXQ9PGZtdD46OgorCVNwZWNpZnkgdGhlIHR5cGUgb2YgZGF0ZXMgdGhlIGZyb250ZW5kIHdpbGwgc3VwcGx5IHRvCisJZmFzdC1pbXBvcnQgd2l0aGluIGBhdXRob3JgLCBgY29tbWl0dGVyYCBhbmQgYHRhZ2dlcmAgY29tbWFuZHMuCisJU2VlIGBgRGF0ZSBGb3JtYXRzJycgYmVsb3cgZm9yIGRldGFpbHMgYWJvdXQgd2hpY2ggZm9ybWF0cworCWFyZSBzdXBwb3J0ZWQsIGFuZCB0aGVpciBzeW50YXguCisKKy0tIGRvbmU6OgorCVRlcm1pbmF0ZSB3aXRoIGVycm9yIGlmIHRoZXJlIGlzIG5vICdkb25lJyBjb21tYW5kIGF0IHRoZQorCWVuZCBvZiB0aGUgc3RyZWFtLgorCistLWZvcmNlOjoKKwlGb3JjZSB1cGRhdGluZyBtb2RpZmllZCBleGlzdGluZyBicmFuY2hlcywgZXZlbiBpZiBkb2luZworCXNvIHdvdWxkIGNhdXNlIGNvbW1pdHMgdG8gYmUgbG9zdCAoYXMgdGhlIG5ldyBjb21taXQgZG9lcworCW5vdCBjb250YWluIHRoZSBvbGQgY29tbWl0KS4KKworLS1tYXgtcGFjay1zaXplPTxuPjo6CisJTWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2tmaWxlLgorCVRoZSBkZWZhdWx0IGlzIHVubGltaXRlZC4KKworLS1iaWctZmlsZS10aHJlc2hvbGQ9PG4+OjoKKwlNYXhpbXVtIHNpemUgb2YgYSBibG9iIHRoYXQgZmFzdC1pbXBvcnQgd2lsbCBhdHRlbXB0IHRvCisJY3JlYXRlIGEgZGVsdGEgZm9yLCBleHByZXNzZWQgaW4gYnl0ZXMuICBUaGUgZGVmYXVsdCBpcyA1MTJtCisJKDUxMiBNaUIpLiAgU29tZSBpbXBvcnRlcnMgbWF5IHdpc2ggdG8gbG93ZXIgdGhpcyBvbiBzeXN0ZW1zCisJd2l0aCBjb25zdHJhaW5lZCBtZW1vcnkuCisKKy0tZGVwdGg9PG4+OjoKKwlNYXhpbXVtIGRlbHRhIGRlcHRoLCBmb3IgYmxvYiBhbmQgdHJlZSBkZWx0aWZpY2F0aW9uLgorCURlZmF1bHQgaXMgMTAuCisKKy0tYWN0aXZlLWJyYW5jaGVzPTxuPjo6CisJTWF4aW11bSBudW1iZXIgb2YgYnJhbmNoZXMgdG8gbWFpbnRhaW4gYWN0aXZlIGF0IG9uY2UuCisJU2VlIGBgTWVtb3J5IFV0aWxpemF0aW9uJycgYmVsb3cgZm9yIGRldGFpbHMuICBEZWZhdWx0IGlzIDUuCisKKy0tZXhwb3J0LW1hcmtzPTxmaWxlPjo6CisJRHVtcHMgdGhlIGludGVybmFsIG1hcmtzIHRhYmxlIHRvIDxmaWxlPiB3aGVuIGNvbXBsZXRlLgorCU1hcmtzIGFyZSB3cml0dGVuIG9uZSBwZXIgbGluZSBhcyBgOm1hcmtpZCBTSEEtMWAuCisJRnJvbnRlbmRzIGNhbiB1c2UgdGhpcyBmaWxlIHRvIHZhbGlkYXRlIGltcG9ydHMgYWZ0ZXIgdGhleQorCWhhdmUgYmVlbiBjb21wbGV0ZWQsIG9yIHRvIHNhdmUgdGhlIG1hcmtzIHRhYmxlIGFjcm9zcworCWluY3JlbWVudGFsIHJ1bnMuICBBcyA8ZmlsZT4gaXMgb25seSBvcGVuZWQgYW5kIHRydW5jYXRlZAorCWF0IGNoZWNrcG9pbnQgKG9yIGNvbXBsZXRpb24pIHRoZSBzYW1lIHBhdGggY2FuIGFsc28gYmUKKwlzYWZlbHkgZ2l2ZW4gdG8gXC0taW1wb3J0LW1hcmtzLgorCistLWltcG9ydC1tYXJrcz08ZmlsZT46OgorCUJlZm9yZSBwcm9jZXNzaW5nIGFueSBpbnB1dCwgbG9hZCB0aGUgbWFya3Mgc3BlY2lmaWVkIGluCisJPGZpbGU+LiAgVGhlIGlucHV0IGZpbGUgbXVzdCBleGlzdCwgbXVzdCBiZSByZWFkYWJsZSwgYW5kCisJbXVzdCB1c2UgdGhlIHNhbWUgZm9ybWF0IGFzIHByb2R1Y2VkIGJ5IFwtLWV4cG9ydC1tYXJrcy4KKwlNdWx0aXBsZSBvcHRpb25zIG1heSBiZSBzdXBwbGllZCB0byBpbXBvcnQgbW9yZSB0aGFuIG9uZQorCXNldCBvZiBtYXJrcy4gIElmIGEgbWFyayBpcyBkZWZpbmVkIHRvIGRpZmZlcmVudCB2YWx1ZXMsCisJdGhlIGxhc3QgZmlsZSB3aW5zLgorCistLWltcG9ydC1tYXJrcy1pZi1leGlzdHM9PGZpbGU+OjoKKwlMaWtlIC0taW1wb3J0LW1hcmtzIGJ1dCBpbnN0ZWFkIG9mIGVycm9yaW5nIG91dCwgc2lsZW50bHkKKwlza2lwcyB0aGUgZmlsZSBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKworLS1yZWxhdGl2ZS1tYXJrczo6CisJQWZ0ZXIgc3BlY2lmeWluZyAtLXJlbGF0aXZlLW1hcmtzIHRoZSBwYXRocyBzcGVjaWZpZWQKKwl3aXRoIC0taW1wb3J0LW1hcmtzPSBhbmQgLS1leHBvcnQtbWFya3M9IGFyZSByZWxhdGl2ZQorCXRvIGFuIGludGVybmFsIGRpcmVjdG9yeSBpbiB0aGUgY3VycmVudCByZXBvc2l0b3J5LgorCUluIGdpdC1mYXN0LWltcG9ydCB0aGlzIG1lYW5zIHRoYXQgdGhlIHBhdGhzIGFyZSByZWxhdGl2ZQorCXRvIHRoZSAuZ2l0L2luZm8vZmFzdC1pbXBvcnQgZGlyZWN0b3J5LiBIb3dldmVyLCBvdGhlcgorCWltcG9ydGVycyBtYXkgdXNlIGEgZGlmZmVyZW50IGxvY2F0aW9uLgorCistLW5vLXJlbGF0aXZlLW1hcmtzOjoKKwlOZWdhdGVzIGEgcHJldmlvdXMgLS1yZWxhdGl2ZS1tYXJrcy4gQWxsb3dzIGZvciBjb21iaW5pbmcKKwlyZWxhdGl2ZSBhbmQgbm9uLXJlbGF0aXZlIG1hcmtzIGJ5IGludGVyd2VhdmluZworCS0tKG5vLSktcmVsYXRpdmUtbWFya3Mgd2l0aCB0aGUgLS0oaW1wb3J0fGV4cG9ydCktbWFya3M9CisJb3B0aW9ucy4KKworLS1jYXQtYmxvYi1mZD08ZmQ+OjoKKwlXcml0ZSByZXNwb25zZXMgdG8gYGNhdC1ibG9iYCBhbmQgYGxzYCBxdWVyaWVzIHRvIHRoZQorCWZpbGUgZGVzY3JpcHRvciA8ZmQ+IGluc3RlYWQgb2YgYHN0ZG91dGAuICBBbGxvd3MgYHByb2dyZXNzYAorCW91dHB1dCBpbnRlbmRlZCBmb3IgdGhlIGVuZC11c2VyIHRvIGJlIHNlcGFyYXRlZCBmcm9tIG90aGVyCisJb3V0cHV0LgorCistLWRvbmU6OgorCVJlcXVpcmUgYSBgZG9uZWAgY29tbWFuZCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uCisJVGhpcyBvcHRpb24gbWlnaHQgYmUgdXNlZnVsIGZvciBkZXRlY3RpbmcgZXJyb3JzIHRoYXQKKwljYXVzZSB0aGUgZnJvbnRlbmQgdG8gdGVybWluYXRlIGJlZm9yZSBpdCBoYXMgc3RhcnRlZCB0bworCXdyaXRlIGEgc3RyZWFtLgorCistLWV4cG9ydC1wYWNrLWVkZ2VzPTxmaWxlPjo6CisJQWZ0ZXIgY3JlYXRpbmcgYSBwYWNrZmlsZSwgcHJpbnQgYSBsaW5lIG9mIGRhdGEgdG8KKwk8ZmlsZT4gbGlzdGluZyB0aGUgZmlsZW5hbWUgb2YgdGhlIHBhY2tmaWxlIGFuZCB0aGUgbGFzdAorCWNvbW1pdCBvbiBlYWNoIGJyYW5jaCB0aGF0IHdhcyB3cml0dGVuIHRvIHRoYXQgcGFja2ZpbGUuCisJVGhpcyBpbmZvcm1hdGlvbiBtYXkgYmUgdXNlZnVsIGFmdGVyIGltcG9ydGluZyBwcm9qZWN0cworCXdob3NlIHRvdGFsIG9iamVjdCBzZXQgZXhjZWVkcyB0aGUgNCBHaUIgcGFja2ZpbGUgbGltaXQsCisJYXMgdGhlc2UgY29tbWl0cyBjYW4gYmUgdXNlZCBhcyBlZGdlIHBvaW50cyBkdXJpbmcgY2FsbHMKKwl0byAnZ2l0IHBhY2stb2JqZWN0cycuCisKKy0tcXVpZXQ6OgorCURpc2FibGUgYWxsIG5vbi1mYXRhbCBvdXRwdXQsIG1ha2luZyBmYXN0LWltcG9ydCBzaWxlbnQgd2hlbiBpdAorCWlzIHN1Y2Nlc3NmdWwuICBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGUgb3V0cHV0IHNob3duIGJ5CisJXC0tc3RhdHMuCisKKy0tc3RhdHM6OgorCURpc3BsYXkgc29tZSBiYXNpYyBzdGF0aXN0aWNzIGFib3V0IHRoZSBvYmplY3RzIGZhc3QtaW1wb3J0IGhhcworCWNyZWF0ZWQsIHRoZSBwYWNrZmlsZXMgdGhleSB3ZXJlIHN0b3JlZCBpbnRvLCBhbmQgdGhlCisJbWVtb3J5IHVzZWQgYnkgZmFzdC1pbXBvcnQgZHVyaW5nIHRoaXMgcnVuLiAgU2hvd2luZyB0aGlzIG91dHB1dAorCWlzIGN1cnJlbnRseSB0aGUgZGVmYXVsdCwgYnV0IGNhbiBiZSBkaXNhYmxlZCB3aXRoIFwtLXF1aWV0LgorCisKK1BlcmZvcm1hbmNlCistLS0tLS0tLS0tLQorVGhlIGRlc2lnbiBvZiBmYXN0LWltcG9ydCBhbGxvd3MgaXQgdG8gaW1wb3J0IGxhcmdlIHByb2plY3RzIGluIGEgbWluaW11bQorYW1vdW50IG9mIG1lbW9yeSB1c2FnZSBhbmQgcHJvY2Vzc2luZyB0aW1lLiAgQXNzdW1pbmcgdGhlIGZyb250ZW5kCitpcyBhYmxlIHRvIGtlZXAgdXAgd2l0aCBmYXN0LWltcG9ydCBhbmQgZmVlZCBpdCBhIGNvbnN0YW50IHN0cmVhbSBvZiBkYXRhLAoraW1wb3J0IHRpbWVzIGZvciBwcm9qZWN0cyBob2xkaW5nIDEwKyB5ZWFycyBvZiBoaXN0b3J5IGFuZCBjb250YWluaW5nCisxMDAsMDAwKyBpbmRpdmlkdWFsIGNvbW1pdHMgYXJlIGdlbmVyYWxseSBjb21wbGV0ZWQgaW4ganVzdCAxLTIKK2hvdXJzIG9uIHF1aXRlIG1vZGVzdCAofiQyLDAwMCBVU0QpIGhhcmR3YXJlLgorCitNb3N0IGJvdHRsZW5lY2tzIGFwcGVhciB0byBiZSBpbiBmb3JlaWduIHNvdXJjZSBkYXRhIGFjY2VzcyAodGhlCitzb3VyY2UganVzdCBjYW5ub3QgZXh0cmFjdCByZXZpc2lvbnMgZmFzdCBlbm91Z2gpIG9yIGRpc2sgSU8gKGZhc3QtaW1wb3J0Cit3cml0ZXMgYXMgZmFzdCBhcyB0aGUgZGlzayB3aWxsIHRha2UgdGhlIGRhdGEpLiAgSW1wb3J0cyB3aWxsIHJ1bgorZmFzdGVyIGlmIHRoZSBzb3VyY2UgZGF0YSBpcyBzdG9yZWQgb24gYSBkaWZmZXJlbnQgZHJpdmUgdGhhbiB0aGUKK2Rlc3RpbmF0aW9uIEdpdCByZXBvc2l0b3J5IChkdWUgdG8gbGVzcyBJTyBjb250ZW50aW9uKS4KKworCitEZXZlbG9wbWVudCBDb3N0CistLS0tLS0tLS0tLS0tLS0tCitBIHR5cGljYWwgZnJvbnRlbmQgZm9yIGZhc3QtaW1wb3J0IHRlbmRzIHRvIHdlaWdoIGluIGF0IGFwcHJveGltYXRlbHkgMjAwCitsaW5lcyBvZiBQZXJsL1B5dGhvbi9SdWJ5IGNvZGUuICBNb3N0IGRldmVsb3BlcnMgaGF2ZSBiZWVuIGFibGUgdG8KK2NyZWF0ZSB3b3JraW5nIGltcG9ydGVycyBpbiBqdXN0IGEgY291cGxlIG9mIGhvdXJzLCBldmVuIHRob3VnaCBpdAoraXMgdGhlaXIgZmlyc3QgZXhwb3N1cmUgdG8gZmFzdC1pbXBvcnQsIGFuZCBzb21ldGltZXMgZXZlbiB0byBHaXQuICBUaGlzIGlzCithbiBpZGVhbCBzaXR1YXRpb24sIGdpdmVuIHRoYXQgbW9zdCBjb252ZXJzaW9uIHRvb2xzIGFyZSB0aHJvdy1hd2F5CisodXNlIG9uY2UsIGFuZCBuZXZlciBsb29rIGJhY2spLgorCisKK1BhcmFsbGVsIE9wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCitMaWtlICdnaXQgcHVzaCcgb3IgJ2dpdCBmZXRjaCcsIGltcG9ydHMgaGFuZGxlZCBieSBmYXN0LWltcG9ydCBhcmUgc2FmZSB0bworcnVuIGFsb25nc2lkZSBwYXJhbGxlbCBgZ2l0IHJlcGFjayAtYSAtZGAgb3IgYGdpdCBnY2AgaW52b2NhdGlvbnMsCitvciBhbnkgb3RoZXIgR2l0IG9wZXJhdGlvbiAoaW5jbHVkaW5nICdnaXQgcHJ1bmUnLCBhcyBsb29zZSBvYmplY3RzCithcmUgbmV2ZXIgdXNlZCBieSBmYXN0LWltcG9ydCkuCisKK2Zhc3QtaW1wb3J0IGRvZXMgbm90IGxvY2sgdGhlIGJyYW5jaCBvciB0YWcgcmVmcyBpdCBpcyBhY3RpdmVseSBpbXBvcnRpbmcuCitBZnRlciB0aGUgaW1wb3J0LCBkdXJpbmcgaXRzIHJlZiB1cGRhdGUgcGhhc2UsIGZhc3QtaW1wb3J0IHRlc3RzIGVhY2gKK2V4aXN0aW5nIGJyYW5jaCByZWYgdG8gdmVyaWZ5IHRoZSB1cGRhdGUgd2lsbCBiZSBhIGZhc3QtZm9yd2FyZAordXBkYXRlICh0aGUgY29tbWl0IHN0b3JlZCBpbiB0aGUgcmVmIGlzIGNvbnRhaW5lZCBpbiB0aGUgbmV3CitoaXN0b3J5IG9mIHRoZSBjb21taXQgdG8gYmUgd3JpdHRlbikuICBJZiB0aGUgdXBkYXRlIGlzIG5vdCBhCitmYXN0LWZvcndhcmQgdXBkYXRlLCBmYXN0LWltcG9ydCB3aWxsIHNraXAgdXBkYXRpbmcgdGhhdCByZWYgYW5kIGluc3RlYWQKK3ByaW50cyBhIHdhcm5pbmcgbWVzc2FnZS4gIGZhc3QtaW1wb3J0IHdpbGwgYWx3YXlzIGF0dGVtcHQgdG8gdXBkYXRlIGFsbAorYnJhbmNoIHJlZnMsIGFuZCBkb2VzIG5vdCBzdG9wIG9uIHRoZSBmaXJzdCBmYWlsdXJlLgorCitCcmFuY2ggdXBkYXRlcyBjYW4gYmUgZm9yY2VkIHdpdGggXC0tZm9yY2UsIGJ1dCBpdCdzIHJlY29tbWVuZGVkIHRoYXQKK3RoaXMgb25seSBiZSB1c2VkIG9uIGFuIG90aGVyd2lzZSBxdWlldCByZXBvc2l0b3J5LiAgVXNpbmcgXC0tZm9yY2UKK2lzIG5vdCBuZWNlc3NhcnkgZm9yIGFuIGluaXRpYWwgaW1wb3J0IGludG8gYW4gZW1wdHkgcmVwb3NpdG9yeS4KKworCitUZWNobmljYWwgRGlzY3Vzc2lvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Zhc3QtaW1wb3J0IHRyYWNrcyBhIHNldCBvZiBicmFuY2hlcyBpbiBtZW1vcnkuICBBbnkgYnJhbmNoIGNhbiBiZSBjcmVhdGVkCitvciBtb2RpZmllZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSBpbXBvcnQgcHJvY2VzcyBieSBzZW5kaW5nIGEKK2Bjb21taXRgIGNvbW1hbmQgb24gdGhlIGlucHV0IHN0cmVhbS4gIFRoaXMgZGVzaWduIGFsbG93cyBhIGZyb250ZW5kCitwcm9ncmFtIHRvIHByb2Nlc3MgYW4gdW5saW1pdGVkIG51bWJlciBvZiBicmFuY2hlcyBzaW11bHRhbmVvdXNseSwKK2dlbmVyYXRpbmcgY29tbWl0cyBpbiB0aGUgb3JkZXIgdGhleSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIHNvdXJjZQorZGF0YS4gIEl0IGFsc28gc2ltcGxpZmllcyB0aGUgZnJvbnRlbmQgcHJvZ3JhbXMgY29uc2lkZXJhYmx5LgorCitmYXN0LWltcG9ydCBkb2VzIG5vdCB1c2Ugb3IgYWx0ZXIgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIG9yIGFueQorZmlsZSB3aXRoaW4gaXQuICAoSXQgZG9lcyBob3dldmVyIHVwZGF0ZSB0aGUgY3VycmVudCBHaXQgcmVwb3NpdG9yeSwKK2FzIHJlZmVyZW5jZWQgYnkgYEdJVF9ESVJgLikgIFRoZXJlZm9yZSBhbiBpbXBvcnQgZnJvbnRlbmQgbWF5IHVzZQordGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBpdHMgb3duIHB1cnBvc2VzLCBzdWNoIGFzIGV4dHJhY3RpbmcgZmlsZQorcmV2aXNpb25zIGZyb20gdGhlIGZvcmVpZ24gc291cmNlLiAgVGhpcyBpZ25vcmFuY2Ugb2YgdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSBhbHNvIGFsbG93cyBmYXN0LWltcG9ydCB0byBydW4gdmVyeSBxdWlja2x5LCBhcyBpdCBkb2VzIG5vdAorbmVlZCB0byBwZXJmb3JtIGFueSBjb3N0bHkgZmlsZSB1cGRhdGUgb3BlcmF0aW9ucyB3aGVuIHN3aXRjaGluZworYmV0d2VlbiBicmFuY2hlcy4KKworSW5wdXQgRm9ybWF0CistLS0tLS0tLS0tLS0KK1dpdGggdGhlIGV4Y2VwdGlvbiBvZiByYXcgZmlsZSBkYXRhICh3aGljaCBHaXQgZG9lcyBub3QgaW50ZXJwcmV0KQordGhlIGZhc3QtaW1wb3J0IGlucHV0IGZvcm1hdCBpcyB0ZXh0IChBU0NJSSkgYmFzZWQuICBUaGlzIHRleHQgYmFzZWQKK2Zvcm1hdCBzaW1wbGlmaWVzIGRldmVsb3BtZW50IGFuZCBkZWJ1Z2dpbmcgb2YgZnJvbnRlbmQgcHJvZ3JhbXMsCitlc3BlY2lhbGx5IHdoZW4gYSBoaWdoZXIgbGV2ZWwgbGFuZ3VhZ2Ugc3VjaCBhcyBQZXJsLCBQeXRob24gb3IKK1J1YnkgaXMgYmVpbmcgdXNlZC4KKworZmFzdC1pbXBvcnQgaXMgdmVyeSBzdHJpY3QgYWJvdXQgaXRzIGlucHV0LiAgV2hlcmUgd2Ugc2F5IFNQIGJlbG93IHdlIG1lYW4KKypleGFjdGx5KiBvbmUgc3BhY2UuICBMaWtld2lzZSBMRiBtZWFucyBvbmUgKGFuZCBvbmx5IG9uZSkgbGluZWZlZWQKK2FuZCBIVCBvbmUgKGFuZCBvbmx5IG9uZSkgaG9yaXpvbnRhbCB0YWIuCitTdXBwbHlpbmcgYWRkaXRpb25hbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgd2lsbCBjYXVzZSB1bmV4cGVjdGVkCityZXN1bHRzLCBzdWNoIGFzIGJyYW5jaCBuYW1lcyBvciBmaWxlIG5hbWVzIHdpdGggbGVhZGluZyBvciB0cmFpbGluZworc3BhY2VzIGluIHRoZWlyIG5hbWUsIG9yIGVhcmx5IHRlcm1pbmF0aW9uIG9mIGZhc3QtaW1wb3J0IHdoZW4gaXQgZW5jb3VudGVycwordW5leHBlY3RlZCBpbnB1dC4KKworU3RyZWFtIENvbW1lbnRzCit+fn5+fn5+fn5+fn5+fn4KK1RvIGFpZCBpbiBkZWJ1Z2dpbmcgZnJvbnRlbmRzIGZhc3QtaW1wb3J0IGlnbm9yZXMgYW55IGxpbmUgdGhhdAorYmVnaW5zIHdpdGggYCNgIChBU0NJSSBwb3VuZC9oYXNoKSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBsaW5lCitlbmRpbmcgYExGYC4gIEEgY29tbWVudCBsaW5lIG1heSBjb250YWluIGFueSBzZXF1ZW5jZSBvZiBieXRlcwordGhhdCBkb2VzIG5vdCBjb250YWluIGFuIExGIGFuZCB0aGVyZWZvcmUgbWF5IGJlIHVzZWQgdG8gaW5jbHVkZQorYW55IGRldGFpbGVkIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGJlIHNwZWNpZmljIHRvIHRoZQorZnJvbnRlbmQgYW5kIHVzZWZ1bCB3aGVuIGluc3BlY3RpbmcgYSBmYXN0LWltcG9ydCBkYXRhIHN0cmVhbS4KKworRGF0ZSBGb3JtYXRzCit+fn5+fn5+fn5+fn4KK1RoZSBmb2xsb3dpbmcgZGF0ZSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQuICBBIGZyb250ZW5kIHNob3VsZCBzZWxlY3QKK3RoZSBmb3JtYXQgaXQgd2lsbCB1c2UgZm9yIHRoaXMgaW1wb3J0IGJ5IHBhc3NpbmcgdGhlIGZvcm1hdCBuYW1lCitpbiB0aGUgXC0tZGF0ZS1mb3JtYXQ9PGZtdD4gY29tbWFuZCBsaW5lIG9wdGlvbi4KKworYHJhd2A6OgorCVRoaXMgaXMgdGhlIEdpdCBuYXRpdmUgZm9ybWF0IGFuZCBpcyBgPHRpbWU+IFNQIDxvZmZ1dGM+YC4KKwlJdCBpcyBhbHNvIGZhc3QtaW1wb3J0J3MgZGVmYXVsdCBmb3JtYXQsIGlmIFwtLWRhdGUtZm9ybWF0IHdhcworCW5vdCBzcGVjaWZpZWQuCisrCitUaGUgdGltZSBvZiB0aGUgZXZlbnQgaXMgc3BlY2lmaWVkIGJ5IGA8dGltZT5gIGFzIHRoZSBudW1iZXIgb2YKK3NlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggKG1pZG5pZ2h0LCBKYW4gMSwgMTk3MCwgVVRDKSBhbmQgaXMKK3dyaXR0ZW4gYXMgYW4gQVNDSUkgZGVjaW1hbCBpbnRlZ2VyLgorKworVGhlIGxvY2FsIG9mZnNldCBpcyBzcGVjaWZpZWQgYnkgYDxvZmZ1dGM+YCBhcyBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlCitvZmZzZXQgZnJvbSBVVEMuICBGb3IgZXhhbXBsZSBFU1QgKHdoaWNoIGlzIDUgaG91cnMgYmVoaW5kIFVUQykKK3dvdWxkIGJlIGV4cHJlc3NlZCBpbiBgPHR6PmAgYnkgYGAtMDUwMCcnIHdoaWxlIFVUQyBpcyBgYCswMDAwJycuCitUaGUgbG9jYWwgb2Zmc2V0IGRvZXMgbm90IGFmZmVjdCBgPHRpbWU+YDsgaXQgaXMgdXNlZCBvbmx5IGFzIGFuCithZHZpc2VtZW50IHRvIGhlbHAgZm9ybWF0dGluZyByb3V0aW5lcyBkaXNwbGF5IHRoZSB0aW1lc3RhbXAuCisrCitJZiB0aGUgbG9jYWwgb2Zmc2V0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHNvdXJjZSBtYXRlcmlhbCwgdXNlCitgYCswMDAwJycsIG9yIHRoZSBtb3N0IGNvbW1vbiBsb2NhbCBvZmZzZXQuICBGb3IgZXhhbXBsZSBtYW55Citvcmdhbml6YXRpb25zIGhhdmUgYSBDVlMgcmVwb3NpdG9yeSB3aGljaCBoYXMgb25seSBldmVyIGJlZW4gYWNjZXNzZWQKK2J5IHVzZXJzIHdobyBhcmUgbG9jYXRlZCBpbiB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgdGltZXpvbmUuICBJbiB0aGlzCitjYXNlIGEgcmVhc29uYWJsZSBvZmZzZXQgZnJvbSBVVEMgY291bGQgYmUgYXNzdW1lZC4KKysKK1VubGlrZSB0aGUgYHJmYzI4MjJgIGZvcm1hdCwgdGhpcyBmb3JtYXQgaXMgdmVyeSBzdHJpY3QuICBBbnkKK3ZhcmlhdGlvbiBpbiBmb3JtYXR0aW5nIHdpbGwgY2F1c2UgZmFzdC1pbXBvcnQgdG8gcmVqZWN0IHRoZSB2YWx1ZS4KKworYHJmYzI4MjJgOjoKKwlUaGlzIGlzIHRoZSBzdGFuZGFyZCBlbWFpbCBmb3JtYXQgYXMgZGVzY3JpYmVkIGJ5IFJGQyAyODIyLgorKworQW4gZXhhbXBsZSB2YWx1ZSBpcyBgYFR1ZSBGZWIgNiAxMToyMjoxOCAyMDA3IC0wNTAwJycuICBUaGUgR2l0CitwYXJzZXIgaXMgYWNjdXJhdGUsIGJ1dCBhIGxpdHRsZSBvbiB0aGUgbGVuaWVudCBzaWRlLiAgSXQgaXMgdGhlCitzYW1lIHBhcnNlciB1c2VkIGJ5ICdnaXQgYW0nIHdoZW4gYXBwbHlpbmcgcGF0Y2hlcworcmVjZWl2ZWQgZnJvbSBlbWFpbC4KKysKK1NvbWUgbWFsZm9ybWVkIHN0cmluZ3MgbWF5IGJlIGFjY2VwdGVkIGFzIHZhbGlkIGRhdGVzLiAgSW4gc29tZSBvZgordGhlc2UgY2FzZXMgR2l0IHdpbGwgc3RpbGwgYmUgYWJsZSB0byBvYnRhaW4gdGhlIGNvcnJlY3QgZGF0ZSBmcm9tCit0aGUgbWFsZm9ybWVkIHN0cmluZy4gIFRoZXJlIGFyZSBhbHNvIHNvbWUgdHlwZXMgb2YgbWFsZm9ybWVkCitzdHJpbmdzIHdoaWNoIEdpdCB3aWxsIHBhcnNlIHdyb25nLCBhbmQgeWV0IGNvbnNpZGVyIHZhbGlkLgorU2VyaW91c2x5IG1hbGZvcm1lZCBzdHJpbmdzIHdpbGwgYmUgcmVqZWN0ZWQuCisrCitVbmxpa2UgdGhlIGByYXdgIGZvcm1hdCBhYm92ZSwgdGhlIHRpbWV6b25lL1VUQyBvZmZzZXQgaW5mb3JtYXRpb24KK2NvbnRhaW5lZCBpbiBhbiBSRkMgMjgyMiBkYXRlIHN0cmluZyBpcyB1c2VkIHRvIGFkanVzdCB0aGUgZGF0ZQordmFsdWUgdG8gVVRDIHByaW9yIHRvIHN0b3JhZ2UuICBUaGVyZWZvcmUgaXQgaXMgaW1wb3J0YW50IHRoYXQKK3RoaXMgaW5mb3JtYXRpb24gYmUgYXMgYWNjdXJhdGUgYXMgcG9zc2libGUuCisrCitJZiB0aGUgc291cmNlIG1hdGVyaWFsIHVzZXMgUkZDIDI4MjIgc3R5bGUgZGF0ZXMsCit0aGUgZnJvbnRlbmQgc2hvdWxkIGxldCBmYXN0LWltcG9ydCBoYW5kbGUgdGhlIHBhcnNpbmcgYW5kIGNvbnZlcnNpb24KKyhyYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGRvIGl0IGl0c2VsZikgYXMgdGhlIEdpdCBwYXJzZXIgaGFzCitiZWVuIHdlbGwgdGVzdGVkIGluIHRoZSB3aWxkLgorKworRnJvbnRlbmRzIHNob3VsZCBwcmVmZXIgdGhlIGByYXdgIGZvcm1hdCBpZiB0aGUgc291cmNlIG1hdGVyaWFsCithbHJlYWR5IHVzZXMgVU5JWC1lcG9jaCBmb3JtYXQsIGNhbiBiZSBjb2F4ZWQgdG8gZ2l2ZSBkYXRlcyBpbiB0aGF0Citmb3JtYXQsIG9yIGl0cyBmb3JtYXQgaXMgZWFzaWx5IGNvbnZlcnRpYmxlIHRvIGl0LCBhcyB0aGVyZSBpcyBubworYW1iaWd1aXR5IGluIHBhcnNpbmcuCisKK2Bub3dgOjoKKwlBbHdheXMgdXNlIHRoZSBjdXJyZW50IHRpbWUgYW5kIHRpbWV6b25lLiAgVGhlIGxpdGVyYWwKKwlgbm93YCBtdXN0IGFsd2F5cyBiZSBzdXBwbGllZCBmb3IgYDx3aGVuPmAuCisrCitUaGlzIGlzIGEgdG95IGZvcm1hdC4gIFRoZSBjdXJyZW50IHRpbWUgYW5kIHRpbWV6b25lIG9mIHRoaXMgc3lzdGVtCitpcyBhbHdheXMgY29waWVkIGludG8gdGhlIGlkZW50aXR5IHN0cmluZyBhdCB0aGUgdGltZSBpdCBpcyBiZWluZworY3JlYXRlZCBieSBmYXN0LWltcG9ydC4gIFRoZXJlIGlzIG5vIHdheSB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IHRpbWUgb3IKK3RpbWV6b25lLgorKworVGhpcyBwYXJ0aWN1bGFyIGZvcm1hdCBpcyBzdXBwbGllZCBhcyBpdCdzIHNob3J0IHRvIGltcGxlbWVudCBhbmQKK21heSBiZSB1c2VmdWwgdG8gYSBwcm9jZXNzIHRoYXQgd2FudHMgdG8gY3JlYXRlIGEgbmV3IGNvbW1pdAorcmlnaHQgbm93LCB3aXRob3V0IG5lZWRpbmcgdG8gdXNlIGEgd29ya2luZyBkaXJlY3Rvcnkgb3IKKydnaXQgdXBkYXRlLWluZGV4Jy4KKysKK0lmIHNlcGFyYXRlIGBhdXRob3JgIGFuZCBgY29tbWl0dGVyYCBjb21tYW5kcyBhcmUgdXNlZCBpbiBhIGBjb21taXRgCit0aGUgdGltZXN0YW1wcyBtYXkgbm90IG1hdGNoLCBhcyB0aGUgc3lzdGVtIGNsb2NrIHdpbGwgYmUgcG9sbGVkCit0d2ljZSAob25jZSBmb3IgZWFjaCBjb21tYW5kKS4gIFRoZSBvbmx5IHdheSB0byBlbnN1cmUgdGhhdCBib3RoCithdXRob3IgYW5kIGNvbW1pdHRlciBpZGVudGl0eSBpbmZvcm1hdGlvbiBoYXMgdGhlIHNhbWUgdGltZXN0YW1wCitpcyB0byBvbWl0IGBhdXRob3JgICh0aHVzIGNvcHlpbmcgZnJvbSBgY29tbWl0dGVyYCkgb3IgdG8gdXNlIGEKK2RhdGUgZm9ybWF0IG90aGVyIHRoYW4gYG5vd2AuCisKK0NvbW1hbmRzCit+fn5+fn5+fgorZmFzdC1pbXBvcnQgYWNjZXB0cyBzZXZlcmFsIGNvbW1hbmRzIHRvIHVwZGF0ZSB0aGUgY3VycmVudCByZXBvc2l0b3J5CithbmQgY29udHJvbCB0aGUgY3VycmVudCBpbXBvcnQgcHJvY2Vzcy4gIE1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbgorKHdpdGggZXhhbXBsZXMpIG9mIGVhY2ggY29tbWFuZCBmb2xsb3dzIGxhdGVyLgorCitgY29tbWl0YDo6CisJQ3JlYXRlcyBhIG5ldyBicmFuY2ggb3IgdXBkYXRlcyBhbiBleGlzdGluZyBicmFuY2ggYnkKKwljcmVhdGluZyBhIG5ldyBjb21taXQgYW5kIHVwZGF0aW5nIHRoZSBicmFuY2ggdG8gcG9pbnQgYXQKKwl0aGUgbmV3bHkgY3JlYXRlZCBjb21taXQuCisKK2B0YWdgOjoKKwlDcmVhdGVzIGFuIGFubm90YXRlZCB0YWcgb2JqZWN0IGZyb20gYW4gZXhpc3RpbmcgY29tbWl0IG9yCisJYnJhbmNoLiAgTGlnaHR3ZWlnaHQgdGFncyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQsCisJYXMgdGhleSBhcmUgbm90IHJlY29tbWVuZGVkIGZvciByZWNvcmRpbmcgbWVhbmluZ2Z1bCBwb2ludHMKKwlpbiB0aW1lLgorCitgcmVzZXRgOjoKKwlSZXNldCBhbiBleGlzdGluZyBicmFuY2ggKG9yIGEgbmV3IGJyYW5jaCkgdG8gYSBzcGVjaWZpYworCXJldmlzaW9uLiAgVGhpcyBjb21tYW5kIG11c3QgYmUgdXNlZCB0byBjaGFuZ2UgYSBicmFuY2ggdG8KKwlhIHNwZWNpZmljIHJldmlzaW9uIHdpdGhvdXQgbWFraW5nIGEgY29tbWl0IG9uIGl0LgorCitgYmxvYmA6OgorCUNvbnZlcnQgcmF3IGZpbGUgZGF0YSBpbnRvIGEgYmxvYiwgZm9yIGZ1dHVyZSB1c2UgaW4gYQorCWBjb21taXRgIGNvbW1hbmQuICBUaGlzIGNvbW1hbmQgaXMgb3B0aW9uYWwgYW5kIGlzIG5vdAorCW5lZWRlZCB0byBwZXJmb3JtIGFuIGltcG9ydC4KKworYGNoZWNrcG9pbnRgOjoKKwlGb3JjZXMgZmFzdC1pbXBvcnQgdG8gY2xvc2UgdGhlIGN1cnJlbnQgcGFja2ZpbGUsIGdlbmVyYXRlIGl0cworCXVuaXF1ZSBTSEEtMSBjaGVja3N1bSBhbmQgaW5kZXgsIGFuZCBzdGFydCBhIG5ldyBwYWNrZmlsZS4KKwlUaGlzIGNvbW1hbmQgaXMgb3B0aW9uYWwgYW5kIGlzIG5vdCBuZWVkZWQgdG8gcGVyZm9ybQorCWFuIGltcG9ydC4KKworYHByb2dyZXNzYDo6CisJQ2F1c2VzIGZhc3QtaW1wb3J0IHRvIGVjaG8gdGhlIGVudGlyZSBsaW5lIHRvIGl0cyBvd24KKwlzdGFuZGFyZCBvdXRwdXQuICBUaGlzIGNvbW1hbmQgaXMgb3B0aW9uYWwgYW5kIGlzIG5vdCBuZWVkZWQKKwl0byBwZXJmb3JtIGFuIGltcG9ydC4KKworYGRvbmVgOjoKKwlNYXJrcyB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uIFRoaXMgY29tbWFuZCBpcyBvcHRpb25hbAorCXVubGVzcyB0aGUgYGRvbmVgIGZlYXR1cmUgd2FzIHJlcXVlc3RlZCB1c2luZyB0aGUKKwlgLS1kb25lYCBjb21tYW5kIGxpbmUgb3B0aW9uIG9yIGBmZWF0dXJlIGRvbmVgIGNvbW1hbmQuCisKK2BjYXQtYmxvYmA6OgorCUNhdXNlcyBmYXN0LWltcG9ydCB0byBwcmludCBhIGJsb2IgaW4gJ2NhdC1maWxlIC0tYmF0Y2gnCisJZm9ybWF0IHRvIHRoZSBmaWxlIGRlc2NyaXB0b3Igc2V0IHdpdGggYC0tY2F0LWJsb2ItZmRgIG9yCisJYHN0ZG91dGAgaWYgdW5zcGVjaWZpZWQuCisKK2Bsc2A6OgorCUNhdXNlcyBmYXN0LWltcG9ydCB0byBwcmludCBhIGxpbmUgZGVzY3JpYmluZyBhIGRpcmVjdG9yeQorCWVudHJ5IGluICdscy10cmVlJyBmb3JtYXQgdG8gdGhlIGZpbGUgZGVzY3JpcHRvciBzZXQgd2l0aAorCWAtLWNhdC1ibG9iLWZkYCBvciBgc3Rkb3V0YCBpZiB1bnNwZWNpZmllZC4KKworYGZlYXR1cmVgOjoKKwlSZXF1aXJlIHRoYXQgZmFzdC1pbXBvcnQgc3VwcG9ydHMgdGhlIHNwZWNpZmllZCBmZWF0dXJlLCBvcgorCWFib3J0IGlmIGl0IGRvZXMgbm90LgorCitgb3B0aW9uYDo6CisJU3BlY2lmeSBhbnkgb2YgdGhlIG9wdGlvbnMgbGlzdGVkIHVuZGVyIE9QVElPTlMgdGhhdCBkbyBub3QKKwljaGFuZ2Ugc3RyZWFtIHNlbWFudGljIHRvIHN1aXQgdGhlIGZyb250ZW5kJ3MgbmVlZHMuIFRoaXMKKwljb21tYW5kIGlzIG9wdGlvbmFsIGFuZCBpcyBub3QgbmVlZGVkIHRvIHBlcmZvcm0gYW4gaW1wb3J0LgorCitgY29tbWl0YAorfn5+fn5+fn4KK0NyZWF0ZSBvciB1cGRhdGUgYSBicmFuY2ggd2l0aCBhIG5ldyBjb21taXQsIHJlY29yZGluZyBvbmUgbG9naWNhbAorY2hhbmdlIHRvIHRoZSBwcm9qZWN0LgorCisuLi4uCisJJ2NvbW1pdCcgU1AgPHJlZj4gTEYKKwltYXJrPworCSgnYXV0aG9yJyAoU1AgPG5hbWU+KT8gU1AgTFQgPGVtYWlsPiBHVCBTUCA8d2hlbj4gTEYpPworCSdjb21taXR0ZXInIChTUCA8bmFtZT4pPyBTUCBMVCA8ZW1haWw+IEdUIFNQIDx3aGVuPiBMRgorCWRhdGEKKwkoJ2Zyb20nIFNQIDxjb21taXR0aXNoPiBMRik/CisJKCdtZXJnZScgU1AgPGNvbW1pdHRpc2g+IExGKT8KKwkoZmlsZW1vZGlmeSB8IGZpbGVkZWxldGUgfCBmaWxlY29weSB8IGZpbGVyZW5hbWUgfCBmaWxlZGVsZXRlYWxsIHwgbm90ZW1vZGlmeSkqCisJTEY/CisuLi4uCisKK3doZXJlIGA8cmVmPmAgaXMgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB0byBtYWtlIHRoZSBjb21taXQgb24uCitUeXBpY2FsbHkgYnJhbmNoIG5hbWVzIGFyZSBwcmVmaXhlZCB3aXRoIGByZWZzL2hlYWRzL2AgaW4KK0dpdCwgc28gaW1wb3J0aW5nIHRoZSBDVlMgYnJhbmNoIHN5bWJvbCBgUkVMRU5HLTFfMGAgd291bGQgdXNlCitgcmVmcy9oZWFkcy9SRUxFTkctMV8wYCBmb3IgdGhlIHZhbHVlIG9mIGA8cmVmPmAuICBUaGUgdmFsdWUgb2YKK2A8cmVmPmAgbXVzdCBiZSBhIHZhbGlkIHJlZm5hbWUgaW4gR2l0LiAgQXMgYExGYCBpcyBub3QgdmFsaWQgaW4KK2EgR2l0IHJlZm5hbWUsIG5vIHF1b3Rpbmcgb3IgZXNjYXBpbmcgc3ludGF4IGlzIHN1cHBvcnRlZCBoZXJlLgorCitBIGBtYXJrYCBjb21tYW5kIG1heSBvcHRpb25hbGx5IGFwcGVhciwgcmVxdWVzdGluZyBmYXN0LWltcG9ydCB0byBzYXZlIGEKK3JlZmVyZW5jZSB0byB0aGUgbmV3bHkgY3JlYXRlZCBjb21taXQgZm9yIGZ1dHVyZSB1c2UgYnkgdGhlIGZyb250ZW5kCisoc2VlIGJlbG93IGZvciBmb3JtYXQpLiAgSXQgaXMgdmVyeSBjb21tb24gZm9yIGZyb250ZW5kcyB0byBtYXJrCitldmVyeSBjb21taXQgdGhleSBjcmVhdGUsIHRoZXJlYnkgYWxsb3dpbmcgZnV0dXJlIGJyYW5jaCBjcmVhdGlvbgorZnJvbSBhbnkgaW1wb3J0ZWQgY29tbWl0LgorCitUaGUgYGRhdGFgIGNvbW1hbmQgZm9sbG93aW5nIGBjb21taXR0ZXJgIG11c3Qgc3VwcGx5IHRoZSBjb21taXQKK21lc3NhZ2UgKHNlZSBiZWxvdyBmb3IgYGRhdGFgIGNvbW1hbmQgc3ludGF4KS4gIFRvIGltcG9ydCBhbiBlbXB0eQorY29tbWl0IG1lc3NhZ2UgdXNlIGEgMCBsZW5ndGggZGF0YS4gIENvbW1pdCBtZXNzYWdlcyBhcmUgZnJlZS1mb3JtCithbmQgYXJlIG5vdCBpbnRlcnByZXRlZCBieSBHaXQuICBDdXJyZW50bHkgdGhleSBtdXN0IGJlIGVuY29kZWQgaW4KK1VURi04LCBhcyBmYXN0LWltcG9ydCBkb2VzIG5vdCBwZXJtaXQgb3RoZXIgZW5jb2RpbmdzIHRvIGJlIHNwZWNpZmllZC4KKworWmVybyBvciBtb3JlIGBmaWxlbW9kaWZ5YCwgYGZpbGVkZWxldGVgLCBgZmlsZWNvcHlgLCBgZmlsZXJlbmFtZWAsCitgZmlsZWRlbGV0ZWFsbGAgYW5kIGBub3RlbW9kaWZ5YCBjb21tYW5kcworbWF5IGJlIGluY2x1ZGVkIHRvIHVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGJyYW5jaCBwcmlvciB0bworY3JlYXRpbmcgdGhlIGNvbW1pdC4gIFRoZXNlIGNvbW1hbmRzIG1heSBiZSBzdXBwbGllZCBpbiBhbnkgb3JkZXIuCitIb3dldmVyIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYSBgZmlsZWRlbGV0ZWFsbGAgY29tbWFuZCBwcmVjZWRlCithbGwgYGZpbGVtb2RpZnlgLCBgZmlsZWNvcHlgLCBgZmlsZXJlbmFtZWAgYW5kIGBub3RlbW9kaWZ5YCBjb21tYW5kcyBpbgordGhlIHNhbWUgY29tbWl0LCBhcyBgZmlsZWRlbGV0ZWFsbGAgd2lwZXMgdGhlIGJyYW5jaCBjbGVhbiAoc2VlIGJlbG93KS4KKworVGhlIGBMRmAgYWZ0ZXIgdGhlIGNvbW1hbmQgaXMgb3B0aW9uYWwgKGl0IHVzZWQgdG8gYmUgcmVxdWlyZWQpLgorCitgYXV0aG9yYAorXl5eXl5eXl4KK0FuIGBhdXRob3JgIGNvbW1hbmQgbWF5IG9wdGlvbmFsbHkgYXBwZWFyLCBpZiB0aGUgYXV0aG9yIGluZm9ybWF0aW9uCittaWdodCBkaWZmZXIgZnJvbSB0aGUgY29tbWl0dGVyIGluZm9ybWF0aW9uLiAgSWYgYGF1dGhvcmAgaXMgb21pdHRlZAordGhlbiBmYXN0LWltcG9ydCB3aWxsIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBjb21taXR0ZXIncyBpbmZvcm1hdGlvbiBmb3IKK3RoZSBhdXRob3IgcG9ydGlvbiBvZiB0aGUgY29tbWl0LiAgU2VlIGJlbG93IGZvciBhIGRlc2NyaXB0aW9uIG9mCit0aGUgZmllbGRzIGluIGBhdXRob3JgLCBhcyB0aGV5IGFyZSBpZGVudGljYWwgdG8gYGNvbW1pdHRlcmAuCisKK2Bjb21taXR0ZXJgCiteXl5eXl5eXl5eXgorVGhlIGBjb21taXR0ZXJgIGNvbW1hbmQgaW5kaWNhdGVzIHdobyBtYWRlIHRoaXMgY29tbWl0LCBhbmQgd2hlbgordGhleSBtYWRlIGl0LgorCitIZXJlIGA8bmFtZT5gIGlzIHRoZSBwZXJzb24ncyBkaXNwbGF5IG5hbWUgKGZvciBleGFtcGxlCitgYENvbSBNIEl0dGVyJycpIGFuZCBgPGVtYWlsPmAgaXMgdGhlIHBlcnNvbidzIGVtYWlsIGFkZHJlc3MKKyhgYGNtQGV4YW1wbGUuY29tJycpLiAgYExUYCBhbmQgYEdUYCBhcmUgdGhlIGxpdGVyYWwgbGVzcy10aGFuIChceDNjKQorYW5kIGdyZWF0ZXItdGhhbiAoXHgzZSkgc3ltYm9scy4gIFRoZXNlIGFyZSByZXF1aXJlZCB0byBkZWxpbWl0Cit0aGUgZW1haWwgYWRkcmVzcyBmcm9tIHRoZSBvdGhlciBmaWVsZHMgaW4gdGhlIGxpbmUuICBOb3RlIHRoYXQKK2A8bmFtZT5gIGFuZCBgPGVtYWlsPmAgYXJlIGZyZWUtZm9ybSBhbmQgbWF5IGNvbnRhaW4gYW55IHNlcXVlbmNlCitvZiBieXRlcywgZXhjZXB0IGBMVGAsIGBHVGAgYW5kIGBMRmAuICBgPG5hbWU+YCBpcyB0eXBpY2FsbHkgVVRGLTggZW5jb2RlZC4KKworVGhlIHRpbWUgb2YgdGhlIGNoYW5nZSBpcyBzcGVjaWZpZWQgYnkgYDx3aGVuPmAgdXNpbmcgdGhlIGRhdGUgZm9ybWF0Cit0aGF0IHdhcyBzZWxlY3RlZCBieSB0aGUgXC0tZGF0ZS1mb3JtYXQ9PGZtdD4gY29tbWFuZCBsaW5lIG9wdGlvbi4KK1NlZSBgYERhdGUgRm9ybWF0cycnIGFib3ZlIGZvciB0aGUgc2V0IG9mIHN1cHBvcnRlZCBmb3JtYXRzLCBhbmQKK3RoZWlyIHN5bnRheC4KKworYGZyb21gCiteXl5eXl4KK1RoZSBgZnJvbWAgY29tbWFuZCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGNvbW1pdCB0byBpbml0aWFsaXplCit0aGlzIGJyYW5jaCBmcm9tLiAgVGhpcyByZXZpc2lvbiB3aWxsIGJlIHRoZSBmaXJzdCBhbmNlc3RvciBvZiB0aGUKK25ldyBjb21taXQuCisKK09taXR0aW5nIHRoZSBgZnJvbWAgY29tbWFuZCBpbiB0aGUgZmlyc3QgY29tbWl0IG9mIGEgbmV3IGJyYW5jaAord2lsbCBjYXVzZSBmYXN0LWltcG9ydCB0byBjcmVhdGUgdGhhdCBjb21taXQgd2l0aCBubyBhbmNlc3Rvci4gVGhpcwordGVuZHMgdG8gYmUgZGVzaXJlZCBvbmx5IGZvciB0aGUgaW5pdGlhbCBjb21taXQgb2YgYSBwcm9qZWN0LgorSWYgdGhlIGZyb250ZW5kIGNyZWF0ZXMgYWxsIGZpbGVzIGZyb20gc2NyYXRjaCB3aGVuIG1ha2luZyBhIG5ldworYnJhbmNoLCBhIGBtZXJnZWAgY29tbWFuZCBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mIGBmcm9tYCB0byBzdGFydAordGhlIGNvbW1pdCB3aXRoIGFuIGVtcHR5IHRyZWUuCitPbWl0dGluZyB0aGUgYGZyb21gIGNvbW1hbmQgb24gZXhpc3RpbmcgYnJhbmNoZXMgaXMgdXN1YWxseSBkZXNpcmVkLAorYXMgdGhlIGN1cnJlbnQgY29tbWl0IG9uIHRoYXQgYnJhbmNoIGlzIGF1dG9tYXRpY2FsbHkgYXNzdW1lZCB0bworYmUgdGhlIGZpcnN0IGFuY2VzdG9yIG9mIHRoZSBuZXcgY29tbWl0LgorCitBcyBgTEZgIGlzIG5vdCB2YWxpZCBpbiBhIEdpdCByZWZuYW1lIG9yIFNIQS0xIGV4cHJlc3Npb24sIG5vCitxdW90aW5nIG9yIGVzY2FwaW5nIHN5bnRheCBpcyBzdXBwb3J0ZWQgd2l0aGluIGA8Y29tbWl0dGlzaD5gLgorCitIZXJlIGA8Y29tbWl0dGlzaD5gIGlzIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCisqIFRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGJyYW5jaCBhbHJlYWR5IGluIGZhc3QtaW1wb3J0J3MgaW50ZXJuYWwgYnJhbmNoCisgIHRhYmxlLiAgSWYgZmFzdC1pbXBvcnQgZG9lc24ndCBrbm93IHRoZSBuYW1lLCBpdCdzIHRyZWF0ZWQgYXMgYSBTSEEtMQorICBleHByZXNzaW9uLgorCisqIEEgbWFyayByZWZlcmVuY2UsIGA6PGlkbnVtPmAsIHdoZXJlIGA8aWRudW0+YCBpcyB0aGUgbWFyayBudW1iZXIuCisrCitUaGUgcmVhc29uIGZhc3QtaW1wb3J0IHVzZXMgYDpgIHRvIGRlbm90ZSBhIG1hcmsgcmVmZXJlbmNlIGlzIHRoaXMgY2hhcmFjdGVyCitpcyBub3QgbGVnYWwgaW4gYSBHaXQgYnJhbmNoIG5hbWUuICBUaGUgbGVhZGluZyBgOmAgbWFrZXMgaXQgZWFzeQordG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgbWFyayA0MiAoYDo0MmApIGFuZCB0aGUgYnJhbmNoIDQyIChgNDJgCitvciBgcmVmcy9oZWFkcy80MmApLCBvciBhbiBhYmJyZXZpYXRlZCBTSEEtMSB3aGljaCBoYXBwZW5lZCB0bworY29uc2lzdCBvbmx5IG9mIGJhc2UtMTAgZGlnaXRzLgorKworTWFya3MgbXVzdCBiZSBkZWNsYXJlZCAodmlhIGBtYXJrYCkgYmVmb3JlIHRoZXkgY2FuIGJlIHVzZWQuCisKKyogQSBjb21wbGV0ZSA0MCBieXRlIG9yIGFiYnJldmlhdGVkIGNvbW1pdCBTSEEtMSBpbiBoZXguCisKKyogQW55IHZhbGlkIEdpdCBTSEEtMSBleHByZXNzaW9uIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21taXQuICBTZWUKKyAgYGBTUEVDSUZZSU5HIFJFVklTSU9OUycnIGluIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddIGZvciBkZXRhaWxzLgorCitUaGUgc3BlY2lhbCBjYXNlIG9mIHJlc3RhcnRpbmcgYW4gaW5jcmVtZW50YWwgaW1wb3J0IGZyb20gdGhlCitjdXJyZW50IGJyYW5jaCB2YWx1ZSBzaG91bGQgYmUgd3JpdHRlbiBhczoKKy0tLS0KKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKy0tLS0KK1RoZSBgXjBgIHN1ZmZpeCBpcyBuZWNlc3NhcnkgYXMgZmFzdC1pbXBvcnQgZG9lcyBub3QgcGVybWl0IGEgYnJhbmNoIHRvCitzdGFydCBmcm9tIGl0c2VsZiwgYW5kIHRoZSBicmFuY2ggaXMgY3JlYXRlZCBpbiBtZW1vcnkgYmVmb3JlIHRoZQorYGZyb21gIGNvbW1hbmQgaXMgZXZlbiByZWFkIGZyb20gdGhlIGlucHV0LiAgQWRkaW5nIGBeMGAgd2lsbCBmb3JjZQorZmFzdC1pbXBvcnQgdG8gcmVzb2x2ZSB0aGUgY29tbWl0IHRocm91Z2ggR2l0J3MgcmV2aXNpb24gcGFyc2luZyBsaWJyYXJ5LAorcmF0aGVyIHRoYW4gaXRzIGludGVybmFsIGJyYW5jaCB0YWJsZSwgdGhlcmVieSBsb2FkaW5nIGluIHRoZQorZXhpc3RpbmcgdmFsdWUgb2YgdGhlIGJyYW5jaC4KKworYG1lcmdlYAorXl5eXl5eXgorSW5jbHVkZXMgb25lIGFkZGl0aW9uYWwgYW5jZXN0b3IgY29tbWl0LiAgSWYgdGhlIGBmcm9tYCBjb21tYW5kIGlzCitvbWl0dGVkIHdoZW4gY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGUgZmlyc3QgYG1lcmdlYCBjb21taXQgd2lsbCBiZQordGhlIGZpcnN0IGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50IGNvbW1pdCwgYW5kIHRoZSBicmFuY2ggd2lsbCBzdGFydAorb3V0IHdpdGggbm8gZmlsZXMuICBBbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGBtZXJnZWAgY29tbWFuZHMgcGVyCitjb21taXQgYXJlIHBlcm1pdHRlZCBieSBmYXN0LWltcG9ydCwgdGhlcmVieSBlc3RhYmxpc2hpbmcgYW4gbi13YXkgbWVyZ2UuCitIb3dldmVyIEdpdCdzIG90aGVyIHRvb2xzIG5ldmVyIGNyZWF0ZSBjb21taXRzIHdpdGggbW9yZSB0aGFuIDE1CithZGRpdGlvbmFsIGFuY2VzdG9ycyAoZm9ybWluZyBhIDE2LXdheSBtZXJnZSkuICBGb3IgdGhpcyByZWFzb24KK2l0IGlzIHN1Z2dlc3RlZCB0aGF0IGZyb250ZW5kcyBkbyBub3QgdXNlIG1vcmUgdGhhbiAxNSBgbWVyZ2VgCitjb21tYW5kcyBwZXIgY29tbWl0OyAxNiwgaWYgc3RhcnRpbmcgYSBuZXcsIGVtcHR5IGJyYW5jaC4KKworSGVyZSBgPGNvbW1pdHRpc2g+YCBpcyBhbnkgb2YgdGhlIGNvbW1pdCBzcGVjaWZpY2F0aW9uIGV4cHJlc3Npb25zCithbHNvIGFjY2VwdGVkIGJ5IGBmcm9tYCAoc2VlIGFib3ZlKS4KKworYGZpbGVtb2RpZnlgCiteXl5eXl5eXl5eXl4KK0luY2x1ZGVkIGluIGEgYGNvbW1pdGAgY29tbWFuZCB0byBhZGQgYSBuZXcgZmlsZSBvciBjaGFuZ2UgdGhlCitjb250ZW50IG9mIGFuIGV4aXN0aW5nIGZpbGUuICBUaGlzIGNvbW1hbmQgaGFzIHR3byBkaWZmZXJlbnQgbWVhbnMKK29mIHNwZWNpZnlpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuCisKK0V4dGVybmFsIGRhdGEgZm9ybWF0OjoKKwlUaGUgZGF0YSBjb250ZW50IGZvciB0aGUgZmlsZSB3YXMgYWxyZWFkeSBzdXBwbGllZCBieSBhIHByaW9yCisJYGJsb2JgIGNvbW1hbmQuICBUaGUgZnJvbnRlbmQganVzdCBuZWVkcyB0byBjb25uZWN0IGl0LgorKworLi4uLgorCSdNJyBTUCA8bW9kZT4gU1AgPGRhdGFyZWY+IFNQIDxwYXRoPiBMRgorLi4uLgorKworSGVyZSB1c3VhbGx5IGA8ZGF0YXJlZj5gIG11c3QgYmUgZWl0aGVyIGEgbWFyayByZWZlcmVuY2UgKGA6PGlkbnVtPmApCitzZXQgYnkgYSBwcmlvciBgYmxvYmAgY29tbWFuZCwgb3IgYSBmdWxsIDQwLWJ5dGUgU0hBLTEgb2YgYW4KK2V4aXN0aW5nIEdpdCBibG9iIG9iamVjdC4gIElmIGA8bW9kZT5gIGlzIGAwNDAwMDBgYCB0aGVuCitgPGRhdGFyZWY+YCBtdXN0IGJlIHRoZSBmdWxsIDQwLWJ5dGUgU0hBLTEgb2YgYW4gZXhpc3RpbmcKK0dpdCB0cmVlIG9iamVjdCBvciBhIG1hcmsgcmVmZXJlbmNlIHNldCB3aXRoIGAtLWltcG9ydC1tYXJrc2AuCisKK0lubGluZSBkYXRhIGZvcm1hdDo6CisJVGhlIGRhdGEgY29udGVudCBmb3IgdGhlIGZpbGUgaGFzIG5vdCBiZWVuIHN1cHBsaWVkIHlldC4KKwlUaGUgZnJvbnRlbmQgd2FudHMgdG8gc3VwcGx5IGl0IGFzIHBhcnQgb2YgdGhpcyBtb2RpZnkKKwljb21tYW5kLgorKworLi4uLgorCSdNJyBTUCA8bW9kZT4gU1AgJ2lubGluZScgU1AgPHBhdGg+IExGCisJZGF0YQorLi4uLgorKworU2VlIGJlbG93IGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBgZGF0YWAgY29tbWFuZC4KKworSW4gYm90aCBmb3JtYXRzIGA8bW9kZT5gIGlzIHRoZSB0eXBlIG9mIGZpbGUgZW50cnksIHNwZWNpZmllZAoraW4gb2N0YWwuICBHaXQgb25seSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG1vZGVzOgorCisqIGAxMDA2NDRgIG9yIGA2NDRgOiBBIG5vcm1hbCAobm90LWV4ZWN1dGFibGUpIGZpbGUuICBUaGUgbWFqb3JpdHkKKyAgb2YgZmlsZXMgaW4gbW9zdCBwcm9qZWN0cyB1c2UgdGhpcyBtb2RlLiAgSWYgaW4gZG91YnQsIHRoaXMgaXMKKyAgd2hhdCB5b3Ugd2FudC4KKyogYDEwMDc1NWAgb3IgYDc1NWA6IEEgbm9ybWFsLCBidXQgZXhlY3V0YWJsZSwgZmlsZS4KKyogYDEyMDAwMGA6IEEgc3ltbGluaywgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgd2lsbCBiZSB0aGUgbGluayB0YXJnZXQuCisqIGAxNjAwMDBgOiBBIGdpdGxpbmssIFNIQS0xIG9mIHRoZSBvYmplY3QgcmVmZXJzIHRvIGEgY29tbWl0IGluCisgIGFub3RoZXIgcmVwb3NpdG9yeS4gR2l0IGxpbmtzIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBieSBTSEEgb3IgdGhyb3VnaAorICBhIGNvbW1pdCBtYXJrLiBUaGV5IGFyZSB1c2VkIHRvIGltcGxlbWVudCBzdWJtb2R1bGVzLgorKiBgMDQwMDAwYDogQSBzdWJkaXJlY3RvcnkuICBTdWJkaXJlY3RvcmllcyBjYW4gb25seSBiZSBzcGVjaWZpZWQgYnkKKyAgU0hBIG9yIHRocm91Z2ggYSB0cmVlIG1hcmsgc2V0IHdpdGggYC0taW1wb3J0LW1hcmtzYC4KKworSW4gYm90aCBmb3JtYXRzIGA8cGF0aD5gIGlzIHRoZSBjb21wbGV0ZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGFkZGVkCisoaWYgbm90IGFscmVhZHkgZXhpc3RpbmcpIG9yIG1vZGlmaWVkIChpZiBhbHJlYWR5IGV4aXN0aW5nKS4KKworQSBgPHBhdGg+YCBzdHJpbmcgbXVzdCB1c2UgVU5JWC1zdHlsZSBkaXJlY3Rvcnkgc2VwYXJhdG9ycyAoZm9yd2FyZAorc2xhc2ggYC9gKSwgbWF5IGNvbnRhaW4gYW55IGJ5dGUgb3RoZXIgdGhhbiBgTEZgLCBhbmQgbXVzdCBub3QKK3N0YXJ0IHdpdGggZG91YmxlIHF1b3RlIChgImApLgorCitJZiBhbiBgTEZgIG9yIGRvdWJsZSBxdW90ZSBtdXN0IGJlIGVuY29kZWQgaW50byBgPHBhdGg+YCBzaGVsbC1zdHlsZQorcXVvdGluZyBzaG91bGQgYmUgdXNlZCwgZS5nLiBgInBhdGgvd2l0aFxuIGFuZCBcIiBpbiBpdCJgLgorCitUaGUgdmFsdWUgb2YgYDxwYXRoPmAgbXVzdCBiZSBpbiBjYW5vbmljYWwgZm9ybS4gVGhhdCBpcyBpdCBtdXN0IG5vdDoKKworKiBjb250YWluIGFuIGVtcHR5IGRpcmVjdG9yeSBjb21wb25lbnQgKGUuZy4gYGZvby8vYmFyYCBpcyBpbnZhbGlkKSwKKyogZW5kIHdpdGggYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIChlLmcuIGBmb28vYCBpcyBpbnZhbGlkKSwKKyogc3RhcnQgd2l0aCBhIGRpcmVjdG9yeSBzZXBhcmF0b3IgKGUuZy4gYC9mb29gIGlzIGludmFsaWQpLAorKiBjb250YWluIHRoZSBzcGVjaWFsIGNvbXBvbmVudCBgLmAgb3IgYC4uYCAoZS5nLiBgZm9vLy4vYmFyYCBhbmQKKyAgYGZvby8uLi9iYXJgIGFyZSBpbnZhbGlkKS4KKworVGhlIHJvb3Qgb2YgdGhlIHRyZWUgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGFuIGVtcHR5IHN0cmluZyBhcyBgPHBhdGg+YC4KKworSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBgPHBhdGg+YCBhbHdheXMgYmUgZW5jb2RlZCB1c2luZyBVVEYtOC4KKworYGZpbGVkZWxldGVgCiteXl5eXl5eXl5eXl4KK0luY2x1ZGVkIGluIGEgYGNvbW1pdGAgY29tbWFuZCB0byByZW1vdmUgYSBmaWxlIG9yIHJlY3Vyc2l2ZWx5CitkZWxldGUgYW4gZW50aXJlIGRpcmVjdG9yeSBmcm9tIHRoZSBicmFuY2guICBJZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkKK3JlbW92YWwgbWFrZXMgaXRzIHBhcmVudCBkaXJlY3RvcnkgZW1wdHksIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHdpbGwKK2JlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB0b28uICBUaGlzIGNhc2NhZGVzIHVwIHRoZSB0cmVlIHVudGlsIHRoZQorZmlyc3Qgbm9uLWVtcHR5IGRpcmVjdG9yeSBvciB0aGUgcm9vdCBpcyByZWFjaGVkLgorCisuLi4uCisJJ0QnIFNQIDxwYXRoPiBMRgorLi4uLgorCitoZXJlIGA8cGF0aD5gIGlzIHRoZSBjb21wbGV0ZSBwYXRoIG9mIHRoZSBmaWxlIG9yIHN1YmRpcmVjdG9yeSB0bworYmUgcmVtb3ZlZCBmcm9tIHRoZSBicmFuY2guCitTZWUgYGZpbGVtb2RpZnlgIGFib3ZlIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGA8cGF0aD5gLgorCitgZmlsZWNvcHlgCiteXl5eXl5eXl5eXl4KK1JlY3Vyc2l2ZWx5IGNvcGllcyBhbiBleGlzdGluZyBmaWxlIG9yIHN1YmRpcmVjdG9yeSB0byBhIGRpZmZlcmVudAorbG9jYXRpb24gd2l0aGluIHRoZSBicmFuY2guICBUaGUgZXhpc3RpbmcgZmlsZSBvciBkaXJlY3RvcnkgbXVzdAorZXhpc3QuICBJZiB0aGUgZGVzdGluYXRpb24gZXhpc3RzIGl0IHdpbGwgYmUgY29tcGxldGVseSByZXBsYWNlZAorYnkgdGhlIGNvbnRlbnQgY29waWVkIGZyb20gdGhlIHNvdXJjZS4KKworLi4uLgorCSdDJyBTUCA8cGF0aD4gU1AgPHBhdGg+IExGCisuLi4uCisKK2hlcmUgdGhlIGZpcnN0IGA8cGF0aD5gIGlzIHRoZSBzb3VyY2UgbG9jYXRpb24gYW5kIHRoZSBzZWNvbmQKK2A8cGF0aD5gIGlzIHRoZSBkZXN0aW5hdGlvbi4gIFNlZSBgZmlsZW1vZGlmeWAgYWJvdmUgZm9yIGEgZGV0YWlsZWQKK2Rlc2NyaXB0aW9uIG9mIHdoYXQgYDxwYXRoPmAgbWF5IGxvb2sgbGlrZS4gIFRvIHVzZSBhIHNvdXJjZSBwYXRoCit0aGF0IGNvbnRhaW5zIFNQIHRoZSBwYXRoIG11c3QgYmUgcXVvdGVkLgorCitBIGBmaWxlY29weWAgY29tbWFuZCB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkuICBPbmNlIHRoZSBzb3VyY2UKK2xvY2F0aW9uIGhhcyBiZWVuIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24gYW55IGZ1dHVyZSBjb21tYW5kcworYXBwbGllZCB0byB0aGUgc291cmNlIGxvY2F0aW9uIHdpbGwgbm90IGltcGFjdCB0aGUgZGVzdGluYXRpb24gb2YKK3RoZSBjb3B5LgorCitgZmlsZXJlbmFtZWAKK15eXl5eXl5eXl5eXgorUmVuYW1lcyBhbiBleGlzdGluZyBmaWxlIG9yIHN1YmRpcmVjdG9yeSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbgord2l0aGluIHRoZSBicmFuY2guICBUaGUgZXhpc3RpbmcgZmlsZSBvciBkaXJlY3RvcnkgbXVzdCBleGlzdC4gSWYKK3RoZSBkZXN0aW5hdGlvbiBleGlzdHMgaXQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgc291cmNlIGRpcmVjdG9yeS4KKworLi4uLgorCSdSJyBTUCA8cGF0aD4gU1AgPHBhdGg+IExGCisuLi4uCisKK2hlcmUgdGhlIGZpcnN0IGA8cGF0aD5gIGlzIHRoZSBzb3VyY2UgbG9jYXRpb24gYW5kIHRoZSBzZWNvbmQKK2A8cGF0aD5gIGlzIHRoZSBkZXN0aW5hdGlvbi4gIFNlZSBgZmlsZW1vZGlmeWAgYWJvdmUgZm9yIGEgZGV0YWlsZWQKK2Rlc2NyaXB0aW9uIG9mIHdoYXQgYDxwYXRoPmAgbWF5IGxvb2sgbGlrZS4gIFRvIHVzZSBhIHNvdXJjZSBwYXRoCit0aGF0IGNvbnRhaW5zIFNQIHRoZSBwYXRoIG11c3QgYmUgcXVvdGVkLgorCitBIGBmaWxlcmVuYW1lYCBjb21tYW5kIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseS4gIE9uY2UgdGhlIHNvdXJjZQorbG9jYXRpb24gaGFzIGJlZW4gcmVuYW1lZCB0byB0aGUgZGVzdGluYXRpb24gYW55IGZ1dHVyZSBjb21tYW5kcworYXBwbGllZCB0byB0aGUgc291cmNlIGxvY2F0aW9uIHdpbGwgY3JlYXRlIG5ldyBmaWxlcyB0aGVyZSBhbmQgbm90CitpbXBhY3QgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSByZW5hbWUuCisKK05vdGUgdGhhdCBhIGBmaWxlcmVuYW1lYCBpcyB0aGUgc2FtZSBhcyBhIGBmaWxlY29weWAgZm9sbG93ZWQgYnkgYQorYGZpbGVkZWxldGVgIG9mIHRoZSBzb3VyY2UgbG9jYXRpb24uICBUaGVyZSBpcyBhIHNsaWdodCBwZXJmb3JtYW5jZQorYWR2YW50YWdlIHRvIHVzaW5nIGBmaWxlcmVuYW1lYCwgYnV0IHRoZSBhZHZhbnRhZ2UgaXMgc28gc21hbGwKK3RoYXQgaXQgaXMgbmV2ZXIgd29ydGggdHJ5aW5nIHRvIGNvbnZlcnQgYSBkZWxldGUvYWRkIHBhaXIgaW4KK3NvdXJjZSBtYXRlcmlhbCBpbnRvIGEgcmVuYW1lIGZvciBmYXN0LWltcG9ydC4gIFRoaXMgYGZpbGVyZW5hbWVgCitjb21tYW5kIGlzIHByb3ZpZGVkIGp1c3QgdG8gc2ltcGxpZnkgZnJvbnRlbmRzIHRoYXQgYWxyZWFkeSBoYXZlCityZW5hbWUgaW5mb3JtYXRpb24gYW5kIGRvbid0IHdhbnQgYm90aGVyIHdpdGggZGVjb21wb3NpbmcgaXQgaW50byBhCitgZmlsZWNvcHlgIGZvbGxvd2VkIGJ5IGEgYGZpbGVkZWxldGVgLgorCitgZmlsZWRlbGV0ZWFsbGAKK15eXl5eXl5eXl5eXl5eXgorSW5jbHVkZWQgaW4gYSBgY29tbWl0YCBjb21tYW5kIHRvIHJlbW92ZSBhbGwgZmlsZXMgKGFuZCBhbHNvIGFsbAorZGlyZWN0b3JpZXMpIGZyb20gdGhlIGJyYW5jaC4gIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIGludGVybmFsCiticmFuY2ggc3RydWN0dXJlIHRvIGhhdmUgbm8gZmlsZXMgaW4gaXQsIGFsbG93aW5nIHRoZSBmcm9udGVuZAordG8gc3Vic2VxdWVudGx5IGFkZCBhbGwgaW50ZXJlc3RpbmcgZmlsZXMgZnJvbSBzY3JhdGNoLgorCisuLi4uCisJJ2RlbGV0ZWFsbCcgTEYKKy4uLi4KKworVGhpcyBjb21tYW5kIGlzIGV4dHJlbWVseSB1c2VmdWwgaWYgdGhlIGZyb250ZW5kIGRvZXMgbm90IGtub3cKKyhvciBkb2VzIG5vdCBjYXJlIHRvIGtub3cpIHdoYXQgZmlsZXMgYXJlIGN1cnJlbnRseSBvbiB0aGUgYnJhbmNoLAorYW5kIHRoZXJlZm9yZSBjYW5ub3QgZ2VuZXJhdGUgdGhlIHByb3BlciBgZmlsZWRlbGV0ZWAgY29tbWFuZHMgdG8KK3VwZGF0ZSB0aGUgY29udGVudC4KKworSXNzdWluZyBhIGBmaWxlZGVsZXRlYWxsYCBmb2xsb3dlZCBieSB0aGUgbmVlZGVkIGBmaWxlbW9kaWZ5YAorY29tbWFuZHMgdG8gc2V0IHRoZSBjb3JyZWN0IGNvbnRlbnQgd2lsbCBwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdHMKK2FzIHNlbmRpbmcgb25seSB0aGUgbmVlZGVkIGBmaWxlbW9kaWZ5YCBhbmQgYGZpbGVkZWxldGVgIGNvbW1hbmRzLgorVGhlIGBmaWxlZGVsZXRlYWxsYCBhcHByb2FjaCBtYXkgaG93ZXZlciByZXF1aXJlIGZhc3QtaW1wb3J0IHRvIHVzZSBzbGlnaHRseQorbW9yZSBtZW1vcnkgcGVyIGFjdGl2ZSBicmFuY2ggKGxlc3MgdGhhbiAxIE1pQiBmb3IgZXZlbiBtb3N0IGxhcmdlCitwcm9qZWN0cyk7IHNvIGZyb250ZW5kcyB0aGF0IGNhbiBlYXNpbHkgb2J0YWluIG9ubHkgdGhlIGFmZmVjdGVkCitwYXRocyBmb3IgYSBjb21taXQgYXJlIGVuY291cmFnZWQgdG8gZG8gc28uCisKK2Bub3RlbW9kaWZ5YAorXl5eXl5eXl5eXl5eCitJbmNsdWRlZCBpbiBhIGBjb21taXRgIGA8bm90ZXNfcmVmPmAgY29tbWFuZCB0byBhZGQgYSBuZXcgbm90ZQorYW5ub3RhdGluZyBhIGA8Y29tbWl0dGlzaD5gIG9yIGNoYW5nZSB0aGlzIGFubm90YXRpb24gY29udGVudHMuCitJbnRlcm5hbGx5IGl0IGlzIHNpbWlsYXIgdG8gZmlsZW1vZGlmeSAxMDA2NDQgb24gYDxjb21taXR0aXNoPmAKK3BhdGggKG1heWJlIHNwbGl0IGludG8gc3ViZGlyZWN0b3JpZXMpLiBJdCdzIG5vdCBhZHZpc2VkIHRvCit1c2UgYW55IG90aGVyIGNvbW1hbmRzIHRvIHdyaXRlIHRvIHRoZSBgPG5vdGVzX3JlZj5gIHRyZWUgZXhjZXB0CitgZmlsZWRlbGV0ZWFsbGAgdG8gZGVsZXRlIGFsbCBleGlzdGluZyBub3RlcyBpbiB0aGlzIHRyZWUuCitUaGlzIGNvbW1hbmQgaGFzIHR3byBkaWZmZXJlbnQgbWVhbnMgb2Ygc3BlY2lmeWluZyB0aGUgY29udGVudAorb2YgdGhlIG5vdGUuCisKK0V4dGVybmFsIGRhdGEgZm9ybWF0OjoKKwlUaGUgZGF0YSBjb250ZW50IGZvciB0aGUgbm90ZSB3YXMgYWxyZWFkeSBzdXBwbGllZCBieSBhIHByaW9yCisJYGJsb2JgIGNvbW1hbmQuICBUaGUgZnJvbnRlbmQganVzdCBuZWVkcyB0byBjb25uZWN0IGl0IHRvIHRoZQorCWNvbW1pdCB0aGF0IGlzIHRvIGJlIGFubm90YXRlZC4KKysKKy4uLi4KKwknTicgU1AgPGRhdGFyZWY+IFNQIDxjb21taXR0aXNoPiBMRgorLi4uLgorKworSGVyZSBgPGRhdGFyZWY+YCBjYW4gYmUgZWl0aGVyIGEgbWFyayByZWZlcmVuY2UgKGA6PGlkbnVtPmApCitzZXQgYnkgYSBwcmlvciBgYmxvYmAgY29tbWFuZCwgb3IgYSBmdWxsIDQwLWJ5dGUgU0hBLTEgb2YgYW4KK2V4aXN0aW5nIEdpdCBibG9iIG9iamVjdC4KKworSW5saW5lIGRhdGEgZm9ybWF0OjoKKwlUaGUgZGF0YSBjb250ZW50IGZvciB0aGUgbm90ZSBoYXMgbm90IGJlZW4gc3VwcGxpZWQgeWV0LgorCVRoZSBmcm9udGVuZCB3YW50cyB0byBzdXBwbHkgaXQgYXMgcGFydCBvZiB0aGlzIG1vZGlmeQorCWNvbW1hbmQuCisrCisuLi4uCisJJ04nIFNQICdpbmxpbmUnIFNQIDxjb21taXR0aXNoPiBMRgorCWRhdGEKKy4uLi4KKysKK1NlZSBiZWxvdyBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgYGRhdGFgIGNvbW1hbmQuCisKK0luIGJvdGggZm9ybWF0cyBgPGNvbW1pdHRpc2g+YCBpcyBhbnkgb2YgdGhlIGNvbW1pdCBzcGVjaWZpY2F0aW9uCitleHByZXNzaW9ucyBhbHNvIGFjY2VwdGVkIGJ5IGBmcm9tYCAoc2VlIGFib3ZlKS4KKworYG1hcmtgCit+fn5+fn4KK0FycmFuZ2VzIGZvciBmYXN0LWltcG9ydCB0byBzYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IG9iamVjdCwgYWxsb3dpbmcKK3RoZSBmcm9udGVuZCB0byByZWNhbGwgdGhpcyBvYmplY3QgYXQgYSBmdXR1cmUgcG9pbnQgaW4gdGltZSwgd2l0aG91dAora25vd2luZyBpdHMgU0hBLTEuICBIZXJlIHRoZSBjdXJyZW50IG9iamVjdCBpcyB0aGUgb2JqZWN0IGNyZWF0aW9uCitjb21tYW5kIHRoZSBgbWFya2AgY29tbWFuZCBhcHBlYXJzIHdpdGhpbi4gIFRoaXMgY2FuIGJlIGBjb21taXRgLAorYHRhZ2AsIGFuZCBgYmxvYmAsIGJ1dCBgY29tbWl0YCBpcyB0aGUgbW9zdCBjb21tb24gdXNhZ2UuCisKKy4uLi4KKwknbWFyaycgU1AgJzonIDxpZG51bT4gTEYKKy4uLi4KKword2hlcmUgYDxpZG51bT5gIGlzIHRoZSBudW1iZXIgYXNzaWduZWQgYnkgdGhlIGZyb250ZW5kIHRvIHRoaXMgbWFyay4KK1RoZSB2YWx1ZSBvZiBgPGlkbnVtPmAgaXMgZXhwcmVzc2VkIGFzIGFuIEFTQ0lJIGRlY2ltYWwgaW50ZWdlci4KK1RoZSB2YWx1ZSAwIGlzIHJlc2VydmVkIGFuZCBjYW5ub3QgYmUgdXNlZCBhcworYSBtYXJrLiAgT25seSB2YWx1ZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEgbWF5IGJlIHVzZWQgYXMgbWFya3MuCisKK05ldyBtYXJrcyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiAgRXhpc3RpbmcgbWFya3MgY2FuIGJlIG1vdmVkCit0byBhbm90aGVyIG9iamVjdCBzaW1wbHkgYnkgcmV1c2luZyB0aGUgc2FtZSBgPGlkbnVtPmAgaW4gYW5vdGhlcgorYG1hcmtgIGNvbW1hbmQuCisKK2B0YWdgCit+fn5+fgorQ3JlYXRlcyBhbiBhbm5vdGF0ZWQgdGFnIHJlZmVycmluZyB0byBhIHNwZWNpZmljIGNvbW1pdC4gIFRvIGNyZWF0ZQorbGlnaHR3ZWlnaHQgKG5vbi1hbm5vdGF0ZWQpIHRhZ3Mgc2VlIHRoZSBgcmVzZXRgIGNvbW1hbmQgYmVsb3cuCisKKy4uLi4KKwkndGFnJyBTUCA8bmFtZT4gTEYKKwknZnJvbScgU1AgPGNvbW1pdHRpc2g+IExGCisJJ3RhZ2dlcicgKFNQIDxuYW1lPik/IFNQIExUIDxlbWFpbD4gR1QgU1AgPHdoZW4+IExGCisJZGF0YQorLi4uLgorCit3aGVyZSBgPG5hbWU+YCBpcyB0aGUgbmFtZSBvZiB0aGUgdGFnIHRvIGNyZWF0ZS4KKworVGFnIG5hbWVzIGFyZSBhdXRvbWF0aWNhbGx5IHByZWZpeGVkIHdpdGggYHJlZnMvdGFncy9gIHdoZW4gc3RvcmVkCitpbiBHaXQsIHNvIGltcG9ydGluZyB0aGUgQ1ZTIGJyYW5jaCBzeW1ib2wgYFJFTEVORy0xXzAtRklOQUxgIHdvdWxkCit1c2UganVzdCBgUkVMRU5HLTFfMC1GSU5BTGAgZm9yIGA8bmFtZT5gLCBhbmQgZmFzdC1pbXBvcnQgd2lsbCB3cml0ZSB0aGUKK2NvcnJlc3BvbmRpbmcgcmVmIGFzIGByZWZzL3RhZ3MvUkVMRU5HLTFfMC1GSU5BTGAuCisKK1RoZSB2YWx1ZSBvZiBgPG5hbWU+YCBtdXN0IGJlIGEgdmFsaWQgcmVmbmFtZSBpbiBHaXQgYW5kIHRoZXJlZm9yZQorbWF5IGNvbnRhaW4gZm9yd2FyZCBzbGFzaGVzLiAgQXMgYExGYCBpcyBub3QgdmFsaWQgaW4gYSBHaXQgcmVmbmFtZSwKK25vIHF1b3Rpbmcgb3IgZXNjYXBpbmcgc3ludGF4IGlzIHN1cHBvcnRlZCBoZXJlLgorCitUaGUgYGZyb21gIGNvbW1hbmQgaXMgdGhlIHNhbWUgYXMgaW4gdGhlIGBjb21taXRgIGNvbW1hbmQ7IHNlZQorYWJvdmUgZm9yIGRldGFpbHMuCisKK1RoZSBgdGFnZ2VyYCBjb21tYW5kIHVzZXMgdGhlIHNhbWUgZm9ybWF0IGFzIGBjb21taXR0ZXJgIHdpdGhpbgorYGNvbW1pdGA7IGFnYWluIHNlZSBhYm92ZSBmb3IgZGV0YWlscy4KKworVGhlIGBkYXRhYCBjb21tYW5kIGZvbGxvd2luZyBgdGFnZ2VyYCBtdXN0IHN1cHBseSB0aGUgYW5ub3RhdGVkIHRhZworbWVzc2FnZSAoc2VlIGJlbG93IGZvciBgZGF0YWAgY29tbWFuZCBzeW50YXgpLiAgVG8gaW1wb3J0IGFuIGVtcHR5Cit0YWcgbWVzc2FnZSB1c2UgYSAwIGxlbmd0aCBkYXRhLiAgVGFnIG1lc3NhZ2VzIGFyZSBmcmVlLWZvcm0gYW5kIGFyZQorbm90IGludGVycHJldGVkIGJ5IEdpdC4gIEN1cnJlbnRseSB0aGV5IG11c3QgYmUgZW5jb2RlZCBpbiBVVEYtOCwKK2FzIGZhc3QtaW1wb3J0IGRvZXMgbm90IHBlcm1pdCBvdGhlciBlbmNvZGluZ3MgdG8gYmUgc3BlY2lmaWVkLgorCitTaWduaW5nIGFubm90YXRlZCB0YWdzIGR1cmluZyBpbXBvcnQgZnJvbSB3aXRoaW4gZmFzdC1pbXBvcnQgaXMgbm90CitzdXBwb3J0ZWQuICBUcnlpbmcgdG8gaW5jbHVkZSB5b3VyIG93biBQR1AvR1BHIHNpZ25hdHVyZSBpcyBub3QKK3JlY29tbWVuZGVkLCBhcyB0aGUgZnJvbnRlbmQgZG9lcyBub3QgKGVhc2lseSkgaGF2ZSBhY2Nlc3MgdG8gdGhlCitjb21wbGV0ZSBzZXQgb2YgYnl0ZXMgd2hpY2ggbm9ybWFsbHkgZ29lcyBpbnRvIHN1Y2ggYSBzaWduYXR1cmUuCitJZiBzaWduaW5nIGlzIHJlcXVpcmVkLCBjcmVhdGUgbGlnaHR3ZWlnaHQgdGFncyBmcm9tIHdpdGhpbiBmYXN0LWltcG9ydCB3aXRoCitgcmVzZXRgLCB0aGVuIGNyZWF0ZSB0aGUgYW5ub3RhdGVkIHZlcnNpb25zIG9mIHRob3NlIHRhZ3Mgb2ZmbGluZQord2l0aCB0aGUgc3RhbmRhcmQgJ2dpdCB0YWcnIHByb2Nlc3MuCisKK2ByZXNldGAKK35+fn5+fn4KK0NyZWF0ZXMgKG9yIHJlY3JlYXRlcykgdGhlIG5hbWVkIGJyYW5jaCwgb3B0aW9uYWxseSBzdGFydGluZyBmcm9tCithIHNwZWNpZmljIHJldmlzaW9uLiAgVGhlIHJlc2V0IGNvbW1hbmQgYWxsb3dzIGEgZnJvbnRlbmQgdG8gaXNzdWUKK2EgbmV3IGBmcm9tYCBjb21tYW5kIGZvciBhbiBleGlzdGluZyBicmFuY2gsIG9yIHRvIGNyZWF0ZSBhIG5ldworYnJhbmNoIGZyb20gYW4gZXhpc3RpbmcgY29tbWl0IHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgY29tbWl0LgorCisuLi4uCisJJ3Jlc2V0JyBTUCA8cmVmPiBMRgorCSgnZnJvbScgU1AgPGNvbW1pdHRpc2g+IExGKT8KKwlMRj8KKy4uLi4KKworRm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgYDxyZWY+YCBhbmQgYDxjb21taXR0aXNoPmAgc2VlIGFib3ZlCit1bmRlciBgY29tbWl0YCBhbmQgYGZyb21gLgorCitUaGUgYExGYCBhZnRlciB0aGUgY29tbWFuZCBpcyBvcHRpb25hbCAoaXQgdXNlZCB0byBiZSByZXF1aXJlZCkuCisKK1RoZSBgcmVzZXRgIGNvbW1hbmQgY2FuIGFsc28gYmUgdXNlZCB0byBjcmVhdGUgbGlnaHR3ZWlnaHQKKyhub24tYW5ub3RhdGVkKSB0YWdzLiAgRm9yIGV4YW1wbGU6CisKKz09PT0KKwlyZXNldCByZWZzL3RhZ3MvOTM4CisJZnJvbSA6OTM4Cis9PT09CisKK3dvdWxkIGNyZWF0ZSB0aGUgbGlnaHR3ZWlnaHQgdGFnIGByZWZzL3RhZ3MvOTM4YCByZWZlcnJpbmcgdG8KK3doYXRldmVyIGNvbW1pdCBtYXJrIGA6OTM4YCByZWZlcmVuY2VzLgorCitgYmxvYmAKK35+fn5+fgorUmVxdWVzdHMgd3JpdGluZyBvbmUgZmlsZSByZXZpc2lvbiB0byB0aGUgcGFja2ZpbGUuICBUaGUgcmV2aXNpb24KK2lzIG5vdCBjb25uZWN0ZWQgdG8gYW55IGNvbW1pdDsgdGhpcyBjb25uZWN0aW9uIG11c3QgYmUgZm9ybWVkIGluCithIHN1YnNlcXVlbnQgYGNvbW1pdGAgY29tbWFuZCBieSByZWZlcmVuY2luZyB0aGUgYmxvYiB0aHJvdWdoIGFuCithc3NpZ25lZCBtYXJrLgorCisuLi4uCisJJ2Jsb2InIExGCisJbWFyaz8KKwlkYXRhCisuLi4uCisKK1RoZSBtYXJrIGNvbW1hbmQgaXMgb3B0aW9uYWwgaGVyZSBhcyBzb21lIGZyb250ZW5kcyBoYXZlIGNob3NlbgordG8gZ2VuZXJhdGUgdGhlIEdpdCBTSEEtMSBmb3IgdGhlIGJsb2Igb24gdGhlaXIgb3duLCBhbmQgZmVlZCB0aGF0CitkaXJlY3RseSB0byBgY29tbWl0YC4gIFRoaXMgaXMgdHlwaWNhbGx5IG1vcmUgd29yayB0aGFuIGl0J3Mgd29ydGgKK2hvd2V2ZXIsIGFzIG1hcmtzIGFyZSBpbmV4cGVuc2l2ZSB0byBzdG9yZSBhbmQgZWFzeSB0byB1c2UuCisKK2BkYXRhYAorfn5+fn5+CitTdXBwbGllcyByYXcgZGF0YSAoZm9yIHVzZSBhcyBibG9iL2ZpbGUgY29udGVudCwgY29tbWl0IG1lc3NhZ2VzLCBvcgorYW5ub3RhdGVkIHRhZyBtZXNzYWdlcykgdG8gZmFzdC1pbXBvcnQuICBEYXRhIGNhbiBiZSBzdXBwbGllZCB1c2luZyBhbiBleGFjdAorYnl0ZSBjb3VudCBvciBkZWxpbWl0ZWQgd2l0aCBhIHRlcm1pbmF0aW5nIGxpbmUuICBSZWFsIGZyb250ZW5kcworaW50ZW5kZWQgZm9yIHByb2R1Y3Rpb24tcXVhbGl0eSBjb252ZXJzaW9ucyBzaG91bGQgYWx3YXlzIHVzZSB0aGUKK2V4YWN0IGJ5dGUgY291bnQgZm9ybWF0LCBhcyBpdCBpcyBtb3JlIHJvYnVzdCBhbmQgcGVyZm9ybXMgYmV0dGVyLgorVGhlIGRlbGltaXRlZCBmb3JtYXQgaXMgaW50ZW5kZWQgcHJpbWFyaWx5IGZvciB0ZXN0aW5nIGZhc3QtaW1wb3J0LgorCitDb21tZW50IGxpbmVzIGFwcGVhcmluZyB3aXRoaW4gdGhlIGA8cmF3PmAgcGFydCBvZiBgZGF0YWAgY29tbWFuZHMKK2FyZSBhbHdheXMgdGFrZW4gdG8gYmUgcGFydCBvZiB0aGUgYm9keSBvZiB0aGUgZGF0YSBhbmQgYXJlIHRoZXJlZm9yZQorbmV2ZXIgaWdub3JlZCBieSBmYXN0LWltcG9ydC4gIFRoaXMgbWFrZXMgaXQgc2FmZSB0byBpbXBvcnQgYW55CitmaWxlL21lc3NhZ2UgY29udGVudCB3aG9zZSBsaW5lcyBtaWdodCBzdGFydCB3aXRoIGAjYC4KKworRXhhY3QgYnl0ZSBjb3VudCBmb3JtYXQ6OgorCVRoZSBmcm9udGVuZCBtdXN0IHNwZWNpZnkgdGhlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhLgorKworLi4uLgorCSdkYXRhJyBTUCA8Y291bnQ+IExGCisJPHJhdz4gTEY/CisuLi4uCisrCit3aGVyZSBgPGNvdW50PmAgaXMgdGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyBhcHBlYXJpbmcgd2l0aGluCitgPHJhdz5gLiAgVGhlIHZhbHVlIG9mIGA8Y291bnQ+YCBpcyBleHByZXNzZWQgYXMgYW4gQVNDSUkgZGVjaW1hbAoraW50ZWdlci4gIFRoZSBgTEZgIG9uIGVpdGhlciBzaWRlIG9mIGA8cmF3PmAgaXMgbm90CitpbmNsdWRlZCBpbiBgPGNvdW50PmAgYW5kIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBpbXBvcnRlZCBkYXRhLgorKworVGhlIGBMRmAgYWZ0ZXIgYDxyYXc+YCBpcyBvcHRpb25hbCAoaXQgdXNlZCB0byBiZSByZXF1aXJlZCkgYnV0CityZWNvbW1lbmRlZC4gIEFsd2F5cyBpbmNsdWRpbmcgaXQgbWFrZXMgZGVidWdnaW5nIGEgZmFzdC1pbXBvcnQKK3N0cmVhbSBlYXNpZXIgYXMgdGhlIG5leHQgY29tbWFuZCBhbHdheXMgc3RhcnRzIGluIGNvbHVtbiAwCitvZiB0aGUgbmV4dCBsaW5lLCBldmVuIGlmIGA8cmF3PmAgZGlkIG5vdCBlbmQgd2l0aCBhbiBgTEZgLgorCitEZWxpbWl0ZWQgZm9ybWF0OjoKKwlBIGRlbGltaXRlciBzdHJpbmcgaXMgdXNlZCB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIGRhdGEuCisJZmFzdC1pbXBvcnQgd2lsbCBjb21wdXRlIHRoZSBsZW5ndGggYnkgc2VhcmNoaW5nIGZvciB0aGUgZGVsaW1pdGVyLgorCVRoaXMgZm9ybWF0IGlzIHByaW1hcmlseSB1c2VmdWwgZm9yIHRlc3RpbmcgYW5kIGlzIG5vdAorCXJlY29tbWVuZGVkIGZvciByZWFsIGRhdGEuCisrCisuLi4uCisJJ2RhdGEnIFNQICc8PCcgPGRlbGltPiBMRgorCTxyYXc+IExGCisJPGRlbGltPiBMRgorCUxGPworLi4uLgorKword2hlcmUgYDxkZWxpbT5gIGlzIHRoZSBjaG9zZW4gZGVsaW1pdGVyIHN0cmluZy4gIFRoZSBzdHJpbmcgYDxkZWxpbT5gCittdXN0IG5vdCBhcHBlYXIgb24gYSBsaW5lIGJ5IGl0c2VsZiB3aXRoaW4gYDxyYXc+YCwgYXMgb3RoZXJ3aXNlCitmYXN0LWltcG9ydCB3aWxsIHRoaW5rIHRoZSBkYXRhIGVuZHMgZWFybGllciB0aGFuIGl0IHJlYWxseSBkb2VzLiAgVGhlIGBMRmAKK2ltbWVkaWF0ZWx5IHRyYWlsaW5nIGA8cmF3PmAgaXMgcGFydCBvZiBgPHJhdz5gLiAgVGhpcyBpcyBvbmUgb2YKK3RoZSBsaW1pdGF0aW9ucyBvZiB0aGUgZGVsaW1pdGVkIGZvcm1hdCwgaXQgaXMgaW1wb3NzaWJsZSB0byBzdXBwbHkKK2EgZGF0YSBjaHVuayB3aGljaCBkb2VzIG5vdCBoYXZlIGFuIExGIGFzIGl0cyBsYXN0IGJ5dGUuCisrCitUaGUgYExGYCBhZnRlciBgPGRlbGltPiBMRmAgaXMgb3B0aW9uYWwgKGl0IHVzZWQgdG8gYmUgcmVxdWlyZWQpLgorCitgY2hlY2twb2ludGAKK35+fn5+fn5+fn5+fgorRm9yY2VzIGZhc3QtaW1wb3J0IHRvIGNsb3NlIHRoZSBjdXJyZW50IHBhY2tmaWxlLCBzdGFydCBhIG5ldyBvbmUsIGFuZCB0bworc2F2ZSBvdXQgYWxsIGN1cnJlbnQgYnJhbmNoIHJlZnMsIHRhZ3MgYW5kIG1hcmtzLgorCisuLi4uCisJJ2NoZWNrcG9pbnQnIExGCisJTEY/CisuLi4uCisKK05vdGUgdGhhdCBmYXN0LWltcG9ydCBhdXRvbWF0aWNhbGx5IHN3aXRjaGVzIHBhY2tmaWxlcyB3aGVuIHRoZSBjdXJyZW50CitwYWNrZmlsZSByZWFjaGVzIFwtLW1heC1wYWNrLXNpemUsIG9yIDQgR2lCLCB3aGljaGV2ZXIgbGltaXQgaXMKK3NtYWxsZXIuICBEdXJpbmcgYW4gYXV0b21hdGljIHBhY2tmaWxlIHN3aXRjaCBmYXN0LWltcG9ydCBkb2VzIG5vdCB1cGRhdGUKK3RoZSBicmFuY2ggcmVmcywgdGFncyBvciBtYXJrcy4KKworQXMgYSBgY2hlY2twb2ludGAgY2FuIHJlcXVpcmUgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgQ1BVIHRpbWUgYW5kCitkaXNrIElPICh0byBjb21wdXRlIHRoZSBvdmVyYWxsIHBhY2sgU0hBLTEgY2hlY2tzdW0sIGdlbmVyYXRlIHRoZQorY29ycmVzcG9uZGluZyBpbmRleCBmaWxlLCBhbmQgdXBkYXRlIHRoZSByZWZzKSBpdCBjYW4gZWFzaWx5IHRha2UKK3NldmVyYWwgbWludXRlcyBmb3IgYSBzaW5nbGUgYGNoZWNrcG9pbnRgIGNvbW1hbmQgdG8gY29tcGxldGUuCisKK0Zyb250ZW5kcyBtYXkgY2hvb3NlIHRvIGlzc3VlIGNoZWNrcG9pbnRzIGR1cmluZyBleHRyZW1lbHkgbGFyZ2UKK2FuZCBsb25nIHJ1bm5pbmcgaW1wb3J0cywgb3Igd2hlbiB0aGV5IG5lZWQgdG8gYWxsb3cgYW5vdGhlciBHaXQKK3Byb2Nlc3MgYWNjZXNzIHRvIGEgYnJhbmNoLiAgSG93ZXZlciBnaXZlbiB0aGF0IGEgMzAgR2lCIFN1YnZlcnNpb24KK3JlcG9zaXRvcnkgY2FuIGJlIGxvYWRlZCBpbnRvIEdpdCB0aHJvdWdoIGZhc3QtaW1wb3J0IGluIGFib3V0IDMgaG91cnMsCitleHBsaWNpdCBjaGVja3BvaW50aW5nIG1heSBub3QgYmUgbmVjZXNzYXJ5LgorCitUaGUgYExGYCBhZnRlciB0aGUgY29tbWFuZCBpcyBvcHRpb25hbCAoaXQgdXNlZCB0byBiZSByZXF1aXJlZCkuCisKK2Bwcm9ncmVzc2AKK35+fn5+fn5+fn4KK0NhdXNlcyBmYXN0LWltcG9ydCB0byBwcmludCB0aGUgZW50aXJlIGBwcm9ncmVzc2AgbGluZSB1bm1vZGlmaWVkIHRvCitpdHMgc3RhbmRhcmQgb3V0cHV0IGNoYW5uZWwgKGZpbGUgZGVzY3JpcHRvciAxKSB3aGVuIHRoZSBjb21tYW5kIGlzCitwcm9jZXNzZWQgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLiAgVGhlIGNvbW1hbmQgb3RoZXJ3aXNlIGhhcyBubyBpbXBhY3QKK29uIHRoZSBjdXJyZW50IGltcG9ydCwgb3Igb24gYW55IG9mIGZhc3QtaW1wb3J0J3MgaW50ZXJuYWwgc3RhdGUuCisKKy4uLi4KKwkncHJvZ3Jlc3MnIFNQIDxhbnk+IExGCisJTEY/CisuLi4uCisKK1RoZSBgPGFueT5gIHBhcnQgb2YgdGhlIGNvbW1hbmQgbWF5IGNvbnRhaW4gYW55IHNlcXVlbmNlIG9mIGJ5dGVzCit0aGF0IGRvZXMgbm90IGNvbnRhaW4gYExGYC4gIFRoZSBgTEZgIGFmdGVyIHRoZSBjb21tYW5kIGlzIG9wdGlvbmFsLgorQ2FsbGVycyBtYXkgd2lzaCB0byBwcm9jZXNzIHRoZSBvdXRwdXQgdGhyb3VnaCBhIHRvb2wgc3VjaCBhcyBzZWQgdG8KK3JlbW92ZSB0aGUgbGVhZGluZyBwYXJ0IG9mIHRoZSBsaW5lLCBmb3IgZXhhbXBsZToKKworPT09PQorCWZyb250ZW5kIHwgZ2l0IGZhc3QtaW1wb3J0IHwgc2VkICdzL15wcm9ncmVzcyAvLycKKz09PT0KKworUGxhY2luZyBhIGBwcm9ncmVzc2AgY29tbWFuZCBpbW1lZGlhdGVseSBhZnRlciBhIGBjaGVja3BvaW50YCB3aWxsCitpbmZvcm0gdGhlIHJlYWRlciB3aGVuIHRoZSBgY2hlY2twb2ludGAgaGFzIGJlZW4gY29tcGxldGVkIGFuZCBpdAorY2FuIHNhZmVseSBhY2Nlc3MgdGhlIHJlZnMgdGhhdCBmYXN0LWltcG9ydCB1cGRhdGVkLgorCitgY2F0LWJsb2JgCit+fn5+fn5+fn5+CitDYXVzZXMgZmFzdC1pbXBvcnQgdG8gcHJpbnQgYSBibG9iIHRvIGEgZmlsZSBkZXNjcmlwdG9yIHByZXZpb3VzbHkKK2FycmFuZ2VkIHdpdGggdGhlIGAtLWNhdC1ibG9iLWZkYCBhcmd1bWVudC4gIFRoZSBjb21tYW5kIG90aGVyd2lzZQoraGFzIG5vIGltcGFjdCBvbiB0aGUgY3VycmVudCBpbXBvcnQ7IGl0cyBtYWluIHB1cnBvc2UgaXMgdG8KK3JldHJpZXZlIGJsb2JzIHRoYXQgbWF5IGJlIGluIGZhc3QtaW1wb3J0J3MgbWVtb3J5IGJ1dCBub3QKK2FjY2Vzc2libGUgZnJvbSB0aGUgdGFyZ2V0IHJlcG9zaXRvcnkuCisKKy4uLi4KKwknY2F0LWJsb2InIFNQIDxkYXRhcmVmPiBMRgorLi4uLgorCitUaGUgYDxkYXRhcmVmPmAgY2FuIGJlIGVpdGhlciBhIG1hcmsgcmVmZXJlbmNlIChgOjxpZG51bT5gKQorc2V0IHByZXZpb3VzbHkgb3IgYSBmdWxsIDQwLWJ5dGUgU0hBLTEgb2YgYSBHaXQgYmxvYiwgcHJlZXhpc3Rpbmcgb3IKK3JlYWR5IHRvIGJlIHdyaXR0ZW4uCisKK091dHB1dCB1c2VzIHRoZSBzYW1lIGZvcm1hdCBhcyBgZ2l0IGNhdC1maWxlIC0tYmF0Y2hgOgorCis9PT09CisJPHNoYTE+IFNQICdibG9iJyBTUCA8c2l6ZT4gTEYKKwk8Y29udGVudHM+IExGCis9PT09CisKK1RoaXMgY29tbWFuZCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiB0aGUgc3RyZWFtIHRoYXQgY29tbWVudHMgYXJlCithY2NlcHRlZC4gIEluIHBhcnRpY3VsYXIsIHRoZSBgY2F0LWJsb2JgIGNvbW1hbmQgY2FuIGJlIHVzZWQgaW4gdGhlCittaWRkbGUgb2YgYSBjb21taXQgYnV0IG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgYGRhdGFgIGNvbW1hbmQuCisKK1NlZSBgYFJlc3BvbnNlcyBUbyBDb21tYW5kcycnIGJlbG93IGZvciBkZXRhaWxzIGFib3V0IGhvdyB0byByZWFkCit0aGlzIG91dHB1dCBzYWZlbHkuCisKK2Bsc2AKK35+fn4KK1ByaW50cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGF0IGEgcGF0aCB0byBhIGZpbGUgZGVzY3JpcHRvcgorcHJldmlvdXNseSBhcnJhbmdlZCB3aXRoIHRoZSBgLS1jYXQtYmxvYi1mZGAgYXJndW1lbnQuICBUaGlzIGFsbG93cworcHJpbnRpbmcgYSBibG9iIGZyb20gdGhlIGFjdGl2ZSBjb21taXQgKHdpdGggYGNhdC1ibG9iYCkgb3IgY29weWluZyBhCitibG9iIG9yIHRyZWUgZnJvbSBhIHByZXZpb3VzIGNvbW1pdCBmb3IgdXNlIGluIHRoZSBjdXJyZW50IG9uZSAod2l0aAorYGZpbGVtb2RpZnlgKS4KKworVGhlIGBsc2AgY29tbWFuZCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiB0aGUgc3RyZWFtIHRoYXQgY29tbWVudHMgYXJlCithY2NlcHRlZCwgaW5jbHVkaW5nIHRoZSBtaWRkbGUgb2YgYSBjb21taXQuCisKK1JlYWRpbmcgZnJvbSB0aGUgYWN0aXZlIGNvbW1pdDo6CisJVGhpcyBmb3JtIGNhbiBvbmx5IGJlIHVzZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGBjb21taXRgLgorCVRoZSBwYXRoIG5hbWVzIGEgZGlyZWN0b3J5IGVudHJ5IHdpdGhpbiBmYXN0LWltcG9ydCdzCisJYWN0aXZlIGNvbW1pdC4gIFRoZSBwYXRoIG11c3QgYmUgcXVvdGVkIGluIHRoaXMgY2FzZS4KKysKKy4uLi4KKwknbHMnIFNQIDxwYXRoPiBMRgorLi4uLgorCitSZWFkaW5nIGZyb20gYSBuYW1lZCB0cmVlOjoKKwlUaGUgYDxkYXRhcmVmPmAgY2FuIGJlIGEgbWFyayByZWZlcmVuY2UgKGA6PGlkbnVtPmApIG9yIHRoZQorCWZ1bGwgNDAtYnl0ZSBTSEEtMSBvZiBhIEdpdCB0YWcsIGNvbW1pdCwgb3IgdHJlZSBvYmplY3QsCisJcHJlZXhpc3Rpbmcgb3Igd2FpdGluZyB0byBiZSB3cml0dGVuLgorCVRoZSBwYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHRyZWUKKwluYW1lZCBieSBgPGRhdGFyZWY+YC4KKysKKy4uLi4KKwknbHMnIFNQIDxkYXRhcmVmPiBTUCA8cGF0aD4gTEYKKy4uLi4KKworU2VlIGBmaWxlbW9kaWZ5YCBhYm92ZSBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBgPHBhdGg+YC4KKworT3V0cHV0IHVzZXMgdGhlIHNhbWUgZm9ybWF0IGFzIGBnaXQgbHMtdHJlZSA8dHJlZT4gLS0gPHBhdGg+YDoKKworPT09PQorCTxtb2RlPiBTUCAoJ2Jsb2InIHwgJ3RyZWUnIHwgJ2NvbW1pdCcpIFNQIDxkYXRhcmVmPiBIVCA8cGF0aD4gTEYKKz09PT0KKworVGhlIDxkYXRhcmVmPiByZXByZXNlbnRzIHRoZSBibG9iLCB0cmVlLCBvciBjb21taXQgb2JqZWN0IGF0IDxwYXRoPgorYW5kIGNhbiBiZSB1c2VkIGluIGxhdGVyICdjYXQtYmxvYicsICdmaWxlbW9kaWZ5Jywgb3IgJ2xzJyBjb21tYW5kcy4KKworSWYgdGhlcmUgaXMgbm8gZmlsZSBvciBzdWJ0cmVlIGF0IHRoYXQgcGF0aCwgJ2dpdCBmYXN0LWltcG9ydCcgd2lsbAoraW5zdGVhZCByZXBvcnQKKworPT09PQorCW1pc3NpbmcgU1AgPHBhdGg+IExGCis9PT09CisKK1NlZSBgYFJlc3BvbnNlcyBUbyBDb21tYW5kcycnIGJlbG93IGZvciBkZXRhaWxzIGFib3V0IGhvdyB0byByZWFkCit0aGlzIG91dHB1dCBzYWZlbHkuCisKK2BmZWF0dXJlYAorfn5+fn5+fn5+CitSZXF1aXJlIHRoYXQgZmFzdC1pbXBvcnQgc3VwcG9ydHMgdGhlIHNwZWNpZmllZCBmZWF0dXJlLCBvciBhYm9ydCBpZgoraXQgZG9lcyBub3QuCisKKy4uLi4KKwknZmVhdHVyZScgU1AgPGZlYXR1cmU+ICgnPScgPGFyZ3VtZW50Pik/IExGCisuLi4uCisKK1RoZSA8ZmVhdHVyZT4gcGFydCBvZiB0aGUgY29tbWFuZCBtYXkgYmUgYW55IG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCitkYXRlLWZvcm1hdDo6CitleHBvcnQtbWFya3M6OgorcmVsYXRpdmUtbWFya3M6Ogorbm8tcmVsYXRpdmUtbWFya3M6OgorZm9yY2U6OgorCUFjdCBhcyB0aG91Z2ggdGhlIGNvcnJlc3BvbmRpbmcgY29tbWFuZC1saW5lIG9wdGlvbiB3aXRoCisJYSBsZWFkaW5nICctLScgd2FzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lCisJKHNlZSBPUFRJT05TLCBhYm92ZSkuCisKK2ltcG9ydC1tYXJrczo6CitpbXBvcnQtbWFya3MtaWYtZXhpc3RzOjoKKwlMaWtlIC0taW1wb3J0LW1hcmtzIGV4Y2VwdCBpbiB0d28gcmVzcGVjdHM6IGZpcnN0LCBvbmx5IG9uZQorCSJmZWF0dXJlIGltcG9ydC1tYXJrcyIgb3IgImZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIKKwljb21tYW5kIGlzIGFsbG93ZWQgcGVyIHN0cmVhbTsgc2Vjb25kLCBhbiAtLWltcG9ydC1tYXJrcz0KKwlvciAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMgY29tbWFuZC1saW5lIG9wdGlvbiBvdmVycmlkZXMKKwlhbnkgb2YgdGhlc2UgImZlYXR1cmUiIGNvbW1hbmRzIGluIHRoZSBzdHJlYW07IHRoaXJkLAorCSJmZWF0dXJlIGltcG9ydC1tYXJrcy1pZi1leGlzdHMiIGxpa2UgYSBjb3JyZXNwb25kaW5nCisJY29tbWFuZC1saW5lIG9wdGlvbiBzaWxlbnRseSBza2lwcyBhIG5vbmV4aXN0ZW50IGZpbGUuCisKK2NhdC1ibG9iOjoKK2xzOjoKKwlSZXF1aXJlIHRoYXQgdGhlIGJhY2tlbmQgc3VwcG9ydCB0aGUgJ2NhdC1ibG9iJyBvciAnbHMnIGNvbW1hbmQuCisJVmVyc2lvbnMgb2YgZmFzdC1pbXBvcnQgbm90IHN1cHBvcnRpbmcgdGhlIHNwZWNpZmllZCBjb21tYW5kCisJd2lsbCBleGl0IHdpdGggYSBtZXNzYWdlIGluZGljYXRpbmcgc28uCisJVGhpcyBsZXRzIHRoZSBpbXBvcnQgZXJyb3Igb3V0IGVhcmx5IHdpdGggYSBjbGVhciBtZXNzYWdlLAorCXJhdGhlciB0aGFuIHdhc3RpbmcgdGltZSBvbiB0aGUgZWFybHkgcGFydCBvZiBhbiBpbXBvcnQKKwliZWZvcmUgdGhlIHVuc3VwcG9ydGVkIGNvbW1hbmQgaXMgZGV0ZWN0ZWQuCisKK25vdGVzOjoKKwlSZXF1aXJlIHRoYXQgdGhlIGJhY2tlbmQgc3VwcG9ydCB0aGUgJ25vdGVtb2RpZnknIChOKQorCXN1YmNvbW1hbmQgdG8gdGhlICdjb21taXQnIGNvbW1hbmQuCisJVmVyc2lvbnMgb2YgZmFzdC1pbXBvcnQgbm90IHN1cHBvcnRpbmcgbm90ZXMgd2lsbCBleGl0CisJd2l0aCBhIG1lc3NhZ2UgaW5kaWNhdGluZyBzby4KKworZG9uZTo6CisJRXJyb3Igb3V0IGlmIHRoZSBzdHJlYW0gZW5kcyB3aXRob3V0IGEgJ2RvbmUnIGNvbW1hbmQuCisJV2l0aG91dCB0aGlzIGZlYXR1cmUsIGVycm9ycyBjYXVzaW5nIHRoZSBmcm9udGVuZCB0byBlbmQKKwlhYnJ1cHRseSBhdCBhIGNvbnZlbmllbnQgcG9pbnQgaW4gdGhlIHN0cmVhbSBjYW4gZ28KKwl1bmRldGVjdGVkLiAgVGhpcyBtYXkgb2NjdXIsIGZvciBleGFtcGxlLCBpZiBhbiBpbXBvcnQKKwlmcm9udCBlbmQgZGllcyBpbiBtaWQtb3BlcmF0aW9uIHdpdGhvdXQgZW1pdHRpbmcgU0lHVEVSTQorCW9yIFNJR0tJTEwgYXQgaXRzIHN1Ym9yZGluYXRlIGdpdCBmYXN0LWltcG9ydCBpbnN0YW5jZS4KKworYG9wdGlvbmAKK35+fn5+fn5+CitQcm9jZXNzZXMgdGhlIHNwZWNpZmllZCBvcHRpb24gc28gdGhhdCBnaXQgZmFzdC1pbXBvcnQgYmVoYXZlcyBpbiBhCit3YXkgdGhhdCBzdWl0cyB0aGUgZnJvbnRlbmQncyBuZWVkcy4KK05vdGUgdGhhdCBvcHRpb25zIHNwZWNpZmllZCBieSB0aGUgZnJvbnRlbmQgYXJlIG92ZXJyaWRkZW4gYnkgYW55CitvcHRpb25zIHRoZSB1c2VyIG1heSBzcGVjaWZ5IHRvIGdpdCBmYXN0LWltcG9ydCBpdHNlbGYuCisKKy4uLi4KKyAgICAnb3B0aW9uJyBTUCA8b3B0aW9uPiBMRgorLi4uLgorCitUaGUgYDxvcHRpb24+YCBwYXJ0IG9mIHRoZSBjb21tYW5kIG1heSBjb250YWluIGFueSBvZiB0aGUgb3B0aW9ucworbGlzdGVkIGluIHRoZSBPUFRJT05TIHNlY3Rpb24gdGhhdCBkbyBub3QgY2hhbmdlIGltcG9ydCBzZW1hbnRpY3MsCit3aXRob3V0IHRoZSBsZWFkaW5nICctLScgYW5kIGlzIHRyZWF0ZWQgaW4gdGhlIHNhbWUgd2F5LgorCitPcHRpb24gY29tbWFuZHMgbXVzdCBiZSB0aGUgZmlyc3QgY29tbWFuZHMgb24gdGhlIGlucHV0IChub3QgY291bnRpbmcKK2ZlYXR1cmUgY29tbWFuZHMpLCB0byBnaXZlIGFuIG9wdGlvbiBjb21tYW5kIGFmdGVyIGFueSBub24tb3B0aW9uCitjb21tYW5kIGlzIGFuIGVycm9yLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmRsaW5lIG9wdGlvbnMgY2hhbmdlIGltcG9ydCBzZW1hbnRpY3MgYW5kIG1heSB0aGVyZWZvcmUKK25vdCBiZSBwYXNzZWQgYXMgb3B0aW9uOgorCisqIGRhdGUtZm9ybWF0CisqIGltcG9ydC1tYXJrcworKiBleHBvcnQtbWFya3MKKyogY2F0LWJsb2ItZmQKKyogZm9yY2UKKworYGRvbmVgCit+fn5+fn4KK0lmIHRoZSBgZG9uZWAgZmVhdHVyZSBpcyBub3QgaW4gdXNlLCB0cmVhdGVkIGFzIGlmIEVPRiB3YXMgcmVhZC4KK1RoaXMgY2FuIGJlIHVzZWQgdG8gdGVsbCBmYXN0LWltcG9ydCB0byBmaW5pc2ggZWFybHkuCisKK0lmIHRoZSBgLS1kb25lYCBjb21tYW5kIGxpbmUgb3B0aW9uIG9yIGBmZWF0dXJlIGRvbmVgIGNvbW1hbmQgaXMKK2luIHVzZSwgdGhlIGBkb25lYCBjb21tYW5kIGlzIG1hbmRhdG9yeSBhbmQgbWFya3MgdGhlIGVuZCBvZiB0aGUKK3N0cmVhbS4KKworUmVzcG9uc2VzIFRvIENvbW1hbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05ldyBvYmplY3RzIHdyaXR0ZW4gYnkgZmFzdC1pbXBvcnQgYXJlIG5vdCBhdmFpbGFibGUgaW1tZWRpYXRlbHkuCitNb3N0IGZhc3QtaW1wb3J0IGNvbW1hbmRzIGhhdmUgbm8gdmlzaWJsZSBlZmZlY3QgdW50aWwgdGhlIG5leHQKK2NoZWNrcG9pbnQgKG9yIGNvbXBsZXRpb24pLiAgVGhlIGZyb250ZW5kIGNhbiBzZW5kIGNvbW1hbmRzIHRvCitmaWxsIGZhc3QtaW1wb3J0J3MgaW5wdXQgcGlwZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IGhvdyBxdWlja2x5Cit0aGV5IHdpbGwgdGFrZSBlZmZlY3QsIHdoaWNoIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5IHNpbXBsaWZ5aW5nCitzY2hlZHVsaW5nLgorCitGb3Igc29tZSBmcm9udGVuZHMsIHRob3VnaCwgaXQgaXMgdXNlZnVsIHRvIGJlIGFibGUgdG8gcmVhZCBiYWNrCitkYXRhIGZyb20gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSBhcyBpdCBpcyBiZWluZyB1cGRhdGVkIChmb3IKK2V4YW1wbGUgd2hlbiB0aGUgc291cmNlIG1hdGVyaWFsIGRlc2NyaWJlcyBvYmplY3RzIGluIHRlcm1zIG9mCitwYXRjaGVzIHRvIGJlIGFwcGxpZWQgdG8gcHJldmlvdXNseSBpbXBvcnRlZCBvYmplY3RzKS4gIFRoaXMgY2FuCitiZSBhY2NvbXBsaXNoZWQgYnkgY29ubmVjdGluZyB0aGUgZnJvbnRlbmQgYW5kIGZhc3QtaW1wb3J0IHZpYQorYmlkaXJlY3Rpb25hbCBwaXBlczoKKworPT09PQorCW1rZmlmbyBmYXN0LWltcG9ydC1vdXRwdXQKKwlmcm9udGVuZCA8ZmFzdC1pbXBvcnQtb3V0cHV0IHwKKwlnaXQgZmFzdC1pbXBvcnQgPmZhc3QtaW1wb3J0LW91dHB1dAorPT09PQorCitBIGZyb250ZW5kIHNldCB1cCB0aGlzIHdheSBjYW4gdXNlIGBwcm9ncmVzc2AsIGBsc2AsIGFuZCBgY2F0LWJsb2JgCitjb21tYW5kcyB0byByZWFkIGluZm9ybWF0aW9uIGZyb20gdGhlIGltcG9ydCBpbiBwcm9ncmVzcy4KKworVG8gYXZvaWQgZGVhZGxvY2ssIHN1Y2ggZnJvbnRlbmRzIG11c3QgY29tcGxldGVseSBjb25zdW1lIGFueQorcGVuZGluZyBvdXRwdXQgZnJvbSBgcHJvZ3Jlc3NgLCBgbHNgLCBhbmQgYGNhdC1ibG9iYCBiZWZvcmUKK3BlcmZvcm1pbmcgd3JpdGVzIHRvIGZhc3QtaW1wb3J0IHRoYXQgbWlnaHQgYmxvY2suCisKK0NyYXNoIFJlcG9ydHMKKy0tLS0tLS0tLS0tLS0KK0lmIGZhc3QtaW1wb3J0IGlzIHN1cHBsaWVkIGludmFsaWQgaW5wdXQgaXQgd2lsbCB0ZXJtaW5hdGUgd2l0aCBhCitub24temVybyBleGl0IHN0YXR1cyBhbmQgY3JlYXRlIGEgY3Jhc2ggcmVwb3J0IGluIHRoZSB0b3AgbGV2ZWwgb2YKK3RoZSBHaXQgcmVwb3NpdG9yeSBpdCB3YXMgaW1wb3J0aW5nIGludG8uICBDcmFzaCByZXBvcnRzIGNvbnRhaW4KK2Egc25hcHNob3Qgb2YgdGhlIGludGVybmFsIGZhc3QtaW1wb3J0IHN0YXRlIGFzIHdlbGwgYXMgdGhlIG1vc3QKK3JlY2VudCBjb21tYW5kcyB0aGF0IGxlYWQgdXAgdG8gdGhlIGNyYXNoLgorCitBbGwgcmVjZW50IGNvbW1hbmRzIChpbmNsdWRpbmcgc3RyZWFtIGNvbW1lbnRzLCBmaWxlIGNoYW5nZXMgYW5kCitwcm9ncmVzcyBjb21tYW5kcykgYXJlIHNob3duIGluIHRoZSBjb21tYW5kIGhpc3Rvcnkgd2l0aGluIHRoZSBjcmFzaAorcmVwb3J0LCBidXQgcmF3IGZpbGUgZGF0YSBhbmQgY29tbWl0IG1lc3NhZ2VzIGFyZSBleGNsdWRlZCBmcm9tIHRoZQorY3Jhc2ggcmVwb3J0LiAgVGhpcyBleGNsdXNpb24gc2F2ZXMgc3BhY2Ugd2l0aGluIHRoZSByZXBvcnQgZmlsZQorYW5kIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBidWZmZXJpbmcgdGhhdCBmYXN0LWltcG9ydCBtdXN0IHBlcmZvcm0KK2R1cmluZyBleGVjdXRpb24uCisKK0FmdGVyIHdyaXRpbmcgYSBjcmFzaCByZXBvcnQgZmFzdC1pbXBvcnQgd2lsbCBjbG9zZSB0aGUgY3VycmVudAorcGFja2ZpbGUgYW5kIGV4cG9ydCB0aGUgbWFya3MgdGFibGUuICBUaGlzIGFsbG93cyB0aGUgZnJvbnRlbmQKK2RldmVsb3BlciB0byBpbnNwZWN0IHRoZSByZXBvc2l0b3J5IHN0YXRlIGFuZCByZXN1bWUgdGhlIGltcG9ydCBmcm9tCit0aGUgcG9pbnQgd2hlcmUgaXQgY3Jhc2hlZC4gIFRoZSBtb2RpZmllZCBicmFuY2hlcyBhbmQgdGFncyBhcmUgbm90Cit1cGRhdGVkIGR1cmluZyBhIGNyYXNoLCBhcyB0aGUgaW1wb3J0IGRpZCBub3QgY29tcGxldGUgc3VjY2Vzc2Z1bGx5LgorQnJhbmNoIGFuZCB0YWcgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBjcmFzaCByZXBvcnQgYW5kCittdXN0IGJlIGFwcGxpZWQgbWFudWFsbHkgaWYgdGhlIHVwZGF0ZSBpcyBuZWVkZWQuCisKK0FuIGV4YW1wbGUgY3Jhc2g6CisKKz09PT0KKwkkIGNhdCA+aW4gPDxFTkRfT0ZfSU5QVVQKKwkjIG15IHZlcnkgZmlyc3QgdGVzdCBjb21taXQKKwljb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKKwljb21taXR0ZXIgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlPiAxOTI4MyAtMDQwMAorCSMgd2hvIGlzIHRoYXQgZ3V5IGFueXdheT8KKwlkYXRhIDw8RU9GCisJdGhpcyBpcyBteSBjb21taXQKKwlFT0YKKwlNIDY0NCBpbmxpbmUgLmdpdGlnbm9yZQorCWRhdGEgPDxFT0YKKwkuZ2l0aWdub3JlCisJRU9GCisJTSA3NzcgaW5saW5lIGJvYgorCUVORF9PRl9JTlBVVAorCisJJCBnaXQgZmFzdC1pbXBvcnQgPGluCisJZmF0YWw6IENvcnJ1cHQgbW9kZTogTSA3NzcgaW5saW5lIGJvYgorCWZhc3QtaW1wb3J0OiBkdW1waW5nIGNyYXNoIHJlcG9ydCB0byAuZ2l0L2Zhc3RfaW1wb3J0X2NyYXNoXzg0MzQKKworCSQgY2F0IC5naXQvZmFzdF9pbXBvcnRfY3Jhc2hfODQzNAorCWZhc3QtaW1wb3J0IGNyYXNoIHJlcG9ydDoKKwkgICAgZmFzdC1pbXBvcnQgcHJvY2VzczogODQzNAorCSAgICBwYXJlbnQgcHJvY2VzcyAgICAgOiAxMzkxCisJICAgIGF0IFNhdCBTZXAgMSAwMDo1ODoxMiAyMDA3CisKKwlmYXRhbDogQ29ycnVwdCBtb2RlOiBNIDc3NyBpbmxpbmUgYm9iCisKKwlNb3N0IFJlY2VudCBDb21tYW5kcyBCZWZvcmUgQ3Jhc2gKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICMgbXkgdmVyeSBmaXJzdCB0ZXN0IGNvbW1pdAorCSAgY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCisJICBjb21taXR0ZXIgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlPiAxOTI4MyAtMDQwMAorCSAgIyB3aG8gaXMgdGhhdCBndXkgYW55d2F5PworCSAgZGF0YSA8PEVPRgorCSAgTSA2NDQgaW5saW5lIC5naXRpZ25vcmUKKwkgIGRhdGEgPDxFT0YKKwkqIE0gNzc3IGlubGluZSBib2IKKworCUFjdGl2ZSBCcmFuY2ggTFJVCisJLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgYWN0aXZlX2JyYW5jaGVzID0gMSBjdXIsIDUgbWF4CisKKwkgIHBvcyAgY2xvY2sgbmFtZQorCSAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJICAgMSkgICAgICAwIHJlZnMvaGVhZHMvbWFzdGVyCisKKwlJbmFjdGl2ZSBCcmFuY2hlcworCS0tLS0tLS0tLS0tLS0tLS0tCisJcmVmcy9oZWFkcy9tYXN0ZXI6CisJICBzdGF0dXMgICAgICA6IGFjdGl2ZSBsb2FkZWQgZGlydHkKKwkgIHRpcCBjb21taXQgIDogMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCSAgb2xkIHRyZWUgICAgOiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisJICBjdXIgdHJlZSAgICA6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKwkgIGNvbW1pdCBjbG9jazogMAorCSAgbGFzdCBwYWNrICAgOgorCisKKwktLS0tLS0tLS0tLS0tLS0tLS0tCisJRU5EIE9GIENSQVNIIFJFUE9SVAorPT09PQorCitUaXBzIGFuZCBUcmlja3MKKy0tLS0tLS0tLS0tLS0tLQorVGhlIGZvbGxvd2luZyB0aXBzIGFuZCB0cmlja3MgaGF2ZSBiZWVuIGNvbGxlY3RlZCBmcm9tIHZhcmlvdXMKK3VzZXJzIG9mIGZhc3QtaW1wb3J0LCBhbmQgYXJlIG9mZmVyZWQgaGVyZSBhcyBzdWdnZXN0aW9ucy4KKworVXNlIE9uZSBNYXJrIFBlciBDb21taXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitXaGVuIGRvaW5nIGEgcmVwb3NpdG9yeSBjb252ZXJzaW9uLCB1c2UgYSB1bmlxdWUgbWFyayBwZXIgY29tbWl0CisoYG1hcmsgOjxuPmApIGFuZCBzdXBwbHkgdGhlIFwtLWV4cG9ydC1tYXJrcyBvcHRpb24gb24gdGhlIGNvbW1hbmQKK2xpbmUuICBmYXN0LWltcG9ydCB3aWxsIGR1bXAgYSBmaWxlIHdoaWNoIGxpc3RzIGV2ZXJ5IG1hcmsgYW5kIHRoZSBHaXQKK29iamVjdCBTSEEtMSB0aGF0IGNvcnJlc3BvbmRzIHRvIGl0LiAgSWYgdGhlIGZyb250ZW5kIGNhbiB0aWUKK3RoZSBtYXJrcyBiYWNrIHRvIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSwgaXQgaXMgZWFzeSB0byB2ZXJpZnkgdGhlCithY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoZSBpbXBvcnQgYnkgY29tcGFyaW5nIGVhY2ggR2l0Citjb21taXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIHJldmlzaW9uLgorCitDb21pbmcgZnJvbSBhIHN5c3RlbSBzdWNoIGFzIFBlcmZvcmNlIG9yIFN1YnZlcnNpb24gdGhpcyBzaG91bGQgYmUKK3F1aXRlIHNpbXBsZSwgYXMgdGhlIGZhc3QtaW1wb3J0IG1hcmsgY2FuIGFsc28gYmUgdGhlIFBlcmZvcmNlIGNoYW5nZXNldAorbnVtYmVyIG9yIHRoZSBTdWJ2ZXJzaW9uIHJldmlzaW9uIG51bWJlci4KKworRnJlZWx5IFNraXAgQXJvdW5kIEJyYW5jaGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0Rvbid0IGJvdGhlciB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGZyb250ZW5kIHRvIHN0aWNrIHRvIG9uZSBicmFuY2gKK2F0IGEgdGltZSBkdXJpbmcgYW4gaW1wb3J0LiAgQWx0aG91Z2ggZG9pbmcgc28gbWlnaHQgYmUgc2xpZ2h0bHkKK2Zhc3RlciBmb3IgZmFzdC1pbXBvcnQsIGl0IHRlbmRzIHRvIGluY3JlYXNlIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBmcm9udGVuZAorY29kZSBjb25zaWRlcmFibHkuCisKK1RoZSBicmFuY2ggTFJVIGJ1aWx0aW4gdG8gZmFzdC1pbXBvcnQgdGVuZHMgdG8gYmVoYXZlIHZlcnkgd2VsbCwgYW5kIHRoZQorY29zdCBvZiBhY3RpdmF0aW5nIGFuIGluYWN0aXZlIGJyYW5jaCBpcyBzbyBsb3cgdGhhdCBib3VuY2luZyBhcm91bmQKK2JldHdlZW4gYnJhbmNoZXMgaGFzIHZpcnR1YWxseSBubyBpbXBhY3Qgb24gaW1wb3J0IHBlcmZvcm1hbmNlLgorCitIYW5kbGluZyBSZW5hbWVzCit+fn5+fn5+fn5+fn5+fn5+CitXaGVuIGltcG9ydGluZyBhIHJlbmFtZWQgZmlsZSBvciBkaXJlY3RvcnksIHNpbXBseSBkZWxldGUgdGhlIG9sZAorbmFtZShzKSBhbmQgbW9kaWZ5IHRoZSBuZXcgbmFtZShzKSBkdXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWl0LgorR2l0IHBlcmZvcm1zIHJlbmFtZSBkZXRlY3Rpb24gYWZ0ZXItdGhlLWZhY3QsIHJhdGhlciB0aGFuIGV4cGxpY2l0bHkKK2R1cmluZyBhIGNvbW1pdC4KKworVXNlIFRhZyBGaXh1cCBCcmFuY2hlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorU29tZSBvdGhlciBTQ00gc3lzdGVtcyBsZXQgdGhlIHVzZXIgY3JlYXRlIGEgdGFnIGZyb20gbXVsdGlwbGUKK2ZpbGVzIHdoaWNoIGFyZSBub3QgZnJvbSB0aGUgc2FtZSBjb21taXQvY2hhbmdlc2V0LiAgT3IgdG8gY3JlYXRlCit0YWdzIHdoaWNoIGFyZSBhIHN1YnNldCBvZiB0aGUgZmlsZXMgYXZhaWxhYmxlIGluIHRoZSByZXBvc2l0b3J5LgorCitJbXBvcnRpbmcgdGhlc2UgdGFncyBhcy1pcyBpbiBHaXQgaXMgaW1wb3NzaWJsZSB3aXRob3V0IG1ha2luZyBhdAorbGVhc3Qgb25lIGNvbW1pdCB3aGljaCBgYGZpeGVzIHVwJycgdGhlIGZpbGVzIHRvIG1hdGNoIHRoZSBjb250ZW50CitvZiB0aGUgdGFnLiAgVXNlIGZhc3QtaW1wb3J0J3MgYHJlc2V0YCBjb21tYW5kIHRvIHJlc2V0IGEgZHVtbXkgYnJhbmNoCitvdXRzaWRlIG9mIHlvdXIgbm9ybWFsIGJyYW5jaCBzcGFjZSB0byB0aGUgYmFzZSBjb21taXQgZm9yIHRoZSB0YWcsCit0aGVuIGNvbW1pdCBvbmUgb3IgbW9yZSBmaWxlIGZpeHVwIGNvbW1pdHMsIGFuZCBmaW5hbGx5IHRhZyB0aGUKK2R1bW15IGJyYW5jaC4KKworRm9yIGV4YW1wbGUgc2luY2UgYWxsIG5vcm1hbCBicmFuY2hlcyBhcmUgc3RvcmVkIHVuZGVyIGByZWZzL2hlYWRzL2AKK25hbWUgdGhlIHRhZyBmaXh1cCBicmFuY2ggYFRBR19GSVhVUGAuICBUaGlzIHdheSBpdCBpcyBpbXBvc3NpYmxlIGZvcgordGhlIGZpeHVwIGJyYW5jaCB1c2VkIGJ5IHRoZSBpbXBvcnRlciB0byBoYXZlIG5hbWVzcGFjZSBjb25mbGljdHMKK3dpdGggcmVhbCBicmFuY2hlcyBpbXBvcnRlZCBmcm9tIHRoZSBzb3VyY2UgKHRoZSBuYW1lIGBUQUdfRklYVVBgCitpcyBub3QgYHJlZnMvaGVhZHMvVEFHX0ZJWFVQYCkuCisKK1doZW4gY29tbWl0dGluZyBmaXh1cHMsIGNvbnNpZGVyIHVzaW5nIGBtZXJnZWAgdG8gY29ubmVjdCB0aGUKK2NvbW1pdChzKSB3aGljaCBhcmUgc3VwcGx5aW5nIGZpbGUgcmV2aXNpb25zIHRvIHRoZSBmaXh1cCBicmFuY2guCitEb2luZyBzbyB3aWxsIGFsbG93IHRvb2xzIHN1Y2ggYXMgJ2dpdCBibGFtZScgdG8gdHJhY2sKK3Rocm91Z2ggdGhlIHJlYWwgY29tbWl0IGhpc3RvcnkgYW5kIHByb3Blcmx5IGFubm90YXRlIHRoZSBzb3VyY2UKK2ZpbGVzLgorCitBZnRlciBmYXN0LWltcG9ydCB0ZXJtaW5hdGVzIHRoZSBmcm9udGVuZCB3aWxsIG5lZWQgdG8gZG8gYHJtIC5naXQvVEFHX0ZJWFVQYAordG8gcmVtb3ZlIHRoZSBkdW1teSBicmFuY2guCisKK0ltcG9ydCBOb3csIFJlcGFjayBMYXRlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitBcyBzb29uIGFzIGZhc3QtaW1wb3J0IGNvbXBsZXRlcyB0aGUgR2l0IHJlcG9zaXRvcnkgaXMgY29tcGxldGVseSB2YWxpZAorYW5kIHJlYWR5IGZvciB1c2UuICBUeXBpY2FsbHkgdGhpcyB0YWtlcyBvbmx5IGEgdmVyeSBzaG9ydCB0aW1lLAorZXZlbiBmb3IgY29uc2lkZXJhYmx5IGxhcmdlIHByb2plY3RzICgxMDAsMDAwKyBjb21taXRzKS4KKworSG93ZXZlciByZXBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaXMgbmVjZXNzYXJ5IHRvIGltcHJvdmUgZGF0YQorbG9jYWxpdHkgYW5kIGFjY2VzcyBwZXJmb3JtYW5jZS4gIEl0IGNhbiBhbHNvIHRha2UgaG91cnMgb24gZXh0cmVtZWx5CitsYXJnZSBwcm9qZWN0cyAoZXNwZWNpYWxseSBpZiAtZiBhbmQgYSBsYXJnZSBcLS13aW5kb3cgcGFyYW1ldGVyIGlzCit1c2VkKS4gIFNpbmNlIHJlcGFja2luZyBpcyBzYWZlIHRvIHJ1biBhbG9uZ3NpZGUgcmVhZGVycyBhbmQgd3JpdGVycywKK3J1biB0aGUgcmVwYWNrIGluIHRoZSBiYWNrZ3JvdW5kIGFuZCBsZXQgaXQgZmluaXNoIHdoZW4gaXQgZmluaXNoZXMuCitUaGVyZSBpcyBubyByZWFzb24gdG8gd2FpdCB0byBleHBsb3JlIHlvdXIgbmV3IEdpdCBwcm9qZWN0IQorCitJZiB5b3UgY2hvb3NlIHRvIHdhaXQgZm9yIHRoZSByZXBhY2ssIGRvbid0IHRyeSB0byBydW4gYmVuY2htYXJrcworb3IgcGVyZm9ybWFuY2UgdGVzdHMgdW50aWwgcmVwYWNraW5nIGlzIGNvbXBsZXRlZC4gIGZhc3QtaW1wb3J0IG91dHB1dHMKK3N1Ym9wdGltYWwgcGFja2ZpbGVzIHRoYXQgYXJlIHNpbXBseSBuZXZlciBzZWVuIGluIHJlYWwgdXNlCitzaXR1YXRpb25zLgorCitSZXBhY2tpbmcgSGlzdG9yaWNhbCBEYXRhCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitJZiB5b3UgYXJlIHJlcGFja2luZyB2ZXJ5IG9sZCBpbXBvcnRlZCBkYXRhIChlLmcuIG9sZGVyIHRoYW4gdGhlCitsYXN0IHllYXIpLCBjb25zaWRlciBleHBlbmRpbmcgc29tZSBleHRyYSBDUFUgdGltZSBhbmQgc3VwcGx5aW5nCitcLS13aW5kb3c9NTAgKG9yIGhpZ2hlcikgd2hlbiB5b3UgcnVuICdnaXQgcmVwYWNrJy4KK1RoaXMgd2lsbCB0YWtlIGxvbmdlciwgYnV0IHdpbGwgYWxzbyBwcm9kdWNlIGEgc21hbGxlciBwYWNrZmlsZS4KK1lvdSBvbmx5IG5lZWQgdG8gZXhwZW5kIHRoZSBlZmZvcnQgb25jZSwgYW5kIGV2ZXJ5b25lIHVzaW5nIHlvdXIKK3Byb2plY3Qgd2lsbCBiZW5lZml0IGZyb20gdGhlIHNtYWxsZXIgcmVwb3NpdG9yeS4KKworSW5jbHVkZSBTb21lIFByb2dyZXNzIE1lc3NhZ2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0V2ZXJ5IG9uY2UgaW4gYSB3aGlsZSBoYXZlIHlvdXIgZnJvbnRlbmQgZW1pdCBhIGBwcm9ncmVzc2AgbWVzc2FnZQordG8gZmFzdC1pbXBvcnQuICBUaGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2VzIGFyZSBlbnRpcmVseSBmcmVlLWZvcm0sCitzbyBvbmUgc3VnZ2VzdGlvbiB3b3VsZCBiZSB0byBvdXRwdXQgdGhlIGN1cnJlbnQgbW9udGggYW5kIHllYXIKK2VhY2ggdGltZSB0aGUgY3VycmVudCBjb21taXQgZGF0ZSBtb3ZlcyBpbnRvIHRoZSBuZXh0IG1vbnRoLgorWW91ciB1c2VycyB3aWxsIGZlZWwgYmV0dGVyIGtub3dpbmcgaG93IG11Y2ggb2YgdGhlIGRhdGEgc3RyZWFtCitoYXMgYmVlbiBwcm9jZXNzZWQuCisKKworUGFja2ZpbGUgT3B0aW1pemF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1doZW4gcGFja2luZyBhIGJsb2IgZmFzdC1pbXBvcnQgYWx3YXlzIGF0dGVtcHRzIHRvIGRlbHRpZnkgYWdhaW5zdCB0aGUgbGFzdAorYmxvYiB3cml0dGVuLiAgVW5sZXNzIHNwZWNpZmljYWxseSBhcnJhbmdlZCBmb3IgYnkgdGhlIGZyb250ZW5kLAordGhpcyB3aWxsIHByb2JhYmx5IG5vdCBiZSBhIHByaW9yIHZlcnNpb24gb2YgdGhlIHNhbWUgZmlsZSwgc28gdGhlCitnZW5lcmF0ZWQgZGVsdGEgd2lsbCBub3QgYmUgdGhlIHNtYWxsZXN0IHBvc3NpYmxlLiAgVGhlIHJlc3VsdGluZworcGFja2ZpbGUgd2lsbCBiZSBjb21wcmVzc2VkLCBidXQgd2lsbCBub3QgYmUgb3B0aW1hbC4KKworRnJvbnRlbmRzIHdoaWNoIGhhdmUgZWZmaWNpZW50IGFjY2VzcyB0byBhbGwgcmV2aXNpb25zIG9mIGEKK3NpbmdsZSBmaWxlIChmb3IgZXhhbXBsZSByZWFkaW5nIGFuIFJDUy9DVlMgLHYgZmlsZSkgY2FuIGNob29zZQordG8gc3VwcGx5IGFsbCByZXZpc2lvbnMgb2YgdGhhdCBmaWxlIGFzIGEgc2VxdWVuY2Ugb2YgY29uc2VjdXRpdmUKK2BibG9iYCBjb21tYW5kcy4gIFRoaXMgYWxsb3dzIGZhc3QtaW1wb3J0IHRvIGRlbHRpZnkgdGhlIGRpZmZlcmVudCBmaWxlCityZXZpc2lvbnMgYWdhaW5zdCBlYWNoIG90aGVyLCBzYXZpbmcgc3BhY2UgaW4gdGhlIGZpbmFsIHBhY2tmaWxlLgorTWFya3MgY2FuIGJlIHVzZWQgdG8gbGF0ZXIgaWRlbnRpZnkgaW5kaXZpZHVhbCBmaWxlIHJldmlzaW9ucyBkdXJpbmcKK2Egc2VxdWVuY2Ugb2YgYGNvbW1pdGAgY29tbWFuZHMuCisKK1RoZSBwYWNrZmlsZShzKSBjcmVhdGVkIGJ5IGZhc3QtaW1wb3J0IGRvIG5vdCBlbmNvdXJhZ2UgZ29vZCBkaXNrIGFjY2VzcworcGF0dGVybnMuICBUaGlzIGlzIGNhdXNlZCBieSBmYXN0LWltcG9ydCB3cml0aW5nIHRoZSBkYXRhIGluIHRoZSBvcmRlcgoraXQgaXMgcmVjZWl2ZWQgb24gc3RhbmRhcmQgaW5wdXQsIHdoaWxlIEdpdCB0eXBpY2FsbHkgb3JnYW5pemVzCitkYXRhIHdpdGhpbiBwYWNrZmlsZXMgdG8gbWFrZSB0aGUgbW9zdCByZWNlbnQgKGN1cnJlbnQgdGlwKSBkYXRhCithcHBlYXIgYmVmb3JlIGhpc3RvcmljYWwgZGF0YS4gIEdpdCBhbHNvIGNsdXN0ZXJzIGNvbW1pdHMgdG9nZXRoZXIsCitzcGVlZGluZyB1cCByZXZpc2lvbiB0cmF2ZXJzYWwgdGhyb3VnaCBiZXR0ZXIgY2FjaGUgbG9jYWxpdHkuCisKK0ZvciB0aGlzIHJlYXNvbiBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHVzZXJzIHJlcGFjayB0aGUKK3JlcG9zaXRvcnkgd2l0aCBgZ2l0IHJlcGFjayAtYSAtZGAgYWZ0ZXIgZmFzdC1pbXBvcnQgY29tcGxldGVzLCBhbGxvd2luZworR2l0IHRvIHJlb3JnYW5pemUgdGhlIHBhY2tmaWxlcyBmb3IgZmFzdGVyIGRhdGEgYWNjZXNzLiAgSWYgYmxvYgorZGVsdGFzIGFyZSBzdWJvcHRpbWFsIChzZWUgYWJvdmUpIHRoZW4gYWxzbyBhZGRpbmcgdGhlIGAtZmAgb3B0aW9uCit0byBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIGFsbCBkZWx0YXMgY2FuIHNpZ25pZmljYW50bHkgcmVkdWNlIHRoZQorZmluYWwgcGFja2ZpbGUgc2l6ZSAoMzAtNTAlIHNtYWxsZXIgY2FuIGJlIHF1aXRlIHR5cGljYWwpLgorCisKK01lbW9yeSBVdGlsaXphdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgZmFjdG9ycyB3aGljaCBhZmZlY3QgaG93IG11Y2ggbWVtb3J5IGZhc3QtaW1wb3J0CityZXF1aXJlcyB0byBwZXJmb3JtIGFuIGltcG9ydC4gIExpa2UgY3JpdGljYWwgc2VjdGlvbnMgb2YgY29yZQorR2l0LCBmYXN0LWltcG9ydCB1c2VzIGl0cyBvd24gbWVtb3J5IGFsbG9jYXRvcnMgdG8gYW1vcnRpemUgYW55IG92ZXJoZWFkcworYXNzb2NpYXRlZCB3aXRoIG1hbGxvYy4gIEluIHByYWN0aWNlIGZhc3QtaW1wb3J0IHRlbmRzIHRvIGFtb3J0aXplIGFueQorbWFsbG9jIG92ZXJoZWFkcyB0byAwLCBkdWUgdG8gaXRzIHVzZSBvZiBsYXJnZSBibG9jayBhbGxvY2F0aW9ucy4KKworcGVyIG9iamVjdAorfn5+fn5+fn5+fgorZmFzdC1pbXBvcnQgbWFpbnRhaW5zIGFuIGluLW1lbW9yeSBzdHJ1Y3R1cmUgZm9yIGV2ZXJ5IG9iamVjdCB3cml0dGVuIGluCit0aGlzIGV4ZWN1dGlvbi4gIE9uIGEgMzIgYml0IHN5c3RlbSB0aGUgc3RydWN0dXJlIGlzIDMyIGJ5dGVzLAorb24gYSA2NCBiaXQgc3lzdGVtIHRoZSBzdHJ1Y3R1cmUgaXMgNDAgYnl0ZXMgKGR1ZSB0byB0aGUgbGFyZ2VyCitwb2ludGVyIHNpemVzKS4gIE9iamVjdHMgaW4gdGhlIHRhYmxlIGFyZSBub3QgZGVhbGxvY2F0ZWQgdW50aWwKK2Zhc3QtaW1wb3J0IHRlcm1pbmF0ZXMuICBJbXBvcnRpbmcgMiBtaWxsaW9uIG9iamVjdHMgb24gYSAzMiBiaXQgc3lzdGVtCit3aWxsIHJlcXVpcmUgYXBwcm94aW1hdGVseSA2NCBNaUIgb2YgbWVtb3J5LgorCitUaGUgb2JqZWN0IHRhYmxlIGlzIGFjdHVhbGx5IGEgaGFzaHRhYmxlIGtleWVkIG9uIHRoZSBvYmplY3QgbmFtZQorKHRoZSB1bmlxdWUgU0hBLTEpLiAgVGhpcyBzdG9yYWdlIGNvbmZpZ3VyYXRpb24gYWxsb3dzIGZhc3QtaW1wb3J0IHRvIHJldXNlCithbiBleGlzdGluZyBvciBhbHJlYWR5IHdyaXR0ZW4gb2JqZWN0IGFuZCBhdm9pZCB3cml0aW5nIGR1cGxpY2F0ZXMKK3RvIHRoZSBvdXRwdXQgcGFja2ZpbGUuICBEdXBsaWNhdGUgYmxvYnMgYXJlIHN1cnByaXNpbmdseSBjb21tb24KK2luIGFuIGltcG9ydCwgdHlwaWNhbGx5IGR1ZSB0byBicmFuY2ggbWVyZ2VzIGluIHRoZSBzb3VyY2UuCisKK3BlciBtYXJrCit+fn5+fn5+fgorTWFya3MgYXJlIHN0b3JlZCBpbiBhIHNwYXJzZSBhcnJheSwgdXNpbmcgMSBwb2ludGVyICg0IGJ5dGVzIG9yIDgKK2J5dGVzLCBkZXBlbmRpbmcgb24gcG9pbnRlciBzaXplKSBwZXIgbWFyay4gIEFsdGhvdWdoIHRoZSBhcnJheQoraXMgc3BhcnNlLCBmcm9udGVuZHMgYXJlIHN0aWxsIHN0cm9uZ2x5IGVuY291cmFnZWQgdG8gdXNlIG1hcmtzCitiZXR3ZWVuIDEgYW5kIG4sIHdoZXJlIG4gaXMgdGhlIHRvdGFsIG51bWJlciBvZiBtYXJrcyByZXF1aXJlZCBmb3IKK3RoaXMgaW1wb3J0LgorCitwZXIgYnJhbmNoCit+fn5+fn5+fn5+CitCcmFuY2hlcyBhcmUgY2xhc3NpZmllZCBhcyBhY3RpdmUgYW5kIGluYWN0aXZlLiAgVGhlIG1lbW9yeSB1c2FnZQorb2YgdGhlIHR3byBjbGFzc2VzIGlzIHNpZ25pZmljYW50bHkgZGlmZmVyZW50LgorCitJbmFjdGl2ZSBicmFuY2hlcyBhcmUgc3RvcmVkIGluIGEgc3RydWN0dXJlIHdoaWNoIHVzZXMgOTYgb3IgMTIwCitieXRlcyAoMzIgYml0IG9yIDY0IGJpdCBzeXN0ZW1zLCByZXNwZWN0aXZlbHkpLCBwbHVzIHRoZSBsZW5ndGggb2YKK3RoZSBicmFuY2ggbmFtZSAodHlwaWNhbGx5IHVuZGVyIDIwMCBieXRlcyksIHBlciBicmFuY2guICBmYXN0LWltcG9ydCB3aWxsCitlYXNpbHkgaGFuZGxlIGFzIG1hbnkgYXMgMTAsMDAwIGluYWN0aXZlIGJyYW5jaGVzIGluIHVuZGVyIDIgTWlCCitvZiBtZW1vcnkuCisKK0FjdGl2ZSBicmFuY2hlcyBoYXZlIHRoZSBzYW1lIG92ZXJoZWFkIGFzIGluYWN0aXZlIGJyYW5jaGVzLCBidXQKK2Fsc28gY29udGFpbiBjb3BpZXMgb2YgZXZlcnkgdHJlZSB0aGF0IGhhcyBiZWVuIHJlY2VudGx5IG1vZGlmaWVkIG9uCit0aGF0IGJyYW5jaC4gIElmIHN1YnRyZWUgYGluY2x1ZGVgIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUKK2JyYW5jaCBiZWNhbWUgYWN0aXZlLCBpdHMgY29udGVudHMgd2lsbCBub3QgYmUgbG9hZGVkIGludG8gbWVtb3J5LAorYnV0IGlmIHN1YnRyZWUgYHNyY2AgaGFzIGJlZW4gbW9kaWZpZWQgYnkgYSBjb21taXQgc2luY2UgdGhlIGJyYW5jaAorYmVjYW1lIGFjdGl2ZSwgdGhlbiBpdHMgY29udGVudHMgd2lsbCBiZSBsb2FkZWQgaW4gbWVtb3J5LgorCitBcyBhY3RpdmUgYnJhbmNoZXMgc3RvcmUgbWV0YWRhdGEgYWJvdXQgdGhlIGZpbGVzIGNvbnRhaW5lZCBvbiB0aGF0CiticmFuY2gsIHRoZWlyIGluLW1lbW9yeSBzdG9yYWdlIHNpemUgY2FuIGdyb3cgdG8gYSBjb25zaWRlcmFibGUgc2l6ZQorKHNlZSBiZWxvdykuCisKK2Zhc3QtaW1wb3J0IGF1dG9tYXRpY2FsbHkgbW92ZXMgYWN0aXZlIGJyYW5jaGVzIHRvIGluYWN0aXZlIHN0YXR1cyBiYXNlZCBvbgorYSBzaW1wbGUgbGVhc3QtcmVjZW50bHktdXNlZCBhbGdvcml0aG0uICBUaGUgTFJVIGNoYWluIGlzIHVwZGF0ZWQgb24KK2VhY2ggYGNvbW1pdGAgY29tbWFuZC4gIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhY3RpdmUgYnJhbmNoZXMgY2FuIGJlCitpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCBcLS1hY3RpdmUtYnJhbmNoZXM9LgorCitwZXIgYWN0aXZlIHRyZWUKK35+fn5+fn5+fn5+fn5+fgorVHJlZXMgKGFrYSBkaXJlY3RvcmllcykgdXNlIGp1c3QgMTIgYnl0ZXMgb2YgbWVtb3J5IG9uIHRvcCBvZiB0aGUKK21lbW9yeSByZXF1aXJlZCBmb3IgdGhlaXIgZW50cmllcyAoc2VlIGBgcGVyIGFjdGl2ZSBmaWxlJycgYmVsb3cpLgorVGhlIGNvc3Qgb2YgYSB0cmVlIGlzIHZpcnR1YWxseSAwLCBhcyBpdHMgb3ZlcmhlYWQgYW1vcnRpemVzIG91dAorb3ZlciB0aGUgaW5kaXZpZHVhbCBmaWxlIGVudHJpZXMuCisKK3BlciBhY3RpdmUgZmlsZSBlbnRyeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CitGaWxlcyAoYW5kIHBvaW50ZXJzIHRvIHN1YnRyZWVzKSB3aXRoaW4gYWN0aXZlIHRyZWVzIHJlcXVpcmUgNTIgb3IgNjQKK2J5dGVzICgzMi82NCBiaXQgcGxhdGZvcm1zKSBwZXIgZW50cnkuICBUbyBjb25zZXJ2ZSBzcGFjZSwgZmlsZSBhbmQKK3RyZWUgbmFtZXMgYXJlIHBvb2xlZCBpbiBhIGNvbW1vbiBzdHJpbmcgdGFibGUsIGFsbG93aW5nIHRoZSBmaWxlbmFtZQorYGBNYWtlZmlsZScnIHRvIHVzZSBqdXN0IDE2IGJ5dGVzIChhZnRlciBpbmNsdWRpbmcgdGhlIHN0cmluZyBoZWFkZXIKK292ZXJoZWFkKSBubyBtYXR0ZXIgaG93IG1hbnkgdGltZXMgaXQgb2NjdXJzIHdpdGhpbiB0aGUgcHJvamVjdC4KKworVGhlIGFjdGl2ZSBicmFuY2ggTFJVLCB3aGVuIGNvdXBsZWQgd2l0aCB0aGUgZmlsZW5hbWUgc3RyaW5nIHBvb2wKK2FuZCBsYXp5IGxvYWRpbmcgb2Ygc3VidHJlZXMsIGFsbG93cyBmYXN0LWltcG9ydCB0byBlZmZpY2llbnRseSBpbXBvcnQKK3Byb2plY3RzIHdpdGggMiwwMDArIGJyYW5jaGVzIGFuZCA0NSwxMTQrIGZpbGVzIGluIGEgdmVyeSBsaW1pdGVkCittZW1vcnkgZm9vdHByaW50IChsZXNzIHRoYW4gMi43IE1pQiBwZXIgYWN0aXZlIGJyYW5jaCkuCisKK1NpZ25hbHMKKy0tLS0tLS0KK1NlbmRpbmcgKlNJR1VTUjEqIHRvIHRoZSAnZ2l0IGZhc3QtaW1wb3J0JyBwcm9jZXNzIGVuZHMgdGhlIGN1cnJlbnQKK3BhY2tmaWxlIGVhcmx5LCBzaW11bGF0aW5nIGEgYGNoZWNrcG9pbnRgIGNvbW1hbmQuICBUaGUgaW1wYXRpZW50CitvcGVyYXRvciBjYW4gdXNlIHRoaXMgZmFjaWxpdHkgdG8gcGVlayBhdCB0aGUgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFuCitpbXBvcnQgaW4gcHJvZ3Jlc3MsIGF0IHRoZSBjb3N0IG9mIHNvbWUgYWRkZWQgcnVubmluZyB0aW1lIGFuZCB3b3JzZQorY29tcHJlc3Npb24uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzRmYTMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gtcGFjay50eHQKQEAgLTAsMCArMSwxMDYgQEAKK2dpdC1mZXRjaC1wYWNrKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZmV0Y2gtcGFjayAtIFJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZldGNoLXBhY2snIFstLWFsbF0gWy0tcXVpZXR8LXFdIFstLWtlZXB8LWtdIFstLXRoaW5dIFstLWluY2x1ZGUtdGFnXSBbLS11cGxvYWQtcGFjaz08Z2l0LXVwbG9hZC1wYWNrPl0gWy0tZGVwdGg9PG4+XSBbLS1uby1wcm9ncmVzc10gWy12XSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPHJlZnM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1VzdWFsbHkgeW91IHdvdWxkIHdhbnQgdG8gdXNlICdnaXQgZmV0Y2gnLCB3aGljaCBpcyBhCitoaWdoZXIgbGV2ZWwgd3JhcHBlciBvZiB0aGlzIGNvbW1hbmQsIGluc3RlYWQuCisKK0ludm9rZXMgJ2dpdC11cGxvYWQtcGFjaycgb24gYSBwb3NzaWJseSByZW1vdGUgcmVwb3NpdG9yeQorYW5kIGFza3MgaXQgdG8gc2VuZCBvYmplY3RzIG1pc3NpbmcgZnJvbSB0aGlzIHJlcG9zaXRvcnksIHRvCit1cGRhdGUgdGhlIG5hbWVkIGhlYWRzLiAgVGhlIGxpc3Qgb2YgY29tbWl0cyBhdmFpbGFibGUgbG9jYWxseQoraXMgZm91bmQgb3V0IGJ5IHNjYW5uaW5nIHRoZSBsb2NhbCByZWZzLyBoaWVyYXJjaHkgYW5kIHNlbnQgdG8KKydnaXQtdXBsb2FkLXBhY2snIHJ1bm5pbmcgb24gdGhlIG90aGVyIGVuZC4KKworVGhpcyBjb21tYW5kIGRlZ2VuZXJhdGVzIHRvIGRvd25sb2FkIGV2ZXJ5dGhpbmcgdG8gY29tcGxldGUgdGhlCithc2tlZCByZWZzIGZyb20gdGhlIHJlbW90ZSBzaWRlIHdoZW4gdGhlIGxvY2FsIHNpZGUgZG9lcyBub3QKK2hhdmUgYSBjb21tb24gYW5jZXN0b3IgY29tbWl0LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy0tYWxsOjoKKwlGZXRjaCBhbGwgcmVtb3RlIHJlZnMuCisKKy0tc3RkaW46OgorCVRha2UgdGhlIGxpc3Qgb2YgcmVmcyBmcm9tIHN0ZGluLCBvbmUgcGVyIGxpbmUuIElmIHRoZXJlCisJYXJlIHJlZnMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgaW4gYWRkaXRpb24gdG8gdGhpcworCW9wdGlvbiwgdGhlbiB0aGUgcmVmcyBmcm9tIHN0ZGluIGFyZSBwcm9jZXNzZWQgYWZ0ZXIgdGhvc2UKKwlvbiB0aGUgY29tbWFuZCBsaW5lLgorKworSWYgJy0tc3RhdGVsZXNzLXJwYycgaXMgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggdGhpcyBvcHRpb24gdGhlbgordGhlIGxpc3Qgb2YgcmVmcyBtdXN0IGJlIGluIHBhY2tldCBmb3JtYXQgKHBrdC1saW5lKS4gRWFjaCByZWYgbXVzdAorYmUgaW4gYSBzZXBhcmF0ZSBwYWNrZXQsIGFuZCB0aGUgbGlzdCBtdXN0IGVuZCB3aXRoIGEgZmx1c2ggcGFja2V0LgorCistcTo6CistLXF1aWV0OjoKKwlQYXNzICctcScgZmxhZyB0byAnZ2l0IHVucGFjay1vYmplY3RzJzsgdGhpcyBtYWtlcyB0aGUKKwljbG9uaW5nIHByb2Nlc3MgbGVzcyB2ZXJib3NlLgorCistazo6CistLWtlZXA6OgorCURvIG5vdCBpbnZva2UgJ2dpdCB1bnBhY2stb2JqZWN0cycgb24gcmVjZWl2ZWQgZGF0YSwgYnV0CisJY3JlYXRlIGEgc2luZ2xlIHBhY2tmaWxlIG91dCBvZiBpdCBpbnN0ZWFkLCBhbmQgc3RvcmUgaXQKKwlpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiBJZiBwcm92aWRlZCB0d2ljZSB0aGVuIHRoZSBwYWNrIGlzCisJbG9ja2VkIGFnYWluc3QgcmVwYWNraW5nLgorCistLXRoaW46OgorCUZldGNoIGEgInRoaW4iIHBhY2ssIHdoaWNoIHJlY29yZHMgb2JqZWN0cyBpbiBkZWx0aWZpZWQgZm9ybSBiYXNlZAorCW9uIG9iamVjdHMgbm90IGluY2x1ZGVkIGluIHRoZSBwYWNrIHRvIHJlZHVjZSBuZXR3b3JrIHRyYWZmaWMuCisKKy0taW5jbHVkZS10YWc6OgorCUlmIHRoZSByZW1vdGUgc2lkZSBzdXBwb3J0cyBpdCwgYW5ub3RhdGVkIHRhZ3Mgb2JqZWN0cyB3aWxsCisJYmUgZG93bmxvYWRlZCBvbiB0aGUgc2FtZSBjb25uZWN0aW9uIGFzIHRoZSBvdGhlciBvYmplY3RzIGlmCisJdGhlIG9iamVjdCB0aGUgdGFnIHJlZmVyZW5jZXMgaXMgZG93bmxvYWRlZC4gIFRoZSBjYWxsZXIgbXVzdAorCW90aGVyd2lzZSBkZXRlcm1pbmUgdGhlIHRhZ3MgdGhpcyBvcHRpb24gbWFkZSBhdmFpbGFibGUuCisKKy0tdXBsb2FkLXBhY2s9PGdpdC11cGxvYWQtcGFjaz46OgorCVVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gJ2dpdC11cGxvYWQtcGFjaycgb24gdGhlCisJcmVtb3RlIHNpZGUsIGlmIGlzIG5vdCBmb3VuZCBvbiB5b3VyICRQQVRILgorCUluc3RhbGxhdGlvbnMgb2Ygc3NoZCBpZ25vcmVzIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQKKwlzZXR1cCBzY3JpcHRzIGZvciBsb2dpbiBzaGVsbHMgKGUuZy4gLmJhc2hfcHJvZmlsZSkgYW5kCisJeW91ciBwcml2YXRlbHkgaW5zdGFsbGVkIGdpdCBtYXkgbm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0KKwlkZWZhdWx0ICRQQVRILiAgQW5vdGhlciB3b3JrYXJvdW5kIHN1Z2dlc3RlZCBpcyB0byBzZXQKKwl1cCB5b3VyICRQQVRIIGluICIuYmFzaHJjIiwgYnV0IHRoaXMgZmxhZyBpcyBmb3IgcGVvcGxlCisJd2hvIGRvIG5vdCB3YW50IHRvIHBheSB0aGUgb3ZlcmhlYWQgZm9yIG5vbi1pbnRlcmFjdGl2ZQorCXNoZWxscyBieSBoYXZpbmcgYSBsZWFuIC5iYXNocmMgZmlsZSAodGhleSBzZXQgbW9zdCBvZgorCXRoZSB0aGluZ3MgdXAgaW4gLmJhc2hfcHJvZmlsZSkuCisKKy0tZXhlYz08Z2l0LXVwbG9hZC1wYWNrPjo6CisJU2FtZSBhcyBcLS11cGxvYWQtcGFjaz08Z2l0LXVwbG9hZC1wYWNrPi4KKworLS1kZXB0aD08bj46OgorCUxpbWl0IGZldGNoaW5nIHRvIGFuY2VzdG9yLWNoYWlucyBub3QgbG9uZ2VyIHRoYW4gbi4KKworLS1uby1wcm9ncmVzczo6CisJRG8gbm90IHNob3cgdGhlIHByb2dyZXNzLgorCistdjo6CisJUnVuIHZlcmJvc2VseS4KKworPGhvc3Q+OjoKKwlBIHJlbW90ZSBob3N0IHRoYXQgaG91c2VzIHRoZSByZXBvc2l0b3J5LiAgV2hlbiB0aGlzCisJcGFydCBpcyBzcGVjaWZpZWQsICdnaXQtdXBsb2FkLXBhY2snIGlzIGludm9rZWQgdmlhCisJc3NoLgorCis8ZGlyZWN0b3J5Pjo6CisJVGhlIHJlcG9zaXRvcnkgdG8gc3luYyBmcm9tLgorCis8cmVmcz4uLi46OgorCVRoZSByZW1vdGUgaGVhZHMgdG8gdXBkYXRlIGZyb20uIFRoaXMgaXMgcmVsYXRpdmUgdG8KKwkkR0lUX0RJUiAoZS5nLiAiSEVBRCIsICJyZWZzL2hlYWRzL21hc3RlciIpLiAgV2hlbgorCXVuc3BlY2lmaWVkLCB1cGRhdGUgZnJvbSBhbGwgaGVhZHMgdGhlIHJlbW90ZSBzaWRlIGhhcy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQxZDdjMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLnR4dApAQCAtMCwwICsxLDkyIEBACitnaXQtZmV0Y2goMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZmV0Y2ggLSBEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZldGNoJyBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXQorJ2dpdCBmZXRjaCcgWzxvcHRpb25zPl0gPGdyb3VwPgorJ2dpdCBmZXRjaCcgLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXQorJ2dpdCBmZXRjaCcgLS1hbGwgWzxvcHRpb25zPl0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ZldGNoZXMgbmFtZWQgaGVhZHMgb3IgdGFncyBmcm9tIG9uZSBvciBtb3JlIG90aGVyIHJlcG9zaXRvcmllcywKK2Fsb25nIHdpdGggdGhlIG9iamVjdHMgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIHRoZW0uCisKK1RoZSByZWYgbmFtZXMgYW5kIHRoZWlyIG9iamVjdCBuYW1lcyBvZiBmZXRjaGVkIHJlZnMgYXJlIHN0b3JlZAoraW4gYC5naXQvRkVUQ0hfSEVBRGAuICBUaGlzIGluZm9ybWF0aW9uIGlzIGxlZnQgZm9yIGEgbGF0ZXIgbWVyZ2UKK29wZXJhdGlvbiBkb25lIGJ5ICdnaXQgbWVyZ2UnLgorCitXaGVuIDxyZWZzcGVjPiBzdG9yZXMgdGhlIGZldGNoZWQgcmVzdWx0IGluIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywKK3RoZSB0YWdzIHRoYXQgcG9pbnQgYXQgdGhlc2UgYnJhbmNoZXMgYXJlIGF1dG9tYXRpY2FsbHkKK2ZvbGxvd2VkLiAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGZldGNoaW5nIGZyb20gdGhlIHJlbW90ZSB1c2luZwordGhlIGdpdmVuIDxyZWZzcGVjPnMsIGFuZCBpZiB0aGUgcmVwb3NpdG9yeSBoYXMgb2JqZWN0cyB0aGF0IGFyZQorcG9pbnRlZCBieSByZW1vdGUgdGFncyB0aGF0IGl0IGRvZXMgbm90IHlldCBoYXZlLCB0aGVuIGZldGNoCit0aG9zZSBtaXNzaW5nIHRhZ3MuICBJZiB0aGUgb3RoZXIgZW5kIGhhcyB0YWdzIHRoYXQgcG9pbnQgYXQKK2JyYW5jaGVzIHlvdSBhcmUgbm90IGludGVyZXN0ZWQgaW4sIHlvdSB3aWxsIG5vdCBnZXQgdGhlbS4KKworJ2dpdCBmZXRjaCcgY2FuIGZldGNoIGZyb20gZWl0aGVyIGEgc2luZ2xlIG5hbWVkIHJlcG9zaXRvcnksCitvciBmcm9tIHNldmVyYWwgcmVwb3NpdG9yaWVzIGF0IG9uY2UgaWYgPGdyb3VwPiBpcyBnaXZlbiBhbmQKK3RoZXJlIGlzIGEgcmVtb3Rlcy48Z3JvdXA+IGVudHJ5IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisoU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6OmZldGNoLW9wdGlvbnMudHh0W10KKworaW5jbHVkZTo6cHVsbC1mZXRjaC1wYXJhbS50eHRbXQorCitpbmNsdWRlOjp1cmxzLXJlbW90ZXMudHh0W10KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBVcGRhdGUgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoZSBhYm92ZSBjb21tYW5kIGNvcGllcyBhbGwgYnJhbmNoZXMgZnJvbSB0aGUgcmVtb3RlIHJlZnMvaGVhZHMvCituYW1lc3BhY2UgYW5kIHN0b3JlcyB0aGVtIHRvIHRoZSBsb2NhbCByZWZzL3JlbW90ZXMvb3JpZ2luLyBuYW1lc3BhY2UsCit1bmxlc3MgdGhlIGJyYW5jaC48bmFtZT4uZmV0Y2ggb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBhIG5vbi1kZWZhdWx0CityZWZzcGVjLgorCisqIFVzaW5nIHJlZnNwZWNzIGV4cGxpY2l0bHk6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIG9yaWdpbiArcHU6cHUgbWFpbnQ6dG1wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgdXBkYXRlcyAob3IgY3JlYXRlcywgYXMgbmVjZXNzYXJ5KSBicmFuY2hlcyBgcHVgIGFuZCBgdG1wYCBpbgordGhlIGxvY2FsIHJlcG9zaXRvcnkgYnkgZmV0Y2hpbmcgZnJvbSB0aGUgYnJhbmNoZXMgKHJlc3BlY3RpdmVseSkKK2BwdWAgYW5kIGBtYWludGAgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisrCitUaGUgYHB1YCBicmFuY2ggd2lsbCBiZSB1cGRhdGVkIGV2ZW4gaWYgaXQgaXMgZG9lcyBub3QgZmFzdC1mb3J3YXJkLAorYmVjYXVzZSBpdCBpcyBwcmVmaXhlZCB3aXRoIGEgcGx1cyBzaWduOyBgdG1wYCB3aWxsIG5vdCBiZS4KKworCitCVUdTCistLS0tCitVc2luZyAtLXJlY3Vyc2Utc3VibW9kdWxlcyBjYW4gb25seSBmZXRjaCBuZXcgY29tbWl0cyBpbiBhbHJlYWR5IGNoZWNrZWQKK291dCBzdWJtb2R1bGVzIHJpZ2h0IG5vdy4gV2hlbiBlLmcuIHVwc3RyZWFtIGFkZGVkIGEgbmV3IHN1Ym1vZHVsZSBpbiB0aGUKK2p1c3QgZmV0Y2hlZCBjb21taXRzIG9mIHRoZSBzdXBlcnByb2plY3QgdGhlIHN1Ym1vZHVsZSBpdHNlbGYgY2FuIG5vdCBiZQorZmV0Y2hlZCwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gY2hlY2sgb3V0IHRoYXQgc3VibW9kdWxlIGxhdGVyIHdpdGhvdXQKK2hhdmluZyB0byBkbyBhIGZldGNoIGFnYWluLiBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGZpeGVkIGluIGEgZnV0dXJlIGdpdAordmVyc2lvbi4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wdWxsWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjMwMWY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQKQEAgLTAsMCArMSw0MTEgQEAKK2dpdC1maWx0ZXItYnJhbmNoKDEpCis9PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZmlsdGVyLWJyYW5jaCAtIFJld3JpdGUgYnJhbmNoZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZpbHRlci1icmFuY2gnIFstLWVudi1maWx0ZXIgPGNvbW1hbmQ+XSBbLS10cmVlLWZpbHRlciA8Y29tbWFuZD5dCisJWy0taW5kZXgtZmlsdGVyIDxjb21tYW5kPl0gWy0tcGFyZW50LWZpbHRlciA8Y29tbWFuZD5dCisJWy0tbXNnLWZpbHRlciA8Y29tbWFuZD5dIFstLWNvbW1pdC1maWx0ZXIgPGNvbW1hbmQ+XQorCVstLXRhZy1uYW1lLWZpbHRlciA8Y29tbWFuZD5dIFstLXN1YmRpcmVjdG9yeS1maWx0ZXIgPGRpcmVjdG9yeT5dCisJWy0tcHJ1bmUtZW1wdHldCisJWy0tb3JpZ2luYWwgPG5hbWVzcGFjZT5dIFstZCA8ZGlyZWN0b3J5Pl0gWy1mIHwgLS1mb3JjZV0KKwlbLS1dIFs8cmV2LWxpc3Qgb3B0aW9ucz4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorTGV0cyB5b3UgcmV3cml0ZSBnaXQgcmV2aXNpb24gaGlzdG9yeSBieSByZXdyaXRpbmcgdGhlIGJyYW5jaGVzIG1lbnRpb25lZAoraW4gdGhlIDxyZXYtbGlzdCBvcHRpb25zPiwgYXBwbHlpbmcgY3VzdG9tIGZpbHRlcnMgb24gZWFjaCByZXZpc2lvbi4KK1Rob3NlIGZpbHRlcnMgY2FuIG1vZGlmeSBlYWNoIHRyZWUgKGUuZy4gcmVtb3ZpbmcgYSBmaWxlIG9yIHJ1bm5pbmcKK2EgcGVybCByZXdyaXRlIG9uIGFsbCBmaWxlcykgb3IgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBjb21taXQuCitPdGhlcndpc2UsIGFsbCBpbmZvcm1hdGlvbiAoaW5jbHVkaW5nIG9yaWdpbmFsIGNvbW1pdCB0aW1lcyBvciBtZXJnZQoraW5mb3JtYXRpb24pIHdpbGwgYmUgcHJlc2VydmVkLgorCitUaGUgY29tbWFuZCB3aWxsIG9ubHkgcmV3cml0ZSB0aGUgX3Bvc2l0aXZlXyByZWZzIG1lbnRpb25lZCBpbiB0aGUKK2NvbW1hbmQgbGluZSAoZS5nLiBpZiB5b3UgcGFzcyAnYS4uYicsIG9ubHkgJ2InIHdpbGwgYmUgcmV3cml0dGVuKS4KK0lmIHlvdSBzcGVjaWZ5IG5vIGZpbHRlcnMsIHRoZSBjb21taXRzIHdpbGwgYmUgcmVjb21taXR0ZWQgd2l0aG91dCBhbnkKK2NoYW5nZXMsIHdoaWNoIHdvdWxkIG5vcm1hbGx5IGhhdmUgbm8gZWZmZWN0LiAgTmV2ZXJ0aGVsZXNzLCB0aGlzIG1heSBiZQordXNlZnVsIGluIHRoZSBmdXR1cmUgZm9yIGNvbXBlbnNhdGluZyBmb3Igc29tZSBnaXQgYnVncyBvciBzdWNoLAordGhlcmVmb3JlIHN1Y2ggYSB1c2FnZSBpcyBwZXJtaXR0ZWQuCisKKypOT1RFKjogVGhpcyBjb21tYW5kIGhvbm9ycyBgLmdpdC9pbmZvL2dyYWZ0c2AgZmlsZSBhbmQgcmVmcyBpbgordGhlIGByZWZzL3JlcGxhY2UvYCBuYW1lc3BhY2UuCitJZiB5b3UgaGF2ZSBhbnkgZ3JhZnRzIG9yIHJlcGxhY2VtZW50IHJlZnMgZGVmaW5lZCwgcnVubmluZyB0aGlzIGNvbW1hbmQKK3dpbGwgbWFrZSB0aGVtIHBlcm1hbmVudC4KKworKldBUk5JTkcqISBUaGUgcmV3cml0dGVuIGhpc3Rvcnkgd2lsbCBoYXZlIGRpZmZlcmVudCBvYmplY3QgbmFtZXMgZm9yIGFsbAordGhlIG9iamVjdHMgYW5kIHdpbGwgbm90IGNvbnZlcmdlIHdpdGggdGhlIG9yaWdpbmFsIGJyYW5jaC4gIFlvdSB3aWxsIG5vdAorYmUgYWJsZSB0byBlYXNpbHkgcHVzaCBhbmQgZGlzdHJpYnV0ZSB0aGUgcmV3cml0dGVuIGJyYW5jaCBvbiB0b3Agb2YgdGhlCitvcmlnaW5hbCBicmFuY2guICBQbGVhc2UgZG8gbm90IHVzZSB0aGlzIGNvbW1hbmQgaWYgeW91IGRvIG5vdCBrbm93IHRoZQorZnVsbCBpbXBsaWNhdGlvbnMsIGFuZCBhdm9pZCB1c2luZyBpdCBhbnl3YXksIGlmIGEgc2ltcGxlIHNpbmdsZSBjb21taXQKK3dvdWxkIHN1ZmZpY2UgdG8gZml4IHlvdXIgcHJvYmxlbS4gIChTZWUgdGhlICJSRUNPVkVSSU5HIEZST00gVVBTVFJFQU0KK1JFQkFTRSIgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdC1yZWJhc2VbMV0gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQKK3Jld3JpdGluZyBwdWJsaXNoZWQgaGlzdG9yeS4pCisKK0Fsd2F5cyB2ZXJpZnkgdGhhdCB0aGUgcmV3cml0dGVuIHZlcnNpb24gaXMgY29ycmVjdDogVGhlIG9yaWdpbmFsIHJlZnMsCitpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmV3cml0dGVuIG9uZXMsIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBuYW1lc3BhY2UKKydyZWZzL29yaWdpbmFsLycuCisKK05vdGUgdGhhdCBzaW5jZSB0aGlzIG9wZXJhdGlvbiBpcyB2ZXJ5IEkvTyBleHBlbnNpdmUsIGl0IG1pZ2h0CitiZSBhIGdvb2QgaWRlYSB0byByZWRpcmVjdCB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBvZmYtZGlzayB3aXRoIHRoZQorJy1kJyBvcHRpb24sIGUuZy4gb24gdG1wZnMuICBSZXBvcnRlZGx5IHRoZSBzcGVlZHVwIGlzIHZlcnkgbm90aWNlYWJsZS4KKworCitGaWx0ZXJzCit+fn5+fn5+CisKK1RoZSBmaWx0ZXJzIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlciBhcyBsaXN0ZWQgYmVsb3cuICBUaGUgPGNvbW1hbmQ+Cithcmd1bWVudCBpcyBhbHdheXMgZXZhbHVhdGVkIGluIHRoZSBzaGVsbCBjb250ZXh0IHVzaW5nIHRoZSAnZXZhbCcgY29tbWFuZAorKHdpdGggdGhlIG5vdGFibGUgZXhjZXB0aW9uIG9mIHRoZSBjb21taXQgZmlsdGVyLCBmb3IgdGVjaG5pY2FsIHJlYXNvbnMpLgorUHJpb3IgdG8gdGhhdCwgdGhlICRHSVRfQ09NTUlUIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIGNvbnRhaW4KK3RoZSBpZCBvZiB0aGUgY29tbWl0IGJlaW5nIHJld3JpdHRlbi4gIEFsc28sIEdJVF9BVVRIT1JfTkFNRSwKK0dJVF9BVVRIT1JfRU1BSUwsIEdJVF9BVVRIT1JfREFURSwgR0lUX0NPTU1JVFRFUl9OQU1FLCBHSVRfQ09NTUlUVEVSX0VNQUlMLAorYW5kIEdJVF9DT01NSVRURVJfREFURSBhcmUgc2V0IGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb21taXQuICBUaGUgdmFsdWVzCitvZiB0aGVzZSB2YXJpYWJsZXMgYWZ0ZXIgdGhlIGZpbHRlcnMgaGF2ZSBydW4sIGFyZSB1c2VkIGZvciB0aGUgbmV3IGNvbW1pdC4KK0lmIGFueSBldmFsdWF0aW9uIG9mIDxjb21tYW5kPiByZXR1cm5zIGEgbm9uLXplcm8gZXhpdCBzdGF0dXMsIHRoZSB3aG9sZQorb3BlcmF0aW9uIHdpbGwgYmUgYWJvcnRlZC4KKworQSAnbWFwJyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgdGhhdCB0YWtlcyBhbiAib3JpZ2luYWwgc2hhMSBpZCIgYXJndW1lbnQKK2FuZCBvdXRwdXRzIGEgInJld3JpdHRlbiBzaGExIGlkIiBpZiB0aGUgY29tbWl0IGhhcyBiZWVuIGFscmVhZHkKK3Jld3JpdHRlbiwgYW5kICJvcmlnaW5hbCBzaGExIGlkIiBvdGhlcndpc2U7IHRoZSAnbWFwJyBmdW5jdGlvbiBjYW4KK3JldHVybiBzZXZlcmFsIGlkcyBvbiBzZXBhcmF0ZSBsaW5lcyBpZiB5b3VyIGNvbW1pdCBmaWx0ZXIgZW1pdHRlZAorbXVsdGlwbGUgY29tbWl0cy4KKworCitPUFRJT05TCistLS0tLS0tCisKKy0tZW52LWZpbHRlciA8Y29tbWFuZD46OgorCVRoaXMgZmlsdGVyIG1heSBiZSB1c2VkIGlmIHlvdSBvbmx5IG5lZWQgdG8gbW9kaWZ5IHRoZSBlbnZpcm9ubWVudAorCWluIHdoaWNoIHRoZSBjb21taXQgd2lsbCBiZSBwZXJmb3JtZWQuICBTcGVjaWZpY2FsbHksIHlvdSBtaWdodAorCXdhbnQgdG8gcmV3cml0ZSB0aGUgYXV0aG9yL2NvbW1pdHRlciBuYW1lL2VtYWlsL3RpbWUgZW52aXJvbm1lbnQKKwl2YXJpYWJsZXMgKHNlZSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXSBmb3IgZGV0YWlscykuICBEbyBub3QgZm9yZ2V0CisJdG8gcmUtZXhwb3J0IHRoZSB2YXJpYWJsZXMuCisKKy0tdHJlZS1maWx0ZXIgPGNvbW1hbmQ+OjoKKwlUaGlzIGlzIHRoZSBmaWx0ZXIgZm9yIHJld3JpdGluZyB0aGUgdHJlZSBhbmQgaXRzIGNvbnRlbnRzLgorCVRoZSBhcmd1bWVudCBpcyBldmFsdWF0ZWQgaW4gc2hlbGwgd2l0aCB0aGUgd29ya2luZworCWRpcmVjdG9yeSBzZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIGNoZWNrZWQgb3V0IHRyZWUuICBUaGUgbmV3IHRyZWUKKwlpcyB0aGVuIHVzZWQgYXMtaXMgKG5ldyBmaWxlcyBhcmUgYXV0by1hZGRlZCwgZGlzYXBwZWFyZWQgZmlsZXMKKwlhcmUgYXV0by1yZW1vdmVkIC0gbmVpdGhlciAuZ2l0aWdub3JlIGZpbGVzIG5vciBhbnkgb3RoZXIgaWdub3JlCisJcnVsZXMgKkhBVkUgQU5ZIEVGRkVDVCohKS4KKworLS1pbmRleC1maWx0ZXIgPGNvbW1hbmQ+OjoKKwlUaGlzIGlzIHRoZSBmaWx0ZXIgZm9yIHJld3JpdGluZyB0aGUgaW5kZXguICBJdCBpcyBzaW1pbGFyIHRvIHRoZQorCXRyZWUgZmlsdGVyIGJ1dCBkb2VzIG5vdCBjaGVjayBvdXQgdGhlIHRyZWUsIHdoaWNoIG1ha2VzIGl0IG11Y2gKKwlmYXN0ZXIuICBGcmVxdWVudGx5IHVzZWQgd2l0aCBgZ2l0IHJtIC0tY2FjaGVkCisJLS1pZ25vcmUtdW5tYXRjaCAuLi5gLCBzZWUgRVhBTVBMRVMgYmVsb3cuICBGb3IgaGFpcnkKKwljYXNlcywgc2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4KKworLS1wYXJlbnQtZmlsdGVyIDxjb21tYW5kPjo6CisJVGhpcyBpcyB0aGUgZmlsdGVyIGZvciByZXdyaXRpbmcgdGhlIGNvbW1pdCdzIHBhcmVudCBsaXN0LgorCUl0IHdpbGwgcmVjZWl2ZSB0aGUgcGFyZW50IHN0cmluZyBvbiBzdGRpbiBhbmQgc2hhbGwgb3V0cHV0CisJdGhlIG5ldyBwYXJlbnQgc3RyaW5nIG9uIHN0ZG91dC4gIFRoZSBwYXJlbnQgc3RyaW5nIGlzIGluCisJdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4gbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV06IGVtcHR5IGZvcgorCXRoZSBpbml0aWFsIGNvbW1pdCwgIi1wIHBhcmVudCIgZm9yIGEgbm9ybWFsIGNvbW1pdCBhbmQKKwkiLXAgcGFyZW50MSAtcCBwYXJlbnQyIC1wIHBhcmVudDMgLi4uIiBmb3IgYSBtZXJnZSBjb21taXQuCisKKy0tbXNnLWZpbHRlciA8Y29tbWFuZD46OgorCVRoaXMgaXMgdGhlIGZpbHRlciBmb3IgcmV3cml0aW5nIHRoZSBjb21taXQgbWVzc2FnZXMuCisJVGhlIGFyZ3VtZW50IGlzIGV2YWx1YXRlZCBpbiB0aGUgc2hlbGwgd2l0aCB0aGUgb3JpZ2luYWwKKwljb21taXQgbWVzc2FnZSBvbiBzdGFuZGFyZCBpbnB1dDsgaXRzIHN0YW5kYXJkIG91dHB1dCBpcworCXVzZWQgYXMgdGhlIG5ldyBjb21taXQgbWVzc2FnZS4KKworLS1jb21taXQtZmlsdGVyIDxjb21tYW5kPjo6CisJVGhpcyBpcyB0aGUgZmlsdGVyIGZvciBwZXJmb3JtaW5nIHRoZSBjb21taXQuCisJSWYgdGhpcyBmaWx0ZXIgaXMgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZQorCSdnaXQgY29tbWl0LXRyZWUnIGNvbW1hbmQsIHdpdGggYXJndW1lbnRzIG9mIHRoZSBmb3JtCisJIjxUUkVFX0lEPiBbKC1wIDxQQVJFTlRfQ09NTUlUX0lEPikuLi5dIiBhbmQgdGhlIGxvZyBtZXNzYWdlIG9uCisJc3RkaW4uICBUaGUgY29tbWl0IGlkIGlzIGV4cGVjdGVkIG9uIHN0ZG91dC4KKysKK0FzIGEgc3BlY2lhbCBleHRlbnNpb24sIHRoZSBjb21taXQgZmlsdGVyIG1heSBlbWl0IG11bHRpcGxlCitjb21taXQgaWRzOyBpbiB0aGF0IGNhc2UsIHRoZSByZXdyaXR0ZW4gY2hpbGRyZW4gb2YgdGhlIG9yaWdpbmFsIGNvbW1pdCB3aWxsCitoYXZlIGFsbCBvZiB0aGVtIGFzIHBhcmVudHMuCisrCitZb3UgY2FuIHVzZSB0aGUgJ21hcCcgY29udmVuaWVuY2UgZnVuY3Rpb24gaW4gdGhpcyBmaWx0ZXIsIGFuZCBvdGhlcgorY29udmVuaWVuY2UgZnVuY3Rpb25zLCB0b28uICBGb3IgZXhhbXBsZSwgY2FsbGluZyAnc2tpcF9jb21taXQgIiRAIicKK3dpbGwgbGVhdmUgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCAoYnV0IG5vdCBpdHMgY2hhbmdlcyEgSWYgeW91IHdhbnQKK3RoYXQsIHVzZSAnZ2l0IHJlYmFzZScgaW5zdGVhZCkuCisrCitZb3UgY2FuIGFsc28gdXNlIHRoZSBgZ2l0X2NvbW1pdF9ub25fZW1wdHlfdHJlZSAiJEAiYCBpbnN0ZWFkIG9mCitgZ2l0IGNvbW1pdC10cmVlICIkQCJgIGlmIHlvdSBkb24ndCB3aXNoIHRvIGtlZXAgY29tbWl0cyB3aXRoIGEgc2luZ2xlIHBhcmVudAorYW5kIHRoYXQgbWFrZXMgbm8gY2hhbmdlIHRvIHRoZSB0cmVlLgorCistLXRhZy1uYW1lLWZpbHRlciA8Y29tbWFuZD46OgorCVRoaXMgaXMgdGhlIGZpbHRlciBmb3IgcmV3cml0aW5nIHRhZyBuYW1lcy4gV2hlbiBwYXNzZWQsCisJaXQgd2lsbCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IHRhZyByZWYgdGhhdCBwb2ludHMgdG8gYSByZXdyaXR0ZW4KKwlvYmplY3QgKG9yIHRvIGEgdGFnIG9iamVjdCB3aGljaCBwb2ludHMgdG8gYSByZXdyaXR0ZW4gb2JqZWN0KS4KKwlUaGUgb3JpZ2luYWwgdGFnIG5hbWUgaXMgcGFzc2VkIHZpYSBzdGFuZGFyZCBpbnB1dCwgYW5kIHRoZSBuZXcKKwl0YWcgbmFtZSBpcyBleHBlY3RlZCBvbiBzdGFuZGFyZCBvdXRwdXQuCisrCitUaGUgb3JpZ2luYWwgdGFncyBhcmUgbm90IGRlbGV0ZWQsIGJ1dCBjYW4gYmUgb3ZlcndyaXR0ZW47Cit1c2UgIi0tdGFnLW5hbWUtZmlsdGVyIGNhdCIgdG8gc2ltcGx5IHVwZGF0ZSB0aGUgdGFncy4gIEluIHRoaXMKK2Nhc2UsIGJlIHZlcnkgY2FyZWZ1bCBhbmQgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBvbGQgdGFncworYmFja2VkIHVwIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gaGFzIHJ1biBhZm91bC4KKysKK05lYXJseSBwcm9wZXIgcmV3cml0aW5nIG9mIHRhZyBvYmplY3RzIGlzIHN1cHBvcnRlZC4gSWYgdGhlIHRhZyBoYXMKK2EgbWVzc2FnZSBhdHRhY2hlZCwgYSBuZXcgdGFnIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBtZXNzYWdlLAorYXV0aG9yLCBhbmQgdGltZXN0YW1wLiBJZiB0aGUgdGFnIGhhcyBhIHNpZ25hdHVyZSBhdHRhY2hlZCwgdGhlCitzaWduYXR1cmUgd2lsbCBiZSBzdHJpcHBlZC4gSXQgaXMgYnkgZGVmaW5pdGlvbiBpbXBvc3NpYmxlIHRvIHByZXNlcnZlCitzaWduYXR1cmVzLiBUaGUgcmVhc29uIHRoaXMgaXMgIm5lYXJseSIgcHJvcGVyLCBpcyBiZWNhdXNlIGlkZWFsbHkgaWYKK3RoZSB0YWcgZGlkIG5vdCBjaGFuZ2UgKHBvaW50cyB0byB0aGUgc2FtZSBvYmplY3QsIGhhcyB0aGUgc2FtZSBuYW1lLCBldGMuKQoraXQgc2hvdWxkIHJldGFpbiBhbnkgc2lnbmF0dXJlLiBUaGF0IGlzIG5vdCB0aGUgY2FzZSwgc2lnbmF0dXJlcyB3aWxsIGFsd2F5cworYmUgcmVtb3ZlZCwgYnV5ZXIgYmV3YXJlLiBUaGVyZSBpcyBhbHNvIG5vIHN1cHBvcnQgZm9yIGNoYW5naW5nIHRoZQorYXV0aG9yIG9yIHRpbWVzdGFtcCAob3IgdGhlIHRhZyBtZXNzYWdlIGZvciB0aGF0IG1hdHRlcikuIFRhZ3Mgd2hpY2ggcG9pbnQKK3RvIG90aGVyIHRhZ3Mgd2lsbCBiZSByZXdyaXR0ZW4gdG8gcG9pbnQgdG8gdGhlIHVuZGVybHlpbmcgY29tbWl0LgorCistLXN1YmRpcmVjdG9yeS1maWx0ZXIgPGRpcmVjdG9yeT46OgorCU9ubHkgbG9vayBhdCB0aGUgaGlzdG9yeSB3aGljaCB0b3VjaGVzIHRoZSBnaXZlbiBzdWJkaXJlY3RvcnkuCisJVGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gdGhhdCBkaXJlY3RvcnkgKGFuZCBvbmx5IHRoYXQpIGFzIGl0cworCXByb2plY3Qgcm9vdC4gSW1wbGllcyA8PFJlbWFwX3RvX2FuY2VzdG9yPj4uCisKKy0tcHJ1bmUtZW1wdHk6OgorCVNvbWUga2luZCBvZiBmaWx0ZXJzIHdpbGwgZ2VuZXJhdGUgZW1wdHkgY29tbWl0cywgdGhhdCBsZWZ0IHRoZSB0cmVlCisJdW50b3VjaGVkLiAgVGhpcyBzd2l0Y2ggYWxsb3cgZ2l0LWZpbHRlci1icmFuY2ggdG8gaWdub3JlIHN1Y2gKKwljb21taXRzLiAgVGhvdWdoLCB0aGlzIHN3aXRjaCBvbmx5IGFwcGxpZXMgZm9yIGNvbW1pdHMgdGhhdCBoYXZlIG9uZQorCWFuZCBvbmx5IG9uZSBwYXJlbnQsIGl0IHdpbGwgaGVuY2Uga2VlcCBtZXJnZXMgcG9pbnRzLiBBbHNvLCB0aGlzCisJb3B0aW9uIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHVzZSBvZiAnLS1jb21taXQtZmlsdGVyJy4gVGhvdWdoIHlvdQorCWp1c3QgbmVlZCB0byB1c2UgdGhlIGZ1bmN0aW9uICdnaXRfY29tbWl0X25vbl9lbXB0eV90cmVlICIkQCInIGluc3RlYWQKKwlvZiB0aGUgYGdpdCBjb21taXQtdHJlZSAiJEAiYCBpZGlvbSBpbiB5b3VyIGNvbW1pdCBmaWx0ZXIgdG8gbWFrZSB0aGF0CisJaGFwcGVuLgorCistLW9yaWdpbmFsIDxuYW1lc3BhY2U+OjoKKwlVc2UgdGhpcyBvcHRpb24gdG8gc2V0IHRoZSBuYW1lc3BhY2Ugd2hlcmUgdGhlIG9yaWdpbmFsIGNvbW1pdHMKKwl3aWxsIGJlIHN0b3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ3JlZnMvb3JpZ2luYWwnLgorCistZCA8ZGlyZWN0b3J5Pjo6CisJVXNlIHRoaXMgb3B0aW9uIHRvIHNldCB0aGUgcGF0aCB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB1c2VkIGZvcgorCXJld3JpdGluZy4gIFdoZW4gYXBwbHlpbmcgYSB0cmVlIGZpbHRlciwgdGhlIGNvbW1hbmQgbmVlZHMgdG8KKwl0ZW1wb3JhcmlseSBjaGVjayBvdXQgdGhlIHRyZWUgdG8gc29tZSBkaXJlY3RvcnksIHdoaWNoIG1heSBjb25zdW1lCisJY29uc2lkZXJhYmxlIHNwYWNlIGluIGNhc2Ugb2YgbGFyZ2UgcHJvamVjdHMuICBCeSBkZWZhdWx0IGl0CisJZG9lcyB0aGlzIGluIHRoZSAnLmdpdC1yZXdyaXRlLycgZGlyZWN0b3J5IGJ1dCB5b3UgY2FuIG92ZXJyaWRlCisJdGhhdCBjaG9pY2UgYnkgdGhpcyBwYXJhbWV0ZXIuCisKKy1mOjoKKy0tZm9yY2U6OgorCSdnaXQgZmlsdGVyLWJyYW5jaCcgcmVmdXNlcyB0byBzdGFydCB3aXRoIGFuIGV4aXN0aW5nIHRlbXBvcmFyeQorCWRpcmVjdG9yeSBvciB3aGVuIHRoZXJlIGFyZSBhbHJlYWR5IHJlZnMgc3RhcnRpbmcgd2l0aAorCSdyZWZzL29yaWdpbmFsLycsIHVubGVzcyBmb3JjZWQuCisKKzxyZXYtbGlzdCBvcHRpb25zPi4uLjo6CisJQXJndW1lbnRzIGZvciAnZ2l0IHJldi1saXN0Jy4gIEFsbCBwb3NpdGl2ZSByZWZzIGluY2x1ZGVkIGJ5CisJdGhlc2Ugb3B0aW9ucyBhcmUgcmV3cml0dGVuLiAgWW91IG1heSBhbHNvIHNwZWNpZnkgb3B0aW9ucworCXN1Y2ggYXMgJy0tYWxsJywgYnV0IHlvdSBtdXN0IHVzZSAnLS0nIHRvIHNlcGFyYXRlIHRoZW0gZnJvbQorCXRoZSAnZ2l0IGZpbHRlci1icmFuY2gnIG9wdGlvbnMuIEltcGxpZXMgPDxSZW1hcF90b19hbmNlc3Rvcj4+LgorCisKK1tbUmVtYXBfdG9fYW5jZXN0b3JdXQorUmVtYXAgdG8gYW5jZXN0b3IKK35+fn5+fn5+fn5+fn5+fn5+CisKK0J5IHVzaW5nIGxpbmtnaXQ6cmV2LWxpc3RbMV0gYXJndW1lbnRzLCBlLmcuLCBwYXRoIGxpbWl0ZXJzLCB5b3UgY2FuIGxpbWl0IHRoZQorc2V0IG9mIHJldmlzaW9ucyB3aGljaCBnZXQgcmV3cml0dGVuLiBIb3dldmVyLCBwb3NpdGl2ZSByZWZzIG9uIHRoZSBjb21tYW5kCitsaW5lIGFyZSBkaXN0aW5ndWlzaGVkOiB3ZSBkb24ndCBsZXQgdGhlbSBiZSBleGNsdWRlZCBieSBzdWNoIGxpbWl0ZXJzLiBGb3IKK3RoaXMgcHVycG9zZSwgdGhleSBhcmUgaW5zdGVhZCByZXdyaXR0ZW4gdG8gcG9pbnQgYXQgdGhlIG5lYXJlc3QgYW5jZXN0b3IgdGhhdAord2FzIG5vdCBleGNsdWRlZC4KKworCitFeGFtcGxlcworLS0tLS0tLS0KKworU3VwcG9zZSB5b3Ugd2FudCB0byByZW1vdmUgYSBmaWxlIChjb250YWluaW5nIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbgorb3IgY29weXJpZ2h0IHZpb2xhdGlvbikgZnJvbSBhbGwgY29tbWl0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS10cmVlLWZpbHRlciAncm0gZmlsZW5hbWUnIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSG93ZXZlciwgaWYgdGhlIGZpbGUgaXMgYWJzZW50IGZyb20gdGhlIHRyZWUgb2Ygc29tZSBjb21taXQsCithIHNpbXBsZSBgcm0gZmlsZW5hbWVgIHdpbGwgZmFpbCBmb3IgdGhhdCB0cmVlIGFuZCBjb21taXQuCitUaHVzIHlvdSBtYXkgaW5zdGVhZCB3YW50IHRvIHVzZSBgcm0gLWYgZmlsZW5hbWVgIGFzIHRoZSBzY3JpcHQuCisKK1VzaW5nIGAtLWluZGV4LWZpbHRlcmAgd2l0aCAnZ2l0IHJtJyB5aWVsZHMgYSBzaWduaWZpY2FudGx5IGZhc3RlcgordmVyc2lvbi4gIExpa2Ugd2l0aCB1c2luZyBgcm0gZmlsZW5hbWVgLCBgZ2l0IHJtIC0tY2FjaGVkIGZpbGVuYW1lYAord2lsbCBmYWlsIGlmIHRoZSBmaWxlIGlzIGFic2VudCBmcm9tIHRoZSB0cmVlIG9mIGEgY29tbWl0LiAgSWYgeW91Cit3YW50IHRvICJjb21wbGV0ZWx5IGZvcmdldCIgYSBmaWxlLCBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hlbiBpdCBlbnRlcmVkCitoaXN0b3J5LCBzbyB3ZSBhbHNvIGFkZCBgLS1pZ25vcmUtdW5tYXRjaGA6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAtLWluZGV4LWZpbHRlciAnZ2l0IHJtIC0tY2FjaGVkIC0taWdub3JlLXVubWF0Y2ggZmlsZW5hbWUnIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdywgeW91IHdpbGwgZ2V0IHRoZSByZXdyaXR0ZW4gaGlzdG9yeSBzYXZlZCBpbiBIRUFELgorCitUbyByZXdyaXRlIHRoZSByZXBvc2l0b3J5IHRvIGxvb2sgYXMgaWYgYGZvb2Rpci9gIGhhZCBiZWVuIGl0cyBwcm9qZWN0Cityb290LCBhbmQgZGlzY2FyZCBhbGwgb3RoZXIgaGlzdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1zdWJkaXJlY3RvcnktZmlsdGVyIGZvb2RpciAtLSAtLWFsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaHVzIHlvdSBjYW4sIGUuZy4sIHR1cm4gYSBsaWJyYXJ5IHN1YmRpcmVjdG9yeSBpbnRvIGEgcmVwb3NpdG9yeSBvZgoraXRzIG93bi4gIE5vdGUgdGhlIGAtLWAgdGhhdCBzZXBhcmF0ZXMgJ2ZpbHRlci1icmFuY2gnIG9wdGlvbnMgZnJvbQorcmV2aXNpb24gb3B0aW9ucywgYW5kIHRoZSBgLS1hbGxgIHRvIHJld3JpdGUgYWxsIGJyYW5jaGVzIGFuZCB0YWdzLgorCitUbyBzZXQgYSBjb21taXQgKHdoaWNoIHR5cGljYWxseSBpcyBhdCB0aGUgdGlwIG9mIGFub3RoZXIKK2hpc3RvcnkpIHRvIGJlIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgaW5pdGlhbCBjb21taXQsIGluCitvcmRlciB0byBwYXN0ZSB0aGUgb3RoZXIgaGlzdG9yeSBiZWhpbmQgdGhlIGN1cnJlbnQgaGlzdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1wYXJlbnQtZmlsdGVyICdzZWQgInMvXlwkLy1wIDxncmFmdC1pZD4vIicgSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoaWYgdGhlIHBhcmVudCBzdHJpbmcgaXMgZW1wdHkgLSB3aGljaCBoYXBwZW5zIHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aAordGhlIGluaXRpYWwgY29tbWl0IC0gYWRkIGdyYWZ0Y29tbWl0IGFzIGEgcGFyZW50KS4gIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMKK2hpc3Rvcnkgd2l0aCBhIHNpbmdsZSByb290ICh0aGF0IGlzLCBubyBtZXJnZSB3aXRob3V0IGNvbW1vbiBhbmNlc3RvcnMKK2hhcHBlbmVkKS4gIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB1c2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAtLXBhcmVudC1maWx0ZXIgXAorCSd0ZXN0ICRHSVRfQ09NTUlUID0gPGNvbW1pdC1pZD4gJiYgZWNobyAiLXAgPGdyYWZ0LWlkPiIgfHwgY2F0JyBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciBldmVuIHNpbXBsZXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvICIkY29tbWl0LWlkICRncmFmdC1pZCIgPj4gLmdpdC9pbmZvL2dyYWZ0cworZ2l0IGZpbHRlci1icmFuY2ggJGdyYWZ0LWlkLi5IRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZW1vdmUgY29tbWl0cyBhdXRob3JlZCBieSAiRGFybCBNY0JyaWJlIiBmcm9tIHRoZSBoaXN0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC0tY29tbWl0LWZpbHRlciAnCisJaWYgWyAiJEdJVF9BVVRIT1JfTkFNRSIgPSAiRGFybCBNY0JyaWJlIiBdOworCXRoZW4KKwkJc2tpcF9jb21taXQgIiRAIjsKKwllbHNlCisJCWdpdCBjb21taXQtdHJlZSAiJEAiOworCWZpJyBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZ1bmN0aW9uICdza2lwX2NvbW1pdCcgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2tpcF9jb21taXQoKQoreworCXNoaWZ0OworCXdoaWxlIFsgLW4gIiQxIiBdOworCWRvCisJCXNoaWZ0OworCQltYXAgIiQxIjsKKwkJc2hpZnQ7CisJZG9uZTsKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzaGlmdCBtYWdpYyBmaXJzdCB0aHJvd3MgYXdheSB0aGUgdHJlZSBpZCBhbmQgdGhlbiB0aGUgLXAKK3BhcmFtZXRlcnMuICBOb3RlIHRoYXQgdGhpcyBoYW5kbGVzIG1lcmdlcyBwcm9wZXJseSEgSW4gY2FzZSBEYXJsCitjb21taXR0ZWQgYSBtZXJnZSBiZXR3ZWVuIFAxIGFuZCBQMiwgaXQgd2lsbCBiZSBwcm9wYWdhdGVkIHByb3Blcmx5CithbmQgYWxsIGNoaWxkcmVuIG9mIHRoZSBtZXJnZSB3aWxsIGJlY29tZSBtZXJnZSBjb21taXRzIHdpdGggUDEsUDIKK2FzIHRoZWlyIHBhcmVudHMgaW5zdGVhZCBvZiB0aGUgbWVyZ2UgY29tbWl0LgorCisqTk9URSogdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGUgY29tbWl0cywgYW5kIHdoaWNoIGFyZSBub3QgcmV2ZXJ0ZWQKK2J5IHN1YnNlcXVlbnQgY29tbWl0cywgd2lsbCBzdGlsbCBiZSBpbiB0aGUgcmV3cml0dGVuIGJyYW5jaC4gSWYgeW91IHdhbnQKK3RvIHRocm93IG91dCBfY2hhbmdlc18gdG9nZXRoZXIgd2l0aCB0aGUgY29tbWl0cywgeW91IHNob3VsZCB1c2UgdGhlCitpbnRlcmFjdGl2ZSBtb2RlIG9mICdnaXQgcmViYXNlJy4KKworWW91IGNhbiByZXdyaXRlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIHVzaW5nIGAtLW1zZy1maWx0ZXJgLiAgRm9yCitleGFtcGxlLCAnZ2l0IHN2bi1pZCcgc3RyaW5ncyBpbiBhIHJlcG9zaXRvcnkgY3JlYXRlZCBieSAnZ2l0IHN2bicgY2FuCitiZSByZW1vdmVkIHRoaXMgd2F5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAtLW1zZy1maWx0ZXIgJworCXNlZCAtZSAiL15naXQtc3ZuLWlkOi9kIgorJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgbmVlZCB0byBhZGQgJ0Fja2VkLWJ5JyBsaW5lcyB0bywgc2F5LCB0aGUgbGFzdCAxMCBjb21taXRzIChub25lCitvZiB3aGljaCBpcyBhIG1lcmdlKSwgdXNlIHRoaXMgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC0tbXNnLWZpbHRlciAnCisJY2F0ICYmCisJZWNobyAiQWNrZWQtYnk6IEJ1Z3MgQnVubnkgPGJ1bm55QGJ1Z3ppbGxhLm9yZz4iCisnIEhFQUR+MTAuLkhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHJlc3RyaWN0IHJld3JpdGluZyB0byBvbmx5IHBhcnQgb2YgdGhlIGhpc3RvcnksIHNwZWNpZnkgYSByZXZpc2lvbgorcmFuZ2UgaW4gYWRkaXRpb24gdG8gdGhlIG5ldyBicmFuY2ggbmFtZS4gIFRoZSBuZXcgYnJhbmNoIG5hbWUgd2lsbAorcG9pbnQgdG8gdGhlIHRvcC1tb3N0IHJldmlzaW9uIHRoYXQgYSAnZ2l0IHJldi1saXN0JyBvZiB0aGlzIHJhbmdlCit3aWxsIHByaW50LgorCitDb25zaWRlciB0aGlzIGhpc3Rvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBELS1FLS1GLS1HLS1ICisgICAgLyAgICAgLworQS0tQi0tLS0tQworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHJld3JpdGUgb25seSBjb21taXRzIEQsRSxGLEcsSCwgYnV0IGxlYXZlIEEsIEIgYW5kIEMgYWxvbmUsIHVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC4uLiBDLi5ICistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZXdyaXRlIGNvbW1pdHMgRSxGLEcsSCwgdXNlIG9uZSBvZiB0aGVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLi4uIEMuLkggLS1ub3QgRAorZ2l0IGZpbHRlci1icmFuY2ggLi4uIEQuLkggLS1ub3QgQworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBtb3ZlIHRoZSB3aG9sZSB0cmVlIGludG8gYSBzdWJkaXJlY3RvcnksIG9yIHJlbW92ZSBpdCBmcm9tIHRoZXJlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC0taW5kZXgtZmlsdGVyIFwKKwknZ2l0IGxzLWZpbGVzIC1zIHwgc2VkICJzLVx0XCIqLSZuZXdzdWJkaXIvLSIgfAorCQlHSVRfSU5ERVhfRklMRT0kR0lUX0lOREVYX0ZJTEUubmV3IFwKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJIG12ICIkR0lUX0lOREVYX0ZJTEUubmV3IiAiJEdJVF9JTkRFWF9GSUxFIicgSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCitDaGVja2xpc3QgZm9yIFNocmlua2luZyBhIFJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnaXQtZmlsdGVyLWJyYW5jaCBpcyBvZnRlbiB1c2VkIHRvIGdldCByaWQgb2YgYSBzdWJzZXQgb2YgZmlsZXMsCit1c3VhbGx5IHdpdGggc29tZSBjb21iaW5hdGlvbiBvZiBgLS1pbmRleC1maWx0ZXJgIGFuZAorYC0tc3ViZGlyZWN0b3J5LWZpbHRlcmAuICBQZW9wbGUgZXhwZWN0IHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeSB0bworYmUgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5hbCwgYnV0IHlvdSBuZWVkIGEgZmV3IG1vcmUgc3RlcHMgdG8KK2FjdHVhbGx5IG1ha2UgaXQgc21hbGxlciwgYmVjYXVzZSBnaXQgdHJpZXMgaGFyZCBub3QgdG8gbG9zZSB5b3VyCitvYmplY3RzIHVudGlsIHlvdSB0ZWxsIGl0IHRvLiAgRmlyc3QgbWFrZSBzdXJlIHRoYXQ6CisKKyogWW91IHJlYWxseSByZW1vdmVkIGFsbCB2YXJpYW50cyBvZiBhIGZpbGVuYW1lLCBpZiBhIGJsb2Igd2FzIG1vdmVkCisgIG92ZXIgaXRzIGxpZmV0aW1lLiAgYGdpdCBsb2cgLS1uYW1lLW9ubHkgLS1mb2xsb3cgLS1hbGwgLS0gZmlsZW5hbWVgCisgIGNhbiBoZWxwIHlvdSBmaW5kIHJlbmFtZXMuCisKKyogWW91IHJlYWxseSBmaWx0ZXJlZCBhbGwgcmVmczogdXNlIGAtLXRhZy1uYW1lLWZpbHRlciBjYXQgLS0gLS1hbGxgCisgIHdoZW4gY2FsbGluZyBnaXQtZmlsdGVyLWJyYW5jaC4KKworVGhlbiB0aGVyZSBhcmUgdHdvIHdheXMgdG8gZ2V0IGEgc21hbGxlciByZXBvc2l0b3J5LiAgQSBzYWZlciB3YXkgaXMKK3RvIGNsb25lLCB0aGF0IGtlZXBzIHlvdXIgb3JpZ2luYWwgaW50YWN0LgorCisqIENsb25lIGl0IHdpdGggYGdpdCBjbG9uZSBmaWxlOi8vL3BhdGgvdG8vcmVwb2AuICBUaGUgY2xvbmUKKyAgd2lsbCBub3QgaGF2ZSB0aGUgcmVtb3ZlZCBvYmplY3RzLiAgU2VlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdLiAgKE5vdGUKKyAgdGhhdCBjbG9uaW5nIHdpdGggYSBwbGFpbiBwYXRoIGp1c3QgaGFyZGxpbmtzIGV2ZXJ5dGhpbmchKQorCitJZiB5b3UgcmVhbGx5IGRvbid0IHdhbnQgdG8gY2xvbmUgaXQsIGZvciB3aGF0ZXZlciByZWFzb25zLCBjaGVjayB0aGUKK2ZvbGxvd2luZyBwb2ludHMgaW5zdGVhZCAoaW4gdGhpcyBvcmRlcikuICBUaGlzIGlzIGEgdmVyeSBkZXN0cnVjdGl2ZQorYXBwcm9hY2gsIHNvICptYWtlIGEgYmFja3VwKiBvciBnbyBiYWNrIHRvIGNsb25pbmcgaXQuICBZb3UgaGF2ZSBiZWVuCit3YXJuZWQuCisKKyogUmVtb3ZlIHRoZSBvcmlnaW5hbCByZWZzIGJhY2tlZCB1cCBieSBnaXQtZmlsdGVyLWJyYW5jaDogc2F5IGBnaXQKKyAgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiByZWZzL29yaWdpbmFsLyB8IHhhcmdzIC1uIDEgZ2l0CisgIHVwZGF0ZS1yZWYgLWRgLgorCisqIEV4cGlyZSBhbGwgcmVmbG9ncyB3aXRoIGBnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgLS1hbGxgLgorCisqIEdhcmJhZ2UgY29sbGVjdCBhbGwgdW5yZWZlcmVuY2VkIG9iamVjdHMgd2l0aCBgZ2l0IGdjIC0tcHJ1bmU9bm93YAorICAob3IgaWYgeW91ciBnaXQtZ2MgaXMgbm90IG5ldyBlbm91Z2ggdG8gc3VwcG9ydCBhcmd1bWVudHMgdG8KKyAgYC0tcHJ1bmVgLCB1c2UgYGdpdCByZXBhY2sgLWFkOyBnaXQgcHJ1bmVgIGluc3RlYWQpLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZtdC1tZXJnZS1tc2cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZm10LW1lcmdlLW1zZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwZjU1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZtdC1tZXJnZS1tc2cudHh0CkBAIC0wLDAgKzEsNzcgQEAKK2dpdC1mbXQtbWVyZ2UtbXNnKDEpCis9PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZm10LW1lcmdlLW1zZyAtIFByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBmbXQtbWVyZ2UtbXNnJyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gPCRHSVRfRElSL0ZFVENIX0hFQUQKKydnaXQgZm10LW1lcmdlLW1zZycgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIC1GIDxmaWxlPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1Rha2VzIHRoZSBsaXN0IG9mIG1lcmdlZCBvYmplY3RzIG9uIHN0ZGluIGFuZCBwcm9kdWNlcyBhIHN1aXRhYmxlCitjb21taXQgbWVzc2FnZSB0byBiZSB1c2VkIGZvciB0aGUgbWVyZ2UgY29tbWl0LCB1c3VhbGx5IHRvIGJlCitwYXNzZWQgYXMgdGhlICc8bWVyZ2UtbWVzc2FnZT4nIGFyZ3VtZW50IG9mICdnaXQgbWVyZ2UnLgorCitUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgbW9zdGx5IGZvciBpbnRlcm5hbCB1c2UgYnkgc2NyaXB0cworYXV0b21hdGljYWxseSBpbnZva2luZyAnZ2l0IG1lcmdlJy4KKworT1BUSU9OUworLS0tLS0tLQorCistLWxvZ1s9PG4+XTo6CisJSW4gYWRkaXRpb24gdG8gYnJhbmNoIG5hbWVzLCBwb3B1bGF0ZSB0aGUgbG9nIG1lc3NhZ2Ugd2l0aAorCW9uZS1saW5lIGRlc2NyaXB0aW9ucyBmcm9tIHRoZSBhY3R1YWwgY29tbWl0cyB0aGF0IGFyZSBiZWluZworCW1lcmdlZC4gIEF0IG1vc3QgPG4+IGNvbW1pdHMgZnJvbSBlYWNoIG1lcmdlIHBhcmVudCB3aWxsIGJlCisJdXNlZCAoMjAgaWYgPG4+IGlzIG9taXR0ZWQpLiAgVGhpcyBvdmVycmlkZXMgdGhlIGBtZXJnZS5sb2dgCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworLS1uby1sb2c6OgorCURvIG5vdCBsaXN0IG9uZS1saW5lIGRlc2NyaXB0aW9ucyBmcm9tIHRoZSBhY3R1YWwgY29tbWl0cyBiZWluZworCW1lcmdlZC4KKworLS1zdW1tYXJ5OjoKKy0tbm8tc3VtbWFyeTo6CisJU3lub255bXMgdG8gLS1sb2cgYW5kIC0tbm8tbG9nOyB0aGVzZSBhcmUgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZQorCXJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKworLW0gPG1lc3NhZ2U+OjoKKy0tbWVzc2FnZSA8bWVzc2FnZT46OgorCVVzZSA8bWVzc2FnZT4gaW5zdGVhZCBvZiB0aGUgYnJhbmNoIG5hbWVzIGZvciB0aGUgZmlyc3QgbGluZQorCW9mIHRoZSBsb2cgbWVzc2FnZS4gIEZvciB1c2Ugd2l0aCBgLS1sb2dgLgorCistRiA8ZmlsZT46OgorLS1maWxlIDxmaWxlPjo6CisJVGFrZSB0aGUgbGlzdCBvZiBtZXJnZWQgb2JqZWN0cyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mCisJc3RkaW4uCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworbWVyZ2UuYnJhbmNoZGVzYzo6CisJSW4gYWRkaXRpb24gdG8gYnJhbmNoIG5hbWVzLCBwb3B1bGF0ZSB0aGUgbG9nIG1lc3NhZ2Ugd2l0aAorCXRoZSBicmFuY2ggZGVzY3JpcHRpb24gdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlbS4gIERlZmF1bHRzCisJdG8gZmFsc2UuCisKK21lcmdlLmxvZzo6CisJSW4gYWRkaXRpb24gdG8gYnJhbmNoIG5hbWVzLCBwb3B1bGF0ZSB0aGUgbG9nIG1lc3NhZ2Ugd2l0aCBhdAorCW1vc3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gdGhlCisJYWN0dWFsIGNvbW1pdHMgdGhhdCBhcmUgYmVpbmcgbWVyZ2VkLiAgRGVmYXVsdHMgdG8gZmFsc2UsIGFuZAorCXRydWUgaXMgYSBzeW5vbnltIGZvciAyMC4KKworbWVyZ2Uuc3VtbWFyeTo6CisJU3lub255bSB0byBgbWVyZ2UubG9nYDsgdGhpcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4KKwl0aGUgZnV0dXJlLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LW1lcmdlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1NWE0ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQKQEAgLTAsMCArMSwyMjAgQEAKK2dpdC1mb3ItZWFjaC1yZWYoMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWZvci1lYWNoLXJlZiAtIE91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZm9yLWVhY2gtcmVmJyBbLS1jb3VudD08Y291bnQ+XSBbLS1zaGVsbHwtLXBlcmx8LS1weXRob258LS10Y2xdCisJCSAgIFsoLS1zb3J0PTxrZXk+KS4uLl0gWy0tZm9ybWF0PTxmb3JtYXQ+XSBbPHBhdHRlcm4+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworSXRlcmF0ZSBvdmVyIGFsbCByZWZzIHRoYXQgbWF0Y2ggYDxwYXR0ZXJuPmAgYW5kIHNob3cgdGhlbQorYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBgPGZvcm1hdD5gLCBhZnRlciBzb3J0aW5nIHRoZW0gYWNjb3JkaW5nCit0byB0aGUgZ2l2ZW4gc2V0IG9mIGA8a2V5PmAuICBJZiBgPGNvdW50PmAgaXMgZ2l2ZW4sIHN0b3AgYWZ0ZXIKK3Nob3dpbmcgdGhhdCBtYW55IHJlZnMuICBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlcyBpbiBgPGZvcm1hdD5gCitjYW4gb3B0aW9uYWxseSBiZSBxdW90ZWQgYXMgc3RyaW5nIGxpdGVyYWxzIGluIHRoZSBzcGVjaWZpZWQKK2hvc3QgbGFuZ3VhZ2UgYWxsb3dpbmcgdGhlaXIgZGlyZWN0IGV2YWx1YXRpb24gaW4gdGhhdCBsYW5ndWFnZS4KKworT1BUSU9OUworLS0tLS0tLQorPGNvdW50Pjo6CisJQnkgZGVmYXVsdCB0aGUgY29tbWFuZCBzaG93cyBhbGwgcmVmcyB0aGF0IG1hdGNoCisJYDxwYXR0ZXJuPmAuICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBzdG9wIGFmdGVyIHNob3dpbmcKKwl0aGF0IG1hbnkgcmVmcy4KKworPGtleT46OgorCUEgZmllbGQgbmFtZSB0byBzb3J0IG9uLiAgUHJlZml4IGAtYCB0byBzb3J0IGluCisJZGVzY2VuZGluZyBvcmRlciBvZiB0aGUgdmFsdWUuICBXaGVuIHVuc3BlY2lmaWVkLAorCWByZWZuYW1lYCBpcyB1c2VkLiAgWW91IG1heSB1c2UgdGhlIC0tc29ydD08a2V5PiBvcHRpb24KKwltdWx0aXBsZSB0aW1lcywgaW4gd2hpY2ggY2FzZSB0aGUgbGFzdCBrZXkgYmVjb21lcyB0aGUgcHJpbWFyeQorCWtleS4KKworPGZvcm1hdD46OgorCUEgc3RyaW5nIHRoYXQgaW50ZXJwb2xhdGVzIGAlKGZpZWxkbmFtZSlgIGZyb20gdGhlCisJb2JqZWN0IHBvaW50ZWQgYXQgYnkgYSByZWYgYmVpbmcgc2hvd24uICBJZiBgZmllbGRuYW1lYAorCWlzIHByZWZpeGVkIHdpdGggYW4gYXN0ZXJpc2sgKGAqYCkgYW5kIHRoZSByZWYgcG9pbnRzCisJYXQgYSB0YWcgb2JqZWN0LCB0aGUgdmFsdWUgZm9yIHRoZSBmaWVsZCBpbiB0aGUgb2JqZWN0CisJdGFnIHJlZmVycyBpcyB1c2VkLiAgV2hlbiB1bnNwZWNpZmllZCwgZGVmYXVsdHMgdG8KKwlgJShvYmplY3RuYW1lKSBTUEMgJShvYmplY3R0eXBlKSBUQUIgJShyZWZuYW1lKWAuCisJSXQgYWxzbyBpbnRlcnBvbGF0ZXMgYCUlYCB0byBgJWAsIGFuZCBgJXh4YCB3aGVyZSBgeHhgCisJYXJlIGhleCBkaWdpdHMgaW50ZXJwb2xhdGVzIHRvIGNoYXJhY3RlciB3aXRoIGhleCBjb2RlCisJYHh4YDsgZm9yIGV4YW1wbGUgYCUwMGAgaW50ZXJwb2xhdGVzIHRvIGBcMGAgKE5VTCksCisJYCUwOWAgdG8gYFx0YCAoVEFCKSBhbmQgYCUwYWAgdG8gYFxuYCAoTEYpLgorCis8cGF0dGVybj4uLi46OgorCUlmIG9uZSBvciBtb3JlIHBhdHRlcm5zIGFyZSBnaXZlbiwgb25seSByZWZzIGFyZSBzaG93biB0aGF0CisJbWF0Y2ggYWdhaW5zdCBhdCBsZWFzdCBvbmUgcGF0dGVybiwgZWl0aGVyIHVzaW5nIGZubWF0Y2goMykgb3IKKwlsaXRlcmFsbHksIGluIHRoZSBsYXR0ZXIgY2FzZSBtYXRjaGluZyBjb21wbGV0ZWx5IG9yIGZyb20gdGhlCisJYmVnaW5uaW5nIHVwIHRvIGEgc2xhc2guCisKKy0tc2hlbGw6OgorLS1wZXJsOjoKKy0tcHl0aG9uOjoKKy0tdGNsOjoKKwlJZiBnaXZlbiwgc3RyaW5ncyB0aGF0IHN1YnN0aXR1dGUgYCUoZmllbGRuYW1lKWAKKwlwbGFjZWhvbGRlcnMgYXJlIHF1b3RlZCBhcyBzdHJpbmcgbGl0ZXJhbHMgc3VpdGFibGUgZm9yCisJdGhlIHNwZWNpZmllZCBob3N0IGxhbmd1YWdlLiAgVGhpcyBpcyBtZWFudCB0byBwcm9kdWNlCisJYSBzY3JpcHRsZXQgdGhhdCBjYW4gZGlyZWN0bHkgYmUgYGV2YWxgZWQuCisKKworRklFTEQgTkFNRVMKKy0tLS0tLS0tLS0tCisKK1ZhcmlvdXMgdmFsdWVzIGZyb20gc3RydWN0dXJlZCBmaWVsZHMgaW4gcmVmZXJlbmNlZCBvYmplY3RzIGNhbgorYmUgdXNlZCB0byBpbnRlcnBvbGF0ZSBpbnRvIHRoZSByZXN1bHRpbmcgb3V0cHV0LCBvciBhcyBzb3J0CitrZXlzLgorCitGb3IgYWxsIG9iamVjdHMsIHRoZSBmb2xsb3dpbmcgbmFtZXMgY2FuIGJlIHVzZWQ6CisKK3JlZm5hbWU6OgorCVRoZSBuYW1lIG9mIHRoZSByZWYgKHRoZSBwYXJ0IGFmdGVyICRHSVRfRElSLykuCisJRm9yIGEgbm9uLWFtYmlndW91cyBzaG9ydCBuYW1lIG9mIHRoZSByZWYgYXBwZW5kIGA6c2hvcnRgLgorCVRoZSBvcHRpb24gY29yZS53YXJuQW1iaWd1b3VzUmVmcyBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgc3RyaWN0CisJYWJicmV2aWF0aW9uIG1vZGUuCisKK29iamVjdHR5cGU6OgorCVRoZSB0eXBlIG9mIHRoZSBvYmplY3QgKGBibG9iYCwgYHRyZWVgLCBgY29tbWl0YCwgYHRhZ2ApLgorCitvYmplY3RzaXplOjoKKwlUaGUgc2l6ZSBvZiB0aGUgb2JqZWN0ICh0aGUgc2FtZSBhcyAnZ2l0IGNhdC1maWxlIC1zJyByZXBvcnRzKS4KKworb2JqZWN0bmFtZTo6CisJVGhlIG9iamVjdCBuYW1lIChha2EgU0hBLTEpLgorCUZvciBhIG5vbi1hbWJpZ3VvdXMgYWJicmV2aWF0aW9uIG9mIHRoZSBvYmplY3QgbmFtZSBhcHBlbmQgYDpzaG9ydGAuCisKK3Vwc3RyZWFtOjoKKwlUaGUgbmFtZSBvZiBhIGxvY2FsIHJlZiB3aGljaCBjYW4gYmUgY29uc2lkZXJlZCBgYHVwc3RyZWFtJycKKwlmcm9tIHRoZSBkaXNwbGF5ZWQgcmVmLiBSZXNwZWN0cyBgOnNob3J0YCBpbiB0aGUgc2FtZSB3YXkgYXMKKwlgcmVmbmFtZWAgYWJvdmUuCisKK0luIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSwgZm9yIGNvbW1pdCBhbmQgdGFnIG9iamVjdHMsIHRoZSBoZWFkZXIKK2ZpZWxkIG5hbWVzIChgdHJlZWAsIGBwYXJlbnRgLCBgb2JqZWN0YCwgYHR5cGVgLCBhbmQgYHRhZ2ApIGNhbgorYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB2YWx1ZSBpbiB0aGUgaGVhZGVyIGZpZWxkLgorCitGaWVsZHMgdGhhdCBoYXZlIG5hbWUtZW1haWwtZGF0ZSB0dXBsZSBhcyBpdHMgdmFsdWUgKGBhdXRob3JgLAorYGNvbW1pdHRlcmAsIGFuZCBgdGFnZ2VyYCkgY2FuIGJlIHN1ZmZpeGVkIHdpdGggYG5hbWVgLCBgZW1haWxgLAorYW5kIGBkYXRlYCB0byBleHRyYWN0IHRoZSBuYW1lZCBjb21wb25lbnQuCisKK1RoZSBjb21wbGV0ZSBtZXNzYWdlIGluIGEgY29tbWl0IGFuZCB0YWcgb2JqZWN0IGlzIGBjb250ZW50c2AuCitJdHMgZmlyc3QgbGluZSBpcyBgY29udGVudHM6c3ViamVjdGAsIHdoZXJlIHN1YmplY3QgaXMgdGhlIGNvbmNhdGVuYXRpb24KK29mIGFsbCBsaW5lcyBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgdXAgdG8gdGhlIGZpcnN0IGJsYW5rIGxpbmUuICBUaGUgbmV4dAorbGluZSBpcyAnY29udGVudHM6Ym9keScsIHdoZXJlIGJvZHkgaXMgYWxsIG9mIHRoZSBsaW5lcyBhZnRlciB0aGUgZmlyc3QKK2JsYW5rIGxpbmUuICBGaW5hbGx5LCB0aGUgb3B0aW9uYWwgR1BHIHNpZ25hdHVyZSBpcyBgY29udGVudHM6c2lnbmF0dXJlYC4KKworRm9yIHNvcnRpbmcgcHVycG9zZXMsIGZpZWxkcyB3aXRoIG51bWVyaWMgdmFsdWVzIHNvcnQgaW4gbnVtZXJpYworb3JkZXIgKGBvYmplY3RzaXplYCwgYGF1dGhvcmRhdGVgLCBgY29tbWl0dGVyZGF0ZWAsIGB0YWdnZXJkYXRlYCkuCitBbGwgb3RoZXIgZmllbGRzIGFyZSB1c2VkIHRvIHNvcnQgaW4gdGhlaXIgYnl0ZS12YWx1ZSBvcmRlci4KKworSW4gYW55IGNhc2UsIGEgZmllbGQgbmFtZSB0aGF0IHJlZmVycyB0byBhIGZpZWxkIGluYXBwbGljYWJsZSB0bwordGhlIG9iamVjdCByZWZlcnJlZCBieSB0aGUgcmVmIGRvZXMgbm90IGNhdXNlIGFuIGVycm9yLiAgSXQKK3JldHVybnMgYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQuCisKK0FzIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgZGF0ZS10eXBlIGZpZWxkcywgeW91IG1heSBzcGVjaWZ5IGEgZm9ybWF0IGZvcgordGhlIGRhdGUgYnkgYWRkaW5nIG9uZSBvZiBgOmRlZmF1bHRgLCBgOnJlbGF0aXZlYCwgYDpzaG9ydGAsIGA6bG9jYWxgLAorYDppc284NjAxYCBvciBgOnJmYzI4MjJgIHRvIHRoZSBlbmQgb2YgdGhlIGZpZWxkbmFtZTsgZS5nLgorYCUodGFnZ2VyZGF0ZTpyZWxhdGl2ZSlgLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitBbiBleGFtcGxlIGRpcmVjdGx5IHByb2R1Y2luZyBmb3JtYXR0ZWQgdGV4dC4gIFNob3cgdGhlIG1vc3QgcmVjZW50CiszIHRhZ2dlZCBjb21taXRzOgorCistLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorCitnaXQgZm9yLWVhY2gtcmVmIC0tY291bnQ9MyAtLXNvcnQ9Jy0qYXV0aG9yZGF0ZScgXAorLS1mb3JtYXQ9J0Zyb206ICUoKmF1dGhvcm5hbWUpICUoKmF1dGhvcmVtYWlsKQorU3ViamVjdDogJSgqc3ViamVjdCkKK0RhdGU6ICUoKmF1dGhvcmRhdGUpCitSZWY6ICUoKnJlZm5hbWUpCisKKyUoKmJvZHkpCisnICdyZWZzL3RhZ3MnCistLS0tLS0tLS0tLS0KKworCitBIHNpbXBsZSBleGFtcGxlIHNob3dpbmcgdGhlIHVzZSBvZiBzaGVsbCBldmFsIG9uIHRoZSBvdXRwdXQsCitkZW1vbnN0cmF0aW5nIHRoZSB1c2Ugb2YgLS1zaGVsbC4gIExpc3QgdGhlIHByZWZpeGVzIG9mIGFsbCBoZWFkczoKKy0tLS0tLS0tLS0tLQorIyEvYmluL3NoCisKK2dpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0icmVmPSUocmVmbmFtZSkiIHJlZnMvaGVhZHMgfCBcCit3aGlsZSByZWFkIGVudHJ5CitkbworCWV2YWwgIiRlbnRyeSIKKwllY2hvIGBkaXJuYW1lICRyZWZgCitkb25lCistLS0tLS0tLS0tLS0KKworCitBIGJpdCBtb3JlIGVsYWJvcmF0ZSByZXBvcnQgb24gdGFncywgZGVtb25zdHJhdGluZyB0aGF0IHRoZSBmb3JtYXQKK21heSBiZSBhbiBlbnRpcmUgc2NyaXB0OgorLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKKworZm10PScKKwlyPSUocmVmbmFtZSkKKwl0PSUoKm9iamVjdHR5cGUpCisJVD0ke3IjcmVmcy90YWdzL30KKworCW89JSgqb2JqZWN0bmFtZSkKKwluPSUoKmF1dGhvcm5hbWUpCisJZT0lKCphdXRob3JlbWFpbCkKKwlzPSUoKnN1YmplY3QpCisJZD0lKCphdXRob3JkYXRlKQorCWI9JSgqYm9keSkKKworCWtpbmQ9VGFnCisJaWYgdGVzdCAieiR0IiA9IHoKKwl0aGVuCisJCSMgY291bGQgYmUgYSBsaWdodHdlaWdodCB0YWcKKwkJdD0lKG9iamVjdHR5cGUpCisJCWtpbmQ9IkxpZ2h0d2VpZ2h0IHRhZyIKKwkJbz0lKG9iamVjdG5hbWUpCisJCW49JShhdXRob3JuYW1lKQorCQllPSUoYXV0aG9yZW1haWwpCisJCXM9JShzdWJqZWN0KQorCQlkPSUoYXV0aG9yZGF0ZSkKKwkJYj0lKGJvZHkpCisJZmkKKwllY2hvICIka2luZCAkVCBwb2ludHMgYXQgYSAkdCBvYmplY3QgJG8iCisJaWYgdGVzdCAieiR0IiA9IHpjb21taXQKKwl0aGVuCisJCWVjaG8gIlRoZSBjb21taXQgd2FzIGF1dGhvcmVkIGJ5ICRuICRlCithdCAkZCwgYW5kIHRpdGxlZAorCisgICAgJHMKKworSXRzIG1lc3NhZ2UgcmVhZHMgYXM6CisiCisJCWVjaG8gIiRiIiB8IHNlZCAtZSAicy9eLyAgICAvIgorCQllY2hvCisJZmkKKycKKworZXZhbD1gZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIkZm10IiBcCisJLS1zb3J0PScqb2JqZWN0dHlwZScgXAorCS0tc29ydD0tdGFnZ2VyZGF0ZSBcCisJcmVmcy90YWdzYAorZXZhbCAiJGV2YWwiCistLS0tLS0tLS0tLS0KKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPi4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDQzZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApAQCAtMCwwICsxLDUyMyBAQAorZ2l0LWZvcm1hdC1wYXRjaCgxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZm9ybWF0LXBhdGNoIC0gUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBmb3JtYXQtcGF0Y2gnIFsta10gWygtb3wtLW91dHB1dC1kaXJlY3RvcnkpIDxkaXI+IHwgLS1zdGRvdXRdCisJCSAgIFstLW5vLXRocmVhZCB8IC0tdGhyZWFkWz08c3R5bGU+XV0KKwkJICAgWygtLWF0dGFjaHwtLWlubGluZSlbPTxib3VuZGFyeT5dIHwgLS1uby1hdHRhY2hdCisJCSAgIFstcyB8IC0tc2lnbm9mZl0KKwkJICAgWy0tc2lnbmF0dXJlPTxzaWduYXR1cmU+IHwgLS1uby1zaWduYXR1cmVdCisJCSAgIFstbiB8IC0tbnVtYmVyZWQgfCAtTiB8IC0tbm8tbnVtYmVyZWRdCisJCSAgIFstLXN0YXJ0LW51bWJlciA8bj5dIFstLW51bWJlcmVkLWZpbGVzXQorCQkgICBbLS1pbi1yZXBseS10bz1NZXNzYWdlLUlkXSBbLS1zdWZmaXg9LjxzZng+XQorCQkgICBbLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW1dCisJCSAgIFstLXN1YmplY3QtcHJlZml4PVN1YmplY3QtUHJlZml4XQorCQkgICBbLS10bz08ZW1haWw+XSBbLS1jYz08ZW1haWw+XQorCQkgICBbLS1jb3Zlci1sZXR0ZXJdIFstLXF1aWV0XQorCQkgICBbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XQorCQkgICBbIDxzaW5jZT4gfCA8cmV2aXNpb24gcmFuZ2U+IF0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1ByZXBhcmUgZWFjaCBjb21taXQgd2l0aCBpdHMgcGF0Y2ggaW4KK29uZSBmaWxlIHBlciBjb21taXQsIGZvcm1hdHRlZCB0byByZXNlbWJsZSBVTklYIG1haWxib3ggZm9ybWF0LgorVGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQgaXMgY29udmVuaWVudCBmb3IgZS1tYWlsIHN1Ym1pc3Npb24gb3IKK2ZvciB1c2Ugd2l0aCAnZ2l0IGFtJy4KKworVGhlcmUgYXJlIHR3byB3YXlzIHRvIHNwZWNpZnkgd2hpY2ggY29tbWl0cyB0byBvcGVyYXRlIG9uLgorCisxLiBBIHNpbmdsZSBjb21taXQsIDxzaW5jZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBjb21taXRzIGxlYWRpbmcKKyAgIHRvIHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIHRoYXQgYXJlIG5vdCBpbiB0aGUgaGlzdG9yeQorICAgdGhhdCBsZWFkcyB0byB0aGUgPHNpbmNlPiB0byBiZSBvdXRwdXQuCisKKzIuIEdlbmVyaWMgPHJldmlzaW9uIHJhbmdlPiBleHByZXNzaW9uIChzZWUgIlNQRUNJRllJTkcKKyAgIFJFVklTSU9OUyIgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSkgbWVhbnMgdGhlCisgICBjb21taXRzIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UuCisKK1RoZSBmaXJzdCBydWxlIHRha2VzIHByZWNlZGVuY2UgaW4gdGhlIGNhc2Ugb2YgYSBzaW5nbGUgPGNvbW1pdD4uICBUbworYXBwbHkgdGhlIHNlY29uZCBydWxlLCBpLmUuLCBmb3JtYXQgZXZlcnl0aGluZyBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mCitoaXN0b3J5IHVwIHVudGlsIDxjb21taXQ+LCB1c2UgdGhlICdcLS1yb290JyBvcHRpb246IGBnaXQgZm9ybWF0LXBhdGNoCistLXJvb3QgPGNvbW1pdD5gLiAgSWYgeW91IHdhbnQgdG8gZm9ybWF0IG9ubHkgPGNvbW1pdD4gaXRzZWxmLCB5b3UKK2NhbiBkbyB0aGlzIHdpdGggYGdpdCBmb3JtYXQtcGF0Y2ggLTEgPGNvbW1pdD5gLgorCitCeSBkZWZhdWx0LCBlYWNoIG91dHB1dCBmaWxlIGlzIG51bWJlcmVkIHNlcXVlbnRpYWxseSBmcm9tIDEsIGFuZCB1c2VzIHRoZQorZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgKG1hc3NhZ2VkIGZvciBwYXRobmFtZSBzYWZldHkpIGFzCit0aGUgZmlsZW5hbWUuIFdpdGggdGhlIGAtLW51bWJlcmVkLWZpbGVzYCBvcHRpb24sIHRoZSBvdXRwdXQgZmlsZSBuYW1lcword2lsbCBvbmx5IGJlIG51bWJlcnMsIHdpdGhvdXQgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGNvbW1pdCBhcHBlbmRlZC4KK1RoZSBuYW1lcyBvZiB0aGUgb3V0cHV0IGZpbGVzIGFyZSBwcmludGVkIHRvIHN0YW5kYXJkCitvdXRwdXQsIHVubGVzcyB0aGUgYC0tc3Rkb3V0YCBvcHRpb24gaXMgc3BlY2lmaWVkLgorCitJZiBgLW9gIGlzIHNwZWNpZmllZCwgb3V0cHV0IGZpbGVzIGFyZSBjcmVhdGVkIGluIDxkaXI+LiAgT3RoZXJ3aXNlCit0aGV5IGFyZSBjcmVhdGVkIGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCitCeSBkZWZhdWx0LCB0aGUgc3ViamVjdCBvZiBhIHNpbmdsZSBwYXRjaCBpcyAiW1BBVENIXSAiIGZvbGxvd2VkIGJ5Cit0aGUgY29uY2F0ZW5hdGlvbiBvZiBsaW5lcyBmcm9tIHRoZSBjb21taXQgbWVzc2FnZSB1cCB0byB0aGUgZmlyc3QgYmxhbmsKK2xpbmUgKHNlZSB0aGUgRElTQ1VTU0lPTiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSkuCisKK1doZW4gbXVsdGlwbGUgcGF0Y2hlcyBhcmUgb3V0cHV0LCB0aGUgc3ViamVjdCBwcmVmaXggd2lsbCBpbnN0ZWFkIGJlCisiW1BBVENIIG4vbV0gIi4gIFRvIGZvcmNlIDEvMSB0byBiZSBhZGRlZCBmb3IgYSBzaW5nbGUgcGF0Y2gsIHVzZSBgLW5gLgorVG8gb21pdCBwYXRjaCBudW1iZXJzIGZyb20gdGhlIHN1YmplY3QsIHVzZSBgLU5gLgorCitJZiBnaXZlbiBgLS10aHJlYWRgLCBgZ2l0LWZvcm1hdC1wYXRjaGAgd2lsbCBnZW5lcmF0ZSBgSW4tUmVwbHktVG9gIGFuZAorYFJlZmVyZW5jZXNgIGhlYWRlcnMgdG8gbWFrZSB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IHBhdGNoIG1haWxzIGFwcGVhcgorYXMgcmVwbGllcyB0byB0aGUgZmlyc3QgbWFpbDsgdGhpcyBhbHNvIGdlbmVyYXRlcyBhIGBNZXNzYWdlLUlkYCBoZWFkZXIgdG8KK3JlZmVyZW5jZS4KKworT1BUSU9OUworLS0tLS0tLQorOmdpdC1mb3JtYXQtcGF0Y2g6IDEKK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCistPG4+OjoKKwlQcmVwYXJlIHBhdGNoZXMgZnJvbSB0aGUgdG9wbW9zdCA8bj4gY29tbWl0cy4KKworLW8gPGRpcj46OgorLS1vdXRwdXQtZGlyZWN0b3J5IDxkaXI+OjoKKwlVc2UgPGRpcj4gdG8gc3RvcmUgdGhlIHJlc3VsdGluZyBmaWxlcywgaW5zdGVhZCBvZiB0aGUKKwljdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCistbjo6CistLW51bWJlcmVkOjoKKwlOYW1lIG91dHB1dCBpbiAnW1BBVENIIG4vbV0nIGZvcm1hdCwgZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoLgorCistTjo6CistLW5vLW51bWJlcmVkOjoKKwlOYW1lIG91dHB1dCBpbiAnW1BBVENIXScgZm9ybWF0LgorCistLXN0YXJ0LW51bWJlciA8bj46OgorCVN0YXJ0IG51bWJlcmluZyB0aGUgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxLgorCistLW51bWJlcmVkLWZpbGVzOjoKKwlPdXRwdXQgZmlsZSBuYW1lcyB3aWxsIGJlIGEgc2ltcGxlIG51bWJlciBzZXF1ZW5jZQorCXdpdGhvdXQgdGhlIGRlZmF1bHQgZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IGFwcGVuZGVkLgorCistazo6CistLWtlZXAtc3ViamVjdDo6CisJRG8gbm90IHN0cmlwL2FkZCAnW1BBVENIXScgZnJvbSB0aGUgZmlyc3QgbGluZSBvZiB0aGUKKwljb21taXQgbG9nIG1lc3NhZ2UuCisKKy1zOjoKKy0tc2lnbm9mZjo6CisJQWRkIGBTaWduZWQtb2ZmLWJ5OmAgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UsIHVzaW5nCisJdGhlIGNvbW1pdHRlciBpZGVudGl0eSBvZiB5b3Vyc2VsZi4KKworLS1zdGRvdXQ6OgorCVByaW50IGFsbCBjb21taXRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgaW4gbWJveCBmb3JtYXQsCisJaW5zdGVhZCBvZiBjcmVhdGluZyBhIGZpbGUgZm9yIGVhY2ggb25lLgorCistLWF0dGFjaFs9PGJvdW5kYXJ5Pl06OgorCUNyZWF0ZSBtdWx0aXBhcnQvbWl4ZWQgYXR0YWNobWVudCwgdGhlIGZpcnN0IHBhcnQgb2YKKwl3aGljaCBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHRoZSBwYXRjaCBpdHNlbGYgaW4gdGhlCisJc2Vjb25kIHBhcnQsIHdpdGggYENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnRgLgorCistLW5vLWF0dGFjaDo6CisJRGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgYW4gYXR0YWNobWVudCwgb3ZlcnJpZGluZyB0aGUKKwljb25maWd1cmF0aW9uIHNldHRpbmcuCisKKy0taW5saW5lWz08Ym91bmRhcnk+XTo6CisJQ3JlYXRlIG11bHRpcGFydC9taXhlZCBhdHRhY2htZW50LCB0aGUgZmlyc3QgcGFydCBvZgorCXdoaWNoIGlzIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgdGhlIHBhdGNoIGl0c2VsZiBpbiB0aGUKKwlzZWNvbmQgcGFydCwgd2l0aCBgQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lYC4KKworLS10aHJlYWRbPTxzdHlsZT5dOjoKKy0tbm8tdGhyZWFkOjoKKwlDb250cm9scyBhZGRpdGlvbiBvZiBgSW4tUmVwbHktVG9gIGFuZCBgUmVmZXJlbmNlc2AgaGVhZGVycyB0bworCW1ha2UgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBtYWlscyBhcHBlYXIgYXMgcmVwbGllcyB0byB0aGUKKwlmaXJzdC4gIEFsc28gY29udHJvbHMgZ2VuZXJhdGlvbiBvZiB0aGUgYE1lc3NhZ2UtSWRgIGhlYWRlciB0bworCXJlZmVyZW5jZS4KKysKK1RoZSBvcHRpb25hbCA8c3R5bGU+IGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYHNoYWxsb3dgIG9yIGBkZWVwYC4KKydzaGFsbG93JyB0aHJlYWRpbmcgbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBoZWFkIG9mIHRoZQorc2VyaWVzLCB3aGVyZSB0aGUgaGVhZCBpcyBjaG9zZW4gZnJvbSB0aGUgY292ZXIgbGV0dGVyLCB0aGUKK2AtLWluLXJlcGx5LXRvYCwgYW5kIHRoZSBmaXJzdCBwYXRjaCBtYWlsLCBpbiB0aGlzIG9yZGVyLiAgJ2RlZXAnCit0aHJlYWRpbmcgbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cyBvbmUuCisrCitUaGUgZGVmYXVsdCBpcyBgLS1uby10aHJlYWRgLCB1bmxlc3MgdGhlICdmb3JtYXQudGhyZWFkJyBjb25maWd1cmF0aW9uCitpcyBzZXQuICBJZiBgLS10aHJlYWRgIGlzIHNwZWNpZmllZCB3aXRob3V0IGEgc3R5bGUsIGl0IGRlZmF1bHRzIHRvIHRoZQorc3R5bGUgc3BlY2lmaWVkIGJ5ICdmb3JtYXQudGhyZWFkJyBpZiBhbnksIG9yIGVsc2UgYHNoYWxsb3dgLgorKworQmV3YXJlIHRoYXQgdGhlIGRlZmF1bHQgZm9yICdnaXQgc2VuZC1lbWFpbCcgaXMgdG8gdGhyZWFkIGVtYWlscworaXRzZWxmLiAgSWYgeW91IHdhbnQgYGdpdCBmb3JtYXQtcGF0Y2hgIHRvIHRha2UgY2FyZSBvZiB0aHJlYWRpbmcsIHlvdQord2lsbCB3YW50IHRvIGVuc3VyZSB0aGF0IHRocmVhZGluZyBpcyBkaXNhYmxlZCBmb3IgYGdpdCBzZW5kLWVtYWlsYC4KKworLS1pbi1yZXBseS10bz1NZXNzYWdlLUlkOjoKKwlNYWtlIHRoZSBmaXJzdCBtYWlsIChvciBhbGwgdGhlIG1haWxzIHdpdGggYC0tbm8tdGhyZWFkYCkgYXBwZWFyIGFzIGEKKwlyZXBseSB0byB0aGUgZ2l2ZW4gTWVzc2FnZS1JZCwgd2hpY2ggYXZvaWRzIGJyZWFraW5nIHRocmVhZHMgdG8KKwlwcm92aWRlIGEgbmV3IHBhdGNoIHNlcmllcy4KKworLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW06OgorCURvIG5vdCBpbmNsdWRlIGEgcGF0Y2ggdGhhdCBtYXRjaGVzIGEgY29tbWl0IGluCisJPHVudGlsPi4uPHNpbmNlPi4gIFRoaXMgd2lsbCBleGFtaW5lIGFsbCBwYXRjaGVzIHJlYWNoYWJsZQorCWZyb20gPHNpbmNlPiBidXQgbm90IGZyb20gPHVudGlsPiBhbmQgY29tcGFyZSB0aGVtIHdpdGggdGhlCisJcGF0Y2hlcyBiZWluZyBnZW5lcmF0ZWQsIGFuZCBhbnkgcGF0Y2ggdGhhdCBtYXRjaGVzIGlzCisJaWdub3JlZC4KKworLS1zdWJqZWN0LXByZWZpeD08U3ViamVjdC1QcmVmaXg+OjoKKwlJbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCAnW1BBVENIXScgcHJlZml4IGluIHRoZSBzdWJqZWN0CisJbGluZSwgaW5zdGVhZCB1c2UgJ1s8U3ViamVjdC1QcmVmaXg+XScuIFRoaXMKKwlhbGxvd3MgZm9yIHVzZWZ1bCBuYW1pbmcgb2YgYSBwYXRjaCBzZXJpZXMsIGFuZCBjYW4gYmUKKwljb21iaW5lZCB3aXRoIHRoZSBgLS1udW1iZXJlZGAgb3B0aW9uLgorCistLXRvPTxlbWFpbD46OgorCUFkZCBhIGBUbzpgIGhlYWRlciB0byB0aGUgZW1haWwgaGVhZGVycy4gVGhpcyBpcyBpbiBhZGRpdGlvbgorCXRvIGFueSBjb25maWd1cmVkIGhlYWRlcnMsIGFuZCBtYXkgYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy4KKwlUaGUgbmVnYXRlZCBmb3JtIGAtLW5vLXRvYCBkaXNjYXJkcyBhbGwgYFRvOmAgaGVhZGVycyBhZGRlZCBzbworCWZhciAoZnJvbSBjb25maWcgb3IgY29tbWFuZCBsaW5lKS4KKworLS1jYz08ZW1haWw+OjoKKwlBZGQgYSBgQ2M6YCBoZWFkZXIgdG8gdGhlIGVtYWlsIGhlYWRlcnMuIFRoaXMgaXMgaW4gYWRkaXRpb24KKwl0byBhbnkgY29uZmlndXJlZCBoZWFkZXJzLCBhbmQgbWF5IGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCisJVGhlIG5lZ2F0ZWQgZm9ybSBgLS1uby1jY2AgZGlzY2FyZHMgYWxsIGBDYzpgIGhlYWRlcnMgYWRkZWQgc28KKwlmYXIgKGZyb20gY29uZmlnIG9yIGNvbW1hbmQgbGluZSkuCisKKy0tYWRkLWhlYWRlcj08aGVhZGVyPjo6CisJQWRkIGFuIGFyYml0cmFyeSBoZWFkZXIgdG8gdGhlIGVtYWlsIGhlYWRlcnMuICBUaGlzIGlzIGluIGFkZGl0aW9uCisJdG8gYW55IGNvbmZpZ3VyZWQgaGVhZGVycywgYW5kIG1heSBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLgorCUZvciBleGFtcGxlLCBgLS1hZGQtaGVhZGVyPSJPcmdhbml6YXRpb246IGdpdC1mb28iYC4KKwlUaGUgbmVnYXRlZCBmb3JtIGAtLW5vLWFkZC1oZWFkZXJgIGRpc2NhcmRzICphbGwqIChgVG86YCwKKwlgQ2M6YCwgYW5kIGN1c3RvbSkgaGVhZGVycyBhZGRlZCBzbyBmYXIgZnJvbSBjb25maWcgb3IgY29tbWFuZAorCWxpbmUuCisKKy0tY292ZXItbGV0dGVyOjoKKwlJbiBhZGRpdGlvbiB0byB0aGUgcGF0Y2hlcywgZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIgZmlsZQorCWNvbnRhaW5pbmcgdGhlIHNob3J0bG9nIGFuZCB0aGUgb3ZlcmFsbCBkaWZmc3RhdC4gIFlvdSBjYW4KKwlmaWxsIGluIGEgZGVzY3JpcHRpb24gaW4gdGhlIGZpbGUgYmVmb3JlIHNlbmRpbmcgaXQgb3V0LgorCistLVtub10tc2lnbmF0dXJlPTxzaWduYXR1cmU+OjoKKwlBZGQgYSBzaWduYXR1cmUgdG8gZWFjaCBtZXNzYWdlIHByb2R1Y2VkLiBQZXIgUkZDIDM2NzYgdGhlIHNpZ25hdHVyZQorCWlzIHNlcGFyYXRlZCBmcm9tIHRoZSBib2R5IGJ5IGEgbGluZSB3aXRoICctLSAnIG9uIGl0LiBJZiB0aGUKKwlzaWduYXR1cmUgb3B0aW9uIGlzIG9taXR0ZWQgdGhlIHNpZ25hdHVyZSBkZWZhdWx0cyB0byB0aGUgZ2l0IHZlcnNpb24KKwludW1iZXIuCisKKy0tc3VmZml4PS48c2Z4Pjo6CisJSW5zdGVhZCBvZiB1c2luZyBgLnBhdGNoYCBhcyB0aGUgc3VmZml4IGZvciBnZW5lcmF0ZWQKKwlmaWxlbmFtZXMsIHVzZSBzcGVjaWZpZWQgc3VmZml4LiAgQSBjb21tb24gYWx0ZXJuYXRpdmUgaXMKKwlgLS1zdWZmaXg9LnR4dGAuICBMZWF2aW5nIHRoaXMgZW1wdHkgd2lsbCByZW1vdmUgdGhlIGAucGF0Y2hgCisJc3VmZml4LgorKworTm90ZSB0aGF0IHRoZSBsZWFkaW5nIGNoYXJhY3RlciBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgZG90OyBmb3IgZXhhbXBsZSwKK3lvdSBjYW4gdXNlIGAtLXN1ZmZpeD0tcGF0Y2hgIHRvIGdldCBgMDAwMS1kZXNjcmlwdGlvbi1vZi1teS1jaGFuZ2UtcGF0Y2hgLgorCistLXF1aWV0OjoKKwlEbyBub3QgcHJpbnQgdGhlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgZmlsZXMgdG8gc3RhbmRhcmQgb3V0cHV0LgorCistLW5vLWJpbmFyeTo6CisJRG8gbm90IG91dHB1dCBjb250ZW50cyBvZiBjaGFuZ2VzIGluIGJpbmFyeSBmaWxlcywgaW5zdGVhZAorCWRpc3BsYXkgYSBub3RpY2UgdGhhdCB0aG9zZSBmaWxlcyBjaGFuZ2VkLiAgUGF0Y2hlcyBnZW5lcmF0ZWQKKwl1c2luZyB0aGlzIG9wdGlvbiBjYW5ub3QgYmUgYXBwbGllZCBwcm9wZXJseSwgYnV0IHRoZXkgYXJlCisJc3RpbGwgdXNlZnVsIGZvciBjb2RlIHJldmlldy4KKworLS1yb290OjoKKwlUcmVhdCB0aGUgcmV2aXNpb24gYXJndW1lbnQgYXMgYSA8cmV2aXNpb24gcmFuZ2U+LCBldmVuIGlmIGl0CisJaXMganVzdCBhIHNpbmdsZSBjb21taXQgKHRoYXQgd291bGQgbm9ybWFsbHkgYmUgdHJlYXRlZCBhcyBhCisJPHNpbmNlPikuICBOb3RlIHRoYXQgcm9vdCBjb21taXRzIGluY2x1ZGVkIGluIHRoZSBzcGVjaWZpZWQKKwlyYW5nZSBhcmUgYWx3YXlzIGZvcm1hdHRlZCBhcyBjcmVhdGlvbiBwYXRjaGVzLCBpbmRlcGVuZGVudGx5CisJb2YgdGhpcyBmbGFnLgorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitZb3UgY2FuIHNwZWNpZnkgZXh0cmEgbWFpbCBoZWFkZXIgbGluZXMgdG8gYmUgYWRkZWQgdG8gZWFjaCBtZXNzYWdlLAorZGVmYXVsdHMgZm9yIHRoZSBzdWJqZWN0IHByZWZpeCBhbmQgZmlsZSBzdWZmaXgsIG51bWJlciBwYXRjaGVzIHdoZW4KK291dHB1dHRpbmcgbW9yZSB0aGFuIG9uZSBwYXRjaCwgYWRkICJUbyIgb3IgIkNjOiIgaGVhZGVycywgY29uZmlndXJlCithdHRhY2htZW50cywgYW5kIHNpZ24gb2ZmIHBhdGNoZXMgd2l0aCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworLS0tLS0tLS0tLS0tCitbZm9ybWF0XQorCWhlYWRlcnMgPSAiT3JnYW5pemF0aW9uOiBnaXQtZm9vXG4iCisJc3ViamVjdHByZWZpeCA9IENIQU5HRQorCXN1ZmZpeCA9IC50eHQKKwludW1iZXJlZCA9IGF1dG8KKwl0byA9IDxlbWFpbD4KKwljYyA9IDxlbWFpbD4KKwlhdHRhY2ggWyA9IG1pbWUtYm91bmRhcnktc3RyaW5nIF0KKwlzaWdub2ZmID0gdHJ1ZQorLS0tLS0tLS0tLS0tCisKKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitUaGUgcGF0Y2ggcHJvZHVjZWQgYnkgJ2dpdCBmb3JtYXQtcGF0Y2gnIGlzIGluIFVOSVggbWFpbGJveCBmb3JtYXQsCit3aXRoIGEgZml4ZWQgIm1hZ2ljIiB0aW1lIHN0YW1wIHRvIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgaXMgb3V0cHV0Citmcm9tIGZvcm1hdC1wYXRjaCByYXRoZXIgdGhhbiBhIHJlYWwgbWFpbGJveCwgbGlrZSBzbzoKKworLS0tLS0tLS0tLS0tCitGcm9tIDhmNzJiYWQxYmFmMTlhNTM0NTk2NjEzNDNlMjFkNjQ5MWMzOTA4ZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUb255IEx1Y2sgPHRvbnkubHVja0BpbnRlbC5jb20+CitEYXRlOiBUdWUsIDEzIEp1bCAyMDEwIDExOjQyOjU0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdID0/VVRGLTg/cT9bSUE2NF09MjBQdXQ9MjBpYTY0PTIwY29uZmlnPTIwZmlsZXM9MjBvbj0yMHRoZT0yMD89CisgPT9VVEYtOD9xP1V3ZT0yMEtsZWluZS1LPUMzPUI2bmlnPTIwZGlldD89CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK2FyY2gvYXJtIGNvbmZpZyBmaWxlcyB3ZXJlIHNsaW1tZWQgZG93biB1c2luZyBhIHB5dGhvbiBzY3JpcHQKKyhTZWUgY29tbWl0IGMyMzMwZTI4NmY2OGYxYzQwOGI0YWE2NTE1YmE0OWQ1N2YwNWJlYWUgY29tbWVudCkKKworRG8gdGhlIHNhbWUgZm9yIGlhNjQgc28gd2UgY2FuIGhhdmUgc2xlZWsgJiB0cmltIGxvb2tpbmcKKy4uLgorLS0tLS0tLS0tLS0tCisKK1R5cGljYWxseSBpdCB3aWxsIGJlIHBsYWNlZCBpbiBhIE1VQSdzIGRyYWZ0cyBmb2xkZXIsIGVkaXRlZCB0byBhZGQKK3RpbWVseSBjb21tZW50YXJ5IHRoYXQgc2hvdWxkIG5vdCBnbyBpbiB0aGUgY2hhbmdlbG9nIGFmdGVyIHRoZSB0aHJlZQorZGFzaGVzLCBhbmQgdGhlbiBzZW50IGFzIGEgbWVzc2FnZSB3aG9zZSBib2R5LCBpbiBvdXIgZXhhbXBsZSwgc3RhcnRzCit3aXRoICJhcmNoL2FybSBjb25maWcgZmlsZXMgd2VyZS4uLiIuICBPbiB0aGUgcmVjZWl2aW5nIGVuZCwgcmVhZGVycworY2FuIHNhdmUgaW50ZXJlc3RpbmcgcGF0Y2hlcyBpbiBhIFVOSVggbWFpbGJveCBhbmQgYXBwbHkgdGhlbSB3aXRoCitsaW5rZ2l0OmdpdC1hbVsxXS4KKworV2hlbiBhIHBhdGNoIGlzIHBhcnQgb2YgYW4gb25nb2luZyBkaXNjdXNzaW9uLCB0aGUgcGF0Y2ggZ2VuZXJhdGVkIGJ5CisnZ2l0IGZvcm1hdC1wYXRjaCcgY2FuIGJlIHR3ZWFrZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlICdnaXQgYW0KKy0tc2Npc3NvcnMnIGZlYXR1cmUuICBBZnRlciB5b3VyIHJlc3BvbnNlIHRvIHRoZSBkaXNjdXNzaW9uIGNvbWVzIGEKK2xpbmUgdGhhdCBjb25zaXN0cyBzb2xlbHkgb2YgImAtLSA+OCAtLWAiIChzY2lzc29ycyBhbmQgcGVyZm9yYXRpb24pLAorZm9sbG93ZWQgYnkgdGhlIHBhdGNoIHdpdGggdW5uZWNlc3NhcnkgaGVhZGVyIGZpZWxkcyByZW1vdmVkOgorCistLS0tLS0tLS0tLS0KKy4uLgorPiBTbyB3ZSBzaG91bGQgZG8gc3VjaC1hbmQtc3VjaC4KKworTWFrZXMgc2Vuc2UgdG8gbWUuICBIb3cgYWJvdXQgdGhpcyBwYXRjaD8KKworLS0gPjggLS0KK1N1YmplY3Q6IFtJQTY0XSBQdXQgaWE2NCBjb25maWcgZmlsZXMgb24gdGhlIFV3ZSBLbGVpbmUtS8O2bmlnIGRpZXQKKworYXJjaC9hcm0gY29uZmlnIGZpbGVzIHdlcmUgc2xpbW1lZCBkb3duIHVzaW5nIGEgcHl0aG9uIHNjcmlwdAorLi4uCistLS0tLS0tLS0tLS0KKworV2hlbiBzZW5kaW5nIGEgcGF0Y2ggdGhpcyB3YXksIG1vc3Qgb2Z0ZW4geW91IGFyZSBzZW5kaW5nIHlvdXIgb3duCitwYXRjaCwgc28gaW4gYWRkaXRpb24gdG8gdGhlICJgRnJvbSAkU0hBMSAkbWFnaWNfdGltZXN0YW1wYCIgbWFya2VyIHlvdQorc2hvdWxkIG9taXQgYEZyb206YCBhbmQgYERhdGU6YCBsaW5lcyBmcm9tIHRoZSBwYXRjaCBmaWxlLiAgVGhlIHBhdGNoCit0aXRsZSBpcyBsaWtlbHkgdG8gYmUgZGlmZmVyZW50IGZyb20gdGhlIHN1YmplY3Qgb2YgdGhlIGRpc2N1c3Npb24gdGhlCitwYXRjaCBpcyBpbiByZXNwb25zZSB0bywgc28gaXQgaXMgbGlrZWx5IHRoYXQgeW91IHdvdWxkIHdhbnQgdG8ga2VlcAordGhlIFN1YmplY3Q6IGxpbmUsIGxpa2UgdGhlIGV4YW1wbGUgYWJvdmUuCisKK0NoZWNraW5nIGZvciBwYXRjaCBjb3JydXB0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTWFueSBtYWlsZXJzIGlmIG5vdCBzZXQgdXAgcHJvcGVybHkgd2lsbCBjb3JydXB0IHdoaXRlc3BhY2UuICBIZXJlIGFyZQordHdvIGNvbW1vbiB0eXBlcyBvZiBjb3JydXB0aW9uOgorCisqIEVtcHR5IGNvbnRleHQgbGluZXMgdGhhdCBkbyBub3QgaGF2ZSBfYW55XyB3aGl0ZXNwYWNlLgorCisqIE5vbi1lbXB0eSBjb250ZXh0IGxpbmVzIHRoYXQgaGF2ZSBvbmUgZXh0cmEgd2hpdGVzcGFjZSBhdCB0aGUKKyAgYmVnaW5uaW5nLgorCitPbmUgd2F5IHRvIHRlc3QgaWYgeW91ciBNVUEgaXMgc2V0IHVwIGNvcnJlY3RseSBpczoKKworKiBTZW5kIHRoZSBwYXRjaCB0byB5b3Vyc2VsZiwgZXhhY3RseSB0aGUgd2F5IHlvdSB3b3VsZCwgZXhjZXB0CisgIHdpdGggVG86IGFuZCBDYzogbGluZXMgdGhhdCBkbyBub3QgY29udGFpbiB0aGUgbGlzdCBhbmQKKyAgbWFpbnRhaW5lciBhZGRyZXNzLgorCisqIFNhdmUgdGhhdCBwYXRjaCB0byBhIGZpbGUgaW4gVU5JWCBtYWlsYm94IGZvcm1hdC4gIENhbGwgaXQgYS5wYXRjaCwKKyAgc2F5LgorCisqIEFwcGx5IGl0OgorCisgICAgJCBnaXQgZmV0Y2ggPHByb2plY3Q+IG1hc3Rlcjp0ZXN0LWFwcGx5CisgICAgJCBnaXQgY2hlY2tvdXQgdGVzdC1hcHBseQorICAgICQgZ2l0IHJlc2V0IC0taGFyZAorICAgICQgZ2l0IGFtIGEucGF0Y2gKKworSWYgaXQgZG9lcyBub3QgYXBwbHkgY29ycmVjdGx5LCB0aGVyZSBjYW4gYmUgdmFyaW91cyByZWFzb25zLgorCisqIFRoZSBwYXRjaCBpdHNlbGYgZG9lcyBub3QgYXBwbHkgY2xlYW5seS4gIFRoYXQgaXMgX2JhZF8gYnV0CisgIGRvZXMgbm90IGhhdmUgbXVjaCB0byBkbyB3aXRoIHlvdXIgTVVBLiAgWW91IG1pZ2h0IHdhbnQgdG8gcmViYXNlCisgIHRoZSBwYXRjaCB3aXRoIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXSBiZWZvcmUgcmVnZW5lcmF0aW5nIGl0IGluCisgIHRoaXMgY2FzZS4KKworKiBUaGUgTVVBIGNvcnJ1cHRlZCB5b3VyIHBhdGNoOyAiYW0iIHdvdWxkIGNvbXBsYWluIHRoYXQKKyAgdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5LiAgTG9vayBpbiB0aGUgLmdpdC9yZWJhc2UtYXBwbHkvIHN1YmRpcmVjdG9yeSBhbmQKKyAgc2VlIHdoYXQgJ3BhdGNoJyBmaWxlIGNvbnRhaW5zIGFuZCBjaGVjayBmb3IgdGhlIGNvbW1vbgorICBjb3JydXB0aW9uIHBhdHRlcm5zIG1lbnRpb25lZCBhYm92ZS4KKworKiBXaGlsZSBhdCBpdCwgY2hlY2sgdGhlICdpbmZvJyBhbmQgJ2ZpbmFsLWNvbW1pdCcgZmlsZXMgYXMgd2VsbC4KKyAgSWYgd2hhdCBpcyBpbiAnZmluYWwtY29tbWl0JyBpcyBub3QgZXhhY3RseSB3aGF0IHlvdSB3b3VsZCB3YW50IHRvCisgIHNlZSBpbiB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLCBpdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHRoZQorICByZWNlaXZlciB3b3VsZCBlbmQgdXAgaGFuZCBlZGl0aW5nIHRoZSBsb2cgbWVzc2FnZSB3aGVuIGFwcGx5aW5nCisgIHlvdXIgcGF0Y2guICBUaGluZ3MgbGlrZSAiSGksIHRoaXMgaXMgbXkgZmlyc3QgcGF0Y2guXG4iIGluIHRoZQorICBwYXRjaCBlLW1haWwgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhlIHRocmVlLWRhc2ggbGluZSB0aGF0IHNpZ25hbHMKKyAgdGhlIGVuZCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuCisKK01VQS1TUEVDSUZJQyBISU5UUworLS0tLS0tLS0tLS0tLS0tLS0tCitIZXJlIGFyZSBzb21lIGhpbnRzIG9uIGhvdyB0byBzdWNjZXNzZnVsbHkgc3VibWl0IHBhdGNoZXMgaW5saW5lIHVzaW5nCit2YXJpb3VzIG1haWxlcnMuCisKK0dNYWlsCit+fn5+fgorR01haWwgZG9lcyBub3QgaGF2ZSBhbnkgd2F5IHRvIHR1cm4gb2ZmIGxpbmUgd3JhcHBpbmcgaW4gdGhlIHdlYgoraW50ZXJmYWNlLCBzbyBpdCB3aWxsIG1hbmdsZSBhbnkgZW1haWxzIHRoYXQgeW91IHNlbmQuICBZb3UgY2FuIGhvd2V2ZXIKK3VzZSAiZ2l0IHNlbmQtZW1haWwiIGFuZCBzZW5kIHlvdXIgcGF0Y2hlcyB0aHJvdWdoIHRoZSBHTWFpbCBTTVRQIHNlcnZlciwgb3IKK3VzZSBhbnkgSU1BUCBlbWFpbCBjbGllbnQgdG8gY29ubmVjdCB0byB0aGUgZ29vZ2xlIElNQVAgc2VydmVyIGFuZCBmb3J3YXJkCit0aGUgZW1haWxzIHRocm91Z2ggdGhhdC4KKworRm9yIGhpbnRzIG9uIHVzaW5nICdnaXQgc2VuZC1lbWFpbCcgdG8gc2VuZCB5b3VyIHBhdGNoZXMgdGhyb3VnaCB0aGUKK0dNYWlsIFNNVFAgc2VydmVyLCBzZWUgdGhlIEVYQU1QTEUgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdLgorCitGb3IgaGludHMgb24gc3VibWlzc2lvbiB1c2luZyB0aGUgSU1BUCBpbnRlcmZhY2UsIHNlZSB0aGUgRVhBTVBMRQorc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1pbWFwLXNlbmRbMV0uCisKK1RodW5kZXJiaXJkCit+fn5+fn5+fn5+fgorQnkgZGVmYXVsdCwgVGh1bmRlcmJpcmQgd2lsbCBib3RoIHdyYXAgZW1haWxzIGFzIHdlbGwgYXMgZmxhZwordGhlbSBhcyBiZWluZyAnZm9ybWF0PWZsb3dlZCcsIGJvdGggb2Ygd2hpY2ggd2lsbCBtYWtlIHRoZQorcmVzdWx0aW5nIGVtYWlsIHVudXNhYmxlIGJ5IGdpdC4KKworVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCBhcHByb2FjaGVzOiB1c2UgYW4gYWRkLW9uIHRvIHR1cm4gb2ZmIGxpbmUgd3JhcHMsCitjb25maWd1cmUgVGh1bmRlcmJpcmQgdG8gbm90IG1hbmdsZSBwYXRjaGVzLCBvciB1c2UKK2FuIGV4dGVybmFsIGVkaXRvciB0byBrZWVwIFRodW5kZXJiaXJkIGZyb20gbWFuZ2xpbmcgdGhlIHBhdGNoZXMuCisKK0FwcHJvYWNoICMxIChhZGQtb24pCiteXl5eXl5eXl5eXl5eXl5eXl5eXgorCitJbnN0YWxsIHRoZSBUb2dnbGUgV29yZCBXcmFwIGFkZC1vbiB0aGF0IGlzIGF2YWlsYWJsZSBmcm9tCitodHRwczovL2FkZG9ucy5tb3ppbGxhLm9yZy90aHVuZGVyYmlyZC9hZGRvbi90b2dnbGUtd29yZC13cmFwLworSXQgYWRkcyBhIG1lbnUgZW50cnkgIkVuYWJsZSBXb3JkIFdyYXAiIGluIHRoZSBjb21wb3NlcidzICJPcHRpb25zIiBtZW51Cit0aGF0IHlvdSBjYW4gdGljayBvZmYuIE5vdyB5b3UgY2FuIGNvbXBvc2UgdGhlIG1lc3NhZ2UgYXMgeW91IG90aGVyd2lzZSBkbworKGN1dCArIHBhc3RlLCAnZ2l0IGZvcm1hdC1wYXRjaCcgfCAnZ2l0IGltYXAtc2VuZCcsIGV0YyksIGJ1dCB5b3UgaGF2ZSB0bworaW5zZXJ0IGxpbmUgYnJlYWtzIG1hbnVhbGx5IGluIGFueSB0ZXh0IHRoYXQgeW91IHR5cGUuCisKK0FwcHJvYWNoICMyIChjb25maWd1cmF0aW9uKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitUaHJlZSBzdGVwczoKKworMS4gQ29uZmlndXJlIHlvdXIgbWFpbCBzZXJ2ZXIgY29tcG9zaXRpb24gYXMgcGxhaW4gdGV4dDoKKyAgIEVkaXQuLi5BY2NvdW50IFNldHRpbmdzLi4uQ29tcG9zaXRpb24gJiBBZGRyZXNzaW5nLAorICAgdW5jaGVjayAiQ29tcG9zZSBNZXNzYWdlcyBpbiBIVE1MIi4KKworMi4gQ29uZmlndXJlIHlvdXIgZ2VuZXJhbCBjb21wb3NpdGlvbiB3aW5kb3cgdG8gbm90IHdyYXAuCisrCitJbiBUaHVuZGVyYmlyZCAyOgorRWRpdC4uUHJlZmVyZW5jZXMuLkNvbXBvc2l0aW9uLCB3cmFwIHBsYWluIHRleHQgbWVzc2FnZXMgYXQgMAorKworSW4gVGh1bmRlcmJpcmQgMzoKK0VkaXQuLlByZWZlcmVuY2VzLi5BZHZhbmNlZC4uQ29uZmlnIEVkaXRvci4gIFNlYXJjaCBmb3IKKyJtYWlsLndyYXBfbG9uZ19saW5lcyIuCitUb2dnbGUgaXQgdG8gbWFrZSBzdXJlIGl0IGlzIHNldCB0byBgZmFsc2VgLgorCiszLiBEaXNhYmxlIHRoZSB1c2Ugb2YgZm9ybWF0PWZsb3dlZDoKK0VkaXQuLlByZWZlcmVuY2VzLi5BZHZhbmNlZC4uQ29uZmlnIEVkaXRvci4gIFNlYXJjaCBmb3IKKyJtYWlsbmV3cy5zZW5kX3BsYWludGV4dF9mbG93ZWQiLgorVG9nZ2xlIGl0IHRvIG1ha2Ugc3VyZSBpdCBpcyBzZXQgdG8gYGZhbHNlYC4KKworQWZ0ZXIgdGhhdCBpcyBkb25lLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29tcG9zZSBlbWFpbCBhcyB5b3UKK290aGVyd2lzZSB3b3VsZCAoY3V0ICsgcGFzdGUsICdnaXQgZm9ybWF0LXBhdGNoJyB8ICdnaXQgaW1hcC1zZW5kJywgZXRjKSwKK2FuZCB0aGUgcGF0Y2hlcyB3aWxsIG5vdCBiZSBtYW5nbGVkLgorCitBcHByb2FjaCAjMyAoZXh0ZXJuYWwgZWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBUaHVuZGVyYmlyZCBleHRlbnNpb25zIGFyZSBuZWVkZWQ6CitBYm91dENvbmZpZyBmcm9tIGh0dHA6Ly9hYm91dGNvbmZpZy5tb3pkZXYub3JnLyBhbmQKK0V4dGVybmFsIEVkaXRvciBmcm9tIGh0dHA6Ly9nbG9icy5vcmcvYXJ0aWNsZXMucGhwP2xuZz1lbiZwZz04CisKKzEuIFByZXBhcmUgdGhlIHBhdGNoIGFzIGEgdGV4dCBmaWxlIHVzaW5nIHlvdXIgbWV0aG9kIG9mIGNob2ljZS4KKworMi4gQmVmb3JlIG9wZW5pbmcgYSBjb21wb3NlIHdpbmRvdywgdXNlIEVkaXQtPkFjY291bnQgU2V0dGluZ3MgdG8KKyAgIHVuY2hlY2sgdGhlICJDb21wb3NlIG1lc3NhZ2VzIGluIEhUTUwgZm9ybWF0IiBzZXR0aW5nIGluIHRoZQorICAgIkNvbXBvc2l0aW9uICYgQWRkcmVzc2luZyIgcGFuZWwgb2YgdGhlIGFjY291bnQgdG8gYmUgdXNlZCB0bworICAgc2VuZCB0aGUgcGF0Y2guCisKKzMuIEluIHRoZSBtYWluIFRodW5kZXJiaXJkIHdpbmRvdywgJ2JlZm9yZScgeW91IG9wZW4gdGhlIGNvbXBvc2UKKyAgIHdpbmRvdyBmb3IgdGhlIHBhdGNoLCB1c2UgVG9vbHMtPmFib3V0OmNvbmZpZyB0byBzZXQgdGhlCisgICBmb2xsb3dpbmcgdG8gdGhlIGluZGljYXRlZCB2YWx1ZXM6CisrCistLS0tLS0tLS0tCisJbWFpbG5ld3Muc2VuZF9wbGFpbnRleHRfZmxvd2VkICA9PiBmYWxzZQorCW1haWxuZXdzLndyYXBsZW5ndGggICAgICAgICAgICAgPT4gMAorLS0tLS0tLS0tLQorCis0LiBPcGVuIGEgY29tcG9zZSB3aW5kb3cgYW5kIGNsaWNrIHRoZSBleHRlcm5hbCBlZGl0b3IgaWNvbi4KKworNS4gSW4gdGhlIGV4dGVybmFsIGVkaXRvciB3aW5kb3csIHJlYWQgaW4gdGhlIHBhdGNoIGZpbGUgYW5kIGV4aXQKKyAgIHRoZSBlZGl0b3Igbm9ybWFsbHkuCisKK1NpZGUgbm90ZTogaXQgbWF5IGJlIHBvc3NpYmxlIHRvIGRvIHN0ZXAgMiB3aXRoCithYm91dDpjb25maWcgYW5kIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYnV0IG5vIG9uZSdzIHRyaWVkIHlldC4KKworLS0tLS0tLS0tLQorCW1haWwuaHRtbF9jb21wb3NlICAgICAgICAgICAgICAgICAgICAgICA9PiBmYWxzZQorCW1haWwuaWRlbnRpdHkuZGVmYXVsdC5jb21wb3NlX2h0bWwgICAgICA9PiBmYWxzZQorCW1haWwuaWRlbnRpdHkuaWQ/LmNvbXBvc2VfaHRtbCAgICAgICAgICA9PiBmYWxzZQorLS0tLS0tLS0tLQorCitUaGVyZSBpcyBhIHNjcmlwdCBpbiBjb250cmliL3RodW5kZXJiaXJkLXBhdGNoLWlubGluZSB3aGljaCBjYW4gaGVscAoreW91IGluY2x1ZGUgcGF0Y2hlcyB3aXRoIFRodW5kZXJiaXJkIGluIGFuIGVhc3kgd2F5LiBUbyB1c2UgaXQsIGRvIHRoZQorc3RlcHMgYWJvdmUgYW5kIHRoZW4gdXNlIHRoZSBzY3JpcHQgYXMgdGhlIGV4dGVybmFsIGVkaXRvci4KKworS01haWwKK35+fn5+CitUaGlzIHNob3VsZCBoZWxwIHlvdSB0byBzdWJtaXQgcGF0Y2hlcyBpbmxpbmUgdXNpbmcgS01haWwuCisKKzEuIFByZXBhcmUgdGhlIHBhdGNoIGFzIGEgdGV4dCBmaWxlLgorCisyLiBDbGljayBvbiBOZXcgTWFpbC4KKworMy4gR28gdW5kZXIgIk9wdGlvbnMiIGluIHRoZSBDb21wb3NlciB3aW5kb3cgYW5kIGJlIHN1cmUgdGhhdAorICAgIldvcmQgd3JhcCIgaXMgbm90IHNldC4KKworNC4gVXNlIE1lc3NhZ2UgLT4gSW5zZXJ0IGZpbGUuLi4gYW5kIGluc2VydCB0aGUgcGF0Y2guCisKKzUuIEJhY2sgaW4gdGhlIGNvbXBvc2Ugd2luZG93OiBhZGQgd2hhdGV2ZXIgb3RoZXIgdGV4dCB5b3Ugd2lzaCB0byB0aGUKKyAgIG1lc3NhZ2UsIGNvbXBsZXRlIHRoZSBhZGRyZXNzaW5nIGFuZCBzdWJqZWN0IGZpZWxkcywgYW5kIHByZXNzIHNlbmQuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKyogRXh0cmFjdCBjb21taXRzIGJldHdlZW4gcmV2aXNpb25zIFIxIGFuZCBSMiwgYW5kIGFwcGx5IHRoZW0gb24gdG9wIG9mCit0aGUgY3VycmVudCBicmFuY2ggdXNpbmcgJ2dpdCBhbScgdG8gY2hlcnJ5LXBpY2sgdGhlbToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IFIxLi5SMiB8IGdpdCBhbSAtMyAtaworLS0tLS0tLS0tLS0tCisKKyogRXh0cmFjdCBhbGwgY29tbWl0cyB3aGljaCBhcmUgaW4gdGhlIGN1cnJlbnQgYnJhbmNoIGJ1dCBub3QgaW4gdGhlCitvcmlnaW4gYnJhbmNoOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggb3JpZ2luCistLS0tLS0tLS0tLS0KKysKK0ZvciBlYWNoIGNvbW1pdCBhIHNlcGFyYXRlIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyogRXh0cmFjdCBhbGwgY29tbWl0cyB0aGF0IGxlYWQgdG8gJ29yaWdpbicgc2luY2UgdGhlIGluY2VwdGlvbiBvZiB0aGUKK3Byb2plY3Q6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLXJvb3Qgb3JpZ2luCistLS0tLS0tLS0tLS0KKworKiBUaGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgb25lOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggLU0gLUIgb3JpZ2luCistLS0tLS0tLS0tLS0KKysKK0FkZGl0aW9uYWxseSwgaXQgZGV0ZWN0cyBhbmQgaGFuZGxlcyByZW5hbWVzIGFuZCBjb21wbGV0ZSByZXdyaXRlcworaW50ZWxsaWdlbnRseSB0byBwcm9kdWNlIGEgcmVuYW1pbmcgcGF0Y2guICBBIHJlbmFtaW5nIHBhdGNoIHJlZHVjZXMKK3RoZSBhbW91bnQgb2YgdGV4dCBvdXRwdXQsIGFuZCBnZW5lcmFsbHkgbWFrZXMgaXQgZWFzaWVyIHRvIHJldmlldy4KK05vdGUgdGhhdCBub24tZ2l0ICJwYXRjaCIgcHJvZ3JhbXMgd29uJ3QgdW5kZXJzdGFuZCByZW5hbWluZyBwYXRjaGVzLCBzbwordXNlIGl0IG9ubHkgd2hlbiB5b3Uga25vdyB0aGUgcmVjaXBpZW50IHVzZXMgZ2l0IHRvIGFwcGx5IHlvdXIgcGF0Y2guCisKKyogRXh0cmFjdCB0aHJlZSB0b3Btb3N0IGNvbW1pdHMgZnJvbSB0aGUgY3VycmVudCBicmFuY2ggYW5kIGZvcm1hdCB0aGVtCithcyBlLW1haWxhYmxlIHBhdGNoZXM6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCAtMworLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtYW1bMV0sIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZnNjay1vYmplY3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWM0YmRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZnNjay1vYmplY3RzLnR4dApAQCAtMCwwICsxLDIyIEBACitnaXQtZnNjay1vYmplY3RzKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mc2NrLW9iamVjdHMgLSBWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZnNjay1vYmplY3RzJyAuLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBzeW5vbnltIGZvciBsaW5rZ2l0OmdpdC1mc2NrWzFdLiAgUGxlYXNlIHJlZmVyIHRvIHRoZQorZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGNvbW1hbmQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZnNjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTM0OGZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZnNjay50eHQKQEAgLTAsMCArMSwxNDkgQEAKK2dpdC1mc2NrKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZnNjayAtIFZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBmc2NrJyBbLS10YWdzXSBbLS1yb290XSBbLS11bnJlYWNoYWJsZV0gWy0tY2FjaGVdIFstLW5vLXJlZmxvZ3NdCisJIFstLVtuby1dZnVsbF0gWy0tc3RyaWN0XSBbLS12ZXJib3NlXSBbLS1sb3N0LWZvdW5kXQorCSBbLS1bbm8tXWRhbmdsaW5nXSBbLS1bbm8tXXByb2dyZXNzXSBbPG9iamVjdD4qXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1ZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZS4KKworT1BUSU9OUworLS0tLS0tLQorPG9iamVjdD46OgorCUFuIG9iamVjdCB0byB0cmVhdCBhcyB0aGUgaGVhZCBvZiBhbiB1bnJlYWNoYWJpbGl0eSB0cmFjZS4KKysKK0lmIG5vIG9iamVjdHMgYXJlIGdpdmVuLCAnZ2l0IGZzY2snIGRlZmF1bHRzIHRvIHVzaW5nIHRoZQoraW5kZXggZmlsZSwgYWxsIFNIQTEgcmVmZXJlbmNlcyBpbiBgcmVmc2AgbmFtZXNwYWNlLCBhbmQgYWxsIHJlZmxvZ3MKKyh1bmxlc3MgLS1uby1yZWZsb2dzIGlzIGdpdmVuKSBhcyBoZWFkcy4KKworLS11bnJlYWNoYWJsZTo6CisJUHJpbnQgb3V0IG9iamVjdHMgdGhhdCBleGlzdCBidXQgdGhhdCBhcmVuJ3QgcmVhY2hhYmxlIGZyb20gYW55CisJb2YgdGhlIHJlZmVyZW5jZSBub2Rlcy4KKworLS1kYW5nbGluZzo6CistLW5vLWRhbmdsaW5nOjoKKwlQcmludCBvYmplY3RzIHRoYXQgZXhpc3QgYnV0IHRoYXQgYXJlIG5ldmVyICdkaXJlY3RseScgdXNlZCAoZGVmYXVsdCkuCisJYC0tbm8tZGFuZ2xpbmdgIGNhbiBiZSB1c2VkIHRvIG9taXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvdXRwdXQuCisKKy0tcm9vdDo6CisJUmVwb3J0IHJvb3Qgbm9kZXMuCisKKy0tdGFnczo6CisJUmVwb3J0IHRhZ3MuCisKKy0tY2FjaGU6OgorCUNvbnNpZGVyIGFueSBvYmplY3QgcmVjb3JkZWQgaW4gdGhlIGluZGV4IGFsc28gYXMgYSBoZWFkIG5vZGUgZm9yCisJYW4gdW5yZWFjaGFiaWxpdHkgdHJhY2UuCisKKy0tbm8tcmVmbG9nczo6CisJRG8gbm90IGNvbnNpZGVyIGNvbW1pdHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBvbmx5IGJ5IGFuCisJZW50cnkgaW4gYSByZWZsb2cgdG8gYmUgcmVhY2hhYmxlLiAgVGhpcyBvcHRpb24gaXMgbWVhbnQKKwlvbmx5IHRvIHNlYXJjaCBmb3IgY29tbWl0cyB0aGF0IHVzZWQgdG8gYmUgaW4gYSByZWYsIGJ1dAorCW5vdyBhcmVuJ3QsIGJ1dCBhcmUgc3RpbGwgaW4gdGhhdCBjb3JyZXNwb25kaW5nIHJlZmxvZy4KKworLS1mdWxsOjoKKwlDaGVjayBub3QganVzdCBvYmplY3RzIGluIEdJVF9PQkpFQ1RfRElSRUNUT1JZCisJKCRHSVRfRElSL29iamVjdHMpLCBidXQgYWxzbyB0aGUgb25lcyBmb3VuZCBpbiBhbHRlcm5hdGUKKwlvYmplY3QgcG9vbHMgbGlzdGVkIGluIEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTCisJb3IgJEdJVF9ESVIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMsCisJYW5kIGluIHBhY2tlZCBnaXQgYXJjaGl2ZXMgZm91bmQgaW4gJEdJVF9ESVIvb2JqZWN0cy9wYWNrCisJYW5kIGNvcnJlc3BvbmRpbmcgcGFjayBzdWJkaXJlY3RvcmllcyBpbiBhbHRlcm5hdGUKKwlvYmplY3QgcG9vbHMuICBUaGlzIGlzIG5vdyBkZWZhdWx0OyB5b3UgY2FuIHR1cm4gaXQgb2ZmCisJd2l0aCAtLW5vLWZ1bGwuCisKKy0tc3RyaWN0OjoKKwlFbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmcsIG5hbWVseSB0byBjYXRjaCBhIGZpbGUgbW9kZQorCXJlY29yZGVkIHdpdGggZyt3IGJpdCBzZXQsIHdoaWNoIHdhcyBjcmVhdGVkIGJ5IG9sZGVyCisJdmVyc2lvbnMgb2YgZ2l0LiAgRXhpc3RpbmcgcmVwb3NpdG9yaWVzLCBpbmNsdWRpbmcgdGhlCisJTGludXgga2VybmVsLCBnaXQgaXRzZWxmLCBhbmQgc3BhcnNlIHJlcG9zaXRvcnkgaGF2ZSBvbGQKKwlvYmplY3RzIHRoYXQgdHJpZ2dlcnMgdGhpcyBjaGVjaywgYnV0IGl0IGlzIHJlY29tbWVuZGVkCisJdG8gY2hlY2sgbmV3IHByb2plY3RzIHdpdGggdGhpcyBmbGFnLgorCistLXZlcmJvc2U6OgorCUJlIGNoYXR0eS4KKworLS1sb3N0LWZvdW5kOjoKKwlXcml0ZSBkYW5nbGluZyBvYmplY3RzIGludG8gLmdpdC9sb3N0LWZvdW5kL2NvbW1pdC8gb3IKKwkuZ2l0L2xvc3QtZm91bmQvb3RoZXIvLCBkZXBlbmRpbmcgb24gdHlwZS4gIElmIHRoZSBvYmplY3QgaXMKKwlhIGJsb2IsIHRoZSBjb250ZW50cyBhcmUgd3JpdHRlbiBpbnRvIHRoZSBmaWxlLCByYXRoZXIgdGhhbgorCWl0cyBvYmplY3QgbmFtZS4KKworLS1wcm9ncmVzczo6CistLW5vLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBieQorCWRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MKKwktLW5vLXByb2dyZXNzIG9yIC0tdmVyYm9zZSBpcyBzcGVjaWZpZWQuIC0tcHJvZ3Jlc3MgZm9yY2VzCisJcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYgdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QKKwlkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK2dpdC1mc2NrIHRlc3RzIFNIQTEgYW5kIGdlbmVyYWwgb2JqZWN0IHNhbml0eSwgYW5kIGl0IGRvZXMgZnVsbCB0cmFja2luZworb2YgdGhlIHJlc3VsdGluZyByZWFjaGFiaWxpdHkgYW5kIGV2ZXJ5dGhpbmcgZWxzZS4gSXQgcHJpbnRzIG91dCBhbnkKK2NvcnJ1cHRpb24gaXQgZmluZHMgKG1pc3Npbmcgb3IgYmFkIG9iamVjdHMpLCBhbmQgaWYgeW91IHVzZSB0aGUKKyctLXVucmVhY2hhYmxlJyBmbGFnIGl0IHdpbGwgYWxzbyBwcmludCBvdXQgb2JqZWN0cyB0aGF0IGV4aXN0IGJ1dCB0aGF0CithcmVuJ3QgcmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZSBzcGVjaWZpZWQgaGVhZCBub2RlcyAob3IgdGhlIGRlZmF1bHQKK3NldCwgYXMgbWVudGlvbmVkIGFib3ZlKS4KKworQW55IGNvcnJ1cHQgb2JqZWN0cyB5b3Ugd2lsbCBoYXZlIHRvIGZpbmQgaW4gYmFja3VwcyBvciBvdGhlciBhcmNoaXZlcworKGkuZS4sIHlvdSBjYW4ganVzdCByZW1vdmUgdGhlbSBhbmQgZG8gYW4gJ3JzeW5jJyB3aXRoIHNvbWUgb3RoZXIgc2l0ZSBpbgordGhlIGhvcGVzIHRoYXQgc29tZWJvZHkgZWxzZSBoYXMgdGhlIG9iamVjdCB5b3UgaGF2ZSBjb3JydXB0ZWQpLgorCitFeHRyYWN0ZWQgRGlhZ25vc3RpY3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitleHBlY3QgZGFuZ2xpbmcgY29tbWl0cyAtIHBvdGVudGlhbCBoZWFkcyAtIGR1ZSB0byBsYWNrIG9mIGhlYWQgaW5mb3JtYXRpb246OgorCVlvdSBoYXZlbid0IHNwZWNpZmllZCBhbnkgbm9kZXMgYXMgaGVhZHMgc28gaXQgd29uJ3QgYmUKKwlwb3NzaWJsZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdW4tcGFyZW50ZWQgY29tbWl0cyBhbmQKKwlyb290IG5vZGVzLgorCittaXNzaW5nIHNoYTEgZGlyZWN0b3J5ICc8ZGlyPic6OgorCVRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgc2hhMSBvYmplY3RzIGlzIG1pc3NpbmcuCisKK3VucmVhY2hhYmxlIDx0eXBlPiA8b2JqZWN0Pjo6CisJVGhlIDx0eXBlPiBvYmplY3QgPG9iamVjdD4sIGlzbid0IGFjdHVhbGx5IHJlZmVycmVkIHRvIGRpcmVjdGx5CisJb3IgaW5kaXJlY3RseSBpbiBhbnkgb2YgdGhlIHRyZWVzIG9yIGNvbW1pdHMgc2Vlbi4gVGhpcyBjYW4KKwltZWFuIHRoYXQgdGhlcmUncyBhbm90aGVyIHJvb3Qgbm9kZSB0aGF0IHlvdSdyZSBub3Qgc3BlY2lmeWluZworCW9yIHRoYXQgdGhlIHRyZWUgaXMgY29ycnVwdC4gSWYgeW91IGhhdmVuJ3QgbWlzc2VkIGEgcm9vdCBub2RlCisJdGhlbiB5b3UgbWlnaHQgYXMgd2VsbCBkZWxldGUgdW5yZWFjaGFibGUgbm9kZXMgc2luY2UgdGhleQorCWNhbid0IGJlIHVzZWQuCisKK21pc3NpbmcgPHR5cGU+IDxvYmplY3Q+OjoKKwlUaGUgPHR5cGU+IG9iamVjdCA8b2JqZWN0PiwgaXMgcmVmZXJyZWQgdG8gYnV0IGlzbid0IHByZXNlbnQgaW4KKwl0aGUgZGF0YWJhc2UuCisKK2RhbmdsaW5nIDx0eXBlPiA8b2JqZWN0Pjo6CisJVGhlIDx0eXBlPiBvYmplY3QgPG9iamVjdD4sIGlzIHByZXNlbnQgaW4gdGhlIGRhdGFiYXNlIGJ1dCBuZXZlcgorCSdkaXJlY3RseScgdXNlZC4gQSBkYW5nbGluZyBjb21taXQgY291bGQgYmUgYSByb290IG5vZGUuCisKK3NoYTEgbWlzbWF0Y2ggPG9iamVjdD46OgorCVRoZSBkYXRhYmFzZSBoYXMgYW4gb2JqZWN0IHdobydzIHNoYTEgZG9lc24ndCBtYXRjaCB0aGUKKwlkYXRhYmFzZSB2YWx1ZS4KKwlUaGlzIGluZGljYXRlcyBhIHNlcmlvdXMgZGF0YSBpbnRlZ3JpdHkgcHJvYmxlbS4KKworRW52aXJvbm1lbnQgVmFyaWFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR0lUX09CSkVDVF9ESVJFQ1RPUlk6OgorCXVzZWQgdG8gc3BlY2lmeSB0aGUgb2JqZWN0IGRhdGFiYXNlIHJvb3QgKHVzdWFsbHkgJEdJVF9ESVIvb2JqZWN0cykKKworR0lUX0lOREVYX0ZJTEU6OgorCXVzZWQgdG8gc3BlY2lmeSB0aGUgaW5kZXggZmlsZSBvZiB0aGUgaW5kZXgKKworR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVM6OgorCXVzZWQgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIG9iamVjdCBkYXRhYmFzZSByb290cyAodXN1YWxseSB1bnNldCkKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3MGIwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dApAQCAtMCwwICsxLDE1NyBAQAorZ2l0LWdjKDEpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWdjIC0gQ2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZ2MnIFstLWFnZ3Jlc3NpdmVdIFstLWF1dG9dIFstLXF1aWV0XSBbLS1wcnVuZT08ZGF0ZT4gfCAtLW5vLXBydW5lXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1J1bnMgYSBudW1iZXIgb2YgaG91c2VrZWVwaW5nIHRhc2tzIHdpdGhpbiB0aGUgY3VycmVudCByZXBvc2l0b3J5LAorc3VjaCBhcyBjb21wcmVzc2luZyBmaWxlIHJldmlzaW9ucyAodG8gcmVkdWNlIGRpc2sgc3BhY2UgYW5kIGluY3JlYXNlCitwZXJmb3JtYW5jZSkgYW5kIHJlbW92aW5nIHVucmVhY2hhYmxlIG9iamVjdHMgd2hpY2ggbWF5IGhhdmUgYmVlbgorY3JlYXRlZCBmcm9tIHByaW9yIGludm9jYXRpb25zIG9mICdnaXQgYWRkJy4KKworVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gcnVuIHRoaXMgdGFzayBvbiBhIHJlZ3VsYXIgYmFzaXMgd2l0aGluCitlYWNoIHJlcG9zaXRvcnkgdG8gbWFpbnRhaW4gZ29vZCBkaXNrIHNwYWNlIHV0aWxpemF0aW9uIGFuZCBnb29kCitvcGVyYXRpbmcgcGVyZm9ybWFuY2UuCisKK1NvbWUgZ2l0IGNvbW1hbmRzIG1heSBhdXRvbWF0aWNhbGx5IHJ1biAnZ2l0IGdjJzsgc2VlIHRoZSBgLS1hdXRvYCBmbGFnCitiZWxvdyBmb3IgZGV0YWlscy4gSWYgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcgYW5kIGFsbCB5b3Ugd2FudCBpcyB0bworZGlzYWJsZSB0aGlzIGJlaGF2aW9yIHBlcm1hbmVudGx5IHdpdGhvdXQgZnVydGhlciBjb25zaWRlcmF0aW9ucywganVzdCBkbzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIGdjLmF1dG8gMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPUFRJT05TCistLS0tLS0tCisKKy0tYWdncmVzc2l2ZTo6CisJVXN1YWxseSAnZ2l0IGdjJyBydW5zIHZlcnkgcXVpY2tseSB3aGlsZSBwcm92aWRpbmcgZ29vZCBkaXNrCisJc3BhY2UgdXRpbGl6YXRpb24gYW5kIHBlcmZvcm1hbmNlLiAgVGhpcyBvcHRpb24gd2lsbCBjYXVzZQorCSdnaXQgZ2MnIHRvIG1vcmUgYWdncmVzc2l2ZWx5IG9wdGltaXplIHRoZSByZXBvc2l0b3J5IGF0IHRoZSBleHBlbnNlCisJb2YgdGFraW5nIG11Y2ggbW9yZSB0aW1lLiAgVGhlIGVmZmVjdHMgb2YgdGhpcyBvcHRpbWl6YXRpb24gYXJlCisJcGVyc2lzdGVudCwgc28gdGhpcyBvcHRpb24gb25seSBuZWVkcyB0byBiZSB1c2VkIG9jY2FzaW9uYWxseTsgZXZlcnkKKwlmZXcgaHVuZHJlZCBjaGFuZ2VzZXRzIG9yIHNvLgorCistLWF1dG86OgorCVdpdGggdGhpcyBvcHRpb24sICdnaXQgZ2MnIGNoZWNrcyB3aGV0aGVyIGFueSBob3VzZWtlZXBpbmcgaXMKKwlyZXF1aXJlZDsgaWYgbm90LCBpdCBleGl0cyB3aXRob3V0IHBlcmZvcm1pbmcgYW55IHdvcmsuCisJU29tZSBnaXQgY29tbWFuZHMgcnVuIGBnaXQgZ2MgLS1hdXRvYCBhZnRlciBwZXJmb3JtaW5nCisJb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGNyZWF0ZSBtYW55IGxvb3NlIG9iamVjdHMuCisrCitIb3VzZWtlZXBpbmcgaXMgcmVxdWlyZWQgaWYgdGhlcmUgYXJlIHRvbyBtYW55IGxvb3NlIG9iamVjdHMgb3IKK3RvbyBtYW55IHBhY2tzIGluIHRoZSByZXBvc2l0b3J5LiBJZiB0aGUgbnVtYmVyIG9mIGxvb3NlIG9iamVjdHMKK2V4Y2VlZHMgdGhlIHZhbHVlIG9mIHRoZSBgZ2MuYXV0b2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgdGhlbgorYWxsIGxvb3NlIG9iamVjdHMgYXJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgcGFjayB1c2luZworYGdpdCByZXBhY2sgLWQgLWxgLiAgU2V0dGluZyB0aGUgdmFsdWUgb2YgYGdjLmF1dG9gIHRvIDAKK2Rpc2FibGVzIGF1dG9tYXRpYyBwYWNraW5nIG9mIGxvb3NlIG9iamVjdHMuCisrCitJZiB0aGUgbnVtYmVyIG9mIHBhY2tzIGV4Y2VlZHMgdGhlIHZhbHVlIG9mIGBnYy5hdXRvcGFja2xpbWl0YCwKK3RoZW4gZXhpc3RpbmcgcGFja3MgKGV4Y2VwdCB0aG9zZSBtYXJrZWQgd2l0aCBhIGAua2VlcGAgZmlsZSkKK2FyZSBjb25zb2xpZGF0ZWQgaW50byBhIHNpbmdsZSBwYWNrIGJ5IHVzaW5nIHRoZSBgLUFgIG9wdGlvbiBvZgorJ2dpdCByZXBhY2snLiBTZXR0aW5nIGBnYy5hdXRvcGFja2xpbWl0YCB0byAwIGRpc2FibGVzCithdXRvbWF0aWMgY29uc29saWRhdGlvbiBvZiBwYWNrcy4KKworLS1wcnVuZT08ZGF0ZT46OgorCVBydW5lIGxvb3NlIG9iamVjdHMgb2xkZXIgdGhhbiBkYXRlIChkZWZhdWx0IGlzIDIgd2Vla3MgYWdvLAorCW92ZXJyaWRhYmxlIGJ5IHRoZSBjb25maWcgdmFyaWFibGUgYGdjLnBydW5lRXhwaXJlYCkuICBUaGlzCisJb3B0aW9uIGlzIG9uIGJ5IGRlZmF1bHQuCisKKy0tbm8tcHJ1bmU6OgorCURvIG5vdCBwcnVuZSBhbnkgbG9vc2Ugb2JqZWN0cy4KKworLS1xdWlldDo6CisJU3VwcHJlc3MgYWxsIHByb2dyZXNzIHJlcG9ydHMuCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ2djLnJlZmxvZ0V4cGlyZScgY2FuIGJlCitzZXQgdG8gaW5kaWNhdGUgaG93IGxvbmcgaGlzdG9yaWNhbCBlbnRyaWVzIHdpdGhpbiBlYWNoIGJyYW5jaCdzCityZWZsb2cgc2hvdWxkIHJlbWFpbiBhdmFpbGFibGUgaW4gdGhpcyByZXBvc2l0b3J5LiAgVGhlIHNldHRpbmcgaXMKK2V4cHJlc3NlZCBhcyBhIGxlbmd0aCBvZiB0aW1lLCBmb3IgZXhhbXBsZSAnOTAgZGF5cycgb3IgJzMgbW9udGhzJy4KK0l0IGRlZmF1bHRzIHRvICc5MCBkYXlzJy4KKworVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ2djLnJlZmxvZ0V4cGlyZVVucmVhY2hhYmxlJworY2FuIGJlIHNldCB0byBpbmRpY2F0ZSBob3cgbG9uZyBoaXN0b3JpY2FsIHJlZmxvZyBlbnRyaWVzIHdoaWNoCithcmUgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIHNob3VsZCByZW1haW4gYXZhaWxhYmxlIGluCit0aGlzIHJlcG9zaXRvcnkuICBUaGVzZSB0eXBlcyBvZiBlbnRyaWVzIGFyZSBnZW5lcmFsbHkgY3JlYXRlZCBhcworYSByZXN1bHQgb2YgdXNpbmcgYGdpdCBjb21taXQgLS1hbWVuZGAgb3IgYGdpdCByZWJhc2VgIGFuZCBhcmUgdGhlCitjb21taXRzIHByaW9yIHRvIHRoZSBhbWVuZCBvciByZWJhc2Ugb2NjdXJyaW5nLiAgU2luY2UgdGhlc2UgY2hhbmdlcworYXJlIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IHByb2plY3QgbW9zdCB1c2VycyB3aWxsIHdhbnQgdG8gZXhwaXJlCit0aGVtIHNvb25lci4gIFRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvICczMCBkYXlzJy4KKworVGhlIGFib3ZlIHR3byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBjYW4gYmUgZ2l2ZW4gdG8gYSBwYXR0ZXJuLiAgRm9yCitleGFtcGxlLCB0aGlzIHNldHMgbm9uLWRlZmF1bHQgZXhwaXJ5IHZhbHVlcyBvbmx5IHRvIHJlbW90ZS10cmFja2luZworYnJhbmNoZXM6CisKKy0tLS0tLS0tLS0tLQorW2djICJyZWZzL3JlbW90ZXMvKiJdCisJcmVmbG9nRXhwaXJlID0gbmV2ZXIKKwlyZWZsb2dleHBpcmVVbnJlYWNoYWJsZSA9IDMgZGF5cworLS0tLS0tLS0tLS0tCisKK1RoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdnYy5yZXJlcmVyZXNvbHZlZCcgaW5kaWNhdGVzCitob3cgbG9uZyByZWNvcmRzIG9mIGNvbmZsaWN0ZWQgbWVyZ2UgeW91IHJlc29sdmVkIGVhcmxpZXIgYXJlCitrZXB0LiAgVGhpcyBkZWZhdWx0cyB0byA2MCBkYXlzLgorCitUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnZ2MucmVyZXJldW5yZXNvbHZlZCcgaW5kaWNhdGVzCitob3cgbG9uZyByZWNvcmRzIG9mIGNvbmZsaWN0ZWQgbWVyZ2UgeW91IGhhdmUgbm90IHJlc29sdmVkIGFyZQora2VwdC4gIFRoaXMgZGVmYXVsdHMgdG8gMTUgZGF5cy4KKworVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ2djLnBhY2tyZWZzJyBkZXRlcm1pbmVzIGlmCisnZ2l0IGdjJyBydW5zICdnaXQgcGFjay1yZWZzJy4gVGhpcyBjYW4gYmUgc2V0IHRvICJub3RiYXJlIiB0byBlbmFibGUKK2l0IHdpdGhpbiBhbGwgbm9uLWJhcmUgcmVwb3Mgb3IgaXQgY2FuIGJlIHNldCB0byBhIGJvb2xlYW4gdmFsdWUuCitUaGlzIGRlZmF1bHRzIHRvIHRydWUuCisKK1RoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdnYy5hZ2dyZXNzaXZlV2luZG93JyBjb250cm9scyBob3cKK211Y2ggdGltZSBpcyBzcGVudCBvcHRpbWl6aW5nIHRoZSBkZWx0YSBjb21wcmVzc2lvbiBvZiB0aGUgb2JqZWN0cyBpbgordGhlIHJlcG9zaXRvcnkgd2hlbiB0aGUgLS1hZ2dyZXNzaXZlIG9wdGlvbiBpcyBzcGVjaWZpZWQuICBUaGUgbGFyZ2VyCit0aGUgdmFsdWUsIHRoZSBtb3JlIHRpbWUgaXMgc3BlbnQgb3B0aW1pemluZyB0aGUgZGVsdGEgY29tcHJlc3Npb24uICBTZWUKK3RoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgLS13aW5kb3cnIG9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0gZm9yCittb3JlIGRldGFpbHMuICBUaGlzIGRlZmF1bHRzIHRvIDI1MC4KKworVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ2djLnBydW5lRXhwaXJlJyBjb250cm9scyBob3cgb2xkCit0aGUgdW5yZWZlcmVuY2VkIGxvb3NlIG9iamVjdHMgaGF2ZSB0byBiZSBiZWZvcmUgdGhleSBhcmUgcHJ1bmVkLiAgVGhlCitkZWZhdWx0IGlzICIyIHdlZWtzIGFnbyIuCisKKworTm90ZXMKKy0tLS0tCisKKydnaXQgZ2MnIHRyaWVzIHZlcnkgaGFyZCB0byBiZSBzYWZlIGFib3V0IHRoZSBnYXJiYWdlIGl0IGNvbGxlY3RzLiBJbgorcGFydGljdWxhciwgaXQgd2lsbCBrZWVwIG5vdCBvbmx5IG9iamVjdHMgcmVmZXJlbmNlZCBieSB5b3VyIGN1cnJlbnQgc2V0CitvZiBicmFuY2hlcyBhbmQgdGFncywgYnV0IGFsc28gb2JqZWN0cyByZWZlcmVuY2VkIGJ5IHRoZSBpbmRleCwKK3JlbW90ZS10cmFja2luZyBicmFuY2hlcywgcmVmcyBzYXZlZCBieSAnZ2l0IGZpbHRlci1icmFuY2gnIGluCityZWZzL29yaWdpbmFsLywgb3IgcmVmbG9ncyAod2hpY2ggbWF5IHJlZmVyZW5jZSBjb21taXRzIGluIGJyYW5jaGVzCit0aGF0IHdlcmUgbGF0ZXIgYW1lbmRlZCBvciByZXdvdW5kKS4KKworSWYgeW91IGFyZSBleHBlY3Rpbmcgc29tZSBvYmplY3RzIHRvIGJlIGNvbGxlY3RlZCBhbmQgdGhleSBhcmVuJ3QsIGNoZWNrCithbGwgb2YgdGhvc2UgbG9jYXRpb25zIGFuZCBkZWNpZGUgd2hldGhlciBpdCBtYWtlcyBzZW5zZSBpbiB5b3VyIGNhc2UgdG8KK3JlbW92ZSB0aG9zZSByZWZlcmVuY2VzLgorCitIT09LUworLS0tLS0KKworVGhlICdnaXQgZ2MgLS1hdXRvJyBjb21tYW5kIHdpbGwgcnVuIHRoZSAncHJlLWF1dG8tZ2MnIGhvb2suICBTZWUKK2xpbmtnaXQ6Z2l0aG9va3NbNV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wcnVuZVsxXQorbGlua2dpdDpnaXQtcmVmbG9nWzFdCitsaW5rZ2l0OmdpdC1yZXBhY2tbMV0KK2xpbmtnaXQ6Z2l0LXJlcmVyZVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWdldC10YXItY29tbWl0LWlkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdldC10YXItY29tbWl0LWlkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTJhMjBkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ2V0LXRhci1jb21taXQtaWQudHh0CkBAIC0wLDAgKzEsMjggQEAKK2dpdC1nZXQtdGFyLWNvbW1pdC1pZCgxKQorPT09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1nZXQtdGFyLWNvbW1pdC1pZCAtIEV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC1hcmNoaXZlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGdldC10YXItY29tbWl0LWlkJyA8IDx0YXJmaWxlPgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQWN0cyBhcyBhIGZpbHRlciwgZXh0cmFjdGluZyB0aGUgY29tbWl0IElEIHN0b3JlZCBpbiBhcmNoaXZlcyBjcmVhdGVkIGJ5CisnZ2l0IGFyY2hpdmUnLiAgSXQgcmVhZHMgb25seSB0aGUgZmlyc3QgMTAyNCBieXRlcyBvZiBpbnB1dCwgdGh1cyBpdHMKK3J1bnRpbWUgaXMgbm90IGluZmx1ZW5jZWQgYnkgdGhlIHNpemUgb2YgPHRhcmZpbGU+IHZlcnkgbXVjaC4KKworSWYgbm8gY29tbWl0IElEIGlzIGZvdW5kLCAnZ2l0IGdldC10YXItY29tbWl0LWlkJyBxdWlldGx5IGV4aXN0cyB3aXRoIGEKK3JldHVybiBjb2RlIG9mIDEuICBUaGlzIGNhbiBoYXBwZW4gaWYgPHRhcmZpbGU+IGhhZCBub3QgYmVlbiBjcmVhdGVkCit1c2luZyAnZ2l0IGFyY2hpdmUnIG9yIGlmIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgJ2dpdCBhcmNoaXZlJyBoYWQgYmVlbgorYSB0cmVlIElEIGluc3RlYWQgb2YgYSBjb21taXQgSUQgb3IgdGFnLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ3JlcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlY2Y4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CkBAIC0wLDAgKzEsMjc0IEBACitnaXQtZ3JlcCgxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWdyZXAgLSBQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4KKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZ3JlcCcgWy1hIHwgLS10ZXh0XSBbLUldIFstaSB8IC0taWdub3JlLWNhc2VdIFstdyB8IC0td29yZC1yZWdleHBdCisJICAgWy12IHwgLS1pbnZlcnQtbWF0Y2hdIFstaHwtSF0gWy0tZnVsbC1uYW1lXQorCSAgIFstRSB8IC0tZXh0ZW5kZWQtcmVnZXhwXSBbLUcgfCAtLWJhc2ljLXJlZ2V4cF0KKwkgICBbLVAgfCAtLXBlcmwtcmVnZXhwXQorCSAgIFstRiB8IC0tZml4ZWQtc3RyaW5nc10gWy1uIHwgLS1saW5lLW51bWJlcl0KKwkgICBbLWwgfCAtLWZpbGVzLXdpdGgtbWF0Y2hlc10gWy1MIHwgLS1maWxlcy13aXRob3V0LW1hdGNoXQorCSAgIFsoLU8gfCAtLW9wZW4tZmlsZXMtaW4tcGFnZXIpIFs8cGFnZXI+XV0KKwkgICBbLXogfCAtLW51bGxdCisJICAgWy1jIHwgLS1jb3VudF0gWy0tYWxsLW1hdGNoXSBbLXEgfCAtLXF1aWV0XQorCSAgIFstLW1heC1kZXB0aCA8ZGVwdGg+XQorCSAgIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0KKwkgICBbLS1icmVha10gWy0taGVhZGluZ10gWy1wIHwgLS1zaG93LWZ1bmN0aW9uXQorCSAgIFstQSA8cG9zdC1jb250ZXh0Pl0gWy1CIDxwcmUtY29udGV4dD5dIFstQyA8Y29udGV4dD5dCisJICAgWy1XIHwgLS1mdW5jdGlvbi1jb250ZXh0XQorCSAgIFstZiA8ZmlsZT5dIFstZV0gPHBhdHRlcm4+CisJICAgWy0tYW5kfC0tb3J8LS1ub3R8KHwpfC1lIDxwYXR0ZXJuPi4uLl0KKwkgICBbIFstLWV4Y2x1ZGUtc3RhbmRhcmRdIFstLWNhY2hlZCB8IC0tbm8taW5kZXggfCAtLXVudHJhY2tlZF0gfCA8dHJlZT4uLi5dCisJICAgWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitMb29rIGZvciBzcGVjaWZpZWQgcGF0dGVybnMgaW4gdGhlIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmsgdHJlZSwgYmxvYnMKK3JlZ2lzdGVyZWQgaW4gdGhlIGluZGV4IGZpbGUsIG9yIGJsb2JzIGluIGdpdmVuIHRyZWUgb2JqZWN0cy4gIFBhdHRlcm5zCithcmUgbGlzdHMgb2Ygb25lIG9yIG1vcmUgc2VhcmNoIGV4cHJlc3Npb25zIHNlcGFyYXRlZCBieSBuZXdsaW5lCitjaGFyYWN0ZXJzLiAgQW4gZW1wdHkgc3RyaW5nIGFzIHNlYXJjaCBleHByZXNzaW9uIG1hdGNoZXMgYWxsIGxpbmVzLgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworZ3JlcC5saW5lTnVtYmVyOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlICctbicgb3B0aW9uIGJ5IGRlZmF1bHQuCisKK2dyZXAucGF0dGVyblR5cGU6OgorCVNldCB0aGUgZGVmYXVsdCBtYXRjaGluZyBiZWhhdmlvci4gVXNpbmcgYSB2YWx1ZSBvZiAnYmFzaWMnLCAnZXh0ZW5kZWQnLAorCSdmaXhlZCcsIG9yICdwZXJsJyB3aWxsIGVuYWJsZSB0aGUgJy0tYmFzaWMtcmVnZXhwJywgJy0tZXh0ZW5kZWQtcmVnZXhwJywKKwknLS1maXhlZC1zdHJpbmdzJywgb3IgJy0tcGVybC1yZWdleHAnIG9wdGlvbiBhY2NvcmRpbmdseSwgd2hpbGUgdGhlCisJdmFsdWUgJ2RlZmF1bHQnIHdpbGwgcmV0dXJuIHRvIHRoZSBkZWZhdWx0IG1hdGNoaW5nIGJlaGF2aW9yLgorCitncmVwLmV4dGVuZGVkUmVnZXhwOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlICctLWV4dGVuZGVkLXJlZ2V4cCcgb3B0aW9uIGJ5IGRlZmF1bHQuIFRoaXMKKwlvcHRpb24gaXMgaWdub3JlZCB3aGVuIHRoZSAnZ3JlcC5wYXR0ZXJuVHlwZScgb3B0aW9uIGlzIHNldCB0byBhIHZhbHVlCisJb3RoZXIgdGhhbiAnZGVmYXVsdCcuCisKKworT1BUSU9OUworLS0tLS0tLQorLS1jYWNoZWQ6OgorCUluc3RlYWQgb2Ygc2VhcmNoaW5nIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgc2VhcmNoCisJYmxvYnMgcmVnaXN0ZXJlZCBpbiB0aGUgaW5kZXggZmlsZS4KKworLS1uby1pbmRleDo6CisJU2VhcmNoIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0aGF0IGlzIG5vdCBtYW5hZ2VkIGJ5IGdpdC4KKworLS11bnRyYWNrZWQ6OgorCUluIGFkZGl0aW9uIHRvIHNlYXJjaGluZyBpbiB0aGUgdHJhY2tlZCBmaWxlcyBpbiB0aGUgd29ya2luZworCXRyZWUsIHNlYXJjaCBhbHNvIGluIHVudHJhY2tlZCBmaWxlcy4KKworLS1uby1leGNsdWRlLXN0YW5kYXJkOjoKKwlBbHNvIHNlYXJjaCBpbiBpZ25vcmVkIGZpbGVzIGJ5IG5vdCBob25vcmluZyB0aGUgYC5naXRpZ25vcmVgCisJbWVjaGFuaXNtLiBPbmx5IHVzZWZ1bCB3aXRoIGAtLXVudHJhY2tlZGAuCisKKy0tZXhjbHVkZS1zdGFuZGFyZDo6CisJRG8gbm90IHBheSBhdHRlbnRpb24gdG8gaWdub3JlZCBmaWxlcyBzcGVjaWZpZWQgdmlhIHRoZQlgLmdpdGlnbm9yZWAKKwltZWNoYW5pc20uICBPbmx5IHVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKwl3aXRoIGAtLW5vLWluZGV4YC4KKworLWE6OgorLS10ZXh0OjoKKwlQcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyBpZiB0aGV5IHdlcmUgdGV4dC4KKworLWk6OgorLS1pZ25vcmUtY2FzZTo6CisJSWdub3JlIGNhc2UgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgcGF0dGVybnMgYW5kIHRoZQorCWZpbGVzLgorCistSTo6CisJRG9uJ3QgbWF0Y2ggdGhlIHBhdHRlcm4gaW4gYmluYXJ5IGZpbGVzLgorCistLW1heC1kZXB0aCA8ZGVwdGg+OjoKKwlGb3IgZWFjaCA8cGF0aHNwZWM+IGdpdmVuIG9uIGNvbW1hbmQgbGluZSwgZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4KKwlsZXZlbHMgb2YgZGlyZWN0b3JpZXMuIEEgbmVnYXRpdmUgdmFsdWUgbWVhbnMgbm8gbGltaXQuCisJVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiA8cGF0aHNwZWM+IGNvbnRhaW5zIGFjdGl2ZSB3aWxkY2FyZHMuCisJSW4gb3RoZXIgd29yZHMgaWYgImEqIiBtYXRjaGVzIGEgZGlyZWN0b3J5IG5hbWVkICJhKiIsCisJIioiIGlzIG1hdGNoZWQgbGl0ZXJhbGx5IHNvIC0tbWF4LWRlcHRoIGlzIHN0aWxsIGVmZmVjdGl2ZS4KKworLXc6OgorLS13b3JkLXJlZ2V4cDo6CisJTWF0Y2ggdGhlIHBhdHRlcm4gb25seSBhdCB3b3JkIGJvdW5kYXJ5IChlaXRoZXIgYmVnaW4gYXQgdGhlCisJYmVnaW5uaW5nIG9mIGEgbGluZSwgb3IgcHJlY2VkZWQgYnkgYSBub24td29yZCBjaGFyYWN0ZXI7IGVuZCBhdAorCXRoZSBlbmQgb2YgYSBsaW5lIG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXdvcmQgY2hhcmFjdGVyKS4KKworLXY6OgorLS1pbnZlcnQtbWF0Y2g6OgorCVNlbGVjdCBub24tbWF0Y2hpbmcgbGluZXMuCisKKy1oOjoKKy1IOjoKKwlCeSBkZWZhdWx0LCB0aGUgY29tbWFuZCBzaG93cyB0aGUgZmlsZW5hbWUgZm9yIGVhY2gKKwltYXRjaC4gIGAtaGAgb3B0aW9uIGlzIHVzZWQgdG8gc3VwcHJlc3MgdGhpcyBvdXRwdXQuCisJYC1IYCBpcyB0aGVyZSBmb3IgY29tcGxldGVuZXNzIGFuZCBkb2VzIG5vdCBkbyBhbnl0aGluZworCWV4Y2VwdCBpdCBvdmVycmlkZXMgYC1oYCBnaXZlbiBlYXJsaWVyIG9uIHRoZSBjb21tYW5kCisJbGluZS4KKworLS1mdWxsLW5hbWU6OgorCVdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnksIHRoZSBjb21tYW5kIHVzdWFsbHkKKwlvdXRwdXRzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoaXMKKwlvcHRpb24gZm9yY2VzIHBhdGhzIHRvIGJlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdAorCXRvcCBkaXJlY3RvcnkuCisKKy1FOjoKKy0tZXh0ZW5kZWQtcmVnZXhwOjoKKy1HOjoKKy0tYmFzaWMtcmVnZXhwOjoKKwlVc2UgUE9TSVggZXh0ZW5kZWQvYmFzaWMgcmVnZXhwIGZvciBwYXR0ZXJucy4gIERlZmF1bHQKKwlpcyB0byB1c2UgYmFzaWMgcmVnZXhwLgorCistUDo6CistLXBlcmwtcmVnZXhwOjoKKwlVc2UgUGVybC1jb21wYXRpYmxlIHJlZ2V4cCBmb3IgcGF0dGVybnMuIFJlcXVpcmVzIGxpYnBjcmUgdG8gYmUKKwljb21waWxlZCBpbi4KKworLUY6OgorLS1maXhlZC1zdHJpbmdzOjoKKwlVc2UgZml4ZWQgc3RyaW5ncyBmb3IgcGF0dGVybnMgKGRvbid0IGludGVycHJldCBwYXR0ZXJuCisJYXMgYSByZWdleCkuCisKKy1uOjoKKy0tbGluZS1udW1iZXI6OgorCVByZWZpeCB0aGUgbGluZSBudW1iZXIgdG8gbWF0Y2hpbmcgbGluZXMuCisKKy1sOjoKKy0tZmlsZXMtd2l0aC1tYXRjaGVzOjoKKy0tbmFtZS1vbmx5OjoKKy1MOjoKKy0tZmlsZXMtd2l0aG91dC1tYXRjaDo6CisJSW5zdGVhZCBvZiBzaG93aW5nIGV2ZXJ5IG1hdGNoZWQgbGluZSwgc2hvdyBvbmx5IHRoZQorCW5hbWVzIG9mIGZpbGVzIHRoYXQgY29udGFpbiAob3IgZG8gbm90IGNvbnRhaW4pIG1hdGNoZXMuCisJRm9yIGJldHRlciBjb21wYXRpYmlsaXR5IHdpdGggJ2dpdCBkaWZmJywgYC0tbmFtZS1vbmx5YCBpcyBhCisJc3lub255bSBmb3IgYC0tZmlsZXMtd2l0aC1tYXRjaGVzYC4KKworLU8gWzxwYWdlcj5dOjoKKy0tb3Blbi1maWxlcy1pbi1wYWdlciBbPHBhZ2VyPl06OgorCU9wZW4gdGhlIG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciAobm90IHRoZSBvdXRwdXQgb2YgJ2dyZXAnKS4KKwlJZiB0aGUgcGFnZXIgaGFwcGVucyB0byBiZSAibGVzcyIgb3IgInZpIiwgYW5kIHRoZSB1c2VyCisJc3BlY2lmaWVkIG9ubHkgb25lIHBhdHRlcm4sIHRoZSBmaXJzdCBmaWxlIGlzIHBvc2l0aW9uZWQgYXQKKwl0aGUgZmlyc3QgbWF0Y2ggYXV0b21hdGljYWxseS4KKworLXo6OgorLS1udWxsOjoKKwlPdXRwdXQgXDAgaW5zdGVhZCBvZiB0aGUgY2hhcmFjdGVyIHRoYXQgbm9ybWFsbHkgZm9sbG93cyBhCisJZmlsZSBuYW1lLgorCistYzo6CistLWNvdW50OjoKKwlJbnN0ZWFkIG9mIHNob3dpbmcgZXZlcnkgbWF0Y2hlZCBsaW5lLCBzaG93IHRoZSBudW1iZXIgb2YKKwlsaW5lcyB0aGF0IG1hdGNoLgorCistLWNvbG9yWz08d2hlbj5dOjoKKwlTaG93IGNvbG9yZWQgbWF0Y2hlcy4KKwlUaGUgdmFsdWUgbXVzdCBiZSBhbHdheXMgKHRoZSBkZWZhdWx0KSwgbmV2ZXIsIG9yIGF1dG8uCisKKy0tbm8tY29sb3I6OgorCVR1cm4gb2ZmIG1hdGNoIGhpZ2hsaWdodGluZywgZXZlbiB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKwlnaXZlcyB0aGUgZGVmYXVsdCB0byBjb2xvciBvdXRwdXQuCisJU2FtZSBhcyBgLS1jb2xvcj1uZXZlcmAuCisKKy0tYnJlYWs6OgorCVByaW50IGFuIGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzLgorCistLWhlYWRpbmc6OgorCVNob3cgdGhlIGZpbGVuYW1lIGFib3ZlIHRoZSBtYXRjaGVzIGluIHRoYXQgZmlsZSBpbnN0ZWFkIG9mCisJYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc2hvd24gbGluZS4KKworLXA6OgorLS1zaG93LWZ1bmN0aW9uOjoKKwlTaG93IHRoZSBwcmVjZWRpbmcgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBuYW1lIG9mCisJdGhlIG1hdGNoLCB1bmxlc3MgdGhlIG1hdGNoaW5nIGxpbmUgaXMgYSBmdW5jdGlvbiBuYW1lIGl0c2VsZi4KKwlUaGUgbmFtZSBpcyBkZXRlcm1pbmVkIGluIHRoZSBzYW1lIHdheSBhcyAnZ2l0IGRpZmYnIHdvcmtzIG91dAorCXBhdGNoIGh1bmsgaGVhZGVycyAoc2VlICdEZWZpbmluZyBhIGN1c3RvbSBodW5rLWhlYWRlcicgaW4KKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0pLgorCistPG51bT46OgorLUMgPG51bT46OgorLS1jb250ZXh0IDxudW0+OjoKKwlTaG93IDxudW0+IGxlYWRpbmcgYW5kIHRyYWlsaW5nIGxpbmVzLCBhbmQgcGxhY2UgYSBsaW5lCisJY29udGFpbmluZyBgLS1gIGJldHdlZW4gY29udGlndW91cyBncm91cHMgb2YgbWF0Y2hlcy4KKworLUEgPG51bT46OgorLS1hZnRlci1jb250ZXh0IDxudW0+OjoKKwlTaG93IDxudW0+IHRyYWlsaW5nIGxpbmVzLCBhbmQgcGxhY2UgYSBsaW5lIGNvbnRhaW5pbmcKKwlgLS1gIGJldHdlZW4gY29udGlndW91cyBncm91cHMgb2YgbWF0Y2hlcy4KKworLUIgPG51bT46OgorLS1iZWZvcmUtY29udGV4dCA8bnVtPjo6CisJU2hvdyA8bnVtPiBsZWFkaW5nIGxpbmVzLCBhbmQgcGxhY2UgYSBsaW5lIGNvbnRhaW5pbmcKKwlgLS1gIGJldHdlZW4gY29udGlndW91cyBncm91cHMgb2YgbWF0Y2hlcy4KKworLVc6OgorLS1mdW5jdGlvbi1jb250ZXh0OjoKKwlTaG93IHRoZSBzdXJyb3VuZGluZyB0ZXh0IGZyb20gdGhlIHByZXZpb3VzIGxpbmUgY29udGFpbmluZyBhCisJZnVuY3Rpb24gbmFtZSB1cCB0byB0aGUgb25lIGJlZm9yZSB0aGUgbmV4dCBmdW5jdGlvbiBuYW1lLAorCWVmZmVjdGl2ZWx5IHNob3dpbmcgdGhlIHdob2xlIGZ1bmN0aW9uIGluIHdoaWNoIHRoZSBtYXRjaCB3YXMKKwlmb3VuZC4KKworLWYgPGZpbGU+OjoKKwlSZWFkIHBhdHRlcm5zIGZyb20gPGZpbGU+LCBvbmUgcGVyIGxpbmUuCisKKy1lOjoKKwlUaGUgbmV4dCBwYXJhbWV0ZXIgaXMgdGhlIHBhdHRlcm4uIFRoaXMgb3B0aW9uIGhhcyB0byBiZQorCXVzZWQgZm9yIHBhdHRlcm5zIHN0YXJ0aW5nIHdpdGggYC1gIGFuZCBzaG91bGQgYmUgdXNlZCBpbgorCXNjcmlwdHMgcGFzc2luZyB1c2VyIGlucHV0IHRvIGdyZXAuICBNdWx0aXBsZSBwYXR0ZXJucyBhcmUKKwljb21iaW5lZCBieSAnb3InLgorCistLWFuZDo6CistLW9yOjoKKy0tbm90OjoKKyggLi4uICk6OgorCVNwZWNpZnkgaG93IG11bHRpcGxlIHBhdHRlcm5zIGFyZSBjb21iaW5lZCB1c2luZyBCb29sZWFuCisJZXhwcmVzc2lvbnMuICBgLS1vcmAgaXMgdGhlIGRlZmF1bHQgb3BlcmF0b3IuICBgLS1hbmRgIGhhcworCWhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gYC0tb3JgLiAgYC1lYCBoYXMgdG8gYmUgdXNlZCBmb3IgYWxsCisJcGF0dGVybnMuCisKKy0tYWxsLW1hdGNoOjoKKwlXaGVuIGdpdmluZyBtdWx0aXBsZSBwYXR0ZXJuIGV4cHJlc3Npb25zIGNvbWJpbmVkIHdpdGggYC0tb3JgLAorCXRoaXMgZmxhZyBpcyBzcGVjaWZpZWQgdG8gbGltaXQgdGhlIG1hdGNoIHRvIGZpbGVzIHRoYXQKKwloYXZlIGxpbmVzIHRvIG1hdGNoIGFsbCBvZiB0aGVtLgorCistcTo6CistLXF1aWV0OjoKKwlEbyBub3Qgb3V0cHV0IG1hdGNoZWQgbGluZXM7IGluc3RlYWQsIGV4aXQgd2l0aCBzdGF0dXMgMCB3aGVuCisJdGhlcmUgaXMgYSBtYXRjaCBhbmQgd2l0aCBub24temVybyBzdGF0dXMgd2hlbiB0aGVyZSBpc24ndC4KKworPHRyZWU+Li4uOjoKKwlJbnN0ZWFkIG9mIHNlYXJjaGluZyB0cmFja2VkIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIHNlYXJjaAorCWJsb2JzIGluIHRoZSBnaXZlbiB0cmVlcy4KKworXC0tOjoKKwlTaWduYWxzIHRoZSBlbmQgb2Ygb3B0aW9uczsgdGhlIHJlc3Qgb2YgdGhlIHBhcmFtZXRlcnMKKwlhcmUgPHBhdGhzcGVjPiBsaW1pdGVycy4KKworPHBhdGhzcGVjPi4uLjo6CisJSWYgZ2l2ZW4sIGxpbWl0IHRoZSBzZWFyY2ggdG8gcGF0aHMgbWF0Y2hpbmcgYXQgbGVhc3Qgb25lIHBhdHRlcm4uCisJQm90aCBsZWFkaW5nIHBhdGhzIG1hdGNoIGFuZCBnbG9iKDcpIHBhdHRlcm5zIGFyZSBzdXBwb3J0ZWQuCisKK0V4YW1wbGVzCistLS0tLS0tLQorCitgZ2l0IGdyZXAgJ3RpbWVfdCcgLS0gJyouW2NoXSdgOjoKKwlMb29rcyBmb3IgYHRpbWVfdGAgaW4gYWxsIHRyYWNrZWQgLmMgYW5kIC5oIGZpbGVzIGluIHRoZSB3b3JraW5nCisJZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMuCisKK2BnaXQgZ3JlcCAtZSAnI2RlZmluZScgLS1hbmQgXCggLWUgTUFYX1BBVEggLWUgUEFUSF9NQVggXClgOjoKKwlMb29rcyBmb3IgYSBsaW5lIHRoYXQgaGFzIGAjZGVmaW5lYCBhbmQgZWl0aGVyIGBNQVhfUEFUSGAgb3IKKwlgUEFUSF9NQVhgLgorCitgZ2l0IGdyZXAgLS1hbGwtbWF0Y2ggLWUgTk9ERSAtZSBVbmV4cGVjdGVkYDo6CisJTG9va3MgZm9yIGEgbGluZSB0aGF0IGhhcyBgTk9ERWAgb3IgYFVuZXhwZWN0ZWRgIGluCisJZmlsZXMgdGhhdCBoYXZlIGxpbmVzIHRoYXQgbWF0Y2ggYm90aC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ndWkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ3VpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDQxOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ3VpLnR4dApAQCAtMCwwICsxLDEyNyBAQAorZ2l0LWd1aSgxKQorPT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZ3VpIC0gQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZ3VpJyBbPGNvbW1hbmQ+XSBbYXJndW1lbnRzXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0EgVGNsL1RrIGJhc2VkIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSB0byBHaXQuICAnZ2l0IGd1aScgZm9jdXNlcworb24gYWxsb3dpbmcgdXNlcnMgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZWlyIHJlcG9zaXRvcnkgYnkgbWFraW5nCituZXcgY29tbWl0cywgYW1lbmRpbmcgZXhpc3Rpbmcgb25lcywgY3JlYXRpbmcgYnJhbmNoZXMsIHBlcmZvcm1pbmcKK2xvY2FsIG1lcmdlcywgYW5kIGZldGNoaW5nL3B1c2hpbmcgdG8gcmVtb3RlIHJlcG9zaXRvcmllcy4KKworVW5saWtlICdnaXRrJywgJ2dpdCBndWknIGZvY3VzZXMgb24gY29tbWl0IGdlbmVyYXRpb24KK2FuZCBzaW5nbGUgZmlsZSBhbm5vdGF0aW9uIGFuZCBkb2VzIG5vdCBzaG93IHByb2plY3QgaGlzdG9yeS4KK0l0IGRvZXMgaG93ZXZlciBzdXBwbHkgbWVudSBhY3Rpb25zIHRvIHN0YXJ0IGEgJ2dpdGsnIHNlc3Npb24gZnJvbQord2l0aGluICdnaXQgZ3VpJy4KKworJ2dpdCBndWknIGlzIGtub3duIHRvIHdvcmsgb24gYWxsIHBvcHVsYXIgVU5JWCBzeXN0ZW1zLCBNYWMgT1MgWCwKK2FuZCBXaW5kb3dzICh1bmRlciBib3RoIEN5Z3dpbiBhbmQgTVNZUykuICBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlCitPUyBzcGVjaWZpYyB1c2VyIGludGVyZmFjZSBndWlkZWxpbmVzIGFyZSBmb2xsb3dlZCwgbWFraW5nICdnaXQgZ3VpJworYSBmYWlybHkgbmF0aXZlIGludGVyZmFjZSBmb3IgdXNlcnMuCisKK0NPTU1BTkRTCistLS0tLS0tLQorYmxhbWU6OgorCVN0YXJ0IGEgYmxhbWUgdmlld2VyIG9uIHRoZSBzcGVjaWZpZWQgZmlsZSBvbiB0aGUgZ2l2ZW4KKwl2ZXJzaW9uIChvciB3b3JraW5nIGRpcmVjdG9yeSBpZiBub3Qgc3BlY2lmaWVkKS4KKworYnJvd3Nlcjo6CisJU3RhcnQgYSB0cmVlIGJyb3dzZXIgc2hvd2luZyBhbGwgZmlsZXMgaW4gdGhlIHNwZWNpZmllZAorCWNvbW1pdCAob3IgJ0hFQUQnIGJ5IGRlZmF1bHQpLiAgRmlsZXMgc2VsZWN0ZWQgdGhyb3VnaCB0aGUKKwlicm93c2VyIGFyZSBvcGVuZWQgaW4gdGhlIGJsYW1lIHZpZXdlci4KKworY2l0b29sOjoKKwlTdGFydCAnZ2l0IGd1aScgYW5kIGFycmFuZ2UgdG8gbWFrZSBleGFjdGx5IG9uZSBjb21taXQgYmVmb3JlCisJZXhpdGluZyBhbmQgcmV0dXJuaW5nIHRvIHRoZSBzaGVsbC4gIFRoZSBpbnRlcmZhY2UgaXMgbGltaXRlZAorCXRvIG9ubHkgY29tbWl0IGFjdGlvbnMsIHNsaWdodGx5IHJlZHVjaW5nIHRoZSBhcHBsaWNhdGlvbidzCisJc3RhcnR1cCB0aW1lIGFuZCBzaW1wbGlmeWluZyB0aGUgbWVudWJhci4KKwordmVyc2lvbjo6CisJRGlzcGxheSB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdmVyc2lvbiBvZiAnZ2l0IGd1aScuCisKKworRXhhbXBsZXMKKy0tLS0tLS0tCitgZ2l0IGd1aSBibGFtZSBNYWtlZmlsZWA6OgorCisJU2hvdyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgJ01ha2VmaWxlJyBpbiB0aGUgY3VycmVudAorCXdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgcHJvdmlkZSBhbm5vdGF0aW9ucyBmb3IgYm90aCB0aGUKKwlvcmlnaW5hbCBhdXRob3Igb2YgZWFjaCBsaW5lLCBhbmQgd2hvIG1vdmVkIHRoZSBsaW5lIHRvIGl0cworCWN1cnJlbnQgbG9jYXRpb24uICBUaGUgdW5jb21taXR0ZWQgZmlsZSBpcyBhbm5vdGF0ZWQsIGFuZAorCXVuY29tbWl0dGVkIGNoYW5nZXMgKGlmIGFueSkgYXJlIGV4cGxpY2l0bHkgYXR0cmlidXRlZCB0bworCSdOb3QgWWV0IENvbW1pdHRlZCcuCisKK2BnaXQgZ3VpIGJsYW1lIHYwLjk5LjggTWFrZWZpbGVgOjoKKworCVNob3cgdGhlIGNvbnRlbnRzIG9mICdNYWtlZmlsZScgaW4gcmV2aXNpb24gJ3YwLjk5LjgnCisJYW5kIHByb3ZpZGUgYW5ub3RhdGlvbnMgZm9yIGVhY2ggbGluZS4gIFVubGlrZSB0aGUgYWJvdmUKKwlleGFtcGxlIHRoZSBmaWxlIGlzIHJlYWQgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIGFuZCBub3QKKwl0aGUgd29ya2luZyBkaXJlY3RvcnkuCisKK2BnaXQgZ3VpIGJsYW1lIC0tbGluZT0xMDAgTWFrZWZpbGVgOjoKKworCUxvYWRzIGFubm90YXRpb25zIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgYXV0b21hdGljYWxseQorCXNjcm9sbHMgdGhlIHZpZXcgdG8gY2VudGVyIG9uIGxpbmUgJzEwMCcuCisKK2BnaXQgZ3VpIGNpdG9vbGA6OgorCisJTWFrZSBvbmUgY29tbWl0IGFuZCByZXR1cm4gdG8gdGhlIHNoZWxsIHdoZW4gaXQgaXMgY29tcGxldGUuCisJVGhpcyBjb21tYW5kIHJldHVybnMgYSBub24temVybyBleGl0IGNvZGUgaWYgdGhlIHdpbmRvdyB3YXMKKwljbG9zZWQgaW4gYW55IHdheSBvdGhlciB0aGFuIGJ5IG1ha2luZyBhIGNvbW1pdC4KKworYGdpdCBndWkgY2l0b29sIC0tYW1lbmRgOjoKKworCUF1dG9tYXRpY2FsbHkgZW50ZXIgdGhlICdBbWVuZCBMYXN0IENvbW1pdCcgbW9kZSBvZgorCXRoZSBpbnRlcmZhY2UuCisKK2BnaXQgZ3VpIGNpdG9vbCAtLW5vY29tbWl0YDo6CisKKwlCZWhhdmUgYXMgbm9ybWFsIGNpdG9vbCwgYnV0IGluc3RlYWQgb2YgbWFraW5nIGEgY29tbWl0CisJc2ltcGx5IHRlcm1pbmF0ZSB3aXRoIGEgemVybyBleGl0IGNvZGUuIEl0IHN0aWxsIGNoZWNrcworCXRoYXQgdGhlIGluZGV4IGRvZXMgbm90IGNvbnRhaW4gYW55IHVubWVyZ2VkIGVudHJpZXMsIHNvCisJeW91IGNhbiB1c2UgaXQgYXMgYSBHVUkgdmVyc2lvbiBvZiBsaW5rZ2l0OmdpdC1tZXJnZXRvb2xbMV0KKworYGdpdCBjaXRvb2xgOjoKKworCVNhbWUgYXMgYGdpdCBndWkgY2l0b29sYCAoYWJvdmUpLgorCitgZ2l0IGd1aSBicm93c2VyIG1haW50YDo6CisKKwlTaG93IGEgYnJvd3NlciBmb3IgdGhlIHRyZWUgb2YgdGhlICdtYWludCcgYnJhbmNoLiAgRmlsZXMKKwlzZWxlY3RlZCBpbiB0aGUgYnJvd3NlciBjYW4gYmUgdmlld2VkIHdpdGggdGhlIGludGVybmFsCisJYmxhbWUgdmlld2VyLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0a1sxXTo6CisJVGhlIGdpdCByZXBvc2l0b3J5IGJyb3dzZXIuICBTaG93cyBicmFuY2hlcywgY29tbWl0IGhpc3RvcnkKKwlhbmQgZmlsZSBkaWZmZXJlbmNlcy4gIGdpdGsgaXMgdGhlIHV0aWxpdHkgc3RhcnRlZCBieQorCSdnaXQgZ3VpJydzIFJlcG9zaXRvcnkgVmlzdWFsaXplIGFjdGlvbnMuCisKK090aGVyCistLS0tLQorJ2dpdCBndWknIGlzIGFjdHVhbGx5IG1haW50YWluZWQgYXMgYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgYnV0IHN0YWJsZQordmVyc2lvbnMgYXJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIEdpdCBzdWl0ZSBmb3IgdGhlIGNvbnZlbmllbmNlCitvZiBlbmQgdXNlcnMuCisKK0EgJ2dpdCBndWknIGRldmVsb3BtZW50IHJlcG9zaXRvcnkgY2FuIGJlIG9idGFpbmVkIGZyb206CisKKyAgZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovZ2l0LWd1aS5naXQKKworb3IKKworICBnaXQgY2xvbmUgaHR0cDovL3JlcG8ub3IuY3ovci9naXQtZ3VpLmdpdAorCitvciBicm93c2VkIG9ubGluZSBhdCBodHRwOi8vcmVwby5vci5jei93L2dpdC1ndWkuZ2l0L1tdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjBhNTAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0CkBAIC0wLDAgKzEsNTggQEAKK2dpdC1oYXNoLW9iamVjdCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1oYXNoLW9iamVjdCAtIENvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGhhc2gtb2JqZWN0JyBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+fC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dIFstLV0gPGZpbGU+Li4uCisnZ2l0IGhhc2gtb2JqZWN0JyBbLXQgPHR5cGU+XSBbLXddIC0tc3RkaW4tcGF0aHMgWy0tbm8tZmlsdGVyc10gPCA8bGlzdC1vZi1wYXRocz4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDb21wdXRlcyB0aGUgb2JqZWN0IElEIHZhbHVlIGZvciBhbiBvYmplY3Qgd2l0aCBzcGVjaWZpZWQgdHlwZQord2l0aCB0aGUgY29udGVudHMgb2YgdGhlIG5hbWVkIGZpbGUgKHdoaWNoIGNhbiBiZSBvdXRzaWRlIG9mIHRoZQord29yayB0cmVlKSwgYW5kIG9wdGlvbmFsbHkgd3JpdGVzIHRoZSByZXN1bHRpbmcgb2JqZWN0IGludG8gdGhlCitvYmplY3QgZGF0YWJhc2UuICBSZXBvcnRzIGl0cyBvYmplY3QgSUQgdG8gaXRzIHN0YW5kYXJkIG91dHB1dC4KK1RoaXMgaXMgdXNlZCBieSAnZ2l0IGN2c2ltcG9ydCcgdG8gdXBkYXRlIHRoZSBpbmRleAord2l0aG91dCBtb2RpZnlpbmcgZmlsZXMgaW4gdGhlIHdvcmsgdHJlZS4gIFdoZW4gPHR5cGU+IGlzIG5vdAorc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byAiYmxvYiIuCisKK09QVElPTlMKKy0tLS0tLS0KKworLXQgPHR5cGU+OjoKKwlTcGVjaWZ5IHRoZSB0eXBlIChkZWZhdWx0OiAiYmxvYiIpLgorCistdzo6CisJQWN0dWFsbHkgd3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UuCisKKy0tc3RkaW46OgorCVJlYWQgdGhlIG9iamVjdCBmcm9tIHN0YW5kYXJkIGlucHV0IGluc3RlYWQgb2YgZnJvbSBhIGZpbGUuCisKKy0tc3RkaW4tcGF0aHM6OgorCVJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIGluc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZC1saW5lLgorCistLXBhdGg6OgorCUhhc2ggb2JqZWN0IGFzIGl0IHdlcmUgbG9jYXRlZCBhdCB0aGUgZ2l2ZW4gcGF0aC4gVGhlIGxvY2F0aW9uIG9mCisJZmlsZSBkb2VzIG5vdCBkaXJlY3RseSBpbmZsdWVuY2Ugb24gdGhlIGhhc2ggdmFsdWUsIGJ1dCBwYXRoIGlzCisJdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBnaXQgZmlsdGVycyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgb2JqZWN0CisJYmVmb3JlIGl0IGNhbiBiZSBwbGFjZWQgdG8gdGhlIG9iamVjdCBkYXRhYmFzZSwgYW5kLCBhcyByZXN1bHQgb2YKKwlhcHBseWluZyBmaWx0ZXJzLCB0aGUgYWN0dWFsIGJsb2IgcHV0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSBtYXkKKwlkaWZmZXIgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4gVGhpcyBvcHRpb24gaXMgbWFpbmx5IHVzZWZ1bCBmb3IgaGFzaGluZworCXRlbXBvcmFyeSBmaWxlcyBsb2NhdGVkIG91dHNpZGUgb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9yIGZpbGVzCisJcmVhZCBmcm9tIHN0ZGluLgorCistLW5vLWZpbHRlcnM6OgorCUhhc2ggdGhlIGNvbnRlbnRzIGFzIGlzLCBpZ25vcmluZyBhbnkgaW5wdXQgZmlsdGVyIHRoYXQgd291bGQKKwloYXZlIGJlZW4gY2hvc2VuIGJ5IHRoZSBhdHRyaWJ1dGVzIG1lY2hhbmlzbSwgaW5jbHVkaW5nIHRoZSBlbmQtb2YtbGluZQorCWNvbnZlcnNpb24uIElmIHRoZSBmaWxlIGlzIHJlYWQgZnJvbSBzdGFuZGFyZCBpbnB1dCB0aGVuIHRoaXMKKwlpcyBhbHdheXMgaW1wbGllZCwgdW5sZXNzIHRoZSAtLXBhdGggb3B0aW9uIGlzIGdpdmVuLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWhlbHAudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUwYjNmNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWhlbHAudHh0CkBAIC0wLDAgKzEsMTc3IEBACitnaXQtaGVscCgxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWhlbHAgLSBkaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgZ2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBoZWxwJyBbLWF8LS1hbGx8LWl8LS1pbmZvfC1tfC0tbWFufC13fC0td2ViXSBbQ09NTUFORF0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1dpdGggbm8gb3B0aW9ucyBhbmQgbm8gQ09NTUFORCBnaXZlbiwgdGhlIHN5bm9wc2lzIG9mIHRoZSAnZ2l0JworY29tbWFuZCBhbmQgYSBsaXN0IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZ2l0IGNvbW1hbmRzIGFyZSBwcmludGVkCitvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCitJZiB0aGUgb3B0aW9uICctLWFsbCcgb3IgJy1hJyBpcyBnaXZlbiwgdGhlbiBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIGFyZQorcHJpbnRlZCBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCitJZiBhIGdpdCBjb21tYW5kIGlzIG5hbWVkLCBhIG1hbnVhbCBwYWdlIGZvciB0aGF0IGNvbW1hbmQgaXMgYnJvdWdodAordXAuIFRoZSAnbWFuJyBwcm9ncmFtIGlzIHVzZWQgYnkgZGVmYXVsdCBmb3IgdGhpcyBwdXJwb3NlLCBidXQgdGhpcworY2FuIGJlIG92ZXJyaWRkZW4gYnkgb3RoZXIgb3B0aW9ucyBvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworTm90ZSB0aGF0IGBnaXQgLS1oZWxwIC4uLmAgaXMgaWRlbnRpY2FsIHRvIGBnaXQgaGVscCAuLi5gIGJlY2F1c2UgdGhlCitmb3JtZXIgaXMgaW50ZXJuYWxseSBjb252ZXJ0ZWQgaW50byB0aGUgbGF0dGVyLgorCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFsbDo6CisJUHJpbnRzIGFsbCB0aGUgYXZhaWxhYmxlIGNvbW1hbmRzIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuIFRoaXMKKwlvcHRpb24gc3VwZXJzZWRlcyBhbnkgb3RoZXIgb3B0aW9uLgorCistaTo6CistLWluZm86OgorCURpc3BsYXkgbWFudWFsIHBhZ2UgZm9yIHRoZSBjb21tYW5kIGluIHRoZSAnaW5mbycgZm9ybWF0LiBUaGUKKwknaW5mbycgcHJvZ3JhbSB3aWxsIGJlIHVzZWQgZm9yIHRoYXQgcHVycG9zZS4KKworLW06OgorLS1tYW46OgorCURpc3BsYXkgbWFudWFsIHBhZ2UgZm9yIHRoZSBjb21tYW5kIGluIHRoZSAnbWFuJyBmb3JtYXQuIFRoaXMKKwlvcHRpb24gbWF5IGJlIHVzZWQgdG8gb3ZlcnJpZGUgYSB2YWx1ZSBzZXQgaW4gdGhlCisJJ2hlbHAuZm9ybWF0JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorKworQnkgZGVmYXVsdCB0aGUgJ21hbicgcHJvZ3JhbSB3aWxsIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgbWFudWFsIHBhZ2UsCitidXQgdGhlICdtYW4udmlld2VyJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG1heSBiZSB1c2VkIHRvIGNob29zZQorb3RoZXIgZGlzcGxheSBwcm9ncmFtcyAoc2VlIGJlbG93KS4KKworLXc6OgorLS13ZWI6OgorCURpc3BsYXkgbWFudWFsIHBhZ2UgZm9yIHRoZSBjb21tYW5kIGluIHRoZSAnd2ViJyAoSFRNTCkKKwlmb3JtYXQuIEEgd2ViIGJyb3dzZXIgd2lsbCBiZSB1c2VkIGZvciB0aGF0IHB1cnBvc2UuCisrCitUaGUgd2ViIGJyb3dzZXIgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorJ2hlbHAuYnJvd3NlcicsIG9yICd3ZWIuYnJvd3NlcicgaWYgdGhlIGZvcm1lciBpcyBub3Qgc2V0LiBJZiBub25lIG9mCit0aGVzZSBjb25maWcgdmFyaWFibGVzIGlzIHNldCwgdGhlICdnaXQgd2Vie2xpdGRkfWJyb3dzZScgaGVscGVyIHNjcmlwdAorKGNhbGxlZCBieSAnZ2l0IGhlbHAnKSB3aWxsIHBpY2sgYSBzdWl0YWJsZSBkZWZhdWx0LiBTZWUKK2xpbmtnaXQ6Z2l0LXdlYntsaXRkZH1icm93c2VbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4KKworQ09ORklHVVJBVElPTiBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2hlbHAuZm9ybWF0Cit+fn5+fn5+fn5+fgorCitJZiBubyBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIHBhc3NlZCwgdGhlICdoZWxwLmZvcm1hdCcgY29uZmlndXJhdGlvbgordmFyaWFibGUgd2lsbCBiZSBjaGVja2VkLiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgc3VwcG9ydGVkIGZvciB0aGlzCit2YXJpYWJsZTsgdGhleSBtYWtlICdnaXQgaGVscCcgYmVoYXZlIGFzIHRoZWlyIGNvcnJlc3BvbmRpbmcgY29tbWFuZAorbGluZSBvcHRpb246CisKKyogIm1hbiIgY29ycmVzcG9uZHMgdG8gJy1tfC0tbWFuJywKKyogImluZm8iIGNvcnJlc3BvbmRzIHRvICctaXwtLWluZm8nLAorKiAid2ViIiBvciAiaHRtbCIgY29ycmVzcG9uZCB0byAnLXd8LS13ZWInLgorCitoZWxwLmJyb3dzZXIsIHdlYi5icm93c2VyIGFuZCBicm93c2VyLjx0b29sPi5wYXRoCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSAnaGVscC5icm93c2VyJywgJ3dlYi5icm93c2VyJyBhbmQgJ2Jyb3dzZXIuPHRvb2w+LnBhdGgnIHdpbGwgYWxzbworYmUgY2hlY2tlZCBpZiB0aGUgJ3dlYicgZm9ybWF0IGlzIGNob3NlbiAoZWl0aGVyIGJ5IGNvbW1hbmQgbGluZQorb3B0aW9uIG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUpLiBTZWUgJy13fC0td2ViJyBpbiB0aGUgT1BUSU9OUworc2VjdGlvbiBhYm92ZSBhbmQgbGlua2dpdDpnaXQtd2Vie2xpdGRkfWJyb3dzZVsxXS4KKworbWFuLnZpZXdlcgorfn5+fn5+fn5+fgorCitUaGUgJ21hbi52aWV3ZXInIGNvbmZpZyB2YXJpYWJsZSB3aWxsIGJlIGNoZWNrZWQgaWYgdGhlICdtYW4nIGZvcm1hdAoraXMgY2hvc2VuLiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKKworKiAibWFuIjogdXNlIHRoZSAnbWFuJyBwcm9ncmFtIGFzIHVzdWFsLAorKiAid29tYW4iOiB1c2UgJ2VtYWNzY2xpZW50JyB0byBsYXVuY2ggdGhlICJ3b21hbiIgbW9kZSBpbiBlbWFjcworKHRoaXMgb25seSB3b3JrcyBzdGFydGluZyB3aXRoIGVtYWNzY2xpZW50IHZlcnNpb25zIDIyKSwKKyogImtvbnF1ZXJvciI6IHVzZSAna2ZtY2xpZW50JyB0byBvcGVuIHRoZSBtYW4gcGFnZSBpbiBhIG5ldyBrb25xdWVyb3IKK3RhYiAoc2VlICdOb3RlIGFib3V0IGtvbnF1ZXJvcicgYmVsb3cpLgorCitWYWx1ZXMgZm9yIG90aGVyIHRvb2xzIGNhbiBiZSB1c2VkIGlmIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZworJ21hbi48dG9vbD4uY21kJyBjb25maWd1cmF0aW9uIGVudHJ5IChzZWUgYmVsb3cpLgorCitNdWx0aXBsZSB2YWx1ZXMgbWF5IGJlIGdpdmVuIHRvIHRoZSAnbWFuLnZpZXdlcicgY29uZmlndXJhdGlvbgordmFyaWFibGUuIFRoZWlyIGNvcnJlc3BvbmRpbmcgcHJvZ3JhbXMgd2lsbCBiZSB0cmllZCBpbiB0aGUgb3JkZXIKK2xpc3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCitGb3IgZXhhbXBsZSwgdGhpcyBjb25maWd1cmF0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlbbWFuXQorCQl2aWV3ZXIgPSBrb25xdWVyb3IKKwkJdmlld2VyID0gd29tYW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHRyeSB0byB1c2Uga29ucXVlcm9yIGZpcnN0LiBCdXQgdGhpcyBtYXkgZmFpbCAoZm9yIGV4YW1wbGUgaWYKK0RJU1BMQVkgaXMgbm90IHNldCkgYW5kIGluIHRoYXQgY2FzZSBlbWFjcycgd29tYW4gbW9kZSB3aWxsIGJlIHRyaWVkLgorCitJZiBldmVyeXRoaW5nIGZhaWxzLCBvciBpZiBubyB2aWV3ZXIgaXMgY29uZmlndXJlZCwgdGhlIHZpZXdlciBzcGVjaWZpZWQKK2luIHRoZSBHSVRfTUFOX1ZJRVdFUiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIHRyaWVkLiAgSWYgdGhhdAorZmFpbHMgdG9vLCB0aGUgJ21hbicgcHJvZ3JhbSB3aWxsIGJlIHRyaWVkIGFueXdheS4KKworbWFuLjx0b29sPi5wYXRoCit+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBleHBsaWNpdGx5IHByb3ZpZGUgYSBmdWxsIHBhdGggdG8geW91ciBwcmVmZXJyZWQgbWFuIHZpZXdlciBieQorc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnbWFuLjx0b29sPi5wYXRoJy4gRm9yIGV4YW1wbGUsIHlvdQorY2FuIGNvbmZpZ3VyZSB0aGUgYWJzb2x1dGUgcGF0aCB0byBrb25xdWVyb3IgYnkgc2V0dGluZworJ21hbi5rb25xdWVyb3IucGF0aCcuIE90aGVyd2lzZSwgJ2dpdCBoZWxwJyBhc3N1bWVzIHRoZSB0b29sIGlzCithdmFpbGFibGUgaW4gUEFUSC4KKworbWFuLjx0b29sPi5jbWQKK35+fn5+fn5+fn5+fn5+CisKK1doZW4gdGhlIG1hbiB2aWV3ZXIsIHNwZWNpZmllZCBieSB0aGUgJ21hbi52aWV3ZXInIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlcywgaXMgbm90IGFtb25nIHRoZSBzdXBwb3J0ZWQgb25lcywgdGhlbiB0aGUgY29ycmVzcG9uZGluZworJ21hbi48dG9vbD4uY21kJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHdpbGwgYmUgbG9va2VkIHVwLiBJZiB0aGlzCit2YXJpYWJsZSBleGlzdHMgdGhlbiB0aGUgc3BlY2lmaWVkIHRvb2wgd2lsbCBiZSB0cmVhdGVkIGFzIGEgY3VzdG9tCitjb21tYW5kIGFuZCBhIHNoZWxsIGV2YWwgd2lsbCBiZSB1c2VkIHRvIHJ1biB0aGUgY29tbWFuZCB3aXRoIHRoZSBtYW4KK3BhZ2UgcGFzc2VkIGFzIGFyZ3VtZW50cy4KKworTm90ZSBhYm91dCBrb25xdWVyb3IKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gJ2tvbnF1ZXJvcicgaXMgc3BlY2lmaWVkIGluIHRoZSAnbWFuLnZpZXdlcicgY29uZmlndXJhdGlvbgordmFyaWFibGUsIHdlIGxhdW5jaCAna2ZtY2xpZW50JyB0byB0cnkgdG8gb3BlbiB0aGUgbWFuIHBhZ2Ugb24gYW4KK2FscmVhZHkgb3BlbmVkIGtvbnF1ZXJvciBpbiBhIG5ldyB0YWIgaWYgcG9zc2libGUuCisKK0ZvciBjb25zaXN0ZW5jeSwgd2UgYWxzbyB0cnkgc3VjaCBhIHRyaWNrIGlmICdtYW4ua29ucXVlcm9yLnBhdGgnIGlzCitzZXQgdG8gc29tZXRoaW5nIGxpa2UgJ0FfUEFUSF9UTy9rb25xdWVyb3InLiBUaGF0IG1lYW5zIHdlIHdpbGwgdHJ5IHRvCitsYXVuY2ggJ0FfUEFUSF9UTy9rZm1jbGllbnQnIGluc3RlYWQuCisKK0lmIHlvdSByZWFsbHkgd2FudCB0byB1c2UgJ2tvbnF1ZXJvcicsIHRoZW4geW91IGNhbiB1c2Ugc29tZXRoaW5nIGxpa2UKK3RoZSBmb2xsb3dpbmc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVttYW5dCisJCXZpZXdlciA9IGtvbnEKKworCVttYW4gImtvbnEiXQorCQljbWQgPSBBX1BBVEhfVE8va29ucXVlcm9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSBhYm91dCBnaXQgY29uZmlnIC0tZ2xvYmFsCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworTm90ZSB0aGF0IGFsbCB0aGVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzaG91bGQgcHJvYmFibHkgYmUgc2V0Cit1c2luZyB0aGUgJy0tZ2xvYmFsJyBmbGFnLCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIGhlbHAuZm9ybWF0IHdlYgorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHdlYi5icm93c2VyIGZpcmVmb3gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithcyB0aGV5IGFyZSBwcm9iYWJseSBtb3JlIHVzZXIgc3BlY2lmaWMgdGhhbiByZXBvc2l0b3J5IHNwZWNpZmljLgorU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtYmFja2VuZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWJhY2tlbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTA3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWJhY2tlbmQudHh0CkBAIC0wLDAgKzEsMTk2IEBACitnaXQtaHR0cC1iYWNrZW5kKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1odHRwLWJhY2tlbmQgLSBTZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgb3ZlciBIVFRQCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBodHRwLWJhY2tlbmQnCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSBzaW1wbGUgQ0dJIHByb2dyYW0gdG8gc2VydmUgdGhlIGNvbnRlbnRzIG9mIGEgR2l0IHJlcG9zaXRvcnkgdG8gR2l0CitjbGllbnRzIGFjY2Vzc2luZyB0aGUgcmVwb3NpdG9yeSBvdmVyIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHByb3RvY29scy4KK1RoZSBwcm9ncmFtIHN1cHBvcnRzIGNsaWVudHMgZmV0Y2hpbmcgdXNpbmcgYm90aCB0aGUgc21hcnQgSFRUUCBwcm90b2NvbAorYW5kIHRoZSBiYWNrd2FyZHMtY29tcGF0aWJsZSBkdW1iIEhUVFAgcHJvdG9jb2wsIGFzIHdlbGwgYXMgY2xpZW50cworcHVzaGluZyB1c2luZyB0aGUgc21hcnQgSFRUUCBwcm90b2NvbC4KKworSXQgdmVyaWZpZXMgdGhhdCB0aGUgZGlyZWN0b3J5IGhhcyB0aGUgbWFnaWMgZmlsZQorImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgYW5kIGl0IHdpbGwgcmVmdXNlIHRvIGV4cG9ydCBhbnkgZ2l0IGRpcmVjdG9yeQordGhhdCBoYXNuJ3QgZXhwbGljaXRseSBiZWVuIG1hcmtlZCBmb3IgZXhwb3J0IHRoaXMgd2F5ICh1bmxlc3MgdGhlCitHSVRfSFRUUF9FWFBPUlRfQUxMIGVudmlyb25tZW50YWwgdmFyaWFibGUgaXMgc2V0KS4KKworQnkgZGVmYXVsdCwgb25seSB0aGUgYHVwbG9hZC1wYWNrYCBzZXJ2aWNlIGlzIGVuYWJsZWQsIHdoaWNoIHNlcnZlcworJ2dpdCBmZXRjaC1wYWNrJyBhbmQgJ2dpdCBscy1yZW1vdGUnIGNsaWVudHMsIHdoaWNoIGFyZSBpbnZva2VkIGZyb20KKydnaXQgZmV0Y2gnLCAnZ2l0IHB1bGwnLCBhbmQgJ2dpdCBjbG9uZScuICBJZiB0aGUgY2xpZW50IGlzIGF1dGhlbnRpY2F0ZWQsCit0aGUgYHJlY2VpdmUtcGFja2Agc2VydmljZSBpcyBlbmFibGVkLCB3aGljaCBzZXJ2ZXMgJ2dpdCBzZW5kLXBhY2snCitjbGllbnRzLCB3aGljaCBpcyBpbnZva2VkIGZyb20gJ2dpdCBwdXNoJy4KKworU0VSVklDRVMKKy0tLS0tLS0tCitUaGVzZSBzZXJ2aWNlcyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCB1c2luZyB0aGUgcGVyLXJlcG9zaXRvcnkKK2NvbmZpZ3VyYXRpb24gZmlsZToKKworaHR0cC5nZXRhbnlmaWxlOjoKKwlUaGlzIHNlcnZlcyBHaXQgY2xpZW50cyBvbGRlciB0aGFuIHZlcnNpb24gMS42LjYgdGhhdCBhcmUgdW5hYmxlIHRvIHVzZSB0aGUKKwl1cGxvYWQgcGFjayBzZXJ2aWNlLiAgV2hlbiBlbmFibGVkLCBjbGllbnRzIGFyZSBhYmxlIHRvIHJlYWQKKwlhbnkgZmlsZSB3aXRoaW4gdGhlIHJlcG9zaXRvcnksIGluY2x1ZGluZyBvYmplY3RzIHRoYXQgYXJlCisJbm8gbG9uZ2VyIHJlYWNoYWJsZSBmcm9tIGEgYnJhbmNoIGJ1dCBhcmUgc3RpbGwgcHJlc2VudC4KKwlJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhIHJlcG9zaXRvcnkgY2FuIGRpc2FibGUgaXQKKwlieSBzZXR0aW5nIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtIHRvIGBmYWxzZWAuCisKK2h0dHAudXBsb2FkcGFjazo6CisJVGhpcyBzZXJ2ZXMgJ2dpdCBmZXRjaC1wYWNrJyBhbmQgJ2dpdCBscy1yZW1vdGUnIGNsaWVudHMuCisJSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYSByZXBvc2l0b3J5IGNhbiBkaXNhYmxlIGl0CisJYnkgc2V0dGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbSB0byBgZmFsc2VgLgorCitodHRwLnJlY2VpdmVwYWNrOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IHNlbmQtcGFjaycgY2xpZW50cywgYWxsb3dpbmcgcHVzaC4gIEl0IGlzCisJZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3IgYW5vbnltb3VzIHVzZXJzLCBhbmQgZW5hYmxlZCBieQorCWRlZmF1bHQgZm9yIHVzZXJzIGF1dGhlbnRpY2F0ZWQgYnkgdGhlIHdlYiBzZXJ2ZXIuICBJdCBjYW4gYmUKKwlkaXNhYmxlZCBieSBzZXR0aW5nIHRoaXMgaXRlbSB0byBgZmFsc2VgLCBvciBlbmFibGVkIGZvciBhbGwKKwl1c2VycywgaW5jbHVkaW5nIGFub255bW91cyB1c2VycywgYnkgc2V0dGluZyBpdCB0byBgdHJ1ZWAuCisKK1VSTCBUUkFOU0xBVElPTgorLS0tLS0tLS0tLS0tLS0tCitUbyBkZXRlcm1pbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSByZXBvc2l0b3J5IG9uIGRpc2ssICdnaXQgaHR0cC1iYWNrZW5kJworY29uY2F0ZW5hdGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgUEFUSF9JTkZPLCB3aGljaCBpcyBzZXQKK2F1dG9tYXRpY2FsbHkgYnkgdGhlIHdlYiBzZXJ2ZXIsIGFuZCBHSVRfUFJPSkVDVF9ST09ULCB3aGljaCBtdXN0IGJlIHNldAorbWFudWFsbHkgaW4gdGhlIHdlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbi4gIElmIEdJVF9QUk9KRUNUX1JPT1QgaXMgbm90CitzZXQsICdnaXQgaHR0cC1iYWNrZW5kJyByZWFkcyBQQVRIX1RSQU5TTEFURUQsIHdoaWNoIGlzIGFsc28gc2V0CithdXRvbWF0aWNhbGx5IGJ5IHRoZSB3ZWIgc2VydmVyLgorCitFWEFNUExFUworLS0tLS0tLS0KK0FsbCBvZiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIG1hcCAnaHR0cDovLyRob3N0bmFtZS9naXQvZm9vL2Jhci5naXQnCit0byAnL3Zhci93d3cvZ2l0L2Zvby9iYXIuZ2l0Jy4KKworQXBhY2hlIDIueDo6CisJRW5zdXJlIG1vZF9jZ2ksIG1vZF9hbGlhcywgYW5kIG1vZF9lbnYgYXJlIGVuYWJsZWQsIHNldAorCUdJVF9QUk9KRUNUX1JPT1QgKG9yIERvY3VtZW50Um9vdCkgYXBwcm9wcmlhdGVseSwgYW5kCisJY3JlYXRlIGEgU2NyaXB0QWxpYXMgdG8gdGhlIENHSToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NldEVudiBHSVRfUFJPSkVDVF9ST09UIC92YXIvd3d3L2dpdAorU2V0RW52IEdJVF9IVFRQX0VYUE9SVF9BTEwKK1NjcmlwdEFsaWFzIC9naXQvIC91c3IvbGliZXhlYy9naXQtY29yZS9naXQtaHR0cC1iYWNrZW5kLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVG8gZW5hYmxlIGFub255bW91cyByZWFkIGFjY2VzcyBidXQgYXV0aGVudGljYXRlZCB3cml0ZSBhY2Nlc3MsCityZXF1aXJlIGF1dGhvcml6YXRpb24gd2l0aCBhIExvY2F0aW9uTWF0Y2ggZGlyZWN0aXZlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPExvY2F0aW9uTWF0Y2ggIl4vZ2l0Ly4qL2dpdC1yZWNlaXZlLXBhY2skIj4KKwlBdXRoVHlwZSBCYXNpYworCUF1dGhOYW1lICJHaXQgQWNjZXNzIgorCVJlcXVpcmUgZ3JvdXAgY29tbWl0dGVycworCS4uLgorPC9Mb2NhdGlvbk1hdGNoPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVG8gcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBmb3IgYm90aCByZWFkcyBhbmQgd3JpdGVzLCB1c2UgYSBMb2NhdGlvbgorZGlyZWN0aXZlIGFyb3VuZCB0aGUgcmVwb3NpdG9yeSwgb3Igb25lIG9mIGl0cyBwYXJlbnQgZGlyZWN0b3JpZXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8TG9jYXRpb24gL2dpdC9wcml2YXRlPgorCUF1dGhUeXBlIEJhc2ljCisJQXV0aE5hbWUgIlByaXZhdGUgR2l0IEFjY2VzcyIKKwlSZXF1aXJlIGdyb3VwIGNvbW1pdHRlcnMKKwkuLi4KKzwvTG9jYXRpb24+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyBzZXJ2ZSBnaXR3ZWIgYXQgdGhlIHNhbWUgdXJsLCB1c2UgYSBTY3JpcHRBbGlhc01hdGNoIHRvIG9ubHkKK3Rob3NlIFVSTHMgdGhhdCAnZ2l0IGh0dHAtYmFja2VuZCcgY2FuIGhhbmRsZSwgYW5kIGZvcndhcmQgdGhlCityZXN0IHRvIGdpdHdlYjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NjcmlwdEFsaWFzTWF0Y2ggXAorCSIoP3gpXi9naXQvKC4qLyhIRUFEIHwgXAorCQkJaW5mby9yZWZzIHwgXAorCQkJb2JqZWN0cy8oaW5mby9bXi9dKyB8IFwKKwkJCQkgWzAtOWEtZl17Mn0vWzAtOWEtZl17Mzh9IHwgXAorCQkJCSBwYWNrL3BhY2stWzAtOWEtZl17NDB9XC4ocGFja3xpZHgpKSB8IFwKKwkJCWdpdC0odXBsb2FkfHJlY2VpdmUpLXBhY2spKSQiIFwKKwkvdXNyL2xpYmV4ZWMvZ2l0LWNvcmUvZ2l0LWh0dHAtYmFja2VuZC8kMQorCitTY3JpcHRBbGlhcyAvZ2l0LyAvdmFyL3d3dy9jZ2ktYmluL2dpdHdlYi5jZ2kvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyBzZXJ2ZSBtdWx0aXBsZSByZXBvc2l0b3JpZXMgZnJvbSBkaWZmZXJlbnQgbGlua2dpdDpnaXRuYW1lc3BhY2VzWzddIGluIGEKK3NpbmdsZSByZXBvc2l0b3J5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0RW52SWYgUmVxdWVzdF9VUkkgIl4vZ2l0LyhbXi9dKikiIEdJVF9OQU1FU1BBQ0U9JDEKK1NjcmlwdEFsaWFzTWF0Y2ggXi9naXQvW14vXSooLiopIC91c3IvbGliZXhlYy9naXQtY29yZS9naXQtaHR0cC1iYWNrZW5kL3N0b3JhZ2UuZ2l0JDEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWNjZWxlcmF0ZWQgc3RhdGljIEFwYWNoZSAyLng6OgorCVNpbWlsYXIgdG8gdGhlIGFib3ZlLCBidXQgQXBhY2hlIGNhbiBiZSB1c2VkIHRvIHJldHVybiBzdGF0aWMKKwlmaWxlcyB0aGF0IGFyZSBzdG9yZWQgb24gZGlzay4JT24gbWFueSBzeXN0ZW1zIHRoaXMgbWF5CisJYmUgbW9yZSBlZmZpY2llbnQgYXMgQXBhY2hlIGNhbiBhc2sgdGhlIGtlcm5lbCB0byBjb3B5IHRoZQorCWZpbGUgY29udGVudHMgZnJvbSB0aGUgZmlsZSBzeXN0ZW0gZGlyZWN0bHkgdG8gdGhlIG5ldHdvcms6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTZXRFbnYgR0lUX1BST0pFQ1RfUk9PVCAvdmFyL3d3dy9naXQKKworQWxpYXNNYXRjaCBeL2dpdC8oLiovb2JqZWN0cy9bMC05YS1mXXsyfS9bMC05YS1mXXszOH0pJCAgICAgICAgICAvdmFyL3d3dy9naXQvJDEKK0FsaWFzTWF0Y2ggXi9naXQvKC4qL29iamVjdHMvcGFjay9wYWNrLVswLTlhLWZdezQwfS4ocGFja3xpZHgpKSQgL3Zhci93d3cvZ2l0LyQxCitTY3JpcHRBbGlhcyAvZ2l0LyAvdXNyL2xpYmV4ZWMvZ2l0LWNvcmUvZ2l0LWh0dHAtYmFja2VuZC8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgY2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlIGdpdHdlYiBjb25maWd1cmF0aW9uOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0RW52IEdJVF9QUk9KRUNUX1JPT1QgL3Zhci93d3cvZ2l0CisKK0FsaWFzTWF0Y2ggXi9naXQvKC4qL29iamVjdHMvWzAtOWEtZl17Mn0vWzAtOWEtZl17Mzh9KSQgICAgICAgICAgL3Zhci93d3cvZ2l0LyQxCitBbGlhc01hdGNoIF4vZ2l0LyguKi9vYmplY3RzL3BhY2svcGFjay1bMC05YS1mXXs0MH0uKHBhY2t8aWR4KSkkIC92YXIvd3d3L2dpdC8kMQorU2NyaXB0QWxpYXNNYXRjaCBcCisJIig/eCleL2dpdC8oLiovKEhFQUQgfCBcCisJCQlpbmZvL3JlZnMgfCBcCisJCQlvYmplY3RzL2luZm8vW14vXSsgfCBcCisJCQlnaXQtKHVwbG9hZHxyZWNlaXZlKS1wYWNrKSkkIiBcCisJL3Vzci9saWJleGVjL2dpdC1jb3JlL2dpdC1odHRwLWJhY2tlbmQvJDEKK1NjcmlwdEFsaWFzIC9naXQvIC92YXIvd3d3L2NnaS1iaW4vZ2l0d2ViLmNnaS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitFTlZJUk9OTUVOVAorLS0tLS0tLS0tLS0KKydnaXQgaHR0cC1iYWNrZW5kJyByZWxpZXMgdXBvbiB0aGUgQ0dJIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZXQKK2J5IHRoZSBpbnZva2luZyB3ZWIgc2VydmVyLCBpbmNsdWRpbmc6CisKKyogUEFUSF9JTkZPIChpZiBHSVRfUFJPSkVDVF9ST09UIGlzIHNldCwgb3RoZXJ3aXNlIFBBVEhfVFJBTlNMQVRFRCkKKyogUkVNT1RFX1VTRVIKKyogUkVNT1RFX0FERFIKKyogQ09OVEVOVF9UWVBFCisqIFFVRVJZX1NUUklORworKiBSRVFVRVNUX01FVEhPRAorCitUaGUgR0lUX0hUVFBfRVhQT1JUX0FMTCBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIG1heSBiZSBwYXNzZWQgdG8KKydnaXQtaHR0cC1iYWNrZW5kJyB0byBieXBhc3MgdGhlIGNoZWNrIGZvciB0aGUgImdpdC1kYWVtb24tZXhwb3J0LW9rIgorZmlsZSBpbiBlYWNoIHJlcG9zaXRvcnkgYmVmb3JlIGFsbG93aW5nIGV4cG9ydCBvZiB0aGF0IHJlcG9zaXRvcnkuCisKK1RoZSBiYWNrZW5kIHByb2Nlc3Mgc2V0cyBHSVRfQ09NTUlUVEVSX05BTUUgdG8gJyRSRU1PVEVfVVNFUicgYW5kCitHSVRfQ09NTUlUVEVSX0VNQUlMIHRvICckXHtSRU1PVEVfVVNFUn1AaHR0cC4kXHtSRU1PVEVfQUREUlx9JywKK2Vuc3VyaW5nIHRoYXQgYW55IHJlZmxvZ3MgY3JlYXRlZCBieSAnZ2l0LXJlY2VpdmUtcGFjaycgY29udGFpbiBzb21lCitpZGVudGlmeWluZyBpbmZvcm1hdGlvbiBvZiB0aGUgcmVtb3RlIHVzZXIgd2hvIHBlcmZvcm1lZCB0aGUgcHVzaC4KKworQWxsIENHSSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSB0byBlYWNoIG9mIHRoZSBob29rcworaW52b2tlZCBieSB0aGUgJ2dpdC1yZWNlaXZlLXBhY2snLgorCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+LgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtZmV0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1mZXRjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwY2QxZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtZmV0Y2gudHh0CkBAIC0wLDAgKzEsNTIgQEAKK2dpdC1odHRwLWZldGNoKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaHR0cC1mZXRjaCAtIERvd25sb2FkIGZyb20gYSByZW1vdGUgZ2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaHR0cC1mZXRjaCcgWy1jXSBbLXRdIFstYV0gWy1kXSBbLXZdIFstdyBmaWxlbmFtZV0gWy0tcmVjb3Zlcl0gWy0tc3RkaW5dIDxjb21taXQ+IDx1cmw+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorRG93bmxvYWRzIGEgcmVtb3RlIGdpdCByZXBvc2l0b3J5IHZpYSBIVFRQLgorCisqTk9URSo6IHVzZSBvZiB0aGlzIGNvbW1hbmQgd2l0aG91dCAtYSBpcyBkZXByZWNhdGVkLiAgVGhlIC1hCitiZWhhdmlvdXIgd2lsbCBiZWNvbWUgdGhlIGRlZmF1bHQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKworT1BUSU9OUworLS0tLS0tLQorY29tbWl0LWlkOjoKKyAgICAgICAgRWl0aGVyIHRoZSBoYXNoIG9yIHRoZSBmaWxlbmFtZSB1bmRlciBbVVJMXS9yZWZzLyB0bworICAgICAgICBwdWxsLgorCistYzo6CisJR2V0IHRoZSBjb21taXQgb2JqZWN0cy4KKy10OjoKKwlHZXQgdHJlZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21taXQgb2JqZWN0cy4KKy1hOjoKKwlHZXQgYWxsIHRoZSBvYmplY3RzLgorLXY6OgorCVJlcG9ydCB3aGF0IGlzIGRvd25sb2FkZWQuCisKKy13IDxmaWxlbmFtZT46OgorICAgICAgICBXcml0ZXMgdGhlIGNvbW1pdC1pZCBpbnRvIHRoZSBmaWxlbmFtZSB1bmRlciAkR0lUX0RJUi9yZWZzLzxmaWxlbmFtZT4gb24KKyAgICAgICAgdGhlIGxvY2FsIGVuZCBhZnRlciB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCisKKy0tc3RkaW46OgorCUluc3RlYWQgb2YgYSBjb21taXQgaWQgb24gdGhlIGNvbW1hbmQgbGluZSAod2hpY2ggaXMgbm90IGV4cGVjdGVkIGluIHRoaXMKKwljYXNlKSwgJ2dpdCBodHRwLWZldGNoJyBleHBlY3RzIGxpbmVzIG9uIHN0ZGluIGluIHRoZSBmb3JtYXQKKworCQk8Y29tbWl0LWlkPlsnXHQnPGZpbGVuYW1lLWFzLWluLS13Pl0KKworLS1yZWNvdmVyOjoKKwlWZXJpZnkgdGhhdCBldmVyeXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRhcmdldCBpcyBmZXRjaGVkLiAgVXNlZCBhZnRlcgorCWFuIGVhcmxpZXIgZmV0Y2ggaXMgaW50ZXJydXB0ZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2NzM2MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQKQEAgLTAsMCArMSw5NyBAQAorZ2l0LWh0dHAtcHVzaCgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaHR0cC1wdXNoIC0gUHVzaCBvYmplY3RzIG92ZXIgSFRUUC9EQVYgdG8gYW5vdGhlciByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGh0dHAtcHVzaCcgWy0tYWxsXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tdmVyYm9zZV0gPHVybD4gPHJlZj4gWzxyZWY+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1NlbmRzIG1pc3Npbmcgb2JqZWN0cyB0byByZW1vdGUgcmVwb3NpdG9yeSwgYW5kIHVwZGF0ZXMgdGhlCityZW1vdGUgYnJhbmNoLgorCisqTk9URSo6IFRoaXMgY29tbWFuZCBpcyB0ZW1wb3JhcmlseSBkaXNhYmxlZCBpZiB5b3VyIGxpYmN1cmwKK2lzIG9sZGVyIHRoYW4gNy4xNiwgYXMgdGhlIGNvbWJpbmF0aW9uIGhhcyBiZWVuIHJlcG9ydGVkCitub3QgdG8gd29yayBhbmQgc29tZXRpbWVzIGNvcnJ1cHRzIHJlcG9zaXRvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKy0tYWxsOjoKKwlEbyBub3QgYXNzdW1lIHRoYXQgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGlzIGNvbXBsZXRlIGluIGl0cworCWN1cnJlbnQgc3RhdGUsIGFuZCB2ZXJpZnkgYWxsIG9iamVjdHMgaW4gdGhlIGVudGlyZSBsb2NhbAorCXJlZidzIGhpc3RvcnkgZXhpc3QgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LgorCistLWZvcmNlOjoKKwlVc3VhbGx5LCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdAorCWlzIG5vdCBhbiBhbmNlc3RvciBvZiB0aGUgbG9jYWwgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgorCVRoaXMgZmxhZyBkaXNhYmxlcyB0aGUgY2hlY2suICBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdAorCXRoZSByZW1vdGUgcmVwb3NpdG9yeSBjYW4gbG9zZSBjb21taXRzOyB1c2UgaXQgd2l0aAorCWNhcmUuCisKKy0tZHJ5LXJ1bjo6CisJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgdXBkYXRlcy4KKworLS12ZXJib3NlOjoKKwlSZXBvcnQgdGhlIGxpc3Qgb2Ygb2JqZWN0cyBiZWluZyB3YWxrZWQgbG9jYWxseSBhbmQgdGhlCisJbGlzdCBvZiBvYmplY3RzIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKworLWQ6OgorLUQ6OgorCVJlbW92ZSA8cmVmPiBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LiAgVGhlIHNwZWNpZmllZCBicmFuY2gKKwljYW5ub3QgYmUgdGhlIHJlbW90ZSBIRUFELiAgSWYgLWQgaXMgc3BlY2lmaWVkIHRoZSBmb2xsb3dpbmcKKwlvdGhlciBjb25kaXRpb25zIG11c3QgYWxzbyBiZSBtZXQ6CisKKwktIFJlbW90ZSBIRUFEIG11c3QgcmVzb2x2ZSB0byBhbiBvYmplY3QgdGhhdCBleGlzdHMgbG9jYWxseQorCS0gU3BlY2lmaWVkIGJyYW5jaCByZXNvbHZlcyB0byBhbiBvYmplY3QgdGhhdCBleGlzdHMgbG9jYWxseQorCS0gU3BlY2lmaWVkIGJyYW5jaCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgcmVtb3RlIEhFQUQKKworPHJlZj4uLi46OgorCVRoZSByZW1vdGUgcmVmcyB0byB1cGRhdGUuCisKKworU3BlY2lmeWluZyB0aGUgUmVmcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBICc8cmVmPicgc3BlY2lmaWNhdGlvbiBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHBhdHRlcm4sIG9yIGEgcGFpcgorb2Ygc3VjaCBwYXR0ZXJucyBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAiOiIgKHRoaXMgbWVhbnMgdGhhdCBhIHJlZiBuYW1lCitjYW5ub3QgaGF2ZSBhIGNvbG9uIGluIGl0KS4gIEEgc2luZ2xlIHBhdHRlcm4gJzxuYW1lPicgaXMganVzdCBhCitzaG9ydGhhbmQgZm9yICc8bmFtZT46PG5hbWU+Jy4KKworRWFjaCBwYXR0ZXJuIHBhaXIgY29uc2lzdHMgb2YgdGhlIHNvdXJjZSBzaWRlIChiZWZvcmUgdGhlIGNvbG9uKQorYW5kIHRoZSBkZXN0aW5hdGlvbiBzaWRlIChhZnRlciB0aGUgY29sb24pLiAgVGhlIHJlZiB0byBiZQorcHVzaGVkIGlzIGRldGVybWluZWQgYnkgZmluZGluZyBhIG1hdGNoIHRoYXQgbWF0Y2hlcyB0aGUgc291cmNlCitzaWRlLCBhbmQgd2hlcmUgaXQgaXMgcHVzaGVkIGlzIGRldGVybWluZWQgYnkgdXNpbmcgdGhlCitkZXN0aW5hdGlvbiBzaWRlLgorCisgLSBJdCBpcyBhbiBlcnJvciBpZiA8c3JjPiBkb2VzIG5vdCBtYXRjaCBleGFjdGx5IG9uZSBvZiB0aGUKKyAgIGxvY2FsIHJlZnMuCisKKyAtIElmIDxkc3Q+IGRvZXMgbm90IG1hdGNoIGFueSByZW1vdGUgcmVmLCBlaXRoZXIKKworICAgKiBpdCBoYXMgdG8gc3RhcnQgd2l0aCAicmVmcy8iOyA8ZHN0PiBpcyB1c2VkIGFzIHRoZQorICAgICBkZXN0aW5hdGlvbiBsaXRlcmFsbHkgaW4gdGhpcyBjYXNlLgorCisgICAqIDxzcmM+ID09IDxkc3Q+IGFuZCB0aGUgcmVmIHRoYXQgbWF0Y2hlZCB0aGUgPHNyYz4gbXVzdCBub3QKKyAgICAgZXhpc3QgaW4gdGhlIHNldCBvZiByZW1vdGUgcmVmczsgdGhlIHJlZiBtYXRjaGVkIDxzcmM+CisgICAgIGxvY2FsbHkgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24uCisKK1dpdGhvdXQgJy0tZm9yY2UnLCB0aGUgPHNyYz4gcmVmIGlzIHN0b3JlZCBhdCB0aGUgcmVtb3RlIG9ubHkgaWYKKzxkc3Q+IGRvZXMgbm90IGV4aXN0LCBvciA8ZHN0PiBpcyBhIHByb3BlciBzdWJzZXQgKGkuZS4gYW4KK2FuY2VzdG9yKSBvZiA8c3JjPi4gIFRoaXMgY2hlY2ssIGtub3duIGFzICJmYXN0LWZvcndhcmQgY2hlY2siLAoraXMgcGVyZm9ybWVkIGluIG9yZGVyIHRvIGF2b2lkIGFjY2lkZW50YWxseSBvdmVyd3JpdGluZyB0aGUKK3JlbW90ZSByZWYgYW5kIGxvc2Ugb3RoZXIgcGVvcGxlcycgY29tbWl0cyBmcm9tIHRoZXJlLgorCitXaXRoICctLWZvcmNlJywgdGhlIGZhc3QtZm9yd2FyZCBjaGVjayBpcyBkaXNhYmxlZCBmb3IgYWxsIHJlZnMuCisKK09wdGlvbmFsbHksIGEgPHJlZj4gcGFyYW1ldGVyIGNhbiBiZSBwcmVmaXhlZCB3aXRoIGEgcGx1cyAnKycgc2lnbgordG8gZGlzYWJsZSB0aGUgZmFzdC1mb3J3YXJkIGNoZWNrIG9ubHkgb24gdGhhdCByZWYuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW1hcC1zZW5kLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWltYXAtc2VuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1ZDI4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWltYXAtc2VuZC50eHQKQEAgLTAsMCArMSwxNTkgQEAKK2dpdC1pbWFwLXNlbmQoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWltYXAtc2VuZCAtIFNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgZnJvbSBzdGRpbiB0byBhbiBJTUFQIGZvbGRlcgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBpbWFwLXNlbmQnCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgdXBsb2FkcyBhIG1haWxib3ggZ2VuZXJhdGVkIHdpdGggJ2dpdCBmb3JtYXQtcGF0Y2gnCitpbnRvIGFuIElNQVAgZHJhZnRzIGZvbGRlci4gIFRoaXMgYWxsb3dzIHBhdGNoZXMgdG8gYmUgc2VudCBhcworb3RoZXIgZW1haWwgaXMgd2hlbiB1c2luZyBtYWlsIGNsaWVudHMgdGhhdCBjYW5ub3QgcmVhZCBtYWlsYm94CitmaWxlcyBkaXJlY3RseS4gVGhlIGNvbW1hbmQgYWxzbyB3b3JrcyB3aXRoIGFueSBnZW5lcmFsIG1haWxib3gKK2luIHdoaWNoIGVtYWlscyBoYXZlIHRoZSBmaWVsZHMgIkZyb20iLCAiRGF0ZSIsIGFuZCAiU3ViamVjdCIgaW4KK3RoYXQgb3JkZXIuCisKK1R5cGljYWwgdXNhZ2UgaXMgc29tZXRoaW5nIGxpa2U6CisKK2dpdCBmb3JtYXQtcGF0Y2ggLS1zaWdub2ZmIC0tc3Rkb3V0IC0tYXR0YWNoIG9yaWdpbiB8IGdpdCBpbWFwLXNlbmQKKworCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKK1RvIHVzZSB0aGUgdG9vbCwgaW1hcC5mb2xkZXIgYW5kIGVpdGhlciBpbWFwLnR1bm5lbCBvciBpbWFwLmhvc3QgbXVzdCBiZSBzZXQKK3RvIGFwcHJvcHJpYXRlIHZhbHVlcy4KKworVmFyaWFibGVzCit+fn5+fn5+fn4KKworaW1hcC5mb2xkZXI6OgorCVRoZSBmb2xkZXIgdG8gZHJvcCB0aGUgbWFpbHMgaW50bywgd2hpY2ggaXMgdHlwaWNhbGx5IHRoZSBEcmFmdHMKKwlmb2xkZXIuIEZvciBleGFtcGxlOiAiSU5CT1guRHJhZnRzIiwgIklOQk9YL0RyYWZ0cyIgb3IKKwkiW0dtYWlsXS9EcmFmdHMiLiBSZXF1aXJlZCB0byB1c2UgaW1hcC1zZW5kLgorCitpbWFwLnR1bm5lbDo6CisJQ29tbWFuZCB1c2VkIHRvIHNldHVwIGEgdHVubmVsIHRvIHRoZSBJTUFQIHNlcnZlciB0aHJvdWdoIHdoaWNoCisJY29tbWFuZHMgd2lsbCBiZSBwaXBlZCBpbnN0ZWFkIG9mIHVzaW5nIGEgZGlyZWN0IG5ldHdvcmsgY29ubmVjdGlvbgorCXRvIHRoZSBzZXJ2ZXIuIFJlcXVpcmVkIHdoZW4gaW1hcC5ob3N0IGlzIG5vdCBzZXQgdG8gdXNlIGltYXAtc2VuZC4KKworaW1hcC5ob3N0OjoKKwlBIFVSTCBpZGVudGlmeWluZyB0aGUgc2VydmVyLiBVc2UgYSBgaW1hcDovL2AgcHJlZml4IGZvciBub24tc2VjdXJlCisJY29ubmVjdGlvbnMgYW5kIGEgYGltYXBzOi8vYCBwcmVmaXggZm9yIHNlY3VyZSBjb25uZWN0aW9ucy4KKwlJZ25vcmVkIHdoZW4gaW1hcC50dW5uZWwgaXMgc2V0LCBidXQgcmVxdWlyZWQgdG8gdXNlIGltYXAtc2VuZAorCW90aGVyd2lzZS4KKworaW1hcC51c2VyOjoKKwlUaGUgdXNlcm5hbWUgdG8gdXNlIHdoZW4gbG9nZ2luZyBpbiB0byB0aGUgc2VydmVyLgorCitpbWFwLnBhc3M6OgorCVRoZSBwYXNzd29yZCB0byB1c2Ugd2hlbiBsb2dnaW5nIGluIHRvIHRoZSBzZXJ2ZXIuCisKK2ltYXAucG9ydDo6CisJQW4gaW50ZWdlciBwb3J0IG51bWJlciB0byBjb25uZWN0IHRvIG9uIHRoZSBzZXJ2ZXIuCisJRGVmYXVsdHMgdG8gMTQzIGZvciBpbWFwOi8vIGhvc3RzIGFuZCA5OTMgZm9yIGltYXBzOi8vIGhvc3RzLgorCUlnbm9yZWQgd2hlbiBpbWFwLnR1bm5lbCBpcyBzZXQuCisKK2ltYXAuc3NsdmVyaWZ5OjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgdmVyaWZpY2F0aW9uIG9mIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUKKwl1c2VkIGJ5IHRoZSBTU0wvVExTIGNvbm5lY3Rpb24uIERlZmF1bHQgaXMgYHRydWVgLiBJZ25vcmVkIHdoZW4KKwlpbWFwLnR1bm5lbCBpcyBzZXQuCisKK2ltYXAucHJlZm9ybWF0dGVkSFRNTDo6CisJQSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSB1c2Ugb2YgaHRtbCBlbmNvZGluZyB3aGVuIHNlbmRpbmcKKwlhIHBhdGNoLiAgQW4gaHRtbCBlbmNvZGVkIHBhdGNoIHdpbGwgYmUgYnJhY2tldGVkIHdpdGggPHByZT4KKwlhbmQgaGF2ZSBhIGNvbnRlbnQgdHlwZSBvZiB0ZXh0L2h0bWwuICBJcm9uaWNhbGx5LCBlbmFibGluZyB0aGlzCisJb3B0aW9uIGNhdXNlcyBUaHVuZGVyYmlyZCB0byBzZW5kIHRoZSBwYXRjaCBhcyBhIHBsYWluL3RleHQsCisJZm9ybWF0PWZpeGVkIGVtYWlsLiAgRGVmYXVsdCBpcyBgZmFsc2VgLgorCitpbWFwLmF1dGhNZXRob2Q6OgorCVNwZWNpZnkgYXV0aGVudGljYXRlIG1ldGhvZCBmb3IgYXV0aGVudGljYXRpb24gd2l0aCBJTUFQIHNlcnZlci4KKwlDdXJyZW50IHN1cHBvcnRlZCBtZXRob2QgaXMgJ0NSQU0tTUQ1JyBvbmx5LgorCitFeGFtcGxlcworfn5+fn5+fn4KKworVXNpbmcgdHVubmVsIG1vZGU6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCitbaW1hcF0KKyAgICBmb2xkZXIgPSAiSU5CT1guRHJhZnRzIgorICAgIHR1bm5lbCA9ICJzc2ggLXEgLUMgdXNlckBleGFtcGxlLmNvbSAvdXNyL2Jpbi9pbWFwZCAuL01haWxkaXIgMj4gL2Rldi9udWxsIgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVXNpbmcgZGlyZWN0IG1vZGU6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KK1tpbWFwXQorICAgIGZvbGRlciA9ICJJTkJPWC5EcmFmdHMiCisgICAgaG9zdCA9IGltYXA6Ly9pbWFwLmV4YW1wbGUuY29tCisgICAgdXNlciA9IGJvYgorICAgIHBhc3MgPSBwNHNzdzByZAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVXNpbmcgZGlyZWN0IG1vZGUgd2l0aCBTU0w6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KK1tpbWFwXQorICAgIGZvbGRlciA9ICJJTkJPWC5EcmFmdHMiCisgICAgaG9zdCA9IGltYXBzOi8vaW1hcC5leGFtcGxlLmNvbQorICAgIHVzZXIgPSBib2IKKyAgICBwYXNzID0gcDRzc3cwcmQKKyAgICBwb3J0ID0gMTIzCisgICAgc3NsdmVyaWZ5ID0gZmFsc2UKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKKworRVhBTVBMRQorLS0tLS0tLQorVG8gc3VibWl0IHBhdGNoZXMgdXNpbmcgR01haWwncyBJTUFQIGludGVyZmFjZSwgZmlyc3QsIGVkaXQgeW91ciB+Ly5naXRjb25maWcKK3RvIHNwZWNpZnkgeW91ciBhY2NvdW50IHNldHRpbmdzOgorCistLS0tLS0tLS0KK1tpbWFwXQorCWZvbGRlciA9ICJbR21haWxdL0RyYWZ0cyIKKwlob3N0ID0gaW1hcHM6Ly9pbWFwLmdtYWlsLmNvbQorCXVzZXIgPSB1c2VyQGdtYWlsLmNvbQorCXBvcnQgPSA5OTMKKwlzc2x2ZXJpZnkgPSBmYWxzZQorLS0tLS0tLS0tCisKK1lvdSBtaWdodCBuZWVkIHRvIGluc3RlYWQgdXNlOiBmb2xkZXIgPSAiW0dvb2dsZSBNYWlsXS9EcmFmdHMiIGlmIHlvdSBnZXQgYW4gZXJyb3IKK3RoYXQgdGhlICJGb2xkZXIgZG9lc24ndCBleGlzdCIuCisKK09uY2UgdGhlIGNvbW1pdHMgYXJlIHJlYWR5IHRvIGJlIHNlbnQsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgJCBnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC1NIC0tc3Rkb3V0IG9yaWdpbi9tYXN0ZXIgfCBnaXQgaW1hcC1zZW5kCisKK0p1c3QgbWFrZSBzdXJlIHRvIGRpc2FibGUgbGluZSB3cmFwcGluZyBpbiB0aGUgZW1haWwgY2xpZW50IChHTWFpbCdzIHdlYgoraW50ZXJmYWNlIHdpbGwgd3JhcCBsaW5lcyBubyBtYXR0ZXIgd2hhdCwgc28geW91IG5lZWQgdG8gdXNlIGEgcmVhbAorSU1BUCBjbGllbnQpLgorCitDQVVUSU9OCistLS0tLS0tCitJdCBpcyBzdGlsbCB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBlbWFpbCBtZXNzYWdlCitzZW50IGJ5IHlvdXIgZW1haWwgcHJvZ3JhbSBtZWV0cyB0aGUgc3RhbmRhcmRzIG9mIHlvdXIgcHJvamVjdC4KK01hbnkgcHJvamVjdHMgZG8gbm90IGxpa2UgcGF0Y2hlcyB0byBiZSBhdHRhY2hlZC4gIFNvbWUgbWFpbAorYWdlbnRzIHdpbGwgdHJhbnNmb3JtIHBhdGNoZXMgKGUuZy4gd3JhcCBsaW5lcywgc2VuZCB0aGVtIGFzCitmb3JtYXQ9Zmxvd2VkKSBpbiB3YXlzIHRoYXQgbWFrZSB0aGVtIGZhaWwuICBZb3Ugd2lsbCBnZXQgYW5ncnkKK2ZsYW1lcyByaWRpY3VsaW5nIHlvdSBpZiB5b3UgZG9uJ3QgY2hlY2sgdGhpcy4KKworVGh1bmRlcmJpcmQgaW4gcGFydGljdWxhciBpcyBrbm93biB0byBiZSBwcm9ibGVtYXRpYy4gIFRodW5kZXJiaXJkCit1c2VycyBtYXkgd2lzaCB0byB2aXNpdCB0aGlzIHdlYiBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uOgorICBodHRwOi8va2IubW96aWxsYXppbmUub3JnL1BsYWluX3RleHRfZS1tYWlsXy1fVGh1bmRlcmJpcmQjQ29tcGxldGVseV9wbGFpbl9lbWFpbAorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXSwgbWJveCg1KQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5kZXgtcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllNmQwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0CkBAIC0wLDAgKzEsMTAwIEBACitnaXQtaW5kZXgtcGFjaygxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWluZGV4LXBhY2sgLSBCdWlsZCBwYWNrIGluZGV4IGZpbGUgZm9yIGFuIGV4aXN0aW5nIHBhY2tlZCBhcmNoaXZlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGluZGV4LXBhY2snIFstdl0gWy1vIDxpbmRleC1maWxlPl0gPHBhY2stZmlsZT4KKydnaXQgaW5kZXgtcGFjaycgLS1zdGRpbiBbLS1maXgtdGhpbl0gWy0ta2VlcF0gWy12XSBbLW8gPGluZGV4LWZpbGU+XQorICAgICAgICAgICAgICAgICBbPHBhY2stZmlsZT5dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBhIHBhY2tlZCBhcmNoaXZlICgucGFjaykgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUsIGFuZAorYnVpbGRzIGEgcGFjayBpbmRleCBmaWxlICguaWR4KSBmb3IgaXQuICBUaGUgcGFja2VkIGFyY2hpdmUKK3RvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXggY2FuIHRoZW4gYmUgcGxhY2VkIGluIHRoZQorb2JqZWN0cy9wYWNrLyBkaXJlY3Rvcnkgb2YgYSBnaXQgcmVwb3NpdG9yeS4KKworCitPUFRJT05TCistLS0tLS0tCistdjo6CisJQmUgdmVyYm9zZSBhYm91dCB3aGF0IGlzIGdvaW5nIG9uLCBpbmNsdWRpbmcgcHJvZ3Jlc3Mgc3RhdHVzLgorCistbyA8aW5kZXgtZmlsZT46OgorCVdyaXRlIHRoZSBnZW5lcmF0ZWQgcGFjayBpbmRleCBpbnRvIHRoZSBzcGVjaWZpZWQKKwlmaWxlLiAgV2l0aG91dCB0aGlzIG9wdGlvbiB0aGUgbmFtZSBvZiBwYWNrIGluZGV4CisJZmlsZSBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBuYW1lIG9mIHBhY2tlZCBhcmNoaXZlCisJZmlsZSBieSByZXBsYWNpbmcgLnBhY2sgd2l0aCAuaWR4IChhbmQgdGhlIHByb2dyYW0KKwlmYWlscyBpZiB0aGUgbmFtZSBvZiBwYWNrZWQgYXJjaGl2ZSBkb2VzIG5vdCBlbmQKKwl3aXRoIC5wYWNrKS4KKworLS1zdGRpbjo6CisJV2hlbiB0aGlzIGZsYWcgaXMgcHJvdmlkZWQsIHRoZSBwYWNrIGlzIHJlYWQgZnJvbSBzdGRpbgorCWluc3RlYWQgYW5kIGEgY29weSBpcyB0aGVuIHdyaXR0ZW4gdG8gPHBhY2stZmlsZT4uIElmCisJPHBhY2stZmlsZT4gaXMgbm90IHNwZWNpZmllZCwgdGhlIHBhY2sgaXMgd3JpdHRlbiB0bworCW9iamVjdHMvcGFjay8gZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGdpdCByZXBvc2l0b3J5IHdpdGgKKwlhIGRlZmF1bHQgbmFtZSBkZXRlcm1pbmVkIGZyb20gdGhlIHBhY2sgY29udGVudC4gIElmCisJPHBhY2stZmlsZT4gaXMgbm90IHNwZWNpZmllZCBjb25zaWRlciB1c2luZyAtLWtlZXAgdG8KKwlwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGlzIHByb2Nlc3MgYW5kCisJJ2dpdCByZXBhY2snLgorCistLWZpeC10aGluOjoKKwlGaXggYSAidGhpbiIgcGFjayBwcm9kdWNlZCBieSBgZ2l0IHBhY2stb2JqZWN0cyAtLXRoaW5gIChzZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0gZm9yIGRldGFpbHMpIGJ5IGFkZGluZyB0aGUKKwlleGNsdWRlZCBvYmplY3RzIHRoZSBkZWx0aWZpZWQgb2JqZWN0cyBhcmUgYmFzZWQgb24gdG8gdGhlCisJcGFjay4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpbiBjb25qdW5jdGlvbiB3aXRoIC0tc3RkaW4uCisKKy0ta2VlcDo6CisJQmVmb3JlIG1vdmluZyB0aGUgaW5kZXggaW50byBpdHMgZmluYWwgZGVzdGluYXRpb24KKwljcmVhdGUgYW4gZW1wdHkgLmtlZXAgZmlsZSBmb3IgdGhlIGFzc29jaWF0ZWQgcGFjayBmaWxlLgorCVRoaXMgb3B0aW9uIGlzIHVzdWFsbHkgbmVjZXNzYXJ5IHdpdGggLS1zdGRpbiB0byBwcmV2ZW50IGEKKwlzaW11bHRhbmVvdXMgJ2dpdCByZXBhY2snIHByb2Nlc3MgZnJvbSBkZWxldGluZworCXRoZSBuZXdseSBjb25zdHJ1Y3RlZCBwYWNrIGFuZCBpbmRleCBiZWZvcmUgcmVmcyBjYW4gYmUKKwl1cGRhdGVkIHRvIHVzZSBvYmplY3RzIGNvbnRhaW5lZCBpbiB0aGUgcGFjay4KKworLS1rZWVwPTxtc2c+OjoKKwlMaWtlIC0ta2VlcCBjcmVhdGUgYSAua2VlcCBmaWxlIGJlZm9yZSBtb3ZpbmcgdGhlIGluZGV4IGludG8KKwlpdHMgZmluYWwgZGVzdGluYXRpb24sIGJ1dCByYXRoZXIgdGhhbiBjcmVhdGluZyBhbiBlbXB0eSBmaWxlCisJcGxhY2UgJzxtc2c+JyBmb2xsb3dlZCBieSBhbiBMRiBpbnRvIHRoZSAua2VlcCBmaWxlLiAgVGhlICc8bXNnPicKKwltZXNzYWdlIGNhbiBsYXRlciBiZSBzZWFyY2hlZCBmb3Igd2l0aGluIGFsbCAua2VlcCBmaWxlcyB0bworCWxvY2F0ZSBhbnkgd2hpY2ggaGF2ZSBvdXRsaXZlZCB0aGVpciB1c2VmdWxuZXNzLgorCistLWluZGV4LXZlcnNpb249PHZlcnNpb24+Wyw8b2Zmc2V0Pl06OgorCVRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgdGVzdCBzdWl0ZSBvbmx5LiBJdCBhbGxvd3MKKwl0byBmb3JjZSB0aGUgdmVyc2lvbiBmb3IgdGhlIGdlbmVyYXRlZCBwYWNrIGluZGV4LCBhbmQgdG8gZm9yY2UKKwk2NC1iaXQgaW5kZXggZW50cmllcyBvbiBvYmplY3RzIGxvY2F0ZWQgYWJvdmUgdGhlIGdpdmVuIG9mZnNldC4KKworLS1zdHJpY3Q6OgorCURpZSwgaWYgdGhlIHBhY2sgY29udGFpbnMgYnJva2VuIG9iamVjdHMgb3IgbGlua3MuCisKKy0tdGhyZWFkcz08bj46OgorCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gc3Bhd24gd2hlbiByZXNvbHZpbmcKKwlkZWx0YXMuIFRoaXMgcmVxdWlyZXMgdGhhdCBpbmRleC1wYWNrIGJlIGNvbXBpbGVkIHdpdGgKKwlwdGhyZWFkcyBvdGhlcndpc2UgdGhpcyBvcHRpb24gaXMgaWdub3JlZCB3aXRoIGEgd2FybmluZy4KKwlUaGlzIGlzIG1lYW50IHRvIHJlZHVjZSBwYWNraW5nIHRpbWUgb24gbXVsdGlwcm9jZXNzb3IKKwltYWNoaW5lcy4gVGhlIHJlcXVpcmVkIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSBkZWx0YSBzZWFyY2gKKwl3aW5kb3cgaXMgaG93ZXZlciBtdWx0aXBsaWVkIGJ5IHRoZSBudW1iZXIgb2YgdGhyZWFkcy4KKwlTcGVjaWZ5aW5nIDAgd2lsbCBjYXVzZSBnaXQgdG8gYXV0by1kZXRlY3QgdGhlIG51bWJlciBvZiBDUFUncworCWFuZCB1c2UgbWF4aW11bSAzIHRocmVhZHMuCisKKworTm90ZQorLS0tLQorCitPbmNlIHRoZSBpbmRleCBoYXMgYmVlbiBjcmVhdGVkLCB0aGUgbGlzdCBvZiBvYmplY3QgbmFtZXMgaXMgc29ydGVkCithbmQgdGhlIFNIQTEgaGFzaCBvZiB0aGF0IGxpc3QgaXMgcHJpbnRlZCB0byBzdGRvdXQuIElmIC0tc3RkaW4gd2FzCithbHNvIHVzZWQgdGhlbiB0aGlzIGlzIHByZWZpeGVkIGJ5IGVpdGhlciAicGFja1x0Iiwgb3IgImtlZXBcdCIgaWYgYQorbmV3IC5rZWVwIGZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLiBUaGlzIGlzIHVzZWZ1bCB0byByZW1vdmUgYQorLmtlZXAgZmlsZSB1c2VkIGFzIGEgbG9jayB0byBwcmV2ZW50IHRoZSByYWNlIHdpdGggJ2dpdCByZXBhY2snCittZW50aW9uZWQgYWJvdmUuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC1kYi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LWRiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjFlMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC1kYi50eHQKQEAgLTAsMCArMSwyMyBAQAorZ2l0LWluaXQtZGIoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1pbml0LWRiIC0gQ3JlYXRlcyBhbiBlbXB0eSBnaXQgcmVwb3NpdG9yeQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBpbml0LWRiJyBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pl0gWy0tc2VwYXJhdGUtZ2l0LWRpciA8Z2l0IGRpcj5dIFstLXNoYXJlZFs9PHBlcm1pc3Npb25zPl1dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBzeW5vbnltIGZvciBsaW5rZ2l0OmdpdC1pbml0WzFdLiAgUGxlYXNlIHJlZmVyIHRvIHRoZQorZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGNvbW1hbmQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWMyYmJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQKQEAgLTAsMCArMSwxNDYgQEAKK2dpdC1pbml0KDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW5pdCAtIENyZWF0ZSBhbiBlbXB0eSBnaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGluaXQnIFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+XQorCSAgWy0tc2VwYXJhdGUtZ2l0LWRpciA8Z2l0IGRpcj5dCisJICBbLS1zaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbZGlyZWN0b3J5XQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGNvbW1hbmQgY3JlYXRlcyBhbiBlbXB0eSBnaXQgcmVwb3NpdG9yeSAtIGJhc2ljYWxseSBhIGAuZ2l0YAorZGlyZWN0b3J5IHdpdGggc3ViZGlyZWN0b3JpZXMgZm9yIGBvYmplY3RzYCwgYHJlZnMvaGVhZHNgLAorYHJlZnMvdGFnc2AsIGFuZCB0ZW1wbGF0ZSBmaWxlcy4gIEFuIGluaXRpYWwgYEhFQURgIGZpbGUgdGhhdAorcmVmZXJlbmNlcyB0aGUgSEVBRCBvZiB0aGUgbWFzdGVyIGJyYW5jaCBpcyBhbHNvIGNyZWF0ZWQuCisKK0lmIHRoZSBgJEdJVF9ESVJgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0aGVuIGl0IHNwZWNpZmllcyBhIHBhdGgKK3RvIHVzZSBpbnN0ZWFkIG9mIGAuLy5naXRgIGZvciB0aGUgYmFzZSBvZiB0aGUgcmVwb3NpdG9yeS4KKworSWYgdGhlIG9iamVjdCBzdG9yYWdlIGRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgdmlhIHRoZQorYCRHSVRfT0JKRUNUX0RJUkVDVE9SWWAgZW52aXJvbm1lbnQgdmFyaWFibGUgdGhlbiB0aGUgc2hhMSBkaXJlY3RvcmllcworYXJlIGNyZWF0ZWQgdW5kZXJuZWF0aCAtIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBgJEdJVF9ESVIvb2JqZWN0c2AKK2RpcmVjdG9yeSBpcyB1c2VkLgorCitSdW5uaW5nICdnaXQgaW5pdCcgaW4gYW4gZXhpc3RpbmcgcmVwb3NpdG9yeSBpcyBzYWZlLiBJdCB3aWxsIG5vdAorb3ZlcndyaXRlIHRoaW5ncyB0aGF0IGFyZSBhbHJlYWR5IHRoZXJlLiBUaGUgcHJpbWFyeSByZWFzb24gZm9yCityZXJ1bm5pbmcgJ2dpdCBpbml0JyBpcyB0byBwaWNrIHVwIG5ld2x5IGFkZGVkIHRlbXBsYXRlcyAob3IgdG8gbW92ZQordGhlIHJlcG9zaXRvcnkgdG8gYW5vdGhlciBwbGFjZSBpZiAtLXNlcGFyYXRlLWdpdC1kaXIgaXMgZ2l2ZW4pLgorCitPUFRJT05TCistLS0tLS0tCisKKy0tCisKKy1xOjoKKy0tcXVpZXQ6OgorCitPbmx5IHByaW50IGVycm9yIGFuZCB3YXJuaW5nIG1lc3NhZ2VzLCBhbGwgb3RoZXIgb3V0cHV0IHdpbGwgYmUgc3VwcHJlc3NlZC4KKworLS1iYXJlOjoKKworQ3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5LiBJZiBHSVRfRElSIGVudmlyb25tZW50IGlzIG5vdCBzZXQsIGl0IGlzIHNldCB0byB0aGUKK2N1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisKKy0tdGVtcGxhdGU9PHRlbXBsYXRlX2RpcmVjdG9yeT46OgorCitTcGVjaWZ5IHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkLiAgKFNlZSB0aGUgIlRFTVBMQVRFCitESVJFQ1RPUlkiIHNlY3Rpb24gYmVsb3cuKQorCistLXNlcGFyYXRlLWdpdC1kaXI9PGdpdCBkaXI+OjoKKworSW5zdGVhZCBvZiBpbml0aWFsaXppbmcgdGhlIHJlcG9zaXRvcnkgd2hlcmUgaXQgaXMgc3VwcG9zZWQgdG8gYmUsCitwbGFjZSBhIGZpbGVzeXRlbS1hZ25vc3RpYyBnaXQgc3ltYm9saWMgbGluayB0aGVyZSwgcG9pbnRpbmcgdG8gdGhlCitzcGVjaWZpZWQgZ2l0IHBhdGgsIGFuZCBpbml0aWFsaXplIGEgZ2l0IHJlcG9zaXRvcnkgYXQgdGhlIHBhdGguIFRoZQorcmVzdWx0IGlzIGdpdCByZXBvc2l0b3J5IGNhbiBiZSBzZXBhcmF0ZWQgZnJvbSB3b3JraW5nIHRyZWUuIElmIHRoaXMKK2lzIHJlaW5pdGlhbGl6YXRpb24sIHRoZSByZXBvc2l0b3J5IHdpbGwgYmUgbW92ZWQgdG8gdGhlIHNwZWNpZmllZAorcGF0aC4KKworLS1zaGFyZWRbPShmYWxzZXx0cnVlfHVtYXNrfGdyb3VwfGFsbHx3b3JsZHxldmVyeWJvZHl8MHh4eCldOjoKKworU3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzLiAgVGhpcworYWxsb3dzIHVzZXJzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBncm91cCB0byBwdXNoIGludG8gdGhhdAorcmVwb3NpdG9yeS4gIFdoZW4gc3BlY2lmaWVkLCB0aGUgY29uZmlnIHZhcmlhYmxlICJjb3JlLnNoYXJlZFJlcG9zaXRvcnkiIGlzCitzZXQgc28gdGhhdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdW5kZXIgYCRHSVRfRElSYCBhcmUgY3JlYXRlZCB3aXRoIHRoZQorcmVxdWVzdGVkIHBlcm1pc3Npb25zLiAgV2hlbiBub3Qgc3BlY2lmaWVkLCBnaXQgd2lsbCB1c2UgcGVybWlzc2lvbnMgcmVwb3J0ZWQKK2J5IHVtYXNrKDIpLgorCitUaGUgb3B0aW9uIGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzLCBkZWZhdWx0aW5nIHRvICdncm91cCcgaWYgbm8gdmFsdWUKK2lzIGdpdmVuOgorCisgLSAndW1hc2snIChvciAnZmFsc2UnKTogVXNlIHBlcm1pc3Npb25zIHJlcG9ydGVkIGJ5IHVtYXNrKDIpLiBUaGUgZGVmYXVsdCwKKyAgIHdoZW4gYC0tc2hhcmVkYCBpcyBub3Qgc3BlY2lmaWVkLgorCisgLSAnZ3JvdXAnIChvciAndHJ1ZScpOiBNYWtlIHRoZSByZXBvc2l0b3J5IGdyb3VwLXdyaXRhYmxlLCAoYW5kIGcrc3gsIHNpbmNlCisgICB0aGUgZ2l0IGdyb3VwIG1heSBiZSBub3QgdGhlIHByaW1hcnkgZ3JvdXAgb2YgYWxsIHVzZXJzKS4KKyAgIFRoaXMgaXMgdXNlZCB0byBsb29zZW4gdGhlIHBlcm1pc3Npb25zIG9mIGFuIG90aGVyd2lzZSBzYWZlIHVtYXNrKDIpIHZhbHVlLgorICAgTm90ZSB0aGF0IHRoZSB1bWFzayBzdGlsbCBhcHBsaWVzIHRvIHRoZSBvdGhlciBwZXJtaXNzaW9uIGJpdHMgKGUuZy4gaWYKKyAgIHVtYXNrIGlzICcwMDIyJywgdXNpbmcgJ2dyb3VwJyB3aWxsIG5vdCByZW1vdmUgcmVhZCBwcml2aWxlZ2VzIGZyb20gb3RoZXIKKyAgIChub24tZ3JvdXApIHVzZXJzKS4gU2VlICcweHh4JyBmb3IgaG93IHRvIGV4YWN0bHkgc3BlY2lmeSB0aGUgcmVwb3NpdG9yeQorICAgcGVybWlzc2lvbnMuCisKKyAtICdhbGwnIChvciAnd29ybGQnIG9yICdldmVyeWJvZHknKTogU2FtZSBhcyAnZ3JvdXAnLCBidXQgbWFrZSB0aGUgcmVwb3NpdG9yeQorICAgcmVhZGFibGUgYnkgYWxsIHVzZXJzLgorCisgLSAnMHh4eCc6ICcweHh4JyBpcyBhbiBvY3RhbCBudW1iZXIgYW5kIGVhY2ggZmlsZSB3aWxsIGhhdmUgbW9kZSAnMHh4eCcuCisgICAnMHh4eCcgd2lsbCBvdmVycmlkZSB1c2VycycgdW1hc2soMikgdmFsdWUgKGFuZCBub3Qgb25seSBsb29zZW4gcGVybWlzc2lvbnMKKyAgIGFzICdncm91cCcgYW5kICdhbGwnIGRvZXMpLiAnMDY0MCcgd2lsbCBjcmVhdGUgYSByZXBvc2l0b3J5IHdoaWNoIGlzCisgICBncm91cC1yZWFkYWJsZSwgYnV0IG5vdCBncm91cC13cml0YWJsZSBvciBhY2Nlc3NpYmxlIHRvIG90aGVycy4gJzA2NjAnIHdpbGwKKyAgIGNyZWF0ZSBhIHJlcG8gdGhhdCBpcyByZWFkYWJsZSBhbmQgd3JpdGFibGUgdG8gdGhlIGN1cnJlbnQgdXNlciBhbmQgZ3JvdXAsCisgICBidXQgaW5hY2Nlc3NpYmxlIHRvIG90aGVycy4KKworQnkgZGVmYXVsdCwgdGhlIGNvbmZpZ3VyYXRpb24gZmxhZyByZWNlaXZlLmRlbnlOb25GYXN0Rm9yd2FyZHMgaXMgZW5hYmxlZAoraW4gc2hhcmVkIHJlcG9zaXRvcmllcywgc28gdGhhdCB5b3UgY2Fubm90IGZvcmNlIGEgbm9uIGZhc3QtZm9yd2FyZGluZyBwdXNoCitpbnRvIGl0LgorCitJZiB5b3UgbmFtZSBhIChwb3NzaWJseSBub24tZXhpc3RlbnQpIGRpcmVjdG9yeSBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kCitsaW5lLCB0aGUgY29tbWFuZCBpcyBydW4gaW5zaWRlIHRoZSBkaXJlY3RvcnkgKHBvc3NpYmx5IGFmdGVyIGNyZWF0aW5nIGl0KS4KKworLS0KKworCitURU1QTEFURSBESVJFQ1RPUlkKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdGVtcGxhdGUgZGlyZWN0b3J5IGNvbnRhaW5zIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IHdpbGwgYmUgY29waWVkIHRvCit0aGUgYCRHSVRfRElSYCBhZnRlciBpdCBpcyBjcmVhdGVkLgorCitUaGUgdGVtcGxhdGUgZGlyZWN0b3J5IHVzZWQgd2lsbCAoaW4gb3JkZXIpOgorCisgLSBUaGUgYXJndW1lbnQgZ2l2ZW4gd2l0aCB0aGUgYC0tdGVtcGxhdGVgIG9wdGlvbi4KKworIC0gVGhlIGNvbnRlbnRzIG9mIHRoZSBgJEdJVF9URU1QTEFURV9ESVJgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgLSBUaGUgYGluaXQudGVtcGxhdGVkaXJgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAtIFRoZSBkZWZhdWx0IHRlbXBsYXRlIGRpcmVjdG9yeTogYC91c3Ivc2hhcmUvZ2l0LWNvcmUvdGVtcGxhdGVzYC4KKworVGhlIGRlZmF1bHQgdGVtcGxhdGUgZGlyZWN0b3J5IGluY2x1ZGVzIHNvbWUgZGlyZWN0b3J5IHN0cnVjdHVyZSwgc29tZQorc3VnZ2VzdGVkICJleGNsdWRlIHBhdHRlcm5zIiwgYW5kIGNvcGllcyBvZiBzYW1wbGUgImhvb2siIGZpbGVzLgorVGhlIHN1Z2dlc3RlZCBwYXR0ZXJucyBhbmQgaG9vayBmaWxlcyBhcmUgYWxsIG1vZGlmaWFibGUgYW5kIGV4dGVuc2libGUuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitTdGFydCBhIG5ldyBnaXQgcmVwb3NpdG9yeSBmb3IgYW4gZXhpc3RpbmcgY29kZSBiYXNlOjoKKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgY2QgL3BhdGgvdG8vbXkvY29kZWJhc2UKKyQgZ2l0IGluaXQgICAgICA8MT4KKyQgZ2l0IGFkZCAuICAgICA8Mj4KKy0tLS0tLS0tLS0tLS0tLS0KKysKKzwxPiBwcmVwYXJlIC9wYXRoL3RvL215L2NvZGViYXNlLy5naXQgZGlyZWN0b3J5Cis8Mj4gYWRkIGFsbCBleGlzdGluZyBmaWxlIHRvIHRoZSBpbmRleAorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluc3Rhd2ViLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWluc3Rhd2ViLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2VlZjUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5zdGF3ZWIudHh0CkBAIC0wLDAgKzEsOTMgQEAKK2dpdC1pbnN0YXdlYigxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1pbnN0YXdlYiAtIEluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBpbnN0YXdlYicgWy0tbG9jYWxdIFstLWh0dHBkPTxodHRwZD5dIFstLXBvcnQ9PHBvcnQ+XQorICAgICAgICAgICAgICAgWy0tYnJvd3Nlcj08YnJvd3Nlcj5dCisnZ2l0IGluc3Rhd2ViJyBbLS1zdGFydF0gWy0tc3RvcF0gWy0tcmVzdGFydF0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitBIHNpbXBsZSBzY3JpcHQgdG8gc2V0IHVwIGBnaXR3ZWJgIGFuZCBhIHdlYiBzZXJ2ZXIgZm9yIGJyb3dzaW5nIHRoZSBsb2NhbAorcmVwb3NpdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorCistbDo6CistLWxvY2FsOjoKKwlPbmx5IGJpbmQgdGhlIHdlYiBzZXJ2ZXIgdG8gdGhlIGxvY2FsIElQICgxMjcuMC4wLjEpLgorCistZDo6CistLWh0dHBkOjoKKwlUaGUgSFRUUCBkYWVtb24gY29tbWFuZC1saW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4KKwlDb21tYW5kLWxpbmUgb3B0aW9ucyBtYXkgYmUgc3BlY2lmaWVkIGhlcmUsIGFuZCB0aGUKKwljb25maWd1cmF0aW9uIGZpbGUgd2lsbCBiZSBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kLWxpbmUuCisJQ3VycmVudGx5IGFwYWNoZTIsIGxpZ2h0dHBkLCBtb25nb29zZSwgcGxhY2t1cCBhbmQgd2VicmljayBhcmUgc3VwcG9ydGVkLgorCShEZWZhdWx0OiBsaWdodHRwZCkKKworLW06OgorLS1tb2R1bGUtcGF0aDo6CisJVGhlIG1vZHVsZSBwYXRoIChvbmx5IG5lZWRlZCBpZiBodHRwZCBpcyBBcGFjaGUpLgorCShEZWZhdWx0OiAvdXNyL2xpYi9hcGFjaGUyL21vZHVsZXMpCisKKy1wOjoKKy0tcG9ydDo6CisJVGhlIHBvcnQgbnVtYmVyIHRvIGJpbmQgdGhlIGh0dHBkIHRvLiAgKERlZmF1bHQ6IDEyMzQpCisKKy1iOjoKKy0tYnJvd3Nlcjo6CisJVGhlIHdlYiBicm93c2VyIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gdmlldyB0aGUgZ2l0d2ViCisJcGFnZS4gVGhpcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgJ2dpdCB3ZWJ7bGl0ZGR9YnJvd3NlJyBoZWxwZXIKKwlzY3JpcHQgYWxvbmcgd2l0aCB0aGUgVVJMIG9mIHRoZSBnaXR3ZWIgaW5zdGFuY2UuIFNlZQorCWxpbmtnaXQ6Z2l0LXdlYntsaXRkZH1icm93c2VbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4gSWYKKwl0aGUgc2NyaXB0IGZhaWxzLCB0aGUgVVJMIHdpbGwgYmUgcHJpbnRlZCB0byBzdGRvdXQuCisKK3N0YXJ0OjoKKy0tc3RhcnQ6OgorCVN0YXJ0IHRoZSBodHRwZCBpbnN0YW5jZSBhbmQgZXhpdC4gIFJlZ2VuZXJhdGUgY29uZmlndXJhdGlvbiBmaWxlcworCWFzIG5lY2Vzc2FyeSBmb3Igc3Bhd25pbmcgYSBuZXcgaW5zdGFuY2UuCisKK3N0b3A6OgorLS1zdG9wOjoKKwlTdG9wIHRoZSBodHRwZCBpbnN0YW5jZSBhbmQgZXhpdC4gIFRoaXMgZG9lcyBub3QgZ2VuZXJhdGUKKwlhbnkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHNwYXduaW5nIGEgbmV3IGluc3RhbmNlLAorCW5vciBkb2VzIGl0IGNsb3NlIHRoZSBicm93c2VyLgorCityZXN0YXJ0OjoKKy0tcmVzdGFydDo6CisJUmVzdGFydCB0aGUgaHR0cGQgaW5zdGFuY2UgYW5kIGV4aXQuICBSZWdlbmVyYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMKKwlhcyBuZWNlc3NhcnkgZm9yIHNwYXduaW5nIGEgbmV3IGluc3RhbmNlLgorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKK1lvdSBtYXkgc3BlY2lmeSBjb25maWd1cmF0aW9uIGluIHlvdXIgLmdpdC9jb25maWcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tpbnN0YXdlYl0KKwlsb2NhbCA9IHRydWUKKwlodHRwZCA9IGFwYWNoZTIgLWYKKwlwb3J0ID0gNDMyMQorCWJyb3dzZXIgPSBrb25xdWVyb3IKKwltb2R1bGVwYXRoID0gL3Vzci9saWIvYXBhY2hlMi9tb2R1bGVzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdpbnN0YXdlYi5icm93c2VyJyBpcyBub3Qgc2V0LAorJ3dlYi5icm93c2VyJyB3aWxsIGJlIHVzZWQgaW5zdGVhZCBpZiBpdCBpcyBkZWZpbmVkLiBTZWUKK2xpbmtnaXQ6Z2l0LXdlYntsaXRkZH1icm93c2VbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHdlYlsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NWRhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CkBAIC0wLDAgKzEsMTg5IEBACitnaXQtbG9nKDEpCis9PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1sb2cgLSBTaG93IGNvbW1pdCBsb2dzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGxvZycgWzxvcHRpb25zPl0gWzxzaW5jZT4uLjx1bnRpbD5dIFtbXC0tXSA8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU2hvd3MgdGhlIGNvbW1pdCBsb2dzLgorCitUaGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlICdnaXQgcmV2LWxpc3QnCitjb21tYW5kIHRvIGNvbnRyb2wgd2hhdCBpcyBzaG93biBhbmQgaG93LCBhbmQgb3B0aW9ucyBhcHBsaWNhYmxlIHRvCit0aGUgJ2dpdCBkaWZmLSonIGNvbW1hbmRzIHRvIGNvbnRyb2wgaG93IHRoZSBjaGFuZ2VzCitlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIGFyZSBzaG93bi4KKworCitPUFRJT05TCistLS0tLS0tCisKKzxzaW5jZT4uLjx1bnRpbD46OgorCVNob3cgb25seSBjb21taXRzIGJldHdlZW4gdGhlIG5hbWVkIHR3byBjb21taXRzLiAgV2hlbgorCWVpdGhlciA8c2luY2U+IG9yIDx1bnRpbD4gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8KKwlgSEVBRGAsIGkuZS4gdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2guCisJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgPHNpbmNlPgorCWFuZCA8dW50aWw+LCBzZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKKy0tZm9sbG93OjoKKwlDb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcworCSh3b3JrcyBvbmx5IGZvciBhIHNpbmdsZSBmaWxlKS4KKworLS1uby1kZWNvcmF0ZTo6CistLWRlY29yYXRlWz1zaG9ydHxmdWxsfG5vXTo6CisJUHJpbnQgb3V0IHRoZSByZWYgbmFtZXMgb2YgYW55IGNvbW1pdHMgdGhhdCBhcmUgc2hvd24uIElmICdzaG9ydCcgaXMKKwlzcGVjaWZpZWQsIHRoZSByZWYgbmFtZSBwcmVmaXhlcyAncmVmcy9oZWFkcy8nLCAncmVmcy90YWdzLycgYW5kCisJJ3JlZnMvcmVtb3Rlcy8nIHdpbGwgbm90IGJlIHByaW50ZWQuIElmICdmdWxsJyBpcyBzcGVjaWZpZWQsIHRoZQorCWZ1bGwgcmVmIG5hbWUgKGluY2x1ZGluZyBwcmVmaXgpIHdpbGwgYmUgcHJpbnRlZC4gVGhlIGRlZmF1bHQgb3B0aW9uCisJaXMgJ3Nob3J0Jy4KKworLS1zb3VyY2U6OgorCVByaW50IG91dCB0aGUgcmVmIG5hbWUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBieSB3aGljaCBlYWNoCisJY29tbWl0IHdhcyByZWFjaGVkLgorCistLWZ1bGwtZGlmZjo6CisJV2l0aG91dCB0aGlzIGZsYWcsICJnaXQgbG9nIC1wIDxwYXRoPi4uLiIgc2hvd3MgY29tbWl0cyB0aGF0CisJdG91Y2ggdGhlIHNwZWNpZmllZCBwYXRocywgYW5kIGRpZmZzIGFib3V0IHRoZSBzYW1lIHNwZWNpZmllZAorCXBhdGhzLiAgV2l0aCB0aGlzLCB0aGUgZnVsbCBkaWZmIGlzIHNob3duIGZvciBjb21taXRzIHRoYXQgdG91Y2gKKwl0aGUgc3BlY2lmaWVkIHBhdGhzOyB0aGlzIG1lYW5zIHRoYXQgIjxwYXRoPi4uLiIgbGltaXRzIG9ubHkKKwljb21taXRzLCBhbmQgZG9lc24ndCBsaW1pdCBkaWZmIGZvciB0aG9zZSBjb21taXRzLgorKworTm90ZSB0aGF0IHRoaXMgYWZmZWN0cyBhbGwgZGlmZi1iYXNlZCBvdXRwdXQgdHlwZXMsIGUuZy4gdGhvc2UKK3Byb2R1Y2VkIGJ5IC0tc3RhdCBldGMuCisKKy0tbG9nLXNpemU6OgorCUJlZm9yZSB0aGUgbG9nIG1lc3NhZ2UgcHJpbnQgb3V0IGl0cyBzaXplIGluIGJ5dGVzLiBJbnRlbmRlZAorCW1haW5seSBmb3IgcG9yY2VsYWluIHRvb2xzIGNvbnN1bXB0aW9uLiBJZiBnaXQgaXMgdW5hYmxlIHRvCisJcHJvZHVjZSBhIHZhbGlkIHZhbHVlIHNpemUgaXMgc2V0IHRvIHplcm8uCisJTm90ZSB0aGF0IG9ubHkgbWVzc2FnZSBpcyBjb25zaWRlcmVkLCBpZiBhbHNvIGEgZGlmZiBpcyBzaG93bgorCWl0cyBzaXplIGlzIG5vdCBpbmNsdWRlZC4KKworW1wtLV0gPHBhdGg+Li4uOjoKKwlTaG93IG9ubHkgY29tbWl0cyB0aGF0IGFyZSBlbm91Z2ggdG8gZXhwbGFpbiBob3cgdGhlIGZpbGVzCisJdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIHBhdGhzIGNhbWUgdG8gYmUuICBTZWUgIkhpc3RvcnkKKwlTaW1wbGlmaWNhdGlvbiIgYmVsb3cgZm9yIGRldGFpbHMgYW5kIG90aGVyIHNpbXBsaWZpY2F0aW9uCisJbW9kZXMuCisrCitUbyBwcmV2ZW50IGNvbmZ1c2lvbiB3aXRoIG9wdGlvbnMgYW5kIGJyYW5jaCBuYW1lcywgcGF0aHMgbWF5IG5lZWQgdG8KK2JlIHByZWZpeGVkIHdpdGggIlwtLSAiIHRvIHNlcGFyYXRlIHRoZW0gZnJvbSBvcHRpb25zIG9yIHJlZm5hbWVzLgorCitpbmNsdWRlOjpyZXYtbGlzdC1vcHRpb25zLnR4dFtdCisKK2luY2x1ZGU6OnByZXR0eS1mb3JtYXRzLnR4dFtdCisKK0NvbW1vbiBkaWZmIG9wdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworOmdpdC1sb2c6IDEKK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCitpbmNsdWRlOjpkaWZmLWdlbmVyYXRlLXBhdGNoLnR4dFtdCisKK0V4YW1wbGVzCistLS0tLS0tLQorYGdpdCBsb2cgLS1uby1tZXJnZXNgOjoKKworCVNob3cgdGhlIHdob2xlIGNvbW1pdCBoaXN0b3J5LCBidXQgc2tpcCBhbnkgbWVyZ2VzCisKK2BnaXQgbG9nIHYyLjYuMTIuLiBpbmNsdWRlL3Njc2kgZHJpdmVycy9zY3NpYDo6CisKKwlTaG93IGFsbCBjb21taXRzIHNpbmNlIHZlcnNpb24gJ3YyLjYuMTInIHRoYXQgY2hhbmdlZCBhbnkgZmlsZQorCWluIHRoZSBpbmNsdWRlL3Njc2kgb3IgZHJpdmVycy9zY3NpIHN1YmRpcmVjdG9yaWVzCisKK2BnaXQgbG9nIC0tc2luY2U9IjIgd2Vla3MgYWdvIiAtLSBnaXRrYDo6CisKKwlTaG93IHRoZSBjaGFuZ2VzIGR1cmluZyB0aGUgbGFzdCB0d28gd2Vla3MgdG8gdGhlIGZpbGUgJ2dpdGsnLgorCVRoZSAiLS0iIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBjb25mdXNpb24gd2l0aCB0aGUgKmJyYW5jaCogbmFtZWQKKwknZ2l0aycKKworYGdpdCBsb2cgLS1uYW1lLXN0YXR1cyByZWxlYXNlLi50ZXN0YDo6CisKKwlTaG93IHRoZSBjb21taXRzIHRoYXQgYXJlIGluIHRoZSAidGVzdCIgYnJhbmNoIGJ1dCBub3QgeWV0CisJaW4gdGhlICJyZWxlYXNlIiBicmFuY2gsIGFsb25nIHdpdGggdGhlIGxpc3Qgb2YgcGF0aHMKKwllYWNoIGNvbW1pdCBtb2RpZmllcy4KKworYGdpdCBsb2cgLS1mb2xsb3cgYnVpbHRpbi1yZXYtbGlzdC5jYDo6CisKKwlTaG93cyB0aGUgY29tbWl0cyB0aGF0IGNoYW5nZWQgYnVpbHRpbi1yZXYtbGlzdC5jLCBpbmNsdWRpbmcKKwl0aG9zZSBjb21taXRzIHRoYXQgb2NjdXJyZWQgYmVmb3JlIHRoZSBmaWxlIHdhcyBnaXZlbiBpdHMKKwlwcmVzZW50IG5hbWUuCisKK2BnaXQgbG9nIC0tYnJhbmNoZXMgLS1ub3QgLS1yZW1vdGVzPW9yaWdpbmA6OgorCisJU2hvd3MgYWxsIGNvbW1pdHMgdGhhdCBhcmUgaW4gYW55IG9mIGxvY2FsIGJyYW5jaGVzIGJ1dCBub3QgaW4KKwlhbnkgb2YgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGZvciAnb3JpZ2luJyAod2hhdCB5b3UgaGF2ZSB0aGF0CisJb3JpZ2luIGRvZXNuJ3QpLgorCitgZ2l0IGxvZyBtYXN0ZXIgLS1ub3QgLS1yZW1vdGVzPSovbWFzdGVyYDo6CisKKwlTaG93cyBhbGwgY29tbWl0cyB0aGF0IGFyZSBpbiBsb2NhbCBtYXN0ZXIgYnV0IG5vdCBpbiBhbnkgcmVtb3RlCisJcmVwb3NpdG9yeSBtYXN0ZXIgYnJhbmNoZXMuCisKK2BnaXQgbG9nIC1wIC1tIC0tZmlyc3QtcGFyZW50YDo6CisKKwlTaG93cyB0aGUgaGlzdG9yeSBpbmNsdWRpbmcgY2hhbmdlIGRpZmZzLCBidXQgb25seSBmcm9tIHRoZQorCSJtYWluIGJyYW5jaCIgcGVyc3BlY3RpdmUsIHNraXBwaW5nIGNvbW1pdHMgdGhhdCBjb21lIGZyb20gbWVyZ2VkCisJYnJhbmNoZXMsIGFuZCBzaG93aW5nIGZ1bGwgZGlmZnMgb2YgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBtZXJnZXMuCisJVGhpcyBtYWtlcyBzZW5zZSBvbmx5IHdoZW4gZm9sbG93aW5nIGEgc3RyaWN0IHBvbGljeSBvZiBtZXJnaW5nIGFsbAorCXRvcGljIGJyYW5jaGVzIHdoZW4gc3RheWluZyBvbiBhIHNpbmdsZSBpbnRlZ3JhdGlvbiBicmFuY2guCisKK2BnaXQgbG9nIC0zYDo6CisJTGltaXRzIHRoZSBudW1iZXIgb2YgY29tbWl0cyB0byBzaG93IHRvIDMuCisKK0Rpc2N1c3Npb24KKy0tLS0tLS0tLS0KKworaW5jbHVkZTo6aTE4bi50eHRbXQorCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK1NlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGNvcmUgdmFyaWFibGVzIGFuZCBsaW5rZ2l0OmdpdC1kaWZmWzFdCitmb3Igc2V0dGluZ3MgcmVsYXRlZCB0byBkaWZmIGdlbmVyYXRpb24uCisKK2Zvcm1hdC5wcmV0dHk6OgorCURlZmF1bHQgZm9yIHRoZSBgLS1mb3JtYXRgIG9wdGlvbi4gIChTZWUgIlBSRVRUWSBGT1JNQVRTIiBhYm92ZS4pCisJRGVmYXVsdHMgdG8gIm1lZGl1bSIuCisKK2kxOG4ubG9nT3V0cHV0RW5jb2Rpbmc6OgorCUVuY29kaW5nIHRvIHVzZSB3aGVuIGRpc3BsYXlpbmcgbG9ncy4gIChTZWUgIkRpc2N1c3Npb24iLCBhYm92ZS4pCisJRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBpMThuLmNvbW1pdEVuY29kaW5nYCBpZiBzZXQsIFVURi04CisJb3RoZXJ3aXNlLgorCitsb2cuZGF0ZTo6CisJRGVmYXVsdCBmb3JtYXQgZm9yIGh1bWFuLXJlYWRhYmxlIGRhdGVzLiAgKENvbXBhcmUgdGhlCisJYC0tZGF0ZWAgb3B0aW9uLikgIERlZmF1bHRzIHRvICJkZWZhdWx0Iiwgd2hpY2ggbWVhbnMgdG8gd3JpdGUKKwlkYXRlcyBsaWtlIGBTYXQgTWF5IDggMTk6MzU6MzQgMjAxMCAtMDUwMGAuCisKK2xvZy5zaG93cm9vdDo6CisJSWYgYGZhbHNlYCwgJ2dpdCBsb2cnIGFuZCByZWxhdGVkIGNvbW1hbmRzIHdpbGwgbm90IHRyZWF0IHRoZQorCWluaXRpYWwgY29tbWl0IGFzIGEgYmlnIGNyZWF0aW9uIGV2ZW50LiAgQW55IHJvb3QgY29tbWl0cyBpbgorCWBnaXQgbG9nIC1wYCBvdXRwdXQgd291bGQgYmUgc2hvd24gd2l0aG91dCBhIGRpZmYgYXR0YWNoZWQuCisJVGhlIGRlZmF1bHQgaXMgYHRydWVgLgorCittYWlsbWFwLmZpbGU6OgorCVNlZSBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXS4KKworbm90ZXMuZGlzcGxheVJlZjo6CisJV2hpY2ggcmVmcywgaW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgc2V0IGJ5IGBjb3JlLm5vdGVzUmVmYAorCW9yICdHSVRfTk9URVNfUkVGJywgdG8gcmVhZCBub3RlcyBmcm9tIHdoZW4gc2hvd2luZyBjb21taXQKKwltZXNzYWdlcyB3aXRoIHRoZSAnbG9nJyBmYW1pbHkgb2YgY29tbWFuZHMuICBTZWUKKwlsaW5rZ2l0OmdpdC1ub3Rlc1sxXS4KKysKK01heSBiZSBhbiB1bmFiYnJldmlhdGVkIHJlZiBuYW1lIG9yIGEgZ2xvYiBhbmQgbWF5IGJlIHNwZWNpZmllZAorbXVsdGlwbGUgdGltZXMuICBBIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgZm9yIHJlZnMgdGhhdCBkbyBub3QgZXhpc3QsCitidXQgYSBnbG9iIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55IHJlZnMgaXMgc2lsZW50bHkgaWdub3JlZC4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgZGlzYWJsZWQgYnkgdGhlIGAtLW5vLW5vdGVzYCBvcHRpb24sCitvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX05PVEVTX0RJU1BMQVlfUkVGJyBlbnZpcm9ubWVudCB2YXJpYWJsZSwKK2FuZCBvdmVycmlkZGVuIGJ5IHRoZSBgLS1ub3Rlcz08cmVmPmAgb3B0aW9uLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxvc3QtZm91bmQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbG9zdC1mb3VuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0OTMyOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxvc3QtZm91bmQudHh0CkBAIC0wLDAgKzEsNzQgQEAKK2dpdC1sb3N0LWZvdW5kKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbG9zdC1mb3VuZCAtIFJlY292ZXIgbG9zdCByZWZzIHRoYXQgbHVja2lseSBoYXZlIG5vdCB5ZXQgYmVlbiBwcnVuZWQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGxvc3QtZm91bmQnCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCisqTk9URSo6IHRoaXMgY29tbWFuZCBpcyBkZXByZWNhdGVkLiAgVXNlIGxpbmtnaXQ6Z2l0LWZzY2tbMV0gd2l0aAordGhlIG9wdGlvbiAnLS1sb3N0LWZvdW5kJyBpbnN0ZWFkLgorCitGaW5kcyBkYW5nbGluZyBjb21taXRzIGFuZCB0YWdzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSwgYW5kCitjcmVhdGVzIHJlZnMgdG8gdGhlbSBpbiB0aGUgLmdpdC9sb3N0LWZvdW5kLyBkaXJlY3RvcnkuICBDb21taXRzIGFuZAordGFncyB0aGF0IGRlcmVmZXJlbmNlIHRvIGNvbW1pdHMgYXJlIHN0b3JlZCBpbiAuZ2l0L2xvc3QtZm91bmQvY29tbWl0LAorYW5kIG90aGVyIG9iamVjdHMgYXJlIHN0b3JlZCBpbiAuZ2l0L2xvc3QtZm91bmQvb3RoZXIuCisKKworT1VUUFVUCistLS0tLS0KK1ByaW50cyB0byBzdGFuZGFyZCBvdXRwdXQgdGhlIG9iamVjdCBuYW1lcyBhbmQgb25lLWxpbmUgZGVzY3JpcHRpb25zCitvZiBhbnkgY29tbWl0cyBvciB0YWdzIGZvdW5kLgorCitFWEFNUExFCistLS0tLS0tCisKK1N1cHBvc2UgeW91IHJ1biAnZ2l0IHRhZyAtZicgYW5kIG1pc3R5cGUgdGhlIHRhZyB0byBvdmVyd3JpdGUuCitUaGUgcmVmIHRvIHlvdXIgdGFnIGlzIG92ZXJ3cml0dGVuLCBidXQgdW50aWwgeW91IHJ1biAnZ2l0CitwcnVuZScsIHRoZSB0YWcgaXRzZWxmIGlzIHN0aWxsIHRoZXJlLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxvc3QtZm91bmQKK1sxZWYyYjE5NmQ5MDllZWQ1MjNkNGYzYzliZjU0Yjc4Y2RkNjg0M2M2XSBHSVQgMC45OS45YworLi4uCistLS0tLS0tLS0tLS0KKworQWxzbyB5b3UgY2FuIHVzZSBnaXRrIHRvIGJyb3dzZSBob3cgYW55IHRhZ3MgZm91bmQgcmVsYXRlIHRvIGVhY2gKK290aGVyLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0ayAkKGNkIC5naXQvbG9zdC1mb3VuZC9jb21taXQgJiYgZWNobyA/PyopCistLS0tLS0tLS0tLS0KKworQWZ0ZXIgbWFraW5nIHN1cmUgeW91IGtub3cgd2hpY2ggdGhlIG9iamVjdCBpcyB0aGUgdGFnIHlvdSBhcmUgbG9va2luZworZm9yLCB5b3UgY2FuIHJlY29ubmVjdCBpdCB0byB5b3VyIHJlZ3VsYXIgYHJlZnNgIGhpZXJhcmNoeSBieSB1c2luZwordGhlIGB1cGRhdGUtcmVmYCBjb21tYW5kLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIC10IDFlZjJiMTk2Cit0YWcKKyQgZ2l0IGNhdC1maWxlIHRhZyAxZWYyYjE5Ngorb2JqZWN0IGZhNDFiYmNlOGUzOGM2N2EyMTg0MTVkZTZjZmE1MTBjN2U1MDAzMmEKK3R5cGUgY29tbWl0Cit0YWcgdjAuOTkuOWMKK3RhZ2dlciBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+IDExMzEwNTk1OTQgLTA4MDAKKworR0lUIDAuOTkuOWMKKworVGhpcyBjb250YWlucyB0aGUgZm9sbG93aW5nIGNoYW5nZXMgZnJvbSB0aGUgIm1hc3RlciIgYnJhbmNoLCBzaW5jZQorLi4uCiskIGdpdCB1cGRhdGUtcmVmIHJlZnMvdGFncy9ub3QtbG9zdC1hbnltb3JlIDFlZjJiMTk2CiskIGdpdCByZXYtcGFyc2Ugbm90LWxvc3QtYW55bW9yZQorMWVmMmIxOTZkOTA5ZWVkNTIzZDRmM2M5YmY1NGI3OGNkZDY4NDNjNgorLS0tLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjgyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQKQEAgLTAsMCArMSwyMTQgQEAKK2dpdC1scy1maWxlcygxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1scy1maWxlcyAtIFNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGxzLWZpbGVzJyBbLXpdIFstdF0gWy12XQorCQkoLS1bY2FjaGVkfGRlbGV0ZWR8b3RoZXJzfGlnbm9yZWR8c3RhZ2V8dW5tZXJnZWR8a2lsbGVkfG1vZGlmaWVkXSkqCisJCSgtW2N8ZHxvfGl8c3x1fGt8bV0pKgorCQlbLXggPHBhdHRlcm4+fC0tZXhjbHVkZT08cGF0dGVybj5dCisJCVstWCA8ZmlsZT58LS1leGNsdWRlLWZyb209PGZpbGU+XQorCQlbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGZpbGU+XQorCQlbLS1leGNsdWRlLXN0YW5kYXJkXQorCQlbLS1lcnJvci11bm1hdGNoXSBbLS13aXRoLXRyZWU9PHRyZWUtaXNoPl0KKwkJWy0tZnVsbC1uYW1lXSBbLS1hYmJyZXZdIFstLV0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIG1lcmdlcyB0aGUgZmlsZSBsaXN0aW5nIGluIHRoZSBkaXJlY3RvcnkgY2FjaGUgaW5kZXggd2l0aCB0aGUKK2FjdHVhbCB3b3JraW5nIGRpcmVjdG9yeSBsaXN0LCBhbmQgc2hvd3MgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiB0aGUKK3R3by4KKworT25lIG9yIG1vcmUgb2YgdGhlIG9wdGlvbnMgYmVsb3cgbWF5IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlcworc2hvd246CisKK09QVElPTlMKKy0tLS0tLS0KKy1jOjoKKy0tY2FjaGVkOjoKKwlTaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KQorCistZDo6CistLWRlbGV0ZWQ6OgorCVNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0CisKKy1tOjoKKy0tbW9kaWZpZWQ6OgorCVNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dAorCistbzo6CistLW90aGVyczo6CisJU2hvdyBvdGhlciAoaS5lLiB1bnRyYWNrZWQpIGZpbGVzIGluIHRoZSBvdXRwdXQKKworLWk6OgorLS1pZ25vcmVkOjoKKwlTaG93IG9ubHkgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0LiBXaGVuIHNob3dpbmcgZmlsZXMgaW4gdGhlCisJaW5kZXgsIHByaW50IG9ubHkgdGhvc2UgbWF0Y2hlZCBieSBhbiBleGNsdWRlIHBhdHRlcm4uIFdoZW4KKwlzaG93aW5nICJvdGhlciIgZmlsZXMsIHNob3cgb25seSB0aG9zZSBtYXRjaGVkIGJ5IGFuIGV4Y2x1ZGUKKwlwYXR0ZXJuLgorCistczo6CistLXN0YWdlOjoKKwlTaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUsIG1vZGUgYml0cyBhbmQgc3RhZ2UgbnVtYmVyIGluIHRoZSBvdXRwdXQuCisKKy0tZGlyZWN0b3J5OjoKKwlJZiBhIHdob2xlIGRpcmVjdG9yeSBpcyBjbGFzc2lmaWVkIGFzICJvdGhlciIsIHNob3cganVzdCBpdHMKKwluYW1lICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpIGFuZCBub3QgaXRzIHdob2xlIGNvbnRlbnRzLgorCistLW5vLWVtcHR5LWRpcmVjdG9yeTo6CisJRG8gbm90IGxpc3QgZW1wdHkgZGlyZWN0b3JpZXMuIEhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLWRpcmVjdG9yeS4KKworLXU6OgorLS11bm1lcmdlZDo6CisJU2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChmb3JjZXMgLS1zdGFnZSkKKworLWs6OgorLS1raWxsZWQ6OgorCVNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQgZHVlCisJdG8gZmlsZS9kaXJlY3RvcnkgY29uZmxpY3RzIGZvciBjaGVja291dC1pbmRleCB0bworCXN1Y2NlZWQuCisKKy16OjoKKwlcMCBsaW5lIHRlcm1pbmF0aW9uIG9uIG91dHB1dC4KKworLXggPHBhdHRlcm4+OjoKKy0tZXhjbHVkZT08cGF0dGVybj46OgorCVNraXAgdW50cmFja2VkIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4uCisJTm90ZSB0aGF0IHBhdHRlcm4gaXMgYSBzaGVsbCB3aWxkY2FyZCBwYXR0ZXJuLiBTZWUgRVhDTFVERSBQQVRURVJOUworCWJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCistWCA8ZmlsZT46OgorLS1leGNsdWRlLWZyb209PGZpbGU+OjoKKwlSZWFkIGV4Y2x1ZGUgcGF0dGVybnMgZnJvbSA8ZmlsZT47IDEgcGVyIGxpbmUuCisKKy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxmaWxlPjo6CisJUmVhZCBhZGRpdGlvbmFsIGV4Y2x1ZGUgcGF0dGVybnMgdGhhdCBhcHBseSBvbmx5IHRvIHRoZQorCWRpcmVjdG9yeSBhbmQgaXRzIHN1YmRpcmVjdG9yaWVzIGluIDxmaWxlPi4KKworLS1leGNsdWRlLXN0YW5kYXJkOjoKKwlBZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zOiAuZ2l0L2luZm8vZXhjbHVkZSwgLmdpdGlnbm9yZQorCWluIGVhY2ggZGlyZWN0b3J5LCBhbmQgdGhlIHVzZXIncyBnbG9iYWwgZXhjbHVzaW9uIGZpbGUuCisKKy0tZXJyb3ItdW5tYXRjaDo6CisJSWYgYW55IDxmaWxlPiBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuCisJZXJyb3IgKHJldHVybiAxKS4KKworLS13aXRoLXRyZWU9PHRyZWUtaXNoPjo6CisJV2hlbiB1c2luZyAtLWVycm9yLXVubWF0Y2ggdG8gZXhwYW5kIHRoZSB1c2VyIHN1cHBsaWVkCisJPGZpbGU+IChpLmUuIHBhdGggcGF0dGVybikgYXJndW1lbnRzIHRvIHBhdGhzLCBwcmV0ZW5kCisJdGhhdCBwYXRocyB3aGljaCB3ZXJlIHJlbW92ZWQgaW4gdGhlIGluZGV4IHNpbmNlIHRoZQorCW5hbWVkIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQuICBVc2luZyB0aGlzIG9wdGlvbgorCXdpdGggYC1zYCBvciBgLXVgIG9wdGlvbnMgZG9lcyBub3QgbWFrZSBhbnkgc2Vuc2UuCisKKy10OjoKKwlUaGlzIGZlYXR1cmUgaXMgc2VtaS1kZXByZWNhdGVkLiBGb3Igc2NyaXB0aW5nIHB1cnBvc2UsCisJbGlua2dpdDpnaXQtc3RhdHVzWzFdIGAtLXBvcmNlbGFpbmAgYW5kCisJbGlua2dpdDpnaXQtZGlmZi1maWxlc1sxXSBgLS1uYW1lLXN0YXR1c2AgYXJlIGFsbW9zdCBhbHdheXMKKwlzdXBlcmlvciBhbHRlcm5hdGl2ZXMsIGFuZCB1c2VycyBzaG91bGQgbG9vayBhdAorCWxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBgLS1zaG9ydGAgb3IgbGlua2dpdDpnaXQtZGlmZlsxXQorCWAtLW5hbWUtc3RhdHVzYCBmb3IgbW9yZSB1c2VyLWZyaWVuZGx5IGFsdGVybmF0aXZlcy4KKysKK1RoaXMgb3B0aW9uIGlkZW50aWZpZXMgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGhlIGZvbGxvd2luZyB0YWdzIChmb2xsb3dlZCBieQorYSBzcGFjZSkgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggbGluZToKKworCUg6OgljYWNoZWQKKwlTOjoJc2tpcC13b3JrdHJlZQorCU06Ogl1bm1lcmdlZAorCVI6OglyZW1vdmVkL2RlbGV0ZWQKKwlDOjoJbW9kaWZpZWQvY2hhbmdlZAorCUs6Ogl0byBiZSBraWxsZWQKKwk/OjoJb3RoZXIKKworLXY6OgorCVNpbWlsYXIgdG8gYC10YCwgYnV0IHVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgZmlsZXMKKwl0aGF0IGFyZSBtYXJrZWQgYXMgJ2Fzc3VtZSB1bmNoYW5nZWQnIChzZWUKKwlsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0pLgorCistLWZ1bGwtbmFtZTo6CisJV2hlbiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSwgdGhlIGNvbW1hbmQgdXN1YWxseQorCW91dHB1dHMgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgVGhpcworCW9wdGlvbiBmb3JjZXMgcGF0aHMgdG8gYmUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0CisJdG9wIGRpcmVjdG9yeS4KKworLS1hYmJyZXZbPTxuPl06OgorCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgZnVsbCA0MC1ieXRlIGhleGFkZWNpbWFsIG9iamVjdAorCWxpbmVzLCBzaG93IG9ubHkgYSBwYXJ0aWFsIHByZWZpeC4KKwlOb24gZGVmYXVsdCBudW1iZXIgb2YgZGlnaXRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCAtLWFiYnJldj08bj4uCisKKy0tZGVidWc6OgorCUFmdGVyIGVhY2ggbGluZSB0aGF0IGRlc2NyaWJlcyBhIGZpbGUsIGFkZCBtb3JlIGRhdGEgYWJvdXQgaXRzCisJY2FjaGUgZW50cnkuICBUaGlzIGlzIGludGVuZGVkIHRvIHNob3cgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcworCXBvc3NpYmxlIGZvciBtYW51YWwgaW5zcGVjdGlvbjsgdGhlIGV4YWN0IGZvcm1hdCBtYXkgY2hhbmdlIGF0CisJYW55IHRpbWUuCisKK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworPGZpbGU+OjoKKwlGaWxlcyB0byBzaG93LiBJZiBubyBmaWxlcyBhcmUgZ2l2ZW4gYWxsIGZpbGVzIHdoaWNoIG1hdGNoIHRoZSBvdGhlcgorCXNwZWNpZmllZCBjcml0ZXJpYSBhcmUgc2hvd24uCisKK091dHB1dAorLS0tLS0tCisnZ2l0IGxzLWZpbGVzJyBqdXN0IG91dHB1dHMgdGhlIGZpbGVuYW1lcyB1bmxlc3MgJy0tc3RhZ2UnIGlzIHNwZWNpZmllZCBpbgord2hpY2ggY2FzZSBpdCBvdXRwdXRzOgorCisgICAgICAgIFs8dGFnPiBdPG1vZGU+IDxvYmplY3Q+IDxzdGFnZT4gPGZpbGU+CisKKydnaXQgbHMtZmlsZXMgLS11bm1lcmdlZCcgYW5kICdnaXQgbHMtZmlsZXMgLS1zdGFnZScgY2FuIGJlIHVzZWQgdG8gZXhhbWluZQorZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdW5tZXJnZWQgcGF0aHMuCisKK0ZvciBhbiB1bm1lcmdlZCBwYXRoLCBpbnN0ZWFkIG9mIHJlY29yZGluZyBhIHNpbmdsZSBtb2RlL1NIQTEgcGFpciwKK3RoZSBpbmRleCByZWNvcmRzIHVwIHRvIHRocmVlIHN1Y2ggcGFpcnM7IG9uZSBmcm9tIHRyZWUgTyBpbiBzdGFnZQorMSwgQSBpbiBzdGFnZSAyLCBhbmQgQiBpbiBzdGFnZSAzLiAgVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCBieQordGhlIHVzZXIgKG9yIHRoZSBwb3JjZWxhaW4pIHRvIHNlZSB3aGF0IHNob3VsZCBldmVudHVhbGx5IGJlIHJlY29yZGVkIGF0IHRoZQorcGF0aC4gKHNlZSBsaW5rZ2l0OmdpdC1yZWFkLXRyZWVbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3RhdGUpCisKK1doZW4gYC16YCBvcHRpb24gaXMgbm90IHVzZWQsIFRBQiwgTEYsIGFuZCBiYWNrc2xhc2ggY2hhcmFjdGVycworaW4gcGF0aG5hbWVzIGFyZSByZXByZXNlbnRlZCBhcyBgXHRgLCBgXG5gLCBhbmQgYFxcYCwKK3Jlc3BlY3RpdmVseS4KKworCitFeGNsdWRlIFBhdHRlcm5zCistLS0tLS0tLS0tLS0tLS0tCisKKydnaXQgbHMtZmlsZXMnIGNhbiB1c2UgYSBsaXN0IG9mICJleGNsdWRlIHBhdHRlcm5zIiB3aGVuCit0cmF2ZXJzaW5nIHRoZSBkaXJlY3RvcnkgdHJlZSBhbmQgZmluZGluZyBmaWxlcyB0byBzaG93IHdoZW4gdGhlCitmbGFncyAtLW90aGVycyBvciAtLWlnbm9yZWQgYXJlIHNwZWNpZmllZC4gIGxpbmtnaXQ6Z2l0aWdub3JlWzVdCitzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiBleGNsdWRlIHBhdHRlcm5zLgorCitUaGVzZSBleGNsdWRlIHBhdHRlcm5zIGNvbWUgZnJvbSB0aGVzZSBwbGFjZXMsIGluIG9yZGVyOgorCisgIDEuIFRoZSBjb21tYW5kIGxpbmUgZmxhZyAtLWV4Y2x1ZGU9PHBhdHRlcm4+IHNwZWNpZmllcyBhCisgICAgIHNpbmdsZSBwYXR0ZXJuLiAgUGF0dGVybnMgYXJlIG9yZGVyZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAgdGhleSBhcHBlYXIgaW4gdGhlIGNvbW1hbmQgbGluZS4KKworICAyLiBUaGUgY29tbWFuZCBsaW5lIGZsYWcgLS1leGNsdWRlLWZyb209PGZpbGU+IHNwZWNpZmllcyBhCisgICAgIGZpbGUgY29udGFpbmluZyBhIGxpc3Qgb2YgcGF0dGVybnMuICBQYXR0ZXJucyBhcmUgb3JkZXJlZAorICAgICBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgZmlsZS4KKworICAzLiBUaGUgY29tbWFuZCBsaW5lIGZsYWcgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PG5hbWU+IHNwZWNpZmllcworICAgICBhIG5hbWUgb2YgdGhlIGZpbGUgaW4gZWFjaCBkaXJlY3RvcnkgJ2dpdCBscy1maWxlcycKKyAgICAgZXhhbWluZXMsIG5vcm1hbGx5IGAuZ2l0aWdub3JlYC4gIEZpbGVzIGluIGRlZXBlcgorICAgICBkaXJlY3RvcmllcyB0YWtlIHByZWNlZGVuY2UuICBQYXR0ZXJucyBhcmUgb3JkZXJlZCBpbiB0aGUKKyAgICAgc2FtZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgZmlsZXMuCisKK0EgcGF0dGVybiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIC0tZXhjbHVkZSBvciByZWFkCitmcm9tIHRoZSBmaWxlIHNwZWNpZmllZCB3aXRoIC0tZXhjbHVkZS1mcm9tIGlzIHJlbGF0aXZlIHRvIHRoZQordG9wIG9mIHRoZSBkaXJlY3RvcnkgdHJlZS4gIEEgcGF0dGVybiByZWFkIGZyb20gYSBmaWxlIHNwZWNpZmllZAorYnkgLS1leGNsdWRlLXBlci1kaXJlY3RvcnkgaXMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHRoZQorcGF0dGVybiBmaWxlIGFwcGVhcnMgaW4uCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcmVhZC10cmVlWzFdLCBsaW5rZ2l0OmdpdGlnbm9yZVs1XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NGRlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0CkBAIC0wLDAgKzEsODMgQEAKK2dpdC1scy1yZW1vdGUoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWxzLXJlbW90ZSAtIExpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGxzLXJlbW90ZScgWy0taGVhZHNdIFstLXRhZ3NdICBbLXUgPGV4ZWM+IHwgLS11cGxvYWQtcGFjayA8ZXhlYz5dCisJICAgICAgWy0tZXhpdC1jb2RlXSA8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitEaXNwbGF5cyByZWZlcmVuY2VzIGF2YWlsYWJsZSBpbiBhIHJlbW90ZSByZXBvc2l0b3J5IGFsb25nIHdpdGggdGhlIGFzc29jaWF0ZWQKK2NvbW1pdCBJRHMuCisKKworT1BUSU9OUworLS0tLS0tLQorLWg6OgorLS1oZWFkczo6CistdDo6CistLXRhZ3M6OgorCUxpbWl0IHRvIG9ubHkgcmVmcy9oZWFkcyBhbmQgcmVmcy90YWdzLCByZXNwZWN0aXZlbHkuCisJVGhlc2Ugb3B0aW9ucyBhcmUgX25vdF8gbXV0dWFsbHkgZXhjbHVzaXZlOyB3aGVuIGdpdmVuCisJYm90aCwgcmVmZXJlbmNlcyBzdG9yZWQgaW4gcmVmcy9oZWFkcyBhbmQgcmVmcy90YWdzIGFyZQorCWRpc3BsYXllZC4KKworLXUgPGV4ZWM+OjoKKy0tdXBsb2FkLXBhY2s9PGV4ZWM+OjoKKwlTcGVjaWZ5IHRoZSBmdWxsIHBhdGggb2YgJ2dpdC11cGxvYWQtcGFjaycgb24gdGhlIHJlbW90ZQorCWhvc3QuIFRoaXMgYWxsb3dzIGxpc3RpbmcgcmVmZXJlbmNlcyBmcm9tIHJlcG9zaXRvcmllcyBhY2Nlc3NlZCB2aWEKKwlTU0ggYW5kIHdoZXJlIHRoZSBTU0ggZGFlbW9uIGRvZXMgbm90IHVzZSB0aGUgUEFUSCBjb25maWd1cmVkIGJ5IHRoZQorCXVzZXIuCisKKy0tZXhpdC1jb2RlOjoKKwlFeGl0IHdpdGggc3RhdHVzICIyIiB3aGVuIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIGluIHRoZSByZW1vdGUKKwlyZXBvc2l0b3J5LiBVc3VhbGx5IHRoZSBjb21tYW5kIGV4aXRzIHdpdGggc3RhdHVzICIwIiB0byBpbmRpY2F0ZQorCWl0IHN1Y2Nlc3NmdWxseSB0YWxrZWQgd2l0aCB0aGUgcmVtb3RlIHJlcG9zaXRvcnksIHdoZXRoZXIgaXQKKwlmb3VuZCBhbnkgbWF0Y2hpbmcgcmVmcy4KKworLS1nZXQtdXJsOjoKKwlFeHBhbmQgdGhlIFVSTCBvZiB0aGUgZ2l2ZW4gcmVtb3RlIHJlcG9zaXRvcnkgdGFraW5nIGludG8gYWNjb3VudCBhbnkKKwkidXJsLjxiYXNlPi5pbnN0ZWFkT2YiIGNvbmZpZyBzZXR0aW5nIChTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKSBhbmQKKwlleGl0IHdpdGhvdXQgdGFsa2luZyB0byB0aGUgcmVtb3RlLgorCis8cmVwb3NpdG9yeT46OgorCUxvY2F0aW9uIG9mIHRoZSByZXBvc2l0b3J5LiAgVGhlIHNob3J0aGFuZCBkZWZpbmVkIGluCisJJEdJVF9ESVIvYnJhbmNoZXMvIGNhbiBiZSB1c2VkLiBVc2UgIi4iIChkb3QpIHRvIGxpc3QgcmVmZXJlbmNlcyBpbgorCXRoZSBsb2NhbCByZXBvc2l0b3J5LgorCis8cmVmcz4uLi46OgorCVdoZW4gdW5zcGVjaWZpZWQsIGFsbCByZWZlcmVuY2VzLCBhZnRlciBmaWx0ZXJpbmcgZG9uZQorCXdpdGggLS1oZWFkcyBhbmQgLS10YWdzLCBhcmUgc2hvd24uICBXaGVuIDxyZWZzPi4uLiBhcmUKKwlzcGVjaWZpZWQsIG9ubHkgcmVmZXJlbmNlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0dGVybnMKKwlhcmUgZGlzcGxheWVkLgorCitFWEFNUExFUworLS0tLS0tLS0KKworCSQgZ2l0IGxzLXJlbW90ZSAtLXRhZ3MgLi8uCisJZDY2MDJlYzUxOTRjODdiMGZjODcxMDNjYTRkNjcyNTFjNzZmMjMzYQlyZWZzL3RhZ3MvdjAuOTkKKwlmMjVhMjY1YTM0MmFlZDYwNDFhYjBjYzQ4NDIyNGQ5Y2E1NGI2ZjQxCXJlZnMvdGFncy92MC45OS4xCisJN2NlY2EyNzVkMDQ3YzkwYzBjN2Q1YWZiMTNhYjk3ZWZkZjUxYmQ2ZQlyZWZzL3RhZ3MvdjAuOTkuMworCWM1ZGI1NDU2YWUzYjA4NzNmYzY1OWMxOWZhZmRkZTIyMzEzY2M0NDEJcmVmcy90YWdzL3YwLjk5LjIKKwkwOTE4Mzg1ZGJkOTY1NmNhYjBkMWQ4MWJhNzQ1M2Q0OWJiYzE2MjUwCXJlZnMvdGFncy9qdW5pby1ncGctcHViCisJJCBnaXQgbHMtcmVtb3RlIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0IG1hc3RlciBwdSByYworCTVmZTk3OGE1MzgxZjFmYmFkMjZhODBlNjgyZGRkMmE0MDE5NjY3NDAJcmVmcy9oZWFkcy9tYXN0ZXIKKwljNzgxYTg0YjUyMDRmYjI5NGM5Y2NjNzlmOGIzYmFjZWViMzJjMDYxCXJlZnMvaGVhZHMvcHUKKwliMWQwOTZmMjkyNmM0ZTM3YzljMGI2YTdiZjIxMTliZWRhYTI3N2NiCXJlZnMvaGVhZHMvcmMKKwkkIGVjaG8gaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQgPi5naXQvYnJhbmNoZXMvcHVibGljCisJJCBnaXQgbHMtcmVtb3RlIC0tdGFncyBwdWJsaWMgdlwqCisJZDY2MDJlYzUxOTRjODdiMGZjODcxMDNjYTRkNjcyNTFjNzZmMjMzYQlyZWZzL3RhZ3MvdjAuOTkKKwlmMjVhMjY1YTM0MmFlZDYwNDFhYjBjYzQ4NDIyNGQ5Y2E1NGI2ZjQxCXJlZnMvdGFncy92MC45OS4xCisJYzVkYjU0NTZhZTNiMDg3M2ZjNjU5YzE5ZmFmZGRlMjIzMTNjYzQ0MQlyZWZzL3RhZ3MvdjAuOTkuMgorCTdjZWNhMjc1ZDA0N2M5MGMwYzdkNWFmYjEzYWI5N2VmZGY1MWJkNmUJcmVmcy90YWdzL3YwLjk5LjMKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZTg3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dApAQCAtMCwwICsxLDEwMCBAQAorZ2l0LWxzLXRyZWUoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1scy10cmVlIC0gTGlzdCB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBscy10cmVlJyBbLWRdIFstcl0gWy10XSBbLWxdIFstel0KKwkgICAgWy0tbmFtZS1vbmx5XSBbLS1uYW1lLXN0YXR1c10gWy0tZnVsbC1uYW1lXSBbLS1mdWxsLXRyZWVdIFstLWFiYnJldls9PG4+XV0KKwkgICAgPHRyZWUtaXNoPiBbPHBhdGg+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0xpc3RzIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIHRyZWUgb2JqZWN0LCBsaWtlIHdoYXQgIi9iaW4vbHMgLWEiIGRvZXMKK2luIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgTm90ZSB0aGF0OgorCisgLSB0aGUgYmVoYXZpb3VyIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoYXQgb2YgIi9iaW4vbHMiIGluIHRoYXQgdGhlCisgICAnPHBhdGg+JyBkZW5vdGVzIGp1c3QgYSBsaXN0IG9mIHBhdHRlcm5zIHRvIG1hdGNoLCBlLmcuIHNvIHNwZWNpZnlpbmcKKyAgIGRpcmVjdG9yeSBuYW1lICh3aXRob3V0ICctcicpIHdpbGwgYmVoYXZlIGRpZmZlcmVudGx5LCBhbmQgb3JkZXIgb2YgdGhlCisgICBhcmd1bWVudHMgZG9lcyBub3QgbWF0dGVyLgorCisgLSB0aGUgYmVoYXZpb3VyIGlzIHNpbWlsYXIgdG8gdGhhdCBvZiAiL2Jpbi9scyIgaW4gdGhhdCB0aGUgJzxwYXRoPicgaXMKKyAgIHRha2VuIGFzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgRS5nLiB3aGVuIHlvdSBhcmUKKyAgIGluIGEgZGlyZWN0b3J5ICdzdWInIHRoYXQgaGFzIGEgZGlyZWN0b3J5ICdkaXInLCB5b3UgY2FuIHJ1biAnZ2l0CisgICBscy10cmVlIC1yIEhFQUQgZGlyJyB0byBsaXN0IHRoZSBjb250ZW50cyBvZiB0aGUgdHJlZSAodGhhdCBpcworICAgJ3N1Yi9kaXInIGluICdIRUFEJykuICBZb3UgZG9uJ3Qgd2FudCB0byBnaXZlIGEgdHJlZSB0aGF0IGlzIG5vdCBhdCB0aGUKKyAgIHJvb3QgbGV2ZWwgKGUuZy4gYGdpdCBscy10cmVlIC1yIEhFQUQ6c3ViIGRpcmApIGluIHRoaXMgY2FzZSwgYXMgdGhhdAorICAgd291bGQgcmVzdWx0IGluIGFza2luZyBmb3IgJ3N1Yi9zdWIvZGlyJyBpbiB0aGUgJ0hFQUQnIGNvbW1pdC4KKyAgIEhvd2V2ZXIsIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGNhbiBiZSBpZ25vcmVkIGJ5IHBhc3NpbmcKKyAgIC0tZnVsbC10cmVlIG9wdGlvbi4KKworT1BUSU9OUworLS0tLS0tLQorPHRyZWUtaXNoPjo6CisJSWQgb2YgYSB0cmVlLWlzaC4KKworLWQ6OgorCVNob3cgb25seSB0aGUgbmFtZWQgdHJlZSBlbnRyeSBpdHNlbGYsIG5vdCBpdHMgY2hpbGRyZW4uCisKKy1yOjoKKwlSZWN1cnNlIGludG8gc3ViLXRyZWVzLgorCistdDo6CisJU2hvdyB0cmVlIGVudHJpZXMgZXZlbiB3aGVuIGdvaW5nIHRvIHJlY3Vyc2UgdGhlbS4gSGFzIG5vIGVmZmVjdAorCWlmICctcicgd2FzIG5vdCBwYXNzZWQuICctZCcgaW1wbGllcyAnLXQnLgorCistbDo6CistLWxvbmc6OgorCVNob3cgb2JqZWN0IHNpemUgb2YgYmxvYiAoZmlsZSkgZW50cmllcy4KKworLXo6OgorCVwwIGxpbmUgdGVybWluYXRpb24gb24gb3V0cHV0LgorCistLW5hbWUtb25seTo6CistLW5hbWUtc3RhdHVzOjoKKwlMaXN0IG9ubHkgZmlsZW5hbWVzIChpbnN0ZWFkIG9mIHRoZSAibG9uZyIgb3V0cHV0KSwgb25lIHBlciBsaW5lLgorCistLWFiYnJldls9PG4+XTo6CisJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgb2JqZWN0CisJbGluZXMsIHNob3cgb25seSBhIHBhcnRpYWwgcHJlZml4LgorCU5vbiBkZWZhdWx0IG51bWJlciBvZiBkaWdpdHMgY2FuIGJlIHNwZWNpZmllZCB3aXRoIC0tYWJicmV2PTxuPi4KKworLS1mdWxsLW5hbWU6OgorCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgcGF0aCBuYW1lcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nCisJZGlyZWN0b3J5LCBzaG93IHRoZSBmdWxsIHBhdGggbmFtZXMuCisKKy0tZnVsbC10cmVlOjoKKwlEbyBub3QgbGltaXQgdGhlIGxpc3RpbmcgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisJSW1wbGllcyAtLWZ1bGwtbmFtZS4KKworWzxwYXRoPi4uLl06OgorCVdoZW4gcGF0aHMgYXJlIGdpdmVuLCBzaG93IHRoZW0gKG5vdGUgdGhhdCB0aGlzIGlzbid0IHJlYWxseSByYXcKKwlwYXRobmFtZXMsIGJ1dCByYXRoZXIgYSBsaXN0IG9mIHBhdHRlcm5zIHRvIG1hdGNoKS4gIE90aGVyd2lzZQorCWltcGxpY2l0bHkgdXNlcyB0aGUgcm9vdCBsZXZlbCBvZiB0aGUgdHJlZSBhcyB0aGUgc29sZSBwYXRoIGFyZ3VtZW50LgorCisKK091dHB1dCBGb3JtYXQKKy0tLS0tLS0tLS0tLS0KKyAgICAgICAgPG1vZGU+IFNQIDx0eXBlPiBTUCA8b2JqZWN0PiBUQUIgPGZpbGU+CisKK1VubGVzcyB0aGUgYC16YCBvcHRpb24gaXMgdXNlZCwgVEFCLCBMRiwgYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzCitpbiBwYXRobmFtZXMgYXJlIHJlcHJlc2VudGVkIGFzIGBcdGAsIGBcbmAsIGFuZCBgXFxgLCByZXNwZWN0aXZlbHkuCitUaGlzIG91dHB1dCBmb3JtYXQgaXMgY29tcGF0aWJsZSB3aXRoIHdoYXQgYC0taW5kZXgtaW5mbyAtLXN0ZGluYCBvZgorJ2dpdCB1cGRhdGUtaW5kZXgnIGV4cGVjdHMuCisKK1doZW4gdGhlIGAtbGAgb3B0aW9uIGlzIHVzZWQsIGZvcm1hdCBjaGFuZ2VzIHRvCisKKyAgICAgICAgPG1vZGU+IFNQIDx0eXBlPiBTUCA8b2JqZWN0PiBTUCA8b2JqZWN0IHNpemU+IFRBQiA8ZmlsZT4KKworT2JqZWN0IHNpemUgaWRlbnRpZmllZCBieSA8b2JqZWN0PiBpcyBnaXZlbiBpbiBieXRlcywgYW5kIHJpZ2h0LWp1c3RpZmllZAord2l0aCBtaW5pbXVtIHdpZHRoIG9mIDcgY2hhcmFjdGVycy4gIE9iamVjdCBzaXplIGlzIGdpdmVuIG9ubHkgZm9yIGJsb2JzCisoZmlsZSkgZW50cmllczsgZm9yIG90aGVyIGVudHJpZXMgYC1gIGNoYXJhY3RlciBpcyB1c2VkIGluIHBsYWNlIG9mIHNpemUuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWFpbGluZm8udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWFpbGluZm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTdhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsaW5mby50eHQKQEAgLTAsMCArMSw5NyBAQAorZ2l0LW1haWxpbmZvKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1haWxpbmZvIC0gRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtYWlsaW5mbycgWy1rfC1iXSBbLXUgfCAtLWVuY29kaW5nPTxlbmNvZGluZz4gfCAtbl0gWy0tc2Npc3NvcnNdIDxtc2c+IDxwYXRjaD4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWRzIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBhbmQKK3dyaXRlcyB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGluIDxtc2c+IGZpbGUsIGFuZCB0aGUgcGF0Y2hlcyBpbgorPHBhdGNoPiBmaWxlLiAgVGhlIGF1dGhvciBuYW1lLCBlLW1haWwgYW5kIGUtbWFpbCBzdWJqZWN0IGFyZQord3JpdHRlbiBvdXQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCB0byBiZSB1c2VkIGJ5ICdnaXQgYW0nCit0byBjcmVhdGUgYSBjb21taXQuICBJdCBpcyB1c3VhbGx5IG5vdCBuZWNlc3NhcnkgdG8gdXNlIHRoaXMKK2NvbW1hbmQgZGlyZWN0bHkuICBTZWUgbGlua2dpdDpnaXQtYW1bMV0gaW5zdGVhZC4KKworCitPUFRJT05TCistLS0tLS0tCistazo6CisJVXN1YWxseSB0aGUgcHJvZ3JhbSByZW1vdmVzIGVtYWlsIGNydWZ0IGZyb20gdGhlIFN1YmplY3Q6CisJaGVhZGVyIGxpbmUgdG8gZXh0cmFjdCB0aGUgdGl0bGUgbGluZSBmb3IgdGhlIGNvbW1pdCBsb2cKKwltZXNzYWdlLiAgVGhpcyBvcHRpb24gcHJldmVudHMgdGhpcyBtdW5naW5nLCBhbmQgaXMgbW9zdAorCXVzZWZ1bCB3aGVuIHVzZWQgdG8gcmVhZCBiYWNrICdnaXQgZm9ybWF0LXBhdGNoIC1rJyBvdXRwdXQuCisrCitTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgYXJlIHJlbW92ZWQgdW50aWwgbm9uZSBvZiB0aGVtIHJlbWFpbjoKKysKKy0tCisqCUxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisKKyoJTGVhZGluZyBgUmU6YCwgYHJlOmAsIGFuZCBgOmAuCisKKyoJTGVhZGluZyBicmFja2V0ZWQgc3RyaW5ncyAoYmV0d2VlbiBgW2AgYW5kIGBdYCwgdXN1YWxseQorCWBbUEFUQ0hdYCkuCistLQorKworRmluYWxseSwgcnVucyBvZiB3aGl0ZXNwYWNlIGFyZSBub3JtYWxpemVkIHRvIGEgc2luZ2xlIEFTQ0lJIHNwYWNlCitjaGFyYWN0ZXIuCisKKy1iOjoKKwlXaGVuIC1rIGlzIG5vdCBpbiBlZmZlY3QsIGFsbCBsZWFkaW5nIHN0cmluZ3MgYnJhY2tldGVkIHdpdGggJ1snCisJYW5kICddJyBwYWlycyBhcmUgc3RyaXBwZWQuICBUaGlzIG9wdGlvbiBsaW1pdHMgdGhlIHN0cmlwcGluZyB0bworCW9ubHkgdGhlIHBhaXJzIHdob3NlIGJyYWNrZXRlZCBzdHJpbmcgY29udGFpbnMgdGhlIHdvcmQgIlBBVENIIi4KKworLXU6OgorCVRoZSBjb21taXQgbG9nIG1lc3NhZ2UsIGF1dGhvciBuYW1lIGFuZCBhdXRob3IgZW1haWwgYXJlCisJdGFrZW4gZnJvbSB0aGUgZS1tYWlsLCBhbmQgYWZ0ZXIgbWluaW1hbGx5IGRlY29kaW5nIE1JTUUKKwl0cmFuc2ZlciBlbmNvZGluZywgcmUtY29kZWQgaW4gdGhlIGNoYXJzZXQgc3BlY2lmaWVkIGJ5CisJaTE4bi5jb21taXRlbmNvZGluZyAoZGVmYXVsdGluZyB0byBVVEYtOCkgYnkgdHJhbnNsaXRlcmF0aW5nCisJdGhlbS4gIFRoaXMgdXNlZCB0byBiZSBvcHRpb25hbCBidXQgbm93IGl0IGlzIHRoZSBkZWZhdWx0LgorKworTm90ZSB0aGF0IHRoZSBwYXRjaCBpcyBhbHdheXMgdXNlZCBhcy1pcyB3aXRob3V0IGNoYXJzZXQKK2NvbnZlcnNpb24sIGV2ZW4gd2l0aCB0aGlzIGZsYWcuCisKKy0tZW5jb2Rpbmc9PGVuY29kaW5nPjo6CisJU2ltaWxhciB0byAtdS4gIEJ1dCB3aGVuIHJlLWNvZGluZywgdGhlIGNoYXJzZXQgc3BlY2lmaWVkIGhlcmUgaXMKKwl1c2VkIGluc3RlYWQgb2YgdGhlIG9uZSBzcGVjaWZpZWQgYnkgaTE4bi5jb21taXRlbmNvZGluZyBvciBVVEYtOC4KKworLW46OgorCURpc2FibGUgYWxsIGNoYXJzZXQgcmUtY29kaW5nIG9mIHRoZSBtZXRhZGF0YS4KKworLS1zY2lzc29yczo6CisJUmVtb3ZlIGV2ZXJ5dGhpbmcgaW4gYm9keSBiZWZvcmUgYSBzY2lzc29ycyBsaW5lLiAgQSBsaW5lIHRoYXQKKwltYWlubHkgY29uc2lzdHMgb2Ygc2Npc3NvcnMgKGVpdGhlciAiPjgiIG9yICI4PCIpIGFuZCBwZXJmb3JhdGlvbgorCShkYXNoICItIikgbWFya3MgaXMgY2FsbGVkIGEgc2Npc3NvcnMgbGluZSwgYW5kIGlzIHVzZWQgdG8gcmVxdWVzdAorCXRoZSByZWFkZXIgdG8gY3V0IHRoZSBtZXNzYWdlIGF0IHRoYXQgbGluZS4gIElmIHN1Y2ggYSBsaW5lCisJYXBwZWFycyBpbiB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZSBiZWZvcmUgdGhlIHBhdGNoLCBldmVyeXRoaW5nCisJYmVmb3JlIGl0IChpbmNsdWRpbmcgdGhlIHNjaXNzb3JzIGxpbmUgaXRzZWxmKSBpcyBpZ25vcmVkIHdoZW4KKwl0aGlzIG9wdGlvbiBpcyB1c2VkLgorKworVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gYmVnaW4geW91ciBtZXNzYWdlIGluIGEgZGlzY3Vzc2lvbiB0aHJlYWQKK3dpdGggY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIG9uIHRoZSBtZXNzYWdlIHlvdSBhcmUgcmVzcG9uZGluZyB0bywgYW5kIHRvCitjb25jbHVkZSBpdCB3aXRoIGEgcGF0Y2ggc3VibWlzc2lvbiwgc2VwYXJhdGluZyB0aGUgZGlzY3Vzc2lvbiBhbmQgdGhlCitiZWdpbm5pbmcgb2YgdGhlIHByb3Bvc2VkIGNvbW1pdCBsb2cgbWVzc2FnZSB3aXRoIGEgc2Npc3NvcnMgbGluZS4KKysKK1RoaXMgY2FuIGVuYWJsZWQgYnkgZGVmYXVsdCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBtYWlsaW5mby5zY2lzc29ycy4KKworLS1uby1zY2lzc29yczo6CisJSWdub3JlIHNjaXNzb3JzIGxpbmVzLiBVc2VmdWwgZm9yIG92ZXJyaWRpbmcgbWFpbGluZm8uc2Npc3NvcnMgc2V0dGluZ3MuCisKKzxtc2c+OjoKKwlUaGUgY29tbWl0IGxvZyBtZXNzYWdlIGV4dHJhY3RlZCBmcm9tIGUtbWFpbCwgdXN1YWxseQorCWV4Y2VwdCB0aGUgdGl0bGUgbGluZSB3aGljaCBjb21lcyBmcm9tIGUtbWFpbCBTdWJqZWN0LgorCis8cGF0Y2g+OjoKKwlUaGUgcGF0Y2ggZXh0cmFjdGVkIGZyb20gZS1tYWlsLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsc3BsaXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMWI4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsc3BsaXQudHh0CkBAIC0wLDAgKzEsNTIgQEAKK2dpdC1tYWlsc3BsaXQoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1haWxzcGxpdCAtIFNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWFpbHNwbGl0JyBbLWJdIFstZjxubj5dIFstZDxwcmVjPl0gWy0ta2VlcC1jcl0gLW88ZGlyZWN0b3J5PiBbLS1dIFsoPG1ib3g+fDxNYWlsZGlyPikuLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU3BsaXRzIGEgbWJveCBmaWxlIG9yIGEgTWFpbGRpciBpbnRvIGEgbGlzdCBvZiBmaWxlczogIjAwMDEiICIwMDAyIiAuLiAgaW4gdGhlCitzcGVjaWZpZWQgZGlyZWN0b3J5IHNvIHlvdSBjYW4gcHJvY2VzcyB0aGVtIGZ1cnRoZXIgZnJvbSB0aGVyZS4KKworSU1QT1JUQU5UOiBNYWlsZGlyIHNwbGl0dGluZyByZWxpZXMgdXBvbiBmaWxlbmFtZXMgYmVpbmcgc29ydGVkIHRvIG91dHB1dAorcGF0Y2hlcyBpbiB0aGUgY29ycmVjdCBvcmRlci4KKworT1BUSU9OUworLS0tLS0tLQorPG1ib3g+OjoKKwlNYm94IGZpbGUgdG8gc3BsaXQuICBJZiBub3QgZ2l2ZW4sIHRoZSBtYm94IGlzIHJlYWQgZnJvbQorCXRoZSBzdGFuZGFyZCBpbnB1dC4KKworPE1haWxkaXI+OjoKKwlSb290IG9mIHRoZSBNYWlsZGlyIHRvIHNwbGl0LiBUaGlzIGRpcmVjdG9yeSBzaG91bGQgY29udGFpbiB0aGUgY3VyLCB0bXAKKwlhbmQgbmV3IHN1YmRpcmVjdG9yaWVzLgorCistbzxkaXJlY3Rvcnk+OjoKKwlEaXJlY3RvcnkgaW4gd2hpY2ggdG8gcGxhY2UgdGhlIGluZGl2aWR1YWwgbWVzc2FnZXMuCisKKy1iOjoKKwlJZiBhbnkgZmlsZSBkb2Vzbid0IGJlZ2luIHdpdGggYSBGcm9tIGxpbmUsIGFzc3VtZSBpdCBpcyBhCisJc2luZ2xlIG1haWwgbWVzc2FnZSBpbnN0ZWFkIG9mIHNpZ25hbGluZyBlcnJvci4KKworLWQ8cHJlYz46OgorCUluc3RlYWQgb2YgdGhlIGRlZmF1bHQgNCBkaWdpdHMgd2l0aCBsZWFkaW5nIHplcm9zLAorCWRpZmZlcmVudCBwcmVjaXNpb24gY2FuIGJlIHNwZWNpZmllZCBmb3IgdGhlIGdlbmVyYXRlZAorCWZpbGVuYW1lcy4KKworLWY8bm4+OjoKKwlTa2lwIHRoZSBmaXJzdCA8bm4+IG51bWJlcnMsIGZvciBleGFtcGxlIGlmIC1mMyBpcyBzcGVjaWZpZWQsCisJc3RhcnQgdGhlIG51bWJlcmluZyB3aXRoIDAwMDQuCisKKy0ta2VlcC1jcjo6CisJRG8gbm90IHJlbW92ZSBgXHJgIGZyb20gbGluZXMgZW5kaW5nIHdpdGggYFxyXG5gLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtYmFzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4NDJlMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CkBAIC0wLDAgKzEsMTQ5IEBACitnaXQtbWVyZ2UtYmFzZSgxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdlLWJhc2UgLSBGaW5kIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZS1iYXNlJyBbLWF8LS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uCisnZ2l0IG1lcmdlLWJhc2UnIFstYXwtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uCisnZ2l0IG1lcmdlLWJhc2UnIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4KKydnaXQgbWVyZ2UtYmFzZScgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworJ2dpdCBtZXJnZS1iYXNlJyBmaW5kcyBiZXN0IGNvbW1vbiBhbmNlc3RvcihzKSBiZXR3ZWVuIHR3byBjb21taXRzIHRvIHVzZQoraW4gYSB0aHJlZS13YXkgbWVyZ2UuICBPbmUgY29tbW9uIGFuY2VzdG9yIGlzICdiZXR0ZXInIHRoYW4gYW5vdGhlciBjb21tb24KK2FuY2VzdG9yIGlmIHRoZSBsYXR0ZXIgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGZvcm1lci4gIEEgY29tbW9uIGFuY2VzdG9yCit0aGF0IGRvZXMgbm90IGhhdmUgYW55IGJldHRlciBjb21tb24gYW5jZXN0b3IgaXMgYSAnYmVzdCBjb21tb24KK2FuY2VzdG9yJywgaS5lLiBhICdtZXJnZSBiYXNlJy4gIE5vdGUgdGhhdCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZQorbWVyZ2UgYmFzZSBmb3IgYSBwYWlyIG9mIGNvbW1pdHMuCisKK09QRVJBVElPTiBNT0RFCistLS0tLS0tLS0tLS0tLQorCitBcyB0aGUgbW9zdCBjb21tb24gc3BlY2lhbCBjYXNlLCBzcGVjaWZ5aW5nIG9ubHkgdHdvIGNvbW1pdHMgb24gdGhlCitjb21tYW5kIGxpbmUgbWVhbnMgY29tcHV0aW5nIHRoZSBtZXJnZSBiYXNlIGJldHdlZW4gdGhlIGdpdmVuIHR3byBjb21taXRzLgorCitNb3JlIGdlbmVyYWxseSwgYW1vbmcgdGhlIHR3byBjb21taXRzIHRvIGNvbXB1dGUgdGhlIG1lcmdlIGJhc2UgZnJvbSwKK29uZSBpcyBzcGVjaWZpZWQgYnkgdGhlIGZpcnN0IGNvbW1pdCBhcmd1bWVudCBvbiB0aGUgY29tbWFuZCBsaW5lOwordGhlIG90aGVyIGNvbW1pdCBpcyBhIChwb3NzaWJseSBoeXBvdGhldGljYWwpIGNvbW1pdCB0aGF0IGlzIGEgbWVyZ2UKK2Fjcm9zcyBhbGwgdGhlIHJlbWFpbmluZyBjb21taXRzIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKK0FzIGEgY29uc2VxdWVuY2UsIHRoZSAnbWVyZ2UgYmFzZScgaXMgbm90IG5lY2Vzc2FyaWx5IGNvbnRhaW5lZCBpbiBlYWNoIG9mIHRoZQorY29tbWl0IGFyZ3VtZW50cyBpZiBtb3JlIHRoYW4gdHdvIGNvbW1pdHMgYXJlIHNwZWNpZmllZC4gVGhpcyBpcyBkaWZmZXJlbnQKK2Zyb20gbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0gd2hlbiB1c2VkIHdpdGggdGhlIGAtLW1lcmdlLWJhc2VgIG9wdGlvbi4KKworLS1vY3RvcHVzOjoKKwlDb21wdXRlIHRoZSBiZXN0IGNvbW1vbiBhbmNlc3RvcnMgb2YgYWxsIHN1cHBsaWVkIGNvbW1pdHMsCisJaW4gcHJlcGFyYXRpb24gZm9yIGFuIG4td2F5IG1lcmdlLiAgVGhpcyBtaW1pY3MgdGhlIGJlaGF2aW9yCisJb2YgJ2dpdCBzaG93LWJyYW5jaCAtLW1lcmdlLWJhc2UnLgorCistLWluZGVwZW5kZW50OjoKKwlJbnN0ZWFkIG9mIHByaW50aW5nIG1lcmdlIGJhc2VzLCBwcmludCBhIG1pbmltYWwgc3Vic2V0IG9mCisJdGhlIHN1cHBsaWVkIGNvbW1pdHMgd2l0aCB0aGUgc2FtZSBhbmNlc3RvcnMuICBJbiBvdGhlciB3b3JkcywKKwlhbW9uZyB0aGUgY29tbWl0cyBnaXZlbiwgbGlzdCB0aG9zZSB3aGljaCBjYW5ub3QgYmUgcmVhY2hlZAorCWZyb20gYW55IG90aGVyLiAgVGhpcyBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mICdnaXQgc2hvdy1icmFuY2gKKwktLWluZGVwZW5kZW50Jy4KKworLS1pcy1hbmNlc3Rvcjo6CisJQ2hlY2sgaWYgdGhlIGZpcnN0IDxjb21taXQ+IGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBzZWNvbmQgPGNvbW1pdD4sCisJYW5kIGV4aXQgd2l0aCBzdGF0dXMgMCBpZiB0cnVlLCBvciB3aXRoIHN0YXR1cyAxIGlmIG5vdC4KKwlFcnJvcnMgYXJlIHNpZ25hbGVkIGJ5IGEgbm9uLXplcm8gc3RhdHVzIHRoYXQgaXMgbm90IDEuCisKKworT1BUSU9OUworLS0tLS0tLQorLWE6OgorLS1hbGw6OgorCU91dHB1dCBhbGwgbWVyZ2UgYmFzZXMgZm9yIHRoZSBjb21taXRzLCBpbnN0ZWFkIG9mIGp1c3Qgb25lLgorCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK0dpdmVuIHR3byBjb21taXRzICdBJyBhbmQgJ0InLCBgZ2l0IG1lcmdlLWJhc2UgQSBCYCB3aWxsIG91dHB1dCBhIGNvbW1pdAord2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gYm90aCAnQScgYW5kICdCJyB0aHJvdWdoIHRoZSBwYXJlbnQgcmVsYXRpb25zaGlwLgorCitGb3IgZXhhbXBsZSwgd2l0aCB0aGlzIHRvcG9sb2d5OgorCisJCSBvLS0tby0tLW8tLS1CCisJCS8KKwktLS1vLS0tMS0tLW8tLS1vLS0tby0tLUEKKwordGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAnQScgYW5kICdCJyBpcyAnMScuCisKK0dpdmVuIHRocmVlIGNvbW1pdHMgJ0EnLCAnQicgYW5kICdDJywgYGdpdCBtZXJnZS1iYXNlIEEgQiBDYCB3aWxsIGNvbXB1dGUgdGhlCittZXJnZSBiYXNlIGJldHdlZW4gJ0EnIGFuZCBhIGh5cG90aGV0aWNhbCBjb21taXQgJ00nLCB3aGljaCBpcyBhIG1lcmdlCitiZXR3ZWVuICdCJyBhbmQgJ0MnLiAgRm9yIGV4YW1wbGUsIHdpdGggdGhpcyB0b3BvbG9neToKKworCSAgICAgICBvLS0tby0tLW8tLS1vLS0tQworCSAgICAgIC8KKwkgICAgIC8gICBvLS0tby0tLW8tLS1CCisJICAgIC8gICAvCisJLS0tMi0tLTEtLS1vLS0tby0tLW8tLS1BCisKK3RoZSByZXN1bHQgb2YgYGdpdCBtZXJnZS1iYXNlIEEgQiBDYCBpcyAnMScuICBUaGlzIGlzIGJlY2F1c2UgdGhlCitlcXVpdmFsZW50IHRvcG9sb2d5IHdpdGggYSBtZXJnZSBjb21taXQgJ00nIGJldHdlZW4gJ0InIGFuZCAnQycgaXM6CisKKworCSAgICAgICBvLS0tby0tLW8tLS1vLS0tbworCSAgICAgIC8gICAgICAgICAgICAgICAgIFwKKwkgICAgIC8gICBvLS0tby0tLW8tLS1vLS0tTQorCSAgICAvICAgLworCS0tLTItLS0xLS0tby0tLW8tLS1vLS0tQQorCithbmQgdGhlIHJlc3VsdCBvZiBgZ2l0IG1lcmdlLWJhc2UgQSBNYCBpcyAnMScuICBDb21taXQgJzInIGlzIGFsc28gYQorY29tbW9uIGFuY2VzdG9yIGJldHdlZW4gJ0EnIGFuZCAnTScsIGJ1dCAnMScgaXMgYSBiZXR0ZXIgY29tbW9uIGFuY2VzdG9yLAorYmVjYXVzZSAnMicgaXMgYW4gYW5jZXN0b3Igb2YgJzEnLiAgSGVuY2UsICcyJyBpcyBub3QgYSBtZXJnZSBiYXNlLgorCitUaGUgcmVzdWx0IG9mIGBnaXQgbWVyZ2UtYmFzZSAtLW9jdG9wdXMgQSBCIENgIGlzICcyJywgYmVjYXVzZSAnMicgaXMKK3RoZSBiZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBhbGwgY29tbWl0cy4KKworV2hlbiB0aGUgaGlzdG9yeSBpbnZvbHZlcyBjcmlzcy1jcm9zcyBtZXJnZXMsIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lCisnYmVzdCcgY29tbW9uIGFuY2VzdG9yIGZvciB0d28gY29tbWl0cy4gIEZvciBleGFtcGxlLCB3aXRoIHRoaXMgdG9wb2xvZ3k6CisKKyAgICAgICAtLS0xLS0tby0tLUEKKwkgICBcIC8KKwkgICAgWAorCSAgIC8gXAorICAgICAgIC0tLTItLS1vLS0tby0tLUIKKworYm90aCAnMScgYW5kICcyJyBhcmUgbWVyZ2UtYmFzZXMgb2YgQSBhbmQgQi4gIE5laXRoZXIgb25lIGlzIGJldHRlciB0aGFuCit0aGUgb3RoZXIgKGJvdGggYXJlICdiZXN0JyBtZXJnZSBiYXNlcykuICBXaGVuIHRoZSBgLS1hbGxgIG9wdGlvbiBpcyBub3QgZ2l2ZW4sCitpdCBpcyB1bnNwZWNpZmllZCB3aGljaCBiZXN0IG9uZSBpcyBvdXRwdXQuCisKK0EgY29tbW9uIGlkaW9tIHRvIGNoZWNrICJmYXN0LWZvcndhcmQtbmVzcyIgYmV0d2VlbiB0d28gY29tbWl0cyBBCithbmQgQiBpcyAob3IgYXQgbGVhc3QgdXNlZCB0byBiZSkgdG8gY29tcHV0ZSB0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuCitBIGFuZCBCLCBhbmQgY2hlY2sgaWYgaXQgaXMgdGhlIHNhbWUgYXMgQSwgaW4gd2hpY2ggY2FzZSwgQSBpcyBhbgorYW5jZXN0b3Igb2YgQi4gIFlvdSB3aWxsIHNlZSB0aGlzIGlkaW9tIHVzZWQgb2Z0ZW4gaW4gb2xkZXIgc2NyaXB0cy4KKworCUE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEEpCisJaWYgdGVzdCAiJEEiID0gIiQoZ2l0IG1lcmdlLWJhc2UgQSBCKSIKKwl0aGVuCisJCS4uLiBBIGlzIGFuIGFuY2VzdG9yIG9mIEIgLi4uCisJZmkKKworSW4gbW9kZXJuIGdpdCwgeW91IGNhbiBzYXkgdGhpcyBpbiBhIG1vcmUgZGlyZWN0IHdheToKKworCWlmIGdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgQSBCCisJdGhlbgorCQkuLi4gQSBpcyBhbiBhbmNlc3RvciBvZiBCIC4uLgorCWZpCisKK2luc3RlYWQuCisKKworU2VlIGFsc28KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSwKK2xpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdLAorbGlua2dpdDpnaXQtbWVyZ2VbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1maWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZGIyYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1maWxlLnR4dApAQCAtMCwwICsxLDkxIEBACitnaXQtbWVyZ2UtZmlsZSgxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdlLWZpbGUgLSBSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZS1maWxlJyBbLUwgPGN1cnJlbnQtbmFtZT4gWy1MIDxiYXNlLW5hbWU+IFstTCA8b3RoZXItbmFtZT5dXV0KKwlbLS1vdXJzfC0tdGhlaXJzfC0tdW5pb25dIFstcHwtLXN0ZG91dF0gWy1xfC0tcXVpZXRdIFstLW1hcmtlci1zaXplPTxuPl0KKwk8Y3VycmVudC1maWxlPiA8YmFzZS1maWxlPiA8b3RoZXItZmlsZT4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKydnaXQgbWVyZ2UtZmlsZScgaW5jb3Jwb3JhdGVzIGFsbCBjaGFuZ2VzIHRoYXQgbGVhZCBmcm9tIHRoZSBgPGJhc2UtZmlsZT5gCit0byBgPG90aGVyLWZpbGU+YCBpbnRvIGA8Y3VycmVudC1maWxlPmAuIFRoZSByZXN1bHQgb3JkaW5hcmlseSBnb2VzIGludG8KK2A8Y3VycmVudC1maWxlPmAuICdnaXQgbWVyZ2UtZmlsZScgaXMgdXNlZnVsIGZvciBjb21iaW5pbmcgc2VwYXJhdGUgY2hhbmdlcwordG8gYW4gb3JpZ2luYWwuIFN1cHBvc2UgYDxiYXNlLWZpbGU+YCBpcyB0aGUgb3JpZ2luYWwsIGFuZCBib3RoCitgPGN1cnJlbnQtZmlsZT5gIGFuZCBgPG90aGVyLWZpbGU+YCBhcmUgbW9kaWZpY2F0aW9ucyBvZiBgPGJhc2UtZmlsZT5gLAordGhlbiAnZ2l0IG1lcmdlLWZpbGUnIGNvbWJpbmVzIGJvdGggY2hhbmdlcy4KKworQSBjb25mbGljdCBvY2N1cnMgaWYgYm90aCBgPGN1cnJlbnQtZmlsZT5gIGFuZCBgPG90aGVyLWZpbGU+YCBoYXZlIGNoYW5nZXMKK2luIGEgY29tbW9uIHNlZ21lbnQgb2YgbGluZXMuIElmIGEgY29uZmxpY3QgaXMgZm91bmQsICdnaXQgbWVyZ2UtZmlsZScKK25vcm1hbGx5IG91dHB1dHMgYSB3YXJuaW5nIGFuZCBicmFja2V0cyB0aGUgY29uZmxpY3Qgd2l0aCBsaW5lcyBjb250YWluaW5nCis8PDw8PDw8IGFuZCA+Pj4+Pj4+IG1hcmtlcnMuIEEgdHlwaWNhbCBjb25mbGljdCB3aWxsIGxvb2sgbGlrZSB0aGlzOgorCisJPDw8PDw8PCBBCisJbGluZXMgaW4gZmlsZSBBCisJPT09PT09PQorCWxpbmVzIGluIGZpbGUgQgorCT4+Pj4+Pj4gQgorCitJZiB0aGVyZSBhcmUgY29uZmxpY3RzLCB0aGUgdXNlciBzaG91bGQgZWRpdCB0aGUgcmVzdWx0IGFuZCBkZWxldGUgb25lIG9mCit0aGUgYWx0ZXJuYXRpdmVzLiAgV2hlbiBgLS1vdXJzYCwgYC0tdGhlaXJzYCwgb3IgYC0tdW5pb25gIG9wdGlvbiBpcyBpbiBlZmZlY3QsCitob3dldmVyLCB0aGVzZSBjb25mbGljdHMgYXJlIHJlc29sdmVkIGZhdm91cmluZyBsaW5lcyBmcm9tIGA8Y3VycmVudC1maWxlPmAsCitsaW5lcyBmcm9tIGA8b3RoZXItZmlsZT5gLCBvciBsaW5lcyBmcm9tIGJvdGggcmVzcGVjdGl2ZWx5LiAgVGhlIGxlbmd0aCBvZiB0aGUKK2NvbmZsaWN0IG1hcmtlcnMgY2FuIGJlIGdpdmVuIHdpdGggdGhlIGAtLW1hcmtlci1zaXplYCBvcHRpb24uCisKK1RoZSBleGl0IHZhbHVlIG9mIHRoaXMgcHJvZ3JhbSBpcyBuZWdhdGl2ZSBvbiBlcnJvciwgYW5kIHRoZSBudW1iZXIgb2YKK2NvbmZsaWN0cyBvdGhlcndpc2UuIElmIHRoZSBtZXJnZSB3YXMgY2xlYW4sIHRoZSBleGl0IHZhbHVlIGlzIDAuCisKKydnaXQgbWVyZ2UtZmlsZScgaXMgZGVzaWduZWQgdG8gYmUgYSBtaW5pbWFsIGNsb25lIG9mIFJDUyAnbWVyZ2UnOyB0aGF0IGlzLCBpdAoraW1wbGVtZW50cyBhbGwgb2YgUkNTICdtZXJnZScncyBmdW5jdGlvbmFsaXR5IHdoaWNoIGlzIG5lZWRlZCBieQorbGlua2dpdDpnaXRbMV0uCisKKworT1BUSU9OUworLS0tLS0tLQorCistTCA8bGFiZWw+OjoKKwlUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gdXAgdG8gdGhyZWUgdGltZXMsIGFuZAorCXNwZWNpZmllcyBsYWJlbHMgdG8gYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUKKwljb3JyZXNwb25kaW5nIGZpbGUgbmFtZXMgaW4gY29uZmxpY3QgcmVwb3J0cy4gVGhhdCBpcywKKwlgZ2l0IG1lcmdlLWZpbGUgLUwgeCAtTCB5IC1MIHogYSBiIGNgIGdlbmVyYXRlcyBvdXRwdXQgdGhhdAorCWxvb2tzIGxpa2UgaXQgY2FtZSBmcm9tIGZpbGVzIHgsIHkgYW5kIHogaW5zdGVhZCBvZgorCWZyb20gZmlsZXMgYSwgYiBhbmQgYy4KKworLXA6OgorCVNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZworCWA8Y3VycmVudC1maWxlPmAuCisKKy1xOjoKKwlRdWlldDsgZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzLgorCistLW91cnM6OgorLS10aGVpcnM6OgorLS11bmlvbjo6CisJSW5zdGVhZCBvZiBsZWF2aW5nIGNvbmZsaWN0cyBpbiB0aGUgZmlsZSwgcmVzb2x2ZSBjb25mbGljdHMKKwlmYXZvdXJpbmcgb3VyIChvciB0aGVpciBvciBib3RoKSBzaWRlIG9mIHRoZSBsaW5lcy4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworYGdpdCBtZXJnZS1maWxlIFJFQURNRS5teSBSRUFETUUgUkVBRE1FLnVwc3RyZWFtYDo6CisKKwljb21iaW5lcyB0aGUgY2hhbmdlcyBvZiBSRUFETUUubXkgYW5kIFJFQURNRS51cHN0cmVhbSBzaW5jZSBSRUFETUUsCisJdHJpZXMgdG8gbWVyZ2UgdGhlbSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgaW50byBSRUFETUUubXkuCisKK2BnaXQgbWVyZ2UtZmlsZSAtTCBhIC1MIGIgLUwgYyB0bXAvYTEyMyB0bXAvYjIzNCB0bXAvYzM0NWA6OgorCisJbWVyZ2VzIHRtcC9hMTIzIGFuZCB0bXAvYzM0NSB3aXRoIHRoZSBiYXNlIHRtcC9iMjM0LCBidXQgdXNlcyBsYWJlbHMKKwlgYWAgYW5kIGBjYCBpbnN0ZWFkIG9mIGB0bXAvYTEyM2AgYW5kIGB0bXAvYzM0NWAuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtaW5kZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZGYxYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1pbmRleC50eHQKQEAgLTAsMCArMSw3OSBAQAorZ2l0LW1lcmdlLWluZGV4KDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdlLWluZGV4IC0gUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZS1pbmRleCcgWy1vXSBbLXFdIDxtZXJnZS1wcm9ncmFtPiAoLWEgfCBbLS1dIDxmaWxlPiopCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBsb29rcyB1cCB0aGUgPGZpbGU+KHMpIGluIHRoZSBpbmRleCBhbmQsIGlmIHRoZXJlIGFyZSBhbnkgbWVyZ2UKK2VudHJpZXMsIHBhc3NlcyB0aGUgU0hBMSBoYXNoIGZvciB0aG9zZSBmaWxlcyBhcyBhcmd1bWVudHMgMSwgMiwgMyAoZW1wdHkKK2FyZ3VtZW50IGlmIG5vIGZpbGUpLCBhbmQgPGZpbGU+IGFzIGFyZ3VtZW50IDQuICBGaWxlIG1vZGVzIGZvciB0aGUgdGhyZWUKK2ZpbGVzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIDUsIDYgYW5kIDcuCisKK09QVElPTlMKKy0tLS0tLS0KK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworLWE6OgorCVJ1biBtZXJnZSBhZ2FpbnN0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXggdGhhdCBuZWVkIG1lcmdpbmcuCisKKy1vOjoKKwlJbnN0ZWFkIG9mIHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBmYWlsZWQgbWVyZ2UsIGRvIGFsbCBvZiB0aGVtCisJaW4gb25lIHNob3QgLSBjb250aW51ZSB3aXRoIG1lcmdpbmcgZXZlbiB3aGVuIHByZXZpb3VzIG1lcmdlcworCXJldHVybmVkIGVycm9ycywgYW5kIG9ubHkgcmV0dXJuIHRoZSBlcnJvciBjb2RlIGFmdGVyIGFsbCB0aGUKKwltZXJnZXMuCisKKy1xOjoKKwlEbyBub3QgY29tcGxhaW4gYWJvdXQgYSBmYWlsZWQgbWVyZ2UgcHJvZ3JhbSAoYSBtZXJnZSBwcm9ncmFtCisJZmFpbHVyZSB1c3VhbGx5IGluZGljYXRlcyBjb25mbGljdHMgZHVyaW5nIHRoZSBtZXJnZSkuIFRoaXMgaXMgZm9yCisJcG9yY2VsYWlucyB3aGljaCBtaWdodCB3YW50IHRvIGVtaXQgY3VzdG9tIG1lc3NhZ2VzLgorCitJZiAnZ2l0IG1lcmdlLWluZGV4JyBpcyBjYWxsZWQgd2l0aCBtdWx0aXBsZSA8ZmlsZT5zIChvciAtYSkgdGhlbiBpdAorcHJvY2Vzc2VzIHRoZW0gaW4gdHVybiBvbmx5IHN0b3BwaW5nIGlmIG1lcmdlIHJldHVybnMgYSBub24temVybyBleGl0Citjb2RlLgorCitUeXBpY2FsbHkgdGhpcyBpcyBydW4gd2l0aCBhIHNjcmlwdCBjYWxsaW5nIGdpdCdzIGltaXRhdGlvbiBvZgordGhlICdtZXJnZScgY29tbWFuZCBmcm9tIHRoZSBSQ1MgcGFja2FnZS4KKworQSBzYW1wbGUgc2NyaXB0IGNhbGxlZCAnZ2l0IG1lcmdlLW9uZS1maWxlJyBpcyBpbmNsdWRlZCBpbiB0aGUKK2Rpc3RyaWJ1dGlvbi4KKworQUxFUlQgQUxFUlQgQUxFUlQhIFRoZSBnaXQgIm1lcmdlIG9iamVjdCBvcmRlciIgaXMgZGlmZmVyZW50IGZyb20gdGhlCitSQ1MgJ21lcmdlJyBwcm9ncmFtIG1lcmdlIG9iamVjdCBvcmRlci4gSW4gdGhlIGFib3ZlIG9yZGVyaW5nLCB0aGUKK29yaWdpbmFsIGlzIGZpcnN0LiBCdXQgdGhlIGFyZ3VtZW50IG9yZGVyIHRvIHRoZSAzLXdheSBtZXJnZSBwcm9ncmFtCisnbWVyZ2UnIGlzIHRvIGhhdmUgdGhlIG9yaWdpbmFsIGluIHRoZSBtaWRkbGUuIERvbid0IGFzayBtZSB3aHkuCisKK0V4YW1wbGVzOgorCisgIHRvcnZhbGRzQHBwYzk3MDp+L21lcmdlLXRlc3Q+IGdpdCBtZXJnZS1pbmRleCBjYXQgTU0KKyAgVGhpcyBpcyBNTSBmcm9tIHRoZSBvcmlnaW5hbCB0cmVlLgkJCSMgb3JpZ2luYWwKKyAgVGhpcyBpcyBtb2RpZmllZCBNTSBpbiB0aGUgYnJhbmNoIEEuCQkJIyBtZXJnZTEKKyAgVGhpcyBpcyBtb2RpZmllZCBNTSBpbiB0aGUgYnJhbmNoIEIuCQkJIyBtZXJnZTIKKyAgVGhpcyBpcyBtb2RpZmllZCBNTSBpbiB0aGUgYnJhbmNoIEIuCQkJIyBjdXJyZW50IGNvbnRlbnRzCisKK29yCisKKyAgdG9ydmFsZHNAcHBjOTcwOn4vbWVyZ2UtdGVzdD4gZ2l0IG1lcmdlLWluZGV4IGNhdCBBQSBNTQorICBjYXQ6IDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICBUaGlzIGlzIGFkZGVkIEFBIGluIHRoZSBicmFuY2ggQS4KKyAgVGhpcyBpcyBhZGRlZCBBQSBpbiB0aGUgYnJhbmNoIEIuCisgIFRoaXMgaXMgYWRkZWQgQUEgaW4gdGhlIGJyYW5jaCBCLgorICBmYXRhbDogbWVyZ2UgcHJvZ3JhbSBmYWlsZWQKKword2hlcmUgdGhlIGxhdHRlciBleGFtcGxlIHNob3dzIGhvdyAnZ2l0IG1lcmdlLWluZGV4JyB3aWxsIHN0b3AgdHJ5aW5nIHRvCittZXJnZSBvbmNlIGFueXRoaW5nIGhhcyByZXR1cm5lZCBhbiBlcnJvciAoaS5lLiwgYGNhdGAgcmV0dXJuZWQgYW4gZXJyb3IKK2ZvciB0aGUgQUEgZmlsZSwgYmVjYXVzZSBpdCBkaWRuJ3QgZXhpc3QgaW4gdGhlIG9yaWdpbmFsLCBhbmQgdGh1cworJ2dpdCBtZXJnZS1pbmRleCcgZGlkbid0IGV2ZW4gdHJ5IHRvIG1lcmdlIHRoZSBNTSB0aGluZykuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTgwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1vbmUtZmlsZS50eHQKQEAgLTAsMCArMSwyMSBAQAorZ2l0LW1lcmdlLW9uZS1maWxlKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdlLW9uZS1maWxlIC0gVGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoIGdpdC1tZXJnZS1pbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZS1vbmUtZmlsZScKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGlzIHRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCAnZ2l0IG1lcmdlLWluZGV4JwordG8gcmVzb2x2ZSBhIG1lcmdlIGFmdGVyIHRoZSB0cml2aWFsIG1lcmdlIGRvbmUgd2l0aCAnZ2l0IHJlYWQtdHJlZSAtbScuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS10cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWY4NGI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtdHJlZS50eHQKQEAgLTAsMCArMSwyOSBAQAorZ2l0LW1lcmdlLXRyZWUoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1tZXJnZS10cmVlIC0gU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZS10cmVlJyA8YmFzZS10cmVlPiA8YnJhbmNoMT4gPGJyYW5jaDI+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgdGhyZWUgdHJlZWlzaCwgYW5kIG91dHB1dCB0cml2aWFsIG1lcmdlIHJlc3VsdHMgYW5kCitjb25mbGljdGluZyBzdGFnZXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFRoaXMgaXMgc2ltaWxhciB0bword2hhdCB0aHJlZS13YXkgJ2dpdCByZWFkLXRyZWUgLW0nIGRvZXMsIGJ1dCBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhlCityZXN1bHRzIGluIHRoZSBpbmRleCwgdGhlIGNvbW1hbmQgb3V0cHV0cyB0aGUgZW50cmllcyB0byB0aGUKK3N0YW5kYXJkIG91dHB1dC4KKworVGhpcyBpcyBtZWFudCB0byBiZSB1c2VkIGJ5IGhpZ2hlciBsZXZlbCBzY3JpcHRzIHRvIGNvbXB1dGUKK21lcmdlIHJlc3VsdHMgb3V0c2lkZSBvZiB0aGUgaW5kZXgsIGFuZCBzdHVmZiB0aGUgcmVzdWx0cyBiYWNrIGludG8gdGhlCitpbmRleC4gIEZvciB0aGlzIHJlYXNvbiwgdGhlIG91dHB1dCBmcm9tIHRoZSBjb21tYW5kIG9taXRzCitlbnRyaWVzIHRoYXQgbWF0Y2ggdGhlIDxicmFuY2gxPiB0cmVlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGY5MjI4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0CkBAIC0wLDAgKzEsMzIyIEBACitnaXQtbWVyZ2UoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWVyZ2UgLSBKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlcgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZScgWy1uXSBbLS1zdGF0XSBbLS1uby1jb21taXRdIFstLXNxdWFzaF0gWy0tW25vLV1lZGl0XQorCVstcyA8c3RyYXRlZ3k+XSBbLVggPHN0cmF0ZWd5LW9wdGlvbj5dCisJWy0tW25vLV1yZXJlcmUtYXV0b3VwZGF0ZV0gWy1tIDxtc2c+XSBbPGNvbW1pdD4uLi5dCisnZ2l0IG1lcmdlJyA8bXNnPiBIRUFEIDxjb21taXQ+Li4uCisnZ2l0IG1lcmdlJyAtLWFib3J0CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW5jb3Jwb3JhdGVzIGNoYW5nZXMgZnJvbSB0aGUgbmFtZWQgY29tbWl0cyAoc2luY2UgdGhlIHRpbWUgdGhlaXIKK2hpc3RvcmllcyBkaXZlcmdlZCBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCkgaW50byB0aGUgY3VycmVudAorYnJhbmNoLiAgVGhpcyBjb21tYW5kIGlzIHVzZWQgYnkgJ2dpdCBwdWxsJyB0byBpbmNvcnBvcmF0ZSBjaGFuZ2VzCitmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSBhbmQgY2FuIGJlIHVzZWQgYnkgaGFuZCB0byBtZXJnZSBjaGFuZ2VzCitmcm9tIG9uZSBicmFuY2ggaW50byBhbm90aGVyLgorCitBc3N1bWUgdGhlIGZvbGxvd2luZyBoaXN0b3J5IGV4aXN0cyBhbmQgdGhlIGN1cnJlbnQgYnJhbmNoIGlzCisiYG1hc3RlcmAiOgorCistLS0tLS0tLS0tLS0KKwkgIEEtLS1CLS0tQyB0b3BpYworCSAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGVuICJgZ2l0IG1lcmdlIHRvcGljYCIgd2lsbCByZXBsYXkgdGhlIGNoYW5nZXMgbWFkZSBvbiB0aGUKK2B0b3BpY2AgYnJhbmNoIHNpbmNlIGl0IGRpdmVyZ2VkIGZyb20gYG1hc3RlcmAgKGkuZS4sIGBFYCkgdW50aWwKK2l0cyBjdXJyZW50IGNvbW1pdCAoYENgKSBvbiB0b3Agb2YgYG1hc3RlcmAsIGFuZCByZWNvcmQgdGhlIHJlc3VsdAoraW4gYSBuZXcgY29tbWl0IGFsb25nIHdpdGggdGhlIG5hbWVzIG9mIHRoZSB0d28gcGFyZW50IGNvbW1pdHMgYW5kCithIGxvZyBtZXNzYWdlIGZyb20gdGhlIHVzZXIgZGVzY3JpYmluZyB0aGUgY2hhbmdlcy4KKworLS0tLS0tLS0tLS0tCisJICBBLS0tQi0tLUMgdG9waWMKKwkgLyAgICAgICAgIFwKKyAgICBELS0tRS0tLUYtLS1HLS0tSCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGUgc2Vjb25kIHN5bnRheCAoPG1zZz4gYEhFQURgIDxjb21taXQ+Li4uKSBpcyBzdXBwb3J0ZWQgZm9yCitoaXN0b3JpY2FsIHJlYXNvbnMuICBEbyBub3QgdXNlIGl0IGZyb20gdGhlIGNvbW1hbmQgbGluZSBvciBpbgorbmV3IHNjcmlwdHMuICBJdCBpcyB0aGUgc2FtZSBhcyBgZ2l0IG1lcmdlIC1tIDxtc2c+IDxjb21taXQ+Li4uYC4KKworVGhlIHRoaXJkIHN5bnRheCAoImBnaXQgbWVyZ2UgLS1hYm9ydGAiKSBjYW4gb25seSBiZSBydW4gYWZ0ZXIgdGhlCittZXJnZSBoYXMgcmVzdWx0ZWQgaW4gY29uZmxpY3RzLiAnZ2l0IG1lcmdlIC0tYWJvcnQnIHdpbGwgYWJvcnQgdGhlCittZXJnZSBwcm9jZXNzIGFuZCB0cnkgdG8gcmVjb25zdHJ1Y3QgdGhlIHByZS1tZXJnZSBzdGF0ZS4gSG93ZXZlciwKK2lmIHRoZXJlIHdlcmUgdW5jb21taXR0ZWQgY2hhbmdlcyB3aGVuIHRoZSBtZXJnZSBzdGFydGVkIChhbmQKK2VzcGVjaWFsbHkgaWYgdGhvc2UgY2hhbmdlcyB3ZXJlIGZ1cnRoZXIgbW9kaWZpZWQgYWZ0ZXIgdGhlIG1lcmdlCit3YXMgc3RhcnRlZCksICdnaXQgbWVyZ2UgLS1hYm9ydCcgd2lsbCBpbiBzb21lIGNhc2VzIGJlIHVuYWJsZSB0bworcmVjb25zdHJ1Y3QgdGhlIG9yaWdpbmFsIChwcmUtbWVyZ2UpIGNoYW5nZXMuIFRoZXJlZm9yZToKKworKldhcm5pbmcqOiBSdW5uaW5nICdnaXQgbWVyZ2UnIHdpdGggdW5jb21taXR0ZWQgY2hhbmdlcyBpcworZGlzY291cmFnZWQ6IHdoaWxlIHBvc3NpYmxlLCBpdCBsZWF2ZXMgeW91IGluIGEgc3RhdGUgdGhhdCBpcyBoYXJkIHRvCitiYWNrIG91dCBvZiBpbiB0aGUgY2FzZSBvZiBhIGNvbmZsaWN0LgorCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6Om1lcmdlLW9wdGlvbnMudHh0W10KKworLW0gPG1zZz46OgorCVNldCB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1lcmdlIGNvbW1pdCAoaW4KKwljYXNlIG9uZSBpcyBjcmVhdGVkKS4KKysKK0lmIGAtLWxvZ2AgaXMgc3BlY2lmaWVkLCBhIHNob3J0bG9nIG9mIHRoZSBjb21taXRzIGJlaW5nIG1lcmdlZAord2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCisrCitUaGUgJ2dpdCBmbXQtbWVyZ2UtbXNnJyBjb21tYW5kIGNhbiBiZQordXNlZCB0byBnaXZlIGEgZ29vZCBkZWZhdWx0IGZvciBhdXRvbWF0ZWQgJ2dpdCBtZXJnZScKK2ludm9jYXRpb25zLgorCistLXJlcmVyZS1hdXRvdXBkYXRlOjoKKy0tbm8tcmVyZXJlLWF1dG91cGRhdGU6OgorCUFsbG93IHRoZSByZXJlcmUgbWVjaGFuaXNtIHRvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUKKwlyZXN1bHQgb2YgYXV0by1jb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlLgorCistLWFib3J0OjoKKwlBYm9ydCB0aGUgY3VycmVudCBjb25mbGljdCByZXNvbHV0aW9uIHByb2Nlc3MsIGFuZAorCXRyeSB0byByZWNvbnN0cnVjdCB0aGUgcHJlLW1lcmdlIHN0YXRlLgorKworSWYgdGhlcmUgd2VyZSB1bmNvbW1pdHRlZCB3b3JrdHJlZSBjaGFuZ2VzIHByZXNlbnQgd2hlbiB0aGUgbWVyZ2UKK3N0YXJ0ZWQsICdnaXQgbWVyZ2UgLS1hYm9ydCcgd2lsbCBpbiBzb21lIGNhc2VzIGJlIHVuYWJsZSB0bworcmVjb25zdHJ1Y3QgdGhlc2UgY2hhbmdlcy4gSXQgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGFsd2F5cworY29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBiZWZvcmUgcnVubmluZyAnZ2l0IG1lcmdlJy4KKysKKydnaXQgbWVyZ2UgLS1hYm9ydCcgaXMgZXF1aXZhbGVudCB0byAnZ2l0IHJlc2V0IC0tbWVyZ2UnIHdoZW4KK2BNRVJHRV9IRUFEYCBpcyBwcmVzZW50LgorCis8Y29tbWl0Pi4uLjo6CisJQ29tbWl0cywgdXN1YWxseSBvdGhlciBicmFuY2ggaGVhZHMsIHRvIG1lcmdlIGludG8gb3VyIGJyYW5jaC4KKwlTcGVjaWZ5aW5nIG1vcmUgdGhhbiBvbmUgY29tbWl0IHdpbGwgY3JlYXRlIGEgbWVyZ2Ugd2l0aAorCW1vcmUgdGhhbiB0d28gcGFyZW50cyAoYWZmZWN0aW9uYXRlbHkgY2FsbGVkIGFuIE9jdG9wdXMgbWVyZ2UpLgorKworSWYgbm8gY29tbWl0IGlzIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYW5kIGlmIGBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbWAKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgc2V0LCBtZXJnZSB0aGUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzCit0aGF0IHRoZSBjdXJyZW50IGJyYW5jaCBpcyBjb25maWd1cmVkIHRvIHVzZSBhcyBpdHMgdXBzdHJlYW0uCitTZWUgYWxzbyB0aGUgY29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoaXMgbWFudWFsIHBhZ2UuCisKKworUFJFLU1FUkdFIENIRUNLUworLS0tLS0tLS0tLS0tLS0tLQorCitCZWZvcmUgYXBwbHlpbmcgb3V0c2lkZSBjaGFuZ2VzLCB5b3Ugc2hvdWxkIGdldCB5b3VyIG93biB3b3JrIGluCitnb29kIHNoYXBlIGFuZCBjb21taXR0ZWQgbG9jYWxseSwgc28gaXQgd2lsbCBub3QgYmUgY2xvYmJlcmVkIGlmCit0aGVyZSBhcmUgY29uZmxpY3RzLiAgU2VlIGFsc28gbGlua2dpdDpnaXQtc3Rhc2hbMV0uCisnZ2l0IHB1bGwnIGFuZCAnZ2l0IG1lcmdlJyB3aWxsIHN0b3Agd2l0aG91dCBkb2luZyBhbnl0aGluZyB3aGVuCitsb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzIG92ZXJsYXAgd2l0aCBmaWxlcyB0aGF0ICdnaXQgcHVsbCcvJ2dpdAorbWVyZ2UnIG1heSBuZWVkIHRvIHVwZGF0ZS4KKworVG8gYXZvaWQgcmVjb3JkaW5nIHVucmVsYXRlZCBjaGFuZ2VzIGluIHRoZSBtZXJnZSBjb21taXQsCisnZ2l0IHB1bGwnIGFuZCAnZ2l0IG1lcmdlJyB3aWxsIGFsc28gYWJvcnQgaWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzCityZWdpc3RlcmVkIGluIHRoZSBpbmRleCByZWxhdGl2ZSB0byB0aGUgYEhFQURgIGNvbW1pdC4gIChPbmUKK2V4Y2VwdGlvbiBpcyB3aGVuIHRoZSBjaGFuZ2VkIGluZGV4IGVudHJpZXMgYXJlIGluIHRoZSBzdGF0ZSB0aGF0Cit3b3VsZCByZXN1bHQgZnJvbSB0aGUgbWVyZ2UgYWxyZWFkeS4pCisKK0lmIGFsbCBuYW1lZCBjb21taXRzIGFyZSBhbHJlYWR5IGFuY2VzdG9ycyBvZiBgSEVBRGAsICdnaXQgbWVyZ2UnCit3aWxsIGV4aXQgZWFybHkgd2l0aCB0aGUgbWVzc2FnZSAiQWxyZWFkeSB1cC10by1kYXRlLiIKKworRkFTVC1GT1JXQVJEIE1FUkdFCistLS0tLS0tLS0tLS0tLS0tLS0KKworT2Z0ZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIG5hbWVkIGNvbW1pdC4KK1RoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGNhc2UgZXNwZWNpYWxseSB3aGVuIGludm9rZWQgZnJvbSAnZ2l0CitwdWxsJzogeW91IGFyZSB0cmFja2luZyBhbiB1cHN0cmVhbSByZXBvc2l0b3J5LCB5b3UgaGF2ZSBjb21taXR0ZWQKK25vIGxvY2FsIGNoYW5nZXMsIGFuZCBub3cgeW91IHdhbnQgdG8gdXBkYXRlIHRvIGEgbmV3ZXIgdXBzdHJlYW0KK3JldmlzaW9uLiAgSW4gdGhpcyBjYXNlLCBhIG5ldyBjb21taXQgaXMgbm90IG5lZWRlZCB0byBzdG9yZSB0aGUKK2NvbWJpbmVkIGhpc3Rvcnk7IGluc3RlYWQsIHRoZSBgSEVBRGAgKGFsb25nIHdpdGggdGhlIGluZGV4KSBpcwordXBkYXRlZCB0byBwb2ludCBhdCB0aGUgbmFtZWQgY29tbWl0LCB3aXRob3V0IGNyZWF0aW5nIGFuIGV4dHJhCittZXJnZSBjb21taXQuCisKK1RoaXMgYmVoYXZpb3IgY2FuIGJlIHN1cHByZXNzZWQgd2l0aCB0aGUgYC0tbm8tZmZgIG9wdGlvbi4KKworVFJVRSBNRVJHRQorLS0tLS0tLS0tLQorCitFeGNlcHQgaW4gYSBmYXN0LWZvcndhcmQgbWVyZ2UgKHNlZSBhYm92ZSksIHRoZSBicmFuY2hlcyB0byBiZQorbWVyZ2VkIG11c3QgYmUgdGllZCB0b2dldGhlciBieSBhIG1lcmdlIGNvbW1pdCB0aGF0IGhhcyBib3RoIG9mIHRoZW0KK2FzIGl0cyBwYXJlbnRzLgorCitBIG1lcmdlZCB2ZXJzaW9uIHJlY29uY2lsaW5nIHRoZSBjaGFuZ2VzIGZyb20gYWxsIGJyYW5jaGVzIHRvIGJlCittZXJnZWQgaXMgY29tbWl0dGVkLCBhbmQgeW91ciBgSEVBRGAsIGluZGV4LCBhbmQgd29ya2luZyB0cmVlIGFyZQordXBkYXRlZCB0byBpdC4gIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgd29ya2luZwordHJlZSBhcyBsb25nIGFzIHRoZXkgZG8gbm90IG92ZXJsYXA7IHRoZSB1cGRhdGUgd2lsbCBwcmVzZXJ2ZSB0aGVtLgorCitXaGVuIGl0IGlzIG5vdCBvYnZpb3VzIGhvdyB0byByZWNvbmNpbGUgdGhlIGNoYW5nZXMsIHRoZSBmb2xsb3dpbmcKK2hhcHBlbnM6CisKKzEuIFRoZSBgSEVBRGAgcG9pbnRlciBzdGF5cyB0aGUgc2FtZS4KKzIuIFRoZSBgTUVSR0VfSEVBRGAgcmVmIGlzIHNldCB0byBwb2ludCB0byB0aGUgb3RoZXIgYnJhbmNoIGhlYWQuCiszLiBQYXRocyB0aGF0IG1lcmdlZCBjbGVhbmx5IGFyZSB1cGRhdGVkIGJvdGggaW4gdGhlIGluZGV4IGZpbGUgYW5kCisgICBpbiB5b3VyIHdvcmtpbmcgdHJlZS4KKzQuIEZvciBjb25mbGljdGluZyBwYXRocywgdGhlIGluZGV4IGZpbGUgcmVjb3JkcyB1cCB0byB0aHJlZQorICAgdmVyc2lvbnM6IHN0YWdlIDEgc3RvcmVzIHRoZSB2ZXJzaW9uIGZyb20gdGhlIGNvbW1vbiBhbmNlc3RvciwKKyAgIHN0YWdlIDIgZnJvbSBgSEVBRGAsIGFuZCBzdGFnZSAzIGZyb20gYE1FUkdFX0hFQURgICh5b3UKKyAgIGNhbiBpbnNwZWN0IHRoZSBzdGFnZXMgd2l0aCBgZ2l0IGxzLWZpbGVzIC11YCkuICBUaGUgd29ya2luZworICAgdHJlZSBmaWxlcyBjb250YWluIHRoZSByZXN1bHQgb2YgdGhlICJtZXJnZSIgcHJvZ3JhbTsgaS5lLiAzLXdheQorICAgbWVyZ2UgcmVzdWx0cyB3aXRoIGZhbWlsaWFyIGNvbmZsaWN0IG1hcmtlcnMgYDw8PGAgYD09PWAgYD4+PmAuCis1LiBObyBvdGhlciBjaGFuZ2VzIGFyZSBtYWRlLiAgSW4gcGFydGljdWxhciwgdGhlIGxvY2FsCisgICBtb2RpZmljYXRpb25zIHlvdSBoYWQgYmVmb3JlIHlvdSBzdGFydGVkIG1lcmdlIHdpbGwgc3RheSB0aGUKKyAgIHNhbWUgYW5kIHRoZSBpbmRleCBlbnRyaWVzIGZvciB0aGVtIHN0YXkgYXMgdGhleSB3ZXJlLAorICAgaS5lLiBtYXRjaGluZyBgSEVBRGAuCisKK0lmIHlvdSB0cmllZCBhIG1lcmdlIHdoaWNoIHJlc3VsdGVkIGluIGNvbXBsZXggY29uZmxpY3RzIGFuZAord2FudCB0byBzdGFydCBvdmVyLCB5b3UgY2FuIHJlY292ZXIgd2l0aCBgZ2l0IG1lcmdlIC0tYWJvcnRgLgorCitIT1cgQ09ORkxJQ1RTIEFSRSBQUkVTRU5URUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEdXJpbmcgYSBtZXJnZSwgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyBhcmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSByZXN1bHQKK29mIHRoZSBtZXJnZS4gIEFtb25nIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGNvbW1vbiBhbmNlc3RvcidzIHZlcnNpb24sCitub24tb3ZlcmxhcHBpbmcgb25lcyAodGhhdCBpcywgeW91IGNoYW5nZWQgYW4gYXJlYSBvZiB0aGUgZmlsZSB3aGlsZSB0aGUKK290aGVyIHNpZGUgbGVmdCB0aGF0IGFyZWEgaW50YWN0LCBvciB2aWNlIHZlcnNhKSBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZQorZmluYWwgcmVzdWx0IHZlcmJhdGltLiAgV2hlbiBib3RoIHNpZGVzIG1hZGUgY2hhbmdlcyB0byB0aGUgc2FtZSBhcmVhLAoraG93ZXZlciwgZ2l0IGNhbm5vdCByYW5kb21seSBwaWNrIG9uZSBzaWRlIG92ZXIgdGhlIG90aGVyLCBhbmQgYXNrcyB5b3UgdG8KK3Jlc29sdmUgaXQgYnkgbGVhdmluZyB3aGF0IGJvdGggc2lkZXMgZGlkIHRvIHRoYXQgYXJlYS4KKworQnkgZGVmYXVsdCwgZ2l0IHVzZXMgdGhlIHNhbWUgc3R5bGUgYXMgdGhlIG9uZSB1c2VkIGJ5IHRoZSAibWVyZ2UiIHByb2dyYW0KK2Zyb20gdGhlIFJDUyBzdWl0ZSB0byBwcmVzZW50IHN1Y2ggYSBjb25mbGljdGVkIGh1bmssIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCitIZXJlIGFyZSBsaW5lcyB0aGF0IGFyZSBlaXRoZXIgdW5jaGFuZ2VkIGZyb20gdGhlIGNvbW1vbgorYW5jZXN0b3IsIG9yIGNsZWFubHkgcmVzb2x2ZWQgYmVjYXVzZSBvbmx5IG9uZSBzaWRlIGNoYW5nZWQuCis8PDw8PDw8IHlvdXJzOnNhbXBsZS50eHQKK0NvbmZsaWN0IHJlc29sdXRpb24gaXMgaGFyZDsKK2xldCdzIGdvIHNob3BwaW5nLgorPT09PT09PQorR2l0IG1ha2VzIGNvbmZsaWN0IHJlc29sdXRpb24gZWFzeS4KKz4+Pj4+Pj4gdGhlaXJzOnNhbXBsZS50eHQKK0FuZCBoZXJlIGlzIGFub3RoZXIgbGluZSB0aGF0IGlzIGNsZWFubHkgcmVzb2x2ZWQgb3IgdW5tb2RpZmllZC4KKy0tLS0tLS0tLS0tLQorCitUaGUgYXJlYSB3aGVyZSBhIHBhaXIgb2YgY29uZmxpY3RpbmcgY2hhbmdlcyBoYXBwZW5lZCBpcyBtYXJrZWQgd2l0aCBtYXJrZXJzCitgPDw8PDw8PGAsIGA9PT09PT09YCwgYW5kIGA+Pj4+Pj4+YC4gIFRoZSBwYXJ0IGJlZm9yZSB0aGUgYD09PT09PT1gCitpcyB0eXBpY2FsbHkgeW91ciBzaWRlLCBhbmQgdGhlIHBhcnQgYWZ0ZXJ3YXJkcyBpcyB0eXBpY2FsbHkgdGhlaXIgc2lkZS4KKworVGhlIGRlZmF1bHQgZm9ybWF0IGRvZXMgbm90IHNob3cgd2hhdCB0aGUgb3JpZ2luYWwgc2FpZCBpbiB0aGUgY29uZmxpY3RpbmcKK2FyZWEuICBZb3UgY2Fubm90IHRlbGwgaG93IG1hbnkgbGluZXMgYXJlIGRlbGV0ZWQgYW5kIHJlcGxhY2VkIHdpdGgKK0JhcmJpZSdzIHJlbWFyayBvbiB5b3VyIHNpZGUuICBUaGUgb25seSB0aGluZyB5b3UgY2FuIHRlbGwgaXMgdGhhdCB5b3VyCitzaWRlIHdhbnRzIHRvIHNheSBpdCBpcyBoYXJkIGFuZCB5b3UnZCBwcmVmZXIgdG8gZ28gc2hvcHBpbmcsIHdoaWxlIHRoZQorb3RoZXIgc2lkZSB3YW50cyB0byBjbGFpbSBpdCBpcyBlYXN5LgorCitBbiBhbHRlcm5hdGl2ZSBzdHlsZSBjYW4gYmUgdXNlZCBieSBzZXR0aW5nIHRoZSAibWVyZ2UuY29uZmxpY3RzdHlsZSIKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gImRpZmYzIi4gIEluICJkaWZmMyIgc3R5bGUsIHRoZSBhYm92ZSBjb25mbGljdAorbWF5IGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KK0hlcmUgYXJlIGxpbmVzIHRoYXQgYXJlIGVpdGhlciB1bmNoYW5nZWQgZnJvbSB0aGUgY29tbW9uCithbmNlc3Rvciwgb3IgY2xlYW5seSByZXNvbHZlZCBiZWNhdXNlIG9ubHkgb25lIHNpZGUgY2hhbmdlZC4KKzw8PDw8PDwgeW91cnM6c2FtcGxlLnR4dAorQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyBoYXJkOworbGV0J3MgZ28gc2hvcHBpbmcuCit8fHx8fHx8CitDb25mbGljdCByZXNvbHV0aW9uIGlzIGhhcmQuCis9PT09PT09CitHaXQgbWFrZXMgY29uZmxpY3QgcmVzb2x1dGlvbiBlYXN5LgorPj4+Pj4+PiB0aGVpcnM6c2FtcGxlLnR4dAorQW5kIGhlcmUgaXMgYW5vdGhlciBsaW5lIHRoYXQgaXMgY2xlYW5seSByZXNvbHZlZCBvciB1bm1vZGlmaWVkLgorLS0tLS0tLS0tLS0tCisKK0luIGFkZGl0aW9uIHRvIHRoZSBgPDw8PDw8PGAsIGA9PT09PT09YCwgYW5kIGA+Pj4+Pj4+YCBtYXJrZXJzLCBpdCB1c2VzCithbm90aGVyIGB8fHx8fHx8YCBtYXJrZXIgdGhhdCBpcyBmb2xsb3dlZCBieSB0aGUgb3JpZ2luYWwgdGV4dC4gIFlvdSBjYW4KK3RlbGwgdGhhdCB0aGUgb3JpZ2luYWwganVzdCBzdGF0ZWQgYSBmYWN0LCBhbmQgeW91ciBzaWRlIHNpbXBseSBnYXZlIGluIHRvCit0aGF0IHN0YXRlbWVudCBhbmQgZ2F2ZSB1cCwgd2hpbGUgdGhlIG90aGVyIHNpZGUgdHJpZWQgdG8gaGF2ZSBhIG1vcmUKK3Bvc2l0aXZlIGF0dGl0dWRlLiAgWW91IGNhbiBzb21ldGltZXMgY29tZSB1cCB3aXRoIGEgYmV0dGVyIHJlc29sdXRpb24gYnkKK3ZpZXdpbmcgdGhlIG9yaWdpbmFsLgorCisKK0hPVyBUTyBSRVNPTFZFIENPTkZMSUNUUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIHNlZWluZyBhIGNvbmZsaWN0LCB5b3UgY2FuIGRvIHR3byB0aGluZ3M6CisKKyAqIERlY2lkZSBub3QgdG8gbWVyZ2UuICBUaGUgb25seSBjbGVhbi11cHMgeW91IG5lZWQgYXJlIHRvIHJlc2V0CisgICB0aGUgaW5kZXggZmlsZSB0byB0aGUgYEhFQURgIGNvbW1pdCB0byByZXZlcnNlIDIuIGFuZCB0byBjbGVhbgorICAgdXAgd29ya2luZyB0cmVlIGNoYW5nZXMgbWFkZSBieSAyLiBhbmQgMy47IGBnaXQgbWVyZ2UgLS1hYm9ydGAKKyAgIGNhbiBiZSB1c2VkIGZvciB0aGlzLgorCisgKiBSZXNvbHZlIHRoZSBjb25mbGljdHMuICBHaXQgd2lsbCBtYXJrIHRoZSBjb25mbGljdHMgaW4KKyAgIHRoZSB3b3JraW5nIHRyZWUuICBFZGl0IHRoZSBmaWxlcyBpbnRvIHNoYXBlIGFuZAorICAgJ2dpdCBhZGQnIHRoZW0gdG8gdGhlIGluZGV4LiAgVXNlICdnaXQgY29tbWl0JyB0byBzZWFsIHRoZSBkZWFsLgorCitZb3UgY2FuIHdvcmsgdGhyb3VnaCB0aGUgY29uZmxpY3Qgd2l0aCBhIG51bWJlciBvZiB0b29sczoKKworICogVXNlIGEgbWVyZ2V0b29sLiAgYGdpdCBtZXJnZXRvb2xgIHRvIGxhdW5jaCBhIGdyYXBoaWNhbAorICAgbWVyZ2V0b29sIHdoaWNoIHdpbGwgd29yayB5b3UgdGhyb3VnaCB0aGUgbWVyZ2UuCisKKyAqIExvb2sgYXQgdGhlIGRpZmZzLiAgYGdpdCBkaWZmYCB3aWxsIHNob3cgYSB0aHJlZS13YXkgZGlmZiwKKyAgIGhpZ2hsaWdodGluZyBjaGFuZ2VzIGZyb20gYm90aCB0aGUgYEhFQURgIGFuZCBgTUVSR0VfSEVBRGAKKyAgIHZlcnNpb25zLgorCisgKiBMb29rIGF0IHRoZSBkaWZmcyBmcm9tIGVhY2ggYnJhbmNoLiBgZ2l0IGxvZyAtLW1lcmdlIC1wIDxwYXRoPmAKKyAgIHdpbGwgc2hvdyBkaWZmcyBmaXJzdCBmb3IgdGhlIGBIRUFEYCB2ZXJzaW9uIGFuZCB0aGVuIHRoZQorICAgYE1FUkdFX0hFQURgIHZlcnNpb24uCisKKyAqIExvb2sgYXQgdGhlIG9yaWdpbmFscy4gIGBnaXQgc2hvdyA6MTpmaWxlbmFtZWAgc2hvd3MgdGhlCisgICBjb21tb24gYW5jZXN0b3IsIGBnaXQgc2hvdyA6MjpmaWxlbmFtZWAgc2hvd3MgdGhlIGBIRUFEYAorICAgdmVyc2lvbiwgYW5kIGBnaXQgc2hvdyA6MzpmaWxlbmFtZWAgc2hvd3MgdGhlIGBNRVJHRV9IRUFEYAorICAgdmVyc2lvbi4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2hlcyBgZml4ZXNgIGFuZCBgZW5oYW5jZW1lbnRzYCBvbiB0b3Agb2YKKyAgdGhlIGN1cnJlbnQgYnJhbmNoLCBtYWtpbmcgYW4gb2N0b3B1cyBtZXJnZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgZml4ZXMgZW5oYW5jZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2ggYG9ic29sZXRlYCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgdXNpbmcgYG91cnNgCisgIG1lcmdlIHN0cmF0ZWd5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtcyBvdXJzIG9ic29sZXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2ggYG1haW50YCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgYnV0IGRvIG5vdCBtYWtlCisgIGEgbmV3IGNvbW1pdCBhdXRvbWF0aWNhbGx5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBtYWludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGNhbiBiZSB1c2VkIHdoZW4geW91IHdhbnQgdG8gaW5jbHVkZSBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlCittZXJnZSwgb3Igd2FudCB0byB3cml0ZSB5b3VyIG93biBtZXJnZSBjb21taXQgbWVzc2FnZS4KKysKK1lvdSBzaG91bGQgcmVmcmFpbiBmcm9tIGFidXNpbmcgdGhpcyBvcHRpb24gdG8gc25lYWsgc3Vic3RhbnRpYWwKK2NoYW5nZXMgaW50byBhIG1lcmdlIGNvbW1pdC4gIFNtYWxsIGZpeHVwcyBsaWtlIGJ1bXBpbmcKK3JlbGVhc2UvdmVyc2lvbiBuYW1lIHdvdWxkIGJlIGFjY2VwdGFibGUuCisKKworaW5jbHVkZTo6bWVyZ2Utc3RyYXRlZ2llcy50eHRbXQorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitpbmNsdWRlOjptZXJnZS1jb25maWcudHh0W10KKworYnJhbmNoLjxuYW1lPi5tZXJnZW9wdGlvbnM6OgorCVNldHMgZGVmYXVsdCBvcHRpb25zIGZvciBtZXJnaW5nIGludG8gYnJhbmNoIDxuYW1lPi4gVGhlIHN5bnRheCBhbmQKKwlzdXBwb3J0ZWQgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhvc2Ugb2YgJ2dpdCBtZXJnZScsIGJ1dCBvcHRpb24KKwl2YWx1ZXMgY29udGFpbmluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZtdC1tZXJnZS1tc2dbMV0sIGxpbmtnaXQ6Z2l0LXB1bGxbMV0sCitsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0sCitsaW5rZ2l0OmdpdC1yZXNldFsxXSwKK2xpbmtnaXQ6Z2l0LWRpZmZbMV0sIGxpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdLAorbGlua2dpdDpnaXQtYWRkWzFdLCBsaW5rZ2l0OmdpdC1ybVsxXSwKK2xpbmtnaXQ6Z2l0LW1lcmdldG9vbFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC0tbGliLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC0tbGliLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOThhNDFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLS1saWIudHh0CkBAIC0wLDAgKzEsNDcgQEAKK2dpdC1tZXJnZXRvb2x7bGl0ZGR9bGliKDEpCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWVyZ2V0b29sLS1saWIgLSBDb21tb24gZ2l0IG1lcmdlIHRvb2wgc2hlbGwgc2NyaXB0bGV0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydUT09MX01PREU9KGRpZmZ8bWVyZ2UpIC4gIiQoZ2l0IC0tZXhlYy1wYXRoKS9naXQtbWVyZ2V0b29se2xpdGRkfWxpYiInCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIG5vdCBhIGNvbW1hbmQgdGhlIGVuZCB1c2VyIHdvdWxkIHdhbnQgdG8gcnVuLiAgRXZlci4KK1RoaXMgZG9jdW1lbnRhdGlvbiBpcyBtZWFudCBmb3IgcGVvcGxlIHdobyBhcmUgc3R1ZHlpbmcgdGhlCitQb3JjZWxhaW4taXNoIHNjcmlwdHMgYW5kL29yIGFyZSB3cml0aW5nIG5ldyBvbmVzLgorCitUaGUgJ2dpdC1tZXJnZXRvb2x7bGl0ZGR9bGliJyBzY3JpcHRsZXQgaXMgZGVzaWduZWQgdG8gYmUgc291cmNlZCAodXNpbmcKK2AuYCkgYnkgb3RoZXIgc2hlbGwgc2NyaXB0cyB0byBzZXQgdXAgZnVuY3Rpb25zIGZvciB3b3JraW5nCit3aXRoIGdpdCBtZXJnZSB0b29scy4KKworQmVmb3JlIHNvdXJjaW5nICdnaXQtbWVyZ2V0b29se2xpdGRkfWxpYicsIHlvdXIgc2NyaXB0IG11c3Qgc2V0IGBUT09MX01PREVgCit0byBkZWZpbmUgdGhlIG9wZXJhdGlvbiBtb2RlIGZvciB0aGUgZnVuY3Rpb25zIGxpc3RlZCBiZWxvdy4KKydkaWZmJyBhbmQgJ21lcmdlJyBhcmUgdmFsaWQgdmFsdWVzLgorCitGVU5DVElPTlMKKy0tLS0tLS0tLQorZ2V0X21lcmdlX3Rvb2w6OgorCXJldHVybnMgYSBtZXJnZSB0b29sLgorCitnZXRfbWVyZ2VfdG9vbF9jbWQ6OgorCXJldHVybnMgdGhlIGN1c3RvbSBjb21tYW5kIGZvciBhIG1lcmdlIHRvb2wuCisKK2dldF9tZXJnZV90b29sX3BhdGg6OgorCXJldHVybnMgdGhlIGN1c3RvbSBwYXRoIGZvciBhIG1lcmdlIHRvb2wuCisKK3J1bl9tZXJnZV90b29sOjoKKwlsYXVuY2hlcyBhIG1lcmdlIHRvb2wgZ2l2ZW4gdGhlIHRvb2wgbmFtZSBhbmQgYSB0cnVlL2ZhbHNlCisJZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIGEgbWVyZ2UgYmFzZSBpcyBwcmVzZW50LgorCSckTUVSR0VEJywgJyRMT0NBTCcsICckUkVNT1RFJywgYW5kICckQkFTRScgbXVzdCBiZSBkZWZpbmVkCisJZm9yIHVzZSBieSB0aGUgbWVyZ2UgdG9vbC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjU2M2M1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dApAQCAtMCwwICsxLDkyIEBACitnaXQtbWVyZ2V0b29sKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1tZXJnZXRvb2wgLSBSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWVyZ2V0b29sJyBbLS10b29sPTx0b29sPl0gWy15fC0tbm8tcHJvbXB0fC0tcHJvbXB0XSBbPGZpbGU+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVXNlIGBnaXQgbWVyZ2V0b29sYCB0byBydW4gb25lIG9mIHNldmVyYWwgbWVyZ2UgdXRpbGl0aWVzIHRvIHJlc29sdmUKK21lcmdlIGNvbmZsaWN0cy4gIEl0IGlzIHR5cGljYWxseSBydW4gYWZ0ZXIgJ2dpdCBtZXJnZScuCisKK0lmIG9uZSBvciBtb3JlIDxmaWxlPiBwYXJhbWV0ZXJzIGFyZSBnaXZlbiwgdGhlIG1lcmdlIHRvb2wgcHJvZ3JhbSB3aWxsCitiZSBydW4gdG8gcmVzb2x2ZSBkaWZmZXJlbmNlcyBvbiBlYWNoIGZpbGUgKHNraXBwaW5nIHRob3NlIHdpdGhvdXQKK2NvbmZsaWN0cykuICBTcGVjaWZ5aW5nIGEgZGlyZWN0b3J5IHdpbGwgaW5jbHVkZSBhbGwgdW5yZXNvbHZlZCBmaWxlcyBpbgordGhhdCBwYXRoLiAgSWYgbm8gPGZpbGU+IG5hbWVzIGFyZSBzcGVjaWZpZWQsICdnaXQgbWVyZ2V0b29sJyB3aWxsIHJ1bgordGhlIG1lcmdlIHRvb2wgcHJvZ3JhbSBvbiBldmVyeSBmaWxlIHdpdGggbWVyZ2UgY29uZmxpY3RzLgorCitPUFRJT05TCistLS0tLS0tCistdCA8dG9vbD46OgorLS10b29sPTx0b29sPjo6CisJVXNlIHRoZSBtZXJnZSByZXNvbHV0aW9uIHByb2dyYW0gc3BlY2lmaWVkIGJ5IDx0b29sPi4KKwlWYWxpZCB2YWx1ZXMgaW5jbHVkZSBlbWVyZ2UsIGd2aW1kaWZmLCBrZGlmZjMsCisJbWVsZCwgdmltZGlmZiwgYW5kIHRvcnRvaXNlbWVyZ2UuIFJ1biBgZ2l0IG1lcmdldG9vbCAtLXRvb2wtaGVscGAKKwlmb3IgdGhlIGxpc3Qgb2YgdmFsaWQgPHRvb2w+IHNldHRpbmdzLgorKworSWYgYSBtZXJnZSByZXNvbHV0aW9uIHByb2dyYW0gaXMgbm90IHNwZWNpZmllZCwgJ2dpdCBtZXJnZXRvb2wnCit3aWxsIHVzZSB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgbWVyZ2UudG9vbGAuICBJZiB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYG1lcmdlLnRvb2xgIGlzIG5vdCBzZXQsICdnaXQgbWVyZ2V0b29sJword2lsbCBwaWNrIGEgc3VpdGFibGUgZGVmYXVsdC4KKysKK1lvdSBjYW4gZXhwbGljaXRseSBwcm92aWRlIGEgZnVsbCBwYXRoIHRvIHRoZSB0b29sIGJ5IHNldHRpbmcgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBtZXJnZXRvb2wuPHRvb2w+LnBhdGhgLiBGb3IgZXhhbXBsZSwgeW91CitjYW4gY29uZmlndXJlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGtkaWZmMyBieSBzZXR0aW5nCitgbWVyZ2V0b29sLmtkaWZmMy5wYXRoYC4gT3RoZXJ3aXNlLCAnZ2l0IG1lcmdldG9vbCcgYXNzdW1lcyB0aGUKK3Rvb2wgaXMgYXZhaWxhYmxlIGluIFBBVEguCisrCitJbnN0ZWFkIG9mIHJ1bm5pbmcgb25lIG9mIHRoZSBrbm93biBtZXJnZSB0b29sIHByb2dyYW1zLAorJ2dpdCBtZXJnZXRvb2wnIGNhbiBiZSBjdXN0b21pemVkIHRvIHJ1biBhbiBhbHRlcm5hdGl2ZSBwcm9ncmFtCitieSBzcGVjaWZ5aW5nIHRoZSBjb21tYW5kIGxpbmUgdG8gaW52b2tlIGluIGEgY29uZmlndXJhdGlvbgordmFyaWFibGUgYG1lcmdldG9vbC48dG9vbD4uY21kYC4KKysKK1doZW4gJ2dpdCBtZXJnZXRvb2wnIGlzIGludm9rZWQgd2l0aCB0aGlzIHRvb2wgKGVpdGhlciB0aHJvdWdoIHRoZQorYC10YCBvciBgLS10b29sYCBvcHRpb24gb3IgdGhlIGBtZXJnZS50b29sYCBjb25maWd1cmF0aW9uCit2YXJpYWJsZSkgdGhlIGNvbmZpZ3VyZWQgY29tbWFuZCBsaW5lIHdpbGwgYmUgaW52b2tlZCB3aXRoIGAkQkFTRWAKK3NldCB0byB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbW1vbiBiYXNlIGZvcgordGhlIG1lcmdlLCBpZiBhdmFpbGFibGU7IGAkTE9DQUxgIHNldCB0byB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeQorZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBvbiB0aGUgY3VycmVudCBicmFuY2g7CitgJFJFTU9URWAgc2V0IHRvIHRoZSBuYW1lIG9mIGEgdGVtcG9yYXJ5IGZpbGUgY29udGFpbmluZyB0aGUKK2NvbnRlbnRzIG9mIHRoZSBmaWxlIHRvIGJlIG1lcmdlZCwgYW5kIGAkTUVSR0VEYCBzZXQgdG8gdGhlIG5hbWUKK29mIHRoZSBmaWxlIHRvIHdoaWNoIHRoZSBtZXJnZSB0b29sIHNob3VsZCB3cml0ZSB0aGUgcmVzdWx0IG9mIHRoZQorbWVyZ2UgcmVzb2x1dGlvbi4KKysKK0lmIHRoZSBjdXN0b20gbWVyZ2UgdG9vbCBjb3JyZWN0bHkgaW5kaWNhdGVzIHRoZSBzdWNjZXNzIG9mIGEKK21lcmdlIHJlc29sdXRpb24gd2l0aCBpdHMgZXhpdCBjb2RlLCB0aGVuIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSBgbWVyZ2V0b29sLjx0b29sPi50cnVzdEV4aXRDb2RlYCBjYW4gYmUgc2V0IHRvIGB0cnVlYC4KK090aGVyd2lzZSwgJ2dpdCBtZXJnZXRvb2wnIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIGluZGljYXRlIHRoZQorc3VjY2VzcyBvZiB0aGUgcmVzb2x1dGlvbiBhZnRlciB0aGUgY3VzdG9tIHRvb2wgaGFzIGV4aXRlZC4KKworLS10b29sLWhlbHA6OgorCVByaW50IGEgbGlzdCBvZiBtZXJnZSB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAuCisKKy15OjoKKy0tbm8tcHJvbXB0OjoKKwlEb24ndCBwcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgbWVyZ2UgcmVzb2x1dGlvbgorCXByb2dyYW0uCisKKy0tcHJvbXB0OjoKKwlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyOyB0aGUgb3B0aW9uIGlzIHByb3ZpZGVkIHRvCisJb3ZlcnJpZGUgYW55IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKK1RFTVBPUkFSWSBGSUxFUworLS0tLS0tLS0tLS0tLS0tCitgZ2l0IG1lcmdldG9vbGAgY3JlYXRlcyBgKi5vcmlnYCBiYWNrdXAgZmlsZXMgd2hpbGUgcmVzb2x2aW5nIG1lcmdlcy4KK1RoZXNlIGFyZSBzYWZlIHRvIHJlbW92ZSBvbmNlIGEgZmlsZSBoYXMgYmVlbiBtZXJnZWQgYW5kIGl0cworYGdpdCBtZXJnZXRvb2xgIHNlc3Npb24gaGFzIGNvbXBsZXRlZC4KKworU2V0dGluZyB0aGUgYG1lcmdldG9vbC5rZWVwQmFja3VwYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGBmYWxzZWAKK2NhdXNlcyBgZ2l0IG1lcmdldG9vbGAgdG8gYXV0b21hdGljYWxseSByZW1vdmUgdGhlIGJhY2t1cCBhcyBmaWxlcworYXJlIHN1Y2Nlc3NmdWxseSBtZXJnZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWt0YWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0YWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZTE2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ta3RhZy50eHQKQEAgLTAsMCArMSwzOCBAQAorZ2l0LW1rdGFnKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1rdGFnIC0gQ3JlYXRlcyBhIHRhZyBvYmplY3QKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWt0YWcnIDwgc2lnbmF0dXJlX2ZpbGUKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBhIHRhZyBjb250ZW50cyBvbiBzdGFuZGFyZCBpbnB1dCBhbmQgY3JlYXRlcyBhIHRhZyBvYmplY3QKK3RoYXQgY2FuIGFsc28gYmUgdXNlZCB0byBzaWduIG90aGVyIG9iamVjdHMuCisKK1RoZSBvdXRwdXQgaXMgdGhlIG5ldyB0YWcncyA8b2JqZWN0PiBpZGVudGlmaWVyLgorCitUYWcgRm9ybWF0CistLS0tLS0tLS0tCitBIHRhZyBzaWduYXR1cmUgZmlsZSBoYXMgYSB2ZXJ5IHNpbXBsZSBmaXhlZCBmb3JtYXQ6IGZvdXIgbGluZXMgb2YKKworICBvYmplY3QgPHNoYTE+CisgIHR5cGUgPHR5cGVuYW1lPgorICB0YWcgPHRhZ25hbWU+CisgIHRhZ2dlciA8dGFnZ2VyPgorCitmb2xsb3dlZCBieSBzb21lICdvcHRpb25hbCcgZnJlZS1mb3JtIG1lc3NhZ2UgKHNvbWUgdGFncyBjcmVhdGVkCitieSBvbGRlciBnaXQgbWF5IG5vdCBoYXZlIGB0YWdnZXJgIGxpbmUpLiAgVGhlIG1lc3NhZ2UsIHdoZW4KK2V4aXN0cywgaXMgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgbGluZSBmcm9tIHRoZSBoZWFkZXIuICBUaGUKK21lc3NhZ2UgcGFydCBtYXkgY29udGFpbiBhIHNpZ25hdHVyZSB0aGF0IGdpdCBpdHNlbGYgZG9lc24ndAorY2FyZSBhYm91dCwgYnV0IHRoYXQgY2FuIGJlIHZlcmlmaWVkIHdpdGggZ3BnLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1rdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNmViZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0CkBAIC0wLDAgKzEsNDAgQEAKK2dpdC1ta3RyZWUoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1rdHJlZSAtIEJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG1rdHJlZScgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBzdGFuZGFyZCBpbnB1dCBpbiBub24tcmVjdXJzaXZlIGBscy10cmVlYCBvdXRwdXQgZm9ybWF0LCBhbmQgY3JlYXRlcworYSB0cmVlIG9iamVjdC4gIFRoZSBvcmRlciBvZiB0aGUgdHJlZSBlbnRyaWVzIGlzIG5vcm1hbGlzZWQgYnkgbWt0cmVlIHNvCitwcmUtc29ydGluZyB0aGUgaW5wdXQgaXMgbm90IHJlcXVpcmVkLiAgVGhlIG9iamVjdCBuYW1lIG9mIHRoZSB0cmVlIG9iamVjdAorYnVpbHQgaXMgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCitPUFRJT05TCistLS0tLS0tCistejo6CisJUmVhZCB0aGUgTlVMLXRlcm1pbmF0ZWQgYGxzLXRyZWUgLXpgIG91dHB1dCBpbnN0ZWFkLgorCistLW1pc3Npbmc6OgorCUFsbG93IG1pc3Npbmcgb2JqZWN0cy4gIFRoZSBkZWZhdWx0IGJlaGF2aW91ciAod2l0aG91dCB0aGlzIG9wdGlvbikKKwlpcyB0byB2ZXJpZnkgdGhhdCBlYWNoIHRyZWUgZW50cnkncyBzaGExIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcKKwlvYmplY3QuICBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSB0cmVhdG1lbnQgb2YgZ2l0bGluayBlbnRyaWVzCisJKGFrYSAic3VibW9kdWxlcyIpIHdoaWNoIGFyZSBhbHdheXMgYWxsb3dlZCB0byBiZSBtaXNzaW5nLgorCistLWJhdGNoOjoKKwlBbGxvdyBidWlsZGluZyBvZiBtb3JlIHRoYW4gb25lIHRyZWUgb2JqZWN0IGJlZm9yZSBleGl0aW5nLiAgRWFjaAorCXRyZWUgaXMgc2VwYXJhdGVkIGJ5IGFzIHNpbmdsZSBibGFuayBsaW5lLiBUaGUgZmluYWwgbmV3LWxpbmUgaXMKKwlvcHRpb25hbC4gIE5vdGUgLSBpZiB0aGUgJy16JyBvcHRpb24gaXMgdXNlZCwgbGluZXMgYXJlIHRlcm1pbmF0ZWQKKwl3aXRoIE5VTC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjODQ0OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dApAQCAtMCwwICsxLDQ5IEBACitnaXQtbXYoMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbXYgLSBNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbXYnIDxvcHRpb25zPi4uLiA8YXJncz4uLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIG1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgZGlyZWN0b3J5IG9yIHN5bWxpbmsuCisKKyBnaXQgbXYgWy12XSBbLWZdIFstbl0gWy1rXSA8c291cmNlPiA8ZGVzdGluYXRpb24+CisgZ2l0IG12IFstdl0gWy1mXSBbLW5dIFsta10gPHNvdXJjZT4gLi4uIDxkZXN0aW5hdGlvbiBkaXJlY3Rvcnk+CisKK0luIHRoZSBmaXJzdCBmb3JtLCBpdCByZW5hbWVzIDxzb3VyY2U+LCB3aGljaCBtdXN0IGV4aXN0IGFuZCBiZSBlaXRoZXIKK2EgZmlsZSwgc3ltbGluayBvciBkaXJlY3RvcnksIHRvIDxkZXN0aW5hdGlvbj4uCitJbiB0aGUgc2Vjb25kIGZvcm0sIHRoZSBsYXN0IGFyZ3VtZW50IGhhcyB0byBiZSBhbiBleGlzdGluZworZGlyZWN0b3J5OyB0aGUgZ2l2ZW4gc291cmNlcyB3aWxsIGJlIG1vdmVkIGludG8gdGhpcyBkaXJlY3RvcnkuCisKK1RoZSBpbmRleCBpcyB1cGRhdGVkIGFmdGVyIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgYnV0IHRoZSBjaGFuZ2UgbXVzdCBzdGlsbCBiZQorY29tbWl0dGVkLgorCitPUFRJT05TCistLS0tLS0tCistZjo6CistLWZvcmNlOjoKKwlGb3JjZSByZW5hbWluZyBvciBtb3Zpbmcgb2YgYSBmaWxlIGV2ZW4gaWYgdGhlIHRhcmdldCBleGlzdHMKKy1rOjoKKyAgICAgICAgU2tpcCBtb3ZlIG9yIHJlbmFtZSBhY3Rpb25zIHdoaWNoIHdvdWxkIGxlYWQgdG8gYW4gZXJyb3IKKwljb25kaXRpb24uIEFuIGVycm9yIGhhcHBlbnMgd2hlbiBhIHNvdXJjZSBpcyBuZWl0aGVyIGV4aXN0aW5nIG5vcgorICAgICAgICBjb250cm9sbGVkIGJ5IEdJVCwgb3Igd2hlbiBpdCB3b3VsZCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcKKyAgICAgICAgZmlsZSB1bmxlc3MgJy1mJyBpcyBnaXZlbi4KKy1uOjoKKy0tZHJ5LXJ1bjo6CisJRG8gbm90aGluZzsgb25seSBzaG93IHdoYXQgd291bGQgaGFwcGVuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUmVwb3J0IHRoZSBuYW1lcyBvZiBmaWxlcyBhcyB0aGV5IGFyZSBtb3ZlZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxZDE0NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW5hbWUtcmV2LnR4dApAQCAtMCwwICsxLDc1IEBACitnaXQtbmFtZS1yZXYoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbmFtZS1yZXYgLSBGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG5hbWUtcmV2JyBbLS10YWdzXSBbLS1yZWZzPTxwYXR0ZXJuPl0KKwkgICAgICAgKCAtLWFsbCB8IC0tc3RkaW4gfCA8Y29tbWl0dGlzaD4uLi4gKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ZpbmRzIHN5bWJvbGljIG5hbWVzIHN1aXRhYmxlIGZvciBodW1hbiBkaWdlc3Rpb24gZm9yIHJldmlzaW9ucyBnaXZlbiBpbiBhbnkKK2Zvcm1hdCBwYXJzYWJsZSBieSAnZ2l0IHJldi1wYXJzZScuCisKKworT1BUSU9OUworLS0tLS0tLQorCistLXRhZ3M6OgorCURvIG5vdCB1c2UgYnJhbmNoIG5hbWVzLCBidXQgb25seSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMKKworLS1yZWZzPTxwYXR0ZXJuPjo6CisJT25seSB1c2UgcmVmcyB3aG9zZSBuYW1lcyBtYXRjaCBhIGdpdmVuIHNoZWxsIHBhdHRlcm4uCisKKy0tYWxsOjoKKwlMaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzCisKKy0tc3RkaW46OgorCVJlYWQgZnJvbSBzdGRpbiwgYXBwZW5kICIoPHJldl9uYW1lPikiIHRvIGFsbCBzaGExJ3Mgb2YgbmFtZWFibGUKKwljb21taXRzLCBhbmQgcGFzcyB0byBzdGRvdXQKKworLS1uYW1lLW9ubHk6OgorCUluc3RlYWQgb2YgcHJpbnRpbmcgYm90aCB0aGUgU0hBLTEgYW5kIHRoZSBuYW1lLCBwcmludCBvbmx5CisJdGhlIG5hbWUuICBJZiBnaXZlbiB3aXRoIC0tdGFncyB0aGUgdXN1YWwgdGFnIHByZWZpeCBvZgorCSJ0YWdzLyIgaXMgYWxzbyBvbWl0dGVkIGZyb20gdGhlIG5hbWUsIG1hdGNoaW5nIHRoZSBvdXRwdXQKKwlvZiBgZ2l0LWRlc2NyaWJlYCBtb3JlIGNsb3NlbHkuCisKKy0tbm8tdW5kZWZpbmVkOjoKKwlEaWUgd2l0aCBlcnJvciBjb2RlICE9IDAgd2hlbiBhIHJlZmVyZW5jZSBpcyB1bmRlZmluZWQsCisJaW5zdGVhZCBvZiBwcmludGluZyBgdW5kZWZpbmVkYC4KKworLS1hbHdheXM6OgorCVNob3cgdW5pcXVlbHkgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjay4KKworRVhBTVBMRQorLS0tLS0tLQorCitHaXZlbiBhIGNvbW1pdCwgZmluZCBvdXQgd2hlcmUgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIHJlZnMuIFNheSBzb21lYm9keQord3JvdGUgeW91IGFib3V0IHRoYXQgZmFudGFzdGljIGNvbW1pdCAzM2RiNWY0ZDkwMjdhMTBlNDc3Y2NmMDU0YjJjMWFiOTRmNzRjODVhLgorT2YgY291cnNlLCB5b3UgbG9vayBpbnRvIHRoZSBjb21taXQsIGJ1dCB0aGF0IG9ubHkgdGVsbHMgeW91IHdoYXQgaGFwcGVuZWQsIGJ1dAorbm90IHRoZSBjb250ZXh0LgorCitFbnRlciAnZ2l0IG5hbWUtcmV2JzoKKworLS0tLS0tLS0tLS0tCislIGdpdCBuYW1lLXJldiAzM2RiNWY0ZDkwMjdhMTBlNDc3Y2NmMDU0YjJjMWFiOTRmNzRjODVhCiszM2RiNWY0ZDkwMjdhMTBlNDc3Y2NmMDU0YjJjMWFiOTRmNzRjODVhIHRhZ3MvdjAuOTl+OTQwCistLS0tLS0tLS0tLS0KKworTm93IHlvdSBhcmUgd2lzZXIsIGJlY2F1c2UgeW91IGtub3cgdGhhdCBpdCBoYXBwZW5lZCA5NDAgcmV2aXNpb25zIGJlZm9yZSB2MC45OS4KKworQW5vdGhlciBuaWNlIHRoaW5nIHlvdSBjYW4gZG8gaXM6CisKKy0tLS0tLS0tLS0tLQorJSBnaXQgbG9nIHwgZ2l0IG5hbWUtcmV2IC0tc3RkaW4KKy0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTVhYWZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0CkBAIC0wLDAgKzEsMzg2IEBACitnaXQtbm90ZXMoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbm90ZXMgLSBBZGQgb3IgaW5zcGVjdCBvYmplY3Qgbm90ZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG5vdGVzJyBbbGlzdCBbPG9iamVjdD5dXQorJ2dpdCBub3RlcycgYWRkIFstZl0gWy1GIDxmaWxlPiB8IC1tIDxtc2c+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dCisnZ2l0IG5vdGVzJyBjb3B5IFstZl0gKCAtLXN0ZGluIHwgPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiApCisnZ2l0IG5vdGVzJyBhcHBlbmQgWy1GIDxmaWxlPiB8IC1tIDxtc2c+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dCisnZ2l0IG5vdGVzJyBlZGl0IFs8b2JqZWN0Pl0KKydnaXQgbm90ZXMnIHNob3cgWzxvYmplY3Q+XQorJ2dpdCBub3RlcycgbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+IF0gPG5vdGVzX3JlZj4KKydnaXQgbm90ZXMnIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXQorJ2dpdCBub3RlcycgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0KKydnaXQgbm90ZXMnIHJlbW92ZSBbLS1pZ25vcmUtbWlzc2luZ10gWy0tc3RkaW5dIFs8b2JqZWN0Pi4uLl0KKydnaXQgbm90ZXMnIHBydW5lIFstbiB8IC12XQorJ2dpdCBub3RlcycgZ2V0LXJlZgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQWRkcywgcmVtb3Zlcywgb3IgcmVhZHMgbm90ZXMgYXR0YWNoZWQgdG8gb2JqZWN0cywgd2l0aG91dCB0b3VjaGluZwordGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKworQnkgZGVmYXVsdCwgbm90ZXMgYXJlIHNhdmVkIHRvIGFuZCByZWFkIGZyb20gYHJlZnMvbm90ZXMvY29tbWl0c2AsIGJ1dAordGhpcyBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuLiAgU2VlIHRoZSBPUFRJT05TLCBDT05GSUdVUkFUSU9OLCBhbmQKK0VOVklST05NRU5UIHNlY3Rpb25zIGJlbG93LiAgSWYgdGhpcyByZWYgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUKK3F1aWV0bHkgY3JlYXRlZCB3aGVuIGl0IGlzIGZpcnN0IG5lZWRlZCB0byBzdG9yZSBhIG5vdGUuCisKK0EgdHlwaWNhbCB1c2Ugb2Ygbm90ZXMgaXMgdG8gc3VwcGxlbWVudCBhIGNvbW1pdCBtZXNzYWdlIHdpdGhvdXQKK2NoYW5naW5nIHRoZSBjb21taXQgaXRzZWxmLiBOb3RlcyBjYW4gYmUgc2hvd24gYnkgJ2dpdCBsb2cnIGFsb25nIHdpdGgKK3RoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZS4gVG8gZGlzdGluZ3Vpc2ggdGhlc2Ugbm90ZXMgZnJvbSB0aGUKK21lc3NhZ2Ugc3RvcmVkIGluIHRoZSBjb21taXQgb2JqZWN0LCB0aGUgbm90ZXMgYXJlIGluZGVudGVkIGxpa2UgdGhlCittZXNzYWdlLCBhZnRlciBhbiB1bmluZGVudGVkIGxpbmUgc2F5aW5nICJOb3RlcyAoPHJlZm5hbWU+KToiIChvcgorIk5vdGVzOiIgZm9yIGByZWZzL25vdGVzL2NvbW1pdHNgKS4KKworVG8gY2hhbmdlIHdoaWNoIG5vdGVzIGFyZSBzaG93biBieSAnZ2l0IGxvZycsIHNlZSB0aGUKKyJub3Rlcy5kaXNwbGF5UmVmIiBjb25maWd1cmF0aW9uIGluIGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KKworU2VlIHRoZSAibm90ZXMucmV3cml0ZS48Y29tbWFuZD4iIGNvbmZpZ3VyYXRpb24gZm9yIGEgd2F5IHRvIGNhcnJ5Citub3RlcyBhY3Jvc3MgY29tbWFuZHMgdGhhdCByZXdyaXRlIGNvbW1pdHMuCisKKworU1VCQ09NTUFORFMKKy0tLS0tLS0tLS0tCisKK2xpc3Q6OgorCUxpc3QgdGhlIG5vdGVzIG9iamVjdCBmb3IgYSBnaXZlbiBvYmplY3QuIElmIG5vIG9iamVjdCBpcworCWdpdmVuLCBzaG93IGEgbGlzdCBvZiBhbGwgbm90ZSBvYmplY3RzIGFuZCB0aGUgb2JqZWN0cyB0aGV5CisJYW5ub3RhdGUgKGluIHRoZSBmb3JtYXQgIjxub3RlIG9iamVjdD4gPGFubm90YXRlZCBvYmplY3Q+IikuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBzdWJjb21tYW5kIGlmIG5vIHN1YmNvbW1hbmQgaXMgZ2l2ZW4uCisKK2FkZDo6CisJQWRkIG5vdGVzIGZvciBhIGdpdmVuIG9iamVjdCAoZGVmYXVsdHMgdG8gSEVBRCkuIEFib3J0IGlmIHRoZQorCW9iamVjdCBhbHJlYWR5IGhhcyBub3RlcyAodXNlIGAtZmAgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIG5vdGVzKS4KKwlIb3dldmVyLCBpZiB5b3UncmUgdXNpbmcgYGFkZGAgaW50ZXJhY3RpdmVseSAodXNpbmcgYW4gZWRpdG9yCisJdG8gc3VwcGx5IHRoZSBub3RlcyBjb250ZW50cyksIHRoZW4gLSBpbnN0ZWFkIG9mIGFib3J0aW5nIC0KKwl0aGUgZXhpc3Rpbmcgbm90ZXMgd2lsbCBiZSBvcGVuZWQgaW4gdGhlIGVkaXRvciAobGlrZSB0aGUgYGVkaXRgCisJc3ViY29tbWFuZCkuCisKK2NvcHk6OgorCUNvcHkgdGhlIG5vdGVzIGZvciB0aGUgZmlyc3Qgb2JqZWN0IG9udG8gdGhlIHNlY29uZCBvYmplY3QuCisJQWJvcnQgaWYgdGhlIHNlY29uZCBvYmplY3QgYWxyZWFkeSBoYXMgbm90ZXMsIG9yIGlmIHRoZSBmaXJzdAorCW9iamVjdCBoYXMgbm9uZSAodXNlIC1mIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBub3RlcyB0byB0aGUKKwlzZWNvbmQgb2JqZWN0KS4gVGhpcyBzdWJjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG86CisJYGdpdCBub3RlcyBhZGQgWy1mXSAtQyAkKGdpdCBub3RlcyBsaXN0IDxmcm9tLW9iamVjdD4pIDx0by1vYmplY3Q+YAorKworSW4gYC0tc3RkaW5gIG1vZGUsIHRha2UgbGluZXMgaW4gdGhlIGZvcm1hdAorKworLS0tLS0tLS0tLQorPGZyb20tb2JqZWN0PiBTUCA8dG8tb2JqZWN0PiBbIFNQIDxyZXN0PiBdIExGCistLS0tLS0tLS0tCisrCitvbiBzdGFuZGFyZCBpbnB1dCwgYW5kIGNvcHkgdGhlIG5vdGVzIGZyb20gZWFjaCA8ZnJvbS1vYmplY3Q+IHRvIGl0cworY29ycmVzcG9uZGluZyA8dG8tb2JqZWN0Pi4gIChUaGUgb3B0aW9uYWwgYDxyZXN0PmAgaXMgaWdub3JlZCBzbyB0aGF0Cit0aGUgY29tbWFuZCBjYW4gcmVhZCB0aGUgaW5wdXQgZ2l2ZW4gdG8gdGhlIGBwb3N0LXJld3JpdGVgIGhvb2suKQorCithcHBlbmQ6OgorCUFwcGVuZCB0byB0aGUgbm90ZXMgb2YgYW4gZXhpc3Rpbmcgb2JqZWN0IChkZWZhdWx0cyB0byBIRUFEKS4KKwlDcmVhdGVzIGEgbmV3IG5vdGVzIG9iamVjdCBpZiBuZWVkZWQuCisKK2VkaXQ6OgorCUVkaXQgdGhlIG5vdGVzIGZvciBhIGdpdmVuIG9iamVjdCAoZGVmYXVsdHMgdG8gSEVBRCkuCisKK3Nob3c6OgorCVNob3cgdGhlIG5vdGVzIGZvciBhIGdpdmVuIG9iamVjdCAoZGVmYXVsdHMgdG8gSEVBRCkuCisKK21lcmdlOjoKKwlNZXJnZSB0aGUgZ2l2ZW4gbm90ZXMgcmVmIGludG8gdGhlIGN1cnJlbnQgbm90ZXMgcmVmLgorCVRoaXMgd2lsbCB0cnkgdG8gbWVyZ2UgdGhlIGNoYW5nZXMgbWFkZSBieSB0aGUgZ2l2ZW4KKwlub3RlcyByZWYgKGNhbGxlZCAicmVtb3RlIikgc2luY2UgdGhlIG1lcmdlLWJhc2UgKGlmCisJYW55KSBpbnRvIHRoZSBjdXJyZW50IG5vdGVzIHJlZiAoY2FsbGVkICJsb2NhbCIpLgorKworSWYgY29uZmxpY3RzIGFyaXNlIGFuZCBhIHN0cmF0ZWd5IGZvciBhdXRvbWF0aWNhbGx5IHJlc29sdmluZworY29uZmxpY3Rpbmcgbm90ZXMgKHNlZSB0aGUgLXMvLS1zdHJhdGVneSBvcHRpb24pIGlzIG5vdCBnaXZlbiwKK3RoZSAibWFudWFsIiByZXNvbHZlciBpcyB1c2VkLiBUaGlzIHJlc29sdmVyIGNoZWNrcyBvdXQgdGhlCitjb25mbGljdGluZyBub3RlcyBpbiBhIHNwZWNpYWwgd29ya3RyZWUgKGAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFYCksCithbmQgaW5zdHJ1Y3RzIHRoZSB1c2VyIHRvIG1hbnVhbGx5IHJlc29sdmUgdGhlIGNvbmZsaWN0cyB0aGVyZS4KK1doZW4gZG9uZSwgdGhlIHVzZXIgY2FuIGVpdGhlciBmaW5hbGl6ZSB0aGUgbWVyZ2Ugd2l0aAorJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoCisnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLgorCityZW1vdmU6OgorCVJlbW92ZSB0aGUgbm90ZXMgZm9yIGdpdmVuIG9iamVjdHMgKGRlZmF1bHRzIHRvIEhFQUQpLiBXaGVuCisJZ2l2aW5nIHplcm8gb3Igb25lIG9iamVjdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoaXMgaXMKKwllcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgYW4gZW1wdHkgbm90ZSBtZXNzYWdlIHRvCisJdGhlIGBlZGl0YCBzdWJjb21tYW5kLgorCitwcnVuZTo6CisJUmVtb3ZlIGFsbCBub3RlcyBmb3Igbm9uLWV4aXN0aW5nL3VucmVhY2hhYmxlIG9iamVjdHMuCisKK2dldC1yZWY6OgorCVByaW50IHRoZSBjdXJyZW50IG5vdGVzIHJlZi4gVGhpcyBwcm92aWRlcyBhbiBlYXN5IHdheSB0bworCXJldHJpZXZlIHRoZSBjdXJyZW50IG5vdGVzIHJlZiAoZS5nLiBmcm9tIHNjcmlwdHMpLgorCitPUFRJT05TCistLS0tLS0tCistZjo6CistLWZvcmNlOjoKKwlXaGVuIGFkZGluZyBub3RlcyB0byBhbiBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBub3RlcywKKwlvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIG5vdGVzIChpbnN0ZWFkIG9mIGFib3J0aW5nKS4KKworLW0gPG1zZz46OgorLS1tZXNzYWdlPTxtc2c+OjoKKwlVc2UgdGhlIGdpdmVuIG5vdGUgbWVzc2FnZSAoaW5zdGVhZCBvZiBwcm9tcHRpbmcpLgorCUlmIG11bHRpcGxlIGAtbWAgb3B0aW9ucyBhcmUgZ2l2ZW4sIHRoZWlyIHZhbHVlcworCWFyZSBjb25jYXRlbmF0ZWQgYXMgc2VwYXJhdGUgcGFyYWdyYXBocy4KKwlMaW5lcyBzdGFydGluZyB3aXRoIGAjYCBhbmQgZW1wdHkgbGluZXMgb3RoZXIgdGhhbiBhCisJc2luZ2xlIGxpbmUgYmV0d2VlbiBwYXJhZ3JhcGhzIHdpbGwgYmUgc3RyaXBwZWQgb3V0LgorCistRiA8ZmlsZT46OgorLS1maWxlPTxmaWxlPjo6CisJVGFrZSB0aGUgbm90ZSBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIGZpbGUuICBVc2UgJy0nIHRvCisJcmVhZCB0aGUgbm90ZSBtZXNzYWdlIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCUxpbmVzIHN0YXJ0aW5nIHdpdGggYCNgIGFuZCBlbXB0eSBsaW5lcyBvdGhlciB0aGFuIGEKKwlzaW5nbGUgbGluZSBiZXR3ZWVuIHBhcmFncmFwaHMgd2lsbCBiZSBzdHJpcHBlZCBvdXQuCisKKy1DIDxvYmplY3Q+OjoKKy0tcmV1c2UtbWVzc2FnZT08b2JqZWN0Pjo6CisJVGFrZSB0aGUgZ2l2ZW4gYmxvYiBvYmplY3QgKGZvcglleGFtcGxlLCBhbm90aGVyIG5vdGUpIGFzIHRoZQorCW5vdGUgbWVzc2FnZS4gKFVzZSBgZ2l0IG5vdGVzIGNvcHkgPG9iamVjdD5gIGluc3RlYWQgdG8KKwljb3B5IG5vdGVzIGJldHdlZW4gb2JqZWN0cy4pCisKKy1jIDxvYmplY3Q+OjoKKy0tcmVlZGl0LW1lc3NhZ2U9PG9iamVjdD46OgorCUxpa2UgJy1DJywgYnV0IHdpdGggJy1jJyB0aGUgZWRpdG9yIGlzIGludm9rZWQsIHNvIHRoYXQKKwl0aGUgdXNlciBjYW4gZnVydGhlciBlZGl0IHRoZSBub3RlIG1lc3NhZ2UuCisKKy0tcmVmIDxyZWY+OjoKKwlNYW5pcHVsYXRlIHRoZSBub3RlcyB0cmVlIGluIDxyZWY+LiAgVGhpcyBvdmVycmlkZXMKKwknR0lUX05PVEVTX1JFRicgYW5kIHRoZSAiY29yZS5ub3Rlc1JlZiIgY29uZmlndXJhdGlvbi4gIFRoZSByZWYKKwlpcyB0YWtlbiB0byBiZSBpbiBgcmVmcy9ub3Rlcy9gIGlmIGl0IGlzIG5vdCBxdWFsaWZpZWQuCisKKy0taWdub3JlLW1pc3Npbmc6OgorCURvIG5vdCBjb25zaWRlciBpdCBhbiBlcnJvciB0byByZXF1ZXN0IHJlbW92aW5nIG5vdGVzIGZyb20gYW4KKwlvYmplY3QgdGhhdCBkb2VzIG5vdCBoYXZlIG5vdGVzIGF0dGFjaGVkIHRvIGl0LgorCistLXN0ZGluOjoKKwlBbHNvIHJlYWQgdGhlIG9iamVjdCBuYW1lcyB0byByZW1vdmUgbm90ZXMgZnJvbSBmcm9tIHRoZSBzdGFuZGFyZAorCWlucHV0ICh0aGVyZSBpcyBubyByZWFzb24geW91IGNhbm5vdCBjb21iaW5lIHRoaXMgd2l0aCBvYmplY3QKKwluYW1lcyBmcm9tIHRoZSBjb21tYW5kIGxpbmUpLgorCistbjo6CistLWRyeS1ydW46OgorCURvIG5vdCByZW1vdmUgYW55dGhpbmc7IGp1c3QgcmVwb3J0IHRoZSBvYmplY3QgbmFtZXMgd2hvc2Ugbm90ZXMKKwl3b3VsZCBiZSByZW1vdmVkLgorCistcyA8c3RyYXRlZ3k+OjoKKy0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pjo6CisJV2hlbiBtZXJnaW5nIG5vdGVzLCByZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4KKwlzdHJhdGVneS4gVGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzIGFyZSByZWNvZ25pemVkOiAibWFudWFsIgorCShkZWZhdWx0KSwgIm91cnMiLCAidGhlaXJzIiwgInVuaW9uIiBhbmQgImNhdF9zb3J0X3VuaXEiLgorCVNlZSB0aGUgIk5PVEVTIE1FUkdFIFNUUkFURUdJRVMiIHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUKKwlpbmZvcm1hdGlvbiBvbiBlYWNoIG5vdGVzIG1lcmdlIHN0cmF0ZWd5LgorCistLWNvbW1pdDo6CisJRmluYWxpemUgYW4gaW4tcHJvZ3Jlc3MgJ2dpdCBub3RlcyBtZXJnZScuIFVzZSB0aGlzIG9wdGlvbgorCXdoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhlIGNvbmZsaWN0cyB0aGF0ICdnaXQgbm90ZXMgbWVyZ2UnCisJc3RvcmVkIGluIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUuIFRoaXMgYW1lbmRzIHRoZSBwYXJ0aWFsCisJbWVyZ2UgY29tbWl0IGNyZWF0ZWQgYnkgJ2dpdCBub3RlcyBtZXJnZScgKHN0b3JlZCBpbgorCS5naXQvTk9URVNfTUVSR0VfUEFSVElBTCkgYnkgYWRkaW5nIHRoZSBub3RlcyBpbgorCS5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUuIFRoZSBub3RlcyByZWYgc3RvcmVkIGluIHRoZQorCS5naXQvTk9URVNfTUVSR0VfUkVGIHN5bXJlZiBpcyB1cGRhdGVkIHRvIHRoZSByZXN1bHRpbmcgY29tbWl0LgorCistLWFib3J0OjoKKwlBYm9ydC9yZXNldCBhIGluLXByb2dyZXNzICdnaXQgbm90ZXMgbWVyZ2UnLCBpLmUuIGEgbm90ZXMgbWVyZ2UKKwl3aXRoIGNvbmZsaWN0cy4gVGhpcyBzaW1wbHkgcmVtb3ZlcyBhbGwgZmlsZXMgcmVsYXRlZCB0byB0aGUKKwlub3RlcyBtZXJnZS4KKworLXE6OgorLS1xdWlldDo6CisJV2hlbiBtZXJnaW5nIG5vdGVzLCBvcGVyYXRlIHF1aWV0bHkuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJV2hlbiBtZXJnaW5nIG5vdGVzLCBiZSBtb3JlIHZlcmJvc2UuCisJV2hlbiBwcnVuaW5nIG5vdGVzLCByZXBvcnQgYWxsIG9iamVjdCBuYW1lcyB3aG9zZSBub3RlcyBhcmUKKwlyZW1vdmVkLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworQ29tbWl0IG5vdGVzIGFyZSBibG9icyBjb250YWluaW5nIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IGFuIG9iamVjdAorKHVzdWFsbHkgaW5mb3JtYXRpb24gdG8gc3VwcGxlbWVudCBhIGNvbW1pdCdzIG1lc3NhZ2UpLiAgVGhlc2UgYmxvYnMKK2FyZSB0YWtlbiBmcm9tIG5vdGVzIHJlZnMuICBBIG5vdGVzIHJlZiBpcyB1c3VhbGx5IGEgYnJhbmNoIHdoaWNoCitjb250YWlucyAiZmlsZXMiIHdob3NlIHBhdGhzIGFyZSB0aGUgb2JqZWN0IG5hbWVzIGZvciB0aGUgb2JqZWN0cwordGhleSBkZXNjcmliZSwgd2l0aCBzb21lIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGluY2x1ZGVkIGZvciBwZXJmb3JtYW5jZQorcmVhc29ucyBmb290bm90ZTpbUGVybWl0dGVkIHBhdGhuYW1lcyBoYXZlIHRoZSBmb3JtCisnYWInYC9gJ2NkJ2AvYCdlZidgL2AnLi4uJ2AvYCdhYmNkZWYuLi4nOiBhIHNlcXVlbmNlIG9mIGRpcmVjdG9yeQorbmFtZXMgb2YgdHdvIGhleGFkZWNpbWFsIGRpZ2l0cyBlYWNoIGZvbGxvd2VkIGJ5IGEgZmlsZW5hbWUgd2l0aCB0aGUKK3Jlc3Qgb2YgdGhlIG9iamVjdCBJRC5dLgorCitFdmVyeSBub3RlcyBjaGFuZ2UgY3JlYXRlcyBhIG5ldyBjb21taXQgYXQgdGhlIHNwZWNpZmllZCBub3RlcyByZWYuCitZb3UgY2FuIHRoZXJlZm9yZSBpbnNwZWN0IHRoZSBoaXN0b3J5IG9mIHRoZSBub3RlcyBieSBpbnZva2luZywgZS5nLiwKK2BnaXQgbG9nIC1wIG5vdGVzL2NvbW1pdHNgLiAgQ3VycmVudGx5IHRoZSBjb21taXQgbWVzc2FnZSBvbmx5IHJlY29yZHMKK3doaWNoIG9wZXJhdGlvbiB0cmlnZ2VyZWQgdGhlIHVwZGF0ZSwgYW5kIHRoZSBjb21taXQgYXV0aG9yc2hpcCBpcworZGV0ZXJtaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHVzdWFsIHJ1bGVzIChzZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdKS4KK1RoZXNlIGRldGFpbHMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorCitJdCBpcyBhbHNvIHBlcm1pdHRlZCBmb3IgYSBub3RlcyByZWYgdG8gcG9pbnQgZGlyZWN0bHkgdG8gYSB0cmVlCitvYmplY3QsIGluIHdoaWNoIGNhc2UgdGhlIGhpc3Rvcnkgb2YgdGhlIG5vdGVzIGNhbiBiZSByZWFkIHdpdGgKK2BnaXQgbG9nIC1wIC1nIDxyZWZuYW1lPmAuCisKKworTk9URVMgTUVSR0UgU1RSQVRFR0lFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBub3RlcyBtZXJnZSBzdHJhdGVneSBpcyAibWFudWFsIiwgd2hpY2ggY2hlY2tzIG91dAorY29uZmxpY3Rpbmcgbm90ZXMgaW4gYSBzcGVjaWFsIHdvcmsgdHJlZSBmb3IgcmVzb2x2aW5nIG5vdGVzIGNvbmZsaWN0cworKGAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFYCksIGFuZCBpbnN0cnVjdHMgdGhlIHVzZXIgdG8gcmVzb2x2ZSB0aGUKK2NvbmZsaWN0cyBpbiB0aGF0IHdvcmsgdHJlZS4KK1doZW4gZG9uZSwgdGhlIHVzZXIgY2FuIGVpdGhlciBmaW5hbGl6ZSB0aGUgbWVyZ2Ugd2l0aAorJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoCisnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLgorCisib3VycyIgYXV0b21hdGljYWxseSByZXNvbHZlcyBjb25mbGljdGluZyBub3RlcyBpbiBmYXZvciBvZiB0aGUgbG9jYWwKK3ZlcnNpb24gKGkuZS4gdGhlIGN1cnJlbnQgbm90ZXMgcmVmKS4KKworInRoZWlycyIgYXV0b21hdGljYWxseSByZXNvbHZlcyBub3RlcyBjb25mbGljdHMgaW4gZmF2b3Igb2YgdGhlIHJlbW90ZQordmVyc2lvbiAoaS5lLiB0aGUgZ2l2ZW4gbm90ZXMgcmVmIGJlaW5nIG1lcmdlZCBpbnRvIHRoZSBjdXJyZW50IG5vdGVzCityZWYpLgorCisidW5pb24iIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZXMgbm90ZXMgY29uZmxpY3RzIGJ5IGNvbmNhdGVuYXRpbmcgdGhlCitsb2NhbCBhbmQgcmVtb3RlIHZlcnNpb25zLgorCisiY2F0X3NvcnRfdW5pcSIgaXMgc2ltaWxhciB0byAidW5pb24iLCBidXQgaW4gYWRkaXRpb24gdG8gY29uY2F0ZW5hdGluZwordGhlIGxvY2FsIGFuZCByZW1vdGUgdmVyc2lvbnMsIHRoaXMgc3RyYXRlZ3kgYWxzbyBzb3J0cyB0aGUgcmVzdWx0aW5nCitsaW5lcywgYW5kIHJlbW92ZXMgZHVwbGljYXRlIGxpbmVzIGZyb20gdGhlIHJlc3VsdC4gVGhpcyBpcyBlcXVpdmFsZW50Cit0byBhcHBseWluZyB0aGUgImNhdCB8IHNvcnQgfCB1bmlxIiBzaGVsbCBwaXBlbGluZSB0byB0aGUgbG9jYWwgYW5kCityZW1vdGUgdmVyc2lvbnMuIFRoaXMgc3RyYXRlZ3kgaXMgdXNlZnVsIGlmIHRoZSBub3RlcyBmb2xsb3cgYSBsaW5lLWJhc2VkCitmb3JtYXQgd2hlcmUgb25lIHdhbnRzIHRvIGF2b2lkIGR1cGxpY2F0ZWQgbGluZXMgaW4gdGhlIG1lcmdlIHJlc3VsdC4KK05vdGUgdGhhdCBpZiBlaXRoZXIgdGhlIGxvY2FsIG9yIHJlbW90ZSB2ZXJzaW9uIGNvbnRhaW4gZHVwbGljYXRlIGxpbmVzCitwcmlvciB0byB0aGUgbWVyZ2UsIHRoZXNlIHdpbGwgYWxzbyBiZSByZW1vdmVkIGJ5IHRoaXMgbm90ZXMgbWVyZ2UKK3N0cmF0ZWd5LgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitZb3UgY2FuIHVzZSBub3RlcyB0byBhZGQgYW5ub3RhdGlvbnMgd2l0aCBpbmZvcm1hdGlvbiB0aGF0IHdhcyBub3QKK2F2YWlsYWJsZSBhdCB0aGUgdGltZSBhIGNvbW1pdCB3YXMgd3JpdHRlbi4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBub3RlcyBhZGQgLW0gJ1Rlc3RlZC1ieTogSm9oYW5uZXMgU2l4dCA8ajZ0QGtkYmcub3JnPicgNzJhMTQ0ZTIKKyQgZ2l0IHNob3cgLXMgNzJhMTQ0ZQorWy4uLl0KKyAgICBTaWduZWQtb2ZmLWJ5OiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CisKK05vdGVzOgorICAgIFRlc3RlZC1ieTogSm9oYW5uZXMgU2l4dCA8ajZ0QGtkYmcub3JnPgorLS0tLS0tLS0tLS0tCisKK0luIHByaW5jaXBsZSwgYSBub3RlIGlzIGEgcmVndWxhciBHaXQgYmxvYiwgYW5kIGFueSBraW5kIG9mCisobm9uLSlmb3JtYXQgaXMgYWNjZXB0ZWQuICBZb3UgY2FuIGJpbmFyeS1zYWZlbHkgY3JlYXRlIG5vdGVzIGZyb20KK2FyYml0cmFyeSBmaWxlcyB1c2luZyAnZ2l0IGhhc2gtb2JqZWN0JzoKKworLS0tLS0tLS0tLS0tCiskIGNjICouYworJCBibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGEub3V0KQorJCBnaXQgbm90ZXMgLS1yZWY9YnVpbHQgYWRkIC1DICIkYmxvYiIgSEVBRAorLS0tLS0tLS0tLS0tCisKKyhZb3UgY2Fubm90IHNpbXBseSB1c2UgYGdpdCBub3RlcyAtLXJlZj1idWlsdCBhZGQgLUYgYS5vdXQgSEVBRGAKK2JlY2F1c2UgdGhhdCBpcyBub3QgYmluYXJ5LXNhZmUuKQorT2YgY291cnNlLCBpdCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB0byBkaXNwbGF5IG5vbi10ZXh0LWZvcm1hdCBub3Rlcword2l0aCAnZ2l0IGxvZycsIHNvIGlmIHlvdSB1c2Ugc3VjaCBub3RlcywgeW91J2xsIHByb2JhYmx5IG5lZWQgdG8gd3JpdGUKK3NvbWUgc3BlY2lhbC1wdXJwb3NlIHRvb2xzIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGVtLgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworY29yZS5ub3Rlc1JlZjo6CisJTm90ZXMgcmVmIHRvIHJlYWQgYW5kIG1hbmlwdWxhdGUgaW5zdGVhZCBvZgorCWByZWZzL25vdGVzL2NvbW1pdHNgLiAgTXVzdCBiZSBhbiB1bmFiYnJldmlhdGVkIHJlZiBuYW1lLgorCVRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiB0aHJvdWdoIHRoZSBlbnZpcm9ubWVudCBhbmQKKwljb21tYW5kIGxpbmUuCisKK25vdGVzLmRpc3BsYXlSZWY6OgorCVdoaWNoIHJlZiAob3IgcmVmcywgaWYgYSBnbG9iIG9yIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSksIGluCisJYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgc2V0IGJ5IGBjb3JlLm5vdGVzUmVmYCBvcgorCSdHSVRfTk9URVNfUkVGJywgdG8gcmVhZCBub3RlcyBmcm9tIHdoZW4gc2hvd2luZyBjb21taXQKKwltZXNzYWdlcyB3aXRoIHRoZSAnZ2l0IGxvZycgZmFtaWx5IG9mIGNvbW1hbmRzLgorCVRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGJ5IHRoZQorCSdHSVRfTk9URVNfRElTUExBWV9SRUYnIGVudmlyb25tZW50IHZhcmlhYmxlLgorCVNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0uCisKK25vdGVzLnJld3JpdGUuPGNvbW1hbmQ+OjoKKwlXaGVuIHJld3JpdGluZyBjb21taXRzIHdpdGggPGNvbW1hbmQ+IChjdXJyZW50bHkgYGFtZW5kYCBvcgorCWByZWJhc2VgKSwgaWYgdGhpcyB2YXJpYWJsZSBpcyBgZmFsc2VgLCBnaXQgd2lsbCBub3QgY29weQorCW5vdGVzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSByZXdyaXR0ZW4gY29tbWl0LiAgRGVmYXVsdHMgdG8KKwlgdHJ1ZWAuICBTZWUgYWxzbyAiYG5vdGVzLnJld3JpdGVSZWZgIiBiZWxvdy4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9OT1RFU19SRVdSSVRFX1JFRicKK2Vudmlyb25tZW50IHZhcmlhYmxlLgorCitub3Rlcy5yZXdyaXRlTW9kZTo6CisJV2hlbiBjb3B5aW5nIG5vdGVzIGR1cmluZyBhIHJld3JpdGUsIHdoYXQgdG8gZG8gaWYgdGhlIHRhcmdldAorCWNvbW1pdCBhbHJlYWR5IGhhcyBhIG5vdGUuICBNdXN0IGJlIG9uZSBvZiBgb3ZlcndyaXRlYCwKKwlgY29uY2F0ZW5hdGVgLCBhbmQgYGlnbm9yZWAuICBEZWZhdWx0cyB0byBgY29uY2F0ZW5hdGVgLgorKworVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGBHSVRfTk9URVNfUkVXUklURV9NT0RFYAorZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK25vdGVzLnJld3JpdGVSZWY6OgorCVdoZW4gY29weWluZyBub3RlcyBkdXJpbmcgYSByZXdyaXRlLCBzcGVjaWZpZXMgdGhlIChmdWxseQorCXF1YWxpZmllZCkgcmVmIHdob3NlIG5vdGVzIHNob3VsZCBiZSBjb3BpZWQuICBNYXkgYmUgYSBnbG9iLAorCWluIHdoaWNoIGNhc2Ugbm90ZXMgaW4gYWxsIG1hdGNoaW5nIHJlZnMgd2lsbCBiZSBjb3BpZWQuICBZb3UKKwltYXkgYWxzbyBzcGVjaWZ5IHRoaXMgY29uZmlndXJhdGlvbiBzZXZlcmFsIHRpbWVzLgorKworRG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWU7IHlvdSBtdXN0IGNvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIHRvCitlbmFibGUgbm90ZSByZXdyaXRpbmcuCisrCitDYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAnR0lUX05PVEVTX1JFV1JJVEVfUkVGJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworCitFTlZJUk9OTUVOVAorLS0tLS0tLS0tLS0KKworJ0dJVF9OT1RFU19SRUYnOjoKKwlXaGljaCByZWYgdG8gbWFuaXB1bGF0ZSBub3RlcyBmcm9tLCBpbnN0ZWFkIG9mIGByZWZzL25vdGVzL2NvbW1pdHNgLgorCVRoaXMgb3ZlcnJpZGVzIHRoZSBgY29yZS5ub3Rlc1JlZmAgc2V0dGluZy4KKworJ0dJVF9OT1RFU19ESVNQTEFZX1JFRic6OgorCUNvbG9uLWRlbGltaXRlZCBsaXN0IG9mIHJlZnMgb3IgZ2xvYnMgaW5kaWNhdGluZyB3aGljaCByZWZzLAorCWluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IGZyb20gYGNvcmUubm90ZXNSZWZgIG9yCisJJ0dJVF9OT1RFU19SRUYnLCB0byByZWFkIG5vdGVzIGZyb20gd2hlbiBzaG93aW5nIGNvbW1pdAorCW1lc3NhZ2VzLgorCVRoaXMgb3ZlcnJpZGVzIHRoZSBgbm90ZXMuZGlzcGxheVJlZmAgc2V0dGluZy4KKysKK0Egd2FybmluZyB3aWxsIGJlIGlzc3VlZCBmb3IgcmVmcyB0aGF0IGRvIG5vdCBleGlzdCwgYnV0IGEgZ2xvYiB0aGF0Citkb2VzIG5vdCBtYXRjaCBhbnkgcmVmcyBpcyBzaWxlbnRseSBpZ25vcmVkLgorCisnR0lUX05PVEVTX1JFV1JJVEVfTU9ERSc6OgorCVdoZW4gY29weWluZyBub3RlcyBkdXJpbmcgYSByZXdyaXRlLCB3aGF0IHRvIGRvIGlmIHRoZSB0YXJnZXQKKwljb21taXQgYWxyZWFkeSBoYXMgYSBub3RlLgorCU11c3QgYmUgb25lIG9mIGBvdmVyd3JpdGVgLCBgY29uY2F0ZW5hdGVgLCBhbmQgYGlnbm9yZWAuCisJVGhpcyBvdmVycmlkZXMgdGhlIGBjb3JlLnJld3JpdGVNb2RlYCBzZXR0aW5nLgorCisnR0lUX05PVEVTX1JFV1JJVEVfUkVGJzo6CisJV2hlbiByZXdyaXRpbmcgY29tbWl0cywgd2hpY2ggbm90ZXMgdG8gY29weSBmcm9tIHRoZSBvcmlnaW5hbAorCXRvIHRoZSByZXdyaXR0ZW4gY29tbWl0LiAgTXVzdCBiZSBhIGNvbG9uLWRlbGltaXRlZCBsaXN0IG9mCisJcmVmcyBvciBnbG9icy4KKysKK0lmIG5vdCBzZXQgaW4gdGhlIGVudmlyb25tZW50LCB0aGUgbGlzdCBvZiBub3RlcyB0byBjb3B5IGRlcGVuZHMKK29uIHRoZSBgbm90ZXMucmV3cml0ZS48Y29tbWFuZD5gIGFuZCBgbm90ZXMucmV3cml0ZVJlZmAgc2V0dGluZ3MuCisKKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgSm9oYW5uZXMgU2NoaW5kZWxpbiA8am9oYW5uZXMuc2NoaW5kZWxpbkBnbXguZGU+IGFuZAorSm9oYW4gSGVybGFuZCA8am9oYW5AaGVybGFuZC5uZXQ+CisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KK0RvY3VtZW50YXRpb24gYnkgSm9oYW5uZXMgU2NoaW5kZWxpbiBhbmQgSm9oYW4gSGVybGFuZAorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXA0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZmNjIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcDQudHh0CkBAIC0wLDAgKzEsNTU1IEBACitnaXQtcDQoMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcDQgLSBJbXBvcnQgZnJvbSBhbmQgc3VibWl0IHRvIFBlcmZvcmNlIHJlcG9zaXRvcmllcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwNCBjbG9uZScgWzxzeW5jIG9wdGlvbnM+XSBbPGNsb25lIG9wdGlvbnM+XSA8cDQgZGVwb3QgcGF0aD4uLi4KKydnaXQgcDQgc3luYycgWzxzeW5jIG9wdGlvbnM+XSBbPHA0IGRlcG90IHBhdGg+Li4uXQorJ2dpdCBwNCByZWJhc2UnCisnZ2l0IHA0IHN1Ym1pdCcgWzxzdWJtaXQgb3B0aW9ucz5dIFs8bWFzdGVyIGJyYW5jaCBuYW1lPl0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCBwcm92aWRlcyBhIHdheSB0byBpbnRlcmFjdCB3aXRoIHA0IHJlcG9zaXRvcmllcwordXNpbmcgZ2l0LgorCitDcmVhdGUgYSBuZXcgZ2l0IHJlcG9zaXRvcnkgZnJvbSBhbiBleGlzdGluZyBwNCByZXBvc2l0b3J5IHVzaW5nCisnZ2l0IHA0IGNsb25lJywgZ2l2aW5nIGl0IG9uZSBvciBtb3JlIHA0IGRlcG90IHBhdGhzLiAgSW5jb3Jwb3JhdGUKK25ldyBjb21taXRzIGZyb20gcDQgY2hhbmdlcyB3aXRoICdnaXQgcDQgc3luYycuICBUaGUgJ3N5bmMnIGNvbW1hbmQKK2lzIGFsc28gdXNlZCB0byBpbmNsdWRlIG5ldyBicmFuY2hlcyBmcm9tIG90aGVyIHA0IGRlcG90IHBhdGhzLgorU3VibWl0IGdpdCBjaGFuZ2VzIGJhY2sgdG8gcDQgdXNpbmcgJ2dpdCBwNCBzdWJtaXQnLiAgVGhlIGNvbW1hbmQKKydnaXQgcDQgcmViYXNlJyBkb2VzIGEgc3luYyBwbHVzIHJlYmFzZXMgdGhlIGN1cnJlbnQgYnJhbmNoIG9udG8KK3RoZSB1cGRhdGVkIHA0IHJlbW90ZSBicmFuY2guCisKKworRVhBTVBMRQorLS0tLS0tLQorKiBDbG9uZSBhIHJlcG9zaXRvcnk6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IGNsb25lIC8vZGVwb3QvcGF0aC9wcm9qZWN0CistLS0tLS0tLS0tLS0KKworKiBEbyBzb21lIHdvcmsgaW4gdGhlIG5ld2x5IGNyZWF0ZWQgZ2l0IHJlcG9zaXRvcnk6CisrCistLS0tLS0tLS0tLS0KKyQgY2QgcHJvamVjdAorJCB2aSBmb28uaAorJCBnaXQgY29tbWl0IC1hIC1tICJlZGl0ZWQgZm9vLmgiCistLS0tLS0tLS0tLS0KKworKiBVcGRhdGUgdGhlIGdpdCByZXBvc2l0b3J5IHdpdGggcmVjZW50IGNoYW5nZXMgZnJvbSBwNCwgcmViYXNpbmcgeW91cgorICB3b3JrIG9uIHRvcDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcDQgcmViYXNlCistLS0tLS0tLS0tLS0KKworKiBTdWJtaXQgeW91ciBjb21taXRzIGJhY2sgdG8gcDQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IHN1Ym1pdAorLS0tLS0tLS0tLS0tCisKKworQ09NTUFORFMKKy0tLS0tLS0tCisKK0Nsb25lCit+fn5+fgorR2VuZXJhbGx5LCAnZ2l0IHA0IGNsb25lJyBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBnaXQgZGlyZWN0b3J5Citmcm9tIGFuIGV4aXN0aW5nIHA0IHJlcG9zaXRvcnk6CistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IGNsb25lIC8vZGVwb3QvcGF0aC9wcm9qZWN0CistLS0tLS0tLS0tLS0KK1RoaXM6CisKKzEuICAgQ3JlYXRlcyBhbiBlbXB0eSBnaXQgcmVwb3NpdG9yeSBpbiBhIHN1YmRpcmVjdG9yeSBjYWxsZWQgJ3Byb2plY3QnLgorKworMi4gICBJbXBvcnRzIHRoZSBmdWxsIGNvbnRlbnRzIG9mIHRoZSBoZWFkIHJldmlzaW9uIGZyb20gdGhlIGdpdmVuIHA0CitkZXBvdCBwYXRoIGludG8gYSBzaW5nbGUgY29tbWl0IGluIHRoZSBnaXQgYnJhbmNoICdyZWZzL3JlbW90ZXMvcDQvbWFzdGVyJy4KKysKKzMuICAgQ3JlYXRlcyBhIGxvY2FsIGJyYW5jaCwgJ21hc3RlcicgZnJvbSB0aGlzIHJlbW90ZSBhbmQgY2hlY2tzIGl0IG91dC4KKworVG8gcmVwcm9kdWNlIHRoZSBlbnRpcmUgcDQgaGlzdG9yeSBpbiBnaXQsIHVzZSB0aGUgJ0BhbGwnIG1vZGlmaWVyIG9uCit0aGUgZGVwb3QgcGF0aDoKKy0tLS0tLS0tLS0tLQorJCBnaXQgcDQgY2xvbmUgLy9kZXBvdC9wYXRoL3Byb2plY3RAYWxsCistLS0tLS0tLS0tLS0KKworCitTeW5jCit+fn5+CitBcyBkZXZlbG9wbWVudCBjb250aW51ZXMgaW4gdGhlIHA0IHJlcG9zaXRvcnksIHRob3NlIGNoYW5nZXMgY2FuCitiZSBpbmNsdWRlZCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkgdXNpbmc6CistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IHN5bmMKKy0tLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIGZpbmRzIG5ldyBjaGFuZ2VzIGluIHA0IGFuZCBpbXBvcnRzIHRoZW0gYXMgZ2l0IGNvbW1pdHMuCisKK1A0IHJlcG9zaXRvcmllcyBjYW4gYmUgYWRkZWQgdG8gYW4gZXhpc3RpbmcgZ2l0IHJlcG9zaXRvcnkgdXNpbmcKKydnaXQgcDQgc3luYycgdG9vOgorLS0tLS0tLS0tLS0tCiskIG1rZGlyIHJlcG8tZ2l0CiskIGNkIHJlcG8tZ2l0CiskIGdpdCBpbml0CiskIGdpdCBwNCBzeW5jIC8vcGF0aC9pbi95b3VyL3BlcmZvcmNlL2RlcG90CistLS0tLS0tLS0tLS0KK1RoaXMgaW1wb3J0cyB0aGUgc3BlY2lmaWVkIGRlcG90IGludG8KKydyZWZzL3JlbW90ZXMvcDQvbWFzdGVyJyBpbiBhbiBleGlzdGluZyBnaXQgcmVwb3NpdG9yeS4gIFRoZQorJy0tYnJhbmNoJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBicmFuY2ggdG8KK2JlIHVzZWQgZm9yIHRoZSBwNCBjb250ZW50LgorCitJZiBhIGdpdCByZXBvc2l0b3J5IGluY2x1ZGVzIGJyYW5jaGVzICdyZWZzL3JlbW90ZXMvb3JpZ2luL3A0JywgdGhlc2UKK3dpbGwgYmUgZmV0Y2hlZCBhbmQgY29uc3VsdGVkIGZpcnN0IGR1cmluZyBhICdnaXQgcDQgc3luYycuICBTaW5jZQoraW1wb3J0aW5nIGRpcmVjdGx5IGZyb20gcDQgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIHB1bGxpbmcgY2hhbmdlcworZnJvbSBhIGdpdCByZW1vdGUsIHRoaXMgY2FuIGJlIHVzZWZ1bCBpbiBhIG11bHRpLWRldmVsb3BlciBlbnZpcm9ubWVudC4KKworCitSZWJhc2UKK35+fn5+fgorQSBjb21tb24gd29ya2luZyBwYXR0ZXJuIGlzIHRvIGZldGNoIHRoZSBsYXRlc3QgY2hhbmdlcyBmcm9tIHRoZSBwNCBkZXBvdAorYW5kIG1lcmdlIHRoZW0gd2l0aCBsb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLiAgT2Z0ZW4sIHRoZSBwNCByZXBvc2l0b3J5CitpcyB0aGUgdWx0aW1hdGUgbG9jYXRpb24gZm9yIGFsbCBjb2RlLCB0aHVzIGEgcmViYXNlIHdvcmtmbG93IG1ha2VzCitzZW5zZS4gIFRoaXMgY29tbWFuZCBkb2VzICdnaXQgcDQgc3luYycgZm9sbG93ZWQgYnkgJ2dpdCByZWJhc2UnIHRvIG1vdmUKK2xvY2FsIGNvbW1pdHMgb24gdG9wIG9mIHVwZGF0ZWQgcDQgY2hhbmdlcy4KKy0tLS0tLS0tLS0tLQorJCBnaXQgcDQgcmViYXNlCistLS0tLS0tLS0tLS0KKworCitTdWJtaXQKK35+fn5+fgorU3VibWl0dGluZyBjaGFuZ2VzIGZyb20gYSBnaXQgcmVwb3NpdG9yeSBiYWNrIHRvIHRoZSBwNCByZXBvc2l0b3J5CityZXF1aXJlcyBhIHNlcGFyYXRlIHA0IGNsaWVudCB3b3Jrc3BhY2UuICBUaGlzIHNob3VsZCBiZSBzcGVjaWZpZWQKK3VzaW5nIHRoZSAnUDRDTElFTlQnIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIHRoZSBnaXQgY29uZmlndXJhdGlvbgordmFyaWFibGUgJ2dpdC1wNC5jbGllbnQnLiAgVGhlIHA0IGNsaWVudCBtdXN0IGV4aXN0LCBidXQgdGhlIGNsaWVudCByb290Cit3aWxsIGJlIGNyZWF0ZWQgYW5kIHBvcHVsYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorCitUbyBzdWJtaXQgYWxsIGNoYW5nZXMgdGhhdCBhcmUgaW4gdGhlIGN1cnJlbnQgZ2l0IGJyYW5jaCBidXQgbm90IGluCit0aGUgJ3A0L21hc3RlcicgYnJhbmNoLCB1c2U6CistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IHN1Ym1pdAorLS0tLS0tLS0tLS0tCisKK1RvIHNwZWNpZnkgYSBicmFuY2ggb3RoZXIgdGhhbiB0aGUgY3VycmVudCBvbmUsIHVzZToKKy0tLS0tLS0tLS0tLQorJCBnaXQgcDQgc3VibWl0IHRvcGljYnJhbmNoCistLS0tLS0tLS0tLS0KKworVGhlIHVwc3RyZWFtIHJlZmVyZW5jZSBpcyBnZW5lcmFsbHkgJ3JlZnMvcmVtb3Rlcy9wNC9tYXN0ZXInLCBidXQgY2FuCitiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSAnLS1vcmlnaW49JyBjb21tYW5kLWxpbmUgb3B0aW9uLgorCitUaGUgcDQgY2hhbmdlcyB3aWxsIGJlIGNyZWF0ZWQgYXMgdGhlIHVzZXIgaW52b2tpbmcgJ2dpdCBwNCBzdWJtaXQnLiBUaGUKKyctLXByZXNlcnZlLXVzZXInIG9wdGlvbiB3aWxsIGNhdXNlIG93bmVyc2hpcCB0byBiZSBtb2RpZmllZAorYWNjb3JkaW5nIHRvIHRoZSBhdXRob3Igb2YgdGhlIGdpdCBjb21taXQuICBUaGlzIG9wdGlvbiByZXF1aXJlcyBhZG1pbgorcHJpdmlsZWdlcyBpbiBwNCwgd2hpY2ggY2FuIGJlIGdyYW50ZWQgdXNpbmcgJ3A0IHByb3RlY3QnLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworR2VuZXJhbCBvcHRpb25zCit+fn5+fn5+fn5+fn5+fn4KK0FsbCBjb21tYW5kcyBleGNlcHQgY2xvbmUgYWNjZXB0IHRoZXNlIG9wdGlvbnMuCisKKy0tZ2l0LWRpciA8ZGlyPjo6CisJU2V0IHRoZSAnR0lUX0RJUicgZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgbGlua2dpdDpnaXRbMV0uCisKKy0tdmVyYm9zZSwgLXY6OgorCVByb3ZpZGUgbW9yZSBwcm9ncmVzcyBpbmZvcm1hdGlvbi4KKworU3luYyBvcHRpb25zCit+fn5+fn5+fn5+fn4KK1RoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgaW4gdGhlIGluaXRpYWwgJ2Nsb25lJyBhcyB3ZWxsIGFzIGluCitzdWJzZXF1ZW50ICdzeW5jJyBvcGVyYXRpb25zLgorCistLWJyYW5jaCA8YnJhbmNoPjo6CisJSW1wb3J0IGNoYW5nZXMgaW50byBnaXZlbiBicmFuY2guICBJZiB0aGUgYnJhbmNoIHN0YXJ0cyB3aXRoCisJJ3JlZnMvJywgaXQgd2lsbCBiZSB1c2VkIGFzIGlzLCBvdGhlcndpc2UgdGhlIHBhdGggJ3JlZnMvaGVhZHMvJworCXdpbGwgYmUgcHJlcGVuZGVkLiAgVGhlIGRlZmF1bHQgYnJhbmNoIGlzICdtYXN0ZXInLiAgSWYgdXNlZAorCXdpdGggYW4gaW5pdGlhbCBjbG9uZSwgbm8gSEVBRCB3aWxsIGJlIGNoZWNrZWQgb3V0LgorKworVGhpcyBleGFtcGxlIGltcG9ydHMgYSBuZXcgcmVtb3RlICJwNC9wcm9qMiIgaW50byBhbiBleGlzdGluZworZ2l0IHJlcG9zaXRvcnk6CisrCistLS0tCisgICAgJCBnaXQgaW5pdAorICAgICQgZ2l0IHA0IHN5bmMgLS1icmFuY2g9cmVmcy9yZW1vdGVzL3A0L3Byb2oyIC8vZGVwb3QvcHJvajIKKy0tLS0KKworLS1kZXRlY3QtYnJhbmNoZXM6OgorCVVzZSB0aGUgYnJhbmNoIGRldGVjdGlvbiBhbGdvcml0aG0gdG8gZmluZCBuZXcgcGF0aHMgaW4gcDQuICBJdCBpcworCWRvY3VtZW50ZWQgYmVsb3cgaW4gIkJSQU5DSCBERVRFQ1RJT04iLgorCistLWNoYW5nZXNmaWxlIDxmaWxlPjo6CisJSW1wb3J0IGV4YWN0bHkgdGhlIHA0IGNoYW5nZSBudW1iZXJzIGxpc3RlZCBpbiAnZmlsZScsIG9uZSBwZXIKKwlsaW5lLiAgTm9ybWFsbHksICdnaXQgcDQnIGluc3BlY3RzIHRoZSBjdXJyZW50IHA0IHJlcG9zaXRvcnkKKwlzdGF0ZSBhbmQgZGV0ZWN0cyB0aGUgY2hhbmdlcyBpdCBzaG91bGQgaW1wb3J0LgorCistLXNpbGVudDo6CisJRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbi4KKworLS1kZXRlY3QtbGFiZWxzOjoKKwlRdWVyeSBwNCBmb3IgbGFiZWxzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVwb3QgcGF0aHMsIGFuZCBhZGQKKwl0aGVtIGFzIHRhZ3MgaW4gZ2l0LiBMaW1pdGVkIHVzZWZ1bG5lc3MgYXMgb25seSBpbXBvcnRzIGxhYmVscworCWFzc29jaWF0ZWQgd2l0aCBuZXcgY2hhbmdlbGlzdHMuIERlcHJlY2F0ZWQuCisKKy0taW1wb3J0LWxhYmVsczo6CisJSW1wb3J0IGxhYmVscyBmcm9tIHA0IGludG8gZ2l0LgorCistLWltcG9ydC1sb2NhbDo6CisJQnkgZGVmYXVsdCwgcDQgYnJhbmNoZXMgYXJlIHN0b3JlZCBpbiAncmVmcy9yZW1vdGVzL3A0LycsCisJd2hlcmUgdGhleSB3aWxsIGJlIHRyZWF0ZWQgYXMgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGJ5CisJbGlua2dpdDpnaXQtYnJhbmNoWzFdIGFuZCBvdGhlciBjb21tYW5kcy4gIFRoaXMgb3B0aW9uIGluc3RlYWQKKwlwdXRzIHA0IGJyYW5jaGVzIGluICdyZWZzL2hlYWRzL3A0LycuICBOb3RlIHRoYXQgZnV0dXJlCisJc3luYyBvcGVyYXRpb25zIG11c3Qgc3BlY2lmeSAnLS1pbXBvcnQtbG9jYWwnIGFzIHdlbGwgc28gdGhhdAorCXRoZXkgY2FuIGZpbmQgdGhlIHA0IGJyYW5jaGVzIGluIHJlZnMvaGVhZHMuCisKKy0tbWF4LWNoYW5nZXMgPG4+OjoKKwlMaW1pdCB0aGUgbnVtYmVyIG9mIGltcG9ydGVkIGNoYW5nZXMgdG8gJ24nLiAgVXNlZnVsIHRvCisJbGltaXQgdGhlIGFtb3VudCBvZiBoaXN0b3J5IHdoZW4gdXNpbmcgdGhlICdAYWxsJyBwNCByZXZpc2lvbgorCXNwZWNpZmllci4KKworLS1rZWVwLXBhdGg6OgorCVRoZSBtYXBwaW5nIG9mIGZpbGUgbmFtZXMgZnJvbSB0aGUgcDQgZGVwb3QgcGF0aCB0byBnaXQsIGJ5CisJZGVmYXVsdCwgaW52b2x2ZXMgcmVtb3ZpbmcgdGhlIGVudGlyZSBkZXBvdCBwYXRoLiAgV2l0aCB0aGlzCisJb3B0aW9uLCB0aGUgZnVsbCBwNCBkZXBvdCBwYXRoIGlzIHJldGFpbmVkIGluIGdpdC4gIEZvciBleGFtcGxlLAorCXBhdGggJy8vZGVwb3QvbWFpbi9mb28vYmFyLmMnLCB3aGVuIGltcG9ydGVkIGZyb20KKwknLy9kZXBvdC9tYWluLycsIGJlY29tZXMgJ2Zvby9iYXIuYycuICBXaXRoICctLWtlZXAtcGF0aCcsIHRoZQorCWdpdCBwYXRoIGlzIGluc3RlYWQgJ2RlcG90L21haW4vZm9vL2Jhci5jJy4KKworLS11c2UtY2xpZW50LXNwZWM6OgorCVVzZSBhIGNsaWVudCBzcGVjIHRvIGZpbmQgdGhlIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZmlsZXMgaW4gcDQuCisJU2VlIHRoZSAiQ0xJRU5UIFNQRUMiIHNlY3Rpb24gYmVsb3cuCisKK0Nsb25lIG9wdGlvbnMKK35+fn5+fn5+fn5+fn4KK1RoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgaW4gYW4gaW5pdGlhbCAnY2xvbmUnLCBhbG9uZyB3aXRoIHRoZSAnc3luYycKK29wdGlvbnMgZGVzY3JpYmVkIGFib3ZlLgorCistLWRlc3RpbmF0aW9uIDxkaXJlY3Rvcnk+OjoKKwlXaGVyZSB0byBjcmVhdGUgdGhlIGdpdCByZXBvc2l0b3J5LiAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbGFzdAorCWNvbXBvbmVudCBpbiB0aGUgcDQgZGVwb3QgcGF0aCBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldworCWRpcmVjdG9yeS4KKworLS1iYXJlOjoKKwlQZXJmb3JtIGEgYmFyZSBjbG9uZS4gIFNlZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXS4KKworLS8gPHBhdGg+OjoKKwlFeGNsdWRlIHNlbGVjdGVkIGRlcG90IHBhdGhzIHdoZW4gY2xvbmluZy4KKworU3VibWl0IG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+CitUaGVzZSBvcHRpb25zIGNhbiBiZSB1c2VkIHRvIG1vZGlmeSAnZ2l0IHA0IHN1Ym1pdCcgYmVoYXZpb3IuCisKKy0tb3JpZ2luIDxjb21taXQ+OjoKKwlVcHN0cmVhbSBsb2NhdGlvbiBmcm9tIHdoaWNoIGNvbW1pdHMgYXJlIGlkZW50aWZpZWQgdG8gc3VibWl0IHRvCisJcDQuICBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSBtb3N0IHJlY2VudCBwNCBjb21taXQgcmVhY2hhYmxlCisJZnJvbSAnSEVBRCcuCisKKy1NOjoKKwlEZXRlY3QgcmVuYW1lcy4gIFNlZSBsaW5rZ2l0OmdpdC1kaWZmWzFdLiAgUmVuYW1lcyB3aWxsIGJlCisJcmVwcmVzZW50ZWQgaW4gcDQgdXNpbmcgZXhwbGljaXQgJ21vdmUnIG9wZXJhdGlvbnMuICBUaGVyZQorCWlzIG5vIGNvcnJlc3BvbmRpbmcgb3B0aW9uIHRvIGRldGVjdCBjb3BpZXMsIGJ1dCB0aGVyZSBhcmUKKwl2YXJpYWJsZXMgZm9yIGJvdGggbW92ZXMgYW5kIGNvcGllcy4KKworLS1wcmVzZXJ2ZS11c2VyOjoKKwlSZS1hdXRob3IgcDQgY2hhbmdlcyBiZWZvcmUgc3VibWl0dGluZyB0byBwNC4gIFRoaXMgb3B0aW9uCisJcmVxdWlyZXMgcDQgYWRtaW4gcHJpdmlsZWdlcy4KKworLS1leHBvcnQtbGFiZWxzOjoKKwlFeHBvcnQgdGFncyBmcm9tIGdpdCBhcyBwNCBsYWJlbHMuIFRhZ3MgZm91bmQgaW4gZ2l0IGFyZSBhcHBsaWVkCisJdG8gdGhlIHBlcmZvcmNlIHdvcmtpbmcgZGlyZWN0b3J5LgorCistLWRyeS1ydW4sIC1uOjoKKwlTaG93IGp1c3Qgd2hhdCBjb21taXRzIHdvdWxkIGJlIHN1Ym1pdHRlZCB0byBwNDsgZG8gbm90IGNoYW5nZQorCXN0YXRlIGluIGdpdCBvciBwNC4KKworLS1wcmVwYXJlLXA0LW9ubHk6OgorCUFwcGx5IGEgY29tbWl0IHRvIHRoZSBwNCB3b3Jrc3BhY2UsIG9wZW5pbmcsIGFkZGluZyBhbmQgZGVsZXRpbmcKKwlmaWxlcyBpbiBwNCBhcyBmb3IgYSBub3JtYWwgc3VibWl0IG9wZXJhdGlvbi4gIERvIG5vdCBpc3N1ZSB0aGUKKwlmaW5hbCAicDQgc3VibWl0IiwgYnV0IGluc3RlYWQgcHJpbnQgYSBtZXNzYWdlIGFib3V0IGhvdyB0bworCXN1Ym1pdCBtYW51YWxseSBvciByZXZlcnQuICBUaGlzIG9wdGlvbiBhbHdheXMgc3RvcHMgYWZ0ZXIgdGhlCisJZmlyc3QgKG9sZGVzdCkgY29tbWl0LiAgR2l0IHRhZ3MgYXJlIG5vdCBleHBvcnRlZCB0byBwNC4KKworLS1jb25mbGljdD0oYXNrfHNraXB8cXVpdCk6OgorCUNvbmZsaWN0cyBjYW4gb2NjdXIgd2hlbiBhcHBseWluZyBhIGNvbW1pdCB0byBwNC4gIFdoZW4gdGhpcworCWhhcHBlbnMsIHRoZSBkZWZhdWx0IGJlaGF2aW9yICgiYXNrIikgaXMgdG8gcHJvbXB0IHdoZXRoZXIgdG8KKwlza2lwIHRoaXMgY29tbWl0IGFuZCBjb250aW51ZSwgb3IgcXVpdC4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkCisJdG8gYnlwYXNzIHRoZSBwcm9tcHQsIGNhdXNpbmcgY29uZmxpY3RpbmcgY29tbWl0cyB0byBiZSBhdXRvbWF0aWNhbGx5CisJc2tpcHBlZCwgb3IgdG8gcXVpdCB0cnlpbmcgdG8gYXBwbHkgY29tbWl0cywgd2l0aG91dCBwcm9tcHRpbmcuCisKK1JlYmFzZSBvcHRpb25zCit+fn5+fn5+fn5+fn5+fgorVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZCB0byBtb2RpZnkgJ2dpdCBwNCByZWJhc2UnIGJlaGF2aW9yLgorCistLWltcG9ydC1sYWJlbHM6OgorCUltcG9ydCBwNCBsYWJlbHMuCisKK0RFUE9UIFBBVEggU1lOVEFYCistLS0tLS0tLS0tLS0tLS0tLQorVGhlIHA0IGRlcG90IHBhdGggYXJndW1lbnQgdG8gJ2dpdCBwNCBzeW5jJyBhbmQgJ2dpdCBwNCBjbG9uZScgY2FuCitiZSBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgcDQgZGVwb3QgcGF0aHMsIHdpdGggYW4gb3B0aW9uYWwKK3A0IHJldmlzaW9uIHNwZWNpZmllciBvbiB0aGUgZW5kOgorCisiLy9kZXBvdC9teS9wcm9qZWN0Ijo6CisgICAgSW1wb3J0IG9uZSBjb21taXQgd2l0aCBhbGwgZmlsZXMgaW4gdGhlICcjaGVhZCcgY2hhbmdlIHVuZGVyIHRoYXQgdHJlZS4KKworIi8vZGVwb3QvbXkvcHJvamVjdEBhbGwiOjoKKyAgICBJbXBvcnQgb25lIGNvbW1pdCBmb3IgZWFjaCBjaGFuZ2UgaW4gdGhlIGhpc3Rvcnkgb2YgdGhhdCBkZXBvdCBwYXRoLgorCisiLy9kZXBvdC9teS9wcm9qZWN0QDEsNiI6OgorICAgIEltcG9ydCBvbmx5IGNoYW5nZXMgMSB0aHJvdWdoIDYuCisKKyIvL2RlcG90L3Byb2oxQGFsbCAvL2RlcG90L3Byb2oyQGFsbCI6OgorICAgIEltcG9ydCBhbGwgY2hhbmdlcyBmcm9tIGJvdGggbmFtZWQgZGVwb3QgcGF0aHMgaW50byBhIHNpbmdsZQorICAgIHJlcG9zaXRvcnkuICBPbmx5IGZpbGVzIGJlbG93IHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBpbmNsdWRlZC4KKyAgICBUaGVyZSBpcyBub3QgYSBzdWJkaXJlY3RvcnkgaW4gZ2l0IGZvciBlYWNoICJwcm9qMSIgYW5kICJwcm9qMiIuCisgICAgWW91IG11c3QgdXNlIHRoZSAnLS1kZXN0aW5hdGlvbicgb3B0aW9uIHdoZW4gc3BlY2lmeWluZyBtb3JlCisgICAgdGhhbiBvbmUgZGVwb3QgcGF0aC4gIFRoZSByZXZpc2lvbiBzcGVjaWZpZXIgbXVzdCBiZSBzcGVjaWZpZWQKKyAgICBpZGVudGljYWxseSBvbiBlYWNoIGRlcG90IHBhdGguICBJZiB0aGVyZSBhcmUgZmlsZXMgaW4gdGhlCisgICAgZGVwb3QgcGF0aHMgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGUgcGF0aCB3aXRoIHRoZSBtb3N0IHJlY2VudGx5CisgICAgdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIHRoZSBvbmUgdGhhdCBhcHBlYXJzIGluIGdpdC4KKworU2VlICdwNCBoZWxwIHJldmlzaW9ucycgZm9yIHRoZSBmdWxsIHN5bnRheCBvZiBwNCByZXZpc2lvbiBzcGVjaWZpZXJzLgorCisKK0NMSUVOVCBTUEVDCistLS0tLS0tLS0tLQorVGhlIHA0IGNsaWVudCBzcGVjaWZpY2F0aW9uIGlzIG1haW50YWluZWQgd2l0aCB0aGUgJ3A0IGNsaWVudCcgY29tbWFuZAorYW5kIGNvbnRhaW5zIGFtb25nIG90aGVyIGZpZWxkcywgYSBWaWV3IHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgZGVwb3QKK2lzIG1hcHBlZCBpbnRvIHRoZSBjbGllbnQgcmVwb3NpdG9yeS4gIFRoZSAnY2xvbmUnIGFuZCAnc3luYycgY29tbWFuZHMKK2NhbiBjb25zdWx0IHRoZSBjbGllbnQgc3BlYyB3aGVuIGdpdmVuIHRoZSAnLS11c2UtY2xpZW50LXNwZWMnIG9wdGlvbiBvcgord2hlbiB0aGUgdXNlQ2xpZW50U3BlYyB2YXJpYWJsZSBpcyB0cnVlLiAgQWZ0ZXIgJ2dpdCBwNCBjbG9uZScsIHRoZQordXNlQ2xpZW50U3BlYyB2YXJpYWJsZSBpcyBhdXRvbWF0aWNhbGx5IHNldCBpbiB0aGUgcmVwb3NpdG9yeQorY29uZmlndXJhdGlvbiBmaWxlLiAgVGhpcyBhbGxvd3MgZnV0dXJlICdnaXQgcDQgc3VibWl0JyBjb21tYW5kcyB0bword29yayBwcm9wZXJseTsgdGhlIHN1Ym1pdCBjb21tYW5kIGxvb2tzIG9ubHkgYXQgdGhlIHZhcmlhYmxlIGFuZCBkb2VzCitub3QgaGF2ZSBhIGNvbW1hbmQtbGluZSBvcHRpb24uCisKK1RoZSBmdWxsIHN5bnRheCBmb3IgYSBwNCB2aWV3IGlzIGRvY3VtZW50ZWQgaW4gJ3A0IGhlbHAgdmlld3MnLiAgJ0dpdCBwNCcKK2tub3dzIG9ubHkgYSBzdWJzZXQgb2YgdGhlIHZpZXcgc3ludGF4LiAgSXQgdW5kZXJzdGFuZHMgbXVsdGktbGluZQorbWFwcGluZ3MsIG92ZXJsYXlzIHdpdGggJysnLCBleGNsdXNpb25zIHdpdGggJy0nIGFuZCBkb3VibGUtcXVvdGVzCithcm91bmQgd2hpdGVzcGFjZS4gIE9mIHRoZSBwb3NzaWJsZSB3aWxkY2FyZHMsICdnaXQgcDQnIG9ubHkgaGFuZGxlcworJy4uLicsIGFuZCBvbmx5IHdoZW4gaXQgaXMgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aC4gICdHaXQgcDQnIHdpbGwgY29tcGxhaW4KK2lmIGl0IGVuY291bnRlcnMgYW4gdW5oYW5kbGVkIHdpbGRjYXJkLgorCitCdWdzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBvdmVybGFwIG1hcHBpbmdzIGV4aXN0LiAgSWYgbXVsdGlwbGUgZGVwb3QKK3BhdGhzIG1hcCB0aHJvdWdoIG92ZXJsYXlzIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGluIHRoZSByZXBvc2l0b3J5LAorJ2dpdCBwNCcgY2FuIGNob29zZSB0aGUgd3Jvbmcgb25lLiAgVGhpcyBpcyBoYXJkIHRvIHNvbHZlIHdpdGhvdXQKK2RlZGljYXRpbmcgYSBjbGllbnQgc3BlYyBqdXN0IGZvciAnZ2l0IHA0Jy4KKworVGhlIG5hbWUgb2YgdGhlIGNsaWVudCBjYW4gYmUgZ2l2ZW4gdG8gJ2dpdCBwNCcgaW4gbXVsdGlwbGUgd2F5cy4gIFRoZQordmFyaWFibGUgJ2dpdC1wNC5jbGllbnQnIHRha2VzIHByZWNlZGVuY2UgaWYgaXQgZXhpc3RzLiAgT3RoZXJ3aXNlLAorbm9ybWFsIHA0IG1lY2hhbmlzbXMgb2YgZGV0ZXJtaW5pbmcgdGhlIGNsaWVudCBhcmUgdXNlZDogIGVudmlyb25tZW50Cit2YXJpYWJsZSBQNENMSUVOVCwgYSBmaWxlIHJlZmVyZW5jZWQgYnkgUDRDT05GSUcsIG9yIHRoZSBsb2NhbCBob3N0IG5hbWUuCisKKworQlJBTkNIIERFVEVDVElPTgorLS0tLS0tLS0tLS0tLS0tLQorUDQgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBjb25jZXB0IG9mIGEgYnJhbmNoIGFzIGdpdC4gIEluc3RlYWQsCitwNCBvcmdhbml6ZXMgaXRzIGNvbnRlbnQgYXMgYSBkaXJlY3RvcnkgdHJlZSwgd2hlcmUgYnkgY29udmVudGlvbgorZGlmZmVyZW50IGxvZ2ljYWwgYnJhbmNoZXMgYXJlIGluIGRpZmZlcmVudCBsb2NhdGlvbnMgaW4gdGhlIHRyZWUuCitUaGUgJ3A0IGJyYW5jaCcgY29tbWFuZCBpcyB1c2VkIHRvIG1haW50YWluIG1hcHBpbmdzIGJldHdlZW4KK2RpZmZlcmVudCBhcmVhcyBpbiB0aGUgdHJlZSwgYW5kIGluZGljYXRlIHJlbGF0ZWQgY29udGVudC4gICdnaXQgcDQnCitjYW4gdXNlIHRoZXNlIG1hcHBpbmdzIHRvIGRldGVybWluZSBicmFuY2ggcmVsYXRpb25zaGlwcy4KKworSWYgeW91IGhhdmUgYSByZXBvc2l0b3J5IHdoZXJlIGFsbCB0aGUgYnJhbmNoZXMgb2YgaW50ZXJlc3QgZXhpc3QgYXMKK3N1YmRpcmVjdG9yaWVzIG9mIGEgc2luZ2xlIGRlcG90IHBhdGgsIHlvdSBjYW4gdXNlICctLWRldGVjdC1icmFuY2hlcycKK3doZW4gY2xvbmluZyBvciBzeW5jaW5nIHRvIGhhdmUgJ2dpdCBwNCcgYXV0b21hdGljYWxseSBmaW5kCitzdWJkaXJlY3RvcmllcyBpbiBwNCwgYW5kIHRvIGdlbmVyYXRlIHRoZXNlIGFzIGJyYW5jaGVzIGluIGdpdC4KKworRm9yIGV4YW1wbGUsIGlmIHRoZSBQNCByZXBvc2l0b3J5IHN0cnVjdHVyZSBpczoKKy0tLS0KKy8vZGVwb3QvbWFpbi8uLi4KKy8vZGVwb3QvYnJhbmNoMS8uLi4KKy0tLS0KKworQW5kICJwNCBicmFuY2ggLW8gYnJhbmNoMSIgc2hvd3MgYSBWaWV3IGxpbmUgdGhhdCBsb29rcyBsaWtlOgorLS0tLQorLy9kZXBvdC9tYWluLy4uLiAvL2RlcG90L2JyYW5jaDEvLi4uCistLS0tCisKK1RoZW4gdGhpcyAnZ2l0IHA0IGNsb25lJyBjb21tYW5kOgorLS0tLQorZ2l0IHA0IGNsb25lIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsCistLS0tCitwcm9kdWNlcyBhIHNlcGFyYXRlIGJyYW5jaCBpbiAncmVmcy9yZW1vdGVzL3A0LycgZm9yIC8vZGVwb3QvbWFpbiwKK2NhbGxlZCAnbWFzdGVyJywgYW5kIG9uZSBmb3IgLy9kZXBvdC9icmFuY2gxIGNhbGxlZCAnZGVwb3QvYnJhbmNoMScuCisKK0hvd2V2ZXIsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY3JlYXRlIGJyYW5jaGVzIGluIHA0IHRvIGJlIGFibGUgdG8gdXNlCit0aGVtIGxpa2UgYnJhbmNoZXMuICBCZWNhdXNlIGl0IGlzIGRpZmZpY3VsdCB0byBpbmZlciBicmFuY2gKK3JlbGF0aW9uc2hpcHMgYXV0b21hdGljYWxseSwgYSBnaXQgY29uZmlndXJhdGlvbiBzZXR0aW5nCisnZ2l0LXA0LmJyYW5jaExpc3QnIGNhbiBiZSB1c2VkIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgYnJhbmNoCityZWxhdGlvbnNoaXBzLiAgSXQgaXMgYSBsaXN0IG9mICJzb3VyY2U6ZGVzdGluYXRpb24iIHBhaXJzLCBsaWtlIGEKK3NpbXBsZSBwNCBicmFuY2ggc3BlY2lmaWNhdGlvbiwgd2hlcmUgdGhlICJzb3VyY2UiIGFuZCAiZGVzdGluYXRpb24iIGFyZQordGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIHA0IHJlcG9zaXRvcnkuICBUaGUgZXhhbXBsZSBhYm92ZSByZWxpZWQgb24gdGhlCitwcmVzZW5jZSBvZiB0aGUgcDQgYnJhbmNoLiAgV2l0aG91dCBwNCBicmFuY2hlcywgdGhlIHNhbWUgcmVzdWx0IHdpbGwKK29jY3VyIHdpdGg6CistLS0tCitnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IG1haW46YnJhbmNoMQorZ2l0IHA0IGNsb25lIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsCistLS0tCisKKworUEVSRk9STUFOQ0UKKy0tLS0tLS0tLS0tCitUaGUgZmFzdC1pbXBvcnQgbWVjaGFuaXNtIHVzZWQgYnkgJ2dpdCBwNCcgY3JlYXRlcyBvbmUgcGFjayBmaWxlIGZvcgorZWFjaCBpbnZvY2F0aW9uIG9mICdnaXQgcDQgc3luYycuICBOb3JtYWxseSwgZ2l0IGdhcmJhZ2UgY29tcHJlc3Npb24KKyhsaW5rZ2l0OmdpdC1nY1sxXSkgYXV0b21hdGljYWxseSBjb21wcmVzc2VzIHRoZXNlIHRvIGZld2VyIHBhY2sgZmlsZXMsCitidXQgZXhwbGljaXQgaW52b2NhdGlvbiBvZiAnZ2l0IHJlcGFjayAtYWRmJyBtYXkgaW1wcm92ZSBwZXJmb3JtYW5jZS4KKworCitDT05GSUdVUkFUSU9OIFZBUklBQkxFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBmb2xsb3dpbmcgY29uZmlnIHNldHRpbmdzIGNhbiBiZSB1c2VkIHRvIG1vZGlmeSAnZ2l0IHA0JyBiZWhhdmlvci4KK1RoZXkgYWxsIGFyZSBpbiB0aGUgJ2dpdC1wNCcgc2VjdGlvbi4KKworR2VuZXJhbCB2YXJpYWJsZXMKK35+fn5+fn5+fn5+fn5+fn5+CitnaXQtcDQudXNlcjo6CisJVXNlciBzcGVjaWZpZWQgYXMgYW4gb3B0aW9uIHRvIGFsbCBwNCBjb21tYW5kcywgd2l0aCAnLXUgPHVzZXI+Jy4KKwlUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ1A0VVNFUicgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworZ2l0LXA0LnBhc3N3b3JkOjoKKwlQYXNzd29yZCBzcGVjaWZpZWQgYXMgYW4gb3B0aW9uIHRvIGFsbCBwNCBjb21tYW5kcywgd2l0aAorCSctUCA8cGFzc3dvcmQ+Jy4KKwlUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ1A0UEFTUycgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworZ2l0LXA0LnBvcnQ6OgorCVBvcnQgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbiB0byBhbGwgcDQgY29tbWFuZHMsIHdpdGgKKwknLXAgPHBvcnQ+Jy4KKwlUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ1A0UE9SVCcgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworZ2l0LXA0Lmhvc3Q6OgorCUhvc3Qgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbiB0byBhbGwgcDQgY29tbWFuZHMsIHdpdGgKKwknLWggPGhvc3Q+Jy4KKwlUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ1A0SE9TVCcgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworZ2l0LXA0LmNsaWVudDo6CisJQ2xpZW50IHNwZWNpZmllZCBhcyBhbiBvcHRpb24gdG8gYWxsIHA0IGNvbW1hbmRzLCB3aXRoCisJJy1jIDxjbGllbnQ+JywgaW5jbHVkaW5nIHRoZSBjbGllbnQgc3BlYy4KKworQ2xvbmUgYW5kIHN5bmMgdmFyaWFibGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK2dpdC1wNC5zeW5jRnJvbU9yaWdpbjo6CisJQmVjYXVzZSBpbXBvcnRpbmcgY29tbWl0cyBmcm9tIG90aGVyIGdpdCByZXBvc2l0b3JpZXMgaXMgbXVjaCBmYXN0ZXIKKwl0aGFuIGltcG9ydGluZyB0aGVtIGZyb20gcDQsIGEgbWVjaGFuaXNtIGV4aXN0cyB0byBmaW5kIHA0IGNoYW5nZXMKKwlmaXJzdCBpbiBnaXQgcmVtb3Rlcy4gIElmIGJyYW5jaGVzIGV4aXN0IHVuZGVyICdyZWZzL3JlbW90ZS9vcmlnaW4vcDQnLAorCXRob3NlIHdpbGwgYmUgZmV0Y2hlZCBhbmQgdXNlZCB3aGVuIHN5bmNpbmcgZnJvbSBwNC4gIFRoaXMKKwl2YXJpYWJsZSBjYW4gYmUgc2V0IHRvICdmYWxzZScgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLgorCitnaXQtcDQuYnJhbmNoVXNlcjo6CisJT25lIHBoYXNlIGluIGJyYW5jaCBkZXRlY3Rpb24gaW52b2x2ZXMgbG9va2luZyBhdCBwNCBicmFuY2hlcworCXRvIGZpbmQgbmV3IG9uZXMgdG8gaW1wb3J0LiAgQnkgZGVmYXVsdCwgYWxsIGJyYW5jaGVzIGFyZQorCWluc3BlY3RlZC4gIFRoaXMgb3B0aW9uIGxpbWl0cyB0aGUgc2VhcmNoIHRvIGp1c3QgdGhvc2Ugb3duZWQKKwlieSB0aGUgc2luZ2xlIHVzZXIgbmFtZWQgaW4gdGhlIHZhcmlhYmxlLgorCitnaXQtcDQuYnJhbmNoTGlzdDo6CisJTGlzdCBvZiBicmFuY2hlcyB0byBiZSBpbXBvcnRlZCB3aGVuIGJyYW5jaCBkZXRlY3Rpb24gaXMKKwllbmFibGVkLiAgRWFjaCBlbnRyeSBzaG91bGQgYmUgYSBwYWlyIG9mIGJyYW5jaCBuYW1lcyBzZXBhcmF0ZWQKKwlieSBhIGNvbG9uICg6KS4gIFRoaXMgZXhhbXBsZSBkZWNsYXJlcyB0aGF0IGJvdGggYnJhbmNoQSBhbmQKKwlicmFuY2hCIHdlcmUgY3JlYXRlZCBmcm9tIG1haW46CisrCistLS0tLS0tLS0tLS0tCitnaXQgY29uZmlnICAgICAgIGdpdC1wNC5icmFuY2hMaXN0IG1haW46YnJhbmNoQQorZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaEIKKy0tLS0tLS0tLS0tLS0KKworZ2l0LXA0Lmlnbm9yZWRQNExhYmVsczo6CisJTGlzdCBvZiBwNCBsYWJlbHMgdG8gaWdub3JlLiBUaGlzIGlzIGJ1aWx0IGF1dG9tYXRpY2FsbHkgYXMKKwl1bmltcG9ydGFibGUgbGFiZWxzIGFyZSBkaXNjb3ZlcmVkLgorCitnaXQtcDQuaW1wb3J0TGFiZWxzOjoKKwlJbXBvcnQgcDQgbGFiZWxzIGludG8gZ2l0LCBhcyBwZXIgLS1pbXBvcnQtbGFiZWxzLgorCitnaXQtcDQubGFiZWxJbXBvcnRSZWdleHA6OgorCU9ubHkgcDQgbGFiZWxzIG1hdGNoaW5nIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgaW1wb3J0ZWQuIFRoZQorCWRlZmF1bHQgdmFsdWUgaXMgJ1thLXpBLVowLTlfXC0uXSskJy4KKworZ2l0LXA0LnVzZUNsaWVudFNwZWM6OgorCVNwZWNpZnkgdGhhdCB0aGUgcDQgY2xpZW50IHNwZWMgc2hvdWxkIGJlIHVzZWQgdG8gaWRlbnRpZnkgcDQKKwlkZXBvdCBwYXRocyBvZiBpbnRlcmVzdC4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHRoZQorCW9wdGlvbiAnLS11c2UtY2xpZW50LXNwZWMnLiAgU2VlIHRoZSAiQ0xJRU5UIFNQRUMiIHNlY3Rpb24gYWJvdmUuCisJVGhpcyB2YXJpYWJsZSBpcyBhIGJvb2xlYW4sIG5vdCB0aGUgbmFtZSBvZiBhIHA0IGNsaWVudC4KKworU3VibWl0IHZhcmlhYmxlcworfn5+fn5+fn5+fn5+fn5+fgorZ2l0LXA0LmRldGVjdFJlbmFtZXM6OgorCURldGVjdCByZW5hbWVzLiAgU2VlIGxpbmtnaXQ6Z2l0LWRpZmZbMV0uICBUaGlzIGNhbiBiZSB0cnVlLAorCWZhbHNlLCBvciBhIHNjb3JlIGFzIGV4cGVjdGVkIGJ5ICdnaXQgZGlmZiAtTScuCisKK2dpdC1wNC5kZXRlY3RDb3BpZXM6OgorCURldGVjdCBjb3BpZXMuICBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXS4gIFRoaXMgY2FuIGJlIHRydWUsCisJZmFsc2UsIG9yIGEgc2NvcmUgYXMgZXhwZWN0ZWQgYnkgJ2dpdCBkaWZmIC1DJy4KKworZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlcjo6CisJRGV0ZWN0IGNvcGllcyBoYXJkZXIuICBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXS4gIEEgYm9vbGVhbi4KKworZ2l0LXA0LnByZXNlcnZlVXNlcjo6CisJT24gc3VibWl0LCByZS1hdXRob3IgY2hhbmdlcyB0byByZWZsZWN0IHRoZSBnaXQgYXV0aG9yLAorCXJlZ2FyZGxlc3Mgb2Ygd2hvIGludm9rZXMgJ2dpdCBwNCBzdWJtaXQnLgorCitnaXQtcDQuYWxsb3dNaXNzaW5nUDRVc2Vyczo6CisJV2hlbiAncHJlc2VydmVVc2VyJyBpcyB0cnVlLCAnZ2l0IHA0JyBub3JtYWxseSBkaWVzIGlmIGl0CisJY2Fubm90IGZpbmQgYW4gYXV0aG9yIGluIHRoZSBwNCB1c2VyIG1hcC4gIFRoaXMgc2V0dGluZworCXN1Ym1pdHMgdGhlIGNoYW5nZSByZWdhcmRsZXNzLgorCitnaXQtcDQuc2tpcFN1Ym1pdEVkaXQ6OgorCVRoZSBzdWJtaXQgcHJvY2VzcyBpbnZva2VzIHRoZSBlZGl0b3IgYmVmb3JlIGVhY2ggcDQgY2hhbmdlCisJaXMgc3VibWl0dGVkLiAgSWYgdGhpcyBzZXR0aW5nIGlzIHRydWUsIHRob3VnaCwgdGhlIGVkaXRpbmcKKwlzdGVwIGlzIHNraXBwZWQuCisKK2dpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrOjoKKwlBZnRlciBlZGl0aW5nIHRoZSBwNCBjaGFuZ2UgbWVzc2FnZSwgJ2dpdCBwNCcgbWFrZXMgc3VyZSB0aGF0CisJdGhlIGRlc2NyaXB0aW9uIHJlYWxseSB3YXMgY2hhbmdlZCBieSBsb29raW5nIGF0IHRoZSBmaWxlCisJbW9kaWZpY2F0aW9uIHRpbWUuICBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGF0IHRlc3QuCisKK2dpdC1wNC5hbGxvd1N1Ym1pdDo6CisJQnkgZGVmYXVsdCwgYW55IGJyYW5jaCBjYW4gYmUgdXNlZCBhcyB0aGUgc291cmNlIGZvciBhICdnaXQgcDQKKwlzdWJtaXQnIG9wZXJhdGlvbi4gIFRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgaWYgc2V0LCBwZXJtaXRzIG9ubHkKKwl0aGUgbmFtZWQgYnJhbmNoZXMgdG8gYmUgdXNlZCBhcyBzdWJtaXQgc291cmNlcy4gIEJyYW5jaCBuYW1lcworCW11c3QgYmUgdGhlIHNob3J0IG5hbWVzIChubyAicmVmcy9oZWFkcy8iKSwgYW5kIHNob3VsZCBiZQorCXNlcGFyYXRlZCBieSBjb21tYXMgKCIsIiksIHdpdGggbm8gc3BhY2VzLgorCitnaXQtcDQuc2tpcFVzZXJOYW1lQ2hlY2s6OgorCUlmIHRoZSB1c2VyIHJ1bm5pbmcgJ2dpdCBwNCBzdWJtaXQnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBwNAorCXVzZXIgbWFwLCAnZ2l0IHA0JyBleGl0cy4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGZvcmNlCisJc3VibWlzc2lvbiByZWdhcmRsZXNzLgorCitnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXA6OgorCUlmIGVuYWJsZWQsICdnaXQgcDQgc3VibWl0JyB3aWxsIGF0dGVtcHQgdG8gY2xlYW51cCBSQ1Mga2V5d29yZHMKKwkoJEhlYWRlciQsIGV0YykuIFRoZXNlIHdvdWxkIG90aGVyd2lzZSBjYXVzZSBtZXJnZSBjb25mbGljdHMgYW5kIHByZXZlbnQKKwl0aGUgc3VibWl0IGdvaW5nIGFoZWFkLiBUaGlzIG9wdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBleHBlcmltZW50YWwgYXQKKwlwcmVzZW50LgorCitnaXQtcDQuZXhwb3J0TGFiZWxzOjoKKwlFeHBvcnQgZ2l0IHRhZ3MgdG8gcDQgbGFiZWxzLCBhcyBwZXIgLS1leHBvcnQtbGFiZWxzLgorCitnaXQtcDQubGFiZWxFeHBvcnRSZWdleHA6OgorCU9ubHkgcDQgbGFiZWxzIG1hdGNoaW5nIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgZXhwb3J0ZWQuIFRoZQorCWRlZmF1bHQgdmFsdWUgaXMgJ1thLXpBLVowLTlfXC0uXSskJy4KKworZ2l0LXA0LmNvbmZsaWN0OjoKKwlTcGVjaWZ5IHN1Ym1pdCBiZWhhdmlvciB3aGVuIGEgY29uZmxpY3Qgd2l0aCBwNCBpcyBmb3VuZCwgYXMgcGVyCisJLS1jb25mbGljdC4gIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzICdhc2snLgorCitJTVBMRU1FTlRBVElPTiBERVRBSUxTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENoYW5nZXNldHMgZnJvbSBwNCBhcmUgaW1wb3J0ZWQgdXNpbmcgZ2l0IGZhc3QtaW1wb3J0LgorKiBDbG9uaW5nIG9yIHN5bmNpbmcgZG9lcyBub3QgcmVxdWlyZSBhIHA0IGNsaWVudDsgZmlsZSBjb250ZW50cyBhcmUKKyAgY29sbGVjdGVkIHVzaW5nICdwNCBwcmludCcuCisqIFN1Ym1pdHRpbmcgcmVxdWlyZXMgYSBwNCBjbGllbnQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgc2FtZSBsb2NhdGlvbgorICBhcyB0aGUgZ2l0IHJlcG9zaXRvcnkuICBQYXRjaGVzIGFyZSBhcHBsaWVkLCBvbmUgYXQgYSB0aW1lLCB0bworICB0aGlzIHA0IGNsaWVudCBhbmQgc3VibWl0dGVkIGZyb20gdGhlcmUuCisqIEVhY2ggY29tbWl0IGltcG9ydGVkIGJ5ICdnaXQgcDQnIGhhcyBhIGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nCisgIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGUgcDQgZGVwb3QgbG9jYXRpb24gYW5kIGNoYW5nZSBudW1iZXIuICBUaGlzCisgIGxpbmUgaXMgdXNlZCBieSBsYXRlciAnZ2l0IHA0IHN5bmMnIG9wZXJhdGlvbnMgdG8ga25vdyB3aGljaCBwNAorICBjaGFuZ2VzIGFyZSBuZXcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGM4NTUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dApAQCAtMCwwICsxLDIzNSBAQAorZ2l0LXBhY2stb2JqZWN0cygxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcGFjay1vYmplY3RzIC0gQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwYWNrLW9iamVjdHMnIFstcSB8IC0tcHJvZ3Jlc3MgfCAtLWFsbC1wcm9ncmVzc10gWy0tYWxsLXByb2dyZXNzLWltcGxpZWRdCisJWy0tbm8tcmV1c2UtZGVsdGFdIFstLWRlbHRhLWJhc2Utb2Zmc2V0XSBbLS1ub24tZW1wdHldCisJWy0tbG9jYWxdIFstLWluY3JlbWVudGFsXSBbLS13aW5kb3c9PG4+XSBbLS1kZXB0aD08bj5dCisJWy0tcmV2cyBbLS11bnBhY2tlZCB8IC0tYWxsXV0gWy0tc3Rkb3V0IHwgYmFzZS1uYW1lXQorCVstLWtlZXAtdHJ1ZS1wYXJlbnRzXSA8IG9iamVjdC1saXN0CisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBsaXN0IG9mIG9iamVjdHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIGFuZCB3cml0ZXMgYSBwYWNrZWQKK2FyY2hpdmUgd2l0aCBzcGVjaWZpZWQgYmFzZS1uYW1lLCBvciB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCitBIHBhY2tlZCBhcmNoaXZlIGlzIGFuIGVmZmljaWVudCB3YXkgdG8gdHJhbnNmZXIgYSBzZXQgb2Ygb2JqZWN0cworYmV0d2VlbiB0d28gcmVwb3NpdG9yaWVzIGFzIHdlbGwgYXMgYW4gYWNjZXNzIGVmZmljaWVudCBhcmNoaXZhbAorZm9ybWF0LiAgSW4gYSBwYWNrZWQgYXJjaGl2ZSwgYW4gb2JqZWN0IGlzIGVpdGhlciBzdG9yZWQgYXMgYQorY29tcHJlc3NlZCB3aG9sZSBvciBhcyBhIGRpZmZlcmVuY2UgZnJvbSBzb21lIG90aGVyIG9iamVjdC4KK1RoZSBsYXR0ZXIgaXMgb2Z0ZW4gY2FsbGVkIGEgZGVsdGEuCisKK1RoZSBwYWNrZWQgYXJjaGl2ZSBmb3JtYXQgKC5wYWNrKSBpcyBkZXNpZ25lZCB0byBiZSBzZWxmLWNvbnRhaW5lZAorc28gdGhhdCBpdCBjYW4gYmUgdW5wYWNrZWQgd2l0aG91dCBhbnkgZnVydGhlciBpbmZvcm1hdGlvbi4gVGhlcmVmb3JlLAorZWFjaCBvYmplY3QgdGhhdCBhIGRlbHRhIGRlcGVuZHMgdXBvbiBtdXN0IGJlIHByZXNlbnQgd2l0aGluIHRoZSBwYWNrLgorCitBIHBhY2sgaW5kZXggZmlsZSAoLmlkeCkgaXMgZ2VuZXJhdGVkIGZvciBmYXN0LCByYW5kb20gYWNjZXNzIHRvIHRoZQorb2JqZWN0cyBpbiB0aGUgcGFjay4gUGxhY2luZyBib3RoIHRoZSBpbmRleCBmaWxlICguaWR4KSBhbmQgdGhlIHBhY2tlZAorYXJjaGl2ZSAoLnBhY2spIGluIHRoZSBwYWNrLyBzdWJkaXJlY3Rvcnkgb2YgJEdJVF9PQkpFQ1RfRElSRUNUT1JZIChvcgorYW55IG9mIHRoZSBkaXJlY3RvcmllcyBvbiAkR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVMpCitlbmFibGVzIGdpdCB0byByZWFkIGZyb20gdGhlIHBhY2sgYXJjaGl2ZS4KKworVGhlICdnaXQgdW5wYWNrLW9iamVjdHMnIGNvbW1hbmQgY2FuIHJlYWQgdGhlIHBhY2tlZCBhcmNoaXZlIGFuZAorZXhwYW5kIHRoZSBvYmplY3RzIGNvbnRhaW5lZCBpbiB0aGUgcGFjayBpbnRvICJvbmUtZmlsZQorb25lLW9iamVjdCIgZm9ybWF0OyB0aGlzIGlzIHR5cGljYWxseSBkb25lIGJ5IHRoZSBzbWFydC1wdWxsCitjb21tYW5kcyB3aGVuIGEgcGFjayBpcyBjcmVhdGVkIG9uLXRoZS1mbHkgZm9yIGVmZmljaWVudCBuZXR3b3JrCit0cmFuc3BvcnQgYnkgdGhlaXIgcGVlcnMuCisKKworT1BUSU9OUworLS0tLS0tLQorYmFzZS1uYW1lOjoKKwlXcml0ZSBpbnRvIGEgcGFpciBvZiBmaWxlcyAoLnBhY2sgYW5kIC5pZHgpLCB1c2luZworCTxiYXNlLW5hbWU+IHRvIGRldGVybWluZSB0aGUgbmFtZSBvZiB0aGUgY3JlYXRlZCBmaWxlLgorCVdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgdGhlIHR3byBmaWxlcyBhcmUgd3JpdHRlbiBpbgorCTxiYXNlLW5hbWU+LTxTSEExPi57cGFjayxpZHh9IGZpbGVzLiAgPFNIQTE+IGlzIGEgaGFzaAorCW9mIHRoZSBzb3J0ZWQgb2JqZWN0IG5hbWVzIHRvIG1ha2UgdGhlIHJlc3VsdGluZyBmaWxlbmFtZQorCWJhc2VkIG9uIHRoZSBwYWNrIGNvbnRlbnQsIGFuZCB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZAorCW91dHB1dCBvZiB0aGUgY29tbWFuZC4KKworLS1zdGRvdXQ6OgorCVdyaXRlIHRoZSBwYWNrIGNvbnRlbnRzICh3aGF0IHdvdWxkIGhhdmUgYmVlbiB3cml0dGVuIHRvCisJLnBhY2sgZmlsZSkgb3V0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKKy0tcmV2czo6CisJUmVhZCB0aGUgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBpbnN0ZWFkIG9mCisJaW5kaXZpZHVhbCBvYmplY3QgbmFtZXMuICBUaGUgcmV2aXNpb24gYXJndW1lbnRzIGFyZSBwcm9jZXNzZWQKKwl0aGUgc2FtZSB3YXkgYXMgJ2dpdCByZXYtbGlzdCcgd2l0aCB0aGUgYC0tb2JqZWN0c2AgZmxhZworCXVzZXMgaXRzIGBjb21taXRgIGFyZ3VtZW50cyB0byBidWlsZCB0aGUgbGlzdCBvZiBvYmplY3RzIGl0CisJb3V0cHV0cy4gIFRoZSBvYmplY3RzIG9uIHRoZSByZXN1bHRpbmcgbGlzdCBhcmUgcGFja2VkLgorCistLXVucGFja2VkOjoKKwlUaGlzIGltcGxpZXMgYC0tcmV2c2AuICBXaGVuIHByb2Nlc3NpbmcgdGhlIGxpc3Qgb2YKKwlyZXZpc2lvbiBhcmd1bWVudHMgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgbGltaXQKKwl0aGUgb2JqZWN0cyBwYWNrZWQgdG8gdGhvc2UgdGhhdCBhcmUgbm90IGFscmVhZHkgcGFja2VkLgorCistLWFsbDo6CisJVGhpcyBpbXBsaWVzIGAtLXJldnNgLiAgSW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgb2YKKwlyZXZpc2lvbiBhcmd1bWVudHMgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgcHJldGVuZAorCWFzIGlmIGFsbCByZWZzIHVuZGVyIGByZWZzL2AgYXJlIHNwZWNpZmllZCB0byBiZQorCWluY2x1ZGVkLgorCistLWluY2x1ZGUtdGFnOjoKKwlJbmNsdWRlIHVuYXNrZWQtZm9yIGFubm90YXRlZCB0YWdzIGlmIHRoZSBvYmplY3QgdGhleQorCXJlZmVyZW5jZSB3YXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrZmlsZS4gIFRoaXMKKwljYW4gYmUgdXNlZnVsIHRvIHNlbmQgbmV3IHRhZ3MgdG8gbmF0aXZlIGdpdCBjbGllbnRzLgorCistLXdpbmRvdz08bj46OgorLS1kZXB0aD08bj46OgorCVRoZXNlIHR3byBvcHRpb25zIGFmZmVjdCBob3cgdGhlIG9iamVjdHMgY29udGFpbmVkIGluCisJdGhlIHBhY2sgYXJlIHN0b3JlZCB1c2luZyBkZWx0YSBjb21wcmVzc2lvbi4gIFRoZQorCW9iamVjdHMgYXJlIGZpcnN0IGludGVybmFsbHkgc29ydGVkIGJ5IHR5cGUsIHNpemUgYW5kCisJb3B0aW9uYWxseSBuYW1lcyBhbmQgY29tcGFyZWQgYWdhaW5zdCB0aGUgb3RoZXIgb2JqZWN0cworCXdpdGhpbiAtLXdpbmRvdyB0byBzZWUgaWYgdXNpbmcgZGVsdGEgY29tcHJlc3Npb24gc2F2ZXMKKwlzcGFjZS4gIC0tZGVwdGggbGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoOyBtYWtpbmcKKwlpdCB0b28gZGVlcCBhZmZlY3RzIHRoZSBwZXJmb3JtYW5jZSBvbiB0aGUgdW5wYWNrZXIKKwlzaWRlLCBiZWNhdXNlIGRlbHRhIGRhdGEgbmVlZHMgdG8gYmUgYXBwbGllZCB0aGF0IG1hbnkKKwl0aW1lcyB0byBnZXQgdG8gdGhlIG5lY2Vzc2FyeSBvYmplY3QuCisJVGhlIGRlZmF1bHQgdmFsdWUgZm9yIC0td2luZG93IGlzIDEwIGFuZCAtLWRlcHRoIGlzIDUwLgorCistLXdpbmRvdy1tZW1vcnk9PG4+OjoKKwlUaGlzIG9wdGlvbiBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGxpbWl0IG9uIHRvcCBvZiBgLS13aW5kb3dgOworCXRoZSB3aW5kb3cgc2l6ZSB3aWxsIGR5bmFtaWNhbGx5IHNjYWxlIGRvd24gc28gYXMgdG8gbm90IHRha2UKKwl1cCBtb3JlIHRoYW4gJzxuPicgYnl0ZXMgaW4gbWVtb3J5LiAgVGhpcyBpcyB1c2VmdWwgaW4KKwlyZXBvc2l0b3JpZXMgd2l0aCBhIG1peCBvZiBsYXJnZSBhbmQgc21hbGwgb2JqZWN0cyB0byBub3QgcnVuCisJb3V0IG9mIG1lbW9yeSB3aXRoIGEgbGFyZ2Ugd2luZG93LCBidXQgc3RpbGwgYmUgYWJsZSB0byB0YWtlCisJYWR2YW50YWdlIG9mIHRoZSBsYXJnZSB3aW5kb3cgZm9yIHRoZSBzbWFsbGVyIG9iamVjdHMuICBUaGUKKwlzaXplIGNhbiBiZSBzdWZmaXhlZCB3aXRoICJrIiwgIm0iLCBvciAiZyIuCisJYC0td2luZG93LW1lbW9yeT0wYCBtYWtlcyBtZW1vcnkgdXNhZ2UgdW5saW1pdGVkLCB3aGljaCBpcyB0aGUKKwlkZWZhdWx0LgorCistLW1heC1wYWNrLXNpemU9PG4+OjoKKwlNYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlLiBUaGUgc2l6ZSBjYW4gYmUgc3VmZml4ZWQgd2l0aAorCSJrIiwgIm0iLCBvciAiZyIuIFRoZSBtaW5pbXVtIHNpemUgYWxsb3dlZCBpcyBsaW1pdGVkIHRvIDEgTWlCLgorCUlmIHNwZWNpZmllZCwgIG11bHRpcGxlIHBhY2tmaWxlcyBtYXkgYmUgY3JlYXRlZC4KKwlUaGUgZGVmYXVsdCBpcyB1bmxpbWl0ZWQsIHVubGVzcyB0aGUgY29uZmlnIHZhcmlhYmxlCisJYHBhY2sucGFja1NpemVMaW1pdGAgaXMgc2V0LgorCistLWhvbm9yLXBhY2sta2VlcDo6CisJVGhpcyBmbGFnIGNhdXNlcyBhbiBvYmplY3QgYWxyZWFkeSBpbiBhIGxvY2FsIHBhY2sgdGhhdAorCWhhcyBhIC5rZWVwIGZpbGUgdG8gYmUgaWdub3JlZCwgZXZlbiBpZiBpdCB3b3VsZCBoYXZlCisJb3RoZXJ3aXNlIGJlZW4gcGFja2VkLgorCistLWluY3JlbWVudGFsOjoKKwlUaGlzIGZsYWcgY2F1c2VzIGFuIG9iamVjdCBhbHJlYWR5IGluIGEgcGFjayB0byBiZSBpZ25vcmVkCisJZXZlbiBpZiBpdCB3b3VsZCBoYXZlIG90aGVyd2lzZSBiZWVuIHBhY2tlZC4KKworLS1sb2NhbDo6CisJVGhpcyBmbGFnIGNhdXNlcyBhbiBvYmplY3QgdGhhdCBpcyBib3Jyb3dlZCBmcm9tIGFuIGFsdGVybmF0ZQorCW9iamVjdCBzdG9yZSB0byBiZSBpZ25vcmVkIGV2ZW4gaWYgaXQgd291bGQgaGF2ZSBvdGhlcndpc2UgYmVlbgorCXBhY2tlZC4KKworLS1ub24tZW1wdHk6OgorICAgICAgICBPbmx5IGNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIGlmIGl0IHdvdWxkIGNvbnRhaW4gYXQKKyAgICAgICAgbGVhc3Qgb25lIG9iamVjdC4KKworLS1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIC1xCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmCisJdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworLS1hbGwtcHJvZ3Jlc3M6OgorCVdoZW4gLS1zdGRvdXQgaXMgc3BlY2lmaWVkIHRoZW4gcHJvZ3Jlc3MgcmVwb3J0IGlzCisJZGlzcGxheWVkIGR1cmluZyB0aGUgb2JqZWN0IGNvdW50IGFuZCBjb21wcmVzc2lvbiBwaGFzZXMKKwlidXQgaW5oaWJpdGVkIGR1cmluZyB0aGUgd3JpdGUtb3V0IHBoYXNlLiBUaGUgcmVhc29uIGlzCisJdGhhdCBpbiBzb21lIGNhc2VzIHRoZSBvdXRwdXQgc3RyZWFtIGlzIGRpcmVjdGx5IGxpbmtlZAorCXRvIGFub3RoZXIgY29tbWFuZCB3aGljaCBtYXkgd2lzaCB0byBkaXNwbGF5IHByb2dyZXNzCisJc3RhdHVzIG9mIGl0cyBvd24gYXMgaXQgcHJvY2Vzc2VzIGluY29taW5nIHBhY2sgZGF0YS4KKwlUaGlzIGZsYWcgaXMgbGlrZSAtLXByb2dyZXNzIGV4Y2VwdCB0aGF0IGl0IGZvcmNlcyBwcm9ncmVzcworCXJlcG9ydCBmb3IgdGhlIHdyaXRlLW91dCBwaGFzZSBhcyB3ZWxsIGV2ZW4gaWYgLS1zdGRvdXQgaXMKKwl1c2VkLgorCistLWFsbC1wcm9ncmVzcy1pbXBsaWVkOjoKKwlUaGlzIGlzIHVzZWQgdG8gaW1wbHkgLS1hbGwtcHJvZ3Jlc3Mgd2hlbmV2ZXIgcHJvZ3Jlc3MgZGlzcGxheQorCWlzIGFjdGl2YXRlZC4gIFVubGlrZSAtLWFsbC1wcm9ncmVzcyB0aGlzIGZsYWcgZG9lc24ndCBhY3R1YWxseQorCWZvcmNlIGFueSBwcm9ncmVzcyBkaXNwbGF5IGJ5IGl0c2VsZi4KKworLXE6OgorCVRoaXMgZmxhZyBtYWtlcyB0aGUgY29tbWFuZCBub3QgdG8gcmVwb3J0IGl0cyBwcm9ncmVzcworCW9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCisKKy0tbm8tcmV1c2UtZGVsdGE6OgorCVdoZW4gY3JlYXRpbmcgYSBwYWNrZWQgYXJjaGl2ZSBpbiBhIHJlcG9zaXRvcnkgdGhhdAorCWhhcyBleGlzdGluZyBwYWNrcywgdGhlIGNvbW1hbmQgcmV1c2VzIGV4aXN0aW5nIGRlbHRhcy4KKwlUaGlzIHNvbWV0aW1lcyByZXN1bHRzIGluIGEgc2xpZ2h0bHkgc3Vib3B0aW1hbCBwYWNrLgorCVRoaXMgZmxhZyB0ZWxscyB0aGUgY29tbWFuZCBub3QgdG8gcmV1c2UgZXhpc3RpbmcgZGVsdGFzCisJYnV0IGNvbXB1dGUgdGhlbSBmcm9tIHNjcmF0Y2guCisKKy0tbm8tcmV1c2Utb2JqZWN0OjoKKwlUaGlzIGZsYWcgdGVsbHMgdGhlIGNvbW1hbmQgbm90IHRvIHJldXNlIGV4aXN0aW5nIG9iamVjdCBkYXRhIGF0IGFsbCwKKwlpbmNsdWRpbmcgbm9uIGRlbHRpZmllZCBvYmplY3QsIGZvcmNpbmcgcmVjb21wcmVzc2lvbiBvZiBldmVyeXRoaW5nLgorCVRoaXMgaW1wbGllcyAtLW5vLXJldXNlLWRlbHRhLiBVc2VmdWwgb25seSBpbiB0aGUgb2JzY3VyZSBjYXNlIHdoZXJlCisJd2hvbGVzYWxlIGVuZm9yY2VtZW50IG9mIGEgZGlmZmVyZW50IGNvbXByZXNzaW9uIGxldmVsIG9uIHRoZQorCXBhY2tlZCBkYXRhIGlzIGRlc2lyZWQuCisKKy0tY29tcHJlc3Npb249PG4+OjoKKwlTcGVjaWZpZXMgY29tcHJlc3Npb24gbGV2ZWwgZm9yIG5ld2x5LWNvbXByZXNzZWQgZGF0YSBpbiB0aGUKKwlnZW5lcmF0ZWQgcGFjay4gIElmIG5vdCBzcGVjaWZpZWQsICBwYWNrIGNvbXByZXNzaW9uIGxldmVsIGlzCisJZGV0ZXJtaW5lZCBmaXJzdCBieSBwYWNrLmNvbXByZXNzaW9uLCAgdGhlbiBieSBjb3JlLmNvbXByZXNzaW9uLAorCWFuZCBkZWZhdWx0cyB0byAtMSwgIHRoZSB6bGliIGRlZmF1bHQsICBpZiBuZWl0aGVyIGlzIHNldC4KKwlBZGQgLS1uby1yZXVzZS1vYmplY3QgaWYgeW91IHdhbnQgdG8gZm9yY2UgYSB1bmlmb3JtIGNvbXByZXNzaW9uCisJbGV2ZWwgb24gYWxsIGRhdGEgbm8gbWF0dGVyIHRoZSBzb3VyY2UuCisKKy0tdGhpbjo6CisJQ3JlYXRlIGEgInRoaW4iIHBhY2sgYnkgb21pdHRpbmcgdGhlIGNvbW1vbiBvYmplY3RzIGJldHdlZW4gYQorCXNlbmRlciBhbmQgYSByZWNlaXZlciBpbiBvcmRlciB0byByZWR1Y2UgbmV0d29yayB0cmFuc2Zlci4gVGhpcworCW9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGluIGNvbmp1bmN0aW9uIHdpdGggLS1zdGRvdXQuCisrCitOb3RlOiBBIHRoaW4gcGFjayB2aW9sYXRlcyB0aGUgcGFja2VkIGFyY2hpdmUgZm9ybWF0IGJ5IG9taXR0aW5nCityZXF1aXJlZCBvYmplY3RzIGFuZCBpcyB0aHVzIHVudXNhYmxlIGJ5IGdpdCB3aXRob3V0IG1ha2luZyBpdAorc2VsZi1jb250YWluZWQuIFVzZSBgZ2l0IGluZGV4LXBhY2sgLS1maXgtdGhpbmAKKyhzZWUgbGlua2dpdDpnaXQtaW5kZXgtcGFja1sxXSkgdG8gcmVzdG9yZSB0aGUgc2VsZi1jb250YWluZWQgcHJvcGVydHkuCisKKy0tZGVsdGEtYmFzZS1vZmZzZXQ6OgorCUEgcGFja2VkIGFyY2hpdmUgY2FuIGV4cHJlc3MgdGhlIGJhc2Ugb2JqZWN0IG9mIGEgZGVsdGEgYXMKKwllaXRoZXIgYSAyMC1ieXRlIG9iamVjdCBuYW1lIG9yIGFzIGFuIG9mZnNldCBpbiB0aGUKKwlzdHJlYW0sIGJ1dCBhbmNpZW50IHZlcnNpb25zIG9mIGdpdCBkb24ndCB1bmRlcnN0YW5kIHRoZQorCWxhdHRlci4gIEJ5IGRlZmF1bHQsICdnaXQgcGFjay1vYmplY3RzJyBvbmx5IHVzZXMgdGhlCisJZm9ybWVyIGZvcm1hdCBmb3IgYmV0dGVyIGNvbXBhdGliaWxpdHkuICBUaGlzIG9wdGlvbgorCWFsbG93cyB0aGUgY29tbWFuZCB0byB1c2UgdGhlIGxhdHRlciBmb3JtYXQgZm9yCisJY29tcGFjdG5lc3MuICBEZXBlbmRpbmcgb24gdGhlIGF2ZXJhZ2UgZGVsdGEgY2hhaW4KKwlsZW5ndGgsIHRoaXMgb3B0aW9uIHR5cGljYWxseSBzaHJpbmtzIHRoZSByZXN1bHRpbmcKKwlwYWNrZmlsZSBieSAzLTUgcGVyLWNlbnQuCisrCitOb3RlOiBQb3JjZWxhaW4gY29tbWFuZHMgc3VjaCBhcyBgZ2l0IGdjYCAoc2VlIGxpbmtnaXQ6Z2l0LWdjWzFdKSwKK2BnaXQgcmVwYWNrYCAoc2VlIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXSkgcGFzcyB0aGlzIG9wdGlvbiBieSBkZWZhdWx0CitpbiBtb2Rlcm4gZ2l0IHdoZW4gdGhleSBwdXQgb2JqZWN0cyBpbiB5b3VyIHJlcG9zaXRvcnkgaW50byBwYWNrIGZpbGVzLgorU28gZG9lcyBgZ2l0IGJ1bmRsZWAgKHNlZSBsaW5rZ2l0OmdpdC1idW5kbGVbMV0pIHdoZW4gaXQgY3JlYXRlcyBhIGJ1bmRsZS4KKworLS10aHJlYWRzPTxuPjo6CisJU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBzcGF3biB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdAorCWRlbHRhIG1hdGNoZXMuICBUaGlzIHJlcXVpcmVzIHRoYXQgcGFjay1vYmplY3RzIGJlIGNvbXBpbGVkIHdpdGgKKwlwdGhyZWFkcyBvdGhlcndpc2UgdGhpcyBvcHRpb24gaXMgaWdub3JlZCB3aXRoIGEgd2FybmluZy4KKwlUaGlzIGlzIG1lYW50IHRvIHJlZHVjZSBwYWNraW5nIHRpbWUgb24gbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMuCisJVGhlIHJlcXVpcmVkIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSBkZWx0YSBzZWFyY2ggd2luZG93IGlzCisJaG93ZXZlciBtdWx0aXBsaWVkIGJ5IHRoZSBudW1iZXIgb2YgdGhyZWFkcy4KKwlTcGVjaWZ5aW5nIDAgd2lsbCBjYXVzZSBnaXQgdG8gYXV0by1kZXRlY3QgdGhlIG51bWJlciBvZiBDUFUncworCWFuZCBzZXQgdGhlIG51bWJlciBvZiB0aHJlYWRzIGFjY29yZGluZ2x5LgorCistLWluZGV4LXZlcnNpb249PHZlcnNpb24+Wyw8b2Zmc2V0Pl06OgorCVRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgdGVzdCBzdWl0ZSBvbmx5LiBJdCBhbGxvd3MKKwl0byBmb3JjZSB0aGUgdmVyc2lvbiBmb3IgdGhlIGdlbmVyYXRlZCBwYWNrIGluZGV4LCBhbmQgdG8gZm9yY2UKKwk2NC1iaXQgaW5kZXggZW50cmllcyBvbiBvYmplY3RzIGxvY2F0ZWQgYWJvdmUgdGhlIGdpdmVuIG9mZnNldC4KKworLS1rZWVwLXRydWUtcGFyZW50czo6CisJV2l0aCB0aGlzIG9wdGlvbiwgcGFyZW50cyB0aGF0IGFyZSBoaWRkZW4gYnkgZ3JhZnRzIGFyZSBwYWNrZWQKKwluZXZlcnRoZWxlc3MuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0KK2xpbmtnaXQ6Z2l0LXJlcGFja1sxXQorbGlua2dpdDpnaXQtcHJ1bmUtcGFja2VkWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODY5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZHVuZGFudC50eHQKQEAgLTAsMCArMSw1MCBAQAorZ2l0LXBhY2stcmVkdW5kYW50KDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXBhY2stcmVkdW5kYW50IC0gRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwYWNrLXJlZHVuZGFudCcgWyAtLXZlcmJvc2UgXSBbIC0tYWx0LW9kYiBdIDwgLS1hbGwgfCAucGFjayBmaWxlbmFtZSAuLi4gPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgcHJvZ3JhbSBjb21wdXRlcyB3aGljaCBwYWNrcyBpbiB5b3VyIHJlcG9zaXRvcnkKK2FyZSByZWR1bmRhbnQuIFRoZSBvdXRwdXQgaXMgc3VpdGFibGUgZm9yIHBpcGluZyB0bworYHhhcmdzIHJtYCBpZiB5b3UgYXJlIGluIHRoZSByb290IG9mIHRoZSByZXBvc2l0b3J5LgorCisnZ2l0IHBhY2stcmVkdW5kYW50JyBhY2NlcHRzIGEgbGlzdCBvZiBvYmplY3RzIG9uIHN0YW5kYXJkIGlucHV0LiBBbnkgb2JqZWN0cworZ2l2ZW4gd2lsbCBiZSBpZ25vcmVkIHdoZW4gY2hlY2tpbmcgd2hpY2ggcGFja3MgYXJlIHJlcXVpcmVkLiBUaGlzIG1ha2VzIHRoZQorZm9sbG93aW5nIGNvbW1hbmQgdXNlZnVsIHdoZW4gd2FudGluZyB0byByZW1vdmUgcGFja3Mgd2hpY2ggY29udGFpbiB1bnJlYWNoYWJsZQorb2JqZWN0cy4KKworZ2l0IGZzY2sgLS1mdWxsIC0tdW5yZWFjaGFibGUgfCBjdXQgLWQgJyAnIC1mMyB8IFwKK2dpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCB8IHhhcmdzIHJtCisKK09QVElPTlMKKy0tLS0tLS0KKworCistLWFsbDo6CisJUHJvY2Vzc2VzIGFsbCBwYWNrcy4gQW55IGZpbGVuYW1lcyBvbiB0aGUgY29tbWFuZCBsaW5lIGFyZSBpZ25vcmVkLgorCistLWFsdC1vZGI6OgorCURvbid0IHJlcXVpcmUgb2JqZWN0cyBwcmVzZW50IGluIHBhY2tzIGZyb20gYWx0ZXJuYXRlIG9iamVjdAorCWRpcmVjdG9yaWVzIHRvIGJlIHByZXNlbnQgaW4gbG9jYWwgcGFja3MuCisKKy0tdmVyYm9zZTo6CisJT3V0cHV0cyBzb21lIHN0YXRpc3RpY3MgdG8gc3RkZXJyLiBIYXMgYSBzbWFsbCBwZXJmb3JtYW5jZSBwZW5hbHR5LgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXQorbGlua2dpdDpnaXQtcmVwYWNrWzFdCitsaW5rZ2l0OmdpdC1wcnVuZS1wYWNrZWRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTMxNjc3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWZzLnR4dApAQCAtMCwwICsxLDczIEBACitnaXQtcGFjay1yZWZzKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wYWNrLXJlZnMgLSBQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHBhY2stcmVmcycgWy0tYWxsXSBbLS1uby1wcnVuZV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RyYWRpdGlvbmFsbHksIHRpcHMgb2YgYnJhbmNoZXMgYW5kIHRhZ3MgKGNvbGxlY3RpdmVseSBrbm93biBhcworJ3JlZnMnKSB3ZXJlIHN0b3JlZCBvbmUgZmlsZSBwZXIgcmVmIGluIGEgKHN1YilkaXJlY3RvcnkKK3VuZGVyIGAkR0lUX0RJUi9yZWZzYAorZGlyZWN0b3J5LiAgV2hpbGUgbWFueSBicmFuY2ggdGlwcyB0ZW5kIHRvIGJlIHVwZGF0ZWQgb2Z0ZW4sCittb3N0IHRhZ3MgYW5kIHNvbWUgYnJhbmNoIHRpcHMgYXJlIG5ldmVyIHVwZGF0ZWQuICBXaGVuIGEKK3JlcG9zaXRvcnkgaGFzIGh1bmRyZWRzIG9yIHRob3VzYW5kcyBvZiB0YWdzLCB0aGlzCitvbmUtZmlsZS1wZXItcmVmIGZvcm1hdCBib3RoIHdhc3RlcyBzdG9yYWdlIGFuZCBodXJ0cworcGVyZm9ybWFuY2UuCisKK1RoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHNvbHZlIHRoZSBzdG9yYWdlIGFuZCBwZXJmb3JtYW5jZQorcHJvYmxlbSBieSBzdG9yaW5nIHRoZSByZWZzIGluIGEgc2luZ2xlIGZpbGUsCitgJEdJVF9ESVIvcGFja2VkLXJlZnNgLiAgV2hlbiBhIHJlZiBpcyBtaXNzaW5nIGZyb20gdGhlCit0cmFkaXRpb25hbCBgJEdJVF9ESVIvcmVmc2AgZGlyZWN0b3J5IGhpZXJhcmNoeSwgaXQgaXMgbG9va2VkCit1cCBpbiB0aGlzCitmaWxlIGFuZCB1c2VkIGlmIGZvdW5kLgorCitTdWJzZXF1ZW50IHVwZGF0ZXMgdG8gYnJhbmNoZXMgYWx3YXlzIGNyZWF0ZSBuZXcgZmlsZXMgdW5kZXIKK2AkR0lUX0RJUi9yZWZzYCBkaXJlY3RvcnkgaGllcmFyY2h5LgorCitBIHJlY29tbWVuZGVkIHByYWN0aWNlIHRvIGRlYWwgd2l0aCBhIHJlcG9zaXRvcnkgd2l0aCB0b28gbWFueQorcmVmcyBpcyB0byBwYWNrIGl0cyByZWZzIHdpdGggYC0tYWxsIC0tcHJ1bmVgIG9uY2UsIGFuZAorb2NjYXNpb25hbGx5IHJ1biBgZ2l0IHBhY2stcmVmcyAtLXBydW5lYC4gIFRhZ3MgYXJlIGJ5CitkZWZpbml0aW9uIHN0YXRpb25hcnkgYW5kIGFyZSBub3QgZXhwZWN0ZWQgdG8gY2hhbmdlLiAgQnJhbmNoCitoZWFkcyB3aWxsIGJlIHBhY2tlZCB3aXRoIHRoZSBpbml0aWFsIGBwYWNrLXJlZnMgLS1hbGxgLCBidXQKK29ubHkgdGhlIGN1cnJlbnRseSBhY3RpdmUgYnJhbmNoIGhlYWRzIHdpbGwgYmVjb21lIHVucGFja2VkLAorYW5kIHRoZSBuZXh0IGBwYWNrLXJlZnNgICh3aXRob3V0IGAtLWFsbGApIHdpbGwgbGVhdmUgdGhlbQordW5wYWNrZWQuCisKKworT1BUSU9OUworLS0tLS0tLQorCistLWFsbDo6CisKK1RoZSBjb21tYW5kIGJ5IGRlZmF1bHQgcGFja3MgYWxsIHRhZ3MgYW5kIHJlZnMgdGhhdCBhcmUgYWxyZWFkeQorcGFja2VkLCBhbmQgbGVhdmVzIG90aGVyIHJlZnMKK2Fsb25lLiAgVGhpcyBpcyBiZWNhdXNlIGJyYW5jaGVzIGFyZSBleHBlY3RlZCB0byBiZSBhY3RpdmVseQorZGV2ZWxvcGVkIGFuZCBwYWNraW5nIHRoZWlyIHRpcHMgZG9lcyBub3QgaGVscCBwZXJmb3JtYW5jZS4KK1RoaXMgb3B0aW9uIGNhdXNlcyBicmFuY2ggdGlwcyB0byBiZSBwYWNrZWQgYXMgd2VsbC4gIFVzZWZ1bCBmb3IKK2EgcmVwb3NpdG9yeSB3aXRoIG1hbnkgYnJhbmNoZXMgb2YgaGlzdG9yaWNhbCBpbnRlcmVzdHMuCisKKy0tbm8tcHJ1bmU6OgorCitUaGUgY29tbWFuZCB1c3VhbGx5IHJlbW92ZXMgbG9vc2UgcmVmcyB1bmRlciBgJEdJVF9ESVIvcmVmc2AKK2hpZXJhcmNoeSBhZnRlciBwYWNraW5nIHRoZW0uICBUaGlzIG9wdGlvbiB0ZWxscyBpdCBub3QgdG8uCisKKworQlVHUworLS0tLQorCitPbGRlciBkb2N1bWVudGF0aW9uIHdyaXR0ZW4gYmVmb3JlIHRoZSBwYWNrZWQtcmVmcyBtZWNoYW5pc20gd2FzCitpbnRyb2R1Y2VkIG1heSBzdGlsbCBzYXkgdGhpbmdzIGxpa2UgIi5naXQvcmVmcy9oZWFkcy88YnJhbmNoPiBmaWxlCitleGlzdHMiIHdoZW4gaXQgbWVhbnMgImJyYW5jaCA8YnJhbmNoPiBleGlzdHMiLgorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ1ZWExZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQKQEAgLTAsMCArMSwyMyBAQAorZ2l0LXBhcnNlLXJlbW90ZSgxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcGFyc2UtcmVtb3RlIC0gUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnLiAiJChnaXQgLS1leGVjLXBhdGgpL2dpdC1wYXJzZS1yZW1vdGUiJworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgc2NyaXB0IGlzIGluY2x1ZGVkIGluIHZhcmlvdXMgc2NyaXB0cyB0byBzdXBwbHkKK3JvdXRpbmVzIHRvIHBhcnNlIGZpbGVzIHVuZGVyICRHSVRfRElSL3JlbW90ZXMvIGFuZAorJEdJVF9ESVIvYnJhbmNoZXMvIGFuZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IGFyZSByZWxhdGVkCit0byBmZXRjaGluZywgcHVsbGluZyBhbmQgcHVzaGluZy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyNjhmMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dApAQCAtMCwwICsxLDM1IEBACitnaXQtcGF0Y2gtaWQoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcGF0Y2gtaWQgLSBDb21wdXRlIHVuaXF1ZSBJRCBmb3IgYSBwYXRjaAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcGF0Y2gtaWQnIDwgPHBhdGNoPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0EgInBhdGNoIElEIiBpcyBub3RoaW5nIGJ1dCBhIFNIQTEgb2YgdGhlIGRpZmYgYXNzb2NpYXRlZCB3aXRoIGEgcGF0Y2gsIHdpdGgKK3doaXRlc3BhY2UgYW5kIGxpbmUgbnVtYmVycyBpZ25vcmVkLiAgQXMgc3VjaCwgaXQncyAicmVhc29uYWJseSBzdGFibGUiLCBidXQgYXQKK3RoZSBzYW1lIHRpbWUgYWxzbyByZWFzb25hYmx5IHVuaXF1ZSwgaS5lLiwgdHdvIHBhdGNoZXMgdGhhdCBoYXZlIHRoZSBzYW1lICJwYXRjaAorSUQiIGFyZSBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSB0aGluZy4KKworSU9XLCB5b3UgY2FuIHVzZSB0aGlzIHRoaW5nIHRvIGxvb2sgZm9yIGxpa2VseSBkdXBsaWNhdGUgY29tbWl0cy4KKworV2hlbiBkZWFsaW5nIHdpdGggJ2dpdCBkaWZmLXRyZWUnIG91dHB1dCwgaXQgdGFrZXMgYWR2YW50YWdlIG9mCit0aGUgZmFjdCB0aGF0IHRoZSBwYXRjaCBpcyBwcmVmaXhlZCB3aXRoIHRoZSBvYmplY3QgbmFtZSBvZiB0aGUKK2NvbW1pdCwgYW5kIG91dHB1dHMgdHdvIDQwLWJ5dGUgaGV4YWRlY2ltYWwgc3RyaW5ncy4gIFRoZSBmaXJzdAorc3RyaW5nIGlzIHRoZSBwYXRjaCBJRCwgYW5kIHRoZSBzZWNvbmQgc3RyaW5nIGlzIHRoZSBjb21taXQgSUQuCitUaGlzIGNhbiBiZSB1c2VkIHRvIG1ha2UgYSBtYXBwaW5nIGZyb20gcGF0Y2ggSUQgdG8gY29tbWl0IElELgorCitPUFRJT05TCistLS0tLS0tCis8cGF0Y2g+OjoKKwlUaGUgZGlmZiB0byBjcmVhdGUgdGhlIElEIG9mLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBlZWstcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBlZWstcmVtb3RlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2VhM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGVlay1yZW1vdGUudHh0CkBAIC0wLDAgKzEsNDMgQEAKK2dpdC1wZWVrLXJlbW90ZSgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wZWVrLXJlbW90ZSAtIExpc3QgdGhlIHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwZWVrLXJlbW90ZScgWy0tdXBsb2FkLXBhY2s9PGdpdC11cGxvYWQtcGFjaz5dIFs8aG9zdD46XTxkaXJlY3Rvcnk+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IGxzLXJlbW90ZScgaW5zdGVhZC4KKworT1BUSU9OUworLS0tLS0tLQorLS11cGxvYWQtcGFjaz08Z2l0LXVwbG9hZC1wYWNrPjo6CisJVXNlIHRoaXMgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byAnZ2l0LXVwbG9hZC1wYWNrJyBvbiB0aGUKKwlyZW1vdGUgc2lkZSwgaWYgaXQgaXMgbm90IGZvdW5kIG9uIHlvdXIgJFBBVEguIFNvbWUKKwlpbnN0YWxsYXRpb25zIG9mIHNzaGQgaWdub3JlcyB0aGUgdXNlcidzIGVudmlyb25tZW50CisJc2V0dXAgc2NyaXB0cyBmb3IgbG9naW4gc2hlbGxzIChlLmcuIC5iYXNoX3Byb2ZpbGUpIGFuZAorCXlvdXIgcHJpdmF0ZWx5IGluc3RhbGxlZCBnaXQgbWF5IG5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtCisJZGVmYXVsdCAkUEFUSC4gIEFub3RoZXIgd29ya2Fyb3VuZCBzdWdnZXN0ZWQgaXMgdG8gc2V0CisJdXAgeW91ciAkUEFUSCBpbiAiLmJhc2hyYyIsIGJ1dCB0aGlzIGZsYWcgaXMgZm9yIHBlb3BsZQorCXdobyBkbyBub3Qgd2FudCB0byBwYXkgdGhlIG92ZXJoZWFkIGZvciBub24taW50ZXJhY3RpdmUKKwlzaGVsbHMsIGJ1dCBwcmVmZXIgaGF2aW5nIGEgbGVhbiAuYmFzaHJjIGZpbGUgKHRoZXkgc2V0IG1vc3Qgb2YKKwl0aGUgdGhpbmdzIHVwIGluIC5iYXNoX3Byb2ZpbGUpLgorCis8aG9zdD46OgorCUEgcmVtb3RlIGhvc3QgdGhhdCBob3VzZXMgdGhlIHJlcG9zaXRvcnkuICBXaGVuIHRoaXMKKwlwYXJ0IGlzIHNwZWNpZmllZCwgJ2dpdC11cGxvYWQtcGFjaycgaXMgaW52b2tlZCB2aWEKKwlzc2guCisKKzxkaXJlY3Rvcnk+OjoKKwlUaGUgcmVwb3NpdG9yeSB0byBzeW5jIGZyb20uCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS1wYWNrZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGRjMDIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dApAQCAtMCwwICsxLDQ3IEBACitnaXQtcHJ1bmUtcGFja2VkKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXBydW5lLXBhY2tlZCAtIFJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwcnVuZS1wYWNrZWQnIFstbnwtLWRyeS1ydW5dIFstcXwtLXF1aWV0XQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBwcm9ncmFtIHNlYXJjaGVzIHRoZSBgJEdJVF9PQkpFQ1RfRElSYCBmb3IgYWxsIG9iamVjdHMgdGhhdCBjdXJyZW50bHkKK2V4aXN0IGluIGEgcGFjayBmaWxlIGFzIHdlbGwgYXMgdGhlIGluZGVwZW5kZW50IG9iamVjdCBkaXJlY3Rvcmllcy4KKworQWxsIHN1Y2ggZXh0cmEgb2JqZWN0cyBhcmUgcmVtb3ZlZC4KKworQSBwYWNrIGlzIGEgY29sbGVjdGlvbiBvZiBvYmplY3RzLCBpbmRpdmlkdWFsbHkgY29tcHJlc3NlZCwgd2l0aCBkZWx0YQorY29tcHJlc3Npb24gYXBwbGllZCwgc3RvcmVkIGluIGEgc2luZ2xlIGZpbGUsIHdpdGggYW4gYXNzb2NpYXRlZCBpbmRleCBmaWxlLgorCitQYWNrcyBhcmUgdXNlZCB0byByZWR1Y2UgdGhlIGxvYWQgb24gbWlycm9yIHN5c3RlbXMsIGJhY2t1cCBlbmdpbmVzLAorZGlzayBzdG9yYWdlLCBldGMuCisKKworT1BUSU9OUworLS0tLS0tLQorLW46OgorLS1kcnktcnVuOjoKKyAgICAgICAgRG9uJ3QgYWN0dWFsbHkgcmVtb3ZlIGFueSBvYmplY3RzLCBvbmx5IHNob3cgdGhvc2UgdGhhdCB3b3VsZCBoYXZlIGJlZW4KKyAgICAgICAgcmVtb3ZlZC4KKworLXE6OgorLS1xdWlldDo6CisJU3F1ZWxjaCB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXQorbGlua2dpdDpnaXQtcmVwYWNrWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZDAxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQKQEAgLTAsMCArMSw4NCBAQAorZ2l0LXBydW5lKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXBydW5lIC0gUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHBydW5lJyBbLW5dIFstdl0gWy0tZXhwaXJlIDxleHBpcmU+XSBbLS1dIFs8aGVhZD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitOT1RFOiBJbiBtb3N0IGNhc2VzLCB1c2VycyBzaG91bGQgcnVuICdnaXQgZ2MnLCB3aGljaCBjYWxscworJ2dpdCBwcnVuZScuIFNlZSB0aGUgc2VjdGlvbiAiTk9URVMiLCBiZWxvdy4KKworVGhpcyBydW5zICdnaXQgZnNjayAtLXVucmVhY2hhYmxlJyB1c2luZyBhbGwgdGhlIHJlZnMKK2F2YWlsYWJsZSBpbiBgcmVmcy9gLCBvcHRpb25hbGx5IHdpdGggYWRkaXRpb25hbCBzZXQgb2YKK29iamVjdHMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBwcnVuZXMgYWxsIHVucGFja2VkCitvYmplY3RzIHVucmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZXNlIGhlYWQgb2JqZWN0cyBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UuCitJbiBhZGRpdGlvbiwgaXQKK3BydW5lcyB0aGUgdW5wYWNrZWQgb2JqZWN0cyB0aGF0IGFyZSBhbHNvIGZvdW5kIGluIHBhY2tzIGJ5CitydW5uaW5nICdnaXQgcHJ1bmUtcGFja2VkJy4KKworTm90ZSB0aGF0IHVucmVhY2hhYmxlLCBwYWNrZWQgb2JqZWN0cyB3aWxsIHJlbWFpbi4gIElmIHRoaXMgaXMKK25vdCBkZXNpcmVkLCBzZWUgbGlua2dpdDpnaXQtcmVwYWNrWzFdLgorCitPUFRJT05TCistLS0tLS0tCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJRG8gbm90IHJlbW92ZSBhbnl0aGluZzsganVzdCByZXBvcnQgd2hhdCBpdCB3b3VsZAorCXJlbW92ZS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlSZXBvcnQgYWxsIHJlbW92ZWQgb2JqZWN0cy4KKworXC0tOjoKKwlEbyBub3QgaW50ZXJwcmV0IGFueSBtb3JlIGFyZ3VtZW50cyBhcyBvcHRpb25zLgorCistLWV4cGlyZSA8dGltZT46OgorCU9ubHkgZXhwaXJlIGxvb3NlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4uCisKKzxoZWFkPi4uLjo6CisJSW4gYWRkaXRpb24gdG8gb2JqZWN0cworCXJlYWNoYWJsZSBmcm9tIGFueSBvZiBvdXIgcmVmZXJlbmNlcywga2VlcCBvYmplY3RzCisJcmVhY2hhYmxlIGZyb20gbGlzdGVkIDxoZWFkPnMuCisKK0VYQU1QTEUKKy0tLS0tLS0KKworVG8gcHJ1bmUgb2JqZWN0cyBub3QgdXNlZCBieSB5b3VyIHJlcG9zaXRvcnkgbm9yIGFub3RoZXIgdGhhdAorYm9ycm93cyBmcm9tIHlvdXIgcmVwb3NpdG9yeSB2aWEgaXRzCitgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlc2A6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHJ1bmUgJChjZCAuLi9hbm90aGVyICYmICQoZ2l0IHJldi1wYXJzZSAtLWFsbCkpCistLS0tLS0tLS0tLS0KKworTm90ZXMKKy0tLS0tCisKK0luIG1vc3QgY2FzZXMsIHVzZXJzIHdpbGwgbm90IG5lZWQgdG8gY2FsbCAnZ2l0IHBydW5lJyBkaXJlY3RseSwgYnV0CitzaG91bGQgaW5zdGVhZCBjYWxsICdnaXQgZ2MnLCB3aGljaCBoYW5kbGVzIHBydW5pbmcgYWxvbmcgd2l0aAorbWFueSBvdGhlciBob3VzZWtlZXBpbmcgdGFza3MuCisKK0ZvciBhIGRlc2NyaXB0aW9uIG9mIHdoaWNoIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZm9yIHBydW5pbmcsIHNlZQorJ2dpdCBmc2NrJydzIC0tdW5yZWFjaGFibGUgb3B0aW9uLgorCitTRUUgQUxTTworLS0tLS0tLS0KKworbGlua2dpdDpnaXQtZnNja1sxXSwKK2xpbmtnaXQ6Z2l0LWdjWzFdLAorbGlua2dpdDpnaXQtcmVmbG9nWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2ZhNWVlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQKQEAgLTAsMCArMSwyNDAgQEAKK2dpdC1wdWxsKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcHVsbCAtIEZldGNoIGZyb20gYW5kIG1lcmdlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHB1bGwnIFtvcHRpb25zXSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitJbmNvcnBvcmF0ZXMgY2hhbmdlcyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgaW50byB0aGUgY3VycmVudAorYnJhbmNoLiAgSW4gaXRzIGRlZmF1bHQgbW9kZSwgYGdpdCBwdWxsYCBpcyBzaG9ydGhhbmQgZm9yCitgZ2l0IGZldGNoYCBmb2xsb3dlZCBieSBgZ2l0IG1lcmdlIEZFVENIX0hFQURgLgorCitNb3JlIHByZWNpc2VseSwgJ2dpdCBwdWxsJyBydW5zICdnaXQgZmV0Y2gnIHdpdGggdGhlIGdpdmVuCitwYXJhbWV0ZXJzIGFuZCBjYWxscyAnZ2l0IG1lcmdlJyB0byBtZXJnZSB0aGUgcmV0cmlldmVkIGJyYW5jaAoraGVhZHMgaW50byB0aGUgY3VycmVudCBicmFuY2guCitXaXRoIGAtLXJlYmFzZWAsIGl0IHJ1bnMgJ2dpdCByZWJhc2UnIGluc3RlYWQgb2YgJ2dpdCBtZXJnZScuCisKKzxyZXBvc2l0b3J5PiBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSByZW1vdGUgcmVwb3NpdG9yeSBhcworcGFzc2VkIHRvIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLiAgPHJlZnNwZWM+IGNhbiBuYW1lIGFuCithcmJpdHJhcnkgcmVtb3RlIHJlZiAoZm9yIGV4YW1wbGUsIHRoZSBuYW1lIG9mIGEgdGFnKSBvciBldmVuCithIGNvbGxlY3Rpb24gb2YgcmVmcyB3aXRoIGNvcnJlc3BvbmRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzCisoZS5nLiwgcmVmcy9oZWFkcy97YXN0ZXJpc2t9OnJlZnMvcmVtb3Rlcy9vcmlnaW4ve2FzdGVyaXNrfSksCitidXQgdXN1YWxseSBpdCBpcyB0aGUgbmFtZSBvZiBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisKK0RlZmF1bHQgdmFsdWVzIGZvciA8cmVwb3NpdG9yeT4gYW5kIDxicmFuY2g+IGFyZSByZWFkIGZyb20gdGhlCisicmVtb3RlIiBhbmQgIm1lcmdlIiBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2gKK2FzIHNldCBieSBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gYC0tdHJhY2tgLgorCitBc3N1bWUgdGhlIGZvbGxvd2luZyBoaXN0b3J5IGV4aXN0cyBhbmQgdGhlIGN1cnJlbnQgYnJhbmNoIGlzCisiYG1hc3RlcmAiOgorCistLS0tLS0tLS0tLS0KKwkgIEEtLS1CLS0tQyBtYXN0ZXIgb24gb3JpZ2luCisJIC8KKyAgICBELS0tRS0tLUYtLS1HIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK1RoZW4gImBnaXQgcHVsbGAiIHdpbGwgZmV0Y2ggYW5kIHJlcGxheSB0aGUgY2hhbmdlcyBmcm9tIHRoZSByZW1vdGUKK2BtYXN0ZXJgIGJyYW5jaCBzaW5jZSBpdCBkaXZlcmdlZCBmcm9tIHRoZSBsb2NhbCBgbWFzdGVyYCAoaS5lLiwgYEVgKQordW50aWwgaXRzIGN1cnJlbnQgY29tbWl0IChgQ2ApIG9uIHRvcCBvZiBgbWFzdGVyYCBhbmQgcmVjb3JkIHRoZQorcmVzdWx0IGluIGEgbmV3IGNvbW1pdCBhbG9uZyB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgdHdvIHBhcmVudCBjb21taXRzCithbmQgYSBsb2cgbWVzc2FnZSBmcm9tIHRoZSB1c2VyIGRlc2NyaWJpbmcgdGhlIGNoYW5nZXMuCisKKy0tLS0tLS0tLS0tLQorCSAgQS0tLUItLS1DIHJlbW90ZXMvb3JpZ2luL21hc3RlcgorCSAvICAgICAgICAgXAorICAgIEQtLS1FLS0tRi0tLUctLS1IIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK1NlZSBsaW5rZ2l0OmdpdC1tZXJnZVsxXSBmb3IgZGV0YWlscywgaW5jbHVkaW5nIGhvdyBjb25mbGljdHMKK2FyZSBwcmVzZW50ZWQgYW5kIGhhbmRsZWQuCisKK0luIGdpdCAxLjcuMCBvciBsYXRlciwgdG8gY2FuY2VsIGEgY29uZmxpY3RpbmcgbWVyZ2UsIHVzZQorYGdpdCByZXNldCAtLW1lcmdlYC4gICpXYXJuaW5nKjogSW4gb2xkZXIgdmVyc2lvbnMgb2YgZ2l0LCBydW5uaW5nICdnaXQgcHVsbCcKK3dpdGggdW5jb21taXR0ZWQgY2hhbmdlcyBpcyBkaXNjb3VyYWdlZDogd2hpbGUgcG9zc2libGUsIGl0IGxlYXZlcyB5b3UKK2luIGEgc3RhdGUgdGhhdCBtYXkgYmUgaGFyZCB0byBiYWNrIG91dCBvZiBpbiB0aGUgY2FzZSBvZiBhIGNvbmZsaWN0LgorCitJZiBhbnkgb2YgdGhlIHJlbW90ZSBjaGFuZ2VzIG92ZXJsYXAgd2l0aCBsb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLAordGhlIG1lcmdlIHdpbGwgYmUgYXV0b21hdGljYWxseSBjYW5jZWxsZWQgYW5kIHRoZSB3b3JrIHRyZWUgdW50b3VjaGVkLgorSXQgaXMgZ2VuZXJhbGx5IGJlc3QgdG8gZ2V0IGFueSBsb2NhbCBjaGFuZ2VzIGluIHdvcmtpbmcgb3JkZXIgYmVmb3JlCitwdWxsaW5nIG9yIHN0YXNoIHRoZW0gYXdheSB3aXRoIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdLgorCitPUFRJT05TCistLS0tLS0tCisKK09wdGlvbnMgbWVhbnQgZm9yICdnaXQgcHVsbCcgaXRzZWxmIGFuZCB0aGUgdW5kZXJseWluZyAnZ2l0IG1lcmdlJworbXVzdCBiZSBnaXZlbiBiZWZvcmUgdGhlIG9wdGlvbnMgbWVhbnQgZm9yICdnaXQgZmV0Y2gnLgorCistcTo6CistLXF1aWV0OjoKKwlUaGlzIGlzIHBhc3NlZCB0byBib3RoIHVuZGVybHlpbmcgZ2l0LWZldGNoIHRvIHNxdWVsY2ggcmVwb3J0aW5nIG9mCisJZHVyaW5nIHRyYW5zZmVyLCBhbmQgdW5kZXJseWluZyBnaXQtbWVyZ2UgdG8gc3F1ZWxjaCBvdXRwdXQgZHVyaW5nCisJbWVyZ2luZy4KKworLXY6OgorLS12ZXJib3NlOjoKKwlQYXNzIC0tdmVyYm9zZSB0byBnaXQtZmV0Y2ggYW5kIGdpdC1tZXJnZS4KKworLS1bbm8tXXJlY3Vyc2Utc3VibW9kdWxlc1s9eWVzfG9uLWRlbWFuZHxub106OgorCVRoaXMgb3B0aW9uIGNvbnRyb2xzIGlmIG5ldyBjb21taXRzIG9mIGFsbCBwb3B1bGF0ZWQgc3VibW9kdWxlcyBzaG91bGQKKwliZSBmZXRjaGVkIHRvbyAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBhbmQgbGlua2dpdDpnaXRtb2R1bGVzWzVdKS4KKwlUaGF0IG1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBnZXQgdGhlIGRhdGEgbmVlZGVkIGZvciBtZXJnaW5nIHN1Ym1vZHVsZQorCWNvbW1pdHMsIGEgZmVhdHVyZSBnaXQgbGVhcm5lZCBpbiAxLjcuMy4gTm90aWNlIHRoYXQgdGhlIHJlc3VsdCBvZiBhCisJbWVyZ2Ugd2lsbCBub3QgYmUgY2hlY2tlZCBvdXQgaW4gdGhlIHN1Ym1vZHVsZSwgImdpdCBzdWJtb2R1bGUgdXBkYXRlIgorCWhhcyB0byBiZSBjYWxsZWQgYWZ0ZXJ3YXJkcyB0byBicmluZyB0aGUgd29yayB0cmVlIHVwIHRvIGRhdGUgd2l0aCB0aGUKKwltZXJnZSByZXN1bHQuCisKK09wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitpbmNsdWRlOjptZXJnZS1vcHRpb25zLnR4dFtdCisKKzpnaXQtcHVsbDogMQorCistcjo6CistLXJlYmFzZTo6CisJUmViYXNlIHRoZSBjdXJyZW50IGJyYW5jaCBvbiB0b3Agb2YgdGhlIHVwc3RyZWFtIGJyYW5jaCBhZnRlcgorCWZldGNoaW5nLiAgSWYgdGhlcmUgaXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGNvcnJlc3BvbmRpbmcgdG8KKwl0aGUgdXBzdHJlYW0gYnJhbmNoIGFuZCB0aGUgdXBzdHJlYW0gYnJhbmNoIHdhcyByZWJhc2VkIHNpbmNlIGxhc3QKKwlmZXRjaGVkLCB0aGUgcmViYXNlIHVzZXMgdGhhdCBpbmZvcm1hdGlvbiB0byBhdm9pZCByZWJhc2luZworCW5vbi1sb2NhbCBjaGFuZ2VzLgorKworU2VlIGBwdWxsLnJlYmFzZWAsIGBicmFuY2guPG5hbWU+LnJlYmFzZWAgYW5kIGBicmFuY2guYXV0b3NldHVwcmViYXNlYCBpbgorbGlua2dpdDpnaXQtY29uZmlnWzFdIGlmIHlvdSB3YW50IHRvIG1ha2UgYGdpdCBwdWxsYCBhbHdheXMgdXNlCitgLS1yZWJhc2VgIGluc3RlYWQgb2YgbWVyZ2luZy4KKysKK1tOT1RFXQorVGhpcyBpcyBhIHBvdGVudGlhbGx5IF9kYW5nZXJvdXNfIG1vZGUgb2Ygb3BlcmF0aW9uLgorSXQgcmV3cml0ZXMgaGlzdG9yeSwgd2hpY2ggZG9lcyBub3QgYm9kZSB3ZWxsIHdoZW4geW91CitwdWJsaXNoZWQgdGhhdCBoaXN0b3J5IGFscmVhZHkuICBEbyAqbm90KiB1c2UgdGhpcyBvcHRpb24KK3VubGVzcyB5b3UgaGF2ZSByZWFkIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXSBjYXJlZnVsbHkuCisKKy0tbm8tcmViYXNlOjoKKwlPdmVycmlkZSBlYXJsaWVyIC0tcmViYXNlLgorCitPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmcKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitpbmNsdWRlOjpmZXRjaC1vcHRpb25zLnR4dFtdCisKK2luY2x1ZGU6OnB1bGwtZmV0Y2gtcGFyYW0udHh0W10KKworaW5jbHVkZTo6dXJscy1yZW1vdGVzLnR4dFtdCisKK2luY2x1ZGU6Om1lcmdlLXN0cmF0ZWdpZXMudHh0W10KKworREVGQVVMVCBCRUhBVklPVVIKKy0tLS0tLS0tLS0tLS0tLS0tCisKK09mdGVuIHBlb3BsZSB1c2UgYGdpdCBwdWxsYCB3aXRob3V0IGdpdmluZyBhbnkgcGFyYW1ldGVyLgorVHJhZGl0aW9uYWxseSwgdGhpcyBoYXMgYmVlbiBlcXVpdmFsZW50IHRvIHNheWluZyBgZ2l0IHB1bGwKK29yaWdpbmAuICBIb3dldmVyLCB3aGVuIGNvbmZpZ3VyYXRpb24gYGJyYW5jaC48bmFtZT4ucmVtb3RlYCBpcworcHJlc2VudCB3aGlsZSBvbiBicmFuY2ggYDxuYW1lPmAsIHRoYXQgdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mCitgb3JpZ2luYC4KKworSW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoYXQgVVJMIHRvIHVzZSB0byBmZXRjaCBmcm9tLCB0aGUgdmFsdWUKK29mIHRoZSBjb25maWd1cmF0aW9uIGByZW1vdGUuPG9yaWdpbj4udXJsYCBpcyBjb25zdWx0ZWQKK2FuZCBpZiB0aGVyZSBpcyBub3QgYW55IHN1Y2ggdmFyaWFibGUsIHRoZSB2YWx1ZSBvbiBgVVJMOiBgIGxpbmUKK2luIGAkR0lUX0RJUi9yZW1vdGVzLzxvcmlnaW4+YCBmaWxlIGlzIHVzZWQuCisKK0luIG9yZGVyIHRvIGRldGVybWluZSB3aGF0IHJlbW90ZSBicmFuY2hlcyB0byBmZXRjaCAoYW5kCitvcHRpb25hbGx5IHN0b3JlIGluIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMpIHdoZW4gdGhlIGNvbW1hbmQgaXMKK3J1biB3aXRob3V0IGFueSByZWZzcGVjIHBhcmFtZXRlcnMgb24gdGhlIGNvbW1hbmQgbGluZSwgdmFsdWVzCitvZiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgcmVtb3RlLjxvcmlnaW4+LmZldGNoYCBhcmUKK2NvbnN1bHRlZCwgYW5kIGlmIHRoZXJlIGFyZW4ndCBhbnksIGAkR0lUX0RJUi9yZW1vdGVzLzxvcmlnaW4+YAorZmlsZSBpcyBjb25zdWx0ZWQgYW5kIGl0cyBgUHVsbDogYCBsaW5lcyBhcmUgdXNlZC4KK0luIGFkZGl0aW9uIHRvIHRoZSByZWZzcGVjIGZvcm1hdHMgZGVzY3JpYmVkIGluIHRoZSBPUFRJT05TCitzZWN0aW9uLCB5b3UgY2FuIGhhdmUgYSBnbG9iYmluZyByZWZzcGVjIHRoYXQgbG9va3MgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoKKy0tLS0tLS0tLS0tLQorCitBIGdsb2JiaW5nIHJlZnNwZWMgbXVzdCBoYXZlIGEgbm9uLWVtcHR5IFJIUyAoaS5lLiBtdXN0IHN0b3JlCit3aGF0IHdlcmUgZmV0Y2hlZCBpbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMpLCBhbmQgaXRzIExIUyBhbmQgUkhTCittdXN0IGVuZCB3aXRoIGAvKmAuICBUaGUgYWJvdmUgc3BlY2lmaWVzIHRoYXQgYWxsIHJlbW90ZQorYnJhbmNoZXMgYXJlIHRyYWNrZWQgdXNpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGluCitgcmVmcy9yZW1vdGVzL29yaWdpbi9gIGhpZXJhcmNoeSB1bmRlciB0aGUgc2FtZSBuYW1lLgorCitUaGUgcnVsZSB0byBkZXRlcm1pbmUgd2hpY2ggcmVtb3RlIGJyYW5jaCB0byBtZXJnZSBhZnRlcgorZmV0Y2hpbmcgaXMgYSBiaXQgaW52b2x2ZWQsIGluIG9yZGVyIG5vdCB0byBicmVhayBiYWNrd2FyZAorY29tcGF0aWJpbGl0eS4KKworSWYgZXhwbGljaXQgcmVmc3BlY3Mgd2VyZSBnaXZlbiBvbiB0aGUgY29tbWFuZAorbGluZSBvZiBgZ2l0IHB1bGxgLCB0aGV5IGFyZSBhbGwgbWVyZ2VkLgorCitXaGVuIG5vIHJlZnNwZWMgd2FzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZW4gYGdpdCBwdWxsYAordXNlcyB0aGUgcmVmc3BlYyBmcm9tIHRoZSBjb25maWd1cmF0aW9uIG9yCitgJEdJVF9ESVIvcmVtb3Rlcy88b3JpZ2luPmAuICBJbiBzdWNoIGNhc2VzLCB0aGUgZm9sbG93aW5nCitydWxlcyBhcHBseToKKworLiBJZiBgYnJhbmNoLjxuYW1lPi5tZXJnZWAgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1cnJlbnQKKyAgYnJhbmNoIGA8bmFtZT5gIGV4aXN0cywgdGhhdCBpcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGF0IHRoZQorICByZW1vdGUgc2l0ZSB0aGF0IGlzIG1lcmdlZC4KKworLiBJZiB0aGUgcmVmc3BlYyBpcyBhIGdsb2JiaW5nIG9uZSwgbm90aGluZyBpcyBtZXJnZWQuCisKKy4gT3RoZXJ3aXNlIHRoZSByZW1vdGUgYnJhbmNoIG9mIHRoZSBmaXJzdCByZWZzcGVjIGlzIG1lcmdlZC4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBVcGRhdGUgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBmb3IgdGhlIHJlcG9zaXRvcnkKKyAgeW91IGNsb25lZCBmcm9tLCB0aGVuIG1lcmdlIG9uZSBvZiB0aGVtIGludG8geW91cgorICBjdXJyZW50IGJyYW5jaDoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCwgZ2l0IHB1bGwgb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK05vcm1hbGx5IHRoZSBicmFuY2ggbWVyZ2VkIGluIGlzIHRoZSBIRUFEIG9mIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKK2J1dCB0aGUgY2hvaWNlIGlzIGRldGVybWluZWQgYnkgdGhlIGJyYW5jaC48bmFtZT4ucmVtb3RlIGFuZAorYnJhbmNoLjxuYW1lPi5tZXJnZSBvcHRpb25zOyBzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBkZXRhaWxzLgorCisqIE1lcmdlIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoIHRoZSByZW1vdGUgYnJhbmNoIGBuZXh0YDoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCBvcmlnaW4gbmV4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGxlYXZlcyBhIGNvcHkgb2YgYG5leHRgIHRlbXBvcmFyaWx5IGluIEZFVENIX0hFQUQsIGJ1dAorZG9lcyBub3QgdXBkYXRlIGFueSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuIFVzaW5nIHJlbW90ZS10cmFja2luZworYnJhbmNoZXMsIHRoZSBzYW1lIGNhbiBiZSBkb25lIGJ5IGludm9raW5nIGZldGNoIGFuZCBtZXJnZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggb3JpZ2luCiskIGdpdCBtZXJnZSBvcmlnaW4vbmV4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworSWYgeW91IHRyaWVkIGEgcHVsbCB3aGljaCByZXN1bHRlZCBpbiBhIGNvbXBsZXggY29uZmxpY3RzIGFuZAord291bGQgd2FudCB0byBzdGFydCBvdmVyLCB5b3UgY2FuIHJlY292ZXIgd2l0aCAnZ2l0IHJlc2V0Jy4KKworCitCVUdTCistLS0tCitVc2luZyAtLXJlY3Vyc2Utc3VibW9kdWxlcyBjYW4gb25seSBmZXRjaCBuZXcgY29tbWl0cyBpbiBhbHJlYWR5IGNoZWNrZWQKK291dCBzdWJtb2R1bGVzIHJpZ2h0IG5vdy4gV2hlbiBlLmcuIHVwc3RyZWFtIGFkZGVkIGEgbmV3IHN1Ym1vZHVsZSBpbiB0aGUKK2p1c3QgZmV0Y2hlZCBjb21taXRzIG9mIHRoZSBzdXBlcnByb2plY3QgdGhlIHN1Ym1vZHVsZSBpdHNlbGYgY2FuIG5vdCBiZQorZmV0Y2hlZCwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gY2hlY2sgb3V0IHRoYXQgc3VibW9kdWxlIGxhdGVyIHdpdGhvdXQKK2hhdmluZyB0byBkbyBhIGZldGNoIGFnYWluLiBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGZpeGVkIGluIGEgZnV0dXJlIGdpdAordmVyc2lvbi4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mZXRjaFsxXSwgbGlua2dpdDpnaXQtbWVyZ2VbMV0sIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkMjU4MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CkBAIC0wLDAgKzEsNDM1IEBACitnaXQtcHVzaCgxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXB1c2ggLSBVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcHVzaCcgWy0tYWxsIHwgLS1taXJyb3IgfCAtLXRhZ3NdIFstbiB8IC0tZHJ5LXJ1bl0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0KKwkgICBbLS1yZXBvPTxyZXBvc2l0b3J5Pl0gWy1mIHwgLS1mb3JjZV0gWy0tcHJ1bmVdIFstdiB8IC0tdmVyYm9zZV0gWy11IHwgLS1zZXQtdXBzdHJlYW1dCisJICAgWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1VwZGF0ZXMgcmVtb3RlIHJlZnMgdXNpbmcgbG9jYWwgcmVmcywgd2hpbGUgc2VuZGluZyBvYmplY3RzCituZWNlc3NhcnkgdG8gY29tcGxldGUgdGhlIGdpdmVuIHJlZnMuCisKK1lvdSBjYW4gbWFrZSBpbnRlcmVzdGluZyB0aGluZ3MgaGFwcGVuIHRvIGEgcmVwb3NpdG9yeQorZXZlcnkgdGltZSB5b3UgcHVzaCBpbnRvIGl0LCBieSBzZXR0aW5nIHVwICdob29rcycgdGhlcmUuICBTZWUKK2RvY3VtZW50YXRpb24gZm9yIGxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXS4KKworCitPUFRJT05TW1tPUFRJT05TXV0KKy0tLS0tLS0tLS0tLS0tLS0tLQorPHJlcG9zaXRvcnk+OjoKKwlUaGUgInJlbW90ZSIgcmVwb3NpdG9yeSB0aGF0IGlzIGRlc3RpbmF0aW9uIG9mIGEgcHVzaAorCW9wZXJhdGlvbi4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBlaXRoZXIgYSBVUkwKKwkoc2VlIHRoZSBzZWN0aW9uIDw8VVJMUyxHSVQgVVJMUz4+IGJlbG93KSBvciB0aGUgbmFtZQorCW9mIGEgcmVtb3RlIChzZWUgdGhlIHNlY3Rpb24gPDxSRU1PVEVTLFJFTU9URVM+PiBiZWxvdykuCisKKzxyZWZzcGVjPi4uLjo6CisJVGhlIGZvcm1hdCBvZiBhIDxyZWZzcGVjPiBwYXJhbWV0ZXIgaXMgYW4gb3B0aW9uYWwgcGx1cworCWArYCwgZm9sbG93ZWQgYnkgdGhlIHNvdXJjZSByZWYgPHNyYz4sIGZvbGxvd2VkCisJYnkgYSBjb2xvbiBgOmAsIGZvbGxvd2VkIGJ5IHRoZSBkZXN0aW5hdGlvbiByZWYgPGRzdD4uCisJSXQgaXMgdXNlZCB0byBzcGVjaWZ5IHdpdGggd2hhdCA8c3JjPiBvYmplY3QgdGhlIDxkc3Q+IHJlZgorCWluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBpcyB0byBiZSB1cGRhdGVkLiAgSWYgbm90IHNwZWNpZmllZCwKKwl0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbW1hbmQgaXMgY29udHJvbGxlZCBieSB0aGUgYHB1c2guZGVmYXVsdGAKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlLgorKworVGhlIDxzcmM+IGlzIG9mdGVuIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggeW91IHdvdWxkIHdhbnQgdG8gcHVzaCwgYnV0CitpdCBjYW4gYmUgYW55IGFyYml0cmFyeSAiU0hBLTEgZXhwcmVzc2lvbiIsIHN1Y2ggYXMgYG1hc3Rlcn40YCBvcgorYEhFQURgIChzZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10pLgorKworVGhlIDxkc3Q+IHRlbGxzIHdoaWNoIHJlZiBvbiB0aGUgcmVtb3RlIHNpZGUgaXMgdXBkYXRlZCB3aXRoIHRoaXMKK3B1c2guIEFyYml0cmFyeSBleHByZXNzaW9ucyBjYW5ub3QgYmUgdXNlZCBoZXJlLCBhbiBhY3R1YWwgcmVmIG11c3QKK2JlIG5hbWVkLiBJZiBgOmA8ZHN0PiBpcyBvbWl0dGVkLCB0aGUgc2FtZSByZWYgYXMgPHNyYz4gd2lsbCBiZQordXBkYXRlZC4KKysKK1RoZSBvYmplY3QgcmVmZXJlbmNlZCBieSA8c3JjPiBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgPGRzdD4gcmVmZXJlbmNlCitvbiB0aGUgcmVtb3RlIHNpZGUsIGJ1dCBieSBkZWZhdWx0IHRoaXMgaXMgb25seSBhbGxvd2VkIGlmIHRoZQordXBkYXRlIGNhbiBmYXN0LWZvcndhcmQgPGRzdD4uICBCeSBoYXZpbmcgdGhlIG9wdGlvbmFsIGxlYWRpbmcgYCtgLAoreW91IGNhbiB0ZWxsIGdpdCB0byB1cGRhdGUgdGhlIDxkc3Q+IHJlZiBldmVuIHdoZW4gdGhlIHVwZGF0ZSBpcyBub3QgYQorZmFzdC1mb3J3YXJkLiAgVGhpcyBkb2VzICpub3QqIGF0dGVtcHQgdG8gbWVyZ2UgPHNyYz4gaW50byA8ZHN0Pi4gIFNlZQorRVhBTVBMRVMgYmVsb3cgZm9yIGRldGFpbHMuCisrCitgdGFnIDx0YWc+YCBtZWFucyB0aGUgc2FtZSBhcyBgcmVmcy90YWdzLzx0YWc+OnJlZnMvdGFncy88dGFnPmAuCisrCitQdXNoaW5nIGFuIGVtcHR5IDxzcmM+IGFsbG93cyB5b3UgdG8gZGVsZXRlIHRoZSA8ZHN0PiByZWYgZnJvbQordGhlIHJlbW90ZSByZXBvc2l0b3J5LgorKworVGhlIHNwZWNpYWwgcmVmc3BlYyBgOmAgKG9yIGArOmAgdG8gYWxsb3cgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzKQorZGlyZWN0cyBnaXQgdG8gcHVzaCAibWF0Y2hpbmciIGJyYW5jaGVzOiBmb3IgZXZlcnkgYnJhbmNoIHRoYXQgZXhpc3RzIG9uCit0aGUgbG9jYWwgc2lkZSwgdGhlIHJlbW90ZSBzaWRlIGlzIHVwZGF0ZWQgaWYgYSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZQorYWxyZWFkeSBleGlzdHMgb24gdGhlIHJlbW90ZSBzaWRlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvcGVyYXRpb24gbW9kZQoraWYgbm8gZXhwbGljaXQgcmVmc3BlYyBpcyBmb3VuZCAodGhhdCBpcyBuZWl0aGVyIG9uIHRoZSBjb21tYW5kIGxpbmUKK25vciBpbiBhbnkgUHVzaCBsaW5lIG9mIHRoZSBjb3JyZXNwb25kaW5nIHJlbW90ZXMgZmlsZS0tLXNlZSBiZWxvdykgYW5kCitubyBgcHVzaC5kZWZhdWx0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHNldC4KKworLS1hbGw6OgorCUluc3RlYWQgb2YgbmFtaW5nIGVhY2ggcmVmIHRvIHB1c2gsIHNwZWNpZmllcyB0aGF0IGFsbAorCXJlZnMgdW5kZXIgYHJlZnMvaGVhZHMvYCBiZSBwdXNoZWQuCisKKy0tcHJ1bmU6OgorCVJlbW92ZSByZW1vdGUgYnJhbmNoZXMgdGhhdCBkb24ndCBoYXZlIGEgbG9jYWwgY291bnRlcnBhcnQuIEZvciBleGFtcGxlCisJYSByZW1vdGUgYnJhbmNoIGB0bXBgIHdpbGwgYmUgcmVtb3ZlZCBpZiBhIGxvY2FsIGJyYW5jaCB3aXRoIHRoZSBzYW1lCisJbmFtZSBkb2Vzbid0IGV4aXN0IGFueSBtb3JlLiBUaGlzIGFsc28gcmVzcGVjdHMgcmVmc3BlY3MsIGUuZy4KKwlgZ2l0IHB1c2ggLS1wcnVuZSByZW1vdGUgcmVmcy9oZWFkcy8qOnJlZnMvdG1wLypgIHdvdWxkCisJbWFrZSBzdXJlIHRoYXQgcmVtb3RlIGByZWZzL3RtcC9mb29gIHdpbGwgYmUgcmVtb3ZlZCBpZiBgcmVmcy9oZWFkcy9mb29gCisJZG9lc24ndCBleGlzdC4KKworLS1taXJyb3I6OgorCUluc3RlYWQgb2YgbmFtaW5nIGVhY2ggcmVmIHRvIHB1c2gsIHNwZWNpZmllcyB0aGF0IGFsbAorCXJlZnMgdW5kZXIgYHJlZnMvYCAod2hpY2ggaW5jbHVkZXMgYnV0IGlzIG5vdAorCWxpbWl0ZWQgdG8gYHJlZnMvaGVhZHMvYCwgYHJlZnMvcmVtb3Rlcy9gLCBhbmQgYHJlZnMvdGFncy9gKQorCWJlIG1pcnJvcmVkIHRvIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4gIE5ld2x5IGNyZWF0ZWQgbG9jYWwKKwlyZWZzIHdpbGwgYmUgcHVzaGVkIHRvIHRoZSByZW1vdGUgZW5kLCBsb2NhbGx5IHVwZGF0ZWQgcmVmcworCXdpbGwgYmUgZm9yY2UgdXBkYXRlZCBvbiB0aGUgcmVtb3RlIGVuZCwgYW5kIGRlbGV0ZWQgcmVmcworCXdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSByZW1vdGUgZW5kLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAorCWlmIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgcmVtb3RlLjxyZW1vdGU+Lm1pcnJvcmAgaXMKKwlzZXQuCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgdXBkYXRlcy4KKworLS1wb3JjZWxhaW46OgorCVByb2R1Y2UgbWFjaGluZS1yZWFkYWJsZSBvdXRwdXQuICBUaGUgb3V0cHV0IHN0YXR1cyBsaW5lIGZvciBlYWNoIHJlZgorCXdpbGwgYmUgdGFiLXNlcGFyYXRlZCBhbmQgc2VudCB0byBzdGRvdXQgaW5zdGVhZCBvZiBzdGRlcnIuICBUaGUgZnVsbAorCXN5bWJvbGljIG5hbWVzIG9mIHRoZSByZWZzIHdpbGwgYmUgZ2l2ZW4uCisKKy0tZGVsZXRlOjoKKwlBbGwgbGlzdGVkIHJlZnMgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIFRoaXMgaXMKKwl0aGUgc2FtZSBhcyBwcmVmaXhpbmcgYWxsIHJlZnMgd2l0aCBhIGNvbG9uLgorCistLXRhZ3M6OgorCUFsbCByZWZzIHVuZGVyIGByZWZzL3RhZ3NgIGFyZSBwdXNoZWQsIGluCisJYWRkaXRpb24gdG8gcmVmc3BlY3MgZXhwbGljaXRseSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQKKwlsaW5lLgorCistLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz46OgorLS1leGVjPTxnaXQtcmVjZWl2ZS1wYWNrPjo6CisJUGF0aCB0byB0aGUgJ2dpdC1yZWNlaXZlLXBhY2snIHByb2dyYW0gb24gdGhlIHJlbW90ZQorCWVuZC4gIFNvbWV0aW1lcyB1c2VmdWwgd2hlbiBwdXNoaW5nIHRvIGEgcmVtb3RlCisJcmVwb3NpdG9yeSBvdmVyIHNzaCwgYW5kIHlvdSBkbyBub3QgaGF2ZSB0aGUgcHJvZ3JhbSBpbgorCWEgZGlyZWN0b3J5IG9uIHRoZSBkZWZhdWx0ICRQQVRILgorCistZjo6CistLWZvcmNlOjoKKwlVc3VhbGx5LCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdCBpcworCW5vdCBhbiBhbmNlc3RvciBvZiB0aGUgbG9jYWwgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgorCVRoaXMgZmxhZyBkaXNhYmxlcyB0aGUgY2hlY2suICBUaGlzIGNhbiBjYXVzZSB0aGUKKwlyZW1vdGUgcmVwb3NpdG9yeSB0byBsb3NlIGNvbW1pdHM7IHVzZSBpdCB3aXRoIGNhcmUuCisKKy0tcmVwbz08cmVwb3NpdG9yeT46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgaWYgbm8gPHJlcG9zaXRvcnk+IGFyZ3VtZW50IGlzCisJcGFzc2VkIGluIHRoZSBpbnZvY2F0aW9uLiBJbiB0aGlzIGNhc2UsICdnaXQgcHVzaCcgZGVyaXZlcyB0aGUKKwlyZW1vdGUgbmFtZSBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaDogSWYgaXQgdHJhY2tzIGEgcmVtb3RlCisJYnJhbmNoLCB0aGVuIHRoYXQgcmVtb3RlIHJlcG9zaXRvcnkgaXMgcHVzaGVkIHRvLiBPdGhlcndpc2UsCisJdGhlIG5hbWUgIm9yaWdpbiIgaXMgdXNlZC4gRm9yIHRoaXMgbGF0dGVyIGNhc2UsIHRoaXMgb3B0aW9uCisJY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIG5hbWUgIm9yaWdpbiIuIEluIG90aGVyIHdvcmRzLAorCXRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgdHdvIGNvbW1hbmRzCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IHB1c2ggcHVibGljICAgICAgICAgIzEKK2dpdCBwdXNoIC0tcmVwbz1wdWJsaWMgICMyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworaXMgdGhhdCAjMSBhbHdheXMgcHVzaGVzIHRvICJwdWJsaWMiIHdoZXJlYXMgIzIgcHVzaGVzIHRvICJwdWJsaWMiCitvbmx5IGlmIHRoZSBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCB0cmFjayBhIHJlbW90ZSBicmFuY2guIFRoaXMgaXMKK3VzZWZ1bCBpZiB5b3Ugd3JpdGUgYW4gYWxpYXMgb3Igc2NyaXB0IGFyb3VuZCAnZ2l0IHB1c2gnLgorCistdTo6CistLXNldC11cHN0cmVhbTo6CisJRm9yIGV2ZXJ5IGJyYW5jaCB0aGF0IGlzIHVwIHRvIGRhdGUgb3Igc3VjY2Vzc2Z1bGx5IHB1c2hlZCwgYWRkCisJdXBzdHJlYW0gKHRyYWNraW5nKSByZWZlcmVuY2UsIHVzZWQgYnkgYXJndW1lbnQtbGVzcworCWxpbmtnaXQ6Z2l0LXB1bGxbMV0gYW5kIG90aGVyIGNvbW1hbmRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKKwlzZWUgJ2JyYW5jaC48bmFtZT4ubWVyZ2UnIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS10aGluOjoKKy0tbm8tdGhpbjo6CisJVGhlc2Ugb3B0aW9ucyBhcmUgcGFzc2VkIHRvIGxpbmtnaXQ6Z2l0LXNlbmQtcGFja1sxXS4gQSB0aGluIHRyYW5zZmVyCisJc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRoZSBhbW91bnQgb2Ygc2VudCBkYXRhIHdoZW4gdGhlIHNlbmRlciBhbmQKKwlyZWNlaXZlciBzaGFyZSBtYW55IG9mIHRoZSBzYW1lIG9iamVjdHMgaW4gY29tbW9uLiBUaGUgZGVmYXVsdCBpcworCVwtLXRoaW4uCisKKy1xOjoKKy0tcXVpZXQ6OgorCVN1cHByZXNzIGFsbCBvdXRwdXQsIGluY2x1ZGluZyB0aGUgbGlzdGluZyBvZiB1cGRhdGVkIHJlZnMsCisJdW5sZXNzIGFuIGVycm9yIG9jY3Vycy4gUHJvZ3Jlc3MgaXMgbm90IHJlcG9ydGVkIHRvIHRoZSBzdGFuZGFyZAorCWVycm9yIHN0cmVhbS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlSdW4gdmVyYm9zZWx5LgorCistLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgLXEKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBmb3JjZXMgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYgdGhlCisJc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIG5vdCBkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCistLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVja3xvbi1kZW1hbmQ6OgorCU1ha2Ugc3VyZSBhbGwgc3VibW9kdWxlIGNvbW1pdHMgdXNlZCBieSB0aGUgcmV2aXNpb25zIHRvIGJlCisJcHVzaGVkIGFyZSBhdmFpbGFibGUgb24gYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoLiBJZiAnY2hlY2snIGlzCisJdXNlZCBnaXQgd2lsbCB2ZXJpZnkgdGhhdCBhbGwgc3VibW9kdWxlIGNvbW1pdHMgdGhhdCBjaGFuZ2VkIGluCisJdGhlIHJldmlzaW9ucyB0byBiZSBwdXNoZWQgYXJlIGF2YWlsYWJsZSBvbiBhdCBsZWFzdCBvbmUgcmVtb3RlCisJb2YgdGhlIHN1Ym1vZHVsZS4gSWYgYW55IGNvbW1pdHMgYXJlIG1pc3NpbmcgdGhlIHB1c2ggd2lsbCBiZQorCWFib3J0ZWQgYW5kIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuIElmICdvbi1kZW1hbmQnIGlzIHVzZWQKKwlhbGwgc3VibW9kdWxlcyB0aGF0IGNoYW5nZWQgaW4gdGhlIHJldmlzaW9ucyB0byBiZSBwdXNoZWQgd2lsbAorCWJlIHB1c2hlZC4gSWYgb24tZGVtYW5kIHdhcyBub3QgYWJsZSB0byBwdXNoIGFsbCBuZWNlc3NhcnkKKwlyZXZpc2lvbnMgaXQgd2lsbCBhbHNvIGJlIGFib3J0ZWQgYW5kIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuCisKKworaW5jbHVkZTo6dXJscy1yZW1vdGVzLnR4dFtdCisKK09VVFBVVAorLS0tLS0tCisKK1RoZSBvdXRwdXQgb2YgImdpdCBwdXNoIiBkZXBlbmRzIG9uIHRoZSB0cmFuc3BvcnQgbWV0aG9kIHVzZWQ7IHRoaXMKK3NlY3Rpb24gZGVzY3JpYmVzIHRoZSBvdXRwdXQgd2hlbiBwdXNoaW5nIG92ZXIgdGhlIGdpdCBwcm90b2NvbCAoZWl0aGVyCitsb2NhbGx5IG9yIHZpYSBzc2gpLgorCitUaGUgc3RhdHVzIG9mIHRoZSBwdXNoIGlzIG91dHB1dCBpbiB0YWJ1bGFyIGZvcm0sIHdpdGggZWFjaCBsaW5lCityZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiBhIHNpbmdsZSByZWYuIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDxmbGFnPiA8c3VtbWFyeT4gPGZyb20+IC0+IDx0bz4gKDxyZWFzb24+KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiAtLXBvcmNlbGFpbiBpcyB1c2VkLCB0aGVuIGVhY2ggbGluZSBvZiB0aGUgb3V0cHV0IGlzIG9mIHRoZSBmb3JtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgPGZsYWc+IFx0IDxmcm9tPjo8dG8+IFx0IDxzdW1tYXJ5PiAoPHJlYXNvbj4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzdGF0dXMgb2YgdXAtdG8tZGF0ZSByZWZzIGlzIHNob3duIG9ubHkgaWYgLS1wb3JjZWxhaW4gb3IgLS12ZXJib3NlCitvcHRpb24gaXMgdXNlZC4KKworZmxhZzo6CisJQSBzaW5nbGUgY2hhcmFjdGVyIGluZGljYXRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVmOgorKHNwYWNlKTs7IGZvciBhIHN1Y2Nlc3NmdWxseSBwdXNoZWQgZmFzdC1mb3J3YXJkOworYCtgOzsgZm9yIGEgc3VjY2Vzc2Z1bCBmb3JjZWQgdXBkYXRlOworYC1gOzsgZm9yIGEgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgcmVmOworYCpgOzsgZm9yIGEgc3VjY2Vzc2Z1bGx5IHB1c2hlZCBuZXcgcmVmOworYCFgOzsgZm9yIGEgcmVmIHRoYXQgd2FzIHJlamVjdGVkIG9yIGZhaWxlZCB0byBwdXNoOyBhbmQKK2A9YDs7IGZvciBhIHJlZiB0aGF0IHdhcyB1cCB0byBkYXRlIGFuZCBkaWQgbm90IG5lZWQgcHVzaGluZy4KKworc3VtbWFyeTo6CisJRm9yIGEgc3VjY2Vzc2Z1bGx5IHB1c2hlZCByZWYsIHRoZSBzdW1tYXJ5IHNob3dzIHRoZSBvbGQgYW5kIG5ldworCXZhbHVlcyBvZiB0aGUgcmVmIGluIGEgZm9ybSBzdWl0YWJsZSBmb3IgdXNpbmcgYXMgYW4gYXJndW1lbnQgdG8KKwlgZ2l0IGxvZ2AgKHRoaXMgaXMgYDxvbGQ+Li48bmV3PmAgaW4gbW9zdCBjYXNlcywgYW5kCisJYDxvbGQ+Li4uPG5ldz5gIGZvciBmb3JjZWQgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzKS4KKysKK0ZvciBhIGZhaWxlZCB1cGRhdGUsIG1vcmUgZGV0YWlscyBhcmUgZ2l2ZW46CisrCistLQorcmVqZWN0ZWQ6OgorCUdpdCBkaWQgbm90IHRyeSB0byBzZW5kIHRoZSByZWYgYXQgYWxsLCB0eXBpY2FsbHkgYmVjYXVzZSBpdAorCWlzIG5vdCBhIGZhc3QtZm9yd2FyZCBhbmQgeW91IGRpZCBub3QgZm9yY2UgdGhlIHVwZGF0ZS4KKworcmVtb3RlIHJlamVjdGVkOjoKKwlUaGUgcmVtb3RlIGVuZCByZWZ1c2VkIHRoZSB1cGRhdGUuICBVc3VhbGx5IGNhdXNlZCBieSBhIGhvb2sKKwlvbiB0aGUgcmVtb3RlIHNpZGUsIG9yIGJlY2F1c2UgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGhhcyBvbmUKKwlvZiB0aGUgZm9sbG93aW5nIHNhZmV0eSBvcHRpb25zIGluIGVmZmVjdDoKKwlgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaGAgKGZvciBwdXNoZXMgdG8gdGhlIGNoZWNrZWQgb3V0CisJYnJhbmNoKSwgYHJlY2VpdmUuZGVueU5vbkZhc3RGb3J3YXJkc2AgKGZvciBmb3JjZWQKKwlub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMpLCBgcmVjZWl2ZS5kZW55RGVsZXRlc2Agb3IKKwlgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudGAuICBTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCityZW1vdGUgZmFpbHVyZTo6CisJVGhlIHJlbW90ZSBlbmQgZGlkIG5vdCByZXBvcnQgdGhlIHN1Y2Nlc3NmdWwgdXBkYXRlIG9mIHRoZSByZWYsCisJcGVyaGFwcyBiZWNhdXNlIG9mIGEgdGVtcG9yYXJ5IGVycm9yIG9uIHRoZSByZW1vdGUgc2lkZSwgYQorCWJyZWFrIGluIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24sIG9yIG90aGVyIHRyYW5zaWVudCBlcnJvci4KKy0tCisKK2Zyb206OgorCVRoZSBuYW1lIG9mIHRoZSBsb2NhbCByZWYgYmVpbmcgcHVzaGVkLCBtaW51cyBpdHMKKwlgcmVmcy88dHlwZT4vYCBwcmVmaXguIEluIHRoZSBjYXNlIG9mIGRlbGV0aW9uLCB0aGUKKwluYW1lIG9mIHRoZSBsb2NhbCByZWYgaXMgb21pdHRlZC4KKwordG86OgorCVRoZSBuYW1lIG9mIHRoZSByZW1vdGUgcmVmIGJlaW5nIHVwZGF0ZWQsIG1pbnVzIGl0cworCWByZWZzLzx0eXBlPi9gIHByZWZpeC4KKworcmVhc29uOjoKKwlBIGh1bWFuLXJlYWRhYmxlIGV4cGxhbmF0aW9uLiBJbiB0aGUgY2FzZSBvZiBzdWNjZXNzZnVsbHkgcHVzaGVkCisJcmVmcywgbm8gZXhwbGFuYXRpb24gaXMgbmVlZGVkLiBGb3IgYSBmYWlsZWQgcmVmLCB0aGUgcmVhc29uIGZvcgorCWZhaWx1cmUgaXMgZGVzY3JpYmVkLgorCitOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGFuIHVwZGF0ZSBjaGFuZ2VzIGEgYnJhbmNoIChvciBtb3JlIGluIGdlbmVyYWwsIGEgcmVmKSB0aGF0IHVzZWQgdG8KK3BvaW50IGF0IGNvbW1pdCBBIHRvIHBvaW50IGF0IGFub3RoZXIgY29tbWl0IEIsIGl0IGlzIGNhbGxlZCBhCitmYXN0LWZvcndhcmQgdXBkYXRlIGlmIGFuZCBvbmx5IGlmIEIgaXMgYSBkZXNjZW5kYW50IG9mIEEuCisKK0luIGEgZmFzdC1mb3J3YXJkIHVwZGF0ZSBmcm9tIEEgdG8gQiwgdGhlIHNldCBvZiBjb21taXRzIHRoYXQgdGhlIG9yaWdpbmFsCitjb21taXQgQSBidWlsdCBvbiB0b3Agb2YgaXMgYSBzdWJzZXQgb2YgdGhlIGNvbW1pdHMgdGhlIG5ldyBjb21taXQgQgorYnVpbGRzIG9uIHRvcCBvZi4gIEhlbmNlLCBpdCBkb2VzIG5vdCBsb3NlIGFueSBoaXN0b3J5LgorCitJbiBjb250cmFzdCwgYSBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZSB3aWxsIGxvc2UgaGlzdG9yeS4gIEZvciBleGFtcGxlLAorc3VwcG9zZSB5b3UgYW5kIHNvbWVib2R5IGVsc2Ugc3RhcnRlZCBhdCB0aGUgc2FtZSBjb21taXQgWCwgYW5kIHlvdSBidWlsdAorYSBoaXN0b3J5IGxlYWRpbmcgdG8gY29tbWl0IEIgd2hpbGUgdGhlIG90aGVyIHBlcnNvbiBidWlsdCBhIGhpc3RvcnkKK2xlYWRpbmcgdG8gY29tbWl0IEEuICBUaGUgaGlzdG9yeSBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgQgorICAgICAvCisgLS0tWC0tLUEKKworLS0tLS0tLS0tLS0tLS0tLQorCitGdXJ0aGVyIHN1cHBvc2UgdGhhdCB0aGUgb3RoZXIgcGVyc29uIGFscmVhZHkgcHVzaGVkIGNoYW5nZXMgbGVhZGluZyB0byBBCitiYWNrIHRvIHRoZSBvcmlnaW5hbCByZXBvc2l0b3J5IHlvdSB0d28gb2J0YWluZWQgdGhlIG9yaWdpbmFsIGNvbW1pdCBYLgorCitUaGUgcHVzaCBkb25lIGJ5IHRoZSBvdGhlciBwZXJzb24gdXBkYXRlZCB0aGUgYnJhbmNoIHRoYXQgdXNlZCB0byBwb2ludCBhdAorY29tbWl0IFggdG8gcG9pbnQgYXQgY29tbWl0IEEuICBJdCBpcyBhIGZhc3QtZm9yd2FyZC4KKworQnV0IGlmIHlvdSB0cnkgdG8gcHVzaCwgeW91IHdpbGwgYXR0ZW1wdCB0byB1cGRhdGUgdGhlIGJyYW5jaCAodGhhdAorbm93IHBvaW50cyBhdCBBKSB3aXRoIGNvbW1pdCBCLiAgVGhpcyBkb2VzIF9ub3RfIGZhc3QtZm9yd2FyZC4gIElmIHlvdSBkaWQKK3NvLCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBBIHdpbGwgYmUgbG9zdCwgYmVjYXVzZSBldmVyeWJvZHkKK3dpbGwgbm93IHN0YXJ0IGJ1aWxkaW5nIG9uIHRvcCBvZiBCLgorCitUaGUgY29tbWFuZCBieSBkZWZhdWx0IGRvZXMgbm90IGFsbG93IGFuIHVwZGF0ZSB0aGF0IGlzIG5vdCBhIGZhc3QtZm9yd2FyZAordG8gcHJldmVudCBzdWNoIGxvc3Mgb2YgaGlzdG9yeS4KKworSWYgeW91IGRvIG5vdCB3YW50IHRvIGxvc2UgeW91ciB3b3JrIChoaXN0b3J5IGZyb20gWCB0byBCKSBub3IgdGhlIHdvcmsgYnkKK3RoZSBvdGhlciBwZXJzb24gKGhpc3RvcnkgZnJvbSBYIHRvIEEpLCB5b3Ugd291bGQgbmVlZCB0byBmaXJzdCBmZXRjaCB0aGUKK2hpc3RvcnkgZnJvbSB0aGUgcmVwb3NpdG9yeSwgY3JlYXRlIGEgaGlzdG9yeSB0aGF0IGNvbnRhaW5zIGNoYW5nZXMgZG9uZQorYnkgYm90aCBwYXJ0aWVzLCBhbmQgcHVzaCB0aGUgcmVzdWx0IGJhY2suCisKK1lvdSBjYW4gcGVyZm9ybSAiZ2l0IHB1bGwiLCByZXNvbHZlIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCAiZ2l0IHB1c2giCit0aGUgcmVzdWx0LiAgQSAiZ2l0IHB1bGwiIHdpbGwgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IEMgYmV0d2VlbiBjb21taXRzIEEKK2FuZCBCLgorCistLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgIEItLS1DCisgICAgIC8gICAvCisgLS0tWC0tLUEKKworLS0tLS0tLS0tLS0tLS0tLQorCitVcGRhdGluZyBBIHdpdGggdGhlIHJlc3VsdGluZyBtZXJnZSBjb21taXQgd2lsbCBmYXN0LWZvcndhcmQgYW5kIHlvdXIKK3B1c2ggd2lsbCBiZSBhY2NlcHRlZC4KKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiByZWJhc2UgeW91ciBjaGFuZ2UgYmV0d2VlbiBYIGFuZCBCIG9uIHRvcCBvZiBBLAord2l0aCAiZ2l0IHB1bGwgLS1yZWJhc2UiLCBhbmQgcHVzaCB0aGUgcmVzdWx0IGJhY2suICBUaGUgcmViYXNlIHdpbGwKK2NyZWF0ZSBhIG5ldyBjb21taXQgRCB0aGF0IGJ1aWxkcyB0aGUgY2hhbmdlIGJldHdlZW4gWCBhbmQgQiBvbiB0b3Agb2YKK0EuCisKKy0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgQiAgIEQKKyAgICAgLyAgIC8KKyAtLS1YLS0tQQorCistLS0tLS0tLS0tLS0tLS0tCisKK0FnYWluLCB1cGRhdGluZyBBIHdpdGggdGhpcyBjb21taXQgd2lsbCBmYXN0LWZvcndhcmQgYW5kIHlvdXIgcHVzaCB3aWxsIGJlCithY2NlcHRlZC4KKworVGhlcmUgaXMgYW5vdGhlciBjb21tb24gc2l0dWF0aW9uIHdoZXJlIHlvdSBtYXkgZW5jb3VudGVyIG5vbi1mYXN0LWZvcndhcmQKK3JlamVjdGlvbiB3aGVuIHlvdSB0cnkgdG8gcHVzaCwgYW5kIGl0IGlzIHBvc3NpYmxlIGV2ZW4gd2hlbiB5b3UgYXJlCitwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IG5vYm9keSBlbHNlIHB1c2hlcyBpbnRvLiBBZnRlciB5b3UgcHVzaCBjb21taXQKK0EgeW91cnNlbGYgKGluIHRoZSBmaXJzdCBwaWN0dXJlIGluIHRoaXMgc2VjdGlvbiksIHJlcGxhY2UgaXQgd2l0aCAiZ2l0Citjb21taXQgLS1hbWVuZCIgdG8gcHJvZHVjZSBjb21taXQgQiwgYW5kIHlvdSB0cnkgdG8gcHVzaCBpdCBvdXQsIGJlY2F1c2UKK2ZvcmdvdCB0aGF0IHlvdSBoYXZlIHB1c2hlZCBBIG91dCBhbHJlYWR5LiBJbiBzdWNoIGEgY2FzZSwgYW5kIG9ubHkgaWYKK3lvdSBhcmUgY2VydGFpbiB0aGF0IG5vYm9keSBpbiB0aGUgbWVhbnRpbWUgZmV0Y2hlZCB5b3VyIGVhcmxpZXIgY29tbWl0IEEKKyhhbmQgc3RhcnRlZCBidWlsZGluZyBvbiB0b3Agb2YgaXQpLCB5b3UgY2FuIHJ1biAiZ2l0IHB1c2ggLS1mb3JjZSIgdG8KK292ZXJ3cml0ZSBpdC4gSW4gb3RoZXIgd29yZHMsICJnaXQgcHVzaCAtLWZvcmNlIiBpcyBhIG1ldGhvZCByZXNlcnZlZCBmb3IKK2EgY2FzZSB3aGVyZSB5b3UgZG8gbWVhbiB0byBsb3NlIGhpc3RvcnkuCisKKworRXhhbXBsZXMKKy0tLS0tLS0tCisKK2BnaXQgcHVzaGA6OgorCVdvcmtzIGxpa2UgYGdpdCBwdXNoIDxyZW1vdGU+YCwgd2hlcmUgPHJlbW90ZT4gaXMgdGhlCisJY3VycmVudCBicmFuY2gncyByZW1vdGUgKG9yIGBvcmlnaW5gLCBpZiBubyByZW1vdGUgaXMKKwljb25maWd1cmVkIGZvciB0aGUgY3VycmVudCBicmFuY2gpLgorCitgZ2l0IHB1c2ggb3JpZ2luYDo6CisJV2l0aG91dCBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24sIHdvcmtzIGxpa2UKKwlgZ2l0IHB1c2ggb3JpZ2luIDpgLgorKworVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhpcyBjb21tYW5kIHdoZW4gbm8gPHJlZnNwZWM+IGlzIGdpdmVuIGNhbiBiZQorY29uZmlndXJlZCBieSBzZXR0aW5nIHRoZSBgcHVzaGAgb3B0aW9uIG9mIHRoZSByZW1vdGUsIG9yIHRoZSBgcHVzaC5kZWZhdWx0YAorY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKysKK0ZvciBleGFtcGxlLCB0byBkZWZhdWx0IHRvIHB1c2hpbmcgb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gYG9yaWdpbmAKK3VzZSBgZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnB1c2ggSEVBRGAuICBBbnkgdmFsaWQgPHJlZnNwZWM+IChsaWtlCit0aGUgb25lcyBpbiB0aGUgZXhhbXBsZXMgYmVsb3cpIGNhbiBiZSBjb25maWd1cmVkIGFzIHRoZSBkZWZhdWx0IGZvcgorYGdpdCBwdXNoIG9yaWdpbmAuCisKK2BnaXQgcHVzaCBvcmlnaW4gOmA6OgorCVB1c2ggIm1hdGNoaW5nIiBicmFuY2hlcyB0byBgb3JpZ2luYC4gU2VlCisJPHJlZnNwZWM+IGluIHRoZSA8PE9QVElPTlMsT1BUSU9OUz4+IHNlY3Rpb24gYWJvdmUgZm9yIGEKKwlkZXNjcmlwdGlvbiBvZiAibWF0Y2hpbmciIGJyYW5jaGVzLgorCitgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcmA6OgorCUZpbmQgYSByZWYgdGhhdCBtYXRjaGVzIGBtYXN0ZXJgIGluIHRoZSBzb3VyY2UgcmVwb3NpdG9yeQorCShtb3N0IGxpa2VseSwgaXQgd291bGQgZmluZCBgcmVmcy9oZWFkcy9tYXN0ZXJgKSwgYW5kIHVwZGF0ZQorCXRoZSBzYW1lIHJlZiAoZS5nLiBgcmVmcy9oZWFkcy9tYXN0ZXJgKSBpbiBgb3JpZ2luYCByZXBvc2l0b3J5CisJd2l0aCBpdC4gIElmIGBtYXN0ZXJgIGRpZCBub3QgZXhpc3QgcmVtb3RlbHksIGl0IHdvdWxkIGJlCisJY3JlYXRlZC4KKworYGdpdCBwdXNoIG9yaWdpbiBIRUFEYDo6CisJQSBoYW5keSB3YXkgdG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIHNhbWUgbmFtZSBvbiB0aGUKKwlyZW1vdGUuCisKK2BnaXQgcHVzaCBvcmlnaW4gbWFzdGVyOnNhdGVsbGl0ZS9tYXN0ZXIgZGV2OnNhdGVsbGl0ZS9kZXZgOjoKKwlVc2UgdGhlIHNvdXJjZSByZWYgdGhhdCBtYXRjaGVzIGBtYXN0ZXJgIChlLmcuIGByZWZzL2hlYWRzL21hc3RlcmApCisJdG8gdXBkYXRlIHRoZSByZWYgdGhhdCBtYXRjaGVzIGBzYXRlbGxpdGUvbWFzdGVyYCAobW9zdCBwcm9iYWJseQorCWByZWZzL3JlbW90ZXMvc2F0ZWxsaXRlL21hc3RlcmApIGluIHRoZSBgb3JpZ2luYCByZXBvc2l0b3J5LCB0aGVuCisJZG8gdGhlIHNhbWUgZm9yIGBkZXZgIGFuZCBgc2F0ZWxsaXRlL2RldmAuCisKK2BnaXQgcHVzaCBvcmlnaW4gSEVBRDptYXN0ZXJgOjoKKwlQdXNoIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgcmVtb3RlIHJlZiBtYXRjaGluZyBgbWFzdGVyYCBpbiB0aGUKKwlgb3JpZ2luYCByZXBvc2l0b3J5LiBUaGlzIGZvcm0gaXMgY29udmVuaWVudCB0byBwdXNoIHRoZSBjdXJyZW50CisJYnJhbmNoIHdpdGhvdXQgdGhpbmtpbmcgYWJvdXQgaXRzIGxvY2FsIG5hbWUuCisKK2BnaXQgcHVzaCBvcmlnaW4gbWFzdGVyOnJlZnMvaGVhZHMvZXhwZXJpbWVudGFsYDo6CisJQ3JlYXRlIHRoZSBicmFuY2ggYGV4cGVyaW1lbnRhbGAgaW4gdGhlIGBvcmlnaW5gIHJlcG9zaXRvcnkKKwlieSBjb3B5aW5nIHRoZSBjdXJyZW50IGBtYXN0ZXJgIGJyYW5jaC4gIFRoaXMgZm9ybSBpcyBvbmx5CisJbmVlZGVkIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggb3IgdGFnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB3aGVuCisJdGhlIGxvY2FsIG5hbWUgYW5kIHRoZSByZW1vdGUgbmFtZSBhcmUgZGlmZmVyZW50OyBvdGhlcndpc2UsCisJdGhlIHJlZiBuYW1lIG9uIGl0cyBvd24gd2lsbCB3b3JrLgorCitgZ2l0IHB1c2ggb3JpZ2luIDpleHBlcmltZW50YWxgOjoKKwlGaW5kIGEgcmVmIHRoYXQgbWF0Y2hlcyBgZXhwZXJpbWVudGFsYCBpbiB0aGUgYG9yaWdpbmAgcmVwb3NpdG9yeQorCShlLmcuIGByZWZzL2hlYWRzL2V4cGVyaW1lbnRhbGApLCBhbmQgZGVsZXRlIGl0LgorCitgZ2l0IHB1c2ggb3JpZ2luICtkZXY6bWFzdGVyYDo6CisJVXBkYXRlIHRoZSBvcmlnaW4gcmVwb3NpdG9yeSdzIG1hc3RlciBicmFuY2ggd2l0aCB0aGUgZGV2IGJyYW5jaCwKKwlhbGxvd2luZyBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMuICAqVGhpcyBjYW4gbGVhdmUgdW5yZWZlcmVuY2VkCisJY29tbWl0cyBkYW5nbGluZyBpbiB0aGUgb3JpZ2luIHJlcG9zaXRvcnkuKiAgQ29uc2lkZXIgdGhlCisJZm9sbG93aW5nIHNpdHVhdGlvbiwgd2hlcmUgYSBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlOgorKworLS0tLQorCSAgICBvLS0tby0tLW8tLS1BLS0tQiAgb3JpZ2luL21hc3RlcgorCQkgICAgIFwKKwkJICAgICAgWC0tLVktLS1aICBkZXYKKy0tLS0KKysKK1RoZSBhYm92ZSBjb21tYW5kIHdvdWxkIGNoYW5nZSB0aGUgb3JpZ2luIHJlcG9zaXRvcnkgdG8KKysKKy0tLS0KKwkJICAgICAgQS0tLUIgICh1bm5hbWVkIGJyYW5jaCkKKwkJICAgICAvCisJICAgIG8tLS1vLS0tby0tLVgtLS1ZLS0tWiAgbWFzdGVyCistLS0tCisrCitDb21taXRzIEEgYW5kIEIgd291bGQgbm8gbG9uZ2VyIGJlbG9uZyB0byBhIGJyYW5jaCB3aXRoIGEgc3ltYm9saWMgbmFtZSwKK2FuZCBzbyB3b3VsZCBiZSB1bnJlYWNoYWJsZS4gIEFzIHN1Y2gsIHRoZXNlIGNvbW1pdHMgd291bGQgYmUgcmVtb3ZlZCBieQorYSBgZ2l0IGdjYCBjb21tYW5kIG9uIHRoZSBvcmlnaW4gcmVwb3NpdG9yeS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1xdWlsdGltcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1xdWlsdGltcG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YxMTJmMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dApAQCAtMCwwICsxLDU0IEBACitnaXQtcXVpbHRpbXBvcnQoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXF1aWx0aW1wb3J0IC0gQXBwbGllcyBhIHF1aWx0IHBhdGNoc2V0IG9udG8gdGhlIGN1cnJlbnQgYnJhbmNoCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHF1aWx0aW1wb3J0JyBbLS1kcnktcnVuIHwgLW5dIFstLWF1dGhvciA8YXV0aG9yPl0gWy0tcGF0Y2hlcyA8ZGlyPl0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0FwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGdpdCBicmFuY2gsIHByZXNlcnZpbmcKK3RoZSBwYXRjaCBib3VuZGFyaWVzLCBwYXRjaCBvcmRlciwgYW5kIHBhdGNoIGRlc2NyaXB0aW9ucyBwcmVzZW50CitpbiB0aGUgcXVpbHQgcGF0Y2hzZXQuCisKK0ZvciBlYWNoIHBhdGNoIHRoZSBjb2RlIGF0dGVtcHRzIHRvIGV4dHJhY3QgdGhlIGF1dGhvciBmcm9tIHRoZQorcGF0Y2ggZGVzY3JpcHRpb24uICBJZiB0aGF0IGZhaWxzIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGF1dGhvcgorc3BlY2lmaWVkIHdpdGggLS1hdXRob3IuICBJZiB0aGUgLS1hdXRob3IgZmxhZyB3YXMgbm90IGdpdmVuCit0aGUgcGF0Y2ggZGVzY3JpcHRpb24gaXMgZGlzcGxheWVkIGFuZCB0aGUgdXNlciBpcyBhc2tlZCB0bworaW50ZXJhY3RpdmVseSBlbnRlciB0aGUgYXV0aG9yIG9mIHRoZSBwYXRjaC4KKworSWYgYSBzdWJqZWN0IGlzIG5vdCBmb3VuZCBpbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gdGhlIHBhdGNoIG5hbWUgaXMKK3ByZXNlcnZlZCBhcyB0aGUgMSBsaW5lIHN1YmplY3QgaW4gdGhlIGdpdCBkZXNjcmlwdGlvbi4KKworT1BUSU9OUworLS0tLS0tLQorCistbjo6CistLWRyeS1ydW46OgorCVdhbGsgdGhyb3VnaCB0aGUgcGF0Y2hlcyBpbiB0aGUgc2VyaWVzIGFuZCB3YXJuCisJaWYgd2UgY2Fubm90IGZpbmQgYWxsIG9mIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gY29tbWl0CisJYSBwYXRjaC4gIEF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZyBvbmx5IG1pc3NpbmcgYXV0aG9yCisJaW5mb3JtYXRpb24gaXMgd2FybmVkIGFib3V0LgorCistLWF1dGhvciBBdXRob3IgTmFtZSA8QXV0aG9yIEVtYWlsPjo6CisJVGhlIGF1dGhvciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHRvIHVzZSB3aGVuIG5vIGF1dGhvcgorCWluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24uCisKKy0tcGF0Y2hlcyA8ZGlyPjo6CisJVGhlIGRpcmVjdG9yeSB0byBmaW5kIHRoZSBxdWlsdCBwYXRjaGVzIGFuZCB0aGUKKwlxdWlsdCBzZXJpZXMgZmlsZS4KKysKK1RoZSBkZWZhdWx0IGZvciB0aGUgcGF0Y2ggZGlyZWN0b3J5IGlzIHBhdGNoZXMKK29yIHRoZSB2YWx1ZSBvZiB0aGUgJFFVSUxUX1BBVENIRVMgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YmRlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0CkBAIC0wLDAgKzEsNDMxIEBACitnaXQtcmVhZC10cmVlKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZWFkLXRyZWUgLSBSZWFkcyB0cmVlIGluZm9ybWF0aW9uIGludG8gdGhlIGluZGV4CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlYWQtdHJlZScgW1stbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4Pl0KKwkJWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dCisJCVstLWluZGV4LW91dHB1dD08ZmlsZT5dIFstLW5vLXNwYXJzZS1jaGVja291dF0KKwkJKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyB0aGUgdHJlZSBpbmZvcm1hdGlvbiBnaXZlbiBieSA8dHJlZS1pc2g+IGludG8gdGhlIGluZGV4LAorYnV0IGRvZXMgbm90IGFjdHVhbGx5ICp1cGRhdGUqIGFueSBvZiB0aGUgZmlsZXMgaXQgImNhY2hlcyIuIChzZWU6CitsaW5rZ2l0OmdpdC1jaGVja291dC1pbmRleFsxXSkKKworT3B0aW9uYWxseSwgaXQgY2FuIG1lcmdlIGEgdHJlZSBpbnRvIHRoZSBpbmRleCwgcGVyZm9ybSBhCitmYXN0LWZvcndhcmQgKGkuZS4gMi13YXkpIG1lcmdlLCBvciBhIDMtd2F5IG1lcmdlLCB3aXRoIHRoZSBgLW1gCitmbGFnLiAgV2hlbiB1c2VkIHdpdGggYC1tYCwgdGhlIGAtdWAgZmxhZyBjYXVzZXMgaXQgdG8gYWxzbyB1cGRhdGUKK3RoZSBmaWxlcyBpbiB0aGUgd29yayB0cmVlIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCisKK1RyaXZpYWwgbWVyZ2VzIGFyZSBkb25lIGJ5ICdnaXQgcmVhZC10cmVlJyBpdHNlbGYuICBPbmx5IGNvbmZsaWN0aW5nIHBhdGhzCit3aWxsIGJlIGluIHVubWVyZ2VkIHN0YXRlIHdoZW4gJ2dpdCByZWFkLXRyZWUnIHJldHVybnMuCisKK09QVElPTlMKKy0tLS0tLS0KKy1tOjoKKwlQZXJmb3JtIGEgbWVyZ2UsIG5vdCBqdXN0IGEgcmVhZC4gIFRoZSBjb21tYW5kIHdpbGwKKwlyZWZ1c2UgdG8gcnVuIGlmIHlvdXIgaW5kZXggZmlsZSBoYXMgdW5tZXJnZWQgZW50cmllcywKKwlpbmRpY2F0aW5nIHRoYXQgeW91IGhhdmUgbm90IGZpbmlzaGVkIHByZXZpb3VzIG1lcmdlIHlvdQorCXN0YXJ0ZWQuCisKKy0tcmVzZXQ6OgorICAgICAgICBTYW1lIGFzIC1tLCBleGNlcHQgdGhhdCB1bm1lcmdlZCBlbnRyaWVzIGFyZSBkaXNjYXJkZWQKKyAgICAgICAgaW5zdGVhZCBvZiBmYWlsaW5nLgorCistdTo6CisJQWZ0ZXIgYSBzdWNjZXNzZnVsIG1lcmdlLCB1cGRhdGUgdGhlIGZpbGVzIGluIHRoZSB3b3JrCisJdHJlZSB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLgorCistaTo6CisJVXN1YWxseSBhIG1lcmdlIHJlcXVpcmVzIHRoZSBpbmRleCBmaWxlIGFzIHdlbGwgYXMgdGhlCisJZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byBiZSB1cCB0byBkYXRlIHdpdGggdGhlCisJY3VycmVudCBoZWFkIGNvbW1pdCwgaW4gb3JkZXIgbm90IHRvIGxvc2UgbG9jYWwKKwljaGFuZ2VzLiAgVGhpcyBmbGFnIGRpc2FibGVzIHRoZSBjaGVjayB3aXRoIHRoZSB3b3JraW5nCisJdHJlZSBhbmQgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgbWVyZ2Ugb2YKKwl0cmVlcyB0aGF0IGFyZSBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY3VycmVudAorCXdvcmtpbmcgdHJlZSBzdGF0dXMgaW50byBhIHRlbXBvcmFyeSBpbmRleCBmaWxlLgorCistbjo6CistLWRyeS1ydW46OgorCUNoZWNrIGlmIHRoZSBjb21tYW5kIHdvdWxkIGVycm9yIG91dCwgd2l0aG91dCB1cGRhdGluZyB0aGUgaW5kZXgKKwlub3IgdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZm9yIHJlYWwuCisKKy12OjoKKwlTaG93IHRoZSBwcm9ncmVzcyBvZiBjaGVja2luZyBmaWxlcyBvdXQuCisKKy0tdHJpdmlhbDo6CisJUmVzdHJpY3QgdGhyZWUtd2F5IG1lcmdlIGJ5ICdnaXQgcmVhZC10cmVlJyB0byBoYXBwZW4KKwlvbmx5IGlmIHRoZXJlIGlzIG5vIGZpbGUtbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCwgaW5zdGVhZAorCW9mIHJlc29sdmluZyBtZXJnZSBmb3IgdHJpdmlhbCBjYXNlcyBhbmQgbGVhdmluZworCWNvbmZsaWN0aW5nIGZpbGVzIHVucmVzb2x2ZWQgaW4gdGhlIGluZGV4LgorCistLWFnZ3Jlc3NpdmU6OgorCVVzdWFsbHkgYSB0aHJlZS13YXkgbWVyZ2UgYnkgJ2dpdCByZWFkLXRyZWUnIHJlc29sdmVzCisJdGhlIG1lcmdlIGZvciByZWFsbHkgdHJpdmlhbCBjYXNlcyBhbmQgbGVhdmVzIG90aGVyCisJY2FzZXMgdW5yZXNvbHZlZCBpbiB0aGUgaW5kZXgsIHNvIHRoYXQgcG9yY2VsYWlucyBjYW4KKwlpbXBsZW1lbnQgZGlmZmVyZW50IG1lcmdlIHBvbGljaWVzLiAgVGhpcyBmbGFnIG1ha2VzIHRoZQorCWNvbW1hbmQgcmVzb2x2ZSBhIGZldyBtb3JlIGNhc2VzIGludGVybmFsbHk6CisrCisqIHdoZW4gb25lIHNpZGUgcmVtb3ZlcyBhIHBhdGggYW5kIHRoZSBvdGhlciBzaWRlIGxlYXZlcyB0aGUgcGF0aAorICB1bm1vZGlmaWVkLiAgVGhlIHJlc29sdXRpb24gaXMgdG8gcmVtb3ZlIHRoYXQgcGF0aC4KKyogd2hlbiBib3RoIHNpZGVzIHJlbW92ZSBhIHBhdGguICBUaGUgcmVzb2x1dGlvbiBpcyB0byByZW1vdmUgdGhhdCBwYXRoLgorKiB3aGVuIGJvdGggc2lkZXMgYWRkIGEgcGF0aCBpZGVudGljYWxseS4gIFRoZSByZXNvbHV0aW9uCisgIGlzIHRvIGFkZCB0aGF0IHBhdGguCisKKy0tcHJlZml4PTxwcmVmaXg+Lzo6CisJS2VlcCB0aGUgY3VycmVudCBpbmRleCBjb250ZW50cywgYW5kIHJlYWQgdGhlIGNvbnRlbnRzCisJb2YgdGhlIG5hbWVkIHRyZWUtaXNoIHVuZGVyIHRoZSBkaXJlY3RvcnkgYXQgYDxwcmVmaXg+YC4KKwlUaGUgY29tbWFuZCB3aWxsIHJlZnVzZSB0byBvdmVyd3JpdGUgZW50cmllcyB0aGF0IGFscmVhZHkKKwlleGlzdGVkIGluIHRoZSBvcmlnaW5hbCBpbmRleCBmaWxlLiBOb3RlIHRoYXQgdGhlIGA8cHJlZml4Pi9gCisJdmFsdWUgbXVzdCBlbmQgd2l0aCBhIHNsYXNoLgorCistLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPjo6CisJV2hlbiBydW5uaW5nIHRoZSBjb21tYW5kIHdpdGggYC11YCBhbmQgYC1tYCBvcHRpb25zLCB0aGUKKwltZXJnZSByZXN1bHQgbWF5IG5lZWQgdG8gb3ZlcndyaXRlIHBhdGhzIHRoYXQgYXJlIG5vdAorCXRyYWNrZWQgaW4gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhlIGNvbW1hbmQgdXN1YWxseQorCXJlZnVzZXMgdG8gcHJvY2VlZCB3aXRoIHRoZSBtZXJnZSB0byBhdm9pZCBsb3Npbmcgc3VjaCBhCisJcGF0aC4gIEhvd2V2ZXIgdGhpcyBzYWZldHkgdmFsdmUgc29tZXRpbWVzIGdldHMgaW4gdGhlCisJd2F5LiAgRm9yIGV4YW1wbGUsIGl0IG9mdGVuIGhhcHBlbnMgdGhhdCB0aGUgb3RoZXIKKwlicmFuY2ggYWRkZWQgYSBmaWxlIHRoYXQgdXNlZCB0byBiZSBhIGdlbmVyYXRlZCBmaWxlIGluCisJeW91ciBicmFuY2gsIGFuZCB0aGUgc2FmZXR5IHZhbHZlIHRyaWdnZXJzIHdoZW4geW91IHRyeQorCXRvIHN3aXRjaCB0byB0aGF0IGJyYW5jaCBhZnRlciB5b3UgcmFuIGBtYWtlYCBidXQgYmVmb3JlCisJcnVubmluZyBgbWFrZSBjbGVhbmAgdG8gcmVtb3ZlIHRoZSBnZW5lcmF0ZWQgZmlsZS4gIFRoaXMKKwlvcHRpb24gdGVsbHMgdGhlIGNvbW1hbmQgdG8gcmVhZCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUKKwlmaWxlICh1c3VhbGx5ICcuZ2l0aWdub3JlJykgYW5kIGFsbG93cyBzdWNoIGFuIHVudHJhY2tlZAorCWJ1dCBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZSB0byBiZSBvdmVyd3JpdHRlbi4KKworLS1pbmRleC1vdXRwdXQ9PGZpbGU+OjoKKwlJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIHJlc3VsdHMgb3V0IHRvIGAkR0lUX0lOREVYX0ZJTEVgLAorCXdyaXRlIHRoZSByZXN1bHRpbmcgaW5kZXggaW4gdGhlIG5hbWVkIGZpbGUuICBXaGlsZSB0aGUKKwljb21tYW5kIGlzIG9wZXJhdGluZywgdGhlIG9yaWdpbmFsIGluZGV4IGZpbGUgaXMgbG9ja2VkCisJd2l0aCB0aGUgc2FtZSBtZWNoYW5pc20gYXMgdXN1YWwuICBUaGUgZmlsZSBtdXN0IGFsbG93CisJdG8gYmUgcmVuYW1lKDIpZWQgaW50byBmcm9tIGEgdGVtcG9yYXJ5IGZpbGUgdGhhdCBpcworCWNyZWF0ZWQgbmV4dCB0byB0aGUgdXN1YWwgaW5kZXggZmlsZTsgdHlwaWNhbGx5IHRoaXMKKwltZWFucyBpdCBuZWVkcyB0byBiZSBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtIGFzIHRoZSBpbmRleAorCWZpbGUgaXRzZWxmLCBhbmQgeW91IG5lZWQgd3JpdGUgcGVybWlzc2lvbiB0byB0aGUKKwlkaXJlY3RvcmllcyB0aGUgaW5kZXggZmlsZSBhbmQgaW5kZXggb3V0cHV0IGZpbGUgYXJlCisJbG9jYXRlZCBpbi4KKworLS1uby1zcGFyc2UtY2hlY2tvdXQ6OgorCURpc2FibGUgc3BhcnNlIGNoZWNrb3V0IHN1cHBvcnQgZXZlbiBpZiBgY29yZS5zcGFyc2VDaGVja291dGAKKwlpcyB0cnVlLgorCistLWVtcHR5OjoKKwlJbnN0ZWFkIG9mIHJlYWRpbmcgdHJlZSBvYmplY3QocykgaW50byB0aGUgaW5kZXgsIGp1c3QgZW1wdHkKKwlpdC4KKworPHRyZWUtaXNoIz46OgorCVRoZSBpZCBvZiB0aGUgdHJlZSBvYmplY3QocykgdG8gYmUgcmVhZC9tZXJnZWQuCisKKworTWVyZ2luZworLS0tLS0tLQorSWYgYC1tYCBpcyBzcGVjaWZpZWQsICdnaXQgcmVhZC10cmVlJyBjYW4gcGVyZm9ybSAzIGtpbmRzIG9mCittZXJnZSwgYSBzaW5nbGUgdHJlZSBtZXJnZSBpZiBvbmx5IDEgdHJlZSBpcyBnaXZlbiwgYQorZmFzdC1mb3J3YXJkIG1lcmdlIHdpdGggMiB0cmVlcywgb3IgYSAzLXdheSBtZXJnZSBpZiAzIHRyZWVzIGFyZQorcHJvdmlkZWQuCisKKworU2luZ2xlIFRyZWUgTWVyZ2UKK35+fn5+fn5+fn5+fn5+fn5+CitJZiBvbmx5IDEgdHJlZSBpcyBzcGVjaWZpZWQsICdnaXQgcmVhZC10cmVlJyBvcGVyYXRlcyBhcyBpZiB0aGUgdXNlciBkaWQgbm90CitzcGVjaWZ5IGAtbWAsIGV4Y2VwdCB0aGF0IGlmIHRoZSBvcmlnaW5hbCBpbmRleCBoYXMgYW4gZW50cnkgZm9yIGEKK2dpdmVuIHBhdGhuYW1lLCBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYXRoIG1hdGNoIHdpdGggdGhlIHRyZWUKK2JlaW5nIHJlYWQsIHRoZSBzdGF0IGluZm8gZnJvbSB0aGUgaW5kZXggaXMgdXNlZC4gKEluIG90aGVyIHdvcmRzLCB0aGUKK2luZGV4J3Mgc3RhdCgpcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgbWVyZ2VkIHRyZWUncykuCisKK1RoYXQgbWVhbnMgdGhhdCBpZiB5b3UgZG8gYSBgZ2l0IHJlYWQtdHJlZSAtbSA8bmV3dHJlZT5gIGZvbGxvd2VkIGJ5IGEKK2BnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgLWFgLCB0aGUgJ2dpdCBjaGVja291dC1pbmRleCcgb25seSBjaGVja3Mgb3V0Cit0aGUgc3R1ZmYgdGhhdCByZWFsbHkgY2hhbmdlZC4KKworVGhpcyBpcyB1c2VkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGZhbHNlIGhpdHMgd2hlbiAnZ2l0IGRpZmYtZmlsZXMnIGlzCitydW4gYWZ0ZXIgJ2dpdCByZWFkLXRyZWUnLgorCisKK1R3byBUcmVlIE1lcmdlCit+fn5+fn5+fn5+fn5+fgorCitUeXBpY2FsbHksIHRoaXMgaXMgaW52b2tlZCBhcyBgZ2l0IHJlYWQtdHJlZSAtbSAkSCAkTWAsIHdoZXJlICRICitpcyB0aGUgaGVhZCBjb21taXQgb2YgdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSwgYW5kICRNIGlzIHRoZSBoZWFkCitvZiBhIGZvcmVpZ24gdHJlZSwgd2hpY2ggaXMgc2ltcGx5IGFoZWFkIG9mICRIIChpLmUuIHdlIGFyZSBpbiBhCitmYXN0LWZvcndhcmQgc2l0dWF0aW9uKS4KKworV2hlbiB0d28gdHJlZXMgYXJlIHNwZWNpZmllZCwgdGhlIHVzZXIgaXMgdGVsbGluZyAnZ2l0IHJlYWQtdHJlZScKK3RoZSBmb2xsb3dpbmc6CisKKyAgICAgMS4gVGhlIGN1cnJlbnQgaW5kZXggYW5kIHdvcmsgdHJlZSBpcyBkZXJpdmVkIGZyb20gJEgsIGJ1dAorCXRoZSB1c2VyIG1heSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gdGhlbSBzaW5jZSAkSC4KKworICAgICAyLiBUaGUgdXNlciB3YW50cyB0byBmYXN0LWZvcndhcmQgdG8gJE0uCisKK0luIHRoaXMgY2FzZSwgdGhlIGBnaXQgcmVhZC10cmVlIC1tICRIICRNYCBjb21tYW5kIG1ha2VzIHN1cmUKK3RoYXQgbm8gbG9jYWwgY2hhbmdlIGlzIGxvc3QgYXMgdGhlIHJlc3VsdCBvZiB0aGlzICJtZXJnZSIuCitIZXJlIGFyZSB0aGUgImNhcnJ5IGZvcndhcmQiIHJ1bGVzLCB3aGVyZSAiSSIgZGVub3RlcyB0aGUgaW5kZXgsCisiY2xlYW4iIG1lYW5zIHRoYXQgaW5kZXggYW5kIHdvcmsgdHJlZSBjb2luY2lkZSwgYW5kICJleGlzdHMiLyJub3RoaW5nIgorcmVmZXIgdG8gdGhlIHByZXNlbmNlIG9mIGEgcGF0aCBpbiB0aGUgc3BlY2lmaWVkIGNvbW1pdDoKKworCUkgICAgICAgICAgICAgICAgICAgSCAgICAgICAgTSAgICAgICAgUmVzdWx0CisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAwICBub3RoaW5nICAgICAgICAgICAgIG5vdGhpbmcgIG5vdGhpbmcgIChkb2VzIG5vdCBoYXBwZW4pCisgICAgIDEgIG5vdGhpbmcgICAgICAgICAgICAgbm90aGluZyAgZXhpc3RzICAgdXNlIE0KKyAgICAgMiAgbm90aGluZyAgICAgICAgICAgICBleGlzdHMgICBub3RoaW5nICByZW1vdmUgcGF0aCBmcm9tIGluZGV4CisgICAgIDMgIG5vdGhpbmcgICAgICAgICAgICAgZXhpc3RzICAgZXhpc3RzLCAgdXNlIE0gaWYgImluaXRpYWwgY2hlY2tvdXQiLAorCQkJCSAgICAgSCA9PSBNICAga2VlcCBpbmRleCBvdGhlcndpc2UKKwkJCQkgICAgIGV4aXN0cywgIGZhaWwKKwkJCQkgICAgIEggIT0gTQorCisgICAgICAgIGNsZWFuIEk9PUggIEk9PU0KKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgNCAgeWVzICAgTi9BICAgTi9BICAgICBub3RoaW5nICBub3RoaW5nICBrZWVwIGluZGV4CisgICAgIDUgIG5vICAgIE4vQSAgIE4vQSAgICAgbm90aGluZyAgbm90aGluZyAga2VlcCBpbmRleAorCisgICAgIDYgIHllcyAgIE4vQSAgIHllcyAgICAgbm90aGluZyAgZXhpc3RzICAga2VlcCBpbmRleAorICAgICA3ICBubyAgICBOL0EgICB5ZXMgICAgIG5vdGhpbmcgIGV4aXN0cyAgIGtlZXAgaW5kZXgKKyAgICAgOCAgeWVzICAgTi9BICAgbm8gICAgICBub3RoaW5nICBleGlzdHMgICBmYWlsCisgICAgIDkgIG5vICAgIE4vQSAgIG5vICAgICAgbm90aGluZyAgZXhpc3RzICAgZmFpbAorCisgICAgIDEwIHllcyAgIHllcyAgIE4vQSAgICAgZXhpc3RzICAgbm90aGluZyAgcmVtb3ZlIHBhdGggZnJvbSBpbmRleAorICAgICAxMSBubyAgICB5ZXMgICBOL0EgICAgIGV4aXN0cyAgIG5vdGhpbmcgIGZhaWwKKyAgICAgMTIgeWVzICAgbm8gICAgTi9BICAgICBleGlzdHMgICBub3RoaW5nICBmYWlsCisgICAgIDEzIG5vICAgIG5vICAgIE4vQSAgICAgZXhpc3RzICAgbm90aGluZyAgZmFpbAorCisJY2xlYW4gKEg9PU0pCisgICAgICAgLS0tLS0tCisgICAgIDE0IHllcyAgICAgICAgICAgICAgICAgZXhpc3RzICAgZXhpc3RzICAga2VlcCBpbmRleAorICAgICAxNSBubyAgICAgICAgICAgICAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGtlZXAgaW5kZXgKKworICAgICAgICBjbGVhbiBJPT1IICBJPT1NIChIIT1NKQorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAxNiB5ZXMgICBubyAgICBubyAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGZhaWwKKyAgICAgMTcgbm8gICAgbm8gICAgbm8gICAgICBleGlzdHMgICBleGlzdHMgICBmYWlsCisgICAgIDE4IHllcyAgIG5vICAgIHllcyAgICAgZXhpc3RzICAgZXhpc3RzICAga2VlcCBpbmRleAorICAgICAxOSBubyAgICBubyAgICB5ZXMgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGtlZXAgaW5kZXgKKyAgICAgMjAgeWVzICAgeWVzICAgbm8gICAgICBleGlzdHMgICBleGlzdHMgICB1c2UgTQorICAgICAyMSBubyAgICB5ZXMgICBubyAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGZhaWwKKworSW4gYWxsICJrZWVwIGluZGV4IiBjYXNlcywgdGhlIGluZGV4IGVudHJ5IHN0YXlzIGFzIGluIHRoZQorb3JpZ2luYWwgaW5kZXggZmlsZS4gIElmIHRoZSBlbnRyeSBpcyBub3QgdXAgdG8gZGF0ZSwKKydnaXQgcmVhZC10cmVlJyBrZWVwcyB0aGUgY29weSBpbiB0aGUgd29yayB0cmVlIGludGFjdCB3aGVuCitvcGVyYXRpbmcgdW5kZXIgdGhlIC11IGZsYWcuCisKK1doZW4gdGhpcyBmb3JtIG9mICdnaXQgcmVhZC10cmVlJyByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgeW91IGNhbgorc2VlIHdoaWNoIG9mIHRoZSAibG9jYWwgY2hhbmdlcyIgdGhhdCB5b3UgbWFkZSB3ZXJlIGNhcnJpZWQgZm9yd2FyZCBieSBydW5uaW5nCitgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJE1gLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKK25lY2Vzc2FyaWx5IG1hdGNoIHdoYXQgYGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICRIYCB3b3VsZCBoYXZlCitwcm9kdWNlZCBiZWZvcmUgc3VjaCBhIHR3byB0cmVlIG1lcmdlLiAgVGhpcyBpcyBiZWNhdXNlIG9mIGNhc2VzCisxOCBhbmQgMTkgLS0tIGlmIHlvdSBhbHJlYWR5IGhhZCB0aGUgY2hhbmdlcyBpbiAkTSAoZS5nLiBtYXliZQoreW91IHBpY2tlZCBpdCB1cCB2aWEgZS1tYWlsIGluIGEgcGF0Y2ggZm9ybSksIGBnaXQgZGlmZi1pbmRleAorLS1jYWNoZWQgJEhgIHdvdWxkIGhhdmUgdG9sZCB5b3UgYWJvdXQgdGhlIGNoYW5nZSBiZWZvcmUgdGhpcworbWVyZ2UsIGJ1dCBpdCB3b3VsZCBub3Qgc2hvdyBpbiBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJE1gCitvdXRwdXQgYWZ0ZXIgdGhlIHR3by10cmVlIG1lcmdlLgorCitDYXNlIDMgaXMgc2xpZ2h0bHkgdHJpY2t5IGFuZCBuZWVkcyBleHBsYW5hdGlvbi4gIFRoZSByZXN1bHQgZnJvbSB0aGlzCitydWxlIGxvZ2ljYWxseSBzaG91bGQgYmUgdG8gcmVtb3ZlIHRoZSBwYXRoIGlmIHRoZSB1c2VyIHN0YWdlZCB0aGUgcmVtb3ZhbAorb2YgdGhlIHBhdGggYW5kIHRoZW4gc3dpdGNoaW5nIHRvIGEgbmV3IGJyYW5jaC4gIFRoYXQgaG93ZXZlciB3aWxsIHByZXZlbnQKK3RoZSBpbml0aWFsIGNoZWNrb3V0IGZyb20gaGFwcGVuaW5nLCBzbyB0aGUgcnVsZSBpcyBtb2RpZmllZCB0byB1c2UgTSAobmV3Cit0cmVlKSBvbmx5IHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGluZGV4IGlzIGVtcHR5LiAgT3RoZXJ3aXNlIHRoZSByZW1vdmFsCitvZiB0aGUgcGF0aCBpcyBrZXB0IGFzIGxvbmcgYXMgJEggYW5kICRNIGFyZSB0aGUgc2FtZS4KKworMy1XYXkgTWVyZ2UKK35+fn5+fn5+fn5+CitFYWNoICJpbmRleCIgZW50cnkgaGFzIHR3byBiaXRzIHdvcnRoIG9mICJzdGFnZSIgc3RhdGUuIHN0YWdlIDAgaXMgdGhlCitub3JtYWwgb25lLCBhbmQgaXMgdGhlIG9ubHkgb25lIHlvdSdkIHNlZSBpbiBhbnkga2luZCBvZiBub3JtYWwgdXNlLgorCitIb3dldmVyLCB3aGVuIHlvdSBkbyAnZ2l0IHJlYWQtdHJlZScgd2l0aCB0aHJlZSB0cmVlcywgdGhlICJzdGFnZSIKK3N0YXJ0cyBvdXQgYXQgMS4KKworVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gZG8KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIC1tIDx0cmVlMT4gPHRyZWUyPiA8dHJlZTM+CistLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB5b3Ugd2lsbCBlbmQgdXAgd2l0aCBhbiBpbmRleCB3aXRoIGFsbCBvZiB0aGUgPHRyZWUxPiBlbnRyaWVzIGluCisic3RhZ2UxIiwgYWxsIG9mIHRoZSA8dHJlZTI+IGVudHJpZXMgaW4gInN0YWdlMiIgYW5kIGFsbCBvZiB0aGUKKzx0cmVlMz4gZW50cmllcyBpbiAic3RhZ2UzIi4gIFdoZW4gcGVyZm9ybWluZyBhIG1lcmdlIG9mIGFub3RoZXIKK2JyYW5jaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgd2UgdXNlIHRoZSBjb21tb24gYW5jZXN0b3IgdHJlZQorYXMgPHRyZWUxPiwgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQgYXMgPHRyZWUyPiwgYW5kIHRoZSBvdGhlcgorYnJhbmNoIGhlYWQgYXMgPHRyZWUzPi4KKworRnVydGhlcm1vcmUsICdnaXQgcmVhZC10cmVlJyBoYXMgc3BlY2lhbC1jYXNlIGxvZ2ljIHRoYXQgc2F5czogaWYgeW91IHNlZQorYSBmaWxlIHRoYXQgbWF0Y2hlcyBpbiBhbGwgcmVzcGVjdHMgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZXMsIGl0CisiY29sbGFwc2VzIiBiYWNrIHRvICJzdGFnZTAiOgorCisgICAtIHN0YWdlIDIgYW5kIDMgYXJlIHRoZSBzYW1lOyB0YWtlIG9uZSBvciB0aGUgb3RoZXIgKGl0IG1ha2VzIG5vCisgICAgIGRpZmZlcmVuY2UgLSB0aGUgc2FtZSB3b3JrIGhhcyBiZWVuIGRvbmUgb24gb3VyIGJyYW5jaCBpbgorICAgICBzdGFnZSAyIGFuZCB0aGVpciBicmFuY2ggaW4gc3RhZ2UgMykKKworICAgLSBzdGFnZSAxIGFuZCBzdGFnZSAyIGFyZSB0aGUgc2FtZSBhbmQgc3RhZ2UgMyBpcyBkaWZmZXJlbnQ7IHRha2UKKyAgICAgc3RhZ2UgMyAob3VyIGJyYW5jaCBpbiBzdGFnZSAyIGRpZCBub3QgZG8gYW55dGhpbmcgc2luY2UgdGhlCisgICAgIGFuY2VzdG9yIGluIHN0YWdlIDEgd2hpbGUgdGhlaXIgYnJhbmNoIGluIHN0YWdlIDMgd29ya2VkIG9uCisgICAgIGl0KQorCisgICAtIHN0YWdlIDEgYW5kIHN0YWdlIDMgYXJlIHRoZSBzYW1lIGFuZCBzdGFnZSAyIGlzIGRpZmZlcmVudCB0YWtlCisgICAgIHN0YWdlIDIgKHdlIGRpZCBzb21ldGhpbmcgd2hpbGUgdGhleSBkaWQgbm90aGluZykKKworVGhlICdnaXQgd3JpdGUtdHJlZScgY29tbWFuZCByZWZ1c2VzIHRvIHdyaXRlIGEgbm9uc2Vuc2ljYWwgdHJlZSwgYW5kIGl0Cit3aWxsIGNvbXBsYWluIGFib3V0IHVubWVyZ2VkIGVudHJpZXMgaWYgaXQgc2VlcyBhIHNpbmdsZSBlbnRyeSB0aGF0IGlzIG5vdAorc3RhZ2UgMC4KKworT0ssIHRoaXMgYWxsIHNvdW5kcyBsaWtlIGEgY29sbGVjdGlvbiBvZiB0b3RhbGx5IG5vbnNlbnNpY2FsIHJ1bGVzLAorYnV0IGl0J3MgYWN0dWFsbHkgZXhhY3RseSB3aGF0IHlvdSB3YW50IGluIG9yZGVyIHRvIGRvIGEgZmFzdAorbWVyZ2UuIFRoZSBkaWZmZXJlbnQgc3RhZ2VzIHJlcHJlc2VudCB0aGUgInJlc3VsdCB0cmVlIiAoc3RhZ2UgMCwgYWthCisibWVyZ2VkIiksIHRoZSBvcmlnaW5hbCB0cmVlIChzdGFnZSAxLCBha2EgIm9yaWciKSwgYW5kIHRoZSB0d28gdHJlZXMKK3lvdSBhcmUgdHJ5aW5nIHRvIG1lcmdlIChzdGFnZSAyIGFuZCAzIHJlc3BlY3RpdmVseSkuCisKK1RoZSBvcmRlciBvZiBzdGFnZXMgMSwgMiBhbmQgMyAoaGVuY2UgdGhlIG9yZGVyIG9mIHRocmVlCis8dHJlZS1pc2g+IGNvbW1hbmQgbGluZSBhcmd1bWVudHMpIGFyZSBzaWduaWZpY2FudCB3aGVuIHlvdQorc3RhcnQgYSAzLXdheSBtZXJnZSB3aXRoIGFuIGluZGV4IGZpbGUgdGhhdCBpcyBhbHJlYWR5Citwb3B1bGF0ZWQuICBIZXJlIGlzIGFuIG91dGxpbmUgb2YgaG93IHRoZSBhbGdvcml0aG0gd29ya3M6CisKKy0gaWYgYSBmaWxlIGV4aXN0cyBpbiBpZGVudGljYWwgZm9ybWF0IGluIGFsbCB0aHJlZSB0cmVlcywgaXQgd2lsbAorICBhdXRvbWF0aWNhbGx5IGNvbGxhcHNlIHRvICJtZXJnZWQiIHN0YXRlIGJ5ICdnaXQgcmVhZC10cmVlJy4KKworLSBhIGZpbGUgdGhhdCBoYXMgX2FueV8gZGlmZmVyZW5jZSB3aGF0LXNvLWV2ZXIgaW4gdGhlIHRocmVlIHRyZWVzCisgIHdpbGwgc3RheSBhcyBzZXBhcmF0ZSBlbnRyaWVzIGluIHRoZSBpbmRleC4gSXQncyB1cCB0byAicG9yY2VsYWluCisgIHBvbGljeSIgdG8gZGV0ZXJtaW5lIGhvdyB0byByZW1vdmUgdGhlIG5vbi0wIHN0YWdlcywgYW5kIGluc2VydCBhCisgIG1lcmdlZCB2ZXJzaW9uLgorCistIHRoZSBpbmRleCBmaWxlIHNhdmVzIGFuZCByZXN0b3JlcyB3aXRoIGFsbCB0aGlzIGluZm9ybWF0aW9uLCBzbyB5b3UKKyAgY2FuIG1lcmdlIHRoaW5ncyBpbmNyZW1lbnRhbGx5LCBidXQgYXMgbG9uZyBhcyBpdCBoYXMgZW50cmllcyBpbgorICBzdGFnZXMgMS8yLzMgKGkuZS4sICJ1bm1lcmdlZCBlbnRyaWVzIikgeW91IGNhbid0IHdyaXRlIHRoZSByZXN1bHQuIFNvCisgIG5vdyB0aGUgbWVyZ2UgYWxnb3JpdGhtIGVuZHMgdXAgYmVpbmcgcmVhbGx5IHNpbXBsZToKKworICAqIHlvdSB3YWxrIHRoZSBpbmRleCBpbiBvcmRlciwgYW5kIGlnbm9yZSBhbGwgZW50cmllcyBvZiBzdGFnZSAwLAorICAgIHNpbmNlIHRoZXkndmUgYWxyZWFkeSBiZWVuIGRvbmUuCisKKyAgKiBpZiB5b3UgZmluZCBhICJzdGFnZTEiLCBidXQgbm8gbWF0Y2hpbmcgInN0YWdlMiIgb3IgInN0YWdlMyIsIHlvdQorICAgIGtub3cgaXQncyBiZWVuIHJlbW92ZWQgZnJvbSBib3RoIHRyZWVzIChpdCBvbmx5IGV4aXN0ZWQgaW4gdGhlCisgICAgb3JpZ2luYWwgdHJlZSksIGFuZCB5b3UgcmVtb3ZlIHRoYXQgZW50cnkuCisKKyAgKiBpZiB5b3UgZmluZCBhIG1hdGNoaW5nICJzdGFnZTIiIGFuZCAic3RhZ2UzIiB0cmVlLCB5b3UgcmVtb3ZlIG9uZQorICAgIG9mIHRoZW0sIGFuZCB0dXJuIHRoZSBvdGhlciBpbnRvIGEgInN0YWdlMCIgZW50cnkuIFJlbW92ZSBhbnkKKyAgICBtYXRjaGluZyAic3RhZ2UxIiBlbnRyeSBpZiBpdCBleGlzdHMgdG9vLiAgLi4gYWxsIHRoZSBub3JtYWwKKyAgICB0cml2aWFsIHJ1bGVzIC4uCisKK1lvdSB3b3VsZCBub3JtYWxseSB1c2UgJ2dpdCBtZXJnZS1pbmRleCcgd2l0aCBzdXBwbGllZAorJ2dpdCBtZXJnZS1vbmUtZmlsZScgdG8gZG8gdGhpcyBsYXN0IHN0ZXAuICBUaGUgc2NyaXB0IHVwZGF0ZXMKK3RoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFzIGl0IG1lcmdlcyBlYWNoIHBhdGggYW5kIGF0IHRoZQorZW5kIG9mIGEgc3VjY2Vzc2Z1bCBtZXJnZS4KKworV2hlbiB5b3Ugc3RhcnQgYSAzLXdheSBtZXJnZSB3aXRoIGFuIGluZGV4IGZpbGUgdGhhdCBpcyBhbHJlYWR5Citwb3B1bGF0ZWQsIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCByZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiB0aGUKK2ZpbGVzIGluIHlvdXIgd29yayB0cmVlLCBhbmQgeW91IGNhbiBldmVuIGhhdmUgZmlsZXMgd2l0aAorY2hhbmdlcyB1bnJlY29yZGVkIGluIHRoZSBpbmRleCBmaWxlLiAgSXQgaXMgZnVydGhlciBhc3N1bWVkCit0aGF0IHRoaXMgc3RhdGUgaXMgImRlcml2ZWQiIGZyb20gdGhlIHN0YWdlIDIgdHJlZS4gIFRoZSAzLXdheQorbWVyZ2UgcmVmdXNlcyB0byBydW4gaWYgaXQgZmluZHMgYW4gZW50cnkgaW4gdGhlIG9yaWdpbmFsIGluZGV4CitmaWxlIHRoYXQgZG9lcyBub3QgbWF0Y2ggc3RhZ2UgMi4KKworVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgeW91IGZyb20gbG9zaW5nIHlvdXIgd29yay1pbi1wcm9ncmVzcworY2hhbmdlcywgYW5kIG1peGluZyB5b3VyIHJhbmRvbSBjaGFuZ2VzIGluIGFuIHVucmVsYXRlZCBtZXJnZQorY29tbWl0LiAgVG8gaWxsdXN0cmF0ZSwgc3VwcG9zZSB5b3Ugc3RhcnQgZnJvbSB3aGF0IGhhcyBiZWVuCitjb21taXR0ZWQgbGFzdCB0byB5b3VyIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgSkM9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIkhFQUReMCJgCiskIGdpdCBjaGVja291dC1pbmRleCAtZiAtdSAtYSAkSkMKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGRvIHJhbmRvbSBlZGl0cywgd2l0aG91dCBydW5uaW5nICdnaXQgdXBkYXRlLWluZGV4Jy4gIEFuZCB0aGVuCit5b3Ugbm90aWNlIHRoYXQgdGhlIHRpcCBvZiB5b3VyICJ1cHN0cmVhbSIgdHJlZSBoYXMgYWR2YW5jZWQKK3NpbmNlIHlvdSBwdWxsZWQgZnJvbSBoaW06CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIGdpdDovLy4uLi4gbGludXMKKyQgTFQ9YGdpdCByZXYtcGFyc2UgRkVUQ0hfSEVBRGAKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91ciB3b3JrIHRyZWUgaXMgc3RpbGwgYmFzZWQgb24geW91ciBIRUFEICgkSkMpLCBidXQgeW91IGhhdmUKK3NvbWUgZWRpdHMgc2luY2UuICBUaHJlZS13YXkgbWVyZ2UgbWFrZXMgc3VyZSB0aGF0IHlvdSBoYXZlIG5vdAorYWRkZWQgb3IgbW9kaWZpZWQgaW5kZXggZW50cmllcyBzaW5jZSAkSkMsIGFuZCBpZiB5b3UgaGF2ZW4ndCwKK3RoZW4gZG9lcyB0aGUgcmlnaHQgdGhpbmcuICBTbyB3aXRoIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYWQtdHJlZSAtbSAtdSBgZ2l0IG1lcmdlLWJhc2UgJEpDICRMVGAgJEpDICRMVAorJCBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIC1hCiskIGVjaG8gIk1lcmdlIHdpdGggTGludXMiIHwgXAorICBnaXQgY29tbWl0LXRyZWUgYGdpdCB3cml0ZS10cmVlYCAtcCAkSkMgLXAgJExUCistLS0tLS0tLS0tLS0tLS0tCisKK3doYXQgeW91IHdvdWxkIGNvbW1pdCBpcyBhIHB1cmUgbWVyZ2UgYmV0d2VlbiAkSkMgYW5kICRMVCB3aXRob3V0Cit5b3VyIHdvcmstaW4tcHJvZ3Jlc3MgY2hhbmdlcywgYW5kIHlvdXIgd29yayB0cmVlIHdvdWxkIGJlCit1cGRhdGVkIHRvIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLgorCitIb3dldmVyLCBpZiB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdAord291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgdGhpcyBtZXJnZSwgJ2dpdCByZWFkLXRyZWUnIHdpbGwgcmVmdXNlCit0byBydW4gdG8gcHJldmVudCB5b3VyIGNoYW5nZXMgZnJvbSBiZWluZyBsb3N0LgorCitJbiBvdGhlciB3b3JkcywgdGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeSBhYm91dCB3aGF0IGV4aXN0cyBvbmx5CitpbiB0aGUgd29ya2luZyB0cmVlLiAgV2hlbiB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIGluIGEgcGFydCBvZgordGhlIHByb2plY3QgdGhhdCBpcyBub3QgaW52b2x2ZWQgaW4gdGhlIG1lcmdlLCB5b3VyIGNoYW5nZXMgZG8KK25vdCBpbnRlcmZlcmUgd2l0aCB0aGUgbWVyZ2UsIGFuZCBhcmUga2VwdCBpbnRhY3QuICBXaGVuIHRoZXkKKypkbyogaW50ZXJmZXJlLCB0aGUgbWVyZ2UgZG9lcyBub3QgZXZlbiBzdGFydCAoJ2dpdCByZWFkLXRyZWUnCitjb21wbGFpbnMgbG91ZGx5IGFuZCBmYWlscyB3aXRob3V0IG1vZGlmeWluZyBhbnl0aGluZykuICBJbiBzdWNoCithIGNhc2UsIHlvdSBjYW4gc2ltcGx5IGNvbnRpbnVlIGRvaW5nIHdoYXQgeW91IHdlcmUgaW4gdGhlCittaWRkbGUgb2YgZG9pbmcsIGFuZCB3aGVuIHlvdXIgd29ya2luZyB0cmVlIGlzIHJlYWR5IChpLmUuIHlvdQoraGF2ZSBmaW5pc2hlZCB5b3VyIHdvcmstaW4tcHJvZ3Jlc3MpLCBhdHRlbXB0IHRoZSBtZXJnZSBhZ2Fpbi4KKworCitTcGFyc2UgY2hlY2tvdXQKKy0tLS0tLS0tLS0tLS0tLQorCisiU3BhcnNlIGNoZWNrb3V0IiBhbGxvd3MgcG9wdWxhdGluZyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgc3BhcnNlbHkuCitJdCB1c2VzIHRoZSBza2lwLXdvcmt0cmVlIGJpdCAoc2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXSkgdG8gdGVsbAorR2l0IHdoZXRoZXIgYSBmaWxlIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyB3b3J0aCBsb29raW5nIGF0LgorCisnZ2l0IHJlYWQtdHJlZScgYW5kIG90aGVyIG1lcmdlLWJhc2VkIGNvbW1hbmRzICgnZ2l0IG1lcmdlJywgJ2dpdAorY2hlY2tvdXQnLi4uKSBjYW4gaGVscCBtYWludGFpbmluZyB0aGUgc2tpcC13b3JrdHJlZSBiaXRtYXAgYW5kIHdvcmtpbmcKK2RpcmVjdG9yeSB1cGRhdGUuIGAkR0lUX0RJUi9pbmZvL3NwYXJzZS1jaGVja291dGAgaXMgdXNlZCB0bworZGVmaW5lIHRoZSBza2lwLXdvcmt0cmVlIHJlZmVyZW5jZSBiaXRtYXAuIFdoZW4gJ2dpdCByZWFkLXRyZWUnIG5lZWRzCit0byB1cGRhdGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBpdCByZXNldHMgdGhlIHNraXAtd29ya3RyZWUgYml0IGluIHRoZSBpbmRleAorYmFzZWQgb24gdGhpcyBmaWxlLCB3aGljaCB1c2VzIHRoZSBzYW1lIHN5bnRheCBhcyAuZ2l0aWdub3JlIGZpbGVzLgorSWYgYW4gZW50cnkgbWF0Y2hlcyBhIHBhdHRlcm4gaW4gdGhpcyBmaWxlLCBza2lwLXdvcmt0cmVlIHdpbGwgbm90IGJlCitzZXQgb24gdGhhdCBlbnRyeS4gT3RoZXJ3aXNlLCBza2lwLXdvcmt0cmVlIHdpbGwgYmUgc2V0LgorCitUaGVuIGl0IGNvbXBhcmVzIHRoZSBuZXcgc2tpcC13b3JrdHJlZSB2YWx1ZSB3aXRoIHRoZSBwcmV2aW91cyBvbmUuIElmCitza2lwLXdvcmt0cmVlIHR1cm5zIGZyb20gc2V0IHRvIHVuc2V0LCBpdCB3aWxsIGFkZCB0aGUgY29ycmVzcG9uZGluZworZmlsZSBiYWNrLiBJZiBpdCB0dXJucyBmcm9tIHVuc2V0IHRvIHNldCwgdGhhdCBmaWxlIHdpbGwgYmUgcmVtb3ZlZC4KKworV2hpbGUgYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YCBpcyB1c3VhbGx5IHVzZWQgdG8gc3BlY2lmeSB3aGF0CitmaWxlcyBhcmUgaW4sIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IHdoYXQgZmlsZXMgYXJlIF9ub3RfIGluLCB1c2luZworbmVnYXRlIHBhdHRlcm5zLiBGb3IgZXhhbXBsZSwgdG8gcmVtb3ZlIHRoZSBmaWxlIGB1bndhbnRlZGA6CisKKy0tLS0tLS0tLS0tLS0tLS0KKy8qCishdW53YW50ZWQKKy0tLS0tLS0tLS0tLS0tLS0KKworQW5vdGhlciB0cmlja3kgdGhpbmcgaXMgZnVsbHkgcmVwb3B1bGF0aW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHlvdQorbm8gbG9uZ2VyIHdhbnQgc3BhcnNlIGNoZWNrb3V0LiBZb3UgY2Fubm90IGp1c3QgZGlzYWJsZSAic3BhcnNlCitjaGVja291dCIgYmVjYXVzZSBza2lwLXdvcmt0cmVlIGJpdHMgYXJlIHN0aWxsIGluIHRoZSBpbmRleCBhbmQgeW91ciB3b3JraW5nCitkaXJlY3RvcnkgaXMgc3RpbGwgc3BhcnNlbHkgcG9wdWxhdGVkLiBZb3Ugc2hvdWxkIHJlLXBvcHVsYXRlIHRoZSB3b3JraW5nCitkaXJlY3Rvcnkgd2l0aCB0aGUgYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YCBmaWxlIGNvbnRlbnQgYXMKK2ZvbGxvd3M6CisKKy0tLS0tLS0tLS0tLS0tLS0KKy8qCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZW4geW91IGNhbiBkaXNhYmxlIHNwYXJzZSBjaGVja291dC4gU3BhcnNlIGNoZWNrb3V0IHN1cHBvcnQgaW4gJ2dpdAorcmVhZC10cmVlJyBhbmQgc2ltaWxhciBjb21tYW5kcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBZb3UgbmVlZCB0bwordHVybiBgY29yZS5zcGFyc2VDaGVja291dGAgb24gaW4gb3JkZXIgdG8gaGF2ZSBzcGFyc2UgY2hlY2tvdXQKK3N1cHBvcnQuCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC13cml0ZS10cmVlWzFdOyBsaW5rZ2l0OmdpdC1scy1maWxlc1sxXTsKK2xpbmtnaXQ6Z2l0aWdub3JlWzVdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEwNjdlYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKQEAgLTAsMCArMSw3NDYgQEAKK2dpdC1yZWJhc2UoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlYmFzZSAtIEZvcndhcmQtcG9ydCBsb2NhbCBjb21taXRzIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlYmFzZScgWy1pIHwgLS1pbnRlcmFjdGl2ZV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XQorCVs8dXBzdHJlYW0+XSBbPGJyYW5jaD5dCisnZ2l0IHJlYmFzZScgWy1pIHwgLS1pbnRlcmFjdGl2ZV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XQorCS0tcm9vdCBbPGJyYW5jaD5dCisnZ2l0IHJlYmFzZScgLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQgfCAtLWVkaXQtdG9kbworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0lmIDxicmFuY2g+IGlzIHNwZWNpZmllZCwgJ2dpdCByZWJhc2UnIHdpbGwgcGVyZm9ybSBhbiBhdXRvbWF0aWMKK2BnaXQgY2hlY2tvdXQgPGJyYW5jaD5gIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgT3RoZXJ3aXNlCitpdCByZW1haW5zIG9uIHRoZSBjdXJyZW50IGJyYW5jaC4KKworSWYgPHVwc3RyZWFtPiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgdXBzdHJlYW0gY29uZmlndXJlZCBpbgorYnJhbmNoLjxuYW1lPi5yZW1vdGUgYW5kIGJyYW5jaC48bmFtZT4ubWVyZ2Ugb3B0aW9ucyB3aWxsIGJlIHVzZWQ7IHNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBkZXRhaWxzLiAgSWYgeW91IGFyZSBjdXJyZW50bHkgbm90IG9uIGFueQorYnJhbmNoIG9yIGlmIHRoZSBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBoYXZlIGEgY29uZmlndXJlZCB1cHN0cmVhbSwKK3RoZSByZWJhc2Ugd2lsbCBhYm9ydC4KKworQWxsIGNoYW5nZXMgbWFkZSBieSBjb21taXRzIGluIHRoZSBjdXJyZW50IGJyYW5jaCBidXQgdGhhdCBhcmUgbm90CitpbiA8dXBzdHJlYW0+IGFyZSBzYXZlZCB0byBhIHRlbXBvcmFyeSBhcmVhLiAgVGhpcyBpcyB0aGUgc2FtZSBzZXQKK29mIGNvbW1pdHMgdGhhdCB3b3VsZCBiZSBzaG93biBieSBgZ2l0IGxvZyA8dXBzdHJlYW0+Li5IRUFEYCAob3IKK2BnaXQgbG9nIEhFQURgLCBpZiAtLXJvb3QgaXMgc3BlY2lmaWVkKS4KKworVGhlIGN1cnJlbnQgYnJhbmNoIGlzIHJlc2V0IHRvIDx1cHN0cmVhbT4sIG9yIDxuZXdiYXNlPiBpZiB0aGUKKy0tb250byBvcHRpb24gd2FzIHN1cHBsaWVkLiAgVGhpcyBoYXMgdGhlIGV4YWN0IHNhbWUgZWZmZWN0IGFzCitgZ2l0IHJlc2V0IC0taGFyZCA8dXBzdHJlYW0+YCAob3IgPG5ld2Jhc2U+KS4gIE9SSUdfSEVBRCBpcyBzZXQKK3RvIHBvaW50IGF0IHRoZSB0aXAgb2YgdGhlIGJyYW5jaCBiZWZvcmUgdGhlIHJlc2V0LgorCitUaGUgY29tbWl0cyB0aGF0IHdlcmUgcHJldmlvdXNseSBzYXZlZCBpbnRvIHRoZSB0ZW1wb3JhcnkgYXJlYSBhcmUKK3RoZW4gcmVhcHBsaWVkIHRvIHRoZSBjdXJyZW50IGJyYW5jaCwgb25lIGJ5IG9uZSwgaW4gb3JkZXIuIE5vdGUgdGhhdAorYW55IGNvbW1pdHMgaW4gSEVBRCB3aGljaCBpbnRyb2R1Y2UgdGhlIHNhbWUgdGV4dHVhbCBjaGFuZ2VzIGFzIGEgY29tbWl0CitpbiBIRUFELi48dXBzdHJlYW0+IGFyZSBvbWl0dGVkIChpLmUuLCBhIHBhdGNoIGFscmVhZHkgYWNjZXB0ZWQgdXBzdHJlYW0KK3dpdGggYSBkaWZmZXJlbnQgY29tbWl0IG1lc3NhZ2Ugb3IgdGltZXN0YW1wIHdpbGwgYmUgc2tpcHBlZCkuCisKK0l0IGlzIHBvc3NpYmxlIHRoYXQgYSBtZXJnZSBmYWlsdXJlIHdpbGwgcHJldmVudCB0aGlzIHByb2Nlc3MgZnJvbSBiZWluZworY29tcGxldGVseSBhdXRvbWF0aWMuICBZb3Ugd2lsbCBoYXZlIHRvIHJlc29sdmUgYW55IHN1Y2ggbWVyZ2UgZmFpbHVyZQorYW5kIHJ1biBgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlYC4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIGJ5cGFzcyB0aGUgY29tbWl0Cit0aGF0IGNhdXNlZCB0aGUgbWVyZ2UgZmFpbHVyZSB3aXRoIGBnaXQgcmViYXNlIC0tc2tpcGAuICBUbyBjaGVjayBvdXQgdGhlCitvcmlnaW5hbCA8YnJhbmNoPiBhbmQgcmVtb3ZlIHRoZSAuZ2l0L3JlYmFzZS1hcHBseSB3b3JraW5nIGZpbGVzLCB1c2UgdGhlCitjb21tYW5kIGBnaXQgcmViYXNlIC0tYWJvcnRgIGluc3RlYWQuCisKK0Fzc3VtZSB0aGUgZm9sbG93aW5nIGhpc3RvcnkgZXhpc3RzIGFuZCB0aGUgY3VycmVudCBicmFuY2ggaXMgInRvcGljIjoKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgQS0tLUItLS1DIHRvcGljCisgICAgICAgICAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitGcm9tIHRoaXMgcG9pbnQsIHRoZSByZXN1bHQgb2YgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKworICAgIGdpdCByZWJhc2UgbWFzdGVyCisgICAgZ2l0IHJlYmFzZSBtYXN0ZXIgdG9waWMKKword291bGQgYmU6CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgQSctLUInLS1DJyB0b3BpYworICAgICAgICAgICAgICAgICAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCisqTk9URToqIFRoZSBsYXR0ZXIgZm9ybSBpcyBqdXN0IGEgc2hvcnQtaGFuZCBvZiBgZ2l0IGNoZWNrb3V0IHRvcGljYAorZm9sbG93ZWQgYnkgYGdpdCByZWJhc2UgbWFzdGVyYC4gV2hlbiByZWJhc2UgZXhpdHMgYHRvcGljYCB3aWxsCityZW1haW4gdGhlIGNoZWNrZWQtb3V0IGJyYW5jaC4KKworSWYgdGhlIHVwc3RyZWFtIGJyYW5jaCBhbHJlYWR5IGNvbnRhaW5zIGEgY2hhbmdlIHlvdSBoYXZlIG1hZGUgKGUuZy4sCitiZWNhdXNlIHlvdSBtYWlsZWQgYSBwYXRjaCB3aGljaCB3YXMgYXBwbGllZCB1cHN0cmVhbSksIHRoZW4gdGhhdCBjb21taXQKK3dpbGwgYmUgc2tpcHBlZC4gRm9yIGV4YW1wbGUsIHJ1bm5pbmcgYGdpdCByZWJhc2UgbWFzdGVyYCBvbiB0aGUKK2ZvbGxvd2luZyBoaXN0b3J5IChpbiB3aGljaCBBJyBhbmQgQSBpbnRyb2R1Y2UgdGhlIHNhbWUgc2V0IG9mIGNoYW5nZXMsCitidXQgaGF2ZSBkaWZmZXJlbnQgY29tbWl0dGVyIGluZm9ybWF0aW9uKToKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgQS0tLUItLS1DIHRvcGljCisgICAgICAgICAvCisgICAgRC0tLUUtLS1BJy0tLUYgbWFzdGVyCistLS0tLS0tLS0tLS0KKword2lsbCByZXN1bHQgaW46CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgIEInLS0tQycgdG9waWMKKyAgICAgICAgICAgICAgICAgIC8KKyAgICBELS0tRS0tLUEnLS0tRiBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitIZXJlIGlzIGhvdyB5b3Ugd291bGQgdHJhbnNwbGFudCBhIHRvcGljIGJyYW5jaCBiYXNlZCBvbiBvbmUKK2JyYW5jaCB0byBhbm90aGVyLCB0byBwcmV0ZW5kIHRoYXQgeW91IGZvcmtlZCB0aGUgdG9waWMgYnJhbmNoCitmcm9tIHRoZSBsYXR0ZXIgYnJhbmNoLCB1c2luZyBgcmViYXNlIC0tb250b2AuCisKK0ZpcnN0IGxldCdzIGFzc3VtZSB5b3VyICd0b3BpYycgaXMgYmFzZWQgb24gYnJhbmNoICduZXh0Jy4KK0ZvciBleGFtcGxlLCBhIGZlYXR1cmUgZGV2ZWxvcGVkIGluICd0b3BpYycgZGVwZW5kcyBvbiBzb21lCitmdW5jdGlvbmFsaXR5IHdoaWNoIGlzIGZvdW5kIGluICduZXh0Jy4KKworLS0tLS0tLS0tLS0tCisgICAgby0tLW8tLS1vLS0tby0tLW8gIG1hc3RlcgorICAgICAgICAgXAorICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vICBuZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLW8tLS1vICB0b3BpYworLS0tLS0tLS0tLS0tCisKK1dlIHdhbnQgdG8gbWFrZSAndG9waWMnIGZvcmtlZCBmcm9tIGJyYW5jaCAnbWFzdGVyJzsgZm9yIGV4YW1wbGUsCitiZWNhdXNlIHRoZSBmdW5jdGlvbmFsaXR5IG9uIHdoaWNoICd0b3BpYycgZGVwZW5kcyB3YXMgbWVyZ2VkIGludG8gdGhlCittb3JlIHN0YWJsZSAnbWFzdGVyJyBicmFuY2guIFdlIHdhbnQgb3VyIHRyZWUgdG8gbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorICAgIG8tLS1vLS0tby0tLW8tLS1vICBtYXN0ZXIKKyAgICAgICAgfCAgICAgICAgICAgIFwKKyAgICAgICAgfCAgICAgICAgICAgICBvJy0tbyctLW8nICB0b3BpYworICAgICAgICAgXAorICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vICBuZXh0CistLS0tLS0tLS0tLS0KKworV2UgY2FuIGdldCB0aGlzIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICAgIGdpdCByZWJhc2UgLS1vbnRvIG1hc3RlciBuZXh0IHRvcGljCisKKworQW5vdGhlciBleGFtcGxlIG9mIC0tb250byBvcHRpb24gaXMgdG8gcmViYXNlIHBhcnQgb2YgYQorYnJhbmNoLiAgSWYgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjoKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC0tLUktLS1KIHRvcGljQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLworICAgICAgICAgICAgICAgICAgRS0tLUYtLS1HICB0b3BpY0EKKyAgICAgICAgICAgICAgICAgLworICAgIEEtLS1CLS0tQy0tLUQgIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK3RoZW4gdGhlIGNvbW1hbmQKKworICAgIGdpdCByZWJhc2UgLS1vbnRvIG1hc3RlciB0b3BpY0EgdG9waWNCCisKK3dvdWxkIHJlc3VsdCBpbjoKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgIEgnLS1JJy0tSicgIHRvcGljQgorICAgICAgICAgICAgICAgIC8KKyAgICAgICAgICAgICAgICB8IEUtLS1GLS0tRyAgdG9waWNBCisgICAgICAgICAgICAgICAgfC8KKyAgICBBLS0tQi0tLUMtLS1EICBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHVzZWZ1bCB3aGVuIHRvcGljQiBkb2VzIG5vdCBkZXBlbmQgb24gdG9waWNBLgorCitBIHJhbmdlIG9mIGNvbW1pdHMgY291bGQgYWxzbyBiZSByZW1vdmVkIHdpdGggcmViYXNlLiAgSWYgd2UgaGF2ZQordGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisKKy0tLS0tLS0tLS0tLQorICAgIEUtLS1GLS0tRy0tLUgtLS1JLS0tSiAgdG9waWNBCistLS0tLS0tLS0tLS0KKwordGhlbiB0aGUgY29tbWFuZAorCisgICAgZ2l0IHJlYmFzZSAtLW9udG8gdG9waWNBfjUgdG9waWNBfjMgdG9waWNBCisKK3dvdWxkIHJlc3VsdCBpbiB0aGUgcmVtb3ZhbCBvZiBjb21taXRzIEYgYW5kIEc6CisKKy0tLS0tLS0tLS0tLQorICAgIEUtLS1IJy0tLUknLS0tSicgIHRvcGljQQorLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdXNlZnVsIGlmIEYgYW5kIEcgd2VyZSBmbGF3ZWQgaW4gc29tZSB3YXksIG9yIHNob3VsZCBub3QgYmUKK3BhcnQgb2YgdG9waWNBLiAgTm90ZSB0aGF0IHRoZSBhcmd1bWVudCB0byAtLW9udG8gYW5kIHRoZSA8dXBzdHJlYW0+CitwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWxpZCBjb21taXQtaXNoLgorCitJbiBjYXNlIG9mIGNvbmZsaWN0LCAnZ2l0IHJlYmFzZScgd2lsbCBzdG9wIGF0IHRoZSBmaXJzdCBwcm9ibGVtYXRpYyBjb21taXQKK2FuZCBsZWF2ZSBjb25mbGljdCBtYXJrZXJzIGluIHRoZSB0cmVlLiAgWW91IGNhbiB1c2UgJ2dpdCBkaWZmJyB0byBsb2NhdGUKK3RoZSBtYXJrZXJzICg8PDw8PDwpIGFuZCBtYWtlIGVkaXRzIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0LiAgRm9yIGVhY2gKK2ZpbGUgeW91IGVkaXQsIHlvdSBuZWVkIHRvIHRlbGwgZ2l0IHRoYXQgdGhlIGNvbmZsaWN0IGhhcyBiZWVuIHJlc29sdmVkLAordHlwaWNhbGx5IHRoaXMgd291bGQgYmUgZG9uZSB3aXRoCisKKworICAgIGdpdCBhZGQgPGZpbGVuYW1lPgorCisKK0FmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3QgbWFudWFsbHkgYW5kIHVwZGF0aW5nIHRoZSBpbmRleCB3aXRoIHRoZQorZGVzaXJlZCByZXNvbHV0aW9uLCB5b3UgY2FuIGNvbnRpbnVlIHRoZSByZWJhc2luZyBwcm9jZXNzIHdpdGgKKworCisgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisKKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1bmRvIHRoZSAnZ2l0IHJlYmFzZScgd2l0aAorCisKKyAgICBnaXQgcmViYXNlIC0tYWJvcnQKKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCityZWJhc2Uuc3RhdDo6CisJV2hldGhlciB0byBzaG93IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIHNpbmNlIHRoZSBsYXN0CisJcmViYXNlLiBGYWxzZSBieSBkZWZhdWx0LgorCityZWJhc2UuYXV0b3NxdWFzaDo6CisJSWYgc2V0IHRvIHRydWUgZW5hYmxlICctLWF1dG9zcXVhc2gnIG9wdGlvbiBieSBkZWZhdWx0LgorCitPUFRJT05TCistLS0tLS0tCistLW9udG8gPG5ld2Jhc2U+OjoKKwlTdGFydGluZyBwb2ludCBhdCB3aGljaCB0byBjcmVhdGUgdGhlIG5ldyBjb21taXRzLiBJZiB0aGUKKwktLW9udG8gb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzdGFydGluZyBwb2ludCBpcworCTx1cHN0cmVhbT4uICBNYXkgYmUgYW55IHZhbGlkIGNvbW1pdCwgYW5kIG5vdCBqdXN0IGFuCisJZXhpc3RpbmcgYnJhbmNoIG5hbWUuCisrCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IG1heSB1c2UgIkFcLi4uQiIgYXMgYSBzaG9ydGN1dCBmb3IgdGhlCittZXJnZSBiYXNlIG9mIEEgYW5kIEIgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZS4gWW91IGNhbgorbGVhdmUgb3V0IGF0IG1vc3Qgb25lIG9mIEEgYW5kIEIsIGluIHdoaWNoIGNhc2UgaXQgZGVmYXVsdHMgdG8gSEVBRC4KKworPHVwc3RyZWFtPjo6CisJVXBzdHJlYW0gYnJhbmNoIHRvIGNvbXBhcmUgYWdhaW5zdC4gIE1heSBiZSBhbnkgdmFsaWQgY29tbWl0LAorCW5vdCBqdXN0IGFuIGV4aXN0aW5nIGJyYW5jaCBuYW1lLiBEZWZhdWx0cyB0byB0aGUgY29uZmlndXJlZAorCXVwc3RyZWFtIGZvciB0aGUgY3VycmVudCBicmFuY2guCisKKzxicmFuY2g+OjoKKwlXb3JraW5nIGJyYW5jaDsgZGVmYXVsdHMgdG8gSEVBRC4KKworLS1jb250aW51ZTo6CisJUmVzdGFydCB0aGUgcmViYXNpbmcgcHJvY2VzcyBhZnRlciBoYXZpbmcgcmVzb2x2ZWQgYSBtZXJnZSBjb25mbGljdC4KKworLS1hYm9ydDo6CisJQWJvcnQgdGhlIHJlYmFzZSBvcGVyYXRpb24gYW5kIHJlc2V0IEhFQUQgdG8gdGhlIG9yaWdpbmFsCisJYnJhbmNoLiBJZiA8YnJhbmNoPiB3YXMgcHJvdmlkZWQgd2hlbiB0aGUgcmViYXNlIG9wZXJhdGlvbiB3YXMKKwlzdGFydGVkLCB0aGVuIEhFQUQgd2lsbCBiZSByZXNldCB0byA8YnJhbmNoPi4gT3RoZXJ3aXNlIEhFQUQKKwl3aWxsIGJlIHJlc2V0IHRvIHdoZXJlIGl0IHdhcyB3aGVuIHRoZSByZWJhc2Ugb3BlcmF0aW9uIHdhcworCXN0YXJ0ZWQuCisKKy0ta2VlcC1lbXB0eTo6CisJS2VlcCB0aGUgY29tbWl0cyB0aGF0IGRvIG5vdCBjaGFuZ2UgYW55dGhpbmcgZnJvbSBpdHMKKwlwYXJlbnRzIGluIHRoZSByZXN1bHQuCisKKy0tc2tpcDo6CisJUmVzdGFydCB0aGUgcmViYXNpbmcgcHJvY2VzcyBieSBza2lwcGluZyB0aGUgY3VycmVudCBwYXRjaC4KKworLS1lZGl0LXRvZG86OgorCUVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlLgorCistbTo6CistLW1lcmdlOjoKKwlVc2UgbWVyZ2luZyBzdHJhdGVnaWVzIHRvIHJlYmFzZS4gIFdoZW4gdGhlIHJlY3Vyc2l2ZSAoZGVmYXVsdCkgbWVyZ2UKKwlzdHJhdGVneSBpcyB1c2VkLCB0aGlzIGFsbG93cyByZWJhc2UgdG8gYmUgYXdhcmUgb2YgcmVuYW1lcyBvbiB0aGUKKwl1cHN0cmVhbSBzaWRlLgorKworTm90ZSB0aGF0IGEgcmViYXNlIG1lcmdlIHdvcmtzIGJ5IHJlcGxheWluZyBlYWNoIGNvbW1pdCBmcm9tIHRoZSB3b3JraW5nCiticmFuY2ggb24gdG9wIG9mIHRoZSA8dXBzdHJlYW0+IGJyYW5jaC4gIEJlY2F1c2Ugb2YgdGhpcywgd2hlbiBhIG1lcmdlCitjb25mbGljdCBoYXBwZW5zLCB0aGUgc2lkZSByZXBvcnRlZCBhcyAnb3VycycgaXMgdGhlIHNvLWZhciByZWJhc2VkCitzZXJpZXMsIHN0YXJ0aW5nIHdpdGggPHVwc3RyZWFtPiwgYW5kICd0aGVpcnMnIGlzIHRoZSB3b3JraW5nIGJyYW5jaC4gIEluCitvdGhlciB3b3JkcywgdGhlIHNpZGVzIGFyZSBzd2FwcGVkLgorCistcyA8c3RyYXRlZ3k+OjoKKy0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pjo6CisJVXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneS4KKwlJZiB0aGVyZSBpcyBubyBgLXNgIG9wdGlvbiAnZ2l0IG1lcmdlLXJlY3Vyc2l2ZScgaXMgdXNlZAorCWluc3RlYWQuICBUaGlzIGltcGxpZXMgLS1tZXJnZS4KKysKK0JlY2F1c2UgJ2dpdCByZWJhc2UnIHJlcGxheXMgZWFjaCBjb21taXQgZnJvbSB0aGUgd29ya2luZyBicmFuY2gKK29uIHRvcCBvZiB0aGUgPHVwc3RyZWFtPiBicmFuY2ggdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5LCB1c2luZwordGhlICdvdXJzJyBzdHJhdGVneSBzaW1wbHkgZGlzY2FyZHMgYWxsIHBhdGNoZXMgZnJvbSB0aGUgPGJyYW5jaD4sCit3aGljaCBtYWtlcyBsaXR0bGUgc2Vuc2UuCisKKy1YIDxzdHJhdGVneS1vcHRpb24+OjoKKy0tc3RyYXRlZ3ktb3B0aW9uPTxzdHJhdGVneS1vcHRpb24+OjoKKwlQYXNzIHRoZSA8c3RyYXRlZ3ktb3B0aW9uPiB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneS4KKwlUaGlzIGltcGxpZXMgYC0tbWVyZ2VgIGFuZCwgaWYgbm8gc3RyYXRlZ3kgaGFzIGJlZW4KKwlzcGVjaWZpZWQsIGAtcyByZWN1cnNpdmVgLiAgTm90ZSB0aGUgcmV2ZXJzYWwgb2YgJ291cnMnIGFuZAorCSd0aGVpcnMnIGFzIG5vdGVkIGFib3ZlIGZvciB0aGUgYC1tYCBvcHRpb24uCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LiBJbXBsaWVzIC0tbm8tc3RhdC4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLiBJbXBsaWVzIC0tc3RhdC4KKworLS1zdGF0OjoKKwlTaG93IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIHNpbmNlIHRoZSBsYXN0IHJlYmFzZS4gVGhlCisJZGlmZnN0YXQgaXMgYWxzbyBjb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWJhc2Uuc3RhdC4KKworLW46OgorLS1uby1zdGF0OjoKKwlEbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGFzIHBhcnQgb2YgdGhlIHJlYmFzZSBwcm9jZXNzLgorCistLW5vLXZlcmlmeTo6CisJVGhpcyBvcHRpb24gYnlwYXNzZXMgdGhlIHByZS1yZWJhc2UgaG9vay4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKKy0tdmVyaWZ5OjoKKwlBbGxvd3MgdGhlIHByZS1yZWJhc2UgaG9vayB0byBydW4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0LiAgVGhpcyBvcHRpb24gY2FuCisJYmUgdXNlZCB0byBvdmVycmlkZSAtLW5vLXZlcmlmeS4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKKy1DPG4+OjoKKwlFbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIHN1cnJvdW5kaW5nIGNvbnRleHQgbWF0Y2ggYmVmb3JlCisJYW5kIGFmdGVyIGVhY2ggY2hhbmdlLiAgV2hlbiBmZXdlciBsaW5lcyBvZiBzdXJyb3VuZGluZworCWNvbnRleHQgZXhpc3QgdGhleSBhbGwgbXVzdCBtYXRjaC4gIEJ5IGRlZmF1bHQgbm8gY29udGV4dCBpcworCWV2ZXIgaWdub3JlZC4KKworLWY6OgorLS1mb3JjZS1yZWJhc2U6OgorCUZvcmNlIHRoZSByZWJhc2UgZXZlbiBpZiB0aGUgY3VycmVudCBicmFuY2ggaXMgYSBkZXNjZW5kYW50CisJb2YgdGhlIGNvbW1pdCB5b3UgYXJlIHJlYmFzaW5nIG9udG8uICBOb3JtYWxseSBub24taW50ZXJhY3RpdmUgcmViYXNlIHdpbGwKKwlleGl0IHdpdGggdGhlIG1lc3NhZ2UgIkN1cnJlbnQgYnJhbmNoIGlzIHVwIHRvIGRhdGUiIGluIHN1Y2ggYQorCXNpdHVhdGlvbi4KKwlJbmNvbXBhdGlibGUgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24uCisrCitZb3UgbWF5IGZpbmQgdGhpcyAob3IgLS1uby1mZiB3aXRoIGFuIGludGVyYWN0aXZlIHJlYmFzZSkgaGVscGZ1bCBhZnRlcgorcmV2ZXJ0aW5nIGEgdG9waWMgYnJhbmNoIG1lcmdlLCBhcyB0aGlzIG9wdGlvbiByZWNyZWF0ZXMgdGhlIHRvcGljIGJyYW5jaCB3aXRoCitmcmVzaCBjb21taXRzIHNvIGl0IGNhbiBiZSByZW1lcmdlZCBzdWNjZXNzZnVsbHkgd2l0aG91dCBuZWVkaW5nIHRvICJyZXZlcnQKK3RoZSByZXZlcnNpb24iIChzZWUgdGhlCitsaW5rOmhvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS50eHRbcmV2ZXJ0LWEtZmF1bHR5LW1lcmdlIEhvdy1Ub10gZm9yIGRldGFpbHMpLgorCistLWlnbm9yZS13aGl0ZXNwYWNlOjoKKy0td2hpdGVzcGFjZT08b3B0aW9uPjo6CisJVGhlc2UgZmxhZyBhcmUgcGFzc2VkIHRvIHRoZSAnZ2l0IGFwcGx5JyBwcm9ncmFtCisJKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkgdGhhdCBhcHBsaWVzIHRoZSBwYXRjaC4KKwlJbmNvbXBhdGlibGUgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24uCisKKy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGU6OgorLS1pZ25vcmUtZGF0ZTo6CisJVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byAnZ2l0IGFtJyB0byBlYXNpbHkgY2hhbmdlIHRoZSBkYXRlcworCW9mIHRoZSByZWJhc2VkIGNvbW1pdHMgKHNlZSBsaW5rZ2l0OmdpdC1hbVsxXSkuCisJSW5jb21wYXRpYmxlIHdpdGggdGhlIC0taW50ZXJhY3RpdmUgb3B0aW9uLgorCistaTo6CistLWludGVyYWN0aXZlOjoKKwlNYWtlIGEgbGlzdCBvZiB0aGUgY29tbWl0cyB3aGljaCBhcmUgYWJvdXQgdG8gYmUgcmViYXNlZC4gIExldCB0aGUKKwl1c2VyIGVkaXQgdGhhdCBsaXN0IGJlZm9yZSByZWJhc2luZy4gIFRoaXMgbW9kZSBjYW4gYWxzbyBiZSB1c2VkIHRvCisJc3BsaXQgY29tbWl0cyAoc2VlIFNQTElUVElORyBDT01NSVRTIGJlbG93KS4KKworLXA6OgorLS1wcmVzZXJ2ZS1tZXJnZXM6OgorCUluc3RlYWQgb2YgaWdub3JpbmcgbWVyZ2VzLCB0cnkgdG8gcmVjcmVhdGUgdGhlbS4KKysKK1RoaXMgdXNlcyB0aGUgYC0taW50ZXJhY3RpdmVgIG1hY2hpbmVyeSBpbnRlcm5hbGx5LCBidXQgY29tYmluaW5nIGl0Cit3aXRoIHRoZSBgLS1pbnRlcmFjdGl2ZWAgb3B0aW9uIGV4cGxpY2l0bHkgaXMgZ2VuZXJhbGx5IG5vdCBhIGdvb2QKK2lkZWEgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyAoc2VlIEJVR1MgYmVsb3cpLgorCisteCA8Y21kPjo6CistLWV4ZWMgPGNtZD46OgorCUFwcGVuZCAiZXhlYyA8Y21kPiIgYWZ0ZXIgZWFjaCBsaW5lIGNyZWF0aW5nIGEgY29tbWl0IGluIHRoZQorCWZpbmFsIGhpc3RvcnkuIDxjbWQ+IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgb25lIG9yIG1vcmUgc2hlbGwKKwljb21tYW5kcy4KKysKK1RoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgYC0taW50ZXJhY3RpdmVgIG9wdGlvbgorKHNlZSBJTlRFUkFDVElWRSBNT0RFIGJlbG93KS4KKysKK1lvdSBtYXkgZXhlY3V0ZSBzZXZlcmFsIGNvbW1hbmRzIGJ5IGVpdGhlciB1c2luZyBvbmUgaW5zdGFuY2Ugb2YgYC0tZXhlY2AKK3dpdGggc2V2ZXJhbCBjb21tYW5kczoKKysKKwlnaXQgcmViYXNlIC1pIC0tZXhlYyAiY21kMSAmJiBjbWQyICYmIC4uLiIKKysKK29yIGJ5IGdpdmluZyBtb3JlIHRoYW4gb25lIGAtLWV4ZWNgOgorKworCWdpdCByZWJhc2UgLWkgLS1leGVjICJjbWQxIiAtLWV4ZWMgImNtZDIiIC0tZXhlYyAuLi4KKysKK0lmIGAtLWF1dG9zcXVhc2hgIGlzIHVzZWQsICJleGVjIiBsaW5lcyB3aWxsIG5vdCBiZSBhcHBlbmRlZCBmb3IKK3RoZSBpbnRlcm1lZGlhdGUgY29tbWl0cywgYW5kIHdpbGwgb25seSBhcHBlYXIgYXQgdGhlIGVuZCBvZiBlYWNoCitzcXVhc2gvZml4dXAgc2VyaWVzLgorCistLXJvb3Q6OgorCVJlYmFzZSBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSA8YnJhbmNoPiwgaW5zdGVhZCBvZgorCWxpbWl0aW5nIHRoZW0gd2l0aCBhbiA8dXBzdHJlYW0+LiAgVGhpcyBhbGxvd3MgeW91IHRvIHJlYmFzZQorCXRoZSByb290IGNvbW1pdChzKSBvbiBhIGJyYW5jaC4gIFdoZW4gdXNlZCB3aXRoIC0tb250bywgaXQKKwl3aWxsIHNraXAgY2hhbmdlcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiA8bmV3YmFzZT4gKGluc3RlYWQgb2YKKwk8dXBzdHJlYW0+KSB3aGVyZWFzIHdpdGhvdXQgLS1vbnRvIGl0IHdpbGwgb3BlcmF0ZSBvbiBldmVyeSBjaGFuZ2UuCisJV2hlbiB1c2VkIHRvZ2V0aGVyIHdpdGggYm90aCAtLW9udG8gYW5kIC0tcHJlc2VydmUtbWVyZ2VzLAorCSdhbGwnIHJvb3QgY29tbWl0cyB3aWxsIGJlIHJld3JpdHRlbiB0byBoYXZlIDxuZXdiYXNlPiBhcyBwYXJlbnQKKwlpbnN0ZWFkLgorCistLWF1dG9zcXVhc2g6OgorLS1uby1hdXRvc3F1YXNoOjoKKwlXaGVuIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgYmVnaW5zIHdpdGggInNxdWFzaCEgLi4uIiAob3IKKwkiZml4dXAhIC4uLiIpLCBhbmQgdGhlcmUgaXMgYSBjb21taXQgd2hvc2UgdGl0bGUgYmVnaW5zIHdpdGgKKwl0aGUgc2FtZSAuLi4sIGF1dG9tYXRpY2FsbHkgbW9kaWZ5IHRoZSB0b2RvIGxpc3Qgb2YgcmViYXNlIC1pCisJc28gdGhhdCB0aGUgY29tbWl0IG1hcmtlZCBmb3Igc3F1YXNoaW5nIGNvbWVzIHJpZ2h0IGFmdGVyIHRoZQorCWNvbW1pdCB0byBiZSBtb2RpZmllZCwgYW5kIGNoYW5nZSB0aGUgYWN0aW9uIG9mIHRoZSBtb3ZlZAorCWNvbW1pdCBmcm9tIGBwaWNrYCB0byBgc3F1YXNoYCAob3IgYGZpeHVwYCkuCisrCitUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlICctLWludGVyYWN0aXZlJyBvcHRpb24gaXMgdXNlZC4KKysKK0lmIHRoZSAnLS1hdXRvc3F1YXNoJyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IHVzaW5nIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgcmViYXNlLmF1dG9zcXVhc2hgLCB0aGlzIG9wdGlvbiBjYW4gYmUKK3VzZWQgdG8gb3ZlcnJpZGUgYW5kIGRpc2FibGUgdGhpcyBzZXR0aW5nLgorCistLW5vLWZmOjoKKwlXaXRoIC0taW50ZXJhY3RpdmUsIGNoZXJyeS1waWNrIGFsbCByZWJhc2VkIGNvbW1pdHMgaW5zdGVhZCBvZgorCWZhc3QtZm9yd2FyZGluZyBvdmVyIHRoZSB1bmNoYW5nZWQgb25lcy4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZQorCWVudGlyZSBoaXN0b3J5IG9mIHRoZSByZWJhc2VkIGJyYW5jaCBpcyBjb21wb3NlZCBvZiBuZXcgY29tbWl0cy4KKysKK1dpdGhvdXQgLS1pbnRlcmFjdGl2ZSwgdGhpcyBpcyBhIHN5bm9ueW0gZm9yIC0tZm9yY2UtcmViYXNlLgorKworWW91IG1heSBmaW5kIHRoaXMgaGVscGZ1bCBhZnRlciByZXZlcnRpbmcgYSB0b3BpYyBicmFuY2ggbWVyZ2UsIGFzIHRoaXMgb3B0aW9uCityZWNyZWF0ZXMgdGhlIHRvcGljIGJyYW5jaCB3aXRoIGZyZXNoIGNvbW1pdHMgc28gaXQgY2FuIGJlIHJlbWVyZ2VkCitzdWNjZXNzZnVsbHkgd2l0aG91dCBuZWVkaW5nIHRvICJyZXZlcnQgdGhlIHJldmVyc2lvbiIgKHNlZSB0aGUKK2xpbms6aG93dG8vcmV2ZXJ0LWEtZmF1bHR5LW1lcmdlLnR4dFtyZXZlcnQtYS1mYXVsdHktbWVyZ2UgSG93LVRvXSBmb3IgZGV0YWlscykuCisKK2luY2x1ZGU6Om1lcmdlLXN0cmF0ZWdpZXMudHh0W10KKworTk9URVMKKy0tLS0tCisKK1lvdSBzaG91bGQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nICdnaXQgcmViYXNlJyBvbiBhCityZXBvc2l0b3J5IHRoYXQgeW91IHNoYXJlLiAgU2VlIGFsc28gUkVDT1ZFUklORyBGUk9NIFVQU1RSRUFNIFJFQkFTRQorYmVsb3cuCisKK1doZW4gdGhlIGdpdC1yZWJhc2UgY29tbWFuZCBpcyBydW4sIGl0IHdpbGwgZmlyc3QgZXhlY3V0ZSBhICJwcmUtcmViYXNlIgoraG9vayBpZiBvbmUgZXhpc3RzLiAgWW91IGNhbiB1c2UgdGhpcyBob29rIHRvIGRvIHNhbml0eSBjaGVja3MgYW5kCityZWplY3QgdGhlIHJlYmFzZSBpZiBpdCBpc24ndCBhcHByb3ByaWF0ZS4gIFBsZWFzZSBzZWUgdGhlIHRlbXBsYXRlCitwcmUtcmViYXNlIGhvb2sgc2NyaXB0IGZvciBhbiBleGFtcGxlLgorCitVcG9uIGNvbXBsZXRpb24sIDxicmFuY2g+IHdpbGwgYmUgdGhlIGN1cnJlbnQgYnJhbmNoLgorCitJTlRFUkFDVElWRSBNT0RFCistLS0tLS0tLS0tLS0tLS0tCisKK1JlYmFzaW5nIGludGVyYWN0aXZlbHkgbWVhbnMgdGhhdCB5b3UgaGF2ZSBhIGNoYW5jZSB0byBlZGl0IHRoZSBjb21taXRzCit3aGljaCBhcmUgcmViYXNlZC4gIFlvdSBjYW4gcmVvcmRlciB0aGUgY29tbWl0cywgYW5kIHlvdSBjYW4KK3JlbW92ZSB0aGVtICh3ZWVkaW5nIG91dCBiYWQgb3Igb3RoZXJ3aXNlIHVud2FudGVkIHBhdGNoZXMpLgorCitUaGUgaW50ZXJhY3RpdmUgbW9kZSBpcyBtZWFudCBmb3IgdGhpcyB0eXBlIG9mIHdvcmtmbG93OgorCisxLiBoYXZlIGEgd29uZGVyZnVsIGlkZWEKKzIuIGhhY2sgb24gdGhlIGNvZGUKKzMuIHByZXBhcmUgYSBzZXJpZXMgZm9yIHN1Ym1pc3Npb24KKzQuIHN1Ym1pdAorCit3aGVyZSBwb2ludCAyLiBjb25zaXN0cyBvZiBzZXZlcmFsIGluc3RhbmNlcyBvZgorCithKSByZWd1bGFyIHVzZQorCisgMS4gZmluaXNoIHNvbWV0aGluZyB3b3J0aHkgb2YgYSBjb21taXQKKyAyLiBjb21taXQKKworYikgaW5kZXBlbmRlbnQgZml4dXAKKworIDEuIHJlYWxpemUgdGhhdCBzb21ldGhpbmcgZG9lcyBub3Qgd29yaworIDIuIGZpeCB0aGF0CisgMy4gY29tbWl0IGl0CisKK1NvbWV0aW1lcyB0aGUgdGhpbmcgZml4ZWQgaW4gYi4yLiBjYW5ub3QgYmUgYW1lbmRlZCB0byB0aGUgbm90LXF1aXRlCitwZXJmZWN0IGNvbW1pdCBpdCBmaXhlcywgYmVjYXVzZSB0aGF0IGNvbW1pdCBpcyBidXJpZWQgZGVlcGx5IGluIGEKK3BhdGNoIHNlcmllcy4gIFRoYXQgaXMgZXhhY3RseSB3aGF0IGludGVyYWN0aXZlIHJlYmFzZSBpcyBmb3I6IHVzZSBpdAorYWZ0ZXIgcGxlbnR5IG9mICJhInMgYW5kICJiInMsIGJ5IHJlYXJyYW5naW5nIGFuZCBlZGl0aW5nCitjb21taXRzLCBhbmQgc3F1YXNoaW5nIG11bHRpcGxlIGNvbW1pdHMgaW50byBvbmUuCisKK1N0YXJ0IGl0IHdpdGggdGhlIGxhc3QgY29tbWl0IHlvdSB3YW50IHRvIHJldGFpbiBhcy1pczoKKworCWdpdCByZWJhc2UgLWkgPGFmdGVyLXRoaXMtY29tbWl0PgorCitBbiBlZGl0b3Igd2lsbCBiZSBmaXJlZCB1cCB3aXRoIGFsbCB0aGUgY29tbWl0cyBpbiB5b3VyIGN1cnJlbnQgYnJhbmNoCisoaWdub3JpbmcgbWVyZ2UgY29tbWl0cyksIHdoaWNoIGNvbWUgYWZ0ZXIgdGhlIGdpdmVuIGNvbW1pdC4gIFlvdSBjYW4KK3Jlb3JkZXIgdGhlIGNvbW1pdHMgaW4gdGhpcyBsaXN0IHRvIHlvdXIgaGVhcnQncyBjb250ZW50LCBhbmQgeW91IGNhbgorcmVtb3ZlIHRoZW0uICBUaGUgbGlzdCBsb29rcyBtb3JlIG9yIGxlc3MgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwaWNrIGRlYWRiZWUgVGhlIG9uZWxpbmUgb2YgdGhpcyBjb21taXQKK3BpY2sgZmExYWZlMSBUaGUgb25lbGluZSBvZiB0aGUgbmV4dCBjb21taXQKKy4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgb25lbGluZSBkZXNjcmlwdGlvbnMgYXJlIHB1cmVseSBmb3IgeW91ciBwbGVhc3VyZTsgJ2dpdCByZWJhc2UnIHdpbGwKK25vdCBsb29rIGF0IHRoZW0gYnV0IGF0IHRoZSBjb21taXQgbmFtZXMgKCJkZWFkYmVlIiBhbmQgImZhMWFmZTEiIGluIHRoaXMKK2V4YW1wbGUpLCBzbyBkbyBub3QgZGVsZXRlIG9yIGVkaXQgdGhlIG5hbWVzLgorCitCeSByZXBsYWNpbmcgdGhlIGNvbW1hbmQgInBpY2siIHdpdGggdGhlIGNvbW1hbmQgImVkaXQiLCB5b3UgY2FuIHRlbGwKKydnaXQgcmViYXNlJyB0byBzdG9wIGFmdGVyIGFwcGx5aW5nIHRoYXQgY29tbWl0LCBzbyB0aGF0IHlvdSBjYW4gZWRpdAordGhlIGZpbGVzIGFuZC9vciB0aGUgY29tbWl0IG1lc3NhZ2UsIGFtZW5kIHRoZSBjb21taXQsIGFuZCBjb250aW51ZQorcmViYXNpbmcuCisKK0lmIHlvdSBqdXN0IHdhbnQgdG8gZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIGEgY29tbWl0LCByZXBsYWNlIHRoZQorY29tbWFuZCAicGljayIgd2l0aCB0aGUgY29tbWFuZCAicmV3b3JkIi4KKworSWYgeW91IHdhbnQgdG8gZm9sZCB0d28gb3IgbW9yZSBjb21taXRzIGludG8gb25lLCByZXBsYWNlIHRoZSBjb21tYW5kCisicGljayIgZm9yIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgY29tbWl0cyB3aXRoICJzcXVhc2giIG9yICJmaXh1cCIuCitJZiB0aGUgY29tbWl0cyBoYWQgZGlmZmVyZW50IGF1dGhvcnMsIHRoZSBmb2xkZWQgY29tbWl0IHdpbGwgYmUKK2F0dHJpYnV0ZWQgdG8gdGhlIGF1dGhvciBvZiB0aGUgZmlyc3QgY29tbWl0LiAgVGhlIHN1Z2dlc3RlZCBjb21taXQKK21lc3NhZ2UgZm9yIHRoZSBmb2xkZWQgY29tbWl0IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBjb21taXQKK21lc3NhZ2VzIG9mIHRoZSBmaXJzdCBjb21taXQgYW5kIG9mIHRob3NlIHdpdGggdGhlICJzcXVhc2giIGNvbW1hbmQsCitidXQgb21pdHMgdGhlIGNvbW1pdCBtZXNzYWdlcyBvZiBjb21taXRzIHdpdGggdGhlICJmaXh1cCIgY29tbWFuZC4KKworJ2dpdCByZWJhc2UnIHdpbGwgc3RvcCB3aGVuICJwaWNrIiBoYXMgYmVlbiByZXBsYWNlZCB3aXRoICJlZGl0IiBvcgord2hlbiBhIGNvbW1hbmQgZmFpbHMgZHVlIHRvIG1lcmdlIGVycm9ycy4gV2hlbiB5b3UgYXJlIGRvbmUgZWRpdGluZworYW5kL29yIHJlc29sdmluZyBjb25mbGljdHMgeW91IGNhbiBjb250aW51ZSB3aXRoIGBnaXQgcmViYXNlIC0tY29udGludWVgLgorCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcmVvcmRlciB0aGUgbGFzdCA1IGNvbW1pdHMsIHN1Y2ggdGhhdCB3aGF0Cit3YXMgSEVBRH40IGJlY29tZXMgdGhlIG5ldyBIRUFELiBUbyBhY2hpZXZlIHRoYXQsIHlvdSB3b3VsZCBjYWxsCisnZ2l0IHJlYmFzZScgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWJhc2UgLWkgSEVBRH41CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuZCBtb3ZlIHRoZSBmaXJzdCBwYXRjaCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgorCitZb3UgbWlnaHQgd2FudCB0byBwcmVzZXJ2ZSBtZXJnZXMsIGlmIHlvdSBoYXZlIGEgaGlzdG9yeSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICBYCisgICAgICAgICAgICBcCisgICAgICAgICBBLS0tTS0tLUIKKyAgICAgICAgLworLS0tby0tLU8tLS1QLS0tUQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvc2UgeW91IHdhbnQgdG8gcmViYXNlIHRoZSBzaWRlIGJyYW5jaCBzdGFydGluZyBhdCAiQSIgdG8gIlEiLiBNYWtlCitzdXJlIHRoYXQgdGhlIGN1cnJlbnQgSEVBRCBpcyAiQiIsIGFuZCBjYWxsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWJhc2UgLWkgLXAgLS1vbnRvIFEgTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVvcmRlcmluZyBhbmQgZWRpdGluZyBjb21taXRzIHVzdWFsbHkgY3JlYXRlcyB1bnRlc3RlZCBpbnRlcm1lZGlhdGUKK3N0ZXBzLiAgWW91IG1heSB3YW50IHRvIGNoZWNrIHRoYXQgeW91ciBoaXN0b3J5IGVkaXRpbmcgZGlkIG5vdCBicmVhaworYW55dGhpbmcgYnkgcnVubmluZyBhIHRlc3QsIG9yIGF0IGxlYXN0IHJlY29tcGlsaW5nIGF0IGludGVybWVkaWF0ZQorcG9pbnRzIGluIGhpc3RvcnkgYnkgdXNpbmcgdGhlICJleGVjIiBjb21tYW5kIChzaG9ydGN1dCAieCIpLiAgWW91IG1heQorZG8gc28gYnkgY3JlYXRpbmcgYSB0b2RvIGxpc3QgbGlrZSB0aGlzIG9uZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGljayBkZWFkYmVlIEltcGxlbWVudCBmZWF0dXJlIFhYWAorZml4dXAgZjFhNWMwMCBGaXggdG8gZmVhdHVyZSBYWFgKK2V4ZWMgbWFrZQorcGljayBjMGZmZWVlIFRoZSBvbmVsaW5lIG9mIHRoZSBuZXh0IGNvbW1pdAorZWRpdCBkZWFkYmFiIFRoZSBvbmVsaW5lIG9mIHRoZSBjb21taXQgYWZ0ZXIKK2V4ZWMgY2Qgc3ViZGlyOyBtYWtlIHRlc3QKKy4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW50ZXJhY3RpdmUgcmViYXNlIHdpbGwgc3RvcCB3aGVuIGEgY29tbWFuZCBmYWlscyAoaS5lLiBleGl0cyB3aXRoCitub24tMCBzdGF0dXMpIHRvIGdpdmUgeW91IGFuIG9wcG9ydHVuaXR5IHRvIGZpeCB0aGUgcHJvYmxlbS4gWW91IGNhbgorY29udGludWUgd2l0aCBgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlYC4KKworVGhlICJleGVjIiBjb21tYW5kIGxhdW5jaGVzIHRoZSBjb21tYW5kIGluIGEgc2hlbGwgKHRoZSBvbmUgc3BlY2lmaWVkCitpbiBgJFNIRUxMYCwgb3IgdGhlIGRlZmF1bHQgc2hlbGwgaWYgYCRTSEVMTGAgaXMgbm90IHNldCksIHNvIHlvdSBjYW4KK3VzZSBzaGVsbCBmZWF0dXJlcyAobGlrZSAiY2QiLCAiPiIsICI7IiAuLi4pLiBUaGUgY29tbWFuZCBpcyBydW4gZnJvbQordGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmViYXNlIC1pIC0tZXhlYyAibWFrZSB0ZXN0IgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNvbW1hbmQgbGV0cyB5b3UgY2hlY2sgdGhhdCBpbnRlcm1lZGlhdGUgY29tbWl0cyBhcmUgY29tcGlsYWJsZS4KK1RoZSB0b2RvIGxpc3QgYmVjb21lcyBsaWtlIHRoYXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitwaWNrIDU5MjhhZWEgb25lCitleGVjIG1ha2UgdGVzdAorcGljayAwNGQwZmRhIHR3bworZXhlYyBtYWtlIHRlc3QKK3BpY2sgYmE0NjE2OSB0aHJlZQorZXhlYyBtYWtlIHRlc3QKK3BpY2sgZjQ1OTNmOSBmb3VyCitleGVjIG1ha2UgdGVzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1BMSVRUSU5HIENPTU1JVFMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGludGVyYWN0aXZlIG1vZGUsIHlvdSBjYW4gbWFyayBjb21taXRzIHdpdGggdGhlIGFjdGlvbiAiZWRpdCIuICBIb3dldmVyLAordGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgJ2dpdCByZWJhc2UnIGV4cGVjdHMgdGhlIHJlc3VsdCBvZiB0aGlzCitlZGl0IHRvIGJlIGV4YWN0bHkgb25lIGNvbW1pdC4gIEluZGVlZCwgeW91IGNhbiB1bmRvIHRoZSBjb21taXQsIG9yIHlvdSBjYW4KK2FkZCBvdGhlciBjb21taXRzLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBzcGxpdCBhIGNvbW1pdCBpbnRvIHR3bzoKKworLSBTdGFydCBhbiBpbnRlcmFjdGl2ZSByZWJhc2Ugd2l0aCBgZ2l0IHJlYmFzZSAtaSA8Y29tbWl0Pl5gLCB3aGVyZQorICA8Y29tbWl0PiBpcyB0aGUgY29tbWl0IHlvdSB3YW50IHRvIHNwbGl0LiAgSW4gZmFjdCwgYW55IGNvbW1pdCByYW5nZQorICB3aWxsIGRvLCBhcyBsb25nIGFzIGl0IGNvbnRhaW5zIHRoYXQgY29tbWl0LgorCistIE1hcmsgdGhlIGNvbW1pdCB5b3Ugd2FudCB0byBzcGxpdCB3aXRoIHRoZSBhY3Rpb24gImVkaXQiLgorCistIFdoZW4gaXQgY29tZXMgdG8gZWRpdGluZyB0aGF0IGNvbW1pdCwgZXhlY3V0ZSBgZ2l0IHJlc2V0IEhFQUReYC4gIFRoZQorICBlZmZlY3QgaXMgdGhhdCB0aGUgSEVBRCBpcyByZXdvdW5kIGJ5IG9uZSwgYW5kIHRoZSBpbmRleCBmb2xsb3dzIHN1aXQuCisgIEhvd2V2ZXIsIHRoZSB3b3JraW5nIHRyZWUgc3RheXMgdGhlIHNhbWUuCisKKy0gTm93IGFkZCB0aGUgY2hhbmdlcyB0byB0aGUgaW5kZXggdGhhdCB5b3Ugd2FudCB0byBoYXZlIGluIHRoZSBmaXJzdAorICBjb21taXQuICBZb3UgY2FuIHVzZSBgZ2l0IGFkZGAgKHBvc3NpYmx5IGludGVyYWN0aXZlbHkpIG9yCisgICdnaXQgZ3VpJyAob3IgYm90aCkgdG8gZG8gdGhhdC4KKworLSBDb21taXQgdGhlIG5vdy1jdXJyZW50IGluZGV4IHdpdGggd2hhdGV2ZXIgY29tbWl0IG1lc3NhZ2UgaXMgYXBwcm9wcmlhdGUKKyAgbm93LgorCistIFJlcGVhdCB0aGUgbGFzdCB0d28gc3RlcHMgdW50aWwgeW91ciB3b3JraW5nIHRyZWUgaXMgY2xlYW4uCisKKy0gQ29udGludWUgdGhlIHJlYmFzZSB3aXRoIGBnaXQgcmViYXNlIC0tY29udGludWVgLgorCitJZiB5b3UgYXJlIG5vdCBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgaW50ZXJtZWRpYXRlIHJldmlzaW9ucyBhcmUKK2NvbnNpc3RlbnQgKHRoZXkgY29tcGlsZSwgcGFzcyB0aGUgdGVzdHN1aXRlLCBldGMuKSB5b3Ugc2hvdWxkIHVzZQorJ2dpdCBzdGFzaCcgdG8gc3Rhc2ggYXdheSB0aGUgbm90LXlldC1jb21taXR0ZWQgY2hhbmdlcworYWZ0ZXIgZWFjaCBjb21taXQsIHRlc3QsIGFuZCBhbWVuZCB0aGUgY29tbWl0IGlmIGZpeGVzIGFyZSBuZWNlc3NhcnkuCisKKworUkVDT1ZFUklORyBGUk9NIFVQU1RSRUFNIFJFQkFTRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWJhc2luZyAob3IgYW55IG90aGVyIGZvcm0gb2YgcmV3cml0aW5nKSBhIGJyYW5jaCB0aGF0IG90aGVycyBoYXZlCitiYXNlZCB3b3JrIG9uIGlzIGEgYmFkIGlkZWE6IGFueW9uZSBkb3duc3RyZWFtIG9mIGl0IGlzIGZvcmNlZCB0bworbWFudWFsbHkgZml4IHRoZWlyIGhpc3RvcnkuICBUaGlzIHNlY3Rpb24gZXhwbGFpbnMgaG93IHRvIGRvIHRoZSBmaXgKK2Zyb20gdGhlIGRvd25zdHJlYW0ncyBwb2ludCBvZiB2aWV3LiAgVGhlIHJlYWwgZml4LCBob3dldmVyLCB3b3VsZCBiZQordG8gYXZvaWQgcmViYXNpbmcgdGhlIHVwc3RyZWFtIGluIHRoZSBmaXJzdCBwbGFjZS4KKworVG8gaWxsdXN0cmF0ZSwgc3VwcG9zZSB5b3UgYXJlIGluIGEgc2l0dWF0aW9uIHdoZXJlIHNvbWVvbmUgZGV2ZWxvcHMgYQorJ3N1YnN5c3RlbScgYnJhbmNoLCBhbmQgeW91IGFyZSB3b3JraW5nIG9uIGEgJ3RvcGljJyB0aGF0IGlzIGRlcGVuZGVudAorb24gdGhpcyAnc3Vic3lzdGVtJy4gIFlvdSBtaWdodCBlbmQgdXAgd2l0aCBhIGhpc3RvcnkgbGlrZSB0aGUKK2ZvbGxvd2luZzoKKworLS0tLS0tLS0tLS0tCisgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vICBtYXN0ZXIKKwkgXAorCSAgby0tLW8tLS1vLS0tby0tLW8gIHN1YnN5c3RlbQorCQkJICAgXAorCQkJICAgICotLS0qLS0tKiAgdG9waWMKKy0tLS0tLS0tLS0tLQorCitJZiAnc3Vic3lzdGVtJyBpcyByZWJhc2VkIGFnYWluc3QgJ21hc3RlcicsIHRoZSBmb2xsb3dpbmcgaGFwcGVuczoKKworLS0tLS0tLS0tLS0tCisgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8gIG1hc3RlcgorCSBcCQkJIFwKKwkgIG8tLS1vLS0tby0tLW8tLS1vCSAgbyctLW8nLS1vJy0tbyctLW8nICBzdWJzeXN0ZW0KKwkJCSAgIFwKKwkJCSAgICAqLS0tKi0tLSogIHRvcGljCistLS0tLS0tLS0tLS0KKworSWYgeW91IG5vdyBjb250aW51ZSBkZXZlbG9wbWVudCBhcyB1c3VhbCwgYW5kIGV2ZW50dWFsbHkgbWVyZ2UgJ3RvcGljJwordG8gJ3N1YnN5c3RlbScsIHRoZSBjb21taXRzIGZyb20gJ3N1YnN5c3RlbScgd2lsbCByZW1haW4gZHVwbGljYXRlZCBmb3JldmVyOgorCistLS0tLS0tLS0tLS0KKyAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tbyAgbWFzdGVyCisJIFwJCQkgXAorCSAgby0tLW8tLS1vLS0tby0tLW8JICBvJy0tbyctLW8nLS1vJy0tbyctLU0JIHN1YnN5c3RlbQorCQkJICAgXAkJCSAgICAgLworCQkJICAgICotLS0qLS0tKi0uLi4uLi4uLi4uLSotLSogIHRvcGljCistLS0tLS0tLS0tLS0KKworU3VjaCBkdXBsaWNhdGVzIGFyZSBnZW5lcmFsbHkgZnJvd25lZCB1cG9uIGJlY2F1c2UgdGhleSBjbHV0dGVyIHVwCitoaXN0b3J5LCBtYWtpbmcgaXQgaGFyZGVyIHRvIGZvbGxvdy4gIFRvIGNsZWFuIHRoaW5ncyB1cCwgeW91IG5lZWQgdG8KK3RyYW5zcGxhbnQgdGhlIGNvbW1pdHMgb24gJ3RvcGljJyB0byB0aGUgbmV3ICdzdWJzeXN0ZW0nIHRpcCwgaS5lLiwKK3JlYmFzZSAndG9waWMnLiAgVGhpcyBiZWNvbWVzIGEgcmlwcGxlIGVmZmVjdDogYW55b25lIGRvd25zdHJlYW0gZnJvbQorJ3RvcGljJyBpcyBmb3JjZWQgdG8gcmViYXNlIHRvbywgYW5kIHNvIG9uIQorCitUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIGZpeGVzLCBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9uczoKKworRWFzeSBjYXNlOiBUaGUgY2hhbmdlcyBhcmUgbGl0ZXJhbGx5IHRoZSBzYW1lLjo6CisKKwlUaGlzIGhhcHBlbnMgaWYgdGhlICdzdWJzeXN0ZW0nIHJlYmFzZSB3YXMgYSBzaW1wbGUgcmViYXNlIGFuZAorCWhhZCBubyBjb25mbGljdHMuCisKK0hhcmQgY2FzZTogVGhlIGNoYW5nZXMgYXJlIG5vdCB0aGUgc2FtZS46OgorCisJVGhpcyBoYXBwZW5zIGlmIHRoZSAnc3Vic3lzdGVtJyByZWJhc2UgaGFkIGNvbmZsaWN0cywgb3IgdXNlZAorCWAtLWludGVyYWN0aXZlYCB0byBvbWl0LCBlZGl0LCBzcXVhc2gsIG9yIGZpeHVwIGNvbW1pdHM7IG9yCisJaWYgdGhlIHVwc3RyZWFtIHVzZWQgb25lIG9mIGBjb21taXQgLS1hbWVuZGAsIGByZXNldGAsIG9yCisJYGZpbHRlci1icmFuY2hgLgorCisKK1RoZSBlYXN5IGNhc2UKK35+fn5+fn5+fn5+fn4KKworT25seSB3b3JrcyBpZiB0aGUgY2hhbmdlcyAocGF0Y2ggSURzIGJhc2VkIG9uIHRoZSBkaWZmIGNvbnRlbnRzKSBvbgorJ3N1YnN5c3RlbScgYXJlIGxpdGVyYWxseSB0aGUgc2FtZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSByZWJhc2UKKydzdWJzeXN0ZW0nIGRpZC4KKworSW4gdGhhdCBjYXNlLCB0aGUgZml4IGlzIGVhc3kgYmVjYXVzZSAnZ2l0IHJlYmFzZScga25vd3MgdG8gc2tpcAorY2hhbmdlcyB0aGF0IGFyZSBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIG5ldyB1cHN0cmVhbS4gIFNvIGlmIHlvdSBzYXkKKyhhc3N1bWluZyB5b3UncmUgb24gJ3RvcGljJykKKy0tLS0tLS0tLS0tLQorICAgICQgZ2l0IHJlYmFzZSBzdWJzeXN0ZW0KKy0tLS0tLS0tLS0tLQoreW91IHdpbGwgZW5kIHVwIHdpdGggdGhlIGZpeGVkIGhpc3RvcnkKKy0tLS0tLS0tLS0tLQorICAgIG8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vICBtYXN0ZXIKKwkJCQkgXAorCQkJCSAgbyctLW8nLS1vJy0tbyctLW8nICBzdWJzeXN0ZW0KKwkJCQkJCSAgIFwKKwkJCQkJCSAgICAqLS0tKi0tLSogIHRvcGljCistLS0tLS0tLS0tLS0KKworCitUaGUgaGFyZCBjYXNlCit+fn5+fn5+fn5+fn5+CisKK1RoaW5ncyBnZXQgbW9yZSBjb21wbGljYXRlZCBpZiB0aGUgJ3N1YnN5c3RlbScgY2hhbmdlcyBkbyBub3QgZXhhY3RseQorY29ycmVzcG9uZCB0byB0aGUgb25lcyBiZWZvcmUgdGhlIHJlYmFzZS4KKworTk9URTogV2hpbGUgYW4gImVhc3kgY2FzZSByZWNvdmVyeSIgc29tZXRpbWVzIGFwcGVhcnMgdG8gYmUgc3VjY2Vzc2Z1bAorICAgICAgZXZlbiBpbiB0aGUgaGFyZCBjYXNlLCBpdCBtYXkgaGF2ZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4gIEZvcgorICAgICAgZXhhbXBsZSwgYSBjb21taXQgdGhhdCB3YXMgcmVtb3ZlZCB2aWEgYGdpdCByZWJhc2UKKyAgICAgIC0taW50ZXJhY3RpdmVgIHdpbGwgYmUgKipyZXN1cnJlY3RlZCoqIQorCitUaGUgaWRlYSBpcyB0byBtYW51YWxseSB0ZWxsICdnaXQgcmViYXNlJyAid2hlcmUgdGhlIG9sZCAnc3Vic3lzdGVtJworZW5kZWQgYW5kIHlvdXIgJ3RvcGljJyBiZWdhbiIsIHRoYXQgaXMsIHdoYXQgdGhlIG9sZCBtZXJnZS1iYXNlCitiZXR3ZWVuIHRoZW0gd2FzLiAgWW91IHdpbGwgaGF2ZSB0byBmaW5kIGEgd2F5IHRvIG5hbWUgdGhlIGxhc3QgY29tbWl0CitvZiB0aGUgb2xkICdzdWJzeXN0ZW0nLCBmb3IgZXhhbXBsZToKKworKiBXaXRoIHRoZSAnc3Vic3lzdGVtJyByZWZsb2c6IGFmdGVyICdnaXQgZmV0Y2gnLCB0aGUgb2xkIHRpcCBvZgorICAnc3Vic3lzdGVtJyBpcyBhdCBgc3Vic3lzdGVtQHsxfWAuICBTdWJzZXF1ZW50IGZldGNoZXMgd2lsbAorICBpbmNyZWFzZSB0aGUgbnVtYmVyLiAgKFNlZSBsaW5rZ2l0OmdpdC1yZWZsb2dbMV0uKQorCisqIFJlbGF0aXZlIHRvIHRoZSB0aXAgb2YgJ3RvcGljJzoga25vd2luZyB0aGF0IHlvdXIgJ3RvcGljJyBoYXMgdGhyZWUKKyAgY29tbWl0cywgdGhlIG9sZCB0aXAgb2YgJ3N1YnN5c3RlbScgbXVzdCBiZSBgdG9waWN+M2AuCisKK1lvdSBjYW4gdGhlbiB0cmFuc3BsYW50IHRoZSBvbGQgYHN1YnN5c3RlbS4udG9waWNgIHRvIHRoZSBuZXcgdGlwIGJ5CitzYXlpbmcgKGZvciB0aGUgcmVmbG9nIGNhc2UsIGFuZCBhc3N1bWluZyB5b3UgYXJlIG9uICd0b3BpYycgYWxyZWFkeSk6CistLS0tLS0tLS0tLS0KKyAgICAkIGdpdCByZWJhc2UgLS1vbnRvIHN1YnN5c3RlbSBzdWJzeXN0ZW1AezF9CistLS0tLS0tLS0tLS0KKworVGhlIHJpcHBsZSBlZmZlY3Qgb2YgYSAiaGFyZCBjYXNlIiByZWNvdmVyeSBpcyBlc3BlY2lhbGx5IGJhZDoKKydldmVyeW9uZScgZG93bnN0cmVhbSBmcm9tICd0b3BpYycgd2lsbCBub3cgaGF2ZSB0byBwZXJmb3JtIGEgImhhcmQKK2Nhc2UiIHJlY292ZXJ5IHRvbyEKKworQlVHUworLS0tLQorVGhlIHRvZG8gbGlzdCBwcmVzZW50ZWQgYnkgYC0tcHJlc2VydmUtbWVyZ2VzIC0taW50ZXJhY3RpdmVgIGRvZXMgbm90CityZXByZXNlbnQgdGhlIHRvcG9sb2d5IG9mIHRoZSByZXZpc2lvbiBncmFwaC4gIEVkaXRpbmcgY29tbWl0cyBhbmQKK3Jld29yZGluZyB0aGVpciBjb21taXQgbWVzc2FnZXMgc2hvdWxkIHdvcmsgZmluZSwgYnV0IGF0dGVtcHRzIHRvCityZW9yZGVyIGNvbW1pdHMgdGVuZCB0byBwcm9kdWNlIGNvdW50ZXJpbnR1aXRpdmUgcmVzdWx0cy4KKworRm9yIGV4YW1wbGUsIGFuIGF0dGVtcHQgdG8gcmVhcnJhbmdlCistLS0tLS0tLS0tLS0KKzEgLS0tIDIgLS0tIDMgLS0tIDQgLS0tIDUKKy0tLS0tLS0tLS0tLQordG8KKy0tLS0tLS0tLS0tLQorMSAtLS0gMiAtLS0gNCAtLS0gMyAtLS0gNQorLS0tLS0tLS0tLS0tCitieSBtb3ZpbmcgdGhlICJwaWNrIDQiIGxpbmUgd2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBoaXN0b3J5OgorLS0tLS0tLS0tLS0tCisJMworICAgICAgIC8KKzEgLS0tIDIgLS0tIDQgLS0tIDUKKy0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjdkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0CkBAIC0wLDAgKzEsMTU3IEBACitnaXQtcmVjZWl2ZS1wYWNrKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZWNlaXZlLXBhY2sgLSBSZWNlaXZlIHdoYXQgaXMgcHVzaGVkIGludG8gdGhlIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQtcmVjZWl2ZS1wYWNrJyA8ZGlyZWN0b3J5PgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ludm9rZWQgYnkgJ2dpdCBzZW5kLXBhY2snIGFuZCB1cGRhdGVzIHRoZSByZXBvc2l0b3J5IHdpdGggdGhlCitpbmZvcm1hdGlvbiBmZWQgZnJvbSB0aGUgcmVtb3RlIGVuZC4KKworVGhpcyBjb21tYW5kIGlzIHVzdWFsbHkgbm90IGludm9rZWQgZGlyZWN0bHkgYnkgdGhlIGVuZCB1c2VyLgorVGhlIFVJIGZvciB0aGUgcHJvdG9jb2wgaXMgb24gdGhlICdnaXQgc2VuZC1wYWNrJyBzaWRlLCBhbmQgdGhlCitwcm9ncmFtIHBhaXIgaXMgbWVhbnQgdG8gYmUgdXNlZCB0byBwdXNoIHVwZGF0ZXMgdG8gcmVtb3RlCityZXBvc2l0b3J5LiAgRm9yIHB1bGwgb3BlcmF0aW9ucywgc2VlIGxpbmtnaXQ6Z2l0LWZldGNoLXBhY2tbMV0uCisKK1RoZSBjb21tYW5kIGFsbG93cyBmb3IgY3JlYXRpb24gYW5kIGZhc3QtZm9yd2FyZGluZyBvZiBzaGExIHJlZnMKKyhoZWFkcy90YWdzKSBvbiB0aGUgcmVtb3RlIGVuZCAoc3RyaWN0bHkgc3BlYWtpbmcsIGl0IGlzIHRoZQorbG9jYWwgZW5kICdnaXQtcmVjZWl2ZS1wYWNrJyBydW5zLCBidXQgdG8gdGhlIHVzZXIgd2hvIGlzIHNpdHRpbmcgYXQKK3RoZSBzZW5kLXBhY2sgZW5kLCBpdCBpcyB1cGRhdGluZyB0aGUgcmVtb3RlLiAgQ29uZnVzZWQ/KQorCitUaGVyZSBhcmUgb3RoZXIgcmVhbC13b3JsZCBleGFtcGxlcyBvZiB1c2luZyB1cGRhdGUgYW5kCitwb3N0LXVwZGF0ZSBob29rcyBmb3VuZCBpbiB0aGUgRG9jdW1lbnRhdGlvbi9ob3d0byBkaXJlY3RvcnkuCisKKydnaXQtcmVjZWl2ZS1wYWNrJyBob25vdXJzIHRoZSByZWNlaXZlLmRlbnlOb25GYXN0Rm9yd2FyZHMgY29uZmlnCitvcHRpb24sIHdoaWNoIHRlbGxzIGl0IGlmIHVwZGF0ZXMgdG8gYSByZWYgc2hvdWxkIGJlIGRlbmllZCBpZiB0aGV5CithcmUgbm90IGZhc3QtZm9yd2FyZHMuCisKK09QVElPTlMKKy0tLS0tLS0KKzxkaXJlY3Rvcnk+OjoKKwlUaGUgcmVwb3NpdG9yeSB0byBzeW5jIGludG8uCisKK3ByZS1yZWNlaXZlIEhvb2sKKy0tLS0tLS0tLS0tLS0tLS0KK0JlZm9yZSBhbnkgcmVmIGlzIHVwZGF0ZWQsIGlmICRHSVRfRElSL2hvb2tzL3ByZS1yZWNlaXZlIGZpbGUgZXhpc3RzCithbmQgaXMgZXhlY3V0YWJsZSwgaXQgd2lsbCBiZSBpbnZva2VkIG9uY2Ugd2l0aCBubyBwYXJhbWV0ZXJzLiAgVGhlCitzdGFuZGFyZCBpbnB1dCBvZiB0aGUgaG9vayB3aWxsIGJlIG9uZSBsaW5lIHBlciByZWYgdG8gYmUgdXBkYXRlZDoKKworICAgICAgIHNoYTEtb2xkIFNQIHNoYTEtbmV3IFNQIHJlZm5hbWUgTEYKKworVGhlIHJlZm5hbWUgdmFsdWUgaXMgcmVsYXRpdmUgdG8gJEdJVF9ESVI7IGUuZy4gZm9yIHRoZSBtYXN0ZXIKK2hlYWQgdGhpcyBpcyAicmVmcy9oZWFkcy9tYXN0ZXIiLiAgVGhlIHR3byBzaGExIHZhbHVlcyBiZWZvcmUKK2VhY2ggcmVmbmFtZSBhcmUgdGhlIG9iamVjdCBuYW1lcyBmb3IgdGhlIHJlZm5hbWUgYmVmb3JlIGFuZCBhZnRlcgordGhlIHVwZGF0ZS4gIFJlZnMgdG8gYmUgY3JlYXRlZCB3aWxsIGhhdmUgc2hhMS1vbGQgZXF1YWwgdG8gMFx7NDB9LAord2hpbGUgcmVmcyB0byBiZSBkZWxldGVkIHdpbGwgaGF2ZSBzaGExLW5ldyBlcXVhbCB0byAwXHs0MH0sIG90aGVyd2lzZQorc2hhMS1vbGQgYW5kIHNoYTEtbmV3IHNob3VsZCBiZSB2YWxpZCBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5LgorCitUaGlzIGhvb2sgaXMgY2FsbGVkIGJlZm9yZSBhbnkgcmVmbmFtZSBpcyB1cGRhdGVkIGFuZCBiZWZvcmUgYW55CitmYXN0LWZvcndhcmQgY2hlY2tzIGFyZSBwZXJmb3JtZWQuCisKK0lmIHRoZSBwcmUtcmVjZWl2ZSBob29rIGV4aXRzIHdpdGggYSBub24temVybyBleGl0IHN0YXR1cyBubyB1cGRhdGVzCit3aWxsIGJlIHBlcmZvcm1lZCwgYW5kIHRoZSB1cGRhdGUsIHBvc3QtcmVjZWl2ZSBhbmQgcG9zdC11cGRhdGUKK2hvb2tzIHdpbGwgbm90IGJlIGludm9rZWQgZWl0aGVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHF1aWNrbHkKK2JhaWwgb3V0IGlmIHRoZSB1cGRhdGUgaXMgbm90IHRvIGJlIHN1cHBvcnRlZC4KKwordXBkYXRlIEhvb2sKKy0tLS0tLS0tLS0tCitCZWZvcmUgZWFjaCByZWYgaXMgdXBkYXRlZCwgaWYgJEdJVF9ESVIvaG9va3MvdXBkYXRlIGZpbGUgZXhpc3RzCithbmQgaXMgZXhlY3V0YWJsZSwgaXQgaXMgaW52b2tlZCBvbmNlIHBlciByZWYsIHdpdGggdGhyZWUgcGFyYW1ldGVyczoKKworICAgICAgICRHSVRfRElSL2hvb2tzL3VwZGF0ZSByZWZuYW1lIHNoYTEtb2xkIHNoYTEtbmV3CisKK1RoZSByZWZuYW1lIHBhcmFtZXRlciBpcyByZWxhdGl2ZSB0byAkR0lUX0RJUjsgZS5nLiBmb3IgdGhlIG1hc3RlcgoraGVhZCB0aGlzIGlzICJyZWZzL2hlYWRzL21hc3RlciIuICBUaGUgdHdvIHNoYTEgYXJndW1lbnRzIGFyZQordGhlIG9iamVjdCBuYW1lcyBmb3IgdGhlIHJlZm5hbWUgYmVmb3JlIGFuZCBhZnRlciB0aGUgdXBkYXRlLgorTm90ZSB0aGF0IHRoZSBob29rIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHJlZm5hbWUgaXMgdXBkYXRlZCwKK3NvIGVpdGhlciBzaGExLW9sZCBpcyAwXHs0MH0gKG1lYW5pbmcgdGhlcmUgaXMgbm8gc3VjaCByZWYgeWV0KSwKK29yIGl0IHNob3VsZCBtYXRjaCB3aGF0IGlzIHJlY29yZGVkIGluIHJlZm5hbWUuCisKK1RoZSBob29rIHNob3VsZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIGl0IHdhbnRzIHRvIGRpc2FsbG93Cit1cGRhdGluZyB0aGUgbmFtZWQgcmVmLiAgT3RoZXJ3aXNlIGl0IHNob3VsZCBleGl0IHdpdGggemVyby4KKworU3VjY2Vzc2Z1bCBleGVjdXRpb24gKGEgemVybyBleGl0IHN0YXR1cykgb2YgdGhpcyBob29rIGRvZXMgbm90CitlbnN1cmUgdGhlIHJlZiB3aWxsIGFjdHVhbGx5IGJlIHVwZGF0ZWQsIGl0IGlzIG9ubHkgYSBwcmVyZXF1aXNpdGUuCitBcyBzdWNoIGl0IGlzIG5vdCBhIGdvb2QgaWRlYSB0byBzZW5kIG5vdGljZXMgKGUuZy4gZW1haWwpIGZyb20KK3RoaXMgaG9vay4gIENvbnNpZGVyIHVzaW5nIHRoZSBwb3N0LXJlY2VpdmUgaG9vayBpbnN0ZWFkLgorCitwb3N0LXJlY2VpdmUgSG9vaworLS0tLS0tLS0tLS0tLS0tLS0KK0FmdGVyIGFsbCByZWZzIHdlcmUgdXBkYXRlZCAob3IgYXR0ZW1wdGVkIHRvIGJlIHVwZGF0ZWQpLCBpZiBhbnkKK3JlZiB1cGRhdGUgd2FzIHN1Y2Nlc3NmdWwsIGFuZCBpZiAkR0lUX0RJUi9ob29rcy9wb3N0LXJlY2VpdmUKK2ZpbGUgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLCBpdCB3aWxsIGJlIGludm9rZWQgb25jZSB3aXRoIG5vCitwYXJhbWV0ZXJzLiAgVGhlIHN0YW5kYXJkIGlucHV0IG9mIHRoZSBob29rIHdpbGwgYmUgb25lIGxpbmUKK2ZvciBlYWNoIHN1Y2Nlc3NmdWxseSB1cGRhdGVkIHJlZjoKKworICAgICAgIHNoYTEtb2xkIFNQIHNoYTEtbmV3IFNQIHJlZm5hbWUgTEYKKworVGhlIHJlZm5hbWUgdmFsdWUgaXMgcmVsYXRpdmUgdG8gJEdJVF9ESVI7IGUuZy4gZm9yIHRoZSBtYXN0ZXIKK2hlYWQgdGhpcyBpcyAicmVmcy9oZWFkcy9tYXN0ZXIiLiAgVGhlIHR3byBzaGExIHZhbHVlcyBiZWZvcmUKK2VhY2ggcmVmbmFtZSBhcmUgdGhlIG9iamVjdCBuYW1lcyBmb3IgdGhlIHJlZm5hbWUgYmVmb3JlIGFuZCBhZnRlcgordGhlIHVwZGF0ZS4gIFJlZnMgdGhhdCB3ZXJlIGNyZWF0ZWQgd2lsbCBoYXZlIHNoYTEtb2xkIGVxdWFsIHRvCiswXHs0MH0sIHdoaWxlIHJlZnMgdGhhdCB3ZXJlIGRlbGV0ZWQgd2lsbCBoYXZlIHNoYTEtbmV3IGVxdWFsIHRvCiswXHs0MH0sIG90aGVyd2lzZSBzaGExLW9sZCBhbmQgc2hhMS1uZXcgc2hvdWxkIGJlIHZhbGlkIG9iamVjdHMgaW4KK3RoZSByZXBvc2l0b3J5LgorCitVc2luZyB0aGlzIGhvb2ssIGl0IGlzIGVhc3kgdG8gZ2VuZXJhdGUgbWFpbHMgZGVzY3JpYmluZyB0aGUgdXBkYXRlcwordG8gdGhlIHJlcG9zaXRvcnkuICBUaGlzIGV4YW1wbGUgc2NyaXB0IHNlbmRzIG9uZSBtYWlsIG1lc3NhZ2UgcGVyCityZWYgbGlzdGluZyB0aGUgY29tbWl0cyBwdXNoZWQgdG8gdGhlIHJlcG9zaXRvcnk6CisKKwkjIS9iaW4vc2gKKwkjIG1haWwgb3V0IGNvbW1pdCB1cGRhdGUgaW5mb3JtYXRpb24uCisJd2hpbGUgcmVhZCBvdmFsIG52YWwgcmVmCisJZG8KKwkJaWYgZXhwciAiJG92YWwiIDogJzAqJCcgPi9kZXYvbnVsbAorCQl0aGVuCisJCQllY2hvICJDcmVhdGVkIGEgbmV3IHJlZiwgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorCQkJZ2l0IHJldi1saXN0IC0tcHJldHR5ICIkbnZhbCIKKwkJZWxzZQorCQkJZWNobyAiTmV3IGNvbW1pdHM6IgorCQkJZ2l0IHJldi1saXN0IC0tcHJldHR5ICIkbnZhbCIgIl4kb3ZhbCIKKwkJZmkgfAorCQltYWlsIC1zICJDaGFuZ2VzIHRvIHJlZiAkcmVmIiBjb21taXQtbGlzdEBteWRvbWFpbgorCWRvbmUKKwlleGl0IDAKKworVGhlIGV4aXQgY29kZSBmcm9tIHRoaXMgaG9vayBpbnZvY2F0aW9uIGlzIGlnbm9yZWQsIGhvd2V2ZXIgYQorbm9uLXplcm8gZXhpdCBjb2RlIHdpbGwgZ2VuZXJhdGUgYW4gZXJyb3IgbWVzc2FnZS4KKworTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciByZWZuYW1lIHRvIG5vdCBoYXZlIHNoYTEtbmV3IHdoZW4gdGhpcworaG9vayBydW5zLiAgVGhpcyBjYW4gZWFzaWx5IG9jY3VyIGlmIGFub3RoZXIgdXNlciBtb2RpZmllcyB0aGUgcmVmCithZnRlciBpdCB3YXMgdXBkYXRlZCBieSAnZ2l0LXJlY2VpdmUtcGFjaycsIGJ1dCBiZWZvcmUgdGhlIGhvb2sgd2FzIGFibGUKK3RvIGV2YWx1YXRlIGl0LiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBob29rcyByZWx5IG9uIHNoYTEtbmV3CityYXRoZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSBvZiByZWZuYW1lLgorCitwb3N0LXVwZGF0ZSBIb29rCistLS0tLS0tLS0tLS0tLS0tCitBZnRlciBhbGwgb3RoZXIgcHJvY2Vzc2luZywgaWYgYXQgbGVhc3Qgb25lIHJlZiB3YXMgdXBkYXRlZCwgYW5kCitpZiAkR0lUX0RJUi9ob29rcy9wb3N0LXVwZGF0ZSBmaWxlIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZSwgdGhlbgorcG9zdC11cGRhdGUgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbGlzdCBvZiByZWZzIHRoYXQgaGF2ZSBiZWVuIHVwZGF0ZWQuCitUaGlzIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBhbnkgcmVwb3NpdG9yeSB3aWRlIGNsZWFudXAgdGFza3MuCisKK1RoZSBleGl0IGNvZGUgZnJvbSB0aGlzIGhvb2sgaW52b2NhdGlvbiBpcyBpZ25vcmVkOyB0aGUgb25seSB0aGluZworbGVmdCBmb3IgJ2dpdC1yZWNlaXZlLXBhY2snIHRvIGRvIGF0IHRoYXQgcG9pbnQgaXMgdG8gZXhpdCBpdHNlbGYKK2FueXdheS4KKworVGhpcyBob29rIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gcnVuIGBnaXQgdXBkYXRlLXNlcnZlci1pbmZvYAoraWYgdGhlIHJlcG9zaXRvcnkgaXMgcGFja2VkIGFuZCBpcyBzZXJ2ZWQgdmlhIGEgZHVtYiB0cmFuc3BvcnQuCisKKwkjIS9iaW4vc2gKKwlleGVjIGdpdCB1cGRhdGUtc2VydmVyLWluZm8KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXNlbmQtcGFja1sxXSwgbGlua2dpdDpnaXRuYW1lc3BhY2VzWzddCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVmbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlZmxvZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlMmQyMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlZmxvZy50eHQKQEAgLTAsMCArMSw5NiBAQAorZ2l0LXJlZmxvZygxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVmbG9nIC0gTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZWZsb2cnIDxzdWJjb21tYW5kPiA8b3B0aW9ucz4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGUgY29tbWFuZCB0YWtlcyB2YXJpb3VzIHN1YmNvbW1hbmRzLCBhbmQgZGlmZmVyZW50IG9wdGlvbnMKK2RlcGVuZGluZyBvbiB0aGUgc3ViY29tbWFuZDoKKworW3ZlcnNlXQorJ2dpdCByZWZsb2cgZXhwaXJlJyBbLS1kcnktcnVuXSBbLS1zdGFsZS1maXhdIFstLXZlcmJvc2VdCisJWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tYWxsXSA8cmVmcz4uLi4KKydnaXQgcmVmbG9nIGRlbGV0ZScgcmVmQFx7c3BlY2lmaWVyXH0uLi4KKydnaXQgcmVmbG9nJyBbJ3Nob3cnXSBbbG9nLW9wdGlvbnNdIFs8cmVmPl0KKworUmVmbG9nIGlzIGEgbWVjaGFuaXNtIHRvIHJlY29yZCB3aGVuIHRoZSB0aXAgb2YgYnJhbmNoZXMgYXJlCit1cGRhdGVkLiAgVGhpcyBjb21tYW5kIGlzIHRvIG1hbmFnZSB0aGUgaW5mb3JtYXRpb24gcmVjb3JkZWQgaW4gaXQuCisKK1RoZSBzdWJjb21tYW5kICJleHBpcmUiIGlzIHVzZWQgdG8gcHJ1bmUgb2xkZXIgcmVmbG9nIGVudHJpZXMuCitFbnRyaWVzIG9sZGVyIHRoYW4gYGV4cGlyZWAgdGltZSwgb3IgZW50cmllcyBvbGRlciB0aGFuCitgZXhwaXJlLXVucmVhY2hhYmxlYCB0aW1lIGFuZCBub3QgcmVhY2hhYmxlIGZyb20gdGhlIGN1cnJlbnQKK3RpcCwgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcmVmbG9nLiAgVGhpcyBpcyB0eXBpY2FsbHkgbm90IHVzZWQKK2RpcmVjdGx5IGJ5IHRoZSBlbmQgdXNlcnMgLS0gaW5zdGVhZCwgc2VlIGxpbmtnaXQ6Z2l0LWdjWzFdLgorCitUaGUgc3ViY29tbWFuZCAic2hvdyIgKHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQsIGluIHRoZSBhYnNlbmNlIG9mIGFueQorc3ViY29tbWFuZHMpIHdpbGwgdGFrZSBhbGwgdGhlIG5vcm1hbCBsb2cgb3B0aW9ucywgYW5kIHNob3cgdGhlIGxvZyBvZgordGhlIHJlZmVyZW5jZSBwcm92aWRlZCBpbiB0aGUgY29tbWFuZC1saW5lIChvciBgSEVBRGAsIGJ5IGRlZmF1bHQpLgorVGhlIHJlZmxvZyB3aWxsIGNvdmVyIGFsbCByZWNlbnQgYWN0aW9ucyAoSEVBRCByZWZsb2cgcmVjb3JkcyBicmFuY2ggc3dpdGNoaW5nCithcyB3ZWxsKS4gIEl0IGlzIGFuIGFsaWFzIGZvciBgZ2l0IGxvZyAtZyAtLWFiYnJldi1jb21taXQgLS1wcmV0dHk9b25lbGluZWA7CitzZWUgbGlua2dpdDpnaXQtbG9nWzFdLgorCitUaGUgcmVmbG9nIGlzIHVzZWZ1bCBpbiB2YXJpb3VzIGdpdCBjb21tYW5kcywgdG8gc3BlY2lmeSB0aGUgb2xkIHZhbHVlCitvZiBhIHJlZmVyZW5jZS4gRm9yIGV4YW1wbGUsIGBIRUFEQHsyfWAgbWVhbnMgIndoZXJlIEhFQUQgdXNlZCB0byBiZQordHdvIG1vdmVzIGFnbyIsIGBtYXN0ZXJAe29uZS53ZWVrLmFnb31gIG1lYW5zICJ3aGVyZSBtYXN0ZXIgdXNlZCB0bworcG9pbnQgdG8gb25lIHdlZWsgYWdvIiwgYW5kIHNvIG9uLiBTZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10gZm9yCittb3JlIGRldGFpbHMuCisKK1RvIGRlbGV0ZSBzaW5nbGUgZW50cmllcyBmcm9tIHRoZSByZWZsb2csIHVzZSB0aGUgc3ViY29tbWFuZCAiZGVsZXRlIgorYW5kIHNwZWNpZnkgdGhlIF9leGFjdF8gZW50cnkgKGUuZy4gImBnaXQgcmVmbG9nIGRlbGV0ZSBtYXN0ZXJAezJ9YCIpLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1zdGFsZS1maXg6OgorCVRoaXMgcmV2YW1wcyB0aGUgbG9naWMgLS0gdGhlIGRlZmluaXRpb24gb2YgImJyb2tlbiBjb21taXQiCisJYmVjb21lczogYSBjb21taXQgdGhhdCBpcyBub3QgcmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZSByZWZzIGFuZAorCXRoZXJlIGlzIGEgbWlzc2luZyBvYmplY3QgYW1vbmcgdGhlIGNvbW1pdCwgdHJlZSwgb3IgYmxvYgorCW9iamVjdHMgcmVhY2hhYmxlIGZyb20gaXQgdGhhdCBpcyBub3QgcmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZQorCXJlZnMuCisrCitUaGlzIGNvbXB1dGF0aW9uIGludm9sdmVzIHRyYXZlcnNpbmcgYWxsIHRoZSByZWFjaGFibGUgb2JqZWN0cywgaS5lLiBpdAoraGFzIHRoZSBzYW1lIGNvc3QgYXMgJ2dpdCBwcnVuZScuICBGb3J0dW5hdGVseSwgb25jZSB0aGlzIGlzIHJ1biwgd2UKK3Nob3VsZCBub3QgaGF2ZSB0byBldmVyIHdvcnJ5IGFib3V0IG1pc3Npbmcgb2JqZWN0cywgYmVjYXVzZSB0aGUgY3VycmVudAorcHJ1bmUgYW5kIHBhY2stb2JqZWN0cyBrbm93IGFib3V0IHJlZmxvZ3MgYW5kIHByb3RlY3Qgb2JqZWN0cyByZWZlcnJlZCBieQordGhlbS4KKworLS1leHBpcmU9PHRpbWU+OjoKKwlFbnRyaWVzIG9sZGVyIHRoYW4gdGhpcyB0aW1lIGFyZSBwcnVuZWQuICBXaXRob3V0IHRoZQorCW9wdGlvbiBpdCBpcyB0YWtlbiBmcm9tIGNvbmZpZ3VyYXRpb24gYGdjLnJlZmxvZ0V4cGlyZWAsCisJd2hpY2ggaW4gdHVybiBkZWZhdWx0cyB0byA5MCBkYXlzLgorCistLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT46OgorCUVudHJpZXMgb2xkZXIgdGhhbiB0aGlzIHRpbWUgYW5kIG5vdCByZWFjaGFibGUgZnJvbQorCXRoZSBjdXJyZW50IHRpcCBvZiB0aGUgYnJhbmNoIGFyZSBwcnVuZWQuICBXaXRob3V0IHRoZQorCW9wdGlvbiBpdCBpcyB0YWtlbiBmcm9tIGNvbmZpZ3VyYXRpb24KKwlgZ2MucmVmbG9nRXhwaXJlVW5yZWFjaGFibGVgLCB3aGljaCBpbiB0dXJuIGRlZmF1bHRzIHRvCisJMzAgZGF5cy4KKworLS1hbGw6OgorCUluc3RlYWQgb2YgbGlzdGluZyA8cmVmcz4gZXhwbGljaXRseSwgcHJ1bmUgYWxsIHJlZnMuCisKKy0tdXBkYXRlcmVmOjoKKwlVcGRhdGUgdGhlIHJlZiB3aXRoIHRoZSBzaGExIG9mIHRoZSB0b3AgcmVmbG9nIGVudHJ5IChpLmUuCisJPHJlZj5AXHswXH0pIGFmdGVyIGV4cGlyaW5nIG9yIGRlbGV0aW5nLgorCistLXJld3JpdGU6OgorCVdoaWxlIGV4cGlyaW5nIG9yIGRlbGV0aW5nLCBhZGp1c3QgZWFjaCByZWZsb2cgZW50cnkgdG8gZW5zdXJlCisJdGhhdCB0aGUgYG9sZGAgc2hhMSBmaWVsZCBwb2ludHMgdG8gdGhlIGBuZXdgIHNoYTEgZmllbGQgb2YgdGhlCisJcHJldmlvdXMgZW50cnkuCisKKy0tdmVyYm9zZTo6CisJUHJpbnQgZXh0cmEgaW5mb3JtYXRpb24gb24gc2NyZWVuLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbGluay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWxpbmsudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzNjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWxpbmsudHh0CkBAIC0wLDAgKzEsMzAgQEAKK2dpdC1yZWxpbmsoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlbGluayAtIEhhcmRsaW5rIGNvbW1vbiBvYmplY3RzIGluIGxvY2FsIHJlcG9zaXRvcmllcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVsaW5rJyBbLS1zYWZlXSA8ZGlyPi4uLiA8bWFzdGVyX2Rpcj4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIHdpbGwgc2NhbiAxIG9yIG1vcmUgb2JqZWN0IHJlcG9zaXRvcmllcyBhbmQgbG9vayBmb3Igb2JqZWN0cyBpbiBjb21tb24KK3dpdGggYSBtYXN0ZXIgcmVwb3NpdG9yeS4gT2JqZWN0cyBub3QgYWxyZWFkeSBoYXJkbGlua2VkIHRvIHRoZSBtYXN0ZXIKK3JlcG9zaXRvcnkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgaGFyZGxpbmsgdG8gdGhlIG1hc3RlciByZXBvc2l0b3J5LgorCitPUFRJT05TCistLS0tLS0tCistLXNhZmU6OgorCVN0b3BzIGlmIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUgaGFzaCBleGlzdCBidXQgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuCisJRGVmYXVsdCBpcyB0byB3YXJuIGFuZCBjb250aW51ZS4KKworPGRpcj46OgorCURpcmVjdG9yaWVzIGNvbnRhaW5pbmcgYSAuZ2l0L29iamVjdHMvIHN1YmRpcmVjdG9yeS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZXh0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1leHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOGUxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZXh0LnR4dApAQCAtMCwwICsxLDEyNiBAQAorZ2l0LXJlbW90ZS1leHQoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZW1vdGUtZXh0IC0gQnJpZGdlIHNtYXJ0IHRyYW5zcG9ydCB0byBleHRlcm5hbCBjb21tYW5kLgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK2dpdCByZW1vdGUgYWRkIDxuaWNrPiAiZXh0Ojo8Y29tbWFuZD5bIDxhcmd1bWVudHM+Li4uXSIKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIHJlbW90ZSBoZWxwZXIgdXNlcyB0aGUgc3BlY2lmaWVkICc8Y29tbWFuZD4nIHRvIGNvbm5lY3QKK3RvIGEgcmVtb3RlIGdpdCBzZXJ2ZXIuCisKK0RhdGEgd3JpdHRlbiB0byBzdGRpbiBvZiB0aGUgc3BlY2lmaWVkICc8Y29tbWFuZD4nIGlzIGFzc3VtZWQKK3RvIGJlIHNlbnQgdG8gYSBnaXQ6Ly8gc2VydmVyLCBnaXQtdXBsb2FkLXBhY2ssIGdpdC1yZWNlaXZlLXBhY2sKK29yIGdpdC11cGxvYWQtYXJjaGl2ZSAoZGVwZW5kaW5nIG9uIHNpdHVhdGlvbiksIGFuZCBkYXRhIHJlYWQKK2Zyb20gc3Rkb3V0IG9mIDxjb21tYW5kPiBpcyBhc3N1bWVkIHRvIGJlIHJlY2VpdmVkIGZyb20KK3RoZSBzYW1lIHNlcnZpY2UuCisKK0NvbW1hbmQgYW5kIGFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGFuIHVuZXNjYXBlZCBzcGFjZS4KKworVGhlIGZvbGxvd2luZyBzZXF1ZW5jZXMgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZzoKKworJyUgJzo6CisJTGl0ZXJhbCBzcGFjZSBpbiBjb21tYW5kIG9yIGFyZ3VtZW50LgorCisnJSUnOjoKKwlMaXRlcmFsIHBlcmNlbnQgc2lnbi4KKworJyVzJzo6CisJUmVwbGFjZWQgd2l0aCBuYW1lIChyZWNlaXZlLXBhY2ssIHVwbG9hZC1wYWNrLCBvcgorCXVwbG9hZC1hcmNoaXZlKSBvZiB0aGUgc2VydmljZSBnaXQgd2FudHMgdG8gaW52b2tlLgorCisnJVMnOjoKKwlSZXBsYWNlZCB3aXRoIGxvbmcgbmFtZSAoZ2l0LXJlY2VpdmUtcGFjaywKKwlnaXQtdXBsb2FkLXBhY2ssIG9yIGdpdC11cGxvYWQtYXJjaGl2ZSkgb2YgdGhlIHNlcnZpY2UKKwlnaXQgd2FudHMgdG8gaW52b2tlLgorCisnJUcnIChtdXN0IGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXJzIGluIGFuIGFyZ3VtZW50KTo6CisJVGhpcyBhcmd1bWVudCB3aWxsIG5vdCBiZSBwYXNzZWQgdG8gJzxjb21tYW5kPicuIEluc3RlYWQsIGl0CisJd2lsbCBjYXVzZSB0aGUgaGVscGVyIHRvIHN0YXJ0IGJ5IHNlbmRpbmcgZ2l0Oi8vIHNlcnZpY2UgcmVxdWVzdHMgdG8KKwl0aGUgcmVtb3RlIHNpZGUgd2l0aCB0aGUgc2VydmljZSBmaWVsZCBzZXQgdG8gYW4gYXBwcm9wcmlhdGUgdmFsdWUgYW5kCisJdGhlIHJlcG9zaXRvcnkgZmllbGQgc2V0IHRvIHJlc3Qgb2YgdGhlIGFyZ3VtZW50LiBEZWZhdWx0IGlzIG5vdCB0byBzZW5kCisJc3VjaCBhIHJlcXVlc3QuCisrCitUaGlzIGlzIHVzZWZ1bCBpZiByZW1vdGUgc2lkZSBpcyBnaXQ6Ly8gc2VydmVyIGFjY2Vzc2VkIG92ZXIKK3NvbWUgdHVubmVsLgorCisnJVYnIChtdXN0IGJlIGZpcnN0IGNoYXJhY3RlcnMgaW4gYXJndW1lbnQpOjoKKwlUaGlzIGFyZ3VtZW50IHdpbGwgbm90IGJlIHBhc3NlZCB0byAnPGNvbW1hbmQ+Jy4gSW5zdGVhZCBpdCBzZXRzCisJdGhlIHZob3N0IGZpZWxkIGluIHRoZSBnaXQ6Ly8gc2VydmljZSByZXF1ZXN0ICh0byByZXN0IG9mIHRoZSBhcmd1bWVudCkuCisJRGVmYXVsdCBpcyBub3QgdG8gc2VuZCB2aG9zdCBpbiBzdWNoIHJlcXVlc3QgKGlmIHNlbnQpLgorCitFTlZJUk9OTUVOVCBWQVJJQUJMRVM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dJVF9UUkFOU0xPT1BfREVCVUc6OgorCUlmIHNldCwgcHJpbnRzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB2YXJpb3VzIHJlYWRzL3dyaXRlcy4KKworRU5WSVJPTk1FTlQgVkFSSUFCTEVTIFBBU1NFRCBUTyBDT01NQU5EOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHSVRfRVhUX1NFUlZJQ0U6OgorCVNldCB0byBsb25nIG5hbWUgKGdpdC11cGxvYWQtcGFjaywgZXRjLi4uKSBvZiBzZXJ2aWNlIGhlbHBlciBuZWVkcworCXRvIGludm9rZS4KKworR0lUX0VYVF9TRVJWSUNFX05PUFJFRklYOjoKKwlTZXQgdG8gbG9uZyBuYW1lICh1cGxvYWQtcGFjaywgZXRjLi4uKSBvZiBzZXJ2aWNlIGhlbHBlciBuZWVkcworCXRvIGludm9rZS4KKworCitFWEFNUExFUzoKKy0tLS0tLS0tLQorVGhpcyByZW1vdGUgaGVscGVyIGlzIHRyYW5zcGFyZW50bHkgdXNlZCBieSBnaXQgd2hlbgoreW91IHVzZSBjb21tYW5kcyBzdWNoIGFzICJnaXQgZmV0Y2ggPFVSTD4iLCAiZ2l0IGNsb25lIDxVUkw+IiwKKywgImdpdCBwdXNoIDxVUkw+IiBvciAiZ2l0IHJlbW90ZSBhZGQgPG5pY2s+IDxVUkw+Iiwgd2hlcmUgPFVSTD4KK2JlZ2lucyB3aXRoIGBleHQ6OmAuICBFeGFtcGxlczoKKworImV4dDo6c3NoIC1pIC9ob21lL2Zvby8uc3NoL3NvbWVrZXkgdXNlciYjNjQ7aG9zdC5leGFtcGxlICVTICdmb28vcmVwbyciOjoKKwlMaWtlIGhvc3QuZXhhbXBsZTpmb28vcmVwbywgYnV0IHVzZSAvaG9tZS9mb28vLnNzaC9zb21la2V5IGFzCisJa2V5cGFpciBhbmQgdXNlciBhcyB1c2VyIG9uIHJlbW90ZSBzaWRlLiBUaGlzIGF2b2lkcyBuZWVkaW5nIHRvCisJZWRpdCAuc3NoL2NvbmZpZy4KKworImV4dDo6c29jYXQgLXQzNjAwIC0gQUJTVFJBQ1QtQ09OTkVDVDovZ2l0LXNlcnZlciAlRy9zb21lcmVwbyI6OgorCVJlcHJlc2VudHMgcmVwb3NpdG9yeSB3aXRoIHBhdGggL3NvbWVyZXBvIGFjY2Vzc2FibGUgb3ZlcgorCWdpdCBwcm90b2NvbCBhdCBhYnN0cmFjdCBuYW1lc3BhY2UgYWRkcmVzcyAvZ2l0LXNlcnZlci4KKworImV4dDo6Z2l0LXNlcnZlci1hbGlhcyBmb28gJUcvcmVwbyI6OgorCVJlcHJlc2VudHMgYSByZXBvc2l0b3J5IHdpdGggcGF0aCAvcmVwbyBhY2Nlc3NlZCB1c2luZyB0aGUKKwloZWxwZXIgcHJvZ3JhbSAiZ2l0LXNlcnZlci1hbGlhcyBmb28iLiAgVGhlIHBhdGggdG8gdGhlCisJcmVwb3NpdG9yeSBhbmQgdHlwZSBvZiByZXF1ZXN0IGFyZSBub3QgcGFzc2VkIG9uIHRoZSBjb21tYW5kCisJbGluZSBidXQgYXMgcGFydCBvZiB0aGUgcHJvdG9jb2wgc3RyZWFtLCBhcyB1c3VhbCB3aXRoIGdpdDovLworCXByb3RvY29sLgorCisiZXh0OjpnaXQtc2VydmVyLWFsaWFzIGZvbyAlRy9yZXBvICVWZm9vIjo6CisJUmVwcmVzZW50cyBhIHJlcG9zaXRvcnkgd2l0aCBwYXRoIC9yZXBvIGFjY2Vzc2VkIHVzaW5nIHRoZQorCWhlbHBlciBwcm9ncmFtICJnaXQtc2VydmVyLWFsaWFzIGZvbyIuICBUaGUgaG9zdG5hbWUgZm9yIHRoZQorCXJlbW90ZSBzZXJ2ZXIgcGFzc2VkIGluIHRoZSBwcm90b2NvbCBzdHJlYW0gd2lsbCBiZSAiZm9vIgorCSh0aGlzIGFsbG93cyBtdWx0aXBsZSB2aXJ0dWFsIGdpdCBzZXJ2ZXJzIHRvIHNoYXJlIGEKKwlsaW5rLWxldmVsIGFkZHJlc3MpLgorCisiZXh0OjpnaXQtc2VydmVyLWFsaWFzIGZvbyAlRy9yZXBvJSB3aXRoJSBzcGFjZXMgJVZmb28iOjoKKwlSZXByZXNlbnRzIGEgcmVwb3NpdG9yeSB3aXRoIHBhdGggJy9yZXBvIHdpdGggc3BhY2VzJyBhY2Nlc3NlZAorCXVzaW5nIHRoZSBoZWxwZXIgcHJvZ3JhbSAiZ2l0LXNlcnZlci1hbGlhcyBmb28iLiAgVGhlIGhvc3RuYW1lIGZvcgorCXRoZSByZW1vdGUgc2VydmVyIHBhc3NlZCBpbiB0aGUgcHJvdG9jb2wgc3RyZWFtIHdpbGwgYmUgImZvbyIKKwkodGhpcyBhbGxvd3MgbXVsdGlwbGUgdmlydHVhbCBnaXQgc2VydmVycyB0byBzaGFyZSBhCisJbGluay1sZXZlbCBhZGRyZXNzKS4KKworImV4dDo6Z2l0LXNzbCBmb28uZXhhbXBsZSAvYmFyIjo6CisJUmVwcmVzZW50cyBhIHJlcG9zaXRvcnkgYWNjZXNzZWQgdXNpbmcgdGhlIGhlbHBlciBwcm9ncmFtCisJImdpdC1zc2wgZm9vLmV4YW1wbGUgL2JhciIuICBUaGUgdHlwZSBvZiByZXF1ZXN0IGNhbiBiZQorCWRldGVybWluZWQgYnkgdGhlIGhlbHBlciB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKHNlZQorCWFib3ZlKS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0KK0RvY3VtZW50YXRpb24gYnkgSWxhcmkgTGl1c3ZhYXJhLCBKb25hdGhhbiBOaWVkZXIgYW5kIHRoZSBnaXQgbGlzdAorPGdpdEB2Z2VyLmtlcm5lbC5vcmc+CisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWZkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1mZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA5NWQ1NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1mZC50eHQKQEAgLTAsMCArMSw1OSBAQAorZ2l0LXJlbW90ZS1mZCgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVtb3RlLWZkIC0gUmVmbGVjdCBzbWFydCB0cmFuc3BvcnQgc3RyZWFtIGJhY2sgdG8gY2FsbGVyCisKK1NZTk9QU0lTCistLS0tLS0tLQorImZkOjo8aW5mZD5bLDxvdXRmZD5dWy88YW55dGhpbmc+XSIgKGFzIFVSTCkKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGhlbHBlciB1c2VzIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3JzIHRvIGNvbm5lY3QgdG8gYSByZW1vdGUgZ2l0IHNlcnZlci4KK1RoaXMgaXMgbm90IG1lYW50IGZvciBlbmQgdXNlcnMgYnV0IGZvciBwcm9ncmFtcyBhbmQgc2NyaXB0cyBjYWxsaW5nIGdpdAorZmV0Y2gsIHB1c2ggb3IgYXJjaGl2ZS4KKworSWYgb25seSA8aW5mZD4gaXMgZ2l2ZW4sIGl0IGlzIGFzc3VtZWQgdG8gYmUgYSBiaWRpcmVjdGlvbmFsIHNvY2tldCBjb25uZWN0ZWQKK3RvIHJlbW90ZSBnaXQgc2VydmVyIChnaXQtdXBsb2FkLXBhY2ssIGdpdC1yZWNlaXZlLXBhY2sgb3IKK2dpdC11cGxvYWQtYWNoaXZlKS4gSWYgYm90aCA8aW5mZD4gYW5kIDxvdXRmZD4gYXJlIGdpdmVuLCB0aGV5IGFyZSBhc3N1bWVkCit0byBiZSBwaXBlcyBjb25uZWN0ZWQgdG8gYSByZW1vdGUgZ2l0IHNlcnZlciAoPGluZmQ+IGJlaW5nIHRoZSBpbmJvdW5kIHBpcGUKK2FuZCA8b3V0ZmQ+IGJlaW5nIHRoZSBvdXRib3VuZCBwaXBlLgorCitJdCBpcyBhc3N1bWVkIHRoYXQgYW55IGhhbmRzaGFraW5nIHByb2NlZHVyZXMgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcGxldGVkCisoc3VjaCBhcyBzZW5kaW5nIHNlcnZpY2UgcmVxdWVzdCBmb3IgZ2l0Oi8vKSBiZWZvcmUgdGhpcyBoZWxwZXIgaXMgc3RhcnRlZC4KKworPGFueXRoaW5nPiBjYW4gYmUgYW55IHN0cmluZy4gSXQgaXMgaWdub3JlZC4gSXQgaXMgbWVhbnQgZm9yIHByb3ZpZGluZworaW5mb3JtYXRpb24gdG8gdXNlciBpbiB0aGUgVVJMIGluIGNhc2UgdGhhdCBVUkwgaXMgZGlzcGxheWVkIGluIHNvbWUKK2NvbnRleHQuCisKK0VOVklST05NRU5UIFZBUklBQkxFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHSVRfVFJBTlNMT09QX0RFQlVHOjoKKwlJZiBzZXQsIHByaW50cyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdmFyaW91cyByZWFkcy93cml0ZXMuCisKK0VYQU1QTEVTCistLS0tLS0tLQorYGdpdCBmZXRjaCBmZDo6MTcgbWFzdGVyYDo6CisJRmV0Y2ggbWFzdGVyLCB1c2luZyBmaWxlIGRlc2NyaXB0b3IgIzE3IHRvIGNvbW11bmljYXRlIHdpdGgKKwlnaXQtdXBsb2FkLXBhY2suCisKK2BnaXQgZmV0Y2ggZmQ6OjE3L2ZvbyBtYXN0ZXJgOjoKKwlTYW1lIGFzIGFib3ZlLgorCitgZ2l0IHB1c2ggZmQ6OjcsOCBtYXN0ZXIgKGFzIFVSTClgOjoKKwlQdXNoIG1hc3RlciwgdXNpbmcgZmlsZSBkZXNjcmlwdG9yICM3IHRvIHJlYWQgZGF0YSBmcm9tCisJZ2l0LXJlY2VpdmUtcGFjayBhbmQgZmlsZSBkZXNjcmlwdG9yICM4IHRvIHdyaXRlIGRhdGEgdG8KKwlzYW1lIHNlcnZpY2UuCisKK2BnaXQgcHVzaCBmZDo6Nyw4L2JhciBtYXN0ZXJgOjoKKwlTYW1lIGFzIGFib3ZlLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBJbGFyaSBMaXVzdmFhcmEgYW5kIHRoZSBnaXQgbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtaGVscGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtaGVscGVycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4MzZlNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1oZWxwZXJzLnR4dApAQCAtMCwwICsxLDM2OSBAQAorZ2l0LXJlbW90ZS1oZWxwZXJzKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlbW90ZS1oZWxwZXJzIC0gSGVscGVyIHByb2dyYW1zIHRvIGludGVyYWN0IHdpdGggcmVtb3RlIHJlcG9zaXRvcmllcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVtb3RlLTx0cmFuc3BvcnQ+JyA8cmVwb3NpdG9yeT4gWzxVUkw+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworUmVtb3RlIGhlbHBlciBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgbm90IHVzZWQgZGlyZWN0bHkgYnkgZW5kIHVzZXJzLAorYnV0IHRoZXkgYXJlIGludm9rZWQgYnkgZ2l0IHdoZW4gaXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCByZW1vdGUKK3JlcG9zaXRvcmllcyBnaXQgZG9lcyBub3Qgc3VwcG9ydCBuYXRpdmVseS4gIEEgZ2l2ZW4gaGVscGVyIHdpbGwKK2ltcGxlbWVudCBhIHN1YnNldCBvZiB0aGUgY2FwYWJpbGl0aWVzIGRvY3VtZW50ZWQgaGVyZS4gV2hlbiBnaXQKK25lZWRzIHRvIGludGVyYWN0IHdpdGggYSByZXBvc2l0b3J5IHVzaW5nIGEgcmVtb3RlIGhlbHBlciwgaXQgc3Bhd25zCit0aGUgaGVscGVyIGFzIGFuIGluZGVwZW5kZW50IHByb2Nlc3MsIHNlbmRzIGNvbW1hbmRzIHRvIHRoZSBoZWxwZXIncworc3RhbmRhcmQgaW5wdXQsIGFuZCBleHBlY3RzIHJlc3VsdHMgZnJvbSB0aGUgaGVscGVyJ3Mgc3RhbmRhcmQKK291dHB1dC4gQmVjYXVzZSBhIHJlbW90ZSBoZWxwZXIgcnVucyBhcyBhbiBpbmRlcGVuZGVudCBwcm9jZXNzIGZyb20KK2dpdCwgdGhlcmUgaXMgbm8gbmVlZCB0byByZS1saW5rIGdpdCB0byBhZGQgYSBuZXcgaGVscGVyLCBub3IgYW55CituZWVkIHRvIGxpbmsgdGhlIGhlbHBlciB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBnaXQuCisKK0V2ZXJ5IGhlbHBlciBtdXN0IHN1cHBvcnQgdGhlICJjYXBhYmlsaXRpZXMiIGNvbW1hbmQsIHdoaWNoIGdpdAordXNlcyB0byBkZXRlcm1pbmUgd2hhdCBvdGhlciBjb21tYW5kcyB0aGUgaGVscGVyIHdpbGwgYWNjZXB0LiAgVGhvc2UKK290aGVyIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGRpc2NvdmVyIGFuZCB1cGRhdGUgcmVtb3RlIHJlZnMsCit0cmFuc3BvcnQgb2JqZWN0cyBiZXR3ZWVuIHRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKK2FuZCB1cGRhdGUgdGhlIGxvY2FsIG9iamVjdCBzdG9yZS4KKworR2l0IGNvbWVzIHdpdGggYSAiY3VybCIgZmFtaWx5IG9mIHJlbW90ZSBoZWxwZXJzLCB0aGF0IGhhbmRsZSB2YXJpb3VzCit0cmFuc3BvcnQgcHJvdG9jb2xzLCBzdWNoIGFzICdnaXQtcmVtb3RlLWh0dHAnLCAnZ2l0LXJlbW90ZS1odHRwcycsCisnZ2l0LXJlbW90ZS1mdHAnIGFuZCAnZ2l0LXJlbW90ZS1mdHBzJy4gVGhleSBpbXBsZW1lbnQgdGhlIGNhcGFiaWxpdGllcworJ2ZldGNoJywgJ29wdGlvbicsIGFuZCAncHVzaCcuCisKK0lOUFVUIEZPUk1BVAorLS0tLS0tLS0tLS0tCisKK0dpdCBzZW5kcyB0aGUgcmVtb3RlIGhlbHBlciBhIGxpc3Qgb2YgY29tbWFuZHMgb24gc3RhbmRhcmQgaW5wdXQsIG9uZQorcGVyIGxpbmUuICBUaGUgZmlyc3QgY29tbWFuZCBpcyBhbHdheXMgdGhlICdjYXBhYmlsaXRpZXMnIGNvbW1hbmQsIGluCityZXNwb25zZSB0byB3aGljaCB0aGUgcmVtb3RlIGhlbHBlciBtdXN0IHByaW50IGEgbGlzdCBvZiB0aGUKK2NhcGFiaWxpdGllcyBpdCBzdXBwb3J0cyAoc2VlIGJlbG93KSBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUuICBUaGUKK3Jlc3BvbnNlIHRvIHRoZSBjYXBhYmlsaXRpZXMgY29tbWFuZCBkZXRlcm1pbmVzIHdoYXQgY29tbWFuZHMgR2l0IHVzZXMKK2luIHRoZSByZW1haW5kZXIgb2YgdGhlIGNvbW1hbmQgc3RyZWFtLgorCitUaGUgY29tbWFuZCBzdHJlYW0gaXMgdGVybWluYXRlZCBieSBhIGJsYW5rIGxpbmUuICBJbiBzb21lIGNhc2VzCisoaW5kaWNhdGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSByZWxldmFudCBjb21tYW5kcyksIHRoaXMgYmxhbmsKK2xpbmUgaXMgZm9sbG93ZWQgYnkgYSBwYXlsb2FkIGluIHNvbWUgb3RoZXIgcHJvdG9jb2wgKGUuZy4sIHRoZSBwYWNrCitwcm90b2NvbCksIHdoaWxlIGluIG90aGVycyBpdCBpbmRpY2F0ZXMgdGhlIGVuZCBvZiBpbnB1dC4KKworQ2FwYWJpbGl0aWVzCit+fn5+fn5+fn5+fn4KKworRWFjaCByZW1vdGUgaGVscGVyIGlzIGV4cGVjdGVkIHRvIHN1cHBvcnQgb25seSBhIHN1YnNldCBvZiBjb21tYW5kcy4KK1RoZSBvcGVyYXRpb25zIGEgaGVscGVyIHN1cHBvcnRzIGFyZSBkZWNsYXJlZCB0byBnaXQgaW4gdGhlIHJlc3BvbnNlCit0byB0aGUgYGNhcGFiaWxpdGllc2AgY29tbWFuZCAoc2VlIENPTU1BTkRTLCBiZWxvdykuCisKKydvcHRpb24nOjoKKwlGb3Igc3BlY2lmeWluZyBzZXR0aW5ncyBsaWtlIGB2ZXJib3NpdHlgIChob3cgbXVjaCBvdXRwdXQgdG8KKwl3cml0ZSB0byBzdGRlcnIpIGFuZCBgZGVwdGhgIChob3cgbXVjaCBoaXN0b3J5IGlzIHdhbnRlZCBpbiB0aGUKKwljYXNlIG9mIGEgc2hhbGxvdyBjbG9uZSkgdGhhdCBhZmZlY3QgaG93IG90aGVyIGNvbW1hbmRzIGFyZQorCWNhcnJpZWQgb3V0LgorCisnY29ubmVjdCc6OgorCUZvciBmZXRjaGluZyBhbmQgcHVzaGluZyB1c2luZyBnaXQncyBuYXRpdmUgcGFja2ZpbGUgcHJvdG9jb2wKKwl0aGF0IHJlcXVpcmVzIGEgYmlkaXJlY3Rpb25hbCwgZnVsbC1kdXBsZXggY29ubmVjdGlvbi4KKworJ3B1c2gnOjoKKwlGb3IgbGlzdGluZyByZW1vdGUgcmVmcyBhbmQgcHVzaGluZyBzcGVjaWZpZWQgb2JqZWN0cyBmcm9tIHRoZQorCWxvY2FsIG9iamVjdCBzdG9yZSB0byByZW1vdGUgcmVmcy4KKworJ2ZldGNoJzo6CisJRm9yIGxpc3RpbmcgcmVtb3RlIHJlZnMgYW5kIGZldGNoaW5nIHRoZSBhc3NvY2lhdGVkIGhpc3RvcnkgdG8KKwl0aGUgbG9jYWwgb2JqZWN0IHN0b3JlLgorCisnaW1wb3J0Jzo6CisJRm9yIGxpc3RpbmcgcmVtb3RlIHJlZnMgYW5kIGZldGNoaW5nIHRoZSBhc3NvY2lhdGVkIGhpc3RvcnkgYXMKKwlhIGZhc3QtaW1wb3J0IHN0cmVhbS4KKworJ3JlZnNwZWMnIDxyZWZzcGVjPjo6CisJVGhpcyBtb2RpZmllcyB0aGUgJ2ltcG9ydCcgY2FwYWJpbGl0eSwgYWxsb3dpbmcgdGhlIHByb2R1Y2VkCisJZmFzdC1pbXBvcnQgc3RyZWFtIHRvIG1vZGlmeSByZWZzIGluIGEgcHJpdmF0ZSBuYW1lc3BhY2UKKwlpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gcmVmcy9oZWFkcyBvciByZWZzL3JlbW90ZXMgZGlyZWN0bHkuCisJSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgaW1wb3J0ZXJzIHByb3ZpZGluZyB0aGUgJ2ltcG9ydCcKKwljYXBhYmlsaXR5IHVzZSB0aGlzLgorKworQSBoZWxwZXIgYWR2ZXJ0aXNpbmcgdGhlIGNhcGFiaWxpdHkKK2ByZWZzcGVjIHJlZnMvaGVhZHMvKjpyZWZzL3N2bi9vcmlnaW4vYnJhbmNoZXMvKmAKK2lzIHNheWluZyB0aGF0LCB3aGVuIGl0IGlzIGFza2VkIHRvIGBpbXBvcnQgcmVmcy9oZWFkcy90b3BpY2AsIHRoZQorc3RyZWFtIGl0IG91dHB1dHMgd2lsbCB1cGRhdGUgdGhlIGByZWZzL3N2bi9vcmlnaW4vYnJhbmNoZXMvdG9waWNgCityZWYuCisrCitUaGlzIGNhcGFiaWxpdHkgY2FuIGJlIGFkdmVydGlzZWQgbXVsdGlwbGUgdGltZXMuICBUaGUgZmlyc3QKK2FwcGxpY2FibGUgcmVmc3BlYyB0YWtlcyBwcmVjZWRlbmNlLiAgVGhlIGxlZnQtaGFuZCBvZiByZWZzcGVjcworYWR2ZXJ0aXNlZCB3aXRoIHRoaXMgY2FwYWJpbGl0eSBtdXN0IGNvdmVyIGFsbCByZWZzIHJlcG9ydGVkIGJ5Cit0aGUgbGlzdCBjb21tYW5kLiAgSWYgbm8gJ3JlZnNwZWMnIGNhcGFiaWxpdHkgaXMgYWR2ZXJ0aXNlZCwKK3RoZXJlIGlzIGFuIGltcGxpZWQgYHJlZnNwZWMgKjoqYC4KKworQ2FwYWJpbGl0aWVzIGZvciBQdXNoaW5nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKydjb25uZWN0Jzo6CisJQ2FuIGF0dGVtcHQgdG8gY29ubmVjdCB0byAnZ2l0IHJlY2VpdmUtcGFjaycgKGZvciBwdXNoaW5nKSwKKwknZ2l0IHVwbG9hZC1wYWNrJywgZXRjIGZvciBjb21tdW5pY2F0aW9uIHVzaW5nIHRoZQorCXBhY2tmaWxlIHByb3RvY29sLgorKworU3VwcG9ydGVkIGNvbW1hbmRzOiAnY29ubmVjdCcuCisKKydwdXNoJzo6CisJQ2FuIGRpc2NvdmVyIHJlbW90ZSByZWZzIGFuZCBwdXNoIGxvY2FsIGNvbW1pdHMgYW5kIHRoZQorCWhpc3RvcnkgbGVhZGluZyB1cCB0byB0aGVtIHRvIG5ldyBvciBleGlzdGluZyByZW1vdGUgcmVmcy4KKysKK1N1cHBvcnRlZCBjb21tYW5kczogJ2xpc3QgZm9yLXB1c2gnLCAncHVzaCcuCisKK0lmIGEgaGVscGVyIGFkdmVydGlzZXMgYm90aCAnY29ubmVjdCcgYW5kICdwdXNoJywgZ2l0IHdpbGwgdXNlCisnY29ubmVjdCcgaWYgcG9zc2libGUgYW5kIGZhbGwgYmFjayB0byAncHVzaCcgaWYgdGhlIGhlbHBlciByZXF1ZXN0cworc28gd2hlbiBjb25uZWN0aW5nIChzZWUgdGhlICdjb25uZWN0JyBjb21tYW5kIHVuZGVyIENPTU1BTkRTKS4KKworQ2FwYWJpbGl0aWVzIGZvciBGZXRjaGluZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorJ2Nvbm5lY3QnOjoKKwlDYW4gdHJ5IHRvIGNvbm5lY3QgdG8gJ2dpdCB1cGxvYWQtcGFjaycgKGZvciBmZXRjaGluZyksCisJJ2dpdCByZWNlaXZlLXBhY2snLCBldGMgZm9yIGNvbW11bmljYXRpb24gdXNpbmcgdGhlCisJcGFja2ZpbGUgcHJvdG9jb2wuCisrCitTdXBwb3J0ZWQgY29tbWFuZHM6ICdjb25uZWN0Jy4KKworJ2ZldGNoJzo6CisJQ2FuIGRpc2NvdmVyIHJlbW90ZSByZWZzIGFuZCB0cmFuc2ZlciBvYmplY3RzIHJlYWNoYWJsZSBmcm9tCisJdGhlbSB0byB0aGUgbG9jYWwgb2JqZWN0IHN0b3JlLgorKworU3VwcG9ydGVkIGNvbW1hbmRzOiAnbGlzdCcsICdmZXRjaCcuCisKKydpbXBvcnQnOjoKKwlDYW4gZGlzY292ZXIgcmVtb3RlIHJlZnMgYW5kIG91dHB1dCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tCisJdGhlbSBhcyBhIHN0cmVhbSBpbiBmYXN0LWltcG9ydCBmb3JtYXQuCisrCitTdXBwb3J0ZWQgY29tbWFuZHM6ICdsaXN0JywgJ2ltcG9ydCcuCisKK0lmIGEgaGVscGVyIGFkdmVydGlzZXMgJ2Nvbm5lY3QnLCBnaXQgd2lsbCB1c2UgaXQgaWYgcG9zc2libGUgYW5kCitmYWxsIGJhY2sgdG8gYW5vdGhlciBjYXBhYmlsaXR5IGlmIHRoZSBoZWxwZXIgcmVxdWVzdHMgc28gd2hlbgorY29ubmVjdGluZyAoc2VlIHRoZSAnY29ubmVjdCcgY29tbWFuZCB1bmRlciBDT01NQU5EUykuCitXaGVuIGNob29zaW5nIGJldHdlZW4gJ2ZldGNoJyBhbmQgJ2ltcG9ydCcsIGdpdCBwcmVmZXJzICdmZXRjaCcuCitPdGhlciBmcm9udGVuZHMgbWF5IGhhdmUgc29tZSBvdGhlciBvcmRlciBvZiBwcmVmZXJlbmNlLgorCisncmVmc3BlYycgPHJlZnNwZWM+OjoKKwlUaGlzIG1vZGlmaWVzIHRoZSAnaW1wb3J0JyBjYXBhYmlsaXR5LgorKworQSBoZWxwZXIgYWR2ZXJ0aXNpbmcKK2ByZWZzcGVjIHJlZnMvaGVhZHMvKjpyZWZzL3N2bi9vcmlnaW4vYnJhbmNoZXMvKmAKK2luIGl0cyBjYXBhYmlsaXRpZXMgaXMgc2F5aW5nIHRoYXQsIHdoZW4gaXQgaGFuZGxlcworYGltcG9ydCByZWZzL2hlYWRzL3RvcGljYCwgdGhlIHN0cmVhbSBpdCBvdXRwdXRzIHdpbGwgdXBkYXRlIHRoZQorYHJlZnMvc3ZuL29yaWdpbi9icmFuY2hlcy90b3BpY2AgcmVmLgorKworVGhpcyBjYXBhYmlsaXR5IGNhbiBiZSBhZHZlcnRpc2VkIG11bHRpcGxlIHRpbWVzLiAgVGhlIGZpcnN0CithcHBsaWNhYmxlIHJlZnNwZWMgdGFrZXMgcHJlY2VkZW5jZS4gIFRoZSBsZWZ0LWhhbmQgb2YgcmVmc3BlY3MKK2FkdmVydGlzZWQgd2l0aCB0aGlzIGNhcGFiaWxpdHkgbXVzdCBjb3ZlciBhbGwgcmVmcyByZXBvcnRlZCBieQordGhlIGxpc3QgY29tbWFuZC4gIElmIG5vICdyZWZzcGVjJyBjYXBhYmlsaXR5IGlzIGFkdmVydGlzZWQsCit0aGVyZSBpcyBhbiBpbXBsaWVkIGByZWZzcGVjICo6KmAuCisKK0lOVk9DQVRJT04KKy0tLS0tLS0tLS0KKworUmVtb3RlIGhlbHBlciBwcm9ncmFtcyBhcmUgaW52b2tlZCB3aXRoIG9uZSBvciAob3B0aW9uYWxseSkgdHdvCithcmd1bWVudHMuIFRoZSBmaXJzdCBhcmd1bWVudCBzcGVjaWZpZXMgYSByZW1vdGUgcmVwb3NpdG9yeSBhcyBpbiBnaXQ7CitpdCBpcyBlaXRoZXIgdGhlIG5hbWUgb2YgYSBjb25maWd1cmVkIHJlbW90ZSBvciBhIFVSTC4gVGhlIHNlY29uZAorYXJndW1lbnQgc3BlY2lmaWVzIGEgVVJMOyBpdCBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtCisnPHRyYW5zcG9ydD46Ly88YWRkcmVzcz4nLCBidXQgYW55IGFyYml0cmFyeSBzdHJpbmcgaXMgcG9zc2libGUuCitUaGUgJ0dJVF9ESVInIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB1cCBmb3IgdGhlIHJlbW90ZSBoZWxwZXIKK2FuZCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gc3RvcmUgYWRkaXRpb25hbCBkYXRhIG9yIGZyb20KK3doaWNoIGRpcmVjdG9yeSB0byBpbnZva2UgYXV4aWxpYXJ5IGdpdCBjb21tYW5kcy4KKworV2hlbiBnaXQgZW5jb3VudGVycyBhIFVSTCBvZiB0aGUgZm9ybSAnPHRyYW5zcG9ydD46Ly88YWRkcmVzcz4nLCB3aGVyZQorJzx0cmFuc3BvcnQ+JyBpcyBhIHByb3RvY29sIHRoYXQgaXQgY2Fubm90IGhhbmRsZSBuYXRpdmVseSwgaXQKK2F1dG9tYXRpY2FsbHkgaW52b2tlcyAnZ2l0IHJlbW90ZS08dHJhbnNwb3J0Picgd2l0aCB0aGUgZnVsbCBVUkwgYXMKK3RoZSBzZWNvbmQgYXJndW1lbnQuIElmIHN1Y2ggYSBVUkwgaXMgZW5jb3VudGVyZWQgZGlyZWN0bHkgb24gdGhlCitjb21tYW5kIGxpbmUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgc2Vjb25kLCBhbmQgaWYgaXQKK2lzIGVuY291bnRlcmVkIGluIGEgY29uZmlndXJlZCByZW1vdGUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZQorb2YgdGhhdCByZW1vdGUuCisKK0EgVVJMIG9mIHRoZSBmb3JtICc8dHJhbnNwb3J0Pjo6PGFkZHJlc3M+JyBleHBsaWNpdGx5IGluc3RydWN0cyBnaXQgdG8KK2ludm9rZSAnZ2l0IHJlbW90ZS08dHJhbnNwb3J0Picgd2l0aCAnPGFkZHJlc3M+JyBhcyB0aGUgc2Vjb25kCithcmd1bWVudC4gSWYgc3VjaCBhIFVSTCBpcyBlbmNvdW50ZXJlZCBkaXJlY3RseSBvbiB0aGUgY29tbWFuZCBsaW5lLAordGhlIGZpcnN0IGFyZ3VtZW50IGlzICc8YWRkcmVzcz4nLCBhbmQgaWYgaXQgaXMgZW5jb3VudGVyZWQgaW4gYQorY29uZmlndXJlZCByZW1vdGUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGF0IHJlbW90ZS4KKworQWRkaXRpb25hbGx5LCB3aGVuIGEgY29uZmlndXJlZCByZW1vdGUgaGFzICdyZW1vdGUuPG5hbWU+LnZjcycgc2V0IHRvCisnPHRyYW5zcG9ydD4nLCBnaXQgZXhwbGljaXRseSBpbnZva2VzICdnaXQgcmVtb3RlLTx0cmFuc3BvcnQ+JyB3aXRoCisnPG5hbWU+JyBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIElmIHNldCwgdGhlIHNlY29uZCBhcmd1bWVudCBpcworJ3JlbW90ZS48bmFtZT4udXJsJzsgb3RoZXJ3aXNlLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG9taXR0ZWQuCisKK0NPTU1BTkRTCistLS0tLS0tLQorCitDb21tYW5kcyBhcmUgZ2l2ZW4gYnkgdGhlIGNhbGxlciBvbiB0aGUgaGVscGVyJ3Mgc3RhbmRhcmQgaW5wdXQsIG9uZSBwZXIgbGluZS4KKworJ2NhcGFiaWxpdGllcyc6OgorCUxpc3RzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGhlbHBlciwgb25lIHBlciBsaW5lLCBlbmRpbmcKKwl3aXRoIGEgYmxhbmsgbGluZS4gRWFjaCBjYXBhYmlsaXR5IG1heSBiZSBwcmVjZWRlZCB3aXRoICcqJywKKwl3aGljaCBtYXJrcyB0aGVtIG1hbmRhdG9yeSBmb3IgZ2l0IHZlcnNpb24gdXNpbmcgdGhlIHJlbW90ZQorCWhlbHBlciB0byB1bmRlcnN0YW5kICh1bmtub3duIG1hbmRhdG9yeSBjYXBhYmlsaXR5IGlzIGZhdGFsCisJZXJyb3IpLgorCisnbGlzdCc6OgorCUxpc3RzIHRoZSByZWZzLCBvbmUgcGVyIGxpbmUsIGluIHRoZSBmb3JtYXQgIjx2YWx1ZT4gPG5hbWU+CisJWzxhdHRyPiAuLi5dIi4gVGhlIHZhbHVlIG1heSBiZSBhIGhleCBzaGExIGhhc2gsICJAPGRlc3Q+IiBmb3IKKwlhIHN5bXJlZiwgb3IgIj8iIHRvIGluZGljYXRlIHRoYXQgdGhlIGhlbHBlciBjb3VsZCBub3QgZ2V0IHRoZQorCXZhbHVlIG9mIHRoZSByZWYuIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlcyBmb2xsb3dzCisJdGhlIG5hbWU7IHVucmVjb2duaXplZCBhdHRyaWJ1dGVzIGFyZSBpZ25vcmVkLiBUaGUgbGlzdCBlbmRzCisJd2l0aCBhIGJsYW5rIGxpbmUuCisrCitJZiAncHVzaCcgaXMgc3VwcG9ydGVkIHRoaXMgbWF5IGJlIGNhbGxlZCBhcyAnbGlzdCBmb3ItcHVzaCcKK3RvIG9idGFpbiB0aGUgY3VycmVudCByZWZzIHByaW9yIHRvIHNlbmRpbmcgb25lIG9yIG1vcmUgJ3B1c2gnCitjb21tYW5kcyB0byB0aGUgaGVscGVyLgorCisnb3B0aW9uJyA8bmFtZT4gPHZhbHVlPjo6CisJU2V0cyB0aGUgdHJhbnNwb3J0IGhlbHBlciBvcHRpb24gPG5hbWU+IHRvIDx2YWx1ZT4uICBPdXRwdXRzIGEKKwlzaW5nbGUgbGluZSBjb250YWluaW5nIG9uZSBvZiAnb2snIChvcHRpb24gc3VjY2Vzc2Z1bGx5IHNldCksCisJJ3Vuc3VwcG9ydGVkJyAob3B0aW9uIG5vdCByZWNvZ25pemVkKSBvciAnZXJyb3IgPG1zZz4nCisJKG9wdGlvbiA8bmFtZT4gaXMgc3VwcG9ydGVkIGJ1dCA8dmFsdWU+IGlzIG5vdCB2YWxpZAorCWZvciBpdCkuICBPcHRpb25zIHNob3VsZCBiZSBzZXQgYmVmb3JlIG90aGVyIGNvbW1hbmRzLAorCWFuZCBtYXkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aG9zZSBjb21tYW5kcy4KKysKK1N1cHBvcnRlZCBpZiB0aGUgaGVscGVyIGhhcyB0aGUgIm9wdGlvbiIgY2FwYWJpbGl0eS4KKworJ2ZldGNoJyA8c2hhMT4gPG5hbWU+OjoKKwlGZXRjaGVzIHRoZSBnaXZlbiBvYmplY3QsIHdyaXRpbmcgdGhlIG5lY2Vzc2FyeSBvYmplY3RzCisJdG8gdGhlIGRhdGFiYXNlLiAgRmV0Y2ggY29tbWFuZHMgYXJlIHNlbnQgaW4gYSBiYXRjaCwgb25lCisJcGVyIGxpbmUsIHRlcm1pbmF0ZWQgd2l0aCBhIGJsYW5rIGxpbmUuCisJT3V0cHV0cyBhIHNpbmdsZSBibGFuayBsaW5lIHdoZW4gYWxsIGZldGNoIGNvbW1hbmRzIGluIHRoZQorCXNhbWUgYmF0Y2ggYXJlIGNvbXBsZXRlLiBPbmx5IG9iamVjdHMgd2hpY2ggd2VyZSByZXBvcnRlZAorCWluIHRoZSByZWYgbGlzdCB3aXRoIGEgc2hhMSBtYXkgYmUgZmV0Y2hlZCB0aGlzIHdheS4KKysKK09wdGlvbmFsbHkgbWF5IG91dHB1dCBhICdsb2NrIDxmaWxlPicgbGluZSBpbmRpY2F0aW5nIGEgZmlsZSB1bmRlcgorR0lUX0RJUi9vYmplY3RzL3BhY2sgd2hpY2ggaXMga2VlcGluZyBhIHBhY2sgdW50aWwgcmVmcyBjYW4gYmUKK3N1aXRhYmx5IHVwZGF0ZWQuCisrCitTdXBwb3J0ZWQgaWYgdGhlIGhlbHBlciBoYXMgdGhlICJmZXRjaCIgY2FwYWJpbGl0eS4KKworJ3B1c2gnICs8c3JjPjo8ZHN0Pjo6CisJUHVzaGVzIHRoZSBnaXZlbiBsb2NhbCA8c3JjPiBjb21taXQgb3IgYnJhbmNoIHRvIHRoZQorCXJlbW90ZSBicmFuY2ggZGVzY3JpYmVkIGJ5IDxkc3Q+LiAgQSBiYXRjaCBzZXF1ZW5jZSBvZgorCW9uZSBvciBtb3JlICdwdXNoJyBjb21tYW5kcyBpcyB0ZXJtaW5hdGVkIHdpdGggYSBibGFuayBsaW5lCisJKGlmIHRoZXJlIGlzIG9ubHkgb25lIHJlZmVyZW5jZSB0byBwdXNoLCBhIHNpbmdsZSAncHVzaCcgY29tbWFuZAorCWlzIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSkuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHdvdWxkCisJYmUgdHdvIGJhdGNoZXMgb2YgJ3B1c2gnLCB0aGUgZmlyc3QgYXNraW5nIHRoZSByZW1vdGUtaGVscGVyCisJdG8gcHVzaCB0aGUgbG9jYWwgcmVmICdtYXN0ZXInIHRvIHRoZSByZW1vdGUgcmVmICdtYXN0ZXInIGFuZAorCXRoZSBsb2NhbCAnSEVBRCcgdG8gdGhlIHJlbW90ZSAnYnJhbmNoJywgYW5kIHRoZSBzZWNvbmQKKwlhc2tpbmcgdG8gcHVzaCByZWYgJ2ZvbycgdG8gcmVmICdiYXInIChmb3JjZWQgdXBkYXRlIHJlcXVlc3RlZAorCWJ5IHRoZSAnKycpLgorKworLS0tLS0tLS0tLS0tCitwdXNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyCitwdXNoIEhFQUQ6cmVmcy9oZWFkcy9icmFuY2gKK1xuCitwdXNoICtyZWZzL2hlYWRzL2ZvbzpyZWZzL2hlYWRzL2JhcgorXG4KKy0tLS0tLS0tLS0tLQorKworWmVybyBvciBtb3JlIHByb3RvY29sIG9wdGlvbnMgbWF5IGJlIGVudGVyZWQgYWZ0ZXIgdGhlIGxhc3QgJ3B1c2gnCitjb21tYW5kLCBiZWZvcmUgdGhlIGJhdGNoJ3MgdGVybWluYXRpbmcgYmxhbmsgbGluZS4KKysKK1doZW4gdGhlIHB1c2ggaXMgY29tcGxldGUsIG91dHB1dHMgb25lIG9yIG1vcmUgJ29rIDxkc3Q+JyBvcgorJ2Vycm9yIDxkc3Q+IDx3aHk+PycgbGluZXMgdG8gaW5kaWNhdGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mCitlYWNoIHB1c2hlZCByZWYuICBUaGUgc3RhdHVzIHJlcG9ydCBvdXRwdXQgaXMgdGVybWluYXRlZCBieQorYSBibGFuayBsaW5lLiAgVGhlIG9wdGlvbiBmaWVsZCA8d2h5PiBtYXkgYmUgcXVvdGVkIGluIGEgQworc3R5bGUgc3RyaW5nIGlmIGl0IGNvbnRhaW5zIGFuIExGLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAicHVzaCIgY2FwYWJpbGl0eS4KKworJ2ltcG9ydCcgPG5hbWU+OjoKKwlQcm9kdWNlcyBhIGZhc3QtaW1wb3J0IHN0cmVhbSB3aGljaCBpbXBvcnRzIHRoZSBjdXJyZW50IHZhbHVlCisJb2YgdGhlIG5hbWVkIHJlZi4gSXQgbWF5IGFkZGl0aW9uYWxseSBpbXBvcnQgb3RoZXIgcmVmcyBhcworCW5lZWRlZCB0byBjb25zdHJ1Y3QgdGhlIGhpc3RvcnkgZWZmaWNpZW50bHkuIFRoZSBzY3JpcHQgd3JpdGVzCisJdG8gYSBoZWxwZXItc3BlY2lmaWMgcHJpdmF0ZSBuYW1lc3BhY2UuIFRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQKKwlyZWYgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gYSBsb2NhdGlvbiBpbiB0aGlzIG5hbWVzcGFjZSBkZXJpdmVkCisJYnkgYXBwbHlpbmcgdGhlIHJlZnNwZWNzIGZyb20gdGhlICJyZWZzcGVjIiBjYXBhYmlsaXR5IHRvIHRoZQorCW5hbWUgb2YgdGhlIHJlZi4KKysKK0VzcGVjaWFsbHkgdXNlZnVsIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggYSBmb3JlaWduIHZlcnNpb25pbmcKK3N5c3RlbS4KKysKK0p1c3QgbGlrZSAncHVzaCcsIGEgYmF0Y2ggc2VxdWVuY2Ugb2Ygb25lIG9yIG1vcmUgJ2ltcG9ydCcgaXMKK3Rlcm1pbmF0ZWQgd2l0aCBhIGJsYW5rIGxpbmUuIEZvciBlYWNoIGJhdGNoIG9mICdpbXBvcnQnLCB0aGUgcmVtb3RlCitoZWxwZXIgc2hvdWxkIHByb2R1Y2UgYSBmYXN0LWltcG9ydCBzdHJlYW0gdGVybWluYXRlZCBieSBhICdkb25lJworY29tbWFuZC4KKysKK1N1cHBvcnRlZCBpZiB0aGUgaGVscGVyIGhhcyB0aGUgImltcG9ydCIgY2FwYWJpbGl0eS4KKworJ2Nvbm5lY3QnIDxzZXJ2aWNlPjo6CisJQ29ubmVjdHMgdG8gZ2l2ZW4gc2VydmljZS4gU3RhbmRhcmQgaW5wdXQgYW5kIHN0YW5kYXJkIG91dHB1dAorCW9mIGhlbHBlciBhcmUgY29ubmVjdGVkIHRvIHNwZWNpZmllZCBzZXJ2aWNlIChnaXQgcHJlZml4IGlzCisJaW5jbHVkZWQgaW4gc2VydmljZSBuYW1lIHNvIGUuZy4gZmV0Y2hpbmcgdXNlcyAnZ2l0LXVwbG9hZC1wYWNrJworCWFzIHNlcnZpY2UpIG9uIHJlbW90ZSBzaWRlLiBWYWxpZCByZXBsaWVzIHRvIHRoaXMgY29tbWFuZCBhcmUKKwllbXB0eSBsaW5lIChjb25uZWN0aW9uIGVzdGFibGlzaGVkKSwgJ2ZhbGxiYWNrJyAobm8gc21hcnQKKwl0cmFuc3BvcnQgc3VwcG9ydCwgZmFsbCBiYWNrIHRvIGR1bWIgdHJhbnNwb3J0cykgYW5kIGp1c3QKKwlleGl0aW5nIHdpdGggZXJyb3IgbWVzc2FnZSBwcmludGVkIChjYW4ndCBjb25uZWN0LCBkb24ndAorCWJvdGhlciB0cnlpbmcgdG8gZmFsbCBiYWNrKS4gQWZ0ZXIgbGluZSBmZWVkIHRlcm1pbmF0aW5nIHRoZQorCXBvc2l0aXZlIChlbXB0eSkgcmVzcG9uc2UsIHRoZSBvdXRwdXQgb2Ygc2VydmljZSBzdGFydHMuIEFmdGVyCisJdGhlIGNvbm5lY3Rpb24gZW5kcywgdGhlIHJlbW90ZSBoZWxwZXIgZXhpdHMuCisrCitTdXBwb3J0ZWQgaWYgdGhlIGhlbHBlciBoYXMgdGhlICJjb25uZWN0IiBjYXBhYmlsaXR5LgorCitJZiBhIGZhdGFsIGVycm9yIG9jY3VycywgdGhlIHByb2dyYW0gd3JpdGVzIHRoZSBlcnJvciBtZXNzYWdlIHRvCitzdGRlcnIgYW5kIGV4aXRzLiBUaGUgY2FsbGVyIHNob3VsZCBleHBlY3QgdGhhdCBhIHN1aXRhYmxlIGVycm9yCittZXNzYWdlIGhhcyBiZWVuIHByaW50ZWQgaWYgdGhlIGNoaWxkIGNsb3NlcyB0aGUgY29ubmVjdGlvbiB3aXRob3V0Citjb21wbGV0aW5nIGEgdmFsaWQgcmVzcG9uc2UgZm9yIHRoZSBjdXJyZW50IGNvbW1hbmQuCisKK0FkZGl0aW9uYWwgY29tbWFuZHMgbWF5IGJlIHN1cHBvcnRlZCwgYXMgbWF5IGJlIGRldGVybWluZWQgZnJvbQorY2FwYWJpbGl0aWVzIHJlcG9ydGVkIGJ5IHRoZSBoZWxwZXIuCisKK1JFRiBMSVNUIEFUVFJJQlVURVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworJ2Zvci1wdXNoJzo6CisJVGhlIGNhbGxlciB3YW50cyB0byB1c2UgdGhlIHJlZiBsaXN0IHRvIHByZXBhcmUgcHVzaAorCWNvbW1hbmRzLiAgQSBoZWxwZXIgbWlnaHQgY2hvc2UgdG8gYWNxdWlyZSB0aGUgcmVmIGxpc3QgYnkKKwlvcGVuaW5nIGEgZGlmZmVyZW50IHR5cGUgb2YgY29ubmVjdGlvbiB0byB0aGUgZGVzdGluYXRpb24uCisKKyd1bmNoYW5nZWQnOjoKKwlUaGlzIHJlZiBpcyB1bmNoYW5nZWQgc2luY2UgdGhlIGxhc3QgaW1wb3J0IG9yIGZldGNoLCBhbHRob3VnaAorCXRoZSBoZWxwZXIgY2Fubm90IG5lY2Vzc2FyaWx5IGRldGVybWluZSB3aGF0IHZhbHVlIHRoYXQgcHJvZHVjZWQuCisKK09QVElPTlMKKy0tLS0tLS0KKydvcHRpb24gdmVyYm9zaXR5JyA8bj46OgorCUNoYW5nZXMgdGhlIHZlcmJvc2l0eSBvZiBtZXNzYWdlcyBkaXNwbGF5ZWQgYnkgdGhlIGhlbHBlci4KKwlBIHZhbHVlIG9mIDAgZm9yIDxuPiBtZWFucyB0aGF0IHByb2Nlc3NlcyBvcGVyYXRlCisJcXVpZXRseSwgYW5kIHRoZSBoZWxwZXIgcHJvZHVjZXMgb25seSBlcnJvciBvdXRwdXQuCisJMSBpcyB0aGUgZGVmYXVsdCBsZXZlbCBvZiB2ZXJib3NpdHksIGFuZCBoaWdoZXIgdmFsdWVzCisJb2YgPG4+IGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiAtdiBmbGFncyBwYXNzZWQgb24gdGhlCisJY29tbWFuZCBsaW5lLgorCisnb3B0aW9uIHByb2dyZXNzJyBceyd0cnVlJ3wnZmFsc2UnXH06OgorCUVuYWJsZXMgKG9yIGRpc2FibGVzKSBwcm9ncmVzcyBtZXNzYWdlcyBkaXNwbGF5ZWQgYnkgdGhlCisJdHJhbnNwb3J0IGhlbHBlciBkdXJpbmcgYSBjb21tYW5kLgorCisnb3B0aW9uIGRlcHRoJyA8ZGVwdGg+OjoKKwlEZWVwZW5zIHRoZSBoaXN0b3J5IG9mIGEgc2hhbGxvdyByZXBvc2l0b3J5LgorCisnb3B0aW9uIGZvbGxvd3RhZ3MnIFx7J3RydWUnfCdmYWxzZSdcfTo6CisJSWYgZW5hYmxlZCB0aGUgaGVscGVyIHNob3VsZCBhdXRvbWF0aWNhbGx5IGZldGNoIGFubm90YXRlZAorCXRhZyBvYmplY3RzIGlmIHRoZSBvYmplY3QgdGhlIHRhZyBwb2ludHMgYXQgd2FzIHRyYW5zZmVycmVkCisJZHVyaW5nIHRoZSBmZXRjaCBjb21tYW5kLiAgSWYgdGhlIHRhZyBpcyBub3QgZmV0Y2hlZCBieQorCXRoZSBoZWxwZXIgYSBzZWNvbmQgZmV0Y2ggY29tbWFuZCB3aWxsIHVzdWFsbHkgYmUgc2VudCB0bworCWFzayBmb3IgdGhlIHRhZyBzcGVjaWZpY2FsbHkuICBTb21lIGhlbHBlcnMgbWF5IGJlIGFibGUgdG8KKwl1c2UgdGhpcyBvcHRpb24gdG8gYXZvaWQgYSBzZWNvbmQgbmV0d29yayBjb25uZWN0aW9uLgorCisnb3B0aW9uIGRyeS1ydW4nIFx7J3RydWUnfCdmYWxzZSdcfToKKwlJZiB0cnVlLCBwcmV0ZW5kIHRoZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwKKwlidXQgZG9uJ3QgYWN0dWFsbHkgY2hhbmdlIGFueSByZXBvc2l0b3J5IGRhdGEuCUZvciBtb3N0CisJaGVscGVycyB0aGlzIG9ubHkgYXBwbGllcyB0byB0aGUgJ3B1c2gnLCBpZiBzdXBwb3J0ZWQuCisKKydvcHRpb24gc2VydnBhdGggPGMtc3R5bGUtcXVvdGVkLXBhdGg+Jzo6CisJU2V0cyBzZXJ2aWNlIHBhdGggKC0tdXBsb2FkLXBhY2ssIC0tcmVjZWl2ZS1wYWNrIGV0Yy4pIGZvcgorCW5leHQgY29ubmVjdC4gUmVtb3RlIGhlbHBlciBtYXkgc3VwcG9ydCB0aGlzIG9wdGlvbiwgYnV0CisJbXVzdCBub3QgcmVseSBvbiB0aGlzIG9wdGlvbiBiZWluZyBzZXQgYmVmb3JlCisJY29ubmVjdCByZXF1ZXN0IG9jY3Vycy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZW1vdGVbMV0KKworbGlua2dpdDpnaXQtcmVtb3RlLXRlc3RnaXRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtdGVzdGdpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtdGVzdGdpdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2N2Q0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS10ZXN0Z2l0LnR4dApAQCAtMCwwICsxLDMwIEBACitnaXQtcmVtb3RlLXRlc3RnaXQoMSkKKz09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVtb3RlLXRlc3RnaXQgLSBFeGFtcGxlIHJlbW90ZS1oZWxwZXIKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK2dpdCBjbG9uZSB0ZXN0Z2l0Ojo8c291cmNlLXJlcG8+IFs8ZGVzdGluYXRpb24+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBjb21tYW5kIGlzIGEgc2ltcGxlIHJlbW90ZS1oZWxwZXIsIHRoYXQgaXMgdXNlZCBib3RoIGFzIGEKK3Rlc3RjYXNlIGZvciB0aGUgcmVtb3RlLWhlbHBlciBmdW5jdGlvbmFsaXR5LCBhbmQgYXMgYW4gZXhhbXBsZSB0bworc2hvdyByZW1vdGUtaGVscGVyIGF1dGhvcnMgb25lIHBvc3NpYmxlIGltcGxlbWVudGF0aW9uLgorCitUaGUgYmVzdCB3YXkgdG8gbGVhcm4gbW9yZSBpcyB0byByZWFkIHRoZSBjb21tZW50cyBhbmQgc291cmNlIGNvZGUgaW4KKydnaXQtcmVtb3RlLXRlc3RnaXQucHknLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXJlbW90ZS1oZWxwZXJzWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjMzk2YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQKQEAgLTAsMCArMSwyMjQgQEAKK2dpdC1yZW1vdGUoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVtb3RlIC0gbWFuYWdlIHNldCBvZiB0cmFja2VkIHJlcG9zaXRvcmllcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZW1vdGUnIFstdiB8IC0tdmVyYm9zZV0KKydnaXQgcmVtb3RlIGFkZCcgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFnc3wtLW5vLXRhZ3NdIFstLW1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPgorJ2dpdCByZW1vdGUgcmVuYW1lJyA8b2xkPiA8bmV3PgorJ2dpdCByZW1vdGUgcmVtb3ZlJyA8bmFtZT4KKydnaXQgcmVtb3RlIHNldC1oZWFkJyA8bmFtZT4gKC1hIHwgLWQgfCA8YnJhbmNoPikKKydnaXQgcmVtb3RlIHNldC1icmFuY2hlcycgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4KKydnaXQgcmVtb3RlIHNldC11cmwnIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dCisnZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkJyBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4KKydnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUnIFstLXB1c2hdIDxuYW1lPiA8dXJsPgorJ2dpdCByZW1vdGUnIFstdiB8IC0tdmVyYm9zZV0gJ3Nob3cnIFstbl0gPG5hbWU+CisnZ2l0IHJlbW90ZSBwcnVuZScgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4KKydnaXQgcmVtb3RlJyBbLXYgfCAtLXZlcmJvc2VdICd1cGRhdGUnIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK01hbmFnZSB0aGUgc2V0IG9mIHJlcG9zaXRvcmllcyAoInJlbW90ZXMiKSB3aG9zZSBicmFuY2hlcyB5b3UgdHJhY2suCisKKworT1BUSU9OUworLS0tLS0tLQorCistdjo6CistLXZlcmJvc2U6OgorCUJlIGEgbGl0dGxlIG1vcmUgdmVyYm9zZSBhbmQgc2hvdyByZW1vdGUgdXJsIGFmdGVyIG5hbWUuCisJTk9URTogVGhpcyBtdXN0IGJlIHBsYWNlZCBiZXR3ZWVuIGByZW1vdGVgIGFuZCBgc3ViY29tbWFuZGAuCisKKworQ09NTUFORFMKKy0tLS0tLS0tCisKK1dpdGggbm8gYXJndW1lbnRzLCBzaG93cyBhIGxpc3Qgb2YgZXhpc3RpbmcgcmVtb3Rlcy4gIFNldmVyYWwKK3N1YmNvbW1hbmRzIGFyZSBhdmFpbGFibGUgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIHRoZSByZW1vdGVzLgorCisnYWRkJzo6CisKK0FkZHMgYSByZW1vdGUgbmFtZWQgPG5hbWU+IGZvciB0aGUgcmVwb3NpdG9yeSBhdAorPHVybD4uICBUaGUgY29tbWFuZCBgZ2l0IGZldGNoIDxuYW1lPmAgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYW5kCit1cGRhdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIDxuYW1lPi88YnJhbmNoPi4KKysKK1dpdGggYC1mYCBvcHRpb24sIGBnaXQgZmV0Y2ggPG5hbWU+YCBpcyBydW4gaW1tZWRpYXRlbHkgYWZ0ZXIKK3RoZSByZW1vdGUgaW5mb3JtYXRpb24gaXMgc2V0IHVwLgorKworV2l0aCBgLS10YWdzYCBvcHRpb24sIGBnaXQgZmV0Y2ggPG5hbWU+YCBpbXBvcnRzIGV2ZXJ5IHRhZyBmcm9tIHRoZQorcmVtb3RlIHJlcG9zaXRvcnkuCisrCitXaXRoIGAtLW5vLXRhZ3NgIG9wdGlvbiwgYGdpdCBmZXRjaCA8bmFtZT5gIGRvZXMgbm90IGltcG9ydCB0YWdzIGZyb20KK3RoZSByZW1vdGUgcmVwb3NpdG9yeS4KKysKK1dpdGggYC10IDxicmFuY2g+YCBvcHRpb24sIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgZ2xvYgorcmVmc3BlYyBmb3IgdGhlIHJlbW90ZSB0byB0cmFjayBhbGwgYnJhbmNoZXMgdW5kZXIKK3RoZSBgcmVmcy9yZW1vdGVzLzxuYW1lPi9gIG5hbWVzcGFjZSwgYSByZWZzcGVjIHRvIHRyYWNrIG9ubHkgYDxicmFuY2g+YAoraXMgY3JlYXRlZC4gIFlvdSBjYW4gZ2l2ZSBtb3JlIHRoYW4gb25lIGAtdCA8YnJhbmNoPmAgdG8gdHJhY2sKK211bHRpcGxlIGJyYW5jaGVzIHdpdGhvdXQgZ3JhYmJpbmcgYWxsIGJyYW5jaGVzLgorKworV2l0aCBgLW0gPG1hc3Rlcj5gIG9wdGlvbiwgYSBzeW1ib2xpYy1yZWYgYHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRGAgaXMgc2V0Cit1cCB0byBwb2ludCBhdCByZW1vdGUncyBgPG1hc3Rlcj5gIGJyYW5jaC4gU2VlIGFsc28gdGhlIHNldC1oZWFkIGNvbW1hbmQuCisrCitXaGVuIGEgZmV0Y2ggbWlycm9yIGlzIGNyZWF0ZWQgd2l0aCBgLS1taXJyb3I9ZmV0Y2hgLCB0aGUgcmVmcyB3aWxsIG5vdAorYmUgc3RvcmVkIGluIHRoZSAncmVmcy9yZW1vdGVzLycgbmFtZXNwYWNlLCBidXQgcmF0aGVyIGV2ZXJ5dGhpbmcgaW4KKydyZWZzLycgb24gdGhlIHJlbW90ZSB3aWxsIGJlIGRpcmVjdGx5IG1pcnJvcmVkIGludG8gJ3JlZnMvJyBpbiB0aGUKK2xvY2FsIHJlcG9zaXRvcnkuIFRoaXMgb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaW4gYmFyZSByZXBvc2l0b3JpZXMsCitiZWNhdXNlIGEgZmV0Y2ggd291bGQgb3ZlcndyaXRlIGFueSBsb2NhbCBjb21taXRzLgorKworV2hlbiBhIHB1c2ggbWlycm9yIGlzIGNyZWF0ZWQgd2l0aCBgLS1taXJyb3I9cHVzaGAsIHRoZW4gYGdpdCBwdXNoYAord2lsbCBhbHdheXMgYmVoYXZlIGFzIGlmIGAtLW1pcnJvcmAgd2FzIHBhc3NlZC4KKworJ3JlbmFtZSc6OgorCitSZW5hbWUgdGhlIHJlbW90ZSBuYW1lZCA8b2xkPiB0byA8bmV3Pi4gQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBhbmQKK2NvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSByZW1vdGUgYXJlIHVwZGF0ZWQuCisrCitJbiBjYXNlIDxvbGQ+IGFuZCA8bmV3PiBhcmUgdGhlIHNhbWUsIGFuZCA8b2xkPiBpcyBhIGZpbGUgdW5kZXIKK2AkR0lUX0RJUi9yZW1vdGVzYCBvciBgJEdJVF9ESVIvYnJhbmNoZXNgLCB0aGUgcmVtb3RlIGlzIGNvbnZlcnRlZCB0bwordGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXQuCisKKydyZW1vdmUnOjoKKydybSc6OgorCitSZW1vdmUgdGhlIHJlbW90ZSBuYW1lZCA8bmFtZT4uIEFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYW5kCitjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgcmVtb3RlIGFyZSByZW1vdmVkLgorCisnc2V0LWhlYWQnOjoKKworU2V0cyBvciBkZWxldGVzIHRoZSBkZWZhdWx0IGJyYW5jaCAoaS5lLiB0aGUgdGFyZ2V0IG9mIHRoZQorc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQURgKSBmb3IKK3RoZSBuYW1lZCByZW1vdGUuIEhhdmluZyBhIGRlZmF1bHQgYnJhbmNoIGZvciBhIHJlbW90ZSBpcyBub3QgcmVxdWlyZWQsCitidXQgYWxsb3dzIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgdG8gYmUgc3BlY2lmaWVkIGluIGxpZXUgb2YgYSBzcGVjaWZpYworYnJhbmNoLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGRlZmF1bHQgYnJhbmNoIGZvciBgb3JpZ2luYCBpcyBzZXQgdG8KK2BtYXN0ZXJgLCB0aGVuIGBvcmlnaW5gIG1heSBiZSBzcGVjaWZpZWQgd2hlcmV2ZXIgeW91IHdvdWxkIG5vcm1hbGx5CitzcGVjaWZ5IGBvcmlnaW4vbWFzdGVyYC4KKysKK1dpdGggYC1kYCwgdGhlIHN5bWJvbGljIHJlZiBgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEYCBpcyBkZWxldGVkLgorKworV2l0aCBgLWFgLCB0aGUgcmVtb3RlIGlzIHF1ZXJpZWQgdG8gZGV0ZXJtaW5lIGl0cyBgSEVBRGAsIHRoZW4gdGhlCitzeW1ib2xpYy1yZWYgYHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRGAgaXMgc2V0IHRvIHRoZSBzYW1lIGJyYW5jaC4gZS5nLiwgaWYgdGhlIHJlbW90ZQorYEhFQURgIGlzIHBvaW50ZWQgYXQgYG5leHRgLCAiYGdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIC1hYCIgd2lsbCBzZXQKK3RoZSBzeW1ib2xpYy1yZWYgYHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRGAgdG8gYHJlZnMvcmVtb3Rlcy9vcmlnaW4vbmV4dGAuIFRoaXMgd2lsbAorb25seSB3b3JrIGlmIGByZWZzL3JlbW90ZXMvb3JpZ2luL25leHRgIGFscmVhZHkgZXhpc3RzOyBpZiBub3QgaXQgbXVzdCBiZQorZmV0Y2hlZCBmaXJzdC4KKysKK1VzZSBgPGJyYW5jaD5gIHRvIHNldCB0aGUgc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQURgIGV4cGxpY2l0bHkuIGUuZy4sICJnaXQKK3JlbW90ZSBzZXQtaGVhZCBvcmlnaW4gbWFzdGVyIiB3aWxsIHNldCB0aGUgc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQURgIHRvCitgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXJgLiBUaGlzIHdpbGwgb25seSB3b3JrIGlmCitgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXJgIGFscmVhZHkgZXhpc3RzOyBpZiBub3QgaXQgbXVzdCBiZSBmZXRjaGVkIGZpcnN0LgorKworCisnc2V0LWJyYW5jaGVzJzo6CisKK0NoYW5nZXMgdGhlIGxpc3Qgb2YgYnJhbmNoZXMgdHJhY2tlZCBieSB0aGUgbmFtZWQgcmVtb3RlLgorVGhpcyBjYW4gYmUgdXNlZCB0byB0cmFjayBhIHN1YnNldCBvZiB0aGUgYXZhaWxhYmxlIHJlbW90ZSBicmFuY2hlcworYWZ0ZXIgdGhlIGluaXRpYWwgc2V0dXAgZm9yIGEgcmVtb3RlLgorKworVGhlIG5hbWVkIGJyYW5jaGVzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgaWYgc3BlY2lmaWVkIHdpdGggdGhlCitgLXRgIG9wdGlvbiBvbiB0aGUgJ2dpdCByZW1vdGUgYWRkJyBjb21tYW5kIGxpbmUuCisrCitXaXRoIGAtLWFkZGAsIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZSBsaXN0IG9mIGN1cnJlbnRseSB0cmFja2VkCiticmFuY2hlcywgYWRkcyB0byB0aGF0IGxpc3QuCisKKydzZXQtdXJsJzo6CisKK0NoYW5nZXMgVVJMIHJlbW90ZSBwb2ludHMgdG8uIFNldHMgZmlyc3QgVVJMIHJlbW90ZSBwb2ludHMgdG8gbWF0Y2hpbmcKK3JlZ2V4IDxvbGR1cmw+IChmaXJzdCBVUkwgaWYgbm8gPG9sZHVybD4gaXMgZ2l2ZW4pIHRvIDxuZXd1cmw+LiBJZgorPG9sZHVybD4gZG9lc24ndCBtYXRjaCBhbnkgVVJMLCBlcnJvciBvY2N1cnMgYW5kIG5vdGhpbmcgaXMgY2hhbmdlZC4KKysKK1dpdGggJy0tcHVzaCcsIHB1c2ggVVJMcyBhcmUgbWFuaXB1bGF0ZWQgaW5zdGVhZCBvZiBmZXRjaCBVUkxzLgorKworV2l0aCAnLS1hZGQnLCBpbnN0ZWFkIG9mIGNoYW5naW5nIHNvbWUgVVJMLCBuZXcgVVJMIGlzIGFkZGVkLgorKworV2l0aCAnLS1kZWxldGUnLCBpbnN0ZWFkIG9mIGNoYW5naW5nIHNvbWUgVVJMLCBhbGwgVVJMcyBtYXRjaGluZworcmVnZXggPHVybD4gYXJlIGRlbGV0ZWQuIFRyeWluZyB0byBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMgaXMgYW4KK2Vycm9yLgorCisnc2hvdyc6OgorCitHaXZlcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZW1vdGUgPG5hbWU+LgorKworV2l0aCBgLW5gIG9wdGlvbiwgdGhlIHJlbW90ZSBoZWFkcyBhcmUgbm90IHF1ZXJpZWQgZmlyc3Qgd2l0aAorYGdpdCBscy1yZW1vdGUgPG5hbWU+YDsgY2FjaGVkIGluZm9ybWF0aW9uIGlzIHVzZWQgaW5zdGVhZC4KKworJ3BydW5lJzo6CisKK0RlbGV0ZXMgYWxsIHN0YWxlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyB1bmRlciA8bmFtZT4uCitUaGVzZSBzdGFsZSBicmFuY2hlcyBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5CityZWZlcmVuY2VkIGJ5IDxuYW1lPiwgYnV0IGFyZSBzdGlsbCBsb2NhbGx5IGF2YWlsYWJsZSBpbgorInJlbW90ZXMvPG5hbWU+Ii4KKysKK1dpdGggYC0tZHJ5LXJ1bmAgb3B0aW9uLCByZXBvcnQgd2hhdCBicmFuY2hlcyB3aWxsIGJlIHBydW5lZCwgYnV0IGRvIG5vdAorYWN0dWFsbHkgcHJ1bmUgdGhlbS4KKworJ3VwZGF0ZSc6OgorCitGZXRjaCB1cGRhdGVzIGZvciBhIG5hbWVkIHNldCBvZiByZW1vdGVzIGluIHRoZSByZXBvc2l0b3J5IGFzIGRlZmluZWQgYnkKK3JlbW90ZXMuPGdyb3VwPi4gIElmIGEgbmFtZWQgZ3JvdXAgaXMgbm90IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLAordGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHJlbW90ZXMuZGVmYXVsdCB3aWxsIGJlIHVzZWQ7IGlmCityZW1vdGVzLmRlZmF1bHQgaXMgbm90IGRlZmluZWQsIGFsbCByZW1vdGVzIHdoaWNoIGRvIG5vdCBoYXZlIHRoZQorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgcmVtb3RlLjxuYW1lPi5za2lwRGVmYXVsdFVwZGF0ZSBzZXQgdG8gdHJ1ZSB3aWxsCitiZSB1cGRhdGVkLiAgKFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorKworV2l0aCBgLS1wcnVuZWAgb3B0aW9uLCBwcnVuZSBhbGwgdGhlIHJlbW90ZXMgdGhhdCBhcmUgdXBkYXRlZC4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1RoZSByZW1vdGUgY29uZmlndXJhdGlvbiBpcyBhY2hpZXZlZCB1c2luZyB0aGUgYHJlbW90ZS5vcmlnaW4udXJsYCBhbmQKK2ByZW1vdGUub3JpZ2luLmZldGNoYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gIChTZWUKK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKK0V4YW1wbGVzCistLS0tLS0tLQorCisqIEFkZCBhIG5ldyByZW1vdGUsIGZldGNoLCBhbmQgY2hlY2sgb3V0IGEgYnJhbmNoIGZyb20gaXQKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVtb3RlCitvcmlnaW4KKyQgZ2l0IGJyYW5jaCAtcgorb3JpZ2luL21hc3RlcgorJCBnaXQgcmVtb3RlIGFkZCBsaW51eC1uZnMgZ2l0Oi8vbGludXgtbmZzLm9yZy9wdWIvbGludXgvbmZzLTIuNi5naXQKKyQgZ2l0IHJlbW90ZQorbGludXgtbmZzCitvcmlnaW4KKyQgZ2l0IGZldGNoCisqIHJlZnMvcmVtb3Rlcy9saW51eC1uZnMvbWFzdGVyOiBzdG9yaW5nIGJyYW5jaCAnbWFzdGVyJyAuLi4KKyAgY29tbWl0OiBiZjgxYjQ2CiskIGdpdCBicmFuY2ggLXIKK29yaWdpbi9tYXN0ZXIKK2xpbnV4LW5mcy9tYXN0ZXIKKyQgZ2l0IGNoZWNrb3V0IC1iIG5mcyBsaW51eC1uZnMvbWFzdGVyCisuLi4KKy0tLS0tLS0tLS0tLQorCisqIEltaXRhdGUgJ2dpdCBjbG9uZScgYnV0IHRyYWNrIG9ubHkgc2VsZWN0ZWQgYnJhbmNoZXMKKysKKy0tLS0tLS0tLS0tLQorJCBta2RpciBwcm9qZWN0LmdpdAorJCBjZCBwcm9qZWN0LmdpdAorJCBnaXQgaW5pdAorJCBnaXQgcmVtb3RlIGFkZCAtZiAtdCBtYXN0ZXIgLW0gbWFzdGVyIG9yaWdpbiBnaXQ6Ly9leGFtcGxlLmNvbS9naXQuZ2l0LworJCBnaXQgbWVyZ2Ugb3JpZ2luCistLS0tLS0tLS0tLS0KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZldGNoWzFdCitsaW5rZ2l0OmdpdC1icmFuY2hbMV0KK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMWFmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0CkBAIC0wLDAgKzEsMTM0IEBACitnaXQtcmVwYWNrKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXBhY2sgLSBQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlcGFjaycgWy1hXSBbLUFdIFstZF0gWy1mXSBbLUZdIFstbF0gWy1uXSBbLXFdIFstLXdpbmRvdz08bj5dIFstLWRlcHRoPTxuPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgc2NyaXB0IGlzIHVzZWQgdG8gY29tYmluZSBhbGwgb2JqZWN0cyB0aGF0IGRvIG5vdCBjdXJyZW50bHkKK3Jlc2lkZSBpbiBhICJwYWNrIiwgaW50byBhIHBhY2suICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHJlLW9yZ2FuaXplCitleGlzdGluZyBwYWNrcyBpbnRvIGEgc2luZ2xlLCBtb3JlIGVmZmljaWVudCBwYWNrLgorCitBIHBhY2sgaXMgYSBjb2xsZWN0aW9uIG9mIG9iamVjdHMsIGluZGl2aWR1YWxseSBjb21wcmVzc2VkLCB3aXRoCitkZWx0YSBjb21wcmVzc2lvbiBhcHBsaWVkLCBzdG9yZWQgaW4gYSBzaW5nbGUgZmlsZSwgd2l0aCBhbgorYXNzb2NpYXRlZCBpbmRleCBmaWxlLgorCitQYWNrcyBhcmUgdXNlZCB0byByZWR1Y2UgdGhlIGxvYWQgb24gbWlycm9yIHN5c3RlbXMsIGJhY2t1cAorZW5naW5lcywgZGlzayBzdG9yYWdlLCBldGMuCisKK09QVElPTlMKKy0tLS0tLS0KKworLWE6OgorCUluc3RlYWQgb2YgaW5jcmVtZW50YWxseSBwYWNraW5nIHRoZSB1bnBhY2tlZCBvYmplY3RzLAorCXBhY2sgZXZlcnl0aGluZyByZWZlcmVuY2VkIGludG8gYSBzaW5nbGUgcGFjay4KKwlFc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHBhY2tpbmcgYSByZXBvc2l0b3J5IHRoYXQgaXMgdXNlZAorCWZvciBwcml2YXRlIGRldmVsb3BtZW50LiBVc2UKKwl3aXRoICctZCcuICBUaGlzIHdpbGwgY2xlYW4gdXAgdGhlIG9iamVjdHMgdGhhdCBgZ2l0IHBydW5lYAorCWxlYXZlcyBiZWhpbmQsIGJ1dCBgZ2l0IGZzY2sgLS1mdWxsIC0tZGFuZ2xpbmdgIHNob3dzIGFzCisJZGFuZ2xpbmcuCisrCitOb3RlIHRoYXQgdXNlcnMgZmV0Y2hpbmcgb3ZlciBkdW1iIHByb3RvY29scyB3aWxsIGhhdmUgdG8gZmV0Y2ggdGhlCit3aG9sZSBuZXcgcGFjayBpbiBvcmRlciB0byBnZXQgYW55IGNvbnRhaW5lZCBvYmplY3QsIG5vIG1hdHRlciBob3cgbWFueQorb3RoZXIgb2JqZWN0cyBpbiB0aGF0IHBhY2sgdGhleSBhbHJlYWR5IGhhdmUgbG9jYWxseS4KKworLUE6OgorCVNhbWUgYXMgYC1hYCwgdW5sZXNzICctZCcgaXMgdXNlZC4gIFRoZW4gYW55IHVucmVhY2hhYmxlCisJb2JqZWN0cyBpbiBhIHByZXZpb3VzIHBhY2sgYmVjb21lIGxvb3NlLCB1bnBhY2tlZCBvYmplY3RzLAorCWluc3RlYWQgb2YgYmVpbmcgbGVmdCBpbiB0aGUgb2xkIHBhY2suICBVbnJlYWNoYWJsZSBvYmplY3RzCisJYXJlIG5ldmVyIGludGVudGlvbmFsbHkgYWRkZWQgdG8gYSBwYWNrLCBldmVuIHdoZW4gcmVwYWNraW5nLgorCVRoaXMgb3B0aW9uIHByZXZlbnRzIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSBiZWluZyBpbW1lZGlhdGVseQorCWRlbGV0ZWQgYnkgd2F5IG9mIGJlaW5nIGxlZnQgaW4gdGhlIG9sZCBwYWNrIGFuZCB0aGVuCisJcmVtb3ZlZC4gIEluc3RlYWQsIHRoZSBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzCisJd2lsbCBiZSBwcnVuZWQgYWNjb3JkaW5nIHRvIG5vcm1hbCBleHBpcnkgcnVsZXMKKwl3aXRoIHRoZSBuZXh0ICdnaXQgZ2MnIGludm9jYXRpb24uIFNlZSBsaW5rZ2l0OmdpdC1nY1sxXS4KKworLWQ6OgorCUFmdGVyIHBhY2tpbmcsIGlmIHRoZSBuZXdseSBjcmVhdGVkIHBhY2tzIG1ha2Ugc29tZQorCWV4aXN0aW5nIHBhY2tzIHJlZHVuZGFudCwgcmVtb3ZlIHRoZSByZWR1bmRhbnQgcGFja3MuCisJQWxzbyBydW4gICdnaXQgcHJ1bmUtcGFja2VkJyB0byByZW1vdmUgcmVkdW5kYW50CisJbG9vc2Ugb2JqZWN0IGZpbGVzLgorCistbDo6CisJUGFzcyB0aGUgYC0tbG9jYWxgIG9wdGlvbiB0byAnZ2l0IHBhY2stb2JqZWN0cycuIFNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KKworLWY6OgorCVBhc3MgdGhlIGAtLW5vLXJldXNlLWRlbHRhYCBvcHRpb24gdG8gYGdpdC1wYWNrLW9iamVjdHNgLCBzZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uCisKKy1GOjoKKwlQYXNzIHRoZSBgLS1uby1yZXVzZS1vYmplY3RgIG9wdGlvbiB0byBgZ2l0LXBhY2stb2JqZWN0c2AsIHNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KKworLXE6OgorCVBhc3MgdGhlIGAtcWAgb3B0aW9uIHRvICdnaXQgcGFjay1vYmplY3RzJy4gU2VlCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLgorCistbjo6CisJRG8gbm90IHVwZGF0ZSB0aGUgc2VydmVyIGluZm9ybWF0aW9uIHdpdGgKKwknZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbycuICBUaGlzIG9wdGlvbiBza2lwcworCXVwZGF0aW5nIGxvY2FsIGNhdGFsb2cgZmlsZXMgbmVlZGVkIHRvIHB1Ymxpc2gKKwl0aGlzIHJlcG9zaXRvcnkgKG9yIGEgZGlyZWN0IGNvcHkgb2YgaXQpCisJb3ZlciBIVFRQIG9yIEZUUC4gIFNlZSBsaW5rZ2l0OmdpdC11cGRhdGUtc2VydmVyLWluZm9bMV0uCisKKy0td2luZG93PTxuPjo6CistLWRlcHRoPTxuPjo6CisJVGhlc2UgdHdvIG9wdGlvbnMgYWZmZWN0IGhvdyB0aGUgb2JqZWN0cyBjb250YWluZWQgaW4gdGhlIHBhY2sgYXJlCisJc3RvcmVkIHVzaW5nIGRlbHRhIGNvbXByZXNzaW9uLiBUaGUgb2JqZWN0cyBhcmUgZmlyc3QgaW50ZXJuYWxseQorCXNvcnRlZCBieSB0eXBlLCBzaXplIGFuZCBvcHRpb25hbGx5IG5hbWVzIGFuZCBjb21wYXJlZCBhZ2FpbnN0IHRoZQorCW90aGVyIG9iamVjdHMgd2l0aGluIGAtLXdpbmRvd2AgdG8gc2VlIGlmIHVzaW5nIGRlbHRhIGNvbXByZXNzaW9uIHNhdmVzCisJc3BhY2UuIGAtLWRlcHRoYCBsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGg7IG1ha2luZyBpdCB0b28gZGVlcAorCWFmZmVjdHMgdGhlIHBlcmZvcm1hbmNlIG9uIHRoZSB1bnBhY2tlciBzaWRlLCBiZWNhdXNlIGRlbHRhIGRhdGEgbmVlZHMKKwl0byBiZSBhcHBsaWVkIHRoYXQgbWFueSB0aW1lcyB0byBnZXQgdG8gdGhlIG5lY2Vzc2FyeSBvYmplY3QuCisJVGhlIGRlZmF1bHQgdmFsdWUgZm9yIC0td2luZG93IGlzIDEwIGFuZCAtLWRlcHRoIGlzIDUwLgorCistLXdpbmRvdy1tZW1vcnk9PG4+OjoKKwlUaGlzIG9wdGlvbiBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGxpbWl0IG9uIHRvcCBvZiBgLS13aW5kb3dgOworCXRoZSB3aW5kb3cgc2l6ZSB3aWxsIGR5bmFtaWNhbGx5IHNjYWxlIGRvd24gc28gYXMgdG8gbm90IHRha2UKKwl1cCBtb3JlIHRoYW4gJzxuPicgYnl0ZXMgaW4gbWVtb3J5LiAgVGhpcyBpcyB1c2VmdWwgaW4KKwlyZXBvc2l0b3JpZXMgd2l0aCBhIG1peCBvZiBsYXJnZSBhbmQgc21hbGwgb2JqZWN0cyB0byBub3QgcnVuCisJb3V0IG9mIG1lbW9yeSB3aXRoIGEgbGFyZ2Ugd2luZG93LCBidXQgc3RpbGwgYmUgYWJsZSB0byB0YWtlCisJYWR2YW50YWdlIG9mIHRoZSBsYXJnZSB3aW5kb3cgZm9yIHRoZSBzbWFsbGVyIG9iamVjdHMuICBUaGUKKwlzaXplIGNhbiBiZSBzdWZmaXhlZCB3aXRoICJrIiwgIm0iLCBvciAiZyIuCisJYC0td2luZG93LW1lbW9yeT0wYCBtYWtlcyBtZW1vcnkgdXNhZ2UgdW5saW1pdGVkLCB3aGljaCBpcyB0aGUKKwlkZWZhdWx0LgorCistLW1heC1wYWNrLXNpemU9PG4+OjoKKwlNYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlLiBUaGUgc2l6ZSBjYW4gYmUgc3VmZml4ZWQgd2l0aAorCSJrIiwgIm0iLCBvciAiZyIuIFRoZSBtaW5pbXVtIHNpemUgYWxsb3dlZCBpcyBsaW1pdGVkIHRvIDEgTWlCLgorCUlmIHNwZWNpZmllZCwgIG11bHRpcGxlIHBhY2tmaWxlcyBtYXkgYmUgY3JlYXRlZC4KKwlUaGUgZGVmYXVsdCBpcyB1bmxpbWl0ZWQsIHVubGVzcyB0aGUgY29uZmlnIHZhcmlhYmxlCisJYHBhY2sucGFja1NpemVMaW1pdGAgaXMgc2V0LgorCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgdGhlIGNvbW1hbmQgcGFzc2VzIGAtLWRlbHRhLWJhc2Utb2Zmc2V0YCBvcHRpb24gdG8KKydnaXQgcGFjay1vYmplY3RzJzsgdGhpcyB0eXBpY2FsbHkgcmVzdWx0cyBpbiBzbGlnaHRseSBzbWFsbGVyIHBhY2tzLAorYnV0IHRoZSBnZW5lcmF0ZWQgcGFja3MgYXJlIGluY29tcGF0aWJsZSB3aXRoIHZlcnNpb25zIG9mIEdpdCBvbGRlciB0aGFuCit2ZXJzaW9uIDEuNC40LiBJZiB5b3UgbmVlZCB0byBzaGFyZSB5b3VyIHJlcG9zaXRvcnkgd2l0aCBzdWNoIGFuY2llbnQgR2l0Cit2ZXJzaW9ucywgZWl0aGVyIGRpcmVjdGx5IG9yIHZpYSB0aGUgZHVtYiBodHRwIG9yIHJzeW5jIHByb3RvY29sLCB0aGVuIHlvdQorbmVlZCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYHJlcGFjay5Vc2VEZWx0YUJhc2VPZmZzZXRgIHRvCisiZmFsc2UiIGFuZCByZXBhY2suIEFjY2VzcyBmcm9tIG9sZCBHaXQgdmVyc2lvbnMgb3ZlciB0aGUgbmF0aXZlIHByb3RvY29sCitpcyB1bmFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uIGFzIHRoZSBjb252ZXJzaW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgZmx5CithcyBuZWVkZWQgaW4gdGhhdCBjYXNlLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXQorbGlua2dpdDpnaXQtcHJ1bmUtcGFja2VkWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwbGFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBsYWNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTEzMWQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwbGFjZS50eHQKQEAgLTAsMCArMSw4NCBAQAorZ2l0LXJlcGxhY2UoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXBsYWNlIC0gQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlcGxhY2UnIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PgorJ2dpdCByZXBsYWNlJyAtZCA8b2JqZWN0Pi4uLgorJ2dpdCByZXBsYWNlJyAtbCBbPHBhdHRlcm4+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0FkZHMgYSAncmVwbGFjZScgcmVmZXJlbmNlIGluIGByZWZzL3JlcGxhY2UvYCBuYW1lc3BhY2UuCisKK1RoZSBuYW1lIG9mIHRoZSAncmVwbGFjZScgcmVmZXJlbmNlIGlzIHRoZSBTSEExIG9mIHRoZSBvYmplY3QgdGhhdCBpcworcmVwbGFjZWQuIFRoZSBjb250ZW50IG9mIHRoZSAncmVwbGFjZScgcmVmZXJlbmNlIGlzIHRoZSBTSEExIG9mIHRoZQorcmVwbGFjZW1lbnQgb2JqZWN0LgorCitVbmxlc3MgYC1mYCBpcyBnaXZlbiwgdGhlICdyZXBsYWNlJyByZWZlcmVuY2UgbXVzdCBub3QgeWV0IGV4aXN0LgorCitSZXBsYWNlbWVudCByZWZlcmVuY2VzIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0IGJ5IGFsbCBnaXQgY29tbWFuZHMKK2V4Y2VwdCB0aG9zZSBkb2luZyByZWFjaGFiaWxpdHkgdHJhdmVyc2FsIChwcnVuZSwgcGFjayB0cmFuc2ZlciBhbmQKK2ZzY2spLgorCitJdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIHVzZSBvZiByZXBsYWNlbWVudCByZWZlcmVuY2VzIGZvciBhbnkKK2NvbW1hbmQgdXNpbmcgdGhlIGAtLW5vLXJlcGxhY2Utb2JqZWN0c2Agb3B0aW9uIGp1c3QgYWZ0ZXIgJ2dpdCcuCisKK0ZvciBleGFtcGxlIGlmIGNvbW1pdCAnZm9vJyBoYXMgYmVlbiByZXBsYWNlZCBieSBjb21taXQgJ2Jhcic6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgY2F0LWZpbGUgY29tbWl0IGZvbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Nob3dzIGluZm9ybWF0aW9uIGFib3V0IGNvbW1pdCAnZm9vJywgd2hpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgY29tbWl0IGZvbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Nob3dzIGluZm9ybWF0aW9uIGFib3V0IGNvbW1pdCAnYmFyJy4KKworVGhlICdHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvCithY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYC0tbm8tcmVwbGFjZS1vYmplY3RzYCBvcHRpb24uCisKK09QVElPTlMKKy0tLS0tLS0KKy1mOjoKKwlJZiBhbiBleGlzdGluZyByZXBsYWNlIHJlZiBmb3IgdGhlIHNhbWUgb2JqZWN0IGV4aXN0cywgaXQgd2lsbAorCWJlIG92ZXJ3cml0dGVuIChpbnN0ZWFkIG9mIGZhaWxpbmcpLgorCistZDo6CisJRGVsZXRlIGV4aXN0aW5nIHJlcGxhY2UgcmVmcyBmb3IgdGhlIGdpdmVuIG9iamVjdHMuCisKKy1sIDxwYXR0ZXJuPjo6CisJTGlzdCByZXBsYWNlIHJlZnMgZm9yIG9iamVjdHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybiAob3IKKwlhbGwgaWYgbm8gcGF0dGVybiBpcyBnaXZlbikuCisJVHlwaW5nICJnaXQgcmVwbGFjZSIgd2l0aG91dCBhcmd1bWVudHMsIGFsc28gbGlzdHMgYWxsIHJlcGxhY2UKKwlyZWZzLgorCitCVUdTCistLS0tCitDb21wYXJpbmcgYmxvYnMgb3IgdHJlZXMgdGhhdCBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCB0aG9zZSB0aGF0CityZXBsYWNlIHRoZW0gd2lsbCBub3Qgd29yayBwcm9wZXJseS4gQW5kIHVzaW5nIGBnaXQgcmVzZXQgLS1oYXJkYCB0bworZ28gYmFjayB0byBhIHJlcGxhY2VkIGNvbW1pdCB3aWxsIG1vdmUgdGhlIGJyYW5jaCB0byB0aGUgcmVwbGFjZW1lbnQKK2NvbW1pdCBpbnN0ZWFkIG9mIHRoZSByZXBsYWNlZCBjb21taXQuCisKK1RoZXJlIG1heSBiZSBvdGhlciBwcm9ibGVtcyB3aGVuIHVzaW5nICdnaXQgcmV2LWxpc3QnIHJlbGF0ZWQgdG8KK3BlbmRpbmcgb2JqZWN0cy4gQW5kIG9mIGNvdXJzZSB0aGluZ3MgbWF5IGJyZWFrIGlmIGFuIG9iamVjdCBvZiBvbmUKK3R5cGUgaXMgcmVwbGFjZWQgYnkgYW4gb2JqZWN0IG9mIGFub3RoZXIgdHlwZSAoZm9yIGV4YW1wbGUgYSBibG9iCityZXBsYWNlZCBieSBhIGNvbW1pdCkuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtdGFnWzFdCitsaW5rZ2l0OmdpdC1icmFuY2hbMV0KK2xpbmtnaXQ6Z2l0WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwby1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwby1jb25maWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzExNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBvLWNvbmZpZy50eHQKQEAgLTAsMCArMSwyMyBAQAorZ2l0LXJlcG8tY29uZmlnKDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlcG8tY29uZmlnIC0gR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXBvLWNvbmZpZycgLi4uCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBzeW5vbnltIGZvciBsaW5rZ2l0OmdpdC1jb25maWdbMV0uICBQbGVhc2UgcmVmZXIgdG8gdGhlCitkb2N1bWVudGF0aW9uIG9mIHRoYXQgY29tbWFuZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXF1ZXN0LXB1bGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVxdWVzdC1wdWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTk2ODFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVxdWVzdC1wdWxsLnR4dApAQCAtMCwwICsxLDM1IEBACitnaXQtcmVxdWVzdC1wdWxsKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXF1ZXN0LXB1bGwgLSBHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVxdWVzdC1wdWxsJyBbLXBdIDxzdGFydD4gPHVybD4gWzxlbmQ+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworU3VtbWFyaXplcyB0aGUgY2hhbmdlcyBiZXR3ZWVuIHR3byBjb21taXRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQsIGFuZCBpbmNsdWRlcwordGhlIGdpdmVuIFVSTCBpbiB0aGUgZ2VuZXJhdGVkIHN1bW1hcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKy1wOjoKKwlTaG93IHBhdGNoIHRleHQKKworPHN0YXJ0Pjo6CisJQ29tbWl0IHRvIHN0YXJ0IGF0LgorCis8dXJsPjo6CisJVVJMIHRvIGluY2x1ZGUgaW4gdGhlIHN1bW1hcnkuCisKKzxlbmQ+OjoKKwlDb21taXQgdG8gZW5kIGF0OyBkZWZhdWx0cyB0byBIRUFELgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcmVyZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MjIyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0CkBAIC0wLDAgKzEsMjE2IEBACitnaXQtcmVyZXJlKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXJlcmUgLSBSZXVzZSByZWNvcmRlZCByZXNvbHV0aW9uIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXJlcmUnIFsnY2xlYXInfCdmb3JnZXQnIDxwYXRoc3BlYz58J2RpZmYnfCdyZW1haW5pbmcnfCdzdGF0dXMnfCdnYyddCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitJbiBhIHdvcmtmbG93IGVtcGxveWluZyByZWxhdGl2ZWx5IGxvbmcgbGl2ZWQgdG9waWMgYnJhbmNoZXMsCit0aGUgZGV2ZWxvcGVyIHNvbWV0aW1lcyBuZWVkcyB0byByZXNvbHZlIHRoZSBzYW1lIGNvbmZsaWN0cyBvdmVyCithbmQgb3ZlciBhZ2FpbiB1bnRpbCB0aGUgdG9waWMgYnJhbmNoZXMgYXJlIGRvbmUgKGVpdGhlciBtZXJnZWQKK3RvIHRoZSAicmVsZWFzZSIgYnJhbmNoLCBvciBzZW50IG91dCBhbmQgYWNjZXB0ZWQgdXBzdHJlYW0pLgorCitUaGlzIGNvbW1hbmQgYXNzaXN0cyB0aGUgZGV2ZWxvcGVyIGluIHRoaXMgcHJvY2VzcyBieSByZWNvcmRpbmcKK2NvbmZsaWN0ZWQgYXV0b21lcmdlIHJlc3VsdHMgYW5kIGNvcnJlc3BvbmRpbmcgaGFuZCByZXNvbHZlIHJlc3VsdHMKK29uIHRoZSBpbml0aWFsIG1hbnVhbCBtZXJnZSwgYW5kIGFwcGx5aW5nIHByZXZpb3VzbHkgcmVjb3JkZWQKK2hhbmQgcmVzb2x1dGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBhdXRvbWVyZ2UgcmVzdWx0cy4KKworW05PVEVdCitZb3UgbmVlZCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmVyZXJlLmVuYWJsZWQgaW4gb3JkZXIgdG8KK2VuYWJsZSB0aGlzIGNvbW1hbmQuCisKKworQ09NTUFORFMKKy0tLS0tLS0tCisKK05vcm1hbGx5LCAnZ2l0IHJlcmVyZScgaXMgcnVuIHdpdGhvdXQgYXJndW1lbnRzIG9yIHVzZXItaW50ZXJ2ZW50aW9uLgorSG93ZXZlciwgaXQgaGFzIHNldmVyYWwgY29tbWFuZHMgdGhhdCBhbGxvdyBpdCB0byBpbnRlcmFjdCB3aXRoCitpdHMgd29ya2luZyBzdGF0ZS4KKworJ2NsZWFyJzo6CisKK1Jlc2V0IHRoZSBtZXRhZGF0YSB1c2VkIGJ5IHJlcmVyZSBpZiBhIG1lcmdlIHJlc29sdXRpb24gaXMgdG8gYmUKK2Fib3J0ZWQuICBDYWxsaW5nICdnaXQgYW0gWy0tc2tpcHwtLWFib3J0XScgb3IgJ2dpdCByZWJhc2UgWy0tc2tpcHwtLWFib3J0XScKK3dpbGwgYXV0b21hdGljYWxseSBpbnZva2UgdGhpcyBjb21tYW5kLgorCisnZm9yZ2V0JyA8cGF0aHNwZWM+OjoKKworUmVzZXQgdGhlIGNvbmZsaWN0IHJlc29sdXRpb25zIHdoaWNoIHJlcmVyZSBoYXMgcmVjb3JkZWQgZm9yIHRoZSBjdXJyZW50Citjb25mbGljdCBpbiA8cGF0aHNwZWM+LgorCisnZGlmZic6OgorCitEaXNwbGF5IGRpZmZzIGZvciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcmVzb2x1dGlvbi4gIEl0IGlzCit1c2VmdWwgZm9yIHRyYWNraW5nIHdoYXQgaGFzIGNoYW5nZWQgd2hpbGUgdGhlIHVzZXIgaXMgcmVzb2x2aW5nCitjb25mbGljdHMuICBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBzeXN0ZW0KKydkaWZmJyBjb21tYW5kIGluc3RhbGxlZCBpbiBQQVRILgorCisnc3RhdHVzJzo6CisKK1ByaW50IHBhdGhzIHdpdGggY29uZmxpY3RzIHdob3NlIG1lcmdlIHJlc29sdXRpb24gcmVyZXJlIHdpbGwgcmVjb3JkLgorCisncmVtYWluaW5nJzo6CisKK1ByaW50IHBhdGhzIHdpdGggY29uZmxpY3RzIHRoYXQgaGF2ZSBub3QgYmVlbiBhdXRvcmVzb2x2ZWQgYnkgcmVyZXJlLgorVGhpcyBpbmNsdWRlcyBwYXRocyB3aG9zZSByZXNvbHV0aW9ucyBjYW5ub3QgYmUgdHJhY2tlZCBieSByZXJlcmUsCitzdWNoIGFzIGNvbmZsaWN0aW5nIHN1Ym1vZHVsZXMuCisKKydnYyc6OgorCitQcnVuZSByZWNvcmRzIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzIHRoYXQKK29jY3VycmVkIGEgbG9uZyB0aW1lIGFnby4gIEJ5IGRlZmF1bHQsIHVucmVzb2x2ZWQgY29uZmxpY3RzIG9sZGVyCit0aGFuIDE1IGRheXMgYW5kIHJlc29sdmVkIGNvbmZsaWN0cyBvbGRlciB0aGFuIDYwCitkYXlzIGFyZSBwcnVuZWQuICBUaGVzZSBkZWZhdWx0cyBhcmUgY29udHJvbGxlZCB2aWEgdGhlCitgZ2MucmVyZXJldW5yZXNvbHZlZGAgYW5kIGBnYy5yZXJlcmVyZXNvbHZlZGAgY29uZmlndXJhdGlvbgordmFyaWFibGVzIHJlc3BlY3RpdmVseS4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1doZW4geW91ciB0b3BpYyBicmFuY2ggbW9kaWZpZXMgYW4gb3ZlcmxhcHBpbmcgYXJlYSB0aGF0IHlvdXIKK21hc3RlciBicmFuY2ggKG9yIHVwc3RyZWFtKSB0b3VjaGVkIHNpbmNlIHlvdXIgdG9waWMgYnJhbmNoCitmb3JrZWQgZnJvbSBpdCwgeW91IG1heSB3YW50IHRvIHRlc3QgaXQgd2l0aCB0aGUgbGF0ZXN0IG1hc3RlciwKK2V2ZW4gYmVmb3JlIHlvdXIgdG9waWMgYnJhbmNoIGlzIHJlYWR5IHRvIGJlIHB1c2hlZCB1cHN0cmVhbToKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIG8tLS0qLS0tbyB0b3BpYworICAgICAgICAgICAgIC8KKyAgICBvLS0tby0tLW8tLS0qLS0tby0tLW8gbWFzdGVyCistLS0tLS0tLS0tLS0KKworRm9yIHN1Y2ggYSB0ZXN0LCB5b3UgbmVlZCB0byBtZXJnZSBtYXN0ZXIgYW5kIHRvcGljIHNvbWVob3cuCitPbmUgd2F5IHRvIGRvIGl0IGlzIHRvIHB1bGwgbWFzdGVyIGludG8gdGhlIHRvcGljIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tCisJJCBnaXQgY2hlY2tvdXQgdG9waWMKKwkkIGdpdCBtZXJnZSBtYXN0ZXIKKworICAgICAgICAgICAgICBvLS0tKi0tLW8tLS0rIHRvcGljCisgICAgICAgICAgICAgLyAgICAgICAgICAgLworICAgIG8tLS1vLS0tby0tLSotLS1vLS0tbyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGUgY29tbWl0cyBtYXJrZWQgd2l0aCBgKmAgdG91Y2ggdGhlIHNhbWUgYXJlYSBpbiB0aGUgc2FtZQorZmlsZTsgeW91IG5lZWQgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzIHdoZW4gY3JlYXRpbmcgdGhlIGNvbW1pdAorbWFya2VkIHdpdGggYCtgLiAgVGhlbiB5b3UgY2FuIHRlc3QgdGhlIHJlc3VsdCB0byBtYWtlIHN1cmUgeW91cgord29yay1pbi1wcm9ncmVzcyBzdGlsbCB3b3JrcyB3aXRoIHdoYXQgaXMgaW4gdGhlIGxhdGVzdCBtYXN0ZXIuCisKK0FmdGVyIHRoaXMgdGVzdCBtZXJnZSwgdGhlcmUgYXJlIHR3byB3YXlzIHRvIGNvbnRpbnVlIHlvdXIgd29yaworb24gdGhlIHRvcGljLiAgVGhlIGVhc2llc3QgaXMgdG8gYnVpbGQgb24gdG9wIG9mIHRoZSB0ZXN0IG1lcmdlCitjb21taXQgYCtgLCBhbmQgd2hlbiB5b3VyIHdvcmsgaW4gdGhlIHRvcGljIGJyYW5jaCBpcyBmaW5hbGx5CityZWFkeSwgcHVsbCB0aGUgdG9waWMgYnJhbmNoIGludG8gbWFzdGVyLCBhbmQvb3IgYXNrIHRoZQordXBzdHJlYW0gdG8gcHVsbCBmcm9tIHlvdS4gIEJ5IHRoYXQgdGltZSwgaG93ZXZlciwgdGhlIG1hc3RlciBvcgordGhlIHVwc3RyZWFtIG1pZ2h0IGhhdmUgYmVlbiBhZHZhbmNlZCBzaW5jZSB0aGUgdGVzdCBtZXJnZSBgK2AsCitpbiB3aGljaCBjYXNlIHRoZSBmaW5hbCBjb21taXQgZ3JhcGggd291bGQgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorCSQgZ2l0IGNoZWNrb3V0IHRvcGljCisJJCBnaXQgbWVyZ2UgbWFzdGVyCisJJCAuLi4gd29yayBvbiBib3RoIHRvcGljIGFuZCBtYXN0ZXIgYnJhbmNoZXMKKwkkIGdpdCBjaGVja291dCBtYXN0ZXIKKwkkIGdpdCBtZXJnZSB0b3BpYworCisgICAgICAgICAgICAgIG8tLS0qLS0tby0tLSstLS1vLS0tbyB0b3BpYworICAgICAgICAgICAgIC8gICAgICAgICAgIC8gICAgICAgICBcCisgICAgby0tLW8tLS1vLS0tKi0tLW8tLS1vLS0tby0tLW8tLS0rIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK1doZW4geW91ciB0b3BpYyBicmFuY2ggaXMgbG9uZy1saXZlZCwgaG93ZXZlciwgeW91ciB0b3BpYyBicmFuY2gKK3dvdWxkIGVuZCB1cCBoYXZpbmcgbWFueSBzdWNoICJNZXJnZSBmcm9tIG1hc3RlciIgY29tbWl0cyBvbiBpdCwKK3doaWNoIHdvdWxkIHVubmVjZXNzYXJpbHkgY2x1dHRlciB0aGUgZGV2ZWxvcG1lbnQgaGlzdG9yeS4KK1JlYWRlcnMgb2YgdGhlIExpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgbWF5IHJlbWVtYmVyIHRoYXQgTGludXMKK2NvbXBsYWluZWQgYWJvdXQgc3VjaCB0b28gZnJlcXVlbnQgdGVzdCBtZXJnZXMgd2hlbiBhIHN1YnN5c3RlbQorbWFpbnRhaW5lciBhc2tlZCB0byBwdWxsIGZyb20gYSBicmFuY2ggZnVsbCBvZiAidXNlbGVzcyBtZXJnZXMiLgorCitBcyBhbiBhbHRlcm5hdGl2ZSwgdG8ga2VlcCB0aGUgdG9waWMgYnJhbmNoIGNsZWFuIG9mIHRlc3QKK21lcmdlcywgeW91IGNvdWxkIGJsb3cgYXdheSB0aGUgdGVzdCBtZXJnZSwgYW5kIGtlZXAgYnVpbGRpbmcgb24KK3RvcCBvZiB0aGUgdGlwIGJlZm9yZSB0aGUgdGVzdCBtZXJnZToKKworLS0tLS0tLS0tLS0tCisJJCBnaXQgY2hlY2tvdXQgdG9waWMKKwkkIGdpdCBtZXJnZSBtYXN0ZXIKKwkkIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gOyMgcmV3aW5kIHRoZSB0ZXN0IG1lcmdlCisJJCAuLi4gd29yayBvbiBib3RoIHRvcGljIGFuZCBtYXN0ZXIgYnJhbmNoZXMKKwkkIGdpdCBjaGVja291dCBtYXN0ZXIKKwkkIGdpdCBtZXJnZSB0b3BpYworCisgICAgICAgICAgICAgIG8tLS0qLS0tby0tLS0tLS1vLS0tbyB0b3BpYworICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICBcCisgICAgby0tLW8tLS1vLS0tKi0tLW8tLS1vLS0tby0tLW8tLS0rIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK1RoaXMgd291bGQgbGVhdmUgb25seSBvbmUgbWVyZ2UgY29tbWl0IHdoZW4geW91ciB0b3BpYyBicmFuY2ggaXMKK2ZpbmFsbHkgcmVhZHkgYW5kIG1lcmdlZCBpbnRvIHRoZSBtYXN0ZXIgYnJhbmNoLiAgVGhpcyBtZXJnZQord291bGQgcmVxdWlyZSB5b3UgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QsIGludHJvZHVjZWQgYnkgdGhlCitjb21taXRzIG1hcmtlZCB3aXRoIGAqYC4gIEhvd2V2ZXIsIHRoaXMgY29uZmxpY3QgaXMgb2Z0ZW4gdGhlCitzYW1lIGNvbmZsaWN0IHlvdSByZXNvbHZlZCB3aGVuIHlvdSBjcmVhdGVkIHRoZSB0ZXN0IG1lcmdlIHlvdQorYmxldyBhd2F5LiAgJ2dpdCByZXJlcmUnIGhlbHBzIHlvdSByZXNvbHZlIHRoaXMgZmluYWwKK2NvbmZsaWN0ZWQgbWVyZ2UgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGZyb20geW91ciBlYXJsaWVyIGhhbmQKK3Jlc29sdmUuCisKK1J1bm5pbmcgdGhlICdnaXQgcmVyZXJlJyBjb21tYW5kIGltbWVkaWF0ZWx5IGFmdGVyIGEgY29uZmxpY3RlZAorYXV0b21lcmdlIHJlY29yZHMgdGhlIGNvbmZsaWN0ZWQgd29ya2luZyB0cmVlIGZpbGVzLCB3aXRoIHRoZQordXN1YWwgY29uZmxpY3QgbWFya2VycyBgPDw8PDw8PGAsIGA9PT09PT09YCwgYW5kIGA+Pj4+Pj4+YCBpbgordGhlbS4gIExhdGVyLCBhZnRlciB5b3UgYXJlIGRvbmUgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsCitydW5uaW5nICdnaXQgcmVyZXJlJyBhZ2FpbiB3aWxsIHJlY29yZCB0aGUgcmVzb2x2ZWQgc3RhdGUgb2YgdGhlc2UKK2ZpbGVzLiAgU3VwcG9zZSB5b3UgZGlkIHRoaXMgd2hlbiB5b3UgY3JlYXRlZCB0aGUgdGVzdCBtZXJnZSBvZgorbWFzdGVyIGludG8gdGhlIHRvcGljIGJyYW5jaC4KKworTmV4dCB0aW1lLCBhZnRlciBzZWVpbmcgdGhlIHNhbWUgY29uZmxpY3RlZCBhdXRvbWVyZ2UsCitydW5uaW5nICdnaXQgcmVyZXJlJyB3aWxsIHBlcmZvcm0gYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiB0aGUKK2VhcmxpZXIgY29uZmxpY3RlZCBhdXRvbWVyZ2UsIHRoZSBlYXJsaWVyIG1hbnVhbCByZXNvbHV0aW9uLCBhbmQKK3RoZSBjdXJyZW50IGNvbmZsaWN0ZWQgYXV0b21lcmdlLgorSWYgdGhpcyB0aHJlZS13YXkgbWVyZ2UgcmVzb2x2ZXMgY2xlYW5seSwgdGhlIHJlc3VsdCBpcyB3cml0dGVuCitvdXQgdG8geW91ciB3b3JraW5nIHRyZWUgZmlsZSwgc28geW91IGRvIG5vdCBoYXZlIHRvIG1hbnVhbGx5CityZXNvbHZlIGl0LiAgTm90ZSB0aGF0ICdnaXQgcmVyZXJlJyBsZWF2ZXMgdGhlIGluZGV4IGZpbGUgYWxvbmUsCitzbyB5b3Ugc3RpbGwgbmVlZCB0byBkbyB0aGUgZmluYWwgc2FuaXR5IGNoZWNrcyB3aXRoIGBnaXQgZGlmZmAKKyhvciBgZ2l0IGRpZmYgLWNgKSBhbmQgJ2dpdCBhZGQnIHdoZW4geW91IGFyZSBzYXRpc2ZpZWQuCisKK0FzIGEgY29udmVuaWVuY2UgbWVhc3VyZSwgJ2dpdCBtZXJnZScgYXV0b21hdGljYWxseSBpbnZva2VzCisnZ2l0IHJlcmVyZScgdXBvbiBleGl0aW5nIHdpdGggYSBmYWlsZWQgYXV0b21lcmdlIGFuZCAnZ2l0IHJlcmVyZScKK3JlY29yZHMgdGhlIGhhbmQgcmVzb2x2ZSB3aGVuIGl0IGlzIGEgbmV3IGNvbmZsaWN0LCBvciByZXVzZXMgdGhlIGVhcmxpZXIgaGFuZAorcmVzb2x2ZSB3aGVuIGl0IGlzIG5vdC4gICdnaXQgY29tbWl0JyBhbHNvIGludm9rZXMgJ2dpdCByZXJlcmUnCit3aGVuIGNvbW1pdHRpbmcgYSBtZXJnZSByZXN1bHQuICBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB5b3UgZG8KK25vdCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgeW91cnNlbGYgKGJlc2lkZXMgZW5hYmxpbmcKK3RoZSByZXJlcmUuZW5hYmxlZCBjb25maWcgdmFyaWFibGUpLgorCitJbiBvdXIgZXhhbXBsZSwgd2hlbiB5b3UgZG8gdGhlIHRlc3QgbWVyZ2UsIHRoZSBtYW51YWwKK3Jlc29sdXRpb24gaXMgcmVjb3JkZWQsIGFuZCBpdCB3aWxsIGJlIHJldXNlZCB3aGVuIHlvdSBkbyB0aGUKK2FjdHVhbCBtZXJnZSBsYXRlciB3aXRoIHRoZSB1cGRhdGVkIG1hc3RlciBhbmQgdG9waWMgYnJhbmNoLCBhcyBsb25nCithcyB0aGUgcmVjb3JkZWQgcmVzb2x1dGlvbiBpcyBzdGlsbCBhcHBsaWNhYmxlLgorCitUaGUgaW5mb3JtYXRpb24gJ2dpdCByZXJlcmUnIHJlY29yZHMgaXMgYWxzbyB1c2VkIHdoZW4gcnVubmluZworJ2dpdCByZWJhc2UnLiAgQWZ0ZXIgYmxvd2luZyBhd2F5IHRoZSB0ZXN0IG1lcmdlIGFuZCBjb250aW51aW5nCitkZXZlbG9wbWVudCBvbiB0aGUgdG9waWMgYnJhbmNoOgorCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgby0tLSotLS1vLS0tLS0tLW8tLS1vIHRvcGljCisgICAgICAgICAgICAgLworICAgIG8tLS1vLS0tby0tLSotLS1vLS0tby0tLW8tLS1vICAgbWFzdGVyCisKKwkkIGdpdCByZWJhc2UgbWFzdGVyIHRvcGljCisKKwkJCQkgIG8tLS0qLS0tby0tLS0tLS1vLS0tbyB0b3BpYworCQkJCSAvCisgICAgby0tLW8tLS1vLS0tKi0tLW8tLS1vLS0tby0tLW8gICBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCit5b3UgY291bGQgcnVuIGBnaXQgcmViYXNlIG1hc3RlciB0b3BpY2AsIHRvIGJyaW5nIHlvdXJzZWxmCit1cC10by1kYXRlIGJlZm9yZSB5b3VyIHRvcGljIGlzIHJlYWR5IHRvIGJlIHNlbnQgdXBzdHJlYW0uCitUaGlzIHdvdWxkIHJlc3VsdCBpbiBmYWxsaW5nIGJhY2sgdG8gYSB0aHJlZS13YXkgbWVyZ2UsIGFuZCBpdAord291bGQgY29uZmxpY3QgdGhlIHNhbWUgd2F5IGFzIHRoZSB0ZXN0IG1lcmdlIHlvdSByZXNvbHZlZCBlYXJsaWVyLgorJ2dpdCByZXJlcmUnIHdpbGwgYmUgcnVuIGJ5ICdnaXQgcmViYXNlJyB0byBoZWxwIHlvdSByZXNvbHZlIHRoaXMKK2NvbmZsaWN0LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTdlMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CkBAIC0wLDAgKzEsNDAzIEBACitnaXQtcmVzZXQoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVzZXQgLSBSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVzZXQnIFstcV0gWzxjb21taXQ+XSBbLS1dIDxwYXRocz4uLi4KKydnaXQgcmVzZXQnICgtLXBhdGNoIHwgLXApIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGhzPi4uLl0KKydnaXQgcmVzZXQnICgtLXNvZnQgfCAtLW1peGVkIHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcCkgWy1xXSBbPGNvbW1pdD5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgZm9ybSwgY29weSBlbnRyaWVzIGZyb20gPGNvbW1pdD4gdG8gdGhlIGluZGV4LgorSW4gdGhlIHRoaXJkIGZvcm0sIHNldCB0aGUgY3VycmVudCBicmFuY2ggaGVhZCAoSEVBRCkgdG8gPGNvbW1pdD4sIG9wdGlvbmFsbHkKK21vZGlmeWluZyBpbmRleCBhbmQgd29ya2luZyB0cmVlIHRvIG1hdGNoLiAgVGhlIDxjb21taXQ+IGRlZmF1bHRzIHRvIEhFQUQKK2luIGFsbCBmb3Jtcy4KKworJ2dpdCByZXNldCcgWy1xXSBbPGNvbW1pdD5dIFstLV0gPHBhdGhzPi4uLjo6CisJVGhpcyBmb3JtIHJlc2V0cyB0aGUgaW5kZXggZW50cmllcyBmb3IgYWxsIDxwYXRocz4gdG8gdGhlaXIKKwlzdGF0ZSBhdCA8Y29tbWl0Pi4gIChJdCBkb2VzIG5vdCBhZmZlY3QgdGhlIHdvcmtpbmcgdHJlZSwgbm9yCisJdGhlIGN1cnJlbnQgYnJhbmNoLikKKysKK1RoaXMgbWVhbnMgdGhhdCBgZ2l0IHJlc2V0IDxwYXRocz5gIGlzIHRoZSBvcHBvc2l0ZSBvZiBgZ2l0IGFkZAorPHBhdGhzPmAuCisrCitBZnRlciBydW5uaW5nIGBnaXQgcmVzZXQgPHBhdGhzPmAgdG8gdXBkYXRlIHRoZSBpbmRleCBlbnRyeSwgeW91IGNhbgordXNlIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvdXQgb2YgdGhlIGluZGV4IHRvCit0aGUgd29ya2luZyB0cmVlLgorQWx0ZXJuYXRpdmVseSwgdXNpbmcgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gYW5kIHNwZWNpZnlpbmcgYSBjb21taXQsIHlvdQorY2FuIGNvcHkgdGhlIGNvbnRlbnRzIG9mIGEgcGF0aCBvdXQgb2YgYSBjb21taXQgdG8gdGhlIGluZGV4IGFuZCB0byB0aGUKK3dvcmtpbmcgdHJlZSBpbiBvbmUgZ28uCisKKydnaXQgcmVzZXQnICgtLXBhdGNoIHwgLXApIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGhzPi4uLl06OgorCUludGVyYWN0aXZlbHkgc2VsZWN0IGh1bmtzIGluIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGluZGV4CisJYW5kIDxjb21taXQ+IChkZWZhdWx0cyB0byBIRUFEKS4gIFRoZSBjaG9zZW4gaHVua3MgYXJlIGFwcGxpZWQKKwlpbiByZXZlcnNlIHRvIHRoZSBpbmRleC4KKysKK1RoaXMgbWVhbnMgdGhhdCBgZ2l0IHJlc2V0IC1wYCBpcyB0aGUgb3Bwb3NpdGUgb2YgYGdpdCBhZGQgLXBgLCBpLmUuCit5b3UgY2FuIHVzZSBpdCB0byBzZWxlY3RpdmVseSByZXNldCBodW5rcy4gU2VlIHRoZSBgYEludGVyYWN0aXZlIE1vZGUnJworc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0gdG8gbGVhcm4gaG93IHRvIG9wZXJhdGUgdGhlIGAtLXBhdGNoYCBtb2RlLgorCisnZ2l0IHJlc2V0JyAtLTxtb2RlPiBbPGNvbW1pdD5dOjoKKwlUaGlzIGZvcm0gcmVzZXRzIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIHRvIDxjb21taXQ+IGFuZAorCXBvc3NpYmx5IHVwZGF0ZXMgdGhlIGluZGV4IChyZXNldHRpbmcgaXQgdG8gdGhlIHRyZWUgb2YgPGNvbW1pdD4pIGFuZAorCXRoZSB3b3JraW5nIHRyZWUgZGVwZW5kaW5nIG9uIDxtb2RlPiwgd2hpY2gKKwltdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworLS0KKy0tc29mdDo6CisJRG9lcyBub3QgdG91Y2ggdGhlIGluZGV4IGZpbGUgbm9yIHRoZSB3b3JraW5nIHRyZWUgYXQgYWxsIChidXQKKwlyZXNldHMgdGhlIGhlYWQgdG8gPGNvbW1pdD4sIGp1c3QgbGlrZSBhbGwgbW9kZXMgZG8pLiBUaGlzIGxlYXZlcworCWFsbCB5b3VyIGNoYW5nZWQgZmlsZXMgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkIiwgYXMgJ2dpdCBzdGF0dXMnCisJd291bGQgcHV0IGl0LgorCistLW1peGVkOjoKKwlSZXNldHMgdGhlIGluZGV4IGJ1dCBub3QgdGhlIHdvcmtpbmcgdHJlZSAoaS5lLiwgdGhlIGNoYW5nZWQgZmlsZXMKKwlhcmUgcHJlc2VydmVkIGJ1dCBub3QgbWFya2VkIGZvciBjb21taXQpIGFuZCByZXBvcnRzIHdoYXQgaGFzIG5vdAorCWJlZW4gdXBkYXRlZC4gVGhpcyBpcyB0aGUgZGVmYXVsdCBhY3Rpb24uCisKKy0taGFyZDo6CisJUmVzZXRzIHRoZSBpbmRleCBhbmQgd29ya2luZyB0cmVlLiBBbnkgY2hhbmdlcyB0byB0cmFja2VkIGZpbGVzIGluIHRoZQorCXdvcmtpbmcgdHJlZSBzaW5jZSA8Y29tbWl0PiBhcmUgZGlzY2FyZGVkLgorCistLW1lcmdlOjoKKwlSZXNldHMgdGhlIGluZGV4IGFuZCB1cGRhdGVzIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgYXJlCisJZGlmZmVyZW50IGJldHdlZW4gPGNvbW1pdD4gYW5kIEhFQUQsIGJ1dCBrZWVwcyB0aG9zZSB3aGljaCBhcmUKKwlkaWZmZXJlbnQgYmV0d2VlbiB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSAoaS5lLiB3aGljaCBoYXZlIGNoYW5nZXMKKwl3aGljaCBoYXZlIG5vdCBiZWVuIGFkZGVkKS4KKwlJZiBhIGZpbGUgdGhhdCBpcyBkaWZmZXJlbnQgYmV0d2VlbiA8Y29tbWl0PiBhbmQgdGhlIGluZGV4IGhhcyB1bnN0YWdlZAorCWNoYW5nZXMsIHJlc2V0IGlzIGFib3J0ZWQuCisrCitJbiBvdGhlciB3b3JkcywgLS1tZXJnZSBkb2VzIHNvbWV0aGluZyBsaWtlIGEgJ2dpdCByZWFkLXRyZWUgLXUgLW0gPGNvbW1pdD4nLAorYnV0IGNhcnJpZXMgZm9yd2FyZCB1bm1lcmdlZCBpbmRleCBlbnRyaWVzLgorCistLWtlZXA6OgorCVJlc2V0cyBpbmRleCBlbnRyaWVzIGFuZCB1cGRhdGVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCBhcmUKKwlkaWZmZXJlbnQgYmV0d2VlbiA8Y29tbWl0PiBhbmQgSEVBRC4KKwlJZiBhIGZpbGUgdGhhdCBpcyBkaWZmZXJlbnQgYmV0d2VlbiA8Y29tbWl0PiBhbmQgSEVBRCBoYXMgbG9jYWwgY2hhbmdlcywKKwlyZXNldCBpcyBhYm9ydGVkLgorLS0KKworSWYgeW91IHdhbnQgdG8gdW5kbyBhIGNvbW1pdCBvdGhlciB0aGFuIHRoZSBsYXRlc3Qgb24gYSBicmFuY2gsCitsaW5rZ2l0OmdpdC1yZXZlcnRbMV0gaXMgeW91ciBmcmllbmQuCisKKworT1BUSU9OUworLS0tLS0tLQorCistcTo6CistLXF1aWV0OjoKKwlCZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitVbmRvIGFkZDo6CisrCistLS0tLS0tLS0tLS0KKyQgZWRpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MT4KKyQgZ2l0IGFkZCBmcm90ei5jIGZpbGZyZS5jCiskIG1haWx4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDI+CiskIGdpdCByZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDM+CiskIGdpdCBwdWxsIGdpdDovL2luZm8uZXhhbXBsZS5jb20vIG5pdGZvbCAgPDQ+CistLS0tLS0tLS0tLS0KKysKKzwxPiBZb3UgYXJlIGhhcHBpbHkgd29ya2luZyBvbiBzb21ldGhpbmcsIGFuZCBmaW5kIHRoZSBjaGFuZ2VzCitpbiB0aGVzZSBmaWxlcyBhcmUgaW4gZ29vZCBvcmRlci4gIFlvdSBkbyBub3Qgd2FudCB0byBzZWUgdGhlbQord2hlbiB5b3UgcnVuICJnaXQgZGlmZiIsIGJlY2F1c2UgeW91IHBsYW4gdG8gd29yayBvbiBvdGhlciBmaWxlcworYW5kIGNoYW5nZXMgd2l0aCB0aGVzZSBmaWxlcyBhcmUgZGlzdHJhY3RpbmcuCis8Mj4gU29tZWJvZHkgYXNrcyB5b3UgdG8gcHVsbCwgYW5kIHRoZSBjaGFuZ2VzIHNvdW5kcyB3b3J0aHkgb2YgbWVyZ2luZy4KKzwzPiBIb3dldmVyLCB5b3UgYWxyZWFkeSBkaXJ0aWVkIHRoZSBpbmRleCAoaS5lLiB5b3VyIGluZGV4IGRvZXMKK25vdCBtYXRjaCB0aGUgSEVBRCBjb21taXQpLiAgQnV0IHlvdSBrbm93IHRoZSBwdWxsIHlvdSBhcmUgZ29pbmcKK3RvIG1ha2UgZG9lcyBub3QgYWZmZWN0IGZyb3R6LmMgbm9yIGZpbGZyZS5jLCBzbyB5b3UgcmV2ZXJ0IHRoZQoraW5kZXggY2hhbmdlcyBmb3IgdGhlc2UgdHdvIGZpbGVzLiAgWW91ciBjaGFuZ2VzIGluIHdvcmtpbmcgdHJlZQorcmVtYWluIHRoZXJlLgorPDQ+IFRoZW4geW91IGNhbiBwdWxsIGFuZCBtZXJnZSwgbGVhdmluZyBmcm90ei5jIGFuZCBmaWxmcmUuYworY2hhbmdlcyBzdGlsbCBpbiB0aGUgd29ya2luZyB0cmVlLgorCitVbmRvIGEgY29tbWl0IGFuZCByZWRvOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC4uLgorJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReICAgICAgPDE+CiskIGVkaXQgICAgICAgICAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IGNvbW1pdCAtYSAtYyBPUklHX0hFQUQgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gVGhpcyBpcyBtb3N0IG9mdGVuIGRvbmUgd2hlbiB5b3UgcmVtZW1iZXJlZCB3aGF0IHlvdQoranVzdCBjb21taXR0ZWQgaXMgaW5jb21wbGV0ZSwgb3IgeW91IG1pc3NwZWxsZWQgeW91ciBjb21taXQKK21lc3NhZ2UsIG9yIGJvdGguICBMZWF2ZXMgd29ya2luZyB0cmVlIGFzIGl0IHdhcyBiZWZvcmUgInJlc2V0Ii4KKzwyPiBNYWtlIGNvcnJlY3Rpb25zIHRvIHdvcmtpbmcgdHJlZSBmaWxlcy4KKzwzPiAicmVzZXQiIGNvcGllcyB0aGUgb2xkIGhlYWQgdG8gLmdpdC9PUklHX0hFQUQ7IHJlZG8gdGhlCitjb21taXQgYnkgc3RhcnRpbmcgd2l0aCBpdHMgbG9nIG1lc3NhZ2UuICBJZiB5b3UgZG8gbm90IG5lZWQgdG8KK2VkaXQgdGhlIG1lc3NhZ2UgZnVydGhlciwgeW91IGNhbiBnaXZlIC1DIG9wdGlvbiBpbnN0ZWFkLgorKworU2VlIGFsc28gdGhlIC0tYW1lbmQgb3B0aW9uIHRvIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXS4KKworVW5kbyBhIGNvbW1pdCwgbWFraW5nIGl0IGEgdG9waWMgYnJhbmNoOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIHRvcGljL3dpcCAgICAgPDE+CiskIGdpdCByZXNldCAtLWhhcmQgSEVBRH4zICA8Mj4KKyQgZ2l0IGNoZWNrb3V0IHRvcGljL3dpcCAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gWW91IGhhdmUgbWFkZSBzb21lIGNvbW1pdHMsIGJ1dCByZWFsaXplIHRoZXkgd2VyZSBwcmVtYXR1cmUKK3RvIGJlIGluIHRoZSAibWFzdGVyIiBicmFuY2guICBZb3Ugd2FudCB0byBjb250aW51ZSBwb2xpc2hpbmcKK3RoZW0gaW4gYSB0b3BpYyBicmFuY2gsIHNvIGNyZWF0ZSAidG9waWMvd2lwIiBicmFuY2ggb2ZmIG9mIHRoZQorY3VycmVudCBIRUFELgorPDI+IFJld2luZCB0aGUgbWFzdGVyIGJyYW5jaCB0byBnZXQgcmlkIG9mIHRob3NlIHRocmVlIGNvbW1pdHMuCis8Mz4gU3dpdGNoIHRvICJ0b3BpYy93aXAiIGJyYW5jaCBhbmQga2VlcCB3b3JraW5nLgorCitVbmRvIGNvbW1pdHMgcGVybWFuZW50bHk6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLi4uCiskIGdpdCByZXNldCAtLWhhcmQgSEVBRH4zICAgPDE+CistLS0tLS0tLS0tLS0KKysKKzwxPiBUaGUgbGFzdCB0aHJlZSBjb21taXRzIChIRUFELCBIRUFEXiwgYW5kIEhFQUR+Mikgd2VyZSBiYWQKK2FuZCB5b3UgZG8gbm90IHdhbnQgdG8gZXZlciBzZWUgdGhlbSBhZ2Fpbi4gIERvICpub3QqIGRvIHRoaXMgaWYKK3lvdSBoYXZlIGFscmVhZHkgZ2l2ZW4gdGhlc2UgY29tbWl0cyB0byBzb21lYm9keSBlbHNlLiAgKFNlZSB0aGUKKyJSRUNPVkVSSU5HIEZST00gVVBTVFJFQU0gUkVCQVNFIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXSBmb3IKK3RoZSBpbXBsaWNhdGlvbnMgb2YgZG9pbmcgc28uKQorCitVbmRvIGEgbWVyZ2Ugb3IgcHVsbDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgICAgICAgICAgICAgICAgICAgICAgICAgPDE+CitBdXRvLW1lcmdpbmcgbml0Zm9sCitDT05GTElDVCAoY29udGVudCk6IE1lcmdlIGNvbmZsaWN0IGluIG5pdGZvbAorQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC4KKyQgZ2l0IHJlc2V0IC0taGFyZCAgICAgICAgICAgICAgICAgPDI+CiskIGdpdCBwdWxsIC4gdG9waWMvYnJhbmNoICAgICAgICAgIDwzPgorVXBkYXRpbmcgZnJvbSA0MTIyMy4uLiB0byAxMzEzNC4uLgorRmFzdC1mb3J3YXJkCiskIGdpdCByZXNldCAtLWhhcmQgT1JJR19IRUFEICAgICAgIDw0PgorLS0tLS0tLS0tLS0tCisrCis8MT4gVHJ5IHRvIHVwZGF0ZSBmcm9tIHRoZSB1cHN0cmVhbSByZXN1bHRlZCBpbiBhIGxvdCBvZgorY29uZmxpY3RzOyB5b3Ugd2VyZSBub3QgcmVhZHkgdG8gc3BlbmQgYSBsb3Qgb2YgdGltZSBtZXJnaW5nCityaWdodCBub3csIHNvIHlvdSBkZWNpZGUgdG8gZG8gdGhhdCBsYXRlci4KKzwyPiAicHVsbCIgaGFzIG5vdCBtYWRlIG1lcmdlIGNvbW1pdCwgc28gImdpdCByZXNldCAtLWhhcmQiCit3aGljaCBpcyBhIHN5bm9ueW0gZm9yICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiIGNsZWFycyB0aGUgbWVzcworZnJvbSB0aGUgaW5kZXggZmlsZSBhbmQgdGhlIHdvcmtpbmcgdHJlZS4KKzwzPiBNZXJnZSBhIHRvcGljIGJyYW5jaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgd2hpY2ggcmVzdWx0ZWQKK2luIGEgZmFzdC1mb3J3YXJkLgorPDQ+IEJ1dCB5b3UgZGVjaWRlZCB0aGF0IHRoZSB0b3BpYyBicmFuY2ggaXMgbm90IHJlYWR5IGZvciBwdWJsaWMKK2NvbnN1bXB0aW9uIHlldC4gICJwdWxsIiBvciAibWVyZ2UiIGFsd2F5cyBsZWF2ZXMgdGhlIG9yaWdpbmFsCit0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGluIE9SSUdfSEVBRCwgc28gcmVzZXR0aW5nIGhhcmQgdG8gaXQKK2JyaW5ncyB5b3VyIGluZGV4IGZpbGUgYW5kIHRoZSB3b3JraW5nIHRyZWUgYmFjayB0byB0aGF0IHN0YXRlLAorYW5kIHJlc2V0cyB0aGUgdGlwIG9mIHRoZSBicmFuY2ggdG8gdGhhdCBjb21taXQuCisKK1VuZG8gYSBtZXJnZSBvciBwdWxsIGluc2lkZSBhIGRpcnR5IHdvcmtpbmcgdHJlZTo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgICAgICAgICAgICAgICAgICAgICAgICAgPDE+CitBdXRvLW1lcmdpbmcgbml0Zm9sCitNZXJnZSBtYWRlIGJ5IHJlY3Vyc2l2ZS4KKyBuaXRmb2wgICAgICAgICAgICAgICAgfCAgIDIwICsrKysrLS0tLQorIC4uLgorJCBnaXQgcmVzZXQgLS1tZXJnZSBPUklHX0hFQUQgICAgICA8Mj4KKy0tLS0tLS0tLS0tLQorKworPDE+IEV2ZW4gaWYgeW91IG1heSBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnMgaW4geW91cgord29ya2luZyB0cmVlLCB5b3UgY2FuIHNhZmVseSBzYXkgImdpdCBwdWxsIiB3aGVuIHlvdSBrbm93Cit0aGF0IHRoZSBjaGFuZ2UgaW4gdGhlIG90aGVyIGJyYW5jaCBkb2VzIG5vdCBvdmVybGFwIHdpdGgKK3RoZW0uCis8Mj4gQWZ0ZXIgaW5zcGVjdGluZyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSwgeW91IG1heSBmaW5kCit0aGF0IHRoZSBjaGFuZ2UgaW4gdGhlIG90aGVyIGJyYW5jaCBpcyB1bnNhdGlzZmFjdG9yeS4gIFJ1bm5pbmcKKyJnaXQgcmVzZXQgLS1oYXJkIE9SSUdfSEVBRCIgd2lsbCBsZXQgeW91IGdvIGJhY2sgdG8gd2hlcmUgeW91Cit3ZXJlLCBidXQgaXQgd2lsbCBkaXNjYXJkIHlvdXIgbG9jYWwgY2hhbmdlcywgd2hpY2ggeW91IGRvIG5vdAord2FudC4gICJnaXQgcmVzZXQgLS1tZXJnZSIga2VlcHMgeW91ciBsb2NhbCBjaGFuZ2VzLgorCisKK0ludGVycnVwdGVkIHdvcmtmbG93OjoKKysKK1N1cHBvc2UgeW91IGFyZSBpbnRlcnJ1cHRlZCBieSBhbiB1cmdlbnQgZml4IHJlcXVlc3Qgd2hpbGUgeW91CithcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGxhcmdlIGNoYW5nZS4gIFRoZSBmaWxlcyBpbiB5b3VyCit3b3JraW5nIHRyZWUgYXJlIG5vdCBpbiBhbnkgc2hhcGUgdG8gYmUgY29tbWl0dGVkIHlldCwgYnV0IHlvdQorbmVlZCB0byBnZXQgdG8gdGhlIG90aGVyIGJyYW5jaCBmb3IgYSBxdWljayBidWdmaXguCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IGZlYXR1cmUgOyMgeW91IHdlcmUgd29ya2luZyBpbiAiZmVhdHVyZSIgYnJhbmNoIGFuZAorJCB3b3JrIHdvcmsgd29yayAgICAgICA7IyBnb3QgaW50ZXJydXB0ZWQKKyQgZ2l0IGNvbW1pdCAtYSAtbSAic25hcHNob3QgV0lQIiAgICAgICAgICAgICAgICAgPDE+CiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZml4IGZpeCBmaXgKKyQgZ2l0IGNvbW1pdCA7IyBjb21taXQgd2l0aCByZWFsIGxvZworJCBnaXQgY2hlY2tvdXQgZmVhdHVyZQorJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReIDsjIGdvIGJhY2sgdG8gV0lQIHN0YXRlICA8Mj4KKyQgZ2l0IHJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBUaGlzIGNvbW1pdCB3aWxsIGdldCBibG93biBhd2F5IHNvIGEgdGhyb3ctYXdheSBsb2cgbWVzc2FnZSBpcyBPSy4KKzwyPiBUaGlzIHJlbW92ZXMgdGhlICdXSVAnIGNvbW1pdCBmcm9tIHRoZSBjb21taXQgaGlzdG9yeSwgYW5kIHNldHMKKyAgICB5b3VyIHdvcmtpbmcgdHJlZSB0byB0aGUgc3RhdGUganVzdCBiZWZvcmUgeW91IG1hZGUgdGhhdCBzbmFwc2hvdC4KKzwzPiBBdCB0aGlzIHBvaW50IHRoZSBpbmRleCBmaWxlIHN0aWxsIGhhcyBhbGwgdGhlIFdJUCBjaGFuZ2VzIHlvdQorICAgIGNvbW1pdHRlZCBhcyAnc25hcHNob3QgV0lQJy4gIFRoaXMgdXBkYXRlcyB0aGUgaW5kZXggdG8gc2hvdyB5b3VyCisgICAgV0lQIGZpbGVzIGFzIHVuY29tbWl0dGVkLgorKworU2VlIGFsc28gbGlua2dpdDpnaXQtc3Rhc2hbMV0uCisKK1Jlc2V0IGEgc2luZ2xlIGZpbGUgaW4gdGhlIGluZGV4OjoKKysKK1N1cHBvc2UgeW91IGhhdmUgYWRkZWQgYSBmaWxlIHRvIHlvdXIgaW5kZXgsIGJ1dCBsYXRlciBkZWNpZGUgeW91IGRvIG5vdAord2FudCB0byBhZGQgaXQgdG8geW91ciBjb21taXQuIFlvdSBjYW4gcmVtb3ZlIHRoZSBmaWxlIGZyb20gdGhlIGluZGV4Cit3aGlsZSBrZWVwaW5nIHlvdXIgY2hhbmdlcyB3aXRoIGdpdCByZXNldC4KKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVzZXQgLS0gZnJvdHouYyAgICAgICAgICAgICAgICAgICAgICA8MT4KKyQgZ2l0IGNvbW1pdCAtbSAiQ29tbWl0IGZpbGVzIGluIGluZGV4IiAgICAgPDI+CiskIGdpdCBhZGQgZnJvdHouYyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gVGhpcyByZW1vdmVzIHRoZSBmaWxlIGZyb20gdGhlIGluZGV4IHdoaWxlIGtlZXBpbmcgaXQgaW4gdGhlIHdvcmtpbmcKKyAgICBkaXJlY3RvcnkuCis8Mj4gVGhpcyBjb21taXRzIGFsbCBvdGhlciBjaGFuZ2VzIGluIHRoZSBpbmRleC4KKzwzPiBBZGRzIHRoZSBmaWxlIHRvIHRoZSBpbmRleCBhZ2Fpbi4KKworS2VlcCBjaGFuZ2VzIGluIHdvcmtpbmcgdHJlZSB3aGlsZSBkaXNjYXJkaW5nIHNvbWUgcHJldmlvdXMgY29tbWl0czo6CisrCitTdXBwb3NlIHlvdSBhcmUgd29ya2luZyBvbiBzb21ldGhpbmcgYW5kIHlvdSBjb21taXQgaXQsIGFuZCB0aGVuIHlvdQorY29udGludWUgd29ya2luZyBhIGJpdCBtb3JlLCBidXQgbm93IHlvdSB0aGluayB0aGF0IHdoYXQgeW91IGhhdmUgaW4KK3lvdXIgd29ya2luZyB0cmVlIHNob3VsZCBiZSBpbiBhbm90aGVyIGJyYW5jaCB0aGF0IGhhcyBub3RoaW5nIHRvIGRvCit3aXRoIHdoYXQgeW91IGNvbW1pdHRlZCBwcmV2aW91c2x5LiBZb3UgY2FuIHN0YXJ0IGEgbmV3IGJyYW5jaCBhbmQKK3Jlc2V0IGl0IHdoaWxlIGtlZXBpbmcgdGhlIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHRhZyBzdGFydAorJCBnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMQorJCBlZGl0CiskIGdpdCBjb21taXQgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxPgorJCBlZGl0CiskIGdpdCBjaGVja291dCAtYiBicmFuY2gyICAgICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgcmVzZXQgLS1rZWVwIHN0YXJ0ICAgICAgICAgICAgICAgICAgICA8Mz4KKy0tLS0tLS0tLS0tLQorKworPDE+IFRoaXMgY29tbWl0cyB5b3VyIGZpcnN0IGVkaXRzIGluIGJyYW5jaDEuCis8Mj4gSW4gdGhlIGlkZWFsIHdvcmxkLCB5b3UgY291bGQgaGF2ZSByZWFsaXplZCB0aGF0IHRoZSBlYXJsaWVyCisgICAgY29tbWl0IGRpZCBub3QgYmVsb25nIHRvIHRoZSBuZXcgdG9waWMgd2hlbiB5b3UgY3JlYXRlZCBhbmQgc3dpdGNoZWQKKyAgICB0byBicmFuY2gyIChpLmUuICJnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBzdGFydCIpLCBidXQgbm9ib2R5IGlzCisgICAgcGVyZmVjdC4KKzwzPiBCdXQgeW91IGNhbiB1c2UgInJlc2V0IC0ta2VlcCIgdG8gcmVtb3ZlIHRoZSB1bndhbnRlZCBjb21taXQgYWZ0ZXIKKyAgICB5b3Ugc3dpdGNoZWQgdG8gImJyYW5jaDIiLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhlIHRhYmxlcyBiZWxvdyBzaG93IHdoYXQgaGFwcGVucyB3aGVuIHJ1bm5pbmc6CisKKy0tLS0tLS0tLS0KK2dpdCByZXNldCAtLW9wdGlvbiB0YXJnZXQKKy0tLS0tLS0tLS0KKwordG8gcmVzZXQgdGhlIEhFQUQgdG8gYW5vdGhlciBjb21taXQgKGB0YXJnZXRgKSB3aXRoIHRoZSBkaWZmZXJlbnQKK3Jlc2V0IG9wdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgZmlsZXMuCisKK0luIHRoZXNlIHRhYmxlcywgQSwgQiwgQyBhbmQgRCBhcmUgc29tZSBkaWZmZXJlbnQgc3RhdGVzIG9mIGEKK2ZpbGUuIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlyc3QgdGFibGUgbWVhbnMgdGhhdCBpZiBhCitmaWxlIGlzIGluIHN0YXRlIEEgaW4gdGhlIHdvcmtpbmcgdHJlZSwgaW4gc3RhdGUgQiBpbiB0aGUgaW5kZXgsIGluCitzdGF0ZSBDIGluIEhFQUQgYW5kIGluIHN0YXRlIEQgaW4gdGhlIHRhcmdldCwgdGhlbiAiZ2l0IHJlc2V0IC0tc29mdAordGFyZ2V0IiB3aWxsIGxlYXZlIHRoZSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUgaW4gc3RhdGUgQSBhbmQgaW4gdGhlCitpbmRleCBpbiBzdGF0ZSBCLiAgSXQgcmVzZXRzIChpLmUuIG1vdmVzKSB0aGUgSEVBRCAoaS5lLiB0aGUgdGlwIG9mCit0aGUgY3VycmVudCBicmFuY2gsIGlmIHlvdSBhcmUgb24gb25lKSB0byAidGFyZ2V0IiAod2hpY2ggaGFzIHRoZSBmaWxlCitpbiBzdGF0ZSBEKS4KKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEEgICAgICAgQiAgICAgQyAgICBEICAgICAtLXNvZnQgICBBICAgICAgIEIgICAgIEQKKwkJCQktLW1peGVkICBBICAgICAgIEQgICAgIEQKKwkJCQktLWhhcmQgICBEICAgICAgIEQgICAgIEQKKwkJCQktLW1lcmdlIChkaXNhbGxvd2VkKQorCQkJCS0ta2VlcCAgKGRpc2FsbG93ZWQpCisKKyAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBBICAgICAgIEIgICAgIEMgICAgQyAgICAgLS1zb2Z0ICAgQSAgICAgICBCICAgICBDCisJCQkJLS1taXhlZCAgQSAgICAgICBDICAgICBDCisJCQkJLS1oYXJkICAgQyAgICAgICBDICAgICBDCisJCQkJLS1tZXJnZSAoZGlzYWxsb3dlZCkKKwkJCQktLWtlZXAgICBBICAgICAgIEMgICAgIEMKKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEIgICAgICAgQiAgICAgQyAgICBEICAgICAtLXNvZnQgICBCICAgICAgIEIgICAgIEQKKwkJCQktLW1peGVkICBCICAgICAgIEQgICAgIEQKKwkJCQktLWhhcmQgICBEICAgICAgIEQgICAgIEQKKwkJCQktLW1lcmdlICBEICAgICAgIEQgICAgIEQKKwkJCQktLWtlZXAgIChkaXNhbGxvd2VkKQorCisgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQiAgICAgICBCICAgICBDICAgIEMgICAgIC0tc29mdCAgIEIgICAgICAgQiAgICAgQworCQkJCS0tbWl4ZWQgIEIgICAgICAgQyAgICAgQworCQkJCS0taGFyZCAgIEMgICAgICAgQyAgICAgQworCQkJCS0tbWVyZ2UgIEMgICAgICAgQyAgICAgQworCQkJCS0ta2VlcCAgIEIgICAgICAgQyAgICAgQworCisgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQiAgICAgICBDICAgICBDICAgIEQgICAgIC0tc29mdCAgIEIgICAgICAgQyAgICAgRAorCQkJCS0tbWl4ZWQgIEIgICAgICAgRCAgICAgRAorCQkJCS0taGFyZCAgIEQgICAgICAgRCAgICAgRAorCQkJCS0tbWVyZ2UgKGRpc2FsbG93ZWQpCisJCQkJLS1rZWVwICAoZGlzYWxsb3dlZCkKKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEIgICAgICAgQyAgICAgQyAgICBDICAgICAtLXNvZnQgICBCICAgICAgIEMgICAgIEMKKwkJCQktLW1peGVkICBCICAgICAgIEMgICAgIEMKKwkJCQktLWhhcmQgICBDICAgICAgIEMgICAgIEMKKwkJCQktLW1lcmdlICBCICAgICAgIEMgICAgIEMKKwkJCQktLWtlZXAgICBCICAgICAgIEMgICAgIEMKKworInJlc2V0IC0tbWVyZ2UiIGlzIG1lYW50IHRvIGJlIHVzZWQgd2hlbiByZXNldHRpbmcgb3V0IG9mIGEgY29uZmxpY3RlZAorbWVyZ2UuIEFueSBtZXJneSBvcGVyYXRpb24gZ3VhcmFudGVlcyB0aGF0IHRoZSB3b3JraW5nIHRyZWUgZmlsZSB0aGF0IGlzCitpbnZvbHZlZCBpbiB0aGUgbWVyZ2UgZG9lcyBub3QgaGF2ZSBsb2NhbCBjaGFuZ2Ugd3J0IHRoZSBpbmRleCBiZWZvcmUKK2l0IHN0YXJ0cywgYW5kIHRoYXQgaXQgd3JpdGVzIHRoZSByZXN1bHQgb3V0IHRvIHRoZSB3b3JraW5nIHRyZWUuIFNvIGlmCit3ZSBzZWUgc29tZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGluZGV4IGFuZCB0aGUgdGFyZ2V0IGFuZCBhbHNvCitiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSwgdGhlbiBpdCBtZWFucyB0aGF0IHdlIGFyZSBub3QKK3Jlc2V0dGluZyBvdXQgZnJvbSBhIHN0YXRlIHRoYXQgYSBtZXJneSBvcGVyYXRpb24gbGVmdCBhZnRlciBmYWlsaW5nCit3aXRoIGEgY29uZmxpY3QuIFRoYXQgaXMgd2h5IHdlIGRpc2FsbG93IC0tbWVyZ2Ugb3B0aW9uIGluIHRoaXMgY2FzZS4KKworInJlc2V0IC0ta2VlcCIgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aGVuIHJlbW92aW5nIHNvbWUgb2YgdGhlIGxhc3QKK2NvbW1pdHMgaW4gdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIGtlZXBpbmcgY2hhbmdlcyBpbiB0aGUgd29ya2luZwordHJlZS4gSWYgdGhlcmUgY291bGQgYmUgY29uZmxpY3RzIGJldHdlZW4gdGhlIGNoYW5nZXMgaW4gdGhlIGNvbW1pdCB3ZQord2FudCB0byByZW1vdmUgYW5kIHRoZSBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgd2Ugd2FudCB0byBrZWVwLAordGhlIHJlc2V0IGlzIGRpc2FsbG93ZWQuIFRoYXQncyB3aHkgaXQgaXMgZGlzYWxsb3dlZCBpZiB0aGVyZSBhcmUgYm90aAorY2hhbmdlcyBiZXR3ZWVuIHRoZSB3b3JraW5nIHRyZWUgYW5kIEhFQUQsIGFuZCBiZXR3ZWVuIEhFQUQgYW5kIHRoZQordGFyZ2V0LiBUbyBiZSBzYWZlLCBpdCBpcyBhbHNvIGRpc2FsbG93ZWQgd2hlbiB0aGVyZSBhcmUgdW5tZXJnZWQKK2VudHJpZXMuCisKK1RoZSBmb2xsb3dpbmcgdGFibGVzIHNob3cgd2hhdCBoYXBwZW5zIHdoZW4gdGhlcmUgYXJlIHVubWVyZ2VkCitlbnRyaWVzOgorCisgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgWCAgICAgICBVICAgICBBICAgIEIgICAgIC0tc29mdCAgKGRpc2FsbG93ZWQpCisJCQkJLS1taXhlZCAgWCAgICAgICBCICAgICBCCisJCQkJLS1oYXJkICAgQiAgICAgICBCICAgICBCCisJCQkJLS1tZXJnZSAgQiAgICAgICBCICAgICBCCisJCQkJLS1rZWVwICAoZGlzYWxsb3dlZCkKKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIFggICAgICAgVSAgICAgQSAgICBBICAgICAtLXNvZnQgIChkaXNhbGxvd2VkKQorCQkJCS0tbWl4ZWQgIFggICAgICAgQSAgICAgQQorCQkJCS0taGFyZCAgIEEgICAgICAgQSAgICAgQQorCQkJCS0tbWVyZ2UgIEEgICAgICAgQSAgICAgQQorCQkJCS0ta2VlcCAgKGRpc2FsbG93ZWQpCisKK1ggbWVhbnMgYW55IHN0YXRlIGFuZCBVIG1lYW5zIGFuIHVubWVyZ2VkIGluZGV4LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGZhZmNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CkBAIC0wLDAgKzEsMTE4IEBACitnaXQtcmV2LWxpc3QoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmV2LWxpc3QgLSBMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmV2LWxpc3QnIFsgXC0tbWF4LWNvdW50PTxudW1iZXI+IF0KKwkgICAgIFsgXC0tc2tpcD08bnVtYmVyPiBdCisJICAgICBbIFwtLW1heC1hZ2U9PHRpbWVzdGFtcD4gXQorCSAgICAgWyBcLS1taW4tYWdlPTx0aW1lc3RhbXA+IF0KKwkgICAgIFsgXC0tc3BhcnNlIF0KKwkgICAgIFsgXC0tbWVyZ2VzIF0KKwkgICAgIFsgXC0tbm8tbWVyZ2VzIF0KKwkgICAgIFsgXC0tbWluLXBhcmVudHM9PG51bWJlcj4gXQorCSAgICAgWyBcLS1uby1taW4tcGFyZW50cyBdCisJICAgICBbIFwtLW1heC1wYXJlbnRzPTxudW1iZXI+IF0KKwkgICAgIFsgXC0tbm8tbWF4LXBhcmVudHMgXQorCSAgICAgWyBcLS1maXJzdC1wYXJlbnQgXQorCSAgICAgWyBcLS1yZW1vdmUtZW1wdHkgXQorCSAgICAgWyBcLS1mdWxsLWhpc3RvcnkgXQorCSAgICAgWyBcLS1ub3QgXQorCSAgICAgWyBcLS1hbGwgXQorCSAgICAgWyBcLS1icmFuY2hlc1s9PHBhdHRlcm4+XSBdCisJICAgICBbIFwtLXRhZ3NbPTxwYXR0ZXJuPl0gXQorCSAgICAgWyBcLS1yZW1vdGVzWz08cGF0dGVybj5dIF0KKwkgICAgIFsgXC0tZ2xvYj08Z2xvYi1wYXR0ZXJuPiBdCisJICAgICBbIFwtLWlnbm9yZS1taXNzaW5nIF0KKwkgICAgIFsgXC0tc3RkaW4gXQorCSAgICAgWyBcLS1xdWlldCBdCisJICAgICBbIFwtLXRvcG8tb3JkZXIgXQorCSAgICAgWyBcLS1wYXJlbnRzIF0KKwkgICAgIFsgXC0tdGltZXN0YW1wIF0KKwkgICAgIFsgXC0tbGVmdC1yaWdodCBdCisJICAgICBbIFwtLWxlZnQtb25seSBdCisJICAgICBbIFwtLXJpZ2h0LW9ubHkgXQorCSAgICAgWyBcLS1jaGVycnktbWFyayBdCisJICAgICBbIFwtLWNoZXJyeS1waWNrIF0KKwkgICAgIFsgXC0tZW5jb2RpbmdbPTxlbmNvZGluZz5dIF0KKwkgICAgIFsgXC0tKGF1dGhvcnxjb21taXR0ZXJ8Z3JlcCk9PHBhdHRlcm4+IF0KKwkgICAgIFsgXC0tcmVnZXhwLWlnbm9yZS1jYXNlIHwgLWkgXQorCSAgICAgWyBcLS1leHRlbmRlZC1yZWdleHAgfCAtRSBdCisJICAgICBbIFwtLWZpeGVkLXN0cmluZ3MgfCAtRiBdCisJICAgICBbIFwtLWRhdGU9KGxvY2FsfHJlbGF0aXZlfGRlZmF1bHR8aXNvfHJmY3xzaG9ydCkgXQorCSAgICAgWyBbXC0tb2JqZWN0cyB8IFwtLW9iamVjdHMtZWRnZV0gWyBcLS11bnBhY2tlZCBdIF0KKwkgICAgIFsgXC0tcHJldHR5IHwgXC0taGVhZGVyIF0KKwkgICAgIFsgXC0tYmlzZWN0IF0KKwkgICAgIFsgXC0tYmlzZWN0LXZhcnMgXQorCSAgICAgWyBcLS1iaXNlY3QtYWxsIF0KKwkgICAgIFsgXC0tbWVyZ2UgXQorCSAgICAgWyBcLS1yZXZlcnNlIF0KKwkgICAgIFsgXC0td2Fsay1yZWZsb2dzIF0KKwkgICAgIFsgXC0tbm8td2FsayBdIFsgXC0tZG8td2FsayBdCisJICAgICA8Y29tbWl0Pi4uLiBbIFwtLSA8cGF0aHM+Li4uIF0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0xpc3QgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgYnkgZm9sbG93aW5nIHRoZSBgcGFyZW50YCBsaW5rcyBmcm9tIHRoZQorZ2l2ZW4gY29tbWl0KHMpLCBidXQgZXhjbHVkZSBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBvbmUocykKK2dpdmVuIHdpdGggYSAne2NhcmV0fScgaW4gZnJvbnQgb2YgdGhlbS4gIFRoZSBvdXRwdXQgaXMgZ2l2ZW4gaW4gcmV2ZXJzZQorY2hyb25vbG9naWNhbCBvcmRlciBieSBkZWZhdWx0LgorCitZb3UgY2FuIHRoaW5rIG9mIHRoaXMgYXMgYSBzZXQgb3BlcmF0aW9uLiAgQ29tbWl0cyBnaXZlbiBvbiB0aGUgY29tbWFuZAorbGluZSBmb3JtIGEgc2V0IG9mIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZW0sIGFuZCB0aGVuCitjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGUgb25lcyBnaXZlbiB3aXRoICd7Y2FyZXR9JyBpbiBmcm9udCBhcmUKK3N1YnRyYWN0ZWQgZnJvbSB0aGF0IHNldC4gIFRoZSByZW1haW5pbmcgY29tbWl0cyBhcmUgd2hhdCBjb21lcyBvdXQgaW4gdGhlCitjb21tYW5kJ3Mgb3V0cHV0LiAgVmFyaW91cyBvdGhlciBvcHRpb25zIGFuZCBwYXRocyBwYXJhbWV0ZXJzIGNhbiBiZSB1c2VkCit0byBmdXJ0aGVyIGxpbWl0IHRoZSByZXN1bHQuCisKK1RodXMsIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkkIGdpdCByZXYtbGlzdCBmb28gYmFyIF5iYXoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21lYW5zICJsaXN0IGFsbCB0aGUgY29tbWl0cyB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gJ2Zvbycgb3IgJ2JhcicsIGJ1dAorbm90IGZyb20gJ2JheiciLgorCitBIHNwZWNpYWwgbm90YXRpb24gIic8Y29tbWl0MT4nLi4nPGNvbW1pdDI+JyIgY2FuIGJlIHVzZWQgYXMgYQorc2hvcnQtaGFuZCBmb3IgIntjYXJldH0nPGNvbW1pdDE+JyAnPGNvbW1pdDI+JyIuIEZvciBleGFtcGxlLCBlaXRoZXIgb2YKK3RoZSBmb2xsb3dpbmcgbWF5IGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSQgZ2l0IHJldi1saXN0IG9yaWdpbi4uSEVBRAorCSQgZ2l0IHJldi1saXN0IEhFQUQgXm9yaWdpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5vdGhlciBzcGVjaWFsIG5vdGF0aW9uIGlzICInPGNvbW1pdDE+Jy4uLic8Y29tbWl0Mj4nIiB3aGljaCBpcyB1c2VmdWwKK2ZvciBtZXJnZXMuICBUaGUgcmVzdWx0aW5nIHNldCBvZiBjb21taXRzIGlzIHRoZSBzeW1tZXRyaWMgZGlmZmVyZW5jZQorYmV0d2VlbiB0aGUgdHdvIG9wZXJhbmRzLiAgVGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgYXJlIGVxdWl2YWxlbnQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJJCBnaXQgcmV2LWxpc3QgQSBCIC0tbm90ICQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgQSBCKQorCSQgZ2l0IHJldi1saXN0IEEuLi5CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisncmV2LWxpc3QnIGlzIGEgdmVyeSBlc3NlbnRpYWwgZ2l0IGNvbW1hbmQsIHNpbmNlIGl0Citwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBidWlsZCBhbmQgdHJhdmVyc2UgY29tbWl0IGFuY2VzdHJ5IGdyYXBocy4gRm9yCit0aGlzIHJlYXNvbiwgaXQgaGFzIGEgbG90IG9mIGRpZmZlcmVudCBvcHRpb25zIHRoYXQgZW5hYmxlcyBpdCB0byBiZQordXNlZCBieSBjb21tYW5kcyBhcyBkaWZmZXJlbnQgYXMgJ2dpdCBiaXNlY3QnIGFuZAorJ2dpdCByZXBhY2snLgorCitPUFRJT05TCistLS0tLS0tCisKKzpnaXQtcmV2LWxpc3Q6IDEKK2luY2x1ZGU6OnJldi1saXN0LW9wdGlvbnMudHh0W10KKworaW5jbHVkZTo6cHJldHR5LWZvcm1hdHMudHh0W10KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzYzNTYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dApAQCAtMCwwICsxLDMyNCBAQAorZ2l0LXJldi1wYXJzZSgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmV2LXBhcnNlIC0gUGljayBvdXQgYW5kIG1hc3NhZ2UgcGFyYW1ldGVycworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXYtcGFyc2UnIFsgLS1vcHRpb24gXSA8YXJncz4uLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK01hbnkgZ2l0IHBvcmNlbGFpbmlzaCBjb21tYW5kcyB0YWtlIG1peHR1cmUgb2YgZmxhZ3MKKyhpLmUuIHBhcmFtZXRlcnMgdGhhdCBiZWdpbiB3aXRoIGEgZGFzaCAnLScpIGFuZCBwYXJhbWV0ZXJzCittZWFudCBmb3IgdGhlIHVuZGVybHlpbmcgJ2dpdCByZXYtbGlzdCcgY29tbWFuZCB0aGV5IHVzZSBpbnRlcm5hbGx5CithbmQgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBvdGhlciBjb21tYW5kcyB0aGV5IHVzZQorZG93bnN0cmVhbSBvZiAnZ2l0IHJldi1saXN0Jy4gIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvCitkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0uCisKKworT1BUSU9OUworLS0tLS0tLQorLS1wYXJzZW9wdDo6CisJVXNlICdnaXQgcmV2LXBhcnNlJyBpbiBvcHRpb24gcGFyc2luZyBtb2RlIChzZWUgUEFSU0VPUFQgc2VjdGlvbiBiZWxvdykuCisKKy0ta2VlcC1kYXNoZGFzaDo6CisJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiBUZWxscyB0aGUgb3B0aW9uIHBhcnNlciB0byBlY2hvCisJb3V0IHRoZSBmaXJzdCBgLS1gIG1ldCBpbnN0ZWFkIG9mIHNraXBwaW5nIGl0LgorCistLXN0b3AtYXQtbm9uLW9wdGlvbjo6CisJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiAgTGV0cyB0aGUgb3B0aW9uIHBhcnNlciBzdG9wIGF0CisJdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHBhcnNlIHN1Yi1jb21tYW5kcworCXRoYXQgdGFrZSBvcHRpb25zIHRoZW1zZWx2ZXMuCisKKy0tc3EtcXVvdGU6OgorCVVzZSAnZ2l0IHJldi1wYXJzZScgaW4gc2hlbGwgcXVvdGluZyBtb2RlIChzZWUgU1EtUVVPVEUKKwlzZWN0aW9uIGJlbG93KS4gSW4gY29udHJhc3QgdG8gdGhlIGAtLXNxYCBvcHRpb24gYmVsb3csIHRoaXMKKwltb2RlIGRvZXMgb25seSBxdW90aW5nLiBOb3RoaW5nIGVsc2UgaXMgZG9uZSB0byBjb21tYW5kIGlucHV0LgorCistLXJldnMtb25seTo6CisJRG8gbm90IG91dHB1dCBmbGFncyBhbmQgcGFyYW1ldGVycyBub3QgbWVhbnQgZm9yCisJJ2dpdCByZXYtbGlzdCcgY29tbWFuZC4KKworLS1uby1yZXZzOjoKKwlEbyBub3Qgb3V0cHV0IGZsYWdzIGFuZCBwYXJhbWV0ZXJzIG1lYW50IGZvcgorCSdnaXQgcmV2LWxpc3QnIGNvbW1hbmQuCisKKy0tZmxhZ3M6OgorCURvIG5vdCBvdXRwdXQgbm9uLWZsYWcgcGFyYW1ldGVycy4KKworLS1uby1mbGFnczo6CisJRG8gbm90IG91dHB1dCBmbGFnIHBhcmFtZXRlcnMuCisKKy0tZGVmYXVsdCA8YXJnPjo6CisJSWYgdGhlcmUgaXMgbm8gcGFyYW1ldGVyIGdpdmVuIGJ5IHRoZSB1c2VyLCB1c2UgYDxhcmc+YAorCWluc3RlYWQuCisKKy0tdmVyaWZ5OjoKKwlUaGUgcGFyYW1ldGVyIGdpdmVuIG11c3QgYmUgdXNhYmxlIGFzIGEgc2luZ2xlLCB2YWxpZAorCW9iamVjdCBuYW1lLiAgT3RoZXJ3aXNlIGJhcmYgYW5kIGFib3J0LgorCistcTo6CistLXF1aWV0OjoKKwlPbmx5IG1lYW5pbmdmdWwgaW4gYC0tdmVyaWZ5YCBtb2RlLiBEbyBub3Qgb3V0cHV0IGFuIGVycm9yCisJbWVzc2FnZSBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgb2JqZWN0IG5hbWU7CisJaW5zdGVhZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIHNpbGVudGx5LgorCistLXNxOjoKKwlVc3VhbGx5IHRoZSBvdXRwdXQgaXMgbWFkZSBvbmUgbGluZSBwZXIgZmxhZyBhbmQKKwlwYXJhbWV0ZXIuICBUaGlzIG9wdGlvbiBtYWtlcyBvdXRwdXQgYSBzaW5nbGUgbGluZSwKKwlwcm9wZXJseSBxdW90ZWQgZm9yIGNvbnN1bXB0aW9uIGJ5IHNoZWxsLiAgVXNlZnVsIHdoZW4KKwl5b3UgZXhwZWN0IHlvdXIgcGFyYW1ldGVyIHRvIGNvbnRhaW4gd2hpdGVzcGFjZXMgYW5kCisJbmV3bGluZXMgKGUuZy4gd2hlbiB1c2luZyBwaWNrYXhlIGAtU2Agd2l0aAorCSdnaXQgZGlmZi17YXN0ZXJpc2t9JykuIEluIGNvbnRyYXN0IHRvIHRoZSBgLS1zcS1xdW90ZWAgb3B0aW9uLAorCXRoZSBjb21tYW5kIGlucHV0IGlzIHN0aWxsIGludGVycHJldGVkIGFzIHVzdWFsLgorCistLW5vdDo6CisJV2hlbiBzaG93aW5nIG9iamVjdCBuYW1lcywgcHJlZml4IHRoZW0gd2l0aCAne2NhcmV0fScgYW5kCisJc3RyaXAgJ3tjYXJldH0nIHByZWZpeCBmcm9tIHRoZSBvYmplY3QgbmFtZXMgdGhhdCBhbHJlYWR5IGhhdmUKKwlvbmUuCisKKy0tc3ltYm9saWM6OgorCVVzdWFsbHkgdGhlIG9iamVjdCBuYW1lcyBhcmUgb3V0cHV0IGluIFNIQTEgZm9ybSAod2l0aAorCXBvc3NpYmxlICd7Y2FyZXR9JyBwcmVmaXgpOyB0aGlzIG9wdGlvbiBtYWtlcyB0aGVtIG91dHB1dCBpbiBhCisJZm9ybSBhcyBjbG9zZSB0byB0aGUgb3JpZ2luYWwgaW5wdXQgYXMgcG9zc2libGUuCisKKy0tc3ltYm9saWMtZnVsbC1uYW1lOjoKKwlUaGlzIGlzIHNpbWlsYXIgdG8gXC0tc3ltYm9saWMsIGJ1dCBpdCBvbWl0cyBpbnB1dCB0aGF0CisJYXJlIG5vdCByZWZzIChpLmUuIGJyYW5jaCBvciB0YWcgbmFtZXM7IG9yIG1vcmUKKwlleHBsaWNpdGx5IGRpc2FtYmlndWF0aW5nICJoZWFkcy9tYXN0ZXIiIGZvcm0sIHdoZW4geW91CisJd2FudCB0byBuYW1lIHRoZSAibWFzdGVyIiBicmFuY2ggd2hlbiB0aGVyZSBpcyBhbgorCXVuZm9ydHVuYXRlbHkgbmFtZWQgdGFnICJtYXN0ZXIiKSwgYW5kIHNob3cgdGhlbSBhcyBmdWxsCisJcmVmbmFtZXMgKGUuZy4gInJlZnMvaGVhZHMvbWFzdGVyIikuCisKKy0tYWJicmV2LXJlZls9KHN0cmljdHxsb29zZSldOjoKKwlBIG5vbi1hbWJpZ3VvdXMgc2hvcnQgbmFtZSBvZiB0aGUgb2JqZWN0cyBuYW1lLgorCVRoZSBvcHRpb24gY29yZS53YXJuQW1iaWd1b3VzUmVmcyBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgc3RyaWN0CisJYWJicmV2aWF0aW9uIG1vZGUuCisKKy0tZGlzYW1iaWd1YXRlPTxwcmVmaXg+OjoKKwlTaG93IGV2ZXJ5IG9iamVjdCB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIHRoZSBnaXZlbiBwcmVmaXguCisJVGhlIDxwcmVmaXg+IG11c3QgYmUgYXQgbGVhc3QgNCBoZXhhZGVjaW1hbCBkaWdpdHMgbG9uZyB0bworCWF2b2lkIGxpc3RpbmcgZWFjaCBhbmQgZXZlcnkgb2JqZWN0IGluIHRoZSByZXBvc2l0b3J5IGJ5CisJbWlzdGFrZS4KKworLS1hbGw6OgorCVNob3cgYWxsIHJlZnMgZm91bmQgaW4gYHJlZnMvYC4KKworLS1icmFuY2hlc1s9cGF0dGVybl06OgorLS10YWdzWz1wYXR0ZXJuXTo6CistLXJlbW90ZXNbPXBhdHRlcm5dOjoKKwlTaG93IGFsbCBicmFuY2hlcywgdGFncywgb3IgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLAorCXJlc3BlY3RpdmVseSAoaS5lLiwgcmVmcyBmb3VuZCBpbiBgcmVmcy9oZWFkc2AsCisJYHJlZnMvdGFnc2AsIG9yIGByZWZzL3JlbW90ZXNgLCByZXNwZWN0aXZlbHkpLgorKworSWYgYSBgcGF0dGVybmAgaXMgZ2l2ZW4sIG9ubHkgcmVmcyBtYXRjaGluZyB0aGUgZ2l2ZW4gc2hlbGwgZ2xvYiBhcmUKK3Nob3duLiAgSWYgdGhlIHBhdHRlcm4gZG9lcyBub3QgY29udGFpbiBhIGdsb2JiaW5nIGNoYXJhY3RlciAoYD9gLAorYCpgLCBvciBgW2ApLCBpdCBpcyB0dXJuZWQgaW50byBhIHByZWZpeCBtYXRjaCBieSBhcHBlbmRpbmcgYC8qYC4KKworLS1nbG9iPXBhdHRlcm46OgorCVNob3cgYWxsIHJlZnMgbWF0Y2hpbmcgdGhlIHNoZWxsIGdsb2IgcGF0dGVybiBgcGF0dGVybmAuIElmCisJdGhlIHBhdHRlcm4gZG9lcyBub3Qgc3RhcnQgd2l0aCBgcmVmcy9gLCB0aGlzIGlzIGF1dG9tYXRpY2FsbHkKKwlwcmVwZW5kZWQuICBJZiB0aGUgcGF0dGVybiBkb2VzIG5vdCBjb250YWluIGEgZ2xvYmJpbmcKKwljaGFyYWN0ZXIgKGA/YCwgYCpgLCBvciBgW2ApLCBpdCBpcyB0dXJuZWQgaW50byBhIHByZWZpeAorCW1hdGNoIGJ5IGFwcGVuZGluZyBgLypgLgorCistLXNob3ctdG9wbGV2ZWw6OgorCVNob3cgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisKKy0tc2hvdy1wcmVmaXg6OgorCVdoZW4gdGhlIGNvbW1hbmQgaXMgaW52b2tlZCBmcm9tIGEgc3ViZGlyZWN0b3J5LCBzaG93IHRoZQorCXBhdGggb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSB0b3AtbGV2ZWwKKwlkaXJlY3RvcnkuCisKKy0tc2hvdy1jZHVwOjoKKwlXaGVuIHRoZSBjb21tYW5kIGlzIGludm9rZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSwgc2hvdyB0aGUKKwlwYXRoIG9mIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50CisJZGlyZWN0b3J5ICh0eXBpY2FsbHkgYSBzZXF1ZW5jZSBvZiAiLi4vIiwgb3IgYW4gZW1wdHkgc3RyaW5nKS4KKworLS1naXQtZGlyOjoKKwlTaG93IGAkR0lUX0RJUmAgaWYgZGVmaW5lZC4gT3RoZXJ3aXNlIHNob3cgdGhlIHBhdGggdG8KKwl0aGUgLmdpdCBkaXJlY3RvcnkuIFRoZSBwYXRoIHNob3duLCB3aGVuIHJlbGF0aXZlLCBpcworCXJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorKworSWYgYCRHSVRfRElSYCBpcyBub3QgZGVmaW5lZCBhbmQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitpcyBub3QgZGV0ZWN0ZWQgdG8gbGllIGluIGEgZ2l0IHJlcG9zaXRvcnkgb3Igd29yayB0cmVlCitwcmludCBhIG1lc3NhZ2UgdG8gc3RkZXJyIGFuZCBleGl0IHdpdGggbm9uemVybyBzdGF0dXMuCisKKy0taXMtaW5zaWRlLWdpdC1kaXI6OgorCVdoZW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgYmVsb3cgdGhlIHJlcG9zaXRvcnkKKwlkaXJlY3RvcnkgcHJpbnQgInRydWUiLCBvdGhlcndpc2UgImZhbHNlIi4KKworLS1pcy1pbnNpZGUtd29yay10cmVlOjoKKwlXaGVuIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIGluc2lkZSB0aGUgd29yayB0cmVlIG9mIHRoZQorCXJlcG9zaXRvcnkgcHJpbnQgInRydWUiLCBvdGhlcndpc2UgImZhbHNlIi4KKworLS1pcy1iYXJlLXJlcG9zaXRvcnk6OgorCVdoZW4gdGhlIHJlcG9zaXRvcnkgaXMgYmFyZSBwcmludCAidHJ1ZSIsIG90aGVyd2lzZSAiZmFsc2UiLgorCistLWxvY2FsLWVudi12YXJzOjoKKwlMaXN0IHRoZSBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhcmUgbG9jYWwgdG8gdGhlCisJcmVwb3NpdG9yeSAoZS5nLiBHSVRfRElSIG9yIEdJVF9XT1JLX1RSRUUsIGJ1dCBub3QgR0lUX0VESVRPUikuCisJT25seSB0aGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxlcyBhcmUgbGlzdGVkLCBub3QgdGhlaXIgdmFsdWUsCisJZXZlbiBpZiB0aGV5IGFyZSBzZXQuCisKKy0tc2hvcnQ6OgorLS1zaG9ydD1udW1iZXI6OgorCUluc3RlYWQgb2Ygb3V0cHV0dGluZyB0aGUgZnVsbCBTSEExIHZhbHVlcyBvZiBvYmplY3QgbmFtZXMgdHJ5IHRvCisJYWJicmV2aWF0ZSB0aGVtIHRvIGEgc2hvcnRlciB1bmlxdWUgbmFtZS4gV2hlbiBubyBsZW5ndGggaXMgc3BlY2lmaWVkCisJNyBpcyB1c2VkLiBUaGUgbWluaW11bSBsZW5ndGggaXMgNC4KKworLS1zaW5jZT1kYXRlc3RyaW5nOjoKKy0tYWZ0ZXI9ZGF0ZXN0cmluZzo6CisJUGFyc2UgdGhlIGRhdGUgc3RyaW5nLCBhbmQgb3V0cHV0IHRoZSBjb3JyZXNwb25kaW5nCisJLS1tYXgtYWdlPSBwYXJhbWV0ZXIgZm9yICdnaXQgcmV2LWxpc3QnLgorCistLXVudGlsPWRhdGVzdHJpbmc6OgorLS1iZWZvcmU9ZGF0ZXN0cmluZzo6CisJUGFyc2UgdGhlIGRhdGUgc3RyaW5nLCBhbmQgb3V0cHV0IHRoZSBjb3JyZXNwb25kaW5nCisJLS1taW4tYWdlPSBwYXJhbWV0ZXIgZm9yICdnaXQgcmV2LWxpc3QnLgorCis8YXJncz4uLi46OgorCUZsYWdzIGFuZCBwYXJhbWV0ZXJzIHRvIGJlIHBhcnNlZC4KKworLS1yZXNvbHZlLWdpdC1kaXIgPHBhdGg+OjoKKwlDaGVjayBpZiA8cGF0aD4gaXMgYSB2YWxpZCBnaXQtZGlyIG9yIGEgZ2l0LWZpbGUgcG9pbnRpbmcgdG8gYSB2YWxpZAorCWdpdC1kaXIuIElmIDxwYXRoPiBpcyBhIHZhbGlkIGdpdC1kaXIgdGhlIHJlc29sdmVkIHBhdGggdG8gZ2l0LWRpciB3aWxsCisJYmUgcHJpbnRlZC4KKworaW5jbHVkZTo6cmV2aXNpb25zLnR4dFtdCisKK1BBUlNFT1BUCistLS0tLS0tLQorCitJbiBgLS1wYXJzZW9wdGAgbW9kZSwgJ2dpdCByZXYtcGFyc2UnIGhlbHBzIG1hc3NhZ2luZyBvcHRpb25zIHRvIGJyaW5nIHRvIHNoZWxsCitzY3JpcHRzIHRoZSBzYW1lIGZhY2lsaXRpZXMgQyBidWlsdGlucyBoYXZlLiBJdCB3b3JrcyBhcyBhbiBvcHRpb24gbm9ybWFsaXplcgorKGUuZy4gc3BsaXRzIHNpbmdsZSBzd2l0Y2hlcyBhZ2dyZWdhdGUgdmFsdWVzKSwgYSBiaXQgbGlrZSBgZ2V0b3B0KDEpYCBkb2VzLgorCitJdCB0YWtlcyBvbiB0aGUgc3RhbmRhcmQgaW5wdXQgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIG9wdGlvbnMgdG8gcGFyc2UgYW5kCit1bmRlcnN0YW5kLCBhbmQgZWNob2VzIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQgYSBzdHJpbmcgc3VpdGFibGUgZm9yIGBzaCgxKWAgYGV2YWxgCit0byByZXBsYWNlIHRoZSBhcmd1bWVudHMgd2l0aCBub3JtYWxpemVkIG9uZXMuICBJbiBjYXNlIG9mIGVycm9yLCBpdCBvdXRwdXRzCit1c2FnZSBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLCBhbmQgZXhpdHMgd2l0aCBjb2RlIDEyOS4KKworTm90ZTogTWFrZSBzdXJlIHlvdSBxdW90ZSB0aGUgcmVzdWx0IHdoZW4gcGFzc2luZyBpdCB0byBgZXZhbGAuICBTZWUKK2JlbG93IGZvciBhbiBleGFtcGxlLgorCitJbnB1dCBGb3JtYXQKK35+fn5+fn5+fn5+fgorCisnZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0JyBpbnB1dCBmb3JtYXQgaXMgZnVsbHkgdGV4dCBiYXNlZC4gSXQgaGFzIHR3byBwYXJ0cywKK3NlcGFyYXRlZCBieSBhIGxpbmUgdGhhdCBjb250YWlucyBvbmx5IGAtLWAuIFRoZSBsaW5lcyBiZWZvcmUgdGhlIHNlcGFyYXRvcgorKHNob3VsZCBiZSBtb3JlIHRoYW4gb25lKSBhcmUgdXNlZCBmb3IgdGhlIHVzYWdlLgorVGhlIGxpbmVzIGFmdGVyIHRoZSBzZXBhcmF0b3IgZGVzY3JpYmUgdGhlIG9wdGlvbnMuCisKK0VhY2ggbGluZSBvZiBvcHRpb25zIGhhcyB0aGlzIGZvcm1hdDoKKworLS0tLS0tLS0tLS0tCis8b3B0X3NwZWM+PGZsYWdzPiogU1ArIGhlbHAgTEYKKy0tLS0tLS0tLS0tLQorCitgPG9wdF9zcGVjPmA6OgorCWl0cyBmb3JtYXQgaXMgdGhlIHNob3J0IG9wdGlvbiBjaGFyYWN0ZXIsIHRoZW4gdGhlIGxvbmcgb3B0aW9uIG5hbWUKKwlzZXBhcmF0ZWQgYnkgYSBjb21tYS4gQm90aCBwYXJ0cyBhcmUgbm90IHJlcXVpcmVkLCB0aG91Z2ggYXQgbGVhc3Qgb25lCisJaXMgbmVjZXNzYXJ5LiBgaCxoZWxwYCwgYGRyeS1ydW5gIGFuZCBgZmAgYXJlIGFsbCB0aHJlZSBjb3JyZWN0CisJYDxvcHRfc3BlYz5gLgorCitgPGZsYWdzPmA6OgorCWA8ZmxhZ3M+YCBhcmUgb2YgYCpgLCBgPWAsIGA/YCBvciBgIWAuCisJKiBVc2UgYD1gIGlmIHRoZSBvcHRpb24gdGFrZXMgYW4gYXJndW1lbnQuCisKKwkqIFVzZSBgP2AgdG8gbWVhbiB0aGF0IHRoZSBvcHRpb24gaXMgb3B0aW9uYWwgKHRob3VnaCBpdHMgdXNlIGlzIGRpc2NvdXJhZ2VkKS4KKworCSogVXNlIGAqYCB0byBtZWFuIHRoYXQgdGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHVzYWdlCisJICBnZW5lcmF0ZWQgZm9yIHRoZSBgLWhgIGFyZ3VtZW50LiBJdCdzIHNob3duIGZvciBgLS1oZWxwLWFsbGAgYXMKKwkgIGRvY3VtZW50ZWQgaW4gbGlua2dpdDpnaXRjbGlbN10uCisKKwkqIFVzZSBgIWAgdG8gbm90IG1ha2UgdGhlIGNvcnJlc3BvbmRpbmcgbmVnYXRlZCBsb25nIG9wdGlvbiBhdmFpbGFibGUuCisKK1RoZSByZW1haW5kZXIgb2YgdGhlIGxpbmUsIGFmdGVyIHN0cmlwcGluZyB0aGUgc3BhY2VzLCBpcyB1c2VkCithcyB0aGUgaGVscCBhc3NvY2lhdGVkIHRvIHRoZSBvcHRpb24uCisKK0JsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLCBhbmQgbGluZXMgdGhhdCBkb24ndCBtYXRjaCB0aGlzIHNwZWNpZmljYXRpb24gYXJlIHVzZWQKK2FzIG9wdGlvbiBncm91cCBoZWFkZXJzIChzdGFydCB0aGUgbGluZSB3aXRoIGEgc3BhY2UgdG8gY3JlYXRlIHN1Y2gKK2xpbmVzIG9uIHB1cnBvc2UpLgorCitFeGFtcGxlCit+fn5+fn5+CisKKy0tLS0tLS0tLS0tLQorT1BUU19TUEVDPSJcCitzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgorCitzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKKy0tCitoLGhlbHAgICAgc2hvdyB0aGUgaGVscAorCitmb28gICAgICAgc29tZSBuaWZ0eSBvcHRpb24gLS1mb28KK2Jhcj0gICAgICBzb21lIGNvb2wgb3B0aW9uIC0tYmFyIHdpdGggYW4gYXJndW1lbnQKKworICBBbiBvcHRpb24gZ3JvdXAgSGVhZGVyCitDPyAgICAgICAgb3B0aW9uIEMgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudCIKKworZXZhbCAiJChlY2hvICIkT1BUU19TUEVDIiB8IGdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAiJEAiIHx8IGVjaG8gZXhpdCAkPykiCistLS0tLS0tLS0tLS0KKworU1EtUVVPVEUKKy0tLS0tLS0tCisKK0luIGAtLXNxLXF1b3RlYCBtb2RlLCAnZ2l0IHJldi1wYXJzZScgZWNob2VzIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQgYQorc2luZ2xlIGxpbmUgc3VpdGFibGUgZm9yIGBzaCgxKWAgYGV2YWxgLiBUaGlzIGxpbmUgaXMgbWFkZSBieQorbm9ybWFsaXppbmcgdGhlIGFyZ3VtZW50cyBmb2xsb3dpbmcgYC0tc3EtcXVvdGVgLiBOb3RoaW5nIG90aGVyIHRoYW4KK3F1b3RpbmcgdGhlIGFyZ3VtZW50cyBpcyBkb25lLgorCitJZiB5b3Ugd2FudCBjb21tYW5kIGlucHV0IHRvIHN0aWxsIGJlIGludGVycHJldGVkIGFzIHVzdWFsIGJ5CisnZ2l0IHJldi1wYXJzZScgYmVmb3JlIHRoZSBvdXRwdXQgaXMgc2hlbGwgcXVvdGVkLCBzZWUgdGhlIGAtLXNxYAorb3B0aW9uLgorCitFeGFtcGxlCit+fn5+fn5+CisKKy0tLS0tLS0tLS0tLQorJCBjYXQgPnlvdXItZ2l0LXNjcmlwdC5zaCA8PFxFT0YKKyMhL2Jpbi9zaAorYXJncz0kKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJEAiKSAgICMgcXVvdGUgdXNlci1zdXBwbGllZCBhcmd1bWVudHMKK2NvbW1hbmQ9ImdpdCBmcm90eiAtbjI0ICRhcmdzIiAgICAgICAgICAjIGFuZCB1c2UgaXQgaW5zaWRlIGEgaGFuZGNyYWZ0ZWQKKwkJCQkJIyBjb21tYW5kIGxpbmUKK2V2YWwgIiRjb21tYW5kIgorRU9GCisKKyQgc2ggeW91ci1naXQtc2NyaXB0LnNoICJhIGInYyIKKy0tLS0tLS0tLS0tLQorCitFWEFNUExFUworLS0tLS0tLS0KKworKiBQcmludCB0aGUgb2JqZWN0IG5hbWUgb2YgdGhlIGN1cnJlbnQgY29tbWl0OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRAorLS0tLS0tLS0tLS0tCisKKyogUHJpbnQgdGhlIGNvbW1pdCBvYmplY3QgbmFtZSBmcm9tIHRoZSByZXZpc2lvbiBpbiB0aGUgJFJFViBzaGVsbCB2YXJpYWJsZToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRSRVYKKy0tLS0tLS0tLS0tLQorKworVGhpcyB3aWxsIGVycm9yIG91dCBpZiAkUkVWIGlzIGVtcHR5IG9yIG5vdCBhIHZhbGlkIHJldmlzaW9uLgorCisqIFNhbWUgYXMgYWJvdmU6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJldi1wYXJzZSAtLWRlZmF1bHQgbWFzdGVyIC0tdmVyaWZ5ICRSRVYKKy0tLS0tLS0tLS0tLQorKworYnV0IGlmICRSRVYgaXMgZW1wdHksIHRoZSBjb21taXQgb2JqZWN0IG5hbWUgZnJvbSBtYXN0ZXIgd2lsbCBiZSBwcmludGVkLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXZlcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTUyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXZlcnQudHh0CkBAIC0wLDAgKzEsMTIyIEBACitnaXQtcmV2ZXJ0KDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXZlcnQgLSBSZXZlcnQgc29tZSBleGlzdGluZyBjb21taXRzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXZlcnQnIFstLWVkaXQgfCAtLW5vLWVkaXRdIFstbl0gWy1tIHBhcmVudC1udW1iZXJdIFstc10gPGNvbW1pdD4uLi4KKydnaXQgcmV2ZXJ0JyAtLWNvbnRpbnVlCisnZ2l0IHJldmVydCcgLS1xdWl0CisnZ2l0IHJldmVydCcgLS1hYm9ydAorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l2ZW4gb25lIG9yIG1vcmUgZXhpc3RpbmcgY29tbWl0cywgcmV2ZXJ0IHRoZSBjaGFuZ2VzIHRoYXQgdGhlCityZWxhdGVkIHBhdGNoZXMgaW50cm9kdWNlLCBhbmQgcmVjb3JkIHNvbWUgbmV3IGNvbW1pdHMgdGhhdCByZWNvcmQKK3RoZW0uICBUaGlzIHJlcXVpcmVzIHlvdXIgd29ya2luZyB0cmVlIHRvIGJlIGNsZWFuIChubyBtb2RpZmljYXRpb25zCitmcm9tIHRoZSBIRUFEIGNvbW1pdCkuCisKK05vdGU6ICdnaXQgcmV2ZXJ0JyBpcyB1c2VkIHRvIHJlY29yZCBzb21lIG5ldyBjb21taXRzIHRvIHJldmVyc2UgdGhlCitlZmZlY3Qgb2Ygc29tZSBlYXJsaWVyIGNvbW1pdHMgKG9mdGVuIG9ubHkgYSBmYXVsdHkgb25lKS4gIElmIHlvdSB3YW50IHRvCit0aHJvdyBhd2F5IGFsbCB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnksIHlvdQorc2hvdWxkIHNlZSBsaW5rZ2l0OmdpdC1yZXNldFsxXSwgcGFydGljdWxhcmx5IHRoZSAnLS1oYXJkJyBvcHRpb24uICBJZgoreW91IHdhbnQgdG8gZXh0cmFjdCBzcGVjaWZpYyBmaWxlcyBhcyB0aGV5IHdlcmUgaW4gYW5vdGhlciBjb21taXQsIHlvdQorc2hvdWxkIHNlZSBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwgc3BlY2lmaWNhbGx5IHRoZSBgZ2l0IGNoZWNrb3V0Cis8Y29tbWl0PiAtLSA8ZmlsZW5hbWU+YCBzeW50YXguICBUYWtlIGNhcmUgd2l0aCB0aGVzZSBhbHRlcm5hdGl2ZXMgYXMKK2JvdGggd2lsbCBkaXNjYXJkIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorPGNvbW1pdD4uLi46OgorCUNvbW1pdHMgdG8gcmV2ZXJ0LgorCUZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIGNvbW1pdCBuYW1lcywgc2VlCisJbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisJU2V0cyBvZiBjb21taXRzIGNhbiBhbHNvIGJlIGdpdmVuIGJ1dCBubyB0cmF2ZXJzYWwgaXMgZG9uZSBieQorCWRlZmF1bHQsIHNlZSBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSBhbmQgaXRzICctLW5vLXdhbGsnCisJb3B0aW9uLgorCistZTo6CistLWVkaXQ6OgorCVdpdGggdGhpcyBvcHRpb24sICdnaXQgcmV2ZXJ0JyB3aWxsIGxldCB5b3UgZWRpdCB0aGUgY29tbWl0CisJbWVzc2FnZSBwcmlvciB0byBjb21taXR0aW5nIHRoZSByZXZlcnQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYKKwl5b3UgcnVuIHRoZSBjb21tYW5kIGZyb20gYSB0ZXJtaW5hbC4KKworLW0gcGFyZW50LW51bWJlcjo6CistLW1haW5saW5lIHBhcmVudC1udW1iZXI6OgorCVVzdWFsbHkgeW91IGNhbm5vdCByZXZlcnQgYSBtZXJnZSBiZWNhdXNlIHlvdSBkbyBub3Qga25vdyB3aGljaAorCXNpZGUgb2YgdGhlIG1lcmdlIHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBtYWlubGluZS4gIFRoaXMKKwlvcHRpb24gc3BlY2lmaWVzIHRoZSBwYXJlbnQgbnVtYmVyIChzdGFydGluZyBmcm9tIDEpIG9mCisJdGhlIG1haW5saW5lIGFuZCBhbGxvd3MgcmV2ZXJ0IHRvIHJldmVyc2UgdGhlIGNoYW5nZQorCXJlbGF0aXZlIHRvIHRoZSBzcGVjaWZpZWQgcGFyZW50LgorKworUmV2ZXJ0aW5nIGEgbWVyZ2UgY29tbWl0IGRlY2xhcmVzIHRoYXQgeW91IHdpbGwgbmV2ZXIgd2FudCB0aGUgdHJlZSBjaGFuZ2VzCiticm91Z2h0IGluIGJ5IHRoZSBtZXJnZS4gIEFzIGEgcmVzdWx0LCBsYXRlciBtZXJnZXMgd2lsbCBvbmx5IGJyaW5nIGluIHRyZWUKK2NoYW5nZXMgaW50cm9kdWNlZCBieSBjb21taXRzIHRoYXQgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlIHByZXZpb3VzbHkKK3JldmVydGVkIG1lcmdlLiAgVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50LgorKworU2VlIHRoZSBsaW5rOmhvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS50eHRbcmV2ZXJ0LWEtZmF1bHR5LW1lcmdlIEhvdy1Ub10gZm9yCittb3JlIGRldGFpbHMuCisKKy0tbm8tZWRpdDo6CisJV2l0aCB0aGlzIG9wdGlvbiwgJ2dpdCByZXZlcnQnIHdpbGwgbm90IHN0YXJ0IHRoZSBjb21taXQKKwltZXNzYWdlIGVkaXRvci4KKworLW46OgorLS1uby1jb21taXQ6OgorCVVzdWFsbHkgdGhlIGNvbW1hbmQgYXV0b21hdGljYWxseSBjcmVhdGVzIHNvbWUgY29tbWl0cyB3aXRoCisJY29tbWl0IGxvZyBtZXNzYWdlcyBzdGF0aW5nIHdoaWNoIGNvbW1pdHMgd2VyZQorCXJldmVydGVkLiAgVGhpcyBmbGFnIGFwcGxpZXMgdGhlIGNoYW5nZXMgbmVjZXNzYXJ5CisJdG8gcmV2ZXJ0IHRoZSBuYW1lZCBjb21taXRzIHRvIHlvdXIgd29ya2luZyB0cmVlCisJYW5kIHRoZSBpbmRleCwgYnV0IGRvZXMgbm90IG1ha2UgdGhlIGNvbW1pdHMuICBJbiBhZGRpdGlvbiwKKwl3aGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsIHlvdXIgaW5kZXggZG9lcyBub3QgaGF2ZSB0byBtYXRjaAorCXRoZSBIRUFEIGNvbW1pdC4gIFRoZSByZXZlcnQgaXMgZG9uZSBhZ2FpbnN0IHRoZQorCWJlZ2lubmluZyBzdGF0ZSBvZiB5b3VyIGluZGV4LgorKworVGhpcyBpcyB1c2VmdWwgd2hlbiByZXZlcnRpbmcgbW9yZSB0aGFuIG9uZSBjb21taXRzJworZWZmZWN0IHRvIHlvdXIgaW5kZXggaW4gYSByb3cuCisKKy1zOjoKKy0tc2lnbm9mZjo6CisJQWRkIFNpZ25lZC1vZmYtYnkgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQgbWVzc2FnZS4KKworLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKwlVc2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5LiAgU2hvdWxkIG9ubHkgYmUgdXNlZCBvbmNlLgorCVNlZSB0aGUgTUVSR0UgU1RSQVRFR0lFUyBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdCisJZm9yIGRldGFpbHMuCisKKy1YPG9wdGlvbj46OgorLS1zdHJhdGVneS1vcHRpb249PG9wdGlvbj46OgorCVBhc3MgdGhlIG1lcmdlIHN0cmF0ZWd5LXNwZWNpZmljIG9wdGlvbiB0aHJvdWdoIHRvIHRoZQorCW1lcmdlIHN0cmF0ZWd5LiAgU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBkZXRhaWxzLgorCitTRVFVRU5DRVIgU1VCQ09NTUFORFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZTo6c2VxdWVuY2VyLnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorYGdpdCByZXZlcnQgSEVBRH4zYDo6CisKKwlSZXZlcnQgdGhlIGNoYW5nZXMgc3BlY2lmaWVkIGJ5IHRoZSBmb3VydGggbGFzdCBjb21taXQgaW4gSEVBRAorCWFuZCBjcmVhdGUgYSBuZXcgY29tbWl0IHdpdGggdGhlIHJldmVydGVkIGNoYW5nZXMuCisKK2BnaXQgcmV2ZXJ0IC1uIG1hc3Rlcn41Li5tYXN0ZXJ+MmA6OgorCisJUmV2ZXJ0IHRoZSBjaGFuZ2VzIGRvbmUgYnkgY29tbWl0cyBmcm9tIHRoZSBmaWZ0aCBsYXN0IGNvbW1pdAorCWluIG1hc3RlciAoaW5jbHVkZWQpIHRvIHRoZSB0aGlyZCBsYXN0IGNvbW1pdCBpbiBtYXN0ZXIKKwkoaW5jbHVkZWQpLCBidXQgZG8gbm90IGNyZWF0ZSBhbnkgY29tbWl0IHdpdGggdGhlIHJldmVydGVkCisJY2hhbmdlcy4gVGhlIHJldmVydCBvbmx5IG1vZGlmaWVzIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZQorCWluZGV4LgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNoZXJyeS1waWNrWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzE4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ybS50eHQKQEAgLTAsMCArMSwxNTggQEAKK2dpdC1ybSgxKQorPT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ybSAtIFJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBybScgWy1mIHwgLS1mb3JjZV0gWy1uXSBbLXJdIFstLWNhY2hlZF0gWy0taWdub3JlLXVubWF0Y2hdIFstLXF1aWV0XSBbLS1dIDxmaWxlPi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBpbmRleCwgb3IgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXguCitgZ2l0IHJtYCB3aWxsIG5vdCByZW1vdmUgYSBmaWxlIGZyb20ganVzdCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LgorKFRoZXJlIGlzIG5vIG9wdGlvbiB0byByZW1vdmUgYSBmaWxlIG9ubHkgZnJvbSB0aGUgd29ya2luZyB0cmVlCithbmQgeWV0IGtlZXAgaXQgaW4gdGhlIGluZGV4OyB1c2UgYC9iaW4vcm1gIGlmIHlvdSB3YW50IHRvIGRvIHRoYXQuKQorVGhlIGZpbGVzIGJlaW5nIHJlbW92ZWQgaGF2ZSB0byBiZSBpZGVudGljYWwgdG8gdGhlIHRpcCBvZiB0aGUgYnJhbmNoLAorYW5kIG5vIHVwZGF0ZXMgdG8gdGhlaXIgY29udGVudHMgY2FuIGJlIHN0YWdlZCBpbiB0aGUgaW5kZXgsCit0aG91Z2ggdGhhdCBkZWZhdWx0IGJlaGF2aW9yIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGAtZmAgb3B0aW9uLgorV2hlbiBgLS1jYWNoZWRgIGlzIGdpdmVuLCB0aGUgc3RhZ2VkIGNvbnRlbnQgaGFzIHRvCittYXRjaCBlaXRoZXIgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIG9yIHRoZSBmaWxlIG9uIGRpc2ssCithbGxvd2luZyB0aGUgZmlsZSB0byBiZSByZW1vdmVkIGZyb20ganVzdCB0aGUgaW5kZXguCisKKworT1BUSU9OUworLS0tLS0tLQorPGZpbGU+Li4uOjoKKwlGaWxlcyB0byByZW1vdmUuICBGaWxlZ2xvYnMgKGUuZy4gYCouY2ApIGNhbiBiZSBnaXZlbiB0bworCXJlbW92ZSBhbGwgbWF0Y2hpbmcgZmlsZXMuICBJZiB5b3Ugd2FudCBnaXQgdG8gZXhwYW5kCisJZmlsZSBnbG9iIGNoYXJhY3RlcnMsIHlvdSBtYXkgbmVlZCB0byBzaGVsbC1lc2NhcGUgdGhlbS4KKwlBIGxlYWRpbmcgZGlyZWN0b3J5IG5hbWUKKwkoZS5nLiBgZGlyYCB0byByZW1vdmUgYGRpci9maWxlMWAgYW5kIGBkaXIvZmlsZTJgKSBjYW4gYmUKKwlnaXZlbiB0byByZW1vdmUgYWxsIGZpbGVzIGluIHRoZSBkaXJlY3RvcnksIGFuZCByZWN1cnNpdmVseQorCWFsbCBzdWItZGlyZWN0b3JpZXMsCisJYnV0IHRoaXMgcmVxdWlyZXMgdGhlIGAtcmAgb3B0aW9uIHRvIGJlIGV4cGxpY2l0bHkgZ2l2ZW4uCisKKy1mOjoKKy0tZm9yY2U6OgorCU92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrLgorCistbjo6CistLWRyeS1ydW46OgorCURvbid0IGFjdHVhbGx5IHJlbW92ZSBhbnkgZmlsZShzKS4gIEluc3RlYWQsIGp1c3Qgc2hvdworCWlmIHRoZXkgZXhpc3QgaW4gdGhlIGluZGV4IGFuZCB3b3VsZCBvdGhlcndpc2UgYmUgcmVtb3ZlZAorCWJ5IHRoZSBjb21tYW5kLgorCistcjo6CisgICAgICAgIEFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIHdoZW4gYSBsZWFkaW5nIGRpcmVjdG9yeSBuYW1lIGlzCisgICAgICAgIGdpdmVuLgorCitcLS06OgorCVRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20KKwl0aGUgbGlzdCBvZiBmaWxlcywgKHVzZWZ1bCB3aGVuIGZpbGVuYW1lcyBtaWdodCBiZSBtaXN0YWtlbgorCWZvciBjb21tYW5kLWxpbmUgb3B0aW9ucykuCisKKy0tY2FjaGVkOjoKKwlVc2UgdGhpcyBvcHRpb24gdG8gdW5zdGFnZSBhbmQgcmVtb3ZlIHBhdGhzIG9ubHkgZnJvbSB0aGUgaW5kZXguCisJV29ya2luZyB0cmVlIGZpbGVzLCB3aGV0aGVyIG1vZGlmaWVkIG9yIG5vdCwgd2lsbCBiZQorCWxlZnQgYWxvbmUuCisKKy0taWdub3JlLXVubWF0Y2g6OgorCUV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm8gZmlsZXMgbWF0Y2hlZC4KKworLXE6OgorLS1xdWlldDo6CisJYGdpdCBybWAgbm9ybWFsbHkgb3V0cHV0cyBvbmUgbGluZSAoaW4gdGhlIGZvcm0gb2YgYW4gYHJtYCBjb21tYW5kKQorCWZvciBlYWNoIGZpbGUgcmVtb3ZlZC4gVGhpcyBvcHRpb24gc3VwcHJlc3NlcyB0aGF0IG91dHB1dC4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1RoZSA8ZmlsZT4gbGlzdCBnaXZlbiB0byB0aGUgY29tbWFuZCBjYW4gYmUgZXhhY3QgcGF0aG5hbWVzLAorZmlsZSBnbG9iIHBhdHRlcm5zLCBvciBsZWFkaW5nIGRpcmVjdG9yeSBuYW1lcy4gIFRoZSBjb21tYW5kCityZW1vdmVzIG9ubHkgdGhlIHBhdGhzIHRoYXQgYXJlIGtub3duIHRvIGdpdC4gIEdpdmluZyB0aGUgbmFtZSBvZgorYSBmaWxlIHRoYXQgeW91IGhhdmUgbm90IHRvbGQgZ2l0IGFib3V0IGRvZXMgbm90IHJlbW92ZSB0aGF0IGZpbGUuCisKK0ZpbGUgZ2xvYmJpbmcgbWF0Y2hlcyBhY3Jvc3MgZGlyZWN0b3J5IGJvdW5kYXJpZXMuICBUaHVzLCBnaXZlbgordHdvIGRpcmVjdG9yaWVzIGBkYCBhbmQgYGQyYCwgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4KK3VzaW5nIGBnaXQgcm0gJ2QqJ2AgYW5kIGBnaXQgcm0gJ2QvKidgLCBhcyB0aGUgZm9ybWVyIHdpbGwKK2Fsc28gcmVtb3ZlIGFsbCBvZiBkaXJlY3RvcnkgYGQyYC4KKworUkVNT1ZJTkcgRklMRVMgVEhBVCBIQVZFIERJU0FQUEVBUkVEIEZST00gVEhFIEZJTEVTWVNURU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBubyBvcHRpb24gZm9yIGBnaXQgcm1gIHRvIHJlbW92ZSBmcm9tIHRoZSBpbmRleCBvbmx5Cit0aGUgcGF0aHMgdGhhdCBoYXZlIGRpc2FwcGVhcmVkIGZyb20gdGhlIGZpbGVzeXN0ZW0uIEhvd2V2ZXIsCitkZXBlbmRpbmcgb24gdGhlIHVzZSBjYXNlLCB0aGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRoYXQgY2FuIGJlCitkb25lLgorCitVc2luZyBgYGdpdCBjb21taXQgLWEnJworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0lmIHlvdSBpbnRlbmQgdGhhdCB5b3VyIG5leHQgY29tbWl0IHNob3VsZCByZWNvcmQgYWxsIG1vZGlmaWNhdGlvbnMKK29mIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgcmVjb3JkIGFsbCByZW1vdmFscyBvZgorZmlsZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUgd2l0aCBgcm1gCisoYXMgb3Bwb3NlZCB0byBgZ2l0IHJtYCksIHVzZSBgZ2l0IGNvbW1pdCAtYWAsIGFzIGl0IHdpbGwKK2F1dG9tYXRpY2FsbHkgbm90aWNlIGFuZCByZWNvcmQgYWxsIHJlbW92YWxzLiAgWW91IGNhbiBhbHNvIGhhdmUgYQorc2ltaWxhciBlZmZlY3Qgd2l0aG91dCBjb21taXR0aW5nIGJ5IHVzaW5nIGBnaXQgYWRkIC11YC4KKworVXNpbmcgYGBnaXQgYWRkIC1BJycKK35+fn5+fn5+fn5+fn5+fn5+fn5+CitXaGVuIGFjY2VwdGluZyBhIG5ldyBjb2RlIGRyb3AgZm9yIGEgdmVuZG9yIGJyYW5jaCwgeW91IHByb2JhYmx5Cit3YW50IHRvIHJlY29yZCBib3RoIHRoZSByZW1vdmFsIG9mIHBhdGhzIGFuZCBhZGRpdGlvbnMgb2YgbmV3IHBhdGhzCithcyB3ZWxsIGFzIG1vZGlmaWNhdGlvbnMgb2YgZXhpc3RpbmcgcGF0aHMuCisKK1R5cGljYWxseSB5b3Ugd291bGQgZmlyc3QgcmVtb3ZlIGFsbCB0cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcKK3RyZWUgdXNpbmcgdGhpcyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tCitnaXQgbHMtZmlsZXMgLXogfCB4YXJncyAtMCBybSAtZgorLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlbiB1bnRhciB0aGUgbmV3IGNvZGUgaW4gdGhlIHdvcmtpbmcgdHJlZS4gQWx0ZXJuYXRlbHkKK3lvdSBjb3VsZCAncnN5bmMnIHRoZSBjaGFuZ2VzIGludG8gdGhlIHdvcmtpbmcgdHJlZS4KKworQWZ0ZXIgdGhhdCwgdGhlIGVhc2llc3Qgd2F5IHRvIHJlY29yZCBhbGwgcmVtb3ZhbHMsIGFkZGl0aW9ucywgYW5kCittb2RpZmljYXRpb25zIGluIHRoZSB3b3JraW5nIHRyZWUgaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0KK2dpdCBhZGQgLUEKKy0tLS0tLS0tLS0tLS0tLS0KKworU2VlIGxpbmtnaXQ6Z2l0LWFkZFsxXS4KKworT3RoZXIgd2F5cworfn5+fn5+fn5+fgorSWYgYWxsIHlvdSByZWFsbHkgd2FudCB0byBkbyBpcyB0byByZW1vdmUgZnJvbSB0aGUgaW5kZXggdGhlIGZpbGVzCit0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudCBpbiB0aGUgd29ya2luZyB0cmVlIChwZXJoYXBzIGJlY2F1c2UKK3lvdXIgd29ya2luZyB0cmVlIGlzIGRpcnR5IHNvIHRoYXQgeW91IGNhbm5vdCB1c2UgYGdpdCBjb21taXQgLWFgKSwKK3VzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KK2dpdCBkaWZmIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9RCAteiB8IHhhcmdzIC0wIGdpdCBybSAtLWNhY2hlZAorLS0tLS0tLS0tLS0tLS0tLQorCitFWEFNUExFUworLS0tLS0tLS0KK2BnaXQgcm0gRG9jdW1lbnRhdGlvbi9cKi50eHRgOjoKKwlSZW1vdmVzIGFsbCBgKi50eHRgIGZpbGVzIGZyb20gdGhlIGluZGV4IHRoYXQgYXJlIHVuZGVyIHRoZQorCWBEb2N1bWVudGF0aW9uYCBkaXJlY3RvcnkgYW5kIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMuCisrCitOb3RlIHRoYXQgdGhlIGFzdGVyaXNrIGAqYCBpcyBxdW90ZWQgZnJvbSB0aGUgc2hlbGwgaW4gdGhpcworZXhhbXBsZTsgdGhpcyBsZXRzIGdpdCwgYW5kIG5vdCB0aGUgc2hlbGwsIGV4cGFuZCB0aGUgcGF0aG5hbWVzCitvZiBmaWxlcyBhbmQgc3ViZGlyZWN0b3JpZXMgdW5kZXIgdGhlIGBEb2N1bWVudGF0aW9uL2AgZGlyZWN0b3J5LgorCitgZ2l0IHJtIC1mIGdpdC0qLnNoYDo6CisJQmVjYXVzZSB0aGlzIGV4YW1wbGUgbGV0cyB0aGUgc2hlbGwgZXhwYW5kIHRoZSBhc3RlcmlzaworCShpLmUuIHlvdSBhcmUgbGlzdGluZyB0aGUgZmlsZXMgZXhwbGljaXRseSksIGl0CisJZG9lcyBub3QgcmVtb3ZlIGBzdWJkaXIvZ2l0LWZvby5zaGAuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtYWRkWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQxMTcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKQEAgLTAsMCArMSwzODUgQEAKK2dpdC1zZW5kLWVtYWlsKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2VuZC1lbWFpbCAtIFNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNlbmQtZW1haWwnIFtvcHRpb25zXSA8ZmlsZXxkaXJlY3Rvcnl8cmV2LWxpc3Qgb3B0aW9ucz4uLi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1Rha2VzIHRoZSBwYXRjaGVzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kIGVtYWlscyB0aGVtIG91dC4KK1BhdGNoZXMgY2FuIGJlIHNwZWNpZmllZCBhcyBmaWxlcywgZGlyZWN0b3JpZXMgKHdoaWNoIHdpbGwgc2VuZCBhbGwKK2ZpbGVzIGluIHRoZSBkaXJlY3RvcnkpLCBvciBkaXJlY3RseSBhcyBhIHJldmlzaW9uIGxpc3QuICBJbiB0aGUKK2xhc3QgY2FzZSwgYW55IGZvcm1hdCBhY2NlcHRlZCBieSBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gY2FuCitiZSBwYXNzZWQgdG8gZ2l0IHNlbmQtZW1haWwuCisKK1RoZSBoZWFkZXIgb2YgdGhlIGVtYWlsIGlzIGNvbmZpZ3VyYWJsZSBieSBjb21tYW5kIGxpbmUgb3B0aW9ucy4gIElmIG5vdAorc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSB1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgd2l0aCBhIFJlYWRMaW5lCitlbmFibGVkIGludGVyZmFjZSB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCisKK1RoZXJlIGFyZSB0d28gZm9ybWF0cyBhY2NlcHRlZCBmb3IgcGF0Y2ggZmlsZXM6CisKKzEuIG1ib3ggZm9ybWF0IGZpbGVzCisrCitUaGlzIGlzIHdoYXQgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIGdlbmVyYXRlcy4gIE1vc3QgaGVhZGVycyBhbmQgTUlNRQorZm9ybWF0dGluZyBhcmUgaWdub3JlZC4KKworMi4gVGhlIG9yaWdpbmFsIGZvcm1hdCB1c2VkIGJ5IEdyZWcgS3JvYWgtSGFydG1hbidzICdzZW5kX2xvdHNfb2ZfZW1haWwucGwnCitzY3JpcHQKKysKK1RoaXMgZm9ybWF0IGV4cGVjdHMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUgdG8gY29udGFpbiB0aGUgIkNjOiIgdmFsdWUKK2FuZCB0aGUgIlN1YmplY3Q6IiBvZiB0aGUgbWVzc2FnZSBhcyB0aGUgc2Vjb25kIGxpbmUuCisKKworT1BUSU9OUworLS0tLS0tLQorCitDb21wb3NpbmcKK35+fn5+fn5+fgorCistLWFubm90YXRlOjoKKwlSZXZpZXcgYW5kIGVkaXQgZWFjaCBwYXRjaCB5b3UncmUgYWJvdXQgdG8gc2VuZC4gU2VlIHRoZQorCUNPTkZJR1VSQVRJT04gc2VjdGlvbiBmb3IgJ3NlbmRlbWFpbC5tdWx0aWVkaXQnLgorCistLWJjYz08YWRkcmVzcz46OgorCVNwZWNpZnkgYSAiQmNjOiIgdmFsdWUgZm9yIGVhY2ggZW1haWwuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mCisJJ3NlbmRlbWFpbC5iY2MnLgorKworVGhlIC0tYmNjIG9wdGlvbiBtdXN0IGJlIHJlcGVhdGVkIGZvciBlYWNoIHVzZXIgeW91IHdhbnQgb24gdGhlIGJjYyBsaXN0LgorCistLWNjPTxhZGRyZXNzPjo6CisJU3BlY2lmeSBhIHN0YXJ0aW5nICJDYzoiIHZhbHVlIGZvciBlYWNoIGVtYWlsLgorCURlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuY2MnLgorKworVGhlIC0tY2Mgb3B0aW9uIG11c3QgYmUgcmVwZWF0ZWQgZm9yIGVhY2ggdXNlciB5b3Ugd2FudCBvbiB0aGUgY2MgbGlzdC4KKworLS1jb21wb3NlOjoKKwlJbnZva2UgYSB0ZXh0IGVkaXRvciAoc2VlIEdJVF9FRElUT1IgaW4gbGlua2dpdDpnaXQtdmFyWzFdKQorCXRvIGVkaXQgYW4gaW50cm9kdWN0b3J5IG1lc3NhZ2UgZm9yIHRoZSBwYXRjaCBzZXJpZXMuCisrCitXaGVuICctLWNvbXBvc2UnIGlzIHVzZWQsIGdpdCBzZW5kLWVtYWlsIHdpbGwgdXNlIHRoZSBGcm9tLCBTdWJqZWN0LCBhbmQKK0luLVJlcGx5LVRvIGhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSBtZXNzYWdlLiBJZiB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZQorKHdoYXQgeW91IHR5cGUgYWZ0ZXIgdGhlIGhlYWRlcnMgYW5kIGEgYmxhbmsgbGluZSkgb25seSBjb250YWlucyBibGFuaworKG9yIEdJVDogcHJlZml4ZWQpIGxpbmVzIHRoZSBzdW1tYXJ5IHdvbid0IGJlIHNlbnQsIGJ1dCBGcm9tLCBTdWJqZWN0LAorYW5kIEluLVJlcGx5LVRvIGhlYWRlcnMgd2lsbCBiZSB1c2VkIHVubGVzcyB0aGV5IGFyZSByZW1vdmVkLgorKworTWlzc2luZyBGcm9tIG9yIEluLVJlcGx5LVRvIGhlYWRlcnMgd2lsbCBiZSBwcm9tcHRlZCBmb3IuCisrCitTZWUgdGhlIENPTkZJR1VSQVRJT04gc2VjdGlvbiBmb3IgJ3NlbmRlbWFpbC5tdWx0aWVkaXQnLgorCistLWZyb209PGFkZHJlc3M+OjoKKwlTcGVjaWZ5IHRoZSBzZW5kZXIgb2YgdGhlIGVtYWlscy4gIElmIG5vdCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKKwl0aGUgdmFsdWUgb2YgdGhlICdzZW5kZW1haWwuZnJvbScgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdXNlZC4gIElmCisJbmVpdGhlciB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiBub3IgJ3NlbmRlbWFpbC5mcm9tJyBhcmUgc2V0LCB0aGVuIHRoZQorCXVzZXIgd2lsbCBiZSBwcm9tcHRlZCBmb3IgdGhlIHZhbHVlLiAgVGhlIGRlZmF1bHQgZm9yIHRoZSBwcm9tcHQgd2lsbCBiZQorCXRoZSB2YWx1ZSBvZiBHSVRfQVVUSE9SX0lERU5ULCBvciBHSVRfQ09NTUlUVEVSX0lERU5UIGlmIHRoYXQgaXMgbm90CisJc2V0LCBhcyByZXR1cm5lZCBieSAiZ2l0IHZhciAtbCIuCisKKy0taW4tcmVwbHktdG89PGlkZW50aWZpZXI+OjoKKwlNYWtlIHRoZSBmaXJzdCBtYWlsIChvciBhbGwgdGhlIG1haWxzIHdpdGggYC0tbm8tdGhyZWFkYCkgYXBwZWFyIGFzIGEKKwlyZXBseSB0byB0aGUgZ2l2ZW4gTWVzc2FnZS1JZCwgd2hpY2ggYXZvaWRzIGJyZWFraW5nIHRocmVhZHMgdG8KKwlwcm92aWRlIGEgbmV3IHBhdGNoIHNlcmllcy4KKwlUaGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGVtYWlscyB3aWxsIGJlIHNlbnQgYXMgcmVwbGllcyBhY2NvcmRpbmcgdG8KKwl0aGUgYC0tW25vXS1jaGFpbi1yZXBseS10b2Agc2V0dGluZy4KKysKK1NvIGZvciBleGFtcGxlIHdoZW4gYC0tdGhyZWFkYCBhbmQgYC0tbm8tY2hhaW4tcmVwbHktdG9gIGFyZSBzcGVjaWZpZWQsIHRoZQorc2Vjb25kIGFuZCBzdWJzZXF1ZW50IHBhdGNoZXMgd2lsbCBiZSByZXBsaWVzIHRvIHRoZSBmaXJzdCBvbmUgbGlrZSBpbiB0aGUKK2lsbHVzdHJhdGlvbiBiZWxvdyB3aGVyZSBgW1BBVENIIHYyIDAvM11gIGlzIGluIHJlcGx5IHRvIGBbUEFUQ0ggMC8yXWA6CisrCisgIFtQQVRDSCAwLzJdIEhlcmUgaXMgd2hhdCBJIGRpZC4uLgorICAgIFtQQVRDSCAxLzJdIENsZWFuIHVwIGFuZCB0ZXN0cworICAgIFtQQVRDSCAyLzJdIEltcGxlbWVudGF0aW9uCisgICAgW1BBVENIIHYyIDAvM10gSGVyZSBpcyBhIHJlcm9sbAorICAgICAgW1BBVENIIHYyIDEvM10gQ2xlYW4gdXAKKyAgICAgIFtQQVRDSCB2MiAyLzNdIE5ldyB0ZXN0cworICAgICAgW1BBVENIIHYyIDMvM10gSW1wbGVtZW50YXRpb24KKysKK09ubHkgbmVjZXNzYXJ5IGlmIC0tY29tcG9zZSBpcyBhbHNvIHNldC4gIElmIC0tY29tcG9zZQoraXMgbm90IHNldCwgdGhpcyB3aWxsIGJlIHByb21wdGVkIGZvci4KKworLS1zdWJqZWN0PTxzdHJpbmc+OjoKKwlTcGVjaWZ5IHRoZSBpbml0aWFsIHN1YmplY3Qgb2YgdGhlIGVtYWlsIHRocmVhZC4KKwlPbmx5IG5lY2Vzc2FyeSBpZiAtLWNvbXBvc2UgaXMgYWxzbyBzZXQuICBJZiAtLWNvbXBvc2UKKwlpcyBub3Qgc2V0LCB0aGlzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgorCistLXRvPTxhZGRyZXNzPjo6CisJU3BlY2lmeSB0aGUgcHJpbWFyeSByZWNpcGllbnQgb2YgdGhlIGVtYWlscyBnZW5lcmF0ZWQuIEdlbmVyYWxseSwgdGhpcworCXdpbGwgYmUgdGhlIHVwc3RyZWFtIG1haW50YWluZXIgb2YgdGhlIHByb2plY3QgaW52b2x2ZWQuIERlZmF1bHQgaXMgdGhlCisJdmFsdWUgb2YgdGhlICdzZW5kZW1haWwudG8nIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsCisJYW5kIC0tdG8tY21kIGlzIG5vdCBzcGVjaWZpZWQsIHRoaXMgd2lsbCBiZSBwcm9tcHRlZCBmb3IuCisrCitUaGUgLS10byBvcHRpb24gbXVzdCBiZSByZXBlYXRlZCBmb3IgZWFjaCB1c2VyIHlvdSB3YW50IG9uIHRoZSB0byBsaXN0LgorCistLThiaXQtZW5jb2Rpbmc9PGVuY29kaW5nPjo6CisJV2hlbiBlbmNvdW50ZXJpbmcgYSBub24tQVNDSUkgbWVzc2FnZSBvciBzdWJqZWN0IHRoYXQgZG9lcyBub3QKKwlkZWNsYXJlIGl0cyBlbmNvZGluZywgYWRkIGhlYWRlcnMvcXVvdGluZyB0byBpbmRpY2F0ZSBpdCBpcworCWVuY29kZWQgaW4gPGVuY29kaW5nPi4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZQorCSdzZW5kZW1haWwuYXNzdW1lOGJpdEVuY29kaW5nJzsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgdGhpcworCXdpbGwgYmUgcHJvbXB0ZWQgZm9yIGlmIGFueSBub24tQVNDSUkgZmlsZXMgYXJlIGVuY291bnRlcmVkLgorKworTm90ZSB0aGF0IG5vIGF0dGVtcHRzIHdoYXRzb2V2ZXIgYXJlIG1hZGUgdG8gdmFsaWRhdGUgdGhlIGVuY29kaW5nLgorCisKK1NlbmRpbmcKK35+fn5+fn4KKworLS1lbnZlbG9wZS1zZW5kZXI9PGFkZHJlc3M+OjoKKwlTcGVjaWZ5IHRoZSBlbnZlbG9wZSBzZW5kZXIgdXNlZCB0byBzZW5kIHRoZSBlbWFpbHMuCisJVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBkZWZhdWx0IGFkZHJlc3MgaXMgbm90IHRoZSBhZGRyZXNzIHRoYXQgaXMKKwlzdWJzY3JpYmVkIHRvIGEgbGlzdC4gSW4gb3JkZXIgdG8gdXNlIHRoZSAnRnJvbScgYWRkcmVzcywgc2V0IHRoZQorCXZhbHVlIHRvICJhdXRvIi4gSWYgeW91IHVzZSB0aGUgc2VuZG1haWwgYmluYXJ5LCB5b3UgbXVzdCBoYXZlCisJc3VpdGFibGUgcHJpdmlsZWdlcyBmb3IgdGhlIC1mIHBhcmFtZXRlci4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZQorCSdzZW5kZW1haWwuZW52ZWxvcGVzZW5kZXInIGNvbmZpZ3VyYXRpb24gdmFyaWFibGU7IGlmIHRoYXQgaXMKKwl1bnNwZWNpZmllZCwgY2hvb3NpbmcgdGhlIGVudmVsb3BlIHNlbmRlciBpcyBsZWZ0IHRvIHlvdXIgTVRBLgorCistLXNtdHAtZW5jcnlwdGlvbj08ZW5jcnlwdGlvbj46OgorCVNwZWNpZnkgdGhlIGVuY3J5cHRpb24gdG8gdXNlLCBlaXRoZXIgJ3NzbCcgb3IgJ3RscycuICBBbnkgb3RoZXIKKwl2YWx1ZSByZXZlcnRzIHRvIHBsYWluIFNNVFAuICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZgorCSdzZW5kZW1haWwuc210cGVuY3J5cHRpb24nLgorCistLXNtdHAtZG9tYWluPTxGUUROPjo6CisJU3BlY2lmaWVzIHRoZSBGdWxseSBRdWFsaWZpZWQgRG9tYWluIE5hbWUgKEZRRE4pIHVzZWQgaW4gdGhlCisJSEVMTy9FSExPIGNvbW1hbmQgdG8gdGhlIFNNVFAgc2VydmVyLiAgU29tZSBzZXJ2ZXJzIHJlcXVpcmUgdGhlCisJRlFETiB0byBtYXRjaCB5b3VyIElQIGFkZHJlc3MuICBJZiBub3Qgc2V0LCBnaXQgc2VuZC1lbWFpbCBhdHRlbXB0cworCXRvIGRldGVybWluZSB5b3VyIEZRRE4gYXV0b21hdGljYWxseS4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mCisJJ3NlbmRlbWFpbC5zbXRwZG9tYWluJy4KKworLS1zbXRwLXBhc3NbPTxwYXNzd29yZD5dOjoKKwlQYXNzd29yZCBmb3IgU01UUC1BVVRILiBUaGUgYXJndW1lbnQgaXMgb3B0aW9uYWw6IElmIG5vCisJYXJndW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBlbXB0eSBzdHJpbmcgaXMgdXNlZCBhcworCXRoZSBwYXNzd29yZC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5zbXRwcGFzcycsCisJaG93ZXZlciAnLS1zbXRwLXBhc3MnIGFsd2F5cyBvdmVycmlkZXMgdGhpcyB2YWx1ZS4KKysKK0Z1cnRoZXJtb3JlLCBwYXNzd29yZHMgbmVlZCBub3QgYmUgc3BlY2lmaWVkIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMKK29yIG9uIHRoZSBjb21tYW5kIGxpbmUuIElmIGEgdXNlcm5hbWUgaGFzIGJlZW4gc3BlY2lmaWVkICh3aXRoCisnLS1zbXRwLXVzZXInIG9yIGEgJ3NlbmRlbWFpbC5zbXRwdXNlcicpLCBidXQgbm8gcGFzc3dvcmQgaGFzIGJlZW4KK3NwZWNpZmllZCAod2l0aCAnLS1zbXRwLXBhc3MnIG9yICdzZW5kZW1haWwuc210cHBhc3MnKSwgdGhlbiB0aGUKK3VzZXIgaXMgcHJvbXB0ZWQgZm9yIGEgcGFzc3dvcmQgd2hpbGUgdGhlIGlucHV0IGlzIG1hc2tlZCBmb3IgcHJpdmFjeS4KKworLS1zbXRwLXNlcnZlcj08aG9zdD46OgorCUlmIHNldCwgc3BlY2lmaWVzIHRoZSBvdXRnb2luZyBTTVRQIHNlcnZlciB0byB1c2UgKGUuZy4KKwlgc210cC5leGFtcGxlLmNvbWAgb3IgYSByYXcgSVAgYWRkcmVzcykuICBBbHRlcm5hdGl2ZWx5IGl0IGNhbgorCXNwZWNpZnkgYSBmdWxsIHBhdGhuYW1lIG9mIGEgc2VuZG1haWwtbGlrZSBwcm9ncmFtIGluc3RlYWQ7CisJdGhlIHByb2dyYW0gbXVzdCBzdXBwb3J0IHRoZSBgLWlgIG9wdGlvbi4gIERlZmF1bHQgdmFsdWUgY2FuCisJYmUgc3BlY2lmaWVkIGJ5IHRoZSAnc2VuZGVtYWlsLnNtdHBzZXJ2ZXInIGNvbmZpZ3VyYXRpb24KKwlvcHRpb247IHRoZSBidWlsdC1pbiBkZWZhdWx0IGlzIGAvdXNyL3NiaW4vc2VuZG1haWxgIG9yCisJYC91c3IvbGliL3NlbmRtYWlsYCBpZiBzdWNoIHByb2dyYW0gaXMgYXZhaWxhYmxlLCBvcgorCWBsb2NhbGhvc3RgIG90aGVyd2lzZS4KKworLS1zbXRwLXNlcnZlci1wb3J0PTxwb3J0Pjo6CisJU3BlY2lmaWVzIGEgcG9ydCBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCBwb3J0IChTTVRQCisJc2VydmVycyB0eXBpY2FsbHkgbGlzdGVuIHRvIHNtdHAgcG9ydCAyNSwgYnV0IG1heSBhbHNvIGxpc3RlbiB0bworCXN1Ym1pc3Npb24gcG9ydCA1ODcsIG9yIHRoZSBjb21tb24gU1NMIHNtdHAgcG9ydCA0NjUpOworCXN5bWJvbGljIHBvcnQgbmFtZXMgKGUuZy4gInN1Ym1pc3Npb24iIGluc3RlYWQgb2YgNTg3KQorCWFyZSBhbHNvIGFjY2VwdGVkLiBUaGUgcG9ydCBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUKKwknc2VuZGVtYWlsLnNtdHBzZXJ2ZXJwb3J0JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCistLXNtdHAtc2VydmVyLW9wdGlvbj08b3B0aW9uPjo6CisJSWYgc2V0LCBzcGVjaWZpZXMgdGhlIG91dGdvaW5nIFNNVFAgc2VydmVyIG9wdGlvbiB0byB1c2UuCisJRGVmYXVsdCB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IHRoZSAnc2VuZGVtYWlsLnNtdHBzZXJ2ZXJvcHRpb24nCisJY29uZmlndXJhdGlvbiBvcHRpb24uCisrCitUaGUgLS1zbXRwLXNlcnZlci1vcHRpb24gb3B0aW9uIG11c3QgYmUgcmVwZWF0ZWQgZm9yIGVhY2ggb3B0aW9uIHlvdSB3YW50Cit0byBwYXNzIHRvIHRoZSBzZXJ2ZXIuIExpa2V3aXNlLCBkaWZmZXJlbnQgbGluZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKK211c3QgYmUgdXNlZCBmb3IgZWFjaCBvcHRpb24uCisKKy0tc210cC1zc2w6OgorCUxlZ2FjeSBhbGlhcyBmb3IgJy0tc210cC1lbmNyeXB0aW9uIHNzbCcuCisKKy0tc210cC11c2VyPTx1c2VyPjo6CisJVXNlcm5hbWUgZm9yIFNNVFAtQVVUSC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5zbXRwdXNlcic7CisJaWYgYSB1c2VybmFtZSBpcyBub3Qgc3BlY2lmaWVkICh3aXRoICctLXNtdHAtdXNlcicgb3IgJ3NlbmRlbWFpbC5zbXRwdXNlcicpLAorCXRoZW4gYXV0aGVudGljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4KKworLS1zbXRwLWRlYnVnPTB8MTo6CisJRW5hYmxlICgxKSBvciBkaXNhYmxlICgwKSBkZWJ1ZyBvdXRwdXQuIElmIGVuYWJsZWQsIFNNVFAKKwljb21tYW5kcyBhbmQgcmVwbGllcyB3aWxsIGJlIHByaW50ZWQuIFVzZWZ1bCB0byBkZWJ1ZyBUTFMKKwljb25uZWN0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBwcm9ibGVtcy4KKworQXV0b21hdGluZworfn5+fn5+fn5+fgorCistLXRvLWNtZD08Y29tbWFuZD46OgorCVNwZWNpZnkgYSBjb21tYW5kIHRvIGV4ZWN1dGUgb25jZSBwZXIgcGF0Y2ggZmlsZSB3aGljaAorCXNob3VsZCBnZW5lcmF0ZSBwYXRjaCBmaWxlIHNwZWNpZmljICJUbzoiIGVudHJpZXMuCisJT3V0cHV0IG9mIHRoaXMgY29tbWFuZCBtdXN0IGJlIHNpbmdsZSBlbWFpbCBhZGRyZXNzIHBlciBsaW5lLgorCURlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwudG9jbWQnIGNvbmZpZ3VyYXRpb24gdmFsdWUuCisKKy0tY2MtY21kPTxjb21tYW5kPjo6CisJU3BlY2lmeSBhIGNvbW1hbmQgdG8gZXhlY3V0ZSBvbmNlIHBlciBwYXRjaCBmaWxlIHdoaWNoCisJc2hvdWxkIGdlbmVyYXRlIHBhdGNoIGZpbGUgc3BlY2lmaWMgIkNjOiIgZW50cmllcy4KKwlPdXRwdXQgb2YgdGhpcyBjb21tYW5kIG11c3QgYmUgc2luZ2xlIGVtYWlsIGFkZHJlc3MgcGVyIGxpbmUuCisJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5jY2NtZCcgY29uZmlndXJhdGlvbiB2YWx1ZS4KKworLS1bbm8tXWNoYWluLXJlcGx5LXRvOjoKKwlJZiB0aGlzIGlzIHNldCwgZWFjaCBlbWFpbCB3aWxsIGJlIHNlbnQgYXMgYSByZXBseSB0byB0aGUgcHJldmlvdXMKKwllbWFpbCBzZW50LiAgSWYgZGlzYWJsZWQgd2l0aCAiLS1uby1jaGFpbi1yZXBseS10byIsIGFsbCBlbWFpbHMgYWZ0ZXIKKwl0aGUgZmlyc3Qgd2lsbCBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGZpcnN0IGVtYWlsIHNlbnQuICBXaGVuIHVzaW5nCisJdGhpcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgZmlyc3QgZmlsZSBnaXZlbiBiZSBhbiBvdmVydmlldyBvZiB0aGUKKwllbnRpcmUgcGF0Y2ggc2VyaWVzLiBEaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgdGhlICdzZW5kZW1haWwuY2hhaW5yZXBseXRvJworCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGl0LgorCistLWlkZW50aXR5PTxpZGVudGl0eT46OgorCUEgY29uZmlndXJhdGlvbiBpZGVudGl0eS4gV2hlbiBnaXZlbiwgY2F1c2VzIHZhbHVlcyBpbiB0aGUKKwknc2VuZGVtYWlsLjxpZGVudGl0eT4nIHN1YnNlY3Rpb24gdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIKKwl2YWx1ZXMgaW4gdGhlICdzZW5kZW1haWwnIHNlY3Rpb24uIFRoZSBkZWZhdWx0IGlkZW50aXR5IGlzCisJdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuaWRlbnRpdHknLgorCistLVtuby1dc2lnbmVkLW9mZi1ieS1jYzo6CisJSWYgdGhpcyBpcyBzZXQsIGFkZCBlbWFpbHMgZm91bmQgaW4gU2lnbmVkLW9mZi1ieTogb3IgQ2M6IGxpbmVzIHRvIHRoZQorCWNjIGxpc3QuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuc2lnbmVkb2ZmYnljYycgY29uZmlndXJhdGlvbgorCXZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tc2lnbmVkLW9mZi1ieS1jYy4KKworLS1zdXBwcmVzcy1jYz08Y2F0ZWdvcnk+OjoKKwlTcGVjaWZ5IGFuIGFkZGl0aW9uYWwgY2F0ZWdvcnkgb2YgcmVjaXBpZW50cyB0byBzdXBwcmVzcyB0aGUKKwlhdXRvLWNjIG9mOgorKworLS0KKy0gJ2F1dGhvcicgd2lsbCBhdm9pZCBpbmNsdWRpbmcgdGhlIHBhdGNoIGF1dGhvcgorLSAnc2VsZicgd2lsbCBhdm9pZCBpbmNsdWRpbmcgdGhlIHNlbmRlcgorLSAnY2MnIHdpbGwgYXZvaWQgaW5jbHVkaW5nIGFueW9uZSBtZW50aW9uZWQgaW4gQ2MgbGluZXMgaW4gdGhlIHBhdGNoIGhlYWRlcgorICBleGNlcHQgZm9yIHNlbGYgKHVzZSAnc2VsZicgZm9yIHRoYXQpLgorLSAnYm9keWNjJyB3aWxsIGF2b2lkIGluY2x1ZGluZyBhbnlvbmUgbWVudGlvbmVkIGluIENjIGxpbmVzIGluIHRoZQorICBwYXRjaCBib2R5IChjb21taXQgbWVzc2FnZSkgZXhjZXB0IGZvciBzZWxmICh1c2UgJ3NlbGYnIGZvciB0aGF0KS4KKy0gJ3NvYicgd2lsbCBhdm9pZCBpbmNsdWRpbmcgYW55b25lIG1lbnRpb25lZCBpbiBTaWduZWQtb2ZmLWJ5IGxpbmVzIGV4Y2VwdAorICAgZm9yIHNlbGYgKHVzZSAnc2VsZicgZm9yIHRoYXQpLgorLSAnY2NjbWQnIHdpbGwgYXZvaWQgcnVubmluZyB0aGUgLS1jYy1jbWQuCistICdib2R5JyBpcyBlcXVpdmFsZW50IHRvICdzb2InICsgJ2JvZHljYycKKy0gJ2FsbCcgd2lsbCBzdXBwcmVzcyBhbGwgYXV0byBjYyB2YWx1ZXMuCistLQorKworRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5zdXBwcmVzc2NjJyBjb25maWd1cmF0aW9uIHZhbHVlOyBpZgordGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAnc2VsZicgaWYgLS1zdXBwcmVzcy1mcm9tIGlzCitzcGVjaWZpZWQsIGFzIHdlbGwgYXMgJ2JvZHknIGlmIC0tbm8tc2lnbmVkLW9mZi1jYyBpcyBzcGVjaWZpZWQuCisKKy0tW25vLV1zdXBwcmVzcy1mcm9tOjoKKwlJZiB0aGlzIGlzIHNldCwgZG8gbm90IGFkZCB0aGUgRnJvbTogYWRkcmVzcyB0byB0aGUgY2M6IGxpc3QuCisJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5zdXBwcmVzc2Zyb20nIGNvbmZpZ3VyYXRpb24KKwl2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAtLW5vLXN1cHByZXNzLWZyb20uCisKKy0tW25vLV10aHJlYWQ6OgorCUlmIHRoaXMgaXMgc2V0LCB0aGUgSW4tUmVwbHktVG8gYW5kIFJlZmVyZW5jZXMgaGVhZGVycyB3aWxsIGJlCisJYWRkZWQgdG8gZWFjaCBlbWFpbCBzZW50LiAgV2hldGhlciBlYWNoIG1haWwgcmVmZXJzIHRvIHRoZQorCXByZXZpb3VzIGVtYWlsIChgZGVlcGAgdGhyZWFkaW5nIHBlciAnZ2l0IGZvcm1hdC1wYXRjaCcKKwl3b3JkaW5nKSBvciB0byB0aGUgZmlyc3QgZW1haWwgKGBzaGFsbG93YCB0aHJlYWRpbmcpIGlzCisJZ292ZXJuZWQgYnkgIi0tW25vLV1jaGFpbi1yZXBseS10byIuCisrCitJZiBkaXNhYmxlZCB3aXRoICItLW5vLXRocmVhZCIsIHRob3NlIGhlYWRlcnMgd2lsbCBub3QgYmUgYWRkZWQKKyh1bmxlc3Mgc3BlY2lmaWVkIHdpdGggLS1pbi1yZXBseS10bykuICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUKKydzZW5kZW1haWwudGhyZWFkJyBjb25maWd1cmF0aW9uIHZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLAorZGVmYXVsdCB0byAtLXRocmVhZC4KKysKK0l0IGlzIHVwIHRvIHRoZSB1c2VyIHRvIGVuc3VyZSB0aGF0IG5vIEluLVJlcGx5LVRvIGhlYWRlciBhbHJlYWR5CitleGlzdHMgd2hlbiAnZ2l0IHNlbmQtZW1haWwnIGlzIGFza2VkIHRvIGFkZCBpdCAoZXNwZWNpYWxseSBub3RlIHRoYXQKKydnaXQgZm9ybWF0LXBhdGNoJyBjYW4gYmUgY29uZmlndXJlZCB0byBkbyB0aGUgdGhyZWFkaW5nIGl0c2VsZikuCitGYWlsdXJlIHRvIGRvIHNvIG1heSBub3QgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVzdWx0IGluIHRoZQorcmVjaXBpZW50J3MgTVVBLgorCisKK0FkbWluaXN0ZXJpbmcKK35+fn5+fn5+fn5+fn4KKworLS1jb25maXJtPTxtb2RlPjo6CisJQ29uZmlybSBqdXN0IGJlZm9yZSBzZW5kaW5nOgorKworLS0KKy0gJ2Fsd2F5cycgd2lsbCBhbHdheXMgY29uZmlybSBiZWZvcmUgc2VuZGluZworLSAnbmV2ZXInIHdpbGwgbmV2ZXIgY29uZmlybSBiZWZvcmUgc2VuZGluZworLSAnY2MnIHdpbGwgY29uZmlybSBiZWZvcmUgc2VuZGluZyB3aGVuIHNlbmQtZW1haWwgaGFzIGF1dG9tYXRpY2FsbHkKKyAgYWRkZWQgYWRkcmVzc2VzIGZyb20gdGhlIHBhdGNoIHRvIHRoZSBDYyBsaXN0CistICdjb21wb3NlJyB3aWxsIGNvbmZpcm0gYmVmb3JlIHNlbmRpbmcgdGhlIGZpcnN0IG1lc3NhZ2Ugd2hlbiB1c2luZyAtLWNvbXBvc2UuCistICdhdXRvJyBpcyBlcXVpdmFsZW50IHRvICdjYycgKyAnY29tcG9zZScKKy0tCisrCitEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLmNvbmZpcm0nIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQKK2lzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvICdhdXRvJyB1bmxlc3MgYW55IG9mIHRoZSBzdXBwcmVzcyBvcHRpb25zCitoYXZlIGJlZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGRlZmF1bHQgdG8gJ2NvbXBvc2UnLgorCistLWRyeS1ydW46OgorCURvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVhbGx5IHNlbmQgdGhlIGVtYWlscy4KKworLS1bbm8tXWZvcm1hdC1wYXRjaDo6CisJV2hlbiBhbiBhcmd1bWVudCBtYXkgYmUgdW5kZXJzdG9vZCBlaXRoZXIgYXMgYSByZWZlcmVuY2Ugb3IgYXMgYSBmaWxlIG5hbWUsCisJY2hvb3NlIHRvIHVuZGVyc3RhbmQgaXQgYXMgYSBmb3JtYXQtcGF0Y2ggYXJndW1lbnQgKCctLWZvcm1hdC1wYXRjaCcpCisJb3IgYXMgYSBmaWxlIG5hbWUgKCctLW5vLWZvcm1hdC1wYXRjaCcpLiBCeSBkZWZhdWx0LCB3aGVuIHN1Y2ggYSBjb25mbGljdAorCW9jY3VycywgZ2l0IHNlbmQtZW1haWwgd2lsbCBmYWlsLgorCistLXF1aWV0OjoKKwlNYWtlIGdpdC1zZW5kLWVtYWlsIGxlc3MgdmVyYm9zZS4gIE9uZSBsaW5lIHBlciBlbWFpbCBzaG91bGQgYmUKKwlhbGwgdGhhdCBpcyBvdXRwdXQuCisKKy0tW25vLV12YWxpZGF0ZTo6CisJUGVyZm9ybSBzYW5pdHkgY2hlY2tzIG9uIHBhdGNoZXMuCisJQ3VycmVudGx5LCB2YWxpZGF0aW9uIG1lYW5zIHRoZSBmb2xsb3dpbmc6CisrCistLQorCQkqCVdhcm4gb2YgcGF0Y2hlcyB0aGF0IGNvbnRhaW4gbGluZXMgbG9uZ2VyIHRoYW4gOTk4IGNoYXJhY3RlcnM7IHRoaXMKKwkJCWlzIGR1ZSB0byBTTVRQIGxpbWl0cyBhcyBkZXNjcmliZWQgYnkgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjgyMS50eHQuCistLQorKworRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC52YWxpZGF0ZSc7IGlmIHRoaXMgaXMgbm90IHNldCwKK2RlZmF1bHQgdG8gJy0tdmFsaWRhdGUnLgorCistLWZvcmNlOjoKKwlTZW5kIGVtYWlscyBldmVuIGlmIHNhZmV0eSBjaGVja3Mgd291bGQgcHJldmVudCBpdC4KKworCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKK3NlbmRlbWFpbC5hbGlhc2VzZmlsZTo6CisJVG8gYXZvaWQgdHlwaW5nIGxvbmcgZW1haWwgYWRkcmVzc2VzLCBwb2ludCB0aGlzIHRvIG9uZSBvciBtb3JlCisJZW1haWwgYWxpYXNlcyBmaWxlcy4gIFlvdSBtdXN0IGFsc28gc3VwcGx5ICdzZW5kZW1haWwuYWxpYXNmaWxldHlwZScuCisKK3NlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlOjoKKwlGb3JtYXQgb2YgdGhlIGZpbGUocykgc3BlY2lmaWVkIGluIHNlbmRlbWFpbC5hbGlhc2VzZmlsZS4gTXVzdCBiZQorCW9uZSBvZiAnbXV0dCcsICdtYWlscmMnLCAncGluZScsICdlbG0nLCBvciAnZ251cycuCisKK3NlbmRlbWFpbC5tdWx0aWVkaXQ6OgorCUlmIHRydWUgKGRlZmF1bHQpLCBhIHNpbmdsZSBlZGl0b3IgaW5zdGFuY2Ugd2lsbCBiZSBzcGF3bmVkIHRvIGVkaXQKKwlmaWxlcyB5b3UgaGF2ZSB0byBlZGl0IChwYXRjaGVzIHdoZW4gJy0tYW5ub3RhdGUnIGlzIHVzZWQsIGFuZCB0aGUKKwlzdW1tYXJ5IHdoZW4gJy0tY29tcG9zZScgaXMgdXNlZCkuIElmIGZhbHNlLCBmaWxlcyB3aWxsIGJlIGVkaXRlZCBvbmUKKwlhZnRlciB0aGUgb3RoZXIsIHNwYXduaW5nIGEgbmV3IGVkaXRvciBlYWNoIHRpbWUuCisKK3NlbmRlbWFpbC5jb25maXJtOjoKKwlTZXRzIHRoZSBkZWZhdWx0IGZvciB3aGV0aGVyIHRvIGNvbmZpcm0gYmVmb3JlIHNlbmRpbmcuIE11c3QgYmUKKwlvbmUgb2YgJ2Fsd2F5cycsICduZXZlcicsICdjYycsICdjb21wb3NlJywgb3IgJ2F1dG8nLiBTZWUgJy0tY29uZmlybScKKwlpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgdmFsdWVzLgorCitFWEFNUExFCistLS0tLS0tCitVc2UgZ21haWwgYXMgdGhlIHNtdHAgc2VydmVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUbyB1c2UgJ2dpdCBzZW5kLWVtYWlsJyB0byBzZW5kIHlvdXIgcGF0Y2hlcyB0aHJvdWdoIHRoZSBHTWFpbCBTTVRQIHNlcnZlciwKK2VkaXQgfi8uZ2l0Y29uZmlnIHRvIHNwZWNpZnkgeW91ciBhY2NvdW50IHNldHRpbmdzOgorCisJW3NlbmRlbWFpbF0KKwkJc210cGVuY3J5cHRpb24gPSB0bHMKKwkJc210cHNlcnZlciA9IHNtdHAuZ21haWwuY29tCisJCXNtdHB1c2VyID0geW91cm5hbWVAZ21haWwuY29tCisJCXNtdHBzZXJ2ZXJwb3J0ID0gNTg3CisKK09uY2UgeW91ciBjb21taXRzIGFyZSByZWFkeSB0byBiZSBzZW50IHRvIHRoZSBtYWlsaW5nIGxpc3QsIHJ1biB0aGUKK2ZvbGxvd2luZyBjb21tYW5kczoKKworCSQgZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtTSBvcmlnaW4vbWFzdGVyIC1vIG91dGdvaW5nLworCSQgZWRpdCBvdXRnb2luZy8wMDAwLSoKKwkkIGdpdCBzZW5kLWVtYWlsIG91dGdvaW5nLyoKKworTm90ZTogdGhlIGZvbGxvd2luZyBwZXJsIG1vZHVsZXMgYXJlIHJlcXVpcmVkCisgICAgICBOZXQ6OlNNVFA6OlNTTCwgTUlNRTo6QmFzZTY0IGFuZCBBdXRoZW46OlNBU0wKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sIGxpbmtnaXQ6Z2l0LWltYXAtc2VuZFsxXSwgbWJveCg1KQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkM2VhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0CkBAIC0wLDAgKzEsMTIwIEBACitnaXQtc2VuZC1wYWNrKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zZW5kLXBhY2sgLSBQdXNoIG9iamVjdHMgb3ZlciBnaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNlbmQtcGFjaycgWy0tYWxsXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWY+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1VzdWFsbHkgeW91IHdvdWxkIHdhbnQgdG8gdXNlICdnaXQgcHVzaCcsIHdoaWNoIGlzIGEKK2hpZ2hlci1sZXZlbCB3cmFwcGVyIG9mIHRoaXMgY29tbWFuZCwgaW5zdGVhZC4gU2VlIGxpbmtnaXQ6Z2l0LXB1c2hbMV0uCisKK0ludm9rZXMgJ2dpdC1yZWNlaXZlLXBhY2snIG9uIGEgcG9zc2libHkgcmVtb3RlIHJlcG9zaXRvcnksIGFuZAordXBkYXRlcyBpdCBmcm9tIHRoZSBjdXJyZW50IHJlcG9zaXRvcnksIHNlbmRpbmcgbmFtZWQgcmVmcy4KKworCitPUFRJT05TCistLS0tLS0tCistLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz46OgorCVBhdGggdG8gdGhlICdnaXQtcmVjZWl2ZS1wYWNrJyBwcm9ncmFtIG9uIHRoZSByZW1vdGUKKwllbmQuICBTb21ldGltZXMgdXNlZnVsIHdoZW4gcHVzaGluZyB0byBhIHJlbW90ZQorCXJlcG9zaXRvcnkgb3ZlciBzc2gsIGFuZCB5b3UgZG8gbm90IGhhdmUgdGhlIHByb2dyYW0gaW4KKwlhIGRpcmVjdG9yeSBvbiB0aGUgZGVmYXVsdCAkUEFUSC4KKworLS1leGVjPTxnaXQtcmVjZWl2ZS1wYWNrPjo6CisJU2FtZSBhcyBcLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+LgorCistLWFsbDo6CisJSW5zdGVhZCBvZiBleHBsaWNpdGx5IHNwZWNpZnlpbmcgd2hpY2ggcmVmcyB0byB1cGRhdGUsCisJdXBkYXRlIGFsbCBoZWFkcyB0aGF0IGxvY2FsbHkgZXhpc3QuCisKKy0tZHJ5LXJ1bjo6CisJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgdXBkYXRlcy4KKworLS1mb3JjZTo6CisJVXN1YWxseSwgdGhlIGNvbW1hbmQgcmVmdXNlcyB0byB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQKKwlpcyBub3QgYW4gYW5jZXN0b3Igb2YgdGhlIGxvY2FsIHJlZiB1c2VkIHRvIG92ZXJ3cml0ZSBpdC4KKwlUaGlzIGZsYWcgZGlzYWJsZXMgdGhlIGNoZWNrLiAgV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQKKwl0aGUgcmVtb3RlIHJlcG9zaXRvcnkgY2FuIGxvc2UgY29tbWl0czsgdXNlIGl0IHdpdGgKKwljYXJlLgorCistLXZlcmJvc2U6OgorCVJ1biB2ZXJib3NlbHkuCisKKy0tdGhpbjo6CisJU2VuZCBhICJ0aGluIiBwYWNrLCB3aGljaCByZWNvcmRzIG9iamVjdHMgaW4gZGVsdGlmaWVkIGZvcm0gYmFzZWQKKwlvbiBvYmplY3RzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcGFjayB0byByZWR1Y2UgbmV0d29yayB0cmFmZmljLgorCis8aG9zdD46OgorCUEgcmVtb3RlIGhvc3QgdG8gaG91c2UgdGhlIHJlcG9zaXRvcnkuICBXaGVuIHRoaXMKKwlwYXJ0IGlzIHNwZWNpZmllZCwgJ2dpdC1yZWNlaXZlLXBhY2snIGlzIGludm9rZWQgdmlhCisJc3NoLgorCis8ZGlyZWN0b3J5Pjo6CisJVGhlIHJlcG9zaXRvcnkgdG8gdXBkYXRlLgorCis8cmVmPi4uLjo6CisJVGhlIHJlbW90ZSByZWZzIHRvIHVwZGF0ZS4KKworCitTcGVjaWZ5aW5nIHRoZSBSZWZzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIHNwZWNpZnkgd2hpY2ggcmVmcyB0byB1cGRhdGUgb24gdGhlCityZW1vdGUgZW5kLgorCitXaXRoICctLWFsbCcgZmxhZywgYWxsIHJlZnMgdGhhdCBleGlzdCBsb2NhbGx5IGFyZSB0cmFuc2ZlcnJlZCB0bwordGhlIHJlbW90ZSBzaWRlLiAgWW91IGNhbm5vdCBzcGVjaWZ5IGFueSAnPHJlZj4nIGlmIHlvdSB1c2UKK3RoaXMgZmxhZy4KKworV2l0aG91dCAnLS1hbGwnIGFuZCB3aXRob3V0IGFueSAnPHJlZj4nLCB0aGUgaGVhZHMgdGhhdCBleGlzdAorYm90aCBvbiB0aGUgbG9jYWwgc2lkZSBhbmQgb24gdGhlIHJlbW90ZSBzaWRlIGFyZSB1cGRhdGVkLgorCitXaGVuIG9uZSBvciBtb3JlICc8cmVmPicgYXJlIHNwZWNpZmllZCBleHBsaWNpdGx5LCBpdCBjYW4gYmUgZWl0aGVyIGEKK3NpbmdsZSBwYXR0ZXJuLCBvciBhIHBhaXIgb2Ygc3VjaCBwYXR0ZXJuIHNlcGFyYXRlZCBieSBhIGNvbG9uCisiOiIgKHRoaXMgbWVhbnMgdGhhdCBhIHJlZiBuYW1lIGNhbm5vdCBoYXZlIGEgY29sb24gaW4gaXQpLiAgQQorc2luZ2xlIHBhdHRlcm4gJzxuYW1lPicgaXMganVzdCBhIHNob3J0aGFuZCBmb3IgJzxuYW1lPjo8bmFtZT4nLgorCitFYWNoIHBhdHRlcm4gcGFpciBjb25zaXN0cyBvZiB0aGUgc291cmNlIHNpZGUgKGJlZm9yZSB0aGUgY29sb24pCithbmQgdGhlIGRlc3RpbmF0aW9uIHNpZGUgKGFmdGVyIHRoZSBjb2xvbikuICBUaGUgcmVmIHRvIGJlCitwdXNoZWQgaXMgZGV0ZXJtaW5lZCBieSBmaW5kaW5nIGEgbWF0Y2ggdGhhdCBtYXRjaGVzIHRoZSBzb3VyY2UKK3NpZGUsIGFuZCB3aGVyZSBpdCBpcyBwdXNoZWQgaXMgZGV0ZXJtaW5lZCBieSB1c2luZyB0aGUKK2Rlc3RpbmF0aW9uIHNpZGUuIFRoZSBydWxlcyB1c2VkIHRvIG1hdGNoIGEgcmVmIGFyZSB0aGUgc2FtZQorcnVsZXMgdXNlZCBieSAnZ2l0IHJldi1wYXJzZScgdG8gcmVzb2x2ZSBhIHN5bWJvbGljIHJlZgorbmFtZS4gU2VlIGxpbmtnaXQ6Z2l0LXJldi1wYXJzZVsxXS4KKworIC0gSXQgaXMgYW4gZXJyb3IgaWYgPHNyYz4gZG9lcyBub3QgbWF0Y2ggZXhhY3RseSBvbmUgb2YgdGhlCisgICBsb2NhbCByZWZzLgorCisgLSBJdCBpcyBhbiBlcnJvciBpZiA8ZHN0PiBtYXRjaGVzIG1vcmUgdGhhbiBvbmUgcmVtb3RlIHJlZnMuCisKKyAtIElmIDxkc3Q+IGRvZXMgbm90IG1hdGNoIGFueSByZW1vdGUgcmVmLCBlaXRoZXIKKworICAgKiBpdCBoYXMgdG8gc3RhcnQgd2l0aCAicmVmcy8iOyA8ZHN0PiBpcyB1c2VkIGFzIHRoZQorICAgICBkZXN0aW5hdGlvbiBsaXRlcmFsbHkgaW4gdGhpcyBjYXNlLgorCisgICAqIDxzcmM+ID09IDxkc3Q+IGFuZCB0aGUgcmVmIHRoYXQgbWF0Y2hlZCB0aGUgPHNyYz4gbXVzdCBub3QKKyAgICAgZXhpc3QgaW4gdGhlIHNldCBvZiByZW1vdGUgcmVmczsgdGhlIHJlZiBtYXRjaGVkIDxzcmM+CisgICAgIGxvY2FsbHkgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24uCisKK1dpdGhvdXQgJy0tZm9yY2UnLCB0aGUgPHNyYz4gcmVmIGlzIHN0b3JlZCBhdCB0aGUgcmVtb3RlIG9ubHkgaWYKKzxkc3Q+IGRvZXMgbm90IGV4aXN0LCBvciA8ZHN0PiBpcyBhIHByb3BlciBzdWJzZXQgKGkuZS4gYW4KK2FuY2VzdG9yKSBvZiA8c3JjPi4gIFRoaXMgY2hlY2ssIGtub3duIGFzICJmYXN0LWZvcndhcmQgY2hlY2siLAoraXMgcGVyZm9ybWVkIGluIG9yZGVyIHRvIGF2b2lkIGFjY2lkZW50YWxseSBvdmVyd3JpdGluZyB0aGUKK3JlbW90ZSByZWYgYW5kIGxvc2Ugb3RoZXIgcGVvcGxlcycgY29tbWl0cyBmcm9tIHRoZXJlLgorCitXaXRoICctLWZvcmNlJywgdGhlIGZhc3QtZm9yd2FyZCBjaGVjayBpcyBkaXNhYmxlZCBmb3IgYWxsIHJlZnMuCisKK09wdGlvbmFsbHksIGEgPHJlZj4gcGFyYW1ldGVyIGNhbiBiZSBwcmVmaXhlZCB3aXRoIGEgcGx1cyAnKycgc2lnbgordG8gZGlzYWJsZSB0aGUgZmFzdC1mb3J3YXJkIGNoZWNrIG9ubHkgb24gdGhhdCByZWYuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2gtaTE4bi0tZW52c3Vic3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtaTE4bi0tZW52c3Vic3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZmFmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaC1pMThuLS1lbnZzdWJzdC50eHQKQEAgLTAsMCArMSwzNiBAQAorZ2l0LXNoLWkxOG57bGl0ZGR9ZW52c3Vic3QoMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaC1pMThuLS1lbnZzdWJzdCAtIEdpdCdzIG93biBlbnZzdWJzdCgxKSBmb3IgaTE4biBmYWxsYmFja3MKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitldmFsX2dldHRleHQgKCkgeworCXByaW50ZiAiJXMiICIkMSIgfCAoCisJCWV4cG9ydCBQQVRIICQoJ2dpdCBzaC1pMThue2xpdGRkfWVudnN1YnN0JyAtLXZhcmlhYmxlcyAiJDEiKTsKKwkJJ2dpdCBzaC1pMThue2xpdGRkfWVudnN1YnN0JyAiJDEiCisJKQorfQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyBub3QgYSBjb21tYW5kIHRoZSBlbmQgdXNlciB3b3VsZCB3YW50IHRvIHJ1bi4gIEV2ZXIuCitUaGlzIGRvY3VtZW50YXRpb24gaXMgbWVhbnQgZm9yIHBlb3BsZSB3aG8gYXJlIHN0dWR5aW5nIHRoZQorcGx1bWJpbmcgc2NyaXB0cyBhbmQvb3IgYXJlIHdyaXRpbmcgbmV3IG9uZXMuCisKKydnaXQgc2gtaTE4bntsaXRkZH1lbnZzdWJzdCcgaXMgR2l0J3Mgc3RyaXBwZWQtZG93biBjb3B5IG9mIHRoZSBHTlUKK2BlbnZzdWJzdCgxKWAgcHJvZ3JhbSB0aGF0IGNvbWVzIHdpdGggdGhlIEdOVSBnZXR0ZXh0IHBhY2thZ2UuIEl0J3MKK3VzZWQgaW50ZXJuYWxseSBieSBsaW5rZ2l0OmdpdC1zaC1pMThuWzFdIHRvIGludGVycG9sYXRlIHRoZSB2YXJpYWJsZXMKK3Bhc3NlZCB0byB0aGUgYGV2YWxfZ2V0dGV4dGAgZnVuY3Rpb24uCisKK05vIHByb21pc2VzIGFyZSBtYWRlIGFib3V0IHRoZSBpbnRlcmZhY2UsIG9yIHRoYXQgdGhpcworcHJvZ3JhbSB3b24ndCBkaXNhcHBlYXIgd2l0aG91dCB3YXJuaW5nIGluIHRoZSBuZXh0IHZlcnNpb24KK29mIEdpdC4gRG9uJ3QgdXNlIGl0LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNoLWkxOG4udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtaTE4bi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBjZjQ5YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLWkxOG4udHh0CkBAIC0wLDAgKzEsNDMgQEAKK2dpdC1zaC1pMThuKDEpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2gtaTE4biAtIEdpdCdzIGkxOG4gc2V0dXAgY29kZSBmb3Igc2hlbGwgc2NyaXB0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKycuICIkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LXNoLWkxOG4iJworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyBub3QgYSBjb21tYW5kIHRoZSBlbmQgdXNlciB3b3VsZCB3YW50IHRvIHJ1bi4gIEV2ZXIuCitUaGlzIGRvY3VtZW50YXRpb24gaXMgbWVhbnQgZm9yIHBlb3BsZSB3aG8gYXJlIHN0dWR5aW5nIHRoZQorUG9yY2VsYWluLWlzaCBzY3JpcHRzIGFuZC9vciBhcmUgd3JpdGluZyBuZXcgb25lcy4KKworVGhlICdnaXQgc2gtaTE4biBzY3JpcHRsZXQgaXMgZGVzaWduZWQgdG8gYmUgc291cmNlZCAodXNpbmcKK2AuYCkgYnkgR2l0J3MgcG9yY2VsYWluIHByb2dyYW1zIGltcGxlbWVudGVkIGluIHNoZWxsCitzY3JpcHQuIEl0IHByb3ZpZGVzIHdyYXBwZXJzIGZvciB0aGUgR05VIGBnZXR0ZXh0YCBhbmQKK2BldmFsX2dldHRleHRgIGZ1bmN0aW9ucyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBnZXR0ZXh0LnNoYAorc2NyaXB0LCBhbmQgcHJvdmlkZXMgcGFzcy10aHJvdWdoIGZhbGxiYWNrcyBvbiBzeXN0ZW1zCit3aXRob3V0IEdOVSBnZXR0ZXh0LgorCitGVU5DVElPTlMKKy0tLS0tLS0tLQorCitnZXR0ZXh0OjoKKwlDdXJyZW50bHkgYSBkdW1teSBmYWxsLXRocm91Z2ggZnVuY3Rpb24gaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyCisJYXJvdW5kIGBwcmludGYoMSlgLiBXaWxsIGJlIHJlcGxhY2VkIGJ5IGEgcmVhbCBnZXR0ZXh0CisJaW1wbGVtZW50YXRpb24gaW4gYSBsYXRlciB2ZXJzaW9uLgorCitldmFsX2dldHRleHQ6OgorCUN1cnJlbnRseSBhIGR1bW15IGZhbGwtdGhyb3VnaCBmdW5jdGlvbiBpbXBsZW1lbnRlZCBhcyBhIHdyYXBwZXIKKwlhcm91bmQgYHByaW50ZigxKWAgd2l0aCB2YXJpYWJsZXMgZXhwYW5kZWQgYnkgdGhlCisJbGlua2dpdDpnaXQtc2gtaTE4bntsaXRkZH1lbnZzdWJzdFsxXSBoZWxwZXIuIFdpbGwgYmUgcmVwbGFjZWQgYnkgYQorCXJlYWwgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbiBpbiBhIGxhdGVyIHZlcnNpb24uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2gtc2V0dXAudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtc2V0dXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNWYxYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaC1zZXR1cC50eHQKQEAgLTAsMCArMSw4NyBAQAorZ2l0LXNoLXNldHVwKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNoLXNldHVwIC0gQ29tbW9uIGdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKycuICIkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LXNoLXNldHVwIicKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgbm90IGEgY29tbWFuZCB0aGUgZW5kIHVzZXIgd291bGQgd2FudCB0byBydW4uICBFdmVyLgorVGhpcyBkb2N1bWVudGF0aW9uIGlzIG1lYW50IGZvciBwZW9wbGUgd2hvIGFyZSBzdHVkeWluZyB0aGUKK1BvcmNlbGFpbi1pc2ggc2NyaXB0cyBhbmQvb3IgYXJlIHdyaXRpbmcgbmV3IG9uZXMuCisKK1RoZSAnZ2l0IHNoLXNldHVwJyBzY3JpcHRsZXQgaXMgZGVzaWduZWQgdG8gYmUgc291cmNlZCAodXNpbmcKK2AuYCkgYnkgb3RoZXIgc2hlbGwgc2NyaXB0cyB0byBzZXQgdXAgc29tZSB2YXJpYWJsZXMgcG9pbnRpbmcgYXQKK3RoZSBub3JtYWwgZ2l0IGRpcmVjdG9yaWVzIGFuZCBhIGZldyBoZWxwZXIgc2hlbGwgZnVuY3Rpb25zLgorCitCZWZvcmUgc291cmNpbmcgaXQsIHlvdXIgc2NyaXB0IHNob3VsZCBzZXQgdXAgYSBmZXcgdmFyaWFibGVzOworYFVTQUdFYCAoYW5kIGBMT05HX1VTQUdFYCwgaWYgYW55KSBpcyB1c2VkIHRvIGRlZmluZSBtZXNzYWdlCitnaXZlbiBieSBgdXNhZ2UoKWAgc2hlbGwgZnVuY3Rpb24uICBgU1VCRElSRUNUT1JZX09LYCBjYW4gYmUgc2V0CitpZiB0aGUgc2NyaXB0IGNhbiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgd29ya2luZyB0cmVlCisoc29tZSBjb21tYW5kcyBkbyBub3QpLgorCitUaGUgc2NyaXB0bGV0IHNldHMgYEdJVF9ESVJgIGFuZCBgR0lUX09CSkVDVF9ESVJFQ1RPUllgIHNoZWxsCit2YXJpYWJsZXMsIGJ1dCBkb2VzICpub3QqIGV4cG9ydCB0aGVtIHRvIHRoZSBlbnZpcm9ubWVudC4KKworRlVOQ1RJT05TCistLS0tLS0tLS0KKworZGllOjoKKwlleGl0IGFmdGVyIGVtaXR0aW5nIHRoZSBzdXBwbGllZCBlcnJvciBtZXNzYWdlIHRvIHRoZQorCXN0YW5kYXJkIGVycm9yIHN0cmVhbS4KKwordXNhZ2U6OgorCWRpZSB3aXRoIHRoZSB1c2FnZSBtZXNzYWdlLgorCitzZXRfcmVmbG9nX2FjdGlvbjo6CisJc2V0IHRoZSBtZXNzYWdlIHRoYXQgd2lsbCBiZSByZWNvcmRlZCB0byBkZXNjcmliZSB0aGUKKwllbmQtdXNlciBhY3Rpb24gaW4gdGhlIHJlZmxvZywgd2hlbiB0aGUgc2NyaXB0IHVwZGF0ZXMgYQorCXJlZi4KKworZ2l0X2VkaXRvcjo6CisJcnVucyBhbiBlZGl0b3Igb2YgdXNlcidzIGNob2ljZSAoR0lUX0VESVRPUiwgY29yZS5lZGl0b3IsIFZJU1VBTCBvcgorCUVESVRPUikgb24gYSBnaXZlbiBmaWxlLCBidXQgZXJyb3Igb3V0IGlmIG5vIGVkaXRvciBpcyBzcGVjaWZpZWQKKwlhbmQgdGhlIHRlcm1pbmFsIGlzIGR1bWIuCisKK2lzX2JhcmVfcmVwb3NpdG9yeTo6CisJb3V0cHV0cyBgdHJ1ZWAgb3IgYGZhbHNlYCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbQorCXRvIGluZGljYXRlIGlmIHRoZSByZXBvc2l0b3J5IGlzIGEgYmFyZSByZXBvc2l0b3J5CisJKGkuZS4gd2l0aG91dCBhbiBhc3NvY2lhdGVkIHdvcmtpbmcgdHJlZSkuCisKK2NkX3RvX3RvcGxldmVsOjoKKwlydW5zIGNoZGlyIHRvIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLgorCityZXF1aXJlX3dvcmtfdHJlZTo6CisJY2hlY2tzIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyB3aXRoaW4gdGhlIHdvcmtpbmcgdHJlZQorCW9mIHRoZSByZXBvc2l0b3J5LCBhbmQgb3RoZXJ3aXNlIGRpZXMuCisKK3JlcXVpcmVfd29ya190cmVlX2V4aXN0czo6CisJY2hlY2tzIGlmIHRoZSB3b3JraW5nIHRyZWUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXBvc2l0b3J5CisJZXhpc3RzLCBhbmQgb3RoZXJ3aXNlIGRpZXMuICBPZnRlbiBkb25lIGJlZm9yZSBjYWxsaW5nCisJY2RfdG9fdG9wbGV2ZWwsIHdoaWNoIGlzIGltcG9zc2libGUgdG8gZG8gaWYgdGhlcmUgaXMgbm8KKwl3b3JraW5nIHRyZWUuCisKK3JlcXVpcmVfY2xlYW5fd29ya190cmVlIDxhY3Rpb24+IFs8aGludD5dOjoKKwljaGVja3MgdGhhdCB0aGUgd29ya2luZyB0cmVlIGFuZCBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlCisJcmVwb3NpdG9yeSBoYXZlIG5vIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gdHJhY2tlZCBmaWxlcy4KKwlPdGhlcndpc2UgaXQgZW1pdHMgYW4gZXJyb3IgbWVzc2FnZSBvZiB0aGUgZm9ybSBgQ2Fubm90CisJPGFjdGlvbj46IDxyZWFzb24+LiA8aGludD5gLCBhbmQgZGllcy4gIEV4YW1wbGU6CisrCistLS0tLS0tLS0tLS0tLS0tCityZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSByZWJhc2UgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCistLS0tLS0tLS0tLS0tLS0tCisKK2dldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQ6OgorCW91dHB1dHMgY29kZSBmb3IgdXNlIHdpdGggZXZhbCB0byBzZXQgdGhlIEdJVF9BVVRIT1JfTkFNRSwKKwlHSVRfQVVUSE9SX0VNQUlMIGFuZCBHSVRfQVVUSE9SX0RBVEUgdmFyaWFibGVzIGZvciBhIGdpdmVuIGNvbW1pdC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI5MjUwNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNoZWxsLnR4dApAQCAtMCwwICsxLDM0IEBACitnaXQtc2hlbGwoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2hlbGwgLSBSZXN0cmljdGVkIGxvZ2luIHNoZWxsIGZvciBHaXQtb25seSBTU0ggYWNjZXNzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNoZWxsJyBbLWMgPGNvbW1hbmQ+IDxhcmd1bWVudD5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitBIGxvZ2luIHNoZWxsIGZvciBTU0ggYWNjb3VudHMgdG8gcHJvdmlkZSByZXN0cmljdGVkIEdpdCBhY2Nlc3MuIFdoZW4KKyctYycgaXMgZ2l2ZW4sIHRoZSBwcm9ncmFtIGV4ZWN1dGVzIDxjb21tYW5kPiBub24taW50ZXJhY3RpdmVseTsKKzxjb21tYW5kPiBjYW4gYmUgb25lIG9mICdnaXQgcmVjZWl2ZS1wYWNrJywgJ2dpdCB1cGxvYWQtcGFjaycsICdnaXQKK3VwbG9hZC1hcmNoaXZlJywgJ2N2cyBzZXJ2ZXInLCBvciBhIGNvbW1hbmQgaW4gQ09NTUFORF9ESVIuIFRoZSBzaGVsbAoraXMgc3RhcnRlZCBpbiBpbnRlcmFjdGl2ZSBtb2RlIHdoZW4gbm8gYXJndW1lbnRzIGFyZSBnaXZlbjsgaW4gdGhpcworY2FzZSwgQ09NTUFORF9ESVIgbXVzdCBleGlzdCwgYW5kIGFueSBvZiB0aGUgZXhlY3V0YWJsZXMgaW4gaXQgY2FuIGJlCitpbnZva2VkLgorCisnY3ZzIHNlcnZlcicgaXMgYSBzcGVjaWFsIGNvbW1hbmQgd2hpY2ggZXhlY3V0ZXMgZ2l0LWN2c3NlcnZlci4KKworQ09NTUFORF9ESVIgaXMgdGhlIHBhdGggIiRIT01FL2dpdC1zaGVsbC1jb21tYW5kcyIuIFRoZSB1c2VyIG11c3QgaGF2ZQorcmVhZCBhbmQgZXhlY3V0ZSBwZXJtaXNzaW9ucyB0byB0aGUgZGlyZWN0b3J5IGluIG9yZGVyIHRvIGV4ZWN1dGUgdGhlCitwcm9ncmFtcyBpbiBpdC4gVGhlIHByb2dyYW1zIGFyZSBleGVjdXRlZCB3aXRoIGEgY3dkIG9mICRIT01FLCBhbmQKKzxhcmd1bWVudD4gaXMgcGFyc2VkIGFzIGEgY29tbWFuZC1saW5lIHN0cmluZy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlYjRjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dApAQCAtMCwwICsxLDcyIEBACitnaXQtc2hvcnRsb2coMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2hvcnRsb2cgLSBTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK2dpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCAnZ2l0IHNob3J0bG9nJyBbLWhdIFstbl0gWy1zXSBbLWVdIFstd10KKydnaXQgc2hvcnRsb2cnIFstbnwtLW51bWJlcmVkXSBbLXN8LS1zdW1tYXJ5XSBbLWV8LS1lbWFpbF0gWy13Wzx3aWR0aD5bLDxpbmRlbnQxPlssPGluZGVudDI+XV1dXSA8Y29tbWl0Pi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1N1bW1hcml6ZXMgJ2dpdCBsb2cnIG91dHB1dCBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgaW5jbHVzaW9uCitpbiByZWxlYXNlIGFubm91bmNlbWVudHMuIEVhY2ggY29tbWl0IHdpbGwgYmUgZ3JvdXBlZCBieSBhdXRob3IgYW5kIHRpdGxlLgorCitBZGRpdGlvbmFsbHksICJbUEFUQ0hdIiB3aWxsIGJlIHN0cmlwcGVkIGZyb20gdGhlIGNvbW1pdCBkZXNjcmlwdGlvbi4KKworSWYgbm8gcmV2aXNpb25zIGFyZSBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgZWl0aGVyIHN0YW5kYXJkIGlucHV0CitpcyBub3QgYSB0ZXJtaW5hbCBvciB0aGVyZSBpcyBubyBjdXJyZW50IGJyYW5jaCwgJ2dpdCBzaG9ydGxvZycgd2lsbAorb3V0cHV0IGEgc3VtbWFyeSBvZiB0aGUgbG9nIHJlYWQgZnJvbSBzdGFuZGFyZCBpbnB1dCwgd2l0aG91dAorcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKworLWg6OgorLS1oZWxwOjoKKwlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCisKKy1uOjoKKy0tbnVtYmVyZWQ6OgorCVNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciBpbnN0ZWFkCisJb2YgYXV0aG9yIGFscGhhYmV0aWMgb3JkZXIuCisKKy1zOjoKKy0tc3VtbWFyeTo6CisJU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9uIGFuZCBwcm92aWRlIGEgY29tbWl0IGNvdW50IHN1bW1hcnkgb25seS4KKworLWU6OgorLS1lbWFpbDo6CisJU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvci4KKworLS1mb3JtYXRbPTxmb3JtYXQ+XTo6CisJSW5zdGVhZCBvZiB0aGUgY29tbWl0IHN1YmplY3QsIHVzZSBzb21lIG90aGVyIGluZm9ybWF0aW9uIHRvCisJZGVzY3JpYmUgZWFjaCBjb21taXQuICAnPGZvcm1hdD4nIGNhbiBiZSBhbnkgc3RyaW5nIGFjY2VwdGVkCisJYnkgdGhlIGAtLWZvcm1hdGAgb3B0aW9uIG9mICdnaXQgbG9nJywgc3VjaCBhcyAnKiBbJWhdICVzJy4KKwkoU2VlIHRoZSAiUFJFVFRZIEZPUk1BVFMiIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtbG9nWzFdLikKKworCUVhY2ggcHJldHR5LXByaW50ZWQgY29tbWl0IHdpbGwgYmUgcmV3cmFwcGVkIGJlZm9yZSBpdCBpcyBzaG93bi4KKworLXdbPHdpZHRoPlssPGluZGVudDE+Wyw8aW5kZW50Mj5dXV06OgorCUxpbmV3cmFwIHRoZSBvdXRwdXQgYnkgd3JhcHBpbmcgZWFjaCBsaW5lIGF0IGB3aWR0aGAuICBUaGUgZmlyc3QKKwlsaW5lIG9mIGVhY2ggZW50cnkgaXMgaW5kZW50ZWQgYnkgYGluZGVudDFgIHNwYWNlcywgYW5kIHRoZSBzZWNvbmQKKwlhbmQgc3Vic2VxdWVudCBsaW5lcyBhcmUgaW5kZW50ZWQgYnkgYGluZGVudDJgIHNwYWNlcy4gYHdpZHRoYCwKKwlgaW5kZW50MWAsIGFuZCBgaW5kZW50MmAgZGVmYXVsdCB0byA3NiwgNiBhbmQgOSByZXNwZWN0aXZlbHkuCisKKworTUFQUElORyBBVVRIT1JTCistLS0tLS0tLS0tLS0tLS0KKworVGhlIGAubWFpbG1hcGAgZmVhdHVyZSBpcyB1c2VkIHRvIGNvYWxlc2NlIHRvZ2V0aGVyIGNvbW1pdHMgYnkgdGhlIHNhbWUKK3BlcnNvbiBpbiB0aGUgc2hvcnRsb2csIHdoZXJlIHRoZWlyIG5hbWUgYW5kL29yIGVtYWlsIGFkZHJlc3Mgd2FzCitzcGVsbGVkIGRpZmZlcmVudGx5LgorCitpbmNsdWRlOjptYWlsbWFwLnR4dFtdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZTc3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKQEAgLTAsMCArMSwyMDQgQEAKK2dpdC1zaG93LWJyYW5jaCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaG93LWJyYW5jaCAtIFNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNob3ctYnJhbmNoJyBbLWF8LS1hbGxdIFstcnwtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdCisJCVstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXQorCQlbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdCisJCVstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXQorCQlbKDxyZXY+IHwgPGdsb2I+KS4uLl0KKydnaXQgc2hvdy1icmFuY2gnICgtZ3wtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworU2hvd3MgdGhlIGNvbW1pdCBhbmNlc3RyeSBncmFwaCBzdGFydGluZyBmcm9tIHRoZSBjb21taXRzIG5hbWVkCit3aXRoIDxyZXY+cyBvciA8Z2xvYnM+cyAob3IgYWxsIHJlZnMgdW5kZXIgcmVmcy9oZWFkcworYW5kL29yIHJlZnMvdGFncykgc2VtaS12aXN1YWxseS4KKworSXQgY2Fubm90IHNob3cgbW9yZSB0aGFuIDI5IGJyYW5jaGVzIGFuZCBjb21taXRzIGF0IGEgdGltZS4KKworSXQgdXNlcyBgc2hvd2JyYW5jaC5kZWZhdWx0YCBtdWx0aS12YWx1ZWQgY29uZmlndXJhdGlvbiBpdGVtcyBpZgorbm8gPHJldj4gbm9yIDxnbG9iPiBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisKK09QVElPTlMKKy0tLS0tLS0KKzxyZXY+OjoKKwlBcmJpdHJhcnkgZXh0ZW5kZWQgU0hBMSBleHByZXNzaW9uIChzZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10pCisJdGhhdCB0eXBpY2FsbHkgbmFtZXMgYSBicmFuY2ggaGVhZCBvciBhIHRhZy4KKworPGdsb2I+OjoKKwlBIGdsb2IgcGF0dGVybiB0aGF0IG1hdGNoZXMgYnJhbmNoIG9yIHRhZyBuYW1lcyB1bmRlcgorCXJlZnMvLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIG1hbnkgdG9waWMKKwlicmFuY2hlcyB1bmRlciByZWZzL2hlYWRzL3RvcGljLCBnaXZpbmcKKwlgdG9waWMvKmAgd291bGQgc2hvdyBhbGwgb2YgdGhlbS4KKworLXI6OgorLS1yZW1vdGVzOjoKKwlTaG93IHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisKKy1hOjoKKy0tYWxsOjoKKwlTaG93IGJvdGggcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGFuZCBsb2NhbCBicmFuY2hlcy4KKworLS1jdXJyZW50OjoKKwlXaXRoIHRoaXMgb3B0aW9uLCB0aGUgY29tbWFuZCBpbmNsdWRlcyB0aGUgY3VycmVudAorCWJyYW5jaCB0byB0aGUgbGlzdCBvZiByZXZzIHRvIGJlIHNob3duIHdoZW4gaXQgaXMgbm90CisJZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKworLS10b3BvLW9yZGVyOjoKKyAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGJyYW5jaGVzIGFuZCB0aGVpciBjb21taXRzIGFyZSBzaG93biBpbgorICAgICAgICByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuICBUaGlzIG9wdGlvbiBtYWtlcyB0aGVtCisgICAgICAgIGFwcGVhciBpbiB0b3BvbG9naWNhbCBvcmRlciAoaS5lLiwgZGVzY2VuZGFudCBjb21taXRzCisgICAgICAgIGFyZSBzaG93biBiZWZvcmUgdGhlaXIgcGFyZW50cykuCisKKy0tZGF0ZS1vcmRlcjo6CisJVGhpcyBvcHRpb24gaXMgc2ltaWxhciB0byAnLS10b3BvLW9yZGVyJyBpbiB0aGUgc2Vuc2UgdGhhdCBubworCXBhcmVudCBjb21lcyBiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYnV0IG90aGVyd2lzZSBjb21taXRzCisJYXJlIG9yZGVyZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGNvbW1pdCBkYXRlLgorCistLXNwYXJzZTo6CisJQnkgZGVmYXVsdCwgdGhlIG91dHB1dCBvbWl0cyBtZXJnZXMgdGhhdCBhcmUgcmVhY2hhYmxlCisJZnJvbSBvbmx5IG9uZSB0aXAgYmVpbmcgc2hvd24uICBUaGlzIG9wdGlvbiBtYWtlcyB0aGVtCisJdmlzaWJsZS4KKworLS1tb3JlPTxuPjo6CisJVXN1YWxseSB0aGUgY29tbWFuZCBzdG9wcyBvdXRwdXQgdXBvbiBzaG93aW5nIHRoZSBjb21taXQKKwl0aGF0IGlzIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgYWxsIHRoZSBicmFuY2hlcy4gIFRoaXMKKwlmbGFnIHRlbGxzIHRoZSBjb21tYW5kIHRvIGdvIDxuPiBtb3JlIGNvbW1vbiBjb21taXRzCisJYmV5b25kIHRoYXQuICBXaGVuIDxuPiBpcyBuZWdhdGl2ZSwgZGlzcGxheSBvbmx5IHRoZQorCTxyZWZlcmVuY2U+cyBnaXZlbiwgd2l0aG91dCBzaG93aW5nIHRoZSBjb21taXQgYW5jZXN0cnkKKwl0cmVlLgorCistLWxpc3Q6OgorCVN5bm9ueW0gdG8gYC0tbW9yZT0tMWAKKworLS1tZXJnZS1iYXNlOjoKKwlJbnN0ZWFkIG9mIHNob3dpbmcgdGhlIGNvbW1pdCBsaXN0LCBkZXRlcm1pbmUgcG9zc2libGUKKwltZXJnZSBiYXNlcyBmb3IgdGhlIHNwZWNpZmllZCBjb21taXRzLiBBbGwgbWVyZ2UgYmFzZXMKKwl3aWxsIGJlIGNvbnRhaW5lZCBpbiBhbGwgc3BlY2lmaWVkIGNvbW1pdHMuIFRoaXMgaXMKKwlkaWZmZXJlbnQgZnJvbSBob3cgbGlua2dpdDpnaXQtbWVyZ2UtYmFzZVsxXSBoYW5kbGVzCisJdGhlIGNhc2Ugb2YgdGhyZWUgb3IgbW9yZSBjb21taXRzLgorCistLWluZGVwZW5kZW50OjoKKwlBbW9uZyB0aGUgPHJlZmVyZW5jZT5zIGdpdmVuLCBkaXNwbGF5IG9ubHkgdGhlIG9uZXMgdGhhdAorCWNhbm5vdCBiZSByZWFjaGVkIGZyb20gYW55IG90aGVyIDxyZWZlcmVuY2U+LgorCistLW5vLW5hbWU6OgorCURvIG5vdCBzaG93IG5hbWluZyBzdHJpbmdzIGZvciBlYWNoIGNvbW1pdC4KKworLS1zaGExLW5hbWU6OgorCUluc3RlYWQgb2YgbmFtaW5nIHRoZSBjb21taXRzIHVzaW5nIHRoZSBwYXRoIHRvIHJlYWNoCisJdGhlbSBmcm9tIGhlYWRzIChlLmcuICJtYXN0ZXJ+MiIgdG8gbWVhbiB0aGUgZ3JhbmRwYXJlbnQKKwlvZiAibWFzdGVyIiksIG5hbWUgdGhlbSB3aXRoIHRoZSB1bmlxdWUgcHJlZml4IG9mIHRoZWlyCisJb2JqZWN0IG5hbWVzLgorCistLXRvcGljczo6CisJU2hvd3Mgb25seSBjb21taXRzIHRoYXQgYXJlIE5PVCBvbiB0aGUgZmlyc3QgYnJhbmNoIGdpdmVuLgorCVRoaXMgaGVscHMgdHJhY2sgdG9waWMgYnJhbmNoZXMgYnkgaGlkaW5nIGFueSBjb21taXQgdGhhdAorCWlzIGFscmVhZHkgaW4gdGhlIG1haW4gbGluZSBvZiBkZXZlbG9wbWVudC4gIFdoZW4gZ2l2ZW4KKwkiZ2l0IHNob3ctYnJhbmNoIC0tdG9waWNzIG1hc3RlciB0b3BpYzEgdG9waWMyIiwgdGhpcworCXdpbGwgc2hvdyB0aGUgcmV2aXNpb25zIGdpdmVuIGJ5ICJnaXQgcmV2LWxpc3Qge2NhcmV0fW1hc3RlcgorCXRvcGljMSB0b3BpYzIiCisKKy1nOjoKKy0tcmVmbG9nWz08bj5bLDxiYXNlPl1dIFs8cmVmPl06OgorCVNob3dzIDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgZm9yIHRoZSBnaXZlbgorCXJlZi4gIElmIDxiYXNlPiBpcyBnaXZlbiwgPG4+IGVudHJpZXMgZ29pbmcgYmFjayBmcm9tCisJdGhhdCBlbnRyeS4gIDxiYXNlPiBjYW4gYmUgc3BlY2lmaWVkIGFzIGNvdW50IG9yIGRhdGUuCisJV2hlbiBubyBleHBsaWNpdCA8cmVmPiBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvIHRoZQorCWN1cnJlbnQgYnJhbmNoIChvciBgSEVBRGAgaWYgaXQgaXMgZGV0YWNoZWQpLgorCistLWNvbG9yWz08d2hlbj5dOjoKKwlDb2xvciB0aGUgc3RhdHVzIHNpZ24gKG9uZSBvZiB0aGVzZTogYCpgIGAhYCBgK2AgYC1gKSBvZiBlYWNoIGNvbW1pdAorCWNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCBpdCdzIGluLgorCVRoZSB2YWx1ZSBtdXN0IGJlIGFsd2F5cyAodGhlIGRlZmF1bHQpLCBuZXZlciwgb3IgYXV0by4KKworLS1uby1jb2xvcjo6CisJVHVybiBvZmYgY29sb3JlZCBvdXRwdXQsIGV2ZW4gd2hlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGdpdmVzIHRoZQorCWRlZmF1bHQgdG8gY29sb3Igb3V0cHV0LgorCVNhbWUgYXMgYC0tY29sb3I9bmV2ZXJgLgorCitOb3RlIHRoYXQgLS1tb3JlLCAtLWxpc3QsIC0taW5kZXBlbmRlbnQgYW5kIC0tbWVyZ2UtYmFzZSBvcHRpb25zCithcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorCisKK09VVFBVVAorLS0tLS0tCitHaXZlbiBOIDxyZWZlcmVuY2VzPiwgdGhlIGZpcnN0IE4gbGluZXMgYXJlIHRoZSBvbmUtbGluZQorZGVzY3JpcHRpb24gZnJvbSB0aGVpciBjb21taXQgbWVzc2FnZS4gIFRoZSBicmFuY2ggaGVhZCB0aGF0IGlzCitwb2ludGVkIGF0IGJ5ICRHSVRfRElSL0hFQUQgaXMgcHJlZml4ZWQgd2l0aCBhbiBhc3RlcmlzayBgKmAKK2NoYXJhY3RlciB3aGlsZSBvdGhlciBoZWFkcyBhcmUgcHJlZml4ZWQgd2l0aCBhIGAhYCBjaGFyYWN0ZXIuCisKK0ZvbGxvd2luZyB0aGVzZSBOIGxpbmVzLCBvbmUtbGluZSBsb2cgZm9yIGVhY2ggY29tbWl0IGlzCitkaXNwbGF5ZWQsIGluZGVudGVkIE4gcGxhY2VzLiAgSWYgYSBjb21taXQgaXMgb24gdGhlIEktdGgKK2JyYW5jaCwgdGhlIEktdGggaW5kZW50YXRpb24gY2hhcmFjdGVyIHNob3dzIGEgYCtgIHNpZ247CitvdGhlcndpc2UgaXQgc2hvd3MgYSBzcGFjZS4gIE1lcmdlIGNvbW1pdHMgYXJlIGRlbm90ZWQgYnkKK2EgYC1gIHNpZ24uICBFYWNoIGNvbW1pdCBzaG93cyBhIHNob3J0IG5hbWUgdGhhdAorY2FuIGJlIHVzZWQgYXMgYW4gZXh0ZW5kZWQgU0hBMSB0byBuYW1lIHRoYXQgY29tbWl0LgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhyZWUgYnJhbmNoZXMsICJtYXN0ZXIiLCAiZml4ZXMiCithbmQgIm1oZiI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1icmFuY2ggbWFzdGVyIGZpeGVzIG1oZgorKiBbbWFzdGVyXSBBZGQgJ2dpdCBzaG93LWJyYW5jaCcuCisgISBbZml4ZXNdIEludHJvZHVjZSAicmVzZXQgdHlwZSIgZmxhZyB0byAiZ2l0IHJlc2V0IgorICAhIFttaGZdIEFsbG93ICIrcmVtb3RlOmxvY2FsIiByZWZzcGVjIHRvIGNhdXNlIC0tZm9yY2Ugd2hlbiBmZXRjaGluZy4KKy0tLQorICArIFttaGZdIEFsbG93ICIrcmVtb3RlOmxvY2FsIiByZWZzcGVjIHRvIGNhdXNlIC0tZm9yY2Ugd2hlbiBmZXRjaGluZy4KKyAgKyBbbWhmfjFdIFVzZSBnaXQtb2N0b3B1cyB3aGVuIHB1bGxpbmcgbW9yZSB0aGFuIG9uZSBoZWFkcy4KKyArICBbZml4ZXNdIEludHJvZHVjZSAicmVzZXQgdHlwZSIgZmxhZyB0byAiZ2l0IHJlc2V0IgorICArIFttaGZ+Ml0gImdpdCBmZXRjaCAtLWZvcmNlIi4KKyAgKyBbbWhmfjNdIFVzZSAuZ2l0L3JlbW90ZS9vcmlnaW4sIG5vdCAuZ2l0L2JyYW5jaGVzL29yaWdpbi4KKyAgKyBbbWhmfjRdIE1ha2UgImdpdCBwdWxsIiBhbmQgImdpdCBmZXRjaCIgZGVmYXVsdCB0byBvcmlnaW4KKyAgKyBbbWhmfjVdIEluZmFtb3VzICdvY3RvcHVzIG1lcmdlJworICArIFttaGZ+Nl0gUmV0aXJlIGdpdC1wYXJzZS1yZW1vdGUuCisgICsgW21oZn43XSBNdWx0aS1oZWFkIGZldGNoLgorICArIFttaGZ+OF0gU3RhcnQgYWRkaW5nIHRoZSAkR0lUX0RJUi9yZW1vdGVzLyBzdXBwb3J0LgorKisrIFttYXN0ZXJdIEFkZCAnZ2l0IHNob3ctYnJhbmNoJy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSB0aHJlZSBicmFuY2hlcyBhbGwgZm9ya2VkIGZyb20gYSBjb21tb24gY29tbWl0LCBbbWFzdGVyXSwKK3dob3NlIGNvbW1pdCBtZXNzYWdlIGlzICJBZGQge2Fwb3N0cm9waGV9Z2l0IHNob3ctYnJhbmNoe2Fwb3N0cm9waGV9Ii4KK1RoZSAiZml4ZXMiIGJyYW5jaCBhZGRzIG9uZSBjb21taXQgIkludHJvZHVjZSAicmVzZXQgdHlwZSIgZmxhZyB0bworImdpdCByZXNldCIiLiBUaGUgIm1oZiIgYnJhbmNoIGFkZHMgbWFueSBvdGhlciBjb21taXRzLgorVGhlIGN1cnJlbnQgYnJhbmNoIGlzICJtYXN0ZXIiLgorCisKK0VYQU1QTEUKKy0tLS0tLS0KKworSWYgeW91IGtlZXAgeW91ciBwcmltYXJ5IGJyYW5jaGVzIGltbWVkaWF0ZWx5IHVuZGVyCitgcmVmcy9oZWFkc2AsIGFuZCB0b3BpYyBicmFuY2hlcyBpbiBzdWJkaXJlY3RvcmllcyBvZgoraXQsIGhhdmluZyB0aGUgZm9sbG93aW5nIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgbWF5IGhlbHA6CisKKy0tLS0tLS0tLS0tLQorW3Nob3dicmFuY2hdCisJZGVmYXVsdCA9IC0tdG9wby1vcmRlcgorCWRlZmF1bHQgPSBoZWFkcy8qCisKKy0tLS0tLS0tLS0tLQorCitXaXRoIHRoaXMsIGBnaXQgc2hvdy1icmFuY2hgIHdpdGhvdXQgZXh0cmEgcGFyYW1ldGVycyB3b3VsZCBzaG93Citvbmx5IHRoZSBwcmltYXJ5IGJyYW5jaGVzLiAgSW4gYWRkaXRpb24sIGlmIHlvdSBoYXBwZW4gdG8gYmUgb24KK3lvdXIgdG9waWMgYnJhbmNoLCBpdCBpcyBzaG93biBhcyB3ZWxsLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoIC0tcmVmbG9nPSIxMCwxIGhvdXIgYWdvIiAtLWxpc3QgbWFzdGVyCistLS0tLS0tLS0tLS0KKworc2hvd3MgMTAgcmVmbG9nIGVudHJpZXMgZ29pbmcgYmFjayBmcm9tIHRoZSB0aXAgYXMgb2YgMSBob3VyIGFnby4KK1dpdGhvdXQgYC0tbGlzdGAsIHRoZSBvdXRwdXQgYWxzbyBzaG93cyBob3cgdGhlc2UgdGlwcyBhcmUKK3RvcG9sb2dpY2FsbHkgcmVsYXRlZCB3aXRoIGVhY2ggb3RoZXIuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWluZGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGNiYmIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1pbmRleC50eHQKQEAgLTAsMCArMSwyNiBAQAorZ2l0LXNob3ctaW5kZXgoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaG93LWluZGV4IC0gU2hvdyBwYWNrZWQgYXJjaGl2ZSBpbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzaG93LWluZGV4JyA8IGlkeC1maWxlCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBnaXZlbiBpZHggZmlsZSBmb3IgcGFja2VkIGdpdCBhcmNoaXZlIGNyZWF0ZWQgd2l0aAorJ2dpdCBwYWNrLW9iamVjdHMnIGNvbW1hbmQsIGFuZCBkdW1wcyBpdHMgY29udGVudHMuCisKK1RoZSBpbmZvcm1hdGlvbiBpdCBvdXRwdXRzIGlzIHN1YnNldCBvZiB3aGF0IHlvdSBjYW4gZ2V0IGZyb20KKydnaXQgdmVyaWZ5LXBhY2sgLXYnOyB0aGlzIGNvbW1hbmQgb25seSBzaG93cyB0aGUgcGFja2ZpbGUKK29mZnNldCBhbmQgU0hBMSBvZiBlYWNoIG9iamVjdC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiY2Q0NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dApAQCAtMCwwICsxLDE4MiBAQAorZ2l0LXNob3ctcmVmKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNob3ctcmVmIC0gTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2hvdy1yZWYnIFstcXwtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZHwtLWRlcmVmZXJlbmNlXQorCSAgICAgWy1zfC0taGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXQorCSAgICAgWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0KKydnaXQgc2hvdy1yZWYnIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSA8IHJlZi1saXN0CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitEaXNwbGF5cyByZWZlcmVuY2VzIGF2YWlsYWJsZSBpbiBhIGxvY2FsIHJlcG9zaXRvcnkgYWxvbmcgd2l0aCB0aGUgYXNzb2NpYXRlZAorY29tbWl0IElEcy4gUmVzdWx0cyBjYW4gYmUgZmlsdGVyZWQgdXNpbmcgYSBwYXR0ZXJuIGFuZCB0YWdzIGNhbiBiZQorZGVyZWZlcmVuY2VkIGludG8gb2JqZWN0IElEcy4gQWRkaXRpb25hbGx5LCBpdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHdoZXRoZXIgYQorcGFydGljdWxhciByZWYgZXhpc3RzLgorCitUaGUgLS1leGNsdWRlLWV4aXN0aW5nIGZvcm0gaXMgYSBmaWx0ZXIgdGhhdCBkb2VzIHRoZSBpbnZlcnNlLCBpdCBzaG93cyB0aGUKK3JlZnMgZnJvbSBzdGRpbiB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBsb2NhbCByZXBvc2l0b3J5LgorCitVc2Ugb2YgdGhpcyB1dGlsaXR5IGlzIGVuY291cmFnZWQgaW4gZmF2b3Igb2YgZGlyZWN0bHkgYWNjZXNzaW5nIGZpbGVzIHVuZGVyCit0aGUgYC5naXRgIGRpcmVjdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorCistLWhlYWQ6OgorCisJU2hvdyB0aGUgSEVBRCByZWZlcmVuY2UuCisKKy0tdGFnczo6CistLWhlYWRzOjoKKworCUxpbWl0IHRvIG9ubHkgInJlZnMvaGVhZHMiIGFuZCAicmVmcy90YWdzIiwgcmVzcGVjdGl2ZWx5LiAgVGhlc2UKKwlvcHRpb25zIGFyZSBub3QgbXV0dWFsbHkgZXhjbHVzaXZlOyB3aGVuIGdpdmVuIGJvdGgsIHJlZmVyZW5jZXMgc3RvcmVkCisJaW4gInJlZnMvaGVhZHMiIGFuZCAicmVmcy90YWdzIiBhcmUgZGlzcGxheWVkLgorCistZDo6CistLWRlcmVmZXJlbmNlOjoKKworCURlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIGFzIHdlbGwuIFRoZXkgd2lsbCBiZSBzaG93biB3aXRoICJ7Y2FyZXR9e30iCisJYXBwZW5kZWQuCisKKy1zOjoKKy0taGFzaFs9PG4+XTo6CisKKwlPbmx5IHNob3cgdGhlIFNIQTEgaGFzaCwgbm90IHRoZSByZWZlcmVuY2UgbmFtZS4gV2hlbiBjb21iaW5lZCB3aXRoCisJLS1kZXJlZmVyZW5jZSB0aGUgZGVyZWZlcmVuY2VkIHRhZyB3aWxsIHN0aWxsIGJlIHNob3duIGFmdGVyIHRoZSBTSEExLgorCistLXZlcmlmeTo6CisKKwlFbmFibGUgc3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nIGJ5IHJlcXVpcmluZyBhbiBleGFjdCByZWYgcGF0aC4KKwlBc2lkZSBmcm9tIHJldHVybmluZyBhbiBlcnJvciBjb2RlIG9mIDEsIGl0IHdpbGwgYWxzbyBwcmludCBhbiBlcnJvcgorCW1lc3NhZ2UgaWYgJy0tcXVpZXQnIHdhcyBub3Qgc3BlY2lmaWVkLgorCistLWFiYnJldls9PG4+XTo6CisKKwlBYmJyZXZpYXRlIHRoZSBvYmplY3QgbmFtZS4gIFdoZW4gdXNpbmcgYC0taGFzaGAsIHlvdSBkbworCW5vdCBoYXZlIHRvIHNheSBgLS1oYXNoIC0tYWJicmV2YDsgYC0taGFzaD1uYCB3b3VsZCBkby4KKworLXE6OgorLS1xdWlldDo6CisKKwlEbyBub3QgcHJpbnQgYW55IHJlc3VsdHMgdG8gc3Rkb3V0LiBXaGVuIGNvbWJpbmVkIHdpdGggJy0tdmVyaWZ5JyB0aGlzCisJY2FuIGJlIHVzZWQgdG8gc2lsZW50bHkgY2hlY2sgaWYgYSByZWZlcmVuY2UgZXhpc3RzLgorCistLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl06OgorCisJTWFrZSAnZ2l0IHNob3ctcmVmJyBhY3QgYXMgYSBmaWx0ZXIgdGhhdCByZWFkcyByZWZzIGZyb20gc3RkaW4gb2YgdGhlCisJZm9ybSAiYF4oPzo8YW55dGhpbmc+XHMpPzxyZWZuYW1lPig/Olxee30pPyRgIgorCWFuZCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGFjdGlvbnMgb24gZWFjaDoKKwkoMSkgc3RyaXAgIntjYXJldH17fSIgYXQgdGhlIGVuZCBvZiBsaW5lIGlmIGFueTsKKwkoMikgaWdub3JlIGlmIHBhdHRlcm4gaXMgcHJvdmlkZWQgYW5kIGRvZXMgbm90IGhlYWQtbWF0Y2ggcmVmbmFtZTsKKwkoMykgd2FybiBpZiByZWZuYW1lIGlzIG5vdCBhIHdlbGwtZm9ybWVkIHJlZm5hbWUgYW5kIHNraXA7CisJKDQpIGlnbm9yZSBpZiByZWZuYW1lIGlzIGEgcmVmIHRoYXQgZXhpc3RzIGluIHRoZSBsb2NhbCByZXBvc2l0b3J5OworCSg1KSBvdGhlcndpc2Ugb3V0cHV0IHRoZSBsaW5lLgorCisKKzxwYXR0ZXJuPi4uLjo6CisKKwlTaG93IHJlZmVyZW5jZXMgbWF0Y2hpbmcgb25lIG9yIG1vcmUgcGF0dGVybnMuIFBhdHRlcm5zIGFyZSBtYXRjaGVkIGZyb20KKwl0aGUgZW5kIG9mIHRoZSBmdWxsIG5hbWUsIGFuZCBvbmx5IGNvbXBsZXRlIHBhcnRzIGFyZSBtYXRjaGVkLCBlLmcuCisJJ21hc3RlcicgbWF0Y2hlcyAncmVmcy9oZWFkcy9tYXN0ZXInLCAncmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXInLAorCSdyZWZzL3RhZ3MvamVkaS9tYXN0ZXInIGJ1dCBub3QgJ3JlZnMvaGVhZHMvbXltYXN0ZXInIG5vcgorCSdyZWZzL3JlbW90ZXMvbWFzdGVyL2plZGknLgorCitPVVRQVVQKKy0tLS0tLQorCitUaGUgb3V0cHV0IGlzIGluIHRoZSBmb3JtYXQ6ICc8U0hBLTEgSUQ+JyAnPHNwYWNlPicgJzxyZWZlcmVuY2UgbmFtZT4nLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1yZWYgLS1oZWFkIC0tZGVyZWZlcmVuY2UKKzgzMmU3NmE5ODk5ZjU2MGE5MGZmZDYyYWUyY2U4M2JiZWZmNThmNTQgSEVBRAorODMyZTc2YTk4OTlmNTYwYTkwZmZkNjJhZTJjZTgzYmJlZmY1OGY1NCByZWZzL2hlYWRzL21hc3RlcgorODMyZTc2YTk4OTlmNTYwYTkwZmZkNjJhZTJjZTgzYmJlZmY1OGY1NCByZWZzL2hlYWRzL29yaWdpbgorMzUyMTAxNzU1NmM1ZGU0MTU5ZGE0NjE1YTM5ZmE0ZDVkMmMyNzliNSByZWZzL3RhZ3MvdjAuOTkuOWMKKzZkZGMwOTY0MDM0MzQyNTE5YTg3ZmUwMTM3ODFhYmYzMWM2ZGI2YWQgcmVmcy90YWdzL3YwLjk5LjljXnt9CiswNTVlNGFlM2FlNmViMzQ0Y2JhYmYyYTUyNTZhNDllYTY2MDQwMTMxIHJlZnMvdGFncy92MS4wcmM0Cis0MjMzMjVhMmQyNDYzOGRkY2M4MmNlNDdiZTVlNDBiZTU1MGY0NTA3IHJlZnMvdGFncy92MS4wcmM0Xnt9CisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdXNpbmcgLS1oYXNoIChhbmQgbm90IC0tZGVyZWZlcmVuY2UpIHRoZSBvdXRwdXQgZm9ybWF0IGlzOiAnPFNIQS0xIElEPicKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctcmVmIC0taGVhZHMgLS1oYXNoCisyZTNiYTAxMTRhMWY1MmI0N2RmMjk3NDNkNjkxNWQwNTZiZTEzMjc4CisxODUwMDhhZTk3OTYwYzhkNTUxYWRjZDllMjM1NjUxOTQ2NTFiNWQxCiswM2FkZjQyYzk4ODE5NWI1MGUxYTE5MzViYTVmY2JjMzliMmIwMjliCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VYQU1QTEUKKy0tLS0tLS0KKworVG8gc2hvdyBhbGwgcmVmZXJlbmNlcyBjYWxsZWQgIm1hc3RlciIsIHdoZXRoZXIgdGFncyBvciBoZWFkcyBvciBhbnl0aGluZworZWxzZSwgYW5kIHJlZ2FyZGxlc3Mgb2YgaG93IGRlZXAgaW4gdGhlIHJlZmVyZW5jZSBuYW1pbmcgaGllcmFyY2h5IHRoZXkgYXJlLAordXNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWdpdCBzaG93LXJlZiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBzaG93ICJyZWZzL2hlYWRzL21hc3RlciIgYnV0IGFsc28gInJlZnMvcmVtb3RlL290aGVyLXJlcG8vbWFzdGVyIiwKK2lmIHN1Y2ggcmVmZXJlbmNlcyBleGlzdHMuCisKK1doZW4gdXNpbmcgdGhlICctLXZlcmlmeScgZmxhZywgdGhlIGNvbW1hbmQgcmVxdWlyZXMgYW4gZXhhY3QgcGF0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgb25seSBtYXRjaCB0aGUgZXhhY3QgYnJhbmNoIGNhbGxlZCAibWFzdGVyIi4KKworSWYgbm90aGluZyBtYXRjaGVzLCAnZ2l0IHNob3ctcmVmJyB3aWxsIHJldHVybiBhbiBlcnJvciBjb2RlIG9mIDEsCithbmQgaW4gdGhlIGNhc2Ugb2YgdmVyaWZpY2F0aW9uLCBpdCB3aWxsIHNob3cgYW4gZXJyb3IgbWVzc2FnZS4KKworRm9yIHNjcmlwdGluZywgeW91IGNhbiBhc2sgaXQgdG8gYmUgcXVpZXQgd2l0aCB0aGUgIi0tcXVpZXQiIGZsYWcsIHdoaWNoCithbGxvd3MgeW91IHRvIGRvIHRoaW5ncyBsaWtlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IHNob3ctcmVmIC0tcXVpZXQgLS12ZXJpZnkgLS0gInJlZnMvaGVhZHMvJGhlYWRuYW1lIiB8fAorCQllY2hvICIkaGVhZG5hbWUgaXMgbm90IGEgdmFsaWQgYnJhbmNoIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gY2hlY2sgd2hldGhlciBhIHBhcnRpY3VsYXIgYnJhbmNoIGV4aXN0cyBvciBub3QgKG5vdGljZSBob3cgd2UgZG9uJ3QKK2FjdHVhbGx5IHdhbnQgdG8gc2hvdyBhbnkgcmVzdWx0cywgYW5kIHdlIHdhbnQgdG8gdXNlIHRoZSBmdWxsIHJlZm5hbWUgZm9yIGl0CitpbiBvcmRlciB0byBub3QgdHJpZ2dlciB0aGUgcHJvYmxlbSB3aXRoIGFtYmlndW91cyBwYXJ0aWFsIG1hdGNoZXMpLgorCitUbyBzaG93IG9ubHkgdGFncywgb3Igb25seSBwcm9wZXIgYnJhbmNoIGhlYWRzLCB1c2UgIi0tdGFncyIgYW5kL29yICItLWhlYWRzIgorcmVzcGVjdGl2ZWx5ICh1c2luZyBib3RoIG1lYW5zIHRoYXQgaXQgc2hvd3MgdGFncyBhbmQgaGVhZHMsIGJ1dCBub3Qgb3RoZXIKK3JhbmRvbSByZWZlcmVuY2VzIHVuZGVyIHRoZSByZWZzLyBzdWJkaXJlY3RvcnkpLgorCitUbyBkbyBhdXRvbWF0aWMgdGFnIG9iamVjdCBkZXJlZmVyZW5jaW5nLCB1c2UgdGhlICItZCIgb3IgIi0tZGVyZWZlcmVuY2UiCitmbGFnLCBzbyB5b3UgY2FuIGRvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IHNob3ctcmVmIC0tdGFncyAtLWRlcmVmZXJlbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byBnZXQgYSBsaXN0aW5nIG9mIGFsbCB0YWdzIHRvZ2V0aGVyIHdpdGggd2hhdCB0aGV5IGRlcmVmZXJlbmNlLgorCitGSUxFUworLS0tLS0KK2AuZ2l0L3JlZnMvKmAsIGAuZ2l0L3BhY2tlZC1yZWZzYAorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWxzLXJlbW90ZVsxXSwKK2xpbmtnaXQ6Z2l0LXVwZGF0ZS1yZWZbMV0sCitsaW5rZ2l0OmdpdHJlcG9zaXRvcnktbGF5b3V0WzVdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTRlZGNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKQEAgLTAsMCArMSw3OCBAQAorZ2l0LXNob3coMSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaG93IC0gU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2hvdycgW29wdGlvbnNdIDxvYmplY3Q+Li4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU2hvd3Mgb25lIG9yIG1vcmUgb2JqZWN0cyAoYmxvYnMsIHRyZWVzLCB0YWdzIGFuZCBjb21taXRzKS4KKworRm9yIGNvbW1pdHMgaXQgc2hvd3MgdGhlIGxvZyBtZXNzYWdlIGFuZCB0ZXh0dWFsIGRpZmYuIEl0IGFsc28KK3ByZXNlbnRzIHRoZSBtZXJnZSBjb21taXQgaW4gYSBzcGVjaWFsIGZvcm1hdCBhcyBwcm9kdWNlZCBieQorJ2dpdCBkaWZmLXRyZWUgLS1jYycuCisKK0ZvciB0YWdzLCBpdCBzaG93cyB0aGUgdGFnIG1lc3NhZ2UgYW5kIHRoZSByZWZlcmVuY2VkIG9iamVjdHMuCisKK0ZvciB0cmVlcywgaXQgc2hvd3MgdGhlIG5hbWVzIChlcXVpdmFsZW50IHRvICdnaXQgbHMtdHJlZScKK3dpdGggXC0tbmFtZS1vbmx5KS4KKworRm9yIHBsYWluIGJsb2JzLCBpdCBzaG93cyB0aGUgcGxhaW4gY29udGVudHMuCisKK1RoZSBjb21tYW5kIHRha2VzIG9wdGlvbnMgYXBwbGljYWJsZSB0byB0aGUgJ2dpdCBkaWZmLXRyZWUnIGNvbW1hbmQgdG8KK2NvbnRyb2wgaG93IHRoZSBjaGFuZ2VzIHRoZSBjb21taXQgaW50cm9kdWNlcyBhcmUgc2hvd24uCisKK1RoaXMgbWFudWFsIHBhZ2UgZGVzY3JpYmVzIG9ubHkgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIG9wdGlvbnMuCisKKworT1BUSU9OUworLS0tLS0tLQorPG9iamVjdD4uLi46OgorCVRoZSBuYW1lcyBvZiBvYmplY3RzIHRvIHNob3cuCisJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgb2JqZWN0IG5hbWVzLCBzZWUKKwkiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKK2luY2x1ZGU6OnByZXR0eS1vcHRpb25zLnR4dFtdCisKKworaW5jbHVkZTo6cHJldHR5LWZvcm1hdHMudHh0W10KKworCitFWEFNUExFUworLS0tLS0tLS0KKworYGdpdCBzaG93IHYxLjAuMGA6OgorCVNob3dzIHRoZSB0YWcgYHYxLjAuMGAsIGFsb25nIHdpdGggdGhlIG9iamVjdCB0aGUgdGFncworCXBvaW50cyBhdC4KKworYGdpdCBzaG93IHYxLjAuMF57dHJlZX1gOjoKKwlTaG93cyB0aGUgdHJlZSBwb2ludGVkIHRvIGJ5IHRoZSB0YWcgYHYxLjAuMGAuCisKK2BnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyB2MS4wLjBee2NvbW1pdH1gOjoKKwlTaG93cyB0aGUgc3ViamVjdCBvZiB0aGUgY29tbWl0IHBvaW50ZWQgdG8gYnkgdGhlCisJdGFnIGB2MS4wLjBgLgorCitgZ2l0IHNob3cgbmV4dH4xMDpEb2N1bWVudGF0aW9uL1JFQURNRWA6OgorCVNob3dzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBgRG9jdW1lbnRhdGlvbi9SRUFETUVgIGFzCisJdGhleSB3ZXJlIGN1cnJlbnQgaW4gdGhlIDEwdGggbGFzdCBjb21taXQgb2YgdGhlIGJyYW5jaAorCWBuZXh0YC4KKworYGdpdCBzaG93IG1hc3RlcjpNYWtlZmlsZSBtYXN0ZXI6dC9NYWtlZmlsZWA6OgorCUNvbmNhdGVuYXRlcyB0aGUgY29udGVudHMgb2Ygc2FpZCBNYWtlZmlsZXMgaW4gdGhlIGhlYWQKKwlvZiB0aGUgYnJhbmNoIGBtYXN0ZXJgLgorCitEaXNjdXNzaW9uCistLS0tLS0tLS0tCisKK2luY2x1ZGU6OmkxOG4udHh0W10KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGFnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGFnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEzZmUwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YWdlLnR4dApAQCAtMCwwICsxLDIzIEBACitnaXQtc3RhZ2UoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zdGFnZSAtIEFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3RhZ2UnIGFyZ3MuLi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyBhIHN5bm9ueW0gZm9yIGxpbmtnaXQ6Z2l0LWFkZFsxXS4gIFBsZWFzZSByZWZlciB0byB0aGUKK2RvY3VtZW50YXRpb24gb2YgdGhhdCBjb21tYW5kLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWE0ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0CkBAIC0wLDAgKzEsMjY5IEBACitnaXQtc3Rhc2goMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3Rhc2ggLSBTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN0YXNoJyBsaXN0IFs8b3B0aW9ucz5dCisnZ2l0IHN0YXNoJyBzaG93IFs8c3Rhc2g+XQorJ2dpdCBzdGFzaCcgZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKydnaXQgc3Rhc2gnIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyBbc2F2ZSBbLS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF0KKwkgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dXQorJ2dpdCBzdGFzaCcgY2xlYXIKKydnaXQgc3Rhc2gnIGNyZWF0ZQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVXNlIGBnaXQgc3Rhc2hgIHdoZW4geW91IHdhbnQgdG8gcmVjb3JkIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQord29ya2luZyBkaXJlY3RvcnkgYW5kIHRoZSBpbmRleCwgYnV0IHdhbnQgdG8gZ28gYmFjayB0byBhIGNsZWFuCit3b3JraW5nIGRpcmVjdG9yeS4gIFRoZSBjb21tYW5kIHNhdmVzIHlvdXIgbG9jYWwgbW9kaWZpY2F0aW9ucyBhd2F5CithbmQgcmV2ZXJ0cyB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gbWF0Y2ggdGhlIGBIRUFEYCBjb21taXQuCisKK1RoZSBtb2RpZmljYXRpb25zIHN0YXNoZWQgYXdheSBieSB0aGlzIGNvbW1hbmQgY2FuIGJlIGxpc3RlZCB3aXRoCitgZ2l0IHN0YXNoIGxpc3RgLCBpbnNwZWN0ZWQgd2l0aCBgZ2l0IHN0YXNoIHNob3dgLCBhbmQgcmVzdG9yZWQKKyhwb3RlbnRpYWxseSBvbiB0b3Agb2YgYSBkaWZmZXJlbnQgY29tbWl0KSB3aXRoIGBnaXQgc3Rhc2ggYXBwbHlgLgorQ2FsbGluZyBgZ2l0IHN0YXNoYCB3aXRob3V0IGFueSBhcmd1bWVudHMgaXMgZXF1aXZhbGVudCB0byBgZ2l0IHN0YXNoIHNhdmVgLgorQSBzdGFzaCBpcyBieSBkZWZhdWx0IGxpc3RlZCBhcyAiV0lQIG9uICdicmFuY2huYW1lJyAuLi4iLCBidXQKK3lvdSBjYW4gZ2l2ZSBhIG1vcmUgZGVzY3JpcHRpdmUgbWVzc2FnZSBvbiB0aGUgY29tbWFuZCBsaW5lIHdoZW4KK3lvdSBjcmVhdGUgb25lLgorCitUaGUgbGF0ZXN0IHN0YXNoIHlvdSBjcmVhdGVkIGlzIHN0b3JlZCBpbiBgcmVmcy9zdGFzaGA7IG9sZGVyCitzdGFzaGVzIGFyZSBmb3VuZCBpbiB0aGUgcmVmbG9nIG9mIHRoaXMgcmVmZXJlbmNlIGFuZCBjYW4gYmUgbmFtZWQgdXNpbmcKK3RoZSB1c3VhbCByZWZsb2cgc3ludGF4IChlLmcuIGBzdGFzaEB7MH1gIGlzIHRoZSBtb3N0IHJlY2VudGx5CitjcmVhdGVkIHN0YXNoLCBgc3Rhc2hAezF9YCBpcyB0aGUgb25lIGJlZm9yZSBpdCwgYHN0YXNoQHsyLmhvdXJzLmFnb31gCitpcyBhbHNvIHBvc3NpYmxlKS4KKworT1BUSU9OUworLS0tLS0tLQorCitzYXZlIFstcHwtLXBhdGNoXSBbLS1bbm8tXWtlZXAtaW5kZXhdIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstcXwtLXF1aWV0XSBbPG1lc3NhZ2U+XTo6CisKKwlTYXZlIHlvdXIgbG9jYWwgbW9kaWZpY2F0aW9ucyB0byBhIG5ldyAnc3Rhc2gnLCBhbmQgcnVuIGBnaXQgcmVzZXQKKwktLWhhcmRgIHRvIHJldmVydCB0aGVtLiAgVGhlIDxtZXNzYWdlPiBwYXJ0IGlzIG9wdGlvbmFsIGFuZCBnaXZlcworCXRoZSBkZXNjcmlwdGlvbiBhbG9uZyB3aXRoIHRoZSBzdGFzaGVkIHN0YXRlLiAgRm9yIHF1aWNrbHkgbWFraW5nCisJYSBzbmFwc2hvdCwgeW91IGNhbiBvbWl0IF9ib3RoXyAic2F2ZSIgYW5kIDxtZXNzYWdlPiwgYnV0IGdpdmluZworCW9ubHkgPG1lc3NhZ2U+IGRvZXMgbm90IHRyaWdnZXIgdGhpcyBhY3Rpb24gdG8gcHJldmVudCBhIG1pc3NwZWxsZWQKKwlzdWJjb21tYW5kIGZyb20gbWFraW5nIGFuIHVud2FudGVkIHN0YXNoLgorKworSWYgdGhlIGAtLWtlZXAtaW5kZXhgIG9wdGlvbiBpcyB1c2VkLCBhbGwgY2hhbmdlcyBhbHJlYWR5IGFkZGVkIHRvIHRoZQoraW5kZXggYXJlIGxlZnQgaW50YWN0LgorKworSWYgdGhlIGAtLWluY2x1ZGUtdW50cmFja2VkYCBvcHRpb24gaXMgdXNlZCwgYWxsIHVudHJhY2tlZCBmaWxlcyBhcmUgYWxzbworc3Rhc2hlZCBhbmQgdGhlbiBjbGVhbmVkIHVwIHdpdGggYGdpdCBjbGVhbmAsIGxlYXZpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5CitpbiBhIHZlcnkgY2xlYW4gc3RhdGUuIElmIHRoZSBgLS1hbGxgIG9wdGlvbiBpcyB1c2VkIGluc3RlYWQgdGhlbiB0aGUKK2lnbm9yZWQgZmlsZXMgYXJlIHN0YXNoZWQgYW5kIGNsZWFuZWQgaW4gYWRkaXRpb24gdG8gdGhlIHVudHJhY2tlZCBmaWxlcy4KKysKK1dpdGggYC0tcGF0Y2hgLCB5b3UgY2FuIGludGVyYWN0aXZlbHkgc2VsZWN0IGh1bmtzIGZyb20gdGhlIGRpZmYKK2JldHdlZW4gSEVBRCBhbmQgdGhlIHdvcmtpbmcgdHJlZSB0byBiZSBzdGFzaGVkLiAgVGhlIHN0YXNoIGVudHJ5IGlzCitjb25zdHJ1Y3RlZCBzdWNoIHRoYXQgaXRzIGluZGV4IHN0YXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBpbmRleCBzdGF0ZQorb2YgeW91ciByZXBvc2l0b3J5LCBhbmQgaXRzIHdvcmt0cmVlIGNvbnRhaW5zIG9ubHkgdGhlIGNoYW5nZXMgeW91CitzZWxlY3RlZCBpbnRlcmFjdGl2ZWx5LiAgVGhlIHNlbGVjdGVkIGNoYW5nZXMgYXJlIHRoZW4gcm9sbGVkIGJhY2sKK2Zyb20geW91ciB3b3JrdHJlZS4gU2VlIHRoZSBgYEludGVyYWN0aXZlIE1vZGUnJyBzZWN0aW9uIG9mCitsaW5rZ2l0OmdpdC1hZGRbMV0gdG8gbGVhcm4gaG93IHRvIG9wZXJhdGUgdGhlIGAtLXBhdGNoYCBtb2RlLgorKworVGhlIGAtLXBhdGNoYCBvcHRpb24gaW1wbGllcyBgLS1rZWVwLWluZGV4YC4gIFlvdSBjYW4gdXNlCitgLS1uby1rZWVwLWluZGV4YCB0byBvdmVycmlkZSB0aGlzLgorCitsaXN0IFs8b3B0aW9ucz5dOjoKKworCUxpc3QgdGhlIHN0YXNoZXMgdGhhdCB5b3UgY3VycmVudGx5IGhhdmUuICBFYWNoICdzdGFzaCcgaXMgbGlzdGVkCisJd2l0aCBpdHMgbmFtZSAoZS5nLiBgc3Rhc2hAezB9YCBpcyB0aGUgbGF0ZXN0IHN0YXNoLCBgc3Rhc2hAezF9YCBpcworCXRoZSBvbmUgYmVmb3JlLCBldGMuKSwgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB0aGF0IHdhcyBjdXJyZW50IHdoZW4gdGhlCisJc3Rhc2ggd2FzIG1hZGUsIGFuZCBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBjb21taXQgdGhlIHN0YXNoIHdhcworCWJhc2VkIG9uLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3Rhc2hAezB9OiBXSVAgb24gc3VibWl0OiA2ZWJkMGUyLi4uIFVwZGF0ZSBnaXQtc3Rhc2ggZG9jdW1lbnRhdGlvbgorc3Rhc2hAezF9OiBPbiBtYXN0ZXI6IDljYzA1ODkuLi4gQWRkIGdpdC1zdGFzaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhlIGNvbW1hbmQgdGFrZXMgb3B0aW9ucyBhcHBsaWNhYmxlIHRvIHRoZSAnZ2l0IGxvZycKK2NvbW1hbmQgdG8gY29udHJvbCB3aGF0IGlzIHNob3duIGFuZCBob3cuIFNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0uCisKK3Nob3cgWzxzdGFzaD5dOjoKKworCVNob3cgdGhlIGNoYW5nZXMgcmVjb3JkZWQgaW4gdGhlIHN0YXNoIGFzIGEgZGlmZiBiZXR3ZWVuIHRoZQorCXN0YXNoZWQgc3RhdGUgYW5kIGl0cyBvcmlnaW5hbCBwYXJlbnQuIFdoZW4gbm8gYDxzdGFzaD5gIGlzIGdpdmVuLAorCXNob3dzIHRoZSBsYXRlc3Qgb25lLiBCeSBkZWZhdWx0LCB0aGUgY29tbWFuZCBzaG93cyB0aGUgZGlmZnN0YXQsIGJ1dAorCWl0IHdpbGwgYWNjZXB0IGFueSBmb3JtYXQga25vd24gdG8gJ2dpdCBkaWZmJyAoZS5nLiwgYGdpdCBzdGFzaCBzaG93CisJLXAgc3Rhc2hAezF9YCB0byB2aWV3IHRoZSBzZWNvbmQgbW9zdCByZWNlbnQgc3Rhc2ggaW4gcGF0Y2ggZm9ybSkuCisKK3BvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XTo6CisKKwlSZW1vdmUgYSBzaW5nbGUgc3Rhc2hlZCBzdGF0ZSBmcm9tIHRoZSBzdGFzaCBsaXN0IGFuZCBhcHBseSBpdAorCW9uIHRvcCBvZiB0aGUgY3VycmVudCB3b3JraW5nIHRyZWUgc3RhdGUsIGkuZS4sIGRvIHRoZSBpbnZlcnNlCisJb3BlcmF0aW9uIG9mIGBnaXQgc3Rhc2ggc2F2ZWAuIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBtdXN0CisJbWF0Y2ggdGhlIGluZGV4LgorKworQXBwbHlpbmcgdGhlIHN0YXRlIGNhbiBmYWlsIHdpdGggY29uZmxpY3RzOyBpbiB0aGlzIGNhc2UsIGl0IGlzIG5vdAorcmVtb3ZlZCBmcm9tIHRoZSBzdGFzaCBsaXN0LiBZb3UgbmVlZCB0byByZXNvbHZlIHRoZSBjb25mbGljdHMgYnkgaGFuZAorYW5kIGNhbGwgYGdpdCBzdGFzaCBkcm9wYCBtYW51YWxseSBhZnRlcndhcmRzLgorKworSWYgdGhlIGAtLWluZGV4YCBvcHRpb24gaXMgdXNlZCwgdGhlbiB0cmllcyB0byByZWluc3RhdGUgbm90IG9ubHkgdGhlIHdvcmtpbmcKK3RyZWUncyBjaGFuZ2VzLCBidXQgYWxzbyB0aGUgaW5kZXgncyBvbmVzLiBIb3dldmVyLCB0aGlzIGNhbiBmYWlsLCB3aGVuIHlvdQoraGF2ZSBjb25mbGljdHMgKHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIGluZGV4LCB3aGVyZSB5b3UgdGhlcmVmb3JlIGNhbiBubworbG9uZ2VyIGFwcGx5IHRoZSBjaGFuZ2VzIGFzIHRoZXkgd2VyZSBvcmlnaW5hbGx5KS4KKysKK1doZW4gbm8gYDxzdGFzaD5gIGlzIGdpdmVuLCBgc3Rhc2hAezB9YCBpcyBhc3N1bWVkLCBvdGhlcndpc2UgYDxzdGFzaD5gIG11c3QKK2JlIGEgcmVmZXJlbmNlIG9mIHRoZSBmb3JtIGBzdGFzaEB7PHJldmlzaW9uPn1gLgorCithcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XTo6CisKKwlMaWtlIGBwb3BgLCBidXQgZG8gbm90IHJlbW92ZSB0aGUgc3RhdGUgZnJvbSB0aGUgc3Rhc2ggbGlzdC4gVW5saWtlIGBwb3BgLAorCWA8c3Rhc2g+YCBtYXkgYmUgYW55IGNvbW1pdCB0aGF0IGxvb2tzIGxpa2UgYSBjb21taXQgY3JlYXRlZCBieQorCWBzdGFzaCBzYXZlYCBvciBgc3Rhc2ggY3JlYXRlYC4KKworYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl06OgorCisJQ3JlYXRlcyBhbmQgY2hlY2tzIG91dCBhIG5ldyBicmFuY2ggbmFtZWQgYDxicmFuY2huYW1lPmAgc3RhcnRpbmcgZnJvbQorCXRoZSBjb21taXQgYXQgd2hpY2ggdGhlIGA8c3Rhc2g+YCB3YXMgb3JpZ2luYWxseSBjcmVhdGVkLCBhcHBsaWVzIHRoZQorCWNoYW5nZXMgcmVjb3JkZWQgaW4gYDxzdGFzaD5gIHRvIHRoZSBuZXcgd29ya2luZyB0cmVlIGFuZCBpbmRleC4KKwlJZiB0aGF0IHN1Y2NlZWRzLCBhbmQgYDxzdGFzaD5gIGlzIGEgcmVmZXJlbmNlIG9mIHRoZSBmb3JtCisJYHN0YXNoQHs8cmV2aXNpb24+fWAsIGl0IHRoZW4gZHJvcHMgdGhlIGA8c3Rhc2g+YC4gV2hlbiBubyBgPHN0YXNoPmAKKwlpcyBnaXZlbiwgYXBwbGllcyB0aGUgbGF0ZXN0IG9uZS4KKysKK1RoaXMgaXMgdXNlZnVsIGlmIHRoZSBicmFuY2ggb24gd2hpY2ggeW91IHJhbiBgZ2l0IHN0YXNoIHNhdmVgIGhhcworY2hhbmdlZCBlbm91Z2ggdGhhdCBgZ2l0IHN0YXNoIGFwcGx5YCBmYWlscyBkdWUgdG8gY29uZmxpY3RzLiBTaW5jZQordGhlIHN0YXNoIGlzIGFwcGxpZWQgb24gdG9wIG9mIHRoZSBjb21taXQgdGhhdCB3YXMgSEVBRCBhdCB0aGUgdGltZQorYGdpdCBzdGFzaGAgd2FzIHJ1biwgaXQgcmVzdG9yZXMgdGhlIG9yaWdpbmFsbHkgc3Rhc2hlZCBzdGF0ZSB3aXRoCitubyBjb25mbGljdHMuCisKK2NsZWFyOjoKKwlSZW1vdmUgYWxsIHRoZSBzdGFzaGVkIHN0YXRlcy4gTm90ZSB0aGF0IHRob3NlIHN0YXRlcyB3aWxsIHRoZW4KKwliZSBzdWJqZWN0IHRvIHBydW5pbmcsIGFuZCBtYXkgYmUgaW1wb3NzaWJsZSB0byByZWNvdmVyIChzZWUKKwknRXhhbXBsZXMnIGJlbG93IGZvciBhIHBvc3NpYmxlIHN0cmF0ZWd5KS4KKworZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dOjoKKworCVJlbW92ZSBhIHNpbmdsZSBzdGFzaGVkIHN0YXRlIGZyb20gdGhlIHN0YXNoIGxpc3QuIFdoZW4gbm8gYDxzdGFzaD5gCisJaXMgZ2l2ZW4sIGl0IHJlbW92ZXMgdGhlIGxhdGVzdCBvbmUuIGkuZS4gYHN0YXNoQHswfWAsIG90aGVyd2lzZQorCWA8c3Rhc2g+YCBtdXN0IGEgdmFsaWQgc3Rhc2ggbG9nIHJlZmVyZW5jZSBvZiB0aGUgZm9ybQorCWBzdGFzaEB7PHJldmlzaW9uPn1gLgorCitjcmVhdGU6OgorCisJQ3JlYXRlIGEgc3Rhc2ggKHdoaWNoIGlzIGEgcmVndWxhciBjb21taXQgb2JqZWN0KSBhbmQgcmV0dXJuIGl0cworCW9iamVjdCBuYW1lLCB3aXRob3V0IHN0b3JpbmcgaXQgYW55d2hlcmUgaW4gdGhlIHJlZiBuYW1lc3BhY2UuCisKKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitBIHN0YXNoIGlzIHJlcHJlc2VudGVkIGFzIGEgY29tbWl0IHdob3NlIHRyZWUgcmVjb3JkcyB0aGUgc3RhdGUgb2YgdGhlCit3b3JraW5nIGRpcmVjdG9yeSwgYW5kIGl0cyBmaXJzdCBwYXJlbnQgaXMgdGhlIGNvbW1pdCBhdCBgSEVBRGAgd2hlbgordGhlIHN0YXNoIHdhcyBjcmVhdGVkLiAgVGhlIHRyZWUgb2YgdGhlIHNlY29uZCBwYXJlbnQgcmVjb3JkcyB0aGUKK3N0YXRlIG9mIHRoZSBpbmRleCB3aGVuIHRoZSBzdGFzaCBpcyBtYWRlLCBhbmQgaXQgaXMgbWFkZSBhIGNoaWxkIG9mCit0aGUgYEhFQURgIGNvbW1pdC4gIFRoZSBhbmNlc3RyeSBncmFwaCBsb29rcyBsaWtlIHRoaXM6CisKKyAgICAgICAgICAgIC4tLS0tVworICAgICAgICAgICAvICAgIC8KKyAgICAgLS0tLS1ILS0tLUkKKword2hlcmUgYEhgIGlzIHRoZSBgSEVBRGAgY29tbWl0LCBgSWAgaXMgYSBjb21taXQgdGhhdCByZWNvcmRzIHRoZSBzdGF0ZQorb2YgdGhlIGluZGV4LCBhbmQgYFdgIGlzIGEgY29tbWl0IHRoYXQgcmVjb3JkcyB0aGUgc3RhdGUgb2YgdGhlIHdvcmtpbmcKK3RyZWUuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1B1bGxpbmcgaW50byBhIGRpcnR5IHRyZWU6OgorCitXaGVuIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBzb21ldGhpbmcsIHlvdSBsZWFybiB0aGF0IHRoZXJlIGFyZQordXBzdHJlYW0gY2hhbmdlcyB0aGF0IGFyZSBwb3NzaWJseSByZWxldmFudCB0byB3aGF0IHlvdSBhcmUKK2RvaW5nLiAgV2hlbiB5b3VyIGxvY2FsIGNoYW5nZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggdGhlIGNoYW5nZXMgaW4KK3RoZSB1cHN0cmVhbSwgYSBzaW1wbGUgYGdpdCBwdWxsYCB3aWxsIGxldCB5b3UgbW92ZSBmb3J3YXJkLgorKworSG93ZXZlciwgdGhlcmUgYXJlIGNhc2VzIGluIHdoaWNoIHlvdXIgbG9jYWwgY2hhbmdlcyBkbyBjb25mbGljdCB3aXRoCit0aGUgdXBzdHJlYW0gY2hhbmdlcywgYW5kIGBnaXQgcHVsbGAgcmVmdXNlcyB0byBvdmVyd3JpdGUgeW91cgorY2hhbmdlcy4gIEluIHN1Y2ggYSBjYXNlLCB5b3UgY2FuIHN0YXNoIHlvdXIgY2hhbmdlcyBhd2F5LAorcGVyZm9ybSBhIHB1bGwsIGFuZCB0aGVuIHVuc3Rhc2gsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwKKyAuLi4KK2ZpbGUgZm9vYmFyIG5vdCB1cCB0byBkYXRlLCBjYW5ub3QgbWVyZ2UuCiskIGdpdCBzdGFzaAorJCBnaXQgcHVsbAorJCBnaXQgc3Rhc2ggcG9wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ludGVycnVwdGVkIHdvcmtmbG93OjoKKworV2hlbiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2Ygc29tZXRoaW5nLCB5b3VyIGJvc3MgY29tZXMgaW4gYW5kCitkZW1hbmRzIHRoYXQgeW91IGZpeCBzb21ldGhpbmcgaW1tZWRpYXRlbHkuICBUcmFkaXRpb25hbGx5LCB5b3Ugd291bGQKK21ha2UgYSBjb21taXQgdG8gYSB0ZW1wb3JhcnkgYnJhbmNoIHRvIHN0b3JlIHlvdXIgY2hhbmdlcyBhd2F5LCBhbmQKK3JldHVybiB0byB5b3VyIG9yaWdpbmFsIGJyYW5jaCB0byBtYWtlIHRoZSBlbWVyZ2VuY3kgZml4LCBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC4uLiBoYWNrIGhhY2sgaGFjayAuLi4KKyQgZ2l0IGNoZWNrb3V0IC1iIG15X3dpcAorJCBnaXQgY29tbWl0IC1hIC1tICJXSVAiCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZWRpdCBlbWVyZ2VuY3kgZml4CiskIGdpdCBjb21taXQgLWEgLW0gIkZpeCBpbiBhIGh1cnJ5IgorJCBnaXQgY2hlY2tvdXQgbXlfd2lwCiskIGdpdCByZXNldCAtLXNvZnQgSEVBRF4KKyMgLi4uIGNvbnRpbnVlIGhhY2tpbmcgLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitZb3UgY2FuIHVzZSAnZ2l0IHN0YXNoJyB0byBzaW1wbGlmeSB0aGUgYWJvdmUsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLi4uIGhhY2sgaGFjayBoYWNrIC4uLgorJCBnaXQgc3Rhc2gKKyQgZWRpdCBlbWVyZ2VuY3kgZml4CiskIGdpdCBjb21taXQgLWEgLW0gIkZpeCBpbiBhIGh1cnJ5IgorJCBnaXQgc3Rhc2ggcG9wCisjIC4uLiBjb250aW51ZSBoYWNraW5nIC4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUZXN0aW5nIHBhcnRpYWwgY29tbWl0czo6CisKK1lvdSBjYW4gdXNlIGBnaXQgc3Rhc2ggc2F2ZSAtLWtlZXAtaW5kZXhgIHdoZW4geW91IHdhbnQgdG8gbWFrZSB0d28gb3IKK21vcmUgY29tbWl0cyBvdXQgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHlvdSB3YW50IHRvIHRlc3QKK2VhY2ggY2hhbmdlIGJlZm9yZSBjb21taXR0aW5nOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAuLi4gaGFjayBoYWNrIGhhY2sgLi4uCiskIGdpdCBhZGQgLS1wYXRjaCBmb28gICAgICAgICAgICAjIGFkZCBqdXN0IGZpcnN0IHBhcnQgdG8gdGhlIGluZGV4CiskIGdpdCBzdGFzaCBzYXZlIC0ta2VlcC1pbmRleCAgICAjIHNhdmUgYWxsIG90aGVyIGNoYW5nZXMgdG8gdGhlIHN0YXNoCiskIGVkaXQvYnVpbGQvdGVzdCBmaXJzdCBwYXJ0CiskIGdpdCBjb21taXQgLW0gJ0ZpcnN0IHBhcnQnICAgICAjIGNvbW1pdCBmdWxseSB0ZXN0ZWQgY2hhbmdlCiskIGdpdCBzdGFzaCBwb3AgICAgICAgICAgICAgICAgICAjIHByZXBhcmUgdG8gd29yayBvbiBhbGwgb3RoZXIgY2hhbmdlcworIyAuLi4gcmVwZWF0IGFib3ZlIGZpdmUgc3RlcHMgdW50aWwgb25lIGNvbW1pdCByZW1haW5zIC4uLgorJCBlZGl0L2J1aWxkL3Rlc3QgcmVtYWluaW5nIHBhcnRzCiskIGdpdCBjb21taXQgZm9vIC1tICdSZW1haW5pbmcgcGFydHMnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlY292ZXJpbmcgc3Rhc2hlcyB0aGF0IHdlcmUgY2xlYXJlZC9kcm9wcGVkIGVycm9uZW91c2x5OjoKKworSWYgeW91IG1pc3Rha2VubHkgZHJvcCBvciBjbGVhciBzdGFzaGVzLCB0aGV5IGNhbm5vdCBiZSByZWNvdmVyZWQKK3Rocm91Z2ggdGhlIG5vcm1hbCBzYWZldHkgbWVjaGFuaXNtcy4gIEhvd2V2ZXIsIHlvdSBjYW4gdHJ5IHRoZQorZm9sbG93aW5nIGluY2FudGF0aW9uIHRvIGdldCBhIGxpc3Qgb2Ygc3Rhc2hlcyB0aGF0IGFyZSBzdGlsbCBpbiB5b3VyCityZXBvc2l0b3J5LCBidXQgbm90IHJlYWNoYWJsZSBhbnkgbW9yZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmc2NrIC0tdW5yZWFjaGFibGUgfAorZ3JlcCBjb21taXQgfCBjdXQgLWRcICAtZjMgfAoreGFyZ3MgZ2l0IGxvZyAtLW1lcmdlcyAtLW5vLXdhbGsgLS1ncmVwPVdJUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0sCitsaW5rZ2l0OmdpdC1jb21taXRbMV0sCitsaW5rZ2l0OmdpdC1yZWZsb2dbMV0sCitsaW5rZ2l0OmdpdC1yZXNldFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXR1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZTVmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0CkBAIC0wLDAgKzEsMjEyIEBACitnaXQtc3RhdHVzKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zdGF0dXMgLSBTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN0YXR1cycgWzxvcHRpb25zPi4uLl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitEaXNwbGF5cyBwYXRocyB0aGF0IGhhdmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgaW5kZXggZmlsZSBhbmQgdGhlCitjdXJyZW50IEhFQUQgY29tbWl0LCBwYXRocyB0aGF0IGhhdmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgd29ya2luZwordHJlZSBhbmQgdGhlIGluZGV4IGZpbGUsIGFuZCBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgYXJlIG5vdAordHJhY2tlZCBieSBnaXQgKGFuZCBhcmUgbm90IGlnbm9yZWQgYnkgbGlua2dpdDpnaXRpZ25vcmVbNV0pLiBUaGUgZmlyc3QKK2FyZSB3aGF0IHlvdSBfd291bGRfIGNvbW1pdCBieSBydW5uaW5nIGBnaXQgY29tbWl0YDsgdGhlIHNlY29uZCBhbmQKK3RoaXJkIGFyZSB3aGF0IHlvdSBfY291bGRfIGNvbW1pdCBieSBydW5uaW5nICdnaXQgYWRkJyBiZWZvcmUgcnVubmluZworYGdpdCBjb21taXRgLgorCitPUFRJT05TCistLS0tLS0tCisKKy1zOjoKKy0tc2hvcnQ6OgorCUdpdmUgdGhlIG91dHB1dCBpbiB0aGUgc2hvcnQtZm9ybWF0LgorCistYjo6CistLWJyYW5jaDo6CisJU2hvdyB0aGUgYnJhbmNoIGFuZCB0cmFja2luZyBpbmZvIGV2ZW4gaW4gc2hvcnQtZm9ybWF0LgorCistLXBvcmNlbGFpbjo6CisJR2l2ZSB0aGUgb3V0cHV0IGluIGFuIGVhc3ktdG8tcGFyc2UgZm9ybWF0IGZvciBzY3JpcHRzLgorCVRoaXMgaXMgc2ltaWxhciB0byB0aGUgc2hvcnQgb3V0cHV0LCBidXQgd2lsbCByZW1haW4gc3RhYmxlCisJYWNyb3NzIGdpdCB2ZXJzaW9ucyBhbmQgcmVnYXJkbGVzcyBvZiB1c2VyIGNvbmZpZ3VyYXRpb24uIFNlZQorCWJlbG93IGZvciBkZXRhaWxzLgorCistdVs8bW9kZT5dOjoKKy0tdW50cmFja2VkLWZpbGVzWz08bW9kZT5dOjoKKwlTaG93IHVudHJhY2tlZCBmaWxlcy4KKysKK1RoZSBtb2RlIHBhcmFtZXRlciBpcyBvcHRpb25hbCAoZGVmYXVsdHMgdG8gJ2FsbCcpLCBhbmQgaXMgdXNlZCB0bworc3BlY2lmeSB0aGUgaGFuZGxpbmcgb2YgdW50cmFja2VkIGZpbGVzOyB3aGVuIC11IGlzIG5vdCB1c2VkLCB0aGUKK2RlZmF1bHQgaXMgJ25vcm1hbCcsIGkuZS4gc2hvdyB1bnRyYWNrZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorKworVGhlIHBvc3NpYmxlIG9wdGlvbnMgYXJlOgorKworCS0gJ25vJyAgICAgLSBTaG93IG5vIHVudHJhY2tlZCBmaWxlcworCS0gJ25vcm1hbCcgLSBTaG93cyB1bnRyYWNrZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCisJLSAnYWxsJyAgICAtIEFsc28gc2hvd3MgaW5kaXZpZHVhbCBmaWxlcyBpbiB1bnRyYWNrZWQgZGlyZWN0b3JpZXMuCisrCitUaGUgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcworY29uZmlndXJhdGlvbiB2YXJpYWJsZSBkb2N1bWVudGVkIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1pZ25vcmUtc3VibW9kdWxlc1s9PHdoZW4+XTo6CisJSWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcyB3aGVuIGxvb2tpbmcgZm9yIGNoYW5nZXMuIDx3aGVuPiBjYW4gYmUKKwllaXRoZXIgIm5vbmUiLCAidW50cmFja2VkIiwgImRpcnR5IiBvciAiYWxsIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCisJVXNpbmcgIm5vbmUiIHdpbGwgY29uc2lkZXIgdGhlIHN1Ym1vZHVsZSBtb2RpZmllZCB3aGVuIGl0IGVpdGhlciBjb250YWlucworCXVudHJhY2tlZCBvciBtb2RpZmllZCBmaWxlcyBvciBpdHMgSEVBRCBkaWZmZXJzIGZyb20gdGhlIGNvbW1pdCByZWNvcmRlZAorCWluIHRoZSBzdXBlcnByb2plY3QgYW5kIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGFueSBzZXR0aW5ncyBvZiB0aGUKKwknaWdub3JlJyBvcHRpb24gaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdIG9yIGxpbmtnaXQ6Z2l0bW9kdWxlc1s1XS4gV2hlbgorCSJ1bnRyYWNrZWQiIGlzIHVzZWQgc3VibW9kdWxlcyBhcmUgbm90IGNvbnNpZGVyZWQgZGlydHkgd2hlbiB0aGV5IG9ubHkKKwljb250YWluIHVudHJhY2tlZCBjb250ZW50IChidXQgdGhleSBhcmUgc3RpbGwgc2Nhbm5lZCBmb3IgbW9kaWZpZWQKKwljb250ZW50KS4gVXNpbmcgImRpcnR5IiBpZ25vcmVzIGFsbCBjaGFuZ2VzIHRvIHRoZSB3b3JrIHRyZWUgb2Ygc3VibW9kdWxlcywKKwlvbmx5IGNoYW5nZXMgdG8gdGhlIGNvbW1pdHMgc3RvcmVkIGluIHRoZSBzdXBlcnByb2plY3QgYXJlIHNob3duICh0aGlzIHdhcworCXRoZSBiZWhhdmlvciBiZWZvcmUgMS43LjApLiBVc2luZyAiYWxsIiBoaWRlcyBhbGwgY2hhbmdlcyB0byBzdWJtb2R1bGVzCisJKGFuZCBzdXBwcmVzc2VzIHRoZSBvdXRwdXQgb2Ygc3VibW9kdWxlIHN1bW1hcmllcyB3aGVuIHRoZSBjb25maWcgb3B0aW9uCisJYHN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5YCBpcyBzZXQpLgorCistLWlnbm9yZWQ6OgorCVNob3cgaWdub3JlZCBmaWxlcyBhcyB3ZWxsLgorCistejo6CisJVGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwsIGluc3RlYWQgb2YgTEYuICBUaGlzIGltcGxpZXMKKwl0aGUgYC0tcG9yY2VsYWluYCBvdXRwdXQgZm9ybWF0IGlmIG5vIG90aGVyIGZvcm1hdCBpcyBnaXZlbi4KKworLS1jb2x1bW5bPTxvcHRpb25zPl06OgorLS1uby1jb2x1bW46OgorCURpc3BsYXkgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMuIFNlZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisJY29sdW1uLnN0YXR1cyBmb3Igb3B0aW9uIHN5bnRheC5gLS1jb2x1bW5gIGFuZCBgLS1uby1jb2x1bW5gCisJd2l0aG91dCBvcHRpb25zIGFyZSBlcXVpdmFsZW50IHRvICdhbHdheXMnIGFuZCAnbmV2ZXInCisJcmVzcGVjdGl2ZWx5LgorCisKK09VVFBVVAorLS0tLS0tCitUaGUgb3V0cHV0IGZyb20gdGhpcyBjb21tYW5kIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBjb21taXQKK3RlbXBsYXRlIGNvbW1lbnQsIGFuZCBhbGwgdGhlIG91dHB1dCBsaW5lcyBhcmUgcHJlZml4ZWQgd2l0aCAnIycuCitUaGUgZGVmYXVsdCwgbG9uZyBmb3JtYXQsIGlzIGRlc2lnbmVkIHRvIGJlIGh1bWFuIHJlYWRhYmxlLAordmVyYm9zZSBhbmQgZGVzY3JpcHRpdmUuICBJdHMgY29udGVudHMgYW5kIGZvcm1hdCBhcmUgc3ViamVjdCB0byBjaGFuZ2UKK2F0IGFueSB0aW1lLgorCitUaGUgcGF0aHMgbWVudGlvbmVkIGluIHRoZSBvdXRwdXQsIHVubGlrZSBtYW55IG90aGVyIGdpdCBjb21tYW5kcywgYXJlCittYWRlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiB5b3UgYXJlIHdvcmtpbmcgaW4gYQorc3ViZGlyZWN0b3J5ICh0aGlzIGlzIG9uIHB1cnBvc2UsIHRvIGhlbHAgY3V0dGluZyBhbmQgcGFzdGluZykuIFNlZQordGhlIHN0YXR1cy5yZWxhdGl2ZVBhdGhzIGNvbmZpZyBvcHRpb24gYmVsb3cuCisKK1Nob3J0IEZvcm1hdAorfn5+fn5+fn5+fn5+CisKK0luIHRoZSBzaG9ydC1mb3JtYXQsIHRoZSBzdGF0dXMgb2YgZWFjaCBwYXRoIGlzIHNob3duIGFzCisKKwlYWSBQQVRIMSAtPiBQQVRIMgorCit3aGVyZSBgUEFUSDFgIGlzIHRoZSBwYXRoIGluIHRoZSBgSEVBRGAsIGFuZCB0aGUgIiBgLT4gUEFUSDJgIiBwYXJ0IGlzCitzaG93biBvbmx5IHdoZW4gYFBBVEgxYCBjb3JyZXNwb25kcyB0byBhIGRpZmZlcmVudCBwYXRoIGluIHRoZQoraW5kZXgvd29ya3RyZWUgKGkuZS4gdGhlIGZpbGUgaXMgcmVuYW1lZCkuIFRoZSAnWFknIGlzIGEgdHdvLWxldHRlcgorc3RhdHVzIGNvZGUuCisKK1RoZSBmaWVsZHMgKGluY2x1ZGluZyB0aGUgYC0+YCkgYXJlIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIgYnkgYQorc2luZ2xlIHNwYWNlLiBJZiBhIGZpbGVuYW1lIGNvbnRhaW5zIHdoaXRlc3BhY2Ugb3Igb3RoZXIgbm9ucHJpbnRhYmxlCitjaGFyYWN0ZXJzLCB0aGF0IGZpZWxkIHdpbGwgYmUgcXVvdGVkIGluIHRoZSBtYW5uZXIgb2YgYSBDIHN0cmluZworbGl0ZXJhbDogc3Vycm91bmRlZCBieSBBU0NJSSBkb3VibGUgcXVvdGUgKDM0KSBjaGFyYWN0ZXJzLCBhbmQgd2l0aAoraW50ZXJpb3Igc3BlY2lhbCBjaGFyYWN0ZXJzIGJhY2tzbGFzaC1lc2NhcGVkLgorCitGb3IgcGF0aHMgd2l0aCBtZXJnZSBjb25mbGljdHMsIGBYYCBhbmQgJ1knIHNob3cgdGhlIG1vZGlmaWNhdGlvbgorc3RhdGVzIG9mIGVhY2ggc2lkZSBvZiB0aGUgbWVyZ2UuIEZvciBwYXRocyB0aGF0IGRvIG5vdCBoYXZlIG1lcmdlCitjb25mbGljdHMsIGBYYCBzaG93cyB0aGUgc3RhdHVzIG9mIHRoZSBpbmRleCwgYW5kIGBZYCBzaG93cyB0aGUgc3RhdHVzCitvZiB0aGUgd29yayB0cmVlLiAgRm9yIHVudHJhY2tlZCBwYXRocywgYFhZYCBhcmUgYD8/YC4gIE90aGVyIHN0YXR1cworY29kZXMgY2FuIGJlIGludGVycHJldGVkIGFzIGZvbGxvd3M6CisKKyogJyAnID0gdW5tb2RpZmllZAorKiAnTScgPSBtb2RpZmllZAorKiAnQScgPSBhZGRlZAorKiAnRCcgPSBkZWxldGVkCisqICdSJyA9IHJlbmFtZWQKKyogJ0MnID0gY29waWVkCisqICdVJyA9IHVwZGF0ZWQgYnV0IHVubWVyZ2VkCisKK0lnbm9yZWQgZmlsZXMgYXJlIG5vdCBsaXN0ZWQsIHVubGVzcyBgLS1pZ25vcmVkYCBvcHRpb24gaXMgaW4gZWZmZWN0LAoraW4gd2hpY2ggY2FzZSBgWFlgIGFyZSBgISFgLgorCisgICAgWCAgICAgICAgICBZICAgICBNZWFuaW5nCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBbTURdICAgbm90IHVwZGF0ZWQKKyAgICBNICAgICAgICBbIE1EXSAgIHVwZGF0ZWQgaW4gaW5kZXgKKyAgICBBICAgICAgICBbIE1EXSAgIGFkZGVkIHRvIGluZGV4CisgICAgRCAgICAgICAgIFsgTV0gICBkZWxldGVkIGZyb20gaW5kZXgKKyAgICBSICAgICAgICBbIE1EXSAgIHJlbmFtZWQgaW4gaW5kZXgKKyAgICBDICAgICAgICBbIE1EXSAgIGNvcGllZCBpbiBpbmRleAorICAgIFtNQVJDXSAgICAgICAgICAgaW5kZXggYW5kIHdvcmsgdHJlZSBtYXRjaGVzCisgICAgWyBNQVJDXSAgICAgTSAgICB3b3JrIHRyZWUgY2hhbmdlZCBzaW5jZSBpbmRleAorICAgIFsgTUFSQ10gICAgIEQgICAgZGVsZXRlZCBpbiB3b3JrIHRyZWUKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgRCAgICAgICAgICAgRCAgICB1bm1lcmdlZCwgYm90aCBkZWxldGVkCisgICAgQSAgICAgICAgICAgVSAgICB1bm1lcmdlZCwgYWRkZWQgYnkgdXMKKyAgICBVICAgICAgICAgICBEICAgIHVubWVyZ2VkLCBkZWxldGVkIGJ5IHRoZW0KKyAgICBVICAgICAgICAgICBBICAgIHVubWVyZ2VkLCBhZGRlZCBieSB0aGVtCisgICAgRCAgICAgICAgICAgVSAgICB1bm1lcmdlZCwgZGVsZXRlZCBieSB1cworICAgIEEgICAgICAgICAgIEEgICAgdW5tZXJnZWQsIGJvdGggYWRkZWQKKyAgICBVICAgICAgICAgICBVICAgIHVubWVyZ2VkLCBib3RoIG1vZGlmaWVkCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgID8gICAgICAgICAgID8gICAgdW50cmFja2VkCisgICAgISAgICAgICAgICAgISAgICBpZ25vcmVkCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiAtYiBpcyB1c2VkIHRoZSBzaG9ydC1mb3JtYXQgc3RhdHVzIGlzIHByZWNlZGVkIGJ5IGEgbGluZQorCisjIyBicmFuY2huYW1lIHRyYWNraW5nIGluZm8KKworUG9yY2VsYWluIEZvcm1hdAorfn5+fn5+fn5+fn5+fn5+fgorCitUaGUgcG9yY2VsYWluIGZvcm1hdCBpcyBzaW1pbGFyIHRvIHRoZSBzaG9ydCBmb3JtYXQsIGJ1dCBpcyBndWFyYW50ZWVkCitub3QgdG8gY2hhbmdlIGluIGEgYmFja3dhcmRzLWluY29tcGF0aWJsZSB3YXkgYmV0d2VlbiBnaXQgdmVyc2lvbnMgb3IKK2Jhc2VkIG9uIHVzZXIgY29uZmlndXJhdGlvbi4gVGhpcyBtYWtlcyBpdCBpZGVhbCBmb3IgcGFyc2luZyBieSBzY3JpcHRzLgorVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzaG9ydCBmb3JtYXQgYWJvdmUgYWxzbyBkZXNjcmliZXMgdGhlIHBvcmNlbGFpbgorZm9ybWF0LCB3aXRoIGEgZmV3IGV4Y2VwdGlvbnM6CisKKzEuIFRoZSB1c2VyJ3MgY29sb3Iuc3RhdHVzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHJlc3BlY3RlZDsgY29sb3Igd2lsbAorICAgYWx3YXlzIGJlIG9mZi4KKworMi4gVGhlIHVzZXIncyBzdGF0dXMucmVsYXRpdmVQYXRocyBjb25maWd1cmF0aW9uIGlzIG5vdCByZXNwZWN0ZWQ7IHBhdGhzCisgICBzaG93biB3aWxsIGFsd2F5cyBiZSByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290LgorCitUaGVyZSBpcyBhbHNvIGFuIGFsdGVybmF0ZSAteiBmb3JtYXQgcmVjb21tZW5kZWQgZm9yIG1hY2hpbmUgcGFyc2luZy4gSW4KK3RoYXQgZm9ybWF0LCB0aGUgc3RhdHVzIGZpZWxkIGlzIHRoZSBzYW1lLCBidXQgc29tZSBvdGhlciB0aGluZ3MKK2NoYW5nZS4gIEZpcnN0LCB0aGUgJ1wtPicgaXMgb21pdHRlZCBmcm9tIHJlbmFtZSBlbnRyaWVzIGFuZCB0aGUgZmllbGQKK29yZGVyIGlzIHJldmVyc2VkIChlLmcgJ2Zyb20gXC0+IHRvJyBiZWNvbWVzICd0byBmcm9tJykuIFNlY29uZCwgYSBOVUwKKyhBU0NJSSAwKSBmb2xsb3dzIGVhY2ggZmlsZW5hbWUsIHJlcGxhY2luZyBzcGFjZSBhcyBhIGZpZWxkIHNlcGFyYXRvcgorYW5kIHRoZSB0ZXJtaW5hdGluZyBuZXdsaW5lIChidXQgYSBzcGFjZSBzdGlsbCBzZXBhcmF0ZXMgdGhlIHN0YXR1cworZmllbGQgZnJvbSB0aGUgZmlyc3QgZmlsZW5hbWUpLiAgVGhpcmQsIGZpbGVuYW1lcyBjb250YWluaW5nIHNwZWNpYWwKK2NoYXJhY3RlcnMgYXJlIG5vdCBzcGVjaWFsbHkgZm9ybWF0dGVkOyBubyBxdW90aW5nIG9yCitiYWNrc2xhc2gtZXNjYXBpbmcgaXMgcGVyZm9ybWVkLgorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kIGhvbm9ycyBgY29sb3Iuc3RhdHVzYCAob3IgYHN0YXR1cy5jb2xvcmAgLS0gdGhleQorbWVhbiB0aGUgc2FtZSB0aGluZyBhbmQgdGhlIGxhdHRlciBpcyBrZXB0IGZvciBiYWNrd2FyZAorY29tcGF0aWJpbGl0eSkgYW5kIGBjb2xvci5zdGF0dXMuPHNsb3Q+YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcwordG8gY29sb3JpemUgaXRzIG91dHB1dC4KKworSWYgdGhlIGNvbmZpZyB2YXJpYWJsZSBgc3RhdHVzLnJlbGF0aXZlUGF0aHNgIGlzIHNldCB0byBmYWxzZSwgdGhlbiBhbGwKK3BhdGhzIHNob3duIGFyZSByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290LCBub3QgdG8gdGhlIGN1cnJlbnQKK2RpcmVjdG9yeS4KKworSWYgYHN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5YCBpcyBzZXQgdG8gYSBub24gemVybyBudW1iZXIgb3IgdHJ1ZSAoaWRlbnRpY2FsCit0byAtMSBvciBhbiB1bmxpbWl0ZWQgbnVtYmVyKSwgdGhlIHN1Ym1vZHVsZSBzdW1tYXJ5IHdpbGwgYmUgZW5hYmxlZCBmb3IKK3RoZSBsb25nIGZvcm1hdCBhbmQgYSBzdW1tYXJ5IG9mIGNvbW1pdHMgZm9yIG1vZGlmaWVkIHN1Ym1vZHVsZXMgd2lsbCBiZQorc2hvd24gKHNlZSAtLXN1bW1hcnktbGltaXQgb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LXN1Ym1vZHVsZVsxXSkuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRpZ25vcmVbNV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdHJpcHNwYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0cmlwc3BhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MGQ5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdHJpcHNwYWNlLnR4dApAQCAtMCwwICsxLDg2IEBACitnaXQtc3RyaXBzcGFjZSgxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN0cmlwc3BhY2UgLSBSZW1vdmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzdHJpcHNwYWNlJyBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSA8IGlucHV0CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitDbGVhbiB0aGUgaW5wdXQgaW4gdGhlIG1hbm5lciB1c2VkIGJ5ICdnaXQnIGZvciB0ZXh0IHN1Y2ggYXMgY29tbWl0CittZXNzYWdlcywgbm90ZXMsIHRhZ3MgYW5kIGJyYW5jaCBkZXNjcmlwdGlvbnMuCisKK1dpdGggbm8gYXJndW1lbnRzLCB0aGlzIHdpbGw6CisKKy0gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbSBhbGwgbGluZXMKKy0gY29sbGFwc2UgbXVsdGlwbGUgY29uc2VjdXRpdmUgZW1wdHkgbGluZXMgaW50byBvbmUgZW1wdHkgbGluZQorLSByZW1vdmUgZW1wdHkgbGluZXMgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGlucHV0CistIGFkZCBhIG1pc3NpbmcgJ1xuJyB0byB0aGUgbGFzdCBsaW5lIGlmIG5lY2Vzc2FyeS4KKworSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGlucHV0IGNvbnNpc3RzIGVudGlyZWx5IG9mIHdoaXRlc3BhY2UgY2hhcmFjdGVycywgbm8KK291dHB1dCB3aWxsIGJlIHByb2R1Y2VkLgorCisqTk9URSo6IFRoaXMgaXMgaW50ZW5kZWQgZm9yIGNsZWFuaW5nIG1ldGFkYXRhLCBwcmVmZXIgdGhlIGAtLXdoaXRlc3BhY2U9Zml4YAorbW9kZSBvZiBsaW5rZ2l0OmdpdC1hcHBseVsxXSBmb3IgY29ycmVjdGluZyB3aGl0ZXNwYWNlIG9mIHBhdGNoZXMgb3IgZmlsZXMgaW4KK3RoZSByZXBvc2l0b3J5LgorCitPUFRJT05TCistLS0tLS0tCistczo6CistLXN0cmlwLWNvbW1lbnRzOjoKKwlTa2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggJyMnLgorCitFWEFNUExFUworLS0tLS0tLS0KKworR2l2ZW4gdGhlIGZvbGxvd2luZyBub2lzeSBpbnB1dCB3aXRoICckJyBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgYSBsaW5lOgorCistLS0tLS0tLQorfEEgYnJpZWYgaW50cm9kdWN0aW9uICAgJAorfCAgICQKK3wkCit8QSBuZXcgcGFyYWdyYXBoJAorfCMgd2l0aCBhIGNvbW1lbnRlZC1vdXQgbGluZSAgICAkCit8ZXhwbGFpbmluZyBsb3RzIG9mIHN0dWZmLiQKK3wkCit8IyBBbiBvbGQgcGFyYWdyYXBoLCBhbHNvIGNvbW1lbnRlZC1vdXQuICQKK3wgICAgICAkCit8VGhlIGVuZC4kCit8ICAkCistLS0tLS0tLS0KKworVXNlICdnaXQgc3RyaXBzcGFjZScgd2l0aCBubyBhcmd1bWVudHMgdG8gb2J0YWluOgorCistLS0tLS0tLQorfEEgYnJpZWYgaW50cm9kdWN0aW9uJAorfCQKK3xBIG5ldyBwYXJhZ3JhcGgkCit8IyB3aXRoIGEgY29tbWVudGVkLW91dCBsaW5lJAorfGV4cGxhaW5pbmcgbG90cyBvZiBzdHVmZi4kCit8JAorfCMgQW4gb2xkIHBhcmFncmFwaCwgYWxzbyBjb21tZW50ZWQtb3V0LiQKK3wkCit8VGhlIGVuZC4kCistLS0tLS0tLS0KKworVXNlICdnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzJyB0byBvYnRhaW46CisKKy0tLS0tLS0tCit8QSBicmllZiBpbnRyb2R1Y3Rpb24kCit8JAorfEEgbmV3IHBhcmFncmFwaCQKK3xleHBsYWluaW5nIGxvdHMgb2Ygc3R1ZmYuJAorfCQKK3xUaGUgZW5kLiQKKy0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NjgzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0CkBAIC0wLDAgKzEsMjk3IEBACitnaXQtc3VibW9kdWxlKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zdWJtb2R1bGUgLSBJbml0aWFsaXplLCB1cGRhdGUgb3IgaW5zcGVjdCBzdWJtb2R1bGVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGFkZCBbLWIgYnJhbmNoXSBbLWZ8LS1mb3JjZV0KKwkgICAgICBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1dIDxyZXBvc2l0b3J5PiBbPHBhdGg+XQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzdGF0dXMgWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gaW5pdCBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHVwZGF0ZSBbLS1pbml0XSBbLU58LS1uby1mZXRjaF0gWy0tcmViYXNlXQorCSAgICAgIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dIFstLW1lcmdlXSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3VtbWFyeSBbLS1jYWNoZWR8LS1maWxlc10gWygtbnwtLXN1bW1hcnktbGltaXQpIDxuPl0KKwkgICAgICBbY29tbWl0XSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGZvcmVhY2ggWy0tcmVjdXJzaXZlXSA8Y29tbWFuZD4KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3luYyBbLS1dIFs8cGF0aD4uLi5dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitTdWJtb2R1bGVzIGFsbG93IGZvcmVpZ24gcmVwb3NpdG9yaWVzIHRvIGJlIGVtYmVkZGVkIHdpdGhpbgorYSBkZWRpY2F0ZWQgc3ViZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgdHJlZSwgYWx3YXlzIHBvaW50ZWQKK2F0IGEgcGFydGljdWxhciBjb21taXQuCisKK1RoZXkgYXJlIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHJlbW90ZXMsIHdoaWNoIGFyZSBtZWFudCBtYWlubHkKK2ZvciBicmFuY2hlcyBvZiB0aGUgc2FtZSBwcm9qZWN0OyBzdWJtb2R1bGVzIGFyZSBtZWFudCBmb3IKK2RpZmZlcmVudCBwcm9qZWN0cyB5b3Ugd291bGQgbGlrZSB0byBtYWtlIHBhcnQgb2YgeW91ciBzb3VyY2UgdHJlZSwKK3doaWxlIHRoZSBoaXN0b3J5IG9mIHRoZSB0d28gcHJvamVjdHMgc3RpbGwgc3RheXMgY29tcGxldGVseQoraW5kZXBlbmRlbnQgYW5kIHlvdSBjYW5ub3QgbW9kaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUgc3VibW9kdWxlCitmcm9tIHdpdGhpbiB0aGUgbWFpbiBwcm9qZWN0LgorSWYgeW91IHdhbnQgdG8gbWVyZ2UgdGhlIHByb2plY3QgaGlzdG9yaWVzIGFuZCB3YW50IHRvIHRyZWF0IHRoZQorYWdncmVnYXRlZCB3aG9sZSBhcyBhIHNpbmdsZSBwcm9qZWN0IGZyb20gdGhlbiBvbiwgeW91IG1heSB3YW50IHRvCithZGQgYSByZW1vdGUgZm9yIHRoZSBvdGhlciBwcm9qZWN0IGFuZCB1c2UgdGhlICdzdWJ0cmVlJyBtZXJnZSBzdHJhdGVneSwKK2luc3RlYWQgb2YgdHJlYXRpbmcgdGhlIG90aGVyIHByb2plY3QgYXMgYSBzdWJtb2R1bGUuIERpcmVjdG9yaWVzCit0aGF0IGNvbWUgZnJvbSBib3RoIHByb2plY3RzIGNhbiBiZSBjbG9uZWQgYW5kIGNoZWNrZWQgb3V0IGFzIGEgd2hvbGUKK2lmIHlvdSBjaG9vc2UgdG8gZ28gdGhhdCByb3V0ZS4KKworU3VibW9kdWxlcyBhcmUgY29tcG9zZWQgZnJvbSBhIHNvLWNhbGxlZCBgZ2l0bGlua2AgdHJlZSBlbnRyeQoraW4gdGhlIG1haW4gcmVwb3NpdG9yeSB0aGF0IHJlZmVycyB0byBhIHBhcnRpY3VsYXIgY29tbWl0IG9iamVjdAord2l0aGluIHRoZSBpbm5lciByZXBvc2l0b3J5IHRoYXQgaXMgY29tcGxldGVseSBzZXBhcmF0ZS4KK0EgcmVjb3JkIGluIHRoZSBgLmdpdG1vZHVsZXNgIChzZWUgbGlua2dpdDpnaXRtb2R1bGVzWzVdKSBmaWxlIGF0IHRoZQorcm9vdCBvZiB0aGUgc291cmNlIHRyZWUgYXNzaWducyBhIGxvZ2ljYWwgbmFtZSB0byB0aGUgc3VibW9kdWxlIGFuZAorZGVzY3JpYmVzIHRoZSBkZWZhdWx0IFVSTCB0aGUgc3VibW9kdWxlIHNoYWxsIGJlIGNsb25lZCBmcm9tLgorVGhlIGxvZ2ljYWwgbmFtZSBjYW4gYmUgdXNlZCBmb3Igb3ZlcnJpZGluZyB0aGlzIFVSTCB3aXRoaW4geW91cgorbG9jYWwgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIChzZWUgJ3N1Ym1vZHVsZSBpbml0JykuCisKK1RoaXMgY29tbWFuZCB3aWxsIG1hbmFnZSB0aGUgdHJlZSBlbnRyaWVzIGFuZCBjb250ZW50cyBvZiB0aGUKK2dpdG1vZHVsZXMgZmlsZSBmb3IgeW91LCBhcyB3ZWxsIGFzIGluc3BlY3QgdGhlIHN0YXR1cyBvZiB5b3VyCitzdWJtb2R1bGVzIGFuZCB1cGRhdGUgdGhlbS4KK1doZW4gYWRkaW5nIGEgbmV3IHN1Ym1vZHVsZSB0byB0aGUgdHJlZSwgdGhlICdhZGQnIHN1YmNvbW1hbmQKK2lzIHRvIGJlIHVzZWQuICBIb3dldmVyLCB3aGVuIHB1bGxpbmcgYSB0cmVlIGNvbnRhaW5pbmcgc3VibW9kdWxlcywKK3RoZXNlIHdpbGwgbm90IGJlIGNoZWNrZWQgb3V0IGJ5IGRlZmF1bHQ7Cit0aGUgJ2luaXQnIGFuZCAndXBkYXRlJyBzdWJjb21tYW5kcyB3aWxsIG1haW50YWluIHN1Ym1vZHVsZXMKK2NoZWNrZWQgb3V0IGFuZCBhdCBhcHByb3ByaWF0ZSByZXZpc2lvbiBpbiB5b3VyIHdvcmtpbmcgdHJlZS4KK1lvdSBjYW4gYnJpZWZseSBpbnNwZWN0IHRoZSB1cC10by1kYXRlIHN0YXR1cyBvZiB5b3VyIHN1Ym1vZHVsZXMKK3VzaW5nIHRoZSAnc3RhdHVzJyBzdWJjb21tYW5kIGFuZCBnZXQgYSBkZXRhaWxlZCBvdmVydmlldyBvZiB0aGUKK2RpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5kZXggYW5kIGNoZWNrb3V0cyB1c2luZyB0aGUgJ3N1bW1hcnknCitzdWJjb21tYW5kLgorCisKK0NPTU1BTkRTCistLS0tLS0tLQorYWRkOjoKKwlBZGQgdGhlIGdpdmVuIHJlcG9zaXRvcnkgYXMgYSBzdWJtb2R1bGUgYXQgdGhlIGdpdmVuIHBhdGgKKwl0byB0aGUgY2hhbmdlc2V0IHRvIGJlIGNvbW1pdHRlZCBuZXh0IHRvIHRoZSBjdXJyZW50CisJcHJvamVjdDogdGhlIGN1cnJlbnQgcHJvamVjdCBpcyB0ZXJtZWQgdGhlICJzdXBlcnByb2plY3QiLgorKworVGhpcyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQ6IDxyZXBvc2l0b3J5Pi4gVGhlIG9wdGlvbmFsCithcmd1bWVudCA8cGF0aD4gaXMgdGhlIHJlbGF0aXZlIGxvY2F0aW9uIGZvciB0aGUgY2xvbmVkIHN1Ym1vZHVsZQordG8gZXhpc3QgaW4gdGhlIHN1cGVycHJvamVjdC4gSWYgPHBhdGg+IGlzIG5vdCBnaXZlbiwgdGhlCisiaHVtYW5pc2giIHBhcnQgb2YgdGhlIHNvdXJjZSByZXBvc2l0b3J5IGlzIHVzZWQgKCJyZXBvIiBmb3IKKyIvcGF0aC90by9yZXBvLmdpdCIgYW5kICJmb28iIGZvciAiaG9zdC54ejpmb28vLmdpdCIpLgorKworPHJlcG9zaXRvcnk+IGlzIHRoZSBVUkwgb2YgdGhlIG5ldyBzdWJtb2R1bGUncyBvcmlnaW4gcmVwb3NpdG9yeS4KK1RoaXMgbWF5IGJlIGVpdGhlciBhbiBhYnNvbHV0ZSBVUkwsIG9yIChpZiBpdCBiZWdpbnMgd2l0aCAuLworb3IgLi4vKSwgdGhlIGxvY2F0aW9uIHJlbGF0aXZlIHRvIHRoZSBzdXBlcnByb2plY3QncyBvcmlnaW4KK3JlcG9zaXRvcnkgKFBsZWFzZSBub3RlIHRoYXQgdG8gc3BlY2lmeSBhIHJlcG9zaXRvcnkgJ2Zvby5naXQnCit3aGljaCBpcyBsb2NhdGVkIHJpZ2h0IG5leHQgdG8gYSBzdXBlcnByb2plY3QgJ2Jhci5naXQnLCB5b3UnbGwKK2hhdmUgdG8gdXNlICcuLi9mb28uZ2l0JyBpbnN0ZWFkIG9mICcuL2Zvby5naXQnIC0gYXMgb25lIG1pZ2h0IGV4cGVjdAord2hlbiBmb2xsb3dpbmcgdGhlIHJ1bGVzIGZvciByZWxhdGl2ZSBVUkxzIC0gYmVjYXVzZSB0aGUgZXZhbHVhdGlvbgorb2YgcmVsYXRpdmUgVVJMcyBpbiBHaXQgaXMgaWRlbnRpY2FsIHRvIHRoYXQgb2YgcmVsYXRpdmUgZGlyZWN0b3JpZXMpLgorSWYgdGhlIHN1cGVycHJvamVjdCBkb2Vzbid0IGhhdmUgYW4gb3JpZ2luIGNvbmZpZ3VyZWQKK3RoZSBzdXBlcnByb2plY3QgaXMgaXRzIG93biBhdXRob3JpdGF0aXZlIHVwc3RyZWFtIGFuZCB0aGUgY3VycmVudAord29ya2luZyBkaXJlY3RvcnkgaXMgdXNlZCBpbnN0ZWFkLgorKworPHBhdGg+IGlzIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBmb3IgdGhlIGNsb25lZCBzdWJtb2R1bGUgdG8KK2V4aXN0IGluIHRoZSBzdXBlcnByb2plY3QuIElmIDxwYXRoPiBkb2VzIG5vdCBleGlzdCwgdGhlbiB0aGUKK3N1Ym1vZHVsZSBpcyBjcmVhdGVkIGJ5IGNsb25pbmcgZnJvbSB0aGUgbmFtZWQgVVJMLiBJZiA8cGF0aD4gZG9lcworZXhpc3QgYW5kIGlzIGFscmVhZHkgYSB2YWxpZCBnaXQgcmVwb3NpdG9yeSwgdGhlbiB0aGlzIGlzIGFkZGVkCit0byB0aGUgY2hhbmdlc2V0IHdpdGhvdXQgY2xvbmluZy4gVGhpcyBzZWNvbmQgZm9ybSBpcyBwcm92aWRlZAordG8gZWFzZSBjcmVhdGluZyBhIG5ldyBzdWJtb2R1bGUgZnJvbSBzY3JhdGNoLCBhbmQgcHJlc3VtZXMKK3RoZSB1c2VyIHdpbGwgbGF0ZXIgcHVzaCB0aGUgc3VibW9kdWxlIHRvIHRoZSBnaXZlbiBVUkwuCisrCitJbiBlaXRoZXIgY2FzZSwgdGhlIGdpdmVuIFVSTCBpcyByZWNvcmRlZCBpbnRvIC5naXRtb2R1bGVzIGZvcgordXNlIGJ5IHN1YnNlcXVlbnQgdXNlcnMgY2xvbmluZyB0aGUgc3VwZXJwcm9qZWN0LiBJZiB0aGUgVVJMIGlzCitnaXZlbiByZWxhdGl2ZSB0byB0aGUgc3VwZXJwcm9qZWN0J3MgcmVwb3NpdG9yeSwgdGhlIHByZXN1bXB0aW9uCitpcyB0aGUgc3VwZXJwcm9qZWN0IGFuZCBzdWJtb2R1bGUgcmVwb3NpdG9yaWVzIHdpbGwgYmUga2VwdAordG9nZXRoZXIgaW4gdGhlIHNhbWUgcmVsYXRpdmUgbG9jYXRpb24sIGFuZCBvbmx5IHRoZQorc3VwZXJwcm9qZWN0J3MgVVJMIG5lZWRzIHRvIGJlIHByb3ZpZGVkOiBnaXQtc3VibW9kdWxlIHdpbGwgY29ycmVjdGx5Citsb2NhdGUgdGhlIHN1Ym1vZHVsZSB1c2luZyB0aGUgcmVsYXRpdmUgVVJMIGluIC5naXRtb2R1bGVzLgorCitzdGF0dXM6OgorCVNob3cgdGhlIHN0YXR1cyBvZiB0aGUgc3VibW9kdWxlcy4gVGhpcyB3aWxsIHByaW50IHRoZSBTSEEtMSBvZiB0aGUKKwljdXJyZW50bHkgY2hlY2tlZCBvdXQgY29tbWl0IGZvciBlYWNoIHN1Ym1vZHVsZSwgYWxvbmcgd2l0aCB0aGUKKwlzdWJtb2R1bGUgcGF0aCBhbmQgdGhlIG91dHB1dCBvZiAnZ2l0IGRlc2NyaWJlJyBmb3IgdGhlCisJU0hBLTEuIEVhY2ggU0hBLTEgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIGAtYCBpZiB0aGUgc3VibW9kdWxlIGlzIG5vdAorCWluaXRpYWxpemVkLCBgK2AgaWYgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBzdWJtb2R1bGUgY29tbWl0CisJZG9lcyBub3QgbWF0Y2ggdGhlIFNIQS0xIGZvdW5kIGluIHRoZSBpbmRleCBvZiB0aGUgY29udGFpbmluZworCXJlcG9zaXRvcnkgYW5kIGBVYCBpZiB0aGUgc3VibW9kdWxlIGhhcyBtZXJnZSBjb25mbGljdHMuCisrCitJZiBgLS1yZWN1cnNpdmVgIGlzIHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgcmVjdXJzZSBpbnRvIG5lc3RlZAorc3VibW9kdWxlcywgYW5kIHNob3cgdGhlaXIgc3RhdHVzIGFzIHdlbGwuCisrCitJZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBjaGFuZ2VzIG9mIHRoZSBjdXJyZW50bHkgaW5pdGlhbGl6ZWQKK3N1Ym1vZHVsZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIGluZGV4IG9yIHRoZSBIRUFELAorbGlua2dpdDpnaXQtc3RhdHVzWzFdIGFuZCBsaW5rZ2l0OmdpdC1kaWZmWzFdIHdpbGwgcHJvdmlkZSB0aGF0IGluZm9ybWF0aW9uCit0b28gKGFuZCBjYW4gYWxzbyByZXBvcnQgY2hhbmdlcyB0byBhIHN1Ym1vZHVsZSdzIHdvcmsgdHJlZSkuCisKK2luaXQ6OgorCUluaXRpYWxpemUgdGhlIHN1Ym1vZHVsZXMsIGkuZS4gcmVnaXN0ZXIgZWFjaCBzdWJtb2R1bGUgbmFtZQorCWFuZCB1cmwgZm91bmQgaW4gLmdpdG1vZHVsZXMgaW50byAuZ2l0L2NvbmZpZy4KKwlJdCB3aWxsIGFsc28gY29weSB0aGUgdmFsdWUgb2YgYHN1Ym1vZHVsZS4kbmFtZS51cGRhdGVgIGludG8KKwkuZ2l0L2NvbmZpZy4KKwlUaGUga2V5IHVzZWQgaW4gLmdpdC9jb25maWcgaXMgYHN1Ym1vZHVsZS4kbmFtZS51cmxgLgorCVRoaXMgY29tbWFuZCBkb2VzIG5vdCBhbHRlciBleGlzdGluZyBpbmZvcm1hdGlvbiBpbiAuZ2l0L2NvbmZpZy4KKwlZb3UgY2FuIHRoZW4gY3VzdG9taXplIHRoZSBzdWJtb2R1bGUgY2xvbmUgVVJMcyBpbiAuZ2l0L2NvbmZpZworCWZvciB5b3VyIGxvY2FsIHNldHVwIGFuZCBwcm9jZWVkIHRvIGBnaXQgc3VibW9kdWxlIHVwZGF0ZWA7CisJeW91IGNhbiBhbHNvIGp1c3QgdXNlIGBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXRgIHdpdGhvdXQKKwl0aGUgZXhwbGljaXQgJ2luaXQnIHN0ZXAgaWYgeW91IGRvIG5vdCBpbnRlbmQgdG8gY3VzdG9taXplCisJYW55IHN1Ym1vZHVsZSBsb2NhdGlvbnMuCisKK3VwZGF0ZTo6CisJVXBkYXRlIHRoZSByZWdpc3RlcmVkIHN1Ym1vZHVsZXMsIGkuZS4gY2xvbmUgbWlzc2luZyBzdWJtb2R1bGVzIGFuZAorCWNoZWNrb3V0IHRoZSBjb21taXQgc3BlY2lmaWVkIGluIHRoZSBpbmRleCBvZiB0aGUgY29udGFpbmluZyByZXBvc2l0b3J5LgorCVRoaXMgd2lsbCBtYWtlIHRoZSBzdWJtb2R1bGVzIEhFQUQgYmUgZGV0YWNoZWQgdW5sZXNzIGAtLXJlYmFzZWAgb3IKKwlgLS1tZXJnZWAgaXMgc3BlY2lmaWVkIG9yIHRoZSBrZXkgYHN1Ym1vZHVsZS4kbmFtZS51cGRhdGVgIGlzIHNldCB0bworCWByZWJhc2VgLCBgbWVyZ2VgIG9yIGBub25lYC4gYG5vbmVgIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWNpZnlpbmcKKwlgLS1jaGVja291dGAuCisrCitJZiB0aGUgc3VibW9kdWxlIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQsIGFuZCB5b3UganVzdCB3YW50IHRvIHVzZSB0aGUKK3NldHRpbmcgYXMgc3RvcmVkIGluIC5naXRtb2R1bGVzLCB5b3UgY2FuIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZSB0aGUKK3N1Ym1vZHVsZSB3aXRoIHRoZSBgLS1pbml0YCBvcHRpb24uCisrCitJZiBgLS1yZWN1cnNpdmVgIGlzIHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgcmVjdXJzZSBpbnRvIHRoZQorcmVnaXN0ZXJlZCBzdWJtb2R1bGVzLCBhbmQgdXBkYXRlIGFueSBuZXN0ZWQgc3VibW9kdWxlcyB3aXRoaW4uCisrCitJZiBgLS1mb3JjZWAgaXMgc3BlY2lmaWVkLCB0aGUgc3VibW9kdWxlIHdpbGwgYmUgY2hlY2tlZCBvdXQgKHVzaW5nCitgZ2l0IGNoZWNrb3V0IC0tZm9yY2VgIGlmIGFwcHJvcHJpYXRlKSwgZXZlbiBpZiB0aGUgY29tbWl0IHNwZWNpZmllZCBpbiB0aGUKK2luZGV4IG9mIHRoZSBjb250YWluaW5nIHJlcG9zaXRvcnkgYWxyZWFkeSBtYXRjaGVzIHRoZSBjb21taXQgY2hlY2tlZCBvdXQgaW4KK3RoZSBzdWJtb2R1bGUuCisKK3N1bW1hcnk6OgorCVNob3cgY29tbWl0IHN1bW1hcnkgYmV0d2VlbiB0aGUgZ2l2ZW4gY29tbWl0IChkZWZhdWx0cyB0byBIRUFEKSBhbmQKKwl3b3JraW5nIHRyZWUvaW5kZXguIEZvciBhIHN1Ym1vZHVsZSBpbiBxdWVzdGlvbiwgYSBzZXJpZXMgb2YgY29tbWl0cworCWluIHRoZSBzdWJtb2R1bGUgYmV0d2VlbiB0aGUgZ2l2ZW4gc3VwZXIgcHJvamVjdCBjb21taXQgYW5kIHRoZQorCWluZGV4IG9yIHdvcmtpbmcgdHJlZSAoc3dpdGNoZWQgYnkgYC0tY2FjaGVkYCkgYXJlIHNob3duLiBJZiB0aGUgb3B0aW9uCisJYC0tZmlsZXNgIGlzIGdpdmVuLCBzaG93IHRoZSBzZXJpZXMgb2YgY29tbWl0cyBpbiB0aGUgc3VibW9kdWxlIGJldHdlZW4KKwl0aGUgaW5kZXggb2YgdGhlIHN1cGVyIHByb2plY3QgYW5kIHRoZSB3b3JraW5nIHRyZWUgb2YgdGhlIHN1Ym1vZHVsZQorCSh0aGlzIG9wdGlvbiBkb2Vzbid0IGFsbG93IHRvIHVzZSB0aGUgYC0tY2FjaGVkYCBvcHRpb24gb3IgdG8gcHJvdmlkZSBhbgorCWV4cGxpY2l0IGNvbW1pdCkuCisrCitVc2luZyB0aGUgYC0tc3VibW9kdWxlPWxvZ2Agb3B0aW9uIHdpdGggbGlua2dpdDpnaXQtZGlmZlsxXSB3aWxsIHByb3ZpZGUgdGhhdAoraW5mb3JtYXRpb24gdG9vLgorCitmb3JlYWNoOjoKKwlFdmFsdWF0ZXMgYW4gYXJiaXRyYXJ5IHNoZWxsIGNvbW1hbmQgaW4gZWFjaCBjaGVja2VkIG91dCBzdWJtb2R1bGUuCisJVGhlIGNvbW1hbmQgaGFzIGFjY2VzcyB0byB0aGUgdmFyaWFibGVzICRuYW1lLCAkcGF0aCwgJHNoYTEgYW5kCisJJHRvcGxldmVsOgorCSRuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSByZWxldmFudCBzdWJtb2R1bGUgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcywKKwkkcGF0aCBpcyB0aGUgbmFtZSBvZiB0aGUgc3VibW9kdWxlIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUKKwlzdXBlcnByb2plY3QsICRzaGExIGlzIHRoZSBjb21taXQgYXMgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCwKKwlhbmQgJHRvcGxldmVsIGlzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB0b3AtbGV2ZWwgb2YgdGhlIHN1cGVycHJvamVjdC4KKwlBbnkgc3VibW9kdWxlcyBkZWZpbmVkIGluIHRoZSBzdXBlcnByb2plY3QgYnV0IG5vdCBjaGVja2VkIG91dCBhcmUKKwlpZ25vcmVkIGJ5IHRoaXMgY29tbWFuZC4gVW5sZXNzIGdpdmVuIGAtLXF1aWV0YCwgZm9yZWFjaCBwcmludHMgdGhlIG5hbWUKKwlvZiBlYWNoIHN1Ym1vZHVsZSBiZWZvcmUgZXZhbHVhdGluZyB0aGUgY29tbWFuZC4KKwlJZiBgLS1yZWN1cnNpdmVgIGlzIGdpdmVuLCBzdWJtb2R1bGVzIGFyZSB0cmF2ZXJzZWQgcmVjdXJzaXZlbHkgKGkuZS4KKwl0aGUgZ2l2ZW4gc2hlbGwgY29tbWFuZCBpcyBldmFsdWF0ZWQgaW4gbmVzdGVkIHN1Ym1vZHVsZXMgYXMgd2VsbCkuCisJQSBub24temVybyByZXR1cm4gZnJvbSB0aGUgY29tbWFuZCBpbiBhbnkgc3VibW9kdWxlIGNhdXNlcworCXRoZSBwcm9jZXNzaW5nIHRvIHRlcm1pbmF0ZS4gVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhZGRpbmcgJ3x8IDonCisJdG8gdGhlIGVuZCBvZiB0aGUgY29tbWFuZC4KKysKK0FzIGFuIGV4YW1wbGUsICtnaXQgc3VibW9kdWxlIGZvcmVhY2ggXCdlY2hvICRwYXRoIHtiYWNrdGlja31naXQKK3Jldi1wYXJzZSBIRUFEe2JhY2t0aWNrfScrIHdpbGwgc2hvdyB0aGUgcGF0aCBhbmQgY3VycmVudGx5IGNoZWNrZWQgb3V0Citjb21taXQgZm9yIGVhY2ggc3VibW9kdWxlLgorCitzeW5jOjoKKwlTeW5jaHJvbml6ZXMgc3VibW9kdWxlcycgcmVtb3RlIFVSTCBjb25maWd1cmF0aW9uIHNldHRpbmcKKwl0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIC5naXRtb2R1bGVzLiBJdCB3aWxsIG9ubHkgYWZmZWN0IHRob3NlCisJc3VibW9kdWxlcyB3aGljaCBhbHJlYWR5IGhhdmUgYSBVUkwgZW50cnkgaW4gLmdpdC9jb25maWcgKHRoYXQgaXMgdGhlCisJY2FzZSB3aGVuIHRoZXkgYXJlIGluaXRpYWxpemVkIG9yIGZyZXNobHkgYWRkZWQpLiBUaGlzIGlzIHVzZWZ1bCB3aGVuCisJc3VibW9kdWxlIFVSTHMgY2hhbmdlIHVwc3RyZWFtIGFuZCB5b3UgbmVlZCB0byB1cGRhdGUgeW91ciBsb2NhbAorCXJlcG9zaXRvcmllcyBhY2NvcmRpbmdseS4KKysKKyJnaXQgc3VibW9kdWxlIHN5bmMiIHN5bmNocm9uaXplcyBhbGwgc3VibW9kdWxlcyB3aGlsZQorImdpdCBzdWJtb2R1bGUgc3luYyBcLS0gQSIgc3luY2hyb25pemVzIHN1Ym1vZHVsZSAiQSIgb25seS4KKworT1BUSU9OUworLS0tLS0tLQorLXE6OgorLS1xdWlldDo6CisJT25seSBwcmludCBlcnJvciBtZXNzYWdlcy4KKworLWI6OgorLS1icmFuY2g6OgorCUJyYW5jaCBvZiByZXBvc2l0b3J5IHRvIGFkZCBhcyBzdWJtb2R1bGUuCisKKy1mOjoKKy0tZm9yY2U6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGFkZCBhbmQgdXBkYXRlIGNvbW1hbmRzLgorCVdoZW4gcnVubmluZyBhZGQsIGFsbG93IGFkZGluZyBhbiBvdGhlcndpc2UgaWdub3JlZCBzdWJtb2R1bGUgcGF0aC4KKwlXaGVuIHJ1bm5pbmcgdXBkYXRlLCB0aHJvdyBhd2F5IGxvY2FsIGNoYW5nZXMgaW4gc3VibW9kdWxlcyB3aGVuCisJc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IGNvbW1pdDsgYW5kIGFsd2F5cyBydW4gYSBjaGVja291dCBvcGVyYXRpb24KKwlpbiB0aGUgc3VibW9kdWxlLCBldmVuIGlmIHRoZSBjb21taXQgbGlzdGVkIGluIHRoZSBpbmRleCBvZiB0aGUKKwljb250YWluaW5nIHJlcG9zaXRvcnkgbWF0Y2hlcyB0aGUgY29tbWl0IGNoZWNrZWQgb3V0IGluIHRoZSBzdWJtb2R1bGUuCisKKy0tY2FjaGVkOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBzdGF0dXMgYW5kIHN1bW1hcnkgY29tbWFuZHMuICBUaGVzZQorCWNvbW1hbmRzIHR5cGljYWxseSB1c2UgdGhlIGNvbW1pdCBmb3VuZCBpbiB0aGUgc3VibW9kdWxlIEhFQUQsIGJ1dAorCXdpdGggdGhpcyBvcHRpb24sIHRoZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpcyB1c2VkIGluc3RlYWQuCisKKy0tZmlsZXM6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBzdW1tYXJ5IGNvbW1hbmQuIFRoaXMgY29tbWFuZAorCWNvbXBhcmVzIHRoZSBjb21taXQgaW4gdGhlIGluZGV4IHdpdGggdGhhdCBpbiB0aGUgc3VibW9kdWxlIEhFQUQKKwl3aGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQuCisKKy1uOjoKKy0tc3VtbWFyeS1saW1pdDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHN1bW1hcnkgY29tbWFuZC4KKwlMaW1pdCB0aGUgc3VtbWFyeSBzaXplIChudW1iZXIgb2YgY29tbWl0cyBzaG93biBpbiB0b3RhbCkuCisJR2l2aW5nIDAgd2lsbCBkaXNhYmxlIHRoZSBzdW1tYXJ5OyBhIG5lZ2F0aXZlIG51bWJlciBtZWFucyB1bmxpbWl0ZWQKKwkodGhlIGRlZmF1bHQpLiBUaGlzIGxpbWl0IG9ubHkgYXBwbGllcyB0byBtb2RpZmllZCBzdWJtb2R1bGVzLiBUaGUKKwlzaXplIGlzIGFsd2F5cyBsaW1pdGVkIHRvIDEgZm9yIGFkZGVkL2RlbGV0ZWQvdHlwZWNoYW5nZWQgc3VibW9kdWxlcy4KKworLU46OgorLS1uby1mZXRjaDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCURvbid0IGZldGNoIG5ldyBvYmplY3RzIGZyb20gdGhlIHJlbW90ZSBzaXRlLgorCistLW1lcmdlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJTWVyZ2UgdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGludG8gdGhlIGN1cnJlbnQgYnJhbmNoCisJb2YgdGhlIHN1Ym1vZHVsZS4gSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBzdWJtb2R1bGUncyBIRUFEIHdpbGwKKwlub3QgYmUgZGV0YWNoZWQuIElmIGEgbWVyZ2UgZmFpbHVyZSBwcmV2ZW50cyB0aGlzIHByb2Nlc3MsIHlvdSB3aWxsCisJaGF2ZSB0byByZXNvbHZlIHRoZSByZXN1bHRpbmcgY29uZmxpY3RzIHdpdGhpbiB0aGUgc3VibW9kdWxlIHdpdGggdGhlCisJdXN1YWwgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scy4KKwlJZiB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBzZXQgdG8gYG1lcmdlYCwgdGhpcyBvcHRpb24gaXMKKwlpbXBsaWNpdC4KKworLS1yZWJhc2U6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KKwlSZWJhc2UgdGhlIGN1cnJlbnQgYnJhbmNoIG9udG8gdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUKKwlzdXBlcnByb2plY3QuIElmIHRoaXMgb3B0aW9uIGlzIGdpdmVuLCB0aGUgc3VibW9kdWxlJ3MgSEVBRCB3aWxsIG5vdAorCWJlIGRldGFjaGVkLiBJZiBhIG1lcmdlIGZhaWx1cmUgcHJldmVudHMgdGhpcyBwcm9jZXNzLCB5b3Ugd2lsbCBoYXZlCisJdG8gcmVzb2x2ZSB0aGVzZSBmYWlsdXJlcyB3aXRoIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKwlJZiB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBzZXQgdG8gYHJlYmFzZWAsIHRoaXMgb3B0aW9uIGlzCisJaW1wbGljaXQuCisKKy0taW5pdDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCUluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMgZm9yIHdoaWNoICJnaXQgc3VibW9kdWxlIGluaXQiIGhhcyBub3QgYmVlbgorCWNhbGxlZCBzbyBmYXIgYmVmb3JlIHVwZGF0aW5nLgorCistLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGFkZCBhbmQgdXBkYXRlIGNvbW1hbmRzLiAgVGhlc2UKKwljb21tYW5kcyBzb21ldGltZXMgbmVlZCB0byBjbG9uZSBhIHJlbW90ZSByZXBvc2l0b3J5LiBJbiB0aGlzIGNhc2UsCisJdGhpcyBvcHRpb24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdIGNvbW1hbmQuCisrCisqTk9URSo6IERvICpub3QqIHVzZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IGhhdmUgcmVhZCB0aGUgbm90ZQorZm9yIGxpbmtnaXQ6Z2l0LWNsb25lWzFdJ3MgYC0tcmVmZXJlbmNlYCBhbmQgYC0tc2hhcmVkYCBvcHRpb25zIGNhcmVmdWxseS4KKworLS1yZWN1cnNpdmU6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGZvcmVhY2gsIHVwZGF0ZSBhbmQgc3RhdHVzIGNvbW1hbmRzLgorCVRyYXZlcnNlIHN1Ym1vZHVsZXMgcmVjdXJzaXZlbHkuIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIG5vdAorCW9ubHkgaW4gdGhlIHN1Ym1vZHVsZXMgb2YgdGhlIGN1cnJlbnQgcmVwbywgYnV0IGFsc28KKwlpbiBhbnkgbmVzdGVkIHN1Ym1vZHVsZXMgaW5zaWRlIHRob3NlIHN1Ym1vZHVsZXMgKGFuZCBzbyBvbikuCisKKzxwYXRoPi4uLjo6CisJUGF0aHMgdG8gc3VibW9kdWxlKHMpLiBXaGVuIHNwZWNpZmllZCB0aGlzIHdpbGwgcmVzdHJpY3QgdGhlIGNvbW1hbmQKKwl0byBvbmx5IG9wZXJhdGUgb24gdGhlIHN1Ym1vZHVsZXMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBwYXRocy4KKwkoVGhpcyBhcmd1bWVudCBpcyByZXF1aXJlZCB3aXRoIGFkZCkuCisKK0ZJTEVTCistLS0tLQorV2hlbiBpbml0aWFsaXppbmcgc3VibW9kdWxlcywgYSAuZ2l0bW9kdWxlcyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CitvZiB0aGUgY29udGFpbmluZyByZXBvc2l0b3J5IGlzIHVzZWQgdG8gZmluZCB0aGUgdXJsIG9mIGVhY2ggc3VibW9kdWxlLgorVGhpcyBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGAkR0lUX0RJUi9jb25maWdgLiBUaGUga2V5Cit0byBlYWNoIHN1Ym1vZHVsZSB1cmwgaXMgInN1Ym1vZHVsZS4kbmFtZS51cmwiLiAgU2VlIGxpbmtnaXQ6Z2l0bW9kdWxlc1s1XQorZm9yIGRldGFpbHMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlOGQyYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKQEAgLTAsMCArMSw5MzggQEAKK2dpdC1zdm4oMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN2biAtIEJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIGdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3ZuJyA8Y29tbWFuZD4gW29wdGlvbnNdIFthcmd1bWVudHNdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorJ2dpdCBzdm4nIGlzIGEgc2ltcGxlIGNvbmR1aXQgZm9yIGNoYW5nZXNldHMgYmV0d2VlbiBTdWJ2ZXJzaW9uIGFuZCBnaXQuCitJdCBwcm92aWRlcyBhIGJpZGlyZWN0aW9uYWwgZmxvdyBvZiBjaGFuZ2VzIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIGFuZCBhIGdpdAorcmVwb3NpdG9yeS4KKworJ2dpdCBzdm4nIGNhbiB0cmFjayBhIHN0YW5kYXJkIFN1YnZlcnNpb24gcmVwb3NpdG9yeSwKK2ZvbGxvd2luZyB0aGUgY29tbW9uICJ0cnVuay9icmFuY2hlcy90YWdzIiBsYXlvdXQsIHdpdGggdGhlIC0tc3RkbGF5b3V0IG9wdGlvbi4KK0l0IGNhbiBhbHNvIGZvbGxvdyBicmFuY2hlcyBhbmQgdGFncyBpbiBhbnkgbGF5b3V0IHdpdGggdGhlIC1ULy10Ly1iIG9wdGlvbnMKKyhzZWUgb3B0aW9ucyB0byAnaW5pdCcgYmVsb3csIGFuZCBhbHNvIHRoZSAnY2xvbmUnIGNvbW1hbmQpLgorCitPbmNlIHRyYWNraW5nIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5ICh3aXRoIGFueSBvZiB0aGUgYWJvdmUgbWV0aG9kcyksIHRoZSBnaXQKK3JlcG9zaXRvcnkgY2FuIGJlIHVwZGF0ZWQgZnJvbSBTdWJ2ZXJzaW9uIGJ5IHRoZSAnZmV0Y2gnIGNvbW1hbmQgYW5kCitTdWJ2ZXJzaW9uIHVwZGF0ZWQgZnJvbSBnaXQgYnkgdGhlICdkY29tbWl0JyBjb21tYW5kLgorCitDT01NQU5EUworLS0tLS0tLS0KKworJ2luaXQnOjoKKwlJbml0aWFsaXplcyBhbiBlbXB0eSBnaXQgcmVwb3NpdG9yeSB3aXRoIGFkZGl0aW9uYWwKKwltZXRhZGF0YSBkaXJlY3RvcmllcyBmb3IgJ2dpdCBzdm4nLiAgVGhlIFN1YnZlcnNpb24gVVJMCisJbWF5IGJlIHNwZWNpZmllZCBhcyBhIGNvbW1hbmQtbGluZSBhcmd1bWVudCwgb3IgYXMgZnVsbAorCVVSTCBhcmd1bWVudHMgdG8gLVQvLXQvLWIuICBPcHRpb25hbGx5LCB0aGUgdGFyZ2V0CisJZGlyZWN0b3J5IHRvIG9wZXJhdGUgb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIHNlY29uZAorCWFyZ3VtZW50LiAgTm9ybWFsbHkgdGhpcyBjb21tYW5kIGluaXRpYWxpemVzIHRoZSBjdXJyZW50CisJZGlyZWN0b3J5LgorCistVDx0cnVua19zdWJkaXI+OzsKKy0tdHJ1bms9PHRydW5rX3N1YmRpcj47OworLXQ8dGFnc19zdWJkaXI+OzsKKy0tdGFncz08dGFnc19zdWJkaXI+OzsKKy1iPGJyYW5jaGVzX3N1YmRpcj47OworLS1icmFuY2hlcz08YnJhbmNoZXNfc3ViZGlyPjs7Cistczs7CistLXN0ZGxheW91dDs7CisJVGhlc2UgYXJlIG9wdGlvbmFsIGNvbW1hbmQtbGluZSBvcHRpb25zIGZvciBpbml0LiAgRWFjaCBvZgorCXRoZXNlIGZsYWdzIGNhbiBwb2ludCB0byBhIHJlbGF0aXZlIHJlcG9zaXRvcnkgcGF0aAorCSgtLXRhZ3M9cHJvamVjdC90YWdzKSBvciBhIGZ1bGwgdXJsCisJKC0tdGFncz1odHRwczovL2Zvby5vcmcvcHJvamVjdC90YWdzKS4KKwlZb3UgY2FuIHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLXRhZ3MgYW5kL29yIC0tYnJhbmNoZXMgb3B0aW9ucywgaW4gY2FzZQorCXlvdXIgU3VidmVyc2lvbiByZXBvc2l0b3J5IHBsYWNlcyB0YWdzIG9yIGJyYW5jaGVzIHVuZGVyIG11bHRpcGxlIHBhdGhzLgorCVRoZSBvcHRpb24gLS1zdGRsYXlvdXQgaXMKKwlhIHNob3J0aGFuZCB3YXkgb2Ygc2V0dGluZyB0cnVuayx0YWdzLGJyYW5jaGVzIGFzIHRoZSByZWxhdGl2ZSBwYXRocywKKwl3aGljaCBpcyB0aGUgU3VidmVyc2lvbiBkZWZhdWx0LiBJZiBhbnkgb2YgdGhlIG90aGVyIG9wdGlvbnMgYXJlIGdpdmVuCisJYXMgd2VsbCwgdGhleSB0YWtlIHByZWNlZGVuY2UuCistLW5vLW1ldGFkYXRhOzsKKwlTZXQgdGhlICdub01ldGFkYXRhJyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCisJVGhpcyBvcHRpb24gaXMgbm90IHJlY29tbWVuZGVkLCBwbGVhc2UgcmVhZCB0aGUgJ3N2bi5ub01ldGFkYXRhJworCXNlY3Rpb24gb2YgdGhpcyBtYW5wYWdlIGJlZm9yZSB1c2luZyB0aGlzIG9wdGlvbi4KKy0tdXNlLXN2bS1wcm9wczs7CisJU2V0IHRoZSAndXNlU3ZtUHJvcHMnIG9wdGlvbiBpbiB0aGUgW3N2bi1yZW1vdGVdIGNvbmZpZy4KKy0tdXNlLXN2bnN5bmMtcHJvcHM7OworCVNldCB0aGUgJ3VzZVN2bnN5bmNQcm9wcycgb3B0aW9uIGluIHRoZSBbc3ZuLXJlbW90ZV0gY29uZmlnLgorLS1yZXdyaXRlLXJvb3Q9PFVSTD47OworCVNldCB0aGUgJ3Jld3JpdGVSb290JyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCistLXJld3JpdGUtdXVpZD08VVVJRD47OworCVNldCB0aGUgJ3Jld3JpdGVVVUlEJyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCistLXVzZXJuYW1lPTx1c2VyPjs7CisJRm9yIHRyYW5zcG9ydHMgdGhhdCBTVk4gaGFuZGxlcyBhdXRoZW50aWNhdGlvbiBmb3IgKGh0dHAsCisJaHR0cHMsIGFuZCBwbGFpbiBzdm4pLCBzcGVjaWZ5IHRoZSB1c2VybmFtZS4gIEZvciBvdGhlcgorCXRyYW5zcG9ydHMgKGVnIHN2bitzc2g6Ly8pLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSB1c2VybmFtZSBpbgorCXRoZSBVUkwsIGVnIHN2bitzc2g6Ly9mb29Ac3ZuLmJhci5jb20vcHJvamVjdAorLS1wcmVmaXg9PHByZWZpeD47OworCVRoaXMgYWxsb3dzIG9uZSB0byBzcGVjaWZ5IGEgcHJlZml4IHdoaWNoIGlzIHByZXBlbmRlZAorCXRvIHRoZSBuYW1lcyBvZiByZW1vdGVzIGlmIHRydW5rL2JyYW5jaGVzL3RhZ3MgYXJlCisJc3BlY2lmaWVkLiAgVGhlIHByZWZpeCBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgYQorCXRyYWlsaW5nIHNsYXNoLCBzbyBiZSBzdXJlIHlvdSBpbmNsdWRlIG9uZSBpbiB0aGUKKwlhcmd1bWVudCBpZiB0aGF0IGlzIHdoYXQgeW91IHdhbnQuICBJZiAtLWJyYW5jaGVzLy1iIGlzCisJc3BlY2lmaWVkLCB0aGUgcHJlZml4IG11c3QgaW5jbHVkZSBhIHRyYWlsaW5nIHNsYXNoLgorCVNldHRpbmcgYSBwcmVmaXggaXMgdXNlZnVsIGlmIHlvdSB3aXNoIHRvIHRyYWNrIG11bHRpcGxlCisJcHJvamVjdHMgdGhhdCBzaGFyZSBhIGNvbW1vbiByZXBvc2l0b3J5LgorLS1pZ25vcmUtcGF0aHM9PHJlZ2V4Pjs7CisJV2hlbiBwYXNzZWQgdG8gJ2luaXQnIG9yICdjbG9uZScgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gd2lsbAorCWJlIHByZXNlcnZlZCBhcyBhIGNvbmZpZyBrZXkuICBTZWUgJ2ZldGNoJyBmb3IgYSBkZXNjcmlwdGlvbgorCW9mICctLWlnbm9yZS1wYXRocycuCistLW5vLW1pbmltaXplLXVybDs7CisJV2hlbiB0cmFja2luZyBtdWx0aXBsZSBkaXJlY3RvcmllcyAodXNpbmcgLS1zdGRsYXlvdXQsCisJLS1icmFuY2hlcywgb3IgLS10YWdzIG9wdGlvbnMpLCBnaXQgc3ZuIHdpbGwgYXR0ZW1wdCB0byBjb25uZWN0CisJdG8gdGhlIHJvb3QgKG9yIGhpZ2hlc3QgYWxsb3dlZCBsZXZlbCkgb2YgdGhlIFN1YnZlcnNpb24KKwlyZXBvc2l0b3J5LiAgVGhpcyBkZWZhdWx0IGFsbG93cyBiZXR0ZXIgdHJhY2tpbmcgb2YgaGlzdG9yeSBpZgorCWVudGlyZSBwcm9qZWN0cyBhcmUgbW92ZWQgd2l0aGluIGEgcmVwb3NpdG9yeSwgYnV0IG1heSBjYXVzZQorCWlzc3VlcyBvbiByZXBvc2l0b3JpZXMgd2hlcmUgcmVhZCBhY2Nlc3MgcmVzdHJpY3Rpb25zIGFyZSBpbgorCXBsYWNlLiAgUGFzc2luZyAnLS1uby1taW5pbWl6ZS11cmwnIHdpbGwgYWxsb3cgZ2l0IHN2biB0bworCWFjY2VwdCBVUkxzIGFzLWlzIHdpdGhvdXQgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGEgaGlnaGVyCisJbGV2ZWwgZGlyZWN0b3J5LiAgVGhpcyBvcHRpb24gaXMgb2ZmIGJ5IGRlZmF1bHQgd2hlbiBvbmx5CisJb25lIFVSTC9icmFuY2ggaXMgdHJhY2tlZCAoaXQgd291bGQgZG8gbGl0dGxlIGdvb2QpLgorCisnZmV0Y2gnOjoKKwlGZXRjaCB1bmZldGNoZWQgcmV2aXNpb25zIGZyb20gdGhlIFN1YnZlcnNpb24gcmVtb3RlIHdlIGFyZQorCXRyYWNraW5nLiAgVGhlIG5hbWUgb2YgdGhlIFtzdm4tcmVtb3RlICIuLi4iXSBzZWN0aW9uIGluIHRoZQorCS5naXQvY29uZmlnIGZpbGUgbWF5IGJlIHNwZWNpZmllZCBhcyBhbiBvcHRpb25hbCBjb21tYW5kLWxpbmUKKwlhcmd1bWVudC4KKworLS1sb2NhbHRpbWU7OworCVN0b3JlIEdpdCBjb21taXQgdGltZXMgaW4gdGhlIGxvY2FsIHRpbWV6b25lIGluc3RlYWQgb2YgVVRDLiAgVGhpcworCW1ha2VzICdnaXQgbG9nJyAoZXZlbiB3aXRob3V0IC0tZGF0ZT1sb2NhbCkgc2hvdyB0aGUgc2FtZSB0aW1lcworCXRoYXQgYHN2biBsb2dgIHdvdWxkIGluIHRoZSBsb2NhbCB0aW1lem9uZS4KKysKK1RoaXMgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCBpbnRlcm9wZXJhdGluZyB3aXRoIHRoZSBTdWJ2ZXJzaW9uCityZXBvc2l0b3J5IHlvdSBjbG9uZWQgZnJvbSwgYnV0IGlmIHlvdSB3aXNoIGZvciB5b3VyIGxvY2FsIEdpdAorcmVwb3NpdG9yeSB0byBiZSBhYmxlIHRvIGludGVyb3BlcmF0ZSB3aXRoIHNvbWVvbmUgZWxzZSdzIGxvY2FsIEdpdAorcmVwb3NpdG9yeSwgZWl0aGVyIGRvbid0IHVzZSB0aGlzIG9wdGlvbiBvciB5b3Ugc2hvdWxkIGJvdGggdXNlIGl0IGluCit0aGUgc2FtZSBsb2NhbCB0aW1lem9uZS4KKworLS1wYXJlbnQ7OworCUZldGNoIG9ubHkgZnJvbSB0aGUgU1ZOIHBhcmVudCBvZiB0aGUgY3VycmVudCBIRUFELgorCistLWlnbm9yZS1wYXRocz08cmVnZXg+OzsKKwlUaGlzIGFsbG93cyBvbmUgdG8gc3BlY2lmeSBhIFBlcmwgcmVndWxhciBleHByZXNzaW9uIHRoYXQgd2lsbAorCWNhdXNlIHNraXBwaW5nIG9mIGFsbCBtYXRjaGluZyBwYXRocyBmcm9tIGNoZWNrb3V0IGZyb20gU1ZOLgorCVRoZSAnLS1pZ25vcmUtcGF0aHMnIG9wdGlvbiBzaG91bGQgbWF0Y2ggZm9yIGV2ZXJ5ICdmZXRjaCcKKwkoaW5jbHVkaW5nIGF1dG9tYXRpYyBmZXRjaGVzIGR1ZSB0byAnY2xvbmUnLCAnZGNvbW1pdCcsCisJJ3JlYmFzZScsIGV0Yykgb24gYSBnaXZlbiByZXBvc2l0b3J5LgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLXJlbW90ZS48bmFtZT4uaWdub3JlLXBhdGhzCisrCitJZiB0aGUgaWdub3JlLXBhdGhzIGNvbmZpZyBrZXkgaXMgc2V0IGFuZCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiBpcworYWxzbyBnaXZlbiwgYm90aCByZWd1bGFyIGV4cHJlc3Npb25zIHdpbGwgYmUgdXNlZC4KKysKK0V4YW1wbGVzOgorKworLS0KK1NraXAgImRvYyoiIGRpcmVjdG9yeSBmb3IgZXZlcnkgZmV0Y2g7OworKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLWlnbm9yZS1wYXRocz0iXmRvYyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTa2lwICJicmFuY2hlcyIgYW5kICJ0YWdzIiBvZiBmaXJzdCBsZXZlbCBkaXJlY3Rvcmllczs7CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0taWdub3JlLXBhdGhzPSJeW14vXSsvKD86YnJhbmNoZXN8dGFncykiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tCisKKydjbG9uZSc6OgorCVJ1bnMgJ2luaXQnIGFuZCAnZmV0Y2gnLiAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhCisJZGlyZWN0b3J5IGJhc2VkIG9uIHRoZSBiYXNlbmFtZSBvZiB0aGUgVVJMIHBhc3NlZCB0byBpdDsKKwlvciBpZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwYXNzZWQ7IGl0IHdpbGwgY3JlYXRlIGEgZGlyZWN0b3J5CisJYW5kIHdvcmsgd2l0aGluIHRoYXQuICBJdCBhY2NlcHRzIGFsbCBhcmd1bWVudHMgdGhhdCB0aGUKKwknaW5pdCcgYW5kICdmZXRjaCcgY29tbWFuZHMgYWNjZXB0OyB3aXRoIHRoZSBleGNlcHRpb24gb2YKKwknLS1mZXRjaC1hbGwnIGFuZCAnLS1wYXJlbnQnLiAgQWZ0ZXIgYSByZXBvc2l0b3J5IGlzIGNsb25lZCwKKwl0aGUgJ2ZldGNoJyBjb21tYW5kIHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgcmV2aXNpb25zIHdpdGhvdXQKKwlhZmZlY3RpbmcgdGhlIHdvcmtpbmcgdHJlZTsgYW5kIHRoZSAncmViYXNlJyBjb21tYW5kIHdpbGwgYmUKKwlhYmxlIHRvIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIHdpdGggdGhlIGxhdGVzdCBjaGFuZ2VzLgorCistLXByZXNlcnZlLWVtcHR5LWRpcnM7OworCUNyZWF0ZSBhIHBsYWNlaG9sZGVyIGZpbGUgaW4gdGhlIGxvY2FsIEdpdCByZXBvc2l0b3J5IGZvciBlYWNoCisJZW1wdHkgZGlyZWN0b3J5IGZldGNoZWQgZnJvbSBTdWJ2ZXJzaW9uLiAgVGhpcyBpbmNsdWRlcyBkaXJlY3RvcmllcworCXRoYXQgYmVjb21lIGVtcHR5IGJ5IHJlbW92aW5nIGFsbCBlbnRyaWVzIGluIHRoZSBTdWJ2ZXJzaW9uCisJcmVwb3NpdG9yeSAoYnV0IG5vdCB0aGUgZGlyZWN0b3J5IGl0c2VsZikuICBUaGUgcGxhY2Vob2xkZXIgZmlsZXMKKwlhcmUgYWxzbyB0cmFja2VkIGFuZCByZW1vdmVkIHdoZW4gbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKworLS1wbGFjZWhvbGRlci1maWxlbmFtZT08ZmlsZW5hbWU+OzsKKwlTZXQgdGhlIG5hbWUgb2YgcGxhY2Vob2xkZXIgZmlsZXMgY3JlYXRlZCBieSAtLXByZXNlcnZlLWVtcHR5LWRpcnMuCisJRGVmYXVsdDogIi5naXRpZ25vcmUiCisKKydyZWJhc2UnOjoKKwlUaGlzIGZldGNoZXMgcmV2aXNpb25zIGZyb20gdGhlIFNWTiBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgSEVBRAorCWFuZCByZWJhc2VzIHRoZSBjdXJyZW50ICh1bmNvbW1pdHRlZCB0byBTVk4pIHdvcmsgYWdhaW5zdCBpdC4KKysKK1RoaXMgd29ya3Mgc2ltaWxhcmx5IHRvIGBzdm4gdXBkYXRlYCBvciAnZ2l0IHB1bGwnIGV4Y2VwdCB0aGF0CitpdCBwcmVzZXJ2ZXMgbGluZWFyIGhpc3Rvcnkgd2l0aCAnZ2l0IHJlYmFzZScgaW5zdGVhZCBvZgorJ2dpdCBtZXJnZScgZm9yIGVhc2Ugb2YgZGNvbW1pdHRpbmcgd2l0aCAnZ2l0IHN2bicuCisrCitUaGlzIGFjY2VwdHMgYWxsIG9wdGlvbnMgdGhhdCAnZ2l0IHN2biBmZXRjaCcgYW5kICdnaXQgcmViYXNlJworYWNjZXB0LiAgSG93ZXZlciwgJy0tZmV0Y2gtYWxsJyBvbmx5IGZldGNoZXMgZnJvbSB0aGUgY3VycmVudAorW3N2bi1yZW1vdGVdLCBhbmQgbm90IGFsbCBbc3ZuLXJlbW90ZV0gZGVmaW5pdGlvbnMuCisrCitMaWtlICdnaXQgcmViYXNlJzsgdGhpcyByZXF1aXJlcyB0aGF0IHRoZSB3b3JraW5nIHRyZWUgYmUgY2xlYW4KK2FuZCBoYXZlIG5vIHVuY29tbWl0dGVkIGNoYW5nZXMuCisKKy1sOzsKKy0tbG9jYWw7OworCURvIG5vdCBmZXRjaCByZW1vdGVseTsgb25seSBydW4gJ2dpdCByZWJhc2UnIGFnYWluc3QgdGhlCisJbGFzdCBmZXRjaGVkIGNvbW1pdCBmcm9tIHRoZSB1cHN0cmVhbSBTVk4uCisKKydkY29tbWl0Jzo6CisJQ29tbWl0IGVhY2ggZGlmZiBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCBkaXJlY3RseSB0byB0aGUgU1ZOCisJcmVwb3NpdG9yeSwgYW5kIHRoZW4gcmViYXNlIG9yIHJlc2V0IChkZXBlbmRpbmcgb24gd2hldGhlciBvcgorCW5vdCB0aGVyZSBpcyBhIGRpZmYgYmV0d2VlbiBTVk4gYW5kIGhlYWQpLiAgVGhpcyB3aWxsIGNyZWF0ZQorCWEgcmV2aXNpb24gaW4gU1ZOIGZvciBlYWNoIGNvbW1pdCBpbiBnaXQuCisrCitXaGVuIGFuIG9wdGlvbmFsIGdpdCBicmFuY2ggbmFtZSAob3IgYSBnaXQgY29tbWl0IG9iamVjdCBuYW1lKQoraXMgc3BlY2lmaWVkIGFzIGFuIGFyZ3VtZW50LCB0aGUgc3ViY29tbWFuZCB3b3JrcyBvbiB0aGUgc3BlY2lmaWVkCiticmFuY2gsIG5vdCBvbiB0aGUgY3VycmVudCBicmFuY2guCisrCitVc2Ugb2YgJ2Rjb21taXQnIGlzIHByZWZlcnJlZCB0byAnc2V0LXRyZWUnIChiZWxvdykuCisrCistLW5vLXJlYmFzZTs7CisJQWZ0ZXIgY29tbWl0dGluZywgZG8gbm90IHJlYmFzZSBvciByZXNldC4KKy0tY29tbWl0LXVybCA8VVJMPjs7CisJQ29tbWl0IHRvIHRoaXMgU1ZOIFVSTCAodGhlIGZ1bGwgcGF0aCkuICBUaGlzIGlzIGludGVuZGVkIHRvCisJYWxsb3cgZXhpc3RpbmcgJ2dpdCBzdm4nIHJlcG9zaXRvcmllcyBjcmVhdGVkIHdpdGggb25lIHRyYW5zcG9ydAorCW1ldGhvZCAoZS5nLiBgc3ZuOi8vYCBvciBgaHR0cDovL2AgZm9yIGFub255bW91cyByZWFkKSB0byBiZQorCXJldXNlZCBpZiBhIHVzZXIgaXMgbGF0ZXIgZ2l2ZW4gYWNjZXNzIHRvIGFuIGFsdGVybmF0ZSB0cmFuc3BvcnQKKwltZXRob2QgKGUuZy4gYHN2bitzc2g6Ly9gIG9yIGBodHRwczovL2ApIGZvciBjb21taXQuCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4tcmVtb3RlLjxuYW1lPi5jb21taXR1cmwKK2NvbmZpZyBrZXk6IHN2bi5jb21taXR1cmwgKG92ZXJ3cml0ZXMgYWxsIHN2bi1yZW1vdGUuPG5hbWU+LmNvbW1pdHVybCBvcHRpb25zKQorKworVXNpbmcgdGhpcyBvcHRpb24gZm9yIGFueSBvdGhlciBwdXJwb3NlIChkb24ndCBhc2spIGlzIHZlcnkgc3Ryb25nbHkKK2Rpc2NvdXJhZ2VkLgorCistLW1lcmdlaW5mbz08bWVyZ2VpbmZvPjs7CisJQWRkIHRoZSBnaXZlbiBtZXJnZSBpbmZvcm1hdGlvbiBkdXJpbmcgdGhlIGRjb21taXQKKwkoZS5nLiBgLS1tZXJnZWluZm89Ii9icmFuY2hlcy9mb286MS0xMCJgKS4gQWxsIHN2biBzZXJ2ZXIgdmVyc2lvbnMgY2FuCisJc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiAoYXMgYSBwcm9wZXJ0eSksIGFuZCBzdm4gY2xpZW50cyBzdGFydGluZyBmcm9tCisJdmVyc2lvbiAxLjUgY2FuIG1ha2UgdXNlIG9mIGl0LiBUbyBzcGVjaWZ5IG1lcmdlIGluZm9ybWF0aW9uIGZyb20gbXVsdGlwbGUKKwlicmFuY2hlcywgdXNlIGEgc2luZ2xlIHNwYWNlIGNoYXJhY3RlciBiZXR3ZWVuIHRoZSBicmFuY2hlcworCShgLS1tZXJnZWluZm89Ii9icmFuY2hlcy9mb286MS0xMCAvYnJhbmNoZXMvYmFyOjMsNS02LDgiYCkKKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi5wdXNobWVyZ2VpbmZvCisrCitUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIGdpdC1zdm4gdG8gYXR0ZW1wdCB0byBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlIHRoZQorc3ZuOm1lcmdlaW5mbyBwcm9wZXJ0eSBpbiB0aGUgU1ZOIHJlcG9zaXRvcnkgd2hlbiBwb3NzaWJsZS4gQ3VycmVudGx5LCB0aGlzIGNhbgorb25seSBiZSBkb25lIHdoZW4gZGNvbW1pdHRpbmcgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZXMgd2hlcmUgYWxsIHBhcmVudHMgYnV0IHRoZQorZmlyc3QgaGF2ZSBhbHJlYWR5IGJlZW4gcHVzaGVkIGludG8gU1ZOLgorCistLWludGVyYWN0aXZlOzsKKwlBc2sgdGhlIHVzZXIgdG8gY29uZmlybSB0aGF0IGEgcGF0Y2ggc2V0IHNob3VsZCBhY3R1YWxseSBiZSBzZW50IHRvIFNWTi4KKwlGb3IgZWFjaCBwYXRjaCwgb25lIG1heSBhbnN3ZXIgInllcyIgKGFjY2VwdCB0aGlzIHBhdGNoKSwgIm5vIiAoZGlzY2FyZCB0aGlzCisJcGF0Y2gpLCAiYWxsIiAoYWNjZXB0IGFsbCBwYXRjaGVzKSwgb3IgInF1aXQiLgorCSsKKwknZ2l0IHN2biBkY29tbWl0JyByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIGFuc3dlciBpZiAibm8iIG9yICJxdWl0Iiwgd2l0aG91dAorCWNvbW1pdGluZyBhbnl0aGluZyB0byBTVk4uCisKKydicmFuY2gnOjoKKwlDcmVhdGUgYSBicmFuY2ggaW4gdGhlIFNWTiByZXBvc2l0b3J5LgorCistbTs7CistLW1lc3NhZ2U7OworCUFsbG93cyB0byBzcGVjaWZ5IHRoZSBjb21taXQgbWVzc2FnZS4KKworLXQ7OworLS10YWc7OworCUNyZWF0ZSBhIHRhZyBieSB1c2luZyB0aGUgdGFnc19zdWJkaXIgaW5zdGVhZCBvZiB0aGUgYnJhbmNoZXNfc3ViZGlyCisJc3BlY2lmaWVkIGR1cmluZyBnaXQgc3ZuIGluaXQuCisKKy1kOzsKKy0tZGVzdGluYXRpb247OworCUlmIG1vcmUgdGhhbiBvbmUgLS1icmFuY2hlcyAob3IgLS10YWdzKSBvcHRpb24gd2FzIGdpdmVuIHRvIHRoZSAnaW5pdCcKKwlvciAnY2xvbmUnIGNvbW1hbmQsIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBicmFuY2ggKG9yCisJdGFnKSB5b3Ugd2lzaCB0byBjcmVhdGUgaW4gdGhlIFNWTiByZXBvc2l0b3J5LiAgVGhlIHZhbHVlIG9mIHRoaXMKKwlvcHRpb24gbXVzdCBtYXRjaCBvbmUgb2YgdGhlIHBhdGhzIHNwZWNpZmllZCBieSBhIC0tYnJhbmNoZXMgKG9yCisJLS10YWdzKSBvcHRpb24uICBZb3UgY2FuIHNlZSB0aGVzZSBwYXRocyB3aXRoIHRoZSBjb21tYW5kcworKworCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuPG5hbWU+LmJyYW5jaGVzCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS48bmFtZT4udGFncworKword2hlcmUgPG5hbWU+IGlzIHRoZSBuYW1lIG9mIHRoZSBTVk4gcmVwb3NpdG9yeSBhcyBzcGVjaWZpZWQgYnkgdGhlIC1SIG9wdGlvbiB0bworJ2luaXQnIChvciAic3ZuIiBieSBkZWZhdWx0KS4KKworLS11c2VybmFtZTs7CisJU3BlY2lmeSB0aGUgU1ZOIHVzZXJuYW1lIHRvIHBlcmZvcm0gdGhlIGNvbW1pdCBhcy4gIFRoaXMgb3B0aW9uIG92ZXJyaWRlcworCXRoZSAndXNlcm5hbWUnIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkuCisKKy0tY29tbWl0LXVybDs7CisJVXNlIHRoZSBzcGVjaWZpZWQgVVJMIHRvIGNvbm5lY3QgdG8gdGhlIGRlc3RpbmF0aW9uIFN1YnZlcnNpb24KKwlyZXBvc2l0b3J5LiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgdGhlIHNvdXJjZSBTVk4KKwlyZXBvc2l0b3J5IGlzIHJlYWQtb25seS4gIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBjb25maWd1cmF0aW9uCisJcHJvcGVydHkgJ2NvbW1pdHVybCcuCisrCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS48bmFtZT4uY29tbWl0dXJsCisrCisKKyd0YWcnOjoKKwlDcmVhdGUgYSB0YWcgaW4gdGhlIFNWTiByZXBvc2l0b3J5LiBUaGlzIGlzIGEgc2hvcnRoYW5kIGZvcgorCSdicmFuY2ggLXQnLgorCisnbG9nJzo6CisJVGhpcyBzaG91bGQgbWFrZSBpdCBlYXN5IHRvIGxvb2sgdXAgc3ZuIGxvZyBtZXNzYWdlcyB3aGVuIHN2bgorCXVzZXJzIHJlZmVyIHRvIC1yLy0tcmV2aXNpb24gbnVtYmVycy4KKysKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgZnJvbSBgc3ZuIGxvZycgYXJlIHN1cHBvcnRlZDoKKysKKy0tCistciA8bj5bOjxuPl07OworLS1yZXZpc2lvbj08bj5bOjxuPl07OworCWlzIHN1cHBvcnRlZCwgbm9uLW51bWVyaWMgYXJncyBhcmUgbm90OgorCUhFQUQsIE5FWFQsIEJBU0UsIFBSRVYsIGV0YyAuLi4KKy12OzsKKy0tdmVyYm9zZTs7CisJaXQncyBub3QgY29tcGxldGVseSBjb21wYXRpYmxlIHdpdGggdGhlIC0tdmVyYm9zZQorCW91dHB1dCBpbiBzdm4gbG9nLCBidXQgcmVhc29uYWJseSBjbG9zZS4KKy0tbGltaXQ9PG4+OzsKKwlpcyBOT1QgdGhlIHNhbWUgYXMgLS1tYXgtY291bnQsIGRvZXNuJ3QgY291bnQKKwltZXJnZWQvZXhjbHVkZWQgY29tbWl0cworLS1pbmNyZW1lbnRhbDs7CisJc3VwcG9ydGVkCistLQorKworTmV3IGZlYXR1cmVzOgorKworLS0KKy0tc2hvdy1jb21taXQ7OworCXNob3dzIHRoZSBnaXQgY29tbWl0IHNoYTEsIGFzIHdlbGwKKy0tb25lbGluZTs7CisJb3VyIHZlcnNpb24gb2YgLS1wcmV0dHk9b25lbGluZQorLS0KKysKK05PVEU6IFNWTiBpdHNlbGYgb25seSBzdG9yZXMgdGltZXMgaW4gVVRDIGFuZCBub3RoaW5nIGVsc2UuIFRoZSByZWd1bGFyIHN2bgorY2xpZW50IGNvbnZlcnRzIHRoZSBVVEMgdGltZSB0byB0aGUgbG9jYWwgdGltZSAob3IgYmFzZWQgb24gdGhlIFRaPQorZW52aXJvbm1lbnQpLiBUaGlzIGNvbW1hbmQgaGFzIHRoZSBzYW1lIGJlaGF2aW91ci4KKysKK0FueSBvdGhlciBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGxvZycKKworJ2JsYW1lJzo6CisgICAgICAgU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlLiBUaGUKKyAgICAgICBvdXRwdXQgb2YgdGhpcyBtb2RlIGlzIGZvcm1hdC1jb21wYXRpYmxlIHdpdGggdGhlIG91dHB1dCBvZgorICAgICAgIGBzdm4gYmxhbWUnIGJ5IGRlZmF1bHQuIExpa2UgdGhlIFNWTiBibGFtZSBjb21tYW5kLAorICAgICAgIGxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhcmUgaWdub3JlZDsKKyAgICAgICB0aGUgdmVyc2lvbiBvZiB0aGUgZmlsZSBpbiB0aGUgSEVBRCByZXZpc2lvbiBpcyBhbm5vdGF0ZWQuIFVua25vd24KKyAgICAgICBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGJsYW1lJy4KKysKKy0tZ2l0LWZvcm1hdDs7CisJUHJvZHVjZSBvdXRwdXQgaW4gdGhlIHNhbWUgZm9ybWF0IGFzICdnaXQgYmxhbWUnLCBidXQgd2l0aAorCVNWTiByZXZpc2lvbiBudW1iZXJzIGluc3RlYWQgb2YgZ2l0IGNvbW1pdCBoYXNoZXMuIEluIHRoaXMgbW9kZSwKKwljaGFuZ2VzIHRoYXQgaGF2ZW4ndCBiZWVuIGNvbW1pdHRlZCB0byBTVk4gKGluY2x1ZGluZyBsb2NhbAorCXdvcmtpbmctY29weSBlZGl0cykgYXJlIHNob3duIGFzIHJldmlzaW9uIDAuCisKKydmaW5kLXJldic6OgorCVdoZW4gZ2l2ZW4gYW4gU1ZOIHJldmlzaW9uIG51bWJlciBvZiB0aGUgZm9ybSAnck4nLCByZXR1cm5zIHRoZQorCWNvcnJlc3BvbmRpbmcgZ2l0IGNvbW1pdCBoYXNoICh0aGlzIGNhbiBvcHRpb25hbGx5IGJlIGZvbGxvd2VkIGJ5IGEKKwl0cmVlLWlzaCB0byBzcGVjaWZ5IHdoaWNoIGJyYW5jaCBzaG91bGQgYmUgc2VhcmNoZWQpLiAgV2hlbiBnaXZlbiBhCisJdHJlZS1pc2gsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgU1ZOIHJldmlzaW9uIG51bWJlci4KKworJ3NldC10cmVlJzo6CisJWW91IHNob3VsZCBjb25zaWRlciB1c2luZyAnZGNvbW1pdCcgaW5zdGVhZCBvZiB0aGlzIGNvbW1hbmQuCisJQ29tbWl0IHNwZWNpZmllZCBjb21taXQgb3IgdHJlZSBvYmplY3RzIHRvIFNWTi4gIFRoaXMgcmVsaWVzIG9uCisJeW91ciBpbXBvcnRlZCBmZXRjaCBkYXRhIGJlaW5nIHVwLXRvLWRhdGUuICBUaGlzIG1ha2VzCisJYWJzb2x1dGVseSBubyBhdHRlbXB0cyB0byBkbyBwYXRjaGluZyB3aGVuIGNvbW1pdHRpbmcgdG8gU1ZOLCBpdAorCXNpbXBseSBvdmVyd3JpdGVzIGZpbGVzIHdpdGggdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSB0cmVlIG9yCisJY29tbWl0LiAgQWxsIG1lcmdpbmcgaXMgYXNzdW1lZCB0byBoYXZlIHRha2VuIHBsYWNlCisJaW5kZXBlbmRlbnRseSBvZiAnZ2l0IHN2bicgZnVuY3Rpb25zLgorCisnY3JlYXRlLWlnbm9yZSc6OgorCVJlY3Vyc2l2ZWx5IGZpbmRzIHRoZSBzdm46aWdub3JlIHByb3BlcnR5IG9uIGRpcmVjdG9yaWVzIGFuZAorCWNyZWF0ZXMgbWF0Y2hpbmcgLmdpdGlnbm9yZSBmaWxlcy4gVGhlIHJlc3VsdGluZyBmaWxlcyBhcmUgc3RhZ2VkIHRvCisJYmUgY29tbWl0dGVkLCBidXQgYXJlIG5vdCBjb21taXR0ZWQuIFVzZSAtci8tLXJldmlzaW9uIHRvIHJlZmVyIHRvIGEKKwlzcGVjaWZpYyByZXZpc2lvbi4KKworJ3Nob3ctaWdub3JlJzo6CisJUmVjdXJzaXZlbHkgZmluZHMgYW5kIGxpc3RzIHRoZSBzdm46aWdub3JlIHByb3BlcnR5IG9uCisJZGlyZWN0b3JpZXMuICBUaGUgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciBhcHBlbmRpbmcgdG8KKwl0aGUgJEdJVF9ESVIvaW5mby9leGNsdWRlIGZpbGUuCisKKydta2RpcnMnOjoKKwlBdHRlbXB0cyB0byByZWNyZWF0ZSBlbXB0eSBkaXJlY3RvcmllcyB0aGF0IGNvcmUgZ2l0IGNhbm5vdCB0cmFjaworCWJhc2VkIG9uIGluZm9ybWF0aW9uIGluICRHSVRfRElSL3N2bi88cmVmbmFtZT4vdW5oYW5kbGVkLmxvZyBmaWxlcy4KKwlFbXB0eSBkaXJlY3RvcmllcyBhcmUgYXV0b21hdGljYWxseSByZWNyZWF0ZWQgd2hlbiB1c2luZworCSJnaXQgc3ZuIGNsb25lIiBhbmQgImdpdCBzdm4gcmViYXNlIiwgc28gIm1rZGlycyIgaXMgaW50ZW5kZWQKKwlmb3IgdXNlIGFmdGVyIGNvbW1hbmRzIGxpa2UgImdpdCBjaGVja291dCIgb3IgImdpdCByZXNldCIuCisJKFNlZSB0aGUgc3ZuLXJlbW90ZS48bmFtZT4uYXV0b21rZGlycyBjb25maWcgZmlsZSBvcHRpb24gZm9yCisJbW9yZSBpbmZvcm1hdGlvbi4pCisKKydjb21taXQtZGlmZic6OgorCUNvbW1pdHMgdGhlIGRpZmYgb2YgdHdvIHRyZWUtaXNoIGFyZ3VtZW50cyBmcm9tIHRoZQorCWNvbW1hbmQtbGluZS4gIFRoaXMgY29tbWFuZCBkb2VzIG5vdCByZWx5IG9uIGJlaW5nIGluc2lkZSBhbiBgZ2l0IHN2bgorCWluaXRgLWVkIHJlcG9zaXRvcnkuICBUaGlzIGNvbW1hbmQgdGFrZXMgdGhyZWUgYXJndW1lbnRzLCAoYSkgdGhlCisJb3JpZ2luYWwgdHJlZSB0byBkaWZmIGFnYWluc3QsIChiKSB0aGUgbmV3IHRyZWUgcmVzdWx0LCAoYykgdGhlCisJVVJMIG9mIHRoZSB0YXJnZXQgU3VidmVyc2lvbiByZXBvc2l0b3J5LiAgVGhlIGZpbmFsIGFyZ3VtZW50CisJKFVSTCkgbWF5IGJlIG9taXR0ZWQgaWYgeW91IGFyZSB3b3JraW5nIGZyb20gYSAnZ2l0IHN2bictYXdhcmUKKwlyZXBvc2l0b3J5ICh0aGF0IGhhcyBiZWVuIGBpbml0YC1lZCB3aXRoICdnaXQgc3ZuJykuCisJVGhlIC1yPHJldmlzaW9uPiBvcHRpb24gaXMgcmVxdWlyZWQgZm9yIHRoaXMuCisKKydpbmZvJzo6CisJU2hvd3MgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlIG9yIGRpcmVjdG9yeSBzaW1pbGFyIHRvIHdoYXQKKwlgc3ZuIGluZm8nIHByb3ZpZGVzLiAgRG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgYSAtci8tLXJldmlzaW9uCisJYXJndW1lbnQuICBVc2UgdGhlIC0tdXJsIG9wdGlvbiB0byBvdXRwdXQgb25seSB0aGUgdmFsdWUgb2YgdGhlCisJJ1VSTDonIGZpZWxkLgorCisncHJvcGxpc3QnOjoKKwlMaXN0cyB0aGUgcHJvcGVydGllcyBzdG9yZWQgaW4gdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhYm91dCBhCisJZ2l2ZW4gZmlsZSBvciBkaXJlY3RvcnkuICBVc2UgLXIvLS1yZXZpc2lvbiB0byByZWZlciB0byBhIHNwZWNpZmljCisJU3VidmVyc2lvbiByZXZpc2lvbi4KKworJ3Byb3BnZXQnOjoKKwlHZXRzIHRoZSBTdWJ2ZXJzaW9uIHByb3BlcnR5IGdpdmVuIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgZm9yIGEKKwlmaWxlLiAgQSBzcGVjaWZpYyByZXZpc2lvbiBjYW4gYmUgc3BlY2lmaWVkIHdpdGggLXIvLS1yZXZpc2lvbi4KKworJ3Nob3ctZXh0ZXJuYWxzJzo6CisJU2hvd3MgdGhlIFN1YnZlcnNpb24gZXh0ZXJuYWxzLiAgVXNlIC1yLy0tcmV2aXNpb24gdG8gc3BlY2lmeSBhCisJc3BlY2lmaWMgcmV2aXNpb24uCisKKydnYyc6OgorCUNvbXByZXNzICRHSVRfRElSL3N2bi88cmVmbmFtZT4vdW5oYW5kbGVkLmxvZyBmaWxlcyBpbiAuZ2l0L3N2bgorCWFuZCByZW1vdmUgJEdJVF9ESVIvc3ZuLzxyZWZuYW1lPmluZGV4IGZpbGVzIGluIC5naXQvc3ZuLgorCisncmVzZXQnOjoKKwlVbmRvZXMgdGhlIGVmZmVjdHMgb2YgJ2ZldGNoJyBiYWNrIHRvIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24uCisJVGhpcyBhbGxvd3MgeW91IHRvIHJlLSdmZXRjaCcgYW4gU1ZOIHJldmlzaW9uLiAgTm9ybWFsbHkgdGhlCisJY29udGVudHMgb2YgYW4gU1ZOIHJldmlzaW9uIHNob3VsZCBuZXZlciBjaGFuZ2UgYW5kICdyZXNldCcKKwlzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gIEhvd2V2ZXIsIGlmIFNWTiBwZXJtaXNzaW9ucyBjaGFuZ2UsCisJb3IgaWYgeW91IGFsdGVyIHlvdXIgLS1pZ25vcmUtcGF0aHMgb3B0aW9uLCBhICdmZXRjaCcgbWF5IGZhaWwKKwl3aXRoICJub3QgZm91bmQgaW4gY29tbWl0IiAoZmlsZSBub3QgcHJldmlvdXNseSB2aXNpYmxlKSBvcgorCSJjaGVja3N1bSBtaXNtYXRjaCIgKG1pc3NlZCBhIG1vZGlmaWNhdGlvbikuICBJZiB0aGUgcHJvYmxlbQorCWZpbGUgY2Fubm90IGJlIGlnbm9yZWQgZm9yZXZlciAod2l0aCAtLWlnbm9yZS1wYXRocykgdGhlIG9ubHkKKwl3YXkgdG8gcmVwYWlyIHRoZSByZXBvIGlzIHRvIHVzZSAncmVzZXQnLgorKworT25seSB0aGUgcmV2X21hcCBhbmQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gYXJlIGNoYW5nZWQuICBGb2xsb3cgJ3Jlc2V0Jword2l0aCBhICdmZXRjaCcgYW5kIHRoZW4gJ2dpdCByZXNldCcgb3IgJ2dpdCByZWJhc2UnIHRvIG1vdmUgbG9jYWwKK2JyYW5jaGVzIG9udG8gdGhlIG5ldyB0cmVlLgorCistciA8bj47OworLS1yZXZpc2lvbj08bj47OworCVNwZWNpZnkgdGhlIG1vc3QgcmVjZW50IHJldmlzaW9uIHRvIGtlZXAuICBBbGwgbGF0ZXIgcmV2aXNpb25zCisJYXJlIGRpc2NhcmRlZC4KKy1wOzsKKy0tcGFyZW50OzsKKwlEaXNjYXJkIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24gYXMgd2VsbCwga2VlcGluZyB0aGUgbmVhcmVzdAorCXBhcmVudCBpbnN0ZWFkLgorRXhhbXBsZTo7OworQXNzdW1lIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gIm1hc3RlciIsIGJ1dCB5b3UgbmVlZCB0byByZWZldGNoICJyMiIuCisrCistLS0tLS0tLS0tLS0KKyAgICByMS0tLXIyLS0tcjMgcmVtb3Rlcy9naXQtc3ZuCisgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBBLS0tQiBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorKworRml4IHRoZSBpZ25vcmUtcGF0aHMgb3IgU1ZOIHBlcm1pc3Npb25zIHByb2JsZW0gdGhhdCBjYXVzZWQgInIyIiB0bworYmUgaW5jb21wbGV0ZSBpbiB0aGUgZmlyc3QgcGxhY2UuICBUaGVuOgorKworW3ZlcnNlXQorZ2l0IHN2biByZXNldCAtcjIgLXAKK2dpdCBzdm4gZmV0Y2gKKysKKy0tLS0tLS0tLS0tLQorICAgIHIxLS0tcjInLS1yMycgcmVtb3Rlcy9naXQtc3ZuCisgICAgICBcCisgICAgICAgcjItLS1yMy0tLUEtLS1CIG1hc3RlcgorLS0tLS0tLS0tLS0tCisrCitUaGVuIGZpeHVwICJtYXN0ZXIiIHdpdGggJ2dpdCByZWJhc2UnLgorRG8gTk9UIHVzZSAnZ2l0IG1lcmdlJyBvciB5b3VyIGhpc3Rvcnkgd2lsbCBub3QgYmUgY29tcGF0aWJsZSB3aXRoIGEKK2Z1dHVyZSAnZGNvbW1pdCchCisrCitbdmVyc2VdCitnaXQgcmViYXNlIC0tb250byByZW1vdGVzL2dpdC1zdm4gQV4gbWFzdGVyCisrCistLS0tLS0tLS0tLS0KKyAgICByMS0tLXIyJy0tcjMnIHJlbW90ZXMvZ2l0LXN2bgorICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgQSctLUInIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1zaGFyZWRbPShmYWxzZXx0cnVlfHVtYXNrfGdyb3VwfGFsbHx3b3JsZHxldmVyeWJvZHkpXTo6CistLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+OjoKKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ2luaXQnIGNvbW1hbmQuCisJVGhlc2UgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGluaXQnLgorCistciA8YXJnPjo6CistLXJldmlzaW9uIDxhcmc+OjoKKwkgICBVc2VkIHdpdGggdGhlICdmZXRjaCcgY29tbWFuZC4KKysKK1RoaXMgYWxsb3dzIHJldmlzaW9uIHJhbmdlcyBmb3IgcGFydGlhbC9jYXV0ZXJpemVkIGhpc3RvcnkKK3RvIGJlIHN1cHBvcnRlZC4gICROVU1CRVIsICROVU1CRVIxOiROVU1CRVIyIChudW1lcmljIHJhbmdlcyksCiskTlVNQkVSOkhFQUQsIGFuZCBCQVNFOiROVU1CRVIgYXJlIGFsbCBzdXBwb3J0ZWQuCisrCitUaGlzIGNhbiBhbGxvdyB5b3UgdG8gbWFrZSBwYXJ0aWFsIG1pcnJvcnMgd2hlbiBydW5uaW5nIGZldGNoOworYnV0IGlzIGdlbmVyYWxseSBub3QgcmVjb21tZW5kZWQgYmVjYXVzZSBoaXN0b3J5IHdpbGwgYmUgc2tpcHBlZAorYW5kIGxvc3QuCisKKy06OgorLS1zdGRpbjo6CisJT25seSB1c2VkIHdpdGggdGhlICdzZXQtdHJlZScgY29tbWFuZC4KKysKK1JlYWQgYSBsaXN0IG9mIGNvbW1pdHMgZnJvbSBzdGRpbiBhbmQgY29tbWl0IHRoZW0gaW4gcmV2ZXJzZQorb3JkZXIuICBPbmx5IHRoZSBsZWFkaW5nIHNoYTEgaXMgcmVhZCBmcm9tIGVhY2ggbGluZSwgc28KKydnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZScgb3V0cHV0IGNhbiBiZSB1c2VkLgorCistLXJtZGlyOjoKKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAnc2V0LXRyZWUnIGFuZCAnY29tbWl0LWRpZmYnIGNvbW1hbmRzLgorKworUmVtb3ZlIGRpcmVjdG9yaWVzIGZyb20gdGhlIFNWTiB0cmVlIGlmIHRoZXJlIGFyZSBubyBmaWxlcyBsZWZ0CitiZWhpbmQuICBTVk4gY2FuIHZlcnNpb24gZW1wdHkgZGlyZWN0b3JpZXMsIGFuZCB0aGV5IGFyZSBub3QKK3JlbW92ZWQgYnkgZGVmYXVsdCBpZiB0aGVyZSBhcmUgbm8gZmlsZXMgbGVmdCBpbiB0aGVtLiAgZ2l0CitjYW5ub3QgdmVyc2lvbiBlbXB0eSBkaXJlY3Rvcmllcy4gIEVuYWJsaW5nIHRoaXMgZmxhZyB3aWxsIG1ha2UKK3RoZSBjb21taXQgdG8gU1ZOIGFjdCBsaWtlIGdpdC4KKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi5ybWRpcgorCistZTo6CistLWVkaXQ6OgorCU9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdzZXQtdHJlZScgYW5kICdjb21taXQtZGlmZicgY29tbWFuZHMuCisrCitFZGl0IHRoZSBjb21taXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyB0byBTVk4uICBUaGlzIGlzIG9mZiBieQorZGVmYXVsdCBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjb21taXRzLCBhbmQgZm9yY2VkIG9uIHdoZW4gY29tbWl0dGluZwordHJlZSBvYmplY3RzLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLmVkaXQKKworLWw8bnVtPjo6CistLWZpbmQtY29waWVzLWhhcmRlcjo6CisJT25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3NldC10cmVlJyBhbmQgJ2NvbW1pdC1kaWZmJyBjb21tYW5kcy4KKysKK1RoZXkgYXJlIGJvdGggcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgZGlmZi10cmVlJzsgc2VlCitsaW5rZ2l0OmdpdC1kaWZmLXRyZWVbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4ubAorY29uZmlnIGtleTogc3ZuLmZpbmRjb3BpZXNoYXJkZXIKKworLUE8ZmlsZW5hbWU+OjoKKy0tYXV0aG9ycy1maWxlPTxmaWxlbmFtZT46OgorCVN5bnRheCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGZpbGUgdXNlZCBieSAnZ2l0IGN2c2ltcG9ydCc6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlsb2dpbm5hbWUgPSBKb2UgVXNlciA8dXNlckBleGFtcGxlLmNvbT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkIGFuZCAnZ2l0IHN2bicgZW5jb3VudGVycyBhbiBTVk4KK2NvbW1pdHRlciBuYW1lIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGF1dGhvcnMtZmlsZSwgJ2dpdCBzdm4nCit3aWxsIGFib3J0IG9wZXJhdGlvbi4gVGhlIHVzZXIgd2lsbCB0aGVuIGhhdmUgdG8gYWRkIHRoZQorYXBwcm9wcmlhdGUgZW50cnkuICBSZS1ydW5uaW5nIHRoZSBwcmV2aW91cyAnZ2l0IHN2bicgY29tbWFuZAorYWZ0ZXIgdGhlIGF1dGhvcnMtZmlsZSBpcyBtb2RpZmllZCBzaG91bGQgY29udGludWUgb3BlcmF0aW9uLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLmF1dGhvcnNmaWxlCisKKy0tYXV0aG9ycy1wcm9nPTxmaWxlbmFtZT46OgorCUlmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZm9yIGVhY2ggU1ZOIGNvbW1pdHRlciBuYW1lIHRoYXQKKwlkb2VzIG5vdCBleGlzdCBpbiB0aGUgYXV0aG9ycyBmaWxlLCB0aGUgZ2l2ZW4gZmlsZSBpcyBleGVjdXRlZAorCXdpdGggdGhlIGNvbW1pdHRlciBuYW1lIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gIFRoZSBwcm9ncmFtIGlzCisJZXhwZWN0ZWQgdG8gcmV0dXJuIGEgc2luZ2xlIGxpbmUgb2YgdGhlIGZvcm0gIk5hbWUgPGVtYWlsPiIsCisJd2hpY2ggd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGluY2x1ZGVkIGluIHRoZSBhdXRob3JzIGZpbGUuCisKKy1xOjoKKy0tcXVpZXQ6OgorCU1ha2UgJ2dpdCBzdm4nIGxlc3MgdmVyYm9zZS4gU3BlY2lmeSBhIHNlY29uZCB0aW1lIHRvIG1ha2UgaXQKKwlldmVuIGxlc3MgdmVyYm9zZS4KKworLS1yZXBhY2tbPTxuPl06OgorLS1yZXBhY2stZmxhZ3M9PGZsYWdzPjo6CisJVGhlc2Ugc2hvdWxkIGhlbHAga2VlcCBkaXNrIHVzYWdlIHNhbmUgZm9yIGxhcmdlIGZldGNoZXMgd2l0aAorCW1hbnkgcmV2aXNpb25zLgorKworLS1yZXBhY2sgdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgZm9yIHRoZSBudW1iZXIgb2YgcmV2aXNpb25zCit0byBmZXRjaCBiZWZvcmUgcmVwYWNraW5nLiAgVGhpcyBkZWZhdWx0cyB0byByZXBhY2tpbmcgZXZlcnkKKzEwMDAgY29tbWl0cyBmZXRjaGVkIGlmIG5vIGFyZ3VtZW50IGlzIHNwZWNpZmllZC4KKysKKy0tcmVwYWNrLWZsYWdzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdCByZXBhY2snLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLnJlcGFjaworY29uZmlnIGtleTogc3ZuLnJlcGFja2ZsYWdzCisKKy1tOjoKKy0tbWVyZ2U6OgorLXM8c3RyYXRlZ3k+OjoKKy0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pjo6CistcDo6CistLXByZXNlcnZlLW1lcmdlczo6CisJVGhlc2UgYXJlIG9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcgYW5kICdyZWJhc2UnIGNvbW1hbmRzLgorKworUGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgcmViYXNlJyB3aGVuIHVzaW5nICdkY29tbWl0JyBpZiBhCisnZ2l0IHJlc2V0JyBjYW5ub3QgYmUgdXNlZCAoc2VlICdkY29tbWl0JykuCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJVGhpcyBjYW4gYmUgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdyZWJhc2UnLCAnYnJhbmNoJyBhbmQKKwkndGFnJyBjb21tYW5kcy4KKysKK0ZvciAnZGNvbW1pdCcsIHByaW50IG91dCB0aGUgc2VyaWVzIG9mIGdpdCBhcmd1bWVudHMgdGhhdCB3b3VsZCBzaG93Cit3aGljaCBkaWZmcyB3b3VsZCBiZSBjb21taXR0ZWQgdG8gU1ZOLgorKworRm9yICdyZWJhc2UnLCBkaXNwbGF5IHRoZSBsb2NhbCBicmFuY2ggYXNzb2NpYXRlZCB3aXRoIHRoZSB1cHN0cmVhbSBzdm4KK3JlcG9zaXRvcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgdGhlIFVSTCBvZiBzdm4KK3JlcG9zaXRvcnkgdGhhdCB3aWxsIGJlIGZldGNoZWQgZnJvbS4KKysKK0ZvciAnYnJhbmNoJyBhbmQgJ3RhZycsIGRpc3BsYXkgdGhlIHVybHMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGNvcHlpbmcgd2hlbgorY3JlYXRpbmcgdGhlIGJyYW5jaCBvciB0YWcuCisKKy0tdXNlLWxvZy1hdXRob3I6OgorCVdoZW4gcmV0cmlldmluZyBzdm4gY29tbWl0cyBpbnRvIGdpdCAoYXMgcGFydCBvZiAnZmV0Y2gnLCAncmViYXNlJywgb3IKKwknZGNvbW1pdCcgb3BlcmF0aW9ucyksIGxvb2sgZm9yIHRoZSBmaXJzdCBgRnJvbTpgIG9yIGBTaWduZWQtb2ZmLWJ5OmAgbGluZQorCWluIHRoZSBsb2cgbWVzc2FnZSBhbmQgdXNlIHRoYXQgYXMgdGhlIGF1dGhvciBzdHJpbmcuCistLWFkZC1hdXRob3ItZnJvbTo6CisJV2hlbiBjb21taXR0aW5nIHRvIHN2biBmcm9tIGdpdCAoYXMgcGFydCBvZiAnY29tbWl0LWRpZmYnLCAnc2V0LXRyZWUnIG9yICdkY29tbWl0JworCW9wZXJhdGlvbnMpLCBpZiB0aGUgZXhpc3RpbmcgbG9nIG1lc3NhZ2UgZG9lc24ndCBhbHJlYWR5IGhhdmUgYQorCWBGcm9tOmAgb3IgYFNpZ25lZC1vZmYtYnk6YCBsaW5lLCBhcHBlbmQgYSBgRnJvbTpgIGxpbmUgYmFzZWQgb24gdGhlCisJZ2l0IGNvbW1pdCdzIGF1dGhvciBzdHJpbmcuICBJZiB5b3UgdXNlIHRoaXMsIHRoZW4gYC0tdXNlLWxvZy1hdXRob3JgCisJd2lsbCByZXRyaWV2ZSBhIHZhbGlkIGF1dGhvciBzdHJpbmcgZm9yIGFsbCBjb21taXRzLgorCisKK0FEVkFOQ0VEIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0KKworLWk8R0lUX1NWTl9JRD46OgorLS1pZCA8R0lUX1NWTl9JRD46OgorCVRoaXMgc2V0cyBHSVRfU1ZOX0lEIChpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbnZpcm9ubWVudCkuICBUaGlzCisJYWxsb3dzIHRoZSB1c2VyIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHJlZm5hbWUgdG8gZmV0Y2ggZnJvbQorCXdoZW4gdHJhY2tpbmcgYSBzaW5nbGUgVVJMLiAgVGhlICdsb2cnIGFuZCAnZGNvbW1pdCcgY29tbWFuZHMKKwlubyBsb25nZXIgcmVxdWlyZSB0aGlzIHN3aXRjaCBhcyBhbiBhcmd1bWVudC4KKworLVI8cmVtb3RlIG5hbWU+OjoKKy0tc3ZuLXJlbW90ZSA8cmVtb3RlIG5hbWU+OjoKKwlTcGVjaWZ5IHRoZSBbc3ZuLXJlbW90ZSAiPHJlbW90ZSBuYW1lPiJdIHNlY3Rpb24gdG8gdXNlLAorCXRoaXMgYWxsb3dzIFNWTiBtdWx0aXBsZSByZXBvc2l0b3JpZXMgdG8gYmUgdHJhY2tlZC4KKwlEZWZhdWx0OiAic3ZuIgorCistLWZvbGxvdy1wYXJlbnQ6OgorCVRoaXMgaXMgZXNwZWNpYWxseSBoZWxwZnVsIHdoZW4gd2UncmUgdHJhY2tpbmcgYSBkaXJlY3RvcnkKKwl0aGF0IGhhcyBiZWVuIG1vdmVkIGFyb3VuZCB3aXRoaW4gdGhlIHJlcG9zaXRvcnksIG9yIGlmIHdlCisJc3RhcnRlZCB0cmFja2luZyBhIGJyYW5jaCBhbmQgbmV2ZXIgdHJhY2tlZCB0aGUgdHJ1bmsgaXQgd2FzCisJZGVzY2VuZGVkIGZyb20uIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHVzZQorCS0tbm8tZm9sbG93LXBhcmVudCB0byBkaXNhYmxlIGl0LgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLmZvbGxvd3BhcmVudAorCitDT05GSUcgRklMRS1PTkxZIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdm4ubm9NZXRhZGF0YTo6Citzdm4tcmVtb3RlLjxuYW1lPi5ub01ldGFkYXRhOjoKKwlUaGlzIGdldHMgcmlkIG9mIHRoZSAnZ2l0LXN2bi1pZDonIGxpbmVzIGF0IHRoZSBlbmQgb2YgZXZlcnkgY29tbWl0LgorKworVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCBmb3Igb25lLXNob3QgaW1wb3J0cyBhcyAnZ2l0IHN2bicKK3dpbGwgbm90IGJlIGFibGUgdG8gZmV0Y2ggYWdhaW4gd2l0aG91dCBtZXRhZGF0YS4gQWRkaXRpb25hbGx5LAoraWYgeW91IGxvc2UgeW91ciAuZ2l0L3N2bi8qKi8ucmV2X21hcC4qIGZpbGVzLCAnZ2l0IHN2bicgd2lsbCBub3QKK2JlIGFibGUgdG8gcmVidWlsZCB0aGVtLgorKworVGhlICdnaXQgc3ZuIGxvZycgY29tbWFuZCB3aWxsIG5vdCB3b3JrIG9uIHJlcG9zaXRvcmllcyB1c2luZwordGhpcywgZWl0aGVyLiAgVXNpbmcgdGhpcyBjb25mbGljdHMgd2l0aCB0aGUgJ3VzZVN2bVByb3BzJworb3B0aW9uIGZvciAoaG9wZWZ1bGx5KSBvYnZpb3VzIHJlYXNvbnMuCisrCitUaGlzIG9wdGlvbiBpcyBOT1QgcmVjb21tZW5kZWQgYXMgaXQgbWFrZXMgaXQgZGlmZmljdWx0IHRvIHRyYWNrIGRvd24KK29sZCByZWZlcmVuY2VzIHRvIFNWTiByZXZpc2lvbiBudW1iZXJzIGluIGV4aXN0aW5nIGRvY3VtZW50YXRpb24sIGJ1ZworcmVwb3J0cyBhbmQgYXJjaGl2ZXMuICBJZiB5b3UgcGxhbiB0byBldmVudHVhbGx5IG1pZ3JhdGUgZnJvbSBTVk4gdG8gZ2l0CithbmQgYXJlIGNlcnRhaW4gYWJvdXQgZHJvcHBpbmcgU1ZOIGhpc3RvcnksIGNvbnNpZGVyCitsaW5rZ2l0OmdpdC1maWx0ZXItYnJhbmNoWzFdIGluc3RlYWQuICBmaWx0ZXItYnJhbmNoIGFsc28gYWxsb3dzCityZWZvcm1hdHRpbmcgb2YgbWV0YWRhdGEgZm9yIGVhc2Utb2YtcmVhZGluZyBhbmQgcmV3cml0aW5nIGF1dGhvcnNoaXAKK2luZm8gZm9yIG5vbi0ic3ZuLmF1dGhvcnNGaWxlIiB1c2Vycy4KKworc3ZuLnVzZVN2bVByb3BzOjoKK3N2bi1yZW1vdGUuPG5hbWU+LnVzZVN2bVByb3BzOjoKKwlUaGlzIGFsbG93cyAnZ2l0IHN2bicgdG8gcmUtbWFwIHJlcG9zaXRvcnkgVVJMcyBhbmQgVVVJRHMgZnJvbQorCW1pcnJvcnMgY3JlYXRlZCB1c2luZyBTVk46Ok1pcnJvciAob3Igc3ZrKSBmb3IgbWV0YWRhdGEuCisrCitJZiBhbiBTVk4gcmV2aXNpb24gaGFzIGEgcHJvcGVydHksICJzdm06aGVhZHJldiIsIGl0IGlzIGxpa2VseQordGhhdCB0aGUgcmV2aXNpb24gd2FzIGNyZWF0ZWQgYnkgU1ZOOjpNaXJyb3IgKGFsc28gdXNlZCBieSBTVkspLgorVGhlIHByb3BlcnR5IGNvbnRhaW5zIGEgcmVwb3NpdG9yeSBVVUlEIGFuZCBhIHJldmlzaW9uLiAgV2Ugd2FudAordG8gbWFrZSBpdCBsb29rIGxpa2Ugd2UgYXJlIG1pcnJvcmluZyB0aGUgb3JpZ2luYWwgVVJMLCBzbworaW50cm9kdWNlIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgb3JpZ2luYWwgaWRlbnRpdHkKK1VSTCBhbmQgVVVJRCwgYW5kIHVzZSBpdCB3aGVuIGdlbmVyYXRpbmcgbWV0YWRhdGEgaW4gY29tbWl0CittZXNzYWdlcy4KKworc3ZuLnVzZVN2bnN5bmNQcm9wczo6Citzdm4tcmVtb3RlLjxuYW1lPi51c2VTdm5zeW5jcHJvcHM6OgorCVNpbWlsYXIgdG8gdGhlIHVzZVN2bVByb3BzIG9wdGlvbjsgdGhpcyBpcyBmb3IgdXNlcnMKKwlvZiB0aGUgc3Zuc3luYygxKSBjb21tYW5kIGRpc3RyaWJ1dGVkIHdpdGggU1ZOIDEuNC54IGFuZAorCWxhdGVyLgorCitzdm4tcmVtb3RlLjxuYW1lPi5yZXdyaXRlUm9vdDo6CisJVGhpcyBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlIHJlcG9zaXRvcmllcyBmcm9tIGFsdGVybmF0ZQorCVVSTHMuICBGb3IgZXhhbXBsZSwgYW4gYWRtaW5pc3RyYXRvciBjb3VsZCBydW4gJ2dpdCBzdm4nIG9uIHRoZQorCXNlcnZlciBsb2NhbGx5IChhY2Nlc3NpbmcgdmlhIGZpbGU6Ly8pIGJ1dCB3aXNoIHRvIGRpc3RyaWJ1dGUKKwl0aGUgcmVwb3NpdG9yeSB3aXRoIGEgcHVibGljIGh0dHA6Ly8gb3Igc3ZuOi8vIFVSTCBpbiB0aGUKKwltZXRhZGF0YSBzbyB1c2VycyBvZiBpdCB3aWxsIHNlZSB0aGUgcHVibGljIFVSTC4KKworc3ZuLXJlbW90ZS48bmFtZT4ucmV3cml0ZVVVSUQ6OgorCVNpbWlsYXIgdG8gdGhlIHVzZVN2bVByb3BzIG9wdGlvbjsgdGhpcyBpcyBmb3IgdXNlcnMgd2hvIG5lZWQKKwl0byByZW1hcCB0aGUgVVVJRCBtYW51YWxseS4gVGhpcyBtYXkgYmUgdXNlZnVsIGluIHNpdHVhdGlvbnMKKwl3aGVyZSB0aGUgb3JpZ2luYWwgVVVJRCBpcyBub3QgYXZhaWxhYmxlIHZpYSBlaXRoZXIgdXNlU3ZtUHJvcHMKKwlvciB1c2VTdm5zeW5jUHJvcHMuCisKK3N2bi1yZW1vdGUuPG5hbWU+LnB1c2h1cmw6OgorCisJU2ltaWxhciB0byBnaXQncyAncmVtb3RlLjxuYW1lPi5wdXNodXJsJywgdGhpcyBrZXkgaXMgZGVzaWduZWQKKwl0byBiZSB1c2VkIGluIGNhc2VzIHdoZXJlICd1cmwnIHBvaW50cyB0byBhbiBTVk4gcmVwb3NpdG9yeQorCXZpYSBhIHJlYWQtb25seSB0cmFuc3BvcnQsIHRvIHByb3ZpZGUgYW4gYWx0ZXJuYXRlIHJlYWQvd3JpdGUKKwl0cmFuc3BvcnQuIEl0IGlzIGFzc3VtZWQgdGhhdCBib3RoIGtleXMgcG9pbnQgdG8gdGhlIHNhbWUKKwlyZXBvc2l0b3J5LiBVbmxpa2UgJ2NvbW1pdHVybCcsICdwdXNodXJsJyBpcyBhIGJhc2UgcGF0aC4gSWYKKwllaXRoZXIgJ2NvbW1pdHVybCcgb3IgJ3B1c2h1cmwnIGNvdWxkIGJlIHVzZWQsICdjb21taXR1cmwnCisJdGFrZXMgcHJlY2VkZW5jZS4KKworc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kOjoKKwlUaGlzIGRpc2FibGVzIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBjaGVja3MgdG8gd29ya2Fyb3VuZAorCWJyb2tlbiBzeW1saW5rcyBjaGVja2VkIGludG8gU1ZOIGJ5IGJyb2tlbiBjbGllbnRzLiAgU2V0IHRoaXMKKwlvcHRpb24gdG8gImZhbHNlIiBpZiB5b3UgdHJhY2sgYSBTVk4gcmVwb3NpdG9yeSB3aXRoIG1hbnkKKwllbXB0eSBibG9icyB0aGF0IGFyZSBub3Qgc3ltbGlua3MuICBUaGlzIG9wdGlvbiBtYXkgYmUgY2hhbmdlZAorCXdoaWxlICdnaXQgc3ZuJyBpcyBydW5uaW5nIGFuZCB0YWtlIGVmZmVjdCBvbiB0aGUgbmV4dAorCXJldmlzaW9uIGZldGNoZWQuICBJZiB1bnNldCwgJ2dpdCBzdm4nIGFzc3VtZXMgdGhpcyBvcHRpb24gdG8KKwliZSAidHJ1ZSIuCisKK3N2bi5wYXRobmFtZWVuY29kaW5nOjoKKwlUaGlzIGluc3RydWN0cyBnaXQgc3ZuIHRvIHJlY29kZSBwYXRobmFtZXMgdG8gYSBnaXZlbiBlbmNvZGluZy4KKwlJdCBjYW4gYmUgdXNlZCBieSB3aW5kb3dzIHVzZXJzIGFuZCBieSB0aG9zZSB3aG8gd29yayBpbiBub24tdXRmOAorCWxvY2FsZXMgdG8gYXZvaWQgY29ycnVwdGVkIGZpbGUgbmFtZXMgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycy4KKwlWYWxpZCBlbmNvZGluZ3MgYXJlIHRoZSBvbmVzIHN1cHBvcnRlZCBieSBQZXJsJ3MgRW5jb2RlIG1vZHVsZS4KKworc3ZuLXJlbW90ZS48bmFtZT4uYXV0b21rZGlyczo6CisJTm9ybWFsbHksIHRoZSAiZ2l0IHN2biBjbG9uZSIgYW5kICJnaXQgc3ZuIHJlYmFzZSIgY29tbWFuZHMKKwlhdHRlbXB0IHRvIHJlY3JlYXRlIGVtcHR5IGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZQorCVN1YnZlcnNpb24gcmVwb3NpdG9yeS4gIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byAiZmFsc2UiLCB0aGVuCisJZW1wdHkgZGlyZWN0b3JpZXMgd2lsbCBvbmx5IGJlIGNyZWF0ZWQgaWYgdGhlICJnaXQgc3ZuIG1rZGlycyIKKwljb21tYW5kIGlzIHJ1biBleHBsaWNpdGx5LiAgSWYgdW5zZXQsICdnaXQgc3ZuJyBhc3N1bWVzIHRoaXMKKwlvcHRpb24gdG8gYmUgInRydWUiLgorCitTaW5jZSB0aGUgbm9NZXRhZGF0YSwgcmV3cml0ZVJvb3QsIHJld3JpdGVVVUlELCB1c2VTdm5zeW5jUHJvcHMgYW5kIHVzZVN2bVByb3BzCitvcHRpb25zIGFsbCBhZmZlY3QgdGhlIG1ldGFkYXRhIGdlbmVyYXRlZCBhbmQgdXNlZCBieSAnZ2l0IHN2bic7IHRoZXkKKyptdXN0KiBiZSBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBiZWZvcmUgYW55IGhpc3RvcnkgaXMgaW1wb3J0ZWQKK2FuZCB0aGVzZSBzZXR0aW5ncyBzaG91bGQgbmV2ZXIgYmUgY2hhbmdlZCBvbmNlIHRoZXkgYXJlIHNldC4KKworQWRkaXRpb25hbGx5LCBvbmx5IG9uZSBvZiB0aGVzZSBvcHRpb25zIGNhbiBiZSB1c2VkIHBlciBzdm4tcmVtb3RlCitzZWN0aW9uIGJlY2F1c2UgdGhleSBhZmZlY3QgdGhlICdnaXQtc3ZuLWlkOicgbWV0YWRhdGEgbGluZSwgZXhjZXB0Citmb3IgcmV3cml0ZVJvb3QgYW5kIHJld3JpdGVVVUlEIHdoaWNoIGNhbiBiZSB1c2VkIHRvZ2V0aGVyLgorCisKK0JBU0lDIEVYQU1QTEVTCistLS0tLS0tLS0tLS0tLQorCitUcmFja2luZyBhbmQgY29udHJpYnV0aW5nIHRvIHRoZSB0cnVuayBvZiBhIFN1YnZlcnNpb24tbWFuYWdlZCBwcm9qZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2xvbmUgYSByZXBvIChsaWtlIGdpdCBjbG9uZSk6CisJZ2l0IHN2biBjbG9uZSBodHRwOi8vc3ZuLmV4YW1wbGUuY29tL3Byb2plY3QvdHJ1bmsKKyMgRW50ZXIgdGhlIG5ld2x5IGNsb25lZCBkaXJlY3Rvcnk6CisJY2QgdHJ1bmsKKyMgWW91IHNob3VsZCBiZSBvbiBtYXN0ZXIgYnJhbmNoLCBkb3VibGUtY2hlY2sgd2l0aCAnZ2l0IGJyYW5jaCcKKwlnaXQgYnJhbmNoCisjIERvIHNvbWUgd29yayBhbmQgY29tbWl0IGxvY2FsbHkgdG8gZ2l0OgorCWdpdCBjb21taXQgLi4uCisjIFNvbWV0aGluZyBpcyBjb21taXR0ZWQgdG8gU1ZOLCByZWJhc2UgeW91ciBsb2NhbCBjaGFuZ2VzIGFnYWluc3QgdGhlCisjIGxhdGVzdCBjaGFuZ2VzIGluIFNWTjoKKwlnaXQgc3ZuIHJlYmFzZQorIyBOb3cgY29tbWl0IHlvdXIgY2hhbmdlcyAodGhhdCB3ZXJlIGNvbW1pdHRlZCBwcmV2aW91c2x5IHVzaW5nIGdpdCkgdG8gU1ZOLAorIyBhcyB3ZWxsIGFzIGF1dG9tYXRpY2FsbHkgdXBkYXRpbmcgeW91ciB3b3JraW5nIEhFQUQ6CisJZ2l0IHN2biBkY29tbWl0CisjIEFwcGVuZCBzdm46aWdub3JlIHNldHRpbmdzIHRvIHRoZSBkZWZhdWx0IGdpdCBleGNsdWRlIGZpbGU6CisJZ2l0IHN2biBzaG93LWlnbm9yZSA+PiAuZ2l0L2luZm8vZXhjbHVkZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RyYWNraW5nIGFuZCBjb250cmlidXRpbmcgdG8gYW4gZW50aXJlIFN1YnZlcnNpb24tbWFuYWdlZCBwcm9qZWN0CisoY29tcGxldGUgd2l0aCBhIHRydW5rLCB0YWdzIGFuZCBicmFuY2hlcyk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDbG9uZSBhIHJlcG8gKGxpa2UgZ2l0IGNsb25lKToKKwlnaXQgc3ZuIGNsb25lIGh0dHA6Ly9zdm4uZXhhbXBsZS5jb20vcHJvamVjdCAtVCB0cnVuayAtYiBicmFuY2hlcyAtdCB0YWdzCisjIFZpZXcgYWxsIGJyYW5jaGVzIGFuZCB0YWdzIHlvdSBoYXZlIGNsb25lZDoKKwlnaXQgYnJhbmNoIC1yCisjIENyZWF0ZSBhIG5ldyBicmFuY2ggaW4gU1ZOCisgICAgZ2l0IHN2biBicmFuY2ggd2FsZG8KKyMgUmVzZXQgeW91ciBtYXN0ZXIgdG8gdHJ1bmsgKG9yIGFueSBvdGhlciBicmFuY2gsIHJlcGxhY2luZyAndHJ1bmsnCisjIHdpdGggdGhlIGFwcHJvcHJpYXRlIG5hbWUpOgorCWdpdCByZXNldCAtLWhhcmQgcmVtb3Rlcy90cnVuaworIyBZb3UgbWF5IG9ubHkgZGNvbW1pdCB0byBvbmUgYnJhbmNoL3RhZy90cnVuayBhdCBhIHRpbWUuICBUaGUgdXNhZ2UKKyMgb2YgZGNvbW1pdC9yZWJhc2Uvc2hvdy1pZ25vcmUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGFib3ZlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbml0aWFsICdnaXQgc3ZuIGNsb25lJyBjYW4gYmUgcXVpdGUgdGltZS1jb25zdW1pbmcKKyhlc3BlY2lhbGx5IGZvciBsYXJnZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcmllcykuIElmIG11bHRpcGxlCitwZW9wbGUgKG9yIG9uZSBwZXJzb24gd2l0aCBtdWx0aXBsZSBtYWNoaW5lcykgd2FudCB0byB1c2UKKydnaXQgc3ZuJyB0byBpbnRlcmFjdCB3aXRoIHRoZSBzYW1lIFN1YnZlcnNpb24gcmVwb3NpdG9yeSwgeW91IGNhbgorZG8gdGhlIGluaXRpYWwgJ2dpdCBzdm4gY2xvbmUnIHRvIGEgcmVwb3NpdG9yeSBvbiBhIHNlcnZlciBhbmQKK2hhdmUgZWFjaCBwZXJzb24gY2xvbmUgdGhhdCByZXBvc2l0b3J5IHdpdGggJ2dpdCBjbG9uZSc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEbyB0aGUgaW5pdGlhbCBpbXBvcnQgb24gYSBzZXJ2ZXIKKwlzc2ggc2VydmVyICJjZCAvcHViICYmIGdpdCBzdm4gY2xvbmUgaHR0cDovL3N2bi5leGFtcGxlLmNvbS9wcm9qZWN0CisjIENsb25lIGxvY2FsbHkgLSBtYWtlIHN1cmUgdGhlIHJlZnMvcmVtb3Rlcy8gc3BhY2UgbWF0Y2hlcyB0aGUgc2VydmVyCisJbWtkaXIgcHJvamVjdAorCWNkIHByb2plY3QKKwlnaXQgaW5pdAorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiBzZXJ2ZXI6L3B1Yi9wcm9qZWN0CisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIHJlbW90ZS5vcmlnaW4uZmV0Y2ggJytyZWZzL3JlbW90ZXMvKjpyZWZzL3JlbW90ZXMvKicKKwlnaXQgZmV0Y2gKKyMgUHJldmVudCBmZXRjaC9wdWxsIGZyb20gcmVtb3RlIGdpdCBzZXJ2ZXIgaW4gdGhlIGZ1dHVyZSwKKyMgd2Ugb25seSB3YW50IHRvIHVzZSBnaXQgc3ZuIGZvciBmdXR1cmUgdXBkYXRlcworCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiByZW1vdGUub3JpZ2luCisjIENyZWF0ZSBhIGxvY2FsIGJyYW5jaCBmcm9tIG9uZSBvZiB0aGUgYnJhbmNoZXMganVzdCBmZXRjaGVkCisJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBGRVRDSF9IRUFECisjIEluaXRpYWxpemUgJ2dpdCBzdm4nIGxvY2FsbHkgKGJlIHN1cmUgdG8gdXNlIHRoZSBzYW1lIFVSTCBhbmQgLVQvLWIvLXQgb3B0aW9ucyBhcyB3ZXJlIHVzZWQgb24gc2VydmVyKQorCWdpdCBzdm4gaW5pdCBodHRwOi8vc3ZuLmV4YW1wbGUuY29tL3Byb2plY3QKKyMgUHVsbCB0aGUgbGF0ZXN0IGNoYW5nZXMgZnJvbSBTdWJ2ZXJzaW9uCisJZ2l0IHN2biByZWJhc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSRUJBU0UgVlMuIFBVTEwvTUVSR0UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJlZmVyIHRvIHVzZSAnZ2l0IHN2biByZWJhc2UnIG9yICdnaXQgcmViYXNlJywgcmF0aGVyIHRoYW4KKydnaXQgcHVsbCcgb3IgJ2dpdCBtZXJnZScgdG8gc3luY2hyb25pemUgdW5pbnRlZ3JhdGVkIGNvbW1pdHMgd2l0aCBhICdnaXQgc3ZuJworYnJhbmNoLiBEb2luZyBzbyB3aWxsIGtlZXAgdGhlIGhpc3Rvcnkgb2YgdW5pbnRlZ3JhdGVkIGNvbW1pdHMgbGluZWFyIHdpdGgKK3Jlc3BlY3QgdG8gdGhlIHVwc3RyZWFtIFNWTiByZXBvc2l0b3J5IGFuZCBhbGxvdyB0aGUgdXNlIG9mIHRoZSBwcmVmZXJyZWQKKydnaXQgc3ZuIGRjb21taXQnIHN1YmNvbW1hbmQgdG8gcHVzaCB1bmludGVncmF0ZWQgY29tbWl0cyBiYWNrIGludG8gU1ZOLgorCitPcmlnaW5hbGx5LCAnZ2l0IHN2bicgcmVjb21tZW5kZWQgdGhhdCBkZXZlbG9wZXJzIHB1bGxlZCBvciBtZXJnZWQgZnJvbQordGhlICdnaXQgc3ZuJyBicmFuY2guICBUaGlzIHdhcyBiZWNhdXNlIHRoZSBhdXRob3IgZmF2b3JlZAorYGdpdCBzdm4gc2V0LXRyZWUgQmAgdG8gY29tbWl0IGEgc2luZ2xlIGhlYWQgcmF0aGVyIHRoYW4gdGhlCitgZ2l0IHN2biBzZXQtdHJlZSBBLi5CYCBub3RhdGlvbiB0byBjb21taXQgbXVsdGlwbGUgY29tbWl0cy4gVXNlIG9mCisnZ2l0IHB1bGwnIG9yICdnaXQgbWVyZ2UnIHdpdGggYGdpdCBzdm4gc2V0LXRyZWUgQS4uQmAgd2lsbCBjYXVzZSBub24tbGluZWFyCitoaXN0b3J5IHRvIGJlIGZsYXR0ZW5lZCB3aGVuIGNvbW1pdHRpbmcgaW50byBTVk4gYW5kIHRoaXMgY2FuIGxlYWQgdG8gbWVyZ2UKK2NvbW1pdHMgdW5leHBlY3RlZGx5IHJldmVyc2luZyBwcmV2aW91cyBjb21taXRzIGluIFNWTi4KKworTUVSR0UgVFJBQ0tJTkcKKy0tLS0tLS0tLS0tLS0tCitXaGlsZSAnZ2l0IHN2bicgY2FuIHRyYWNrCitjb3B5IGhpc3RvcnkgKGluY2x1ZGluZyBicmFuY2hlcyBhbmQgdGFncykgZm9yIHJlcG9zaXRvcmllcyBhZG9wdGluZyBhCitzdGFuZGFyZCBsYXlvdXQsIGl0IGNhbm5vdCB5ZXQgcmVwcmVzZW50IG1lcmdlIGhpc3RvcnkgdGhhdCBoYXBwZW5lZAoraW5zaWRlIGdpdCBiYWNrIHVwc3RyZWFtIHRvIFNWTiB1c2Vycy4gIFRoZXJlZm9yZSBpdCBpcyBhZHZpc2VkIHRoYXQKK3VzZXJzIGtlZXAgaGlzdG9yeSBhcyBsaW5lYXIgYXMgcG9zc2libGUgaW5zaWRlIGdpdCB0byBlYXNlCitjb21wYXRpYmlsaXR5IHdpdGggU1ZOIChzZWUgdGhlIENBVkVBVFMgc2VjdGlvbiBiZWxvdykuCisKK0NBVkVBVFMKKy0tLS0tLS0KKworRm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHkgYW5kIGludGVyb3BlcmF0aW5nIHdpdGggU3VidmVyc2lvbiwKK2l0IGlzIHJlY29tbWVuZGVkIHRoYXQgYWxsICdnaXQgc3ZuJyB1c2VycyBjbG9uZSwgZmV0Y2ggYW5kIGRjb21taXQKK2RpcmVjdGx5IGZyb20gdGhlIFNWTiBzZXJ2ZXIsIGFuZCBhdm9pZCBhbGwgJ2dpdCBjbG9uZScvJ3B1bGwnLydtZXJnZScvJ3B1c2gnCitvcGVyYXRpb25zIGJldHdlZW4gZ2l0IHJlcG9zaXRvcmllcyBhbmQgYnJhbmNoZXMuICBUaGUgcmVjb21tZW5kZWQKK21ldGhvZCBvZiBleGNoYW5naW5nIGNvZGUgYmV0d2VlbiBnaXQgYnJhbmNoZXMgYW5kIHVzZXJzIGlzCisnZ2l0IGZvcm1hdC1wYXRjaCcgYW5kICdnaXQgYW0nLCBvciBqdXN0ICdkY29tbWl0J2luZyB0byB0aGUgU1ZOIHJlcG9zaXRvcnkuCisKK1J1bm5pbmcgJ2dpdCBtZXJnZScgb3IgJ2dpdCBwdWxsJyBpcyBOT1QgcmVjb21tZW5kZWQgb24gYSBicmFuY2ggeW91CitwbGFuIHRvICdkY29tbWl0JyBmcm9tIGJlY2F1c2UgU3VidmVyc2lvbiB1c2VycyBjYW5ub3Qgc2VlIGFueQorbWVyZ2VzIHlvdSd2ZSBtYWRlLiAgRnVydGhlcm1vcmUsIGlmIHlvdSBtZXJnZSBvciBwdWxsIGZyb20gYSBnaXQgYnJhbmNoCit0aGF0IGlzIGEgbWlycm9yIG9mIGFuIFNWTiBicmFuY2gsICdkY29tbWl0JyBtYXkgY29tbWl0IHRvIHRoZSB3cm9uZworYnJhbmNoLgorCitJZiB5b3UgZG8gbWVyZ2UsIG5vdGUgdGhlIGZvbGxvd2luZyBydWxlOiAnZ2l0IHN2biBkY29tbWl0JyB3aWxsCithdHRlbXB0IHRvIGNvbW1pdCBvbiB0b3Agb2YgdGhlIFNWTiBjb21taXQgbmFtZWQgaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGxvZyAtLWdyZXA9XmdpdC1zdm4taWQ6IC0tZmlyc3QtcGFyZW50IC0xCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSAnbXVzdCcgdGhlcmVmb3JlIGVuc3VyZSB0aGF0IHRoZSBtb3N0IHJlY2VudCBjb21taXQgb2YgdGhlIGJyYW5jaAoreW91IHdhbnQgdG8gZGNvbW1pdCB0byBpcyB0aGUgJ2ZpcnN0JyBwYXJlbnQgb2YgdGhlIG1lcmdlLiAgQ2hhb3Mgd2lsbAorZW5zdWUgb3RoZXJ3aXNlLCBlc3BlY2lhbGx5IGlmIHRoZSBmaXJzdCBwYXJlbnQgaXMgYW4gb2xkZXIgY29tbWl0IG9uCit0aGUgc2FtZSBTVk4gYnJhbmNoLgorCisnZ2l0IGNsb25lJyBkb2VzIG5vdCBjbG9uZSBicmFuY2hlcyB1bmRlciB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgb3IKK2FueSAnZ2l0IHN2bicgbWV0YWRhdGEsIG9yIGNvbmZpZy4gIFNvIHJlcG9zaXRvcmllcyBjcmVhdGVkIGFuZCBtYW5hZ2VkIHdpdGgKK3VzaW5nICdnaXQgc3ZuJyBzaG91bGQgdXNlICdyc3luYycgZm9yIGNsb25pbmcsIGlmIGNsb25pbmcgaXMgdG8gYmUgZG9uZQorYXQgYWxsLgorCitTaW5jZSAnZGNvbW1pdCcgdXNlcyByZWJhc2UgaW50ZXJuYWxseSwgYW55IGdpdCBicmFuY2hlcyB5b3UgJ2dpdCBwdXNoJyB0bworYmVmb3JlICdkY29tbWl0JyBvbiB3aWxsIHJlcXVpcmUgZm9yY2luZyBhbiBvdmVyd3JpdGUgb2YgdGhlIGV4aXN0aW5nIHJlZgorb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiAgVGhpcyBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBiYWQgcHJhY3RpY2UsCitzZWUgdGhlIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworRG8gbm90IHVzZSB0aGUgLS1hbWVuZCBvcHRpb24gb2YgbGlua2dpdDpnaXQtY29tbWl0WzFdIG9uIGEgY2hhbmdlIHlvdSd2ZQorYWxyZWFkeSBkY29tbWl0dGVkLiAgSXQgaXMgY29uc2lkZXJlZCBiYWQgcHJhY3RpY2UgdG8gLS1hbWVuZCBjb21taXRzCit5b3UndmUgYWxyZWFkeSBwdXNoZWQgdG8gYSByZW1vdGUgcmVwb3NpdG9yeSBmb3Igb3RoZXIgdXNlcnMsIGFuZAorZGNvbW1pdCB3aXRoIFNWTiBpcyBhbmFsb2dvdXMgdG8gdGhhdC4KKworV2hlbiB1c2luZyBtdWx0aXBsZSAtLWJyYW5jaGVzIG9yIC0tdGFncywgJ2dpdCBzdm4nIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkKK2hhbmRsZSBuYW1lIGNvbGxpc2lvbnMgKGZvciBleGFtcGxlLCBpZiB0d28gYnJhbmNoZXMgZnJvbSBkaWZmZXJlbnQgcGF0aHMgaGF2ZQordGhlIHNhbWUgbmFtZSwgb3IgaWYgYSBicmFuY2ggYW5kIGEgdGFnIGhhdmUgdGhlIHNhbWUgbmFtZSkuICBJbiB0aGVzZSBjYXNlcywKK3VzZSAnaW5pdCcgdG8gc2V0IHVwIHlvdXIgZ2l0IHJlcG9zaXRvcnkgdGhlbiwgYmVmb3JlIHlvdXIgZmlyc3QgJ2ZldGNoJywgZWRpdAordGhlIC5naXQvY29uZmlnIGZpbGUgc28gdGhhdCB0aGUgYnJhbmNoZXMgYW5kIHRhZ3MgYXJlIGFzc29jaWF0ZWQgd2l0aAorZGlmZmVyZW50IG5hbWUgc3BhY2VzLiAgRm9yIGV4YW1wbGU6CisKKwlicmFuY2hlcyA9IHN0YWJsZS8qOnJlZnMvcmVtb3Rlcy9zdm4vc3RhYmxlLyoKKwlicmFuY2hlcyA9IGRlYnVnLyo6cmVmcy9yZW1vdGVzL3N2bi9kZWJ1Zy8qCisKK0JVR1MKKy0tLS0KKworV2UgaWdub3JlIGFsbCBTVk4gcHJvcGVydGllcyBleGNlcHQgc3ZuOmV4ZWN1dGFibGUuICBBbnkgdW5oYW5kbGVkCitwcm9wZXJ0aWVzIGFyZSBsb2dnZWQgdG8gJEdJVF9ESVIvc3ZuLzxyZWZuYW1lPi91bmhhbmRsZWQubG9nCisKK1JlbmFtZWQgYW5kIGNvcGllZCBkaXJlY3RvcmllcyBhcmUgbm90IGRldGVjdGVkIGJ5IGdpdCBhbmQgaGVuY2Ugbm90Cit0cmFja2VkIHdoZW4gY29tbWl0dGluZyB0byBTVk4uICBJIGRvIG5vdCBwbGFuIG9uIGFkZGluZyBzdXBwb3J0IGZvcgordGhpcyBhcyBpdCdzIHF1aXRlIGRpZmZpY3VsdCBhbmQgdGltZS1jb25zdW1pbmcgdG8gZ2V0IHdvcmtpbmcgZm9yIGFsbAordGhlIHBvc3NpYmxlIGNvcm5lciBjYXNlcyAoZ2l0IGRvZXNuJ3QgZG8gaXQsIGVpdGhlcikuICBDb21taXR0aW5nCityZW5hbWVkIGFuZCBjb3BpZWQgZmlsZXMgaXMgZnVsbHkgc3VwcG9ydGVkIGlmIHRoZXkncmUgc2ltaWxhciBlbm91Z2gKK2ZvciBnaXQgdG8gZGV0ZWN0IHRoZW0uCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworJ2dpdCBzdm4nIHN0b3JlcyBbc3ZuLXJlbW90ZV0gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGUKK3JlcG9zaXRvcnkgLmdpdC9jb25maWcgZmlsZS4gIEl0IGlzIHNpbWlsYXIgdGhlIGNvcmUgZ2l0CitbcmVtb3RlXSBzZWN0aW9ucyBleGNlcHQgJ2ZldGNoJyBrZXlzIGRvIG5vdCBhY2NlcHQgZ2xvYgorYXJndW1lbnRzOyBidXQgdGhleSBhcmUgaW5zdGVhZCBoYW5kbGVkIGJ5IHRoZSAnYnJhbmNoZXMnCithbmQgJ3RhZ3MnIGtleXMuICBTaW5jZSBzb21lIFNWTiByZXBvc2l0b3JpZXMgYXJlIG9kZGx5Citjb25maWd1cmVkIHdpdGggbXVsdGlwbGUgcHJvamVjdHMgZ2xvYiBleHBhbnNpb25zIHN1Y2ggdGhvc2UKK2xpc3RlZCBiZWxvdyBhcmUgYWxsb3dlZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbc3ZuLXJlbW90ZSAicHJvamVjdC1hIl0KKwl1cmwgPSBodHRwOi8vc2VydmVyLm9yZy9zdm4KKwlmZXRjaCA9IHRydW5rL3Byb2plY3QtYTpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL3RydW5rCisJYnJhbmNoZXMgPSBicmFuY2hlcy8qL3Byb2plY3QtYTpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL2JyYW5jaGVzLyoKKwl0YWdzID0gdGFncy8qL3Byb2plY3QtYTpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL3RhZ3MvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0tlZXAgaW4gbWluZCB0aGF0IHRoZSAnXConIChhc3Rlcmlzaykgd2lsZGNhcmQgb2YgdGhlIGxvY2FsIHJlZgorKHJpZ2h0IG9mIHRoZSAnOicpICptdXN0KiBiZSB0aGUgZmFydGhlc3QgcmlnaHQgcGF0aCBjb21wb25lbnQ7Citob3dldmVyIHRoZSByZW1vdGUgd2lsZGNhcmQgbWF5IGJlIGFueXdoZXJlIGFzIGxvbmcgYXMgaXQncyBhbgoraW5kZXBlbmRlbnQgcGF0aCBjb21wb25lbnQgKHN1cnJvdW5kZWQgYnkgJy8nIG9yIEVPTCkuICAgVGhpcwordHlwZSBvZiBjb25maWd1cmF0aW9uIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgJ2luaXQnIGFuZAorc2hvdWxkIGJlIG1hbnVhbGx5IGVudGVyZWQgd2l0aCBhIHRleHQtZWRpdG9yIG9yIHVzaW5nICdnaXQgY29uZmlnJy4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBmZXRjaCBhIHN1YnNldCBvZiBicmFuY2hlcyBvciB0YWdzIGJ5IHVzaW5nIGEKK2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG5hbWVzIHdpdGhpbiBicmFjZXMuIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tzdm4tcmVtb3RlICJodWdlLXByb2plY3QiXQorCXVybCA9IGh0dHA6Ly9zZXJ2ZXIub3JnL3N2bgorCWZldGNoID0gdHJ1bmsvc3JjOnJlZnMvcmVtb3Rlcy90cnVuaworCWJyYW5jaGVzID0gYnJhbmNoZXMve3JlZCxncmVlbn0vc3JjOnJlZnMvcmVtb3Rlcy9icmFuY2hlcy8qCisJdGFncyA9IHRhZ3MvezEuMCwyLjB9L3NyYzpyZWZzL3JlbW90ZXMvdGFncy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IGdpdC1zdm4ga2VlcHMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgcmV2aXNpb24gaW4gd2hpY2ggYSBicmFuY2gKK29yIHRhZyBoYXMgYXBwZWFyZWQuIElmIHRoZSBzdWJzZXQgb2YgYnJhbmNoZXMgb3IgdGFncyBpcyBjaGFuZ2VkIGFmdGVyCitmZXRjaGluZywgdGhlbiAuZ2l0L3N2bi8ubWV0YWRhdGEgbXVzdCBiZSBtYW51YWxseSBlZGl0ZWQgdG8gcmVtb3ZlIChvcgorcmVzZXQpIGJyYW5jaGVzLW1heFJldiBhbmQvb3IgdGFncy1tYXhSZXYgYXMgYXBwcm9wcmlhdGUuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcmViYXNlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN5bWJvbGljLXJlZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxZDNhOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN5bWJvbGljLXJlZi50eHQKQEAgLTAsMCArMSw2MSBAQAorZ2l0LXN5bWJvbGljLXJlZigxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3ltYm9saWMtcmVmIC0gUmVhZCBhbmQgbW9kaWZ5IHN5bWJvbGljIHJlZnMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN5bWJvbGljLXJlZicgWy1tIDxyZWFzb24+XSA8bmFtZT4gPHJlZj4KKydnaXQgc3ltYm9saWMtcmVmJyBbLXFdIFstLXNob3J0XSA8bmFtZT4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitHaXZlbiBvbmUgYXJndW1lbnQsIHJlYWRzIHdoaWNoIGJyYW5jaCBoZWFkIHRoZSBnaXZlbiBzeW1ib2xpYworcmVmIHJlZmVycyB0byBhbmQgb3V0cHV0cyBpdHMgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIGAuZ2l0L2AKK2RpcmVjdG9yeS4gIFR5cGljYWxseSB5b3Ugd291bGQgZ2l2ZSBgSEVBRGAgYXMgdGhlIDxuYW1lPgorYXJndW1lbnQgdG8gc2VlIHdoaWNoIGJyYW5jaCB5b3VyIHdvcmtpbmcgdHJlZSBpcyBvbi4KKworR2l2ZW4gdHdvIGFyZ3VtZW50cywgY3JlYXRlcyBvciB1cGRhdGVzIGEgc3ltYm9saWMgcmVmIDxuYW1lPiB0bworcG9pbnQgYXQgdGhlIGdpdmVuIGJyYW5jaCA8cmVmPi4KKworQSBzeW1ib2xpYyByZWYgaXMgYSByZWd1bGFyIGZpbGUgdGhhdCBzdG9yZXMgYSBzdHJpbmcgdGhhdAorYmVnaW5zIHdpdGggYHJlZjogcmVmcy9gLiAgRm9yIGV4YW1wbGUsIHlvdXIgYC5naXQvSEVBRGAgaXMKK2EgcmVndWxhciBmaWxlIHdob3NlIGNvbnRlbnRzIGlzIGByZWY6IHJlZnMvaGVhZHMvbWFzdGVyYC4KKworT1BUSU9OUworLS0tLS0tLQorCistcTo6CistLXF1aWV0OjoKKwlEbyBub3QgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgPG5hbWU+IGlzIG5vdCBhCisJc3ltYm9saWMgcmVmIGJ1dCBhIGRldGFjaGVkIEhFQUQ7IGluc3RlYWQgZXhpdCB3aXRoCisJbm9uLXplcm8gc3RhdHVzIHNpbGVudGx5LgorCistLXNob3J0OjoKKwlXaGVuIHNob3dpbmcgdGhlIHZhbHVlIG9mIDxuYW1lPiBhcyBhIHN5bWJvbGljIHJlZiwgdHJ5IHRvIHNob3J0ZW4gdGhlCisJdmFsdWUsIGUuZy4gZnJvbSBgcmVmcy9oZWFkcy9tYXN0ZXJgIHRvIGBtYXN0ZXJgLgorCistbTo6CisJVXBkYXRlIHRoZSByZWZsb2cgZm9yIDxuYW1lPiB3aXRoIDxyZWFzb24+LiAgVGhpcyBpcyB2YWxpZCBvbmx5CisJd2hlbiBjcmVhdGluZyBvciB1cGRhdGluZyBhIHN5bWJvbGljIHJlZi4KKworTk9URVMKKy0tLS0tCitJbiB0aGUgcGFzdCwgYC5naXQvSEVBRGAgd2FzIGEgc3ltYm9saWMgbGluayBwb2ludGluZyBhdAorYHJlZnMvaGVhZHMvbWFzdGVyYC4gIFdoZW4gd2Ugd2FudGVkIHRvIHN3aXRjaCB0byBhbm90aGVyIGJyYW5jaCwKK3dlIGRpZCBgbG4gLXNmIHJlZnMvaGVhZHMvbmV3YnJhbmNoIC5naXQvSEVBRGAsIGFuZCB3aGVuIHdlIHdhbnRlZAordG8gZmluZCBvdXQgd2hpY2ggYnJhbmNoIHdlIGFyZSBvbiwgd2UgZGlkIGByZWFkbGluayAuZ2l0L0hFQURgLgorQnV0IHN5bWJvbGljIGxpbmtzIGFyZSBub3QgZW50aXJlbHkgcG9ydGFibGUsIHNvIHRoZXkgYXJlIG5vdworZGVwcmVjYXRlZCBhbmQgc3ltYm9saWMgcmVmcyAoYXMgZGVzY3JpYmVkIGFib3ZlKSBhcmUgdXNlZCBieQorZGVmYXVsdC4KKworJ2dpdCBzeW1ib2xpYy1yZWYnIHdpbGwgZXhpdCB3aXRoIHN0YXR1cyAwIGlmIHRoZSBjb250ZW50cyBvZiB0aGUKK3N5bWJvbGljIHJlZiB3ZXJlIHByaW50ZWQgY29ycmVjdGx5LCB3aXRoIHN0YXR1cyAxIGlmIHRoZSByZXF1ZXN0ZWQKK25hbWUgaXMgbm90IGEgc3ltYm9saWMgcmVmLCBvciAxMjggaWYgYW5vdGhlciBlcnJvciBvY2N1cnMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3NTM0ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKQEAgLTAsMCArMSwyOTkgQEAKK2dpdC10YWcoMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXRhZyAtIENyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHRhZycgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dCisJPHRhZ25hbWU+IFs8Y29tbWl0PiB8IDxvYmplY3Q+XQorJ2dpdCB0YWcnIC1kIDx0YWduYW1lPi4uLgorJ2dpdCB0YWcnIFstbls8bnVtPl1dIC1sIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dCisJWy0tY29sdW1uWz08b3B0aW9ucz5dIHwgLS1uby1jb2x1bW5dIFs8cGF0dGVybj4uLi5dCisJWzxwYXR0ZXJuPi4uLl0KKydnaXQgdGFnJyAtdiA8dGFnbmFtZT4uLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0FkZCBhIHRhZyByZWZlcmVuY2UgaW4gYHJlZnMvdGFncy9gLCB1bmxlc3MgYC1kLy1sLy12YCBpcyBnaXZlbgordG8gZGVsZXRlLCBsaXN0IG9yIHZlcmlmeSB0YWdzLgorCitVbmxlc3MgYC1mYCBpcyBnaXZlbiwgdGhlIG5hbWVkIHRhZyBtdXN0IG5vdCB5ZXQgZXhpc3QuCisKK0lmIG9uZSBvZiBgLWFgLCBgLXNgLCBvciBgLXUgPGtleS1pZD5gIGlzIHBhc3NlZCwgdGhlIGNvbW1hbmQKK2NyZWF0ZXMgYSAndGFnJyBvYmplY3QsIGFuZCByZXF1aXJlcyBhIHRhZyBtZXNzYWdlLiAgVW5sZXNzCitgLW0gPG1zZz5gIG9yIGAtRiA8ZmlsZT5gIGlzIGdpdmVuLCBhbiBlZGl0b3IgaXMgc3RhcnRlZCBmb3IgdGhlIHVzZXIgdG8gdHlwZQoraW4gdGhlIHRhZyBtZXNzYWdlLgorCitJZiBgLW0gPG1zZz5gIG9yIGAtRiA8ZmlsZT5gIGlzIGdpdmVuIGFuZCBgLWFgLCBgLXNgLCBhbmQgYC11IDxrZXktaWQ+YAorYXJlIGFic2VudCwgYC1hYCBpcyBpbXBsaWVkLgorCitPdGhlcndpc2UganVzdCBhIHRhZyByZWZlcmVuY2UgZm9yIHRoZSBTSEExIG9iamVjdCBuYW1lIG9mIHRoZSBjb21taXQgb2JqZWN0IGlzCitjcmVhdGVkIChpLmUuIGEgbGlnaHR3ZWlnaHQgdGFnKS4KKworQSBHbnVQRyBzaWduZWQgdGFnIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBgLXNgIG9yIGAtdQorPGtleS1pZD5gIGlzIHVzZWQuICBXaGVuIGAtdSA8a2V5LWlkPmAgaXMgbm90IHVzZWQsIHRoZQorY29tbWl0dGVyIGlkZW50aXR5IGZvciB0aGUgY3VycmVudCB1c2VyIGlzIHVzZWQgdG8gZmluZCB0aGUKK0dudVBHIGtleSBmb3Igc2lnbmluZy4gCVRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBncGcucHJvZ3JhbWAKK2lzIHVzZWQgdG8gc3BlY2lmeSBjdXN0b20gR251UEcgYmluYXJ5LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1hOjoKKy0tYW5ub3RhdGU6OgorCU1ha2UgYW4gdW5zaWduZWQsIGFubm90YXRlZCB0YWcgb2JqZWN0CisKKy1zOjoKKy0tc2lnbjo6CisJTWFrZSBhIEdQRy1zaWduZWQgdGFnLCB1c2luZyB0aGUgZGVmYXVsdCBlLW1haWwgYWRkcmVzcydzIGtleS4KKworLXUgPGtleS1pZD46OgorLS1sb2NhbC11c2VyPTxrZXktaWQ+OjoKKwlNYWtlIGEgR1BHLXNpZ25lZCB0YWcsIHVzaW5nIHRoZSBnaXZlbiBrZXkuCisKKy1mOjoKKy0tZm9yY2U6OgorCVJlcGxhY2UgYW4gZXhpc3RpbmcgdGFnIHdpdGggdGhlIGdpdmVuIG5hbWUgKGluc3RlYWQgb2YgZmFpbGluZykKKworLWQ6OgorLS1kZWxldGU6OgorCURlbGV0ZSBleGlzdGluZyB0YWdzIHdpdGggdGhlIGdpdmVuIG5hbWVzLgorCistdjo6CistLXZlcmlmeTo6CisJVmVyaWZ5IHRoZSBncGcgc2lnbmF0dXJlIG9mIHRoZSBnaXZlbiB0YWcgbmFtZXMuCisKKy1uPG51bT46OgorCTxudW0+IHNwZWNpZmllcyBob3cgbWFueSBsaW5lcyBmcm9tIHRoZSBhbm5vdGF0aW9uLCBpZiBhbnksCisJYXJlIHByaW50ZWQgd2hlbiB1c2luZyAtbC4KKwlUaGUgZGVmYXVsdCBpcyBub3QgdG8gcHJpbnQgYW55IGFubm90YXRpb24gbGluZXMuCisJSWYgbm8gbnVtYmVyIGlzIGdpdmVuIHRvIGAtbmAsIG9ubHkgdGhlIGZpcnN0IGxpbmUgaXMgcHJpbnRlZC4KKwlJZiB0aGUgdGFnIGlzIG5vdCBhbm5vdGF0ZWQsIHRoZSBjb21taXQgbWVzc2FnZSBpcyBkaXNwbGF5ZWQgaW5zdGVhZC4KKworLWwgPHBhdHRlcm4+OjoKKy0tbGlzdCA8cGF0dGVybj46OgorCUxpc3QgdGFncyB3aXRoIG5hbWVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRlcm4gKG9yIGFsbCBpZiBubworCXBhdHRlcm4gaXMgZ2l2ZW4pLiAgUnVubmluZyAiZ2l0IHRhZyIgd2l0aG91dCBhcmd1bWVudHMgYWxzbworCWxpc3RzIGFsbCB0YWdzLiBUaGUgcGF0dGVybiBpcyBhIHNoZWxsIHdpbGRjYXJkIChpLmUuLCBtYXRjaGVkCisJdXNpbmcgZm5tYXRjaCgzKSkuICBNdWx0aXBsZSBwYXR0ZXJucyBtYXkgYmUgZ2l2ZW47IGlmIGFueSBvZgorCXRoZW0gbWF0Y2hlcywgdGhlIHRhZyBpcyBzaG93bi4KKworLS1jb2x1bW5bPTxvcHRpb25zPl06OgorLS1uby1jb2x1bW46OgorCURpc3BsYXkgdGFnIGxpc3RpbmcgaW4gY29sdW1ucy4gU2VlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKwljb2x1bW4udGFnIGZvciBvcHRpb24gc3ludGF4LmAtLWNvbHVtbmAgYW5kIGAtLW5vLWNvbHVtbmAKKwl3aXRob3V0IG9wdGlvbnMgYXJlIGVxdWl2YWxlbnQgdG8gJ2Fsd2F5cycgYW5kICduZXZlcicgcmVzcGVjdGl2ZWx5LgorKworVGhpcyBvcHRpb24gaXMgb25seSBhcHBsaWNhYmxlIHdoZW4gbGlzdGluZyB0YWdzIHdpdGhvdXQgYW5ub3RhdGlvbiBsaW5lcy4KKworLS1jb250YWlucyA8Y29tbWl0Pjo6CisJT25seSBsaXN0IHRhZ3Mgd2hpY2ggY29udGFpbiB0aGUgc3BlY2lmaWVkIGNvbW1pdC4KKworLS1wb2ludHMtYXQgPG9iamVjdD46OgorCU9ubHkgbGlzdCB0YWdzIG9mIHRoZSBnaXZlbiBvYmplY3QuCisKKy1tIDxtc2c+OjoKKy0tbWVzc2FnZT08bXNnPjo6CisJVXNlIHRoZSBnaXZlbiB0YWcgbWVzc2FnZSAoaW5zdGVhZCBvZiBwcm9tcHRpbmcpLgorCUlmIG11bHRpcGxlIGAtbWAgb3B0aW9ucyBhcmUgZ2l2ZW4sIHRoZWlyIHZhbHVlcyBhcmUKKwljb25jYXRlbmF0ZWQgYXMgc2VwYXJhdGUgcGFyYWdyYXBocy4KKwlJbXBsaWVzIGAtYWAgaWYgbm9uZSBvZiBgLWFgLCBgLXNgLCBvciBgLXUgPGtleS1pZD5gCisJaXMgZ2l2ZW4uCisKKy1GIDxmaWxlPjo6CistLWZpbGU9PGZpbGU+OjoKKwlUYWtlIHRoZSB0YWcgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBmaWxlLiAgVXNlICctJyB0bworCXJlYWQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCisJSW1wbGllcyBgLWFgIGlmIG5vbmUgb2YgYC1hYCwgYC1zYCwgb3IgYC11IDxrZXktaWQ+YAorCWlzIGdpdmVuLgorCistLWNsZWFudXA9PG1vZGU+OjoKKwlUaGlzIG9wdGlvbiBzZXRzIGhvdyB0aGUgdGFnIG1lc3NhZ2UgaXMgY2xlYW5lZCB1cC4KKwlUaGUgICc8bW9kZT4nIGNhbiBiZSBvbmUgb2YgJ3ZlcmJhdGltJywgJ3doaXRlc3BhY2UnIGFuZCAnc3RyaXAnLiAgVGhlCisJJ3N0cmlwJyBtb2RlIGlzIGRlZmF1bHQuIFRoZSAndmVyYmF0aW0nIG1vZGUgZG9lcyBub3QgY2hhbmdlIG1lc3NhZ2UgYXQKKwlhbGwsICd3aGl0ZXNwYWNlJyByZW1vdmVzIGp1c3QgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlIGxpbmVzIGFuZAorCSdzdHJpcCcgcmVtb3ZlcyBib3RoIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRhcnkuCisKKzx0YWduYW1lPjo6CisJVGhlIG5hbWUgb2YgdGhlIHRhZyB0byBjcmVhdGUsIGRlbGV0ZSwgb3IgZGVzY3JpYmUuCisJVGhlIG5ldyB0YWcgbmFtZSBtdXN0IHBhc3MgYWxsIGNoZWNrcyBkZWZpbmVkIGJ5CisJbGlua2dpdDpnaXQtY2hlY2stcmVmLWZvcm1hdFsxXS4gIFNvbWUgb2YgdGhlc2UgY2hlY2tzCisJbWF5IHJlc3RyaWN0IHRoZSBjaGFyYWN0ZXJzIGFsbG93ZWQgaW4gYSB0YWcgbmFtZS4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorQnkgZGVmYXVsdCwgJ2dpdCB0YWcnIGluIHNpZ24td2l0aC1kZWZhdWx0IG1vZGUgKC1zKSB3aWxsIHVzZSB5b3VyCitjb21taXR0ZXIgaWRlbnRpdHkgKG9mIHRoZSBmb3JtICJZb3VyIE5hbWUgPHlvdXJAZW1haWwuYWRkcmVzcz4iKSB0bworZmluZCBhIGtleS4gIElmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBkZWZhdWx0IGtleSwgeW91IGNhbiBzcGVjaWZ5CitpdCBpbiB0aGUgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGFzIGZvbGxvd3M6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1t1c2VyXQorICAgIHNpZ25pbmdrZXkgPSA8Z3BnLWtleS1pZD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK09uIFJlLXRhZ2dpbmcKK35+fn5+fn5+fn5+fn4KKworV2hhdCBzaG91bGQgeW91IGRvIHdoZW4geW91IHRhZyBhIHdyb25nIGNvbW1pdCBhbmQgeW91IHdvdWxkCit3YW50IHRvIHJlLXRhZz8KKworSWYgeW91IG5ldmVyIHB1c2hlZCBhbnl0aGluZyBvdXQsIGp1c3QgcmUtdGFnIGl0LiBVc2UgIi1mIiB0bworcmVwbGFjZSB0aGUgb2xkIG9uZS4gQW5kIHlvdSdyZSBkb25lLgorCitCdXQgaWYgeW91IGhhdmUgcHVzaGVkIHRoaW5ncyBvdXQgKG9yIG90aGVycyBjb3VsZCBqdXN0IHJlYWQKK3lvdXIgcmVwb3NpdG9yeSBkaXJlY3RseSksIHRoZW4gb3RoZXJzIHdpbGwgaGF2ZSBhbHJlYWR5IHNlZW4KK3RoZSBvbGQgdGFnLiBJbiB0aGF0IGNhc2UgeW91IGNhbiBkbyBvbmUgb2YgdHdvIHRoaW5nczoKKworLiBUaGUgc2FuZSB0aGluZy4KK0p1c3QgYWRtaXQgeW91IHNjcmV3ZWQgdXAsIGFuZCB1c2UgYSBkaWZmZXJlbnQgbmFtZS4gT3RoZXJzIGhhdmUKK2FscmVhZHkgc2VlbiBvbmUgdGFnLW5hbWUsIGFuZCBpZiB5b3Uga2VlcCB0aGUgc2FtZSBuYW1lLCB5b3UKK21heSBiZSBpbiB0aGUgc2l0dWF0aW9uIHRoYXQgdHdvIHBlb3BsZSBib3RoIGhhdmUgInZlcnNpb24gWCIsCitidXQgdGhleSBhY3R1YWxseSBoYXZlICdkaWZmZXJlbnQnICJYIidzLiAgU28ganVzdCBjYWxsIGl0ICJYLjEiCithbmQgYmUgZG9uZSB3aXRoIGl0LgorCisuIFRoZSBpbnNhbmUgdGhpbmcuCitZb3UgcmVhbGx5IHdhbnQgdG8gY2FsbCB0aGUgbmV3IHZlcnNpb24gIlgiIHRvbywgJ2V2ZW4gdGhvdWdoJworb3RoZXJzIGhhdmUgYWxyZWFkeSBzZWVuIHRoZSBvbGQgb25lLiBTbyBqdXN0IHVzZSAnZ2l0IHRhZyAtZicKK2FnYWluLCBhcyBpZiB5b3UgaGFkbid0IGFscmVhZHkgcHVibGlzaGVkIHRoZSBvbGQgb25lLgorCitIb3dldmVyLCBHaXQgZG9lcyAqbm90KiAoYW5kIGl0IHNob3VsZCBub3QpIGNoYW5nZSB0YWdzIGJlaGluZAordXNlcnMgYmFjay4gU28gaWYgc29tZWJvZHkgYWxyZWFkeSBnb3QgdGhlIG9sZCB0YWcsIGRvaW5nIGEKKydnaXQgcHVsbCcgb24geW91ciB0cmVlIHNob3VsZG4ndCBqdXN0IG1ha2UgdGhlbSBvdmVyd3JpdGUgdGhlIG9sZAorb25lLgorCitJZiBzb21lYm9keSBnb3QgYSByZWxlYXNlIHRhZyBmcm9tIHlvdSwgeW91IGNhbm5vdCBqdXN0IGNoYW5nZQordGhlIHRhZyBmb3IgdGhlbSBieSB1cGRhdGluZyB5b3VyIG93biBvbmUuIFRoaXMgaXMgYSBiaWcKK3NlY3VyaXR5IGlzc3VlLCBpbiB0aGF0IHBlb3BsZSBNVVNUIGJlIGFibGUgdG8gdHJ1c3QgdGhlaXIKK3RhZy1uYW1lcy4gIElmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGUgaW5zYW5lIHRoaW5nLCB5b3UgbmVlZAordG8ganVzdCBmZXNzIHVwIHRvIGl0LCBhbmQgdGVsbCBwZW9wbGUgdGhhdCB5b3UgbWVzc2VkIHVwLiBZb3UKK2NhbiBkbyB0aGF0IGJ5IG1ha2luZyBhIHZlcnkgcHVibGljIGFubm91bmNlbWVudCBzYXlpbmc6CisKKy0tLS0tLS0tLS0tLQorT2ssIEkgbWVzc2VkIHVwLCBhbmQgSSBwdXNoZWQgb3V0IGFuIGVhcmxpZXIgdmVyc2lvbiB0YWdnZWQgYXMgWC4gSQordGhlbiBmaXhlZCBzb21ldGhpbmcsIGFuZCByZXRhZ2dlZCB0aGUgKmZpeGVkKiB0cmVlIGFzIFggYWdhaW4uCisKK0lmIHlvdSBnb3QgdGhlIHdyb25nIHRhZywgYW5kIHdhbnQgdGhlIG5ldyBvbmUsIHBsZWFzZSBkZWxldGUKK3RoZSBvbGQgb25lIGFuZCBmZXRjaCB0aGUgbmV3IG9uZSBieSBkb2luZzoKKworCWdpdCB0YWcgLWQgWAorCWdpdCBmZXRjaCBvcmlnaW4gdGFnIFgKKwordG8gZ2V0IG15IHVwZGF0ZWQgdGFnLgorCitZb3UgY2FuIHRlc3Qgd2hpY2ggdGFnIHlvdSBoYXZlIGJ5IGRvaW5nCisKKwlnaXQgcmV2LXBhcnNlIFgKKword2hpY2ggc2hvdWxkIHJldHVybiAwMTIzNDU2Nzg5YWJjZGVmLi4gaWYgeW91IGhhdmUgdGhlIG5ldyB2ZXJzaW9uLgorCitTb3JyeSBmb3IgdGhlIGluY29udmVuaWVuY2UuCistLS0tLS0tLS0tLS0KKworRG9lcyB0aGlzIHNlZW0gYSBiaXQgY29tcGxpY2F0ZWQ/ICBJdCAqc2hvdWxkKiBiZS4gVGhlcmUgaXMgbm8KK3dheSB0aGF0IGl0IHdvdWxkIGJlIGNvcnJlY3QgdG8ganVzdCAiZml4IiBpdCBhdXRvbWF0aWNhbGx5LgorUGVvcGxlIG5lZWQgdG8ga25vdyB0aGF0IHRoZWlyIHRhZ3MgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQuCisKKworT24gQXV0b21hdGljIGZvbGxvd2luZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB5b3UgYXJlIGZvbGxvd2luZyBzb21lYm9keSBlbHNlJ3MgdHJlZSwgeW91IGFyZSBtb3N0IGxpa2VseQordXNpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIChgcmVmcy9oZWFkcy9vcmlnaW5gIGluIHRyYWRpdGlvbmFsCitsYXlvdXQsIG9yIGByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcmAgaW4gdGhlIHNlcGFyYXRlLXJlbW90ZQorbGF5b3V0KS4gIFlvdSB1c3VhbGx5IHdhbnQgdGhlIHRhZ3MgZnJvbSB0aGUgb3RoZXIgZW5kLgorCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGFyZSBmZXRjaGluZyBiZWNhdXNlIHlvdSB3b3VsZCB3YW50IGEKK29uZS1zaG90IG1lcmdlIGZyb20gc29tZWJvZHkgZWxzZSwgeW91IHR5cGljYWxseSBkbyBub3Qgd2FudCB0bworZ2V0IHRhZ3MgZnJvbSB0aGVyZS4gIFRoaXMgaGFwcGVucyBtb3JlIG9mdGVuIGZvciBwZW9wbGUgbmVhcgordGhlIHRvcGxldmVsIGJ1dCBub3QgbGltaXRlZCB0byB0aGVtLiAgTWVyZSBtb3J0YWxzIHdoZW4gcHVsbGluZworZnJvbSBlYWNoIG90aGVyIGRvIG5vdCBuZWNlc3NhcmlseSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZ2V0Citwcml2YXRlIGFuY2hvciBwb2ludCB0YWdzIGZyb20gdGhlIG90aGVyIHBlcnNvbi4KKworT2Z0ZW4sICJwbGVhc2UgcHVsbCIgbWVzc2FnZXMgb24gdGhlIG1haWxpbmcgbGlzdCBqdXN0IHByb3ZpZGUKK3R3byBwaWVjZXMgb2YgaW5mb3JtYXRpb246IGEgcmVwbyBVUkwgYW5kIGEgYnJhbmNoIG5hbWU7IHRoaXMKK2lzIGRlc2lnbmVkIHRvIGJlIGVhc2lseSBjdXQmcGFzdGVkIGF0IHRoZSBlbmQgb2YgYSAnZ2l0IGZldGNoJworY29tbWFuZCBsaW5lOgorCistLS0tLS0tLS0tLS0KK0xpbnVzLCBwbGVhc2UgcHVsbCBmcm9tCisKKwlnaXQ6Ly9naXQuLi4uL3Byb2ouZ2l0IG1hc3RlcgorCit0byBnZXQgdGhlIGZvbGxvd2luZyB1cGRhdGVzLi4uCistLS0tLS0tLS0tLS0KKworYmVjb21lczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsIGdpdDovL2dpdC4uLi4vcHJvai5naXQgbWFzdGVyCistLS0tLS0tLS0tLS0KKworSW4gc3VjaCBhIGNhc2UsIHlvdSBkbyBub3Qgd2FudCB0byBhdXRvbWF0aWNhbGx5IGZvbGxvdyB0aGUgb3RoZXIKK3BlcnNvbidzIHRhZ3MuCisKK09uZSBpbXBvcnRhbnQgYXNwZWN0IG9mIGdpdCBpcyBpdHMgZGlzdHJpYnV0ZWQgbmF0dXJlLCB3aGljaAorbGFyZ2VseSBtZWFucyB0aGVyZSBpcyBubyBpbmhlcmVudCAidXBzdHJlYW0iIG9yCisiZG93bnN0cmVhbSIgaW4gdGhlIHN5c3RlbS4gIE9uIHRoZSBmYWNlIG9mIGl0LCB0aGUgYWJvdmUKK2V4YW1wbGUgbWlnaHQgc2VlbSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0YWcgbmFtZXNwYWNlIGlzIG93bmVkCitieSB0aGUgdXBwZXIgZWNoZWxvbiBvZiBwZW9wbGUgYW5kIHRoYXQgdGFncyBvbmx5IGZsb3cgZG93bndhcmRzLCBidXQKK3RoYXQgaXMgbm90IHRoZSBjYXNlLiAgSXQgb25seSBzaG93cyB0aGF0IHRoZSB1c2FnZSBwYXR0ZXJuCitkZXRlcm1pbmVzIHdobyBhcmUgaW50ZXJlc3RlZCBpbiB3aG9zZSB0YWdzLgorCitBIG9uZS1zaG90IHB1bGwgaXMgYSBzaWduIHRoYXQgYSBjb21taXQgaGlzdG9yeSBpcyBub3cgY3Jvc3NpbmcKK3RoZSBib3VuZGFyeSBiZXR3ZWVuIG9uZSBjaXJjbGUgb2YgcGVvcGxlIChlLmcuICJwZW9wbGUgd2hvIGFyZQorcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gdGhlIG5ldHdvcmtpbmcgcGFydCBvZiB0aGUga2VybmVsIikgd2hvIG1heQoraGF2ZSB0aGVpciBvd24gc2V0IG9mIHRhZ3MgKGUuZy4gInRoaXMgaXMgdGhlIHRoaXJkIHJlbGVhc2UKK2NhbmRpZGF0ZSBmcm9tIHRoZSBuZXR3b3JraW5nIGdyb3VwIHRvIGJlIHByb3Bvc2VkIGZvciBnZW5lcmFsCitjb25zdW1wdGlvbiB3aXRoIDIuNi4yMSByZWxlYXNlIikgdG8gYW5vdGhlciBjaXJjbGUgb2YgcGVvcGxlCisoZS5nLiAicGVvcGxlIHdobyBpbnRlZ3JhdGUgdmFyaW91cyBzdWJzeXN0ZW0gaW1wcm92ZW1lbnRzIikuCitUaGUgbGF0dGVyIGFyZSB1c3VhbGx5IG5vdCBpbnRlcmVzdGVkIGluIHRoZSBkZXRhaWxlZCB0YWdzIHVzZWQKK2ludGVybmFsbHkgaW4gdGhlIGZvcm1lciBncm91cCAodGhhdCBpcyB3aGF0ICJpbnRlcm5hbCIgbWVhbnMpLgorVGhhdCBpcyB3aHkgaXQgaXMgZGVzaXJhYmxlIG5vdCB0byBmb2xsb3cgdGFncyBhdXRvbWF0aWNhbGx5IGluCit0aGlzIGNhc2UuCisKK0l0IG1heSB3ZWxsIGJlIHRoYXQgYW1vbmcgbmV0d29ya2luZyBwZW9wbGUsIHRoZXkgbWF5IHdhbnQgdG8KK2V4Y2hhbmdlIHRoZSB0YWdzIGludGVybmFsIHRvIHRoZWlyIGdyb3VwLCBidXQgaW4gdGhhdCB3b3JrZmxvdwordGhleSBhcmUgbW9zdCBsaWtlbHkgdHJhY2tpbmcgZWFjaCBvdGhlcidzIHByb2dyZXNzIGJ5CitoYXZpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLiAgQWdhaW4sIHRoZSBoZXVyaXN0aWMgdG8gYXV0b21hdGljYWxseQorZm9sbG93IHN1Y2ggdGFncyBpcyBhIGdvb2QgdGhpbmcuCisKKworT24gQmFja2RhdGluZyBUYWdzCit+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgeW91IGhhdmUgaW1wb3J0ZWQgc29tZSBjaGFuZ2VzIGZyb20gYW5vdGhlciBWQ1MgYW5kIHdvdWxkIGxpa2UKK3RvIGFkZCB0YWdzIGZvciBtYWpvciByZWxlYXNlcyBvZiB5b3VyIHdvcmssIGl0IGlzIHVzZWZ1bCB0byBiZSBhYmxlCit0byBzcGVjaWZ5IHRoZSBkYXRlIHRvIGVtYmVkIGluc2lkZSBvZiB0aGUgdGFnIG9iamVjdDsgc3VjaCBkYXRhIGluCit0aGUgdGFnIG9iamVjdCBhZmZlY3RzLCBmb3IgZXhhbXBsZSwgdGhlIG9yZGVyaW5nIG9mIHRhZ3MgaW4gdGhlCitnaXR3ZWIgaW50ZXJmYWNlLgorCitUbyBzZXQgdGhlIGRhdGUgdXNlZCBpbiBmdXR1cmUgdGFnIG9iamVjdHMsIHNldCB0aGUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIEdJVF9DT01NSVRURVJfREFURSAoc2VlIHRoZSBsYXRlciBkaXNjdXNzaW9uIG9mIHBvc3NpYmxlCit2YWx1ZXM7IHRoZSBtb3N0IGNvbW1vbiBmb3JtIGlzICJZWVlZLU1NLUREIEhIOk1NIikuCisKK0ZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0KKyQgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTEwLTAyIDEwOjMxIiBnaXQgdGFnIC1zIHYxLjAuMQorLS0tLS0tLS0tLS0tCisKK2luY2x1ZGU6OmRhdGUtZm9ybWF0cy50eHRbXQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNoZWNrLXJlZi1mb3JtYXRbMV0uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdGFyLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdGFyLXRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MzYyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10YXItdHJlZS50eHQKQEAgLTAsMCArMSw4MiBAQAorZ2l0LXRhci10cmVlKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXRhci10cmVlIC0gQ3JlYXRlIGEgdGFyIGFyY2hpdmUgb2YgdGhlIGZpbGVzIGluIHRoZSBuYW1lZCB0cmVlIG9iamVjdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB0YXItdHJlZScgWy0tcmVtb3RlPTxyZXBvPl0gPHRyZWUtaXNoPiBbIDxiYXNlPiBdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVEhJUyBDT01NQU5EIElTIERFUFJFQ0FURUQuICBVc2UgJ2dpdCBhcmNoaXZlJyB3aXRoIGAtLWZvcm1hdD10YXJgCitvcHRpb24gaW5zdGVhZCAoYW5kIG1vdmUgdGhlIDxiYXNlPiBhcmd1bWVudCB0byBgLS1wcmVmaXg9YmFzZS9gKS4KKworQ3JlYXRlcyBhIHRhciBhcmNoaXZlIGNvbnRhaW5pbmcgdGhlIHRyZWUgc3RydWN0dXJlIGZvciB0aGUgbmFtZWQgdHJlZS4KK1doZW4gPGJhc2U+IGlzIHNwZWNpZmllZCBpdCBpcyBhZGRlZCBhcyBhIGxlYWRpbmcgcGF0aCB0byB0aGUgZmlsZXMgaW4gdGhlCitnZW5lcmF0ZWQgdGFyIGFyY2hpdmUuCisKKydnaXQgdGFyLXRyZWUnIGJlaGF2ZXMgZGlmZmVyZW50bHkgd2hlbiBnaXZlbiBhIHRyZWUgSUQgdmVyc3VzIHdoZW4gZ2l2ZW4KK2EgY29tbWl0IElEIG9yIHRhZyBJRC4gIEluIHRoZSBmaXJzdCBjYXNlIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZCBhcworbW9kaWZpY2F0aW9uIHRpbWUgb2YgZWFjaCBmaWxlIGluIHRoZSBhcmNoaXZlLiAgSW4gdGhlIGxhdHRlciBjYXNlIHRoZQorY29tbWl0IHRpbWUgYXMgcmVjb3JkZWQgaW4gdGhlIHJlZmVyZW5jZWQgY29tbWl0IG9iamVjdCBpcyB1c2VkIGluc3RlYWQuCitBZGRpdGlvbmFsbHkgdGhlIGNvbW1pdCBJRCBpcyBzdG9yZWQgaW4gYSBnbG9iYWwgZXh0ZW5kZWQgcGF4IGhlYWRlci4KK0l0IGNhbiBiZSBleHRyYWN0ZWQgdXNpbmcgJ2dpdCBnZXQtdGFyLWNvbW1pdC1pZCcuCisKK09QVElPTlMKKy0tLS0tLS0KKworPHRyZWUtaXNoPjo6CisJVGhlIHRyZWUgb3IgY29tbWl0IHRvIHByb2R1Y2UgdGFyIGFyY2hpdmUgZm9yLiAgSWYgaXQgaXMKKwl0aGUgb2JqZWN0IG5hbWUgb2YgYSBjb21taXQgb2JqZWN0LgorCis8YmFzZT46OgorCUxlYWRpbmcgcGF0aCB0byB0aGUgZmlsZXMgaW4gdGhlIHJlc3VsdGluZyB0YXIgYXJjaGl2ZS4KKworLS1yZW1vdGU9PHJlcG8+OjoKKwlJbnN0ZWFkIG9mIG1ha2luZyBhIHRhciBhcmNoaXZlIGZyb20gbG9jYWwgcmVwb3NpdG9yeSwKKwlyZXRyaWV2ZSBhIHRhciBhcmNoaXZlIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeS4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCit0YXIudW1hc2s6OgorCVRoaXMgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHBlcm1pc3Npb24gYml0cyBvZgorCXRhciBhcmNoaXZlIGVudHJpZXMuICBUaGUgZGVmYXVsdCBpcyAwMDAyLCB3aGljaCB0dXJucyBvZmYgdGhlCisJd29ybGQgd3JpdGUgYml0LiAgVGhlIHNwZWNpYWwgdmFsdWUgInVzZXIiIGluZGljYXRlcyB0aGF0IHRoZQorCWFyY2hpdmluZyB1c2VyJ3MgdW1hc2sgd2lsbCBiZSB1c2VkIGluc3RlYWQuICBTZWUgdW1hc2soMikgZm9yCisJZGV0YWlscy4KKworRVhBTVBMRVMKKy0tLS0tLS0tCitgZ2l0IHRhci10cmVlIEhFQUQganVuayB8IChjZCAvdmFyL3RtcC8gJiYgdGFyIHhmIC0pYDo6CisKKwlDcmVhdGUgYSB0YXIgYXJjaGl2ZSB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiB0aGUKKwlsYXRlc3QgY29tbWl0IG9uIHRoZSBjdXJyZW50IGJyYW5jaCwgYW5kIGV4dHJhY3RzIGl0IGluCisJYC92YXIvdG1wL2p1bmtgIGRpcmVjdG9yeS4KKworYGdpdCB0YXItdHJlZSB2MS40LjAgZ2l0LTEuNC4wIHwgZ3ppcCA+Z2l0LTEuNC4wLnRhci5nemA6OgorCisJQ3JlYXRlIGEgdGFyYmFsbCBmb3IgdjEuNC4wIHJlbGVhc2UuCisKK2BnaXQgdGFyLXRyZWUgdjEuNC4wXnt0cmVlfSBnaXQtMS40LjAgfCBnemlwID5naXQtMS40LjAudGFyLmd6YDo6CisKKwlDcmVhdGUgYSB0YXJiYWxsIGZvciB2MS40LjAgcmVsZWFzZSwgYnV0IHdpdGhvdXQgYQorCWdsb2JhbCBleHRlbmRlZCBwYXggaGVhZGVyLgorCitgZ2l0IHRhci10cmVlIC0tcmVtb3RlPWV4YW1wbGUuY29tOmdpdC5naXQgdjEuNC4wID5naXQtMS40LjAudGFyYDo6CisKKwlHZXQgYSB0YXJiYWxsIHYxLjQuMCBmcm9tIGV4YW1wbGUuY29tLgorCitgZ2l0IHRhci10cmVlIEhFQUQ6RG9jdW1lbnRhdGlvbi8gZ2l0LWRvY3MgPiBnaXQtMS40LjAtZG9jcy50YXJgOjoKKworCVB1dCBldmVyeXRoaW5nIGluIHRoZSBjdXJyZW50IGhlYWQncyBEb2N1bWVudGF0aW9uLyBkaXJlY3RvcnkKKwlpbnRvICdnaXQtMS40LjAtZG9jcy50YXInLCB3aXRoIHRoZSBwcmVmaXggJ2dpdC1kb2NzLycuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdG9vbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdG9vbHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjQwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10b29scy50eHQKQEAgLTAsMCArMSwxMTggQEAKK0Egc2hvcnQgZ2l0IHRvb2xzIHN1cnZleQorPT09PT09PT09PT09PT09PT09PT09PT09CisKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworQXBhcnQgZnJvbSBnaXQgY29udHJpYi8gYXJlYSB0aGVyZSBhcmUgc29tZSBvdGhlcnMgdGhpcmQtcGFydHkgdG9vbHMKK3lvdSBtYXkgd2FudCB0byBsb29rLgorCitUaGlzIGRvY3VtZW50IHByZXNlbnRzIGEgYnJpZWYgc3VtbWFyeSBvZiBlYWNoIHRvb2wgYW5kIHRoZSBjb3JyZXNwb25kaW5nCitsaW5rLgorCisKK0FsdGVybmF0aXZlL0F1Z21lbnRhdGl2ZSBQb3JjZWxhaW5zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAtICpDb2dpdG8qIChodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9jb2dpdG8vKQorCisgICBDb2dpdG8gaXMgYSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGxheWVyZWQgb24gdG9wIG9mIHRoZSBnaXQgdHJlZSBoaXN0b3J5CisgICBzdG9yYWdlIHN5c3RlbS4gSXQgYWltcyBhdCBzZWFtbGVzcyB1c2VyIGludGVyZmFjZSBhbmQgZWFzZSBvZiB1c2UsCisgICBwcm92aWRpbmcgZ2VuZXJhbGx5IHNtb290aGVyIHVzZXIgZXhwZXJpZW5jZSB0aGFuIHRoZSAicmF3IiBDb3JlIEdJVAorICAgaXRzZWxmIGFuZCBpbmRlZWQgbWFueSBvdGhlciB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtcy4KKworICAgQ29naXRvIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGFzIG1vc3Qgb2YgaXRzIGZ1bmN0aW9uYWxpdHkKKyAgIGlzIG5vdyBpbiBjb3JlIEdJVC4KKworCisgICAtICpwZyogKGh0dHA6Ly93d3cuc3BlYXJjZS5vcmcvY2F0ZWdvcnkvcHJvamVjdHMvc2NtL3BnLykKKworICAgcGcgaXMgYSBzaGVsbCBzY3JpcHQgd3JhcHBlciBhcm91bmQgR0lUIHRvIGhlbHAgdGhlIHVzZXIgbWFuYWdlIGEgc2V0IG9mCisgICBwYXRjaGVzIHRvIGZpbGVzLiBwZyBpcyBzb21ld2hhdCBsaWtlIHF1aWx0IG9yIFN0R0lULCBidXQgaXQgZG9lcyBoYXZlIGEKKyAgIHNsaWdodGx5IGRpZmZlcmVudCBmZWF0dXJlIHNldC4KKworCisgICAtICpTdEdpdCogKGh0dHA6Ly93d3cucHJvY29kZS5vcmcvc3RnaXQvKQorCisgICBTdGFja2VkIEdJVCBwcm92aWRlcyBhIHF1aWx0LWxpa2UgcGF0Y2ggbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IGluIHRoZQorICAgR0lUIGVudmlyb25tZW50LiBZb3UgY2FuIGVhc2lseSBtYW5hZ2UgeW91ciBwYXRjaGVzIGluIHRoZSBzY29wZSBvZiBHSVQKKyAgIHVudGlsIHRoZXkgZ2V0IG1lcmdlZCB1cHN0cmVhbS4KKworCitIaXN0b3J5IFZpZXdlcnMKKy0tLS0tLS0tLS0tLS0tLQorCisgICAtICpnaXRrKiAoc2hpcHBlZCB3aXRoIGdpdC1jb3JlKQorCisgICBnaXRrIGlzIGEgc2ltcGxlIFRrIEdVSSBmb3IgYnJvd3NpbmcgaGlzdG9yeSBvZiBHSVQgcmVwb3NpdG9yaWVzIGVhc2lseS4KKworCisgICAtICpnaXR2aWV3KiAgKGNvbnRyaWIvKQorCisgICBnaXR2aWV3IGlzIGEgR1RLIGJhc2VkIHJlcG9zaXRvcnkgYnJvd3NlciBmb3IgZ2l0CisKKworICAgLSAqZ2l0d2ViKiAoc2hpcHBlZCB3aXRoIGdpdC1jb3JlKQorCisgICBHSVR3ZWIgcHJvdmlkZXMgZnVsbC1mbGVkZ2VkIHdlYiBpbnRlcmZhY2UgZm9yIEdJVCByZXBvc2l0b3JpZXMuCisKKworICAgLSAqcWdpdCogKGh0dHA6Ly9kaWdpbGFuZGVyLmxpYmVyby5pdC9tY29zdGFsYmEvKQorCisgICBRR2l0IGlzIGEgZ2l0L1N0R0lUIEdVSSB2aWV3ZXIgYnVpbHQgb24gUXQvQysrLiBRR2l0IGNvdWxkIGJlIHVzZWQKKyAgIHRvIGJyb3dzZSBoaXN0b3J5IGFuZCBkaXJlY3RvcnkgdHJlZSwgdmlldyBhbm5vdGF0ZWQgZmlsZXMsIGNvbW1pdAorICAgY2hhbmdlcyBjaGVycnkgcGlja2luZyBzaW5nbGUgZmlsZXMgb3IgYXBwbHlpbmcgcGF0Y2hlcy4KKyAgIEN1cnJlbnRseSBpdCBpcyB0aGUgZmFzdGVzdCBhbmQgbW9zdCBmZWF0dXJlIHJpY2ggYW1vbmcgdGhlIGdpdAorICAgdmlld2VycyBhbmQgY29tbWl0IHRvb2xzLgorCisgICAtICp0aWcqIChodHRwOi8vam9uYXMubml0cm8uZGsvdGlnLykKKworICAgdGlnIGJ5IEpvbmFzIEZvbnNlY2EgaXMgYSBzaW1wbGUgZ2l0IHJlcG9zaXRvcnkgYnJvd3NlcgorICAgd3JpdHRlbiB1c2luZyBuY3Vyc2VzLiBCYXNpY2FsbHksIGl0IGp1c3QgYWN0cyBhcyBhIGZyb250LWVuZAorICAgZm9yIGdpdC1sb2cgYW5kIGdpdC1zaG93L2dpdC1kaWZmLiBBZGRpdGlvbmFsbHksIHlvdSBjYW4gYWxzbworICAgdXNlIGl0IGFzIGEgcGFnZXIgZm9yIGdpdCBjb21tYW5kcy4KKworCitGb3JlaWduIFNDTSBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAtICpnaXQtc3ZuKiAoc2hpcHBlZCB3aXRoIGdpdC1jb3JlKQorCisgICBnaXQtc3ZuIGlzIGEgc2ltcGxlIGNvbmR1aXQgZm9yIGNoYW5nZXNldHMgYmV0d2VlbiBhIHNpbmdsZSBTdWJ2ZXJzaW9uCisgICBicmFuY2ggYW5kIGdpdC4KKworCisgICAtICpxdWlsdDJnaXQgLyBnaXQycXVpbHQqIChodHRwOi8vaG9tZS10ai5vcmcvd2lraS9pbmRleC5waHAvTWlzYykKKworICAgVGhlc2UgdXRpbGl0aWVzIGNvbnZlcnQgcGF0Y2ggc2VyaWVzIGluIGEgcXVpbHQgcmVwb3NpdG9yeSBhbmQgY29tbWl0CisgICBzZXJpZXMgaW4gZ2l0IGJhY2sgYW5kIGZvcnRoLgorCisKKyAgIC0gKmhnLXRvLWdpdCogKGNvbnRyaWIvKQorCisgICBoZy10by1naXQgY29udmVydHMgYSBNZXJjdXJpYWwgcmVwb3NpdG9yeSBpbnRvIGEgZ2l0IG9uZSwgYW5kCisgICBwcmVzZXJ2ZXMgdGhlIGZ1bGwgYnJhbmNoIGhpc3RvcnkgaW4gdGhlIHByb2Nlc3MuIGhnLXRvLWdpdCBjYW4KKyAgIGFsc28gYmUgdXNlZCBpbiBhbiBpbmNyZW1lbnRhbCB3YXkgdG8ga2VlcCB0aGUgZ2l0IHJlcG9zaXRvcnkKKyAgIGluIHN5bmMgd2l0aCB0aGUgbWFzdGVyIE1lcmN1cmlhbCByZXBvc2l0b3J5LgorCisKK090aGVycworLS0tLS0tCisKKyAgIC0gKihoKWdjdCogKGh0dHA6Ly93d3cuY3lkLmxpdS5zZS91c2Vycy9+ZnJla3UwNDUvZ2N0LykKKworICAgQ29tbWl0IFRvb2wgb3IgKGgpZ2N0IGlzIGEgR1VJIGVuYWJsZWQgY29tbWl0IHRvb2wgZm9yIGdpdCBhbmQKKyAgIE1lcmN1cmlhbCAoaGcpLiBJdCBhbGxvd3MgdGhlIHVzZXIgdG8gdmlldyBkaWZmcywgc2VsZWN0IHdoaWNoIGZpbGVzCisgICB0byBjb21taXR0ZWQgKG9yIGlnbm9yZWQgLyByZXZlcnRlZCkgd3JpdGUgY29tbWl0IG1lc3NhZ2VzIGFuZAorICAgcGVyZm9ybSB0aGUgY29tbWl0IGl0c2VsZi4KKworICAgLSAqZ2l0LmVsKiAoY29udHJpYi8pCisKKyAgIFRoaXMgaXMgYW4gRW1hY3MgaW50ZXJmYWNlIGZvciBnaXQuIFRoZSB1c2VyIGludGVyZmFjZSBpcyBtb2RlbGVkIG9uCisgICBwY2wtY3ZzLiBJdCBoYXMgYmVlbiBkZXZlbG9wZWQgb24gRW1hY3MgMjEgYW5kIHdpbGwgcHJvYmFibHkgbmVlZCBzb21lCisgICB0d2Vha2luZyB0byB3b3JrIG9uIFhFbWFjcy4KKworCitodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvSW50ZXJmYWNlc0Zyb250ZW5kc0FuZFRvb2xzIGhhcyBtb3JlCitjb21wcmVoZW5zaXZlIGxpc3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stZmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmMTQ4YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1maWxlLnR4dApAQCAtMCwwICsxLDI4IEBACitnaXQtdW5wYWNrLWZpbGUoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdW5wYWNrLWZpbGUgLSBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cworCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHVucGFjay1maWxlJyA8YmxvYj4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDcmVhdGVzIGEgZmlsZSBob2xkaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiBzcGVjaWZpZWQgYnkgc2hhMS4gSXQKK3JldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCS5tZXJnZV9maWxlX1hYWFhYCisKK09QVElPTlMKKy0tLS0tLS0KKzxibG9iPjo6CisJTXVzdCBiZSBhIGJsb2IgaWQKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stb2JqZWN0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stb2JqZWN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyMzQ5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1vYmplY3RzLnR4dApAQCAtMCwwICsxLDQ5IEBACitnaXQtdW5wYWNrLW9iamVjdHMoMSkKKz09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdW5wYWNrLW9iamVjdHMgLSBVbnBhY2sgb2JqZWN0cyBmcm9tIGEgcGFja2VkIGFyY2hpdmUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdW5wYWNrLW9iamVjdHMnIFstbl0gWy1xXSBbLXJdIFstLXN0cmljdF0gPHBhY2stZmlsZQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZCBhIHBhY2tlZCBhcmNoaXZlICgucGFjaykgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIGV4cGFuZGluZwordGhlIG9iamVjdHMgY29udGFpbmVkIHdpdGhpbiBhbmQgd3JpdGluZyB0aGVtIGludG8gdGhlIHJlcG9zaXRvcnkgaW4KKyJsb29zZSIgKG9uZSBvYmplY3QgcGVyIGZpbGUpIGZvcm1hdC4KKworT2JqZWN0cyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHJlcG9zaXRvcnkgd2lsbCAqbm90KiBiZSB1bnBhY2tlZAorZnJvbSB0aGUgcGFjay1maWxlLiAgVGhlcmVmb3JlLCBub3RoaW5nIHdpbGwgYmUgdW5wYWNrZWQgaWYgeW91IHVzZQordGhpcyBjb21tYW5kIG9uIGEgcGFjay1maWxlIHRoYXQgZXhpc3RzIHdpdGhpbiB0aGUgdGFyZ2V0IHJlcG9zaXRvcnkuCisKK1NlZSBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0gZm9yIG9wdGlvbnMgdG8gZ2VuZXJhdGUKK25ldyBwYWNrcyBhbmQgcmVwbGFjZSBleGlzdGluZyBvbmVzLgorCitPUFRJT05TCistLS0tLS0tCistbjo6CisgICAgICAgIERyeSBydW4uICBDaGVjayB0aGUgcGFjayBmaWxlIHdpdGhvdXQgYWN0dWFsbHkgdW5wYWNraW5nCisJdGhlIG9iamVjdHMuCisKKy1xOjoKKwlUaGUgY29tbWFuZCB1c3VhbGx5IHNob3dzIHBlcmNlbnRhZ2UgcHJvZ3Jlc3MuICBUaGlzCisJZmxhZyBzdXBwcmVzc2VzIGl0LgorCistcjo6CisJV2hlbiB1bnBhY2tpbmcgYSBjb3JydXB0IHBhY2tmaWxlLCB0aGUgY29tbWFuZCBkaWVzIGF0CisJdGhlIGZpcnN0IGNvcnJ1cHRpb24uICBUaGlzIGZsYWcgdGVsbHMgaXQgdG8ga2VlcCBnb2luZworCWFuZCBtYWtlIHRoZSBiZXN0IGVmZm9ydCB0byByZWNvdmVyIGFzIG1hbnkgb2JqZWN0cyBhcworCXBvc3NpYmxlLgorCistLXN0cmljdDo6CisJRG9uJ3Qgd3JpdGUgb2JqZWN0cyB3aXRoIGJyb2tlbiBjb250ZW50IG9yIGxpbmtzLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMGIxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CkBAIC0wLDAgKzEsMzc3IEBACitnaXQtdXBkYXRlLWluZGV4KDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC11cGRhdGUtaW5kZXggLSBSZWdpc3RlciBmaWxlIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHVwZGF0ZS1pbmRleCcKKwkgICAgIFstLWFkZF0gWy0tcmVtb3ZlIHwgLS1mb3JjZS1yZW1vdmVdIFstLXJlcGxhY2VdCisJICAgICBbLS1yZWZyZXNoXSBbLXFdIFstLXVubWVyZ2VkXSBbLS1pZ25vcmUtbWlzc2luZ10KKwkgICAgIFsoLS1jYWNoZWluZm8gPG1vZGU+IDxvYmplY3Q+IDxmaWxlPikuLi5dCisJICAgICBbLS1jaG1vZD0oK3wtKXhdCisJICAgICBbLS1hc3N1bWUtdW5jaGFuZ2VkIHwgLS1uby1hc3N1bWUtdW5jaGFuZ2VkXQorCSAgICAgWy0tc2tpcC13b3JrdHJlZSB8IC0tbm8tc2tpcC13b3JrdHJlZV0KKwkgICAgIFstLWlnbm9yZS1zdWJtb2R1bGVzXQorCSAgICAgWy0tcmVhbGx5LXJlZnJlc2hdIFstLXVucmVzb2x2ZV0gWy0tYWdhaW4gfCAtZ10KKwkgICAgIFstLWluZm8tb25seV0gWy0taW5kZXgtaW5mb10KKwkgICAgIFstel0gWy0tc3RkaW5dIFstLWluZGV4LXZlcnNpb24gPG4+XQorCSAgICAgWy0tdmVyYm9zZV0KKwkgICAgIFstLV0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitNb2RpZmllcyB0aGUgaW5kZXggb3IgZGlyZWN0b3J5IGNhY2hlLiBFYWNoIGZpbGUgbWVudGlvbmVkIGlzIHVwZGF0ZWQKK2ludG8gdGhlIGluZGV4IGFuZCBhbnkgJ3VubWVyZ2VkJyBvciAnbmVlZHMgdXBkYXRpbmcnIHN0YXRlIGlzCitjbGVhcmVkLgorCitTZWUgYWxzbyBsaW5rZ2l0OmdpdC1hZGRbMV0gZm9yIGEgbW9yZSB1c2VyLWZyaWVuZGx5IHdheSB0byBkbyBzb21lIG9mCit0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9ucyBvbiB0aGUgaW5kZXguCisKK1RoZSB3YXkgJ2dpdCB1cGRhdGUtaW5kZXgnIGhhbmRsZXMgZmlsZXMgaXQgaXMgdG9sZCBhYm91dCBjYW4gYmUgbW9kaWZpZWQKK3VzaW5nIHRoZSB2YXJpb3VzIG9wdGlvbnM6CisKK09QVElPTlMKKy0tLS0tLS0KKy0tYWRkOjoKKwlJZiBhIHNwZWNpZmllZCBmaWxlIGlzbid0IGluIHRoZSBpbmRleCBhbHJlYWR5IHRoZW4gaXQncworCWFkZGVkLgorCURlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGlnbm9yZSBuZXcgZmlsZXMuCisKKy0tcmVtb3ZlOjoKKwlJZiBhIHNwZWNpZmllZCBmaWxlIGlzIGluIHRoZSBpbmRleCBidXQgaXMgbWlzc2luZyB0aGVuIGl0J3MKKwlyZW1vdmVkLgorCURlZmF1bHQgYmVoYXZpb3IgaXMgdG8gaWdub3JlIHJlbW92ZWQgZmlsZS4KKworLS1yZWZyZXNoOjoKKwlMb29rcyBhdCB0aGUgY3VycmVudCBpbmRleCBhbmQgY2hlY2tzIHRvIHNlZSBpZiBtZXJnZXMgb3IKKwl1cGRhdGVzIGFyZSBuZWVkZWQgYnkgY2hlY2tpbmcgc3RhdCgpIGluZm9ybWF0aW9uLgorCistcTo6CisgICAgICAgIFF1aWV0LiAgSWYgLS1yZWZyZXNoIGZpbmRzIHRoYXQgdGhlIGluZGV4IG5lZWRzIGFuIHVwZGF0ZSwgdGhlCisgICAgICAgIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gZXJyb3Igb3V0LiAgVGhpcyBvcHRpb24gbWFrZXMKKwknZ2l0IHVwZGF0ZS1pbmRleCcgY29udGludWUgYW55d2F5LgorCistLWlnbm9yZS1zdWJtb2R1bGVzOjoKKwlEbyBub3QgdHJ5IHRvIHVwZGF0ZSBzdWJtb2R1bGVzLiAgVGhpcyBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQKKwl3aGVuIHBhc3NlZCBiZWZvcmUgLS1yZWZyZXNoLgorCistLXVubWVyZ2VkOjoKKyAgICAgICAgSWYgLS1yZWZyZXNoIGZpbmRzIHVubWVyZ2VkIGNoYW5nZXMgaW4gdGhlIGluZGV4LCB0aGUgZGVmYXVsdAorCWJlaGF2aW9yIGlzIHRvIGVycm9yIG91dC4gIFRoaXMgb3B0aW9uIG1ha2VzICdnaXQgdXBkYXRlLWluZGV4JworICAgICAgICBjb250aW51ZSBhbnl3YXkuCisKKy0taWdub3JlLW1pc3Npbmc6OgorCUlnbm9yZXMgbWlzc2luZyBmaWxlcyBkdXJpbmcgYSAtLXJlZnJlc2gKKworLS1jYWNoZWluZm8gPG1vZGU+IDxvYmplY3Q+IDxwYXRoPjo6CisJRGlyZWN0bHkgaW5zZXJ0IHRoZSBzcGVjaWZpZWQgaW5mbyBpbnRvIHRoZSBpbmRleC4KKworLS1pbmRleC1pbmZvOjoKKyAgICAgICAgUmVhZCBpbmRleCBpbmZvcm1hdGlvbiBmcm9tIHN0ZGluLgorCistLWNobW9kPSgrfC0peDo6CisgICAgICAgIFNldCB0aGUgZXhlY3V0ZSBwZXJtaXNzaW9ucyBvbiB0aGUgdXBkYXRlZCBmaWxlcy4KKworLS1hc3N1bWUtdW5jaGFuZ2VkOjoKKy0tbm8tYXNzdW1lLXVuY2hhbmdlZDo6CisJV2hlbiB0aGVzZSBmbGFncyBhcmUgc3BlY2lmaWVkLCB0aGUgb2JqZWN0IG5hbWVzIHJlY29yZGVkCisJZm9yIHRoZSBwYXRocyBhcmUgbm90IHVwZGF0ZWQuICBJbnN0ZWFkLCB0aGVzZSBvcHRpb25zCisJc2V0IGFuZCB1bnNldCB0aGUgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCBmb3IgdGhlCisJcGF0aHMuICBXaGVuIHRoZSAiYXNzdW1lIHVuY2hhbmdlZCIgYml0IGlzIG9uLCBnaXQgc3RvcHMKKwljaGVja2luZyB0aGUgd29ya2luZyB0cmVlIGZpbGVzIGZvciBwb3NzaWJsZQorCW1vZGlmaWNhdGlvbnMsIHNvIHlvdSBuZWVkIHRvIG1hbnVhbGx5IHVuc2V0IHRoZSBiaXQgdG8KKwl0ZWxsIGdpdCB3aGVuIHlvdSBjaGFuZ2UgdGhlIHdvcmtpbmcgdHJlZSBmaWxlLiBUaGlzIGlzCisJc29tZXRpbWVzIGhlbHBmdWwgd2hlbiB3b3JraW5nIHdpdGggYSBiaWcgcHJvamVjdCBvbiBhCisJZmlsZXN5c3RlbSB0aGF0IGhhcyB2ZXJ5IHNsb3cgbHN0YXQoMikgc3lzdGVtIGNhbGwKKwkoZS5nLiBjaWZzKS4KKysKK1RoaXMgb3B0aW9uIGNhbiBiZSBhbHNvIHVzZWQgYXMgYSBjb2Fyc2UgZmlsZS1sZXZlbCBtZWNoYW5pc20KK3RvIGlnbm9yZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHRyYWNrZWQgZmlsZXMgKGFraW4gdG8gd2hhdAorYC5naXRpZ25vcmVgIGRvZXMgZm9yIHVudHJhY2tlZCBmaWxlcykuCitHaXQgd2lsbCBmYWlsIChncmFjZWZ1bGx5KSBpbiBjYXNlIGl0IG5lZWRzIHRvIG1vZGlmeSB0aGlzIGZpbGUKK2luIHRoZSBpbmRleCBlLmcuIHdoZW4gbWVyZ2luZyBpbiBhIGNvbW1pdDsKK3RodXMsIGluIGNhc2UgdGhlIGFzc3VtZWQtdW50cmFja2VkIGZpbGUgaXMgY2hhbmdlZCB1cHN0cmVhbSwKK3lvdSB3aWxsIG5lZWQgdG8gaGFuZGxlIHRoZSBzaXR1YXRpb24gbWFudWFsbHkuCisKKy0tcmVhbGx5LXJlZnJlc2g6OgorCUxpa2UgJy0tcmVmcmVzaCcsIGJ1dCBjaGVja3Mgc3RhdCBpbmZvcm1hdGlvbiB1bmNvbmRpdGlvbmFsbHksCisJd2l0aG91dCByZWdhcmQgdG8gdGhlICJhc3N1bWUgdW5jaGFuZ2VkIiBzZXR0aW5nLgorCistLXNraXAtd29ya3RyZWU6OgorLS1uby1za2lwLXdvcmt0cmVlOjoKKwlXaGVuIG9uZSBvZiB0aGVzZSBmbGFncyBpcyBzcGVjaWZpZWQsIHRoZSBvYmplY3QgbmFtZSByZWNvcmRlZAorCWZvciB0aGUgcGF0aHMgYXJlIG5vdCB1cGRhdGVkLiBJbnN0ZWFkLCB0aGVzZSBvcHRpb25zCisJc2V0IGFuZCB1bnNldCB0aGUgInNraXAtd29ya3RyZWUiIGJpdCBmb3IgdGhlIHBhdGhzLiBTZWUKKwlzZWN0aW9uICJTa2lwLXdvcmt0cmVlIGJpdCIgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKy1nOjoKKy0tYWdhaW46OgorCVJ1bnMgJ2dpdCB1cGRhdGUtaW5kZXgnIGl0c2VsZiBvbiB0aGUgcGF0aHMgd2hvc2UgaW5kZXgKKwllbnRyaWVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aG9zZSBmcm9tIHRoZSBgSEVBRGAgY29tbWl0LgorCistLXVucmVzb2x2ZTo6CisJUmVzdG9yZXMgdGhlICd1bm1lcmdlZCcgb3IgJ25lZWRzIHVwZGF0aW5nJyBzdGF0ZSBvZiBhCisJZmlsZSBkdXJpbmcgYSBtZXJnZSBpZiBpdCB3YXMgY2xlYXJlZCBieSBhY2NpZGVudC4KKworLS1pbmZvLW9ubHk6OgorCURvIG5vdCBjcmVhdGUgb2JqZWN0cyBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIGZvciBhbGwKKwk8ZmlsZT4gYXJndW1lbnRzIHRoYXQgZm9sbG93IHRoaXMgZmxhZzsganVzdCBpbnNlcnQKKwl0aGVpciBvYmplY3QgSURzIGludG8gdGhlIGluZGV4LgorCistLWZvcmNlLXJlbW92ZTo6CisJUmVtb3ZlIHRoZSBmaWxlIGZyb20gdGhlIGluZGV4IGV2ZW4gd2hlbiB0aGUgd29ya2luZyBkaXJlY3RvcnkKKwlzdGlsbCBoYXMgc3VjaCBhIGZpbGUuIChJbXBsaWVzIC0tcmVtb3ZlLikKKworLS1yZXBsYWNlOjoKKwlCeSBkZWZhdWx0LCB3aGVuIGEgZmlsZSBgcGF0aGAgZXhpc3RzIGluIHRoZSBpbmRleCwKKwknZ2l0IHVwZGF0ZS1pbmRleCcgcmVmdXNlcyBhbiBhdHRlbXB0IHRvIGFkZCBgcGF0aC9maWxlYC4KKwlTaW1pbGFybHkgaWYgYSBmaWxlIGBwYXRoL2ZpbGVgIGV4aXN0cywgYSBmaWxlIGBwYXRoYAorCWNhbm5vdCBiZSBhZGRlZC4gIFdpdGggLS1yZXBsYWNlIGZsYWcsIGV4aXN0aW5nIGVudHJpZXMKKwl0aGF0IGNvbmZsaWN0IHdpdGggdGhlIGVudHJ5IGJlaW5nIGFkZGVkIGFyZQorCWF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB3aXRoIHdhcm5pbmcgbWVzc2FnZXMuCisKKy0tc3RkaW46OgorCUluc3RlYWQgb2YgdGFraW5nIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLAorCXJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gIFBhdGhzIGFyZQorCXNlcGFyYXRlZCBieSBMRiAoaS5lLiBvbmUgcGF0aCBwZXIgbGluZSkgYnkgZGVmYXVsdC4KKworLS12ZXJib3NlOjoKKyAgICAgICAgUmVwb3J0IHdoYXQgaXMgYmVpbmcgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSBpbmRleC4KKworLS1pbmRleC12ZXJzaW9uIDxuPjo6CisJV3JpdGUgdGhlIHJlc3VsdGluZyBpbmRleCBvdXQgaW4gdGhlIG5hbWVkIG9uLWRpc2sgZm9ybWF0IHZlcnNpb24uCisJVGhlIGN1cnJlbnQgZGVmYXVsdCB2ZXJzaW9uIGlzIDIuCisKKy16OjoKKwlPbmx5IG1lYW5pbmdmdWwgd2l0aCBgLS1zdGRpbmAgb3IgYC0taW5kZXgtaW5mb2A7IHBhdGhzIGFyZQorCXNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBMRi4KKworXC0tOjoKKwlEbyBub3QgaW50ZXJwcmV0IGFueSBtb3JlIGFyZ3VtZW50cyBhcyBvcHRpb25zLgorCis8ZmlsZT46OgorCUZpbGVzIHRvIGFjdCBvbi4KKwlOb3RlIHRoYXQgZmlsZXMgYmVnaW5uaW5nIHdpdGggJy4nIGFyZSBkaXNjYXJkZWQuIFRoaXMgaW5jbHVkZXMKKwlgLi9maWxlYCBhbmQgYGRpci8uL2ZpbGVgLiBJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzLCB0aGVuIHVzZQorCWNsZWFuZXIgbmFtZXMuCisJVGhlIHNhbWUgYXBwbGllcyB0byBkaXJlY3RvcmllcyBlbmRpbmcgJy8nIGFuZCBwYXRocyB3aXRoICcvLycKKworVXNpbmcgLS1yZWZyZXNoCistLS0tLS0tLS0tLS0tLS0KKyctLXJlZnJlc2gnIGRvZXMgbm90IGNhbGN1bGF0ZSBhIG5ldyBzaGExIGZpbGUgb3IgYnJpbmcgdGhlIGluZGV4Cit1cC10by1kYXRlIGZvciBtb2RlL2NvbnRlbnQgY2hhbmdlcy4gQnV0IHdoYXQgaXQgKmRvZXMqIGRvIGlzIHRvCisicmUtbWF0Y2giIHRoZSBzdGF0IGluZm9ybWF0aW9uIG9mIGEgZmlsZSB3aXRoIHRoZSBpbmRleCwgc28gdGhhdCB5b3UKK2NhbiByZWZyZXNoIHRoZSBpbmRleCBmb3IgYSBmaWxlIHRoYXQgaGFzbid0IGJlZW4gY2hhbmdlZCBidXQgd2hlcmUKK3RoZSBzdGF0IGVudHJ5IGlzIG91dCBvZiBkYXRlLgorCitGb3IgZXhhbXBsZSwgeW91J2Qgd2FudCB0byBkbyB0aGlzIGFmdGVyIGRvaW5nIGEgJ2dpdCByZWFkLXRyZWUnLCB0byBsaW5rCit1cCB0aGUgc3RhdCBpbmRleCBkZXRhaWxzIHdpdGggdGhlIHByb3BlciBmaWxlcy4KKworVXNpbmcgLS1jYWNoZWluZm8gb3IgLS1pbmZvLW9ubHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisnLS1jYWNoZWluZm8nIGlzIHVzZWQgdG8gcmVnaXN0ZXIgYSBmaWxlIHRoYXQgaXMgbm90IGluIHRoZQorY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIFRoaXMgaXMgdXNlZnVsIGZvciBtaW5pbXVtLWNoZWNrb3V0CittZXJnaW5nLgorCitUbyBwcmV0ZW5kIHlvdSBoYXZlIGEgZmlsZSB3aXRoIG1vZGUgYW5kIHNoYTEgYXQgcGF0aCwgc2F5OgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gbW9kZSBzaGExIHBhdGgKKy0tLS0tLS0tLS0tLS0tLS0KKworJy0taW5mby1vbmx5JyBpcyB1c2VkIHRvIHJlZ2lzdGVyIGZpbGVzIHdpdGhvdXQgcGxhY2luZyB0aGVtIGluIHRoZSBvYmplY3QKK2RhdGFiYXNlLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHN0YXR1cy1vbmx5IHJlcG9zaXRvcmllcy4KKworQm90aCAnLS1jYWNoZWluZm8nIGFuZCAnLS1pbmZvLW9ubHknIGJlaGF2ZSBzaW1pbGFybHk6IHRoZSBpbmRleCBpcyB1cGRhdGVkCitidXQgdGhlIG9iamVjdCBkYXRhYmFzZSBpc24ndC4gICctLWNhY2hlaW5mbycgaXMgdXNlZnVsIHdoZW4gdGhlIG9iamVjdCBpcworaW4gdGhlIGRhdGFiYXNlIGJ1dCB0aGUgZmlsZSBpc24ndCBhdmFpbGFibGUgbG9jYWxseS4gICctLWluZm8tb25seScgaXMKK3VzZWZ1bCB3aGVuIHRoZSBmaWxlIGlzIGF2YWlsYWJsZSwgYnV0IHlvdSBkbyBub3Qgd2lzaCB0byB1cGRhdGUgdGhlCitvYmplY3QgZGF0YWJhc2UuCisKKworVXNpbmcgLS1pbmRleC1pbmZvCistLS0tLS0tLS0tLS0tLS0tLS0KKworYC0taW5kZXgtaW5mb2AgaXMgYSBtb3JlIHBvd2VyZnVsIG1lY2hhbmlzbSB0aGF0IGxldHMgeW91IGZlZWQKK211bHRpcGxlIGVudHJ5IGRlZmluaXRpb25zIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBhbmQgZGVzaWduZWQKK3NwZWNpZmljYWxseSBmb3Igc2NyaXB0cy4gIEl0IGNhbiB0YWtlIGlucHV0cyBvZiB0aHJlZSBmb3JtYXRzOgorCisgICAgLiBtb2RlICAgICAgICAgU1Agc2hhMSAgICAgICAgICBUQUIgcGF0aAorKworVGhlIGZpcnN0IGZvcm1hdCBpcyB3aGF0ICJnaXQtYXBwbHkgLS1pbmRleC1pbmZvIgorcmVwb3J0cywgYW5kIHVzZWQgdG8gcmVjb25zdHJ1Y3QgYSBwYXJ0aWFsIHRyZWUKK3RoYXQgaXMgdXNlZCBmb3IgcGhvbnkgbWVyZ2UgYmFzZSB0cmVlIHdoZW4gZmFsbGluZworYmFjayBvbiAzLXdheSBtZXJnZS4KKworICAgIC4gbW9kZSBTUCB0eXBlIFNQIHNoYTEgICAgICAgICAgVEFCIHBhdGgKKysKK1RoZSBzZWNvbmQgZm9ybWF0IGlzIHRvIHN0dWZmICdnaXQgbHMtdHJlZScgb3V0cHV0CitpbnRvIHRoZSBpbmRleCBmaWxlLgorCisgICAgLiBtb2RlICAgICAgICAgU1Agc2hhMSBTUCBzdGFnZSBUQUIgcGF0aAorKworVGhpcyBmb3JtYXQgaXMgdG8gcHV0IGhpZ2hlciBvcmRlciBzdGFnZXMgaW50byB0aGUKK2luZGV4IGZpbGUgYW5kIG1hdGNoZXMgJ2dpdCBscy1maWxlcyAtLXN0YWdlJyBvdXRwdXQuCisKK1RvIHBsYWNlIGEgaGlnaGVyIHN0YWdlIGVudHJ5IHRvIHRoZSBpbmRleCwgdGhlIHBhdGggc2hvdWxkCitmaXJzdCBiZSByZW1vdmVkIGJ5IGZlZWRpbmcgYSBtb2RlPTAgZW50cnkgZm9yIHRoZSBwYXRoLCBhbmQKK3RoZW4gZmVlZGluZyBuZWNlc3NhcnkgaW5wdXQgbGluZXMgaW4gdGhlIHRoaXJkIGZvcm1hdC4KKworRm9yIGV4YW1wbGUsIHN0YXJ0aW5nIHdpdGggdGhpcyBpbmRleDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtcworMTAwNjQ0IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMCAgICAgICBmcm90egorLS0tLS0tLS0tLS0tCisKK3lvdSBjYW4gZmVlZCB0aGUgZm9sbG93aW5nIGlucHV0IHRvIGAtLWluZGV4LWluZm9gOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8KKzAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAlmcm90egorMTAwNjQ0IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMQlmcm90egorMTAwNzU1IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMglmcm90egorLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCBsaW5lIG9mIHRoZSBpbnB1dCBmZWVkcyAwIGFzIHRoZSBtb2RlIHRvIHJlbW92ZSB0aGUKK3BhdGg7IHRoZSBTSEExIGRvZXMgbm90IG1hdHRlciBhcyBsb25nIGFzIGl0IGlzIHdlbGwgZm9ybWF0dGVkLgorVGhlbiB0aGUgc2Vjb25kIGFuZCB0aGlyZCBsaW5lIGZlZWRzIHN0YWdlIDEgYW5kIHN0YWdlIDIgZW50cmllcworZm9yIHRoYXQgcGF0aC4gIEFmdGVyIHRoZSBhYm92ZSwgd2Ugd291bGQgZW5kIHVwIHdpdGggdGhpczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtcworMTAwNjQ0IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMQlmcm90egorMTAwNzU1IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMglmcm90egorLS0tLS0tLS0tLS0tCisKKworVXNpbmcgYGBhc3N1bWUgdW5jaGFuZ2VkJycgYml0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFueSBvcGVyYXRpb25zIGluIGdpdCBkZXBlbmQgb24geW91ciBmaWxlc3lzdGVtIHRvIGhhdmUgYW4KK2VmZmljaWVudCBgbHN0YXQoMilgIGltcGxlbWVudGF0aW9uLCBzbyB0aGF0IGBzdF9tdGltZWAKK2luZm9ybWF0aW9uIGZvciB3b3JraW5nIHRyZWUgZmlsZXMgY2FuIGJlIGNoZWFwbHkgY2hlY2tlZCB0byBzZWUKK2lmIHRoZSBmaWxlIGNvbnRlbnRzIGhhdmUgY2hhbmdlZCBmcm9tIHRoZSB2ZXJzaW9uIHJlY29yZGVkIGluCit0aGUgaW5kZXggZmlsZS4gIFVuZm9ydHVuYXRlbHksIHNvbWUgZmlsZXN5c3RlbXMgaGF2ZQoraW5lZmZpY2llbnQgYGxzdGF0KDIpYC4gIElmIHlvdXIgZmlsZXN5c3RlbSBpcyBvbmUgb2YgdGhlbSwgeW91CitjYW4gc2V0ICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXQgdG8gcGF0aHMgeW91IGhhdmUgbm90IGNoYW5nZWQgdG8KK2NhdXNlIGdpdCBub3QgdG8gZG8gdGhpcyBjaGVjay4gIE5vdGUgdGhhdCBzZXR0aW5nIHRoaXMgYml0IG9uIGEKK3BhdGggZG9lcyBub3QgbWVhbiBnaXQgd2lsbCBjaGVjayB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgdG8KK3NlZSBpZiBpdCBoYXMgY2hhbmdlZCAtLSBpdCBtYWtlcyBnaXQgdG8gb21pdCBhbnkgY2hlY2tpbmcgYW5kCithc3N1bWUgaXQgaGFzICpub3QqIGNoYW5nZWQuICBXaGVuIHlvdSBtYWtlIGNoYW5nZXMgdG8gd29ya2luZwordHJlZSBmaWxlcywgeW91IGhhdmUgdG8gZXhwbGljaXRseSB0ZWxsIGdpdCBhYm91dCBpdCBieSBkcm9wcGluZworImFzc3VtZSB1bmNoYW5nZWQiIGJpdCwgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB5b3UgbW9kaWZ5IHRoZW0uCisKK0luIG9yZGVyIHRvIHNldCAiYXNzdW1lIHVuY2hhbmdlZCIgYml0LCB1c2UgYC0tYXNzdW1lLXVuY2hhbmdlZGAKK29wdGlvbi4gIFRvIHVuc2V0LCB1c2UgYC0tbm8tYXNzdW1lLXVuY2hhbmdlZGAuIFRvIHNlZSB3aGljaCBmaWxlcworaGF2ZSB0aGUgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCBzZXQsIHVzZSBgZ2l0IGxzLWZpbGVzIC12YAorKHNlZSBsaW5rZ2l0OmdpdC1scy1maWxlc1sxXSkuCisKK1RoZSBjb21tYW5kIGxvb2tzIGF0IGBjb3JlLmlnbm9yZXN0YXRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBXaGVuCit0aGlzIGlzIHRydWUsIHBhdGhzIHVwZGF0ZWQgd2l0aCBgZ2l0IHVwZGF0ZS1pbmRleCBwYXRocy4uLmAgYW5kCitwYXRocyB1cGRhdGVkIHdpdGggb3RoZXIgZ2l0IGNvbW1hbmRzIHRoYXQgdXBkYXRlIGJvdGggaW5kZXggYW5kCit3b3JraW5nIHRyZWUgKGUuZy4gJ2dpdCBhcHBseSAtLWluZGV4JywgJ2dpdCBjaGVja291dC1pbmRleCAtdScsCithbmQgJ2dpdCByZWFkLXRyZWUgLXUnKSBhcmUgYXV0b21hdGljYWxseSBtYXJrZWQgYXMgImFzc3VtZQordW5jaGFuZ2VkIi4gIE5vdGUgdGhhdCAiYXNzdW1lIHVuY2hhbmdlZCIgYml0IGlzICpub3QqIHNldCBpZgorYGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoYCBmaW5kcyB0aGUgd29ya2luZyB0cmVlIGZpbGUgbWF0Y2hlcwordGhlIGluZGV4ICh1c2UgYGdpdCB1cGRhdGUtaW5kZXggLS1yZWFsbHktcmVmcmVzaGAgaWYgeW91IHdhbnQKK3RvIG1hcmsgdGhlbSBhcyAiYXNzdW1lIHVuY2hhbmdlZCIpLgorCisKK0V4YW1wbGVzCistLS0tLS0tLQorVG8gdXBkYXRlIGFuZCByZWZyZXNoIG9ubHkgdGhlIGZpbGVzIGFscmVhZHkgY2hlY2tlZCBvdXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC1uIC1mIC1hICYmIGdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKKy0tLS0tLS0tLS0tLS0tLS0KKworT24gYW4gaW5lZmZpY2llbnQgZmlsZXN5c3RlbSB3aXRoIGBjb3JlLmlnbm9yZXN0YXRgIHNldDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlYWxseS1yZWZyZXNoICAgICAgICAgICAgICA8MT4KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWFzc3VtZS11bmNoYW5nZWQgZm9vLmMgICA8Mj4KKyQgZ2l0IGRpZmYgLS1uYW1lLW9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mz4KKyQgZWRpdCBmb28uYworJCBnaXQgZGlmZiAtLW5hbWUtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw0PgorTSBmb28uYworJCBnaXQgdXBkYXRlLWluZGV4IGZvby5jICAgICAgICAgICAgICAgICAgICAgICAgIDw1PgorJCBnaXQgZGlmZiAtLW5hbWUtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw2PgorJCBlZGl0IGZvby5jCiskIGdpdCBkaWZmIC0tbmFtZS1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDc+CiskIGdpdCB1cGRhdGUtaW5kZXggLS1uby1hc3N1bWUtdW5jaGFuZ2VkIGZvby5jICAgPDg+CiskIGdpdCBkaWZmIC0tbmFtZS1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDk+CitNIGZvby5jCistLS0tLS0tLS0tLS0KKysKKzwxPiBmb3JjZXMgbHN0YXQoMikgdG8gc2V0ICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXRzIGZvciBwYXRocyB0aGF0IG1hdGNoIGluZGV4LgorPDI+IG1hcmsgdGhlIHBhdGggdG8gYmUgZWRpdGVkLgorPDM+IHRoaXMgZG9lcyBsc3RhdCgyKSBhbmQgZmluZHMgaW5kZXggbWF0Y2hlcyB0aGUgcGF0aC4KKzw0PiB0aGlzIGRvZXMgbHN0YXQoMikgYW5kIGZpbmRzIGluZGV4IGRvZXMgKm5vdCogbWF0Y2ggdGhlIHBhdGguCis8NT4gcmVnaXN0ZXJpbmcgdGhlIG5ldyB2ZXJzaW9uIHRvIGluZGV4IHNldHMgImFzc3VtZSB1bmNoYW5nZWQiIGJpdC4KKzw2PiBhbmQgaXQgaXMgYXNzdW1lZCB1bmNoYW5nZWQuCis8Nz4gZXZlbiBhZnRlciB5b3UgZWRpdCBpdC4KKzw4PiB5b3UgY2FuIHRlbGwgYWJvdXQgdGhlIGNoYW5nZSBhZnRlciB0aGUgZmFjdC4KKzw5PiBub3cgaXQgY2hlY2tzIHdpdGggbHN0YXQoMikgYW5kIGZpbmRzIGl0IGhhcyBiZWVuIGNoYW5nZWQuCisKKworU2tpcC13b3JrdHJlZSBiaXQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1NraXAtd29ya3RyZWUgYml0IGNhbiBiZSBkZWZpbmVkIGluIG9uZSAobG9uZykgc2VudGVuY2U6IFdoZW4gcmVhZGluZworYW4gZW50cnksIGlmIGl0IGlzIG1hcmtlZCBhcyBza2lwLXdvcmt0cmVlLCB0aGVuIEdpdCBwcmV0ZW5kcyBpdHMKK3dvcmtpbmcgZGlyZWN0b3J5IHZlcnNpb24gaXMgdXAgdG8gZGF0ZSBhbmQgcmVhZCB0aGUgaW5kZXggdmVyc2lvbgoraW5zdGVhZC4KKworVG8gZWxhYm9yYXRlLCAicmVhZGluZyIgbWVhbnMgY2hlY2tpbmcgZm9yIGZpbGUgZXhpc3RlbmNlLCByZWFkaW5nCitmaWxlIGF0dHJpYnV0ZXMgb3IgZmlsZSBjb250ZW50LiBUaGUgd29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBtYXkgYmUKK3ByZXNlbnQgb3IgYWJzZW50LiBJZiBwcmVzZW50LCBpdHMgY29udGVudCBtYXkgbWF0Y2ggYWdhaW5zdCB0aGUgaW5kZXgKK3ZlcnNpb24gb3Igbm90LiBXcml0aW5nIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzIGJpdCwgY29udGVudCBzYWZldHkKK2lzIHN0aWxsIGZpcnN0IHByaW9yaXR5LiBOb3RlIHRoYXQgR2l0IF9jYW5fIHVwZGF0ZSB3b3JraW5nIGRpcmVjdG9yeQorZmlsZSwgdGhhdCBpcyBtYXJrZWQgc2tpcC13b3JrdHJlZSwgaWYgaXQgaXMgc2FmZSB0byBkbyBzbyAoaS5lLgord29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBtYXRjaGVzIGluZGV4IHZlcnNpb24pCisKK0FsdGhvdWdoIHRoaXMgYml0IGxvb2tzIHNpbWlsYXIgdG8gYXNzdW1lLXVuY2hhbmdlZCBiaXQsIGl0cyBnb2FsIGlzCitkaWZmZXJlbnQgZnJvbSBhc3N1bWUtdW5jaGFuZ2VkIGJpdCdzLiBTa2lwLXdvcmt0cmVlIGFsc28gdGFrZXMKK3ByZWNlZGVuY2Ugb3ZlciBhc3N1bWUtdW5jaGFuZ2VkIGJpdCB3aGVuIGJvdGggYXJlIHNldC4KKworCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kIGhvbm9ycyBgY29yZS5maWxlbW9kZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIElmCit5b3VyIHJlcG9zaXRvcnkgaXMgb24gYSBmaWxlc3lzdGVtIHdob3NlIGV4ZWN1dGFibGUgYml0cyBhcmUKK3VucmVsaWFibGUsIHRoaXMgc2hvdWxkIGJlIHNldCB0byAnZmFsc2UnIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KK1RoaXMgY2F1c2VzIHRoZSBjb21tYW5kIHRvIGlnbm9yZSBkaWZmZXJlbmNlcyBpbiBmaWxlIG1vZGVzIHJlY29yZGVkCitpbiB0aGUgaW5kZXggYW5kIHRoZSBmaWxlIG1vZGUgb24gdGhlIGZpbGVzeXN0ZW0gaWYgdGhleSBkaWZmZXIgb25seSBvbgorZXhlY3V0YWJsZSBiaXQuICAgT24gc3VjaCBhbiB1bmZvcnR1bmF0ZSBmaWxlc3lzdGVtLCB5b3UgbWF5CituZWVkIHRvIHVzZSAnZ2l0IHVwZGF0ZS1pbmRleCAtLWNobW9kPScuCisKK1F1aXRlIHNpbWlsYXJseSwgaWYgYGNvcmUuc3ltbGlua3NgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgc2V0Cit0byAnZmFsc2UnIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKSwgc3ltYm9saWMgbGlua3MgYXJlIGNoZWNrZWQgb3V0CithcyBwbGFpbiBmaWxlcywgYW5kIHRoaXMgY29tbWFuZCBkb2VzIG5vdCBtb2RpZnkgYSByZWNvcmRlZCBmaWxlIG1vZGUKK2Zyb20gc3ltYm9saWMgbGluayB0byByZWd1bGFyIGZpbGUuCisKK1RoZSBjb21tYW5kIGxvb2tzIGF0IGBjb3JlLmlnbm9yZXN0YXRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBTZWUKKydVc2luZyAiYXNzdW1lIHVuY2hhbmdlZCIgYml0JyBzZWN0aW9uIGFib3ZlLgorCitUaGUgY29tbWFuZCBhbHNvIGxvb2tzIGF0IGBjb3JlLnRydXN0Y3RpbWVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCitJdCBjYW4gYmUgdXNlZnVsIHdoZW4gdGhlIGlub2RlIGNoYW5nZSB0aW1lIGlzIHJlZ3VsYXJseSBtb2RpZmllZCBieQorc29tZXRoaW5nIG91dHNpZGUgR2l0IChmaWxlIHN5c3RlbSBjcmF3bGVycyBhbmQgYmFja3VwIHN5c3RlbXMgdXNlCitjdGltZSBmb3IgbWFya2luZyBmaWxlcyBwcm9jZXNzZWQpIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSwKK2xpbmtnaXQ6Z2l0LWFkZFsxXSwKK2xpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtcmVmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzc3YTM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXJlZi50eHQKQEAgLTAsMCArMSw5MSBAQAorZ2l0LXVwZGF0ZS1yZWYoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC11cGRhdGUtcmVmIC0gVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB1cGRhdGUtcmVmJyBbLW0gPHJlYXNvbj5dICgtZCA8cmVmPiBbPG9sZHZhbHVlPl0gfCBbLS1uby1kZXJlZl0gPHJlZj4gPG5ld3ZhbHVlPiBbPG9sZHZhbHVlPl0pCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorR2l2ZW4gdHdvIGFyZ3VtZW50cywgc3RvcmVzIHRoZSA8bmV3dmFsdWU+IGluIHRoZSA8cmVmPiwgcG9zc2libHkKK2RlcmVmZXJlbmNpbmcgdGhlIHN5bWJvbGljIHJlZnMuICBFLmcuIGBnaXQgdXBkYXRlLXJlZiBIRUFECis8bmV3dmFsdWU+YCB1cGRhdGVzIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIHRvIHRoZSBuZXcgb2JqZWN0LgorCitHaXZlbiB0aHJlZSBhcmd1bWVudHMsIHN0b3JlcyB0aGUgPG5ld3ZhbHVlPiBpbiB0aGUgPHJlZj4sCitwb3NzaWJseSBkZXJlZmVyZW5jaW5nIHRoZSBzeW1ib2xpYyByZWZzLCBhZnRlciB2ZXJpZnlpbmcgdGhhdAordGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIDxyZWY+IG1hdGNoZXMgPG9sZHZhbHVlPi4KK0UuZy4gYGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyIDxuZXd2YWx1ZT4gPG9sZHZhbHVlPmAKK3VwZGF0ZXMgdGhlIG1hc3RlciBicmFuY2ggaGVhZCB0byA8bmV3dmFsdWU+IG9ubHkgaWYgaXRzIGN1cnJlbnQKK3ZhbHVlIGlzIDxvbGR2YWx1ZT4uICBZb3UgY2FuIHNwZWNpZnkgNDAgIjAiIG9yIGFuIGVtcHR5IHN0cmluZworYXMgPG9sZHZhbHVlPiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVmIHlvdSBhcmUgY3JlYXRpbmcgZG9lcworbm90IGV4aXN0LgorCitJdCBhbHNvIGFsbG93cyBhICJyZWYiIGZpbGUgdG8gYmUgYSBzeW1ib2xpYyBwb2ludGVyIHRvIGFub3RoZXIKK3JlZiBmaWxlIGJ5IHN0YXJ0aW5nIHdpdGggdGhlIGZvdXItYnl0ZSBoZWFkZXIgc2VxdWVuY2Ugb2YKKyJyZWY6Ii4KKworTW9yZSBpbXBvcnRhbnRseSwgaXQgYWxsb3dzIHRoZSB1cGRhdGUgb2YgYSByZWYgZmlsZSB0byBmb2xsb3cKK3RoZXNlIHN5bWJvbGljIHBvaW50ZXJzLCB3aGV0aGVyIHRoZXkgYXJlIHN5bWxpbmtzIG9yIHRoZXNlCisicmVndWxhciBmaWxlIHN5bWJvbGljIHJlZnMiLiAgSXQgZm9sbG93cyAqcmVhbCogc3ltbGlua3Mgb25seQoraWYgdGhleSBzdGFydCB3aXRoICJyZWZzLyI6IG90aGVyd2lzZSBpdCB3aWxsIGp1c3QgdHJ5IHRvIHJlYWQKK3RoZW0gYW5kIHVwZGF0ZSB0aGVtIGFzIGEgcmVndWxhciBmaWxlIChpLmUuIGl0IHdpbGwgYWxsb3cgdGhlCitmaWxlc3lzdGVtIHRvIGZvbGxvdyB0aGVtLCBidXQgd2lsbCBvdmVyd3JpdGUgc3VjaCBhIHN5bWxpbmsgdG8KK3NvbWV3aGVyZSBlbHNlIHdpdGggYSByZWd1bGFyIGZpbGVuYW1lKS4KKworSWYgLS1uby1kZXJlZiBpcyBnaXZlbiwgPHJlZj4gaXRzZWxmIGlzIG92ZXJ3cml0dGVuLCByYXRoZXIgdGhhbgordGhlIHJlc3VsdCBvZiBmb2xsb3dpbmcgdGhlIHN5bWJvbGljIHBvaW50ZXJzLgorCitJbiBnZW5lcmFsLCB1c2luZworCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAiJGhlYWQiCisKK3Nob3VsZCBiZSBhIF9sb3RfIHNhZmVyIHRoYW4gZG9pbmcKKworCWVjaG8gIiRoZWFkIiA+ICIkR0lUX0RJUi9IRUFEIgorCitib3RoIGZyb20gYSBzeW1saW5rIGZvbGxvd2luZyBzdGFuZHBvaW50ICphbmQqIGFuIGVycm9yIGNoZWNraW5nCitzdGFuZHBvaW50LiAgVGhlICJyZWZzLyIgcnVsZSBmb3Igc3ltbGlua3MgbWVhbnMgdGhhdCBzeW1saW5rcwordGhhdCBwb2ludCB0byAib3V0c2lkZSIgdGhlIHRyZWUgYXJlIHNhZmU6IHRoZXknbGwgYmUgZm9sbG93ZWQKK2ZvciByZWFkaW5nIGJ1dCBub3QgZm9yIHdyaXRpbmcgKHNvIHdlJ2xsIG5ldmVyIHdyaXRlIHRocm91Z2ggYQorcmVmIHN5bWxpbmsgdG8gc29tZSBvdGhlciB0cmVlLCBpZiB5b3UgaGF2ZSBjb3BpZWQgYSB3aG9sZQorYXJjaGl2ZSBieSBjcmVhdGluZyBhIHN5bWxpbmsgdHJlZSkuCisKK1dpdGggYC1kYCBmbGFnLCBpdCBkZWxldGVzIHRoZSBuYW1lZCA8cmVmPiBhZnRlciB2ZXJpZnlpbmcgaXQKK3N0aWxsIGNvbnRhaW5zIDxvbGR2YWx1ZT4uCisKKworTG9nZ2luZyBVcGRhdGVzCistLS0tLS0tLS0tLS0tLS0KK0lmIGNvbmZpZyBwYXJhbWV0ZXIgImNvcmUubG9nQWxsUmVmVXBkYXRlcyIgaXMgdHJ1ZSBhbmQgdGhlIHJlZiBpcyBvbmUgdW5kZXIKKyJyZWZzL2hlYWRzLyIsICJyZWZzL3JlbW90ZXMvIiwgInJlZnMvbm90ZXMvIiwgb3IgdGhlIHN5bWJvbGljIHJlZiBIRUFEOyBvcgordGhlIGZpbGUgIiRHSVRfRElSL2xvZ3MvPHJlZj4iIGV4aXN0cyB0aGVuIGBnaXQgdXBkYXRlLXJlZmAgd2lsbCBhcHBlbmQKK2EgbGluZSB0byB0aGUgbG9nIGZpbGUgIiRHSVRfRElSL2xvZ3MvPHJlZj4iIChkZXJlZmVyZW5jaW5nIGFsbAorc3ltYm9saWMgcmVmcyBiZWZvcmUgY3JlYXRpbmcgdGhlIGxvZyBuYW1lKSBkZXNjcmliaW5nIHRoZSBjaGFuZ2UKK2luIHJlZiB2YWx1ZS4gIExvZyBsaW5lcyBhcmUgZm9ybWF0dGVkIGFzOgorCisgICAgLiBvbGRzaGExIFNQIG5ld3NoYTEgU1AgY29tbWl0dGVyIExGCisrCitXaGVyZSAib2xkc2hhMSIgaXMgdGhlIDQwIGNoYXJhY3RlciBoZXhhZGVjaW1hbCB2YWx1ZSBwcmV2aW91c2x5CitzdG9yZWQgaW4gPHJlZj4sICJuZXdzaGExIiBpcyB0aGUgNDAgY2hhcmFjdGVyIGhleGFkZWNpbWFsIHZhbHVlIG9mCis8bmV3dmFsdWU+IGFuZCAiY29tbWl0dGVyIiBpcyB0aGUgY29tbWl0dGVyJ3MgbmFtZSwgZW1haWwgYWRkcmVzcworYW5kIGRhdGUgaW4gdGhlIHN0YW5kYXJkIEdJVCBjb21taXR0ZXIgaWRlbnQgZm9ybWF0LgorCitPcHRpb25hbGx5IHdpdGggLW06CisKKyAgICAuIG9sZHNoYTEgU1AgbmV3c2hhMSBTUCBjb21taXR0ZXIgVEFCIG1lc3NhZ2UgTEYKKysKK1doZXJlIGFsbCBmaWVsZHMgYXJlIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgIm1lc3NhZ2UiIGlzIHRoZQordmFsdWUgc3VwcGxpZWQgdG8gdGhlIC1tIG9wdGlvbi4KKworQW4gdXBkYXRlIHdpbGwgZmFpbCAod2l0aG91dCBjaGFuZ2luZyA8cmVmPikgaWYgdGhlIGN1cnJlbnQgdXNlciBpcwordW5hYmxlIHRvIGNyZWF0ZSBhIG5ldyBsb2cgZmlsZSwgYXBwZW5kIHRvIHRoZSBleGlzdGluZyBsb2cgZmlsZQorb3IgZG9lcyBub3QgaGF2ZSBjb21taXR0ZXIgaW5mb3JtYXRpb24gYXZhaWxhYmxlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGUzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0CkBAIC0wLDAgKzEsNDQgQEAKK2dpdC11cGRhdGUtc2VydmVyLWluZm8oMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyAtIFVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbycgWy0tZm9yY2VdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSBkdW1iIHNlcnZlciB0aGF0IGRvZXMgbm90IGRvIG9uLXRoZS1mbHkgcGFjayBnZW5lcmF0aW9ucyBtdXN0CitoYXZlIHNvbWUgYXV4aWxpYXJ5IGluZm9ybWF0aW9uIGZpbGVzIGluICRHSVRfRElSL2luZm8gYW5kCiskR0lUX09CSkVDVF9ESVJFQ1RPUlkvaW5mbyBkaXJlY3RvcmllcyB0byBoZWxwIGNsaWVudHMgZGlzY292ZXIKK3doYXQgcmVmZXJlbmNlcyBhbmQgcGFja3MgdGhlIHNlcnZlciBoYXMuICBUaGlzIGNvbW1hbmQKK2dlbmVyYXRlcyBzdWNoIGF1eGlsaWFyeSBmaWxlcy4KKworCitPUFRJT05TCistLS0tLS0tCisKKy1mOjoKKy0tZm9yY2U6OgorCVVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2guCisKKworT1VUUFVUCistLS0tLS0KKworQ3VycmVudGx5IHRoZSBjb21tYW5kIHVwZGF0ZXMgdGhlIGZvbGxvd2luZyBmaWxlcy4gIFBsZWFzZSBzZWUKK2xpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0gZm9yIGRlc2NyaXB0aW9uIG9mCit3aGF0IHRoZXkgYXJlIGZvcjoKKworKiBvYmplY3RzL2luZm8vcGFja3MKKworKiBpbmZvL3JlZnMKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1MmQzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1hcmNoaXZlLnR4dApAQCAtMCwwICsxLDMwIEBACitnaXQtdXBsb2FkLWFyY2hpdmUoMSkKKz09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC11cGxvYWQtYXJjaGl2ZSAtIFNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHVwbG9hZC1hcmNoaXZlJyA8ZGlyZWN0b3J5PgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ludm9rZWQgYnkgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlJyBhbmQgc2VuZHMgYSBnZW5lcmF0ZWQgYXJjaGl2ZSB0byB0aGUKK290aGVyIGVuZCBvdmVyIHRoZSBnaXQgcHJvdG9jb2wuCisKK1RoaXMgY29tbWFuZCBpcyB1c3VhbGx5IG5vdCBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBlbmQgdXNlci4gIFRoZSBVSQorZm9yIHRoZSBwcm90b2NvbCBpcyBvbiB0aGUgJ2dpdCBhcmNoaXZlJyBzaWRlLCBhbmQgdGhlIHByb2dyYW0gcGFpcgoraXMgbWVhbnQgdG8gYmUgdXNlZCB0byBnZXQgYW4gYXJjaGl2ZSBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKzxkaXJlY3Rvcnk+OjoKKwlUaGUgcmVwb3NpdG9yeSB0byBnZXQgYSB0YXIgYXJjaGl2ZSBmcm9tLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWYxNjA4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLXBhY2sudHh0CkBAIC0wLDAgKzEsNDMgQEAKK2dpdC11cGxvYWQtcGFjaygxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC11cGxvYWQtcGFjayAtIFNlbmQgb2JqZWN0cyBwYWNrZWQgYmFjayB0byBnaXQtZmV0Y2gtcGFjaworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdC11cGxvYWQtcGFjaycgWy0tc3RyaWN0XSBbLS10aW1lb3V0PTxuPl0gPGRpcmVjdG9yeT4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbnZva2VkIGJ5ICdnaXQgZmV0Y2gtcGFjaycsIGxlYXJucyB3aGF0CitvYmplY3RzIHRoZSBvdGhlciBzaWRlIGlzIG1pc3NpbmcsIGFuZCBzZW5kcyB0aGVtIGFmdGVyIHBhY2tpbmcuCisKK1RoaXMgY29tbWFuZCBpcyB1c3VhbGx5IG5vdCBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBlbmQgdXNlci4KK1RoZSBVSSBmb3IgdGhlIHByb3RvY29sIGlzIG9uIHRoZSAnZ2l0IGZldGNoLXBhY2snIHNpZGUsIGFuZCB0aGUKK3Byb2dyYW0gcGFpciBpcyBtZWFudCB0byBiZSB1c2VkIHRvIHB1bGwgdXBkYXRlcyBmcm9tIGEgcmVtb3RlCityZXBvc2l0b3J5LiAgRm9yIHB1c2ggb3BlcmF0aW9ucywgc2VlICdnaXQgc2VuZC1wYWNrJy4KKworCitPUFRJT05TCistLS0tLS0tCisKKy0tc3RyaWN0OjoKKwlEbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIGdpdCBkaXJlY3RvcnkuCisKKy0tdGltZW91dD08bj46OgorCUludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5LgorCis8ZGlyZWN0b3J5Pjo6CisJVGhlIHJlcG9zaXRvcnkgdG8gc3luYyBmcm9tLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0bmFtZXNwYWNlc1s3XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXZhci50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZWRmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0CkBAIC0wLDAgKzEsNzAgQEAKK2dpdC12YXIoMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXZhciAtIFNob3cgYSBnaXQgbG9naWNhbCB2YXJpYWJsZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB2YXInICggLWwgfCA8dmFyaWFibGU+ICkKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitQcmludHMgYSBnaXQgbG9naWNhbCB2YXJpYWJsZS4KKworT1BUSU9OUworLS0tLS0tLQorLWw6OgorCUNhdXNlIHRoZSBsb2dpY2FsIHZhcmlhYmxlcyB0byBiZSBsaXN0ZWQuIEluIGFkZGl0aW9uLCBhbGwgdGhlCisJdmFyaWFibGVzIG9mIHRoZSBnaXQgY29uZmlndXJhdGlvbiBmaWxlIC5naXQvY29uZmlnIGFyZSBsaXN0ZWQKKwlhcyB3ZWxsLiAoSG93ZXZlciwgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGxpc3RpbmcgZnVuY3Rpb25hbGl0eQorCWlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYGdpdCBjb25maWcgLWxgLikKKworRVhBTVBMRQorLS0tLS0tLS0KKwkkIGdpdCB2YXIgR0lUX0FVVEhPUl9JREVOVAorCUVyaWMgVy4gQmllZGVybWFuIDxlYmllZGVybUBsbnhpLmNvbT4gMTEyMTIyMzI3OCAtMDYwMAorCisKK1ZBUklBQkxFUworLS0tLS0tLS0tLQorR0lUX0FVVEhPUl9JREVOVDo6CisgICAgVGhlIGF1dGhvciBvZiBhIHBpZWNlIG9mIGNvZGUuCisKK0dJVF9DT01NSVRURVJfSURFTlQ6OgorICAgIFRoZSBwZXJzb24gd2hvIHB1dCBhIHBpZWNlIG9mIGNvZGUgaW50byBnaXQuCisKK0dJVF9FRElUT1I6OgorICAgIFRleHQgZWRpdG9yIGZvciB1c2UgYnkgZ2l0IGNvbW1hbmRzLiAgVGhlIHZhbHVlIGlzIG1lYW50IHRvIGJlCisgICAgaW50ZXJwcmV0ZWQgYnkgdGhlIHNoZWxsIHdoZW4gaXQgaXMgdXNlZC4gIEV4YW1wbGVzOiBgfi9iaW4vdmlgLAorICAgIGAkU09NRV9FTlZJUk9OTUVOVF9WQVJJQUJMRWAsIGAiQzpcUHJvZ3JhbSBGaWxlc1xWaW1cZ3ZpbS5leGUiCisgICAgLS1ub2ZvcmtgLiAgVGhlIG9yZGVyIG9mIHByZWZlcmVuY2UgaXMgdGhlIGAkR0lUX0VESVRPUmAKKyAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlbiBgY29yZS5lZGl0b3JgIGNvbmZpZ3VyYXRpb24sIHRoZW4KKyAgICBgJFZJU1VBTGAsIHRoZW4gYCRFRElUT1JgLCBhbmQgdGhlbiB0aGUgZGVmYXVsdCBjaG9zZW4gYXQgY29tcGlsZQorICAgIHRpbWUsIHdoaWNoIGlzIHVzdWFsbHkgJ3ZpJy4KK2lmZGVmOjpnaXQtZGVmYXVsdC1lZGl0b3JbXQorICAgIFRoZSBidWlsZCB5b3UgYXJlIHVzaW5nIGNob3NlICd7Z2l0LWRlZmF1bHQtZWRpdG9yfScgYXMgdGhlIGRlZmF1bHQuCitlbmRpZjo6Z2l0LWRlZmF1bHQtZWRpdG9yW10KKworR0lUX1BBR0VSOjoKKyAgICBUZXh0IHZpZXdlciBmb3IgdXNlIGJ5IGdpdCBjb21tYW5kcyAoZS5nLiwgJ2xlc3MnKS4gIFRoZSB2YWx1ZQorICAgIGlzIG1lYW50IHRvIGJlIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbC4gIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlCisgICAgaXMgdGhlIGAkR0lUX1BBR0VSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlbiBgY29yZS5wYWdlcmAKKyAgICBjb25maWd1cmF0aW9uLCB0aGVuIGAkUEFHRVJgLCBhbmQgdGhlbiB0aGUgZGVmYXVsdCBjaG9zZW4gYXQKKyAgICBjb21waWxlIHRpbWUgKHVzdWFsbHkgJ2xlc3MnKS4KK2lmZGVmOjpnaXQtZGVmYXVsdC1wYWdlcltdCisgICAgVGhlIGJ1aWxkIHlvdSBhcmUgdXNpbmcgY2hvc2UgJ3tnaXQtZGVmYXVsdC1wYWdlcn0nIGFzIHRoZSBkZWZhdWx0LgorZW5kaWY6OmdpdC1kZWZhdWx0LXBhZ2VyW10KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXQorbGlua2dpdDpnaXQtdGFnWzFdCitsaW5rZ2l0OmdpdC1jb25maWdbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyMzA3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXZlcmlmeS1wYWNrLnR4dApAQCAtMCwwICsxLDUzIEBACitnaXQtdmVyaWZ5LXBhY2soMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdmVyaWZ5LXBhY2sgLSBWYWxpZGF0ZSBwYWNrZWQgZ2l0IGFyY2hpdmUgZmlsZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdmVyaWZ5LXBhY2snIFstdnwtLXZlcmJvc2VdIFstc3wtLXN0YXQtb25seV0gWy0tXSA8cGFjaz4uaWR4IC4uLgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgZ2l2ZW4gaWR4IGZpbGUgZm9yIHBhY2tlZCBnaXQgYXJjaGl2ZSBjcmVhdGVkIHdpdGggdGhlCisnZ2l0IHBhY2stb2JqZWN0cycgY29tbWFuZCBhbmQgdmVyaWZpZXMgaWR4IGZpbGUgYW5kIHRoZQorY29ycmVzcG9uZGluZyBwYWNrIGZpbGUuCisKK09QVElPTlMKKy0tLS0tLS0KKzxwYWNrPi5pZHggLi4uOjoKKwlUaGUgaWR4IGZpbGVzIHRvIHZlcmlmeS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlBZnRlciB2ZXJpZnlpbmcgdGhlIHBhY2ssIHNob3cgbGlzdCBvZiBvYmplY3RzIGNvbnRhaW5lZAorCWluIHRoZSBwYWNrIGFuZCBhIGhpc3RvZ3JhbSBvZiBkZWx0YSBjaGFpbiBsZW5ndGguCisKKy1zOjoKKy0tc3RhdC1vbmx5OjoKKwlEbyBub3QgdmVyaWZ5IHRoZSBwYWNrIGNvbnRlbnRzOyBvbmx5IHNob3cgdGhlIGhpc3RvZ3JhbSBvZiBkZWx0YQorCWNoYWluIGxlbmd0aC4gIFdpdGggYC0tdmVyYm9zZWAsIGxpc3Qgb2Ygb2JqZWN0cyBpcyBhbHNvIHNob3duLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKK09VVFBVVCBGT1JNQVQKKy0tLS0tLS0tLS0tLS0KK1doZW4gc3BlY2lmeWluZyB0aGUgLXYgb3B0aW9uIHRoZSBmb3JtYXQgdXNlZCBpczoKKworCVNIQTEgdHlwZSBzaXplIHNpemUtaW4tcGFjay1maWxlIG9mZnNldC1pbi1wYWNrZmlsZQorCitmb3Igb2JqZWN0cyB0aGF0IGFyZSBub3QgZGVsdGlmaWVkIGluIHRoZSBwYWNrLCBhbmQKKworCVNIQTEgdHlwZSBzaXplIHNpemUtaW4tcGFja2ZpbGUgb2Zmc2V0LWluLXBhY2tmaWxlIGRlcHRoIGJhc2UtU0hBMQorCitmb3Igb2JqZWN0cyB0aGF0IGFyZSBkZWx0aWZpZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXRhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktdGFnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmY3NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXRhZy50eHQKQEAgLTAsMCArMSwyOCBAQAorZ2l0LXZlcmlmeS10YWcoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC12ZXJpZnktdGFnIC0gQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdmVyaWZ5LXRhZycgPHRhZz4uLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitWYWxpZGF0ZXMgdGhlIGdwZyBzaWduYXR1cmUgY3JlYXRlZCBieSAnZ2l0IHRhZycuCisKK09QVElPTlMKKy0tLS0tLS0KKy12OjoKKy0tdmVyYm9zZTo6CisJUHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWcgb2JqZWN0IGJlZm9yZSB2YWxpZGF0aW5nIGl0LgorCis8dGFnPi4uLjo6CisJU0hBMSBpZGVudGlmaWVycyBvZiBnaXQgdGFnIG9iamVjdHMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd2ViLS1icm93c2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtd2ViLS1icm93c2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYmM4N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC13ZWItLWJyb3dzZS50eHQKQEAgLTAsMCArMSwxMjIgQEAKK2dpdC13ZWJ7bGl0ZGR9YnJvd3NlKDEpCis9PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtd2ViLS1icm93c2UgLSBnaXQgaGVscGVyIHNjcmlwdCB0byBsYXVuY2ggYSB3ZWIgYnJvd3NlcgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgd2Vie2xpdGRkfWJyb3dzZScgW09QVElPTlNdIFVSTC9GSUxFIC4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBzY3JpcHQgdHJpZXMsIGFzIG11Y2ggYXMgcG9zc2libGUsIHRvIGRpc3BsYXkgdGhlIFVSTHMgYW5kIEZJTEVzCit0aGF0IGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzLCBhcyBIVE1MIHBhZ2VzIGluIG5ldyB0YWJzIG9uIGFuIGFscmVhZHkKK29wZW5lZCB3ZWIgYnJvd3Nlci4KKworVGhlIGZvbGxvd2luZyBicm93c2VycyAob3IgY29tbWFuZHMpIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOgorCisqIGZpcmVmb3ggKHRoaXMgaXMgdGhlIGRlZmF1bHQgdW5kZXIgWCBXaW5kb3cgd2hlbiBub3QgdXNpbmcgS0RFKQorKiBpY2V3ZWFzZWwKKyogc2VhbW9ua2V5CisqIGljZWFwZQorKiBjaHJvbWl1bSAoYWxzbyBzdXBwb3J0ZWQgYXMgY2hyb21pdW0tYnJvd3NlcikKKyogZ29vZ2xlLWNocm9tZSAoYWxzbyBzdXBwb3J0ZWQgYXMgY2hyb21lKQorKiBrb25xdWVyb3IgKHRoaXMgaXMgdGhlIGRlZmF1bHQgdW5kZXIgS0RFLCBzZWUgJ05vdGUgYWJvdXQga29ucXVlcm9yJyBiZWxvdykKKyogb3BlcmEKKyogdzNtICh0aGlzIGlzIHRoZSBkZWZhdWx0IG91dHNpZGUgZ3JhcGhpY2FsIGVudmlyb25tZW50cykKKyogZWxpbmtzCisqIGxpbmtzCisqIGx5bngKKyogZGlsbG8KKyogb3BlbiAodGhpcyBpcyB0aGUgZGVmYXVsdCB1bmRlciBNYWMgT1MgWCBHVUkpCisqIHN0YXJ0ICh0aGlzIGlzIHRoZSBkZWZhdWx0IHVuZGVyIE1pbkdXKQorCitDdXN0b20gY29tbWFuZHMgbWF5IGFsc28gYmUgc3BlY2lmaWVkLgorCitPUFRJT05TCistLS0tLS0tCistYiA8YnJvd3Nlcj46OgorLS1icm93c2VyPTxicm93c2VyPjo6CisJVXNlIHRoZSBzcGVjaWZpZWQgYnJvd3Nlci4gSXQgbXVzdCBiZSBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQKKwlicm93c2Vycy4KKworLXQgPGJyb3dzZXI+OjoKKy0tdG9vbD08YnJvd3Nlcj46OgorCVNhbWUgYXMgYWJvdmUuCisKKy1jIDxjb25mLnZhcj46OgorLS1jb25maWc9PGNvbmYudmFyPjo6CisJQ09ORi5WQVIgaXMgbG9va2VkIHVwIGluIHRoZSBnaXQgY29uZmlnIGZpbGVzLiBJZiBpdCdzIHNldCwKKwl0aGVuIGl0cyB2YWx1ZSBzcGVjaWZpZXMgdGhlIGJyb3dzZXIgdGhhdCBzaG91bGQgYmUgdXNlZC4KKworQ09ORklHVVJBVElPTiBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NPTkYuVkFSIChmcm9tIC1jIG9wdGlvbikgYW5kIHdlYi5icm93c2VyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgd2ViIGJyb3dzZXIgY2FuIGJlIHNwZWNpZmllZCB1c2luZyBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgcGFzc2VkCit3aXRoIHRoZSAtYyAob3IgLS1jb25maWcpIGNvbW1hbmQgbGluZSBvcHRpb24sIG9yIHRoZSAnd2ViLmJyb3dzZXInCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlmIHRoZSBmb3JtZXIgaXMgbm90IHVzZWQuCisKK2Jyb3dzZXIuPHRvb2w+LnBhdGgKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBleHBsaWNpdGx5IHByb3ZpZGUgYSBmdWxsIHBhdGggdG8geW91ciBwcmVmZXJyZWQgYnJvd3NlciBieQorc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnYnJvd3Nlci48dG9vbD4ucGF0aCcuIEZvciBleGFtcGxlLAoreW91IGNhbiBjb25maWd1cmUgdGhlIGFic29sdXRlIHBhdGggdG8gZmlyZWZveCBieSBzZXR0aW5nCisnYnJvd3Nlci5maXJlZm94LnBhdGgnLiBPdGhlcndpc2UsICdnaXQgd2Vie2xpdGRkfWJyb3dzZScgYXNzdW1lcyB0aGUgdG9vbAoraXMgYXZhaWxhYmxlIGluIFBBVEguCisKK2Jyb3dzZXIuPHRvb2w+LmNtZAorfn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gdGhlIGJyb3dzZXIsIHNwZWNpZmllZCBieSBvcHRpb25zIG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCBpcworbm90IGFtb25nIHRoZSBzdXBwb3J0ZWQgb25lcywgdGhlbiB0aGUgY29ycmVzcG9uZGluZworJ2Jyb3dzZXIuPHRvb2w+LmNtZCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3aWxsIGJlIGxvb2tlZCB1cC4gSWYgdGhpcwordmFyaWFibGUgZXhpc3RzIHRoZW4gJ2dpdCB3ZWJ7bGl0ZGR9YnJvd3NlJyB3aWxsIHRyZWF0IHRoZSBzcGVjaWZpZWQgdG9vbAorYXMgYSBjdXN0b20gY29tbWFuZCBhbmQgd2lsbCB1c2UgYSBzaGVsbCBldmFsIHRvIHJ1biB0aGUgY29tbWFuZCB3aXRoCit0aGUgVVJMcyBwYXNzZWQgYXMgYXJndW1lbnRzLgorCitOb3RlIGFib3V0IGtvbnF1ZXJvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiAna29ucXVlcm9yJyBpcyBzcGVjaWZpZWQgYnkgYSBjb21tYW5kIGxpbmUgb3B0aW9uIG9yIGEKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHdlIGxhdW5jaCAna2ZtY2xpZW50JyB0byB0cnkgdG8gb3BlbiB0aGUgSFRNTAorbWFuIHBhZ2Ugb24gYW4gYWxyZWFkeSBvcGVuZWQga29ucXVlcm9yIGluIGEgbmV3IHRhYiBpZiBwb3NzaWJsZS4KKworRm9yIGNvbnNpc3RlbmN5LCB3ZSBhbHNvIHRyeSBzdWNoIGEgdHJpY2sgaWYgJ2Jyb3dzZXIua29ucXVlcm9yLnBhdGgnIGlzCitzZXQgdG8gc29tZXRoaW5nIGxpa2UgJ0FfUEFUSF9UTy9rb25xdWVyb3InLiBUaGF0IG1lYW5zIHdlIHdpbGwgdHJ5IHRvCitsYXVuY2ggJ0FfUEFUSF9UTy9rZm1jbGllbnQnIGluc3RlYWQuCisKK0lmIHlvdSByZWFsbHkgd2FudCB0byB1c2UgJ2tvbnF1ZXJvcicsIHRoZW4geW91IGNhbiB1c2Ugc29tZXRoaW5nIGxpa2UKK3RoZSBmb2xsb3dpbmc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVt3ZWJdCisJCWJyb3dzZXIgPSBrb25xCisKKwlbYnJvd3NlciAia29ucSJdCisJCWNtZCA9IEFfUEFUSF9UTy9rb25xdWVyb3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIGFib3V0IGdpdC1jb25maWcgLS1nbG9iYWwKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitOb3RlIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgc2hvdWxkIHByb2JhYmx5IGJlIHNldCB1c2luZwordGhlICctLWdsb2JhbCcgZmxhZywgZm9yIGV4YW1wbGUgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyAtLWdsb2JhbCB3ZWIuYnJvd3NlciBmaXJlZm94CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXMgdGhleSBhcmUgcHJvYmFibHkgbW9yZSB1c2VyIHNwZWNpZmljIHRoYW4gcmVwb3NpdG9yeSBzcGVjaWZpYy4KK1NlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC13aGF0Y2hhbmdlZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC13aGF0Y2hhbmdlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4ZjUxMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXdoYXRjaGFuZ2VkLnR4dApAQCAtMCwwICsxLDY5IEBACitnaXQtd2hhdGNoYW5nZWQoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtd2hhdGNoYW5nZWQgLSBTaG93IGxvZ3Mgd2l0aCBkaWZmZXJlbmNlIGVhY2ggY29tbWl0IGludHJvZHVjZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgd2hhdGNoYW5nZWQnIDxvcHRpb24+Li4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU2hvd3MgY29tbWl0IGxvZ3MgYW5kIGRpZmYgb3V0cHV0IGVhY2ggY29tbWl0IGludHJvZHVjZXMuICBUaGUKK2NvbW1hbmQgaW50ZXJuYWxseSBpbnZva2VzICdnaXQgcmV2LWxpc3QnIHBpcGVkIHRvCisnZ2l0IGRpZmYtdHJlZScsIGFuZCB0YWtlcyBjb21tYW5kIGxpbmUgb3B0aW9ucyBmb3IgYm90aCBvZgordGhlc2UgY29tbWFuZHMuCisKK1RoaXMgbWFudWFsIHBhZ2UgZGVzY3JpYmVzIG9ubHkgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIG9wdGlvbnMuCisKKworT1BUSU9OUworLS0tLS0tLQorLXA6OgorCVNob3cgdGV4dHVhbCBkaWZmcywgaW5zdGVhZCBvZiB0aGUgZ2l0IGludGVybmFsIGRpZmYKKwlvdXRwdXQgZm9ybWF0IHRoYXQgaXMgdXNlZnVsIG9ubHkgdG8gdGVsbCB0aGUgY2hhbmdlZAorCXBhdGhzIGFuZCB0aGVpciBuYXR1cmUgb2YgY2hhbmdlcy4KKworLTxuPjo6CisJTGltaXQgb3V0cHV0IHRvIDxuPiBjb21taXRzLgorCis8c2luY2U+Li48dW50aWw+OjoKKwlMaW1pdCBvdXRwdXQgdG8gYmV0d2VlbiB0aGUgdHdvIG5hbWVkIGNvbW1pdHMgKGJvdHRvbQorCWV4Y2x1c2l2ZSwgdG9wIGluY2x1c2l2ZSkuCisKKy1yOjoKKwlTaG93IGdpdCBpbnRlcm5hbCBkaWZmIG91dHB1dCwgYnV0IGZvciB0aGUgd2hvbGUgdHJlZSwKKwlub3QganVzdCB0aGUgdG9wIGxldmVsLgorCistbTo6CisJQnkgZGVmYXVsdCwgZGlmZmVyZW5jZXMgZm9yIG1lcmdlIGNvbW1pdHMgYXJlIG5vdCBzaG93bi4KKwlXaXRoIHRoaXMgZmxhZywgc2hvdyBkaWZmZXJlbmNlcyB0byB0aGF0IGNvbW1pdCBmcm9tIGFsbAorCW9mIGl0cyBwYXJlbnRzLgorKworSG93ZXZlciwgaXQgaXMgbm90IHZlcnkgdXNlZnVsIGluIGdlbmVyYWwsIGFsdGhvdWdoIGl0CisqaXMqIHVzZWZ1bCBvbiBhIGZpbGUtYnktZmlsZSBiYXNpcy4KKworaW5jbHVkZTo6cHJldHR5LW9wdGlvbnMudHh0W10KKworaW5jbHVkZTo6cHJldHR5LWZvcm1hdHMudHh0W10KKworRXhhbXBsZXMKKy0tLS0tLS0tCitgZ2l0IHdoYXRjaGFuZ2VkIC1wIHYyLjYuMTIuLiBpbmNsdWRlL3Njc2kgZHJpdmVycy9zY3NpYDo6CisKKwlTaG93IGFzIHBhdGNoZXMgdGhlIGNvbW1pdHMgc2luY2UgdmVyc2lvbiAndjIuNi4xMicgdGhhdCBjaGFuZ2VkCisJYW55IGZpbGUgaW4gdGhlIGluY2x1ZGUvc2NzaSBvciBkcml2ZXJzL3Njc2kgc3ViZGlyZWN0b3JpZXMKKworYGdpdCB3aGF0Y2hhbmdlZCAtLXNpbmNlPSIyIHdlZWtzIGFnbyIgLS0gZ2l0a2A6OgorCisJU2hvdyB0aGUgY2hhbmdlcyBkdXJpbmcgdGhlIGxhc3QgdHdvIHdlZWtzIHRvIHRoZSBmaWxlICdnaXRrJy4KKwlUaGUgIi0tIiBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlICpicmFuY2gqIG5hbWVkCisJJ2dpdGsnCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjIwNDFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQKQEAgLTAsMCArMSw0MiBAQAorZ2l0LXdyaXRlLXRyZWUoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC13cml0ZS10cmVlIC0gQ3JlYXRlIGEgdHJlZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBpbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB3cml0ZS10cmVlJyBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NyZWF0ZXMgYSB0cmVlIG9iamVjdCB1c2luZyB0aGUgY3VycmVudCBpbmRleC4gVGhlIG5hbWUgb2YgdGhlIG5ldwordHJlZSBvYmplY3QgaXMgcHJpbnRlZCB0byBzdGFuZGFyZCBvdXRwdXQuCisKK1RoZSBpbmRleCBtdXN0IGJlIGluIGEgZnVsbHkgbWVyZ2VkIHN0YXRlLgorCitDb25jZXB0dWFsbHksICdnaXQgd3JpdGUtdHJlZScgc3luYygpcyB0aGUgY3VycmVudCBpbmRleCBjb250ZW50cworaW50byBhIHNldCBvZiB0cmVlIGZpbGVzLgorSW4gb3JkZXIgdG8gaGF2ZSB0aGF0IG1hdGNoIHdoYXQgaXMgYWN0dWFsbHkgaW4geW91ciBkaXJlY3RvcnkgcmlnaHQKK25vdywgeW91IG5lZWQgdG8gaGF2ZSBkb25lIGEgJ2dpdCB1cGRhdGUtaW5kZXgnIHBoYXNlIGJlZm9yZSB5b3UgZGlkIHRoZQorJ2dpdCB3cml0ZS10cmVlJy4KKworCitPUFRJT05TCistLS0tLS0tCistLW1pc3Npbmctb2s6OgorCU5vcm1hbGx5ICdnaXQgd3JpdGUtdHJlZScgZW5zdXJlcyB0aGF0IHRoZSBvYmplY3RzIHJlZmVyZW5jZWQgYnkgdGhlCisJZGlyZWN0b3J5IGV4aXN0IGluIHRoZSBvYmplY3QgZGF0YWJhc2UuICBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGlzCisJY2hlY2suCisKKy0tcHJlZml4PTxwcmVmaXg+Lzo6CisJV3JpdGVzIGEgdHJlZSBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgc3ViZGlyZWN0b3J5CisJYDxwcmVmaXg+YC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gd3JpdGUgdGhlIHRyZWUgb2JqZWN0CisJZm9yIGEgc3VicHJvamVjdCB0aGF0IGlzIGluIHRoZSBuYW1lZCBzdWJkaXJlY3RvcnkuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZGQyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKQEAgLTAsMCArMSw4ODcgQEAKK2dpdCgxKQorPT09PT09CisKK05BTUUKKy0tLS0KK2dpdCAtIHRoZSBzdHVwaWQgY29udGVudCB0cmFja2VyCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0JyBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLWMgPG5hbWU+PTx2YWx1ZT5dCisgICAgWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdCisgICAgWy1wfC0tcGFnaW5hdGV8LS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS1iYXJlXQorICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XQorICAgIDxjb21tYW5kPiBbPGFyZ3M+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0dpdCBpcyBhIGZhc3QsIHNjYWxhYmxlLCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbSB3aXRoIGFuCit1bnVzdWFsbHkgcmljaCBjb21tYW5kIHNldCB0aGF0IHByb3ZpZGVzIGJvdGggaGlnaC1sZXZlbCBvcGVyYXRpb25zCithbmQgZnVsbCBhY2Nlc3MgdG8gaW50ZXJuYWxzLgorCitTZWUgbGlua2dpdDpnaXR0dXRvcmlhbFs3XSB0byBnZXQgc3RhcnRlZCwgdGhlbiBzZWUKK2xpbms6ZXZlcnlkYXkuaHRtbFtFdmVyeWRheSBHaXRdIGZvciBhIHVzZWZ1bCBtaW5pbXVtIHNldCBvZgorY29tbWFuZHMuICBUaGUgbGluazp1c2VyLW1hbnVhbC5odG1sW0dpdCBVc2VyJ3MgTWFudWFsXSBoYXMgYSBtb3JlCitpbi1kZXB0aCBpbnRyb2R1Y3Rpb24uCisKK0FmdGVyIHlvdSBtYXN0ZXJlZCB0aGUgYmFzaWMgY29uY2VwdHMsIHlvdSBjYW4gY29tZSBiYWNrIHRvIHRoaXMKK3BhZ2UgdG8gbGVhcm4gd2hhdCBjb21tYW5kcyBnaXQgb2ZmZXJzLiAgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0CitpbmRpdmlkdWFsIGdpdCBjb21tYW5kcyB3aXRoICJnaXQgaGVscCBjb21tYW5kIi4gIGxpbmtnaXQ6Z2l0Y2xpWzddCittYW51YWwgcGFnZSBnaXZlcyB5b3UgYW4gb3ZlcnZpZXcgb2YgdGhlIGNvbW1hbmQgbGluZSBjb21tYW5kIHN5bnRheC4KKworRm9ybWF0dGVkIGFuZCBoeXBlcmxpbmtlZCB2ZXJzaW9uIG9mIHRoZSBsYXRlc3QgZ2l0IGRvY3VtZW50YXRpb24KK2NhbiBiZSB2aWV3ZWQgYXQgYGh0dHA6Ly9naXQtaHRtbGRvY3MuZ29vZ2xlY29kZS5jb20vZ2l0L2dpdC5odG1sYC4KKworaWZkZWY6OnN0YWxlbm90ZXNbXQorW05PVEVdCis9PT09PT09PT09PT0KKworWW91IGFyZSByZWFkaW5nIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgbGF0ZXN0IChwb3NzaWJseQordW5yZWxlYXNlZCkgdmVyc2lvbiBvZiBnaXQsIHRoYXQgaXMgYXZhaWxhYmxlIGZyb20gJ21hc3RlcicKK2JyYW5jaCBvZiB0aGUgYGdpdC5naXRgIHJlcG9zaXRvcnkuCitEb2N1bWVudGF0aW9uIGZvciBvbGRlciByZWxlYXNlcyBhcmUgYXZhaWxhYmxlIGhlcmU6CisKKyogbGluazp2MS43LjEyLjQvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjcuMTIuNF0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNy4xMi40LnR4dFsxLjcuMTIuNF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjEyLjMudHh0WzEuNy4xMi4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTIuMi50eHRbMS43LjEyLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMi4xLnR4dFsxLjcuMTIuMV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjEyLnR4dFsxLjcuMTJdLgorCisqIGxpbms6djEuNy4xMS43L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS43LjExLjddCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTEuNy50eHRbMS43LjExLjddLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMS42LnR4dFsxLjcuMTEuNl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjExLjUudHh0WzEuNy4xMS41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTEuNC50eHRbMS43LjExLjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMS4zLnR4dFsxLjcuMTEuM10sCisgIGxpbms6UmVsTm90ZXMvMS43LjExLjIudHh0WzEuNy4xMS4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTEuMS50eHRbMS43LjExLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMS50eHRbMS43LjExXS4KKworKiBsaW5rOnYxLjcuMTAuNS9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNy4xMC41XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS43LjEwLjUudHh0WzEuNy4xMC41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTAuNC50eHRbMS43LjEwLjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMC4zLnR4dFsxLjcuMTAuM10sCisgIGxpbms6UmVsTm90ZXMvMS43LjEwLjIudHh0WzEuNy4xMC4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTAuMS50eHRbMS43LjEwLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMC50eHRbMS43LjEwXS4KKworKiBsaW5rOnYxLjcuOS43L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS43LjkuN10KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNy45LjcudHh0WzEuNy45LjddLAorICBsaW5rOlJlbE5vdGVzLzEuNy45LjYudHh0WzEuNy45LjZdLAorICBsaW5rOlJlbE5vdGVzLzEuNy45LjUudHh0WzEuNy45LjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNy45LjQudHh0WzEuNy45LjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNy45LjMudHh0WzEuNy45LjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNy45LjIudHh0WzEuNy45LjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNy45LjEudHh0WzEuNy45LjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNy45LnR4dFsxLjcuOV0uCisKKyogbGluazp2MS43LjguNi9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNy44LjZdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjcuOC42LnR4dFsxLjcuOC42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuOC41LnR4dFsxLjcuOC41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuOC40LnR4dFsxLjcuOC40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuOC4zLnR4dFsxLjcuOC4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuOC4yLnR4dFsxLjcuOC4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuOC4xLnR4dFsxLjcuOC4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuOC50eHRbMS43LjhdLgorCisqIGxpbms6djEuNy43LjcvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjcuNy43XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS43LjcuNy50eHRbMS43LjcuN10sCisgIGxpbms6UmVsTm90ZXMvMS43LjcuNi50eHRbMS43LjcuNl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjcuNS50eHRbMS43LjcuNV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjcuNC50eHRbMS43LjcuNF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjcuMy50eHRbMS43LjcuM10sCisgIGxpbms6UmVsTm90ZXMvMS43LjcuMi50eHRbMS43LjcuMl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjcuMS50eHRbMS43LjcuMV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjcudHh0WzEuNy43XS4KKworKiBsaW5rOnYxLjcuNi42L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS43LjYuNl0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNy42LjYudHh0WzEuNy42LjZdLAorICBsaW5rOlJlbE5vdGVzLzEuNy42LjUudHh0WzEuNy42LjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNy42LjQudHh0WzEuNy42LjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNy42LjMudHh0WzEuNy42LjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNy42LjIudHh0WzEuNy42LjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNy42LjEudHh0WzEuNy42LjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNy42LnR4dFsxLjcuNl0uCisKKyogbGluazp2MS43LjUuNC9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNy41LjRdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjcuNS40LnR4dFsxLjcuNS40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNS4zLnR4dFsxLjcuNS4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNS4yLnR4dFsxLjcuNS4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNS4xLnR4dFsxLjcuNS4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNS50eHRbMS43LjVdLgorCisqIGxpbms6djEuNy40LjUvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjcuNC41XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS43LjQuNS50eHRbMS43LjQuNV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjQuNC50eHRbMS43LjQuNF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjQuMy50eHRbMS43LjQuM10sCisgIGxpbms6UmVsTm90ZXMvMS43LjQuMi50eHRbMS43LjQuMl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjQuMS50eHRbMS43LjQuMV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjQudHh0WzEuNy40XS4KKworKiBsaW5rOnYxLjcuMy41L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS43LjMuNV0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNy4zLjUudHh0WzEuNy4zLjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4zLjQudHh0WzEuNy4zLjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4zLjMudHh0WzEuNy4zLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4zLjIudHh0WzEuNy4zLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4zLjEudHh0WzEuNy4zLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4zLnR4dFsxLjcuM10uCisKKyogbGluazp2MS43LjIuNS9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNy4yLjVdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjcuMi41LnR4dFsxLjcuMi41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMi40LnR4dFsxLjcuMi40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMi4zLnR4dFsxLjcuMi4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMi4yLnR4dFsxLjcuMi4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMi4xLnR4dFsxLjcuMi4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMi50eHRbMS43LjJdLgorCisqIGxpbms6djEuNy4xLjQvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjcuMS40XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS43LjEuNC50eHRbMS43LjEuNF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjEuMy50eHRbMS43LjEuM10sCisgIGxpbms6UmVsTm90ZXMvMS43LjEuMi50eHRbMS43LjEuMl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjEuMS50eHRbMS43LjEuMV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjEudHh0WzEuNy4xXS4KKworKiBsaW5rOnYxLjcuMC45L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS43LjAuOV0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNy4wLjkudHh0WzEuNy4wLjldLAorICBsaW5rOlJlbE5vdGVzLzEuNy4wLjgudHh0WzEuNy4wLjhdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4wLjcudHh0WzEuNy4wLjddLAorICBsaW5rOlJlbE5vdGVzLzEuNy4wLjYudHh0WzEuNy4wLjZdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4wLjUudHh0WzEuNy4wLjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4wLjQudHh0WzEuNy4wLjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4wLjMudHh0WzEuNy4wLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4wLjIudHh0WzEuNy4wLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4wLjEudHh0WzEuNy4wLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4wLnR4dFsxLjcuMF0uCisKKyogbGluazp2MS42LjYuMy9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNi42LjNdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjYuNi4zLnR4dFsxLjYuNi4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNi4yLnR4dFsxLjYuNi4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNi4xLnR4dFsxLjYuNi4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNi50eHRbMS42LjZdLgorCisqIGxpbms6djEuNi41LjkvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjYuNS45XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS42LjUuOS50eHRbMS42LjUuOV0sCisgIGxpbms6UmVsTm90ZXMvMS42LjUuOC50eHRbMS42LjUuOF0sCisgIGxpbms6UmVsTm90ZXMvMS42LjUuNy50eHRbMS42LjUuN10sCisgIGxpbms6UmVsTm90ZXMvMS42LjUuNi50eHRbMS42LjUuNl0sCisgIGxpbms6UmVsTm90ZXMvMS42LjUuNS50eHRbMS42LjUuNV0sCisgIGxpbms6UmVsTm90ZXMvMS42LjUuNC50eHRbMS42LjUuNF0sCisgIGxpbms6UmVsTm90ZXMvMS42LjUuMy50eHRbMS42LjUuM10sCisgIGxpbms6UmVsTm90ZXMvMS42LjUuMi50eHRbMS42LjUuMl0sCisgIGxpbms6UmVsTm90ZXMvMS42LjUuMS50eHRbMS42LjUuMV0sCisgIGxpbms6UmVsTm90ZXMvMS42LjUudHh0WzEuNi41XS4KKworKiBsaW5rOnYxLjYuNC41L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS42LjQuNV0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNi40LjUudHh0WzEuNi40LjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNi40LjQudHh0WzEuNi40LjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNi40LjMudHh0WzEuNi40LjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNi40LjIudHh0WzEuNi40LjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNi40LjEudHh0WzEuNi40LjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNi40LnR4dFsxLjYuNF0uCisKKyogbGluazp2MS42LjMuNC9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNi4zLjRdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjYuMy40LnR4dFsxLjYuMy40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMy4zLnR4dFsxLjYuMy4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMy4yLnR4dFsxLjYuMy4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMy4xLnR4dFsxLjYuMy4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMy50eHRbMS42LjNdLgorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS42LjIuNS50eHRbMS42LjIuNV0sCisgIGxpbms6UmVsTm90ZXMvMS42LjIuNC50eHRbMS42LjIuNF0sCisgIGxpbms6UmVsTm90ZXMvMS42LjIuMy50eHRbMS42LjIuM10sCisgIGxpbms6UmVsTm90ZXMvMS42LjIuMi50eHRbMS42LjIuMl0sCisgIGxpbms6UmVsTm90ZXMvMS42LjIuMS50eHRbMS42LjIuMV0sCisgIGxpbms6UmVsTm90ZXMvMS42LjIudHh0WzEuNi4yXS4KKworKiBsaW5rOnYxLjYuMS4zL2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS42LjEuM10KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNi4xLjMudHh0WzEuNi4xLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4xLjIudHh0WzEuNi4xLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4xLjEudHh0WzEuNi4xLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4xLnR4dFsxLjYuMV0uCisKKyogbGluazp2MS42LjAuNi9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNi4wLjZdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjYuMC42LnR4dFsxLjYuMC42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMC41LnR4dFsxLjYuMC41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMC40LnR4dFsxLjYuMC40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMC4zLnR4dFsxLjYuMC4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMC4yLnR4dFsxLjYuMC4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMC4xLnR4dFsxLjYuMC4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMC50eHRbMS42LjBdLgorCisqIGxpbms6djEuNS42LjYvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjUuNi42XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS41LjYuNi50eHRbMS41LjYuNl0sCisgIGxpbms6UmVsTm90ZXMvMS41LjYuNS50eHRbMS41LjYuNV0sCisgIGxpbms6UmVsTm90ZXMvMS41LjYuNC50eHRbMS41LjYuNF0sCisgIGxpbms6UmVsTm90ZXMvMS41LjYuMy50eHRbMS41LjYuM10sCisgIGxpbms6UmVsTm90ZXMvMS41LjYuMi50eHRbMS41LjYuMl0sCisgIGxpbms6UmVsTm90ZXMvMS41LjYuMS50eHRbMS41LjYuMV0sCisgIGxpbms6UmVsTm90ZXMvMS41LjYudHh0WzEuNS42XS4KKworKiBsaW5rOnYxLjUuNS42L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS41LjUuNl0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNS41LjYudHh0WzEuNS41LjZdLAorICBsaW5rOlJlbE5vdGVzLzEuNS41LjUudHh0WzEuNS41LjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNS41LjQudHh0WzEuNS41LjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNS41LjMudHh0WzEuNS41LjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNS41LjIudHh0WzEuNS41LjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNS41LjEudHh0WzEuNS41LjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNS41LnR4dFsxLjUuNV0uCisKKyogbGluazp2MS41LjQuNy9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNS40LjddCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjUuNC43LnR4dFsxLjUuNC43XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNC42LnR4dFsxLjUuNC42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNC41LnR4dFsxLjUuNC41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNC40LnR4dFsxLjUuNC40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNC4zLnR4dFsxLjUuNC4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNC4yLnR4dFsxLjUuNC4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNC4xLnR4dFsxLjUuNC4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNC50eHRbMS41LjRdLgorCisqIGxpbms6djEuNS4zLjgvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjUuMy44XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS41LjMuOC50eHRbMS41LjMuOF0sCisgIGxpbms6UmVsTm90ZXMvMS41LjMuNy50eHRbMS41LjMuN10sCisgIGxpbms6UmVsTm90ZXMvMS41LjMuNi50eHRbMS41LjMuNl0sCisgIGxpbms6UmVsTm90ZXMvMS41LjMuNS50eHRbMS41LjMuNV0sCisgIGxpbms6UmVsTm90ZXMvMS41LjMuNC50eHRbMS41LjMuNF0sCisgIGxpbms6UmVsTm90ZXMvMS41LjMuMy50eHRbMS41LjMuM10sCisgIGxpbms6UmVsTm90ZXMvMS41LjMuMi50eHRbMS41LjMuMl0sCisgIGxpbms6UmVsTm90ZXMvMS41LjMuMS50eHRbMS41LjMuMV0sCisgIGxpbms6UmVsTm90ZXMvMS41LjMudHh0WzEuNS4zXS4KKworKiBsaW5rOnYxLjUuMi41L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS41LjIuNV0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNS4yLjUudHh0WzEuNS4yLjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4yLjQudHh0WzEuNS4yLjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4yLjMudHh0WzEuNS4yLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4yLjIudHh0WzEuNS4yLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4yLjEudHh0WzEuNS4yLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4yLnR4dFsxLjUuMl0uCisKKyogbGluazp2MS41LjEuNi9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNS4xLjZdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjUuMS42LnR4dFsxLjUuMS42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMS41LnR4dFsxLjUuMS41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMS40LnR4dFsxLjUuMS40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMS4zLnR4dFsxLjUuMS4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMS4yLnR4dFsxLjUuMS4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMS4xLnR4dFsxLjUuMS4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMS50eHRbMS41LjFdLgorCisqIGxpbms6djEuNS4wLjcvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjUuMC43XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS41LjAuNy50eHRbMS41LjAuN10sCisgIGxpbms6UmVsTm90ZXMvMS41LjAuNi50eHRbMS41LjAuNl0sCisgIGxpbms6UmVsTm90ZXMvMS41LjAuNS50eHRbMS41LjAuNV0sCisgIGxpbms6UmVsTm90ZXMvMS41LjAuMy50eHRbMS41LjAuM10sCisgIGxpbms6UmVsTm90ZXMvMS41LjAuMi50eHRbMS41LjAuMl0sCisgIGxpbms6UmVsTm90ZXMvMS41LjAuMS50eHRbMS41LjAuMV0sCisgIGxpbms6UmVsTm90ZXMvMS41LjAudHh0WzEuNS4wXS4KKworKiBkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIGxpbms6djEuNC40LjQvZ2l0Lmh0bWxbMS40LjQuNF0sCisgIGxpbms6djEuMy4zL2dpdC5odG1sWzEuMy4zXSwKKyAgbGluazp2MS4yLjYvZ2l0Lmh0bWxbMS4yLjZdLAorICBsaW5rOnYxLjAuMTMvZ2l0Lmh0bWxbMS4wLjEzXS4KKworPT09PT09PT09PT09CisKK2VuZGlmOjpzdGFsZW5vdGVzW10KKworT1BUSU9OUworLS0tLS0tLQorLS12ZXJzaW9uOjoKKwlQcmludHMgdGhlIGdpdCBzdWl0ZSB2ZXJzaW9uIHRoYXQgdGhlICdnaXQnIHByb2dyYW0gY2FtZSBmcm9tLgorCistLWhlbHA6OgorCVByaW50cyB0aGUgc3lub3BzaXMgYW5kIGEgbGlzdCBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkCisJY29tbWFuZHMuIElmIHRoZSBvcHRpb24gJy0tYWxsJyBvciAnLWEnIGlzIGdpdmVuIHRoZW4gYWxsCisJYXZhaWxhYmxlIGNvbW1hbmRzIGFyZSBwcmludGVkLiBJZiBhIGdpdCBjb21tYW5kIGlzIG5hbWVkIHRoaXMKKwlvcHRpb24gd2lsbCBicmluZyB1cCB0aGUgbWFudWFsIHBhZ2UgZm9yIHRoYXQgY29tbWFuZC4KKysKK090aGVyIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBjb250cm9sIGhvdyB0aGUgbWFudWFsIHBhZ2UgaXMKK2Rpc3BsYXllZC4gU2VlIGxpbmtnaXQ6Z2l0LWhlbHBbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24sCitiZWNhdXNlIGBnaXQgLS1oZWxwIC4uLmAgaXMgY29udmVydGVkIGludGVybmFsbHkgaW50byBgZ2l0CitoZWxwIC4uLmAuCisKKy1jIDxuYW1lPj08dmFsdWU+OjoKKwlQYXNzIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gdGhlIGNvbW1hbmQuIFRoZSB2YWx1ZQorCWdpdmVuIHdpbGwgb3ZlcnJpZGUgdmFsdWVzIGZyb20gY29uZmlndXJhdGlvbiBmaWxlcy4KKwlUaGUgPG5hbWU+IGlzIGV4cGVjdGVkIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBsaXN0ZWQgYnkKKwknZ2l0IGNvbmZpZycgKHN1YmtleXMgc2VwYXJhdGVkIGJ5IGRvdHMpLgorCistLWV4ZWMtcGF0aFs9PHBhdGg+XTo6CisJUGF0aCB0byB3aGVyZXZlciB5b3VyIGNvcmUgZ2l0IHByb2dyYW1zIGFyZSBpbnN0YWxsZWQuCisJVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5IHNldHRpbmcgdGhlIEdJVF9FWEVDX1BBVEgKKwllbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgbm8gcGF0aCBpcyBnaXZlbiwgJ2dpdCcgd2lsbCBwcmludAorCXRoZSBjdXJyZW50IHNldHRpbmcgYW5kIHRoZW4gZXhpdC4KKworLS1odG1sLXBhdGg6OgorCVByaW50IHRoZSBwYXRoLCB3aXRob3V0IHRyYWlsaW5nIHNsYXNoLCB3aGVyZSBnaXQncyBIVE1MCisJZG9jdW1lbnRhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGV4aXQuCisKKy0tbWFuLXBhdGg6OgorCVByaW50IHRoZSBtYW5wYXRoIChzZWUgYG1hbigxKWApIGZvciB0aGUgbWFuIHBhZ2VzIGZvcgorCXRoaXMgdmVyc2lvbiBvZiBnaXQgYW5kIGV4aXQuCisKKy0taW5mby1wYXRoOjoKKwlQcmludCB0aGUgcGF0aCB3aGVyZSB0aGUgSW5mbyBmaWxlcyBkb2N1bWVudGluZyB0aGlzCisJdmVyc2lvbiBvZiBnaXQgYXJlIGluc3RhbGxlZCBhbmQgZXhpdC4KKworLXA6OgorLS1wYWdpbmF0ZTo6CisJUGlwZSBhbGwgb3V0cHV0IGludG8gJ2xlc3MnIChvciBpZiBzZXQsICRQQUdFUikgaWYgc3RhbmRhcmQKKwlvdXRwdXQgaXMgYSB0ZXJtaW5hbC4gIFRoaXMgb3ZlcnJpZGVzIHRoZSBgcGFnZXIuPGNtZD5gCisJY29uZmlndXJhdGlvbiBvcHRpb25zIChzZWUgdGhlICJDb25maWd1cmF0aW9uIE1lY2hhbmlzbSIgc2VjdGlvbgorCWJlbG93KS4KKworLS1uby1wYWdlcjo6CisJRG8gbm90IHBpcGUgZ2l0IG91dHB1dCBpbnRvIGEgcGFnZXIuCisKKy0tZ2l0LWRpcj08cGF0aD46OgorCVNldCB0aGUgcGF0aCB0byB0aGUgcmVwb3NpdG9yeS4gVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5CisJc2V0dGluZyB0aGUgR0lUX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSXQgY2FuIGJlIGFuIGFic29sdXRlCisJcGF0aCBvciByZWxhdGl2ZSBwYXRoIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisKKy0td29yay10cmVlPTxwYXRoPjo6CisJU2V0IHRoZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUuIEl0IGNhbiBiZSBhbiBhYnNvbHV0ZSBwYXRoCisJb3IgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCVRoaXMgY2FuIGFsc28gYmUgY29udHJvbGxlZCBieSBzZXR0aW5nIHRoZSBHSVRfV09SS19UUkVFCisJZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHRoZSBjb3JlLndvcmt0cmVlIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZSAoc2VlIGNvcmUud29ya3RyZWUgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBhCisJbW9yZSBkZXRhaWxlZCBkaXNjdXNzaW9uKS4KKworLS1uYW1lc3BhY2U9PHBhdGg+OjoKKwlTZXQgdGhlIGdpdCBuYW1lc3BhY2UuICBTZWUgbGlua2dpdDpnaXRuYW1lc3BhY2VzWzddIGZvciBtb3JlCisJZGV0YWlscy4gIEVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUgYEdJVF9OQU1FU1BBQ0VgIGVudmlyb25tZW50CisJdmFyaWFibGUuCisKKy0tYmFyZTo6CisJVHJlYXQgdGhlIHJlcG9zaXRvcnkgYXMgYSBiYXJlIHJlcG9zaXRvcnkuICBJZiBHSVRfRElSCisJZW52aXJvbm1lbnQgaXMgbm90IHNldCwgaXQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IHdvcmtpbmcKKwlkaXJlY3RvcnkuCisKKy0tbm8tcmVwbGFjZS1vYmplY3RzOjoKKwlEbyBub3QgdXNlIHJlcGxhY2VtZW50IHJlZnMgdG8gcmVwbGFjZSBnaXQgb2JqZWN0cy4gU2VlCisJbGlua2dpdDpnaXQtcmVwbGFjZVsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitHSVQgQ09NTUFORFMKKy0tLS0tLS0tLS0tLQorCitXZSBkaXZpZGUgZ2l0IGludG8gaGlnaCBsZXZlbCAoInBvcmNlbGFpbiIpIGNvbW1hbmRzIGFuZCBsb3cgbGV2ZWwKKygicGx1bWJpbmciKSBjb21tYW5kcy4KKworSGlnaC1sZXZlbCBjb21tYW5kcyAocG9yY2VsYWluKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBzZXBhcmF0ZSB0aGUgcG9yY2VsYWluIGNvbW1hbmRzIGludG8gdGhlIG1haW4gY29tbWFuZHMgYW5kIHNvbWUKK2FuY2lsbGFyeSB1c2VyIHV0aWxpdGllcy4KKworTWFpbiBwb3JjZWxhaW4gY29tbWFuZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2luY2x1ZGU6OmNtZHMtbWFpbnBvcmNlbGFpbi50eHRbXQorCitBbmNpbGxhcnkgQ29tbWFuZHMKK35+fn5+fn5+fn5+fn5+fn5+fgorTWFuaXB1bGF0b3JzOgorCitpbmNsdWRlOjpjbWRzLWFuY2lsbGFyeW1hbmlwdWxhdG9ycy50eHRbXQorCitJbnRlcnJvZ2F0b3JzOgorCitpbmNsdWRlOjpjbWRzLWFuY2lsbGFyeWludGVycm9nYXRvcnMudHh0W10KKworCitJbnRlcmFjdGluZyB3aXRoIE90aGVycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlc2UgY29tbWFuZHMgYXJlIHRvIGludGVyYWN0IHdpdGggZm9yZWlnbiBTQ00gYW5kIHdpdGggb3RoZXIKK3Blb3BsZSB2aWEgcGF0Y2ggb3ZlciBlLW1haWwuCisKK2luY2x1ZGU6OmNtZHMtZm9yZWlnbnNjbWludGVyZmFjZS50eHRbXQorCisKK0xvdy1sZXZlbCBjb21tYW5kcyAocGx1bWJpbmcpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbHRob3VnaCBnaXQgaW5jbHVkZXMgaXRzCitvd24gcG9yY2VsYWluIGxheWVyLCBpdHMgbG93LWxldmVsIGNvbW1hbmRzIGFyZSBzdWZmaWNpZW50IHRvIHN1cHBvcnQKK2RldmVsb3BtZW50IG9mIGFsdGVybmF0aXZlIHBvcmNlbGFpbnMuICBEZXZlbG9wZXJzIG9mIHN1Y2ggcG9yY2VsYWlucworbWlnaHQgc3RhcnQgYnkgcmVhZGluZyBhYm91dCBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0gYW5kCitsaW5rZ2l0OmdpdC1yZWFkLXRyZWVbMV0uCisKK1RoZSBpbnRlcmZhY2UgKGlucHV0LCBvdXRwdXQsIHNldCBvZiBvcHRpb25zIGFuZCB0aGUgc2VtYW50aWNzKQordG8gdGhlc2UgbG93LWxldmVsIGNvbW1hbmRzIGFyZSBtZWFudCB0byBiZSBhIGxvdCBtb3JlIHN0YWJsZQordGhhbiBQb3JjZWxhaW4gbGV2ZWwgY29tbWFuZHMsIGJlY2F1c2UgdGhlc2UgY29tbWFuZHMgYXJlCitwcmltYXJpbHkgZm9yIHNjcmlwdGVkIHVzZS4gIFRoZSBpbnRlcmZhY2UgdG8gUG9yY2VsYWluIGNvbW1hbmRzCitvbiB0aGUgb3RoZXIgaGFuZCBhcmUgc3ViamVjdCB0byBjaGFuZ2UgaW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUKK2VuZCB1c2VyIGV4cGVyaWVuY2UuCisKK1RoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gZGl2aWRlcwordGhlIGxvdy1sZXZlbCBjb21tYW5kcyBpbnRvIGNvbW1hbmRzIHRoYXQgbWFuaXB1bGF0ZSBvYmplY3RzIChpbgordGhlIHJlcG9zaXRvcnksIGluZGV4LCBhbmQgd29ya2luZyB0cmVlKSwgY29tbWFuZHMgdGhhdCBpbnRlcnJvZ2F0ZSBhbmQKK2NvbXBhcmUgb2JqZWN0cywgYW5kIGNvbW1hbmRzIHRoYXQgbW92ZSBvYmplY3RzIGFuZCByZWZlcmVuY2VzIGJldHdlZW4KK3JlcG9zaXRvcmllcy4KKworCitNYW5pcHVsYXRpb24gY29tbWFuZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitpbmNsdWRlOjpjbWRzLXBsdW1iaW5nbWFuaXB1bGF0b3JzLnR4dFtdCisKKworSW50ZXJyb2dhdGlvbiBjb21tYW5kcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitpbmNsdWRlOjpjbWRzLXBsdW1iaW5naW50ZXJyb2dhdG9ycy50eHRbXQorCitJbiBnZW5lcmFsLCB0aGUgaW50ZXJyb2dhdGUgY29tbWFuZHMgZG8gbm90IHRvdWNoIHRoZSBmaWxlcyBpbgordGhlIHdvcmtpbmcgdHJlZS4KKworCitTeW5jaGluZyByZXBvc2l0b3JpZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitpbmNsdWRlOjpjbWRzLXN5bmNoaW5ncmVwb3NpdG9yaWVzLnR4dFtdCisKK1RoZSBmb2xsb3dpbmcgYXJlIGhlbHBlciBjb21tYW5kcyB1c2VkIGJ5IHRoZSBhYm92ZTsgZW5kIHVzZXJzCit0eXBpY2FsbHkgZG8gbm90IHVzZSB0aGVtIGRpcmVjdGx5LgorCitpbmNsdWRlOjpjbWRzLXN5bmNoZWxwZXJzLnR4dFtdCisKKworSW50ZXJuYWwgaGVscGVyIGNvbW1hbmRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlc2UgYXJlIGludGVybmFsIGhlbHBlciBjb21tYW5kcyB1c2VkIGJ5IG90aGVyIGNvbW1hbmRzOyBlbmQKK3VzZXJzIHR5cGljYWxseSBkbyBub3QgdXNlIHRoZW0gZGlyZWN0bHkuCisKK2luY2x1ZGU6OmNtZHMtcHVyZWhlbHBlcnMudHh0W10KKworCitDb25maWd1cmF0aW9uIE1lY2hhbmlzbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RhcnRpbmcgZnJvbSAwLjk5LjkgKGFjdHVhbGx5IG1pZCAwLjk5LjguR0lUKSwgYC5naXQvY29uZmlnYCBmaWxlCitpcyB1c2VkIHRvIGhvbGQgcGVyLXJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgSXQgaXMgYQorc2ltcGxlIHRleHQgZmlsZSBtb2RlbGVkIGFmdGVyIGAuaW5pYCBmb3JtYXQgZmFtaWxpYXIgdG8gc29tZQorcGVvcGxlLiAgSGVyZSBpcyBhbiBleGFtcGxlOgorCistLS0tLS0tLS0tLS0KKyMKKyMgQSAnIycgb3IgJzsnIGNoYXJhY3RlciBpbmRpY2F0ZXMgYSBjb21tZW50LgorIworCis7IGNvcmUgdmFyaWFibGVzCitbY29yZV0KKwk7IERvbid0IHRydXN0IGZpbGUgbW9kZXMKKwlmaWxlbW9kZSA9IGZhbHNlCisKKzsgdXNlciBpZGVudGl0eQorW3VzZXJdCisJbmFtZSA9ICJKdW5pbyBDIEhhbWFubyIKKwllbWFpbCA9ICJqdW5raW9AdHdpbnN1bi5jb20iCisKKy0tLS0tLS0tLS0tLQorCitWYXJpb3VzIGNvbW1hbmRzIHJlYWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCBhZGp1c3QKK3RoZWlyIG9wZXJhdGlvbiBhY2NvcmRpbmdseS4gIFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGEKK2xpc3QuCisKKworSWRlbnRpZmllciBUZXJtaW5vbG9neQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPG9iamVjdD46OgorCUluZGljYXRlcyB0aGUgb2JqZWN0IG5hbWUgZm9yIGFueSB0eXBlIG9mIG9iamVjdC4KKworPGJsb2I+OjoKKwlJbmRpY2F0ZXMgYSBibG9iIG9iamVjdCBuYW1lLgorCis8dHJlZT46OgorCUluZGljYXRlcyBhIHRyZWUgb2JqZWN0IG5hbWUuCisKKzxjb21taXQ+OjoKKwlJbmRpY2F0ZXMgYSBjb21taXQgb2JqZWN0IG5hbWUuCisKKzx0cmVlLWlzaD46OgorCUluZGljYXRlcyBhIHRyZWUsIGNvbW1pdCBvciB0YWcgb2JqZWN0IG5hbWUuICBBCisJY29tbWFuZCB0aGF0IHRha2VzIGEgPHRyZWUtaXNoPiBhcmd1bWVudCB1bHRpbWF0ZWx5IHdhbnRzIHRvCisJb3BlcmF0ZSBvbiBhIDx0cmVlPiBvYmplY3QgYnV0IGF1dG9tYXRpY2FsbHkgZGVyZWZlcmVuY2VzCisJPGNvbW1pdD4gYW5kIDx0YWc+IG9iamVjdHMgdGhhdCBwb2ludCBhdCBhIDx0cmVlPi4KKworPGNvbW1pdC1pc2g+OjoKKwlJbmRpY2F0ZXMgYSBjb21taXQgb3IgdGFnIG9iamVjdCBuYW1lLiAgQQorCWNvbW1hbmQgdGhhdCB0YWtlcyBhIDxjb21taXQtaXNoPiBhcmd1bWVudCB1bHRpbWF0ZWx5IHdhbnRzIHRvCisJb3BlcmF0ZSBvbiBhIDxjb21taXQ+IG9iamVjdCBidXQgYXV0b21hdGljYWxseSBkZXJlZmVyZW5jZXMKKwk8dGFnPiBvYmplY3RzIHRoYXQgcG9pbnQgYXQgYSA8Y29tbWl0Pi4KKworPHR5cGU+OjoKKwlJbmRpY2F0ZXMgdGhhdCBhbiBvYmplY3QgdHlwZSBpcyByZXF1aXJlZC4KKwlDdXJyZW50bHkgb25lIG9mOiBgYmxvYmAsIGB0cmVlYCwgYGNvbW1pdGAsIG9yIGB0YWdgLgorCis8ZmlsZT46OgorCUluZGljYXRlcyBhIGZpbGVuYW1lIC0gYWxtb3N0IGFsd2F5cyByZWxhdGl2ZSB0byB0aGUKKwlyb290IG9mIHRoZSB0cmVlIHN0cnVjdHVyZSBgR0lUX0lOREVYX0ZJTEVgIGRlc2NyaWJlcy4KKworU3ltYm9saWMgSWRlbnRpZmllcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbnkgZ2l0IGNvbW1hbmQgYWNjZXB0aW5nIGFueSA8b2JqZWN0PiBjYW4gYWxzbyB1c2UgdGhlIGZvbGxvd2luZworc3ltYm9saWMgbm90YXRpb246CisKK0hFQUQ6OgorCWluZGljYXRlcyB0aGUgaGVhZCBvZiB0aGUgY3VycmVudCBicmFuY2guCisKKzx0YWc+OjoKKwlhIHZhbGlkIHRhZyAnbmFtZScKKwkoaS5lLiBhIGByZWZzL3RhZ3MvPHRhZz5gIHJlZmVyZW5jZSkuCisKKzxoZWFkPjo6CisJYSB2YWxpZCBoZWFkICduYW1lJworCShpLmUuIGEgYHJlZnMvaGVhZHMvPGhlYWQ+YCByZWZlcmVuY2UpLgorCitGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCBvYmplY3QgbmFtZXMsIHNlZQorIlNQRUNJRllJTkcgUkVWSVNJT05TIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddLgorCisKK0ZpbGUvRGlyZWN0b3J5IFN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BsZWFzZSBzZWUgdGhlIGxpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0gZG9jdW1lbnQuCisKK1JlYWQgbGlua2dpdDpnaXRob29rc1s1XSBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IGVhY2ggaG9vay4KKworSGlnaGVyIGxldmVsIFNDTXMgbWF5IHByb3ZpZGUgYW5kIG1hbmFnZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRoZQorYCRHSVRfRElSYC4KKworCitUZXJtaW5vbG9neQorLS0tLS0tLS0tLS0KK1BsZWFzZSBzZWUgbGlua2dpdDpnaXRnbG9zc2FyeVs3XS4KKworCitFbnZpcm9ubWVudCBWYXJpYWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVmFyaW91cyBnaXQgY29tbWFuZHMgdXNlIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorCitUaGUgZ2l0IFJlcG9zaXRvcnkKK35+fn5+fn5+fn5+fn5+fn5+fgorVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFwcGx5IHRvICdhbGwnIGNvcmUgZ2l0IGNvbW1hbmRzLiBOYjogaXQKK2lzIHdvcnRoIG5vdGluZyB0aGF0IHRoZXkgbWF5IGJlIHVzZWQvb3ZlcnJpZGRlbiBieSBTQ01TIHNpdHRpbmcgYWJvdmUKK2dpdCBzbyB0YWtlIGNhcmUgaWYgdXNpbmcgQ29naXRvIGV0Yy4KKworJ0dJVF9JTkRFWF9GSUxFJzo6CisJVGhpcyBlbnZpcm9ubWVudCBhbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2YgYW4gYWx0ZXJuYXRlCisJaW5kZXggZmlsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgb2YgYCRHSVRfRElSL2luZGV4YAorCWlzIHVzZWQuCisKKydHSVRfT0JKRUNUX0RJUkVDVE9SWSc6OgorCUlmIHRoZSBvYmplY3Qgc3RvcmFnZSBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkIHZpYSB0aGlzCisJZW52aXJvbm1lbnQgdmFyaWFibGUgdGhlbiB0aGUgc2hhMSBkaXJlY3RvcmllcyBhcmUgY3JlYXRlZAorCXVuZGVybmVhdGggLSBvdGhlcndpc2UgdGhlIGRlZmF1bHQgYCRHSVRfRElSL29iamVjdHNgCisJZGlyZWN0b3J5IGlzIHVzZWQuCisKKydHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUyc6OgorCUR1ZSB0byB0aGUgaW1tdXRhYmxlIG5hdHVyZSBvZiBnaXQgb2JqZWN0cywgb2xkIG9iamVjdHMgY2FuIGJlCisJYXJjaGl2ZWQgaW50byBzaGFyZWQsIHJlYWQtb25seSBkaXJlY3Rvcmllcy4gVGhpcyB2YXJpYWJsZQorCXNwZWNpZmllcyBhICI6IiBzZXBhcmF0ZWQgKG9uIFdpbmRvd3MgIjsiIHNlcGFyYXRlZCkgbGlzdAorCW9mIGdpdCBvYmplY3QgZGlyZWN0b3JpZXMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBnaXQKKwlvYmplY3RzLiBOZXcgb2JqZWN0cyB3aWxsIG5vdCBiZSB3cml0dGVuIHRvIHRoZXNlIGRpcmVjdG9yaWVzLgorCisnR0lUX0RJUic6OgorCUlmIHRoZSAnR0lUX0RJUicgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRoZW4gaXQKKwlzcGVjaWZpZXMgYSBwYXRoIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGAuZ2l0YAorCWZvciB0aGUgYmFzZSBvZiB0aGUgcmVwb3NpdG9yeS4KKworJ0dJVF9XT1JLX1RSRUUnOjoKKwlTZXQgdGhlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZS4gIFRoZSB2YWx1ZSB3aWxsIG5vdCBiZQorCXVzZWQgaW4gY29tYmluYXRpb24gd2l0aCByZXBvc2l0b3JpZXMgZm91bmQgYXV0b21hdGljYWxseSBpbgorCWEgLmdpdCBkaXJlY3RvcnkgKGkuZS4gJEdJVF9ESVIgaXMgbm90IHNldCkuCisJVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5IHRoZSAnLS13b3JrLXRyZWUnIGNvbW1hbmQgbGluZQorCW9wdGlvbiBhbmQgdGhlIGNvcmUud29ya3RyZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworJ0dJVF9OQU1FU1BBQ0UnOjoKKwlTZXQgdGhlIGdpdCBuYW1lc3BhY2U7IHNlZSBsaW5rZ2l0OmdpdG5hbWVzcGFjZXNbN10gZm9yIGRldGFpbHMuCisJVGhlICctLW5hbWVzcGFjZScgY29tbWFuZC1saW5lIG9wdGlvbiBhbHNvIHNldHMgdGhpcyB2YWx1ZS4KKworJ0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTJzo6CisJVGhpcyBzaG91bGQgYmUgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBhYnNvbHV0ZSBwYXRocy4KKwlJZiBzZXQsIGl0IGlzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0aGF0IGdpdCBzaG91bGQgbm90IGNoZGlyCisJdXAgaW50byB3aGlsZSBsb29raW5nIGZvciBhIHJlcG9zaXRvcnkgZGlyZWN0b3J5LgorCUl0IHdpbGwgbm90IGV4Y2x1ZGUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3IKKwlhIEdJVF9ESVIgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgaW4gdGhlIGVudmlyb25tZW50LgorCShVc2VmdWwgZm9yIGV4Y2x1ZGluZyBzbG93LWxvYWRpbmcgbmV0d29yayBkaXJlY3Rvcmllcy4pCisKKydHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNJzo6CisJV2hlbiBydW4gaW4gYSBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCBoYXZlICIuZ2l0IiByZXBvc2l0b3J5CisJZGlyZWN0b3J5LCBnaXQgdHJpZXMgdG8gZmluZCBzdWNoIGEgZGlyZWN0b3J5IGluIHRoZSBwYXJlbnQKKwlkaXJlY3RvcmllcyB0byBmaW5kIHRoZSB0b3Agb2YgdGhlIHdvcmtpbmcgdHJlZSwgYnV0IGJ5IGRlZmF1bHQgaXQKKwlkb2VzIG5vdCBjcm9zcyBmaWxlc3lzdGVtIGJvdW5kYXJpZXMuICBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlCisJY2FuIGJlIHNldCB0byB0cnVlIHRvIHRlbGwgZ2l0IG5vdCB0byBzdG9wIGF0IGZpbGVzeXN0ZW0KKwlib3VuZGFyaWVzLiAgTGlrZSAnR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMnLCB0aGlzIHdpbGwgbm90IGFmZmVjdAorCWFuIGV4cGxpY2l0IHJlcG9zaXRvcnkgZGlyZWN0b3J5IHNldCB2aWEgJ0dJVF9ESVInIG9yIG9uIHRoZQorCWNvbW1hbmQgbGluZS4KKworZ2l0IENvbW1pdHMKK35+fn5+fn5+fn5+CisnR0lUX0FVVEhPUl9OQU1FJzo6CisnR0lUX0FVVEhPUl9FTUFJTCc6OgorJ0dJVF9BVVRIT1JfREFURSc6OgorJ0dJVF9DT01NSVRURVJfTkFNRSc6OgorJ0dJVF9DT01NSVRURVJfRU1BSUwnOjoKKydHSVRfQ09NTUlUVEVSX0RBVEUnOjoKKydFTUFJTCc6OgorCXNlZSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXQorCitnaXQgRGlmZnMKK35+fn5+fn5+fgorJ0dJVF9ESUZGX09QVFMnOjoKKwlPbmx5IHZhbGlkIHNldHRpbmcgaXMgIi0tdW5pZmllZD0/PyIgb3IgIi11Pz8iIHRvIHNldCB0aGUKKwludW1iZXIgb2YgY29udGV4dCBsaW5lcyBzaG93biB3aGVuIGEgdW5pZmllZCBkaWZmIGlzIGNyZWF0ZWQuCisJVGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYW55ICItVSIgb3IgIi0tdW5pZmllZCIgb3B0aW9uCisJdmFsdWUgcGFzc2VkIG9uIHRoZSBnaXQgZGlmZiBjb21tYW5kIGxpbmUuCisKKydHSVRfRVhURVJOQUxfRElGRic6OgorCVdoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdHSVRfRVhURVJOQUxfRElGRicgaXMgc2V0LCB0aGUKKwlwcm9ncmFtIG5hbWVkIGJ5IGl0IGlzIGNhbGxlZCwgaW5zdGVhZCBvZiB0aGUgZGlmZiBpbnZvY2F0aW9uCisJZGVzY3JpYmVkIGFib3ZlLiAgRm9yIGEgcGF0aCB0aGF0IGlzIGFkZGVkLCByZW1vdmVkLCBvciBtb2RpZmllZCwKKyAgICAgICAgJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBjYWxsZWQgd2l0aCA3IHBhcmFtZXRlcnM6CisKKwlwYXRoIG9sZC1maWxlIG9sZC1oZXggb2xkLW1vZGUgbmV3LWZpbGUgbmV3LWhleCBuZXctbW9kZQorKword2hlcmU6CisKKwk8b2xkfG5ldz4tZmlsZTo6IGFyZSBmaWxlcyBHSVRfRVhURVJOQUxfRElGRiBjYW4gdXNlIHRvIHJlYWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgb2YgPG9sZHxuZXc+LAorCTxvbGR8bmV3Pi1oZXg6OiBhcmUgdGhlIDQwLWhleGRpZ2l0IFNIQTEgaGFzaGVzLAorCTxvbGR8bmV3Pi1tb2RlOjogYXJlIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlsZSBtb2Rlcy4KKysKK1RoZSBmaWxlIHBhcmFtZXRlcnMgY2FuIHBvaW50IGF0IHRoZSB1c2VyJ3Mgd29ya2luZyBmaWxlCisoZS5nLiBgbmV3LWZpbGVgIGluICJnaXQtZGlmZi1maWxlcyIpLCBgL2Rldi9udWxsYCAoZS5nLiBgb2xkLWZpbGVgCit3aGVuIGEgbmV3IGZpbGUgaXMgYWRkZWQpLCBvciBhIHRlbXBvcmFyeSBmaWxlIChlLmcuIGBvbGQtZmlsZWAgaW4gdGhlCitpbmRleCkuICAnR0lUX0VYVEVSTkFMX0RJRkYnIHNob3VsZCBub3Qgd29ycnkgYWJvdXQgdW5saW5raW5nIHRoZQordGVtcG9yYXJ5IGZpbGUgLS0tIGl0IGlzIHJlbW92ZWQgd2hlbiAnR0lUX0VYVEVSTkFMX0RJRkYnIGV4aXRzLgorKworRm9yIGEgcGF0aCB0aGF0IGlzIHVubWVyZ2VkLCAnR0lUX0VYVEVSTkFMX0RJRkYnIGlzIGNhbGxlZCB3aXRoIDEKK3BhcmFtZXRlciwgPHBhdGg+LgorCitvdGhlcgorfn5+fn4KKydHSVRfTUVSR0VfVkVSQk9TSVRZJzo6CisJQSBudW1iZXIgY29udHJvbGxpbmcgdGhlIGFtb3VudCBvZiBvdXRwdXQgc2hvd24gYnkKKwl0aGUgcmVjdXJzaXZlIG1lcmdlIHN0cmF0ZWd5LiAgT3ZlcnJpZGVzIG1lcmdlLnZlcmJvc2l0eS4KKwlTZWUgbGlua2dpdDpnaXQtbWVyZ2VbMV0KKworJ0dJVF9QQUdFUic6OgorCVRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzIGAkUEFHRVJgLiBJZiBpdCBpcyBzZXQKKwl0byBhbiBlbXB0eSBzdHJpbmcgb3IgdG8gdGhlIHZhbHVlICJjYXQiLCBnaXQgd2lsbCBub3QgbGF1bmNoCisJYSBwYWdlci4gIFNlZSBhbHNvIHRoZSBgY29yZS5wYWdlcmAgb3B0aW9uIGluCisJbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCisnR0lUX0VESVRPUic6OgorCVRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzIGAkRURJVE9SYCBhbmQgYCRWSVNVQUxgLgorCUl0IGlzIHVzZWQgYnkgc2V2ZXJhbCBnaXQgY29tbWFuZHMgd2hlbiwgb24gaW50ZXJhY3RpdmUgbW9kZSwKKwlhbiBlZGl0b3IgaXMgdG8gYmUgbGF1bmNoZWQuIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LXZhclsxXQorCWFuZCB0aGUgYGNvcmUuZWRpdG9yYCBvcHRpb24gaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCisnR0lUX1NTSCc6OgorCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRoZW4gJ2dpdCBmZXRjaCcKKwlhbmQgJ2dpdCBwdXNoJyB3aWxsIHVzZSB0aGlzIGNvbW1hbmQgaW5zdGVhZAorCW9mICdzc2gnIHdoZW4gdGhleSBuZWVkIHRvIGNvbm5lY3QgdG8gYSByZW1vdGUgc3lzdGVtLgorCVRoZSAnJEdJVF9TU0gnIGNvbW1hbmQgd2lsbCBiZSBnaXZlbiBleGFjdGx5IHR3byBhcmd1bWVudHM6CisJdGhlICd1c2VybmFtZUBob3N0JyAob3IganVzdCAnaG9zdCcpIGZyb20gdGhlIFVSTCBhbmQgdGhlCisJc2hlbGwgY29tbWFuZCB0byBleGVjdXRlIG9uIHRoYXQgcmVtb3RlIHN5c3RlbS4KKysKK1RvIHBhc3Mgb3B0aW9ucyB0byB0aGUgcHJvZ3JhbSB0aGF0IHlvdSB3YW50IHRvIGxpc3QgaW4gR0lUX1NTSAoreW91IHdpbGwgbmVlZCB0byB3cmFwIHRoZSBwcm9ncmFtIGFuZCBvcHRpb25zIGludG8gYSBzaGVsbCBzY3JpcHQsCit0aGVuIHNldCBHSVRfU1NIIHRvIHJlZmVyIHRvIHRoZSBzaGVsbCBzY3JpcHQuCisrCitVc3VhbGx5IGl0IGlzIGVhc2llciB0byBjb25maWd1cmUgYW55IGRlc2lyZWQgb3B0aW9ucyB0aHJvdWdoIHlvdXIKK3BlcnNvbmFsIGAuc3NoL2NvbmZpZ2AgZmlsZS4gIFBsZWFzZSBjb25zdWx0IHlvdXIgc3NoIGRvY3VtZW50YXRpb24KK2ZvciBmdXJ0aGVyIGRldGFpbHMuCisKKydHSVRfQVNLUEFTUyc6OgorCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCB0aGVuIGdpdCBjb21tYW5kcyB3aGljaCBuZWVkIHRvCisJYWNxdWlyZSBwYXNzd29yZHMgb3IgcGFzc3BocmFzZXMgKGUuZy4gZm9yIEhUVFAgb3IgSU1BUCBhdXRoZW50aWNhdGlvbikKKwl3aWxsIGNhbGwgdGhpcyBwcm9ncmFtIHdpdGggYSBzdWl0YWJsZSBwcm9tcHQgYXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50CisJYW5kIHJlYWQgdGhlIHBhc3N3b3JkIGZyb20gaXRzIFNURE9VVC4gU2VlIGFsc28gdGhlICdjb3JlLmFza3Bhc3MnCisJb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworJ0dJVF9GTFVTSCc6OgorCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvICIxIiwgdGhlbiBjb21tYW5kcyBzdWNoCisJYXMgJ2dpdCBibGFtZScgKGluIGluY3JlbWVudGFsIG1vZGUpLCAnZ2l0IHJldi1saXN0JywgJ2dpdCBsb2cnLAorCWFuZCAnZ2l0IHdoYXRjaGFuZ2VkJyB3aWxsIGZvcmNlIGEgZmx1c2ggb2YgdGhlIG91dHB1dCBzdHJlYW0KKwlhZnRlciBlYWNoIGNvbW1pdC1vcmllbnRlZCByZWNvcmQgaGF2ZSBiZWVuIGZsdXNoZWQuICAgSWYgdGhpcworCXZhcmlhYmxlIGlzIHNldCB0byAiMCIsIHRoZSBvdXRwdXQgb2YgdGhlc2UgY29tbWFuZHMgd2lsbCBiZSBkb25lCisJdXNpbmcgY29tcGxldGVseSBidWZmZXJlZCBJL08uICAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcworCW5vdCBzZXQsIGdpdCB3aWxsIGNob29zZSBidWZmZXJlZCBvciByZWNvcmQtb3JpZW50ZWQgZmx1c2hpbmcKKwliYXNlZCBvbiB3aGV0aGVyIHN0ZG91dCBhcHBlYXJzIHRvIGJlIHJlZGlyZWN0ZWQgdG8gYSBmaWxlIG9yIG5vdC4KKworJ0dJVF9UUkFDRSc6OgorCUlmIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICIxIiwgIjIiIG9yICJ0cnVlIiAoY29tcGFyaXNvbgorCWlzIGNhc2UgaW5zZW5zaXRpdmUpLCBnaXQgd2lsbCBwcmludCBgdHJhY2U6YCBtZXNzYWdlcyBvbgorCXN0ZGVyciB0ZWxsaW5nIGFib3V0IGFsaWFzIGV4cGFuc2lvbiwgYnVpbHQtaW4gY29tbWFuZAorCWV4ZWN1dGlvbiBhbmQgZXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24uCisJSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gYW4gaW50ZWdlciB2YWx1ZSBncmVhdGVyIHRoYW4gMQorCWFuZCBsb3dlciB0aGFuIDEwIChzdHJpY3RseSkgdGhlbiBnaXQgd2lsbCBpbnRlcnByZXQgdGhpcworCXZhbHVlIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGFuZCB3aWxsIHRyeSB0byB3cml0ZSB0aGUKKwl0cmFjZSBtZXNzYWdlcyBpbnRvIHRoaXMgZmlsZSBkZXNjcmlwdG9yLgorCUFsdGVybmF0aXZlbHksIGlmIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIGFuIGFic29sdXRlIHBhdGgKKwkoc3RhcnRpbmcgd2l0aCBhICcvJyBjaGFyYWN0ZXIpLCBnaXQgd2lsbCBpbnRlcnByZXQgdGhpcworCWFzIGEgZmlsZSBwYXRoIGFuZCB3aWxsIHRyeSB0byB3cml0ZSB0aGUgdHJhY2UgbWVzc2FnZXMKKwlpbnRvIGl0LgorCitEaXNjdXNzaW9uW1tEaXNjdXNzaW9uXV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb3JlIGRldGFpbCBvbiB0aGUgZm9sbG93aW5nIGlzIGF2YWlsYWJsZSBmcm9tIHRoZQorbGluazp1c2VyLW1hbnVhbC5odG1sI2dpdC1jb25jZXB0c1tnaXQgY29uY2VwdHMgY2hhcHRlciBvZiB0aGUKK3VzZXItbWFudWFsXSBhbmQgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLgorCitBIGdpdCBwcm9qZWN0IG5vcm1hbGx5IGNvbnNpc3RzIG9mIGEgd29ya2luZyBkaXJlY3Rvcnkgd2l0aCBhICIuZ2l0Igorc3ViZGlyZWN0b3J5IGF0IHRoZSB0b3AgbGV2ZWwuICBUaGUgLmdpdCBkaXJlY3RvcnkgY29udGFpbnMsIGFtb25nIG90aGVyCit0aGluZ3MsIGEgY29tcHJlc3NlZCBvYmplY3QgZGF0YWJhc2UgcmVwcmVzZW50aW5nIHRoZSBjb21wbGV0ZSBoaXN0b3J5CitvZiB0aGUgcHJvamVjdCwgYW4gImluZGV4IiBmaWxlIHdoaWNoIGxpbmtzIHRoYXQgaGlzdG9yeSB0byB0aGUgY3VycmVudAorY29udGVudHMgb2YgdGhlIHdvcmtpbmcgdHJlZSwgYW5kIG5hbWVkIHBvaW50ZXJzIGludG8gdGhhdCBoaXN0b3J5IHN1Y2gKK2FzIHRhZ3MgYW5kIGJyYW5jaCBoZWFkcy4KKworVGhlIG9iamVjdCBkYXRhYmFzZSBjb250YWlucyBvYmplY3RzIG9mIHRocmVlIG1haW4gdHlwZXM6IGJsb2JzLCB3aGljaAoraG9sZCBmaWxlIGRhdGE7IHRyZWVzLCB3aGljaCBwb2ludCB0byBibG9icyBhbmQgb3RoZXIgdHJlZXMgdG8gYnVpbGQgdXAKK2RpcmVjdG9yeSBoaWVyYXJjaGllczsgYW5kIGNvbW1pdHMsIHdoaWNoIGVhY2ggcmVmZXJlbmNlIGEgc2luZ2xlIHRyZWUKK2FuZCBzb21lIG51bWJlciBvZiBwYXJlbnQgY29tbWl0cy4KKworVGhlIGNvbW1pdCwgZXF1aXZhbGVudCB0byB3aGF0IG90aGVyIHN5c3RlbXMgY2FsbCBhICJjaGFuZ2VzZXQiIG9yCisidmVyc2lvbiIsIHJlcHJlc2VudHMgYSBzdGVwIGluIHRoZSBwcm9qZWN0J3MgaGlzdG9yeSwgYW5kIGVhY2ggcGFyZW50CityZXByZXNlbnRzIGFuIGltbWVkaWF0ZWx5IHByZWNlZGluZyBzdGVwLiAgQ29tbWl0cyB3aXRoIG1vcmUgdGhhbiBvbmUKK3BhcmVudCByZXByZXNlbnQgbWVyZ2VzIG9mIGluZGVwZW5kZW50IGxpbmVzIG9mIGRldmVsb3BtZW50LgorCitBbGwgb2JqZWN0cyBhcmUgbmFtZWQgYnkgdGhlIFNIQTEgaGFzaCBvZiB0aGVpciBjb250ZW50cywgbm9ybWFsbHkKK3dyaXR0ZW4gYXMgYSBzdHJpbmcgb2YgNDAgaGV4IGRpZ2l0cy4gIFN1Y2ggbmFtZXMgYXJlIGdsb2JhbGx5IHVuaXF1ZS4KK1RoZSBlbnRpcmUgaGlzdG9yeSBsZWFkaW5nIHVwIHRvIGEgY29tbWl0IGNhbiBiZSB2b3VjaGVkIGZvciBieSBzaWduaW5nCitqdXN0IHRoYXQgY29tbWl0LiAgQSBmb3VydGggb2JqZWN0IHR5cGUsIHRoZSB0YWcsIGlzIHByb3ZpZGVkIGZvciB0aGlzCitwdXJwb3NlLgorCitXaGVuIGZpcnN0IGNyZWF0ZWQsIG9iamVjdHMgYXJlIHN0b3JlZCBpbiBpbmRpdmlkdWFsIGZpbGVzLCBidXQgZm9yCitlZmZpY2llbmN5IG1heSBsYXRlciBiZSBjb21wcmVzc2VkIHRvZ2V0aGVyIGludG8gInBhY2sgZmlsZXMiLgorCitOYW1lZCBwb2ludGVycyBjYWxsZWQgcmVmcyBtYXJrIGludGVyZXN0aW5nIHBvaW50cyBpbiBoaXN0b3J5LiAgQSByZWYKK21heSBjb250YWluIHRoZSBTSEExIG5hbWUgb2YgYW4gb2JqZWN0IG9yIHRoZSBuYW1lIG9mIGFub3RoZXIgcmVmLiAgUmVmcword2l0aCBuYW1lcyBiZWdpbm5pbmcgYHJlZi9oZWFkL2AgY29udGFpbiB0aGUgU0hBMSBuYW1lIG9mIHRoZSBtb3N0CityZWNlbnQgY29tbWl0IChvciAiaGVhZCIpIG9mIGEgYnJhbmNoIHVuZGVyIGRldmVsb3BtZW50LiAgU0hBMSBuYW1lcyBvZgordGFncyBvZiBpbnRlcmVzdCBhcmUgc3RvcmVkIHVuZGVyIGByZWYvdGFncy9gLiAgQSBzcGVjaWFsIHJlZiBuYW1lZAorYEhFQURgIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoLgorCitUaGUgaW5kZXggZmlsZSBpcyBpbml0aWFsaXplZCB3aXRoIGEgbGlzdCBvZiBhbGwgcGF0aHMgYW5kLCBmb3IgZWFjaAorcGF0aCwgYSBibG9iIG9iamVjdCBhbmQgYSBzZXQgb2YgYXR0cmlidXRlcy4gIFRoZSBibG9iIG9iamVjdCByZXByZXNlbnRzCit0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXMgb2YgdGhlIGhlYWQgb2YgdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhlCithdHRyaWJ1dGVzIChsYXN0IG1vZGlmaWVkIHRpbWUsIHNpemUsIGV0Yy4pIGFyZSB0YWtlbiBmcm9tIHRoZQorY29ycmVzcG9uZGluZyBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUuICBTdWJzZXF1ZW50IGNoYW5nZXMgdG8gdGhlCit3b3JraW5nIHRyZWUgY2FuIGJlIGZvdW5kIGJ5IGNvbXBhcmluZyB0aGVzZSBhdHRyaWJ1dGVzLiAgVGhlIGluZGV4IG1heQorYmUgdXBkYXRlZCB3aXRoIG5ldyBjb250ZW50LCBhbmQgbmV3IGNvbW1pdHMgbWF5IGJlIGNyZWF0ZWQgZnJvbSB0aGUKK2NvbnRlbnQgc3RvcmVkIGluIHRoZSBpbmRleC4KKworVGhlIGluZGV4IGlzIGFsc28gY2FwYWJsZSBvZiBzdG9yaW5nIG11bHRpcGxlIGVudHJpZXMgKGNhbGxlZCAic3RhZ2VzIikKK2ZvciBhIGdpdmVuIHBhdGhuYW1lLiAgVGhlc2Ugc3RhZ2VzIGFyZSB1c2VkIHRvIGhvbGQgdGhlIHZhcmlvdXMKK3VubWVyZ2VkIHZlcnNpb24gb2YgYSBmaWxlIHdoZW4gYSBtZXJnZSBpcyBpbiBwcm9ncmVzcy4KKworRlVSVEhFUiBET0NVTUVOVEFUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VlIHRoZSByZWZlcmVuY2VzIGluIHRoZSAiZGVzY3JpcHRpb24iIHNlY3Rpb24gdG8gZ2V0IHN0YXJ0ZWQKK3VzaW5nIGdpdC4gIFRoZSBmb2xsb3dpbmcgaXMgcHJvYmFibHkgbW9yZSBkZXRhaWwgdGhhbiBuZWNlc3NhcnkKK2ZvciBhIGZpcnN0LXRpbWUgdXNlci4KKworVGhlIGxpbms6dXNlci1tYW51YWwuaHRtbCNnaXQtY29uY2VwdHNbZ2l0IGNvbmNlcHRzIGNoYXB0ZXIgb2YgdGhlCit1c2VyLW1hbnVhbF0gYW5kIGxpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSBib3RoIHByb3ZpZGUKK2ludHJvZHVjdGlvbnMgdG8gdGhlIHVuZGVybHlpbmcgZ2l0IGFyY2hpdGVjdHVyZS4KKworU2VlIGxpbmtnaXQ6Z2l0d29ya2Zsb3dzWzddIGZvciBhbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3MuCisKK1NlZSBhbHNvIHRoZSBsaW5rOmhvd3RvLWluZGV4Lmh0bWxbaG93dG9dIGRvY3VtZW50cyBmb3Igc29tZSB1c2VmdWwKK2V4YW1wbGVzLgorCitUaGUgaW50ZXJuYWxzIGFyZSBkb2N1bWVudGVkIGluIHRoZQorbGluazp0ZWNobmljYWwvYXBpLWluZGV4Lmh0bWxbR0lUIEFQSSBkb2N1bWVudGF0aW9uXS4KKworVXNlcnMgbWlncmF0aW5nIGZyb20gQ1ZTIG1heSBhbHNvIHdhbnQgdG8KK3JlYWQgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLgorCisKK0F1dGhvcnMKKy0tLS0tLS0KK0dpdCB3YXMgc3RhcnRlZCBieSBMaW51cyBUb3J2YWxkcywgYW5kIGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEp1bmlvCitDIEhhbWFuby4gTnVtZXJvdXMgY29udHJpYnV0aW9ucyBoYXZlIGNvbWUgZnJvbSB0aGUgZ2l0IG1haWxpbmcgbGlzdAorPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LiBGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2YgY29udHJpYnV0b3JzLCBzZWUKK2h0dHA6Ly9naXQtc2NtLmNvbS9hYm91dC4gSWYgeW91IGhhdmUgYSBjbG9uZSBvZiBnaXQuZ2l0IGl0c2VsZiwgdGhlCitvdXRwdXQgb2YgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gYW5kIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdIGNhbiBzaG93IHlvdQordGhlIGF1dGhvcnMgZm9yIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBwcm9qZWN0LgorCitSZXBvcnRpbmcgQnVncworLS0tLS0tLS0tLS0tLS0KKworUmVwb3J0IGJ1Z3MgdG8gdGhlIEdpdCBtYWlsaW5nIGxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+IHdoZXJlIHRoZQorZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGlzIHByaW1hcmlseSBkb25lLiAgWW91IGRvIG5vdCBoYXZlIHRvIGJlCitzdWJzY3JpYmVkIHRvIHRoZSBsaXN0IHRvIHNlbmQgYSBtZXNzYWdlIHRoZXJlLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN10sIGxpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbms6ZXZlcnlkYXkuaHRtbFtFdmVyeWRheSBHaXRdLCBsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10sCitsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLCBsaW5rZ2l0OmdpdGNvcmUtdHV0b3JpYWxbN10sCitsaW5rZ2l0OmdpdGNsaVs3XSwgbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0sCitsaW5rZ2l0OmdpdHdvcmtmbG93c1s3XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDJkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0CkBAIC0wLDAgKzEsOTk2IEBACitnaXRhdHRyaWJ1dGVzKDUpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGF0dHJpYnV0ZXMgLSBkZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoCisKK1NZTk9QU0lTCistLS0tLS0tLQorJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzLCAuZ2l0YXR0cmlidXRlcworCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitBIGBnaXRhdHRyaWJ1dGVzYCBmaWxlIGlzIGEgc2ltcGxlIHRleHQgZmlsZSB0aGF0IGdpdmVzCitgYXR0cmlidXRlc2AgdG8gcGF0aG5hbWVzLgorCitFYWNoIGxpbmUgaW4gYGdpdGF0dHJpYnV0ZXNgIGZpbGUgaXMgb2YgZm9ybToKKworCXBhdHRlcm4JYXR0cjEgYXR0cjIgLi4uCisKK1RoYXQgaXMsIGEgcGF0dGVybiBmb2xsb3dlZCBieSBhbiBhdHRyaWJ1dGVzIGxpc3QsCitzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZXMuICBXaGVuIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlCitwYXRoIGluIHF1ZXN0aW9uLCB0aGUgYXR0cmlidXRlcyBsaXN0ZWQgb24gdGhlIGxpbmUgYXJlIGdpdmVuIHRvCit0aGUgcGF0aC4KKworRWFjaCBhdHRyaWJ1dGUgY2FuIGJlIGluIG9uZSBvZiB0aGVzZSBzdGF0ZXMgZm9yIGEgZ2l2ZW4gcGF0aDoKKworU2V0OjoKKworCVRoZSBwYXRoIGhhcyB0aGUgYXR0cmlidXRlIHdpdGggc3BlY2lhbCB2YWx1ZSAidHJ1ZSI7CisJdGhpcyBpcyBzcGVjaWZpZWQgYnkgbGlzdGluZyBvbmx5IHRoZSBuYW1lIG9mIHRoZQorCWF0dHJpYnV0ZSBpbiB0aGUgYXR0cmlidXRlIGxpc3QuCisKK1Vuc2V0OjoKKworCVRoZSBwYXRoIGhhcyB0aGUgYXR0cmlidXRlIHdpdGggc3BlY2lhbCB2YWx1ZSAiZmFsc2UiOworCXRoaXMgaXMgc3BlY2lmaWVkIGJ5IGxpc3RpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQorCXByZWZpeGVkIHdpdGggYSBkYXNoIGAtYCBpbiB0aGUgYXR0cmlidXRlIGxpc3QuCisKK1NldCB0byBhIHZhbHVlOjoKKworCVRoZSBwYXRoIGhhcyB0aGUgYXR0cmlidXRlIHdpdGggc3BlY2lmaWVkIHN0cmluZyB2YWx1ZTsKKwl0aGlzIGlzIHNwZWNpZmllZCBieSBsaXN0aW5nIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKKwlmb2xsb3dlZCBieSBhbiBlcXVhbCBzaWduIGA9YCBhbmQgaXRzIHZhbHVlIGluIHRoZQorCWF0dHJpYnV0ZSBsaXN0LgorCitVbnNwZWNpZmllZDo6CisKKwlObyBwYXR0ZXJuIG1hdGNoZXMgdGhlIHBhdGgsIGFuZCBub3RoaW5nIHNheXMgaWYKKwl0aGUgcGF0aCBoYXMgb3IgZG9lcyBub3QgaGF2ZSB0aGUgYXR0cmlidXRlLCB0aGUKKwlhdHRyaWJ1dGUgZm9yIHRoZSBwYXRoIGlzIHNhaWQgdG8gYmUgVW5zcGVjaWZpZWQuCisKK1doZW4gbW9yZSB0aGFuIG9uZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIHBhdGgsIGEgbGF0ZXIgbGluZQorb3ZlcnJpZGVzIGFuIGVhcmxpZXIgbGluZS4gIFRoaXMgb3ZlcnJpZGluZyBpcyBkb25lIHBlcgorYXR0cmlidXRlLiAgVGhlIHJ1bGVzIGhvdyB0aGUgcGF0dGVybiBtYXRjaGVzIHBhdGhzIGFyZSB0aGUKK3NhbWUgYXMgaW4gYC5naXRpZ25vcmVgIGZpbGVzOyBzZWUgbGlua2dpdDpnaXRpZ25vcmVbNV0uCisKK1doZW4gZGVjaWRpbmcgd2hhdCBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCB0byBhIHBhdGgsIGdpdAorY29uc3VsdHMgYCRHSVRfRElSL2luZm8vYXR0cmlidXRlc2AgZmlsZSAod2hpY2ggaGFzIHRoZSBoaWdoZXN0CitwcmVjZWRlbmNlKSwgYC5naXRhdHRyaWJ1dGVzYCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKK3BhdGggaW4gcXVlc3Rpb24sIGFuZCBpdHMgcGFyZW50IGRpcmVjdG9yaWVzIHVwIHRvIHRoZSB0b3BsZXZlbCBvZiB0aGUKK3dvcmsgdHJlZSAodGhlIGZ1cnRoZXIgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGAuZ2l0YXR0cmlidXRlc2AKK2lzIGZyb20gdGhlIHBhdGggaW4gcXVlc3Rpb24sIHRoZSBsb3dlciBpdHMgcHJlY2VkZW5jZSkuIEZpbmFsbHkKK2dsb2JhbCBhbmQgc3lzdGVtLXdpZGUgZmlsZXMgYXJlIGNvbnNpZGVyZWQgKHRoZXkgaGF2ZSB0aGUgbG93ZXN0CitwcmVjZWRlbmNlKS4KKworV2hlbiB0aGUgYC5naXRhdHRyaWJ1dGVzYCBmaWxlIGlzIG1pc3NpbmcgZnJvbSB0aGUgd29yayB0cmVlLCB0aGUKK3BhdGggaW4gdGhlIGluZGV4IGlzIHVzZWQgYXMgYSBmYWxsLWJhY2suICBEdXJpbmcgY2hlY2tvdXQgcHJvY2VzcywKK2AuZ2l0YXR0cmlidXRlc2AgaW4gdGhlIGluZGV4IGlzIHVzZWQgYW5kIHRoZW4gdGhlIGZpbGUgaW4gdGhlCit3b3JraW5nIHRyZWUgaXMgdXNlZCBhcyBhIGZhbGwtYmFjay4KKworSWYgeW91IHdpc2ggdG8gYWZmZWN0IG9ubHkgYSBzaW5nbGUgcmVwb3NpdG9yeSAoaS5lLiwgdG8gYXNzaWduCithdHRyaWJ1dGVzIHRvIGZpbGVzIHRoYXQgYXJlIHBhcnRpY3VsYXIgdG8KK29uZSB1c2VyJ3Mgd29ya2Zsb3cgZm9yIHRoYXQgcmVwb3NpdG9yeSksIHRoZW4KK2F0dHJpYnV0ZXMgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgYCRHSVRfRElSL2luZm8vYXR0cmlidXRlc2AgZmlsZS4KK0F0dHJpYnV0ZXMgd2hpY2ggc2hvdWxkIGJlIHZlcnNpb24tY29udHJvbGxlZCBhbmQgZGlzdHJpYnV0ZWQgdG8gb3RoZXIKK3JlcG9zaXRvcmllcyAoaS5lLiwgYXR0cmlidXRlcyBvZiBpbnRlcmVzdCB0byBhbGwgdXNlcnMpIHNob3VsZCBnbyBpbnRvCitgLmdpdGF0dHJpYnV0ZXNgIGZpbGVzLiBBdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGFmZmVjdCBhbGwgcmVwb3NpdG9yaWVzCitmb3IgYSBzaW5nbGUgdXNlciBzaG91bGQgYmUgcGxhY2VkIGluIGEgZmlsZSBzcGVjaWZpZWQgYnkgdGhlCitgY29yZS5hdHRyaWJ1dGVzZmlsZWAgY29uZmlndXJhdGlvbiBvcHRpb24gKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorSXRzIGRlZmF1bHQgdmFsdWUgaXMgJFhER19DT05GSUdfSE9NRS9naXQvYXR0cmlidXRlcy4gSWYgJFhER19DT05GSUdfSE9NRQoraXMgZWl0aGVyIG5vdCBzZXQgb3IgZW1wdHksICRIT01FLy5jb25maWcvZ2l0L2F0dHJpYnV0ZXMgaXMgdXNlZCBpbnN0ZWFkLgorQXR0cmlidXRlcyBmb3IgYWxsIHVzZXJzIG9uIGEgc3lzdGVtIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlCitgJChwcmVmaXgpL2V0Yy9naXRhdHRyaWJ1dGVzYCBmaWxlLgorCitTb21ldGltZXMgeW91IHdvdWxkIG5lZWQgdG8gb3ZlcnJpZGUgYW4gc2V0dGluZyBvZiBhbiBhdHRyaWJ1dGUKK2ZvciBhIHBhdGggdG8gYFVuc3BlY2lmaWVkYCBzdGF0ZS4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgbGlzdGluZwordGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uIHBvaW50IGAhYC4KKworCitFRkZFQ1RTCistLS0tLS0tCisKK0NlcnRhaW4gb3BlcmF0aW9ucyBieSBnaXQgY2FuIGJlIGluZmx1ZW5jZWQgYnkgYXNzaWduaW5nCitwYXJ0aWN1bGFyIGF0dHJpYnV0ZXMgdG8gYSBwYXRoLiAgQ3VycmVudGx5LCB0aGUgZm9sbG93aW5nCitvcGVyYXRpb25zIGFyZSBhdHRyaWJ1dGVzLWF3YXJlLgorCitDaGVja2luZy1vdXQgYW5kIGNoZWNraW5nLWluCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXNlIGF0dHJpYnV0ZXMgYWZmZWN0IGhvdyB0aGUgY29udGVudHMgc3RvcmVkIGluIHRoZQorcmVwb3NpdG9yeSBhcmUgY29waWVkIHRvIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMgd2hlbiBjb21tYW5kcworc3VjaCBhcyAnZ2l0IGNoZWNrb3V0JyBhbmQgJ2dpdCBtZXJnZScgcnVuLiAgVGhleSBhbHNvIGFmZmVjdCBob3cKK2dpdCBzdG9yZXMgdGhlIGNvbnRlbnRzIHlvdSBwcmVwYXJlIGluIHRoZSB3b3JraW5nIHRyZWUgaW4gdGhlCityZXBvc2l0b3J5IHVwb24gJ2dpdCBhZGQnIGFuZCAnZ2l0IGNvbW1pdCcuCisKK2B0ZXh0YAorXl5eXl5eCisKK1RoaXMgYXR0cmlidXRlIGVuYWJsZXMgYW5kIGNvbnRyb2xzIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24uICBXaGVuIGEKK3RleHQgZmlsZSBpcyBub3JtYWxpemVkLCBpdHMgbGluZSBlbmRpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gTEYgaW4gdGhlCityZXBvc2l0b3J5LiAgVG8gY29udHJvbCB3aGF0IGxpbmUgZW5kaW5nIHN0eWxlIGlzIHVzZWQgaW4gdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSwgdXNlIHRoZSBgZW9sYCBhdHRyaWJ1dGUgZm9yIGEgc2luZ2xlIGZpbGUgYW5kIHRoZQorYGNvcmUuZW9sYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvciBhbGwgdGV4dCBmaWxlcy4KKworU2V0OjoKKworCVNldHRpbmcgdGhlIGB0ZXh0YCBhdHRyaWJ1dGUgb24gYSBwYXRoIGVuYWJsZXMgZW5kLW9mLWxpbmUKKwlub3JtYWxpemF0aW9uIGFuZCBtYXJrcyB0aGUgcGF0aCBhcyBhIHRleHQgZmlsZS4gIEVuZC1vZi1saW5lCisJY29udmVyc2lvbiB0YWtlcyBwbGFjZSB3aXRob3V0IGd1ZXNzaW5nIHRoZSBjb250ZW50IHR5cGUuCisKK1Vuc2V0OjoKKworCVVuc2V0dGluZyB0aGUgYHRleHRgIGF0dHJpYnV0ZSBvbiBhIHBhdGggdGVsbHMgZ2l0IG5vdCB0bworCWF0dGVtcHQgYW55IGVuZC1vZi1saW5lIGNvbnZlcnNpb24gdXBvbiBjaGVja2luIG9yIGNoZWNrb3V0LgorCitTZXQgdG8gc3RyaW5nIHZhbHVlICJhdXRvIjo6CisKKwlXaGVuIGB0ZXh0YCBpcyBzZXQgdG8gImF1dG8iLCB0aGUgcGF0aCBpcyBtYXJrZWQgZm9yIGF1dG9tYXRpYworCWVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24uICBJZiBnaXQgZGVjaWRlcyB0aGF0IHRoZSBjb250ZW50IGlzCisJdGV4dCwgaXRzIGxpbmUgZW5kaW5ncyBhcmUgbm9ybWFsaXplZCB0byBMRiBvbiBjaGVja2luLgorCitVbnNwZWNpZmllZDo6CisKKwlJZiB0aGUgYHRleHRgIGF0dHJpYnV0ZSBpcyB1bnNwZWNpZmllZCwgZ2l0IHVzZXMgdGhlCisJYGNvcmUuYXV0b2NybGZgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZGV0ZXJtaW5lIGlmIHRoZQorCWZpbGUgc2hvdWxkIGJlIGNvbnZlcnRlZC4KKworQW55IG90aGVyIHZhbHVlIGNhdXNlcyBnaXQgdG8gYWN0IGFzIGlmIGB0ZXh0YCBoYXMgYmVlbiBsZWZ0Cit1bnNwZWNpZmllZC4KKworYGVvbGAKK15eXl5eCisKK1RoaXMgYXR0cmlidXRlIHNldHMgYSBzcGVjaWZpYyBsaW5lLWVuZGluZyBzdHlsZSB0byBiZSB1c2VkIGluIHRoZQord29ya2luZyBkaXJlY3RvcnkuICBJdCBlbmFibGVzIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24gd2l0aG91dCBhbnkKK2NvbnRlbnQgY2hlY2tzLCBlZmZlY3RpdmVseSBzZXR0aW5nIHRoZSBgdGV4dGAgYXR0cmlidXRlLgorCitTZXQgdG8gc3RyaW5nIHZhbHVlICJjcmxmIjo6CisKKwlUaGlzIHNldHRpbmcgZm9yY2VzIGdpdCB0byBub3JtYWxpemUgbGluZSBlbmRpbmdzIGZvciB0aGlzCisJZmlsZSBvbiBjaGVja2luIGFuZCBjb252ZXJ0IHRoZW0gdG8gQ1JMRiB3aGVuIHRoZSBmaWxlIGlzCisJY2hlY2tlZCBvdXQuCisKK1NldCB0byBzdHJpbmcgdmFsdWUgImxmIjo6CisKKwlUaGlzIHNldHRpbmcgZm9yY2VzIGdpdCB0byBub3JtYWxpemUgbGluZSBlbmRpbmdzIHRvIExGIG9uCisJY2hlY2tpbiBhbmQgcHJldmVudHMgY29udmVyc2lvbiB0byBDUkxGIHdoZW4gdGhlIGZpbGUgaXMKKwljaGVja2VkIG91dC4KKworQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBgY3JsZmAgYXR0cmlidXRlCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgYGNybGZgIGF0dHJpYnV0ZSBpcyBpbnRlcnByZXRlZCBhcworZm9sbG93czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjcmxmCQl0ZXh0CistY3JsZgkJLXRleHQKK2NybGY9aW5wdXQJZW9sPWxmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRW5kLW9mLWxpbmUgY29udmVyc2lvbgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitXaGlsZSBnaXQgbm9ybWFsbHkgbGVhdmVzIGZpbGUgY29udGVudHMgYWxvbmUsIGl0IGNhbiBiZSBjb25maWd1cmVkIHRvCitub3JtYWxpemUgbGluZSBlbmRpbmdzIHRvIExGIGluIHRoZSByZXBvc2l0b3J5IGFuZCwgb3B0aW9uYWxseSwgdG8KK2NvbnZlcnQgdGhlbSB0byBDUkxGIHdoZW4gZmlsZXMgYXJlIGNoZWNrZWQgb3V0LgorCitIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB3aWxsIG1ha2UgZ2l0IG5vcm1hbGl6ZSAudHh0LCAudmNwcm9qIGFuZCAuc2gKK2ZpbGVzLCBlbnN1cmUgdGhhdCAudmNwcm9qIGZpbGVzIGhhdmUgQ1JMRiBhbmQgLnNoIGZpbGVzIGhhdmUgTEYgaW4KK3RoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHByZXZlbnQgLmpwZyBmaWxlcyBmcm9tIGJlaW5nIG5vcm1hbGl6ZWQKK3JlZ2FyZGxlc3Mgb2YgdGhlaXIgY29udGVudC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLnR4dAkJdGV4dAorKi52Y3Byb2oJZW9sPWNybGYKKyouc2gJCWVvbD1sZgorKi5qcGcJCS10ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3RoZXIgc291cmNlIGNvZGUgbWFuYWdlbWVudCBzeXN0ZW1zIG5vcm1hbGl6ZSBhbGwgdGV4dCBmaWxlcyBpbiB0aGVpcgorcmVwb3NpdG9yaWVzLCBhbmQgdGhlcmUgYXJlIHR3byB3YXlzIHRvIGVuYWJsZSBzaW1pbGFyIGF1dG9tYXRpYworbm9ybWFsaXphdGlvbiBpbiBnaXQuCisKK0lmIHlvdSBzaW1wbHkgd2FudCB0byBoYXZlIENSTEYgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkKK3JlZ2FyZGxlc3Mgb2YgdGhlIHJlcG9zaXRvcnkgeW91IGFyZSB3b3JraW5nIHdpdGgsIHlvdSBjYW4gc2V0IHRoZQorY29uZmlnIHZhcmlhYmxlICJjb3JlLmF1dG9jcmxmIiB3aXRob3V0IGNoYW5naW5nIGFueSBhdHRyaWJ1dGVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tjb3JlXQorCWF1dG9jcmxmID0gdHJ1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZG9lcyBub3QgZm9yY2Ugbm9ybWFsaXphdGlvbiBvZiBhbGwgdGV4dCBmaWxlcywgYnV0IGRvZXMgZW5zdXJlCit0aGF0IHRleHQgZmlsZXMgdGhhdCB5b3UgaW50cm9kdWNlIHRvIHRoZSByZXBvc2l0b3J5IGhhdmUgdGhlaXIgbGluZQorZW5kaW5ncyBub3JtYWxpemVkIHRvIExGIHdoZW4gdGhleSBhcmUgYWRkZWQsIGFuZCB0aGF0IGZpbGVzIHRoYXQgYXJlCithbHJlYWR5IG5vcm1hbGl6ZWQgaW4gdGhlIHJlcG9zaXRvcnkgc3RheSBub3JtYWxpemVkLgorCitJZiB5b3Ugd2FudCB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIHNvdXJjZSBjb2RlIG1hbmFnZW1lbnQgc3lzdGVtIHRoYXQKK2VuZm9yY2VzIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24sIG9yIHlvdSBzaW1wbHkgd2FudCBhbGwgdGV4dCBmaWxlcworaW4geW91ciByZXBvc2l0b3J5IHRvIGJlIG5vcm1hbGl6ZWQsIHlvdSBzaG91bGQgaW5zdGVhZCBzZXQgdGhlIGB0ZXh0YAorYXR0cmlidXRlIHRvICJhdXRvIiBmb3IgX2FsbF8gZmlsZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgl0ZXh0PWF1dG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGVuc3VyZXMgdGhhdCBhbGwgZmlsZXMgdGhhdCBnaXQgY29uc2lkZXJzIHRvIGJlIHRleHQgd2lsbCBoYXZlCitub3JtYWxpemVkIChMRikgbGluZSBlbmRpbmdzIGluIHRoZSByZXBvc2l0b3J5LiAgVGhlIGBjb3JlLmVvbGAKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29udHJvbHMgd2hpY2ggbGluZSBlbmRpbmdzIGdpdCB3aWxsIHVzZSBmb3IKK25vcm1hbGl6ZWQgZmlsZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeTsgdGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZQorbmF0aXZlIGxpbmUgZW5kaW5nIGZvciB5b3VyIHBsYXRmb3JtLCBvciBDUkxGIGlmIGBjb3JlLmF1dG9jcmxmYCBpcworc2V0LgorCitOT1RFOiBXaGVuIGB0ZXh0PWF1dG9gIG5vcm1hbGl6YXRpb24gaXMgZW5hYmxlZCBpbiBhbiBleGlzdGluZworcmVwb3NpdG9yeSwgYW55IHRleHQgZmlsZXMgY29udGFpbmluZyBDUkxGcyBzaG91bGQgYmUgbm9ybWFsaXplZC4gIElmCit0aGV5IGFyZSBub3QgdGhleSB3aWxsIGJlIG5vcm1hbGl6ZWQgdGhlIG5leHQgdGltZSBzb21lb25lIHRyaWVzIHRvCitjaGFuZ2UgdGhlbSwgY2F1c2luZyB1bmZvcnR1bmF0ZSBtaXNhdHRyaWJ1dGlvbi4gIEZyb20gYSBjbGVhbiB3b3JraW5nCitkaXJlY3Rvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZWNobyAiKiB0ZXh0PWF1dG8iID4+LmdpdGF0dHJpYnV0ZXMKKyQgcm0gLmdpdC9pbmRleCAgICAgIyBSZW1vdmUgdGhlIGluZGV4IHRvIGZvcmNlIGdpdCB0bworJCBnaXQgcmVzZXQgICAgICAgICAjIHJlLXNjYW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5CiskIGdpdCBzdGF0dXMgICAgICAgICMgU2hvdyBmaWxlcyB0aGF0IHdpbGwgYmUgbm9ybWFsaXplZAorJCBnaXQgYWRkIC11CiskIGdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMKKyQgZ2l0IGNvbW1pdCAtbSAiSW50cm9kdWNlIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGFueSBmaWxlcyB0aGF0IHNob3VsZCBub3QgYmUgbm9ybWFsaXplZCBzaG93IHVwIGluICdnaXQgc3RhdHVzJywKK3Vuc2V0IHRoZWlyIGB0ZXh0YCBhdHRyaWJ1dGUgYmVmb3JlIHJ1bm5pbmcgJ2dpdCBhZGQgLXUnLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21hbnVhbC5wZGYJLXRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb252ZXJzZWx5LCB0ZXh0IGZpbGVzIHRoYXQgZ2l0IGRvZXMgbm90IGRldGVjdCBjYW4gaGF2ZSBub3JtYWxpemF0aW9uCitlbmFibGVkIG1hbnVhbGx5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dlaXJkY2hhcnMudHh0CXRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBgY29yZS5zYWZlY3JsZmAgaXMgc2V0IHRvICJ0cnVlIiBvciAid2FybiIsIGdpdCB2ZXJpZmllcyBpZgordGhlIGNvbnZlcnNpb24gaXMgcmV2ZXJzaWJsZSBmb3IgdGhlIGN1cnJlbnQgc2V0dGluZyBvZgorYGNvcmUuYXV0b2NybGZgLiAgRm9yICJ0cnVlIiwgZ2l0IHJlamVjdHMgaXJyZXZlcnNpYmxlCitjb252ZXJzaW9uczsgZm9yICJ3YXJuIiwgZ2l0IG9ubHkgcHJpbnRzIGEgd2FybmluZyBidXQgYWNjZXB0cworYW4gaXJyZXZlcnNpYmxlIGNvbnZlcnNpb24uICBUaGUgc2FmZXR5IHRyaWdnZXJzIHRvIHByZXZlbnQgc3VjaAorYSBjb252ZXJzaW9uIGRvbmUgdG8gdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIGJ1dCB0aGVyZSBhcmUgYQorZmV3IGV4Y2VwdGlvbnMuICBFdmVuIHRob3VnaC4uLgorCistICdnaXQgYWRkJyBpdHNlbGYgZG9lcyBub3QgdG91Y2ggdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIHRoZQorICBuZXh0IGNoZWNrb3V0IHdvdWxkLCBzbyB0aGUgc2FmZXR5IHRyaWdnZXJzOworCistICdnaXQgYXBwbHknIHRvIHVwZGF0ZSBhIHRleHQgZmlsZSB3aXRoIGEgcGF0Y2ggZG9lcyB0b3VjaCB0aGUgZmlsZXMKKyAgaW4gdGhlIHdvcmsgdHJlZSwgYnV0IHRoZSBvcGVyYXRpb24gaXMgYWJvdXQgdGV4dCBmaWxlcyBhbmQgQ1JMRgorICBjb252ZXJzaW9uIGlzIGFib3V0IGZpeGluZyB0aGUgbGluZSBlbmRpbmcgaW5jb25zaXN0ZW5jaWVzLCBzbyB0aGUKKyAgc2FmZXR5IGRvZXMgbm90IHRyaWdnZXI7CisKKy0gJ2dpdCBkaWZmJyBpdHNlbGYgZG9lcyBub3QgdG91Y2ggdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIGl0IGlzCisgIG9mdGVuIHJ1biB0byBpbnNwZWN0IHRoZSBjaGFuZ2VzIHlvdSBpbnRlbmQgdG8gbmV4dCAnZ2l0IGFkZCcuICBUbworICBjYXRjaCBwb3RlbnRpYWwgcHJvYmxlbXMgZWFybHksIHNhZmV0eSB0cmlnZ2Vycy4KKworCitgaWRlbnRgCiteXl5eXl5eCisKK1doZW4gdGhlIGF0dHJpYnV0ZSBgaWRlbnRgIGlzIHNldCBmb3IgYSBwYXRoLCBnaXQgcmVwbGFjZXMKK2AkSWQkYCBpbiB0aGUgYmxvYiBvYmplY3Qgd2l0aCBgJElkOmAsIGZvbGxvd2VkIGJ5IHRoZQorNDAtY2hhcmFjdGVyIGhleGFkZWNpbWFsIGJsb2Igb2JqZWN0IG5hbWUsIGZvbGxvd2VkIGJ5IGEgZG9sbGFyCitzaWduIGAkYCB1cG9uIGNoZWNrb3V0LiAgQW55IGJ5dGUgc2VxdWVuY2UgdGhhdCBiZWdpbnMgd2l0aAorYCRJZDpgIGFuZCBlbmRzIHdpdGggYCRgIGluIHRoZSB3b3JrdHJlZSBmaWxlIGlzIHJlcGxhY2VkCit3aXRoIGAkSWQkYCB1cG9uIGNoZWNrLWluLgorCisKK2BmaWx0ZXJgCiteXl5eXl5eXgorCitBIGBmaWx0ZXJgIGF0dHJpYnV0ZSBjYW4gYmUgc2V0IHRvIGEgc3RyaW5nIHZhbHVlIHRoYXQgbmFtZXMgYQorZmlsdGVyIGRyaXZlciBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uCisKK0EgZmlsdGVyIGRyaXZlciBjb25zaXN0cyBvZiBhIGBjbGVhbmAgY29tbWFuZCBhbmQgYSBgc211ZGdlYAorY29tbWFuZCwgZWl0aGVyIG9mIHdoaWNoIGNhbiBiZSBsZWZ0IHVuc3BlY2lmaWVkLiAgVXBvbgorY2hlY2tvdXQsIHdoZW4gdGhlIGBzbXVkZ2VgIGNvbW1hbmQgaXMgc3BlY2lmaWVkLCB0aGUgY29tbWFuZCBpcworZmVkIHRoZSBibG9iIG9iamVjdCBmcm9tIGl0cyBzdGFuZGFyZCBpbnB1dCwgYW5kIGl0cyBzdGFuZGFyZAorb3V0cHV0IGlzIHVzZWQgdG8gdXBkYXRlIHRoZSB3b3JrdHJlZSBmaWxlLiAgU2ltaWxhcmx5LCB0aGUKK2BjbGVhbmAgY29tbWFuZCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIG9mIHdvcmt0cmVlIGZpbGUKK3Vwb24gY2hlY2tpbi4KKworT25lIHVzZSBvZiB0aGUgY29udGVudCBmaWx0ZXJpbmcgaXMgdG8gbWFzc2FnZSB0aGUgY29udGVudCBpbnRvIGEgc2hhcGUKK3RoYXQgaXMgbW9yZSBjb252ZW5pZW50IGZvciB0aGUgcGxhdGZvcm0sIGZpbGVzeXN0ZW0sIGFuZCB0aGUgdXNlciB0byB1c2UuCitGb3IgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbiwgdGhlIGtleSBwaHJhc2UgaGVyZSBpcyAibW9yZSBjb252ZW5pZW50IiBhbmQKK25vdCAidHVybmluZyBzb21ldGhpbmcgdW51c2FibGUgaW50byB1c2FibGUiLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbnRlbnQKK2lzIHRoYXQgaWYgc29tZW9uZSB1bnNldHMgdGhlIGZpbHRlciBkcml2ZXIgZGVmaW5pdGlvbiwgb3IgZG9lcyBub3QgaGF2ZQordGhlIGFwcHJvcHJpYXRlIGZpbHRlciBwcm9ncmFtLCB0aGUgcHJvamVjdCBzaG91bGQgc3RpbGwgYmUgdXNhYmxlLgorCitBbm90aGVyIHVzZSBvZiB0aGUgY29udGVudCBmaWx0ZXJpbmcgaXMgdG8gc3RvcmUgdGhlIGNvbnRlbnQgdGhhdCBjYW5ub3QKK2JlIGRpcmVjdGx5IHVzZWQgaW4gdGhlIHJlcG9zaXRvcnkgKGUuZy4gYSBVVUlEIHRoYXQgcmVmZXJzIHRvIHRoZSB0cnVlCitjb250ZW50IHN0b3JlZCBvdXRzaWRlIGdpdCwgb3IgYW4gZW5jcnlwdGVkIGNvbnRlbnQpIGFuZCB0dXJuIGl0IGludG8gYQordXNhYmxlIGZvcm0gdXBvbiBjaGVja291dCAoZS5nLiBkb3dubG9hZCB0aGUgZXh0ZXJuYWwgY29udGVudCwgb3IgZGVjcnlwdAordGhlIGVuY3J5cHRlZCBjb250ZW50KS4KKworVGhlc2UgdHdvIGZpbHRlcnMgYmVoYXZlIGRpZmZlcmVudGx5LCBhbmQgYnkgZGVmYXVsdCwgYSBmaWx0ZXIgaXMgdGFrZW4gYXMKK3RoZSBmb3JtZXIsIG1hc3NhZ2luZyB0aGUgY29udGVudHMgaW50byBtb3JlIGNvbnZlbmllbnQgc2hhcGUuICBBIG1pc3NpbmcKK2ZpbHRlciBkcml2ZXIgZGVmaW5pdGlvbiBpbiB0aGUgY29uZmlnLCBvciBhIGZpbHRlciBkcml2ZXIgdGhhdCBleGl0cyB3aXRoCithIG5vbi16ZXJvIHN0YXR1cywgaXMgbm90IGFuIGVycm9yIGJ1dCBtYWtlcyB0aGUgZmlsdGVyIGEgbm8tb3AgcGFzc3RocnUuCisKK1lvdSBjYW4gZGVjbGFyZSB0aGF0IGEgZmlsdGVyIHR1cm5zIGEgY29udGVudCB0aGF0IGJ5IGl0c2VsZiBpcyB1bnVzYWJsZQoraW50byBhIHVzYWJsZSBjb250ZW50IGJ5IHNldHRpbmcgdGhlIGZpbHRlci48ZHJpdmVyPi5yZXF1aXJlZCBjb25maWd1cmF0aW9uCit2YXJpYWJsZSB0byBgdHJ1ZWAuCisKK0ZvciBleGFtcGxlLCBpbiAuZ2l0YXR0cmlidXRlcywgeW91IHdvdWxkIGFzc2lnbiB0aGUgYGZpbHRlcmAKK2F0dHJpYnV0ZSBmb3IgcGF0aHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi5jCWZpbHRlcj1pbmRlbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIHlvdSB3b3VsZCBkZWZpbmUgYSAiZmlsdGVyLmluZGVudC5jbGVhbiIgYW5kICJmaWx0ZXIuaW5kZW50LnNtdWRnZSIKK2NvbmZpZ3VyYXRpb24gaW4geW91ciAuZ2l0L2NvbmZpZyB0byBzcGVjaWZ5IGEgcGFpciBvZiBjb21tYW5kcyB0bworbW9kaWZ5IHRoZSBjb250ZW50cyBvZiBDIHByb2dyYW1zIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgY2hlY2tlZAoraW4gKCJjbGVhbiIgaXMgcnVuKSBhbmQgY2hlY2tlZCBvdXQgKG5vIGNoYW5nZSBpcyBtYWRlIGJlY2F1c2UgdGhlCitjb21tYW5kIGlzICJjYXQiKS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZmlsdGVyICJpbmRlbnQiXQorCWNsZWFuID0gaW5kZW50CisJc211ZGdlID0gY2F0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGJlc3QgcmVzdWx0cywgYGNsZWFuYCBzaG91bGQgbm90IGFsdGVyIGl0cyBvdXRwdXQgZnVydGhlciBpZiBpdCBpcworcnVuIHR3aWNlICgiY2xlYW4tPmNsZWFuIiBzaG91bGQgYmUgZXF1aXZhbGVudCB0byAiY2xlYW4iKSwgYW5kCittdWx0aXBsZSBgc211ZGdlYCBjb21tYW5kcyBzaG91bGQgbm90IGFsdGVyIGBjbGVhbmAncyBvdXRwdXQKKygic211ZGdlLT5zbXVkZ2UtPmNsZWFuIiBzaG91bGQgYmUgZXF1aXZhbGVudCB0byAiY2xlYW4iKS4gIFNlZSB0aGUKK3NlY3Rpb24gb24gbWVyZ2luZyBiZWxvdy4KKworVGhlICJpbmRlbnQiIGZpbHRlciBpcyB3ZWxsLWJlaGF2ZWQgaW4gdGhpcyByZWdhcmQ6IGl0IHdpbGwgbm90IG1vZGlmeQoraW5wdXQgdGhhdCBpcyBhbHJlYWR5IGNvcnJlY3RseSBpbmRlbnRlZC4gIEluIHRoaXMgY2FzZSwgdGhlIGxhY2sgb2YgYQorc211ZGdlIGZpbHRlciBtZWFucyB0aGF0IHRoZSBjbGVhbiBmaWx0ZXIgX211c3RfIGFjY2VwdCBpdHMgb3duIG91dHB1dAord2l0aG91dCBtb2RpZnlpbmcgaXQuCisKK0lmIGEgZmlsdGVyIF9tdXN0XyBzdWNjZWVkIGluIG9yZGVyIHRvIG1ha2UgdGhlIHN0b3JlZCBjb250ZW50cyB1c2FibGUsCit5b3UgY2FuIGRlY2xhcmUgdGhhdCB0aGUgZmlsdGVyIGlzIGByZXF1aXJlZGAsIGluIHRoZSBjb25maWd1cmF0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tmaWx0ZXIgImNyeXB0Il0KKwljbGVhbiA9IG9wZW5zc2wgZW5jIC4uLgorCXNtdWRnZSA9IG9wZW5zc2wgZW5jIC1kIC4uLgorCXJlcXVpcmVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VxdWVuY2UgIiVmIiBvbiB0aGUgZmlsdGVyIGNvbW1hbmQgbGluZSBpcyByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mCit0aGUgZmlsZSB0aGUgZmlsdGVyIGlzIHdvcmtpbmcgb24uICBBIGZpbHRlciBtaWdodCB1c2UgdGhpcyBpbiBrZXl3b3JkCitzdWJzdGl0dXRpb24uICBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZmlsdGVyICJwNCJdCisJY2xlYW4gPSBnaXQtcDQtZmlsdGVyIC0tY2xlYW4gJWYKKwlzbXVkZ2UgPSBnaXQtcDQtZmlsdGVyIC0tc211ZGdlICVmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitJbnRlcmFjdGlvbiBiZXR3ZWVuIGNoZWNraW4vY2hlY2tvdXQgYXR0cmlidXRlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworSW4gdGhlIGNoZWNrLWluIGNvZGVwYXRoLCB0aGUgd29ya3RyZWUgZmlsZSBpcyBmaXJzdCBjb252ZXJ0ZWQKK3dpdGggYGZpbHRlcmAgZHJpdmVyIChpZiBzcGVjaWZpZWQgYW5kIGNvcnJlc3BvbmRpbmcgZHJpdmVyCitkZWZpbmVkKSwgdGhlbiB0aGUgcmVzdWx0IGlzIHByb2Nlc3NlZCB3aXRoIGBpZGVudGAgKGlmCitzcGVjaWZpZWQpLCBhbmQgdGhlbiBmaW5hbGx5IHdpdGggYHRleHRgIChhZ2FpbiwgaWYgc3BlY2lmaWVkCithbmQgYXBwbGljYWJsZSkuCisKK0luIHRoZSBjaGVjay1vdXQgY29kZXBhdGgsIHRoZSBibG9iIGNvbnRlbnQgaXMgZmlyc3QgY29udmVydGVkCit3aXRoIGB0ZXh0YCwgYW5kIHRoZW4gYGlkZW50YCBhbmQgZmVkIHRvIGBmaWx0ZXJgLgorCisKK01lcmdpbmcgYnJhbmNoZXMgd2l0aCBkaWZmZXJpbmcgY2hlY2tpbi9jaGVja291dCBhdHRyaWJ1dGVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitJZiB5b3UgaGF2ZSBhZGRlZCBhdHRyaWJ1dGVzIHRvIGEgZmlsZSB0aGF0IGNhdXNlIHRoZSBjYW5vbmljYWwKK3JlcG9zaXRvcnkgZm9ybWF0IGZvciB0aGF0IGZpbGUgdG8gY2hhbmdlLCBzdWNoIGFzIGFkZGluZyBhCitjbGVhbi9zbXVkZ2UgZmlsdGVyIG9yIHRleHQvZW9sL2lkZW50IGF0dHJpYnV0ZXMsIG1lcmdpbmcgYW55dGhpbmcKK3doZXJlIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGluIHBsYWNlIHdvdWxkIG5vcm1hbGx5IGNhdXNlIG1lcmdlCitjb25mbGljdHMuCisKK1RvIHByZXZlbnQgdGhlc2UgdW5uZWNlc3NhcnkgbWVyZ2UgY29uZmxpY3RzLCBnaXQgY2FuIGJlIHRvbGQgdG8gcnVuIGEKK3ZpcnR1YWwgY2hlY2stb3V0IGFuZCBjaGVjay1pbiBvZiBhbGwgdGhyZWUgc3RhZ2VzIG9mIGEgZmlsZSB3aGVuCityZXNvbHZpbmcgYSB0aHJlZS13YXkgbWVyZ2UgYnkgc2V0dGluZyB0aGUgYG1lcmdlLnJlbm9ybWFsaXplYAorY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFRoaXMgcHJldmVudHMgY2hhbmdlcyBjYXVzZWQgYnkgY2hlY2staW4KK2NvbnZlcnNpb24gZnJvbSBjYXVzaW5nIHNwdXJpb3VzIG1lcmdlIGNvbmZsaWN0cyB3aGVuIGEgY29udmVydGVkIGZpbGUKK2lzIG1lcmdlZCB3aXRoIGFuIHVuY29udmVydGVkIGZpbGUuCisKK0FzIGxvbmcgYXMgYSAic211ZGdlLT5jbGVhbiIgcmVzdWx0cyBpbiB0aGUgc2FtZSBvdXRwdXQgYXMgYSAiY2xlYW4iCitldmVuIG9uIGZpbGVzIHRoYXQgYXJlIGFscmVhZHkgc211ZGdlZCwgdGhpcyBzdHJhdGVneSB3aWxsCithdXRvbWF0aWNhbGx5IHJlc29sdmUgYWxsIGZpbHRlci1yZWxhdGVkIGNvbmZsaWN0cy4gIEZpbHRlcnMgdGhhdCBkbworbm90IGFjdCBpbiB0aGlzIHdheSBtYXkgY2F1c2UgYWRkaXRpb25hbCBtZXJnZSBjb25mbGljdHMgdGhhdCBtdXN0IGJlCityZXNvbHZlZCBtYW51YWxseS4KKworCitHZW5lcmF0aW5nIGRpZmYgdGV4dAorfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworYGRpZmZgCiteXl5eXl4KKworVGhlIGF0dHJpYnV0ZSBgZGlmZmAgYWZmZWN0cyBob3cgJ2dpdCcgZ2VuZXJhdGVzIGRpZmZzIGZvciBwYXJ0aWN1bGFyCitmaWxlcy4gSXQgY2FuIHRlbGwgZ2l0IHdoZXRoZXIgdG8gZ2VuZXJhdGUgYSB0ZXh0dWFsIHBhdGNoIGZvciB0aGUgcGF0aAorb3IgdG8gdHJlYXQgdGhlIHBhdGggYXMgYSBiaW5hcnkgZmlsZS4gIEl0IGNhbiBhbHNvIGFmZmVjdCB3aGF0IGxpbmUgaXMKK3Nob3duIG9uIHRoZSBodW5rIGhlYWRlciBgQEAgLWssbCArbixtIEBAYCBsaW5lLCB0ZWxsIGdpdCB0byB1c2UgYW4KK2V4dGVybmFsIGNvbW1hbmQgdG8gZ2VuZXJhdGUgdGhlIGRpZmYsIG9yIGFzayBnaXQgdG8gY29udmVydCBiaW5hcnkKK2ZpbGVzIHRvIGEgdGV4dCBmb3JtYXQgYmVmb3JlIGdlbmVyYXRpbmcgdGhlIGRpZmYuCisKK1NldDo6CisKKwlBIHBhdGggdG8gd2hpY2ggdGhlIGBkaWZmYCBhdHRyaWJ1dGUgaXMgc2V0IGlzIHRyZWF0ZWQKKwlhcyB0ZXh0LCBldmVuIHdoZW4gdGhleSBjb250YWluIGJ5dGUgdmFsdWVzIHRoYXQKKwlub3JtYWxseSBuZXZlciBhcHBlYXIgaW4gdGV4dCBmaWxlcywgc3VjaCBhcyBOVUwuCisKK1Vuc2V0OjoKKworCUEgcGF0aCB0byB3aGljaCB0aGUgYGRpZmZgIGF0dHJpYnV0ZSBpcyB1bnNldCB3aWxsCisJZ2VuZXJhdGUgYEJpbmFyeSBmaWxlcyBkaWZmZXJgIChvciBhIGJpbmFyeSBwYXRjaCwgaWYKKwliaW5hcnkgcGF0Y2hlcyBhcmUgZW5hYmxlZCkuCisKK1Vuc3BlY2lmaWVkOjoKKworCUEgcGF0aCB0byB3aGljaCB0aGUgYGRpZmZgIGF0dHJpYnV0ZSBpcyB1bnNwZWNpZmllZAorCWZpcnN0IGdldHMgaXRzIGNvbnRlbnRzIGluc3BlY3RlZCwgYW5kIGlmIGl0IGxvb2tzIGxpa2UKKwl0ZXh0LCBpdCBpcyB0cmVhdGVkIGFzIHRleHQuICBPdGhlcndpc2UgaXQgd291bGQKKwlnZW5lcmF0ZSBgQmluYXJ5IGZpbGVzIGRpZmZlcmAuCisKK1N0cmluZzo6CisKKwlEaWZmIGlzIHNob3duIHVzaW5nIHRoZSBzcGVjaWZpZWQgZGlmZiBkcml2ZXIuICBFYWNoIGRyaXZlciBtYXkKKwlzcGVjaWZ5IG9uZSBvciBtb3JlIG9wdGlvbnMsIGFzIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nCisJc2VjdGlvbi4gVGhlIG9wdGlvbnMgZm9yIHRoZSBkaWZmIGRyaXZlciAiZm9vIiBhcmUgZGVmaW5lZAorCWJ5IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBpbiB0aGUgImRpZmYuZm9vIiBzZWN0aW9uIG9mIHRoZQorCWdpdCBjb25maWcgZmlsZS4KKworCitEZWZpbmluZyBhbiBleHRlcm5hbCBkaWZmIGRyaXZlcgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGRlZmluaXRpb24gb2YgYSBkaWZmIGRyaXZlciBpcyBkb25lIGluIGBnaXRjb25maWdgLCBub3QKK2BnaXRhdHRyaWJ1dGVzYCBmaWxlLCBzbyBzdHJpY3RseSBzcGVha2luZyB0aGlzIG1hbnVhbCBwYWdlIGlzIGEKK3dyb25nIHBsYWNlIHRvIHRhbGsgYWJvdXQgaXQuICBIb3dldmVyLi4uCisKK1RvIGRlZmluZSBhbiBleHRlcm5hbCBkaWZmIGRyaXZlciBgamNkaWZmYCwgYWRkIGEgc2VjdGlvbiB0byB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZGlmZiAiamNkaWZmIl0KKwljb21tYW5kID0gai1jLWRpZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBnaXQgbmVlZHMgdG8gc2hvdyB5b3UgYSBkaWZmIGZvciB0aGUgcGF0aCB3aXRoIGBkaWZmYAorYXR0cmlidXRlIHNldCB0byBgamNkaWZmYCwgaXQgY2FsbHMgdGhlIGNvbW1hbmQgeW91IHNwZWNpZmllZAord2l0aCB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiwgaS5lLiBgai1jLWRpZmZgLCB3aXRoIDcKK3BhcmFtZXRlcnMsIGp1c3QgbGlrZSBgR0lUX0VYVEVSTkFMX0RJRkZgIHByb2dyYW0gaXMgY2FsbGVkLgorU2VlIGxpbmtnaXQ6Z2l0WzFdIGZvciBkZXRhaWxzLgorCisKK0RlZmluaW5nIGEgY3VzdG9tIGh1bmstaGVhZGVyCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFYWNoIGdyb3VwIG9mIGNoYW5nZXMgKGNhbGxlZCBhICJodW5rIikgaW4gdGhlIHRleHR1YWwgZGlmZiBvdXRwdXQKK2lzIHByZWZpeGVkIHdpdGggYSBsaW5lIG9mIHRoZSBmb3JtOgorCisJQEAgLWssbCArbixtIEBAIFRFWFQKKworVGhpcyBpcyBjYWxsZWQgYSAnaHVuayBoZWFkZXInLiAgVGhlICJURVhUIiBwb3J0aW9uIGlzIGJ5IGRlZmF1bHQgYSBsaW5lCit0aGF0IGJlZ2lucyB3aXRoIGFuIGFscGhhYmV0LCBhbiB1bmRlcnNjb3JlIG9yIGEgZG9sbGFyIHNpZ247IHRoaXMKK21hdGNoZXMgd2hhdCBHTlUgJ2RpZmYgLXAnIG91dHB1dCB1c2VzLiAgVGhpcyBkZWZhdWx0IHNlbGVjdGlvbiBob3dldmVyCitpcyBub3Qgc3VpdGVkIGZvciBzb21lIGNvbnRlbnRzLCBhbmQgeW91IGNhbiB1c2UgYSBjdXN0b21pemVkIHBhdHRlcm4KK3RvIG1ha2UgYSBzZWxlY3Rpb24uCisKK0ZpcnN0LCBpbiAuZ2l0YXR0cmlidXRlcywgeW91IHdvdWxkIGFzc2lnbiB0aGUgYGRpZmZgIGF0dHJpYnV0ZQorZm9yIHBhdGhzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoudGV4CWRpZmY9dGV4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiwgeW91IHdvdWxkIGRlZmluZSBhICJkaWZmLnRleC54ZnVuY25hbWUiIGNvbmZpZ3VyYXRpb24gdG8KK3NwZWNpZnkgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIGEgbGluZSB0aGF0IHlvdSB3b3VsZAord2FudCB0byBhcHBlYXIgYXMgdGhlIGh1bmsgaGVhZGVyICJURVhUIi4gQWRkIGEgc2VjdGlvbiB0byB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tkaWZmICJ0ZXgiXQorCXhmdW5jbmFtZSA9ICJeKFxcXFwoc3ViKSpzZWN0aW9uXFx7LiopJCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlLiAgQSBzaW5nbGUgbGV2ZWwgb2YgYmFja3NsYXNoZXMgYXJlIGVhdGVuIGJ5IHRoZQorY29uZmlndXJhdGlvbiBmaWxlIHBhcnNlciwgc28geW91IHdvdWxkIG5lZWQgdG8gZG91YmxlIHRoZQorYmFja3NsYXNoZXM7IHRoZSBwYXR0ZXJuIGFib3ZlIHBpY2tzIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIGEKK2JhY2tzbGFzaCwgYW5kIHplcm8gb3IgbW9yZSBvY2N1cnJlbmNlcyBvZiBgc3ViYCBmb2xsb3dlZCBieQorYHNlY3Rpb25gIGZvbGxvd2VkIGJ5IG9wZW4gYnJhY2UsIHRvIHRoZSBlbmQgb2YgbGluZS4KKworVGhlcmUgYXJlIGEgZmV3IGJ1aWx0LWluIHBhdHRlcm5zIHRvIG1ha2UgdGhpcyBlYXNpZXIsIGFuZCBgdGV4YAoraXMgb25lIG9mIHRoZW0sIHNvIHlvdSBkbyBub3QgaGF2ZSB0byB3cml0ZSB0aGUgYWJvdmUgaW4geW91cgorY29uZmlndXJhdGlvbiBmaWxlICh5b3Ugc3RpbGwgbmVlZCB0byBlbmFibGUgdGhpcyB3aXRoIHRoZQorYXR0cmlidXRlIG1lY2hhbmlzbSwgdmlhIGAuZ2l0YXR0cmlidXRlc2ApLiAgVGhlIGZvbGxvd2luZyBidWlsdCBpbgorcGF0dGVybnMgYXJlIGF2YWlsYWJsZToKKworLSBgYWRhYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEFkYSBsYW5ndWFnZS4KKworLSBgYmlidGV4YCBzdWl0YWJsZSBmb3IgZmlsZXMgd2l0aCBCaWJUZVggY29kZWQgcmVmZXJlbmNlcy4KKworLSBgY3BwYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEMgYW5kIEMrKyBsYW5ndWFnZXMuCisKKy0gYGNzaGFycGAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBDIyBsYW5ndWFnZS4KKworLSBgZm9ydHJhbmAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBGb3J0cmFuIGxhbmd1YWdlLgorCistIGBodG1sYCBzdWl0YWJsZSBmb3IgSFRNTC9YSFRNTCBkb2N1bWVudHMuCisKKy0gYGphdmFgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgSmF2YSBsYW5ndWFnZS4KKworLSBgbWF0bGFiYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIE1BVExBQiBsYW5ndWFnZS4KKworLSBgb2JqY2Agc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBPYmplY3RpdmUtQyBsYW5ndWFnZS4KKworLSBgcGFzY2FsYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIFBhc2NhbC9EZWxwaGkgbGFuZ3VhZ2UuCisKKy0gYHBlcmxgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgUGVybCBsYW5ndWFnZS4KKworLSBgcGhwYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIFBIUCBsYW5ndWFnZS4KKworLSBgcHl0aG9uYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIFB5dGhvbiBsYW5ndWFnZS4KKworLSBgcnVieWAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBSdWJ5IGxhbmd1YWdlLgorCistIGB0ZXhgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBmb3IgTGFUZVggZG9jdW1lbnRzLgorCisKK0N1c3RvbWl6aW5nIHdvcmQgZGlmZgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1lvdSBjYW4gY3VzdG9taXplIHRoZSBydWxlcyB0aGF0IGBnaXQgZGlmZiAtLXdvcmQtZGlmZmAgdXNlcyB0bworc3BsaXQgd29yZHMgaW4gYSBsaW5lLCBieSBzcGVjaWZ5aW5nIGFuIGFwcHJvcHJpYXRlIHJlZ3VsYXIgZXhwcmVzc2lvbgoraW4gdGhlICJkaWZmLioud29yZFJlZ2V4IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgRm9yIGV4YW1wbGUsIGluIFRlWAorYSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBzZXF1ZW5jZSBvZiBsZXR0ZXJzIGZvcm1zIGEgY29tbWFuZCwgYnV0CitzZXZlcmFsIHN1Y2ggY29tbWFuZHMgY2FuIGJlIHJ1biB0b2dldGhlciB3aXRob3V0IGludGVydmVuaW5nCit3aGl0ZXNwYWNlLiAgVG8gc2VwYXJhdGUgdGhlbSwgdXNlIGEgcmVndWxhciBleHByZXNzaW9uIGluIHlvdXIKK2AkR0lUX0RJUi9jb25maWdgIGZpbGUgKG9yIGAkSE9NRS8uZ2l0Y29uZmlnYCBmaWxlKSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2RpZmYgInRleCJdCisJd29yZFJlZ2V4ID0gIlxcXFxbYS16QS1aXSt8W3t9XXxcXFxcLnxbXlxce31bOnNwYWNlOl1dKyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGJ1aWx0LWluIHBhdHRlcm4gaXMgcHJvdmlkZWQgZm9yIGFsbCBsYW5ndWFnZXMgbGlzdGVkIGluIHRoZQorcHJldmlvdXMgc2VjdGlvbi4KKworCitQZXJmb3JtaW5nIHRleHQgZGlmZnMgb2YgYmluYXJ5IGZpbGVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1NvbWV0aW1lcyBpdCBpcyBkZXNpcmFibGUgdG8gc2VlIHRoZSBkaWZmIG9mIGEgdGV4dC1jb252ZXJ0ZWQKK3ZlcnNpb24gb2Ygc29tZSBiaW5hcnkgZmlsZXMuIEZvciBleGFtcGxlLCBhIHdvcmQgcHJvY2Vzc29yCitkb2N1bWVudCBjYW4gYmUgY29udmVydGVkIHRvIGFuIEFTQ0lJIHRleHQgcmVwcmVzZW50YXRpb24sIGFuZAordGhlIGRpZmYgb2YgdGhlIHRleHQgc2hvd24uIEV2ZW4gdGhvdWdoIHRoaXMgY29udmVyc2lvbiBsb3Nlcworc29tZSBpbmZvcm1hdGlvbiwgdGhlIHJlc3VsdGluZyBkaWZmIGlzIHVzZWZ1bCBmb3IgaHVtYW4KK3ZpZXdpbmcgKGJ1dCBjYW5ub3QgYmUgYXBwbGllZCBkaXJlY3RseSkuCisKK1RoZSBgdGV4dGNvbnZgIGNvbmZpZyBvcHRpb24gaXMgdXNlZCB0byBkZWZpbmUgYSBwcm9ncmFtIGZvcgorcGVyZm9ybWluZyBzdWNoIGEgY29udmVyc2lvbi4gVGhlIHByb2dyYW0gc2hvdWxkIHRha2UgYSBzaW5nbGUKK2FyZ3VtZW50LCB0aGUgbmFtZSBvZiBhIGZpbGUgdG8gY29udmVydCwgYW5kIHByb2R1Y2UgdGhlCityZXN1bHRpbmcgdGV4dCBvbiBzdGRvdXQuCisKK0ZvciBleGFtcGxlLCB0byBzaG93IHRoZSBkaWZmIG9mIHRoZSBleGlmIGluZm9ybWF0aW9uIG9mIGEKK2ZpbGUgaW5zdGVhZCBvZiB0aGUgYmluYXJ5IGluZm9ybWF0aW9uIChhc3N1bWluZyB5b3UgaGF2ZSB0aGUKK2V4aWYgdG9vbCBpbnN0YWxsZWQpLCBhZGQgdGhlIGZvbGxvd2luZyBzZWN0aW9uIHRvIHlvdXIKK2AkR0lUX0RJUi9jb25maWdgIGZpbGUgKG9yIGAkSE9NRS8uZ2l0Y29uZmlnYCBmaWxlKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZGlmZiAianBnIl0KKwl0ZXh0Y29udiA9IGV4aWYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOT1RFOiBUaGUgdGV4dCBjb252ZXJzaW9uIGlzIGdlbmVyYWxseSBhIG9uZS13YXkgY29udmVyc2lvbjsKK2luIHRoaXMgZXhhbXBsZSwgd2UgbG9zZSB0aGUgYWN0dWFsIGltYWdlIGNvbnRlbnRzIGFuZCBmb2N1cworanVzdCBvbiB0aGUgdGV4dCBkYXRhLiBUaGlzIG1lYW5zIHRoYXQgZGlmZnMgZ2VuZXJhdGVkIGJ5Cit0ZXh0Y29udiBhcmUgX25vdF8gc3VpdGFibGUgZm9yIGFwcGx5aW5nLiBGb3IgdGhpcyByZWFzb24sCitvbmx5IGBnaXQgZGlmZmAgYW5kIHRoZSBgZ2l0IGxvZ2AgZmFtaWx5IG9mIGNvbW1hbmRzIChpLmUuLAorbG9nLCB3aGF0Y2hhbmdlZCwgc2hvdykgd2lsbCBwZXJmb3JtIHRleHQgY29udmVyc2lvbi4gYGdpdAorZm9ybWF0LXBhdGNoYCB3aWxsIG5ldmVyIGdlbmVyYXRlIHRoaXMgb3V0cHV0LiBJZiB5b3Ugd2FudCB0bworc2VuZCBzb21lYm9keSBhIHRleHQtY29udmVydGVkIGRpZmYgb2YgYSBiaW5hcnkgZmlsZSAoZS5nLiwKK2JlY2F1c2UgaXQgcXVpY2tseSBjb252ZXlzIHRoZSBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUpLCB5b3UKK3Nob3VsZCBnZW5lcmF0ZSBpdCBzZXBhcmF0ZWx5IGFuZCBzZW5kIGl0IGFzIGEgY29tbWVudCBfaW4KK2FkZGl0aW9uIHRvXyB0aGUgdXN1YWwgYmluYXJ5IGRpZmYgdGhhdCB5b3UgbWlnaHQgc2VuZC4KKworQmVjYXVzZSB0ZXh0IGNvbnZlcnNpb24gY2FuIGJlIHNsb3csIGVzcGVjaWFsbHkgd2hlbiBkb2luZyBhCitsYXJnZSBudW1iZXIgb2YgdGhlbSB3aXRoIGBnaXQgbG9nIC1wYCwgZ2l0IHByb3ZpZGVzIGEgbWVjaGFuaXNtCit0byBjYWNoZSB0aGUgb3V0cHV0IGFuZCB1c2UgaXQgaW4gZnV0dXJlIGRpZmZzLiAgVG8gZW5hYmxlCitjYWNoaW5nLCBzZXQgdGhlICJjYWNoZXRleHRjb252IiB2YXJpYWJsZSBpbiB5b3VyIGRpZmYgZHJpdmVyJ3MKK2NvbmZpZy4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2RpZmYgImpwZyJdCisJdGV4dGNvbnYgPSBleGlmCisJY2FjaGV0ZXh0Y29udiA9IHRydWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgY2FjaGUgdGhlIHJlc3VsdCBvZiBydW5uaW5nICJleGlmIiBvbiBlYWNoIGJsb2IKK2luZGVmaW5pdGVseS4gSWYgeW91IGNoYW5nZSB0aGUgdGV4dGNvbnYgY29uZmlnIHZhcmlhYmxlIGZvciBhCitkaWZmIGRyaXZlciwgZ2l0IHdpbGwgYXV0b21hdGljYWxseSBpbnZhbGlkYXRlIHRoZSBjYWNoZSBlbnRyaWVzCithbmQgcmUtcnVuIHRoZSB0ZXh0Y29udiBmaWx0ZXIuIElmIHlvdSB3YW50IHRvIGludmFsaWRhdGUgdGhlCitjYWNoZSBtYW51YWxseSAoZS5nLiwgYmVjYXVzZSB5b3VyIHZlcnNpb24gb2YgImV4aWYiIHdhcyB1cGRhdGVkCithbmQgbm93IHByb2R1Y2VzIGJldHRlciBvdXRwdXQpLCB5b3UgY2FuIHJlbW92ZSB0aGUgY2FjaGUKK21hbnVhbGx5IHdpdGggYGdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvbm90ZXMvdGV4dGNvbnYvanBnYCAod2hlcmUKKyJqcGciIGlzIHRoZSBuYW1lIG9mIHRoZSBkaWZmIGRyaXZlciwgYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUpLgorCitDaG9vc2luZyB0ZXh0Y29udiB2ZXJzdXMgZXh0ZXJuYWwgZGlmZgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworSWYgeW91IHdhbnQgdG8gc2hvdyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJpbmFyeSBvciBzcGVjaWFsbHktZm9ybWF0dGVkCitibG9icyBpbiB5b3VyIHJlcG9zaXRvcnksIHlvdSBjYW4gY2hvb3NlIHRvIHVzZSBlaXRoZXIgYW4gZXh0ZXJuYWwgZGlmZgorY29tbWFuZCwgb3IgdG8gdXNlIHRleHRjb252IHRvIGNvbnZlcnQgdGhlbSB0byBhIGRpZmYtYWJsZSB0ZXh0IGZvcm1hdC4KK1doaWNoIG1ldGhvZCB5b3UgY2hvb3NlIGRlcGVuZHMgb24geW91ciBleGFjdCBzaXR1YXRpb24uCisKK1RoZSBhZHZhbnRhZ2Ugb2YgdXNpbmcgYW4gZXh0ZXJuYWwgZGlmZiBjb21tYW5kIGlzIGZsZXhpYmlsaXR5LiBZb3UgYXJlCitub3QgYm91bmQgdG8gZmluZCBsaW5lLW9yaWVudGVkIGNoYW5nZXMsIG5vciBpcyBpdCBuZWNlc3NhcnkgZm9yIHRoZQorb3V0cHV0IHRvIHJlc2VtYmxlIHVuaWZpZWQgZGlmZi4gWW91IGFyZSBmcmVlIHRvIGxvY2F0ZSBhbmQgcmVwb3J0CitjaGFuZ2VzIGluIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHdheSBmb3IgeW91ciBkYXRhIGZvcm1hdC4KKworQSB0ZXh0Y29udiwgYnkgY29tcGFyaXNvbiwgaXMgbXVjaCBtb3JlIGxpbWl0aW5nLiBZb3UgcHJvdmlkZSBhCit0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgZGF0YSBpbnRvIGEgbGluZS1vcmllbnRlZCB0ZXh0IGZvcm1hdCwgYW5kIGdpdAordXNlcyBpdHMgcmVndWxhciBkaWZmIHRvb2xzIHRvIGdlbmVyYXRlIHRoZSBvdXRwdXQuIFRoZXJlIGFyZSBzZXZlcmFsCithZHZhbnRhZ2VzIHRvIGNob29zaW5nIHRoaXMgbWV0aG9kOgorCisxLiBFYXNlIG9mIHVzZS4gSXQgaXMgb2Z0ZW4gbXVjaCBzaW1wbGVyIHRvIHdyaXRlIGEgYmluYXJ5IHRvIHRleHQKKyAgIHRyYW5zZm9ybWF0aW9uIHRoYW4gaXQgaXMgdG8gcGVyZm9ybSB5b3VyIG93biBkaWZmLiBJbiBtYW55IGNhc2VzLAorICAgZXhpc3RpbmcgcHJvZ3JhbXMgY2FuIGJlIHVzZWQgYXMgdGV4dGNvbnYgZmlsdGVycyAoZS5nLiwgZXhpZiwKKyAgIG9kdDJ0eHQpLgorCisyLiBHaXQgZGlmZiBmZWF0dXJlcy4gQnkgcGVyZm9ybWluZyBvbmx5IHRoZSB0cmFuc2Zvcm1hdGlvbiBzdGVwCisgICB5b3Vyc2VsZiwgeW91IGNhbiBzdGlsbCB1dGlsaXplIG1hbnkgb2YgZ2l0J3MgZGlmZiBmZWF0dXJlcywKKyAgIGluY2x1ZGluZyBjb2xvcml6YXRpb24sIHdvcmQtZGlmZiwgYW5kIGNvbWJpbmVkIGRpZmZzIGZvciBtZXJnZXMuCisKKzMuIENhY2hpbmcuIFRleHRjb252IGNhY2hpbmcgY2FuIHNwZWVkIHVwIHJlcGVhdGVkIGRpZmZzLCBzdWNoIGFzIHRob3NlCisgICB5b3UgbWlnaHQgdHJpZ2dlciBieSBydW5uaW5nIGBnaXQgbG9nIC1wYC4KKworCitNYXJraW5nIGZpbGVzIGFzIGJpbmFyeQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworR2l0IHVzdWFsbHkgZ3Vlc3NlcyBjb3JyZWN0bHkgd2hldGhlciBhIGJsb2IgY29udGFpbnMgdGV4dCBvciBiaW5hcnkKK2RhdGEgYnkgZXhhbWluaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbnRlbnRzLiBIb3dldmVyLCBzb21ldGltZXMgeW91CittYXkgd2FudCB0byBvdmVycmlkZSBpdHMgZGVjaXNpb24sIGVpdGhlciBiZWNhdXNlIGEgYmxvYiBjb250YWlucyBiaW5hcnkKK2RhdGEgbGF0ZXIgaW4gdGhlIGZpbGUsIG9yIGJlY2F1c2UgdGhlIGNvbnRlbnQsIHdoaWxlIHRlY2huaWNhbGx5Citjb21wb3NlZCBvZiB0ZXh0IGNoYXJhY3RlcnMsIGlzIG9wYXF1ZSB0byBhIGh1bWFuIHJlYWRlci4gRm9yIGV4YW1wbGUsCittYW55IHBvc3RzY3JpcHQgZmlsZXMgY29udGFpbiBvbmx5IGFzY2lpIGNoYXJhY3RlcnMsIGJ1dCBwcm9kdWNlIG5vaXN5CithbmQgbWVhbmluZ2xlc3MgZGlmZnMuCisKK1RoZSBzaW1wbGVzdCB3YXkgdG8gbWFyayBhIGZpbGUgYXMgYmluYXJ5IGlzIHRvIHVuc2V0IHRoZSBkaWZmCithdHRyaWJ1dGUgaW4gdGhlIGAuZ2l0YXR0cmlidXRlc2AgZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLnBzIC1kaWZmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGNhdXNlIGdpdCB0byBnZW5lcmF0ZSBgQmluYXJ5IGZpbGVzIGRpZmZlcmAgKG9yIGEgYmluYXJ5CitwYXRjaCwgaWYgYmluYXJ5IHBhdGNoZXMgYXJlIGVuYWJsZWQpIGluc3RlYWQgb2YgYSByZWd1bGFyIGRpZmYuCisKK0hvd2V2ZXIsIG9uZSBtYXkgYWxzbyB3YW50IHRvIHNwZWNpZnkgb3RoZXIgZGlmZiBkcml2ZXIgYXR0cmlidXRlcy4gRm9yCitleGFtcGxlLCB5b3UgbWlnaHQgd2FudCB0byB1c2UgYHRleHRjb252YCB0byBjb252ZXJ0IHBvc3RzY3JpcHQgZmlsZXMgdG8KK2FuIGFzY2lpIHJlcHJlc2VudGF0aW9uIGZvciBodW1hbiB2aWV3aW5nLCBidXQgb3RoZXJ3aXNlIHRyZWF0IHRoZW0gYXMKK2JpbmFyeSBmaWxlcy4gWW91IGNhbm5vdCBzcGVjaWZ5IGJvdGggYC1kaWZmYCBhbmQgYGRpZmY9cHNgIGF0dHJpYnV0ZXMuCitUaGUgc29sdXRpb24gaXMgdG8gdXNlIHRoZSBgZGlmZi4qLmJpbmFyeWAgY29uZmlnIG9wdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZGlmZiAicHMiXQorICB0ZXh0Y29udiA9IHBzMmFzY2lpCisgIGJpbmFyeSA9IHRydWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQZXJmb3JtaW5nIGEgdGhyZWUtd2F5IG1lcmdlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2BtZXJnZWAKK15eXl5eXl4KKworVGhlIGF0dHJpYnV0ZSBgbWVyZ2VgIGFmZmVjdHMgaG93IHRocmVlIHZlcnNpb25zIG9mIGEgZmlsZSBhcmUKK21lcmdlZCB3aGVuIGEgZmlsZS1sZXZlbCBtZXJnZSBpcyBuZWNlc3NhcnkgZHVyaW5nIGBnaXQgbWVyZ2VgLAorYW5kIG90aGVyIGNvbW1hbmRzIHN1Y2ggYXMgYGdpdCByZXZlcnRgIGFuZCBgZ2l0IGNoZXJyeS1waWNrYC4KKworU2V0OjoKKworCUJ1aWx0LWluIDMtd2F5IG1lcmdlIGRyaXZlciBpcyB1c2VkIHRvIG1lcmdlIHRoZQorCWNvbnRlbnRzIGluIGEgd2F5IHNpbWlsYXIgdG8gJ21lcmdlJyBjb21tYW5kIG9mIGBSQ1NgCisJc3VpdGUuICBUaGlzIGlzIHN1aXRhYmxlIGZvciBvcmRpbmFyeSB0ZXh0IGZpbGVzLgorCitVbnNldDo6CisKKwlUYWtlIHRoZSB2ZXJzaW9uIGZyb20gdGhlIGN1cnJlbnQgYnJhbmNoIGFzIHRoZQorCXRlbnRhdGl2ZSBtZXJnZSByZXN1bHQsIGFuZCBkZWNsYXJlIHRoYXQgdGhlIG1lcmdlIGhhcworCWNvbmZsaWN0cy4gIFRoaXMgaXMgc3VpdGFibGUgZm9yIGJpbmFyeSBmaWxlcyB0aGF0IGRvCisJbm90IGhhdmUgYSB3ZWxsLWRlZmluZWQgbWVyZ2Ugc2VtYW50aWNzLgorCitVbnNwZWNpZmllZDo6CisKKwlCeSBkZWZhdWx0LCB0aGlzIHVzZXMgdGhlIHNhbWUgYnVpbHQtaW4gMy13YXkgbWVyZ2UKKwlkcml2ZXIgYXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgYG1lcmdlYCBhdHRyaWJ1dGUgaXMgc2V0LgorCUhvd2V2ZXIsIHRoZSBgbWVyZ2UuZGVmYXVsdGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gbmFtZQorCWRpZmZlcmVudCBtZXJnZSBkcml2ZXIgdG8gYmUgdXNlZCB3aXRoIHBhdGhzIGZvciB3aGljaCB0aGUKKwlgbWVyZ2VgIGF0dHJpYnV0ZSBpcyB1bnNwZWNpZmllZC4KKworU3RyaW5nOjoKKworCTMtd2F5IG1lcmdlIGlzIHBlcmZvcm1lZCB1c2luZyB0aGUgc3BlY2lmaWVkIGN1c3RvbQorCW1lcmdlIGRyaXZlci4gIFRoZSBidWlsdC1pbiAzLXdheSBtZXJnZSBkcml2ZXIgY2FuIGJlCisJZXhwbGljaXRseSBzcGVjaWZpZWQgYnkgYXNraW5nIGZvciAidGV4dCIgZHJpdmVyOyB0aGUKKwlidWlsdC1pbiAidGFrZSB0aGUgY3VycmVudCBicmFuY2giIGRyaXZlciBjYW4gYmUKKwlyZXF1ZXN0ZWQgd2l0aCAiYmluYXJ5Ii4KKworCitCdWlsdC1pbiBtZXJnZSBkcml2ZXJzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZXJlIGFyZSBhIGZldyBidWlsdC1pbiBsb3ctbGV2ZWwgbWVyZ2UgZHJpdmVycyBkZWZpbmVkIHRoYXQKK2NhbiBiZSBhc2tlZCBmb3IgdmlhIHRoZSBgbWVyZ2VgIGF0dHJpYnV0ZS4KKwordGV4dDo6CisKKwlVc3VhbCAzLXdheSBmaWxlIGxldmVsIG1lcmdlIGZvciB0ZXh0IGZpbGVzLiAgQ29uZmxpY3RlZAorCXJlZ2lvbnMgYXJlIG1hcmtlZCB3aXRoIGNvbmZsaWN0IG1hcmtlcnMgYDw8PDw8PDxgLAorCWA9PT09PT09YCBhbmQgYD4+Pj4+Pj5gLiAgVGhlIHZlcnNpb24gZnJvbSB5b3VyIGJyYW5jaAorCWFwcGVhcnMgYmVmb3JlIHRoZSBgPT09PT09PWAgbWFya2VyLCBhbmQgdGhlIHZlcnNpb24KKwlmcm9tIHRoZSBtZXJnZWQgYnJhbmNoIGFwcGVhcnMgYWZ0ZXIgdGhlIGA9PT09PT09YAorCW1hcmtlci4KKworYmluYXJ5OjoKKworCUtlZXAgdGhlIHZlcnNpb24gZnJvbSB5b3VyIGJyYW5jaCBpbiB0aGUgd29yayB0cmVlLCBidXQKKwlsZWF2ZSB0aGUgcGF0aCBpbiB0aGUgY29uZmxpY3RlZCBzdGF0ZSBmb3IgdGhlIHVzZXIgdG8KKwlzb3J0IG91dC4KKwordW5pb246OgorCisJUnVuIDMtd2F5IGZpbGUgbGV2ZWwgbWVyZ2UgZm9yIHRleHQgZmlsZXMsIGJ1dCB0YWtlCisJbGluZXMgZnJvbSBib3RoIHZlcnNpb25zLCBpbnN0ZWFkIG9mIGxlYXZpbmcgY29uZmxpY3QKKwltYXJrZXJzLiAgVGhpcyB0ZW5kcyB0byBsZWF2ZSB0aGUgYWRkZWQgbGluZXMgaW4gdGhlCisJcmVzdWx0aW5nIGZpbGUgaW4gcmFuZG9tIG9yZGVyIGFuZCB0aGUgdXNlciBzaG91bGQKKwl2ZXJpZnkgdGhlIHJlc3VsdC4gRG8gbm90IHVzZSB0aGlzIGlmIHlvdSBkbyBub3QKKwl1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCisKKworRGVmaW5pbmcgYSBjdXN0b20gbWVyZ2UgZHJpdmVyCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGRlZmluaXRpb24gb2YgYSBtZXJnZSBkcml2ZXIgaXMgZG9uZSBpbiB0aGUgYC5naXQvY29uZmlnYAorZmlsZSwgbm90IGluIHRoZSBgZ2l0YXR0cmlidXRlc2AgZmlsZSwgc28gc3RyaWN0bHkgc3BlYWtpbmcgdGhpcworbWFudWFsIHBhZ2UgaXMgYSB3cm9uZyBwbGFjZSB0byB0YWxrIGFib3V0IGl0LiAgSG93ZXZlci4uLgorCitUbyBkZWZpbmUgYSBjdXN0b20gbWVyZ2UgZHJpdmVyIGBmaWxmcmVgLCBhZGQgYSBzZWN0aW9uIHRvIHlvdXIKK2AkR0lUX0RJUi9jb25maWdgIGZpbGUgKG9yIGAkSE9NRS8uZ2l0Y29uZmlnYCBmaWxlKSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ttZXJnZSAiZmlsZnJlIl0KKwluYW1lID0gZmVlbC1mcmVlIG1lcmdlIGRyaXZlcgorCWRyaXZlciA9IGZpbGZyZSAlTyAlQSAlQgorCXJlY3Vyc2l2ZSA9IGJpbmFyeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYG1lcmdlLioubmFtZWAgdmFyaWFibGUgZ2l2ZXMgdGhlIGRyaXZlciBhIGh1bWFuLXJlYWRhYmxlCituYW1lLgorCitUaGUgYG1lcmdlLiouZHJpdmVyYCB2YXJpYWJsZSdzIHZhbHVlIGlzIHVzZWQgdG8gY29uc3RydWN0IGEKK2NvbW1hbmQgdG8gcnVuIHRvIG1lcmdlIGFuY2VzdG9yJ3MgdmVyc2lvbiAoYCVPYCksIGN1cnJlbnQKK3ZlcnNpb24gKGAlQWApIGFuZCB0aGUgb3RoZXIgYnJhbmNoZXMnIHZlcnNpb24gKGAlQmApLiAgVGhlc2UKK3RocmVlIHRva2VucyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZXMgb2YgdGVtcG9yYXJ5IGZpbGVzIHRoYXQKK2hvbGQgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIHZlcnNpb25zIHdoZW4gdGhlIGNvbW1hbmQgbGluZSBpcworYnVpbHQuIEFkZGl0aW9uYWxseSwgJUwgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBjb25mbGljdCBtYXJrZXIKK3NpemUgKHNlZSBiZWxvdykuCisKK1RoZSBtZXJnZSBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gbGVhdmUgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UgaW4KK3RoZSBmaWxlIG5hbWVkIHdpdGggYCVBYCBieSBvdmVyd3JpdGluZyBpdCwgYW5kIGV4aXQgd2l0aCB6ZXJvCitzdGF0dXMgaWYgaXQgbWFuYWdlZCB0byBtZXJnZSB0aGVtIGNsZWFubHksIG9yIG5vbi16ZXJvIGlmIHRoZXJlCit3ZXJlIGNvbmZsaWN0cy4KKworVGhlIGBtZXJnZS4qLnJlY3Vyc2l2ZWAgdmFyaWFibGUgc3BlY2lmaWVzIHdoYXQgb3RoZXIgbWVyZ2UKK2RyaXZlciB0byB1c2Ugd2hlbiB0aGUgbWVyZ2UgZHJpdmVyIGlzIGNhbGxlZCBmb3IgYW4gaW50ZXJuYWwKK21lcmdlIGJldHdlZW4gY29tbW9uIGFuY2VzdG9ycywgd2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZS4KK1doZW4gbGVmdCB1bnNwZWNpZmllZCwgdGhlIGRyaXZlciBpdHNlbGYgaXMgdXNlZCBmb3IgYm90aAoraW50ZXJuYWwgbWVyZ2UgYW5kIHRoZSBmaW5hbCBtZXJnZS4KKworCitgY29uZmxpY3QtbWFya2VyLXNpemVgCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoaXMgYXR0cmlidXRlIGNvbnRyb2xzIHRoZSBsZW5ndGggb2YgY29uZmxpY3QgbWFya2VycyBsZWZ0IGluCit0aGUgd29yayB0cmVlIGZpbGUgZHVyaW5nIGEgY29uZmxpY3RlZCBtZXJnZS4gIE9ubHkgc2V0dGluZyB0bwordGhlIHZhbHVlIHRvIGEgcG9zaXRpdmUgaW50ZWdlciBoYXMgYW55IG1lYW5pbmdmdWwgZWZmZWN0LgorCitGb3IgZXhhbXBsZSwgdGhpcyBsaW5lIGluIGAuZ2l0YXR0cmlidXRlc2AgY2FuIGJlIHVzZWQgdG8gdGVsbCB0aGUgbWVyZ2UKK21hY2hpbmVyeSB0byBsZWF2ZSBtdWNoIGxvbmdlciAoaW5zdGVhZCBvZiB0aGUgdXN1YWwgNy1jaGFyYWN0ZXItbG9uZykKK2NvbmZsaWN0IG1hcmtlcnMgd2hlbiBtZXJnaW5nIHRoZSBmaWxlIGBEb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHRgCityZXN1bHRzIGluIGEgY29uZmxpY3QuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0CWNvbmZsaWN0LW1hcmtlci1zaXplPTMyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitDaGVja2luZyB3aGl0ZXNwYWNlIGVycm9ycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworYHdoaXRlc3BhY2VgCiteXl5eXl5eXl5eXl4KKworVGhlIGBjb3JlLndoaXRlc3BhY2VgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYWxsb3dzIHlvdSB0byBkZWZpbmUgd2hhdAorJ2RpZmYnIGFuZCAnYXBwbHknIHNob3VsZCBjb25zaWRlciB3aGl0ZXNwYWNlIGVycm9ycyBmb3IgYWxsIHBhdGhzIGluCit0aGUgcHJvamVjdCAoU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuICBUaGlzIGF0dHJpYnV0ZSBnaXZlcyB5b3UgZmluZXIKK2NvbnRyb2wgcGVyIHBhdGguCisKK1NldDo6CisKKwlOb3RpY2UgYWxsIHR5cGVzIG9mIHBvdGVudGlhbCB3aGl0ZXNwYWNlIGVycm9ycyBrbm93biB0byBnaXQuCisJVGhlIHRhYiB3aWR0aCBpcyB0YWtlbiBmcm9tIHRoZSB2YWx1ZSBvZiB0aGUgYGNvcmUud2hpdGVzcGFjZWAKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCitVbnNldDo6CisKKwlEbyBub3Qgbm90aWNlIGFueXRoaW5nIGFzIGVycm9yLgorCitVbnNwZWNpZmllZDo6CisKKwlVc2UgdGhlIHZhbHVlIG9mIHRoZSBgY29yZS53aGl0ZXNwYWNlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvCisJZGVjaWRlIHdoYXQgdG8gbm90aWNlIGFzIGVycm9yLgorCitTdHJpbmc6OgorCisJU3BlY2lmeSBhIGNvbW1hIHNlcGFyYXRlIGxpc3Qgb2YgY29tbW9uIHdoaXRlc3BhY2UgcHJvYmxlbXMgdG8KKwlub3RpY2UgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBgY29yZS53aGl0ZXNwYWNlYCBjb25maWd1cmF0aW9uCisJdmFyaWFibGUuCisKKworQ3JlYXRpbmcgYW4gYXJjaGl2ZQorfn5+fn5+fn5+fn5+fn5+fn5+fgorCitgZXhwb3J0LWlnbm9yZWAKK15eXl5eXl5eXl5eXl5eXgorCitGaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCB0aGUgYXR0cmlidXRlIGBleHBvcnQtaWdub3JlYCB3b24ndCBiZSBhZGRlZCB0bworYXJjaGl2ZSBmaWxlcy4KKworYGV4cG9ydC1zdWJzdGAKK15eXl5eXl5eXl5eXl5eCisKK0lmIHRoZSBhdHRyaWJ1dGUgYGV4cG9ydC1zdWJzdGAgaXMgc2V0IGZvciBhIGZpbGUgdGhlbiBnaXQgd2lsbCBleHBhbmQKK3NldmVyYWwgcGxhY2Vob2xkZXJzIHdoZW4gYWRkaW5nIHRoaXMgZmlsZSB0byBhbiBhcmNoaXZlLiAgVGhlCitleHBhbnNpb24gZGVwZW5kcyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIGEgY29tbWl0IElELCBpLmUuLCBpZgorbGlua2dpdDpnaXQtYXJjaGl2ZVsxXSBoYXMgYmVlbiBnaXZlbiBhIHRyZWUgaW5zdGVhZCBvZiBhIGNvbW1pdCBvciBhCit0YWcgdGhlbiBubyByZXBsYWNlbWVudCB3aWxsIGJlIGRvbmUuICBUaGUgcGxhY2Vob2xkZXJzIGFyZSB0aGUgc2FtZQorYXMgdGhvc2UgZm9yIHRoZSBvcHRpb24gYC0tcHJldHR5PWZvcm1hdDpgIG9mIGxpbmtnaXQ6Z2l0LWxvZ1sxXSwKK2V4Y2VwdCB0aGF0IHRoZXkgbmVlZCB0byBiZSB3cmFwcGVkIGxpa2UgdGhpczogYCRGb3JtYXQ6UExBQ0VIT0xERVJTJGAKK2luIHRoZSBmaWxlLiAgRS5nLiB0aGUgc3RyaW5nIGAkRm9ybWF0OiVIJGAgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUKK2NvbW1pdCBoYXNoLgorCisKK1BhY2tpbmcgb2JqZWN0cworfn5+fn5+fn5+fn5+fn5+CisKK2BkZWx0YWAKK15eXl5eXl4KKworRGVsdGEgY29tcHJlc3Npb24gd2lsbCBub3QgYmUgYXR0ZW1wdGVkIGZvciBibG9icyBmb3IgcGF0aHMgd2l0aCB0aGUKK2F0dHJpYnV0ZSBgZGVsdGFgIHNldCB0byBmYWxzZS4KKworCitWaWV3aW5nIGZpbGVzIGluIEdVSSB0b29scworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworYGVuY29kaW5nYAorXl5eXl5eXl5eXgorCitUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdGhhdCBzaG91bGQKK2JlIHVzZWQgYnkgR1VJIHRvb2xzIChlLmcuIGxpbmtnaXQ6Z2l0a1sxXSBhbmQgbGlua2dpdDpnaXQtZ3VpWzFdKSB0bworZGlzcGxheSB0aGUgY29udGVudHMgb2YgdGhlIHJlbGV2YW50IGZpbGUuIE5vdGUgdGhhdCBkdWUgdG8gcGVyZm9ybWFuY2UKK2NvbnNpZGVyYXRpb25zIGxpbmtnaXQ6Z2l0a1sxXSBkb2VzIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgdW5sZXNzIHlvdQorbWFudWFsbHkgZW5hYmxlIHBlci1maWxlIGVuY29kaW5ncyBpbiBpdHMgb3B0aW9ucy4KKworSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldCBvciBoYXMgYW4gaW52YWxpZCB2YWx1ZSwgdGhlIHZhbHVlIG9mIHRoZQorYGd1aS5lbmNvZGluZ2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyB1c2VkIGluc3RlYWQKKyhTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworCitVU0lORyBNQUNSTyBBVFRSSUJVVEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBkbyBub3Qgd2FudCBhbnkgZW5kLW9mLWxpbmUgY29udmVyc2lvbnMgYXBwbGllZCB0bywgbm9yIHRleHR1YWwgZGlmZnMKK3Byb2R1Y2VkIGZvciwgYW55IGJpbmFyeSBmaWxlIHlvdSB0cmFjay4gIFlvdSB3b3VsZCBuZWVkIHRvIHNwZWNpZnkgZS5nLgorCistLS0tLS0tLS0tLS0KKyouanBnIC10ZXh0IC1kaWZmCistLS0tLS0tLS0tLS0KKworYnV0IHRoYXQgbWF5IGJlY29tZSBjdW1iZXJzb21lLCB3aGVuIHlvdSBoYXZlIG1hbnkgYXR0cmlidXRlcy4gIFVzaW5nCittYWNybyBhdHRyaWJ1dGVzLCB5b3UgY2FuIGRlZmluZSBhbiBhdHRyaWJ1dGUgdGhhdCwgd2hlbiBzZXQsIGFsc28KK3NldHMgb3IgdW5zZXRzIGEgbnVtYmVyIG9mIG90aGVyIGF0dHJpYnV0ZXMgYXQgdGhlIHNhbWUgdGltZS4gIFRoZQorc3lzdGVtIGtub3dzIGEgYnVpbHQtaW4gbWFjcm8gYXR0cmlidXRlLCBgYmluYXJ5YDoKKworLS0tLS0tLS0tLS0tCisqLmpwZyBiaW5hcnkKKy0tLS0tLS0tLS0tLQorCitTZXR0aW5nIHRoZSAiYmluYXJ5IiBhdHRyaWJ1dGUgYWxzbyB1bnNldHMgdGhlICJ0ZXh0IiBhbmQgImRpZmYiCithdHRyaWJ1dGVzIGFzIGFib3ZlLiAgTm90ZSB0aGF0IG1hY3JvIGF0dHJpYnV0ZXMgY2FuIG9ubHkgYmUgIlNldCIsCit0aG91Z2ggc2V0dGluZyBvbmUgbWlnaHQgaGF2ZSB0aGUgZWZmZWN0IG9mIHNldHRpbmcgb3IgdW5zZXR0aW5nIG90aGVyCithdHRyaWJ1dGVzIG9yIGV2ZW4gcmV0dXJuaW5nIG90aGVyIGF0dHJpYnV0ZXMgdG8gdGhlICJVbnNwZWNpZmllZCIKK3N0YXRlLgorCisKK0RFRklOSU5HIE1BQ1JPIEFUVFJJQlVURVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3VzdG9tIG1hY3JvIGF0dHJpYnV0ZXMgY2FuIGJlIGRlZmluZWQgb25seSBpbiB0aGUgYC5naXRhdHRyaWJ1dGVzYAorZmlsZSBhdCB0aGUgdG9wbGV2ZWwgKGkuZS4gbm90IGluIGFueSBzdWJkaXJlY3RvcnkpLiAgVGhlIGJ1aWx0LWluCittYWNybyBhdHRyaWJ1dGUgImJpbmFyeSIgaXMgZXF1aXZhbGVudCB0bzoKKworLS0tLS0tLS0tLS0tCitbYXR0cl1iaW5hcnkgLWRpZmYgLW1lcmdlIC10ZXh0CistLS0tLS0tLS0tLS0KKworCitFWEFNUExFCistLS0tLS0tCisKK0lmIHlvdSBoYXZlIHRoZXNlIHRocmVlIGBnaXRhdHRyaWJ1dGVzYCBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoaW4gJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzKQorCithKglmb28gIWJhciAtYmF6CisKKyhpbiAuZ2l0YXR0cmlidXRlcykKK2FiYwlmb28gYmFyIGJhegorCisoaW4gdC8uZ2l0YXR0cmlidXRlcykKK2FiKgltZXJnZT1maWxmcmUKK2FiYwktZm9vIC1iYXIKKyouYwlmcm90egorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGUgYXR0cmlidXRlcyBnaXZlbiB0byBwYXRoIGB0L2FiY2AgYXJlIGNvbXB1dGVkIGFzIGZvbGxvd3M6CisKKzEuIEJ5IGV4YW1pbmluZyBgdC8uZ2l0YXR0cmlidXRlc2AgKHdoaWNoIGlzIGluIHRoZSBzYW1lCisgICBkaXJlY3RvcnkgYXMgdGhlIHBhdGggaW4gcXVlc3Rpb24pLCBnaXQgZmluZHMgdGhhdCB0aGUgZmlyc3QKKyAgIGxpbmUgbWF0Y2hlcy4gIGBtZXJnZWAgYXR0cmlidXRlIGlzIHNldC4gIEl0IGFsc28gZmluZHMgdGhhdAorICAgdGhlIHNlY29uZCBsaW5lIG1hdGNoZXMsIGFuZCBhdHRyaWJ1dGVzIGBmb29gIGFuZCBgYmFyYAorICAgYXJlIHVuc2V0LgorCisyLiBUaGVuIGl0IGV4YW1pbmVzIGAuZ2l0YXR0cmlidXRlc2AgKHdoaWNoIGlzIGluIHRoZSBwYXJlbnQKKyAgIGRpcmVjdG9yeSksIGFuZCBmaW5kcyB0aGF0IHRoZSBmaXJzdCBsaW5lIG1hdGNoZXMsIGJ1dAorICAgYHQvLmdpdGF0dHJpYnV0ZXNgIGZpbGUgYWxyZWFkeSBkZWNpZGVkIGhvdyBgbWVyZ2VgLCBgZm9vYAorICAgYW5kIGBiYXJgIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGdpdmVuIHRvIHRoaXMgcGF0aCwgc28gaXQKKyAgIGxlYXZlcyBgZm9vYCBhbmQgYGJhcmAgdW5zZXQuICBBdHRyaWJ1dGUgYGJhemAgaXMgc2V0LgorCiszLiBGaW5hbGx5IGl0IGV4YW1pbmVzIGAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXNgLiAgVGhpcyBmaWxlCisgICBpcyB1c2VkIHRvIG92ZXJyaWRlIHRoZSBpbi10cmVlIHNldHRpbmdzLiAgVGhlIGZpcnN0IGxpbmUgaXMKKyAgIGEgbWF0Y2gsIGFuZCBgZm9vYCBpcyBzZXQsIGBiYXJgIGlzIHJldmVydGVkIHRvIHVuc3BlY2lmaWVkCisgICBzdGF0ZSwgYW5kIGBiYXpgIGlzIHVuc2V0LgorCitBcyB0aGUgcmVzdWx0LCB0aGUgYXR0cmlidXRlcyBhc3NpZ25tZW50IHRvIGB0L2FiY2AgYmVjb21lczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZm9vCXNldCB0byB0cnVlCitiYXIJdW5zcGVjaWZpZWQKK2JheglzZXQgdG8gZmFsc2UKK21lcmdlCXNldCB0byBzdHJpbmcgdmFsdWUgImZpbGZyZSIKK2Zyb3R6CXVuc3BlY2lmaWVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVjay1hdHRyWzFdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmMxNTAwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjbGkudHh0CkBAIC0wLDAgKzEsMjA5IEBACitnaXRjbGkoNykKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXRjbGkgLSBnaXQgY29tbWFuZCBsaW5lIGludGVyZmFjZSBhbmQgY29udmVudGlvbnMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitnaXRjbGkKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBtYW51YWwgZGVzY3JpYmVzIHRoZSBjb252ZW50aW9uIHVzZWQgdGhyb3VnaG91dCBnaXQgQ0xJLgorCitNYW55IGNvbW1hbmRzIHRha2UgcmV2aXNpb25zIChtb3N0IG9mdGVuICJjb21taXRzIiwgYnV0IHNvbWV0aW1lcworInRyZWUtaXNoIiwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IGFuZCBjb21tYW5kKSBhbmQgcGF0aHMgYXMgdGhlaXIKK2FyZ3VtZW50cy4gIEhlcmUgYXJlIHRoZSBydWxlczoKKworICogUmV2aXNpb25zIGNvbWUgZmlyc3QgYW5kIHRoZW4gcGF0aHMuCisgICBFLmcuIGluIGBnaXQgZGlmZiB2MS4wIHYyLjAgYXJjaC94ODYgaW5jbHVkZS9hc20teDg2YCwKKyAgIGB2MS4wYCBhbmQgYHYyLjBgIGFyZSByZXZpc2lvbnMgYW5kIGBhcmNoL3g4NmAgYW5kIGBpbmNsdWRlL2FzbS14ODZgCisgICBhcmUgcGF0aHMuCisKKyAqIFdoZW4gYW4gYXJndW1lbnQgY2FuIGJlIG1pc3VuZGVyc3Rvb2QgYXMgZWl0aGVyIGEgcmV2aXNpb24gb3IgYSBwYXRoLAorICAgdGhleSBjYW4gYmUgZGlzYW1iaWd1YXRlZCBieSBwbGFjaW5nIGAtLWAgYmV0d2VlbiB0aGVtLgorICAgRS5nLiBgZ2l0IGRpZmYgLS0gSEVBRGAgaXMsICJJIGhhdmUgYSBmaWxlIGNhbGxlZCBIRUFEIGluIG15IHdvcmsKKyAgIHRyZWUuICBQbGVhc2Ugc2hvdyBjaGFuZ2VzIGJldHdlZW4gdGhlIHZlcnNpb24gSSBzdGFnZWQgaW4gdGhlIGluZGV4CisgICBhbmQgd2hhdCBJIGhhdmUgaW4gdGhlIHdvcmsgdHJlZSBmb3IgdGhhdCBmaWxlIi4gbm90ICJzaG93IGRpZmZlcmVuY2UKKyAgIGJldHdlZW4gdGhlIEhFQUQgY29tbWl0IGFuZCB0aGUgd29yayB0cmVlIGFzIGEgd2hvbGUiLiAgWW91IGNhbiBzYXkKKyAgIGBnaXQgZGlmZiBIRUFEIC0tYCB0byBhc2sgZm9yIHRoZSBsYXR0ZXIuCisKKyAqIFdpdGhvdXQgZGlzYW1iaWd1YXRpbmcgYC0tYCwgZ2l0IG1ha2VzIGEgcmVhc29uYWJsZSBndWVzcywgYnV0IGVycm9ycworICAgb3V0IGFuZCBhc2tpbmcgeW91IHRvIGRpc2FtYmlndWF0ZSB3aGVuIGFtYmlndW91cy4gIEUuZy4gaWYgeW91IGhhdmUgYQorICAgZmlsZSBjYWxsZWQgSEVBRCBpbiB5b3VyIHdvcmsgdHJlZSwgYGdpdCBkaWZmIEhFQURgIGlzIGFtYmlndW91cywgYW5kCisgICB5b3UgaGF2ZSB0byBzYXkgZWl0aGVyIGBnaXQgZGlmZiBIRUFEIC0tYCBvciBgZ2l0IGRpZmYgLS0gSEVBRGAgdG8KKyAgIGRpc2FtYmlndWF0ZS4KKysKK1doZW4gd3JpdGluZyBhIHNjcmlwdCB0aGF0IGlzIGV4cGVjdGVkIHRvIGhhbmRsZSByYW5kb20gdXNlci1pbnB1dCwgaXQgaXMKK2EgZ29vZCBwcmFjdGljZSB0byBtYWtlIGl0IGV4cGxpY2l0IHdoaWNoIGFyZ3VtZW50cyBhcmUgd2hpY2ggYnkgcGxhY2luZworZGlzYW1iaWd1YXRpbmcgYC0tYCBhdCBhcHByb3ByaWF0ZSBwbGFjZXMuCisKKyAqIE1hbnkgY29tbWFuZHMgYWxsb3cgd2lsZGNhcmRzIGluIHBhdGhzLCBidXQgeW91IG5lZWQgdG8gcHJvdGVjdAorICAgdGhlbSBmcm9tIGdldHRpbmcgZ2xvYmJlZCBieSB0aGUgc2hlbGwuICBUaGVzZSB0d28gbWVhbiBkaWZmZXJlbnQKKyAgIHRoaW5nczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtLSAqLmMKKyQgZ2l0IGNoZWNrb3V0IC0tIFwqLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGUgZm9ybWVyIGxldHMgeW91ciBzaGVsbCBleHBhbmQgdGhlIGZpbGVnbG9iLCBhbmQgeW91IGFyZSBhc2tpbmcKK3RoZSBkb3QtQyBmaWxlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZSB0byBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSB2ZXJzaW9uCitpbiB0aGUgaW5kZXguICBUaGUgbGF0dGVyIHBhc3NlcyB0aGUgYCouY2AgdG8gR2l0LCBhbmQgeW91IGFyZSBhc2tpbmcKK3RoZSBwYXRocyBpbiB0aGUgaW5kZXggdGhhdCBtYXRjaCB0aGUgcGF0dGVybiB0byBiZSBjaGVja2VkIG91dCB0byB5b3VyCit3b3JraW5nIHRyZWUuICBBZnRlciBydW5uaW5nIGBnaXQgYWRkIGhlbGxvLmM7IHJtIGhlbGxvLmNgLCB5b3Ugd2lsbCBfbm90Xworc2VlIGBoZWxsby5jYCBpbiB5b3VyIHdvcmtpbmcgdHJlZSB3aXRoIHRoZSBmb3JtZXIsIGJ1dCB3aXRoIHRoZSBsYXR0ZXIKK3lvdSB3aWxsLgorCitIZXJlIGFyZSB0aGUgcnVsZXMgcmVnYXJkaW5nIHRoZSAiZmxhZ3MiIHRoYXQgeW91IHNob3VsZCBmb2xsb3cgd2hlbiB5b3UgYXJlCitzY3JpcHRpbmcgZ2l0OgorCisgKiBpdCdzIHByZWZlcnJlZCB0byB1c2UgdGhlIG5vbiBkYXNoZWQgZm9ybSBvZiBnaXQgY29tbWFuZHMsIHdoaWNoIG1lYW5zIHRoYXQKKyAgIHlvdSBzaG91bGQgcHJlZmVyIGBnaXQgZm9vYCB0byBgZ2l0LWZvb2AuCisKKyAqIHNwbGl0dGluZyBzaG9ydCBvcHRpb25zIHRvIHNlcGFyYXRlIHdvcmRzIChwcmVmZXIgYGdpdCBmb28gLWEgLWJgCisgICB0byBgZ2l0IGZvbyAtYWJgLCB0aGUgbGF0dGVyIG1heSBub3QgZXZlbiB3b3JrKS4KKworICogd2hlbiBhIGNvbW1hbmQgbGluZSBvcHRpb24gdGFrZXMgYW4gYXJndW1lbnQsIHVzZSB0aGUgJ3N0aWNrZWQnIGZvcm0uICBJbgorICAgb3RoZXIgd29yZHMsIHdyaXRlIGBnaXQgZm9vIC1vQXJnYCBpbnN0ZWFkIG9mIGBnaXQgZm9vIC1vIEFyZ2AgZm9yIHNob3J0CisgICBvcHRpb25zLCBhbmQgYGdpdCBmb28gLS1sb25nLW9wdD1BcmdgIGluc3RlYWQgb2YgYGdpdCBmb28gLS1sb25nLW9wdCBBcmdgCisgICBmb3IgbG9uZyBvcHRpb25zLiAgQW4gb3B0aW9uIHRoYXQgdGFrZXMgb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50IG11c3QgYmUKKyAgIHdyaXR0ZW4gaW4gdGhlICdzdGlja2VkJyBmb3JtLgorCisgKiB3aGVuIHlvdSBnaXZlIGEgcmV2aXNpb24gcGFyYW1ldGVyIHRvIGEgY29tbWFuZCwgbWFrZSBzdXJlIHRoZSBwYXJhbWV0ZXIgaXMKKyAgIG5vdCBhbWJpZ3VvdXMgd2l0aCBhIG5hbWUgb2YgYSBmaWxlIGluIHRoZSB3b3JrIHRyZWUuICBFLmcuIGRvIG5vdCB3cml0ZQorICAgYGdpdCBsb2cgLTEgSEVBRGAgYnV0IHdyaXRlIGBnaXQgbG9nIC0xIEhFQUQgLS1gOyB0aGUgZm9ybWVyIHdpbGwgbm90IHdvcmsKKyAgIGlmIHlvdSBoYXBwZW4gdG8gaGF2ZSBhIGZpbGUgY2FsbGVkIGBIRUFEYCBpbiB0aGUgd29yayB0cmVlLgorCisgKiBtYW55IGNvbW1hbmRzIGFsbG93IGEgbG9uZyBvcHRpb24gIi0tb3B0aW9uIiB0byBiZSBhYmJyZXZpYXRlZAorICAgb25seSB0byB0aGVpciB1bmlxdWUgcHJlZml4IChlLmcuIGlmIHRoZXJlIGlzIG5vIG90aGVyIG9wdGlvbgorICAgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCAib3B0IiwgeW91IG1heSBiZSBhYmxlIHRvIHNwZWxsICItLW9wdCIgdG8KKyAgIGludm9rZSB0aGUgIi0tb3B0aW9uIiBmbGFnKSwgYnV0IHlvdSBzaG91bGQgZnVsbHkgc3BlbGwgdGhlbSBvdXQKKyAgIHdoZW4gd3JpdGluZyB5b3VyIHNjcmlwdHM7IGxhdGVyIHZlcnNpb25zIG9mIEdpdCBtYXkgaW50cm9kdWNlIGEKKyAgIG5ldyBvcHRpb24gd2hvc2UgbmFtZSBzaGFyZXMgdGhlIHNhbWUgcHJlZml4LCBlLmcuICItLW9wdGltaXplIiwKKyAgIHRvIG1ha2UgYSBzaG9ydCBwcmVmaXggdGhhdCB1c2VkIHRvIGJlIHVuaXF1ZSBubyBsb25nZXIgdW5pcXVlLgorCisKK0VOSEFOQ0VEIE9QVElPTiBQQVJTRVIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Zyb20gdGhlIGdpdCAxLjUuNCBzZXJpZXMgYW5kIGZ1cnRoZXIsIG1hbnkgZ2l0IGNvbW1hbmRzIChub3QgYWxsIG9mIHRoZW0gYXQgdGhlCit0aW1lIG9mIHRoZSB3cml0aW5nIHRob3VnaCkgY29tZSB3aXRoIGFuIGVuaGFuY2VkIG9wdGlvbiBwYXJzZXIuCisKK0hlcmUgaXMgYSBsaXN0IG9mIHRoZSBmYWNpbGl0aWVzIHByb3ZpZGVkIGJ5IHRoaXMgb3B0aW9uIHBhcnNlci4KKworCitNYWdpYyBPcHRpb25zCit+fn5+fn5+fn5+fn5+CitDb21tYW5kcyB3aGljaCBoYXZlIHRoZSBlbmhhbmNlZCBvcHRpb24gcGFyc2VyIGFjdGl2YXRlZCBhbGwgdW5kZXJzdGFuZCBhCitjb3VwbGUgb2YgbWFnaWMgY29tbWFuZCBsaW5lIG9wdGlvbnM6CisKKy1oOjoKKwlnaXZlcyBhIHByZXR0eSBwcmludGVkIHVzYWdlIG9mIHRoZSBjb21tYW5kLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkZXNjcmliZSAtaAordXNhZ2U6IGdpdCBkZXNjcmliZSBbb3B0aW9uc10gPGNvbW1pdHRpc2g+KgorCisgICAgLS1jb250YWlucyAgICAgICAgICAgIGZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQKKyAgICAtLWRlYnVnICAgICAgICAgICAgICAgZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVycgorICAgIC0tYWxsICAgICAgICAgICAgICAgICB1c2UgYW55IHJlZiBpbiAuZ2l0L3JlZnMKKyAgICAtLXRhZ3MgICAgICAgICAgICAgICAgdXNlIGFueSB0YWcgaW4gLmdpdC9yZWZzL3RhZ3MKKyAgICAtLWFiYnJldiBbPG4+XSAgICAgICAgdXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMKKyAgICAtLWNhbmRpZGF0ZXMgPG4+ICAgICAgY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0taGVscC1hbGw6OgorCVNvbWUgZ2l0IGNvbW1hbmRzIHRha2Ugb3B0aW9ucyB0aGF0IGFyZSBvbmx5IHVzZWQgZm9yIHBsdW1iaW5nIG9yIHRoYXQKKwlhcmUgZGVwcmVjYXRlZCwgYW5kIHN1Y2ggb3B0aW9ucyBhcmUgaGlkZGVuIGZyb20gdGhlIGRlZmF1bHQgdXNhZ2UuIFRoaXMKKwlvcHRpb24gZ2l2ZXMgdGhlIGZ1bGwgbGlzdCBvZiBvcHRpb25zLgorCisKK05lZ2F0aW5nIG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn4KK09wdGlvbnMgd2l0aCBsb25nIG9wdGlvbiBuYW1lcyBjYW4gYmUgbmVnYXRlZCBieSBwcmVmaXhpbmcgYC0tbm8tYC4gRm9yCitleGFtcGxlLCBgZ2l0IGJyYW5jaGAgaGFzIHRoZSBvcHRpb24gYC0tdHJhY2tgIHdoaWNoIGlzICdvbicgYnkgZGVmYXVsdC4gWW91CitjYW4gdXNlIGAtLW5vLXRyYWNrYCB0byBvdmVycmlkZSB0aGF0IGJlaGF2aW91ci4gVGhlIHNhbWUgZ29lcyBmb3IgYC0tY29sb3JgCithbmQgYC0tbm8tY29sb3JgLgorCisKK0FnZ3JlZ2F0aW5nIHNob3J0IG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0NvbW1hbmRzIHRoYXQgc3VwcG9ydCB0aGUgZW5oYW5jZWQgb3B0aW9uIHBhcnNlciBhbGxvdyB5b3UgdG8gYWdncmVnYXRlIHNob3J0CitvcHRpb25zLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBmb3IgZXhhbXBsZSB1c2UgYGdpdCBybSAtcmZgIG9yCitgZ2l0IGNsZWFuIC1mZHhgLgorCisKK0FiYnJldmlhdGluZyBsb25nIG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0NvbW1hbmRzIHRoYXQgc3VwcG9ydCB0aGUgZW5oYW5jZWQgb3B0aW9uIHBhcnNlciBhY2NlcHRzIHVuaXF1ZQorcHJlZml4IG9mIGEgbG9uZyBvcHRpb24gYXMgaWYgaXQgaXMgZnVsbHkgc3BlbGxlZCBvdXQsIGJ1dCB1c2UgdGhpcword2l0aCBhIGNhdXRpb24uICBGb3IgZXhhbXBsZSwgYGdpdCBjb21taXQgLS1hbWVuYCBiZWhhdmVzIGFzIGlmIHlvdQordHlwZWQgYGdpdCBjb21taXQgLS1hbWVuZGAsIGJ1dCB0aGF0IGlzIHRydWUgb25seSB1bnRpbCBhIGxhdGVyIHZlcnNpb24KK29mIEdpdCBpbnRyb2R1Y2VzIGFub3RoZXIgb3B0aW9uIHRoYXQgc2hhcmVzIHRoZSBzYW1lIHByZWZpeCwKK2UuZyBgZ2l0IGNvbW1pdCAtLWFtZW5pdHkiIG9wdGlvbi4KKworCitTZXBhcmF0aW5nIGFyZ3VtZW50IGZyb20gdGhlIG9wdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1lvdSBjYW4gd3JpdGUgdGhlIG1hbmRhdG9yeSBvcHRpb24gcGFyYW1ldGVyIHRvIGFuIG9wdGlvbiBhcyBhIHNlcGFyYXRlCit3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGF0IG1lYW5zIHRoYXQgYWxsIHRoZSBmb2xsb3dpbmcgdXNlcyB3b3JrOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmb28gLS1sb25nLW9wdD1BcmcKKyQgZ2l0IGZvbyAtLWxvbmctb3B0IEFyZworJCBnaXQgZm9vIC1vQXJnCiskIGdpdCBmb28gLW8gQXJnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hvd2V2ZXIsIHRoaXMgaXMgKk5PVCogYWxsb3dlZCBmb3Igc3dpdGNoZXMgd2l0aCBhbiBvcHRpb25hbCB2YWx1ZSwgd2hlcmUgdGhlCisnc3RpY2tlZCcgZm9ybSBtdXN0IGJlIHVzZWQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkZXNjcmliZSAtLWFiYnJldiBIRUFEICAgICAjIGNvcnJlY3QKKyQgZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTEwIEhFQUQgICMgY29ycmVjdAorJCBnaXQgZGVzY3JpYmUgLS1hYmJyZXYgMTAgSEVBRCAgIyBOT1QgV0hBVCBZT1UgTUVBTlQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitOT1RFUyBPTiBGUkVRVUVOVExZIENPTkZVU0VEIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYW55IGNvbW1hbmRzIHRoYXQgY2FuIHdvcmsgb24gZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZQorYW5kL29yIGluIHRoZSBpbmRleCBjYW4gdGFrZSBgLS1jYWNoZWRgIGFuZC9vciBgLS1pbmRleGAKK29wdGlvbnMuICBTb21ldGltZXMgcGVvcGxlIGluY29ycmVjdGx5IHRoaW5rIHRoYXQsIGJlY2F1c2UKK3RoZSBpbmRleCB3YXMgb3JpZ2luYWxseSBjYWxsZWQgY2FjaGUsIHRoZXNlIHR3byBhcmUKK3N5bm9ueW1zLiAgVGhleSBhcmUgKm5vdCogLS0gdGhlc2UgdHdvIG9wdGlvbnMgbWVhbiB2ZXJ5CitkaWZmZXJlbnQgdGhpbmdzLgorCisgKiBUaGUgYC0tY2FjaGVkYCBvcHRpb24gaXMgdXNlZCB0byBhc2sgYSBjb21tYW5kIHRoYXQKKyAgIHVzdWFsbHkgd29ya3Mgb24gZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byAqb25seSogd29yaworICAgd2l0aCB0aGUgaW5kZXguICBGb3IgZXhhbXBsZSwgYGdpdCBncmVwYCwgd2hlbiB1c2VkCisgICB3aXRob3V0IGEgY29tbWl0IHRvIHNwZWNpZnkgZnJvbSB3aGljaCBjb21taXQgdG8gbG9vayBmb3IKKyAgIHN0cmluZ3MgaW4sIHVzdWFsbHkgd29ya3Mgb24gZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwKKyAgIGJ1dCB3aXRoIHRoZSBgLS1jYWNoZWRgIG9wdGlvbiwgaXQgbG9va3MgZm9yIHN0cmluZ3MgaW4KKyAgIHRoZSBpbmRleC4KKworICogVGhlIGAtLWluZGV4YCBvcHRpb24gaXMgdXNlZCB0byBhc2sgYSBjb21tYW5kIHRoYXQKKyAgIHVzdWFsbHkgd29ya3Mgb24gZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byAqYWxzbyoKKyAgIGFmZmVjdCB0aGUgaW5kZXguICBGb3IgZXhhbXBsZSwgYGdpdCBzdGFzaCBhcHBseWAgdXN1YWxseQorICAgbWVyZ2VzIGNoYW5nZXMgcmVjb3JkZWQgaW4gYSBzdGFzaCB0byB0aGUgd29ya2luZyB0cmVlLAorICAgYnV0IHdpdGggdGhlIGAtLWluZGV4YCBvcHRpb24sIGl0IGFsc28gbWVyZ2VzIGNoYW5nZXMgdG8KKyAgIHRoZSBpbmRleCBhcyB3ZWxsLgorCitgZ2l0IGFwcGx5YCBjb21tYW5kIGNhbiBiZSB1c2VkIHdpdGggYC0tY2FjaGVkYCBhbmQKK2AtLWluZGV4YCAoYnV0IG5vdCBhdCB0aGUgc2FtZSB0aW1lKS4gIFVzdWFsbHkgdGhlIGNvbW1hbmQKK29ubHkgYWZmZWN0cyB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgYnV0IHdpdGgKK2AtLWluZGV4YCwgaXQgcGF0Y2hlcyBib3RoIHRoZSBmaWxlcyBhbmQgdGhlaXIgaW5kZXgKK2VudHJpZXMsIGFuZCB3aXRoIGAtLWNhY2hlZGAsIGl0IG1vZGlmaWVzIG9ubHkgdGhlIGluZGV4CitlbnRyaWVzLgorCitTZWUgYWxzbyBodHRwOi8vbWFyYy5pbmZvLz9sPWdpdCZtPTExNjU2MzEzNTYyMDM1OSBhbmQKK2h0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTE5MTUwMzkzNjIwMjczIGZvciBmdXJ0aGVyCitpbmZvcm1hdGlvbi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRjb3JlLXR1dG9yaWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzI1YzVhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjb3JlLXR1dG9yaWFsLnR4dApAQCAtMCwwICsxLDE3MDggQEAKK2dpdGNvcmUtdHV0b3JpYWwoNykKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0Y29yZS10dXRvcmlhbCAtIEEgZ2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitnaXQgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyB0dXRvcmlhbCBleHBsYWlucyBob3cgdG8gdXNlIHRoZSAiY29yZSIgZ2l0IGNvbW1hbmRzIHRvIHNldCB1cCBhbmQKK3dvcmsgd2l0aCBhIGdpdCByZXBvc2l0b3J5LgorCitJZiB5b3UganVzdCBuZWVkIHRvIHVzZSBnaXQgYXMgYSByZXZpc2lvbiBjb250cm9sIHN5c3RlbSB5b3UgbWF5IHByZWZlcgordG8gc3RhcnQgd2l0aCAiQSBUdXRvcmlhbCBJbnRyb2R1Y3Rpb24gdG8gR0lUIiAobGlua2dpdDpnaXR0dXRvcmlhbFs3XSkgb3IKK2xpbms6dXNlci1tYW51YWwuaHRtbFt0aGUgR0lUIFVzZXIgTWFudWFsXS4KKworSG93ZXZlciwgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBsb3ctbGV2ZWwgdG9vbHMgY2FuIGJlIGhlbHBmdWwgaWYKK3lvdSB3YW50IHRvIHVuZGVyc3RhbmQgZ2l0J3MgaW50ZXJuYWxzLgorCitUaGUgY29yZSBnaXQgaXMgb2Z0ZW4gY2FsbGVkICJwbHVtYmluZyIsIHdpdGggdGhlIHByZXR0aWVyIHVzZXIKK2ludGVyZmFjZXMgb24gdG9wIG9mIGl0IGNhbGxlZCAicG9yY2VsYWluIi4gWW91IG1heSBub3Qgd2FudCB0byB1c2UgdGhlCitwbHVtYmluZyBkaXJlY3RseSB2ZXJ5IG9mdGVuLCBidXQgaXQgY2FuIGJlIGdvb2QgdG8ga25vdyB3aGF0IHRoZQorcGx1bWJpbmcgZG9lcyBmb3Igd2hlbiB0aGUgcG9yY2VsYWluIGlzbid0IGZsdXNoaW5nLgorCitCYWNrIHdoZW4gdGhpcyBkb2N1bWVudCB3YXMgb3JpZ2luYWxseSB3cml0dGVuLCBtYW55IHBvcmNlbGFpbgorY29tbWFuZHMgd2VyZSBzaGVsbCBzY3JpcHRzLiBGb3Igc2ltcGxpY2l0eSwgaXQgc3RpbGwgdXNlcyB0aGVtIGFzCitleGFtcGxlcyB0byBpbGx1c3RyYXRlIGhvdyBwbHVtYmluZyBpcyBmaXQgdG9nZXRoZXIgdG8gZm9ybSB0aGUKK3BvcmNlbGFpbiBjb21tYW5kcy4gVGhlIHNvdXJjZSB0cmVlIGluY2x1ZGVzIHNvbWUgb2YgdGhlc2Ugc2NyaXB0cyBpbgorY29udHJpYi9leGFtcGxlcy8gZm9yIHJlZmVyZW5jZS4gQWx0aG91Z2ggdGhlc2UgYXJlIG5vdCBpbXBsZW1lbnRlZCBhcworc2hlbGwgc2NyaXB0cyBhbnltb3JlLCB0aGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgcGx1bWJpbmcgbGF5ZXIKK2NvbW1hbmRzIGRvIGlzIHN0aWxsIHZhbGlkLgorCitbTk9URV0KK0RlZXBlciB0ZWNobmljYWwgZGV0YWlscyBhcmUgb2Z0ZW4gbWFya2VkIGFzIE5vdGVzLCB3aGljaCB5b3UgY2FuCitza2lwIG9uIHlvdXIgZmlyc3QgcmVhZGluZy4KKworCitDcmVhdGluZyBhIGdpdCByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0aW5nIGEgbmV3IGdpdCByZXBvc2l0b3J5IGNvdWxkbid0IGJlIGVhc2llcjogYWxsIGdpdCByZXBvc2l0b3JpZXMgc3RhcnQKK291dCBlbXB0eSwgYW5kIHRoZSBvbmx5IHRoaW5nIHlvdSBuZWVkIHRvIGRvIGlzIGZpbmQgeW91cnNlbGYgYQorc3ViZGlyZWN0b3J5IHRoYXQgeW91IHdhbnQgdG8gdXNlIGFzIGEgd29ya2luZyB0cmVlIC0gZWl0aGVyIGFuIGVtcHR5CitvbmUgZm9yIGEgdG90YWxseSBuZXcgcHJvamVjdCwgb3IgYW4gZXhpc3Rpbmcgd29ya2luZyB0cmVlIHRoYXQgeW91IHdhbnQKK3RvIGltcG9ydCBpbnRvIGdpdC4KKworRm9yIG91ciBmaXJzdCBleGFtcGxlLCB3ZSdyZSBnb2luZyB0byBzdGFydCBhIHRvdGFsbHkgbmV3IHJlcG9zaXRvcnkgZnJvbQorc2NyYXRjaCwgd2l0aCBubyBwcmUtZXhpc3RpbmcgZmlsZXMsIGFuZCB3ZSdsbCBjYWxsIGl0ICdnaXQtdHV0b3JpYWwnLgorVG8gc3RhcnQgdXAsIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeSBmb3IgaXQsIGNoYW5nZSBpbnRvIHRoYXQKK3N1YmRpcmVjdG9yeSwgYW5kIGluaXRpYWxpemUgdGhlIGdpdCBpbmZyYXN0cnVjdHVyZSB3aXRoICdnaXQgaW5pdCc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBta2RpciBnaXQtdHV0b3JpYWwKKyQgY2QgZ2l0LXR1dG9yaWFsCiskIGdpdCBpbml0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gd2hpY2ggZ2l0IHdpbGwgcmVwbHkKKworLS0tLS0tLS0tLS0tLS0tLQorSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gLmdpdC8KKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggaXMganVzdCBnaXQncyB3YXkgb2Ygc2F5aW5nIHRoYXQgeW91IGhhdmVuJ3QgYmVlbiBkb2luZyBhbnl0aGluZworc3RyYW5nZSwgYW5kIHRoYXQgaXQgd2lsbCBoYXZlIGNyZWF0ZWQgYSBsb2NhbCBgLmdpdGAgZGlyZWN0b3J5IHNldHVwIGZvcgoreW91ciBuZXcgcHJvamVjdC4gWW91IHdpbGwgbm93IGhhdmUgYSBgLmdpdGAgZGlyZWN0b3J5LCBhbmQgeW91IGNhbgoraW5zcGVjdCB0aGF0IHdpdGggJ2xzJy4gRm9yIHlvdXIgbmV3IGVtcHR5IHByb2plY3QsIGl0IHNob3VsZCBzaG93IHlvdQordGhyZWUgZW50cmllcywgYW1vbmcgb3RoZXIgdGhpbmdzOgorCisgLSBhIGZpbGUgY2FsbGVkIGBIRUFEYCwgdGhhdCBoYXMgYHJlZjogcmVmcy9oZWFkcy9tYXN0ZXJgIGluIGl0LgorICAgVGhpcyBpcyBzaW1pbGFyIHRvIGEgc3ltYm9saWMgbGluayBhbmQgcG9pbnRzIGF0CisgICBgcmVmcy9oZWFkcy9tYXN0ZXJgIHJlbGF0aXZlIHRvIHRoZSBgSEVBRGAgZmlsZS4KKysKK0Rvbid0IHdvcnJ5IGFib3V0IHRoZSBmYWN0IHRoYXQgdGhlIGZpbGUgdGhhdCB0aGUgYEhFQURgIGxpbmsgcG9pbnRzIHRvCitkb2Vzbid0IGV2ZW4gZXhpc3QgeWV0IC0tIHlvdSBoYXZlbid0IGNyZWF0ZWQgdGhlIGNvbW1pdCB0aGF0IHdpbGwKK3N0YXJ0IHlvdXIgYEhFQURgIGRldmVsb3BtZW50IGJyYW5jaCB5ZXQuCisKKyAtIGEgc3ViZGlyZWN0b3J5IGNhbGxlZCBgb2JqZWN0c2AsIHdoaWNoIHdpbGwgY29udGFpbiBhbGwgdGhlCisgICBvYmplY3RzIG9mIHlvdXIgcHJvamVjdC4gWW91IHNob3VsZCBuZXZlciBoYXZlIGFueSByZWFsIHJlYXNvbiB0bworICAgbG9vayBhdCB0aGUgb2JqZWN0cyBkaXJlY3RseSwgYnV0IHlvdSBtaWdodCB3YW50IHRvIGtub3cgdGhhdCB0aGVzZQorICAgb2JqZWN0cyBhcmUgd2hhdCBjb250YWlucyBhbGwgdGhlIHJlYWwgJ2RhdGEnIGluIHlvdXIgcmVwb3NpdG9yeS4KKworIC0gYSBzdWJkaXJlY3RvcnkgY2FsbGVkIGByZWZzYCwgd2hpY2ggY29udGFpbnMgcmVmZXJlbmNlcyB0byBvYmplY3RzLgorCitJbiBwYXJ0aWN1bGFyLCB0aGUgYHJlZnNgIHN1YmRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gdHdvIG90aGVyCitzdWJkaXJlY3RvcmllcywgbmFtZWQgYGhlYWRzYCBhbmQgYHRhZ3NgIHJlc3BlY3RpdmVseS4gVGhleSBkbworZXhhY3RseSB3aGF0IHRoZWlyIG5hbWVzIGltcGx5OiB0aGV5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byBhbnkgbnVtYmVyCitvZiBkaWZmZXJlbnQgJ2hlYWRzJyBvZiBkZXZlbG9wbWVudCAoYWthICdicmFuY2hlcycpLCBhbmQgdG8gYW55CisndGFncycgdGhhdCB5b3UgaGF2ZSBjcmVhdGVkIHRvIG5hbWUgc3BlY2lmaWMgdmVyc2lvbnMgaW4geW91cgorcmVwb3NpdG9yeS4KKworT25lIG5vdGU6IHRoZSBzcGVjaWFsIGBtYXN0ZXJgIGhlYWQgaXMgdGhlIGRlZmF1bHQgYnJhbmNoLCB3aGljaCBpcword2h5IHRoZSBgLmdpdC9IRUFEYCBmaWxlIHdhcyBjcmVhdGVkIHBvaW50cyB0byBpdCBldmVuIGlmIGl0Citkb2Vzbid0IHlldCBleGlzdC4gQmFzaWNhbGx5LCB0aGUgYEhFQURgIGxpbmsgaXMgc3VwcG9zZWQgdG8gYWx3YXlzCitwb2ludCB0byB0aGUgYnJhbmNoIHlvdSBhcmUgd29ya2luZyBvbiByaWdodCBub3csIGFuZCB5b3UgYWx3YXlzCitzdGFydCBvdXQgZXhwZWN0aW5nIHRvIHdvcmsgb24gdGhlIGBtYXN0ZXJgIGJyYW5jaC4KKworSG93ZXZlciwgdGhpcyBpcyBvbmx5IGEgY29udmVudGlvbiwgYW5kIHlvdSBjYW4gbmFtZSB5b3VyIGJyYW5jaGVzCithbnl0aGluZyB5b3Ugd2FudCwgYW5kIGRvbid0IGhhdmUgdG8gZXZlciBldmVuICdoYXZlJyBhIGBtYXN0ZXJgCiticmFuY2guIEEgbnVtYmVyIG9mIHRoZSBnaXQgdG9vbHMgd2lsbCBhc3N1bWUgdGhhdCBgLmdpdC9IRUFEYCBpcwordmFsaWQsIHRob3VnaC4KKworW05PVEVdCitBbiAnb2JqZWN0JyBpcyBpZGVudGlmaWVkIGJ5IGl0cyAxNjAtYml0IFNIQTEgaGFzaCwgYWthICdvYmplY3QgbmFtZScsCithbmQgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IGlzIGFsd2F5cyB0aGUgNDAtYnl0ZSBoZXgKK3JlcHJlc2VudGF0aW9uIG9mIHRoYXQgU0hBMSBuYW1lLiBUaGUgZmlsZXMgaW4gdGhlIGByZWZzYAorc3ViZGlyZWN0b3J5IGFyZSBleHBlY3RlZCB0byBjb250YWluIHRoZXNlIGhleCByZWZlcmVuY2VzCisodXN1YWxseSB3aXRoIGEgZmluYWwgYFxuYCBhdCB0aGUgZW5kKSwgYW5kIHlvdSBzaG91bGQgdGh1cworZXhwZWN0IHRvIHNlZSBhIG51bWJlciBvZiA0MS1ieXRlIGZpbGVzIGNvbnRhaW5pbmcgdGhlc2UKK3JlZmVyZW5jZXMgaW4gdGhlc2UgYHJlZnNgIHN1YmRpcmVjdG9yaWVzIHdoZW4geW91IGFjdHVhbGx5IHN0YXJ0Citwb3B1bGF0aW5nIHlvdXIgdHJlZS4KKworW05PVEVdCitBbiBhZHZhbmNlZCB1c2VyIG1heSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGxpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0KK2FmdGVyIGZpbmlzaGluZyB0aGlzIHR1dG9yaWFsLgorCitZb3UgaGF2ZSBub3cgY3JlYXRlZCB5b3VyIGZpcnN0IGdpdCByZXBvc2l0b3J5LiBPZiBjb3Vyc2UsIHNpbmNlIGl0J3MKK2VtcHR5LCB0aGF0J3Mgbm90IHZlcnkgdXNlZnVsLCBzbyBsZXQncyBzdGFydCBwb3B1bGF0aW5nIGl0IHdpdGggZGF0YS4KKworCitQb3B1bGF0aW5nIGEgZ2l0IHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSdsbCBrZWVwIHRoaXMgc2ltcGxlIGFuZCBzdHVwaWQsIHNvIHdlJ2xsIHN0YXJ0IG9mZiB3aXRoIHBvcHVsYXRpbmcgYQorZmV3IHRyaXZpYWwgZmlsZXMganVzdCB0byBnZXQgYSBmZWVsIGZvciBpdC4KKworU3RhcnQgb2ZmIHdpdGgganVzdCBjcmVhdGluZyBhbnkgcmFuZG9tIGZpbGVzIHRoYXQgeW91IHdhbnQgdG8gbWFpbnRhaW4KK2luIHlvdXIgZ2l0IHJlcG9zaXRvcnkuIFdlJ2xsIHN0YXJ0IG9mZiB3aXRoIGEgZmV3IGJhZCBleGFtcGxlcywganVzdCB0bworZ2V0IGEgZmVlbCBmb3IgaG93IHRoaXMgd29ya3M6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBlY2hvICJIZWxsbyBXb3JsZCIgPmhlbGxvCiskIGVjaG8gIlNpbGx5IGV4YW1wbGUiID5leGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworeW91IGhhdmUgbm93IGNyZWF0ZWQgdHdvIGZpbGVzIGluIHlvdXIgd29ya2luZyB0cmVlIChha2EgJ3dvcmtpbmcgZGlyZWN0b3J5JyksCitidXQgdG8gYWN0dWFsbHkgY2hlY2sgaW4geW91ciBoYXJkIHdvcmssIHlvdSB3aWxsIGhhdmUgdG8gZ28gdGhyb3VnaCB0d28gc3RlcHM6CisKKyAtIGZpbGwgaW4gdGhlICdpbmRleCcgZmlsZSAoYWthICdjYWNoZScpIHdpdGggdGhlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIKKyAgIHdvcmtpbmcgdHJlZSBzdGF0ZS4KKworIC0gY29tbWl0IHRoYXQgaW5kZXggZmlsZSBhcyBhbiBvYmplY3QuCisKK1RoZSBmaXJzdCBzdGVwIGlzIHRyaXZpYWw6IHdoZW4geW91IHdhbnQgdG8gdGVsbCBnaXQgYWJvdXQgYW55IGNoYW5nZXMKK3RvIHlvdXIgd29ya2luZyB0cmVlLCB5b3UgdXNlIHRoZSAnZ2l0IHVwZGF0ZS1pbmRleCcgcHJvZ3JhbS4gVGhhdAorcHJvZ3JhbSBub3JtYWxseSBqdXN0IHRha2VzIGEgbGlzdCBvZiBmaWxlbmFtZXMgeW91IHdhbnQgdG8gdXBkYXRlLCBidXQKK3RvIGF2b2lkIHRyaXZpYWwgbWlzdGFrZXMsIGl0IHJlZnVzZXMgdG8gYWRkIG5ldyBlbnRyaWVzIHRvIHRoZSBpbmRleAorKG9yIHJlbW92ZSBleGlzdGluZyBvbmVzKSB1bmxlc3MgeW91IGV4cGxpY2l0bHkgdGVsbCBpdCB0aGF0IHlvdSdyZQorYWRkaW5nIGEgbmV3IGVudHJ5IHdpdGggdGhlIGAtLWFkZGAgZmxhZyAob3IgcmVtb3ZpbmcgYW4gZW50cnkgd2l0aCB0aGUKK2AtLXJlbW92ZWApIGZsYWcuCisKK1NvIHRvIHBvcHVsYXRlIHRoZSBpbmRleCB3aXRoIHRoZSB0d28gZmlsZXMgeW91IGp1c3QgY3JlYXRlZCwgeW91IGNhbiBkbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBoZWxsbyBleGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHlvdSBoYXZlIG5vdyB0b2xkIGdpdCB0byB0cmFjayB0aG9zZSB0d28gZmlsZXMuCisKK0luIGZhY3QsIGFzIHlvdSBkaWQgdGhhdCwgaWYgeW91IG5vdyBsb29rIGludG8geW91ciBvYmplY3QgZGlyZWN0b3J5LAoreW91J2xsIG5vdGljZSB0aGF0IGdpdCB3aWxsIGhhdmUgYWRkZWQgdHdvIG5ldyBvYmplY3RzIHRvIHRoZSBvYmplY3QKK2RhdGFiYXNlLiBJZiB5b3UgZGlkIGV4YWN0bHkgdGhlIHN0ZXBzIGFib3ZlLCB5b3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIGRvCisKKworLS0tLS0tLS0tLS0tLS0tLQorJCBscyAuZ2l0L29iamVjdHMvPz8vKgorLS0tLS0tLS0tLS0tLS0tLQorCithbmQgc2VlIHR3byBmaWxlczoKKworLS0tLS0tLS0tLS0tLS0tLQorLmdpdC9vYmplY3RzLzU1LzdkYjAzZGU5OTdjODZhNGEwMjhlMWViZDNhMWNlYjIyNWJlMjM4CisuZ2l0L29iamVjdHMvZjIvNGM3NGEyZTUwMGY1ZWUxMzMyYzg2Yjk0MTk5ZjUyYjFkMWQ5NjIKKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggY29ycmVzcG9uZCB3aXRoIHRoZSBvYmplY3RzIHdpdGggbmFtZXMgb2YgYDU1N2RiLi4uYCBhbmQKK2BmMjRjNy4uLmAgcmVzcGVjdGl2ZWx5LgorCitJZiB5b3Ugd2FudCB0bywgeW91IGNhbiB1c2UgJ2dpdCBjYXQtZmlsZScgdG8gbG9vayBhdCB0aG9zZSBvYmplY3RzLCBidXQKK3lvdSdsbCBoYXZlIHRvIHVzZSB0aGUgb2JqZWN0IG5hbWUsIG5vdCB0aGUgZmlsZW5hbWUgb2YgdGhlIG9iamVjdDoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgLXQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOAorLS0tLS0tLS0tLS0tLS0tLQorCit3aGVyZSB0aGUgYC10YCB0ZWxscyAnZ2l0IGNhdC1maWxlJyB0byB0ZWxsIHlvdSB3aGF0IHRoZSAidHlwZSIgb2YgdGhlCitvYmplY3QgaXMuIGdpdCB3aWxsIHRlbGwgeW91IHRoYXQgeW91IGhhdmUgYSAiYmxvYiIgb2JqZWN0IChpLmUuLCBqdXN0IGEKK3JlZ3VsYXIgZmlsZSksIGFuZCB5b3UgY2FuIHNlZSB0aGUgY29udGVudHMgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBibG9iIDU1N2RiMDMKKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBwcmludCBvdXQgIkhlbGxvIFdvcmxkIi4gVGhlIG9iamVjdCBgNTU3ZGIwM2AgaXMgbm90aGluZworbW9yZSB0aGFuIHRoZSBjb250ZW50cyBvZiB5b3VyIGZpbGUgYGhlbGxvYC4KKworW05PVEVdCitEb24ndCBjb25mdXNlIHRoYXQgb2JqZWN0IHdpdGggdGhlIGZpbGUgYGhlbGxvYCBpdHNlbGYuIFRoZQorb2JqZWN0IGlzIGxpdGVyYWxseSBqdXN0IHRob3NlIHNwZWNpZmljICpjb250ZW50cyogb2YgdGhlIGZpbGUsIGFuZAoraG93ZXZlciBtdWNoIHlvdSBsYXRlciBjaGFuZ2UgdGhlIGNvbnRlbnRzIGluIGZpbGUgYGhlbGxvYCwgdGhlIG9iamVjdAord2UganVzdCBsb29rZWQgYXQgd2lsbCBuZXZlciBjaGFuZ2UuIE9iamVjdHMgYXJlIGltbXV0YWJsZS4KKworW05PVEVdCitUaGUgc2Vjb25kIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoYXQgeW91IGNhbgorYWJicmV2aWF0ZSB0aGUgb2JqZWN0IG5hbWUgdG8gb25seSB0aGUgZmlyc3Qgc2V2ZXJhbAoraGV4YWRlY2ltYWwgZGlnaXRzIGluIG1vc3QgcGxhY2VzLgorCitBbnl3YXksIGFzIHdlIG1lbnRpb25lZCBwcmV2aW91c2x5LCB5b3Ugbm9ybWFsbHkgbmV2ZXIgYWN0dWFsbHkgdGFrZSBhCitsb29rIGF0IHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMsIGFuZCB0eXBpbmcgbG9uZyA0MC1jaGFyYWN0ZXIgaGV4CituYW1lcyBpcyBub3Qgc29tZXRoaW5nIHlvdSdkIG5vcm1hbGx5IHdhbnQgdG8gZG8uIFRoZSBhYm92ZSBkaWdyZXNzaW9uCit3YXMganVzdCB0byBzaG93IHRoYXQgJ2dpdCB1cGRhdGUtaW5kZXgnIGRpZCBzb21ldGhpbmcgbWFnaWNhbCwgYW5kCithY3R1YWxseSBzYXZlZCBhd2F5IHRoZSBjb250ZW50cyBvZiB5b3VyIGZpbGVzIGludG8gdGhlIGdpdCBvYmplY3QKK2RhdGFiYXNlLgorCitVcGRhdGluZyB0aGUgaW5kZXggZGlkIHNvbWV0aGluZyBlbHNlIHRvbzogaXQgY3JlYXRlZCBhIGAuZ2l0L2luZGV4YAorZmlsZS4gVGhpcyBpcyB0aGUgaW5kZXggdGhhdCBkZXNjcmliZXMgeW91ciBjdXJyZW50IHdvcmtpbmcgdHJlZSwgYW5kCitzb21ldGhpbmcgeW91IHNob3VsZCBiZSB2ZXJ5IGF3YXJlIG9mLiBBZ2FpbiwgeW91IG5vcm1hbGx5IG5ldmVyIHdvcnJ5CithYm91dCB0aGUgaW5kZXggZmlsZSBpdHNlbGYsIGJ1dCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mIHRoZSBmYWN0IHRoYXQKK3lvdSBoYXZlIG5vdCBhY3R1YWxseSByZWFsbHkgImNoZWNrZWQgaW4iIHlvdXIgZmlsZXMgaW50byBnaXQgc28gZmFyLAoreW91J3ZlIG9ubHkgKnRvbGQqIGdpdCBhYm91dCB0aGVtLgorCitIb3dldmVyLCBzaW5jZSBnaXQga25vd3MgYWJvdXQgdGhlbSwgeW91IGNhbiBub3cgc3RhcnQgdXNpbmcgc29tZSBvZiB0aGUKK21vc3QgYmFzaWMgZ2l0IGNvbW1hbmRzIHRvIG1hbmlwdWxhdGUgdGhlIGZpbGVzIG9yIGxvb2sgYXQgdGhlaXIgc3RhdHVzLgorCitJbiBwYXJ0aWN1bGFyLCBsZXQncyBub3QgZXZlbiBjaGVjayBpbiB0aGUgdHdvIGZpbGVzIGludG8gZ2l0IHlldCwgd2UnbGwKK3N0YXJ0IG9mZiBieSBhZGRpbmcgYW5vdGhlciBsaW5lIHRvIGBoZWxsb2AgZmlyc3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBlY2hvICJJdCdzIGEgbmV3IGRheSBmb3IgZ2l0IiA+PmhlbGxvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHlvdSBjYW4gbm93LCBzaW5jZSB5b3UgdG9sZCBnaXQgYWJvdXQgdGhlIHByZXZpb3VzIHN0YXRlIG9mIGBoZWxsb2AsIGFzaworZ2l0IHdoYXQgaGFzIGNoYW5nZWQgaW4gdGhlIHRyZWUgY29tcGFyZWQgdG8geW91ciBvbGQgaW5kZXgsIHVzaW5nIHRoZQorJ2dpdCBkaWZmLWZpbGVzJyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYtZmlsZXMKKy0tLS0tLS0tLS0tLQorCitPb3BzLiBUaGF0IHdhc24ndCB2ZXJ5IHJlYWRhYmxlLiBJdCBqdXN0IHNwaXQgb3V0IGl0cyBvd24gaW50ZXJuYWwKK3ZlcnNpb24gb2YgYSAnZGlmZicsIGJ1dCB0aGF0IGludGVybmFsIHZlcnNpb24gcmVhbGx5IGp1c3QgdGVsbHMgeW91Cit0aGF0IGl0IGhhcyBub3RpY2VkIHRoYXQgImhlbGxvIiBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIHRoYXQgdGhlIG9sZCBvYmplY3QKK2NvbnRlbnRzIGl0IGhhZCBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBzb21ldGhpbmcgZWxzZS4KKworVG8gbWFrZSBpdCByZWFkYWJsZSwgd2UgY2FuIHRlbGwgJ2dpdCBkaWZmLWZpbGVzJyB0byBvdXRwdXQgdGhlCitkaWZmZXJlbmNlcyBhcyBhIHBhdGNoLCB1c2luZyB0aGUgYC1wYCBmbGFnOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYtZmlsZXMgLXAKK2RpZmYgLS1naXQgYS9oZWxsbyBiL2hlbGxvCitpbmRleCA1NTdkYjAzLi4yNjM0MTRmIDEwMDY0NAorLS0tIGEvaGVsbG8KKysrKyBiL2hlbGxvCitAQCAtMSArMSwyIEBACisgSGVsbG8gV29ybGQKKytJdCdzIGEgbmV3IGRheSBmb3IgZ2l0CistLS0tCisKK2kuZS4gdGhlIGRpZmYgb2YgdGhlIGNoYW5nZSB3ZSBjYXVzZWQgYnkgYWRkaW5nIGFub3RoZXIgbGluZSB0byBgaGVsbG9gLgorCitJbiBvdGhlciB3b3JkcywgJ2dpdCBkaWZmLWZpbGVzJyBhbHdheXMgc2hvd3MgdXMgdGhlIGRpZmZlcmVuY2UgYmV0d2Vlbgord2hhdCBpcyByZWNvcmRlZCBpbiB0aGUgaW5kZXgsIGFuZCB3aGF0IGlzIGN1cnJlbnRseSBpbiB0aGUgd29ya2luZwordHJlZS4gVGhhdCdzIHZlcnkgdXNlZnVsLgorCitBIGNvbW1vbiBzaG9ydGhhbmQgZm9yIGBnaXQgZGlmZi1maWxlcyAtcGAgaXMgdG8ganVzdCB3cml0ZSBgZ2l0CitkaWZmYCwgd2hpY2ggd2lsbCBkbyB0aGUgc2FtZSB0aGluZy4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmCitkaWZmIC0tZ2l0IGEvaGVsbG8gYi9oZWxsbworaW5kZXggNTU3ZGIwMy4uMjYzNDE0ZiAxMDA2NDQKKy0tLSBhL2hlbGxvCisrKysgYi9oZWxsbworQEAgLTEgKzEsMiBAQAorIEhlbGxvIFdvcmxkCisrSXQncyBhIG5ldyBkYXkgZm9yIGdpdAorLS0tLS0tLS0tLS0tCisKKworQ29tbWl0dGluZyBnaXQgc3RhdGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdywgd2Ugd2FudCB0byBnbyB0byB0aGUgbmV4dCBzdGFnZSBpbiBnaXQsIHdoaWNoIGlzIHRvIHRha2UgdGhlIGZpbGVzCit0aGF0IGdpdCBrbm93cyBhYm91dCBpbiB0aGUgaW5kZXgsIGFuZCBjb21taXQgdGhlbSBhcyBhIHJlYWwgdHJlZS4gV2UgZG8KK3RoYXQgaW4gdHdvIHBoYXNlczogY3JlYXRpbmcgYSAndHJlZScgb2JqZWN0LCBhbmQgY29tbWl0dGluZyB0aGF0ICd0cmVlJworb2JqZWN0IGFzIGEgJ2NvbW1pdCcgb2JqZWN0IHRvZ2V0aGVyIHdpdGggYW4gZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGUKK3RyZWUgd2FzIGFsbCBhYm91dCwgYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBvZiBob3cgd2UgY2FtZSB0byB0aGF0IHN0YXRlLgorCitDcmVhdGluZyBhIHRyZWUgb2JqZWN0IGlzIHRyaXZpYWwsIGFuZCBpcyBkb25lIHdpdGggJ2dpdCB3cml0ZS10cmVlJy4KK1RoZXJlIGFyZSBubyBvcHRpb25zIG9yIG90aGVyIGlucHV0OiBgZ2l0IHdyaXRlLXRyZWVgIHdpbGwgdGFrZSB0aGUKK2N1cnJlbnQgaW5kZXggc3RhdGUsIGFuZCB3cml0ZSBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhhdCB3aG9sZQoraW5kZXguIEluIG90aGVyIHdvcmRzLCB3ZSdyZSBub3cgdHlpbmcgdG9nZXRoZXIgYWxsIHRoZSBkaWZmZXJlbnQKK2ZpbGVuYW1lcyB3aXRoIHRoZWlyIGNvbnRlbnRzIChhbmQgdGhlaXIgcGVybWlzc2lvbnMpLCBhbmQgd2UncmUKK2NyZWF0aW5nIHRoZSBlcXVpdmFsZW50IG9mIGEgZ2l0ICJkaXJlY3RvcnkiIG9iamVjdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB3cml0ZS10cmVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoaXMgd2lsbCBqdXN0IG91dHB1dCB0aGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIHRyZWUsIGluIHRoaXMgY2FzZQorKGlmIHlvdSBoYXZlIGRvbmUgZXhhY3RseSBhcyBJJ3ZlIGRlc2NyaWJlZCkgaXQgc2hvdWxkIGJlCisKKy0tLS0tLS0tLS0tLS0tLS0KKzg5ODhkYTE1ZDA3N2Q0ODI5ZmM1MWQ4NTQ0YzA5N2RlZjY2NDRkYmIKKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggaXMgYW5vdGhlciBpbmNvbXByZWhlbnNpYmxlIG9iamVjdCBuYW1lLiBBZ2FpbiwgaWYgeW91IHdhbnQgdG8sCit5b3UgY2FuIHVzZSBgZ2l0IGNhdC1maWxlIC10IDg5ODhkLi4uYCB0byBzZWUgdGhhdCB0aGlzIHRpbWUgdGhlIG9iamVjdAoraXMgbm90IGEgImJsb2IiIG9iamVjdCwgYnV0IGEgInRyZWUiIG9iamVjdCAoeW91IGNhbiBhbHNvIHVzZQorYGdpdCBjYXQtZmlsZWAgdG8gYWN0dWFsbHkgb3V0cHV0IHRoZSByYXcgb2JqZWN0IGNvbnRlbnRzLCBidXQgeW91J2xsIHNlZQorbWFpbmx5IGEgYmluYXJ5IG1lc3MsIHNvIHRoYXQncyBsZXNzIGludGVyZXN0aW5nKS4KKworSG93ZXZlciAtLSBub3JtYWxseSB5b3UnZCBuZXZlciB1c2UgJ2dpdCB3cml0ZS10cmVlJyBvbiBpdHMgb3duLCBiZWNhdXNlCitub3JtYWxseSB5b3UgYWx3YXlzIGNvbW1pdCBhIHRyZWUgaW50byBhIGNvbW1pdCBvYmplY3QgdXNpbmcgdGhlCisnZ2l0IGNvbW1pdC10cmVlJyBjb21tYW5kLiBJbiBmYWN0LCBpdCdzIGVhc2llciB0byBub3QgYWN0dWFsbHkgdXNlCisnZ2l0IHdyaXRlLXRyZWUnIG9uIGl0cyBvd24gYXQgYWxsLCBidXQgdG8ganVzdCBwYXNzIGl0cyByZXN1bHQgaW4gYXMgYW4KK2FyZ3VtZW50IHRvICdnaXQgY29tbWl0LXRyZWUnLgorCisnZ2l0IGNvbW1pdC10cmVlJyBub3JtYWxseSB0YWtlcyBzZXZlcmFsIGFyZ3VtZW50cyAtLSBpdCB3YW50cyB0byBrbm93Cit3aGF0IHRoZSAncGFyZW50JyBvZiBhIGNvbW1pdCB3YXMsIGJ1dCBzaW5jZSB0aGlzIGlzIHRoZSBmaXJzdCBjb21taXQKK2V2ZXIgaW4gdGhpcyBuZXcgcmVwb3NpdG9yeSwgYW5kIGl0IGhhcyBubyBwYXJlbnRzLCB3ZSBvbmx5IG5lZWQgdG8gcGFzcyBpbgordGhlIG9iamVjdCBuYW1lIG9mIHRoZSB0cmVlLiBIb3dldmVyLCAnZ2l0IGNvbW1pdC10cmVlJyBhbHNvIHdhbnRzIHRvIGdldCBhCitjb21taXQgbWVzc2FnZSBvbiBpdHMgc3RhbmRhcmQgaW5wdXQsIGFuZCBpdCB3aWxsIHdyaXRlIG91dCB0aGUgcmVzdWx0aW5nCitvYmplY3QgbmFtZSBmb3IgdGhlIGNvbW1pdCB0byBpdHMgc3RhbmRhcmQgb3V0cHV0LgorCitBbmQgdGhpcyBpcyB3aGVyZSB3ZSBjcmVhdGUgdGhlIGAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyYCBmaWxlCit3aGljaCBpcyBwb2ludGVkIGF0IGJ5IGBIRUFEYC4gVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4KK3RoZSByZWZlcmVuY2UgdG8gdGhlIHRvcC1vZi10cmVlIG9mIHRoZSBtYXN0ZXIgYnJhbmNoLCBhbmQgc2luY2UKK3RoYXQncyBleGFjdGx5IHdoYXQgJ2dpdCBjb21taXQtdHJlZScgc3BpdHMgb3V0LCB3ZSBjYW4gZG8gdGhpcworYWxsIHdpdGggYSBzZXF1ZW5jZSBvZiBzaW1wbGUgc2hlbGwgY29tbWFuZHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpCiskIGNvbW1pdD0kKGVjaG8gJ0luaXRpYWwgY29tbWl0JyB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkKKyQgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBjYXNlIHRoaXMgY3JlYXRlcyBhIHRvdGFsbHkgbmV3IGNvbW1pdCB0aGF0IGlzIG5vdCByZWxhdGVkIHRvCithbnl0aGluZyBlbHNlLiBOb3JtYWxseSB5b3UgZG8gdGhpcyBvbmx5ICpvbmNlKiBmb3IgYSBwcm9qZWN0IGV2ZXIsIGFuZAorYWxsIGxhdGVyIGNvbW1pdHMgd2lsbCBiZSBwYXJlbnRlZCBvbiB0b3Agb2YgYW4gZWFybGllciBjb21taXQuCisKK0FnYWluLCBub3JtYWxseSB5b3UnZCBuZXZlciBhY3R1YWxseSBkbyB0aGlzIGJ5IGhhbmQuIFRoZXJlIGlzIGEKK2hlbHBmdWwgc2NyaXB0IGNhbGxlZCBgZ2l0IGNvbW1pdGAgdGhhdCB3aWxsIGRvIGFsbCBvZiB0aGlzIGZvciB5b3UuIFNvCit5b3UgY291bGQgaGF2ZSBqdXN0IHdyaXR0ZW4gYGdpdCBjb21taXRgCitpbnN0ZWFkLCBhbmQgaXQgd291bGQgaGF2ZSBkb25lIHRoZSBhYm92ZSBtYWdpYyBzY3JpcHRpbmcgZm9yIHlvdS4KKworCitNYWtpbmcgYSBjaGFuZ2UKKy0tLS0tLS0tLS0tLS0tLQorCitSZW1lbWJlciBob3cgd2UgZGlkIHRoZSAnZ2l0IHVwZGF0ZS1pbmRleCcgb24gZmlsZSBgaGVsbG9gIGFuZCB0aGVuIHdlCitjaGFuZ2VkIGBoZWxsb2AgYWZ0ZXJ3YXJkLCBhbmQgY291bGQgY29tcGFyZSB0aGUgbmV3IHN0YXRlIG9mIGBoZWxsb2Agd2l0aCB0aGUKK3N0YXRlIHdlIHNhdmVkIGluIHRoZSBpbmRleCBmaWxlPworCitGdXJ0aGVyLCByZW1lbWJlciBob3cgSSBzYWlkIHRoYXQgJ2dpdCB3cml0ZS10cmVlJyB3cml0ZXMgdGhlIGNvbnRlbnRzCitvZiB0aGUgKmluZGV4KiBmaWxlIHRvIHRoZSB0cmVlLCBhbmQgdGh1cyB3aGF0IHdlIGp1c3QgY29tbWl0dGVkIHdhcyBpbgorZmFjdCB0aGUgKm9yaWdpbmFsKiBjb250ZW50cyBvZiB0aGUgZmlsZSBgaGVsbG9gLCBub3QgdGhlIG5ldyBvbmVzLiBXZSBkaWQKK3RoYXQgb24gcHVycG9zZSwgdG8gc2hvdyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbmRleCBzdGF0ZSwgYW5kIHRoZQorc3RhdGUgaW4gdGhlIHdvcmtpbmcgdHJlZSwgYW5kIGhvdyB0aGV5IGRvbid0IGhhdmUgdG8gbWF0Y2gsIGV2ZW4KK3doZW4gd2UgY29tbWl0IHRoaW5ncy4KKworQXMgYmVmb3JlLCBpZiB3ZSBkbyBgZ2l0IGRpZmYtZmlsZXMgLXBgIGluIG91ciBnaXQtdHV0b3JpYWwgcHJvamVjdCwKK3dlJ2xsIHN0aWxsIHNlZSB0aGUgc2FtZSBkaWZmZXJlbmNlIHdlIHNhdyBsYXN0IHRpbWU6IHRoZSBpbmRleCBmaWxlCitoYXNuJ3QgY2hhbmdlZCBieSB0aGUgYWN0IG9mIGNvbW1pdHRpbmcgYW55dGhpbmcuIEhvd2V2ZXIsIG5vdyB0aGF0IHdlCitoYXZlIGNvbW1pdHRlZCBzb21ldGhpbmcsIHdlIGNhbiBhbHNvIGxlYXJuIHRvIHVzZSBhIG5ldyBjb21tYW5kOgorJ2dpdCBkaWZmLWluZGV4Jy4KKworVW5saWtlICdnaXQgZGlmZi1maWxlcycsIHdoaWNoIHNob3dlZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbmRleAorZmlsZSBhbmQgdGhlIHdvcmtpbmcgdHJlZSwgJ2dpdCBkaWZmLWluZGV4JyBzaG93cyB0aGUgZGlmZmVyZW5jZXMKK2JldHdlZW4gYSBjb21taXR0ZWQgKnRyZWUqIGFuZCBlaXRoZXIgdGhlIGluZGV4IGZpbGUgb3IgdGhlIHdvcmtpbmcKK3RyZWUuIEluIG90aGVyIHdvcmRzLCAnZ2l0IGRpZmYtaW5kZXgnIHdhbnRzIGEgdHJlZSB0byBiZSBkaWZmZWQKK2FnYWluc3QsIGFuZCBiZWZvcmUgd2UgZGlkIHRoZSBjb21taXQsIHdlIGNvdWxkbid0IGRvIHRoYXQsIGJlY2F1c2Ugd2UKK2RpZG4ndCBoYXZlIGFueXRoaW5nIHRvIGRpZmYgYWdhaW5zdC4KKworQnV0IG5vdyB3ZSBjYW4gZG8KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZi1pbmRleCAtcCBIRUFECistLS0tLS0tLS0tLS0tLS0tCisKKyh3aGVyZSBgLXBgIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGl0IGRpZCBpbiAnZ2l0IGRpZmYtZmlsZXMnKSwgYW5kIGl0Cit3aWxsIHNob3cgdXMgdGhlIHNhbWUgZGlmZmVyZW5jZSwgYnV0IGZvciBhIHRvdGFsbHkgZGlmZmVyZW50IHJlYXNvbi4KK05vdyB3ZSdyZSBjb21wYXJpbmcgdGhlIHdvcmtpbmcgdHJlZSBub3QgYWdhaW5zdCB0aGUgaW5kZXggZmlsZSwKK2J1dCBhZ2FpbnN0IHRoZSB0cmVlIHdlIGp1c3Qgd3JvdGUuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRob3NlIHR3bworYXJlIG9idmlvdXNseSB0aGUgc2FtZSwgc28gd2UgZ2V0IHRoZSBzYW1lIHJlc3VsdC4KKworQWdhaW4sIGJlY2F1c2UgdGhpcyBpcyBhIGNvbW1vbiBvcGVyYXRpb24sIHlvdSBjYW4gYWxzbyBqdXN0IHNob3J0aGFuZAoraXQgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggZW5kcyB1cCBkb2luZyB0aGUgYWJvdmUgZm9yIHlvdS4KKworSW4gb3RoZXIgd29yZHMsICdnaXQgZGlmZi1pbmRleCcgbm9ybWFsbHkgY29tcGFyZXMgYSB0cmVlIGFnYWluc3QgdGhlCit3b3JraW5nIHRyZWUsIGJ1dCB3aGVuIGdpdmVuIHRoZSBgLS1jYWNoZWRgIGZsYWcsIGl0IGlzIHRvbGQgdG8KK2luc3RlYWQgY29tcGFyZSBhZ2FpbnN0IGp1c3QgdGhlIGluZGV4IGNhY2hlIGNvbnRlbnRzLCBhbmQgaWdub3JlIHRoZQorY3VycmVudCB3b3JraW5nIHRyZWUgc3RhdGUgZW50aXJlbHkuIFNpbmNlIHdlIGp1c3Qgd3JvdGUgdGhlIGluZGV4CitmaWxlIHRvIEhFQUQsIGRvaW5nIGBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtcCBIRUFEYCBzaG91bGQgdGh1cyByZXR1cm4KK2FuIGVtcHR5IHNldCBvZiBkaWZmZXJlbmNlcywgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgaXQgZG9lcy4KKworW05PVEVdCis9PT09PT09PT09PT09PT09CisnZ2l0IGRpZmYtaW5kZXgnIHJlYWxseSBhbHdheXMgdXNlcyB0aGUgaW5kZXggZm9yIGl0cworY29tcGFyaXNvbnMsIGFuZCBzYXlpbmcgdGhhdCBpdCBjb21wYXJlcyBhIHRyZWUgYWdhaW5zdCB0aGUgd29ya2luZwordHJlZSBpcyB0aHVzIG5vdCBzdHJpY3RseSBhY2N1cmF0ZS4gSW4gcGFydGljdWxhciwgdGhlIGxpc3Qgb2YKK2ZpbGVzIHRvIGNvbXBhcmUgKHRoZSAibWV0YS1kYXRhIikgKmFsd2F5cyogY29tZXMgZnJvbSB0aGUgaW5kZXggZmlsZSwKK3JlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgYC0tY2FjaGVkYCBmbGFnIGlzIHVzZWQgb3Igbm90LiBUaGUgYC0tY2FjaGVkYAorZmxhZyByZWFsbHkgb25seSBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbGUgKmNvbnRlbnRzKiB0byBiZSBjb21wYXJlZAorY29tZSBmcm9tIHRoZSB3b3JraW5nIHRyZWUgb3Igbm90LgorCitUaGlzIGlzIG5vdCBoYXJkIHRvIHVuZGVyc3RhbmQsIGFzIHNvb24gYXMgeW91IHJlYWxpemUgdGhhdCBnaXQgc2ltcGx5CituZXZlciBrbm93cyAob3IgY2FyZXMpIGFib3V0IGZpbGVzIHRoYXQgaXQgaXMgbm90IHRvbGQgYWJvdXQKK2V4cGxpY2l0bHkuIGdpdCB3aWxsIG5ldmVyIGdvICpsb29raW5nKiBmb3IgZmlsZXMgdG8gY29tcGFyZSwgaXQKK2V4cGVjdHMgeW91IHRvIHRlbGwgaXQgd2hhdCB0aGUgZmlsZXMgYXJlLCBhbmQgdGhhdCdzIHdoYXQgdGhlIGluZGV4CitpcyB0aGVyZSBmb3IuCis9PT09PT09PT09PT09PT09CisKK0hvd2V2ZXIsIG91ciBuZXh0IHN0ZXAgaXMgdG8gY29tbWl0IHRoZSAqY2hhbmdlKiB3ZSBkaWQsIGFuZCBhZ2FpbiwgdG8KK3VuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLCBrZWVwIGluIG1pbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAid29ya2luZwordHJlZSBjb250ZW50cyIsICJpbmRleCBmaWxlIiBhbmQgImNvbW1pdHRlZCB0cmVlIi4gV2UgaGF2ZSBjaGFuZ2VzCitpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgd2Ugd2FudCB0byBjb21taXQsIGFuZCB3ZSBhbHdheXMgaGF2ZSB0bword29yayB0aHJvdWdoIHRoZSBpbmRleCBmaWxlLCBzbyB0aGUgZmlyc3QgdGhpbmcgd2UgbmVlZCB0byBkbyBpcyB0bwordXBkYXRlIHRoZSBpbmRleCBjYWNoZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB1cGRhdGUtaW5kZXggaGVsbG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisobm90ZSBob3cgd2UgZGlkbid0IG5lZWQgdGhlIGAtLWFkZGAgZmxhZyB0aGlzIHRpbWUsIHNpbmNlIGdpdCBrbmV3CithYm91dCB0aGUgZmlsZSBhbHJlYWR5KS4KKworTm90ZSB3aGF0IGhhcHBlbnMgdG8gdGhlIGRpZmZlcmVudCAnZ2l0IGRpZmYte2FzdGVyaXNrfScgdmVyc2lvbnMgaGVyZS4KK0FmdGVyIHdlJ3ZlIHVwZGF0ZWQgYGhlbGxvYCBpbiB0aGUgaW5kZXgsIGBnaXQgZGlmZi1maWxlcyAtcGAgbm93IHNob3dzIG5vCitkaWZmZXJlbmNlcywgYnV0IGBnaXQgZGlmZi1pbmRleCAtcCBIRUFEYCBzdGlsbCAqZG9lcyogc2hvdyB0aGF0IHRoZQorY3VycmVudCBzdGF0ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc3RhdGUgd2UgY29tbWl0dGVkLiBJbiBmYWN0LCBub3cKKydnaXQgZGlmZi1pbmRleCcgc2hvd3MgdGhlIHNhbWUgZGlmZmVyZW5jZSB3aGV0aGVyIHdlIHVzZSB0aGUgYC0tY2FjaGVkYAorZmxhZyBvciBub3QsIHNpbmNlIG5vdyB0aGUgaW5kZXggaXMgY29oZXJlbnQgd2l0aCB0aGUgd29ya2luZyB0cmVlLgorCitOb3csIHNpbmNlIHdlJ3ZlIHVwZGF0ZWQgYGhlbGxvYCBpbiB0aGUgaW5kZXgsIHdlIGNhbiBjb21taXQgdGhlIG5ldwordmVyc2lvbi4gV2UgY291bGQgZG8gaXQgYnkgd3JpdGluZyB0aGUgdHJlZSBieSBoYW5kIGFnYWluLCBhbmQKK2NvbW1pdHRpbmcgdGhlIHRyZWUgKHRoaXMgdGltZSB3ZSdkIGhhdmUgdG8gdXNlIHRoZSBgLXAgSEVBRGAgZmxhZyB0bwordGVsbCBjb21taXQgdGhhdCB0aGUgSEVBRCB3YXMgdGhlICpwYXJlbnQqIG9mIHRoZSBuZXcgY29tbWl0LCBhbmQgdGhhdAordGhpcyB3YXNuJ3QgYW4gaW5pdGlhbCBjb21taXQgYW55IG1vcmUpLCBidXQgeW91J3ZlIGRvbmUgdGhhdCBvbmNlCithbHJlYWR5LCBzbyBsZXQncyBqdXN0IHVzZSB0aGUgaGVscGZ1bCBzY3JpcHQgdGhpcyB0aW1lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHN0YXJ0cyBhbiBlZGl0b3IgZm9yIHlvdSB0byB3cml0ZSB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHRlbGxzIHlvdQorYSBiaXQgYWJvdXQgd2hhdCB5b3UgaGF2ZSBkb25lLgorCitXcml0ZSB3aGF0ZXZlciBtZXNzYWdlIHlvdSB3YW50LCBhbmQgYWxsIHRoZSBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggJyMnCit3aWxsIGJlIHBydW5lZCBvdXQsIGFuZCB0aGUgcmVzdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIGZvcgordGhlIGNoYW5nZS4gSWYgeW91IGRlY2lkZSB5b3UgZG9uJ3Qgd2FudCB0byBjb21taXQgYW55dGhpbmcgYWZ0ZXIgYWxsIGF0Cit0aGlzIHBvaW50ICh5b3UgY2FuIGNvbnRpbnVlIHRvIGVkaXQgdGhpbmdzIGFuZCB1cGRhdGUgdGhlIGluZGV4KSwgeW91CitjYW4ganVzdCBsZWF2ZSBhbiBlbXB0eSBtZXNzYWdlLiBPdGhlcndpc2UgYGdpdCBjb21taXRgIHdpbGwgY29tbWl0Cit0aGUgY2hhbmdlIGZvciB5b3UuCisKK1lvdSd2ZSBub3cgbWFkZSB5b3VyIGZpcnN0IHJlYWwgZ2l0IGNvbW1pdC4gQW5kIGlmIHlvdSdyZSBpbnRlcmVzdGVkIGluCitsb29raW5nIGF0IHdoYXQgYGdpdCBjb21taXRgIHJlYWxseSBkb2VzLCBmZWVsIGZyZWUgdG8gaW52ZXN0aWdhdGU6CitpdCdzIGEgZmV3IHZlcnkgc2ltcGxlIHNoZWxsIHNjcmlwdHMgdG8gZ2VuZXJhdGUgdGhlIGhlbHBmdWwgKD8pIGNvbW1pdAorbWVzc2FnZSBoZWFkZXJzLCBhbmQgYSBmZXcgb25lLWxpbmVycyB0aGF0IGFjdHVhbGx5IGRvIHRoZQorY29tbWl0IGl0c2VsZiAoJ2dpdCBjb21taXQnKS4KKworCitJbnNwZWN0aW5nIENoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGlsZSBjcmVhdGluZyBjaGFuZ2VzIGlzIHVzZWZ1bCwgaXQncyBldmVuIG1vcmUgdXNlZnVsIGlmIHlvdSBjYW4gdGVsbAorbGF0ZXIgd2hhdCBjaGFuZ2VkLiBUaGUgbW9zdCB1c2VmdWwgY29tbWFuZCBmb3IgdGhpcyBpcyBhbm90aGVyIG9mIHRoZQorJ2RpZmYnIGZhbWlseSwgbmFtZWx5ICdnaXQgZGlmZi10cmVlJy4KKworJ2dpdCBkaWZmLXRyZWUnIGNhbiBiZSBnaXZlbiB0d28gYXJiaXRyYXJ5IHRyZWVzLCBhbmQgaXQgd2lsbCB0ZWxsIHlvdSB0aGUKK2RpZmZlcmVuY2VzIGJldHdlZW4gdGhlbS4gUGVyaGFwcyBldmVuIG1vcmUgY29tbW9ubHksIHRob3VnaCwgeW91IGNhbgorZ2l2ZSBpdCBqdXN0IGEgc2luZ2xlIGNvbW1pdCBvYmplY3QsIGFuZCBpdCB3aWxsIGZpZ3VyZSBvdXQgdGhlIHBhcmVudAorb2YgdGhhdCBjb21taXQgaXRzZWxmLCBhbmQgc2hvdyB0aGUgZGlmZmVyZW5jZSBkaXJlY3RseS4gVGh1cywgdG8gZ2V0Cit0aGUgc2FtZSBkaWZmIHRoYXQgd2UndmUgYWxyZWFkeSBzZWVuIHNldmVyYWwgdGltZXMsIHdlIGNhbiBub3cgZG8KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZi10cmVlIC1wIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0KKworKGFnYWluLCBgLXBgIG1lYW5zIHRvIHNob3cgdGhlIGRpZmZlcmVuY2UgYXMgYSBodW1hbi1yZWFkYWJsZSBwYXRjaCksCithbmQgaXQgd2lsbCBzaG93IHdoYXQgdGhlIGxhc3QgY29tbWl0IChpbiBgSEVBRGApIGFjdHVhbGx5IGNoYW5nZWQuCisKK1tOT1RFXQorPT09PT09PT09PT09CitIZXJlIGlzIGFuIEFTQ0lJIGFydCBieSBKb24gTG9lbGlnZXIgdGhhdCBpbGx1c3RyYXRlcyBob3cKK3ZhcmlvdXMgJ2RpZmYte2FzdGVyaXNrfScgY29tbWFuZHMgY29tcGFyZSB0aGluZ3MuCisKKyAgICAgICAgICAgICAgICAgICAgICBkaWZmLXRyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgViAgICBWCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgfCBPYmplY3QgREIgfAorICAgICAgICAgICAgICAgICAgICB8ICBCYWNraW5nICB8CisgICAgICAgICAgICAgICAgICAgIHwgICBTdG9yZSAgIHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgIF4gICAgXgorICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgZGlmZi1pbmRleCAtLWNhY2hlZAorICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgIGRpZmYtaW5kZXggIHwgICAgVgorICAgICAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgSW5kZXggICB8CisgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgImNhY2hlIiAgfAorICAgICAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgIGRpZmYtZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICBWICAgIFYKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICB8ICBXb3JraW5nICB8CisgICAgICAgICAgICAgICAgICAgIHwgRGlyZWN0b3J5IHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworPT09PT09PT09PT09CisKK01vcmUgaW50ZXJlc3RpbmdseSwgeW91IGNhbiBhbHNvIGdpdmUgJ2dpdCBkaWZmLXRyZWUnIHRoZSBgLS1wcmV0dHlgIGZsYWcsCit3aGljaCB0ZWxscyBpdCB0byBhbHNvIHNob3cgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBhdXRob3IgYW5kIGRhdGUgb2YgdGhlCitjb21taXQsIGFuZCB5b3UgY2FuIHRlbGwgaXQgdG8gc2hvdyBhIHdob2xlIHNlcmllcyBvZiBkaWZmcy4KK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdGVsbCBpdCB0byBiZSAic2lsZW50IiwgYW5kIG5vdCBzaG93IHRoZSBkaWZmcyBhdAorYWxsLCBidXQganVzdCBzaG93IHRoZSBhY3R1YWwgY29tbWl0IG1lc3NhZ2UuCisKK0luIGZhY3QsIHRvZ2V0aGVyIHdpdGggdGhlICdnaXQgcmV2LWxpc3QnIHByb2dyYW0gKHdoaWNoIGdlbmVyYXRlcyBhCitsaXN0IG9mIHJldmlzaW9ucyksICdnaXQgZGlmZi10cmVlJyBlbmRzIHVwIGJlaW5nIGEgdmVyaXRhYmxlIGZvdW50IG9mCitjaGFuZ2VzLiBBIHRyaXZpYWwgKGJ1dCB2ZXJ5IHVzZWZ1bCkgc2NyaXB0IGNhbGxlZCAnZ2l0IHdoYXRjaGFuZ2VkJyBpcworaW5jbHVkZWQgd2l0aCBnaXQgd2hpY2ggZG9lcyBleGFjdGx5IHRoaXMsIGFuZCBzaG93cyBhIGxvZyBvZiByZWNlbnQKK2FjdGl2aXRpZXMuCisKK1RvIHNlZSB0aGUgd2hvbGUgaGlzdG9yeSBvZiBvdXIgcGl0aWZ1bCBsaXR0bGUgZ2l0LXR1dG9yaWFsIHByb2plY3QsIHlvdQorY2FuIGRvCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZworLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBzaG93cyBqdXN0IHRoZSBsb2cgbWVzc2FnZXMsIG9yIGlmIHdlIHdhbnQgdG8gc2VlIHRoZSBsb2cgdG9nZXRoZXIKK3dpdGggdGhlIGFzc29jaWF0ZWQgcGF0Y2hlcyB1c2UgdGhlIG1vcmUgY29tcGxleCAoYW5kIG11Y2ggbW9yZQorcG93ZXJmdWwpCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHdoYXRjaGFuZ2VkIC1wCistLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB5b3Ugd2lsbCBzZWUgZXhhY3RseSB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZSByZXBvc2l0b3J5IG92ZXIgaXRzCitzaG9ydCBoaXN0b3J5LgorCitbTk9URV0KK1doZW4gdXNpbmcgdGhlIGFib3ZlIHR3byBjb21tYW5kcywgdGhlIGluaXRpYWwgY29tbWl0IHdpbGwgYmUgc2hvd24uCitJZiB0aGlzIGlzIGEgcHJvYmxlbSBiZWNhdXNlIGl0IGlzIGh1Z2UsIHlvdSBjYW4gaGlkZSBpdCBieSBzZXR0aW5nCit0aGUgbG9nLnNob3dyb290IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZmFsc2UuIEhhdmluZyB0aGlzLCB5b3UKK2NhbiBzdGlsbCBzaG93IGl0IGZvciBlYWNoIGNvbW1hbmQganVzdCBhZGRpbmcgdGhlIGAtLXJvb3RgIG9wdGlvbiwKK3doaWNoIGlzIGEgZmxhZyBmb3IgJ2dpdCBkaWZmLXRyZWUnIGFjY2VwdGVkIGJ5IGJvdGggY29tbWFuZHMuCisKK1dpdGggdGhhdCwgeW91IHNob3VsZCBub3cgYmUgaGF2aW5nIHNvbWUgaW5rbGluZyBvZiB3aGF0IGdpdCBkb2VzLCBhbmQKK2NhbiBleHBsb3JlIG9uIHlvdXIgb3duLgorCitbTk9URV0KK01vc3QgbGlrZWx5LCB5b3UgYXJlIG5vdCBkaXJlY3RseSB1c2luZyB0aGUgY29yZQorZ2l0IFBsdW1iaW5nIGNvbW1hbmRzLCBidXQgdXNpbmcgUG9yY2VsYWluIHN1Y2ggYXMgJ2dpdCBhZGQnLCBgZ2l0LXJtJworYW5kIGBnaXQtY29tbWl0Jy4KKworCitUYWdnaW5nIGEgdmVyc2lvbgorLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gZ2l0LCB0aGVyZSBhcmUgdHdvIGtpbmRzIG9mIHRhZ3MsIGEgImxpZ2h0IiBvbmUsIGFuZCBhbiAiYW5ub3RhdGVkIHRhZyIuCisKK0EgImxpZ2h0IiB0YWcgaXMgdGVjaG5pY2FsbHkgbm90aGluZyBtb3JlIHRoYW4gYSBicmFuY2gsIGV4Y2VwdCB3ZSBwdXQKK2l0IGluIHRoZSBgLmdpdC9yZWZzL3RhZ3MvYCBzdWJkaXJlY3RvcnkgaW5zdGVhZCBvZiBjYWxsaW5nIGl0IGEgYGhlYWRgLgorU28gdGhlIHNpbXBsZXN0IGZvcm0gb2YgdGFnIGludm9sdmVzIG5vdGhpbmcgbW9yZSB0aGFuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdGFnIG15LWZpcnN0LXRhZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIGp1c3Qgd3JpdGVzIHRoZSBjdXJyZW50IGBIRUFEYCBpbnRvIHRoZSBgLmdpdC9yZWZzL3RhZ3MvbXktZmlyc3QtdGFnYAorZmlsZSwgYWZ0ZXIgd2hpY2ggcG9pbnQgeW91IGNhbiB0aGVuIHVzZSB0aGlzIHN5bWJvbGljIG5hbWUgZm9yIHRoYXQKK3BhcnRpY3VsYXIgc3RhdGUuIFlvdSBjYW4sIGZvciBleGFtcGxlLCBkbworCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIG15LWZpcnN0LXRhZworLS0tLS0tLS0tLS0tLS0tLQorCit0byBkaWZmIHlvdXIgY3VycmVudCBzdGF0ZSBhZ2FpbnN0IHRoYXQgdGFnIHdoaWNoIGF0IHRoaXMgcG9pbnQgd2lsbAorb2J2aW91c2x5IGJlIGFuIGVtcHR5IGRpZmYsIGJ1dCBpZiB5b3UgY29udGludWUgdG8gZGV2ZWxvcCBhbmQgY29tbWl0CitzdHVmZiwgeW91IGNhbiB1c2UgeW91ciB0YWcgYXMgYW4gImFuY2hvci1wb2ludCIgdG8gc2VlIHdoYXQgaGFzIGNoYW5nZWQKK3NpbmNlIHlvdSB0YWdnZWQgaXQuCisKK0FuICJhbm5vdGF0ZWQgdGFnIiBpcyBhY3R1YWxseSBhIHJlYWwgZ2l0IG9iamVjdCwgYW5kIGNvbnRhaW5zIG5vdCBvbmx5IGEKK3BvaW50ZXIgdG8gdGhlIHN0YXRlIHlvdSB3YW50IHRvIHRhZywgYnV0IGFsc28gYSBzbWFsbCB0YWcgbmFtZSBhbmQKK21lc3NhZ2UsIGFsb25nIHdpdGggb3B0aW9uYWxseSBhIFBHUCBzaWduYXR1cmUgdGhhdCBzYXlzIHRoYXQgeWVzLAoreW91IHJlYWxseSBkaWQKK3RoYXQgdGFnLiBZb3UgY3JlYXRlIHRoZXNlIGFubm90YXRlZCB0YWdzIHdpdGggZWl0aGVyIHRoZSBgLWFgIG9yCitgLXNgIGZsYWcgdG8gJ2dpdCB0YWcnOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgLXMgPHRhZ25hbWU+CistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgc2lnbiB0aGUgY3VycmVudCBgSEVBRGAgKGJ1dCB5b3UgY2FuIGFsc28gZ2l2ZSBpdCBhbm90aGVyCithcmd1bWVudCB0aGF0IHNwZWNpZmllcyB0aGUgdGhpbmcgdG8gdGFnLCBlLmcuLCB5b3UgY291bGQgaGF2ZSB0YWdnZWQgdGhlCitjdXJyZW50IGBteWJyYW5jaGAgcG9pbnQgYnkgdXNpbmcgYGdpdCB0YWcgPHRhZ25hbWU+IG15YnJhbmNoYCkuCisKK1lvdSBub3JtYWxseSBvbmx5IGRvIHNpZ25lZCB0YWdzIGZvciBtYWpvciByZWxlYXNlcyBvciB0aGluZ3MKK2xpa2UgdGhhdCwgd2hpbGUgdGhlIGxpZ2h0LXdlaWdodCB0YWdzIGFyZSB1c2VmdWwgZm9yIGFueSBtYXJraW5nIHlvdQord2FudCB0byBkbyAtLSBhbnkgdGltZSB5b3UgZGVjaWRlIHRoYXQgeW91IHdhbnQgdG8gcmVtZW1iZXIgYSBjZXJ0YWluCitwb2ludCwganVzdCBjcmVhdGUgYSBwcml2YXRlIHRhZyBmb3IgaXQsIGFuZCB5b3UgaGF2ZSBhIG5pY2Ugc3ltYm9saWMKK25hbWUgZm9yIHRoZSBzdGF0ZSBhdCB0aGF0IHBvaW50LgorCisKK0NvcHlpbmcgcmVwb3NpdG9yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnaXQgcmVwb3NpdG9yaWVzIGFyZSBub3JtYWxseSB0b3RhbGx5IHNlbGYtc3VmZmljaWVudCBhbmQgcmVsb2NhdGFibGUuCitVbmxpa2UgQ1ZTLCBmb3IgZXhhbXBsZSwgdGhlcmUgaXMgbm8gc2VwYXJhdGUgbm90aW9uIG9mCisicmVwb3NpdG9yeSIgYW5kICJ3b3JraW5nIHRyZWUiLiBBIGdpdCByZXBvc2l0b3J5IG5vcm1hbGx5ICppcyogdGhlCit3b3JraW5nIHRyZWUsIHdpdGggdGhlIGxvY2FsIGdpdCBpbmZvcm1hdGlvbiBoaWRkZW4gaW4gdGhlIGAuZ2l0YAorc3ViZGlyZWN0b3J5LiBUaGVyZSBpcyBub3RoaW5nIGVsc2UuIFdoYXQgeW91IHNlZSBpcyB3aGF0IHlvdSBnb3QuCisKK1tOT1RFXQorWW91IGNhbiB0ZWxsIGdpdCB0byBzcGxpdCB0aGUgZ2l0IGludGVybmFsIGluZm9ybWF0aW9uIGZyb20KK3RoZSBkaXJlY3RvcnkgdGhhdCBpdCB0cmFja3MsIGJ1dCB3ZSdsbCBpZ25vcmUgdGhhdCBmb3Igbm93OiBpdCdzIG5vdAoraG93IG5vcm1hbCBwcm9qZWN0cyB3b3JrLCBhbmQgaXQncyByZWFsbHkgb25seSBtZWFudCBmb3Igc3BlY2lhbCB1c2VzLgorU28gdGhlIG1lbnRhbCBtb2RlbCBvZiAidGhlIGdpdCBpbmZvcm1hdGlvbiBpcyBhbHdheXMgdGllZCBkaXJlY3RseSB0bwordGhlIHdvcmtpbmcgdHJlZSB0aGF0IGl0IGRlc2NyaWJlcyIgbWF5IG5vdCBiZSB0ZWNobmljYWxseSAxMDAlCithY2N1cmF0ZSwgYnV0IGl0J3MgYSBnb29kIG1vZGVsIGZvciBhbGwgbm9ybWFsIHVzZS4KKworVGhpcyBoYXMgdHdvIGltcGxpY2F0aW9uczoKKworIC0gaWYgeW91IGdyb3cgYm9yZWQgd2l0aCB0aGUgdHV0b3JpYWwgcmVwb3NpdG9yeSB5b3UgY3JlYXRlZCAob3IgeW91J3ZlCisgICBtYWRlIGEgbWlzdGFrZSBhbmQgd2FudCB0byBzdGFydCBhbGwgb3ZlciksIHlvdSBjYW4ganVzdCBkbyBzaW1wbGUKKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgcm0gLXJmIGdpdC10dXRvcmlhbAorLS0tLS0tLS0tLS0tLS0tLQorKworYW5kIGl0IHdpbGwgYmUgZ29uZS4gVGhlcmUncyBubyBleHRlcm5hbCByZXBvc2l0b3J5LCBhbmQgdGhlcmUncyBubworaGlzdG9yeSBvdXRzaWRlIHRoZSBwcm9qZWN0IHlvdSBjcmVhdGVkLgorCisgLSBpZiB5b3Ugd2FudCB0byBtb3ZlIG9yIGR1cGxpY2F0ZSBhIGdpdCByZXBvc2l0b3J5LCB5b3UgY2FuIGRvIHNvLiBUaGVyZQorICAgaXMgJ2dpdCBjbG9uZScgY29tbWFuZCwgYnV0IGlmIGFsbCB5b3Ugd2FudCB0byBkbyBpcyBqdXN0IHRvCisgICBjcmVhdGUgYSBjb3B5IG9mIHlvdXIgcmVwb3NpdG9yeSAod2l0aCBhbGwgdGhlIGZ1bGwgaGlzdG9yeSB0aGF0CisgICB3ZW50IGFsb25nIHdpdGggaXQpLCB5b3UgY2FuIGRvIHNvIHdpdGggYSByZWd1bGFyCisgICBgY3AgLWEgZ2l0LXR1dG9yaWFsIG5ldy1naXQtdHV0b3JpYWxgLgorKworTm90ZSB0aGF0IHdoZW4geW91J3ZlIG1vdmVkIG9yIGNvcGllZCBhIGdpdCByZXBvc2l0b3J5LCB5b3VyIGdpdCBpbmRleAorZmlsZSAod2hpY2ggY2FjaGVzIHZhcmlvdXMgaW5mb3JtYXRpb24sIG5vdGFibHkgc29tZSBvZiB0aGUgInN0YXQiCitpbmZvcm1hdGlvbiBmb3IgdGhlIGZpbGVzIGludm9sdmVkKSB3aWxsIGxpa2VseSBuZWVkIHRvIGJlIHJlZnJlc2hlZC4KK1NvIGFmdGVyIHlvdSBkbyBhIGBjcCAtYWAgdG8gY3JlYXRlIGEgbmV3IGNvcHksIHlvdSdsbCB3YW50IHRvIGRvCisrCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCistLS0tLS0tLS0tLS0tLS0tCisrCitpbiB0aGUgbmV3IHJlcG9zaXRvcnkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IGZpbGUgaXMgdXAtdG8tZGF0ZS4KKworTm90ZSB0aGF0IHRoZSBzZWNvbmQgcG9pbnQgaXMgdHJ1ZSBldmVuIGFjcm9zcyBtYWNoaW5lcy4gWW91IGNhbgorZHVwbGljYXRlIGEgcmVtb3RlIGdpdCByZXBvc2l0b3J5IHdpdGggKmFueSogcmVndWxhciBjb3B5IG1lY2hhbmlzbSwgYmUgaXQKKydzY3AnLCAncnN5bmMnIG9yICd3Z2V0Jy4KKworV2hlbiBjb3B5aW5nIGEgcmVtb3RlIHJlcG9zaXRvcnksIHlvdSdsbCB3YW50IHRvIGF0IGEgbWluaW11bSB1cGRhdGUgdGhlCitpbmRleCBjYWNoZSB3aGVuIHlvdSBkbyB0aGlzLCBhbmQgZXNwZWNpYWxseSB3aXRoIG90aGVyIHBlb3BsZXMnCityZXBvc2l0b3JpZXMgeW91IG9mdGVuIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IGNhY2hlIGlzIGluIHNvbWUKK2tub3duIHN0YXRlICh5b3UgZG9uJ3Qga25vdyAqd2hhdCogdGhleSd2ZSBkb25lIGFuZCBub3QgeWV0IGNoZWNrZWQgaW4pLAorc28gdXN1YWxseSB5b3UnbGwgcHJlY2VkZSB0aGUgJ2dpdCB1cGRhdGUtaW5kZXgnIHdpdGggYQorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWFkLXRyZWUgLS1yZXNldCBIRUFECiskIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgZm9yY2UgYSB0b3RhbCBpbmRleCByZS1idWlsZCBmcm9tIHRoZSB0cmVlIHBvaW50ZWQgdG8gYnkgYEhFQURgLgorSXQgcmVzZXRzIHRoZSBpbmRleCBjb250ZW50cyB0byBgSEVBRGAsIGFuZCB0aGVuIHRoZSAnZ2l0IHVwZGF0ZS1pbmRleCcKK21ha2VzIHN1cmUgdG8gbWF0Y2ggdXAgYWxsIGluZGV4IGVudHJpZXMgd2l0aCB0aGUgY2hlY2tlZC1vdXQgZmlsZXMuCitJZiB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yeSBoYWQgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiBpdHMKK3dvcmtpbmcgdHJlZSwgYGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoYCBub3RpY2VzIHRoZW0gYW5kCit0ZWxscyB5b3UgdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCisKK1RoZSBhYm92ZSBjYW4gYWxzbyBiZSB3cml0dGVuIGFzIHNpbXBseQorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXNldAorLS0tLS0tLS0tLS0tLS0tLQorCithbmQgaW4gZmFjdCBhIGxvdCBvZiB0aGUgY29tbW9uIGdpdCBjb21tYW5kIGNvbWJpbmF0aW9ucyBjYW4gYmUgc2NyaXB0ZWQKK3dpdGggdGhlIGBnaXQgeHl6YCBpbnRlcmZhY2VzLiAgWW91IGNhbiBsZWFybiB0aGluZ3MgYnkganVzdCBsb29raW5nCithdCB3aGF0IHRoZSB2YXJpb3VzIGdpdCBzY3JpcHRzIGRvLiAgRm9yIGV4YW1wbGUsIGBnaXQgcmVzZXRgIHVzZWQgdG8gYmUKK3RoZSBhYm92ZSB0d28gbGluZXMgaW1wbGVtZW50ZWQgaW4gJ2dpdCByZXNldCcsIGJ1dCBzb21lIHRoaW5ncyBsaWtlCisnZ2l0IHN0YXR1cycgYW5kICdnaXQgY29tbWl0JyBhcmUgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHNjcmlwdHMgYXJvdW5kCit0aGUgYmFzaWMgZ2l0IGNvbW1hbmRzLgorCitNYW55IChtb3N0PykgcHVibGljIHJlbW90ZSByZXBvc2l0b3JpZXMgd2lsbCBub3QgY29udGFpbiBhbnkgb2YKK3RoZSBjaGVja2VkIG91dCBmaWxlcyBvciBldmVuIGFuIGluZGV4IGZpbGUsIGFuZCB3aWxsICpvbmx5KiBjb250YWluIHRoZQorYWN0dWFsIGNvcmUgZ2l0IGZpbGVzLiBTdWNoIGEgcmVwb3NpdG9yeSB1c3VhbGx5IGRvZXNuJ3QgZXZlbiBoYXZlIHRoZQorYC5naXRgIHN1YmRpcmVjdG9yeSwgYnV0IGhhcyBhbGwgdGhlIGdpdCBmaWxlcyBkaXJlY3RseSBpbiB0aGUKK3JlcG9zaXRvcnkuCisKK1RvIGNyZWF0ZSB5b3VyIG93biBsb2NhbCBsaXZlIGNvcHkgb2Ygc3VjaCBhICJyYXciIGdpdCByZXBvc2l0b3J5LCB5b3UnZAorZmlyc3QgY3JlYXRlIHlvdXIgb3duIHN1YmRpcmVjdG9yeSBmb3IgdGhlIHByb2plY3QsIGFuZCB0aGVuIGNvcHkgdGhlCityYXcgcmVwb3NpdG9yeSBjb250ZW50cyBpbnRvIHRoZSBgLmdpdGAgZGlyZWN0b3J5LiBGb3IgZXhhbXBsZSwgdG8KK2NyZWF0ZSB5b3VyIG93biBjb3B5IG9mIHRoZSBnaXQgcmVwb3NpdG9yeSwgeW91J2QgZG8gdGhlIGZvbGxvd2luZworCistLS0tLS0tLS0tLS0tLS0tCiskIG1rZGlyIG15LWdpdAorJCBjZCBteS1naXQKKyQgcnN5bmMgLXJMIHJzeW5jOi8vcnN5bmMua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LyAuZ2l0CistLS0tLS0tLS0tLS0tLS0tCisKK2ZvbGxvd2VkIGJ5CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYWQtdHJlZSBIRUFECistLS0tLS0tLS0tLS0tLS0tCisKK3RvIHBvcHVsYXRlIHRoZSBpbmRleC4gSG93ZXZlciwgbm93IHlvdSBoYXZlIHBvcHVsYXRlZCB0aGUgaW5kZXgsIGFuZAoreW91IGhhdmUgYWxsIHRoZSBnaXQgaW50ZXJuYWwgZmlsZXMsIGJ1dCB5b3Ugd2lsbCBub3RpY2UgdGhhdCB5b3UgZG9uJ3QKK2FjdHVhbGx5IGhhdmUgYW55IG9mIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMgdG8gd29yayBvbi4gVG8gZ2V0Cit0aG9zZSwgeW91J2QgY2hlY2sgdGhlbSBvdXQgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dC1pbmRleCAtdSAtYQorLS0tLS0tLS0tLS0tLS0tLQorCit3aGVyZSB0aGUgYC11YCBmbGFnIG1lYW5zIHRoYXQgeW91IHdhbnQgdGhlIGNoZWNrb3V0IHRvIGtlZXAgdGhlIGluZGV4Cit1cC10by1kYXRlIChzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIHJlZnJlc2ggaXQgYWZ0ZXJ3YXJkKSwgYW5kIHRoZQorYC1hYCBmbGFnIG1lYW5zICJjaGVjayBvdXQgYWxsIGZpbGVzIiAoaWYgeW91IGhhdmUgYSBzdGFsZSBjb3B5IG9yIGFuCitvbGRlciB2ZXJzaW9uIG9mIGEgY2hlY2tlZCBvdXQgdHJlZSB5b3UgbWF5IGFsc28gbmVlZCB0byBhZGQgdGhlIGAtZmAKK2ZsYWcgZmlyc3QsIHRvIHRlbGwgJ2dpdCBjaGVja291dC1pbmRleCcgdG8gKmZvcmNlKiBvdmVyd3JpdGluZyBvZiBhbnkgb2xkCitmaWxlcykuCisKK0FnYWluLCB0aGlzIGNhbiBhbGwgYmUgc2ltcGxpZmllZCB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIHJzeW5jOi8vcnN5bmMua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LyBteS1naXQKKyQgY2QgbXktZ2l0CiskIGdpdCBjaGVja291dAorLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIGVuZCB1cCBkb2luZyBhbGwgb2YgdGhlIGFib3ZlIGZvciB5b3UuCisKK1lvdSBoYXZlIG5vdyBzdWNjZXNzZnVsbHkgY29waWVkIHNvbWVib2R5IGVsc2UncyAobWluZSkgcmVtb3RlCityZXBvc2l0b3J5LCBhbmQgY2hlY2tlZCBpdCBvdXQuCisKKworQ3JlYXRpbmcgYSBuZXcgYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnJhbmNoZXMgaW4gZ2l0IGFyZSByZWFsbHkgbm90aGluZyBtb3JlIHRoYW4gcG9pbnRlcnMgaW50byB0aGUgZ2l0CitvYmplY3QgZGF0YWJhc2UgZnJvbSB3aXRoaW4gdGhlIGAuZ2l0L3JlZnMvYCBzdWJkaXJlY3RvcnksIGFuZCBhcyB3ZQorYWxyZWFkeSBkaXNjdXNzZWQsIHRoZSBgSEVBRGAgYnJhbmNoIGlzIG5vdGhpbmcgYnV0IGEgc3ltbGluayB0byBvbmUgb2YKK3RoZXNlIG9iamVjdCBwb2ludGVycy4KKworWW91IGNhbiBhdCBhbnkgdGltZSBjcmVhdGUgYSBuZXcgYnJhbmNoIGJ5IGp1c3QgcGlja2luZyBhbiBhcmJpdHJhcnkKK3BvaW50IGluIHRoZSBwcm9qZWN0IGhpc3RvcnksIGFuZCBqdXN0IHdyaXRpbmcgdGhlIFNIQTEgbmFtZSBvZiB0aGF0CitvYmplY3QgaW50byBhIGZpbGUgdW5kZXIgYC5naXQvcmVmcy9oZWFkcy9gLiBZb3UgY2FuIHVzZSBhbnkgZmlsZW5hbWUgeW91Cit3YW50IChhbmQgaW5kZWVkLCBzdWJkaXJlY3RvcmllcyksIGJ1dCB0aGUgY29udmVudGlvbiBpcyB0aGF0IHRoZQorIm5vcm1hbCIgYnJhbmNoIGlzIGNhbGxlZCBgbWFzdGVyYC4gVGhhdCdzIGp1c3QgYSBjb252ZW50aW9uLCB0aG91Z2gsCithbmQgbm90aGluZyBlbmZvcmNlcyBpdC4KKworVG8gc2hvdyB0aGF0IGFzIGFuIGV4YW1wbGUsIGxldCdzIGdvIGJhY2sgdG8gdGhlIGdpdC10dXRvcmlhbCByZXBvc2l0b3J5IHdlCit1c2VkIGVhcmxpZXIsIGFuZCBjcmVhdGUgYSBicmFuY2ggaW4gaXQuIFlvdSBkbyB0aGF0IGJ5IHNpbXBseSBqdXN0CitzYXlpbmcgdGhhdCB5b3Ugd2FudCB0byBjaGVjayBvdXQgYSBuZXcgYnJhbmNoOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIG15YnJhbmNoCistLS0tLS0tLS0tLS0KKword2lsbCBjcmVhdGUgYSBuZXcgYnJhbmNoIGJhc2VkIGF0IHRoZSBjdXJyZW50IGBIRUFEYCBwb3NpdGlvbiwgYW5kIHN3aXRjaAordG8gaXQuCisKK1tOT1RFXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJZiB5b3UgbWFrZSB0aGUgZGVjaXNpb24gdG8gc3RhcnQgeW91ciBuZXcgYnJhbmNoIGF0IHNvbWUKK290aGVyIHBvaW50IGluIHRoZSBoaXN0b3J5IHRoYW4gdGhlIGN1cnJlbnQgYEhFQURgLCB5b3UgY2FuIGRvIHNvIGJ5CitqdXN0IHRlbGxpbmcgJ2dpdCBjaGVja291dCcgd2hhdCB0aGUgYmFzZSBvZiB0aGUgY2hlY2tvdXQgd291bGQgYmUuCitJbiBvdGhlciB3b3JkcywgaWYgeW91IGhhdmUgYW4gZWFybGllciB0YWcgb3IgYnJhbmNoLCB5b3UnZCBqdXN0IGRvCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2ggZWFybGllci1jb21taXQKKy0tLS0tLS0tLS0tLQorCithbmQgaXQgd291bGQgY3JlYXRlIHRoZSBuZXcgYnJhbmNoIGBteWJyYW5jaGAgYXQgdGhlIGVhcmxpZXIgY29tbWl0LAorYW5kIGNoZWNrIG91dCB0aGUgc3RhdGUgYXQgdGhhdCB0aW1lLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gYWx3YXlzIGp1c3QganVtcCBiYWNrIHRvIHlvdXIgb3JpZ2luYWwgYG1hc3RlcmAgYnJhbmNoIGJ5IGRvaW5nCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbWFzdGVyCistLS0tLS0tLS0tLS0KKworKG9yIGFueSBvdGhlciBicmFuY2gtbmFtZSwgZm9yIHRoYXQgbWF0dGVyKSBhbmQgaWYgeW91IGZvcmdldCB3aGljaAorYnJhbmNoIHlvdSBoYXBwZW4gdG8gYmUgb24sIGEgc2ltcGxlCisKKy0tLS0tLS0tLS0tLQorJCBjYXQgLmdpdC9IRUFECistLS0tLS0tLS0tLS0KKword2lsbCB0ZWxsIHlvdSB3aGVyZSBpdCdzIHBvaW50aW5nLiAgVG8gZ2V0IHRoZSBsaXN0IG9mIGJyYW5jaGVzCit5b3UgaGF2ZSwgeW91IGNhbiBzYXkKKworLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2gKKy0tLS0tLS0tLS0tLQorCit3aGljaCB1c2VkIHRvIGJlIG5vdGhpbmcgbW9yZSB0aGFuIGEgc2ltcGxlIHNjcmlwdCBhcm91bmQgYGxzIC5naXQvcmVmcy9oZWFkc2AuCitUaGVyZSB3aWxsIGJlIGFuIGFzdGVyaXNrIGluIGZyb250IG9mIHRoZSBicmFuY2ggeW91IGFyZSBjdXJyZW50bHkgb24uCisKK1NvbWV0aW1lcyB5b3UgbWF5IHdpc2ggdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBfd2l0aG91dF8gYWN0dWFsbHkKK2NoZWNraW5nIGl0IG91dCBhbmQgc3dpdGNoaW5nIHRvIGl0LiBJZiBzbywganVzdCB1c2UgdGhlIGNvbW1hbmQKKworLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggPGJyYW5jaG5hbWU+IFtzdGFydGluZ3BvaW50XQorLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgc2ltcGx5IF9jcmVhdGVfIHRoZSBicmFuY2gsIGJ1dCB3aWxsIG5vdCBkbyBhbnl0aGluZyBmdXJ0aGVyLgorWW91IGNhbiB0aGVuIGxhdGVyIC0tIG9uY2UgeW91IGRlY2lkZSB0aGF0IHlvdSB3YW50IHRvIGFjdHVhbGx5IGRldmVsb3AKK29uIHRoYXQgYnJhbmNoIC0tIHN3aXRjaCB0byB0aGF0IGJyYW5jaCB3aXRoIGEgcmVndWxhciAnZ2l0IGNoZWNrb3V0Jword2l0aCB0aGUgYnJhbmNobmFtZSBhcyB0aGUgYXJndW1lbnQuCisKKworTWVyZ2luZyB0d28gYnJhbmNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uZSBvZiB0aGUgaWRlYXMgb2YgaGF2aW5nIGEgYnJhbmNoIGlzIHRoYXQgeW91IGRvIHNvbWUgKHBvc3NpYmx5CitleHBlcmltZW50YWwpIHdvcmsgaW4gaXQsIGFuZCBldmVudHVhbGx5IG1lcmdlIGl0IGJhY2sgdG8gdGhlIG1haW4KK2JyYW5jaC4gU28gYXNzdW1pbmcgeW91IGNyZWF0ZWQgdGhlIGFib3ZlIGBteWJyYW5jaGAgdGhhdCBzdGFydGVkIG91dAorYmVpbmcgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGBtYXN0ZXJgIGJyYW5jaCwgbGV0J3MgbWFrZSBzdXJlIHdlJ3JlIGluCit0aGF0IGJyYW5jaCwgYW5kIGRvIHNvbWUgd29yayB0aGVyZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBteWJyYW5jaAorJCBlY2hvICJXb3JrLCB3b3JrLCB3b3JrIiA+PmhlbGxvCiskIGdpdCBjb21taXQgLW0gIlNvbWUgd29yay4iIC1pIGhlbGxvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSwgd2UganVzdCBhZGRlZCBhbm90aGVyIGxpbmUgdG8gYGhlbGxvYCwgYW5kIHdlIHVzZWQgYSBzaG9ydGhhbmQgZm9yCitkb2luZyBib3RoIGBnaXQgdXBkYXRlLWluZGV4IGhlbGxvYCBhbmQgYGdpdCBjb21taXRgIGJ5IGp1c3QgZ2l2aW5nIHRoZQorZmlsZW5hbWUgZGlyZWN0bHkgdG8gYGdpdCBjb21taXRgLCB3aXRoIGFuIGAtaWAgZmxhZyAoaXQgdGVsbHMKK2dpdCB0byAnaW5jbHVkZScgdGhhdCBmaWxlIGluIGFkZGl0aW9uIHRvIHdoYXQgeW91IGhhdmUgZG9uZSB0bwordGhlIGluZGV4IGZpbGUgc28gZmFyIHdoZW4gbWFraW5nIHRoZSBjb21taXQpLiAgVGhlIGAtbWAgZmxhZyBpcyB0byBnaXZlIHRoZQorY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworTm93LCB0byBtYWtlIGl0IGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIGxldCdzIGFzc3VtZSB0aGF0IHNvbWVib2R5IGVsc2UKK2RvZXMgc29tZSB3b3JrIGluIHRoZSBvcmlnaW5hbCBicmFuY2gsIGFuZCBzaW11bGF0ZSB0aGF0IGJ5IGdvaW5nIGJhY2sKK3RvIHRoZSBtYXN0ZXIgYnJhbmNoLCBhbmQgZWRpdGluZyB0aGUgc2FtZSBmaWxlIGRpZmZlcmVudGx5IHRoZXJlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK0hlcmUsIHRha2UgYSBtb21lbnQgdG8gbG9vayBhdCB0aGUgY29udGVudHMgb2YgYGhlbGxvYCwgYW5kIG5vdGljZSBob3cgdGhleQorZG9uJ3QgY29udGFpbiB0aGUgd29yayB3ZSBqdXN0IGRpZCBpbiBgbXlicmFuY2hgIC0tIGJlY2F1c2UgdGhhdCB3b3JrCitoYXNuJ3QgaGFwcGVuZWQgaW4gdGhlIGBtYXN0ZXJgIGJyYW5jaCBhdCBhbGwuIFRoZW4gZG8KKworLS0tLS0tLS0tLS0tCiskIGVjaG8gIlBsYXksIHBsYXksIHBsYXkiID4+aGVsbG8KKyQgZWNobyAiTG90cyBvZiBmdW4iID4+ZXhhbXBsZQorJCBnaXQgY29tbWl0IC1tICJTb21lIGZ1bi4iIC1pIGhlbGxvIGV4YW1wbGUKKy0tLS0tLS0tLS0tLQorCitzaW5jZSB0aGUgbWFzdGVyIGJyYW5jaCBpcyBvYnZpb3VzbHkgaW4gYSBtdWNoIGJldHRlciBtb29kLgorCitOb3csIHlvdSd2ZSBnb3QgdHdvIGJyYW5jaGVzLCBhbmQgeW91IGRlY2lkZSB0aGF0IHlvdSB3YW50IHRvIG1lcmdlIHRoZQord29yayBkb25lLiBCZWZvcmUgd2UgZG8gdGhhdCwgbGV0J3MgaW50cm9kdWNlIGEgY29vbCBncmFwaGljYWwgdG9vbCB0aGF0CitoZWxwcyB5b3UgdmlldyB3aGF0J3MgZ29pbmcgb246CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayAtLWFsbAorLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHNob3cgeW91IGdyYXBoaWNhbGx5IGJvdGggb2YgeW91ciBicmFuY2hlcyAodGhhdCdzIHdoYXQgdGhlIGAtLWFsbGAKK21lYW5zOiBub3JtYWxseSBpdCB3aWxsIGp1c3Qgc2hvdyB5b3UgeW91ciBjdXJyZW50IGBIRUFEYCkgYW5kIHRoZWlyCitoaXN0b3JpZXMuIFlvdSBjYW4gYWxzbyBzZWUgZXhhY3RseSBob3cgdGhleSBjYW1lIHRvIGJlIGZyb20gYSBjb21tb24KK3NvdXJjZS4KKworQW55d2F5LCBsZXQncyBleGl0ICdnaXRrJyAoYF5RYCBvciB0aGUgRmlsZSBtZW51KSwgYW5kIGRlY2lkZSB0aGF0IHdlIHdhbnQKK3RvIG1lcmdlIHRoZSB3b3JrIHdlIGRpZCBvbiB0aGUgYG15YnJhbmNoYCBicmFuY2ggaW50byB0aGUgYG1hc3RlcmAKK2JyYW5jaCAod2hpY2ggaXMgY3VycmVudGx5IG91ciBgSEVBRGAgdG9vKS4gVG8gZG8gdGhhdCwgdGhlcmUncyBhIG5pY2UKK3NjcmlwdCBjYWxsZWQgJ2dpdCBtZXJnZScsIHdoaWNoIHdhbnRzIHRvIGtub3cgd2hpY2ggYnJhbmNoZXMgeW91IHdhbnQKK3RvIHJlc29sdmUgYW5kIHdoYXQgdGhlIG1lcmdlIGlzIGFsbCBhYm91dDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtbSAiTWVyZ2Ugd29yayBpbiBteWJyYW5jaCIgbXlicmFuY2gKKy0tLS0tLS0tLS0tLQorCit3aGVyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgZ29pbmcgdG8gYmUgdXNlZCBhcyB0aGUgY29tbWl0IG1lc3NhZ2UgaWYKK3RoZSBtZXJnZSBjYW4gYmUgcmVzb2x2ZWQgYXV0b21hdGljYWxseS4KKworTm93LCBpbiB0aGlzIGNhc2Ugd2UndmUgaW50ZW50aW9uYWxseSBjcmVhdGVkIGEgc2l0dWF0aW9uIHdoZXJlIHRoZQorbWVyZ2Ugd2lsbCBuZWVkIHRvIGJlIGZpeGVkIHVwIGJ5IGhhbmQsIHRob3VnaCwgc28gZ2l0IHdpbGwgZG8gYXMgbXVjaAorb2YgaXQgYXMgaXQgY2FuIGF1dG9tYXRpY2FsbHkgKHdoaWNoIGluIHRoaXMgY2FzZSBpcyBqdXN0IG1lcmdlIHRoZSBgZXhhbXBsZWAKK2ZpbGUsIHdoaWNoIGhhZCBubyBkaWZmZXJlbmNlcyBpbiB0aGUgYG15YnJhbmNoYCBicmFuY2gpLCBhbmQgc2F5OgorCistLS0tLS0tLS0tLS0tLS0tCisJQXV0by1tZXJnaW5nIGhlbGxvCisJQ09ORkxJQ1QgKGNvbnRlbnQpOiBNZXJnZSBjb25mbGljdCBpbiBoZWxsbworCUF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuCistLS0tLS0tLS0tLS0tLS0tCisKK0l0IHRlbGxzIHlvdSB0aGF0IGl0IGRpZCBhbiAiQXV0b21hdGljIG1lcmdlIiwgd2hpY2gKK2ZhaWxlZCBkdWUgdG8gY29uZmxpY3RzIGluIGBoZWxsb2AuCisKK05vdCB0byB3b3JyeS4gSXQgbGVmdCB0aGUgKHRyaXZpYWwpIGNvbmZsaWN0IGluIGBoZWxsb2AgaW4gdGhlIHNhbWUgZm9ybSB5b3UKK3Nob3VsZCBhbHJlYWR5IGJlIHdlbGwgdXNlZCB0byBpZiB5b3UndmUgZXZlciB1c2VkIENWUywgc28gbGV0J3MganVzdAorb3BlbiBgaGVsbG9gIGluIG91ciBlZGl0b3IgKHdoYXRldmVyIHRoYXQgbWF5IGJlKSwgYW5kIGZpeCBpdCB1cCBzb21laG93LgorSSdkIHN1Z2dlc3QganVzdCBtYWtpbmcgaXQgc28gdGhhdCBgaGVsbG9gIGNvbnRhaW5zIGFsbCBmb3VyIGxpbmVzOgorCistLS0tLS0tLS0tLS0KK0hlbGxvIFdvcmxkCitJdCdzIGEgbmV3IGRheSBmb3IgZ2l0CitQbGF5LCBwbGF5LCBwbGF5CitXb3JrLCB3b3JrLCB3b3JrCistLS0tLS0tLS0tLS0KKworYW5kIG9uY2UgeW91J3JlIGhhcHB5IHdpdGggeW91ciBtYW51YWwgbWVyZ2UsIGp1c3QgZG8gYQorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtaSBoZWxsbworLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgdmVyeSBsb3VkbHkgd2FybiB5b3UgdGhhdCB5b3UncmUgbm93IGNvbW1pdHRpbmcgYSBtZXJnZQorKHdoaWNoIGlzIGNvcnJlY3QsIHNvIG5ldmVyIG1pbmQpLCBhbmQgeW91IGNhbiB3cml0ZSBhIHNtYWxsIG1lcmdlCittZXNzYWdlIGFib3V0IHlvdXIgYWR2ZW50dXJlcyBpbiAnZ2l0IG1lcmdlJy1sYW5kLgorCitBZnRlciB5b3UncmUgZG9uZSwgc3RhcnQgdXAgYGdpdGsgLS1hbGxgIHRvIHNlZSBncmFwaGljYWxseSB3aGF0IHRoZQoraGlzdG9yeSBsb29rcyBsaWtlLiBOb3RpY2UgdGhhdCBgbXlicmFuY2hgIHN0aWxsIGV4aXN0cywgYW5kIHlvdSBjYW4KK3N3aXRjaCB0byBpdCwgYW5kIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBpdCBpZiB5b3Ugd2FudCB0by4gVGhlCitgbXlicmFuY2hgIGJyYW5jaCB3aWxsIG5vdCBjb250YWluIHRoZSBtZXJnZSwgYnV0IG5leHQgdGltZSB5b3UgbWVyZ2UgaXQKK2Zyb20gdGhlIGBtYXN0ZXJgIGJyYW5jaCwgZ2l0IHdpbGwga25vdyBob3cgeW91IG1lcmdlZCBpdCwgc28geW91J2xsIG5vdAoraGF2ZSB0byBkbyBfdGhhdF8gbWVyZ2UgYWdhaW4uCisKK0Fub3RoZXIgdXNlZnVsIHRvb2wsIGVzcGVjaWFsbHkgaWYgeW91IGRvIG5vdCBhbHdheXMgd29yayBpbiBYLVdpbmRvdworZW52aXJvbm1lbnQsIGlzIGBnaXQgc2hvdy1icmFuY2hgLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoIC0tdG9wby1vcmRlciAtLW1vcmU9MSBtYXN0ZXIgbXlicmFuY2gKKyogW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorICEgW215YnJhbmNoXSBTb21lIHdvcmsuCistLQorLSAgW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorKisgW215YnJhbmNoXSBTb21lIHdvcmsuCisqICBbbWFzdGVyXl0gU29tZSBmdW4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IHR3byBsaW5lcyBpbmRpY2F0ZSB0aGF0IGl0IGlzIHNob3dpbmcgdGhlIHR3byBicmFuY2hlcword2l0aCB0aGUgdGl0bGVzIG9mIHRoZWlyIHRvcC1vZi10aGUtdHJlZSBjb21taXRzLCB5b3UgYXJlIGN1cnJlbnRseSBvbgorYG1hc3RlcmAgYnJhbmNoIChub3RpY2UgdGhlIGFzdGVyaXNrIGAqYCBjaGFyYWN0ZXIpLCBhbmQgdGhlIGZpcnN0Citjb2x1bW4gZm9yIHRoZSBsYXRlciBvdXRwdXQgbGluZXMgaXMgdXNlZCB0byBzaG93IGNvbW1pdHMgY29udGFpbmVkIGluIHRoZQorYG1hc3RlcmAgYnJhbmNoLCBhbmQgdGhlIHNlY29uZCBjb2x1bW4gZm9yIHRoZSBgbXlicmFuY2hgCiticmFuY2guIFRocmVlIGNvbW1pdHMgYXJlIHNob3duIGFsb25nIHdpdGggdGhlaXIgdGl0bGVzLgorQWxsIG9mIHRoZW0gaGF2ZSBub24gYmxhbmsgY2hhcmFjdGVycyBpbiB0aGUgZmlyc3QgY29sdW1uIChgKmAKK3Nob3dzIGFuIG9yZGluYXJ5IGNvbW1pdCBvbiB0aGUgY3VycmVudCBicmFuY2gsIGAtYCBpcyBhIG1lcmdlIGNvbW1pdCksIHdoaWNoCittZWFucyB0aGV5IGFyZSBub3cgcGFydCBvZiB0aGUgYG1hc3RlcmAgYnJhbmNoLiBPbmx5IHRoZSAiU29tZQord29yayIgY29tbWl0IGhhcyB0aGUgcGx1cyBgK2AgY2hhcmFjdGVyIGluIHRoZSBzZWNvbmQgY29sdW1uLAorYmVjYXVzZSBgbXlicmFuY2hgIGhhcyBub3QgYmVlbiBtZXJnZWQgdG8gaW5jb3Jwb3JhdGUgdGhlc2UKK2NvbW1pdHMgZnJvbSB0aGUgbWFzdGVyIGJyYW5jaC4gIFRoZSBzdHJpbmcgaW5zaWRlIGJyYWNrZXRzCitiZWZvcmUgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpcyBhIHNob3J0IG5hbWUgeW91IGNhbiB1c2UgdG8KK25hbWUgdGhlIGNvbW1pdC4gIEluIHRoZSBhYm92ZSBleGFtcGxlLCAnbWFzdGVyJyBhbmQgJ215YnJhbmNoJworYXJlIGJyYW5jaCBoZWFkcy4gICdtYXN0ZXJeJyBpcyB0aGUgZmlyc3QgcGFyZW50IG9mICdtYXN0ZXInCiticmFuY2ggaGVhZC4gIFBsZWFzZSBzZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10gaWYgeW91IHdhbnQgdG8KK3NlZSBtb3JlIGNvbXBsZXggY2FzZXMuCisKK1tOT1RFXQorV2l0aG91dCB0aGUgJy0tbW9yZT0xJyBvcHRpb24sICdnaXQgc2hvdy1icmFuY2gnIHdvdWxkIG5vdCBvdXRwdXQgdGhlCisnW21hc3Rlcl5dJyBjb21taXQsIGFzICdbbXlicmFuY2hdJyBjb21taXQgaXMgYSBjb21tb24gYW5jZXN0b3Igb2YKK2JvdGggJ21hc3RlcicgYW5kICdteWJyYW5jaCcgdGlwcy4gIFBsZWFzZSBzZWUgbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0KK2ZvciBkZXRhaWxzLgorCitbTk9URV0KK0lmIHRoZXJlIHdlcmUgbW9yZSBjb21taXRzIG9uIHRoZSAnbWFzdGVyJyBicmFuY2ggYWZ0ZXIgdGhlIG1lcmdlLCB0aGUKK21lcmdlIGNvbW1pdCBpdHNlbGYgd291bGQgbm90IGJlIHNob3duIGJ5ICdnaXQgc2hvdy1icmFuY2gnIGJ5CitkZWZhdWx0LiAgWW91IHdvdWxkIG5lZWQgdG8gcHJvdmlkZSAnLS1zcGFyc2UnIG9wdGlvbiB0byBtYWtlIHRoZQorbWVyZ2UgY29tbWl0IHZpc2libGUgaW4gdGhpcyBjYXNlLgorCitOb3csIGxldCdzIHByZXRlbmQgeW91IGFyZSB0aGUgb25lIHdobyBkaWQgYWxsIHRoZSB3b3JrIGluCitgbXlicmFuY2hgLCBhbmQgdGhlIGZydWl0IG9mIHlvdXIgaGFyZCB3b3JrIGhhcyBmaW5hbGx5IGJlZW4gbWVyZ2VkCit0byB0aGUgYG1hc3RlcmAgYnJhbmNoLiBMZXQncyBnbyBiYWNrIHRvIGBteWJyYW5jaGAsIGFuZCBydW4KKydnaXQgbWVyZ2UnIHRvIGdldCB0aGUgInVwc3RyZWFtIGNoYW5nZXMiIGJhY2sgdG8geW91ciBicmFuY2guCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbXlicmFuY2gKKyQgZ2l0IG1lcmdlIC1tICJNZXJnZSB1cHN0cmVhbSBjaGFuZ2VzLiIgbWFzdGVyCistLS0tLS0tLS0tLS0KKworVGhpcyBvdXRwdXRzIHNvbWV0aGluZyBsaWtlIHRoaXMgKHRoZSBhY3R1YWwgY29tbWl0IG9iamVjdCBuYW1lcword291bGQgYmUgZGlmZmVyZW50KQorCistLS0tLS0tLS0tLS0tLS0tCitVcGRhdGluZyBmcm9tIGFlM2EyZGEuLi4gdG8gYTgwYjRhYS4uLi4KK0Zhc3QtZm9yd2FyZCAobm8gY29tbWl0IGNyZWF0ZWQ7IC1tIG9wdGlvbiBpZ25vcmVkKQorIGV4YW1wbGUgfCAxICsKKyBoZWxsbyAgIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKy0tLS0tLS0tLS0tLS0tLS0KKworQmVjYXVzZSB5b3VyIGJyYW5jaCBkaWQgbm90IGNvbnRhaW4gYW55dGhpbmcgbW9yZSB0aGFuIHdoYXQgaGFkCithbHJlYWR5IGJlZW4gbWVyZ2VkIGludG8gdGhlIGBtYXN0ZXJgIGJyYW5jaCwgdGhlIG1lcmdlIG9wZXJhdGlvbiBkaWQKK25vdCBhY3R1YWxseSBkbyBhIG1lcmdlLiBJbnN0ZWFkLCBpdCBqdXN0IHVwZGF0ZWQgdGhlIHRvcCBvZgordGhlIHRyZWUgb2YgeW91ciBicmFuY2ggdG8gdGhhdCBvZiB0aGUgYG1hc3RlcmAgYnJhbmNoLiBUaGlzIGlzCitvZnRlbiBjYWxsZWQgJ2Zhc3QtZm9yd2FyZCcgbWVyZ2UuCisKK1lvdSBjYW4gcnVuIGBnaXRrIC0tYWxsYCBhZ2FpbiB0byBzZWUgaG93IHRoZSBjb21taXQgYW5jZXN0cnkKK2xvb2tzIGxpa2UsIG9yIHJ1biAnc2hvdy1icmFuY2gnLCB3aGljaCB0ZWxscyB5b3UgdGhpcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCBtYXN0ZXIgbXlicmFuY2gKKyEgW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorICogW215YnJhbmNoXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCistLQorLS0gW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworTWVyZ2luZyBleHRlcm5hbCB3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQncyB1c3VhbGx5IG11Y2ggbW9yZSBjb21tb24gdGhhdCB5b3UgbWVyZ2Ugd2l0aCBzb21lYm9keSBlbHNlIHRoYW4KK21lcmdpbmcgd2l0aCB5b3VyIG93biBicmFuY2hlcywgc28gaXQncyB3b3J0aCBwb2ludGluZyBvdXQgdGhhdCBnaXQKK21ha2VzIHRoYXQgdmVyeSBlYXN5IHRvbywgYW5kIGluIGZhY3QsIGl0J3Mgbm90IHRoYXQgZGlmZmVyZW50IGZyb20KK2RvaW5nIGEgJ2dpdCBtZXJnZScuIEluIGZhY3QsIGEgcmVtb3RlIG1lcmdlIGVuZHMgdXAgYmVpbmcgbm90aGluZworbW9yZSB0aGFuICJmZXRjaCB0aGUgd29yayBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgaW50byBhIHRlbXBvcmFyeSB0YWciCitmb2xsb3dlZCBieSBhICdnaXQgbWVyZ2UnLgorCitGZXRjaGluZyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgaXMgZG9uZSBieSwgdW5zdXJwcmlzaW5nbHksCisnZ2l0IGZldGNoJzoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggPHJlbW90ZS1yZXBvc2l0b3J5PgorLS0tLS0tLS0tLS0tLS0tLQorCitPbmUgb2YgdGhlIGZvbGxvd2luZyB0cmFuc3BvcnRzIGNhbiBiZSB1c2VkIHRvIG5hbWUgdGhlCityZXBvc2l0b3J5IHRvIGRvd25sb2FkIGZyb206CisKK1JzeW5jOjoKKwlgcnN5bmM6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0L2AKKysKK1JzeW5jIHRyYW5zcG9ydCBpcyB1c2FibGUgZm9yIGJvdGggdXBsb2FkaW5nIGFuZCBkb3dubG9hZGluZywKK2J1dCBpcyBjb21wbGV0ZWx5IHVuYXdhcmUgb2Ygd2hhdCBnaXQgZG9lcywgYW5kIGNhbiBwcm9kdWNlCit1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbiB5b3UgZG93bmxvYWQgZnJvbSB0aGUgcHVibGljIHJlcG9zaXRvcnkKK3doaWxlIHRoZSByZXBvc2l0b3J5IG93bmVyIGlzIHVwbG9hZGluZyBpbnRvIGl0IHZpYSBgcnN5bmNgCit0cmFuc3BvcnQuICBNb3N0IG5vdGFibHksIGl0IGNvdWxkIHVwZGF0ZSB0aGUgZmlsZXMgdW5kZXIKK2ByZWZzL2Agd2hpY2ggaG9sZHMgdGhlIG9iamVjdCBuYW1lIG9mIHRoZSB0b3Btb3N0IGNvbW1pdHMKK2JlZm9yZSB1cGxvYWRpbmcgdGhlIGZpbGVzIGluIGBvYmplY3RzL2AgLS0gdGhlIGRvd25sb2FkZXIgd291bGQKK29idGFpbiBoZWFkIGNvbW1pdCBvYmplY3QgbmFtZSB3aGlsZSB0aGF0IG9iamVjdCBpdHNlbGYgaXMgc3RpbGwKK25vdCBhdmFpbGFibGUgaW4gdGhlIHJlcG9zaXRvcnkuICBGb3IgdGhpcyByZWFzb24sIGl0IGlzCitjb25zaWRlcmVkIGRlcHJlY2F0ZWQuCisKK1NTSDo6CisJYHJlbW90ZS5tYWNoaW5lOi9wYXRoL3RvL3JlcG8uZ2l0L2Agb3IKKysKK2Bzc2g6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0L2AKKysKK1RoaXMgdHJhbnNwb3J0IGNhbiBiZSB1c2VkIGZvciBib3RoIHVwbG9hZGluZyBhbmQgZG93bmxvYWRpbmcsCithbmQgcmVxdWlyZXMgeW91IHRvIGhhdmUgYSBsb2ctaW4gcHJpdmlsZWdlIG92ZXIgYHNzaGAgdG8gdGhlCityZW1vdGUgbWFjaGluZS4gIEl0IGZpbmRzIG91dCB0aGUgc2V0IG9mIG9iamVjdHMgdGhlIG90aGVyIHNpZGUKK2xhY2tzIGJ5IGV4Y2hhbmdpbmcgdGhlIGhlYWQgY29tbWl0cyBib3RoIGVuZHMgaGF2ZSBhbmQKK3RyYW5zZmVycyAoY2xvc2UgdG8pIG1pbmltdW0gc2V0IG9mIG9iamVjdHMuICBJdCBpcyBieSBmYXIgdGhlCittb3N0IGVmZmljaWVudCB3YXkgdG8gZXhjaGFuZ2UgZ2l0IG9iamVjdHMgYmV0d2VlbiByZXBvc2l0b3JpZXMuCisKK0xvY2FsIGRpcmVjdG9yeTo6CisJYC9wYXRoL3RvL3JlcG8uZ2l0L2AKKysKK1RoaXMgdHJhbnNwb3J0IGlzIHRoZSBzYW1lIGFzIFNTSCB0cmFuc3BvcnQgYnV0IHVzZXMgJ3NoJyB0byBydW4KK2JvdGggZW5kcyBvbiB0aGUgbG9jYWwgbWFjaGluZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgb3RoZXIgZW5kIG9uCit0aGUgcmVtb3RlIG1hY2hpbmUgdmlhICdzc2gnLgorCitnaXQgTmF0aXZlOjoKKwlgZ2l0Oi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC9gCisrCitUaGlzIHRyYW5zcG9ydCB3YXMgZGVzaWduZWQgZm9yIGFub255bW91cyBkb3dubG9hZGluZy4gIExpa2UgU1NICit0cmFuc3BvcnQsIGl0IGZpbmRzIG91dCB0aGUgc2V0IG9mIG9iamVjdHMgdGhlIGRvd25zdHJlYW0gc2lkZQorbGFja3MgYW5kIHRyYW5zZmVycyAoY2xvc2UgdG8pIG1pbmltdW0gc2V0IG9mIG9iamVjdHMuCisKK0hUVFAoUyk6OgorCWBodHRwOi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC9gCisrCitEb3dubG9hZGVyIGZyb20gaHR0cCBhbmQgaHR0cHMgVVJMCitmaXJzdCBvYnRhaW5zIHRoZSB0b3Btb3N0IGNvbW1pdCBvYmplY3QgbmFtZSBmcm9tIHRoZSByZW1vdGUgc2l0ZQorYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWVkIHJlZm5hbWUgdW5kZXIgYHJlcG8uZ2l0L3JlZnMvYCBkaXJlY3RvcnksCithbmQgdGhlbiB0cmllcyB0byBvYnRhaW4gdGhlCitjb21taXQgb2JqZWN0IGJ5IGRvd25sb2FkaW5nIGZyb20gYHJlcG8uZ2l0L29iamVjdHMveHgveHh4Li4uYAordXNpbmcgdGhlIG9iamVjdCBuYW1lIG9mIHRoYXQgY29tbWl0IG9iamVjdC4gIFRoZW4gaXQgcmVhZHMgdGhlCitjb21taXQgb2JqZWN0IHRvIGZpbmQgb3V0IGl0cyBwYXJlbnQgY29tbWl0cyBhbmQgdGhlIGFzc29jaWF0ZQordHJlZSBvYmplY3Q7IGl0IHJlcGVhdHMgdGhpcyBwcm9jZXNzIHVudGlsIGl0IGdldHMgYWxsIHRoZQorbmVjZXNzYXJ5IG9iamVjdHMuICBCZWNhdXNlIG9mIHRoaXMgYmVoYXZpb3IsIHRoZXkgYXJlCitzb21ldGltZXMgYWxzbyBjYWxsZWQgJ2NvbW1pdCB3YWxrZXJzJy4KKysKK1RoZSAnY29tbWl0IHdhbGtlcnMnIGFyZSBzb21ldGltZXMgYWxzbyBjYWxsZWQgJ2R1bWIKK3RyYW5zcG9ydHMnLCBiZWNhdXNlIHRoZXkgZG8gbm90IHJlcXVpcmUgYW55IGdpdCBhd2FyZSBzbWFydAorc2VydmVyIGxpa2UgZ2l0IE5hdGl2ZSB0cmFuc3BvcnQgZG9lcy4gIEFueSBzdG9jayBIVFRQIHNlcnZlcgordGhhdCBkb2VzIG5vdCBldmVuIHN1cHBvcnQgZGlyZWN0b3J5IGluZGV4IHdvdWxkIHN1ZmZpY2UuICBCdXQKK3lvdSBtdXN0IHByZXBhcmUgeW91ciByZXBvc2l0b3J5IHdpdGggJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nCit0byBoZWxwIGR1bWIgdHJhbnNwb3J0IGRvd25sb2FkZXJzLgorCitPbmNlIHlvdSBmZXRjaCBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwgeW91IGBtZXJnZWAgdGhhdAord2l0aCB5b3VyIGN1cnJlbnQgYnJhbmNoLgorCitIb3dldmVyIC0tIGl0J3Mgc3VjaCBhIGNvbW1vbiB0aGluZyB0byBgZmV0Y2hgIGFuZCB0aGVuCitpbW1lZGlhdGVseSBgbWVyZ2VgLCB0aGF0IGl0J3MgY2FsbGVkIGBnaXQgcHVsbGAsIGFuZCB5b3UgY2FuCitzaW1wbHkgZG8KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCA8cmVtb3RlLXJlcG9zaXRvcnk+CistLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBvcHRpb25hbGx5IGdpdmUgYSBicmFuY2gtbmFtZSBmb3IgdGhlIHJlbW90ZSBlbmQgYXMgYSBzZWNvbmQKK2FyZ3VtZW50LgorCitbTk9URV0KK1lvdSBjb3VsZCBkbyB3aXRob3V0IHVzaW5nIGFueSBicmFuY2hlcyBhdCBhbGwsIGJ5CitrZWVwaW5nIGFzIG1hbnkgbG9jYWwgcmVwb3NpdG9yaWVzIGFzIHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUKK2JyYW5jaGVzLCBhbmQgbWVyZ2luZyBiZXR3ZWVuIHRoZW0gd2l0aCAnZ2l0IHB1bGwnLCBqdXN0IGxpa2UKK3lvdSBtZXJnZSBiZXR3ZWVuIGJyYW5jaGVzLiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgYXBwcm9hY2ggaXMKK3RoYXQgaXQgbGV0cyB5b3Uga2VlcCBhIHNldCBvZiBmaWxlcyBmb3IgZWFjaCBgYnJhbmNoYCBjaGVja2VkCitvdXQgYW5kIHlvdSBtYXkgZmluZCBpdCBlYXNpZXIgdG8gc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGlmIHlvdQoranVnZ2xlIG11bHRpcGxlIGxpbmVzIG9mIGRldmVsb3BtZW50IHNpbXVsdGFuZW91c2x5LiBPZgorY291cnNlLCB5b3Ugd2lsbCBwYXkgdGhlIHByaWNlIG9mIG1vcmUgZGlzayB1c2FnZSB0byBob2xkCittdWx0aXBsZSB3b3JraW5nIHRyZWVzLCBidXQgZGlzayBzcGFjZSBpcyBjaGVhcCB0aGVzZSBkYXlzLgorCitJdCBpcyBsaWtlbHkgdGhhdCB5b3Ugd2lsbCBiZSBwdWxsaW5nIGZyb20gdGhlIHNhbWUgcmVtb3RlCityZXBvc2l0b3J5IGZyb20gdGltZSB0byB0aW1lLiBBcyBhIHNob3J0IGhhbmQsIHlvdSBjYW4gc3RvcmUKK3RoZSByZW1vdGUgcmVwb3NpdG9yeSBVUkwgaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkncyBjb25maWcgZmlsZQorbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyByZW1vdGUubGludXMudXJsIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB1c2UgdGhlICJsaW51cyIga2V5d29yZCB3aXRoICdnaXQgcHVsbCcgaW5zdGVhZCBvZiB0aGUgZnVsbCBVUkwuCisKK0V4YW1wbGVzLgorCisuIGBnaXQgcHVsbCBsaW51c2AKKy4gYGdpdCBwdWxsIGxpbnVzIHRhZyB2MC45OS4xYAorCit0aGUgYWJvdmUgYXJlIGVxdWl2YWxlbnQgdG86CisKKy4gYGdpdCBwdWxsIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LyBIRUFEYAorLiBgZ2l0IHB1bGwgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvIHRhZyB2MC45OS4xYAorCisKK0hvdyBkb2VzIHRoZSBtZXJnZSB3b3JrPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIHNhaWQgdGhpcyB0dXRvcmlhbCBzaG93cyB3aGF0IHBsdW1iaW5nIGRvZXMgdG8gaGVscCB5b3UgY29wZQord2l0aCB0aGUgcG9yY2VsYWluIHRoYXQgaXNuJ3QgZmx1c2hpbmcsIGJ1dCB3ZSBzbyBmYXIgZGlkIG5vdAordGFsayBhYm91dCBob3cgdGhlIG1lcmdlIHJlYWxseSB3b3Jrcy4gIElmIHlvdSBhcmUgZm9sbG93aW5nCit0aGlzIHR1dG9yaWFsIHRoZSBmaXJzdCB0aW1lLCBJJ2Qgc3VnZ2VzdCB0byBza2lwIHRvICJQdWJsaXNoaW5nCit5b3VyIHdvcmsiIHNlY3Rpb24gYW5kIGNvbWUgYmFjayBoZXJlIGxhdGVyLgorCitPSywgc3RpbGwgd2l0aCBtZT8gIFRvIGdpdmUgdXMgYW4gZXhhbXBsZSB0byBsb29rIGF0LCBsZXQncyBnbworYmFjayB0byB0aGUgZWFybGllciByZXBvc2l0b3J5IHdpdGggImhlbGxvIiBhbmQgImV4YW1wbGUiIGZpbGUsCithbmQgYnJpbmcgb3Vyc2VsdmVzIGJhY2sgdG8gdGhlIHByZS1tZXJnZSBzdGF0ZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCAtLW1vcmU9MiBtYXN0ZXIgbXlicmFuY2gKKyEgW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorICogW215YnJhbmNoXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCistLQorLS0gW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorKyogW21hc3Rlcl4yXSBTb21lIHdvcmsuCisrKiBbbWFzdGVyXl0gU29tZSBmdW4uCistLS0tLS0tLS0tLS0KKworUmVtZW1iZXIsIGJlZm9yZSBydW5uaW5nICdnaXQgbWVyZ2UnLCBvdXIgYG1hc3RlcmAgaGVhZCB3YXMgYXQKKyJTb21lIGZ1bi4iIGNvbW1pdCwgd2hpbGUgb3VyIGBteWJyYW5jaGAgaGVhZCB3YXMgYXQgIlNvbWUKK3dvcmsuIiBjb21taXQuCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbXlicmFuY2gKKyQgZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJeMgorJCBnaXQgY2hlY2tvdXQgbWFzdGVyCiskIGdpdCByZXNldCAtLWhhcmQgbWFzdGVyXgorLS0tLS0tLS0tLS0tCisKK0FmdGVyIHJld2luZGluZywgdGhlIGNvbW1pdCBzdHJ1Y3R1cmUgc2hvdWxkIGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoCisqIFttYXN0ZXJdIFNvbWUgZnVuLgorICEgW215YnJhbmNoXSBTb21lIHdvcmsuCistLQorKiAgW21hc3Rlcl0gU29tZSBmdW4uCisgKyBbbXlicmFuY2hdIFNvbWUgd29yay4KKyorIFttYXN0ZXJeXSBJbml0aWFsIGNvbW1pdAorLS0tLS0tLS0tLS0tCisKK05vdyB3ZSBhcmUgcmVhZHkgdG8gZXhwZXJpbWVudCB3aXRoIHRoZSBtZXJnZSBieSBoYW5kLgorCitgZ2l0IG1lcmdlYCBjb21tYW5kLCB3aGVuIG1lcmdpbmcgdHdvIGJyYW5jaGVzLCB1c2VzIDMtd2F5IG1lcmdlCithbGdvcml0aG0uICBGaXJzdCwgaXQgZmluZHMgdGhlIGNvbW1vbiBhbmNlc3RvciBiZXR3ZWVuIHRoZW0uCitUaGUgY29tbWFuZCBpdCB1c2VzIGlzICdnaXQgbWVyZ2UtYmFzZSc6CisKKy0tLS0tLS0tLS0tLQorJCBtYj0kKGdpdCBtZXJnZS1iYXNlIEhFQUQgbXlicmFuY2gpCistLS0tLS0tLS0tLS0KKworVGhlIGNvbW1hbmQgd3JpdGVzIHRoZSBjb21taXQgb2JqZWN0IG5hbWUgb2YgdGhlIGNvbW1vbiBhbmNlc3RvcgordG8gdGhlIHN0YW5kYXJkIG91dHB1dCwgc28gd2UgY2FwdHVyZWQgaXRzIG91dHB1dCB0byBhIHZhcmlhYmxlLAorYmVjYXVzZSB3ZSB3aWxsIGJlIHVzaW5nIGl0IGluIHRoZSBuZXh0IHN0ZXAuICBCeSB0aGUgd2F5LCB0aGUgY29tbW9uCithbmNlc3RvciBjb21taXQgaXMgdGhlICJJbml0aWFsIGNvbW1pdCIgY29tbWl0IGluIHRoaXMgY2FzZS4gIFlvdSBjYW4KK3RlbGwgaXQgYnk6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkgLS10YWdzICRtYgorbXktZmlyc3QtdGFnCistLS0tLS0tLS0tLS0KKworQWZ0ZXIgZmluZGluZyBvdXQgYSBjb21tb24gYW5jZXN0b3IgY29tbWl0LCB0aGUgc2Vjb25kIHN0ZXAgaXMKK3RoaXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIC1tIC11ICRtYiBIRUFEIG15YnJhbmNoCistLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgc2FtZSAnZ2l0IHJlYWQtdHJlZScgY29tbWFuZCB3ZSBoYXZlIGFscmVhZHkgc2VlbiwKK2J1dCBpdCB0YWtlcyB0aHJlZSB0cmVlcywgdW5saWtlIHByZXZpb3VzIGV4YW1wbGVzLiAgVGhpcyByZWFkcwordGhlIGNvbnRlbnRzIG9mIGVhY2ggdHJlZSBpbnRvIGRpZmZlcmVudCAnc3RhZ2UnIGluIHRoZSBpbmRleAorZmlsZSAodGhlIGZpcnN0IHRyZWUgZ29lcyB0byBzdGFnZSAxLCB0aGUgc2Vjb25kIHRvIHN0YWdlIDIsCitldGMuKS4gIEFmdGVyIHJlYWRpbmcgdGhyZWUgdHJlZXMgaW50byB0aHJlZSBzdGFnZXMsIHRoZSBwYXRocwordGhhdCBhcmUgdGhlIHNhbWUgaW4gYWxsIHRocmVlIHN0YWdlcyBhcmUgJ2NvbGxhcHNlZCcgaW50byBzdGFnZQorMC4gIEFsc28gcGF0aHMgdGhhdCBhcmUgdGhlIHNhbWUgaW4gdHdvIG9mIHRocmVlIHN0YWdlcyBhcmUKK2NvbGxhcHNlZCBpbnRvIHN0YWdlIDAsIHRha2luZyB0aGUgU0hBMSBmcm9tIGVpdGhlciBzdGFnZSAyIG9yCitzdGFnZSAzLCB3aGljaGV2ZXIgaXMgZGlmZmVyZW50IGZyb20gc3RhZ2UgMSAoaS5lLiBvbmx5IG9uZSBzaWRlCitjaGFuZ2VkIGZyb20gdGhlIGNvbW1vbiBhbmNlc3RvcikuCisKK0FmdGVyICdjb2xsYXBzaW5nJyBvcGVyYXRpb24sIHBhdGhzIHRoYXQgYXJlIGRpZmZlcmVudCBpbiB0aHJlZQordHJlZXMgYXJlIGxlZnQgaW4gbm9uLXplcm8gc3RhZ2VzLiAgQXQgdGhpcyBwb2ludCwgeW91IGNhbgoraW5zcGVjdCB0aGUgaW5kZXggZmlsZSB3aXRoIHRoaXMgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtLXN0YWdlCisxMDA2NDQgN2Y4YjE0MWI2NWZkY2VlNDczMjFlMzk5YTI1OThhMjM1YTAzMjQyMiAwCWV4YW1wbGUKKzEwMDY0NCA1NTdkYjAzZGU5OTdjODZhNGEwMjhlMWViZDNhMWNlYjIyNWJlMjM4IDEJaGVsbG8KKzEwMDY0NCBiYTQyYTJhOTZlMzAyN2YzMzMzZTEzZWRlNGNjZjQ0OThjM2FlOTQyIDIJaGVsbG8KKzEwMDY0NCBjYzQ0YzczZWI3ODM1NjVkYTU4MzFiNGQ4MjBjOTYyOTU0MDE5YjY5IDMJaGVsbG8KKy0tLS0tLS0tLS0tLQorCitJbiBvdXIgZXhhbXBsZSBvZiBvbmx5IHR3byBmaWxlcywgd2UgZGlkIG5vdCBoYXZlIHVuY2hhbmdlZAorZmlsZXMgc28gb25seSAnZXhhbXBsZScgcmVzdWx0ZWQgaW4gY29sbGFwc2luZy4gIEJ1dCBpbiByZWFsLWxpZmUKK2xhcmdlIHByb2plY3RzLCB3aGVuIG9ubHkgYSBzbWFsbCBudW1iZXIgb2YgZmlsZXMgY2hhbmdlIGluIG9uZSBjb21taXQsCit0aGlzICdjb2xsYXBzaW5nJyB0ZW5kcyB0byB0cml2aWFsbHkgbWVyZ2UgbW9zdCBvZiB0aGUgcGF0aHMKK2ZhaXJseSBxdWlja2x5LCBsZWF2aW5nIG9ubHkgYSBoYW5kZnVsIG9mIHJlYWwgY2hhbmdlcyBpbiBub24temVybworc3RhZ2VzLgorCitUbyBsb29rIGF0IG9ubHkgbm9uLXplcm8gc3RhZ2VzLCB1c2UgYC0tdW5tZXJnZWRgIGZsYWc6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbHMtZmlsZXMgLS11bm1lcmdlZAorMTAwNjQ0IDU1N2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzggMQloZWxsbworMTAwNjQ0IGJhNDJhMmE5NmUzMDI3ZjMzMzNlMTNlZGU0Y2NmNDQ5OGMzYWU5NDIgMgloZWxsbworMTAwNjQ0IGNjNDRjNzNlYjc4MzU2NWRhNTgzMWI0ZDgyMGM5NjI5NTQwMTliNjkgMwloZWxsbworLS0tLS0tLS0tLS0tCisKK1RoZSBuZXh0IHN0ZXAgb2YgbWVyZ2luZyBpcyB0byBtZXJnZSB0aGVzZSB0aHJlZSB2ZXJzaW9ucyBvZiB0aGUKK2ZpbGUsIHVzaW5nIDMtd2F5IG1lcmdlLiAgVGhpcyBpcyBkb25lIGJ5IGdpdmluZworJ2dpdCBtZXJnZS1vbmUtZmlsZScgY29tbWFuZCBhcyBvbmUgb2YgdGhlIGFyZ3VtZW50cyB0bworJ2dpdCBtZXJnZS1pbmRleCcgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgaGVsbG8KK0F1dG8tbWVyZ2luZyBoZWxsbworRVJST1I6IE1lcmdlIGNvbmZsaWN0IGluIGhlbGxvCitmYXRhbDogbWVyZ2UgcHJvZ3JhbSBmYWlsZWQKKy0tLS0tLS0tLS0tLQorCisnZ2l0IG1lcmdlLW9uZS1maWxlJyBzY3JpcHQgaXMgY2FsbGVkIHdpdGggcGFyYW1ldGVycyB0bworZGVzY3JpYmUgdGhvc2UgdGhyZWUgdmVyc2lvbnMsIGFuZCBpcyByZXNwb25zaWJsZSB0byBsZWF2ZSB0aGUKK21lcmdlIHJlc3VsdHMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KK0l0IGlzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBzaGVsbCBzY3JpcHQsIGFuZAorZXZlbnR1YWxseSBjYWxscyAnbWVyZ2UnIHByb2dyYW0gZnJvbSBSQ1Mgc3VpdGUgdG8gcGVyZm9ybSBhCitmaWxlLWxldmVsIDMtd2F5IG1lcmdlLiAgSW4gdGhpcyBjYXNlLCAnbWVyZ2UnIGRldGVjdHMKK2NvbmZsaWN0cywgYW5kIHRoZSBtZXJnZSByZXN1bHQgd2l0aCBjb25mbGljdCBtYXJrcyBpcyBsZWZ0IGluCit0aGUgd29ya2luZyB0cmVlLi4gIFRoaXMgY2FuIGJlIHNlZW4gaWYgeW91IHJ1biBgbHMtZmlsZXMKKy0tc3RhZ2VgIGFnYWluIGF0IHRoaXMgcG9pbnQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbHMtZmlsZXMgLS1zdGFnZQorMTAwNjQ0IDdmOGIxNDFiNjVmZGNlZTQ3MzIxZTM5OWEyNTk4YTIzNWEwMzI0MjIgMAlleGFtcGxlCisxMDA2NDQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOCAxCWhlbGxvCisxMDA2NDQgYmE0MmEyYTk2ZTMwMjdmMzMzM2UxM2VkZTRjY2Y0NDk4YzNhZTk0MiAyCWhlbGxvCisxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvCistLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgc3RhdGUgb2YgdGhlIGluZGV4IGZpbGUgYW5kIHRoZSB3b3JraW5nIGZpbGUgYWZ0ZXIKKydnaXQgbWVyZ2UnIHJldHVybnMgY29udHJvbCBiYWNrIHRvIHlvdSwgbGVhdmluZyB0aGUgY29uZmxpY3RpbmcKK21lcmdlIGZvciB5b3UgdG8gcmVzb2x2ZS4gIE5vdGljZSB0aGF0IHRoZSBwYXRoIGBoZWxsb2AgaXMgc3RpbGwKK3VubWVyZ2VkLCBhbmQgd2hhdCB5b3Ugc2VlIHdpdGggJ2dpdCBkaWZmJyBhdCB0aGlzIHBvaW50IGlzCitkaWZmZXJlbmNlcyBzaW5jZSBzdGFnZSAyIChpLmUuIHlvdXIgdmVyc2lvbikuCisKKworUHVibGlzaGluZyB5b3VyIHdvcmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvLCB3ZSBjYW4gdXNlIHNvbWVib2R5IGVsc2UncyB3b3JrIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgYnV0Citob3cgY2FuICp5b3UqIHByZXBhcmUgYSByZXBvc2l0b3J5IHRvIGxldCBvdGhlciBwZW9wbGUgcHVsbCBmcm9tCitpdD8KKworWW91IGRvIHlvdXIgcmVhbCB3b3JrIGluIHlvdXIgd29ya2luZyB0cmVlIHRoYXQgaGFzIHlvdXIKK3ByaW1hcnkgcmVwb3NpdG9yeSBoYW5naW5nIHVuZGVyIGl0IGFzIGl0cyBgLmdpdGAgc3ViZGlyZWN0b3J5LgorWW91ICpjb3VsZCogbWFrZSB0aGF0IHJlcG9zaXRvcnkgYWNjZXNzaWJsZSByZW1vdGVseSBhbmQgYXNrCitwZW9wbGUgdG8gcHVsbCBmcm9tIGl0LCBidXQgaW4gcHJhY3RpY2UgdGhhdCBpcyBub3QgdGhlIHdheQordGhpbmdzIGFyZSB1c3VhbGx5IGRvbmUuIEEgcmVjb21tZW5kZWQgd2F5IGlzIHRvIGhhdmUgYSBwdWJsaWMKK3JlcG9zaXRvcnksIG1ha2UgaXQgcmVhY2hhYmxlIGJ5IG90aGVyIHBlb3BsZSwgYW5kIHdoZW4gdGhlCitjaGFuZ2VzIHlvdSBtYWRlIGluIHlvdXIgcHJpbWFyeSB3b3JraW5nIHRyZWUgYXJlIGluIGdvb2Qgc2hhcGUsCit1cGRhdGUgdGhlIHB1YmxpYyByZXBvc2l0b3J5IGZyb20gaXQuIFRoaXMgaXMgb2Z0ZW4gY2FsbGVkCisncHVzaGluZycuCisKK1tOT1RFXQorVGhpcyBwdWJsaWMgcmVwb3NpdG9yeSBjb3VsZCBmdXJ0aGVyIGJlIG1pcnJvcmVkLCBhbmQgdGhhdCBpcworaG93IGdpdCByZXBvc2l0b3JpZXMgYXQgYGtlcm5lbC5vcmdgIGFyZSBtYW5hZ2VkLgorCitQdWJsaXNoaW5nIHRoZSBjaGFuZ2VzIGZyb20geW91ciBsb2NhbCAocHJpdmF0ZSkgcmVwb3NpdG9yeSB0bworeW91ciByZW1vdGUgKHB1YmxpYykgcmVwb3NpdG9yeSByZXF1aXJlcyBhIHdyaXRlIHByaXZpbGVnZSBvbgordGhlIHJlbW90ZSBtYWNoaW5lLiBZb3UgbmVlZCB0byBoYXZlIGFuIFNTSCBhY2NvdW50IHRoZXJlIHRvCitydW4gYSBzaW5nbGUgY29tbWFuZCwgJ2dpdC1yZWNlaXZlLXBhY2snLgorCitGaXJzdCwgeW91IG5lZWQgdG8gY3JlYXRlIGFuIGVtcHR5IHJlcG9zaXRvcnkgb24gdGhlIHJlbW90ZQorbWFjaGluZSB0aGF0IHdpbGwgaG91c2UgeW91ciBwdWJsaWMgcmVwb3NpdG9yeS4gVGhpcyBlbXB0eQorcmVwb3NpdG9yeSB3aWxsIGJlIHBvcHVsYXRlZCBhbmQgYmUga2VwdCB1cC10by1kYXRlIGJ5IHB1c2hpbmcKK2ludG8gaXQgbGF0ZXIuIE9idmlvdXNseSwgdGhpcyByZXBvc2l0b3J5IGNyZWF0aW9uIG5lZWRzIHRvIGJlCitkb25lIG9ubHkgb25jZS4KKworW05PVEVdCisnZ2l0IHB1c2gnIHVzZXMgYSBwYWlyIG9mIGNvbW1hbmRzLAorJ2dpdCBzZW5kLXBhY2snIG9uIHlvdXIgbG9jYWwgbWFjaGluZSwgYW5kICdnaXQtcmVjZWl2ZS1wYWNrJworb24gdGhlIHJlbW90ZSBtYWNoaW5lLiBUaGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB0d28gb3ZlcgordGhlIG5ldHdvcmsgaW50ZXJuYWxseSB1c2VzIGFuIFNTSCBjb25uZWN0aW9uLgorCitZb3VyIHByaXZhdGUgcmVwb3NpdG9yeSdzIGdpdCBkaXJlY3RvcnkgaXMgdXN1YWxseSBgLmdpdGAsIGJ1dAoreW91ciBwdWJsaWMgcmVwb3NpdG9yeSBpcyBvZnRlbiBuYW1lZCBhZnRlciB0aGUgcHJvamVjdCBuYW1lLAoraS5lLiBgPHByb2plY3Q+LmdpdGAuIExldCdzIGNyZWF0ZSBzdWNoIGEgcHVibGljIHJlcG9zaXRvcnkgZm9yCitwcm9qZWN0IGBteS1naXRgLiBBZnRlciBsb2dnaW5nIGludG8gdGhlIHJlbW90ZSBtYWNoaW5lLCBjcmVhdGUKK2FuIGVtcHR5IGRpcmVjdG9yeToKKworLS0tLS0tLS0tLS0tCiskIG1rZGlyIG15LWdpdC5naXQKKy0tLS0tLS0tLS0tLQorCitUaGVuLCBtYWtlIHRoYXQgZGlyZWN0b3J5IGludG8gYSBnaXQgcmVwb3NpdG9yeSBieSBydW5uaW5nCisnZ2l0IGluaXQnLCBidXQgdGhpcyB0aW1lLCBzaW5jZSBpdHMgbmFtZSBpcyBub3QgdGhlIHVzdWFsCitgLmdpdGAsIHdlIGRvIHRoaW5ncyBzbGlnaHRseSBkaWZmZXJlbnRseToKKworLS0tLS0tLS0tLS0tCiskIEdJVF9ESVI9bXktZ2l0LmdpdCBnaXQgaW5pdAorLS0tLS0tLS0tLS0tCisKK01ha2Ugc3VyZSB0aGlzIGRpcmVjdG9yeSBpcyBhdmFpbGFibGUgZm9yIG90aGVycyB5b3Ugd2FudCB5b3VyCitjaGFuZ2VzIHRvIGJlIHB1bGxlZCB2aWEgdGhlIHRyYW5zcG9ydCBvZiB5b3VyIGNob2ljZS4gQWxzbworeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlICdnaXQtcmVjZWl2ZS1wYWNrJworcHJvZ3JhbSBvbiB0aGUgYCRQQVRIYC4KKworW05PVEVdCitNYW55IGluc3RhbGxhdGlvbnMgb2Ygc3NoZCBkbyBub3QgaW52b2tlIHlvdXIgc2hlbGwgYXMgdGhlIGxvZ2luCitzaGVsbCB3aGVuIHlvdSBkaXJlY3RseSBydW4gcHJvZ3JhbXM7IHdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IGlmCit5b3VyIGxvZ2luIHNoZWxsIGlzICdiYXNoJywgb25seSBgLmJhc2hyY2AgaXMgcmVhZCBhbmQgbm90CitgLmJhc2hfcHJvZmlsZWAuIEFzIGEgd29ya2Fyb3VuZCwgbWFrZSBzdXJlIGAuYmFzaHJjYCBzZXRzIHVwCitgJFBBVEhgIHNvIHRoYXQgeW91IGNhbiBydW4gJ2dpdC1yZWNlaXZlLXBhY2snIHByb2dyYW0uCisKK1tOT1RFXQorSWYgeW91IHBsYW4gdG8gcHVibGlzaCB0aGlzIHJlcG9zaXRvcnkgdG8gYmUgYWNjZXNzZWQgb3ZlciBodHRwLAoreW91IHNob3VsZCBkbyBgbXYgbXktZ2l0LmdpdC9ob29rcy9wb3N0LXVwZGF0ZS5zYW1wbGUKK215LWdpdC5naXQvaG9va3MvcG9zdC11cGRhdGVgIGF0IHRoaXMgcG9pbnQuCitUaGlzIG1ha2VzIHN1cmUgdGhhdCBldmVyeSB0aW1lIHlvdSBwdXNoIGludG8gdGhpcworcmVwb3NpdG9yeSwgYGdpdCB1cGRhdGUtc2VydmVyLWluZm9gIGlzIHJ1bi4KKworWW91ciAicHVibGljIHJlcG9zaXRvcnkiIGlzIG5vdyByZWFkeSB0byBhY2NlcHQgeW91ciBjaGFuZ2VzLgorQ29tZSBiYWNrIHRvIHRoZSBtYWNoaW5lIHlvdSBoYXZlIHlvdXIgcHJpdmF0ZSByZXBvc2l0b3J5LiBGcm9tCit0aGVyZSwgcnVuIHRoaXMgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIDxwdWJsaWMtaG9zdD46L3BhdGgvdG8vbXktZ2l0LmdpdCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGlzIHN5bmNocm9uaXplcyB5b3VyIHB1YmxpYyByZXBvc2l0b3J5IHRvIG1hdGNoIHRoZSBuYW1lZAorYnJhbmNoIGhlYWQgKGkuZS4gYG1hc3RlcmAgaW4gdGhpcyBjYXNlKSBhbmQgb2JqZWN0cyByZWFjaGFibGUKK2Zyb20gdGhlbSBpbiB5b3VyIGN1cnJlbnQgcmVwb3NpdG9yeS4KKworQXMgYSByZWFsIGV4YW1wbGUsIHRoaXMgaXMgaG93IEkgdXBkYXRlIG15IHB1YmxpYyBnaXQKK3JlcG9zaXRvcnkuIEtlcm5lbC5vcmcgbWlycm9yIG5ldHdvcmsgdGFrZXMgY2FyZSBvZiB0aGUKK3Byb3BhZ2F0aW9uIHRvIG90aGVyIHB1YmxpY2x5IHZpc2libGUgbWFjaGluZXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCBtYXN0ZXIua2VybmVsLm9yZzovcHViL3NjbS9naXQvZ2l0LmdpdC8KKy0tLS0tLS0tLS0tLQorCisKK1BhY2tpbmcgeW91ciByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFYXJsaWVyLCB3ZSBzYXcgdGhhdCBvbmUgZmlsZSB1bmRlciBgLmdpdC9vYmplY3RzLz8/L2AgZGlyZWN0b3J5CitpcyBzdG9yZWQgZm9yIGVhY2ggZ2l0IG9iamVjdCB5b3UgY3JlYXRlLiBUaGlzIHJlcHJlc2VudGF0aW9uCitpcyBlZmZpY2llbnQgdG8gY3JlYXRlIGF0b21pY2FsbHkgYW5kIHNhZmVseSwgYnV0Citub3Qgc28gY29udmVuaWVudCB0byB0cmFuc3BvcnQgb3ZlciB0aGUgbmV0d29yay4gU2luY2UgZ2l0IG9iamVjdHMgYXJlCitpbW11dGFibGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkLCB0aGVyZSBpcyBhIHdheSB0byBvcHRpbWl6ZSB0aGUKK3N0b3JhZ2UgYnkgInBhY2tpbmcgdGhlbSB0b2dldGhlciIuIFRoZSBjb21tYW5kCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVwYWNrCistLS0tLS0tLS0tLS0KKword2lsbCBkbyBpdCBmb3IgeW91LiBJZiB5b3UgZm9sbG93ZWQgdGhlIHR1dG9yaWFsIGV4YW1wbGVzLCB5b3UKK3dvdWxkIGhhdmUgYWNjdW11bGF0ZWQgYWJvdXQgMTcgb2JqZWN0cyBpbiBgLmdpdC9vYmplY3RzLz8/L2AKK2RpcmVjdG9yaWVzIGJ5IG5vdy4gJ2dpdCByZXBhY2snIHRlbGxzIHlvdSBob3cgbWFueSBvYmplY3RzIGl0CitwYWNrZWQsIGFuZCBzdG9yZXMgdGhlIHBhY2tlZCBmaWxlIGluIGAuZ2l0L29iamVjdHMvcGFja2AKK2RpcmVjdG9yeS4KKworW05PVEVdCitZb3Ugd2lsbCBzZWUgdHdvIGZpbGVzLCBgcGFjay0qLnBhY2tgIGFuZCBgcGFjay0qLmlkeGAsCitpbiBgLmdpdC9vYmplY3RzL3BhY2tgIGRpcmVjdG9yeS4gVGhleSBhcmUgY2xvc2VseSByZWxhdGVkIHRvCitlYWNoIG90aGVyLCBhbmQgaWYgeW91IGV2ZXIgY29weSB0aGVtIGJ5IGhhbmQgdG8gYSBkaWZmZXJlbnQKK3JlcG9zaXRvcnkgZm9yIHdoYXRldmVyIHJlYXNvbiwgeW91IHNob3VsZCBtYWtlIHN1cmUgeW91IGNvcHkKK3RoZW0gdG9nZXRoZXIuIFRoZSBmb3JtZXIgaG9sZHMgYWxsIHRoZSBkYXRhIGZyb20gdGhlIG9iamVjdHMKK2luIHRoZSBwYWNrLCBhbmQgdGhlIGxhdHRlciBob2xkcyB0aGUgaW5kZXggZm9yIHJhbmRvbQorYWNjZXNzLgorCitJZiB5b3UgYXJlIHBhcmFub2lkLCBydW5uaW5nICdnaXQgdmVyaWZ5LXBhY2snIGNvbW1hbmQgd291bGQKK2RldGVjdCBpZiB5b3UgaGF2ZSBhIGNvcnJ1cHQgcGFjaywgYnV0IGRvIG5vdCB3b3JyeSB0b28gbXVjaC4KK091ciBwcm9ncmFtcyBhcmUgYWx3YXlzIHBlcmZlY3QgOy0pLgorCitPbmNlIHlvdSBoYXZlIHBhY2tlZCBvYmplY3RzLCB5b3UgZG8gbm90IG5lZWQgdG8gbGVhdmUgdGhlCit1bnBhY2tlZCBvYmplY3RzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGUgcGFjayBmaWxlIGFueW1vcmUuCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHJ1bmUtcGFja2VkCistLS0tLS0tLS0tLS0KKword291bGQgcmVtb3ZlIHRoZW0gZm9yIHlvdS4KKworWW91IGNhbiB0cnkgcnVubmluZyBgZmluZCAuZ2l0L29iamVjdHMgLXR5cGUgZmAgYmVmb3JlIGFuZCBhZnRlcgoreW91IHJ1biBgZ2l0IHBydW5lLXBhY2tlZGAgaWYgeW91IGFyZSBjdXJpb3VzLiAgQWxzbyBgZ2l0Citjb3VudC1vYmplY3RzYCB3b3VsZCB0ZWxsIHlvdSBob3cgbWFueSB1bnBhY2tlZCBvYmplY3RzIGFyZSBpbgoreW91ciByZXBvc2l0b3J5IGFuZCBob3cgbXVjaCBzcGFjZSB0aGV5IGFyZSBjb25zdW1pbmcuCisKK1tOT1RFXQorYGdpdCBwdWxsYCBpcyBzbGlnaHRseSBjdW1iZXJzb21lIGZvciBIVFRQIHRyYW5zcG9ydCwgYXMgYQorcGFja2VkIHJlcG9zaXRvcnkgbWF5IGNvbnRhaW4gcmVsYXRpdmVseSBmZXcgb2JqZWN0cyBpbiBhCityZWxhdGl2ZWx5IGxhcmdlIHBhY2suIElmIHlvdSBleHBlY3QgbWFueSBIVFRQIHB1bGxzIGZyb20geW91cgorcHVibGljIHJlcG9zaXRvcnkgeW91IG1pZ2h0IHdhbnQgdG8gcmVwYWNrICYgcHJ1bmUgb2Z0ZW4sIG9yCituZXZlci4KKworSWYgeW91IHJ1biBgZ2l0IHJlcGFja2AgYWdhaW4gYXQgdGhpcyBwb2ludCwgaXQgd2lsbCBzYXkKKyJOb3RoaW5nIG5ldyB0byBwYWNrLiIuIE9uY2UgeW91IGNvbnRpbnVlIHlvdXIgZGV2ZWxvcG1lbnQgYW5kCithY2N1bXVsYXRlIHRoZSBjaGFuZ2VzLCBydW5uaW5nIGBnaXQgcmVwYWNrYCBhZ2FpbiB3aWxsIGNyZWF0ZSBhCituZXcgcGFjaywgdGhhdCBjb250YWlucyBvYmplY3RzIGNyZWF0ZWQgc2luY2UgeW91IHBhY2tlZCB5b3VyCityZXBvc2l0b3J5IHRoZSBsYXN0IHRpbWUuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSBwYWNrIHlvdXIgcHJvamVjdAorc29vbiBhZnRlciB0aGUgaW5pdGlhbCBpbXBvcnQgKHVubGVzcyB5b3UgYXJlIHN0YXJ0aW5nIHlvdXIKK3Byb2plY3QgZnJvbSBzY3JhdGNoKSwgYW5kIHRoZW4gcnVuIGBnaXQgcmVwYWNrYCBldmVyeSBvbmNlIGluIGEKK3doaWxlLCBkZXBlbmRpbmcgb24gaG93IGFjdGl2ZSB5b3VyIHByb2plY3QgaXMuCisKK1doZW4gYSByZXBvc2l0b3J5IGlzIHN5bmNocm9uaXplZCB2aWEgYGdpdCBwdXNoYCBhbmQgYGdpdCBwdWxsYAorb2JqZWN0cyBwYWNrZWQgaW4gdGhlIHNvdXJjZSByZXBvc2l0b3J5IGFyZSB1c3VhbGx5IHN0b3JlZAordW5wYWNrZWQgaW4gdGhlIGRlc3RpbmF0aW9uLCB1bmxlc3MgcnN5bmMgdHJhbnNwb3J0IGlzIHVzZWQuCitXaGlsZSB0aGlzIGFsbG93cyB5b3UgdG8gdXNlIGRpZmZlcmVudCBwYWNraW5nIHN0cmF0ZWdpZXMgb24KK2JvdGggZW5kcywgaXQgYWxzbyBtZWFucyB5b3UgbWF5IG5lZWQgdG8gcmVwYWNrIGJvdGgKK3JlcG9zaXRvcmllcyBldmVyeSBvbmNlIGluIGEgd2hpbGUuCisKKworV29ya2luZyB3aXRoIE90aGVycworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbHRob3VnaCBnaXQgaXMgYSB0cnVseSBkaXN0cmlidXRlZCBzeXN0ZW0sIGl0IGlzIG9mdGVuCitjb252ZW5pZW50IHRvIG9yZ2FuaXplIHlvdXIgcHJvamVjdCB3aXRoIGFuIGluZm9ybWFsIGhpZXJhcmNoeQorb2YgZGV2ZWxvcGVycy4gTGludXgga2VybmVsIGRldmVsb3BtZW50IGlzIHJ1biB0aGlzIHdheS4gVGhlcmUKK2lzIGEgbmljZSBpbGx1c3RyYXRpb24gKHBhZ2UgMTcsICJNZXJnZXMgdG8gTWFpbmxpbmUiKSBpbgorbGluazpodHRwOi8vd3d3Lnhlbm90aW1lLm5ldC9saW51eC9tZW50b3IvbGludXgtbWVudG9yaW5nLTIwMDYucGRmW1JhbmR5IER1bmxhcCdzIHByZXNlbnRhdGlvbl0uCisKK0l0IHNob3VsZCBiZSBzdHJlc3NlZCB0aGF0IHRoaXMgaGllcmFyY2h5IGlzIHB1cmVseSAqaW5mb3JtYWwqLgorVGhlcmUgaXMgbm90aGluZyBmdW5kYW1lbnRhbCBpbiBnaXQgdGhhdCBlbmZvcmNlcyB0aGUgImNoYWluIG9mCitwYXRjaCBmbG93IiB0aGlzIGhpZXJhcmNoeSBpbXBsaWVzLiBZb3UgZG8gbm90IGhhdmUgdG8gcHVsbAorZnJvbSBvbmx5IG9uZSByZW1vdGUgcmVwb3NpdG9yeS4KKworQSByZWNvbW1lbmRlZCB3b3JrZmxvdyBmb3IgYSAicHJvamVjdCBsZWFkIiBnb2VzIGxpa2UgdGhpczoKKworMS4gUHJlcGFyZSB5b3VyIHByaW1hcnkgcmVwb3NpdG9yeSBvbiB5b3VyIGxvY2FsIG1hY2hpbmUuIFlvdXIKKyAgIHdvcmsgaXMgZG9uZSB0aGVyZS4KKworMi4gUHJlcGFyZSBhIHB1YmxpYyByZXBvc2l0b3J5IGFjY2Vzc2libGUgdG8gb3RoZXJzLgorKworSWYgb3RoZXIgcGVvcGxlIGFyZSBwdWxsaW5nIGZyb20geW91ciByZXBvc2l0b3J5IG92ZXIgZHVtYgordHJhbnNwb3J0IHByb3RvY29scyAoSFRUUCksIHlvdSBuZWVkIHRvIGtlZXAgdGhpcyByZXBvc2l0b3J5CisnZHVtYiB0cmFuc3BvcnQgZnJpZW5kbHknLiAgQWZ0ZXIgYGdpdCBpbml0YCwKK2AkR0lUX0RJUi9ob29rcy9wb3N0LXVwZGF0ZS5zYW1wbGVgIGNvcGllZCBmcm9tIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZXMKK3dvdWxkIGNvbnRhaW4gYSBjYWxsIHRvICdnaXQgdXBkYXRlLXNlcnZlci1pbmZvJworYnV0IHlvdSBuZWVkIHRvIG1hbnVhbGx5IGVuYWJsZSB0aGUgaG9vayB3aXRoCitgbXYgcG9zdC11cGRhdGUuc2FtcGxlIHBvc3QtdXBkYXRlYC4gIFRoaXMgbWFrZXMgc3VyZQorJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nIGtlZXBzIHRoZSBuZWNlc3NhcnkgZmlsZXMgdXAtdG8tZGF0ZS4KKworMy4gUHVzaCBpbnRvIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBmcm9tIHlvdXIgcHJpbWFyeQorICAgcmVwb3NpdG9yeS4KKworNC4gJ2dpdCByZXBhY2snIHRoZSBwdWJsaWMgcmVwb3NpdG9yeS4gVGhpcyBlc3RhYmxpc2hlcyBhIGJpZworICAgcGFjayB0aGF0IGNvbnRhaW5zIHRoZSBpbml0aWFsIHNldCBvZiBvYmplY3RzIGFzIHRoZQorICAgYmFzZWxpbmUsIGFuZCBwb3NzaWJseSAnZ2l0IHBydW5lJyBpZiB0aGUgdHJhbnNwb3J0CisgICB1c2VkIGZvciBwdWxsaW5nIGZyb20geW91ciByZXBvc2l0b3J5IHN1cHBvcnRzIHBhY2tlZAorICAgcmVwb3NpdG9yaWVzLgorCis1LiBLZWVwIHdvcmtpbmcgaW4geW91ciBwcmltYXJ5IHJlcG9zaXRvcnkuIFlvdXIgY2hhbmdlcworICAgaW5jbHVkZSBtb2RpZmljYXRpb25zIG9mIHlvdXIgb3duLCBwYXRjaGVzIHlvdSByZWNlaXZlIHZpYQorICAgZS1tYWlscywgYW5kIG1lcmdlcyByZXN1bHRpbmcgZnJvbSBwdWxsaW5nIHRoZSAicHVibGljIgorICAgcmVwb3NpdG9yaWVzIG9mIHlvdXIgInN1YnN5c3RlbSBtYWludGFpbmVycyIuCisrCitZb3UgY2FuIHJlcGFjayB0aGlzIHByaXZhdGUgcmVwb3NpdG9yeSB3aGVuZXZlciB5b3UgZmVlbCBsaWtlLgorCis2LiBQdXNoIHlvdXIgY2hhbmdlcyB0byB0aGUgcHVibGljIHJlcG9zaXRvcnksIGFuZCBhbm5vdW5jZSBpdAorICAgdG8gdGhlIHB1YmxpYy4KKworNy4gRXZlcnkgb25jZSBpbiBhIHdoaWxlLCAnZ2l0IHJlcGFjaycgdGhlIHB1YmxpYyByZXBvc2l0b3J5LgorICAgR28gYmFjayB0byBzdGVwIDUuIGFuZCBjb250aW51ZSB3b3JraW5nLgorCisKK0EgcmVjb21tZW5kZWQgd29yayBjeWNsZSBmb3IgYSAic3Vic3lzdGVtIG1haW50YWluZXIiIHdobyB3b3Jrcworb24gdGhhdCBwcm9qZWN0IGFuZCBoYXMgYW4gb3duICJwdWJsaWMgcmVwb3NpdG9yeSIgZ29lcyBsaWtlIHRoaXM6CisKKzEuIFByZXBhcmUgeW91ciB3b3JrIHJlcG9zaXRvcnksIGJ5ICdnaXQgY2xvbmUnIHRoZSBwdWJsaWMKKyAgIHJlcG9zaXRvcnkgb2YgdGhlICJwcm9qZWN0IGxlYWQiLiBUaGUgVVJMIHVzZWQgZm9yIHRoZQorICAgaW5pdGlhbCBjbG9uaW5nIGlzIHN0b3JlZCBpbiB0aGUgcmVtb3RlLm9yaWdpbi51cmwKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKzIuIFByZXBhcmUgYSBwdWJsaWMgcmVwb3NpdG9yeSBhY2Nlc3NpYmxlIHRvIG90aGVycywganVzdCBsaWtlCisgICB0aGUgInByb2plY3QgbGVhZCIgcGVyc29uIGRvZXMuCisKKzMuIENvcHkgb3ZlciB0aGUgcGFja2VkIGZpbGVzIGZyb20gInByb2plY3QgbGVhZCIgcHVibGljCisgICByZXBvc2l0b3J5IHRvIHlvdXIgcHVibGljIHJlcG9zaXRvcnksIHVubGVzcyB0aGUgInByb2plY3QKKyAgIGxlYWQiIHJlcG9zaXRvcnkgbGl2ZXMgb24gdGhlIHNhbWUgbWFjaGluZSBhcyB5b3Vycy4gIEluIHRoZQorICAgbGF0dGVyIGNhc2UsIHlvdSBjYW4gdXNlIGBvYmplY3RzL2luZm8vYWx0ZXJuYXRlc2AgZmlsZSB0bworICAgcG9pbnQgYXQgdGhlIHJlcG9zaXRvcnkgeW91IGFyZSBib3Jyb3dpbmcgZnJvbS4KKworNC4gUHVzaCBpbnRvIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBmcm9tIHlvdXIgcHJpbWFyeQorICAgcmVwb3NpdG9yeS4gUnVuICdnaXQgcmVwYWNrJywgYW5kIHBvc3NpYmx5ICdnaXQgcHJ1bmUnIGlmIHRoZQorICAgdHJhbnNwb3J0IHVzZWQgZm9yIHB1bGxpbmcgZnJvbSB5b3VyIHJlcG9zaXRvcnkgc3VwcG9ydHMKKyAgIHBhY2tlZCByZXBvc2l0b3JpZXMuCisKKzUuIEtlZXAgd29ya2luZyBpbiB5b3VyIHByaW1hcnkgcmVwb3NpdG9yeS4gWW91ciBjaGFuZ2VzCisgICBpbmNsdWRlIG1vZGlmaWNhdGlvbnMgb2YgeW91ciBvd24sIHBhdGNoZXMgeW91IHJlY2VpdmUgdmlhCisgICBlLW1haWxzLCBhbmQgbWVyZ2VzIHJlc3VsdGluZyBmcm9tIHB1bGxpbmcgdGhlICJwdWJsaWMiCisgICByZXBvc2l0b3JpZXMgb2YgeW91ciAicHJvamVjdCBsZWFkIiBhbmQgcG9zc2libHkgeW91cgorICAgInN1Yi1zdWJzeXN0ZW0gbWFpbnRhaW5lcnMiLgorKworWW91IGNhbiByZXBhY2sgdGhpcyBwcml2YXRlIHJlcG9zaXRvcnkgd2hlbmV2ZXIgeW91IGZlZWwKK2xpa2UuCisKKzYuIFB1c2ggeW91ciBjaGFuZ2VzIHRvIHlvdXIgcHVibGljIHJlcG9zaXRvcnksIGFuZCBhc2sgeW91cgorICAgInByb2plY3QgbGVhZCIgYW5kIHBvc3NpYmx5IHlvdXIgInN1Yi1zdWJzeXN0ZW0KKyAgIG1haW50YWluZXJzIiB0byBwdWxsIGZyb20gaXQuCisKKzcuIEV2ZXJ5IG9uY2UgaW4gYSB3aGlsZSwgJ2dpdCByZXBhY2snIHRoZSBwdWJsaWMgcmVwb3NpdG9yeS4KKyAgIEdvIGJhY2sgdG8gc3RlcCA1LiBhbmQgY29udGludWUgd29ya2luZy4KKworCitBIHJlY29tbWVuZGVkIHdvcmsgY3ljbGUgZm9yIGFuICJpbmRpdmlkdWFsIGRldmVsb3BlciIgd2hvIGRvZXMKK25vdCBoYXZlIGEgInB1YmxpYyIgcmVwb3NpdG9yeSBpcyBzb21ld2hhdCBkaWZmZXJlbnQuIEl0IGdvZXMKK2xpa2UgdGhpczoKKworMS4gUHJlcGFyZSB5b3VyIHdvcmsgcmVwb3NpdG9yeSwgYnkgJ2dpdCBjbG9uZScgdGhlIHB1YmxpYworICAgcmVwb3NpdG9yeSBvZiB0aGUgInByb2plY3QgbGVhZCIgKG9yIGEgInN1YnN5c3RlbQorICAgbWFpbnRhaW5lciIsIGlmIHlvdSB3b3JrIG9uIGEgc3Vic3lzdGVtKS4gVGhlIFVSTCB1c2VkIGZvcgorICAgdGhlIGluaXRpYWwgY2xvbmluZyBpcyBzdG9yZWQgaW4gdGhlIHJlbW90ZS5vcmlnaW4udXJsCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisyLiBEbyB5b3VyIHdvcmsgaW4geW91ciByZXBvc2l0b3J5IG9uICdtYXN0ZXInIGJyYW5jaC4KKworMy4gUnVuIGBnaXQgZmV0Y2ggb3JpZ2luYCBmcm9tIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBvZiB5b3VyCisgICB1cHN0cmVhbSBldmVyeSBvbmNlIGluIGEgd2hpbGUuIFRoaXMgZG9lcyBvbmx5IHRoZSBmaXJzdAorICAgaGFsZiBvZiBgZ2l0IHB1bGxgIGJ1dCBkb2VzIG5vdCBtZXJnZS4gVGhlIGhlYWQgb2YgdGhlCisgICBwdWJsaWMgcmVwb3NpdG9yeSBpcyBzdG9yZWQgaW4gYC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXJgLgorCis0LiBVc2UgYGdpdCBjaGVycnkgb3JpZ2luYCB0byBzZWUgd2hpY2ggb25lcyBvZiB5b3VyIHBhdGNoZXMKKyAgIHdlcmUgYWNjZXB0ZWQsIGFuZC9vciB1c2UgYGdpdCByZWJhc2Ugb3JpZ2luYCB0byBwb3J0IHlvdXIKKyAgIHVubWVyZ2VkIGNoYW5nZXMgZm9yd2FyZCB0byB0aGUgdXBkYXRlZCB1cHN0cmVhbS4KKworNS4gVXNlIGBnaXQgZm9ybWF0LXBhdGNoIG9yaWdpbmAgdG8gcHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwKKyAgIHN1Ym1pc3Npb24gdG8geW91ciB1cHN0cmVhbSBhbmQgc2VuZCBpdCBvdXQuIEdvIGJhY2sgdG8KKyAgIHN0ZXAgMi4gYW5kIGNvbnRpbnVlLgorCisKK1dvcmtpbmcgd2l0aCBPdGhlcnMsIFNoYXJlZCBSZXBvc2l0b3J5IFN0eWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgYXJlIGNvbWluZyBmcm9tIENWUyBiYWNrZ3JvdW5kLCB0aGUgc3R5bGUgb2YgY29vcGVyYXRpb24KK3N1Z2dlc3RlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBtYXkgYmUgbmV3IHRvIHlvdS4gWW91IGRvIG5vdAoraGF2ZSB0byB3b3JyeS4gZ2l0IHN1cHBvcnRzICJzaGFyZWQgcHVibGljIHJlcG9zaXRvcnkiIHN0eWxlIG9mCitjb29wZXJhdGlvbiB5b3UgYXJlIHByb2JhYmx5IG1vcmUgZmFtaWxpYXIgd2l0aCBhcyB3ZWxsLgorCitTZWUgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddIGZvciB0aGUgZGV0YWlscy4KKworQnVuZGxpbmcgeW91ciB3b3JrIHRvZ2V0aGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgbGlrZWx5IHRoYXQgeW91IHdpbGwgYmUgd29ya2luZyBvbiBtb3JlIHRoYW4gb25lIHRoaW5nIGF0CithIHRpbWUuICBJdCBpcyBlYXN5IHRvIG1hbmFnZSB0aG9zZSBtb3JlLW9yLWxlc3MgaW5kZXBlbmRlbnQgdGFza3MKK3VzaW5nIGJyYW5jaGVzIHdpdGggZ2l0LgorCitXZSBoYXZlIGFscmVhZHkgc2VlbiBob3cgYnJhbmNoZXMgd29yayBwcmV2aW91c2x5LAord2l0aCAiZnVuIGFuZCB3b3JrIiBleGFtcGxlIHVzaW5nIHR3byBicmFuY2hlcy4gIFRoZSBpZGVhIGlzIHRoZQorc2FtZSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIHR3byBicmFuY2hlcy4gIExldCdzIHNheSB5b3Ugc3RhcnRlZAorb3V0IGZyb20gIm1hc3RlciIgaGVhZCwgYW5kIGhhdmUgc29tZSBuZXcgY29kZSBpbiB0aGUgIm1hc3RlciIKK2JyYW5jaCwgYW5kIHR3byBpbmRlcGVuZGVudCBmaXhlcyBpbiB0aGUgImNvbW1pdC1maXgiIGFuZAorImRpZmYtZml4IiBicmFuY2hlczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaAorISBbY29tbWl0LWZpeF0gRml4IGNvbW1pdCBtZXNzYWdlIG5vcm1hbGl6YXRpb24uCisgISBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICAqIFttYXN0ZXJdIFJlbGVhc2UgY2FuZGlkYXRlICMxCistLS0KKyArICBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICsgIFtkaWZmLWZpeH4xXSBCZXR0ZXIgY29tbW9uIHN1YnN0cmluZyBhbGdvcml0aG0uCisrICAgW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICAqIFttYXN0ZXJdIFJlbGVhc2UgY2FuZGlkYXRlICMxCisrKyogW2RpZmYtZml4fjJdIFByZXR0eS1wcmludCBtZXNzYWdlcy4KKy0tLS0tLS0tLS0tLQorCitCb3RoIGZpeGVzIGFyZSB0ZXN0ZWQgd2VsbCwgYW5kIGF0IHRoaXMgcG9pbnQsIHlvdSB3YW50IHRvIG1lcmdlCitpbiBib3RoIG9mIHRoZW0uICBZb3UgY291bGQgbWVyZ2UgaW4gJ2RpZmYtZml4JyBmaXJzdCBhbmQgdGhlbgorJ2NvbW1pdC1maXgnIG5leHQsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtbSAiTWVyZ2UgZml4IGluIGRpZmYtZml4IiBkaWZmLWZpeAorJCBnaXQgbWVyZ2UgLW0gIk1lcmdlIGZpeCBpbiBjb21taXQtZml4IiBjb21taXQtZml4CistLS0tLS0tLS0tLS0KKworV2hpY2ggd291bGQgcmVzdWx0IGluOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoCishIFtjb21taXQtZml4XSBGaXggY29tbWl0IG1lc3NhZ2Ugbm9ybWFsaXphdGlvbi4KKyAhIFtkaWZmLWZpeF0gRml4IHJlbmFtZSBkZXRlY3Rpb24uCisgICogW21hc3Rlcl0gTWVyZ2UgZml4IGluIGNvbW1pdC1maXgKKy0tLQorICAtIFttYXN0ZXJdIE1lcmdlIGZpeCBpbiBjb21taXQtZml4CisrICogW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICAtIFttYXN0ZXJ+MV0gTWVyZ2UgZml4IGluIGRpZmYtZml4CisgKyogW2RpZmYtZml4XSBGaXggcmVuYW1lIGRldGVjdGlvbi4KKyArKiBbZGlmZi1maXh+MV0gQmV0dGVyIGNvbW1vbiBzdWJzdHJpbmcgYWxnb3JpdGhtLgorICAqIFttYXN0ZXJ+Ml0gUmVsZWFzZSBjYW5kaWRhdGUgIzEKKysrKiBbbWFzdGVyfjNdIFByZXR0eS1wcmludCBtZXNzYWdlcy4KKy0tLS0tLS0tLS0tLQorCitIb3dldmVyLCB0aGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiB0byBtZXJnZSBpbiBvbmUgYnJhbmNoCitmaXJzdCBhbmQgdGhlIG90aGVyIG5leHQsIHdoZW4gd2hhdCB5b3UgaGF2ZSBhcmUgYSBzZXQgb2YgdHJ1bHkKK2luZGVwZW5kZW50IGNoYW5nZXMgKGlmIHRoZSBvcmRlciBtYXR0ZXJlZCwgdGhlbiB0aGV5IGFyZSBub3QKK2luZGVwZW5kZW50IGJ5IGRlZmluaXRpb24pLiAgWW91IGNvdWxkIGluc3RlYWQgbWVyZ2UgdGhvc2UgdHdvCiticmFuY2hlcyBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCBhdCBvbmNlLiAgRmlyc3QgbGV0J3MgdW5kbyB3aGF0Cit3ZSBqdXN0IGRpZCBhbmQgc3RhcnQgb3Zlci4gIFdlIHdvdWxkIHdhbnQgdG8gZ2V0IHRoZSBtYXN0ZXIKK2JyYW5jaCBiZWZvcmUgdGhlc2UgdHdvIG1lcmdlcyBieSByZXNldHRpbmcgaXQgdG8gJ21hc3Rlcn4yJzoKKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXNldCAtLWhhcmQgbWFzdGVyfjIKKy0tLS0tLS0tLS0tLQorCitZb3UgY2FuIG1ha2Ugc3VyZSBgZ2l0IHNob3ctYnJhbmNoYCBtYXRjaGVzIHRoZSBzdGF0ZSBiZWZvcmUKK3Rob3NlIHR3byAnZ2l0IG1lcmdlJyB5b3UganVzdCBkaWQuICBUaGVuLCBpbnN0ZWFkIG9mIHJ1bm5pbmcKK3R3byAnZ2l0IG1lcmdlJyBjb21tYW5kcyBpbiBhIHJvdywgeW91IHdvdWxkIG1lcmdlIHRoZXNlIHR3bworYnJhbmNoIGhlYWRzICh0aGlzIGlzIGtub3duIGFzICdtYWtpbmcgYW4gT2N0b3B1cycpOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlIGNvbW1pdC1maXggZGlmZi1maXgKKyQgZ2l0IHNob3ctYnJhbmNoCishIFtjb21taXQtZml4XSBGaXggY29tbWl0IG1lc3NhZ2Ugbm9ybWFsaXphdGlvbi4KKyAhIFtkaWZmLWZpeF0gRml4IHJlbmFtZSBkZXRlY3Rpb24uCisgICogW21hc3Rlcl0gT2N0b3B1cyBtZXJnZSBvZiBicmFuY2hlcyAnZGlmZi1maXgnIGFuZCAnY29tbWl0LWZpeCcKKy0tLQorICAtIFttYXN0ZXJdIE9jdG9wdXMgbWVyZ2Ugb2YgYnJhbmNoZXMgJ2RpZmYtZml4JyBhbmQgJ2NvbW1pdC1maXgnCisrICogW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICsqIFtkaWZmLWZpeF0gRml4IHJlbmFtZSBkZXRlY3Rpb24uCisgKyogW2RpZmYtZml4fjFdIEJldHRlciBjb21tb24gc3Vic3RyaW5nIGFsZ29yaXRobS4KKyAgKiBbbWFzdGVyfjFdIFJlbGVhc2UgY2FuZGlkYXRlICMxCisrKyogW21hc3Rlcn4yXSBQcmV0dHktcHJpbnQgbWVzc2FnZXMuCistLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IHlvdSBzaG91bGQgbm90IGRvIE9jdG9wdXMgYmVjYXVzZSB5b3UgY2FuLiAgQW4gb2N0b3B1cworaXMgYSB2YWxpZCB0aGluZyB0byBkbyBhbmQgb2Z0ZW4gbWFrZXMgaXQgZWFzaWVyIHRvIHZpZXcgdGhlCitjb21taXQgaGlzdG9yeSBpZiB5b3UgYXJlIG1lcmdpbmcgbW9yZSB0aGFuIHR3byBpbmRlcGVuZGVudAorY2hhbmdlcyBhdCB0aGUgc2FtZSB0aW1lLiAgSG93ZXZlciwgaWYgeW91IGhhdmUgbWVyZ2UgY29uZmxpY3RzCit3aXRoIGFueSBvZiB0aGUgYnJhbmNoZXMgeW91IGFyZSBtZXJnaW5nIGluIGFuZCBuZWVkIHRvIGhhbmQKK3Jlc29sdmUsIHRoYXQgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBkZXZlbG9wbWVudCBoYXBwZW5lZCBpbgordGhvc2UgYnJhbmNoZXMgd2VyZSBub3QgaW5kZXBlbmRlbnQgYWZ0ZXIgYWxsLCBhbmQgeW91IHNob3VsZAorbWVyZ2UgdHdvIGF0IGEgdGltZSwgZG9jdW1lbnRpbmcgaG93IHlvdSByZXNvbHZlZCB0aGUgY29uZmxpY3RzLAorYW5kIHRoZSByZWFzb24gd2h5IHlvdSBwcmVmZXJyZWQgY2hhbmdlcyBtYWRlIGluIG9uZSBzaWRlIG92ZXIKK3RoZSBvdGhlci4gIE90aGVyd2lzZSBpdCB3b3VsZCBtYWtlIHRoZSBwcm9qZWN0IGhpc3RvcnkgaGFyZGVyCit0byBmb2xsb3csIG5vdCBlYXNpZXIuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSwKK2xpbmtnaXQ6Z2l0LWhlbHBbMV0sCitsaW5rOmV2ZXJ5ZGF5Lmh0bWxbRXZlcnlkYXkgZ2l0XSwKK2xpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y3JlZGVudGlhbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRjcmVkZW50aWFscy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmZmZjMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0Y3JlZGVudGlhbHMudHh0CkBAIC0wLDAgKzEsMTgzIEBACitnaXRjcmVkZW50aWFscyg3KQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0Y3JlZGVudGlhbHMgLSBwcm92aWRpbmcgdXNlcm5hbWVzIGFuZCBwYXNzd29yZHMgdG8gZ2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS51c2VybmFtZSBteXVzZXJuYW1lCitnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICIkaGVscGVyICRvcHRpb25zIgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgd2lsbCBzb21ldGltZXMgbmVlZCBjcmVkZW50aWFscyBmcm9tIHRoZSB1c2VyIGluIG9yZGVyIHRvIHBlcmZvcm0KK29wZXJhdGlvbnM7IGZvciBleGFtcGxlLCBpdCBtYXkgbmVlZCB0byBhc2sgZm9yIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkCitpbiBvcmRlciB0byBhY2Nlc3MgYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIEhUVFAuIFRoaXMgbWFudWFsIGRlc2NyaWJlcwordGhlIG1lY2hhbmlzbXMgZ2l0IHVzZXMgdG8gcmVxdWVzdCB0aGVzZSBjcmVkZW50aWFscywgYXMgd2VsbCBhcyBzb21lCitmZWF0dXJlcyB0byBhdm9pZCBpbnB1dHRpbmcgdGhlc2UgY3JlZGVudGlhbHMgcmVwZWF0ZWRseS4KKworUkVRVUVTVElORyBDUkVERU5USUFMUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRob3V0IGFueSBjcmVkZW50aWFsIGhlbHBlcnMgZGVmaW5lZCwgZ2l0IHdpbGwgdHJ5IHRoZSBmb2xsb3dpbmcKK3N0cmF0ZWdpZXMgdG8gYXNrIHRoZSB1c2VyIGZvciB1c2VybmFtZXMgYW5kIHBhc3N3b3JkczoKKworMS4gSWYgdGhlIGBHSVRfQVNLUEFTU2AgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCB0aGUgcHJvZ3JhbQorICAgc3BlY2lmaWVkIGJ5IHRoZSB2YXJpYWJsZSBpcyBpbnZva2VkLiBBIHN1aXRhYmxlIHByb21wdCBpcyBwcm92aWRlZAorICAgdG8gdGhlIHByb2dyYW0gb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIHRoZSB1c2VyJ3MgaW5wdXQgaXMgcmVhZAorICAgZnJvbSBpdHMgc3RhbmRhcmQgb3V0cHV0LgorCisyLiBPdGhlcndpc2UsIGlmIHRoZSBgY29yZS5hc2twYXNzYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHNldCwgaXRzCisgICB2YWx1ZSBpcyB1c2VkIGFzIGFib3ZlLgorCiszLiBPdGhlcndpc2UsIGlmIHRoZSBgU1NIX0FTS1BBU1NgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgaXRzCisgICB2YWx1ZSBpcyB1c2VkIGFzIGFib3ZlLgorCis0LiBPdGhlcndpc2UsIHRoZSB1c2VyIGlzIHByb21wdGVkIG9uIHRoZSB0ZXJtaW5hbC4KKworQVZPSURJTkcgUkVQRVRJVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBjYW4gYmUgY3VtYmVyc29tZSB0byBpbnB1dCB0aGUgc2FtZSBjcmVkZW50aWFscyBvdmVyIGFuZCBvdmVyLiAgR2l0Citwcm92aWRlcyB0d28gbWV0aG9kcyB0byByZWR1Y2UgdGhpcyBhbm5veWFuY2U6CisKKzEuIFN0YXRpYyBjb25maWd1cmF0aW9uIG9mIHVzZXJuYW1lcyBmb3IgYSBnaXZlbiBhdXRoZW50aWNhdGlvbiBjb250ZXh0LgorCisyLiBDcmVkZW50aWFsIGhlbHBlcnMgdG8gY2FjaGUgb3Igc3RvcmUgcGFzc3dvcmRzLCBvciB0byBpbnRlcmFjdCB3aXRoCisgICBhIHN5c3RlbSBwYXNzd29yZCB3YWxsZXQgb3Iga2V5Y2hhaW4uCisKK1RoZSBmaXJzdCBpcyBzaW1wbGUgYW5kIGFwcHJvcHJpYXRlIGlmIHlvdSBkbyBub3QgaGF2ZSBzZWN1cmUgc3RvcmFnZSBhdmFpbGFibGUKK2ZvciBhIHBhc3N3b3JkLiBJdCBpcyBnZW5lcmFsbHkgY29uZmlndXJlZCBieSBhZGRpbmcgdGhpcyB0byB5b3VyIGNvbmZpZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbY3JlZGVudGlhbCAiaHR0cHM6Ly9leGFtcGxlLmNvbSJdCisJdXNlcm5hbWUgPSBtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWRlbnRpYWwgaGVscGVycywgb24gdGhlIG90aGVyIGhhbmQsIGFyZSBleHRlcm5hbCBwcm9ncmFtcyBmcm9tIHdoaWNoIGdpdCBjYW4KK3JlcXVlc3QgYm90aCB1c2VybmFtZXMgYW5kIHBhc3N3b3JkczsgdGhleSB0eXBpY2FsbHkgaW50ZXJmYWNlIHdpdGggc2VjdXJlCitzdG9yYWdlIHByb3ZpZGVkIGJ5IHRoZSBPUyBvciBvdGhlciBwcm9ncmFtcy4KKworVG8gdXNlIGEgaGVscGVyLCB5b3UgbXVzdCBmaXJzdCBzZWxlY3Qgb25lIHRvIHVzZS4gR2l0IGN1cnJlbnRseQoraW5jbHVkZXMgdGhlIGZvbGxvd2luZyBoZWxwZXJzOgorCitjYWNoZTo6CisKKwlDYWNoZSBjcmVkZW50aWFscyBpbiBtZW1vcnkgZm9yIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUuIFNlZQorCWxpbmtnaXQ6Z2l0LWNyZWRlbnRpYWwtY2FjaGVbMV0gZm9yIGRldGFpbHMuCisKK3N0b3JlOjoKKworCVN0b3JlIGNyZWRlbnRpYWxzIGluZGVmaW5pdGVseSBvbiBkaXNrLiBTZWUKKwlsaW5rZ2l0OmdpdC1jcmVkZW50aWFsLXN0b3JlWzFdIGZvciBkZXRhaWxzLgorCitZb3UgbWF5IGFsc28gaGF2ZSB0aGlyZC1wYXJ0eSBoZWxwZXJzIGluc3RhbGxlZDsgc2VhcmNoIGZvcgorYGNyZWRlbnRpYWwtKmAgaW4gdGhlIG91dHB1dCBvZiBgZ2l0IGhlbHAgLWFgLCBhbmQgY29uc3VsdCB0aGUKK2RvY3VtZW50YXRpb24gb2YgaW5kaXZpZHVhbCBoZWxwZXJzLiAgT25jZSB5b3UgaGF2ZSBzZWxlY3RlZCBhIGhlbHBlciwKK3lvdSBjYW4gdGVsbCBnaXQgdG8gdXNlIGl0IGJ5IHB1dHRpbmcgaXRzIG5hbWUgaW50byB0aGUKK2NyZWRlbnRpYWwuaGVscGVyIHZhcmlhYmxlLgorCisxLiBGaW5kIGEgaGVscGVyLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgaGVscCAtYSB8IGdyZXAgY3JlZGVudGlhbC0KK2NyZWRlbnRpYWwtZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzIuIFJlYWQgaXRzIGRlc2NyaXB0aW9uLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgaGVscCBjcmVkZW50aWFsLWZvbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiszLiBUZWxsIGdpdCB0byB1c2UgaXQuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgY3JlZGVudGlhbC5oZWxwZXIgZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZXJlIGFyZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIGBjcmVkZW50aWFsLmhlbHBlcmAgY29uZmlndXJhdGlvbgordmFyaWFibGUsIGVhY2ggaGVscGVyIHdpbGwgYmUgdHJpZWQgaW4gdHVybiwgYW5kIG1heSBwcm92aWRlIGEgdXNlcm5hbWUsCitwYXNzd29yZCwgb3Igbm90aGluZy4gT25jZSBnaXQgaGFzIGFjcXVpcmVkIGJvdGggYSB1c2VybmFtZSBhbmQgYQorcGFzc3dvcmQsIG5vIG1vcmUgaGVscGVycyB3aWxsIGJlIHRyaWVkLgorCisKK0NSRURFTlRJQUwgQ09OVEVYVFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IGNvbnNpZGVycyBlYWNoIGNyZWRlbnRpYWwgdG8gaGF2ZSBhIGNvbnRleHQgZGVmaW5lZCBieSBhIFVSTC4gVGhpcyBjb250ZXh0CitpcyB1c2VkIHRvIGxvb2sgdXAgY29udGV4dC1zcGVjaWZpYyBjb25maWd1cmF0aW9uLCBhbmQgaXMgcGFzc2VkIHRvIGFueQoraGVscGVycywgd2hpY2ggbWF5IHVzZSBpdCBhcyBhbiBpbmRleCBpbnRvIHNlY3VyZSBzdG9yYWdlLgorCitGb3IgaW5zdGFuY2UsIGltYWdpbmUgd2UgYXJlIGFjY2Vzc2luZyBgaHR0cHM6Ly9leGFtcGxlLmNvbS9mb28uZ2l0YC4gV2hlbiBnaXQKK2xvb2tzIGludG8gYSBjb25maWcgZmlsZSB0byBzZWUgaWYgYSBzZWN0aW9uIG1hdGNoZXMgdGhpcyBjb250ZXh0LCBpdCB3aWxsCitjb25zaWRlciB0aGUgdHdvIGEgbWF0Y2ggaWYgdGhlIGNvbnRleHQgaXMgYSBtb3JlLXNwZWNpZmljIHN1YnNldCBvZiB0aGUKK3BhdHRlcm4gaW4gdGhlIGNvbmZpZyBmaWxlLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgdGhpcyBpbiB5b3VyIGNvbmZpZyBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2NyZWRlbnRpYWwgImh0dHBzOi8vZXhhbXBsZS5jb20iXQorCXVzZXJuYW1lID0gZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGVuIHdlIHdpbGwgbWF0Y2g6IGJvdGggcHJvdG9jb2xzIGFyZSB0aGUgc2FtZSwgYm90aCBob3N0cyBhcmUgdGhlIHNhbWUsIGFuZAordGhlICJwYXR0ZXJuIiBVUkwgZG9lcyBub3QgY2FyZSBhYm91dCB0aGUgcGF0aCBjb21wb25lbnQgYXQgYWxsLiBIb3dldmVyLCB0aGlzCitjb250ZXh0IHdvdWxkIG5vdCBtYXRjaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tjcmVkZW50aWFsICJodHRwczovL2tlcm5lbC5vcmciXQorCXVzZXJuYW1lID0gZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitiZWNhdXNlIHRoZSBob3N0bmFtZXMgZGlmZmVyLiBOb3Igd291bGQgaXQgbWF0Y2ggYGZvby5leGFtcGxlLmNvbWA7IGdpdAorY29tcGFyZXMgaG9zdG5hbWVzIGV4YWN0bHksIHdpdGhvdXQgY29uc2lkZXJpbmcgd2hldGhlciB0d28gaG9zdHMgYXJlIHBhcnQgb2YKK3RoZSBzYW1lIGRvbWFpbi4gTGlrZXdpc2UsIGEgY29uZmlnIGVudHJ5IGZvciBgaHR0cDovL2V4YW1wbGUuY29tYCB3b3VsZCBub3QKK21hdGNoOiBnaXQgY29tcGFyZXMgdGhlIHByb3RvY29scyBleGFjdGx5LgorCisKK0NPTkZJR1VSQVRJT04gT1BUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09wdGlvbnMgZm9yIGEgY3JlZGVudGlhbCBjb250ZXh0IGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciBpbgorYGNyZWRlbnRpYWwuKmAgKHdoaWNoIGFwcGxpZXMgdG8gYWxsIGNyZWRlbnRpYWxzKSwgb3IKK2BjcmVkZW50aWFsLjx1cmw+LipgLCB3aGVyZSA8dXJsPiBtYXRjaGVzIHRoZSBjb250ZXh0IGFzIGRlc2NyaWJlZAorYWJvdmUuCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIGVpdGhlciBsb2NhdGlvbjoKKworaGVscGVyOjoKKworCVRoZSBuYW1lIG9mIGFuIGV4dGVybmFsIGNyZWRlbnRpYWwgaGVscGVyLCBhbmQgYW55IGFzc29jaWF0ZWQgb3B0aW9ucy4KKwlJZiB0aGUgaGVscGVyIG5hbWUgaXMgbm90IGFuIGFic29sdXRlIHBhdGgsIHRoZW4gdGhlIHN0cmluZyBgZ2l0CisJY3JlZGVudGlhbC1gIGlzIHByZXBlbmRlZC4gVGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgZXhlY3V0ZWQgYnkgdGhlCisJc2hlbGwgKHNvLCBmb3IgZXhhbXBsZSwgc2V0dGluZyB0aGlzIHRvIGBmb28gLS1vcHRpb249YmFyYCB3aWxsIGV4ZWN1dGUKKwlgZ2l0IGNyZWRlbnRpYWwtZm9vIC0tb3B0aW9uPWJhcmAgdmlhIHRoZSBzaGVsbC4gU2VlIHRoZSBtYW51YWwgb2YKKwlzcGVjaWZpYyBoZWxwZXJzIGZvciBleGFtcGxlcyBvZiB0aGVpciB1c2UuCisKK3VzZXJuYW1lOjoKKworCUEgZGVmYXVsdCB1c2VybmFtZSwgaWYgb25lIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgVVJMLgorCit1c2VIdHRwUGF0aDo6CisKKwlCeSBkZWZhdWx0LCBnaXQgZG9lcyBub3QgY29uc2lkZXIgdGhlICJwYXRoIiBjb21wb25lbnQgb2YgYW4gaHR0cCBVUkwKKwl0byBiZSB3b3J0aCBtYXRjaGluZyB2aWEgZXh0ZXJuYWwgaGVscGVycy4gVGhpcyBtZWFucyB0aGF0IGEgY3JlZGVudGlhbAorCXN0b3JlZCBmb3IgYGh0dHBzOi8vZXhhbXBsZS5jb20vZm9vLmdpdGAgd2lsbCBhbHNvIGJlIHVzZWQgZm9yCisJYGh0dHBzOi8vZXhhbXBsZS5jb20vYmFyLmdpdGAuIElmIHlvdSBkbyB3YW50IHRvIGRpc3Rpbmd1aXNoIHRoZXNlCisJY2FzZXMsIHNldCB0aGlzIG9wdGlvbiB0byBgdHJ1ZWAuCisKKworQ1VTVE9NIEhFTFBFUlMKKy0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gd3JpdGUgeW91ciBvd24gY3VzdG9tIGhlbHBlcnMgdG8gaW50ZXJmYWNlIHdpdGggYW55IHN5c3RlbSBpbgord2hpY2ggeW91IGtlZXAgY3JlZGVudGlhbHMuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZ2l0J3MKK2xpbms6dGVjaG5pY2FsL2FwaS1jcmVkZW50aWFscy5odG1sW2NyZWRlbnRpYWxzIEFQSV0gZm9yIGRldGFpbHMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViMGNkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQKQEAgLTAsMCArMSwyMDIgQEAKK2dpdGN2cy1taWdyYXRpb24oNykKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0Y3ZzLW1pZ3JhdGlvbiAtIGdpdCBmb3IgQ1ZTIHVzZXJzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjdnNpbXBvcnQnICoKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0dpdCBkaWZmZXJzIGZyb20gQ1ZTIGluIHRoYXQgZXZlcnkgd29ya2luZyB0cmVlIGNvbnRhaW5zIGEgcmVwb3NpdG9yeSB3aXRoCithIGZ1bGwgY29weSBvZiB0aGUgcHJvamVjdCBoaXN0b3J5LCBhbmQgbm8gcmVwb3NpdG9yeSBpcyBpbmhlcmVudGx5IG1vcmUKK2ltcG9ydGFudCB0aGFuIGFueSBvdGhlci4gIEhvd2V2ZXIsIHlvdSBjYW4gZW11bGF0ZSB0aGUgQ1ZTIG1vZGVsIGJ5CitkZXNpZ25hdGluZyBhIHNpbmdsZSBzaGFyZWQgcmVwb3NpdG9yeSB3aGljaCBwZW9wbGUgY2FuIHN5bmNocm9uaXplIHdpdGg7Cit0aGlzIGRvY3VtZW50IGV4cGxhaW5zIGhvdyB0byBkbyB0aGF0LgorCitTb21lIGJhc2ljIGZhbWlsaWFyaXR5IHdpdGggZ2l0IGlzIHJlcXVpcmVkLiBIYXZpbmcgZ29uZSB0aHJvdWdoCitsaW5rZ2l0OmdpdHR1dG9yaWFsWzddIGFuZAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSBzaG91bGQgYmUgc3VmZmljaWVudC4KKworRGV2ZWxvcGluZyBhZ2FpbnN0IGEgc2hhcmVkIHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvc2UgYSBzaGFyZWQgcmVwb3NpdG9yeSBpcyBzZXQgdXAgaW4gL3B1Yi9yZXBvLmdpdCBvbiB0aGUgaG9zdAorZm9vLmNvbS4gIFRoZW4gYXMgYW4gaW5kaXZpZHVhbCBjb21taXR0ZXIgeW91IGNhbiBjbG9uZSB0aGUgc2hhcmVkCityZXBvc2l0b3J5IG92ZXIgc3NoIHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgZm9vLmNvbTovcHViL3JlcG8uZ2l0LyBteS1wcm9qZWN0CiskIGNkIG15LXByb2plY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgaGFjayBhd2F5LiAgVGhlIGVxdWl2YWxlbnQgb2YgJ2N2cyB1cGRhdGUnIGlzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCBvcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBtZXJnZXMgaW4gYW55IHdvcmsgdGhhdCBvdGhlcnMgbWlnaHQgaGF2ZSBkb25lIHNpbmNlIHRoZSBjbG9uZQorb3BlcmF0aW9uLiAgSWYgdGhlcmUgYXJlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUsIGNvbW1pdAordGhlbSBmaXJzdCBiZWZvcmUgcnVubmluZyBnaXQgcHVsbC4KKworW05PVEVdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlICdwdWxsJyBjb21tYW5kIGtub3dzIHdoZXJlIHRvIGdldCB1cGRhdGVzIGZyb20gYmVjYXVzZSBvZiBjZXJ0YWluCitjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IHdlcmUgc2V0IGJ5IHRoZSBmaXJzdCAnZ2l0IGNsb25lJworY29tbWFuZDsgc2VlIGBnaXQgY29uZmlnIC1sYCBhbmQgdGhlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBtYW4KK3BhZ2UgZm9yIGRldGFpbHMuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgY2FuIHVwZGF0ZSB0aGUgc2hhcmVkIHJlcG9zaXRvcnkgd2l0aCB5b3VyIGNoYW5nZXMgYnkgZmlyc3QgY29tbWl0dGluZworeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiB1c2luZyB0aGUgJ2dpdCBwdXNoJyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvICJwdXNoIiB0aG9zZSBjb21taXRzIHRvIHRoZSBzaGFyZWQgcmVwb3NpdG9yeS4gIElmIHNvbWVvbmUgZWxzZSBoYXMKK3VwZGF0ZWQgdGhlIHJlcG9zaXRvcnkgbW9yZSByZWNlbnRseSwgJ2dpdCBwdXNoJywgbGlrZSAnY3ZzIGNvbW1pdCcsIHdpbGwKK2NvbXBsYWluLCBpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHB1bGwgYW55IGNoYW5nZXMgYmVmb3JlIGF0dGVtcHRpbmcgdGhlCitwdXNoIGFnYWluLgorCitJbiB0aGUgJ2dpdCBwdXNoJyBjb21tYW5kIGFib3ZlIHdlIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBicmFuY2gKK3RvIHVwZGF0ZSAoYG1hc3RlcmApLiAgSWYgd2UgbGVhdmUgdGhhdCBvdXQsICdnaXQgcHVzaCcgdHJpZXMgdG8gdXBkYXRlCithbnkgYnJhbmNoZXMgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIGEgYnJhbmNoCitpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeS4gIFNvIHRoZSBsYXN0ICdwdXNoJyBjYW4gYmUgZG9uZSB3aXRoIGVpdGhlciBvZjoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIG9yaWdpbgorJCBnaXQgcHVzaCBmb28uY29tOi9wdWIvcHJvamVjdC5naXQvCistLS0tLS0tLS0tLS0KKworYXMgbG9uZyBhcyB0aGUgc2hhcmVkIHJlcG9zaXRvcnkgZG9lcyBub3QgaGF2ZSBhbnkgYnJhbmNoZXMKK290aGVyIHRoYW4gYG1hc3RlcmAuCisKK1NldHRpbmcgVXAgYSBTaGFyZWQgUmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIGFzc3VtZSB5b3UgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQgYSBnaXQgcmVwb3NpdG9yeSBmb3IgeW91ciBwcm9qZWN0LAorcG9zc2libHkgY3JlYXRlZCBmcm9tIHNjcmF0Y2ggb3IgZnJvbSBhIHRhcmJhbGwgKHNlZQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSksIG9yIGltcG9ydGVkIGZyb20gYW4gYWxyZWFkeSBleGlzdGluZyBDVlMKK3JlcG9zaXRvcnkgKHNlZSB0aGUgbmV4dCBzZWN0aW9uKS4KKworQXNzdW1lIHlvdXIgZXhpc3RpbmcgcmVwbyBpcyBhdCAvaG9tZS9hbGljZS9teXByb2plY3QuICBDcmVhdGUgYSBuZXcgImJhcmUiCityZXBvc2l0b3J5IChhIHJlcG9zaXRvcnkgd2l0aG91dCBhIHdvcmtpbmcgdHJlZSkgYW5kIGZldGNoIHlvdXIgcHJvamVjdCBpbnRvCitpdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG1rZGlyIC9wdWIvbXktcmVwby5naXQKKyQgY2QgL3B1Yi9teS1yZXBvLmdpdAorJCBnaXQgLS1iYXJlIGluaXQgLS1zaGFyZWQKKyQgZ2l0IC0tYmFyZSBmZXRjaCAvaG9tZS9hbGljZS9teXByb2plY3QgbWFzdGVyOm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05leHQsIGdpdmUgZXZlcnkgdGVhbSBtZW1iZXIgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhpcyByZXBvc2l0b3J5LiAgT25lCitlYXN5IHdheSB0byBkbyB0aGlzIGlzIHRvIGdpdmUgYWxsIHRoZSB0ZWFtIG1lbWJlcnMgc3NoIGFjY2VzcyB0byB0aGUKK21hY2hpbmUgd2hlcmUgdGhlIHJlcG9zaXRvcnkgaXMgaG9zdGVkLiAgSWYgeW91IGRvbid0IHdhbnQgdG8gZ2l2ZSB0aGVtIGEKK2Z1bGwgc2hlbGwgb24gdGhlIG1hY2hpbmUsIHRoZXJlIGlzIGEgcmVzdHJpY3RlZCBzaGVsbCB3aGljaCBvbmx5IGFsbG93cwordXNlcnMgdG8gZG8gZ2l0IHB1c2hlcyBhbmQgcHVsbHM7IHNlZSBsaW5rZ2l0OmdpdC1zaGVsbFsxXS4KKworUHV0IGFsbCB0aGUgY29tbWl0dGVycyBpbiB0aGUgc2FtZSBncm91cCwgYW5kIG1ha2UgdGhlIHJlcG9zaXRvcnkKK3dyaXRhYmxlIGJ5IHRoYXQgZ3JvdXA6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjaGdycCAtUiAkZ3JvdXAgL3B1Yi9teS1yZXBvLmdpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01ha2Ugc3VyZSBjb21taXR0ZXJzIGhhdmUgYSB1bWFzayBvZiBhdCBtb3N0IDAyNywgc28gdGhhdCB0aGUgZGlyZWN0b3JpZXMKK3RoZXkgY3JlYXRlIGFyZSB3cml0YWJsZSBhbmQgc2VhcmNoYWJsZSBieSBvdGhlciBncm91cCBtZW1iZXJzLgorCitJbXBvcnRpbmcgYSBDVlMgYXJjaGl2ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3QsIGluc3RhbGwgdmVyc2lvbiAyLjEgb3IgaGlnaGVyIG9mIGN2c3BzIGZyb20KK2xpbms6aHR0cDovL3d3dy5jb2JpdGUuY29tL2N2c3BzL1todHRwOi8vd3d3LmNvYml0ZS5jb20vY3ZzcHMvXSBhbmQgbWFrZQorc3VyZSBpdCBpcyBpbiB5b3VyIHBhdGguICBUaGVuIGNkIHRvIGEgY2hlY2tlZCBvdXQgQ1ZTIHdvcmtpbmcgZGlyZWN0b3J5CitvZiB0aGUgcHJvamVjdCB5b3UgYXJlIGludGVyZXN0ZWQgaW4gYW5kIHJ1biBsaW5rZ2l0OmdpdC1jdnNpbXBvcnRbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGN2c2ltcG9ydCAtQyA8ZGVzdGluYXRpb24+IDxtb2R1bGU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcHV0cyBhIGdpdCBhcmNoaXZlIG9mIHRoZSBuYW1lZCBDVlMgbW9kdWxlIGluIHRoZSBkaXJlY3RvcnkKKzxkZXN0aW5hdGlvbj4sIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBpZiBuZWNlc3NhcnkuCisKK1RoZSBpbXBvcnQgY2hlY2tzIG91dCBmcm9tIENWUyBldmVyeSByZXZpc2lvbiBvZiBldmVyeSBmaWxlLiAgUmVwb3J0ZWRseQorY3ZzaW1wb3J0IGNhbiBhdmVyYWdlIHNvbWUgdHdlbnR5IHJldmlzaW9ucyBwZXIgc2Vjb25kLCBzbyBmb3IgYQorbWVkaXVtLXNpemVkIHByb2plY3QgdGhpcyBzaG91bGQgbm90IHRha2UgbW9yZSB0aGFuIGEgY291cGxlIG9mIG1pbnV0ZXMuCitMYXJnZXIgcHJvamVjdHMgb3IgcmVtb3RlIHJlcG9zaXRvcmllcyBtYXkgdGFrZSBsb25nZXIuCisKK1RoZSBtYWluIHRydW5rIGlzIHN0b3JlZCBpbiB0aGUgZ2l0IGJyYW5jaCBuYW1lZCBgb3JpZ2luYCwgYW5kIGFkZGl0aW9uYWwKK0NWUyBicmFuY2hlcyBhcmUgc3RvcmVkIGluIGdpdCBicmFuY2hlcyB3aXRoIHRoZSBzYW1lIG5hbWVzLiAgVGhlIG1vc3QKK3JlY2VudCB2ZXJzaW9uIG9mIHRoZSBtYWluIHRydW5rIGlzIGFsc28gbGVmdCBjaGVja2VkIG91dCBvbiB0aGUgYG1hc3RlcmAKK2JyYW5jaCwgc28geW91IGNhbiBzdGFydCBhZGRpbmcgeW91ciBvd24gY2hhbmdlcyByaWdodCBhd2F5LgorCitUaGUgaW1wb3J0IGlzIGluY3JlbWVudGFsLCBzbyBpZiB5b3UgY2FsbCBpdCBhZ2FpbiBuZXh0IG1vbnRoIGl0IHdpbGwKK2ZldGNoIGFueSBDVlMgdXBkYXRlcyB0aGF0IGhhdmUgYmVlbiBtYWRlIGluIHRoZSBtZWFudGltZS4gIEZvciB0aGlzIHRvCit3b3JrLCB5b3UgbXVzdCBub3QgbW9kaWZ5IHRoZSBpbXBvcnRlZCBicmFuY2hlczsgaW5zdGVhZCwgY3JlYXRlIG5ldworYnJhbmNoZXMgZm9yIHlvdXIgb3duIGNoYW5nZXMsIGFuZCBtZXJnZSBpbiB0aGUgaW1wb3J0ZWQgYnJhbmNoZXMgYXMKK25lY2Vzc2FyeS4KKworSWYgeW91IHdhbnQgYSBzaGFyZWQgcmVwb3NpdG9yeSwgeW91IHdpbGwgbmVlZCB0byBtYWtlIGEgYmFyZSBjbG9uZQorb2YgdGhlIGltcG9ydGVkIGRpcmVjdG9yeSwgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGVuIHRyZWF0IHRoZSBpbXBvcnRlZAorZGlyZWN0b3J5IGFzIGFub3RoZXIgZGV2ZWxvcG1lbnQgY2xvbmUgZm9yIHB1cnBvc2VzIG9mIG1lcmdpbmcKK2luY3JlbWVudGFsIGltcG9ydHMuCisKK0FkdmFuY2VkIFNoYXJlZCBSZXBvc2l0b3J5IE1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBzY3JpcHRzIGNhbGxlZCAiaG9va3MiIHRvIGJlIHJ1biBhdCBjZXJ0YWluCitwb2ludHMuICBZb3UgY2FuIHVzZSB0aGVzZSwgZm9yIGV4YW1wbGUsIHRvIHNlbmQgYWxsIGNvbW1pdHMgdG8gdGhlIHNoYXJlZAorcmVwb3NpdG9yeSB0byBhIG1haWxpbmcgbGlzdC4gIFNlZSBsaW5rZ2l0OmdpdGhvb2tzWzVdLgorCitZb3UgY2FuIGVuZm9yY2UgZmluZXIgZ3JhaW5lZCBwZXJtaXNzaW9ucyB1c2luZyB1cGRhdGUgaG9va3MuICBTZWUKK2xpbms6aG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHRbQ29udHJvbGxpbmcgYWNjZXNzIHRvIGJyYW5jaGVzIHVzaW5nCit1cGRhdGUgaG9va3NdLgorCitQcm92aWRpbmcgQ1ZTIEFjY2VzcyB0byBhIGdpdCBSZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gcHJvdmlkZSB0cnVlIENWUyBhY2Nlc3MgdG8gYSBnaXQgcmVwb3NpdG9yeSwgc28KK3RoYXQgZGV2ZWxvcGVycyBjYW4gc3RpbGwgdXNlIENWUzsgc2VlIGxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXSBmb3IKK2RldGFpbHMuCisKK0FsdGVybmF0aXZlIERldmVsb3BtZW50IE1vZGVscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NWUyB1c2VycyBhcmUgYWNjdXN0b21lZCB0byBnaXZpbmcgYSBncm91cCBvZiBkZXZlbG9wZXJzIGNvbW1pdCBhY2Nlc3MgdG8KK2EgY29tbW9uIHJlcG9zaXRvcnkuICBBcyB3ZSd2ZSBzZWVuLCB0aGlzIGlzIGFsc28gcG9zc2libGUgd2l0aCBnaXQuCitIb3dldmVyLCB0aGUgZGlzdHJpYnV0ZWQgbmF0dXJlIG9mIGdpdCBhbGxvd3Mgb3RoZXIgZGV2ZWxvcG1lbnQgbW9kZWxzLAorYW5kIHlvdSBtYXkgd2FudCB0byBmaXJzdCBjb25zaWRlciB3aGV0aGVyIG9uZSBvZiB0aGVtIG1pZ2h0IGJlIGEgYmV0dGVyCitmaXQgZm9yIHlvdXIgcHJvamVjdC4KKworRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hvb3NlIGEgc2luZ2xlIHBlcnNvbiB0byBtYWludGFpbiB0aGUgcHJvamVjdCdzCitwcmltYXJ5IHB1YmxpYyByZXBvc2l0b3J5LiAgT3RoZXIgZGV2ZWxvcGVycyB0aGVuIGNsb25lIHRoaXMgcmVwb3NpdG9yeQorYW5kIGVhY2ggd29yayBpbiB0aGVpciBvd24gY2xvbmUuICBXaGVuIHRoZXkgaGF2ZSBhIHNlcmllcyBvZiBjaGFuZ2VzIHRoYXQKK3RoZXkncmUgaGFwcHkgd2l0aCwgdGhleSBhc2sgdGhlIG1haW50YWluZXIgdG8gcHVsbCBmcm9tIHRoZSBicmFuY2gKK2NvbnRhaW5pbmcgdGhlIGNoYW5nZXMuICBUaGUgbWFpbnRhaW5lciByZXZpZXdzIHRoZWlyIGNoYW5nZXMgYW5kIHB1bGxzCit0aGVtIGludG8gdGhlIHByaW1hcnkgcmVwb3NpdG9yeSwgd2hpY2ggb3RoZXIgZGV2ZWxvcGVycyBwdWxsIGZyb20gYXMKK25lY2Vzc2FyeSB0byBzdGF5IGNvb3JkaW5hdGVkLiAgVGhlIExpbnV4IGtlcm5lbCBhbmQgb3RoZXIgcHJvamVjdHMgdXNlCit2YXJpYW50cyBvZiB0aGlzIG1vZGVsLgorCitXaXRoIGEgc21hbGwgZ3JvdXAsIGRldmVsb3BlcnMgbWF5IGp1c3QgcHVsbCBjaGFuZ2VzIGZyb20gZWFjaCBvdGhlcidzCityZXBvc2l0b3JpZXMgd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBjZW50cmFsIG1haW50YWluZXIuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rOmV2ZXJ5ZGF5Lmh0bWxbRXZlcnlkYXkgR2l0XSwKK2xpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0ZGlmZmNvcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRkaWZmY29yZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmMTc4MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0ZGlmZmNvcmUudHh0CkBAIC0wLDAgKzEsMjgyIEBACitnaXRkaWZmY29yZSg3KQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0ZGlmZmNvcmUgLSBUd2Vha2luZyBkaWZmIG91dHB1dAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGlmZicgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhlIGRpZmYgY29tbWFuZHMgJ2dpdCBkaWZmLWluZGV4JywgJ2dpdCBkaWZmLWZpbGVzJywgYW5kICdnaXQgZGlmZi10cmVlJworY2FuIGJlIHRvbGQgdG8gbWFuaXB1bGF0ZSBkaWZmZXJlbmNlcyB0aGV5IGZpbmQgaW4KK3VuY29udmVudGlvbmFsIHdheXMgYmVmb3JlIHNob3dpbmcgJ2RpZmYnIG91dHB1dC4gIFRoZSBtYW5pcHVsYXRpb24KK2lzIGNvbGxlY3RpdmVseSBjYWxsZWQgImRpZmZjb3JlIHRyYW5zZm9ybWF0aW9uIi4gIFRoaXMgc2hvcnQgbm90ZQorZGVzY3JpYmVzIHdoYXQgdGhleSBhcmUgYW5kIGhvdyB0byB1c2UgdGhlbSB0byBwcm9kdWNlICdkaWZmJyBvdXRwdXQKK3RoYXQgaXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgdGhhbiB0aGUgY29udmVudGlvbmFsIGtpbmQuCisKKworVGhlIGNoYWluIG9mIG9wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgJ2dpdCBkaWZmLXthc3Rlcmlza30nIGZhbWlseSB3b3JrcyBieSBmaXJzdCBjb21wYXJpbmcgdHdvIHNldHMgb2YKK2ZpbGVzOgorCisgLSAnZ2l0IGRpZmYtaW5kZXgnIGNvbXBhcmVzIGNvbnRlbnRzIG9mIGEgInRyZWUiIG9iamVjdCBhbmQgdGhlCisgICB3b3JraW5nIGRpcmVjdG9yeSAod2hlbiAnXC0tY2FjaGVkJyBmbGFnIGlzIG5vdCB1c2VkKSBvciBhCisgICAidHJlZSIgb2JqZWN0IGFuZCB0aGUgaW5kZXggZmlsZSAod2hlbiAnXC0tY2FjaGVkJyBmbGFnIGlzCisgICB1c2VkKTsKKworIC0gJ2dpdCBkaWZmLWZpbGVzJyBjb21wYXJlcyBjb250ZW50cyBvZiB0aGUgaW5kZXggZmlsZSBhbmQgdGhlCisgICB3b3JraW5nIGRpcmVjdG9yeTsKKworIC0gJ2dpdCBkaWZmLXRyZWUnIGNvbXBhcmVzIGNvbnRlbnRzIG9mIHR3byAidHJlZSIgb2JqZWN0czsKKworSW4gYWxsIG9mIHRoZXNlIGNhc2VzLCB0aGUgY29tbWFuZHMgdGhlbXNlbHZlcyBmaXJzdCBvcHRpb25hbGx5IGxpbWl0Cit0aGUgdHdvIHNldHMgb2YgZmlsZXMgYnkgYW55IHBhdGhzcGVjcyBnaXZlbiBvbiB0aGVpciBjb21tYW5kLWxpbmVzLAorYW5kIGNvbXBhcmUgY29ycmVzcG9uZGluZyBwYXRocyBpbiB0aGUgdHdvIHJlc3VsdGluZyBzZXRzIG9mIGZpbGVzLgorCitUaGUgcGF0aHNwZWNzIGFyZSB1c2VkIHRvIGxpbWl0IHRoZSB3b3JsZCBkaWZmIG9wZXJhdGVzIGluLiAgVGhleSByZW1vdmUKK3RoZSBmaWxlcGFpcnMgb3V0c2lkZSB0aGUgc3BlY2lmaWVkIHNldHMgb2YgcGF0aG5hbWVzLiAgRS5nLiBJZiB0aGUKK2lucHV0IHNldCBvZiBmaWxlcGFpcnMgaW5jbHVkZWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAxMDA2NDQgYmNkMTIzNC4uLiAwMTIzNDU2Li4uIE0ganVua2ZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitidXQgdGhlIGNvbW1hbmQgaW52b2NhdGlvbiB3YXMgYGdpdCBkaWZmLWZpbGVzIG15ZmlsZWAsIHRoZW4gdGhlCitqdW5rZmlsZSBlbnRyeSB3b3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QgYmVjYXVzZSBvbmx5ICJteWZpbGUiCitpcyB1bmRlciBjb25zaWRlcmF0aW9uLgorCitUaGUgcmVzdWx0IG9mIGNvbXBhcmlzb24gaXMgcGFzc2VkIGZyb20gdGhlc2UgY29tbWFuZHMgdG8gd2hhdCBpcworaW50ZXJuYWxseSBjYWxsZWQgImRpZmZjb3JlIiwgaW4gYSBmb3JtYXQgc2ltaWxhciB0byB3aGF0IGlzIG91dHB1dAord2hlbiB0aGUgLXAgb3B0aW9uIGlzIG5vdCB1c2VkLiAgRS5nLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luLXBsYWNlIGVkaXQgIDoxMDA2NDQgMTAwNjQ0IGJjZDEyMzQuLi4gMDEyMzQ1Ni4uLiBNIGZpbGUwCitjcmVhdGUgICAgICAgICA6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDEyMzQ1NjcuLi4gQSBmaWxlNAorZGVsZXRlICAgICAgICAgOjEwMDY0NCAwMDAwMDAgMTIzNDU2Ny4uLiAwMDAwMDAwLi4uIEQgZmlsZTUKK3VubWVyZ2VkICAgICAgIDowMDAwMDAgMDAwMDAwIDAwMDAwMDAuLi4gMDAwMDAwMC4uLiBVIGZpbGU2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRpZmZjb3JlIG1lY2hhbmlzbSBpcyBmZWQgYSBsaXN0IG9mIHN1Y2ggY29tcGFyaXNvbiByZXN1bHRzCisoZWFjaCBvZiB3aGljaCBpcyBjYWxsZWQgImZpbGVwYWlyIiwgYWx0aG91Z2ggYXQgdGhpcyBwb2ludCBlYWNoCitvZiB0aGVtIHRhbGtzIGFib3V0IGEgc2luZ2xlIGZpbGUpLCBhbmQgdHJhbnNmb3JtcyBzdWNoIGEgbGlzdAoraW50byBhbm90aGVyIGxpc3QuICBUaGVyZSBhcmUgY3VycmVudGx5IDUgc3VjaCB0cmFuc2Zvcm1hdGlvbnM6CisKKy0gZGlmZmNvcmUtYnJlYWsKKy0gZGlmZmNvcmUtcmVuYW1lCistIGRpZmZjb3JlLW1lcmdlLWJyb2tlbgorLSBkaWZmY29yZS1waWNrYXhlCistIGRpZmZjb3JlLW9yZGVyCisKK1RoZXNlIGFyZSBhcHBsaWVkIGluIHNlcXVlbmNlLiAgVGhlIHNldCBvZiBmaWxlcGFpcnMgJ2dpdCBkaWZmLXthc3Rlcmlza30nCitjb21tYW5kcyBmaW5kIGFyZSB1c2VkIGFzIHRoZSBpbnB1dCB0byBkaWZmY29yZS1icmVhaywgYW5kCit0aGUgb3V0cHV0IGZyb20gZGlmZmNvcmUtYnJlYWsgaXMgdXNlZCBhcyB0aGUgaW5wdXQgdG8gdGhlCituZXh0IHRyYW5zZm9ybWF0aW9uLiAgVGhlIGZpbmFsIHJlc3VsdCBpcyB0aGVuIHBhc3NlZCB0byB0aGUKK291dHB1dCByb3V0aW5lIGFuZCBnZW5lcmF0ZXMgZWl0aGVyIGRpZmYtcmF3IGZvcm1hdCAoc2VlIE91dHB1dAorZm9ybWF0IHNlY3Rpb25zIG9mIHRoZSBtYW51YWwgZm9yICdnaXQgZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcykgb3IKK2RpZmYtcGF0Y2ggZm9ybWF0LgorCisKK2RpZmZjb3JlLWJyZWFrOiBGb3IgU3BsaXR0aW5nIFVwICJDb21wbGV0ZSBSZXdyaXRlcyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHNlY29uZCB0cmFuc2Zvcm1hdGlvbiBpbiB0aGUgY2hhaW4gaXMgZGlmZmNvcmUtYnJlYWssIGFuZCBpcworY29udHJvbGxlZCBieSB0aGUgLUIgb3B0aW9uIHRvIHRoZSAnZ2l0IGRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMuICBUaGlzIGlzCit1c2VkIHRvIGRldGVjdCBhIGZpbGVwYWlyIHRoYXQgcmVwcmVzZW50cyAiY29tcGxldGUgcmV3cml0ZSIgYW5kCiticmVhayBzdWNoIGZpbGVwYWlyIGludG8gdHdvIGZpbGVwYWlycyB0aGF0IHJlcHJlc2VudCBkZWxldGUgYW5kCitjcmVhdGUuICBFLmcuICBJZiB0aGUgaW5wdXQgY29udGFpbmVkIHRoaXMgZmlsZXBhaXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAxMDA2NDQgYmNkMTIzNC4uLiAwMTIzNDU2Li4uIE0gZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBmaWxlICJmaWxlMCIgaXMgY29tcGxldGVseSByZXdyaXR0ZW4sCitpdCBjaGFuZ2VzIGl0IHRvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzoxMDA2NDQgMDAwMDAwIGJjZDEyMzQuLi4gMDAwMDAwMC4uLiBEIGZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxMjM0NTYuLi4gQSBmaWxlMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciB0aGUgcHVycG9zZSBvZiBicmVha2luZyBhIGZpbGVwYWlyLCBkaWZmY29yZS1icmVhayBleGFtaW5lcwordGhlIGV4dGVudCBvZiBjaGFuZ2VzIGJldHdlZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyBiZWZvcmUKK2FuZCBhZnRlciBtb2RpZmljYXRpb24gKGkuZS4gdGhlIGNvbnRlbnRzIHRoYXQgaGF2ZSAiYmNkMTIzNC4uLiIKK2FuZCAiMDEyMzQ1Ni4uLiIgYXMgdGhlaXIgU0hBMSBjb250ZW50IElELCBpbiB0aGUgYWJvdmUKK2V4YW1wbGUpLiAgVGhlIGFtb3VudCBvZiBkZWxldGlvbiBvZiBvcmlnaW5hbCBjb250ZW50cyBhbmQKK2luc2VydGlvbiBvZiBuZXcgbWF0ZXJpYWwgYXJlIGFkZGVkIHRvZ2V0aGVyLCBhbmQgaWYgaXQgZXhjZWVkcwordGhlICJicmVhayBzY29yZSIsIHRoZSBmaWxlcGFpciBpcyBicm9rZW4gaW50byB0d28uICBUaGUgYnJlYWsKK3Njb3JlIGRlZmF1bHRzIHRvIDUwJSBvZiB0aGUgc2l6ZSBvZiB0aGUgc21hbGxlciBvZiB0aGUgb3JpZ2luYWwKK2FuZCB0aGUgcmVzdWx0IChpLmUuIGlmIHRoZSBlZGl0IHNocmlua3MgdGhlIGZpbGUsIHRoZSBzaXplIG9mCit0aGUgcmVzdWx0IGlzIHVzZWQ7IGlmIHRoZSBlZGl0IGxlbmd0aGVucyB0aGUgZmlsZSwgdGhlIHNpemUgb2YKK3RoZSBvcmlnaW5hbCBpcyB1c2VkKSwgYW5kIGNhbiBiZSBjdXN0b21pemVkIGJ5IGdpdmluZyBhIG51bWJlcgorYWZ0ZXIgIi1CIiBvcHRpb24gKGUuZy4gIi1CNzUiIHRvIHRlbGwgaXQgdG8gdXNlIDc1JSkuCisKKworZGlmZmNvcmUtcmVuYW1lOiBGb3IgRGV0ZWN0aW9uIFJlbmFtZXMgYW5kIENvcGllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWQgdG8gZGV0ZWN0IHJlbmFtZXMgYW5kIGNvcGllcywgYW5kIGlzCitjb250cm9sbGVkIGJ5IHRoZSAtTSBvcHRpb24gKHRvIGRldGVjdCByZW5hbWVzKSBhbmQgdGhlIC1DIG9wdGlvbgorKHRvIGRldGVjdCBjb3BpZXMgYXMgd2VsbCkgdG8gdGhlICdnaXQgZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcy4gIElmIHRoZQoraW5wdXQgY29udGFpbmVkIHRoZXNlIGZpbGVwYWlyczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDAwMDAwMCAwMTIzNDU2Li4uIDAwMDAwMDAuLi4gRCBmaWxlWAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAwMTIzNDU2Li4uIEEgZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBkZWxldGVkIGZpbGUgZmlsZVggaXMgc2ltaWxhciBlbm91Z2ggdG8KK3RoZSBjb250ZW50cyBvZiB0aGUgY3JlYXRlZCBmaWxlIGZpbGUwLCB0aGVuIHJlbmFtZSBkZXRlY3Rpb24KK21lcmdlcyB0aGVzZSBmaWxlcGFpcnMgYW5kIGNyZWF0ZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAxMDA2NDQgMDEyMzQ1Ni4uLiAwMTIzNDU2Li4uIFIxMDAgZmlsZVggZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHRoZSAiLUMiIG9wdGlvbiBpcyB1c2VkLCB0aGUgb3JpZ2luYWwgY29udGVudHMgb2YgbW9kaWZpZWQgZmlsZXMsCithbmQgZGVsZXRlZCBmaWxlcyAoYW5kIGFsc28gdW5tb2RpZmllZCBmaWxlcywgaWYgdGhlCisiXC0tZmluZC1jb3BpZXMtaGFyZGVyIiBvcHRpb24gaXMgdXNlZCkgYXJlIGNvbnNpZGVyZWQgYXMgY2FuZGlkYXRlcworb2YgdGhlIHNvdXJjZSBmaWxlcyBpbiByZW5hbWUvY29weSBvcGVyYXRpb24uICBJZiB0aGUgaW5wdXQgd2VyZSBsaWtlCit0aGVzZSBmaWxlcGFpcnMsIHRoYXQgdGFsayBhYm91dCBhIG1vZGlmaWVkIGZpbGUgZmlsZVkgYW5kIGEgbmV3bHkKK2NyZWF0ZWQgZmlsZSBmaWxlMDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDEyMzQ1NjcuLi4gTSBmaWxlWQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiBiY2QzNDU2Li4uIEEgZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGUgb3JpZ2luYWwgY29udGVudHMgb2YgZmlsZVkgYW5kIHRoZSByZXN1bHRpbmcgY29udGVudHMgb2YKK2ZpbGUwIGFyZSBjb21wYXJlZCwgYW5kIGlmIHRoZXkgYXJlIHNpbWlsYXIgZW5vdWdoLCB0aGV5IGFyZQorY2hhbmdlZCB0bzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDEyMzQ1NjcuLi4gTSBmaWxlWQorOjEwMDY0NCAxMDA2NDQgMDEyMzQ1Ni4uLiBiY2QzNDU2Li4uIEMxMDAgZmlsZVkgZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBib3RoIHJlbmFtZSBhbmQgY29weSBkZXRlY3Rpb24sIHRoZSBzYW1lICJleHRlbnQgb2YgY2hhbmdlcyIKK2FsZ29yaXRobSB1c2VkIGluIGRpZmZjb3JlLWJyZWFrIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHR3bworZmlsZXMgYXJlICJzaW1pbGFyIGVub3VnaCIsIGFuZCBjYW4gYmUgY3VzdG9taXplZCB0byB1c2UKK2Egc2ltaWxhcml0eSBzY29yZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCBvZiA1MCUgYnkgZ2l2aW5nIGEKK251bWJlciBhZnRlciB0aGUgIi1NIiBvciAiLUMiIG9wdGlvbiAoZS5nLiAiLU04IiB0byB0ZWxsIGl0IHRvIHVzZQorOC8xMCA9IDgwJSkuCisKK05vdGUuICBXaGVuIHRoZSAiLUMiIG9wdGlvbiBpcyB1c2VkIHdpdGggYC0tZmluZC1jb3BpZXMtaGFyZGVyYAorb3B0aW9uLCAnZ2l0IGRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMgZmVlZCB1bm1vZGlmaWVkIGZpbGVwYWlycyB0bworZGlmZmNvcmUgbWVjaGFuaXNtIGFzIHdlbGwgYXMgbW9kaWZpZWQgb25lcy4gIFRoaXMgbGV0cyB0aGUgY29weQorZGV0ZWN0b3IgY29uc2lkZXIgdW5tb2RpZmllZCBmaWxlcyBhcyBjb3B5IHNvdXJjZSBjYW5kaWRhdGVzIGF0Cit0aGUgZXhwZW5zZSBvZiBtYWtpbmcgaXQgc2xvd2VyLiAgV2l0aG91dCBgLS1maW5kLWNvcGllcy1oYXJkZXJgLAorJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzIGNhbiBkZXRlY3QgY29waWVzIG9ubHkgaWYgdGhlIGZpbGUgdGhhdCB3YXMKK2NvcGllZCBoYXBwZW5lZCB0byBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gdGhlIHNhbWUgY2hhbmdlc2V0LgorCisKK2RpZmZjb3JlLW1lcmdlLWJyb2tlbjogRm9yIFB1dHRpbmcgIkNvbXBsZXRlIFJld3JpdGVzIiBCYWNrIFRvZ2V0aGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWQgdG8gbWVyZ2UgZmlsZXBhaXJzIGJyb2tlbiBieQorZGlmZmNvcmUtYnJlYWssIGFuZCBub3QgdHJhbnNmb3JtZWQgaW50byByZW5hbWUvY29weSBieQorZGlmZmNvcmUtcmVuYW1lLCBiYWNrIGludG8gYSBzaW5nbGUgbW9kaWZpY2F0aW9uLiAgVGhpcyBhbHdheXMKK3J1bnMgd2hlbiBkaWZmY29yZS1icmVhayBpcyB1c2VkLgorCitGb3IgdGhlIHB1cnBvc2Ugb2YgbWVyZ2luZyBicm9rZW4gZmlsZXBhaXJzIGJhY2ssIGl0IHVzZXMgYQorZGlmZmVyZW50ICJleHRlbnQgb2YgY2hhbmdlcyIgY29tcHV0YXRpb24gZnJvbSB0aGUgb25lcyB1c2VkIGJ5CitkaWZmY29yZS1icmVhayBhbmQgZGlmZmNvcmUtcmVuYW1lLiAgSXQgY291bnRzIG9ubHkgdGhlIGRlbGV0aW9uCitmcm9tIHRoZSBvcmlnaW5hbCwgYW5kIGRvZXMgbm90IGNvdW50IGluc2VydGlvbi4gIElmIHlvdSByZW1vdmVkCitvbmx5IDEwIGxpbmVzIGZyb20gYSAxMDAtbGluZSBkb2N1bWVudCwgZXZlbiBpZiB5b3UgYWRkZWQgOTEwCituZXcgbGluZXMgdG8gbWFrZSBhIG5ldyAxMDAwLWxpbmUgZG9jdW1lbnQsIHlvdSBkaWQgbm90IGRvIGEKK2NvbXBsZXRlIHJld3JpdGUuICBkaWZmY29yZS1icmVhayBicmVha3Mgc3VjaCBhIGNhc2UgaW4gb3JkZXIgdG8KK2hlbHAgZGlmZmNvcmUtcmVuYW1lIHRvIGNvbnNpZGVyIHN1Y2ggZmlsZXBhaXJzIGFzIGNhbmRpZGF0ZSBvZgorcmVuYW1lL2NvcHkgZGV0ZWN0aW9uLCBidXQgaWYgZmlsZXBhaXJzIGJyb2tlbiB0aGF0IHdheSB3ZXJlIG5vdAorbWF0Y2hlZCB3aXRoIG90aGVyIGZpbGVwYWlycyB0byBjcmVhdGUgcmVuYW1lL2NvcHksIHRoZW4gdGhpcwordHJhbnNmb3JtYXRpb24gbWVyZ2VzIHRoZW0gYmFjayBpbnRvIHRoZSBvcmlnaW5hbAorIm1vZGlmaWNhdGlvbiIuCisKK1RoZSAiZXh0ZW50IG9mIGNoYW5nZXMiIHBhcmFtZXRlciBjYW4gYmUgdHdlYWtlZCBmcm9tIHRoZQorZGVmYXVsdCA4MCUgKHRoYXQgaXMsIHVubGVzcyBtb3JlIHRoYW4gODAlIG9mIHRoZSBvcmlnaW5hbAorbWF0ZXJpYWwgaXMgZGVsZXRlZCwgdGhlIGJyb2tlbiBwYWlycyBhcmUgbWVyZ2VkIGJhY2sgaW50byBhCitzaW5nbGUgbW9kaWZpY2F0aW9uKSBieSBnaXZpbmcgYSBzZWNvbmQgbnVtYmVyIHRvIC1CIG9wdGlvbiwKK2xpa2UgdGhlc2U6CisKKyogLUI1MC82MCAoZ2l2ZSA1MCUgImJyZWFrIHNjb3JlIiB0byBkaWZmY29yZS1icmVhaywgdXNlIDYwJQorICBmb3IgZGlmZmNvcmUtbWVyZ2UtYnJva2VuKS4KKworKiAtQi82MCAodGhlIHNhbWUgYXMgYWJvdmUsIHNpbmNlIGRpZmZjb3JlLWJyZWFrIGRlZmF1bHRzIHRvIDUwJSkuCisKK05vdGUgdGhhdCBlYXJsaWVyIGltcGxlbWVudGF0aW9uIGxlZnQgYSBicm9rZW4gcGFpciBhcyBhIHNlcGFyYXRlCitjcmVhdGlvbiBhbmQgZGVsZXRpb24gcGF0Y2hlcy4gIFRoaXMgd2FzIGFuIHVubmVjZXNzYXJ5IGhhY2sgYW5kCit0aGUgbGF0ZXN0IGltcGxlbWVudGF0aW9uIGFsd2F5cyBtZXJnZXMgYWxsIHRoZSBicm9rZW4gcGFpcnMKK2JhY2sgaW50byBtb2RpZmljYXRpb25zLCBidXQgdGhlIHJlc3VsdGluZyBwYXRjaCBvdXRwdXQgaXMKK2Zvcm1hdHRlZCBkaWZmZXJlbnRseSBmb3IgZWFzaWVyIHJldmlldyBpbiBjYXNlIG9mIHN1Y2gKK2EgY29tcGxldGUgcmV3cml0ZSBieSBzaG93aW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2Ygb2xkIHZlcnNpb24KK3ByZWZpeGVkIHdpdGggJy0nLCBmb2xsb3dlZCBieSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIG5ldwordmVyc2lvbiBwcmVmaXhlZCB3aXRoICcrJy4KKworCitkaWZmY29yZS1waWNrYXhlOiBGb3IgRGV0ZWN0aW5nIEFkZGl0aW9uL0RlbGV0aW9uIG9mIFNwZWNpZmllZCBTdHJpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWQgdG8gZmluZCBmaWxlcGFpcnMgdGhhdCByZXByZXNlbnQKK2NoYW5nZXMgdGhhdCB0b3VjaCBhIHNwZWNpZmllZCBzdHJpbmcsIGFuZCBpcyBjb250cm9sbGVkIGJ5IHRoZQorLVMgb3B0aW9uIGFuZCB0aGUgYC0tcGlja2F4ZS1hbGxgIG9wdGlvbiB0byB0aGUgJ2dpdCBkaWZmLSonCitjb21tYW5kcy4KKworV2hlbiBkaWZmY29yZS1waWNrYXhlIGlzIGluIHVzZSwgaXQgY2hlY2tzIGlmIHRoZXJlIGFyZQorZmlsZXBhaXJzIHdob3NlICJyZXN1bHQiIHNpZGUgYW5kIHdob3NlICJvcmlnaW4iIHNpZGUgaGF2ZQorZGlmZmVyZW50IG51bWJlciBvZiBzcGVjaWZpZWQgc3RyaW5nLiAgU3VjaCBhIGZpbGVwYWlyIHJlcHJlc2VudHMKKyJ0aGUgc3RyaW5nIGFwcGVhcmVkIGluIHRoaXMgY2hhbmdlc2V0Ii4gIEl0IGFsc28gY2hlY2tzIGZvciB0aGUKK29wcG9zaXRlIGNhc2UgdGhhdCBsb3NlcyB0aGUgc3BlY2lmaWVkIHN0cmluZy4KKworV2hlbiBgLS1waWNrYXhlLWFsbGAgaXMgbm90IGluIGVmZmVjdCwgZGlmZmNvcmUtcGlja2F4ZSBsZWF2ZXMKK29ubHkgc3VjaCBmaWxlcGFpcnMgdGhhdCB0b3VjaCB0aGUgc3BlY2lmaWVkIHN0cmluZyBpbiBpdHMKK291dHB1dC4gIFdoZW4gYC0tcGlja2F4ZS1hbGxgIGlzIHVzZWQsIGRpZmZjb3JlLXBpY2theGUgbGVhdmVzIGFsbAorZmlsZXBhaXJzIGludGFjdCBpZiB0aGVyZSBpcyBzdWNoIGEgZmlsZXBhaXIsIG9yIG1ha2VzIHRoZQorb3V0cHV0IGVtcHR5IG90aGVyd2lzZS4gIFRoZSBsYXR0ZXIgYmVoYXZpb3VyIGlzIGRlc2lnbmVkIHRvCittYWtlIHJldmlld2luZyBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUKK2NoYW5nZXNldCBlYXNpZXIuCisKKworZGlmZmNvcmUtb3JkZXI6IEZvciBTb3J0aW5nIHRoZSBPdXRwdXQgQmFzZWQgb24gRmlsZW5hbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyB1c2VkIHRvIHJlb3JkZXIgdGhlIGZpbGVwYWlycyBhY2NvcmRpbmcgdG8gdGhlIHVzZXIncworKG9yIHByb2plY3QncykgdGFzdGUsIGFuZCBpcyBjb250cm9sbGVkIGJ5IHRoZSAtTyBvcHRpb24gdG8gdGhlCisnZ2l0IGRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMuCisKK1RoaXMgdGFrZXMgYSB0ZXh0IGZpbGUgZWFjaCBvZiB3aG9zZSBsaW5lcyBpcyBhIHNoZWxsIGdsb2IKK3BhdHRlcm4uICBGaWxlcGFpcnMgdGhhdCBtYXRjaCBhIGdsb2IgcGF0dGVybiBvbiBhbiBlYXJsaWVyIGxpbmUKK2luIHRoZSBmaWxlIGFyZSBvdXRwdXQgYmVmb3JlIG9uZXMgdGhhdCBtYXRjaCBhIGxhdGVyIGxpbmUsIGFuZAorZmlsZXBhaXJzIHRoYXQgZG8gbm90IG1hdGNoIGFueSBnbG9iIHBhdHRlcm4gYXJlIG91dHB1dCBsYXN0LgorCitBcyBhbiBleGFtcGxlLCBhIHR5cGljYWwgb3JkZXJmaWxlIGZvciB0aGUgY29yZSBnaXQgcHJvYmFibHkKK3dvdWxkIGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JFQURNRQorTWFrZWZpbGUKK0RvY3VtZW50YXRpb24KKyouaAorKi5jCit0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1kaWZmWzFdLAorbGlua2dpdDpnaXQtZGlmZi1maWxlc1sxXSwKK2xpbmtnaXQ6Z2l0LWRpZmYtaW5kZXhbMV0sCitsaW5rZ2l0OmdpdC1kaWZmLXRyZWVbMV0sCitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sCitsaW5rZ2l0OmdpdC1sb2dbMV0sCitsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRnbG9zc2FyeS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGdsb3NzYXJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzdhNDVhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRnbG9zc2FyeS50eHQKQEAgLTAsMCArMSwyNyBAQAorZ2l0Z2xvc3NhcnkoNykKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGdsb3NzYXJ5IC0gQSBHSVQgR2xvc3NhcnkKKworU1lOT1BTSVMKKy0tLS0tLS0tCisqCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitpbmNsdWRlOjpnbG9zc2FyeS1jb250ZW50LnR4dFtdCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSwKK2xpbms6ZXZlcnlkYXkuaHRtbFtFdmVyeWRheSBnaXRdLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTAwM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQKQEAgLTAsMCArMSwzNTYgQEAKK2dpdGhvb2tzKDUpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRob29rcyAtIEhvb2tzIHVzZWQgYnkgZ2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorJEdJVF9ESVIvaG9va3MvKgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitIb29rcyBhcmUgbGl0dGxlIHNjcmlwdHMgeW91IGNhbiBwbGFjZSBpbiBgJEdJVF9ESVIvaG9va3NgCitkaXJlY3RvcnkgdG8gdHJpZ2dlciBhY3Rpb24gYXQgY2VydGFpbiBwb2ludHMuICBXaGVuCisnZ2l0IGluaXQnIGlzIHJ1biwgYSBoYW5kZnVsIG9mIGV4YW1wbGUgaG9va3MgYXJlIGNvcGllZCBpbnRvIHRoZQorYGhvb2tzYCBkaXJlY3Rvcnkgb2YgdGhlIG5ldyByZXBvc2l0b3J5LCBidXQgYnkgZGVmYXVsdCB0aGV5IGFyZQorYWxsIGRpc2FibGVkLiAgVG8gZW5hYmxlIGEgaG9vaywgcmVuYW1lIGl0IGJ5IHJlbW92aW5nIGl0cyBgLnNhbXBsZWAKK3N1ZmZpeC4KKworTk9URTogSXQgaXMgYWxzbyBhIHJlcXVpcmVtZW50IGZvciBhIGdpdmVuIGhvb2sgdG8gYmUgZXhlY3V0YWJsZS4KK0hvd2V2ZXIgLSBpbiBhIGZyZXNobHkgaW5pdGlhbGl6ZWQgcmVwb3NpdG9yeSAtIHRoZSBgLnNhbXBsZWAgZmlsZXMgYXJlCitleGVjdXRhYmxlIGJ5IGRlZmF1bHQuCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjdXJyZW50bHkgZGVmaW5lZCBob29rcy4KKworSE9PS1MKKy0tLS0tCisKK2FwcGx5cGF0Y2gtbXNnCit+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0IGFtJyBzY3JpcHQuICBJdCB0YWtlcyBhIHNpbmdsZQorcGFyYW1ldGVyLCB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGhvbGRzIHRoZSBwcm9wb3NlZCBjb21taXQKK2xvZyBtZXNzYWdlLiAgRXhpdGluZyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBjYXVzZXMKKydnaXQgYW0nIHRvIGFib3J0IGJlZm9yZSBhcHBseWluZyB0aGUgcGF0Y2guCisKK1RoZSBob29rIGlzIGFsbG93ZWQgdG8gZWRpdCB0aGUgbWVzc2FnZSBmaWxlIGluIHBsYWNlLCBhbmQgY2FuCitiZSB1c2VkIHRvIG5vcm1hbGl6ZSB0aGUgbWVzc2FnZSBpbnRvIHNvbWUgcHJvamVjdCBzdGFuZGFyZAorZm9ybWF0IChpZiB0aGUgcHJvamVjdCBoYXMgb25lKS4gSXQgY2FuIGFsc28gYmUgdXNlZCB0byByZWZ1c2UKK3RoZSBjb21taXQgYWZ0ZXIgaW5zcGVjdGluZyB0aGUgbWVzc2FnZSBmaWxlLgorCitUaGUgZGVmYXVsdCAnYXBwbHlwYXRjaC1tc2cnIGhvb2ssIHdoZW4gZW5hYmxlZCwgcnVucyB0aGUKKydjb21taXQtbXNnJyBob29rLCBpZiB0aGUgbGF0dGVyIGlzIGVuYWJsZWQuCisKK3ByZS1hcHBseXBhdGNoCit+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0IGFtJy4gIEl0IHRha2VzIG5vIHBhcmFtZXRlciwgYW5kIGlzCitpbnZva2VkIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkLCBidXQgYmVmb3JlIGEgY29tbWl0IGlzIG1hZGUuCisKK0lmIGl0IGV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzLCB0aGVuIHRoZSB3b3JraW5nIHRyZWUgd2lsbCBub3QgYmUKK2NvbW1pdHRlZCBhZnRlciBhcHBseWluZyB0aGUgcGF0Y2guCisKK0l0IGNhbiBiZSB1c2VkIHRvIGluc3BlY3QgdGhlIGN1cnJlbnQgd29ya2luZyB0cmVlIGFuZCByZWZ1c2UgdG8KK21ha2UgYSBjb21taXQgaWYgaXQgZG9lcyBub3QgcGFzcyBjZXJ0YWluIHRlc3QuCisKK1RoZSBkZWZhdWx0ICdwcmUtYXBwbHlwYXRjaCcgaG9vaywgd2hlbiBlbmFibGVkLCBydW5zIHRoZQorJ3ByZS1jb21taXQnIGhvb2ssIGlmIHRoZSBsYXR0ZXIgaXMgZW5hYmxlZC4KKworcG9zdC1hcHBseXBhdGNoCit+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdCBhbScuICBJdCB0YWtlcyBubyBwYXJhbWV0ZXIsCithbmQgaXMgaW52b2tlZCBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZCBhbmQgYSBjb21taXQgaXMgbWFkZS4KKworVGhpcyBob29rIGlzIG1lYW50IHByaW1hcmlseSBmb3Igbm90aWZpY2F0aW9uLCBhbmQgY2Fubm90IGFmZmVjdAordGhlIG91dGNvbWUgb2YgJ2dpdCBhbScuCisKK3ByZS1jb21taXQKK35+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdCBjb21taXQnLCBhbmQgY2FuIGJlIGJ5cGFzc2VkCit3aXRoIGAtLW5vLXZlcmlmeWAgb3B0aW9uLiAgSXQgdGFrZXMgbm8gcGFyYW1ldGVyLCBhbmQgaXMKK2ludm9rZWQgYmVmb3JlIG9idGFpbmluZyB0aGUgcHJvcG9zZWQgY29tbWl0IGxvZyBtZXNzYWdlIGFuZAorbWFraW5nIGEgY29tbWl0LiAgRXhpdGluZyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoaXMgc2NyaXB0CitjYXVzZXMgdGhlICdnaXQgY29tbWl0JyB0byBhYm9ydC4KKworVGhlIGRlZmF1bHQgJ3ByZS1jb21taXQnIGhvb2ssIHdoZW4gZW5hYmxlZCwgY2F0Y2hlcyBpbnRyb2R1Y3Rpb24KK29mIGxpbmVzIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZXMgYW5kIGFib3J0cyB0aGUgY29tbWl0IHdoZW4KK3N1Y2ggYSBsaW5lIGlzIGZvdW5kLgorCitBbGwgdGhlICdnaXQgY29tbWl0JyBob29rcyBhcmUgaW52b2tlZCB3aXRoIHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgYEdJVF9FRElUT1I9OmAgaWYgdGhlIGNvbW1hbmQgd2lsbCBub3QgYnJpbmcgdXAgYW4gZWRpdG9yCit0byBtb2RpZnkgdGhlIGNvbW1pdCBtZXNzYWdlLgorCitwcmVwYXJlLWNvbW1pdC1tc2cKK35+fn5+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0IGNvbW1pdCcgcmlnaHQgYWZ0ZXIgcHJlcGFyaW5nIHRoZQorZGVmYXVsdCBsb2cgbWVzc2FnZSwgYW5kIGJlZm9yZSB0aGUgZWRpdG9yIGlzIHN0YXJ0ZWQuCisKK0l0IHRha2VzIG9uZSB0byB0aHJlZSBwYXJhbWV0ZXJzLiAgVGhlIGZpcnN0IGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlCit0aGF0IGNvbnRhaW5zIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuICBUaGUgc2Vjb25kIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGNvbW1pdAorbWVzc2FnZSwgYW5kIGNhbiBiZTogYG1lc3NhZ2VgIChpZiBhIGAtbWAgb3IgYC1GYCBvcHRpb24gd2FzCitnaXZlbik7IGB0ZW1wbGF0ZWAgKGlmIGEgYC10YCBvcHRpb24gd2FzIGdpdmVuIG9yIHRoZQorY29uZmlndXJhdGlvbiBvcHRpb24gYGNvbW1pdC50ZW1wbGF0ZWAgaXMgc2V0KTsgYG1lcmdlYCAoaWYgdGhlCitjb21taXQgaXMgYSBtZXJnZSBvciBhIGAuZ2l0L01FUkdFX01TR2AgZmlsZSBleGlzdHMpOyBgc3F1YXNoYAorKGlmIGEgYC5naXQvU1FVQVNIX01TR2AgZmlsZSBleGlzdHMpOyBvciBgY29tbWl0YCwgZm9sbG93ZWQgYnkKK2EgY29tbWl0IFNIQTEgKGlmIGEgYC1jYCwgYC1DYCBvciBgLS1hbWVuZGAgb3B0aW9uIHdhcyBnaXZlbikuCisKK0lmIHRoZSBleGl0IHN0YXR1cyBpcyBub24temVybywgJ2dpdCBjb21taXQnIHdpbGwgYWJvcnQuCisKK1RoZSBwdXJwb3NlIG9mIHRoZSBob29rIGlzIHRvIGVkaXQgdGhlIG1lc3NhZ2UgZmlsZSBpbiBwbGFjZSwgYW5kCitpdCBpcyBub3Qgc3VwcHJlc3NlZCBieSB0aGUgYC0tbm8tdmVyaWZ5YCBvcHRpb24uICBBIG5vbi16ZXJvIGV4aXQKK21lYW5zIGEgZmFpbHVyZSBvZiB0aGUgaG9vayBhbmQgYWJvcnRzIHRoZSBjb21taXQuICBJdCBzaG91bGQgbm90CitiZSB1c2VkIGFzIHJlcGxhY2VtZW50IGZvciBwcmUtY29tbWl0IGhvb2suCisKK1RoZSBzYW1wbGUgYHByZXBhcmUtY29tbWl0LW1zZ2AgaG9vayB0aGF0IGNvbWVzIHdpdGggZ2l0IGNvbW1lbnRzCitvdXQgdGhlIGBDb25mbGljdHM6YCBwYXJ0IG9mIGEgbWVyZ2UncyBjb21taXQgbWVzc2FnZS4KKworY29tbWl0LW1zZworfn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0IGNvbW1pdCcsIGFuZCBjYW4gYmUgYnlwYXNzZWQKK3dpdGggYC0tbm8tdmVyaWZ5YCBvcHRpb24uICBJdCB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIsIHRoZQorbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGhvbGRzIHRoZSBwcm9wb3NlZCBjb21taXQgbG9nIG1lc3NhZ2UuCitFeGl0aW5nIHdpdGggbm9uLXplcm8gc3RhdHVzIGNhdXNlcyB0aGUgJ2dpdCBjb21taXQnIHRvCithYm9ydC4KKworVGhlIGhvb2sgaXMgYWxsb3dlZCB0byBlZGl0IHRoZSBtZXNzYWdlIGZpbGUgaW4gcGxhY2UsIGFuZCBjYW4KK2JlIHVzZWQgdG8gbm9ybWFsaXplIHRoZSBtZXNzYWdlIGludG8gc29tZSBwcm9qZWN0IHN0YW5kYXJkCitmb3JtYXQgKGlmIHRoZSBwcm9qZWN0IGhhcyBvbmUpLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHJlZnVzZQordGhlIGNvbW1pdCBhZnRlciBpbnNwZWN0aW5nIHRoZSBtZXNzYWdlIGZpbGUuCisKK1RoZSBkZWZhdWx0ICdjb21taXQtbXNnJyBob29rLCB3aGVuIGVuYWJsZWQsIGRldGVjdHMgZHVwbGljYXRlCisiU2lnbmVkLW9mZi1ieSIgbGluZXMsIGFuZCBhYm9ydHMgdGhlIGNvbW1pdCBpZiBvbmUgaXMgZm91bmQuCisKK3Bvc3QtY29tbWl0Cit+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0IGNvbW1pdCcuICBJdCB0YWtlcyBubworcGFyYW1ldGVyLCBhbmQgaXMgaW52b2tlZCBhZnRlciBhIGNvbW1pdCBpcyBtYWRlLgorCitUaGlzIGhvb2sgaXMgbWVhbnQgcHJpbWFyaWx5IGZvciBub3RpZmljYXRpb24sIGFuZCBjYW5ub3QgYWZmZWN0Cit0aGUgb3V0Y29tZSBvZiAnZ2l0IGNvbW1pdCcuCisKK3ByZS1yZWJhc2UKK35+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGNhbGxlZCBieSAnZ2l0IHJlYmFzZScgYW5kIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgYSBicmFuY2gKK2Zyb20gZ2V0dGluZyByZWJhc2VkLgorCisKK3Bvc3QtY2hlY2tvdXQKK35+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgd2hlbiBhICdnaXQgY2hlY2tvdXQnIGlzIHJ1biBhZnRlciBoYXZpbmcgdXBkYXRlZCB0aGUKK3dvcmt0cmVlLiAgVGhlIGhvb2sgaXMgZ2l2ZW4gdGhyZWUgcGFyYW1ldGVyczogdGhlIHJlZiBvZiB0aGUgcHJldmlvdXMgSEVBRCwKK3RoZSByZWYgb2YgdGhlIG5ldyBIRUFEICh3aGljaCBtYXkgb3IgbWF5IG5vdCBoYXZlIGNoYW5nZWQpLCBhbmQgYSBmbGFnCitpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNoZWNrb3V0IHdhcyBhIGJyYW5jaCBjaGVja291dCAoY2hhbmdpbmcgYnJhbmNoZXMsCitmbGFnPTEpIG9yIGEgZmlsZSBjaGVja291dCAocmV0cmlldmluZyBhIGZpbGUgZnJvbSB0aGUgaW5kZXgsIGZsYWc9MCkuCitUaGlzIGhvb2sgY2Fubm90IGFmZmVjdCB0aGUgb3V0Y29tZSBvZiAnZ2l0IGNoZWNrb3V0Jy4KKworSXQgaXMgYWxzbyBydW4gYWZ0ZXIgJ2dpdCBjbG9uZScsIHVubGVzcyB0aGUgLS1uby1jaGVja291dCAoLW4pIG9wdGlvbiBpcwordXNlZC4gVGhlIGZpcnN0IHBhcmFtZXRlciBnaXZlbiB0byB0aGUgaG9vayBpcyB0aGUgbnVsbC1yZWYsIHRoZSBzZWNvbmQgdGhlCityZWYgb2YgdGhlIG5ldyBIRUFEIGFuZCB0aGUgZmxhZyBpcyBhbHdheXMgMS4KKworVGhpcyBob29rIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gcmVwb3NpdG9yeSB2YWxpZGl0eSBjaGVja3MsIGF1dG8tZGlzcGxheQorZGlmZmVyZW5jZXMgZnJvbSB0aGUgcHJldmlvdXMgSEVBRCBpZiBkaWZmZXJlbnQsIG9yIHNldCB3b3JraW5nIGRpciBtZXRhZGF0YQorcHJvcGVydGllcy4KKworcG9zdC1tZXJnZQorfn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0IG1lcmdlJywgd2hpY2ggaGFwcGVucyB3aGVuIGEgJ2dpdCBwdWxsJworaXMgZG9uZSBvbiBhIGxvY2FsIHJlcG9zaXRvcnkuICBUaGUgaG9vayB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIsIGEgc3RhdHVzCitmbGFnIHNwZWNpZnlpbmcgd2hldGhlciBvciBub3QgdGhlIG1lcmdlIGJlaW5nIGRvbmUgd2FzIGEgc3F1YXNoIG1lcmdlLgorVGhpcyBob29rIGNhbm5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgJ2dpdCBtZXJnZScgYW5kIGlzIG5vdCBleGVjdXRlZCwKK2lmIHRoZSBtZXJnZSBmYWlsZWQgZHVlIHRvIGNvbmZsaWN0cy4KKworVGhpcyBob29rIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBjb3JyZXNwb25kaW5nIHByZS1jb21taXQgaG9vayB0bworc2F2ZSBhbmQgcmVzdG9yZSBhbnkgZm9ybSBvZiBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHdvcmtpbmcgdHJlZQorKGVnOiBwZXJtaXNzaW9ucy9vd25lcnNoaXAsIEFDTFMsIGV0YykuICBTZWUgY29udHJpYi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsCitmb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gZG8gdGhpcy4KKworW1twcmUtcmVjZWl2ZV1dCitwcmUtcmVjZWl2ZQorfn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1yZWNlaXZlLXBhY2snIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKK3doaWNoIGhhcHBlbnMgd2hlbiBhICdnaXQgcHVzaCcgaXMgZG9uZSBvbiBhIGxvY2FsIHJlcG9zaXRvcnkuCitKdXN0IGJlZm9yZSBzdGFydGluZyB0byB1cGRhdGUgcmVmcyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksIHRoZQorcHJlLXJlY2VpdmUgaG9vayBpcyBpbnZva2VkLiAgSXRzIGV4aXQgc3RhdHVzIGRldGVybWluZXMgdGhlIHN1Y2Nlc3MKK29yIGZhaWx1cmUgb2YgdGhlIHVwZGF0ZS4KKworVGhpcyBob29rIGV4ZWN1dGVzIG9uY2UgZm9yIHRoZSByZWNlaXZlIG9wZXJhdGlvbi4gSXQgdGFrZXMgbm8KK2FyZ3VtZW50cywgYnV0IGZvciBlYWNoIHJlZiB0byBiZSB1cGRhdGVkIGl0IHJlY2VpdmVzIG9uIHN0YW5kYXJkCitpbnB1dCBhIGxpbmUgb2YgdGhlIGZvcm1hdDoKKworICA8b2xkLXZhbHVlPiBTUCA8bmV3LXZhbHVlPiBTUCA8cmVmLW5hbWU+IExGCisKK3doZXJlIGA8b2xkLXZhbHVlPmAgaXMgdGhlIG9sZCBvYmplY3QgbmFtZSBzdG9yZWQgaW4gdGhlIHJlZiwKK2A8bmV3LXZhbHVlPmAgaXMgdGhlIG5ldyBvYmplY3QgbmFtZSB0byBiZSBzdG9yZWQgaW4gdGhlIHJlZiBhbmQKK2A8cmVmLW5hbWU+YCBpcyB0aGUgZnVsbCBuYW1lIG9mIHRoZSByZWYuCitXaGVuIGNyZWF0aW5nIGEgbmV3IHJlZiwgYDxvbGQtdmFsdWU+YCBpcyA0MCBgMGAuCisKK0lmIHRoZSBob29rIGV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzLCBub25lIG9mIHRoZSByZWZzIHdpbGwgYmUKK3VwZGF0ZWQuIElmIHRoZSBob29rIGV4aXRzIHdpdGggemVybywgdXBkYXRpbmcgb2YgaW5kaXZpZHVhbCByZWZzIGNhbgorc3RpbGwgYmUgcHJldmVudGVkIGJ5IHRoZSA8PHVwZGF0ZSwndXBkYXRlJz4+IGhvb2suCisKK0JvdGggc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvciBvdXRwdXQgYXJlIGZvcndhcmRlZCB0bworJ2dpdCBzZW5kLXBhY2snIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcworZm9yIHRoZSB1c2VyLgorCitbW3VwZGF0ZV1dCit1cGRhdGUKK35+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0LXJlY2VpdmUtcGFjaycgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LAord2hpY2ggaGFwcGVucyB3aGVuIGEgJ2dpdCBwdXNoJyBpcyBkb25lIG9uIGEgbG9jYWwgcmVwb3NpdG9yeS4KK0p1c3QgYmVmb3JlIHVwZGF0aW5nIHRoZSByZWYgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LCB0aGUgdXBkYXRlIGhvb2sKK2lzIGludm9rZWQuICBJdHMgZXhpdCBzdGF0dXMgZGV0ZXJtaW5lcyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mCit0aGUgcmVmIHVwZGF0ZS4KKworVGhlIGhvb2sgZXhlY3V0ZXMgb25jZSBmb3IgZWFjaCByZWYgdG8gYmUgdXBkYXRlZCwgYW5kIHRha2VzCit0aHJlZSBwYXJhbWV0ZXJzOgorCisgLSB0aGUgbmFtZSBvZiB0aGUgcmVmIGJlaW5nIHVwZGF0ZWQsCisgLSB0aGUgb2xkIG9iamVjdCBuYW1lIHN0b3JlZCBpbiB0aGUgcmVmLAorIC0gYW5kIHRoZSBuZXcgb2JqZWN0bmFtZSB0byBiZSBzdG9yZWQgaW4gdGhlIHJlZi4KKworQSB6ZXJvIGV4aXQgZnJvbSB0aGUgdXBkYXRlIGhvb2sgYWxsb3dzIHRoZSByZWYgdG8gYmUgdXBkYXRlZC4KK0V4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyBwcmV2ZW50cyAnZ2l0LXJlY2VpdmUtcGFjaycKK2Zyb20gdXBkYXRpbmcgdGhhdCByZWYuCisKK1RoaXMgaG9vayBjYW4gYmUgdXNlZCB0byBwcmV2ZW50ICdmb3JjZWQnIHVwZGF0ZSBvbiBjZXJ0YWluIHJlZnMgYnkKK21ha2luZyBzdXJlIHRoYXQgdGhlIG9iamVjdCBuYW1lIGlzIGEgY29tbWl0IG9iamVjdCB0aGF0IGlzIGEKK2Rlc2NlbmRhbnQgb2YgdGhlIGNvbW1pdCBvYmplY3QgbmFtZWQgYnkgdGhlIG9sZCBvYmplY3QgbmFtZS4KK1RoYXQgaXMsIHRvIGVuZm9yY2UgYSAiZmFzdC1mb3J3YXJkIG9ubHkiIHBvbGljeS4KKworSXQgY291bGQgYWxzbyBiZSB1c2VkIHRvIGxvZyB0aGUgb2xkLi5uZXcgc3RhdHVzLiAgSG93ZXZlciwgaXQKK2RvZXMgbm90IGtub3cgdGhlIGVudGlyZSBzZXQgb2YgYnJhbmNoZXMsIHNvIGl0IHdvdWxkIGVuZCB1cAorZmlyaW5nIG9uZSBlLW1haWwgcGVyIHJlZiB3aGVuIHVzZWQgbmFpdmVseSwgdGhvdWdoLiAgVGhlCis8PHBvc3QtcmVjZWl2ZSwncG9zdC1yZWNlaXZlJz4+IGhvb2sgaXMgbW9yZSBzdWl0ZWQgdG8gdGhhdC4KKworQW5vdGhlciB1c2Ugc3VnZ2VzdGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QgaXMgdG8gdXNlIHRoaXMgaG9vayB0bworaW1wbGVtZW50IGFjY2VzcyBjb250cm9sIHdoaWNoIGlzIGZpbmVyIGdyYWluZWQgdGhhbiB0aGUgb25lCitiYXNlZCBvbiBmaWxlc3lzdGVtIGdyb3VwLgorCitCb3RoIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGFyZSBmb3J3YXJkZWQgdG8KKydnaXQgc2VuZC1wYWNrJyBvbiB0aGUgb3RoZXIgZW5kLCBzbyB5b3UgY2FuIHNpbXBseSBgZWNob2AgbWVzc2FnZXMKK2ZvciB0aGUgdXNlci4KKworVGhlIGRlZmF1bHQgJ3VwZGF0ZScgaG9vaywgd2hlbiBlbmFibGVkLS1hbmQgd2l0aAorYGhvb2tzLmFsbG93dW5hbm5vdGF0ZWRgIGNvbmZpZyBvcHRpb24gdW5zZXQgb3Igc2V0IHRvIGZhbHNlLS1wcmV2ZW50cwordW5hbm5vdGF0ZWQgdGFncyB0byBiZSBwdXNoZWQuCisKK1tbcG9zdC1yZWNlaXZlXV0KK3Bvc3QtcmVjZWl2ZQorfn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksCit3aGljaCBoYXBwZW5zIHdoZW4gYSAnZ2l0IHB1c2gnIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LgorSXQgZXhlY3V0ZXMgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5IG9uY2UgYWZ0ZXIgYWxsIHRoZSByZWZzIGhhdmUKK2JlZW4gdXBkYXRlZC4KKworVGhpcyBob29rIGV4ZWN1dGVzIG9uY2UgZm9yIHRoZSByZWNlaXZlIG9wZXJhdGlvbi4gIEl0IHRha2VzIG5vCithcmd1bWVudHMsIGJ1dCBnZXRzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIHRoZQorPDxwcmUtcmVjZWl2ZSwncHJlLXJlY2VpdmUnPj4KK2hvb2sgZG9lcyBvbiBpdHMgc3RhbmRhcmQgaW5wdXQuCisKK1RoaXMgaG9vayBkb2VzIG5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgJ2dpdC1yZWNlaXZlLXBhY2snLCBhcyBpdAoraXMgY2FsbGVkIGFmdGVyIHRoZSByZWFsIHdvcmsgaXMgZG9uZS4KKworVGhpcyBzdXBlcnNlZGVzIHRoZSA8PHBvc3QtdXBkYXRlLCdwb3N0LXVwZGF0ZSc+PiBob29rIGluIHRoYXQgaXQgZ2V0cworYm90aCBvbGQgYW5kIG5ldyB2YWx1ZXMgb2YgYWxsIHRoZSByZWZzIGluIGFkZGl0aW9uIHRvIHRoZWlyCituYW1lcy4KKworQm90aCBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkIGVycm9yIG91dHB1dCBhcmUgZm9yd2FyZGVkIHRvCisnZ2l0IHNlbmQtcGFjaycgb24gdGhlIG90aGVyIGVuZCwgc28geW91IGNhbiBzaW1wbHkgYGVjaG9gIG1lc3NhZ2VzCitmb3IgdGhlIHVzZXIuCisKK1RoZSBkZWZhdWx0ICdwb3N0LXJlY2VpdmUnIGhvb2sgaXMgZW1wdHksIGJ1dCB0aGVyZSBpcworYSBzYW1wbGUgc2NyaXB0IGBwb3N0LXJlY2VpdmUtZW1haWxgIHByb3ZpZGVkIGluIHRoZSBgY29udHJpYi9ob29rc2AKK2RpcmVjdG9yeSBpbiBnaXQgZGlzdHJpYnV0aW9uLCB3aGljaCBpbXBsZW1lbnRzIHNlbmRpbmcgY29tbWl0CitlbWFpbHMuCisKK1tbcG9zdC11cGRhdGVdXQorcG9zdC11cGRhdGUKK35+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksCit3aGljaCBoYXBwZW5zIHdoZW4gYSAnZ2l0IHB1c2gnIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LgorSXQgZXhlY3V0ZXMgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5IG9uY2UgYWZ0ZXIgYWxsIHRoZSByZWZzIGhhdmUKK2JlZW4gdXBkYXRlZC4KKworSXQgdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgcGFyYW1ldGVycywgZWFjaCBvZiB3aGljaCBpcyB0aGUKK25hbWUgb2YgcmVmIHRoYXQgd2FzIGFjdHVhbGx5IHVwZGF0ZWQuCisKK1RoaXMgaG9vayBpcyBtZWFudCBwcmltYXJpbHkgZm9yIG5vdGlmaWNhdGlvbiwgYW5kIGNhbm5vdCBhZmZlY3QKK3RoZSBvdXRjb21lIG9mICdnaXQtcmVjZWl2ZS1wYWNrJy4KKworVGhlICdwb3N0LXVwZGF0ZScgaG9vayBjYW4gdGVsbCB3aGF0IGFyZSB0aGUgaGVhZHMgdGhhdCB3ZXJlIHB1c2hlZCwKK2J1dCBpdCBkb2VzIG5vdCBrbm93IHdoYXQgdGhlaXIgb3JpZ2luYWwgYW5kIHVwZGF0ZWQgdmFsdWVzIGFyZSwKK3NvIGl0IGlzIGEgcG9vciBwbGFjZSB0byBkbyBsb2cgb2xkLi5uZXcuIFRoZQorPDxwb3N0LXJlY2VpdmUsJ3Bvc3QtcmVjZWl2ZSc+PiBob29rIGRvZXMgZ2V0IGJvdGggb3JpZ2luYWwgYW5kCit1cGRhdGVkIHZhbHVlcyBvZiB0aGUgcmVmcy4gWW91IG1pZ2h0IGNvbnNpZGVyIGl0IGluc3RlYWQgaWYgeW91IG5lZWQKK3RoZW0uCisKK1doZW4gZW5hYmxlZCwgdGhlIGRlZmF1bHQgJ3Bvc3QtdXBkYXRlJyBob29rIHJ1bnMKKydnaXQgdXBkYXRlLXNlcnZlci1pbmZvJyB0byBrZWVwIHRoZSBpbmZvcm1hdGlvbiB1c2VkIGJ5IGR1bWIKK3RyYW5zcG9ydHMgKGUuZy4sIEhUVFApIHVwLXRvLWRhdGUuICBJZiB5b3UgYXJlIHB1Ymxpc2hpbmcKK2EgZ2l0IHJlcG9zaXRvcnkgdGhhdCBpcyBhY2Nlc3NpYmxlIHZpYSBIVFRQLCB5b3Ugc2hvdWxkCitwcm9iYWJseSBlbmFibGUgdGhpcyBob29rLgorCitCb3RoIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGFyZSBmb3J3YXJkZWQgdG8KKydnaXQgc2VuZC1wYWNrJyBvbiB0aGUgb3RoZXIgZW5kLCBzbyB5b3UgY2FuIHNpbXBseSBgZWNob2AgbWVzc2FnZXMKK2ZvciB0aGUgdXNlci4KKworcHJlLWF1dG8tZ2MKK35+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQgZ2MgLS1hdXRvJy4gSXQgdGFrZXMgbm8gcGFyYW1ldGVyLCBhbmQKK2V4aXRpbmcgd2l0aCBub24temVybyBzdGF0dXMgZnJvbSB0aGlzIHNjcmlwdCBjYXVzZXMgdGhlICdnaXQgZ2MgLS1hdXRvJwordG8gYWJvcnQuCisKK3Bvc3QtcmV3cml0ZQorfn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGNvbW1hbmRzIHRoYXQgcmV3cml0ZSBjb21taXRzIChgZ2l0IGNvbW1pdAorLS1hbWVuZGAsICdnaXQtcmViYXNlJzsgY3VycmVudGx5ICdnaXQtZmlsdGVyLWJyYW5jaCcgZG9lcyAnbm90JyBjYWxsCitpdCEpLiAgSXRzIGZpcnN0IGFyZ3VtZW50IGRlbm90ZXMgdGhlIGNvbW1hbmQgaXQgd2FzIGludm9rZWQgYnk6CitjdXJyZW50bHkgb25lIG9mIGBhbWVuZGAgb3IgYHJlYmFzZWAuICBGdXJ0aGVyIGNvbW1hbmQtZGVwZW5kZW50Cithcmd1bWVudHMgbWF5IGJlIHBhc3NlZCBpbiB0aGUgZnV0dXJlLgorCitUaGUgaG9vayByZWNlaXZlcyBhIGxpc3Qgb2YgdGhlIHJld3JpdHRlbiBjb21taXRzIG9uIHN0ZGluLCBpbiB0aGUKK2Zvcm1hdAorCisgIDxvbGQtc2hhMT4gU1AgPG5ldy1zaGExPiBbIFNQIDxleHRyYS1pbmZvPiBdIExGCisKK1RoZSAnZXh0cmEtaW5mbycgaXMgYWdhaW4gY29tbWFuZC1kZXBlbmRlbnQuICBJZiBpdCBpcyBlbXB0eSwgdGhlCitwcmVjZWRpbmcgU1AgaXMgYWxzbyBvbWl0dGVkLiAgQ3VycmVudGx5LCBubyBjb21tYW5kcyBwYXNzIGFueQorJ2V4dHJhLWluZm8nLgorCitUaGUgaG9vayBhbHdheXMgcnVucyBhZnRlciB0aGUgYXV0b21hdGljIG5vdGUgY29weWluZyAoc2VlCisibm90ZXMucmV3cml0ZS48Y29tbWFuZD4iIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZy50eHQpIGhhcyBoYXBwZW5lZCwgYW5kCit0aHVzIGhhcyBhY2Nlc3MgdG8gdGhlc2Ugbm90ZXMuCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZC1zcGVjaWZpYyBjb21tZW50cyBhcHBseToKKworcmViYXNlOjoKKwlGb3IgdGhlICdzcXVhc2gnIGFuZCAnZml4dXAnIG9wZXJhdGlvbiwgYWxsIGNvbW1pdHMgdGhhdCB3ZXJlCisJc3F1YXNoZWQgYXJlIGxpc3RlZCBhcyBiZWluZyByZXdyaXR0ZW4gdG8gdGhlIHNxdWFzaGVkIGNvbW1pdC4KKwlUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBzZXZlcmFsIGxpbmVzIHNoYXJpbmcgdGhlIHNhbWUKKwknbmV3LXNoYTEnLgorKworVGhlIGNvbW1pdHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgbGlzdGVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgd2VyZQorcHJvY2Vzc2VkIGJ5IHJlYmFzZS4KKworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0aWdub3JlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0aWdub3JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjgyZmUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRpZ25vcmUudHh0CkBAIC0wLDAgKzEsMTczIEBACitnaXRpZ25vcmUoNSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRpZ25vcmUgLSBTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlCisKK1NZTk9QU0lTCistLS0tLS0tLQorJEdJVF9ESVIvaW5mby9leGNsdWRlLCAuZ2l0aWdub3JlCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitBIGBnaXRpZ25vcmVgIGZpbGUgc3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRoYXQKK2dpdCBzaG91bGQgaWdub3JlLgorRmlsZXMgYWxyZWFkeSB0cmFja2VkIGJ5IGdpdCBhcmUgbm90IGFmZmVjdGVkOyBzZWUgdGhlIE5PVEVTCitiZWxvdyBmb3IgZGV0YWlscy4KKworRWFjaCBsaW5lIGluIGEgYGdpdGlnbm9yZWAgZmlsZSBzcGVjaWZpZXMgYSBwYXR0ZXJuLgorV2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIGlnbm9yZSBhIHBhdGgsIGdpdCBub3JtYWxseSBjaGVja3MKK2BnaXRpZ25vcmVgIHBhdHRlcm5zIGZyb20gbXVsdGlwbGUgc291cmNlcywgd2l0aCB0aGUgZm9sbG93aW5nCitvcmRlciBvZiBwcmVjZWRlbmNlLCBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0ICh3aXRoaW4gb25lIGxldmVsIG9mCitwcmVjZWRlbmNlLCB0aGUgbGFzdCBtYXRjaGluZyBwYXR0ZXJuIGRlY2lkZXMgdGhlIG91dGNvbWUpOgorCisgKiBQYXR0ZXJucyByZWFkIGZyb20gdGhlIGNvbW1hbmQgbGluZSBmb3IgdGhvc2UgY29tbWFuZHMgdGhhdCBzdXBwb3J0CisgICB0aGVtLgorCisgKiBQYXR0ZXJucyByZWFkIGZyb20gYSBgLmdpdGlnbm9yZWAgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyAgIGFzIHRoZSBwYXRoLCBvciBpbiBhbnkgcGFyZW50IGRpcmVjdG9yeSwgd2l0aCBwYXR0ZXJucyBpbiB0aGUKKyAgIGhpZ2hlciBsZXZlbCBmaWxlcyAodXAgdG8gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JrIHRyZWUpIGJlaW5nIG92ZXJyaWRkZW4KKyAgIGJ5IHRob3NlIGluIGxvd2VyIGxldmVsIGZpbGVzIGRvd24gdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBmaWxlLgorICAgVGhlc2UgcGF0dGVybnMgbWF0Y2ggcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgYC5naXRpZ25vcmVgIGZpbGUuICBBIHByb2plY3Qgbm9ybWFsbHkgaW5jbHVkZXMgc3VjaAorICAgYC5naXRpZ25vcmVgIGZpbGVzIGluIGl0cyByZXBvc2l0b3J5LCBjb250YWluaW5nIHBhdHRlcm5zIGZvcgorICAgZmlsZXMgZ2VuZXJhdGVkIGFzIHBhcnQgb2YgdGhlIHByb2plY3QgYnVpbGQuCisKKyAqIFBhdHRlcm5zIHJlYWQgZnJvbSBgJEdJVF9ESVIvaW5mby9leGNsdWRlYC4KKworICogUGF0dGVybnMgcmVhZCBmcm9tIHRoZSBmaWxlIHNwZWNpZmllZCBieSB0aGUgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgJ2NvcmUuZXhjbHVkZXNmaWxlJy4KKworV2hpY2ggZmlsZSB0byBwbGFjZSBhIHBhdHRlcm4gaW4gZGVwZW5kcyBvbiBob3cgdGhlIHBhdHRlcm4gaXMgbWVhbnQgdG8KK2JlIHVzZWQuCisKKyAqIFBhdHRlcm5zIHdoaWNoIHNob3VsZCBiZSB2ZXJzaW9uLWNvbnRyb2xsZWQgYW5kIGRpc3RyaWJ1dGVkIHRvCisgICBvdGhlciByZXBvc2l0b3JpZXMgdmlhIGNsb25lIChpLmUuLCBmaWxlcyB0aGF0IGFsbCBkZXZlbG9wZXJzIHdpbGwgd2FudAorICAgdG8gaWdub3JlKSBzaG91bGQgZ28gaW50byBhIGAuZ2l0aWdub3JlYCBmaWxlLgorCisgKiBQYXR0ZXJucyB3aGljaCBhcmUKKyAgIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciByZXBvc2l0b3J5IGJ1dCB3aGljaCBkbyBub3QgbmVlZCB0byBiZSBzaGFyZWQKKyAgIHdpdGggb3RoZXIgcmVsYXRlZCByZXBvc2l0b3JpZXMgKGUuZy4sIGF1eGlsaWFyeSBmaWxlcyB0aGF0IGxpdmUgaW5zaWRlCisgICB0aGUgcmVwb3NpdG9yeSBidXQgYXJlIHNwZWNpZmljIHRvIG9uZSB1c2VyJ3Mgd29ya2Zsb3cpIHNob3VsZCBnbyBpbnRvCisgICB0aGUgYCRHSVRfRElSL2luZm8vZXhjbHVkZWAgZmlsZS4KKworICogUGF0dGVybnMgd2hpY2ggYSB1c2VyIHdhbnRzIGdpdCB0bworICAgaWdub3JlIGluIGFsbCBzaXR1YXRpb25zIChlLmcuLCBiYWNrdXAgb3IgdGVtcG9yYXJ5IGZpbGVzIGdlbmVyYXRlZCBieQorICAgdGhlIHVzZXIncyBlZGl0b3Igb2YgY2hvaWNlKSBnZW5lcmFsbHkgZ28gaW50byBhIGZpbGUgc3BlY2lmaWVkIGJ5CisgICBgY29yZS5leGNsdWRlc2ZpbGVgIGluIHRoZSB1c2VyJ3MgYH4vLmdpdGNvbmZpZ2AuIEl0cyBkZWZhdWx0IHZhbHVlIGlzCisgICAkWERHX0NPTkZJR19IT01FL2dpdC9pZ25vcmUuIElmICRYREdfQ09ORklHX0hPTUUgaXMgZWl0aGVyIG5vdCBzZXQgb3IKKyAgIGVtcHR5LCAkSE9NRS8uY29uZmlnL2dpdC9pZ25vcmUgaXMgdXNlZCBpbnN0ZWFkLgorCitUaGUgdW5kZXJseWluZyBnaXQgcGx1bWJpbmcgdG9vbHMsIHN1Y2ggYXMKKydnaXQgbHMtZmlsZXMnIGFuZCAnZ2l0IHJlYWQtdHJlZScsIHJlYWQKK2BnaXRpZ25vcmVgIHBhdHRlcm5zIHNwZWNpZmllZCBieSBjb21tYW5kLWxpbmUgb3B0aW9ucywgb3IgZnJvbQorZmlsZXMgc3BlY2lmaWVkIGJ5IGNvbW1hbmQtbGluZSBvcHRpb25zLiAgSGlnaGVyLWxldmVsIGdpdAordG9vbHMsIHN1Y2ggYXMgJ2dpdCBzdGF0dXMnIGFuZCAnZ2l0IGFkZCcsCit1c2UgcGF0dGVybnMgZnJvbSB0aGUgc291cmNlcyBzcGVjaWZpZWQgYWJvdmUuCisKK1BBVFRFUk4gRk9STUFUCistLS0tLS0tLS0tLS0tLQorCisgLSBBIGJsYW5rIGxpbmUgbWF0Y2hlcyBubyBmaWxlcywgc28gaXQgY2FuIHNlcnZlIGFzIGEgc2VwYXJhdG9yCisgICBmb3IgcmVhZGFiaWxpdHkuCisKKyAtIEEgbGluZSBzdGFydGluZyB3aXRoICMgc2VydmVzIGFzIGEgY29tbWVudC4KKyAgIFB1dCBhIGJhY2tzbGFzaCAoImBcYCIpIGluIGZyb250IG9mIHRoZSBmaXJzdCBoYXNoIGZvciBwYXR0ZXJucworICAgdGhhdCBiZWdpbiB3aXRoIGEgaGFzaC4KKworIC0gQW4gb3B0aW9uYWwgcHJlZml4ICJgIWAiIHdoaWNoIG5lZ2F0ZXMgdGhlIHBhdHRlcm47IGFueQorICAgbWF0Y2hpbmcgZmlsZSBleGNsdWRlZCBieSBhIHByZXZpb3VzIHBhdHRlcm4gd2lsbCBiZWNvbWUKKyAgIGluY2x1ZGVkIGFnYWluLiAgSWYgYSBuZWdhdGVkIHBhdHRlcm4gbWF0Y2hlcywgdGhpcyB3aWxsCisgICBvdmVycmlkZSBsb3dlciBwcmVjZWRlbmNlIHBhdHRlcm5zIHNvdXJjZXMuCisgICBQdXQgYSBiYWNrc2xhc2ggKCJgXGAiKSBpbiBmcm9udCBvZiB0aGUgZmlyc3QgImAhYCIgZm9yIHBhdHRlcm5zCisgICB0aGF0IGJlZ2luIHdpdGggYSBsaXRlcmFsICJgIWAiLCBmb3IgZXhhbXBsZSwgImBcIWltcG9ydGFudCEudHh0YCIuCisKKyAtIElmIHRoZSBwYXR0ZXJuIGVuZHMgd2l0aCBhIHNsYXNoLCBpdCBpcyByZW1vdmVkIGZvciB0aGUKKyAgIHB1cnBvc2Ugb2YgdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiwgYnV0IGl0IHdvdWxkIG9ubHkgZmluZAorICAgYSBtYXRjaCB3aXRoIGEgZGlyZWN0b3J5LiAgSW4gb3RoZXIgd29yZHMsIGBmb28vYCB3aWxsIG1hdGNoIGEKKyAgIGRpcmVjdG9yeSBgZm9vYCBhbmQgcGF0aHMgdW5kZXJuZWF0aCBpdCwgYnV0IHdpbGwgbm90IG1hdGNoIGEKKyAgIHJlZ3VsYXIgZmlsZSBvciBhIHN5bWJvbGljIGxpbmsgYGZvb2AgKHRoaXMgaXMgY29uc2lzdGVudAorICAgd2l0aCB0aGUgd2F5IGhvdyBwYXRoc3BlYyB3b3JrcyBpbiBnZW5lcmFsIGluIGdpdCkuCisKKyAtIElmIHRoZSBwYXR0ZXJuIGRvZXMgbm90IGNvbnRhaW4gYSBzbGFzaCAnLycsIGdpdCB0cmVhdHMgaXQgYXMKKyAgIGEgc2hlbGwgZ2xvYiBwYXR0ZXJuIGFuZCBjaGVja3MgZm9yIGEgbWF0Y2ggYWdhaW5zdCB0aGUKKyAgIHBhdGhuYW1lIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgYC5naXRpZ25vcmVgIGZpbGUKKyAgIChyZWxhdGl2ZSB0byB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmsgdHJlZSBpZiBub3QgZnJvbSBhCisgICBgLmdpdGlnbm9yZWAgZmlsZSkuCisKKyAtIE90aGVyd2lzZSwgZ2l0IHRyZWF0cyB0aGUgcGF0dGVybiBhcyBhIHNoZWxsIGdsb2Igc3VpdGFibGUKKyAgIGZvciBjb25zdW1wdGlvbiBieSBmbm1hdGNoKDMpIHdpdGggdGhlIEZOTV9QQVRITkFNRSBmbGFnOgorICAgd2lsZGNhcmRzIGluIHRoZSBwYXR0ZXJuIHdpbGwgbm90IG1hdGNoIGEgLyBpbiB0aGUgcGF0aG5hbWUuCisgICBGb3IgZXhhbXBsZSwgIkRvY3VtZW50YXRpb24ve2FzdGVyaXNrfS5odG1sIiBtYXRjaGVzCisgICAiRG9jdW1lbnRhdGlvbi9naXQuaHRtbCIgYnV0IG5vdCAiRG9jdW1lbnRhdGlvbi9wcGMvcHBjLmh0bWwiCisgICBvciAidG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYuaHRtbCIuCisKKyAtIEEgbGVhZGluZyBzbGFzaCBtYXRjaGVzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGhuYW1lLgorICAgRm9yIGV4YW1wbGUsICIve2FzdGVyaXNrfS5jIiBtYXRjaGVzICJjYXQtZmlsZS5jIiBidXQgbm90CisgICAibW96aWxsYS1zaGExL3NoYTEuYyIuCisKK05PVEVTCistLS0tLQorCitUaGUgcHVycG9zZSBvZiBnaXRpZ25vcmUgZmlsZXMgaXMgdG8gZW5zdXJlIHRoYXQgY2VydGFpbiBmaWxlcworbm90IHRyYWNrZWQgYnkgZ2l0IHJlbWFpbiB1bnRyYWNrZWQuCisKK1RvIGlnbm9yZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIGEgZmlsZSB0aGF0IGlzIGFscmVhZHkgdHJhY2tlZCwKK3VzZSAnZ2l0IHVwZGF0ZS1pbmRleCB7bGl0ZGR9YXNzdW1lLXVuY2hhbmdlZCcuCisKK1RvIHN0b3AgdHJhY2tpbmcgYSBmaWxlIHRoYXQgaXMgY3VycmVudGx5IHRyYWNrZWQsIHVzZQorJ2dpdCBybSAtLWNhY2hlZCcuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICQgZ2l0IHN0YXR1cworICAgIFsuLi5dCisgICAgIyBVbnRyYWNrZWQgZmlsZXM6CisgICAgWy4uLl0KKyAgICAjICAgICAgIERvY3VtZW50YXRpb24vZm9vLmh0bWwKKyAgICAjICAgICAgIERvY3VtZW50YXRpb24vZ2l0aWdub3JlLmh0bWwKKyAgICAjICAgICAgIGZpbGUubworICAgICMgICAgICAgbGliLmEKKyAgICAjICAgICAgIHNyYy9pbnRlcm5hbC5vCisgICAgWy4uLl0KKyAgICAkIGNhdCAuZ2l0L2luZm8vZXhjbHVkZQorICAgICMgaWdub3JlIG9iamVjdHMgYW5kIGFyY2hpdmVzLCBhbnl3aGVyZSBpbiB0aGUgdHJlZS4KKyAgICAqLltvYV0KKyAgICAkIGNhdCBEb2N1bWVudGF0aW9uLy5naXRpZ25vcmUKKyAgICAjIGlnbm9yZSBnZW5lcmF0ZWQgaHRtbCBmaWxlcywKKyAgICAqLmh0bWwKKyAgICAjIGV4Y2VwdCBmb28uaHRtbCB3aGljaCBpcyBtYWludGFpbmVkIGJ5IGhhbmQKKyAgICAhZm9vLmh0bWwKKyAgICAkIGdpdCBzdGF0dXMKKyAgICBbLi4uXQorICAgICMgVW50cmFja2VkIGZpbGVzOgorICAgIFsuLi5dCisgICAgIyAgICAgICBEb2N1bWVudGF0aW9uL2Zvby5odG1sCisgICAgWy4uLl0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Fub3RoZXIgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAkIGNhdCAuZ2l0aWdub3JlCisgICAgdm1saW51eCoKKyAgICAkIGxzIGFyY2gvZm9vL2tlcm5lbC92bSoKKyAgICBhcmNoL2Zvby9rZXJuZWwvdm1saW51eC5sZHMuUworICAgICQgZWNobyAnIS92bWxpbnV4KicgPmFyY2gvZm9vL2tlcm5lbC8uZ2l0aWdub3JlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc2Vjb25kIC5naXRpZ25vcmUgcHJldmVudHMgZ2l0IGZyb20gaWdub3JpbmcKK2BhcmNoL2Zvby9rZXJuZWwvdm1saW51eC5sZHMuU2AuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcm1bMV0sIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXSwKK2xpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGsudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTdhMzU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRrLnR4dApAQCAtMCwwICsxLDExOSBAQAorZ2l0aygxKQorPT09PT09PQorCitOQU1FCistLS0tCitnaXRrIC0gVGhlIGdpdCByZXBvc2l0b3J5IGJyb3dzZXIKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0aycgWzxvcHRpb24+Li4uXSBbPHJldnM+XSBbLS1dIFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorRGlzcGxheXMgY2hhbmdlcyBpbiBhIHJlcG9zaXRvcnkgb3IgYSBzZWxlY3RlZCBzZXQgb2YgY29tbWl0cy4gVGhpcyBpbmNsdWRlcwordmlzdWFsaXppbmcgdGhlIGNvbW1pdCBncmFwaCwgc2hvd2luZyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGVhY2ggY29tbWl0LCBhbmQKK3RoZSBmaWxlcyBpbiB0aGUgdHJlZXMgb2YgZWFjaCByZXZpc2lvbi4KKworSGlzdG9yaWNhbGx5LCBnaXRrIHdhcyB0aGUgZmlyc3QgcmVwb3NpdG9yeSBicm93c2VyLiBJdCdzIHdyaXR0ZW4gaW4gdGNsL3RrCithbmQgc3RhcnRlZCBvZmYgaW4gYSBzZXBhcmF0ZSByZXBvc2l0b3J5IGJ1dCB3YXMgbGF0ZXIgbWVyZ2VkIGludG8gdGhlIG1haW4KK2dpdCByZXBvc2l0b3J5LgorCitPUFRJT05TCistLS0tLS0tCitUbyBjb250cm9sIHdoaWNoIHJldmlzaW9ucyB0byBzaG93LCB0aGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8KK3RoZSAnZ2l0IHJldi1saXN0JyBjb21tYW5kIChzZWUgbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0pLgorVGhpcyBtYW51YWwgcGFnZSBkZXNjcmliZXMgb25seSB0aGUgbW9zdAorZnJlcXVlbnRseSB1c2VkIG9wdGlvbnMuCisKKy1uIDxudW1iZXI+OjoKKy0tbWF4LWNvdW50PTxudW1iZXI+OjoKKworCUxpbWl0cyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgdG8gc2hvdy4KKworLS1zaW5jZT08ZGF0ZT46OgorCisJU2hvdyBjb21taXRzIG1vcmUgcmVjZW50IHRoYW4gYSBzcGVjaWZpYyBkYXRlLgorCistLXVudGlsPTxkYXRlPjo6CisKKwlTaG93IGNvbW1pdHMgb2xkZXIgdGhhbiBhIHNwZWNpZmljIGRhdGUuCisKKy0tYWxsOjoKKworCVNob3cgYWxsIGJyYW5jaGVzLgorCistLW1lcmdlOjoKKworCUFmdGVyIGFuIGF0dGVtcHQgdG8gbWVyZ2Ugc3RvcHMgd2l0aCBjb25mbGljdHMsIHNob3cgdGhlIGNvbW1pdHMgb24KKwl0aGUgaGlzdG9yeSBiZXR3ZWVuIHR3byBicmFuY2hlcyAoaS5lLiB0aGUgSEVBRCBhbmQgdGhlIE1FUkdFX0hFQUQpCisJdGhhdCBtb2RpZnkgdGhlIGNvbmZsaWN0ZWQgZmlsZXMgYW5kIGRvIG5vdCBleGlzdCBvbiBhbGwgdGhlIGhlYWRzCisJYmVpbmcgbWVyZ2VkLgorCistLWFyZ3NjbWQ9PGNvbW1hbmQ+OjoKKwlDb21tYW5kIHRvIGJlIHJ1biBlYWNoIHRpbWUgZ2l0ayBoYXMgdG8gZGV0ZXJtaW5lIHRoZSBsaXN0IG9mCisJPHJldnM+IHRvIHNob3cuICBUaGUgY29tbWFuZCBpcyBleHBlY3RlZCB0byBwcmludCBvbiBpdHMgc3RhbmRhcmQKKwlvdXRwdXQgYSBsaXN0IG9mIGFkZGl0aW9uYWwgcmV2cyB0byBiZSBzaG93biwgb25lIHBlciBsaW5lLgorCVVzZSB0aGlzIGluc3RlYWQgb2YgZXhwbGljaXRseSBzcGVjaWZ5aW5nIDxyZXZzPiBpZiB0aGUgc2V0IG9mCisJY29tbWl0cyB0byBzaG93IG1heSB2YXJ5IGJldHdlZW4gcmVmcmVzaGVzLgorCistLXNlbGVjdC1jb21taXQ9PHJlZj46OgorCisJQXV0b21hdGljYWxseSBzZWxlY3QgdGhlIHNwZWNpZmllZCBjb21taXQgYWZ0ZXIgbG9hZGluZyB0aGUgZ3JhcGguCisJRGVmYXVsdCBiZWhhdmlvciBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgJy0tc2VsZWN0LWNvbW1pdD1IRUFEJy4KKworPHJldnM+OjoKKworCUxpbWl0IHRoZSByZXZpc2lvbnMgdG8gc2hvdy4gVGhpcyBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHJldmlzaW9uCisJbWVhbmluZyBzaG93IGZyb20gdGhlIGdpdmVuIHJldmlzaW9uIGFuZCBiYWNrLCBvciBpdCBjYW4gYmUgYSByYW5nZSBpbgorCXRoZSBmb3JtICInPGZyb20+Jy4uJzx0bz4nIiB0byBzaG93IGFsbCByZXZpc2lvbnMgYmV0d2VlbiAnPGZyb20+JyBhbmQKKwliYWNrIHRvICc8dG8+Jy4gTm90ZSwgbW9yZSBhZHZhbmNlZCByZXZpc2lvbiBzZWxlY3Rpb24gY2FuIGJlIGFwcGxpZWQuCisJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgb2JqZWN0IG5hbWVzLCBzZWUKKwlsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKworPHBhdGg+Li4uOjoKKworCUxpbWl0IGNvbW1pdHMgdG8gdGhlIG9uZXMgdG91Y2hpbmcgZmlsZXMgaW4gdGhlIGdpdmVuIHBhdGhzLiBOb3RlLCB0bworCWF2b2lkIGFtYmlndWl0eSB3aXRoIHJlc3BlY3QgdG8gcmV2aXNpb24gbmFtZXMgdXNlICItLSIgdG8gc2VwYXJhdGUgdGhlIHBhdGhzCisJZnJvbSBhbnkgcHJlY2VkaW5nIG9wdGlvbnMuCisKK0V4YW1wbGVzCistLS0tLS0tLQorZ2l0ayB2Mi42LjEyLi4gaW5jbHVkZS9zY3NpIGRyaXZlcnMvc2NzaTo6CisKKwlTaG93IHRoZSBjaGFuZ2VzIHNpbmNlIHZlcnNpb24gJ3YyLjYuMTInIHRoYXQgY2hhbmdlZCBhbnkKKwlmaWxlIGluIHRoZSBpbmNsdWRlL3Njc2kgb3IgZHJpdmVycy9zY3NpIHN1YmRpcmVjdG9yaWVzCisKK2dpdGsgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iIFwtLSBnaXRrOjoKKworCVNob3cgdGhlIGNoYW5nZXMgZHVyaW5nIHRoZSBsYXN0IHR3byB3ZWVrcyB0byB0aGUgZmlsZSAnZ2l0aycuCisJVGhlICItLSIgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHRoZSAqYnJhbmNoKiBuYW1lZAorCSdnaXRrJworCitnaXRrIC0tbWF4LWNvdW50PTEwMCAtLWFsbCBcLS0gTWFrZWZpbGU6OgorCisJU2hvdyBhdCBtb3N0IDEwMCBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUgJ01ha2VmaWxlJy4gSW5zdGVhZCBvZiBvbmx5CisJbG9va2luZyBmb3IgY2hhbmdlcyBpbiB0aGUgY3VycmVudCBicmFuY2ggbG9vayBpbiBhbGwgYnJhbmNoZXMuCisKK0ZpbGVzCistLS0tLQorR2l0ayBjcmVhdGVzIHRoZSAuZ2l0ayBmaWxlIGluIHlvdXIgJEhPTUUgZGlyZWN0b3J5IHRvIHN0b3JlIHByZWZlcmVuY2VzCitzdWNoIGFzIGRpc3BsYXkgb3B0aW9ucywgZm9udCwgYW5kIGNvbG9ycy4KKworU0VFIEFMU08KKy0tLS0tLS0tCisncWdpdCgxKSc6OgorCUEgcmVwb3NpdG9yeSBicm93c2VyIHdyaXR0ZW4gaW4gQysrIHVzaW5nIFF0LgorCisnZ2l0dmlldygxKSc6OgorCUEgcmVwb3NpdG9yeSBicm93c2VyIHdyaXR0ZW4gaW4gUHl0aG9uIHVzaW5nIEd0ay4gSXQncyBiYXNlZCBvbgorCSdienJrKDEpJyBhbmQgZGlzdHJpYnV0ZWQgaW4gdGhlIGNvbnRyaWIgYXJlYSBvZiB0aGUgZ2l0IHJlcG9zaXRvcnkuCisKKyd0aWcoMSknOjoKKwlBIG1pbmltYWwgcmVwb3NpdG9yeSBicm93c2VyIGFuZCBnaXQgdG9vbCBvdXRwdXQgaGlnaGxpZ2h0ZXIgd3JpdHRlbgorCWluIEMgdXNpbmcgTmN1cnNlcy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWZmZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dApAQCAtMCwwICsxLDk4IEBACitnaXRtb2R1bGVzKDUpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdG1vZHVsZXMgLSBkZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcworCitTWU5PUFNJUworLS0tLS0tLS0KKyRHSVRfV09SS19ESVIvLmdpdG1vZHVsZXMKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhlIGAuZ2l0bW9kdWxlc2AgZmlsZSwgbG9jYXRlZCBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiBhIGdpdAord29ya2luZyB0cmVlLCBpcyBhIHRleHQgZmlsZSB3aXRoIGEgc3ludGF4IG1hdGNoaW5nIHRoZSByZXF1aXJlbWVudHMKK29mIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworVGhlIGZpbGUgY29udGFpbnMgb25lIHN1YnNlY3Rpb24gcGVyIHN1Ym1vZHVsZSwgYW5kIHRoZSBzdWJzZWN0aW9uIHZhbHVlCitpcyB0aGUgbmFtZSBvZiB0aGUgc3VibW9kdWxlLiBFYWNoIHN1Ym1vZHVsZSBzZWN0aW9uIGFsc28gY29udGFpbnMgdGhlCitmb2xsb3dpbmcgcmVxdWlyZWQga2V5czoKKworc3VibW9kdWxlLjxuYW1lPi5wYXRoOjoKKwlEZWZpbmVzIHRoZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgZ2l0CisJd29ya2luZyB0cmVlLCB3aGVyZSB0aGUgc3VibW9kdWxlIGlzIGV4cGVjdGVkIHRvIGJlIGNoZWNrZWQgb3V0LgorCVRoZSBwYXRoIG5hbWUgbXVzdCBub3QgZW5kIHdpdGggYSBgL2AuIEFsbCBzdWJtb2R1bGUgcGF0aHMgbXVzdAorCWJlIHVuaXF1ZSB3aXRoaW4gdGhlIC5naXRtb2R1bGVzIGZpbGUuCisKK3N1Ym1vZHVsZS48bmFtZT4udXJsOjoKKwlEZWZpbmVzIGEgVVJMIGZyb20gd2hpY2ggdGhlIHN1Ym1vZHVsZSByZXBvc2l0b3J5IGNhbiBiZSBjbG9uZWQuCisJVGhpcyBtYXkgYmUgZWl0aGVyIGFuIGFic29sdXRlIFVSTCByZWFkeSB0byBiZSBwYXNzZWQgdG8KKwlsaW5rZ2l0OmdpdC1jbG9uZVsxXSBvciAoaWYgaXQgYmVnaW5zIHdpdGggLi8gb3IgLi4vKSBhIGxvY2F0aW9uCisJcmVsYXRpdmUgdG8gdGhlIHN1cGVycHJvamVjdCdzIG9yaWdpbiByZXBvc2l0b3J5LgorCitzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZTo6CisJRGVmaW5lcyB3aGF0IHRvIGRvIHdoZW4gdGhlIHN1Ym1vZHVsZSBpcyB1cGRhdGVkIGJ5IHRoZSBzdXBlcnByb2plY3QuCisJSWYgJ2NoZWNrb3V0JyAodGhlIGRlZmF1bHQpLCB0aGUgbmV3IGNvbW1pdCBzcGVjaWZpZWQgaW4gdGhlCisJc3VwZXJwcm9qZWN0IHdpbGwgYmUgY2hlY2tlZCBvdXQgaW4gdGhlIHN1Ym1vZHVsZSBvbiBhIGRldGFjaGVkIEhFQUQuCisJSWYgJ3JlYmFzZScsIHRoZSBjdXJyZW50IGJyYW5jaCBvZiB0aGUgc3VibW9kdWxlIHdpbGwgYmUgcmViYXNlZCBvbnRvCisJdGhlIGNvbW1pdCBzcGVjaWZpZWQgaW4gdGhlIHN1cGVycHJvamVjdC4gSWYgJ21lcmdlJywgdGhlIGNvbW1pdAorCXNwZWNpZmllZCBpbiB0aGUgc3VwZXJwcm9qZWN0IHdpbGwgYmUgbWVyZ2VkIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoCisJaW4gdGhlIHN1Ym1vZHVsZS4KKwlJZiAnbm9uZScsIHRoZSBzdWJtb2R1bGUgd2l0aCBuYW1lIGAkbmFtZWAgd2lsbCBub3QgYmUgdXBkYXRlZAorCWJ5IGRlZmF1bHQuCisKKwlUaGlzIGNvbmZpZyBvcHRpb24gaXMgb3ZlcnJpZGRlbiBpZiAnZ2l0IHN1Ym1vZHVsZSB1cGRhdGUnIGlzIGdpdmVuCisJdGhlICctLW1lcmdlJywgJy0tcmViYXNlJyBvciAnLS1jaGVja291dCcgb3B0aW9ucy4KKworc3VibW9kdWxlLjxuYW1lPi5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzOjoKKwlUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiB0aGlzCisJc3VibW9kdWxlLiBJZiB0aGlzIG9wdGlvbiBpcyBhbHNvIHByZXNlbnQgaW4gdGhlIHN1Ym1vZHVsZXMgZW50cnkgaW4KKwkuZ2l0L2NvbmZpZyBvZiB0aGUgc3VwZXJwcm9qZWN0LCB0aGUgc2V0dGluZyB0aGVyZSB3aWxsIG92ZXJyaWRlIHRoZQorCW9uZSBmb3VuZCBpbiAuZ2l0bW9kdWxlcy4KKwlCb3RoIHNldHRpbmdzIGNhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBjb21tYW5kIGxpbmUgYnkgdXNpbmcgdGhlCisJIi0tW25vLV1yZWN1cnNlLXN1Ym1vZHVsZXMiIG9wdGlvbiB0byAiZ2l0IGZldGNoIiBhbmQgImdpdCBwdWxsIi4KKworc3VibW9kdWxlLjxuYW1lPi5pZ25vcmU6OgorCURlZmluZXMgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzICJnaXQgc3RhdHVzIiBhbmQgdGhlIGRpZmYgZmFtaWx5IHNob3cKKwlhIHN1Ym1vZHVsZSBhcyBtb2RpZmllZC4gV2hlbiBzZXQgdG8gImFsbCIsIGl0IHdpbGwgbmV2ZXIgYmUgY29uc2lkZXJlZAorCW1vZGlmaWVkLCAiZGlydHkiIHdpbGwgaWdub3JlIGFsbCBjaGFuZ2VzIHRvIHRoZSBzdWJtb2R1bGVzIHdvcmsgdHJlZSBhbmQKKwl0YWtlcyBvbmx5IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIEhFQUQgb2YgdGhlIHN1Ym1vZHVsZSBhbmQgdGhlIGNvbW1pdAorCXJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QgaW50byBhY2NvdW50LiAidW50cmFja2VkIiB3aWxsIGFkZGl0aW9uYWxseQorCWxldCBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgdHJhY2tlZCBmaWxlcyBpbiB0aGVpciB3b3JrIHRyZWUgc2hvdyB1cC4KKwlVc2luZyAibm9uZSIgKHRoZSBkZWZhdWx0IHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHNldCkgYWxzbyBzaG93cworCXN1Ym1vZHVsZXMgdGhhdCBoYXZlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVpciB3b3JrIHRyZWUgYXMgY2hhbmdlZC4KKwlJZiB0aGlzIG9wdGlvbiBpcyBhbHNvIHByZXNlbnQgaW4gdGhlIHN1Ym1vZHVsZXMgZW50cnkgaW4gLmdpdC9jb25maWcgb2YKKwl0aGUgc3VwZXJwcm9qZWN0LCB0aGUgc2V0dGluZyB0aGVyZSB3aWxsIG92ZXJyaWRlIHRoZSBvbmUgZm91bmQgaW4KKwkuZ2l0bW9kdWxlcy4KKwlCb3RoIHNldHRpbmdzIGNhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBjb21tYW5kIGxpbmUgYnkgdXNpbmcgdGhlCisJIi0taWdub3JlLXN1Ym1vZHVsZSIgb3B0aW9uLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitDb25zaWRlciB0aGUgZm9sbG93aW5nIC5naXRtb2R1bGVzIGZpbGU6CisKKwlbc3VibW9kdWxlICJsaWJmb28iXQorCQlwYXRoID0gaW5jbHVkZS9mb28KKwkJdXJsID0gZ2l0Oi8vZm9vLmNvbS9naXQvbGliLmdpdAorCisJW3N1Ym1vZHVsZSAibGliYmFyIl0KKwkJcGF0aCA9IGluY2x1ZGUvYmFyCisJCXVybCA9IGdpdDovL2Jhci5jb20vZ2l0L2xpYi5naXQKKworCitUaGlzIGRlZmluZXMgdHdvIHN1Ym1vZHVsZXMsIGBsaWJmb29gIGFuZCBgbGliYmFyYC4gVGhlc2UgYXJlIGV4cGVjdGVkIHRvCitiZSBjaGVja2VkIG91dCBpbiB0aGUgcGF0aHMgJ2luY2x1ZGUvZm9vJyBhbmQgJ2luY2x1ZGUvYmFyJywgYW5kIGZvciBib3RoCitzdWJtb2R1bGVzIGEgVVJMIGlzIHNwZWNpZmllZCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgY2xvbmluZyB0aGUgc3VibW9kdWxlcy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0gbGlua2dpdDpnaXQtY29uZmlnWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRuYW1lc3BhY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0bmFtZXNwYWNlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3MTNjZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0bmFtZXNwYWNlcy50eHQKQEAgLTAsMCArMSw4MiBAQAorZ2l0bmFtZXNwYWNlcyg3KQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRuYW1lc3BhY2VzIC0gR2l0IG5hbWVzcGFjZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitHSVRfTkFNRVNQQUNFPTxuYW1lc3BhY2U+ICdnaXQgdXBsb2FkLXBhY2snCitHSVRfTkFNRVNQQUNFPTxuYW1lc3BhY2U+ICdnaXQgcmVjZWl2ZS1wYWNrJworCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgc3VwcG9ydHMgZGl2aWRpbmcgdGhlIHJlZnMgb2YgYSBzaW5nbGUgcmVwb3NpdG9yeSBpbnRvIG11bHRpcGxlCituYW1lc3BhY2VzLCBlYWNoIG9mIHdoaWNoIGhhcyBpdHMgb3duIGJyYW5jaGVzLCB0YWdzLCBhbmQgSEVBRC4gIEdpdCBjYW4KK2V4cG9zZSBlYWNoIG5hbWVzcGFjZSBhcyBhbiBpbmRlcGVuZGVudCByZXBvc2l0b3J5IHRvIHB1bGwgZnJvbSBhbmQgcHVzaAordG8sIHdoaWxlIHNoYXJpbmcgdGhlIG9iamVjdCBzdG9yZSwgYW5kIGV4cG9zaW5nIGFsbCB0aGUgcmVmcyB0bworb3BlcmF0aW9ucyBzdWNoIGFzIGxpbmtnaXQ6Z2l0LWdjWzFdLgorCitTdG9yaW5nIG11bHRpcGxlIHJlcG9zaXRvcmllcyBhcyBuYW1lc3BhY2VzIG9mIGEgc2luZ2xlIHJlcG9zaXRvcnkKK2F2b2lkcyBzdG9yaW5nIGR1cGxpY2F0ZSBjb3BpZXMgb2YgdGhlIHNhbWUgb2JqZWN0cywgc3VjaCBhcyB3aGVuCitzdG9yaW5nIG11bHRpcGxlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIHNvdXJjZS4gIFRoZSBhbHRlcm5hdGVzIG1lY2hhbmlzbQorcHJvdmlkZXMgc2ltaWxhciBzdXBwb3J0IGZvciBhdm9pZGluZyBkdXBsaWNhdGVzLCBidXQgYWx0ZXJuYXRlcyBkbyBub3QKK3ByZXZlbnQgZHVwbGljYXRpb24gYmV0d2VlbiBuZXcgb2JqZWN0cyBhZGRlZCB0byB0aGUgcmVwb3NpdG9yaWVzCit3aXRob3V0IG9uZ29pbmcgbWFpbnRlbmFuY2UsIHdoaWxlIG5hbWVzcGFjZXMgZG8uCisKK1RvIHNwZWNpZnkgYSBuYW1lc3BhY2UsIHNldCB0aGUgYEdJVF9OQU1FU1BBQ0VgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvCit0aGUgbmFtZXNwYWNlLiAgRm9yIGVhY2ggcmVmIG5hbWVzcGFjZSwgZ2l0IHN0b3JlcyB0aGUgY29ycmVzcG9uZGluZworcmVmcyBpbiBhIGRpcmVjdG9yeSB1bmRlciBgcmVmcy9uYW1lc3BhY2VzL2AuICBGb3IgZXhhbXBsZSwKK2BHSVRfTkFNRVNQQUNFPWZvb2Agd2lsbCBzdG9yZSByZWZzIHVuZGVyIGByZWZzL25hbWVzcGFjZXMvZm9vL2AuICBZb3UKK2NhbiBhbHNvIHNwZWNpZnkgbmFtZXNwYWNlcyB2aWEgdGhlIGAtLW5hbWVzcGFjZWAgb3B0aW9uIHRvCitsaW5rZ2l0OmdpdFsxXS4KKworTm90ZSB0aGF0IG5hbWVzcGFjZXMgd2hpY2ggaW5jbHVkZSBhIGAvYCB3aWxsIGV4cGFuZCB0byBhIGhpZXJhcmNoeSBvZgorbmFtZXNwYWNlczsgZm9yIGV4YW1wbGUsIGBHSVRfTkFNRVNQQUNFPWZvby9iYXJgIHdpbGwgc3RvcmUgcmVmcyB1bmRlcgorYHJlZnMvbmFtZXNwYWNlcy9mb28vcmVmcy9uYW1lc3BhY2VzL2Jhci9gLiAgVGhpcyBtYWtlcyBwYXRocyBpbgorYEdJVF9OQU1FU1BBQ0VgIGJlaGF2ZSBoaWVyYXJjaGljYWxseSwgc28gdGhhdCBjbG9uaW5nIHdpdGgKK2BHSVRfTkFNRVNQQUNFPWZvby9iYXJgIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdCBhcyBjbG9uaW5nIHdpdGgKK2BHSVRfTkFNRVNQQUNFPWZvb2AgYW5kIGNsb25pbmcgZnJvbSB0aGF0IHJlcG8gd2l0aCBgR0lUX05BTUVTUEFDRT1iYXJgLiAgSXQKK2Fsc28gYXZvaWRzIGFtYmlndWl0eSB3aXRoIHN0cmFuZ2UgbmFtZXNwYWNlIHBhdGhzIHN1Y2ggYXMgYGZvby9yZWZzL2hlYWRzL2AsCit3aGljaCBjb3VsZCBvdGhlcndpc2UgZ2VuZXJhdGUgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3RzIHdpdGhpbiB0aGUgYHJlZnNgCitkaXJlY3RvcnkuCisKK2xpbmtnaXQ6Z2l0LXVwbG9hZC1wYWNrWzFdIGFuZCBsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0gcmV3cml0ZSB0aGUKK25hbWVzIG9mIHJlZnMgYXMgc3BlY2lmaWVkIGJ5IGBHSVRfTkFNRVNQQUNFYC4gIGdpdC11cGxvYWQtcGFjayBhbmQKK2dpdC1yZWNlaXZlLXBhY2sgd2lsbCBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgb3V0c2lkZSB0aGUgc3BlY2lmaWVkCituYW1lc3BhY2UuCisKK1RoZSBzbWFydCBIVFRQIHNlcnZlciwgbGlua2dpdDpnaXQtaHR0cC1iYWNrZW5kWzFdLCB3aWxsIHBhc3MKK0dJVF9OQU1FU1BBQ0UgdGhyb3VnaCB0byB0aGUgYmFja2VuZCBwcm9ncmFtczsgc2VlCitsaW5rZ2l0OmdpdC1odHRwLWJhY2tlbmRbMV0gZm9yIHNhbXBsZSBjb25maWd1cmF0aW9uIHRvIGV4cG9zZQorcmVwb3NpdG9yeSBuYW1lc3BhY2VzIGFzIHJlcG9zaXRvcmllcy4KKworRm9yIGEgc2ltcGxlIGxvY2FsIHRlc3QsIHlvdSBjYW4gdXNlIGxpbmtnaXQ6Z2l0LXJlbW90ZS1leHRbMV06CisKKy0tLS0tLS0tLS0KK2dpdCBjbG9uZSBleHQ6OidnaXQgLS1uYW1lc3BhY2U9Zm9vICVzIC90bXAvcHJlZml4ZWQuZ2l0JworLS0tLS0tLS0tLQorCitTRUNVUklUWQorLS0tLS0tLS0KKworQW55b25lIHdpdGggYWNjZXNzIHRvIGFueSBuYW1lc3BhY2Ugd2l0aGluIGEgcmVwb3NpdG9yeSBjYW4gcG90ZW50aWFsbHkKK2FjY2VzcyBvYmplY3RzIGZyb20gYW55IG90aGVyIG5hbWVzcGFjZSBzdG9yZWQgaW4gdGhlIHNhbWUgcmVwb3NpdG9yeS4KK1lvdSBjYW4ndCBkaXJlY3RseSBzYXkgImdpdmUgbWUgb2JqZWN0IEFCQ0QiIGlmIHlvdSBkb24ndCBoYXZlIGEgcmVmIHRvCitpdCwgYnV0IHlvdSBjYW4gZG8gc29tZSBvdGhlciBzbmVha3kgdGhpbmdzIGxpa2U6CisKKy4gQ2xhaW1pbmcgdG8gcHVzaCBBQkNELCBhdCB3aGljaCBwb2ludCB0aGUgc2VydmVyIHdpbGwgb3B0aW1pemUgb3V0IHRoZQorICBuZWVkIGZvciB5b3UgdG8gYWN0dWFsbHkgc2VuZCBpdC4gTm93IHlvdSBoYXZlIGEgcmVmIHRvIEFCQ0QgYW5kIGNhbgorICBmZXRjaCBpdCAoY2xhaW1pbmcgbm90IHRvIGhhdmUgaXQsIG9mIGNvdXJzZSkuCisKKy4gUmVxdWVzdGluZyBvdGhlciByZWZzLCBjbGFpbWluZyB0aGF0IHlvdSBoYXZlIEFCQ0QsIGF0IHdoaWNoIHBvaW50IHRoZQorICBzZXJ2ZXIgbWF5IGdlbmVyYXRlIGRlbHRhcyBhZ2FpbnN0IEFCQ0QuCisKK05vbmUgb2YgdGhpcyBjYXVzZXMgYSBwcm9ibGVtIGlmIHlvdSBvbmx5IGhvc3QgcHVibGljIHJlcG9zaXRvcmllcywgb3IKK2lmIGV2ZXJ5b25lIHdobyBtYXkgcmVhZCBvbmUgbmFtZXNwYWNlIG1heSBhbHNvIHJlYWQgZXZlcnl0aGluZyBpbiBldmVyeQorb3RoZXIgbmFtZXNwYWNlIChmb3IgaW5zdGFuY2UsIGlmIGV2ZXJ5b25lIGluIGFuIG9yZ2FuaXphdGlvbiBoYXMgcmVhZAorcGVybWlzc2lvbiB0byBldmVyeSByZXBvc2l0b3J5KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRyZXBvc2l0b3J5LWxheW91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4OTFmMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0CkBAIC0wLDAgKzEsMjA1IEBACitnaXRyZXBvc2l0b3J5LWxheW91dCg1KQorPT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0cmVwb3NpdG9yeS1sYXlvdXQgLSBHaXQgUmVwb3NpdG9yeSBMYXlvdXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCiskR0lUX0RJUi8qCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitZb3UgbWF5IGZpbmQgdGhlc2UgdGhpbmdzIGluIHlvdXIgZ2l0IHJlcG9zaXRvcnkgKGAuZ2l0YAorZGlyZWN0b3J5IGZvciBhIHJlcG9zaXRvcnkgYXNzb2NpYXRlZCB3aXRoIHlvdXIgd29ya2luZyB0cmVlLCBvcgorYDxwcm9qZWN0Pi5naXRgIGRpcmVjdG9yeSBmb3IgYSBwdWJsaWMgJ2JhcmUnIHJlcG9zaXRvcnkuIEl0IGlzCithbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSB3b3JraW5nIHRyZWUgd2hlcmUgYC5naXRgIGlzIGEgcGxhaW4KK0FTQ0lJIGZpbGUgY29udGFpbmluZyBgZ2l0ZGlyOiA8cGF0aD5gLCBpLmUuIHRoZSBwYXRoIHRvIHRoZQorcmVhbCBnaXQgcmVwb3NpdG9yeSkuCisKK29iamVjdHM6OgorCU9iamVjdCBzdG9yZSBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXBvc2l0b3J5LiAgVXN1YWxseQorCWFuIG9iamVjdCBzdG9yZSBpcyBzZWxmIHN1ZmZpY2llbnQgKGkuZS4gYWxsIHRoZSBvYmplY3RzCisJdGhhdCBhcmUgcmVmZXJyZWQgdG8gYnkgYW4gb2JqZWN0IGZvdW5kIGluIGl0IGFyZSBhbHNvCisJZm91bmQgaW4gaXQpLCBidXQgdGhlcmUgYXJlIGEgZmV3IHdheXMgdG8gdmlvbGF0ZSBpdC4KKysKKy4gWW91IGNvdWxkIGhhdmUgYW4gaW5jb21wbGV0ZSBidXQgbG9jYWxseSB1c2FibGUgcmVwb3NpdG9yeQorYnkgY3JlYXRpbmcgYSBzaGFsbG93IGNsb25lLiAgU2VlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdLgorLiBZb3UgY291bGQgYmUgdXNpbmcgdGhlIGBvYmplY3RzL2luZm8vYWx0ZXJuYXRlc2Agb3IKK2AkR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVNgIG1lY2hhbmlzbXMgdG8gJ2JvcnJvdycKK29iamVjdHMgZnJvbSBvdGhlciBvYmplY3Qgc3RvcmVzLiAgQSByZXBvc2l0b3J5IHdpdGggdGhpcyBraW5kCitvZiBpbmNvbXBsZXRlIG9iamVjdCBzdG9yZSBpcyBub3Qgc3VpdGFibGUgdG8gYmUgcHVibGlzaGVkIGZvcgordXNlIHdpdGggZHVtYiB0cmFuc3BvcnRzIGJ1dCBvdGhlcndpc2UgaXMgT0sgYXMgbG9uZyBhcworYG9iamVjdHMvaW5mby9hbHRlcm5hdGVzYCBwb2ludHMgYXQgdGhlIG9iamVjdCBzdG9yZXMgaXQKK2JvcnJvd3MgZnJvbS4KKworb2JqZWN0cy9bMC05YS1mXVswLTlhLWZdOjoKKwlBIG5ld2x5IGNyZWF0ZWQgb2JqZWN0IGlzIHN0b3JlZCBpbiBpdHMgb3duIGZpbGUuCisJVGhlIG9iamVjdHMgYXJlIHNwbGF5ZWQgb3ZlciAyNTYgc3ViZGlyZWN0b3JpZXMgdXNpbmcKKwl0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgb2YgdGhlIHNoYTEgb2JqZWN0IG5hbWUgdG8KKwlrZWVwIHRoZSBudW1iZXIgb2YgZGlyZWN0b3J5IGVudHJpZXMgaW4gYG9iamVjdHNgCisJaXRzZWxmIHRvIGEgbWFuYWdlYWJsZSBudW1iZXIuIE9iamVjdHMgZm91bmQKKwloZXJlIGFyZSBvZnRlbiBjYWxsZWQgJ3VucGFja2VkJyAob3IgJ2xvb3NlJykgb2JqZWN0cy4KKworb2JqZWN0cy9wYWNrOjoKKwlQYWNrcyAoZmlsZXMgdGhhdCBzdG9yZSBtYW55IG9iamVjdCBpbiBjb21wcmVzc2VkIGZvcm0sCisJYWxvbmcgd2l0aCBpbmRleCBmaWxlcyB0byBhbGxvdyB0aGVtIHRvIGJlIHJhbmRvbWx5CisJYWNjZXNzZWQpIGFyZSBmb3VuZCBpbiB0aGlzIGRpcmVjdG9yeS4KKworb2JqZWN0cy9pbmZvOjoKKwlBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3Qgc3RvcmUgaXMKKwlyZWNvcmRlZCBpbiB0aGlzIGRpcmVjdG9yeS4KKworb2JqZWN0cy9pbmZvL3BhY2tzOjoKKwlUaGlzIGZpbGUgaXMgdG8gaGVscCBkdW1iIHRyYW5zcG9ydHMgZGlzY292ZXIgd2hhdCBwYWNrcworCWFyZSBhdmFpbGFibGUgaW4gdGhpcyBvYmplY3Qgc3RvcmUuICBXaGVuZXZlciBhIHBhY2sgaXMKKwlhZGRlZCBvciByZW1vdmVkLCBgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mb2Agc2hvdWxkIGJlIHJ1bgorCXRvIGtlZXAgdGhpcyBmaWxlIHVwLXRvLWRhdGUgaWYgdGhlIHJlcG9zaXRvcnkgaXMKKwlwdWJsaXNoZWQgZm9yIGR1bWIgdHJhbnNwb3J0cy4gICdnaXQgcmVwYWNrJyBkb2VzIHRoaXMKKwlieSBkZWZhdWx0LgorCitvYmplY3RzL2luZm8vYWx0ZXJuYXRlczo6CisJVGhpcyBmaWxlIHJlY29yZHMgcGF0aHMgdG8gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMgdGhhdAorCXRoaXMgb2JqZWN0IHN0b3JlIGJvcnJvd3Mgb2JqZWN0cyBmcm9tLCBvbmUgcGF0aG5hbWUgcGVyCisJbGluZS4gTm90ZSB0aGF0IG5vdCBvbmx5IG5hdGl2ZSBHaXQgdG9vbHMgdXNlIGl0IGxvY2FsbHksCisJYnV0IHRoZSBIVFRQIGZldGNoZXIgYWxzbyB0cmllcyB0byB1c2UgaXQgcmVtb3RlbHk7IHRoaXMKKwl3aWxsIHVzdWFsbHkgd29yayBpZiB5b3UgaGF2ZSByZWxhdGl2ZSBwYXRocyAocmVsYXRpdmUKKwl0byB0aGUgb2JqZWN0IGRhdGFiYXNlLCBub3QgdG8gdGhlIHJlcG9zaXRvcnkhKSBpbiB5b3VyCisJYWx0ZXJuYXRlcyBmaWxlLCBidXQgaXQgd2lsbCBub3Qgd29yayBpZiB5b3UgdXNlIGFic29sdXRlCisJcGF0aHMgdW5sZXNzIHRoZSBhYnNvbHV0ZSBwYXRoIGluIGZpbGVzeXN0ZW0gYW5kIHdlYiBVUkwKKwlpcyB0aGUgc2FtZS4gU2VlIGFsc28gJ29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMnLgorCitvYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzOjoKKwlUaGlzIGZpbGUgcmVjb3JkcyBVUkxzIHRvIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzIHRoYXQKKwl0aGlzIG9iamVjdCBzdG9yZSBib3Jyb3dzIG9iamVjdHMgZnJvbSwgdG8gYmUgdXNlZCB3aGVuCisJdGhlIHJlcG9zaXRvcnkgaXMgZmV0Y2hlZCBvdmVyIEhUVFAuCisKK3JlZnM6OgorCVJlZmVyZW5jZXMgYXJlIHN0b3JlZCBpbiBzdWJkaXJlY3RvcmllcyBvZiB0aGlzCisJZGlyZWN0b3J5LiAgVGhlICdnaXQgcHJ1bmUnIGNvbW1hbmQga25vd3MgdG8gcHJlc2VydmUKKwlvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHJlZnMgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnkgYW5kCisJaXRzIHN1YmRpcmVjdG9yaWVzLgorCityZWZzL2hlYWRzL2BuYW1lYDo6CisJcmVjb3JkcyB0aXAtb2YtdGhlLXRyZWUgY29tbWl0IG9iamVjdHMgb2YgYnJhbmNoIGBuYW1lYAorCityZWZzL3RhZ3MvYG5hbWVgOjoKKwlyZWNvcmRzIGFueSBvYmplY3QgbmFtZSAobm90IG5lY2Vzc2FyaWx5IGEgY29tbWl0CisJb2JqZWN0LCBvciBhIHRhZyBvYmplY3QgdGhhdCBwb2ludHMgYXQgYSBjb21taXQgb2JqZWN0KS4KKworcmVmcy9yZW1vdGVzL2BuYW1lYDo6CisJcmVjb3JkcyB0aXAtb2YtdGhlLXRyZWUgY29tbWl0IG9iamVjdHMgb2YgYnJhbmNoZXMgY29waWVkCisJZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LgorCitwYWNrZWQtcmVmczo6CisJcmVjb3JkcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyByZWZzL2hlYWRzLywgcmVmcy90YWdzLywKKwlhbmQgZnJpZW5kcyByZWNvcmQgaW4gYSBtb3JlIGVmZmljaWVudCB3YXkuICBTZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLXJlZnNbMV0uCisKK0hFQUQ6OgorCUEgc3ltcmVmIChzZWUgZ2xvc3NhcnkpIHRvIHRoZSBgcmVmcy9oZWFkcy9gIG5hbWVzcGFjZQorCWRlc2NyaWJpbmcgdGhlIGN1cnJlbnRseSBhY3RpdmUgYnJhbmNoLiAgSXQgZG9lcyBub3QgbWVhbgorCW11Y2ggaWYgdGhlIHJlcG9zaXRvcnkgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgd29ya2luZyB0cmVlCisJKGkuZS4gYSAnYmFyZScgcmVwb3NpdG9yeSksIGJ1dCBhIHZhbGlkIGdpdCByZXBvc2l0b3J5CisJKm11c3QqIGhhdmUgdGhlIEhFQUQgZmlsZTsgc29tZSBwb3JjZWxhaW5zIG1heSB1c2UgaXQgdG8KKwlndWVzcyB0aGUgZGVzaWduYXRlZCAiZGVmYXVsdCIgYnJhbmNoIG9mIHRoZSByZXBvc2l0b3J5CisJKHVzdWFsbHkgJ21hc3RlcicpLiAgSXQgaXMgbGVnYWwgaWYgdGhlIG5hbWVkIGJyYW5jaAorCSduYW1lJyBkb2VzIG5vdCAoeWV0KSBleGlzdC4gIEluIHNvbWUgbGVnYWN5IHNldHVwcywgaXQgaXMKKwlhIHN5bWJvbGljIGxpbmsgaW5zdGVhZCBvZiBhIHN5bXJlZiB0aGF0IHBvaW50cyBhdCB0aGUgY3VycmVudAorCWJyYW5jaC4KKysKK0hFQUQgY2FuIGFsc28gcmVjb3JkIGEgc3BlY2lmaWMgY29tbWl0IGRpcmVjdGx5LCBpbnN0ZWFkIG9mCitiZWluZyBhIHN5bXJlZiB0byBwb2ludCBhdCB0aGUgY3VycmVudCBicmFuY2guICBTdWNoIGEgc3RhdGUKK2lzIG9mdGVuIGNhbGxlZCAnZGV0YWNoZWQgSEVBRC4nICBTZWUgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0KK2ZvciBkZXRhaWxzLgorCiticmFuY2hlczo6CisJQSBzbGlnaHRseSBkZXByZWNhdGVkIHdheSB0byBzdG9yZSBzaG9ydGhhbmRzIHRvIGJlIHVzZWQKKwl0byBzcGVjaWZ5IGEgVVJMIHRvICdnaXQgZmV0Y2gnLCAnZ2l0IHB1bGwnIGFuZCAnZ2l0IHB1c2gnLgorCUEgZmlsZSBjYW4gYmUgc3RvcmVkIGFzIGBicmFuY2hlcy88bmFtZT5gIGFuZCB0aGVuCisJJ25hbWUnIGNhbiBiZSBnaXZlbiB0byB0aGVzZSBjb21tYW5kcyBpbiBwbGFjZSBvZgorCSdyZXBvc2l0b3J5JyBhcmd1bWVudC4gIFNlZSB0aGUgUkVNT1RFUyBzZWN0aW9uIGluCisJbGlua2dpdDpnaXQtZmV0Y2hbMV0gZm9yIGRldGFpbHMuICBUaGlzIG1lY2hhbmlzbSBpcyBsZWdhY3kKKwlhbmQgbm90IGxpa2VseSB0byBiZSBmb3VuZCBpbiBtb2Rlcm4gcmVwb3NpdG9yaWVzLgorCitob29rczo6CisJSG9va3MgYXJlIGN1c3RvbWl6YXRpb24gc2NyaXB0cyB1c2VkIGJ5IHZhcmlvdXMgZ2l0CisJY29tbWFuZHMuICBBIGhhbmRmdWwgb2Ygc2FtcGxlIGhvb2tzIGFyZSBpbnN0YWxsZWQgd2hlbgorCSdnaXQgaW5pdCcgaXMgcnVuLCBidXQgYWxsIG9mIHRoZW0gYXJlIGRpc2FibGVkIGJ5CisJZGVmYXVsdC4gIFRvIGVuYWJsZSwgdGhlIGAuc2FtcGxlYCBzdWZmaXggaGFzIHRvIGJlCisJcmVtb3ZlZCBmcm9tIHRoZSBmaWxlbmFtZSBieSByZW5hbWluZy4KKwlSZWFkIGxpbmtnaXQ6Z2l0aG9va3NbNV0gZm9yIG1vcmUgZGV0YWlscyBhYm91dAorCWVhY2ggaG9vay4KKworaW5kZXg6OgorCVRoZSBjdXJyZW50IGluZGV4IGZpbGUgZm9yIHRoZSByZXBvc2l0b3J5LiAgSXQgaXMKKwl1c3VhbGx5IG5vdCBmb3VuZCBpbiBhIGJhcmUgcmVwb3NpdG9yeS4KKworaW5mbzo6CisJQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVwb3NpdG9yeSBpcyByZWNvcmRlZAorCWluIHRoaXMgZGlyZWN0b3J5LgorCitpbmZvL3JlZnM6OgorCVRoaXMgZmlsZSBoZWxwcyBkdW1iIHRyYW5zcG9ydHMgZGlzY292ZXIgd2hhdCByZWZzIGFyZQorCWF2YWlsYWJsZSBpbiB0aGlzIHJlcG9zaXRvcnkuICBJZiB0aGUgcmVwb3NpdG9yeSBpcworCXB1Ymxpc2hlZCBmb3IgZHVtYiB0cmFuc3BvcnRzLCB0aGlzIGZpbGUgc2hvdWxkIGJlCisJcmVnZW5lcmF0ZWQgYnkgJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nIGV2ZXJ5IHRpbWUgYSB0YWcKKwlvciBicmFuY2ggaXMgY3JlYXRlZCBvciBtb2RpZmllZC4gIFRoaXMgaXMgbm9ybWFsbHkgZG9uZQorCWZyb20gdGhlIGBob29rcy91cGRhdGVgIGhvb2ssIHdoaWNoIGlzIHJ1biBieSB0aGUKKwknZ2l0LXJlY2VpdmUtcGFjaycgY29tbWFuZCB3aGVuIHlvdSAnZ2l0IHB1c2gnIGludG8gdGhlCisJcmVwb3NpdG9yeS4KKworaW5mby9ncmFmdHM6OgorCVRoaXMgZmlsZSByZWNvcmRzIGZha2UgY29tbWl0IGFuY2VzdHJ5IGluZm9ybWF0aW9uLCB0bworCXByZXRlbmQgdGhlIHNldCBvZiBwYXJlbnRzIGEgY29tbWl0IGhhcyBpcyBkaWZmZXJlbnQKKwlmcm9tIGhvdyB0aGUgY29tbWl0IHdhcyBhY3R1YWxseSBjcmVhdGVkLiAgT25lIHJlY29yZAorCXBlciBsaW5lIGRlc2NyaWJlcyBhIGNvbW1pdCBhbmQgaXRzIGZha2UgcGFyZW50cyBieQorCWxpc3RpbmcgdGhlaXIgNDAtYnl0ZSBoZXhhZGVjaW1hbCBvYmplY3QgbmFtZXMgc2VwYXJhdGVkCisJYnkgYSBzcGFjZSBhbmQgdGVybWluYXRlZCBieSBhIG5ld2xpbmUuCisKK2luZm8vZXhjbHVkZTo6CisJVGhpcyBmaWxlLCBieSBjb252ZW50aW9uIGFtb25nIFBvcmNlbGFpbnMsIHN0b3JlcyB0aGUKKwlleGNsdWRlIHBhdHRlcm4gbGlzdC4gYC5naXRpZ25vcmVgIGlzIHRoZSBwZXItZGlyZWN0b3J5CisJaWdub3JlIGZpbGUuICAnZ2l0IHN0YXR1cycsICdnaXQgYWRkJywgJ2dpdCBybScgYW5kCisJJ2dpdCBjbGVhbicgbG9vayBhdCBpdCBidXQgdGhlIGNvcmUgZ2l0IGNvbW1hbmRzIGRvIG5vdCBsb29rCisJYXQgaXQuICBTZWUgYWxzbzogbGlua2dpdDpnaXRpZ25vcmVbNV0uCisKK3JlbW90ZXM6OgorCVN0b3JlcyBzaG9ydGhhbmRzIGZvciBVUkwgYW5kIGRlZmF1bHQgcmVmbmFtZXMgZm9yIHVzZQorCXdoZW4gaW50ZXJhY3Rpbmcgd2l0aCByZW1vdGUgcmVwb3NpdG9yaWVzIHZpYSAnZ2l0IGZldGNoJywKKwknZ2l0IHB1bGwnIGFuZCAnZ2l0IHB1c2gnIGNvbW1hbmRzLiAgU2VlIHRoZSBSRU1PVEVTIHNlY3Rpb24KKwlpbiBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBmb3IgZGV0YWlscy4gIFRoaXMgbWVjaGFuaXNtIGlzIGxlZ2FjeQorCWFuZCBub3QgbGlrZWx5IHRvIGJlIGZvdW5kIGluIG1vZGVybiByZXBvc2l0b3JpZXMuCisKK2xvZ3M6OgorCVJlY29yZHMgb2YgY2hhbmdlcyBtYWRlIHRvIHJlZnMgYXJlIHN0b3JlZCBpbiB0aGlzCisJZGlyZWN0b3J5LiAgU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1yZWZbMV0KKwlmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworbG9ncy9yZWZzL2hlYWRzL2BuYW1lYDo6CisJUmVjb3JkcyBhbGwgY2hhbmdlcyBtYWRlIHRvIHRoZSBicmFuY2ggdGlwIG5hbWVkIGBuYW1lYC4KKworbG9ncy9yZWZzL3RhZ3MvYG5hbWVgOjoKKwlSZWNvcmRzIGFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlIHRhZyBuYW1lZCBgbmFtZWAuCisKK3NoYWxsb3c6OgorCVRoaXMgaXMgc2ltaWxhciB0byBgaW5mby9ncmFmdHNgIGJ1dCBpcyBpbnRlcm5hbGx5IHVzZWQKKwlhbmQgbWFpbnRhaW5lZCBieSBzaGFsbG93IGNsb25lIG1lY2hhbmlzbS4gIFNlZSBgLS1kZXB0aGAKKwlvcHRpb24gdG8gbGlua2dpdDpnaXQtY2xvbmVbMV0gYW5kIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWluaXRbMV0sCitsaW5rZ2l0OmdpdC1jbG9uZVsxXSwKK2xpbmtnaXQ6Z2l0LWZldGNoWzFdLAorbGlua2dpdDpnaXQtcGFjay1yZWZzWzFdLAorbGlua2dpdDpnaXQtZ2NbMV0sCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHJldmlzaW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHJldmlzaW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0Nzg5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0cmV2aXNpb25zLnR4dApAQCAtMCwwICsxLDM1IEBACitnaXRyZXZpc2lvbnMoNykKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0cmV2aXNpb25zIC0gc3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgZ2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorZ2l0cmV2aXNpb25zCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK01hbnkgR2l0IGNvbW1hbmRzIHRha2UgcmV2aXNpb24gcGFyYW1ldGVycyBhcyBhcmd1bWVudHMuIERlcGVuZGluZyBvbgordGhlIGNvbW1hbmQsIHRoZXkgZGVub3RlIGEgc3BlY2lmaWMgY29tbWl0IG9yLCBmb3IgY29tbWFuZHMgd2hpY2gKK3dhbGsgdGhlIHJldmlzaW9uIGdyYXBoIChzdWNoIGFzIGxpbmtnaXQ6Z2l0LWxvZ1sxXSksIGFsbCBjb21taXRzIHdoaWNoIGNhbgorYmUgcmVhY2hlZCBmcm9tIHRoYXQgY29tbWl0LiBJbiB0aGUgbGF0dGVyIGNhc2Ugb25lIGNhbiBhbHNvIHNwZWNpZnkgYQorcmFuZ2Ugb2YgcmV2aXNpb25zIGV4cGxpY2l0bHkuCisKK0luIGFkZGl0aW9uLCBzb21lIEdpdCBjb21tYW5kcyAoc3VjaCBhcyBsaW5rZ2l0OmdpdC1zaG93WzFdKSBhbHNvIHRha2UKK3JldmlzaW9uIHBhcmFtZXRlcnMgd2hpY2ggZGVub3RlIG90aGVyIG9iamVjdHMgdGhhbiBjb21taXRzLCBlLmcuIGJsb2JzCisoImZpbGVzIikgb3IgdHJlZXMgKCJkaXJlY3RvcmllcyBvZiBmaWxlcyIpLgorCitpbmNsdWRlOjpyZXZpc2lvbnMudHh0W10KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXJldi1wYXJzZVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMGE0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLTIudHh0CkBAIC0wLDAgKzEsNDM1IEBACitnaXR0dXRvcmlhbC0yKDcpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHR1dG9yaWFsLTIgLSBBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBnaXQ6IHBhcnQgdHdvCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZ2l0ICoKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1lvdSBzaG91bGQgd29yayB0aHJvdWdoIGxpbmtnaXQ6Z2l0dHV0b3JpYWxbN10gYmVmb3JlIHJlYWRpbmcgdGhpcyB0dXRvcmlhbC4KKworVGhlIGdvYWwgb2YgdGhpcyB0dXRvcmlhbCBpcyB0byBpbnRyb2R1Y2UgdHdvIGZ1bmRhbWVudGFsIHBpZWNlcyBvZgorZ2l0J3MgYXJjaGl0ZWN0dXJlLS10aGUgb2JqZWN0IGRhdGFiYXNlIGFuZCB0aGUgaW5kZXggZmlsZS0tYW5kIHRvCitwcm92aWRlIHRoZSByZWFkZXIgd2l0aCBldmVyeXRoaW5nIG5lY2Vzc2FyeSB0byB1bmRlcnN0YW5kIHRoZSByZXN0CitvZiB0aGUgZ2l0IGRvY3VtZW50YXRpb24uCisKK1RoZSBnaXQgb2JqZWN0IGRhdGFiYXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMZXQncyBzdGFydCBhIG5ldyBwcm9qZWN0IGFuZCBjcmVhdGUgYSBzbWFsbCBhbW91bnQgb2YgaGlzdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG1rZGlyIHRlc3QtcHJvamVjdAorJCBjZCB0ZXN0LXByb2plY3QKKyQgZ2l0IGluaXQKK0luaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC5naXQvCiskIGVjaG8gJ2hlbGxvIHdvcmxkJyA+IGZpbGUudHh0CiskIGdpdCBhZGQgLgorJCBnaXQgY29tbWl0IC1hIC1tICJpbml0aWFsIGNvbW1pdCIKK1ttYXN0ZXIgKHJvb3QtY29tbWl0KSA1NDE5NmNjXSBpbml0aWFsIGNvbW1pdAorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlLnR4dAorJCBlY2hvICdoZWxsbyB3b3JsZCEnID5maWxlLnR4dAorJCBnaXQgY29tbWl0IC1hIC1tICJhZGQgZW1waGFzaXMiCitbbWFzdGVyIGM0ZDU5ZjNdIGFkZCBlbXBoYXNpcworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQgYXJlIHRoZSA3IGRpZ2l0cyBvZiBoZXggdGhhdCBnaXQgcmVzcG9uZGVkIHRvIHRoZSBjb21taXQgd2l0aD8KKworV2Ugc2F3IGluIHBhcnQgb25lIG9mIHRoZSB0dXRvcmlhbCB0aGF0IGNvbW1pdHMgaGF2ZSBuYW1lcyBsaWtlIHRoaXMuCitJdCB0dXJucyBvdXQgdGhhdCBldmVyeSBvYmplY3QgaW4gdGhlIGdpdCBoaXN0b3J5IGlzIHN0b3JlZCB1bmRlcgorYSA0MC1kaWdpdCBoZXggbmFtZS4gIFRoYXQgbmFtZSBpcyB0aGUgU0hBMSBoYXNoIG9mIHRoZSBvYmplY3QncworY29udGVudHM7IGFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBlbnN1cmVzIHRoYXQgZ2l0IHdpbGwgbmV2ZXIgc3RvcmUKK3RoZSBzYW1lIGRhdGEgdHdpY2UgKHNpbmNlIGlkZW50aWNhbCBkYXRhIGlzIGdpdmVuIGFuIGlkZW50aWNhbCBTSEExCituYW1lKSwgYW5kIHRoYXQgdGhlIGNvbnRlbnRzIG9mIGEgZ2l0IG9iamVjdCB3aWxsIG5ldmVyIGNoYW5nZSAoc2luY2UKK3RoYXQgd291bGQgY2hhbmdlIHRoZSBvYmplY3QncyBuYW1lIGFzIHdlbGwpLiBUaGUgNyBjaGFyIGhleCBzdHJpbmdzCitoZXJlIGFyZSBzaW1wbHkgdGhlIGFiYnJldmlhdGlvbiBvZiBzdWNoIDQwIGNoYXJhY3RlciBsb25nIHN0cmluZ3MuCitBYmJyZXZpYXRpb25zIGNhbiBiZSB1c2VkIGV2ZXJ5d2hlcmUgd2hlcmUgdGhlIDQwIGNoYXJhY3RlciBzdHJpbmdzCitjYW4gYmUgdXNlZCwgc28gbG9uZyBhcyB0aGV5IGFyZSB1bmFtYmlndW91cy4KKworSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgY29udGVudCBvZiB0aGUgY29tbWl0IG9iamVjdCB5b3UgY3JlYXRlZCB3aGlsZQorZm9sbG93aW5nIHRoZSBleGFtcGxlIGFib3ZlIGdlbmVyYXRlcyBhIGRpZmZlcmVudCBTSEExIGhhc2ggdGhhbgordGhlIG9uZSBzaG93biBhYm92ZSBiZWNhdXNlIHRoZSBjb21taXQgb2JqZWN0IHJlY29yZHMgdGhlIHRpbWUgd2hlbgoraXQgd2FzIGNyZWF0ZWQgYW5kIHRoZSBuYW1lIG9mIHRoZSBwZXJzb24gcGVyZm9ybWluZyB0aGUgY29tbWl0LgorCitXZSBjYW4gYXNrIGdpdCBhYm91dCB0aGlzIHBhcnRpY3VsYXIgb2JqZWN0IHdpdGggdGhlIGBjYXQtZmlsZWAKK2NvbW1hbmQuIERvbid0IGNvcHkgdGhlIDQwIGhleCBkaWdpdHMgZnJvbSB0aGlzIGV4YW1wbGUgYnV0IHVzZSB0aG9zZQorZnJvbSB5b3VyIG93biB2ZXJzaW9uLiBOb3RlIHRoYXQgeW91IGNhbiBzaG9ydGVuIGl0IHRvIG9ubHkgYSBmZXcKK2NoYXJhY3RlcnMgdG8gc2F2ZSB5b3Vyc2VsZiB0eXBpbmcgYWxsIDQwIGhleCBkaWdpdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgLXQgNTQxOTZjYzIKK2NvbW1pdAorJCBnaXQgY2F0LWZpbGUgY29tbWl0IDU0MTk2Y2MyCit0cmVlIDkyYjhiNjk0ZmZiMTY3NWU1OTc1MTQ4ZTExMjE4MTAwODFkYmRmZmUKK2F1dGhvciBKLiBCcnVjZSBGaWVsZHMgPGJmaWVsZHNAcHV6emxlLmZpZWxkc2VzLm9yZz4gMTE0MzQxNDY2OCAtMDUwMAorY29tbWl0dGVyIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE0NjY4IC0wNTAwCisKK2luaXRpYWwgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSB0cmVlIGNhbiByZWZlciB0byBvbmUgb3IgbW9yZSAiYmxvYiIgb2JqZWN0cywgZWFjaCBjb3JyZXNwb25kaW5nIHRvCithIGZpbGUuICBJbiBhZGRpdGlvbiwgYSB0cmVlIGNhbiBhbHNvIHJlZmVyIHRvIG90aGVyIHRyZWUgb2JqZWN0cywKK3RodXMgY3JlYXRpbmcgYSBkaXJlY3RvcnkgaGllcmFyY2h5LiAgWW91IGNhbiBleGFtaW5lIHRoZSBjb250ZW50cyBvZgorYW55IHRyZWUgdXNpbmcgbHMtdHJlZSAocmVtZW1iZXIgdGhhdCBhIGxvbmcgZW5vdWdoIGluaXRpYWwgcG9ydGlvbgorb2YgdGhlIFNIQTEgd2lsbCBhbHNvIHdvcmspOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLXRyZWUgOTJiOGI2OTQKKzEwMDY0NCBibG9iIDNiMThlNTEyZGJhNzllNGM4MzAwZGQwOGFlYjM3ZjhlNzI4YjhkYWQgICAgZmlsZS50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaHVzIHdlIHNlZSB0aGF0IHRoaXMgdHJlZSBoYXMgb25lIGZpbGUgaW4gaXQuICBUaGUgU0hBMSBoYXNoIGlzIGEKK3JlZmVyZW5jZSB0byB0aGF0IGZpbGUncyBkYXRhOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIC10IDNiMThlNTEyCitibG9iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSAiYmxvYiIgaXMganVzdCBmaWxlIGRhdGEsIHdoaWNoIHdlIGNhbiBhbHNvIGV4YW1pbmUgd2l0aCBjYXQtZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBibG9iIDNiMThlNTEyCitoZWxsbyB3b3JsZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCB0aGlzIGlzIHRoZSBvbGQgZmlsZSBkYXRhOyBzbyB0aGUgb2JqZWN0IHRoYXQgZ2l0IG5hbWVkIGluCitpdHMgcmVzcG9uc2UgdG8gdGhlIGluaXRpYWwgdHJlZSB3YXMgYSB0cmVlIHdpdGggYSBzbmFwc2hvdCBvZiB0aGUKK2RpcmVjdG9yeSBzdGF0ZSB0aGF0IHdhcyByZWNvcmRlZCBieSB0aGUgZmlyc3QgY29tbWl0LgorCitBbGwgb2YgdGhlc2Ugb2JqZWN0cyBhcmUgc3RvcmVkIHVuZGVyIHRoZWlyIFNIQTEgbmFtZXMgaW5zaWRlIHRoZSBnaXQKK2RpcmVjdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGZpbmQgLmdpdC9vYmplY3RzLworLmdpdC9vYmplY3RzLworLmdpdC9vYmplY3RzL3BhY2sKKy5naXQvb2JqZWN0cy9pbmZvCisuZ2l0L29iamVjdHMvM2IKKy5naXQvb2JqZWN0cy8zYi8xOGU1MTJkYmE3OWU0YzgzMDBkZDA4YWViMzdmOGU3MjhiOGRhZAorLmdpdC9vYmplY3RzLzkyCisuZ2l0L29iamVjdHMvOTIvYjhiNjk0ZmZiMTY3NWU1OTc1MTQ4ZTExMjE4MTAwODFkYmRmZmUKKy5naXQvb2JqZWN0cy81NAorLmdpdC9vYmplY3RzLzU0LzE5NmNjMjcwM2RjMTY1Y2JkMzczYTY1YTRkY2YyMmQ1MGFlN2Y3CisuZ2l0L29iamVjdHMvYTAKKy5naXQvb2JqZWN0cy9hMC80MjM4OTY5NzM2NDQ3NzE0OTdiZGMwM2ViOTlkNTI4MTYxNWI1MQorLmdpdC9vYmplY3RzL2QwCisuZ2l0L29iamVjdHMvZDAvNDkyYjM2OGI2NmJkYWJmMmFjMWZkOGM5MmIzOWQzZGI5MTZlNTkKKy5naXQvb2JqZWN0cy9jNAorLmdpdC9vYmplY3RzL2M0L2Q1OWYzOTBiOWNmZDQzMTgxMTdhZmRlMTFkNjAxYzEwODVmMjQxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoZSBjb250ZW50cyBvZiB0aGVzZSBmaWxlcyBpcyBqdXN0IHRoZSBjb21wcmVzc2VkIGRhdGEgcGx1cyBhCitoZWFkZXIgaWRlbnRpZnlpbmcgdGhlaXIgbGVuZ3RoIGFuZCB0aGVpciB0eXBlLiAgVGhlIHR5cGUgaXMgZWl0aGVyIGEKK2Jsb2IsIGEgdHJlZSwgYSBjb21taXQsIG9yIGEgdGFnLgorCitUaGUgc2ltcGxlc3QgY29tbWl0IHRvIGZpbmQgaXMgdGhlIEhFQUQgY29tbWl0LCB3aGljaCB3ZSBjYW4gZmluZAorZnJvbSAuZ2l0L0hFQUQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjYXQgLmdpdC9IRUFECityZWY6IHJlZnMvaGVhZHMvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgeW91IGNhbiBzZWUsIHRoaXMgdGVsbHMgdXMgd2hpY2ggYnJhbmNoIHdlJ3JlIGN1cnJlbnRseSBvbiwgYW5kIGl0Cit0ZWxscyB1cyB0aGlzIGJ5IG5hbWluZyBhIGZpbGUgdW5kZXIgdGhlIC5naXQgZGlyZWN0b3J5LCB3aGljaCBpdHNlbGYKK2NvbnRhaW5zIGEgU0hBMSBuYW1lIHJlZmVycmluZyB0byBhIGNvbW1pdCBvYmplY3QsIHdoaWNoIHdlIGNhbgorZXhhbWluZSB3aXRoIGNhdC1maWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2F0IC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKK2M0ZDU5ZjM5MGI5Y2ZkNDMxODExN2FmZGUxMWQ2MDFjMTA4NWYyNDEKKyQgZ2l0IGNhdC1maWxlIC10IGM0ZDU5ZjM5Citjb21taXQKKyQgZ2l0IGNhdC1maWxlIGNvbW1pdCBjNGQ1OWYzOQordHJlZSBkMDQ5MmIzNjhiNjZiZGFiZjJhYzFmZDhjOTJiMzlkM2RiOTE2ZTU5CitwYXJlbnQgNTQxOTZjYzI3MDNkYzE2NWNiZDM3M2E2NWE0ZGNmMjJkNTBhZTdmNworYXV0aG9yIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE4NzAyIC0wNTAwCitjb21taXR0ZXIgSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHB1enpsZS5maWVsZHNlcy5vcmc+IDExNDM0MTg3MDIgLTA1MDAKKworYWRkIGVtcGhhc2lzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJ0cmVlIiBvYmplY3QgaGVyZSByZWZlcnMgdG8gdGhlIG5ldyBzdGF0ZSBvZiB0aGUgdHJlZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBscy10cmVlIGQwNDkyYjM2CisxMDA2NDQgYmxvYiBhMDQyMzg5Njk3MzY0NDc3MTQ5N2JkYzAzZWI5OWQ1MjgxNjE1YjUxICAgIGZpbGUudHh0CiskIGdpdCBjYXQtZmlsZSBibG9iIGEwNDIzODk2CitoZWxsbyB3b3JsZCEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlICJwYXJlbnQiIG9iamVjdCByZWZlcnMgdG8gdGhlIHByZXZpb3VzIGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBjb21taXQgNTQxOTZjYzIKK3RyZWUgOTJiOGI2OTRmZmIxNjc1ZTU5NzUxNDhlMTEyMTgxMDA4MWRiZGZmZQorYXV0aG9yIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE0NjY4IC0wNTAwCitjb21taXR0ZXIgSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHB1enpsZS5maWVsZHNlcy5vcmc+IDExNDM0MTQ2NjggLTA1MDAKKworaW5pdGlhbCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdHJlZSBvYmplY3QgaXMgdGhlIHRyZWUgd2UgZXhhbWluZWQgZmlyc3QsIGFuZCB0aGlzIGNvbW1pdCBpcwordW51c3VhbCBpbiB0aGF0IGl0IGxhY2tzIGFueSBwYXJlbnQuCisKK01vc3QgY29tbWl0cyBoYXZlIG9ubHkgb25lIHBhcmVudCwgYnV0IGl0IGlzIGFsc28gY29tbW9uIGZvciBhIGNvbW1pdAordG8gaGF2ZSBtdWx0aXBsZSBwYXJlbnRzLiAgIEluIHRoYXQgY2FzZSB0aGUgY29tbWl0IHJlcHJlc2VudHMgYQorbWVyZ2UsIHdpdGggdGhlIHBhcmVudCByZWZlcmVuY2VzIHBvaW50aW5nIHRvIHRoZSBoZWFkcyBvZiB0aGUgbWVyZ2VkCiticmFuY2hlcy4KKworQmVzaWRlcyBibG9icywgdHJlZXMsIGFuZCBjb21taXRzLCB0aGUgb25seSByZW1haW5pbmcgdHlwZSBvZiBvYmplY3QKK2lzIGEgInRhZyIsIHdoaWNoIHdlIHdvbid0IGRpc2N1c3MgaGVyZTsgcmVmZXIgdG8gbGlua2dpdDpnaXQtdGFnWzFdCitmb3IgZGV0YWlscy4KKworU28gbm93IHdlIGtub3cgaG93IGdpdCB1c2VzIHRoZSBvYmplY3QgZGF0YWJhc2UgdG8gcmVwcmVzZW50IGEKK3Byb2plY3QncyBoaXN0b3J5OgorCisgICogImNvbW1pdCIgb2JqZWN0cyByZWZlciB0byAidHJlZSIgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlCisgICAgc25hcHNob3Qgb2YgYSBkaXJlY3RvcnkgdHJlZSBhdCBhIHBhcnRpY3VsYXIgcG9pbnQgaW4gdGhlCisgICAgaGlzdG9yeSwgYW5kIHJlZmVyIHRvICJwYXJlbnQiIGNvbW1pdHMgdG8gc2hvdyBob3cgdGhleSdyZQorICAgIGNvbm5lY3RlZCBpbnRvIHRoZSBwcm9qZWN0IGhpc3RvcnkuCisgICogInRyZWUiIG9iamVjdHMgcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiBhIHNpbmdsZSBkaXJlY3RvcnksCisgICAgYXNzb2NpYXRpbmcgZGlyZWN0b3J5IG5hbWVzIHRvICJibG9iIiBvYmplY3RzIGNvbnRhaW5pbmcgZmlsZQorICAgIGRhdGEgYW5kICJ0cmVlIiBvYmplY3RzIGNvbnRhaW5pbmcgc3ViZGlyZWN0b3J5IGluZm9ybWF0aW9uLgorICAqICJibG9iIiBvYmplY3RzIGNvbnRhaW4gZmlsZSBkYXRhIHdpdGhvdXQgYW55IG90aGVyIHN0cnVjdHVyZS4KKyAgKiBSZWZlcmVuY2VzIHRvIGNvbW1pdCBvYmplY3RzIGF0IHRoZSBoZWFkIG9mIGVhY2ggYnJhbmNoIGFyZQorICAgIHN0b3JlZCBpbiBmaWxlcyB1bmRlciAuZ2l0L3JlZnMvaGVhZHMvLgorICAqIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBzdG9yZWQgaW4gLmdpdC9IRUFELgorCitOb3RlLCBieSB0aGUgd2F5LCB0aGF0IGxvdHMgb2YgY29tbWFuZHMgdGFrZSBhIHRyZWUgYXMgYW4gYXJndW1lbnQuCitCdXQgYXMgd2UgY2FuIHNlZSBhYm92ZSwgYSB0cmVlIGNhbiBiZSByZWZlcnJlZCB0byBpbiBtYW55IGRpZmZlcmVudAord2F5cy0tYnkgdGhlIFNIQTEgbmFtZSBmb3IgdGhhdCB0cmVlLCBieSB0aGUgbmFtZSBvZiBhIGNvbW1pdCB0aGF0CityZWZlcnMgdG8gdGhlIHRyZWUsIGJ5IHRoZSBuYW1lIG9mIGEgYnJhbmNoIHdob3NlIGhlYWQgcmVmZXJzIHRvIHRoYXQKK3RyZWUsIGV0Yy4tLWFuZCBtb3N0IHN1Y2ggY29tbWFuZHMgY2FuIGFjY2VwdCBhbnkgb2YgdGhlc2UgbmFtZXMuCisKK0luIGNvbW1hbmQgc3lub3BzZXMsIHRoZSB3b3JkICJ0cmVlLWlzaCIgaXMgc29tZXRpbWVzIHVzZWQgdG8KK2Rlc2lnbmF0ZSBzdWNoIGFuIGFyZ3VtZW50LgorCitUaGUgaW5kZXggZmlsZQorLS0tLS0tLS0tLS0tLS0KKworVGhlIHByaW1hcnkgdG9vbCB3ZSd2ZSBiZWVuIHVzaW5nIHRvIGNyZWF0ZSBjb21taXRzIGlzIGBnaXQtY29tbWl0CistYWAsIHdoaWNoIGNyZWF0ZXMgYSBjb21taXQgaW5jbHVkaW5nIGV2ZXJ5IGNoYW5nZSB5b3UndmUgbWFkZSB0bworeW91ciB3b3JraW5nIHRyZWUuICBCdXQgd2hhdCBpZiB5b3Ugd2FudCB0byBjb21taXQgY2hhbmdlcyBvbmx5IHRvCitjZXJ0YWluIGZpbGVzPyAgT3Igb25seSBjZXJ0YWluIGNoYW5nZXMgdG8gY2VydGFpbiBmaWxlcz8KKworSWYgd2UgbG9vayBhdCB0aGUgd2F5IGNvbW1pdHMgYXJlIGNyZWF0ZWQgdW5kZXIgdGhlIGNvdmVyLCB3ZSdsbCBzZWUKK3RoYXQgdGhlcmUgYXJlIG1vcmUgZmxleGlibGUgd2F5cyBjcmVhdGluZyBjb21taXRzLgorCitDb250aW51aW5nIHdpdGggb3VyIHRlc3QtcHJvamVjdCwgbGV0J3MgbW9kaWZ5IGZpbGUudHh0IGFnYWluOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZWNobyAiaGVsbG8gd29ybGQsIGFnYWluIiA+PmZpbGUudHh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYnV0IHRoaXMgdGltZSBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IG1ha2luZyB0aGUgY29tbWl0LCBsZXQncyB0YWtlIGFuCitpbnRlcm1lZGlhdGUgc3RlcCwgYW5kIGFzayBmb3IgZGlmZnMgYWxvbmcgdGhlIHdheSB0byBrZWVwIHRyYWNrIG9mCit3aGF0J3MgaGFwcGVuaW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEAgLTEgKzEsMiBAQAorIGhlbGxvIHdvcmxkIQorK2hlbGxvIHdvcmxkLCBhZ2FpbgorJCBnaXQgYWRkIGZpbGUudHh0CiskIGdpdCBkaWZmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxhc3QgZGlmZiBpcyBlbXB0eSwgYnV0IG5vIG5ldyBjb21taXRzIGhhdmUgYmVlbiBtYWRlLCBhbmQgdGhlCitoZWFkIHN0aWxsIGRvZXNuJ3QgY29udGFpbiB0aGUgbmV3IGxpbmU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiBIRUFECitkaWZmIC0tZ2l0IGEvZmlsZS50eHQgYi9maWxlLnR4dAoraW5kZXggYTA0MjM4OS4uNTEzZmViYSAxMDA2NDQKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEAgLTEgKzEsMiBAQAorIGhlbGxvIHdvcmxkIQorK2hlbGxvIHdvcmxkLCBhZ2FpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvICdnaXQgZGlmZicgaXMgY29tcGFyaW5nIGFnYWluc3Qgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGhlYWQuCitUaGUgdGhpbmcgdGhhdCBpdCdzIGNvbXBhcmluZyBhZ2FpbnN0IGlzIGFjdHVhbGx5IHRoZSBpbmRleCBmaWxlLAord2hpY2ggaXMgc3RvcmVkIGluIC5naXQvaW5kZXggaW4gYSBiaW5hcnkgZm9ybWF0LCBidXQgd2hvc2UgY29udGVudHMKK3dlIGNhbiBleGFtaW5lIHdpdGggbHMtZmlsZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbHMtZmlsZXMgLS1zdGFnZQorMTAwNjQ0IDUxM2ZlYmEyZTUzZWJiZDI1MzI0MTlkZWQ4NDhiYTE5ZGU4OGJhMDAgMCAgICAgICBmaWxlLnR4dAorJCBnaXQgY2F0LWZpbGUgLXQgNTEzZmViYTIKK2Jsb2IKKyQgZ2l0IGNhdC1maWxlIGJsb2IgNTEzZmViYTIKK2hlbGxvIHdvcmxkIQoraGVsbG8gd29ybGQsIGFnYWluCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU28gd2hhdCBvdXIgJ2dpdCBhZGQnIGRpZCB3YXMgc3RvcmUgYSBuZXcgYmxvYiBhbmQgdGhlbiBwdXQKK2EgcmVmZXJlbmNlIHRvIGl0IGluIHRoZSBpbmRleCBmaWxlLiAgSWYgd2UgbW9kaWZ5IHRoZSBmaWxlIGFnYWluLAord2UnbGwgc2VlIHRoYXQgdGhlIG5ldyBtb2RpZmljYXRpb25zIGFyZSByZWZsZWN0ZWQgaW4gdGhlICdnaXQgZGlmZicKK291dHB1dDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gJ2FnYWluPycgPj5maWxlLnR4dAorJCBnaXQgZGlmZgoraW5kZXggNTEzZmViYS4uYmEzZGE3YiAxMDA2NDQKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEAgLTEsMiArMSwzIEBACisgaGVsbG8gd29ybGQhCisgaGVsbG8gd29ybGQsIGFnYWluCisrYWdhaW4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLCAnZ2l0IGRpZmYnIGNhbiBhbHNvIHNob3cgdXMgdGhlIGRpZmZlcmVuY2UKK2JldHdlZW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCB0aGUgbGFzdCBjb21taXQsIG9yIGJldHdlZW4gdGhlCitpbmRleCBhbmQgdGhlIGxhc3QgY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgSEVBRAorZGlmZiAtLWdpdCBhL2ZpbGUudHh0IGIvZmlsZS50eHQKK2luZGV4IGEwNDIzODkuLmJhM2RhN2IgMTAwNjQ0CistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAIC0xICsxLDMgQEAKKyBoZWxsbyB3b3JsZCEKKytoZWxsbyB3b3JsZCwgYWdhaW4KKythZ2Fpbj8KKyQgZ2l0IGRpZmYgLS1jYWNoZWQKK2RpZmYgLS1naXQgYS9maWxlLnR4dCBiL2ZpbGUudHh0CitpbmRleCBhMDQyMzg5Li41MTNmZWJhIDEwMDY0NAorLS0tIGEvZmlsZS50eHQKKysrKyBiL2ZpbGUudHh0CitAQCAtMSArMSwyIEBACisgaGVsbG8gd29ybGQhCisraGVsbG8gd29ybGQsIGFnYWluCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXQgYW55IHRpbWUsIHdlIGNhbiBjcmVhdGUgYSBuZXcgY29tbWl0IHVzaW5nICdnaXQgY29tbWl0JyAod2l0aG91dAordGhlICItYSIgb3B0aW9uKSwgYW5kIHZlcmlmeSB0aGF0IHRoZSBzdGF0ZSBjb21taXR0ZWQgb25seSBpbmNsdWRlcyB0aGUKK2NoYW5nZXMgc3RvcmVkIGluIHRoZSBpbmRleCBmaWxlLCBub3QgdGhlIGFkZGl0aW9uYWwgY2hhbmdlIHRoYXQgaXMKK3N0aWxsIG9ubHkgaW4gb3VyIHdvcmtpbmcgdHJlZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLW0gInJlcGVhdCIKKyQgZ2l0IGRpZmYgSEVBRAorZGlmZiAtLWdpdCBhL2ZpbGUudHh0IGIvZmlsZS50eHQKK2luZGV4IDUxM2ZlYmEuLmJhM2RhN2IgMTAwNjQ0CistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAIC0xLDIgKzEsMyBAQAorIGhlbGxvIHdvcmxkIQorIGhlbGxvIHdvcmxkLCBhZ2FpbgorK2FnYWluPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvIGJ5IGRlZmF1bHQgJ2dpdCBjb21taXQnIHVzZXMgdGhlIGluZGV4IHRvIGNyZWF0ZSB0aGUgY29tbWl0LCBub3QKK3RoZSB3b3JraW5nIHRyZWU7IHRoZSAiLWEiIG9wdGlvbiB0byBjb21taXQgdGVsbHMgaXQgdG8gZmlyc3QgdXBkYXRlCit0aGUgaW5kZXggd2l0aCBhbGwgY2hhbmdlcyBpbiB0aGUgd29ya2luZyB0cmVlLgorCitGaW5hbGx5LCBpdCdzIHdvcnRoIGxvb2tpbmcgYXQgdGhlIGVmZmVjdCBvZiAnZ2l0IGFkZCcgb24gdGhlIGluZGV4CitmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZWNobyAiZ29vZGJ5ZSwgd29ybGQiID5jbG9zaW5nLnR4dAorJCBnaXQgYWRkIGNsb3NpbmcudHh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVmZmVjdCBvZiB0aGUgJ2dpdCBhZGQnIHdhcyB0byBhZGQgb25lIGVudHJ5IHRvIHRoZSBpbmRleCBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UKKzEwMDY0NCA4Yjk3NDNiMjBkNGIxNWJlMzk1NWZjOGQ1Y2QyYjA5Y2QyMzM2MTM4IDAgICAgICAgY2xvc2luZy50eHQKKzEwMDY0NCA1MTNmZWJhMmU1M2ViYmQyNTMyNDE5ZGVkODQ4YmExOWRlODhiYTAwIDAgICAgICAgZmlsZS50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbmQsIGFzIHlvdSBjYW4gc2VlIHdpdGggY2F0LWZpbGUsIHRoaXMgbmV3IGVudHJ5IHJlZmVycyB0byB0aGUKK2N1cnJlbnQgY29udGVudHMgb2YgdGhlIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgYmxvYiA4Yjk3NDNiMgorZ29vZGJ5ZSwgd29ybGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgInN0YXR1cyIgY29tbWFuZCBpcyBhIHVzZWZ1bCB3YXkgdG8gZ2V0IGEgcXVpY2sgc3VtbWFyeSBvZiB0aGUKK3NpdHVhdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzdGF0dXMKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCisjICAgICAgIG5ldyBmaWxlOiBjbG9zaW5nLnR4dAorIworIyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjCisjICAgICAgIG1vZGlmaWVkOiBmaWxlLnR4dAorIworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpbmNlIHRoZSBjdXJyZW50IHN0YXRlIG9mIGNsb3NpbmcudHh0IGlzIGNhY2hlZCBpbiB0aGUgaW5kZXggZmlsZSwKK2l0IGlzIGxpc3RlZCBhcyAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQiLiAgU2luY2UgZmlsZS50eHQgaGFzCitjaGFuZ2VzIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0aGF0IGFyZW4ndCByZWZsZWN0ZWQgaW4gdGhlIGluZGV4LAoraXQgaXMgbWFya2VkICJjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZCIuICBBdCB0aGlzIHBvaW50LCBydW5uaW5nICJnaXQKK2NvbW1pdCIgd291bGQgY3JlYXRlIGEgY29tbWl0IHRoYXQgYWRkZWQgY2xvc2luZy50eHQgKHdpdGggaXRzIG5ldworY29udGVudHMpLCBidXQgdGhhdCBkaWRuJ3QgbW9kaWZ5IGZpbGUudHh0LgorCitBbHNvLCBub3RlIHRoYXQgYSBiYXJlIGBnaXQgZGlmZmAgc2hvd3MgdGhlIGNoYW5nZXMgdG8gZmlsZS50eHQsIGJ1dAorbm90IHRoZSBhZGRpdGlvbiBvZiBjbG9zaW5nLnR4dCwgYmVjYXVzZSB0aGUgdmVyc2lvbiBvZiBjbG9zaW5nLnR4dAoraW4gdGhlIGluZGV4IGZpbGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBvbmUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorCitJbiBhZGRpdGlvbiB0byBiZWluZyB0aGUgc3RhZ2luZyBhcmVhIGZvciBuZXcgY29tbWl0cywgdGhlIGluZGV4IGZpbGUKK2lzIGFsc28gcG9wdWxhdGVkIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSB3aGVuIGNoZWNraW5nIG91dCBhCiticmFuY2gsIGFuZCBpcyB1c2VkIHRvIGhvbGQgdGhlIHRyZWVzIGludm9sdmVkIGluIGEgbWVyZ2Ugb3BlcmF0aW9uLgorU2VlIGxpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSBhbmQgdGhlIHJlbGV2YW50IG1hbgorcGFnZXMgZm9yIGRldGFpbHMuCisKK1doYXQgbmV4dD8KKy0tLS0tLS0tLS0KKworQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGtub3cgZXZlcnl0aGluZyBuZWNlc3NhcnkgdG8gcmVhZCB0aGUgbWFuCitwYWdlcyBmb3IgYW55IG9mIHRoZSBnaXQgY29tbWFuZHM7IG9uZSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlCit3aXRoIHRoZSBjb21tYW5kcyBtZW50aW9uZWQgaW4gbGluazpldmVyeWRheS5odG1sW0V2ZXJ5ZGF5IGdpdF0uICBZb3UKK3Nob3VsZCBiZSBhYmxlIHRvIGZpbmQgYW55IHVua25vd24gamFyZ29uIGluIGxpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10uCisKK1RoZSBsaW5rOnVzZXItbWFudWFsLmh0bWxbR2l0IFVzZXIncyBNYW51YWxdIHByb3ZpZGVzIGEgbW9yZQorY29tcHJlaGVuc2l2ZSBpbnRyb2R1Y3Rpb24gdG8gZ2l0LgorCitsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10gZXhwbGFpbnMgaG93IHRvCitpbXBvcnQgYSBDVlMgcmVwb3NpdG9yeSBpbnRvIGdpdCwgYW5kIHNob3dzIGhvdyB0byB1c2UgZ2l0IGluIGEKK0NWUy1saWtlIHdheS4KKworRm9yIHNvbWUgaW50ZXJlc3RpbmcgZXhhbXBsZXMgb2YgZ2l0IHVzZSwgc2VlIHRoZQorbGluazpob3d0by1pbmRleC5odG1sW2hvd3Rvc10uCisKK0ZvciBnaXQgZGV2ZWxvcGVycywgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddIGdvZXMKK2ludG8gZGV0YWlsIG9uIHRoZSBsb3dlci1sZXZlbCBnaXQgbWVjaGFuaXNtcyBpbnZvbHZlZCBpbiwgZm9yCitleGFtcGxlLCBjcmVhdGluZyBhIG5ldyBjb21taXQuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSwKK2xpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rZ2l0OmdpdC1oZWxwWzFdLAorbGluazpldmVyeWRheS5odG1sW0V2ZXJ5ZGF5IGdpdF0sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxY2I2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dApAQCAtMCwwICsxLDY3NiBAQAorZ2l0dHV0b3JpYWwoNykKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHR1dG9yaWFsIC0gQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gZ2l0IChmb3IgdmVyc2lvbiAxLjUuMSBvciBuZXdlcikKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitnaXQgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyB0dXRvcmlhbCBleHBsYWlucyBob3cgdG8gaW1wb3J0IGEgbmV3IHByb2plY3QgaW50byBnaXQsIG1ha2UKK2NoYW5nZXMgdG8gaXQsIGFuZCBzaGFyZSBjaGFuZ2VzIHdpdGggb3RoZXIgZGV2ZWxvcGVycy4KKworSWYgeW91IGFyZSBpbnN0ZWFkIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHVzaW5nIGdpdCB0byBmZXRjaCBhIHByb2plY3QsCitmb3IgZXhhbXBsZSwgdG8gdGVzdCB0aGUgbGF0ZXN0IHZlcnNpb24sIHlvdSBtYXkgcHJlZmVyIHRvIHN0YXJ0IHdpdGgKK3RoZSBmaXJzdCB0d28gY2hhcHRlcnMgb2YgbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0uCisKK0ZpcnN0LCBub3RlIHRoYXQgeW91IGNhbiBnZXQgZG9jdW1lbnRhdGlvbiBmb3IgYSBjb21tYW5kIHN1Y2ggYXMKK2BnaXQgbG9nIC0tZ3JhcGhgIHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBtYW4gZ2l0LWxvZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGhlbHAgbG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgbGF0dGVyLCB5b3UgY2FuIHVzZSB0aGUgbWFudWFsIHZpZXdlciBvZiB5b3VyIGNob2ljZTsgc2VlCitsaW5rZ2l0OmdpdC1oZWxwWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitJdCBpcyBhIGdvb2QgaWRlYSB0byBpbnRyb2R1Y2UgeW91cnNlbGYgdG8gZ2l0IHdpdGggeW91ciBuYW1lIGFuZAorcHVibGljIGVtYWlsIGFkZHJlc3MgYmVmb3JlIGRvaW5nIGFueSBvcGVyYXRpb24uICBUaGUgZWFzaWVzdAord2F5IHRvIGRvIHNvIGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgIllvdXIgTmFtZSBDb21lcyBIZXJlIgorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QHlvdXJkb21haW4uZXhhbXBsZS5jb20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0ltcG9ydGluZyBhIG5ldyBwcm9qZWN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBc3N1bWUgeW91IGhhdmUgYSB0YXJiYWxsIHByb2plY3QudGFyLmd6IHdpdGggeW91ciBpbml0aWFsIHdvcmsuICBZb3UKK2NhbiBwbGFjZSBpdCB1bmRlciBnaXQgcmV2aXNpb24gY29udHJvbCBhcyBmb2xsb3dzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgdGFyIHh6ZiBwcm9qZWN0LnRhci5negorJCBjZCBwcm9qZWN0CiskIGdpdCBpbml0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IHdpbGwgcmVwbHkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAuZ2l0LworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSd2ZSBub3cgaW5pdGlhbGl6ZWQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LS15b3UgbWF5IG5vdGljZSBhIG5ldworZGlyZWN0b3J5IGNyZWF0ZWQsIG5hbWVkICIuZ2l0Ii4KKworTmV4dCwgdGVsbCBnaXQgdG8gdGFrZSBhIHNuYXBzaG90IG9mIHRoZSBjb250ZW50cyBvZiBhbGwgZmlsZXMgdW5kZXIgdGhlCitjdXJyZW50IGRpcmVjdG9yeSAobm90ZSB0aGUgJy4nKSwgd2l0aCAnZ2l0IGFkZCc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNuYXBzaG90IGlzIG5vdyBzdG9yZWQgaW4gYSB0ZW1wb3Jhcnkgc3RhZ2luZyBhcmVhIHdoaWNoIGdpdCBjYWxscwordGhlICJpbmRleCIuICBZb3UgY2FuIHBlcm1hbmVudGx5IHN0b3JlIHRoZSBjb250ZW50cyBvZiB0aGUgaW5kZXggaW4gdGhlCityZXBvc2l0b3J5IHdpdGggJ2dpdCBjb21taXQnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBwcm9tcHQgeW91IGZvciBhIGNvbW1pdCBtZXNzYWdlLiAgWW91J3ZlIG5vdyBzdG9yZWQgdGhlIGZpcnN0Cit2ZXJzaW9uIG9mIHlvdXIgcHJvamVjdCBpbiBnaXQuCisKK01ha2luZyBjaGFuZ2VzCistLS0tLS0tLS0tLS0tLQorCitNb2RpZnkgc29tZSBmaWxlcywgdGhlbiBhZGQgdGhlaXIgdXBkYXRlZCBjb250ZW50cyB0byB0aGUgaW5kZXg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGZpbGUxIGZpbGUyIGZpbGUzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGFyZSBub3cgcmVhZHkgdG8gY29tbWl0LiAgWW91IGNhbiBzZWUgd2hhdCBpcyBhYm91dCB0byBiZSBjb21taXR0ZWQKK3VzaW5nICdnaXQgZGlmZicgd2l0aCB0aGUgLS1jYWNoZWQgb3B0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgLS1jYWNoZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoV2l0aG91dCAtLWNhY2hlZCwgJ2dpdCBkaWZmJyB3aWxsIHNob3cgeW91IGFueSBjaGFuZ2VzIHRoYXQKK3lvdSd2ZSBtYWRlIGJ1dCBub3QgeWV0IGFkZGVkIHRvIHRoZSBpbmRleC4pICBZb3UgY2FuIGFsc28gZ2V0IGEgYnJpZWYKK3N1bW1hcnkgb2YgdGhlIHNpdHVhdGlvbiB3aXRoICdnaXQgc3RhdHVzJzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzdGF0dXMKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCisjCW1vZGlmaWVkOiAgIGZpbGUxCisjCW1vZGlmaWVkOiAgIGZpbGUyCisjCW1vZGlmaWVkOiAgIGZpbGUzCisjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG5lZWQgdG8gbWFrZSBhbnkgZnVydGhlciBhZGp1c3RtZW50cywgZG8gc28gbm93LCBhbmQgdGhlbiBhZGQgYW55CituZXdseSBtb2RpZmllZCBjb250ZW50IHRvIHRoZSBpbmRleC4gIEZpbmFsbHksIGNvbW1pdCB5b3VyIGNoYW5nZXMgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgYWdhaW4gcHJvbXB0IHlvdSBmb3IgYSBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGNoYW5nZSwgYW5kIHRoZW4KK3JlY29yZCBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0LgorCitBbHRlcm5hdGl2ZWx5LCBpbnN0ZWFkIG9mIHJ1bm5pbmcgJ2dpdCBhZGQnIGJlZm9yZWhhbmQsIHlvdSBjYW4gdXNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1hCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBhdXRvbWF0aWNhbGx5IG5vdGljZSBhbnkgbW9kaWZpZWQgKGJ1dCBub3QgbmV3KSBmaWxlcywgYWRkCit0aGVtIHRvIHRoZSBpbmRleCwgYW5kIGNvbW1pdCwgYWxsIGluIG9uZSBzdGVwLgorCitBIG5vdGUgb24gY29tbWl0IG1lc3NhZ2VzOiBUaG91Z2ggbm90IHJlcXVpcmVkLCBpdCdzIGEgZ29vZCBpZGVhIHRvCitiZWdpbiB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCBhIHNpbmdsZSBzaG9ydCAobGVzcyB0aGFuIDUwIGNoYXJhY3RlcikKK2xpbmUgc3VtbWFyaXppbmcgdGhlIGNoYW5nZSwgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIGFuZCB0aGVuIGEgbW9yZQordGhvcm91Z2ggZGVzY3JpcHRpb24uIFRoZSB0ZXh0IHVwIHRvIHRoZSBmaXJzdCBibGFuayBsaW5lIGluIGEgY29tbWl0CittZXNzYWdlIGlzIHRyZWF0ZWQgYXMgdGhlIGNvbW1pdCB0aXRsZSwgYW5kIHRoYXQgdGl0bGUgaXMgdXNlZAordGhyb3VnaG91dCBnaXQuICBGb3IgZXhhbXBsZSwgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHR1cm5zIGEKK2NvbW1pdCBpbnRvIGVtYWlsLCBhbmQgaXQgdXNlcyB0aGUgdGl0bGUgb24gdGhlIFN1YmplY3QgbGluZSBhbmQgdGhlCityZXN0IG9mIHRoZSBjb21taXQgaW4gdGhlIGJvZHkuCisKK0dpdCB0cmFja3MgY29udGVudCBub3QgZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFueSByZXZpc2lvbiBjb250cm9sIHN5c3RlbXMgcHJvdmlkZSBhbiBgYWRkYCBjb21tYW5kIHRoYXQgdGVsbHMgdGhlCitzeXN0ZW0gdG8gc3RhcnQgdHJhY2tpbmcgY2hhbmdlcyB0byBhIG5ldyBmaWxlLiAgR2l0J3MgYGFkZGAgY29tbWFuZAorZG9lcyBzb21ldGhpbmcgc2ltcGxlciBhbmQgbW9yZSBwb3dlcmZ1bDogJ2dpdCBhZGQnIGlzIHVzZWQgYm90aCBmb3IgbmV3CithbmQgbmV3bHkgbW9kaWZpZWQgZmlsZXMsIGFuZCBpbiBib3RoIGNhc2VzIGl0IHRha2VzIGEgc25hcHNob3Qgb2YgdGhlCitnaXZlbiBmaWxlcyBhbmQgc3RhZ2VzIHRoYXQgY29udGVudCBpbiB0aGUgaW5kZXgsIHJlYWR5IGZvciBpbmNsdXNpb24gaW4KK3RoZSBuZXh0IGNvbW1pdC4KKworVmlld2luZyBwcm9qZWN0IGhpc3RvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F0IGFueSBwb2ludCB5b3UgY2FuIHZpZXcgdGhlIGhpc3Rvcnkgb2YgeW91ciBjaGFuZ2VzIHVzaW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGFsc28gd2FudCB0byBzZWUgY29tcGxldGUgZGlmZnMgYXQgZWFjaCBzdGVwLCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPZnRlbiB0aGUgb3ZlcnZpZXcgb2YgdGhlIGNoYW5nZSBpcyB1c2VmdWwgdG8gZ2V0IGEgZmVlbCBvZgorZWFjaCBzdGVwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tc3RhdCAtLXN1bW1hcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYW5hZ2luZyBicmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0KKworQSBzaW5nbGUgZ2l0IHJlcG9zaXRvcnkgY2FuIG1haW50YWluIG11bHRpcGxlIGJyYW5jaGVzIG9mCitkZXZlbG9wbWVudC4gIFRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgImV4cGVyaW1lbnRhbCIsIHVzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCBleHBlcmltZW50YWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugbm93IHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3lvdSdsbCBnZXQgYSBsaXN0IG9mIGFsbCBleGlzdGluZyBicmFuY2hlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGV4cGVyaW1lbnRhbAorKiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgImV4cGVyaW1lbnRhbCIgYnJhbmNoIGlzIHRoZSBvbmUgeW91IGp1c3QgY3JlYXRlZCwgYW5kIHRoZQorIm1hc3RlciIgYnJhbmNoIGlzIGEgZGVmYXVsdCBicmFuY2ggdGhhdCB3YXMgY3JlYXRlZCBmb3IgeW91CithdXRvbWF0aWNhbGx5LiAgVGhlIGFzdGVyaXNrIG1hcmtzIHRoZSBicmFuY2ggeW91IGFyZSBjdXJyZW50bHkgb247Cit0eXBlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgZXhwZXJpbWVudGFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gc3dpdGNoIHRvIHRoZSBleHBlcmltZW50YWwgYnJhbmNoLiAgTm93IGVkaXQgYSBmaWxlLCBjb21taXQgdGhlCitjaGFuZ2UsIGFuZCBzd2l0Y2ggYmFjayB0byB0aGUgbWFzdGVyIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoZWRpdCBmaWxlKQorJCBnaXQgY29tbWl0IC1hCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGVjayB0aGF0IHRoZSBjaGFuZ2UgeW91IG1hZGUgaXMgbm8gbG9uZ2VyIHZpc2libGUsIHNpbmNlIGl0IHdhcworbWFkZSBvbiB0aGUgZXhwZXJpbWVudGFsIGJyYW5jaCBhbmQgeW91J3JlIGJhY2sgb24gdGhlIG1hc3RlciBicmFuY2guCisKK1lvdSBjYW4gbWFrZSBhIGRpZmZlcmVudCBjaGFuZ2Ugb24gdGhlIG1hc3RlciBicmFuY2g6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKGVkaXQgZmlsZSkKKyQgZ2l0IGNvbW1pdCAtYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2F0IHRoaXMgcG9pbnQgdGhlIHR3byBicmFuY2hlcyBoYXZlIGRpdmVyZ2VkLCB3aXRoIGRpZmZlcmVudCBjaGFuZ2VzCittYWRlIGluIGVhY2guICBUbyBtZXJnZSB0aGUgY2hhbmdlcyBtYWRlIGluIGV4cGVyaW1lbnRhbCBpbnRvIG1hc3RlciwgcnVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgZXhwZXJpbWVudGFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlIGNoYW5nZXMgZG9uJ3QgY29uZmxpY3QsIHlvdSdyZSBkb25lLiAgSWYgdGhlcmUgYXJlIGNvbmZsaWN0cywKK21hcmtlcnMgd2lsbCBiZSBsZWZ0IGluIHRoZSBwcm9ibGVtYXRpYyBmaWxlcyBzaG93aW5nIHRoZSBjb25mbGljdDsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBzaG93IHRoaXMuICBPbmNlIHlvdSd2ZSBlZGl0ZWQgdGhlIGZpbGVzIHRvIHJlc29sdmUgdGhlCitjb25mbGljdHMsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1hCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBjb21taXQgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuIEZpbmFsbHksCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBzaG93IGEgbmljZSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlc3VsdGluZyBoaXN0b3J5LgorCitBdCB0aGlzIHBvaW50IHlvdSBjb3VsZCBkZWxldGUgdGhlIGV4cGVyaW1lbnRhbCBicmFuY2ggd2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCAtZCBleHBlcmltZW50YWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNvbW1hbmQgZW5zdXJlcyB0aGF0IHRoZSBjaGFuZ2VzIGluIHRoZSBleHBlcmltZW50YWwgYnJhbmNoIGFyZQorYWxyZWFkeSBpbiB0aGUgY3VycmVudCBicmFuY2guCisKK0lmIHlvdSBkZXZlbG9wIG9uIGEgYnJhbmNoIGNyYXp5LWlkZWEsIHRoZW4gcmVncmV0IGl0LCB5b3UgY2FuIGFsd2F5cworZGVsZXRlIHRoZSBicmFuY2ggd2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLUQgY3JhenktaWRlYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCcmFuY2hlcyBhcmUgY2hlYXAgYW5kIGVhc3ksIHNvIHRoaXMgaXMgYSBnb29kIHdheSB0byB0cnkgc29tZXRoaW5nCitvdXQuCisKK1VzaW5nIGdpdCBmb3IgY29sbGFib3JhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvc2UgdGhhdCBBbGljZSBoYXMgc3RhcnRlZCBhIG5ldyBwcm9qZWN0IHdpdGggYSBnaXQgcmVwb3NpdG9yeSBpbgorL2hvbWUvYWxpY2UvcHJvamVjdCwgYW5kIHRoYXQgQm9iLCB3aG8gaGFzIGEgaG9tZSBkaXJlY3Rvcnkgb24gdGhlCitzYW1lIG1hY2hpbmUsIHdhbnRzIHRvIGNvbnRyaWJ1dGUuCisKK0JvYiBiZWdpbnMgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBjbG9uZSAvaG9tZS9hbGljZS9wcm9qZWN0IG15cmVwbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY3JlYXRlcyBhIG5ldyBkaXJlY3RvcnkgIm15cmVwbyIgY29udGFpbmluZyBhIGNsb25lIG9mIEFsaWNlJ3MKK3JlcG9zaXRvcnkuICBUaGUgY2xvbmUgaXMgb24gYW4gZXF1YWwgZm9vdGluZyB3aXRoIHRoZSBvcmlnaW5hbAorcHJvamVjdCwgcG9zc2Vzc2luZyBpdHMgb3duIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHByb2plY3QncyBoaXN0b3J5LgorCitCb2IgdGhlbiBtYWtlcyBzb21lIGNoYW5nZXMgYW5kIGNvbW1pdHMgdGhlbToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoZWRpdCBmaWxlcykKK2JvYiQgZ2l0IGNvbW1pdCAtYQorKHJlcGVhdCBhcyBuZWNlc3NhcnkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBoZSdzIHJlYWR5LCBoZSB0ZWxscyBBbGljZSB0byBwdWxsIGNoYW5nZXMgZnJvbSB0aGUgcmVwb3NpdG9yeQorYXQgL2hvbWUvYm9iL215cmVwby4gIFNoZSBkb2VzIHRoaXMgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgY2QgL2hvbWUvYWxpY2UvcHJvamVjdAorYWxpY2UkIGdpdCBwdWxsIC9ob21lL2JvYi9teXJlcG8gbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtZXJnZXMgdGhlIGNoYW5nZXMgZnJvbSBCb2IncyAibWFzdGVyIiBicmFuY2ggaW50byBBbGljZSdzCitjdXJyZW50IGJyYW5jaC4gIElmIEFsaWNlIGhhcyBtYWRlIGhlciBvd24gY2hhbmdlcyBpbiB0aGUgbWVhbnRpbWUsCit0aGVuIHNoZSBtYXkgbmVlZCB0byBtYW51YWxseSBmaXggYW55IGNvbmZsaWN0cy4KKworVGhlICJwdWxsIiBjb21tYW5kIHRodXMgcGVyZm9ybXMgdHdvIG9wZXJhdGlvbnM6IGl0IGZldGNoZXMgY2hhbmdlcworZnJvbSBhIHJlbW90ZSBicmFuY2gsIHRoZW4gbWVyZ2VzIHRoZW0gaW50byB0aGUgY3VycmVudCBicmFuY2guCisKK05vdGUgdGhhdCBpbiBnZW5lcmFsLCBBbGljZSB3b3VsZCB3YW50IGhlciBsb2NhbCBjaGFuZ2VzIGNvbW1pdHRlZCBiZWZvcmUKK2luaXRpYXRpbmcgdGhpcyAicHVsbCIuICBJZiBCb2IncyB3b3JrIGNvbmZsaWN0cyB3aXRoIHdoYXQgQWxpY2UgZGlkIHNpbmNlCit0aGVpciBoaXN0b3JpZXMgZm9ya2VkLCBBbGljZSB3aWxsIHVzZSBoZXIgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggdG8KK3Jlc29sdmUgY29uZmxpY3RzLCBhbmQgZXhpc3RpbmcgbG9jYWwgY2hhbmdlcyB3aWxsIGludGVyZmVyZSB3aXRoIHRoZQorY29uZmxpY3QgcmVzb2x1dGlvbiBwcm9jZXNzIChnaXQgd2lsbCBzdGlsbCBwZXJmb3JtIHRoZSBmZXRjaCBidXQgd2lsbAorcmVmdXNlIHRvIG1lcmdlIC0tLSBBbGljZSB3aWxsIGhhdmUgdG8gZ2V0IHJpZCBvZiBoZXIgbG9jYWwgY2hhbmdlcyBpbgorc29tZSB3YXkgYW5kIHB1bGwgYWdhaW4gd2hlbiB0aGlzIGhhcHBlbnMpLgorCitBbGljZSBjYW4gcGVlayBhdCB3aGF0IEJvYiBkaWQgd2l0aG91dCBtZXJnaW5nIGZpcnN0LCB1c2luZyB0aGUgImZldGNoIgorY29tbWFuZDsgdGhpcyBhbGxvd3MgQWxpY2UgdG8gaW5zcGVjdCB3aGF0IEJvYiBkaWQsIHVzaW5nIGEgc3BlY2lhbAorc3ltYm9sICJGRVRDSF9IRUFEIiwgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIGhlIGhhcyBhbnl0aGluZyB3b3J0aAorcHVsbGluZywgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgZmV0Y2ggL2hvbWUvYm9iL215cmVwbyBtYXN0ZXIKK2FsaWNlJCBnaXQgbG9nIC1wIEhFQUQuLkZFVENIX0hFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIG9wZXJhdGlvbiBpcyBzYWZlIGV2ZW4gaWYgQWxpY2UgaGFzIHVuY29tbWl0dGVkIGxvY2FsIGNoYW5nZXMuCitUaGUgcmFuZ2Ugbm90YXRpb24gIkhFQUQuLkZFVENIX0hFQUQiIG1lYW5zICJzaG93IGV2ZXJ5dGhpbmcgdGhhdCBpcyByZWFjaGFibGUKK2Zyb20gdGhlIEZFVENIX0hFQUQgYnV0IGV4Y2x1ZGUgYW55dGhpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBIRUFEIi4KK0FsaWNlIGFscmVhZHkga25vd3MgZXZlcnl0aGluZyB0aGF0IGxlYWRzIHRvIGhlciBjdXJyZW50IHN0YXRlIChIRUFEKSwKK2FuZCByZXZpZXdzIHdoYXQgQm9iIGhhcyBpbiBoaXMgc3RhdGUgKEZFVENIX0hFQUQpIHRoYXQgc2hlIGhhcyBub3QKK3NlZW4gd2l0aCB0aGlzIGNvbW1hbmQuCisKK0lmIEFsaWNlIHdhbnRzIHRvIHZpc3VhbGl6ZSB3aGF0IEJvYiBkaWQgc2luY2UgdGhlaXIgaGlzdG9yaWVzIGZvcmtlZAorc2hlIGNhbiBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIEhFQUQuLkZFVENIX0hFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHVzZXMgdGhlIHNhbWUgdHdvLWRvdCByYW5nZSBub3RhdGlvbiB3ZSBzYXcgZWFybGllciB3aXRoICdnaXQgbG9nJy4KKworQWxpY2UgbWF5IHdhbnQgdG8gdmlldyB3aGF0IGJvdGggb2YgdGhlbSBkaWQgc2luY2UgdGhleSBmb3JrZWQuCitTaGUgY2FuIHVzZSB0aHJlZS1kb3QgZm9ybSBpbnN0ZWFkIG9mIHRoZSB0d28tZG90IGZvcm06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIEhFQUQuLi5GRVRDSF9IRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtZWFucyAic2hvdyBldmVyeXRoaW5nIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gZWl0aGVyIG9uZSwgYnV0CitleGNsdWRlIGFueXRoaW5nIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYm90aCBvZiB0aGVtIi4KKworUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSByYW5nZSBub3RhdGlvbiBjYW4gYmUgdXNlZCB3aXRoIGJvdGggZ2l0aworYW5kICJnaXQgbG9nIi4KKworQWZ0ZXIgaW5zcGVjdGluZyB3aGF0IEJvYiBkaWQsIGlmIHRoZXJlIGlzIG5vdGhpbmcgdXJnZW50LCBBbGljZSBtYXkKK2RlY2lkZSB0byBjb250aW51ZSB3b3JraW5nIHdpdGhvdXQgcHVsbGluZyBmcm9tIEJvYi4gIElmIEJvYidzIGhpc3RvcnkKK2RvZXMgaGF2ZSBzb21ldGhpbmcgQWxpY2Ugd291bGQgaW1tZWRpYXRlbHkgbmVlZCwgQWxpY2UgbWF5IGNob29zZSB0bworc3Rhc2ggaGVyIHdvcmstaW4tcHJvZ3Jlc3MgZmlyc3QsIGRvIGEgInB1bGwiLCBhbmQgdGhlbiBmaW5hbGx5IHVuc3Rhc2gKK2hlciB3b3JrLWluLXByb2dyZXNzIG9uIHRvcCBvZiB0aGUgcmVzdWx0aW5nIGhpc3RvcnkuCisKK1doZW4geW91IGFyZSB3b3JraW5nIGluIGEgc21hbGwgY2xvc2VseSBrbml0IGdyb3VwLCBpdCBpcyBub3QKK3VudXN1YWwgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc2FtZSByZXBvc2l0b3J5IG92ZXIgYW5kIG92ZXIKK2FnYWluLiAgQnkgZGVmaW5pbmcgJ3JlbW90ZScgcmVwb3NpdG9yeSBzaG9ydGhhbmQsIHlvdSBjYW4gbWFrZQoraXQgZWFzaWVyOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgcmVtb3RlIGFkZCBib2IgL2hvbWUvYm9iL215cmVwbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhpcywgQWxpY2UgY2FuIHBlcmZvcm0gdGhlIGZpcnN0IHBhcnQgb2YgdGhlICJwdWxsIiBvcGVyYXRpb24KK2Fsb25lIHVzaW5nIHRoZSAnZ2l0IGZldGNoJyBjb21tYW5kIHdpdGhvdXQgbWVyZ2luZyB0aGVtIHdpdGggaGVyIG93bgorYnJhbmNoLCB1c2luZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBmZXRjaCBib2IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVW5saWtlIHRoZSBsb25naGFuZCBmb3JtLCB3aGVuIEFsaWNlIGZldGNoZXMgZnJvbSBCb2IgdXNpbmcgYQorcmVtb3RlIHJlcG9zaXRvcnkgc2hvcnRoYW5kIHNldCB1cCB3aXRoICdnaXQgcmVtb3RlJywgd2hhdCB3YXMKK2ZldGNoZWQgaXMgc3RvcmVkIGluIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCwgaW4gdGhpcyBjYXNlCitgYm9iL21hc3RlcmAuICBTbyBhZnRlciB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgZ2l0IGxvZyAtcCBtYXN0ZXIuLmJvYi9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgY2hhbmdlcyB0aGF0IEJvYiBtYWRlIHNpbmNlIGhlIGJyYW5jaGVkIGZyb20KK0FsaWNlJ3MgbWFzdGVyIGJyYW5jaC4KKworQWZ0ZXIgZXhhbWluaW5nIHRob3NlIGNoYW5nZXMsIEFsaWNlCitjb3VsZCBtZXJnZSB0aGUgY2hhbmdlcyBpbnRvIGhlciBtYXN0ZXIgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgZ2l0IG1lcmdlIGJvYi9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBgbWVyZ2VgIGNhbiBhbHNvIGJlIGRvbmUgYnkgJ3B1bGxpbmcgZnJvbSBoZXIgb3duIHJlbW90ZS10cmFja2luZworYnJhbmNoJywgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgZ2l0IHB1bGwgLiByZW1vdGVzL2JvYi9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IGdpdCBwdWxsIGFsd2F5cyBtZXJnZXMgaW50byB0aGUgY3VycmVudCBicmFuY2gsCityZWdhcmRsZXNzIG9mIHdoYXQgZWxzZSBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgorCitMYXRlciwgQm9iIGNhbiB1cGRhdGUgaGlzIHJlcG8gd2l0aCBBbGljZSdzIGxhdGVzdCBjaGFuZ2VzIHVzaW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2JvYiQgZ2l0IHB1bGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IGhlIGRvZXNuJ3QgbmVlZCB0byBnaXZlIHRoZSBwYXRoIHRvIEFsaWNlJ3MgcmVwb3NpdG9yeTsKK3doZW4gQm9iIGNsb25lZCBBbGljZSdzIHJlcG9zaXRvcnksIGdpdCBzdG9yZWQgdGhlIGxvY2F0aW9uIG9mIGhlcgorcmVwb3NpdG9yeSBpbiB0aGUgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uLCBhbmQgdGhhdCBsb2NhdGlvbiBpcwordXNlZCBmb3IgcHVsbHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2JvYiQgZ2l0IGNvbmZpZyAtLWdldCByZW1vdGUub3JpZ2luLnVybAorL2hvbWUvYWxpY2UvcHJvamVjdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoVGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gY3JlYXRlZCBieSAnZ2l0IGNsb25lJyBpcyB2aXNpYmxlIHVzaW5nCitgZ2l0IGNvbmZpZyAtbGAsIGFuZCB0aGUgbGlua2dpdDpnaXQtY29uZmlnWzFdIG1hbiBwYWdlCitleHBsYWlucyB0aGUgbWVhbmluZyBvZiBlYWNoIG9wdGlvbi4pCisKK0dpdCBhbHNvIGtlZXBzIGEgcHJpc3RpbmUgY29weSBvZiBBbGljZSdzIG1hc3RlciBicmFuY2ggdW5kZXIgdGhlCituYW1lICJvcmlnaW4vbWFzdGVyIjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9iJCBnaXQgYnJhbmNoIC1yCisgIG9yaWdpbi9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgQm9iIGxhdGVyIGRlY2lkZXMgdG8gd29yayBmcm9tIGEgZGlmZmVyZW50IGhvc3QsIGhlIGNhbiBzdGlsbAorcGVyZm9ybSBjbG9uZXMgYW5kIHB1bGxzIHVzaW5nIHRoZSBzc2ggcHJvdG9jb2w6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2JvYiQgZ2l0IGNsb25lIGFsaWNlLm9yZzovaG9tZS9hbGljZS9wcm9qZWN0IG15cmVwbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbHRlcm5hdGl2ZWx5LCBnaXQgaGFzIGEgbmF0aXZlIHByb3RvY29sLCBvciBjYW4gdXNlIHJzeW5jIG9yIGh0dHA7CitzZWUgbGlua2dpdDpnaXQtcHVsbFsxXSBmb3IgZGV0YWlscy4KKworR2l0IGNhbiBhbHNvIGJlIHVzZWQgaW4gYSBDVlMtbGlrZSBtb2RlLCB3aXRoIGEgY2VudHJhbCByZXBvc2l0b3J5Cit0aGF0IHZhcmlvdXMgdXNlcnMgcHVzaCBjaGFuZ2VzIHRvOyBzZWUgbGlua2dpdDpnaXQtcHVzaFsxXSBhbmQKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XS4KKworRXhwbG9yaW5nIGhpc3RvcnkKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCBoaXN0b3J5IGlzIHJlcHJlc2VudGVkIGFzIGEgc2VyaWVzIG9mIGludGVycmVsYXRlZCBjb21taXRzLiAgV2UKK2hhdmUgYWxyZWFkeSBzZWVuIHRoYXQgdGhlICdnaXQgbG9nJyBjb21tYW5kIGNhbiBsaXN0IHRob3NlIGNvbW1pdHMuCitOb3RlIHRoYXQgZmlyc3QgbGluZSBvZiBlYWNoIGdpdCBsb2cgZW50cnkgYWxzbyBnaXZlcyBhIG5hbWUgZm9yIHRoZQorY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cKK2NvbW1pdCBjODJhMjJjMzljYmMzMjU3NmY2NGY1YzZiM2YyNGI5OWVhODE0OWM3CitBdXRob3I6IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK0RhdGU6ICAgVHVlIE1heSAxNiAxNzoxODoyMiAyMDA2IC0wNzAwCisKKyAgICBtZXJnZS1iYXNlOiBDbGFyaWZ5IHRoZSBjb21tZW50cyBvbiBwb3N0IHByb2Nlc3NpbmcuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIGNhbiBnaXZlIHRoaXMgbmFtZSB0byAnZ2l0IHNob3cnIHRvIHNlZSB0aGUgZGV0YWlscyBhYm91dCB0aGlzCitjb21taXQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgYzgyYTIyYzM5Y2JjMzI1NzZmNjRmNWM2YjNmMjRiOTllYTgxNDljNworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCdXQgdGhlcmUgYXJlIG90aGVyIHdheXMgdG8gcmVmZXIgdG8gY29tbWl0cy4gIFlvdSBjYW4gdXNlIGFueSBpbml0aWFsCitwYXJ0IG9mIHRoZSBuYW1lIHRoYXQgaXMgbG9uZyBlbm91Z2ggdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyBjODJhMjJjMzljCSMgdGhlIGZpcnN0IGZldyBjaGFyYWN0ZXJzIG9mIHRoZSBuYW1lIGFyZQorCQkJIyB1c3VhbGx5IGVub3VnaAorJCBnaXQgc2hvdyBIRUFECQkjIHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoCiskIGdpdCBzaG93IGV4cGVyaW1lbnRhbAkjIHRoZSB0aXAgb2YgdGhlICJleHBlcmltZW50YWwiIGJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFdmVyeSBjb21taXQgdXN1YWxseSBoYXMgb25lICJwYXJlbnQiIGNvbW1pdAord2hpY2ggcG9pbnRzIHRvIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgcHJvamVjdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyBIRUFEXiAgIyB0byBzZWUgdGhlIHBhcmVudCBvZiBIRUFECiskIGdpdCBzaG93IEhFQUReXiAjIHRvIHNlZSB0aGUgZ3JhbmRwYXJlbnQgb2YgSEVBRAorJCBnaXQgc2hvdyBIRUFEfjQgIyB0byBzZWUgdGhlIGdyZWF0LWdyZWF0IGdyYW5kcGFyZW50IG9mIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IG1lcmdlIGNvbW1pdHMgbWF5IGhhdmUgbW9yZSB0aGFuIG9uZSBwYXJlbnQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgSEVBRF4xICMgc2hvdyB0aGUgZmlyc3QgcGFyZW50IG9mIEhFQUQgKHNhbWUgYXMgSEVBRF4pCiskIGdpdCBzaG93IEhFQUReMiAjIHNob3cgdGhlIHNlY29uZCBwYXJlbnQgb2YgSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFsc28gZ2l2ZSBjb21taXRzIG5hbWVzIG9mIHlvdXIgb3duOyBhZnRlciBydW5uaW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHRhZyB2Mi41IDFiMmUxZDYzZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworeW91IGNhbiByZWZlciB0byAxYjJlMWQ2M2ZmIGJ5IHRoZSBuYW1lICJ2Mi41Ii4gIElmIHlvdSBpbnRlbmQgdG8KK3NoYXJlIHRoaXMgbmFtZSB3aXRoIG90aGVyIHBlb3BsZSAoZm9yIGV4YW1wbGUsIHRvIGlkZW50aWZ5IGEgcmVsZWFzZQordmVyc2lvbiksIHlvdSBzaG91bGQgY3JlYXRlIGEgInRhZyIgb2JqZWN0LCBhbmQgcGVyaGFwcyBzaWduIGl0OyBzZWUKK2xpbmtnaXQ6Z2l0LXRhZ1sxXSBmb3IgZGV0YWlscy4KKworQW55IGdpdCBjb21tYW5kIHRoYXQgbmVlZHMgdG8ga25vdyBhIGNvbW1pdCBjYW4gdGFrZSBhbnkgb2YgdGhlc2UKK25hbWVzLiAgRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgdjIuNSBIRUFECSAjIGNvbXBhcmUgdGhlIGN1cnJlbnQgSEVBRCB0byB2Mi41CiskIGdpdCBicmFuY2ggc3RhYmxlIHYyLjUgIyBzdGFydCBhIG5ldyBicmFuY2ggbmFtZWQgInN0YWJsZSIgYmFzZWQKKwkJCSAjIGF0IHYyLjUKKyQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAjIHJlc2V0IHlvdXIgY3VycmVudCBicmFuY2ggYW5kIHdvcmtpbmcKKwkJCSAjIGRpcmVjdG9yeSB0byBpdHMgc3RhdGUgYXQgSEVBRF4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmUgY2FyZWZ1bCB3aXRoIHRoYXQgbGFzdCBjb21tYW5kOiBpbiBhZGRpdGlvbiB0byBsb3NpbmcgYW55IGNoYW5nZXMKK2luIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgaXQgd2lsbCBhbHNvIHJlbW92ZSBhbGwgbGF0ZXIgY29tbWl0cyBmcm9tCit0aGlzIGJyYW5jaC4gIElmIHRoaXMgYnJhbmNoIGlzIHRoZSBvbmx5IGJyYW5jaCBjb250YWluaW5nIHRob3NlCitjb21taXRzLCB0aGV5IHdpbGwgYmUgbG9zdC4gIEFsc28sIGRvbid0IHVzZSAnZ2l0IHJlc2V0JyBvbiBhCitwdWJsaWNseS12aXNpYmxlIGJyYW5jaCB0aGF0IG90aGVyIGRldmVsb3BlcnMgcHVsbCBmcm9tLCBhcyBpdCB3aWxsCitmb3JjZSBuZWVkbGVzcyBtZXJnZXMgb24gb3RoZXIgZGV2ZWxvcGVycyB0byBjbGVhbiB1cCB0aGUgaGlzdG9yeS4KK0lmIHlvdSBuZWVkIHRvIHVuZG8gY2hhbmdlcyB0aGF0IHlvdSBoYXZlIHB1c2hlZCwgdXNlICdnaXQgcmV2ZXJ0JworaW5zdGVhZC4KKworVGhlICdnaXQgZ3JlcCcgY29tbWFuZCBjYW4gc2VhcmNoIGZvciBzdHJpbmdzIGluIGFueSB2ZXJzaW9uIG9mIHlvdXIKK3Byb2plY3QsIHNvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGdyZXAgImhlbGxvIiB2Mi41CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NlYXJjaGVzIGZvciBhbGwgb2NjdXJyZW5jZXMgb2YgImhlbGxvIiBpbiB2Mi41LgorCitJZiB5b3UgbGVhdmUgb3V0IHRoZSBjb21taXQgbmFtZSwgJ2dpdCBncmVwJyB3aWxsIHNlYXJjaCBhbnkgb2YgdGhlCitmaWxlcyBpdCBtYW5hZ2VzIGluIHlvdXIgY3VycmVudCBkaXJlY3RvcnkuICBTbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBncmVwICJoZWxsbyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaXMgYSBxdWljayB3YXkgdG8gc2VhcmNoIGp1c3QgdGhlIGZpbGVzIHRoYXQgYXJlIHRyYWNrZWQgYnkgZ2l0LgorCitNYW55IGdpdCBjb21tYW5kcyBhbHNvIHRha2Ugc2V0cyBvZiBjb21taXRzLCB3aGljaCBjYW4gYmUgc3BlY2lmaWVkCitpbiBhIG51bWJlciBvZiB3YXlzLiAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyB3aXRoICdnaXQgbG9nJzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIHYyLjUuLnYyLjYgICAgICAgICAgICAjIGNvbW1pdHMgYmV0d2VlbiB2Mi41IGFuZCB2Mi42CiskIGdpdCBsb2cgdjIuNS4uICAgICAgICAgICAgICAgICMgY29tbWl0cyBzaW5jZSB2Mi41CiskIGdpdCBsb2cgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iICMgY29tbWl0cyBmcm9tIHRoZSBsYXN0IDIgd2Vla3MKKyQgZ2l0IGxvZyB2Mi41Li4gTWFrZWZpbGUgICAgICAgIyBjb21taXRzIHNpbmNlIHYyLjUgd2hpY2ggbW9kaWZ5CisJCQkJIyBNYWtlZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFsc28gZ2l2ZSAnZ2l0IGxvZycgYSAicmFuZ2UiIG9mIGNvbW1pdHMgd2hlcmUgdGhlIGZpcnN0IGlzIG5vdAorbmVjZXNzYXJpbHkgYW4gYW5jZXN0b3Igb2YgdGhlIHNlY29uZDsgZm9yIGV4YW1wbGUsIGlmIHRoZSB0aXBzIG9mCit0aGUgYnJhbmNoZXMgInN0YWJsZSIgYW5kICJtYXN0ZXIiIGRpdmVyZ2VkIGZyb20gYSBjb21tb24KK2NvbW1pdCBzb21lIHRpbWUgYWdvLCB0aGVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyBzdGFibGUuLm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIGxpc3QgY29tbWl0cyBtYWRlIGluIHRoZSBtYXN0ZXIgYnJhbmNoIGJ1dCBub3QgaW4gdGhlCitzdGFibGUgYnJhbmNoLCB3aGlsZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgbWFzdGVyLi5zdGFibGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBzaG93IHRoZSBsaXN0IG9mIGNvbW1pdHMgbWFkZSBvbiB0aGUgc3RhYmxlIGJyYW5jaCBidXQgbm90Cit0aGUgbWFzdGVyIGJyYW5jaC4KKworVGhlICdnaXQgbG9nJyBjb21tYW5kIGhhcyBhIHdlYWtuZXNzOiBpdCBtdXN0IHByZXNlbnQgY29tbWl0cyBpbiBhCitsaXN0LiAgV2hlbiB0aGUgaGlzdG9yeSBoYXMgbGluZXMgb2YgZGV2ZWxvcG1lbnQgdGhhdCBkaXZlcmdlZCBhbmQKK3RoZW4gbWVyZ2VkIGJhY2sgdG9nZXRoZXIsIHRoZSBvcmRlciBpbiB3aGljaCAnZ2l0IGxvZycgcHJlc2VudHMKK3Rob3NlIGNvbW1pdHMgaXMgbWVhbmluZ2xlc3MuCisKK01vc3QgcHJvamVjdHMgd2l0aCBtdWx0aXBsZSBjb250cmlidXRvcnMgKHN1Y2ggYXMgdGhlIExpbnV4IGtlcm5lbCwKK29yIGdpdCBpdHNlbGYpIGhhdmUgZnJlcXVlbnQgbWVyZ2VzLCBhbmQgJ2dpdGsnIGRvZXMgYSBiZXR0ZXIgam9iIG9mCit2aXN1YWxpemluZyB0aGVpciBoaXN0b3J5LiAgRm9yIGV4YW1wbGUsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayAtLXNpbmNlPSIyIHdlZWtzIGFnbyIgZHJpdmVycy8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWxsb3dzIHlvdSB0byBicm93c2UgYW55IGNvbW1pdHMgZnJvbSB0aGUgbGFzdCAyIHdlZWtzIG9mIGNvbW1pdHMKK3RoYXQgbW9kaWZpZWQgZmlsZXMgdW5kZXIgdGhlICJkcml2ZXJzIiBkaXJlY3RvcnkuICAoTm90ZTogeW91IGNhbgorYWRqdXN0IGdpdGsncyBmb250cyBieSBob2xkaW5nIGRvd24gdGhlIGNvbnRyb2wga2V5IHdoaWxlIHByZXNzaW5nCisiLSIgb3IgIisiLikKKworRmluYWxseSwgbW9zdCBjb21tYW5kcyB0aGF0IHRha2UgZmlsZW5hbWVzIHdpbGwgb3B0aW9uYWxseSBhbGxvdyB5b3UKK3RvIHByZWNlZGUgYW55IGZpbGVuYW1lIGJ5IGEgY29tbWl0LCB0byBzcGVjaWZ5IGEgcGFydGljdWxhciB2ZXJzaW9uCitvZiB0aGUgZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiB2Mi41Ok1ha2VmaWxlIEhFQUQ6TWFrZWZpbGUuaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIHVzZSAnZ2l0IHNob3cnIHRvIHNlZSBhbnkgc3VjaCBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IHYyLjU6TWFrZWZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTmV4dCBTdGVwcworLS0tLS0tLS0tLQorCitUaGlzIHR1dG9yaWFsIHNob3VsZCBiZSBlbm91Z2ggdG8gcGVyZm9ybSBiYXNpYyBkaXN0cmlidXRlZCByZXZpc2lvbgorY29udHJvbCBmb3IgeW91ciBwcm9qZWN0cy4gIEhvd2V2ZXIsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRlcHRoCithbmQgcG93ZXIgb2YgZ2l0IHlvdSBuZWVkIHRvIHVuZGVyc3RhbmQgdHdvIHNpbXBsZSBpZGVhcyBvbiB3aGljaCBpdAoraXMgYmFzZWQ6CisKKyAgKiBUaGUgb2JqZWN0IGRhdGFiYXNlIGlzIHRoZSByYXRoZXIgZWxlZ2FudCBzeXN0ZW0gdXNlZCB0bworICAgIHN0b3JlIHRoZSBoaXN0b3J5IG9mIHlvdXIgcHJvamVjdC0tZmlsZXMsIGRpcmVjdG9yaWVzLCBhbmQKKyAgICBjb21taXRzLgorCisgICogVGhlIGluZGV4IGZpbGUgaXMgYSBjYWNoZSBvZiB0aGUgc3RhdGUgb2YgYSBkaXJlY3RvcnkgdHJlZSwKKyAgICB1c2VkIHRvIGNyZWF0ZSBjb21taXRzLCBjaGVjayBvdXQgd29ya2luZyBkaXJlY3RvcmllcywgYW5kCisgICAgaG9sZCB0aGUgdmFyaW91cyB0cmVlcyBpbnZvbHZlZCBpbiBhIG1lcmdlLgorCitQYXJ0IHR3byBvZiB0aGlzIHR1dG9yaWFsIGV4cGxhaW5zIHRoZSBvYmplY3QKK2RhdGFiYXNlLCB0aGUgaW5kZXggZmlsZSwgYW5kIGEgZmV3IG90aGVyIG9kZHMgYW5kIGVuZHMgdGhhdCB5b3UnbGwKK25lZWQgdG8gbWFrZSB0aGUgbW9zdCBvZiBnaXQuIFlvdSBjYW4gZmluZCBpdCBhdCBsaW5rZ2l0OmdpdHR1dG9yaWFsLTJbN10uCisKK0lmIHlvdSBkb24ndCB3YW50IHRvIGNvbnRpbnVlIHdpdGggdGhhdCByaWdodCBhd2F5LCBhIGZldyBvdGhlcgorZGlncmVzc2lvbnMgdGhhdCBtYXkgYmUgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBhcmU6CisKKyAgKiBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sIGxpbmtnaXQ6Z2l0LWFtWzFdOiBUaGVzZSBjb252ZXJ0CisgICAgc2VyaWVzIG9mIGdpdCBjb21taXRzIGludG8gZW1haWxlZCBwYXRjaGVzLCBhbmQgdmljZSB2ZXJzYSwKKyAgICB1c2VmdWwgZm9yIHByb2plY3RzIHN1Y2ggYXMgdGhlIExpbnV4IGtlcm5lbCB3aGljaCByZWx5IGhlYXZpbHkKKyAgICBvbiBlbWFpbGVkIHBhdGNoZXMuCisKKyAgKiBsaW5rZ2l0OmdpdC1iaXNlY3RbMV06IFdoZW4gdGhlcmUgaXMgYSByZWdyZXNzaW9uIGluIHlvdXIKKyAgICBwcm9qZWN0LCBvbmUgd2F5IHRvIHRyYWNrIGRvd24gdGhlIGJ1ZyBpcyBieSBzZWFyY2hpbmcgdGhyb3VnaAorICAgIHRoZSBoaXN0b3J5IHRvIGZpbmQgdGhlIGV4YWN0IGNvbW1pdCB0aGF0J3MgdG8gYmxhbWUuICBHaXQgYmlzZWN0CisgICAgY2FuIGhlbHAgeW91IHBlcmZvcm0gYSBiaW5hcnkgc2VhcmNoIGZvciB0aGF0IGNvbW1pdC4gIEl0IGlzCisgICAgc21hcnQgZW5vdWdoIHRvIHBlcmZvcm0gYSBjbG9zZS10by1vcHRpbWFsIHNlYXJjaCBldmVuIGluIHRoZQorICAgIGNhc2Ugb2YgY29tcGxleCBub24tbGluZWFyIGhpc3Rvcnkgd2l0aCBsb3RzIG9mIG1lcmdlZCBicmFuY2hlcy4KKworICAqIGxpbmtnaXQ6Z2l0d29ya2Zsb3dzWzddOiBHaXZlcyBhbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZAorICAgIHdvcmtmbG93cy4KKworICAqIGxpbms6ZXZlcnlkYXkuaHRtbFtFdmVyeWRheSBHSVQgd2l0aCAyMCBDb21tYW5kcyBPciBTb10KKworICAqIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XTogR2l0IGZvciBDVlMgdXNlcnMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbmtnaXQ6Z2l0LWhlbHBbMV0sCitsaW5rZ2l0OmdpdHdvcmtmbG93c1s3XSwKK2xpbms6ZXZlcnlkYXkuaHRtbFtFdmVyeWRheSBnaXRdLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXR3ZWIuY29uZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHdlYi5jb25mLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQ3NDU1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR3ZWIuY29uZi50eHQKQEAgLTAsMCArMSw4OTYgQEAKK2dpdHdlYi5jb25mKDUpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXR3ZWIuY29uZiAtIEdpdHdlYiAoZ2l0IHdlYiBpbnRlcmZhY2UpIGNvbmZpZ3VyYXRpb24gZmlsZQorCitTWU5PUFNJUworLS0tLS0tLS0KKy9ldGMvZ2l0d2ViLmNvbmYsIC9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mLCAkR0lUV0VCRElSL2dpdHdlYl9jb25maWcucGVybAorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhlIGdpdHdlYiBDR0kgc2NyaXB0IGZvciB2aWV3aW5nIEdpdCByZXBvc2l0b3JpZXMgb3ZlciB0aGUgd2ViIHVzZXMgYQorcGVybCBzY3JpcHQgZnJhZ21lbnQgYXMgaXRzIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFlvdSBjYW4gc2V0IHZhcmlhYmxlcwordXNpbmcgImBvdXIgJHZhcmlhYmxlID0gdmFsdWVgIjsgdGV4dCBmcm9tIGEgIiMiIGNoYXJhY3RlciB1bnRpbCB0aGUKK2VuZCBvZiBhIGxpbmUgaXMgaWdub3JlZC4gIFNlZSAqcGVybHN5biooMSkgZm9yIGRldGFpbHMuCisKK0FuIGV4YW1wbGU6CisKKyAgICAjIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcKKyAgICAjCisgICAgb3VyICRwcm9qZWN0cm9vdCA9ICIvc3J2L2dpdCI7ICMgRkhTIHJlY29tbWVuZGF0aW9uCisgICAgb3VyICRzaXRlX25hbWUgPSAnRXhhbXBsZS5vcmcgPj4gUmVwb3MnOworCisKK1RoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyB0aGF0Cit3ZXJlIGJ1aWx0IGludG8gZ2l0d2ViIGF0IHRoZSB0aW1lIHRoZSAnZ2l0d2ViLmNnaScgc2NyaXB0IHdhcyBnZW5lcmF0ZWQuCisKK1doaWxlIG9uZSBjb3VsZCBqdXN0IGFsdGVyIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGluIHRoZSBnaXR3ZWIKK0NHSSBpdHNlbGYsIHRob3NlIGNoYW5nZXMgd291bGQgYmUgbG9zdCB1cG9uIHVwZ3JhZGUuICBDb25maWd1cmF0aW9uCitzZXR0aW5ncyBtaWdodCBhbHNvIGJlIHBsYWNlZCBpbnRvIGEgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCitDR0kgc2NyaXB0IHdpdGggdGhlIGRlZmF1bHQgbmFtZSAnZ2l0d2ViX2NvbmZpZy5wZXJsJyAtLSBhbGxvd2luZworb25lIHRvIGhhdmUgbXVsdGlwbGUgZ2l0d2ViIGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBieQordGhlIHVzZSBvZiBzeW1saW5rcy4KKworTm90ZSB0aGF0IHNvbWUgY29uZmlndXJhdGlvbiBjYW4gYmUgY29udHJvbGxlZCBvbiBwZXItcmVwb3NpdG9yeSByYXRoZXIgdGhhbgorZ2l0d2ViLXdpZGUgYmFzaXM6IHNlZSAiUGVyLXJlcG9zaXRvcnkgZ2l0d2ViIGNvbmZpZ3VyYXRpb24iIHN1YnNlY3Rpb24gb24KK2xpbmtnaXQ6Z2l0d2ViWzFdIG1hbnBhZ2UuCisKKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorR2l0d2ViIHJlYWRzIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIHRoZSBmb2xsb3dpbmcgc291cmNlcyBpbiB0aGUKK2ZvbGxvd2luZyBvcmRlcjoKKworICogYnVpbHQtaW4gdmFsdWVzIChzb21lIHNldCBkdXJpbmcgYnVpbGQgc3RhZ2UpLAorCisgKiBjb21tb24gc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0bworICAgJy9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mJyksCisKKyAqIGVpdGhlciBwZXItaW5zdGFuY2UgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0byAnZ2l0d2ViX2NvbmZpZy5wZXJsJworICAgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBpbnN0YWxsZWQgZ2l0d2ViKSwgb3IgaWYgaXQgZG9lcyBub3QgZXhpc3RzCisgICB0aGVuIGZhbGxiYWNrIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJy9ldGMvZ2l0d2ViLmNvbmYnKS4KKworVmFsdWVzIG9idGFpbmVkIGluIGxhdGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3ZlcnJpZGUgdmFsdWVzIG9idGFpbmVkIGVhcmxpZXIKK2luIHRoZSBhYm92ZSBzZXF1ZW5jZS4KKworTG9jYXRpb25zIG9mIHRoZSBjb21tb24gc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLCB0aGUgZmFsbGJhY2sKK3N5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgdGhlIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uIGZpbGUKK2FyZSBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZSB1c2luZyBidWlsZC10aW1lIE1ha2VmaWxlIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlcywgcmVzcGVjdGl2ZWx5IGBHSVRXRUJfQ09ORklHX0NPTU1PTmAsIGBHSVRXRUJfQ09ORklHX1NZU1RFTWAKK2FuZCBgR0lUV0VCX0NPTkZJR2AuCisKK1lvdSBjYW4gYWxzbyBvdmVycmlkZSBsb2NhdGlvbnMgb2YgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZXMgZHVyaW5nCitydW50aW1lIGJ5IHNldHRpbmcgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CitgR0lUV0VCX0NPTkZJR19DT01NT05gLCBgR0lUV0VCX0NPTkZJR19TWVNURU1gIGFuZCBgR0lUV0VCX0NPTkZJR2AKK3RvIGEgbm9uLWVtcHR5IHZhbHVlLgorCisKK1RoZSBzeW50YXggb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgaXMgdGhhdCBvZiBQZXJsLCBzaW5jZSB0aGVzZSBmaWxlcyBhcmUKK2hhbmRsZWQgYnkgc291cmNpbmcgdGhlbSBhcyBmcmFnbWVudHMgb2YgUGVybCBjb2RlICh0aGUgbGFuZ3VhZ2UgdGhhdAorZ2l0d2ViIGl0c2VsZiBpcyB3cml0dGVuIGluKS4gVmFyaWFibGVzIGFyZSB0eXBpY2FsbHkgc2V0IHVzaW5nIHRoZQorYG91cmAgcXVhbGlmaWVyIChhcyBpbiAiYG91ciAkdmFyaWFibGUgPSA8dmFsdWU+O2AiKSB0byBhdm9pZCBzeW50YXgKK2Vycm9ycyBpZiBhIG5ldyB2ZXJzaW9uIG9mIGdpdHdlYiBubyBsb25nZXIgdXNlcyBhIHZhcmlhYmxlIGFuZCB0aGVyZWZvcmUKK3N0b3BzIGRlY2xhcmluZyBpdC4KKworWW91IGNhbiBpbmNsdWRlIG90aGVyIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2luZyByZWFkX2NvbmZpZ19maWxlKCkKK3N1YnJvdXRpbmUuICBGb3IgZXhhbXBsZSwgb25lIG1pZ2h0IHdhbnQgdG8gcHV0IGdpdHdlYiBjb25maWd1cmF0aW9uCityZWxhdGVkIHRvIGFjY2VzcyBjb250cm9sIGZvciB2aWV3aW5nIHJlcG9zaXRvcmllcyB2aWEgR2l0b2xpdGUgKG9uZQorb2YgZ2l0IHJlcG9zaXRvcnkgbWFuYWdlbWVudCB0b29scykgaW4gYSBzZXBhcmF0ZSBmaWxlLCBlLmcuIGluCisnL2V0Yy9naXR3ZWItZ2l0b2xpdGUuY29uZicuICBUbyBpbmNsdWRlIGl0LCBwdXQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlYWRfY29uZmlnX2ZpbGUoIi9ldGMvZ2l0d2ViLWdpdG9saXRlLmNvbmYiKTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NvbWV3aGVyZSBpbiBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlIHVzZWQsIGUuZy4gaW4gcGVyLWluc3RhbGxhdGlvbgorZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZS4gIE5vdGUgdGhhdCByZWFkX2NvbmZpZ19maWxlKCkgY2hlY2tzIGl0c2VsZgordGhhdCB0aGUgZmlsZSBpdCByZWFkcyBleGlzdHMsIGFuZCBkb2VzIG5vdGhpbmcgaWYgaXQgaXMgbm90IGZvdW5kLgorSXQgYWxzbyBoYW5kbGVzIGVycm9ycyBpbiBpbmNsdWRlZCBmaWxlLgorCisKK1RoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gd2l0aCBubyBjb25maWd1cmF0aW9uIGZpbGUgYXQgYWxsIG1heSB3b3JrCitwZXJmZWN0bHkgd2VsbCBmb3Igc29tZSBpbnN0YWxsYXRpb25zLiAgU3RpbGwsIGEgY29uZmlndXJhdGlvbiBmaWxlIGlzCit1c2VmdWwgZm9yIGN1c3RvbWl6aW5nIG9yIHR3ZWFraW5nIHRoZSBiZWhhdmlvciBvZiBnaXR3ZWIgaW4gbWFueSB3YXlzLCBhbmQKK3NvbWUgb3B0aW9uYWwgZmVhdHVyZXMgd2lsbCBub3QgYmUgcHJlc2VudCB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkIHVzaW5nCit0aGUgY29uZmlndXJhYmxlIGAlZmVhdHVyZXNgIHZhcmlhYmxlIChzZWUgYWxzbyAiQ29uZmlndXJpbmcgZ2l0d2ViCitmZWF0dXJlcyIgc2VjdGlvbiBiZWxvdykuCisKKworQ09ORklHVVJBVElPTiBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTb21lIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGhhdmUgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgKGVtYmVkZGVkIGluIHRoZSBDR0kKK3NjcmlwdCkgc2V0IGR1cmluZyBidWlsZGluZyBnaXR3ZWIgLS0gaWYgdGhhdCBpcyB0aGUgY2FzZSwgdGhpcyBmYWN0IGlzIHB1dAoraW4gdGhlaXIgZGVzY3JpcHRpb24uICBTZWUgZ2l0d2ViJ3MgJ0lOU1RBTEwnIGZpbGUgZm9yIGluc3RydWN0aW9ucyBvbiBidWlsZGluZworYW5kIGluc3RhbGxpbmcgZ2l0d2ViLgorCisKK0xvY2F0aW9uIG9mIHJlcG9zaXRvcmllcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZGVzY3JpYmVkIGJlbG93IGNvbnRyb2wgaG93IGdpdHdlYiBmaW5kcworZ2l0IHJlcG9zaXRvcmllcywgYW5kIGhvdyByZXBvc2l0b3JpZXMgYXJlIGRpc3BsYXllZCBhbmQgYWNjZXNzZWQuCisKK1NlZSBhbHNvICJSZXBvc2l0b3JpZXMiIGFuZCBsYXRlciBzdWJzZWN0aW9ucyBpbiBsaW5rZ2l0OmdpdHdlYlsxXSBtYW5wYWdlLgorCiskcHJvamVjdHJvb3Q6OgorCUFic29sdXRlIGZpbGVzeXN0ZW0gcGF0aCB3aGljaCB3aWxsIGJlIHByZXBlbmRlZCB0byBwcm9qZWN0IHBhdGg7CisJdGhlIHBhdGggdG8gcmVwb3NpdG9yeSBpcyBgJHByb2plY3Ryb290LyRwcm9qZWN0YC4gIFNldCB0bworCWAkR0lUV0VCX1BST0pFQ1RST09UYCBkdXJpbmcgaW5zdGFsbGF0aW9uLiAgVGhpcyB2YXJpYWJsZSBoYXMgdG8gYmUKKwlzZXQgY29ycmVjdGx5IGZvciBnaXR3ZWIgdG8gZmluZCByZXBvc2l0b3JpZXMuCisrCitGb3IgZXhhbXBsZSwgaWYgYCRwcm9qZWN0cm9vdGAgaXMgc2V0IHRvICIvc3J2L2dpdCIgYnkgcHV0dGluZyB0aGUgZm9sbG93aW5nCitpbiBnaXR3ZWIgY29uZmlnIGZpbGU6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJHByb2plY3Ryb290ID0gIi9zcnYvZ2l0IjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK3RoZW4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraHR0cDovL2dpdC5leGFtcGxlLmNvbS9naXR3ZWIuY2dpP3A9Zm9vL2Jhci5naXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworYW5kIGl0cyBwYXRoX2luZm8gYmFzZWQgZXF1aXZhbGVudAorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitodHRwOi8vZ2l0LmV4YW1wbGUuY29tL2dpdHdlYi5jZ2kvZm9vL2Jhci5naXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKword2lsbCBtYXAgdG8gdGhlIHBhdGggJy9zcnYvZ2l0L2Zvby9iYXIuZ2l0JyBvbiB0aGUgZmlsZXN5c3RlbS4KKworJHByb2plY3RzX2xpc3Q6OgorCU5hbWUgb2YgYSBwbGFpbiB0ZXh0IGZpbGUgbGlzdGluZyBwcm9qZWN0cywgb3IgYSBuYW1lIG9mIGRpcmVjdG9yeQorCXRvIGJlIHNjYW5uZWQgZm9yIHByb2plY3RzLgorKworUHJvamVjdCBsaXN0IGZpbGVzIHNob3VsZCBsaXN0IG9uZSBwcm9qZWN0IHBlciBsaW5lLCB3aXRoIGVhY2ggbGluZQoraGF2aW5nIHRoZSBmb2xsb3dpbmcgZm9ybWF0CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPFVSSS1lbmNvZGVkIGZpbGVzeXN0ZW0gcGF0aCB0byByZXBvc2l0b3J5PiBTUCA8VVJJLWVuY29kZWQgcmVwb3NpdG9yeSBvd25lcj4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIGRldGVybWluZWQgYnkgdGhlIGBHSVRXRUJfTElTVGAKK21ha2VmaWxlIHZhcmlhYmxlIGF0IGluc3RhbGxhdGlvbiB0aW1lLiAgSWYgdGhpcyB2YXJpYWJsZSBpcyBlbXB0eSwgZ2l0d2ViCit3aWxsIGZhbGwgYmFjayB0byBzY2FubmluZyB0aGUgYCRwcm9qZWN0cm9vdGAgZGlyZWN0b3J5IGZvciByZXBvc2l0b3JpZXMuCisKKyRwcm9qZWN0X21heGRlcHRoOjoKKwlJZiBgJHByb2plY3RzX2xpc3RgIHZhcmlhYmxlIGlzIHVuc2V0LCBnaXR3ZWIgd2lsbCByZWN1cnNpdmVseQorCXNjYW4gZmlsZXN5c3RlbSBmb3IgZ2l0IHJlcG9zaXRvcmllcy4gIFRoZSBgJHByb2plY3RfbWF4ZGVwdGhgCisJaXMgdXNlZCB0byBsaW1pdCB0cmF2ZXJzaW5nIGRlcHRoLCByZWxhdGl2ZSB0byBgJHByb2plY3Ryb290YAorCShzdGFydGluZyBwb2ludCk7IGl0IG1lYW5zIHRoYXQgZGlyZWN0b3JpZXMgd2hpY2ggYXJlIGZ1cnRoZXIKKwlmcm9tIGAkcHJvamVjdHJvb3RgIHRoYW4gYCRwcm9qZWN0X21heGRlcHRoYCB3aWxsIGJlIHNraXBwZWQuCisrCitJdCBpcyBwdXJlbHkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvcmlnaW5hbGx5IGludGVuZGVkIGZvciBNYWNPUyBYLAord2hlcmUgcmVjdXJzaXZlIGRpcmVjdG9yeSB0cmF2ZXJzYWwgaXMgc2xvdy4gIEdpdHdlYiBmb2xsb3dzIHN5bWJvbGljCitsaW5rcywgYnV0IGl0IGRldGVjdHMgY3ljbGVzLCBpZ25vcmluZyBhbnkgZHVwbGljYXRlIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKysKK1RoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYnVpbGQtdGltZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgR0lUV0VCX1BST0pFQ1RfTUFYREVQVEhgLCB3aGljaCBkZWZhdWx0cyB0bworMjAwNy4KKworJGV4cG9ydF9vazo6CisJU2hvdyByZXBvc2l0b3J5IG9ubHkgaWYgdGhpcyBmaWxlIGV4aXN0cyAoaW4gcmVwb3NpdG9yeSkuICBPbmx5CisJZWZmZWN0aXZlIGlmIHRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRydWUuICBDYW4gYmUgc2V0IHdoZW4KKwlidWlsZGluZyBnaXR3ZWIgYnkgc2V0dGluZyBgR0lUV0VCX0VYUE9SVF9PS2AuICBUaGlzIHBhdGggaXMKKwlyZWxhdGl2ZSB0byBgR0lUX0RJUmAuICBnaXQtZGFlbW9uWzFdIHVzZXMgJ2dpdC1kYWVtb24tZXhwb3J0LW9rJywKKwl1bmxlc3Mgc3RhcnRlZCB3aXRoIGAtLWV4cG9ydC1hbGxgLiAgQnkgZGVmYXVsdCB0aGlzIHZhcmlhYmxlIGlzCisJbm90IHNldCwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGZlYXR1cmUgaXMgdHVybmVkIG9mZi4KKworJGV4cG9ydF9hdXRoX2hvb2s6OgorCUZ1bmN0aW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlcG9zaXRvcmllcyBzaG91bGQgYmUgc2hvd24uCisJVGhpcyBzdWJyb3V0aW5lIHNob3VsZCB0YWtlIG9uZSBwYXJhbWV0ZXIsIHRoZSBmdWxsIHBhdGggdG8KKwlhIHByb2plY3QsIGFuZCBpZiBpdCByZXR1cm5zIHRydWUsIHRoYXQgcHJvamVjdCB3aWxsIGJlIGluY2x1ZGVkCisJaW4gdGhlIHByb2plY3RzIGxpc3QgYW5kIGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIGdpdHdlYiBhcyBsb25nCisJYXMgaXQgZnVsZmlsbHMgdGhlIG90aGVyIHJlcXVpcmVtZW50cyBkZXNjcmliZWQgYnkgJGV4cG9ydF9vaywKKwkkcHJvamVjdHNfbGlzdCwgYW5kICRwcm9qZWN0c19tYXhkZXB0aC4gIEV4YW1wbGU6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJGV4cG9ydF9hdXRoX2hvb2sgPSBzdWIgeyByZXR1cm4gLWUgIiRfWzBdL2dpdC1kYWVtb24tZXhwb3J0LW9rIjsgfTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK3Rob3VnaCB0aGUgYWJvdmUgbWlnaHQgYmUgZG9uZSBieSB1c2luZyBgJGV4cG9ydF9va2AgaW5zdGVhZAorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3VyICRleHBvcnRfb2sgPSAiZ2l0LWRhZW1vbi1leHBvcnQtb2siOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSWYgbm90IHNldCAoZGVmYXVsdCksIGl0IG1lYW5zIHRoYXQgdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLgorKworU2VlIGFsc28gbW9yZSBpbnZvbHZlZCBleGFtcGxlIGluICJDb250cm9sbGluZyBhY2Nlc3MgdG8gZ2l0IHJlcG9zaXRvcmllcyIKK3N1YnNlY3Rpb24gb24gbGlua2dpdDpnaXR3ZWJbMV0gbWFucGFnZS4KKworJHN0cmljdF9leHBvcnQ6OgorCU9ubHkgYWxsb3cgdmlld2luZyBvZiByZXBvc2l0b3JpZXMgYWxzbyBzaG93biBvbiB0aGUgb3ZlcnZpZXcgcGFnZS4KKwlUaGlzIGZvciBleGFtcGxlIG1ha2VzIGAkZ2l0d2ViX2V4cG9ydF9va2AgZmlsZSBkZWNpZGUgaWYgcmVwb3NpdG9yeSBpcworCWF2YWlsYWJsZSBhbmQgbm90IG9ubHkgaWYgaXQgaXMgc2hvd24uICBJZiBgJGdpdHdlYl9saXN0YCBwb2ludHMgdG8KKwlmaWxlIHdpdGggbGlzdCBvZiBwcm9qZWN0LCBvbmx5IHRob3NlIHJlcG9zaXRvcmllcyBsaXN0ZWQgd291bGQgYmUKKwlhdmFpbGFibGUgZm9yIGdpdHdlYi4gIENhbiBiZSBzZXQgZHVyaW5nIGJ1aWxkaW5nIGdpdHdlYiB2aWEKKwlgR0lUV0VCX1NUUklDVF9FWFBPUlRgLiAgQnkgZGVmYXVsdCB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzZXQsIHdoaWNoCisJbWVhbnMgdGhhdCB5b3UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aG9zZSByZXBvc2l0b3JpZXMgdGhhdCBhcmUgaGlkZGVuCisJZnJvbSBwcm9qZWN0cyBsaXN0IHBhZ2UgKGUuZy4gdGhlIGFyZSBub3QgbGlzdGVkIGluIHRoZSAkcHJvamVjdHNfbGlzdAorCWZpbGUpLgorCisKK0ZpbmRpbmcgZmlsZXMKK35+fn5+fn5+fn5+fn4KK1RoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGVsbCBnaXR3ZWIgd2hlcmUgdG8gZmluZCBmaWxlcy4KK1RoZSB2YWx1ZXMgb2YgdGhlc2UgdmFyaWFibGVzIGFyZSBwYXRocyBvbiB0aGUgZmlsZXN5c3RlbS4KKworJEdJVDo6CisJQ29yZSBnaXQgZXhlY3V0YWJsZSB0byB1c2UuICBCeSBkZWZhdWx0IHNldCB0byBgJEdJVF9CSU5ESVIvZ2l0YCwgd2hpY2gKKwlpbiB0dXJuIGlzIGJ5IGRlZmF1bHQgc2V0IHRvIGAkKGJpbmRpcikvZ2l0YC4gIElmIHlvdSB1c2UgZ2l0IGluc3RhbGxlZAorCWZyb20gYSBiaW5hcnkgcGFja2FnZSwgeW91IHNob3VsZCB1c3VhbGx5IHNldCB0aGlzIHRvICIvdXNyL2Jpbi9naXQiLgorCVRoaXMgY2FuIGp1c3QgYmUgImdpdCIgaWYgeW91ciB3ZWIgc2VydmVyIGhhcyBhIHNlbnNpYmxlIFBBVEg7IGZyb20KKwlzZWN1cml0eSBwb2ludCBvZiB2aWV3IGl0IGlzIGJldHRlciB0byB1c2UgYWJzb2x1dGUgcGF0aCB0byBnaXQgYmluYXJ5LgorCUlmIHlvdSBoYXZlIG11bHRpcGxlIGdpdCB2ZXJzaW9ucyBpbnN0YWxsZWQgaXQgY2FuIGJlIHVzZWQgdG8gY2hvb3NlCisJd2hpY2ggb25lIHRvIHVzZS4gIE11c3QgYmUgKGNvcnJlY3RseSkgc2V0IGZvciBnaXR3ZWIgdG8gYmUgYWJsZSB0bworCXdvcmsuCisKKyRtaW1ldHlwZXNfZmlsZTo6CisJRmlsZSB0byB1c2UgZm9yIChmaWxlbmFtZSBleHRlbnNpb24gYmFzZWQpIGd1ZXNzaW5nIG9mIE1JTUUgdHlwZXMgYmVmb3JlCisJdHJ5aW5nICcvZXRjL21pbWUudHlwZXMnLiAgKk5PVEUqIHRoYXQgdGhpcyBwYXRoLCBpZiByZWxhdGl2ZSwgaXMgdGFrZW4KKwlhcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBnaXQgcmVwb3NpdG9yeSwgbm90IHRvIENHSSBzY3JpcHQuICBJZiB1bnNldCwKKwlvbmx5ICcvZXRjL21pbWUudHlwZXMnIGlzIHVzZWQgKGlmIHByZXNlbnQgb24gZmlsZXN5c3RlbSkuICBJZiBubyBtaW1ldHlwZXMKKwlmaWxlIGlzIGZvdW5kLCBtaW1ldHlwZSBndWVzc2luZyBiYXNlZCBvbiBleHRlbnNpb24gb2YgZmlsZSBpcyBkaXNhYmxlZC4KKwlVbnNldCBieSBkZWZhdWx0LgorCiskaGlnaGxpZ2h0X2Jpbjo6CisJUGF0aCB0byB0aGUgaGlnaGxpZ2h0IGV4ZWN1dGFibGUgdG8gdXNlIChpdCBtdXN0IGJlIHRoZSBvbmUgZnJvbQorCWh0dHA6Ly93d3cuYW5kcmUtc2ltb24uZGVbXSBkdWUgdG8gYXNzdW1wdGlvbnMgYWJvdXQgcGFyYW1ldGVycyBhbmQgb3V0cHV0KS4KKwlCeSBkZWZhdWx0IHNldCB0byAnaGlnaGxpZ2h0Jzsgc2V0IGl0IHRvIGZ1bGwgcGF0aCB0byBoaWdobGlnaHQKKwlleGVjdXRhYmxlIGlmIGl0IGlzIG5vdCBpbnN0YWxsZWQgb24geW91ciB3ZWIgc2VydmVyJ3MgUEFUSC4KKwlOb3RlIHRoYXQgJ2hpZ2hsaWdodCcgZmVhdHVyZSBtdXN0IGJlIHNldCBmb3IgZ2l0d2ViIHRvIGFjdHVhbGx5CisJdXNlIHN5bnRheCBoaWdobGlnaHRpbmcuCisrCisqTk9URSo6IGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBuZXcgZmlsZSB0eXBlIChzdXBwb3J0ZWQgYnkKKyJoaWdobGlnaHQiIGJ1dCBub3QgdXNlZCBieSBnaXR3ZWIpLCB5b3UgbmVlZCB0byBtb2RpZnkgYCVoaWdobGlnaHRfZXh0YAorb3IgYCVoaWdobGlnaHRfYmFzZW5hbWVgLCBkZXBlbmRpbmcgb24gd2hldGhlciB5b3UgZGV0ZWN0IHR5cGUgb2YgZmlsZQorYmFzZWQgb24gZXh0ZW5zaW9uIChmb3IgZXhhbXBsZSAic2giKSBvciBvbiBpdHMgYmFzZW5hbWUgKGZvciBleGFtcGxlCisiTWFrZWZpbGUiKS4gIFRoZSBrZXlzIG9mIHRoZXNlIGhhc2hlcyBhcmUgZXh0ZW5zaW9uIGFuZCBiYXNlbmFtZSwKK3Jlc3BlY3RpdmVseSwgYW5kIHZhbHVlIGZvciBnaXZlbiBrZXkgaXMgbmFtZSBvZiBzeW50YXggdG8gYmUgcGFzc2VkIHZpYQorYC0tc3ludGF4IDxzeW50YXg+YCB0byBoaWdobGlnaHRlci4KKysKK0ZvciBleGFtcGxlIGlmIHJlcG9zaXRvcmllcyB5b3UgYXJlIGhvc3RpbmcgdXNlICJwaHRtbCIgZXh0ZW5zaW9uIGZvcgorUEhQIGZpbGVzLCBhbmQgeW91IHdhbnQgdG8gaGF2ZSBjb3JyZWN0IHN5bnRheC1oaWdobGlnaHRpbmcgZm9yIHRob3NlCitmaWxlcywgeW91IGNhbiBhZGQgdGhlIGZvbGxvd2luZyB0byBnaXR3ZWIgY29uZmlndXJhdGlvbjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3VyICVoaWdobGlnaHRfZXh0OworJGhpZ2hsaWdodF9leHR7J3BodG1sJ30gPSAncGhwJzsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0xpbmtzIGFuZCB0aGVpciB0YXJnZXRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGRlc2NyaWJlZCBiZWxvdyBjb25maWd1cmUgc29tZSBvZiBnaXR3ZWIgbGlua3M6Cit0aGVpciB0YXJnZXQgYW5kIHRoZWlyIGxvb2sgKHRleHQgb3IgaW1hZ2UpLCBhbmQgd2hlcmUgdG8gZmluZCBwYWdlCitwcmVyZXF1aXNpdGVzIChzdHlsZXNoZWV0LCBmYXZpY29uLCBpbWFnZXMsIHNjcmlwdHMpLiAgVXN1YWxseSB0aGV5IGFyZSBsZWZ0CithdCB0aGVpciBkZWZhdWx0IHZhbHVlcywgd2l0aCB0aGUgcG9zc2libGUgZXhjZXB0aW9uIG9mIGBAc3R5bGVzaGVldHNgCit2YXJpYWJsZS4KKworQHN0eWxlc2hlZXRzOjoKKwlMaXN0IG9mIFVSSXMgb2Ygc3R5bGVzaGVldHMgKHJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSSSBvZiBhIHBhZ2UpLiBZb3UKKwltaWdodCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgc3R5bGVzaGVldCwgZm9yIGV4YW1wbGUgdG8gdXNlICJnaXR3ZWIuY3NzIgorCWFzIGJhc2Ugd2l0aCBzaXRlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgaW4gYSBzZXBhcmF0ZSBzdHlsZXNoZWV0CisJdG8gbWFrZSBpdCBlYXNpZXIgdG8gdXBncmFkZSBnaXR3ZWIuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBhZGQKKwlhIGBzaXRlYCBzdHlsZXNoZWV0IGJ5IHB1dHRpbmcKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3B1c2ggQHN0eWxlc2hlZXRzLCAiZ2l0d2ViLXNpdGUuY3NzIjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK2luIHRoZSBnaXR3ZWIgY29uZmlnIGZpbGUuICBUaG9zZSB2YWx1ZXMgdGhhdCBhcmUgcmVsYXRpdmUgcGF0aHMgYXJlCityZWxhdGl2ZSB0byBiYXNlIFVSSSBvZiBnaXR3ZWIuCisrCitUaGlzIGxpc3Qgc2hvdWxkIGNvbnRhaW4gdGhlIFVSSSBvZiBnaXR3ZWIncyBzdGFuZGFyZCBzdHlsZXNoZWV0LiAgVGhlIGRlZmF1bHQKK1VSSSBvZiBnaXR3ZWIgc3R5bGVzaGVldCBjYW4gYmUgc2V0IGF0IGJ1aWxkIHRpbWUgdXNpbmcgdGhlIGBHSVRXRUJfQ1NTYAorbWFrZWZpbGUgdmFyaWFibGUuICBJdHMgZGVmYXVsdCB2YWx1ZSBpcyAnc3RhdGljL2dpdHdlYi5jc3MnCisob3IgJ3N0YXRpYy9naXR3ZWIubWluLmNzcycgaWYgdGhlIGBDU1NNSU5gIHZhcmlhYmxlIGlzIGRlZmluZWQsCitpLmUuIGlmIENTUyBtaW5pZmllciBpcyB1c2VkIGR1cmluZyBidWlsZCkuCisrCisqTm90ZSo6IHRoZXJlIGlzIGFsc28gYSBsZWdhY3kgYCRzdHlsZXNoZWV0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3aGljaCB3YXMKK3VzZWQgYnkgb2xkZXIgZ2l0d2ViLiAgSWYgYCRzdHlsZXNoZWV0YCB2YXJpYWJsZSBpcyBkZWZpbmVkLCBvbmx5IENTUyBzdHlsZXNoZWV0CitnaXZlbiBieSB0aGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgZ2l0d2ViLgorCiskbG9nbzo6CisJUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0ICdnaXQtbG9nby5wbmcnIG9uIHlvdXIgd2ViCisJc2VydmVyLCBvciB0byBiZSBtb3JlIHRoZSBnZW5lcmljIFVSSSBvZiBsb2dvLCA3MngyNyBzaXplKS4gIFRoaXMgaW1hZ2UKKwlpcyBkaXNwbGF5ZWQgaW4gdGhlIHRvcCByaWdodCBjb3JuZXIgb2YgZWFjaCBnaXR3ZWIgcGFnZSBhbmQgdXNlZCBhcworCWEgbG9nbyBmb3IgdGhlIEF0b20gZmVlZC4gIFJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSSSBvZiBnaXR3ZWIgKGFzIGEgcGF0aCkuCisJQ2FuIGJlIGFkanVzdGVkIHdoZW4gYnVpbGRpbmcgZ2l0d2ViIHVzaW5nIGBHSVRXRUJfTE9HT2AgdmFyaWFibGUKKwlCeSBkZWZhdWx0IHNldCB0byAnc3RhdGljL2dpdC1sb2dvLnBuZycuCisKKyRmYXZpY29uOjoKKwlQb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHlvdSBwdXQgJ2dpdC1mYXZpY29uLnBuZycgb24geW91ciB3ZWIKKwlzZXJ2ZXIsIG9yIHRvIGJlIG1vcmUgdGhlIGdlbmVyaWMgVVJJIG9mIGZhdmljb24sIHdoaWNoIHdpbGwgYmUgc2VydmVkCisJYXMgImltYWdlL3BuZyIgdHlwZS4gIFdlYiBicm93c2VycyB0aGF0IHN1cHBvcnQgZmF2aWNvbnMgKHdlYnNpdGUgaWNvbnMpCisJbWF5IGRpc3BsYXkgdGhlbSBpbiB0aGUgYnJvd3NlcidzIFVSTCBiYXIgYW5kIG5leHQgdG8gdGhlIHNpdGUgbmFtZSBpbgorCWJvb2ttYXJrcy4gIFJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSSSBvZiBnaXR3ZWIuICBDYW4gYmUgYWRqdXN0ZWQgYXQKKwlidWlsZCB0aW1lIHVzaW5nIGBHSVRXRUJfRkFWSUNPTmAgdmFyaWFibGUuCisJQnkgZGVmYXVsdCBzZXQgdG8gJ3N0YXRpYy9naXQtZmF2aWNvbi5wbmcnLgorCiskamF2YXNjcmlwdDo6CisJUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0ICdnaXR3ZWIuanMnIG9uIHlvdXIgd2ViIHNlcnZlciwKKwlvciB0byBiZSBtb3JlIGdlbmVyaWMgdGhlIFVSSSBvZiBKYXZhU2NyaXB0IGNvZGUgdXNlZCBieSBnaXR3ZWIuCisJUmVsYXRpdmUgdG8gdGhlIGJhc2UgVVJJIG9mIGdpdHdlYi4gIENhbiBiZSBzZXQgYXQgYnVpbGQgdGltZSB1c2luZworCXRoZSBgR0lUV0VCX0pTYCBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisrCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlaXRoZXIgJ3N0YXRpYy9naXR3ZWIuanMnLCBvciAnc3RhdGljL2dpdHdlYi5taW4uanMnIGlmCit0aGUgYEpTTUlOYCBidWlsZCB2YXJpYWJsZSB3YXMgZGVmaW5lZCwgaS5lLiBpZiBKYXZhU2NyaXB0IG1pbmlmaWVyIHdhcyB1c2VkCithdCBidWlsZCB0aW1lLiAgKk5vdGUqIHRoYXQgdGhpcyBzaW5nbGUgZmlsZSBpcyBnZW5lcmF0ZWQgZnJvbSBtdWx0aXBsZQoraW5kaXZpZHVhbCBKYXZhU2NyaXB0ICJtb2R1bGVzIi4KKworJGhvbWVfbGluazo6CisJVGFyZ2V0IG9mIHRoZSBob21lIGxpbmsgb24gdGhlIHRvcCBvZiBhbGwgcGFnZXMgKHRoZSBmaXJzdCBwYXJ0IG9mIHZpZXcKKwkiYnJlYWRjcnVtYnMiKS4gIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIHRoZSBhYnNvbHV0ZSBVUkkgb2YgYSBjdXJyZW50IHBhZ2UKKwkodG8gdGhlIHZhbHVlIG9mIGAkbXlfdXJpYCB2YXJpYWJsZSwgb3IgdG8gIi8iIGlmIGAkbXlfdXJpYCBpcyB1bmRlZmluZWQKKwlvciBpcyBhbiBlbXB0eSBzdHJpbmcpLgorCiskaG9tZV9saW5rX3N0cjo6CisJTGFiZWwgZm9yIHRoZSAiaG9tZSBsaW5rIiBhdCB0aGUgdG9wIG9mIGFsbCBwYWdlcywgbGVhZGluZyB0byBgJGhvbWVfbGlua2AKKwkodXN1YWxseSB0aGUgbWFpbiBnaXR3ZWIgcGFnZSwgd2hpY2ggY29udGFpbnMgdGhlIHByb2plY3RzIGxpc3QpLiAgSXQgaXMKKwl1c2VkIGFzIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgZ2l0d2ViJ3MgImJyZWFkY3J1bWIgdHJhaWwiOgorCWA8aG9tZSBsaW5rPiAvIDxwcm9qZWN0PiAvIDxhY3Rpb24+YC4gIENhbiBiZSBzZXQgYXQgYnVpbGQgdGltZSB1c2luZworCXRoZSBgR0lUV0VCX0hPTUVfTElOS19TVFJgIHZhcmlhYmxlLiAgQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gInByb2plY3RzIiwKKwlhcyB0aGlzIGxpbmsgbGVhZHMgdG8gdGhlIGxpc3Qgb2YgcHJvamVjdHMuICBPdGhlciBwb3B1bGFyIGNob2ljZSBpdCB0bworCXNldCBpdCB0byB0aGUgbmFtZSBvZiBzaXRlLgorCiskbG9nb191cmw6OgorJGxvZ29fbGFiZWw6OgorCVVSSSBhbmQgbGFiZWwgKHRpdGxlKSBmb3IgdGhlIEdpdCBsb2dvIGxpbmsgKG9yIHlvdXIgc2l0ZSBsb2dvLAorCWlmIHlvdSBjaG9zZSB0byB1c2UgZGlmZmVyZW50IGxvZ28gaW1hZ2UpLiBCeSBkZWZhdWx0LCB0aGVzZSBib3RoCisJcmVmZXIgdG8gZ2l0IGhvbWVwYWdlLCBodHRwOi8vZ2l0LXNjbS5jb21bXTsgaW4gdGhlIHBhc3QsIHRoZXkgcG9pbnRlZAorCXRvIGdpdCBkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly93d3cua2VybmVsLm9yZ1tdLgorCisKK0NoYW5naW5nIGdpdHdlYidzIGxvb2sKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1lvdSBjYW4gYWRqdXN0IGhvdyBwYWdlcyBnZW5lcmF0ZWQgYnkgZ2l0d2ViIGxvb2sgdXNpbmcgdGhlIHZhcmlhYmxlcyBkZXNjcmliZWQKK2JlbG93LiAgWW91IGNhbiBjaGFuZ2UgdGhlIHNpdGUgbmFtZSwgYWRkIGNvbW1vbiBoZWFkZXJzIGFuZCBmb290ZXJzIGZvciBhbGwKK3BhZ2VzLCBhbmQgYWRkIGEgZGVzY3JpcHRpb24gb2YgdGhpcyBnaXR3ZWIgaW5zdGFsbGF0aW9uIG9uIGl0cyBtYWluIHBhZ2UKKyh3aGljaCBpcyB0aGUgcHJvamVjdHMgbGlzdCBwYWdlKSwgZXRjLgorCiskc2l0ZV9uYW1lOjoKKwlOYW1lIG9mIHlvdXIgc2l0ZSBvciBvcmdhbml6YXRpb24sIHRvIGFwcGVhciBpbiBwYWdlIHRpdGxlcy4gIFNldCBpdAorCXRvIHNvbWV0aGluZyBkZXNjcmlwdGl2ZSBmb3IgY2xlYXJlciBib29rbWFya3MgZXRjLiAgSWYgdGhpcyB2YXJpYWJsZQorCWlzIG5vdCBzZXQgb3IgaXMsIHRoZW4gZ2l0d2ViIHVzZXMgdGhlIHZhbHVlIG9mIHRoZSBgU0VSVkVSX05BTUVgCisJQ0dJIGVudmlyb25tZW50IHZhcmlhYmxlLCBzZXR0aW5nIHNpdGUgbmFtZSB0byAiJFNFUlZFUl9OQU1FIEdpdCIsCisJb3IgIlVudGl0bGVkIEdpdCIgaWYgdGhpcyB2YXJpYWJsZSBpcyBub3Qgc2V0IChlLmcuIGlmIHJ1bm5pbmcgZ2l0d2ViCisJYXMgc3RhbmRhbG9uZSBzY3JpcHQpLgorKworQ2FuIGJlIHNldCB1c2luZyB0aGUgYEdJVFdFQl9TSVRFTkFNRWAgYXQgYnVpbGQgdGltZS4gIFVuc2V0IGJ5IGRlZmF1bHQuCisKKyRzaXRlX2h0bWxfaGVhZF9zdHJpbmc6OgorCUhUTUwgc25pcHBldCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgPGhlYWQ+IHNlY3Rpb24gb2YgZWFjaCBwYWdlLgorCUNhbiBiZSBzZXQgdXNpbmcgYEdJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkdgIGF0IGJ1aWxkIHRpbWUuCisJTm8gZGVmYXVsdCB2YWx1ZS4KKworJHNpdGVfaGVhZGVyOjoKKwlOYW1lIG9mIGEgZmlsZSB3aXRoIEhUTUwgdG8gYmUgaW5jbHVkZWQgYXQgdGhlIHRvcCBvZiBlYWNoIHBhZ2UuCisJUmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAnZ2l0d2ViLmNnaScgc2NyaXB0LgorCUNhbiBiZSBzZXQgdXNpbmcgYEdJVFdFQl9TSVRFX0hFQURFUmAgYXQgYnVpbGQgdGltZS4gIE5vIGRlZmF1bHQKKwl2YWx1ZS4KKworJHNpdGVfZm9vdGVyOjoKKwlOYW1lIG9mIGEgZmlsZSB3aXRoIEhUTUwgdG8gYmUgaW5jbHVkZWQgYXQgdGhlIGJvdHRvbSBvZiBlYWNoIHBhZ2UuCisJUmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAnZ2l0d2ViLmNnaScgc2NyaXB0LgorCUNhbiBiZSBzZXQgdXNpbmcgYEdJVFdFQl9TSVRFX0ZPT1RFUmAgYXQgYnVpbGQgdGltZS4gIE5vIGRlZmF1bHQKKwl2YWx1ZS4KKworJGhvbWVfdGV4dDo6CisJTmFtZSBvZiBhIEhUTUwgZmlsZSB3aGljaCwgaWYgaXQgZXhpc3RzLCBpcyBpbmNsdWRlZCBvbiB0aGUKKwlnaXR3ZWIgcHJvamVjdHMgb3ZlcnZpZXcgcGFnZSAoInByb2plY3RzX2xpc3QiIHZpZXcpLiAgUmVsYXRpdmUgdG8KKwl0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGdpdHdlYi5jZ2kgc2NyaXB0LiAgRGVmYXVsdCB2YWx1ZQorCWNhbiBiZSBhZGp1c3RlZCBkdXJpbmcgYnVpbGQgdGltZSB1c2luZyBgR0lUV0VCX0hPTUVURVhUYCB2YXJpYWJsZS4KKwlCeSBkZWZhdWx0IHNldCB0byAnaW5kZXh0ZXh0Lmh0bWwnLgorCiskcHJvamVjdHNfbGlzdF9kZXNjcmlwdGlvbl93aWR0aDo6CisJVGhlIHdpZHRoIChpbiBjaGFyYWN0ZXJzKSBvZiB0aGUgIkRlc2NyaXB0aW9uIiBjb2x1bW4gb2YgdGhlIHByb2plY3RzIGxpc3QuCisJTG9uZ2VyIGRlc2NyaXB0aW9ucyB3aWxsIGJlIHRydW5jYXRlZCAodHJ5aW5nIHRvIGN1dCBhdCB3b3JkIGJvdW5kYXJ5KTsKKwl0aGUgZnVsbCBkZXNjcmlwdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlICd0aXRsZScgYXR0cmlidXRlICh1c3VhbGx5IHNob3duIG9uCisJbW91c2VvdmVyKS4gIFRoZSBkZWZhdWx0IGlzIDI1LCB3aGljaCBtaWdodCBiZSB0b28gc21hbGwgaWYgeW91CisJdXNlIGxvbmcgcHJvamVjdCBkZXNjcmlwdGlvbnMuCisKKyRkZWZhdWx0X3Byb2plY3RzX29yZGVyOjoKKwlEZWZhdWx0IHZhbHVlIG9mIG9yZGVyaW5nIG9mIHByb2plY3RzIG9uIHByb2plY3RzIGxpc3QgcGFnZSwgd2hpY2gKKwltZWFucyB0aGUgb3JkZXJpbmcgdXNlZCBpZiB5b3UgZG9uJ3QgZXhwbGljaXRseSBzb3J0IHByb2plY3RzIGxpc3QKKwkoaWYgdGhlcmUgaXMgbm8gIm8iIENHSSBxdWVyeSBwYXJhbWV0ZXIgaW4gdGhlIFVSTCkuICBWYWxpZCB2YWx1ZXMKKwlhcmUgIm5vbmUiICh1bnNvcnRlZCksICJwcm9qZWN0IiAocHJvamVjdHMgYXJlIGJ5IHByb2plY3QgbmFtZSwKKwlpLmUuIHBhdGggdG8gcmVwb3NpdG9yeSByZWxhdGl2ZSB0byBgJHByb2plY3Ryb290YCksICJkZXNjciIKKwkocHJvamVjdCBkZXNjcmlwdGlvbiksICJvd25lciIsIGFuZCAiYWdlIiAoYnkgZGF0ZSBvZiBtb3N0IGN1cnJlbnQKKwljb21taXQpLgorKworRGVmYXVsdCB2YWx1ZSBpcyAicHJvamVjdCIuICBVbmtub3duIHZhbHVlIG1lYW5zIHVuc29ydGVkLgorCisKK0NoYW5naW5nIGdpdHdlYidzIGJlaGF2aW9yCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgY29udHJvbCBfaW50ZXJuYWxfIGdpdHdlYiBiZWhhdmlvci4KKworJGRlZmF1bHRfYmxvYl9wbGFpbl9taW1ldHlwZTo6CisJRGVmYXVsdCBtaW1ldHlwZSBmb3IgdGhlIGJsb2JfcGxhaW4gKHJhdykgdmlldywgaWYgbWltZXR5cGUgY2hlY2tpbmcKKwlkb2Vzbid0IHJlc3VsdCBpbiBzb21lIG90aGVyIHR5cGU7IGJ5IGRlZmF1bHQgInRleHQvcGxhaW4iLgorCUdpdHdlYiBndWVzc2VzIG1pbWV0eXBlIG9mIGEgZmlsZSB0byBkaXNwbGF5IGJhc2VkIG9uIGV4dGVuc2lvbgorCW9mIGl0cyBmaWxlbmFtZSwgdXNpbmcgYCRtaW1ldHlwZXNfZmlsZWAgKGlmIHNldCBhbmQgZmlsZSBleGlzdHMpCisJYW5kICcvZXRjL21pbWUudHlwZXMnIGZpbGVzIChzZWUgKm1pbWUudHlwZXMqKDUpIG1hbnBhZ2U7IG9ubHkKKwlmaWxlbmFtZSBleHRlbnNpb24gcnVsZXMgYXJlIHN1cHBvcnRlZCBieSBnaXR3ZWIpLgorCiskZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQ6OgorCURlZmF1bHQgY2hhcnNldCBmb3IgdGV4dCBmaWxlcy4gSWYgdGhpcyBpcyBub3Qgc2V0LCB0aGUgd2ViIHNlcnZlcgorCWNvbmZpZ3VyYXRpb24gd2lsbCBiZSB1c2VkLiAgVW5zZXQgYnkgZGVmYXVsdC4KKworJGZhbGxiYWNrX2VuY29kaW5nOjoKKwlHaXR3ZWIgYXNzdW1lcyB0aGlzIGNoYXJzZXQgd2hlbiBhIGxpbmUgY29udGFpbnMgbm9uLVVURi04IGNoYXJhY3RlcnMuCisJVGhlIGZhbGxiYWNrIGRlY29kaW5nIGlzIHVzZWQgd2l0aG91dCBlcnJvciBjaGVja2luZywgc28gaXQgY2FuIGJlIGV2ZW4KKwkidXRmLTgiLiBUaGUgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGVuY29kaW5nOyBzZWUgdGhlICpFbmNvZGluZzo6U3VwcG9ydGVkKigzcG0pCisJbWFuIHBhZ2UgZm9yIGEgbGlzdC4gVGhlIGRlZmF1bHQgaXMgImxhdGluMSIsIGFrYS4gImlzby04ODU5LTEiLgorCitAZGlmZl9vcHRzOjoKKwlSZW5hbWUgZGV0ZWN0aW9uIG9wdGlvbnMgZm9yIGdpdC1kaWZmIGFuZCBnaXQtZGlmZi10cmVlLiBUaGUgZGVmYXVsdCBpcworCShcJy1NJyk7IHNldCBpdCB0byAoXCctQycpIG9yIChcJy1DJywgXCctQycpIHRvIGFsc28gZGV0ZWN0IGNvcGllcywKKwlvciBzZXQgaXQgdG8gKCkgaS5lLiBlbXB0eSBsaXN0IGlmIHlvdSBkb24ndCB3YW50IHRvIGhhdmUgcmVuYW1lcworCWRldGVjdGlvbi4KKysKKypOb3RlKiB0aGF0IHJlbmFtZSBhbmQgZXNwZWNpYWxseSBjb3B5IGRldGVjdGlvbiBjYW4gYmUgcXVpdGUKK0NQVS1pbnRlbnNpdmUuICBOb3RlIGFsc28gdGhhdCBub24gZ2l0IHRvb2xzIGNhbiBoYXZlIHByb2JsZW1zIHdpdGgKK3BhdGNoZXMgZ2VuZXJhdGVkIHdpdGggb3B0aW9ucyBtZW50aW9uZWQgYWJvdmUsIGVzcGVjaWFsbHkgd2hlbiB0aGV5CitpbnZvbHZlIGZpbGUgY29waWVzIChcJy1DJykgb3IgY3Jpc3MtY3Jvc3MgcmVuYW1lcyAoXCctQicpLgorCisKK1NvbWUgb3B0aW9uYWwgZmVhdHVyZXMgYW5kIHBvbGljaWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTW9zdCBvZiBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCB2aWEgYCVmZWF0dXJlYCBoYXNoOyBob3dldmVyIHNvbWUgb2YgZXh0cmEKK2dpdHdlYiBmZWF0dXJlcyBjYW4gYmUgdHVybmVkIG9uIGFuZCBjb25maWd1cmVkIHVzaW5nIHZhcmlhYmxlcyBkZXNjcmliZWQKK2JlbG93LiAgVGhpcyBsaXN0IGJlc2lkZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IGNvbnRyb2wgaG93IGdpdHdlYgorbG9va3MgZG9lcyBjb250YWluIHZhcmlhYmxlcyBjb25maWd1cmluZyBhZG1pbmlzdHJhdGl2ZSBzaWRlIG9mIGdpdHdlYgorKGUuZy4gY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgcHJldmVudGlvbjsgYWRtaXR0ZWRseSB0aGlzIGFzIHNpZGUgZWZmZWN0CithZmZlY3RzIGhvdyAic3VtbWFyeSIgcGFnZXMgbG9vayBsaWtlLCBvciBsb2FkIGxpbWl0aW5nKS4KKworQGdpdF9iYXNlX3VybF9saXN0OjoKKwlMaXN0IG9mIGdpdCBiYXNlIFVSTHMuICBUaGVzZSBVUkxzIGFyZSB1c2VkIHRvIGdlbmVyYXRlIFVSTHMKKwlkZXNjcmliaW5nIGZyb20gd2hlcmUgdG8gZmV0Y2ggYSBwcm9qZWN0LCB3aGljaCBhcmUgc2hvd24gb24KKwlwcm9qZWN0IHN1bW1hcnkgcGFnZS4gIFRoZSBmdWxsIGZldGNoIFVSTCBpcyAiYCRnaXRfYmFzZV91cmwvJHByb2plY3RgIiwKKwlmb3IgZWFjaCBlbGVtZW50IG9mIHRoaXMgbGlzdC4gWW91IGNhbiBzZXQgdXAgbXVsdGlwbGUgYmFzZSBVUkxzCisJKGZvciBleGFtcGxlIG9uZSBmb3IgYGdpdDovL2AgcHJvdG9jb2wsIGFuZCBvbmUgZm9yIGBodHRwOi8vYAorCXByb3RvY29sKS4KKysKK05vdGUgdGhhdCBwZXIgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGNhbiBiZSBzZXQgaW4gJyRHSVRfRElSL2Nsb25ldXJsJworZmlsZSwgb3IgYXMgdmFsdWVzIG9mIG11bHRpLXZhbHVlIGBnaXR3ZWIudXJsYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGluCitwcm9qZWN0IGNvbmZpZy4gIFBlci1yZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHZhbHVlCitjb21wb3NlZCBmcm9tIGBAZ2l0X2Jhc2VfdXJsX2xpc3RgIGVsZW1lbnRzIGFuZCBwcm9qZWN0IG5hbWUuCisrCitZb3UgY2FuIHNldHVwIG9uZSBzaW5nbGUgdmFsdWUgKHNpbmdsZSBlbnRyeS9pdGVtIGluIHRoaXMgbGlzdCkgYXQgYnVpbGQKK3RpbWUgYnkgc2V0dGluZyB0aGUgYEdJVFdFQl9CQVNFX1VSTGAgYnVpbHQtdGltZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gKCksIGkuZS4gYW4gZW1wdHkgbGlzdC4gIFRoaXMgbWVhbnMgdGhhdCBnaXR3ZWIKK3dvdWxkIG5vdCB0cnkgdG8gY3JlYXRlIHByb2plY3QgVVJMICh0byBmZXRjaCkgZnJvbSBwcm9qZWN0IG5hbWUuCisKKyRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXM6OgorCVdoZXRoZXIgdG8gZW5hYmxlcyB0aGUgZ3JvdXBpbmcgb2YgcHJvamVjdHMgYnkgY2F0ZWdvcnkgb24gdGhlIHByb2plY3QKKwlsaXN0IHBhZ2UuIFRoZSBjYXRlZ29yeSBvZiBhIHByb2plY3QgaXMgZGV0ZXJtaW5lZCBieSB0aGUKKwlgJEdJVF9ESVIvY2F0ZWdvcnlgIGZpbGUgb3IgdGhlIGBnaXR3ZWIuY2F0ZWdvcnlgIHZhcmlhYmxlIGluIGVhY2gKKwlyZXBvc2l0b3J5J3MgY29uZmlndXJhdGlvbi4gIERpc2FibGVkIGJ5IGRlZmF1bHQgKHNldCB0byAwKS4KKworJHByb2plY3RfbGlzdF9kZWZhdWx0X2NhdGVnb3J5OjoKKwlEZWZhdWx0IGNhdGVnb3J5IGZvciBwcm9qZWN0cyBmb3Igd2hpY2ggbm9uZSBpcyBzcGVjaWZpZWQuICBJZiB0aGlzIGlzCisJc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcsIHN1Y2ggcHJvamVjdHMgd2lsbCByZW1haW4gdW5jYXRlZ29yaXplZCBhbmQKKwlsaXN0ZWQgYXQgdGhlIHRvcCwgYWJvdmUgY2F0ZWdvcml6ZWQgcHJvamVjdHMuICBVc2VkIG9ubHkgaWYgcHJvamVjdAorCWNhdGVnb3JpZXMgYXJlIGVuYWJsZWQsIHdoaWNoIG1lYW5zIGlmIGAkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzYAorCWlzIHRydWUuICBCeSBkZWZhdWx0IHNldCB0byAiIiAoZW1wdHkgc3RyaW5nKS4KKworJHByZXZlbnRfeHNzOjoKKwlJZiB0cnVlLCBzb21lIGdpdHdlYiBmZWF0dXJlcyBhcmUgZGlzYWJsZWQgdG8gcHJldmVudCBjb250ZW50IGluCisJcmVwb3NpdG9yaWVzIGZyb20gbGF1bmNoaW5nIGNyb3NzLXNpdGUgc2NyaXB0aW5nIChYU1MpIGF0dGFja3MuICBTZXQgdGhpcworCXRvIHRydWUgaWYgeW91IGRvbid0IHRydXN0IHRoZSBjb250ZW50IG9mIHlvdXIgcmVwb3NpdG9yaWVzLgorCUZhbHNlIGJ5IGRlZmF1bHQgKHNldCB0byAwKS4KKworJG1heGxvYWQ6OgorCVVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGxvYWQgdGhhdCB3ZSB3aWxsIHN0aWxsIHJlc3BvbmQgdG8gZ2l0d2ViIHF1ZXJpZXMuCisJSWYgdGhlIHNlcnZlciBsb2FkIGV4Y2VlZHMgdGhpcyB2YWx1ZSB0aGVuIGdpdHdlYiB3aWxsIHJldHVybgorCSI1MDMgU2VydmljZSBVbmF2YWlsYWJsZSIgZXJyb3IuICBUaGUgc2VydmVyIGxvYWQgaXMgdGFrZW4gdG8gYmUgMAorCWlmIGdpdHdlYiBjYW5ub3QgZGV0ZXJtaW5lIGl0cyB2YWx1ZS4gIEN1cnJlbnRseSBpdCB3b3JrcyBvbmx5IG9uIExpbnV4LAorCXdoZXJlIGl0IHVzZXMgJy9wcm9jL2xvYWRhdmcnOyB0aGUgbG9hZCB0aGVyZSBpcyB0aGUgbnVtYmVyIG9mIGFjdGl2ZQorCXRhc2tzIG9uIHRoZSBzeXN0ZW0gLS0gcHJvY2Vzc2VzIHRoYXQgYXJlIGFjdHVhbGx5IHJ1bm5pbmcgLS0gYXZlcmFnZWQKKwlvdmVyIHRoZSBsYXN0IG1pbnV0ZS4KKysKK1NldCBgJG1heGxvYWRgIHRvIHVuZGVmaW5lZCB2YWx1ZSAoYHVuZGVmYCkgdG8gdHVybiB0aGlzIGZlYXR1cmUgb2ZmLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAwLgorCiskb21pdF9hZ2VfY29sdW1uOjoKKwlJZiB0cnVlLCBvbWl0IHRoZSBjb2x1bW4gd2l0aCBkYXRlIG9mIHRoZSBtb3N0IGN1cnJlbnQgY29tbWl0IG9uIHRoZQorCXByb2plY3RzIGxpc3QgcGFnZS4gSXQgY2FuIHNhdmUgYSBiaXQgb2YgSS9PIGFuZCBhIGZvcmsgcGVyIHJlcG9zaXRvcnkuCisKKyRvbWl0X293bmVyOjoKKwlJZiB0cnVlIHByZXZlbnRzIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gYWJvdXQgcmVwb3NpdG9yeSBvd25lci4KKworJHBlcl9yZXF1ZXN0X2NvbmZpZzo6CisJSWYgdGhpcyBpcyBzZXQgdG8gY29kZSByZWZlcmVuY2UsIGl0IHdpbGwgYmUgcnVuIG9uY2UgZm9yIGVhY2ggcmVxdWVzdC4KKwlZb3UgY2FuCXNldCBwYXJ0cyBvZiBjb25maWd1cmF0aW9uIHRoYXQgY2hhbmdlIHBlciBzZXNzaW9uIHRoaXMgd2F5LgorCUZvciBleGFtcGxlLCBvbmUgbWlnaHQgdXNlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBhIGdpdHdlYiBjb25maWd1cmF0aW9uCisJZmlsZQorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291ciAkcGVyX3JlcXVlc3RfY29uZmlnID0gc3ViIHsKKwkkRU5We0dMX1VTRVJ9ID0gJGNnaS0+cmVtb3RlX3VzZXIgfHwgImdpdHdlYiI7Cit9OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0lmIGAkcGVyX3JlcXVlc3RfY29uZmlnYCBpcyBub3QgYSBjb2RlIHJlZmVyZW5jZSwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYm9vbGVhbgordmFsdWUuICBJZiBpdCBpcyB0cnVlIGdpdHdlYiB3aWxsIHByb2Nlc3MgY29uZmlnIGZpbGVzIG9uY2UgcGVyIHJlcXVlc3QsCithbmQgaWYgaXQgaXMgZmFsc2UgZ2l0d2ViIHdpbGwgcHJvY2VzcyBjb25maWcgZmlsZXMgb25seSBvbmNlLCBlYWNoIHRpbWUgaXQKK2lzIGV4ZWN1dGVkLiAgVHJ1ZSBieSBkZWZhdWx0IChzZXQgdG8gMSkuCisrCisqTk9URSo6IGAkbXlfdXJsYCwgYCRteV91cmlgLCBhbmQgYCRiYXNlX3VybGAgYXJlIG92ZXJ3cml0dGVuIHdpdGggdGhlaXIgZGVmYXVsdAordmFsdWVzIGJlZm9yZSBldmVyeSByZXF1ZXN0LCBzbyBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlbSwgYmUgc3VyZSB0byBzZXQKK3RoaXMgdmFyaWFibGUgdG8gdHJ1ZSBvciBhIGNvZGUgcmVmZXJlbmNlIGVmZmVjdGluZyB0aGUgZGVzaXJlZCBjaGFuZ2VzLgorKworVGhpcyB2YXJpYWJsZSBtYXR0ZXJzIG9ubHkgd2hlbiB1c2luZyBwZXJzaXN0ZW50IHdlYiBlbnZpcm9ubWVudHMgdGhhdAorc2VydmUgbXVsdGlwbGUgcmVxdWVzdHMgdXNpbmcgc2luZ2xlIGdpdHdlYiBpbnN0YW5jZSwgbGlrZSBtb2RfcGVybCwKK0Zhc3RDR0kgb3IgUGxhY2t1cC4KKworCitPdGhlciB2YXJpYWJsZXMKK35+fn5+fn5+fn5+fn5+fgorVXN1YWxseSB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGNoYW5nZSAoYWRqdXN0KSBhbnkgb2YgY29uZmlndXJhdGlvbgordmFyaWFibGVzIGRlc2NyaWJlZCBiZWxvdzsgdGhleSBzaG91bGQgYmUgYXV0b21hdGljYWxseSBzZXQgYnkgZ2l0d2ViIHRvCitjb3JyZWN0IHZhbHVlLgorCisKKyR2ZXJzaW9uOjoKKwlHaXR3ZWIgdmVyc2lvbiwgc2V0IGF1dG9tYXRpY2FsbHkgd2hlbiBjcmVhdGluZyBnaXR3ZWIuY2dpIGZyb20KKwlnaXR3ZWIucGVybC4gWW91IG1pZ2h0IHdhbnQgdG8gbW9kaWZ5IGl0IGlmIHlvdSBhcmUgcnVubmluZyBtb2RpZmllZAorCWdpdHdlYiwgZm9yIGV4YW1wbGUKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3VyICR2ZXJzaW9uIC49ICIgd2l0aCBjYWNoaW5nIjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworaWYgeW91IHJ1biBtb2RpZmllZCB2ZXJzaW9uIG9mIGdpdHdlYiB3aXRoIGNhY2hpbmcgc3VwcG9ydC4gIFRoaXMgdmFyaWFibGUKK2lzIHB1cmVseSBpbmZvcm1hdGlvbmFsLCB1c2VkIGUuZy4gaW4gdGhlICJnZW5lcmF0b3IiIG1ldGEgaGVhZGVyIGluIEhUTUwKK2hlYWRlci4KKworJG15X3VybDo6CiskbXlfdXJpOjoKKwlGdWxsIFVSTCBhbmQgYWJzb2x1dGUgVVJMIG9mIHRoZSBnaXR3ZWIgc2NyaXB0OworCWluIGVhcmxpZXIgdmVyc2lvbnMgb2YgZ2l0d2ViIHlvdSBtaWdodCBoYXZlIG5lZWQgdG8gc2V0IHRob3NlCisJdmFyaWFibGVzLCBidXQgbm93IHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGRvIGl0LiAgU2VlCisJYCRwZXJfcmVxdWVzdF9jb25maWdgIGlmIHlvdSBuZWVkIHRvIHNldCB0aGVtIHN0aWxsLgorCiskYmFzZV91cmw6OgorCUJhc2UgVVJMIGZvciByZWxhdGl2ZSBVUkxzIGluIHBhZ2VzIGdlbmVyYXRlZCBieSBnaXR3ZWIsCisJKGUuZy4gYCRsb2dvYCwgYCRmYXZpY29uYCwgYEBzdHlsZXNoZWV0c2AgaWYgdGhleSBhcmUgcmVsYXRpdmUgVVJMcyksCisJbmVlZGVkIGFuZCB1c2VkICc8YmFzZSBocmVmPSIkYmFzZV91cmwiPicgb25seSBmb3IgVVJMcyB3aXRoIG5vbmVtcHR5CisJUEFUSF9JTkZPLiAgVXN1YWxseSBnaXR3ZWIgc2V0cyBpdHMgdmFsdWUgY29ycmVjdGx5LAorCWFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlLCBlLmcuIHRvICRteV91cmkgb3IgIi8iLgorCVNlZSBgJHBlcl9yZXF1ZXN0X2NvbmZpZ2AgaWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgaXQgYW55d2F5LgorCisKK0NPTkZJR1VSSU5HIEdJVFdFQiBGRUFUVVJFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNYW55IGdpdHdlYiBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCAob3IgZGlzYWJsZWQpIGFuZCBjb25maWd1cmVkIHVzaW5nIHRoZQorYCVmZWF0dXJlYCBoYXNoLiAgTmFtZXMgb2YgZ2l0d2ViIGZlYXR1cmVzIGFyZSBrZXlzIG9mIHRoaXMgaGFzaC4KKworRWFjaCBgJWZlYXR1cmVgIGhhc2ggZWxlbWVudCBpcyBhIGhhc2ggcmVmZXJlbmNlIGFuZCBoYXMgdGhlIGZvbGxvd2luZworc3RydWN0dXJlOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIjxmZWF0dXJlX25hbWU+IiA9PiB7CisJInN1YiIgPT4gPGZlYXR1cmUtc3ViIChzdWJyb3V0aW5lKT4sCisJIm92ZXJyaWRlIiA9PiA8YWxsb3ctb3ZlcnJpZGUgKGJvb2xlYW4pPiwKKwkiZGVmYXVsdCIgPT4gWyA8b3B0aW9ucz4uLi4gXQorfSwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NvbWUgZmVhdHVyZXMgY2Fubm90IGJlIG92ZXJyaWRkZW4gcGVyIHByb2plY3QuICBGb3IgdGhvc2UKK2ZlYXR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgYXBwcm9wcmlhdGUgYCVmZWF0dXJlYCBoYXNoIGVsZW1lbnQgaGFzIGEgc2ltcGxlcgorZm9ybToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyI8ZmVhdHVyZV9uYW1lPiIgPT4geworCSJvdmVycmlkZSIgPT4gMCwKKwkiZGVmYXVsdCIgPT4gWyA8b3B0aW9ucz4uLi4gXQorfSwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FzIG9uZSBjYW4gc2VlIGl0IGxhY2tzIHRoZSBcJ3N1YicgZWxlbWVudC4KKworVGhlIG1lYW5pbmcgb2YgZWFjaCBwYXJ0IG9mIGZlYXR1cmUgY29uZmlndXJhdGlvbiBpcyBkZXNjcmliZWQKK2JlbG93OgorCitkZWZhdWx0OjoKKwlMaXN0IChhcnJheSByZWZlcmVuY2UpIG9mIGZlYXR1cmUgcGFyYW1ldGVycyAoaWYgdGhlcmUgYXJlIGFueSksCisJdXNlZCBhbHNvIHRvIHRvZ2dsZSAoZW5hYmxlIG9yIGRpc2FibGUpIGdpdmVuIGZlYXR1cmUuCisrCitOb3RlIHRoYXQgaXQgaXMgY3VycmVudGx5ICphbHdheXMqIGFuIGFycmF5IHJlZmVyZW5jZSwgZXZlbiBpZgorZmVhdHVyZSBkb2Vzbid0IGFjY2VwdCBhbnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCBhbmQgXCdkZWZhdWx0JworaXMgdXNlZCBvbmx5IHRvIHR1cm4gaXQgb24gb3Igb2ZmLiAgSW4gc3VjaCBjYXNlIHlvdSB0dXJuIGZlYXR1cmUgb24KK2J5IHNldHRpbmcgdGhpcyBlbGVtZW50IHRvIGBbMV1gLCBhbmQgdG9ybiBpdCBvZmYgYnkgc2V0dGluZyBpdCB0bworYFswXWAuICBTZWUgYWxzbyB0aGUgcGFzc2FnZSBhYm91dCB0aGUgImJsYW1lIiBmZWF0dXJlIGluIHRoZSAiRXhhbXBsZXMiCitzZWN0aW9uLgorKworVG8gZGlzYWJsZSBmZWF0dXJlcyB0aGF0IGFjY2VwdCBwYXJhbWV0ZXJzIChhcmUgY29uZmlndXJhYmxlKSwgeW91CituZWVkIHRvIHNldCB0aGlzIGVsZW1lbnQgdG8gZW1wdHkgbGlzdCBpLmUuIGBbXWAuCisKK292ZXJyaWRlOjoKKwlJZiB0aGlzIGZpZWxkIGhhcyBhIHRydWUgdmFsdWUgdGhlbiB0aGUgZ2l2ZW4gZmVhdHVyZSBpcworCW92ZXJyaWRkYWJsZSwgd2hpY2ggbWVhbnMgdGhhdCBpdCBjYW4gYmUgY29uZmlndXJlZAorCShvciBlbmFibGVkL2Rpc2FibGVkKSBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzLgorKworVXN1YWxseSBnaXZlbiAiPGZlYXR1cmU+IiBpcyBjb25maWd1cmFibGUgdmlhIHRoZSBgZ2l0d2ViLjxmZWF0dXJlPmAKK2NvbmZpZyB2YXJpYWJsZSBpbiB0aGUgcGVyLXJlcG9zaXRvcnkgZ2l0IGNvbmZpZ3VyYXRpb24gZmlsZS4KKysKKypOb3RlKiB0aGF0IG5vIGZlYXR1cmUgaXMgb3ZlcnJpZGRhYmxlIGJ5IGRlZmF1bHQuCisKK3N1Yjo6CisJSW50ZXJuYWwgZGV0YWlsIG9mIGltcGxlbWVudGF0aW9uLiAgV2hhdCBpcyBpbXBvcnRhbnQgaXMgdGhhdAorCWlmIHRoaXMgZmllbGQgaXMgbm90IHByZXNlbnQgdGhlbiBwZXItcmVwb3NpdG9yeSBvdmVycmlkZSBmb3IKKwlnaXZlbiBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCisrCitZb3Ugd291bGRuJ3QgbmVlZCB0byBldmVyIGNoYW5nZSBpdCBpbiBnaXR3ZWIgY29uZmlnIGZpbGUuCisKKworRmVhdHVyZXMgaW4gYCVmZWF0dXJlYAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGdpdHdlYiBmZWF0dXJlcyB0aGF0IGFyZSBjb25maWd1cmFibGUgdmlhIGAlZmVhdHVyZWAgaGFzaCBhcmUgbGlzdGVkCitiZWxvdy4gIFRoaXMgc2hvdWxkIGJlIGEgY29tcGxldGUgbGlzdCwgYnV0IHVsdGltYXRlbHkgdGhlIGF1dGhvcml0YXRpdmUKK2FuZCBjb21wbGV0ZSBsaXN0IGlzIGluIGdpdHdlYi5jZ2kgc291cmNlIGNvZGUsIHdpdGggZmVhdHVyZXMgZGVzY3JpYmVkCitpbiB0aGUgY29tbWVudHMuCisKK2JsYW1lOjoKKwlFbmFibGUgdGhlICJibGFtZSIgYW5kICJibGFtZV9pbmNyZW1lbnRhbCIgYmxvYiB2aWV3cywgc2hvd2luZyBmb3IKKwllYWNoIGxpbmUgdGhlIGxhc3QgY29tbWl0IHRoYXQgbW9kaWZpZWQgaXQ7IHNlZSBsaW5rZ2l0OmdpdC1ibGFtZVsxXS4KKwlUaGlzIGNhbiBiZSB2ZXJ5IENQVS1pbnRlbnNpdmUgYW5kIGlzIHRoZXJlZm9yZSBkaXNhYmxlZCBieSBkZWZhdWx0LgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5ibGFtZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoYm9vbGVhbikuCisKK3NuYXBzaG90OjoKKwlFbmFibGUgYW5kIGNvbmZpZ3VyZSB0aGUgInNuYXBzaG90IiBhY3Rpb24sIHdoaWNoIGFsbG93cyB1c2VyIHRvCisJZG93bmxvYWQgYSBjb21wcmVzc2VkIGFyY2hpdmUgb2YgYW55IHRyZWUgb3IgY29tbWl0LCBhcyBwcm9kdWNlZAorCWJ5IGxpbmtnaXQ6Z2l0LWFyY2hpdmVbMV0gYW5kIHBvc3NpYmx5IGFkZGl0aW9uYWxseSBjb21wcmVzc2VkLgorCVRoaXMgY2FuIHBvdGVudGlhbGx5IGdlbmVyYXRlIGhpZ2ggdHJhZmZpYyBpZiB5b3UgaGF2ZSBsYXJnZSBwcm9qZWN0LgorKworVGhlIHZhbHVlIG9mIFwnZGVmYXVsdCcgaXMgYSBsaXN0IG9mIG5hbWVzIG9mIHNuYXBzaG90IGZvcm1hdHMsCitkZWZpbmVkIGluIGAla25vd25fc25hcHNob3RfZm9ybWF0c2AgaGFzaCwgdGhhdCB5b3Ugd2lzaCB0byBvZmZlci4KK1N1cHBvcnRlZCBmb3JtYXRzIGluY2x1ZGUgInRneiIsICJ0YnoyIiwgInR4eiIgKGd6aXAvYnppcDIveHoKK2NvbXByZXNzZWQgdGFyIGFyY2hpdmUpIGFuZCAiemlwIjsgcGxlYXNlIGNvbnN1bHQgZ2l0d2ViIHNvdXJjZXMgZm9yCithIGRlZmluaXRpdmUgbGlzdC4gIEJ5IGRlZmF1bHQgb25seSAidGd6IiBpcyBvZmZlcmVkLgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5ibGFtZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgd2hpY2ggY29udGFpbnMKK2EgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZm9ybWF0cyBvciAibm9uZSIgdG8gZGlzYWJsZSBzbmFwc2hvdHMuCitVbmtub3duIHZhbHVlcyBhcmUgaWdub3JlZC4KKworZ3JlcDo6CisJRW5hYmxlIGdyZXAgc2VhcmNoLCB3aGljaCBsaXN0cyB0aGUgZmlsZXMgaW4gY3VycmVudGx5IHNlbGVjdGVkCisJdHJlZSAoZGlyZWN0b3J5KSBjb250YWluaW5nIHRoZSBnaXZlbiBzdHJpbmc7IHNlZSBsaW5rZ2l0OmdpdC1ncmVwWzFdLgorCVRoaXMgY2FuIGJlIHBvdGVudGlhbGx5IENQVS1pbnRlbnNpdmUsIG9mIGNvdXJzZS4gIEVuYWJsZWQgYnkgZGVmYXVsdC4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIHZpYQorcmVwb3NpdG9yeSdzIGBnaXR3ZWIuZ3JlcGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoYm9vbGVhbikuCisKK3BpY2theGU6OgorCUVuYWJsZSB0aGUgc28gY2FsbGVkIHBpY2theGUgc2VhcmNoLCB3aGljaCB3aWxsIGxpc3QgdGhlIGNvbW1pdHMKKwl0aGF0IGludHJvZHVjZWQgb3IgcmVtb3ZlZCBhIGdpdmVuIHN0cmluZyBpbiBhIGZpbGUuICBUaGlzIGNhbiBiZQorCXByYWN0aWNhbCBhbmQgcXVpdGUgZmFzdGVyIGFsdGVybmF0aXZlIHRvICJibGFtZSIgYWN0aW9uLCBidXQgaXQgaXMKKwlzdGlsbCBwb3RlbnRpYWxseSBDUFUtaW50ZW5zaXZlLiAgRW5hYmxlZCBieSBkZWZhdWx0LgorKworVGhlIHBpY2theGUgc2VhcmNoIGlzIGRlc2NyaWJlZCBpbiBsaW5rZ2l0OmdpdC1sb2dbMV0gKHRoZQorZGVzY3JpcHRpb24gb2YgYC1TPHN0cmluZz5gIG9wdGlvbiwgd2hpY2ggcmVmZXJzIHRvIHBpY2theGUgZW50cnkgaW4KK2xpbmtnaXQ6Z2l0ZGlmZmNvcmVbN10gZm9yIG1vcmUgZGV0YWlscykuCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyBieSBzZXR0aW5nCityZXBvc2l0b3J5J3MgYGdpdHdlYi5waWNrYXhlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChib29sZWFuKS4KKworc2hvdy1zaXplczo6CisJRW5hYmxlIHNob3dpbmcgc2l6ZSBvZiBibG9icyAob3JkaW5hcnkgZmlsZXMpIGluIGEgInRyZWUiIHZpZXcsIGluIGEKKwlzZXBhcmF0ZSBjb2x1bW4sIHNpbWlsYXIgdG8gd2hhdCBgbHMgLWxgIGRvZXM7IHNlZSBkZXNjcmlwdGlvbiBvZgorCWAtbGAgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWxzLXRyZWVbMV0gbWFucGFnZS4gIFRoaXMgY29zdHMgYSBiaXQgb2YKKwlJL08uICBFbmFibGVkIGJ5IGRlZmF1bHQuCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyB2aWEKK3JlcG9zaXRvcnkncyBgZ2l0d2ViLnNob3dzaXplc2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoYm9vbGVhbikuCisKK3BhdGNoZXM6OgorCUVuYWJsZSBhbmQgY29uZmlndXJlICJwYXRjaGVzIiB2aWV3LCB3aGljaCBkaXNwbGF5cyBsaXN0IG9mIGNvbW1pdHMgaW4gZW1haWwKKwkocGxhaW4gdGV4dCkgb3V0cHV0IGZvcm1hdDsgc2VlIGFsc28gbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCVRoZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGF0Y2hlcyBpbiBhIHBhdGNoc2V0IGdlbmVyYXRlZAorCWluICJwYXRjaGVzIiB2aWV3LiAgU2V0IHRoZSAnZGVmYXVsdCcgZmllbGQgdG8gYSBsaXN0IGNvbnRhaW5pbmcgc2luZ2xlCisJaXRlbSBvZiBvciB0byBhbiBlbXB0eSBsaXN0IHRvIGRpc2FibGUgcGF0Y2ggdmlldywgb3IgdG8gYSBsaXN0CisJY29udGFpbmluZyBhIHNpbmdsZSBuZWdhdGl2ZSBudW1iZXIgdG8gcmVtb3ZlIGFueSBsaW1pdC4KKwlEZWZhdWx0IHZhbHVlIGlzIDE2LgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5wYXRjaGVzYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChpbnRlZ2VyKS4KKworYXZhdGFyOjoKKwlBdmF0YXIgc3VwcG9ydC4gIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHZpZXdzIHN1Y2ggYXMKKwkic2hvcnRsb2ciIG9yICJjb21taXQiIHdpbGwgZGlzcGxheSBhbiBhdmF0YXIgYXNzb2NpYXRlZCB3aXRoCisJdGhlIGVtYWlsIG9mIGVhY2ggY29tbWl0dGVyIGFuZCBhdXRob3IuCisrCitDdXJyZW50bHkgYXZhaWxhYmxlIHByb3ZpZGVycyBhcmUgKiJncmF2YXRhciIqIGFuZCAqInBpY29uIiouCitPbmx5IG9uZSBwcm92aWRlciBhdCBhIHRpbWUgY2FuIGJlIHNlbGVjdGVkICgnZGVmYXVsdCcgaXMgb25lIGVsZW1lbnQgbGlzdCkuCitJZiBhbiB1bmtub3duIHByb3ZpZGVyIGlzIHNwZWNpZmllZCwgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisqTm90ZSogdGhhdCBzb21lIHByb3ZpZGVycyBtaWdodCByZXF1aXJlIGV4dHJhIFBlcmwgcGFja2FnZXMgdG8gYmUKK2luc3RhbGxlZDsgc2VlICdnaXR3ZWIvSU5TVEFMTCcgZm9yIG1vcmUgZGV0YWlscy4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIHZpYQorcmVwb3NpdG9yeSdzIGBnaXR3ZWIuYXZhdGFyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorKworU2VlIGFsc28gYCVhdmF0YXJfc2l6ZWAgd2l0aCBwaXhlbCBzaXplcyBmb3IgaWNvbnMgYW5kIGF2YXRhcnMKKygiZGVmYXVsdCIgaXMgdXNlZCBmb3Igb25lLWxpbmUgbGlrZSAibG9nIiBhbmQgInNob3J0bG9nIiwgImRvdWJsZSIKK2lzIHVzZWQgZm9yIHR3by1saW5lIGxpa2UgImNvbW1pdCIsICJjb21taXRkaWZmIiBvciAidGFnIikuICBJZiB0aGUKK2RlZmF1bHQgZm9udCBzaXplcyBvciBsaW5laGVpZ2h0cyBhcmUgY2hhbmdlZCAoZS5nLiB2aWEgYWRkaW5nIGV4dHJhCitDU1Mgc3R5bGVzaGVldCBpbiBgQHN0eWxlc2hlZXRzYCksIGl0IG1heSBiZSBhcHByb3ByaWF0ZSB0byBjaGFuZ2UKK3RoZXNlIHZhbHVlcy4KKworaGlnaGxpZ2h0OjoKKwlTZXJ2ZXItc2lkZSBzeW50YXggaGlnaGxpZ2h0IHN1cHBvcnQgaW4gImJsb2IiIHZpZXcuICBJdCByZXF1aXJlcworCWAkaGlnaGxpZ2h0X2JpbmAgcHJvZ3JhbSB0byBiZSBhdmFpbGFibGUgKHNlZSB0aGUgZGVzY3JpcHRpb24gb2YKKwl0aGlzIHZhcmlhYmxlIGluIHRoZSAiQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMiIHNlY3Rpb24gYWJvdmUpLAorCWFuZCB0aGVyZWZvcmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIHZpYQorcmVwb3NpdG9yeSdzIGBnaXR3ZWIuaGlnaGxpZ2h0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChib29sZWFuKS4KKworcmVtb3RlX2hlYWRzOjoKKwlFbmFibGUgZGlzcGxheWluZyByZW1vdGUgaGVhZHMgKHJlbW90ZS10cmFja2luZyBicmFuY2hlcykgaW4gdGhlICJoZWFkcyIKKwlsaXN0LiAgSW4gbW9zdCBjYXNlcyB0aGUgbGlzdCBvZiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgaXMgYW4KKwl1bm5lY2Vzc2FyeSBpbnRlcm5hbCBwcml2YXRlIGRldGFpbCwgYW5kIHRoaXMgZmVhdHVyZSBpcyB0aGVyZWZvcmUKKwlkaXNhYmxlZCBieSBkZWZhdWx0LiAgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0sIHdoaWNoIGlzIHVzdWFsbHkgdXNlZAorCXRvIGJyb3dzZSBsb2NhbCByZXBvc2l0b3JpZXMsIGVuYWJsZXMgYW5kIHVzZXMgdGhpcyBmZWF0dXJlLgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5yZW1vdGVfaGVhZHNgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKGJvb2xlYW4pLgorCisKK1RoZSByZW1haW5pbmcgZmVhdHVyZXMgY2Fubm90IGJlIG92ZXJyaWRkZW4gb24gYSBwZXIgcHJvamVjdCBiYXNpcy4KKworc2VhcmNoOjoKKwlFbmFibGUgdGV4dCBzZWFyY2gsIHdoaWNoIHdpbGwgbGlzdCB0aGUgY29tbWl0cyB3aGljaCBtYXRjaCBhdXRob3IsCisJY29tbWl0dGVyIG9yIGNvbW1pdCB0ZXh0IHRvIGEgZ2l2ZW4gc3RyaW5nOyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mCisJYC0tYXV0aG9yYCwgYC0tY29tbWl0dGVyYCBhbmQgYC0tZ3JlcGAgb3B0aW9ucyBpbiBsaW5rZ2l0OmdpdC1sb2dbMV0KKwltYW5wYWdlLiAgRW5hYmxlZCBieSBkZWZhdWx0LgorKworUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCitmb3Jrczo6CisJSWYgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGdpdHdlYiBjb25zaWRlcnMgcHJvamVjdHMgaW4KKwlzdWJkaXJlY3RvcmllcyBvZiBwcm9qZWN0IHJvb3QgKGJhc2VuYW1lKSB0byBiZSBmb3JrcyBvZiBleGlzdGluZworCXByb2plY3RzLiAgRm9yIGVhY2ggcHJvamVjdCArJHByb2puYW1lLmdpdCssIHByb2plY3RzIGluIHRoZQorCSskcHJvam5hbWUvKyBkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3RvcmllcyB3aWxsIG5vdCBiZQorCXNob3duIGluIHRoZSBtYWluIHByb2plY3RzIGxpc3QuICBJbnN0ZWFkLCBhIFwnXCsnIG1hcmsgaXMgc2hvd24KKwluZXh0IHRvICskcHJvam5hbWUrLCB3aGljaCBsaW5rcyB0byBhICJmb3JrcyIgdmlldyB0aGF0IGxpc3RzIGFsbAorCXRoZSBmb3JrcyAoYWxsIHByb2plY3RzIGluICskcHJvam5hbWUvKyBzdWJkaXJlY3RvcnkpLiAgQWRkaXRpb25hbGx5CisJYSAiZm9ya3MiIHZpZXcgZm9yIGEgcHJvamVjdCBpcyBsaW5rZWQgZnJvbSBwcm9qZWN0IHN1bW1hcnkgcGFnZS4KKysKK0lmIHRoZSBwcm9qZWN0IGxpc3QgaXMgdGFrZW4gZnJvbSBhIGZpbGUgKCskcHJvamVjdHNfbGlzdCsgcG9pbnRzIHRvIGEKK2ZpbGUpLCBmb3JrcyBhcmUgb25seSByZWNvZ25pemVkIGlmIHRoZXkgYXJlIGxpc3RlZCBhZnRlciB0aGUgbWFpbiBwcm9qZWN0CitpbiB0aGF0IGZpbGUuCisrCitQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisKK2FjdGlvbnM6OgorCUluc2VydCBjdXN0b20gbGlua3MgdG8gdGhlIGFjdGlvbiBiYXIgb2YgYWxsIHByb2plY3QgcGFnZXMuICBUaGlzCisJYWxsb3dzIHlvdSB0byBsaW5rIHRvIHRoaXJkLXBhcnR5IHNjcmlwdHMgaW50ZWdyYXRpbmcgaW50byBnaXR3ZWIuCisrCitUaGUgImRlZmF1bHQiIHZhbHVlIGNvbnNpc3RzIG9mIGEgbGlzdCBvZiB0cmlwbGV0cyBpbiB0aGUgZm9ybQorYCgiPGxhYmVsPiIsICI8bGluaz4iLCAiPHBvc2l0aW9uPiIpYCB3aGVyZSAicG9zaXRpb24iIGlzIHRoZSBsYWJlbAorYWZ0ZXIgd2hpY2ggdG8gaW5zZXJ0IHRoZSBsaW5rLCAibGluayIgaXMgYSBmb3JtYXQgc3RyaW5nIHdoZXJlIGAlbmAKK2V4cGFuZHMgdG8gdGhlIHByb2plY3QgbmFtZSwgYCVmYCB0byB0aGUgcHJvamVjdCBwYXRoIHdpdGhpbiB0aGUKK2ZpbGVzeXN0ZW0gKGkuZS4gIiRwcm9qZWN0cm9vdC8kcHJvamVjdCIpLCBgJWhgIHRvIHRoZSBjdXJyZW50IGhhc2gKKyhcJ2gnIGdpdHdlYiBwYXJhbWV0ZXIpIGFuZCBgJWJgIHRvIHRoZSBjdXJyZW50IGhhc2ggYmFzZQorKFwnaGInIGdpdHdlYiBwYXJhbWV0ZXIpOyBgJSVgIGV4cGFuZHMgdG8gXCclJy4KKysKK0ZvciBleGFtcGxlLCBhdCB0aGUgdGltZSB0aGlzIHBhZ2Ugd2FzIHdyaXR0ZW4sIHRoZSBodHRwOi8vcmVwby5vci5jeltdCitnaXQgaG9zdGluZyBzaXRlIHNldCBpdCB0byB0aGUgZm9sbG93aW5nIHRvIGVuYWJsZSBncmFwaGljYWwgbG9nCisodXNpbmcgdGhlIHRoaXJkIHBhcnR5IHRvb2wgKmdpdC1icm93c2VyKik6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskZmVhdHVyZXsnYWN0aW9ucyd9eydkZWZhdWx0J30gPQorCVsgKCdncmFwaGljbG9nJywgJy9naXQtYnJvd3Nlci9ieS1jb21taXQuaHRtbD9yPSVuJywgJ3N1bW1hcnknKV07CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGFkZHMgYSBsaW5rIHRpdGxlZCAiZ3JhcGhpY2xvZyIgYWZ0ZXIgdGhlICJzdW1tYXJ5IiBsaW5rLCBsZWFkaW5nIHRvCitgZ2l0LWJyb3dzZXJgIHNjcmlwdCwgcGFzc2luZyBgcj08cHJvamVjdD5gIGFzIGEgcXVlcnkgcGFyYW1ldGVyLgorKworUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCit0aW1lZDo6CisJRW5hYmxlIGRpc3BsYXlpbmcgaG93IG11Y2ggdGltZSBhbmQgaG93IG1hbnkgZ2l0IGNvbW1hbmRzIGl0IHRvb2sgdG8KKwlnZW5lcmF0ZSBhbmQgZGlzcGxheSBlYWNoIHBhZ2UgaW4gdGhlIHBhZ2UgZm9vdGVyIChhdCB0aGUgYm90dG9tIG9mCisJcGFnZSkuICBGb3IgZXhhbXBsZSB0aGUgZm9vdGVyIG1pZ2h0IGNvbnRhaW46ICJUaGlzIHBhZ2UgdG9vayA2LjUzMzI1CisJc2Vjb25kcyBhbmQgMTMgZ2l0IGNvbW1hbmRzIHRvIGdlbmVyYXRlLiIgIERpc2FibGVkIGJ5IGRlZmF1bHQuCisrCitQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisKK2phdmFzY3JpcHQtdGltZXpvbmU6OgorCUVuYWJsZSBhbmQgY29uZmlndXJlIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBhIGNvbW1vbiB0aW1lem9uZSBmb3IgZGF0ZXMKKwlpbiBnaXR3ZWIgb3V0cHV0IHZpYSBKYXZhU2NyaXB0LiAgRGF0ZXMgaW4gZ2l0d2ViIG91dHB1dCBpbmNsdWRlCisJYXV0aG9yZGF0ZSBhbmQgY29tbWl0dGVyZGF0ZSBpbiAiY29tbWl0IiwgImNvbW1pdGRpZmYiIGFuZCAibG9nIgorCXZpZXdzLCBhbmQgdGFnZ2VyZGF0ZSBpbiAidGFnIiB2aWV3LiAgRW5hYmxlZCBieSBkZWZhdWx0LgorKworVGhlIHZhbHVlIGlzIGEgbGlzdCBvZiB0aHJlZSB2YWx1ZXM6IGEgZGVmYXVsdCB0aW1lem9uZSAoZm9yIGlmIHRoZSBjbGllbnQKK2hhc24ndCBzZWxlY3RlZCBzb21lIG90aGVyIHRpbWV6b25lIGFuZCBzYXZlZCBpdCBpbiBhIGNvb2tpZSksIGEgbmFtZSBvZiBjb29raWUKK3doZXJlIHRvIHN0b3JlIHNlbGVjdGVkIHRpbWV6b25lLCBhbmQgYSBDU1MgY2xhc3MgdXNlZCB0byBtYXJrIHVwCitkYXRlcyBmb3IgbWFuaXB1bGF0aW9uLiAgSWYgeW91IHdhbnQgdG8gdHVybiB0aGlzIGZlYXR1cmUgb2ZmLCBzZXQgImRlZmF1bHQiCit0byBlbXB0eSBsaXN0OiBgW11gLgorKworVHlwaWNhbCBnaXR3ZWIgY29uZmlnIGZpbGVzIHdpbGwgb25seSBjaGFuZ2Ugc3RhcnRpbmcgKGRlZmF1bHQpIHRpbWV6b25lLAorYW5kIGxlYXZlIG90aGVyIGVsZW1lbnRzIGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskZmVhdHVyZXsnamF2YXNjcmlwdC10aW1lem9uZSd9eydkZWZhdWx0J31bMF0gPSAidXRjIjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhlIGV4YW1wbGUgY29uZmlndXJhdGlvbiBwcmVzZW50ZWQgaGVyZSBpcyBndWFyYW50ZWVkIHRvIGJlIGJhY2t3YXJkcworYW5kIGZvcndhcmQgY29tcGF0aWJsZS4KKysKK1RpbWV6b25lIHZhbHVlcyBjYW4gYmUgImxvY2FsIiAoZm9yIGxvY2FsIHRpbWV6b25lIHRoYXQgYnJvd3NlciB1c2VzKSwgInV0YyIKKyh3aGF0IGdpdHdlYiB1c2VzIHdoZW4gSmF2YVNjcmlwdCBvciB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQpLCBvciBudW1lcmljYWwKK3RpbWV6b25lcyBpbiB0aGUgZm9ybSBvZiAiKy8tSEhNTSIsIHN1Y2ggYXMgIiswMjAwIi4KKysKK1Byb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworVG8gZW5hYmxlIGJsYW1lLCBwaWNrYXhlIHNlYXJjaCwgYW5kIHNuYXBzaG90IHN1cHBvcnQgKGFsbG93aW5nICJ0YXIuZ3oiIGFuZAorInppcCIgc25hcHNob3RzKSwgd2hpbGUgYWxsb3dpbmcgaW5kaXZpZHVhbCBwcm9qZWN0cyB0byB0dXJuIHRoZW0gb2ZmLCBwdXQKK3RoZSBmb2xsb3dpbmcgaW4geW91ciBHSVRXRUJfQ09ORklHIGZpbGU6CisKKwkkZmVhdHVyZXsnYmxhbWUnfXsnZGVmYXVsdCd9ID0gWzFdOworCSRmZWF0dXJleydibGFtZSd9eydvdmVycmlkZSd9ID0gMTsKKworCSRmZWF0dXJleydwaWNrYXhlJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkkZmVhdHVyZXsncGlja2F4ZSd9eydvdmVycmlkZSd9ID0gMTsKKworCSRmZWF0dXJleydzbmFwc2hvdCd9eydkZWZhdWx0J30gPSBbJ3ppcCcsICd0Z3onXTsKKwkkZmVhdHVyZXsnc25hcHNob3QnfXsnb3ZlcnJpZGUnfSA9IDE7CisKK0lmIHlvdSBhbGxvdyBvdmVycmlkaW5nIGZvciB0aGUgc25hcHNob3QgZmVhdHVyZSwgeW91IGNhbiBzcGVjaWZ5IHdoaWNoCitzbmFwc2hvdCBmb3JtYXRzIGFyZSBnbG9iYWxseSBkaXNhYmxlZC4gWW91IGNhbiBhbHNvIGFkZCBhbnkgY29tbWFuZCBsaW5lCitvcHRpb25zIHlvdSB3YW50IChzdWNoIGFzIHNldHRpbmcgdGhlIGNvbXByZXNzaW9uIGxldmVsKS4gRm9yIGluc3RhbmNlLCB5b3UKK2NhbiBkaXNhYmxlIFppcCBjb21wcmVzc2VkIHNuYXBzaG90cyBhbmQgc2V0ICpnemlwKigxKSB0byBydW4gYXQgbGV2ZWwgNiBieQorYWRkaW5nIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91ciBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlOgorCisJJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7J3ppcCd9eydkaXNhYmxlZCd9ID0gMTsKKwkka25vd25fc25hcHNob3RfZm9ybWF0c3sndGd6J317J2NvbXByZXNzb3InfSA9IFsnZ3ppcCcsJy02J107CisKK0VOVklST05NRU5UCistLS0tLS0tLS0tLQorVGhlIGxvY2F0aW9uIG9mIHBlci1pbnN0YW5jZSBhbmQgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlcyBjYW4gYmUKK292ZXJyaWRkZW4gdXNpbmcgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisKK0dJVFdFQl9DT05GSUc6OgorCVNldHMgbG9jYXRpb24gb2YgcGVyLWluc3RhbmNlIGNvbmZpZ3VyYXRpb24gZmlsZS4KK0dJVFdFQl9DT05GSUdfU1lTVEVNOjoKKwlTZXRzIGxvY2F0aW9uIG9mIGZhbGxiYWNrIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKwlUaGlzIGZpbGUgaXMgcmVhZCBvbmx5IGlmIHBlci1pbnN0YW5jZSBvbmUgZG9lcyBub3QgZXhpc3QuCitHSVRXRUJfQ09ORklHX0NPTU1PTjo6CisJU2V0cyBsb2NhdGlvbiBvZiBjb21tb24gc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLgorCisKK0ZJTEVTCistLS0tLQorZ2l0d2ViX2NvbmZpZy5wZXJsOjoKKwlUaGlzIGlzIGRlZmF1bHQgbmFtZSBvZiBwZXItaW5zdGFuY2UgY29uZmlndXJhdGlvbiBmaWxlLiAgVGhlCisJZm9ybWF0IG9mIHRoaXMgZmlsZSBpcyBkZXNjcmliZWQgYWJvdmUuCisvZXRjL2dpdHdlYi5jb25mOjoKKwlUaGlzIGlzIGRlZmF1bHQgbmFtZSBvZiBmYWxsYmFjayBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uCisJZmlsZS4gIFRoaXMgZmlsZSBpcyB1c2VkIG9ubHkgaWYgcGVyLWluc3RhbmNlIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZSBpcyBub3QgZm91bmQuCisvZXRjL2dpdHdlYi1jb21tb24uY29uZjo6CisJVGhpcyBpcyBkZWZhdWx0IG5hbWUgb2YgY29tbW9uIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24KKwlmaWxlLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR3ZWJbMV0sIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdCisKKydnaXR3ZWIvUkVBRE1FJywgJ2dpdHdlYi9JTlNUQUxMJworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0d2ViLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0d2ViLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjhlOGJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR3ZWIudHh0CkBAIC0wLDAgKzEsNzA0IEBACitnaXR3ZWIoMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXR3ZWIgLSBHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpCisKK1NZTk9QU0lTCistLS0tLS0tLQorVG8gZ2V0IHN0YXJ0ZWQgd2l0aCBnaXR3ZWIsIHJ1biBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXSBmcm9tIGEgZ2l0IHJlcG9zaXRvcnkuCitUaGlzIHdvdWxkIGNvbmZpZ3VyZSBhbmQgc3RhcnQgeW91ciB3ZWIgc2VydmVyLCBhbmQgcnVuIHdlYiBicm93c2VyIHBvaW50aW5nIHRvCitnaXR3ZWIuCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitHaXR3ZWIgcHJvdmlkZXMgYSB3ZWIgaW50ZXJmYWNlIHRvIGdpdCByZXBvc2l0b3JpZXMuICBJdHMgZmVhdHVyZXMgaW5jbHVkZToKKworKiBWaWV3aW5nIG11bHRpcGxlIEdpdCByZXBvc2l0b3JpZXMgd2l0aCBjb21tb24gcm9vdC4KKyogQnJvd3NpbmcgZXZlcnkgcmV2aXNpb24gb2YgdGhlIHJlcG9zaXRvcnkuCisqIFZpZXdpbmcgdGhlIGNvbnRlbnRzIG9mIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IGF0IGFueSByZXZpc2lvbi4KKyogVmlld2luZyB0aGUgcmV2aXNpb24gbG9nIG9mIGJyYW5jaGVzLCBoaXN0b3J5IG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcywKKyAgc2VlIHdoYXQgd2FzIGNoYW5nZWQgd2hlbiwgYnkgd2hvLgorKiBWaWV3aW5nIHRoZSBibGFtZS9hbm5vdGF0aW9uIGRldGFpbHMgb2YgYW55IGZpbGUgKGlmIGVuYWJsZWQpLgorKiBHZW5lcmF0aW5nIFJTUyBhbmQgQXRvbSBmZWVkcyBvZiBjb21taXRzLCBmb3IgYW55IGJyYW5jaC4KKyAgVGhlIGZlZWRzIGFyZSBhdXRvLWRpc2NvdmVyYWJsZSBpbiBtb2Rlcm4gd2ViIGJyb3dzZXJzLgorKiBWaWV3aW5nIGV2ZXJ5dGhpbmcgdGhhdCB3YXMgY2hhbmdlZCBpbiBhIHJldmlzaW9uLCBhbmQgc3RlcCB0aHJvdWdoCisgIHJldmlzaW9ucyBvbmUgYXQgYSB0aW1lLCB2aWV3aW5nIHRoZSBoaXN0b3J5IG9mIHRoZSByZXBvc2l0b3J5LgorKiBGaW5kaW5nIGNvbW1pdHMgd2hpY2ggY29tbWl0IG1lc3NhZ2VzIG1hdGNoZXMgZ2l2ZW4gc2VhcmNoIHRlcm0uCisKK1NlZSBodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9Z2l0L2dpdC5naXQ7YT10cmVlO2Y9Z2l0d2ViW10gb3IKK2h0dHA6Ly9yZXBvLm9yLmN6L3cvZ2l0LmdpdC90cmVlL0hFQUQ6L2dpdHdlYi9bXSBmb3IgZ2l0d2ViIHNvdXJjZSBjb2RlLAorYnJvd3NlZCB1c2luZyBnaXR3ZWIgaXRzZWxmLgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK1ZhcmlvdXMgYXNwZWN0cyBvZiBnaXR3ZWIncyBiZWhhdmlvciBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uCitmaWxlICdnaXR3ZWJfY29uZmlnLnBlcmwnIG9yICcvZXRjL2dpdHdlYi5jb25mJy4gIFNlZSB0aGUgbGlua2dpdDpnaXR3ZWIuY29uZls1XQorZm9yIGRldGFpbHMuCisKK1JlcG9zaXRvcmllcworfn5+fn5+fn5+fn5+CitHaXR3ZWIgY2FuIHNob3cgaW5mb3JtYXRpb24gZnJvbSBvbmUgb3IgbW9yZSBHaXQgcmVwb3NpdG9yaWVzLiAgVGhlc2UKK3JlcG9zaXRvcmllcyBoYXZlIHRvIGJlIGFsbCBvbiBsb2NhbCBmaWxlc3lzdGVtLCBhbmQgaGF2ZSB0byBzaGFyZSBjb21tb24KK3JlcG9zaXRvcnkgcm9vdCwgaS5lLiBiZSBhbGwgdW5kZXIgYSBzaW5nbGUgcGFyZW50IHJlcG9zaXRvcnkgKGJ1dCBzZWUgYWxzbworIkFkdmFuY2VkIHdlYiBzZXJ2ZXIgc2V0dXAiIHNlY3Rpb24sICJXZWJzZXJ2ZXIgY29uZmlndXJhdGlvbiB3aXRoIG11bHRpcGxlCitwcm9qZWN0cycgcm9vdCIgc3Vic2VjdGlvbikuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJHByb2plY3Ryb290ID0gJy9wYXRoL3RvL3BhcmVudC9kaXJlY3RvcnknOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGAkcHJvamVjdHJvb3RgIGlzICcvcHViL2dpdCcuICBZb3UgY2FuIGNoYW5nZSBpdCBkdXJpbmcKK2J1aWxkaW5nIGdpdHdlYiB2aWEgYEdJVFdFQl9QUk9KRUNUUk9PVGAgYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworQnkgZGVmYXVsdCBhbGwgZ2l0IHJlcG9zaXRvcmllcyB1bmRlciBgJHByb2plY3Ryb290YCBhcmUgdmlzaWJsZSBhbmQgYXZhaWxhYmxlCit0byBnaXR3ZWIuICBUaGUgbGlzdCBvZiBwcm9qZWN0cyBpcyBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBieSBzY2FubmluZyB0aGUKK2AkcHJvamVjdHJvb3RgIGRpcmVjdG9yeSBmb3IgZ2l0IHJlcG9zaXRvcmllcyAoZm9yIG9iamVjdCBkYXRhYmFzZXMgdG8gYmUKK21vcmUgZXhhY3Q7IGdpdHdlYiBpcyBub3QgaW50ZXJlc3RlZCBpbiBhIHdvcmtpbmcgYXJlYSwgYW5kIGlzIGJlc3Qgc3VpdGVkCit0byBzaG93aW5nICJiYXJlIiByZXBvc2l0b3JpZXMpLgorCitUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeSBpbiBnaXR3ZWIgaXMgdGhlIHBhdGggdG8gaXRzIGAkR0lUX0RJUmAgKGl0cyBvYmplY3QKK2RhdGFiYXNlKSByZWxhdGl2ZSB0byBgJHByb2plY3Ryb290YC4gIFRoZXJlZm9yZSB0aGUgcmVwb3NpdG9yeSAkcmVwbyBjYW4gYmUKK2ZvdW5kIGF0ICIkcHJvamVjdHJvb3QvJHJlcG8iLgorCisKK1Byb2plY3RzIGxpc3QgZmlsZSBmb3JtYXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0luc3RlYWQgb2YgaGF2aW5nIGdpdHdlYiBmaW5kIHJlcG9zaXRvcmllcyBieSBzY2FubmluZyBmaWxlc3lzdGVtCitzdGFydGluZyBmcm9tICRwcm9qZWN0cm9vdCwgeW91IGNhbiBwcm92aWRlIGEgcHJlLWdlbmVyYXRlZCBsaXN0IG9mCit2aXNpYmxlIHByb2plY3RzIGJ5IHNldHRpbmcgYCRwcm9qZWN0c19saXN0YCB0byBwb2ludCB0byBhIHBsYWluIHRleHQKK2ZpbGUgd2l0aCBhIGxpc3Qgb2YgcHJvamVjdHMgKHdpdGggc29tZSBhZGRpdGlvbmFsIGluZm8pLgorCitUaGlzIGZpbGUgdXNlcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworKiBPbmUgcmVjb3JkIChmb3IgcHJvamVjdCAvIHJlcG9zaXRvcnkpIHBlciBsaW5lOyBkb2VzIG5vdCBzdXBwb3J0IGxpbmUKK2NvbnRpbnVhdGlvbiAobmV3bGluZSBlc2NhcGluZykuCisKKyogTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBhcmUgaWdub3JlZC4KKworKiBXaGl0ZXNwYWNlIHNlcGFyYXRlZCBmaWVsZHM7IGFueSBydW4gb2Ygd2hpdGVzcGFjZSBjYW4gYmUgdXNlZCBhcyBmaWVsZAorc2VwYXJhdG9yIChydWxlcyBmb3IgUGVybCdzICJgc3BsaXQoIiAiLCAkbGluZSlgIikuCisKKyogRmllbGRzIHVzZSBtb2RpZmllZCBVUkkgZW5jb2RpbmcsIGRlZmluZWQgaW4gUkZDIDM5ODYsIHNlY3Rpb24gMi4xCisoUGVyY2VudC1FbmNvZGluZyksIG9yIHJhdGhlciAiUXVlcnkgc3RyaW5nIGVuY29kaW5nIiAoc2VlCitsaW5rOmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVlcnlfc3RyaW5nI1VSTF9lbmNvZGluZ1tdKSwgdGhlIGRpZmZlcmVuY2UKK2JlaW5nIHRoYXQgU1AgKCIgIikgY2FuIGJlIGVuY29kZWQgYXMgIntwbHVzfSIgKGFuZCB0aGVyZWZvcmUgIntwbHVzfSIgaGFzIHRvIGJlCithbHNvIHBlcmNlbnQtZW5jb2RlZCkuCisrCitSZXNlcnZlZCBjaGFyYWN0ZXJzIGFyZTogIiUiICh1c2VkIGZvciBlbmNvZGluZyksICJ7cGx1c30iIChjYW4gYmUgdXNlZCB0bworZW5jb2RlIFNQQUNFKSwgYWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcyBkZWZpbmVkIGluIFBlcmwsIGluY2x1ZGluZyBTUCwKK1RBQiBhbmQgTEYsICh1c2VkIHRvIHNlcGFyYXRlIGZpZWxkcyBpbiBhIHJlY29yZCkuCisKKyogQ3VycmVudGx5IHJlY29nbml6ZWQgZmllbGRzIGFyZToKKzxyZXBvc2l0b3J5IHBhdGg+OjoKKwlwYXRoIHRvIHJlcG9zaXRvcnkgR0lUX0RJUiwgcmVsYXRpdmUgdG8gYCRwcm9qZWN0cm9vdGAKKzxyZXBvc2l0b3J5IG93bmVyPjo6CisJZGlzcGxheWVkIGFzIHJlcG9zaXRvcnkgb3duZXIsIHByZWZlcmFibHkgZnVsbCBuYW1lLCBvciBlbWFpbCwKKwlvciBib3RoCisKK1lvdSBjYW4gZ2VuZXJhdGUgdGhlIHByb2plY3RzIGxpc3QgaW5kZXggZmlsZSB1c2luZyB0aGUgcHJvamVjdF9pbmRleCBhY3Rpb24KKyh0aGUgJ1RYVCcgbGluayBvbiBwcm9qZWN0cyBsaXN0IHBhZ2UpIGRpcmVjdGx5IGZyb20gZ2l0d2ViOyBzZWUgYWxzbworIkdlbmVyYXRpbmcgcHJvamVjdHMgbGlzdCB1c2luZyBnaXR3ZWIiIHNlY3Rpb24gYmVsb3cuCisKK0V4YW1wbGUgY29udGVudHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZm9vLmdpdCAgICAgICBKb2UrUitIYWNrZXIrPGpvZUBleGFtcGxlLmNvbT4KK2Zvby9iYXIuZ2l0ICAgTytXK05lcis8b3duZXJAZXhhbXBsZS5vcmc+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0J5IGRlZmF1bHQgdGhpcyBmaWxlIGNvbnRyb2xzIG9ubHkgd2hpY2ggcHJvamVjdHMgYXJlICp2aXNpYmxlKiBvbiBwcm9qZWN0cworbGlzdCBwYWdlIChub3RlIHRoYXQgZW50cmllcyB0aGF0IGRvIG5vdCBwb2ludCB0byBjb3JyZWN0bHkgcmVjb2duaXplZCBnaXQKK3JlcG9zaXRvcmllcyB3b24ndCBiZSBkaXNwbGF5ZWQgYnkgZ2l0d2ViKS4gIEV2ZW4gaWYgYSBwcm9qZWN0IGlzIG5vdAordmlzaWJsZSBvbiBwcm9qZWN0cyBsaXN0IHBhZ2UsIHlvdSBjYW4gdmlldyBpdCBuZXZlcnRoZWxlc3MgYnkgaGFuZC1jcmFmdGluZworYSBnaXR3ZWIgVVJMLiAgQnkgc2V0dGluZyBgJHN0cmljdF9leHBvcnRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKHNlZQorbGlua2dpdDpnaXR3ZWIuY29uZls1XSkgdG8gdHJ1ZSB2YWx1ZSB5b3UgY2FuIGFsbG93IHZpZXdpbmcgb25seSBvZgorcmVwb3NpdG9yaWVzIGFsc28gc2hvd24gb24gdGhlIG92ZXJ2aWV3IHBhZ2UgKGkuZS4gb25seSBwcm9qZWN0cyBleHBsaWNpdGx5CitsaXN0ZWQgaW4gcHJvamVjdHMgbGlzdCBmaWxlIHdpbGwgYmUgYWNjZXNzaWJsZSkuCisKKworR2VuZXJhdGluZyBwcm9qZWN0cyBsaXN0IHVzaW5nIGdpdHdlYgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXZSBhc3N1bWUgdGhhdCBHSVRXRUJfQ09ORklHIGhhcyBpdHMgZGVmYXVsdCBNYWtlZmlsZSB2YWx1ZSwgbmFtZWx5CisnZ2l0d2ViX2NvbmZpZy5wZXJsJy4gUHV0IHRoZSBmb2xsb3dpbmcgaW4gJ2dpdHdlYl9tYWtlX2luZGV4LnBlcmwnIGZpbGU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWFkX2NvbmZpZ19maWxlKCJnaXR3ZWJfY29uZmlnLnBlcmwiKTsKKyRwcm9qZWN0c19saXN0ID0gJHByb2plY3Ryb290OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHNjcmlwdCB0byBnZXQgbGlzdCBvZiBwcm9qZWN0IGluIHRoZSBmb3JtYXQKK3N1aXRhYmxlIGZvciBHSVRXRUJfTElTVCBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChvcgorYCRwcm9qZWN0c19saXN0YCB2YXJpYWJsZSBpbiBnaXR3ZWIgY29uZmlnKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvYmluL3NoCisKK2V4cG9ydCBHSVRXRUJfQ09ORklHPSJnaXR3ZWJfbWFrZV9pbmRleC5wZXJsIgorZXhwb3J0IEdBVEVXQVlfSU5URVJGQUNFPSJDR0kvMS4xIgorZXhwb3J0IEhUVFBfQUNDRVBUPSIqLyoiCitleHBvcnQgUkVRVUVTVF9NRVRIT0Q9IkdFVCIKK2V4cG9ydCBRVUVSWV9TVFJJTkc9ImE9cHJvamVjdF9pbmRleCIKKworcGVybCAtLSAvdmFyL3d3dy9jZ2ktYmluL2dpdHdlYi5jZ2kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUnVuIHRoaXMgc2NyaXB0IGFuZCBzYXZlIGl0cyBvdXRwdXQgdG8gYSBmaWxlLiAgVGhpcyBmaWxlIGNvdWxkIHRoZW4gYmUgdXNlZAorYXMgcHJvamVjdHMgbGlzdCBmaWxlLCB3aGljaCBtZWFucyB0aGF0IHlvdSBjYW4gc2V0IGAkcHJvamVjdHNfbGlzdGAgdG8gaXRzCitmaWxlbmFtZS4KKworCitDb250cm9sbGluZyBhY2Nlc3MgdG8gZ2l0IHJlcG9zaXRvcmllcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0J5IGRlZmF1bHQgYWxsIGdpdCByZXBvc2l0b3JpZXMgdW5kZXIgYCRwcm9qZWN0cm9vdGAgYXJlIHZpc2libGUgYW5kCithdmFpbGFibGUgdG8gZ2l0d2ViLiAgWW91IGNhbiBob3dldmVyIGNvbmZpZ3VyZSBob3cgZ2l0d2ViIGNvbnRyb2xzIGFjY2VzcwordG8gcmVwb3NpdG9yaWVzLgorCisqIEFzIGRlc2NyaWJlZCBpbiAiUHJvamVjdHMgbGlzdCBmaWxlIGZvcm1hdCIgc2VjdGlvbiwgeW91IGNhbiBjb250cm9sIHdoaWNoCitwcm9qZWN0cyBhcmUgKnZpc2libGUqIGJ5IHNlbGVjdGl2ZWx5IGluY2x1ZGluZyByZXBvc2l0b3JpZXMgaW4gcHJvamVjdHMKK2xpc3QgZmlsZSwgYW5kIHNldHRpbmcgYCRwcm9qZWN0c19saXN0YCBnaXR3ZWIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0bworcG9pbnQgdG8gaXQuICBXaXRoIGAkc3RyaWN0X2V4cG9ydGAgc2V0LCBwcm9qZWN0cyBsaXN0IGZpbGUgY2FuIGJlIHVzZWQgdG8KK2NvbnRyb2wgd2hpY2ggcmVwb3NpdG9yaWVzIGFyZSAqYXZhaWxhYmxlKiBhcyB3ZWxsLgorCisqIFlvdSBjYW4gY29uZmlndXJlIGdpdHdlYiB0byBvbmx5IGxpc3QgYW5kIGFsbG93IHZpZXdpbmcgb2YgdGhlIGV4cGxpY2l0bHkKK2V4cG9ydGVkIHJlcG9zaXRvcmllcywgdmlhIGAkZXhwb3J0X29rYCB2YXJpYWJsZSBpbiBnaXR3ZWIgY29uZmlnIGZpbGU7IHNlZQorbGlua2dpdDpnaXR3ZWIuY29uZls1XSBtYW5wYWdlLiAgSWYgaXQgZXZhbHVhdGVzIHRvIHRydWUsIGdpdHdlYiBzaG93cworcmVwb3NpdG9yaWVzIG9ubHkgaWYgdGhpcyBmaWxlIG5hbWVkIGJ5IGAkZXhwb3J0X29rYCBleGlzdHMgaW4gaXRzIG9iamVjdAorZGF0YWJhc2UgKGlmIGRpcmVjdG9yeSBoYXMgdGhlIG1hZ2ljIGZpbGUgbmFtZWQgYCRleHBvcnRfb2tgKS4KKysKK0ZvciBleGFtcGxlIGxpbmtnaXQ6Z2l0LWRhZW1vblsxXSBieSBkZWZhdWx0ICh1bmxlc3MgYC0tZXhwb3J0LWFsbGAgb3B0aW9uCitpcyB1c2VkKSBhbGxvd3MgcHVsbGluZyBvbmx5IGZvciB0aG9zZSByZXBvc2l0b3JpZXMgdGhhdCBoYXZlCisnZ2l0LWRhZW1vbi1leHBvcnQtb2snIGZpbGUuICBBZGRpbmcKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJGV4cG9ydF9vayA9ICJnaXQtZGFlbW9uLWV4cG9ydC1vayI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworbWFrZXMgZ2l0d2ViIHNob3cgYW5kIGFsbG93IGFjY2VzcyBvbmx5IHRvIHRob3NlIHJlcG9zaXRvcmllcyB0aGF0IGNhbiBiZQorZmV0Y2hlZCBmcm9tIHZpYSBgZ2l0Oi8vYCBwcm90b2NvbC4KKworKiBGaW5hbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IGFuIGFyYml0cmFyeSBwZXJsIHN1YnJvdXRpbmUgdGhhdCB3aWxsCitiZSBjYWxsZWQgZm9yIGVhY2ggcmVwb3NpdG9yeSB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGJlIGV4cG9ydGVkLiAgVGhlCitzdWJyb3V0aW5lIHJlY2VpdmVzIGFuIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3QgKHJlcG9zaXRvcnkpIGFzIGl0cyBvbmx5CitwYXJhbWV0ZXIgKGkuZS4gIiRwcm9qZWN0cm9vdC8kcHJvamVjdCIpLgorKworRm9yIGV4YW1wbGUsIGlmIHlvdSB1c2UgbW9kX3BlcmwgdG8gcnVuIHRoZSBzY3JpcHQsIGFuZCBoYXZlIGR1bWIKK0hUVFAgcHJvdG9jb2wgYXV0aGVudGljYXRpb24gY29uZmlndXJlZCBmb3IgeW91ciByZXBvc2l0b3JpZXMsIHlvdQorY2FuIHVzZSB0aGUgZm9sbG93aW5nIGhvb2sgdG8gYWxsb3cgYWNjZXNzIG9ubHkgaWYgdGhlIHVzZXIgaXMKK2F1dGhvcml6ZWQgdG8gcmVhZCB0aGUgZmlsZXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJGV4cG9ydF9hdXRoX2hvb2sgPSBzdWIgeworCXVzZSBBcGFjaGUyOjpTdWJSZXF1ZXN0ICgpOworCXVzZSBBcGFjaGUyOjpDb25zdCAtY29tcGlsZSA9PiBxdyhIVFRQX09LKTsKKwlteSAkcGF0aCA9ICIkX1swXS9IRUFEIjsKKwlteSAkciAgICA9IEFwYWNoZTI6OlJlcXVlc3RVdGlsLT5yZXF1ZXN0OworCW15ICRzdWIgID0gJHItPmxvb2t1cF9maWxlKCRwYXRoKTsKKwlyZXR1cm4gJHN1Yi0+ZmlsZW5hbWUgZXEgJHBhdGgKKwkgICAgJiYgJHN1Yi0+c3RhdHVzID09IEFwYWNoZTI6OkNvbnN0OjpIVFRQX09LOworfTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworUGVyLXJlcG9zaXRvcnkgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitZb3UgY2FuIGNvbmZpZ3VyZSBpbmRpdmlkdWFsIHJlcG9zaXRvcmllcyBzaG93biBpbiBnaXR3ZWIgYnkgY3JlYXRpbmcgZmlsZQoraW4gdGhlICdHSVRfRElSJyBvZiBnaXQgcmVwb3NpdG9yeSwgb3IgYnkgc2V0dGluZyBzb21lIHJlcG8gY29uZmlndXJhdGlvbgordmFyaWFibGUgKGluICdHSVRfRElSL2NvbmZpZycsIHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCitZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGZpbGVzIGluIHJlcG9zaXRvcnk6CisKK1JFQURNRS5odG1sOjoKKwlBIGh0bWwgZmlsZSAoSFRNTCBmcmFnbWVudCkgd2hpY2ggaXMgaW5jbHVkZWQgb24gdGhlIGdpdHdlYiBwcm9qZWN0CisJInN1bW1hcnkiIHBhZ2UgaW5zaWRlIGA8ZGl2PmAgYmxvY2sgZWxlbWVudC4gWW91IGNhbiB1c2UgaXQgZm9yIGxvbmdlcgorCWRlc2NyaXB0aW9uIG9mIGEgcHJvamVjdCwgdG8gcHJvdmlkZSBsaW5rcyAoZm9yIGV4YW1wbGUgdG8gcHJvamVjdCdzCisJaG9tZXBhZ2UpLCBldGMuIFRoaXMgaXMgcmVjb2duaXplZCBvbmx5IGlmIFhTUyBwcmV2ZW50aW9uIGlzIG9mZgorCShgJHByZXZlbnRfeHNzYCBpcyBmYWxzZSwgc2VlIGxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0pOyBhIHdheSB0byBpbmNsdWRlCisJYSBSRUFETUUgc2FmZWx5IHdoZW4gWFNTIHByZXZlbnRpb24gaXMgb24gbWF5IGJlIHdvcmtlZCBvdXQgaW4gdGhlCisJZnV0dXJlLgorCitkZXNjcmlwdGlvbiAob3IgYGdpdHdlYi5kZXNjcmlwdGlvbmApOjoKKwlTaG9ydCAoc2hvcnRlbmVkIHRvIGAkcHJvamVjdHNfbGlzdF9kZXNjcmlwdGlvbl93aWR0aGAgaW4gdGhlIHByb2plY3RzCisJbGlzdCBwYWdlLCB3aGljaCBpcyAyNSBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQ7IHNlZQorCWxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0pIHNpbmdsZSBsaW5lIGRlc2NyaXB0aW9uIG9mIGEgcHJvamVjdCAob2YgYQorCXJlcG9zaXRvcnkpLiAgUGxhaW4gdGV4dCBmaWxlOyBIVE1MIHdpbGwgYmUgZXNjYXBlZC4gIEJ5IGRlZmF1bHQgc2V0IHRvCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitVbm5hbWVkIHJlcG9zaXRvcnk7IGVkaXQgdGhpcyBmaWxlIHRvIG5hbWUgaXQgZm9yIGdpdHdlYi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK2Zyb20gdGhlIHRlbXBsYXRlIGR1cmluZyByZXBvc2l0b3J5IGNyZWF0aW9uLCB1c3VhbGx5IGluc3RhbGxlZCBpbgorJy91c3Ivc2hhcmUvZ2l0LWNvcmUvdGVtcGxhdGVzLycuICBZb3UgY2FuIHVzZSB0aGUgYGdpdHdlYi5kZXNjcmlwdGlvbmAgcmVwbworY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYnV0IHRoZSBmaWxlIHRha2VzIHByZWNlZGVuY2UuCisKK2NhdGVnb3J5IChvciBgZ2l0d2ViLmNhdGVnb3J5YCk6OgorCVNpbmdlIGxpbmUgY2F0ZWdvcnkgb2YgYSBwcm9qZWN0LCB1c2VkIHRvIGdyb3VwIHByb2plY3RzIGlmCisJYCRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXNgIGlzIGVuYWJsZWQuICBCeSBkZWZhdWx0IChmaWxlIGFuZAorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYWJzZW50KSwgdW5jYXRlZ29yaXplZCBwcm9qZWN0cyBhcmUgcHV0IGluIHRoZQorCWAkcHJvamVjdF9saXN0X2RlZmF1bHRfY2F0ZWdvcnlgIGNhdGVnb3J5LiAgWW91IGNhbiB1c2UgdGhlCisJYGdpdHdlYi5jYXRlZ29yeWAgcmVwbyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBidXQgdGhlIGZpbGUgdGFrZXMKKwlwcmVjZWRlbmNlLgorKworVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGAkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzYCBhbmQKK2AkcHJvamVjdF9saXN0X2RlZmF1bHRfY2F0ZWdvcnlgIGFyZSBkZXNjcmliZWQgaW4gbGlua2dpdDpnaXR3ZWIuY29uZls1XQorCitjbG9uZXVybCAob3IgbXVsdGlwbGUtdmFsdWVkIGBnaXR3ZWIudXJsYCk6OgorCUZpbGUgd2l0aCByZXBvc2l0b3J5IFVSTCAodXNlZCBmb3IgY2xvbmUgYW5kIGZldGNoKSwgb25lIHBlciBsaW5lLgorCURpc3BsYXllZCBpbiB0aGUgcHJvamVjdCBzdW1tYXJ5IHBhZ2UuIFlvdSBjYW4gdXNlIG11bHRpcGxlLXZhbHVlZAorCWBnaXR3ZWIudXJsYCByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yIHRoYXQsIGJ1dCB0aGUgZmlsZQorCXRha2VzIHByZWNlZGVuY2UuCisrCitUaGlzIGlzIHBlci1yZXBvc2l0b3J5IGVuaGFuY2VtZW50IC8gdmVyc2lvbiBvZiBnbG9iYWwgcHJlZml4LWJhc2VkCitgQGdpdF9iYXNlX3VybF9saXN0YCBnaXR3ZWIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlCitsaW5rZ2l0OmdpdHdlYi5jb25mWzVdKS4KKworZ2l0d2ViLm93bmVyOjoKKwlZb3UgY2FuIHVzZSB0aGUgYGdpdHdlYi5vd25lcmAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIHNldAorCXJlcG9zaXRvcnkncyBvd25lci4gIEl0IGlzIGRpc3BsYXllZCBpbiB0aGUgcHJvamVjdCBsaXN0IGFuZCBzdW1tYXJ5CisJcGFnZS4KKysKK0lmIGl0J3Mgbm90IHNldCwgZmlsZXN5c3RlbSBkaXJlY3RvcnkncyBvd25lciBpcyB1c2VkICh2aWEgR0VDT1MgZmllbGQsCitpLmUuIHJlYWwgbmFtZSBmaWVsZCBmcm9tICpnZXRwd3VpZCooMykpIGlmIGAkcHJvamVjdHNfbGlzdGAgaXMgdW5zZXQKKyhnaXR3ZWIgc2NhbnMgYCRwcm9qZWN0cm9vdGAgZm9yIHJlcG9zaXRvcmllcyk7IGlmIGAkcHJvamVjdHNfbGlzdGAKK3BvaW50cyB0byBmaWxlIHdpdGggbGlzdCBvZiByZXBvc2l0b3JpZXMsIHRoZW4gcHJvamVjdCBvd25lciBkZWZhdWx0cyB0bwordmFsdWUgZnJvbSB0aGlzIGZpbGUgZm9yIGdpdmVuIHJlcG9zaXRvcnkuCisKK3ZhcmlvdXMgYGdpdHdlYi4qYCBjb25maWcgdmFyaWFibGVzIChpbiBjb25maWcpOjoKKwlSZWFkIGRlc2NyaXB0aW9uIG9mIGAlZmVhdHVyZWAgaGFzaCBmb3IgZGV0YWlsZWQgbGlzdCwgYW5kIGRlc2NyaXB0aW9ucy4KKwlTZWUgYWxzbyAiQ29uZmlndXJpbmcgZ2l0d2ViIGZlYXR1cmVzIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0KKworCitBQ1RJT05TLCBBTkQgVVJMUworLS0tLS0tLS0tLS0tLS0tLS0KK0dpdHdlYiBjYW4gdXNlIHBhdGhfaW5mbyAoY29tcG9uZW50KSBiYXNlZCBVUkxzLCBvciBpdCBjYW4gcGFzcyBhbGwgbmVjZXNzYXJ5CitpbmZvcm1hdGlvbiB2aWEgcXVlcnkgcGFyYW1ldGVycy4gIFRoZSB0eXBpY2FsIGdpdHdlYiBVUkxzIGFyZSBicm9rZW4gZG93biBpbiB0bworZml2ZSBjb21wb25lbnRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLi4uL2dpdHdlYi5jZ2kvPHJlcG8+LzxhY3Rpb24+LzxyZXZpc2lvbj46LzxwYXRoPj88YXJndW1lbnRzPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcmVwbzo6CisJVGhlIHJlcG9zaXRvcnkgdGhlIGFjdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBvbi4KKysKK0FsbCBhY3Rpb25zIGV4Y2VwdCBmb3IgdGhvc2UgdGhhdCBsaXN0IGFsbCBhdmFpbGFibGUgcHJvamVjdHMsCitpbiB3aGF0ZXZlciBmb3JtLCByZXF1aXJlIHRoaXMgcGFyYW1ldGVyLgorCithY3Rpb246OgorCVRoZSBhY3Rpb24gdGhhdCB3aWxsIGJlIHJ1bi4gIERlZmF1bHRzIHRvICdwcm9qZWN0c19saXN0JyBpZiByZXBvCisJaXMgbm90IHNldCwgYW5kIHRvICdzdW1tYXJ5JyBvdGhlcndpc2UuCisKK3JldmlzaW9uOjoKKwlSZXZpc2lvbiBzaG93bi4gIERlZmF1bHRzIHRvIEhFQUQuCisKK3BhdGg6OgorCVRoZSBwYXRoIHdpdGhpbiB0aGUgPHJlcG9zaXRvcnk+IHRoYXQgdGhlIGFjdGlvbiBpcyBwZXJmb3JtZWQgb24sCisJZm9yIHRob3NlIGFjdGlvbnMgdGhhdCByZXF1aXJlIGl0LgorCithcmd1bWVudHM6OgorCUFueSBhcmd1bWVudHMgdGhhdCBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGFjdGlvbi4KKworU29tZSBhY3Rpb25zIHJlcXVpcmUgb3IgYWxsb3cgdG8gc3BlY2lmeSB0d28gcmV2aXNpb25zLCBhbmQgc29tZXRpbWVzIGV2ZW4gdHdvCitwYXRobmFtZXMuICBJbiBtb3N0IGdlbmVyYWwgZm9ybSBzdWNoIHBhdGhfaW5mbyAoY29tcG9uZW50KSBiYXNlZCBnaXR3ZWIgVVJMCitsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuLi4vZ2l0d2ViLmNnaS88cmVwbz4vPGFjdGlvbj4vPHJldmlzaW9uX2Zyb20+Oi88cGF0aF9mcm9tPi4uPHJldmlzaW9uX3RvPjovPHBhdGhfdG8+Pzxhcmd1bWVudHM+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0VhY2ggYWN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgc3Vicm91dGluZSwgYW5kIG11c3QgYmUgcHJlc2VudCBpbiAlYWN0aW9ucworaGFzaC4gIFNvbWUgYWN0aW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIG11c3QgYmUgdHVybmVkIG9uIHZpYSBmZWF0dXJlCittZWNoYW5pc20uICBGb3IgZXhhbXBsZSB0byBlbmFibGUgJ2JsYW1lJyB2aWV3IGFkZCB0aGUgZm9sbG93aW5nIHRvIGdpdHdlYgorY29uZmlndXJhdGlvbiBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJGZlYXR1cmV7J2JsYW1lJ317J2RlZmF1bHQnfSA9IFsxXTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQWN0aW9uczoKK35+fn5+fn5+CitUaGUgc3RhbmRhcmQgYWN0aW9ucyBhcmU6CisKK3Byb2plY3RfbGlzdDo6CisJTGlzdHMgdGhlIGF2YWlsYWJsZSBHaXQgcmVwb3NpdG9yaWVzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb21tYW5kIGlmIG5vCisJcmVwb3NpdG9yeSBpcyBzcGVjaWZpZWQgaW4gdGhlIFVSTC4KKworc3VtbWFyeTo6CisJRGlzcGxheXMgc3VtbWFyeSBhYm91dCBnaXZlbiByZXBvc2l0b3J5LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb21tYW5kIGlmCisJbm8gYWN0aW9uIGlzIHNwZWNpZmllZCBpbiBVUkwsIGFuZCBvbmx5IHJlcG9zaXRvcnkgaXMgc3BlY2lmaWVkLgorCitoZWFkczo6CityZW1vdGVzOjoKKwlMaXN0cyBhbGwgbG9jYWwgb3IgYWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBpbiBnaXZlbiByZXBvc2l0b3J5LgorKworVGhlIGxhdHRlciBpcyBub3QgYXZhaWxhYmxlIGJ5IGRlZmF1bHQsIHVubGVzcyBjb25maWd1cmVkLgorCit0YWdzOjoKKwlMaXN0IGFsbCB0YWdzIChsaWdodHdlaWdodCBhbmQgYW5ub3RhdGVkKSBpbiBnaXZlbiByZXBvc2l0b3J5LgorCitibG9iOjoKK3RyZWU6OgorCVNob3dzIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gYSBnaXZlbiByZXBvc2l0b3J5IHBhdGgsIGF0IGdpdmVuCisJcmV2aXNpb24uICBUaGlzIGlzIGRlZmF1bHQgY29tbWFuZCBpZiBubyBhY3Rpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBVUkwsCisJYW5kIHBhdGggaXMgZ2l2ZW4uCisKK2Jsb2JfcGxhaW46OgorCVJldHVybnMgdGhlIHJhdyBkYXRhIGZvciB0aGUgZmlsZSBpbiBnaXZlbiByZXBvc2l0b3J5LCBhdCBnaXZlbiBwYXRoIGFuZAorCXJldmlzaW9uLiAgTGlua3MgdG8gdGhpcyBhY3Rpb24gYXJlIG1hcmtlZCAncmF3Jy4KKworYmxvYmRpZmY6OgorCVNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHJldmlzaW9ucyBvZiB0aGUgc2FtZSBmaWxlLgorCitibGFtZTo6CitibGFtZV9pbmNyZW1lbnRhbDo6CisJU2hvd3MgdGhlIGJsYW1lIChhbHNvIGNhbGxlZCBhbm5vdGF0aW9uKSBpbmZvcm1hdGlvbiBmb3IgYSBmaWxlLiBPbiBhCisJcGVyIGxpbmUgYmFzaXMgaXQgc2hvd3MgdGhlIHJldmlzaW9uIGluIHdoaWNoIHRoYXQgbGluZSB3YXMgbGFzdCBjaGFuZ2VkCisJYW5kIHRoZSB1c2VyIHRoYXQgY29tbWl0dGVkIHRoZSBjaGFuZ2UuICBUaGUgaW5jcmVtZW50YWwgdmVyc2lvbiAod2hpY2gKKwlpZiBjb25maWd1cmVkIGlzIHVzZWQgYXV0b21hdGljYWxseSB3aGVuIEphdmFTY3JpcHQgaXMgZW5hYmxlZCkgdXNlcworCUFqYXggdG8gaW5jcmVtZW50YWxseSBhZGQgYmxhbWUgaW5mbyB0byB0aGUgY29udGVudHMgb2YgZ2l2ZW4gZmlsZS4KKysKK1RoaXMgYWN0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisKK2NvbW1pdDo6Citjb21taXRkaWZmOjoKKwlTaG93cyBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIGNvbW1pdCBpbiBhIHJlcG9zaXRvcnkuICBUaGUgJ2NvbW1pdCcKKwl2aWV3IHNob3dzIGluZm9ybWF0aW9uIGFib3V0IGNvbW1pdCBpbiBtb3JlIGRldGFpbCwgdGhlICdjb21taXRkaWZmJworCWFjdGlvbiBzaG93cyBjaGFuZ2VzZXQgZm9yIGdpdmVuIGNvbW1pdC4KKworcGF0Y2g6OgorCVJldHVybnMgdGhlIGNvbW1pdCBpbiBwbGFpbiB0ZXh0IG1haWwgZm9ybWF0LCBzdWl0YWJsZSBmb3IgYXBwbHlpbmcgd2l0aAorCWxpbmtnaXQ6Z2l0LWFtWzFdLgorCit0YWc6OgorCURpc3BsYXkgc3BlY2lmaWMgYW5ub3RhdGVkIHRhZyAodGFnIG9iamVjdCkuCisKK2xvZzo6CitzaG9ydGxvZzo6CisJU2hvd3MgbG9nIGluZm9ybWF0aW9uIChjb21taXQgbWVzc2FnZSBvciBqdXN0IGNvbW1pdCBzdWJqZWN0KSBmb3IgYQorCWdpdmVuIGJyYW5jaCAoc3RhcnRpbmcgZnJvbSBnaXZlbiByZXZpc2lvbikuCisrCitUaGUgJ3Nob3J0bG9nJyB2aWV3IGlzIG1vcmUgY29tcGFjdDsgaXQgc2hvd3Mgb25lIGNvbW1pdCBwZXIgbGluZS4KKworaGlzdG9yeTo6CisJU2hvd3MgaGlzdG9yeSBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgaW4gYSBnaXZlbiByZXBvc2l0b3J5IHBhdGgsCisJc3RhcnRpbmcgZnJvbSBnaXZlbiByZXZpc2lvbiAoZGVmYXVsdHMgdG8gSEVBRCwgaS5lLiBkZWZhdWx0IGJyYW5jaCkuCisrCitUaGlzIHZpZXcgaXMgc2ltaWxhciB0byAnc2hvcnRsb2cnIHZpZXcuCisKK3Jzczo6CithdG9tOjoKKwlHZW5lcmF0ZXMgYW4gUlNTIChvciBBdG9tKSBmZWVkIG9mIGNoYW5nZXMgdG8gcmVwb3NpdG9yeS4KKworCitXRUJTRVJWRVIgQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gY29uZmlndXJlIHNvbWUgY29tbW9uIHdlYnNlcnZlcnMgdG8gcnVuIGdpdHdlYi4gSW4KK2FsbCBjYXNlcywgYC9wYXRoL3RvL2dpdHdlYmAgaW4gdGhlIGV4YW1wbGVzIGlzIHRoZSBkaXJlY3RvcnkgeW91IHJhbiBpbnN0YWxsZWQKK2dpdHdlYiBpbiwgYW5kIGNvbnRhaW5zIGBnaXR3ZWJfY29uZmlnLnBlcmxgLgorCitJZiB5b3UndmUgY29uZmlndXJlZCBhIHdlYiBzZXJ2ZXIgdGhhdCBpc24ndCBsaXN0ZWQgaGVyZSBmb3IgZ2l0d2ViLCBwbGVhc2Ugc2VuZAoraW4gdGhlIGluc3RydWN0aW9ucyBzbyB0aGV5IGNhbiBiZSBpbmNsdWRlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorCitBcGFjaGUgYXMgQ0dJCit+fn5+fn5+fn5+fn5+CitBcGFjaGUgbXVzdCBiZSBjb25maWd1cmVkIHRvIHN1cHBvcnQgQ0dJIHNjcmlwdHMgaW4gdGhlIGRpcmVjdG9yeSBpbgord2hpY2ggZ2l0d2ViIGlzIGluc3RhbGxlZC4gIExldCdzIGFzc3VtZSB0aGF0IGl0IGlzICcvdmFyL3d3dy9jZ2ktYmluJworZGlyZWN0b3J5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2NyaXB0QWxpYXMgL2NnaS1iaW4vICIvdmFyL3d3dy9jZ2ktYmluLyIKKworPERpcmVjdG9yeSAiL3Zhci93d3cvY2dpLWJpbiI+CisgICAgT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bWxpbmtzIEV4ZWNDR0kKKyAgICBBbGxvd092ZXJyaWRlIE5vbmUKKyAgICBPcmRlciBhbGxvdyxkZW55CisgICAgQWxsb3cgZnJvbSBhbGwKKzwvRGlyZWN0b3J5PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGF0IGNvbmZpZ3VyYXRpb24gdGhlIGZ1bGwgcGF0aCB0byBicm93c2UgcmVwb3NpdG9yaWVzIHdvdWxkIGJlOgorCisgIGh0dHA6Ly9zZXJ2ZXIvY2dpLWJpbi9naXR3ZWIuY2dpCisKK0FwYWNoZSB3aXRoIG1vZF9wZXJsLCB2aWEgTW9kUGVybDo6UmVnaXN0cnkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1lvdSBjYW4gdXNlIG1vZF9wZXJsIHdpdGggZ2l0d2ViLiAgWW91IG11c3QgaW5zdGFsbCBBcGFjaGU6OlJlZ2lzdHJ5CisoZm9yIG1vZF9wZXJsIDEueCkgb3IgTW9kUGVybDo6UmVnaXN0cnkgKGZvciBtb2RfcGVybCAyLngpIHRvIGVuYWJsZQordGhpcyBzdXBwb3J0LgorCitBc3N1bWluZyB0aGF0IGdpdHdlYiBpcyBpbnN0YWxsZWQgdG8gJy92YXIvd3d3L3BlcmwnLCB0aGUgZm9sbG93aW5nCitBcGFjaGUgY29uZmlndXJhdGlvbiAoZm9yIG1vZF9wZXJsIDIueCkgaXMgc3VpdGFibGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbGlhcyAvcGVybCAiL3Zhci93d3cvcGVybCIKKworPERpcmVjdG9yeSAiL3Zhci93d3cvcGVybCI+CisgICAgU2V0SGFuZGxlciBwZXJsLXNjcmlwdAorICAgIFBlcmxSZXNwb25zZUhhbmRsZXIgTW9kUGVybDo6UmVnaXN0cnkKKyAgICBQZXJsT3B0aW9ucyArUGFyc2VIZWFkZXJzCisgICAgT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bWxpbmtzICtFeGVjQ0dJCisgICAgQWxsb3dPdmVycmlkZSBOb25lCisgICAgT3JkZXIgYWxsb3csZGVueQorICAgIEFsbG93IGZyb20gYWxsCis8L0RpcmVjdG9yeT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhhdCBjb25maWd1cmF0aW9uIHRoZSBmdWxsIHBhdGggdG8gYnJvd3NlIHJlcG9zaXRvcmllcyB3b3VsZCBiZToKKworICBodHRwOi8vc2VydmVyL3BlcmwvZ2l0d2ViLmNnaQorCitBcGFjaGUgd2l0aCBGYXN0Q0dJCit+fn5+fn5+fn5+fn5+fn5+fn5+CitHaXR3ZWIgd29ya3Mgd2l0aCBBcGFjaGUgYW5kIEZhc3RDR0kuICBGaXJzdCB5b3UgbmVlZCB0byByZW5hbWUsIGNvcHkKK29yIHN5bWxpbmsgZ2l0d2ViLmNnaSB0byBnaXR3ZWIuZmNnaS4gIExldCdzIGFzc3VtZSB0aGF0IGdpdHdlYiBpcworaW5zdGFsbGVkIGluICcvdXNyL3NoYXJlL2dpdHdlYicgZGlyZWN0b3J5LiAgVGhlIGZvbGxvd2luZyBBcGFjaGUKK2NvbmZpZ3VyYXRpb24gaXMgc3VpdGFibGUgKFVOVEVTVEVEISkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Zhc3RDZ2lTZXJ2ZXIgL3Vzci9zaGFyZS9naXR3ZWIvZ2l0d2ViLmNnaQorU2NyaXB0QWxpYXMgL2dpdHdlYiAvdXNyL3NoYXJlL2dpdHdlYi9naXR3ZWIuY2dpCisKK0FsaWFzIC9naXR3ZWIvc3RhdGljIC91c3Ivc2hhcmUvZ2l0d2ViL3N0YXRpYworPERpcmVjdG9yeSAvdXNyL3NoYXJlL2dpdHdlYi9zdGF0aWM+CisgICAgU2V0SGFuZGxlciBkZWZhdWx0LWhhbmRsZXIKKzwvRGlyZWN0b3J5PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGF0IGNvbmZpZ3VyYXRpb24gdGhlIGZ1bGwgcGF0aCB0byBicm93c2UgcmVwb3NpdG9yaWVzIHdvdWxkIGJlOgorCisgIGh0dHA6Ly9zZXJ2ZXIvZ2l0d2ViCisKKworQURWQU5DRUQgV0VCIFNFUlZFUiBTRVRVUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWxsIG9mIHRob3NlIGV4YW1wbGVzIHVzZSByZXF1ZXN0IHJld3JpdGluZywgYW5kIG5lZWQgYG1vZF9yZXdyaXRlYAorKG9yIGVxdWl2YWxlbnQ7IGV4YW1wbGVzIGJlbG93IGFyZSB3cml0dGVuIGZvciBBcGFjaGUpLgorCitTaW5nbGUgVVJMIGZvciBnaXR3ZWIgYW5kIGZvciBmZXRjaGluZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0lmIHlvdSB3YW50IHRvIGhhdmUgb25lIFVSTCBmb3IgYm90aCBnaXR3ZWIgYW5kIHlvdXIgYGh0dHA6Ly9gCityZXBvc2l0b3JpZXMsIHlvdSBjYW4gY29uZmlndXJlIEFwYWNoZSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8VmlydHVhbEhvc3QgKjo4MD4KKyAgICBTZXJ2ZXJOYW1lICAgIGdpdC5leGFtcGxlLm9yZworICAgIERvY3VtZW50Um9vdCAgL3B1Yi9naXQKKyAgICBTZXRFbnYgICAgICAgIEdJVFdFQl9DT05GSUcgICAvZXRjL2dpdHdlYi5jb25mCisKKyAgICAjIHR1cm5pbmcgb24gbW9kIHJld3JpdGUKKyAgICBSZXdyaXRlRW5naW5lIG9uCisKKyAgICAjIG1ha2UgdGhlIGZyb250IHBhZ2UgYW4gaW50ZXJuYWwgcmV3cml0ZSB0byB0aGUgZ2l0d2ViIHNjcmlwdAorICAgIFJld3JpdGVSdWxlIF4vJCAgL2NnaS1iaW4vZ2l0d2ViLmNnaQorCisgICAgIyBtYWtlIGFjY2VzcyBmb3IgImR1bWIgY2xpZW50cyIgd29yaworICAgIFJld3JpdGVSdWxlIF4vKC4qXC5naXQvKD8hLz8oSEVBRHxpbmZvfG9iamVjdHN8cmVmcykpLiopPyQgXAorCQkvY2dpLWJpbi9naXR3ZWIuY2dpJXtSRVFVRVNUX1VSSX0gIFtMLFBUXQorPC9WaXJ0dWFsSG9zdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhYm92ZSBjb25maWd1cmF0aW9uIGV4cGVjdHMgeW91ciBwdWJsaWMgcmVwb3NpdG9yaWVzIHRvIGxpdmUgdW5kZXIKKycvcHViL2dpdCcgYW5kIHdpbGwgc2VydmUgdGhlbSBhcyBgaHR0cDovL2dpdC5kb21haW4ub3JnL2Rpci11bmRlci1wdWItZ2l0YCwKK2JvdGggYXMgY2xvbmVhYmxlIEdJVCBVUkwgYW5kIGFzIGJyb3dzZWFibGUgZ2l0d2ViIGludGVyZmFjZS4gIElmIHlvdSB0aGVuCitzdGFydCB5b3VyIGxpbmtnaXQ6Z2l0LWRhZW1vblsxXSB3aXRoIGAtLWJhc2UtcGF0aD0vcHViL2dpdCAtLWV4cG9ydC1hbGxgCit0aGVuIHlvdSBjYW4gZXZlbiB1c2UgdGhlIGBnaXQ6Ly9gIFVSTCB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgcGF0aC4KKworU2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVFdFQl9DT05GSUdgIHdpbGwgdGVsbCBnaXR3ZWIgdG8gdXNlIHRoZQorbmFtZWQgZmlsZSAoaS5lLiBpbiB0aGlzIGV4YW1wbGUgJy9ldGMvZ2l0d2ViLmNvbmYnKSBhcyBhIGNvbmZpZ3VyYXRpb24gZm9yCitnaXR3ZWIuICBZb3UgZG9uJ3QgcmVhbGx5IG5lZWQgaXQgaW4gYWJvdmUgZXhhbXBsZTsgaXQgaXMgcmVxdWlyZWQgb25seSBpZgoreW91ciBjb25maWd1cmF0aW9uIGZpbGUgaXMgaW4gZGlmZmVyZW50IHBsYWNlIHRoYW4gYnVpbHQtaW4gKGR1cmluZworY29tcGlsaW5nIGdpdHdlYikgJ2dpdHdlYl9jb25maWcucGVybCcgb3IgJy9ldGMvZ2l0d2ViLmNvbmYnLiAgU2VlCitsaW5rZ2l0OmdpdHdlYi5jb25mWzVdIGZvciBkZXRhaWxzLCBlc3BlY2lhbGx5IGluZm9ybWF0aW9uIGFib3V0IHByZWNlZGVuY2UKK3J1bGVzLgorCitJZiB5b3UgdXNlIHRoZSByZXdyaXRlIHJ1bGVzIGZyb20gdGhlIGV4YW1wbGUgeW91ICptaWdodCogYWxzbyBuZWVkCitzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIGluIHlvdXIgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZQorKCcvZXRjL2dpdHdlYi5jb25mJyBmb2xsb3dpbmcgZXhhbXBsZSk6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitAc3R5bGVzaGVldHMgPSAoIi9zb21lL2Fic29sdXRlL3BhdGgvZ2l0d2ViLmNzcyIpOworJG15X3VyaSAgICA9ICIvIjsKKyRob21lX2xpbmsgPSAiLyI7CiskcGVyX3JlcXVlc3RfY29uZmlnID0gMTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05vd2FkYXlzIHRob3VnaCBnaXR3ZWIgc2hvdWxkIGNyZWF0ZSBIVE1MIGJhc2UgdGFnIHdoZW4gbmVlZGVkICh0byBzZXQgYmFzZQorVVJJIGZvciByZWxhdGl2ZSBsaW5rcyksIHNvIGl0IHNob3VsZCB3b3JrIGF1dG9tYXRpY2FsbHkuCisKKworV2Vic2VydmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBtdWx0aXBsZSBwcm9qZWN0cycgcm9vdAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSWYgeW91IHdhbnQgdG8gdXNlIGdpdHdlYiB3aXRoIHNldmVyYWwgcHJvamVjdCByb290cyB5b3UgY2FuIGVkaXQgeW91cgorQXBhY2hlIHZpcnR1YWwgaG9zdCBhbmQgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhlIGZvbGxvd2luZyB3YXkuCisKK1RoZSB2aXJ0dWFsIGhvc3QgY29uZmlndXJhdGlvbiAoaW4gQXBhY2hlIGNvbmZpZ3VyYXRpb24gZmlsZSkgc2hvdWxkIGxvb2sKK2xpa2UgdGhpczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8VmlydHVhbEhvc3QgKjo4MD4KKyAgICBTZXJ2ZXJOYW1lICAgIGdpdC5leGFtcGxlLm9yZworICAgIERvY3VtZW50Um9vdCAgL3B1Yi9naXQKKyAgICBTZXRFbnYgICAgICAgIEdJVFdFQl9DT05GSUcgIC9ldGMvZ2l0d2ViLmNvbmYKKworICAgICMgdHVybmluZyBvbiBtb2QgcmV3cml0ZQorICAgIFJld3JpdGVFbmdpbmUgb24KKworICAgICMgbWFrZSB0aGUgZnJvbnQgcGFnZSBhbiBpbnRlcm5hbCByZXdyaXRlIHRvIHRoZSBnaXR3ZWIgc2NyaXB0CisgICAgUmV3cml0ZVJ1bGUgXi8kICAvY2dpLWJpbi9naXR3ZWIuY2dpICBbUVNBLEwsUFRdCisKKyAgICAjIGxvb2sgZm9yIGEgcHVibGljX2dpdCBmb2xkZXIgaW4gdW5peCB1c2VycycgaG9tZQorICAgICMgaHR0cDovL2dpdC5leGFtcGxlLm9yZy9+PHVzZXI+LworICAgIFJld3JpdGVSdWxlIF4vXH4oW15cL10rKSgvfC9naXR3ZWIuY2dpKT8kCS9jZ2ktYmluL2dpdHdlYi5jZ2kgXAorCQlbUVNBLEU9R0lUV0VCX1BST0pFQ1RST09UOi9ob21lLyQxL3B1YmxpY19naXQvLEwsUFRdCisKKyAgICAjIGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcvKzx1c2VyPi8KKyAgICAjUmV3cml0ZVJ1bGUgXi9cKyhbXlwvXSspKC98L2dpdHdlYi5jZ2kpPyQJL2NnaS1iaW4vZ2l0d2ViLmNnaSBcCisJCSBbUVNBLEU9R0lUV0VCX1BST0pFQ1RST09UOi9ob21lLyQxL3B1YmxpY19naXQvLEwsUFRdCisKKyAgICAjIGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcvdXNlci88dXNlcj4vCisgICAgI1Jld3JpdGVSdWxlIF4vdXNlci8oW15cL10rKS8oZ2l0d2ViLmNnaSk/JAkvY2dpLWJpbi9naXR3ZWIuY2dpIFwKKwkJIFtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L2hvbWUvJDEvcHVibGljX2dpdC8sTCxQVF0KKworICAgICMgZGVmaW5lZCBsaXN0IG9mIHByb2plY3Qgcm9vdHMKKyAgICBSZXdyaXRlUnVsZSBeL3NjbSgvfC9naXR3ZWIuY2dpKT8kIC9jZ2ktYmluL2dpdHdlYi5jZ2kgXAorCQlbUVNBLEU9R0lUV0VCX1BST0pFQ1RST09UOi9wdWIvc2NtLyxMLFBUXQorICAgIFJld3JpdGVSdWxlIF4vdmFyKC98L2dpdHdlYi5jZ2kpPyQgL2NnaS1iaW4vZ2l0d2ViLmNnaSBcCisJCVtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L3Zhci9naXQvLEwsUFRdCisKKyAgICAjIG1ha2UgYWNjZXNzIGZvciAiZHVtYiBjbGllbnRzIiB3b3JrCisgICAgUmV3cml0ZVJ1bGUgXi8oLipcLmdpdC8oPyEvPyhIRUFEfGluZm98b2JqZWN0c3xyZWZzKSkuKik/JCBcCisJCS9jZ2ktYmluL2dpdHdlYi5jZ2kle1JFUVVFU1RfVVJJfSAgW0wsUFRdCis8L1ZpcnR1YWxIb3N0PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSBhY3R1YWwgcHJvamVjdCByb290IGlzIHBhc3NlZCB0byBnaXR3ZWIgdmlhIGBHSVRXRUJfUFJPSkVDVF9ST09UYAorZW52aXJvbm1lbnQgdmFyaWFibGUgZnJvbSBhIHdlYiBzZXJ2ZXIsIHNvIHlvdSBuZWVkIHRvIHB1dCB0aGUgZm9sbG93aW5nCitsaW5lIGluIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGUgKCcvZXRjL2dpdHdlYi5jb25mJyBpbiBhYm92ZSBleGFtcGxlKToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskcHJvamVjdHJvb3QgPSAkRU5WeydHSVRXRUJfUFJPSkVDVFJPT1QnfSB8fCAiL3B1Yi9naXQiOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypOb3RlKiB0aGF0IHRoaXMgcmVxdWlyZXMgdG8gYmUgc2V0IGZvciBlYWNoIHJlcXVlc3QsIHNvIGVpdGhlcgorYCRwZXJfcmVxdWVzdF9jb25maWdgIG11c3QgYmUgZmFsc2UsIG9yIHRoZSBhYm92ZSBtdXN0IGJlIHB1dCBpbiBjb2RlCityZWZlcmVuY2VkIGJ5IGAkcGVyX3JlcXVlc3RfY29uZmlnYDsKKworVGhlc2UgY29uZmlndXJhdGlvbnMgZW5hYmxlIHR3byB0aGluZ3MuIEZpcnN0LCBlYWNoIHVuaXggdXNlciAoYDx1c2VyPmApIG9mCit0aGUgc2VydmVyIHdpbGwgYmUgYWJsZSB0byBicm93c2UgdGhyb3VnaCBnaXR3ZWIgZ2l0IHJlcG9zaXRvcmllcyBmb3VuZCBpbgorJ34vcHVibGljX2dpdC8nIHdpdGggdGhlIGZvbGxvd2luZyB1cmw6CisKKyAgaHR0cDovL2dpdC5leGFtcGxlLm9yZy9+PHVzZXI+LworCitJZiB5b3UgZG8gbm90IHdhbnQgdGhpcyBmZWF0dXJlIG9uIHlvdXIgc2VydmVyIGp1c3QgcmVtb3ZlIHRoZSBzZWNvbmQKK3Jld3JpdGUgcnVsZS4KKworSWYgeW91IGFscmVhZHkgdXNlIGBtb2RfdXNlcmRpcmAgaW4geW91ciB2aXJ0dWFsIGhvc3Qgb3IgeW91IGRvbid0IHdhbnQgdG8KK3VzZSB0aGUgXCd+JyBhcyBmaXJzdCBjaGFyYWN0ZXIsIGp1c3QgY29tbWVudCBvciByZW1vdmUgdGhlIHNlY29uZCByZXdyaXRlCitydWxlLCBhbmQgdW5jb21tZW50IG9uZSBvZiB0aGUgZm9sbG93aW5nIGFjY29yZGluZyB0byB3aGF0IHlvdSB3YW50LgorCitTZWNvbmQsIHJlcG9zaXRvcmllcyBmb3VuZCBpbiAnL3B1Yi9zY20vJyBhbmQgJy92YXIvZ2l0Lycgd2lsbCBiZSBhY2Nlc3NpYmxlCit0aHJvdWdoIGBodHRwOi8vZ2l0LmV4YW1wbGUub3JnL3NjbS9gIGFuZCBgaHR0cDovL2dpdC5leGFtcGxlLm9yZy92YXIvYC4KK1lvdSBjYW4gYWRkIGFzIG1hbnkgcHJvamVjdCByb290cyBhcyB5b3Ugd2FudCBieSBhZGRpbmcgcmV3cml0ZSBydWxlcyBsaWtlCit0aGUgdGhpcmQgYW5kIHRoZSBmb3VydGguCisKKworUEFUSF9JTkZPIHVzYWdlCit+fn5+fn5+fn5+fn5+fn4KK0lmIHlvdSBlbmFibGUgUEFUSF9JTkZPIHVzYWdlIGluIGdpdHdlYiBieSBwdXR0aW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskZmVhdHVyZXsncGF0aGluZm8nfXsnZGVmYXVsdCd9ID0gWzFdOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW4geW91ciBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlLCBpdCBpcyBwb3NzaWJsZSB0byBzZXQgdXAgeW91ciBzZXJ2ZXIgc28KK3RoYXQgaXQgY29uc3VtZXMgYW5kIHByb2R1Y2VzIFVSTHMgaW4gdGhlIGZvcm0KKworICBodHRwOi8vZ2l0LmV4YW1wbGUuY29tL3Byb2plY3QuZ2l0L3Nob3J0bG9nL3NvbWV0YWcKKworaS5lLiB3aXRob3V0ICdnaXR3ZWIuY2dpJyBwYXJ0LCBieSB1c2luZyBhIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyB0aGUKK2ZvbGxvd2luZy4gIFRoaXMgY29uZmlndXJhdGlvbiBhc3N1bWVzIHRoYXQgJy92YXIvd3d3L2dpdHdlYicgaXMgdGhlCitEb2N1bWVudFJvb3Qgb2YgeW91ciB3ZWJzZXJ2ZXIsIGNvbnRhaW5zIHRoZSBnaXR3ZWIuY2dpIHNjcmlwdCBhbmQKK2NvbXBsZW1lbnRhcnkgc3RhdGljIGZpbGVzIChzdHlsZXNoZWV0LCBmYXZpY29uLCBKYXZhU2NyaXB0KToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPFZpcnR1YWxIb3N0ICo6ODA+CisJU2VydmVyQWxpYXMgZ2l0LmV4YW1wbGUuY29tCisKKwlEb2N1bWVudFJvb3QgL3Zhci93d3cvZ2l0d2ViCisKKwk8RGlyZWN0b3J5IC92YXIvd3d3L2dpdHdlYj4KKwkJT3B0aW9ucyBFeGVjQ0dJCisJCUFkZEhhbmRsZXIgY2dpLXNjcmlwdCBjZ2kKKworCQlEaXJlY3RvcnlJbmRleCBnaXR3ZWIuY2dpCisKKwkJUmV3cml0ZUVuZ2luZSBPbgorCQlSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZgorCQlSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZAorCQlSZXdyaXRlUnVsZSBeLiogL2dpdHdlYi5jZ2kvJDAgW0wsUFRdCisJPC9EaXJlY3Rvcnk+Cis8L1ZpcnR1YWxIb3N0PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHJld3JpdGUgcnVsZSBndWFyYW50ZWVzIHRoYXQgZXhpc3Rpbmcgc3RhdGljIGZpbGVzIHdpbGwgYmUgcHJvcGVybHkKK3NlcnZlZCwgd2hlcmVhcyBhbnkgb3RoZXIgVVJMIHdpbGwgYmUgcGFzc2VkIHRvIGdpdHdlYiBhcyBQQVRIX0lORk8KK3BhcmFtZXRlci4KKworKk5vdGljZSogdGhhdCBpbiB0aGlzIGNhc2UgeW91IGRvbid0IG5lZWQgc3BlY2lhbCBzZXR0aW5ncyBmb3IKK2BAc3R5bGVzaGVldHNgLCBgJG15X3VyaWAgYW5kIGAkaG9tZV9saW5rYCwgYnV0IHlvdSBsb3NlICJkdW1iIGNsaWVudCIKK2FjY2VzcyB0byB5b3VyIHByb2plY3QgLmdpdCBkaXJzIChkZXNjcmliZWQgaW4gIlNpbmdsZSBVUkwgZm9yIGdpdHdlYiBhbmQKK2ZvciBmZXRjaGluZyIgc2VjdGlvbikuICBBIHBvc3NpYmxlIHdvcmthcm91bmQgZm9yIHRoZSBsYXR0ZXIgaXMgdGhlCitmb2xsb3dpbmc6IGluIHlvdXIgcHJvamVjdCByb290IGRpciAoZS5nLiAnL3B1Yi9naXQnKSBoYXZlIHRoZSBwcm9qZWN0cworbmFtZWQgKndpdGhvdXQqIGEgLmdpdCBleHRlbnNpb24gKGUuZy4gJy9wdWIvZ2l0L3Byb2plY3QnIGluc3RlYWQgb2YKKycvcHViL2dpdC9wcm9qZWN0LmdpdCcpIGFuZCBjb25maWd1cmUgQXBhY2hlIGFzIGZvbGxvd3M6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8VmlydHVhbEhvc3QgKjo4MD4KKwlTZXJ2ZXJBbGlhcyBnaXQuZXhhbXBsZS5jb20KKworCURvY3VtZW50Um9vdCAvdmFyL3d3dy9naXR3ZWIKKworCUFsaWFzTWF0Y2ggXigvLio/KShcLmdpdCkoLy4qKT8kIC9wdWIvZ2l0JDEkMworCTxEaXJlY3RvcnkgL3Zhci93d3cvZ2l0d2ViPgorCQlPcHRpb25zIEV4ZWNDR0kKKwkJQWRkSGFuZGxlciBjZ2ktc2NyaXB0IGNnaQorCisJCURpcmVjdG9yeUluZGV4IGdpdHdlYi5jZ2kKKworCQlSZXdyaXRlRW5naW5lIE9uCisJCVJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1mCisJCVJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1kCisJCVJld3JpdGVSdWxlIF4uKiAvZ2l0d2ViLmNnaS8kMCBbTCxQVF0KKwk8L0RpcmVjdG9yeT4KKzwvVmlydHVhbEhvc3Q+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhZGRpdGlvbmFsIEFsaWFzTWF0Y2ggbWFrZXMgaXQgc28gdGhhdAorCisgIGh0dHA6Ly9naXQuZXhhbXBsZS5jb20vcHJvamVjdC5naXQKKword2lsbCBnaXZlIHJhdyBhY2Nlc3MgdG8gdGhlIHByb2plY3QncyBnaXQgZGlyIChzbyB0aGF0IHRoZSBwcm9qZWN0IGNhbiBiZQorY2xvbmVkKSwgd2hpbGUKKworICBodHRwOi8vZ2l0LmV4YW1wbGUuY29tL3Byb2plY3QKKword2lsbCBwcm92aWRlIGh1bWFuLWZyaWVuZGx5IGdpdHdlYiBhY2Nlc3MuCisKK1RoaXMgc29sdXRpb24gaXMgbm90IDEwMCUgYnVsbGV0cHJvb2YsIGluIHRoZSBzZW5zZSB0aGF0IGlmIHNvbWUgcHJvamVjdCBoYXMKK2EgbmFtZWQgcmVmIChicmFuY2gsIHRhZykgc3RhcnRpbmcgd2l0aCAnZ2l0LycsIHRoZW4gcGF0aHMgc3VjaCBhcworCisgIGh0dHA6Ly9naXQuZXhhbXBsZS5jb20vcHJvamVjdC9jb21tYW5kL2FicmFuY2guLmdpdC9hYnJhbmNoCisKK3dpbGwgZmFpbCB3aXRoIGEgNDA0IGVycm9yLgorCisKK0JVR1MKKy0tLS0KK1BsZWFzZSByZXBvcnQgYW55IGJ1Z3Mgb3IgZmVhdHVyZSByZXF1ZXN0cyB0byBnaXRAdmdlci5rZXJuZWwub3JnLAorcHV0dGluZyAiZ2l0d2ViIiBpbiB0aGUgc3ViamVjdCBvZiBlbWFpbC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHdlYi5jb25mWzVdLCBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXQorCisnZ2l0d2ViL1JFQURNRScsICdnaXR3ZWIvSU5TVEFMTCcKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHdvcmtmbG93cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHdvcmtmbG93cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4YzZhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0d29ya2Zsb3dzLnR4dApAQCAtMCwwICsxLDQ4MCBAQAorZ2l0d29ya2Zsb3dzKDcpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0d29ya2Zsb3dzIC0gQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggZ2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZ2l0ICoKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBkb2N1bWVudCBhdHRlbXB0cyB0byB3cml0ZSBkb3duIGFuZCBtb3RpdmF0ZSBzb21lIG9mIHRoZSB3b3JrZmxvdworZWxlbWVudHMgdXNlZCBmb3IgYGdpdC5naXRgIGl0c2VsZi4gIE1hbnkgaWRlYXMgYXBwbHkgaW4gZ2VuZXJhbCwKK3Rob3VnaCB0aGUgZnVsbCB3b3JrZmxvdyBpcyByYXJlbHkgcmVxdWlyZWQgZm9yIHNtYWxsZXIgcHJvamVjdHMgd2l0aAorZmV3ZXIgcGVvcGxlIGludm9sdmVkLgorCitXZSBmb3JtdWxhdGUgYSBzZXQgb2YgJ3J1bGVzJyBmb3IgcXVpY2sgcmVmZXJlbmNlLCB3aGlsZSB0aGUgcHJvc2UKK3RyaWVzIHRvIG1vdGl2YXRlIGVhY2ggb2YgdGhlbS4gIERvIG5vdCBhbHdheXMgdGFrZSB0aGVtIGxpdGVyYWxseTsKK3lvdSBzaG91bGQgdmFsdWUgZ29vZCByZWFzb25zIGZvciB5b3VyIGFjdGlvbnMgaGlnaGVyIHRoYW4gbWFucGFnZXMKK3N1Y2ggYXMgdGhpcyBvbmUuCisKKworU0VQQVJBVEUgQ0hBTkdFUworLS0tLS0tLS0tLS0tLS0tLQorCitBcyBhIGdlbmVyYWwgcnVsZSwgeW91IHNob3VsZCB0cnkgdG8gc3BsaXQgeW91ciBjaGFuZ2VzIGludG8gc21hbGwKK2xvZ2ljYWwgc3RlcHMsIGFuZCBjb21taXQgZWFjaCBvZiB0aGVtLiAgVGhleSBzaG91bGQgYmUgY29uc2lzdGVudCwKK3dvcmtpbmcgaW5kZXBlbmRlbnRseSBvZiBhbnkgbGF0ZXIgY29tbWl0cywgcGFzcyB0aGUgdGVzdCBzdWl0ZSwgZXRjLgorVGhpcyBtYWtlcyB0aGUgcmV2aWV3IHByb2Nlc3MgbXVjaCBlYXNpZXIsIGFuZCB0aGUgaGlzdG9yeSBtdWNoIG1vcmUKK3VzZWZ1bCBmb3IgbGF0ZXIgaW5zcGVjdGlvbiBhbmQgYW5hbHlzaXMsIGZvciBleGFtcGxlIHdpdGgKK2xpbmtnaXQ6Z2l0LWJsYW1lWzFdIGFuZCBsaW5rZ2l0OmdpdC1iaXNlY3RbMV0uCisKK1RvIGFjaGlldmUgdGhpcywgdHJ5IHRvIHNwbGl0IHlvdXIgd29yayBpbnRvIHNtYWxsIHN0ZXBzIGZyb20gdGhlIHZlcnkKK2JlZ2lubmluZy4gSXQgaXMgYWx3YXlzIGVhc2llciB0byBzcXVhc2ggYSBmZXcgY29tbWl0cyB0b2dldGhlciB0aGFuCit0byBzcGxpdCBvbmUgYmlnIGNvbW1pdCBpbnRvIHNldmVyYWwuICBEb24ndCBiZSBhZnJhaWQgb2YgbWFraW5nIHRvbworc21hbGwgb3IgaW1wZXJmZWN0IHN0ZXBzIGFsb25nIHRoZSB3YXkuIFlvdSBjYW4gYWx3YXlzIGdvIGJhY2sgbGF0ZXIKK2FuZCBlZGl0IHRoZSBjb21taXRzIHdpdGggYGdpdCByZWJhc2UgLS1pbnRlcmFjdGl2ZWAgYmVmb3JlIHlvdQorcHVibGlzaCB0aGVtLiAgWW91IGNhbiB1c2UgYGdpdCBzdGFzaCBzYXZlIC0ta2VlcC1pbmRleGAgdG8gcnVuIHRoZQordGVzdCBzdWl0ZSBpbmRlcGVuZGVudCBvZiBvdGhlciB1bmNvbW1pdHRlZCBjaGFuZ2VzOyBzZWUgdGhlIEVYQU1QTEVTCitzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdLgorCisKK01BTkFHSU5HIEJSQU5DSEVTCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgdHdvIG1haW4gdG9vbHMgdGhhdCBjYW4gYmUgdXNlZCB0byBpbmNsdWRlIGNoYW5nZXMgZnJvbSBvbmUKK2JyYW5jaCBvbiBhbm90aGVyOiBsaW5rZ2l0OmdpdC1tZXJnZVsxXSBhbmQKK2xpbmtnaXQ6Z2l0LWNoZXJyeS1waWNrWzFdLgorCitNZXJnZXMgaGF2ZSBtYW55IGFkdmFudGFnZXMsIHNvIHdlIHRyeSB0byBzb2x2ZSBhcyBtYW55IHByb2JsZW1zIGFzCitwb3NzaWJsZSB3aXRoIG1lcmdlcyBhbG9uZS4gIENoZXJyeS1waWNraW5nIGlzIHN0aWxsIG9jY2FzaW9uYWxseQordXNlZnVsOyBzZWUgIk1lcmdpbmcgdXB3YXJkcyIgYmVsb3cgZm9yIGFuIGV4YW1wbGUuCisKK01vc3QgaW1wb3J0YW50bHksIG1lcmdpbmcgd29ya3MgYXQgdGhlIGJyYW5jaCBsZXZlbCwgd2hpbGUKK2NoZXJyeS1waWNraW5nIHdvcmtzIGF0IHRoZSBjb21taXQgbGV2ZWwuICBUaGlzIG1lYW5zIHRoYXQgYSBtZXJnZSBjYW4KK2NhcnJ5IG92ZXIgdGhlIGNoYW5nZXMgZnJvbSAxLCAxMCwgb3IgMTAwMCBjb21taXRzIHdpdGggZXF1YWwgZWFzZSwKK3doaWNoIGluIHR1cm4gbWVhbnMgdGhlIHdvcmtmbG93IHNjYWxlcyBtdWNoIGJldHRlciB0byBhIGxhcmdlIG51bWJlcgorb2YgY29udHJpYnV0b3JzIChhbmQgY29udHJpYnV0aW9ucykuICBNZXJnZXMgYXJlIGFsc28gZWFzaWVyIHRvCit1bmRlcnN0YW5kIGJlY2F1c2UgYSBtZXJnZSBjb21taXQgaXMgYSAicHJvbWlzZSIgdGhhdCBhbGwgY2hhbmdlcyBmcm9tCithbGwgaXRzIHBhcmVudHMgYXJlIG5vdyBpbmNsdWRlZC4KKworVGhlcmUgaXMgYSB0cmFkZW9mZiBvZiBjb3Vyc2U6IG1lcmdlcyByZXF1aXJlIGEgbW9yZSBjYXJlZnVsIGJyYW5jaAorbWFuYWdlbWVudC4gIFRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMgZGlzY3VzcyB0aGUgaW1wb3J0YW50IHBvaW50cy4KKworCitHcmFkdWF0aW9uCit+fn5+fn5+fn5+CisKK0FzIGEgZ2l2ZW4gZmVhdHVyZSBnb2VzIGZyb20gZXhwZXJpbWVudGFsIHRvIHN0YWJsZSwgaXQgYWxzbworImdyYWR1YXRlcyIgYmV0d2VlbiB0aGUgY29ycmVzcG9uZGluZyBicmFuY2hlcyBvZiB0aGUgc29mdHdhcmUuCitgZ2l0LmdpdGAgdXNlcyB0aGUgZm9sbG93aW5nICdpbnRlZ3JhdGlvbiBicmFuY2hlcyc6CisKKyogJ21haW50JyB0cmFja3MgdGhlIGNvbW1pdHMgdGhhdCBzaG91bGQgZ28gaW50byB0aGUgbmV4dCAibWFpbnRlbmFuY2UKKyAgcmVsZWFzZSIsIGkuZS4sIHVwZGF0ZSBvZiB0aGUgbGFzdCByZWxlYXNlZCBzdGFibGUgdmVyc2lvbjsKKworKiAnbWFzdGVyJyB0cmFja3MgdGhlIGNvbW1pdHMgdGhhdCBzaG91bGQgZ28gaW50byB0aGUgbmV4dCByZWxlYXNlOworCisqICduZXh0JyBpcyBpbnRlbmRlZCBhcyBhIHRlc3RpbmcgYnJhbmNoIGZvciB0b3BpY3MgYmVpbmcgdGVzdGVkIGZvcgorICBzdGFiaWxpdHkgZm9yIG1hc3Rlci4KKworVGhlcmUgaXMgYSBmb3VydGggb2ZmaWNpYWwgYnJhbmNoIHRoYXQgaXMgdXNlZCBzbGlnaHRseSBkaWZmZXJlbnRseToKKworKiAncHUnIChwcm9wb3NlZCB1cGRhdGVzKSBpcyBhbiBpbnRlZ3JhdGlvbiBicmFuY2ggZm9yIHRoaW5ncyB0aGF0IGFyZQorICBub3QgcXVpdGUgcmVhZHkgZm9yIGluY2x1c2lvbiB5ZXQgKHNlZSAiSW50ZWdyYXRpb24gQnJhbmNoZXMiCisgIGJlbG93KS4KKworRWFjaCBvZiB0aGUgZm91ciBicmFuY2hlcyBpcyB1c3VhbGx5IGEgZGlyZWN0IGRlc2NlbmRhbnQgb2YgdGhlIG9uZQorYWJvdmUgaXQuCisKK0NvbmNlcHR1YWxseSwgdGhlIGZlYXR1cmUgZW50ZXJzIGF0IGFuIHVuc3RhYmxlIGJyYW5jaCAodXN1YWxseSAnbmV4dCcKK29yICdwdScpLCBhbmQgImdyYWR1YXRlcyIgdG8gJ21hc3RlcicgZm9yIHRoZSBuZXh0IHJlbGVhc2Ugb25jZSBpdCBpcworY29uc2lkZXJlZCBzdGFibGUgZW5vdWdoLgorCisKK01lcmdpbmcgdXB3YXJkcworfn5+fn5+fn5+fn5+fn5+CisKK1RoZSAiZG93bndhcmRzIGdyYWR1YXRpb24iIGRpc2N1c3NlZCBhYm92ZSBjYW5ub3QgYmUgZG9uZSBieSBhY3R1YWxseQorbWVyZ2luZyBkb3dud2FyZHMsIGhvd2V2ZXIsIHNpbmNlIHRoYXQgd291bGQgbWVyZ2UgJ2FsbCcgY2hhbmdlcyBvbgordGhlIHVuc3RhYmxlIGJyYW5jaCBpbnRvIHRoZSBzdGFibGUgb25lLiAgSGVuY2UgdGhlIGZvbGxvd2luZzoKKworLk1lcmdlIHVwd2FyZHMKK1tjYXB0aW9uPSJSdWxlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQWx3YXlzIGNvbW1pdCB5b3VyIGZpeGVzIHRvIHRoZSBvbGRlc3Qgc3VwcG9ydGVkIGJyYW5jaCB0aGF0IHJlcXVpcmUKK3RoZW0uICBUaGVuIChwZXJpb2RpY2FsbHkpIG1lcmdlIHRoZSBpbnRlZ3JhdGlvbiBicmFuY2hlcyB1cHdhcmRzIGludG8gZWFjaAorb3RoZXIuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZ2l2ZXMgYSB2ZXJ5IGNvbnRyb2xsZWQgZmxvdyBvZiBmaXhlcy4gIElmIHlvdSBub3RpY2UgdGhhdCB5b3UKK2hhdmUgYXBwbGllZCBhIGZpeCB0byBlLmcuICdtYXN0ZXInIHRoYXQgaXMgYWxzbyByZXF1aXJlZCBpbiAnbWFpbnQnLAoreW91IHdpbGwgbmVlZCB0byBjaGVycnktcGljayBpdCAodXNpbmcgbGlua2dpdDpnaXQtY2hlcnJ5LXBpY2tbMV0pCitkb3dud2FyZHMuICBUaGlzIHdpbGwgaGFwcGVuIGEgZmV3IHRpbWVzIGFuZCBpcyBub3RoaW5nIHRvIHdvcnJ5IGFib3V0Cit1bmxlc3MgeW91IGRvIGl0IHZlcnkgZnJlcXVlbnRseS4KKworCitUb3BpYyBicmFuY2hlcworfn5+fn5+fn5+fn5+fn4KKworQW55IG5vbnRyaXZpYWwgZmVhdHVyZSB3aWxsIHJlcXVpcmUgc2V2ZXJhbCBwYXRjaGVzIHRvIGltcGxlbWVudCwgYW5kCittYXkgZ2V0IGV4dHJhIGJ1Z2ZpeGVzIG9yIGltcHJvdmVtZW50cyBkdXJpbmcgaXRzIGxpZmV0aW1lLgorCitDb21taXR0aW5nIGV2ZXJ5dGhpbmcgZGlyZWN0bHkgb24gdGhlIGludGVncmF0aW9uIGJyYW5jaGVzIGxlYWRzIHRvIG1hbnkKK3Byb2JsZW1zOiBCYWQgY29tbWl0cyBjYW5ub3QgYmUgdW5kb25lLCBzbyB0aGV5IG11c3QgYmUgcmV2ZXJ0ZWQgb25lCitieSBvbmUsIHdoaWNoIGNyZWF0ZXMgY29uZnVzaW5nIGhpc3RvcmllcyBhbmQgZnVydGhlciBlcnJvciBwb3RlbnRpYWwKK3doZW4geW91IGZvcmdldCB0byByZXZlcnQgcGFydCBvZiBhIGdyb3VwIG9mIGNoYW5nZXMuICBXb3JraW5nIGluCitwYXJhbGxlbCBtaXhlcyB1cCB0aGUgY2hhbmdlcywgY3JlYXRpbmcgZnVydGhlciBjb25mdXNpb24uCisKK1VzZSBvZiAidG9waWMgYnJhbmNoZXMiIHNvbHZlcyB0aGVzZSBwcm9ibGVtcy4gIFRoZSBuYW1lIGlzIHByZXR0eQorc2VsZiBleHBsYW5hdG9yeSwgd2l0aCBhIGNhdmVhdCB0aGF0IGNvbWVzIGZyb20gdGhlICJtZXJnZSB1cHdhcmRzIgorcnVsZSBhYm92ZToKKworLlRvcGljIGJyYW5jaGVzCitbY2FwdGlvbj0iUnVsZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK01ha2UgYSBzaWRlIGJyYW5jaCBmb3IgZXZlcnkgdG9waWMgKGZlYXR1cmUsIGJ1Z2ZpeCwgLi4uKS4gRm9yayBpdCBvZmYKK2F0IHRoZSBvbGRlc3QgaW50ZWdyYXRpb24gYnJhbmNoIHRoYXQgeW91IHdpbGwgZXZlbnR1YWxseSB3YW50IHRvIG1lcmdlIGl0CitpbnRvLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNYW55IHRoaW5ncyBjYW4gdGhlbiBiZSBkb25lIHZlcnkgbmF0dXJhbGx5OgorCisqIFRvIGdldCB0aGUgZmVhdHVyZS9idWdmaXggaW50byBhbiBpbnRlZ3JhdGlvbiBicmFuY2gsIHNpbXBseSBtZXJnZQorICBpdC4gIElmIHRoZSB0b3BpYyBoYXMgZXZvbHZlZCBmdXJ0aGVyIGluIHRoZSBtZWFudGltZSwgbWVyZ2UgYWdhaW4uCisgIChOb3RlIHRoYXQgeW91IGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIG1lcmdlIGl0IHRvIHRoZSBvbGRlc3QKKyAgaW50ZWdyYXRpb24gYnJhbmNoIGZpcnN0LiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZmlyc3QgbWVyZ2UgYSBidWdmaXgKKyAgdG8gJ25leHQnLCBnaXZlIGl0IHNvbWUgdGVzdGluZyB0aW1lLCBhbmQgbWVyZ2UgdG8gJ21haW50JyB3aGVuIHlvdQorICBrbm93IGl0IGlzIHN0YWJsZS4pCisKKyogSWYgeW91IGZpbmQgeW91IG5lZWQgbmV3IGZlYXR1cmVzIGZyb20gdGhlIGJyYW5jaCAnb3RoZXInIHRvIGNvbnRpbnVlCisgIHdvcmtpbmcgb24geW91ciB0b3BpYywgbWVyZ2UgJ290aGVyJyB0byAndG9waWMnLiAgKEhvd2V2ZXIsIGRvIG5vdAorICBkbyB0aGlzICJqdXN0IGhhYml0dWFsbHkiLCBzZWUgYmVsb3cuKQorCisqIElmIHlvdSBmaW5kIHlvdSBmb3JrZWQgb2ZmIHRoZSB3cm9uZyBicmFuY2ggYW5kIHdhbnQgdG8gbW92ZSBpdAorICAiYmFjayBpbiB0aW1lIiwgdXNlIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKworTm90ZSB0aGF0IHRoZSBsYXN0IHBvaW50IGNsYXNoZXMgd2l0aCB0aGUgb3RoZXIgdHdvOiBhIHRvcGljIHRoYXQgaGFzCitiZWVuIG1lcmdlZCBlbHNld2hlcmUgc2hvdWxkIG5vdCBiZSByZWJhc2VkLiAgU2VlIHRoZSBzZWN0aW9uIG9uCitSRUNPVkVSSU5HIEZST00gVVBTVFJFQU0gUkVCQVNFIGluIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKworV2Ugc2hvdWxkIHBvaW50IG91dCB0aGF0ICJoYWJpdHVhbGx5IiAocmVndWxhcmx5IGZvciBubyByZWFsIHJlYXNvbikKK21lcmdpbmcgYW4gaW50ZWdyYXRpb24gYnJhbmNoIGludG8geW91ciB0b3BpY3MgLS0gYW5kIGJ5IGV4dGVuc2lvbiwKK21lcmdpbmcgYW55dGhpbmcgdXBzdHJlYW0gaW50byBhbnl0aGluZyBkb3duc3RyZWFtIG9uIGEgcmVndWxhciBiYXNpcworLS0gaXMgZnJvd25lZCB1cG9uOgorCisuTWVyZ2UgdG8gZG93bnN0cmVhbSBvbmx5IGF0IHdlbGwtZGVmaW5lZCBwb2ludHMKK1tjYXB0aW9uPSJSdWxlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRG8gbm90IG1lcmdlIHRvIGRvd25zdHJlYW0gZXhjZXB0IHdpdGggYSBnb29kIHJlYXNvbjogdXBzdHJlYW0gQVBJCitjaGFuZ2VzIGFmZmVjdCB5b3VyIGJyYW5jaDsgeW91ciBicmFuY2ggbm8gbG9uZ2VyIG1lcmdlcyB0byB1cHN0cmVhbQorY2xlYW5seTsgZXRjLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPdGhlcndpc2UsIHRoZSB0b3BpYyB0aGF0IHdhcyBtZXJnZWQgdG8gc3VkZGVubHkgY29udGFpbnMgbW9yZSB0aGFuIGEKK3NpbmdsZSAod2VsbC1zZXBhcmF0ZWQpIGNoYW5nZS4gIFRoZSBtYW55IHJlc3VsdGluZyBzbWFsbCBtZXJnZXMgd2lsbAorZ3JlYXRseSBjbHV0dGVyIHVwIGhpc3RvcnkuICBBbnlvbmUgd2hvIGxhdGVyIGludmVzdGlnYXRlcyB0aGUgaGlzdG9yeQorb2YgYSBmaWxlIHdpbGwgaGF2ZSB0byBmaW5kIG91dCB3aGV0aGVyIHRoYXQgbWVyZ2UgYWZmZWN0ZWQgdGhlIHRvcGljCitpbiBkZXZlbG9wbWVudC4gIEFuIHVwc3RyZWFtIG1pZ2h0IGV2ZW4gaW5hZHZlcnRlbnRseSBiZSBtZXJnZWQgaW50byBhCisibW9yZSBzdGFibGUiIGJyYW5jaC4gIEFuZCBzbyBvbi4KKworCitUaHJvdy1hd2F5IGludGVncmF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmIHlvdSBmb2xsb3dlZCB0aGUgbGFzdCBwYXJhZ3JhcGgsIHlvdSB3aWxsIG5vdyBoYXZlIG1hbnkgc21hbGwgdG9waWMKK2JyYW5jaGVzLCBhbmQgb2NjYXNpb25hbGx5IHdvbmRlciBob3cgdGhleSBpbnRlcmFjdC4gIFBlcmhhcHMgdGhlCityZXN1bHQgb2YgbWVyZ2luZyB0aGVtIGRvZXMgbm90IGV2ZW4gd29yaz8gIEJ1dCBvbiB0aGUgb3RoZXIgaGFuZCwgd2UKK3dhbnQgdG8gYXZvaWQgbWVyZ2luZyB0aGVtIGFueXdoZXJlICJzdGFibGUiIGJlY2F1c2Ugc3VjaCBtZXJnZXMKK2Nhbm5vdCBlYXNpbHkgYmUgdW5kb25lLgorCitUaGUgc29sdXRpb24sIG9mIGNvdXJzZSwgaXMgdG8gbWFrZSBhIG1lcmdlIHRoYXQgd2UgY2FuIHVuZG86IG1lcmdlCitpbnRvIGEgdGhyb3ctYXdheSBicmFuY2guCisKKy5UaHJvdy1hd2F5IGludGVncmF0aW9uIGJyYW5jaGVzCitbY2FwdGlvbj0iUnVsZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RvIHRlc3QgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgdG9waWNzLCBtZXJnZSB0aGVtIGludG8gYQordGhyb3ctYXdheSBicmFuY2guICBZb3UgbXVzdCBuZXZlciBiYXNlIGFueSB3b3JrIG9uIHN1Y2ggYSBicmFuY2ghCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBtYWtlIGl0ICh2ZXJ5KSBjbGVhciB0aGF0IHRoaXMgYnJhbmNoIGlzIGdvaW5nIHRvIGJlIGRlbGV0ZWQKK3JpZ2h0IGFmdGVyIHRoZSB0ZXN0aW5nLCB5b3UgY2FuIGV2ZW4gcHVibGlzaCB0aGlzIGJyYW5jaCwgZm9yIGV4YW1wbGUKK3RvIGdpdmUgdGhlIHRlc3RlcnMgYSBjaGFuY2UgdG8gd29yayB3aXRoIGl0LCBvciBvdGhlciBkZXZlbG9wZXJzIGEKK2NoYW5jZSB0byBzZWUgaWYgdGhlaXIgaW4tcHJvZ3Jlc3Mgd29yayB3aWxsIGJlIGNvbXBhdGlibGUuICBgZ2l0LmdpdGAKK2hhcyBzdWNoIGFuIG9mZmljaWFsIHRocm93LWF3YXkgaW50ZWdyYXRpb24gYnJhbmNoIGNhbGxlZCAncHUnLgorCisKK0JyYW5jaCBtYW5hZ2VtZW50IGZvciBhIHJlbGVhc2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXNzdW1pbmcgeW91IGFyZSB1c2luZyB0aGUgbWVyZ2UgYXBwcm9hY2ggZGlzY3Vzc2VkIGFib3ZlLCB3aGVuIHlvdQorYXJlIHJlbGVhc2luZyB5b3VyIHByb2plY3QgeW91IHdpbGwgbmVlZCB0byBkbyBzb21lIGFkZGl0aW9uYWwgYnJhbmNoCittYW5hZ2VtZW50IHdvcmsuCisKK0EgZmVhdHVyZSByZWxlYXNlIGlzIGNyZWF0ZWQgZnJvbSB0aGUgJ21hc3RlcicgYnJhbmNoLCBzaW5jZSAnbWFzdGVyJwordHJhY2tzIHRoZSBjb21taXRzIHRoYXQgc2hvdWxkIGdvIGludG8gdGhlIG5leHQgZmVhdHVyZSByZWxlYXNlLgorCitUaGUgJ21hc3RlcicgYnJhbmNoIGlzIHN1cHBvc2VkIHRvIGJlIGEgc3VwZXJzZXQgb2YgJ21haW50Jy4gSWYgdGhpcworY29uZGl0aW9uIGRvZXMgbm90IGhvbGQsIHRoZW4gJ21haW50JyBjb250YWlucyBzb21lIGNvbW1pdHMgdGhhdAorYXJlIG5vdCBpbmNsdWRlZCBvbiAnbWFzdGVyJy4gVGhlIGZpeGVzIHJlcHJlc2VudGVkIGJ5IHRob3NlIGNvbW1pdHMKK3dpbGwgdGhlcmVmb3JlIG5vdCBiZSBpbmNsdWRlZCBpbiB5b3VyIGZlYXR1cmUgcmVsZWFzZS4KKworVG8gdmVyaWZ5IHRoYXQgJ21hc3RlcicgaXMgaW5kZWVkIGEgc3VwZXJzZXQgb2YgJ21haW50JywgdXNlIGdpdCBsb2c6CisKKy5WZXJpZnkgJ21hc3RlcicgaXMgYSBzdXBlcnNldCBvZiAnbWFpbnQnCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCBsb2cgbWFzdGVyLi5tYWludGAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIHNob3VsZCBub3QgbGlzdCBhbnkgY29tbWl0cy4gIE90aGVyd2lzZSwgY2hlY2sgb3V0CisnbWFzdGVyJyBhbmQgbWVyZ2UgJ21haW50JyBpbnRvIGl0LgorCitOb3cgeW91IGNhbiBwcm9jZWVkIHdpdGggdGhlIGNyZWF0aW9uIG9mIHRoZSBmZWF0dXJlIHJlbGVhc2UuIEFwcGx5IGEKK3RhZyB0byB0aGUgdGlwIG9mICdtYXN0ZXInIGluZGljYXRpbmcgdGhlIHJlbGVhc2UgdmVyc2lvbjoKKworLlJlbGVhc2UgdGFnZ2luZworW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BnaXQgdGFnIC1zIC1tICJHSVQgWC5ZLloiIHZYLlkuWiBtYXN0ZXJgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBuZWVkIHRvIHB1c2ggdGhlIG5ldyB0YWcgdG8gYSBwdWJsaWMgZ2l0IHNlcnZlciAoc2VlCisiRElTVFJJQlVURUQgV09SS0ZMT1dTIiBiZWxvdykuIFRoaXMgbWFrZXMgdGhlIHRhZyBhdmFpbGFibGUgdG8KK290aGVycyB0cmFja2luZyB5b3VyIHByb2plY3QuIFRoZSBwdXNoIGNvdWxkIGFsc28gdHJpZ2dlciBhCitwb3N0LXVwZGF0ZSBob29rIHRvIHBlcmZvcm0gcmVsZWFzZS1yZWxhdGVkIGl0ZW1zIHN1Y2ggYXMgYnVpbGRpbmcKK3JlbGVhc2UgdGFyYmFsbHMgYW5kIHByZWZvcm1hdHRlZCBkb2N1bWVudGF0aW9uIHBhZ2VzLgorCitTaW1pbGFybHksIGZvciBhIG1haW50ZW5hbmNlIHJlbGVhc2UsICdtYWludCcgaXMgdHJhY2tpbmcgdGhlIGNvbW1pdHMKK3RvIGJlIHJlbGVhc2VkLiBUaGVyZWZvcmUsIGluIHRoZSBzdGVwcyBhYm92ZSBzaW1wbHkgdGFnIGFuZCBwdXNoCisnbWFpbnQnIHJhdGhlciB0aGFuICdtYXN0ZXInLgorCisKK01haW50ZW5hbmNlIGJyYW5jaCBtYW5hZ2VtZW50IGFmdGVyIGEgZmVhdHVyZSByZWxlYXNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBZnRlciBhIGZlYXR1cmUgcmVsZWFzZSwgeW91IG5lZWQgdG8gbWFuYWdlIHlvdXIgbWFpbnRlbmFuY2UgYnJhbmNoZXMuCisKK0ZpcnN0LCBpZiB5b3Ugd2lzaCB0byBjb250aW51ZSB0byByZWxlYXNlIG1haW50ZW5hbmNlIGZpeGVzIGZvciB0aGUKK2ZlYXR1cmUgcmVsZWFzZSBtYWRlIGJlZm9yZSB0aGUgcmVjZW50IG9uZSwgdGhlbiB5b3UgbXVzdCBjcmVhdGUKK2Fub3RoZXIgYnJhbmNoIHRvIHRyYWNrIGNvbW1pdHMgZm9yIHRoYXQgcHJldmlvdXMgcmVsZWFzZS4KKworVG8gZG8gdGhpcywgdGhlIGN1cnJlbnQgbWFpbnRlbmFuY2UgYnJhbmNoIGlzIGNvcGllZCB0byBhbm90aGVyIGJyYW5jaAorbmFtZWQgd2l0aCB0aGUgcHJldmlvdXMgcmVsZWFzZSB2ZXJzaW9uIG51bWJlciAoZS5nLiBtYWludC1YLlkuKFotMSkKK3doZXJlIFguWS5aIGlzIHRoZSBjdXJyZW50IHJlbGVhc2UpLgorCisuQ29weSBtYWludAorW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BnaXQgYnJhbmNoIG1haW50LVguWS4oWi0xKSBtYWludGAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlICdtYWludCcgYnJhbmNoIHNob3VsZCBub3cgYmUgZmFzdC1mb3J3YXJkZWQgdG8gdGhlIG5ld2x5IHJlbGVhc2VkCitjb2RlIHNvIHRoYXQgbWFpbnRlbmFuY2UgZml4ZXMgY2FuIGJlIHRyYWNrZWQgZm9yIHRoZSBjdXJyZW50IHJlbGVhc2U6CisKKy5VcGRhdGUgbWFpbnQgdG8gbmV3IHJlbGVhc2UKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIGBnaXQgY2hlY2tvdXQgbWFpbnRgCisqIGBnaXQgbWVyZ2UgLS1mZi1vbmx5IG1hc3RlcmAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgdGhlIG1lcmdlIGZhaWxzIGJlY2F1c2UgaXQgaXMgbm90IGEgZmFzdC1mb3J3YXJkLCB0aGVuIGl0IGlzCitwb3NzaWJsZSBzb21lIGZpeGVzIG9uICdtYWludCcgd2VyZSBtaXNzZWQgaW4gdGhlIGZlYXR1cmUgcmVsZWFzZS4KK1RoaXMgd2lsbCBub3QgaGFwcGVuIGlmIHRoZSBjb250ZW50IG9mIHRoZSBicmFuY2hlcyB3YXMgdmVyaWZpZWQgYXMKK2Rlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KKworCitCcmFuY2ggbWFuYWdlbWVudCBmb3IgbmV4dCBhbmQgcHUgYWZ0ZXIgYSBmZWF0dXJlIHJlbGVhc2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBZnRlciBhIGZlYXR1cmUgcmVsZWFzZSwgdGhlIGludGVncmF0aW9uIGJyYW5jaCAnbmV4dCcgbWF5IG9wdGlvbmFsbHkgYmUKK3Jld291bmQgYW5kIHJlYnVpbHQgZnJvbSB0aGUgdGlwIG9mICdtYXN0ZXInIHVzaW5nIHRoZSBzdXJ2aXZpbmcKK3RvcGljcyBvbiAnbmV4dCc6CisKKy5SZXdpbmQgYW5kIHJlYnVpbGQgbmV4dAorW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogYGdpdCBjaGVja291dCBuZXh0YAorKiBgZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJgCisqIGBnaXQgbWVyZ2UgYWkvdG9waWNfaW5fbmV4dDFgCisqIGBnaXQgbWVyZ2UgYWkvdG9waWNfaW5fbmV4dDJgCisqIC4uLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgYWR2YW50YWdlIG9mIGRvaW5nIHRoaXMgaXMgdGhhdCB0aGUgaGlzdG9yeSBvZiAnbmV4dCcgd2lsbCBiZQorY2xlYW4uIEZvciBleGFtcGxlLCBzb21lIHRvcGljcyBtZXJnZWQgaW50byAnbmV4dCcgbWF5IGhhdmUgaW5pdGlhbGx5Citsb29rZWQgcHJvbWlzaW5nLCBidXQgd2VyZSBsYXRlciBmb3VuZCB0byBiZSB1bmRlc2lyYWJsZSBvciBwcmVtYXR1cmUuCitJbiBzdWNoIGEgY2FzZSwgdGhlIHRvcGljIGlzIHJldmVydGVkIG91dCBvZiAnbmV4dCcgYnV0IHRoZSBmYWN0CityZW1haW5zIGluIHRoZSBoaXN0b3J5IHRoYXQgaXQgd2FzIG9uY2UgbWVyZ2VkIGFuZCByZXZlcnRlZC4gQnkKK3JlY3JlYXRpbmcgJ25leHQnLCB5b3UgZ2l2ZSBhbm90aGVyIGluY2FybmF0aW9uIG9mIHN1Y2ggdG9waWNzIGEgY2xlYW4KK3NsYXRlIHRvIHJldHJ5LCBhbmQgYSBmZWF0dXJlIHJlbGVhc2UgaXMgYSBnb29kIHBvaW50IGluIGhpc3RvcnkgdG8gZG8KK3NvLgorCitJZiB5b3UgZG8gdGhpcywgdGhlbiB5b3Ugc2hvdWxkIG1ha2UgYSBwdWJsaWMgYW5ub3VuY2VtZW50IGluZGljYXRpbmcKK3RoYXQgJ25leHQnIHdhcyByZXdvdW5kIGFuZCByZWJ1aWx0LgorCitUaGUgc2FtZSByZXdpbmQgYW5kIHJlYnVpbGQgcHJvY2VzcyBtYXkgYmUgZm9sbG93ZWQgZm9yICdwdScuIEEgcHVibGljCithbm5vdW5jZW1lbnQgaXMgbm90IG5lY2Vzc2FyeSBzaW5jZSAncHUnIGlzIGEgdGhyb3ctYXdheSBicmFuY2gsIGFzCitkZXNjcmliZWQgYWJvdmUuCisKKworRElTVFJJQlVURUQgV09SS0ZMT1dTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgdGhlIGxhc3Qgc2VjdGlvbiwgeW91IHNob3VsZCBrbm93IGhvdyB0byBtYW5hZ2UgdG9waWNzLiAgSW4KK2dlbmVyYWwsIHlvdSB3aWxsIG5vdCBiZSB0aGUgb25seSBwZXJzb24gd29ya2luZyBvbiB0aGUgcHJvamVjdCwgc28KK3lvdSB3aWxsIGhhdmUgdG8gc2hhcmUgeW91ciB3b3JrLgorCitSb3VnaGx5IHNwZWFraW5nLCB0aGVyZSBhcmUgdHdvIGltcG9ydGFudCB3b3JrZmxvd3M6IG1lcmdlIGFuZCBwYXRjaC4KK1RoZSBpbXBvcnRhbnQgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBtZXJnZSB3b3JrZmxvdyBjYW4gcHJvcGFnYXRlIGZ1bGwKK2hpc3RvcnksIGluY2x1ZGluZyBtZXJnZXMsIHdoaWxlIHBhdGNoZXMgY2Fubm90LiAgQm90aCB3b3JrZmxvd3MgY2FuCitiZSB1c2VkIGluIHBhcmFsbGVsOiBpbiBgZ2l0LmdpdGAsIG9ubHkgc3Vic3lzdGVtIG1haW50YWluZXJzIHVzZQordGhlIG1lcmdlIHdvcmtmbG93LCB3aGlsZSBldmVyeW9uZSBlbHNlIHNlbmRzIHBhdGNoZXMuCisKK05vdGUgdGhhdCB0aGUgbWFpbnRhaW5lcihzKSBtYXkgaW1wb3NlIHJlc3RyaWN0aW9ucywgc3VjaCBhcworIlNpZ25lZC1vZmYtYnkiIHJlcXVpcmVtZW50cywgdGhhdCBhbGwgY29tbWl0cy9wYXRjaGVzIHN1Ym1pdHRlZCBmb3IKK2luY2x1c2lvbiBtdXN0IGFkaGVyZSB0by4gIENvbnN1bHQgeW91ciBwcm9qZWN0J3MgZG9jdW1lbnRhdGlvbiBmb3IKK21vcmUgaW5mb3JtYXRpb24uCisKKworTWVyZ2Ugd29ya2Zsb3cKK35+fn5+fn5+fn5+fn5+CisKK1RoZSBtZXJnZSB3b3JrZmxvdyB3b3JrcyBieSBjb3B5aW5nIGJyYW5jaGVzIGJldHdlZW4gdXBzdHJlYW0gYW5kCitkb3duc3RyZWFtLiAgVXBzdHJlYW0gY2FuIG1lcmdlIGNvbnRyaWJ1dGlvbnMgaW50byB0aGUgb2ZmaWNpYWwKK2hpc3Rvcnk7IGRvd25zdHJlYW0gYmFzZSB0aGVpciB3b3JrIG9uIHRoZSBvZmZpY2lhbCBoaXN0b3J5LgorCitUaGVyZSBhcmUgdGhyZWUgbWFpbiB0b29scyB0aGF0IGNhbiBiZSB1c2VkIGZvciB0aGlzOgorCisqIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gY29waWVzIHlvdXIgYnJhbmNoZXMgdG8gYSByZW1vdGUgcmVwb3NpdG9yeSwKKyAgdXN1YWxseSB0byBvbmUgdGhhdCBjYW4gYmUgcmVhZCBieSBhbGwgaW52b2x2ZWQgcGFydGllczsKKworKiBsaW5rZ2l0OmdpdC1mZXRjaFsxXSB0aGF0IGNvcGllcyByZW1vdGUgYnJhbmNoZXMgdG8geW91ciByZXBvc2l0b3J5OworICBhbmQKKworKiBsaW5rZ2l0OmdpdC1wdWxsWzFdIHRoYXQgZG9lcyBmZXRjaCBhbmQgbWVyZ2UgaW4gb25lIGdvLgorCitOb3RlIHRoZSBsYXN0IHBvaW50LiAgRG8gJ25vdCcgdXNlICdnaXQgcHVsbCcgdW5sZXNzIHlvdSBhY3R1YWxseSB3YW50Cit0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaC4KKworR2V0dGluZyBjaGFuZ2VzIG91dCBpcyBlYXN5OgorCisuUHVzaC9wdWxsOiBQdWJsaXNoaW5nIGJyYW5jaGVzL3RvcGljcworW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BnaXQgcHVzaCA8cmVtb3RlPiA8YnJhbmNoPmAgYW5kIHRlbGwgZXZlcnlvbmUgd2hlcmUgdGhleSBjYW4gZmV0Y2gKK2Zyb20uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSB3aWxsIHN0aWxsIGhhdmUgdG8gdGVsbCBwZW9wbGUgYnkgb3RoZXIgbWVhbnMsIHN1Y2ggYXMgbWFpbC4gIChHaXQKK3Byb3ZpZGVzIHRoZSBsaW5rZ2l0OmdpdC1yZXF1ZXN0LXB1bGxbMV0gdG8gc2VuZCBwcmVmb3JtYXR0ZWQgcHVsbAorcmVxdWVzdHMgdG8gdXBzdHJlYW0gbWFpbnRhaW5lcnMgdG8gc2ltcGxpZnkgdGhpcyB0YXNrLikKKworSWYgeW91IGp1c3Qgd2FudCB0byBnZXQgdGhlIG5ld2VzdCBjb3BpZXMgb2YgdGhlIGludGVncmF0aW9uIGJyYW5jaGVzLAorc3RheWluZyB1cCB0byBkYXRlIGlzIGVhc3kgdG9vOgorCisuUHVzaC9wdWxsOiBTdGF5aW5nIHVwIHRvIGRhdGUKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVc2UgYGdpdCBmZXRjaCA8cmVtb3RlPmAgb3IgYGdpdCByZW1vdGUgdXBkYXRlYCB0byBzdGF5IHVwIHRvIGRhdGUuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZW4gc2ltcGx5IGZvcmsgeW91ciB0b3BpYyBicmFuY2hlcyBmcm9tIHRoZSBzdGFibGUgcmVtb3RlcyBhcworZXhwbGFpbmVkIGVhcmxpZXIuCisKK0lmIHlvdSBhcmUgYSBtYWludGFpbmVyIGFuZCB3b3VsZCBsaWtlIHRvIG1lcmdlIG90aGVyIHBlb3BsZSdzIHRvcGljCiticmFuY2hlcyB0byB0aGUgaW50ZWdyYXRpb24gYnJhbmNoZXMsIHRoZXkgd2lsbCB0eXBpY2FsbHkgc2VuZCBhCityZXF1ZXN0IHRvIGRvIHNvIGJ5IG1haWwuICBTdWNoIGEgcmVxdWVzdCBsb29rcyBsaWtlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BsZWFzZSBwdWxsIGZyb20KKyAgICA8dXJsPiA8YnJhbmNoPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGF0IGNhc2UsICdnaXQgcHVsbCcgY2FuIGRvIHRoZSBmZXRjaCBhbmQgbWVyZ2UgaW4gb25lIGdvLCBhcworZm9sbG93cy4KKworLlB1c2gvcHVsbDogTWVyZ2luZyByZW1vdGUgdG9waWNzCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCBwdWxsIDx1cmw+IDxicmFuY2g+YAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPY2Nhc2lvbmFsbHksIHRoZSBtYWludGFpbmVyIG1heSBnZXQgbWVyZ2UgY29uZmxpY3RzIHdoZW4gaGUgdHJpZXMgdG8KK3B1bGwgY2hhbmdlcyBmcm9tIGRvd25zdHJlYW0uICBJbiB0aGlzIGNhc2UsIGhlIGNhbiBhc2sgZG93bnN0cmVhbSB0bworZG8gdGhlIG1lcmdlIGFuZCByZXNvbHZlIHRoZSBjb25mbGljdHMgdGhlbXNlbHZlcyAocGVyaGFwcyB0aGV5IHdpbGwKK2tub3cgYmV0dGVyIGhvdyB0byByZXNvbHZlIHRoZW0pLiAgSXQgaXMgb25lIG9mIHRoZSByYXJlIGNhc2VzIHdoZXJlCitkb3duc3RyZWFtICdzaG91bGQnIG1lcmdlIGZyb20gdXBzdHJlYW0uCisKKworUGF0Y2ggd29ya2Zsb3cKK35+fn5+fn5+fn5+fn5+CisKK0lmIHlvdSBhcmUgYSBjb250cmlidXRvciB0aGF0IHNlbmRzIGNoYW5nZXMgdXBzdHJlYW0gaW4gdGhlIGZvcm0gb2YKK2VtYWlscywgeW91IHNob3VsZCB1c2UgdG9waWMgYnJhbmNoZXMgYXMgdXN1YWwgKHNlZSBhYm92ZSkuICBUaGVuIHVzZQorbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHRvIGdlbmVyYXRlIHRoZSBjb3JyZXNwb25kaW5nIGVtYWlscworKGhpZ2hseSByZWNvbW1lbmRlZCBvdmVyIG1hbnVhbGx5IGZvcm1hdHRpbmcgdGhlbSBiZWNhdXNlIGl0IG1ha2VzIHRoZQorbWFpbnRhaW5lcidzIGxpZmUgZWFzaWVyKS4KKworLmZvcm1hdC1wYXRjaC9hbTogUHVibGlzaGluZyBicmFuY2hlcy90b3BpY3MKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIGBnaXQgZm9ybWF0LXBhdGNoIC1NIHVwc3RyZWFtLi50b3BpY2AgdG8gdHVybiB0aGVtIGludG8gcHJlZm9ybWF0dGVkCisgIHBhdGNoIGZpbGVzCisqIGBnaXQgc2VuZC1lbWFpbCAtLXRvPTxyZWNpcGllbnQ+IDxwYXRjaGVzPmAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU2VlIHRoZSBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gYW5kIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0KK21hbnBhZ2VzIGZvciBmdXJ0aGVyIHVzYWdlIG5vdGVzLgorCitJZiB0aGUgbWFpbnRhaW5lciB0ZWxscyB5b3UgdGhhdCB5b3VyIHBhdGNoIG5vIGxvbmdlciBhcHBsaWVzIHRvIHRoZQorY3VycmVudCB1cHN0cmVhbSwgeW91IHdpbGwgaGF2ZSB0byByZWJhc2UgeW91ciB0b3BpYyAoeW91IGNhbm5vdCB1c2UgYQorbWVyZ2UgYmVjYXVzZSB5b3UgY2Fubm90IGZvcm1hdC1wYXRjaCBtZXJnZXMpOgorCisuZm9ybWF0LXBhdGNoL2FtOiBLZWVwaW5nIHRvcGljcyB1cCB0byBkYXRlCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCBwdWxsIC0tcmViYXNlIDx1cmw+IDxicmFuY2g+YAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgY2FuIHRoZW4gZml4IHRoZSBjb25mbGljdHMgZHVyaW5nIHRoZSByZWJhc2UuICBQcmVzdW1hYmx5IHlvdSBoYXZlCitub3QgcHVibGlzaGVkIHlvdXIgdG9waWMgb3RoZXIgdGhhbiBieSBtYWlsLCBzbyByZWJhc2luZyBpdCBpcyBub3QgYQorcHJvYmxlbS4KKworSWYgeW91IHJlY2VpdmUgc3VjaCBhIHBhdGNoIHNlcmllcyAoYXMgbWFpbnRhaW5lciwgb3IgcGVyaGFwcyBhcyBhCityZWFkZXIgb2YgdGhlIG1haWxpbmcgbGlzdCBpdCB3YXMgc2VudCB0byksIHNhdmUgdGhlIG1haWxzIHRvIGZpbGVzLAorY3JlYXRlIGEgbmV3IHRvcGljIGJyYW5jaCBhbmQgdXNlICdnaXQgYW0nIHRvIGltcG9ydCB0aGUgY29tbWl0czoKKworLmZvcm1hdC1wYXRjaC9hbTogSW1wb3J0aW5nIHBhdGNoZXMKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgZ2l0IGFtIDwgcGF0Y2hgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09uZSBmZWF0dXJlIHdvcnRoIHBvaW50aW5nIG91dCBpcyB0aGUgdGhyZWUtd2F5IG1lcmdlLCB3aGljaCBjYW4gaGVscAoraWYgeW91IGdldCBjb25mbGljdHM6IGBnaXQgYW0gLTNgIHdpbGwgdXNlIGluZGV4IGluZm9ybWF0aW9uIGNvbnRhaW5lZAoraW4gcGF0Y2hlcyB0byBmaWd1cmUgb3V0IHRoZSBtZXJnZSBiYXNlLiAgU2VlIGxpbmtnaXQ6Z2l0LWFtWzFdIGZvcgorb3RoZXIgb3B0aW9ucy4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN10sCitsaW5rZ2l0OmdpdC1wdXNoWzFdLAorbGlua2dpdDpnaXQtcHVsbFsxXSwKK2xpbmtnaXQ6Z2l0LW1lcmdlWzFdLAorbGlua2dpdDpnaXQtcmViYXNlWzFdLAorbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLAorbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXSwKK2xpbmtnaXQ6Z2l0LWFtWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2xvc3NhcnktY29udGVudC50eHQgYi9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LWNvbnRlbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MjhiNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LWNvbnRlbnQudHh0CkBAIC0wLDAgKzEsNTE3IEBACitbW2RlZl9hbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlXV1hbHRlcm5hdGUgb2JqZWN0IGRhdGFiYXNlOjoKKwlWaWEgdGhlIGFsdGVybmF0ZXMgbWVjaGFuaXNtLCBhIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+CisJY2FuIGluaGVyaXQgcGFydCBvZiBpdHMgPDxkZWZfb2JqZWN0X2RhdGFiYXNlLG9iamVjdCBkYXRhYmFzZT4+CisJZnJvbSBhbm90aGVyIG9iamVjdCBkYXRhYmFzZSwgd2hpY2ggaXMgY2FsbGVkICJhbHRlcm5hdGUiLgorCitbW2RlZl9iYXJlX3JlcG9zaXRvcnldXWJhcmUgcmVwb3NpdG9yeTo6CisJQSBiYXJlIHJlcG9zaXRvcnkgaXMgbm9ybWFsbHkgYW4gYXBwcm9wcmlhdGVseQorCW5hbWVkIDw8ZGVmX2RpcmVjdG9yeSxkaXJlY3Rvcnk+PiB3aXRoIGEgYC5naXRgIHN1ZmZpeCB0aGF0IGRvZXMgbm90CisJaGF2ZSBhIGxvY2FsbHkgY2hlY2tlZC1vdXQgY29weSBvZiBhbnkgb2YgdGhlIGZpbGVzIHVuZGVyCisJcmV2aXNpb24gY29udHJvbC4gVGhhdCBpcywgYWxsIG9mIHRoZSBgZ2l0YAorCWFkbWluaXN0cmF0aXZlIGFuZCBjb250cm9sIGZpbGVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgcHJlc2VudCBpbiB0aGUKKwloaWRkZW4gYC5naXRgIHN1Yi1kaXJlY3RvcnkgYXJlIGRpcmVjdGx5IHByZXNlbnQgaW4gdGhlCisJYHJlcG9zaXRvcnkuZ2l0YCBkaXJlY3RvcnkgaW5zdGVhZCwKKwlhbmQgbm8gb3RoZXIgZmlsZXMgYXJlIHByZXNlbnQgYW5kIGNoZWNrZWQgb3V0LiBVc3VhbGx5IHB1Ymxpc2hlcnMgb2YKKwlwdWJsaWMgcmVwb3NpdG9yaWVzIG1ha2UgYmFyZSByZXBvc2l0b3JpZXMgYXZhaWxhYmxlLgorCitbW2RlZl9ibG9iX29iamVjdF1dYmxvYiBvYmplY3Q6OgorCVVudHlwZWQgPDxkZWZfb2JqZWN0LG9iamVjdD4+LCBlLmcuIHRoZSBjb250ZW50cyBvZiBhIGZpbGUuCisKK1tbZGVmX2JyYW5jaF1dYnJhbmNoOjoKKwlBICJicmFuY2giIGlzIGFuIGFjdGl2ZSBsaW5lIG9mIGRldmVsb3BtZW50LiAgVGhlIG1vc3QgcmVjZW50CisJPDxkZWZfY29tbWl0LGNvbW1pdD4+IG9uIGEgYnJhbmNoIGlzIHJlZmVycmVkIHRvIGFzIHRoZSB0aXAgb2YKKwl0aGF0IGJyYW5jaC4gIFRoZSB0aXAgb2YgdGhlIGJyYW5jaCBpcyByZWZlcmVuY2VkIGJ5IGEgYnJhbmNoCisJPDxkZWZfaGVhZCxoZWFkPj4sIHdoaWNoIG1vdmVzIGZvcndhcmQgYXMgYWRkaXRpb25hbCBkZXZlbG9wbWVudAorCWlzIGRvbmUgb24gdGhlIGJyYW5jaC4gIEEgc2luZ2xlIGdpdAorCTw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+IGNhbiB0cmFjayBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mCisJYnJhbmNoZXMsIGJ1dCB5b3VyIDw8ZGVmX3dvcmtpbmdfdHJlZSx3b3JraW5nIHRyZWU+PiBpcworCWFzc29jaWF0ZWQgd2l0aCBqdXN0IG9uZSBvZiB0aGVtICh0aGUgImN1cnJlbnQiIG9yICJjaGVja2VkIG91dCIKKwlicmFuY2gpLCBhbmQgPDxkZWZfSEVBRCxIRUFEPj4gcG9pbnRzIHRvIHRoYXQgYnJhbmNoLgorCitbW2RlZl9jYWNoZV1dY2FjaGU6OgorCU9ic29sZXRlIGZvcjogPDxkZWZfaW5kZXgsaW5kZXg+Pi4KKworW1tkZWZfY2hhaW5dXWNoYWluOjoKKwlBIGxpc3Qgb2Ygb2JqZWN0cywgd2hlcmUgZWFjaCA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gaW4gdGhlIGxpc3QgY29udGFpbnMKKwlhIHJlZmVyZW5jZSB0byBpdHMgc3VjY2Vzc29yIChmb3IgZXhhbXBsZSwgdGhlIHN1Y2Nlc3NvciBvZiBhCisJPDxkZWZfY29tbWl0LGNvbW1pdD4+IGNvdWxkIGJlIG9uZSBvZiBpdHMgPDxkZWZfcGFyZW50LHBhcmVudHM+PikuCisKK1tbZGVmX2NoYW5nZXNldF1dY2hhbmdlc2V0OjoKKwlCaXRLZWVwZXIvY3ZzcHMgc3BlYWsgZm9yICI8PGRlZl9jb21taXQsY29tbWl0Pj4iLiBTaW5jZSBnaXQgZG9lcyBub3QKKwlzdG9yZSBjaGFuZ2VzLCBidXQgc3RhdGVzLCBpdCByZWFsbHkgZG9lcyBub3QgbWFrZSBzZW5zZSB0byB1c2UgdGhlIHRlcm0KKwkiY2hhbmdlc2V0cyIgd2l0aCBnaXQuCisKK1tbZGVmX2NoZWNrb3V0XV1jaGVja291dDo6CisJVGhlIGFjdGlvbiBvZiB1cGRhdGluZyBhbGwgb3IgcGFydCBvZiB0aGUKKwk8PGRlZl93b3JraW5nX3RyZWUsd29ya2luZyB0cmVlPj4gd2l0aCBhIDw8ZGVmX3RyZWVfb2JqZWN0LHRyZWUgb2JqZWN0Pj4KKwlvciA8PGRlZl9ibG9iX29iamVjdCxibG9iPj4gZnJvbSB0aGUKKwk8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0IGRhdGFiYXNlPj4sIGFuZCB1cGRhdGluZyB0aGUKKwk8PGRlZl9pbmRleCxpbmRleD4+IGFuZCA8PGRlZl9IRUFELEhFQUQ+PiBpZiB0aGUgd2hvbGUgd29ya2luZyB0cmVlIGhhcworCWJlZW4gcG9pbnRlZCBhdCBhIG5ldyA8PGRlZl9icmFuY2gsYnJhbmNoPj4uCisKK1tbZGVmX2NoZXJyeS1waWNraW5nXV1jaGVycnktcGlja2luZzo6CisJSW4gPDxkZWZfU0NNLFNDTT4+IGphcmdvbiwgImNoZXJyeSBwaWNrIiBtZWFucyB0byBjaG9vc2UgYSBzdWJzZXQgb2YKKwljaGFuZ2VzIG91dCBvZiBhIHNlcmllcyBvZiBjaGFuZ2VzICh0eXBpY2FsbHkgY29tbWl0cykgYW5kIHJlY29yZCB0aGVtCisJYXMgYSBuZXcgc2VyaWVzIG9mIGNoYW5nZXMgb24gdG9wIG9mIGEgZGlmZmVyZW50IGNvZGViYXNlLiBJbiBHSVQsIHRoaXMgaXMKKwlwZXJmb3JtZWQgYnkgdGhlICJnaXQgY2hlcnJ5LXBpY2siIGNvbW1hbmQgdG8gZXh0cmFjdCB0aGUgY2hhbmdlIGludHJvZHVjZWQKKwlieSBhbiBleGlzdGluZyA8PGRlZl9jb21taXQsY29tbWl0Pj4gYW5kIHRvIHJlY29yZCBpdCBiYXNlZCBvbiB0aGUgdGlwCisJb2YgdGhlIGN1cnJlbnQgPDxkZWZfYnJhbmNoLGJyYW5jaD4+IGFzIGEgbmV3IGNvbW1pdC4KKworW1tkZWZfY2xlYW5dXWNsZWFuOjoKKwlBIDw8ZGVmX3dvcmtpbmdfdHJlZSx3b3JraW5nIHRyZWU+PiBpcyBjbGVhbiwgaWYgaXQKKwljb3JyZXNwb25kcyB0byB0aGUgPDxkZWZfcmV2aXNpb24scmV2aXNpb24+PiByZWZlcmVuY2VkIGJ5IHRoZSBjdXJyZW50CisJPDxkZWZfaGVhZCxoZWFkPj4uIEFsc28gc2VlICI8PGRlZl9kaXJ0eSxkaXJ0eT4+Ii4KKworW1tkZWZfY29tbWl0XV1jb21taXQ6OgorCUFzIGEgbm91bjogQSBzaW5nbGUgcG9pbnQgaW4gdGhlCisJZ2l0IGhpc3Rvcnk7IHRoZSBlbnRpcmUgaGlzdG9yeSBvZiBhIHByb2plY3QgaXMgcmVwcmVzZW50ZWQgYXMgYQorCXNldCBvZiBpbnRlcnJlbGF0ZWQgY29tbWl0cy4gIFRoZSB3b3JkICJjb21taXQiIGlzIG9mdGVuCisJdXNlZCBieSBnaXQgaW4gdGhlIHNhbWUgcGxhY2VzIG90aGVyIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtcworCXVzZSB0aGUgd29yZHMgInJldmlzaW9uIiBvciAidmVyc2lvbiIuICBBbHNvIHVzZWQgYXMgYSBzaG9ydAorCWhhbmQgZm9yIDw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdD4+LgorKworQXMgYSB2ZXJiOiBUaGUgYWN0aW9uIG9mIHN0b3JpbmcgYSBuZXcgc25hcHNob3Qgb2YgdGhlIHByb2plY3Qncworc3RhdGUgaW4gdGhlIGdpdCBoaXN0b3J5LCBieSBjcmVhdGluZyBhIG5ldyBjb21taXQgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50CitzdGF0ZSBvZiB0aGUgPDxkZWZfaW5kZXgsaW5kZXg+PiBhbmQgYWR2YW5jaW5nIDw8ZGVmX0hFQUQsSEVBRD4+Cit0byBwb2ludCBhdCB0aGUgbmV3IGNvbW1pdC4KKworW1tkZWZfY29tbWl0X29iamVjdF1dY29tbWl0IG9iamVjdDo6CisJQW4gPDxkZWZfb2JqZWN0LG9iamVjdD4+IHdoaWNoIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhCisJcGFydGljdWxhciA8PGRlZl9yZXZpc2lvbixyZXZpc2lvbj4+LCBzdWNoIGFzIDw8ZGVmX3BhcmVudCxwYXJlbnRzPj4sIGNvbW1pdHRlciwKKwlhdXRob3IsIGRhdGUgYW5kIHRoZSA8PGRlZl90cmVlX29iamVjdCx0cmVlIG9iamVjdD4+IHdoaWNoIGNvcnJlc3BvbmRzCisJdG8gdGhlIHRvcCA8PGRlZl9kaXJlY3RvcnksZGlyZWN0b3J5Pj4gb2YgdGhlIHN0b3JlZAorCXJldmlzaW9uLgorCitbW2RlZl9jb3JlX2dpdF1dY29yZSBnaXQ6OgorCUZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBhbmQgdXRpbGl0aWVzIG9mIGdpdC4gRXhwb3NlcyBvbmx5IGxpbWl0ZWQKKwlzb3VyY2UgY29kZSBtYW5hZ2VtZW50IHRvb2xzLgorCitbW2RlZl9EQUddXURBRzo6CisJRGlyZWN0ZWQgYWN5Y2xpYyBncmFwaC4gVGhlIDw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdHM+PiBmb3JtIGEKKwlkaXJlY3RlZCBhY3ljbGljIGdyYXBoLCBiZWNhdXNlIHRoZXkgaGF2ZSBwYXJlbnRzIChkaXJlY3RlZCksIGFuZCB0aGUKKwlncmFwaCBvZiBjb21taXQgb2JqZWN0cyBpcyBhY3ljbGljICh0aGVyZSBpcyBubyA8PGRlZl9jaGFpbixjaGFpbj4+CisJd2hpY2ggYmVnaW5zIGFuZCBlbmRzIHdpdGggdGhlIHNhbWUgPDxkZWZfb2JqZWN0LG9iamVjdD4+KS4KKworW1tkZWZfZGFuZ2xpbmdfb2JqZWN0XV1kYW5nbGluZyBvYmplY3Q6OgorCUFuIDw8ZGVmX3VucmVhY2hhYmxlX29iamVjdCx1bnJlYWNoYWJsZSBvYmplY3Q+PiB3aGljaCBpcyBub3QKKwk8PGRlZl9yZWFjaGFibGUscmVhY2hhYmxlPj4gZXZlbiBmcm9tIG90aGVyIHVucmVhY2hhYmxlIG9iamVjdHM7IGEKKwlkYW5nbGluZyBvYmplY3QgaGFzIG5vIHJlZmVyZW5jZXMgdG8gaXQgZnJvbSBhbnkKKwlyZWZlcmVuY2Ugb3IgPDxkZWZfb2JqZWN0LG9iamVjdD4+IGluIHRoZSA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+Pi4KKworW1tkZWZfZGV0YWNoZWRfSEVBRF1dZGV0YWNoZWQgSEVBRDo6CisJTm9ybWFsbHkgdGhlIDw8ZGVmX0hFQUQsSEVBRD4+IHN0b3JlcyB0aGUgbmFtZSBvZiBhCisJPDxkZWZfYnJhbmNoLGJyYW5jaD4+LiAgSG93ZXZlciwgZ2l0IGFsc28gYWxsb3dzIHlvdSB0byA8PGRlZl9jaGVja291dCxjaGVjayBvdXQ+PgorCWFuIGFyYml0cmFyeSA8PGRlZl9jb21taXQsY29tbWl0Pj4gdGhhdCBpc24ndCBuZWNlc3NhcmlseSB0aGUgdGlwIG9mIGFueQorCXBhcnRpY3VsYXIgYnJhbmNoLiAgSW4gdGhpcyBjYXNlIEhFQUQgaXMgc2FpZCB0byBiZSAiZGV0YWNoZWQiLgorCitbW2RlZl9kaXJjYWNoZV1dZGlyY2FjaGU6OgorCVlvdSBhcmUgKndhYWFhYXkqIGJlaGluZC4gU2VlIDw8ZGVmX2luZGV4LGluZGV4Pj4uCisKK1tbZGVmX2RpcmVjdG9yeV1dZGlyZWN0b3J5OjoKKwlUaGUgbGlzdCB5b3UgZ2V0IHdpdGggImxzIiA6LSkKKworW1tkZWZfZGlydHldXWRpcnR5OjoKKwlBIDw8ZGVmX3dvcmtpbmdfdHJlZSx3b3JraW5nIHRyZWU+PiBpcyBzYWlkIHRvIGJlICJkaXJ0eSIgaWYKKwlpdCBjb250YWlucyBtb2RpZmljYXRpb25zIHdoaWNoIGhhdmUgbm90IGJlZW4gPDxkZWZfY29tbWl0LGNvbW1pdHRlZD4+IHRvIHRoZSBjdXJyZW50CisJPDxkZWZfYnJhbmNoLGJyYW5jaD4+LgorCitbW2RlZl9lbnRdXWVudDo6CisJRmF2b3JpdGUgc3lub255bSB0byAiPDxkZWZfdHJlZS1pc2gsdHJlZS1pc2g+PiIgYnkgc29tZSB0b3RhbCBnZWVrcy4gU2VlCisJaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbnRfKE1pZGRsZS1lYXJ0aCkgZm9yIGFuIGluLWRlcHRoCisJZXhwbGFuYXRpb24uIEF2b2lkIHRoaXMgdGVybSwgbm90IHRvIGNvbmZ1c2UgcGVvcGxlLgorCitbW2RlZl9ldmlsX21lcmdlXV1ldmlsIG1lcmdlOjoKKwlBbiBldmlsIG1lcmdlIGlzIGEgPDxkZWZfbWVyZ2UsbWVyZ2U+PiB0aGF0IGludHJvZHVjZXMgY2hhbmdlcyB0aGF0CisJZG8gbm90IGFwcGVhciBpbiBhbnkgPDxkZWZfcGFyZW50LHBhcmVudD4+LgorCitbW2RlZl9mYXN0X2ZvcndhcmRdXWZhc3QtZm9yd2FyZDo6CisJQSBmYXN0LWZvcndhcmQgaXMgYSBzcGVjaWFsIHR5cGUgb2YgPDxkZWZfbWVyZ2UsbWVyZ2U+PiB3aGVyZSB5b3UgaGF2ZSBhCisJPDxkZWZfcmV2aXNpb24scmV2aXNpb24+PiBhbmQgeW91IGFyZSAibWVyZ2luZyIgYW5vdGhlcgorCTw8ZGVmX2JyYW5jaCxicmFuY2g+PidzIGNoYW5nZXMgdGhhdCBoYXBwZW4gdG8gYmUgYSBkZXNjZW5kYW50IG9mIHdoYXQKKwl5b3UgaGF2ZS4gSW4gc3VjaCB0aGVzZSBjYXNlcywgeW91IGRvIG5vdCBtYWtlIGEgbmV3IDw8ZGVmX21lcmdlLG1lcmdlPj4KKwk8PGRlZl9jb21taXQsY29tbWl0Pj4gYnV0IGluc3RlYWQganVzdCB1cGRhdGUgdG8gaGlzCisJcmV2aXNpb24uIFRoaXMgd2lsbCBoYXBwZW4gZnJlcXVlbnRseSBvbiBhCisJPDxkZWZfcmVtb3RlX3RyYWNraW5nX2JyYW5jaCxyZW1vdGUtdHJhY2tpbmcgYnJhbmNoPj4gb2YgYSByZW1vdGUKKwk8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+Pi4KKworW1tkZWZfZmV0Y2hdXWZldGNoOjoKKwlGZXRjaGluZyBhIDw8ZGVmX2JyYW5jaCxicmFuY2g+PiBtZWFucyB0byBnZXQgdGhlCisJYnJhbmNoJ3MgPDxkZWZfaGVhZF9yZWYsaGVhZCByZWY+PiBmcm9tIGEgcmVtb3RlCisJPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4sIHRvIGZpbmQgb3V0IHdoaWNoIG9iamVjdHMgYXJlCisJbWlzc2luZyBmcm9tIHRoZSBsb2NhbCA8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0IGRhdGFiYXNlPj4sCisJYW5kIHRvIGdldCB0aGVtLCB0b28uICBTZWUgYWxzbyBsaW5rZ2l0OmdpdC1mZXRjaFsxXS4KKworW1tkZWZfZmlsZV9zeXN0ZW1dXWZpbGUgc3lzdGVtOjoKKwlMaW51cyBUb3J2YWxkcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGdpdCB0byBiZSBhIHVzZXIgc3BhY2UgZmlsZSBzeXN0ZW0sCisJaS5lLiB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gaG9sZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIFRoYXQgZW5zdXJlZCB0aGUKKwllZmZpY2llbmN5IGFuZCBzcGVlZCBvZiBnaXQuCisKK1tbZGVmX2dpdF9hcmNoaXZlXV1naXQgYXJjaGl2ZTo6CisJU3lub255bSBmb3IgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4gKGZvciBhcmNoIHBlb3BsZSkuCisKK1tbZGVmX2dyYWZ0c11dZ3JhZnRzOjoKKwlHcmFmdHMgZW5hYmxlcyB0d28gb3RoZXJ3aXNlIGRpZmZlcmVudCBsaW5lcyBvZiBkZXZlbG9wbWVudCB0byBiZSBqb2luZWQKKwl0b2dldGhlciBieSByZWNvcmRpbmcgZmFrZSBhbmNlc3RyeSBpbmZvcm1hdGlvbiBmb3IgY29tbWl0cy4gVGhpcyB3YXkKKwl5b3UgY2FuIG1ha2UgZ2l0IHByZXRlbmQgdGhlIHNldCBvZiA8PGRlZl9wYXJlbnQscGFyZW50cz4+IGEgPDxkZWZfY29tbWl0LGNvbW1pdD4+IGhhcworCWlzIGRpZmZlcmVudCBmcm9tIHdoYXQgd2FzIHJlY29yZGVkIHdoZW4gdGhlIGNvbW1pdCB3YXMKKwljcmVhdGVkLiBDb25maWd1cmVkIHZpYSB0aGUgYC5naXQvaW5mby9ncmFmdHNgIGZpbGUuCisKK1tbZGVmX2hhc2hdXWhhc2g6OgorCUluIGdpdCdzIGNvbnRleHQsIHN5bm9ueW0gdG8gPDxkZWZfb2JqZWN0X25hbWUsb2JqZWN0IG5hbWU+Pi4KKworW1tkZWZfaGVhZF1daGVhZDo6CisJQSA8PGRlZl9yZWYsbmFtZWQgcmVmZXJlbmNlPj4gdG8gdGhlIDw8ZGVmX2NvbW1pdCxjb21taXQ+PiBhdCB0aGUgdGlwIG9mIGEKKwk8PGRlZl9icmFuY2gsYnJhbmNoPj4uICBIZWFkcyBhcmUgc3RvcmVkIGluIGEgZmlsZSBpbgorCWAkR0lUX0RJUi9yZWZzL2hlYWRzL2AgZGlyZWN0b3J5LCBleGNlcHQgd2hlbiB1c2luZyBwYWNrZWQgcmVmcy4gKFNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stcmVmc1sxXS4pCisKK1tbZGVmX0hFQURdXUhFQUQ6OgorCVRoZSBjdXJyZW50IDw8ZGVmX2JyYW5jaCxicmFuY2g+Pi4gIEluIG1vcmUgZGV0YWlsOiBZb3VyIDw8ZGVmX3dvcmtpbmdfdHJlZSwKKwl3b3JraW5nIHRyZWU+PiBpcyBub3JtYWxseSBkZXJpdmVkIGZyb20gdGhlIHN0YXRlIG9mIHRoZSB0cmVlCisJcmVmZXJyZWQgdG8gYnkgSEVBRC4gIEhFQUQgaXMgYSByZWZlcmVuY2UgdG8gb25lIG9mIHRoZQorCTw8ZGVmX2hlYWQsaGVhZHM+PiBpbiB5b3VyIHJlcG9zaXRvcnksIGV4Y2VwdCB3aGVuIHVzaW5nIGEKKwk8PGRlZl9kZXRhY2hlZF9IRUFELGRldGFjaGVkIEhFQUQ+PiwgaW4gd2hpY2ggY2FzZSBpdCBkaXJlY3RseQorCXJlZmVyZW5jZXMgYW4gYXJiaXRyYXJ5IGNvbW1pdC4KKworW1tkZWZfaGVhZF9yZWZdXWhlYWQgcmVmOjoKKwlBIHN5bm9ueW0gZm9yIDw8ZGVmX2hlYWQsaGVhZD4+LgorCitbW2RlZl9ob29rXV1ob29rOjoKKwlEdXJpbmcgdGhlIG5vcm1hbCBleGVjdXRpb24gb2Ygc2V2ZXJhbCBnaXQgY29tbWFuZHMsIGNhbGwtb3V0cyBhcmUgbWFkZQorCXRvIG9wdGlvbmFsIHNjcmlwdHMgdGhhdCBhbGxvdyBhIGRldmVsb3BlciB0byBhZGQgZnVuY3Rpb25hbGl0eSBvcgorCWNoZWNraW5nLiBUeXBpY2FsbHksIHRoZSBob29rcyBhbGxvdyBmb3IgYSBjb21tYW5kIHRvIGJlIHByZS12ZXJpZmllZAorCWFuZCBwb3RlbnRpYWxseSBhYm9ydGVkLCBhbmQgYWxsb3cgZm9yIGEgcG9zdC1ub3RpZmljYXRpb24gYWZ0ZXIgdGhlCisJb3BlcmF0aW9uIGlzIGRvbmUuIFRoZSBob29rIHNjcmlwdHMgYXJlIGZvdW5kIGluIHRoZQorCWAkR0lUX0RJUi9ob29rcy9gIGRpcmVjdG9yeSwgYW5kIGFyZSBlbmFibGVkIGJ5IHNpbXBseQorCXJlbW92aW5nIHRoZSBgLnNhbXBsZWAgc3VmZml4IGZyb20gdGhlIGZpbGVuYW1lLiBJbiBlYXJsaWVyIHZlcnNpb25zCisJb2YgZ2l0IHlvdSBoYWQgdG8gbWFrZSB0aGVtIGV4ZWN1dGFibGUuCisKK1tbZGVmX2luZGV4XV1pbmRleDo6CisJQSBjb2xsZWN0aW9uIG9mIGZpbGVzIHdpdGggc3RhdCBpbmZvcm1hdGlvbiwgd2hvc2UgY29udGVudHMgYXJlIHN0b3JlZAorCWFzIG9iamVjdHMuIFRoZSBpbmRleCBpcyBhIHN0b3JlZCB2ZXJzaW9uIG9mIHlvdXIKKwk8PGRlZl93b3JraW5nX3RyZWUsd29ya2luZyB0cmVlPj4uIFRydXRoIGJlIHRvbGQsIGl0IGNhbiBhbHNvIGNvbnRhaW4gYSBzZWNvbmQsIGFuZCBldmVuCisJYSB0aGlyZCB2ZXJzaW9uIG9mIGEgd29ya2luZyB0cmVlLCB3aGljaCBhcmUgdXNlZAorCXdoZW4gPDxkZWZfbWVyZ2UsbWVyZ2luZz4+LgorCitbW2RlZl9pbmRleF9lbnRyeV1daW5kZXggZW50cnk6OgorCVRoZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYSBwYXJ0aWN1bGFyIGZpbGUsIHN0b3JlZCBpbiB0aGUKKwk8PGRlZl9pbmRleCxpbmRleD4+LiBBbiBpbmRleCBlbnRyeSBjYW4gYmUgdW5tZXJnZWQsIGlmIGEKKwk8PGRlZl9tZXJnZSxtZXJnZT4+IHdhcyBzdGFydGVkLCBidXQgbm90IHlldCBmaW5pc2hlZCAoaS5lLiBpZgorCXRoZSBpbmRleCBjb250YWlucyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGF0IGZpbGUpLgorCitbW2RlZl9tYXN0ZXJdXW1hc3Rlcjo6CisJVGhlIGRlZmF1bHQgZGV2ZWxvcG1lbnQgPDxkZWZfYnJhbmNoLGJyYW5jaD4+LiBXaGVuZXZlciB5b3UKKwljcmVhdGUgYSBnaXQgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4sIGEgYnJhbmNoIG5hbWVkCisJIm1hc3RlciIgaXMgY3JlYXRlZCwgYW5kIGJlY29tZXMgdGhlIGFjdGl2ZSBicmFuY2guIEluIG1vc3QKKwljYXNlcywgdGhpcyBjb250YWlucyB0aGUgbG9jYWwgZGV2ZWxvcG1lbnQsIHRob3VnaCB0aGF0IGlzCisJcHVyZWx5IGJ5IGNvbnZlbnRpb24gYW5kIGlzIG5vdCByZXF1aXJlZC4KKworW1tkZWZfbWVyZ2VdXW1lcmdlOjoKKwlBcyBhIHZlcmI6IFRvIGJyaW5nIHRoZSBjb250ZW50cyBvZiBhbm90aGVyCisJPDxkZWZfYnJhbmNoLGJyYW5jaD4+IChwb3NzaWJseSBmcm9tIGFuIGV4dGVybmFsCisJPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4pIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgSW4gdGhlCisJY2FzZSB3aGVyZSB0aGUgbWVyZ2VkLWluIGJyYW5jaCBpcyBmcm9tIGEgZGlmZmVyZW50IHJlcG9zaXRvcnksCisJdGhpcyBpcyBkb25lIGJ5IGZpcnN0IDw8ZGVmX2ZldGNoLGZldGNoaW5nPj4gdGhlIHJlbW90ZSBicmFuY2gKKwlhbmQgdGhlbiBtZXJnaW5nIHRoZSByZXN1bHQgaW50byB0aGUgY3VycmVudCBicmFuY2guICBUaGlzCisJY29tYmluYXRpb24gb2YgZmV0Y2ggYW5kIG1lcmdlIG9wZXJhdGlvbnMgaXMgY2FsbGVkIGEKKwk8PGRlZl9wdWxsLHB1bGw+Pi4gIE1lcmdpbmcgaXMgcGVyZm9ybWVkIGJ5IGFuIGF1dG9tYXRpYyBwcm9jZXNzCisJdGhhdCBpZGVudGlmaWVzIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgYnJhbmNoZXMgZGl2ZXJnZWQsIGFuZAorCXRoZW4gYXBwbGllcyBhbGwgdGhvc2UgY2hhbmdlcyB0b2dldGhlci4gIEluIGNhc2VzIHdoZXJlIGNoYW5nZXMKKwljb25mbGljdCwgbWFudWFsIGludGVydmVudGlvbiBtYXkgYmUgcmVxdWlyZWQgdG8gY29tcGxldGUgdGhlCisJbWVyZ2UuCisrCitBcyBhIG5vdW46IHVubGVzcyBpdCBpcyBhIDw8ZGVmX2Zhc3RfZm9yd2FyZCxmYXN0LWZvcndhcmQ+PiwgYQorc3VjY2Vzc2Z1bCBtZXJnZSByZXN1bHRzIGluIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyA8PGRlZl9jb21taXQsY29tbWl0Pj4KK3JlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSwgYW5kIGhhdmluZyBhcworPDxkZWZfcGFyZW50LHBhcmVudHM+PiB0aGUgdGlwcyBvZiB0aGUgbWVyZ2VkIDw8ZGVmX2JyYW5jaCxicmFuY2hlcz4+LgorVGhpcyBjb21taXQgaXMgcmVmZXJyZWQgdG8gYXMgYSAibWVyZ2UgY29tbWl0Iiwgb3Igc29tZXRpbWVzIGp1c3QgYQorIm1lcmdlIi4KKworW1tkZWZfb2JqZWN0XV1vYmplY3Q6OgorCVRoZSB1bml0IG9mIHN0b3JhZ2UgaW4gZ2l0LiBJdCBpcyB1bmlxdWVseSBpZGVudGlmaWVkIGJ5IHRoZQorCTw8ZGVmX1NIQTEsU0hBMT4+IG9mIGl0cyBjb250ZW50cy4gQ29uc2VxdWVudGx5LCBhbgorCW9iamVjdCBjYW4gbm90IGJlIGNoYW5nZWQuCisKK1tbZGVmX29iamVjdF9kYXRhYmFzZV1db2JqZWN0IGRhdGFiYXNlOjoKKwlTdG9yZXMgYSBzZXQgb2YgIm9iamVjdHMiLCBhbmQgYW4gaW5kaXZpZHVhbCA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gaXMKKwlpZGVudGlmaWVkIGJ5IGl0cyA8PGRlZl9vYmplY3RfbmFtZSxvYmplY3QgbmFtZT4+LiBUaGUgb2JqZWN0cyB1c3VhbGx5CisJbGl2ZSBpbiBgJEdJVF9ESVIvb2JqZWN0cy9gLgorCitbW2RlZl9vYmplY3RfaWRlbnRpZmllcl1db2JqZWN0IGlkZW50aWZpZXI6OgorCVN5bm9ueW0gZm9yIDw8ZGVmX29iamVjdF9uYW1lLG9iamVjdCBuYW1lPj4uCisKK1tbZGVmX29iamVjdF9uYW1lXV1vYmplY3QgbmFtZTo6CisJVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIGFuIDw8ZGVmX29iamVjdCxvYmplY3Q+Pi4gVGhlIDw8ZGVmX2hhc2gsaGFzaD4+CisJb2YgdGhlIG9iamVjdCdzIGNvbnRlbnRzIHVzaW5nIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0KKwkxIGFuZCB1c3VhbGx5IHJlcHJlc2VudGVkIGJ5IHRoZSA0MCBjaGFyYWN0ZXIgaGV4YWRlY2ltYWwgZW5jb2Rpbmcgb2YKKwl0aGUgPDxkZWZfaGFzaCxoYXNoPj4gb2YgdGhlIG9iamVjdC4KKworW1tkZWZfb2JqZWN0X3R5cGVdXW9iamVjdCB0eXBlOjoKKwlPbmUgb2YgdGhlIGlkZW50aWZpZXJzICI8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdD4+IiwKKwkiPDxkZWZfdHJlZV9vYmplY3QsdHJlZT4+IiwgIjw8ZGVmX3RhZ19vYmplY3QsdGFnPj4iIG9yCisJIjw8ZGVmX2Jsb2Jfb2JqZWN0LGJsb2I+PiIgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBhbgorCTw8ZGVmX29iamVjdCxvYmplY3Q+Pi4KKworW1tkZWZfb2N0b3B1c11db2N0b3B1czo6CisJVG8gPDxkZWZfbWVyZ2UsbWVyZ2U+PiBtb3JlIHRoYW4gdHdvIDw8ZGVmX2JyYW5jaCxicmFuY2hlcz4+LiBBbHNvIGRlbm90ZXMgYW4KKwlpbnRlbGxpZ2VudCBwcmVkYXRvci4KKworW1tkZWZfb3JpZ2luXV1vcmlnaW46OgorCVRoZSBkZWZhdWx0IHVwc3RyZWFtIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LiBNb3N0IHByb2plY3RzIGhhdmUKKwlhdCBsZWFzdCBvbmUgdXBzdHJlYW0gcHJvamVjdCB3aGljaCB0aGV5IHRyYWNrLiBCeSBkZWZhdWx0CisJJ29yaWdpbicgaXMgdXNlZCBmb3IgdGhhdCBwdXJwb3NlLiBOZXcgdXBzdHJlYW0gdXBkYXRlcworCXdpbGwgYmUgZmV0Y2hlZCBpbnRvIHJlbW90ZSA8PGRlZl9yZW1vdGVfdHJhY2tpbmdfYnJhbmNoLHJlbW90ZS10cmFja2luZyBicmFuY2hlcz4+IG5hbWVkCisJb3JpZ2luL25hbWUtb2YtdXBzdHJlYW0tYnJhbmNoLCB3aGljaCB5b3UgY2FuIHNlZSB1c2luZworCWBnaXQgYnJhbmNoIC1yYC4KKworW1tkZWZfcGFja11dcGFjazo6CisJQSBzZXQgb2Ygb2JqZWN0cyB3aGljaCBoYXZlIGJlZW4gY29tcHJlc3NlZCBpbnRvIG9uZSBmaWxlICh0byBzYXZlIHNwYWNlCisJb3IgdG8gdHJhbnNtaXQgdGhlbSBlZmZpY2llbnRseSkuCisKK1tbZGVmX3BhY2tfaW5kZXhdXXBhY2sgaW5kZXg6OgorCVRoZSBsaXN0IG9mIGlkZW50aWZpZXJzLCBhbmQgb3RoZXIgaW5mb3JtYXRpb24sIG9mIHRoZSBvYmplY3RzIGluIGEKKwk8PGRlZl9wYWNrLHBhY2s+PiwgdG8gYXNzaXN0IGluIGVmZmljaWVudGx5IGFjY2Vzc2luZyB0aGUgY29udGVudHMgb2YgYQorCXBhY2suCisKK1tbZGVmX3BhdGhzcGVjXV1wYXRoc3BlYzo6CisgICAgICAgUGF0dGVybiB1c2VkIHRvIHNwZWNpZnkgcGF0aHMuCisrCitQYXRoc3BlY3MgYXJlIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvZiAiZ2l0IGxzLWZpbGVzIiwgImdpdAorbHMtdHJlZSIsICJnaXQgYWRkIiwgImdpdCBncmVwIiwgImdpdCBkaWZmIiwgImdpdCBjaGVja291dCIsCithbmQgbWFueSBvdGhlciBjb21tYW5kcyB0bworbGltaXQgdGhlIHNjb3BlIG9mIG9wZXJhdGlvbnMgdG8gc29tZSBzdWJzZXQgb2YgdGhlIHRyZWUgb3IKK3dvcmt0cmVlLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIGVhY2ggY29tbWFuZCBmb3Igd2hldGhlcgorcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvciB0b3BsZXZlbC4gIFRoZQorcGF0aHNwZWMgc3ludGF4IGlzIGFzIGZvbGxvd3M6CisKKyogYW55IHBhdGggbWF0Y2hlcyBpdHNlbGYKKyogdGhlIHBhdGhzcGVjIHVwIHRvIHRoZSBsYXN0IHNsYXNoIHJlcHJlc2VudHMgYQorICBkaXJlY3RvcnkgcHJlZml4LiAgVGhlIHNjb3BlIG9mIHRoYXQgcGF0aHNwZWMgaXMKKyAgbGltaXRlZCB0byB0aGF0IHN1YnRyZWUuCisqIHRoZSByZXN0IG9mIHRoZSBwYXRoc3BlYyBpcyBhIHBhdHRlcm4gZm9yIHRoZSByZW1haW5kZXIKKyAgb2YgdGhlIHBhdGhuYW1lLiAgUGF0aHMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeQorICBwcmVmaXggd2lsbCBiZSBtYXRjaGVkIGFnYWluc3QgdGhhdCBwYXR0ZXJuIHVzaW5nIGZubWF0Y2goMyk7CisgIGluIHBhcnRpY3VsYXIsICcqJyBhbmQgJz8nIF9jYW5fIG1hdGNoIGRpcmVjdG9yeSBzZXBhcmF0b3JzLgorKworRm9yIGV4YW1wbGUsIERvY3VtZW50YXRpb24vKi5qcGcgd2lsbCBtYXRjaCBhbGwgLmpwZyBmaWxlcworaW4gdGhlIERvY3VtZW50YXRpb24gc3VidHJlZSwKK2luY2x1ZGluZyBEb2N1bWVudGF0aW9uL2NoYXB0ZXJfMS9maWd1cmVfMS5qcGcuCisKKysKK0EgcGF0aHNwZWMgdGhhdCBiZWdpbnMgd2l0aCBhIGNvbG9uIGA6YCBoYXMgc3BlY2lhbCBtZWFuaW5nLiAgSW4gdGhlCitzaG9ydCBmb3JtLCB0aGUgbGVhZGluZyBjb2xvbiBgOmAgaXMgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlICJtYWdpYworc2lnbmF0dXJlIiBsZXR0ZXJzICh3aGljaCBvcHRpb25hbGx5IGlzIHRlcm1pbmF0ZWQgYnkgYW5vdGhlciBjb2xvbiBgOmApLAorYW5kIHRoZSByZW1haW5kZXIgaXMgdGhlIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgcGF0aC4gVGhlIG9wdGlvbmFsCitjb2xvbiB0aGF0IHRlcm1pbmF0ZXMgdGhlICJtYWdpYyBzaWduYXR1cmUiIGNhbiBiZSBvbWl0dGVkIGlmIHRoZSBwYXR0ZXJuCitiZWdpbnMgd2l0aCBhIGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSBhICJtYWdpYyBzaWduYXR1cmUiIGFuZCBpcyBub3QgYQorY29sb24uCisrCitJbiB0aGUgbG9uZyBmb3JtLCB0aGUgbGVhZGluZyBjb2xvbiBgOmAgaXMgZm9sbG93ZWQgYnkgYSBvcGVuCitwYXJlbnRoZXNpcyBgKGAsIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgemVybyBvciBtb3JlICJtYWdpYyB3b3JkcyIsCithbmQgYSBjbG9zZSBwYXJlbnRoZXNlcyBgKWAsIGFuZCB0aGUgcmVtYWluZGVyIGlzIHRoZSBwYXR0ZXJuIHRvIG1hdGNoCithZ2FpbnN0IHRoZSBwYXRoLgorKworVGhlICJtYWdpYyBzaWduYXR1cmUiIGNvbnNpc3RzIG9mIGFuIEFTQ0lJIHN5bWJvbCB0aGF0IGlzIG5vdAorYWxwaGFudW1lcmljLgorKworLS0KK3RvcCBgL2A7OworCVRoZSBtYWdpYyB3b3JkIGB0b3BgIChtbmVtb25pYzogYC9gKSBtYWtlcyB0aGUgcGF0dGVybiBtYXRjaAorCWZyb20gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZSwgZXZlbiB3aGVuIHlvdSBhcmUgcnVubmluZworCXRoZSBjb21tYW5kIGZyb20gaW5zaWRlIGEgc3ViZGlyZWN0b3J5LgorLS0KKysKK0N1cnJlbnRseSBvbmx5IHRoZSBzbGFzaCBgL2AgaXMgcmVjb2duaXplZCBhcyB0aGUgIm1hZ2ljIHNpZ25hdHVyZSIsCitidXQgaXQgaXMgZW52aXNpb25lZCB0aGF0IHdlIHdpbGwgc3VwcG9ydCBtb3JlIHR5cGVzIG9mIG1hZ2ljIGluIGxhdGVyCit2ZXJzaW9ucyBvZiBnaXQuCisrCitBIHBhdGhzcGVjIHdpdGggb25seSBhIGNvbG9uIG1lYW5zICJ0aGVyZSBpcyBubyBwYXRoc3BlYyIuIFRoaXMgZm9ybQorc2hvdWxkIG5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHBhdGhzcGVjLgorCitbW2RlZl9wYXJlbnRdXXBhcmVudDo6CisJQSA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdCBvYmplY3Q+PiBjb250YWlucyBhIChwb3NzaWJseSBlbXB0eSkgbGlzdAorCW9mIHRoZSBsb2dpY2FsIHByZWRlY2Vzc29yKHMpIGluIHRoZSBsaW5lIG9mIGRldmVsb3BtZW50LCBpLmUuIGl0cworCXBhcmVudHMuCisKK1tbZGVmX3BpY2theGVdXXBpY2theGU6OgorCVRoZSB0ZXJtIDw8ZGVmX3BpY2theGUscGlja2F4ZT4+IHJlZmVycyB0byBhbiBvcHRpb24gdG8gdGhlIGRpZmZjb3JlCisJcm91dGluZXMgdGhhdCBoZWxwIHNlbGVjdCBjaGFuZ2VzIHRoYXQgYWRkIG9yIGRlbGV0ZSBhIGdpdmVuIHRleHQKKwlzdHJpbmcuIFdpdGggdGhlIGAtLXBpY2theGUtYWxsYCBvcHRpb24sIGl0IGNhbiBiZSB1c2VkIHRvIHZpZXcgdGhlIGZ1bGwKKwk8PGRlZl9jaGFuZ2VzZXQsY2hhbmdlc2V0Pj4gdGhhdCBpbnRyb2R1Y2VkIG9yIHJlbW92ZWQsIHNheSwgYQorCXBhcnRpY3VsYXIgbGluZSBvZiB0ZXh0LiBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXS4KKworW1tkZWZfcGx1bWJpbmddXXBsdW1iaW5nOjoKKwlDdXRlIG5hbWUgZm9yIDw8ZGVmX2NvcmVfZ2l0LGNvcmUgZ2l0Pj4uCisKK1tbZGVmX3BvcmNlbGFpbl1dcG9yY2VsYWluOjoKKwlDdXRlIG5hbWUgZm9yIHByb2dyYW1zIGFuZCBwcm9ncmFtIHN1aXRlcyBkZXBlbmRpbmcgb24KKwk8PGRlZl9jb3JlX2dpdCxjb3JlIGdpdD4+LCBwcmVzZW50aW5nIGEgaGlnaCBsZXZlbCBhY2Nlc3MgdG8KKwljb3JlIGdpdC4gUG9yY2VsYWlucyBleHBvc2UgbW9yZSBvZiBhIDw8ZGVmX1NDTSxTQ00+PgorCWludGVyZmFjZSB0aGFuIHRoZSA8PGRlZl9wbHVtYmluZyxwbHVtYmluZz4+LgorCitbW2RlZl9wdWxsXV1wdWxsOjoKKwlQdWxsaW5nIGEgPDxkZWZfYnJhbmNoLGJyYW5jaD4+IG1lYW5zIHRvIDw8ZGVmX2ZldGNoLGZldGNoPj4gaXQgYW5kCisJPDxkZWZfbWVyZ2UsbWVyZ2U+PiBpdC4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LXB1bGxbMV0uCisKK1tbZGVmX3B1c2hdXXB1c2g6OgorCVB1c2hpbmcgYSA8PGRlZl9icmFuY2gsYnJhbmNoPj4gbWVhbnMgdG8gZ2V0IHRoZSBicmFuY2gncworCTw8ZGVmX2hlYWRfcmVmLGhlYWQgcmVmPj4gZnJvbSBhIHJlbW90ZSA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+PiwKKwlmaW5kIG91dCBpZiBpdCBpcyBhIGRpcmVjdCBhbmNlc3RvciB0byB0aGUgYnJhbmNoJ3MgbG9jYWwKKwloZWFkIHJlZiwgYW5kIGluIHRoYXQgY2FzZSwgcHV0dGluZyBhbGwKKwlvYmplY3RzLCB3aGljaCBhcmUgPDxkZWZfcmVhY2hhYmxlLHJlYWNoYWJsZT4+IGZyb20gdGhlIGxvY2FsCisJaGVhZCByZWYsIGFuZCB3aGljaCBhcmUgbWlzc2luZyBmcm9tIHRoZSByZW1vdGUKKwlyZXBvc2l0b3J5LCBpbnRvIHRoZSByZW1vdGUKKwk8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0IGRhdGFiYXNlPj4sIGFuZCB1cGRhdGluZyB0aGUgcmVtb3RlCisJaGVhZCByZWYuIElmIHRoZSByZW1vdGUgPDxkZWZfaGVhZCxoZWFkPj4gaXMgbm90IGFuCisJYW5jZXN0b3IgdG8gdGhlIGxvY2FsIGhlYWQsIHRoZSBwdXNoIGZhaWxzLgorCitbW2RlZl9yZWFjaGFibGVdXXJlYWNoYWJsZTo6CisJQWxsIG9mIHRoZSBhbmNlc3RvcnMgb2YgYSBnaXZlbiA8PGRlZl9jb21taXQsY29tbWl0Pj4gYXJlIHNhaWQgdG8gYmUKKwkicmVhY2hhYmxlIiBmcm9tIHRoYXQgY29tbWl0LiBNb3JlCisJZ2VuZXJhbGx5LCBvbmUgPDxkZWZfb2JqZWN0LG9iamVjdD4+IGlzIHJlYWNoYWJsZSBmcm9tCisJYW5vdGhlciBpZiB3ZSBjYW4gcmVhY2ggdGhlIG9uZSBmcm9tIHRoZSBvdGhlciBieSBhIDw8ZGVmX2NoYWluLGNoYWluPj4KKwl0aGF0IGZvbGxvd3MgPDxkZWZfdGFnLHRhZ3M+PiB0byB3aGF0ZXZlciB0aGV5IHRhZywKKwk8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdHM+PiB0byB0aGVpciBwYXJlbnRzIG9yIHRyZWVzLCBhbmQKKwk8PGRlZl90cmVlX29iamVjdCx0cmVlcz4+IHRvIHRoZSB0cmVlcyBvciA8PGRlZl9ibG9iX29iamVjdCxibG9icz4+CisJdGhhdCB0aGV5IGNvbnRhaW4uCisKK1tbZGVmX3JlYmFzZV1dcmViYXNlOjoKKwlUbyByZWFwcGx5IGEgc2VyaWVzIG9mIGNoYW5nZXMgZnJvbSBhIDw8ZGVmX2JyYW5jaCxicmFuY2g+PiB0byBhCisJZGlmZmVyZW50IGJhc2UsIGFuZCByZXNldCB0aGUgPDxkZWZfaGVhZCxoZWFkPj4gb2YgdGhhdCBicmFuY2gKKwl0byB0aGUgcmVzdWx0LgorCitbW2RlZl9yZWZdXXJlZjo6CisJQSA0MC1ieXRlIGhleCByZXByZXNlbnRhdGlvbiBvZiBhIDw8ZGVmX1NIQTEsU0hBMT4+IG9yIGEgbmFtZSB0aGF0CisJZGVub3RlcyBhIHBhcnRpY3VsYXIgPDxkZWZfb2JqZWN0LG9iamVjdD4+LiBUaGV5IG1heSBiZSBzdG9yZWQgaW4KKwlhIGZpbGUgdW5kZXIgYCRHSVRfRElSL3JlZnMvYCBkaXJlY3RvcnksIG9yCisJaW4gdGhlIGAkR0lUX0RJUi9wYWNrZWQtcmVmc2AgZmlsZS4KKworW1tkZWZfcmVmbG9nXV1yZWZsb2c6OgorCUEgcmVmbG9nIHNob3dzIHRoZSBsb2NhbCAiaGlzdG9yeSIgb2YgYSByZWYuICBJbiBvdGhlciB3b3JkcywKKwlpdCBjYW4gdGVsbCB5b3Ugd2hhdCB0aGUgM3JkIGxhc3QgcmV2aXNpb24gaW4gX3RoaXNfIHJlcG9zaXRvcnkKKwl3YXMsIGFuZCB3aGF0IHdhcyB0aGUgY3VycmVudCBzdGF0ZSBpbiBfdGhpc18gcmVwb3NpdG9yeSwKKwl5ZXN0ZXJkYXkgOToxNHBtLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlZmxvZ1sxXSBmb3IgZGV0YWlscy4KKworW1tkZWZfcmVmc3BlY11dcmVmc3BlYzo6CisJQSAicmVmc3BlYyIgaXMgdXNlZCBieSA8PGRlZl9mZXRjaCxmZXRjaD4+IGFuZAorCTw8ZGVmX3B1c2gscHVzaD4+IHRvIGRlc2NyaWJlIHRoZSBtYXBwaW5nIGJldHdlZW4gcmVtb3RlCisJPDxkZWZfcmVmLHJlZj4+IGFuZCBsb2NhbCByZWYuIFRoZXkgYXJlIGNvbWJpbmVkIHdpdGggYSBjb2xvbiBpbgorCXRoZSBmb3JtYXQgPHNyYz46PGRzdD4sIHByZWNlZGVkIGJ5IGFuIG9wdGlvbmFsIHBsdXMgc2lnbiwgKy4KKwlGb3IgZXhhbXBsZTogYGdpdCBmZXRjaCAkVVJMCisJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW5gIG1lYW5zICJncmFiIHRoZSBtYXN0ZXIKKwk8PGRlZl9icmFuY2gsYnJhbmNoPj4gPDxkZWZfaGVhZCxoZWFkPj4gZnJvbSB0aGUgJFVSTCBhbmQgc3RvcmUKKwlpdCBhcyBteSBvcmlnaW4gYnJhbmNoIGhlYWQiLiBBbmQgYGdpdCBwdXNoCisJJFVSTCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3RvLXVwc3RyZWFtYCBtZWFucyAicHVibGlzaCBteQorCW1hc3RlciBicmFuY2ggaGVhZCBhcyB0by11cHN0cmVhbSBicmFuY2ggYXQgJFVSTCIuIFNlZSBhbHNvCisJbGlua2dpdDpnaXQtcHVzaFsxXS4KKworW1tkZWZfcmVtb3RlX3RyYWNraW5nX2JyYW5jaF1dcmVtb3RlLXRyYWNraW5nIGJyYW5jaDo6CisJQSByZWd1bGFyIGdpdCA8PGRlZl9icmFuY2gsYnJhbmNoPj4gdGhhdCBpcyB1c2VkIHRvIGZvbGxvdyBjaGFuZ2VzIGZyb20KKwlhbm90aGVyIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LiBBIHJlbW90ZS10cmFja2luZworCWJyYW5jaCBzaG91bGQgbm90IGNvbnRhaW4gZGlyZWN0IG1vZGlmaWNhdGlvbnMgb3IgaGF2ZSBsb2NhbCBjb21taXRzCisJbWFkZSB0byBpdC4gQSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGNhbiB1c3VhbGx5IGJlCisJaWRlbnRpZmllZCBhcyB0aGUgcmlnaHQtaGFuZC1zaWRlIDw8ZGVmX3JlZixyZWY+PiBpbiBhIFB1bGw6CisJPDxkZWZfcmVmc3BlYyxyZWZzcGVjPj4uCisKK1tbZGVmX3JlcG9zaXRvcnldXXJlcG9zaXRvcnk6OgorCUEgY29sbGVjdGlvbiBvZiA8PGRlZl9yZWYscmVmcz4+IHRvZ2V0aGVyIHdpdGggYW4KKwk8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0IGRhdGFiYXNlPj4gY29udGFpbmluZyBhbGwgb2JqZWN0cworCXdoaWNoIGFyZSA8PGRlZl9yZWFjaGFibGUscmVhY2hhYmxlPj4gZnJvbSB0aGUgcmVmcywgcG9zc2libHkKKwlhY2NvbXBhbmllZCBieSBtZXRhIGRhdGEgZnJvbSBvbmUgb3IgbW9yZSA8PGRlZl9wb3JjZWxhaW4scG9yY2VsYWlucz4+LiBBCisJcmVwb3NpdG9yeSBjYW4gc2hhcmUgYW4gb2JqZWN0IGRhdGFiYXNlIHdpdGggb3RoZXIgcmVwb3NpdG9yaWVzCisJdmlhIDw8ZGVmX2FsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UsYWx0ZXJuYXRlcyBtZWNoYW5pc20+Pi4KKworW1tkZWZfcmVzb2x2ZV1dcmVzb2x2ZTo6CisJVGhlIGFjdGlvbiBvZiBmaXhpbmcgdXAgbWFudWFsbHkgd2hhdCBhIGZhaWxlZCBhdXRvbWF0aWMKKwk8PGRlZl9tZXJnZSxtZXJnZT4+IGxlZnQgYmVoaW5kLgorCitbW2RlZl9yZXZpc2lvbl1dcmV2aXNpb246OgorCUEgcGFydGljdWxhciBzdGF0ZSBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2hpY2ggd2FzIHN0b3JlZCBpbiB0aGUKKwk8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0IGRhdGFiYXNlPj4uIEl0IGlzIHJlZmVyZW5jZWQgYnkgYQorCTw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdD4+LgorCitbW2RlZl9yZXdpbmRdXXJld2luZDo6CisJVG8gdGhyb3cgYXdheSBwYXJ0IG9mIHRoZSBkZXZlbG9wbWVudCwgaS5lLiB0byBhc3NpZ24gdGhlCisJPDxkZWZfaGVhZCxoZWFkPj4gdG8gYW4gZWFybGllciA8PGRlZl9yZXZpc2lvbixyZXZpc2lvbj4+LgorCitbW2RlZl9TQ01dXVNDTTo6CisJU291cmNlIGNvZGUgbWFuYWdlbWVudCAodG9vbCkuCisKK1tbZGVmX1NIQTFdXVNIQTE6OgorCVN5bm9ueW0gZm9yIDw8ZGVmX29iamVjdF9uYW1lLG9iamVjdCBuYW1lPj4uCisKK1tbZGVmX3NoYWxsb3dfcmVwb3NpdG9yeV1dc2hhbGxvdyByZXBvc2l0b3J5OjoKKwlBIHNoYWxsb3cgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4gaGFzIGFuIGluY29tcGxldGUKKwloaXN0b3J5IHNvbWUgb2Ygd2hvc2UgPDxkZWZfY29tbWl0LGNvbW1pdHM+PiBoYXZlIDw8ZGVmX3BhcmVudCxwYXJlbnRzPj4gY2F1dGVyaXplZCBhd2F5IChpbiBvdGhlcgorCXdvcmRzLCBnaXQgaXMgdG9sZCB0byBwcmV0ZW5kIHRoYXQgdGhlc2UgY29tbWl0cyBkbyBub3QgaGF2ZSB0aGUKKwlwYXJlbnRzLCBldmVuIHRob3VnaCB0aGV5IGFyZSByZWNvcmRlZCBpbiB0aGUgPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQKKwlvYmplY3Q+PikuIFRoaXMgaXMgc29tZXRpbWVzIHVzZWZ1bCB3aGVuIHlvdSBhcmUgaW50ZXJlc3RlZCBvbmx5IGluIHRoZQorCXJlY2VudCBoaXN0b3J5IG9mIGEgcHJvamVjdCBldmVuIHRob3VnaCB0aGUgcmVhbCBoaXN0b3J5IHJlY29yZGVkIGluIHRoZQorCXVwc3RyZWFtIGlzIG11Y2ggbGFyZ2VyLiBBIHNoYWxsb3cgcmVwb3NpdG9yeQorCWlzIGNyZWF0ZWQgYnkgZ2l2aW5nIHRoZSBgLS1kZXB0aGAgb3B0aW9uIHRvIGxpbmtnaXQ6Z2l0LWNsb25lWzFdLCBhbmQKKwlpdHMgaGlzdG9yeSBjYW4gYmUgbGF0ZXIgZGVlcGVuZWQgd2l0aCBsaW5rZ2l0OmdpdC1mZXRjaFsxXS4KKworW1tkZWZfc3ltcmVmXV1zeW1yZWY6OgorCVN5bWJvbGljIHJlZmVyZW5jZTogaW5zdGVhZCBvZiBjb250YWluaW5nIHRoZSA8PGRlZl9TSEExLFNIQTE+PgorCWlkIGl0c2VsZiwgaXQgaXMgb2YgdGhlIGZvcm1hdCAncmVmOiByZWZzL3NvbWUvdGhpbmcnIGFuZCB3aGVuCisJcmVmZXJlbmNlZCwgaXQgcmVjdXJzaXZlbHkgZGVyZWZlcmVuY2VzIHRvIHRoaXMgcmVmZXJlbmNlLgorCSc8PGRlZl9IRUFELEhFQUQ+PicgaXMgYSBwcmltZSBleGFtcGxlIG9mIGEgc3ltcmVmLiBTeW1ib2xpYworCXJlZmVyZW5jZXMgYXJlIG1hbmlwdWxhdGVkIHdpdGggdGhlIGxpbmtnaXQ6Z2l0LXN5bWJvbGljLXJlZlsxXQorCWNvbW1hbmQuCisKK1tbZGVmX3RhZ11ddGFnOjoKKwlBIDw8ZGVmX3JlZixyZWY+PiB1bmRlciBgcmVmcy90YWdzL2AgbmFtZXNwYWNlIHRoYXQgcG9pbnRzIHRvIGFuCisJb2JqZWN0IG9mIGFuIGFyYml0cmFyeSB0eXBlICh0eXBpY2FsbHkgYSB0YWcgcG9pbnRzIHRvIGVpdGhlciBhCisJPDxkZWZfdGFnX29iamVjdCx0YWc+PiBvciBhIDw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdD4+KS4KKwlJbiBjb250cmFzdCB0byBhIDw8ZGVmX2hlYWQsaGVhZD4+LCBhIHRhZyBpcyBub3QgdXBkYXRlZCBieQorCXRoZSBgY29tbWl0YCBjb21tYW5kLiBBIGdpdCB0YWcgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBhIExpc3AKKwl0YWcgKHdoaWNoIHdvdWxkIGJlIGNhbGxlZCBhbiA8PGRlZl9vYmplY3RfdHlwZSxvYmplY3QgdHlwZT4+CisJaW4gZ2l0J3MgY29udGV4dCkuIEEgdGFnIGlzIG1vc3QgdHlwaWNhbGx5IHVzZWQgdG8gbWFyayBhIHBhcnRpY3VsYXIKKwlwb2ludCBpbiB0aGUgY29tbWl0IGFuY2VzdHJ5IDw8ZGVmX2NoYWluLGNoYWluPj4uCisKK1tbZGVmX3RhZ19vYmplY3RdXXRhZyBvYmplY3Q6OgorCUFuIDw8ZGVmX29iamVjdCxvYmplY3Q+PiBjb250YWluaW5nIGEgPDxkZWZfcmVmLHJlZj4+IHBvaW50aW5nIHRvCisJYW5vdGhlciBvYmplY3QsIHdoaWNoIGNhbiBjb250YWluIGEgbWVzc2FnZSBqdXN0IGxpa2UgYQorCTw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdD4+LiBJdCBjYW4gYWxzbyBjb250YWluIGEgKFBHUCkKKwlzaWduYXR1cmUsIGluIHdoaWNoIGNhc2UgaXQgaXMgY2FsbGVkIGEgInNpZ25lZCB0YWcgb2JqZWN0Ii4KKworW1tkZWZfdG9waWNfYnJhbmNoXV10b3BpYyBicmFuY2g6OgorCUEgcmVndWxhciBnaXQgPDxkZWZfYnJhbmNoLGJyYW5jaD4+IHRoYXQgaXMgdXNlZCBieSBhIGRldmVsb3BlciB0bworCWlkZW50aWZ5IGEgY29uY2VwdHVhbCBsaW5lIG9mIGRldmVsb3BtZW50LiBTaW5jZSBicmFuY2hlcyBhcmUgdmVyeSBlYXN5CisJYW5kIGluZXhwZW5zaXZlLCBpdCBpcyBvZnRlbiBkZXNpcmFibGUgdG8gaGF2ZSBzZXZlcmFsIHNtYWxsIGJyYW5jaGVzCisJdGhhdCBlYWNoIGNvbnRhaW4gdmVyeSB3ZWxsIGRlZmluZWQgY29uY2VwdHMgb3Igc21hbGwgaW5jcmVtZW50YWwgeWV0CisJcmVsYXRlZCBjaGFuZ2VzLgorCitbW2RlZl90cmVlXV10cmVlOjoKKwlFaXRoZXIgYSA8PGRlZl93b3JraW5nX3RyZWUsd29ya2luZyB0cmVlPj4sIG9yIGEgPDxkZWZfdHJlZV9vYmplY3QsdHJlZQorCW9iamVjdD4+IHRvZ2V0aGVyIHdpdGggdGhlIGRlcGVuZGVudCA8PGRlZl9ibG9iX29iamVjdCxibG9iPj4gYW5kIHRyZWUgb2JqZWN0cworCShpLmUuIGEgc3RvcmVkIHJlcHJlc2VudGF0aW9uIG9mIGEgd29ya2luZyB0cmVlKS4KKworW1tkZWZfdHJlZV9vYmplY3RdXXRyZWUgb2JqZWN0OjoKKwlBbiA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gY29udGFpbmluZyBhIGxpc3Qgb2YgZmlsZSBuYW1lcyBhbmQgbW9kZXMgYWxvbmcKKwl3aXRoIHJlZnMgdG8gdGhlIGFzc29jaWF0ZWQgYmxvYiBhbmQvb3IgdHJlZSBvYmplY3RzLiBBCisJPDxkZWZfdHJlZSx0cmVlPj4gaXMgZXF1aXZhbGVudCB0byBhIDw8ZGVmX2RpcmVjdG9yeSxkaXJlY3Rvcnk+Pi4KKworW1tkZWZfdHJlZS1pc2hdXXRyZWUtaXNoOjoKKwlBIDw8ZGVmX3JlZixyZWY+PiBwb2ludGluZyB0byBlaXRoZXIgYSA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdAorCW9iamVjdD4+LCBhIDw8ZGVmX3RyZWVfb2JqZWN0LHRyZWUgb2JqZWN0Pj4sIG9yIGEgPDxkZWZfdGFnX29iamVjdCx0YWcKKwlvYmplY3Q+PiBwb2ludGluZyB0byBhIHRhZyBvciBjb21taXQgb3IgdHJlZSBvYmplY3QuCisKK1tbZGVmX3VubWVyZ2VkX2luZGV4XV11bm1lcmdlZCBpbmRleDo6CisJQW4gPDxkZWZfaW5kZXgsaW5kZXg+PiB3aGljaCBjb250YWlucyB1bm1lcmdlZAorCTw8ZGVmX2luZGV4X2VudHJ5LGluZGV4IGVudHJpZXM+Pi4KKworW1tkZWZfdW5yZWFjaGFibGVfb2JqZWN0XV11bnJlYWNoYWJsZSBvYmplY3Q6OgorCUFuIDw8ZGVmX29iamVjdCxvYmplY3Q+PiB3aGljaCBpcyBub3QgPDxkZWZfcmVhY2hhYmxlLHJlYWNoYWJsZT4+IGZyb20gYQorCTw8ZGVmX2JyYW5jaCxicmFuY2g+PiwgPDxkZWZfdGFnLHRhZz4+LCBvciBhbnkgb3RoZXIgcmVmZXJlbmNlLgorCitbW2RlZl91cHN0cmVhbV9icmFuY2hdXXVwc3RyZWFtIGJyYW5jaDo6CisJVGhlIGRlZmF1bHQgPDxkZWZfYnJhbmNoLGJyYW5jaD4+IHRoYXQgaXMgbWVyZ2VkIGludG8gdGhlIGJyYW5jaCBpbgorCXF1ZXN0aW9uIChvciB0aGUgYnJhbmNoIGluIHF1ZXN0aW9uIGlzIHJlYmFzZWQgb250bykuIEl0IGlzIGNvbmZpZ3VyZWQKKwl2aWEgYnJhbmNoLjxuYW1lPi5yZW1vdGUgYW5kIGJyYW5jaC48bmFtZT4ubWVyZ2UuIElmIHRoZSB1cHN0cmVhbSBicmFuY2gKKwlvZiAnQScgaXMgJ29yaWdpbi9CJyBzb21ldGltZXMgd2Ugc2F5ICInQScgaXMgdHJhY2tpbmcgJ29yaWdpbi9CJyIuCisKK1tbZGVmX3dvcmtpbmdfdHJlZV1dd29ya2luZyB0cmVlOjoKKwlUaGUgdHJlZSBvZiBhY3R1YWwgY2hlY2tlZCBvdXQgZmlsZXMuICBUaGUgd29ya2luZyB0cmVlIG5vcm1hbGx5CisJY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIHRoZSA8PGRlZl9IRUFELEhFQUQ+PiBjb21taXQncyB0cmVlLAorCXBsdXMgYW55IGxvY2FsIGNoYW5nZXMgdGhhdCB5b3UgaGF2ZSBtYWRlIGJ1dCBub3QgeWV0IGNvbW1pdHRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8taW5kZXguc2ggYi9Eb2N1bWVudGF0aW9uL2hvd3RvLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0YWEzMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvLWluZGV4LnNoCkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9zaAorCitjYXQgPDxcRU9GCitHSVQgSG93dG8gSW5kZXgKKz09PT09PT09PT09PT09PQorCitIZXJlIGlzIGEgY29sbGVjdGlvbiBvZiBtYWlsaW5nIGxpc3QgcG9zdGluZ3MgbWFkZSBieSB2YXJpb3VzCitwZW9wbGUgZGVzY3JpYmluZyBob3cgdGhleSB1c2UgZ2l0IGluIHRoZWlyIHdvcmtmbG93LgorCitFT0YKKworZm9yIHR4dAorZG8KKwl0aXRsZT1gZXhwciAiJHR4dCIgOiAnLiovXCguKlwpXC50eHQkJ2AKKwlmcm9tPWBzZWQgLW5lICcKKwkvXiQvcQorCS9eRnJvbTpbIAldL3sKKwkJcy8vLworCQlzL15bIAldKi8vCisJCXMvWyAJXSokLy8KKwkJcy9eL2J5IC8KKwkJcAorCX0KKwknICIkdHh0ImAKKworCWFic3RyYWN0PWBzZWQgLW5lICcKKwkvXkFic3RyYWN0OlsgCV0veworCQlzL15bXiAJXSovLworCQl4CisJCXMvLiovLworCQl4CisJCTogYWdhaW4KKwkJL15bIAldL3sKKwkJCXMvXlsgCV0qLy8KKwkJCUgKKwkJCW4KKwkJCWIgYWdhaW4KKwkJfQorCQl4CisJCXAKKwkJcQorCX0nICIkdHh0ImAKKworCWlmIGdyZXAgJ0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYycgPi9kZXYvbnVsbCAkdHh0CisJdGhlbgorCQlmaWxlPWBleHByICIkdHh0IiA6ICdcKC4qXClcLnR4dCQnYC5odG1sCisJZWxzZQorCQlmaWxlPSIkdHh0IgorCWZpCisKKwllY2hvICIqIGxpbms6JGZpbGVbJHRpdGxlXSAkZnJvbQorJGFic3RyYWN0CisKKyIKKworZG9uZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9tYWludGFpbi1naXQudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9tYWludGFpbi1naXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjNhMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL21haW50YWluLWdpdC50eHQKQEAgLTAsMCArMSwyNzYgQEAKK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK0RhdGU6IFdlZCwgMjEgTm92IDIwMDcgMTY6MzI6NTUgLTA4MDAKK1N1YmplY3Q6IEFkZGVuZHVtIHRvICJNYWludE5vdGVzIgorQWJzdHJhY3Q6IEltYWdpbmUgdGhhdCBnaXQgZGV2ZWxvcG1lbnQgaXMgcmFjaW5nIGFsb25nIGFzIHVzdWFsLCB3aGVuIG91ciBmcmllbmRseQorIG5laWdoYm9yaG9vZCBtYWludGFpbmVyIGlzIHN0cnVjayBkb3duIGJ5IGEgd2F5d2FyZCBidXMuIE91dCBvZiB0aGUKKyBob3JkZXMgb2Ygc3Vja2VycyAobG95YWwgZGV2ZWxvcGVycyksIHlvdSBoYXZlIGJlZW4gdHJpY2tlZCAoY2hvc2VuKSB0bworIHN0ZXAgdXAgYXMgdGhlIG5ldyBtYWludGFpbmVyLiBUaGlzIGhvd3RvIHdpbGwgc2hvdyB5b3UgImhvdyB0byIgZG8gaXQuCisKK1RoZSBtYWludGFpbmVyJ3MgZ2l0IHRpbWUgaXMgc3BlbnQgb24gdGhyZWUgYWN0aXZpdGllcy4KKworIC0gQ29tbXVuaWNhdGlvbiAoNjAlKQorCisgICBNYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnMgb24gZ2VuZXJhbCBkZXNpZ24sIGZpZWxkaW5nIHVzZXIKKyAgIHF1ZXN0aW9ucywgZGlhZ25vc2luZyBidWcgcmVwb3J0czsgcmV2aWV3aW5nLCBjb21tZW50aW5nIG9uLAorICAgc3VnZ2VzdGluZyBhbHRlcm5hdGl2ZXMgdG8sIGFuZCByZWplY3RpbmcgcGF0Y2hlcy4KKworIC0gSW50ZWdyYXRpb24gKDMwJSkKKworICAgQXBwbHlpbmcgbmV3IHBhdGNoZXMgZnJvbSB0aGUgY29udHJpYnV0b3JzIHdoaWxlIHNwb3R0aW5nIGFuZAorICAgY29ycmVjdGluZyBtaW5vciBtaXN0YWtlcywgc2h1ZmZsaW5nIHRoZSBpbnRlZ3JhdGlvbiBhbmQKKyAgIHRlc3RpbmcgYnJhbmNoZXMsIHB1c2hpbmcgdGhlIHJlc3VsdHMgb3V0LCBjdXR0aW5nIHRoZQorICAgcmVsZWFzZXMsIGFuZCBtYWtpbmcgYW5ub3VuY2VtZW50cy4KKworIC0gT3duIGRldmVsb3BtZW50ICgxMCUpCisKKyAgIFNjcmF0Y2hpbmcgbXkgb3duIGl0Y2ggYW5kIHNlbmRpbmcgcHJvcG9zZWQgcGF0Y2ggc2VyaWVzIG91dC4KKworVGhlIHBvbGljeSBvbiBJbnRlZ3JhdGlvbiBpcyBpbmZvcm1hbGx5IG1lbnRpb25lZCBpbiAiQSBOb3RlCitmcm9tIHRoZSBtYWludGFpbmVyIiBtZXNzYWdlLCB3aGljaCBpcyBwZXJpb2RpY2FsbHkgcG9zdGVkIHRvCit0aGlzIG1haWxpbmcgbGlzdCBhZnRlciBlYWNoIGZlYXR1cmUgcmVsZWFzZSBpcyBtYWRlLgorCitUaGUgcG9saWN5LgorCisgLSBGZWF0dXJlIHJlbGVhc2VzIGFyZSBudW1iZXJlZCBhcyB2WC5ZLlogYW5kIGFyZSBtZWFudCB0bworICAgY29udGFpbiBidWdmaXhlcyBhbmQgZW5oYW5jZW1lbnRzIGluIGFueSBhcmVhLCBpbmNsdWRpbmcKKyAgIGZ1bmN0aW9uYWxpdHksIHBlcmZvcm1hbmNlIGFuZCB1c2FiaWxpdHksIHdpdGhvdXQgcmVncmVzc2lvbi4KKworIC0gTWFpbnRlbmFuY2UgcmVsZWFzZXMgYXJlIG51bWJlcmVkIGFzIHZYLlkuWi5XIGFuZCBhcmUgbWVhbnQKKyAgIHRvIGNvbnRhaW4gb25seSBidWdmaXhlcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdlguWS5aIGZlYXR1cmUKKyAgIHJlbGVhc2UgYW5kIGVhcmxpZXIgbWFpbnRlbmFuY2UgcmVsZWFzZXMgdlguWS5aLlYgKFYgPCBXKS4KKworIC0gJ21hc3RlcicgYnJhbmNoIGlzIHVzZWQgdG8gcHJlcGFyZSBmb3IgdGhlIG5leHQgZmVhdHVyZQorICAgcmVsZWFzZS4gSW4gb3RoZXIgd29yZHMsIGF0IHNvbWUgcG9pbnQsIHRoZSB0aXAgb2YgJ21hc3RlcicKKyAgIGJyYW5jaCBpcyB0YWdnZWQgd2l0aCB2WC5ZLlouCisKKyAtICdtYWludCcgYnJhbmNoIGlzIHVzZWQgdG8gcHJlcGFyZSBmb3IgdGhlIG5leHQgbWFpbnRlbmFuY2UKKyAgIHJlbGVhc2UuICBBZnRlciB0aGUgZmVhdHVyZSByZWxlYXNlIHZYLlkuWiBpcyBtYWRlLCB0aGUgdGlwCisgICBvZiAnbWFpbnQnIGJyYW5jaCBpcyBzZXQgdG8gdGhhdCByZWxlYXNlLCBhbmQgYnVnZml4ZXMgd2lsbAorICAgYWNjdW11bGF0ZSBvbiB0aGUgYnJhbmNoLCBhbmQgYXQgc29tZSBwb2ludCwgdGhlIHRpcCBvZiB0aGUKKyAgIGJyYW5jaCBpcyB0YWdnZWQgd2l0aCB2WC5ZLlouMSwgdlguWS5aLjIsIGFuZCBzbyBvbi4KKworIC0gJ25leHQnIGJyYW5jaCBpcyB1c2VkIHRvIHB1Ymxpc2ggY2hhbmdlcyAoYm90aCBlbmhhbmNlbWVudHMKKyAgIGFuZCBmaXhlcykgdGhhdCAoMSkgaGF2ZSB3b3J0aHdoaWxlIGdvYWwsICgyKSBhcmUgaW4gYSBmYWlybHkKKyAgIGdvb2Qgc2hhcGUgc3VpdGFibGUgZm9yIGV2ZXJ5ZGF5IHVzZSwgKDMpIGJ1dCBoYXZlIG5vdCB5ZXQKKyAgIGRlbW9uc3RyYXRlZCB0byBiZSByZWdyZXNzaW9uIGZyZWUuICBOZXcgY2hhbmdlcyBhcmUgdGVzdGVkCisgICBpbiAnbmV4dCcgYmVmb3JlIG1lcmdlZCB0byAnbWFzdGVyJy4KKworIC0gJ3B1JyBicmFuY2ggaXMgdXNlZCB0byBwdWJsaXNoIG90aGVyIHByb3Bvc2VkIGNoYW5nZXMgdGhhdCBkbworICAgbm90IHlldCBwYXNzIHRoZSBjcml0ZXJpYSBzZXQgZm9yICduZXh0Jy4KKworIC0gVGhlIHRpcHMgb2YgJ21hc3RlcicsICdtYWludCcgYW5kICduZXh0JyBicmFuY2hlcyB3aWxsIGFsd2F5cworICAgZmFzdC1mb3J3YXJkLCB0byBhbGxvdyBwZW9wbGUgdG8gYnVpbGQgdGhlaXIgb3duCisgICBjdXN0b21pemF0aW9uIG9uIHRvcCBvZiB0aGVtLgorCisgLSBVc3VhbGx5ICdtYXN0ZXInIGNvbnRhaW5zIGFsbCBvZiAnbWFpbnQnLCAnbmV4dCcgY29udGFpbnMgYWxsCisgICBvZiAnbWFzdGVyJyBhbmQgJ3B1JyBjb250YWlucyBhbGwgb2YgJ25leHQnLgorCisgLSBUaGUgdGlwIG9mICdtYXN0ZXInIGlzIG1lYW50IHRvIGJlIG1vcmUgc3RhYmxlIHRoYW4gYW55CisgICB0YWdnZWQgcmVsZWFzZXMsIGFuZCB0aGUgdXNlcnMgYXJlIGVuY291cmFnZWQgdG8gZm9sbG93IGl0LgorCisgLSBUaGUgJ25leHQnIGJyYW5jaCBpcyB3aGVyZSBuZXcgYWN0aW9uIHRha2VzIHBsYWNlLCBhbmQgdGhlCisgICB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byB0ZXN0IGl0IHNvIHRoYXQgcmVncmVzc2lvbnMgYW5kIGJ1Z3MKKyAgIGFyZSBmb3VuZCBiZWZvcmUgbmV3IHRvcGljcyBhcmUgbWVyZ2VkIHRvICdtYXN0ZXInLgorCisKK0EgdHlwaWNhbCBnaXQgZGF5IGZvciB0aGUgbWFpbnRhaW5lciBpbXBsZW1lbnRzIHRoZSBhYm92ZSBwb2xpY3kKK2J5IGRvaW5nIHRoZSBmb2xsb3dpbmc6CisKKyAtIFNjYW4gbWFpbGluZyBsaXN0IGFuZCAjZ2l0IGNoYW5uZWwgbG9nLiAgUmVzcG9uZCB3aXRoIHJldmlldworICAgY29tbWVudHMsIHN1Z2dlc3Rpb25zIGV0Yy4gIEtpYml0ei4gIENvbGxlY3QgcG90ZW50aWFsbHkKKyAgIHVzYWJsZSBwYXRjaGVzIGZyb20gdGhlIG1haWxpbmcgbGlzdC4gIFBhdGNoZXMgYWJvdXQgYSBzaW5nbGUKKyAgIHRvcGljIGdvIHRvIG9uZSBtYWlsYm94IChJIHJlYWQgbXkgbWFpbCBpbiBHbnVzLCBhbmQgdHlwZQorICAgXEMtbyB0byBzYXZlL2FwcGVuZCBtZXNzYWdlcyBpbiBmaWxlcyBpbiBtYm94IGZvcm1hdCkuCisKKyAtIFJldmlldyB0aGUgcGF0Y2hlcyBpbiB0aGUgc2F2ZWQgbWFpbGJveGVzLiAgRWRpdCBwcm9wb3NlZCBsb2cKKyAgIG1lc3NhZ2UgZm9yIHR5cG9maXhlcyBhbmQgY2xhcmlmaWNhdGlvbnMsIGFuZCBhZGQgQWNrcworICAgY29sbGVjdGVkIGZyb20gdGhlIGxpc3QuICBFZGl0IHBhdGNoIHRvIGluY29ycG9yYXRlICJPb3BzLAorICAgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGxpa2UgdGhpcyIgZml4ZXMgZnJvbSB0aGUgZGlzY3Vzc2lvbi4KKworIC0gQ2xhc3NpZnkgdGhlIGNvbGxlY3RlZCBwYXRjaGVzIGFuZCBoYW5kbGUgJ21hc3RlcicgYW5kCisgICAnbWFpbnQnIHVwZGF0ZXM6CisKKyAgIC0gT2J2aW91c2x5IGNvcnJlY3QgZml4ZXMgdGhhdCBwZXJ0YWluIHRvIHRoZSB0aXAgb2YgJ21haW50JworICAgICBhcmUgZGlyZWN0bHkgYXBwbGllZCB0byAnbWFpbnQnLgorCisgICAtIE9idmlvdXNseSBjb3JyZWN0IGZpeGVzIHRoYXQgcGVydGFpbiB0byB0aGUgdGlwIG9mICdtYXN0ZXInCisgICAgIGFyZSBkaXJlY3RseSBhcHBsaWVkIHRvICdtYXN0ZXInLgorCisgICBUaGlzIHN0ZXAgaXMgZG9uZSB3aXRoICJnaXQgYW0iLgorCisgICAgICQgZ2l0IGNoZWNrb3V0IG1hc3RlciAgICA7IyBvciAiZ2l0IGNoZWNrb3V0IG1haW50IgorICAgICAkIGdpdCBhbSAtMyAtcyBtYWlsYm94CisgICAgICQgbWFrZSB0ZXN0CisKKyAtIE1lcmdlIGRvd253YXJkcyAobWFpbnQtPm1hc3Rlcik6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgbWFzdGVyCisgICAgICQgZ2l0IG1lcmdlIG1haW50CisgICAgICQgbWFrZSB0ZXN0CisKKyAtIFJldmlldyB0aGUgbGFzdCBpc3N1ZSBvZiAiV2hhdCdzIGNvb2tpbmciIG1lc3NhZ2UsIHJldmlldyB0aGUKKyAgIHRvcGljcyBzY2hlZHVsZWQgZm9yIG1lcmdpbmcgdXB3YXJkcyAodG9waWMtPm1hc3RlciBhbmQKKyAgIHRvcGljLT5tYWludCksIGFuZCBtZXJnZS4KKworICAgICAkIGdpdCBjaGVja291dCBtYXN0ZXIgICAgOyMgb3IgImdpdCBjaGVja291dCBtYWludCIKKyAgICAgJCBnaXQgbWVyZ2UgYWkvdG9waWMgICAgIDsjIG9yICJnaXQgbWVyZ2UgYWkvbWFpbnQtdG9waWMiCisgICAgICQgZ2l0IGxvZyAtcCBPUklHX0hFQUQuLiA7IyBmaW5hbCByZXZpZXcKKyAgICAgJCBnaXQgZGlmZiBPUklHX0hFQUQuLiAgIDsjIGZpbmFsIHJldmlldworICAgICAkIG1ha2UgdGVzdCAgICAgICAgICAgICAgOyMgZmluYWwgcmV2aWV3CisgICAgICQgZ2l0IGJyYW5jaCAtZCBhaS90b3BpYyA7IyBvciAiZ2l0IGJyYW5jaCAtZCBhaS9tYWludC10b3BpYyIKKworIC0gTWVyZ2UgZG93bndhcmRzIChtYWludC0+bWFzdGVyKSBpZiBuZWVkZWQ6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgbWFzdGVyCisgICAgICQgZ2l0IG1lcmdlIG1haW50CisgICAgICQgbWFrZSB0ZXN0CisKKyAtIE1lcmdlIGRvd253YXJkcyAobWFzdGVyLT5uZXh0KSBpZiBuZWVkZWQ6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgbmV4dAorICAgICAkIGdpdCBtZXJnZSBtYXN0ZXIKKyAgICAgJCBtYWtlIHRlc3QKKworIC0gSGFuZGxlIHRoZSByZW1haW5pbmcgcGF0Y2hlczoKKworICAgLSBBbnl0aGluZyB1bm9idmlvdXMgdGhhdCBpcyBhcHBsaWNhYmxlIHRvICdtYXN0ZXInIChpbiBvdGhlcgorICAgICB3b3JkcywgZG9lcyBub3QgZGVwZW5kIG9uIGFueXRoaW5nIHRoYXQgaXMgc3RpbGwgaW4gJ25leHQnCisgICAgIGFuZCBub3QgaW4gJ21hc3RlcicpIGlzIGFwcGxpZWQgdG8gYSBuZXcgdG9waWMgYnJhbmNoIHRoYXQKKyAgICAgaXMgZm9ya2VkIGZyb20gdGhlIHRpcCBvZiAnbWFzdGVyJy4gIFRoaXMgaW5jbHVkZXMgYm90aAorICAgICBlbmhhbmNlbWVudHMgYW5kIHVub2J2aW91cyBmaXhlcyB0byAnbWFzdGVyJy4gIEEgdG9waWMKKyAgICAgYnJhbmNoIGlzIG5hbWVkIGFzIGFpL3RvcGljIHdoZXJlICJhaSIgaXMgdHlwaWNhbGx5CisgICAgIGF1dGhvcidzIGluaXRpYWwgYW5kICJ0b3BpYyIgaXMgYSBkZXNjcmlwdGl2ZSBuYW1lIG9mIHRoZQorICAgICB0b3BpYyAoaW4gb3RoZXIgd29yZHMsICJ3aGF0J3MgdGhlIHNlcmllcyBpcyBhYm91dCIpLgorCisgICAtIEFuIHVub2J2aW91cyBmaXggbWVhbnQgZm9yICdtYWludCcgaXMgYXBwbGllZCB0byBhIG5ldworICAgICB0b3BpYyBicmFuY2ggdGhhdCBpcyBmb3JrZWQgZnJvbSB0aGUgdGlwIG9mICdtYWludCcuICBUaGUKKyAgICAgdG9waWMgaXMgbmFtZWQgYXMgYWkvbWFpbnQtdG9waWMuCisKKyAgIC0gQ2hhbmdlcyB0aGF0IHBlcnRhaW4gdG8gYW4gZXhpc3RpbmcgdG9waWMgYXJlIGFwcGxpZWQgdG8KKyAgICAgdGhlIGJyYW5jaCwgYnV0OgorCisgICAgIC0gb2J2aW91c2x5IGNvcnJlY3Qgb25lcyBhcmUgYXBwbGllZCBmaXJzdDsKKworICAgICAtIHF1ZXN0aW9uYWJsZSBvbmVzIGFyZSBkaXNjYXJkZWQgb3IgYXBwbGllZCB0byBuZWFyIHRoZSB0aXA7CisKKyAgIC0gUmVwbGFjZW1lbnQgcGF0Y2hlcyB0byBhbiBleGlzdGluZyB0b3BpYyBhcmUgYWNjZXB0ZWQgb25seQorICAgICBmb3IgY29tbWl0cyBub3QgaW4gJ25leHQnLgorCisgICBUaGUgYWJvdmUgZXhjZXB0IHRoZSAicmVwbGFjZW1lbnQiIGFyZSBhbGwgZG9uZSB3aXRoOgorCisgICAgICQgZ2l0IGFtIC0zIC1zIG1haWxib3gKKworICAgd2hpbGUgcGF0Y2ggcmVwbGFjZW1lbnQgaXMgb2Z0ZW4gZG9uZSBieToKKworICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggYWkvdG9waWN+JG4uLmFpL3RvcGljIDsjIGV4cG9ydCBleGlzdGluZworCisgICB0aGVuIHJlcGxhY2Ugc29tZSBwYXJ0cyB3aXRoIHRoZSBuZXcgcGF0Y2gsIGFuZCByZWFwcGx5aW5nOgorCisgICAgICQgZ2l0IHJlc2V0IC0taGFyZCBhaS90b3BpY34kbgorICAgICAkIGdpdCBhbSAtMyAtcyAwMDAqLnR4dAorCisgICBUaGUgZnVsbCB0ZXN0IHN1aXRlIGlzIGFsd2F5cyBydW4gZm9yICdtYWludCcgYW5kICdtYXN0ZXInCisgICBhZnRlciBwYXRjaCBhcHBsaWNhdGlvbjsgZm9yIHRvcGljIGJyYW5jaGVzIHRoZSB0ZXN0cyBhcmUgcnVuCisgICBhcyB0aW1lIHBlcm1pdHMuCisKKyAtIFVwZGF0ZSAiV2hhdCdzIGNvb2tpbmciIG1lc3NhZ2UgdG8gcmV2aWV3IHRoZSB1cGRhdGVzIHRvCisgICBleGlzdGluZyB0b3BpY3MsIG5ld2x5IGFkZGVkIHRvcGljcyBhbmQgZ3JhZHVhdGVkIHRvcGljcy4KKworICAgVGhpcyBzdGVwIGlzIGhlbHBlZCB3aXRoIE1ldGEvY29vayBzY3JpcHQgKHdoZXJlIE1ldGEvIGNvbnRhaW5zCisgICBhIGNoZWNrb3V0IG9mIHRoZSAndG9kbycgYnJhbmNoKS4KKworIC0gTWVyZ2UgdG9waWNzIHRvICduZXh0Jy4gIEZvciBlYWNoIGJyYW5jaCB3aG9zZSB0aXAgaXMgbm90CisgICBtZXJnZWQgdG8gJ25leHQnLCBvbmUgb2YgdGhyZWUgdGhpbmdzIGNhbiBoYXBwZW46CisKKyAgIC0gVGhlIGNvbW1pdHMgYXJlIGFsbCBuZXh0LXdvcnRoeTsgbWVyZ2UgdGhlIHRvcGljIHRvIG5leHQ6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgbmV4dAorICAgICAkIGdpdCBtZXJnZSBhaS90b3BpYyAgICAgOyMgb3IgImdpdCBtZXJnZSBhaS9tYWludC10b3BpYyIKKyAgICAgJCBtYWtlIHRlc3QKKworICAgLSBUaGUgbmV3IHBhcnRzIGFyZSBvZiBtaXhlZCBxdWFsaXR5LCBidXQgZWFybGllciBvbmVzIGFyZQorICAgICBuZXh0LXdvcnRoeTsgbWVyZ2UgdGhlIGVhcmx5IHBhcnRzIHRvIG5leHQ6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgbmV4dAorICAgICAkIGdpdCBtZXJnZSBhaS90b3BpY34yICAgOyMgdGhlIHRpcCB0d28gYXJlIGR1YmlvdXMKKyAgICAgJCBtYWtlIHRlc3QKKworICAgLSBOb3RoaW5nIGlzIG5leHQtd29ydGh5OyBkbyBub3QgZG8gYW55dGhpbmcuCisKKyAtIFsqKiBPQlNPTEVURSAqKl0gT3B0aW9uYWxseSByZWJhc2UgdG9waWNzIHRoYXQgZG8gbm90IGhhdmUgYW55IGNvbW1pdAorICAgaW4gbmV4dCB5ZXQsIHdoZW4gdGhleSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgbG93LWxldmVsIGZyYW1ld29yaworICAgY2hhbmdlIHRoYXQgaXMgbWVyZ2VkIHRvICdtYXN0ZXInIGFscmVhZHkuCisKKyAgICAgJCBnaXQgcmViYXNlIG1hc3RlciBhaS90b3BpYworCisgICBUaGlzIHN0ZXAgaXMgaGVscGVkIHdpdGggTWV0YS9naXQtdG9waWMucGVybCBzY3JpcHQgdG8KKyAgIGlkZW50aWZ5IHdoaWNoIHRvcGljIGlzIHJlYmFzZWFibGUuICBUaGVyZSBhbHNvIGlzIGEKKyAgIHByZS1yZWJhc2UgaG9vayB0byBtYWtlIHN1cmUgdGhhdCB0b3BpY3MgdGhhdCBhcmUgYWxyZWFkeSBpbgorICAgJ25leHQnIGFyZSBub3QgcmViYXNlZCBiZXlvbmQgdGhlIG1lcmdlZCBjb21taXQuCisKKyAtIFsqKiBPQlNPTEVURSAqKl0gUmVidWlsZCAicHUiIHRvIG1lcmdlIHRoZSB0aXBzIG9mIHRvcGljcyBub3QgaW4gJ25leHQnLgorCisgICAgICQgZ2l0IGNoZWNrb3V0IHB1CisgICAgICQgZ2l0IHJlc2V0IC0taGFyZCBuZXh0CisgICAgICQgZ2l0IG1lcmdlIGFpL3RvcGljICAgICA7IyByZXBlYXQgZm9yIGFsbCByZW1haW5pbmcgdG9waWNzCisgICAgICQgbWFrZSB0ZXN0CisKKyAgIFRoaXMgc3RlcCBpcyBoZWxwZWQgd2l0aCBNZXRhL1BVIHNjcmlwdAorCisgLSBQdXNoIGZvdXIgaW50ZWdyYXRpb24gYnJhbmNoZXMgdG8gYSBwcml2YXRlIHJlcG9zaXRvcnkgYXQKKyAgIGsub3JnIGFuZCBydW4gIm1ha2UgdGVzdCIgb24gYWxsIG9mIHRoZW0uCisKKyAtIFB1c2ggZm91ciBpbnRlZ3JhdGlvbiBicmFuY2hlcyB0byAvcHViL3NjbS9naXQvZ2l0LmdpdCBhdAorICAgay5vcmcuICBUaGlzIHRyaWdnZXJzIGl0cyBwb3N0LXVwZGF0ZSBob29rIHdoaWNoOgorCisgICAgKDEpIHJ1bnMgImdpdCBwdWxsIiBpbiAkSE9NRS9naXQtZG9jLyByZXBvc2l0b3J5IHRvIHB1bGwKKyAgICAgICAgJ21hc3RlcicganVzdCBwdXNoZWQgb3V0OworCisgICAgKDIpIHJ1bnMgIm1ha2UgZG9jIiBpbiAkSE9NRS9naXQtZG9jLywgaW5zdGFsbCB0aGUgZ2VuZXJhdGVkCisgICAgICAgIGRvY3VtZW50YXRpb24gaW4gc3RhZ2luZyBhcmVhcywgd2hpY2ggYXJlIHNlcGFyYXRlCisgICAgICAgIHJlcG9zaXRvcmllcyB0aGF0IGhhdmUgaHRtbCBhbmQgbWFuIGJyYW5jaGVzIGNoZWNrZWQKKyAgICAgICAgb3V0LgorCisgICAgKDMpIHJ1bnMgImdpdCBjb21taXQiIGluIHRoZSBzdGFnaW5nIGFyZWFzLCBhbmQgcnVuICJnaXQKKyAgICAgICAgcHVzaCIgYmFjayB0byAvcHViL3NjbS9naXQvZ2l0LmdpdC8gdG8gdXBkYXRlIHRoZSBodG1sCisgICAgICAgIGFuZCBtYW4gYnJhbmNoZXMuCisKKyAgICAoNCkgaW5zdGFsbHMgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gdG8gL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvCisgICAgICAgIHRvIGJlIHZpZXdlZCBmcm9tIGh0dHA6Ly93d3cua2VybmVsLm9yZy8KKworIC0gRmV0Y2ggaHRtbCBhbmQgbWFuIGJyYW5jaGVzIGJhY2sgZnJvbSBrLm9yZywgYW5kIHB1c2ggZm91cgorICAgaW50ZWdyYXRpb24gYnJhbmNoZXMgYW5kIHRoZSB0d28gZG9jdW1lbnRhdGlvbiBicmFuY2hlcyB0bworICAgcmVwby5vci5jeiBhbmQgb3RoZXIgbWlycm9ycy4KKworCitTb21lIG9ic2VydmF0aW9ucyB0byBiZSBtYWRlLgorCisgKiBFYWNoIHRvcGljIGlzIHRlc3RlZCBpbmRpdmlkdWFsbHksIGFuZCBhbHNvIHRvZ2V0aGVyIHdpdGgKKyAgIG90aGVyIHRvcGljcyBjb29raW5nIGluICduZXh0Jy4gIFVudGlsIGl0IG1hdHVyZXMsIG5vbmUgcGFydAorICAgb2YgaXQgaXMgbWVyZ2VkIHRvICdtYXN0ZXInLgorCisgKiBBIHRvcGljIGFscmVhZHkgaW4gJ25leHQnIGNhbiBnZXQgZml4ZXMgd2hpbGUgc3RpbGwgaW4KKyAgICduZXh0Jy4gIFN1Y2ggYSB0b3BpYyB3aWxsIGhhdmUgbWFueSBtZXJnZXMgdG8gJ25leHQnIChpbgorICAgb3RoZXIgd29yZHMsICJnaXQgbG9nIC0tZmlyc3QtcGFyZW50IG5leHQiIHdpbGwgc2hvdyBtYW55CisgICAiTWVyZ2UgYWkvdG9waWMgdG8gbmV4dCIgZm9yIHRoZSBzYW1lIHRvcGljLgorCisgKiBBbiB1bm9idmlvdXMgZml4IGZvciAnbWFpbnQnIGlzIGNvb2tlZCBpbiAnbmV4dCcgYW5kIHRoZW4KKyAgIG1lcmdlZCB0byAnbWFzdGVyJyB0byBtYWtlIGV4dHJhIHN1cmUgaXQgaXMgT2sgYW5kIHRoZW4KKyAgIG1lcmdlZCB0byAnbWFpbnQnLgorCisgKiBFdmVuIHdoZW4gJ25leHQnIGJlY29tZXMgZW1wdHkgKGluIG90aGVyIHdvcmRzLCBhbGwgdG9waWNzCisgICBwcm92ZSBzdGFibGUgYW5kIGFyZSBtZXJnZWQgdG8gJ21hc3RlcicgYW5kICJnaXQgZGlmZiBtYXN0ZXIKKyAgIG5leHQiIHNob3dzIGVtcHR5KSwgaXQgaGFzIHRvbnMgb2YgbWVyZ2UgY29tbWl0cyB0aGF0IHdpbGwKKyAgIG5ldmVyIGJlIGluICdtYXN0ZXInLgorCisgKiBJbiBwcmluY2lwbGUsICJnaXQgbG9nIC0tZmlyc3QtcGFyZW50IG1hc3Rlci4ubmV4dCIgc2hvdWxkCisgICBzaG93IG5vdGhpbmcgYnV0IG1lcmdlcyAoaW4gcHJhY3RpY2UsIHRoZXJlIGFyZSBmaXh1cCBjb21taXRzCisgICBhbmQgcmV2ZXJ0cyB0aGF0IGFyZSBub3QgbWVyZ2VzKS4KKworICogQ29tbWl0cyBuZWFyIHRoZSB0aXAgb2YgYSB0b3BpYyBicmFuY2ggdGhhdCBhcmUgbm90IGluICduZXh0JworICAgYXJlIGZhaXIgZ2FtZSB0byBiZSBkaXNjYXJkZWQsIHJlcGxhY2VkIG9yIHJld3JpdHRlbi4KKyAgIENvbW1pdHMgYWxyZWFkeSBtZXJnZWQgdG8gJ25leHQnIHdpbGwgbm90IGJlLgorCisgKiBCZWluZyBpbiB0aGUgJ25leHQnIGJyYW5jaCBpcyBub3QgYSBndWFyYW50ZWUgZm9yIGEgdG9waWMgdG8KKyAgIGJlIGluY2x1ZGVkIGluIHRoZSBuZXh0IGZlYXR1cmUgcmVsZWFzZS4gIEJlaW5nIGluIHRoZQorICAgJ21hc3RlcicgYnJhbmNoIHR5cGljYWxseSBpcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vcmViYXNlLWZyb20taW50ZXJuYWwtYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmViYXNlLWZyb20taW50ZXJuYWwtYnJhbmNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGExYzBjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0CkBAIC0wLDAgKzEsMTYzIEBACitGcm9tOglKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitUbzoJZ2l0QHZnZXIua2VybmVsLm9yZworQ2M6CVBldHIgQmF1ZGlzIDxwYXNreUBzdXNlLmN6PiwgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorU3ViamVjdDogUmU6IHNlbmRpbmcgY2hhbmdlc2V0cyBmcm9tIHRoZSBtaWRkbGUgb2YgYSBnaXQgdHJlZQorRGF0ZToJU3VuLCAxNCBBdWcgMjAwNSAxODozNzozOSAtMDcwMAorQWJzdHJhY3Q6IEluIHRoaXMgYXJ0aWNsZSwgSkMgdGFsa3MgYWJvdXQgaG93IGhlIHJlYmFzZXMgdGhlCisgcHVibGljICJwdSIgYnJhbmNoIHVzaW5nIHRoZSBjb3JlIEdJVCB0b29scyB3aGVuIGhlIHVwZGF0ZXMKKyB0aGUgIm1hc3RlciIgYnJhbmNoLCBhbmQgaG93ICJyZWJhc2UiIHdvcmtzLiAgQWxzbyBkaXNjdXNzZWQKKyBpcyBob3cgdGhpcyBhcHBsaWVzIHRvIGluZGl2aWR1YWwgZGV2ZWxvcGVycyB3aG8gc2VuZHMgcGF0Y2hlcworIHVwc3RyZWFtLgorCitQZXRyIEJhdWRpcyA8cGFza3lAc3VzZS5jej4gd3JpdGVzOgorCis+IERlYXIgZGlhcnksIG9uIFN1biwgQXVnIDE0LCAyMDA1IGF0IDA5OjU3OjEzQU0gQ0VTVCwgSSBnb3QgYSBsZXR0ZXIKKz4gd2hlcmUgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiB0b2xkIG1lIHRoYXQuLi4KKz4+IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4gd3JpdGVzOgorPj4KKz4+ID4gSnVuaW8sIG1heWJlIHlvdSB3YW50IHRvIHRhbGsgYWJvdXQgaG93IHlvdSBtb3ZlIHBhdGNoZXMgZnJvbSB5b3VyICJwdSIKKz4+ID4gYnJhbmNoIHRvIHRoZSByZWFsIGJyYW5jaGVzLgorPj4KKz4gQWN0dWFsbHksIHdvdWxkbid0IHRoaXMgYmUgYWxzbyBwcmVjaXNlbHkgZm9yIHdoYXQgU3RHSVQgaXMgaW50ZW5kZWQgdG8/CisKK0V4YWN0bHkgbXkgZmVlbGluZy4gIEkgd2FzIHNvcnQgb2Ygd2FpdGluZyBmb3IgQ2F0YWxpbiB0byBzcGVhawordXAuICBXaXRoIGl0cyBiYXNpbmcgcGhpbG9zb3BoaWNhbCBhbmNlc3RyeSBvbiBxdWlsdCwgdGhpcyBpcwordGhlIGtpbmQgb2YgdGFzayBTdEdJVCBpcyBkZXNpZ25lZCB0byBkby4KKworSSBqdXN0IGhhdmUgZG9uZSBhIHNpbXBsZXIgb25lLCB0aGlzIHRpbWUgdXNpbmcgb25seSB0aGUgY29yZQorR0lUIHRvb2xzLgorCitJIGhhZCBhIGhhbmRmdWwgb2YgY29tbWl0cyB0aGF0IHdlcmUgYWhlYWQgb2YgbWFzdGVyIGluIHB1LCBhbmQgSQord2FudGVkIHRvIGFkZCBzb21lIGRvY3VtZW50YXRpb24gYnlwYXNzaW5nIG15IHVzdWFsIGhhYml0IG9mCitwbGFjaW5nIG5ldyB0aGluZ3MgaW4gcHUgZmlyc3QuICBBdCB0aGUgYmVnaW5uaW5nLCB0aGUgY29tbWl0CithbmNlc3RyeSBncmFwaCBsb29rZWQgbGlrZSB0aGlzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoicHUiIGhlYWQKKyAgICBtYXN0ZXIgLS0+ICMxIC0tPiAjMiAtLT4gIzMKKworU28gSSBzdGFydGVkIGZyb20gbWFzdGVyLCBtYWRlIGEgYnVuY2ggb2YgZWRpdHMsIGFuZCBjb21taXR0ZWQ6CisKKyAgICAkIGdpdCBjaGVja291dCBtYXN0ZXIKKyAgICAkIGNkIERvY3VtZW50YXRpb247IGVkIGdpdC50eHQgLi4uCisgICAgJCBjZCAuLjsgZ2l0IGFkZCBEb2N1bWVudGF0aW9uLyoudHh0CisgICAgJCBnaXQgY29tbWl0IC1zCisKK0FmdGVyIHRoZSBjb21taXQsIHRoZSBhbmNlc3RyeSBncmFwaCB3b3VsZCBsb29rIGxpa2UgdGhpczoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiJwdSIgaGVhZAorICAgIG1hc3Rlcl4gLS0+ICMxIC0tPiAjMiAtLT4gIzMKKyAgICAgICAgICBcCisgICAgICAgICAgICBcLS0tPiBtYXN0ZXIKKworVGhlIG9sZCBtYXN0ZXIgaXMgbm93IG1hc3Rlcl4gKHRoZSBmaXJzdCBwYXJlbnQgb2YgdGhlIG1hc3RlcikuCitUaGUgbmV3IG1hc3RlciBjb21taXQgaG9sZHMgbXkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCitOb3cgSSBoYXZlIHRvIGRlYWwgd2l0aCAicHUiIGJyYW5jaC4KKworVGhpcyBpcyB0aGUga2luZCBvZiBzaXR1YXRpb24gSSB1c2VkIHRvIGhhdmUgYWxsIHRoZSB0aW1lIHdoZW4KK0xpbnVzIHdhcyB0aGUgbWFpbnRhaW5lciBhbmQgSSB3YXMgYSBjb250cmlidXRvciwgd2hlbiB5b3UgbG9vaworYXQgIm1hc3RlciIgYnJhbmNoIGJlaW5nIHRoZSAibWFpbnRhaW5lciIgYnJhbmNoLCBhbmQgInB1IgorYnJhbmNoIGJlaW5nIHRoZSAiY29udHJpYnV0b3IiIGJyYW5jaC4gIFlvdXIgd29yayBzdGFydGVkIGF0IHRoZQordGlwIG9mIHRoZSAibWFpbnRhaW5lciIgYnJhbmNoIHNvbWUgdGltZSBhZ28sIHlvdSBtYWRlIGEgbG90IG9mCitwcm9ncmVzcyBpbiB0aGUgbWVhbnRpbWUsIGFuZCBub3cgdGhlIG1haW50YWluZXIgYnJhbmNoIGhhcyBzb21lCitvdGhlciBjb21taXRzIHlvdSBkbyBub3QgaGF2ZSB5ZXQuICBBbmQgImdpdCByZWJhc2UiIHdhcyB3cml0dGVuCit3aXRoIHRoZSBleHBsaWNpdCBwdXJwb3NlIG9mIGhlbHBpbmcgdG8gbWFpbnRhaW4gYnJhbmNoZXMgbGlrZQorInB1Ii4gIFlvdSBfY291bGRfIG1lcmdlIG1hc3RlciB0byBwdSBhbmQga2VlcCBnb2luZywgYnV0IGlmIHlvdQorZXZlbnR1YWxseSB3YW50IHRvIGNoZXJyeXBpY2sgYW5kIG1lcmdlIHNvbWUgYnV0IG5vdCBuZWNlc3NhcmlseQorYWxsIGNoYW5nZXMgYmFjayB0byB0aGUgbWFzdGVyIGJyYW5jaCwgaXQgb2Z0ZW4gbWFrZXMgbGF0ZXIKK29wZXJhdGlvbnMgZm9yIF95b3VfIGVhc2llciBpZiB5b3UgcmViYXNlIChpLmUuIGNhcnJ5IGZvcndhcmQKK3lvdXIgY2hhbmdlcykgInB1IiByYXRoZXIgdGhhbiBtZXJnZS4gIFNvIEkgcmFuICJnaXQgcmViYXNlIjoKKworICAgICQgZ2l0IGNoZWNrb3V0IHB1CisgICAgJCBnaXQgcmViYXNlIG1hc3RlciBwdQorCitXaGF0IHRoaXMgZG9lcyBpcyB0byBwaWNrIGFsbCB0aGUgY29tbWl0cyBzaW5jZSB0aGUgY3VycmVudAorYnJhbmNoIChub3RlIHRoYXQgSSBub3cgYW0gb24gInB1IiBicmFuY2gpIGZvcmtlZCBmcm9tIHRoZQorbWFzdGVyIGJyYW5jaCwgYW5kIGZvcndhcmQgcG9ydCB0aGVzZSBjaGFuZ2VzLgorCisgICAgbWFzdGVyXiAtLT4gIzEgLS0+ICMyIC0tPiAjMworICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiJwdSIgaGVhZAorICAgICAgICAgICAgXC0tLT4gbWFzdGVyIC0tPiAjMScgLS0+ICMyJyAtLT4gIzMnCisKK1RoZSBkaWZmIGJldHdlZW4gbWFzdGVyXiBhbmQgIzEgaXMgYXBwbGllZCB0byBtYXN0ZXIgYW5kCitjb21taXR0ZWQgdG8gY3JlYXRlICMxJyBjb21taXQgd2l0aCB0aGUgY29tbWl0IGluZm9ybWF0aW9uIChsb2csCithdXRob3IgYW5kIGRhdGUpIHRha2VuIGZyb20gY29tbWl0ICMxLiAgT24gdG9wIG9mIHRoYXQgIzInIGFuZCAjMycKK2NvbW1pdHMgYXJlIG1hZGUgc2ltaWxhcmx5IG91dCBvZiAjMiBhbmQgIzMgY29tbWl0cy4KKworT2xkICMzIGlzIG5vdCByZWNvcmRlZCBpbiBhbnkgb2YgdGhlIC5naXQvcmVmcy9oZWFkcy8gZmlsZQorYW55bW9yZSwgc28gYWZ0ZXIgZG9pbmcgdGhpcyB5b3Ugd2lsbCBoYXZlIGRhbmdsaW5nIGNvbW1pdCBpZgoreW91IHJhbiBmc2NrLWNhY2hlLCB3aGljaCBpcyBub3JtYWwuICBBZnRlciB0ZXN0aW5nICJwdSIsIHlvdQorY2FuIHJ1biAiZ2l0IHBydW5lIiB0byBnZXQgcmlkIG9mIHRob3NlIG9yaWdpbmFsIHRocmVlIGNvbW1pdHMuCisKK1doaWxlIEkgYW0gdGFsa2luZyBhYm91dCAiZ2l0IHJlYmFzZSIsIEkgc2hvdWxkIHRhbGsgYWJvdXQgaG93Cit0byBkbyBjaGVycnlwaWNraW5nIHVzaW5nIG9ubHkgdGhlIGNvcmUgR0lUIHRvb2xzLgorCitMZXQncyBnbyBiYWNrIHRvIHRoZSBlYXJsaWVyIHBpY3R1cmUsIHdpdGggZGlmZmVyZW50IGxhYmVscy4KKworWW91LCBhcyBhbiBpbmRpdmlkdWFsIGRldmVsb3BlciwgY2xvbmVkIHVwc3RyZWFtIHJlcG9zaXRvcnkgYW5kCittYWRlIGEgY291cGxlIG9mIGNvbW1pdHMgb24gdG9wIG9mIGl0LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeW91ciAibWFzdGVyIiBoZWFkCisgICB1cHN0cmVhbSAtLT4gIzEgLS0+ICMyIC0tPiAjMworCitZb3Ugd291bGQgd2FudCBjaGFuZ2VzICMyIGFuZCAjMyBpbmNvcnBvcmF0ZWQgaW4gdGhlIHVwc3RyZWFtLAord2hpbGUgeW91IGZlZWwgdGhhdCAjMSBtYXkgbmVlZCBmdXJ0aGVyIGltcHJvdmVtZW50cy4gIFNvIHlvdQorcHJlcGFyZSAjMiBhbmQgIzMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uLgorCisgICAgJCBnaXQgZm9ybWF0LXBhdGNoIG1hc3Rlcl5eIG1hc3RlcgorCitUaGlzIGNyZWF0ZXMgdHdvIGZpbGVzLCAwMDAxLVhYWFgucGF0Y2ggYW5kIDAwMDItWFhYWC5wYXRjaC4gIFNlbmQKK3RoZW0gb3V0ICJUbzogIiB5b3VyIHByb2plY3QgbWFpbnRhaW5lciBhbmQgIkNjOiAiIHlvdXIgbWFpbGluZworbGlzdC4gIFlvdSBjb3VsZCB1c2UgY29udHJpYnV0ZWQgc2NyaXB0IGdpdC1zZW5kLWVtYWlsIGlmCit5b3VyIGhvc3QgaGFzIG5lY2Vzc2FyeSBwZXJsIG1vZHVsZXMgZm9yIHRoaXMsIGJ1dCB5b3VyIHVzdWFsCitNVUEgd291bGQgZG8gYXMgbG9uZyBhcyBpdCBkb2VzIG5vdCBjb3JydXB0IHdoaXRlc3BhY2VzIGluIHRoZQorcGF0Y2guCisKK1RoZW4geW91IHdvdWxkIHdhaXQsIGFuZCB5b3UgZmluZCBvdXQgdGhhdCB0aGUgdXBzdHJlYW0gcGlja2VkCit1cCB5b3VyIGNoYW5nZXMsIGFsb25nIHdpdGggb3RoZXIgY2hhbmdlcy4KKworICAgd2hlcmUgICAgICAgICAgICAgICAgICAgICAgKnlvdXIgIm1hc3RlciIgaGVhZAorICB1cHN0cmVhbSAtLT4gIzEgLS0+ICMyIC0tPiAjMworICAgIHVzZWQgICBcCisgICB0byBiZSAgICAgXC0tPiAjQSAtLT4gIzInIC0tPiAjMycgLS0+ICNCIC0tPiAjQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVwc3RyZWFtIGhlYWQKKworVGhlIHR3byBjb21taXRzICMyJyBhbmQgIzMnIGluIHRoZSBhYm92ZSBwaWN0dXJlIHJlY29yZCB0aGUgc2FtZQorY2hhbmdlcyB5b3VyIGUtbWFpbCBzdWJtaXNzaW9uIGZvciAjMiBhbmQgIzMgY29udGFpbmVkLCBidXQKK3Byb2JhYmx5IHdpdGggdGhlIG5ldyBzaWduLW9mZiBsaW5lIGFkZGVkIGJ5IHRoZSB1cHN0cmVhbQorbWFpbnRhaW5lciBhbmQgZGVmaW5pdGVseSB3aXRoIGRpZmZlcmVudCBjb21taXR0ZXIgYW5kIGFuY2VzdHJ5CitpbmZvcm1hdGlvbiwgdGhleSBhcmUgZGlmZmVyZW50IG9iamVjdHMgZnJvbSAjMiBhbmQgIzMgY29tbWl0cy4KKworWW91IGZldGNoIGZyb20gdXBzdHJlYW0sIGJ1dCBub3QgbWVyZ2UuCisKKyAgICAkIGdpdCBmZXRjaCB1cHN0cmVhbQorCitUaGlzIGxlYXZlcyB0aGUgdXBkYXRlZCB1cHN0cmVhbSBoZWFkIGluIC5naXQvRkVUQ0hfSEVBRCBidXQKK2RvZXMgbm90IHRvdWNoIHlvdXIgLmdpdC9IRUFEIG5vciAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyLgorWW91IHJ1biAiZ2l0IHJlYmFzZSIgbm93LgorCisgICAgJCBnaXQgcmViYXNlIEZFVENIX0hFQUQgbWFzdGVyCisKK0VhcmxpZXIsIEkgc2FpZCB0aGF0IHJlYmFzZSBhcHBsaWVzIGFsbCB0aGUgY29tbWl0cyBmcm9tIHlvdXIKK2JyYW5jaCBvbiB0b3Agb2YgdGhlIHVwc3RyZWFtIGhlYWQuICBXZWxsLCBJIGxpZWQuICAiZ2l0IHJlYmFzZSIKK2lzIGEgYml0IHNtYXJ0ZXIgdGhhbiB0aGF0IGFuZCBub3RpY2VzIHRoYXQgIzIgYW5kICMzIG5lZWQgbm90CitiZSBhcHBsaWVkLCBzbyBpdCBvbmx5IGFwcGxpZXMgIzEuICBUaGUgY29tbWl0IGFuY2VzdHJ5IGdyYXBoCitiZWNvbWVzIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKyAgIHdoZXJlICAgICAgICAgICAgICAgICAgICAgKnlvdXIgb2xkICJtYXN0ZXIiIGhlYWQKKyAgdXBzdHJlYW0gLS0+ICMxIC0tPiAjMiAtLT4gIzMKKyAgICB1c2VkICAgXCAgICAgICAgICAgICAgICAgICAgICB5b3VyIG5ldyAibWFzdGVyIiBoZWFkKgorICAgdG8gYmUgICAgIFwtLT4gI0EgLS0+ICMyJyAtLT4gIzMnIC0tPiAjQiAtLT4gI0MgLS0+ICMxJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkCisKK0FnYWluLCAiZ2l0IHBydW5lIiB3b3VsZCBkaXNjYXJkIHRoZSBkaXN1c2VkIGNvbW1pdHMgIzEtIzMgYW5kCit5b3UgY29udGludWUgb24gc3RhcnRpbmcgZnJvbSB0aGUgbmV3ICJtYXN0ZXIiIGhlYWQsIHdoaWNoIGlzCit0aGUgIzEnIGNvbW1pdC4KKworLWpjCisKKy0KK1RvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBnaXQiIGluCit0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZworTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYnVpbGQtZnJvbS11cGRhdGUtaG9vay50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYnVpbGQtZnJvbS11cGRhdGUtaG9vay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjNjc1NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmVidWlsZC1mcm9tLXVwZGF0ZS1ob29rLnR4dApAQCAtMCwwICsxLDg2IEBACitTdWJqZWN0OiBbSE9XVE9dIFVzaW5nIHBvc3QtdXBkYXRlIGhvb2sKK01lc3NhZ2UtSUQ6IDw3dnk4Nm82dXN4LmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQ+CitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitEYXRlOiBGcmksIDI2IEF1ZyAyMDA1IDE4OjE5OjEwIC0wNzAwCitBYnN0cmFjdDogSW4gdGhpcyBob3ctdG8gYXJ0aWNsZSwgSkMgdGFsa3MgYWJvdXQgaG93IGhlCisgdXNlcyB0aGUgcG9zdC11cGRhdGUgaG9vayB0byBhdXRvbWF0ZSBnaXQgZG9jdW1lbnRhdGlvbiBwYWdlCisgc2hvd24gYXQgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvLgorCitUaGUgcGFnZXMgdW5kZXIgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvCithcmUgYnVpbHQgZnJvbSBEb2N1bWVudGF0aW9uLyBkaXJlY3Rvcnkgb2YgdGhlIGdpdC5naXQgcHJvamVjdAorYW5kIG5lZWRlZCB0byBiZSBrZXB0IHVwLXRvLWRhdGUuICBUaGUgd3d3Lmtlcm5lbC5vcmcvIHNlcnZlcnMKK2FyZSBtaXJyb3JlZCBhbmQgSSB3YXMgdG9sZCB0aGF0IHRoZSBvcmlnaW4gb2YgdGhlIG1pcnJvciBpcyBvbgordGhlIG1hY2hpbmUgJHNvbWUua2VybmVsLm9yZywgb24gd2hpY2ggSSB3YXMgZ2l2ZW4gYW4gYWNjb3VudAord2hlbiBJIHRvb2sgb3ZlciBnaXQgbWFpbnRhaW5lcnNoaXAgZnJvbSBMaW51cy4KKworVGhlIGRpcmVjdG9yaWVzIHJlbGV2YW50IHRvIHRoaXMgaG93LXRvIGFyZSB0aGVzZSB0d286CisKKyAgICAvcHViL3NjbS9naXQvZ2l0LmdpdC8JVGhlIHB1YmxpYyBnaXQgcmVwb3NpdG9yeS4KKyAgICAvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy8JVGhlIEhUTUwgZG9jdW1lbnRhdGlvbiBwYWdlLgorCitTbyBJIG1hZGUgYSByZXBvc2l0b3J5IHRvIGdlbmVyYXRlIHRoZSBkb2N1bWVudGF0aW9uIHVuZGVyIG15Citob21lIGRpcmVjdG9yeSBvdmVyIHRoZXJlLgorCisgICAgJCBjZAorICAgICQgbWtkaXIgZG9jLWdpdCAmJiBjZCBkb2MtZ2l0CisgICAgJCBnaXQgY2xvbmUgL3B1Yi9zY20vZ2l0L2dpdC5naXQvIGRvY2dlbgorCitXaGF0IG5lZWRzIHRvIGhhcHBlbiBpcyB0byB1cGRhdGUgdGhlICRIT01FL2RvYy1naXQvZG9jZ2VuLword29ya2luZyB0cmVlLCBidWlsZCBIVE1MIGRvY3MgdGhlcmUgYW5kIGluc3RhbGwgdGhlIHJlc3VsdCBpbgorL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvIGRpcmVjdG9yeS4gIFNvIEkgd3JvdGUgYSBsaXR0bGUKK3NjcmlwdDoKKworICAgICQgY2F0ID5kb2RvZG9jLnNoIDw8XEVPRgorICAgICMhL2Jpbi9zaAorICAgIGNkICRIT01FL2RvYy1naXQvZG9jZ2VuIHx8IGV4aXQKKworICAgIHVuc2V0IEdJVF9ESVIKKworICAgIGdpdCBwdWxsIC9wdWIvc2NtL2dpdC9naXQuZ2l0LyBtYXN0ZXIgJiYKKyAgICBjZCBEb2N1bWVudGF0aW9uICYmCisgICAgbWFrZSBpbnN0YWxsLXdlYmRvYworICAgIEVPRgorCitJbml0aWFsbHkgSSB1c2VkIHRvIHJ1biB0aGlzIGJ5IGhhbmQgd2hlbmV2ZXIgSSBwdXNoIGludG8gdGhlCitwdWJsaWMgZ2l0IHJlcG9zaXRvcnkuICBUaGVuIEkgZGlkIGEgY3JvbiBqb2IgdGhhdCByYW4gdHdpY2UgYQorZGF5LiAgVGhlIGN1cnJlbnQgcm91bmQgdXNlcyB0aGUgcG9zdC11cGRhdGUgaG9vayBtZWNoYW5pc20sCitsaWtlIHRoaXM6CisKKyAgICAkIGNhdCA+L3B1Yi9zY20vZ2l0L2dpdC5naXQvaG9va3MvcG9zdC11cGRhdGUgPDxcRU9GCisgICAgIyEvYmluL3NoCisgICAgIworICAgICMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBwcmVwYXJlIGEgcGFja2VkIHJlcG9zaXRvcnkgZm9yIHVzZSBvdmVyCisgICAgIyBkdW1iIHRyYW5zcG9ydHMuCisgICAgIworICAgICMgVG8gZW5hYmxlIHRoaXMgaG9vaywgbWFrZSB0aGlzIGZpbGUgZXhlY3V0YWJsZSBieSAiY2htb2QgK3ggcG9zdC11cGRhdGUiLgorCisgICAgY2FzZSAiICQqICIgaW4KKyAgICAqJyByZWZzL2hlYWRzL21hc3RlciAnKikKKyAgICAgICAgICAgIGVjaG8gJEhPTUUvZG9jLWdpdC9kb2RvZG9jLnNoIHwgYXQgbm93CisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBleGVjIGdpdC11cGRhdGUtc2VydmVyLWluZm8KKyAgICBFT0YKKyAgICAkIGNobW9kICt4IC9wdWIvc2NtL2dpdC9naXQuZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlCisKK1RoZXJlIGFyZSBmb3VyIHRoaW5ncyB3b3J0aCBtZW50aW9uaW5nOgorCisgLSBUaGUgdXBkYXRlLWhvb2sgaXMgcnVuIGFmdGVyIHRoZSByZXBvc2l0b3J5IGFjY2VwdHMgYSAiZ2l0CisgICBwdXNoIiwgdW5kZXIgbXkgdXNlciBwcml2aWxlZ2UuICBJdCBpcyBnaXZlbiB0aGUgZnVsbCBuYW1lcworICAgb2YgcmVmcyB0aGF0IGhhdmUgYmVlbiB1cGRhdGVkIGFzIGFyZ3VtZW50cy4gIE15IHBvc3QtdXBkYXRlCisgICBydW5zIHRoZSBkb2RvZG9jLnNoIHNjcmlwdCBvbmx5IHdoZW4gdGhlIG1hc3RlciBoZWFkIGlzCisgICB1cGRhdGVkLgorCisgLSBXaGVuIHVwZGF0ZS1ob29rIGlzIHJ1biwgR0lUX0RJUiBpcyBzZXQgdG8gJy4nIGJ5IHRoZSBjYWxsaW5nCisgICByZWNlaXZlLXBhY2suICBUaGlzIGlzIGluaGVyaXRlZCBieSB0aGUgZG9kb2RvYy5zaCBydW4gdmlhCisgICB0aGUgImF0IiBjb21tYW5kLCBhbmQgbmVlZHMgdG8gYmUgdW5zZXQ7IG90aGVyd2lzZSwgImdpdAorICAgcHVsbCIgaXQgZG9lcyBpbnRvICRIT01FL2RvYy1naXQvZG9jZ2VuLyByZXBvc2l0b3J5IHdvdWxkIG5vdAorICAgd29yayBjb3JyZWN0bHkuCisKKyAtIFRoZSBzdGRvdXQgb2YgdXBkYXRlIGhvb2sgc2NyaXB0IGlzIG5vdCBjb25uZWN0ZWQgdG8gZ2l0CisgICBwdXNoOyBJIHJ1biB0aGUgaGVhdnkgcGFydCBvZiB0aGUgY29tbWFuZCBpbnNpZGUgImF0IiwgdG8KKyAgIHJlY2VpdmUgdGhlIGV4ZWN1dGlvbiByZXBvcnQgdmlhIGUtbWFpbC4KKworIC0gVGhpcyBpcyBzdGlsbCBjcnVkZSBhbmQgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IHNpbXVsdGFuZW91cworICAgbWFrZSBpbnZvY2F0aW9ucyBzdG9tcGluZyBvbiBlYWNoIG90aGVyLiAgSSB3b3VsZCBuZWVkIHRvIGFkZAorICAgc29tZSBsb2NraW5nIG1lY2hhbmlzbSBmb3IgdGhpcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vcmVjb3Zlci1jb3JydXB0ZWQtYmxvYi1vYmplY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1ibG9iLW9iamVjdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzYjUxMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmVjb3Zlci1jb3JydXB0ZWQtYmxvYi1vYmplY3QudHh0CkBAIC0wLDAgKzEsMTM0IEBACitEYXRlOiBGcmksIDkgTm92IDIwMDcgMDg6Mjg6MzggLTA4MDAgKFBTVCkKK0Zyb206IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KK1N1YmplY3Q6IGNvcnJ1cHQgb2JqZWN0IG9uIGdpdC1nYworQWJzdHJhY3Q6IFNvbWUgdHJpY2tzIHRvIHJlY29uc3RydWN0IGJsb2Igb2JqZWN0cyBpbiBvcmRlciB0byBmaXgKKyBhIGNvcnJ1cHRlZCByZXBvc2l0b3J5LgorCitPbiBGcmksIDkgTm92IDIwMDcsIFlvc3NpIExleWJvdmljaCB3cm90ZToKKz4KKz4gRGlkIG5vdCBoZWxwIHN0aWxsIHRoZSByZXBvc2l0b3J5IGxvb2sgZm9yIHRoaXMgb2JqZWN0PworPiBBbnkgb25lIGtub3cgaG93IGNhbiBJIHRyYWNrIHRoaXMgb2JqZWN0IGFuZCB1bmRlcnN0YW5kIHdoaWNoIGZpbGUgaXMgaXQKKworU28gZXhhY3RseSAqYmVjYXVzZSogdGhlIFNIQTEgaGFzaCBpcyBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUsIHRoZSBoYXNoCitpdHNlbGYgZG9lc24ndCBhY3R1YWxseSB0ZWxsIHlvdSBhbnl0aGluZywgaW4gb3JkZXIgdG8gZml4IGEgY29ycnVwdAorb2JqZWN0IHlvdSBiYXNpY2FsbHkgaGF2ZSB0byBmaW5kIHRoZSAib3JpZ2luYWwgc291cmNlIiBmb3IgaXQuCisKK1RoZSBlYXNpZXN0IHdheSB0byBkbyB0aGF0IGlzIGFsbW9zdCBhbHdheXMgdG8gaGF2ZSBiYWNrdXBzLCBhbmQgZmluZCB0aGUKK3NhbWUgb2JqZWN0IHNvbWV3aGVyZSBlbHNlLiBCYWNrdXBzIHJlYWxseSBhcmUgYSBnb29kIGlkZWEsIGFuZCBnaXQgbWFrZXMKK2l0IHByZXR0eSBlYXN5IChpZiBub3RoaW5nIGVsc2UsIGp1c3QgY2xvbmUgdGhlIHJlcG9zaXRvcnkgc29tZXdoZXJlIGVsc2UsCithbmQgbWFrZSBzdXJlIHRoYXQgeW91IGRvICpub3QqIHVzZSBhIGhhcmQtbGlua2VkIGNsb25lLCBhbmQgcHJlZmVyYWJseQorbm90IHRoZSBzYW1lIGRpc2svbWFjaGluZSkuCisKK0J1dCBzaW5jZSB5b3UgZG9uJ3Qgc2VlbSB0byBoYXZlIGJhY2t1cHMgcmlnaHQgbm93LCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQKK2VzcGVjaWFsbHkgd2l0aCBhIHNpbmdsZSBibG9iIGJlaW5nIGNvcnJ1cHQsIHRoZXNlIHRoaW5ncyAqYXJlKiBzb21ld2hhdAorZGVidWdnYWJsZS4KKworRmlyc3Qgb2ZmLCBtb3ZlIHRoZSBjb3JydXB0IG9iamVjdCBhd2F5LCBhbmQgKnNhdmUqIGl0LiBUaGUgbW9zdCBjb21tb24KK2NhdXNlIG9mIGNvcnJ1cHRpb24gc28gZmFyIGhhcyBiZWVuIG1lbW9yeSBjb3JydXB0aW9uLCBidXQgZXZlbiBzbywgdGhlcmUKK2FyZSBwZW9wbGUgd2hvIHdvdWxkIGJlIGludGVyZXN0ZWQgaW4gc2VlaW5nIHRoZSBjb3JydXB0aW9uIC0gYnV0IGl0J3MKK2Jhc2ljYWxseSBpbXBvc3NpYmxlIHRvIGp1ZGdlIHRoZSBjb3JydXB0aW9uIHVudGlsIHdlIGNhbiBhbHNvIHNlZSB0aGUKK29yaWdpbmFsIG9iamVjdCwgc28gcmlnaHQgbm93IHRoZSBjb3JydXB0IG9iamVjdCBpcyB1c2VsZXNzLCBidXQgaXQncyB2ZXJ5CitpbnRlcmVzdGluZyBmb3IgdGhlIGZ1dHVyZSwgaW4gdGhlIGhvcGUgdGhhdCB5b3UgY2FuIHJlLWNyZWF0ZSBhCitub24tY29ycnVwdCB2ZXJzaW9uLgorCitTbzoKKworPiBpYl0kIG12IC5naXQvb2JqZWN0cy80Yi85NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMCAuLi8KKworVGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGFsdGhvdWdoIGl0J3MgdXN1YWxseSBiZXN0IHRvIHNhdmUgaXQgdW5kZXIKK2l0J3MgZnVsbCBTSEExIG5hbWUgKHlvdSBqdXN0IGRyb3BwZWQgdGhlICI0YiIgZnJvbSB0aGUgcmVzdWx0IDspLgorCitMZXQncyBzZWUgd2hhdCB0aGF0IHRlbGxzIHVzOgorCis+IGliXSQgZ2l0LWZzY2sgLS1mdWxsCis+IGJyb2tlbiBsaW5rIGZyb20gICAgdHJlZSAyZDkyNjNjNmQyMzU5NWU3Y2IyYTIxZTVlYmJiNTM2NTUyNzhkZmY4Cis+ICAgICAgICAgICAgICB0byAgICBibG9iIDRiOTQ1OGIzNzg2MjI4MzY5YzYzOTM2ZGI2NTgyN2RlM2NjMDYyMDAKKz4gbWlzc2luZyBibG9iIDRiOTQ1OGIzNzg2MjI4MzY5YzYzOTM2ZGI2NTgyN2RlM2NjMDYyMDAKKworT2ssIEkgcmVtb3ZlZCB0aGUgImRhbmdsaW5nIGNvbW1pdCIgbWVzc2FnZXMsIGJlY2F1c2UgdGhleSBhcmUganVzdAorbWVzc2FnZXMgYWJvdXQgdGhlIGZhY3QgdGhhdCB5b3UgcHJvYmFibHkgaGF2ZSByZWJhc2VkIGV0Yywgc28gdGhleSdyZSBub3QKK2F0IGFsbCBpbnRlcmVzdGluZy4gQnV0IHdoYXQgcmVtYWlucyBpcyBzdGlsbCB2ZXJ5IHVzZWZ1bC4gSW4gcGFydGljdWxhciwKK3dlIG5vdyBrbm93IHdoaWNoIHRyZWUgcG9pbnRzIHRvIGl0IQorCitOb3cgeW91IGNhbiBkbworCisJZ2l0IGxzLXRyZWUgMmQ5MjYzYzZkMjM1OTVlN2NiMmEyMWU1ZWJiYjUzNjU1Mjc4ZGZmOAorCit3aGljaCB3aWxsIHNob3cgc29tZXRoaW5nIGxpa2UKKworCTEwMDY0NCBibG9iIDhkMTQ1MzE4NDZiOTViZmEzNTY0YjU4Y2NmYjc5MTNhMDM0MzIzYjggICAgLmdpdGlnbm9yZQorCTEwMDY0NCBibG9iIGViZjliZjg0ZGEwYWFiNWVkOTQ0MjY0YTVkYjJhNjVmZTNhM2U4ODMgICAgLm1haWxtYXAKKwkxMDA2NDQgYmxvYiBjYTQ0MmQzMTNkODZkYzY3ZTBhMmU1ZDU4NGI0NjViZDM4MmNiZjVjICAgIENPUFlJTkcKKwkxMDA2NDQgYmxvYiBlZTkwOWYyY2M0OWU1NGYwNzk5YTQ3MzlkMjRjNGNiOTE1MWFlNDUzICAgIENSRURJVFMKKwkwNDAwMDAgdHJlZSAwZjVmNzA5YzE3YWQ4OWU3MmJkYmJlZjZlYTIyMWM2OTgwNzAwOWY2ICAgIERvY3VtZW50YXRpb24KKwkxMDA2NDQgYmxvYiAxNTcwZDI0OGFkOTIzN2U0ZmE2ZTRkMDc5MzM2YjlkYTYyZDliYTMyICAgIEtidWlsZAorCTEwMDY0NCBibG9iIDFjN2MyMjlhMDkyNjY1YjExY2Q0NmEyNWRiZDQwZmVlYjMxNjYxZDkgICAgTUFJTlRBSU5FUlMKKwkuLi4KKworYW5kIHlvdSBzaG91bGQgbm93IGhhdmUgYSBsaW5lIHRoYXQgbG9va3MgbGlrZQorCisJMTAwNjQgYmxvYiA0Yjk0NThiMzc4NjIyODM2OWM2MzkzNmRiNjU4MjdkZTNjYzA2MjAwCW15LW1hZ2ljLWZpbGUKKworaW4gdGhlIG91dHB1dC4gVGhpcyBhbHJlYWR5IHRlbGxzIHlvdSBhICpsb3QqIGl0IHRlbGxzIHlvdSB3aGF0IGZpbGUgdGhlCitjb3JydXB0IGJsb2IgY2FtZSBmcm9tIQorCitOb3csIGl0IGRvZXNuJ3QgdGVsbCB5b3UgcXVpdGUgZW5vdWdoLCB0aG91Z2g6IGl0IGRvZXNuJ3QgdGVsbCB3aGF0CisqdmVyc2lvbiogb2YgdGhlIGZpbGUgZGlkbid0IGdldCBjb3JyZWN0bHkgd3JpdHRlbiEgWW91IG1pZ2h0IGJlIHJlYWxseQorbHVja3ksIGFuZCBpdCBtYXkgYmUgdGhlIHZlcnNpb24gdGhhdCB5b3UgYWxyZWFkeSBoYXZlIGNoZWNrZWQgb3V0IGluIHlvdXIKK3dvcmtpbmcgdHJlZSwgaW4gd2hpY2ggY2FzZSBmaXhpbmcgdGhpcyBwcm9ibGVtIGlzIHJlYWxseSBzaW1wbGUsIGp1c3QgZG8KKworCWdpdCBoYXNoLW9iamVjdCAtdyBteS1tYWdpYy1maWxlCisKK2FnYWluLCBhbmQgaWYgaXQgb3V0cHV0cyB0aGUgbWlzc2luZyBTSEExICg0Yjk0NS4uKSB5b3UncmUgbm93IGFsbCBkb25lIQorCitCdXQgdGhhdCdzIHRoZSByZWFsbHkgbHVja3kgY2FzZSwgc28gbGV0J3MgYXNzdW1lIHRoYXQgaXQgd2FzIHNvbWUgb2xkZXIKK3ZlcnNpb24gdGhhdCB3YXMgYnJva2VuLiBIb3cgZG8geW91IHRlbGwgd2hpY2ggdmVyc2lvbiBpdCB3YXM/CisKK1RoZSBlYXNpZXN0IHdheSB0byBkbyBpdCBpcyB0byBkbworCisJZ2l0IGxvZyAtLXJhdyAtLWFsbCAtLWZ1bGwtaGlzdG9yeSAtLSBzdWJkaXJlY3RvcnkvbXktbWFnaWMtZmlsZQorCithbmQgdGhhdCB3aWxsIHNob3cgeW91IHRoZSB3aG9sZSBsb2cgZm9yIHRoYXQgZmlsZSAocGxlYXNlIHJlYWxpemUgdGhhdAordGhlIHRyZWUgeW91IGhhZCBtYXkgbm90IGJlIHRoZSB0b3AtbGV2ZWwgdHJlZSwgc28geW91IG5lZWQgdG8gZmlndXJlIG91dAord2hpY2ggc3ViZGlyZWN0b3J5IGl0IHdhcyBpbiBvbiB5b3VyIG93biksIGFuZCBiZWNhdXNlIHlvdSdyZSBhc2tpbmcgZm9yCityYXcgb3V0cHV0LCB5b3UnbGwgbm93IGdldCBzb21ldGhpbmcgbGlrZQorCisJY29tbWl0IGFiYworCUF1dGhvcjoKKwlEYXRlOgorCSAgLi4KKwk6MTAwNjQ0IDEwMDY0NCA0Yjk0NThiLi4uIG5ld3NoYS4uLiBNICBzb21lZGlyZWN0b3J5L215LW1hZ2ljLWZpbGUKKworCisJY29tbWl0IHh5egorCUF1dGhvcjoKKwlEYXRlOgorCisJICAuLgorCToxMDA2NDQgMTAwNjQ0IG9sZHNoYS4uLiA0Yjk0NThiLi4uIE0Jc29tZWRpcmVjdG9yeS9teS1tYWdpYy1maWxlCisKK2FuZCB0aGlzIGFjdHVhbGx5IHRlbGxzIHlvdSB3aGF0IHRoZSAqcHJldmlvdXMqIGFuZCAqc3Vic2VxdWVudCogdmVyc2lvbnMKK29mIHRoYXQgZmlsZSB3ZXJlISBTbyBub3cgeW91IGNhbiBsb29rIGF0IHRob3NlICgib2xkc2hhIiBhbmQgIm5ld3NoYSIKK3Jlc3BlY3RpdmVseSksIGFuZCBob3BlZnVsbHkgeW91IGhhdmUgZG9uZSBjb21taXRzIG9mdGVuLCBhbmQgY2FuCityZS1jcmVhdGUgdGhlIG1pc3NpbmcgbXktbWFnaWMtZmlsZSB2ZXJzaW9uIGJ5IGxvb2tpbmcgYXQgdGhvc2Ugb2xkZXIgYW5kCituZXdlciB2ZXJzaW9ucyEKKworSWYgeW91IGNhbiBkbyB0aGF0LCB5b3UgY2FuIG5vdyByZWNyZWF0ZSB0aGUgbWlzc2luZyBvYmplY3Qgd2l0aAorCisJZ2l0IGhhc2gtb2JqZWN0IC13IDxyZWNyZWF0ZWQtZmlsZT4KKworYW5kIHlvdXIgcmVwb3NpdG9yeSBpcyBnb29kIGFnYWluIQorCisoQnR3LCB5b3UgY291bGQgaGF2ZSBpZ25vcmVkIHRoZSBmc2NrLCBhbmQgc3RhcnRlZCB3aXRoIGRvaW5nIGEKKworCWdpdCBsb2cgLS1yYXcgLS1hbGwKKworYW5kIGp1c3QgbG9va2VkIGZvciB0aGUgc2hhIG9mIHRoZSBtaXNzaW5nIG9iamVjdCAoNGI5NDU4Yi4uKSBpbiB0aGF0Cit3aG9sZSB0aGluZy4gSXQncyB1cCB0byB5b3UgLSBnaXQgZG9lcyAqaGF2ZSogYSBsb3Qgb2YgaW5mb3JtYXRpb24sIGl0IGlzCitqdXN0IG1pc3Npbmcgb25lIHBhcnRpY3VsYXIgYmxvYiB2ZXJzaW9uLgorCitUcnlpbmcgdG8gcmVjcmVhdGUgdHJlZXMgYW5kIGVzcGVjaWFsbHkgY29tbWl0cyBpcyAqbXVjaCogaGFyZGVyLiBTbyB5b3UKK3dlcmUgbHVja3kgdGhhdCBpdCdzIGEgYmxvYi4gSXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0IHlvdSBjYW4gcmVjcmVhdGUgdGhlCit0aGluZy4KKworCQkJTGludXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWEtZmF1bHR5LW1lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWEtZmF1bHR5LW1lcmdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmQ3MTE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYS1mYXVsdHktbWVyZ2UudHh0CkBAIC0wLDAgKzEsMjY5IEBACitEYXRlOiBGcmksIDE5IERlYyAyMDA4IDAwOjQ1OjE5IC0wODAwCitGcm9tOiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+LCBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitTdWJqZWN0OiBSZTogT2RkIG1lcmdlIGJlaGF2aW91ciBpbnZvbHZpbmcgcmV2ZXJ0cworQWJzdHJhY3Q6IFNvbWV0aW1lcyBhIGJyYW5jaCB0aGF0IHdhcyBhbHJlYWR5IG1lcmdlZCB0byB0aGUgbWFpbmxpbmUKKyBpcyBsYXRlciBmb3VuZCB0byBiZSBmYXVsdHkuICBMaW51cyBhbmQgSnVuaW8gZ2l2ZSBndWlkYW5jZSBvbgorIHJlY292ZXJpbmcgZnJvbSBzdWNoIGEgcHJlbWF0dXJlIG1lcmdlIGFuZCBjb250aW51aW5nIGRldmVsb3BtZW50CisgYWZ0ZXIgdGhlIG9mZmVuZGluZyBicmFuY2ggaXMgZml4ZWQuCitNZXNzYWdlLUlEOiA8N3ZvY3o4YTZ6ay5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmc+CitSZWZlcmVuY2VzOiA8YWxwaW5lLkxGRC4yLjAwLjA4MTIxODE5NDk0NTAuMTQwMTRAbG9jYWxob3N0LmxvY2FsZG9tYWluPgorCitBbGFuIDxhbGFuQGNsdWVzZXJ2ZXIub3JnPiBzYWlkOgorCisgICAgSSBoYXZlIGEgbWFzdGVyIGJyYW5jaC4gIFdlIGhhdmUgYSBicmFuY2ggb2ZmIG9mIHRoYXQgdGhhdCBzb21lCisgICAgZGV2ZWxvcGVycyBhcmUgZG9pbmcgd29yayBvbi4gIFRoZXkgY2xhaW0gaXQgaXMgcmVhZHkuIFdlIG1lcmdlIGl0CisgICAgaW50byB0aGUgbWFzdGVyIGJyYW5jaC4gIEl0IGJyZWFrcyBzb21ldGhpbmcgc28gd2UgcmV2ZXJ0IHRoZSBtZXJnZS4KKyAgICBUaGV5IG1ha2UgY2hhbmdlcyB0byB0aGUgY29kZS4gIHRoZXkgZ2V0IGl0IHRvIGEgcG9pbnQgd2hlcmUgdGhleSBzYXkKKyAgICBpdCBpcyBvayBhbmQgd2UgbWVyZ2UgYWdhaW4uCisKKyAgICBXaGVuIGV4YW1pbmVkLCB3ZSBmaW5kIHRoYXQgY29kZSBjaGFuZ2VzIG1hZGUgYmVmb3JlIHRoZSByZXZlcnQgYXJlCisgICAgbm90IGluIHRoZSBtYXN0ZXIgYnJhbmNoLCBidXQgY29kZSBjaGFuZ2VzIGFmdGVyIGFyZSBpbiB0aGUgbWFzdGVyCisgICAgYnJhbmNoLgorCithbmQgYXNrZWQgZm9yIGhlbHAgcmVjb3ZlcmluZyBmcm9tIHRoaXMgc2l0dWF0aW9uLgorCitUaGUgaGlzdG9yeSBpbW1lZGlhdGVseSBhZnRlciB0aGUgInJldmVydCBvZiB0aGUgbWVyZ2UiIHdvdWxkIGxvb2sgbGlrZQordGhpczoKKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLVcKKwkgICAgICAgLworICAgICAgIC0tLUEtLS1CCisKK3doZXJlIEEgYW5kIEIgYXJlIG9uIHRoZSBzaWRlIGRldmVsb3BtZW50IHRoYXQgd2FzIG5vdCBzbyBnb29kLCBNIGlzIHRoZQorbWVyZ2UgdGhhdCBicmluZ3MgdGhlc2UgcHJlbWF0dXJlIGNoYW5nZXMgaW50byB0aGUgbWFpbmxpbmUsIHggYXJlIGNoYW5nZXMKK3VucmVsYXRlZCB0byB3aGF0IHRoZSBzaWRlIGJyYW5jaCBkaWQgYW5kIGFscmVhZHkgbWFkZSBvbiB0aGUgbWFpbmxpbmUsCithbmQgVyBpcyB0aGUgInJldmVydCBvZiB0aGUgbWVyZ2UgTSIgKGRvZXNuJ3QgVyBsb29rIE0gdXBzaWRlIGRvd24/KS4KK0lPVywgImRpZmYgV14uLlciIGlzIHNpbWlsYXIgdG8gImRpZmYgLVIgTV4uLk0iLgorCitTdWNoIGEgInJldmVydCIgb2YgYSBtZXJnZSBjYW4gYmUgbWFkZSB3aXRoOgorCisgICAgJCBnaXQgcmV2ZXJ0IC1tIDEgTQorCitBZnRlciB0aGUgZGV2ZWxvcGVycyBvZiB0aGUgc2lkZSBicmFuY2ggZml4IHRoZWlyIG1pc3Rha2VzLCB0aGUgaGlzdG9yeQorbWF5IGxvb2sgbGlrZSB0aGlzOgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgKKwkgICAgICAgLworICAgICAgIC0tLUEtLS1CLS0tLS0tLS0tLS0tLS0tLS0tLUMtLS1ECisKK3doZXJlIEMgYW5kIEQgYXJlIHRvIGZpeCB3aGF0IHdhcyBicm9rZW4gaW4gQSBhbmQgQiwgYW5kIHlvdSBtYXkgYWxyZWFkeQoraGF2ZSBzb21lIG90aGVyIGNoYW5nZXMgb24gdGhlIG1haW5saW5lIGFmdGVyIFcuCisKK0lmIHlvdSBtZXJnZSB0aGUgdXBkYXRlZCBzaWRlIGJyYW5jaCAod2l0aCBEIGF0IGl0cyB0aXApLCBub25lIG9mIHRoZQorY2hhbmdlcyBtYWRlIGluIEEgbm9yIEIgd2lsbCBiZSBpbiB0aGUgcmVzdWx0LCBiZWNhdXNlIHRoZXkgd2VyZSByZXZlcnRlZAorYnkgVy4gIFRoYXQgaXMgd2hhdCBBbGFuIHNhdy4KKworTGludXMgZXhwbGFpbnMgdGhlIHNpdHVhdGlvbjoKKworICAgIFJldmVydGluZyBhIHJlZ3VsYXIgY29tbWl0IGp1c3QgZWZmZWN0aXZlbHkgdW5kb2VzIHdoYXQgdGhhdCBjb21taXQKKyAgICBkaWQsIGFuZCBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBCdXQgcmV2ZXJ0aW5nIGEgbWVyZ2UgY29tbWl0IGFsc28KKyAgICB1bmRvZXMgdGhlIF9kYXRhXyB0aGF0IHRoZSBjb21taXQgY2hhbmdlZCwgYnV0IGl0IGRvZXMgYWJzb2x1dGVseQorICAgIG5vdGhpbmcgdG8gdGhlIGVmZmVjdHMgb24gX2hpc3RvcnlfIHRoYXQgdGhlIG1lcmdlIGhhZC4KKworICAgIFNvIHRoZSBtZXJnZSB3aWxsIHN0aWxsIGV4aXN0LCBhbmQgaXQgd2lsbCBzdGlsbCBiZSBzZWVuIGFzIGpvaW5pbmcKKyAgICB0aGUgdHdvIGJyYW5jaGVzIHRvZ2V0aGVyLCBhbmQgZnV0dXJlIG1lcmdlcyB3aWxsIHNlZSB0aGF0IG1lcmdlIGFzCisgICAgdGhlIGxhc3Qgc2hhcmVkIHN0YXRlIC0gYW5kIHRoZSByZXZlcnQgdGhhdCByZXZlcnRlZCB0aGUgbWVyZ2UgYnJvdWdodAorICAgIGluIHdpbGwgbm90IGFmZmVjdCB0aGF0IGF0IGFsbC4KKworICAgIFNvIGEgInJldmVydCIgdW5kb2VzIHRoZSBkYXRhIGNoYW5nZXMsIGJ1dCBpdCdzIHZlcnkgbXVjaCBfbm90XyBhbgorICAgICJ1bmRvIiBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2Vzbid0IHVuZG8gdGhlIGVmZmVjdHMgb2YgYSBjb21taXQgb24KKyAgICB0aGUgcmVwb3NpdG9yeSBoaXN0b3J5LgorCisgICAgU28gaWYgeW91IHRoaW5rIG9mICJyZXZlcnQiIGFzICJ1bmRvIiwgdGhlbiB5b3UncmUgZ29pbmcgdG8gYWx3YXlzCisgICAgbWlzcyB0aGlzIHBhcnQgb2YgcmV2ZXJ0cy4gWWVzLCBpdCB1bmRvZXMgdGhlIGRhdGEsIGJ1dCBubywgaXQgZG9lc24ndAorICAgIHVuZG8gaGlzdG9yeS4KKworSW4gc3VjaCBhIHNpdHVhdGlvbiwgeW91IHdvdWxkIHdhbnQgdG8gZmlyc3QgcmV2ZXJ0IHRoZSBwcmV2aW91cyByZXZlcnQsCit3aGljaCB3b3VsZCBtYWtlIHRoZSBoaXN0b3J5IGxvb2sgbGlrZSB0aGlzOgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgtLS1ZCisJICAgICAgIC8KKyAgICAgICAtLS1BLS0tQi0tLS0tLS0tLS0tLS0tLS0tLS1DLS0tRAorCit3aGVyZSBZIGlzIHRoZSByZXZlcnQgb2YgVy4gIFN1Y2ggYSAicmV2ZXJ0IG9mIHRoZSByZXZlcnQiIGNhbiBiZSBkb25lCit3aXRoOgorCisgICAgJCBnaXQgcmV2ZXJ0IFcKKworVGhpcyBoaXN0b3J5IHdvdWxkIChpZ25vcmluZyBwb3NzaWJsZSBjb25mbGljdHMgYmV0d2VlbiB3aGF0IFcgYW5kIFcuLlkKK2NoYW5nZWQpIGJlIGVxdWl2YWxlbnQgdG8gbm90IGhhdmluZyBXIG5vciBZIGF0IGFsbCBpbiB0aGUgaGlzdG9yeToKKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLS0tLS14LS0tLQorCSAgICAgICAvCisgICAgICAgLS0tQS0tLUItLS0tLS0tLS0tLS0tLS0tLS0tQy0tLUQKKworYW5kIG1lcmdpbmcgdGhlIHNpZGUgYnJhbmNoIGFnYWluIHdpbGwgbm90IGhhdmUgY29uZmxpY3QgYXJpc2luZyBmcm9tIGFuCitlYXJsaWVyIHJldmVydCBhbmQgcmV2ZXJ0IG9mIHRoZSByZXZlcnQuCisKKyAtLS1vLS0tby0tLW8tLS1NLS0teC0tLXgtLS0tLS0teC0tLS0tLS0qCisJICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgIC8KKyAgICAgICAtLS1BLS0tQi0tLS0tLS0tLS0tLS0tLS0tLS1DLS0tRAorCitPZiBjb3Vyc2UgdGhlIGNoYW5nZXMgbWFkZSBpbiBDIGFuZCBEIHN0aWxsIGNhbiBjb25mbGljdCB3aXRoIHdoYXQgd2FzCitkb25lIGJ5IGFueSBvZiB0aGUgeCwgYnV0IHRoYXQgaXMganVzdCBhIG5vcm1hbCBtZXJnZSBjb25mbGljdC4KKworT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBkZXZlbG9wZXJzIG9mIHRoZSBzaWRlIGJyYW5jaCBkaXNjYXJkZWQgdGhlaXIKK2ZhdWx0eSBBIGFuZCBCLCBhbmQgcmVkb25lIHRoZSBjaGFuZ2VzIG9uIHRvcCBvZiB0aGUgdXBkYXRlZCBtYWlubGluZQorYWZ0ZXIgdGhlIHJldmVydCwgdGhlIGhpc3Rvcnkgd291bGQgaGF2ZSBsb29rZWQgbGlrZSB0aGlzOgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgtLS14CisJICAgICAgIC8gICAgICAgICAgICAgICAgIFwKKyAgICAgICAtLS1BLS0tQiAgICAgICAgICAgICAgICAgICBBJy0tQictLUMnCisKK0lmIHlvdSByZXZlcnRlZCB0aGUgcmV2ZXJ0IGluIHN1Y2ggYSBjYXNlIGFzIGluIHRoZSBwcmV2aW91cyBleGFtcGxlOgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgtLS14LS0tWS0tLSoKKwkgICAgICAgLyAgICAgICAgICAgICAgICAgXCAgICAgICAgIC8KKyAgICAgICAtLS1BLS0tQiAgICAgICAgICAgICAgICAgICBBJy0tQictLUMnCisKK3doZXJlIFkgaXMgdGhlIHJldmVydCBvZiBXLCBBJyBhbmQgQicgYXJlIHJlcm9sbGVkIEEgYW5kIEIsIGFuZCB0aGVyZSBtYXkKK2Fsc28gYmUgYSBmdXJ0aGVyIGZpeC11cCBDJyBvbiB0aGUgc2lkZSBicmFuY2guICAiZGlmZiBZXi4uWSIgaXMgc2ltaWxhcgordG8gImRpZmYgLVIgV14uLlciICh3aGljaCBpbiB0dXJuIG1lYW5zIGl0IGlzIHNpbWlsYXIgdG8gImRpZmYgTV4uLk0iKSwKK2FuZCAiZGlmZiBBJ14uLkMnIiBieSBkZWZpbml0aW9uIHdvdWxkIGJlIHNpbWlsYXIgYnV0IGRpZmZlcmVudCBmcm9tIHRoYXQsCitiZWNhdXNlIGl0IGlzIGEgcmVyb2xsZWQgc2VyaWVzIG9mIHRoZSBlYXJsaWVyIGNoYW5nZS4gIFRoZXJlIHdpbGwgYmUgYQorbG90IG9mIG92ZXJsYXBwaW5nIGNoYW5nZXMgdGhhdCByZXN1bHQgaW4gY29uZmxpY3RzLiAgU28gZG8gbm90IGRvICJyZXZlcnQKK29mIHJldmVydCIgYmxpbmRseSB3aXRob3V0IHRoaW5raW5nLi4KKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14LS0teAorCSAgICAgICAvICAgICAgICAgICAgICAgICBcCisgICAgICAgLS0tQS0tLUIgICAgICAgICAgICAgICAgICAgQSctLUInLS1DJworCitJbiB0aGUgaGlzdG9yeSB3aXRoIHJlYmFzZWQgc2lkZSBicmFuY2gsIFcgKGFuZCBNKSBhcmUgYmVoaW5kIHRoZSBtZXJnZQorYmFzZSBvZiB0aGUgdXBkYXRlZCBicmFuY2ggYW5kIHRoZSB0aXAgb2YgdGhlIG1haW5saW5lLCBhbmQgdGhleSBzaG91bGQKK21lcmdlIHdpdGhvdXQgdGhlIHBhc3QgZmF1bHR5IG1lcmdlIGFuZCBpdHMgcmV2ZXJ0IGdldHRpbmcgaW4gdGhlIHdheS4KKworVG8gcmVjYXAsIHRoZXNlIGFyZSB0d28gdmVyeSBkaWZmZXJlbnQgc2NlbmFyaW9zLCBhbmQgdGhleSB3YW50IHR3byB2ZXJ5CitkaWZmZXJlbnQgcmVzb2x1dGlvbiBzdHJhdGVnaWVzOgorCisgLSBJZiB0aGUgZmF1bHR5IHNpZGUgYnJhbmNoIHdhcyBmaXhlZCBieSBhZGRpbmcgY29ycmVjdGlvbnMgb24gdG9wLCB0aGVuCisgICBkb2luZyBhIHJldmVydCBvZiB0aGUgcHJldmlvdXMgcmV2ZXJ0IHdvdWxkIGJlIHRoZSByaWdodCB0aGluZyB0byBkby4KKworIC0gSWYgdGhlIGZhdWx0eSBzaWRlIGJyYW5jaCB3aG9zZSBlZmZlY3RzIHdlcmUgZGlzY2FyZGVkIGJ5IGFuIGVhcmxpZXIKKyAgIHJldmVydCBvZiBhIG1lcmdlIHdhcyByZWJ1aWx0IGZyb20gc2NyYXRjaCAoaS5lLiByZWJhc2luZyBhbmQgZml4aW5nLAorICAgYXMgeW91IHNlZW0gdG8gaGF2ZSBpbnRlcnByZXRlZCksIHRoZW4gcmUtbWVyZ2luZyB0aGUgcmVzdWx0IHdpdGhvdXQKKyAgIGRvaW5nIGFueXRoaW5nIGVsc2UgZmFuY3kgd291bGQgYmUgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorICAgKFNlZSB0aGUgQURERU5EVU0gYmVsb3cgZm9yIGhvdyB0byByZWJ1aWxkIGEgYnJhbmNoIGZyb20gc2NyYXRjaAorICAgd2l0aG91dCBjaGFuZ2luZyBpdHMgb3JpZ2luYWwgYnJhbmNoaW5nLW9mZiBwb2ludC4pCisKK0hvd2V2ZXIsIHRoZXJlIGFyZSB0aGluZ3MgdG8ga2VlcCBpbiBtaW5kIHdoZW4gcmV2ZXJ0aW5nIGEgbWVyZ2UgKGFuZAorcmV2ZXJ0aW5nIHN1Y2ggYSByZXZlcnQpLgorCitGb3IgZXhhbXBsZSwgdGhpbmsgYWJvdXQgd2hhdCByZXZlcnRpbmcgYSBtZXJnZSAoYW5kIHRoZW4gcmV2ZXJ0aW5nIHRoZQorcmV2ZXJ0KSBkb2VzIHRvIGJpc2VjdGFiaWxpdHkuIElnbm9yZSB0aGUgZmFjdCB0aGF0IHRoZSByZXZlcnQgb2YgYSByZXZlcnQKK2lzIHVuZG9pbmcgaXQgLSBqdXN0IHRoaW5rIG9mIGl0IGFzIGEgInNpbmdsZSBjb21taXQgdGhhdCBkb2VzIGEgbG90Ii4KK0JlY2F1c2UgdGhhdCBpcyB3aGF0IGl0IGRvZXMuCisKK1doZW4geW91IGhhdmUgYSBwcm9ibGVtIHlvdSBhcmUgY2hhc2luZyBkb3duLCBhbmQgeW91IGhpdCBhICJyZXZlcnQgdGhpcworbWVyZ2UiLCB3aGF0IHlvdSdyZSBoaXR0aW5nIGlzIGVzc2VudGlhbGx5IGEgc2luZ2xlIGNvbW1pdCB0aGF0IGNvbnRhaW5zCithbGwgdGhlIGNoYW5nZXMgKGJ1dCBvYnZpb3VzbHkgaW4gcmV2ZXJzZSkgb2YgYWxsIHRoZSBjb21taXRzIHRoYXQgZ290CittZXJnZWQuIFNvIGl0J3MgZGVidWdnaW5nIGhlbGwsIGJlY2F1c2Ugbm93IHlvdSBkb24ndCBoYXZlIGxvdHMgb2Ygc21hbGwKK2NoYW5nZXMgdGhhdCB5b3UgY2FuIHRyeSB0byBwaW5wb2ludCB3aGljaCBfcGFydF8gb2YgaXQgY2hhbmdlcy4KKworQnV0IGRvZXMgaXQgYWxsIHdvcms/IFN1cmUgaXQgZG9lcy4gWW91IGNhbiByZXZlcnQgYSBtZXJnZSwgYW5kIGZyb20gYQorcHVyZWx5IHRlY2huaWNhbCBhbmdsZSwgZ2l0IGRpZCBpdCB2ZXJ5IG5hdHVyYWxseSBhbmQgaGFkIG5vIHJlYWwKK3Ryb3VibGVzLiBJdCBqdXN0IGNvbnNpZGVyZWQgaXQgYSBjaGFuZ2UgZnJvbSAic3RhdGUgYmVmb3JlIG1lcmdlIiB0bworInN0YXRlIGFmdGVyIG1lcmdlIiwgYW5kIHRoYXQgd2FzIGl0LiBOb3RoaW5nIGNvbXBsaWNhdGVkLCBub3RoaW5nIG9kZCwKK25vdGhpbmcgcmVhbGx5IGRhbmdlcm91cy4gR2l0IHdpbGwgZG8gaXQgd2l0aG91dCBldmVuIHRoaW5raW5nIGFib3V0IGl0LgorCitTbyBmcm9tIGEgdGVjaG5pY2FsIGFuZ2xlLCB0aGVyZSdzIG5vdGhpbmcgd3Jvbmcgd2l0aCByZXZlcnRpbmcgYSBtZXJnZSwKK2J1dCBmcm9tIGEgd29ya2Zsb3cgYW5nbGUgaXQncyBzb21ldGhpbmcgdGhhdCB5b3UgZ2VuZXJhbGx5IHNob3VsZCB0cnkgdG8KK2F2b2lkLgorCitJZiBhdCBhbGwgcG9zc2libGUsIGZvciBleGFtcGxlLCBpZiB5b3UgZmluZCBhIHByb2JsZW0gdGhhdCBnb3QgbWVyZ2VkCitpbnRvIHRoZSBtYWluIHRyZWUsIHJhdGhlciB0aGFuIHJldmVydCB0aGUgbWVyZ2UsIHRyeSBfcmVhbGx5XyBoYXJkIHRvCitiaXNlY3QgdGhlIHByb2JsZW0gZG93biBpbnRvIHRoZSBicmFuY2ggeW91IG1lcmdlZCwgYW5kIGp1c3QgZml4IGl0LCBvcgordHJ5IHRvIHJldmVydCB0aGUgaW5kaXZpZHVhbCBjb21taXQgdGhhdCBjYXVzZWQgaXQuCisKK1llcywgaXQncyBtb3JlIGNvbXBsZXgsIGFuZCBubywgaXQncyBub3QgYWx3YXlzIGdvaW5nIHRvIHdvcmsgKHNvbWV0aW1lcwordGhlIGFuc3dlciBpczogIm9vcHMsIEkgcmVhbGx5IHNob3VsZG4ndCBoYXZlIG1lcmdlZCBpdCwgYmVjYXVzZSBpdCB3YXNuJ3QKK3JlYWR5IHlldCwgYW5kIEkgcmVhbGx5IG5lZWQgdG8gdW5kbyBfYWxsXyBvZiB0aGUgbWVyZ2UiKS4gU28gdGhlbiB5b3UKK3JlYWxseSBzaG91bGQgcmV2ZXJ0IHRoZSBtZXJnZSwgYnV0IHdoZW4geW91IHdhbnQgdG8gcmUtZG8gdGhlIG1lcmdlLCB5b3UKK25vdyBuZWVkIHRvIGRvIGl0IGJ5IHJldmVydGluZyB0aGUgcmV2ZXJ0LgorCitBRERFTkRVTQorCitTb21ldGltZXMgeW91IGhhdmUgdG8gcmV3cml0ZSBvbmUgb2YgYSB0b3BpYyBicmFuY2gncyBjb21taXRzICphbmQqIHlvdSBjYW4ndAorY2hhbmdlIHRoZSB0b3BpYydzIGJyYW5jaGluZy1vZmYgcG9pbnQuICBDb25zaWRlciB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjoKKworIFAtLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14CisgIFwgICAgICAgICAvCisgICBBLS0tQi0tLUMKKword2hlcmUgY29tbWl0IFcgcmV2ZXJ0ZWQgY29tbWl0IE0gYmVjYXVzZSBpdCB0dXJuZWQgb3V0IHRoYXQgY29tbWl0IEIgd2FzIHdyb25nCithbmQgbmVlZHMgdG8gYmUgcmV3cml0dGVuLCBidXQgeW91IG5lZWQgdGhlIHJld3JpdHRlbiB0b3BpYyB0byBzdGlsbCBicmFuY2gKK2Zyb20gY29tbWl0IFAgKHBlcmhhcHMgUCBpcyBhIGJyYW5jaGluZy1vZmYgcG9pbnQgZm9yIHlldCBhbm90aGVyIGJyYW5jaCwgYW5kCit5b3Ugd2FudCBiZSBhYmxlIHRvIG1lcmdlIHRoZSB0b3BpYyBpbnRvIGJvdGggYnJhbmNoZXMpLgorCitUaGUgbmF0dXJhbCB0aGluZyB0byBkbyBpbiB0aGlzIGNhc2UgaXMgdG8gY2hlY2tvdXQgdGhlIEEtQi1DIGJyYW5jaCBhbmQgdXNlCisicmViYXNlIC1pIFAiIHRvIGNoYW5nZSBjb21taXQgQi4gIEhvd2V2ZXIgdGhpcyBkb2VzIG5vdCByZXdyaXRlIGNvbW1pdCBBLAorYmVjYXVzZSAicmViYXNlIC1pIiBieSBkZWZhdWx0IGZhc3QtZm9yd2FyZHMgb3ZlciBhbnkgaW5pdGlhbCBjb21taXRzIHNlbGVjdGVkCit3aXRoIHRoZSAicGljayIgY29tbWFuZC4gIFNvIHlvdSBlbmQgdXAgd2l0aCB0aGlzOgorCisgUC0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgKKyAgXCAgICAgICAgIC8KKyAgIEEtLS1CLS0tQyAgIDwtLSBvbGQgYnJhbmNoCisgICAgXAorICAgICBCJy0tLUMnICAgPC0tIG5haXZlbHkgcmV3cml0dGVuIGJyYW5jaAorCitUbyBtZXJnZSBBLUInLUMnIGludG8gdGhlIG1haW5saW5lIGJyYW5jaCB5b3Ugd291bGQgc3RpbGwgaGF2ZSB0byBmaXJzdCByZXZlcnQKK2NvbW1pdCBXIGluIG9yZGVyIHRvIHBpY2sgdXAgdGhlIGNoYW5nZXMgaW4gQSwgYnV0IHRoZW4gaXQncyBsaWtlbHkgdGhhdCB0aGUKK2NoYW5nZXMgaW4gQicgd2lsbCBjb25mbGljdCB3aXRoIHRoZSBvcmlnaW5hbCBCIGNoYW5nZXMgcmUtaW50cm9kdWNlZCBieSB0aGUKK3JldmVyc2lvbiBvZiBXLgorCitIb3dldmVyLCB5b3UgY2FuIGF2b2lkIHRoZXNlIHByb2JsZW1zIGlmIHlvdSByZWNyZWF0ZSB0aGUgZW50aXJlIGJyYW5jaCwKK2luY2x1ZGluZyBjb21taXQgQToKKworICAgQSctLS1CJy0tLUMnICA8LS0gY29tcGxldGVseSByZXdyaXR0ZW4gYnJhbmNoCisgIC8KKyBQLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teAorICBcICAgICAgICAgLworICAgQS0tLUItLS1DCisKK1lvdSBjYW4gbWVyZ2UgQSctQictQycgaW50byB0aGUgbWFpbmxpbmUgYnJhbmNoIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZmlyc3QKK3JldmVydGluZyBXLiAgTWFpbmxpbmUncyBoaXN0b3J5IHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCisgICBBJy0tLUInLS0tQyctLS0tLS0tLS0tLS0tLS0tLS0KKyAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBQLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teC0tLU0yCisgIFwgICAgICAgICAvCisgICBBLS0tQi0tLUMKKworQnV0IGlmIHlvdSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGNoYW5nZSBjb21taXQgQSwgdGhlbiB5b3UgbmVlZCBzb21lIHdheSB0bworcmVjcmVhdGUgaXQgYXMgYSBuZXcgY29tbWl0IHdpdGggdGhlIHNhbWUgY2hhbmdlcyBpbiBpdC4gIFRoZSByZWJhc2UgY29tbWFuZCdzCistLW5vLWZmIG9wdGlvbiBwcm92aWRlcyBhIHdheSB0byBkbyB0aGlzOgorCisgICAgJCBnaXQgcmViYXNlIFstaV0gLS1uby1mZiBQCisKK1RoZSAtLW5vLWZmIG9wdGlvbiBjcmVhdGVzIGEgbmV3IGJyYW5jaCBBJy1CJy1DJyB3aXRoIGFsbC1uZXcgY29tbWl0cyAoYWxsIHRoZQorU0hBIElEcyB3aWxsIGJlIGRpZmZlcmVudCkgZXZlbiBpZiBpbiB0aGUgaW50ZXJhY3RpdmUgY2FzZSB5b3Ugb25seSBhY3R1YWxseQorbW9kaWZ5IGNvbW1pdCBCLiAgWW91IGNhbiB0aGVuIG1lcmdlIHRoaXMgbmV3IGJyYW5jaCBkaXJlY3RseSBpbnRvIHRoZSBtYWlubGluZQorYnJhbmNoIGFuZCBiZSBzdXJlIHlvdSdsbCBnZXQgYWxsIG9mIHRoZSBicmFuY2gncyBjaGFuZ2VzLgorCitZb3UgY2FuIGFsc28gdXNlIC0tbm8tZmYgaW4gY2FzZXMgd2hlcmUgeW91IGp1c3QgYWRkIGV4dHJhIGNvbW1pdHMgdG8gdGhlIHRvcGljCit0byBmaXggaXQgdXAuICBMZXQncyByZXZpc2l0IHRoZSBzaXR1YXRpb24gZGlzY3Vzc2VkIGF0IHRoZSBzdGFydCBvZiB0aGlzIGhvd3RvOgorCisgUC0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgKKyAgXCAgICAgICAgIC8KKyAgIEEtLS1CLS0tQy0tLS0tLS0tLS0tLS0tLS1ELS0tRSAgIDwtLSBmaXhlZC11cCB0b3BpYyBicmFuY2gKKworQXQgdGhpcyBwb2ludCwgeW91IGNhbiB1c2UgLS1uby1mZiB0byByZWNyZWF0ZSB0aGUgdG9waWMgYnJhbmNoOgorCisgICAgJCBnaXQgY2hlY2tvdXQgRQorICAgICQgZ2l0IHJlYmFzZSAtLW5vLWZmIFAKKworeWllbGRpbmcKKworICAgQSctLS1CJy0tLUMnLS0tLS0tLS0tLS0tRCctLS1FJyAgPC0tIHJlY3JlYXRlZCB0b3BpYyBicmFuY2gKKyAgLworIFAtLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14CisgIFwgICAgICAgICAvCisgICBBLS0tQi0tLUMtLS0tLS0tLS0tLS0tLS0tRC0tLUUKKworWW91IGNhbiBtZXJnZSB0aGUgcmVjcmVhdGVkIGJyYW5jaCBpbnRvIHRoZSBtYWlubGluZSB3aXRob3V0IHJldmVydGluZyBjb21taXQgVywKK2FuZCBtYWlubGluZSdzIGhpc3Rvcnkgd2lsbCBsb29rIGxpa2UgdGhpczoKKworICAgQSctLS1CJy0tLUMnLS0tLS0tLS0tLS0tRCctLS1FJworICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIFAtLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14LS0tTTIKKyAgXCAgICAgICAgIC8KKyAgIEEtLS1CLS0tQwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYnJhbmNoLXJlYmFzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JldmVydC1icmFuY2gtcmViYXNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNjNjU2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYnJhbmNoLXJlYmFzZS50eHQKQEAgLTAsMCArMSwxODcgQEAKK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK1RvOiBnaXRAdmdlci5rZXJuZWwub3JnCitTdWJqZWN0OiBbSE9XVE9dIFJldmVydGluZyBhbiBleGlzdGluZyBjb21taXQKK0Fic3RyYWN0OiBJbiB0aGlzIGFydGljbGUsIEpDIGdpdmVzIGEgc21hbGwgcmVhbC1saWZlIGV4YW1wbGUgb2YgdXNpbmcKKyAnZ2l0IHJldmVydCcgY29tbWFuZCwgYW5kIHVzaW5nIGEgdGVtcG9yYXJ5IGJyYW5jaCBhbmQgdGFnIGZvciBzYWZldHkKKyBhbmQgZWFzaWVyIHNhbml0eSBjaGVja2luZy4KK0RhdGU6IE1vbiwgMjkgQXVnIDIwMDUgMjE6Mzk6MDIgLTA3MDAKK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworTWVzc2FnZS1JRDogPDd2b2U3ZzN1b3AuZnNmQGFzc2lnbmVkLWJ5LWRoY3AuY294Lm5ldD4KKworUmV2ZXJ0aW5nIGFuIGV4aXN0aW5nIGNvbW1pdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPbmUgb2YgdGhlIGNoYW5nZXMgSSBwdWxsZWQgaW50byB0aGUgJ21hc3RlcicgYnJhbmNoIHR1cm5zIG91dCB0bworYnJlYWsgYnVpbGRpbmcgR0lUIHdpdGggR0NDIDIuOTUuICBXaGlsZSB0aGV5IHdlcmUgd2VsbCBpbnRlbnRpb25lZAorcG9ydGFiaWxpdHkgZml4ZXMsIGtlZXBpbmcgdGhpbmdzIHdvcmtpbmcgd2l0aCBnY2MtMi45NSB3YXMgYWxzbworaW1wb3J0YW50LiAgSGVyZSBpcyB3aGF0IEkgZGlkIHRvIHJldmVydCB0aGUgY2hhbmdlIGluIHRoZSAnbWFzdGVyJworYnJhbmNoIGFuZCB0byBhZGp1c3QgdGhlICdwdScgYnJhbmNoLCB1c2luZyBjb3JlIEdJVCB0b29scyBhbmQKK2JhcmVib25lIFBvcmNlbGFpbi4KKworRmlyc3QsIHByZXBhcmUgYSB0aHJvdy1hd2F5IGJyYW5jaCBpbiBjYXNlIEkgc2NyZXcgdGhpbmdzIHVwLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIHJldmVydC1jOTkgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93IEkgYW0gb24gdGhlICdyZXZlcnQtYzk5JyBicmFuY2guICBMZXQncyBmaWd1cmUgb3V0IHdoaWNoIGNvbW1pdCB0bworcmV2ZXJ0LiAgSSBoYXBwZW4gdG8ga25vdyB0aGF0IHRoZSB0b3Agb2YgdGhlICdtYXN0ZXInIGJyYW5jaCBpcyBhCittZXJnZSwgYW5kIGl0cyBzZWNvbmQgcGFyZW50IChpLmUuIGZvcmVpZ24gY29tbWl0IEkgbWVyZ2VkIGZyb20pIGhhcwordGhlIGNoYW5nZSBJIHdvdWxkIHdhbnQgdG8gdW5kby4gIEZ1cnRoZXIgSSBoYXBwZW4gdG8ga25vdyB0aGF0IHRoYXQKK21lcmdlIGludHJvZHVjZWQgNSBjb21taXRzIG9yIHNvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoIC0tbW9yZT00IG1hc3RlciBtYXN0ZXJeMiB8IGhlYWQKKyogW21hc3Rlcl0gTWVyZ2UgcmVmcy9oZWFkcy9wb3J0YWJsZSBmcm9tIGh0dHA6Ly93d3cuY3MuYmVya2VsZXkuLi4uCisgISBbbWFzdGVyXjJdIFJlcGxhY2UgQzk5IGFycmF5IGluaXRpYWxpemVycyB3aXRoIGNvZGUuCistLQorLSAgW21hc3Rlcl0gTWVyZ2UgcmVmcy9oZWFkcy9wb3J0YWJsZSBmcm9tIGh0dHA6Ly93d3cuY3MuYmVya2VsZXkuLi4uCisqKyBbbWFzdGVyXjJdIFJlcGxhY2UgQzk5IGFycmF5IGluaXRpYWxpemVycyB3aXRoIGNvZGUuCisqKyBbbWFzdGVyXjJ+MV0gUmVwbGFjZSB1bnNldGVudigpIGFuZCBzZXRlbnYoKSB3aXRoIG9sZGVyIHB1dGVudigpLgorKisgW21hc3Rlcl4yfjJdIEluY2x1ZGUgc3lzL3RpbWUuaCBpbiBkYWVtb24uYy4KKyorIFttYXN0ZXJeMn4zXSBGaXggPzogc3RhdGVtZW50cy4KKyorIFttYXN0ZXJeMn40XSBSZXBsYWNlIHplcm8tbGVuZ3RoIGFycmF5IGRlY2xzIHdpdGggW10uCisqICBbbWFzdGVyfjFdIHR1dG9yaWFsIG5vdGUgYWJvdXQgZ2l0IGJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnLS1tb3JlPTQnIGFib3ZlIG1lYW5zICJhZnRlciB3ZSByZWFjaCB0aGUgbWVyZ2UgYmFzZSBvZiByZWZzLAorc2hvdyB1bnRpbCB3ZSBkaXNwbGF5IGZvdXIgbW9yZSBjb21tb24gY29tbWl0cyIuICBUaGF0IGxhc3QgY29tbWl0Cit3b3VsZCBoYXZlIGJlZW4gd2hlcmUgdGhlICJwb3J0YWJsZSIgYnJhbmNoIHdhcyBmb3JrZWQgZnJvbSB0aGUgbWFpbgorZ2l0LmdpdCByZXBvc2l0b3J5LCBzbyB0aGlzIHdvdWxkIHNob3cgZXZlcnl0aGluZyBvbiBib3RoIGJyYW5jaGVzCitzaW5jZSB0aGVuLiAgSSBqdXN0IGxpbWl0ZWQgdGhlIG91dHB1dCB0byB0aGUgZmlyc3QgaGFuZGZ1bCB1c2luZworJ2hlYWQnLgorCitOb3cgSSBrbm93ICdtYXN0ZXJeMn40JyAocHJvbm91bmNlIGl0IGFzICJmaW5kIHRoZSBzZWNvbmQgcGFyZW50IG9mCit0aGUgJ21hc3RlcicsIGFuZCB0aGVuIGdvIGZvdXIgZ2VuZXJhdGlvbnMgYmFjayBmb2xsb3dpbmcgdGhlIGZpcnN0CitwYXJlbnQiKSBpcyB0aGUgb25lIEkgd291bGQgd2FudCB0byByZXZlcnQuICBTaW5jZSBJIGFsc28gd2FudCB0byBzYXkKK3doeSBJIGFtIHJldmVydGluZyBpdCwgdGhlICctbicgZmxhZyBpcyBnaXZlbiB0byAnZ2l0IHJldmVydCcuICBUaGlzCitwcmV2ZW50cyBpdCBmcm9tIGFjdHVhbGx5IG1ha2luZyBhIGNvbW1pdCwgYW5kIGluc3RlYWQgJ2dpdCByZXZlcnQnCitsZWF2ZXMgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpdCB3YW50ZWQgdG8gdXNlIGluICcubXNnJyBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJldmVydCAtbiBtYXN0ZXJeMn40CiskIGNhdCAubXNnCitSZXZlcnQgIlJlcGxhY2UgemVyby1sZW5ndGggYXJyYXkgZGVjbHMgd2l0aCBbXS4iCisKK1RoaXMgcmV2ZXJ0cyA2YzVmOWJhYTNiYzBkNjNlMTQxZTBhZmMyMzExMDIwNTM3OTkwNWE0IGNvbW1pdC4KKyQgZ2l0IGRpZmYgSEVBRCA7IyB0byBtYWtlIHN1cmUgd2hhdCB3ZSBhcmUgcmV2ZXJ0aW5nIG1ha2VzIHNlbnNlLgorJCBtYWtlIENDPWdjYy0yLjk1IGNsZWFuIHRlc3QgOyMgbWFrZSBzdXJlIGl0IGZpeGVkIHRoZSBicmVha2FnZS4KKyQgbWFrZSBjbGVhbiB0ZXN0IDsjIG1ha2Ugc3VyZSBpdCBkaWQgbm90IGNhdXNlIG90aGVyIGJyZWFrYWdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZXZlcnRlZCBjaGFuZ2UgbWFrZXMgc2Vuc2UgKGZyb20gcmVhZGluZyB0aGUgJ2RpZmYnIG91dHB1dCksIGRvZXMKK2ZpeCB0aGUgcHJvYmxlbSAoZnJvbSAnbWFrZSBDQz1nY2MtMi45NScgdGVzdCksIGFuZCBkb2VzIG5vdCBjYXVzZSBuZXcKK2JyZWFrYWdlIChmcm9tIHRoZSBsYXN0ICdtYWtlIHRlc3QnKS4gIEknbSByZWFkeSB0byBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1hIC1zIDsjIHJlYWQgLm1zZyBpbnRvIHRoZSBsb2csCisgICAgICAgICAgICAgICAgICAgICMgYW5kIGV4cGxhaW4gd2h5IEkgYW0gcmV2ZXJ0aW5nLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0kgY291bGQgaGF2ZSBzY3Jld2VkIHVwIGluIGFueSBvZiB0aGUgYWJvdmUgc3RlcHMsIGJ1dCBpbiB0aGUgd29yc3QKK2Nhc2UgSSBjb3VsZCBqdXN0IGhhdmUgZG9uZSAnZ2l0IGNoZWNrb3V0IG1hc3RlcicgdG8gc3RhcnQgb3Zlci4KK0ZvcnR1bmF0ZWx5IEkgZGlkIG5vdCBoYXZlIHRvOyB3aGF0IEkgaGF2ZSBpbiB0aGUgY3VycmVudCBicmFuY2gKKydyZXZlcnQtYzk5JyBpcyB3aGF0IEkgd2FudC4gIFNvIG1lcmdlIHRoYXQgYmFjayBpbnRvICdtYXN0ZXInOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorJCBnaXQgbWVyZ2UgcmV2ZXJ0LWM5OSA7IyB0aGlzIHNob3VsZCBiZSBhIGZhc3QtZm9yd2FyZAorVXBkYXRpbmcgZnJvbSAxMGQ3ODFiOWNhYTRmNzE0OTVjN2IzNDk2M2JlZjEzNzIxNmY4NmE4IHRvIGUzYTY5M2MuLi4KKyBjYWNoZS5oICAgICAgICB8ICAgIDggKysrKy0tLS0KKyBjb21taXQuYyAgICAgICB8ICAgIDIgKy0KKyBscy1maWxlcy5jICAgICB8ICAgIDIgKy0KKyByZWNlaXZlLXBhY2suYyB8ICAgIDIgKy0KKyBzZXJ2ZXItaW5mby5jICB8ICAgIDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBubyBuZWVkIHRvIHJlZG8gdGhlIHRlc3QgYXQgdGhpcyBwb2ludC4gIFdlIGZhc3QtZm9yd2FyZGVkCithbmQgd2Uga25vdyAnbWFzdGVyJyBtYXRjaGVzICdyZXZlcnQtYzk5JyBleGFjdGx5LiAgSW4gZmFjdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIG1hc3Rlci4ucmV2ZXJ0LWM5OQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NheXMgbm90aGluZy4KKworVGhlbiB3ZSByZWJhc2UgdGhlICdwdScgYnJhbmNoIGFzIHVzdWFsLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IHB1CiskIGdpdCB0YWcgcHUtYW5jaG9yIHB1CiskIGdpdCByZWJhc2UgbWFzdGVyCisqIEFwcGx5aW5nOiBSZWRvICJyZXZlcnQiIHVzaW5nIHRocmVlLXdheSBtZXJnZSBtYWNoaW5lcnkuCitGaXJzdCB0cnlpbmcgc2ltcGxlIG1lcmdlIHN0cmF0ZWd5IHRvIGNoZXJyeS1waWNrLgorKiBBcHBseWluZzogUmVtb3ZlIGdpdC1hcHBseS1wYXRjaC1zY3JpcHQuCitGaXJzdCB0cnlpbmcgc2ltcGxlIG1lcmdlIHN0cmF0ZWd5IHRvIGNoZXJyeS1waWNrLgorU2ltcGxlIGNoZXJyeS1waWNrIGZhaWxzOyB0cnlpbmcgQXV0b21hdGljIGNoZXJyeS1waWNrLgorUmVtb3ZpbmcgRG9jdW1lbnRhdGlvbi9naXQtYXBwbHktcGF0Y2gtc2NyaXB0LnR4dAorUmVtb3ZpbmcgZ2l0LWFwcGx5LXBhdGNoLXNjcmlwdAorKiBBcHBseWluZzogRG9jdW1lbnQgImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKyogQXBwbHlpbmc6IG1haWxpbmZvIGFuZCBhcHBseW1ib3ggdXBkYXRlcworRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKyogQXBwbHlpbmc6IFNob3cgY29tbWl0cyBpbiB0b3BvIG9yZGVyIGFuZCBuYW1lIGFsbCBjb21taXRzLgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKyogQXBwbHlpbmc6IE1vcmUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdGVtcG9yYXJ5IHRhZyAncHUtYW5jaG9yJyBpcyBtZSBqdXN0IGJlaW5nIGNhcmVmdWwsIGluIGNhc2UgJ2dpdAorcmViYXNlJyBzY3Jld3MgdXAuICBBZnRlciB0aGlzLCBJIGNhbiBkbyB0aGVzZSBmb3Igc2FuaXR5IGNoZWNrOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgcHUtYW5jaG9yLi5wdSA7IyBtYWtlIHN1cmUgd2UgZ290IHRoZSBtYXN0ZXIgZml4LgorJCBtYWtlIENDPWdjYy0yLjk1IGNsZWFuIHRlc3QgOyMgbWFrZSBzdXJlIGl0IGZpeGVkIHRoZSBicmVha2FnZS4KKyQgbWFrZSBjbGVhbiB0ZXN0IDsjIG1ha2Ugc3VyZSBpdCBkaWQgbm90IGNhdXNlIG90aGVyIGJyZWFrYWdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V2ZXJ5dGhpbmcgaXMgaW4gdGhlIGdvb2Qgb3JkZXIuICBJIGRvIG5vdCBuZWVkIHRoZSB0ZW1wb3JhcnkgYnJhbmNoCitub3IgdGFnIGFueW1vcmUsIHNvIHJlbW92ZSB0aGVtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgcm0gLWYgLmdpdC9yZWZzL3RhZ3MvcHUtYW5jaG9yCiskIGdpdCBicmFuY2ggLWQgcmV2ZXJ0LWM5OQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IHdhcyBhbiBlbWVyZ2VuY3kgZml4LCBzbyB3ZSBtaWdodCBhcyB3ZWxsIG1lcmdlIGl0IGludG8gdGhlCisncmVsZWFzZSBjYW5kaWRhdGUnIGJyYW5jaCwgYWx0aG91Z2ggSSBleHBlY3QgdGhlIG5leHQgcmVsZWFzZSB3b3VsZAorYmUgc29tZSBkYXlzIG9mZjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCByYworJCBnaXQgcHVsbCAuIG1hc3RlcgorUGFja2luZyAwIG9iamVjdHMKK1VucGFja2luZyAwIG9iamVjdHMKKworKiBjb21taXR0aXNoOiBlM2E2OTNjLi4uCXJlZnMvaGVhZHMvbWFzdGVyIGZyb20gLgorVHJ5aW5nIHRvIG1lcmdlIGUzYTY5M2MuLi4gaW50byA4YzFmNWYwLi4uIHVzaW5nIDEwZDc4MWIuLi4KK0NvbW1pdHRlZCBtZXJnZSA3ZmI5YjcyNjJhMWQxZTBhNDdiYmZkY2JiY2Y1MGNlMDYzNWQzZjhmCisgY2FjaGUuaCAgICAgICAgfCAgICA4ICsrKystLS0tCisgY29tbWl0LmMgICAgICAgfCAgICAyICstCisgbHMtZmlsZXMuYyAgICAgfCAgICAyICstCisgcmVjZWl2ZS1wYWNrLmMgfCAgICAyICstCisgc2VydmVyLWluZm8uYyAgfCAgICAyICstCisgNSBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5kIHRoZSBmaW5hbCByZXBvc2l0b3J5IHN0YXR1cyBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1icmFuY2ggLS1tb3JlPTEgbWFzdGVyIHB1IHJjCishIFttYXN0ZXJdIFJldmVydCAiUmVwbGFjZSB6ZXJvLWxlbmd0aCBhcnJheSBkZWNscyB3aXRoIFtdLiIKKyAhIFtwdV0gZ2l0LXJlcGFjazogQWRkIG9wdGlvbiB0byByZXBhY2sgYWxsIG9iamVjdHMuCisgICogW3JjXSBNZXJnZSByZWZzL2hlYWRzL21hc3RlciBmcm9tIC4KKy0tLQorICsgIFtwdV0gZ2l0LXJlcGFjazogQWRkIG9wdGlvbiB0byByZXBhY2sgYWxsIG9iamVjdHMuCisgKyAgW3B1fjFdIE1vcmUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorICsgIFtwdX4yXSBTaG93IGNvbW1pdHMgaW4gdG9wbyBvcmRlciBhbmQgbmFtZSBhbGwgY29tbWl0cy4KKyArICBbcHV+M10gbWFpbGluZm8gYW5kIGFwcGx5bWJveCB1cGRhdGVzCisgKyAgW3B1fjRdIERvY3VtZW50ICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIKKyArICBbcHV+NV0gUmVtb3ZlIGdpdC1hcHBseS1wYXRjaC1zY3JpcHQuCisgKyAgW3B1fjZdIFJlZG8gInJldmVydCIgdXNpbmcgdGhyZWUtd2F5IG1lcmdlIG1hY2hpbmVyeS4KKyAgLSBbcmNdIE1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyIGZyb20gLgorKysqIFttYXN0ZXJdIFJldmVydCAiUmVwbGFjZSB6ZXJvLWxlbmd0aCBhcnJheSBkZWNscyB3aXRoIFtdLiIKKyAgLSBbcmN+MV0gTWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgZnJvbSAuCisuLi4gW21hc3Rlcn4xXSBNZXJnZSByZWZzL2hlYWRzL3BvcnRhYmxlIGZyb20gaHR0cDovL3d3dy5jcy5iZXJrZWxleS4uLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzZWI4ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcy50eHQKQEAgLTAsMCArMSw5MCBAQAorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorU3ViamVjdDogU2VwYXJhdGluZyB0b3BpYyBicmFuY2hlcworQWJzdHJhY3Q6IEluIHRoaXMgYXJ0aWNsZSwgSkMgZGVzY3JpYmVzIGhvdyB0byBzZXBhcmF0ZSB0b3BpYyBicmFuY2hlcy4KKworVGhpcyB0ZXh0IHdhcyBvcmlnaW5hbGx5IGEgZm9vdG5vdGUgdG8gYSBkaXNjdXNzaW9uIGFib3V0IHRoZQorYmVoYXZpb3VyIG9mIHRoZSBnaXQgZGlmZiBjb21tYW5kcy4KKworT2Z0ZW4gSSBmaW5kIG15c2VsZiBkb2luZyB0aGF0IFtydW5uaW5nIGRpZmYgYWdhaW5zdCBzb21ldGhpbmcgb3RoZXIKK3RoYW4gSEVBRF0gd2hpbGUgcmV3cml0aW5nIG1lc3N5IGRldmVsb3BtZW50IGhpc3RvcnkuICBGb3IgZXhhbXBsZSwgSQorc3RhcnQgZG9pbmcgc29tZSB3b3JrIHdpdGhvdXQga25vd2luZyBleGFjdGx5IHdoZXJlIGl0IGxlYWRzLCBhbmQgZW5kCit1cCB3aXRoIGEgaGlzdG9yeSBsaWtlIHRoaXM6CisKKyAgICAgICAgICAgICJtYXN0ZXIiCisgICAgICAgIG8tLS1vCisgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgInRvcGljIgorICAgICAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8KKworQXQgdGhpcyBwb2ludCwgInRvcGljIiBjb250YWlucyBzb21ldGhpbmcgSSBrbm93IEkgd2FudCwgYnV0IGl0Citjb250YWlucyB0d28gY29uY2VwdHMgdGhhdCB0dXJuZWQgb3V0IHRvIGJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQuCitBbmQgb2Z0ZW4sIG9uZSB0b3BpYyBjb21wb25lbnQgaXMgbGFyZ2VyIHRoYW4gdGhlIG90aGVyLiAgSXQgbWF5Citjb250YWluIG1vcmUgdGhhbiB0d28gdG9waWNzLgorCitJbiBvcmRlciB0byByZXdyaXRlIHRoaXMgbWVzcyB0byBiZSBtb3JlIG1hbmFnZWFibGUsIEkgd291bGQgZmlyc3QgZG8KKyJkaWZmIG1hc3Rlci4udG9waWMiLCB0byBleHRyYWN0IHRoZSBjaGFuZ2VzIGludG8gYSBzaW5nbGUgcGF0Y2gsIHN0YXJ0CitwaWNraW5nIHBpZWNlcyBmcm9tIGl0IHRvIGdldCBsb2dpY2FsbHkgc2VsZi1jb250YWluZWQgdW5pdHMsIGFuZAorc3RhcnQgYnVpbGRpbmcgb24gdG9wIG9mICJtYXN0ZXIiOgorCisgICAgICAgICQgZ2l0IGRpZmYgbWFzdGVyLi50b3BpYyA+UC5kaWZmCisgICAgICAgICQgZ2l0IGNoZWNrb3V0IC1iIHRvcGljQSBtYXN0ZXIKKyAgICAgICAgLi4uIHBpY2sgYW5kIGFwcGx5IHBpZWNlcyBmcm9tIFAuZGlmZiB0byBidWlsZAorICAgICAgICAuLi4gY29tbWl0cyBvbiB0b3BpY0EgYnJhbmNoLgorCisgICAgICAgICAgICAgIG8tLS1vLS0tbworICAgICAgICAgICAgIC8gICAgICAgICJ0b3BpY0EiCisgICAgICAgIG8tLS1vIm1hc3RlciIKKyAgICAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAidG9waWMiCisgICAgICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vLS0tbworCitCZWZvcmUgZG9pbmcgZWFjaCBjb21taXQgb24gInRvcGljQSIgSEVBRCwgSSBydW4gImRpZmYgSEVBRCIKK2JlZm9yZSB1cGRhdGUtaW5kZXggdGhlIGFmZmVjdGVkIHBhdGhzLCBvciAiZGlmZiAtLWNhY2hlZCBIRUFEIgorYWZ0ZXIuICBBbHNvIEkgd291bGQgcnVuICJkaWZmIC0tY2FjaGVkIG1hc3RlciIgdG8gbWFrZSBzdXJlCit0aGF0IHRoZSBjaGFuZ2VzIGFyZSBvbmx5IHRoZSBvbmVzIHJlbGF0ZWQgdG8gInRvcGljQSIuICBVc3VhbGx5CitJIGRvIHRoaXMgZm9yIHNtYWxsZXIgdG9waWNzIGZpcnN0LgorCitBZnRlciB0aGF0LCBJJ2QgZG8gdGhlIHJlbWFpbmRlciBvZiB0aGUgb3JpZ2luYWwgInRvcGljIiwgYnV0Citmb3IgdGhhdCwgSSBkbyBub3Qgc3RhcnQgZnJvbSB0aGUgcGF0Y2hmaWxlIEkgZXh0cmFjdGVkIGJ5Citjb21wYXJpbmcgIm1hc3RlciIgYW5kICJ0b3BpYyIgSSB1c2VkIGluaXRpYWxseS4gIFN0aWxsIG9uCisidG9waWNBIiwgSSBleHRyYWN0ICJkaWZmIHRvcGljIiwgYW5kIHVzZSBpdCB0byByZWJ1aWxkIHRoZQorb3RoZXIgdG9waWM6CisKKyAgICAgICAgJCBnaXQgZGlmZiAtUiB0b3BpYyA+UC5kaWZmIDsjIC0tY2FjaGVkIGFsc28gd291bGQgd29yayBmaW5lCisgICAgICAgICQgZ2l0IGNoZWNrb3V0IC1iIHRvcGljQiBtYXN0ZXIKKyAgICAgICAgLi4uIHBpY2sgYW5kIGFwcGx5IHBpZWNlcyBmcm9tIFAuZGlmZiB0byBidWlsZAorICAgICAgICAuLi4gY29tbWl0cyBvbiB0b3BpY0IgYnJhbmNoLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b3BpY0IiCisgICAgICAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tbworICAgICAgICAgICAgICAvCisgICAgICAgICAgICAgL28tLS1vLS0tbworICAgICAgICAgICAgfC8gICAgICAgICJ0b3BpY0EiCisgICAgICAgIG8tLS1vIm1hc3RlciIKKyAgICAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAidG9waWMiCisgICAgICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vLS0tbworCitBZnRlciBJIGFtIGRvbmUsIEknZCB0cnkgYSBwcmV0ZW5kLW1lcmdlIGJldHdlZW4gInRvcGljQSIgYW5kCisidG9waWNCIiBpbiBvcmRlciB0byBtYWtlIHN1cmUgSSBoYXZlIG5vdCBtaXNzZWQgYW55dGhpbmc6CisKKyAgICAgICAgJCBnaXQgcHVsbCAuIHRvcGljQSA7IyBtZXJnZSBpdCBpbnRvIGN1cnJlbnQgInRvcGljQiIKKyAgICAgICAgJCBnaXQgZGlmZiB0b3BpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9waWNCIgorICAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8tLS0qIChwcmV0ZW5kIG1lcmdlKQorICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgIC8KKyAgICAgICAgICAgICAvby0tLW8tLS1vLS0tLS0tLS0tLScKKyAgICAgICAgICAgIHwvICAgICAgICAidG9waWNBIgorICAgICAgICBvLS0tbyJtYXN0ZXIiCisgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgInRvcGljIgorICAgICAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8KKworVGhlIGxhc3QgZGlmZiBiZXR0ZXIgbm90IHRvIHNob3cgYW55dGhpbmcgb3RoZXIgdGhhbiBjbGVhbnVwcworZm9yIGNydWZ0cy4gIFRoZW4gSSBjYW4gZmluYWxseSBjbGVhbiB0aGluZ3MgdXA6CisKKyAgICAgICAgJCBnaXQgYnJhbmNoIC1EIHRvcGljCisgICAgICAgICQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiA7IyBudWtlIHByZXRlbmQgbWVyZ2UKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9waWNCIgorICAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8KKyAgICAgICAgICAgICAgLworICAgICAgICAgICAgIC9vLS0tby0tLW8KKyAgICAgICAgICAgIHwvICAgICAgICAidG9waWNBIgorICAgICAgICBvLS0tbyJtYXN0ZXIiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vc2V0dXAtZ2l0LXNlcnZlci1vdmVyLWh0dHAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMmVlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dApAQCAtMCwwICsxLDI3NyBAQAorRnJvbTogUnV0Z2VyIE5pamx1bnNpbmcgPHJ1dGdlckBub3NwYW0uY29tPgorU3ViamVjdDogU2V0dGluZyB1cCBhIGdpdCByZXBvc2l0b3J5IHdoaWNoIGNhbiBiZSBwdXNoZWQgaW50byBhbmQgcHVsbGVkIGZyb20gb3ZlciBIVFRQKFMpLgorRGF0ZTogVGh1LCAxMCBBdWcgMjAwNiAyMjowMDoyNiArMDIwMAorCitTaW5jZSBBcGFjaGUgaXMgb25lIG9mIHRob3NlIHBhY2thZ2VzIHBlb3BsZSBsaWtlIHRvIGNvbXBpbGUKK3RoZW1zZWx2ZXMgd2hpbGUgb3RoZXJzIHByZWZlciB0aGUgYnVyZWF1Y3JhdCdzIGRyZWFtIERlYmlhbiwgaXQgaXMKK2ltcG9zc2libGUgdG8gZ2l2ZSBndWlkZWxpbmVzIHdoaWNoIHdpbGwgd29yayBmb3IgZXZlcnlvbmUuIEp1c3Qgc2VuZAorc29tZSBmZWVkYmFjayB0byB0aGUgbWFpbGluZyBsaXN0IGF0IGdpdEB2Z2VyLmtlcm5lbC5vcmcgdG8gZ2V0IHRoaXMKK2RvY3VtZW50IHRhaWxvcmVkIHRvIHlvdXIgZmF2b3JpdGUgZGlzdHJvLgorCisKK1doYXQncyBuZWVkZWQ6CisKKy0gSGF2ZSBhbiBBcGFjaGUgd2ViLXNlcnZlcgorCisgIE9uIERlYmlhbjoKKyAgICAkIGFwdC1nZXQgaW5zdGFsbCBhcGFjaGUyCisgICAgVG8gZ2V0IGFwYWNoZTIgYnkgZGVmYXVsdCBzdGFydGVkLAorICAgIGVkaXQgL2V0Yy9kZWZhdWx0L2FwYWNoZTIgYW5kIHNldCBOT19TVEFSVD0wCisKKy0gY2FuIGVkaXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgaXQuCisKKyAgVGhpcyBjb3VsZCBiZSBmb3VuZCB1bmRlciAvZXRjL2h0dHBkLCBvciByZWZlciB0byB5b3VyIEFwYWNoZSBkb2N1bWVudGF0aW9uLgorCisgIE9uIERlYmlhbjogdGhpcyBtZWFucyBiZWluZyBhYmxlIHRvIGVkaXQgZmlsZXMgdW5kZXIgL2V0Yy9hcGFjaGUyCisKKy0gY2FuIHJlc3RhcnQgaXQuCisKKyAgJ2FwYWNoZWN0bCAtLWdyYWNlZnVsJyBtaWdodCBkby4gSWYgaXQgZG9lc24ndCwganVzdCBzdG9wIGFuZAorICByZXN0YXJ0IGFwYWNoZS4gQmUgd2FybmluZyB0aGF0IGFjdGl2ZSBjb25uZWN0aW9ucyB0byB5b3VyIHNlcnZlcgorICBtaWdodCBiZSBhYm9ydGVkIGJ5IHRoaXMuCisKKyAgT24gRGViaWFuOgorICAgICQgL2V0Yy9pbml0LmQvYXBhY2hlMiByZXN0YXJ0CisgIG9yCisgICAgJCAvZXRjL2luaXQuZC9hcGFjaGUyIGZvcmNlLXJlbG9hZAorICAgICh3aGljaCBzZWVtcyB0byBkbyB0aGUgc2FtZSkKKyAgVGhpcyBhZGRzIHN5bWxpbmtzIGZyb20gdGhlIC9ldGMvYXBhY2hlMi9tb2RzLWVuYWJsZWQgdG8KKyAgL2V0Yy9hcGFjaGUyL21vZHMtYXZhaWxhYmxlLgorCistIGhhdmUgcGVybWlzc2lvbnMgdG8gY2hvd24gYSBkaXJlY3RvcnkKKworLSBoYXZlIGdpdCBpbnN0YWxsZWQgb24gdGhlIGNsaWVudCwgYW5kCisKKy0gZWl0aGVyIGhhdmUgZ2l0IGluc3RhbGxlZCBvbiB0aGUgc2VydmVyIG9yIGhhdmUgYSB3ZWJkYXYgY2xpZW50IG9uCisgIHRoZSBjbGllbnQuCisKK0luIGVmZmVjdCwgdGhpcyBtZWFucyB5b3UncmUgZ29pbmcgdG8gYmUgcm9vdCwgb3IgdGhhdCB5b3UncmUgdXNpbmcgYQorcHJlY29uZmlndXJlZCBXZWJEQVYgc2VydmVyLgorCisKK1N0ZXAgMTogc2V0dXAgYSBiYXJlIEdJVCByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBdCB0aGUgdGltZSBvZiB3cml0aW5nLCBnaXQtaHR0cC1wdXNoIGNhbm5vdCByZW1vdGVseSBjcmVhdGUgYSBHSVQKK3JlcG9zaXRvcnkuIFNvIHdlIGhhdmUgdG8gZG8gdGhhdCBhdCB0aGUgc2VydmVyIHNpZGUgd2l0aCBnaXQuIEFub3RoZXIKK29wdGlvbiBpcyB0byBnZW5lcmF0ZSBhbiBlbXB0eSBiYXJlIHJlcG9zaXRvcnkgYXQgdGhlIGNsaWVudCBhbmQgY29weQoraXQgdG8gdGhlIHNlcnZlciB3aXRoIGEgV2ViREFWIGNsaWVudCAod2hpY2ggaXMgdGhlIG9ubHkgb3B0aW9uIGlmIEdpdAoraXMgbm90IGluc3RhbGxlZCBvbiB0aGUgc2VydmVyKS4KKworQ3JlYXRlIHRoZSBkaXJlY3RvcnkgdW5kZXIgdGhlIERvY3VtZW50Um9vdCBvZiB0aGUgZGlyZWN0b3JpZXMgc2VydmVkCitieSBBcGFjaGUuIEFzIGFuIGV4YW1wbGUgd2UgdGFrZSAvdXNyL2xvY2FsL2FwYWNoZTIsIGJ1dCB0cnkgImdyZXAKK0RvY3VtZW50Um9vdCAvd2hlcmUvZXZlci9odHRwZC5jb25mIiB0byBmaW5kIHlvdXIgcm9vdDoKKworICAgICQgY2QgL3Vzci9sb2NhbC9hcGFjaGUvaHRkb2NzCisgICAgJCBta2RpciBteS1uZXctcmVwby5naXQKKworICBPbiBEZWJpYW46CisKKyAgICAkIGNkIC92YXIvd3d3CisgICAgJCBta2RpciBteS1uZXctcmVwby5naXQKKworCitJbml0aWFsaXplIGEgYmFyZSByZXBvc2l0b3J5CisKKyAgICAkIGNkIG15LW5ldy1yZXBvLmdpdAorICAgICQgZ2l0IC0tYmFyZSBpbml0CisKKworQ2hhbmdlIHRoZSBvd25lcnNoaXAgdG8geW91ciB3ZWItc2VydmVyJ3MgY3JlZGVudGlhbHMuIFVzZSAiZ3JlcCBeVXNlcgoraHR0cGQuY29uZiIgYW5kICJncmVwIF5Hcm91cCBodHRwZC5jb25mIiB0byBmaW5kIG91dDoKKworICAgICQgY2hvd24gLVIgd3d3Lnd3dyAuCisKKyAgT24gRGViaWFuOgorCisgICAgJCBjaG93biAtUiB3d3ctZGF0YS53d3ctZGF0YSAuCisKKworSWYgeW91IGRvIG5vdCBrbm93IHdoaWNoIHVzZXIgQXBhY2hlIHJ1bnMgYXMsIHlvdSBjYW4gYWx0ZXJuYXRpdmVseSBkbworYSAiY2htb2QgLVIgYSt3IC4iLCBpbnNwZWN0IHRoZSBmaWxlcyB3aGljaCBhcmUgY3JlYXRlZCBsYXRlciBvbiwgYW5kCitzZXQgdGhlIHBlcm1pc3Npb25zIGFwcHJvcHJpYXRlbHkuCisKK1Jlc3RhcnQgYXBhY2hlMiwgYW5kIGNoZWNrIHdoZXRoZXIgaHR0cDovL3NlcnZlci9teS1uZXctcmVwby5naXQgZ2l2ZXMKK2EgZGlyZWN0b3J5IGxpc3RpbmcuIElmIG5vdCwgY2hlY2sgd2hldGhlciBhcGFjaGUgc3RhcnRlZCB1cAorc3VjY2Vzc2Z1bGx5LgorCisKK1N0ZXAgMjogZW5hYmxlIERBViBvbiB0aGlzIHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3QgbWFrZSBzdXJlIHRoZSBkYXZfbW9kdWxlIGlzIGxvYWRlZC4gRm9yIHRoaXMsIGluc2VydCBpbiBodHRwZC5jb25mOgorCisgICAgTG9hZE1vZHVsZSBkYXZfbW9kdWxlIGxpYmV4ZWMvaHR0cGQvbGliZGF2LnNvCisgICAgQWRkTW9kdWxlIG1vZF9kYXYuYworCitBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgbGluZSBleGlzdHMgd2hpY2ggaXMgdGhlIGZpbGUgdXNlZCBmb3IKK2xvY2tpbmcgREFWIG9wZXJhdGlvbnM6CisKKyAgREFWTG9ja0RCICIvdXNyL2xvY2FsL2FwYWNoZTIvdGVtcC9EQVYubG9jayIKKworICBPbiBEZWJpYW4gdGhlc2Ugc3RlcHMgY2FuIGJlIHBlcmZvcm1lZCB3aXRoOgorCisgICAgRW5hYmxlIHRoZSBkYXYgYW5kIGRhdl9mcyBtb2R1bGVzIG9mIGFwYWNoZToKKyAgICAkIGEyZW5tb2QgZGF2X2ZzCisgICAgKGp1c3QgdG8gYmUgc3VyZS4gZGF2X2ZzIG1pZ2h0IGJlIHVubmVlZGVkLCBJIGRvbid0IGtub3cpCisgICAgJCBhMmVubW9kIGRhdgorICAgIFRoZSBEQVYgbG9jayBpcyBsb2NhdGVkIGluIC9ldGMvYXBhY2hlMi9tb2RzLWF2YWlsYWJsZS9kYXZfZnMuY29uZjoKKyAgICAgIERBVkxvY2tEQiAvdmFyL2xvY2svYXBhY2hlMi9EQVZMb2NrCisKK09mIGNvdXJzZSwgaXQgY2FuIHBvaW50IHNvbWV3aGVyZSBlbHNlLCBidXQgdGhlIHN0cmluZyBpcyBhY3R1YWxseSBqdXN0IGEKK3ByZWZpeCBpbiBzb21lIEFwYWNoZSBjb25maWd1cmF0aW9ucywgYW5kIHRoZXJlZm9yZSB0aGUgX2RpcmVjdG9yeV8gaGFzIHRvCitiZSB3cml0YWJsZSBieSB0aGUgdXNlciBBcGFjaGUgcnVucyBhcy4KKworVGhlbiwgYWRkIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8geW91ciBodHRwZC5jb25mCisKKyAgPExvY2F0aW9uIC9teS1uZXctcmVwby5naXQ+CisgICAgIERBViBvbgorICAgICBBdXRoVHlwZSBCYXNpYworICAgICBBdXRoTmFtZSAiR2l0IgorICAgICBBdXRoVXNlckZpbGUgL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvcGFzc3dkLmdpdAorICAgICBSZXF1aXJlIHZhbGlkLXVzZXIKKyAgPC9Mb2NhdGlvbj4KKworICBPbiBEZWJpYW46CisgICAgQ3JlYXRlIChvciBhZGQgdG8pIC9ldGMvYXBhY2hlMi9jb25mLmQvZ2l0LmNvbmYgOgorCisgICAgPExvY2F0aW9uIC9teS1uZXctcmVwby5naXQ+CisgICAgICAgREFWIG9uCisgICAgICAgQXV0aFR5cGUgQmFzaWMKKyAgICAgICBBdXRoTmFtZSAiR2l0IgorICAgICAgIEF1dGhVc2VyRmlsZSAvZXRjL2FwYWNoZTIvcGFzc3dkLmdpdAorICAgICAgIFJlcXVpcmUgdmFsaWQtdXNlcgorICAgIDwvTG9jYXRpb24+CisKKyAgICBEZWJpYW4gYXV0b21hdGljYWxseSByZWFkcyBhbGwgZmlsZXMgdW5kZXIgL2V0Yy9hcGFjaGUyL2NvbmYuZC4KKworVGhlIHBhc3N3b3JkIGZpbGUgY2FuIGJlIHNvbWV3aGVyZSBlbHNlLCBidXQgaXQgaGFzIHRvIGJlIHJlYWRhYmxlIGJ5CitBcGFjaGUgYW5kIHByZWZlcmFibHkgbm90IHJlYWRhYmxlIGJ5IHRoZSB3b3JsZC4KKworQ3JlYXRlIHRoaXMgZmlsZSBieQorICAgICQgaHRwYXNzd2QgLWMgL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvcGFzc3dkLmdpdCA8dXNlcj4KKworICAgIE9uIERlYmlhbjoKKyAgICAgICQgaHRwYXNzd2QgLWMgL2V0Yy9hcGFjaGUyL3Bhc3N3ZC5naXQgPHVzZXI+CisKK1lvdSB3aWxsIGJlIGFza2VkIGEgcGFzc3dvcmQsIGFuZCB0aGUgZmlsZSBpcyBjcmVhdGVkLiBTdWJzZXF1ZW50IGNhbGxzCit0byBodHBhc3N3ZCBzaG91bGQgb21pdCB0aGUgJy1jJyBvcHRpb24sIHNpbmNlIHlvdSB3YW50IHRvIGFwcGVuZCB0byB0aGUKK2V4aXN0aW5nIGZpbGUuCisKK1lvdSBuZWVkIHRvIHJlc3RhcnQgQXBhY2hlLgorCitOb3cgZ28gdG8gaHR0cDovLzx1c2VybmFtZT5APHNlcnZlcm5hbWU+L215LW5ldy1yZXBvLmdpdCBpbiB5b3VyCiticm93c2VyIHRvIGNoZWNrIHdoZXRoZXIgaXQgYXNrcyBmb3IgYSBwYXNzd29yZCBhbmQgYWNjZXB0cyB0aGUgcmlnaHQKK3Bhc3N3b3JkLgorCitPbiBEZWJpYW46CisKKyAgIFRvIHRlc3QgdGhlIFdlYkRBViBwYXJ0LCBkbzoKKworICAgJCBhcHQtZ2V0IGluc3RhbGwgbGl0bXVzCisgICAkIGxpdG11cyBodHRwOi8vPHNlcnZlcm5hbWU+L215LW5ldy1yZXBvLmdpdCA8dXNlcm5hbWU+IDxwYXNzd29yZD4KKworICAgTW9zdCB0ZXN0cyBzaG91bGQgcGFzcy4KKworQSBjb21tYW5kIGxpbmUgdG9vbCB0byB0ZXN0IFdlYkRBViBpcyBjYWRhdmVyLiBJZiB5b3UgcHJlZmVyIEdVSXMsIGZvcgorZXhhbXBsZSwga29ucXVlcm9yIGNhbiBvcGVuIFdlYkRBViBVUkxzIGFzICJ3ZWJkYXY6Ly8uLi4iIG9yCisid2ViZGF2czovLy4uLiIuCisKK0lmIHlvdSdyZSBpbnRvIFdpbmRvd3MsIGZyb20gWFAgb253YXJkcyBJbnRlcm5ldCBFeHBsb3JlciBzdXBwb3J0cworV2ViREFWLiBGb3IgdGhpcywgZG8gSW50ZXJuZXQgRXhwbG9yZXIgLT4gT3BlbiBMb2NhdGlvbiAtPgoraHR0cDovLzxzZXJ2ZXJuYW1lPi9teS1uZXctcmVwby5naXQgW3hdIE9wZW4gYXMgd2ViZm9sZGVyIC0+IGxvZ2luIC4KKworCitTdGVwIDM6IHNldHVwIHRoZSBjbGllbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBIVFRQIHN1cHBvcnQsIGkuZS4geW91ciBnaXQgd2FzIGJ1aWx0IHdpdGgKK2xpYmN1cmwgKHZlcnNpb24gbW9yZSByZWNlbnQgdGhhbiA3LjEwKS4gVGhlIGNvbW1hbmQgJ2dpdCBodHRwLXB1c2gnIHdpdGgKK25vIGFyZ3VtZW50IHNob3VsZCBkaXNwbGF5IGEgdXNhZ2UgbWVzc2FnZS4KKworVGhlbiwgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciAkSE9NRS8ubmV0cmMgKHlvdSBjYW4gZG8gd2l0aG91dCwgYnV0IHdpbGwgYmUKK2Fza2VkIHRvIGlucHV0IHlvdXIgcGFzc3dvcmQgYSBfbG90XyBvZiB0aW1lcyk6CisKKyAgICBtYWNoaW5lIDxzZXJ2ZXJuYW1lPgorICAgIGxvZ2luIDx1c2VybmFtZT4KKyAgICBwYXNzd29yZCA8cGFzc3dvcmQ+CisKKy4uLmFuZCBzZXQgcGVybWlzc2lvbnM6CisgICAgIGNobW9kIDYwMCB+Ly5uZXRyYworCitJZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGhlIHdlYi1zZXJ2ZXIgYnkgaXRzIElQLCB5b3UgaGF2ZSB0byB0eXBlIHRoYXQgaW4sCitpbnN0ZWFkIG9mIHRoZSBzZXJ2ZXIgbmFtZS4KKworVG8gY2hlY2sgd2hldGhlciBhbGwgaXMgT0ssIGRvOgorCisgICBjdXJsIC0tbmV0cmMgLS1sb2NhdGlvbiAtdiBodHRwOi8vPHVzZXJuYW1lPkA8c2VydmVybmFtZT4vbXktbmV3LXJlcG8uZ2l0L0hFQUQKKworLi4udGhpcyBzaG91bGQgZ2l2ZSBzb21ldGhpbmcgbGlrZSAncmVmOiByZWZzL2hlYWRzL21hc3RlcicsIHdoaWNoIGlzCit0aGUgY29udGVudCBvZiB0aGUgZmlsZSBIRUFEIG9uIHRoZSBzZXJ2ZXIuCisKK05vdywgYWRkIHRoZSByZW1vdGUgaW4geW91ciBleGlzdGluZyByZXBvc2l0b3J5IHdoaWNoIGNvbnRhaW5zIHRoZSBwcm9qZWN0Cit5b3Ugd2FudCB0byBleHBvcnQ6CisKKyAgICQgZ2l0LWNvbmZpZyByZW1vdGUudXBsb2FkLnVybCBcCisgICAgICAgaHR0cDovLzx1c2VybmFtZT5APHNlcnZlcm5hbWU+L215LW5ldy1yZXBvLmdpdC8KKworSXQgaXMgaW1wb3J0YW50IHRvIHB1dCB0aGUgbGFzdCAnLyc7IFdpdGhvdXQgaXQsIHRoZSBzZXJ2ZXIgd2lsbCBzZW5kCithIHJlZGlyZWN0IHdoaWNoIGdpdC1odHRwLXB1c2ggZG9lcyBub3QgKHlldCkgdW5kZXJzdGFuZCwgYW5kIGdpdC1odHRwLXB1c2gKK3dpbGwgcmVwZWF0IHRoZSByZXF1ZXN0IGluZmluaXRlbHkuCisKKworU3RlcCA0OiBtYWtlIHRoZSBpbml0aWFsIHB1c2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Zyb20geW91ciBjbGllbnQgcmVwb3NpdG9yeSwgZG8KKworICAgJCBnaXQgcHVzaCB1cGxvYWQgbWFzdGVyCisKK1RoaXMgcHVzaGVzIGJyYW5jaCAnbWFzdGVyJyAod2hpY2ggaXMgYXNzdW1lZCB0byBiZSB0aGUgYnJhbmNoIHlvdQord2FudCB0byBleHBvcnQpIHRvIHJlcG9zaXRvcnkgY2FsbGVkICd1cGxvYWQnLCB3aGljaCB3ZSBwcmV2aW91c2x5CitkZWZpbmVkIHdpdGggZ2l0LWNvbmZpZy4KKworCitVc2luZyBhIHByb3h5OgorLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGhhdmUgdG8gYWNjZXNzIHRoZSBXZWJEQVYgc2VydmVyIGZyb20gYmVoaW5kIGFuIEhUVFAoUykgcHJveHksCitzZXQgdGhlIHZhcmlhYmxlICdhbGxfcHJveHknIHRvICdodHRwOi8vcHJveHktaG9zdC5jb206cG9ydCcsIG9yCisnaHR0cDovL2xvZ2luLW9uLXByb3h5OnBhc3N3ZC1vbi1wcm94eUBwcm94eS1ob3N0LmNvbTpwb3J0Jy4gU2VlICdtYW4KK2N1cmwnIGZvciBkZXRhaWxzLgorCisKK1Ryb3VibGVzaG9vdGluZzoKKy0tLS0tLS0tLS0tLS0tLS0KKworSWYgZ2l0LWh0dHAtcHVzaCBzYXlzCisKKyAgIEVycm9yOiBubyBEQVYgbG9ja2luZyBzdXBwb3J0IG9uIHJlbW90ZSByZXBvIGh0dHA6Ly8uLi4KKwordGhlbiBpdCBtZWFucyB0aGUgd2ViLXNlcnZlciBkaWQgbm90IGFjY2VwdCB5b3VyIGF1dGhlbnRpY2F0aW9uLiBNYWtlIHN1cmUKK3RoYXQgdGhlIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgbWF0Y2hlcyBpbiBodHRwZC5jb25mLCAubmV0cmMgYW5kIHRoZSBVUkwKK3lvdSBhcmUgdXBsb2FkaW5nIHRvLgorCitJZiBnaXQtaHR0cC1wdXNoIHNob3dzIHlvdSBhbiBlcnJvciAoMjIvNTAyKSB3aGVuIHRyeWluZyB0byBNT1ZFIGEgYmxvYiwKK2l0IG1lYW5zIHRoYXQgeW91ciB3ZWItc2VydmVyIHNvbWVob3cgZG9lcyBub3QgcmVjb2duaXplIGl0cyBuYW1lIGluIHRoZQorcmVxdWVzdDsgVGhpcyBjYW4gaGFwcGVuIHdoZW4geW91IHN0YXJ0IEFwYWNoZSwgYnV0IHRoZW4gZGlzYWJsZSB0aGUKK25ldHdvcmsgaW50ZXJmYWNlLiBBIHNpbXBsZSByZXN0YXJ0IG9mIEFwYWNoZSBoZWxwcy4KKworRXJyb3JzIGxpa2UgKDIyLzUwMikgYXJlIG9mIGZvcm1hdCAoY3VybCBlcnJvciBjb2RlL2h0dHAgZXJyb3IKK2NvZGUpLiBTbyAoMjIvNDA0KSBtZWFucyBzb21ldGhpbmcgbGlrZSAnbm90IGZvdW5kJyBhdCB0aGUgc2VydmVyLgorCitSZWFkaW5nIC91c3IvbG9jYWwvYXBhY2hlMi9sb2dzL2Vycm9yX2xvZyBpcyBvZnRlbiBoZWxwZnVsLgorCisgIE9uIERlYmlhbjogUmVhZCAvdmFyL2xvZy9hcGFjaGUyL2Vycm9yLmxvZyBpbnN0ZWFkLgorCitJZiB5b3UgYWNjZXNzIEhUVFBTIGxvY2F0aW9ucywgZ2l0IG1heSBmYWlsIHZlcmlmeWluZyB0aGUgU1NMCitjZXJ0aWZpY2F0ZSAodGhpcyBpcyByZXR1cm4gY29kZSA2MCkuIFNldHRpbmcgaHR0cC5zc2xWZXJpZnk9ZmFsc2UgY2FuCitoZWxwIGRpYWdub3NpbmcgdGhlIHByb2JsZW0sIGJ1dCByZW1vdmVzIHNlY3VyaXR5IGNoZWNrcy4KKworCitEZWJpYW4gUmVmZXJlbmNlczogaHR0cDovL3d3dy5kZWJpYW4tYWRtaW5pc3RyYXRpb24ub3JnL2FydGljbGVzLzI4NQorCitBdXRob3JzCisgIEpvaGFubmVzIFNjaGluZGVsaW4gPEpvaGFubmVzLlNjaGluZGVsaW5AZ214LmRlPgorICBSdXRnZXIgTmlqbHVuc2luZyA8Z2l0QHdpbmdkaW5nLmRlbW9uLm5sPgorICBNYXR0aGlldSBNb3kgPE1hdHRoaWV1Lk1veUBpbWFnLmZyPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by91cGRhdGUtaG9vay1leGFtcGxlLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmOGQ0MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHQKQEAgLTAsMCArMSwxOTIgQEAKK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gYW5kIENhcmwgQmFsZHdpbiA8Y25iQGZjLmhwLmNvbT4KK1N1YmplY3Q6IGNvbnRyb2wgYWNjZXNzIHRvIGJyYW5jaGVzLgorRGF0ZTogVGh1LCAxNyBOb3YgMjAwNSAyMzo1NTozMiAtMDgwMAorTWVzc2FnZS1JRDogPDd2ZnlwdW1sdTMuZnNmQGFzc2lnbmVkLWJ5LWRoY3AuY294Lm5ldD4KK0Fic3RyYWN0OiBBbiBleGFtcGxlIGhvb2tzL3VwZGF0ZSBzY3JpcHQgaXMgcHJlc2VudGVkIHRvCisgaW1wbGVtZW50IHJlcG9zaXRvcnkgbWFpbnRlbmFuY2UgcG9saWNpZXMsIHN1Y2ggYXMgd2hvIGNhbiBwdXNoCisgaW50byB3aGljaCBicmFuY2ggYW5kIHdobyBjYW4gbWFrZSBhIHRhZy4KKworV2hlbiB5b3VyIGRldmVsb3BlciBydW5zIGdpdC1wdXNoIGludG8gdGhlIHJlcG9zaXRvcnksCitnaXQtcmVjZWl2ZS1wYWNrIGlzIHJ1biAoZWl0aGVyIGxvY2FsbHkgb3Igb3ZlciBzc2gpIGFzIHRoYXQKK2RldmVsb3Blciwgc28gaXMgaG9va3MvdXBkYXRlIHNjcmlwdC4gIFF1b3RpbmcgZnJvbSB0aGUgcmVsZXZhbnQKK3NlY3Rpb24gb2YgdGhlIGRvY3VtZW50YXRpb246CisKKyAgICBCZWZvcmUgZWFjaCByZWYgaXMgdXBkYXRlZCwgaWYgJEdJVF9ESVIvaG9va3MvdXBkYXRlIGZpbGUgZXhpc3RzCisgICAgYW5kIGV4ZWN1dGFibGUsIGl0IGlzIGNhbGxlZCB3aXRoIHRocmVlIHBhcmFtZXRlcnM6CisKKyAgICAgICAgICAgJEdJVF9ESVIvaG9va3MvdXBkYXRlIHJlZm5hbWUgc2hhMS1vbGQgc2hhMS1uZXcKKworICAgIFRoZSByZWZuYW1lIHBhcmFtZXRlciBpcyByZWxhdGl2ZSB0byAkR0lUX0RJUjsgZS5nLiBmb3IgdGhlCisgICAgbWFzdGVyIGhlYWQgdGhpcyBpcyAicmVmcy9oZWFkcy9tYXN0ZXIiLiAgVHdvIHNoYTEgYXJlIHRoZQorICAgIG9iamVjdCBuYW1lcyBmb3IgdGhlIHJlZm5hbWUgYmVmb3JlIGFuZCBhZnRlciB0aGUgdXBkYXRlLiAgTm90ZQorICAgIHRoYXQgdGhlIGhvb2sgaXMgY2FsbGVkIGJlZm9yZSB0aGUgcmVmbmFtZSBpcyB1cGRhdGVkLCBzbyBlaXRoZXIKKyAgICBzaGExLW9sZCBpcyAwezQwfSAobWVhbmluZyB0aGVyZSBpcyBubyBzdWNoIHJlZiB5ZXQpLCBvciBpdAorICAgIHNob3VsZCBtYXRjaCB3aGF0IGlzIHJlY29yZGVkIGluIHJlZm5hbWUuCisKK1NvIGlmIHlvdXIgcG9saWN5IGlzICgxKSBhbHdheXMgcmVxdWlyZSBmYXN0LWZvcndhcmQgcHVzaAorKGkuZS4gbmV2ZXIgYWxsb3cgImdpdC1wdXNoIHJlcG8gK2JyYW5jaDpicmFuY2giKSwgKDIpIHlvdQoraGF2ZSBhIGxpc3Qgb2YgdXNlcnMgYWxsb3dlZCB0byB1cGRhdGUgZWFjaCBicmFuY2gsIGFuZCAoMykgeW91CitkbyBub3QgbGV0IHRhZ3MgdG8gYmUgb3ZlcndyaXR0ZW4sIHRoZW4geW91IGNhbiB1c2Ugc29tZXRoaW5nCitsaWtlIHRoaXMgYXMgeW91ciBob29rcy91cGRhdGUgc2NyaXB0LgorCitbamM6IGVkaXRvcmlhbCBub3RlLiAgVGhpcyBpcyBhIG11Y2ggaW1wcm92ZWQgdmVyc2lvbiBieSBDYXJsCitzaW5jZSBJIHBvc3RlZCB0aGUgb3JpZ2luYWwgb3V0bGluZV0KKworLS0gPjggLS0gYmVnaW5uaW5nIG9mIHNjcmlwdCAtLSA+OCAtLQorCisjIS9iaW4vYmFzaAorCit1bWFzayAwMDIKKworIyBJZiB5b3UgYXJlIGhhdmluZyB0cm91YmxlIHdpdGggdGhpcyBhY2Nlc3MgY29udHJvbCBob29rIHNjcmlwdAorIyB5b3UgY2FuIHRyeSBzZXR0aW5nIHRoaXMgdG8gdHJ1ZS4gIEl0IHdpbGwgdGVsbCB5b3UgZXhhY3RseQorIyB3aHkgYSB1c2VyIGlzIGJlaW5nIGFsbG93ZWQvZGVuaWVkIGFjY2Vzcy4KKwordmVyYm9zZT1mYWxzZQorCisjIERlZmF1bHQgc2hlbGwgZ2xvYmJpbmcgbWVzc2VzIHRoaW5ncyB1cCBkb3duc3RyZWFtCitHTE9CSUdOT1JFPSoKKworZnVuY3Rpb24gZ3JhbnQgeworICAkdmVyYm9zZSAmJiBlY2hvID4mMiAiLUdyYW50LQkJJDEiCisgIGVjaG8gZ3JhbnQKKyAgZXhpdCAwCit9CisKK2Z1bmN0aW9uIGRlbnkgeworICAkdmVyYm9zZSAmJiBlY2hvID4mMiAiLURlbnktCQkkMSIKKyAgZWNobyBkZW55CisgIGV4aXQgMQorfQorCitmdW5jdGlvbiBpbmZvIHsKKyAgJHZlcmJvc2UgJiYgZWNobyA+JjIgIi1JbmZvLQkJJDEiCit9CisKKyMgSW1wbGVtZW50IGdlbmVyaWMgYnJhbmNoIGFuZCB0YWcgcG9saWNpZXMuCisjIC0gVGFncyBzaG91bGQgbm90IGJlIHVwZGF0ZWQgb25jZSBjcmVhdGVkLgorIyAtIEJyYW5jaGVzIHNob3VsZCBvbmx5IGJlIGZhc3QtZm9yd2FyZGVkIHVubGVzcyB0aGVpciBwYXR0ZXJuIHN0YXJ0cyB3aXRoICcrJworY2FzZSAiJDEiIGluCisgIHJlZnMvdGFncy8qKQorICAgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgIiQxIiAmJgorICAgIGRlbnkgPi9kZXYvbnVsbCAiWW91IGNhbid0IG92ZXJ3cml0ZSBhbiBleGlzdGluZyB0YWciCisgICAgOzsKKyAgcmVmcy9oZWFkcy8qKQorICAgICMgTm8gcmViYXNpbmcgb3IgcmV3aW5kaW5nCisgICAgaWYgZXhwciAiJDIiIDogJzAqJCcgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgaW5mbyAiVGhlIGJyYW5jaCAnJDEnIGlzIG5ldy4uLiIKKyAgICBlbHNlCisgICAgICAjIHVwZGF0aW5nIC0tIG1ha2Ugc3VyZSBpdCBpcyBhIGZhc3QtZm9yd2FyZAorICAgICAgbWI9JChnaXQtbWVyZ2UtYmFzZSAiJDIiICIkMyIpCisgICAgICBjYXNlICIkbWIsJDIiIGluCisgICAgICAgICIkMiwkbWIiKSBpbmZvICJVcGRhdGUgaXMgZmFzdC1mb3J3YXJkIiA7OworCSopCSAgbm9mZj15OyBpbmZvICJUaGlzIGlzIG5vdCBhIGZhc3QtZm9yd2FyZCB1cGRhdGUuIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqKQorICAgIGRlbnkgPi9kZXYvbnVsbCBcCisgICAgIkJyYW5jaCBpcyBub3QgdW5kZXIgcmVmcy9oZWFkcyBvciByZWZzL3RhZ3MuICBXaGF0IGFyZSB5b3UgdHJ5aW5nIHRvIGRvPyIKKyAgICA7OworZXNhYworCisjIEltcGxlbWVudCBwZXItYnJhbmNoIGNvbnRyb2xzIGJhc2VkIG9uIHVzZXJuYW1lCithbGxvd2VkX3VzZXJzX2ZpbGU9JEdJVF9ESVIvaW5mby9hbGxvd2VkLXVzZXJzCit1c2VybmFtZT0kKGlkIC11IC1uKQoraW5mbyAiVGhlIHVzZXIgaXM6ICckdXNlcm5hbWUnIgorCitpZiB0ZXN0IC1mICIkYWxsb3dlZF91c2Vyc19maWxlIgordGhlbgorICByYz0kKGNhdCAkYWxsb3dlZF91c2Vyc19maWxlIHwgZ3JlcCAtdiAnXiMnIHwgZ3JlcCAtdiAnXiQnIHwKKyAgICB3aGlsZSByZWFkIGhlYWRzIHVzZXJfcGF0dGVybnMKKyAgICBkbworICAgICAgIyBkb2VzIHRoaXMgcnVsZSBhcHBseSB0byB1cz8KKyAgICAgIGhlYWRfcGF0dGVybj0ke2hlYWRzIyt9CisgICAgICBtYXRjaGxlbj0kKGV4cHIgIiQxIiA6ICIke2hlYWRfcGF0dGVybiMrfSIpCisgICAgICB0ZXN0ICIkbWF0Y2hsZW4iID0gJHsjMX0gfHwgY29udGludWUKKworICAgICAgIyBpZiBub24tZmYsICRoZWFkcyBtdXN0IGJlIHdpdGggdGhlICcrJyBwcmVmaXgKKyAgICAgIHRlc3QgLW4gIiRub2ZmIiAmJgorICAgICAgdGVzdCAiJGhlYWRfcGF0dGVybiIgPSAiJGhlYWRzIiAmJiBjb250aW51ZQorCisgICAgICBpbmZvICJGb3VuZCBtYXRjaGluZyBoZWFkIHBhdHRlcm46ICckaGVhZF9wYXR0ZXJuJyIKKyAgICAgIGZvciB1c2VyX3BhdHRlcm4gaW4gJHVzZXJfcGF0dGVybnM7IGRvCisJaW5mbyAiQ2hlY2tpbmcgdXNlcjogJyR1c2VybmFtZScgYWdhaW5zdCBwYXR0ZXJuOiAnJHVzZXJfcGF0dGVybiciCisJbWF0Y2hsZW49JChleHByICIkdXNlcm5hbWUiIDogIiR1c2VyX3BhdHRlcm4iKQorCWlmIHRlc3QgIiRtYXRjaGxlbiIgPSAiJHsjdXNlcm5hbWV9IgorCXRoZW4KKwkgIGdyYW50ICJBbGxvd2luZyB1c2VyOiAnJHVzZXJuYW1lJyB3aXRoIHBhdHRlcm46ICckdXNlcl9wYXR0ZXJuJyIKKwlmaQorICAgICAgZG9uZQorICAgICAgZGVueSAiVGhlIHVzZXIgaXMgbm90IGluIHRoZSBhY2Nlc3MgbGlzdCBmb3IgdGhpcyBicmFuY2giCisgICAgZG9uZQorICApCisgIGNhc2UgIiRyYyIgaW4KKyAgICBncmFudCkgZ3JhbnQgPi9kZXYvbnVsbCAiR3JhbnRpbmcgYWNjZXNzIGJhc2VkIG9uICRhbGxvd2VkX3VzZXJzX2ZpbGUiIDs7CisgICAgZGVueSkgIGRlbnkgID4vZGV2L251bGwgIkRlbnlpbmcgIGFjY2VzcyBiYXNlZCBvbiAkYWxsb3dlZF91c2Vyc19maWxlIiA7OworICAgICopIDs7CisgIGVzYWMKK2ZpCisKK2FsbG93ZWRfZ3JvdXBzX2ZpbGU9JEdJVF9ESVIvaW5mby9hbGxvd2VkLWdyb3VwcworZ3JvdXBzPSQoaWQgLUcgLW4pCitpbmZvICJUaGUgdXNlciBiZWxvbmdzIHRvIHRoZSBmb2xsb3dpbmcgZ3JvdXBzOiIKK2luZm8gIickZ3JvdXBzJyIKKworaWYgdGVzdCAtZiAiJGFsbG93ZWRfZ3JvdXBzX2ZpbGUiCit0aGVuCisgIHJjPSQoY2F0ICRhbGxvd2VkX2dyb3Vwc19maWxlIHwgZ3JlcCAtdiAnXiMnIHwgZ3JlcCAtdiAnXiQnIHwKKyAgICB3aGlsZSByZWFkIGhlYWRzIGdyb3VwX3BhdHRlcm5zCisgICAgZG8KKyAgICAgICMgZG9lcyB0aGlzIHJ1bGUgYXBwbHkgdG8gdXM/CisgICAgICBoZWFkX3BhdHRlcm49JHtoZWFkcyMrfQorICAgICAgbWF0Y2hsZW49JChleHByICIkMSIgOiAiJHtoZWFkX3BhdHRlcm4jK30iKQorICAgICAgdGVzdCAiJG1hdGNobGVuIiA9ICR7IzF9IHx8IGNvbnRpbnVlCisKKyAgICAgICMgaWYgbm9uLWZmLCAkaGVhZHMgbXVzdCBiZSB3aXRoIHRoZSAnKycgcHJlZml4CisgICAgICB0ZXN0IC1uICIkbm9mZiIgJiYKKyAgICAgIHRlc3QgIiRoZWFkX3BhdHRlcm4iID0gIiRoZWFkcyIgJiYgY29udGludWUKKworICAgICAgaW5mbyAiRm91bmQgbWF0Y2hpbmcgaGVhZCBwYXR0ZXJuOiAnJGhlYWRfcGF0dGVybiciCisgICAgICBmb3IgZ3JvdXBfcGF0dGVybiBpbiAkZ3JvdXBfcGF0dGVybnM7IGRvCisJZm9yIGdyb3VwbmFtZSBpbiAkZ3JvdXBzOyBkbworCSAgaW5mbyAiQ2hlY2tpbmcgZ3JvdXA6ICckZ3JvdXBuYW1lJyBhZ2FpbnN0IHBhdHRlcm46ICckZ3JvdXBfcGF0dGVybiciCisJICBtYXRjaGxlbj0kKGV4cHIgIiRncm91cG5hbWUiIDogIiRncm91cF9wYXR0ZXJuIikKKwkgIGlmIHRlc3QgIiRtYXRjaGxlbiIgPSAiJHsjZ3JvdXBuYW1lfSIKKwkgIHRoZW4KKwkgICAgZ3JhbnQgIkFsbG93aW5nIGdyb3VwOiAnJGdyb3VwbmFtZScgd2l0aCBwYXR0ZXJuOiAnJGdyb3VwX3BhdHRlcm4nIgorCSAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZG9uZQorICAgICAgZGVueSAiTm9uZSBvZiB0aGUgdXNlcidzIGdyb3VwcyBhcmUgaW4gdGhlIGFjY2VzcyBsaXN0IGZvciB0aGlzIGJyYW5jaCIKKyAgICBkb25lCisgICkKKyAgY2FzZSAiJHJjIiBpbgorICAgIGdyYW50KSBncmFudCA+L2Rldi9udWxsICJHcmFudGluZyBhY2Nlc3MgYmFzZWQgb24gJGFsbG93ZWRfZ3JvdXBzX2ZpbGUiIDs7CisgICAgZGVueSkgIGRlbnkgID4vZGV2L251bGwgIkRlbnlpbmcgIGFjY2VzcyBiYXNlZCBvbiAkYWxsb3dlZF9ncm91cHNfZmlsZSIgOzsKKyAgICAqKSA7OworICBlc2FjCitmaQorCitkZW55ID4vZGV2L251bGwgIlRoZXJlIGFyZSBubyBtb3JlIHJ1bGVzIHRvIGNoZWNrLiAgRGVueWluZyBhY2Nlc3MiCisKKy0tID44IC0tIGVuZCBvZiBzY3JpcHQgLS0gPjggLS0KKworVGhpcyB1c2VzIHR3byBmaWxlcywgJEdJVF9ESVIvaW5mby9hbGxvd2VkLXVzZXJzIGFuZAorYWxsb3dlZC1ncm91cHMsIHRvIGRlc2NyaWJlIHdoaWNoIGhlYWRzIGNhbiBiZSBwdXNoZWQgaW50byBieQord2hvbS4gIFRoZSBmb3JtYXQgb2YgZWFjaCBmaWxlIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCisgICAgICAgIHJlZnMvaGVhZHMvbWFzdGVyCWp1bmlvCisJK3JlZnMvaGVhZHMvcHUJCWp1bmlvCisgICAgICAgIHJlZnMvaGVhZHMvY29naXRvJAlwYXNreQorICAgICAgICByZWZzL2hlYWRzL2J3Ly4qCWxpbnVzCisgICAgICAgIHJlZnMvaGVhZHMvdG1wLy4qCS4qCisgICAgICAgIHJlZnMvdGFncy92WzAtOV0uKglqdW5pbworCitXaXRoIHRoaXMsIExpbnVzIGNhbiBwdXNoIG9yIGNyZWF0ZSAiYncvcGVuZ3VpbiIgb3IgImJ3L3plYnJhIgorb3IgImJ3L3BhbmRhIiBicmFuY2hlcywgUGFza3kgY2FuIGRvIG9ubHkgImNvZ2l0byIsIGFuZCBKQyBjYW4KK2RvIG1hc3RlciBhbmQgcHUgYnJhbmNoZXMgYW5kIG1ha2UgdmVyc2lvbmVkIHRhZ3MuICBBbmQgYW55Ym9keQorY2FuIGRvIHRtcC9ibGFoIGJyYW5jaGVzLiBUaGUgJysnIHNpZ24gYXQgdGhlIHB1IHJlY29yZCBtZWFucwordGhhdCBKQyBjYW4gbWFrZSBub24tZmFzdC1mb3J3YXJkIHB1c2hlcyBvbiBpdC4KKworLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3VzZS1naXQtZGFlbW9uLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNlLWdpdC1kYWVtb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMmY3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VzZS1naXQtZGFlbW9uLnR4dApAQCAtMCwwICsxLDUxIEBACitIb3cgdG8gdXNlIGdpdC1kYWVtb24KKworR2l0IGNhbiBiZSBydW4gaW4gaW5ldGQgbW9kZSBhbmQgaW4gc3RhbmQgYWxvbmUgbW9kZS4gQnV0IGFsbCB5b3Ugd2FudCBpcworbGV0IGEgY293b3JrZXIgcHVsbCBmcm9tIHlvdSwgYW5kIHRoZXJlZm9yZSBuZWVkIHRvIHNldCB1cCBhIGdpdCBzZXJ2ZXIKK3JlYWwgcXVpY2ssIHJpZ2h0PworCitOb3RlIHRoYXQgZ2l0LWRhZW1vbiBpcyBub3QgcmVhbGx5IGNoYXR0eSBhdCB0aGUgbW9tZW50LCBlc3BlY2lhbGx5IHdoZW4KK3RoaW5ncyBkbyBub3QgZ28gYWNjb3JkaW5nIHRvIHBsYW4gKGUuZy4gYSBzb2NrZXQgY291bGQgbm90IGJlIGJvdW5kKS4KKworQW5vdGhlciB3b3JkIG9mIHdhcm5pbmc6IGlmIHlvdSBydW4KKworCSQgZ2l0IGxzLXJlbW90ZSBnaXQ6Ly8xMjcuMC4wLjEvcnVsZS10aGUtd29ybGQuZ2l0CisKK2FuZCB5b3Ugc2VlIGEgbWVzc2FnZSBsaWtlCisKKwlmYXRhbDogVGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkKKworaXQgb25seSBtZWFucyB0aGF0IF9zb21ldGhpbmdfIHdlbnQgd3JvbmcuIFRvIGZpbmQgb3V0IF93aGF0XyB3ZW50IHdyb25nLAoreW91IGhhdmUgdG8gYXNrIHRoZSBzZXJ2ZXIuIChHaXQgcmVmdXNlcyB0byBiZSBtb3JlIHByZWNpc2UgZm9yIHlvdXIKK3NlY3VyaXR5IG9ubHkuIFRha2Ugb2ZmIHlvdXIgc2hvZXMgbm93LiBZb3UgaGF2ZSBhbnkgY29pbnMgaW4geW91ciBwb2NrZXRzPworU29ycnksIG5vdCBhbGxvd2VkIC0tIHdobyBrbm93cyB3aGF0IHlvdSBwbGFubmVkIHRvIGRvIHdpdGggdGhlbT8pCisKK1dpdGggdGhlc2UgdHdvIGNhdmVhdHMsIGxldCdzIHNlZSBhbiBleGFtcGxlOgorCisJJCBnaXQgZGFlbW9uIC0tcmV1c2VhZGRyIC0tdmVyYm9zZSAtLWJhc2UtcGF0aD0vaG9tZS9naXR0ZS9naXQgXAorCSAgLS1leHBvcnQtYWxsIC0tIC9ob21lL2dpdHRlL2dpdC9ydWxlLXRoZS13b3JsZC5naXQKKworKE9mIGNvdXJzZSwgdW5sZXNzIHlvdXIgdXNlciBuYW1lIGlzIGBnaXR0ZWAgX2FuZF8geW91ciByZXBvc2l0b3J5IGlzIGluCit+L3J1bGUtdGhlLXdvcmxkLmdpdCwgeW91IGhhdmUgdG8gYWRqdXN0IHRoZSBwYXRocy4gSWYgeW91ciByZXBvc2l0b3J5IGlzCitub3QgYmFyZSwgYmUgYXdhcmUgdGhhdCB5b3UgaGF2ZSB0byB0eXBlIHRoZSBwYXRoIHRvIHRoZSAuZ2l0IGRpcmVjdG9yeSEpCisKK1RoaXMgaW52b2NhdGlvbiB0cmllcyB0byByZXVzZSB0aGUgYWRkcmVzcyBpZiBpdCBpcyBhbHJlYWR5IHRha2VuCisodGhpcyBjYW4gc2F2ZSB5b3Ugc29tZSBkZWJ1Z2dpbmcsIGJlY2F1c2Ugb3RoZXJ3aXNlIGtpbGxpbmcgYW5kIHJlc3RhcnRpbmcKK2dpdC1kYWVtb24gY291bGQganVzdCBzaWxlbnRseSBmYWlsIHRvIGJpbmQgdG8gYSBzb2NrZXQpLgorCitBbHNvLCBpdCBpcyAocmVsYXRpdmVseSkgdmVyYm9zZSB3aGVuIHNvbWVib2R5IGFjdHVhbGx5IGNvbm5lY3RzIHRvIGl0LgorSXQgYWxzbyBzZXRzIHRoZSBiYXNlIHBhdGgsIHdoaWNoIG1lYW5zIHRoYXQgYWxsIHRoZSBwcm9qZWN0cyB3aGljaCBjYW4gYmUKK2FjY2Vzc2VkIHVzaW5nIHRoaXMgZGFlbW9uIGhhdmUgdG8gcmVzaWRlIGluIG9yIHVuZGVyIHRoYXQgcGF0aC4KKworVGhlIG9wdGlvbiBgLS1leHBvcnQtYWxsYCBqdXN0IG1lYW5zIHRoYXQgeW91IF9kb24ndF8gaGF2ZSB0byBjcmVhdGUgYQorZmlsZSBuYW1lZCBgZ2l0LWRhZW1vbi1leHBvcnQtb2tgIGluIGVhY2ggZXhwb3J0ZWQgcmVwb3NpdG9yeS4gKE90aGVyd2lzZSwKK2dpdC1kYWVtb24gd291bGQgY29tcGxhaW4gbG91ZGx5LCBhbmQgcmVmdXNlIHRvIGNvb3BlcmF0ZS4pCisKK0xhc3Qgb2YgYWxsLCB0aGUgcmVwb3NpdG9yeSB3aGljaCBzaG91bGQgYmUgZXhwb3J0ZWQgaXMgc3BlY2lmaWVkLiBJdCBpcworYSBnb29kIHByYWN0aWNlIHRvIHB1dCB0aGUgcGF0aHMgYWZ0ZXIgYSAiLS0iIHNlcGFyYXRvci4KKworTm93LCB0ZXN0IHlvdXIgZGFlbW9uIHdpdGgKKworCSQgZ2l0IGxzLXJlbW90ZSBnaXQ6Ly8xMjcuMC4wLjEvcnVsZS10aGUtd29ybGQuZ2l0CisKK0lmIHRoaXMgZG9lcyBub3Qgd29yaywgZmluZCBvdXQgd2h5LCBhbmQgc3VibWl0IGEgcGF0Y2ggdG8gdGhpcyBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctbWVyZ2Utc3VidHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VzaW5nLW1lcmdlLXN1YnRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZThkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VzaW5nLW1lcmdlLXN1YnRyZWUudHh0CkBAIC0wLDAgKzEsNzUgQEAKK0RhdGU6IFNhdCwgNSBKYW4gMjAwOCAyMDoxNzo0MCAtMDUwMAorRnJvbTogU2VhbiA8c2VhbmxrbWxAc3ltcGF0aWNvLmNhPgorVG86IE1pa2xvcyBWYWpuYSA8dm1pa2xvc0BmcnVnYWx3YXJlLm9yZz4KK0NjOiBnaXRAdmdlci5rZXJuZWwub3JnCitTdWJqZWN0OiBob3cgdG8gdXNlIGdpdCBtZXJnZSAtcyBzdWJ0cmVlPworQWJzdHJhY3Q6IEluIHRoaXMgYXJ0aWNsZSwgU2VhbiBkZW1vbnN0cmF0ZXMgaG93IG9uZSBjYW4gdXNlIHRoZSBzdWJ0cmVlIG1lcmdlCisgc3RyYXRlZ3kuCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKK01lc3NhZ2UtSUQ6IDxCQVlDMS1QQVNNVFAxMjM3NEI1NEJBMzcwQTFFMUM2RTc4QUU0RTBAQ0VaLklDRT4KKworSG93IHRvIHVzZSB0aGUgc3VidHJlZSBtZXJnZSBzdHJhdGVneQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgc2l0dWF0aW9ucyB3aGVyZSB5b3Ugd2FudCB0byBpbmNsdWRlIGNvbnRlbnRzIGluIHlvdXIgcHJvamVjdAorZnJvbSBhbiBpbmRlcGVuZGVudGx5IGRldmVsb3BlZCBwcm9qZWN0LiBZb3UgY2FuIGp1c3QgcHVsbCBmcm9tIHRoZQorb3RoZXIgcHJvamVjdCBhcyBsb25nIGFzIHRoZXJlIGFyZSBubyBjb25mbGljdGluZyBwYXRocy4KKworVGhlIHByb2JsZW1hdGljIGNhc2UgaXMgd2hlbiB0aGVyZSBhcmUgY29uZmxpY3RpbmcgZmlsZXMuIFBvdGVudGlhbAorY2FuZGlkYXRlcyBhcmUgTWFrZWZpbGVzIGFuZCBvdGhlciBzdGFuZGFyZCBmaWxlbmFtZXMuIFlvdSBjb3VsZCBtZXJnZQordGhlc2UgZmlsZXMgYnV0IHByb2JhYmx5IHlvdSBkbyBub3Qgd2FudCB0by4gIEEgYmV0dGVyIHNvbHV0aW9uIGZvciB0aGlzCitwcm9ibGVtIGNhbiBiZSB0byBtZXJnZSB0aGUgcHJvamVjdCBhcyBpdHMgb3duIHN1YmRpcmVjdG9yeS4gVGhpcyBpcyBub3QKK3N1cHBvcnRlZCBieSB0aGUgJ3JlY3Vyc2l2ZScgbWVyZ2Ugc3RyYXRlZ3ksIHNvIGp1c3QgcHVsbGluZyB3b24ndCB3b3JrLgorCitXaGF0IHlvdSB3YW50IGlzIHRoZSAnc3VidHJlZScgbWVyZ2Ugc3RyYXRlZ3ksIHdoaWNoIGhlbHBzIHlvdSBpbiBzdWNoIGEKK3NpdHVhdGlvbi4KKworSW4gdGhpcyBleGFtcGxlLCBsZXQncyBzYXkgeW91IGhhdmUgdGhlIHJlcG9zaXRvcnkgYXQgYC9wYXRoL3RvL0JgIChidXQKK2l0IGNhbiBiZSBhIFVSTCBhcyB3ZWxsLCBpZiB5b3Ugd2FudCkuIFlvdSB3YW50IHRvIG1lcmdlIHRoZSAnbWFzdGVyJworYnJhbmNoIG9mIHRoYXQgcmVwb3NpdG9yeSB0byB0aGUgYGRpci1CYCBzdWJkaXJlY3RvcnkgaW4geW91ciBjdXJyZW50CiticmFuY2guCisKK0hlcmUgaXMgdGhlIGNvbW1hbmQgc2VxdWVuY2UgeW91IG5lZWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlbW90ZSBhZGQgLWYgQnByb2plY3QgL3BhdGgvdG8vQiA8MT4KKyQgZ2l0IG1lcmdlIC1zIG91cnMgLS1uby1jb21taXQgQnByb2plY3QvbWFzdGVyIDwyPgorJCBnaXQgcmVhZC10cmVlIC0tcHJlZml4PWRpci1CLyAtdSBCcHJvamVjdC9tYXN0ZXIgPDM+CiskIGdpdCBjb21taXQgLW0gIk1lcmdlIEIgcHJvamVjdCBhcyBvdXIgc3ViZGlyZWN0b3J5IiA8ND4KKworJCBnaXQgcHVsbCAtcyBzdWJ0cmVlIEJwcm9qZWN0IG1hc3RlciA8NT4KKy0tLS0tLS0tLS0tLS0tLS0KKzwxPiBuYW1lIHRoZSBvdGhlciBwcm9qZWN0ICJCcHJvamVjdCIsIGFuZCBmZXRjaC4KKzwyPiBwcmVwYXJlIGZvciB0aGUgbGF0ZXIgc3RlcCB0byByZWNvcmQgdGhlIHJlc3VsdCBhcyBhIG1lcmdlLgorPDM+IHJlYWQgIm1hc3RlciIgYnJhbmNoIG9mIEJwcm9qZWN0IHRvIHRoZSBzdWJkaXJlY3RvcnkgImRpci1CIi4KKzw0PiByZWNvcmQgdGhlIG1lcmdlIHJlc3VsdC4KKzw1PiBtYWludGFpbiB0aGUgcmVzdWx0IHdpdGggc3Vic2VxdWVudCBtZXJnZXMgdXNpbmcgInN1YnRyZWUiCisKK1RoZSBmaXJzdCBmb3VyIGNvbW1hbmRzIGFyZSB1c2VkIGZvciB0aGUgaW5pdGlhbCBtZXJnZSwgd2hpbGUgdGhlIGxhc3QKK29uZSBpcyB0byBtZXJnZSB1cGRhdGVzIGZyb20gJ0IgcHJvamVjdCcuCisKK0NvbXBhcmluZyAnc3VidHJlZScgbWVyZ2Ugd2l0aCBzdWJtb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIFRoZSBiZW5lZml0IG9mIHVzaW5nIHN1YnRyZWUgbWVyZ2UgaXMgdGhhdCBpdCByZXF1aXJlcyBsZXNzCisgIGFkbWluaXN0cmF0aXZlIGJ1cmRlbiBmcm9tIHRoZSB1c2VycyBvZiB5b3VyIHJlcG9zaXRvcnkuIEl0IHdvcmtzIHdpdGgKKyAgb2xkZXIgKGJlZm9yZSBHaXQgdjEuNS4yKSBjbGllbnRzIGFuZCB5b3UgaGF2ZSB0aGUgY29kZSByaWdodCBhZnRlcgorICBjbG9uZS4KKworLSBIb3dldmVyIGlmIHlvdSB1c2Ugc3VibW9kdWxlcyB0aGVuIHlvdSBjYW4gY2hvb3NlIG5vdCB0byB0cmFuc2ZlciB0aGUKKyAgc3VibW9kdWxlIG9iamVjdHMuIFRoaXMgbWF5IGJlIGEgcHJvYmxlbSB3aXRoIHRoZSBzdWJ0cmVlIG1lcmdlLgorCistIEFsc28sIGluIGNhc2UgeW91IG1ha2UgY2hhbmdlcyB0byB0aGUgb3RoZXIgcHJvamVjdCwgaXQgaXMgZWFzaWVyIHRvCisgIHN1Ym1pdCBjaGFuZ2VzIGlmIHlvdSBqdXN0IHVzZSBzdWJtb2R1bGVzLgorCitBZGRpdGlvbmFsIHRpcHMKKy0tLS0tLS0tLS0tLS0tLQorCistIElmIHlvdSBtYWRlIGNoYW5nZXMgdG8gdGhlIG90aGVyIHByb2plY3QgaW4geW91ciByZXBvc2l0b3J5LCB0aGV5IG1heQorICB3YW50IHRvIG1lcmdlIGZyb20geW91ciBwcm9qZWN0LiBUaGlzIGlzIHBvc3NpYmxlIHVzaW5nIHN1YnRyZWUgLS0gaXQKKyAgY2FuIHNoaWZ0IHVwIHRoZSBwYXRocyBpbiB5b3VyIHRyZWUgYW5kIHRoZW4gdGhleSBjYW4gbWVyZ2Ugb25seSB0aGUKKyAgcmVsZXZhbnQgcGFydHMgb2YgeW91ciB0cmVlLgorCistIFBsZWFzZSBub3RlIHRoYXQgaWYgdGhlIG90aGVyIHByb2plY3QgbWVyZ2VzIGZyb20geW91LCB0aGVuIGl0IHdpbGwKKyAgY29ubmVjdCBpdHMgaGlzdG9yeSB0byB5b3Vycywgd2hpY2ggY2FuIGJlIHNvbWV0aGluZyB0aGV5IGRvbid0IHdhbnQKKyAgdG8uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3VzaW5nLXNpZ25lZC10YWctaW4tcHVsbC1yZXF1ZXN0LnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctc2lnbmVkLXRhZy1pbi1wdWxsLXJlcXVlc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YzAwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VzaW5nLXNpZ25lZC10YWctaW4tcHVsbC1yZXF1ZXN0LnR4dApAQCAtMCwwICsxLDIxNyBAQAorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorRGF0ZTogVHVlLCAxNyBKYW4gMjAxMSAxMzowMDowMCAtMDgwMAorU3ViamVjdDogVXNpbmcgc2lnbmVkIHRhZyBpbiBwdWxsIHJlcXVlc3RzCitBYnN0cmFjdDogQmVnaW5uaW5nIHYxLjcuOSwgYSBjb250cmlidXRvciBjYW4gcHVzaCBhIHNpZ25lZCB0YWcgdG8gaGVyCisgcHVibGlzaGluZyByZXBvc2l0b3J5IGFuZCBhc2sgaGVyIGludGVncmF0b3IgdG8gcHVsbCBpdC4gVGhpcyBhc3N1cmVzIHRoZQorIGludGVncmF0b3IgdGhhdCB0aGUgcHVsbGVkIGhpc3RvcnkgaXMgYXV0aGVudGljIGFuZCBhbGxvd3Mgb3RoZXJzIHRvCisgbGF0ZXIgdmFsaWRhdGUgaXQuCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworVXNpbmcgc2lnbmVkIHRhZyBpbiBwdWxsIHJlcXVlc3RzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQSB0eXBpY2FsIGRpc3RyaWJ1dGVkIHdvcmtmbG93IHVzaW5nIEdpdCBpcyBmb3IgYSBjb250cmlidXRvciB0byBmb3JrIGEKK3Byb2plY3QsIGJ1aWxkIG9uIGl0LCBwdWJsaXNoIHRoZSByZXN1bHQgdG8gaGVyIHB1YmxpYyByZXBvc2l0b3J5LCBhbmQgYXNrCit0aGUgInVwc3RyZWFtIiBwZXJzb24gKG9mdGVuIHRoZSBvd25lciBvZiB0aGUgcHJvamVjdCB3aGVyZSBzaGUgZm9ya2VkCitmcm9tKSB0byBwdWxsIGZyb20gaGVyIHB1YmxpYyByZXBvc2l0b3J5LiBSZXF1ZXN0aW5nIHN1Y2ggYSAicHVsbCIgaXMgbWFkZQorZWFzeSBieSB0aGUgYGdpdCByZXF1ZXN0LXB1bGxgIGNvbW1hbmQuCisKK0VhcmxpZXIsIGEgdHlwaWNhbCBwdWxsIHJlcXVlc3QgbWF5IGhhdmUgc3RhcnRlZCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyBzaW5jZSBjb21taXQgNDA2ZGE3ODAzMjE3OS4uLjoKKworICAgRnJvYm96IDMuMiAoMjAxMS0wOS0zMCAxNDoyMDo1NyAtMDcwMCkKKworIGFyZSBhdmFpbGFibGUgaW4gdGhlIGdpdCByZXBvc2l0b3J5IGF0OgorCisgICBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQgZm9yLXh5enp5CistLS0tLS0tLS0tLS0KKworZm9sbG93ZWQgYnkgYSBzaG9ydGxvZyBvZiB0aGUgY2hhbmdlcyBhbmQgYSBkaWZmc3RhdC4KKworVGhlIHJlcXVlc3Qgd2FzIGZvciBhIGJyYW5jaCBuYW1lIChlLmcuIGBmb3IteHl6enlgKSBpbiB0aGUgcHVibGljCityZXBvc2l0b3J5IG9mIHRoZSBjb250cmlidXRvciwgYW5kIGV2ZW4gdGhvdWdoIGl0IHN0YXRlZCB3aGVyZSB0aGUKK2NvbnRyaWJ1dG9yIGZvcmtlZCBoZXIgd29yayBmcm9tLCB0aGUgbWVzc2FnZSBkaWQgbm90IHNheSBhbnl0aGluZyBhYm91dAordGhlIGNvbW1pdCB0byBleHBlY3QgYXQgdGhlIHRpcCBvZiB0aGUgZm9yLXh5enp5IGJyYW5jaC4gSWYgdGhlIHNpdGUgdGhhdAoraG9zdHMgdGhlIHB1YmxpYyByZXBvc2l0b3J5IG9mIHRoZSBjb250cmlidXRvciBjYW5ub3QgYmUgZnVsbHkgdHJ1c3RlZCwgaXQKK3dhcyB1bm5lY2Vzc2FyaWx5IGhhcmQgdG8gbWFrZSBzdXJlIHdoYXQgd2FzIHB1bGxlZCBieSB0aGUgaW50ZWdyYXRvciB3YXMKK2dlbnVpbmVseSB3aGF0IHRoZSBjb250cmlidXRvciBoYWQgcHJvZHVjZWQgZm9yIHRoZSBwcm9qZWN0LiBBbHNvIHRoZXJlCit3YXMgbm8gZWFzeSB3YXkgZm9yIHRoaXJkLXBhcnR5IGF1ZGl0b3JzIHRvIGxhdGVyIHZlcmlmeSB0aGUgcmVzdWx0aW5nCitoaXN0b3J5LgorCitTdGFydGluZyBmcm9tIEdpdCByZWxlYXNlIHYxLjcuOSwgYSBjb250cmlidXRvciBjYW4gYWRkIGEgc2lnbmVkIHRhZyB0bwordGhlIGNvbW1pdCBhdCB0aGUgdGlwIG9mIHRoZSBoaXN0b3J5IGFuZCBhc2sgdGhlIGludGVncmF0b3IgdG8gcHVsbCB0aGF0CitzaWduZWQgdGFnLiBXaGVuIHRoZSBpbnRlZ3JhdG9yIHJ1bnMgYGdpdCBwdWxsYCwgdGhlIHNpZ25lZCB0YWcgaXMKK2F1dG9tYXRpY2FsbHkgdmVyaWZpZWQgdG8gYXNzdXJlIHRoYXQgdGhlIGhpc3RvcnkgaXMgbm90IHRhbXBlcmVkIHdpdGguCitJbiBhZGRpdGlvbiwgdGhlIHJlc3VsdGluZyBtZXJnZSBjb21taXQgcmVjb3JkcyB0aGUgY29udGVudCBvZiB0aGUgc2lnbmVkCit0YWcsIHNvIHRoYXQgb3RoZXIgcGVvcGxlIGNhbiB2ZXJpZnkgdGhhdCB0aGUgYnJhbmNoIG1lcmdlZCBieSB0aGUKK2ludGVncmF0b3Igd2FzIHNpZ25lZCBieSB0aGUgY29udHJpYnV0b3IsIHdpdGhvdXQgZmV0Y2hpbmcgdGhlIHNpZ25lZCB0YWcKK3VzZWQgdG8gdmFsaWRhdGUgdGhlIHB1bGwgcmVxdWVzdCBzZXBhcmF0ZWx5IGFuZCBrZWVwaW5nIGl0IGluIHRoZSByZWZzCituYW1lc3BhY2UuCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB3b3JrZmxvdyBiZXR3ZWVuIHRoZSBjb250cmlidXRvciBhbmQgdGhlCitpbnRlZ3JhdG9yLCB1c2luZyBHaXQgdjEuNy45IG9yIGxhdGVyLgorCisKK0EgY29udHJpYnV0b3Igb3IgYSBsaWV1dGVuYW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciBwcmVwYXJpbmcgaGVyIHdvcmsgdG8gYmUgcHVsbGVkLCB0aGUgY29udHJpYnV0b3IgdXNlcyBgZ2l0IHRhZyAtc2AKK3RvIGNyZWF0ZSBhIHNpZ25lZCB0YWc6CisKKy0tLS0tLS0tLS0tLQorICQgZ2l0IGNoZWNrb3V0IHdvcmsKKyAkIC4uLiAiZ2l0IHB1bGwiIGZyb20gc3VibGlldXRlbmFudHMsICJnaXQgY29tbWl0IiB5b3VyIG93biB3b3JrIC4uLgorICQgZ2l0IHRhZyAtcyAtbSAiQ29tcGxldGVkIGZyb3R6IGZlYXR1cmUiIGZyb3R6LWZvci14eXp6eSB3b3JrCistLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IHRoaXMgZXhhbXBsZSB1c2VzIHRoZSBgLW1gIG9wdGlvbiB0byBjcmVhdGUgYSBzaWduZWQgdGFnIHdpdGgKK2p1c3QgYSBvbmUtbGluZXIgbWVzc2FnZSwgYnV0IHRoaXMgaXMgZm9yIGlsbHVzdHJhdGlvbiBwdXJwb3NlcyBvbmx5LiBJdAoraXMgYWR2aXNhYmxlIHRvIGNvbXBvc2UgYSB3ZWxsLXdyaXR0ZW4gZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGUgdG9waWMgZG9lcwordG8ganVzdGlmeSB3aHkgaXQgaXMgd29ydGh3aGlsZSBmb3IgdGhlIGludGVncmF0b3IgdG8gcHVsbCBpdCwgYXMgdGhpcworbWVzc2FnZSB3aWxsIGV2ZW50dWFsbHkgYmVjb21lIHBhcnQgb2YgdGhlIGZpbmFsIGhpc3RvcnkgYWZ0ZXIgdGhlCitpbnRlZ3JhdG9yIHJlc3BvbmRzIHRvIHRoZSBwdWxsIHJlcXVlc3QgKGFzIHdlIHdpbGwgc2VlIGxhdGVyKS4KKworVGhlbiBzaGUgcHVzaGVzIHRoZSB0YWcgb3V0IHRvIGhlciBwdWJsaWMgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tCisgJCBnaXQgcHVzaCBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQvICtmcm90ei1mb3IteHl6enkKKy0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBubyBuZWVkIHRvIHB1c2ggdGhlIGB3b3JrYCBicmFuY2ggb3IgYW55dGhpbmcgZWxzZS4KKworTm90ZSB0aGF0IHRoZSBhYm92ZSBjb21tYW5kIGxpbmUgdXNlZCBhIHBsdXMgc2lnbiBhdCB0aGUgYmVnaW5uaW5nIG9mCitgK2Zyb3R6LWZvci14eXp6eWAgdG8gYWxsb3cgZm9yY2luZyB0aGUgdXBkYXRlIG9mIGEgdGFnLCBhcyB0aGUgc2FtZQorY29udHJpYnV0b3IgbWF5IHdhbnQgdG8gcmV1c2UgYSBzaWduZWQgdGFnIHdpdGggdGhlIHNhbWUgbmFtZSBhZnRlciB0aGUKK3ByZXZpb3VzIHB1bGwgcmVxdWVzdCBoYXMgYWxyZWFkeSBiZWVuIHJlc3BvbmRlZCB0by4KKworVGhlIGNvbnRyaWJ1dG9yIHRoZW4gcHJlcGFyZXMgYSBtZXNzYWdlIHRvIHJlcXVlc3QgYSAicHVsbCI6CisKKy0tLS0tLS0tLS0tLQorICQgZ2l0IHJlcXVlc3QtcHVsbCB2My4yIGV4YW1wbGUuY29tOi9naXQvZnJvYm96LmdpdC8gZnJvdHotZm9yLXh5enp5ID5tc2cudHh0CistLS0tLS0tLS0tLS0KKworVGhlIGFyZ3VtZW50cyBhcmU6CisKKy4gdGhlIHZlcnNpb24gb2YgdGhlIGludGVncmF0b3IncyBjb21taXQgdGhlIGNvbnRyaWJ1dG9yIGJhc2VkIGhlciB3b3JrIG9uOworLiB0aGUgVVJMIG9mIHRoZSByZXBvc2l0b3J5LCB0byB3aGljaCB0aGUgY29udHJpYnV0b3IgaGFzIHB1c2hlZCB3aGF0IHNoZQorICB3YW50cyB0byBnZXQgcHVsbGVkOyBhbmQKKy4gdGhlIG5hbWUgb2YgdGhlIHRhZyB0aGUgY29udHJpYnV0b3Igd2FudHMgdG8gZ2V0IHB1bGxlZCAoZWFybGllciwgc2hlIGNvdWxkCisgIHdyaXRlIG9ubHkgYSBicmFuY2ggbmFtZSBoZXJlKS4KKworVGhlIHJlc3VsdGluZyBtc2cudHh0IGZpbGUgYmVnaW5zIGxpa2Ugc286CisKKy0tLS0tLS0tLS0tLQorIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyBzaW5jZSBjb21taXQgNDA2ZGE3ODAzMjE3OS4uLjoKKworICAgRnJvYm96IDMuMiAoMjAxMS0wOS0zMCAxNDoyMDo1NyAtMDcwMCkKKworIGFyZSBhdmFpbGFibGUgaW4gdGhlIGdpdCByZXBvc2l0b3J5IGF0OgorCisgICBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQgdGFncy9mcm90ei1mb3IteHl6enkKKworIGZvciB5b3UgdG8gZmV0Y2ggY2hhbmdlcyB1cCB0byA3MDNmMDVhZDU4MzVjLi4uOgorCisgICBBZGQgdGVzdHMgYW5kIGRvY3VtZW50YXRpb24gZm9yIGZyb3R6ICgyMDExLTEyLTAyIDEwOjAyOjUyIC0wODAwKQorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDb21wbGV0ZWQgZnJvdHogZmVhdHVyZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0KKworZm9sbG93ZWQgYnkgYSBzaG9ydGxvZyBvZiB0aGUgY2hhbmdlcyBhbmQgYSBkaWZmc3RhdC4gIENvbXBhcmluZyB0aGlzIHdpdGgKK3RoZSBlYXJsaWVyIGlsbHVzdHJhdGlvbiBvZiB0aGUgb3V0cHV0IGZyb20gdGhlIHRyYWRpdGlvbmFsIGBnaXQgcmVxdWVzdC1wdWxsYAorY29tbWFuZCwgdGhlIHJlYWRlciBzaG91bGQgbm90aWNlIHRoYXQ6CisKKy4gVGhlIHRpcCBjb21taXQgdG8gZXhwZWN0IGlzIHNob3duIHRvIHRoZSBpbnRlZ3JhdG9yOyBhbmQKKy4gVGhlIHNpZ25lZCB0YWcgbWVzc2FnZSBpcyBzaG93biBwcm9taW5lbnRseSBiZXR3ZWVuIHRoZSBkYXNoZWQgbGluZXMKKyAgYmVmb3JlIHRoZSBzaG9ydGxvZy4KKworVGhlIGxhdHRlciBpcyB3aHkgdGhlIGNvbnRyaWJ1dG9yIHdvdWxkIHdhbnQgdG8ganVzdGlmeSB3aHkgcHVsbGluZyBoZXIKK3dvcmsgaXMgd29ydGh3aGlsZSB3aGVuIGNyZWF0aW5nIHRoZSBzaWduZWQgdGFnLiAgVGhlIGNvbnRyaWJ1dG9yIHRoZW4KK29wZW5zIGhlciBmYXZvcml0ZSBNVUEsIHJlYWRzIG1zZy50eHQsIGVkaXRzIGFuZCBzZW5kcyBpdCB0byBoZXIgdXBzdHJlYW0KK2ludGVncmF0b3IuCisKKworSW50ZWdyYXRvcgorLS0tLS0tLS0tLQorCitBZnRlciByZWNlaXZpbmcgc3VjaCBhIHB1bGwgcmVxdWVzdCBtZXNzYWdlLCB0aGUgaW50ZWdyYXRvciBmZXRjaGVzIGFuZAoraW50ZWdyYXRlcyB0aGUgdGFnIG5hbWVkIGluIHRoZSByZXF1ZXN0LCB3aXRoOgorCistLS0tLS0tLS0tLS0KKyAkIGdpdCBwdWxsIGV4YW1wbGUuY29tOi9naXQvZnJvYm96LmdpdC8gdGFncy9mcm90ei1mb3IteHl6enkKKy0tLS0tLS0tLS0tLQorCitUaGlzIG9wZXJhdGlvbiB3aWxsIGFsd2F5cyBvcGVuIGFuIGVkaXRvciB0byBhbGxvdyB0aGUgaW50ZWdyYXRvciB0byBmaW5lCit0dW5lIHRoZSBjb21taXQgbG9nIG1lc3NhZ2Ugd2hlbiBtZXJnaW5nIGEgc2lnbmVkIHRhZy4gIEFsc28sIHB1bGxpbmcgYQorc2lnbmVkIHRhZyB3aWxsIGFsd2F5cyBjcmVhdGUgYSBtZXJnZSBjb21taXQgZXZlbiB3aGVuIHRoZSBpbnRlZ3JhdG9yIGRvZXMKK25vdCBoYXZlIGFueSBuZXcgY29tbWl0IHNpbmNlIHRoZSBjb250cmlidXRvcidzIHdvcmsgZm9ya2VkIChpLmUuICdmYXN0Citmb3J3YXJkJyksIHNvIHRoYXQgdGhlIGludGVncmF0b3IgY2FuIHByb3Blcmx5IGV4cGxhaW4gd2hhdCB0aGUgbWVyZ2UgaXMKK2Fib3V0IGFuZCB3aHkgaXQgd2FzIG1hZGUuCisKK0luIHRoZSBlZGl0b3IsIHRoZSBpbnRlZ3JhdG9yIHdpbGwgc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorIE1lcmdlIHRhZyAnZnJvdHotZm9yLXh5enp5JyBvZiBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQvCisKKyBDb21wbGV0ZWQgZnJvdHogZmVhdHVyZQorICMgZ3BnOiBTaWduYXR1cmUgbWFkZSBGcmkgMDIgRGVjIDIwMTEgMTA6MDM6MDEgQU0gUFNUIHVzaW5nIFJTQSBrZXkgSUQgOTZBRkU2Q0IKKyAjIGdwZzogR29vZCBzaWduYXR1cmUgZnJvbSAiQ29uIFRyaWJ1dG9yIDxuaXRmb2xAZXhhbXBsZS5jb20+IgorLS0tLS0tLS0tLS0tCisKK05vdGljZSB0aGF0IHRoZSBtZXNzYWdlIHJlY29yZGVkIGluIHRoZSBzaWduZWQgdGFnICJDb21wbGV0ZWQgZnJvdHoKK2ZlYXR1cmUiIGFwcGVhcnMgaGVyZSwgYW5kIGFnYWluIHRoYXQgaXMgd2h5IGl0IGlzIGltcG9ydGFudCBmb3IgdGhlCitjb250cmlidXRvciB0byBleHBsYWluIGhlciB3b3JrIHdlbGwgd2hlbiBjcmVhdGluZyB0aGUgc2lnbmVkIHRhZy4KKworQXMgdXN1YWwsIHRoZSBsaW5lcyBjb21tZW50ZWQgd2l0aCBgI2AgYXJlIHN0cmlwcGVkIG91dC4gVGhlIHJlc3VsdGluZworY29tbWl0IHJlY29yZHMgdGhlIHNpZ25lZCB0YWcgdXNlZCBmb3IgdGhpcyB2YWxpZGF0aW9uIGluIGEgaGlkZGVuIGZpZWxkCitzbyB0aGF0IGl0IGNhbiBsYXRlciBiZSB1c2VkIGJ5IG90aGVycyB0byBhdWRpdCB0aGUgaGlzdG9yeS4gVGhlcmUgaXMgbm8KK25lZWQgZm9yIHRoZSBpbnRlZ3JhdG9yIHRvIGtlZXAgYSBzZXBhcmF0ZSBjb3B5IG9mIHRoZSB0YWcgaW4gaGlzCityZXBvc2l0b3J5IChpLmUuIGBnaXQgdGFnIC1sYCB3b24ndCBsaXN0IHRoZSBgZnJvdHotZm9yLXh5enp5YCB0YWcgaW4gdGhlCithYm92ZSBleGFtcGxlKSwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHVibGlzaCB0aGUgdGFnIHRvIGhpcyBwdWJsaWMKK3JlcG9zaXRvcnksIGVpdGhlci4KKworQWZ0ZXIgdGhlIGludGVncmF0b3IgcmVzcG9uZHMgdG8gdGhlIHB1bGwgcmVxdWVzdCBhbmQgaGVyIHdvcmsgYmVjb21lcworcGFydCBvZiB0aGUgcGVybWFuZW50IGhpc3RvcnksIHRoZSBjb250cmlidXRvciBjYW4gcmVtb3ZlIHRoZSB0YWcgZnJvbQoraGVyIHB1YmxpYyByZXBvc2l0b3J5LCBpZiBzaGUgY2hvb3NlcywgaW4gb3JkZXIgdG8ga2VlcCB0aGUgdGFnIG5hbWVzcGFjZQorb2YgaGVyIHB1YmxpYyByZXBvc2l0b3J5IGNsZWFuLCB3aXRoOgorCistLS0tLS0tLS0tLS0KKyAkIGdpdCBwdXNoIGV4YW1wbGUuY29tOi9naXQvZnJvYm96LmdpdCA6ZnJvdHotZm9yLXh5enp5CistLS0tLS0tLS0tLS0KKworCitBdWRpdG9ycworLS0tLS0tLS0KKworVGhlIGAtLXNob3ctc2lnbmF0dXJlYCBvcHRpb24gY2FuIGJlIGdpdmVuIHRvIGBnaXQgbG9nYCBvciBgZ2l0IHNob3dgIGFuZAorc2hvd3MgdGhlIHZlcmlmaWNhdGlvbiBzdGF0dXMgb2YgdGhlIGVtYmVkZGVkIHNpZ25lZCB0YWcgaW4gbWVyZ2UgY29tbWl0cworY3JlYXRlZCB3aGVuIHRoZSBpbnRlZ3JhdG9yIHJlc3BvbmRlZCB0byBhIHB1bGwgcmVxdWVzdCBvZiBhIHNpZ25lZCB0YWcuCisKK0EgdHlwaWNhbCBvdXRwdXQgZnJvbSBgZ2l0IHNob3cgLS1zaG93LXNpZ25hdHVyZWAgbWF5IGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyAkIGdpdCBzaG93IC0tc2hvdy1zaWduYXR1cmUKKyBjb21taXQgMDIzMDZlZjZhMzQ5OGEzOTExOGFlZjlkZjc5NzViZGI1MDA5MTU4NQorIG1lcmdlZCB0YWcgJ2Zyb3R6LWZvci14eXp6eScKKyBncGc6IFNpZ25hdHVyZSBtYWRlIEZyaSAwNiBKYW4gMjAxMiAxMjo0MTo0OSBQTSBQU1QgdXNpbmcgUlNBIGtleSBJRCA5NkFGRTZDQgorIGdwZzogR29vZCBzaWduYXR1cmUgZnJvbSAiQ29uIFRyaWJ1dG9yIDxuaXRmb2xAZXhhbXBsZS5jb20+IgorIE1lcmdlOiA0MDZkYTc4IDcwM2YwNWEKKyBBdXRob3I6IEludGUgR3JhdG9yIDx4eXp6eUBleGFtcGxlLmNvbT4KKyBEYXRlOiAgIFR1ZSBKYW4gMTcgMTM6NDk6NDEgMjAxMiAtMDgwMAorCisgICAgIE1lcmdlIHRhZyAnZnJvdHotZm9yLXh5enp5JyBvZiBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQvCisKKyAgICAgQ29tcGxldGVkIGZyb3R6IGZlYXR1cmUKKworICAgICAqIHRhZyAnZnJvdHotZm9yLXh5enp5JyAoMTAwIGNvbW1pdHMpCisgICAgICAgQWRkIHRlc3RzIGFuZCBkb2N1bWVudGF0aW9uIGZvciBmcm90egorICAgICAgIC4uLgorLS0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBhdWRpdG9yIHRvIGV4cGxpY2l0bHkgZmV0Y2ggdGhlIGNvbnRyaWJ1dG9yJ3MKK3NpZ25hdHVyZSwgb3IgdG8gZXZlbiBiZSBhd2FyZSBvZiB3aGF0IHRhZyhzKSB0aGUgY29udHJpYnV0b3IgYW5kIGludGVncmF0b3IKK3VzZWQgdG8gY29tbXVuaWNhdGUgdGhlIHNpZ25hdHVyZS4gIEFsbCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gaXMgcmVjb3JkZWQKK2FzIHBhcnQgb2YgdGhlIG1lcmdlIGNvbW1pdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTE4bi50eHQgYi9Eb2N1bWVudGF0aW9uL2kxOG4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNWQzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kxOG4udHh0CkBAIC0wLDAgKzEsNTcgQEAKK0F0IHRoZSBjb3JlIGxldmVsLCBnaXQgaXMgY2hhcmFjdGVyIGVuY29kaW5nIGFnbm9zdGljLgorCisgLSBUaGUgcGF0aG5hbWVzIHJlY29yZGVkIGluIHRoZSBpbmRleCBhbmQgaW4gdGhlIHRyZWUgb2JqZWN0cworICAgYXJlIHRyZWF0ZWQgYXMgdW5pbnRlcnByZXRlZCBzZXF1ZW5jZXMgb2Ygbm9uLU5VTCBieXRlcy4KKyAgIFdoYXQgcmVhZGRpcigyKSByZXR1cm5zIGFyZSB3aGF0IGFyZSByZWNvcmRlZCBhbmQgY29tcGFyZWQKKyAgIHdpdGggdGhlIGRhdGEgZ2l0IGtlZXBzIHRyYWNrIG9mLCB3aGljaCBpbiB0dXJuIGFyZSBleHBlY3RlZAorICAgdG8gYmUgd2hhdCBsc3RhdCgyKSBhbmQgY3JlYXQoMikgYWNjZXB0cy4gIFRoZXJlIGlzIG5vIHN1Y2gKKyAgIHRoaW5nIGFzIHBhdGhuYW1lIGVuY29kaW5nIHRyYW5zbGF0aW9uLgorCisgLSBUaGUgY29udGVudHMgb2YgdGhlIGJsb2Igb2JqZWN0cyBhcmUgdW5pbnRlcnByZXRlZCBzZXF1ZW5jZXMKKyAgIG9mIGJ5dGVzLiAgVGhlcmUgaXMgbm8gZW5jb2RpbmcgdHJhbnNsYXRpb24gYXQgdGhlIGNvcmUKKyAgIGxldmVsLgorCisgLSBUaGUgY29tbWl0IGxvZyBtZXNzYWdlcyBhcmUgdW5pbnRlcnByZXRlZCBzZXF1ZW5jZXMgb2Ygbm9uLU5VTAorICAgYnl0ZXMuCisKK0FsdGhvdWdoIHdlIGVuY291cmFnZSB0aGF0IHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIGFyZSBlbmNvZGVkCitpbiBVVEYtOCwgYm90aCB0aGUgY29yZSBhbmQgZ2l0IFBvcmNlbGFpbiBhcmUgZGVzaWduZWQgbm90IHRvCitmb3JjZSBVVEYtOCBvbiBwcm9qZWN0cy4gIElmIGFsbCBwYXJ0aWNpcGFudHMgb2YgYSBwYXJ0aWN1bGFyCitwcm9qZWN0IGZpbmQgaXQgbW9yZSBjb252ZW5pZW50IHRvIHVzZSBsZWdhY3kgZW5jb2RpbmdzLCBnaXQKK2RvZXMgbm90IGZvcmJpZCBpdC4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIGZldyB0aGluZ3MgdG8ga2VlcCBpbgorbWluZC4KKworLiAnZ2l0IGNvbW1pdCcgYW5kICdnaXQgY29tbWl0LXRyZWUnIGlzc3VlcworICBhIHdhcm5pbmcgaWYgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBnaXZlbiB0byBpdCBkb2VzIG5vdCBsb29rCisgIGxpa2UgYSB2YWxpZCBVVEYtOCBzdHJpbmcsIHVubGVzcyB5b3UgZXhwbGljaXRseSBzYXkgeW91cgorICBwcm9qZWN0IHVzZXMgYSBsZWdhY3kgZW5jb2RpbmcuICBUaGUgd2F5IHRvIHNheSB0aGlzIGlzIHRvCisgIGhhdmUgaTE4bi5jb21taXRlbmNvZGluZyBpbiBgLmdpdC9jb25maWdgIGZpbGUsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorW2kxOG5dCisJY29tbWl0ZW5jb2RpbmcgPSBJU08tODg1OS0xCistLS0tLS0tLS0tLS0KKysKK0NvbW1pdCBvYmplY3RzIGNyZWF0ZWQgd2l0aCB0aGUgYWJvdmUgc2V0dGluZyByZWNvcmQgdGhlIHZhbHVlCitvZiBgaTE4bi5jb21taXRlbmNvZGluZ2AgaW4gaXRzIGBlbmNvZGluZ2AgaGVhZGVyLiAgVGhpcyBpcyB0bworaGVscCBvdGhlciBwZW9wbGUgd2hvIGxvb2sgYXQgdGhlbSBsYXRlci4gIExhY2sgb2YgdGhpcyBoZWFkZXIKK2ltcGxpZXMgdGhhdCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGlzIGVuY29kZWQgaW4gVVRGLTguCisKKy4gJ2dpdCBsb2cnLCAnZ2l0IHNob3cnLCAnZ2l0IGJsYW1lJyBhbmQgZnJpZW5kcyBsb29rIGF0IHRoZQorICBgZW5jb2RpbmdgIGhlYWRlciBvZiBhIGNvbW1pdCBvYmplY3QsIGFuZCB0cnkgdG8gcmUtY29kZSB0aGUKKyAgbG9nIG1lc3NhZ2UgaW50byBVVEYtOCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4gIFlvdSBjYW4KKyAgc3BlY2lmeSB0aGUgZGVzaXJlZCBvdXRwdXQgZW5jb2Rpbmcgd2l0aAorICBgaTE4bi5sb2dvdXRwdXRlbmNvZGluZ2AgaW4gYC5naXQvY29uZmlnYCBmaWxlLCBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KK1tpMThuXQorCWxvZ291dHB1dGVuY29kaW5nID0gSVNPLTg4NTktMQorLS0tLS0tLS0tLS0tCisrCitJZiB5b3UgZG8gbm90IGhhdmUgdGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB0aGUgdmFsdWUgb2YKK2BpMThuLmNvbW1pdGVuY29kaW5nYCBpcyB1c2VkIGluc3RlYWQuCisKK05vdGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgY2hvc2Ugbm90IHRvIHJlLWNvZGUgdGhlIGNvbW1pdCBsb2cKK21lc3NhZ2Ugd2hlbiBhIGNvbW1pdCBpcyBtYWRlIHRvIGZvcmNlIFVURi04IGF0IHRoZSBjb21taXQKK29iamVjdCBsZXZlbCwgYmVjYXVzZSByZS1jb2RpbmcgdG8gVVRGLTggaXMgbm90IG5lY2Vzc2FyaWx5IGEKK3JldmVyc2libGUgb3BlcmF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnN0YWxsLWRvYy1xdWljay5zaCBiL0RvY3VtZW50YXRpb24vaW5zdGFsbC1kb2MtcXVpY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzI3ZjY5YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5zdGFsbC1kb2MtcXVpY2suc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjIFRoaXMgcmVxdWlyZXMgZ2l0LW1hbnBhZ2VzIGFuZC9vciBnaXQtaHRtbGRvY3MgcmVwb3NpdG9yaWVzCisKK3JlcG9zaXRvcnk9JHsxP3JlcG9zaXRvcnl9CitkZXN0ZGlyPSR7Mj9kZXN0aW5hdGlvbn0KKworaGVhZD1tYXN0ZXIgR0lUX0RJUj0KK2ZvciBkIGluICIkcmVwb3NpdG9yeS8uZ2l0IiAiJHJlcG9zaXRvcnkiCitkbworCWlmIEdJVF9ESVI9IiRkIiBnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJR0lUX0RJUj0iJGQiCisJCWV4cG9ydCBHSVRfRElSCisJCWJyZWFrCisJZmkKK2RvbmUKKworaWYgdGVzdCAteiAiJEdJVF9ESVIiCit0aGVuCisJZWNobyA+JjIgIk5laXRoZXIgJHJlcG9zaXRvcnkgbm9yICRyZXBvc2l0b3J5Ly5naXQgaXMgYSByZXBvc2l0b3J5IgorCWV4aXQgMQorZmkKKworR0lUX1dPUktfVFJFRT0kKHB3ZCkKK0dJVF9JTkRFWF9GSUxFPSQocHdkKS8ucXVpY2stZG9jLiQkCitleHBvcnQgR0lUX0lOREVYX0ZJTEUgR0lUX1dPUktfVFJFRQorcm0gLWYgIiRHSVRfSU5ERVhfRklMRSIKK3RyYXAgJ3JtIC1mICIkR0lUX0lOREVYX0ZJTEUiJyAwCisKK2dpdCByZWFkLXRyZWUgJGhlYWQKK2dpdCBjaGVja291dC1pbmRleCAtYSAtZiAtLXByZWZpeD0iJGRlc3RkaXIiLworCitpZiB0ZXN0IC1uICIkR1oiCit0aGVuCisJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgJGhlYWQgfAorCXhhcmdzIHByaW50ZiAiJGRlc3RkaXIvJXNcbiIgfAorCXhhcmdzIGd6aXAgLWYKK2ZpCitybSAtZiAiJEdJVF9JTkRFWF9GSUxFIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnN0YWxsLXdlYmRvYy5zaCBiL0RvY3VtZW50YXRpb24vaW5zdGFsbC13ZWJkb2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzZkNjlhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5zdGFsbC13ZWJkb2Muc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK1Q9IiQxIgorCitmb3IgaCBpbiBcCisJKi50eHQgKi5odG1sIFwKKwlob3d0by8qLnR4dCBob3d0by8qLmh0bWwgXAorCXRlY2huaWNhbC8qLnR4dCB0ZWNobmljYWwvKi5odG1sIFwKKwlSZWxOb3Rlcy8qLnR4dCAqLmNzcworZG8KKwlpZiB0ZXN0ICEgLWYgIiRoIgorCXRoZW4KKwkJOiBkaWQgbm90IG1hdGNoCisJZWxpZiB0ZXN0IC1mICIkVC8kaCIgJiYKKwkJJERJRkYgLXUgLUknXkxhc3QgdXBkYXRlZCAnICIkVC8kaCIgIiRoIgorCXRoZW4KKwkJOjsgIyB1cCB0byBkYXRlCisJZWxzZQorCQllY2hvID4mMiAiIyBpbnN0YWxsICRoICRULyRoIgorCQlybSAtZiAiJFQvJGgiCisJCW1rZGlyIC1wIGBkaXJuYW1lICIkVC8kaCJgCisJCWNwICIkaCIgIiRULyRoIgorCWZpCitkb25lCitzdHJpcF9sZWFkaW5nPWBlY2hvICIkVC8iIHwgc2VkIC1lICdzfC58LnxnJ2AKK2ZvciB0aCBpbiBcCisJIiRUIi8qLmh0bWwgIiRUIi8qLnR4dCBcCisJIiRUIi9ob3d0by8qLnR4dCAiJFQiL2hvd3RvLyouaHRtbCBcCisJIiRUIi90ZWNobmljYWwvKi50eHQgIiRUIi90ZWNobmljYWwvKi5odG1sCitkbworCWg9YGV4cHIgIiR0aCIgOiAiJHN0cmlwX2xlYWRpbmciJ1woLipcKSdgCisJY2FzZSAiJGgiIGluCisJUmVsTm90ZXMtKi50eHQgfCBpbmRleC5odG1sKSBjb250aW51ZSA7OworCWVzYWMKKwl0ZXN0IC1mICIkaCIgJiYgY29udGludWUKKwllY2hvID4mMiAiIyBybSAtZiAkdGgiCisJcm0gLWYgIiR0aCIKK2RvbmUKK2xuIC1zZiBnaXQuaHRtbCAiJFQvaW5kZXguaHRtbCIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWFpbG1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL21haWxtYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OGYwNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21haWxtYXAudHh0CkBAIC0wLDAgKzEsNzQgQEAKK0lmIHRoZSBmaWxlIGAubWFpbG1hcGAgZXhpc3RzIGF0IHRoZSB0b3BsZXZlbCBvZiB0aGUgcmVwb3NpdG9yeSwgb3IgYXQKK3RoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IHRoZSBtYWlsbWFwLmZpbGUgY29uZmlndXJhdGlvbiBvcHRpb24sIGl0CitpcyB1c2VkIHRvIG1hcCBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIHRvCitjYW5vbmljYWwgcmVhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzLgorCitJbiB0aGUgc2ltcGxlIGZvcm0sIGVhY2ggbGluZSBpbiB0aGUgZmlsZSBjb25zaXN0cyBvZiB0aGUgY2Fub25pY2FsCityZWFsIG5hbWUgb2YgYW4gYXV0aG9yLCB3aGl0ZXNwYWNlLCBhbmQgYW4gZW1haWwgYWRkcmVzcyB1c2VkIGluIHRoZQorY29tbWl0IChlbmNsb3NlZCBieSAnPCcgYW5kICc+JykgdG8gbWFwIHRvIHRoZSBuYW1lLiBGb3IgZXhhbXBsZToKKy0tCisJUHJvcGVyIE5hbWUgPGNvbW1pdEBlbWFpbC54eD4KKy0tCisKK1RoZSBtb3JlIGNvbXBsZXggZm9ybXMgYXJlOgorLS0KKwk8cHJvcGVyQGVtYWlsLnh4PiA8Y29tbWl0QGVtYWlsLnh4PgorLS0KK3doaWNoIGFsbG93cyBtYWlsbWFwIHRvIHJlcGxhY2Ugb25seSB0aGUgZW1haWwgcGFydCBvZiBhIGNvbW1pdCwgYW5kOgorLS0KKwlQcm9wZXIgTmFtZSA8cHJvcGVyQGVtYWlsLnh4PiA8Y29tbWl0QGVtYWlsLnh4PgorLS0KK3doaWNoIGFsbG93cyBtYWlsbWFwIHRvIHJlcGxhY2UgYm90aCB0aGUgbmFtZSBhbmQgdGhlIGVtYWlsIG9mIGEKK2NvbW1pdCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGNvbW1pdCBlbWFpbCBhZGRyZXNzLCBhbmQ6CistLQorCVByb3BlciBOYW1lIDxwcm9wZXJAZW1haWwueHg+IENvbW1pdCBOYW1lIDxjb21taXRAZW1haWwueHg+CistLQord2hpY2ggYWxsb3dzIG1haWxtYXAgdG8gcmVwbGFjZSBib3RoIHRoZSBuYW1lIGFuZCB0aGUgZW1haWwgb2YgYQorY29tbWl0IG1hdGNoaW5nIGJvdGggdGhlIHNwZWNpZmllZCBjb21taXQgbmFtZSBhbmQgZW1haWwgYWRkcmVzcy4KKworRXhhbXBsZSAxOiBZb3VyIGhpc3RvcnkgY29udGFpbnMgY29tbWl0cyBieSB0d28gYXV0aG9ycywgSmFuZQorYW5kIEpvZSwgd2hvc2UgbmFtZXMgYXBwZWFyIGluIHRoZSByZXBvc2l0b3J5IHVuZGVyIHNldmVyYWwgZm9ybXM6CisKKy0tLS0tLS0tLS0tLQorSm9lIERldmVsb3BlciA8am9lQGV4YW1wbGUuY29tPgorSm9lIFIuIERldmVsb3BlciA8am9lQGV4YW1wbGUuY29tPgorSmFuZSBEb2UgPGphbmVAZXhhbXBsZS5jb20+CitKYW5lIERvZSA8amFuZUBsYXB0b3AuKG5vbmUpPgorSmFuZSBELiA8amFuZUBkZXNrdG9wLihub25lKT4KKy0tLS0tLS0tLS0tLQorCitOb3cgc3VwcG9zZSB0aGF0IEpvZSB3YW50cyBoaXMgbWlkZGxlIG5hbWUgaW5pdGlhbCB1c2VkLCBhbmQgSmFuZQorcHJlZmVycyBoZXIgZmFtaWx5IG5hbWUgZnVsbHkgc3BlbGxlZCBvdXQuIEEgcHJvcGVyIGAubWFpbG1hcGAgZmlsZQord291bGQgbG9vayBsaWtlOgorCistLS0tLS0tLS0tLS0KK0phbmUgRG9lICAgICAgICAgPGphbmVAZGVza3RvcC4obm9uZSk+CitKb2UgUi4gRGV2ZWxvcGVyIDxqb2VAZXhhbXBsZS5jb20+CistLS0tLS0tLS0tLS0KKworTm90ZSBob3cgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gZW50cnkgZm9yIDxqYW5lQGxhcHRvcC4obm9uZSk+LCBiZWNhdXNlIHRoZQorcmVhbCBuYW1lIG9mIHRoYXQgYXV0aG9yIGlzIGFscmVhZHkgY29ycmVjdC4KKworRXhhbXBsZSAyOiBZb3VyIHJlcG9zaXRvcnkgY29udGFpbnMgY29tbWl0cyBmcm9tIHRoZSBmb2xsb3dpbmcKK2F1dGhvcnM6CisKKy0tLS0tLS0tLS0tLQorbmljazEgPGJ1Z3NAY29tcGFueS54eD4KK25pY2syIDxidWdzQGNvbXBhbnkueHg+CituaWNrMiA8bmljazJAY29tcGFueS54eD4KK3NhbnRhIDxtZUBjb21wYW55Lnh4PgorY2xhdXMgPG1lQGNvbXBhbnkueHg+CitDVE8gPGN0b0Bjb29tcGFueS54eD4KKy0tLS0tLS0tLS0tLQorCitUaGVuIHlvdSBtaWdodCB3YW50IGEgYC5tYWlsbWFwYCBmaWxlIHRoYXQgbG9va3MgbGlrZToKKy0tLS0tLS0tLS0tLQorPGN0b0Bjb21wYW55Lnh4PiAgICAgICAgICAgICAgICAgICAgICAgPGN0b0Bjb29tcGFueS54eD4KK1NvbWUgRHVkZSA8c29tZUBkdWRlLnh4PiAgICAgICAgIG5pY2sxIDxidWdzQGNvbXBhbnkueHg+CitPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gICBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PgorT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+ICAgICAgICAgPG5pY2syQGNvbXBhbnkueHg+CitTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PiA8bWVAY29tcGFueS54eD4KKy0tLS0tLS0tLS0tLQorCitVc2UgaGFzaCAnIycgZm9yIGNvbW1lbnRzIHRoYXQgYXJlIGVpdGhlciBvbiB0aGVpciBvd24gbGluZSwgb3IgYWZ0ZXIKK3RoZSBlbWFpbCBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLTEuNzIueHNsIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLTEuNzIueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDMxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtMS43Mi54c2wKQEAgLTAsMCArMSwxNCBAQAorPCEtLSBtYW5wYWdlLTEuNzIueHNsOgorICAgICBzcGVjaWFsIHNldHRpbmdzIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIGFzY2lpZG9jK2RvY2Jvb2sKKyAgICAgaGFuZGxlcyBwZWN1bGlhcml0aWVzIGluIGRvY2Jvb2steHNsIDEuNzIuMCAtLT4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwkJdmVyc2lvbj0iMS4wIj4KKworPHhzbDppbXBvcnQgaHJlZj0ibWFucGFnZS1iYXNlLnhzbCIvPgorCis8IS0tIHRoZXNlIGFyZSB0aGUgc3BlY2lhbCB2YWx1ZXMgZm9yIHRoZSByb2ZmIGNvbnRyb2wgY2hhcmFjdGVycworICAgICBuZWVkZWQgZm9yIGRvY2Jvb2steHNsIDEuNzIuMCAtLT4KKzx4c2w6cGFyYW0gbmFtZT0iZ2l0LmRvY2Jvb2suYmFja3NsYXNoIj4mI3gyNTkzOzwveHNsOnBhcmFtPgorPHhzbDpwYXJhbSBuYW1lPSJnaXQuZG9jYm9vay5kb3QiICAgICAgPiYjeDIzMDI7PC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS11cmwueHNsLmluIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODAwOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgpAQCAtMCwwICsxLDEwIEBACis8IS0tIG1hbnBhZ2UtYmFzZS11cmwueHNsOgorICAgICBzcGVjaWFsIHNldHRpbmdzIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIG5ld2VyIGRvY2Jvb2sgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gc2V0IGEgYmFzZSBVUkwgZm9yIHJlbGF0aXZlIGxpbmtzIC0tPgorPHhzbDpwYXJhbSBuYW1lPSJtYW4uYmFzZS51cmwuZm9yLnJlbGF0aXZlLmxpbmtzIgorCT5AQE1BTl9CQVNFX1VSTEBAPC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2NGZhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1iYXNlLnhzbApAQCAtMCwwICsxLDM1IEBACis8IS0tIG1hbnBhZ2UtYmFzZS54c2w6CisgICAgIHNwZWNpYWwgZm9ybWF0dGluZyBmb3IgbWFucGFnZXMgcmVuZGVyZWQgZnJvbSBhc2NpaWRvYytkb2Nib29rIC0tPgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCQl2ZXJzaW9uPSIxLjAiPgorCis8IS0tIHRoZXNlIHBhcmFtcyBzaWxlbmNlIHNvbWUgb3V0cHV0IGZyb20geG1sdG8gLS0+Cis8eHNsOnBhcmFtIG5hbWU9Im1hbi5vdXRwdXQucXVpZXRseSIgc2VsZWN0PSIxIi8+Cis8eHNsOnBhcmFtIG5hbWU9InJlZmVudHJ5Lm1ldGEuZ2V0LnF1aWV0bHkiIHNlbGVjdD0iMSIvPgorCis8IS0tIGNvbnZlcnQgYXNjaWlkb2MgY2FsbG91dHMgdG8gbWFuIHBhZ2UgZm9ybWF0OworICAgICBnaXQuZG9jYm9vay5iYWNrc2xhc2ggYW5kIGdpdC5kb2Nib29rLmRvdCBwYXJhbXMKKyAgICAgbXVzdCBiZSBzdXBwbGllZCBieSBhbm90aGVyIFhTTCBmaWxlIG9yIG90aGVyIG1lYW5zIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY28iPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoCisJCQkgICAgICAkZ2l0LmRvY2Jvb2suYmFja3NsYXNoLCdmQignLAorCQkJICAgICAgc3Vic3RyaW5nLWFmdGVyKEBpZCwnLScpLCcpJywKKwkJCSAgICAgICRnaXQuZG9jYm9vay5iYWNrc2xhc2gsJ2ZSJykiLz4KKzwveHNsOnRlbXBsYXRlPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2FsbG91dGxpc3QiPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZ2l0LmRvY2Jvb2suZG90Ii8+CisJPHhzbDp0ZXh0PnNwJiMxMDs8L3hzbDp0ZXh0PgorCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKwk8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjYWxsb3V0Ij4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KAorCQkJICAgICAgJGdpdC5kb2Nib29rLmJhY2tzbGFzaCwnZkInLAorCQkJICAgICAgc3Vic3RyaW5nLWFmdGVyKEBhcmVhcmVmcywnLScpLAorCQkJICAgICAgJy4gJywkZ2l0LmRvY2Jvb2suYmFja3NsYXNoLCdmUicpIi8+CisJPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZ2l0LmRvY2Jvb2suZG90Ii8+CisJPHhzbDp0ZXh0PmJyJiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbCBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1ib2xkLWxpdGVyYWwueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOGViNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbApAQCAtMCwwICsxLDE3IEBACis8IS0tIG1hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbDoKKyAgICAgc3BlY2lhbCBmb3JtYXR0aW5nIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIGFzY2lpZG9jK2RvY2Jvb2sgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gcmVuZGVyIGxpdGVyYWwgdGV4dCBhcyBib2xkIChpbnN0ZWFkIG9mIHBsYWluIG9yIG1vbm9zcGFjZSk7CisgICAgIHRoaXMgbWFrZXMgbGl0ZXJhbCB0ZXh0IGVhc2llciB0byBkaXN0aW5ndWlzaCBpbiBtYW5wYWdlcworICAgICB2aWV3ZWQgb24gYSB0dHkgLS0+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsaXRlcmFsIj4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGdpdC5kb2Nib29rLmJhY2tzbGFzaCIvPgorCTx4c2w6dGV4dD5mQjwveHNsOnRleHQ+CisJPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZ2l0LmRvY2Jvb2suYmFja3NsYXNoIi8+CisJPHhzbDp0ZXh0PmZSPC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLW5vcm1hbC54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2Utbm9ybWFsLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDhmNWIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLW5vcm1hbC54c2wKQEAgLTAsMCArMSwxMyBAQAorPCEtLSBtYW5wYWdlLW5vcm1hbC54c2w6CisgICAgIHNwZWNpYWwgc2V0dGluZ3MgZm9yIG1hbnBhZ2VzIHJlbmRlcmVkIGZyb20gYXNjaWlkb2MrZG9jYm9vaworICAgICBoYW5kbGVzIGFueXRoaW5nIHdlIHdhbnQgdG8ga2VlcCBhd2F5IGZyb20gZG9jYm9vay14c2wgMS43Mi4wIC0tPgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCQl2ZXJzaW9uPSIxLjAiPgorCis8eHNsOmltcG9ydCBocmVmPSJtYW5wYWdlLWJhc2UueHNsIi8+CisKKzwhLS0gdGhlc2UgYXJlIHRoZSBub3JtYWwgdmFsdWVzIGZvciB0aGUgcm9mZiBjb250cm9sIGNoYXJhY3RlcnMgLS0+Cis8eHNsOnBhcmFtIG5hbWU9ImdpdC5kb2Nib29rLmJhY2tzbGFzaCI+XDwveHNsOnBhcmFtPgorPHhzbDpwYXJhbSBuYW1lPSJnaXQuZG9jYm9vay5kb3QiCT4uPC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtcXVvdGUtYXBvcy54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtcXVvdGUtYXBvcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViODgzOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1xdW90ZS1hcG9zLnhzbApAQCAtMCwwICsxLDE2IEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gd29yayBhcm91bmQgbmV3ZXIgZ3JvZmYvbWFuIHNldHVwcyB1c2luZyBhIHByZXR0aWVyIGFwb3N0cm9waGUKKyAgICAgdGhhdCB1bmZvcnR1bmF0ZWx5IGRvZXMgbm90IHF1b3RlIGFueXRoaW5nIHdoZW4gY3V0JnBhc3RpbmcKKyAgICAgZXhhbXBsZXMgdG8gdGhlIHNoZWxsIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJlc2NhcGUuYXBvc3Ryb3BoZSI+CisgIDx4c2w6cGFyYW0gbmFtZT0iY29udGVudCIvPgorICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLnN1YnN0Ij4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3RyaW5nIiBzZWxlY3Q9IiRjb250ZW50Ii8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRhcmdldCI+JzwveHNsOndpdGgtcGFyYW0+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2VtZW50Ij5cKGFxPC94c2w6d2l0aC1wYXJhbT4KKyAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLXN1cHByZXNzLXNwLnhzbCBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1zdXBwcmVzcy1zcC54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzYzc2MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1zdXBwcmVzcy1zcC54c2wKQEAgLTAsMCArMSwyMSBAQAorPCEtLSBtYW5wYWdlLXN1cHByZXNzLXNwLnhzbDoKKyAgICAgc3BlY2lhbCBzZXR0aW5ncyBmb3IgbWFucGFnZXMgcmVuZGVyZWQgZnJvbSBhc2NpaWRvYytkb2Nib29rCisgICAgIGhhbmRsZXMgZXJyb25lb3VzLCBpbmxpbmUgLnNwIGluIG1hbnBhZ2Ugb3V0cHV0IG9mIHNvbWUKKyAgICAgdmVyc2lvbnMgb2YgZG9jYm9vay14c2wgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gYXR0ZW1wdCB0byB3b3JrIGFyb3VuZCBzcHVyaW91cyAuc3AgYXQgdGhlIHRhaWwgb2YgdGhlIGxpbmUKKyAgICAgdGhhdCBzb21lIHZlcnNpb25zIG9mIGRvY2Jvb2sgc3R5bGVzaGVldHMgc2VlbSB0byBhZGQgLS0+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzaW1wYXJhIj4KKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJjb250ZW50Ij4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CisgIDwveHNsOnZhcmlhYmxlPgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9ybWFsaXplLXNwYWNlKCRjb250ZW50KSIvPgorICA8eHNsOmlmIHRlc3Q9Im5vdChhbmNlc3Rvcjo6YXV0aG9yYmx1cmIpIGFuZAorICAgICAgICAgICAgICAgIG5vdChhbmNlc3Rvcjo6cGVyc29uYmx1cmIpIj4KKyAgICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLWNvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL21lcmdlLWNvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxYmQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2UtY29uZmlnLnR4dApAQCAtMCwwICsxLDgxIEBACittZXJnZS5jb25mbGljdHN0eWxlOjoKKwlTcGVjaWZ5IHRoZSBzdHlsZSBpbiB3aGljaCBjb25mbGljdGVkIGh1bmtzIGFyZSB3cml0dGVuIG91dCB0bworCXdvcmtpbmcgdHJlZSBmaWxlcyB1cG9uIG1lcmdlLiAgVGhlIGRlZmF1bHQgaXMgIm1lcmdlIiwgd2hpY2gKKwlzaG93cyBhIGA8PDw8PDw8YCBjb25mbGljdCBtYXJrZXIsIGNoYW5nZXMgbWFkZSBieSBvbmUgc2lkZSwKKwlhIGA9PT09PT09YCBtYXJrZXIsIGNoYW5nZXMgbWFkZSBieSB0aGUgb3RoZXIgc2lkZSwgYW5kIHRoZW4KKwlhIGA+Pj4+Pj4+YCBtYXJrZXIuICBBbiBhbHRlcm5hdGUgc3R5bGUsICJkaWZmMyIsIGFkZHMgYSBgfHx8fHx8fGAKKwltYXJrZXIgYW5kIHRoZSBvcmlnaW5hbCB0ZXh0IGJlZm9yZSB0aGUgYD09PT09PT1gIG1hcmtlci4KKworbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW06OgorCUlmIG1lcmdlIGlzIGNhbGxlZCB3aXRob3V0IGFueSBjb21taXQgYXJndW1lbnQsIG1lcmdlIHRoZSB1cHN0cmVhbQorCWJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCBieSB1c2luZyB0aGVpciBsYXN0CisJb2JzZXJ2ZWQgdmFsdWVzIHN0b3JlZCBpbiB0aGVpciByZW1vdGUgdHJhY2tpbmcgYnJhbmNoZXMuCisJVGhlIHZhbHVlcyBvZiB0aGUgYGJyYW5jaC48Y3VycmVudCBicmFuY2g+Lm1lcmdlYCB0aGF0IG5hbWUgdGhlCisJYnJhbmNoZXMgYXQgdGhlIHJlbW90ZSBuYW1lZCBieSBgYnJhbmNoLjxjdXJyZW50IGJyYW5jaD4ucmVtb3RlYAorCWFyZSBjb25zdWx0ZWQsIGFuZCB0aGVuIHRoZXkgYXJlIG1hcHBlZCB2aWEgYHJlbW90ZS48cmVtb3RlPi5mZXRjaGAKKwl0byB0aGVpciBjb3JyZXNwb25kaW5nIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcywgYW5kIHRoZSB0aXBzIG9mCisJdGhlc2UgdHJhY2tpbmcgYnJhbmNoZXMgYXJlIG1lcmdlZC4KKworbWVyZ2UuZmY6OgorCUJ5IGRlZmF1bHQsIGdpdCBkb2VzIG5vdCBjcmVhdGUgYW4gZXh0cmEgbWVyZ2UgY29tbWl0IHdoZW4gbWVyZ2luZworCWEgY29tbWl0IHRoYXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGNvbW1pdC4gSW5zdGVhZCwgdGhlCisJdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBmYXN0LWZvcndhcmRlZC4gV2hlbiBzZXQgdG8gYGZhbHNlYCwKKwl0aGlzIHZhcmlhYmxlIHRlbGxzIGdpdCB0byBjcmVhdGUgYW4gZXh0cmEgbWVyZ2UgY29tbWl0IGluIHN1Y2gKKwlhIGNhc2UgKGVxdWl2YWxlbnQgdG8gZ2l2aW5nIHRoZSBgLS1uby1mZmAgb3B0aW9uIGZyb20gdGhlIGNvbW1hbmQKKwlsaW5lKS4gV2hlbiBzZXQgdG8gYG9ubHlgLCBvbmx5IHN1Y2ggZmFzdC1mb3J3YXJkIG1lcmdlcyBhcmUKKwlhbGxvd2VkIChlcXVpdmFsZW50IHRvIGdpdmluZyB0aGUgYC0tZmYtb25seWAgb3B0aW9uIGZyb20gdGhlCisJY29tbWFuZCBsaW5lKS4KKworbWVyZ2UubG9nOjoKKwlJbiBhZGRpdGlvbiB0byBicmFuY2ggbmFtZXMsIHBvcHVsYXRlIHRoZSBsb2cgbWVzc2FnZSB3aXRoIGF0CisJbW9zdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBvbmUtbGluZSBkZXNjcmlwdGlvbnMgZnJvbSB0aGUKKwlhY3R1YWwgY29tbWl0cyB0aGF0IGFyZSBiZWluZyBtZXJnZWQuICBEZWZhdWx0cyB0byBmYWxzZSwgYW5kCisJdHJ1ZSBpcyBhIHN5bm9ueW0gZm9yIDIwLgorCittZXJnZS5yZW5hbWVMaW1pdDo6CisJVGhlIG51bWJlciBvZiBmaWxlcyB0byBjb25zaWRlciB3aGVuIHBlcmZvcm1pbmcgcmVuYW1lIGRldGVjdGlvbgorCWR1cmluZyBhIG1lcmdlOyBpZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YKKwlkaWZmLnJlbmFtZUxpbWl0LgorCittZXJnZS5yZW5vcm1hbGl6ZTo6CisJVGVsbCBnaXQgdGhhdCBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gb2YgZmlsZXMgaW4gdGhlCisJcmVwb3NpdG9yeSBoYXMgY2hhbmdlZCBvdmVyIHRpbWUgKGUuZy4gZWFybGllciBjb21taXRzIHJlY29yZAorCXRleHQgZmlsZXMgd2l0aCBDUkxGIGxpbmUgZW5kaW5ncywgYnV0IHJlY2VudCBvbmVzIHVzZSBMRiBsaW5lCisJZW5kaW5ncykuICBJbiBzdWNoIGEgcmVwb3NpdG9yeSwgZ2l0IGNhbiBjb252ZXJ0IHRoZSBkYXRhCisJcmVjb3JkZWQgaW4gY29tbWl0cyB0byBhIGNhbm9uaWNhbCBmb3JtIGJlZm9yZSBwZXJmb3JtaW5nIGEKKwltZXJnZSB0byByZWR1Y2UgdW5uZWNlc3NhcnkgY29uZmxpY3RzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sCisJc2VlIHNlY3Rpb24gIk1lcmdpbmcgYnJhbmNoZXMgd2l0aCBkaWZmZXJpbmcgY2hlY2tpbi9jaGVja291dAorCWF0dHJpYnV0ZXMiIGluIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XS4KKworbWVyZ2Uuc3RhdDo6CisJV2hldGhlciB0byBwcmludCB0aGUgZGlmZnN0YXQgYmV0d2VlbiBPUklHX0hFQUQgYW5kIHRoZSBtZXJnZSByZXN1bHQKKwlhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZS4gIFRydWUgYnkgZGVmYXVsdC4KKworbWVyZ2UudG9vbDo6CisJQ29udHJvbHMgd2hpY2ggbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIGlzIHVzZWQgYnkKKwlsaW5rZ2l0OmdpdC1tZXJnZXRvb2xbMV0uICBWYWxpZCBidWlsdC1pbiB2YWx1ZXMgYXJlOiAiYXJheGlzIiwKKwkiYmMzIiwgImRpZmZ1c2UiLCAiZWNtZXJnZSIsICJlbWVyZ2UiLCAiZ3ZpbWRpZmYiLCAia2RpZmYzIiwgIm1lbGQiLAorCSJvcGVuZGlmZiIsICJwNG1lcmdlIiwgInRrZGlmZiIsICJ0b3J0b2lzZW1lcmdlIiwgInZpbWRpZmYiCisJYW5kICJ4eGRpZmYiLiAgQW55IG90aGVyIHZhbHVlIGlzIHRyZWF0ZWQgaXMgY3VzdG9tIG1lcmdlIHRvb2wKKwlhbmQgdGhlcmUgbXVzdCBiZSBhIGNvcnJlc3BvbmRpbmcgbWVyZ2V0b29sLjx0b29sPi5jbWQgb3B0aW9uLgorCittZXJnZS52ZXJib3NpdHk6OgorCUNvbnRyb2xzIHRoZSBhbW91bnQgb2Ygb3V0cHV0IHNob3duIGJ5IHRoZSByZWN1cnNpdmUgbWVyZ2UKKwlzdHJhdGVneS4gIExldmVsIDAgb3V0cHV0cyBub3RoaW5nIGV4Y2VwdCBhIGZpbmFsIGVycm9yCisJbWVzc2FnZSBpZiBjb25mbGljdHMgd2VyZSBkZXRlY3RlZC4gTGV2ZWwgMSBvdXRwdXRzIG9ubHkKKwljb25mbGljdHMsIDIgb3V0cHV0cyBjb25mbGljdHMgYW5kIGZpbGUgY2hhbmdlcy4gIExldmVsIDUgYW5kCisJYWJvdmUgb3V0cHV0cyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBUaGUgZGVmYXVsdCBpcyBsZXZlbCAyLgorCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX01FUkdFX1ZFUkJPU0lUWScgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK21lcmdlLjxkcml2ZXI+Lm5hbWU6OgorCURlZmluZXMgYSBodW1hbi1yZWFkYWJsZSBuYW1lIGZvciBhIGN1c3RvbSBsb3ctbGV2ZWwKKwltZXJnZSBkcml2ZXIuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCittZXJnZS48ZHJpdmVyPi5kcml2ZXI6OgorCURlZmluZXMgdGhlIGNvbW1hbmQgdGhhdCBpbXBsZW1lbnRzIGEgY3VzdG9tIGxvdy1sZXZlbAorCW1lcmdlIGRyaXZlci4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK21lcmdlLjxkcml2ZXI+LnJlY3Vyc2l2ZTo6CisJTmFtZXMgYSBsb3ctbGV2ZWwgbWVyZ2UgZHJpdmVyIHRvIGJlIHVzZWQgd2hlbgorCXBlcmZvcm1pbmcgYW4gaW50ZXJuYWwgbWVyZ2UgYmV0d2VlbiBjb21tb24gYW5jZXN0b3JzLgorCVNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmNiZTBhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dApAQCAtMCwwICsxLDEwNyBAQAorLS1jb21taXQ6OgorLS1uby1jb21taXQ6OgorCVBlcmZvcm0gdGhlIG1lcmdlIGFuZCBjb21taXQgdGhlIHJlc3VsdC4gVGhpcyBvcHRpb24gY2FuCisJYmUgdXNlZCB0byBvdmVycmlkZSAtLW5vLWNvbW1pdC4KKysKK1dpdGggLS1uby1jb21taXQgcGVyZm9ybSB0aGUgbWVyZ2UgYnV0IHByZXRlbmQgdGhlIG1lcmdlCitmYWlsZWQgYW5kIGRvIG5vdCBhdXRvY29tbWl0LCB0byBnaXZlIHRoZSB1c2VyIGEgY2hhbmNlIHRvCitpbnNwZWN0IGFuZCBmdXJ0aGVyIHR3ZWFrIHRoZSBtZXJnZSByZXN1bHQgYmVmb3JlIGNvbW1pdHRpbmcuCisKKy0tZWRpdDo6CistLW5vLWVkaXQ6OgorCUludm9rZSBhbiBlZGl0b3IgYmVmb3JlIGNvbW1pdHRpbmcgc3VjY2Vzc2Z1bCBtZWNoYW5pY2FsIG1lcmdlIHRvCisJZnVydGhlciBlZGl0IHRoZSBhdXRvLWdlbmVyYXRlZCBtZXJnZSBtZXNzYWdlLCBzbyB0aGF0IHRoZSB1c2VyCisJY2FuIGV4cGxhaW4gYW5kIGp1c3RpZnkgdGhlIG1lcmdlLiBUaGUgYC0tbm8tZWRpdGAgb3B0aW9uIGNhbiBiZQorCXVzZWQgdG8gYWNjZXB0IHRoZSBhdXRvLWdlbmVyYXRlZCBtZXNzYWdlICh0aGlzIGlzIGdlbmVyYWxseQorCWRpc2NvdXJhZ2VkKS4gVGhlIGAtLWVkaXRgIG9wdGlvbiBpcyBzdGlsbCB1c2VmdWwgaWYgeW91IGFyZQorCWdpdmluZyBhIGRyYWZ0IG1lc3NhZ2Ugd2l0aCB0aGUgYC1tYCBvcHRpb24gZnJvbSB0aGUgY29tbWFuZCBsaW5lCisJYW5kIHdhbnQgdG8gZWRpdCBpdCBpbiB0aGUgZWRpdG9yLgorKworT2xkZXIgc2NyaXB0cyBtYXkgZGVwZW5kIG9uIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW91ciBvZiBub3QgYWxsb3dpbmcgdGhlCit1c2VyIHRvIGVkaXQgdGhlIG1lcmdlIGxvZyBtZXNzYWdlLiBUaGV5IHdpbGwgc2VlIGFuIGVkaXRvciBvcGVuZWQgd2hlbgordGhleSBydW4gYGdpdCBtZXJnZWAuIFRvIG1ha2UgaXQgZWFzaWVyIHRvIGFkanVzdCBzdWNoIHNjcmlwdHMgdG8gdGhlCit1cGRhdGVkIGJlaGF2aW91ciwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBHSVRfTUVSR0VfQVVUT0VESVRgIGNhbiBiZQorc2V0IHRvIGBub2AgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVtLgorCistLWZmOjoKKwlXaGVuIHRoZSBtZXJnZSByZXNvbHZlcyBhcyBhIGZhc3QtZm9yd2FyZCwgb25seSB1cGRhdGUgdGhlIGJyYW5jaAorCXBvaW50ZXIsIHdpdGhvdXQgY3JlYXRpbmcgYSBtZXJnZSBjb21taXQuICBUaGlzIGlzIHRoZSBkZWZhdWx0CisJYmVoYXZpb3IuCisKKy0tbm8tZmY6OgorCUNyZWF0ZSBhIG1lcmdlIGNvbW1pdCBldmVuIHdoZW4gdGhlIG1lcmdlIHJlc29sdmVzIGFzIGEKKwlmYXN0LWZvcndhcmQuCisKKy0tZmYtb25seTo6CisJUmVmdXNlIHRvIG1lcmdlIGFuZCBleGl0IHdpdGggYSBub24temVybyBzdGF0dXMgdW5sZXNzIHRoZQorCWN1cnJlbnQgYEhFQURgIGlzIGFscmVhZHkgdXAtdG8tZGF0ZSBvciB0aGUgbWVyZ2UgY2FuIGJlCisJcmVzb2x2ZWQgYXMgYSBmYXN0LWZvcndhcmQuCisKKy0tbG9nWz08bj5dOjoKKy0tbm8tbG9nOjoKKwlJbiBhZGRpdGlvbiB0byBicmFuY2ggbmFtZXMsIHBvcHVsYXRlIHRoZSBsb2cgbWVzc2FnZSB3aXRoCisJb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gYXQgbW9zdCA8bj4gYWN0dWFsIGNvbW1pdHMgdGhhdCBhcmUgYmVpbmcKKwltZXJnZWQuIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LWZtdC1tZXJnZS1tc2dbMV0uCisrCitXaXRoIC0tbm8tbG9nIGRvIG5vdCBsaXN0IG9uZS1saW5lIGRlc2NyaXB0aW9ucyBmcm9tIHRoZQorYWN0dWFsIGNvbW1pdHMgYmVpbmcgbWVyZ2VkLgorCisKKy0tc3RhdDo6Cistbjo6CistLW5vLXN0YXQ6OgorCVNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZS4gVGhlIGRpZmZzdGF0IGlzIGFsc28KKwljb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBtZXJnZS5zdGF0LgorKworV2l0aCAtbiBvciAtLW5vLXN0YXQgZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZQorbWVyZ2UuCisKKy0tc3F1YXNoOjoKKy0tbm8tc3F1YXNoOjoKKwlQcm9kdWNlIHRoZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHN0YXRlIGFzIGlmIGEgcmVhbAorCW1lcmdlIGhhcHBlbmVkIChleGNlcHQgZm9yIHRoZSBtZXJnZSBpbmZvcm1hdGlvbiksCisJYnV0IGRvIG5vdCBhY3R1YWxseSBtYWtlIGEgY29tbWl0IG9yCisJbW92ZSB0aGUgYEhFQURgLCBub3IgcmVjb3JkIGAkR0lUX0RJUi9NRVJHRV9IRUFEYCB0bworCWNhdXNlIHRoZSBuZXh0IGBnaXQgY29tbWl0YCBjb21tYW5kIHRvIGNyZWF0ZSBhIG1lcmdlCisJY29tbWl0LiAgVGhpcyBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIHNpbmdsZSBjb21taXQgb24KKwl0b3Agb2YgdGhlIGN1cnJlbnQgYnJhbmNoIHdob3NlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcworCW1lcmdpbmcgYW5vdGhlciBicmFuY2ggKG9yIG1vcmUgaW4gY2FzZSBvZiBhbiBvY3RvcHVzKS4KKysKK1dpdGggLS1uby1zcXVhc2ggcGVyZm9ybSB0aGUgbWVyZ2UgYW5kIGNvbW1pdCB0aGUgcmVzdWx0LiBUaGlzCitvcHRpb24gY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgLS1zcXVhc2guCisKKy1zIDxzdHJhdGVneT46OgorLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKwlVc2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5OyBjYW4gYmUgc3VwcGxpZWQgbW9yZSB0aGFuCisJb25jZSB0byBzcGVjaWZ5IHRoZW0gaW4gdGhlIG9yZGVyIHRoZXkgc2hvdWxkIGJlIHRyaWVkLgorCUlmIHRoZXJlIGlzIG5vIGAtc2Agb3B0aW9uLCBhIGJ1aWx0LWluIGxpc3Qgb2Ygc3RyYXRlZ2llcworCWlzIHVzZWQgaW5zdGVhZCAoJ2dpdCBtZXJnZS1yZWN1cnNpdmUnIHdoZW4gbWVyZ2luZyBhIHNpbmdsZQorCWhlYWQsICdnaXQgbWVyZ2Utb2N0b3B1cycgb3RoZXJ3aXNlKS4KKworLVggPG9wdGlvbj46OgorLS1zdHJhdGVneS1vcHRpb249PG9wdGlvbj46OgorCVBhc3MgbWVyZ2Ugc3RyYXRlZ3kgc3BlY2lmaWMgb3B0aW9uIHRocm91Z2ggdG8gdGhlIG1lcmdlCisJc3RyYXRlZ3kuCisKKy0tc3VtbWFyeTo6CistLW5vLXN1bW1hcnk6OgorCVN5bm9ueW1zIHRvIC0tc3RhdCBhbmQgLS1uby1zdGF0OyB0aGVzZSBhcmUgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZQorCXJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistcTo6CistLXF1aWV0OjoKKwlPcGVyYXRlIHF1aWV0bHkuIEltcGxpZXMgLS1uby1wcm9ncmVzcy4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLgorCistLXByb2dyZXNzOjoKKy0tbm8tcHJvZ3Jlc3M6OgorCVR1cm4gcHJvZ3Jlc3Mgb24vb2ZmIGV4cGxpY2l0bHkuIElmIG5laXRoZXIgaXMgc3BlY2lmaWVkLAorCXByb2dyZXNzIGlzIHNob3duIGlmIHN0YW5kYXJkIGVycm9yIGlzIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLgorCU5vdGUgdGhhdCBub3QgYWxsIG1lcmdlIHN0cmF0ZWdpZXMgbWF5IHN1cHBvcnQgcHJvZ3Jlc3MKKwlyZXBvcnRpbmcuCisKK2VuZGlmOjpnaXQtcHVsbFtdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmRiODAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dApAQCAtMCwwICsxLDEwOSBAQAorTUVSR0UgU1RSQVRFR0lFUworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVyZ2UgbWVjaGFuaXNtICgnZ2l0LW1lcmdlJyBhbmQgJ2dpdC1wdWxsJyBjb21tYW5kcykgYWxsb3dzIHRoZQorYmFja2VuZCAnbWVyZ2Ugc3RyYXRlZ2llcycgdG8gYmUgY2hvc2VuIHdpdGggYC1zYCBvcHRpb24uICBTb21lIHN0cmF0ZWdpZXMKK2NhbiBhbHNvIHRha2UgdGhlaXIgb3duIG9wdGlvbnMsIHdoaWNoIGNhbiBiZSBwYXNzZWQgYnkgZ2l2aW5nIGAtWDxvcHRpb24+YAorYXJndW1lbnRzIHRvICdnaXQtbWVyZ2UnIGFuZC9vciAnZ2l0LXB1bGwnLgorCityZXNvbHZlOjoKKwlUaGlzIGNhbiBvbmx5IHJlc29sdmUgdHdvIGhlYWRzIChpLmUuIHRoZSBjdXJyZW50IGJyYW5jaAorCWFuZCBhbm90aGVyIGJyYW5jaCB5b3UgcHVsbGVkIGZyb20pIHVzaW5nIGEgMy13YXkgbWVyZ2UKKwlhbGdvcml0aG0uICBJdCB0cmllcyB0byBjYXJlZnVsbHkgZGV0ZWN0IGNyaXNzLWNyb3NzCisJbWVyZ2UgYW1iaWd1aXRpZXMgYW5kIGlzIGNvbnNpZGVyZWQgZ2VuZXJhbGx5IHNhZmUgYW5kCisJZmFzdC4KKworcmVjdXJzaXZlOjoKKwlUaGlzIGNhbiBvbmx5IHJlc29sdmUgdHdvIGhlYWRzIHVzaW5nIGEgMy13YXkgbWVyZ2UKKwlhbGdvcml0aG0uICBXaGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY29tbW9uCisJYW5jZXN0b3IgdGhhdCBjYW4gYmUgdXNlZCBmb3IgMy13YXkgbWVyZ2UsIGl0IGNyZWF0ZXMgYQorCW1lcmdlZCB0cmVlIG9mIHRoZSBjb21tb24gYW5jZXN0b3JzIGFuZCB1c2VzIHRoYXQgYXMKKwl0aGUgcmVmZXJlbmNlIHRyZWUgZm9yIHRoZSAzLXdheSBtZXJnZS4gIFRoaXMgaGFzIGJlZW4KKwlyZXBvcnRlZCB0byByZXN1bHQgaW4gZmV3ZXIgbWVyZ2UgY29uZmxpY3RzIHdpdGhvdXQKKwljYXVzaW5nIG1pcy1tZXJnZXMgYnkgdGVzdHMgZG9uZSBvbiBhY3R1YWwgbWVyZ2UgY29tbWl0cworCXRha2VuIGZyb20gTGludXggMi42IGtlcm5lbCBkZXZlbG9wbWVudCBoaXN0b3J5LgorCUFkZGl0aW9uYWxseSB0aGlzIGNhbiBkZXRlY3QgYW5kIGhhbmRsZSBtZXJnZXMgaW52b2x2aW5nCisJcmVuYW1lcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgd2hlbgorCXB1bGxpbmcgb3IgbWVyZ2luZyBvbmUgYnJhbmNoLgorKworVGhlICdyZWN1cnNpdmUnIHN0cmF0ZWd5IGNhbiB0YWtlIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworb3Vyczs7CisJVGhpcyBvcHRpb24gZm9yY2VzIGNvbmZsaWN0aW5nIGh1bmtzIHRvIGJlIGF1dG8tcmVzb2x2ZWQgY2xlYW5seSBieQorCWZhdm9yaW5nICdvdXInIHZlcnNpb24uICBDaGFuZ2VzIGZyb20gdGhlIG90aGVyIHRyZWUgdGhhdCBkbyBub3QKKwljb25mbGljdCB3aXRoIG91ciBzaWRlIGFyZSByZWZsZWN0ZWQgdG8gdGhlIG1lcmdlIHJlc3VsdC4KKwlGb3IgYSBiaW5hcnkgZmlsZSwgdGhlIGVudGlyZSBjb250ZW50cyBhcmUgdGFrZW4gZnJvbSBvdXIgc2lkZS4KKysKK1RoaXMgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIHRoZSAnb3VycycgbWVyZ2Ugc3RyYXRlZ3ksIHdoaWNoIGRvZXMgbm90CitldmVuIGxvb2sgYXQgd2hhdCB0aGUgb3RoZXIgdHJlZSBjb250YWlucyBhdCBhbGwuICBJdCBkaXNjYXJkcyBldmVyeXRoaW5nCit0aGUgb3RoZXIgdHJlZSBkaWQsIGRlY2xhcmluZyAnb3VyJyBoaXN0b3J5IGNvbnRhaW5zIGFsbCB0aGF0IGhhcHBlbmVkIGluIGl0LgorCit0aGVpcnM7OworCVRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mICdvdXJzJy4KKworcGF0aWVuY2U7OworCVdpdGggdGhpcyBvcHRpb24sICdtZXJnZS1yZWN1cnNpdmUnIHNwZW5kcyBhIGxpdHRsZSBleHRyYSB0aW1lCisJdG8gYXZvaWQgbWlzbWVyZ2VzIHRoYXQgc29tZXRpbWVzIG9jY3VyIGR1ZSB0byB1bmltcG9ydGFudAorCW1hdGNoaW5nIGxpbmVzIChlLmcuLCBicmFjZXMgZnJvbSBkaXN0aW5jdCBmdW5jdGlvbnMpLiAgVXNlCisJdGhpcyB3aGVuIHRoZSBicmFuY2hlcyB0byBiZSBtZXJnZWQgaGF2ZSBkaXZlcmdlZCB3aWxkbHkuCisJU2VlIGFsc28gbGlua2dpdDpnaXQtZGlmZlsxXSBgLS1wYXRpZW5jZWAuCisKK2lnbm9yZS1zcGFjZS1jaGFuZ2U7OworaWdub3JlLWFsbC1zcGFjZTs7CitpZ25vcmUtc3BhY2UtYXQtZW9sOzsKKwlUcmVhdHMgbGluZXMgd2l0aCB0aGUgaW5kaWNhdGVkIHR5cGUgb2Ygd2hpdGVzcGFjZSBjaGFuZ2UgYXMKKwl1bmNoYW5nZWQgZm9yIHRoZSBzYWtlIG9mIGEgdGhyZWUtd2F5IG1lcmdlLiAgV2hpdGVzcGFjZQorCWNoYW5nZXMgbWl4ZWQgd2l0aCBvdGhlciBjaGFuZ2VzIHRvIGEgbGluZSBhcmUgbm90IGlnbm9yZWQuCisJU2VlIGFsc28gbGlua2dpdDpnaXQtZGlmZlsxXSBgLWJgLCBgLXdgLCBhbmQKKwlgLS1pZ25vcmUtc3BhY2UtYXQtZW9sYC4KKysKKyogSWYgJ3RoZWlyJyB2ZXJzaW9uIG9ubHkgaW50cm9kdWNlcyB3aGl0ZXNwYWNlIGNoYW5nZXMgdG8gYSBsaW5lLAorICAnb3VyJyB2ZXJzaW9uIGlzIHVzZWQ7CisqIElmICdvdXInIHZlcnNpb24gaW50cm9kdWNlcyB3aGl0ZXNwYWNlIGNoYW5nZXMgYnV0ICd0aGVpcicKKyAgdmVyc2lvbiBpbmNsdWRlcyBhIHN1YnN0YW50aWFsIGNoYW5nZSwgJ3RoZWlyJyB2ZXJzaW9uIGlzIHVzZWQ7CisqIE90aGVyd2lzZSwgdGhlIG1lcmdlIHByb2NlZWRzIGluIHRoZSB1c3VhbCB3YXkuCisKK3Jlbm9ybWFsaXplOzsKKwlUaGlzIHJ1bnMgYSB2aXJ0dWFsIGNoZWNrLW91dCBhbmQgY2hlY2staW4gb2YgYWxsIHRocmVlIHN0YWdlcworCW9mIGEgZmlsZSB3aGVuIHJlc29sdmluZyBhIHRocmVlLXdheSBtZXJnZS4gIFRoaXMgb3B0aW9uIGlzCisJbWVhbnQgdG8gYmUgdXNlZCB3aGVuIG1lcmdpbmcgYnJhbmNoZXMgd2l0aCBkaWZmZXJlbnQgY2xlYW4KKwlmaWx0ZXJzIG9yIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24gcnVsZXMuICBTZWUgIk1lcmdpbmcKKwlicmFuY2hlcyB3aXRoIGRpZmZlcmluZyBjaGVja2luL2NoZWNrb3V0IGF0dHJpYnV0ZXMiIGluCisJbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCituby1yZW5vcm1hbGl6ZTs7CisJRGlzYWJsZXMgdGhlIGByZW5vcm1hbGl6ZWAgb3B0aW9uLiAgVGhpcyBvdmVycmlkZXMgdGhlCisJYG1lcmdlLnJlbm9ybWFsaXplYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCityZW5hbWUtdGhyZXNob2xkPTxuPjs7CisJQ29udHJvbHMgdGhlIHNpbWlsYXJpdHkgdGhyZXNob2xkIHVzZWQgZm9yIHJlbmFtZSBkZXRlY3Rpb24uCisJU2VlIGFsc28gbGlua2dpdDpnaXQtZGlmZlsxXSBgLU1gLgorCitzdWJ0cmVlWz08cGF0aD5dOzsKKwlUaGlzIG9wdGlvbiBpcyBhIG1vcmUgYWR2YW5jZWQgZm9ybSBvZiAnc3VidHJlZScgc3RyYXRlZ3ksIHdoZXJlCisJdGhlIHN0cmF0ZWd5IG1ha2VzIGEgZ3Vlc3Mgb24gaG93IHR3byB0cmVlcyBtdXN0IGJlIHNoaWZ0ZWQgdG8KKwltYXRjaCB3aXRoIGVhY2ggb3RoZXIgd2hlbiBtZXJnaW5nLiAgSW5zdGVhZCwgdGhlIHNwZWNpZmllZCBwYXRoCisJaXMgcHJlZml4ZWQgKG9yIHN0cmlwcGVkIGZyb20gdGhlIGJlZ2lubmluZykgdG8gbWFrZSB0aGUgc2hhcGUgb2YKKwl0d28gdHJlZXMgdG8gbWF0Y2guCisKK29jdG9wdXM6OgorCVRoaXMgcmVzb2x2ZXMgY2FzZXMgd2l0aCBtb3JlIHRoYW4gdHdvIGhlYWRzLCBidXQgcmVmdXNlcyB0byBkbworCWEgY29tcGxleCBtZXJnZSB0aGF0IG5lZWRzIG1hbnVhbCByZXNvbHV0aW9uLiAgSXQgaXMKKwlwcmltYXJpbHkgbWVhbnQgdG8gYmUgdXNlZCBmb3IgYnVuZGxpbmcgdG9waWMgYnJhbmNoCisJaGVhZHMgdG9nZXRoZXIuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1lcmdlIHN0cmF0ZWd5IHdoZW4KKwlwdWxsaW5nIG9yIG1lcmdpbmcgbW9yZSB0aGFuIG9uZSBicmFuY2guCisKK291cnM6OgorCVRoaXMgcmVzb2x2ZXMgYW55IG51bWJlciBvZiBoZWFkcywgYnV0IHRoZSByZXN1bHRpbmcgdHJlZSBvZiB0aGUKKwltZXJnZSBpcyBhbHdheXMgdGhhdCBvZiB0aGUgY3VycmVudCBicmFuY2ggaGVhZCwgZWZmZWN0aXZlbHkKKwlpZ25vcmluZyBhbGwgY2hhbmdlcyBmcm9tIGFsbCBvdGhlciBicmFuY2hlcy4gIEl0IGlzIG1lYW50IHRvCisJYmUgdXNlZCB0byBzdXBlcnNlZGUgb2xkIGRldmVsb3BtZW50IGhpc3Rvcnkgb2Ygc2lkZQorCWJyYW5jaGVzLiAgTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIC1Yb3VycyBvcHRpb24gdG8KKwl0aGUgJ3JlY3Vyc2l2ZScgbWVyZ2Ugc3RyYXRlZ3kuCisKK3N1YnRyZWU6OgorCVRoaXMgaXMgYSBtb2RpZmllZCByZWN1cnNpdmUgc3RyYXRlZ3kuIFdoZW4gbWVyZ2luZyB0cmVlcyBBIGFuZAorCUIsIGlmIEIgY29ycmVzcG9uZHMgdG8gYSBzdWJ0cmVlIG9mIEEsIEIgaXMgZmlyc3QgYWRqdXN0ZWQgdG8KKwltYXRjaCB0aGUgdHJlZSBzdHJ1Y3R1cmUgb2YgQSwgaW5zdGVhZCBvZiByZWFkaW5nIHRoZSB0cmVlcyBhdAorCXRoZSBzYW1lIGxldmVsLiBUaGlzIGFkanVzdG1lbnQgaXMgYWxzbyBkb25lIHRvIHRoZSBjb21tb24KKwlhbmNlc3RvciB0cmVlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWVkZGVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKQEAgLTAsMCArMSwyMDIgQEAKK1BSRVRUWSBGT1JNQVRTCistLS0tLS0tLS0tLS0tLQorCitJZiB0aGUgY29tbWl0IGlzIGEgbWVyZ2UsIGFuZCBpZiB0aGUgcHJldHR5LWZvcm1hdAoraXMgbm90ICdvbmVsaW5lJywgJ2VtYWlsJyBvciAncmF3JywgYW4gYWRkaXRpb25hbCBsaW5lIGlzCitpbnNlcnRlZCBiZWZvcmUgdGhlICdBdXRob3I6JyBsaW5lLiAgVGhpcyBsaW5lIGJlZ2lucyB3aXRoCisiTWVyZ2U6ICIgYW5kIHRoZSBzaGExcyBvZiBhbmNlc3RyYWwgY29tbWl0cyBhcmUgcHJpbnRlZCwKK3NlcGFyYXRlZCBieSBzcGFjZXMuICBOb3RlIHRoYXQgdGhlIGxpc3RlZCBjb21taXRzIG1heSBub3QKK25lY2Vzc2FyaWx5IGJlIHRoZSBsaXN0IG9mIHRoZSAqZGlyZWN0KiBwYXJlbnQgY29tbWl0cyBpZiB5b3UKK2hhdmUgbGltaXRlZCB5b3VyIHZpZXcgb2YgaGlzdG9yeTogZm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUKK29ubHkgaW50ZXJlc3RlZCBpbiBjaGFuZ2VzIHJlbGF0ZWQgdG8gYSBjZXJ0YWluIGRpcmVjdG9yeSBvcgorZmlsZS4KKworVGhlcmUgYXJlIHNldmVyYWwgYnVpbHQtaW4gZm9ybWF0cywgYW5kIHlvdSBjYW4gZGVmaW5lCithZGRpdGlvbmFsIGZvcm1hdHMgYnkgc2V0dGluZyBhIHByZXR0eS48bmFtZT4KK2NvbmZpZyBvcHRpb24gdG8gZWl0aGVyIGFub3RoZXIgZm9ybWF0IG5hbWUsIG9yIGEKKydmb3JtYXQ6JyBzdHJpbmcsIGFzIGRlc2NyaWJlZCBiZWxvdyAoc2VlCitsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiBIZXJlIGFyZSB0aGUgZGV0YWlscyBvZiB0aGUKK2J1aWx0LWluIGZvcm1hdHM6CisKKyogJ29uZWxpbmUnCisKKwkgIDxzaGExPiA8dGl0bGUgbGluZT4KKysKK1RoaXMgaXMgZGVzaWduZWQgdG8gYmUgYXMgY29tcGFjdCBhcyBwb3NzaWJsZS4KKworKiAnc2hvcnQnCisKKwkgIGNvbW1pdCA8c2hhMT4KKwkgIEF1dGhvcjogPGF1dGhvcj4KKworCSAgICAgIDx0aXRsZSBsaW5lPgorCisqICdtZWRpdW0nCisKKwkgIGNvbW1pdCA8c2hhMT4KKwkgIEF1dGhvcjogPGF1dGhvcj4KKwkgIERhdGU6ICAgPGF1dGhvciBkYXRlPgorCisJICAgICAgPHRpdGxlIGxpbmU+CisKKwkgICAgICA8ZnVsbCBjb21taXQgbWVzc2FnZT4KKworKiAnZnVsbCcKKworCSAgY29tbWl0IDxzaGExPgorCSAgQXV0aG9yOiA8YXV0aG9yPgorCSAgQ29tbWl0OiA8Y29tbWl0dGVyPgorCisJICAgICAgPHRpdGxlIGxpbmU+CisKKwkgICAgICA8ZnVsbCBjb21taXQgbWVzc2FnZT4KKworKiAnZnVsbGVyJworCisJICBjb21taXQgPHNoYTE+CisJICBBdXRob3I6ICAgICA8YXV0aG9yPgorCSAgQXV0aG9yRGF0ZTogPGF1dGhvciBkYXRlPgorCSAgQ29tbWl0OiAgICAgPGNvbW1pdHRlcj4KKwkgIENvbW1pdERhdGU6IDxjb21taXR0ZXIgZGF0ZT4KKworCSAgICAgICA8dGl0bGUgbGluZT4KKworCSAgICAgICA8ZnVsbCBjb21taXQgbWVzc2FnZT4KKworKiAnZW1haWwnCisKKwkgIEZyb20gPHNoYTE+IDxkYXRlPgorCSAgRnJvbTogPGF1dGhvcj4KKwkgIERhdGU6IDxhdXRob3IgZGF0ZT4KKwkgIFN1YmplY3Q6IFtQQVRDSF0gPHRpdGxlIGxpbmU+CisKKwkgIDxmdWxsIGNvbW1pdCBtZXNzYWdlPgorCisqICdyYXcnCisrCitUaGUgJ3JhdycgZm9ybWF0IHNob3dzIHRoZSBlbnRpcmUgY29tbWl0IGV4YWN0bHkgYXMKK3N0b3JlZCBpbiB0aGUgY29tbWl0IG9iamVjdC4gIE5vdGFibHksIHRoZSBTSEExcyBhcmUKK2Rpc3BsYXllZCBpbiBmdWxsLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgLS1hYmJyZXYgb3IKKy0tbm8tYWJicmV2IGFyZSB1c2VkLCBhbmQgJ3BhcmVudHMnIGluZm9ybWF0aW9uIHNob3cgdGhlCit0cnVlIHBhcmVudCBjb21taXRzLCB3aXRob3V0IHRha2luZyBncmFmdHMgbm9yIGhpc3RvcnkKK3NpbXBsaWZpY2F0aW9uIGludG8gYWNjb3VudC4KKworKiAnZm9ybWF0OjxzdHJpbmc+JworKworVGhlICdmb3JtYXQ6PHN0cmluZz4nIGZvcm1hdCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgd2hpY2ggaW5mb3JtYXRpb24KK3lvdSB3YW50IHRvIHNob3cuIEl0IHdvcmtzIGEgbGl0dGxlIGJpdCBsaWtlIHByaW50ZiBmb3JtYXQsCit3aXRoIHRoZSBub3RhYmxlIGV4Y2VwdGlvbiB0aGF0IHlvdSBnZXQgYSBuZXdsaW5lIHdpdGggJyVuJworaW5zdGVhZCBvZiAnXG4nLgorKworRS5nLCAnZm9ybWF0OiJUaGUgYXV0aG9yIG9mICVoIHdhcyAlYW4sICVhciVuVGhlIHRpdGxlIHdhcyA+PiVzPDwlbiInCit3b3VsZCBzaG93IHNvbWV0aGluZyBsaWtlIHRoaXM6CisrCistLS0tLS0tCitUaGUgYXV0aG9yIG9mIGZlNmUwZWUgd2FzIEp1bmlvIEMgSGFtYW5vLCAyMyBob3VycyBhZ28KK1RoZSB0aXRsZSB3YXMgPj50NDExOTogdGVzdCBhdXRvY29tcHV0aW5nIC1wPG4+IGZvciB0cmFkaXRpb25hbCBkaWZmIGlucHV0Ljw8CisKKy0tLS0tLS0tCisrCitUaGUgcGxhY2Vob2xkZXJzIGFyZToKKworLSAnJUgnOiBjb21taXQgaGFzaAorLSAnJWgnOiBhYmJyZXZpYXRlZCBjb21taXQgaGFzaAorLSAnJVQnOiB0cmVlIGhhc2gKKy0gJyV0JzogYWJicmV2aWF0ZWQgdHJlZSBoYXNoCistICclUCc6IHBhcmVudCBoYXNoZXMKKy0gJyVwJzogYWJicmV2aWF0ZWQgcGFyZW50IGhhc2hlcworLSAnJWFuJzogYXV0aG9yIG5hbWUKKy0gJyVhTic6IGF1dGhvciBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCistICclYWUnOiBhdXRob3IgZW1haWwKKy0gJyVhRSc6IGF1dGhvciBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQorLSAnJWFkJzogYXV0aG9yIGRhdGUgKGZvcm1hdCByZXNwZWN0cyAtLWRhdGU9IG9wdGlvbikKKy0gJyVhRCc6IGF1dGhvciBkYXRlLCBSRkMyODIyIHN0eWxlCistICclYXInOiBhdXRob3IgZGF0ZSwgcmVsYXRpdmUKKy0gJyVhdCc6IGF1dGhvciBkYXRlLCBVTklYIHRpbWVzdGFtcAorLSAnJWFpJzogYXV0aG9yIGRhdGUsIElTTyA4NjAxIGZvcm1hdAorLSAnJWNuJzogY29tbWl0dGVyIG5hbWUKKy0gJyVjTic6IGNvbW1pdHRlciBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCistICclY2UnOiBjb21taXR0ZXIgZW1haWwKKy0gJyVjRSc6IGNvbW1pdHRlciBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQorLSAnJWNkJzogY29tbWl0dGVyIGRhdGUKKy0gJyVjRCc6IGNvbW1pdHRlciBkYXRlLCBSRkMyODIyIHN0eWxlCistICclY3InOiBjb21taXR0ZXIgZGF0ZSwgcmVsYXRpdmUKKy0gJyVjdCc6IGNvbW1pdHRlciBkYXRlLCBVTklYIHRpbWVzdGFtcAorLSAnJWNpJzogY29tbWl0dGVyIGRhdGUsIElTTyA4NjAxIGZvcm1hdAorLSAnJWQnOiByZWYgbmFtZXMsIGxpa2UgdGhlIC0tZGVjb3JhdGUgb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LWxvZ1sxXQorLSAnJWUnOiBlbmNvZGluZworLSAnJXMnOiBzdWJqZWN0CistICclZic6IHNhbml0aXplZCBzdWJqZWN0IGxpbmUsIHN1aXRhYmxlIGZvciBhIGZpbGVuYW1lCistICclYic6IGJvZHkKKy0gJyVCJzogcmF3IGJvZHkgKHVud3JhcHBlZCBzdWJqZWN0IGFuZCBib2R5KQorLSAnJU4nOiBjb21taXQgbm90ZXMKKy0gJyVHRyc6IHJhdyB2ZXJpZmljYXRpb24gbWVzc2FnZSBmcm9tIEdQRyBmb3IgYSBzaWduZWQgY29tbWl0CistICclRz8nOiBzaG93IGVpdGhlciAiRyIgZm9yIEdvb2Qgb3IgIkIiIGZvciBCYWQgZm9yIGEgc2lnbmVkIGNvbW1pdAorLSAnJUdTJzogc2hvdyB0aGUgbmFtZSBvZiB0aGUgc2lnbmVyIGZvciBhIHNpZ25lZCBjb21taXQKKy0gJyVnRCc6IHJlZmxvZyBzZWxlY3RvciwgZS5nLiwgYHJlZnMvc3Rhc2hAezF9YAorLSAnJWdkJzogc2hvcnRlbmVkIHJlZmxvZyBzZWxlY3RvciwgZS5nLiwgYHN0YXNoQHsxfWAKKy0gJyVnbic6IHJlZmxvZyBpZGVudGl0eSBuYW1lCistICclZ04nOiByZWZsb2cgaWRlbnRpdHkgbmFtZSAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQorLSAnJWdlJzogcmVmbG9nIGlkZW50aXR5IGVtYWlsCistICclZ0UnOiByZWZsb2cgaWRlbnRpdHkgZW1haWwgKHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZSBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKy0gJyVncyc6IHJlZmxvZyBzdWJqZWN0CistICclQ3JlZCc6IHN3aXRjaCBjb2xvciB0byByZWQKKy0gJyVDZ3JlZW4nOiBzd2l0Y2ggY29sb3IgdG8gZ3JlZW4KKy0gJyVDYmx1ZSc6IHN3aXRjaCBjb2xvciB0byBibHVlCistICclQ3Jlc2V0JzogcmVzZXQgY29sb3IKKy0gJyVDKC4uLiknOiBjb2xvciBzcGVjaWZpY2F0aW9uLCBhcyBkZXNjcmliZWQgaW4gY29sb3IuYnJhbmNoLiogY29uZmlnIG9wdGlvbgorLSAnJW0nOiBsZWZ0LCByaWdodCBvciBib3VuZGFyeSBtYXJrCistICclbic6IG5ld2xpbmUKKy0gJyUlJzogYSByYXcgJyUnCistICcleDAwJzogcHJpbnQgYSBieXRlIGZyb20gYSBoZXggY29kZQorLSAnJXcoWzx3PlssPGkxPlssPGkyPl1dXSknOiBzd2l0Y2ggbGluZSB3cmFwcGluZywgbGlrZSB0aGUgLXcgb3B0aW9uIG9mCisgIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdLgorCitOT1RFOiBTb21lIHBsYWNlaG9sZGVycyBtYXkgZGVwZW5kIG9uIG90aGVyIG9wdGlvbnMgZ2l2ZW4gdG8gdGhlCityZXZpc2lvbiB0cmF2ZXJzYWwgZW5naW5lLiBGb3IgZXhhbXBsZSwgdGhlIGAlZypgIHJlZmxvZyBvcHRpb25zIHdpbGwKK2luc2VydCBhbiBlbXB0eSBzdHJpbmcgdW5sZXNzIHdlIGFyZSB0cmF2ZXJzaW5nIHJlZmxvZyBlbnRyaWVzIChlLmcuLCBieQorYGdpdCBsb2cgLWdgKS4gVGhlIGAlZGAgcGxhY2Vob2xkZXIgd2lsbCB1c2UgdGhlICJzaG9ydCIgZGVjb3JhdGlvbgorZm9ybWF0IGlmIGAtLWRlY29yYXRlYCB3YXMgbm90IGFscmVhZHkgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworSWYgeW91IGFkZCBhIGArYCAocGx1cyBzaWduKSBhZnRlciAnJScgb2YgYSBwbGFjZWhvbGRlciwgYSBsaW5lLWZlZWQKK2lzIGluc2VydGVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZXhwYW5zaW9uIGlmIGFuZCBvbmx5IGlmIHRoZQorcGxhY2Vob2xkZXIgZXhwYW5kcyB0byBhIG5vbi1lbXB0eSBzdHJpbmcuCisKK0lmIHlvdSBhZGQgYSBgLWAgKG1pbnVzIHNpZ24pIGFmdGVyICclJyBvZiBhIHBsYWNlaG9sZGVyLCBsaW5lLWZlZWRzIHRoYXQKK2ltbWVkaWF0ZWx5IHByZWNlZGUgdGhlIGV4cGFuc2lvbiBhcmUgZGVsZXRlZCBpZiBhbmQgb25seSBpZiB0aGUKK3BsYWNlaG9sZGVyIGV4cGFuZHMgdG8gYW4gZW1wdHkgc3RyaW5nLgorCitJZiB5b3UgYWRkIGEgYCBgIChzcGFjZSkgYWZ0ZXIgJyUnIG9mIGEgcGxhY2Vob2xkZXIsIGEgc3BhY2UKK2lzIGluc2VydGVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZXhwYW5zaW9uIGlmIGFuZCBvbmx5IGlmIHRoZQorcGxhY2Vob2xkZXIgZXhwYW5kcyB0byBhIG5vbi1lbXB0eSBzdHJpbmcuCisKKyogJ3Rmb3JtYXQ6JworKworVGhlICd0Zm9ybWF0OicgZm9ybWF0IHdvcmtzIGV4YWN0bHkgbGlrZSAnZm9ybWF0OicsIGV4Y2VwdCB0aGF0IGl0Citwcm92aWRlcyAidGVybWluYXRvciIgc2VtYW50aWNzIGluc3RlYWQgb2YgInNlcGFyYXRvciIgc2VtYW50aWNzLiBJbgorb3RoZXIgd29yZHMsIGVhY2ggY29tbWl0IGhhcyB0aGUgbWVzc2FnZSB0ZXJtaW5hdG9yIGNoYXJhY3RlciAodXN1YWxseSBhCituZXdsaW5lKSBhcHBlbmRlZCwgcmF0aGVyIHRoYW4gYSBzZXBhcmF0b3IgcGxhY2VkIGJldHdlZW4gZW50cmllcy4KK1RoaXMgbWVhbnMgdGhhdCB0aGUgZmluYWwgZW50cnkgb2YgYSBzaW5nbGUtbGluZSBmb3JtYXQgd2lsbCBiZSBwcm9wZXJseQordGVybWluYXRlZCB3aXRoIGEgbmV3IGxpbmUsIGp1c3QgYXMgdGhlICJvbmVsaW5lIiBmb3JtYXQgZG9lcy4KK0ZvciBleGFtcGxlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLTIgLS1wcmV0dHk9Zm9ybWF0OiVoIDRkYTQ1YmVmIFwKKyAgfCBwZXJsIC1wZSAnJF8gLj0gIiAtLSBOTyBORVdMSU5FXG4iIHVubGVzcyAvXG4vJworNGRhNDViZQorNzEzNDk3MyAtLSBOTyBORVdMSU5FCisKKyQgZ2l0IGxvZyAtMiAtLXByZXR0eT10Zm9ybWF0OiVoIDRkYTQ1YmVmIFwKKyAgfCBwZXJsIC1wZSAnJF8gLj0gIiAtLSBOTyBORVdMSU5FXG4iIHVubGVzcyAvXG4vJworNGRhNDViZQorNzEzNDk3MworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitJbiBhZGRpdGlvbiwgYW55IHVucmVjb2duaXplZCBzdHJpbmcgdGhhdCBoYXMgYSBgJWAgaW4gaXQgaXMgaW50ZXJwcmV0ZWQKK2FzIGlmIGl0IGhhcyBgdGZvcm1hdDpgIGluIGZyb250IG9mIGl0LiAgRm9yIGV4YW1wbGUsIHRoZXNlIHR3byBhcmUKK2VxdWl2YWxlbnQ6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtMiAtLXByZXR0eT10Zm9ybWF0OiVoIDRkYTQ1YmVmCiskIGdpdCBsb2cgLTIgLS1wcmV0dHk9JWggNGRhNDViZWYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3ByZXR0eS1vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ5OTQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKQEAgLTAsMCArMSw3MiBAQAorLS1wcmV0dHlbPTxmb3JtYXQ+XTo6CistLWZvcm1hdD08Zm9ybWF0Pjo6CisKKwlQcmV0dHktcHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXQgbG9ncyBpbiBhIGdpdmVuIGZvcm1hdCwKKwl3aGVyZSAnPGZvcm1hdD4nIGNhbiBiZSBvbmUgb2YgJ29uZWxpbmUnLCAnc2hvcnQnLCAnbWVkaXVtJywKKwknZnVsbCcsICdmdWxsZXInLCAnZW1haWwnLCAncmF3JyBhbmQgJ2Zvcm1hdDo8c3RyaW5nPicuICBTZWUKKwl0aGUgIlBSRVRUWSBGT1JNQVRTIiBzZWN0aW9uIGZvciBzb21lIGFkZGl0aW9uYWwgZGV0YWlscyBmb3IgZWFjaAorCWZvcm1hdC4gIFdoZW4gb21pdHRlZCwgdGhlIGZvcm1hdCBkZWZhdWx0cyB0byAnbWVkaXVtJy4KKysKK05vdGU6IHlvdSBjYW4gc3BlY2lmeSB0aGUgZGVmYXVsdCBwcmV0dHkgZm9ybWF0IGluIHRoZSByZXBvc2l0b3J5Citjb25maWd1cmF0aW9uIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworLS1hYmJyZXYtY29tbWl0OjoKKwlJbnN0ZWFkIG9mIHNob3dpbmcgdGhlIGZ1bGwgNDAtYnl0ZSBoZXhhZGVjaW1hbCBjb21taXQgb2JqZWN0CisJbmFtZSwgc2hvdyBvbmx5IGEgcGFydGlhbCBwcmVmaXguICBOb24gZGVmYXVsdCBudW1iZXIgb2YKKwlkaWdpdHMgY2FuIGJlIHNwZWNpZmllZCB3aXRoICItLWFiYnJldj08bj4iICh3aGljaCBhbHNvIG1vZGlmaWVzCisJZGlmZiBvdXRwdXQsIGlmIGl0IGlzIGRpc3BsYXllZCkuCisrCitUaGlzIHNob3VsZCBtYWtlICItLXByZXR0eT1vbmVsaW5lIiBhIHdob2xlIGxvdCBtb3JlIHJlYWRhYmxlIGZvcgorcGVvcGxlIHVzaW5nIDgwLWNvbHVtbiB0ZXJtaW5hbHMuCisKKy0tbm8tYWJicmV2LWNvbW1pdDo6CisJU2hvdyB0aGUgZnVsbCA0MC1ieXRlIGhleGFkZWNpbWFsIGNvbW1pdCBvYmplY3QgbmFtZS4gVGhpcyBuZWdhdGVzCisJYC0tYWJicmV2LWNvbW1pdGAgYW5kIHRob3NlIG9wdGlvbnMgd2hpY2ggaW1wbHkgaXQgc3VjaCBhcworCSItLW9uZWxpbmUiLiBJdCBhbHNvIG92ZXJyaWRlcyB0aGUgJ2xvZy5hYmJyZXZDb21taXQnIHZhcmlhYmxlLgorCistLW9uZWxpbmU6OgorCVRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yICItLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCIKKwl1c2VkIHRvZ2V0aGVyLgorCistLWVuY29kaW5nWz08ZW5jb2Rpbmc+XTo6CisJVGhlIGNvbW1pdCBvYmplY3RzIHJlY29yZCB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgdGhlIGxvZyBtZXNzYWdlCisJaW4gdGhlaXIgZW5jb2RpbmcgaGVhZGVyOyB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZQorCWNvbW1hbmQgdG8gcmUtY29kZSB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGluIHRoZSBlbmNvZGluZworCXByZWZlcnJlZCBieSB0aGUgdXNlci4gIEZvciBub24gcGx1bWJpbmcgY29tbWFuZHMgdGhpcworCWRlZmF1bHRzIHRvIFVURi04LgorCistLW5vdGVzWz08cmVmPl06OgorCVNob3cgdGhlIG5vdGVzIChzZWUgbGlua2dpdDpnaXQtbm90ZXNbMV0pIHRoYXQgYW5ub3RhdGUgdGhlCisJY29tbWl0LCB3aGVuIHNob3dpbmcgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKKwlmb3IgYGdpdCBsb2dgLCBgZ2l0IHNob3dgIGFuZCBgZ2l0IHdoYXRjaGFuZ2VkYCBjb21tYW5kcyB3aGVuCisJdGhlcmUgaXMgbm8gYC0tcHJldHR5YCwgYC0tZm9ybWF0YCBub3IgYC0tb25lbGluZWAgb3B0aW9uIGdpdmVuCisJb24gdGhlIGNvbW1hbmQgbGluZS4KKysKK0J5IGRlZmF1bHQsIHRoZSBub3RlcyBzaG93biBhcmUgZnJvbSB0aGUgbm90ZXMgcmVmcyBsaXN0ZWQgaW4gdGhlCisnY29yZS5ub3Rlc1JlZicgYW5kICdub3Rlcy5kaXNwbGF5UmVmJyB2YXJpYWJsZXMgKG9yIGNvcnJlc3BvbmRpbmcKK2Vudmlyb25tZW50IG92ZXJyaWRlcykuIFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIG1vcmUgZGV0YWlscy4KKysKK1dpdGggYW4gb3B0aW9uYWwgJzxyZWY+JyBhcmd1bWVudCwgc2hvdyB0aGlzIG5vdGVzIHJlZiBpbnN0ZWFkIG9mIHRoZQorZGVmYXVsdCBub3RlcyByZWYocykuIFRoZSByZWYgaXMgdGFrZW4gdG8gYmUgaW4gYHJlZnMvbm90ZXMvYCBpZiBpdAoraXMgbm90IHF1YWxpZmllZC4KKysKK011bHRpcGxlIC0tbm90ZXMgb3B0aW9ucyBjYW4gYmUgY29tYmluZWQgdG8gY29udHJvbCB3aGljaCBub3RlcyBhcmUKK2JlaW5nIGRpc3BsYXllZC4gRXhhbXBsZXM6ICItLW5vdGVzPWZvbyIgd2lsbCBzaG93IG9ubHkgbm90ZXMgZnJvbQorInJlZnMvbm90ZXMvZm9vIjsgIi0tbm90ZXM9Zm9vIC0tbm90ZXMiIHdpbGwgc2hvdyBib3RoIG5vdGVzIGZyb20KKyJyZWZzL25vdGVzL2ZvbyIgYW5kIGZyb20gdGhlIGRlZmF1bHQgbm90ZXMgcmVmKHMpLgorCistLW5vLW5vdGVzOjoKKwlEbyBub3Qgc2hvdyBub3Rlcy4gVGhpcyBuZWdhdGVzIHRoZSBhYm92ZSBgLS1ub3Rlc2Agb3B0aW9uLCBieQorCXJlc2V0dGluZyB0aGUgbGlzdCBvZiBub3RlcyByZWZzIGZyb20gd2hpY2ggbm90ZXMgYXJlIHNob3duLgorCU9wdGlvbnMgYXJlIHBhcnNlZCBpbiB0aGUgb3JkZXIgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgc28gZS5nLgorCSItLW5vdGVzIC0tbm90ZXM9Zm9vIC0tbm8tbm90ZXMgLS1ub3Rlcz1iYXIiIHdpbGwgb25seSBzaG93IG5vdGVzCisJZnJvbSAicmVmcy9ub3Rlcy9iYXIiLgorCistLXNob3ctbm90ZXNbPTxyZWY+XTo6CistLVtuby1dc3RhbmRhcmQtbm90ZXM6OgorCVRoZXNlIG9wdGlvbnMgYXJlIGRlcHJlY2F0ZWQuIFVzZSB0aGUgYWJvdmUgLS1ub3Rlcy8tLW5vLW5vdGVzCisJb3B0aW9ucyBpbnN0ZWFkLgorCistLXNob3ctc2lnbmF0dXJlOjoKKwlDaGVjayB0aGUgdmFsaWRpdHkgb2YgYSBzaWduZWQgY29tbWl0IG9iamVjdCBieSBwYXNzaW5nIHRoZSBzaWduYXR1cmUKKwl0byBgZ3BnIC0tdmVyaWZ5YCBhbmQgc2hvdyB0aGUgb3V0cHV0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wdF9CUi9naXR0dXRvcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL3B0X0JSL2dpdHR1dG9yaWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWJhMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wdF9CUi9naXR0dXRvcmlhbC50eHQKQEAgLTAsMCArMSw2NzUgQEAKK2dpdHR1dG9yaWFsKDcpCis9PT09PT09PT09PT09PQorCitOT01FCistLS0tCitnaXR0dXRvcmlhbCAtIFVtIHR1dG9yaWFsIGRlIGludHJvZHXDp8OjbyBhbyBnaXQgKHBhcmEgdmVyc8OjbyAxLjUuMSBvdSBtYWlzIG5vdmEpCisKK1NJTk9QU0UKKy0tLS0tLS0tCitnaXQgKgorCitERVNDUknDh8ODTworLS0tLS0tLS0tLS0KKworRXN0ZSB0dXRvcmlhbCBleHBsaWNhIGNvbW8gaW1wb3J0YXIgdW0gbm92byBwcm9qZXRvIHBhcmEgbyBnaXQsCithZGljaW9uYXIgbXVkYW7Dp2FzIGEgZWxlLCBlIGNvbXBhcnRpbGhhciBtdWRhbsOnYXMgY29tIG91dHJvcworZGVzZW52b2x2ZWRvcmVzLgorCitTZSwgYW8gaW52w6lzIGRpc3NvLCB2b2PDqiBlc3TDoSBpbnRlcmVzc2FkbyBwcmltYXJpYW1lbnRlIGVtIHVzYXIgZ2l0IHBhcmEKK29idGVyIHVtIHByb2pldG8sIHBvciBleGVtcGxvLCBwYXJhIHRlc3RhciBhIMO6bHRpbWEgdmVyc8Ojbywgdm9jw6ogcG9kZQorcHJlZmVyaXIgY29tZcOnYXIgY29tIG9zIHByaW1laXJvcyBkb2lzIGNhcMOtdHVsb3MgZGUKK2xpbms6dXNlci1tYW51YWwuaHRtbFtPIE1hbnVhbCBkbyBVc3XDoXJpbyBHaXRdLgorCitQcmltZWlybywgbm90ZSBxdWUgdm9jw6ogcG9kZSBvYnRlciBkb2N1bWVudGHDp8OjbyBwYXJhIHVtIGNvbWFuZG8gY29tbworYGdpdCBsb2cgLS1ncmFwaGAgY29tOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbWFuIGdpdC1sb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvdToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBoZWxwIGxvZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbSBhIMO6bHRpbWEgZm9ybWEsIHZvY8OqIHBvZGUgdXNhciBvIHZpc3VhbGl6YWRvciBkZSBtYW51YWwgZGUgc3VhCitlc2NvbGhhOyB2ZWphIGxpbmtnaXQ6Z2l0LWhlbHBbMV0gcGFyYSBtYWlvciBpbmZvcm1hw6fDo28uCisKK8OJIHVtYSBib2EgaWTDqWlhIGluZm9ybWFyIGFvIGdpdCBzZXUgbm9tZSBlIGVuZGVyZcOnbyBww7pibGljbyBkZSBlbWFpbAorYW50ZXMgZGUgZmF6ZXIgcXVhbHF1ZXIgb3BlcmHDp8Ojby4gQSBtYW5laXJhIG1haXMgZsOhY2lsIGRlIGZhesOqLWxvIMOpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgIlNldSBOb21lIFZlbSBBcXVpIgorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgdm9jZUBzZXVkb21pbmlvLmV4ZW1wbG8uY29tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitJbXBvcnRhbmRvIHVtIG5vdm8gcHJvamV0bworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXNzdW1hIHF1ZSB2b2PDqiB0ZW0gdW0gdGFyYmFsbCBwcm9qZWN0LnRhci5neiBjb20gc2V1IHRyYWJhbGhvIGluaWNpYWwuCitWb2PDqiBwb2RlIGNvbG9jw6EtbG8gc29iIGNvbnRyb2xlIGRlIHJldmlzw6NvIGdpdCBkYSBzZWd1aW50ZSBmb3JtYToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIHRhciB4emYgcHJvamVjdC50YXIuZ3oKKyQgY2QgcHJvamVjdAorJCBnaXQgaW5pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCBpcsOhIHJlc3BvbmRlcgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC5naXQvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWdvcmEgcXVlIHZvY8OqIGluaWNpb3Ugc2V1IGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8sIHZvY8OqIGRldmUgdGVyIG5vdGFkbyBxdWUgdW0KK25vdm8gZGlyZXTDs3JpbyBmb2kgY3JpYWRvIGNvbSBvIG5vbWUgZGUgIi5naXQiLgorCitBIHNlZ3VpciwgZGlnYSBhbyBnaXQgcGFyYSBncmF2YXIgdW0gaW5zdGFudMOibmVvIGRvIGNvbnRlw7pkbyBkZSB0b2RvcyBvcworYXJxdWl2b3Mgc29iIG8gZGlyZXTDs3JpbyBhdHVhbCAobm90ZSBvICcuJyksIGNvbSAnZ2l0LWFkZCc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFc3RlIGluc3RhbnTDom5lbyBlc3TDoSBhZ29yYSBhcm1hemVuYWRvIGVtIHVtYSDDoXJlYSB0ZW1wb3LDoXJpYSBxdWUgbyBnaXQKK2NoYW1hIGRlICJpbmRleCIgb3Ugw61uZGljZS4gVm9jw6ogcG9kZSBhcm1hemVuYXIgcGVybWFuZW50ZW1lbnRlIG8KK2NvbnRlw7pkbyBkbyDDrW5kaWNlIG5vIHJlcG9zaXTDs3JpbyBjb20gJ2dpdC1jb21taXQnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lzdG8gdmFpIHRlIHBlZGlyIHBvciB1bWEgbWVuc2FnZW0gZGUgY29tbWl0LiBWb2PDqiBhZ29yYSBncmF2b3Ugc3VhCitwcmltZWlyYSB2ZXJzw6NvIGRlIHNldSBwcm9qZXRvIG5vIGdpdC4KKworRmF6ZW5kbyBtdWRhbsOnYXMKKy0tLS0tLS0tLS0tLS0tCisKK01vZGlmaXF1ZSBhbGd1bnMgYXJxdWl2b3MsIGUsIGVudMOjbywgYWRpY2lvbmUgc2V1IGNvbnRlw7pkbyBhdHVhbGl6YWRvIGFvCivDrW5kaWNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGFkZCBmaWxlMSBmaWxlMiBmaWxlMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZvY8OqIGVzdMOhIGFnb3JhIHByb250byBwYXJhIGZhemVyIG8gY29tbWl0LiBWb2PDqiBwb2RlIHZlciBvIHF1ZSBlc3TDoQorcGFyYSBzZXIgZ3JhdmFkbyB1c2FuZG8gJ2dpdC1kaWZmJyBjb20gYSBvcMOnw6NvIC0tY2FjaGVkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgLS1jYWNoZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoU2VtIC0tY2FjaGVkLCBvIGNvbWFuZG8gJ2dpdC1kaWZmJyBpcsOhIHRlIG1vc3RyYXIgcXVhaXNxdWVyIG11ZGFuw6dhcworcXVlIHZvY8OqIHRlbmhhIGZlaXRvIG1hcyBhaW5kYSBuw6NvIGFkaWNpb25vdSBhbyDDrW5kaWNlLikgVm9jw6ogdGFtYsOpbQorcG9kZSBvYnRlciB1bSBicmV2ZSBzdW3DoXJpbyBkYSBzaXR1YcOnw6NvIGNvbSAnZ2l0LXN0YXR1cyc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3RhdHVzCisjIE9uIGJyYW5jaCBtYXN0ZXIKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIworIwltb2RpZmllZDogICBmaWxlMQorIwltb2RpZmllZDogICBmaWxlMgorIwltb2RpZmllZDogICBmaWxlMworIworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlIHZvY8OqIHByZWNpc2FyIGZhemVyIHF1YWxxdWVyIG91dHJvIGFqdXN0ZSwgZmHDp2EtbyBhZ29yYSwgZSwgZW50w6NvLAorYWRpY2lvbmUgcXVhbHF1ZXIgY29udGXDumRvIG1vZGlmaWNhZG8gYW8gw61uZGljZS4gRmluYWxtZW50ZSwgZ3JhdmUgc3VhcworbXVkYW7Dp2FzIGNvbToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbyBleGVjdXRhciBlc3NlIGNvbWFuZG8sIGVsZSBpcsOhIHRlIHBlZGlyIHVtYSBtZW5zYWdlbSBkZXNjcmV2ZW5kbyBhIG11ZGFuw6dhLAorZSwgZW50w6NvLCBpcsOhIGdyYXZhciBhIG5vdmEgdmVyc8OjbyBkbyBwcm9qZXRvLgorCitBbHRlcm5hdGl2YW1lbnRlLCBhbyBpbnbDqXMgZGUgZXhlY3V0YXIgJ2dpdC1hZGQnIGFudGVzLCB2b2PDqiBwb2RlIHVzYXIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvIHF1ZSBpcsOhIGF1dG9tYXRpY2FtZW50ZSBub3RhciBxdWFpc3F1ZXIgYXJxdWl2b3MgbW9kaWZpY2Fkb3MgKG1hcyBuw6NvCitub3ZvcyksIGFkaWNpb27DoS1sb3MgYW8gw61uZGljZXMsIGUgZ3JhdmFyLCB0dWRvIGVtIHVtIMO6bmljbyBwYXNzby4KKworVW1hIG5vdGEgZW0gbWVuc2FnZW5zIGRlIGNvbW1pdDogQXBlc2FyIGRlIG7Do28gc2VyIGV4aWdpZG8sIMOpIHVtYSBib2EKK2lkw6lpYSBjb21lw6dhciBhIG1lbnNhZ2VtIGNvbSB1bWEgc2ltcGxlcyBlIGN1cnRhIChtZW5vcyBkZSA1MAorY2FyYWN0ZXJlcykgbGluaGEgc3VtYXJpemFuZG8gYSBtdWRhbsOnYSwgc2VndWlkYSBkZSB1bWEgbGluaGEgZW0gYnJhbmNvCitlLCBlbnTDo28sIHVtYSBkZXNjcmnDp8OjbyBtYWlzIGRldGFsaGFkYS4gRmVycmFtZW50YXMgcXVlIHRyYW5zZm9ybWFtCitjb21taXRzIGVtIGVtYWlsLCBwb3IgZXhlbXBsbywgdXNhbSBhIHByaW1laXJhIGxpbmhhIG5vIGNhbXBvIGRlCitjYWJlw6dhbGhvICJTdWJqZWN0OiIgZSBvIHJlc3RvIG5vIGNvcnBvLgorCitHaXQgcmFzdHJlaWEgY29udGXDumRvLCBuw6NvIGFycXVpdm9zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK011aXRvcyBzaXN0ZW1hcyBkZSBjb250cm9sZSBkZSByZXZpc8OjbyBwcm92w6plbSB1bSBjb21hbmRvIGBhZGRgIHF1ZSBkaXoKK2FvIHNpc3RlbWEgcGFyYSBjb21lw6dhciBhIHJhc3RyZWFyIG11ZGFuw6dhcyBlbSB1bSBub3ZvIGFycXVpdm8uIE8KK2NvbWFuZG8gYGFkZGAgZG8gZ2l0IGZheiBhbGdvIG1haXMgc2ltcGxlcyBlIG1haXMgcG9kZXJvc286ICdnaXQtYWRkJyDDqQordXNhZG8gdGFudG8gcGFyYSBhcnF1aXZvcyBub3ZvcyBlIGFycXVpdm9zIHJlY2VudGVtZW50ZSBtb2RpZmljYWRvcywgZQorZW0gYW1ib3Mgb3MgY2Fzb3MsIGVsZSB0aXJhIG8gaW5zdGFudMOibmVvIGRvcyBhcnF1aXZvcyBkYWRvcyBlIGFybWF6ZW5hCitvIGNvbnRlw7pkbyBubyDDrW5kaWNlLCBwcm9udG8gcGFyYSBpbmNsdXPDo28gZG8gcHLDs3hpbW8gY29tbWl0LgorCitWaXN1YWxpemFuZG8gYSBoaXN0w7NyaWEgZG8gcHJvamV0bworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRW0gcXVhbHF1ZXIgcG9udG8gdm9jw6ogcG9kZSB2aXN1YWxpemFyIGEgaGlzdMOzcmlhIGRhcyBzdWFzIG11ZGFuw6dhcwordXNhbmRvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2Ugdm9jw6ogdGFtYsOpbSBxdWlzZXIgdmVyIGEgZGlmZXJlbsOnYSBjb21wbGV0YSBhIGNhZGEgcGFzc28sIHVzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dlcmFsbWVudGUsIHVtYSB2aXPDo28gZ2VyYWwgZGEgbXVkYW7Dp2Egw6kgw7p0aWwgcGFyYSB0ZXIgYSBzZW5zYcOnw6NvIGRlCitjYWRhIHBhc3NvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tc3RhdCAtLXN1bW1hcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHZXJlbmNpYW5kbyAiYnJhbmNoZXMiL3JhbW9zCistLS0tLS0tLS0tLS0tLS0tLQorCitVbSBzaW1wbGVzIHJlcG9zaXTDs3JpbyBnaXQgcG9kZSBtYW50ZXIgbcO6bHRpcGxvcyByYW1vcyBkZQorZGVzZW52b2x2aW1lbnRvLiBQYXJhIGNyaWFyIHVtIG5vdm8gcmFtbyBjaGFtYWRvICJleHBlcmltZW50YWwiLCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggZXhwZXJpbWVudGFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2Ugdm9jw6ogZXhlY3V0YXIgYWdvcmEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2PDqiB2YWkgb2J0ZXIgdW1hIGxpc3RhIGRlIHRvZG9zIG9zIHJhbW9zIGV4aXN0ZW50ZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBleHBlcmltZW50YWwKKyogbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTyByYW1vICJleHBlcmltZW50YWwiIMOpIG8gcXVlIHZvY8OqIGFjYWJhIGRlIGNyaWFyLCBlIG8gcmFtbyAibWFzdGVyIiDDqSBvCityYW1vIHBhZHLDo28gcXVlIGZvaSBjcmlhZG8gcHJhIHZvY8OqIGF1dG9tYXRpY2FtZW50ZS4gTyBhc3RlcmlzY28gbWFyY2EKK28gcmFtbyBlbSBxdWUgdm9jw6ogZXN0w6EgYXR1YWxtZW50ZTsgZGlnaXRlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgZXhwZXJpbWVudGFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcGFyYSBtdWRhciBwYXJhIG8gcmFtbyBleHBlcmltZW50YWwuIEFnb3JhIGVkaXRlIHVtIGFycXVpdm8sIGdyYXZlIGEKK211ZGFuw6dhLCBlIG11ZGUgZGUgdm9sdGEgcGFyYSBvIHJhbW8gbWFzdGVyOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhlZGl0YSBhcnF1aXZvKQorJCBnaXQgY29tbWl0IC1hCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWZXJpZmlxdWUgcXVlIGEgbXVkYW7Dp2EgcXVlIHZvY8OqIGZleiBuw6NvIGVzdMOhIG1haXMgdmlzw612ZWwsIGrDoSBxdWUgZWxhCitmb2kgZmVpdGEgbm8gcmFtbyBleHBlcmltZW50YWwgZSB2b2PDqiBlc3TDoSBkZSB2b2x0YSBhbyByYW1vIG1hc3Rlci4KKworVm9jw6ogcG9kZSBmYXplciB1bWEgbXVkYW7Dp2EgZGlmZXJlbnRlIG5vIHJhbW8gbWFzdGVyOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhlZGl0IGZpbGUpCiskIGdpdCBjb21taXQgLWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCituZXN0ZSBwb250bywgb3MgZG9pcyByYW1vcyBkaXZlcmdpcmFtLCBjb20gZGlmZXJlbnRlcyBtdWRhbsOnYXMgZmVpdGFzIGVtCitjYWRhIHVtLiBQYXJhIHVuaWZpY2FyIGFzIG11ZGFuw6dhcyBmZWl0YXMgbm8gZXhwZXJpbWVudGFsIHBhcmEgbworbWFzdGVyLCBleGVjdXRlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgZXhwZXJpbWVudGFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2UgYXMgbXVkYW7Dp2FzIG7Do28gY29uZmxpdGFyZW0sIGVzdGFyw6EgcHJvbnRvLiBTZSBleGlzdGlyZW0gY29uZmxpdG9zLAorbWFyY2Fkb3JlcyBzZXLDo28gZGVpeGFkb3Mgbm9zIGFycXVpdm9zIHByb2JsZW3DoXRpY29zIGV4aWJpbmRvIG8KK2NvbmZsaXRvOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YWkgZXhpYmlyIGlzdG8uIEFww7NzIHZvY8OqIGVkaXRhciBvcyBhcnF1aXZvcyBwYXJhIHJlc29sdmVyIG9zCitjb25mbGl0b3MsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1hCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaXLDoSBncmF2YXIgbyByZXN1bHRhZG8gZGEgdW5pZmljYcOnw6NvLiBGaW5hbG1lbnRlLAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0aworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhaSBtb3N0cmFyIHVtYSBiZWxhIHJlcHJlc2VudGHDp8OjbyBncsOhZmljYSBkYSBoaXN0w7NyaWEgcmVzdWx0YW50ZS4KKworTmVzdGUgcG9udG8gdm9jw6ogcG9kZSByZW1vdmVyIHNldSByYW1vIGV4cGVyaW1lbnRhbCBjb20KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLWQgZXhwZXJpbWVudGFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXN0ZSBjb21hbmRvIGdhcmFudGUgcXVlIGFzIG11ZGFuw6dhcyBubyByYW1vIGV4cGVyaW1lbnRhbCBqw6EgZXN0w6NvIG5vCityYW1vIGF0dWFsLgorCitTZSB2b2PDqiBkZXNlbnZvbHZlIGVtIHVtIHJhbW8gaWRlaWEtbG91Y2EsIGUgc2UgYXJyZXBlbmRlLCB2b2PDqiBwb2RlCitzZW1wcmUgcmVtb3ZlciBvIHJhbW8gY29tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCAtRCBpZGVpYS1sb3VjYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSYW1vcyBzw6NvIGJhcmF0b3MgZSBmw6FjZWlzLCBlbnTDo28gaXN0byDDqSB1bWEgYm9hIG1hbmVpcmEgZGUgZXhwZXJpbWVudGFyCithbGd1bWEgY29pc2EuCisKK1VzYW5kbyBnaXQgcGFyYSBjb2xhYm9yYcOnw6NvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3Vwb25oYSBxdWUgQWxpY2UgY29tZcOnb3UgdW0gbm92byBwcm9qZXRvIGNvbSB1bSByZXBvc2l0w7NyaW8gZ2l0IGVtCisvaG9tZS9hbGljZS9wcm9qZWN0LCBlIHF1ZSBCb2IsIHF1ZSB0ZW0gdW0gZGlyZXTDs3JpbyBob21lIG5hIG1lc21hCittw6FxdWluYSwgcXVlciBjb250cmlidWlyLgorCitCb2IgY29tZcOnYSBjb206CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9iJCBnaXQgY2xvbmUgL2hvbWUvYWxpY2UvcHJvamVjdCBteXJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJc3NvIGNyaWEgdW0gbm92byBkaXJldMOzcmlvICJteXJlcG8iIGNvbnRlbmRvIHVtIGNsb25lIGRvIHJlcG9zaXTDs3JpbyBkZQorQWxpY2UuIE8gY2xvbmUgZXN0w6Egbm8gbWVzbW8gcMOpIHF1ZSBvIHByb2pldG8gb3JpZ2luYWwsIHBvc3N1aW5kbyBzdWEKK3Byw7NwcmlhIGPDs3BpYSBkYSBoaXN0w7NyaWEgZG8gcHJvamV0byBvcmlnaW5hbC4KKworQm9iIGVudMOjbyBmYXogYWxndW1hcyBtdWRhbsOnYXMgZSBhcyBncmF2YToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoZWRpdGFyIGFycXVpdm9zKQorYm9iJCBnaXQgY29tbWl0IC1hCisocmVwZXRpciBjb25mb3JtZSBuZWNlc3PDoXJpbykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitRdWFudG8gZXN0w6EgcHJvbnRvLCBlbGUgZGl6IGEgQWxpY2UgcGFyYSBwdXhhciBhcyBtdWRhbsOnYXMgZG8KK3JlcG9zaXTDs3JpbyBlbSAvaG9tZS9ib2IvbXlyZXBvLiBFbGEgbyBmYXogY29tOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBjZCAvaG9tZS9hbGljZS9wcm9qZWN0CithbGljZSQgZ2l0IHB1bGwgL2hvbWUvYm9iL215cmVwbyBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJc3RvIHVuaWZpY2EgYXMgbXVkYW7Dp2FzIGRvIHJhbW8gIm1hc3RlciIgZG8gQm9iIGFvIHJhbW8gYXR1YWwgZGUgQWxpY2UuCitTZSBBbGljZSBmZXogc3VhcyBwcsOzcHJpYXMgbXVkYW7Dp2FzIG5vIGludGVydmFsbywgZWxhLCBlbnTDo28sIHBvZGUKK3ByZWNpc2FyIGNvcnJpZ2lyIG1hbnVhbG1lbnRlIHF1YWlzcXVlciBjb25mbGl0b3MuIChOb3RlIHF1ZSBvIGFyZ3VtZW50bworIm1hc3RlciIgbm8gY29tYW5kbyBhY2ltYSDDqSwgZGUgZmF0bywgZGVzbmVjZXNzw6FyaW8sIGrDoSBxdWUgw6kgbyBwYWRyw6NvLikKKworTyBjb21hbmRvICJwdWxsIiBleGVjdXRhLCBlbnTDo28sIGR1YXMgb3BlcmHDp8O1ZXM6IGVsZSBvYnTDqW0gbXVkYW7Dp2FzIGRlCit1bSByYW1vIHJlbW90bywgZSwgZW50w6NvLCBhcyB1bmlmaWNhIG5vIHJhbW8gYXR1YWwuCisKK05vdGUgcXVlLCBlbSBnZXJhbCwgQWxpY2UgZ29zdGFyaWEgcXVlIHN1YXMgbXVkYW7Dp2FzIGxvY2FpcyBmb3NzZW0KK2dyYXZhZGFzIGFudGVzIGRlIGluaWNpYXIgZXN0ZSAicHVsbCIuIFNlIG8gdHJhYmFsaG8gZGUgQm9iIGNvbmZsaXRhCitjb20gbyBxdWUgQWxpY2UgZmV6IGRlc2RlIHF1ZSBzdWFzIGhpc3TDs3JpYXMgc2UgcmFtaWZpY2FyYW0sIEFsaWNlIGlyw6EKK3VzYXIgc2V1IGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8gZSBvIMOtbmRpY2UgcGFyYSByZXNvbHZlciBjb25mbGl0b3MsIGUKK211ZGFuw6dhcyBsb2NhaXMgZXhpc3RlbnRlcyBpcsOjbyBpbnRlcmZlcmlyIGNvbSBvIHByb2Nlc3NvIGRlIHJlc29sdcOnw6NvCitkZSBjb25mbGl0b3MgKGdpdCBhaW5kYSBpcsOhIHJlYWxpemFyIGEgb2J0ZW7Dp8OjbyBtYXMgaXLDoSBzZSByZWN1c2FyIGEKK3VuaWZpY2FyIC0tLSBBbGljZSB0ZXLDoSBxdWUgc2UgbGl2cmFyIGRlIHN1YXMgbXVkYW7Dp2FzIGxvY2FpcyBkZSBhbGd1bWEKK2Zvcm1hIGUgcHV4YXIgZGUgbm92byBxdWFuZG8gaXNzbyBhY29udGVjZXIpLgorCitBbGljZSBwb2RlIGVzcGlhciBvIHF1ZSBCb2IgZmV6IHNlbSB1bmlmaWNhciBwcmltZWlybywgdXNhbmRvIG8gY29tYW5kbworImZldGNoIjsgaXN0byBwZXJtaXRlIEFsaWNlIGluc3BlY2lvbmFyIG8gcXVlIEJvYiBmZXosIHVzYW5kbyB1bSBzw61tYm9sbworZXNwZWNpYWwgIkZFVENIX0hFQUQiLCBjb20gbyBmaW0gZGUgZGV0ZXJtaW5hciBzZSBlbGUgdGVtIGFsZ3VtYSBjb2lzYQorcXVlIHZhbGUgcHV4YXIsIGFzc2ltOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgZmV0Y2ggL2hvbWUvYm9iL215cmVwbyBtYXN0ZXIKK2FsaWNlJCBnaXQgbG9nIC1wIEhFQUQuLkZFVENIX0hFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFc3RhIG9wZXJhw6fDo28gw6kgc2VndXJhIG1lc21vIHNlIEFsaWNlIHRlbSBtdWRhbsOnYXMgbG9jYWlzIG7Do28gZ3JhdmFkYXMuCitBIG5vdGHDp8OjbyBkZSBpbnRlcnZhbG8gIkhFQUQuLkZFVENIX0hFQUQiIHNpZ25pZmljYSBtb3N0cmFyIHR1ZG8gcXVlIMOpCithbGNhbsOnw6F2ZWwgZGUgRkVUQ0hfSEVBRCBtYXMgZXhjbHVhIHR1ZG8gbyBxdWUgw6kgYWxjYW7Dp8OhdmVsIGRlIEhFQUQuCitBbGljZSBqw6Egc2FiZSB0dWRvIHF1ZSBsZXZhIGEgc2V1IGVzdGFkbyBhdHVhbCAoSEVBRCksIGUgcmV2aXNhIG8gcXVlIEJvYgordGVtIGVtIHNldSBlc3RhZG8gKEZFVENIX0hFQUQpIHF1ZSBlbGEgYWluZGEgbsOjbyB2aXUgY29tIGVzc2UgY29tYW5kby4KKworU2UgQWxpY2UgcXVlciB2aXN1YWxpemFyIG8gcXVlIEJvYiBmZXogZGVzZGUgcXVlIHN1YXMgaGlzdMOzcmlhcyBzZQorcmFtaWZpY2FyYW0sIGVsYSBwb2RlIGRpc3BhcmFyIG8gc2VndWludGUgY29tYW5kbzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgSEVBRC4uRkVUQ0hfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lzdG8gdXNhIGEgbWVzbWEgbm90YcOnw6NvIGRlIGludGVydmFsbyBxdWUgdmltb3MgYW50ZXMgY29tICdnaXQgbG9nJy4KKworQWxpY2UgcG9kZSBxdWVyZXIgdmVyIG8gcXVlIGFtYm9zIGZpemVyYW0gZGVzZGUgcXVlIHJhbWlmaWNhcmFtLiBFbGEKK3BvZGUgdXNhciBhIGZvcm1hIGNvbSB0csOqcyBwb250b3MgYW8gaW52w6lzIGRhIGZvcm1hIGNvbSBkb2lzIHBvbnRvczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgSEVBRC4uLkZFVENIX0hFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJc3RvIHNpZ25pZmljYSAibW9zdHJlIHR1ZG8gcXVlIMOpIGFsY2Fuw6fDoXZlbCBkZSBxdWFscXVlciB1bSBkZWxlcywgbWFzCitleGNsdWEgdHVkbyBxdWUgw6kgYWxjYW7Dp8OhdmVsIGEgcGFydGlyIGRlIGFtYm9zIi4KKworUG9yIGZhdm9yLCBub3RlIHF1ZSBlc3NhcyBub3Rhw6fDtWVzIGRlIGludGVydmFsbyBwb2RlbSBzZXIgdXNhZGFzIHRhbnRvCitjb20gZ2l0ayBxdWFudG8gY29tICJnaXQgbG9nIi4KKworQXDDs3MgaW5zcGVjaW9uYXIgbyBxdWUgQm9iIGZleiwgc2UgbsOjbyBow6EgbmFkYSB1cmdlbnRlLCBBbGljZSBwb2RlCitkZWNpZGlyIGNvbnRpbnVhciB0cmFiYWxoYW5kbyBzZW0gcHV4YXIgZGUgQm9iLiBTZSBhIGhpc3TDs3JpYSBkZSBCb2IKK3RlbSBhbGd1bWEgY29pc2EgcXVlIEFsaWNlIHByZWNpc2EgaW1lZGlhdGFtZW50ZSwgQWxpY2UgcG9kZSBvcHRhciBwb3IKK3NlcGFyYXIgc2V1IHRyYWJhbGhvIGVtIHByb2dyZXNzbyBwcmltZWlybywgZmF6ZXIgdW0gInB1bGwiLCBlLCBlbnTDo28sCitmaW5hbG1lbnRlLCByZXRvbWFyIHNldSB0cmFiYWxobyBlbSBwcm9ncmVzc28gZW0gY2ltYSBkYSBoaXN0w7NyaWEKK3Jlc3VsdGFudGUuCisKK1F1YW5kbyB2b2PDqiBlc3TDoSB0cmFiYWxoYW5kbyBlbSB1bSBwZXF1ZW5vIGdydXBvIHVuaWRvLCBuw6NvIMOpIGluY29tdW0KK2ludGVyYWdpciBjb20gbyBtZXNtbyByZXBvc2l0w7NyaW8gdsOhcmlhcyBlIHbDoXJpYXMgdmV6ZXMuIERlZmluaW5kbyB1bQorcmVwb3NpdMOzcmlvIHJlbW90byBhbnRlcyBkZSB0dWRvLCB2b2PDqiBwb2RlIGZhesOqLWxvIG1haXMgZmFjaWxtZW50ZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgZ2l0IHJlbW90ZSBhZGQgYm9iIC9ob21lL2JvYi9teXJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb20gaXNzbywgQWxpY2UgcG9kZSBleGVjdXRhciBhIHByaW1laXJhIHBhcnRlIGRhIG9wZXJhw6fDo28gInB1bGwiIHVzYW5kbworbyBjb21hbmRvICdnaXQtZmV0Y2gnIHNlbSB1bmlmaWNhciBzdWFzIG11ZGFuw6dhcyBjb20gc2V1IHByw7NwcmlvIHJhbW8sCit1c2FuZG86CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgZmV0Y2ggYm9iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RpZmVyZW50ZSBkYSBmb3JtYSBsb25nYSwgcXVhbmRvIEFsaWNlIG9idGV2ZSBkZSBCb2IgdXNhbmRvIHVtCityZXBvc2l0w7NyaW8gcmVtb3RvIGFudGVzIGRlZmluaWRvIGNvbSAnZ2l0LXJlbW90ZScsIG8gcXVlIGZvaSBvYnRpZG8gw6kKK2FybWF6ZW5hZG8gZW0gdW0gcmFtbyByZW1vdG8sIG5lc3RlIGNhc28gYGJvYi9tYXN0ZXJgLiBFbnTDo28sIGFww7NzIGlzc286CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgbG9nIC1wIG1hc3Rlci4uYm9iL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb3N0cmEgdW1hIGxpc3RhIGRlIHRvZGFzIGFzIG11ZGFuw6dhcyBxdWUgQm9iIGZleiBkZXNkZSBxdWUgcmFtaWZpY291IGRvCityYW1vIG1hc3RlciBkZSBBbGljZS4KKworQXDDs3MgZXhhbWluYXIgZXNzYXMgbXVkYW7Dp2FzLCBBbGljZSBwb2RlIHVuaWZpY8OhLWxhcyBlbSBzZXUgcmFtbyBtYXN0ZXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgbWVyZ2UgYm9iL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFc3NlIGBtZXJnZWAgcG9kZSB0YW1iw6ltIHNlciBmZWl0byBwdXhhbmRvIGRlIHNldSBwcsOzcHJpbyByYW1vIHJlbW90bywKK2Fzc2ltOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgZ2l0IHB1bGwgLiByZW1vdGVzL2JvYi9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSBxdWUgJ2dpdCBwdWxsJyBzZW1wcmUgdW5pZmljYSBhbyByYW1vIGF0dWFsLCBpbmRlcGVuZGVudGUgZG8gcXVlCittYWlzIGZvaSBwYXNzYWRvIG5hIGxpbmhhIGRlIGNvbWFuZG8uCisKK0RlcG9pcywgQm9iIHBvZGUgYXR1YWxpemFyIHNldSByZXBvc2l0w7NyaW8gY29tIGFzIMO6bHRpbWFzIG11ZGFuw6dhcyBkZQorQWxpY2UsIHVzYW5kbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBwdWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgcXVlIGVsZSBuw6NvIHByZWNpc2EgZGFyIG8gY2FtaW5obyBkbyByZXBvc2l0w7NyaW8gZGUgQWxpY2U7IHF1YW5kbworQm9iIGNsb25vdSBzZXUgcmVwb3NpdMOzcmlvLCBvIGdpdCBhcm1hemVub3UgYSBsb2NhbGl6YcOnw6NvIGRlIHNldQorcmVwb3NpdMOzcmlvIG5hIGNvbmZpZ3VyYcOnw6NvIGRvIG1lc21vLCBlIGVzc2EgbG9jYWxpemHDp8OjbyDDqSB1c2FkYQorcGFyYSBwdXhhcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9iJCBnaXQgY29uZmlnIC0tZ2V0IHJlbW90ZS5vcmlnaW4udXJsCisvaG9tZS9hbGljZS9wcm9qZWN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhBIGNvbmZpZ3VyYcOnw6NvIGNvbXBsZXRhIGNyaWFkYSBwb3IgJ2dpdC1jbG9uZScgw6kgdmlzw612ZWwgdXNhbmRvIGBnaXQKK2NvbmZpZyAtbGAsIGUgYSBww6FnaW5hIGRlIG1hbnVhbCBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZXhwbGljYSBvCitzaWduaWZpY2FkbyBkZSBjYWRhIG9ww6fDo28uKQorCitHaXQgdGFtYsOpbSBtYW50w6ltIHVtYSBjw7NwaWEgbGltcGEgZG8gcmFtbyBtYXN0ZXIgZGUgQWxpY2Ugc29iIG8gbm9tZQorIm9yaWdpbi9tYXN0ZXIiOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBicmFuY2ggLXIKKyAgb3JpZ2luL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZSBCb2IgZGVjaWRpciBkZXBvaXMgZW0gdHJhYmFsaGFyIGVtIHVtIGhvc3QgZGlmZXJlbnRlLCBlbGUgYWluZGEgcG9kZQorZXhlY3V0YXIgY2xvbmVzIGUgcHV4YXIgdXNhbmRvIG8gcHJvdG9jb2xvIHNzaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9iJCBnaXQgY2xvbmUgYWxpY2Uub3JnOi9ob21lL2FsaWNlL3Byb2plY3QgbXlyZXBvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsdGVybmF0aXZhbWVudGUsIG8gZ2l0IHRlbSB1bSBwcm90b2NvbG8gbmF0aXZvLCBvdSBwb2RlIHVzYXIgcnN5bmMgb3UKK2h0dHA7IHZlamEgbGlua2dpdDpnaXQtcHVsbFsxXSBwYXJhIGRldGFsaGVzLgorCitHaXQgcG9kZSB0YW1iw6ltIHNlciB1c2FkbyBlbSB1bSBtb2RvIHBhcmVjaWRvIGNvbSBDVlMsIGNvbSB1bQorcmVwb3NpdMOzcmlvIGNlbnRyYWwgcGFyYSBvIHF1YWwgdsOhcmlvcyB1c3XDoXJpb3MgZW1wdXJyYW0gbW9kaWZpY2HDp8O1ZXM7Cit2ZWphIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gZSBsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10uCisKK0V4cGxvcmFuZG8gaGlzdMOzcmlhCistLS0tLS0tLS0tLS0tLS0tLQorCitBIGhpc3TDs3JpYSBubyBnaXQgw6kgcmVwcmVzZW50YWRhIGNvbW8gdW1hIHPDqXJpZSBkZSBjb21taXRzCitpbnRlcnJlbGFjaW9uYWRvcy4gTsOzcyBqw6Egdmltb3MgcXVlIG8gY29tYW5kbyAnZ2l0LWxvZycgcG9kZSBsaXN0YXIKK2Vzc2VzIGNvbW1pdHMuIE5vdGUgcXVlIGEgcHJpbWVpcmEgbGluaGEgZGUgY2FkYSBlbnRyYWRhIG5vIGxvZyB0YW1iw6ltCitkw6EgbyBub21lIHBhcmEgbyBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZworY29tbWl0IGM4MmEyMmMzOWNiYzMyNTc2ZjY0ZjVjNmIzZjI0Yjk5ZWE4MTQ5YzcKK0F1dGhvcjogSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorRGF0ZTogICBUdWUgTWF5IDE2IDE3OjE4OjIyIDIwMDYgLTA3MDAKKworICAgIG1lcmdlLWJhc2U6IENsYXJpZnkgdGhlIGNvbW1lbnRzIG9uIHBvc3QgcHJvY2Vzc2luZy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTsOzcyBwb2RlbW9zIGRhciBlc3RlIG5vbWUgYW8gJ2dpdC1zaG93JyBwYXJhIHZlciBvcyBkZXRhbGhlcyBzb2JyZSBlc3RlCitjb21taXQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgYzgyYTIyYzM5Y2JjMzI1NzZmNjRmNWM2YjNmMjRiOTllYTgxNDljNworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYXMgaMOhIG91dHJhcyBmb3JtYXMgZGUgc2UgcmVmZXJpciBhb3MgY29tbWl0cy4gVm9jw6ogcG9kZSB1c2FyIHF1YWxxdWVyCitwYXJ0ZSBpbmljaWFsIGRvIG5vbWUgcXVlIHNlamEgbG9uZ28gbyBiYXN0YW50ZSBwYXJhIGlkZW50aWZpY2FyCit1bmljYW1lbnRlIG8gY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IGM4MmEyMmMzOWMJIyBvcyBwcmltZWlyb3MgY2FyYWN0ZXJlcyBkbyBub21lIHPDo28gbyBiYXN0YW50ZQorCQkJIyB1c3VhbG1lbnRlCiskIGdpdCBzaG93IEhFQUQJCSMgYSBwb250YSBkbyByYW1vIGF0dWFsCiskIGdpdCBzaG93IGV4cGVyaW1lbnRhbAkjIGEgcG9udGEgZG8gcmFtbyAiZXhwZXJpbWVudGFsIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUb2RvIGNvbW1pdCBub3JtYWxtZW50ZSB0ZW0gdW0gY29tbWl0ICJwYWkiIHF1ZSBhcG9udGEgcGFyYSBvIGVzdGFkbworYW50ZXJpb3IgZG8gcHJvamV0bzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyBIRUFEXiAgIyBwYXJhIHZlciBvIHBhaSBkZSBIRUFECiskIGdpdCBzaG93IEhFQUReXiAjIHBhcmEgdmVyIG8gYXbDtCBkZSBIRUFECiskIGdpdCBzaG93IEhFQUR+NCAjIHBhcmEgdmVyIG8gdHJpc2F2w7QgZGUgSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHF1ZSBjb21taXRzIGRlIHVuaWZpY2HDp8OjbyBwb2RlbSB0ZXIgbWFpcyBkZSB1bSBwYWk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgSEVBRF4xICMgbW9zdHJhIG8gcHJpbWVpcm8gcGFpIGRlIEhFQUQgKG8gbWVzbW8gcXVlIEhFQUReKQorJCBnaXQgc2hvdyBIRUFEXjIgIyBtb3N0cmEgbyBzZWd1bmRvIHBhaSBkZSBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZvY8OqIHRhbWLDqW0gcG9kZSBkYXIgYW9zIGNvbW1pdHMgbm9tZXMgw6Agc3VhIGVzY29saGE7IGFww7NzIGV4ZWN1dGFyCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHRhZyB2Mi41IDFiMmUxZDYzZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9jw6ogcG9kZSBzZSByZWZlcmlyIGEgMWIyZTFkNjNmZiBwZWxvIG5vbWUgInYyLjUiLiBTZSB2b2PDqiBwcmV0ZW5kZQorY29tcGFydGlsaGFyIGVzc2Ugbm9tZSBjb20gb3V0cmFzIHBlc3NvYXMgKHBvciBleGVtcGxvLCBwYXJhIGlkZW50aWZpY2FyCit1bWEgdmVyc8OjbyBkZSBsYW7Dp2FtZW50byksIHZvY8OqIGRldmVyaWEgY3JpYXIgdW0gb2JqZXRvICJ0YWciLCBlIHRhbHZlegorYXNzaW7DoS1sbzsgdmVqYSBsaW5rZ2l0OmdpdC10YWdbMV0gcGFyYSBkZXRhbGhlcy4KKworUXVhbHF1ZXIgY29tYW5kbyBnaXQgcXVlIHByZWNpc2UgY29uaGVjZXIgdW0gY29tbWl0IHBvZGUgcmVjZWJlcgorcXVhaXNxdWVyIGRlc3NlcyBub21lcy4gUG9yIGV4ZW1wbG86CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgdjIuNSBIRUFECSAjIGNvbXBhcmEgbyBIRUFEIGF0dWFsIGNvbSB2Mi41CiskIGdpdCBicmFuY2ggc3RhYmxlIHYyLjUgIyBpbmljaWEgdW0gbm92byByYW1vIGNoYW1hZG8gInN0YWJsZSIgYmFzZWFkbworCQkJICMgZW0gdjIuNQorJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReICMgcmVzZXRhIHNldSByYW1vIGF0dWFsIGUgc2V1IGRpcmV0w7NyaW8gZGUKKwkJCSAjIHRyYWJhbGhvIGEgc2V1IGVzdGFkbyBlbSBIRUFEXgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWphIGN1aWRhZG9zbyBjb20gbyDDumx0aW1vIGNvbWFuZG86IGFsw6ltIGRlIHBlcmRlciBxdWFpc3F1ZXIgbXVkYW7Dp2FzCitlbSBzZXUgZGlyZXTDs3JpbyBkZSB0cmFiYWxobywgZWxlIHRhbWLDqW0gcmVtb3ZlIHRvZG9zIG9zIGNvbW1pdHMKK3Bvc3RlcmlvcmVzIGRlc3NlIHJhbW8uIFNlIGVzc2UgcmFtbyDDqSBvIMO6bmljbyByYW1vIGNvbnRlbmRvIGVzc2VzCitjb21taXRzLCBlbGVzIHNlcsOjbyBwZXJkaWRvcy4gVGFtYsOpbSwgbsOjbyB1c2UgJ2dpdC1yZXNldCcgbnVtIHJhbW8KK3B1YmxpY2FtZW50ZSB2aXPDrXZlbCBkZSBvbmRlIG91dHJvcyBkZXNlbnZvbHZlZG9yZXMgcHV4YW0sIGrDoSBxdWUgdmFpCitmb3LDp2FyIHVuaWZpY2HDp8O1ZXMgZGVzbmVjZXNzw6FyaWFzIHBhcmEgcXVlIG91dHJvcyBkZXNlbnZvbHZlZG9yZXMgbGltcGVtCithIGhpc3TDs3JpYS4gU2Ugdm9jw6ogcHJlY2lzYSBkZXNmYXplciBtdWRhbsOnYXMgcXVlIHZvY8OqIGVtcHVycm91LCB1c2UKKydnaXQtcmV2ZXJ0JyBubyBsdWdhci4KKworTyBjb21hbmRvICdnaXQtZ3JlcCcgcG9kZSBidXNjYXIgc3RyaW5ncyBlbSBxdWFscXVlciB2ZXJzw6NvIGRlIHNldQorcHJvamV0bywgZW50w6NvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGdyZXAgImhlbGxvIiB2Mi41CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Byb2N1cmEgcG9yIHRvZGFzIGFzIG9jb3Jyw6puY2lhcyBkZSAiaGVsbG8iIGVtIHYyLjUuCisKK1NlIHZvY8OqIGRlaXhhciBkZSBmb3JhIG8gbm9tZSBkbyBjb21taXQsICdnaXQtZ3JlcCcgaXLDoSBwcm9jdXJhcgorcXVhaXNxdWVyIGRvcyBhcnF1aXZvcyBxdWUgZWxlIGdlcmVuY2lhIG5vIGRpcmV0w7NyaW8gY29ycmVudGUuIEVudMOjbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBncmVwICJoZWxsbyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworw6kgdW1hIGZvcm1hIHLDoXBpZGEgZGUgYnVzY2FyIHNvbWVudGUgb3MgYXJxdWl2b3MgcXVlIHPDo28gcmFzdHJlYWRvcyBwZWxvCitnaXQuCisKK011aXRvcyBjb21hbmRvcyBnaXQgdGFtYsOpbSByZWNlYmVtIHVtIGNvbmp1bnRvIGRlIGNvbW1pdHMsIG8gcXVlIHBvZGUKK3NlciBlc3BlY2lmaWNhZG8gZGUgdsOhcmlhcyBmb3JtYXMuIEFxdWkgZXN0w6NvIGFsZ3VucyBleGVtcGxvcyBjb20gJ2dpdC1sb2cnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgdjIuNS4udjIuNiAgICAgICAgICAgICMgY29tbWl0cyBlbnRyZSB2Mi41IGUgdjIuNgorJCBnaXQgbG9nIHYyLjUuLiAgICAgICAgICAgICAgICAjIGNvbW1pdHMgZGVzZGUgdjIuNQorJCBnaXQgbG9nIC0tc2luY2U9IjIgd2Vla3MgYWdvIiAjIGNvbW1pdHMgZGFzIMO6bHRpbWFzIDIgc2VtYW5hcworJCBnaXQgbG9nIHYyLjUuLiBNYWtlZmlsZSAgICAgICAjIGNvbW1pdHMgZGVzZGUgdjIuNSBxdWUgbW9kaWZpY2FtCisJCQkJIyBNYWtlZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWb2PDqiB0YW1iw6ltIHBvZGUgZGFyIGFvICdnaXQtbG9nJyB1bSAiaW50ZXJ2YWxvIiBkZSBjb21taXRzIG9uZGUgbworcHJpbWVpcm8gbsOjbyDDqSBuZWNlc3NhcmlhbWVudGUgdW0gYW5jZXN0cmFsIGRvIHNlZ3VuZG87IHBvciBleGVtcGxvLCBzZQorYXMgcG9udGFzIGRvcyByYW1vcyAic3RhYmxlIiBlICJtYXN0ZXIiIGRpdmVyZ2lyYW0gZGUgdW0gY29tbWl0Citjb211bSBhbGd1bSB0ZW1wbyBhdHLDoXMsIGVudMOjbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgc3RhYmxlLi5tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaXLDoSBsaXN0YXIgb3MgY29tbWl0cyBmZWl0b3Mgbm8gcmFtbyAibWFzdGVyIiBtYXMgbsOjbyBubyByYW1vCisic3RhYmxlIiwgZW5xdWFudG8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIG1hc3Rlci4uc3RhYmxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lyw6EgbGlzdGFyIGEgbGlzdGEgZGUgY29tbWl0cyBmZWl0b3Mgbm8gcmFtbyAic3RhYmxlIiBtYXMgbsOjbyBubyByYW1vCisibWFzdGVyIi4KKworTyBjb21hbmRvICdnaXQtbG9nJyB0ZW0gdW1hIGZyYXF1ZXphOiBlbGUgcHJlY2lzYSBtb3N0cmFyIG9zIGNvbW1pdHMgZW0KK3VtYSBsaXN0YS4gUXVhbmRvIGEgaGlzdMOzcmlhIHRlbSBsaW5oYXMgZGUgZGVzZW52b2x2aW1lbnRvIHF1ZQorZGl2ZXJnaXJhbSBlIGVudMOjbyBmb3JhbSB1bmlmaWNhZGFzIG5vdmFtZW50ZSwgYSBvcmRlbSBlbSBxdWUgJ2dpdC1sb2cnCithcHJlc2VudGEgZXNzYXMgbXVkYW7Dp2FzIMOpIGlycmVsZXZhbnRlLgorCitBIG1haW9yaWEgZG9zIHByb2pldG9zIGNvbSBtw7psdGlwbG9zIGNvbnRyaWJ1aWRvcmVzIChjb21vIG8ga2VybmVsCitMaW51eCwgb3UgbyBwcsOzcHJpbyBnaXQpIHRlbSB1bmlmaWNhw6fDtWVzIGZyZXF1ZW50ZXMsIGUgJ2dpdGsnIGZheiB1bQordHJhYmFsaG8gbWVsaG9yIGRlIHZpc3VhbGl6YXIgc3VhIGhpc3TDs3JpYS4gUG9yIGV4ZW1wbG8sCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayAtLXNpbmNlPSIyIHdlZWtzIGFnbyIgZHJpdmVycy8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcGVybWl0ZSBhIHZvY8OqIG5hdmVnYXIgZW0gcXVhaXNxdWVyIGNvbW1pdHMgZGVzZGUgYXMgw7psdGltYXMgZHVhcyBzZW1hbmFzCitkZSBjb21taXRzIHF1ZSBtb2RpZmljYXJhbSBhcnF1aXZvcyBzb2IgbyBkaXJldMOzcmlvICJkcml2ZXJzIi4gKE5vdGE6Cit2b2PDqiBwb2RlIGFqdXN0YXIgYXMgZm9udGVzIGRvIGdpdGsgc2VndXJhbmRvIGEgdGVjbGEgY29udHJvbCBlbnF1YW50bworcHJlc3Npb25hICItIiBvdSAiKyIuKQorCitGaW5hbG1lbnRlLCBhIG1haW9yaWEgZG9zIGNvbWFuZG9zIHF1ZSByZWNlYmVtIG5vbWVzIGRlIGFycXVpdm8gcGVybWl0aXLDo28KK3RhbWLDqW0sIG9wY2lvbmFsbWVudGUsIHByZWNlZGVyIHF1YWxxdWVyIG5vbWUgZGUgYXJxdWl2byBwb3IgdW0KK2NvbW1pdCwgcGFyYSBlc3BlY2lmaWNhciB1bWEgdmVyc8OjbyBwYXJ0aWN1bGFyIGRvIGFycXVpdm86CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgdjIuNTpNYWtlZmlsZSBIRUFEOk1ha2VmaWxlLmluCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZvY8OqIHBvZGUgdXNhciAnZ2l0LXNob3cnIHBhcmEgdmVyIHRhbCBhcnF1aXZvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IHYyLjU6TWFrZWZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHLDs3hpbW9zIHBhc3NvcworLS0tLS0tLS0tLQorCitFc3RlIHR1dG9yaWFsIGRldmUgc2VyIG8gYmFzdGFudGUgcGFyYSBvcGVyYXIgY29udHJvbGUgZGUgcmV2aXPDo28KK2Rpc3RyaWJ1w61kbyBiw6FzaWNvIHBhcmEgc2V1cyBwcm9qZXRvcy4gTm8gZW50YW50bywgcGFyYSBlbnRlbmRlcgorcGxlbmFtZW50ZSBhIHByb2Z1bmRpZGFkZSBlIG8gcG9kZXIgZG8gZ2l0IHZvY8OqIHByZWNpc2EgZW50ZW5kZXIgZHVhcworaWTDqWlhcyBzaW1wbGVzIG5hcyBxdWFpcyBlbGUgc2UgYmFzZWlhOgorCisgICogQSBiYXNlIGRlIG9iamV0b3Mgw6kgdW0gc2lzdGVtYSBiZW0gZWxlZ2FudGUgdXNhZG8gcGFyYSBhcm1hemVuYXIgYQorICAgIGhpc3TDs3JpYSBkZSBzZXUgcHJvamV0by0tYXJxdWl2b3MsIGRpcmV0w7NyaW9zLCBlIGNvbW1pdHMuCisKKyAgKiBPIGFycXVpdm8gZGUgw61uZGljZSDDqSB1bSBjYWNoZSBkbyBlc3RhZG8gZGUgdW1hIMOhcnZvcmUgZGUgZGlyZXTDs3JpbywKKyAgICB1c2FkbyBwYXJhIGNyaWFyIGNvbW1pdHMsIHJlc3RhdXJhciBkaXJldMOzcmlvcyBkZSB0cmFiYWxobywgZQorICAgIGFybWF6ZW5hciBhcyB2w6FyaWFzIMOhcnZvcmVzIGVudm9sdmlkYXMgZW0gdW1hIHVuaWZpY2HDp8Ojby4KKworQSBwYXJ0ZSBkb2lzIGRlc3RlIHR1dG9yaWFsIGV4cGxpY2EgYSBiYXNlIGRlIG9iamV0b3MsIG8gYXJxdWl2byBkZQorw61uZGljZSwgZSBhbGd1bWFzIG91dHJhcyBjb2lzaW5oYXMgcXVlIHZvY8OqIHZhaSBwcmVjaXNhciBwcmEgdXNhciBvCittw6F4aW1vIGRvIGdpdC4gVm9jw6ogcG9kZSBlbmNvbnRyw6EtbGEgZW0gbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLgorCitTZSB2b2PDqiBuw6NvIHF1aXNlciBjb250aW51YXIgY29tIG8gdHV0b3JpYWwgYWdvcmEgbmVzc2UgbW9tZW50bywgYWxndW1hcworb3V0cmFzIGRpZ3Jlc3PDtWVzIHF1ZSBwb2RlbSBzZXIgaW50ZXJlc3NhbnRlcyBuZXN0ZSBwb250byBzw6NvOgorCisgICogbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLCBsaW5rZ2l0OmdpdC1hbVsxXTogRXN0ZXMgY29udmVydGVtCisgICAgc8OpcmllcyBkZSBjb21taXRzIGVtIHBhdGNoZXMgcGFyYSBlbWFpbCwgZSB2aWNlLXZlcnNhLCDDunRlaXMgcGFyYQorICAgIHByb2pldG9zIGNvbW8gbyBrZXJuZWwgTGludXggcXVlIGRlcGVuZGVtIGZvcnRlbWVudGUgZGUgcGF0Y2hlcworICAgIGVudmlhZG9zIHBvciBlbWFpbC4KKworICAqIGxpbmtnaXQ6Z2l0LWJpc2VjdFsxXTogUXVhbmRvIGjDoSB1bWEgcmVncmVzc8OjbyBlbSBzZXUgcHJvamV0bywgdW1hCisgICAgZm9ybWEgZGUgcmFzdHJlYXIgdW0gYnVnIMOpIHByb2N1cmFuZG8gcGVsYSBoaXN0w7NyaWEgcGFyYSBlbmNvbnRyYXIgbworICAgIGNvbW1pdCBjdWxwYWRvLiBHaXQgYmlzZWN0IHBvZGUgYWp1ZGFyIGEgZXhlY3V0YXIgdW1hIGJ1c2NhIGJpbsOhcmlhCisgICAgcG9yIGVzc2UgY29tbWl0LiBFbGUgw6kgaW50ZWxpZ2VudGUgbyBiYXN0YW50ZSBwYXJhIGV4ZWN1dGFyIHVtYQorICAgIGJ1c2NhIHByw7N4aW1hIGRhIMOzdGltYSBtZXNtbyBubyBjYXNvIGRlIHVtYSBoaXN0w7NyaWEgY29tcGxleGEKKyAgICBuw6NvLWxpbmVhciBjb20gbXVpdG9zIHJhbW9zIHVuaWZpY2Fkb3MuCisKKyAgKiBsaW5rOmV2ZXJ5ZGF5Lmh0bWxbR0lUIGRpYXJpYW1lbnRlIGNvbSAyMCBlIHRhbnRvcyBjb21hbmRvc10KKworICAqIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XTogR2l0IHBhcmEgdXN1w6FyaW9zIGRlIENWUy4KKworVkVKQSBUQU1Cw4lNCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbmtnaXQ6Z2l0LWhlbHBbMV0sCitsaW5rOmV2ZXJ5ZGF5Lmh0bWxbZ2l0IGRpYXJpYW1lbnRlXSwKK2xpbms6dXNlci1tYW51YWwuaHRtbFtPIE1hbnVhbCBkbyBVc3XDoXJpbyBnaXRdCisKK0dJVAorLS0tCitQYXJ0ZSBkYSBzdWl0ZSBsaW5rZ2l0OmdpdFsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQgYi9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTlkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0CkBAIC0wLDAgKzEsNzMgQEAKKzxyZXBvc2l0b3J5Pjo6CisJVGhlICJyZW1vdGUiIHJlcG9zaXRvcnkgdGhhdCBpcyB0aGUgc291cmNlIG9mIGEgZmV0Y2gKKwlvciBwdWxsIG9wZXJhdGlvbi4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBlaXRoZXIgYSBVUkwKKwkoc2VlIHRoZSBzZWN0aW9uIDw8VVJMUyxHSVQgVVJMUz4+IGJlbG93KSBvciB0aGUgbmFtZQorCW9mIGEgcmVtb3RlIChzZWUgdGhlIHNlY3Rpb24gPDxSRU1PVEVTLFJFTU9URVM+PiBiZWxvdykuCisKK2lmbmRlZjo6Z2l0LXB1bGxbXQorPGdyb3VwPjo6CisJQSBuYW1lIHJlZmVycmluZyB0byBhIGxpc3Qgb2YgcmVwb3NpdG9yaWVzIGFzIHRoZSB2YWx1ZQorCW9mIHJlbW90ZXMuPGdyb3VwPiBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCShTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KK2VuZGlmOjpnaXQtcHVsbFtdCisKKzxyZWZzcGVjPjo6CisJVGhlIGZvcm1hdCBvZiBhIDxyZWZzcGVjPiBwYXJhbWV0ZXIgaXMgYW4gb3B0aW9uYWwgcGx1cworCWArYCwgZm9sbG93ZWQgYnkgdGhlIHNvdXJjZSByZWYgPHNyYz4sIGZvbGxvd2VkCisJYnkgYSBjb2xvbiBgOmAsIGZvbGxvd2VkIGJ5IHRoZSBkZXN0aW5hdGlvbiByZWYgPGRzdD4uCisrCitUaGUgcmVtb3RlIHJlZiB0aGF0IG1hdGNoZXMgPHNyYz4KK2lzIGZldGNoZWQsIGFuZCBpZiA8ZHN0PiBpcyBub3QgZW1wdHkgc3RyaW5nLCB0aGUgbG9jYWwKK3JlZiB0aGF0IG1hdGNoZXMgaXQgaXMgZmFzdC1mb3J3YXJkZWQgdXNpbmcgPHNyYz4uCitJZiB0aGUgb3B0aW9uYWwgcGx1cyBgK2AgaXMgdXNlZCwgdGhlIGxvY2FsIHJlZgoraXMgdXBkYXRlZCBldmVuIGlmIGl0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGZhc3QtZm9yd2FyZAordXBkYXRlLgorKworW05PVEVdCitJZiB0aGUgcmVtb3RlIGJyYW5jaCBmcm9tIHdoaWNoIHlvdSB3YW50IHRvIHB1bGwgaXMKK21vZGlmaWVkIGluIG5vbi1saW5lYXIgd2F5cyBzdWNoIGFzIGJlaW5nIHJld291bmQgYW5kCityZWJhc2VkIGZyZXF1ZW50bHksIHRoZW4gYSBwdWxsIHdpbGwgYXR0ZW1wdCBhIG1lcmdlIHdpdGgKK2FuIG9sZGVyIHZlcnNpb24gb2YgaXRzZWxmLCBsaWtlbHkgY29uZmxpY3QsIGFuZCBmYWlsLgorSXQgaXMgdW5kZXIgdGhlc2UgY29uZGl0aW9ucyB0aGF0IHlvdSB3b3VsZCB3YW50IHRvIHVzZQordGhlIGArYCBzaWduIHRvIGluZGljYXRlIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcyB3aWxsCitiZSBuZWVkZWQuICBUaGVyZSBpcyBjdXJyZW50bHkgbm8gZWFzeSB3YXkgdG8gZGV0ZXJtaW5lCitvciBkZWNsYXJlIHRoYXQgYSBicmFuY2ggd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBhCityZXBvc2l0b3J5IHdpdGggdGhpcyBiZWhhdmlvcjsgdGhlIHB1bGxpbmcgdXNlciBzaW1wbHkKK211c3Qga25vdyB0aGlzIGlzIHRoZSBleHBlY3RlZCB1c2FnZSBwYXR0ZXJuIGZvciBhIGJyYW5jaC4KKysKK1tOT1RFXQorWW91IG5ldmVyIGRvIHlvdXIgb3duIGRldmVsb3BtZW50IG9uIGJyYW5jaGVzIHRoYXQgYXBwZWFyCitvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIGEgPHJlZnNwZWM+IGNvbG9uIG9uIGBQdWxsOmAgbGluZXM7Cit0aGV5IGFyZSB0byBiZSB1cGRhdGVkIGJ5ICdnaXQgZmV0Y2gnLiAgSWYgeW91IGludGVuZCB0byBkbworZGV2ZWxvcG1lbnQgZGVyaXZlZCBmcm9tIGEgcmVtb3RlIGJyYW5jaCBgQmAsIGhhdmUgYSBgUHVsbDpgCitsaW5lIHRvIHRyYWNrIGl0IChpLmUuIGBQdWxsOiBCOnJlbW90ZS1CYCksIGFuZCBoYXZlIGEgc2VwYXJhdGUKK2JyYW5jaCBgbXktQmAgdG8gZG8geW91ciBkZXZlbG9wbWVudCBvbiB0b3Agb2YgaXQuICBUaGUgbGF0dGVyCitpcyBjcmVhdGVkIGJ5IGBnaXQgYnJhbmNoIG15LUIgcmVtb3RlLUJgIChvciBpdHMgZXF1aXZhbGVudCBgZ2l0CitjaGVja291dCAtYiBteS1CIHJlbW90ZS1CYCkuICBSdW4gYGdpdCBmZXRjaGAgdG8ga2VlcCB0cmFjayBvZgordGhlIHByb2dyZXNzIG9mIHRoZSByZW1vdGUgc2lkZSwgYW5kIHdoZW4geW91IHNlZSBzb21ldGhpbmcgbmV3CitvbiB0aGUgcmVtb3RlIGJyYW5jaCwgbWVyZ2UgaXQgaW50byB5b3VyIGRldmVsb3BtZW50IGJyYW5jaCB3aXRoCitgZ2l0IHB1bGwgLiByZW1vdGUtQmAsIHdoaWxlIHlvdSBhcmUgb24gYG15LUJgIGJyYW5jaC4KKysKK1tOT1RFXQorVGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gbGlzdGluZyBtdWx0aXBsZSA8cmVmc3BlYz4KK2RpcmVjdGx5IG9uICdnaXQgcHVsbCcgY29tbWFuZCBsaW5lIGFuZCBoYXZpbmcgbXVsdGlwbGUKK2BQdWxsOmAgPHJlZnNwZWM+IGxpbmVzIGZvciBhIDxyZXBvc2l0b3J5PiBhbmQgcnVubmluZworJ2dpdCBwdWxsJyBjb21tYW5kIHdpdGhvdXQgYW55IGV4cGxpY2l0IDxyZWZzcGVjPiBwYXJhbWV0ZXJzLgorPHJlZnNwZWM+IGxpc3RlZCBleHBsaWNpdGx5IG9uIHRoZSBjb21tYW5kIGxpbmUgYXJlIGFsd2F5cworbWVyZ2VkIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoIGFmdGVyIGZldGNoaW5nLiAgSW4gb3RoZXIgd29yZHMsCitpZiB5b3UgbGlzdCBtb3JlIHRoYW4gb25lIHJlbW90ZSByZWZzLCB5b3Ugd291bGQgYmUgbWFraW5nCithbiBPY3RvcHVzLiAgV2hpbGUgJ2dpdCBwdWxsJyBydW4gd2l0aG91dCBhbnkgZXhwbGljaXQgPHJlZnNwZWM+CitwYXJhbWV0ZXIgdGFrZXMgZGVmYXVsdCA8cmVmc3BlYz5zIGZyb20gYFB1bGw6YCBsaW5lcywgaXQKK21lcmdlcyBvbmx5IHRoZSBmaXJzdCA8cmVmc3BlYz4gZm91bmQgaW50byB0aGUgY3VycmVudCBicmFuY2gsCithZnRlciBmZXRjaGluZyBhbGwgdGhlIHJlbW90ZSByZWZzLiAgVGhpcyBpcyBiZWNhdXNlIG1ha2luZyBhbgorT2N0b3B1cyBmcm9tIHJlbW90ZSByZWZzIGlzIHJhcmVseSBkb25lLCB3aGlsZSBrZWVwaW5nIHRyYWNrCitvZiBtdWx0aXBsZSByZW1vdGUgaGVhZHMgaW4gb25lLWdvIGJ5IGZldGNoaW5nIG1vcmUgdGhhbiBvbmUKK2lzIG9mdGVuIHVzZWZ1bC4KKysKK1NvbWUgc2hvcnQtY3V0IG5vdGF0aW9ucyBhcmUgYWxzbyBzdXBwb3J0ZWQuCisrCisqIGB0YWcgPHRhZz5gIG1lYW5zIHRoZSBzYW1lIGFzIGByZWZzL3RhZ3MvPHRhZz46cmVmcy90YWdzLzx0YWc+YDsKKyAgaXQgcmVxdWVzdHMgZmV0Y2hpbmcgZXZlcnl0aGluZyB1cCB0byB0aGUgZ2l2ZW4gdGFnLgorKiBBIHBhcmFtZXRlciA8cmVmPiB3aXRob3V0IGEgY29sb24gaXMgZXF1aXZhbGVudCB0bworICA8cmVmPjogd2hlbiBwdWxsaW5nL2ZldGNoaW5nLCBzbyBpdCBtZXJnZXMgPHJlZj4gaW50byB0aGUgY3VycmVudAorICBicmFuY2ggd2l0aG91dCBzdG9yaW5nIHRoZSByZW1vdGUgYnJhbmNoIGFueXdoZXJlIGxvY2FsbHkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDk3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CkBAIC0wLDAgKzEsODMzIEBACitDb21taXQgTGltaXRpbmcKK35+fn5+fn5+fn5+fn5+fgorCitCZXNpZGVzIHNwZWNpZnlpbmcgYSByYW5nZSBvZiBjb21taXRzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZCB1c2luZyB0aGUKK3NwZWNpYWwgbm90YXRpb25zIGV4cGxhaW5lZCBpbiB0aGUgZGVzY3JpcHRpb24sIGFkZGl0aW9uYWwgY29tbWl0CitsaW1pdGluZyBtYXkgYmUgYXBwbGllZC4KKworVXNpbmcgbW9yZSBvcHRpb25zIGdlbmVyYWxseSBmdXJ0aGVyIGxpbWl0cyB0aGUgb3V0cHV0IChlLmcuCitgLS1zaW5jZT08ZGF0ZTE+YCBsaW1pdHMgdG8gY29tbWl0cyBuZXdlciB0aGFuIGA8ZGF0ZTE+YCwgYW5kIHVzaW5nIGl0Cit3aXRoIGAtLWdyZXA9PHBhdHRlcm4+YCBmdXJ0aGVyIGxpbWl0cyB0byBjb21taXRzIHdob3NlIGxvZyBtZXNzYWdlCitoYXMgYSBsaW5lIHRoYXQgbWF0Y2hlcyBgPHBhdHRlcm4+YCksIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK05vdGUgdGhhdCB0aGVzZSBhcmUgYXBwbGllZCBiZWZvcmUgY29tbWl0CitvcmRlcmluZyBhbmQgZm9ybWF0dGluZyBvcHRpb25zLCBzdWNoIGFzIGAtLXJldmVyc2VgLgorCistLQorCistPG51bWJlcj46OgorLW4gPG51bWJlcj46OgorLS1tYXgtY291bnQ9PG51bWJlcj46OgorCisJTGltaXQgdGhlIG51bWJlciBvZiBjb21taXRzIHRvIG91dHB1dC4KKworLS1za2lwPTxudW1iZXI+OjoKKworCVNraXAgJ251bWJlcicgY29tbWl0cyBiZWZvcmUgc3RhcnRpbmcgdG8gc2hvdyB0aGUgY29tbWl0IG91dHB1dC4KKworLS1zaW5jZT08ZGF0ZT46OgorLS1hZnRlcj08ZGF0ZT46OgorCisJU2hvdyBjb21taXRzIG1vcmUgcmVjZW50IHRoYW4gYSBzcGVjaWZpYyBkYXRlLgorCistLXVudGlsPTxkYXRlPjo6CistLWJlZm9yZT08ZGF0ZT46OgorCisJU2hvdyBjb21taXRzIG9sZGVyIHRoYW4gYSBzcGVjaWZpYyBkYXRlLgorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KKy0tbWF4LWFnZT08dGltZXN0YW1wPjo6CistLW1pbi1hZ2U9PHRpbWVzdGFtcD46OgorCisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIHNwZWNpZmllZCB0aW1lIHJhbmdlLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKKy0tYXV0aG9yPTxwYXR0ZXJuPjo6CistLWNvbW1pdHRlcj08cGF0dGVybj46OgorCisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgd2l0aCBhdXRob3IvY29tbWl0dGVyCisJaGVhZGVyIGxpbmVzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBwYXR0ZXJuIChyZWd1bGFyCisJZXhwcmVzc2lvbikuICBXaXRoIG1vcmUgdGhhbiBvbmUgYC0tYXV0aG9yPTxwYXR0ZXJuPmAsCisJY29tbWl0cyB3aG9zZSBhdXRob3IgbWF0Y2hlcyBhbnkgb2YgdGhlIGdpdmVuIHBhdHRlcm5zIGFyZQorCWNob3NlbiAoc2ltaWxhcmx5IGZvciBtdWx0aXBsZSBgLS1jb21taXR0ZXI9PHBhdHRlcm4+YCkuCisKKy0tZ3JlcC1yZWZsb2c9PHBhdHRlcm4+OjoKKworCUxpbWl0IHRoZSBjb21taXRzIG91dHB1dCB0byBvbmVzIHdpdGggcmVmbG9nIGVudHJpZXMgdGhhdAorCW1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0dGVybiAocmVndWxhciBleHByZXNzaW9uKS4gV2l0aAorCW1vcmUgdGhhbiBvbmUgYC0tZ3JlcC1yZWZsb2dgLCBjb21taXRzIHdob3NlIHJlZmxvZyBtZXNzYWdlCisJbWF0Y2hlcyBhbnkgb2YgdGhlIGdpdmVuIHBhdHRlcm5zIGFyZSBjaG9zZW4uICBJdCBpcyBhbgorCWVycm9yIHRvIHVzZSB0aGlzIG9wdGlvbiB1bmxlc3MgYC0td2Fsay1yZWZsb2dzYCBpcyBpbiB1c2UuCisKKy0tZ3JlcD08cGF0dGVybj46OgorCisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgd2l0aCBsb2cgbWVzc2FnZSB0aGF0CisJbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHBhdHRlcm4gKHJlZ3VsYXIgZXhwcmVzc2lvbikuICBXaXRoCisJbW9yZSB0aGFuIG9uZSBgLS1ncmVwPTxwYXR0ZXJuPmAsIGNvbW1pdHMgd2hvc2UgbWVzc2FnZQorCW1hdGNoZXMgYW55IG9mIHRoZSBnaXZlbiBwYXR0ZXJucyBhcmUgY2hvc2VuIChidXQgc2VlCisJYC0tYWxsLW1hdGNoYCkuCisrCitXaGVuIGAtLXNob3ctbm90ZXNgIGlzIGluIGVmZmVjdCwgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgbm90ZXMgYXMKK2lmIGl0IGlzIHBhcnQgb2YgdGhlIGxvZyBtZXNzYWdlLgorCistLWFsbC1tYXRjaDo6CisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgdGhhdCBtYXRjaCBhbGwgZ2l2ZW4gLS1ncmVwLAorCWluc3RlYWQgb2Ygb25lcyB0aGF0IG1hdGNoIGF0IGxlYXN0IG9uZS4KKworLWk6OgorLS1yZWdleHAtaWdub3JlLWNhc2U6OgorCisJTWF0Y2ggdGhlIHJlZ2V4cCBsaW1pdGluZyBwYXR0ZXJucyB3aXRob3V0IHJlZ2FyZCB0byBsZXR0ZXJzIGNhc2UuCisKKy1FOjoKKy0tZXh0ZW5kZWQtcmVnZXhwOjoKKworCUNvbnNpZGVyIHRoZSBsaW1pdGluZyBwYXR0ZXJucyB0byBiZSBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb25zCisJaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb25zLgorCistRjo6CistLWZpeGVkLXN0cmluZ3M6OgorCisJQ29uc2lkZXIgdGhlIGxpbWl0aW5nIHBhdHRlcm5zIHRvIGJlIGZpeGVkIHN0cmluZ3MgKGRvbid0IGludGVycHJldAorCXBhdHRlcm4gYXMgYSByZWd1bGFyIGV4cHJlc3Npb24pLgorCistLXJlbW92ZS1lbXB0eTo6CisKKwlTdG9wIHdoZW4gYSBnaXZlbiBwYXRoIGRpc2FwcGVhcnMgZnJvbSB0aGUgdHJlZS4KKworLS1tZXJnZXM6OgorCisJUHJpbnQgb25seSBtZXJnZSBjb21taXRzLiBUaGlzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgYC0tbWluLXBhcmVudHM9MmAuCisKKy0tbm8tbWVyZ2VzOjoKKworCURvIG5vdCBwcmludCBjb21taXRzIHdpdGggbW9yZSB0aGFuIG9uZSBwYXJlbnQuIFRoaXMgaXMKKwlleGFjdGx5IHRoZSBzYW1lIGFzIGAtLW1heC1wYXJlbnRzPTFgLgorCistLW1pbi1wYXJlbnRzPTxudW1iZXI+OjoKKy0tbWF4LXBhcmVudHM9PG51bWJlcj46OgorLS1uby1taW4tcGFyZW50czo6CistLW5vLW1heC1wYXJlbnRzOjoKKworCVNob3cgb25seSBjb21taXRzIHdoaWNoIGhhdmUgYXQgbGVhc3QgKG9yIGF0IG1vc3QpIHRoYXQgbWFueQorCWNvbW1pdHMuIEluIHBhcnRpY3VsYXIsIGAtLW1heC1wYXJlbnRzPTFgIGlzIHRoZSBzYW1lIGFzIGAtLW5vLW1lcmdlc2AsCisJYC0tbWluLXBhcmVudHM9MmAgaXMgdGhlIHNhbWUgYXMgYC0tbWVyZ2VzYC4gIGAtLW1heC1wYXJlbnRzPTBgCisJZ2l2ZXMgYWxsIHJvb3QgY29tbWl0cyBhbmQgYC0tbWluLXBhcmVudHM9M2AgYWxsIG9jdG9wdXMgbWVyZ2VzLgorKworYC0tbm8tbWluLXBhcmVudHNgIGFuZCBgLS1uby1tYXgtcGFyZW50c2AgcmVzZXQgdGhlc2UgbGltaXRzICh0byBubyBsaW1pdCkKK2FnYWluLiAgRXF1aXZhbGVudCBmb3JtcyBhcmUgYC0tbWluLXBhcmVudHM9MGAgKGFueSBjb21taXQgaGFzIDAgb3IgbW9yZQorcGFyZW50cykgYW5kIGAtLW1heC1wYXJlbnRzPS0xYCAobmVnYXRpdmUgbnVtYmVycyBkZW5vdGUgbm8gdXBwZXIgbGltaXQpLgorCistLWZpcnN0LXBhcmVudDo6CisJRm9sbG93IG9ubHkgdGhlIGZpcnN0IHBhcmVudCBjb21taXQgdXBvbiBzZWVpbmcgYSBtZXJnZQorCWNvbW1pdC4gIFRoaXMgb3B0aW9uIGNhbiBnaXZlIGEgYmV0dGVyIG92ZXJ2aWV3IHdoZW4KKwl2aWV3aW5nIHRoZSBldm9sdXRpb24gb2YgYSBwYXJ0aWN1bGFyIHRvcGljIGJyYW5jaCwKKwliZWNhdXNlIG1lcmdlcyBpbnRvIGEgdG9waWMgYnJhbmNoIHRlbmQgdG8gYmUgb25seSBhYm91dAorCWFkanVzdGluZyB0byB1cGRhdGVkIHVwc3RyZWFtIGZyb20gdGltZSB0byB0aW1lLCBhbmQKKwl0aGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGlnbm9yZSB0aGUgaW5kaXZpZHVhbCBjb21taXRzCisJYnJvdWdodCBpbiB0byB5b3VyIGhpc3RvcnkgYnkgc3VjaCBhIG1lcmdlLgorCistLW5vdDo6CisKKwlSZXZlcnNlcyB0aGUgbWVhbmluZyBvZiB0aGUgJ3tjYXJldH0nIHByZWZpeCAob3IgbGFjayB0aGVyZW9mKQorCWZvciBhbGwgZm9sbG93aW5nIHJldmlzaW9uIHNwZWNpZmllcnMsIHVwIHRvIHRoZSBuZXh0ICctLW5vdCcuCisKKy0tYWxsOjoKKworCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGByZWZzL2AgYXJlIGxpc3RlZCBvbiB0aGUKKwljb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4KKworLS1icmFuY2hlc1s9PHBhdHRlcm4+XTo6CisKKwlQcmV0ZW5kIGFzIGlmIGFsbCB0aGUgcmVmcyBpbiBgcmVmcy9oZWFkc2AgYXJlIGxpc3RlZAorCW9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4gSWYgJzxwYXR0ZXJuPicgaXMgZ2l2ZW4sIGxpbWl0CisJYnJhbmNoZXMgdG8gb25lcyBtYXRjaGluZyBnaXZlbiBzaGVsbCBnbG9iLiBJZiBwYXR0ZXJuIGxhY2tzICc/JywKKwkne2FzdGVyaXNrfScsIG9yICdbJywgJy97YXN0ZXJpc2t9JyBhdCB0aGUgZW5kIGlzIGltcGxpZWQuCisKKy0tdGFnc1s9PHBhdHRlcm4+XTo6CisKKwlQcmV0ZW5kIGFzIGlmIGFsbCB0aGUgcmVmcyBpbiBgcmVmcy90YWdzYCBhcmUgbGlzdGVkCisJb24gdGhlIGNvbW1hbmQgbGluZSBhcyAnPGNvbW1pdD4nLiBJZiAnPHBhdHRlcm4+JyBpcyBnaXZlbiwgbGltaXQKKwl0YWdzIHRvIG9uZXMgbWF0Y2hpbmcgZ2l2ZW4gc2hlbGwgZ2xvYi4gSWYgcGF0dGVybiBsYWNrcyAnPycsICd7YXN0ZXJpc2t9JywKKwlvciAnWycsICcve2FzdGVyaXNrfScgYXQgdGhlIGVuZCBpcyBpbXBsaWVkLgorCistLXJlbW90ZXNbPTxwYXR0ZXJuPl06OgorCisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgaW4gYHJlZnMvcmVtb3Rlc2AgYXJlIGxpc3RlZAorCW9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4gSWYgJzxwYXR0ZXJuPicgaXMgZ2l2ZW4sIGxpbWl0CisJcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIHRvIG9uZXMgbWF0Y2hpbmcgZ2l2ZW4gc2hlbGwgZ2xvYi4KKwlJZiBwYXR0ZXJuIGxhY2tzICc/JywgJ3thc3Rlcmlza30nLCBvciAnWycsICcve2FzdGVyaXNrfScgYXQgdGhlIGVuZCBpcyBpbXBsaWVkLgorCistLWdsb2I9PGdsb2ItcGF0dGVybj46OgorCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIG1hdGNoaW5nIHNoZWxsIGdsb2IgJzxnbG9iLXBhdHRlcm4+JworCWFyZSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhcyAnPGNvbW1pdD4nLiBMZWFkaW5nICdyZWZzLycsCisJaXMgYXV0b21hdGljYWxseSBwcmVwZW5kZWQgaWYgbWlzc2luZy4gSWYgcGF0dGVybiBsYWNrcyAnPycsICd7YXN0ZXJpc2t9JywKKwlvciAnWycsICcve2FzdGVyaXNrfScgYXQgdGhlIGVuZCBpcyBpbXBsaWVkLgorCistLWlnbm9yZS1taXNzaW5nOjoKKworCVVwb24gc2VlaW5nIGFuIGludmFsaWQgb2JqZWN0IG5hbWUgaW4gdGhlIGlucHV0LCBwcmV0ZW5kIGFzIGlmCisJdGhlIGJhZCBpbnB1dCB3YXMgbm90IGdpdmVuLgorCitpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCistLWJpc2VjdDo6CisKKwlQcmV0ZW5kIGFzIGlmIHRoZSBiYWQgYmlzZWN0aW9uIHJlZiBgcmVmcy9iaXNlY3QvYmFkYAorCXdhcyBsaXN0ZWQgYW5kIGFzIGlmIGl0IHdhcyBmb2xsb3dlZCBieSBgLS1ub3RgIGFuZCB0aGUgZ29vZAorCWJpc2VjdGlvbiByZWZzIGByZWZzL2Jpc2VjdC9nb29kLSpgIG9uIHRoZSBjb21tYW5kCisJbGluZS4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLXN0ZGluOjoKKworCUluIGFkZGl0aW9uIHRvIHRoZSAnPGNvbW1pdD4nIGxpc3RlZCBvbiB0aGUgY29tbWFuZAorCWxpbmUsIHJlYWQgdGhlbSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gSWYgYSAnLS0nIHNlcGFyYXRvciBpcworCXNlZW4sIHN0b3AgcmVhZGluZyBjb21taXRzIGFuZCBzdGFydCByZWFkaW5nIHBhdGhzIHRvIGxpbWl0IHRoZQorCXJlc3VsdC4KKworaWZkZWY6OmdpdC1yZXYtbGlzdFtdCistLXF1aWV0OjoKKworCURvbid0IHByaW50IGFueXRoaW5nIHRvIHN0YW5kYXJkIG91dHB1dC4gIFRoaXMgZm9ybQorCWlzIHByaW1hcmlseSBtZWFudCB0byBhbGxvdyB0aGUgY2FsbGVyIHRvCisJdGVzdCB0aGUgZXhpdCBzdGF0dXMgdG8gc2VlIGlmIGEgcmFuZ2Ugb2Ygb2JqZWN0cyBpcyBmdWxseQorCWNvbm5lY3RlZCAob3Igbm90KS4gIEl0IGlzIGZhc3RlciB0aGFuIHJlZGlyZWN0aW5nIHN0ZG91dAorCXRvIC9kZXYvbnVsbCBhcyB0aGUgb3V0cHV0IGRvZXMgbm90IGhhdmUgdG8gYmUgZm9ybWF0dGVkLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKKy0tY2hlcnJ5LW1hcms6OgorCisJTGlrZSBgLS1jaGVycnktcGlja2AgKHNlZSBiZWxvdykgYnV0IG1hcmsgZXF1aXZhbGVudCBjb21taXRzCisJd2l0aCBgPWAgcmF0aGVyIHRoYW4gb21pdHRpbmcgdGhlbSwgYW5kIGluZXF1aXZhbGVudCBvbmVzIHdpdGggYCtgLgorCistLWNoZXJyeS1waWNrOjoKKworCU9taXQgYW55IGNvbW1pdCB0aGF0IGludHJvZHVjZXMgdGhlIHNhbWUgY2hhbmdlIGFzCisJYW5vdGhlciBjb21taXQgb24gdGhlICJvdGhlciBzaWRlIiB3aGVuIHRoZSBzZXQgb2YKKwljb21taXRzIGFyZSBsaW1pdGVkIHdpdGggc3ltbWV0cmljIGRpZmZlcmVuY2UuCisrCitGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIGJyYW5jaGVzLCBgQWAgYW5kIGBCYCwgYSB1c3VhbCB3YXkKK3RvIGxpc3QgYWxsIGNvbW1pdHMgb24gb25seSBvbmUgc2lkZSBvZiB0aGVtIGlzIHdpdGgKK2AtLWxlZnQtcmlnaHRgIChzZWUgdGhlIGV4YW1wbGUgYmVsb3cgaW4gdGhlIGRlc2NyaXB0aW9uIG9mCit0aGUgYC0tbGVmdC1yaWdodGAgb3B0aW9uKS4gIEl0IGhvd2V2ZXIgc2hvd3MgdGhlIGNvbW1pdHMgdGhhdCB3ZXJlIGNoZXJyeS1waWNrZWQKK2Zyb20gdGhlIG90aGVyIGJyYW5jaCAoZm9yIGV4YW1wbGUsICIzcmQgb24gYiIgbWF5IGJlIGNoZXJyeS1waWNrZWQKK2Zyb20gYnJhbmNoIEEpLiAgV2l0aCB0aGlzIG9wdGlvbiwgc3VjaCBwYWlycyBvZiBjb21taXRzIGFyZQorZXhjbHVkZWQgZnJvbSB0aGUgb3V0cHV0LgorCistLWxlZnQtb25seTo6CistLXJpZ2h0LW9ubHk6OgorCisJTGlzdCBvbmx5IGNvbW1pdHMgb24gdGhlIHJlc3BlY3RpdmUgc2lkZSBvZiBhIHN5bW1ldHJpYyByYW5nZSwKKwlpLmUuIG9ubHkgdGhvc2Ugd2hpY2ggd291bGQgYmUgbWFya2VkIGA8YCByZXNwLiBgPmAgYnkKKwlgLS1sZWZ0LXJpZ2h0YC4KKysKK0ZvciBleGFtcGxlLCBgLS1jaGVycnktcGljayAtLXJpZ2h0LW9ubHkgQS4uLkJgIG9taXRzIHRob3NlCitjb21taXRzIGZyb20gYEJgIHdoaWNoIGFyZSBpbiBgQWAgb3IgYXJlIHBhdGNoLWVxdWl2YWxlbnQgdG8gYSBjb21taXQgaW4KK2BBYC4gSW4gb3RoZXIgd29yZHMsIHRoaXMgbGlzdHMgdGhlIGArYCBjb21taXRzIGZyb20gYGdpdCBjaGVycnkgQSBCYC4KK01vcmUgcHJlY2lzZWx5LCBgLS1jaGVycnktcGljayAtLXJpZ2h0LW9ubHkgLS1uby1tZXJnZXNgIGdpdmVzIHRoZSBleGFjdAorbGlzdC4KKworLS1jaGVycnk6OgorCisJQSBzeW5vbnltIGZvciBgLS1yaWdodC1vbmx5IC0tY2hlcnJ5LW1hcmsgLS1uby1tZXJnZXNgOyB1c2VmdWwgdG8KKwlsaW1pdCB0aGUgb3V0cHV0IHRvIHRoZSBjb21taXRzIG9uIG91ciBzaWRlIGFuZCBtYXJrIHRob3NlIHRoYXQKKwloYXZlIGJlZW4gYXBwbGllZCB0byB0aGUgb3RoZXIgc2lkZSBvZiBhIGZvcmtlZCBoaXN0b3J5IHdpdGgKKwlgZ2l0IGxvZyAtLWNoZXJyeSB1cHN0cmVhbS4uLm15YnJhbmNoYCwgc2ltaWxhciB0bworCWBnaXQgY2hlcnJ5IHVwc3RyZWFtIG15YnJhbmNoYC4KKworLWc6OgorLS13YWxrLXJlZmxvZ3M6OgorCisJSW5zdGVhZCBvZiB3YWxraW5nIHRoZSBjb21taXQgYW5jZXN0cnkgY2hhaW4sIHdhbGsKKwlyZWZsb2cgZW50cmllcyBmcm9tIHRoZSBtb3N0IHJlY2VudCBvbmUgdG8gb2xkZXIgb25lcy4KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQgeW91IGNhbm5vdCBzcGVjaWZ5IGNvbW1pdHMgdG8KKwlleGNsdWRlICh0aGF0IGlzLCAne2NhcmV0fWNvbW1pdCcsICdjb21taXQxLi5jb21taXQyJywKKwlub3IgJ2NvbW1pdDFcLi4uY29tbWl0Micgbm90YXRpb25zIGNhbm5vdCBiZSB1c2VkKS4KKysKK1dpdGggJ1wtLXByZXR0eScgZm9ybWF0IG90aGVyIHRoYW4gb25lbGluZSAoZm9yIG9idmlvdXMgcmVhc29ucyksCit0aGlzIGNhdXNlcyB0aGUgb3V0cHV0IHRvIGhhdmUgdHdvIGV4dHJhIGxpbmVzIG9mIGluZm9ybWF0aW9uCit0YWtlbiBmcm9tIHRoZSByZWZsb2cuICBCeSBkZWZhdWx0LCAnY29tbWl0QFx7TnRofScgbm90YXRpb24gaXMKK3VzZWQgaW4gdGhlIG91dHB1dC4gIFdoZW4gdGhlIHN0YXJ0aW5nIGNvbW1pdCBpcyBzcGVjaWZpZWQgYXMKKydjb21taXRAXHtub3d9Jywgb3V0cHV0IGFsc28gdXNlcyAnY29tbWl0QFx7dGltZXN0YW1wfScgbm90YXRpb24KK2luc3RlYWQuICBVbmRlciAnXC0tcHJldHR5PW9uZWxpbmUnLCB0aGUgY29tbWl0IG1lc3NhZ2UgaXMKK3ByZWZpeGVkIHdpdGggdGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgc2FtZSBsaW5lLgorVGhpcyBvcHRpb24gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggJ1wtLXJldmVyc2UnLgorU2VlIGFsc28gbGlua2dpdDpnaXQtcmVmbG9nWzFdLgorCistLW1lcmdlOjoKKworCUFmdGVyIGEgZmFpbGVkIG1lcmdlLCBzaG93IHJlZnMgdGhhdCB0b3VjaCBmaWxlcyBoYXZpbmcgYQorCWNvbmZsaWN0IGFuZCBkb24ndCBleGlzdCBvbiBhbGwgaGVhZHMgdG8gbWVyZ2UuCisKKy0tYm91bmRhcnk6OgorCisJT3V0cHV0IHVuaW50ZXJlc3RpbmcgY29tbWl0cyBhdCB0aGUgYm91bmRhcnksIHdoaWNoIGFyZSB1c3VhbGx5CisJbm90IHNob3duLgorCistLQorCitIaXN0b3J5IFNpbXBsaWZpY2F0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NvbWV0aW1lcyB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBwYXJ0cyBvZiB0aGUgaGlzdG9yeSwgZm9yIGV4YW1wbGUgdGhlCitjb21taXRzIG1vZGlmeWluZyBhIHBhcnRpY3VsYXIgPHBhdGg+LiBCdXQgdGhlcmUgYXJlIHR3byBwYXJ0cyBvZgorJ0hpc3RvcnkgU2ltcGxpZmljYXRpb24nLCBvbmUgcGFydCBpcyBzZWxlY3RpbmcgdGhlIGNvbW1pdHMgYW5kIHRoZSBvdGhlcgoraXMgaG93IHRvIGRvIGl0LCBhcyB0aGVyZSBhcmUgdmFyaW91cyBzdHJhdGVnaWVzIHRvIHNpbXBsaWZ5IHRoZSBoaXN0b3J5LgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgc2VsZWN0IHRoZSBjb21taXRzIHRvIGJlIHNob3duOgorCis8cGF0aHM+OjoKKworCUNvbW1pdHMgbW9kaWZ5aW5nIHRoZSBnaXZlbiA8cGF0aHM+IGFyZSBzZWxlY3RlZC4KKworLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uOjoKKworCUNvbW1pdHMgdGhhdCBhcmUgcmVmZXJyZWQgYnkgc29tZSBicmFuY2ggb3IgdGFnIGFyZSBzZWxlY3RlZC4KKworTm90ZSB0aGF0IGV4dHJhIGNvbW1pdHMgY2FuIGJlIHNob3duIHRvIGdpdmUgYSBtZWFuaW5nZnVsIGhpc3RvcnkuCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhZmZlY3QgdGhlIHdheSB0aGUgc2ltcGxpZmljYXRpb24gaXMgcGVyZm9ybWVkOgorCitEZWZhdWx0IG1vZGU6OgorCisJU2ltcGxpZmllcyB0aGUgaGlzdG9yeSB0byB0aGUgc2ltcGxlc3QgaGlzdG9yeSBleHBsYWluaW5nIHRoZQorCWZpbmFsIHN0YXRlIG9mIHRoZSB0cmVlLiBTaW1wbGVzdCBiZWNhdXNlIGl0IHBydW5lcyBzb21lIHNpZGUKKwlicmFuY2hlcyBpZiB0aGUgZW5kIHJlc3VsdCBpcyB0aGUgc2FtZSAoaS5lLiBtZXJnaW5nIGJyYW5jaGVzCisJd2l0aCB0aGUgc2FtZSBjb250ZW50KQorCistLWZ1bGwtaGlzdG9yeTo6CisKKwlTYW1lIGFzIHRoZSBkZWZhdWx0IG1vZGUsIGJ1dCBkb2VzIG5vdCBwcnVuZSBzb21lIGhpc3RvcnkuCisKKy0tZGVuc2U6OgorCisJT25seSB0aGUgc2VsZWN0ZWQgY29tbWl0cyBhcmUgc2hvd24sIHBsdXMgc29tZSB0byBoYXZlIGEKKwltZWFuaW5nZnVsIGhpc3RvcnkuCisKKy0tc3BhcnNlOjoKKworCUFsbCBjb21taXRzIGluIHRoZSBzaW1wbGlmaWVkIGhpc3RvcnkgYXJlIHNob3duLgorCistLXNpbXBsaWZ5LW1lcmdlczo6CisKKwlBZGRpdGlvbmFsIG9wdGlvbiB0byAnLS1mdWxsLWhpc3RvcnknIHRvIHJlbW92ZSBzb21lIG5lZWRsZXNzCisJbWVyZ2VzIGZyb20gdGhlIHJlc3VsdGluZyBoaXN0b3J5LCBhcyB0aGVyZSBhcmUgbm8gc2VsZWN0ZWQKKwljb21taXRzIGNvbnRyaWJ1dGluZyB0byB0aGlzIG1lcmdlLgorCistLWFuY2VzdHJ5LXBhdGg6OgorCisJV2hlbiBnaXZlbiBhIHJhbmdlIG9mIGNvbW1pdHMgdG8gZGlzcGxheSAoZS5nLiAnY29tbWl0MS4uY29tbWl0MicKKwlvciAnY29tbWl0MiB7Y2FyZXR9Y29tbWl0MScpLCBvbmx5IGRpc3BsYXkgY29tbWl0cyB0aGF0IGV4aXN0CisJZGlyZWN0bHkgb24gdGhlIGFuY2VzdHJ5IGNoYWluIGJldHdlZW4gdGhlICdjb21taXQxJyBhbmQKKwknY29tbWl0MicsIGkuZS4gY29tbWl0cyB0aGF0IGFyZSBib3RoIGRlc2NlbmRhbnRzIG9mICdjb21taXQxJywKKwlhbmQgYW5jZXN0b3JzIG9mICdjb21taXQyJy4KKworQSBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uIGZvbGxvd3MuCisKK1N1cHBvc2UgeW91IHNwZWNpZmllZCBgZm9vYCBhcyB0aGUgPHBhdGhzPi4gIFdlIHNoYWxsIGNhbGwgY29tbWl0cwordGhhdCBtb2RpZnkgYGZvb2AgIVRSRUVTQU1FLCBhbmQgdGhlIHJlc3QgVFJFRVNBTUUuICAoSW4gYSBkaWZmCitmaWx0ZXJlZCBmb3IgYGZvb2AsIHRoZXkgbG9vayBkaWZmZXJlbnQgYW5kIGVxdWFsLCByZXNwZWN0aXZlbHkuKQorCitJbiB0aGUgZm9sbG93aW5nLCB3ZSB3aWxsIGFsd2F5cyByZWZlciB0byB0aGUgc2FtZSBleGFtcGxlIGhpc3RvcnkgdG8KK2lsbHVzdHJhdGUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gc2ltcGxpZmljYXRpb24gc2V0dGluZ3MuICBXZSBhc3N1bWUKK3RoYXQgeW91IGFyZSBmaWx0ZXJpbmcgZm9yIGEgZmlsZSBgZm9vYCBpbiB0aGlzIGNvbW1pdCBncmFwaDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAuLUEtLS1NLS0tTi0tLU8tLS1QCisJIC8gICAgIC8gICAvICAgLyAgIC8KKwlJICAgICBCICAgQyAgIEQgICBFCisJIFwgICAvICAgLyAgIC8gICAvCisJICBgLS0tLS0tLS0tLS0tLScKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgaG9yaXpvbnRhbCBsaW5lIG9mIGhpc3RvcnkgQS0tLVAgaXMgdGFrZW4gdG8gYmUgdGhlIGZpcnN0IHBhcmVudCBvZgorZWFjaCBtZXJnZS4gIFRoZSBjb21taXRzIGFyZToKKworKiBgSWAgaXMgdGhlIGluaXRpYWwgY29tbWl0LCBpbiB3aGljaCBgZm9vYCBleGlzdHMgd2l0aCBjb250ZW50cworICAiYXNkZiIsIGFuZCBhIGZpbGUgYHF1dXhgIGV4aXN0cyB3aXRoIGNvbnRlbnRzICJxdXV4Ii4gIEluaXRpYWwKKyAgY29tbWl0cyBhcmUgY29tcGFyZWQgdG8gYW4gZW1wdHkgdHJlZSwgc28gYElgIGlzICFUUkVFU0FNRS4KKworKiBJbiBgQWAsIGBmb29gIGNvbnRhaW5zIGp1c3QgImZvbyIuCisKKyogYEJgIGNvbnRhaW5zIHRoZSBzYW1lIGNoYW5nZSBhcyBgQWAuICBJdHMgbWVyZ2UgYE1gIGlzIHRyaXZpYWwgYW5kCisgIGhlbmNlIFRSRUVTQU1FIHRvIGFsbCBwYXJlbnRzLgorCisqIGBDYCBkb2VzIG5vdCBjaGFuZ2UgYGZvb2AsIGJ1dCBpdHMgbWVyZ2UgYE5gIGNoYW5nZXMgaXQgdG8gImZvb2JhciIsCisgIHNvIGl0IGlzIG5vdCBUUkVFU0FNRSB0byBhbnkgcGFyZW50LgorCisqIGBEYCBzZXRzIGBmb29gIHRvICJiYXoiLiAgSXRzIG1lcmdlIGBPYCBjb21iaW5lcyB0aGUgc3RyaW5ncyBmcm9tCisgIGBOYCBhbmQgYERgIHRvICJmb29iYXJiYXoiOyBpLmUuLCBpdCBpcyBub3QgVFJFRVNBTUUgdG8gYW55IHBhcmVudC4KKworKiBgRWAgY2hhbmdlcyBgcXV1eGAgdG8gInh5enp5IiwgYW5kIGl0cyBtZXJnZSBgUGAgY29tYmluZXMgdGhlCisgIHN0cmluZ3MgdG8gInF1dXggeHl6enkiLiAgRGVzcGl0ZSBhcHBlYXJpbmcgaW50ZXJlc3RpbmcsIGBQYCBpcworICBUUkVFU0FNRSB0byBhbGwgcGFyZW50cy4KKworJ3Jldi1saXN0JyB3YWxrcyBiYWNrd2FyZHMgdGhyb3VnaCBoaXN0b3J5LCBpbmNsdWRpbmcgb3IgZXhjbHVkaW5nCitjb21taXRzIGJhc2VkIG9uIHdoZXRoZXIgJ1wtLWZ1bGwtaGlzdG9yeScgYW5kL29yIHBhcmVudCByZXdyaXRpbmcKKyh2aWEgJ1wtLXBhcmVudHMnIG9yICdcLS1jaGlsZHJlbicpIGFyZSB1c2VkLiAgVGhlIGZvbGxvd2luZyBzZXR0aW5ncworYXJlIGF2YWlsYWJsZS4KKworRGVmYXVsdCBtb2RlOjoKKworCUNvbW1pdHMgYXJlIGluY2x1ZGVkIGlmIHRoZXkgYXJlIG5vdCBUUkVFU0FNRSB0byBhbnkgcGFyZW50CisJKHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkLCBzZWUgJ1wtLXNwYXJzZScgYmVsb3cpLiAgSWYgdGhlCisJY29tbWl0IHdhcyBhIG1lcmdlLCBhbmQgaXQgd2FzIFRSRUVTQU1FIHRvIG9uZSBwYXJlbnQsIGZvbGxvdworCW9ubHkgdGhhdCBwYXJlbnQuICAoRXZlbiBpZiB0aGVyZSBhcmUgc2V2ZXJhbCBUUkVFU0FNRQorCXBhcmVudHMsIGZvbGxvdyBvbmx5IG9uZSBvZiB0aGVtLikgIE90aGVyd2lzZSwgZm9sbG93IGFsbAorCXBhcmVudHMuCisrCitUaGlzIHJlc3VsdHMgaW46CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgLi1BLS0tTi0tLU8KKwkgLyAgICAgLyAgIC8KKwlJLS0tLS0tLS0tRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK05vdGUgaG93IHRoZSBydWxlIHRvIG9ubHkgZm9sbG93IHRoZSBUUkVFU0FNRSBwYXJlbnQsIGlmIG9uZSBpcworYXZhaWxhYmxlLCByZW1vdmVkIGBCYCBmcm9tIGNvbnNpZGVyYXRpb24gZW50aXJlbHkuICBgQ2Agd2FzCitjb25zaWRlcmVkIHZpYSBgTmAsIGJ1dCBpcyBUUkVFU0FNRS4gIFJvb3QgY29tbWl0cyBhcmUgY29tcGFyZWQgdG8gYW4KK2VtcHR5IHRyZWUsIHNvIGBJYCBpcyAhVFJFRVNBTUUuCisrCitQYXJlbnQvY2hpbGQgcmVsYXRpb25zIGFyZSBvbmx5IHZpc2libGUgd2l0aCAtLXBhcmVudHMsIGJ1dCB0aGF0IGRvZXMKK25vdCBhZmZlY3QgdGhlIGNvbW1pdHMgc2VsZWN0ZWQgaW4gZGVmYXVsdCBtb2RlLCBzbyB3ZSBoYXZlIHNob3duIHRoZQorcGFyZW50IGxpbmVzLgorCistLWZ1bGwtaGlzdG9yeSB3aXRob3V0IHBhcmVudCByZXdyaXRpbmc6OgorCisJVGhpcyBtb2RlIGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdCBpbiBvbmUgcG9pbnQ6IGFsd2F5cyBmb2xsb3cKKwlhbGwgcGFyZW50cyBvZiBhIG1lcmdlLCBldmVuIGlmIGl0IGlzIFRSRUVTQU1FIHRvIG9uZSBvZiB0aGVtLgorCUV2ZW4gaWYgbW9yZSB0aGFuIG9uZSBzaWRlIG9mIHRoZSBtZXJnZSBoYXMgY29tbWl0cyB0aGF0IGFyZQorCWluY2x1ZGVkLCB0aGlzIGRvZXMgbm90IGltcGx5IHRoYXQgdGhlIG1lcmdlIGl0c2VsZiBpcyEgIEluCisJdGhlIGV4YW1wbGUsIHdlIGdldAorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlJICBBICBCICBOICBEICBPCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworYFBgIGFuZCBgTWAgd2VyZSBleGNsdWRlZCBiZWNhdXNlIHRoZXkgYXJlIFRSRUVTQU1FIHRvIGEgcGFyZW50LiAgYEVgLAorYENgIGFuZCBgQmAgd2VyZSBhbGwgd2Fsa2VkLCBidXQgb25seSBgQmAgd2FzICFUUkVFU0FNRSwgc28gdGhlIG90aGVycworZG8gbm90IGFwcGVhci4KKysKK05vdGUgdGhhdCB3aXRob3V0IHBhcmVudCByZXdyaXRpbmcsIGl0IGlzIG5vdCByZWFsbHkgcG9zc2libGUgdG8gdGFsaworYWJvdXQgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGNvbW1pdHMsIHNvIHdlIHNob3cKK3RoZW0gZGlzY29ubmVjdGVkLgorCistLWZ1bGwtaGlzdG9yeSB3aXRoIHBhcmVudCByZXdyaXRpbmc6OgorCisJT3JkaW5hcnkgY29tbWl0cyBhcmUgb25seSBpbmNsdWRlZCBpZiB0aGV5IGFyZSAhVFJFRVNBTUUKKwkodGhvdWdoIHRoaXMgY2FuIGJlIGNoYW5nZWQsIHNlZSAnXC0tc3BhcnNlJyBiZWxvdykuCisrCitNZXJnZXMgYXJlIGFsd2F5cyBpbmNsdWRlZC4gIEhvd2V2ZXIsIHRoZWlyIHBhcmVudCBsaXN0IGlzIHJld3JpdHRlbjoKK0Fsb25nIGVhY2ggcGFyZW50LCBwcnVuZSBhd2F5IGNvbW1pdHMgdGhhdCBhcmUgbm90IGluY2x1ZGVkCit0aGVtc2VsdmVzLiAgVGhpcyByZXN1bHRzIGluCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgLi1BLS0tTS0tLU4tLS1PLS0tUAorCSAvICAgICAvICAgLyAgIC8gICAvCisJSSAgICAgQiAgIC8gICBEICAgLworCSBcICAgLyAgIC8gICAvICAgLworCSAgYC0tLS0tLS0tLS0tLS0nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworQ29tcGFyZSB0byAnXC0tZnVsbC1oaXN0b3J5JyB3aXRob3V0IHJld3JpdGluZyBhYm92ZS4gIE5vdGUgdGhhdCBgRWAKK3dhcyBwcnVuZWQgYXdheSBiZWNhdXNlIGl0IGlzIFRSRUVTQU1FLCBidXQgdGhlIHBhcmVudCBsaXN0IG9mIFAgd2FzCityZXdyaXR0ZW4gdG8gY29udGFpbiBgRWAncyBwYXJlbnQgYElgLiAgVGhlIHNhbWUgaGFwcGVuZWQgZm9yIGBDYCBhbmQKK2BOYC4gIE5vdGUgYWxzbyB0aGF0IGBQYCB3YXMgaW5jbHVkZWQgZGVzcGl0ZSBiZWluZyBUUkVFU0FNRS4KKworSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIHNldHRpbmdzLCB5b3UgY2FuIGNoYW5nZSB3aGV0aGVyIFRSRUVTQU1FCithZmZlY3RzIGluY2x1c2lvbjoKKworLS1kZW5zZTo6CisKKwlDb21taXRzIHRoYXQgYXJlIHdhbGtlZCBhcmUgaW5jbHVkZWQgaWYgdGhleSBhcmUgbm90IFRSRUVTQU1FCisJdG8gYW55IHBhcmVudC4KKworLS1zcGFyc2U6OgorCisJQWxsIGNvbW1pdHMgdGhhdCBhcmUgd2Fsa2VkIGFyZSBpbmNsdWRlZC4KKysKK05vdGUgdGhhdCB3aXRob3V0ICdcLS1mdWxsLWhpc3RvcnknLCB0aGlzIHN0aWxsIHNpbXBsaWZpZXMgbWVyZ2VzOiBpZgorb25lIG9mIHRoZSBwYXJlbnRzIGlzIFRSRUVTQU1FLCB3ZSBmb2xsb3cgb25seSB0aGF0IG9uZSwgc28gdGhlIG90aGVyCitzaWRlcyBvZiB0aGUgbWVyZ2UgYXJlIG5ldmVyIHdhbGtlZC4KKworLS1zaW1wbGlmeS1tZXJnZXM6OgorCisJRmlyc3QsIGJ1aWxkIGEgaGlzdG9yeSBncmFwaCBpbiB0aGUgc2FtZSB3YXkgdGhhdAorCSdcLS1mdWxsLWhpc3RvcnknIHdpdGggcGFyZW50IHJld3JpdGluZyBkb2VzIChzZWUgYWJvdmUpLgorKworVGhlbiBzaW1wbGlmeSBlYWNoIGNvbW1pdCBgQ2AgdG8gaXRzIHJlcGxhY2VtZW50IGBDJ2AgaW4gdGhlIGZpbmFsCitoaXN0b3J5IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOgorKworLS0KKyogU2V0IGBDJ2AgdG8gYENgLgorKworKiBSZXBsYWNlIGVhY2ggcGFyZW50IGBQYCBvZiBgQydgIHdpdGggaXRzIHNpbXBsaWZpY2F0aW9uIGBQJ2AuICBJbgorICB0aGUgcHJvY2VzcywgZHJvcCBwYXJlbnRzIHRoYXQgYXJlIGFuY2VzdG9ycyBvZiBvdGhlciBwYXJlbnRzLCBhbmQKKyAgcmVtb3ZlIGR1cGxpY2F0ZXMuCisrCisqIElmIGFmdGVyIHRoaXMgcGFyZW50IHJld3JpdGluZywgYEMnYCBpcyBhIHJvb3Qgb3IgbWVyZ2UgY29tbWl0IChoYXMKKyAgemVybyBvciA+MSBwYXJlbnRzKSwgYSBib3VuZGFyeSBjb21taXQsIG9yICFUUkVFU0FNRSwgaXQgcmVtYWlucy4KKyAgT3RoZXJ3aXNlLCBpdCBpcyByZXBsYWNlZCB3aXRoIGl0cyBvbmx5IHBhcmVudC4KKy0tCisrCitUaGUgZWZmZWN0IG9mIHRoaXMgaXMgYmVzdCBzaG93biBieSB3YXkgb2YgY29tcGFyaW5nIHRvCisnXC0tZnVsbC1oaXN0b3J5JyB3aXRoIHBhcmVudCByZXdyaXRpbmcuICBUaGUgZXhhbXBsZSB0dXJucyBpbnRvOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgIC4tQS0tLU0tLS1OLS0tTworCSAvICAgICAvICAgICAgIC8KKwlJICAgICBCICAgICAgIEQKKwkgXCAgIC8gICAgICAgLworCSAgYC0tLS0tLS0tLScKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitOb3RlIHRoZSBtYWpvciBkaWZmZXJlbmNlcyBpbiBgTmAgYW5kIGBQYCBvdmVyICctLWZ1bGwtaGlzdG9yeSc6CisrCistLQorKiBgTmAncyBwYXJlbnQgbGlzdCBoYWQgYElgIHJlbW92ZWQsIGJlY2F1c2UgaXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlCisgIG90aGVyIHBhcmVudCBgTWAuICBTdGlsbCwgYE5gIHJlbWFpbmVkIGJlY2F1c2UgaXQgaXMgIVRSRUVTQU1FLgorKworKiBgUGAncyBwYXJlbnQgbGlzdCBzaW1pbGFybHkgaGFkIGBJYCByZW1vdmVkLiAgYFBgIHdhcyB0aGVuCisgIHJlbW92ZWQgY29tcGxldGVseSwgYmVjYXVzZSBpdCBoYWQgb25lIHBhcmVudCBhbmQgaXMgVFJFRVNBTUUuCistLQorCitGaW5hbGx5LCB0aGVyZSBpcyBhIGZpZnRoIHNpbXBsaWZpY2F0aW9uIG1vZGUgYXZhaWxhYmxlOgorCistLWFuY2VzdHJ5LXBhdGg6OgorCisJTGltaXQgdGhlIGRpc3BsYXllZCBjb21taXRzIHRvIHRob3NlIGRpcmVjdGx5IG9uIHRoZSBhbmNlc3RyeQorCWNoYWluIGJldHdlZW4gdGhlICJmcm9tIiBhbmQgInRvIiBjb21taXRzIGluIHRoZSBnaXZlbiBjb21taXQKKwlyYW5nZS4gSS5lLiBvbmx5IGRpc3BsYXkgY29tbWl0cyB0aGF0IGFyZSBhbmNlc3RvciBvZiB0aGUgInRvIgorCWNvbW1pdCwgYW5kIGRlc2NlbmRhbnRzIG9mIHRoZSAiZnJvbSIgY29tbWl0LgorKworQXMgYW4gZXhhbXBsZSB1c2UgY2FzZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBjb21taXQgaGlzdG9yeToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgIEQtLS1FLS0tLS0tLUYKKwkgICAvICAgICBcICAgICAgIFwKKwkgIEItLS1DLS0tRy0tLUgtLS1JLS0tSgorCSAvICAgICAgICAgICAgICAgICAgICAgXAorCUEtLS0tLS0tSy0tLS0tLS0tLS0tLS0tLUwtLU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitBIHJlZ3VsYXIgJ0QuLk0nIGNvbXB1dGVzIHRoZSBzZXQgb2YgY29tbWl0cyB0aGF0IGFyZSBhbmNlc3RvcnMgb2YgYE1gLAorYnV0IGV4Y2x1ZGVzIHRoZSBvbmVzIHRoYXQgYXJlIGFuY2VzdG9ycyBvZiBgRGAuIFRoaXMgaXMgdXNlZnVsIHRvIHNlZQord2hhdCBoYXBwZW5lZCB0byB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIGBNYCBzaW5jZSBgRGAsIGluIHRoZSBzZW5zZQordGhhdCAid2hhdCBkb2VzIGBNYCBoYXZlIHRoYXQgZGlkIG5vdCBleGlzdCBpbiBgRGAiLiBUaGUgcmVzdWx0IGluIHRoaXMKK2V4YW1wbGUgd291bGQgYmUgYWxsIHRoZSBjb21taXRzLCBleGNlcHQgYEFgIGFuZCBgQmAgKGFuZCBgRGAgaXRzZWxmLAorb2YgY291cnNlKS4KKysKK1doZW4gd2Ugd2FudCB0byBmaW5kIG91dCB3aGF0IGNvbW1pdHMgaW4gYE1gIGFyZSBjb250YW1pbmF0ZWQgd2l0aCB0aGUKK2J1ZyBpbnRyb2R1Y2VkIGJ5IGBEYCBhbmQgbmVlZCBmaXhpbmcsIGhvd2V2ZXIsIHdlIG1pZ2h0IHdhbnQgdG8gdmlldworb25seSB0aGUgc3Vic2V0IG9mICdELi5NJyB0aGF0IGFyZSBhY3R1YWxseSBkZXNjZW5kYW50cyBvZiBgRGAsIGkuZS4KK2V4Y2x1ZGluZyBgQ2AgYW5kIGBLYC4gVGhpcyBpcyBleGFjdGx5IHdoYXQgdGhlICctLWFuY2VzdHJ5LXBhdGgnCitvcHRpb24gZG9lcy4gQXBwbGllZCB0byB0aGUgJ0QuLk0nIHJhbmdlLCBpdCByZXN1bHRzIGluOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJRS0tLS0tLS1GCisJCSBcICAgICAgIFwKKwkJICBHLS0tSC0tLUktLS1KCisJCQkgICAgICAgXAorCQkJCUwtLU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnXC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbicgb3B0aW9uIGFsbG93cyB5b3UgdG8gdmlldyBvbmx5IHRoZQorYmlnIHBpY3R1cmUgb2YgdGhlIHRvcG9sb2d5IG9mIHRoZSBoaXN0b3J5LCBieSBvbWl0dGluZyBjb21taXRzCit0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieSB0YWdzLiAgQ29tbWl0cyBhcmUgbWFya2VkIGFzICFUUkVFU0FNRQorKGluIG90aGVyIHdvcmRzLCBrZXB0IGFmdGVyIGhpc3Rvcnkgc2ltcGxpZmljYXRpb24gcnVsZXMgZGVzY3JpYmVkCithYm92ZSkgaWYgKDEpIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkgdGFncywgb3IgKDIpIHRoZXkgY2hhbmdlIHRoZQorY29udGVudHMgb2YgdGhlIHBhdGhzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuICBBbGwgb3RoZXIKK2NvbW1pdHMgYXJlIG1hcmtlZCBhcyBUUkVFU0FNRSAoc3ViamVjdCB0byBiZSBzaW1wbGlmaWVkIGF3YXkpLgorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KK0Jpc2VjdGlvbiBIZWxwZXJzCit+fn5+fn5+fn5+fn5+fn5+fgorCistLWJpc2VjdDo6CisKK0xpbWl0IG91dHB1dCB0byB0aGUgb25lIGNvbW1pdCBvYmplY3Qgd2hpY2ggaXMgcm91Z2hseSBoYWxmd2F5IGJldHdlZW4KK2luY2x1ZGVkIGFuZCBleGNsdWRlZCBjb21taXRzLiBOb3RlIHRoYXQgdGhlIGJhZCBiaXNlY3Rpb24gcmVmCitgcmVmcy9iaXNlY3QvYmFkYCBpcyBhZGRlZCB0byB0aGUgaW5jbHVkZWQgY29tbWl0cyAoaWYgaXQKK2V4aXN0cykgYW5kIHRoZSBnb29kIGJpc2VjdGlvbiByZWZzIGByZWZzL2Jpc2VjdC9nb29kLSpgIGFyZQorYWRkZWQgdG8gdGhlIGV4Y2x1ZGVkIGNvbW1pdHMgKGlmIHRoZXkgZXhpc3QpLiBUaHVzLCBzdXBwb3NpbmcgdGhlcmUKK2FyZSBubyByZWZzIGluIGByZWZzL2Jpc2VjdC9gLCBpZgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSQgZ2l0IHJldi1saXN0IC0tYmlzZWN0IGZvbyBeYmFyIF5iYXoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK291dHB1dHMgJ21pZHBvaW50JywgdGhlIG91dHB1dCBvZiB0aGUgdHdvIGNvbW1hbmRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJJCBnaXQgcmV2LWxpc3QgZm9vIF5taWRwb2ludAorCSQgZ2l0IHJldi1saXN0IG1pZHBvaW50IF5iYXIgXmJhegorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword291bGQgYmUgb2Ygcm91Z2hseSB0aGUgc2FtZSBsZW5ndGguICBGaW5kaW5nIHRoZSBjaGFuZ2Ugd2hpY2gKK2ludHJvZHVjZXMgYSByZWdyZXNzaW9uIGlzIHRodXMgcmVkdWNlZCB0byBhIGJpbmFyeSBzZWFyY2g6IHJlcGVhdGVkbHkKK2dlbmVyYXRlIGFuZCB0ZXN0IG5ldyAnbWlkcG9pbnQncyB1bnRpbCB0aGUgY29tbWl0IGNoYWluIGlzIG9mIGxlbmd0aAorb25lLgorCistLWJpc2VjdC12YXJzOjoKKworVGhpcyBjYWxjdWxhdGVzIHRoZSBzYW1lIGFzIGAtLWJpc2VjdGAsIGV4Y2VwdCB0aGF0IHJlZnMgaW4KK2ByZWZzL2Jpc2VjdC9gIGFyZSBub3QgdXNlZCwgYW5kIGV4Y2VwdCB0aGF0IHRoaXMgb3V0cHV0cwordGV4dCByZWFkeSB0byBiZSBldmFsJ2VkIGJ5IHRoZSBzaGVsbC4gVGhlc2UgbGluZXMgd2lsbCBhc3NpZ24gdGhlCituYW1lIG9mIHRoZSBtaWRwb2ludCByZXZpc2lvbiB0byB0aGUgdmFyaWFibGUgYGJpc2VjdF9yZXZgLCBhbmQgdGhlCitleHBlY3RlZCBudW1iZXIgb2YgY29tbWl0cyB0byBiZSB0ZXN0ZWQgYWZ0ZXIgYGJpc2VjdF9yZXZgIGlzIHRlc3RlZAordG8gYGJpc2VjdF9ucmAsIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgY29tbWl0cyB0byBiZSB0ZXN0ZWQgaWYKK2BiaXNlY3RfcmV2YCB0dXJucyBvdXQgdG8gYmUgZ29vZCB0byBgYmlzZWN0X2dvb2RgLCB0aGUgZXhwZWN0ZWQKK251bWJlciBvZiBjb21taXRzIHRvIGJlIHRlc3RlZCBpZiBgYmlzZWN0X3JldmAgdHVybnMgb3V0IHRvIGJlIGJhZCB0bworYGJpc2VjdF9iYWRgLCBhbmQgdGhlIG51bWJlciBvZiBjb21taXRzIHdlIGFyZSBiaXNlY3RpbmcgcmlnaHQgbm93IHRvCitgYmlzZWN0X2FsbGAuCisKKy0tYmlzZWN0LWFsbDo6CisKK1RoaXMgb3V0cHV0cyBhbGwgdGhlIGNvbW1pdCBvYmplY3RzIGJldHdlZW4gdGhlIGluY2x1ZGVkIGFuZCBleGNsdWRlZAorY29tbWl0cywgb3JkZXJlZCBieSB0aGVpciBkaXN0YW5jZSB0byB0aGUgaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkCitjb21taXRzLiBSZWZzIGluIGByZWZzL2Jpc2VjdC9gIGFyZSBub3QgdXNlZC4gVGhlIGZhcnRoZXN0Citmcm9tIHRoZW0gaXMgZGlzcGxheWVkIGZpcnN0LiAoVGhpcyBpcyB0aGUgb25seSBvbmUgZGlzcGxheWVkIGJ5CitgLS1iaXNlY3RgLikKKysKK1RoaXMgaXMgdXNlZnVsIGJlY2F1c2UgaXQgbWFrZXMgaXQgZWFzeSB0byBjaG9vc2UgYSBnb29kIGNvbW1pdCB0bwordGVzdCB3aGVuIHlvdSB3YW50IHRvIGF2b2lkIHRvIHRlc3Qgc29tZSBvZiB0aGVtIGZvciBzb21lIHJlYXNvbiAodGhleQorbWF5IG5vdCBjb21waWxlIGZvciBleGFtcGxlKS4KKysKK1RoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIGFsb25nIHdpdGggYC0tYmlzZWN0LXZhcnNgLCBpbiB0aGlzIGNhc2UsCithZnRlciBhbGwgdGhlIHNvcnRlZCBjb21taXQgb2JqZWN0cywgdGhlcmUgd2lsbCBiZSB0aGUgc2FtZSB0ZXh0IGFzIGlmCitgLS1iaXNlY3QtdmFyc2AgaGFkIGJlZW4gdXNlZCBhbG9uZS4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCisKK0NvbW1pdCBPcmRlcmluZworfn5+fn5+fn5+fn5+fn5+CisKK0J5IGRlZmF1bHQsIHRoZSBjb21taXRzIGFyZSBzaG93biBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKy0tZGF0ZS1vcmRlcjo6CisJU2hvdyBubyBwYXJlbnRzIGJlZm9yZSBhbGwgb2YgaXRzIGNoaWxkcmVuIGFyZSBzaG93biwgYnV0CisJb3RoZXJ3aXNlIHNob3cgY29tbWl0cyBpbiB0aGUgY29tbWl0IHRpbWVzdGFtcCBvcmRlci4KKworLS10b3BvLW9yZGVyOjoKKwlTaG93IG5vIHBhcmVudHMgYmVmb3JlIGFsbCBvZiBpdHMgY2hpbGRyZW4gYXJlIHNob3duLCBhbmQKKwlhdm9pZCBzaG93aW5nIGNvbW1pdHMgb24gbXVsdGlwbGUgbGluZXMgb2YgaGlzdG9yeQorCWludGVybWl4ZWQuCisrCitGb3IgZXhhbXBsZSwgaW4gYSBjb21taXQgaGlzdG9yeSBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAtLS0xLS0tLTItLS0tNC0tLS03CisJXAkgICAgICAgXAorCSAzLS0tLTUtLS0tNi0tLS04LS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK3doZXJlIHRoZSBudW1iZXJzIGRlbm90ZSB0aGUgb3JkZXIgb2YgY29tbWl0IHRpbWVzdGFtcHMsIGBnaXQKK3Jldi1saXN0YCBhbmQgZnJpZW5kcyB3aXRoIGAtLWRhdGUtb3JkZXJgIHNob3cgdGhlIGNvbW1pdHMgaW4gdGhlCit0aW1lc3RhbXAgb3JkZXI6IDggNyA2IDUgNCAzIDIgMS4KKysKK1dpdGggYC0tdG9wby1vcmRlcmAsIHRoZXkgd291bGQgc2hvdyA4IDYgNSAzIDcgNCAyIDEgKG9yIDggNyA0IDIgNiA1CiszIDEpOyBzb21lIG9sZGVyIGNvbW1pdHMgYXJlIHNob3duIGJlZm9yZSBuZXdlciBvbmVzIGluIG9yZGVyIHRvCithdm9pZCBzaG93aW5nIHRoZSBjb21taXRzIGZyb20gdHdvIHBhcmFsbGVsIGRldmVsb3BtZW50IHRyYWNrIG1peGVkCit0b2dldGhlci4KKworLS1yZXZlcnNlOjoKKworCU91dHB1dCB0aGUgY29tbWl0cyBpbiByZXZlcnNlIG9yZGVyLgorCUNhbm5vdCBiZSBjb21iaW5lZCB3aXRoICdcLS13YWxrLXJlZmxvZ3MnLgorCitPYmplY3QgVHJhdmVyc2FsCit+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXNlIG9wdGlvbnMgYXJlIG1vc3RseSB0YXJnZXRlZCBmb3IgcGFja2luZyBvZiBnaXQgcmVwb3NpdG9yaWVzLgorCistLW9iamVjdHM6OgorCisJUHJpbnQgdGhlIG9iamVjdCBJRHMgb2YgYW55IG9iamVjdCByZWZlcmVuY2VkIGJ5IHRoZSBsaXN0ZWQKKwljb21taXRzLiAgJy0tb2JqZWN0cyBmb28gXmJhcicgdGh1cyBtZWFucyAic2VuZCBtZQorCWFsbCBvYmplY3QgSURzIHdoaWNoIEkgbmVlZCB0byBkb3dubG9hZCBpZiBJIGhhdmUgdGhlIGNvbW1pdAorCW9iamVjdCAnYmFyJywgYnV0IG5vdCAnZm9vJyIuCisKKy0tb2JqZWN0cy1lZGdlOjoKKworCVNpbWlsYXIgdG8gJy0tb2JqZWN0cycsIGJ1dCBhbHNvIHByaW50IHRoZSBJRHMgb2YgZXhjbHVkZWQKKwljb21taXRzIHByZWZpeGVkIHdpdGggYSAiLSIgY2hhcmFjdGVyLiAgVGhpcyBpcyB1c2VkIGJ5CisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdIHRvIGJ1aWxkICJ0aGluIiBwYWNrLCB3aGljaCByZWNvcmRzCisJb2JqZWN0cyBpbiBkZWx0aWZpZWQgZm9ybSBiYXNlZCBvbiBvYmplY3RzIGNvbnRhaW5lZCBpbiB0aGVzZQorCWV4Y2x1ZGVkIGNvbW1pdHMgdG8gcmVkdWNlIG5ldHdvcmsgdHJhZmZpYy4KKworLS11bnBhY2tlZDo6CisKKwlPbmx5IHVzZWZ1bCB3aXRoICctLW9iamVjdHMnOyBwcmludCB0aGUgb2JqZWN0IElEcyB0aGF0IGFyZSBub3QKKwlpbiBwYWNrcy4KKworLS1uby13YWxrWz0oc29ydGVkfHVuc29ydGVkKV06OgorCisJT25seSBzaG93IHRoZSBnaXZlbiBjb21taXRzLCBidXQgZG8gbm90IHRyYXZlcnNlIHRoZWlyIGFuY2VzdG9ycy4KKwlUaGlzIGhhcyBubyBlZmZlY3QgaWYgYSByYW5nZSBpcyBzcGVjaWZpZWQuIElmIHRoZSBhcmd1bWVudAorCSJ1bnNvcnRlZCIgaXMgZ2l2ZW4sIHRoZSBjb21taXRzIGFyZSBzaG93IGluIHRoZSBvcmRlciB0aGV5IHdlcmUKKwlnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiBPdGhlcndpc2UgKGlmICJzb3J0ZWQiIG9yIG5vIGFyZ3VtZW50CisJd2FzIGdpdmVuKSwgdGhlIGNvbW1pdHMgYXJlIHNob3cgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyCisJYnkgY29tbWl0IHRpbWUuCisKKy0tZG8td2Fsazo6CisKKwlPdmVycmlkZXMgYSBwcmV2aW91cyAtLW5vLXdhbGsuCisKK0NvbW1pdCBGb3JtYXR0aW5nCit+fn5+fn5+fn5+fn5+fn5+fgorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KK1VzaW5nIHRoZXNlIG9wdGlvbnMsIGxpbmtnaXQ6Z2l0LXJldi1saXN0WzFdIHdpbGwgYWN0IHNpbWlsYXIgdG8gdGhlCittb3JlIHNwZWNpYWxpemVkIGZhbWlseSBvZiBjb21taXQgbG9nIHRvb2xzOiBsaW5rZ2l0OmdpdC1sb2dbMV0sCitsaW5rZ2l0OmdpdC1zaG93WzFdLCBhbmQgbGlua2dpdDpnaXQtd2hhdGNoYW5nZWRbMV0KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCitpbmNsdWRlOjpwcmV0dHktb3B0aW9ucy50eHRbXQorCistLXJlbGF0aXZlLWRhdGU6OgorCisJU3lub255bSBmb3IgYC0tZGF0ZT1yZWxhdGl2ZWAuCisKKy0tZGF0ZT0ocmVsYXRpdmV8bG9jYWx8ZGVmYXVsdHxpc298cmZjfHNob3J0fHJhdyk6OgorCisJT25seSB0YWtlcyBlZmZlY3QgZm9yIGRhdGVzIHNob3duIGluIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCwgc3VjaAorCWFzIHdoZW4gdXNpbmcgIi0tcHJldHR5Ii4gYGxvZy5kYXRlYCBjb25maWcgdmFyaWFibGUgc2V0cyBhIGRlZmF1bHQKKwl2YWx1ZSBmb3IgbG9nIGNvbW1hbmQncyAtLWRhdGUgb3B0aW9uLgorKworYC0tZGF0ZT1yZWxhdGl2ZWAgc2hvd3MgZGF0ZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZSwKK2UuZy4gIjIgaG91cnMgYWdvIi4KKysKK2AtLWRhdGU9bG9jYWxgIHNob3dzIHRpbWVzdGFtcHMgaW4gdXNlcidzIGxvY2FsIHRpbWV6b25lLgorKworYC0tZGF0ZT1pc29gIChvciBgLS1kYXRlPWlzbzg2MDFgKSBzaG93cyB0aW1lc3RhbXBzIGluIElTTyA4NjAxIGZvcm1hdC4KKysKK2AtLWRhdGU9cmZjYCAob3IgYC0tZGF0ZT1yZmMyODIyYCkgc2hvd3MgdGltZXN0YW1wcyBpbiBSRkMgMjgyMgorZm9ybWF0LCBvZnRlbiBmb3VuZCBpbiBFLW1haWwgbWVzc2FnZXMuCisrCitgLS1kYXRlPXNob3J0YCBzaG93cyBvbmx5IGRhdGUgYnV0IG5vdCB0aW1lLCBpbiBgWVlZWS1NTS1ERGAgZm9ybWF0LgorKworYC0tZGF0ZT1yYXdgIHNob3dzIHRoZSBkYXRlIGluIHRoZSBpbnRlcm5hbCByYXcgZ2l0IGZvcm1hdCBgJXMgJXpgIGZvcm1hdC4KKysKK2AtLWRhdGU9ZGVmYXVsdGAgc2hvd3MgdGltZXN0YW1wcyBpbiB0aGUgb3JpZ2luYWwgdGltZXpvbmUKKyhlaXRoZXIgY29tbWl0dGVyJ3Mgb3IgYXV0aG9yJ3MpLgorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KKy0taGVhZGVyOjoKKworCVByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgY29tbWl0IGluIHJhdy1mb3JtYXQ7IGVhY2ggcmVjb3JkIGlzCisJc2VwYXJhdGVkIHdpdGggYSBOVUwgY2hhcmFjdGVyLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKKy0tcGFyZW50czo6CisKKwlQcmludCBhbHNvIHRoZSBwYXJlbnRzIG9mIHRoZSBjb21taXQgKGluIHRoZSBmb3JtICJjb21taXQgcGFyZW50Li4uIikuCisJQWxzbyBlbmFibGVzIHBhcmVudCByZXdyaXRpbmcsIHNlZSAnSGlzdG9yeSBTaW1wbGlmaWNhdGlvbicgYmVsb3cuCisKKy0tY2hpbGRyZW46OgorCisJUHJpbnQgYWxzbyB0aGUgY2hpbGRyZW4gb2YgdGhlIGNvbW1pdCAoaW4gdGhlIGZvcm0gImNvbW1pdCBjaGlsZC4uLiIpLgorCUFsc28gZW5hYmxlcyBwYXJlbnQgcmV3cml0aW5nLCBzZWUgJ0hpc3RvcnkgU2ltcGxpZmljYXRpb24nIGJlbG93LgorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KKy0tdGltZXN0YW1wOjoKKwlQcmludCB0aGUgcmF3IGNvbW1pdCB0aW1lc3RhbXAuCitlbmRpZjo6Z2l0LXJldi1saXN0W10KKworLS1sZWZ0LXJpZ2h0OjoKKworCU1hcmsgd2hpY2ggc2lkZSBvZiBhIHN5bW1ldHJpYyBkaWZmIGEgY29tbWl0IGlzIHJlYWNoYWJsZSBmcm9tLgorCUNvbW1pdHMgZnJvbSB0aGUgbGVmdCBzaWRlIGFyZSBwcmVmaXhlZCB3aXRoIGA8YCBhbmQgdGhvc2UgZnJvbQorCXRoZSByaWdodCB3aXRoIGA+YC4gIElmIGNvbWJpbmVkIHdpdGggYC0tYm91bmRhcnlgLCB0aG9zZQorCWNvbW1pdHMgYXJlIHByZWZpeGVkIHdpdGggYC1gLgorKworRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHRoaXMgdG9wb2xvZ3k6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAgeS0tLWItLS1iICBicmFuY2ggQgorCSAgICAvIFwgLworCSAgIC8gICAuCisJICAvICAgLyBcCisJIG8tLS14LS0tYS0tLWEgIGJyYW5jaCBBCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworeW91IHdvdWxkIGdldCBhbiBvdXRwdXQgbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkkIGdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1ib3VuZGFyeSAtLXByZXR0eT1vbmVsaW5lIEEuLi5CCisKKwk+YmJiYmJiYi4uLiAzcmQgb24gYgorCT5iYmJiYmJiLi4uIDJuZCBvbiBiCisJPGFhYWFhYWEuLi4gM3JkIG9uIGEKKwk8YWFhYWFhYS4uLiAybmQgb24gYQorCS15eXl5eXl5Li4uIDFzdCBvbiBiCisJLXh4eHh4eHguLi4gMXN0IG9uIGEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tZ3JhcGg6OgorCisJRHJhdyBhIHRleHQtYmFzZWQgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21taXQgaGlzdG9yeQorCW9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiB0aGUgb3V0cHV0LiAgVGhpcyBtYXkgY2F1c2UgZXh0cmEgbGluZXMKKwl0byBiZSBwcmludGVkIGluIGJldHdlZW4gY29tbWl0cywgaW4gb3JkZXIgZm9yIHRoZSBncmFwaCBoaXN0b3J5CisJdG8gYmUgZHJhd24gcHJvcGVybHkuCisrCitUaGlzIGVuYWJsZXMgcGFyZW50IHJld3JpdGluZywgc2VlICdIaXN0b3J5IFNpbXBsaWZpY2F0aW9uJyBiZWxvdy4KKysKK1RoaXMgaW1wbGllcyB0aGUgJy0tdG9wby1vcmRlcicgb3B0aW9uIGJ5IGRlZmF1bHQsIGJ1dCB0aGUKKyctLWRhdGUtb3JkZXInIG9wdGlvbiBtYXkgYWxzbyBiZSBzcGVjaWZpZWQuCisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorLS1jb3VudDo6CisJUHJpbnQgYSBudW1iZXIgc3RhdGluZyBob3cgbWFueSBjb21taXRzIHdvdWxkIGhhdmUgYmVlbgorCWxpc3RlZCwgYW5kIHN1cHByZXNzIGFsbCBvdGhlciBvdXRwdXQuICBXaGVuIHVzZWQgdG9nZXRoZXIKKwl3aXRoICctLWxlZnQtcmlnaHQnLCBpbnN0ZWFkIHByaW50IHRoZSBjb3VudHMgZm9yIGxlZnQgYW5kCisJcmlnaHQgY29tbWl0cywgc2VwYXJhdGVkIGJ5IGEgdGFiLiBXaGVuIHVzZWQgdG9nZXRoZXIgd2l0aAorCSctLWNoZXJyeS1tYXJrJywgb21pdCBwYXRjaCBlcXVpdmFsZW50IGNvbW1pdHMgZnJvbSB0aGVzZQorCWNvdW50cyBhbmQgcHJpbnQgdGhlIGNvdW50IGZvciBlcXVpdmFsZW50IGNvbW1pdHMgc2VwYXJhdGVkCisJYnkgYSB0YWIuCitlbmRpZjo6Z2l0LXJldi1saXN0W10KKworCitpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCitEaWZmIEZvcm1hdHRpbmcKK35+fn5+fn5+fn5+fn5+fgorCitCZWxvdyBhcmUgbGlzdGVkIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBmb3JtYXR0aW5nIG9mIGRpZmYgb3V0cHV0LgorU29tZSBvZiB0aGVtIGFyZSBzcGVjaWZpYyB0byBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSwgaG93ZXZlciBvdGhlciBkaWZmCitvcHRpb25zIG1heSBiZSBnaXZlbi4gU2VlIGxpbmtnaXQ6Z2l0LWRpZmYtZmlsZXNbMV0gZm9yIG1vcmUgb3B0aW9ucy4KKworLWM6OgorCisJV2l0aCB0aGlzIG9wdGlvbiwgZGlmZiBvdXRwdXQgZm9yIGEgbWVyZ2UgY29tbWl0CisJc2hvd3MgdGhlIGRpZmZlcmVuY2VzIGZyb20gZWFjaCBvZiB0aGUgcGFyZW50cyB0byB0aGUgbWVyZ2UgcmVzdWx0CisJc2ltdWx0YW5lb3VzbHkgaW5zdGVhZCBvZiBzaG93aW5nIHBhaXJ3aXNlIGRpZmYgYmV0d2VlbiBhIHBhcmVudAorCWFuZCB0aGUgcmVzdWx0IG9uZSBhdCBhIHRpbWUuIEZ1cnRoZXJtb3JlLCBpdCBsaXN0cyBvbmx5IGZpbGVzCisJd2hpY2ggd2VyZSBtb2RpZmllZCBmcm9tIGFsbCBwYXJlbnRzLgorCistLWNjOjoKKworCVRoaXMgZmxhZyBpbXBsaWVzIHRoZSAnLWMnIG9wdGlvbiBhbmQgZnVydGhlciBjb21wcmVzc2VzIHRoZQorCXBhdGNoIG91dHB1dCBieSBvbWl0dGluZyB1bmludGVyZXN0aW5nIGh1bmtzIHdob3NlIGNvbnRlbnRzIGluCisJdGhlIHBhcmVudHMgaGF2ZSBvbmx5IHR3byB2YXJpYW50cyBhbmQgdGhlIG1lcmdlIHJlc3VsdCBwaWNrcworCW9uZSBvZiB0aGVtIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorCistbTo6CisKKwlUaGlzIGZsYWcgbWFrZXMgdGhlIG1lcmdlIGNvbW1pdHMgc2hvdyB0aGUgZnVsbCBkaWZmIGxpa2UKKwlyZWd1bGFyIGNvbW1pdHM7IGZvciBlYWNoIG1lcmdlIHBhcmVudCwgYSBzZXBhcmF0ZSBsb2cgZW50cnkKKwlhbmQgZGlmZiBpcyBnZW5lcmF0ZWQuIEFuIGV4Y2VwdGlvbiBpcyB0aGF0IG9ubHkgZGlmZiBhZ2FpbnN0CisJdGhlIGZpcnN0IHBhcmVudCBpcyBzaG93biB3aGVuICctLWZpcnN0LXBhcmVudCcgb3B0aW9uIGlzIGdpdmVuOworCWluIHRoYXQgY2FzZSwgdGhlIG91dHB1dCByZXByZXNlbnRzIHRoZSBjaGFuZ2VzIHRoZSBtZXJnZQorCWJyb3VnaHQgX2ludG9fIHRoZSB0aGVuLWN1cnJlbnQgYnJhbmNoLgorCistcjo6CisKKwlTaG93IHJlY3Vyc2l2ZSBkaWZmcy4KKworLXQ6OgorCisJU2hvdyB0aGUgdHJlZSBvYmplY3RzIGluIHRoZSBkaWZmIG91dHB1dC4gVGhpcyBpbXBsaWVzICctcicuCisKKy1zOjoKKwlTdXBwcmVzcyBkaWZmIG91dHB1dC4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MWZjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3JldmlzaW9ucy50eHQKQEAgLTAsMCArMSwyNzAgQEAKK1NQRUNJRllJTkcgUkVWSVNJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHJldmlzaW9uIHBhcmFtZXRlciAnPHJldj4nIHR5cGljYWxseSwgYnV0IG5vdCBuZWNlc3NhcmlseSwgbmFtZXMgYQorY29tbWl0IG9iamVjdC4gIEl0IHVzZXMgd2hhdCBpcyBjYWxsZWQgYW4gJ2V4dGVuZGVkIFNIQTEnCitzeW50YXguICBIZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gc3BlbGwgb2JqZWN0IG5hbWVzLiAgVGhlCitvbmVzIGxpc3RlZCBuZWFyIHRoZSBlbmQgb2YgdGhpcyBsaXN0IG5hbWUgdHJlZXMgYW5kCitibG9icyBjb250YWluZWQgaW4gYSBjb21taXQuCisKKyc8c2hhMT4nLCBlLmcuICdkYWU4NmUxOTUwYjEyNzdlNTQ1Y2VlMTgwNTUxNzUwMDI5Y2ZlNzM1JywgJ2RhZTg2ZSc6OgorICBUaGUgZnVsbCBTSEExIG9iamVjdCBuYW1lICg0MC1ieXRlIGhleGFkZWNpbWFsIHN0cmluZyksIG9yCisgIGEgbGVhZGluZyBzdWJzdHJpbmcgdGhhdCBpcyB1bmlxdWUgd2l0aGluIHRoZSByZXBvc2l0b3J5LgorICBFLmcuIGRhZTg2ZTE5NTBiMTI3N2U1NDVjZWUxODA1NTE3NTAwMjljZmU3MzUgYW5kIGRhZTg2ZSBib3RoCisgIG5hbWUgdGhlIHNhbWUgY29tbWl0IG9iamVjdCBpZiB0aGVyZSBpcyBubyBvdGhlciBvYmplY3QgaW4KKyAgeW91ciByZXBvc2l0b3J5IHdob3NlIG9iamVjdCBuYW1lIHN0YXJ0cyB3aXRoIGRhZTg2ZS4KKworJzxkZXNjcmliZU91dHB1dD4nLCBlLmcuICd2MS43LjQuMi02NzktZzNiZWU3ZmInOjoKKyAgT3V0cHV0IGZyb20gYGdpdCBkZXNjcmliZWA7IGkuZS4gYSBjbG9zZXN0IHRhZywgb3B0aW9uYWxseQorICBmb2xsb3dlZCBieSBhIGRhc2ggYW5kIGEgbnVtYmVyIG9mIGNvbW1pdHMsIGZvbGxvd2VkIGJ5IGEgZGFzaCwgYQorICAnZycsIGFuZCBhbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZS4KKworJzxyZWZuYW1lPicsIGUuZy4gJ21hc3RlcicsICdoZWFkcy9tYXN0ZXInLCAncmVmcy9oZWFkcy9tYXN0ZXInOjoKKyAgQSBzeW1ib2xpYyByZWYgbmFtZS4gIEUuZy4gJ21hc3RlcicgdHlwaWNhbGx5IG1lYW5zIHRoZSBjb21taXQKKyAgb2JqZWN0IHJlZmVyZW5jZWQgYnkgJ3JlZnMvaGVhZHMvbWFzdGVyJy4gIElmIHlvdQorICBoYXBwZW4gdG8gaGF2ZSBib3RoICdoZWFkcy9tYXN0ZXInIGFuZCAndGFncy9tYXN0ZXInLCB5b3UgY2FuCisgIGV4cGxpY2l0bHkgc2F5ICdoZWFkcy9tYXN0ZXInIHRvIHRlbGwgZ2l0IHdoaWNoIG9uZSB5b3UgbWVhbi4KKyAgV2hlbiBhbWJpZ3VvdXMsIGEgJzxyZWZuYW1lPicgaXMgZGlzYW1iaWd1YXRlZCBieSB0YWtpbmcgdGhlCisgIGZpcnN0IG1hdGNoIGluIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisKKyAgLiBJZiAnJEdJVF9ESVIvPHJlZm5hbWU+JyBleGlzdHMsIHRoYXQgaXMgd2hhdCB5b3UgbWVhbiAodGhpcyBpcyB1c3VhbGx5CisgICAgdXNlZnVsIG9ubHkgZm9yICdIRUFEJywgJ0ZFVENIX0hFQUQnLCAnT1JJR19IRUFEJywgJ01FUkdFX0hFQUQnCisgICAgYW5kICdDSEVSUllfUElDS19IRUFEJyk7CisKKyAgLiBvdGhlcndpc2UsICdyZWZzLzxyZWZuYW1lPicgaWYgaXQgZXhpc3RzOworCisgIC4gb3RoZXJ3aXNlLCAncmVmcy90YWdzLzxyZWZuYW1lPicgaWYgaXQgZXhpc3RzOworCisgIC4gb3RoZXJ3aXNlLCAncmVmcy9oZWFkcy88cmVmbmFtZT4nIGlmIGl0IGV4aXN0czsKKworICAuIG90aGVyd2lzZSwgJ3JlZnMvcmVtb3Rlcy88cmVmbmFtZT4nIGlmIGl0IGV4aXN0czsKKworICAuIG90aGVyd2lzZSwgJ3JlZnMvcmVtb3Rlcy88cmVmbmFtZT4vSEVBRCcgaWYgaXQgZXhpc3RzLgorKworJ0hFQUQnIG5hbWVzIHRoZSBjb21taXQgb24gd2hpY2ggeW91IGJhc2VkIHRoZSBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUuCisnRkVUQ0hfSEVBRCcgcmVjb3JkcyB0aGUgYnJhbmNoIHdoaWNoIHlvdSBmZXRjaGVkIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeQord2l0aCB5b3VyIGxhc3QgYGdpdCBmZXRjaGAgaW52b2NhdGlvbi4KKydPUklHX0hFQUQnIGlzIGNyZWF0ZWQgYnkgY29tbWFuZHMgdGhhdCBtb3ZlIHlvdXIgJ0hFQUQnIGluIGEgZHJhc3RpYword2F5LCB0byByZWNvcmQgdGhlIHBvc2l0aW9uIG9mIHRoZSAnSEVBRCcgYmVmb3JlIHRoZWlyIG9wZXJhdGlvbiwgc28gdGhhdAoreW91IGNhbiBlYXNpbHkgY2hhbmdlIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgeW91IHJhbgordGhlbS4KKydNRVJHRV9IRUFEJyByZWNvcmRzIHRoZSBjb21taXQocykgd2hpY2ggeW91IGFyZSBtZXJnaW5nIGludG8geW91ciBicmFuY2gKK3doZW4geW91IHJ1biBgZ2l0IG1lcmdlYC4KKydDSEVSUllfUElDS19IRUFEJyByZWNvcmRzIHRoZSBjb21taXQgd2hpY2ggeW91IGFyZSBjaGVycnktcGlja2luZword2hlbiB5b3UgcnVuIGBnaXQgY2hlcnJ5LXBpY2tgLgorKworTm90ZSB0aGF0IGFueSBvZiB0aGUgJ3JlZnMvKicgY2FzZXMgYWJvdmUgbWF5IGNvbWUgZWl0aGVyIGZyb20KK3RoZSAnJEdJVF9ESVIvcmVmcycgZGlyZWN0b3J5IG9yIGZyb20gdGhlICckR0lUX0RJUi9wYWNrZWQtcmVmcycgZmlsZS4KK1doaWxlIHRoZSByZWYgbmFtZSBlbmNvZGluZyBpcyB1bnNwZWNpZmllZCwgVVRGLTggaXMgcHJlZmVyZWQgYXMKK3NvbWUgb3V0cHV0IHByb2Nlc3NpbmcgbWF5IGFzc3VtZSByZWYgbmFtZXMgaW4gVVRGLTguCisKKyc8cmVmbmFtZT5AXHs8ZGF0ZT5cfScsIGUuZy4gJ21hc3RlckBce3llc3RlcmRheVx9JywgJ0hFQURAXHs1IG1pbnV0ZXMgYWdvXH0nOjoKKyAgQSByZWYgZm9sbG93ZWQgYnkgdGhlIHN1ZmZpeCAnQCcgd2l0aCBhIGRhdGUgc3BlY2lmaWNhdGlvbgorICBlbmNsb3NlZCBpbiBhIGJyYWNlCisgIHBhaXIgKGUuZy4gJ1x7eWVzdGVyZGF5XH0nLCAnXHsxIG1vbnRoIDIgd2Vla3MgMyBkYXlzIDEgaG91ciAxCisgIHNlY29uZCBhZ29cfScgb3IgJ1x7MTk3OS0wMi0yNiAxODozMDowMFx9Jykgc3BlY2lmaWVzIHRoZSB2YWx1ZQorICBvZiB0aGUgcmVmIGF0IGEgcHJpb3IgcG9pbnQgaW4gdGltZS4gIFRoaXMgc3VmZml4IG1heSBvbmx5IGJlCisgIHVzZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgcmVmIG5hbWUgYW5kIHRoZSByZWYgbXVzdCBoYXZlIGFuCisgIGV4aXN0aW5nIGxvZyAoJyRHSVRfRElSL2xvZ3MvPHJlZj4nKS4gTm90ZSB0aGF0IHRoaXMgbG9va3MgdXAgdGhlIHN0YXRlCisgIG9mIHlvdXIgKmxvY2FsKiByZWYgYXQgYSBnaXZlbiB0aW1lOyBlLmcuLCB3aGF0IHdhcyBpbiB5b3VyIGxvY2FsCisgICdtYXN0ZXInIGJyYW5jaCBsYXN0IHdlZWsuIElmIHlvdSB3YW50IHRvIGxvb2sgYXQgY29tbWl0cyBtYWRlIGR1cmluZworICBjZXJ0YWluIHRpbWVzLCBzZWUgJy0tc2luY2UnIGFuZCAnLS11bnRpbCcuCisKKyc8cmVmbmFtZT5AXHs8bj5cfScsIGUuZy4gJ21hc3RlckBcezFcfSc6OgorICBBIHJlZiBmb2xsb3dlZCBieSB0aGUgc3VmZml4ICdAJyB3aXRoIGFuIG9yZGluYWwgc3BlY2lmaWNhdGlvbgorICBlbmNsb3NlZCBpbiBhIGJyYWNlIHBhaXIgKGUuZy4gJ1x7MVx9JywgJ1x7MTVcfScpIHNwZWNpZmllcworICB0aGUgbi10aCBwcmlvciB2YWx1ZSBvZiB0aGF0IHJlZi4gIEZvciBleGFtcGxlICdtYXN0ZXJAXHsxXH0nCisgIGlzIHRoZSBpbW1lZGlhdGUgcHJpb3IgdmFsdWUgb2YgJ21hc3Rlcicgd2hpbGUgJ21hc3RlckBcezVcfScKKyAgaXMgdGhlIDV0aCBwcmlvciB2YWx1ZSBvZiAnbWFzdGVyJy4gVGhpcyBzdWZmaXggbWF5IG9ubHkgYmUgdXNlZAorICBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSByZWYgbmFtZSBhbmQgdGhlIHJlZiBtdXN0IGhhdmUgYW4gZXhpc3RpbmcKKyAgbG9nICgnJEdJVF9ESVIvbG9ncy88cmVmbmFtZT4nKS4KKworJ0BcezxuPlx9JywgZS5nLiAnQFx7MVx9Jzo6CisgIFlvdSBjYW4gdXNlIHRoZSAnQCcgY29uc3RydWN0IHdpdGggYW4gZW1wdHkgcmVmIHBhcnQgdG8gZ2V0IGF0IGEKKyAgcmVmbG9nIGVudHJ5IG9mIHRoZSBjdXJyZW50IGJyYW5jaC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgb24KKyAgYnJhbmNoICdibGFibGEnIHRoZW4gJ0BcezFcfScgbWVhbnMgdGhlIHNhbWUgYXMgJ2JsYWJsYUBcezFcfScuCisKKydAXHstPG4+XH0nLCBlLmcuICdAXHstMVx9Jzo6CisgIFRoZSBjb25zdHJ1Y3QgJ0Bcey08bj5cfScgbWVhbnMgdGhlIDxuPnRoIGJyYW5jaCBjaGVja2VkIG91dAorICBiZWZvcmUgdGhlIGN1cnJlbnQgb25lLgorCisnPHJlZm5hbWU+QFx7dXBzdHJlYW1cfScsIGUuZy4gJ21hc3RlckBce3Vwc3RyZWFtXH0nLCAnQFx7dVx9Jzo6CisgIFRoZSBzdWZmaXggJ0Bce3Vwc3RyZWFtXH0nIHRvIGEgcmVmIChzaG9ydCBmb3JtICc8cmVmbmFtZT5AXHt1XH0nKSByZWZlcnMgdG8KKyAgdGhlIGJyYW5jaCB0aGUgcmVmIGlzIHNldCB0byBidWlsZCBvbiB0b3Agb2YuICBBIG1pc3NpbmcgcmVmIGRlZmF1bHRzCisgIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4KKworJzxyZXY+e2NhcmV0fScsIGUuZy4gJ0hFQUR7Y2FyZXR9LCB2MS41LjF7Y2FyZXR9MCc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgdG8gYSByZXZpc2lvbiBwYXJhbWV0ZXIgbWVhbnMgdGhlIGZpcnN0IHBhcmVudCBvZgorICB0aGF0IGNvbW1pdCBvYmplY3QuICAne2NhcmV0fTxuPicgbWVhbnMgdGhlIDxuPnRoIHBhcmVudCAoaS5lLgorICAnPHJldj57Y2FyZXR9JworICBpcyBlcXVpdmFsZW50IHRvICc8cmV2PntjYXJldH0xJykuICBBcyBhIHNwZWNpYWwgcnVsZSwKKyAgJzxyZXY+e2NhcmV0fTAnIG1lYW5zIHRoZSBjb21taXQgaXRzZWxmIGFuZCBpcyB1c2VkIHdoZW4gJzxyZXY+JyBpcyB0aGUKKyAgb2JqZWN0IG5hbWUgb2YgYSB0YWcgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIGEgY29tbWl0IG9iamVjdC4KKworJzxyZXY+e3RpbGRlfTxuPicsIGUuZy4gJ21hc3Rlcnt0aWxkZX0zJzo6CisgIEEgc3VmZml4ICd7dGlsZGV9PG4+JyB0byBhIHJldmlzaW9uIHBhcmFtZXRlciBtZWFucyB0aGUgY29tbWl0CisgIG9iamVjdCB0aGF0IGlzIHRoZSA8bj50aCBnZW5lcmF0aW9uIGFuY2VzdG9yIG9mIHRoZSBuYW1lZAorICBjb21taXQgb2JqZWN0LCBmb2xsb3dpbmcgb25seSB0aGUgZmlyc3QgcGFyZW50cy4gIEkuZS4gJzxyZXY+e3RpbGRlfTMnIGlzCisgIGVxdWl2YWxlbnQgdG8gJzxyZXY+e2NhcmV0fXtjYXJldH17Y2FyZXR9JyB3aGljaCBpcyBlcXVpdmFsZW50IHRvCisgICc8cmV2PntjYXJldH0xe2NhcmV0fTF7Y2FyZXR9MScuICBTZWUgYmVsb3cgZm9yIGFuIGlsbHVzdHJhdGlvbiBvZgorICB0aGUgdXNhZ2Ugb2YgdGhpcyBmb3JtLgorCisnPHJldj57Y2FyZXR9XHs8dHlwZT5cfScsIGUuZy4gJ3YwLjk5Ljh7Y2FyZXR9XHtjb21taXRcfSc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gb2JqZWN0IHR5cGUgbmFtZSBlbmNsb3NlZCBpbgorICBicmFjZSBwYWlyIG1lYW5zIHRoZSBvYmplY3QKKyAgY291bGQgYmUgYSB0YWcsIGFuZCBkZXJlZmVyZW5jZSB0aGUgdGFnIHJlY3Vyc2l2ZWx5IHVudGlsIGFuCisgIG9iamVjdCBvZiB0aGF0IHR5cGUgaXMgZm91bmQgb3IgdGhlIG9iamVjdCBjYW5ub3QgYmUKKyAgZGVyZWZlcmVuY2VkIGFueW1vcmUgKGluIHdoaWNoIGNhc2UsIGJhcmYpLiAgJzxyZXY+e2NhcmV0fTAnCisgIGlzIGEgc2hvcnQtaGFuZCBmb3IgJzxyZXY+e2NhcmV0fVx7Y29tbWl0XH0nLgorCisnPHJldj57Y2FyZXR9XHtcfScsIGUuZy4gJ3YwLjk5Ljh7Y2FyZXR9XHtcfSc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gZW1wdHkgYnJhY2UgcGFpcgorICBtZWFucyB0aGUgb2JqZWN0IGNvdWxkIGJlIGEgdGFnLAorICBhbmQgZGVyZWZlcmVuY2UgdGhlIHRhZyByZWN1cnNpdmVseSB1bnRpbCBhIG5vbi10YWcgb2JqZWN0IGlzCisgIGZvdW5kLgorCisnPHJldj57Y2FyZXR9XHsvPHRleHQ+XH0nLCBlLmcuICdIRUFEXnsvZml4IG5hc3R5IGJ1Z30nOjoKKyAgQSBzdWZmaXggJ3tjYXJldH0nIHRvIGEgcmV2aXNpb24gcGFyYW1ldGVyLCBmb2xsb3dlZCBieSBhIGJyYWNlCisgIHBhaXIgdGhhdCBjb250YWlucyBhIHRleHQgbGVkIGJ5IGEgc2xhc2gsCisgIGlzIHRoZSBzYW1lIGFzIHRoZSAnOi9maXggbmFzdHkgYnVnJyBzeW50YXggYmVsb3cgZXhjZXB0IHRoYXQKKyAgaXQgcmV0dXJucyB0aGUgeW91bmdlc3QgbWF0Y2hpbmcgY29tbWl0IHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tCisgIHRoZSAnPHJldj4nIGJlZm9yZSAne2NhcmV0fScuCisKKyc6Lzx0ZXh0PicsIGUuZy4gJzovZml4IG5hc3R5IGJ1Zyc6OgorICBBIGNvbG9uLCBmb2xsb3dlZCBieSBhIHNsYXNoLCBmb2xsb3dlZCBieSBhIHRleHQsIG5hbWVzCisgIGEgY29tbWl0IHdob3NlIGNvbW1pdCBtZXNzYWdlIG1hdGNoZXMgdGhlIHNwZWNpZmllZCByZWd1bGFyIGV4cHJlc3Npb24uCisgIFRoaXMgbmFtZSByZXR1cm5zIHRoZSB5b3VuZ2VzdCBtYXRjaGluZyBjb21taXQgd2hpY2ggaXMKKyAgcmVhY2hhYmxlIGZyb20gYW55IHJlZi4gIElmIHRoZSBjb21taXQgbWVzc2FnZSBzdGFydHMgd2l0aCBhCisgICchJyB5b3UgaGF2ZSB0byByZXBlYXQgdGhhdDsgIHRoZSBzcGVjaWFsIHNlcXVlbmNlICc6LyEnLAorICBmb2xsb3dlZCBieSBzb21ldGhpbmcgZWxzZSB0aGFuICchJywgaXMgcmVzZXJ2ZWQgZm9yIG5vdy4KKyAgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gbWF0Y2ggYW55IHBhcnQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLiBUbworICBtYXRjaCBtZXNzYWdlcyBzdGFydGluZyB3aXRoIGEgc3RyaW5nLCBvbmUgY2FuIHVzZSBlLmcuICc6L15mb28nLgorCisnPHJldj46PHBhdGg+JywgZS5nLiAnSEVBRDpSRUFETUUnLCAnOlJFQURNRScsICdtYXN0ZXI6Li9SRUFETUUnOjoKKyAgQSBzdWZmaXggJzonIGZvbGxvd2VkIGJ5IGEgcGF0aCBuYW1lcyB0aGUgYmxvYiBvciB0cmVlCisgIGF0IHRoZSBnaXZlbiBwYXRoIGluIHRoZSB0cmVlLWlzaCBvYmplY3QgbmFtZWQgYnkgdGhlIHBhcnQKKyAgYmVmb3JlIHRoZSBjb2xvbi4KKyAgJzpwYXRoJyAod2l0aCBhbiBlbXB0eSBwYXJ0IGJlZm9yZSB0aGUgY29sb24pCisgIGlzIGEgc3BlY2lhbCBjYXNlIG9mIHRoZSBzeW50YXggZGVzY3JpYmVkIG5leHQ6IGNvbnRlbnQKKyAgcmVjb3JkZWQgaW4gdGhlIGluZGV4IGF0IHRoZSBnaXZlbiBwYXRoLgorICBBIHBhdGggc3RhcnRpbmcgd2l0aCAnLi8nIG9yICcuLi8nIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICBUaGUgZ2l2ZW4gcGF0aCB3aWxsIGJlIGNvbnZlcnRlZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgd29ya2luZyB0cmVlJ3Mgcm9vdCBkaXJlY3RvcnkuCisgIFRoaXMgaXMgbW9zdCB1c2VmdWwgdG8gYWRkcmVzcyBhIGJsb2Igb3IgdHJlZSBmcm9tIGEgY29tbWl0IG9yIHRyZWUgdGhhdCBoYXMKKyAgdGhlIHNhbWUgdHJlZSBzdHJ1Y3R1cmUgYXMgdGhlIHdvcmtpbmcgdHJlZS4KKworJzo8bj46PHBhdGg+JywgZS5nLiAnOjA6UkVBRE1FJywgJzpSRUFETUUnOjoKKyAgQSBjb2xvbiwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIHN0YWdlIG51bWJlciAoMCB0byAzKSBhbmQgYQorICBjb2xvbiwgZm9sbG93ZWQgYnkgYSBwYXRoLCBuYW1lcyBhIGJsb2Igb2JqZWN0IGluIHRoZQorICBpbmRleCBhdCB0aGUgZ2l2ZW4gcGF0aC4gQSBtaXNzaW5nIHN0YWdlIG51bWJlciAoYW5kIHRoZSBjb2xvbgorICB0aGF0IGZvbGxvd3MgaXQpIG5hbWVzIGEgc3RhZ2UgMCBlbnRyeS4gRHVyaW5nIGEgbWVyZ2UsIHN0YWdlCisgIDEgaXMgdGhlIGNvbW1vbiBhbmNlc3Rvciwgc3RhZ2UgMiBpcyB0aGUgdGFyZ2V0IGJyYW5jaCdzIHZlcnNpb24KKyAgKHR5cGljYWxseSB0aGUgY3VycmVudCBicmFuY2gpLCBhbmQgc3RhZ2UgMyBpcyB0aGUgdmVyc2lvbiBmcm9tCisgIHRoZSBicmFuY2ggd2hpY2ggaXMgYmVpbmcgbWVyZ2VkLgorCitIZXJlIGlzIGFuIGlsbHVzdHJhdGlvbiwgYnkgSm9uIExvZWxpZ2VyLiAgQm90aCBjb21taXQgbm9kZXMgQgorYW5kIEMgYXJlIHBhcmVudHMgb2YgY29tbWl0IG5vZGUgQS4gIFBhcmVudCBjb21taXRzIGFyZSBvcmRlcmVkCitsZWZ0LXRvLXJpZ2h0LgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCitHICAgSCAgIEkgICBKCisgXCAvICAgICBcIC8KKyAgRCAgIEUgICBGCisgICBcICB8ICAvIFwKKyAgICBcIHwgLyAgIHwKKyAgICAgXHwvICAgIHwKKyAgICAgIEIgICAgIEMKKyAgICAgICBcICAgLworICAgICAgICBcIC8KKyAgICAgICAgIEEKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworICAgIEEgPSAgICAgID0gQV4wCisgICAgQiA9IEFeICAgPSBBXjEgICAgID0gQX4xCisgICAgQyA9IEFeMiAgPSBBXjIKKyAgICBEID0gQV5eICA9IEFeMV4xICAgPSBBfjIKKyAgICBFID0gQl4yICA9IEFeXjIKKyAgICBGID0gQl4zICA9IEFeXjMKKyAgICBHID0gQV5eXiA9IEFeMV4xXjEgPSBBfjMKKyAgICBIID0gRF4yICA9IEJeXjIgICAgPSBBXl5eMiAgPSBBfjJeMgorICAgIEkgPSBGXiAgID0gQl4zXiAgICA9IEFeXjNeCisgICAgSiA9IEZeMiAgPSBCXjNeMiAgID0gQV5eM14yCisKKworU1BFQ0lGWUlORyBSQU5HRVMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0hpc3RvcnkgdHJhdmVyc2luZyBjb21tYW5kcyBzdWNoIGFzIGBnaXQgbG9nYCBvcGVyYXRlIG9uIGEgc2V0CitvZiBjb21taXRzLCBub3QganVzdCBhIHNpbmdsZSBjb21taXQuICBUbyB0aGVzZSBjb21tYW5kcywKK3NwZWNpZnlpbmcgYSBzaW5nbGUgcmV2aXNpb24gd2l0aCB0aGUgbm90YXRpb24gZGVzY3JpYmVkIGluIHRoZQorcHJldmlvdXMgc2VjdGlvbiBtZWFucyB0aGUgc2V0IG9mIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gdGhhdAorY29tbWl0LCBmb2xsb3dpbmcgdGhlIGNvbW1pdCBhbmNlc3RyeSBjaGFpbi4KKworVG8gZXhjbHVkZSBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGEgY29tbWl0LCBhIHByZWZpeCAne2NhcmV0fScKK25vdGF0aW9uIGlzIHVzZWQuICBFLmcuICd7Y2FyZXR9cjEgcjInIG1lYW5zIGNvbW1pdHMgcmVhY2hhYmxlCitmcm9tICdyMicgYnV0IGV4Y2x1ZGUgdGhlIG9uZXMgcmVhY2hhYmxlIGZyb20gJ3IxJy4KKworVGhpcyBzZXQgb3BlcmF0aW9uIGFwcGVhcnMgc28gb2Z0ZW4gdGhhdCB0aGVyZSBpcyBhIHNob3J0aGFuZAorZm9yIGl0LiAgV2hlbiB5b3UgaGF2ZSB0d28gY29tbWl0cyAncjEnIGFuZCAncjInIChuYW1lZCBhY2NvcmRpbmcKK3RvIHRoZSBzeW50YXggZXhwbGFpbmVkIGluIFNQRUNJRllJTkcgUkVWSVNJT05TIGFib3ZlKSwgeW91IGNhbiBhc2sKK2ZvciBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHIyIGV4Y2x1ZGluZyB0aG9zZSB0aGF0IGFyZSByZWFjaGFibGUKK2Zyb20gcjEgYnkgJ3tjYXJldH1yMSByMicgYW5kIGl0IGNhbiBiZSB3cml0dGVuIGFzICdyMS4ucjInLgorCitBIHNpbWlsYXIgbm90YXRpb24gJ3IxXC4uLnIyJyBpcyBjYWxsZWQgc3ltbWV0cmljIGRpZmZlcmVuY2UKK29mICdyMScgYW5kICdyMicgYW5kIGlzIGRlZmluZWQgYXMKKydyMSByMiAtLW5vdCAkKGdpdCBtZXJnZS1iYXNlIC0tYWxsIHIxIHIyKScuCitJdCBpcyB0aGUgc2V0IG9mIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gZWl0aGVyIG9uZSBvZgorJ3IxJyBvciAncjInIGJ1dCBub3QgZnJvbSBib3RoLgorCitJbiB0aGVzZSB0d28gc2hvcnRoYW5kcywgeW91IGNhbiBvbWl0IG9uZSBlbmQgYW5kIGxldCBpdCBkZWZhdWx0IHRvIEhFQUQuCitGb3IgZXhhbXBsZSwgJ29yaWdpbi4uJyBpcyBhIHNob3J0aGFuZCBmb3IgJ29yaWdpbi4uSEVBRCcgYW5kIGFza3MgIldoYXQKK2RpZCBJIGRvIHNpbmNlIEkgZm9ya2VkIGZyb20gdGhlIG9yaWdpbiBicmFuY2g/IiAgU2ltaWxhcmx5LCAnLi5vcmlnaW4nCitpcyBhIHNob3J0aGFuZCBmb3IgJ0hFQUQuLm9yaWdpbicgYW5kIGFza3MgIldoYXQgZGlkIHRoZSBvcmlnaW4gZG8gc2luY2UKK0kgZm9ya2VkIGZyb20gdGhlbT8iICBOb3RlIHRoYXQgJy4uJyB3b3VsZCBtZWFuICdIRUFELi5IRUFEJyB3aGljaCBpcyBhbgorZW1wdHkgcmFuZ2UgdGhhdCBpcyBib3RoIHJlYWNoYWJsZSBhbmQgdW5yZWFjaGFibGUgZnJvbSBIRUFELgorCitUd28gb3RoZXIgc2hvcnRoYW5kcyBmb3IgbmFtaW5nIGEgc2V0IHRoYXQgaXMgZm9ybWVkIGJ5IGEgY29tbWl0CithbmQgaXRzIHBhcmVudCBjb21taXRzIGV4aXN0LiAgVGhlICdyMXtjYXJldH1AJyBub3RhdGlvbiBtZWFucyBhbGwKK3BhcmVudHMgb2YgJ3IxJy4gICdyMXtjYXJldH0hJyBpbmNsdWRlcyBjb21taXQgJ3IxJyBidXQgZXhjbHVkZXMKK2FsbCBvZiBpdHMgcGFyZW50cy4KKworVG8gc3VtbWFyaXplOgorCisnPHJldj4nOjoKKwlJbmNsdWRlIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gKGkuZS4gYW5jZXN0b3JzIG9mKQorCTxyZXY+LgorCisne2NhcmV0fTxyZXY+Jzo6CisJRXhjbHVkZSBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIChpLmUuIGFuY2VzdG9ycyBvZikKKwk8cmV2Pi4KKworJzxyZXYxPi4uPHJldjI+Jzo6CisJSW5jbHVkZSBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIDxyZXYyPiBidXQgZXhjbHVkZQorCXRob3NlIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIDxyZXYxPi4KKworJzxyZXYxPlwuLi48cmV2Mj4nOjoKKwlJbmNsdWRlIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gZWl0aGVyIDxyZXYxPiBvcgorCTxyZXYyPiBidXQgZXhjbHVkZSB0aG9zZSB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBib3RoLgorCisnPHJldj57Y2FyZXR9QCcsIGUuZy4gJ0hFQUR7Y2FyZXR9QCc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gYXQgc2lnbiBpcyB0aGUgc2FtZSBhcyBsaXN0aW5nCisgIGFsbCBwYXJlbnRzIG9mICc8cmV2PicgKG1lYW5pbmcsIGluY2x1ZGUgYW55dGhpbmcgcmVhY2hhYmxlIGZyb20KKyAgaXRzIHBhcmVudHMsIGJ1dCBub3QgdGhlIGNvbW1pdCBpdHNlbGYpLgorCisnPHJldj57Y2FyZXR9IScsIGUuZy4gJ0hFQUR7Y2FyZXR9ISc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gZXhjbGFtYXRpb24gbWFyayBpcyB0aGUgc2FtZQorICBhcyBnaXZpbmcgY29tbWl0ICc8cmV2PicgYW5kIHRoZW4gYWxsIGl0cyBwYXJlbnRzIHByZWZpeGVkIHdpdGgKKyAgJ3tjYXJldH0nIHRvIGV4Y2x1ZGUgdGhlbSAoYW5kIHRoZWlyIGFuY2VzdG9ycykuCisKK0hlcmUgYXJlIGEgaGFuZGZ1bCBvZiBleGFtcGxlczoKKworICAgRCAgICAgICAgICAgICAgICBHIEggRAorICAgRCBGICAgICAgICAgICAgICBHIEggSSBKIEQgRgorICAgXkcgRCAgICAgICAgICAgICBIIEQKKyAgIF5EIEIgICAgICAgICAgICAgRSBJIEogRiBCCisgICBCLi5DICAgICAgICAgICAgIEMKKyAgIEIuLi5DICAgICAgICAgICAgRyBIIEQgRSBCIEMKKyAgIF5EIEIgQyAgICAgICAgICAgRSBJIEogRiBCIEMKKyAgIEMgICAgICAgICAgICAgICAgSSBKIEYgQworICAgQ15AICAgICAgICAgICAgICBJIEogRgorICAgQ14hICAgICAgICAgICAgICBDCisgICBGXiEgRCAgICAgICAgICAgIEcgSCBEIEYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VxdWVuY2VyLnR4dCBiL0RvY3VtZW50YXRpb24vc2VxdWVuY2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQ3ZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXF1ZW5jZXIudHh0CkBAIC0wLDAgKzEsMTIgQEAKKy0tY29udGludWU6OgorCUNvbnRpbnVlIHRoZSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGluCisJJy5naXQvc2VxdWVuY2VyJy4gIENhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFmdGVyIHJlc29sdmluZworCWNvbmZsaWN0cyBpbiBhIGZhaWxlZCBjaGVycnktcGljayBvciByZXZlcnQuCisKKy0tcXVpdDo6CisJRm9yZ2V0IGFib3V0IHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBwcm9ncmVzcy4gIENhbiBiZSB1c2VkCisJdG8gY2xlYXIgdGhlIHNlcXVlbmNlciBzdGF0ZSBhZnRlciBhIGZhaWxlZCBjaGVycnktcGljayBvcgorCXJldmVydC4KKworLS1hYm9ydDo6CisJQ2FuY2VsIHRoZSBvcGVyYXRpb24gYW5kIHJldHVybiB0byB0aGUgcHJlLXNlcXVlbmNlIHN0YXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhODkxZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorYXBpLWluZGV4LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWFsbG9jYXRpb24tZ3Jvd2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYWxsb2NhdGlvbi1ncm93aW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2RiZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWFsbG9jYXRpb24tZ3Jvd2luZy50eHQKQEAgLTAsMCArMSwzNCBAQAorYWxsb2NhdGlvbiBncm93aW5nIEFQSQorPT09PT09PT09PT09PT09PT09PT09PQorCitEeW5hbWljYWxseSBncm93aW5nIGFuIGFycmF5IHVzaW5nIHJlYWxsb2MoKSBpcyBlcnJvciBwcm9uZSBhbmQgYm9yaW5nLgorCitEZWZpbmUgeW91ciBhcnJheSB3aXRoOgorCisqIGEgcG9pbnRlciAoYGFyeWApIHRoYXQgcG9pbnRzIGF0IHRoZSBhcnJheSwgaW5pdGlhbGl6ZWQgdG8gYE5VTExgOworCisqIGFuIGludGVnZXIgdmFyaWFibGUgKGBhbGxvY2ApIHRoYXQga2VlcHMgdHJhY2sgb2YgaG93IGJpZyB0aGUgY3VycmVudAorICBhbGxvY2F0aW9uIGlzLCBpbml0aWFsaXplZCB0byBgMGA7CisKKyogYW5vdGhlciBpbnRlZ2VyIHZhcmlhYmxlIChgbnJgKSB0byBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IGVsZW1lbnRzIHRoZQorICBhcnJheSBjdXJyZW50bHkgaGFzLCBpbml0aWFsaXplZCB0byBgMGAuCisKK1RoZW4gYmVmb3JlIGFkZGluZyBgbmB0aCBlbGVtZW50IHRvIHRoZSBhcnJheSwgY2FsbCBgQUxMT0NfR1JPVyhhcnksIG4sCithbGxvYylgLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5IGNhbiBob2xkIGF0IGxlYXN0IGBuYCBlbGVtZW50cyBieQorY2FsbGluZyBgcmVhbGxvYygzKWAgYW5kIGFkanVzdGluZyBgYWxsb2NgIHZhcmlhYmxlLgorCistLS0tLS0tLS0tLS0KK3NvbWV0eXBlICphcnk7CitzaXplX3QgbnI7CitzaXplX3QgYWxsb2MKKworZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJaWYgKHdlIGxpa2UgYXJ5W2ldIGFscmVhZHkpCisJCXJldHVybjsKKworLyogd2UgZGlkIG5vdCBsaWtlIGFueSBleGlzdGluZyBvbmUsIHNvIGFkZCBvbmUgKi8KK0FMTE9DX0dST1coYXJ5LCBuciArIDEsIGFsbG9jKTsKK2FyeVtucisrXSA9IHZhbHVlIHlvdSBsaWtlOworLS0tLS0tLS0tLS0tCisKK1lvdSBhcmUgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIHRoZSBgbnJgIHZhcmlhYmxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWFyZ3YtYXJyYXkudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWFyZ3YtYXJyYXkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNzk3ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYXJndi1hcnJheS50eHQKQEAgLTAsMCArMSw1NSBAQAorYXJndi1hcnJheSBBUEkKKz09PT09PT09PT09PT09CisKK1RoZSBhcmd2LWFycmF5IEFQSSBhbGxvd3Mgb25lIHRvIGR5bmFtaWNhbGx5IGJ1aWxkIGFuZCBzdG9yZQorTlVMTC10ZXJtaW5hdGVkIGxpc3RzLiAgQW4gYXJndi1hcnJheSBtYWludGFpbnMgdGhlIGludmFyaWFudCB0aGF0IHRoZQorYGFyZ3ZgIG1lbWJlciBhbHdheXMgcG9pbnRzIHRvIGEgbm9uLU5VTEwgYXJyYXksIGFuZCB0aGF0IHRoZSBhcnJheSBpcworYWx3YXlzIE5VTEwtdGVybWluYXRlZCBhdCB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IGBhcmd2W2FyZ2NdYC4gVGhpcworbWFrZXMgdGhlIHJlc3VsdCBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBmdW5jdGlvbnMgZXhwZWN0aW5nIHRvIHJlY2VpdmUKK2FyZ3YgZnJvbSBtYWluKCksIG9yIHRoZSBsaW5rOmFwaS1ydW4tY29tbWFuZC5odG1sW3J1bi1jb21tYW5kIEFQSV0uCisKK1RoZSBsaW5rOmFwaS1zdHJpbmctbGlzdC5odG1sW3N0cmluZy1saXN0IEFQSV0gaXMgc2ltaWxhciwgYnV0IGNhbm5vdCBiZQordXNlZCBmb3IgdGhlc2UgcHVycG9zZXM7IGluc3RlYWQgb2Ygc3RvcmluZyBhIHN0cmFpZ2h0IHN0cmluZyBwb2ludGVyLAoraXQgY29udGFpbnMgYW4gaXRlbSBzdHJ1Y3R1cmUgd2l0aCBhIGB1dGlsYCBmaWVsZCB0aGF0IGlzIG5vdCBjb21wYXRpYmxlCit3aXRoIHRoZSB0cmFkaXRpb25hbCBhcmd2IGludGVyZmFjZS4KKworRWFjaCBgYXJndl9hcnJheWAgbWFuYWdlcyBpdHMgb3duIG1lbW9yeS4gQW55IHN0cmluZ3MgcHVzaGVkIGludG8gdGhlCithcnJheSBhcmUgZHVwbGljYXRlZCwgYW5kIGFsbCBtZW1vcnkgaXMgZnJlZWQgYnkgYXJndl9hcnJheV9jbGVhcigpLgorCitEYXRhIFN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLQorCitgc3RydWN0IGFyZ3ZfYXJyYXlgOjoKKworCUEgc2luZ2xlIGFycmF5LiBUaGlzIHNob3VsZCBiZSBpbml0aWFsaXplZCBieSBhc3NpZ25tZW50IGZyb20KKwlgQVJHVl9BUlJBWV9JTklUYCwgb3IgYnkgY2FsbGluZyBgYXJndl9hcnJheV9pbml0YC4gVGhlIGBhcmd2YAorCW1lbWJlciBjb250YWlucyB0aGUgYWN0dWFsIGFycmF5OyB0aGUgYGFyZ2NgIG1lbWJlciBjb250YWlucyB0aGUKKwludW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5LCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZworCU5VTEwuCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKK2Bhcmd2X2FycmF5X2luaXRgOjoKKwlJbml0aWFsaXplIGFuIGFycmF5LiBUaGlzIGlzIG5vIGRpZmZlcmVudCB0aGFuIGFzc2lnbmluZyBmcm9tCisJYEFSR1ZfQVJSQVlfSU5JVGAuCisKK2Bhcmd2X2FycmF5X3B1c2hgOjoKKwlQdXNoIGEgY29weSBvZiBhIHN0cmluZyBvbnRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LgorCitgYXJndl9hcnJheV9wdXNobGA6OgorCVB1c2ggYSBsaXN0IG9mIHN0cmluZ3Mgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheS4gVGhlIGFyZ3VtZW50cworCXNob3VsZCBiZSBhIGxpc3Qgb2YgYGNvbnN0IGNoYXIgKmAgc3RyaW5ncywgdGVybWluYXRlZCBieSBhIE5VTEwKKwlhcmd1bWVudC4KKworYGFyZ3ZfYXJyYXlfcHVzaGZgOjoKKwlGb3JtYXQgYSBzdHJpbmcgYW5kIHB1c2ggaXQgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheS4gVGhpcyBpcyBhCisJY29udmVuaWVuY2Ugd3JhcHBlciBjb21iaW5pbmcgYHN0cmJ1Zl9hZGRmYCBhbmQgYGFyZ3ZfYXJyYXlfcHVzaGAuCisKK2Bhcmd2X2FycmF5X3BvcGA6OgorCVJlbW92ZSB0aGUgZmluYWwgZWxlbWVudCBmcm9tIHRoZSBhcnJheS4gSWYgdGhlcmUgYXJlIG5vCisJZWxlbWVudHMgaW4gdGhlIGFycmF5LCBkbyBub3RoaW5nLgorCitgYXJndl9hcnJheV9jbGVhcmA6OgorCUZyZWUgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgdG8gdGhlCisJaW5pdGlhbCwgZW1wdHkgc3RhdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYnVpbHRpbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYnVpbHRpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjYWZlOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1idWlsdGluLnR4dApAQCAtMCwwICsxLDcwIEBACitidWlsdGluIEFQSQorPT09PT09PT09PT0KKworQWRkaW5nIGEgbmV3IGJ1aWx0LWluCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIDQgdGhpbmdzIHRvIGRvIHRvIGFkZCBhIGJ1aWx0LWluIGNvbW1hbmQgaW1wbGVtZW50YXRpb24gdG8KK2dpdDoKKworLiBEZWZpbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBidWlsdC1pbiBjb21tYW5kIGBmb29gIHdpdGgKKyAgc2lnbmF0dXJlOgorCisJaW50IGNtZF9mb28oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworCisuIEFkZCB0aGUgZXh0ZXJuYWwgZGVjbGFyYXRpb24gZm9yIHRoZSBmdW5jdGlvbiB0byBgYnVpbHRpbi5oYC4KKworLiBBZGQgdGhlIGNvbW1hbmQgdG8gYGNvbW1hbmRzW11gIHRhYmxlIGluIGBoYW5kbGVfaW50ZXJuYWxfY29tbWFuZCgpYCwKKyAgZGVmaW5lZCBpbiBgZ2l0LmNgLiAgVGhlIGVudHJ5IHNob3VsZCBsb29rIGxpa2U6CisKKwl7ICJmb28iLCBjbWRfZm9vLCA8b3B0aW9ucz4gfSwKKysKK3doZXJlIG9wdGlvbnMgaXMgdGhlIGJpdHdpc2Utb3Igb2Y6CisKK2BSVU5fU0VUVVBgOjoKKworCU1ha2Ugc3VyZSB0aGVyZSBpcyBhIGdpdCBkaXJlY3RvcnkgdG8gd29yayBvbiwgYW5kIGlmIHRoZXJlIGlzIGEKKwl3b3JrIHRyZWUsIGNoZGlyIHRvIHRoZSB0b3Agb2YgaXQgaWYgdGhlIGNvbW1hbmQgd2FzIGludm9rZWQKKwlpbiBhIHN1YmRpcmVjdG9yeS4gIElmIHRoZXJlIGlzIG5vIHdvcmsgdHJlZSwgbm8gY2hkaXIoKSBpcworCWRvbmUuCisKK2BVU0VfUEFHRVJgOjoKKworCUlmIHRoZSBzdGFuZGFyZCBvdXRwdXQgaXMgY29ubmVjdGVkIHRvIGEgdHR5LCBzcGF3biBhIHBhZ2VyIGFuZAorCWZlZWQgb3VyIG91dHB1dCB0byBpdC4KKworYE5FRURfV09SS19UUkVFYDo6CisKKwlNYWtlIHN1cmUgdGhlcmUgaXMgYSB3b3JrIHRyZWUsIGkuZS4gdGhlIGNvbW1hbmQgY2Fubm90IGFjdAorCW9uIGJhcmUgcmVwb3NpdG9yaWVzLgorCVRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIGBSVU5fU0VUVVBgIGlzIGFsc28gc2V0LgorCisuIEFkZCBgYnVpbHRpbi1mb28ub2AgdG8gYEJVSUxUSU5fT0JKU2AgaW4gYE1ha2VmaWxlYC4KKworQWRkaXRpb25hbGx5LCBpZiBgZm9vYCBpcyBhIG5ldyBjb21tYW5kLCB0aGVyZSBhcmUgMyBtb3JlIHRoaW5ncyB0byBkbzoKKworLiBBZGQgdGVzdHMgdG8gYHQvYCBkaXJlY3RvcnkuCisKKy4gV3JpdGUgZG9jdW1lbnRhdGlvbiBpbiBgRG9jdW1lbnRhdGlvbi9naXQtZm9vLnR4dGAuCisKKy4gQWRkIGFuIGVudHJ5IGZvciBgZ2l0LWZvb2AgdG8gYGNvbW1hbmQtbGlzdC50eHRgLgorCisuIEFkZCBhbiBlbnRyeSBmb3IgYC9naXQtZm9vYCB0byBgLmdpdGlnbm9yZWAuCisKKworSG93IGEgYnVpbHQtaW4gaXMgY2FsbGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGltcGxlbWVudGF0aW9uIGBjbWRfZm9vKClgIHRha2VzIHRocmVlIHBhcmFtZXRlcnMsIGBhcmdjYCwgYGFyZ3YsCithbmQgYHByZWZpeGAuICBUaGUgZmlyc3QgdHdvIGFyZSBzaW1pbGFyIHRvIHdoYXQgYG1haW4oKWAgb2YgYQorc3RhbmRhbG9uZSBjb21tYW5kIHdvdWxkIGJlIGNhbGxlZCB3aXRoLgorCitXaGVuIGBSVU5fU0VUVVBgIGlzIHNwZWNpZmllZCBpbiB0aGUgYGNvbW1hbmRzW11gIHRhYmxlLCBhbmQgd2hlbiB5b3UKK3dlcmUgc3RhcnRlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSB3b3JrIHRyZWUsIGBjbWRfZm9vKClgIGlzIGNhbGxlZAorYWZ0ZXIgY2hkaXIoMikgdG8gdGhlIHRvcCBvZiB0aGUgd29yayB0cmVlLCBhbmQgYHByZWZpeGAgZ2V0cyB0aGUgcGF0aAordG8gdGhlIHN1YmRpcmVjdG9yeSB0aGUgY29tbWFuZCBzdGFydGVkIGZyb20uICBUaGlzIGFsbG93cyB5b3UgdG8KK2NvbnZlcnQgYSB1c2VyLXN1cHBsaWVkIHBhdGhuYW1lICh0eXBpY2FsbHkgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkpCit0byBhIHBhdGhuYW1lIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHdvcmsgdHJlZS4KKworVGhlIHJldHVybiB2YWx1ZSBmcm9tIGBjbWRfZm9vKClgIGJlY29tZXMgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZQorY29tbWFuZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWNvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmOGRmYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1jb25maWcudHh0CkBAIC0wLDAgKzEsMTQwIEBACitjb25maWcgQVBJCis9PT09PT09PT09CisKK1RoZSBjb25maWcgQVBJIGdpdmVzIGNhbGxlcnMgYSB3YXkgdG8gYWNjZXNzIGdpdCBjb25maWd1cmF0aW9uIGZpbGVzCisoYW5kIGZpbGVzIHdoaWNoIGhhdmUgdGhlIHNhbWUgc3ludGF4KS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgYQorZGlzY3Vzc2lvbiBvZiB0aGUgY29uZmlnIGZpbGUgc3ludGF4LgorCitHZW5lcmFsIFVzYWdlCistLS0tLS0tLS0tLS0tCisKK0NvbmZpZyBmaWxlcyBhcmUgcGFyc2VkIGxpbmVhcmx5LCBhbmQgZWFjaCB2YXJpYWJsZSBmb3VuZCBpcyBwYXNzZWQgdG8gYQorY2FsbGVyLXByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUKK2ZvciBhbnkgYWN0aW9ucyB0byBiZSB0YWtlbiBvbiB0aGUgY29uZmlnIG9wdGlvbiwgYW5kIGlzIGZyZWUgdG8gaWdub3JlCitzb21lIG9wdGlvbnMuIEl0IGlzIG5vdCB1bmNvbW1vbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYmUgcGFyc2VkCitzZXZlcmFsIHRpbWVzIGR1cmluZyB0aGUgcnVuIG9mIGEgZ2l0IHByb2dyYW0sIHdpdGggZGlmZmVyZW50IGNhbGxiYWNrcworcGlja2luZyBvdXQgZGlmZmVyZW50IHZhcmlhYmxlcyB1c2VmdWwgdG8gdGhlbXNlbHZlcy4KKworQSBjb25maWcgY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgdGhyZWUgcGFyYW1ldGVyczoKKworLSB0aGUgbmFtZSBvZiB0aGUgcGFyc2VkIHZhcmlhYmxlLiBUaGlzIGlzIGluIGNhbm9uaWNhbCAiZmxhdCIgZm9ybTogdGhlCisgIHNlY3Rpb24sIHN1YnNlY3Rpb24sIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIHNlcGFyYXRlZCBieSBkb3RzLAorICBhbmQgdGhlIHNlY3Rpb24gYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgYWxsIGxvd2VyY2FzZS4gRS5nLiwKKyAgYGNvcmUuaWdub3JlY2FzZWAsIGBkaWZmLlNvbWVUeXBlLnRleHRjb252YC4KKworLSB0aGUgdmFsdWUgb2YgdGhlIGZvdW5kIHZhcmlhYmxlLCBhcyBhIHN0cmluZy4gSWYgdGhlIHZhcmlhYmxlIGhhZCBubworICB2YWx1ZSBzcGVjaWZpZWQsIHRoZSB2YWx1ZSB3aWxsIGJlIE5VTEwgKHR5cGljYWxseSB0aGlzIG1lYW5zIGl0CisgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBib29sZWFuIHRydWUpLgorCistIGEgdm9pZCBwb2ludGVyIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyIG9mIHRoZSBjb25maWcgQVBJOyB0aGlzIGNhbgorICBjb250YWluIGNhbGxiYWNrLXNwZWNpZmljIGRhdGEKKworQSBjb25maWcgY2FsbGJhY2sgc2hvdWxkIHJldHVybiAwIGZvciBzdWNjZXNzLCBvciAtMSBpZiB0aGUgdmFyaWFibGUKK2NvdWxkIG5vdCBiZSBwYXJzZWQgcHJvcGVybHkuCisKK0Jhc2ljIENvbmZpZyBRdWVyeWluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01vc3QgcHJvZ3JhbXMgd2lsbCBzaW1wbHkgd2FudCB0byBsb29rIHVwIHZhcmlhYmxlcyBpbiBhbGwgY29uZmlnIGZpbGVzCit0aGF0IGdpdCBrbm93cyBhYm91dCwgdXNpbmcgdGhlIG5vcm1hbCBwcmVjZWRlbmNlIHJ1bGVzLiBUbyBkbyB0aGlzLAorY2FsbCBgZ2l0X2NvbmZpZ2Agd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCB2b2lkIGRhdGEgcG9pbnRlci4KKworYGdpdF9jb25maWdgIHdpbGwgcmVhZCBhbGwgY29uZmlnIHNvdXJjZXMgaW4gb3JkZXIgb2YgaW5jcmVhc2luZworcHJpb3JpdHkuIFRodXMgYSBjYWxsYmFjayBzaG91bGQgdHlwaWNhbGx5IG92ZXJ3cml0ZSBwcmV2aW91c2x5LXNlZW4KK2VudHJpZXMgd2l0aCBuZXcgb25lcyAoZS5nLiwgaWYgYm90aCB0aGUgdXNlci13aWRlIGB+Ly5naXRjb25maWdgIGFuZAorcmVwby1zcGVjaWZpYyBgLmdpdC9jb25maWdgIGNvbnRhaW4gYGNvbG9yLnVpYCwgdGhlIGNvbmZpZyBtYWNoaW5lcnkKK3dpbGwgZmlyc3QgZmVlZCB0aGUgdXNlci13aWRlIG9uZSB0byB0aGUgY2FsbGJhY2ssIGFuZCB0aGVuIHRoZQorcmVwby1zcGVjaWZpYyBvbmU7IGJ5IG92ZXJ3cml0aW5nLCB0aGUgaGlnaGVyLXByaW9yaXR5IHJlcG8tc3BlY2lmaWMKK3ZhbHVlIGlzIGxlZnQgYXQgdGhlIGVuZCkuCisKK1RoZSBgZ2l0X2NvbmZpZ193aXRoX29wdGlvbnNgIGZ1bmN0aW9uIGxldHMgdGhlIGNhbGxlciBleGFtaW5lIGNvbmZpZword2hpbGUgYWRqdXN0aW5nIHNvbWUgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgYGdpdF9jb25maWdgLiBJdCBzaG91bGQKK2FsbW9zdCBuZXZlciBiZSB1c2VkIGJ5ICJyZWd1bGFyIiBnaXQgY29kZSB0aGF0IGlzIGxvb2tpbmcgdXAKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBJdCBpcyBpbnRlbmRlZCBmb3IgYWR2YW5jZWQgY2FsbGVycyBsaWtlCitgZ2l0LWNvbmZpZ2AsIHdoaWNoIGFyZSBpbnRlbnRpb25hbGx5IHR3ZWFraW5nIHRoZSBub3JtYWwgY29uZmlnLWxvb2t1cAorcHJvY2Vzcy4gSXQgdGFrZXMgdHdvIGV4dHJhIHBhcmFtZXRlcnM6CisKK2BmaWxlbmFtZWA6OgorSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm9uLU5VTEwsIGl0IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGZpbGUgdG8KK3BhcnNlIGZvciBjb25maWd1cmF0aW9uLCByYXRoZXIgdGhhbiBsb29raW5nIGluIHRoZSB1c3VhbCBmaWxlcy4gUmVndWxhcgorYGdpdF9jb25maWdgIGRlZmF1bHRzIHRvIGBOVUxMYC4KKworYHJlc3BlY3RfaW5jbHVkZXNgOjoKK1NwZWNpZnkgd2hldGhlciBpbmNsdWRlIGRpcmVjdGl2ZXMgc2hvdWxkIGJlIGZvbGxvd2VkIGluIHBhcnNlZCBmaWxlcy4KK1JlZ3VsYXIgYGdpdF9jb25maWdgIGRlZmF1bHRzIHRvIGAxYC4KKworVGhlcmUgaXMgYSBzcGVjaWFsIHZlcnNpb24gb2YgYGdpdF9jb25maWdgIGNhbGxlZCBgZ2l0X2NvbmZpZ19lYXJseWAuCitUaGlzIHZlcnNpb24gdGFrZXMgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgcmVwb3NpdG9yeQorY29uZmlnLCBpbnN0ZWFkIG9mIGhhdmluZyBpdCBsb29rZWQgdXAgdmlhIGBnaXRfcGF0aGAuIFRoaXMgaXMgdXNlZnVsCitlYXJseSBpbiBhIGdpdCBwcm9ncmFtIGJlZm9yZSB0aGUgcmVwb3NpdG9yeSBoYXMgYmVlbiBmb3VuZC4gVW5sZXNzCit5b3UncmUgd29ya2luZyB3aXRoIGVhcmx5IHNldHVwIGNvZGUsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHVzZQordGhpcy4KKworUmVhZGluZyBTcGVjaWZpYyBGaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZWFkIGEgc3BlY2lmaWMgZmlsZSBpbiBnaXQtY29uZmlnIGZvcm1hdCwgdXNlCitgZ2l0X2NvbmZpZ19mcm9tX2ZpbGVgLiBUaGlzIHRha2VzIHRoZSBzYW1lIGNhbGxiYWNrIGFuZCBkYXRhIHBhcmFtZXRlcnMKK2FzIGBnaXRfY29uZmlnYC4KKworVmFsdWUgUGFyc2luZyBIZWxwZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gYWlkIGluIHBhcnNpbmcgc3RyaW5nIHZhbHVlcywgdGhlIGNvbmZpZyBBUEkgcHJvdmlkZXMgY2FsbGJhY2tzIHdpdGgKK2EgbnVtYmVyIG9mIGhlbHBlciBmdW5jdGlvbnMsIGluY2x1ZGluZzoKKworYGdpdF9jb25maWdfaW50YDo6CitQYXJzZSB0aGUgc3RyaW5nIHRvIGFuIGludGVnZXIsIGluY2x1ZGluZyB1bml0IGZhY3RvcnMuIERpZXMgb24gZXJyb3I7CitvdGhlcndpc2UsIHJldHVybnMgdGhlIHBhcnNlZCByZXN1bHQuCisKK2BnaXRfY29uZmlnX3Vsb25nYDo6CitJZGVudGljYWwgdG8gYGdpdF9jb25maWdfaW50YCwgYnV0IGZvciB1bnNpZ25lZCBsb25ncy4KKworYGdpdF9jb25maWdfYm9vbGA6OgorUGFyc2UgYSBzdHJpbmcgaW50byBhIGJvb2xlYW4gdmFsdWUsIHJlc3BlY3Rpbmcga2V5d29yZHMgbGlrZSAidHJ1ZSIgYW5kCisiZmFsc2UiLiBJbnRlZ2VyIHZhbHVlcyBhcmUgY29udmVydGVkIGludG8gdHJ1ZS9mYWxzZSB2YWx1ZXMgKHdoZW4gdGhleQorYXJlIG5vbi16ZXJvIG9yIHplcm8sIHJlc3BlY3RpdmVseSkuIE90aGVyIHZhbHVlcyBjYXVzZSBhIGRpZSgpLiBJZgorcGFyc2luZyBpcyBzdWNjZXNzZnVsLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSByZXN1bHQuCisKK2BnaXRfY29uZmlnX2Jvb2xfb3JfaW50YDo6CitTYW1lIGFzIGBnaXRfY29uZmlnX2Jvb2xgLCBleGNlcHQgdGhhdCBpbnRlZ2VycyBhcmUgcmV0dXJuZWQgYXMtaXMsIGFuZAorYW4gYGlzX2Jvb2xgIGZsYWcgaXMgdW5zZXQuCisKK2BnaXRfY29uZmlnX21heWJlX2Jvb2xgOjoKK1NhbWUgYXMgYGdpdF9jb25maWdfYm9vbGAsIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgLTEgb24gZXJyb3IgcmF0aGVyCit0aGFuIGR5aW5nLgorCitgZ2l0X2NvbmZpZ19zdHJpbmdgOjoKK0FsbG9jYXRlcyBhbmQgY29waWVzIHRoZSB2YWx1ZSBzdHJpbmcgaW50byB0aGUgYGRlc3RgIHBhcmFtZXRlcjsgaWYgbm8KK3N0cmluZyBpcyBnaXZlbiwgcHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEuCisKK2BnaXRfY29uZmlnX3BhdGhuYW1lYDo6CitTaW1pbGFyIHRvIGBnaXRfY29uZmlnX3N0cmluZ2AsIGJ1dCBleHBhbmRzIGB+YCBvciBgfnVzZXJgIGludG8gdGhlCit1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgd2hlbiBmb3VuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgorCitJbmNsdWRlIERpcmVjdGl2ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCB0aGUgY29uZmlnIHBhcnNlciBkb2VzIG5vdCByZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcy4KK0hvd2V2ZXIsIGEgY2FsbGVyIGNhbiB1c2UgdGhlIHNwZWNpYWwgYGdpdF9jb25maWdfaW5jbHVkZWAgd3JhcHBlcgorY2FsbGJhY2sgdG8gc3VwcG9ydCB0aGVtLiBUbyBkbyBzbywgeW91IHNpbXBseSB3cmFwIHlvdXIgInJlYWwiIGNhbGxiYWNrCitmdW5jdGlvbiBhbmQgZGF0YSBwb2ludGVyIGluIGEgYHN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhYCwgYW5kIHBhc3MKK3RoZSB3cmFwcGVyIHRvIHRoZSByZWd1bGFyIGNvbmZpZy1yZWFkaW5nIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCByZWFkX2ZpbGVfd2l0aF9pbmNsdWRlKGNvbnN0IGNoYXIgKmZpbGUsIGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhIGluYyA9IENPTkZJR19JTkNMVURFX0lOSVQ7CisJaW5jLmZuID0gZm47CisJaW5jLmRhdGEgPSBkYXRhOworCXJldHVybiBnaXRfY29uZmlnX2Zyb21fZmlsZShnaXRfY29uZmlnX2luY2x1ZGUsIGZpbGUsICZpbmMpOworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgZ2l0X2NvbmZpZ2AgcmVzcGVjdHMgaW5jbHVkZXMgYXV0b21hdGljYWxseS4gVGhlIGxvd2VyLWxldmVsCitgZ2l0X2NvbmZpZ19mcm9tX2ZpbGVgIGRvZXMgbm90LgorCitXcml0aW5nIENvbmZpZyBGaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVE9ETwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWNyZWRlbnRpYWxzLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1jcmVkZW50aWFscy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3N2I1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1jcmVkZW50aWFscy50eHQKQEAgLTAsMCArMSwyNjggQEAKK2NyZWRlbnRpYWxzIEFQSQorPT09PT09PT09PT09PT09CisKK1RoZSBjcmVkZW50aWFscyBBUEkgcHJvdmlkZXMgYW4gYWJzdHJhY3RlZCB3YXkgb2YgZ2F0aGVyaW5nIHVzZXJuYW1lIGFuZAorcGFzc3dvcmQgY3JlZGVudGlhbHMgZnJvbSB0aGUgdXNlciAoZXZlbiB0aG91Z2ggY3JlZGVudGlhbHMgaW4gdGhlIHdpZGVyCit3b3JsZCBjYW4gdGFrZSBtYW55IGZvcm1zLCBpbiB0aGlzIGRvY3VtZW50IHRoZSB3b3JkICJjcmVkZW50aWFsIiBhbHdheXMKK3JlZmVycyB0byBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBwYWlyKS4KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdHdvIGludGVyZmFjZXM6IHRoZSBDIEFQSSB0aGF0IHRoZSBjcmVkZW50aWFsCitzdWJzeXN0ZW0gcHJvdmlkZXMgdG8gdGhlIHJlc3Qgb2YgZ2l0LCBhbmQgdGhlIHByb3RvY29sIHRoYXQgZ2l0IHVzZXMgdG8KK2NvbW11bmljYXRlIHdpdGggc3lzdGVtLXNwZWNpZmljICJjcmVkZW50aWFsIGhlbHBlcnMiLiBJZiB5b3UgYXJlCit3cml0aW5nIGdpdCBjb2RlIHRoYXQgd2FudHMgdG8gbG9vayB1cCBvciBwcm9tcHQgZm9yIGNyZWRlbnRpYWxzLCBzZWUKK3RoZSBzZWN0aW9uICJDIEFQSSIgYmVsb3cuIElmIHlvdSB3YW50IHRvIHdyaXRlIHlvdXIgb3duIGhlbHBlciwgc2VlCit0aGUgc2VjdGlvbiBvbiAiQ3JlZGVudGlhbCBIZWxwZXJzIiBiZWxvdy4KKworVHlwaWNhbCBzZXR1cAorLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgZ2l0IGNvZGUgKEMpICAgICAgICAgIHwtLS0gdG8gc2VydmVyIHJlcXVpcmluZyAtLS0+Cit8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICBhdXRoZW50aWNhdGlvbgorfC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufAorfCBDIGNyZWRlbnRpYWwgQVBJICAgICAgfC0tLSBwcm9tcHQgLS0tPiBVc2VyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJXiAgICAgIHwKKwl8IHBpcGUgfAorCXwgICAgICB2CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGdpdCBjcmVkZW50aWFsIGhlbHBlciB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCistLS0tLS0tLS0tLS0KKworVGhlIGdpdCBjb2RlICh0eXBpY2FsbHkgYSByZW1vdGUtaGVscGVyKSB3aWxsIGNhbGwgdGhlIEMgQVBJIHRvIG9idGFpbgorY3JlZGVudGlhbCBkYXRhIGxpa2UgYSBsb2dpbi9wYXNzd29yZCBwYWlyIChjcmVkZW50aWFsX2ZpbGwpLiBUaGUKK0FQSSB3aWxsIGl0c2VsZiBjYWxsIGEgcmVtb3RlIGhlbHBlciAoZS5nLiAiZ2l0IGNyZWRlbnRpYWwtY2FjaGUiIG9yCisiZ2l0IGNyZWRlbnRpYWwtc3RvcmUiKSB0aGF0IG1heSByZXRyaWV2ZSBjcmVkZW50aWFsIGRhdGEgZnJvbSBhCitzdG9yZS4gSWYgdGhlIGNyZWRlbnRpYWwgaGVscGVyIGNhbm5vdCBmaW5kIHRoZSBpbmZvcm1hdGlvbiwgdGhlIEMgQVBJCit3aWxsIHByb21wdCB0aGUgdXNlci4gVGhlbiwgdGhlIGNhbGxlciBvZiB0aGUgQVBJIHRha2VzIGNhcmUgb2YKK2NvbnRhY3RpbmcgdGhlIHNlcnZlciwgYW5kIGRvZXMgdGhlIGFjdHVhbCBhdXRoZW50aWNhdGlvbi4KKworQyBBUEkKKy0tLS0tCisKK1RoZSBjcmVkZW50aWFsIEMgQVBJIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBieSBnaXQgY29kZSB3aGljaCBuZWVkcyB0bworYWNxdWlyZSBvciBzdG9yZSBhIGNyZWRlbnRpYWwuIEl0IGlzIGNlbnRlcmVkIGFyb3VuZCBhbiBvYmplY3QKK3JlcHJlc2VudGluZyBhIHNpbmdsZSBjcmVkZW50aWFsIGFuZCBwcm92aWRlcyB0aHJlZSBiYXNpYyBvcGVyYXRpb25zOgorZmlsbCAoYWNxdWlyZSBjcmVkZW50aWFscyBieSBjYWxsaW5nIGhlbHBlcnMgYW5kL29yIHByb21wdGluZyB0aGUgdXNlciksCithcHByb3ZlIChtYXJrIGEgY3JlZGVudGlhbCBhcyBzdWNjZXNzZnVsbHkgdXNlZCBzbyB0aGF0IGl0IGNhbiBiZSBzdG9yZWQKK2ZvciBsYXRlciB1c2UpLCBhbmQgcmVqZWN0IChtYXJrIGEgY3JlZGVudGlhbCBhcyB1bnN1Y2Nlc3NmdWwgc28gdGhhdCBpdAorY2FuIGJlIGVyYXNlZCBmcm9tIGFueSBwZXJzaXN0ZW50IHN0b3JhZ2UpLgorCitEYXRhIFN0cnVjdHVyZXMKK35+fn5+fn5+fn5+fn5+fgorCitgc3RydWN0IGNyZWRlbnRpYWxgOjoKKworCVRoaXMgc3RydWN0IHJlcHJlc2VudHMgYSBzaW5nbGUgdXNlcm5hbWUvcGFzc3dvcmQgY29tYmluYXRpb24KKwlhbG9uZyB3aXRoIGFueSBhc3NvY2lhdGVkIGNvbnRleHQuIEFsbCBzdHJpbmcgZmllbGRzIHNob3VsZCBiZQorCWhlYXAtYWxsb2NhdGVkIChvciBOVUxMIGlmIHRoZXkgYXJlIG5vdCBrbm93biBvciBub3QgYXBwbGljYWJsZSkuCisJVGhlIG1lYW5pbmcgb2YgdGhlIGluZGl2aWR1YWwgY29udGV4dCBmaWVsZHMgaXMgdGhlIHNhbWUgYXMKKwl0aGVpciBjb3VudGVycGFydHMgaW4gdGhlIGhlbHBlciBwcm90b2NvbDsgc2VlIHRoZSBzZWN0aW9uIGJlbG93CisJZm9yIGEgZGVzY3JpcHRpb24gb2YgZWFjaCBmaWVsZC4KKysKK1RoZSBgaGVscGVyc2AgbWVtYmVyIG9mIHRoZSBzdHJ1Y3QgaXMgYSBgc3RyaW5nX2xpc3RgIG9mIGhlbHBlcnMuICBFYWNoCitzdHJpbmcgc3BlY2lmaWVzIGFuIGV4dGVybmFsIGhlbHBlciB3aGljaCB3aWxsIGJlIHJ1biwgaW4gb3JkZXIsIHRvCitlaXRoZXIgYWNxdWlyZSBvciBzdG9yZSBjcmVkZW50aWFscy4gU2VlIHRoZSBzZWN0aW9uIG9uIGNyZWRlbnRpYWwKK2hlbHBlcnMgYmVsb3cuIFRoaXMgbGlzdCBpcyBmaWxsZWQtaW4gYnkgdGhlIEFQSSBmdW5jdGlvbnMKK2FjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBiZWZvcmUKK2NvbnN1bHRpbmcgaGVscGVycywgc28gdGhlcmUgdXN1YWxseSBpcyBubyBuZWVkIGZvciBhIGNhbGxlciB0bworbW9kaWZ5IHRoZSBoZWxwZXJzIGZpZWxkIGF0IGFsbC4KKysKK1RoaXMgc3RydWN0IHNob3VsZCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQgd2l0aCBgQ1JFREVOVElBTF9JTklUYCBvcgorYGNyZWRlbnRpYWxfaW5pdGAuCisKKworRnVuY3Rpb25zCit+fn5+fn5+fn4KKworYGNyZWRlbnRpYWxfaW5pdGA6OgorCisJSW5pdGlhbGl6ZSBhIGNyZWRlbnRpYWwgc3RydWN0dXJlLCBzZXR0aW5nIGFsbCBmaWVsZHMgdG8gZW1wdHkuCisKK2BjcmVkZW50aWFsX2NsZWFyYDo6CisKKwlGcmVlIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjcmVkZW50aWFsIHN0cnVjdHVyZSwKKwlyZXR1cm5pbmcgaXQgdG8gYSBwcmlzdGluZSBpbml0aWFsaXplZCBzdGF0ZS4KKworYGNyZWRlbnRpYWxfZmlsbGA6OgorCisJSW5zdHJ1Y3QgdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRvIGZpbGwgdGhlIHVzZXJuYW1lIGFuZAorCXBhc3N3b3JkIGZpZWxkcyBvZiB0aGUgcGFzc2VkIGNyZWRlbnRpYWwgc3RydWN0IGJ5IGZpcnN0CisJY29uc3VsdGluZyBoZWxwZXJzLCB0aGVuIGFza2luZyB0aGUgdXNlci4gQWZ0ZXIgdGhpcyBmdW5jdGlvbgorCXJldHVybnMsIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzIG9mIHRoZSBjcmVkZW50aWFsIGFyZQorCWd1YXJhbnRlZWQgdG8gYmUgbm9uLU5VTEwuIElmIGFuIGVycm9yIG9jY3VycywgdGhlIGZ1bmN0aW9uIHdpbGwKKwlkaWUoKS4KKworYGNyZWRlbnRpYWxfcmVqZWN0YDo6CisKKwlJbmZvcm0gdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRoYXQgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzCisJaGF2ZSBiZWVuIHJlamVjdGVkLiBUaGlzIHdpbGwgY2F1c2UgdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRvCisJbm90aWZ5IGFueSBoZWxwZXJzIG9mIHRoZSByZWplY3Rpb24gKHdoaWNoIGFsbG93cyB0aGVtLCBmb3IKKwlleGFtcGxlLCB0byBwdXJnZSB0aGUgaW52YWxpZCBjcmVkZW50aWFscyBmcm9tIHN0b3JhZ2UpLiAgSXQKKwl3aWxsIGFsc28gZnJlZSgpIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzIG9mIHRoZQorCWNyZWRlbnRpYWwgYW5kIHNldCB0aGVtIHRvIE5VTEwgKHJlYWR5aW5nIHRoZSBjcmVkZW50aWFsIGZvcgorCWFub3RoZXIgY2FsbCB0byBgY3JlZGVudGlhbF9maWxsYCkuIEFueSBlcnJvcnMgZnJvbSBoZWxwZXJzIGFyZQorCWlnbm9yZWQuCisKK2BjcmVkZW50aWFsX2FwcHJvdmVgOjoKKworCUluZm9ybSB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0gdGhhdCB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbHMKKwl3ZXJlIHN1Y2Nlc3NmdWxseSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbi4gIFRoaXMgd2lsbCBjYXVzZSB0aGUKKwljcmVkZW50aWFsIHN1YnN5c3RlbSB0byBub3RpZnkgYW55IGhlbHBlcnMgb2YgdGhlIGFwcHJvdmFsLCBzbworCXRoYXQgdGhleSBtYXkgc3RvcmUgdGhlIHJlc3VsdCB0byBiZSB1c2VkIGFnYWluLiAgQW55IGVycm9ycworCWZyb20gaGVscGVycyBhcmUgaWdub3JlZC4KKworYGNyZWRlbnRpYWxfZnJvbV91cmxgOjoKKworCVBhcnNlIGEgVVJMIGludG8gYnJva2VuLWRvd24gY3JlZGVudGlhbCBmaWVsZHMuCisKK0V4YW1wbGUKK35+fn5+fn4KKworVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IHRoZSBmdW5jdGlvbnMgb2YgdGhlIGNyZWRlbnRpYWwgQVBJIGNvdWxkIGJlCit1c2VkIHRvIGxvZ2luIHRvIGEgZmljdGl0aW91cyAiZm9vIiBzZXJ2aWNlIG9uIGEgcmVtb3RlIGhvc3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgZm9vX2xvZ2luKHN0cnVjdCBmb29fY29ubmVjdGlvbiAqZikKK3sKKwlpbnQgc3RhdHVzOworCS8qCisJICogQ3JlYXRlIGEgY3JlZGVudGlhbCB3aXRoIHNvbWUgY29udGV4dDsgd2UgZG9uJ3QgeWV0IGtub3cgdGhlCisJICogdXNlcm5hbWUgb3IgcGFzc3dvcmQuCisJICovCisKKwlzdHJ1Y3QgY3JlZGVudGlhbCBjID0gQ1JFREVOVElBTF9JTklUOworCWMucHJvdG9jb2wgPSB4c3RyZHVwKCJmb28iKTsKKwljLmhvc3QgPSB4c3RyZHVwKGYtPmhvc3RuYW1lKTsKKworCS8qCisJICogRmlsbCBpbiB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBieSBjb250YWN0aW5nCisJICogaGVscGVycyBhbmQvb3IgYXNraW5nIHRoZSB1c2VyLiBUaGUgZnVuY3Rpb24gd2lsbCBkaWUgaWYgaXQKKwkgKiBmYWlscy4KKwkgKi8KKwljcmVkZW50aWFsX2ZpbGwoJmMpOworCisJLyoKKwkgKiBPdGhlcndpc2UsIHdlIGhhdmUgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQuIFRyeSB0byB1c2UgaXQuCisJICovCisJc3RhdHVzID0gc2VuZF9mb29fbG9naW4oZiwgYy51c2VybmFtZSwgYy5wYXNzd29yZCk7CisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIEZPT19PSzoKKwkJLyogSXQgd29ya2VkLiBTdG9yZSB0aGUgY3JlZGVudGlhbCBmb3IgbGF0ZXIgdXNlLiAqLworCQljcmVkZW50aWFsX2FjY2VwdCgmYyk7CisJCWJyZWFrOworCWNhc2UgRk9PX0JBRF9MT0dJTjoKKwkJLyogRXJhc2UgdGhlIGNyZWRlbnRpYWwgZnJvbSBzdG9yYWdlIHNvIHdlIGRvbid0IHRyeSBpdAorCQkgKiBhZ2Fpbi4gKi8KKwkJY3JlZGVudGlhbF9yZWplY3QoJmMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKgorCQkgKiBTb21lIG90aGVyIGVycm9yIG9jY3VyZWQuIFdlIGRvbid0IGtub3cgaWYgdGhlCisJCSAqIGNyZWRlbnRpYWwgaXMgZ29vZCBvciBiYWQsIHNvIHJlcG9ydCBub3RoaW5nIHRvIHRoZQorCQkgKiBjcmVkZW50aWFsIHN1YnN5c3RlbS4KKwkJICovCisJfQorCisJLyogRnJlZSBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuICovCisJY3JlZGVudGlhbF9jbGVhcigmYyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitDcmVkZW50aWFsIEhlbHBlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVkZW50aWFsIGhlbHBlcnMgYXJlIHByb2dyYW1zIGV4ZWN1dGVkIGJ5IGdpdCB0byBmZXRjaCBvciBzYXZlCitjcmVkZW50aWFscyBmcm9tIGFuZCB0byBsb25nLXRlcm0gc3RvcmFnZSAod2hlcmUgImxvbmctdGVybSIgaXMgc2ltcGx5Citsb25nZXIgdGhhbiBhIHNpbmdsZSBnaXQgcHJvY2VzczsgZS5nLiwgY3JlZGVudGlhbHMgbWF5IGJlIHN0b3JlZAoraW4tbWVtb3J5IGZvciBhIGZldyBtaW51dGVzLCBvciBpbmRlZmluaXRlbHkgb24gZGlzaykuCisKK0VhY2ggaGVscGVyIGlzIHNwZWNpZmllZCBieSBhIHNpbmdsZSBzdHJpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIGBjcmVkZW50aWFsLmhlbHBlcmAgKGFuZCBvdGhlcnMsIHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorVGhlIHN0cmluZyBpcyB0cmFuc2Zvcm1lZCBieSBnaXQgaW50byBhIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgdXNpbmcKK3RoZXNlIHJ1bGVzOgorCisgIDEuIElmIHRoZSBoZWxwZXIgc3RyaW5nIGJlZ2lucyB3aXRoICIhIiwgaXQgaXMgY29uc2lkZXJlZCBhIHNoZWxsCisgICAgIHNuaXBwZXQsIGFuZCBldmVyeXRoaW5nIGFmdGVyIHRoZSAiISIgYmVjb21lcyB0aGUgY29tbWFuZC4KKworICAyLiBPdGhlcndpc2UsIGlmIHRoZSBoZWxwZXIgc3RyaW5nIGJlZ2lucyB3aXRoIGFuIGFic29sdXRlIHBhdGgsIHRoZQorICAgICB2ZXJiYXRpbSBoZWxwZXIgc3RyaW5nIGJlY29tZXMgdGhlIGNvbW1hbmQuCisKKyAgMy4gT3RoZXJ3aXNlLCB0aGUgc3RyaW5nICJnaXQgY3JlZGVudGlhbC0iIGlzIHByZXBlbmRlZCB0byB0aGUgaGVscGVyCisgICAgIHN0cmluZywgYW5kIHRoZSByZXN1bHQgYmVjb21lcyB0aGUgY29tbWFuZC4KKworVGhlIHJlc3VsdGluZyBjb21tYW5kIHRoZW4gaGFzIGFuICJvcGVyYXRpb24iIGFyZ3VtZW50IGFwcGVuZGVkIHRvIGl0Cisoc2VlIGJlbG93IGZvciBkZXRhaWxzKSwgYW5kIHRoZSByZXN1bHQgaXMgZXhlY3V0ZWQgYnkgdGhlIHNoZWxsLgorCitIZXJlIGFyZSBzb21lIGV4YW1wbGUgc3BlY2lmaWNhdGlvbnM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcnVuICJnaXQgY3JlZGVudGlhbC1mb28iCitmb28KKworIyBzYW1lIGFzIGFib3ZlLCBidXQgcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgaGVscGVyCitmb28gLS1iYXI9YmF6CisKKyMgdGhlIGFyZ3VtZW50cyBhcmUgcGFyc2VkIGJ5IHRoZSBzaGVsbCwgc28gdXNlIHNoZWxsCisjIHF1b3RpbmcgaWYgbmVjZXNzYXJ5Citmb28gLS1iYXI9IndoaXRlc3BhY2UgYXJnIgorCisjIHlvdSBjYW4gYWxzbyB1c2UgYW4gYWJzb2x1dGUgcGF0aCwgd2hpY2ggd2lsbCBub3QgdXNlIHRoZSBnaXQgd3JhcHBlcgorL3BhdGgvdG8vbXkvaGVscGVyIC0td2l0aC1hcmd1bWVudHMKKworIyBvciB5b3UgY2FuIHNwZWNpZnkgeW91ciBvd24gc2hlbGwgc25pcHBldAorIWYoKSB7IGVjaG8gInBhc3N3b3JkPWBjYXQgJEhPTUUvLnNlY3JldGAiOyB9OyBmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dlbmVyYWxseSBzcGVha2luZywgcnVsZSAoMykgYWJvdmUgaXMgdGhlIHNpbXBsZXN0IGZvciB1c2VycyB0byBzcGVjaWZ5LgorQXV0aG9ycyBvZiBjcmVkZW50aWFsIGhlbHBlcnMgc2hvdWxkIG1ha2UgYW4gZWZmb3J0IHRvIGFzc2lzdCB0aGVpcgordXNlcnMgYnkgbmFtaW5nIHRoZWlyIHByb2dyYW0gImdpdC1jcmVkZW50aWFsLSROQU1FIiwgYW5kIHB1dHRpbmcgaXQgaW4KK3RoZSAkUEFUSCBvciAkR0lUX0VYRUNfUEFUSCBkdXJpbmcgaW5zdGFsbGF0aW9uLCB3aGljaCB3aWxsIGFsbG93IGEgdXNlcgordG8gZW5hYmxlIGl0IHdpdGggYGdpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgJE5BTUVgLgorCitXaGVuIGEgaGVscGVyIGlzIGV4ZWN1dGVkLCBpdCB3aWxsIGhhdmUgb25lICJvcGVyYXRpb24iIGFyZ3VtZW50CithcHBlbmRlZCB0byBpdHMgY29tbWFuZCBsaW5lLCB3aGljaCBpcyBvbmUgb2Y6CisKK2BnZXRgOjoKKworCVJldHVybiBhIG1hdGNoaW5nIGNyZWRlbnRpYWwsIGlmIGFueSBleGlzdHMuCisKK2BzdG9yZWA6OgorCisJU3RvcmUgdGhlIGNyZWRlbnRpYWwsIGlmIGFwcGxpY2FibGUgdG8gdGhlIGhlbHBlci4KKworYGVyYXNlYDo6CisKKwlSZW1vdmUgYSBtYXRjaGluZyBjcmVkZW50aWFsLCBpZiBhbnksIGZyb20gdGhlIGhlbHBlcidzIHN0b3JhZ2UuCisKK1RoZSBkZXRhaWxzIG9mIHRoZSBjcmVkZW50aWFsIHdpbGwgYmUgcHJvdmlkZWQgb24gdGhlIGhlbHBlcidzIHN0ZGluCitzdHJlYW0uIFRoZSBleGFjdCBmb3JtYXQgaXMgdGhlIHNhbWUgYXMgdGhlIGlucHV0L291dHB1dCBmb3JtYXQgb2YgdGhlCitgZ2l0IGNyZWRlbnRpYWxgIHBsdW1iaW5nIGNvbW1hbmQgKHNlZSB0aGUgc2VjdGlvbiBgSU5QVVQvT1VUUFVUCitGT1JNQVRgIGluIGxpbmtnaXQ6Z2l0LWNyZWRlbnRpYWxbN10gZm9yIGEgZGV0YWlsZWQgc3BlY2lmaWNhdGlvbikuCisKK0ZvciBhIGBnZXRgIG9wZXJhdGlvbiwgdGhlIGhlbHBlciBzaG91bGQgcHJvZHVjZSBhIGxpc3Qgb2YgYXR0cmlidXRlcworb24gc3Rkb3V0IGluIHRoZSBzYW1lIGZvcm1hdC4gQSBoZWxwZXIgaXMgZnJlZSB0byBwcm9kdWNlIGEgc3Vic2V0LCBvcgorZXZlbiBubyB2YWx1ZXMgYXQgYWxsIGlmIGl0IGhhcyBub3RoaW5nIHVzZWZ1bCB0byBwcm92aWRlLiBBbnkgcHJvdmlkZWQKK2F0dHJpYnV0ZXMgd2lsbCBvdmVyd3JpdGUgdGhvc2UgYWxyZWFkeSBrbm93biBhYm91dCBieSBnaXQuCisKK0ZvciBhIGBzdG9yZWAgb3IgYGVyYXNlYCBvcGVyYXRpb24sIHRoZSBoZWxwZXIncyBvdXRwdXQgaXMgaWdub3JlZC4KK0lmIGl0IGZhaWxzIHRvIHBlcmZvcm0gdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24sIGl0IG1heSBjb21wbGFpbiB0bworc3RkZXJyIHRvIGluZm9ybSB0aGUgdXNlci4gSWYgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkCitvcGVyYXRpb24gKGUuZy4sIGEgcmVhZC1vbmx5IHN0b3JlKSwgaXQgc2hvdWxkIHNpbGVudGx5IGlnbm9yZSB0aGUKK3JlcXVlc3QuCisKK0lmIGEgaGVscGVyIHJlY2VpdmVzIGFueSBvdGhlciBvcGVyYXRpb24sIGl0IHNob3VsZCBzaWxlbnRseSBpZ25vcmUgdGhlCityZXF1ZXN0LiBUaGlzIGxlYXZlcyByb29tIGZvciBmdXR1cmUgb3BlcmF0aW9ucyB0byBiZSBhZGRlZCAob2xkZXIKK2hlbHBlcnMgd2lsbCBqdXN0IGlnbm9yZSB0aGUgbmV3IHJlcXVlc3RzKS4KKworU2VlIGFsc28KKy0tLS0tLS0tCisKK2xpbmtnaXQ6Z2l0Y3JlZGVudGlhbHNbN10KKworbGlua2dpdDpnaXQtY29uZmlnWzVdIChTZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYGNyZWRlbnRpYWwuKmApCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGVjb3JhdGUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWRlY29yYXRlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDUyYTZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWRlY29yYXRlLnR4dApAQCAtMCwwICsxLDYgQEAKK2RlY29yYXRlIEFQSQorPT09PT09PT09PT09CisKK1RhbGsgYWJvdXQgPGRlY29yYXRlLmg+CisKKyhMaW51cykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaWZmLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaWZmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDJlYmMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWRpZmYudHh0CkBAIC0wLDAgKzEsMTY2IEBACitkaWZmIEFQSQorPT09PT09PT0KKworVGhlIGRpZmYgQVBJIGlzIGZvciBwcm9ncmFtcyB0aGF0IGNvbXBhcmUgdHdvIHNldHMgb2YgZmlsZXMgKGUuZy4gdHdvCit0cmVlcywgb25lIHRyZWUgYW5kIHRoZSBpbmRleCkgYW5kIHByZXNlbnQgdGhlIGZvdW5kIGRpZmZlcmVuY2UgaW4KK3ZhcmlvdXMgd2F5cy4gIFRoZSBjYWxsaW5nIHByb2dyYW0gaXMgcmVzcG9uc2libGUgZm9yIGZlZWRpbmcgdGhlIEFQSQorcGFpcnMgb2YgZmlsZXMsIG9uZSBmcm9tIHRoZSAib2xkIiBzZXQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG9uZSBmcm9tCisibmV3IiBzZXQsIHRoYXQgYXJlIGRpZmZlcmVudC4gIFRoZSBsaWJyYXJ5IGNhbGxlZCB0aHJvdWdoIHRoaXMgQVBJIGlzCitjYWxsZWQgZGlmZmNvcmUsIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgdHdvIHRoaW5ncy4KKworKiBmaW5kaW5nIHRvdGFsIHJld3JpdGVzIChgLUJgKSwgcmVuYW1lcyAoYC1NYCkgYW5kIGNvcGllcyAoYC1DYCksIGFuZAorICBjaGFuZ2VzIHRoYXQgdG91Y2ggYSBzdHJpbmcgKGAtU2ApLCBhcyBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlci4KKworKiBvdXRwdXR0aW5nIHRoZSBkaWZmZXJlbmNlcyBpbiB2YXJpb3VzIGZvcm1hdHMsIGFzIHNwZWNpZmllZCBieSB0aGUKKyAgY2FsbGVyLgorCitDYWxsaW5nIHNlcXVlbmNlCistLS0tLS0tLS0tLS0tLS0tCisKKyogUHJlcGFyZSBgc3RydWN0IGRpZmZfb3B0aW9uc2AgdG8gcmVjb3JkIHRoZSBzZXQgb2YgZGlmZiBvcHRpb25zLCBhbmQKKyAgdGhlbiBjYWxsIGBkaWZmX3NldHVwKClgIHRvIGluaXRpYWxpemUgdGhpcyBzdHJ1Y3R1cmUuICBUaGlzIHNldHMgdXAKKyAgdGhlIHZhbmlsbGEgZGVmYXVsdC4KKworKiBGaWxsIGluIHRoZSBvcHRpb25zIHN0cnVjdHVyZSB0byBzcGVjaWZ5IGRlc2lyZWQgb3V0cHV0IGZvcm1hdCwgcmVuYW1lCisgIGRldGVjdGlvbiwgZXRjLiAgYGRpZmZfb3B0X3BhcnNlKClgIGNhbiBiZSB1c2VkIHRvIHBhcnNlIG9wdGlvbnMgZ2l2ZW4KKyAgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGluIGEgd2F5IGNvbnNpc3RlbnQgd2l0aCBleGlzdGluZyBnaXQtZGlmZgorICBmYW1pbHkgb2YgcHJvZ3JhbXMuCisKKyogQ2FsbCBgZGlmZl9zZXR1cF9kb25lKClgOyB0aGlzIGluc3BlY3RzIHRoZSBvcHRpb25zIHNldCB1cCBzbyBmYXIgZm9yCisgIGludGVybmFsIGNvbnNpc3RlbmN5IGFuZCBtYWtlIG5lY2Vzc2FyeSB0d2Vha2luZyB0byBpdCAoZS5nLiBpZgorICB0ZXh0dWFsIHBhdGNoIG91dHB1dCB3YXMgYXNrZWQsIHJlY3Vyc2l2ZSBiZWhhdmlvdXIgaXMgdHVybmVkIG9uKS4KKworKiBBcyB5b3UgZmluZCBkaWZmZXJlbnQgcGFpcnMgb2YgZmlsZXMsIGNhbGwgYGRpZmZfY2hhbmdlKClgIHRvIGZlZWQKKyAgbW9kaWZpZWQgZmlsZXMsIGBkaWZmX2FkZHJlbW92ZSgpYCB0byBmZWVkIGNyZWF0ZWQgb3IgZGVsZXRlZCBmaWxlcywKKyAgb3IgYGRpZmZfdW5tZXJnZSgpYCB0byBmZWVkIGEgZmlsZSB3aG9zZSBzdGF0ZSBpcyAndW5tZXJnZWQnIHRvIHRoZQorICBBUEkuICBUaGVzZSBhcmUgdGhpbiB3cmFwcGVycyB0byBhIGxvd2VyLWxldmVsIGBkaWZmX3F1ZXVlKClgIGZ1bmN0aW9uCisgIHRoYXQgaXMgZmxleGlibGUgZW5vdWdoIHRvIHJlY29yZCBhbnkgb2YgdGhlc2Uga2luZHMgb2YgY2hhbmdlcy4KKworKiBPbmNlIHlvdSBmaW5pc2ggZmVlZGluZyB0aGUgcGFpcnMgb2YgZmlsZXMsIGNhbGwgYGRpZmZjb3JlX3N0ZCgpYC4KKyAgVGhpcyB3aWxsIHRlbGwgdGhlIGRpZmZjb3JlIGxpYnJhcnkgdG8gZ28gYWhlYWQgYW5kIGRvIGl0cyB3b3JrLgorCisqIENhbGxpbmcgYGRpZmZfZmx1c2goKWAgd2lsbCBwcm9kdWNlIHRoZSBvdXRwdXQuCisKKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworKiBgc3RydWN0IGRpZmZfZmlsZXNwZWNgCisKK1RoaXMgaXMgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGZvciBhIHNpbmdsZSBmaWxlIChibG9iKS4gIEl0CityZWNvcmRzIHRoZSBibG9iIG9iamVjdCBuYW1lIChpZiBrbm93biAtLSBmb3IgYSB3b3JrIHRyZWUgZmlsZSBpdAordHlwaWNhbGx5IGlzIGEgTlVMIFNIQS0xKSwgZmlsZW1vZGUgYW5kIHBhdGhuYW1lLiAgVGhpcyBpcyB3aGF0IHRoZQorYGRpZmZfYWRkcmVtb3ZlKClgLCBgZGlmZl9jaGFuZ2UoKWAgYW5kIGBkaWZmX3VubWVyZ2UoKWAgc3ludGhlc2l6ZSBhbmQKK2ZlZWQgYGRpZmZfcXVldWUoKWAgZnVuY3Rpb24gd2l0aC4KKworKiBgc3RydWN0IGRpZmZfZmlsZXBhaXJgCisKK1RoaXMgcmVjb3JkcyBhIHBhaXIgb2YgYHN0cnVjdCBkaWZmX2ZpbGVzcGVjYDsgdGhlIGZpbGVzcGVjIGZvciBhIGZpbGUKK2luIHRoZSAib2xkIiBzZXQgKGkuZS4gcHJlaW1hZ2UpIGlzIGNhbGxlZCBgb25lYCwgYW5kIHRoZSBmaWxlc3BlYyBmb3IgYQorZmlsZSBpbiB0aGUgIm5ldyIgc2V0IChpLmUuIHBvc3RpbWFnZSkgaXMgY2FsbGVkIGB0d29gLiAgQSBjaGFuZ2UgdGhhdAorcmVwcmVzZW50cyBmaWxlIGNyZWF0aW9uIGhhcyBOVUxMIGluIGBvbmVgLCBhbmQgZmlsZSBkZWxldGlvbiBoYXMgTlVMTAoraW4gYHR3b2AuCisKK0EgYGZpbGVwYWlyYCBzdGFydHMgcG9pbnRpbmcgYXQgYG9uZWAgYW5kIGB0d29gIHRoYXQgYXJlIGZyb20gdGhlIHNhbWUKK2ZpbGVuYW1lLCBidXQgYGRpZmZjb3JlX3N0ZCgpYCBjYW4gYnJlYWsgcGFpcnMgYW5kIG1hdGNoIGNvbXBvbmVudAorZmlsZXNwZWNzIHdpdGggb3RoZXIgZmlsZXNwZWNzIGZyb20gYSBkaWZmZXJlbnQgZmlsZXBhaXIgdG8gZm9ybSBuZXcKK2ZpbGVwYWlyLiAgVGhpcyBpcyBjYWxsZWQgJ3JlbmFtZSBkZXRlY3Rpb24nLgorCisqIGBzdHJ1Y3QgZGlmZl9xdWV1ZWAKKworVGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgZmlsZXBhaXJzLiAgTm90YWJsZSBtZW1iZXJzIGFyZToKKworYHF1ZXVlYDo6CisKKwlBbiBhcnJheSBvZiBwb2ludGVycyB0byBgc3RydWN0IGRpZmZfZmlsZXBhaXJgLiAgVGhpcworCWR5bmFtaWNhbGx5IGdyb3dzIGFzIHlvdSBhZGQgZmlsZXBhaXJzOworCitgYWxsb2NgOjoKKworCVRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiB0aGUgYHF1ZXVlYCBhcnJheTsKKworYG5yYDo6CisKKwlUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBgcXVldWVgIGFycmF5LgorCisKKyogYHN0cnVjdCBkaWZmX29wdGlvbnNgCisKK1RoaXMgZGVzY3JpYmVzIHRoZSBzZXQgb2Ygb3B0aW9ucyB0aGUgY2FsbGluZyBwcm9ncmFtIHdhbnRzIHRvIGFmZmVjdAordGhlIG9wZXJhdGlvbiBvZiBkaWZmY29yZSBsaWJyYXJ5IHdpdGguCisKK05vdGFibGUgbWVtYmVycyBhcmU6CisKK2BvdXRwdXRfZm9ybWF0YDo6CisJVGhlIG91dHB1dCBmb3JtYXQgdXNlZCB3aGVuIGBkaWZmX2ZsdXNoKClgIGlzIHJ1bi4KKworYGNvbnRleHRgOjoKKwlOdW1iZXIgb2YgY29udGV4dCBsaW5lcyB0byBnZW5lcmF0ZSBpbiBwYXRjaCBvdXRwdXQuCisKK2BicmVha19vcHRgLCBgZGV0ZWN0X3JlbmFtZWAsIGByZW5hbWUtc2NvcmVgLCBgcmVuYW1lX2xpbWl0YDo6CisJQWZmZWN0cyB0aGUgd2F5IGRldGVjdGlvbiBsb2dpYyBmb3IgY29tcGxldGUgcmV3cml0ZXMsIHJlbmFtZXMKKwlhbmQgY29waWVzLgorCitgYWJicmV2YDo6CisJTnVtYmVyIG9mIGhleGRpZ2l0cyB0byBhYmJyZXZpYXRlIHJhdyBmb3JtYXQgb3V0cHV0IHRvLgorCitgcGlja2F4ZWA6OgorCUEgY29uc3RhbnQgc3RyaW5nIChjYW4gYW5kIHR5cGljYWxseSBkb2VzIGNvbnRhaW4gbmV3bGluZXMgdG8KKwlsb29rIGZvciBhIGJsb2NrIG9mIHRleHQsIG5vdCBqdXN0IGEgc2luZ2xlIGxpbmUpIHRvIGZpbHRlciBvdXQKKwl0aGUgZmlsZXBhaXJzIHRoYXQgZG8gbm90IGNoYW5nZSB0aGUgbnVtYmVyIG9mIHN0cmluZ3MgY29udGFpbmVkCisJaW4gaXRzIHByZWltYWdlIGFuZCBwb3N0aW1hZ2Ugb2YgdGhlIGRpZmZfcXVldWUuCisKK2BmbGFnc2A6OgorCVRoaXMgaXMgbW9zdGx5IGEgY29sbGVjdGlvbiBvZiBib29sZWFuIG9wdGlvbnMgdGhhdCBhZmZlY3RzIHRoZQorCW9wZXJhdGlvbiwgYnV0IHNvbWUgZG8gbm90IGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCB0aGUgZGlmZmNvcmUKKwlsaWJyYXJ5LgorCitCSU5BUlksIFRFWFQ7OworCUFmZmVjdHMgdGhlIHdheSBob3cgYSBmaWxlIHRoYXQgaXMgc2VlbWluZ2x5IGJpbmFyeSBpcyB0cmVhdGVkLgorCitGVUxMX0lOREVYOzsKKwlUZWxscyB0aGUgcGF0Y2ggb3V0cHV0IGZvcm1hdCBub3QgdG8gdXNlIGFiYnJldmlhdGVkIG9iamVjdAorCW5hbWVzIG9uIHRoZSAiaW5kZXgiIGxpbmVzLgorCitGSU5EX0NPUElFU19IQVJERVI7OworCVRlbGxzIHRoZSBkaWZmY29yZSBsaWJyYXJ5IHRoYXQgdGhlIGNhbGxlciBpcyBmZWVkaW5nIHVuY2hhbmdlZAorCWZpbGVwYWlycyB0byBhbGxvdyBjb3BpZXMgZnJvbSB1bm1vZGlmaWVkIGZpbGVzIGJlIGRldGVjdGVkLgorCitDT0xPUl9ESUZGOzsKKwlPdXRwdXQgc2hvdWxkIGJlIGNvbG9yZWQuCisKK0NPTE9SX0RJRkZfV09SRFM7OworCU91dHB1dCBpcyBhIGNvbG9yZWQgd29yZC1kaWZmLgorCitOT19JTkRFWDs7CisJVGVsbHMgZGlmZi1maWxlcyB0aGF0IHRoZSBpbnB1dCBpcyBub3QgdHJhY2tlZCBmaWxlcyBidXQgZmlsZXMKKwlpbiByYW5kb20gbG9jYXRpb25zIG9uIHRoZSBmaWxlc3lzdGVtLgorCitBTExPV19FWFRFUk5BTDs7CisJVGVsbHMgb3V0cHV0IHJvdXRpbmUgdGhhdCBpdCBpcyBPayB0byBjYWxsIHVzZXIgc3BlY2lmaWVkIHBhdGNoCisJb3V0cHV0IHJvdXRpbmUuICBQbHVtYmluZyBkaXNhYmxlcyB0aGlzIHRvIGVuc3VyZSBzdGFibGUgb3V0cHV0LgorCitRVUlFVDs7CisJRG8gbm90IHNob3cgYW55IG91dHB1dC4KKworUkVWRVJTRV9ESUZGOzsKKwlUZWxscyB0aGUgbGlicmFyeSB0aGF0IHRoZSBjYWxsaW5nIHByb2dyYW0gaXMgZmVlZGluZyB0aGUKKwlmaWxlcGFpcnMgcmV2ZXJzZWQ7IGBvbmVgIGlzIHR3bywgYW5kIGB0d29gIGlzIG9uZS4KKworRVhJVF9XSVRIX1NUQVRVUzs7CisJRm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgY2FsbGluZyBwcm9ncmFtIGFuZCB0aGUgb3B0aW9ucworCXBhcnNlcjsgdGVsbCB0aGUgY2FsbGluZyBwcm9ncmFtIHRvIHNpZ25hbCB0aGUgcHJlc2VuY2Ugb2YKKwlkaWZmZXJlbmNlIHVzaW5nIHByb2dyYW0gZXhpdCBjb2RlLgorCitIQVNfQ0hBTkdFUzs7CisJSW50ZXJuYWw7IHVzZWQgZm9yIG9wdGltaXphdGlvbiB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGNoYW5nZS4KKworU0lMRU5UX09OX1JFTU9WRTs7CisJQWZmZWN0cyBpZiBkaWZmLWZpbGVzIHNob3dzIHJlbW92ZWQgZmlsZXMuCisKK1JFQ1VSU0lWRSwgVFJFRV9JTl9SRUNVUlNJVkU7OworCVRlbGxzIGlmIHRyZWUgdHJhdmVyc2FsIGRvbmUgYnkgdHJlZS1kaWZmIHNob3VsZCByZWN1cnNpdmVseQorCWRlc2NlbmQgaW50byBhIHRyZWUgb2JqZWN0IHBhaXIgdGhhdCBhcmUgZGlmZmVyZW50IGluIHByZWltYWdlCisJYW5kIHBvc3RpbWFnZSBzZXQuCisKKyhKQykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaXJlY3RvcnktbGlzdGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlyZWN0b3J5LWxpc3RpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZDZmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlyZWN0b3J5LWxpc3RpbmcudHh0CkBAIC0wLDAgKzEsNzkgQEAKK2RpcmVjdG9yeSBsaXN0aW5nIEFQSQorPT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBkaXJlY3RvcnkgbGlzdGluZyBBUEkgaXMgdXNlZCB0byBlbnVtZXJhdGUgcGF0aHMgaW4gdGhlIHdvcmsgdHJlZSwKK29wdGlvbmFsbHkgdGFraW5nIGAuZ2l0L2luZm8vZXhjbHVkZWAgYW5kIGAuZ2l0aWdub3JlYCBmaWxlcyBwZXIKK2RpcmVjdG9yeSBpbnRvIGFjY291bnQuCisKK0RhdGEgc3RydWN0dXJlCistLS0tLS0tLS0tLS0tLQorCitgc3RydWN0IGRpcl9zdHJ1Y3RgIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHBhc3MgZGlyZWN0b3J5IHRyYXZlcnNhbAorb3B0aW9ucyB0byB0aGUgbGlicmFyeSBhbmQgdG8gcmVjb3JkIHRoZSBwYXRocyBkaXNjb3ZlcmVkLiAgVGhlIG5vdGFibGUKK29wdGlvbnMgYXJlOgorCitgZXhjbHVkZV9wZXJfZGlyYDo6CisKKwlUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSByZWFkIGluIGVhY2ggZGlyZWN0b3J5IGZvciBleGNsdWRlZAorCWZpbGVzICh0eXBpY2FsbHkgYC5naXRpZ25vcmVgKS4KKworYGNvbGxlY3RfaWdub3JlZGA6OgorCisJSW5jbHVkZSBwYXRocyB0aGF0IGFyZSB0byBiZSBleGNsdWRlZCBpbiB0aGUgcmVzdWx0LgorCitgc2hvd19pZ25vcmVkYDo6CisKKwlUaGUgdHJhdmVyc2FsIGlzIGZvciBmaW5kaW5nIGp1c3QgaWdub3JlZCBmaWxlcywgbm90IHVuaWdub3JlZAorCWZpbGVzLgorCitgc2hvd19vdGhlcl9kaXJlY3Rvcmllc2A6OgorCisJSW5jbHVkZSBhIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCB0cmFja2VkLgorCitgaGlkZV9lbXB0eV9kaXJlY3Rvcmllc2A6OgorCisJRG8gbm90IGluY2x1ZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgdHJhY2tlZCBhbmQgaXMgZW1wdHkuCisKK2Bub19naXRsaW5rc2A6OgorCisJSWYgc2V0LCByZWN1cnNlIGludG8gYSBkaXJlY3RvcnkgdGhhdCBsb29rcyBsaWtlIGEgZ2l0CisJZGlyZWN0b3J5LiAgT3RoZXJ3aXNlIGl0IGlzIHNob3duIGFzIGEgZGlyZWN0b3J5LgorCitUaGUgcmVzdWx0IG9mIHRoZSBlbnVtZXJhdGlvbiBpcyBsZWZ0IGluIHRoZXNlIGZpZWxkczo6CisKK2BlbnRyaWVzW11gOjoKKworCUFuIGFycmF5IG9mIGBzdHJ1Y3QgZGlyX2VudHJ5YCwgZWFjaCBlbGVtZW50IG9mIHdoaWNoIGRlc2NyaWJlcworCWEgcGF0aC4KKworYG5yYDo6CisKKwlUaGUgbnVtYmVyIG9mIG1lbWJlcnMgaW4gYGVudHJpZXNbXWAgYXJyYXkuCisKK2BhbGxvY2A6OgorCisJSW50ZXJuYWwgdXNlOyBrZWVwcyB0cmFjayBvZiBhbGxvY2F0aW9uIG9mIGBlbnRyaWVzW11gIGFycmF5LgorCisKK0NhbGxpbmcgc2VxdWVuY2UKKy0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogaW5kZXggbWF5IGJlIGxvb2tlZCBhdCBmb3IgLmdpdGlnbm9yZSBmaWxlcyB0aGF0IGFyZSBDRV9TS0lQX1dPUktUUkVFCittYXJrZWQuIElmIHlvdSB0byBleGNsdWRlIGZpbGVzLCBtYWtlIHN1cmUgeW91IGhhdmUgbG9hZGVkIGluZGV4IGZpcnN0LgorCisqIFByZXBhcmUgYHN0cnVjdCBkaXJfc3RydWN0IGRpcmAgYW5kIGNsZWFyIGl0IHdpdGggYG1lbXNldCgmZGlyLCAwLAorICBzaXplb2YoZGlyKSlgLgorCisqIENhbGwgYGFkZF9leGNsdWRlKClgIHRvIGFkZCBzaW5nbGUgZXhjbHVkZSBwYXR0ZXJuLAorICBgYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZSgpYCB0byBhZGQgcGF0dGVybnMgZnJvbSBhIGZpbGUKKyAgKGUuZy4gYC5naXQvaW5mby9leGNsdWRlYCksIGFuZC9vciBzZXQgYGRpci5leGNsdWRlX3Blcl9kaXJgLiAgQQorICBzaG9ydC1oYW5kIGZ1bmN0aW9uIGBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygpYCBjYW4gYmUgdXNlZCB0byBzZXQgdXAKKyAgdGhlIHN0YW5kYXJkIHNldCBvZiBleGNsdWRlIHNldHRpbmdzLgorCisqIFNldCBvcHRpb25zIGRlc2NyaWJlZCBpbiB0aGUgRGF0YSBTdHJ1Y3R1cmUgc2VjdGlvbiBhYm92ZS4KKworKiBDYWxsIGByZWFkX2RpcmVjdG9yeSgpYC4KKworKiBVc2UgYGRpci5lbnRyaWVzW11gLgorCisoSkMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ2l0YXR0cmlidXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ2l0YXR0cmlidXRlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzNjNiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1naXRhdHRyaWJ1dGVzLnR4dApAQCAtMCwwICsxLDEyOCBAQAorZ2l0YXR0cmlidXRlcyBBUEkKKz09PT09PT09PT09PT09PT09CisKK2dpdGF0dHJpYnV0ZXMgbWVjaGFuaXNtIGdpdmVzIGEgdW5pZm9ybSB3YXkgdG8gYXNzb2NpYXRlIHZhcmlvdXMKK2F0dHJpYnV0ZXMgdG8gc2V0IG9mIHBhdGhzLgorCisKK0RhdGEgU3RydWN0dXJlCistLS0tLS0tLS0tLS0tLQorCitgc3RydWN0IGdpdF9hdHRyYDo6CisKKwlBbiBhdHRyaWJ1dGUgaXMgYW4gb3BhcXVlIG9iamVjdCB0aGF0IGlzIGlkZW50aWZpZWQgYnkgaXRzIG5hbWUuCisJUGFzcyB0aGUgbmFtZSB0byBgZ2l0X2F0dHIoKWAgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBvYmplY3Qgb2YKKwl0aGlzIHR5cGUuICBUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzdHJ1Y3R1cmUgaXMKKwlvZiBubyBpbnRlcmVzdCB0byB0aGUgY2FsbGluZyBwcm9ncmFtcy4gIFRoZSBuYW1lIG9mIHRoZQorCWF0dHJpYnV0ZSBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbGxpbmcgYGdpdF9hdHRyX25hbWUoKWAuCisKK2BzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2tgOjoKKworCVRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBzZXQgb2YgYXR0cmlidXRlcyB0byBjaGVjayBpbiBhIGNhbGwKKwl0byBgZ2l0X2NoZWNrX2F0dHIoKWAgZnVuY3Rpb24sIGFuZCByZWNlaXZlcyB0aGUgcmVzdWx0cy4KKworCitBdHRyaWJ1dGUgVmFsdWVzCistLS0tLS0tLS0tLS0tLS0tCisKK0FuIGF0dHJpYnV0ZSBmb3IgYSBwYXRoIGNhbiBiZSBpbiBvbmUgb2YgZm91ciBzdGF0ZXM6IFNldCwgVW5zZXQsCitVbnNwZWNpZmllZCBvciBzZXQgdG8gYSBzdHJpbmcsIGFuZCBgLnZhbHVlYCBtZW1iZXIgb2YgYHN0cnVjdAorZ2l0X2F0dHJfY2hlY2tgIHJlY29yZHMgaXQuICBUaGVyZSBhcmUgdGhyZWUgbWFjcm9zIHRvIGNoZWNrIHRoZXNlOgorCitgQVRUUl9UUlVFKClgOjoKKworCVJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGlzIFNldCBmb3IgdGhlIHBhdGguCisKK2BBVFRSX0ZBTFNFKClgOjoKKworCVJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGlzIFVuc2V0IGZvciB0aGUgcGF0aC4KKworYEFUVFJfVU5TRVQoKWA6OgorCisJUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgVW5zcGVjaWZpZWQgZm9yIHRoZSBwYXRoLgorCitJZiBub25lIG9mIHRoZSBhYm92ZSByZXR1cm5zIHRydWUsIGAudmFsdWVgIG1lbWJlciBwb2ludHMgYXQgYSBzdHJpbmcKK3ZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoZSBwYXRoLgorCisKK1F1ZXJ5aW5nIFNwZWNpZmljIEF0dHJpYnV0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBQcmVwYXJlIGFuIGFycmF5IG9mIGBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2tgIHRvIGRlZmluZSB0aGUgbGlzdCBvZgorICBhdHRyaWJ1dGVzIHlvdSB3b3VsZCB3YW50IHRvIGNoZWNrLiAgVG8gcG9wdWxhdGUgdGhpcyBhcnJheSwgeW91IHdvdWxkCisgIG5lZWQgdG8gZGVmaW5lIG5lY2Vzc2FyeSBhdHRyaWJ1dGVzIGJ5IGNhbGxpbmcgYGdpdF9hdHRyKClgIGZ1bmN0aW9uLgorCisqIENhbGwgYGdpdF9jaGVja19hdHRyKClgIHRvIGNoZWNrIHRoZSBhdHRyaWJ1dGVzIGZvciB0aGUgcGF0aC4KKworKiBJbnNwZWN0IGBnaXRfYXR0cl9jaGVja2Agc3RydWN0dXJlIHRvIHNlZSBob3cgZWFjaCBvZiB0aGUgYXR0cmlidXRlIGluCisgIHRoZSBhcnJheSBpcyBkZWZpbmVkIGZvciB0aGUgcGF0aC4KKworCitFeGFtcGxlCistLS0tLS0tCisKK1RvIHNlZSBob3cgYXR0cmlidXRlcyAiY3JsZiIgYW5kICJpbmRlbnQiIGFyZSBzZXQgZm9yIGRpZmZlcmVudCBwYXRocy4KKworLiBQcmVwYXJlIGFuIGFycmF5IG9mIGBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2tgIHdpdGggdHdvIGVsZW1lbnRzIChiZWNhdXNlCisgIHdlIGFyZSBjaGVja2luZyB0d28gYXR0cmlidXRlcykuICBJbml0aWFsaXplIHRoZWlyIGBhdHRyYCBtZW1iZXIgd2l0aAorICBwb2ludGVycyB0byBgc3RydWN0IGdpdF9hdHRyYCBvYnRhaW5lZCBieSBjYWxsaW5nIGBnaXRfYXR0cigpYDoKKworLS0tLS0tLS0tLS0tCitzdGF0aWMgc3RydWN0IGdpdF9hdHRyX2NoZWNrIGNoZWNrWzJdOworc3RhdGljIHZvaWQgc2V0dXBfY2hlY2sodm9pZCkKK3sKKwlpZiAoY2hlY2tbMF0uYXR0cikKKwkJcmV0dXJuOyAvKiBhbHJlYWR5IGRvbmUgKi8KKwljaGVja1swXS5hdHRyID0gZ2l0X2F0dHIoImNybGYiKTsKKwljaGVja1sxXS5hdHRyID0gZ2l0X2F0dHIoImlkZW50Iik7Cit9CistLS0tLS0tLS0tLS0KKworLiBDYWxsIGBnaXRfY2hlY2tfYXR0cigpYCB3aXRoIHRoZSBwcmVwYXJlZCBhcnJheSBvZiBgc3RydWN0IGdpdF9hdHRyX2NoZWNrYDoKKworLS0tLS0tLS0tLS0tCisJY29uc3QgY2hhciAqcGF0aDsKKworCXNldHVwX2NoZWNrKCk7CisJZ2l0X2NoZWNrX2F0dHIocGF0aCwgQVJSQVlfU0laRShjaGVjayksIGNoZWNrKTsKKy0tLS0tLS0tLS0tLQorCisuIEFjdCBvbiBgLnZhbHVlYCBtZW1iZXIgb2YgdGhlIHJlc3VsdCwgbGVmdCBpbiBgY2hlY2tbXWA6CisKKy0tLS0tLS0tLS0tLQorCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2tbMF0udmFsdWU7CisKKwlpZiAoQVRUUl9UUlVFKHZhbHVlKSkgeworCQlUaGUgYXR0cmlidXRlIGlzIFNldCwgYnkgbGlzdGluZyBvbmx5IHRoZSBuYW1lIG9mIHRoZQorCQlhdHRyaWJ1dGUgaW4gdGhlIGdpdGF0dHJpYnV0ZXMgZmlsZSBmb3IgdGhlIHBhdGguCisJfSBlbHNlIGlmIChBVFRSX0ZBTFNFKHZhbHVlKSkgeworCQlUaGUgYXR0cmlidXRlIGlzIFVuc2V0LCBieSBsaXN0aW5nIHRoZSBuYW1lIG9mIHRoZQorCQlhdHRyaWJ1dGUgcHJlZml4ZWQgd2l0aCBhIGRhc2ggLSBmb3IgdGhlIHBhdGguCisJfSBlbHNlIGlmIChBVFRSX1VOU0VUKHZhbHVlKSkgeworCQlUaGUgYXR0cmlidXRlIGlzIG5vdCBzZXQgbm9yIHVuc2V0IGZvciB0aGUgcGF0aC4KKwl9IGVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpbnB1dCIpKSB7CisJCUlmIG5vbmUgb2YgQVRUUl9UUlVFKCksIEFUVFJfRkFMU0UoKSwgb3IgQVRUUl9VTlNFVCgpIGlzCisJCXRydWUsIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyBzZXQgaW4gdGhlIGdpdGF0dHJpYnV0ZXMKKwkJZmlsZSBmb3IgdGhlIHBhdGggYnkgc2F5aW5nICJhdHRyPXZhbHVlIi4KKwl9IGVsc2UgaWYgKC4uLiBvdGhlciBjaGVjayB1c2luZyB2YWx1ZSBhcyBzdHJpbmcgLi4uKSB7CisJCS4uLgorCX0KKy0tLS0tLS0tLS0tLQorCisKK1F1ZXJ5aW5nIEFsbCBBdHRyaWJ1dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBnZXQgdGhlIHZhbHVlcyBvZiBhbGwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlOgorCisqIENhbGwgYGdpdF9hbGxfYXR0cnMoKWAsIHdoaWNoIHJldHVybnMgYW4gYXJyYXkgb2YgYGdpdF9hdHRyX2NoZWNrYAorICBzdHJ1Y3R1cmVzLgorCisqIEl0ZXJhdGUgb3ZlciB0aGUgYGdpdF9hdHRyX2NoZWNrYCBhcnJheSB0byBleGFtaW5lIHRoZSBhdHRyaWJ1dGUKKyAgbmFtZXMgYW5kIHZhbHVlcy4gIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgZGVzY3JpYmVkIGJ5IGEKKyAgYGdpdF9hdHRyX2NoZWNrYCBvYmplY3QgY2FuIGJlIHJldHJpZXZlZCB2aWEKKyAgYGdpdF9hdHRyX25hbWUoY2hlY2tbaV0uYXR0cilgLiAgKFBsZWFzZSBub3RlIHRoYXQgbm8gaXRlbXMgd2lsbCBiZQorICByZXR1cm5lZCBmb3IgdW5zZXQgYXR0cmlidXRlcywgc28gYEFUVFJfVU5TRVQoKWAgd2lsbCByZXR1cm4gZmFsc2UKKyAgZm9yIGFsbCByZXR1cm5lZCBgZ2l0X2FycmF5X2NoZWNrYCBvYmplY3RzLikKKworKiBGcmVlIHRoZSBgZ2l0X2FycmF5X2NoZWNrYCBhcnJheS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ncmVwLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ncmVwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjljYzg5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdyZXAudHh0CkBAIC0wLDAgKzEsOCBAQAorZ3JlcCBBUEkKKz09PT09PT09CisKK1RhbGsgYWJvdXQgPGdyZXAuaD4sIHRoaW5ncyBsaWtlOgorCisqIGdyZXBfYnVmZmVyKCkKKworKEpDKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhhc2gudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhhc2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDYxZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGFzaC50eHQKQEAgLTAsMCArMSw1MiBAQAoraGFzaCBBUEkKKz09PT09PT09CisKK1RoZSBoYXNoIEFQSSBpcyBhIGNvbGxlY3Rpb24gb2Ygc2ltcGxlIGhhc2ggdGFibGUgZnVuY3Rpb25zLiBVc2VycyBhcmUgZXhwZWN0ZWQKK3RvIGltcGxlbWVudCB0aGVpciBvd24gaGFzaGluZy4KKworRGF0YSBTdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworYHN0cnVjdCBoYXNoX3RhYmxlYDo6CisKKwlUaGUgaGFzaCB0YWJsZSBzdHJ1Y3R1cmUuIFRoZSBgYXJyYXlgIG1lbWJlciBwb2ludHMgdG8gdGhlIGhhc2ggdGFibGUKKwllbnRyaWVzLiBUaGUgYHNpemVgIG1lbWJlciBjb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiB2YWxpZCBhbmQgaW52YWxpZAorCWVudHJpZXMgaW4gdGhlIHRhYmxlLiBUaGUgYG5yYCBtZW1iZXIga2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZgorCXZhbGlkIGVudHJpZXMuCisKK2BzdHJ1Y3QgaGFzaF90YWJsZV9lbnRyeWA6OgorCisJQW4gb3BhcXVlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYW4gZW50cnkgaW4gdGhlIGhhc2ggdGFibGUuIFRoZSBgaGFzaGAKKwltZW1iZXIgaXMgdGhlIGVudHJ5J3MgaGFzaCBrZXkgYW5kIHRoZSBgcHRyYCBtZW1iZXIgaXMgdGhlIGVudHJ5J3MKKwl2YWx1ZS4KKworRnVuY3Rpb25zCistLS0tLS0tLS0KKworYGluaXRfaGFzaGA6OgorCisJSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZS4KKworYGZyZWVfaGFzaGA6OgorCisJUmVsZWFzZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBoYXNoIHRhYmxlLgorCitgaW5zZXJ0X2hhc2hgOjoKKworCUluc2VydCBhIHBvaW50ZXIgaW50byB0aGUgaGFzaCB0YWJsZS4gSWYgYW4gZW50cnkgd2l0aCB0aGF0IGhhc2gKKwlhbHJlYWR5IGV4aXN0cywgYSBwb2ludGVyIHRvIHRoZSBleGlzdGluZyBlbnRyeSdzIHZhbHVlIGlzIHJldHVybmVkLgorCU90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLiAgVGhpcyBhbGxvd3MgY2FsbGVycyB0byBpbXBsZW1lbnQKKwljaGFpbmluZywgZXRjLgorCitgbG9va3VwX2hhc2hgOjoKKworCUxvb2t1cCBhbiBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZS4gSWYgYW4gZW50cnkgd2l0aCB0aGF0IGhhc2ggZXhpc3RzCisJdGhlIGVudHJ5J3MgdmFsdWUgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLgorCitgZm9yX2VhY2hfaGFzaGA6OgorCisJQ2FsbCBhIGZ1bmN0aW9uIGZvciBlYWNoIGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlLiBUaGUgZnVuY3Rpb24gaXMKKwlleHBlY3RlZCB0byB0YWtlIHRoZSBlbnRyeSdzIHZhbHVlIGFzIGl0cyBvbmx5IGFyZ3VtZW50IGFuZCByZXR1cm4gYW4KKwlpbnQuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgaW50IHRoZSBsb29wIGlzIGFib3J0ZWQKKwlpbW1lZGlhdGVseS4gIE90aGVyd2lzZSwgdGhlIHJldHVybiB2YWx1ZSBpcyBhY2N1bXVsYXRlZCBhbmQgdGhlIHN1bQorCXJldHVybmVkIHVwb24gY29tcGxldGlvbiBvZiB0aGUgbG9vcC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1oaXN0b3J5LWdyYXBoLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1oaXN0b3J5LWdyYXBoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmZjOTBhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhpc3RvcnktZ3JhcGgudHh0CkBAIC0wLDAgKzEsMTc0IEBACitoaXN0b3J5IGdyYXBoIEFQSQorPT09PT09PT09PT09PT09PT0KKworVGhlIGdyYXBoIEFQSSBpcyB1c2VkIHRvIGRyYXcgYSB0ZXh0LWJhc2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21taXQKK2hpc3RvcnkuICBUaGUgQVBJIGdlbmVyYXRlcyB0aGUgZ3JhcGggaW4gYSBsaW5lLWJ5LWxpbmUgZmFzaGlvbi4KKworRnVuY3Rpb25zCistLS0tLS0tLS0KKworQ29yZSBmdW5jdGlvbnM6CisKKyogYGdyYXBoX2luaXQoKWAgY3JlYXRlcyBhIG5ldyBgc3RydWN0IGdpdF9ncmFwaGAKKworKiBgZ3JhcGhfdXBkYXRlKClgIG1vdmVzIHRoZSBncmFwaCB0byBhIG5ldyBjb21taXQuCisKKyogYGdyYXBoX25leHRfbGluZSgpYCBvdXRwdXRzIHRoZSBuZXh0IGxpbmUgb2YgdGhlIGdyYXBoIGludG8gYSBzdHJidWYuICBJdAorICBkb2VzIG5vdCBhZGQgYSB0ZXJtaW5hdGluZyBuZXdsaW5lLgorCisqIGBncmFwaF9wYWRkaW5nX2xpbmUoKWAgb3V0cHV0cyBhIGxpbmUgb2YgdmVydGljYWwgcGFkZGluZyBpbiB0aGUgZ3JhcGguICBJdAorICBpcyBzaW1pbGFyIHRvIGBncmFwaF9uZXh0X2xpbmUoKWAsIGJ1dCBpcyBndWFyYW50ZWVkIHRvIG5ldmVyIHByaW50IHRoZSBsaW5lCisgIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgY29tbWl0LiAgV2hlcmUgYGdyYXBoX25leHRfbGluZSgpYCB3b3VsZCBwcmludCB0aGUKKyAgY29tbWl0IGxpbmUgbmV4dCwgYGdyYXBoX3BhZGRpbmdfbGluZSgpYCBwcmludHMgYSBsaW5lIHRoYXQgc2ltcGx5IGV4dGVuZHMKKyAgYWxsIGJyYW5jaCBsaW5lcyBkb3dud2FyZHMgb25lIHJvdywgbGVhdmluZyB0aGVpciBwb3NpdGlvbnMgdW5jaGFuZ2VkLgorCisqIGBncmFwaF9pc19jb21taXRfZmluaXNoZWQoKWAgZGV0ZXJtaW5lcyBpZiB0aGUgZ3JhcGggaGFzIG91dHB1dCBhbGwgbGluZXMKKyAgbmVjZXNzYXJ5IGZvciB0aGUgY3VycmVudCBjb21taXQuICBJZiBgZ3JhcGhfdXBkYXRlKClgIGlzIGNhbGxlZCBiZWZvcmUgYWxsCisgIGxpbmVzIGZvciB0aGUgY3VycmVudCBjb21taXQgaGF2ZSBiZWVuIHByaW50ZWQsIHRoZSBuZXh0IGNhbGwgdG8KKyAgYGdyYXBoX25leHRfbGluZSgpYCB3aWxsIG91dHB1dCBhbiBlbGxpcHNpcywgdG8gaW5kaWNhdGUgdGhhdCBhIHBvcnRpb24gb2YKKyAgdGhlIGdyYXBoIHdhcyBvbWl0dGVkLgorCitUaGUgZm9sbG93aW5nIHV0aWxpdHkgZnVuY3Rpb25zIGFyZSB3cmFwcGVycyBhcm91bmQgYGdyYXBoX25leHRfbGluZSgpYCBhbmQKK2BncmFwaF9pc19jb21taXRfZmluaXNoZWQoKWAuICBUaGV5IGFsd2F5cyBwcmludCB0aGUgb3V0cHV0IHRvIHN0ZG91dC4KK1RoZXkgY2FuIGFsbCBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgZ3JhcGggYXJndW1lbnQsIGluIHdoaWNoIGNhc2Ugbm8gZ3JhcGgKK291dHB1dCB3aWxsIGJlIHByaW50ZWQuCisKKyogYGdyYXBoX3Nob3dfY29tbWl0KClgIGNhbGxzIGBncmFwaF9uZXh0X2xpbmUoKWAgdW50aWwgaXQgcmV0dXJucyBub24temVyby4KKyAgVGhpcyBwcmludHMgYWxsIGdyYXBoIGxpbmVzIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgbGluZSBjb250YWluaW5nIHRoaXMKKyAgY29tbWl0LiAgT3V0cHV0IGlzIHByaW50ZWQgdG8gc3Rkb3V0LiAgVGhlIGxhc3QgbGluZSBwcmludGVkIGRvZXMgbm90IGNvbnRhaW4KKyAgYSB0ZXJtaW5hdGluZyBuZXdsaW5lLiAgVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiB0aGUgY29tbWl0IGxpbmUgaGFzCisgIGFscmVhZHkgYmVlbiBwcmludGVkLCBvciBpdCB3aWxsIGxvb3AgZm9yZXZlci4KKworKiBgZ3JhcGhfc2hvd19vbmVsaW5lKClgIGNhbGxzIGBncmFwaF9uZXh0X2xpbmUoKWAgYW5kIHByaW50cyB0aGUgcmVzdWx0IHRvCisgIHN0ZG91dC4gIFRoZSBsaW5lIHByaW50ZWQgZG9lcyBub3QgY29udGFpbiBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuCisKKyogYGdyYXBoX3Nob3dfcGFkZGluZygpYCBjYWxscyBgZ3JhcGhfcGFkZGluZ19saW5lKClgIGFuZCBwcmludHMgdGhlIHJlc3VsdCB0bworICBzdGRvdXQuICBUaGUgbGluZSBwcmludGVkIGRvZXMgbm90IGNvbnRhaW4gYSB0ZXJtaW5hdGluZyBuZXdsaW5lLgorCisqIGBncmFwaF9zaG93X3JlbWFpbmRlcigpYCBjYWxscyBgZ3JhcGhfbmV4dF9saW5lKClgIHVudGlsCisgIGBncmFwaF9pc19jb21taXRfZmluaXNoZWQoKWAgcmV0dXJucyBub24temVyby4gIE91dHB1dCBpcyBwcmludGVkIHRvIHN0ZG91dC4KKyAgVGhlIGxhc3QgbGluZSBwcmludGVkIGRvZXMgbm90IGNvbnRhaW4gYSB0ZXJtaW5hdGluZyBuZXdsaW5lLiAgUmV0dXJucyAxIGlmCisgIG91dHB1dCB3YXMgcHJpbnRlZCwgYW5kIDAgaWYgbm8gb3V0cHV0IHdhcyBuZWNlc3NhcnkuCisKKyogYGdyYXBoX3Nob3dfc3RyYnVmKClgIHByaW50cyB0aGUgc3BlY2lmaWVkIHN0cmJ1ZiB0byBzdGRvdXQsIHByZWZpeGluZyBhbGwKKyAgbGluZXMgYnV0IHRoZSBmaXJzdCB3aXRoIGEgZ3JhcGggbGluZS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgIGVuc3VyaW5nIGdyYXBoIG91dHB1dCBmb3IgdGhlIGZpcnN0IGxpbmUgaGFzIGFscmVhZHkgYmVlbiBwcmludGVkIHRvIHN0ZG91dC4KKyAgKFRoaXMgY2FuIGJlIGRvbmUgd2l0aCBgZ3JhcGhfc2hvd19jb21taXQoKWAgb3IgYGdyYXBoX3Nob3dfb25lbGluZSgpYC4pICBJZgorICBhIE5VTEwgZ3JhcGggaXMgc3VwcGxpZWQsIHRoZSBzdHJidWYgaXMgcHJpbnRlZCBhcy1pcy4KKworKiBgZ3JhcGhfc2hvd19jb21taXRfbXNnKClgIGlzIHNpbWlsYXIgdG8gYGdyYXBoX3Nob3dfc3RyYnVmKClgLCBidXQgaXQgYWxzbworICBwcmludHMgdGhlIHJlbWFpbmRlciBvZiB0aGUgZ3JhcGgsIGlmIG1vcmUgbGluZXMgYXJlIG5lZWRlZCBhZnRlciB0aGUgc3RyYnVmCisgIGVuZHMuICBJdCBpcyBiZXR0ZXIgdGhhbiBkaXJlY3RseSBjYWxsaW5nIGBncmFwaF9zaG93X3N0cmJ1ZigpYCBmb2xsb3dlZCBieQorICBgZ3JhcGhfc2hvd19yZW1haW5kZXIoKWAgc2luY2UgaXQgcHJvcGVybHkgaGFuZGxlcyBidWZmZXJzIHRoYXQgZG8gbm90IGVuZCBpbgorICBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuICBUaGUgb3V0cHV0IHByaW50ZWQgYnkgYGdyYXBoX3Nob3dfY29tbWl0X21zZygpYCB3aWxsCisgIGVuZCBpbiBhIG5ld2xpbmUgaWYgYW5kIG9ubHkgaWYgdGhlIHN0cmJ1ZiBlbmRzIGluIGEgbmV3bGluZS4KKworRGF0YSBzdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tCitgc3RydWN0IGdpdF9ncmFwaGAgaXMgYW4gb3BhcXVlIGRhdGEgdHlwZSB1c2VkIHRvIHN0b3JlIHRoZSBjdXJyZW50IGdyYXBoCitzdGF0ZS4KKworQ2FsbGluZyBzZXF1ZW5jZQorLS0tLS0tLS0tLS0tLS0tLQorCisqIENyZWF0ZSBhIGBzdHJ1Y3QgZ2l0X2dyYXBoYCBieSBjYWxsaW5nIGBncmFwaF9pbml0KClgLiAgV2hlbiB1c2luZyB0aGUKKyAgcmV2aXNpb24gd2Fsa2luZyBBUEksIHRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5IGBzZXR1cF9yZXZpc2lvbnMoKWAgaWYKKyAgdGhlICctLWdyYXBoJyBvcHRpb24gaXMgc3VwcGxpZWQuCisKKyogVXNlIHRoZSByZXZpc2lvbiB3YWxraW5nIEFQSSB0byB3YWxrIHRocm91Z2ggYSBncm91cCBvZiBjb250aWd1b3VzIGNvbW1pdHMuCisgIFRoZSBgZ2V0X3JldmlzaW9uKClgIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgY2FsbHMgYGdyYXBoX3VwZGF0ZSgpYCBlYWNoIHRpbWUKKyAgaXQgaXMgaW52b2tlZC4KKworKiBGb3IgZWFjaCBjb21taXQsIGNhbGwgYGdyYXBoX25leHRfbGluZSgpYCByZXBlYXRlZGx5LCB1bnRpbAorICBgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKClgIHJldHVybnMgbm9uLXplcm8uICBFYWNoIGNhbGwgZ28KKyAgYGdyYXBoX25leHRfbGluZSgpYCB3aWxsIG91dHB1dCBhIHNpbmdsZSBsaW5lIG9mIHRoZSBncmFwaC4gIFRoZSByZXN1bHRpbmcKKyAgbGluZXMgd2lsbCBub3QgY29udGFpbiBhbnkgbmV3bGluZXMuICBgZ3JhcGhfbmV4dF9saW5lKClgIHJldHVybnMgMSBpZiB0aGUKKyAgcmVzdWx0aW5nIGxpbmUgY29udGFpbnMgdGhlIGN1cnJlbnQgY29tbWl0LCBvciAwIGlmIHRoaXMgaXMgbWVyZWx5IGEgbGluZQorICBuZWVkZWQgdG8gYWRqdXN0IHRoZSBncmFwaCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGN1cnJlbnQgY29tbWl0LiAgVGhpcyByZXR1cm4KKyAgdmFsdWUgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIHByaW50IHRoZSBjb21taXQgc3VtbWFyeSBpbmZvcm1hdGlvbgorICBhbG9uZ3NpZGUgdGhlIGdyYXBoIG91dHB1dC4KKworTGltaXRhdGlvbnMKKy0tLS0tLS0tLS0tCisKKyogYGdyYXBoX3VwZGF0ZSgpYCBtdXN0IGJlIGNhbGxlZCB3aXRoIGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIuICBJdCBzaG91bGQKKyAgbm90IGJlIGNhbGxlZCBvbiBhIGNvbW1pdCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGludm9rZWQgd2l0aCBhbiBhbmNlc3RvciBvZgorICB0aGF0IGNvbW1pdCwgb3IgdGhlIGdyYXBoIG91dHB1dCB3aWxsIGJlIGluY29ycmVjdC4KKworKiBgZ3JhcGhfdXBkYXRlKClgIG11c3QgYmUgY2FsbGVkIG9uIGEgY29udGlndW91cyBncm91cCBvZiBjb21taXRzLiAgSWYKKyAgYGdyYXBoX3VwZGF0ZSgpYCBpcyBjYWxsZWQgb24gYSBwYXJ0aWN1bGFyIGNvbW1pdCwgaXQgc2hvdWxkIGxhdGVyIGJlIGNhbGxlZAorICBvbiBhbGwgcGFyZW50cyBvZiB0aGF0IGNvbW1pdC4gIFBhcmVudHMgbXVzdCBub3QgYmUgc2tpcHBlZCwgb3IgdGhlIGdyYXBoCisgIG91dHB1dCB3aWxsIGFwcGVhciBpbmNvcnJlY3QuCisrCitgZ3JhcGhfdXBkYXRlKClgIG1heSBiZSB1c2VkIG9uIGEgcHJ1bmVkIHNldCBvZiBjb21taXRzIG9ubHkgaWYgdGhlIHBhcmVudCBsaXN0CitoYXMgYmVlbiByZXdyaXR0ZW4gc28gYXMgdG8gaW5jbHVkZSBvbmx5IGFuY2VzdG9ycyBmcm9tIHRoZSBwcnVuZWQgc2V0LgorCisqIFRoZSBncmFwaCBBUEkgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgcmV2ZXJzZSBjb21taXQgb3JkZXJpbmcuICBJbgorICBvcmRlciB0byBpbXBsZW1lbnQgcmV2ZXJzZSBvcmRlcmluZywgdGhlIGdyYXBoaW5nIEFQSSBuZWVkcyBhbgorICAoZWZmaWNpZW50KSBtZWNoYW5pc20gdG8gZmluZCB0aGUgY2hpbGRyZW4gb2YgYSBjb21taXQuCisKK1NhbXBsZSB1c2FnZQorLS0tLS0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLQorc3RydWN0IGNvbW1pdCAqY29tbWl0Oworc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGggPSBncmFwaF9pbml0KG9wdHMpOworCit3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihvcHRzKSkgIT0gTlVMTCkgeworCWdyYXBoX3VwZGF0ZShncmFwaCwgY29tbWl0KTsKKwl3aGlsZSAoIWdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChncmFwaCkpCisJeworCQlzdHJ1Y3Qgc3RyYnVmIHNiOworCQlpbnQgaXNfY29tbWl0X2xpbmU7CisKKwkJc3RyYnVmX2luaXQoJnNiLCAwKTsKKwkJaXNfY29tbWl0X2xpbmUgPSBncmFwaF9uZXh0X2xpbmUoZ3JhcGgsICZzYik7CisJCWZwdXRzKHNiLmJ1Ziwgc3Rkb3V0KTsKKworCQlpZiAoaXNfY29tbWl0X2xpbmUpCisJCQlsb2dfdHJlZV9jb21taXQob3B0cywgY29tbWl0KTsKKwkJZWxzZQorCQkJcHV0Y2hhcihvcHRzLT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24pOworCX0KK30KKy0tLS0tLS0tLS0tLQorCitTYW1wbGUgb3V0cHV0CistLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiB0aGUgb3V0cHV0IGZyb20gdGhlIGdyYXBoIEFQSS4gIFRoaXMgb3V0cHV0IGRvZXMKK25vdCBpbmNsdWRlIGFueSBjb21taXQgc3VtbWFyeSBpbmZvcm1hdGlvbi0tY2FsbGVycyBhcmUgcmVzcG9uc2libGUgZm9yCitvdXRwdXR0aW5nIHRoYXQgaW5mb3JtYXRpb24sIGlmIGRlc2lyZWQuCisKKy0tLS0tLS0tLS0tLQorKgorKgorKgorfFwKKyogfAorfCB8ICoKK3wgXCBcCit8ICBcIFwKKyotLiBcIFwKK3xcIFwgXCBcCit8IHwgKiB8IHwKK3wgfCB8IHwgfCAqCit8IHwgfCB8IHwgKgorfCB8IHwgfCB8ICoKK3wgfCB8IHwgfCB8XAorfCB8IHwgfCB8IHwgKgorfCAqIHwgfCB8IHwgfAorfCB8IHwgfCB8ICogIFwKK3wgfCB8IHwgfCB8XCAgfAorfCB8IHwgfCAqIHwgfCB8Cit8IHwgfCB8ICogfCB8IHwKKyogfCB8IHwgfCB8IHwgfAorfCB8LyAvIC8gLyAvIC8KK3wvfCAvIC8gLyAvIC8KKyogfCB8IHwgfCB8IHwKK3wvIC8gLyAvIC8gLworKiB8IHwgfCB8IHwKK3wgfCB8IHwgfCAqCit8IHwgfCB8IHwvCit8IHwgfCB8ICoKKy0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWluLWNvcmUtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWluLWNvcmUtaW5kZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYmRiZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaW4tY29yZS1pbmRleC50eHQKQEAgLTAsMCArMSwyMSBAQAoraW4tY29yZSBpbmRleCBBUEkKKz09PT09PT09PT09PT09PT09CisKK1RhbGsgYWJvdXQgPHJlYWQtY2FjaGUuYz4gYW5kIDxjYWNoZS10cmVlLmM+LCB0aGluZ3MgbGlrZToKKworKiBjYWNoZSAtPiB0aGVfaW5kZXggbWFjcm9zCisqIHJlYWRfaW5kZXgoKQorKiB3cml0ZV9pbmRleCgpCisqIGllX21hdGNoX3N0YXQoKSBhbmQgaWVfbW9kaWZpZWQoKTsgaG93IHRoZXkgYXJlIGRpZmZlcmVudCBhbmQgd2hlbiB0bworICB1c2Ugd2hpY2guCisqIGluZGV4X25hbWVfcG9zKCkKKyogcmVtb3ZlX2luZGV4X2VudHJ5X2F0KCkKKyogcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleCgpCisqIGFkZF9maWxlX3RvX2luZGV4KCkKKyogYWRkX2luZGV4X2VudHJ5KCkKKyogcmVmcmVzaF9pbmRleCgpCisqIGRpc2NhcmRfaW5kZXgoKQorKiBjYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aCgpCisqIGNhY2hlX3RyZWVfdXBkYXRlKCkKKworKEpDLCBMaW51cykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1pbmRleC1za2VsLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1pbmRleC1za2VsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjdjYzJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWluZGV4LXNrZWwudHh0CkBAIC0wLDAgKzEsMTUgQEAKK0dJVCBBUEkgRG9jdW1lbnRzCis9PT09PT09PT09PT09PT09PQorCitHSVQgaGFzIGdyb3duIGEgc2V0IG9mIGludGVybmFsIEFQSSBvdmVyIHRpbWUuICBUaGlzIGNvbGxlY3Rpb24KK2RvY3VtZW50cyB0aGVtLgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyB0YWJsZSBvZiBjb250ZW50cyBiZWdpbgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyB0YWJsZSBvZiBjb250ZW50cyBlbmQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworMjAwNy0xMS0yNApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWluZGV4LnNoIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjljM2Y0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaW5kZXguc2gKQEAgLTAsMCArMSwyOCBAQAorIyEvYmluL3NoCisKKygKKwljPS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwlza2VsPWFwaS1pbmRleC1za2VsLnR4dAorCXNlZCAtZSAnL15cL1wvIHRhYmxlIG9mIGNvbnRlbnRzIGJlZ2luL3EnICIkc2tlbCIKKwllY2hvICIkYyIKKworCWxzIGFwaS0qLnR4dCB8CisJd2hpbGUgcmVhZCBmaWxlbmFtZQorCWRvCisJCWNhc2UgIiRmaWxlbmFtZSIgaW4KKwkJYXBpLWluZGV4LXNrZWwudHh0IHwgYXBpLWluZGV4LnR4dCkgY29udGludWUgOzsKKwkJZXNhYworCQl0aXRsZT0kKHNlZCAtZSAxcSAiJGZpbGVuYW1lIikKKwkJaHRtbD0ke2ZpbGVuYW1lJS50eHR9Lmh0bWwKKwkJZWNobyAiKiBsaW5rOiRodG1sWyR0aXRsZV0iCisJZG9uZQorCWVjaG8gIiRjIgorCXNlZCAtbiAtZSAnL15cL1wvIHRhYmxlIG9mIGNvbnRlbnRzIGVuZC8sJHAnICIkc2tlbCIKKykgPmFwaS1pbmRleC50eHQrCisKK2lmIHRlc3QgLWYgYXBpLWluZGV4LnR4dCAmJiBjbXAgYXBpLWluZGV4LnR4dCBhcGktaW5kZXgudHh0KyA+L2Rldi9udWxsCit0aGVuCisJcm0gLWYgYXBpLWluZGV4LnR4dCsKK2Vsc2UKKwltdiBhcGktaW5kZXgudHh0KyBhcGktaW5kZXgudHh0CitmaQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWxvY2tmaWxlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1sb2NrZmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4OTQwNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1sb2NrZmlsZS50eHQKQEAgLTAsMCArMSw3NCBAQAorbG9ja2ZpbGUgQVBJCis9PT09PT09PT09PT0KKworVGhlIGxvY2tmaWxlIEFQSSBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorCisqIE11dHVhbCBleGNsdXNpb24uICBXaGVuIHdlIHdyaXRlIG91dCBhIG5ldyBpbmRleCBmaWxlLCBmaXJzdAorICB3ZSBjcmVhdGUgYSBuZXcgZmlsZSBgJEdJVF9ESVIvaW5kZXgubG9ja2AsIHdyaXRlIHRoZSBuZXcKKyAgY29udGVudHMgaW50byBpdCwgYW5kIHJlbmFtZSBpdCB0byB0aGUgZmluYWwgZGVzdGluYXRpb24KKyAgYCRHSVRfRElSL2luZGV4YC4gIFdlIHRyeSB0byBjcmVhdGUgdGhlIGAkR0lUX0RJUi9pbmRleC5sb2NrYAorICBmaWxlIHdpdGggT19FWENMIHNvIHRoYXQgd2UgY2FuIG5vdGljZSBhbmQgZmFpbCB3aGVuIHNvbWVib2R5CisgIGVsc2UgaXMgYWxyZWFkeSB0cnlpbmcgdG8gdXBkYXRlIHRoZSBpbmRleCBmaWxlLgorCisqIEF1dG9tYXRpYyBjcnVmdCByZW1vdmFsLiAgQWZ0ZXIgd2UgY3JlYXRlIHRoZSAibG9jayIgZmlsZSwgd2UKKyAgbWF5IGRlY2lkZSB0byBgZGllKClgLCBhbmQgd2Ugd291bGQgd2FudCB0byBtYWtlIHN1cmUgdGhhdCB3ZQorICByZW1vdmUgdGhlIGZpbGUgdGhhdCBoYXMgbm90IGJlZW4gY29tbWl0dGVkIHRvIGl0cyBmaW5hbAorICBkZXN0aW5hdGlvbi4gIFRoaXMgaXMgZG9uZSBieSByZW1lbWJlcmluZyB0aGUgbG9ja2ZpbGVzIHdlCisgIGNyZWF0ZWQgaW4gYSBsaW5rZWQgbGlzdCBhbmQgY2xlYW5pbmcgdGhlbSB1cCBmcm9tIGFuCisgIGBhdGV4aXQoMylgIGhhbmRsZXIuICBPdXRzdGFuZGluZyBsb2NrZmlsZXMgYXJlIGFsc28gcmVtb3ZlZAorICB3aGVuIHRoZSBwcm9ncmFtIGRpZXMgb24gYSBzaWduYWwuCisKKworVGhlIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLQorCitob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlOjoKKworCVRha2UgYSBwb2ludGVyIHRvIGBzdHJ1Y3QgbG9ja19maWxlYCwgdGhlIGZpbGVuYW1lIG9mCisJdGhlIGZpbmFsIGRlc3RpbmF0aW9uIChlLmcuIGAkR0lUX0RJUi9pbmRleGApIGFuZCBhIGZsYWcKKwlgZGllX29uX2Vycm9yYC4gIEF0dGVtcHQgdG8gY3JlYXRlIGEgbG9ja2ZpbGUgZm9yIHRoZQorCWRlc3RpbmF0aW9uIGFuZCByZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBmb3Igd3JpdGluZworCXRvIHRoZSBmaWxlLiAgSWYgYGRpZV9vbl9lcnJvcmAgZmxhZyBpcyB0cnVlLCBpdCBkaWVzIGlmCisJYSBsb2NrIGlzIGFscmVhZHkgdGFrZW4gZm9yIHRoZSBmaWxlOyBvdGhlcndpc2UgaXQKKwlyZXR1cm5zIGEgbmVnYXRpdmUgaW50ZWdlciB0byB0aGUgY2FsbGVyIG9uIGZhaWx1cmUuCisKK2NvbW1pdF9sb2NrX2ZpbGU6OgorCisJVGFrZSBhIHBvaW50ZXIgdG8gdGhlIGBzdHJ1Y3QgbG9ja19maWxlYCBpbml0aWFsaXplZAorCXdpdGggYW4gZWFybGllciBjYWxsIHRvIGBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKClgLAorCWNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgYW5kIHJlbmFtZSB0aGUgbG9ja2ZpbGUgdG8gaXRzCisJZmluYWwgZGVzdGluYXRpb24uICBSZXR1cm5zIDAgdXBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlCisJdmFsdWUgb24gZmFpbHVyZSB0byBjbG9zZSgyKSBvciByZW5hbWUoMikuCisKK3JvbGxiYWNrX2xvY2tfZmlsZTo6CisKKwlUYWtlIGEgcG9pbnRlciB0byB0aGUgYHN0cnVjdCBsb2NrX2ZpbGVgIGluaXRpYWxpemVkCisJd2l0aCBhbiBlYXJsaWVyIGNhbGwgdG8gYGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoKWAsCisJY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBhbmQgcmVtb3ZlIHRoZSBsb2NrZmlsZS4KKworY2xvc2VfbG9ja19maWxlOjoKKwlUYWtlIGEgcG9pbnRlciB0byB0aGUgYHN0cnVjdCBsb2NrX2ZpbGVgIGluaXRpYWxpemVkCisJd2l0aCBhbiBlYXJsaWVyIGNhbGwgdG8gYGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoKWAsCisJYW5kIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IuICBSZXR1cm5zIDAgdXBvbiBzdWNjZXNzLAorCWEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZSB0byBjbG9zZSgyKS4KKworQmVjYXVzZSB0aGUgc3RydWN0dXJlIGlzIHVzZWQgaW4gYW4gYGF0ZXhpdCgzKWAgaGFuZGxlciwgaXRzCitzdG9yYWdlIGhhcyB0byBzdGF5IHRocm91Z2hvdXQgdGhlIGxpZmUgb2YgdGhlIHByb2dyYW0uICBJdAorY2Fubm90IGJlIGFuIGF1dG8gdmFyaWFibGUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4KKworQ2FsbCBgY29tbWl0X2xvY2tfZmlsZSgpYCBvciBgcm9sbGJhY2tfbG9ja19maWxlKClgIHdoZW4geW91IGFyZQorZG9uZSB3cml0aW5nIHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IuICBJZiB5b3UgZG8gbm90IGNhbGwgZWl0aGVyCithbmQgc2ltcGx5IGBleGl0KDMpYCBmcm9tIHRoZSBwcm9ncmFtLCBhbiBgYXRleGl0KDMpYCBoYW5kbGVyCit3aWxsIGNsb3NlIGFuZCByZW1vdmUgdGhlIGxvY2tmaWxlLgorCitJZiB5b3UgbmVlZCB0byBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHlvdSBvYnRhaW5lZCBmcm9tCitgaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZWAgZnVuY3Rpb24geW91cnNlbGYsIGRvIHNvIGJ5IGNhbGxpbmcKK2BjbG9zZV9sb2NrX2ZpbGUoKWAuICBZb3Ugc2hvdWxkIG5ldmVyIGNhbGwgYGNsb3NlKDIpYCB5b3Vyc2VsZiEKK090aGVyd2lzZSB0aGUgYHN0cnVjdAorbG9ja19maWxlYCBzdHJ1Y3R1cmUgc3RpbGwgcmVtZW1iZXJzIHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvcgorbmVlZHMgdG8gYmUgY2xvc2VkLCBhbmQgYSBsYXRlciBjYWxsIHRvIGBjb21taXRfbG9ja19maWxlKClgIG9yCitgcm9sbGJhY2tfbG9ja19maWxlKClgIHdpbGwgcmVzdWx0IGluIGR1cGxpY2F0ZSBjYWxscyB0bworYGNsb3NlKDIpYC4gIFdvcnNlIHlldCwgaWYgeW91IGBjbG9zZSgyKWAsIG9wZW4gYW5vdGhlciBmaWxlCitkZXNjcmlwdG9yIGZvciBjb21wbGV0ZWx5IGRpZmZlcmVudCBwdXJwb3NlLCBhbmQgdGhlbiBjYWxsCitgY29tbWl0X2xvY2tfZmlsZSgpYCBvciBgcm9sbGJhY2tfbG9ja19maWxlKClgLCB0aGV5IG1heSBjbG9zZQordGhhdCB1bnJlbGF0ZWQgZmlsZSBkZXNjcmlwdG9yLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW1lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1tZXJnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRjMWJlZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1tZXJnZS50eHQKQEAgLTAsMCArMSwxMDQgQEAKK21lcmdlIEFQSQorPT09PT09PT09CisKK1RoZSBtZXJnZSBBUEkgaGVscHMgYSBwcm9ncmFtIHRvIHJlY29uY2lsZSB0d28gY29tcGV0aW5nIHNldHMgb2YKK2ltcHJvdmVtZW50cyB0byBzb21lIGZpbGVzIChlLmcuLCB1bnJlZ2lzdGVyZWQgY2hhbmdlcyBmcm9tIHRoZSB3b3JrCit0cmVlIHZlcnN1cyBjaGFuZ2VzIGludm9sdmVkIGluIHN3aXRjaGluZyB0byBhIG5ldyBicmFuY2gpLCByZXBvcnRpbmcKK2NvbmZsaWN0cyBpZiBmb3VuZC4gIFRoZSBsaWJyYXJ5IGNhbGxlZCB0aHJvdWdoIHRoaXMgQVBJIGlzCityZXNwb25zaWJsZSBmb3IgYSBmZXcgdGhpbmdzLgorCisgKiBkZXRlcm1pbmluZyB3aGljaCB0cmVlcyB0byBtZXJnZSAocmVjdXJzaXZlIGFuY2VzdG9yIGNvbnNvbGlkYXRpb24pOworCisgKiBsaW5pbmcgdXAgY29ycmVzcG9uZGluZyBmaWxlcyBpbiB0aGUgdHJlZXMgdG8gYmUgbWVyZ2VkIChyZW5hbWUKKyAgIGRldGVjdGlvbiwgc3VidHJlZSBzaGlmdGluZyksIHJlcG9ydGluZyBlZGdlIGNhc2VzIGxpa2UgYWRkL2FkZAorICAgYW5kIHJlbmFtZS9yZW5hbWUgY29uZmxpY3RzIHRvIHRoZSB1c2VyOworCisgKiBwZXJmb3JtaW5nIGEgdGhyZWUtd2F5IG1lcmdlIG9mIGNvcnJlc3BvbmRpbmcgZmlsZXMsIHRha2luZworICAgcGF0aC1zcGVjaWZpYyBtZXJnZSBkcml2ZXJzIChzcGVjaWZpZWQgaW4gYC5naXRhdHRyaWJ1dGVzYCkKKyAgIGludG8gYWNjb3VudC4KKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworKiBgbW1idWZmZXJfdGAsIGBtbWZpbGVfdGAKKworVGhlc2Ugc3RvcmUgZGF0YSB1c2FibGUgZm9yIHVzZSBieSB0aGUgeGRpZmYgYmFja2VuZCwgZm9yIHdyaXRpbmcgYW5kCitmb3IgcmVhZGluZywgcmVzcGVjdGl2ZWx5LiAgU2VlIGB4ZGlmZi94ZGlmZi5oYCBmb3IgdGhlIGRlZmluaXRpb25zCithbmQgYGRpZmYuY2AgZm9yIGV4YW1wbGVzLgorCisqIGBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9uc2AKKworVGhpcyBkZXNjcmliZXMgdGhlIHNldCBvZiBvcHRpb25zIHRoZSBjYWxsaW5nIHByb2dyYW0gd2FudHMgdG8gYWZmZWN0Cit0aGUgb3BlcmF0aW9uIG9mIGEgbG93LWxldmVsIChzaW5nbGUgZmlsZSkgbWVyZ2UuICBTb21lIG9wdGlvbnM6CisKK2B2aXJ0dWFsX2FuY2VzdG9yYDo6CisJQmVoYXZlIGFzIHRob3VnaCB0aGlzIHdlcmUgcGFydCBvZiBhIG1lcmdlIGJldHdlZW4gY29tbW9uCisJYW5jZXN0b3JzIGluIGEgcmVjdXJzaXZlIG1lcmdlLgorCUlmIGEgaGVscGVyIHByb2dyYW0gaXMgc3BlY2lmaWVkIGJ5IHRoZQorCWBbbWVyZ2UgIjxkcml2ZXI+Il0gcmVjdXJzaXZlYCBjb25maWd1cmF0aW9uLCBpdCB3aWxsCisJYmUgdXNlZCAoc2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSkuCisKK2B2YXJpYW50YDo6CisJUmVzb2x2ZSBsb2NhbCBjb25mbGljdHMgYXV0b21hdGljYWxseSBpbiBmYXZvcgorCW9mIG9uZSBzaWRlIG9yIHRoZSBvdGhlciAoYXMgaW4gJ2dpdCBtZXJnZS1maWxlJworCWAtLW91cnNgL2AtLXRoZWlyc2AvYC0tdW5pb25gKS4gIENhbiBiZSBgMGAsCisJYFhETF9NRVJHRV9GQVZPUl9PVVJTYCwgYFhETF9NRVJHRV9GQVZPUl9USEVJUlNgLCBvcgorCWBYRExfTUVSR0VfRkFWT1JfVU5JT05gLgorCitgcmVub3JtYWxpemVgOjoKKwlSZXNtdWRnZSBhbmQgY2xlYW4gdGhlICJiYXNlIiwgInRoZWlycyIgYW5kICJvdXJzIiBmaWxlcworCWJlZm9yZSBtZXJnaW5nLiAgVXNlIHRoaXMgd2hlbiB0aGUgbWVyZ2UgaXMgbGlrZWx5IHRvIGhhdmUKKwlvdmVybGFwcGVkIHdpdGggYSBjaGFuZ2UgaW4gc211ZGdlL2NsZWFuIG9yIGVuZC1vZi1saW5lCisJbm9ybWFsaXphdGlvbiBydWxlcy4KKworTG93LWxldmVsIChzaW5nbGUgZmlsZSkgbWVyZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BsbF9tZXJnZWA6OgorCisJUGVyZm9ybSBhIHRocmVlLXdheSBzaW5nbGUtZmlsZSBtZXJnZSBpbiBjb3JlLiAgVGhpcyBpcworCWEgdGhpbiB3cmFwcGVyIGFyb3VuZCBgeGRsX21lcmdlYCB0aGF0IHRha2VzIHRoZSBwYXRoIGFuZAorCWFueSBtZXJnZSBiYWNrZW5kIHNwZWNpZmllZCBpbiBgLmdpdGF0dHJpYnV0ZXNgIG9yCisJYC5naXQvaW5mby9hdHRyaWJ1dGVzYCBpbnRvIGFjY291bnQuICBSZXR1cm5zIDAgZm9yIGEKKwljbGVhbiBtZXJnZS4KKworQ2FsbGluZyBzZXF1ZW5jZToKKworKiBQcmVwYXJlIGEgYHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zYCB0byByZWNvcmQgb3B0aW9ucy4KKyAgSWYgeW91IGhhdmUgbm8gc3BlY2lhbCByZXF1ZXN0cywgc2tpcCB0aGlzIGFuZCBwYXNzIGBOVUxMYAorICBhcyB0aGUgYG9wdHNgIHBhcmFtZXRlciB0byB1c2UgdGhlIGRlZmF1bHQgb3B0aW9ucy4KKworKiBBbGxvY2F0ZSBhbiBtbWJ1ZmZlcl90IHZhcmlhYmxlIGZvciB0aGUgcmVzdWx0LgorCisqIEFsbG9jYXRlIGFuZCBmaWxsIHZhcmlhYmxlcyB3aXRoIHRoZSBmaWxlJ3Mgb3JpZ2luYWwgY29udGVudAorICBhbmQgdHdvIG1vZGlmaWVkIHZlcnNpb25zICh1c2luZyBgcmVhZF9tbWZpbGVgLCBmb3IgZXhhbXBsZSkuCisKKyogQ2FsbCBgbGxfbWVyZ2UoKWAuCisKKyogUmVhZCB0aGUgbWVyZ2VkIGNvbnRlbnQgZnJvbSBgcmVzdWx0X2J1Zi5wdHJgIGFuZCBgcmVzdWx0X2J1Zi5zaXplYC4KKworKiBSZWxlYXNlIGJ1ZmZlcnMgd2hlbiBmaW5pc2hlZC4gIEEgc2ltcGxlCisgIGBmcmVlKGFuY2VzdG9yLnB0cik7IGZyZWUob3Vycy5wdHIpOyBmcmVlKHRoZWlycy5wdHIpOworICBmcmVlKHJlc3VsdF9idWYucHRyKTtgIHdpbGwgZG8uCisKK0lmIHRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBtZXJnZSBjbGVhbmx5LCBgbGxfbWVyZ2VgIHdpbGwgcmV0dXJuIGEKK25vbnplcm8gdmFsdWUgYW5kIGByZXN1bHRfYnVmYCB3aWxsIGdlbmVyYWxseSBpbmNsdWRlIGEgZGVzY3JpcHRpb24gb2YKK3RoZSBjb25mbGljdCBicmFja2V0ZWQgYnkgbWFya2VycyBzdWNoIGFzIHRoZSB0cmFkaXRpb25hbCBgPDw8PDw8PGAKK2FuZCBgPj4+Pj4+PmAuCisKK1RoZSBgYW5jZXN0b3JfbGFiZWxgLCBgb3VyX2xhYmVsYCwgYW5kIGB0aGVpcl9sYWJlbGAgcGFyYW1ldGVycyBhcmUKK3VzZWQgdG8gbGFiZWwgdGhlIGRpZmZlcmVudCBzaWRlcyBvZiBhIGNvbmZsaWN0IGlmIHRoZSBtZXJnZSBkcml2ZXIKK3N1cHBvcnRzIHRoaXMuCisKK0V2ZXJ5dGhpbmcgZWxzZQorLS0tLS0tLS0tLS0tLS0tCisKK1RhbGsgYWJvdXQgPG1lcmdlLXJlY3Vyc2l2ZS5oPiBhbmQgbWVyZ2VfZmlsZSgpOgorCisgLSBtZXJnZV90cmVlcygpIHRvIG1lcmdlIHdpdGggcmVuYW1lIGRldGVjdGlvbgorIC0gbWVyZ2VfcmVjdXJzaXZlKCkgZm9yIGFuY2VzdG9yIGNvbnNvbGlkYXRpb24KKyAtIHRyeV9tZXJnZV9jb21tYW5kKCkgZm9yIG90aGVyIHN0cmF0ZWdpZXMKKyAtIGNvbmZsaWN0IGZvcm1hdAorIC0gbWVyZ2Ugb3B0aW9ucworCisoRGFuaWVsLCBNaWtsb3MsIFN0ZXBoYW4sIEpDKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW9iamVjdC1hY2Nlc3MudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW9iamVjdC1hY2Nlc3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYmIwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktb2JqZWN0LWFjY2Vzcy50eHQKQEAgLTAsMCArMSwxNSBAQAorb2JqZWN0IGFjY2VzcyBBUEkKKz09PT09PT09PT09PT09PT09CisKK1RhbGsgYWJvdXQgPHNoYTFfZmlsZS5jPiBhbmQgPG9iamVjdC5oPiBmYW1pbHksIHRoaW5ncyBsaWtlCisKKyogcmVhZF9zaGExX2ZpbGUoKQorKiByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSgpCisqIGhhc19zaGExX2ZpbGUoKQorKiB3cml0ZV9zaGExX2ZpbGUoKQorKiBwcmV0ZW5kX3NoYTFfZmlsZSgpCisqIGxvb2t1cF97b2JqZWN0LGNvbW1pdCx0YWcsYmxvYix0cmVlfQorKiBwYXJzZV97b2JqZWN0LGNvbW1pdCx0YWcsYmxvYix0cmVlfQorKiBVc2Ugb2Ygb2JqZWN0IGZsYWdzCisKKyhKQywgU2hhd24sIERhbmllbCwgRHNjaG8sIExpbnVzKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjIzODkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHQKQEAgLTAsMCArMSwyNzggQEAKK3BhcnNlLW9wdGlvbnMgQVBJCis9PT09PT09PT09PT09PT09PQorCitUaGUgcGFyc2Utb3B0aW9ucyBBUEkgaXMgdXNlZCB0byBwYXJzZSBhbmQgbWFzc2FnZSBvcHRpb25zIGluIGdpdAorYW5kIHRvIHByb3ZpZGUgYSB1c2FnZSBoZWxwIHdpdGggY29uc2lzdGVudCBsb29rLgorCitCYXNpY3MKKy0tLS0tLQorCitUaGUgYXJndW1lbnQgdmVjdG9yIGBhcmd2W11gIG1heSB1c3VhbGx5IGNvbnRhaW4gbWFuZGF0b3J5IG9yIG9wdGlvbmFsCisnbm9uLW9wdGlvbiBhcmd1bWVudHMnLCBlLmcuIGEgZmlsZW5hbWUgb3IgYSBicmFuY2gsIGFuZCAnb3B0aW9ucycuCitPcHRpb25zIGFyZSBvcHRpb25hbCBhcmd1bWVudHMgdGhhdCBzdGFydCB3aXRoIGEgZGFzaCBhbmQKK3RoYXQgYWxsb3cgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBhIGNvbW1hbmQuCisKKyogVGhlcmUgYXJlIGJhc2ljYWxseSB0aHJlZSB0eXBlcyBvZiBvcHRpb25zOgorICAnYm9vbGVhbicgb3B0aW9ucywKKyAgb3B0aW9ucyB3aXRoIChtYW5kYXRvcnkpICdhcmd1bWVudHMnIGFuZAorICBvcHRpb25zIHdpdGggJ29wdGlvbmFsIGFyZ3VtZW50cycKKyAgKGkuZS4gYSBib29sZWFuIG9wdGlvbiB0aGF0IGNhbiBiZSBhZGp1c3RlZCkuCisKKyogVGhlcmUgYXJlIGJhc2ljYWxseSB0d28gZm9ybXMgb2Ygb3B0aW9uczoKKyAgJ1Nob3J0IG9wdGlvbnMnIGNvbnNpc3Qgb2Ygb25lIGRhc2ggKGAtYCkgYW5kIG9uZSBhbHBoYW51bWVyaWMKKyAgY2hhcmFjdGVyLgorICAnTG9uZyBvcHRpb25zJyBiZWdpbiB3aXRoIHR3byBkYXNoZXMgKGAtLWApIGFuZCBzb21lCisgIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLgorCisqIE9wdGlvbnMgYXJlIGNhc2Utc2Vuc2l0aXZlLgorICBQbGVhc2UgZGVmaW5lICdsb3dlci1jYXNlIGxvbmcgb3B0aW9ucycgb25seS4KKworVGhlIHBhcnNlLW9wdGlvbnMgQVBJIGFsbG93czoKKworKiAnc3RpY2tlZCcgYW5kICdzZXBhcmF0ZSBmb3JtJyBvZiBvcHRpb25zIHdpdGggYXJndW1lbnRzLgorICBgLW9BcmdgIGlzIHN0aWNrZWQsIGAtbyBBcmdgIGlzIHNlcGFyYXRlIGZvcm0uCisgIGAtLW9wdGlvbj1BcmdgIGlzIHN0aWNrZWQsIGAtLW9wdGlvbiBBcmdgIGlzIHNlcGFyYXRlIGZvcm0uCisKKyogTG9uZyBvcHRpb25zIG1heSBiZSAnYWJicmV2aWF0ZWQnLCBhcyBsb25nIGFzIHRoZSBhYmJyZXZpYXRpb24KKyAgaXMgdW5hbWJpZ3VvdXMuCisKKyogU2hvcnQgb3B0aW9ucyBtYXkgYmUgYnVuZGxlZCwgZS5nLiBgLWEgLWJgIGNhbiBiZSBzcGVjaWZpZWQgYXMgYC1hYmAuCisKKyogQm9vbGVhbiBsb25nIG9wdGlvbnMgY2FuIGJlICduZWdhdGVkJyAob3IgJ3Vuc2V0JykgYnkgcHJlcGVuZGluZworICBgbm8tYCwgZS5nLiBgLS1uby1hYmJyZXZgIGluc3RlYWQgb2YgYC0tYWJicmV2YC4gQ29udmVyc2VseSwKKyAgb3B0aW9ucyB0aGF0IGJlZ2luIHdpdGggYG5vLWAgY2FuIGJlICduZWdhdGVkJyBieSByZW1vdmluZyBpdC4KKworKiBPcHRpb25zIGFuZCBub24tb3B0aW9uIGFyZ3VtZW50cyBjYW4gY2xlYXJseSBiZSBzZXBhcmF0ZWQgdXNpbmcgdGhlIGAtLWAKKyAgb3B0aW9uLCBlLmcuIGAtYSAtYiAtLW9wdGlvbiAtLSAtLXRoaXMtaXMtYS1maWxlYCBpbmRpY2F0ZXMgdGhhdAorICBgLS10aGlzLWlzLWEtZmlsZWAgbXVzdCBub3QgYmUgcHJvY2Vzc2VkIGFzIGFuIG9wdGlvbi4KKworU3RlcHMgdG8gcGFyc2Ugb3B0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuIGAjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oImAKKworLiBkZWZpbmUgYSBOVUxMLXRlcm1pbmF0ZWQKKyAgYHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9mb29fdXNhZ2VbXWAgYXJyYXkKKyAgY29udGFpbmluZyBhbHRlcm5hdGl2ZSB1c2FnZSBzdHJpbmdzCisKKy4gZGVmaW5lIGBidWlsdGluX2Zvb19vcHRpb25zYCBhcnJheSBhcyBkZXNjcmliZWQgYmVsb3cKKyAgaW4gc2VjdGlvbiAnRGF0YSBTdHJ1Y3R1cmUnLgorCisuIGluIGBjbWRfZm9vKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KWAKKyAgY2FsbAorCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2Zvb19vcHRpb25zLCBidWlsdGluX2Zvb191c2FnZSwgZmxhZ3MpOworKworYHBhcnNlX29wdGlvbnMoKWAgd2lsbCBmaWx0ZXIgb3V0IHRoZSBwcm9jZXNzZWQgb3B0aW9ucyBvZiBgYXJndltdYCBhbmQgbGVhdmUgdGhlCitub24tb3B0aW9uIGFyZ3VtZW50cyBpbiBgYXJndltdYC4KK2BhcmdjYCBpcyB1cGRhdGVkIGFwcHJvcHJpYXRlbHkgYmVjYXVzZSBvZiB0aGUgYXNzaWdubWVudC4KKysKK1lvdSBjYW4gYWxzbyBwYXNzIE5VTEwgaW5zdGVhZCBvZiBhIHVzYWdlIGFycmF5IGFzIHRoZSBmaWZ0aCBwYXJhbWV0ZXIgb2YKK3BhcnNlX29wdGlvbnMoKSwgdG8gYXZvaWQgZGlzcGxheWluZyBhIGhlbHAgc2NyZWVuIHdpdGggdXNhZ2UgaW5mbyBhbmQKK29wdGlvbiBsaXN0LiAgVGhpcyBzaG91bGQgb25seSBiZSBkb25lIGlmIG5lY2Vzc2FyeSwgZS5nLiB0byBpbXBsZW1lbnQKK2EgbGltaXRlZCBwYXJzZXIgZm9yIG9ubHkgYSBzdWJzZXQgb2YgdGhlIG9wdGlvbnMgdGhhdCBuZWVkcyB0byBiZSBydW4KK2JlZm9yZSB0aGUgZnVsbCBwYXJzZXIsIHdoaWNoIGluIHR1cm4gc2hvd3MgdGhlIGZ1bGwgaGVscCBtZXNzYWdlLgorKworRmxhZ3MgYXJlIHRoZSBiaXR3aXNlLW9yIG9mOgorCitgUEFSU0VfT1BUX0tFRVBfREFTSERBU0hgOjoKKwlLZWVwIHRoZSBgLS1gIHRoYXQgdXN1YWxseSBzZXBhcmF0ZXMgb3B0aW9ucyBmcm9tCisJbm9uLW9wdGlvbiBhcmd1bWVudHMuCisKK2BQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OYDo6CisJVXN1YWxseSB0aGUgd2hvbGUgYXJndW1lbnQgdmVjdG9yIGlzIG1hc3NhZ2VkIGFuZCByZW9yZGVyZWQuCisJVXNpbmcgdGhpcyBmbGFnLCBwcm9jZXNzaW5nIGlzIHN0b3BwZWQgYXQgdGhlIGZpcnN0IG5vbi1vcHRpb24KKwlhcmd1bWVudC4KKworYFBBUlNFX09QVF9LRUVQX0FSR1YwYDo6CisJS2VlcCB0aGUgZmlyc3QgYXJndW1lbnQsIHdoaWNoIGNvbnRhaW5zIHRoZSBwcm9ncmFtIG5hbWUuICBJdCdzCisJcmVtb3ZlZCBmcm9tIGFyZ3ZbXSBieSBkZWZhdWx0LgorCitgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTmA6OgorCUtlZXAgdW5rbm93biBhcmd1bWVudHMgaW5zdGVhZCBvZiBlcnJvcmluZyBvdXQuICBUaGlzIGRvZXNuJ3QKKwl3b3JrIGZvciBhbGwgY29tYmluYXRpb25zIG9mIGFyZ3VtZW50cyBhcyB1c2VycyBtaWdodCBleHBlY3QKKwlpdCB0byBkby4gIEUuZy4gaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGluIGAtLXVua25vd24gLS1rbm93bmAKKwl0YWtlcyBhIHZhbHVlICh3aGljaCB3ZSBjYW4ndCBrbm93KSwgdGhlIHNlY29uZCBvbmUgaXMKKwltaXN0YWtlbmx5IGludGVycHJldGVkIGFzIGEga25vd24gb3B0aW9uLiAgU2ltaWxhcmx5LCBpZgorCWBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OYCBpcyBzZXQsIHRoZSBzZWNvbmQgYXJndW1lbnQgaW4KKwlgLS11bmtub3duIHZhbHVlYCB3aWxsIGJlIG1pc3Rha2VubHkgaW50ZXJwcmV0ZWQgYXMgYQorCW5vbi1vcHRpb24sIG5vdCBhcyBhIHZhbHVlIGJlbG9uZ2luZyB0byB0aGUgdW5rbm93biBvcHRpb24sCisJdGhlIHBhcnNlciBlYXJseS4gIFRoYXQncyB3aHkgcGFyc2Vfb3B0aW9ucygpIGVycm9ycyBvdXQgaWYKKwlib3RoIG9wdGlvbnMgYXJlIHNldC4KKworYFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQYDo6CisJQnkgZGVmYXVsdCwgcGFyc2Vfb3B0aW9ucygpIGhhbmRsZXMgYC1oYCwgYC0taGVscGAgYW5kCisJYC0taGVscC1hbGxgIGludGVybmFsbHksIGJ5IHNob3dpbmcgYSBoZWxwIHNjcmVlbi4gIFRoaXMgb3B0aW9uCisJdHVybnMgaXQgb2ZmIGFuZCBhbGxvd3Mgb25lIHRvIGFkZCBjdXN0b20gaGFuZGxlcnMgZm9yIHRoZXNlCisJb3B0aW9ucywgb3IgdG8ganVzdCBsZWF2ZSB0aGVtIHVua25vd24uCisKK0RhdGEgU3RydWN0dXJlCistLS0tLS0tLS0tLS0tLQorCitUaGUgbWFpbiBkYXRhIHN0cnVjdHVyZSBpcyBhbiBhcnJheSBvZiB0aGUgYG9wdGlvbmAgc3RydWN0LAorc2F5IGBzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2FkZF9vcHRpb25zW11gLgorVGhlcmUgYXJlIHNvbWUgbWFjcm9zIHRvIGVhc2lseSBkZWZpbmUgb3B0aW9uczoKKworYE9QVF9fQUJCUkVWKCZpbnRfdmFyKWA6OgorCUFkZCBgLS1hYmJyZXZbPTxuPl1gLgorCitgT1BUX19DT0xPUigmaW50X3ZhciwgZGVzY3JpcHRpb24pYDo6CisJQWRkIGAtLWNvbG9yWz08d2hlbj5dYCBhbmQgYC0tbm8tY29sb3JgLgorCitgT1BUX19EUllfUlVOKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC1uLCAtLWRyeS1ydW5gLgorCitgT1BUX19GT1JDRSgmaW50X3ZhciwgZGVzY3JpcHRpb24pYDo6CisJQWRkIGAtZiwgLS1mb3JjZWAuCisKK2BPUFRfX1FVSUVUKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC1xLCAtLXF1aWV0YC4KKworYE9QVF9fVkVSQk9TRSgmaW50X3ZhciwgZGVzY3JpcHRpb24pYDo6CisJQWRkIGAtdiwgLS12ZXJib3NlYC4KKworYE9QVF9HUk9VUChkZXNjcmlwdGlvbilgOjoKKwlTdGFydCBhbiBvcHRpb24gZ3JvdXAuIGBkZXNjcmlwdGlvbmAgaXMgYSBzaG9ydCBzdHJpbmcgdGhhdAorCWRlc2NyaWJlcyB0aGUgZ3JvdXAgb3IgYW4gZW1wdHkgc3RyaW5nLgorCVN0YXJ0IHRoZSBkZXNjcmlwdGlvbiB3aXRoIGFuIHVwcGVyLWNhc2UgbGV0dGVyLgorCitgT1BUX0JPT0woc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYSBib29sZWFuIG9wdGlvbi4gYGludF92YXJgIGlzIHNldCB0byBvbmUgd2l0aAorCWAtLW9wdGlvbmAgYW5kIHNldCB0byB6ZXJvIHdpdGggYC0tbm8tb3B0aW9uYC4KKworYE9QVF9DT1VOVFVQKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGEgY291bnQtdXAgb3B0aW9uLgorCWBpbnRfdmFyYCBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIHVzZSBvZiBgLS1vcHRpb25gLCBhbmQKKwlyZXNldCB0byB6ZXJvIHdpdGggYC0tbm8tb3B0aW9uYC4KKworYE9QVF9CSVQoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbiwgbWFzaylgOjoKKwlJbnRyb2R1Y2UgYSBib29sZWFuIG9wdGlvbi4KKwlJZiB1c2VkLCBgaW50X3ZhcmAgaXMgYml0d2lzZS1vcmVkIHdpdGggYG1hc2tgLgorCitgT1BUX05FR0JJVChzaG9ydCwgbG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uLCBtYXNrKWA6OgorCUludHJvZHVjZSBhIGJvb2xlYW4gb3B0aW9uLgorCUlmIHVzZWQsIGBpbnRfdmFyYCBpcyBiaXR3aXNlLWFuZGVkIHdpdGggdGhlIGludmVydGVkIGBtYXNrYC4KKworYE9QVF9TRVRfSU5UKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24sIGludGVnZXIpYDo6CisJSW50cm9kdWNlIGFuIGludGVnZXIgb3B0aW9uLgorCWBpbnRfdmFyYCBpcyBzZXQgdG8gYGludGVnZXJgIHdpdGggYC0tb3B0aW9uYCwgYW5kCisJcmVzZXQgdG8gemVybyB3aXRoIGAtLW5vLW9wdGlvbmAuCisKK2BPUFRfU0VUX1BUUihzaG9ydCwgbG9uZywgJnB0cl92YXIsIGRlc2NyaXB0aW9uLCBwdHIpYDo6CisJSW50cm9kdWNlIGEgYm9vbGVhbiBvcHRpb24uCisJSWYgdXNlZCwgc2V0IGBwdHJfdmFyYCB0byBgcHRyYC4KKworYE9QVF9TVFJJTkcoc2hvcnQsIGxvbmcsICZzdHJfdmFyLCBhcmdfc3RyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50LgorCVRoZSBzdHJpbmcgYXJndW1lbnQgaXMgcHV0IGludG8gYHN0cl92YXJgLgorCitgT1BUX0lOVEVHRVIoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggaW50ZWdlciBhcmd1bWVudC4KKwlUaGUgaW50ZWdlciBpcyBwdXQgaW50byBgaW50X3ZhcmAuCisKK2BPUFRfREFURShzaG9ydCwgbG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2l0aCBkYXRlIGFyZ3VtZW50LCBzZWUgYGFwcHJveGlkYXRlKClgLgorCVRoZSB0aW1lc3RhbXAgaXMgcHV0IGludG8gYGludF92YXJgLgorCitgT1BUX0NBTExCQUNLKHNob3J0LCBsb25nLCAmdmFyLCBhcmdfc3RyLCBkZXNjcmlwdGlvbiwgZnVuY19wdHIpYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB3aXRoIGFyZ3VtZW50LgorCVRoZSBhcmd1bWVudCB3aWxsIGJlIGZlZCBpbnRvIHRoZSBmdW5jdGlvbiBnaXZlbiBieSBgZnVuY19wdHJgCisJYW5kIHRoZSByZXN1bHQgd2lsbCBiZSBwdXQgaW50byBgdmFyYC4KKwlTZWUgJ09wdGlvbiBDYWxsYmFja3MnIGJlbG93IGZvciBhIG1vcmUgZWxhYm9yYXRlIGRlc2NyaXB0aW9uLgorCitgT1BUX0ZJTEVOQU1FKHNob3J0LCBsb25nLCAmdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggYSBmaWxlbmFtZSBhcmd1bWVudC4KKwlUaGUgZmlsZW5hbWUgd2lsbCBiZSBwcmVmaXhlZCBieSBwYXNzaW5nIHRoZSBmaWxlbmFtZSBhbG9uZyB3aXRoCisJdGhlIHByZWZpeCBhcmd1bWVudCBvZiBgcGFyc2Vfb3B0aW9ucygpYCB0byBgcHJlZml4X2ZpbGVuYW1lKClgLgorCitgT1BUX0FSR1VNRU5UKGxvbmcsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhIGxvbmctb3B0aW9uIGFyZ3VtZW50IHRoYXQgd2lsbCBiZSBrZXB0IGluIGBhcmd2W11gLgorCitgT1BUX05VTUJFUl9DQUxMQkFDSygmdmFyLCBkZXNjcmlwdGlvbiwgZnVuY19wdHIpYDo6CisJUmVjb2duaXplIG51bWVyaWNhbCBvcHRpb25zIGxpa2UgLTEyMyBhbmQgZmVlZCB0aGUgaW50ZWdlciBhcworCWlmIGl0IHdhcyBhbiBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24gZ2l2ZW4gYnkgYGZ1bmNfcHRyYC4KKwlUaGUgcmVzdWx0IHdpbGwgYmUgcHV0IGludG8gYHZhcmAuICBUaGVyZSBjYW4gYmUgb25seSBvbmUgc3VjaAorCW9wdGlvbiBkZWZpbml0aW9uLiAgSXQgY2Fubm90IGJlIG5lZ2F0ZWQgYW5kIGl0IHRha2VzIG5vCisJYXJndW1lbnRzLiAgU2hvcnQgb3B0aW9ucyB0aGF0IGhhcHBlbiB0byBiZSBkaWdpdHMgdGFrZQorCXByZWNlZGVuY2Ugb3ZlciBpdC4KKworYE9QVF9DT0xPUl9GTEFHKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB0aGF0IHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgY2FuCisJaGF2ZSBvbmUgb2YgdGhyZWUgdmFsdWVzOiAiYWx3YXlzIiwgIm5ldmVyIiwgb3IgImF1dG8iLiAgSWYgdGhlCisJYXJndW1lbnQgaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byAiYWx3YXlzIi4gIFRoZSBgLS1uby1gIGZvcm0KKwl3b3JrcyBsaWtlIGAtLWxvbmc9bmV2ZXJgOyBpdCBjYW5ub3QgdGFrZSBhbiBhcmd1bWVudC4gIElmCisJImFsd2F5cyIsIHNldCBgaW50X3ZhcmAgdG8gMTsgaWYgIm5ldmVyIiwgc2V0IGBpbnRfdmFyYCB0byAwOyBpZgorCSJhdXRvIiwgc2V0IGBpbnRfdmFyYCB0byAxIGlmIHN0ZG91dCBpcyBhIHR0eSBvciBhIHBhZ2VyLAorCTAgb3RoZXJ3aXNlLgorCitgT1BUX05PT1BfTk9BUkcoc2hvcnQsIGxvbmcpYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB0aGF0IGhhcyBubyBlZmZlY3QgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KKwlVc2UgaXQgdG8gaGlkZSBkZXByZWNhdGVkIG9wdGlvbnMgdGhhdCBhcmUgc3RpbGwgdG8gYmUgcmVjb2duaXplZAorCWFuZCBpZ25vcmVkIHNpbGVudGx5LgorCisKK1RoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IG11c3QgYmUgYE9QVF9FTkQoKWAuCisKK0lmIG5vdCBzdGF0ZWQgb3RoZXJ3aXNlLCBpbnRlcnByZXQgdGhlIGFyZ3VtZW50cyBhcyBmb2xsb3dzOgorCisqIGBzaG9ydGAgaXMgYSBjaGFyYWN0ZXIgZm9yIHRoZSBzaG9ydCBvcHRpb24KKyAgKGUuZy4gYCdlJ2AgZm9yIGAtZWAsIHVzZSBgMGAgdG8gb21pdCksCisKKyogYGxvbmdgIGlzIGEgc3RyaW5nIGZvciB0aGUgbG9uZyBvcHRpb24KKyAgKGUuZy4gYCJleGFtcGxlImAgZm9yIGAtLWV4YW1wbGVgLCB1c2UgYE5VTExgIHRvIG9taXQpLAorCisqIGBpbnRfdmFyYCBpcyBhbiBpbnRlZ2VyIHZhcmlhYmxlLAorCisqIGBzdHJfdmFyYCBpcyBhIHN0cmluZyB2YXJpYWJsZSAoYGNoYXIgKmApLAorCisqIGBhcmdfc3RyYCBpcyB0aGUgc3RyaW5nIHRoYXQgaXMgc2hvd24gYXMgYXJndW1lbnQKKyAgKGUuZy4gYCJicmFuY2giYCB3aWxsIHJlc3VsdCBpbiBgPGJyYW5jaD5gKS4KKyAgSWYgc2V0IHRvIGBOVUxMYCwgdGhyZWUgZG90cyAoYC4uLmApIHdpbGwgYmUgZGlzcGxheWVkLgorCisqIGBkZXNjcmlwdGlvbmAgaXMgYSBzaG9ydCBzdHJpbmcgdG8gZGVzY3JpYmUgdGhlIGVmZmVjdCBvZiB0aGUgb3B0aW9uLgorICBJdCBzaGFsbCBiZWdpbiB3aXRoIGEgbG93ZXItY2FzZSBsZXR0ZXIgYW5kIGEgZnVsbCBzdG9wIChgLmApIHNoYWxsIGJlCisgIG9taXR0ZWQgYXQgdGhlIGVuZC4KKworT3B0aW9uIENhbGxiYWNrcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZnVuY3Rpb24gbXVzdCBiZSBkZWZpbmVkIGluIHRoaXMgZm9ybToKKworCWludCBmdW5jKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCisKK1RoZSBjYWxsYmFjayBtZWNoYW5pc20gaXMgYXMgZm9sbG93czoKKworKiBJbnNpZGUgYGZ1bmNgLCB0aGUgb25seSBpbnRlcmVzdGluZyBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZQorICBnaXZlbiBieSBgb3B0YCBpcyB0aGUgdm9pZCBwb2ludGVyIGBvcHQtPnZhbHVlYC4KKyAgYCpvcHQtPnZhbHVlYCB3aWxsIGJlIHRoZSB2YWx1ZSB0aGF0IGlzIHNhdmVkIGludG8gYHZhcmAsIGlmIHlvdQorICB1c2UgYE9QVF9DQUxMQkFDSygpYC4KKyAgRm9yIGV4YW1wbGUsIGRvIGAqKHVuc2lnbmVkIGxvbmcgKilvcHQtPnZhbHVlID0gNDI7YCB0byBnZXQgNDIKKyAgaW50byBhbiBgdW5zaWduZWQgbG9uZ2AgdmFyaWFibGUuCisKKyogUmV0dXJuIHZhbHVlIGAwYCBpbmRpY2F0ZXMgc3VjY2VzcyBhbmQgbm9uLXplcm8gcmV0dXJuCisgIHZhbHVlIHdpbGwgaW52b2tlIGB1c2FnZV93aXRoX29wdGlvbnMoKWAgYW5kLCB0aHVzLCBkaWUuCisKKyogSWYgdGhlIHVzZXIgbmVnYXRlcyB0aGUgb3B0aW9uLCBgYXJnYCBpcyBgTlVMTGAgYW5kIGB1bnNldGAgaXMgMS4KKworU29waGlzdGljYXRlZCBvcHRpb24gcGFyc2luZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgbmVlZCwgZm9yIGV4YW1wbGUsIG9wdGlvbiBjYWxsYmFja3Mgd2l0aCBvcHRpb25hbCBhcmd1bWVudHMKK29yIHdpdGhvdXQgYXJndW1lbnRzIGF0IGFsbCwgb3IgaWYgeW91IG5lZWQgb3RoZXIgc3BlY2lhbCBjYXNlcywKK3RoYXQgYXJlIG5vdCBoYW5kbGVkIGJ5IHRoZSBtYWNyb3MgYWJvdmUsIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlCittZW1iZXJzIG9mIHRoZSBgb3B0aW9uYCBzdHJ1Y3R1cmUgbWFudWFsbHkuCisKK1RoaXMgaXMgbm90IGNvdmVyZWQgaW4gdGhpcyBkb2N1bWVudCwgYnV0IHdlbGwgZG9jdW1lbnRlZAoraW4gYHBhcnNlLW9wdGlvbnMuaGAgaXRzZWxmLgorCitFeGFtcGxlcworLS0tLS0tLS0KKworU2VlIGB0ZXN0LXBhcnNlLW9wdGlvbnMuY2AgYW5kCitgYnVpbHRpbi1hZGQuY2AsCitgYnVpbHRpbi1jbG9uZS5jYCwKK2BidWlsdGluLWNvbW1pdC5jYCwKK2BidWlsdGluLWZldGNoLmNgLAorYGJ1aWx0aW4tZnNjay5jYCwKK2BidWlsdGluLXJtLmNgCitmb3IgcmVhbC13b3JsZCBleGFtcGxlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1xdW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcXVvdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTFiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcXVvdGUudHh0CkBAIC0wLDAgKzEsMTAgQEAKK3F1b3RlIEFQSQorPT09PT09PT09CisKK1RhbGsgYWJvdXQgPHF1b3RlLmg+LCB0aGluZ3MgbGlrZQorCisqIHNxX3F1b3RlIGFuZCB1bnF1b3RlCisqIGNfc3R5bGUgcXVvdGUgYW5kIHVucXVvdGUKKyogcXVvdGluZyBmb3IgZm9yZWlnbiBsYW5ndWFnZXMKKworKEpDKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlZi1pdGVyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlZi1pdGVyYXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYmVhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmVmLWl0ZXJhdGlvbi50eHQKQEAgLTAsMCArMSw4MSBAQAorcmVmIGl0ZXJhdGlvbiBBUEkKKz09PT09PT09PT09PT09PT09CisKKworSXRlcmF0aW9uIG9mIHJlZnMgaXMgZG9uZSBieSB1c2luZyBhbiBpdGVyYXRlIGZ1bmN0aW9uIHdoaWNoIHdpbGwgY2FsbCBhCitjYWxsYmFjayBmdW5jdGlvbiBmb3IgZXZlcnkgcmVmLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaGFzIHRoaXMKK3NpZ25hdHVyZToKKworCWludCBoYW5kbGVfb25lX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKTsKKworVGhlcmUgYXJlIGRpZmZlcmVudCBraW5kcyBvZiBpdGVyYXRlIGZ1bmN0aW9ucyB3aGljaCBhbGwgdGFrZSBhCitjYWxsYmFjayBvZiB0aGlzIHR5cGUuIFRoZSBjYWxsYmFjayBpcyB0aGVuIGNhbGxlZCBmb3IgZWFjaCBmb3VuZCByZWYKK3VudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zIG5vbnplcm8uIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyB0aGVuIGFsc28KK3JldHVybmVkIGJ5IHRoZSBpdGVyYXRlIGZ1bmN0aW9uLgorCitJdGVyYXRpb24gZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogYGhlYWRfcmVmKClgIGp1c3QgaXRlcmF0ZXMgdGhlIGhlYWQgcmVmLgorCisqIGBmb3JfZWFjaF9yZWYoKWAgaXRlcmF0ZXMgYWxsIHJlZnMuCisKKyogYGZvcl9lYWNoX3JlZl9pbigpYCBpdGVyYXRlcyBhbGwgcmVmcyB3aGljaCBoYXZlIGEgZGVmaW5lZCBwcmVmaXggYW5kCisgIHN0cmlwcyB0aGF0IHByZWZpeCBmcm9tIHRoZSBwYXNzZWQgdmFyaWFibGUgcmVmbmFtZS4KKworKiBgZm9yX2VhY2hfdGFnX3JlZigpYCwgYGZvcl9lYWNoX2JyYW5jaF9yZWYoKWAsIGBmb3JfZWFjaF9yZW1vdGVfcmVmKClgLAorICBgZm9yX2VhY2hfcmVwbGFjZV9yZWYoKWAgaXRlcmF0ZSByZWZzIGZyb20gdGhlIHJlc3BlY3RpdmUgYXJlYS4KKworKiBgZm9yX2VhY2hfZ2xvYl9yZWYoKWAgaXRlcmF0ZXMgYWxsIHJlZnMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIGdsb2IKKyAgcGF0dGVybi4KKworKiBgZm9yX2VhY2hfZ2xvYl9yZWZfaW4oKWAgdGhlIHByZXZpb3VzIGFuZCBgZm9yX2VhY2hfcmVmX2luKClgIGNvbWJpbmVkLgorCisqIGBoZWFkX3JlZl9zdWJtb2R1bGUoKWAsIGBmb3JfZWFjaF9yZWZfc3VibW9kdWxlKClgLAorICBgZm9yX2VhY2hfcmVmX2luX3N1Ym1vZHVsZSgpYCwgYGZvcl9lYWNoX3RhZ19yZWZfc3VibW9kdWxlKClgLAorICBgZm9yX2VhY2hfYnJhbmNoX3JlZl9zdWJtb2R1bGUoKWAsIGBmb3JfZWFjaF9yZW1vdGVfcmVmX3N1Ym1vZHVsZSgpYAorICBkbyB0aGUgc2FtZSBhcyB0aGUgZnVuY3Rpb25zIGRlc2NpYmVkIGFib3ZlIGJ1dCBmb3IgYSBzcGVjaWZpZWQKKyAgc3VibW9kdWxlLgorCisqIGBmb3JfZWFjaF9yYXdyZWYoKWAgY2FuIGJlIHVzZWQgdG8gbGVhcm4gYWJvdXQgYnJva2VuIHJlZiBhbmQgc3ltcmVmLgorCisqIGBmb3JfZWFjaF9yZWZsb2coKWAgaXRlcmF0ZXMgZWFjaCByZWZsb2cgZmlsZS4KKworU3VibW9kdWxlcworLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBpdGVyYXRlIHRoZSByZWZzIG9mIGEgc3VibW9kdWxlIHlvdSBmaXJzdCBuZWVkIHRvIGFkZCB0aGUKK3N1Ym1vZHVsZXMgb2JqZWN0IGRhdGFiYXNlLiBZb3UgY2FuIGRvIHRoaXMgYnkgYSBjb2RlLXNuaXBwZXQgbGlrZQordGhpczoKKworCWNvbnN0IGNoYXIgKnBhdGggPSAicGF0aC90by9zdWJtb2R1bGUiCisJaWYgKCFhZGRfc3VibW9kdWxlX29kYihwYXRoKSkKKwkJZGllKCJFcnJvciBzdWJtb2R1bGUgJyVzJyBub3QgcG9wdWxhdGVkLiIsIHBhdGgpOworCitgYWRkX3N1Ym1vZHVsZV9vZGIoKWAgd2lsbCByZXR1cm4gYW4gbm9uLXplcm8gdmFsdWUgb24gc3VjY2Vzcy4gSWYgeW91CitkbyBub3QgZG8gdGhpcyB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgZm9yIGVhY2ggcmVmIHRoYXQgaXQgZG9lcyBub3QgcG9pbnQKK3RvIGEgdmFsaWQgb2JqZWN0LgorCitOb3RlOiBBcyBhIHNpZGUtZWZmZWN0IG9mIHRoaXMgeW91IGNhbiBub3Qgc2FmZWx5IGFzc3VtZSB0aGF0IGFsbAorb2JqZWN0cyB5b3UgbG9va3VwIGFyZSBhdmFpbGFibGUgaW4gc3VwZXJwcm9qZWN0LiBBbGwgc3VibW9kdWxlIG9iamVjdHMKK3dpbGwgYmUgYXZhaWxhYmxlIHRoZSBzYW1lIHdheSBhcyB0aGUgc3VwZXJwcm9qZWN0cyBvYmplY3RzLgorCitFeGFtcGxlOgorLS0tLS0tLS0KKworLS0tLQorc3RhdGljIGludCBoYW5kbGVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiAqb3V0cHV0ID0gY2JfZGF0YTsKKwlzdHJidWZfYWRkZihvdXRwdXQsICIlc1xuIiwgcmVmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy4uLgorCisJc3RydWN0IHN0cmJ1ZiBvdXRwdXQgPSBTVFJCVUZfSU5JVDsKKwlmb3JfZWFjaF9yZW1vdGVfcmVmKGhhbmRsZV9yZW1vdGVfcmVmLCAmb3V0cHV0KTsKKwlwcmludGYoIiVzIiwgb3V0cHV0LmJ1Zik7CistLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NGIxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmVtb3RlLnR4dApAQCAtMCwwICsxLDEyNyBAQAorUmVtb3RlcyBjb25maWd1cmF0aW9uIEFQSQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgQVBJIGluIHJlbW90ZS5oIGdpdmVzIGFjY2VzcyB0byB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvCityZW1vdGVzLiBJdCBoYW5kbGVzIGFsbCB0aHJlZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMgaGlzdG9yaWNhbGx5CithbmQgY3VycmVudGx5IHVzZWQgYnkgZ2l0LCBhbmQgcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uIGluIGEgdW5pZm9ybQorZmFzaGlvbi4gTm90ZSB0aGF0IHRoZSBjb2RlIGFsc28gaGFuZGxlcyBwbGFpbiBVUkxzIHdpdGhvdXQgYW55Citjb25maWd1cmF0aW9uLCBnaXZpbmcgdGhlbSBqdXN0IHRoZSBkZWZhdWx0IGluZm9ybWF0aW9uLgorCitzdHJ1Y3QgcmVtb3RlCistLS0tLS0tLS0tLS0tCisKK2BuYW1lYDo6CisKKwlUaGUgdXNlcidzIG5pY2tuYW1lIGZvciB0aGUgcmVtb3RlCisKK2B1cmxgOjoKKworCUFuIGFycmF5IG9mIGFsbCBvZiB0aGUgdXJsX25yIFVSTHMgY29uZmlndXJlZCBmb3IgdGhlIHJlbW90ZQorCitgcHVzaHVybGA6OgorCisJQW4gYXJyYXkgb2YgYWxsIG9mIHRoZSBwdXNodXJsX25yIHB1c2ggVVJMcyBjb25maWd1cmVkIGZvciB0aGUgcmVtb3RlCisKK2BwdXNoYDo6CisKKwkgQW4gYXJyYXkgb2YgcmVmc3BlY3MgY29uZmlndXJlZCBmb3IgcHVzaGluZywgd2l0aAorCSBwdXNoX3JlZnNwZWMgYmVpbmcgdGhlIGxpdGVyYWwgc3RyaW5ncywgYW5kIHB1c2hfcmVmc3BlY19ucgorCSBiZWluZyB0aGUgcXVhbnRpdHkuCisKK2BmZXRjaGA6OgorCisJQW4gYXJyYXkgb2YgcmVmc3BlY3MgY29uZmlndXJlZCBmb3IgZmV0Y2hpbmcsIHdpdGgKKwlmZXRjaF9yZWZzcGVjIGJlaW5nIHRoZSBsaXRlcmFsIHN0cmluZ3MsIGFuZCBmZXRjaF9yZWZzcGVjX25yCisJYmVpbmcgdGhlIHF1YW50aXR5LgorCitgZmV0Y2hfdGFnc2A6OgorCisJVGhlIHNldHRpbmcgZm9yIHdoZXRoZXIgdG8gZmV0Y2ggdGFncyAoYXMgYSBzZXBhcmF0ZSBydWxlIGZyb20KKwl0aGUgY29uZmlndXJlZCByZWZzcGVjcyk7IC0xIG1lYW5zIG5ldmVyIHRvIGZldGNoIHRhZ3MsIDAKKwltZWFucyB0byBhdXRvLWZvbGxvdyB0YWdzIGJhc2VkIG9uIHRoZSBkZWZhdWx0IGhldXJpc3RpYywgMQorCW1lYW5zIHRvIGFsd2F5cyBhdXRvLWZvbGxvdyB0YWdzLCBhbmQgMiBtZWFucyB0byBmZXRjaCBhbGwKKwl0YWdzLgorCitgcmVjZWl2ZXBhY2tgLCBgdXBsb2FkcGFja2A6OgorCisJVGhlIGNvbmZpZ3VyZWQgaGVscGVyIHByb2dyYW1zIHRvIHJ1biBvbiB0aGUgcmVtb3RlIHNpZGUsIGZvcgorCWdpdC1uYXRpdmUgcHJvdG9jb2xzLgorCitgaHR0cF9wcm94eWA6OgorCisJVGhlIHByb3h5IHRvIHVzZSBmb3IgY3VybCAoaHR0cCwgaHR0cHMsIGZ0cCwgZXRjLikgVVJMcy4KKworc3RydWN0IHJlbW90ZXMgY2FuIGJlIGZvdW5kIGJ5IG5hbWUgd2l0aCByZW1vdGVfZ2V0KCksIGFuZCBpdGVyYXRlZAordGhyb3VnaCB3aXRoIGZvcl9lYWNoX3JlbW90ZSgpLiByZW1vdGVfZ2V0KE5VTEwpIHdpbGwgcmV0dXJuIHRoZQorZGVmYXVsdCByZW1vdGUsIGdpdmVuIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgY29uZmlndXJhdGlvbi4KKworc3RydWN0IHJlZnNwZWMKKy0tLS0tLS0tLS0tLS0tCisKK0Egc3RydWN0IHJlZnNwZWMgaG9sZHMgdGhlIHBhcnNlZCBpbnRlcnByZXRhdGlvbiBvZiBhIHJlZnNwZWMuIElmIGl0Cit3aWxsIGZvcmNlIHVwZGF0ZXMgKHN0YXJ0cyB3aXRoIGEgJysnKSwgZm9yY2UgaXMgdHJ1ZS4gSWYgaXQgaXMgYQorcGF0dGVybiAoc2lkZXMgZW5kIHdpdGggJyonKSBwYXR0ZXJuIGlzIHRydWUuIHNyYyBhbmQgZGVzdCBhcmUgdGhlIHR3bworc2lkZXMgKGlmIGEgcGF0dGVybiwgb25seSB0aGUgcGFydCBvdXRzaWRlIG9mIHRoZSB3aWxkY2FyZHMpOyBpZiB0aGVyZQoraXMgb25seSBvbmUgc2lkZSwgaXQgaXMgc3JjLCBhbmQgZHN0IGlzIE5VTEw7IGlmIHNpZGVzIGV4aXN0IGJ1dCBhcmUKK2VtcHR5IChpLmUuLCB0aGUgcmVmc3BlYyBlaXRoZXIgc3RhcnRzIG9yIGVuZHMgd2l0aCAnOicpLCB0aGUKK2NvcnJlc3BvbmRpbmcgc2lkZSBpcyAiIi4KKworVGhpcyBwYXJzaW5nIGNhbiBiZSBkb25lIHRvIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gZ2l2ZSBhbiBhcnJheSBvZgorc3RydWN0IHJlZnBzZWNzIHdpdGggcGFyc2VfcmVmX3NwZWMoKS4KKworcmVtb3RlX2ZpbmRfdHJhY2tpbmcoKSwgZ2l2ZW4gYSByZW1vdGUgYW5kIGEgc3RydWN0IHJlZnNwZWMgd2l0aAorZWl0aGVyIHNyYyBvciBkc3QgZmlsbGVkIG91dCwgd2lsbCBmaWxsIG91dCB0aGUgb3RoZXIgc3VjaCB0aGF0IHRoZQorcmVzdWx0IGlzIGluIHRoZSAiZmV0Y2giIHNwZWNpZmljYXRpb24gZm9yIHRoZSByZW1vdGUgKG5vdGUgdGhhdCB0aGlzCitldmFsdWF0ZXMgcGF0dGVybnMgYW5kIHJldHVybnMgYSBzaW5nbGUgcmVzdWx0KS4KKworc3RydWN0IGJyYW5jaAorLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgdGhpcyBtYXkgZW5kIHVwIG1vdmluZyB0byBicmFuY2guaAorCitzdHJ1Y3QgYnJhbmNoIGhvbGRzIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGJyYW5jaC4gSXQgY2FuIGJlIGxvb2tlZAordXAgd2l0aCBicmFuY2hfZ2V0KG5hbWUpIGZvciAicmVmcy9oZWFkcy97bmFtZX0iLCBvciB3aXRoCiticmFuY2hfZ2V0KE5VTEwpIGZvciBIRUFELgorCitJdCBjb250YWluczoKKworYG5hbWVgOjoKKworCVRoZSBzaG9ydCBuYW1lIG9mIHRoZSBicmFuY2guCisKK2ByZWZuYW1lYDo6CisKKwlUaGUgZnVsbCBwYXRoIGZvciB0aGUgYnJhbmNoIHJlZi4KKworYHJlbW90ZV9uYW1lYDo6CisKKwlUaGUgbmFtZSBvZiB0aGUgcmVtb3RlIGxpc3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KKworYHJlbW90ZWA6OgorCisJVGhlIHN0cnVjdCByZW1vdGUgZm9yIHRoYXQgcmVtb3RlLgorCitgbWVyZ2VfbmFtZWA6OgorCisJQW4gYXJyYXkgb2YgdGhlICJtZXJnZSIgbGluZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24uCisKK2BtZXJnZWA6OgorCisJQW4gYXJyYXkgb2YgdGhlIHN0cnVjdCByZWZzcGVjcyB1c2VkIGZvciB0aGUgbWVyZ2UgbGluZXMuIFRoYXQKKwlpcywgbWVyZ2VbaV0tPmRzdCBpcyBhIGxvY2FsIHRyYWNraW5nIHJlZiB3aGljaCBzaG91bGQgYmUKKwltZXJnZWQgaW50byB0aGlzIGJyYW5jaCBieSBkZWZhdWx0LgorCitgbWVyZ2VfbnJgOjoKKworCVRoZSBudW1iZXIgb2YgbWVyZ2UgY29uZmlndXJhdGlvbnMKKworYnJhbmNoX2hhc19tZXJnZV9jb25maWcoKSByZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGJyYW5jaCBoYXMgbWVyZ2UKK2NvbmZpZ3VyYXRpb24gZ2l2ZW4uCisKK090aGVyIHN0dWZmCistLS0tLS0tLS0tLQorCitUaGVyZSBpcyBvdGhlciBzdHVmZiBpbiByZW1vdGUuaCB0aGF0IGlzIHJlbGF0ZWQsIGluIGdlbmVyYWwsIHRvIHRoZQorcHJvY2VzcyBvZiBpbnRlcmFjdGluZyB3aXRoIHJlbW90ZXMuCisKKyhEYW5pZWwgQmFya2Fsb3cpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmV2aXNpb24td2Fsa2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmV2aXNpb24td2Fsa2luZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkMGQ5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZXZpc2lvbi13YWxraW5nLnR4dApAQCAtMCwwICsxLDcyIEBACityZXZpc2lvbiB3YWxraW5nIEFQSQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIHJldmlzaW9uIHdhbGtpbmcgQVBJIG9mZmVycyBmdW5jdGlvbnMgdG8gYnVpbGQgYSBsaXN0IG9mIHJldmlzaW9ucworYW5kIHRoZW4gaXRlcmF0ZSBvdmVyIHRoYXQgbGlzdC4KKworQ2FsbGluZyBzZXF1ZW5jZQorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgd2Fsa2luZyBBUEkgaGFzIGEgZ2l2ZW4gY2FsbGluZyBzZXF1ZW5jZTogZmlyc3QgeW91IG5lZWQgdG8KK2luaXRpYWxpemUgYSByZXZfaW5mbyBzdHJ1Y3R1cmUsIHRoZW4gYWRkIHJldmlzaW9ucyB0byBjb250cm9sIHdoYXQga2luZAorb2YgcmV2aXNpb24gbGlzdCBkbyB5b3Ugd2FudCB0byBnZXQsIGZpbmFsbHkgeW91IGNhbiBpdGVyYXRlIG92ZXIgdGhlCityZXZpc2lvbiBsaXN0LgorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCitgaW5pdF9yZXZpc2lvbnNgOjoKKworCUluaXRpYWxpemUgYSByZXZfaW5mbyBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcy4gVGhlIHNlY29uZAorCXBhcmFtZXRlciBtYXkgYmUgTlVMTCBvciBjYW4gYmUgcHJlZml4IHBhdGgsIGFuZCB0aGVuIHRoZSBgLnByZWZpeGAKKwl2YXJpYWJsZSB3aWxsIGJlIHNldCB0byBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGZpcnN0IGZ1bmN0aW9uIHlvdQorCXdhbnQgdG8gY2FsbCB3aGVuIHlvdSB3YW50IHRvIGRlYWwgd2l0aCBhIHJldmlzaW9uIGxpc3QuIEFmdGVyIGNhbGxpbmcKKwl0aGlzIGZ1bmN0aW9uLCB5b3UgYXJlIGZyZWUgdG8gY3VzdG9taXplIG9wdGlvbnMsIGxpa2Ugc2V0CisJYC5pZ25vcmVfbWVyZ2VzYCB0byAwIGlmIHlvdSBkb24ndCB3YW50IHRvIGlnbm9yZSBtZXJnZXMsIGFuZCBzbyBvbi4gU2VlCisJYHJldmlzaW9uLmhgIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMuCisKK2BhZGRfcGVuZGluZ19vYmplY3RgOjoKKworCVRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gYWRkIGNvbW1pdCBvYmplY3RzIGFzIHJldmlzaW9uCisJaW5mb3JtYXRpb24uIFlvdSBjYW4gdXNlIHRoZSBgVU5JTlRFUkVTVElOR2Agb2JqZWN0IGZsYWcgdG8gaW5kaWNhdGUgaWYKKwl5b3Ugd2FudCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIGdpdmVuIGNvbW1pdCAoYW5kIGNvbW1pdHMgcmVhY2hhYmxlCisJZnJvbSB0aGUgZ2l2ZW4gY29tbWl0KSBmcm9tIHRoZSByZXZpc2lvbiBsaXN0LgorKworTk9URTogSWYgeW91IGhhdmUgdGhlIGNvbW1pdHMgYXMgYSBzdHJpbmcgbGlzdCB0aGVuIHlvdSBwcm9iYWJseSB3YW50IHRvCit1c2Ugc2V0dXBfcmV2aXNpb25zKCksIGluc3RlYWQgb2YgcGFyc2luZyBlYWNoIHN0cmluZyBhbmQgdXNpbmcgdGhpcworZnVuY3Rpb24uCisKK2BzZXR1cF9yZXZpc2lvbnNgOjoKKworCVBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSBgcmV2X2luZm9gIHN0cnVjdHVyZSwgYW5kCisJcmVtb3ZpbmcgdGhlIHVzZWQgYXJndW1lbnRzIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QuIFJldHVybnMgdGhlIG51bWJlcgorCW9mIGFyZ3VtZW50cyBsZWZ0IHRoYXQgd2VyZW4ndCByZWNvZ25pemVkLCB3aGljaCBhcmUgYWxzbyBtb3ZlZCB0byB0aGUKKwloZWFkIG9mIHRoZSBhcmd1bWVudCBsaXN0LiBUaGUgbGFzdCBwYXJhbWV0ZXIgaXMgdXNlZCBpbiBjYXNlIG5vCisJcGFyYW1ldGVyIGdpdmVuIGJ5IHRoZSBmaXJzdCB0d28gYXJndW1lbnRzLgorCitgcHJlcGFyZV9yZXZpc2lvbl93YWxrYDo6CisKKwlQcmVwYXJlcyB0aGUgcmV2X2luZm8gc3RydWN0dXJlIGZvciBhIHdhbGsuIFlvdSBzaG91bGQgY2hlY2sgaWYgaXQKKwlyZXR1cm5zIGFueSBlcnJvciAobm9uLXplcm8gcmV0dXJuIGNvZGUpIGFuZCBpZiBpdCBkb2VzIG5vdCwgeW91IGNhbgorCXN0YXJ0IHVzaW5nIGdldF9yZXZpc2lvbigpIHRvIGRvIHRoZSBpdGVyYXRpb24uCisKK2BnZXRfcmV2aXNpb25gOjoKKworCVRha2VzIGEgcG9pbnRlciB0byBhIGByZXZfaW5mb2Agc3RydWN0dXJlIGFuZCBpdGVyYXRlcyBvdmVyIGl0LAorCXJldHVybmluZyBhIGBzdHJ1Y3QgY29tbWl0ICpgIGVhY2ggdGltZSB5b3UgY2FsbCBpdC4gVGhlIGVuZCBvZiB0aGUKKwlyZXZpc2lvbiBsaXN0IGlzIGluZGljYXRlZCBieSByZXR1cm5pbmcgYSBOVUxMIHBvaW50ZXIuCisKK2ByZXNldF9yZXZpc2lvbl93YWxrYDo6CisKKwlSZXNldCB0aGUgZmxhZ3MgdXNlZCBieSB0aGUgcmV2aXNpb24gd2Fsa2luZyBhcGkuIFlvdSBjYW4gdXNlCisJdGhpcyB0byBkbyBtdWx0aXBsZSBzZXF1ZW5jaWFsIHJldmlzaW9uIHdhbGtzLgorCitEYXRhIHN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLQorCitUYWxrIGFib3V0IDxyZXZpc2lvbi5oPiwgdGhpbmdzIGxpa2U6CisKKyogdHdvIGRpZmZfb3B0aW9ucywgb25lIGZvciBwYXRoIGxpbWl0aW5nLCBhbm90aGVyIGZvciBvdXRwdXQ7CisqIHJlbWFpbmluZyBmdW5jdGlvbnM7CisKKyhMaW51cywgSkMsIERzY2hvKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJ1bi1jb21tYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ydW4tY29tbWFuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4YjRmNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ydW4tY29tbWFuZC50eHQKQEAgLTAsMCArMSwyNDMgQEAKK3J1bi1jb21tYW5kIEFQSQorPT09PT09PT09PT09PT09CisKK1RoZSBydW4tY29tbWFuZCBBUEkgb2ZmZXJzIGEgdmVyc2F0aWxlIHRvb2wgdG8gcnVuIHN1Yi1wcm9jZXNzZXMgd2l0aAorcmVkaXJlY3RlZCBpbnB1dCBhbmQgb3V0cHV0IGFzIHdlbGwgYXMgd2l0aCBhIG1vZGlmaWVkIGVudmlyb25tZW50CithbmQgYW4gYWx0ZXJuYXRlIGN1cnJlbnQgZGlyZWN0b3J5LgorCitBIHNpbWlsYXIgQVBJIG9mZmVycyB0aGUgY2FwYWJpbGl0eSB0byBydW4gYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseSwKK3doaWNoIGlzIHByaW1hcmlseSB1c2VkIHRvIGNhcHR1cmUgdGhlIG91dHB1dCB0aGF0IHRoZSBmdW5jdGlvbgorcHJvZHVjZXMgaW4gdGhlIGNhbGxlciBpbiBvcmRlciB0byBwcm9jZXNzIGl0LgorCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKK2BzdGFydF9jb21tYW5kYDo6CisKKwlTdGFydCBhIHN1Yi1wcm9jZXNzLiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgCisJdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMgYW5kIHJldHVybnMgcGlwZSBGRHMgKGlmIHJlcXVlc3RlZCkuCisJU2VlIGJlbG93IGZvciBkZXRhaWxzLgorCitgZmluaXNoX2NvbW1hbmRgOjoKKworCVdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGEgc3ViLXByb2Nlc3MgdGhhdCB3YXMgc3RhcnRlZCB3aXRoCisJc3RhcnRfY29tbWFuZCgpLgorCitgcnVuX2NvbW1hbmRgOjoKKworCUEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBlbmNhcHN1bGF0ZXMgYSBzZXF1ZW5jZSBvZgorCXN0YXJ0X2NvbW1hbmQoKSBmb2xsb3dlZCBieSBmaW5pc2hfY29tbWFuZCgpLiBUYWtlcyBhIHBvaW50ZXIKKwl0byBhIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AgdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMuCisKK2BydW5fY29tbWFuZF92X29wdGAsIGBydW5fY29tbWFuZF92X29wdF9jZF9lbnZgOjoKKworCUNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGVuY2Fwc3VsYXRlIGEgc2VxdWVuY2Ugb2YKKwlzdGFydF9jb21tYW5kKCkgZm9sbG93ZWQgYnkgZmluaXNoX2NvbW1hbmQoKS4gVGhlIGFyZ3VtZW50IGFyZ3YKKwlzcGVjaWZpZXMgdGhlIHByb2dyYW0gYW5kIGl0cyBhcmd1bWVudHMuIFRoZSBhcmd1bWVudCBvcHQgaXMgemVybworCW9yIG1vcmUgb2YgdGhlIGZsYWdzIGBSVU5fQ09NTUFORF9OT19TVERJTmAsIGBSVU5fR0lUX0NNRGAsCisJYFJVTl9DT01NQU5EX1NURE9VVF9UT19TVERFUlJgLCBvciBgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkVgCisJdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBtZW1iZXJzIC5ub19zdGRpbiwgLmdpdF9jbWQsCisJLnN0ZG91dF90b19zdGRlcnIsIC5zaWxlbnRfZXhlY19mYWlsdXJlIG9mIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AuCisJVGhlIGFyZ3VtZW50IGRpciBjb3JyZXNwb25kcyB0aGUgbWVtYmVyIC5kaXIuIFRoZSBhcmd1bWVudCBlbnYKKwljb3JyZXNwb25kcyB0byB0aGUgbWVtYmVyIC5lbnYuCisKK1RoZSBmdW5jdGlvbnMgYWJvdmUgZG8gdGhlIGZvbGxvd2luZzoKKworLiBJZiBhIHN5c3RlbSBjYWxsIGZhaWxlZCwgZXJybm8gaXMgc2V0IGFuZCAtMSBpcyByZXR1cm5lZC4gQSBkaWFnbm9zdGljCisgIGlzIHByaW50ZWQuCisKKy4gSWYgdGhlIHByb2dyYW0gd2FzIG5vdCBmb3VuZCwgdGhlbiAtMSBpcyByZXR1cm5lZCBhbmQgZXJybm8gaXMgc2V0IHRvCisgIEVOT0VOVDsgYSBkaWFnbm9zdGljIGlzIHByaW50ZWQgb25seSBpZiAuc2lsZW50X2V4ZWNfZmFpbHVyZSBpcyAwLgorCisuIE90aGVyd2lzZSwgdGhlIHByb2dyYW0gaXMgcnVuLiBJZiBpdCB0ZXJtaW5hdGVzIHJlZ3VsYXJseSwgaXRzIGV4aXQKKyAgY29kZSBpcyByZXR1cm5lZC4gTm8gZGlhZ25vc3RpYyBpcyBwcmludGVkLCBldmVuIGlmIHRoZSBleGl0IGNvZGUgaXMKKyAgbm9uLXplcm8uCisKKy4gSWYgdGhlIHByb2dyYW0gdGVybWluYXRlZCBkdWUgdG8gYSBzaWduYWwsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUKKyAgc2lnbmFsIG51bWJlciAtIDEyOCwgaWUuIGl0IGlzIG5lZ2F0aXZlIGFuZCBzbyBpbmRpY2F0ZXMgYW4gdW51c3VhbAorICBjb25kaXRpb247IGEgZGlhZ25vc3RpYyBpcyBwcmludGVkLiBUaGlzIHJldHVybiB2YWx1ZSBjYW4gYmUgcGFzc2VkIHRvCisgIGV4aXQoMiksIHdoaWNoIHdpbGwgcmVwb3J0IHRoZSBzYW1lIGNvZGUgdG8gdGhlIHBhcmVudCBwcm9jZXNzIHRoYXQgYQorICBQT1NJWCBzaGVsbCdzICQ/IHdvdWxkIHJlcG9ydCBmb3IgYSBwcm9ncmFtIHRoYXQgZGllZCBmcm9tIHRoZSBzaWduYWwuCisKKworYHN0YXJ0X2FzeW5jYDo6CisKKwlSdW4gYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseS4gVGFrZXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdAorCWFzeW5jYCB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBhbmQgcmV0dXJucyBhIHNldCBvZiBwaXBlIEZEcworCWZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZ1bmN0aW9uLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisKK2BmaW5pc2hfYXN5bmNgOjoKKworCVdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHdhcworCXN0YXJ0ZWQgd2l0aCBzdGFydF9hc3luYygpLgorCitgcnVuX2hvb2tgOjoKKworCVJ1biBhIGhvb2suCisJVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcGF0aG5hbWUgdG8gYW4gaW5kZXggZmlsZSwgb3IgTlVMTAorCWlmIHRoZSBob29rIHVzZXMgdGhlIGRlZmF1bHQgaW5kZXggZmlsZSBvciBubyBpbmRleCBpcyBuZWVkZWQuCisJVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgaG9vay4KKwlUaGUgZnVydGhlciBhcmd1bWVudHMgY29ycmVzcG9uZCB0byB0aGUgaG9vayBhcmd1bWVudHMuCisJVGhlIGxhc3QgYXJndW1lbnQgaGFzIHRvIGJlIE5VTEwgdG8gdGVybWluYXRlIHRoZSBhcmd1bWVudHMgbGlzdC4KKwlJZiB0aGUgaG9vayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgZXhlY3V0YWJsZSwgdGhlIHJldHVybgorCXZhbHVlIHdpbGwgYmUgemVyby4KKwlJZiBpdCBpcyBleGVjdXRhYmxlLCB0aGUgaG9vayB3aWxsIGJlIGV4ZWN1dGVkIGFuZCB0aGUgZXhpdAorCXN0YXR1cyBvZiB0aGUgaG9vayBpcyByZXR1cm5lZC4KKwlPbiBleGVjdXRpb24sIC5zdGRvdXRfdG9fc3RkZXJyIGFuZCAubm9fc3RkaW4gd2lsbCBiZSBzZXQuCisJKFNlZSBiZWxvdy4pCisKKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworKiBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgCisKK1RoaXMgZGVzY3JpYmVzIHRoZSBhcmd1bWVudHMsIHJlZGlyZWN0aW9ucywgYW5kIGVudmlyb25tZW50IG9mIGEKK2NvbW1hbmQgdG8gcnVuIGluIGEgc3ViLXByb2Nlc3MuCisKK1RoZSBjYWxsZXI6CisKKzEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzIChtZW1zZXQoJmNobGQsIDAsIHNpemVvZihjaGxkKSk7KSBhCisgICBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyB2YXJpYWJsZTsKKzIuIGluaXRpYWxpemVzIHRoZSBtZW1iZXJzOworMy4gY2FsbHMgc3RhcnRfY29tbWFuZCgpOworNC4gcHJvY2Vzc2VzIHRoZSBkYXRhOworNS4gY2xvc2VzIGZpbGUgZGVzY3JpcHRvcnMgKGlmIG5lY2Vzc2FyeTsgc2VlIGJlbG93KTsKKzYuIGNhbGxzIGZpbmlzaF9jb21tYW5kKCkuCisKK1RoZSAuYXJndiBtZW1iZXIgaXMgc2V0IHVwIGFzIGFuIGFycmF5IG9mIHN0cmluZyBwb2ludGVycyAoTlVMTAordGVybWluYXRlZCksIG9mIHdoaWNoIC5hcmd2WzBdIGlzIHRoZSBwcm9ncmFtIG5hbWUgdG8gcnVuICh1c3VhbGx5Cit3aXRob3V0IGEgcGF0aCkuIElmIHRoZSBjb21tYW5kIHRvIHJ1biBpcyBhIGdpdCBjb21tYW5kLCBzZXQgYXJndlswXSB0bwordGhlIGNvbW1hbmQgbmFtZSB3aXRob3V0IHRoZSAnZ2l0LScgcHJlZml4IGFuZCBzZXQgLmdpdF9jbWQgPSAxLgorCitUaGUgbWVtYmVycyAuaW4sIC5vdXQsIC5lcnIgYXJlIHVzZWQgdG8gcmVkaXJlY3Qgc3RkaW4sIHN0ZG91dCwKK3N0ZGVyciBhcyBmb2xsb3dzOgorCisuIFNwZWNpZnkgMCB0byByZXF1ZXN0IG5vIHNwZWNpYWwgcmVkaXJlY3Rpb24uIE5vIG5ldyBmaWxlIGRlc2NyaXB0b3IKKyAgaXMgYWxsb2NhdGVkLiBUaGUgY2hpbGQgcHJvY2VzcyBzaW1wbHkgaW5oZXJpdHMgdGhlIGNoYW5uZWwgZnJvbSB0aGUKKyAgcGFyZW50LgorCisuIFNwZWNpZnkgLTEgdG8gaGF2ZSBhIHBpcGUgYWxsb2NhdGVkOyBzdGFydF9jb21tYW5kKCkgcmVwbGFjZXMgLTEKKyAgYnkgdGhlIHBpcGUgRkQgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisKKwkuaW46IFJldHVybnMgdGhlIHdyaXRhYmxlIHBpcGUgZW5kIGludG8gd2hpY2ggdGhlIGNhbGxlciB3cml0ZXM7CisJCXRoZSByZWFkYWJsZSBlbmQgb2YgdGhlIHBpcGUgYmVjb21lcyB0aGUgY2hpbGQncyBzdGRpbi4KKworCS5vdXQsIC5lcnI6IFJldHVybnMgdGhlIHJlYWRhYmxlIHBpcGUgZW5kIGZyb20gd2hpY2ggdGhlIGNhbGxlcgorCQlyZWFkczsgdGhlIHdyaXRhYmxlIGVuZCBvZiB0aGUgcGlwZSBlbmQgYmVjb21lcyBjaGlsZCdzCisJCXN0ZG91dC9zdGRlcnIuCisKKyAgVGhlIGNhbGxlciBvZiBzdGFydF9jb21tYW5kKCkgbXVzdCBjbG9zZSB0aGUgc28gcmV0dXJuZWQgRkRzCisgIGFmdGVyIGl0IGhhcyBjb21wbGV0ZWQgcmVhZGluZyBmcm9tL3dyaXRpbmcgdG8gaXQhCisKKy4gU3BlY2lmeSBhIGZpbGUgZGVzY3JpcHRvciA+IDAgdG8gYmUgdXNlZCBieSB0aGUgY2hpbGQ6CisKKwkuaW46IFRoZSBGRCBtdXN0IGJlIHJlYWRhYmxlOyBpdCBiZWNvbWVzIGNoaWxkJ3Mgc3RkaW4uCisJLm91dDogVGhlIEZEIG11c3QgYmUgd3JpdGFibGU7IGl0IGJlY29tZXMgY2hpbGQncyBzdGRvdXQuCisJLmVycjogVGhlIEZEIG11c3QgYmUgd3JpdGFibGU7IGl0IGJlY29tZXMgY2hpbGQncyBzdGRlcnIuCisKKyAgVGhlIHNwZWNpZmllZCBGRCBpcyBjbG9zZWQgYnkgc3RhcnRfY29tbWFuZCgpLCBldmVuIGlmIGl0IGZhaWxzIHRvCisgIHJ1biB0aGUgc3ViLXByb2Nlc3MhCisKKy4gU3BlY2lhbCBmb3JtcyBvZiByZWRpcmVjdGlvbiBhcmUgYXZhaWxhYmxlIGJ5IHNldHRpbmcgdGhlc2UgbWVtYmVycworICB0byAxOgorCisJLm5vX3N0ZGluLCAubm9fc3Rkb3V0LCAubm9fc3RkZXJyOiBUaGUgcmVzcGVjdGl2ZSBjaGFubmVsIGlzCisJCXJlZGlyZWN0ZWQgdG8gL2Rldi9udWxsLgorCisJLnN0ZG91dF90b19zdGRlcnI6IHN0ZG91dCBvZiB0aGUgY2hpbGQgaXMgcmVkaXJlY3RlZCB0byBpdHMKKwkJc3RkZXJyLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgc3RkZXJyIGlzIGl0c2VsZiByZWRpcmVjdGVkLgorCQlTbyBzdGRvdXQgd2lsbCBmb2xsb3cgc3RkZXJyIHRvIHdoZXJldmVyIGl0IGlzCisJCXJlZGlyZWN0ZWQuCisKK1RvIG1vZGlmeSB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIHN1Yi1wcm9jZXNzLCBzcGVjaWZ5IGFuIGFycmF5IG9mCitzdHJpbmcgcG9pbnRlcnMgKE5VTEwgdGVybWluYXRlZCkgaW4gLmVudjoKKworLiBJZiB0aGUgc3RyaW5nIGlzIG9mIHRoZSBmb3JtICJWQVI9dmFsdWUiLCBpLmUuIGl0IGNvbnRhaW5zICc9JworICB0aGUgdmFyaWFibGUgaXMgYWRkZWQgdG8gdGhlIGNoaWxkIHByb2Nlc3MncyBlbnZpcm9ubWVudC4KKworLiBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gJz0nLCBpdCBuYW1lcyBhbiBlbnZpcm9ubWVudAorICB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzJ3MgZW52aXJvbm1lbnQuCisKK1RvIHNwZWNpZnkgYSBuZXcgaW5pdGlhbCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHN1Yi1wcm9jZXNzLAorc3BlY2lmeSBpdCBpbiB0aGUgLmRpciBtZW1iZXIuCisKK0lmIHRoZSBwcm9ncmFtIGNhbm5vdCBiZSBmb3VuZCwgdGhlIGZ1bmN0aW9ucyByZXR1cm4gLTEgYW5kIHNldAorZXJybm8gdG8gRU5PRU5ULiBOb3JtYWxseSwgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLCBidXQgaWYKKy5zaWxlbnRfZXhlY19mYWlsdXJlIGlzIHNldCB0byAxLCBubyBtZXNzYWdlIGlzIHByaW50ZWQgZm9yIHRoaXMKK3NwZWNpYWwgZXJyb3IgY29uZGl0aW9uLgorCisKKyogYHN0cnVjdCBhc3luY2AKKworVGhpcyBkZXNjcmliZXMgYSBmdW5jdGlvbiB0byBydW4gYXN5bmNocm9ub3VzbHksIHdob3NlIHB1cnBvc2UgaXMKK3RvIHByb2R1Y2Ugb3V0cHV0IHRoYXQgdGhlIGNhbGxlciByZWFkcy4KKworVGhlIGNhbGxlcjoKKworMS4gYWxsb2NhdGVzIGFuZCBjbGVhcnMgKG1lbXNldCgmYXN5LCAwLCBzaXplb2YoYXN5KSk7KSBhCisgICBzdHJ1Y3QgYXN5bmMgdmFyaWFibGU7CisyLiBpbml0aWFsaXplcyAucHJvYyBhbmQgLmRhdGE7CiszLiBjYWxscyBzdGFydF9hc3luYygpOworNC4gcHJvY2Vzc2VzIGNvbW11bmljYXRlcyB3aXRoIHByb2MgdGhyb3VnaCAuaW4gYW5kIC5vdXQ7Cis1LiBjbG9zZXMgLmluIGFuZCAub3V0OworNi4gY2FsbHMgZmluaXNoX2FzeW5jKCkuCisKK1RoZSBtZW1iZXJzIC5pbiwgLm91dCBhcmUgdXNlZCB0byBwcm92aWRlIGEgc2V0IG9mIGZkJ3MgZm9yCitjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGNhbGxlciBhbmQgdGhlIGNhbGxlZSBhcyBmb2xsb3dzOgorCisuIFNwZWNpZnkgMCB0byBoYXZlIG5vIGZpbGUgZGVzY3JpcHRvciBwYXNzZWQuICBUaGUgY2FsbGVlIHdpbGwKKyAgcmVjZWl2ZSAtMSBpbiB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudC4KKworLiBTcGVjaWZ5IDwgMCB0byBoYXZlIGEgcGlwZSBhbGxvY2F0ZWQ7IHN0YXJ0X2FzeW5jKCkgcmVwbGFjZXMKKyAgd2l0aCB0aGUgcGlwZSBGRCBpbiB0aGUgZm9sbG93aW5nIHdheToKKworCS5pbjogUmV0dXJucyB0aGUgd3JpdGFibGUgcGlwZSBlbmQgaW50byB3aGljaCB0aGUgY2FsbGVyCisJd3JpdGVzOyB0aGUgcmVhZGFibGUgZW5kIG9mIHRoZSBwaXBlIGJlY29tZXMgdGhlIGZ1bmN0aW9uJ3MKKwlpbiBhcmd1bWVudC4KKworCS5vdXQ6IFJldHVybnMgdGhlIHJlYWRhYmxlIHBpcGUgZW5kIGZyb20gd2hpY2ggdGhlIGNhbGxlcgorCXJlYWRzOyB0aGUgd3JpdGFibGUgZW5kIG9mIHRoZSBwaXBlIGJlY29tZXMgdGhlIGZ1bmN0aW9uJ3MKKwlvdXQgYXJndW1lbnQuCisKKyAgVGhlIGNhbGxlciBvZiBzdGFydF9hc3luYygpIG11c3QgY2xvc2UgdGhlIHJldHVybmVkIEZEcyBhZnRlciBpdAorICBoYXMgY29tcGxldGVkIHJlYWRpbmcgZnJvbS93cml0aW5nIGZyb20gdGhlbS4KKworLiBTcGVjaWZ5IGEgZmlsZSBkZXNjcmlwdG9yID4gMCB0byBiZSB1c2VkIGJ5IHRoZSBmdW5jdGlvbjoKKworCS5pbjogVGhlIEZEIG11c3QgYmUgcmVhZGFibGU7IGl0IGJlY29tZXMgdGhlIGZ1bmN0aW9uJ3MgaW4uCisJLm91dDogVGhlIEZEIG11c3QgYmUgd3JpdGFibGU7IGl0IGJlY29tZXMgdGhlIGZ1bmN0aW9uJ3Mgb3V0LgorCisgIFRoZSBzcGVjaWZpZWQgRkQgaXMgY2xvc2VkIGJ5IHN0YXJ0X2FzeW5jKCksIGV2ZW4gaWYgaXQgZmFpbHMgdG8KKyAgcnVuIHRoZSBmdW5jdGlvbi4KKworVGhlIGZ1bmN0aW9uIHBvaW50ZXIgaW4gLnByb2MgaGFzIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgorCisJaW50IHByb2MoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKTsKKworLiBpbiwgb3V0IHNwZWNpZmllcyBhIHNldCBvZiBmaWxlIGRlc2NyaXB0b3JzIHRvIHdoaWNoIHRoZSBmdW5jdGlvbgorICBtdXN0IHJlYWQvd3JpdGUgdGhlIGRhdGEgdGhhdCBpdCBuZWVkcy9wcm9kdWNlcy4gIFRoZSBmdW5jdGlvbgorICAqbXVzdCogY2xvc2UgdGhlc2UgZGVzY3JpcHRvcnMgYmVmb3JlIGl0IHJldHVybnMuICBBIGRlc2NyaXB0b3IKKyAgbWF5IGJlIC0xIGlmIHRoZSBjYWxsZXIgZGlkIG5vdCBjb25maWd1cmUgYSBkZXNjcmlwdG9yIGZvciB0aGF0CisgIGRpcmVjdGlvbi4KKworLiBkYXRhIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBjYWxsZXIgaGFzIHNwZWNpZmllZCBpbiB0aGUgLmRhdGEgbWVtYmVyCisgIG9mIHN0cnVjdCBhc3luYy4KKworLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyAwIG9uIHN1Y2Nlc3MgYW5kIG5vbi16ZXJvCisgIG9uIGZhaWx1cmUuIElmIHRoZSBmdW5jdGlvbiBpbmRpY2F0ZXMgZmFpbHVyZSwgZmluaXNoX2FzeW5jKCkgd2lsbAorICByZXBvcnQgZmFpbHVyZSBhcyB3ZWxsLgorCisKK1RoZXJlIGFyZSBzZXJpb3VzIHJlc3RyaWN0aW9ucyBvbiB3aGF0IHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gY2FuIGRvCitiZWNhdXNlIHRoaXMgZmFjaWxpdHkgaXMgaW1wbGVtZW50ZWQgYnkgYSB0aHJlYWQgaW4gdGhlIHNhbWUgYWRkcmVzcworc3BhY2Ugb24gbW9zdCBwbGF0Zm9ybXMgKHdoZW4gcHRocmVhZHMgaXMgYXZhaWxhYmxlKSwgYnV0IGJ5IGEgcGlwZSB0bworYSBmb3JrZWQgcHJvY2VzcyBvdGhlcndpc2U6CisKKy4gSXQgY2Fubm90IGNoYW5nZSB0aGUgcHJvZ3JhbSdzIHN0YXRlIChnbG9iYWwgdmFyaWFibGVzLCBlbnZpcm9ubWVudCwKKyAgZXRjLikgaW4gYSB3YXkgdGhhdCB0aGUgY2FsbGVyIG5vdGljZXM7IGluIG90aGVyIHdvcmRzLCAuaW4gYW5kIC5vdXQKKyAgYXJlIHRoZSBvbmx5IGNvbW11bmljYXRpb24gY2hhbm5lbHMgdG8gdGhlIGNhbGxlci4KKworLiBJdCBtdXN0IG5vdCBjaGFuZ2UgdGhlIHByb2dyYW0ncyBzdGF0ZSB0aGF0IHRoZSBjYWxsZXIgb2YgdGhlCisgIGZhY2lsaXR5IGFsc28gdXNlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zZXR1cC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2V0dXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjNhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2V0dXAudHh0CkBAIC0wLDAgKzEsMTMgQEAKK3NldHVwIEFQSQorPT09PT09PT09CisKK1RhbGsgYWJvdXQKKworKiBzZXR1cF9naXRfZGlyZWN0b3J5KCkKKyogc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoKQorKiBpc19pbnNpZGVfZ2l0X2RpcigpCisqIGlzX2luc2lkZV93b3JrX3RyZWUoKQorKiBzZXR1cF93b3JrX3RyZWUoKQorKiBnZXRfcGF0aHNwZWMoKQorCisoRHNjaG8pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2hhMS1hcnJheS50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2hhMS1hcnJheS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkMWM1MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zaGExLWFycmF5LnR4dApAQCAtMCwwICsxLDc2IEBACitzaGExLWFycmF5IEFQSQorPT09PT09PT09PT09PT0KKworVGhlIHNoYTEtYXJyYXkgQVBJIHByb3ZpZGVzIHN0b3JhZ2UgYW5kIG1hbmlwdWxhdGlvbiBvZiBzZXRzIG9mIFNIQTEKK2lkZW50aWZpZXJzLiBUaGUgZW1waGFzaXMgaXMgb24gc3RvcmFnZSBhbmQgcHJvY2Vzc2luZyBlZmZpY2llbmN5LAorbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGxhcmdlIGxpc3RzLiBOb3RlIHRoYXQgdGhlIG9yZGVyaW5nIG9mIGl0ZW1zIGlzCitub3QgcHJlc2VydmVkIG92ZXIgc29tZSBvcGVyYXRpb25zLgorCitEYXRhIFN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLQorCitgc3RydWN0IHNoYTFfYXJyYXlgOjoKKworCUEgc2luZ2xlIGFycmF5IG9mIFNIQTEgaGFzaGVzLiBUaGlzIHNob3VsZCBiZSBpbml0aWFsaXplZCBieQorCWFzc2lnbm1lbnQgZnJvbSBgU0hBMV9BUlJBWV9JTklUYC4gIFRoZSBgc2hhMWAgbWVtYmVyIGNvbnRhaW5zCisJdGhlIGFjdHVhbCBkYXRhLiBUaGUgYG5yYCBtZW1iZXIgY29udGFpbnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbgorCXRoZSBzZXQuICBUaGUgYGFsbG9jYCBhbmQgYHNvcnRlZGAgbWVtYmVycyBhcmUgdXNlZCBpbnRlcm5hbGx5LAorCWFuZCBzaG91bGQgbm90IGJlIG5lZWRlZCBieSBBUEkgY2FsbGVycy4KKworRnVuY3Rpb25zCistLS0tLS0tLS0KKworYHNoYTFfYXJyYXlfYXBwZW5kYDo6CisJQWRkIGFuIGl0ZW0gdG8gdGhlIHNldC4gVGhlIHNoYTEgd2lsbCBiZSBwbGFjZWQgYXQgdGhlIGVuZCBvZgorCXRoZSBhcnJheSAoYnV0IG5vdGUgdGhhdCBzb21lIG9wZXJhdGlvbnMgYmVsb3cgbWF5IGxvc2UgdGhpcworCW9yZGVyaW5nKS4KKworYHNoYTFfYXJyYXlfbG9va3VwYDo6CisJUGVyZm9ybSBhIGJpbmFyeSBzZWFyY2ggb2YgdGhlIGFycmF5IGZvciBhIHNwZWNpZmljIHNoYTEuCisJSWYgZm91bmQsIHJldHVybnMgdGhlIG9mZnNldCAoaW4gbnVtYmVyIG9mIGVsZW1lbnRzKSBvZiB0aGUKKwlzaGExLiBJZiBub3QgZm91bmQsIHJldHVybnMgYSBuZWdhdGl2ZSBpbnRlZ2VyLiBJZiB0aGUgYXJyYXkgaXMKKwlub3Qgc29ydGVkLCB0aGlzIGZ1bmN0aW9uIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2Ygc29ydGluZyBpdC4KKworYHNoYTFfYXJyYXlfY2xlYXJgOjoKKwlGcmVlIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcnJheSBhbmQgcmV0dXJuIGl0IHRvIHRoZQorCWluaXRpYWwsIGVtcHR5IHN0YXRlLgorCitgc2hhMV9hcnJheV9mb3JfZWFjaF91bmlxdWVgOjoKKwlFZmZpY2llbnRseSBpdGVyYXRlIG92ZXIgZWFjaCB1bmlxdWUgZWxlbWVudCBvZiB0aGUgbGlzdCwKKwlleGVjdXRpbmcgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9uZS4gSWYgdGhlIGFycmF5IGlzCisJbm90IHNvcnRlZCwgdGhpcyBmdW5jdGlvbiBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNvcnRpbmcgaXQuCisKK0V4YW1wbGVzCistLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBwcmludF9jYWxsYmFjayhjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLAorCQkgICAgdm9pZCAqZGF0YSkKK3sKKwlwcmludGYoIiVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7Cit9CisKK3ZvaWQgc29tZV9mdW5jKHZvaWQpCit7CisJc3RydWN0IHNoYTFfYXJyYXkgaGFzaGVzID0gU0hBMV9BUlJBWV9JTklUOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwkvKiBSZWFkIG9iamVjdHMgaW50byBvdXIgc2V0ICovCisJd2hpbGUgKHJlYWRfb2JqZWN0X2Zyb21fc3RkaW4oc2hhMSkpCisJCXNoYTFfYXJyYXlfYXBwZW5kKCZoYXNoZXMsIHNoYTEpOworCisJLyogQ2hlY2sgaWYgc29tZSBvYmplY3RzIGFyZSBpbiBvdXIgc2V0ICovCisJd2hpbGUgKHJlYWRfb2JqZWN0X2Zyb21fc3RkaW4oc2hhMSkpIHsKKwkJaWYgKHNoYTFfYXJyYXlfbG9va3VwKCZoYXNoZXMsIHNoYTEpID49IDApCisJCQlwcmludGYoIml0J3MgaW4gdGhlcmUhXG4iKTsKKworCS8qCisJICogUHJpbnQgdGhlIHVuaXF1ZSBzZXQgb2Ygb2JqZWN0cy4gV2UgY291bGQgYWxzbyBoYXZlCisJICogYXZvaWRlZCBhZGRpbmcgZHVwbGljYXRlIG9iamVjdHMgaW4gdGhlIGZpcnN0IHBsYWNlLAorCSAqIGJ1dCB3ZSB3b3VsZCBlbmQgdXAgcmUtc29ydGluZyB0aGUgYXJyYXkgcmVwZWF0ZWRseS4KKwkgKiBJbnN0ZWFkLCB0aGlzIHdpbGwgc29ydCBvbmNlIGFuZCB0aGVuIHNraXAgZHVwbGljYXRlcworCSAqIGluIGxpbmVhciB0aW1lLgorCSAqLworCXNoYTFfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKCZoYXNoZXMsIHByaW50X2NhbGxiYWNrLCBOVUxMKTsKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2lnY2hhaW4udHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXNpZ2NoYWluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTExODllCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXNpZ2NoYWluLnR4dApAQCAtMCwwICsxLDQxIEBACitzaWdjaGFpbiBBUEkKKz09PT09PT09PT09PQorCitDb2RlIG9mdGVuIHdhbnRzIHRvIHNldCBhIHNpZ25hbCBoYW5kbGVyIHRvIGNsZWFuIHVwIHRlbXBvcmFyeSBmaWxlcyBvcgorb3RoZXIgd29yay1pbi1wcm9ncmVzcyB3aGVuIHdlIGRpZSB1bmV4cGVjdGVkbHkuIEZvciBtdWx0aXBsZSBwaWVjZXMgb2YKK2NvZGUgdG8gZG8gdGhpcyB3aXRob3V0IGNvbmZsaWN0aW5nLCBlYWNoIHBpZWNlIG9mIGNvZGUgbXVzdCByZW1lbWJlcgordGhlIG9sZCB2YWx1ZSBvZiB0aGUgaGFuZGxlciBhbmQgcmVzdG9yZSBpdCBlaXRoZXIgd2hlbjoKKworICAxLiBUaGUgd29yay1pbi1wcm9ncmVzcyBpcyBmaW5pc2hlZCwgYW5kIHRoZSBoYW5kbGVyIGlzIG5vIGxvbmdlcgorICAgICBuZWNlc3NhcnkuIFRoZSBoYW5kbGVyIHNob3VsZCByZXZlcnQgdG8gdGhlIG9yaWdpbmFsIGJlaGF2aW9yCisgICAgIChlaXRoZXIgYW5vdGhlciBoYW5kbGVyLCBTSUdfREZMLCBvciBTSUdfSUdOKS4KKworICAyLiBUaGUgc2lnbmFsIGlzIHJlY2VpdmVkLiBXZSBzaG91bGQgdGhlbiBkbyBvdXIgY2xlYW51cCwgdGhlbiBjaGFpbgorICAgICB0byB0aGUgbmV4dCBoYW5kbGVyIChvciBkaWUgaWYgaXQgaXMgU0lHX0RGTCkuCisKK1NpZ2NoYWluIGlzIGEgdGlueSBsaWJyYXJ5IGZvciBrZWVwaW5nIGEgc3RhY2sgb2YgaGFuZGxlcnMuIFlvdXIgaGFuZGxlcgorYW5kIGluc3RhbGxhdGlvbiBjb2RlIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgdm9pZCBjbGVhbl9mb29fb25fc2lnbmFsKGludCBzaWcpCisgIHsKKwkgIGNsZWFuX2ZvbygpOworCSAgc2lnY2hhaW5fcG9wKHNpZyk7CisJICByYWlzZShzaWcpOworICB9CisKKyAgdm9pZCBvdGhlcl9mdW5jKCkKKyAgeworCSAgc2lnY2hhaW5fcHVzaF9jb21tb24oY2xlYW5fZm9vX29uX3NpZ25hbCk7CisJICBtZXNzX3VwX2ZvbygpOworCSAgY2xlYW5fZm9vKCk7CisgIH0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIYW5kbGVycyBhcmUgZ2l2ZW4gdGhlIHR5cGVkZWYgb2Ygc2lnY2hhaW5fZnVuLiBUaGlzIGlzIHRoZSBzYW1lIHR5cGUKK3RoYXQgaXMgZ2l2ZW4gdG8gc2lnbmFsKCkgb3Igc2lnYWN0aW9uKCkuIEl0IGlzIHBlcmZlY3RseSByZWFzb25hYmxlIHRvCitwdXNoIFNJR19ERkwgb3IgU0lHX0lHTiBvbnRvIHRoZSBzdGFjay4KKworWW91IGNhbiBzaWdjaGFpbl9wdXNoIGFuZCBzaWdjaGFpbl9wb3AgaW5kaXZpZHVhbCBzaWduYWxzLiBGb3IKK2NvbnZlbmllbmNlLCBzaWdjaGFpbl9wdXNoX2NvbW1vbiB3aWxsIHB1c2ggdGhlIGhhbmRsZXIgb250byB0aGUgc3RhY2sKK2ZvciBtYW55IGNvbW1vbiBzaWduYWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN0cmJ1Zi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc3RyYnVmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWE4YmYzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN0cmJ1Zi50eHQKQEAgLTAsMCArMSwyODggQEAKK3N0cmJ1ZiBBUEkKKz09PT09PT09PT0KKworc3RyYnVmJ3MgYXJlIG1lYW50IHRvIGJlIHVzZWQgd2l0aCBhbGwgdGhlIHVzdWFsIEMgc3RyaW5nIGFuZCBtZW1vcnkKK0FQSXMuIEdpdmVuIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGlzIGtub3duLCBpdCdzIG9mdGVuIGJldHRlciB0bwordXNlIHRoZSBtZW0qIGZ1bmN0aW9ucyB0aGFuIGEgc3RyKiBvbmUgKG1lbWNociB2cy4gc3RyY2hyIGUuZy4pLgorVGhvdWdoLCBvbmUgaGFzIHRvIGJlIGNhcmVmdWwgYWJvdXQgdGhlIGZhY3QgdGhhdCBzdHIqIGZ1bmN0aW9ucyBvZnRlbgorc3RvcCBvbiBOVUxzIGFuZCB0aGF0IHN0cmJ1ZnMgbWF5IGhhdmUgZW1iZWRkZWQgTlVMcy4KKworQW4gc3RyYnVmIGlzIE5VTCB0ZXJtaW5hdGVkIGZvciBjb252ZW5pZW5jZSwgYnV0IG5vIGZ1bmN0aW9uIGluIHRoZQorc3RyYnVmIEFQSSBhY3R1YWxseSByZWxpZXMgb24gdGhlIHN0cmluZyBiZWluZyBmcmVlIG9mIE5VTHMuCisKK3N0cmJ1ZnMgaGFzIHNvbWUgaW52YXJpYW50cyB0aGF0IGFyZSB2ZXJ5IGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQ6CisKKy4gVGhlIGBidWZgIG1lbWJlciBpcyBuZXZlciBOVUxMLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiBhbnkgdXN1YWwgQworc3RyaW5nIG9wZXJhdGlvbnMgc2FmZWx5LiBzdHJidWYncyBfaGF2ZV8gdG8gYmUgaW5pdGlhbGl6ZWQgZWl0aGVyIGJ5Citgc3RyYnVmX2luaXQoKWAgb3IgYnkgYD0gU1RSQlVGX0lOSVRgIGJlZm9yZSB0aGUgaW52YXJpYW50cywgdGhvdWdoLgorKworRG8gKm5vdCogYXNzdW1lIGFueXRoaW5nIG9uIHdoYXQgYGJ1ZmAgcmVhbGx5IGlzIChlLmcuIGlmIGl0IGlzCithbGxvY2F0ZWQgbWVtb3J5IG9yIG5vdCksIHVzZSBgc3RyYnVmX2RldGFjaCgpYCB0byB1bndyYXAgYSBtZW1vcnkKK2J1ZmZlciBmcm9tIGl0cyBzdHJidWYgc2hlbGwgaW4gYSBzYWZlIHdheS4gVGhhdCBpcyB0aGUgc29sZSBzdXBwb3J0ZWQKK3dheS4gVGhpcyB3aWxsIGdpdmUgeW91IGEgbWFsbG9jZWQgYnVmZmVyIHRoYXQgeW91IGNhbiBsYXRlciBgZnJlZSgpYC4KKysKK0hvd2V2ZXIsIGl0IGlzIHRvdGFsbHkgc2FmZSB0byBtb2RpZnkgYW55dGhpbmcgaW4gdGhlIHN0cmluZyBwb2ludGVkIGJ5Cit0aGUgYGJ1ZmAgbWVtYmVyLCBiZXR3ZWVuIHRoZSBpbmRpY2VzIGAwYCBhbmQgYGxlbi0xYCAoaW5jbHVzaXZlKS4KKworLiBUaGUgYGJ1ZmAgbWVtYmVyIGlzIGEgYnl0ZSBhcnJheSB0aGF0IGhhcyBhdCBsZWFzdCBgbGVuICsgMWAgYnl0ZXMKKyAgYWxsb2NhdGVkLiBUaGUgZXh0cmEgYnl0ZSBpcyB1c2VkIHRvIHN0b3JlIGEgYCdcMCdgLCBhbGxvd2luZyB0aGUKKyAgYGJ1ZmAgbWVtYmVyIHRvIGJlIGEgdmFsaWQgQy1zdHJpbmcuIEV2ZXJ5IHN0cmJ1ZiBmdW5jdGlvbiBlbnN1cmUgdGhpcworICBpbnZhcmlhbnQgaXMgcHJlc2VydmVkLgorKworTk9URTogSXQgaXMgT0sgdG8gInBsYXkiIHdpdGggdGhlIGJ1ZmZlciBkaXJlY3RseSBpZiB5b3Ugd29yayBpdCB0aGlzCisgICAgICB3YXk6CisrCistLS0tCitzdHJidWZfZ3JvdyhzYiwgU09NRV9TSVpFKTsgPDE+CitzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgU09NRV9PVEhFUl9TSVpFKTsKKy0tLS0KKzwxPiBIZXJlLCB0aGUgbWVtb3J5IGFycmF5IHN0YXJ0aW5nIGF0IGBzYi0+YnVmYCwgYW5kIG9mIGxlbmd0aAorYHN0cmJ1Zl9hdmFpbChzYilgIGlzIGFsbCB5b3VycywgYW5kIHlvdSBjYW4gYmUgc3VyZSB0aGF0Citgc3RyYnVmX2F2YWlsKHNiKWAgaXMgYXQgbGVhc3QgYFNPTUVfU0laRWAuCisrCitOT1RFOiBgU09NRV9PVEhFUl9TSVpFYCBtdXN0IGJlIHNtYWxsZXIgb3IgZXF1YWwgdG8gYHN0cmJ1Zl9hdmFpbChzYilgLgorKworRG9pbmcgc28gaXMgc2FmZSwgdGhvdWdoIGlmIGl0IGhhcyB0byBiZSBkb25lIGluIG1hbnkgcGxhY2VzLCBhZGRpbmcgdGhlCittaXNzaW5nIEFQSSB0byB0aGUgc3RyYnVmIG1vZHVsZSBpcyB0aGUgd2F5IHRvIGdvLgorKworV0FSTklORzogRG8gX25vdF8gYXNzdW1lIHRoYXQgdGhlIGFyZWEgdGhhdCBpcyB5b3VycyBpcyBvZiBzaXplIGBhbGxvYworLSAxYCBldmVuIGlmIGl0J3MgdHJ1ZSBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gQWxsb2MgaXMgc29tZWhvdyBhCisicHJpdmF0ZSIgbWVtYmVyIHRoYXQgc2hvdWxkIG5vdCBiZSBtZXNzZWQgd2l0aC4gVXNlIGBzdHJidWZfYXZhaWwoKWAKK2luc3RlYWQuCisKK0RhdGEgc3RydWN0dXJlcworLS0tLS0tLS0tLS0tLS0tCisKKyogYHN0cnVjdCBzdHJidWZgCisKK1RoaXMgaXMgdGhlIHN0cmluZyBidWZmZXIgc3RydWN0dXJlLiBUaGUgYGxlbmAgbWVtYmVyIGNhbiBiZSB1c2VkIHRvCitkZXRlcm1pbmUgdGhlIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcsIGFuZCBgYnVmYCBtZW1iZXIgcHJvdmlkZXMgYWNjZXNzIHRvCit0aGUgc3RyaW5nIGl0c2VsZi4KKworRnVuY3Rpb25zCistLS0tLS0tLS0KKworKiBMaWZlIGN5Y2xlCisKK2BzdHJidWZfaW5pdGA6OgorCisJSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlLiBUaGUgc2Vjb25kIHBhcmFtZXRlciBjYW4gYmUgemVybyBvciBhIGJpZ2dlcgorCW51bWJlciB0byBhbGxvY2F0ZSBtZW1vcnksIGluIGNhc2UgeW91IHdhbnQgdG8gcHJldmVudCBmdXJ0aGVyIHJlYWxsb2NzLgorCitgc3RyYnVmX3JlbGVhc2VgOjoKKworCVJlbGVhc2UgYSBzdHJpbmcgYnVmZmVyIGFuZCB0aGUgbWVtb3J5IGl0IHVzZWQuIFlvdSBzaG91bGQgbm90IHVzZSB0aGUKKwlzdHJpbmcgYnVmZmVyIGFmdGVyIHVzaW5nIHRoaXMgZnVuY3Rpb24sIHVubGVzcyB5b3UgaW5pdGlhbGl6ZSBpdCBhZ2Fpbi4KKworYHN0cmJ1Zl9kZXRhY2hgOjoKKworCURldGFjaCB0aGUgc3RyaW5nIGZyb20gdGhlIHN0cmJ1ZiBhbmQgcmV0dXJucyBpdDsgeW91IG5vdyBvd24gdGhlCisJc3RvcmFnZSB0aGUgc3RyaW5nIG9jY3VwaWVzIGFuZCBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IGZyb20gdGhlbiBvbgorCXRvIHJlbGVhc2UgaXQgd2l0aCBgZnJlZSgzKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCBpdC4KKworYHN0cmJ1Zl9hdHRhY2hgOjoKKworCUF0dGFjaCBhIHN0cmluZyB0byBhIGJ1ZmZlci4gWW91IHNob3VsZCBzcGVjaWZ5IHRoZSBzdHJpbmcgdG8gYXR0YWNoLAorCXRoZSBjdXJyZW50IGxlbmd0aCBvZiB0aGUgc3RyaW5nIGFuZCB0aGUgYW1vdW50IG9mIGFsbG9jYXRlZCBtZW1vcnkuCisJVGhlIGFtb3VudCBtdXN0IGJlIGxhcmdlciB0aGFuIHRoZSBzdHJpbmcgbGVuZ3RoLCBiZWNhdXNlIHRoZSBzdHJpbmcgeW91CisJcGFzcyBpcyBzdXBwb3NlZCB0byBiZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4gIFRoaXMgc3RyaW5nIF9tdXN0XyBiZQorCW1hbGxvYygpZWQsIGFuZCBhZnRlciBhdHRhY2hpbmcsIHRoZSBwb2ludGVyIGNhbm5vdCBiZSByZWxpZWQgdXBvbgorCWFueW1vcmUsIGFuZCBuZWl0aGVyIGJlIGZyZWUoKWQgZGlyZWN0bHkuCisKK2BzdHJidWZfc3dhcGA6OgorCisJU3dhcCB0aGUgY29udGVudHMgb2YgdHdvIHN0cmluZyBidWZmZXJzLgorCisqIFJlbGF0ZWQgdG8gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgorCitgc3RyYnVmX2F2YWlsYDo6CisKKwlEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgYnV0IHVudXNlZCBtZW1vcnkuCisKK2BzdHJidWZfZ3Jvd2A6OgorCisJRW5zdXJlIHRoYXQgYXQgbGVhc3QgdGhpcyBhbW91bnQgb2YgdW51c2VkIG1lbW9yeSBpcyBhdmFpbGFibGUgYWZ0ZXIKKwlgbGVuYC4gVGhpcyBpcyB1c2VkIHdoZW4geW91IGtub3cgYSB0eXBpY2FsIHNpemUgZm9yIHdoYXQgeW91IHdpbGwgYWRkCisJYW5kIHdhbnQgdG8gYXZvaWQgcmVwZXRpdGl2ZSBhdXRvbWF0aWMgcmVzaXppbmcgb2YgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorCVRoaXMgaXMgbmV2ZXIgYSBuZWVkZWQgb3BlcmF0aW9uLCBidXQgY2FuIGJlIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSBpbgorCXNvbWUgY2FzZXMuCisKK2BzdHJidWZfc2V0bGVuYDo6CisKKwlTZXQgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIHRvIGEgZ2l2ZW4gdmFsdWUuIFRoaXMgZnVuY3Rpb24gZG9lcyAqbm90KgorCWFsbG9jYXRlIG5ldyBtZW1vcnksIHNvIHlvdSBzaG91bGQgbm90IHBlcmZvcm0gYSBgc3RyYnVmX3NldGxlbigpYCB0byBhCisJbGVuZ3RoIHRoYXQgaXMgbGFyZ2VyIHRoYW4gYGxlbiArIHN0cmJ1Zl9hdmFpbCgpYC4gYHN0cmJ1Zl9zZXRsZW4oKWAgaXMKKwlqdXN0IG1lYW50IGFzIGEgJ3BsZWFzZSBmaXggaW52YXJpYW50cyBmcm9tIHRoaXMgc3RyYnVmIEkganVzdCBtZXNzZWQKKwl3aXRoJy4KKworYHN0cmJ1Zl9yZXNldGA6OgorCisJRW1wdHkgdGhlIGJ1ZmZlciBieSBzZXR0aW5nIHRoZSBzaXplIG9mIGl0IHRvIHplcm8uCisKKyogUmVsYXRlZCB0byB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlcgorCitgc3RyYnVmX3J0cmltYDo6CisKKwlTdHJpcCB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZy4KKworYHN0cmJ1Zl9jbXBgOjoKKworCUNvbXBhcmUgdHdvIGJ1ZmZlcnMuIFJldHVybnMgYW4gaW50ZWdlciBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyCisJdGhhbiB6ZXJvIGlmIHRoZSBmaXJzdCBidWZmZXIgaXMgZm91bmQsIHJlc3BlY3RpdmVseSwgdG8gYmUgbGVzcyB0aGFuLAorCXRvIG1hdGNoLCBvciBiZSBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBidWZmZXIuCisKKyogQWRkaW5nIGRhdGEgdG8gdGhlIGJ1ZmZlcgorCitOT1RFOiBBbGwgb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIHNlY3Rpb24gd2lsbCBncm93IHRoZSBidWZmZXIgYXMgbmVjZXNzYXJ5LgorSWYgdGhleSBmYWlsIGZvciBzb21lIHJlYXNvbiBvdGhlciB0aGFuIG1lbW9yeSBzaG9ydGFnZSBhbmQgdGhlIGJ1ZmZlciBoYWRuJ3QKK2JlZW4gYWxsb2NhdGVkIGJlZm9yZSAoaS5lLiB0aGUgYHN0cnVjdCBzdHJidWZgIHdhcyBzZXQgdG8gYFNUUkJVRl9JTklUYCksCit0aGVuIHRoZXkgd2lsbCBmcmVlKCkgaXQuCisKK2BzdHJidWZfYWRkY2hgOjoKKworCUFkZCBhIHNpbmdsZSBjaGFyYWN0ZXIgdG8gdGhlIGJ1ZmZlci4KKworYHN0cmJ1Zl9pbnNlcnRgOjoKKworCUluc2VydCBkYXRhIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLiBUaGUgcmVtYWluaW5nIGNvbnRlbnRzCisJd2lsbCBiZSBzaGlmdGVkLCBub3Qgb3ZlcndyaXR0ZW4uCisKK2BzdHJidWZfcmVtb3ZlYDo6CisKKwlSZW1vdmUgZ2l2ZW4gYW1vdW50IG9mIGRhdGEgZnJvbSBhIGdpdmVuIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIuCisKK2BzdHJidWZfc3BsaWNlYDo6CisKKwlSZW1vdmUgdGhlIGJ5dGVzIGJldHdlZW4gYHBvcy4ucG9zK2xlbmAgYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGUgZ2l2ZW4KKwlkYXRhLgorCitgc3RyYnVmX2FkZGA6OgorCisJQWRkIGRhdGEgb2YgZ2l2ZW4gbGVuZ3RoIHRvIHRoZSBidWZmZXIuCisKK2BzdHJidWZfYWRkc3RyYDo6CisKK0FkZCBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgYnVmZmVyLgorKworTk9URTogVGhpcyBmdW5jdGlvbiB3aWxsICphbHdheXMqIGJlIGltcGxlbWVudGVkIGFzIGFuIGlubGluZSBvciBhIG1hY3JvCit0aGF0IGV4cGFuZHMgdG86CisrCistLS0tCitzdHJidWZfYWRkKC4uLiwgcywgc3RybGVuKHMpKTsKKy0tLS0KKysKK01lYW5pbmcgdGhhdCB0aGlzIGlzIGVmZmljaWVudCB0byB3cml0ZSB0aGluZ3MgbGlrZToKKysKKy0tLS0KK3N0cmJ1Zl9hZGRzdHIoc2IsICJpbW1lZGlhdGUgc3RyaW5nIik7CistLS0tCisKK2BzdHJidWZfYWRkYnVmYDo6CisKKwlDb3B5IHRoZSBjb250ZW50cyBvZiBhbiBvdGhlciBidWZmZXIgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBvbmUuCisKK2BzdHJidWZfYWRkZHVwYDo6CisKKwlDb3B5IHBhcnQgb2YgdGhlIGJ1ZmZlciBmcm9tIGEgZ2l2ZW4gcG9zaXRpb24gdGlsbCBhIGdpdmVuIGxlbmd0aCB0byB0aGUKKwllbmQgb2YgdGhlIGJ1ZmZlci4KKworYHN0cmJ1Zl9leHBhbmRgOjoKKworCVRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZXhwYW5kIGEgZm9ybWF0IHN0cmluZyBjb250YWluaW5nCisJcGxhY2Vob2xkZXJzLiBUbyB0aGF0IGVuZCwgaXQgcGFyc2VzIHRoZSBzdHJpbmcgYW5kIGNhbGxzIHRoZSBzcGVjaWZpZWQKKwlmdW5jdGlvbiBmb3IgZXZlcnkgcGVyY2VudCBzaWduIGZvdW5kLgorKworVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGdpdmVuIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBgJWAKK2FuZCBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBzdHJidWYuICBJdCBpcyBleHBlY3RlZCB0byBhZGQgdGhlIGV4cGFuZGVkCit2ZXJzaW9uIG9mIHRoZSBwbGFjZWhvbGRlciB0byB0aGUgc3RyYnVmLCBlLmcuIHRvIGFkZCBhIG5ld2xpbmUKK2NoYXJhY3RlciBpZiB0aGUgbGV0dGVyIGBuYCBhcHBlYXJzIGFmdGVyIGEgYCVgLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMKK3RoZSBsZW5ndGggb2YgdGhlIHBsYWNlaG9sZGVyIHJlY29nbml6ZWQgYW5kIGBzdHJidWZfZXhwYW5kKClgIHNraXBzCitvdmVyIGl0LgorKworVGhlIGZvcm1hdCBgJSVgIGlzIGF1dG9tYXRpY2FsbHkgZXhwYW5kZWQgdG8gYSBzaW5nbGUgYCVgIGFzIGEgcXVvdGluZworbWVjaGFuaXNtOyBjYWxsZXJzIGRvIG5vdCBuZWVkIHRvIGhhbmRsZSB0aGUgYCVgIHBsYWNlaG9sZGVyIHRoZW1zZWx2ZXMsCithbmQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGludm9rZWQgZm9yIHRoaXMgcGxhY2Vob2xkZXIuCisrCitBbGwgb3RoZXIgY2hhcmFjdGVycyAobm9uLXBlcmNlbnQgYW5kIG5vdCBza2lwcGVkIG9uZXMpIGFyZSBjb3BpZWQKK3ZlcmJhdGltIHRvIHRoZSBzdHJidWYuICBJZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgemVybywgbWVhbmluZyB0aGF0IHRoZQorcGxhY2Vob2xkZXIgaXMgdW5rbm93biwgdGhlbiB0aGUgcGVyY2VudCBzaWduIGlzIGNvcGllZCwgdG9vLgorKworSW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSBjYWNoaW5nIGFuZCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGdpdmUKK3BhcmFtZXRlcnMgdG8gdGhlIGNhbGxiYWNrLCBgc3RyYnVmX2V4cGFuZCgpYCBwYXNzZXMgYSBjb250ZXh0IHBvaW50ZXIsCit3aGljaCBjYW4gYmUgdXNlZCBieSB0aGUgcHJvZ3JhbW1lciBvZiB0aGUgY2FsbGJhY2sgYXMgc2hlIHNlZXMgZml0LgorCitgc3RyYnVmX2V4cGFuZF9kaWN0X2NiYDo6CisKKwlVc2VkIGFzIGNhbGxiYWNrIGZvciBgc3RyYnVmX2V4cGFuZCgpYCwgZXhwZWN0cyBhbiBhcnJheSBvZgorCXN0cnVjdCBzdHJidWZfZXhwYW5kX2RpY3RfZW50cnkgYXMgY29udGV4dCwgaS5lLiBwYWlycyBvZgorCXBsYWNlaG9sZGVyIGFuZCByZXBsYWNlbWVudCBzdHJpbmcuICBUaGUgYXJyYXkgbmVlZHMgdG8gYmUKKwl0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggcGxhY2Vob2xkZXIgc2V0IHRvIE5VTEwuCisKK2BzdHJidWZfYWRkYnVmX3BlcmNlbnRxdW90ZWA6OgorCisJQXBwZW5kIHRoZSBjb250ZW50cyBvZiBvbmUgc3RyYnVmIHRvIGFub3RoZXIsIHF1b3RpbmcgYW55CisJcGVyY2VudCBzaWducyAoIiUiKSBpbnRvIGRvdWJsZS1wZXJjZW50cyAoIiUlIikgaW4gdGhlCisJZGVzdGluYXRpb24uIFRoaXMgaXMgdXNlZnVsIGZvciBsaXRlcmFsIGRhdGEgdG8gYmUgZmVkIHRvIGVpdGhlcgorCXN0cmJ1Zl9leHBhbmQgb3IgdG8gdGhlICpwcmludGYgZmFtaWx5IG9mIGZ1bmN0aW9ucy4KKworYHN0cmJ1Zl9hZGRmYDo6CisKKwlBZGQgYSBmb3JtYXR0ZWQgc3RyaW5nIHRvIHRoZSBidWZmZXIuCisKK2BzdHJidWZfZnJlYWRgOjoKKworCVJlYWQgYSBnaXZlbiBzaXplIG9mIGRhdGEgZnJvbSBhIEZJTEUqIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKysKK05PVEU6IFRoZSBidWZmZXIgaXMgcmV3b3VuZCBpZiB0aGUgcmVhZCBmYWlscy4gSWYgLTEgaXMgcmV0dXJuZWQsCitgZXJybm9gIG11c3QgYmUgY29uc3VsdGVkLCBsaWtlIHlvdSB3b3VsZCBkbyBmb3IgYHJlYWQoMylgLgorYHN0cmJ1Zl9yZWFkKClgLCBgc3RyYnVmX3JlYWRfZmlsZSgpYCBhbmQgYHN0cmJ1Zl9nZXRsaW5lKClgIGhhcyB0aGUKK3NhbWUgYmVoYXZpb3VyIGFzIHdlbGwuCisKK2BzdHJidWZfcmVhZGA6OgorCisJUmVhZCB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIGRlc2NyaXB0b3IuIFRoZSB0aGlyZCBhcmd1bWVudCBjYW4gYmUKKwl1c2VkIHRvIGdpdmUgYSBoaW50IGFib3V0IHRoZSBmaWxlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLgorCitgc3RyYnVmX3JlYWRfZmlsZWA6OgorCisJUmVhZCB0aGUgY29udGVudHMgb2YgYSBmaWxlLCBzcGVjaWZpZWQgYnkgaXRzIHBhdGguIFRoZSB0aGlyZCBhcmd1bWVudAorCWNhbiBiZSB1c2VkIHRvIGdpdmUgYSBoaW50IGFib3V0IHRoZSBmaWxlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLgorCitgc3RyYnVmX3JlYWRsaW5rYDo6CisKKwlSZWFkIHRoZSB0YXJnZXQgb2YgYSBzeW1ib2xpYyBsaW5rLCBzcGVjaWZpZWQgYnkgaXRzIHBhdGguICBUaGUgdGhpcmQKKwlhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBnaXZlIGEgaGludCBhYm91dCB0aGUgc2l6ZSwgdG8gYXZvaWQgcmVhbGxvY3MuCisKK2BzdHJidWZfZ2V0bGluZWA6OgorCisJUmVhZCBhIGxpbmUgZnJvbSBhIEZJTEUgKiwgb3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nIGNvbnRlbnRzCisJb2YgdGhlIHN0cmJ1Zi4gVGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGxpbmUKKwl0ZXJtaW5hdG9yIGNoYXJhY3RlciwgdHlwaWNhbGx5IGAnXG4nYC4KKwlSZWFkaW5nIHN0b3BzIGFmdGVyIHRoZSB0ZXJtaW5hdG9yIG9yIGF0IEVPRi4gIFRoZSB0ZXJtaW5hdG9yCisJaXMgcmVtb3ZlZCBmcm9tIHRoZSBidWZmZXIgYmVmb3JlIHJldHVybmluZy4gIFJldHVybnMgMCB1bmxlc3MKKwl0aGVyZSB3YXMgbm90aGluZyBsZWZ0IGJlZm9yZSBFT0YsIGluIHdoaWNoIGNhc2UgaXQgcmV0dXJucyBgRU9GYC4KKworYHN0cmJ1Zl9nZXR3aG9sZWxpbmVgOjoKKworCUxpa2UgYHN0cmJ1Zl9nZXRsaW5lYCwgYnV0IGtlZXBzIHRoZSB0cmFpbGluZyB0ZXJtaW5hdG9yIChpZgorCWFueSkgaW4gdGhlIGJ1ZmZlci4KKworYHN0cmJ1Zl9nZXR3aG9sZWxpbmVfZmRgOjoKKworCUxpa2UgYHN0cmJ1Zl9nZXR3aG9sZWxpbmVgLCBidXQgb3BlcmF0ZXMgb24gYSBmaWxlIGRlc2NyaXB0b3IuCisJSXQgcmVhZHMgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUsIHNvIGl0IGlzIHZlcnkgc2xvdy4gIERvIG5vdAorCXVzZSBpdCB1bmxlc3MgeW91IG5lZWQgdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIGZpbGUKKwlkZXNjcmlwdG9yLgorCitgc3RyaXBzcGFjZWA6OgorCisJU3RyaXAgd2hpdGVzcGFjZSBmcm9tIGEgYnVmZmVyLiBUaGUgc2Vjb25kIHBhcmFtZXRlciBjb250cm9scyBpZgorCWNvbW1lbnRzIGFyZSBjb25zaWRlcmVkIGNvbnRlbnRzIHRvIGJlIHJlbW92ZWQgb3Igbm90LgorCitgbGF1bmNoX2VkaXRvcmA6OgorCisJTGF1bmNoIHRoZSB1c2VyIHByZWZlcnJlZCBlZGl0b3IgdG8gZWRpdCBhIGZpbGUgYW5kIGZpbGwgdGhlIGJ1ZmZlcgorCXdpdGggdGhlIGZpbGUncyBjb250ZW50cyB1cG9uIHRoZSB1c2VyIGNvbXBsZXRpbmcgdGhlaXIgZWRpdGluZy4gVGhlCisJdGhpcmQgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBlbnZpcm9ubWVudCB3aGljaCB0aGUgZWRpdG9yIGlzCisJcnVuIGluLiBJZiB0aGUgYnVmZmVyIGlzIE5VTEwgdGhlIGVkaXRvciBpcyBsYXVuY2hlZCBhcyB1c3VhbCBidXQgdGhlCisJZmlsZSdzIGNvbnRlbnRzIGFyZSBub3QgcmVhZCBpbnRvIHRoZSBidWZmZXIgdXBvbiBjb21wbGV0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN0cmluZy1saXN0LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdHJpbmctbGlzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkN2EyYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdHJpbmctbGlzdC50eHQKQEAgLTAsMCArMSwyMDMgQEAKK3N0cmluZy1saXN0IEFQSQorPT09PT09PT09PT09PT09CisKK1RoZSBzdHJpbmdfbGlzdCBBUEkgb2ZmZXJzIGEgZGF0YSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9ucyB0byBoYW5kbGUKK3NvcnRlZCBhbmQgdW5zb3J0ZWQgc3RyaW5nIGxpc3RzLiAgQSAic29ydGVkIiBsaXN0IGlzIG9uZSB3aG9zZQorZW50cmllcyBhcmUgc29ydGVkIGJ5IHN0cmluZyB2YWx1ZSBpbiBgc3RyY21wKClgIG9yZGVyLgorCitUaGUgJ3N0cmluZ19saXN0JyBzdHJ1Y3QgdXNlZCB0byBiZSBjYWxsZWQgJ3BhdGhfbGlzdCcsIGJ1dCB3YXMgcmVuYW1lZAorYmVjYXVzZSBpdCBpcyBub3Qgc3BlY2lmaWMgdG8gcGF0aHMuCisKK1RoZSBjYWxsZXI6CisKKy4gQWxsb2NhdGVzIGFuZCBjbGVhcnMgYSBgc3RydWN0IHN0cmluZ19saXN0YCB2YXJpYWJsZS4KKworLiBJbml0aWFsaXplcyB0aGUgbWVtYmVycy4gWW91IG1pZ2h0IHdhbnQgdG8gc2V0IHRoZSBmbGFnIGBzdHJkdXBfc3RyaW5nc2AKKyAgaWYgdGhlIHN0cmluZ3Mgc2hvdWxkIGJlIHN0cmR1cCgpZWQuIEZvciBleGFtcGxlLCB0aGlzIGlzIG5lY2Vzc2FyeQorICB3aGVuIHlvdSBhZGQgc29tZXRoaW5nIGxpa2UgZ2l0X3BhdGgoIi4uLiIpLCBzaW5jZSB0aGF0IGZ1bmN0aW9uIHJldHVybnMKKyAgYSBzdGF0aWMgYnVmZmVyIHRoYXQgd2lsbCBjaGFuZ2Ugd2l0aCB0aGUgbmV4dCBjYWxsIHRvIGdpdF9wYXRoKCkuCisrCitJZiB5b3UgbmVlZCBzb21ldGhpbmcgYWR2YW5jZWQsIHlvdSBjYW4gbWFudWFsbHkgbWFsbG9jKCkgdGhlIGBpdGVtc2AKK21lbWJlciAoeW91IG5lZWQgdGhpcyBpZiB5b3UgYWRkIHRoaW5ncyBsYXRlcikgYW5kIHlvdSBzaG91bGQgc2V0IHRoZQorYG5yYCBhbmQgYGFsbG9jYCBtZW1iZXJzIGluIHRoYXQgY2FzZSwgdG9vLgorCisuIEFkZHMgbmV3IGl0ZW1zIHRvIHRoZSBsaXN0LCB1c2luZyBgc3RyaW5nX2xpc3RfYXBwZW5kYCwKKyAgYHN0cmluZ19saXN0X2FwcGVuZF9ub2R1cGAsIGBzdHJpbmdfbGlzdF9pbnNlcnRgLAorICBgc3RyaW5nX2xpc3Rfc3BsaXRgLCBhbmQvb3IgYHN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlYC4KKworLiBDYW4gY2hlY2sgaWYgYSBzdHJpbmcgaXMgaW4gdGhlIGxpc3QgdXNpbmcgYHN0cmluZ19saXN0X2hhc19zdHJpbmdgIG9yCisgIGB1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nYCBhbmQgZ2V0IGl0IGZyb20gdGhlIGxpc3QgdXNpbmcKKyAgYHN0cmluZ19saXN0X2xvb2t1cGAgZm9yIHNvcnRlZCBsaXN0cy4KKworLiBDYW4gc29ydCBhbiB1bnNvcnRlZCBsaXN0IHVzaW5nIGBzb3J0X3N0cmluZ19saXN0YC4KKworLiBDYW4gcmVtb3ZlIGR1cGxpY2F0ZSBpdGVtcyBmcm9tIGEgc29ydGVkIGxpc3QgdXNpbmcKKyAgYHN0cmluZ19saXN0X3JlbW92ZV9kdXBsaWNhdGVzYC4KKworLiBDYW4gcmVtb3ZlIGluZGl2aWR1YWwgaXRlbXMgb2YgYW4gdW5zb3J0ZWQgbGlzdCB1c2luZworICBgdW5zb3J0ZWRfc3RyaW5nX2xpc3RfZGVsZXRlX2l0ZW1gLgorCisuIENhbiByZW1vdmUgaXRlbXMgbm90IG1hdGNoaW5nIGEgY3JpdGVyaW9uIGZyb20gYSBzb3J0ZWQgb3IgdW5zb3J0ZWQKKyAgbGlzdCB1c2luZyBgZmlsdGVyX3N0cmluZ19saXN0YC4KKworLiBGaW5hbGx5IGl0IHNob3VsZCBmcmVlIHRoZSBsaXN0IHVzaW5nIGBzdHJpbmdfbGlzdF9jbGVhcmAuCisKK0V4YW1wbGU6CisKKy0tLS0KK3N0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK2ludCBpOworCitzdHJpbmdfbGlzdF9hcHBlbmQoJmxpc3QsICJmb28iKTsKK3N0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgImJhciIpOworZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykKKwlwcmludGYoIiVzXG4iLCBsaXN0Lml0ZW1zW2ldLnN0cmluZykKKy0tLS0KKworTk9URTogSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gYnVpbGQgYW4gdW5zb3J0ZWQgbGlzdCBhbmQgc29ydCBpdAorYWZ0ZXJ3YXJkcywgaW5zdGVhZCBvZiBidWlsZGluZyBhIHNvcnRlZCBsaXN0IChgTyhuIGxvZyBuKWAgaW5zdGVhZCBvZgorYE8obl4yKWApLgorKworSG93ZXZlciwgaWYgeW91IHVzZSB0aGUgbGlzdCB0byBjaGVjayBpZiBhIGNlcnRhaW4gc3RyaW5nIHdhcyBhZGRlZAorYWxyZWFkeSwgeW91IHNob3VsZCBub3QgZG8gdGhhdCAodXNpbmcgdW5zb3J0ZWRfc3RyaW5nX2xpc3RfaGFzX3N0cmluZygpKSwKK2JlY2F1c2UgdGhlIGNvbXBsZXhpdHkgd291bGQgYmUgcXVhZHJhdGljIGFnYWluIChidXQgd2l0aCBhIHdvcnNlIGZhY3RvcikuCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKKyogR2VuZXJhbCBvbmVzICh3b3JrcyB3aXRoIHNvcnRlZCBhbmQgdW5zb3J0ZWQgbGlzdHMgYXMgd2VsbCkKKworYGZpbHRlcl9zdHJpbmdfbGlzdGA6OgorCisJQXBwbHkgYSBmdW5jdGlvbiB0byBlYWNoIGl0ZW0gaW4gYSBsaXN0LCByZXRhaW5pbmcgb25seSB0aGUKKwlpdGVtcyBmb3Igd2hpY2ggdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZS4gIElmIGZyZWVfdXRpbCBpcworCXRydWUsIGNhbGwgZnJlZSgpIG9uIHRoZSB1dGlsIG1lbWJlcnMgb2YgYW55IGl0ZW1zIHRoYXQgaGF2ZQorCXRvIGJlIGRlbGV0ZWQuICBQcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgdGhlIGl0ZW1zIHRoYXQgYXJlCisJcmV0YWluZWQuCisKK2BzdHJpbmdfbGlzdF9sb25nZXN0X3ByZWZpeGA6OgorCisJUmV0dXJuIHRoZSBsb25nZXN0IHN0cmluZyB3aXRoaW4gYSBzdHJpbmdfbGlzdCB0aGF0IGlzIGEKKwlwcmVmaXggKGluIHRoZSBzZW5zZSBvZiBwcmVmaXhjbXAoKSkgb2YgdGhlIHNwZWNpZmllZCBzdHJpbmcsCisJb3IgTlVMTCBpZiBubyBzdWNoIHByZWZpeCBleGlzdHMuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90CisJcmVxdWlyZSB0aGUgc3RyaW5nX2xpc3QgdG8gYmUgc29ydGVkIChpdCBkb2VzIGEgbGluZWFyCisJc2VhcmNoKS4KKworYHByaW50X3N0cmluZ19saXN0YDo6CisKKwlEdW1wIGEgc3RyaW5nX2xpc3QgdG8gc3Rkb3V0LCB1c2VmdWwgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEl0CisJY2FuIHRha2UgYW4gb3B0aW9uYWwgaGVhZGVyIGFyZ3VtZW50IGFuZCBpdCB3cml0ZXMgb3V0IHRoZQorCXN0cmluZy1wb2ludGVyIHBhaXJzIG9mIHRoZSBzdHJpbmdfbGlzdCwgZWFjaCBvbmUgaW4gaXRzIG93biBsaW5lLgorCitgc3RyaW5nX2xpc3RfY2xlYXJgOjoKKworCUZyZWUgYSBzdHJpbmdfbGlzdC4gVGhlIGBzdHJpbmdgIHBvaW50ZXIgb2YgdGhlIGl0ZW1zIHdpbGwgYmUgZnJlZWQgaW4KKwljYXNlIHRoZSBgc3RyZHVwX3N0cmluZ3NgIG1lbWJlciBvZiB0aGUgc3RyaW5nX2xpc3QgaXMgc2V0LiBUaGUgc2Vjb25kCisJcGFyYW1ldGVyIGNvbnRyb2xzIGlmIHRoZSBgdXRpbGAgcG9pbnRlciBvZiB0aGUgaXRlbXMgc2hvdWxkIGJlIGZyZWVkCisJb3Igbm90LgorCisqIEZ1bmN0aW9ucyBmb3Igc29ydGVkIGxpc3RzIG9ubHkKKworYHN0cmluZ19saXN0X2hhc19zdHJpbmdgOjoKKworCURldGVybWluZSBpZiB0aGUgc3RyaW5nX2xpc3QgaGFzIGEgZ2l2ZW4gc3RyaW5nIG9yIG5vdC4KKworYHN0cmluZ19saXN0X2luc2VydGA6OgorCisJSW5zZXJ0IGEgbmV3IGVsZW1lbnQgdG8gdGhlIHN0cmluZ19saXN0LiBUaGUgcmV0dXJuZWQgcG9pbnRlciBjYW4gYmUKKwloYW5keSBpZiB5b3Ugd2FudCB0byB3cml0ZSBzb21ldGhpbmcgdG8gdGhlIGB1dGlsYCBwb2ludGVyIG9mIHRoZQorCXN0cmluZ19saXN0X2l0ZW0gY29udGFpbmluZyB0aGUganVzdCBhZGRlZCBzdHJpbmcuIElmIHRoZSBnaXZlbgorCXN0cmluZyBhbHJlYWR5IGV4aXN0cyB0aGUgaW5zZXJ0aW9uIHdpbGwgYmUgc2tpcHBlZCBhbmQgdGhlCisJcG9pbnRlciB0byB0aGUgZXhpc3RpbmcgaXRlbSByZXR1cm5lZC4KKysKK1NpbmNlIHRoaXMgZnVuY3Rpb24gdXNlcyB4cmVhbGxvYygpICh3aGljaCBkaWUoKXMgaWYgaXQgZmFpbHMpIGlmIHRoZQorbGlzdCBuZWVkcyB0byBncm93LCBpdCBpcyBzYWZlIG5vdCB0byBjaGVjayB0aGUgcG9pbnRlci4gSS5lLiB5b3UgbWF5Cit3cml0ZSBgc3RyaW5nX2xpc3RfaW5zZXJ0KC4uLiktPnV0aWwgPSAuLi47YC4KKworYHN0cmluZ19saXN0X2xvb2t1cGA6OgorCisJTG9vayB1cCBhIGdpdmVuIHN0cmluZyBpbiB0aGUgc3RyaW5nX2xpc3QsIHJldHVybmluZyB0aGUgY29udGFpbmluZworCXN0cmluZ19saXN0X2l0ZW0uIElmIHRoZSBzdHJpbmcgaXMgbm90IGZvdW5kLCBOVUxMIGlzIHJldHVybmVkLgorCitgc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXNgOjoKKworCVJlbW92ZSBhbGwgYnV0IHRoZSBmaXJzdCBvZiBjb25zZWN1dGl2ZSBlbnRyaWVzIHRoYXQgaGF2ZSB0aGUKKwlzYW1lIHN0cmluZyB2YWx1ZS4gIElmIGZyZWVfdXRpbCBpcyB0cnVlLCBjYWxsIGZyZWUoKSBvbiB0aGUKKwl1dGlsIG1lbWJlcnMgb2YgYW55IGl0ZW1zIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLgorCisqIEZ1bmN0aW9ucyBmb3IgdW5zb3J0ZWQgbGlzdHMgb25seQorCitgc3RyaW5nX2xpc3RfYXBwZW5kYDo6CisKKwlBcHBlbmQgYSBuZXcgc3RyaW5nIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZ19saXN0LiAgSWYKKwlgc3RyZHVwX3N0cmluZ2AgaXMgc2V0LCB0aGVuIHRoZSBzdHJpbmcgYXJndW1lbnQgaXMgY29waWVkOworCW90aGVyd2lzZSB0aGUgbmV3IGBzdHJpbmdfbGlzdF9lbnRyeWAgcmVmZXJzIHRvIHRoZSBpbnB1dAorCXN0cmluZy4KKworYHN0cmluZ19saXN0X2FwcGVuZF9ub2R1cGA6OgorCisJQXBwZW5kIGEgbmV3IHN0cmluZyB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmdfbGlzdC4gIFRoZSBuZXcKKwlgc3RyaW5nX2xpc3RfZW50cnlgIGFsd2F5cyByZWZlcnMgdG8gdGhlIGlucHV0IHN0cmluZywgZXZlbiBpZgorCWBzdHJkdXBfc3RyaW5nYCBpcyBzZXQuICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGhhbmQKKwlvd25lcnNoaXAgb2YgYSBtYWxsb2MoKWVkIHN0cmluZyB0byBhIGBzdHJpbmdfbGlzdGAgdGhhdCBoYXMKKwlgc3RyZHVwX3N0cmluZ2Agc2V0LgorCitgc29ydF9zdHJpbmdfbGlzdGA6OgorCisJU29ydCB0aGUgbGlzdCdzIGVudHJpZXMgYnkgc3RyaW5nIHZhbHVlIGluIGBzdHJjbXAoKWAgb3JkZXIuCisKK2B1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nYDo6CisKKwlJdCdzIGxpa2UgYHN0cmluZ19saXN0X2hhc19zdHJpbmcoKWAgYnV0IGZvciB1bnNvcnRlZCBsaXN0cy4KKworYHVuc29ydGVkX3N0cmluZ19saXN0X2xvb2t1cGA6OgorCisJSXQncyBsaWtlIGBzdHJpbmdfbGlzdF9sb29rdXAoKWAgYnV0IGZvciB1bnNvcnRlZCBsaXN0cy4KKysKK1RoZSBhYm92ZSB0d28gZnVuY3Rpb25zIG5lZWQgdG8gbG9vayB0aHJvdWdoIGFsbCBpdGVtcywgYXMgb3Bwb3NlZCB0byB0aGVpcgorY291bnRlcnBhcnQgZm9yIHNvcnRlZCBsaXN0cywgd2hpY2ggcGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoLgorCitgdW5zb3J0ZWRfc3RyaW5nX2xpc3RfZGVsZXRlX2l0ZW1gOjoKKworCVJlbW92ZSBhbiBpdGVtIGZyb20gYSBzdHJpbmdfbGlzdC4gVGhlIGBzdHJpbmdgIHBvaW50ZXIgb2YgdGhlIGl0ZW1zCisJd2lsbCBiZSBmcmVlZCBpbiBjYXNlIHRoZSBgc3RyZHVwX3N0cmluZ3NgIG1lbWJlciBvZiB0aGUgc3RyaW5nX2xpc3QKKwlpcyBzZXQuIFRoZSB0aGlyZCBwYXJhbWV0ZXIgY29udHJvbHMgaWYgdGhlIGB1dGlsYCBwb2ludGVyIG9mIHRoZQorCWl0ZW1zIHNob3VsZCBiZSBmcmVlZCBvciBub3QuCisKK2BzdHJpbmdfbGlzdF9zcGxpdGA6OgorYHN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlYDo6CisKKwlTcGxpdCBhIHN0cmluZyBpbnRvIHN1YnN0cmluZ3Mgb24gYSBkZWxpbWl0ZXIgY2hhcmFjdGVyIGFuZAorCWFwcGVuZCB0aGUgc3Vic3RyaW5ncyB0byBhIGBzdHJpbmdfbGlzdGAuICBJZiBgbWF4c3BsaXRgIGlzCisJbm9uLW5lZ2F0aXZlLCB0aGVuIHNwbGl0IGF0IG1vc3QgYG1heHNwbGl0YCB0aW1lcy4gIFJldHVybiB0aGUKKwludW1iZXIgb2Ygc3Vic3RyaW5ncyBhcHBlbmRlZCB0byB0aGUgbGlzdC4KKysKK2BzdHJpbmdfbGlzdF9zcGxpdGAgcmVxdWlyZXMgYSBgc3RyaW5nX2xpc3RgIHRoYXQgaGFzIGBzdHJkdXBfc3RyaW5nc2AKK3NldCB0byB0cnVlOyBpdCBsZWF2ZXMgdGhlIGlucHV0IHN0cmluZyB1bnRvdWNoZWQgYW5kIG1ha2VzIGNvcGllcyBvZgordGhlIHN1YnN0cmluZ3MgaW4gbmV3bHktYWxsb2NhdGVkIG1lbW9yeS4KK2BzdHJpbmdfbGlzdF9zcGxpdF9pbl9wbGFjZWAgcmVxdWlyZXMgYSBgc3RyaW5nX2xpc3RgIHRoYXQgaGFzCitgc3RyZHVwX3N0cmluZ3NgIHNldCB0byBmYWxzZTsgaXQgc3BsaXRzIHRoZSBpbnB1dCBzdHJpbmcgaW4gcGxhY2UsCitvdmVyd3JpdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlcnMgd2l0aCBOVUxzIGFuZCBjcmVhdGluZyBuZXcKK3N0cmluZ19saXN0X2l0ZW1zIHRoYXQgcG9pbnQgaW50byB0aGUgb3JpZ2luYWwgc3RyaW5nICh0aGUgb3JpZ2luYWwKK3N0cmluZyBtdXN0IHRoZXJlZm9yZSBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQgd2hpbGUgdGhlIGBzdHJpbmdfbGlzdGAKK2lzIGluIHVzZSkuCisKKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworKiBgc3RydWN0IHN0cmluZ19saXN0X2l0ZW1gCisKK1JlcHJlc2VudHMgYW4gaXRlbSBvZiB0aGUgbGlzdC4gVGhlIGBzdHJpbmdgIG1lbWJlciBpcyBhIHBvaW50ZXIgdG8gdGhlCitzdHJpbmcsIGFuZCB5b3UgbWF5IHVzZSB0aGUgYHV0aWxgIG1lbWJlciBmb3IgYW55IHB1cnBvc2UsIGlmIHlvdSB3YW50LgorCisqIGBzdHJ1Y3Qgc3RyaW5nX2xpc3RgCisKK1JlcHJlc2VudHMgdGhlIGxpc3QgaXRzZWxmLgorCisuIFRoZSBhcnJheSBvZiBpdGVtcyBhcmUgYXZhaWxhYmxlIHZpYSB0aGUgYGl0ZW1zYCBtZW1iZXIuCisuIFRoZSBgbnJgIG1lbWJlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpbiB0aGUgbGlzdC4KKy4gVGhlIGBhbGxvY2AgbWVtYmVyIGlzIHVzZWQgdG8gYXZvaWQgcmVhbGxvY2F0aW5nIGF0IGV2ZXJ5IGluc2VydGlvbi4KKyAgWW91IHNob3VsZCBub3QgdGFtcGVyIHdpdGggaXQuCisuIFNldHRpbmcgdGhlIGBzdHJkdXBfc3RyaW5nc2AgbWVtYmVyIHRvIDEgd2lsbCBzdHJkdXAoKSB0aGUgc3RyaW5ncworICBiZWZvcmUgYWRkaW5nIHRoZW0sIHNlZSBhYm92ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmVlLXdhbGtpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyZWUtd2Fsa2luZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhZjM3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmVlLXdhbGtpbmcudHh0CkBAIC0wLDAgKzEsMTQ3IEBACit0cmVlIHdhbGtpbmcgQVBJCis9PT09PT09PT09PT09PT09CisKK1RoZSB0cmVlIHdhbGtpbmcgQVBJIGlzIHVzZWQgdG8gdHJhdmVyc2UgYW5kIGluc3BlY3QgdHJlZXMuCisKK0RhdGEgU3RydWN0dXJlcworLS0tLS0tLS0tLS0tLS0tCisKK2BzdHJ1Y3QgbmFtZV9lbnRyeWA6OgorCisJQW4gZW50cnkgaW4gYSB0cmVlLiBFYWNoIGVudHJ5IGhhcyBhIHNoYTEgaWRlbnRpZmllciwgcGF0aG5hbWUsIGFuZAorCW1vZGUuCisKK2BzdHJ1Y3QgdHJlZV9kZXNjYDo6CisKKwlBIHNlbWktb3BhcXVlIGRhdGEgc3RydWN0dXJlIHVzZWQgdG8gbWFpbnRhaW4gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisJd2Fsay4KKysKKyogYGJ1ZmZlcmAgaXMgYSBwb2ludGVyIGludG8gdGhlIG1lbW9yeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZS4gSXQgYWx3YXlzCitwb2ludHMgYXQgdGhlIGN1cnJlbnQgZW50cnkgYmVpbmcgdmlzaXRlZC4KKworKiBgc2l6ZWAgY291bnRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiB0aGUgYGJ1ZmZlcmAuCisKKyogYGVudHJ5YCBwb2ludHMgdG8gdGhlIGN1cnJlbnQgZW50cnkgYmVpbmcgdmlzaXRlZC4KKworYHN0cnVjdCB0cmF2ZXJzZV9pbmZvYDo6CisKKwlBIHN0cnVjdHVyZSB1c2VkIHRvIG1haW50YWluIHRoZSBzdGF0ZSBvZiBhIHRyYXZlcnNhbC4KKysKKyogYHByZXZgIHBvaW50cyB0byB0aGUgdHJhdmVyc2VfaW5mbyB3aGljaCB3YXMgdXNlZCB0byBkZXNjZW5kIGludG8gdGhlCitjdXJyZW50IHRyZWUuIElmIHRoaXMgaXMgdGhlIHRvcC1sZXZlbCB0cmVlIGBwcmV2YCB3aWxsIHBvaW50IHRvCithIGR1bW15IHRyYXZlcnNlX2luZm8uCisKKyogYG5hbWVgIGlzIHRoZSBlbnRyeSBmb3IgdGhlIGN1cnJlbnQgdHJlZSAoaWYgdGhlIHRyZWUgaXMgYSBzdWJ0cmVlKS4KKworKiBgcGF0aGxlbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgZnVsbCBwYXRoIGZvciB0aGUgY3VycmVudCB0cmVlLgorCisqIGBjb25mbGljdHNgIGNhbiBiZSB1c2VkIGJ5IGNhbGxiYWNrcyB0byBtYWludGFpbiBkaXJlY3RvcnktZmlsZSBjb25mbGljdHMuCisKKyogYGZuYCBpcyBhIGNhbGxiYWNrIGNhbGxlZCBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgdHJlZS4gU2VlIFRyYXZlcnNpbmcgZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorCisqIGBkYXRhYCBjYW4gYmUgYW55dGhpbmcgdGhlIGBmbmAgY2FsbGJhY2sgd291bGQgd2FudCB0byB1c2UuCisKKyogYHNob3dfYWxsX2Vycm9yc2AgdGVsbHMgd2hldGhlciB0byBzdG9wIGF0IHRoZSBmaXJzdCBlcnJvciBvciBub3QuCisKK0luaXRpYWxpemluZworLS0tLS0tLS0tLS0tCisKK2Bpbml0X3RyZWVfZGVzY2A6OgorCisJSW5pdGlhbGl6ZSBhIGB0cmVlX2Rlc2NgIGFuZCBkZWNvZGUgaXRzIGZpcnN0IGVudHJ5LiBUaGUgYnVmZmVyIGFuZAorCXNpemUgcGFyYW1ldGVycyBhcmUgYXNzdW1lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgYnVmZmVyIGFuZCBzaXplCisJbWVtYmVycyBvZiBgc3RydWN0IHRyZWVgLgorCitgZmlsbF90cmVlX2Rlc2NyaXB0b3JgOjoKKworCUluaXRpYWxpemUgYSBgdHJlZV9kZXNjYCBhbmQgZGVjb2RlIGl0cyBmaXJzdCBlbnRyeSBnaXZlbiB0aGUgc2hhMSBvZgorCWEgdHJlZS4gUmV0dXJucyB0aGUgYGJ1ZmZlcmAgbWVtYmVyIGlmIHRoZSBzaGExIGlzIGEgdmFsaWQgdHJlZQorCWlkZW50aWZpZXIgYW5kIE5VTEwgb3RoZXJ3aXNlLgorCitgc2V0dXBfdHJhdmVyc2VfaW5mb2A6OgorCisJSW5pdGlhbGl6ZSBhIGB0cmF2ZXJzZV9pbmZvYCBnaXZlbiB0aGUgcGF0aG5hbWUgb2YgdGhlIHRyZWUgdG8gc3RhcnQKKwl0cmF2ZXJzaW5nIGZyb20uIFRoZSBgYmFzZWAgYXJndW1lbnQgaXMgYXNzdW1lZCB0byBiZSB0aGUgYHBhdGhgCisJbWVtYmVyIG9mIHRoZSBgbmFtZV9lbnRyeWAgYmVpbmcgcmVjdXJzZWQgaW50byB1bmxlc3MgdGhlIHRyZWUgaXMgYQorCXRvcC1sZXZlbCB0cmVlIGluIHdoaWNoIGNhc2UgdGhlIGVtcHR5IHN0cmluZyAoIiIpIGlzIHVzZWQuCisKK1dhbGtpbmcKKy0tLS0tLS0KKworYHRyZWVfZW50cnlgOjoKKworCVZpc2l0IHRoZSBuZXh0IGVudHJ5IGluIGEgdHJlZS4gUmV0dXJucyAxIHdoZW4gdGhlcmUgYXJlIG1vcmUgZW50cmllcworCWxlZnQgdG8gdmlzaXQgYW5kIDAgd2hlbiBhbGwgZW50cmllcyBoYXZlIGJlZW4gdmlzaXRlZC4gVGhpcyBpcworCWNvbW1vbmx5IHVzZWQgaW4gdGhlIHRlc3Qgb2YgYSB3aGlsZSBsb29wLgorCitgdHJlZV9lbnRyeV9sZW5gOjoKKworCUNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIGEgdHJlZSBlbnRyeSdzIHBhdGhuYW1lLiBUaGlzIHV0aWxpemVzIHRoZQorCW1lbW9yeSBzdHJ1Y3R1cmUgb2YgYSB0cmVlIGVudHJ5IHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB1c2luZyBhCisJZ2VuZXJpYyBzdHJsZW4oKS4KKworYHVwZGF0ZV90cmVlX2VudHJ5YDo6CisKKwlXYWxrIHRvIHRoZSBuZXh0IGVudHJ5IGluIGEgdHJlZS4gVGhpcyBpcyBjb21tb25seSB1c2VkIGluIGNvbmp1bmN0aW9uCisJd2l0aCBgdHJlZV9lbnRyeV9leHRyYWN0YCB0byBpbnNwZWN0IHRoZSBjdXJyZW50IGVudHJ5LgorCitgdHJlZV9lbnRyeV9leHRyYWN0YDo6CisKKwlEZWNvZGUgdGhlIGVudHJ5IGN1cnJlbnRseSBiZWluZyB2aXNpdGVkICh0aGUgb25lIHBvaW50ZWQgdG8gYnkKKwlgdHJlZV9kZXNjJ3NgIGBlbnRyeWAgbWVtYmVyKSBhbmQgcmV0dXJuIHRoZSBzaGExIG9mIHRoZSBlbnRyeS4gVGhlCisJYHBhdGhwYCBhbmQgYG1vZGVwYCBhcmd1bWVudHMgYXJlIHNldCB0byB0aGUgZW50cnkncyBwYXRobmFtZSBhbmQgbW9kZQorCXJlc3BlY3RpdmVseS4KKworYGdldF90cmVlX2VudHJ5YDo6CisKKwlGaW5kIGFuIGVudHJ5IGluIGEgdHJlZSBnaXZlbiBhIHBhdGhuYW1lIGFuZCB0aGUgc2hhMSBvZiBhIHRyZWUgdG8KKwlzZWFyY2guIFJldHVybnMgMCBpZiB0aGUgZW50cnkgaXMgZm91bmQgYW5kIC0xIG90aGVyd2lzZS4gVGhlIHRoaXJkCisJYW5kIGZvdXJ0aCBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gdGhlIGVudHJ5J3Mgc2hhMSBhbmQgbW9kZQorCXJlc3BlY3RpdmVseS4KKworVHJhdmVyc2luZworLS0tLS0tLS0tLQorCitgdHJhdmVyc2VfdHJlZXNgOjoKKworCVRyYXZlcnNlIGBuYCBudW1iZXIgb2YgdHJlZXMgaW4gcGFyYWxsZWwuIFRoZSBgZm5gIGNhbGxiYWNrIG1lbWJlciBvZgorCWB0cmF2ZXJzZV9pbmZvYCBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCB0cmVlIGVudHJ5LgorCitgdHJhdmVyc2VfY2FsbGJhY2tfdGA6OgorCVRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmF2ZXJzZSBjYWxsYmFjayBhcmUgYXMgZm9sbG93czoKKysKKyogYG5gIGNvdW50cyB0aGUgbnVtYmVyIG9mIHRyZWVzIGJlaW5nIHRyYXZlcnNlZC4KKworKiBgbWFza2AgaGFzIGl0cyBudGggYml0IHNldCBpZiBzb21ldGhpbmcgZXhpc3RzIGluIHRoZSBudGggZW50cnkuCisKKyogYGRpcm1hc2tgIGhhcyBpdHMgbnRoIGJpdCBzZXQgaWYgdGhlIG50aCB0cmVlJ3MgZW50cnkgaXMgYSBkaXJlY3RvcnkuCisKKyogYGVudHJ5YCBpcyBhbiBhcnJheSBvZiBzaXplIGBuYCB3aGVyZSB0aGUgbnRoIGVudHJ5IGlzIGZyb20gdGhlIG50aCB0cmVlLgorCisqIGBpbmZvYCBtYWludGFpbnMgdGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwuCisKKysKK1JldHVybmluZyBhIG5lZ2F0aXZlIHZhbHVlIHdpbGwgdGVybWluYXRlIHRoZSB0cmF2ZXJzYWwuIE90aGVyd2lzZSB0aGUKK3JldHVybiB2YWx1ZSBpcyB0cmVhdGVkIGFzIGFuIHVwZGF0ZSBtYXNrLiBJZiB0aGUgbnRoIGJpdCBpcyBzZXQgdGhlIG50aCB0cmVlCit3aWxsIGJlIHVwZGF0ZWQgYW5kIGlmIHRoZSBiaXQgaXMgbm90IHNldCB0aGUgbnRoIHRyZWUgZW50cnkgd2lsbCBiZSB0aGUKK3NhbWUgaW4gdGhlIG5leHQgY2FsbGJhY2sgaW52b2NhdGlvbi4KKworYG1ha2VfdHJhdmVyc2VfcGF0aGA6OgorCisJR2VuZXJhdGUgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgYSB0cmVlIGVudHJ5IGJhc2VkIGZyb20gdGhlIHJvb3Qgb2YgdGhlCisJdHJhdmVyc2FsLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHRyYXZlcnNhbCBoYXMgcmVjdXJzZWQgaW50byBhbm90aGVyCisJdHJlZSBuYW1lZCAiYmFyIiB0aGUgcGF0aG5hbWUgb2YgYW4gZW50cnkgImJheiIgaW4gdGhlICJiYXIiCisJdHJlZSB3b3VsZCBiZSAiYmFyL2JheiIuCisKK2B0cmF2ZXJzZV9wYXRoX2xlbmA6OgorCisJQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgYSBwYXRobmFtZSByZXR1cm5lZCBieSBgbWFrZV90cmF2ZXJzZV9wYXRoYC4KKwlUaGlzIHV0aWxpemVzIHRoZSBtZW1vcnkgc3RydWN0dXJlIG9mIGEgdHJlZSBlbnRyeSB0byBhdm9pZCB0aGUKKwlvdmVyaGVhZCBvZiB1c2luZyBhIGdlbmVyaWMgc3RybGVuKCkuCisKK0F1dGhvcnMKKy0tLS0tLS0KKworV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IGFuZCBMaW51cyBUb3J2YWxkcworPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXhkaWZmLWludGVyZmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGkteGRpZmYtaW50ZXJmYWNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk2ZWNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXhkaWZmLWludGVyZmFjZS50eHQKQEAgLTAsMCArMSw3IEBACit4ZGlmZiBpbnRlcmZhY2UgQVBJCis9PT09PT09PT09PT09PT09PT09CisKK1RhbGsgYWJvdXQgb3VyIGNhbGxpbmcgY29udmVudGlvbiB0byB4ZGlmZiBsaWJyYXJ5LCBpbmNsdWRpbmcKK3hkaWZmX2VtaXRfY29uc3VtZV9mbi4KKworKERzY2hvLCBKQykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2luZGV4LWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMjViMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0CkBAIC0wLDAgKzEsMTk5IEBACitHSVQgaW5kZXggZm9ybWF0Cis9PT09PT09PT09PT09PT09CisKKz0gVGhlIGdpdCBpbmRleCBmaWxlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdAorCisgIEFsbCBiaW5hcnkgbnVtYmVycyBhcmUgaW4gbmV0d29yayBieXRlIG9yZGVyLiBWZXJzaW9uIDIgaXMgZGVzY3JpYmVkCisgIGhlcmUgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuCisKKyAgIC0gQSAxMi1ieXRlIGhlYWRlciBjb25zaXN0aW5nIG9mCisKKyAgICAgNC1ieXRlIHNpZ25hdHVyZToKKyAgICAgICBUaGUgc2lnbmF0dXJlIGlzIHsgJ0QnLCAnSScsICdSJywgJ0MnIH0gKHN0YW5kcyBmb3IgImRpcmNhY2hlIikKKworICAgICA0LWJ5dGUgdmVyc2lvbiBudW1iZXI6CisgICAgICAgVGhlIGN1cnJlbnQgc3VwcG9ydGVkIHZlcnNpb25zIGFyZSAyIGFuZCAzLgorCisgICAgIDMyLWJpdCBudW1iZXIgb2YgaW5kZXggZW50cmllcy4KKworICAgLSBBIG51bWJlciBvZiBzb3J0ZWQgaW5kZXggZW50cmllcyAoc2VlIGJlbG93KS4KKworICAgLSBFeHRlbnNpb25zCisKKyAgICAgRXh0ZW5zaW9ucyBhcmUgaWRlbnRpZmllZCBieSBzaWduYXR1cmUuIE9wdGlvbmFsIGV4dGVuc2lvbnMgY2FuCisgICAgIGJlIGlnbm9yZWQgaWYgR0lUIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlbS4KKworICAgICBHSVQgY3VycmVudGx5IHN1cHBvcnRzIGNhY2hlZCB0cmVlIGFuZCByZXNvbHZlIHVuZG8gZXh0ZW5zaW9ucy4KKworICAgICA0LWJ5dGUgZXh0ZW5zaW9uIHNpZ25hdHVyZS4gSWYgdGhlIGZpcnN0IGJ5dGUgaXMgJ0EnLi4nWicgdGhlCisgICAgIGV4dGVuc2lvbiBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIGlnbm9yZWQuCisKKyAgICAgMzItYml0IHNpemUgb2YgdGhlIGV4dGVuc2lvbgorCisgICAgIEV4dGVuc2lvbiBkYXRhCisKKyAgIC0gMTYwLWJpdCBTSEEtMSBvdmVyIHRoZSBjb250ZW50IG9mIHRoZSBpbmRleCBmaWxlIGJlZm9yZSB0aGlzCisgICAgIGNoZWNrc3VtLgorCis9PSBJbmRleCBlbnRyeQorCisgIEluZGV4IGVudHJpZXMgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgb24gdGhlIG5hbWUgZmllbGQsCisgIGludGVycHJldGVkIGFzIGEgc3RyaW5nIG9mIHVuc2lnbmVkIGJ5dGVzIChpLmUuIG1lbWNtcCgpIG9yZGVyLCBubworICBsb2NhbGl6YXRpb24sIG5vIHNwZWNpYWwgY2FzaW5nIG9mIGRpcmVjdG9yeSBzZXBhcmF0b3IgJy8nKS4gRW50cmllcworICB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIHNvcnRlZCBieSB0aGVpciBzdGFnZSBmaWVsZC4KKworICAzMi1iaXQgY3RpbWUgc2Vjb25kcywgdGhlIGxhc3QgdGltZSBhIGZpbGUncyBtZXRhZGF0YSBjaGFuZ2VkCisgICAgdGhpcyBpcyBzdGF0KDIpIGRhdGEKKworICAzMi1iaXQgY3RpbWUgbmFub3NlY29uZCBmcmFjdGlvbnMKKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBtdGltZSBzZWNvbmRzLCB0aGUgbGFzdCB0aW1lIGEgZmlsZSdzIGRhdGEgY2hhbmdlZAorICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IG10aW1lIG5hbm9zZWNvbmQgZnJhY3Rpb25zCisgICAgdGhpcyBpcyBzdGF0KDIpIGRhdGEKKworICAzMi1iaXQgZGV2CisgICAgdGhpcyBpcyBzdGF0KDIpIGRhdGEKKworICAzMi1iaXQgaW5vCisgICAgdGhpcyBpcyBzdGF0KDIpIGRhdGEKKworICAzMi1iaXQgbW9kZSwgc3BsaXQgaW50byAoaGlnaCB0byBsb3cgYml0cykKKworICAgIDQtYml0IG9iamVjdCB0eXBlCisgICAgICB2YWxpZCB2YWx1ZXMgaW4gYmluYXJ5IGFyZSAxMDAwIChyZWd1bGFyIGZpbGUpLCAxMDEwIChzeW1ib2xpYyBsaW5rKQorICAgICAgYW5kIDExMTAgKGdpdGxpbmspCisKKyAgICAzLWJpdCB1bnVzZWQKKworICAgIDktYml0IHVuaXggcGVybWlzc2lvbi4gT25seSAwNzU1IGFuZCAwNjQ0IGFyZSB2YWxpZCBmb3IgcmVndWxhciBmaWxlcy4KKyAgICBTeW1ib2xpYyBsaW5rcyBhbmQgZ2l0bGlua3MgaGF2ZSB2YWx1ZSAwIGluIHRoaXMgZmllbGQuCisKKyAgMzItYml0IHVpZAorICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IGdpZAorICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IGZpbGUgc2l6ZQorICAgIFRoaXMgaXMgdGhlIG9uLWRpc2sgc2l6ZSBmcm9tIHN0YXQoMiksIHRydW5jYXRlZCB0byAzMi1iaXQuCisKKyAgMTYwLWJpdCBTSEEtMSBmb3IgdGhlIHJlcHJlc2VudGVkIG9iamVjdAorCisgIEEgMTYtYml0ICdmbGFncycgZmllbGQgc3BsaXQgaW50byAoaGlnaCB0byBsb3cgYml0cykKKworICAgIDEtYml0IGFzc3VtZS12YWxpZCBmbGFnCisKKyAgICAxLWJpdCBleHRlbmRlZCBmbGFnIChtdXN0IGJlIHplcm8gaW4gdmVyc2lvbiAyKQorCisgICAgMi1iaXQgc3RhZ2UgKGR1cmluZyBtZXJnZSkKKworICAgIDEyLWJpdCBuYW1lIGxlbmd0aCBpZiB0aGUgbGVuZ3RoIGlzIGxlc3MgdGhhbiAweEZGRjsgb3RoZXJ3aXNlIDB4RkZGCisgICAgaXMgc3RvcmVkIGluIHRoaXMgZmllbGQuCisKKyAgKFZlcnNpb24gMykgQSAxNi1iaXQgZmllbGQsIG9ubHkgYXBwbGljYWJsZSBpZiB0aGUgImV4dGVuZGVkIGZsYWciCisgIGFib3ZlIGlzIDEsIHNwbGl0IGludG8gKGhpZ2ggdG8gbG93IGJpdHMpLgorCisgICAgMS1iaXQgcmVzZXJ2ZWQgZm9yIGZ1dHVyZQorCisgICAgMS1iaXQgc2tpcC13b3JrdHJlZSBmbGFnICh1c2VkIGJ5IHNwYXJzZSBjaGVja291dCkKKworICAgIDEtYml0IGludGVudC10by1hZGQgZmxhZyAodXNlZCBieSAiZ2l0IGFkZCAtTiIpCisKKyAgICAxMy1iaXQgdW51c2VkLCBtdXN0IGJlIHplcm8KKworICBFbnRyeSBwYXRoIG5hbWUgKHZhcmlhYmxlIGxlbmd0aCkgcmVsYXRpdmUgdG8gdG9wIGxldmVsIGRpcmVjdG9yeQorICAgICh3aXRob3V0IGxlYWRpbmcgc2xhc2gpLiAnLycgaXMgdXNlZCBhcyBwYXRoIHNlcGFyYXRvci4gVGhlIHNwZWNpYWwKKyAgICBwYXRoIGNvbXBvbmVudHMgIi4iLCAiLi4iIGFuZCAiLmdpdCIgKHdpdGhvdXQgcXVvdGVzKSBhcmUgZGlzYWxsb3dlZC4KKyAgICBUcmFpbGluZyBzbGFzaCBpcyBhbHNvIGRpc2FsbG93ZWQuCisKKyAgICBUaGUgZXhhY3QgZW5jb2RpbmcgaXMgdW5kZWZpbmVkLCBidXQgdGhlICcuJyBhbmQgJy8nIGNoYXJhY3RlcnMKKyAgICBhcmUgZW5jb2RlZCBpbiA3LWJpdCBBU0NJSSBhbmQgdGhlIGVuY29kaW5nIGNhbm5vdCBjb250YWluIGEgTlVMCisgICAgYnl0ZSAoaW93LCB0aGlzIGlzIGEgVU5JWCBwYXRobmFtZSkuCisKKyAgKFZlcnNpb24gNCkgSW4gdmVyc2lvbiA0LCB0aGUgZW50cnkgcGF0aCBuYW1lIGlzIHByZWZpeC1jb21wcmVzc2VkCisgICAgcmVsYXRpdmUgdG8gdGhlIHBhdGggbmFtZSBmb3IgdGhlIHByZXZpb3VzIGVudHJ5ICh0aGUgdmVyeSBmaXJzdAorICAgIGVudHJ5IGlzIGVuY29kZWQgYXMgaWYgdGhlIHBhdGggbmFtZSBmb3IgdGhlIHByZXZpb3VzIGVudHJ5IGlzIGFuCisgICAgZW1wdHkgc3RyaW5nKS4gIEF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gZW50cnksIGFuIGludGVnZXIgTiBpbiB0aGUKKyAgICB2YXJpYWJsZSB3aWR0aCBlbmNvZGluZyAodGhlIHNhbWUgZW5jb2RpbmcgYXMgdGhlIG9mZnNldCBpcyBlbmNvZGVkCisgICAgZm9yIE9GU19ERUxUQSBwYWNrIGVudHJpZXM7IHNlZSBwYWNrLWZvcm1hdC50eHQpIGlzIHN0b3JlZCwgZm9sbG93ZWQKKyAgICBieSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBTLiAgUmVtb3ZpbmcgTiBieXRlcyBmcm9tIHRoZSBlbmQgb2YgdGhlCisgICAgcGF0aCBuYW1lIGZvciB0aGUgcHJldmlvdXMgZW50cnksIGFuZCByZXBsYWNpbmcgaXQgd2l0aCB0aGUgc3RyaW5nIFMKKyAgICB5aWVsZHMgdGhlIHBhdGggbmFtZSBmb3IgdGhpcyBlbnRyeS4KKworICAxLTggbnVsIGJ5dGVzIGFzIG5lY2Vzc2FyeSB0byBwYWQgdGhlIGVudHJ5IHRvIGEgbXVsdGlwbGUgb2YgZWlnaHQgYnl0ZXMKKyAgd2hpbGUga2VlcGluZyB0aGUgbmFtZSBOVUwtdGVybWluYXRlZC4KKworICAoVmVyc2lvbiA0KSBJbiB2ZXJzaW9uIDQsIHRoZSBwYWRkaW5nIGFmdGVyIHRoZSBwYXRobmFtZSBkb2VzIG5vdAorICBleGlzdC4KKworPT0gRXh0ZW5zaW9ucworCis9PT0gQ2FjaGVkIHRyZWUKKworICBDYWNoZWQgdHJlZSBleHRlbnNpb24gY29udGFpbnMgcHJlLWNvbXB1dGVkIGhhc2hlcyBmb3IgdHJlZXMgdGhhdCBjYW4KKyAgYmUgZGVyaXZlZCBmcm9tIHRoZSBpbmRleC4gSXQgaGVscHMgc3BlZWQgdXAgdHJlZSBvYmplY3QgZ2VuZXJhdGlvbgorICBmcm9tIGluZGV4IGZvciBhIG5ldyBjb21taXQuCisKKyAgV2hlbiBhIHBhdGggaXMgdXBkYXRlZCBpbiBpbmRleCwgdGhlIHBhdGggbXVzdCBiZSBpbnZhbGlkYXRlZCBhbmQKKyAgcmVtb3ZlZCBmcm9tIHRyZWUgY2FjaGUuCisKKyAgVGhlIHNpZ25hdHVyZSBmb3IgdGhpcyBleHRlbnNpb24gaXMgeyAnVCcsICdSJywgJ0UnLCAnRScgfS4KKworICBBIHNlcmllcyBvZiBlbnRyaWVzIGZpbGwgdGhlIGVudGlyZSBleHRlbnNpb247IGVhY2ggb2Ygd2hpY2gKKyAgY29uc2lzdHMgb2Y6CisKKyAgLSBOVUwtdGVybWluYXRlZCBwYXRoIGNvbXBvbmVudCAocmVsYXRpdmUgdG8gaXRzIHBhcmVudCBkaXJlY3RvcnkpOworCisgIC0gQVNDSUkgZGVjaW1hbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgaW5kZXggdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoZQorICAgIHRyZWUgdGhpcyBlbnRyeSByZXByZXNlbnRzIChlbnRyeV9jb3VudCk7CisKKyAgLSBBIHNwYWNlIChBU0NJSSAzMik7CisKKyAgLSBBU0NJSSBkZWNpbWFsIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBzdWJ0cmVlcyB0aGlzCisgICAgdHJlZSBoYXM7CisKKyAgLSBBIG5ld2xpbmUgKEFTQ0lJIDEwKTsgYW5kCisKKyAgLSAxNjAtYml0IG9iamVjdCBuYW1lIGZvciB0aGUgb2JqZWN0IHRoYXQgd291bGQgcmVzdWx0IGZyb20gd3JpdGluZworICAgIHRoaXMgc3BhbiBvZiBpbmRleCBhcyBhIHRyZWUuCisKKyAgQW4gZW50cnkgY2FuIGJlIGluIGFuIGludmFsaWRhdGVkIHN0YXRlIGFuZCBpcyByZXByZXNlbnRlZCBieSBoYXZpbmcKKyAgLTEgaW4gdGhlIGVudHJ5X2NvdW50IGZpZWxkLiBJbiB0aGlzIGNhc2UsIHRoZXJlIGlzIG5vIG9iamVjdCBuYW1lCisgIGFuZCB0aGUgbmV4dCBlbnRyeSBzdGFydHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG5ld2xpbmUuCisKKyAgVGhlIGVudHJpZXMgYXJlIHdyaXR0ZW4gb3V0IGluIHRoZSB0b3AtZG93biwgZGVwdGgtZmlyc3Qgb3JkZXIuICBUaGUKKyAgZmlyc3QgZW50cnkgcmVwcmVzZW50cyB0aGUgcm9vdCBsZXZlbCBvZiB0aGUgcmVwb3NpdG9yeSwgZm9sbG93ZWQgYnkgdGhlCisgIGZpcnN0IHN1YnRyZWUtLS1sZXQncyBjYWxsIHRoaXMgQS0tLW9mIHRoZSByb290IGxldmVsICh3aXRoIGl0cyBuYW1lCisgIHJlbGF0aXZlIHRvIHRoZSByb290IGxldmVsKSwgZm9sbG93ZWQgYnkgdGhlIGZpcnN0IHN1YnRyZWUgb2YgQSAod2l0aAorICBpdHMgbmFtZSByZWxhdGl2ZSB0byBBKSwgLi4uCisKKz09PSBSZXNvbHZlIHVuZG8KKworICBBIGNvbmZsaWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBpbmRleCBhcyBhIHNldCBvZiBoaWdoZXIgc3RhZ2UgZW50cmllcy4KKyAgV2hlbiBhIGNvbmZsaWN0IGlzIHJlc29sdmVkIChlLmcuIHdpdGggImdpdCBhZGQgcGF0aCIpLCB0aGVzZSBoaWdoZXIKKyAgc3RhZ2UgZW50cmllcyB3aWxsIGJlIHJlbW92ZWQgYW5kIGEgc3RhZ2UtMCBlbnRyeSB3aXRoIHByb3BlciByZXNvbHV0b24KKyAgaXMgYWRkZWQuCisKKyAgV2hlbiB0aGVzZSBoaWdoZXIgc3RhZ2UgZW50cmllcyBhcmUgcmVtb3ZlZCwgdGhleSBhcmUgc2F2ZWQgaW4gdGhlCisgIHJlc29sdmUgdW5kbyBleHRlbnNpb24sIHNvIHRoYXQgY29uZmxpY3RzIGNhbiBiZSByZWNyZWF0ZWQgKGUuZy4gd2l0aAorICAiZ2l0IGNoZWNrb3V0IC1tIiksIGluIGNhc2UgdXNlcnMgd2FudCB0byByZWRvIGEgY29uZmxpY3QgcmVzb2x1dGlvbgorICBmcm9tIHNjcmF0Y2guCisKKyAgVGhlIHNpZ25hdHVyZSBmb3IgdGhpcyBleHRlbnNpb24gaXMgeyAnUicsICdFJywgJ1UnLCAnQycgfS4KKworICBBIHNlcmllcyBvZiBlbnRyaWVzIGZpbGwgdGhlIGVudGlyZSBleHRlbnNpb247IGVhY2ggb2Ygd2hpY2gKKyAgY29uc2lzdHMgb2Y6CisKKyAgLSBOVUwtdGVybWluYXRlZCBwYXRobmFtZSB0aGUgZW50cnkgZGVzY3JpYmVzIChyZWxhdGl2ZSB0byB0aGUgcm9vdCBvZgorICAgIHRoZSByZXBvc2l0b3J5LCBpLmUuIGZ1bGwgcGF0aG5hbWUpOworCisgIC0gVGhyZWUgTlVMLXRlcm1pbmF0ZWQgQVNDSUkgb2N0YWwgbnVtYmVycywgZW50cnkgbW9kZSBvZiBlbnRyaWVzIGluCisgICAgc3RhZ2UgMSB0byAzIChhIG1pc3Npbmcgc3RhZ2UgaXMgcmVwcmVzZW50ZWQgYnkgIjAiIGluIHRoaXMgZmllbGQpOworICAgIGFuZAorCisgIC0gQXQgbW9zdCB0aHJlZSAxNjAtYml0IG9iamVjdCBuYW1lcyBvZiB0aGUgZW50cnkgaW4gc3RhZ2VzIGZyb20gMSB0byAzCisgICAgKG5vdGhpbmcgaXMgd3JpdHRlbiBmb3IgYSBtaXNzaW5nIHN0YWdlKS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDNlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWZvcm1hdC50eHQKQEAgLTAsMCArMSwxNjAgQEAKK0dJVCBwYWNrIGZvcm1hdAorPT09PT09PT09PT09PT09CisKKz0gcGFjay0qLnBhY2sgZmlsZXMgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworICAgLSBBIGhlYWRlciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgNC1ieXRlIHNpZ25hdHVyZToKKyAgICAgICAgIFRoZSBzaWduYXR1cmUgaXM6IHsnUCcsICdBJywgJ0MnLCAnSyd9CisKKyAgICAgNC1ieXRlIHZlcnNpb24gbnVtYmVyIChuZXR3b3JrIGJ5dGUgb3JkZXIpOgorICAgICAgICAgR0lUIGN1cnJlbnRseSBhY2NlcHRzIHZlcnNpb24gbnVtYmVyIDIgb3IgMyBidXQKKyAgICAgICAgIGdlbmVyYXRlcyB2ZXJzaW9uIDIgb25seS4KKworICAgICA0LWJ5dGUgbnVtYmVyIG9mIG9iamVjdHMgY29udGFpbmVkIGluIHRoZSBwYWNrIChuZXR3b3JrIGJ5dGUgb3JkZXIpCisKKyAgICAgT2JzZXJ2YXRpb246IHdlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiA0RyB2ZXJzaW9ucyA7LSkgYW5kCisgICAgIG1vcmUgdGhhbiA0RyBvYmplY3RzIGluIGEgcGFjay4KKworICAgLSBUaGUgaGVhZGVyIGlzIGZvbGxvd2VkIGJ5IG51bWJlciBvZiBvYmplY3QgZW50cmllcywgZWFjaCBvZgorICAgICB3aGljaCBsb29rcyBsaWtlIHRoaXM6CisKKyAgICAgKHVuZGVsdGlmaWVkIHJlcHJlc2VudGF0aW9uKQorICAgICBuLWJ5dGUgdHlwZSBhbmQgbGVuZ3RoICgzLWJpdCB0eXBlLCAobi0xKSo3KzQtYml0IGxlbmd0aCkKKyAgICAgY29tcHJlc3NlZCBkYXRhCisKKyAgICAgKGRlbHRpZmllZCByZXByZXNlbnRhdGlvbikKKyAgICAgbi1ieXRlIHR5cGUgYW5kIGxlbmd0aCAoMy1iaXQgdHlwZSwgKG4tMSkqNys0LWJpdCBsZW5ndGgpCisgICAgIDIwLWJ5dGUgYmFzZSBvYmplY3QgbmFtZQorICAgICBjb21wcmVzc2VkIGRlbHRhIGRhdGEKKworICAgICBPYnNlcnZhdGlvbjogbGVuZ3RoIG9mIGVhY2ggb2JqZWN0IGlzIGVuY29kZWQgaW4gYSB2YXJpYWJsZQorICAgICBsZW5ndGggZm9ybWF0IGFuZCBpcyBub3QgY29uc3RyYWluZWQgdG8gMzItYml0IG9yIGFueXRoaW5nLgorCisgIC0gVGhlIHRyYWlsZXIgcmVjb3JkcyAyMC1ieXRlIFNIQTEgY2hlY2tzdW0gb2YgYWxsIG9mIHRoZSBhYm92ZS4KKworPSBPcmlnaW5hbCAodmVyc2lvbiAxKSBwYWNrLSouaWR4IGZpbGVzIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKyAgLSBUaGUgaGVhZGVyIGNvbnNpc3RzIG9mIDI1NiA0LWJ5dGUgbmV0d29yayBieXRlIG9yZGVyCisgICAgaW50ZWdlcnMuICBOLXRoIGVudHJ5IG9mIHRoaXMgdGFibGUgcmVjb3JkcyB0aGUgbnVtYmVyIG9mCisgICAgb2JqZWN0cyBpbiB0aGUgY29ycmVzcG9uZGluZyBwYWNrLCB0aGUgZmlyc3QgYnl0ZSBvZiB3aG9zZQorICAgIG9iamVjdCBuYW1lIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBOLiAgVGhpcyBpcyBjYWxsZWQgdGhlCisgICAgJ2ZpcnN0LWxldmVsIGZhbi1vdXQnIHRhYmxlLgorCisgIC0gVGhlIGhlYWRlciBpcyBmb2xsb3dlZCBieSBzb3J0ZWQgMjQtYnl0ZSBlbnRyaWVzLCBvbmUgZW50cnkKKyAgICBwZXIgb2JqZWN0IGluIHRoZSBwYWNrLiAgRWFjaCBlbnRyeSBpczoKKworICAgIDQtYnl0ZSBuZXR3b3JrIGJ5dGUgb3JkZXIgaW50ZWdlciwgcmVjb3JkaW5nIHdoZXJlIHRoZQorICAgIG9iamVjdCBpcyBzdG9yZWQgaW4gdGhlIHBhY2tmaWxlIGFzIHRoZSBvZmZzZXQgZnJvbSB0aGUKKyAgICBiZWdpbm5pbmcuCisKKyAgICAyMC1ieXRlIG9iamVjdCBuYW1lLgorCisgIC0gVGhlIGZpbGUgaXMgY29uY2x1ZGVkIHdpdGggYSB0cmFpbGVyOgorCisgICAgQSBjb3B5IG9mIHRoZSAyMC1ieXRlIFNIQTEgY2hlY2tzdW0gYXQgdGhlIGVuZCBvZgorICAgIGNvcnJlc3BvbmRpbmcgcGFja2ZpbGUuCisKKyAgICAyMC1ieXRlIFNIQTEtY2hlY2tzdW0gb2YgYWxsIG9mIHRoZSBhYm92ZS4KKworUGFjayBJZHggZmlsZToKKworCS0tICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCitmYW5vdXQJICAgIHwgZmFub3V0WzBdID0gMiAoZm9yIGV4YW1wbGUpICAgIHwtLgordGFibGUJICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorCSAgICB8IGZhbm91dFsxXSAgICAgICAgICAgICAgICAgICAgICB8IHwKKwkgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8CisJICAgIHwgZmFub3V0WzJdICAgICAgICAgICAgICAgICAgICAgIHwgfAorCSAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+IHwKKwkgICAgfCBmYW5vdXRbMjU1XSA9IHRvdGFsIG9iamVjdHMgICAgfC0tLS4KKwktLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8IHwKK21haW4JICAgIHwgb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8CitpbmRleAkgICAgfCBvYmplY3QgbmFtZSAwMFhYWFhYWFhYWFhYWFhYWFggfCB8IHwKK3RhYmxlCSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgfAorCSAgICB8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfAorCSAgICB8IG9iamVjdCBuYW1lIDAwWFhYWFhYWFhYWFhYWFhYWCB8IHwgfAorCSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rPCsgfAorCSAgLi18IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorCSAgfCB8IG9iamVjdCBuYW1lIDAxWFhYWFhYWFhYWFhYWFhYWCB8ICAgfAorCSAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgfAorCSAgfCB8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorCSAgfCB8IG9iamVjdCBuYW1lIDAxWFhYWFhYWFhYWFhYWFhYWCB8ICAgfAorCSAgfCB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ICAgfAorCSAgfCB8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorCSAgfCB8IG9iamVjdCBuYW1lIEZGWFhYWFhYWFhYWFhYWFhYWCB8ICAgfAorCS0tfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rPC0tKwordHJhaWxlcgkgIHwgfCBwYWNrZmlsZSBjaGVja3N1bSAgICAgICAgICAgICAgfAorCSAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICB8IHwgaWR4ZmlsZSBjaGVja3N1bSAgICAgICAgICAgICAgIHwKKwkgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgIC4tLS0tLS0tLgorICAgICAgICAgICAgICAgICAgfAorUGFjayBmaWxlIGVudHJ5OiA8KworCisgICAgIHBhY2tlZCBvYmplY3QgaGVhZGVyOgorCTEtYnl0ZSBzaXplIGV4dGVuc2lvbiBiaXQgKE1TQikKKwkgICAgICAgdHlwZSAobmV4dCAzIGJpdCkKKwkgICAgICAgc2l6ZTAgKGxvd2VyIDQtYml0KQorICAgICAgICBuLWJ5dGUgc2l6ZU4gKGFzIGxvbmcgYXMgTVNCIGlzIHNldCwgZWFjaCA3LWJpdCkKKwkJc2l6ZTAuLnNpemVOIGZvcm0gNCs3KzcrLi4rNyBiaXQgaW50ZWdlciwgc2l6ZTAKKwkJaXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IHBhcnQsIGFuZCBzaXplTiBpcyB0aGUKKwkJbW9zdCBzaWduaWZpY2FudCBwYXJ0LgorICAgICBwYWNrZWQgb2JqZWN0IGRhdGE6CisgICAgICAgIElmIGl0IGlzIG5vdCBERUxUQSwgdGhlbiBkZWZsYXRlZCBieXRlcyAodGhlIHNpemUgYWJvdmUKKwkJaXMgdGhlIHNpemUgYmVmb3JlIGNvbXByZXNzaW9uKS4KKwlJZiBpdCBpcyBSRUZfREVMVEEsIHRoZW4KKwkgIDIwLWJ5dGUgYmFzZSBvYmplY3QgbmFtZSBTSEExICh0aGUgc2l6ZSBhYm92ZSBpcyB0aGUKKwkJc2l6ZSBvZiB0aGUgZGVsdGEgZGF0YSB0aGF0IGZvbGxvd3MpLgorICAgICAgICAgIGRlbHRhIGRhdGEsIGRlZmxhdGVkLgorCUlmIGl0IGlzIE9GU19ERUxUQSwgdGhlbgorCSAgbi1ieXRlIG9mZnNldCAoc2VlIGJlbG93KSBpbnRlcnByZXRlZCBhcyBhIG5lZ2F0aXZlCisJCW9mZnNldCBmcm9tIHRoZSB0eXBlLWJ5dGUgb2YgdGhlIGhlYWRlciBvZiB0aGUKKwkJb2ZzLWRlbHRhIGVudHJ5ICh0aGUgc2l6ZSBhYm92ZSBpcyB0aGUgc2l6ZSBvZgorCQl0aGUgZGVsdGEgZGF0YSB0aGF0IGZvbGxvd3MpLgorCSAgZGVsdGEgZGF0YSwgZGVmbGF0ZWQuCisKKyAgICAgb2Zmc2V0IGVuY29kaW5nOgorCSAgbiBieXRlcyB3aXRoIE1TQiBzZXQgaW4gYWxsIGJ1dCB0aGUgbGFzdCBvbmUuCisJICBUaGUgb2Zmc2V0IGlzIHRoZW4gdGhlIG51bWJlciBjb25zdHJ1Y3RlZCBieQorCSAgY29uY2F0ZW5hdGluZyB0aGUgbG93ZXIgNyBiaXQgb2YgZWFjaCBieXRlLCBhbmQKKwkgIGZvciBuID49IDIgYWRkaW5nIDJeNyArIDJeMTQgKyAuLi4gKyAyXig3KihuLTEpKQorCSAgdG8gdGhlIHJlc3VsdC4KKworCisKKz0gVmVyc2lvbiAyIHBhY2stKi5pZHggZmlsZXMgc3VwcG9ydCBwYWNrcyBsYXJnZXIgdGhhbiA0IEdpQiwgYW5kCisgIGhhdmUgc29tZSBvdGhlciByZW9yZ2FuaXphdGlvbnMuICBUaGV5IGhhdmUgdGhlIGZvcm1hdDoKKworICAtIEEgNC1ieXRlIG1hZ2ljIG51bWJlciAnXDM3N3RPYycgd2hpY2ggaXMgYW4gdW5yZWFzb25hYmxlCisgICAgZmFub3V0WzBdIHZhbHVlLgorCisgIC0gQSA0LWJ5dGUgdmVyc2lvbiBudW1iZXIgKD0gMikKKworICAtIEEgMjU2LWVudHJ5IGZhbi1vdXQgdGFibGUganVzdCBsaWtlIHYxLgorCisgIC0gQSB0YWJsZSBvZiBzb3J0ZWQgMjAtYnl0ZSBTSEExIG9iamVjdCBuYW1lcy4gIFRoZXNlIGFyZQorICAgIHBhY2tlZCB0b2dldGhlciB3aXRob3V0IG9mZnNldCB2YWx1ZXMgdG8gcmVkdWNlIHRoZSBjYWNoZQorICAgIGZvb3RwcmludCBvZiB0aGUgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyBvYmplY3QgbmFtZS4KKworICAtIEEgdGFibGUgb2YgNC1ieXRlIENSQzMyIHZhbHVlcyBvZiB0aGUgcGFja2VkIG9iamVjdCBkYXRhLgorICAgIFRoaXMgaXMgbmV3IGluIHYyIHNvIGNvbXByZXNzZWQgZGF0YSBjYW4gYmUgY29waWVkIGRpcmVjdGx5CisgICAgZnJvbSBwYWNrIHRvIHBhY2sgZHVyaW5nIHJlcGFja2luZyB3aXRob3V0IHVuZGV0ZWN0ZWQKKyAgICBkYXRhIGNvcnJ1cHRpb24uCisKKyAgLSBBIHRhYmxlIG9mIDQtYnl0ZSBvZmZzZXQgdmFsdWVzIChpbiBuZXR3b3JrIGJ5dGUgb3JkZXIpLgorICAgIFRoZXNlIGFyZSB1c3VhbGx5IDMxLWJpdCBwYWNrIGZpbGUgb2Zmc2V0cywgYnV0IGxhcmdlCisgICAgb2Zmc2V0cyBhcmUgZW5jb2RlZCBhcyBhbiBpbmRleCBpbnRvIHRoZSBuZXh0IHRhYmxlIHdpdGgKKyAgICB0aGUgbXNiaXQgc2V0LgorCisgIC0gQSB0YWJsZSBvZiA4LWJ5dGUgb2Zmc2V0IGVudHJpZXMgKGVtcHR5IGZvciBwYWNrIGZpbGVzIGxlc3MKKyAgICB0aGFuIDIgR2lCKS4gIFBhY2sgZmlsZXMgYXJlIG9yZ2FuaXplZCB3aXRoIGhlYXZpbHkgdXNlZAorICAgIG9iamVjdHMgdG93YXJkIHRoZSBmcm9udCwgc28gbW9zdCBvYmplY3QgcmVmZXJlbmNlcyBzaG91bGQKKyAgICBub3QgbmVlZCB0byByZWZlciB0byB0aGlzIHRhYmxlLgorCisgIC0gVGhlIHNhbWUgdHJhaWxlciBhcyBhIHYxIHBhY2sgZmlsZToKKworICAgIEEgY29weSBvZiB0aGUgMjAtYnl0ZSBTSEExIGNoZWNrc3VtIGF0IHRoZSBlbmQgb2YKKyAgICBjb3JyZXNwb25kaW5nIHBhY2tmaWxlLgorCisgICAgMjAtYnl0ZSBTSEExLWNoZWNrc3VtIG9mIGFsbCBvZiB0aGUgYWJvdmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWhldXJpc3RpY3MudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1oZXVyaXN0aWNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDNlYjVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1oZXVyaXN0aWNzLnR4dApAQCAtMCwwICsxLDQ2NiBAQAorICAgICAgICBDb25jZXJuaW5nIEdpdCdzIFBhY2tpbmcgSGV1cmlzdGljcworICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIE9oLCBoZXJlJ3MgYSByZWFsbHkgc3R1cGlkIHF1ZXN0aW9uOgorCisgICAgICAgICAgICAgICAgICBXaGVyZSBkbyBJIGdvCisgICAgICAgICAgICAgICB0byBsZWFybiB0aGUgZGV0YWlscworCSAgICBvZiBnaXQncyBwYWNraW5nIGhldXJpc3RpY3M/CisKK0JlIGNhcmVmdWwgd2hhdCB5b3UgYXNrIQorCitGb2xsb3dlcnMgb2YgdGhlIGdpdCwgcGxlYXNlIG9wZW4gdGhlIGdpdCBJUkMgTG9nIGFuZCB0dXJuIHRvCitGZWJydWFyeSAxMCwgMjAwNi4KKworSXQncyBhIHJhcmUgb2NjYXNpb24sIGFuZCB3ZSBhcmUgam9pbmVkIGJ5IHRoZSBLaW5nIEdpdCBIaW1zZWxmLAorTGludXMgVG9ydmFsZHMgKGxpbnVzKS4gIE5hdGhhbmllbCBTbWl0aCwgKG5qc2ApLCBoYXMgdGhlIGZsb29yCithbmQgc2Vla3MgZW5saWdodGVubWVudC4gIE90aGVycyBhcmUgcHJlc2VudCwgYnV0IHNpbGVudC4KKworTGV0J3MgbGlzdGVuIGluIQorCisgICAgPG5qc2A+IE9oLCBoZXJlJ3MgYSByZWFsbHkgc3R1cGlkIHF1ZXN0aW9uIC0tIHdoZXJlIGRvIEkgZ28gdG8KKyAgICAgICAgbGVhcm4gdGhlIGRldGFpbHMgb2YgZ2l0J3MgcGFja2luZyBoZXVyaXN0aWNzPyAgZ29vZ2xlIGF2YWlscworICAgICAgICBtZSBub3QsIHJlYWRpbmcgdGhlIHNvdXJjZSBkaWRuJ3QgaGVscCBhIGxvdCwgYW5kIHdhZGluZworICAgICAgICB0aHJvdWdoIHRoZSB3aG9sZSBtYWlsaW5nIGxpc3Qgc2VlbXMgbGVzcyBlZmZpY2llbnQgdGhhbiBhbnkKKyAgICAgICAgb2YgdGhhdC4KKworSXQgaXMgYSBib2xkIHN0YXJ0ISAgQSBwbGVhIGZvciBoZWxwIGNvbWJpbmVkIHdpdGggYSBzaW11bHRhbmVvdXMKK3RyaS1wYXJ0IGF0dGFjayBvbiBzb21lIG9mIHRoZSB0cmllZCBhbmQgdHJ1ZSBtYWluc3RheXMgaW4gdGhlIHF1ZXN0Citmb3IgZW5saWdodGVubWVudC4gIEJyYXNoIGFjY3VzYXRpb25zIG9mIGdvb2dsZSBiZWluZyB1c2VsZXNzLiBIdWJyaXMhCitNYWxpZ25pbmcgdGhlIHNvdXJjZS4gIEhlcmVzeSEgIERpc2RhaW4gZm9yIHRoZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMuCitXb2UuCisKKyAgICA8cGFza3k+IHllcywgdGhlIHBhY2tpbmctcmVsYXRlZCBkZWx0YSBzdHVmZiBpcyBzb21ld2hhdAorICAgICAgICBteXN0ZXJpb3VzIGV2ZW4gZm9yIG1lIDspCisKK0FoISAgTW9kZXN0eSBhZnRlciBhbGwuCisKKyAgICA8bGludXM+IG5qcywgSSBkb24ndCB0aGluayB0aGUgZG9jcyBleGlzdC4gVGhhdCdzIHNvbWV0aGluZyB3aGVyZQorCSBJIGRvbid0IHRoaW5rIGFueWJvZHkgZWxzZSB0aGFuIG1lIGV2ZW4gcmVhbGx5IGdvdCBpbnZvbHZlZC4KKwkgTW9zdCBvZiB0aGUgcmVzdCBvZiBnaXQgb3RoZXJzIGhhdmUgYmVlbiBidXN5IHdpdGggKGVzcGVjaWFsbHkKKwkgSnVuaW8pLCBidXQgcGFja2luZyBub2JvZHkgdG91Y2hlZCBhZnRlciBJIGRpZCBpdC4KKworSXQncyBjcnlwdGljLCB5ZXQgdmFndWUuICBMaW51cyBpbiBzdHlsZSBmb3Igc3VyZS4gIFdpc2UgbWVuCitpbnRlcnByZXQgdGhpcyBhcyBhbiBhcG9sb2d5LiAgQSBmZXcgYXJndWUgaXQgaXMgbWVyZWx5IGEKK3N0YXRlbWVudCBvZiBmYWN0LgorCisgICAgPG5qc2A+IEkgZ3Vlc3MgdGhlIG5leHQgc3RlcCBpcyAicmVhZCB0aGUgc291cmNlIGFnYWluIiwgYnV0IEkKKyAgICAgICAgaGF2ZSB0byBidWlsZCB1cCBhIGNlcnRhaW4gbGV2ZWwgb2YgZ3VtcHRpb24gZmlyc3QgOi0pCisKK0luZGVlZCEgIE9uIGJvdGggcG9pbnRzLgorCisgICAgPGxpbnVzPiBUaGUgcGFja2luZyBoZXVyaXN0aWMgaXMgYWN0dWFsbHkgcmVhbGx5IHJlYWxseSBzaW1wbGUuCisKK0JhaXQuLi4KKworICAgIDxsaW51cz4gQnV0IHN0cmFuZ2UuCisKK0FuZCBzd2l0Y2guICBUaGF0IG91Z2h0IHRvIGRvIGl0IQorCisgICAgPGxpbnVzPiBSZW1lbWJlcjogZ2l0IHJlYWxseSBkb2Vzbid0IGZvbGxvdyBmaWxlcy4gU28gd2hhdCBpdCBkb2VzIGlzCisgICAgICAgIC0gZ2VuZXJhdGUgYSBsaXN0IG9mIGFsbCBvYmplY3RzCisgICAgICAgIC0gc29ydCB0aGUgbGlzdCBhY2NvcmRpbmcgdG8gbWFnaWMgaGV1cmlzdGljcworICAgICAgICAtIHdhbGsgdGhlIGxpc3QsIHVzaW5nIGEgc2xpZGluZyB3aW5kb3csIHNlZWluZyBpZiBhbiBvYmplY3QKKyAgICAgICAgICBjYW4gYmUgZGlmZmVkIGFnYWluc3QgYW5vdGhlciBvYmplY3QgaW4gdGhlIHdpbmRvdworICAgICAgICAtIHdyaXRlIG91dCB0aGUgbGlzdCBpbiByZWNlbmN5IG9yZGVyCisKK1RoZSB0cmFkaXRpb25hbCB1bmRlcnN0YXRlbWVudDoKKworICAgIDxuanNgPiBJIHN1c3BlY3QgdGhhdCB3aGF0IEknbSBtaXNzaW5nIGlzIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gb2YKKyAgICAgICAgdGhlIHdvcmQgIm1hZ2ljIgorCitUaGUgdHJhZGl0aW9uYWwgaW5zaWdodDoKKworICAgIDxwYXNreT4geWVzCisKK0FuZCBCYWJlbC1saWtlIGNvbmZ1c2lvbiBmbG93ZWQuCisKKyAgICA8bmpzYD4gb2gsIGhtbSwgYW5kIEknbSBub3Qgc3VyZSB3aGF0IHRoaXMgc2xpZGluZyB3aW5kb3cgbWVhbnMgZWl0aGVyCisKKyAgICA8cGFza3k+IGlpcmMsIGl0IGFwcGVhcmVkIHRvIG1lIHRvIGJlIGp1c3QgdGhlIHNoYTEgb2YgdGhlIG9iamVjdAorICAgICAgICB3aGVuIHJlYWRpbmcgdGhlIGNvZGUgY2FzdWFsbHkgLi4uCisKKyAgICAgICAgLi4uIHdoaWNoIHNpbXBseSBkb2Vzbid0IHNvdW5kIGFzIGEgdmVyeSBnb29kIGhldXJpc3RpY3MsIHRob3VnaCA7KQorCisgICAgPG5qc2A+IC4uLi4uYW5kIHJlY2VuY3kgb3JkZXIuICBva2F5LCBJIHRoaW5rIGl0J3MgY2xlYXIgSSBkaWRuJ3QKKyAgICAgICBldmVuIHJlYWxpemUgaG93IG11Y2ggSSB3YXNuJ3QgcmVhbGl6aW5nIDotKQorCitBaCwgZ3Jhc3Nob3BwZXIhICBBbmQgdGh1cyB0aGUgZW5saWdodGVubWVudCBiZWdpbnMgYW5ldy4KKworICAgIDxsaW51cz4gVGhlICJtYWdpYyIgaXMgYWN0dWFsbHkgaW4gdGhlb3J5IHRvdGFsbHkgYXJiaXRyYXJ5LgorICAgICAgICBBTlkgb3JkZXIgd2lsbCBnaXZlIHlvdSBhIHdvcmtpbmcgcGFjaywgYnV0IG5vLCBpdCdzIG5vdAorICAgICAgICBvcmRlcmVkIGJ5IFNIQTEuCisKKyAgICAgICAgQmVmb3JlIHRhbGtpbmcgYWJvdXQgdGhlIG9yZGVyaW5nIGZvciB0aGUgc2xpZGluZyBkZWx0YQorICAgICAgICB3aW5kb3csIGxldCdzIHRhbGsgYWJvdXQgdGhlIHJlY2VuY3kgb3JkZXIuIFRoYXQncyBtb3JlCisgICAgICAgIGltcG9ydGFudCBpbiBvbmUgd2F5LgorCisgICAgPG5qc2A+IFJpZ2h0LCBidXQgaWYgYWxsIHlvdSB3YW50IGlzIGEgd29ya2luZyB3YXkgdG8gcGFjayB0aGluZ3MKKyAgICAgICAgdG9nZXRoZXIsIHlvdSBjb3VsZCBqdXN0IHVzZSBjYXQgYW5kIHNhdmUgeW91cnNlbGYgc29tZQorICAgICAgICB0cm91YmxlLi4uCisKK1dhYWFpdCBmb3IgaXQuLi4uCisKKyAgICA8bGludXM+IFRoZSByZWNlbmN5IG9yZGVyaW5nICh3aGljaCBpcyBiYXNpY2FsbHk6IHB1dCBvYmplY3RzCisgICAgICAgIF9waHlzaWNhbGx5XyBpbnRvIHRoZSBwYWNrIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXJlCisgICAgICAgICJyZWFjaGFibGUiIGZyb20gdGhlIGhlYWQpIGlzIGltcG9ydGFudC4KKworICAgIDxuanNgPiBva2F5CisKKyAgICA8bGludXM+IEl0J3MgaW1wb3J0YW50IGJlY2F1c2UgdGhhdCdzIHRoZSB0aGluZyB0aGF0IGdpdmVzIHBhY2tzCisgICAgICAgIGdvb2QgbG9jYWxpdHkuIEl0IGtlZXBzIHRoZSBvYmplY3RzIGNsb3NlIHRvIHRoZSBoZWFkICh3aGV0aGVyCisgICAgICAgIHRoZXkgYXJlIG9sZCBvciBuZXcsIGJ1dCB0aGV5IGFyZSBfcmVhY2hhYmxlXyBmcm9tIHRoZSBoZWFkKQorICAgICAgICBhdCB0aGUgaGVhZCBvZiB0aGUgcGFjay4gU28gcGFja3MgYWN0dWFsbHkgaGF2ZSBhYnNvbHV0ZWx5CisgICAgICAgIF93b25kZXJmdWxfIElPIHBhdHRlcm5zLgorCitSZWFkIHRoYXQgYWdhaW4sIGJlY2F1c2UgaXQgaXMgaW1wb3J0YW50LgorCisgICAgPGxpbnVzPiBCdXQgcmVjZW5jeSBvcmRlcmluZyBpcyB0b3RhbGx5IHVzZWxlc3MgZm9yIGRlY2lkaW5nIGhvdworICAgICAgICB0byBhY3R1YWxseSBnZW5lcmF0ZSB0aGUgZGVsdGFzLCBzbyB0aGUgZGVsdGEgb3JkZXJpbmcgaXMKKyAgICAgICAgc29tZXRoaW5nIGVsc2UuCisKKyAgICAgICAgVGhlIGRlbHRhIG9yZGVyaW5nIGlzICh3YWl0IGZvciBpdCk6CisgICAgICAgIC0gZmlyc3Qgc29ydCBieSB0aGUgImJhc2VuYW1lIiBvZiB0aGUgb2JqZWN0LCBhcyBkZWZpbmVkIGJ5CisgICAgICAgICAgdGhlIG5hbWUgdGhlIG9iamVjdCB3YXMgX2ZpcnN0XyByZWFjaGVkIHRocm91Z2ggd2hlbgorICAgICAgICAgIGdlbmVyYXRpbmcgdGhlIG9iamVjdCBsaXN0CisgICAgICAgIC0gd2l0aGluIHRoZSBzYW1lIGJhc2VuYW1lLCBzb3J0IGJ5IHNpemUgb2YgdGhlIG9iamVjdAorICAgICAgICAtIGJ1dCBhbHdheXMgc29ydCBkaWZmZXJlbnQgdHlwZXMgc2VwYXJhdGVseSAoY29tbWl0cyBmaXJzdCkuCisKKyAgICAgICAgVGhhdCdzIG5vdCBleGFjdGx5IGl0LCBidXQgaXQncyB2ZXJ5IGNsb3NlLgorCisgICAgPG5qc2A+IFRoZSAiX2ZpcnN0XyByZWFjaGVkIiB0aGluZyBpcyBub3QgdG9vIGltcG9ydGFudCwganVzdCB5b3UKKyAgICAgICAgbmVlZCBzb21lIHdheSB0byBicmVhayB0aWVzIHNpbmNlIHRoZSBzYW1lIG9iamVjdHMgbWF5IGJlCisgICAgICAgIHJlYWNoYWJsZSBtYW55IHdheXMsIHllcz8KKworQW5kIGFzIGlmIHRvIGNsYXJpZnk6CisKKyAgICA8bGludXM+IFRoZSBwb2ludCBpcyB0aGF0IGl0J3MgYWxsIHJlYWxseSBqdXN0IGFueSByYW5kb20KKyAgICAgICAgaGV1cmlzdGljLCBhbmQgdGhlIG9yZGVyaW5nIGlzIHRvdGFsbHkgdW5pbXBvcnRhbnQgZm9yCisgICAgICAgIGNvcnJlY3RuZXNzLCBidXQgaXQgaGVscHMgYSBsb3QgaWYgdGhlIGhldXJpc3RpYyBnaXZlcworICAgICAgICAiY2x1bXBpbmciIGZvciB0aGluZ3MgdGhhdCBhcmUgbGlrZWx5IHRvIGRlbHRhIHdlbGwgYWdhaW5zdAorICAgICAgICBlYWNoIG90aGVyLgorCitJdCBpcyBhbiBpbXBvcnRhbnQgcG9pbnQsIHNvIHNlY3JldGx5LCBJIGRpZCBteSBvd24gcmVzZWFyY2ggYW5kIGhhdmUKK2luY2x1ZGVkIG15IHJlc3VsdHMgYmVsb3cuICBUbyBiZSBmYWlyLCBpdCBoYXMgY2hhbmdlZCBzb21lIG92ZXIgdGltZS4KK0FuZCB0aHJvdWdoIHRoZSBtYWdpYyBvZiBSZXZpc2lvbmlzdGljIEhpc3RvcnksIEkgZHJhdyB1cG9uIHRoaXMgZW50cnkKK2Zyb20gVGhlIEdpdCBJUkMgTG9ncyBvbiBteSBmYXRoZXIncyBiaXJ0aGRheSwgTWFyY2ggMToKKworICAgIDxnaXRzdGVyPiBUaGUgcXVvdGUgZnJvbSB0aGUgYWJvdmUgbGludXMgc2hvdWxkIGJlIHJld3JpdHRlbiBhCisgICAgICAgIGJpdCAod2FpdCBmb3IgaXQpOgorICAgICAgICAtIGZpcnN0IHNvcnQgYnkgdHlwZS4gIERpZmZlcmVudCBvYmplY3RzIG5ldmVyIGRlbHRhIHdpdGgKKwkgIGVhY2ggb3RoZXIuCisgICAgICAgIC0gdGhlbiBzb3J0IGJ5IGZpbGVuYW1lL2Rpcm5hbWUuICBoYXNoIG9mIHRoZSBiYXNlbmFtZQorICAgICAgICAgIG9jY3VwaWVzIHRoZSB0b3AgQklUU19QRVJfSU5ULURJUl9CSVRTIGJpdHMsIGFuZCBib3R0b20KKyAgICAgICAgICBESVJfQklUUyBhcmUgZm9yIHRoZSBoYXNoIG9mIGxlYWRpbmcgcGF0aCBlbGVtZW50cy4KKyAgICAgICAgLSB0aGVuIGlmIHdlIGFyZSBkb2luZyAidGhpbiIgcGFjaywgdGhlIG9iamVjdHMgd2UgYXJlIF9ub3RfCisgICAgICAgICAgZ29pbmcgdG8gcGFjayBidXQgd2Uga25vdyBhYm91dCBhcmUgc29ydGVkIGVhcmxpZXIgdGhhbgorICAgICAgICAgIG90aGVyIG9iamVjdHMuCisgICAgICAgIC0gYW5kIGZpbmFsbHkgc29ydCBieSBzaXplLCBsYXJnZXIgdG8gc21hbGxlci4KKworSW4gb25lIHN3ZWxsLWZvb3AsIGNsYXJpZmljYXRpb24gYW5kIG9ic2N1cmlmaWNhdGlvbiEgIE5vbmV0aGVsZXNzLAorYXV0aG9yaXRhdGl2ZS4gIENyeXB0aWMsIHlldCBjb25jaXNlLiAgSXQgZXZlbiBzb2xpY2l0cyBub3Rpb25zIG9mCitxdW90ZXMgZnJvbSBUaGUgU291cmNlIENvZGUuICBDbGVhcmx5LCBtb3JlIHN0dWR5IGlzIG5lZWRlZC4KKworICAgIDxnaXRzdGVyPiBUaGF0J3MgdGhlIHNvcnQgb3JkZXIuICBXaGF0IHRoaXMgbWVhbnMgaXM6CisgICAgICAgIC0gd2UgZG8gbm90IGRlbHRhIGRpZmZlcmVudCBvYmplY3QgdHlwZXMuCisJLSB3ZSBwcmVmZXIgdG8gZGVsdGEgdGhlIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBmdWxsIHBhdGgsIGJ1dAorICAgICAgICAgIGFsbG93IGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBmcm9tIGRpZmZlcmVudCBkaXJlY3Rvcmllcy4KKwktIHdlIGFsd2F5cyBwcmVmZXIgdG8gZGVsdGEgYWdhaW5zdCBvYmplY3RzIHdlIGFyZSBub3QgZ29pbmcKKyAgICAgICAgICB0byBzZW5kLCBpZiB0aGVyZSBhcmUgc29tZS4KKwktIHdlIHByZWZlciB0byBkZWx0YSBhZ2FpbnN0IGxhcmdlciBvYmplY3RzLCBzbyB0aGF0IHdlIGhhdmUKKyAgICAgICAgICBsb3RzIG9mIHJlbW92YWxzLgorCisgICAgICAgIFRoZSBwZW51bHRpbWF0ZSBydWxlIGlzIGZvciAidGhpbiIgcGFja3MuICBJdCBpcyB1c2VkIHdoZW4KKyAgICAgICAgdGhlIG90aGVyIHNpZGUgaXMga25vd24gdG8gaGF2ZSBzdWNoIG9iamVjdHMuCisKK1RoZXJlIGl0IGlzIGFnYWluLiAiVGhpbiIgcGFja3MuICBJJ20gdGhpbmtpbmcgdG8gbXlzZWxmLCAiV2hhdAoraXMgYSAndGhpbicgcGFjaz8iICBTbyBJIGFzazoKKworICAgIDxqZGw+IFdoYXQgaXMgYSAidGhpbiIgcGFjaz8KKworICAgIDxnaXRzdGVyPiBVc2Ugb2YgLS1vYmplY3RzLWVkZ2UgdG8gcmV2LWxpc3QgYXMgdGhlIHVwc3RyZWFtIG9mCisgICAgICAgIHBhY2stb2JqZWN0cy4gIFRoZSBwYWNrIHRyYW5zZmVyIHByb3RvY29sIG5lZ290aWF0ZXMgdGhhdC4KKworV29vIGhvbyEgIENsZWFyZWQgdGhhdCBfcmlnaHRfIHVwIQorCisgICAgPGdpdHN0ZXI+IFRoZXJlIGFyZSB0d28gZGlyZWN0aW9ucyAtIHB1c2ggYW5kIGZldGNoLgorCitUaGVyZSEgIERpZCB5b3Ugc2VlIGl0PyAgSXQgaXMgbm90ICcicHVzaCIgYW5kICJwdWxsIichICBIb3cgb2Z0ZW4gdGhlCitjb25mdXNpb24gaGFzIHN0YXJ0ZWQgaGVyZS4gIFNvIGNhc3VhbGx5IG1lbnRpb25lZCwgdG9vIQorCisgICAgPGdpdHN0ZXI+IEZvciBwdXNoLCBnaXQtc2VuZC1wYWNrIGludm9rZXMgZ2l0LXJlY2VpdmUtcGFjayBvbiB0aGUKKyAgICAgICAgb3RoZXIgZW5kLiAgVGhlIHJlY2VpdmUtcGFjayBzYXlzICJJIGhhdmUgdXAgdG8gdGhlc2UgY29tbWl0cyIuCisgICAgICAgIHNlbmQtcGFjayBsb29rcyBhdCB0aGVtLCBhbmQgY29tcHV0ZXMgd2hhdCBhcmUgbWlzc2luZyBmcm9tCisgICAgICAgIHRoZSBvdGhlciBlbmQuICBTbyAidGhpbiIgY291bGQgYmUgdGhlIGRlZmF1bHQgdGhlcmUuCisKKyAgICAgICAgSW4gdGhlIG90aGVyIGRpcmVjdGlvbiwgZmV0Y2gsIGdpdC1mZXRjaC1wYWNrIGFuZAorICAgICAgICBnaXQtY2xvbmUtcGFjayBpbnZva2VzIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgb3RoZXIgZW5kCisJKHZpYSBzc2ggb3IgYnkgdGFsa2luZyB0byB0aGUgZGFlbW9uKS4KKworCVRoZXJlIGFyZSB0d28gY2FzZXM6IGZldGNoLXBhY2sgd2l0aCAtayBhbmQgY2xvbmUtcGFjayBpcyBvbmUsCisgICAgICAgIGZldGNoLXBhY2sgd2l0aG91dCAtayBpcyB0aGUgb3RoZXIuICBjbG9uZS1wYWNrIGFuZCBmZXRjaC1wYWNrCisgICAgICAgIHdpdGggLWsgd2lsbCBrZWVwIHRoZSBkb3dubG9hZGVkIHBhY2tmaWxlIHdpdGhvdXQgZXhwYW5kZWQsIHNvCisgICAgICAgIHdlIGRvIG5vdCB1c2UgdGhpbiBwYWNrIHRyYW5zZmVyLiAgT3RoZXJ3aXNlLCB0aGUgZ2VuZXJhdGVkCisgICAgICAgIHBhY2sgd2lsbCBoYXZlIGRlbHRhIHdpdGhvdXQgYmFzZSBvYmplY3QgaW4gdGhlIHNhbWUgcGFjay4KKworICAgICAgICBCdXQgZmV0Y2gtcGFjayB3aXRob3V0IC1rIHdpbGwgZXhwbG9kZSB0aGUgcmVjZWl2ZWQgcGFjayBpbnRvCisgICAgICAgIGluZGl2aWR1YWwgb2JqZWN0cywgc28gd2UgYXV0b21hdGljYWxseSBhc2sgdXBsb2FkLXBhY2sgdG8KKyAgICAgICAgZ2l2ZSB1cyBhIHRoaW4gcGFjayBpZiB1cGxvYWQtcGFjayBzdXBwb3J0cyBpdC4KKworT0sgdGhlbi4KKworVWguCisKK0xldCdzIHJldHVybiB0byB0aGUgcHJldmlvdXMgY29udmVyc2F0aW9uIHN0aWxsIGluIHByb2dyZXNzLgorCisgICAgPG5qc2A+IGFuZCAiYmFzZW5hbWUiIG1lYW5zIHNvbWV0aGluZyBsaWtlICJ0aGUgdGFpbCBvZiBlbmQgb2YKKyAgICAgICAgcGF0aCBvZiBmaWxlIG9iamVjdHMgYW5kIGRpciBvYmplY3RzLCBhcyBwZXIgYmFzZW5hbWUoMyksIGFuZAorICAgICAgICB3ZSBqdXN0IGRlY2xhcmUgYWxsIGNvbW1pdCBhbmQgdGFnIG9iamVjdHMgdG8gaGF2ZSB0aGUgc2FtZQorICAgICAgICBiYXNlbmFtZSIgb3Igc29tZXRoaW5nPworCitMdWNraWx5LCB0aGF0IHRvbyBpcyBhIHBvaW50IHRoYXQgZ2l0c3RlciBjbGFyaWZpZWQgZm9yIHVzIQorCitJZiBJIG1pZ2h0IGFkZCwgdGhlIHRyaWNrIGlzIHRvIG1ha2UgZmlsZXMgdGhhdCBfbWlnaHRfIGJlIHNpbWlsYXIgYmUKK2xvY2F0ZWQgY2xvc2UgdG8gZWFjaCBvdGhlciBpbiB0aGUgaGFzaCBidWNrZXRzIGJhc2VkIG9uIHRoZWlyIGZpbGUKK25hbWVzLiAgSXQgdXNlZCB0byBiZSB0aGF0ICJmb28vTWFrZWZpbGUiLCAiYmFyL2Jhei9xdXV4L01ha2VmaWxlIiBhbmQKKyJNYWtlZmlsZSIgYWxsIGxhbmRlZCBpbiB0aGUgc2FtZSBidWNrZXQgZHVlIHRvIHRoZWlyIGNvbW1vbiBiYXNlbmFtZSwKKyJNYWtlZmlsZSIuIEhvd2V2ZXIsIG5vdyB0aGV5IGxhbmQgaW4gImNsb3NlIiBidWNrZXRzLgorCitUaGUgYWxnb3JpdGhtIGFsbG93cyBub3QganVzdCBmb3IgdGhlIF9zYW1lXyBidWNrZXQsIGJ1dCBmb3IgX2Nsb3NlXworYnVja2V0cyB0byBiZSBjb25zaWRlcmVkIGRlbHRhIGNhbmRpZGF0ZXMuICBUaGUgcmF0aW9uYWxlIGlzCitlc3NlbnRpYWxseSB0aGF0IGZpbGVzLCBsaWtlIE1ha2VmaWxlcywgb2Z0ZW4gaGF2ZSB2ZXJ5IHNpbWlsYXIKK2NvbnRlbnQgbm8gbWF0dGVyIHdoYXQgZGlyZWN0b3J5IHRoZXkgbGl2ZSBpbi4KKworICAgIDxsaW51cz4gSSBwbGF5ZWQgYXJvdW5kIHdpdGggZGlmZmVyZW50IGRlbHRhIGFsZ29yaXRobXMsIGFuZCB3aXRoCisgICAgICAgIG1ha2luZyB0aGUgImRlbHRhIHdpbmRvdyIgYmlnZ2VyLCBidXQgaGF2aW5nIHRvbyBiaWcgb2YgYQorICAgICAgICBzbGlkaW5nIHdpbmRvdyBtYWtlcyBpdCB2ZXJ5IGV4cGVuc2l2ZSB0byBnZW5lcmF0ZSB0aGUgcGFjazoKKyAgICAgICAgeW91IG5lZWQgdG8gY29tcGFyZSBldmVyeSBvYmplY3Qgd2l0aCBhIF90b25fIG9mIG90aGVyIG9iamVjdHMuCisKKyAgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG90aGVyIHRyaXZpYWwgaGV1cmlzdGljcyB0b28sIHdoaWNoCisgICAgICAgIGJhc2ljYWxseSBib2lsIGRvd24gdG8gImRvbid0IGJvdGhlciBldmVuIHRyeWluZyB0byBkZWx0YSB0aGlzCisgICAgICAgIHBhaXIiIGlmIHdlIGNhbiB0ZWxsIGJlZm9yZS1oYW5kIHRoYXQgdGhlIGRlbHRhIGlzbid0IHdvcnRoIGl0CisgICAgICAgIChkdWUgdG8gc2l6ZSBkaWZmZXJlbmNlcywgd2hlcmUgd2UgY2FuIHRha2UgYSBwcmV2aW91cyBkZWx0YQorICAgICAgICByZXN1bHQgaW50byBhY2NvdW50IHRvIGRlY2lkZSB0aGF0ICJvaywgbm8gcG9pbnQgaW4gdHJ5aW5nCisgICAgICAgIHRoYXQgb25lLCBpdCB3aWxsIGJlIHdvcnNlIikuCisKKyAgICAgICAgRW5kIHJlc3VsdDogcGFja2luZyBpcyBhY3R1YWxseSB2ZXJ5IHNpemUgZWZmaWNpZW50LiBJdCdzCisgICAgICAgIHNvbWV3aGF0IENQVS13YXN0ZWZ1bCwgYnV0IG9uIHRoZSBvdGhlciBoYW5kLCBzaW5jZSB5b3UncmUKKyAgICAgICAgcmVhbGx5IG9ubHkgc3VwcG9zZWQgdG8gZG8gaXQgbWF5YmUgb25jZSBhIG1vbnRoIChhbmQgeW91IGNhbgorICAgICAgICBkbyBpdCBkdXJpbmcgdGhlIG5pZ2h0KSwgbm9ib2R5IHJlYWxseSBzZWVtcyB0byBjYXJlLgorCitOaWNlIEVuZ2luZWVyaW5nIFRvdWNoLCB0aGVyZS4gIEZpbmQgd2hlbiBpdCBkb2Vzbid0IG1hdHRlciwgYW5kCitwcm9jbGFpbSBpdCBhIG5vbi1pc3N1ZS4gIEdvb2Qgc3R5bGUgdG9vIQorCisgICAgPG5qc2A+IFNvLCBqdXN0IHRvIHJlcGVhdCB0byBzZWUgaWYgSSdtIGZvbGxvd2luZywgd2Ugc3RhcnQgYnkKKyAgICAgICAgZ2V0dGluZyBhIGxpc3Qgb2YgdGhlIG9iamVjdHMgd2Ugd2FudCB0byBwYWNrLCB3ZSBzb3J0IGl0IGJ5CisgICAgICAgIHRoaXMgaGV1cmlzdGljIChiYXNpY2FsbHkgbGV4aWNvZ3JhcGhpY2FsbHkgb24gdGhlIHR1cGxlCisgICAgICAgICh0eXBlLCBiYXNlbmFtZSwgc2l6ZSkpLgorCisgICAgICAgIFRoZW4gd2Ugd2FsayB0aHJvdWdoIHRoaXMgbGlzdCwgYW5kIGNhbGN1bGF0ZSBhIGRlbHRhIG9mCisgICAgICAgIGVhY2ggb2JqZWN0IGFnYWluc3QgdGhlIGxhc3QgbiAodHVuYWJsZSBwYXJhbWV0ZXIpIG9iamVjdHMsCisgICAgICAgIGFuZCBwaWNrIHRoZSBzbWFsbGVzdCBvZiB0aGVzZSBkZWx0YXMuCisKK1Zhc3RseSBzaW1wbGlmaWVkLCBidXQgdGhlIGVzc2VuY2UgaXMgdGhlcmUhCisKKyAgICA8bGludXM+IENvcnJlY3QuCisKKyAgICA8bmpzYD4gQW5kIHRoZW4gb25jZSB3ZSBoYXZlIHBpY2tlZCBhIGRlbHRhIG9yIGZ1bGx0ZXh0IHRvCisgICAgICAgIHJlcHJlc2VudCBlYWNoIG9iamVjdCwgd2UgcmUtc29ydCBieSByZWNlbmN5LCBhbmQgd3JpdGUgdGhlbQorICAgICAgICBvdXQgaW4gdGhhdCBvcmRlci4KKworICAgIDxsaW51cz4gWXVwLiBTb21lIG90aGVyIHNtYWxsIGRldGFpbHM6CisKK0FuZCBvZiBjb3Vyc2UgdGhlcmUgaXMgdGhlICJPdGhlciBTaG9lIiBGYWN0b3IgdG9vLgorCisgICAgPGxpbnVzPiAtIFdlIGxpbWl0IHRoZSBkZWx0YSBkZXB0aCB0byBhbm90aGVyIG1hZ2ljIHZhbHVlIChyaWdodAorICAgICAgICBub3cgYm90aCB0aGUgd2luZG93IGFuZCBkZWx0YSBkZXB0aCBtYWdpYyB2YWx1ZXMgYXJlIGp1c3QgIjEwIikKKworICAgIDxuanNgPiBIcm0sIG15IGludHVpdGlvbiBpcyB0aGF0IHlvdSdkIGVuZCB1cCB3aXRoIHJlYWxseSBfYmFkXyBJTworICAgICAgICBwYXR0ZXJucywgYmVjYXVzZSB0aGUgdGhpbmdzIHlvdSB3YW50IGFyZSBuZWFyIGJ5LCBidXQgdG8KKyAgICAgICAgYWN0dWFsbHkgcmVjb25zdHJ1Y3QgdGhlbSB5b3UgbWF5IGhhdmUgdG8ganVtcCBhbGwgb3ZlciBpbgorICAgICAgICByYW5kb20gd2F5cy4KKworICAgIDxsaW51cz4gLSBXaGVuIHdlIHdyaXRlIG91dCBhIGRlbHRhLCBhbmQgd2UgaGF2ZW4ndCB5ZXQgd3JpdHRlbgorICAgICAgICBvdXQgdGhlIG9iamVjdCBpdCBpcyBhIGRlbHRhIGFnYWluc3QsIHdlIHdyaXRlIG91dCB0aGUgYmFzZQorICAgICAgICBvYmplY3QgZmlyc3QuICBBbmQgbm8sIHdoZW4gd2UgcmVjb25zdHJ1Y3QgdGhlbSwgd2UgYWN0dWFsbHkKKyAgICAgICAgZ2V0IG5pY2UgSU8gcGF0dGVybnMsIGJlY2F1c2U6CisgICAgICAgIC0gbGFyZ2VyIG9iamVjdHMgdGVuZCB0byBiZSAibW9yZSByZWNlbnQiIChMaW51cycgbGF3OiBmaWxlcyBncm93KQorICAgICAgICAtIHdlIGFjdGl2ZWx5IHRyeSB0byBnZW5lcmF0ZSBkZWx0YXMgZnJvbSBhIGxhcmdlciBvYmplY3QgdG8gYQorICAgICAgICAgIHNtYWxsZXIgb25lCisgICAgICAgIC0gdGhpcyBtZWFucyB0aGF0IHRoZSB0b3Atb2YtdHJlZSB2ZXJ5IHNlbGRvbSBoYXMgZGVsdGFzCisgICAgICAgICAgKGkuZS4gZGVsdGFzIGluIF9wcmFjdGljZV8gYXJlICJiYWNrd2FyZHMgZGVsdGFzIikKKworQWdhaW4sIHdlIHNob3VsZCByZXJlYWQgdGhhdCB3aG9sZSBwYXJhZ3JhcGguICBOb3QganVzdCBiZWNhdXNlCitMaW51cyBoYXMgc2xpcHBlZCBMaW51cydzIExhdyBpbiB0aGVyZSBvbiB1cywgYnV0IGJlY2F1c2UgaXQgaXMKK2ltcG9ydGFudC4gIExldCdzIG1ha2Ugc3VyZSB3ZSBjbGFyaWZ5IHNvbWUgb2YgdGhlIHBvaW50cyBoZXJlOgorCisgICAgPG5qc2A+IFNvIHRoZSBwb2ludCBpcyBqdXN0IHRoYXQgaW4gcHJhY3RpY2UsIGRlbHRhIG9yZGVyIGFuZAorICAgICAgICByZWNlbmN5IG9yZGVyIG1hdGNoIGVhY2ggb3RoZXIgcXVpdGUgd2VsbC4KKworICAgIDxsaW51cz4gWWVzLiBUaGVyZSdzIGFub3RoZXIgbmljZSBzaWRlIHRvIHRoaXMgKGFuZCB5ZXMsIGl0IHdhcworCWRlc2lnbmVkIHRoYXQgd2F5IDspOgorICAgICAgICAtIHRoZSByZWFzb24gd2UgZ2VuZXJhdGUgZGVsdGFzIGFnYWluc3QgdGhlIGxhcmdlciBvYmplY3QgaXMKKwkgIGFjdHVhbGx5IGEgYmlnIHNwYWNlIHNhdmVyIHRvbyEKKworICAgIDxuanNgPiBIbW0sIGJ1dCB5b3VyIGxhc3QgY29tbWVudCAoaWYgIndlIGhhdmVuJ3QgeWV0IHdyaXR0ZW4gb3V0CisgICAgICAgIHRoZSBvYmplY3QgaXQgaXMgYSBkZWx0YSBhZ2FpbnN0LCB3ZSB3cml0ZSBvdXQgdGhlIGJhc2Ugb2JqZWN0CisgICAgICAgIGZpcnN0IiksIHNlZW1zIGxpa2UgaXQgd291bGQgbWFrZSB0aGVzZSBmYWN0cyBtb3N0bHkKKyAgICAgICAgaXJyZWxldmFudCBiZWNhdXNlIGV2ZW4gaWYgaW4gcHJhY3RpY2UgeW91IHdvdWxkIG5vdCBoYXZlIHRvCisgICAgICAgIHdhbmRlciBhcm91bmQgbXVjaCwgaW4gZmFjdCB5b3UganVzdCBicnV0ZS1mb3JjZSBzYXkgdGhhdCBpbgorICAgICAgICB0aGUgY2FzZXMgd2hlcmUgeW91IG1pZ2h0IGhhdmUgdG8gd2FuZGVyLCBkb24ndCBkbyB0aGF0IDotKQorCisgICAgPGxpbnVzPiBZZXMgYW5kIG5vLiBOb3RpY2UgdGhlIHJ1bGU6IHdlIG9ubHkgd3JpdGUgb3V0IHRoZSBiYXNlCisgICAgICAgIG9iamVjdCBmaXJzdCBpZiB0aGUgZGVsdGEgYWdhaW5zdCBpdCB3YXMgbW9yZSByZWNlbnQuICBUaGF0CisgICAgICAgIG1lYW5zIHRoYXQgeW91IGNhbiBhY3R1YWxseSBoYXZlIGRlbHRhcyB0aGF0IHJlZmVyIHRvIGEgYmFzZQorICAgICAgICBvYmplY3QgdGhhdCBpcyBfbm90XyBjbG9zZSB0byB0aGUgZGVsdGEgb2JqZWN0LCBidXQgdGhhdCBvbmx5CisgICAgICAgIGhhcHBlbnMgd2hlbiB0aGUgZGVsdGEgaXMgbmVlZGVkIHRvIGdlbmVyYXRlIGFuIF9vbGRfIG9iamVjdC4KKworICAgIDxsaW51cz4gU2VlPworCitZZWFoLCBuby4gIEkgbWlzc2VkIHRoYXQgb24gdGhlIGZpcnN0IHR3byBvciB0aHJlZSByZWFkaW5ncyBteXNlbGYuCisKKyAgICA8bGludXM+IFRoaXMga2VlcHMgdGhlIGZyb250IG9mIHRoZSBwYWNrIGRlbnNlLiBUaGUgZnJvbnQgb2YgdGhlCisgICAgICAgIHBhY2sgbmV2ZXIgY29udGFpbnMgZGF0YSB0aGF0IGlzbid0IHJlbGV2YW50IHRvIGEgInJlY2VudCIKKyAgICAgICAgb2JqZWN0LiAgVGhlIHNpemUgb3B0aW1pemF0aW9uIGNvbWVzIGZyb20gb3VyIHVzZSBvZiB4ZGVsdGEKKyAgICAgICAgKGJ1dCBpcyB0cnVlIGZvciBtYW55IG90aGVyIGRlbHRhIGFsZ29yaXRobXMpOiByZW1vdmluZyBkYXRhCisgICAgICAgIGlzIGNoZWFwZXIgKGluIHNpemUpIHRoYW4gYWRkaW5nIGRhdGEuCisKKyAgICAgICAgV2hlbiB5b3UgcmVtb3ZlIGRhdGEsIHlvdSBvbmx5IG5lZWQgdG8gc2F5ICJjb3B5IGJ5dGVzIG4tLW0iLgorCUluIGNvbnRyYXN0LCBpbiBhIGRlbHRhIHRoYXQgX2FkZHNfIGRhdGEsIHlvdSBoYXZlIHRvIHNheSAiYWRkCisgICAgICAgIHRoZXNlIGJ5dGVzOiAnYWN0dWFsIGRhdGEgZ29lcyBoZXJlJyIKKworICAgICoqKiBuanNgIGhhcyBxdWl0OiBSZWFkIGVycm9yOiAxMDQgKENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcikKKworICAgIDxsaW51cz4gVWhodWguIEkgaG9wZSBJIGRpZG4ndCBibG93IG5qc2AgbWluZC4KKworICAgICoqKiBuanNgIGhhcyBqb2luZWQgY2hhbm5lbCAjZ2l0CisKKyAgICA8cGFza3k+IDopCisKK1RoZSBzaWxlbnQgb2JzZXJ2ZXJzIGFyZSBhbXVzZWQuICBPZiBjb3Vyc2UuCisKK0FuZCBhcyBpZiBuanNgIHdhcyBleHBlY3RlZCB0byBiZSBvbW5pc2NpZW50OgorCisgICAgPGxpbnVzPiBuanMgLSBkaWQgeW91IG1pc3MgYW55dGhpbmc/CisKK09LLCBJJ2xsIHNwZWxsIGl0IG91dC4gIFRoYXQncyBHZWVrIEh1bW9yLiAgSWYgbmpzYCB3YXMgbm90IGFjdHVhbGx5Citjb25uZWN0ZWQgZm9yIGEgbGl0dGxlIGJpdCB0aGVyZSwgaG93IHdvdWxkIGhlIGtub3cgaWYgbWlzc2VkIGFueXRoaW5nCit3aGlsZSBoZSB3YXMgZGlzY29ubmVjdGVkPyAgSGUncyBhIGJlbmV2b2xlbnQgZGljdGF0b3Igd2l0aCBhIHNlbnNlIG9mCitodW1vciEgIFdlbGwgbm90ZWQhCisKKyAgICA8bmpzYD4gU3R1cGlkIHJvdXRlci4gIE9yIGdyZW1saW5zLCBvciB3aGF0ZXZlci4KKworSXQncyBhIGNoZWFwIHNob3QgYXQgQ2lzY28uICBUYWtlICdlbSB3aGVuIHlvdSBjYW4uCisKKyAgICA8bmpzYD4gWWVzIGFuZCBuby4gTm90aWNlIHRoZSBydWxlOiB3ZSBvbmx5IHdyaXRlIG91dCB0aGUgYmFzZQorICAgICAgICBvYmplY3QgZmlyc3QgaWYgdGhlIGRlbHRhIGFnYWluc3QgaXQgd2FzIG1vcmUgcmVjZW50LgorCisgICAgICAgIEknbSBnZXR0aW5nIGxvc3QgaW4gYWxsIHRoZXNlIG9yZGVycywgbGV0IG1lIHJlLXJlYWQgOi0pCisJU28gdGhlIHdyaXRlLW91dCBvcmRlciBpcyBmcm9tIG1vc3QgcmVjZW50IHRvIGxlYXN0IHJlY2VudD8KKyAgICAgICAgKENvbmNlaXZhYmx5IGl0IGNvdWxkIGJlIHRoZSBvcHBvc2l0ZSB3YXkgdG9vLCBJJ20gbm90IHN1cmUgaWYKKyAgICAgICAgd2UndmUgc2FpZCkgdGhvdWdoIG15IGNvbm5lY3Rpb24gYmFjayBhdCBob21lIGlzIGxvZ2dpbmcsIHNvIEkKKyAgICAgICAgY2FuIGp1c3QgcmVhZCB3aGF0IHlvdSBzYWlkIHRoZXJlIDotKQorCitBbmQgZm9yIHRob3NlIG9mIHlvdSBwYXlpbmcgYXR0ZW50aW9uLCB0aGUgT21uaXNjaWVudCBUcmljayBoYXMganVzdAorYmVlbiBkZXRhaWxlZCEKKworICAgIDxsaW51cz4gWWVzLCB3ZSBhbHdheXMgd3JpdGUgb3V0IG1vc3QgcmVjZW50IGZpcnN0CisKK0ZvciB0aGUgb3RoZXIgcmVjb3JkOgorCisgICAgPHBhc2t5PiBuanNgOiBodHRwOi8vcGFzdGViaW4uY29tLzU0Nzk2NQorCitUaGUgJ25ldCBuZXZlciBmb3JnZXRzLCBzbyB0aGF0IHNob3VsZCBiZSBnb29kIHVudGlsIHRoZSBlbmQgb2YgdGltZS4KKworICAgIDxuanNgPiBBbmQsIHllYWgsIEkgZ290IHRoZSBwYXJ0IGFib3V0IGRlZXBlci1pbi1oaXN0b3J5IHN0dWZmCisgICAgICAgIGhhdmluZyB3b3JzZSBJTyBjaGFyYWN0ZXJpc3RpY3MsIG9uZSBzb3J0IG9mIGRvZXNuJ3QgY2FyZS4KKworICAgIDxsaW51cz4gV2l0aCB0aGUgY2F2ZWF0IHRoYXQgaWYgdGhlICJtb3N0IHJlY2VudCIgbmVlZHMgYW4gb2xkZXIKKyAgICAgICAgb2JqZWN0IHRvIGRlbHRhIGFnYWluc3QgKGhleSwgc2hyaW5raW5nIHNvbWV0aW1lcyBkb2VzCisgICAgICAgIGhhcHBlbiksIHdlIHdyaXRlIG91dCB0aGUgb2xkIG9iamVjdCB3aXRoIHRoZSBkZWx0YS4KKworICAgIDxuanNgPiAoaWYgb25seSBpdCBoYXBwZW5lZCBtb3JlLi4uKQorCisgICAgPGxpbnVzPiBBbnl3YXksIHRoZSBwYWNrLWZpbGUgY291bGQgZWFzaWx5IGJlIGRlbnNlciBzdGlsbCwgYnV0CisgICAgICAgIGJlY2F1c2UgaXQncyB1c2VkIGJvdGggZm9yIHN0cmVhbWluZyAodGhlIGdpdCBwcm90b2NvbCkgYW5kCisgICAgICAgIGZvciBvbi1kaXNrLCBpdCBoYXMgYSBmZXcgcGVzc2ltaXphdGlvbnMuCisKK0FjdHVhbGx5LCBpdCBpcyBhIG1hZGUtdXAgd29yZC4gQnV0IGl0IGlzIGEgbWFkZS11cCB3b3JkIGJlaW5nCit1c2VkIGFzIHNldHVwIGZvciBhIGxhdGVyIG9wdGltaXphdGlvbiwgd2hpY2ggaXMgYSByZWFsIHdvcmQ6CisKKyAgICA8bGludXM+IEluIHBhcnRpY3VsYXIsIHdoaWxlIHRoZSBwYWNrLWZpbGUgaXMgdGhlbiBjb21wcmVzc2VkLAorICAgICAgICBpdCdzIGNvbXByZXNzZWQganVzdCBvbmUgb2JqZWN0IGF0IGEgdGltZSwgc28gdGhlIGFjdHVhbAorICAgICAgICBjb21wcmVzc2lvbiBmYWN0b3IgaXMgbGVzcyB0aGFuIGl0IGNvdWxkIGJlIGluIHRoZW9yeS4gQnV0IGl0CisgICAgICAgIG1lYW5zIHRoYXQgaXQncyBhbGwgbmljZSByYW5kb20tYWNjZXNzIHdpdGggYSBzaW1wbGUgaW5kZXggdG8KKyAgICAgICAgZG8gIm9iamVjdCBuYW1lLT5sb2NhdGlvbiBpbiBwYWNrZmlsZSIgdHJhbnNsYXRpb24uCisKKyAgICA8bmpzYD4gSSdtIGFzc3VtaW5nIHRoZSByZWFsIHdpbiBmb3IgZGVsdGEtaW5nIGxhcmdlLT5zbWFsbCBpcworICAgICAgICBtb3JlIGhvbW9nZW5lb3VzIHN0YXRpc3RpY3MgZm9yIGd6aXAgdG8gcnVuIG92ZXI/CisKKyAgICAgICAgKFlvdSBoYXZlIHRvIHB1dCB0aGUgYnl0ZXMgaW4gb25lIHBsYWNlIG9yIGFub3RoZXIsIGJ1dAorICAgICAgICBwdXR0aW5nIHRoZW0gaW4gYSBsYXJnZXIgYmxvYiB3aW5zIG9uIGNvbXByZXNzaW9uKQorCisgICAgICAgIEFjdHVhbGx5LCB3aGF0IGlzIHRoZSBjb21wcmVzc2lvbiBzdHJhdGVneSAtLSBlYWNoIGRlbHRhCisgICAgICAgIGluZGl2aWR1YWxseSBnemlwcGVkLCB0aGUgd2hvbGUgZmlsZSBnemlwcGVkLCBzb21ld2hlcmUgaW4KKyAgICAgICAgYmV0d2Vlbiwgbm8gY29tcHJlc3Npb24gYXQgYWxsLCAuLi4uPworCisgICAgICAgIFJpZ2h0LgorCitSZWFsaXR5IElSQyBzZXRzIGluLiAgRm9yIGV4YW1wbGU6CisKKyAgICA8cGFza3k+IEknbGwgcmVhZCB0aGUgcmVzdCBpbiB0aGUgbW9ybmluZywgSSByZWFsbHkgaGF2ZSB0byBnbworICAgICAgICBzbGVlcCBvciB0aGVyZSdzIG5vIGhvcGUgd2hhdHNvZXZlciBmb3IgbWUgYXQgdGhlIHRvZGF5J3MKKyAgICAgICAgZXhhbS4uLiBnJ25pdGUgYWxsLgorCitIZWguCisKKyAgICA8bGludXM+IHBhc2t5OiBnJ25pdGUKKworICAgIDxuanNgPiBwYXNreTogJ2x1Y2sKKworICAgIDxsaW51cz4gUmlnaHQ6IGxhcmdlLT5zbWFsbCBtYXR0ZXJzIGV4YWN0bHkgYmVjYXVzZSBvZiBjb21wcmVzc2lvbgorICAgICAgICBiZWhhdmlvdXIuIElmIGl0IHdhcyBub24tY29tcHJlc3NlZCwgaXQgcHJvYmFibHkgd291bGRuJ3QgbWFrZQorICAgICAgICBhbnkgZGlmZmVyZW5jZS4KKworICAgIDxuanNgPiB5ZWFoCisKKyAgICA8bGludXM+IEFueXdheTogSSdtIG5vdCBldmVuIHRyeWluZyB0byBjbGFpbSB0aGF0IHRoZSBwYWNrLWZpbGVzCisgICAgICAgIGFyZSBwZXJmZWN0LCBidXQgdGhleSBkbyB0ZW5kIHRvIGhhdmUgYSBuaWNlIGJhbGFuY2Ugb2YKKyAgICAgICAgZGVuc2l0eSB2cyBlYXNlLW9mIHVzZS4KKworR2FzcCEgIE9LLCBzYXZlZC4gIFRoYXQncyBhIGZhaXIgRW5naW5lZXJpbmcgdHJhZGUgb2ZmLiAgQ2xvc2UgY2FsbCEKK0luIGZhY3QsIExpbnVzIHJlZmxlY3RzIG9uIHNvbWUgQmFzaWMgRW5naW5lZXJpbmcgRnVuZGFtZW50YWxzLAorZGVzaWduIG9wdGlvbnMsIGV0Yy4KKworICAgIDxsaW51cz4gTW9yZSBpbXBvcnRhbnRseSwgdGhleSBhbGxvdyBnaXQgdG8gc3RpbGwgX2NvbmNlcHR1YWxseV8KKyAgICAgICAgbmV2ZXIgZGVhbCB3aXRoIGRlbHRhcyBhdCBhbGwsIGFuZCBiZSBhICJ3aG9sZSBvYmplY3QiIHN0b3JlLgorCisgICAgICAgIFdoaWNoIGhhcyBzb21lIHByb2JsZW1zICh3ZSBkaXNjdXNzZWQgYmFkIGh1Z2UtZmlsZQorICAgICAgICBiZWhhdmlvdXIgb24gdGhlIGdpdCBsaXN0cyB0aGUgb3RoZXIgZGF5KSwgYnV0IGl0IGRvZXMgbWVhbgorICAgICAgICB0aGF0IHRoZSBiYXNpYyBnaXQgY29uY2VwdHMgYXJlIHJlYWxseSByZWFsbHkgc2ltcGxlIGFuZAorICAgICAgICBzdHJhaWdodGZvcndhcmQuCisKKyAgICAgICAgSXQncyBhbGwgYmVlbiBxdWl0ZSBzdGFibGUuCisKKyAgICAgICAgV2hpY2ggSSB0aGluayBpcyB2ZXJ5IG11Y2ggYSByZXN1bHQgb2YgaGF2aW5nIHZlcnkgc2ltcGxlCisgICAgICAgIGJhc2ljIGlkZWFzLCBzbyB0aGF0IHRoZXJlJ3MgbmV2ZXIgYW55IGNvbmZ1c2lvbiBhYm91dCB3aGF0J3MKKyAgICAgICAgZ29pbmcgb24uCisKKyAgICAgICAgQnVncyBoYXBwZW4sIGJ1dCB0aGV5IGFyZSAic2ltcGxlIiBidWdzLiBBbmQgYnVncyB0aGF0CisgICAgICAgIGFjdHVhbGx5IGdldCBzb21lIG9iamVjdCBzdG9yZSBkZXRhaWwgd3JvbmcgYXJlIGFsbW9zdCBhbHdheXMKKyAgICAgICAgc28gb2J2aW91cyB0aGF0IHRoZXkgbmV2ZXIgZ28gYW55d2hlcmUuCisKKyAgICA8bmpzYD4gWWVhaC4KKworTnVmZiBzYWlkLgorCisgICAgPGxpbnVzPiBBbnl3YXkuICBJJ20gb2ZmIGZvciBiZWQuIEl0J3Mgbm90IDZBTSBoZXJlLCBidXQgSSd2ZSBnb3QKKwkgdGhyZWUga2lkcywgYW5kIGhhdmUgdG8gZ2V0IHVwIGVhcmx5IGluIHRoZSBtb3JuaW5nIHRvIHNlbmQKKwkgdGhlbSBvZmYuIEkgbmVlZCBteSBiZWF1dHkgc2xlZXAuCisKKyAgICA8bmpzYD4gOi0pCisKKyAgICA8bmpzYD4gYXBwcmVjaWF0ZSB0aGUgaW5mb2R1bXAsIEkgcmVhbGx5IHdhcyBmYWlsaW5nIHRvIGZpbmQgdGhlCisgICAgICAgIGRldGFpbHMgb24gZ2l0IHBhY2tzIDotKQorCitBbmQgbm93IHlvdSBrbm93IHRoZSByZXN0IG9mIHRoZSBzdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxZTIwZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0CkBAIC0wLDAgKzEsNTQ4IEBACitQYWNrZmlsZSB0cmFuc2ZlciBwcm90b2NvbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitHaXQgc3VwcG9ydHMgdHJhbnNmZXJyaW5nIGRhdGEgaW4gcGFja2ZpbGVzIG92ZXIgdGhlIHNzaDovLywgZ2l0Oi8vIGFuZAorZmlsZTovLyB0cmFuc3BvcnRzLiAgVGhlcmUgZXhpc3QgdHdvIHNldHMgb2YgcHJvdG9jb2xzLCBvbmUgZm9yIHB1c2hpbmcKK2RhdGEgZnJvbSBhIGNsaWVudCB0byBhIHNlcnZlciBhbmQgYW5vdGhlciBmb3IgZmV0Y2hpbmcgZGF0YSBmcm9tIGEKK3NlcnZlciB0byBhIGNsaWVudC4gIEFsbCB0aHJlZSB0cmFuc3BvcnRzIChzc2gsIGdpdCwgZmlsZSkgdXNlIHRoZSBzYW1lCitwcm90b2NvbCB0byB0cmFuc2ZlciBkYXRhLgorCitUaGUgcHJvY2Vzc2VzIGludm9rZWQgaW4gdGhlIGNhbm9uaWNhbCBHaXQgaW1wbGVtZW50YXRpb24gYXJlICd1cGxvYWQtcGFjaycKK29uIHRoZSBzZXJ2ZXIgc2lkZSBhbmQgJ2ZldGNoLXBhY2snIG9uIHRoZSBjbGllbnQgc2lkZSBmb3IgZmV0Y2hpbmcgZGF0YTsKK3RoZW4gJ3JlY2VpdmUtcGFjaycgb24gdGhlIHNlcnZlciBhbmQgJ3NlbmQtcGFjaycgb24gdGhlIGNsaWVudCBmb3IgcHVzaGluZworZGF0YS4gIFRoZSBwcm90b2NvbCBmdW5jdGlvbnMgdG8gaGF2ZSBhIHNlcnZlciB0ZWxsIGEgY2xpZW50IHdoYXQgaXMKK2N1cnJlbnRseSBvbiB0aGUgc2VydmVyLCB0aGVuIGZvciB0aGUgdHdvIHRvIG5lZ290aWF0ZSB0aGUgc21hbGxlc3QgYW1vdW50CitvZiBkYXRhIHRvIHNlbmQgaW4gb3JkZXIgdG8gZnVsbHkgdXBkYXRlIG9uZSBvciB0aGUgb3RoZXIuCisKK1RyYW5zcG9ydHMKKy0tLS0tLS0tLS0KK1RoZXJlIGFyZSB0aHJlZSB0cmFuc3BvcnRzIG92ZXIgd2hpY2ggdGhlIHBhY2tmaWxlIHByb3RvY29sIGlzCitpbml0aWF0ZWQuICBUaGUgR2l0IHRyYW5zcG9ydCBpcyBhIHNpbXBsZSwgdW5hdXRoZW50aWNhdGVkIHNlcnZlciB0aGF0Cit0YWtlcyB0aGUgY29tbWFuZCAoYWxtb3N0IGFsd2F5cyAndXBsb2FkLXBhY2snLCB0aG91Z2ggR2l0CitzZXJ2ZXJzIGNhbiBiZSBjb25maWd1cmVkIHRvIGJlIGdsb2JhbGx5IHdyaXRhYmxlLCBpbiB3aGljaCAncmVjZWl2ZS0KK3BhY2snIGluaXRpYXRpb24gaXMgYWxzbyBhbGxvd2VkKSB3aXRoIHdoaWNoIHRoZSBjbGllbnQgd2lzaGVzIHRvCitjb21tdW5pY2F0ZSBhbmQgZXhlY3V0ZXMgaXQgYW5kIGNvbm5lY3RzIGl0IHRvIHRoZSByZXF1ZXN0aW5nCitwcm9jZXNzLgorCitJbiB0aGUgU1NIIHRyYW5zcG9ydCwgdGhlIGNsaWVudCBqdXN0IHJ1bnMgdGhlICd1cGxvYWQtcGFjaycKK29yICdyZWNlaXZlLXBhY2snIHByb2Nlc3Mgb24gdGhlIHNlcnZlciBvdmVyIHRoZSBTU0ggcHJvdG9jb2wgYW5kIHRoZW4KK2NvbW11bmljYXRlcyB3aXRoIHRoYXQgaW52b2tlZCBwcm9jZXNzIG92ZXIgdGhlIFNTSCBjb25uZWN0aW9uLgorCitUaGUgZmlsZTovLyB0cmFuc3BvcnQgcnVucyB0aGUgJ3VwbG9hZC1wYWNrJyBvciAncmVjZWl2ZS1wYWNrJworcHJvY2VzcyBsb2NhbGx5IGFuZCBjb21tdW5pY2F0ZXMgd2l0aCBpdCBvdmVyIGEgcGlwZS4KKworR2l0IFRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLQorCitUaGUgR2l0IHRyYW5zcG9ydCBzdGFydHMgb2ZmIGJ5IHNlbmRpbmcgdGhlIGNvbW1hbmQgYW5kIHJlcG9zaXRvcnkKK29uIHRoZSB3aXJlIHVzaW5nIHRoZSBwa3QtbGluZSBmb3JtYXQsIGZvbGxvd2VkIGJ5IGEgTlVMIGJ5dGUgYW5kIGEKK2hvc3RuYW1lIHBhcmFtZXRlciwgdGVybWluYXRlZCBieSBhIE5VTCBieXRlLgorCisgICAwMDMyZ2l0LXVwbG9hZC1wYWNrIC9wcm9qZWN0LmdpdFwwaG9zdD1teXNlcnZlci5jb21cMAorCistLQorICAgZ2l0LXByb3RvLXJlcXVlc3QgPSByZXF1ZXN0LWNvbW1hbmQgU1AgcGF0aG5hbWUgTlVMIFsgaG9zdC1wYXJhbWV0ZXIgTlVMIF0KKyAgIHJlcXVlc3QtY29tbWFuZCAgID0gImdpdC11cGxvYWQtcGFjayIgLyAiZ2l0LXJlY2VpdmUtcGFjayIgLworCQkgICAgICAgImdpdC11cGxvYWQtYXJjaGl2ZSIgICA7IGNhc2Ugc2Vuc2l0aXZlCisgICBwYXRobmFtZSAgICAgICAgICA9ICooICV4MDEtZmYgKSA7IGV4Y2x1ZGUgTlVMCisgICBob3N0LXBhcmFtZXRlciAgICA9ICJob3N0PSIgaG9zdG5hbWUgWyAiOiIgcG9ydCBdCistLQorCitPbmx5IGhvc3QtcGFyYW1ldGVyIGlzIGFsbG93ZWQgaW4gdGhlIGdpdC1wcm90by1yZXF1ZXN0LiBDbGllbnRzCitNVVNUIE5PVCBhdHRlbXB0IHRvIHNlbmQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLiBJdCBpcyB1c2VkIGZvciB0aGUKK2dpdC1kYWVtb24gbmFtZSBiYXNlZCB2aXJ0dWFsIGhvc3RpbmcuICBTZWUgLS1pbnRlcnBvbGF0ZWQtcGF0aAorb3B0aW9uIHRvIGdpdCBkYWVtb24sIHdpdGggdGhlICVILyVDSCBmb3JtYXQgY2hhcmFjdGVycy4KKworQmFzaWNhbGx5IHdoYXQgdGhlIEdpdCBjbGllbnQgaXMgZG9pbmcgdG8gY29ubmVjdCB0byBhbiAndXBsb2FkLXBhY2snCitwcm9jZXNzIG9uIHRoZSBzZXJ2ZXIgc2lkZSBvdmVyIHRoZSBHaXQgcHJvdG9jb2wgaXMgdGhpczoKKworICAgJCBlY2hvIC1lIC1uIFwKKyAgICAgIjAwMzlnaXQtdXBsb2FkLXBhY2sgL3NjaGFjb24vZ2l0Ym9vay5naXRcMGhvc3Q9ZXhhbXBsZS5jb21cMCIgfAorICAgICBuYyAtdiBleGFtcGxlLmNvbSA5NDE4CisKK0lmIHRoZSBzZXJ2ZXIgcmVmdXNlcyB0aGUgcmVxdWVzdCBmb3Igc29tZSByZWFzb25zLCBpdCBjb3VsZCBhYm9ydAorZ3JhY2VmdWxseSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UuCisKKy0tLS0KKyAgZXJyb3ItbGluZSAgICAgPSAgUEtULUxJTkUoIkVSUiIgU1AgZXhwbGFuYXRpb24tdGV4dCkKKy0tLS0KKworCitTU0ggVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tCisKK0luaXRpYXRpbmcgdGhlIHVwbG9hZC1wYWNrIG9yIHJlY2VpdmUtcGFjayBwcm9jZXNzZXMgb3ZlciBTU0ggaXMKK2V4ZWN1dGluZyB0aGUgYmluYXJ5IG9uIHRoZSBzZXJ2ZXIgdmlhIFNTSCByZW1vdGUgZXhlY3V0aW9uLgorSXQgaXMgYmFzaWNhbGx5IGVxdWl2YWxlbnQgdG8gcnVubmluZyB0aGlzOgorCisgICAkIHNzaCBnaXQuZXhhbXBsZS5jb20gImdpdC11cGxvYWQtcGFjayAnL3Byb2plY3QuZ2l0JyIKKworRm9yIGEgc2VydmVyIHRvIHN1cHBvcnQgR2l0IHB1c2hpbmcgYW5kIHB1bGxpbmcgZm9yIGEgZ2l2ZW4gdXNlciBvdmVyCitTU0gsIHRoYXQgdXNlciBuZWVkcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgb25lIG9yIGJvdGggb2YgdGhvc2UKK2NvbW1hbmRzIHZpYSB0aGUgU1NIIHNoZWxsIHRoYXQgdGhleSBhcmUgcHJvdmlkZWQgb24gbG9naW4uICBPbiBzb21lCitzeXN0ZW1zLCB0aGF0IHNoZWxsIGFjY2VzcyBpcyBsaW1pdGVkIHRvIG9ubHkgYmVpbmcgYWJsZSB0byBydW4gdGhvc2UKK3R3byBjb21tYW5kcywgb3IgZXZlbiBqdXN0IG9uZSBvZiB0aGVtLgorCitJbiBhbiBzc2g6Ly8gZm9ybWF0IFVSSSwgaXQncyBhYnNvbHV0ZSBpbiB0aGUgVVJJLCBzbyB0aGUgJy8nIGFmdGVyCit0aGUgaG9zdCBuYW1lIChvciBwb3J0IG51bWJlcikgaXMgc2VudCBhcyBhbiBhcmd1bWVudCwgd2hpY2ggaXMgdGhlbgorcmVhZCBieSB0aGUgcmVtb3RlIGdpdC11cGxvYWQtcGFjayBleGFjdGx5IGFzIGlzLCBzbyBpdCdzIGVmZmVjdGl2ZWx5CithbiBhYnNvbHV0ZSBwYXRoIGluIHRoZSByZW1vdGUgZmlsZXN5c3RlbS4KKworICAgICAgIGdpdCBjbG9uZSBzc2g6Ly91c2VyQGV4YW1wbGUuY29tL3Byb2plY3QuZ2l0CisJCSAgICB8CisJCSAgICB2CisgICAgc3NoIHVzZXJAZXhhbXBsZS5jb20gImdpdC11cGxvYWQtcGFjayAnL3Byb2plY3QuZ2l0JyIKKworSW4gYSAidXNlckBob3N0OnBhdGgiIGZvcm1hdCBVUkksIGl0cyByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGhvbWUKK2RpcmVjdG9yeSwgYmVjYXVzZSB0aGUgR2l0IGNsaWVudCB3aWxsIHJ1bjoKKworICAgICBnaXQgY2xvbmUgdXNlckBleGFtcGxlLmNvbTpwcm9qZWN0LmdpdAorCQkgICAgfAorCQkgICAgdgorICBzc2ggdXNlckBleGFtcGxlLmNvbSAiZ2l0LXVwbG9hZC1wYWNrICdwcm9qZWN0LmdpdCciCisKK1RoZSBleGNlcHRpb24gaXMgaWYgYSAnficgaXMgdXNlZCwgaW4gd2hpY2ggY2FzZQord2UgZXhlY3V0ZSBpdCB3aXRob3V0IHRoZSBsZWFkaW5nICcvJy4KKworICAgICAgc3NoOi8vdXNlckBleGFtcGxlLmNvbS9+YWxpY2UvcHJvamVjdC5naXQsCisJCSAgICAgfAorCQkgICAgIHYKKyAgIHNzaCB1c2VyQGV4YW1wbGUuY29tICJnaXQtdXBsb2FkLXBhY2sgJ35hbGljZS9wcm9qZWN0LmdpdCciCisKK0EgZmV3IHRoaW5ncyB0byByZW1lbWJlciBoZXJlOgorCistIFRoZSAiY29tbWFuZCBuYW1lIiBpcyBzcGVsbGVkIHdpdGggZGFzaCAoZS5nLiBnaXQtdXBsb2FkLXBhY2spLCBidXQKKyAgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY2xpZW50OworCistIFRoZSByZXBvc2l0b3J5IHBhdGggaXMgYWx3YXlzIHF1b3RlZCB3aXRoIHNpbmdsZSBxdW90ZXMuCisKK0ZldGNoaW5nIERhdGEgRnJvbSBhIFNlcnZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gb25lIEdpdCByZXBvc2l0b3J5IHdhbnRzIHRvIGdldCBkYXRhIHRoYXQgYSBzZWNvbmQgcmVwb3NpdG9yeQoraGFzLCB0aGUgZmlyc3QgY2FuICdmZXRjaCcgZnJvbSB0aGUgc2Vjb25kLiAgVGhpcyBvcGVyYXRpb24gZGV0ZXJtaW5lcword2hhdCBkYXRhIHRoZSBzZXJ2ZXIgaGFzIHRoYXQgdGhlIGNsaWVudCBkb2VzIG5vdCB0aGVuIHN0cmVhbXMgdGhhdAorZGF0YSBkb3duIHRvIHRoZSBjbGllbnQgaW4gcGFja2ZpbGUgZm9ybWF0LgorCisKK1JlZmVyZW5jZSBEaXNjb3ZlcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB0aGUgY2xpZW50IGluaXRpYWxseSBjb25uZWN0cyB0aGUgc2VydmVyIHdpbGwgaW1tZWRpYXRlbHkgcmVzcG9uZAord2l0aCBhIGxpc3Rpbmcgb2YgZWFjaCByZWZlcmVuY2UgaXQgaGFzIChhbGwgYnJhbmNoZXMgYW5kIHRhZ3MpIGFsb25nCit3aXRoIHRoZSBvYmplY3QgbmFtZSB0aGF0IGVhY2ggcmVmZXJlbmNlIGN1cnJlbnRseSBwb2ludHMgdG8uCisKKyAgICQgZWNobyAtZSAtbiAiMDAzOWdpdC11cGxvYWQtcGFjayAvc2NoYWNvbi9naXRib29rLmdpdFwwaG9zdD1leGFtcGxlLmNvbVwwIiB8CisgICAgICBuYyAtdiBleGFtcGxlLmNvbSA5NDE4CisgICAwMDg4NzIxN2E3YzdlNTgyYzQ2Y2VjMjJhMTMwYWRmNGI5ZDdkOTUwZmJhMCBIRUFEXDBtdWx0aV9hY2sgdGhpbi1wYWNrIHNpZGUtYmFuZCBzaWRlLWJhbmQtNjRrIG9mcy1kZWx0YSBzaGFsbG93IG5vLXByb2dyZXNzIGluY2x1ZGUtdGFnCisgICAwMDQ0MWQzZmNkNWNlZDQ0NWQxYWJjNDAyMjI1YzBiOGExMjk5NjQxZjQ5NyByZWZzL2hlYWRzL2ludGVncmF0aW9uCisgICAwMDNmNzIxN2E3YzdlNTgyYzQ2Y2VjMjJhMTMwYWRmNGI5ZDdkOTUwZmJhMCByZWZzL2hlYWRzL21hc3RlcgorICAgMDAzY2I4OGQyNDQxY2FjMDk3N2ZhZjk4ZWZjODAzMDUwMTIxMTIyMzhkOWQgcmVmcy90YWdzL3YwLjkKKyAgIDAwM2M1MjUxMjg0ODBiOTZjODllNjQxOGIxZTQwOTA5YmY2YzViMmQ1ODBmIHJlZnMvdGFncy92MS4wCisgICAwMDNmZTkyZGY0ODc0M2I3YmM3ZDI2YmNhYWJmZGRkZTBhMWUyMGNhZTQ3YyByZWZzL3RhZ3MvdjEuMF57fQorICAgMDAwMAorCitTZXJ2ZXIgU0hPVUxEIHRlcm1pbmF0ZSBlYWNoIG5vbi1mbHVzaCBsaW5lIHVzaW5nIExGICgiXG4iKSB0ZXJtaW5hdG9yOworY2xpZW50IE1VU1QgTk9UIGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHRlcm1pbmF0b3IuCisKK1RoZSByZXR1cm5lZCByZXNwb25zZSBpcyBhIHBrdC1saW5lIHN0cmVhbSBkZXNjcmliaW5nIGVhY2ggcmVmIGFuZAoraXRzIGN1cnJlbnQgdmFsdWUuICBUaGUgc3RyZWFtIE1VU1QgYmUgc29ydGVkIGJ5IG5hbWUgYWNjb3JkaW5nIHRvCit0aGUgQyBsb2NhbGUgb3JkZXJpbmcuCisKK0lmIEhFQUQgaXMgYSB2YWxpZCByZWYsIEhFQUQgTVVTVCBhcHBlYXIgYXMgdGhlIGZpcnN0IGFkdmVydGlzZWQKK3JlZi4gIElmIEhFQUQgaXMgbm90IGEgdmFsaWQgcmVmLCBIRUFEIE1VU1QgTk9UIGFwcGVhciBpbiB0aGUKK2FkdmVydGlzZW1lbnQgbGlzdCBhdCBhbGwsIGJ1dCBvdGhlciByZWZzIG1heSBzdGlsbCBhcHBlYXIuCisKK1RoZSBzdHJlYW0gTVVTVCBpbmNsdWRlIGNhcGFiaWxpdHkgZGVjbGFyYXRpb25zIGJlaGluZCBhIE5VTCBvbiB0aGUKK2ZpcnN0IHJlZi4gVGhlIHBlZWxlZCB2YWx1ZSBvZiBhIHJlZiAodGhhdCBpcyAicmVmXnt9IikgTVVTVCBiZQoraW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHJlZiBpdHNlbGYsIGlmIHByZXNlbnRlZC4gQSBjb25mb3JtaW5nIHNlcnZlcgorTVVTVCBwZWVsIHRoZSByZWYgaWYgaXQncyBhbiBhbm5vdGF0ZWQgdGFnLgorCistLS0tCisgIGFkdmVydGlzZWQtcmVmcyAgPSAgKG5vLXJlZnMgLyBsaXN0LW9mLXJlZnMpCisJCSAgICAgIGZsdXNoLXBrdAorCisgIG5vLXJlZnMgICAgICAgICAgPSAgUEtULUxJTkUoemVyby1pZCBTUCAiY2FwYWJpbGl0aWVzXnt9IgorCQkgICAgICBOVUwgY2FwYWJpbGl0eS1saXN0IExGKQorCisgIGxpc3Qtb2YtcmVmcyAgICAgPSAgZmlyc3QtcmVmICpvdGhlci1yZWYKKyAgZmlyc3QtcmVmICAgICAgICA9ICBQS1QtTElORShvYmotaWQgU1AgcmVmbmFtZQorCQkgICAgICBOVUwgY2FwYWJpbGl0eS1saXN0IExGKQorCisgIG90aGVyLXJlZiAgICAgICAgPSAgUEtULUxJTkUob3RoZXItdGlwIC8gb3RoZXItcGVlbGVkKQorICBvdGhlci10aXAgICAgICAgID0gIG9iai1pZCBTUCByZWZuYW1lIExGCisgIG90aGVyLXBlZWxlZCAgICAgPSAgb2JqLWlkIFNQIHJlZm5hbWUgIl57fSIgTEYKKworICBjYXBhYmlsaXR5LWxpc3QgID0gIGNhcGFiaWxpdHkgKihTUCBjYXBhYmlsaXR5KQorICBjYXBhYmlsaXR5ICAgICAgID0gIDEqKExDX0FMUEhBIC8gRElHSVQgLyAiLSIgLyAiXyIpCisgIExDX0FMUEhBICAgICAgICAgPSAgJXg2MS03QQorLS0tLQorCitTZXJ2ZXIgYW5kIGNsaWVudCBNVVNUIHVzZSBsb3dlcmNhc2UgZm9yIG9iai1pZCwgYm90aCBNVVNUIHRyZWF0IG9iai1pZAorYXMgY2FzZS1pbnNlbnNpdGl2ZS4KKworU2VlIHByb3RvY29sLWNhcGFiaWxpdGllcy50eHQgZm9yIGEgbGlzdCBvZiBhbGxvd2VkIHNlcnZlciBjYXBhYmlsaXRpZXMKK2FuZCBkZXNjcmlwdGlvbnMuCisKK1BhY2tmaWxlIE5lZ290aWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLQorQWZ0ZXIgcmVmZXJlbmNlIGFuZCBjYXBhYmlsaXRpZXMgZGlzY292ZXJ5LCB0aGUgY2xpZW50IGNhbiBkZWNpZGUgdG8KK3Rlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbiBieSBzZW5kaW5nIGEgZmx1c2gtcGt0LCB0ZWxsaW5nIHRoZSBzZXJ2ZXIgaXQgY2FuCitub3cgZ3JhY2VmdWxseSB0ZXJtaW5hdGUsIGFuZCBkaXNjb25uZWN0LCB3aGVuIGl0IGRvZXMgbm90IG5lZWQgYW55IHBhY2sKK2RhdGEuIFRoaXMgY2FuIGhhcHBlbiB3aXRoIHRoZSBscy1yZW1vdGUgY29tbWFuZCwgYW5kIGFsc28gY2FuIGhhcHBlbiB3aGVuCit0aGUgY2xpZW50IGFscmVhZHkgaXMgdXAtdG8tZGF0ZS4KKworT3RoZXJ3aXNlLCBpdCBlbnRlcnMgdGhlIG5lZ290aWF0aW9uIHBoYXNlLCB3aGVyZSB0aGUgY2xpZW50IGFuZAorc2VydmVyIGRldGVybWluZSB3aGF0IHRoZSBtaW5pbWFsIHBhY2tmaWxlIG5lY2Vzc2FyeSBmb3IgdHJhbnNwb3J0IGlzLAorYnkgdGVsbGluZyB0aGUgc2VydmVyIHdoYXQgb2JqZWN0cyBpdCB3YW50cywgaXRzIHNoYWxsb3cgb2JqZWN0cworKGlmIGFueSksIGFuZCB0aGUgbWF4aW11bSBjb21taXQgZGVwdGggaXQgd2FudHMgKGlmIGFueSkuICBUaGUgY2xpZW50Cit3aWxsIGFsc28gc2VuZCBhIGxpc3Qgb2YgdGhlIGNhcGFiaWxpdGllcyBpdCB3YW50cyB0byBiZSBpbiBlZmZlY3QsCitvdXQgb2Ygd2hhdCB0aGUgc2VydmVyIHNhaWQgaXQgY291bGQgZG8gd2l0aCB0aGUgZmlyc3QgJ3dhbnQnIGxpbmUuCisKKy0tLS0KKyAgdXBsb2FkLXJlcXVlc3QgICAgPSAgd2FudC1saXN0CisJCSAgICAgICAqc2hhbGxvdy1saW5lCisJCSAgICAgICAqMWRlcHRoLXJlcXVlc3QKKwkJICAgICAgIGZsdXNoLXBrdAorCisgIHdhbnQtbGlzdCAgICAgICAgID0gIGZpcnN0LXdhbnQKKwkJICAgICAgICphZGRpdGlvbmFsLXdhbnQKKworICBzaGFsbG93LWxpbmUgICAgICA9ICBQS1RfTElORSgic2hhbGxvdyIgU1Agb2JqLWlkKQorCisgIGRlcHRoLXJlcXVlc3QgICAgID0gIFBLVF9MSU5FKCJkZWVwZW4iIFNQIGRlcHRoKQorCisgIGZpcnN0LXdhbnQgICAgICAgID0gIFBLVC1MSU5FKCJ3YW50IiBTUCBvYmotaWQgU1AgY2FwYWJpbGl0eS1saXN0IExGKQorICBhZGRpdGlvbmFsLXdhbnQgICA9ICBQS1QtTElORSgid2FudCIgU1Agb2JqLWlkIExGKQorCisgIGRlcHRoICAgICAgICAgICAgID0gIDEqRElHSVQKKy0tLS0KKworQ2xpZW50cyBNVVNUIHNlbmQgYWxsIHRoZSBvYmotaWRzIGl0IHdhbnRzIGZyb20gdGhlIHJlZmVyZW5jZQorZGlzY292ZXJ5IHBoYXNlIGFzICd3YW50JyBsaW5lcy4gQ2xpZW50cyBNVVNUIHNlbmQgYXQgbGVhc3Qgb25lCisnd2FudCcgY29tbWFuZCBpbiB0aGUgcmVxdWVzdCBib2R5LiBDbGllbnRzIE1VU1QgTk9UIG1lbnRpb24gYW4KK29iai1pZCBpbiBhICd3YW50JyBjb21tYW5kIHdoaWNoIGRpZCBub3QgYXBwZWFyIGluIHRoZSByZXNwb25zZQorb2J0YWluZWQgdGhyb3VnaCByZWYgZGlzY292ZXJ5LgorCitUaGUgY2xpZW50IE1VU1Qgd3JpdGUgYWxsIG9iai1pZHMgd2hpY2ggaXQgb25seSBoYXMgc2hhbGxvdyBjb3BpZXMKK29mIChtZWFuaW5nIHRoYXQgaXQgZG9lcyBub3QgaGF2ZSB0aGUgcGFyZW50cyBvZiBhIGNvbW1pdCkgYXMKKydzaGFsbG93JyBsaW5lcyBzbyB0aGF0IHRoZSBzZXJ2ZXIgaXMgYXdhcmUgb2YgdGhlIGxpbWl0YXRpb25zIG9mCit0aGUgY2xpZW50J3MgaGlzdG9yeS4gQ2xpZW50cyBNVVNUIE5PVCBtZW50aW9uIGFuIG9iai1pZCB3aGljaAoraXQgZG9lcyBub3Qga25vdyBleGlzdHMgb24gdGhlIHNlcnZlci4KKworVGhlIGNsaWVudCBub3cgc2VuZHMgdGhlIG1heGltdW0gY29tbWl0IGhpc3RvcnkgZGVwdGggaXQgd2FudHMgZm9yCit0aGlzIHRyYW5zYWN0aW9uLCB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaXQgd2FudHMgZnJvbSB0aGUKK3RpcCBvZiB0aGUgaGlzdG9yeSwgaWYgYW55LCBhcyBhICdkZWVwZW4nIGxpbmUuICBBIGRlcHRoIG9mIDAgaXMgdGhlCitzYW1lIGFzIG5vdCBtYWtpbmcgYSBkZXB0aCByZXF1ZXN0LiBUaGUgY2xpZW50IGRvZXMgbm90IHdhbnQgdG8gcmVjZWl2ZQorYW55IGNvbW1pdHMgYmV5b25kIHRoaXMgZGVwdGgsIG5vciBvYmplY3RzIG5lZWRlZCBvbmx5IHRvIGNvbXBsZXRlCit0aG9zZSBjb21taXRzLiBDb21taXRzIHdob3NlIHBhcmVudHMgYXJlIG5vdCByZWNlaXZlZCBhcyBhIHJlc3VsdCBhcmUKK2RlZmluZWQgYXMgc2hhbGxvdyBhbmQgbWFya2VkIGFzIHN1Y2ggaW4gdGhlIHNlcnZlci4gVGhpcyBpbmZvcm1hdGlvbgoraXMgc2VudCBiYWNrIHRvIHRoZSBjbGllbnQgaW4gdGhlIG5leHQgc3RlcC4KKworT25jZSBhbGwgdGhlICd3YW50J3MgYW5kICdzaGFsbG93J3MgKGFuZCBvcHRpb25hbCAnZGVlcGVuJykgYXJlCit0cmFuc2ZlcnJlZCwgY2xpZW50cyBNVVNUIHNlbmQgYSBmbHVzaC1wa3QsIHRvIHRlbGwgdGhlIHNlcnZlciBzaWRlCit0aGF0IGl0IGlzIGRvbmUgc2VuZGluZyB0aGUgbGlzdC4KKworT3RoZXJ3aXNlLCBpZiB0aGUgY2xpZW50IHNlbnQgYSBwb3NpdGl2ZSBkZXB0aCByZXF1ZXN0LCB0aGUgc2VydmVyCit3aWxsIGRldGVybWluZSB3aGljaCBjb21taXRzIHdpbGwgYW5kIHdpbGwgbm90IGJlIHNoYWxsb3cgYW5kCitzZW5kIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNsaWVudC4gSWYgdGhlIGNsaWVudCBkaWQgbm90IHJlcXVlc3QKK2EgcG9zaXRpdmUgZGVwdGgsIHRoaXMgc3RlcCBpcyBza2lwcGVkLgorCistLS0tCisgIHNoYWxsb3ctdXBkYXRlICAgPSAgKnNoYWxsb3ctbGluZQorCQkgICAgICAqdW5zaGFsbG93LWxpbmUKKwkJICAgICAgZmx1c2gtcGt0CisKKyAgc2hhbGxvdy1saW5lICAgICA9ICBQS1QtTElORSgic2hhbGxvdyIgU1Agb2JqLWlkKQorCisgIHVuc2hhbGxvdy1saW5lICAgPSAgUEtULUxJTkUoInVuc2hhbGxvdyIgU1Agb2JqLWlkKQorLS0tLQorCitJZiB0aGUgY2xpZW50IGhhcyByZXF1ZXN0ZWQgYSBwb3NpdGl2ZSBkZXB0aCwgdGhlIHNlcnZlciB3aWxsIGNvbXB1dGUKK3RoZSBzZXQgb2YgY29tbWl0cyB3aGljaCBhcmUgbm8gZGVlcGVyIHRoYW4gdGhlIGRlc2lyZWQgZGVwdGguIFRoZSBzZXQKK29mIGNvbW1pdHMgc3RhcnQgYXQgdGhlIGNsaWVudCdzIHdhbnRzLgorCitUaGUgc2VydmVyIHdyaXRlcyAnc2hhbGxvdycgbGluZXMgZm9yIGVhY2gKK2NvbW1pdCB3aG9zZSBwYXJlbnRzIHdpbGwgbm90IGJlIHNlbnQgYXMgYSByZXN1bHQuIFRoZSBzZXJ2ZXIgd3JpdGVzCithbiAndW5zaGFsbG93JyBsaW5lIGZvciBlYWNoIGNvbW1pdCB3aGljaCB0aGUgY2xpZW50IGhhcyBpbmRpY2F0ZWQgaXMKK3NoYWxsb3csIGJ1dCBpcyBubyBsb25nZXIgc2hhbGxvdyBhdCB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBkZXB0aAorKHRoYXQgaXMsIGl0cyBwYXJlbnRzIHdpbGwgbm93IGJlIHNlbnQpLiBUaGUgc2VydmVyIE1VU1QgTk9UIG1hcmsKK2FzIHVuc2hhbGxvdyBhbnl0aGluZyB3aGljaCB0aGUgY2xpZW50IGhhcyBub3QgaW5kaWNhdGVkIHdhcyBzaGFsbG93LgorCitOb3cgdGhlIGNsaWVudCB3aWxsIHNlbmQgYSBsaXN0IG9mIHRoZSBvYmotaWRzIGl0IGhhcyB1c2luZyAnaGF2ZScKK2xpbmVzLCBzbyB0aGUgc2VydmVyIGNhbiBtYWtlIGEgcGFja2ZpbGUgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBvYmplY3RzCit0aGF0IHRoZSBjbGllbnQgbmVlZHMuIEluIG11bHRpX2FjayBtb2RlLCB0aGUgY2Fub25pY2FsIGltcGxlbWVudGF0aW9uCit3aWxsIHNlbmQgdXAgdG8gMzIgb2YgdGhlc2UgYXQgYSB0aW1lLCB0aGVuIHdpbGwgc2VuZCBhIGZsdXNoLXBrdC4gVGhlCitjYW5vbmljYWwgaW1wbGVtZW50YXRpb24gd2lsbCBza2lwIGFoZWFkIGFuZCBzZW5kIHRoZSBuZXh0IDMyIGltbWVkaWF0ZWx5LAorc28gdGhhdCB0aGVyZSBpcyBhbHdheXMgYSBibG9jayBvZiAzMiAiaW4tZmxpZ2h0IG9uIHRoZSB3aXJlIiBhdCBhIHRpbWUuCisKKy0tLS0KKyAgdXBsb2FkLWhhdmVzICAgICAgPSAgaGF2ZS1saXN0CisJCSAgICAgICBjb21wdXRlLWVuZAorCisgIGhhdmUtbGlzdCAgICAgICAgID0gICpoYXZlLWxpbmUKKyAgaGF2ZS1saW5lICAgICAgICAgPSAgUEtULUxJTkUoImhhdmUiIFNQIG9iai1pZCBMRikKKyAgY29tcHV0ZS1lbmQgICAgICAgPSAgZmx1c2gtcGt0IC8gUEtULUxJTkUoImRvbmUiKQorLS0tLQorCitJZiB0aGUgc2VydmVyIHJlYWRzICdoYXZlJyBsaW5lcywgaXQgdGhlbiB3aWxsIHJlc3BvbmQgYnkgQUNLaW5nIGFueQorb2YgdGhlIG9iai1pZHMgdGhlIGNsaWVudCBzYWlkIGl0IGhhZCB0aGF0IHRoZSBzZXJ2ZXIgYWxzbyBoYXMuIFRoZQorc2VydmVyIHdpbGwgQUNLIG9iai1pZHMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoaWNoIGFjayBtb2RlIGlzCitjaG9zZW4gYnkgdGhlIGNsaWVudC4KKworSW4gbXVsdGlfYWNrIG1vZGU6CisKKyAgKiB0aGUgc2VydmVyIHdpbGwgcmVzcG9uZCB3aXRoICdBQ0sgb2JqLWlkIGNvbnRpbnVlJyBmb3IgYW55IGNvbW1vbgorICAgIGNvbW1pdHMuCisKKyAgKiBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGZvdW5kIGFuIGFjY2VwdGFibGUgY29tbW9uIGJhc2UgY29tbWl0IGFuZCBpcworICAgIHJlYWR5IHRvIG1ha2UgYSBwYWNrZmlsZSwgaXQgd2lsbCBibGluZGx5IEFDSyBhbGwgJ2hhdmUnIG9iai1pZHMKKyAgICBiYWNrIHRvIHRoZSBjbGllbnQuCisKKyAgKiB0aGUgc2VydmVyIHdpbGwgdGhlbiBzZW5kIGEgJ05BQ0snIGFuZCB0aGVuIHdhaXQgZm9yIGFub3RoZXIgcmVzcG9uc2UKKyAgICBmcm9tIHRoZSBjbGllbnQgLSBlaXRoZXIgYSAnZG9uZScgb3IgYW5vdGhlciBsaXN0IG9mICdoYXZlJyBsaW5lcy4KKworSW4gbXVsdGlfYWNrX2RldGFpbGVkIG1vZGU6CisKKyAgKiB0aGUgc2VydmVyIHdpbGwgZGlmZmVyZW50aWF0ZSB0aGUgQUNLcyB3aGVyZSBpdCBpcyBzaWduYWxpbmcKKyAgICB0aGF0IGl0IGlzIHJlYWR5IHRvIHNlbmQgZGF0YSB3aXRoICdBQ0sgb2JqLWlkIHJlYWR5JyBsaW5lcywgYW5kCisgICAgc2lnbmFscyB0aGUgaWRlbnRpZmllZCBjb21tb24gY29tbWl0cyB3aXRoICdBQ0sgb2JqLWlkIGNvbW1vbicgbGluZXMuCisKK1dpdGhvdXQgZWl0aGVyIG11bHRpX2FjayBvciBtdWx0aV9hY2tfZGV0YWlsZWQ6CisKKyAqIHVwbG9hZC1wYWNrIHNlbmRzICJBQ0sgb2JqLWlkIiBvbiB0aGUgZmlyc3QgY29tbW9uIG9iamVjdCBpdCBmaW5kcy4KKyAgIEFmdGVyIHRoYXQgaXQgc2F5cyBub3RoaW5nIHVudGlsIHRoZSBjbGllbnQgZ2l2ZXMgaXQgYSAiZG9uZSIuCisKKyAqIHVwbG9hZC1wYWNrIHNlbmRzICJOQUsiIG9uIGEgZmx1c2gtcGt0IGlmIG5vIGNvbW1vbiBvYmplY3QKKyAgIGhhcyBiZWVuIGZvdW5kIHlldC4gIElmIG9uZSBoYXMgYmVlbiBmb3VuZCwgYW5kIHRodXMgYW4gQUNLCisgICB3YXMgYWxyZWFkeSBzZW50LCBpdCdzIHNpbGVudCBvbiB0aGUgZmx1c2gtcGt0LgorCitBZnRlciB0aGUgY2xpZW50IGhhcyBnb3R0ZW4gZW5vdWdoIEFDSyByZXNwb25zZXMgdGhhdCBpdCBjYW4gZGV0ZXJtaW5lCit0aGF0IHRoZSBzZXJ2ZXIgaGFzIGVub3VnaCBpbmZvcm1hdGlvbiB0byBzZW5kIGFuIGVmZmljaWVudCBwYWNrZmlsZQorKGluIHRoZSBjYW5vbmljYWwgaW1wbGVtZW50YXRpb24sIHRoaXMgaXMgZGV0ZXJtaW5lZCB3aGVuIGl0IGhhcyByZWNlaXZlZAorZW5vdWdoIEFDS3MgdGhhdCBpdCBjYW4gY29sb3IgZXZlcnl0aGluZyBsZWZ0IGluIHRoZSAtLWRhdGUtb3JkZXIgcXVldWUKK2FzIGNvbW1vbiB3aXRoIHRoZSBzZXJ2ZXIsIG9yIHRoZSAtLWRhdGUtb3JkZXIgcXVldWUgaXMgZW1wdHkpLCBvciB0aGUKK2NsaWVudCBkZXRlcm1pbmVzIHRoYXQgaXQgd2FudHMgdG8gZ2l2ZSB1cCAoaW4gdGhlIGNhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbiwKK3RoaXMgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBjbGllbnQgc2VuZHMgMjU2ICdoYXZlJyBsaW5lcyB3aXRob3V0IGdldHRpbmcKK2FueSBvZiB0aGVtIEFDS2VkIGJ5IHRoZSBzZXJ2ZXIgLSBtZWFuaW5nIHRoZXJlIGlzIG5vdGhpbmcgaW4gY29tbW9uIGFuZAordGhlIHNlcnZlciBzaG91bGQganVzdCBzZW5kIGFsbCBvZiBpdHMgb2JqZWN0cyksIHRoZW4gdGhlIGNsaWVudCB3aWxsIHNlbmQKK2EgJ2RvbmUnIGNvbW1hbmQuICBUaGUgJ2RvbmUnIGNvbW1hbmQgc2lnbmFscyB0byB0aGUgc2VydmVyIHRoYXQgdGhlIGNsaWVudAoraXMgcmVhZHkgdG8gcmVjZWl2ZSBpdHMgcGFja2ZpbGUgZGF0YS4KKworSG93ZXZlciwgdGhlIDI1NiBsaW1pdCAqb25seSogdHVybnMgb24gaW4gdGhlIGNhbm9uaWNhbCBjbGllbnQKK2ltcGxlbWVudGF0aW9uIGlmIHdlIGhhdmUgcmVjZWl2ZWQgYXQgbGVhc3Qgb25lICJBQ0sgJXMgY29udGludWUiCitkdXJpbmcgYSBwcmlvciByb3VuZC4gIFRoaXMgaGVscHMgdG8gZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGNvbW1vbgorYW5jZXN0b3IgaXMgZm91bmQgYmVmb3JlIHdlIGdpdmUgdXAgZW50aXJlbHkuCisKK09uY2UgdGhlICdkb25lJyBsaW5lIGlzIHJlYWQgZnJvbSB0aGUgY2xpZW50LCB0aGUgc2VydmVyIHdpbGwgZWl0aGVyCitzZW5kIGEgZmluYWwgJ0FDSyBvYmotaWQnIG9yIGl0IHdpbGwgc2VuZCBhICdOQUsnLiBUaGUgc2VydmVyIG9ubHkgc2VuZHMKK0FDSyBhZnRlciAnZG9uZScgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNvbW1vbiBiYXNlIGFuZCBtdWx0aV9hY2sgb3IKK211bHRpX2Fja19kZXRhaWxlZCBpcyBlbmFibGVkLiBUaGUgc2VydmVyIGFsd2F5cyBzZW5kcyBOQUsgYWZ0ZXIgJ2RvbmUnCitpZiB0aGVyZSBpcyBubyBjb21tb24gYmFzZSBmb3VuZC4KKworVGhlbiB0aGUgc2VydmVyIHdpbGwgc3RhcnQgc2VuZGluZyBpdHMgcGFja2ZpbGUgZGF0YS4KKworLS0tLQorICBzZXJ2ZXItcmVzcG9uc2UgPSAqYWNrX211bHRpIGFjayAvIG5haworICBhY2tfbXVsdGkgICAgICAgPSBQS1QtTElORSgiQUNLIiBTUCBvYmotaWQgYWNrX3N0YXR1cyBMRikKKyAgYWNrX3N0YXR1cyAgICAgID0gImNvbnRpbnVlIiAvICJjb21tb24iIC8gInJlYWR5IgorICBhY2sgICAgICAgICAgICAgPSBQS1QtTElORSgiQUNLIFNQIG9iai1pZCBMRikKKyAgbmFrICAgICAgICAgICAgID0gUEtULUxJTkUoIk5BSyIgTEYpCistLS0tCisKK0Egc2ltcGxlIGNsb25lIG1heSBsb29rIGxpa2UgdGhpcyAod2l0aCBubyAnaGF2ZScgbGluZXMpOgorCistLS0tCisgICBDOiAwMDU0d2FudCA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIG11bHRpX2FjayBcCisgICAgIHNpZGUtYmFuZC02NGsgb2ZzLWRlbHRhXG4KKyAgIEM6IDAwMzJ3YW50IDdkMTY2NTE0NGEzYTk3NWMwNWYxZjQzOTAyZGRhZjA4NGU3ODRkYmVcbgorICAgQzogMDAzMndhbnQgNWEzZjZiZTc1NWJiYjdkZWFlNTAwNjU5ODhjYmZhMWZmYTlhYjY4YVxuCisgICBDOiAwMDMyd2FudCA3ZTQ3ZmUyYmQ4ZDAxZDQ4MWY0NGQ3YWYwNTMxYmQ5M2QzYjIxYzAxXG4KKyAgIEM6IDAwMzJ3YW50IDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmRcbgorICAgQzogMDAwMAorICAgQzogMDAwOWRvbmVcbgorCisgICBTOiAwMDA4TkFLXG4KKyAgIFM6IFtQQUNLRklMRV0KKy0tLS0KKworQW4gaW5jcmVtZW50YWwgdXBkYXRlIChmZXRjaCkgcmVzcG9uc2UgbWlnaHQgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0KKyAgIEM6IDAwNTR3YW50IDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgbXVsdGlfYWNrIFwKKyAgICAgc2lkZS1iYW5kLTY0ayBvZnMtZGVsdGFcbgorICAgQzogMDAzMndhbnQgN2QxNjY1MTQ0YTNhOTc1YzA1ZjFmNDM5MDJkZGFmMDg0ZTc4NGRiZVxuCisgICBDOiAwMDMyd2FudCA1YTNmNmJlNzU1YmJiN2RlYWU1MDA2NTk4OGNiZmExZmZhOWFiNjhhXG4KKyAgIEM6IDAwMDAKKyAgIEM6IDAwMzJoYXZlIDdlNDdmZTJiZDhkMDFkNDgxZjQ0ZDdhZjA1MzFiZDkzZDNiMjFjMDFcbgorICAgQzogWzMwIG1vcmUgaGF2ZSBsaW5lc10KKyAgIEM6IDAwMzJoYXZlIDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmRcbgorICAgQzogMDAwMAorCisgICBTOiAwMDNhQUNLIDdlNDdmZTJiZDhkMDFkNDgxZjQ0ZDdhZjA1MzFiZDkzZDNiMjFjMDEgY29udGludWVcbgorICAgUzogMDAzYUFDSyA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIGNvbnRpbnVlXG4KKyAgIFM6IDAwMDhOQUtcbgorCisgICBDOiAwMDA5ZG9uZVxuCisKKyAgIFM6IDAwMzFBQ0sgNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZFxuCisgICBTOiBbUEFDS0ZJTEVdCistLS0tCisKKworUGFja2ZpbGUgRGF0YQorLS0tLS0tLS0tLS0tLQorCitOb3cgdGhhdCB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgaGF2ZSBmaW5pc2hlZCBuZWdvdGlhdGlvbiBhYm91dCB3aGF0Cit0aGUgbWluaW1hbCBhbW91bnQgb2YgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHNlbnQgdG8gdGhlIGNsaWVudCBpcywgdGhlIHNlcnZlcgord2lsbCBjb25zdHJ1Y3QgYW5kIHNlbmQgdGhlIHJlcXVpcmVkIGRhdGEgaW4gcGFja2ZpbGUgZm9ybWF0LgorCitTZWUgcGFjay1mb3JtYXQudHh0IGZvciB3aGF0IHRoZSBwYWNrZmlsZSBpdHNlbGYgYWN0dWFsbHkgbG9va3MgbGlrZS4KKworSWYgJ3NpZGUtYmFuZCcgb3IgJ3NpZGUtYmFuZC02NGsnIGNhcGFiaWxpdGllcyBoYXZlIGJlZW4gc3BlY2lmaWVkIGJ5Cit0aGUgY2xpZW50LCB0aGUgc2VydmVyIHdpbGwgc2VuZCB0aGUgcGFja2ZpbGUgZGF0YSBtdWx0aXBsZXhlZC4KKworRWFjaCBwYWNrZXQgc3RhcnRpbmcgd2l0aCB0aGUgcGFja2V0LWxpbmUgbGVuZ3RoIG9mIHRoZSBhbW91bnQgb2YgZGF0YQordGhhdCBmb2xsb3dzLCBmb2xsb3dlZCBieSBhIHNpbmdsZSBieXRlIHNwZWNpZnlpbmcgdGhlIHNpZGViYW5kIHRoZQorZm9sbG93aW5nIGRhdGEgaXMgY29taW5nIGluIG9uLgorCitJbiAnc2lkZS1iYW5kJyBtb2RlLCBpdCB3aWxsIHNlbmQgdXAgdG8gOTk5IGRhdGEgYnl0ZXMgcGx1cyAxIGNvbnRyb2wKK2NvZGUsIGZvciBhIHRvdGFsIG9mIHVwIHRvIDEwMDAgYnl0ZXMgaW4gYSBwa3QtbGluZS4gIEluICdzaWRlLWJhbmQtNjRrJworbW9kZSBpdCB3aWxsIHNlbmQgdXAgdG8gNjU1MTkgZGF0YSBieXRlcyBwbHVzIDEgY29udHJvbCBjb2RlLCBmb3IgYQordG90YWwgb2YgdXAgdG8gNjU1MjAgYnl0ZXMgaW4gYSBwa3QtbGluZS4KKworVGhlIHNpZGViYW5kIGJ5dGUgd2lsbCBiZSBhICcxJywgJzInIG9yIGEgJzMnLiBTaWRlYmFuZCAnMScgd2lsbCBjb250YWluCitwYWNrZmlsZSBkYXRhLCBzaWRlYmFuZCAnMicgd2lsbCBiZSB1c2VkIGZvciBwcm9ncmVzcyBpbmZvcm1hdGlvbiB0aGF0IHRoZQorY2xpZW50IHdpbGwgZ2VuZXJhbGx5IHByaW50IHRvIHN0ZGVyciBhbmQgc2lkZWJhbmQgJzMnIGlzIHVzZWQgZm9yIGVycm9yCitpbmZvcm1hdGlvbi4KKworSWYgbm8gJ3NpZGUtYmFuZCcgY2FwYWJpbGl0eSB3YXMgc3BlY2lmaWVkLCB0aGUgc2VydmVyIHdpbGwgc3RyZWFtIHRoZQorZW50aXJlIHBhY2tmaWxlIHdpdGhvdXQgbXVsdGlwbGV4aW5nLgorCisKK1B1c2hpbmcgRGF0YSBUbyBhIFNlcnZlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1B1c2hpbmcgZGF0YSB0byBhIHNlcnZlciB3aWxsIGludm9rZSB0aGUgJ3JlY2VpdmUtcGFjaycgcHJvY2VzcyBvbiB0aGUKK3NlcnZlciwgd2hpY2ggd2lsbCBhbGxvdyB0aGUgY2xpZW50IHRvIHRlbGwgaXQgd2hpY2ggcmVmZXJlbmNlcyBpdCBzaG91bGQKK3VwZGF0ZSBhbmQgdGhlbiBzZW5kIGFsbCB0aGUgZGF0YSB0aGUgc2VydmVyIHdpbGwgbmVlZCBmb3IgdGhvc2UgbmV3CityZWZlcmVuY2VzIHRvIGJlIGNvbXBsZXRlLiAgT25jZSBhbGwgdGhlIGRhdGEgaXMgcmVjZWl2ZWQgYW5kIHZhbGlkYXRlZCwKK3RoZSBzZXJ2ZXIgd2lsbCB0aGVuIHVwZGF0ZSBpdHMgcmVmZXJlbmNlcyB0byB3aGF0IHRoZSBjbGllbnQgc3BlY2lmaWVkLgorCitBdXRoZW50aWNhdGlvbgorLS0tLS0tLS0tLS0tLS0KKworVGhlIHByb3RvY29sIGl0c2VsZiBjb250YWlucyBubyBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLiAgVGhhdCBpcyB0byBiZQoraGFuZGxlZCBieSB0aGUgdHJhbnNwb3J0LCBzdWNoIGFzIFNTSCwgYmVmb3JlIHRoZSAncmVjZWl2ZS1wYWNrJyBwcm9jZXNzIGlzCitpbnZva2VkLiAgSWYgJ3JlY2VpdmUtcGFjaycgaXMgY29uZmlndXJlZCBvdmVyIHRoZSBHaXQgdHJhbnNwb3J0LCB0aG9zZQorcmVwb3NpdG9yaWVzIHdpbGwgYmUgd3JpdGFibGUgYnkgYW55b25lIHdobyBjYW4gYWNjZXNzIHRoYXQgcG9ydCAoOTQxOCkgYXMKK3RoYXQgdHJhbnNwb3J0IGlzIHVuYXV0aGVudGljYXRlZC4KKworUmVmZXJlbmNlIERpc2NvdmVyeQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmVmZXJlbmNlIGRpc2NvdmVyeSBwaGFzZSBpcyBkb25lIG5lYXJseSB0aGUgc2FtZSB3YXkgYXMgaXQgaXMgaW4gdGhlCitmZXRjaGluZyBwcm90b2NvbC4gRWFjaCByZWZlcmVuY2Ugb2JqLWlkIGFuZCBuYW1lIG9uIHRoZSBzZXJ2ZXIgaXMgc2VudAoraW4gcGFja2V0LWxpbmUgZm9ybWF0IHRvIHRoZSBjbGllbnQsIGZvbGxvd2VkIGJ5IGEgZmx1c2gtcGt0LiAgVGhlIG9ubHkKK3JlYWwgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBjYXBhYmlsaXR5IGxpc3RpbmcgaXMgZGlmZmVyZW50IC0gdGhlIG9ubHkKK3Bvc3NpYmxlIHZhbHVlcyBhcmUgJ3JlcG9ydC1zdGF0dXMnLCAnZGVsZXRlLXJlZnMnIGFuZCAnb2ZzLWRlbHRhJy4KKworUmVmZXJlbmNlIFVwZGF0ZSBSZXF1ZXN0IGFuZCBQYWNrZmlsZSBUcmFuc2ZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbmNlIHRoZSBjbGllbnQga25vd3Mgd2hhdCByZWZlcmVuY2VzIHRoZSBzZXJ2ZXIgaXMgYXQsIGl0IGNhbiBzZW5kIGEKK2xpc3Qgb2YgcmVmZXJlbmNlIHVwZGF0ZSByZXF1ZXN0cy4gIEZvciBlYWNoIHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyCit0aGF0IGl0IHdhbnRzIHRvIHVwZGF0ZSwgaXQgc2VuZHMgYSBsaW5lIGxpc3RpbmcgdGhlIG9iai1pZCBjdXJyZW50bHkgb24KK3RoZSBzZXJ2ZXIsIHRoZSBvYmotaWQgdGhlIGNsaWVudCB3b3VsZCBsaWtlIHRvIHVwZGF0ZSBpdCB0byBhbmQgdGhlIG5hbWUKK29mIHRoZSByZWZlcmVuY2UuCisKK1RoaXMgbGlzdCBpcyBmb2xsb3dlZCBieSBhIGZsdXNoLXBrdCBhbmQgdGhlbiB0aGUgcGFja2ZpbGUgdGhhdCBzaG91bGQKK2NvbnRhaW4gYWxsIHRoZSBvYmplY3RzIHRoYXQgdGhlIHNlcnZlciB3aWxsIG5lZWQgdG8gY29tcGxldGUgdGhlIG5ldworcmVmZXJlbmNlcy4KKworLS0tLQorICB1cGRhdGUtcmVxdWVzdCAgICA9ICBjb21tYW5kLWxpc3QgW3BhY2stZmlsZV0KKworICBjb21tYW5kLWxpc3QgICAgICA9ICBQS1QtTElORShjb21tYW5kIE5VTCBjYXBhYmlsaXR5LWxpc3QgTEYpCisJCSAgICAgICAqUEtULUxJTkUoY29tbWFuZCBMRikKKwkJICAgICAgIGZsdXNoLXBrdAorCisgIGNvbW1hbmQgICAgICAgICAgID0gIGNyZWF0ZSAvIGRlbGV0ZSAvIHVwZGF0ZQorICBjcmVhdGUgICAgICAgICAgICA9ICB6ZXJvLWlkIFNQIG5ldy1pZCAgU1AgbmFtZQorICBkZWxldGUgICAgICAgICAgICA9ICBvbGQtaWQgIFNQIHplcm8taWQgU1AgbmFtZQorICB1cGRhdGUgICAgICAgICAgICA9ICBvbGQtaWQgIFNQIG5ldy1pZCAgU1AgbmFtZQorCisgIG9sZC1pZCAgICAgICAgICAgID0gIG9iai1pZAorICBuZXctaWQgICAgICAgICAgICA9ICBvYmotaWQKKworICBwYWNrLWZpbGUgICAgICAgICA9ICJQQUNLIiAyOCooT0NURVQpCistLS0tCisKK0lmIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgZGVsZXRlLXJlZnMsIHRoZSBzZW5kaW5nIGVuZCBNVVNUCitOT1QgYXNrIGZvciBkZWxldGUgY29tbWFuZC4KKworVGhlIHBhY2stZmlsZSBNVVNUIE5PVCBiZSBzZW50IGlmIHRoZSBvbmx5IGNvbW1hbmQgdXNlZCBpcyAnZGVsZXRlJy4KKworQSBwYWNrLWZpbGUgTVVTVCBiZSBzZW50IGlmIGVpdGhlciBjcmVhdGUgb3IgdXBkYXRlIGNvbW1hbmQgaXMgdXNlZCwKK2V2ZW4gaWYgdGhlIHNlcnZlciBhbHJlYWR5IGhhcyBhbGwgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLiAgSW4gdGhpcworY2FzZSB0aGUgY2xpZW50IE1VU1Qgc2VuZCBhbiBlbXB0eSBwYWNrLWZpbGUuICAgVGhlIG9ubHkgdGltZSB0aGlzCitpcyBsaWtlbHkgdG8gaGFwcGVuIGlzIGlmIHRoZSBjbGllbnQgaXMgY3JlYXRpbmcKK2EgbmV3IGJyYW5jaCBvciBhIHRhZyB0aGF0IHBvaW50cyB0byBhbiBleGlzdGluZyBvYmotaWQuCisKK1RoZSBzZXJ2ZXIgd2lsbCByZWNlaXZlIHRoZSBwYWNrZmlsZSwgdW5wYWNrIGl0LCB0aGVuIHZhbGlkYXRlIGVhY2gKK3JlZmVyZW5jZSB0aGF0IGlzIGJlaW5nIHVwZGF0ZWQgdGhhdCBpdCBoYXNuJ3QgY2hhbmdlZCB3aGlsZSB0aGUgcmVxdWVzdAord2FzIGJlaW5nIHByb2Nlc3NlZCAodGhlIG9iai1pZCBpcyBzdGlsbCB0aGUgc2FtZSBhcyB0aGUgb2xkLWlkKSwgYW5kCitpdCB3aWxsIHJ1biBhbnkgdXBkYXRlIGhvb2tzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1cGRhdGUgaXMgYWNjZXB0YWJsZS4KK0lmIGFsbCBvZiB0aGF0IGlzIGZpbmUsIHRoZSBzZXJ2ZXIgd2lsbCB0aGVuIHVwZGF0ZSB0aGUgcmVmZXJlbmNlcy4KKworUmVwb3J0IFN0YXR1cworLS0tLS0tLS0tLS0tLQorCitBZnRlciByZWNlaXZpbmcgdGhlIHBhY2sgZGF0YSBmcm9tIHRoZSBzZW5kZXIsIHRoZSByZWNlaXZlciBzZW5kcyBhCityZXBvcnQgaWYgJ3JlcG9ydC1zdGF0dXMnIGNhcGFiaWxpdHkgaXMgaW4gZWZmZWN0LgorSXQgaXMgYSBzaG9ydCBsaXN0aW5nIG9mIHdoYXQgaGFwcGVuZWQgaW4gdGhhdCB1cGRhdGUuICBJdCB3aWxsIGZpcnN0CitsaXN0IHRoZSBzdGF0dXMgb2YgdGhlIHBhY2tmaWxlIHVucGFja2luZyBhcyBlaXRoZXIgJ3VucGFjayBvaycgb3IKKyd1bnBhY2sgW2Vycm9yXScuICBUaGVuIGl0IHdpbGwgbGlzdCB0aGUgc3RhdHVzIGZvciBlYWNoIG9mIHRoZSByZWZlcmVuY2VzCit0aGF0IGl0IHRyaWVkIHRvIHVwZGF0ZS4gIEVhY2ggbGluZSBpcyBlaXRoZXIgJ29rIFtyZWZuYW1lXScgaWYgdGhlCit1cGRhdGUgd2FzIHN1Y2Nlc3NmdWwsIG9yICduZyBbcmVmbmFtZV0gW2Vycm9yXScgaWYgdGhlIHVwZGF0ZSB3YXMgbm90LgorCistLS0tCisgIHJlcG9ydC1zdGF0dXMgICAgID0gdW5wYWNrLXN0YXR1cworCQkgICAgICAxKihjb21tYW5kLXN0YXR1cykKKwkJICAgICAgZmx1c2gtcGt0CisKKyAgdW5wYWNrLXN0YXR1cyAgICAgPSBQS1QtTElORSgidW5wYWNrIiBTUCB1bnBhY2stcmVzdWx0IExGKQorICB1bnBhY2stcmVzdWx0ICAgICA9ICJvayIgLyBlcnJvci1tc2cKKworICBjb21tYW5kLXN0YXR1cyAgICA9IGNvbW1hbmQtb2sgLyBjb21tYW5kLWZhaWwKKyAgY29tbWFuZC1vayAgICAgICAgPSBQS1QtTElORSgib2siIFNQIHJlZm5hbWUgTEYpCisgIGNvbW1hbmQtZmFpbCAgICAgID0gUEtULUxJTkUoIm5nIiBTUCByZWZuYW1lIFNQIGVycm9yLW1zZyBMRikKKworICBlcnJvci1tc2cgICAgICAgICA9IDEqKE9DVEVDVCkgOyB3aGVyZSBub3QgIm9rIgorLS0tLQorCitVcGRhdGVzIGNhbiBiZSB1bnN1Y2Nlc3NmdWwgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMuICBUaGUgcmVmZXJlbmNlIGNhbiBoYXZlCitjaGFuZ2VkIHNpbmNlIHRoZSByZWZlcmVuY2UgZGlzY292ZXJ5IHBoYXNlIHdhcyBvcmlnaW5hbGx5IHNlbnQsIG1lYW5pbmcKK3NvbWVvbmUgcHVzaGVkIGluIHRoZSBtZWFudGltZS4gIFRoZSByZWZlcmVuY2UgYmVpbmcgcHVzaGVkIGNvdWxkIGJlIGEKK25vbi1mYXN0LWZvcndhcmQgcmVmZXJlbmNlIGFuZCB0aGUgdXBkYXRlIGhvb2tzIG9yIGNvbmZpZ3VyYXRpb24gY291bGQgYmUKK3NldCB0byBub3QgYWxsb3cgdGhhdCwgZXRjLiAgQWxzbywgc29tZSByZWZlcmVuY2VzIGNhbiBiZSB1cGRhdGVkIHdoaWxlIG90aGVycworY2FuIGJlIHJlamVjdGVkLgorCitBbiBleGFtcGxlIGNsaWVudC9zZXJ2ZXIgY29tbXVuaWNhdGlvbiBtaWdodCBsb29rIGxpa2UgdGhpczoKKworLS0tLQorICAgUzogMDA3Yzc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgcmVmcy9oZWFkcy9sb2NhbFwwcmVwb3J0LXN0YXR1cyBkZWxldGUtcmVmcyBvZnMtZGVsdGFcbgorICAgUzogMDAzZTdkMTY2NTE0NGEzYTk3NWMwNWYxZjQzOTAyZGRhZjA4NGU3ODRkYmUgcmVmcy9oZWFkcy9kZWJ1Z1xuCisgICBTOiAwMDNmNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCByZWZzL2hlYWRzL21hc3RlclxuCisgICBTOiAwMDNmNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCByZWZzL2hlYWRzL3RlYW1cbgorICAgUzogMDAwMAorCisgICBDOiAwMDNlN2QxNjY1MTQ0YTNhOTc1YzA1ZjFmNDM5MDJkZGFmMDg0ZTc4NGRiZSA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIHJlZnMvaGVhZHMvZGVidWdcbgorICAgQzogMDAzZTc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgNWEzZjZiZTc1NWJiYjdkZWFlNTAwNjU5ODhjYmZhMWZmYTlhYjY4YSByZWZzL2hlYWRzL21hc3RlclxuCisgICBDOiAwMDAwCisgICBDOiBbUEFDS0RBVEFdCisKKyAgIFM6IDAwMGV1bnBhY2sgb2tcbgorICAgUzogMDAxOG9rIHJlZnMvaGVhZHMvZGVidWdcbgorICAgUzogMDAyYW5nIHJlZnMvaGVhZHMvbWFzdGVyIG5vbi1mYXN0LWZvcndhcmRcbgorLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLWNhcGFiaWxpdGllcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1NTE3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLWNhcGFiaWxpdGllcy50eHQKQEAgLTAsMCArMSwxODcgQEAKK0dpdCBQcm90b2NvbCBDYXBhYmlsaXRpZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworU2VydmVycyBTSE9VTEQgc3VwcG9ydCBhbGwgY2FwYWJpbGl0aWVzIGRlZmluZWQgaW4gdGhpcyBkb2N1bWVudC4KKworT24gdGhlIHZlcnkgZmlyc3QgbGluZSBvZiB0aGUgaW5pdGlhbCBzZXJ2ZXIgcmVzcG9uc2Ugb2YgZWl0aGVyCityZWNlaXZlLXBhY2sgYW5kIHVwbG9hZC1wYWNrIHRoZSBmaXJzdCByZWZlcmVuY2UgaXMgZm9sbG93ZWQgYnkKK2EgTlVMIGJ5dGUgYW5kIHRoZW4gYSBsaXN0IG9mIHNwYWNlIGRlbGltaXRlZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzLgorVGhlc2UgYWxsb3cgdGhlIHNlcnZlciB0byBkZWNsYXJlIHdoYXQgaXQgY2FuIGFuZCBjYW5ub3Qgc3VwcG9ydAordG8gdGhlIGNsaWVudC4KKworQ2xpZW50IHdpbGwgdGhlbiBzZW5kIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2FwYWJpbGl0aWVzIGl0IHdhbnRzCit0byBiZSBpbiBlZmZlY3QuIFRoZSBjbGllbnQgTVVTVCBOT1QgYXNrIGZvciBjYXBhYmlsaXRpZXMgdGhlIHNlcnZlcgorZGlkIG5vdCBzYXkgaXQgc3VwcG9ydHMuCisKK1NlcnZlciBNVVNUIGRpYWdub3NlIGFuZCBhYm9ydCBpZiBjYXBhYmlsaXRpZXMgaXQgZG9lcyBub3QgdW5kZXJzdGFuZAord2FzIHNlbnQuICBTZXJ2ZXIgTVVTVCBOT1QgaWdub3JlIGNhcGFiaWxpdGllcyB0aGF0IGNsaWVudCByZXF1ZXN0ZWQKK2FuZCBzZXJ2ZXIgYWR2ZXJ0aXNlZC4gIEFzIGEgY29uc2VxdWVuY2Ugb2YgdGhlc2UgcnVsZXMsIHNlcnZlciBNVVNUCitOT1QgYWR2ZXJ0aXNlIGNhcGFiaWxpdGllcyBpdCBkb2VzIG5vdCB1bmRlcnN0YW5kLgorCitUaGUgJ3JlcG9ydC1zdGF0dXMnIGFuZCAnZGVsZXRlLXJlZnMnIGNhcGFiaWxpdGllcyBhcmUgc2VudCBhbmQKK3JlY29nbml6ZWQgYnkgdGhlIHJlY2VpdmUtcGFjayAocHVzaCB0byBzZXJ2ZXIpIHByb2Nlc3MuCisKK1RoZSAnb2ZzLWRlbHRhJyBjYXBhYmlsaXR5IGlzIHNlbnQgYW5kIHJlY29nbml6ZWQgYnkgYm90aCB1cGxvYWQtcGFjaworYW5kIHJlY2VpdmUtcGFjayBwcm90b2NvbHMuCisKK0FsbCBvdGhlciBjYXBhYmlsaXRpZXMgYXJlIG9ubHkgcmVjb2duaXplZCBieSB0aGUgdXBsb2FkLXBhY2sgKGZldGNoCitmcm9tIHNlcnZlcikgcHJvY2Vzcy4KKworbXVsdGlfYWNrCistLS0tLS0tLS0KKworVGhlICdtdWx0aV9hY2snIGNhcGFiaWxpdHkgYWxsb3dzIHRoZSBzZXJ2ZXIgdG8gcmV0dXJuICJBQ0sgb2JqLWlkCitjb250aW51ZSIgYXMgc29vbiBhcyBpdCBmaW5kcyBhIGNvbW1pdCB0aGF0IGl0IGNhbiB1c2UgYXMgYSBjb21tb24KK2Jhc2UsIGJldHdlZW4gdGhlIGNsaWVudCdzIHdhbnRzIGFuZCB0aGUgY2xpZW50J3MgaGF2ZSBzZXQuCisKK0J5IHNlbmRpbmcgdGhpcyBlYXJseSwgdGhlIHNlcnZlciBjYW4gcG90ZW50aWFsbHkgaGVhZCBvZmYgdGhlIGNsaWVudAorZnJvbSB3YWxraW5nIGFueSBmdXJ0aGVyIGRvd24gdGhhdCBwYXJ0aWN1bGFyIGJyYW5jaCBvZiB0aGUgY2xpZW50J3MKK3JlcG9zaXRvcnkgaGlzdG9yeS4gIFRoZSBjbGllbnQgbWF5IHN0aWxsIG5lZWQgdG8gd2FsayBkb3duIG90aGVyCiticmFuY2hlcywgc2VuZGluZyBoYXZlIGxpbmVzIGZvciB0aG9zZSwgdW50aWwgdGhlIHNlcnZlciBoYXMgYQorY29tcGxldGUgY3V0IGFjcm9zcyB0aGUgREFHLCBvciB0aGUgY2xpZW50IGhhcyBzYWlkICJkb25lIi4KKworV2l0aG91dCBtdWx0aV9hY2ssIGEgY2xpZW50IHNlbmRzIGhhdmUgbGluZXMgaW4gLS1kYXRlLW9yZGVyIHVudGlsCit0aGUgc2VydmVyIGhhcyBmb3VuZCBhIGNvbW1vbiBiYXNlLiAgVGhhdCBtZWFucyB0aGUgY2xpZW50IHdpbGwgc2VuZAoraGF2ZSBsaW5lcyB0aGF0IGFyZSBhbHJlYWR5IGtub3duIGJ5IHRoZSBzZXJ2ZXIgdG8gYmUgY29tbW9uLCBiZWNhdXNlCit0aGV5IG92ZXJsYXAgaW4gdGltZSB3aXRoIGFub3RoZXIgYnJhbmNoIHRoYXQgdGhlIHNlcnZlciBoYXNuJ3QgZm91bmQKK2EgY29tbW9uIGJhc2Ugb24geWV0LgorCitGb3IgZXhhbXBsZSBzdXBwb3NlIHRoZSBjbGllbnQgaGFzIGNvbW1pdHMgaW4gY2FwcyB0aGF0IHRoZSBzZXJ2ZXIKK2RvZXNuJ3QgYW5kIHRoZSBzZXJ2ZXIgaGFzIGNvbW1pdHMgaW4gbG93ZXIgY2FzZSB0aGF0IHRoZSBjbGllbnQKK2RvZXNuJ3QsIGFzIGluIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbToKKworICAgICAgICstLS0tIHUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB4CisgICAgICAvICAgICAgICAgICAgICArLS0tLS0geQorICAgICAvICAgICAgICAgICAgICAvCisgICAgYSAtLSBiIC0tIGMgLS0gZCAtLSBFIC0tIEYKKyAgICAgICBcCisJKy0tLSBRIC0tIFIgLS0gUworCitJZiB0aGUgY2xpZW50IHdhbnRzIHgseSBhbmQgc3RhcnRzIG91dCBieSBzYXlpbmcgaGF2ZSBGLFMsIHRoZSBzZXJ2ZXIKK2RvZXNuJ3Qga25vdyB3aGF0IEYsUyBpcy4gIEV2ZW50dWFsbHkgdGhlIGNsaWVudCBzYXlzICJoYXZlIGQiIGFuZAordGhlIHNlcnZlciBzZW5kcyAiQUNLIGQgY29udGludWUiIHRvIGxldCB0aGUgY2xpZW50IGtub3cgdG8gc3RvcAord2Fsa2luZyBkb3duIHRoYXQgbGluZSAoc28gZG9uJ3Qgc2VuZCBjLWItYSksIGJ1dCBpdCdzIG5vdCBkb25lIHlldCwKK2l0IG5lZWRzIGEgYmFzZSBmb3IgeC4gVGhlIGNsaWVudCBrZWVwcyBnb2luZyB3aXRoIFMtUi1RLCB1bnRpbCBhCitnZXRzIHJlYWNoZWQsIGF0IHdoaWNoIHBvaW50IHRoZSBzZXJ2ZXIgaGFzIGEgY2xlYXIgYmFzZSBhbmQgaXQgYWxsCitlbmRzLgorCitXaXRob3V0IG11bHRpX2FjayB0aGUgY2xpZW50IHdvdWxkIGhhdmUgc2VudCB0aGF0IGMtYi1hIGNoYWluIGFueXdheSwKK2ludGVybGVhdmVkIHdpdGggUy1SLVEuCisKK3RoaW4tcGFjaworLS0tLS0tLS0tCisKK1RoaXMgY2FwYWJpbGl0eSBtZWFucyB0aGF0IHRoZSBzZXJ2ZXIgY2FuIHNlbmQgYSAndGhpbicgcGFjaywgYSBwYWNrCit3aGljaCBkb2VzIG5vdCBjb250YWluIGJhc2Ugb2JqZWN0czsgaWYgdGhvc2UgYmFzZSBvYmplY3RzIGFyZSBhdmFpbGFibGUKK29uIGNsaWVudCBzaWRlLiBDbGllbnQgcmVxdWVzdHMgJ3RoaW4tcGFjaycgY2FwYWJpbGl0eSB3aGVuIGl0Cit1bmRlcnN0YW5kcyBob3cgdG8gInRoaWNrZW4iIGl0IGJ5IGFkZGluZyByZXF1aXJlZCBkZWx0YSBiYXNlcyBtYWtpbmcKK2l0IHNlbGYtY29udGFpbmVkLgorCitDbGllbnQgTVVTVCBOT1QgcmVxdWVzdCAndGhpbi1wYWNrJyBjYXBhYmlsaXR5IGlmIGl0IGNhbm5vdCB0dXJuIGEgdGhpbgorcGFjayBpbnRvIGEgc2VsZi1jb250YWluZWQgcGFjay4KKworCitzaWRlLWJhbmQsIHNpZGUtYmFuZC02NGsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNhcGFiaWxpdHkgbWVhbnMgdGhhdCBzZXJ2ZXIgY2FuIHNlbmQsIGFuZCBjbGllbnQgdW5kZXJzdGFuZCBtdWx0aXBsZXhlZAorcHJvZ3Jlc3MgcmVwb3J0cyBhbmQgZXJyb3IgaW5mbyBpbnRlcmxlYXZlZCB3aXRoIHRoZSBwYWNrZmlsZSBpdHNlbGYuCisKK1RoZXNlIHR3byBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIEEgbW9kZXJuIGNsaWVudCBhbHdheXMKK2Zhdm9ycyAnc2lkZS1iYW5kLTY0aycuCisKK0VpdGhlciBtb2RlIGluZGljYXRlcyB0aGF0IHRoZSBwYWNrZmlsZSBkYXRhIHdpbGwgYmUgc3RyZWFtZWQgYnJva2VuCit1cCBpbnRvIHBhY2tldHMgb2YgdXAgdG8gZWl0aGVyIDEwMDAgYnl0ZXMgaW4gdGhlIGNhc2Ugb2YgJ3NpZGVfYmFuZCcsCitvciA2NTUyMCBieXRlcyBpbiB0aGUgY2FzZSBvZiAnc2lkZV9iYW5kXzY0aycuIEVhY2ggcGFja2V0IGlzIG1hZGUgdXAKK29mIGEgbGVhZGluZyA0LWJ5dGUgcGt0LWxpbmUgbGVuZ3RoIG9mIGhvdyBtdWNoIGRhdGEgaXMgaW4gdGhlIHBhY2tldCwKK2ZvbGxvd2VkIGJ5IGEgMS1ieXRlIHN0cmVhbSBjb2RlLCBmb2xsb3dlZCBieSB0aGUgYWN0dWFsIGRhdGEuCisKK1RoZSBzdHJlYW0gY29kZSBjYW4gYmUgb25lIG9mOgorCisgMSAtIHBhY2sgZGF0YQorIDIgLSBwcm9ncmVzcyBtZXNzYWdlcworIDMgLSBmYXRhbCBlcnJvciBtZXNzYWdlIGp1c3QgYmVmb3JlIHN0cmVhbSBhYm9ydHMKKworVGhlICJzaWRlLWJhbmQtNjRrIiBjYXBhYmlsaXR5IGNhbWUgYWJvdXQgYXMgYSB3YXkgZm9yIG5ld2VyIGNsaWVudHMKK3RoYXQgY2FuIGhhbmRsZSBtdWNoIGxhcmdlciBwYWNrZXRzIHRvIHJlcXVlc3QgcGFja2V0cyB0aGF0IGFyZQorYWN0dWFsbHkgY3JhbW1lZCBuZWFybHkgZnVsbCwgd2hpbGUgbWFpbnRhaW5pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorZm9yIHRoZSBvbGRlciBjbGllbnRzLgorCitGdXJ0aGVyLCB3aXRoIHNpZGUtYmFuZCBhbmQgaXRzIHVwIHRvIDEwMDAtYnl0ZSBtZXNzYWdlcywgaXQncyBhY3R1YWxseQorOTk5IGJ5dGVzIG9mIHBheWxvYWQgYW5kIDEgYnl0ZSBmb3IgdGhlIHN0cmVhbSBjb2RlLiBXaXRoIHNpZGUtYmFuZC02NGssCitzYW1lIGRlYWwsIHlvdSBoYXZlIHVwIHRvIDY1NTE5IGJ5dGVzIG9mIGRhdGEgYW5kIDEgYnl0ZSBmb3IgdGhlIHN0cmVhbQorY29kZS4KKworVGhlIGNsaWVudCBNVVNUIHNlbmQgb25seSBtYXhpbXVtIG9mIG9uZSBvZiAic2lkZS1iYW5kIiBhbmQgInNpZGUtCitiYW5kLTY0ayIuICBTZXJ2ZXIgTVVTVCBkaWFnbm9zZSBpdCBhcyBhbiBlcnJvciBpZiBjbGllbnQgcmVxdWVzdHMKK2JvdGguCisKK29mcy1kZWx0YQorLS0tLS0tLS0tCisKK1NlcnZlciBjYW4gc2VuZCwgYW5kIGNsaWVudCB1bmRlcnN0YW5kIFBBQ0t2MiB3aXRoIGRlbHRhIHJlZmVycmluZyB0bworaXRzIGJhc2UgYnkgcG9zaXRpb24gaW4gcGFjayByYXRoZXIgdGhhbiBieSBhbiBvYmotaWQuICBUaGF0IGlzLCB0aGV5IGNhbgorc2VuZC9yZWFkIE9CSl9PRlNfREVMVEEgKGFrYSB0eXBlIDYpIGluIGEgcGFja2ZpbGUuCisKK3NoYWxsb3cKKy0tLS0tLS0KKworVGhpcyBjYXBhYmlsaXR5IGFkZHMgImRlZXBlbiIsICJzaGFsbG93IiBhbmQgInVuc2hhbGxvdyIgY29tbWFuZHMgdG8KK3RoZSAgZmV0Y2gtcGFjay91cGxvYWQtcGFjayBwcm90b2NvbCBzbyBjbGllbnRzIGNhbiByZXF1ZXN0IHNoYWxsb3cKK2Nsb25lcy4KKworbm8tcHJvZ3Jlc3MKKy0tLS0tLS0tLS0tCisKK1RoZSBjbGllbnQgd2FzIHN0YXJ0ZWQgd2l0aCAiZ2l0IGNsb25lIC1xIiBvciBzb21ldGhpbmcsIGFuZCBkb2Vzbid0Cit3YW50IHRoYXQgc2lkZSBiYW5kIDIuICBCYXNpY2FsbHkgdGhlIGNsaWVudCBqdXN0IHNheXMgIkkgZG8gbm90Cit3aXNoIHRvIHJlY2VpdmUgc3RyZWFtIDIgb24gc2lkZWJhbmQsIHNvIGRvIG5vdCBzZW5kIGl0IHRvIG1lLCBhbmQgaWYKK3lvdSBkaWQsIEkgd2lsbCBkcm9wIGl0IG9uIHRoZSBmbG9vciBhbnl3YXkiLiAgSG93ZXZlciwgdGhlIHNpZGViYW5kCitjaGFubmVsIDMgaXMgc3RpbGwgdXNlZCBmb3IgZXJyb3IgcmVzcG9uc2VzLgorCitpbmNsdWRlLXRhZworLS0tLS0tLS0tLS0KKworVGhlICdpbmNsdWRlLXRhZycgY2FwYWJpbGl0eSBpcyBhYm91dCBzZW5kaW5nIGFubm90YXRlZCB0YWdzIGlmIHdlIGFyZQorc2VuZGluZyBvYmplY3RzIHRoZXkgcG9pbnQgdG8uICBJZiB3ZSBwYWNrIGFuIG9iamVjdCB0byB0aGUgY2xpZW50LCBhbmQKK2EgdGFnIG9iamVjdCBwb2ludHMgZXhhY3RseSBhdCB0aGF0IG9iamVjdCwgd2UgcGFjayB0aGUgdGFnIG9iamVjdCB0b28uCitJbiBnZW5lcmFsIHRoaXMgYWxsb3dzIGEgY2xpZW50IHRvIGdldCBhbGwgbmV3IGFubm90YXRlZCB0YWdzIHdoZW4gaXQKK2ZldGNoZXMgYSBicmFuY2gsIGluIGEgc2luZ2xlIG5ldHdvcmsgY29ubmVjdGlvbi4KKworQ2xpZW50cyBNQVkgYWx3YXlzIHNlbmQgaW5jbHVkZS10YWcsIGhhcmRjb2RpbmcgaXQgaW50byBhIHJlcXVlc3Qgd2hlbgordGhlIHNlcnZlciBhZHZlcnRpc2VzIHRoaXMgY2FwYWJpbGl0eS4gVGhlIGRlY2lzaW9uIGZvciBhIGNsaWVudCB0bworcmVxdWVzdCBpbmNsdWRlLXRhZyBvbmx5IGhhcyB0byBkbyB3aXRoIHRoZSBjbGllbnQncyBkZXNpcmVzIGZvciB0YWcKK2RhdGEsIHdoZXRoZXIgb3Igbm90IGEgc2VydmVyIGhhZCBhZHZlcnRpc2VkIG9iamVjdHMgaW4gdGhlCityZWZzL3RhZ3MvKiBuYW1lc3BhY2UuCisKK1NlcnZlcnMgTVVTVCBwYWNrIHRoZSB0YWdzIGlmIHRoZWlyIHJlZmVycmFudCBpcyBwYWNrZWQgYW5kIHRoZSBjbGllbnQKK2hhcyByZXF1ZXN0ZWQgaW5jbHVkZS10YWdzLgorCitDbGllbnRzIE1VU1QgYmUgcHJlcGFyZWQgZm9yIHRoZSBjYXNlIHdoZXJlIGEgc2VydmVyIGhhcyBpZ25vcmVkCitpbmNsdWRlLXRhZyBhbmQgaGFzIG5vdCBhY3R1YWxseSBzZW50IHRhZ3MgaW4gdGhlIHBhY2suICBJbiBzdWNoCitjYXNlcyB0aGUgY2xpZW50IFNIT1VMRCBpc3N1ZSBhIHN1YnNlcXVlbnQgZmV0Y2ggdG8gYWNxdWlyZSB0aGUgdGFncwordGhhdCBpbmNsdWRlLXRhZyB3b3VsZCBoYXZlIG90aGVyd2lzZSBnaXZlbiB0aGUgY2xpZW50LgorCitUaGUgc2VydmVyIFNIT1VMRCBzZW5kIGluY2x1ZGUtdGFnLCBpZiBpdCBzdXBwb3J0cyBpdCwgcmVnYXJkbGVzcworb2Ygd2hldGhlciBvciBub3QgdGhlcmUgYXJlIHRhZ3MgYXZhaWxhYmxlLgorCityZXBvcnQtc3RhdHVzCistLS0tLS0tLS0tLS0tCisKK1RoZSB1cGxvYWQtcGFjayBwcm9jZXNzIGNhbiByZWNlaXZlIGEgJ3JlcG9ydC1zdGF0dXMnIGNhcGFiaWxpdHksCit3aGljaCB0ZWxscyBpdCB0aGF0IHRoZSBjbGllbnQgd2FudHMgYSByZXBvcnQgb2Ygd2hhdCBoYXBwZW5lZCBhZnRlcgorYSBwYWNrZmlsZSB1cGxvYWQgYW5kIHJlZmVyZW5jZSB1cGRhdGUuICBJZiB0aGUgcHVzaGluZyBjbGllbnQgcmVxdWVzdHMKK3RoaXMgY2FwYWJpbGl0eSwgYWZ0ZXIgdW5wYWNraW5nIGFuZCB1cGRhdGluZyByZWZlcmVuY2VzIHRoZSBzZXJ2ZXIKK3dpbGwgcmVzcG9uZCB3aXRoIHdoZXRoZXIgdGhlIHBhY2tmaWxlIHVucGFja2VkIHN1Y2Nlc3NmdWxseSBhbmQgaWYKK2VhY2ggcmVmZXJlbmNlIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4gIElmIGFueSBvZiB0aG9zZSB3ZXJlIG5vdAorc3VjY2Vzc2Z1bCwgaXQgd2lsbCBzZW5kIGJhY2sgYW4gZXJyb3IgbWVzc2FnZS4gIFNlZSBwYWNrLXByb3RvY29sLnR4dAorZm9yIGV4YW1wbGUgbWVzc2FnZXMuCisKK2RlbGV0ZS1yZWZzCistLS0tLS0tLS0tLQorCitJZiB0aGUgc2VydmVyIHNlbmRzIGJhY2sgdGhlICdkZWxldGUtcmVmcycgY2FwYWJpbGl0eSwgaXQgbWVhbnMgdGhhdAoraXQgaXMgY2FwYWJsZSBvZiBhY2NlcHRpbmcgYSB6ZXJvLWlkIHZhbHVlIGFzIHRoZSB0YXJnZXQKK3ZhbHVlIG9mIGEgcmVmZXJlbmNlIHVwZGF0ZS4gIEl0IGlzIG5vdCBzZW50IGJhY2sgYnkgdGhlIGNsaWVudCwgaXQKK3NpbXBseSBpbmZvcm1zIHRoZSBjbGllbnQgdGhhdCBpdCBjYW4gYmUgc2VudCB6ZXJvLWlkIHZhbHVlcwordG8gZGVsZXRlIHJlZmVyZW5jZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jb21tb24udHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY29tbW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjdmZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY29tbW9uLnR4dApAQCAtMCwwICsxLDk2IEBACitEb2N1bWVudGF0aW9uIENvbW1vbiB0byBQYWNrIGFuZCBIdHRwIFByb3RvY29scworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQUJORiBOb3RhdGlvbgorLS0tLS0tLS0tLS0tLQorCitBQk5GIG5vdGF0aW9uIGFzIGRlc2NyaWJlZCBieSBSRkMgNTIzNCBpcyB1c2VkIHdpdGhpbiB0aGUgcHJvdG9jb2wgZG9jdW1lbnRzLAorZXhjZXB0IHRoZSBmb2xsb3dpbmcgcmVwbGFjZW1lbnQgY29yZSBydWxlcyBhcmUgdXNlZDoKKy0tLS0KKyAgSEVYRElHICAgID0gIERJR0lUIC8gImEiIC8gImIiIC8gImMiIC8gImQiIC8gImUiIC8gImYiCistLS0tCisKK1dlIGFsc28gZGVmaW5lIHRoZSBmb2xsb3dpbmcgY29tbW9uIHJ1bGVzOgorLS0tLQorICBOVUwgICAgICAgPSAgJXgwMAorICB6ZXJvLWlkICAgPSAgNDAqIjAiCisgIG9iai1pZCAgICA9ICA0MCooSEVYRElHSVQpCisKKyAgcmVmbmFtZSAgPSAgIkhFQUQiCisgIHJlZm5hbWUgLz0gICJyZWZzLyIgPHNlZSBkaXNjdXNzaW9uIGJlbG93PgorLS0tLQorCitBIHJlZm5hbWUgaXMgYSBoaWVyYXJjaGljYWwgb2N0ZXQgc3RyaW5nIGJlZ2lubmluZyB3aXRoICJyZWZzLyIgYW5kCitub3QgdmlvbGF0aW5nIHRoZSAnZ2l0LWNoZWNrLXJlZi1mb3JtYXQnIGNvbW1hbmQncyB2YWxpZGF0aW9uIHJ1bGVzLgorTW9yZSBzcGVjaWZpY2FsbHksIHRoZXk6CisKKy4gVGhleSBjYW4gaW5jbHVkZSBzbGFzaCBgL2AgZm9yIGhpZXJhcmNoaWNhbCAoZGlyZWN0b3J5KQorICBncm91cGluZywgYnV0IG5vIHNsYXNoLXNlcGFyYXRlZCBjb21wb25lbnQgY2FuIGJlZ2luIHdpdGggYQorICBkb3QgYC5gLgorCisuIFRoZXkgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBgL2AuIFRoaXMgZW5mb3JjZXMgdGhlIHByZXNlbmNlIG9mIGEKKyAgY2F0ZWdvcnkgbGlrZSBgaGVhZHMvYCwgYHRhZ3MvYCBldGMuIGJ1dCB0aGUgYWN0dWFsIG5hbWVzIGFyZSBub3QKKyAgcmVzdHJpY3RlZC4KKworLiBUaGV5IGNhbm5vdCBoYXZlIHR3byBjb25zZWN1dGl2ZSBkb3RzIGAuLmAgYW55d2hlcmUuCisKKy4gVGhleSBjYW5ub3QgaGF2ZSBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMgKGkuZS4gYnl0ZXMgd2hvc2UKKyAgdmFsdWVzIGFyZSBsb3dlciB0aGFuIFwwNDAsIG9yIFwxNzcgYERFTGApLCBzcGFjZSwgdGlsZGUgYH5gLAorICBjYXJldCBgXmAsIGNvbG9uIGA6YCwgcXVlc3Rpb24tbWFyayBgP2AsIGFzdGVyaXNrIGAqYCwKKyAgb3Igb3BlbiBicmFja2V0IGBbYCBhbnl3aGVyZS4KKworLiBUaGV5IGNhbm5vdCBlbmQgd2l0aCBhIHNsYXNoIGAvYCBub3IgYSBkb3QgYC5gLgorCisuIFRoZXkgY2Fubm90IGVuZCB3aXRoIHRoZSBzZXF1ZW5jZSBgLmxvY2tgLgorCisuIFRoZXkgY2Fubm90IGNvbnRhaW4gYSBzZXF1ZW5jZSBgQHtgLgorCisuIFRoZXkgY2Fubm90IGNvbnRhaW4gYSBgXFxgLgorCisKK3BrdC1saW5lIEZvcm1hdAorLS0tLS0tLS0tLS0tLS0tCisKK011Y2ggKGJ1dCBub3QgYWxsKSBvZiB0aGUgcGF5bG9hZCBpcyBkZXNjcmliZWQgYXJvdW5kIHBrdC1saW5lcy4KKworQSBwa3QtbGluZSBpcyBhIHZhcmlhYmxlIGxlbmd0aCBiaW5hcnkgc3RyaW5nLiAgVGhlIGZpcnN0IGZvdXIgYnl0ZXMKK29mIHRoZSBsaW5lLCB0aGUgcGt0LWxlbiwgaW5kaWNhdGVzIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIGxpbmUsCitpbiBoZXhhZGVjaW1hbC4gIFRoZSBwa3QtbGVuIGluY2x1ZGVzIHRoZSA0IGJ5dGVzIHVzZWQgdG8gY29udGFpbgordGhlIGxlbmd0aCdzIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorCitBIHBrdC1saW5lIE1BWSBjb250YWluIGJpbmFyeSBkYXRhLCBzbyBpbXBsZW1lbnRvcnMgTVVTVCBlbnN1cmUKK3BrdC1saW5lIHBhcnNpbmcvZm9ybWF0dGluZyByb3V0aW5lcyBhcmUgOC1iaXQgY2xlYW4uCisKK0Egbm9uLWJpbmFyeSBsaW5lIFNIT1VMRCBCRSB0ZXJtaW5hdGVkIGJ5IGFuIExGLCB3aGljaCBpZiBwcmVzZW50CitNVVNUIGJlIGluY2x1ZGVkIGluIHRoZSB0b3RhbCBsZW5ndGguCisKK1RoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHBrdC1saW5lJ3MgZGF0YSBjb21wb25lbnQgaXMgNjU1MjAgYnl0ZXMuCitJbXBsZW1lbnRhdGlvbnMgTVVTVCBOT1Qgc2VuZCBwa3QtbGluZSB3aG9zZSBsZW5ndGggZXhjZWVkcyA2NTUyNAorKDY1NTIwIGJ5dGVzIG9mIHBheWxvYWQgKyA0IGJ5dGVzIG9mIGxlbmd0aCBkYXRhKS4KKworSW1wbGVtZW50YXRpb25zIFNIT1VMRCBOT1Qgc2VuZCBhbiBlbXB0eSBwa3QtbGluZSAoIjAwMDQiKS4KKworQSBwa3QtbGluZSB3aXRoIGEgbGVuZ3RoIGZpZWxkIG9mIDAgKCIwMDAwIiksIGNhbGxlZCBhIGZsdXNoLXBrdCwKK2lzIGEgc3BlY2lhbCBjYXNlIGFuZCBNVVNUIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgdGhhbiBhbiBlbXB0eQorcGt0LWxpbmUgKCIwMDA0IikuCisKKy0tLS0KKyAgcGt0LWxpbmUgICAgID0gIGRhdGEtcGt0IC8gZmx1c2gtcGt0CisKKyAgZGF0YS1wa3QgICAgID0gIHBrdC1sZW4gcGt0LXBheWxvYWQKKyAgcGt0LWxlbiAgICAgID0gIDQqKEhFWERJRykKKyAgcGt0LXBheWxvYWQgID0gIChwa3QtbGVuIC0gNCkqKE9DVEVUKQorCisgIGZsdXNoLXBrdCAgICA9ICIwMDAwIgorLS0tLQorCitFeGFtcGxlcyAoYXMgQy1zdHlsZSBzdHJpbmdzKToKKworLS0tLQorICBwa3QtbGluZSAgICAgICAgICBhY3R1YWwgdmFsdWUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICIwMDA2YVxuIiAgICAgICAgICJhXG4iCisgICIwMDA1YSIgICAgICAgICAgICJhIgorICAiMDAwYmZvb2JhclxuIiAgICAiZm9vYmFyXG4iCisgICIwMDA0IiAgICAgICAgICAgICIiCistLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhYTBjOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JhY3ktZ2l0LnR4dApAQCAtMCwwICsxLDE5NyBAQAorVXNlIG9mIGluZGV4IGFuZCBSYWN5IGdpdCBwcm9ibGVtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQmFja2dyb3VuZAorLS0tLS0tLS0tLQorCitUaGUgaW5kZXggaXMgb25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBkYXRhIHN0cnVjdHVyZXMgaW4gZ2l0LgorSXQgcmVwcmVzZW50cyBhIHZpcnR1YWwgd29ya2luZyB0cmVlIHN0YXRlIGJ5IHJlY29yZGluZyBsaXN0IG9mCitwYXRocyBhbmQgdGhlaXIgb2JqZWN0IG5hbWVzIGFuZCBzZXJ2ZXMgYXMgYSBzdGFnaW5nIGFyZWEgdG8KK3dyaXRlIG91dCB0aGUgbmV4dCB0cmVlIG9iamVjdCB0byBiZSBjb21taXR0ZWQuICBUaGUgc3RhdGUgaXMKKyJ2aXJ0dWFsIiBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvLCBhbmQKK29mdGVuIGRvZXMgbm90LCBtYXRjaCB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworVGhlcmUgYXJlIGNhc2VzIGdpdCBuZWVkcyB0byBleGFtaW5lIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZQordmlydHVhbCB3b3JraW5nIHRyZWUgc3RhdGUgaW4gdGhlIGluZGV4IGFuZCB0aGUgZmlsZXMgaW4gdGhlCit3b3JraW5nIHRyZWUuICBUaGUgbW9zdCBvYnZpb3VzIGNhc2UgaXMgd2hlbiB0aGUgdXNlciBhc2tzIGBnaXQKK2RpZmZgIChvciBpdHMgbG93IGxldmVsIGltcGxlbWVudGF0aW9uLCBgZ2l0IGRpZmYtZmlsZXNgKSBvcgorYGdpdC1scy1maWxlcyAtLW1vZGlmaWVkYC4gIEluIGFkZGl0aW9uLCBnaXQgaW50ZXJuYWxseSBjaGVja3MKK2lmIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFyZSBkaWZmZXJlbnQgZnJvbSB3aGF0IGFyZQorcmVjb3JkZWQgaW4gdGhlIGluZGV4IHRvIGF2b2lkIHN0b21waW5nIG9uIGxvY2FsIGNoYW5nZXMgaW4gdGhlbQorZHVyaW5nIHBhdGNoIGFwcGxpY2F0aW9uLCBzd2l0Y2hpbmcgYnJhbmNoZXMsIGFuZCBtZXJnaW5nLgorCitJbiBvcmRlciB0byBzcGVlZCB1cCB0aGlzIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgZmlsZXMgaW4gdGhlCit3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBlbnRyaWVzLCB0aGUgaW5kZXggZW50cmllcyByZWNvcmQgdGhlCitpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBmaWxlc3lzdGVtIHZpYSBgbHN0YXQoMilgIHN5c3RlbQorY2FsbCB3aGVuIHRoZXkgd2VyZSBsYXN0IHVwZGF0ZWQuICBXaGVuIGNoZWNraW5nIGlmIHRoZXkgZGlmZmVyLAorZ2l0IGZpcnN0IHJ1bnMgYGxzdGF0KDIpYCBvbiB0aGUgZmlsZXMgYW5kIGNvbXBhcmVzIHRoZSByZXN1bHQKK3dpdGggdGhpcyBpbmZvcm1hdGlvbiAodGhpcyBpcyB3aGF0IHdhcyBvcmlnaW5hbGx5IGRvbmUgYnkgdGhlCitgY2VfbWF0Y2hfc3RhdCgpYCBmdW5jdGlvbiwgYnV0IHRoZSBjdXJyZW50IGNvZGUgZG9lcyBpdCBpbgorYGNlX21hdGNoX3N0YXRfYmFzaWMoKWAgZnVuY3Rpb24pLiAgSWYgc29tZSBvZiB0aGVzZSAiY2FjaGVkCitzdGF0IGluZm9ybWF0aW9uIiBmaWVsZHMgZG8gbm90IG1hdGNoLCBnaXQgY2FuIHRlbGwgdGhhdCB0aGUKK2ZpbGVzIGFyZSBtb2RpZmllZCB3aXRob3V0IGV2ZW4gbG9va2luZyBhdCB0aGVpciBjb250ZW50cy4KKworTm90ZTogbm90IGFsbCBtZW1iZXJzIGluIGBzdHJ1Y3Qgc3RhdGAgb2J0YWluZWQgdmlhIGBsc3RhdCgyKWAKK2FyZSB1c2VkIGZvciB0aGlzIGNvbXBhcmlzb24uICBGb3IgZXhhbXBsZSwgYHN0X2F0aW1lYCBvYnZpb3VzbHkKK2lzIG5vdCB1c2VmdWwuICBDdXJyZW50bHksIGdpdCBjb21wYXJlcyB0aGUgZmlsZSB0eXBlIChyZWd1bGFyCitmaWxlcyB2cyBzeW1ib2xpYyBsaW5rcykgYW5kIGV4ZWN1dGFibGUgYml0cyAob25seSBmb3IgcmVndWxhcgorZmlsZXMpIGZyb20gYHN0X21vZGVgIG1lbWJlciwgYHN0X210aW1lYCBhbmQgYHN0X2N0aW1lYAordGltZXN0YW1wcywgYHN0X3VpZGAsIGBzdF9naWRgLCBgc3RfaW5vYCwgYW5kIGBzdF9zaXplYCBtZW1iZXJzLgorV2l0aCBhIGBVU0VfU1RERVZgIGNvbXBpbGUtdGltZSBvcHRpb24sIGBzdF9kZXZgIGlzIGFsc28KK2NvbXBhcmVkLCBidXQgdGhpcyBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhpcyBtZW1iZXIKK2lzIG5vdCBzdGFibGUgb24gbmV0d29yayBmaWxlc3lzdGVtcy4gIFdpdGggYFVTRV9OU0VDYAorY29tcGlsZS10aW1lIG9wdGlvbiwgYHN0X210aW0udHZfbnNlY2AgYW5kIGBzdF9jdGltLnR2X25zZWNgCittZW1iZXJzIGFyZSBhbHNvIGNvbXBhcmVkLCBidXQgdGhpcyBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0CitiZWNhdXNlIGluLWNvcmUgdGltZXN0YW1wcyBjYW4gaGF2ZSBmaW5lciBncmFudWxhcml0eSB0aGFuCitvbi1kaXNrIHRpbWVzdGFtcHMsIHJlc3VsdGluZyBpbiBtZWFuaW5nbGVzcyBjaGFuZ2VzIHdoZW4gYW4KK2lub2RlIGlzIGV2aWN0ZWQgZnJvbSB0aGUgaW5vZGUgY2FjaGUuICBTZWUgY29tbWl0IDhjZTEzYjAKK29mIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90Z2x4L2hpc3RvcnkuZ2l0CisoW1BBVENIXSBTeW5jIGluIGNvcmUgdGltZSBncmFudWFsaXR5IHdpdGggZmlsZXN5c3RlbXMsCisyMDA1LTAxLTA0KS4KKworUmFjeSBnaXQKKy0tLS0tLS0tCisKK1RoZXJlIGlzIG9uZSBzbGlnaHQgcHJvYmxlbSB3aXRoIHRoZSBvcHRpbWl6YXRpb24gYmFzZWQgb24gdGhlCitjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbi4gIENvbnNpZGVyIHRoaXMgc2VxdWVuY2U6CisKKyAgOiBtb2RpZnkgJ2ZvbycKKyAgJCBnaXQgdXBkYXRlLWluZGV4ICdmb28nCisgIDogbW9kaWZ5ICdmb28nIGFnYWluLCBpbi1wbGFjZSwgd2l0aG91dCBjaGFuZ2luZyBpdHMgc2l6ZQorCitUaGUgZmlyc3QgYHVwZGF0ZS1pbmRleGAgY29tcHV0ZXMgdGhlIG9iamVjdCBuYW1lIG9mIHRoZQorY29udGVudHMgb2YgZmlsZSBgZm9vYCBhbmQgdXBkYXRlcyB0aGUgaW5kZXggZW50cnkgZm9yIGBmb29gCithbG9uZyB3aXRoIHRoZSBgc3RydWN0IHN0YXRgIGluZm9ybWF0aW9uLiAgSWYgdGhlIG1vZGlmaWNhdGlvbgordGhhdCBmb2xsb3dzIGl0IGhhcHBlbnMgdmVyeSBmYXN0IHNvIHRoYXQgdGhlIGZpbGUncyBgc3RfbXRpbWVgCit0aW1lc3RhbXAgZG9lcyBub3QgY2hhbmdlLCBhZnRlciB0aGlzIHNlcXVlbmNlLCB0aGUgY2FjaGVkIHN0YXQKK2luZm9ybWF0aW9uIHRoZSBpbmRleCBlbnRyeSByZWNvcmRzIHN0aWxsIGV4YWN0bHkgbWF0Y2ggd2hhdCB5b3UKK3dvdWxkIHNlZSBpbiB0aGUgZmlsZXN5c3RlbSwgZXZlbiB0aG91Z2ggdGhlIGZpbGUgYGZvb2AgaXMgbm93CitkaWZmZXJlbnQuCitUaGlzIHdheSwgZ2l0IGNhbiBpbmNvcnJlY3RseSB0aGluayBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlCithcmUgdW5tb2RpZmllZCBldmVuIHRob3VnaCB0aGV5IGFjdHVhbGx5IGFyZS4gIFRoaXMgaXMgY2FsbGVkCit0aGUgInJhY3kgZ2l0IiBwcm9ibGVtIChkaXNjb3ZlcmVkIGJ5IFBhc2t5KSwgYW5kIHRoZSBlbnRyaWVzCit0aGF0IGFwcGVhciBjbGVhbiB3aGVuIHRoZXkgbWF5IG5vdCBiZSBiZWNhdXNlIG9mIHRoaXMgcHJvYmxlbQorYXJlIGNhbGxlZCAicmFjaWx5IGNsZWFuIi4KKworVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCBnaXQgZG9lcyB0d28gdGhpbmdzOgorCisuIFdoZW4gdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uIHNheXMgdGhlIGZpbGUgaGFzIG5vdCBiZWVuCisgIG1vZGlmaWVkLCBhbmQgdGhlIGBzdF9tdGltZWAgaXMgdGhlIHNhbWUgYXMgKG9yIG5ld2VyIHRoYW4pCisgIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGluZGV4IGZpbGUgaXRzZWxmICh3aGljaCBpcyB0aGUgdGltZSBgZ2l0CisgIHVwZGF0ZS1pbmRleCBmb29gIGZpbmlzaGVkIHJ1bm5pbmcgaW4gdGhlIGFib3ZlIGV4YW1wbGUpLCBpdAorICBhbHNvIGNvbXBhcmVzIHRoZSBjb250ZW50cyB3aXRoIHRoZSBvYmplY3QgcmVnaXN0ZXJlZCBpbiB0aGUKKyAgaW5kZXggZW50cnkgdG8gbWFrZSBzdXJlIHRoZXkgbWF0Y2guCisKKy4gV2hlbiB0aGUgaW5kZXggZmlsZSBpcyB1cGRhdGVkIHRoYXQgY29udGFpbnMgcmFjaWx5IGNsZWFuCisgIGVudHJpZXMsIGNhY2hlZCBgc3Rfc2l6ZWAgaW5mb3JtYXRpb24gaXMgdHJ1bmNhdGVkIHRvIHplcm8KKyAgYmVmb3JlIHdyaXRpbmcgYSBuZXcgdmVyc2lvbiBvZiB0aGUgaW5kZXggZmlsZS4KKworQmVjYXVzZSB0aGUgaW5kZXggZmlsZSBpdHNlbGYgaXMgd3JpdHRlbiBhZnRlciBjb2xsZWN0aW5nIGFsbAordGhlIHN0YXQgaW5mb3JtYXRpb24gZnJvbSB1cGRhdGVkIHBhdGhzLCBgc3RfbXRpbWVgIHRpbWVzdGFtcCBvZgoraXQgaXMgdXN1YWxseSB0aGUgc2FtZSBhcyBvciBuZXdlciB0aGFuIGFueSBvZiB0aGUgcGF0aHMgdGhlCitpbmRleCBjb250YWlucy4gIEFuZCBubyBtYXR0ZXIgaG93IHF1aWNrIHRoZSBtb2RpZmljYXRpb24gdGhhdAorZm9sbG93cyBgZ2l0IHVwZGF0ZS1pbmRleCBmb29gIGZpbmlzaGVzLCB0aGUgcmVzdWx0aW5nCitgc3RfbXRpbWVgIHRpbWVzdGFtcCBvbiBgZm9vYCBjYW5ub3QgZ2V0IGEgdmFsdWUgZWFybGllcgordGhhbiB0aGUgaW5kZXggZmlsZS4gIFRoZXJlZm9yZSwgaW5kZXggZW50cmllcyB0aGF0IGNhbiBiZQorcmFjaWx5IGNsZWFuIGFyZSBsaW1pdGVkIHRvIHRoZSBvbmVzIHRoYXQgaGF2ZSB0aGUgc2FtZQordGltZXN0YW1wIGFzIHRoZSBpbmRleCBmaWxlIGl0c2VsZi4KKworVGhlIGNhbGxlcnMgdGhhdCB3YW50IHRvIGNoZWNrIGlmIGFuIGluZGV4IGVudHJ5IG1hdGNoZXMgdGhlCitjb3JyZXNwb25kaW5nIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZSBjb250aW51ZSB0byBjYWxsCitgY2VfbWF0Y2hfc3RhdCgpYCwgYnV0IHdpdGggdGhpcyBjaGFuZ2UsIGBjZV9tYXRjaF9zdGF0KClgIHVzZXMKK2BjZV9tb2RpZmllZF9jaGVja19mcygpYCB0byBzZWUgaWYgcmFjaWx5IGNsZWFuIG9uZXMgYXJlCithY3R1YWxseSBjbGVhbiBhZnRlciBjb21wYXJpbmcgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uIHVzaW5nCitgY2VfbWF0Y2hfc3RhdF9iYXNpYygpYC4KKworVGhlIHByb2JsZW0gdGhlIGxhdHRlciBzb2x2ZXMgaXMgdGhpcyBzZXF1ZW5jZToKKworICAkIGdpdCB1cGRhdGUtaW5kZXggJ2ZvbycKKyAgOiBtb2RpZnkgJ2ZvbycgaW4tcGxhY2Ugd2l0aG91dCBjaGFuZ2luZyBpdHMgc2l6ZQorICA6IHdhaXQgZm9yIGVub3VnaCB0aW1lCisgICQgZ2l0IHVwZGF0ZS1pbmRleCAnYmFyJworCitXaXRob3V0IHRoZSBsYXR0ZXIsIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGluZGV4IGZpbGUgZ2V0cyBhIG5ld2VyCit2YWx1ZSwgYW5kIGZhbHNlbHkgY2xlYW4gZW50cnkgYGZvb2Agd291bGQgbm90IGJlIGNhdWdodCBieSB0aGUKK3RpbWVzdGFtcCBjb21wYXJpc29uIGNoZWNrIGRvbmUgd2l0aCB0aGUgZm9ybWVyIGxvZ2ljIGFueW1vcmUuCitUaGUgbGF0dGVyIG1ha2VzIHN1cmUgdGhhdCB0aGUgY2FjaGVkIHN0YXQgaW5mb3JtYXRpb24gZm9yIGBmb29gCit3b3VsZCBuZXZlciBtYXRjaCB3aXRoIHRoZSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUsIHNvIGxhdGVyCitjaGVja3MgYnkgYGNlX21hdGNoX3N0YXRfYmFzaWMoKWAgd291bGQgcmVwb3J0IHRoYXQgdGhlIGluZGV4IGVudHJ5Citkb2VzIG5vdCBtYXRjaCB0aGUgZmlsZSBhbmQgZ2l0IGRvZXMgbm90IGhhdmUgdG8gZmFsbCBiYWNrIG9uIG1vcmUKK2V4cGVuc2l2ZSBgY2VfbW9kaWZpZWRfY2hlY2tfZnMoKWAuCisKKworUnVudGltZSBwZW5hbHR5CistLS0tLS0tLS0tLS0tLS0KKworVGhlIHJ1bnRpbWUgcGVuYWx0eSBvZiBmYWxsaW5nIGJhY2sgdG8gYGNlX21vZGlmaWVkX2NoZWNrX2ZzKClgCitmcm9tIGBjZV9tYXRjaF9zdGF0KClgIGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSB3aGVuIHRoZXJlIGFyZSBtYW55CityYWNpbHkgY2xlYW4gZW50cmllcy4gIEFuIG9idmlvdXMgd2F5IHRvIGFydGlmaWNpYWxseSBjcmVhdGUKK3RoaXMgc2l0dWF0aW9uIGlzIHRvIGdpdmUgdGhlIHNhbWUgdGltZXN0YW1wIHRvIGFsbCB0aGUgZmlsZXMgaW4KK3RoZSB3b3JraW5nIHRyZWUgaW4gYSBsYXJnZSBwcm9qZWN0LCBydW4gYGdpdCB1cGRhdGUtaW5kZXhgIG9uCit0aGVtLCBhbmQgZ2l2ZSB0aGUgc2FtZSB0aW1lc3RhbXAgdG8gdGhlIGluZGV4IGZpbGU6CisKKyAgJCBkYXRlID4uZGF0ZXN0YW1wCisgICQgZ2l0IGxzLWZpbGVzIHwgeGFyZ3MgdG91Y2ggLXIgLmRhdGVzdGFtcAorICAkIGdpdCBscy1maWxlcyB8IGdpdCB1cGRhdGUtaW5kZXggLS1zdGRpbgorICAkIHRvdWNoIC1yIC5kYXRlc3RhbXAgLmdpdC9pbmRleAorCitUaGlzIHdpbGwgbWFrZSBhbGwgaW5kZXggZW50cmllcyByYWNpbHkgY2xlYW4uICBUaGUgbGludXgtMi42Citwcm9qZWN0LCBmb3IgZXhhbXBsZSwgdGhlcmUgYXJlIG92ZXIgMjAsMDAwIGZpbGVzIGluIHRoZSB3b3JraW5nCit0cmVlLiAgT24gbXkgQXRobG9uIDY0IFgyIDM4MDArLCBhZnRlciB0aGUgYWJvdmU6CisKKyAgJCAvdXNyL2Jpbi90aW1lIGdpdCBkaWZmLWZpbGVzCisgIDEuNjh1c2VyIDAuNTRzeXN0ZW0gMDowMi4yMmVsYXBzZWQgMTAwJUNQVSAoMGF2Z3RleHQrMGF2Z2RhdGEgMG1heHJlc2lkZW50KWsKKyAgMGlucHV0cyswb3V0cHV0cyAoMG1ham9yKzY3MTExbWlub3IpcGFnZWZhdWx0cyAwc3dhcHMKKyAgJCBnaXQgdXBkYXRlLWluZGV4IE1BSU5UQUlORVJTCisgICQgL3Vzci9iaW4vdGltZSBnaXQgZGlmZi1maWxlcworICAwLjAydXNlciAwLjEyc3lzdGVtIDA6MDAuMTRlbGFwc2VkIDEwMCVDUFUgKDBhdmd0ZXh0KzBhdmdkYXRhIDBtYXhyZXNpZGVudClrCisgIDBpbnB1dHMrMG91dHB1dHMgKDBtYWpvcis5MzVtaW5vcilwYWdlZmF1bHRzIDBzd2FwcworCitSdW5uaW5nIGBnaXQgdXBkYXRlLWluZGV4YCBpbiB0aGUgbWlkZGxlIGNoZWNrZWQgdGhlIHJhY2lseQorY2xlYW4gZW50cmllcywgYW5kIGxlZnQgdGhlIGNhY2hlZCBgc3RfbXRpbWVgIGZvciBhbGwgdGhlIHBhdGhzCitpbnRhY3QgYmVjYXVzZSB0aGV5IHdlcmUgYWN0dWFsbHkgY2xlYW4gKHNvIHRoaXMgc3RlcCB0b29rIGFib3V0Cit0aGUgc2FtZSBhbW91bnQgb2YgdGltZSBhcyB0aGUgZmlyc3QgYGdpdCBkaWZmLWZpbGVzYCkuICBBZnRlcgordGhhdCwgdGhleSBhcmUgbm90IHJhY2lseSBjbGVhbiBhbnltb3JlIGJ1dCBhcmUgdHJ1bHkgY2xlYW4sIHNvCit0aGUgc2Vjb25kIGludm9jYXRpb24gb2YgYGdpdCBkaWZmLWZpbGVzYCBmdWxseSB0b29rIGFkdmFudGFnZQorb2YgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uLgorCisKK0F2b2lkaW5nIHJ1bnRpbWUgcGVuYWx0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIG9yZGVyIHRvIGF2b2lkIHRoZSBhYm92ZSBydW50aW1lIHBlbmFsdHksIHBvc3QgMS40LjIgZ2l0IHVzZWQKK3RvIGhhdmUgYSBjb2RlIHRoYXQgbWFkZSBzdXJlIHRoZSBpbmRleCBmaWxlCitnb3QgdGltZXN0YW1wIG5ld2VyIHRoYW4gdGhlIHlvdW5nZXN0IGZpbGVzIGluIHRoZSBpbmRleCB3aGVuCit0aGVyZSBhcmUgbWFueSB5b3VuZyBmaWxlcyB3aXRoIHRoZSBzYW1lIHRpbWVzdGFtcCBhcyB0aGUKK3Jlc3VsdGluZyBpbmRleCBmaWxlIHdvdWxkIG90aGVyd2lzZSB3b3VsZCBoYXZlIGJ5IHdhaXRpbmcKK2JlZm9yZSBmaW5pc2hpbmcgd3JpdGluZyB0aGUgaW5kZXggZmlsZSBvdXQuCisKK0kgc3VzcGVjdGVkIHRoYXQgaW4gcHJhY3RpY2UgdGhlIHNpdHVhdGlvbiB3aGVyZSBtYW55IHBhdGhzIGluIHRoZQoraW5kZXggYXJlIGFsbCByYWNpbHkgY2xlYW4gd2FzIHF1aXRlIHJhcmUuICBUaGUgb25seSBjb2RlIHBhdGhzCit0aGF0IGNhbiByZWNvcmQgcmVjZW50IHRpbWVzdGFtcCBmb3IgbGFyZ2UgbnVtYmVyIG9mIHBhdGhzIGFyZToKKworLiBJbml0aWFsIGBnaXQgYWRkIC5gIG9mIGEgbGFyZ2UgcHJvamVjdC4KKworLiBgZ2l0IGNoZWNrb3V0YCBvZiBhIGxhcmdlIHByb2plY3QgZnJvbSBhbiBlbXB0eSBpbmRleCBpbnRvIGFuCisgIHVucG9wdWxhdGVkIHdvcmtpbmcgdHJlZS4KKworTm90ZTogc3dpdGNoaW5nIGJyYW5jaGVzIHdpdGggYGdpdCBjaGVja291dGAga2VlcHMgdGhlIGNhY2hlZAorc3RhdCBpbmZvcm1hdGlvbiBvZiBleGlzdGluZyB3b3JraW5nIHRyZWUgZmlsZXMgdGhhdCBhcmUgdGhlCitzYW1lIGJldHdlZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCB0aGUgbmV3IGJyYW5jaCwgd2hpY2ggYXJlCithbGwgb2xkZXIgdGhhbiB0aGUgcmVzdWx0aW5nIGluZGV4IGZpbGUsIGFuZCB0aGV5IHdpbGwgbm90CitiZWNvbWUgcmFjaWx5IGNsZWFuLiAgT25seSB0aGUgZmlsZXMgdGhhdCBhcmUgYWN0dWFsbHkgY2hlY2tlZAorb3V0IGNhbiBiZWNvbWUgcmFjaWx5IGNsZWFuLgorCitJbiBhIGxhcmdlIHByb2plY3Qgd2hlcmUgcmFjaW5lc3MgYXZvaWRhbmNlIGNvc3QgcmVhbGx5IG1hdHRlcnMsCitob3dldmVyLCB0aGUgaW5pdGlhbCBjb21wdXRhdGlvbiBvZiBhbGwgb2JqZWN0IG5hbWVzIGluIHRoZQoraW5kZXggdGFrZXMgbW9yZSB0aGFuIG9uZSBzZWNvbmQsIGFuZCB0aGUgaW5kZXggZmlsZSBpcyB3cml0dGVuCitvdXQgYWZ0ZXIgYWxsIHRoYXQgaGFwcGVucy4gIFRoZXJlZm9yZSB0aGUgdGltZXN0YW1wIG9mIHRoZQoraW5kZXggZmlsZSB3aWxsIGJlIG1vcmUgdGhhbiBvbmUgc2Vjb25kcyBsYXRlciB0aGFuIHRoZQoreW91bmdlc3QgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlLiAgVGhpcyBtZWFucyB0aGF0IGluIHRoZXNlCitjYXNlcyB0aGVyZSBhY3R1YWxseSB3aWxsIG5vdCBiZSBhbnkgcmFjaWx5IGNsZWFuIGVudHJ5IGluCit0aGUgcmVzdWx0aW5nIGluZGV4LgorCitCYXNlZCBvbiB0aGlzIGRpc2N1c3Npb24sIHRoZSBjdXJyZW50IGNvZGUgZG9lcyBub3QgdXNlIHRoZQorIndvcmthcm91bmQiIHRvIGF2b2lkIHRoZSBydW50aW1lIHBlbmFsdHkgdGhhdCBkb2VzIG5vdCBleGlzdCBpbgorcHJhY3RpY2UgYW55bW9yZS4gIFRoaXMgd2FzIGRvbmUgd2l0aCBjb21taXQgMGZjODJjZmYgb24gQXVnIDE1LAorMjAwNi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3NlbmQtcGFjay1waXBlbGluZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9zZW5kLXBhY2stcGlwZWxpbmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MWVmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9zZW5kLXBhY2stcGlwZWxpbmUudHh0CkBAIC0wLDAgKzEsNjMgQEAKK2dpdC1zZW5kLXBhY2sKKz09PT09PT09PT09PT0KKworT3ZlcmFsbCBvcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4gQ29ubmVjdHMgdG8gdGhlIHJlbW90ZSBzaWRlIGFuZCBpbnZva2VzIGdpdC1yZWNlaXZlLXBhY2suCisKKy4gTGVhcm5zIHdoYXQgcmVmcyB0aGUgcmVtb3RlIGhhcyBhbmQgd2hhdCBjb21taXQgdGhleSBwb2ludCBhdC4KKyAgTWF0Y2hlcyB0aGVtIHRvIHRoZSByZWZzcGVjcyB3ZSBhcmUgcHVzaGluZy4KKworLiBDaGVja3MgaWYgdGhlcmUgYXJlIG5vbi1mYXN0LWZvcndhcmRzLiAgVW5saWtlIGZldGNoLXBhY2ssCisgIHRoZSByZXBvc2l0b3J5IHNlbmQtcGFjayBydW5zIGluIGlzIHN1cHBvc2VkIHRvIGJlIGEgc3VwZXJzZXQKKyAgb2YgdGhlIHJlY2lwaWVudCBpbiBmYXN0LWZvcndhcmQgY2FzZXMsIHNvIHRoZXJlIGlzIG5vIG5lZWQKKyAgZm9yIHdhbnQvaGF2ZSBleGNoYW5nZXMsIGFuZCBmYXN0LWZvcndhcmQgY2hlY2sgY2FuIGJlIGRvbmUKKyAgbG9jYWxseS4gIFRlbGwgdGhlIHJlc3VsdCB0byB0aGUgb3RoZXIgZW5kLgorCisuIENhbGxzIHBhY2tfb2JqZWN0cygpIHdoaWNoIGdlbmVyYXRlcyBhIHBhY2tmaWxlIGFuZCBzZW5kcyBpdAorICBvdmVyIHRvIHRoZSBvdGhlciBlbmQuCisKKy4gSWYgdGhlIHJlbW90ZSBzaWRlIGlzIG5ldyBlbm91Z2ggKHYxLjEuMCBvciBsYXRlciksIHdhaXQgZm9yCisgIHRoZSB1bnBhY2sgYW5kIGhvb2sgc3RhdHVzIGZyb20gdGhlIG90aGVyIGVuZC4KKworLiBFeGl0IHdpdGggYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMuCisKKworUGFja19vYmplY3RzIHBpcGVsaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmdW5jdGlvbiBnZXRzIG9uZSBmaWxlIGRlc2NyaXB0b3IgKGBmZGApIHdoaWNoIGlzIGVpdGhlciBhCitzb2NrZXQgKG92ZXIgdGhlIG5ldHdvcmspIG9yIGEgcGlwZSAobG9jYWwpLiAgV2hhdCdzIHdyaXR0ZW4gdG8KK3RoaXMgZmQgZ29lcyB0byBnaXQtcmVjZWl2ZS1wYWNrIHRvIGJlIHVucGFja2VkLgorCisgICAgc2VuZC1wYWNrIC0tLT4gZmQgLS0tPiByZWNlaXZlLXBhY2sKKworVGhlIGZ1bmN0aW9uIHBhY2tfb2JqZWN0cyBjcmVhdGVzIGEgcGlwZSBhbmQgdGhlbiBmb3Jrcy4gIFRoZQorZm9ya2VkIGNoaWxkIGV4ZWNzIHBhY2stb2JqZWN0cyB3aXRoIC0tcmV2cyB0byByZWNlaXZlIHJldmlzaW9uCitwYXJhbWV0ZXJzIGZyb20gaXRzIHN0YW5kYXJkIGlucHV0LiBUaGlzIHByb2Nlc3Mgd2lsbCB3cml0ZSB0aGUKK3BhY2tmaWxlIHRvIHRoZSBvdGhlciBlbmQuCisKKyAgICBzZW5kLXBhY2sKKyAgICAgICB8CisgICAgICAgcGFja19vYmplY3RzKCkgLS0tPiBmZCAtLS0+IHJlY2VpdmUtcGFjaworICAgICAgICAgIHwgXiAocGlwZSkKKwkgIHYgfAorICAgICAgICAgKGNoaWxkKQorCitUaGUgY2hpbGQgZHVwMidzIHRvIGFycmFuZ2UgaXRzIHN0YW5kYXJkIG91dHB1dCB0byBnbyBiYWNrIHRvCit0aGUgb3RoZXIgZW5kLCBhbmQgcmVhZCBpdHMgc3RhbmRhcmQgaW5wdXQgdG8gY29tZSBmcm9tIHRoZQorcGlwZS4gIEFmdGVyIHRoYXQgaXQgZXhlYydzIHBhY2stb2JqZWN0cy4gIE9uIHRoZSBvdGhlciBoYW5kLAordGhlIHBhcmVudCBwcm9jZXNzLCBiZWZvcmUgc3RhcnRpbmcgdG8gZmVlZCB0aGUgY2hpbGQgcGlwZWxpbmUsCitjbG9zZXMgdGhlIHJlYWRpbmcgc2lkZSBvZiB0aGUgcGlwZSBhbmQgZmQgdG8gcmVjZWl2ZS1wYWNrLgorCisgICAgc2VuZC1wYWNrCisgICAgICAgfAorICAgICAgIHBhY2tfb2JqZWN0cyhwYXJlbnQpCisgICAgICAgICAgfAorCSAgdiBbMF0KKyAgICAgICAgIHBhY2stb2JqZWN0cyBbMF0gLS0tPiByZWNlaXZlLXBhY2sKKworCitbamM6IHRoZSBwaXBlbGluZSB3YXMgbXVjaCBtb3JlIGNvbXBsZXggYW5kIG5lZWRlZCBkb2N1bWVudGF0aW9uIGJlZm9yZQorIEkgdW5kZXJzdG9vZCBhbiBlYXJsaWVyIGJ1ZywgYnV0IG5vdyBpdCBpcyB0cml2aWFsIGFuZCBzdHJhaWdodGZvcndhcmQuXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2hhbGxvdy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9zaGFsbG93LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTkyNjNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2hhbGxvdy50eHQKQEAgLTAsMCArMSw0OSBAQAorRGVmLjogU2hhbGxvdyBjb21taXRzIGRvIGhhdmUgcGFyZW50cywgYnV0IG5vdCBpbiB0aGUgc2hhbGxvdworcmVwbywgYW5kIHRoZXJlZm9yZSBncmFmdHMgYXJlIGludHJvZHVjZWQgcHJldGVuZGluZyB0aGF0Cit0aGVzZSBjb21taXRzIGhhdmUgbm8gcGFyZW50cy4KKworVGhlIGJhc2ljIGlkZWEgaXMgdG8gd3JpdGUgdGhlIFNIQTFzIG9mIHNoYWxsb3cgY29tbWl0cyBpbnRvCiskR0lUX0RJUi9zaGFsbG93LCBhbmQgaGFuZGxlIGl0cyBjb250ZW50cyBsaWtlIHRoZSBjb250ZW50cworb2YgJEdJVF9ESVIvaW5mby9ncmFmdHMgKHdpdGggdGhlIGRpZmZlcmVuY2UgdGhhdCBzaGFsbG93CitjYW5ub3QgY29udGFpbiBwYXJlbnQgaW5mb3JtYXRpb24pLgorCitUaGlzIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhIG5ldyBmaWxlIGluc3RlYWQgb2YgZ3JhZnRzLCBvcgorZXZlbiB0aGUgY29uZmlnLCBzaW5jZSB0aGUgdXNlciBzaG91bGQgbm90IHRvdWNoIHRoYXQgZmlsZQorYXQgYWxsIChldmVuIHRocm91Z2hvdXQgZGV2ZWxvcG1lbnQgb2YgdGhlIHNoYWxsb3cgY2xvbmUsIGl0Cit3YXMgbmV2ZXIgbWFudWFsbHkgZWRpdGVkISkuCisKK0VhY2ggbGluZSBjb250YWlucyBleGFjdGx5IG9uZSBTSEExLiBXaGVuIHJlYWQsIGEgY29tbWl0X2dyYWZ0Cit3aWxsIGJlIGNvbnN0cnVjdGVkLCB3aGljaCBoYXMgbnJfcGFyZW50IDwgMCB0byBtYWtlIGl0IGVhc2llcgordG8gZGlzY2VybiBmcm9tIHVzZXIgcHJvdmlkZWQgZ3JhZnRzLgorCitTaW5jZSBmc2NrLW9iamVjdHMgcmVsaWVzIG9uIHRoZSBsaWJyYXJ5IHRvIHJlYWQgdGhlIG9iamVjdHMsCitpdCBob25vdXJzIHNoYWxsb3cgY29tbWl0cyBhdXRvbWF0aWNhbGx5LgorCitUaGVyZSBhcmUgc29tZSB1bmZpbmlzaGVkIGVuZHMgb2YgdGhlIHdob2xlIHNoYWxsb3cgYnVzaW5lc3M6CisKKy0gbWF5YmUgd2UgaGF2ZSB0byBmb3JjZSBub24tdGhpbiBwYWNrcyB3aGVuIGZldGNoaW5nIGludG8gYQorICBzaGFsbG93IHJlcG8gKEFUTSB0aGV5IGFyZSBmb3JjZWQgbm9uLXRoaW4pLgorCistIEEgc3BlY2lhbCBoYW5kbGluZyBvZiBhIHNoYWxsb3cgdXBzdHJlYW0gaXMgbmVlZGVkLiBBdCBzb21lCisgIHN0YWdlLCB1cGxvYWQtcGFjayBoYXMgdG8gY2hlY2sgaWYgaXQgc2VuZHMgYSBzaGFsbG93IGNvbW1pdCwKKyAgYW5kIGl0IHNob3VsZCBzZW5kIHRoYXQgaW5mb3JtYXRpb24gZWFybHkgKG9yIGZhaWwsIGlmIHRoZQorICBjbGllbnQgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcG9zaXRvcmllcykuIFRoZXJlIGlzIG5vCisgIHN1cHBvcnQgYXQgYWxsIGZvciB0aGlzIGluIHRoaXMgcGF0Y2ggc2VyaWVzLgorCistIEluc3RlYWQgb2YgbG9ja2luZyAkR0lUX0RJUi9zaGFsbG93IGF0IHRoZSBzdGFydCwganVzdAorICB0aGUgdGltZXN0YW1wIG9mIGl0IGlzIG5vdGVkLCBhbmQgd2hlbiBpdCBjb21lcyB0byB3cml0aW5nIGl0LAorICBhIGNoZWNrIGlzIHBlcmZvcm1lZCBpZiB0aGUgbXRpbWUgaXMgc3RpbGwgdGhlIHNhbWUsIGR5aW5nIGlmCisgIGl0IGlzIG5vdC4KKworLSBJdCBpcyB1bmNsZWFyIGhvdyAicHVzaCBpbnRvL2Zyb20gYSBzaGFsbG93IHJlcG8iIHNob3VsZCBiZWhhdmUuCisKKy0gSWYgeW91IGRlZXBlbiBhIGhpc3RvcnksIHlvdSdkIHdhbnQgdG8gZ2V0IHRoZSB0YWdzIG9mIHRoZQorICBuZXdseSBzdG9yZWQgKGJ1dCBvbGRlciEpIGNvbW1pdHMuIFRoaXMgZG9lcyBub3Qgd29yayByaWdodCBub3cuCisKK1RvIG1ha2UgYSBzaGFsbG93IGNsb25lLCB5b3UgY2FuIGNhbGwgImdpdC1jbG9uZSAtLWRlcHRoIDIwIHJlcG8iLgorVGhlIHJlc3VsdCBjb250YWlucyBvbmx5IGNvbW1pdCBjaGFpbnMgd2l0aCBhIGxlbmd0aCBvZiBhdCBtb3N0IDIwLgorSXQgYWxzbyB3cml0ZXMgYW4gYXBwcm9wcmlhdGUgJEdJVF9ESVIvc2hhbGxvdy4KKworWW91IGNhbiBkZWVwZW4gYSBzaGFsbG93IHJlcG9zaXRvcnkgd2l0aCAiZ2l0LWZldGNoIC0tZGVwdGggMjAKK3JlcG8gYnJhbmNoIiwgd2hpY2ggd2lsbCBmZXRjaCBicmFuY2ggZnJvbSByZXBvLCBidXQgc3RvcCBhdCBkZXB0aAorMjAsIHVwZGF0aW5nICRHSVRfRElSL3NoYWxsb3cuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC90cml2aWFsLW1lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3RyaXZpYWwtbWVyZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0Yzg0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC90cml2aWFsLW1lcmdlLnR4dApAQCAtMCwwICsxLDEyMSBAQAorVHJpdmlhbCBtZXJnZSBydWxlcworPT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgb3V0Y29tZXMgb2YgdGhlIHRyaXZpYWwgbWVyZ2UgbG9naWMgaW4gcmVhZC10cmVlLgorCitPbmUtd2F5IG1lcmdlCistLS0tLS0tLS0tLS0tCisKK1RoaXMgcmVwbGFjZXMgdGhlIGluZGV4IHdpdGggYSBkaWZmZXJlbnQgdHJlZSwga2VlcGluZyB0aGUgc3RhdCBpbmZvCitmb3IgZW50cmllcyB0aGF0IGRvbid0IGNoYW5nZSwgYW5kIGFsbG93aW5nIC11IHRvIG1ha2UgdGhlIG1pbmltdW0KK3JlcXVpcmVkIGNoYW5nZXMgdG8gdGhlIHdvcmtpbmcgdHJlZSB0byBoYXZlIGl0IG1hdGNoLgorCitFbnRyaWVzIG1hcmtlZCAnKycgaGF2ZSBzdGF0IGluZm9ybWF0aW9uLiBTcGFjZXMgbWFya2VkICcqJyBkb24ndAorYWZmZWN0IHRoZSByZXN1bHQuCisKKyAgIGluZGV4ICAgdHJlZSAgICByZXN1bHQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqICAgICAgIChlbXB0eSkgKGVtcHR5KQorICAgKGVtcHR5KSB0cmVlICAgIHRyZWUKKyAgIGluZGV4KyAgdHJlZSAgICB0cmVlCisgICBpbmRleCsgIGluZGV4ICAgaW5kZXgrCisKK1R3by13YXkgbWVyZ2UKKy0tLS0tLS0tLS0tLS0KKworSXQgaXMgcGVybWl0dGVkIGZvciB0aGUgaW5kZXggdG8gbGFjayBhbiBlbnRyeTsgdGhpcyBkb2VzIG5vdCBwcmV2ZW50CithbnkgY2FzZSBmcm9tIGFwcGx5aW5nLgorCitJZiB0aGUgaW5kZXggZXhpc3RzLCBpdCBpcyBhbiBlcnJvciBmb3IgaXQgbm90IHRvIG1hdGNoIGVpdGhlciB0aGUgb2xkCitvciB0aGUgcmVzdWx0LgorCitJZiBtdWx0aXBsZSBjYXNlcyBhcHBseSwgdGhlIG9uZSB1c2VkIGlzIGxpc3RlZCBmaXJzdC4KKworQSByZXN1bHQgd2hpY2ggY2hhbmdlcyB0aGUgaW5kZXggaXMgYW4gZXJyb3IgaWYgdGhlIGluZGV4IGlzIG5vdCBlbXB0eQorYW5kIG5vdCB1cC10by1kYXRlLgorCitFbnRyaWVzIG1hcmtlZCAnKycgaGF2ZSBzdGF0IGluZm9ybWF0aW9uLiBTcGFjZXMgbWFya2VkICcqJyBkb24ndAorYWZmZWN0IHRoZSByZXN1bHQuCisKKyBjYXNlICBpbmRleCAgIG9sZCAgICAgbmV3ICAgICByZXN1bHQKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMC8yICAgKGVtcHR5KSAqICAgICAgIChlbXB0eSkgKGVtcHR5KQorIDEvMyAgIChlbXB0eSkgKiAgICAgICBuZXcgICAgIG5ldworIDQvNSAgIGluZGV4KyAgKGVtcHR5KSAoZW1wdHkpIGluZGV4KworIDYvNyAgIGluZGV4KyAgKGVtcHR5KSBpbmRleCAgIGluZGV4KworIDEwICAgIGluZGV4KyAgaW5kZXggICAoZW1wdHkpIChlbXB0eSkKKyAxNC8xNSBpbmRleCsgIG9sZCAgICAgb2xkICAgICBpbmRleCsKKyAxOC8xOSBpbmRleCsgIG9sZCAgICAgaW5kZXggICBpbmRleCsKKyAyMCAgICBpbmRleCsgIGluZGV4ICAgbmV3ICAgICBuZXcKKworVGhyZWUtd2F5IG1lcmdlCistLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgcGVybWl0dGVkIGZvciB0aGUgaW5kZXggdG8gbGFjayBhbiBlbnRyeTsgdGhpcyBkb2VzIG5vdCBwcmV2ZW50CithbnkgY2FzZSBmcm9tIGFwcGx5aW5nLgorCitJZiB0aGUgaW5kZXggZXhpc3RzLCBpdCBpcyBhbiBlcnJvciBmb3IgaXQgbm90IHRvIG1hdGNoIGVpdGhlciB0aGUKK2hlYWQgb3IgKGlmIHRoZSBtZXJnZSBpcyB0cml2aWFsKSB0aGUgcmVzdWx0LgorCitJZiBtdWx0aXBsZSBjYXNlcyBhcHBseSwgdGhlIG9uZSB1c2VkIGlzIGxpc3RlZCBmaXJzdC4KKworQSByZXN1bHQgb2YgIm5vIG1lcmdlIiBtZWFucyB0aGF0IGluZGV4IGlzIGxlZnQgaW4gc3RhZ2UgMCwgYW5jZXN0IGluCitzdGFnZSAxLCBoZWFkIGluIHN0YWdlIDIsIGFuZCByZW1vdGUgaW4gc3RhZ2UgMyAoaWYgYW55IG9mIHRoZXNlIGFyZQorZW1wdHksIG5vIGVudHJ5IGlzIGxlZnQgZm9yIHRoYXQgc3RhZ2UpLiBPdGhlcndpc2UsIHRoZSBnaXZlbiBlbnRyeSBpcworbGVmdCBpbiBzdGFnZSAwLCBhbmQgdGhlcmUgYXJlIG5vIG90aGVyIGVudHJpZXMuCisKK0EgcmVzdWx0IG9mICJubyBtZXJnZSIgaXMgYW4gZXJyb3IgaWYgdGhlIGluZGV4IGlzIG5vdCBlbXB0eSBhbmQgbm90Cit1cC10by1kYXRlLgorCisqZW1wdHkqIG1lYW5zIHRoYXQgdGhlIHRyZWUgbXVzdCBub3QgaGF2ZSBhIGRpcmVjdG9yeS1maWxlIGNvbmZsaWN0Cisgd2l0aCB0aGUgZW50cnkuCisKK0ZvciBtdWx0aXBsZSBhbmNlc3RvcnMsIGEgJysnIG1lYW5zIHRoYXQgdGhpcyBjYXNlIGFwcGxpZXMgZXZlbiBpZgorb25seSBvbmUgYW5jZXN0b3Igb3IgcmVtb3RlIGZpdHM7IGEgJ14nIG1lYW5zIGFsbCBvZiB0aGUgYW5jZXN0b3JzCittdXN0IGJlIHRoZSBzYW1lLgorCitjYXNlICBhbmNlc3QgICAgaGVhZCAgICByZW1vdGUgICAgcmVzdWx0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxICAgICAoZW1wdHkpKyAgKGVtcHR5KSAoZW1wdHkpICAgKGVtcHR5KQorMkFMVCAgKGVtcHR5KSsgICplbXB0eSogcmVtb3RlICAgIHJlbW90ZQorMiAgICAgKGVtcHR5KV4gIChlbXB0eSkgcmVtb3RlICAgIG5vIG1lcmdlCiszQUxUICAoZW1wdHkpKyAgaGVhZCAgICAqZW1wdHkqICAgaGVhZAorMyAgICAgKGVtcHR5KV4gIGhlYWQgICAgKGVtcHR5KSAgIG5vIG1lcmdlCis0ICAgICAoZW1wdHkpXiAgaGVhZCAgICByZW1vdGUgICAgbm8gbWVyZ2UKKzVBTFQgICogICAgICAgICBoZWFkICAgIGhlYWQgICAgICBoZWFkCis2ICAgICBhbmNlc3QrICAgKGVtcHR5KSAoZW1wdHkpICAgbm8gbWVyZ2UKKzggICAgIGFuY2VzdF4gICAoZW1wdHkpIGFuY2VzdCAgICBubyBtZXJnZQorNyAgICAgYW5jZXN0KyAgIChlbXB0eSkgcmVtb3RlICAgIG5vIG1lcmdlCisxMCAgICBhbmNlc3ReICAgYW5jZXN0ICAoZW1wdHkpICAgbm8gbWVyZ2UKKzkgICAgIGFuY2VzdCsgICBoZWFkICAgIChlbXB0eSkgICBubyBtZXJnZQorMTYgICAgYW5jMS9hbmMyIGFuYzEgICAgYW5jMiAgICAgIG5vIG1lcmdlCisxMyAgICBhbmNlc3QrICAgaGVhZCAgICBhbmNlc3QgICAgaGVhZAorMTQgICAgYW5jZXN0KyAgIGFuY2VzdCAgcmVtb3RlICAgIHJlbW90ZQorMTEgICAgYW5jZXN0KyAgIGhlYWQgICAgcmVtb3RlICAgIG5vIG1lcmdlCisKK09ubHkgIzJBTFQgYW5kICMzQUxUIHVzZSAqZW1wdHkqLCBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgb25seSBjYXNlcword2hlcmUgdGhlcmUgY2FuIGJlIGNvbmZsaWN0cyB0aGF0IGRpZG4ndCBleGlzdCBiZWZvcmUuIE5vdGUgdGhhdCB3ZQorYWxsb3cgZGlyZWN0b3J5LWZpbGUgY29uZmxpY3RzIGJldHdlZW4gdGhpbmdzIGluIGRpZmZlcmVudCBzdGFnZXMKK2FmdGVyIHRoZSB0cml2aWFsIG1lcmdlLgorCitBIHBvc3NpYmxlIGFsdGVybmF0aXZlIGZvciAjNiBpcyAoZW1wdHkpLCB3aGljaCB3b3VsZCBtYWtlIGl0IGxpa2UKKyMxLiBUaGlzIGlzIG5vdCB1c2VkLCBkdWUgdG8gdGhlIGxpa2VsaWhvb2QgdGhhdCBpdCBhcmlzZXMgZHVlIHRvCittb3ZpbmcgdGhlIGZpbGUgdG8gbXVsdGlwbGUgZGlmZmVyZW50IGxvY2F0aW9ucyBvciBtb3ZpbmcgYW5kIGRlbGV0aW5nCitpdCBpbiBkaWZmZXJlbnQgYnJhbmNoZXMuCisKK0Nhc2UgIzEgaXMgaW5jbHVkZWQgZm9yIGNvbXBsZXRlbmVzcywgYW5kIGFsc28gaW4gY2FzZSB3ZSBkZWNpZGUgdG8KK3B1dCBvbiAnKycgbWFya2luZ3M7IGFueSBwYXRoIHRoYXQgaXMgbmV2ZXIgbWVudGlvbmVkIGF0IGFsbCBpc24ndAoraGFuZGxlZC4KKworTm90ZSB0aGF0ICMxNiBpcyB3aGVuIGJvdGggIzEzIGFuZCAjMTQgYXBwbHk7IGluIHRoaXMgY2FzZSwgd2UgcmVmdXNlCit0aGUgdHJpdmlhbCBtZXJnZSwgYmVjYXVzZSB3ZSBjYW4ndCB0ZWxsIGZyb20gdGhpcyBkYXRhIHdoaWNoIGlzCityaWdodC4gVGhpcyBpcyBhIGNhc2Ugb2YgYSByZXZlcnRlZCBwYXRjaCAoaW4gc29tZSBkaXJlY3Rpb24sIG1heWJlCittdWx0aXBsZSB0aW1lcyksIGFuZCB0aGUgcmlnaHQgYW5zd2VyIGRlcGVuZHMgb24gbG9va2luZyBhdCBjcm9zc2luZ3MKK29mIGhpc3Rvcnkgb3IgY29tbW9uIGFuY2VzdG9ycyBvZiB0aGUgYW5jZXN0b3JzLgorCitOb3RlIHRoYXQsIGJldHdlZW4gIzYsICM3LCAjOSwgYW5kICMxMSwgYWxsIGNhc2VzIG5vdCBvdGhlcndpc2UKK2NvdmVyZWQgYXJlIGhhbmRsZWQgaW4gdGhpcyB0YWJsZS4KKworRm9yICM4IGFuZCAjMTAsIHRoZXJlIGlzIGFsdGVybmF0aXZlIGJlaGF2aW9yLCBub3QgY3VycmVudGx5CitpbXBsZW1lbnRlZCwgd2hlcmUgdGhlIHJlc3VsdCBpcyAoZW1wdHkpLiBBcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQsCit0aGUgYXV0b21hdGljIG1lcmdlIHdpbGwgZ2VuZXJhbGx5IGdpdmUgdGhpcyBlZmZlY3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VybHMtcmVtb3Rlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3VybHMtcmVtb3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmN2U3OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dApAQCAtMCwwICsxLDk0IEBACitpbmNsdWRlOjp1cmxzLnR4dFtdCisKK1JFTU9URVNbW1JFTU9URVNdXQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBuYW1lIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNhbiBiZSB1c2VkIGluc3RlYWQKK29mIGEgVVJMIGFzIGA8cmVwb3NpdG9yeT5gIGFyZ3VtZW50OgorCisqIGEgcmVtb3RlIGluIHRoZSBnaXQgY29uZmlndXJhdGlvbiBmaWxlOiBgJEdJVF9ESVIvY29uZmlnYCwKKyogYSBmaWxlIGluIHRoZSBgJEdJVF9ESVIvcmVtb3Rlc2AgZGlyZWN0b3J5LCBvcgorKiBhIGZpbGUgaW4gdGhlIGAkR0lUX0RJUi9icmFuY2hlc2AgZGlyZWN0b3J5LgorCitBbGwgb2YgdGhlc2UgYWxzbyBhbGxvdyB5b3UgdG8gb21pdCB0aGUgcmVmc3BlYyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKK2JlY2F1c2UgdGhleSBlYWNoIGNvbnRhaW4gYSByZWZzcGVjIHdoaWNoIGdpdCB3aWxsIHVzZSBieSBkZWZhdWx0LgorCitOYW1lZCByZW1vdGUgaW4gY29uZmlndXJhdGlvbiBmaWxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gY2hvb3NlIHRvIHByb3ZpZGUgdGhlIG5hbWUgb2YgYSByZW1vdGUgd2hpY2ggeW91IGhhZCBwcmV2aW91c2x5Citjb25maWd1cmVkIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXSwgbGlua2dpdDpnaXQtY29uZmlnWzFdCitvciBldmVuIGJ5IGEgbWFudWFsIGVkaXQgdG8gdGhlIGAkR0lUX0RJUi9jb25maWdgIGZpbGUuICBUaGUgVVJMIG9mCit0aGlzIHJlbW90ZSB3aWxsIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSByZXBvc2l0b3J5LiAgVGhlIHJlZnNwZWMKK29mIHRoaXMgcmVtb3RlIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0IHdoZW4geW91IGRvCitub3QgcHJvdmlkZSBhIHJlZnNwZWMgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoZSBlbnRyeSBpbiB0aGUKK2NvbmZpZyBmaWxlIHdvdWxkIGFwcGVhciBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorCVtyZW1vdGUgIjxuYW1lPiJdCisJCXVybCA9IDx1cmw+CisJCXB1c2h1cmwgPSA8cHVzaHVybD4KKwkJcHVzaCA9IDxyZWZzcGVjPgorCQlmZXRjaCA9IDxyZWZzcGVjPgorLS0tLS0tLS0tLS0tCisKK1RoZSBgPHB1c2h1cmw+YCBpcyB1c2VkIGZvciBwdXNoZXMgb25seS4gSXQgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzCit0byBgPHVybD5gLgorCitOYW1lZCBmaWxlIGluIGAkR0lUX0RJUi9yZW1vdGVzYAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gY2hvb3NlIHRvIHByb3ZpZGUgdGhlIG5hbWUgb2YgYQorZmlsZSBpbiBgJEdJVF9ESVIvcmVtb3Rlc2AuICBUaGUgVVJMCitpbiB0aGlzIGZpbGUgd2lsbCBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgcmVwb3NpdG9yeS4gIFRoZSByZWZzcGVjCitpbiB0aGlzIGZpbGUgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgd2hlbiB5b3UgZG8gbm90Citwcm92aWRlIGEgcmVmc3BlYyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBmaWxlIHNob3VsZCBoYXZlIHRoZQorZm9sbG93aW5nIGZvcm1hdDoKKworLS0tLS0tLS0tLS0tCisJVVJMOiBvbmUgb2YgdGhlIGFib3ZlIFVSTCBmb3JtYXQKKwlQdXNoOiA8cmVmc3BlYz4KKwlQdWxsOiA8cmVmc3BlYz4KKworLS0tLS0tLS0tLS0tCisKK2BQdXNoOmAgbGluZXMgYXJlIHVzZWQgYnkgJ2dpdCBwdXNoJyBhbmQKK2BQdWxsOmAgbGluZXMgYXJlIHVzZWQgYnkgJ2dpdCBwdWxsJyBhbmQgJ2dpdCBmZXRjaCcuCitNdWx0aXBsZSBgUHVzaDpgIGFuZCBgUHVsbDpgIGxpbmVzIG1heQorYmUgc3BlY2lmaWVkIGZvciBhZGRpdGlvbmFsIGJyYW5jaCBtYXBwaW5ncy4KKworTmFtZWQgZmlsZSBpbiBgJEdJVF9ESVIvYnJhbmNoZXNgCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBjaG9vc2UgdG8gcHJvdmlkZSB0aGUgbmFtZSBvZiBhCitmaWxlIGluIGAkR0lUX0RJUi9icmFuY2hlc2AuCitUaGUgVVJMIGluIHRoaXMgZmlsZSB3aWxsIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSByZXBvc2l0b3J5LgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisKKy0tLS0tLS0tLS0tLQorCTx1cmw+IzxoZWFkPgorLS0tLS0tLS0tLS0tCisKK2A8dXJsPmAgaXMgcmVxdWlyZWQ7IGAjPGhlYWQ+YCBpcyBvcHRpb25hbC4KKworRGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRpb24sIGdpdCB3aWxsIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZworcmVmc3BlY3MsIGlmIHlvdSBkb24ndCBwcm92aWRlIG9uZSBvbiB0aGUgY29tbWFuZCBsaW5lLgorYDxicmFuY2g+YCBpcyB0aGUgbmFtZSBvZiB0aGlzIGZpbGUgaW4gYCRHSVRfRElSL2JyYW5jaGVzYCBhbmQKK2A8aGVhZD5gIGRlZmF1bHRzIHRvIGBtYXN0ZXJgLgorCitnaXQgZmV0Y2ggdXNlczoKKworLS0tLS0tLS0tLS0tCisJcmVmcy9oZWFkcy88aGVhZD46cmVmcy9oZWFkcy88YnJhbmNoPgorLS0tLS0tLS0tLS0tCisKK2dpdCBwdXNoIHVzZXM6CisKKy0tLS0tLS0tLS0tLQorCUhFQUQ6cmVmcy9oZWFkcy88aGVhZD4KKy0tLS0tLS0tLS0tLQorCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VybHMudHh0IGIvRG9jdW1lbnRhdGlvbi91cmxzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDE1ZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91cmxzLnR4dApAQCAtMCwwICsxLDk4IEBACitHSVQgVVJMU1tbVVJMU11dCistLS0tLS0tLS0tLS0tLS0tCisKK0luIGdlbmVyYWwsIFVSTHMgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJhbnNwb3J0IHByb3RvY29sLCB0aGUKK2FkZHJlc3Mgb2YgdGhlIHJlbW90ZSBzZXJ2ZXIsIGFuZCB0aGUgcGF0aCB0byB0aGUgcmVwb3NpdG9yeS4KK0RlcGVuZGluZyBvbiB0aGUgdHJhbnNwb3J0IHByb3RvY29sLCBzb21lIG9mIHRoaXMgaW5mb3JtYXRpb24gbWF5IGJlCithYnNlbnQuCisKK0dpdCBzdXBwb3J0cyBzc2gsIGdpdCwgaHR0cCwgYW5kIGh0dHBzIHByb3RvY29scyAoaW4gYWRkaXRpb24sIGZ0cCwKK2FuZCBmdHBzIGNhbiBiZSB1c2VkIGZvciBmZXRjaGluZyBhbmQgcnN5bmMgY2FuIGJlIHVzZWQgZm9yIGZldGNoaW5nCithbmQgcHVzaGluZywgYnV0IHRoZXNlIGFyZSBpbmVmZmljaWVudCBhbmQgZGVwcmVjYXRlZDsgZG8gbm90IHVzZQordGhlbSkuCisKK1RoZSBmb2xsb3dpbmcgc3ludGF4ZXMgbWF5IGJlIHVzZWQgd2l0aCB0aGVtOgorCistIHNzaDovL3tzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHp7c3RhcnRzYn06cG9ydHtlbmRzYn0vcGF0aC90by9yZXBvLmdpdC8KKy0gZ2l0Oi8vaG9zdC54entzdGFydHNifTpwb3J0e2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworLSBodHRwe3N0YXJ0c2J9c3tlbmRzYn06Ly9ob3N0Lnh6e3N0YXJ0c2J9OnBvcnR7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCistIGZ0cHtzdGFydHNifXN7ZW5kc2J9Oi8vaG9zdC54entzdGFydHNifTpwb3J0e2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworLSByc3luYzovL2hvc3QueHovcGF0aC90by9yZXBvLmdpdC8KKworQW4gYWx0ZXJuYXRpdmUgc2NwLWxpa2Ugc3ludGF4IG1heSBhbHNvIGJlIHVzZWQgd2l0aCB0aGUgc3NoIHByb3RvY29sOgorCistIHtzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHo6cGF0aC90by9yZXBvLmdpdC8KKworVGhlIHNzaCBhbmQgZ2l0IHByb3RvY29scyBhZGRpdGlvbmFsbHkgc3VwcG9ydCB+dXNlcm5hbWUgZXhwYW5zaW9uOgorCistIHNzaDovL3tzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHp7c3RhcnRzYn06cG9ydHtlbmRzYn0vfntzdGFydHNifXVzZXJ7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCistIGdpdDovL2hvc3QueHp7c3RhcnRzYn06cG9ydHtlbmRzYn0vfntzdGFydHNifXVzZXJ7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCistIHtzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHo6L357c3RhcnRzYn11c2Vye2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworCitGb3IgbG9jYWwgcmVwb3NpdG9yaWVzLCBhbHNvIHN1cHBvcnRlZCBieSBnaXQgbmF0aXZlbHksIHRoZSBmb2xsb3dpbmcKK3N5bnRheGVzIG1heSBiZSB1c2VkOgorCistIC9wYXRoL3RvL3JlcG8uZ2l0LworLSBmaWxlOi8vL3BhdGgvdG8vcmVwby5naXQvCisKK2lmbmRlZjo6Z2l0LWNsb25lW10KK1RoZXNlIHR3byBzeW50YXhlcyBhcmUgbW9zdGx5IGVxdWl2YWxlbnQsIGV4Y2VwdCB3aGVuIGNsb25pbmcsIHdoZW4KK3RoZSBmb3JtZXIgaW1wbGllcyAtLWxvY2FsIG9wdGlvbi4gU2VlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdIGZvcgorZGV0YWlscy4KK2VuZGlmOjpnaXQtY2xvbmVbXQorCitpZmRlZjo6Z2l0LWNsb25lW10KK1RoZXNlIHR3byBzeW50YXhlcyBhcmUgbW9zdGx5IGVxdWl2YWxlbnQsIGV4Y2VwdCB0aGUgZm9ybWVyIGltcGxpZXMKKy0tbG9jYWwgb3B0aW9uLgorZW5kaWY6OmdpdC1jbG9uZVtdCisKK1doZW4gZ2l0IGRvZXNuJ3Qga25vdyBob3cgdG8gaGFuZGxlIGEgY2VydGFpbiB0cmFuc3BvcnQgcHJvdG9jb2wsIGl0CithdHRlbXB0cyB0byB1c2UgdGhlICdyZW1vdGUtPHRyYW5zcG9ydD4nIHJlbW90ZSBoZWxwZXIsIGlmIG9uZQorZXhpc3RzLiBUbyBleHBsaWNpdGx5IHJlcXVlc3QgYSByZW1vdGUgaGVscGVyLCB0aGUgZm9sbG93aW5nIHN5bnRheAorbWF5IGJlIHVzZWQ6CisKKy0gPHRyYW5zcG9ydD46OjxhZGRyZXNzPgorCit3aGVyZSA8YWRkcmVzcz4gbWF5IGJlIGEgcGF0aCwgYSBzZXJ2ZXIgYW5kIHBhdGgsIG9yIGFuIGFyYml0cmFyeQorVVJMLWxpa2Ugc3RyaW5nIHJlY29nbml6ZWQgYnkgdGhlIHNwZWNpZmljIHJlbW90ZSBoZWxwZXIgYmVpbmcKK2ludm9rZWQuIFNlZSBsaW5rZ2l0OmdpdC1yZW1vdGUtaGVscGVyc1sxXSBmb3IgZGV0YWlscy4KKworSWYgdGhlcmUgYXJlIGEgbGFyZ2UgbnVtYmVyIG9mIHNpbWlsYXJseS1uYW1lZCByZW1vdGUgcmVwb3NpdG9yaWVzIGFuZAoreW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IGZvcm1hdCBmb3IgdGhlbSAoc3VjaCB0aGF0IHRoZSBVUkxzIHlvdQordXNlIHdpbGwgYmUgcmV3cml0dGVuIGludG8gVVJMcyB0aGF0IHdvcmspLCB5b3UgY2FuIGNyZWF0ZSBhCitjb25maWd1cmF0aW9uIHNlY3Rpb24gb2YgdGhlIGZvcm06CisKKy0tLS0tLS0tLS0tLQorCVt1cmwgIjxhY3R1YWwgdXJsIGJhc2U+Il0KKwkJaW5zdGVhZE9mID0gPG90aGVyIHVybCBiYXNlPgorLS0tLS0tLS0tLS0tCisKK0ZvciBleGFtcGxlLCB3aXRoIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorCVt1cmwgImdpdDovL2dpdC5ob3N0Lnh6LyJdCisJCWluc3RlYWRPZiA9IGhvc3QueHo6L3BhdGgvdG8vCisJCWluc3RlYWRPZiA9IHdvcms6CistLS0tLS0tLS0tLS0KKworYSBVUkwgbGlrZSAid29yazpyZXBvLmdpdCIgb3IgbGlrZSAiaG9zdC54ejovcGF0aC90by9yZXBvLmdpdCIgd2lsbCBiZQorcmV3cml0dGVuIGluIGFueSBjb250ZXh0IHRoYXQgdGFrZXMgYSBVUkwgdG8gYmUgImdpdDovL2dpdC5ob3N0Lnh6L3JlcG8uZ2l0Ii4KKworSWYgeW91IHdhbnQgdG8gcmV3cml0ZSBVUkxzIGZvciBwdXNoIG9ubHksIHlvdSBjYW4gY3JlYXRlIGEKK2NvbmZpZ3VyYXRpb24gc2VjdGlvbiBvZiB0aGUgZm9ybToKKworLS0tLS0tLS0tLS0tCisJW3VybCAiPGFjdHVhbCB1cmwgYmFzZT4iXQorCQlwdXNoSW5zdGVhZE9mID0gPG90aGVyIHVybCBiYXNlPgorLS0tLS0tLS0tLS0tCisKK0ZvciBleGFtcGxlLCB3aXRoIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorCVt1cmwgInNzaDovL2V4YW1wbGUub3JnLyJdCisJCXB1c2hJbnN0ZWFkT2YgPSBnaXQ6Ly9leGFtcGxlLm9yZy8KKy0tLS0tLS0tLS0tLQorCithIFVSTCBsaWtlICJnaXQ6Ly9leGFtcGxlLm9yZy9wYXRoL3RvL3JlcG8uZ2l0IiB3aWxsIGJlIHJld3JpdHRlbiB0bworInNzaDovL2V4YW1wbGUub3JnL3BhdGgvdG8vcmVwby5naXQiIGZvciBwdXNoZXMsIGJ1dCBwdWxscyB3aWxsIHN0aWxsCit1c2UgdGhlIG9yaWdpbmFsIFVSTC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwuY29uZiBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODcyOTRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC5jb25mCkBAIC0wLDAgKzEsMjEgQEAKK1t0aXRsZXNdCisJdW5kZXJsaW5lcz0iX18iLCI9PSIsIi0tIiwifn4iLCJeXiIKKworW2F0dHJpYnV0ZXNdCitjYXJldD1eCitzdGFydHNiPSYjOTE7CitlbmRzYj0mIzkzOwordGlsZGU9JiMxMjY7CisKK1tsaW5rZ2l0LWlubGluZW1hY3JvXQorPHVsaW5rIHVybD0ie3RhcmdldH0uaHRtbCI+e3RhcmdldH17MD8oezB9KX08L3VsaW5rPgorCitpZmRlZjo6YmFja2VuZC1kb2Nib29rW10KKyMgInVuYnJlYWsiIGRvY2Jvb2steHNsIHYxLjY4IGZvciBtYW5wYWdlcy4gdjEuNjkgd29ya3Mgd2l0aCBvciB3aXRob3V0IHRoaXMuCitbbGlzdGluZ2Jsb2NrXQorPGV4YW1wbGU+PHRpdGxlPnt0aXRsZX08L3RpdGxlPgorPGxpdGVyYWxsYXlvdXQgY2xhc3M9Im1vbm9zcGFjZWQiPgorfAorPC9saXRlcmFsbGF5b3V0Pgore3RpdGxlI308L2V4YW1wbGU+CitlbmRpZjo6YmFja2VuZC1kb2Nib29rW10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0IGIvRG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU2NTFiNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CkBAIC0wLDAgKzEsNDYzMiBAQAorR2l0IFVzZXIncyBNYW51YWwgKGZvciB2ZXJzaW9uIDEuNS4zIG9yIG5ld2VyKQorX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKK0dpdCBpcyBhIGZhc3QgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0uCisKK1RoaXMgbWFudWFsIGlzIGRlc2lnbmVkIHRvIGJlIHJlYWRhYmxlIGJ5IHNvbWVvbmUgd2l0aCBiYXNpYyBVTklYCitjb21tYW5kLWxpbmUgc2tpbGxzLCBidXQgbm8gcHJldmlvdXMga25vd2xlZGdlIG9mIGdpdC4KKworPDxyZXBvc2l0b3JpZXMtYW5kLWJyYW5jaGVzPj4gYW5kIDw8ZXhwbG9yaW5nLWdpdC1oaXN0b3J5Pj4gZXhwbGFpbiBob3cKK3RvIGZldGNoIGFuZCBzdHVkeSBhIHByb2plY3QgdXNpbmcgZ2l0LS1yZWFkIHRoZXNlIGNoYXB0ZXJzIHRvIGxlYXJuIGhvdwordG8gYnVpbGQgYW5kIHRlc3QgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgYSBzb2Z0d2FyZSBwcm9qZWN0LCBzZWFyY2ggZm9yCityZWdyZXNzaW9ucywgYW5kIHNvIG9uLgorCitQZW9wbGUgbmVlZGluZyB0byBkbyBhY3R1YWwgZGV2ZWxvcG1lbnQgd2lsbCBhbHNvIHdhbnQgdG8gcmVhZAorPDxEZXZlbG9waW5nLVdpdGgtZ2l0Pj4gYW5kIDw8c2hhcmluZy1kZXZlbG9wbWVudD4+LgorCitGdXJ0aGVyIGNoYXB0ZXJzIGNvdmVyIG1vcmUgc3BlY2lhbGl6ZWQgdG9waWNzLgorCitDb21wcmVoZW5zaXZlIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBtYW4KK3BhZ2VzLCBvciBsaW5rZ2l0OmdpdC1oZWxwWzFdIGNvbW1hbmQuICBGb3IgZXhhbXBsZSwgZm9yIHRoZSBjb21tYW5kCisiZ2l0IGNsb25lIDxyZXBvPiIsIHlvdSBjYW4gZWl0aGVyIHVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG1hbiBnaXQtY2xvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBoZWxwIGNsb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgbGF0dGVyLCB5b3UgY2FuIHVzZSB0aGUgbWFudWFsIHZpZXdlciBvZiB5b3VyIGNob2ljZTsgc2VlCitsaW5rZ2l0OmdpdC1oZWxwWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitTZWUgYWxzbyA8PGdpdC1xdWljay1zdGFydD4+IGZvciBhIGJyaWVmIG92ZXJ2aWV3IG9mIGdpdCBjb21tYW5kcywKK3dpdGhvdXQgYW55IGV4cGxhbmF0aW9uLgorCitGaW5hbGx5LCBzZWUgPDx0b2RvPj4gZm9yIHdheXMgdGhhdCB5b3UgY2FuIGhlbHAgbWFrZSB0aGlzIG1hbnVhbCBtb3JlCitjb21wbGV0ZS4KKworCitbW3JlcG9zaXRvcmllcy1hbmQtYnJhbmNoZXNdXQorUmVwb3NpdG9yaWVzIGFuZCBCcmFuY2hlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitbW2hvdy10by1nZXQtYS1naXQtcmVwb3NpdG9yeV1dCitIb3cgdG8gZ2V0IGEgZ2l0IHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCB3aWxsIGJlIHVzZWZ1bCB0byBoYXZlIGEgZ2l0IHJlcG9zaXRvcnkgdG8gZXhwZXJpbWVudCB3aXRoIGFzIHlvdQorcmVhZCB0aGlzIG1hbnVhbC4KKworVGhlIGJlc3Qgd2F5IHRvIGdldCBvbmUgaXMgYnkgdXNpbmcgdGhlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdIGNvbW1hbmQgdG8KK2Rvd25sb2FkIGEgY29weSBvZiBhbiBleGlzdGluZyByZXBvc2l0b3J5LiAgSWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBhCitwcm9qZWN0IGluIG1pbmQsIGhlcmUgYXJlIHNvbWUgaW50ZXJlc3RpbmcgZXhhbXBsZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSMgZ2l0IGl0c2VsZiAoYXBwcm94LiAxME1CIGRvd25sb2FkKToKKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQKKwkjIHRoZSBMaW51eCBrZXJuZWwgKGFwcHJveC4gMTUwTUIgZG93bmxvYWQpOgorJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LTIuNi5naXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW5pdGlhbCBjbG9uZSBtYXkgYmUgdGltZS1jb25zdW1pbmcgZm9yIGEgbGFyZ2UgcHJvamVjdCwgYnV0IHlvdQord2lsbCBvbmx5IG5lZWQgdG8gY2xvbmUgb25jZS4KKworVGhlIGNsb25lIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyBkaXJlY3RvcnkgbmFtZWQgYWZ0ZXIgdGhlIHByb2plY3QgKCJnaXQiCitvciAibGludXgtMi42IiBpbiB0aGUgZXhhbXBsZXMgYWJvdmUpLiAgQWZ0ZXIgeW91IGNkIGludG8gdGhpcworZGlyZWN0b3J5LCB5b3Ugd2lsbCBzZWUgdGhhdCBpdCBjb250YWlucyBhIGNvcHkgb2YgdGhlIHByb2plY3QgZmlsZXMsCitjYWxsZWQgdGhlIDw8ZGVmX3dvcmtpbmdfdHJlZSx3b3JraW5nIHRyZWU+PiwgdG9nZXRoZXIgd2l0aCBhIHNwZWNpYWwKK3RvcC1sZXZlbCBkaXJlY3RvcnkgbmFtZWQgIi5naXQiLCB3aGljaCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uCithYm91dCB0aGUgaGlzdG9yeSBvZiB0aGUgcHJvamVjdC4KKworW1tob3ctdG8tY2hlY2stb3V0XV0KK0hvdyB0byBjaGVjayBvdXQgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBhIHByb2plY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IGlzIGJlc3QgdGhvdWdodCBvZiBhcyBhIHRvb2wgZm9yIHN0b3JpbmcgdGhlIGhpc3Rvcnkgb2YgYSBjb2xsZWN0aW9uCitvZiBmaWxlcy4gIEl0IHN0b3JlcyB0aGUgaGlzdG9yeSBhcyBhIGNvbXByZXNzZWQgY29sbGVjdGlvbiBvZgoraW50ZXJyZWxhdGVkIHNuYXBzaG90cyBvZiB0aGUgcHJvamVjdCdzIGNvbnRlbnRzLiAgSW4gZ2l0IGVhY2ggc3VjaAordmVyc2lvbiBpcyBjYWxsZWQgYSA8PGRlZl9jb21taXQsY29tbWl0Pj4uCisKK1Rob3NlIHNuYXBzaG90cyBhcmVuJ3QgbmVjZXNzYXJpbHkgYWxsIGFycmFuZ2VkIGluIGEgc2luZ2xlIGxpbmUgZnJvbQorb2xkZXN0IHRvIG5ld2VzdDsgaW5zdGVhZCwgd29yayBtYXkgc2ltdWx0YW5lb3VzbHkgcHJvY2VlZCBhbG9uZworcGFyYWxsZWwgbGluZXMgb2YgZGV2ZWxvcG1lbnQsIGNhbGxlZCA8PGRlZl9icmFuY2gsYnJhbmNoZXM+Piwgd2hpY2ggbWF5CittZXJnZSBhbmQgZGl2ZXJnZS4KKworQSBzaW5nbGUgZ2l0IHJlcG9zaXRvcnkgY2FuIHRyYWNrIGRldmVsb3BtZW50IG9uIG11bHRpcGxlIGJyYW5jaGVzLiAgSXQKK2RvZXMgdGhpcyBieSBrZWVwaW5nIGEgbGlzdCBvZiA8PGRlZl9oZWFkLGhlYWRzPj4gd2hpY2ggcmVmZXJlbmNlIHRoZQorbGF0ZXN0IGNvbW1pdCBvbiBlYWNoIGJyYW5jaDsgdGhlIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBjb21tYW5kIHNob3dzCit5b3UgdGhlIGxpc3Qgb2YgYnJhbmNoIGhlYWRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaAorKiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGZyZXNobHkgY2xvbmVkIHJlcG9zaXRvcnkgY29udGFpbnMgYSBzaW5nbGUgYnJhbmNoIGhlYWQsIGJ5IGRlZmF1bHQKK25hbWVkICJtYXN0ZXIiLCB3aXRoIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpbml0aWFsaXplZCB0byB0aGUgc3RhdGUgb2YKK3RoZSBwcm9qZWN0IHJlZmVycmVkIHRvIGJ5IHRoYXQgYnJhbmNoIGhlYWQuCisKK01vc3QgcHJvamVjdHMgYWxzbyB1c2UgPDxkZWZfdGFnLHRhZ3M+Pi4gIFRhZ3MsIGxpa2UgaGVhZHMsIGFyZQorcmVmZXJlbmNlcyBpbnRvIHRoZSBwcm9qZWN0J3MgaGlzdG9yeSwgYW5kIGNhbiBiZSBsaXN0ZWQgdXNpbmcgdGhlCitsaW5rZ2l0OmdpdC10YWdbMV0gY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgLWwKK3YyLjYuMTEKK3YyLjYuMTEtdHJlZQordjIuNi4xMgordjIuNi4xMi1yYzIKK3YyLjYuMTItcmMzCit2Mi42LjEyLXJjNAordjIuNi4xMi1yYzUKK3YyLjYuMTItcmM2Cit2Mi42LjEzCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUYWdzIGFyZSBleHBlY3RlZCB0byBhbHdheXMgcG9pbnQgYXQgdGhlIHNhbWUgdmVyc2lvbiBvZiBhIHByb2plY3QsCit3aGlsZSBoZWFkcyBhcmUgZXhwZWN0ZWQgdG8gYWR2YW5jZSBhcyBkZXZlbG9wbWVudCBwcm9ncmVzc2VzLgorCitDcmVhdGUgYSBuZXcgYnJhbmNoIGhlYWQgcG9pbnRpbmcgdG8gb25lIG9mIHRoZXNlIHZlcnNpb25zIGFuZCBjaGVjayBpdAorb3V0IHVzaW5nIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIG5ldyB2Mi42LjEzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRoZW4gcmVmbGVjdHMgdGhlIGNvbnRlbnRzIHRoYXQgdGhlIHByb2plY3QgaGFkCit3aGVuIGl0IHdhcyB0YWdnZWQgdjIuNi4xMywgYW5kIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBzaG93cyB0d28KK2JyYW5jaGVzLCB3aXRoIGFuIGFzdGVyaXNrIG1hcmtpbmcgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2g6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoCisgIG1hc3RlcgorKiBuZXcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgZGVjaWRlIHRoYXQgeW91J2QgcmF0aGVyIHNlZSB2ZXJzaW9uIDIuNi4xNywgeW91IGNhbiBtb2RpZnkKK3RoZSBjdXJyZW50IGJyYW5jaCB0byBwb2ludCBhdCB2Mi42LjE3IGluc3RlYWQsIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXNldCAtLWhhcmQgdjIuNi4xNworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCBpZiB0aGUgY3VycmVudCBicmFuY2ggaGVhZCB3YXMgeW91ciBvbmx5IHJlZmVyZW5jZSB0byBhCitwYXJ0aWN1bGFyIHBvaW50IGluIGhpc3RvcnksIHRoZW4gcmVzZXR0aW5nIHRoYXQgYnJhbmNoIG1heSBsZWF2ZSB5b3UKK3dpdGggbm8gd2F5IHRvIGZpbmQgdGhlIGhpc3RvcnkgaXQgdXNlZCB0byBwb2ludCB0bzsgc28gdXNlIHRoaXMgY29tbWFuZAorY2FyZWZ1bGx5LgorCitbW3VuZGVyc3RhbmRpbmctY29tbWl0c11dCitVbmRlcnN0YW5kaW5nIEhpc3Rvcnk6IENvbW1pdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFdmVyeSBjaGFuZ2UgaW4gdGhlIGhpc3Rvcnkgb2YgYSBwcm9qZWN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgY29tbWl0LgorVGhlIGxpbmtnaXQ6Z2l0LXNob3dbMV0gY29tbWFuZCBzaG93cyB0aGUgbW9zdCByZWNlbnQgY29tbWl0IG9uIHRoZQorY3VycmVudCBicmFuY2g6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdworY29tbWl0IDE3Y2Y3ODE2NjFlNmQzOGY3MzdmMTVmNTNhYjU1MmYxZTk1OTYwZDcKK0F1dGhvcjogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQHBwYzk3MC5vc2RsLm9yZy4obm9uZSk+CitEYXRlOiAgIFR1ZSBBcHIgMTkgMTQ6MTE6MDYgMjAwNSAtMDcwMAorCisgICAgUmVtb3ZlIGR1cGxpY2F0ZSBnZXRlbnYoREJfRU5WSVJPTk1FTlQpIGNhbGwKKworICAgIE5vdGVkIGJ5IFRvbnkgTHVjay4KKworZGlmZiAtLWdpdCBhL2luaXQtZGIuYyBiL2luaXQtZGIuYworaW5kZXggNjU4OThmYS4uYjAwMmRjNiAxMDA2NDQKKy0tLSBhL2luaXQtZGIuYworKysrIGIvaW5pdC1kYi5jCitAQCAtNyw3ICs3LDcgQEAKKyAKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworLQljaGFyICpzaGExX2RpciA9IGdldGVudihEQl9FTlZJUk9OTUVOVCksICpwYXRoOworKwljaGFyICpzaGExX2RpciwgKnBhdGg7CisgCWludCBsZW4sIGk7CisgCisgCWlmIChta2RpcigiLmdpdCIsIDA3NTUpIDwgMCkgeworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHlvdSBjYW4gc2VlLCBhIGNvbW1pdCBzaG93cyB3aG8gbWFkZSB0aGUgbGF0ZXN0IGNoYW5nZSwgd2hhdCB0aGV5CitkaWQsIGFuZCB3aHkuCisKK0V2ZXJ5IGNvbW1pdCBoYXMgYSA0MC1oZXhkaWdpdCBpZCwgc29tZXRpbWVzIGNhbGxlZCB0aGUgIm9iamVjdCBuYW1lIiBvciB0aGUKKyJTSEEtMSBpZCIsIHNob3duIG9uIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSAiZ2l0IHNob3ciIG91dHB1dC4gIFlvdSBjYW4gdXN1YWxseQorcmVmZXIgdG8gYSBjb21taXQgYnkgYSBzaG9ydGVyIG5hbWUsIHN1Y2ggYXMgYSB0YWcgb3IgYSBicmFuY2ggbmFtZSwgYnV0IHRoaXMKK2xvbmdlciBuYW1lIGNhbiBhbHNvIGJlIHVzZWZ1bC4gIE1vc3QgaW1wb3J0YW50bHksIGl0IGlzIGEgZ2xvYmFsbHkgdW5pcXVlCituYW1lIGZvciB0aGlzIGNvbW1pdDogc28gaWYgeW91IHRlbGwgc29tZWJvZHkgZWxzZSB0aGUgb2JqZWN0IG5hbWUgKGZvcgorZXhhbXBsZSBpbiBlbWFpbCksIHRoZW4geW91IGFyZSBndWFyYW50ZWVkIHRoYXQgbmFtZSB3aWxsIHJlZmVyIHRvIHRoZSBzYW1lCitjb21taXQgaW4gdGhlaXIgcmVwb3NpdG9yeSB0aGF0IGl0IGRvZXMgaW4geW91cnMgKGFzc3VtaW5nIHRoZWlyIHJlcG9zaXRvcnkKK2hhcyB0aGF0IGNvbW1pdCBhdCBhbGwpLiAgU2luY2UgdGhlIG9iamVjdCBuYW1lIGlzIGNvbXB1dGVkIGFzIGEgaGFzaCBvdmVyIHRoZQorY29udGVudHMgb2YgdGhlIGNvbW1pdCwgeW91IGFyZSBndWFyYW50ZWVkIHRoYXQgdGhlIGNvbW1pdCBjYW4gbmV2ZXIgY2hhbmdlCit3aXRob3V0IGl0cyBuYW1lIGFsc28gY2hhbmdpbmcuCisKK0luIGZhY3QsIGluIDw8Z2l0LWNvbmNlcHRzPj4gd2Ugc2hhbGwgc2VlIHRoYXQgZXZlcnl0aGluZyBzdG9yZWQgaW4gZ2l0CitoaXN0b3J5LCBpbmNsdWRpbmcgZmlsZSBkYXRhIGFuZCBkaXJlY3RvcnkgY29udGVudHMsIGlzIHN0b3JlZCBpbiBhbiBvYmplY3QKK3dpdGggYSBuYW1lIHRoYXQgaXMgYSBoYXNoIG9mIGl0cyBjb250ZW50cy4KKworW1t1bmRlcnN0YW5kaW5nLXJlYWNoYWJpbGl0eV1dCitVbmRlcnN0YW5kaW5nIGhpc3Rvcnk6IGNvbW1pdHMsIHBhcmVudHMsIGFuZCByZWFjaGFiaWxpdHkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitFdmVyeSBjb21taXQgKGV4Y2VwdCB0aGUgdmVyeSBmaXJzdCBjb21taXQgaW4gYSBwcm9qZWN0KSBhbHNvIGhhcyBhCitwYXJlbnQgY29tbWl0IHdoaWNoIHNob3dzIHdoYXQgaGFwcGVuZWQgYmVmb3JlIHRoaXMgY29tbWl0LgorRm9sbG93aW5nIHRoZSBjaGFpbiBvZiBwYXJlbnRzIHdpbGwgZXZlbnR1YWxseSB0YWtlIHlvdSBiYWNrIHRvIHRoZQorYmVnaW5uaW5nIG9mIHRoZSBwcm9qZWN0LgorCitIb3dldmVyLCB0aGUgY29tbWl0cyBkbyBub3QgZm9ybSBhIHNpbXBsZSBsaXN0OyBnaXQgYWxsb3dzIGxpbmVzIG9mCitkZXZlbG9wbWVudCB0byBkaXZlcmdlIGFuZCB0aGVuIHJlY29udmVyZ2UsIGFuZCB0aGUgcG9pbnQgd2hlcmUgdHdvCitsaW5lcyBvZiBkZXZlbG9wbWVudCByZWNvbnZlcmdlIGlzIGNhbGxlZCBhICJtZXJnZSIuICBUaGUgY29tbWl0CityZXByZXNlbnRpbmcgYSBtZXJnZSBjYW4gdGhlcmVmb3JlIGhhdmUgbW9yZSB0aGFuIG9uZSBwYXJlbnQsIHdpdGgKK2VhY2ggcGFyZW50IHJlcHJlc2VudGluZyB0aGUgbW9zdCByZWNlbnQgY29tbWl0IG9uIG9uZSBvZiB0aGUgbGluZXMKK29mIGRldmVsb3BtZW50IGxlYWRpbmcgdG8gdGhhdCBwb2ludC4KKworVGhlIGJlc3Qgd2F5IHRvIHNlZSBob3cgdGhpcyB3b3JrcyBpcyB1c2luZyB0aGUgbGlua2dpdDpnaXRrWzFdCitjb21tYW5kOyBydW5uaW5nIGdpdGsgbm93IG9uIGEgZ2l0IHJlcG9zaXRvcnkgYW5kIGxvb2tpbmcgZm9yIG1lcmdlCitjb21taXRzIHdpbGwgaGVscCB1bmRlcnN0YW5kIGhvdyB0aGUgZ2l0IG9yZ2FuaXplcyBoaXN0b3J5LgorCitJbiB0aGUgZm9sbG93aW5nLCB3ZSBzYXkgdGhhdCBjb21taXQgWCBpcyAicmVhY2hhYmxlIiBmcm9tIGNvbW1pdCBZCitpZiBjb21taXQgWCBpcyBhbiBhbmNlc3RvciBvZiBjb21taXQgWS4gIEVxdWl2YWxlbnRseSwgeW91IGNvdWxkIHNheQordGhhdCBZIGlzIGEgZGVzY2VuZGFudCBvZiBYLCBvciB0aGF0IHRoZXJlIGlzIGEgY2hhaW4gb2YgcGFyZW50cworbGVhZGluZyBmcm9tIGNvbW1pdCBZIHRvIGNvbW1pdCBYLgorCitbW2hpc3RvcnktZGlhZ3JhbXNdXQorVW5kZXJzdGFuZGluZyBoaXN0b3J5OiBIaXN0b3J5IGRpYWdyYW1zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2Ugd2lsbCBzb21ldGltZXMgcmVwcmVzZW50IGdpdCBoaXN0b3J5IHVzaW5nIGRpYWdyYW1zIGxpa2UgdGhlIG9uZQorYmVsb3cuICBDb21taXRzIGFyZSBzaG93biBhcyAibyIsIGFuZCB0aGUgbGlua3MgYmV0d2VlbiB0aGVtIHdpdGgKK2xpbmVzIGRyYXduIHdpdGggLSAvIGFuZCBcLiAgVGltZSBnb2VzIGxlZnQgdG8gcmlnaHQ6CisKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAgICAgICBvLS1vLS1vIDwtLSBCcmFuY2ggQQorICAgICAgICAvCisgby0tby0tbyA8LS0gbWFzdGVyCisgICAgICAgIFwKKyAgICAgICAgIG8tLW8tLW8gPC0tIEJyYW5jaCBCCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworSWYgd2UgbmVlZCB0byB0YWxrIGFib3V0IGEgcGFydGljdWxhciBjb21taXQsIHRoZSBjaGFyYWN0ZXIgIm8iIG1heQorYmUgcmVwbGFjZWQgd2l0aCBhbm90aGVyIGxldHRlciBvciBudW1iZXIuCisKK1tbd2hhdC1pcy1hLWJyYW5jaF1dCitVbmRlcnN0YW5kaW5nIGhpc3Rvcnk6IFdoYXQgaXMgYSBicmFuY2g/Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gd2UgbmVlZCB0byBiZSBwcmVjaXNlLCB3ZSB3aWxsIHVzZSB0aGUgd29yZCAiYnJhbmNoIiB0byBtZWFuIGEgbGluZQorb2YgZGV2ZWxvcG1lbnQsIGFuZCAiYnJhbmNoIGhlYWQiIChvciBqdXN0ICJoZWFkIikgdG8gbWVhbiBhIHJlZmVyZW5jZQordG8gdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiBhIGJyYW5jaC4gIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgYnJhbmNoCitoZWFkIG5hbWVkICJBIiBpcyBhIHBvaW50ZXIgdG8gb25lIHBhcnRpY3VsYXIgY29tbWl0LCBidXQgd2UgcmVmZXIgdG8KK3RoZSBsaW5lIG9mIHRocmVlIGNvbW1pdHMgbGVhZGluZyB1cCB0byB0aGF0IHBvaW50IGFzIGFsbCBiZWluZyBwYXJ0IG9mCisiYnJhbmNoIEEiLgorCitIb3dldmVyLCB3aGVuIG5vIGNvbmZ1c2lvbiB3aWxsIHJlc3VsdCwgd2Ugb2Z0ZW4ganVzdCB1c2UgdGhlIHRlcm0KKyJicmFuY2giIGJvdGggZm9yIGJyYW5jaGVzIGFuZCBmb3IgYnJhbmNoIGhlYWRzLgorCitbW21hbmlwdWxhdGluZy1icmFuY2hlc11dCitNYW5pcHVsYXRpbmcgYnJhbmNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVhdGluZywgZGVsZXRpbmcsIGFuZCBtb2RpZnlpbmcgYnJhbmNoZXMgaXMgcXVpY2sgYW5kIGVhc3k7IGhlcmUncworYSBzdW1tYXJ5IG9mIHRoZSBjb21tYW5kczoKKworZ2l0IGJyYW5jaDo6CisJbGlzdCBhbGwgYnJhbmNoZXMKK2dpdCBicmFuY2ggPGJyYW5jaD46OgorCWNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgPGJyYW5jaD4sIHJlZmVyZW5jaW5nIHRoZSBzYW1lCisJcG9pbnQgaW4gaGlzdG9yeSBhcyB0aGUgY3VycmVudCBicmFuY2gKK2dpdCBicmFuY2ggPGJyYW5jaD4gPHN0YXJ0LXBvaW50Pjo6CisJY3JlYXRlIGEgbmV3IGJyYW5jaCBuYW1lZCA8YnJhbmNoPiwgcmVmZXJlbmNpbmcKKwk8c3RhcnQtcG9pbnQ+LCB3aGljaCBtYXkgYmUgc3BlY2lmaWVkIGFueSB3YXkgeW91IGxpa2UsCisJaW5jbHVkaW5nIHVzaW5nIGEgYnJhbmNoIG5hbWUgb3IgYSB0YWcgbmFtZQorZ2l0IGJyYW5jaCAtZCA8YnJhbmNoPjo6CisJZGVsZXRlIHRoZSBicmFuY2ggPGJyYW5jaD47IGlmIHRoZSBicmFuY2ggeW91IGFyZSBkZWxldGluZworCXBvaW50cyB0byBhIGNvbW1pdCB3aGljaCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdGhlIGN1cnJlbnQKKwlicmFuY2gsIHRoaXMgY29tbWFuZCB3aWxsIGZhaWwgd2l0aCBhIHdhcm5pbmcuCitnaXQgYnJhbmNoIC1EIDxicmFuY2g+OjoKKwlldmVuIGlmIHRoZSBicmFuY2ggcG9pbnRzIHRvIGEgY29tbWl0IG5vdCByZWFjaGFibGUKKwlmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCwgeW91IG1heSBrbm93IHRoYXQgdGhhdCBjb21taXQKKwlpcyBzdGlsbCByZWFjaGFibGUgZnJvbSBzb21lIG90aGVyIGJyYW5jaCBvciB0YWcuICBJbiB0aGF0CisJY2FzZSBpdCBpcyBzYWZlIHRvIHVzZSB0aGlzIGNvbW1hbmQgdG8gZm9yY2UgZ2l0IHRvIGRlbGV0ZQorCXRoZSBicmFuY2guCitnaXQgY2hlY2tvdXQgPGJyYW5jaD46OgorCW1ha2UgdGhlIGN1cnJlbnQgYnJhbmNoIDxicmFuY2g+LCB1cGRhdGluZyB0aGUgd29ya2luZworCWRpcmVjdG9yeSB0byByZWZsZWN0IHRoZSB2ZXJzaW9uIHJlZmVyZW5jZWQgYnkgPGJyYW5jaD4KK2dpdCBjaGVja291dCAtYiA8bmV3PiA8c3RhcnQtcG9pbnQ+OjoKKwljcmVhdGUgYSBuZXcgYnJhbmNoIDxuZXc+IHJlZmVyZW5jaW5nIDxzdGFydC1wb2ludD4sIGFuZAorCWNoZWNrIGl0IG91dC4KKworVGhlIHNwZWNpYWwgc3ltYm9sICJIRUFEIiBjYW4gYWx3YXlzIGJlIHVzZWQgdG8gcmVmZXIgdG8gdGhlIGN1cnJlbnQKK2JyYW5jaC4gIEluIGZhY3QsIGdpdCB1c2VzIGEgZmlsZSBuYW1lZCAiSEVBRCIgaW4gdGhlIC5naXQgZGlyZWN0b3J5IHRvCityZW1lbWJlciB3aGljaCBicmFuY2ggaXMgY3VycmVudDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L0hFQUQKK3JlZjogcmVmcy9oZWFkcy9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW2RldGFjaGVkLWhlYWRdXQorRXhhbWluaW5nIGFuIG9sZCB2ZXJzaW9uIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGBnaXQgY2hlY2tvdXRgIGNvbW1hbmQgbm9ybWFsbHkgZXhwZWN0cyBhIGJyYW5jaCBoZWFkLCBidXQgd2lsbCBhbHNvCithY2NlcHQgYW4gYXJiaXRyYXJ5IGNvbW1pdDsgZm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hlY2sgb3V0IHRoZSBjb21taXQKK3JlZmVyZW5jZWQgYnkgYSB0YWc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgdjIuNi4xNworTm90ZTogbW92aW5nIHRvICJ2Mi42LjE3IiB3aGljaCBpc24ndCBhIGxvY2FsIGJyYW5jaAorSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBmcm9tIHRoaXMgY2hlY2tvdXQsIHlvdSBtYXkgZG8gc28KKyhub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1iIHdpdGggdGhlIGNoZWNrb3V0IGNvbW1hbmQgYWdhaW4uIEV4YW1wbGU6CisgIGdpdCBjaGVja291dCAtYiA8bmV3X2JyYW5jaF9uYW1lPgorSEVBRCBpcyBub3cgYXQgNDI3YWJmYS4uLiBMaW51eCB2Mi42LjE3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEhFQUQgdGhlbiByZWZlcnMgdG8gdGhlIFNIQS0xIG9mIHRoZSBjb21taXQgaW5zdGVhZCBvZiB0byBhIGJyYW5jaCwKK2FuZCBnaXQgYnJhbmNoIHNob3dzIHRoYXQgeW91IGFyZSBubyBsb25nZXIgb24gYSBicmFuY2g6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjYXQgLmdpdC9IRUFECis0MjdhYmZhMjhhZmVkZmZhZGZjYTlkZDhiMDY3ZWI2ZDM2YmFjNTNmCiskIGdpdCBicmFuY2gKKyogKG5vIGJyYW5jaCkKKyAgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBjYXNlIHdlIHNheSB0aGF0IHRoZSBIRUFEIGlzICJkZXRhY2hlZCIuCisKK1RoaXMgaXMgYW4gZWFzeSB3YXkgdG8gY2hlY2sgb3V0IGEgcGFydGljdWxhciB2ZXJzaW9uIHdpdGhvdXQgaGF2aW5nIHRvCittYWtlIHVwIGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2guICAgWW91IGNhbiBzdGlsbCBjcmVhdGUgYSBuZXcgYnJhbmNoCisob3IgdGFnKSBmb3IgdGhpcyB2ZXJzaW9uIGxhdGVyIGlmIHlvdSBkZWNpZGUgdG8uCisKK1tbZXhhbWluaW5nLXJlbW90ZS1icmFuY2hlc11dCitFeGFtaW5pbmcgYnJhbmNoZXMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAibWFzdGVyIiBicmFuY2ggdGhhdCB3YXMgY3JlYXRlZCBhdCB0aGUgdGltZSB5b3UgY2xvbmVkIGlzIGEgY29weQorb2YgdGhlIEhFQUQgaW4gdGhlIHJlcG9zaXRvcnkgdGhhdCB5b3UgY2xvbmVkIGZyb20uICBUaGF0IHJlcG9zaXRvcnkKK21heSBhbHNvIGhhdmUgaGFkIG90aGVyIGJyYW5jaGVzLCB0aG91Z2gsIGFuZCB5b3VyIGxvY2FsIHJlcG9zaXRvcnkKK2tlZXBzIGJyYW5jaGVzIHdoaWNoIHRyYWNrIGVhY2ggb2YgdGhvc2UgcmVtb3RlIGJyYW5jaGVzLCBjYWxsZWQKK3JlbW90ZS10cmFja2luZyBicmFuY2hlcywgd2hpY2ggeW91CitjYW4gdmlldyB1c2luZyB0aGUgIi1yIiBvcHRpb24gdG8gbGlua2dpdDpnaXQtYnJhbmNoWzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCAtcgorICBvcmlnaW4vSEVBRAorICBvcmlnaW4vaHRtbAorICBvcmlnaW4vbWFpbnQKKyAgb3JpZ2luL21hbgorICBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9uZXh0CisgIG9yaWdpbi9wdQorICBvcmlnaW4vdG9kbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgZXhhbXBsZSwgIm9yaWdpbiIgaXMgY2FsbGVkIGEgcmVtb3RlIHJlcG9zaXRvcnksIG9yICJyZW1vdGUiCitmb3Igc2hvcnQuIFRoZSBicmFuY2hlcyBvZiB0aGlzIHJlcG9zaXRvcnkgYXJlIGNhbGxlZCAicmVtb3RlCiticmFuY2hlcyIgZnJvbSBvdXIgcG9pbnQgb2Ygdmlldy4gVGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBsaXN0ZWQKK2Fib3ZlIHdlcmUgY3JlYXRlZCBiYXNlZCBvbiB0aGUgcmVtb3RlIGJyYW5jaGVzIGF0IGNsb25lIHRpbWUgYW5kIHdpbGwKK2JlIHVwZGF0ZWQgYnkgImdpdCBmZXRjaCIgKGhlbmNlICJnaXQgcHVsbCIpIGFuZCAiZ2l0IHB1c2giLiBTZWUKKzw8VXBkYXRpbmctYS1yZXBvc2l0b3J5LVdpdGgtZ2l0LWZldGNoPj4gZm9yIGRldGFpbHMuCisKK1lvdSBtaWdodCB3YW50IHRvIGJ1aWxkIG9uIG9uZSBvZiB0aGVzZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMKK29uIGEgYnJhbmNoIG9mIHlvdXIgb3duLCBqdXN0IGFzIHlvdSB3b3VsZCBmb3IgYSB0YWc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgbXktdG9kby1jb3B5IG9yaWdpbi90b2RvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIGNoZWNrIG91dCAib3JpZ2luL3RvZG8iIGRpcmVjdGx5IHRvIGV4YW1pbmUgaXQgb3IKK3dyaXRlIGEgb25lLW9mZiBwYXRjaC4gIFNlZSA8PGRldGFjaGVkLWhlYWQsZGV0YWNoZWQgaGVhZD4+LgorCitOb3RlIHRoYXQgdGhlIG5hbWUgIm9yaWdpbiIgaXMganVzdCB0aGUgbmFtZSB0aGF0IGdpdCB1c2VzIGJ5IGRlZmF1bHQKK3RvIHJlZmVyIHRvIHRoZSByZXBvc2l0b3J5IHRoYXQgeW91IGNsb25lZCBmcm9tLgorCitbW2hvdy1naXQtc3RvcmVzLXJlZmVyZW5jZXNdXQorTmFtaW5nIGJyYW5jaGVzLCB0YWdzLCBhbmQgb3RoZXIgcmVmZXJlbmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCcmFuY2hlcywgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLCBhbmQgdGFncyBhcmUgYWxsIHJlZmVyZW5jZXMgdG8KK2NvbW1pdHMuICBBbGwgcmVmZXJlbmNlcyBhcmUgbmFtZWQgd2l0aCBhIHNsYXNoLXNlcGFyYXRlZCBwYXRoIG5hbWUKK3N0YXJ0aW5nIHdpdGggInJlZnMiOyB0aGUgbmFtZXMgd2UndmUgYmVlbiB1c2luZyBzbyBmYXIgYXJlIGFjdHVhbGx5CitzaG9ydGhhbmQ6CisKKwktIFRoZSBicmFuY2ggInRlc3QiIGlzIHNob3J0IGZvciAicmVmcy9oZWFkcy90ZXN0Ii4KKwktIFRoZSB0YWcgInYyLjYuMTgiIGlzIHNob3J0IGZvciAicmVmcy90YWdzL3YyLjYuMTgiLgorCS0gIm9yaWdpbi9tYXN0ZXIiIGlzIHNob3J0IGZvciAicmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiLgorCitUaGUgZnVsbCBuYW1lIGlzIG9jY2FzaW9uYWxseSB1c2VmdWwgaWYsIGZvciBleGFtcGxlLCB0aGVyZSBldmVyCitleGlzdHMgYSB0YWcgYW5kIGEgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZS4KKworKE5ld2x5IGNyZWF0ZWQgcmVmcyBhcmUgYWN0dWFsbHkgc3RvcmVkIGluIHRoZSAuZ2l0L3JlZnMgZGlyZWN0b3J5LAordW5kZXIgdGhlIHBhdGggZ2l2ZW4gYnkgdGhlaXIgbmFtZS4gIEhvd2V2ZXIsIGZvciBlZmZpY2llbmN5IHJlYXNvbnMKK3RoZXkgbWF5IGFsc28gYmUgcGFja2VkIHRvZ2V0aGVyIGluIGEgc2luZ2xlIGZpbGU7IHNlZQorbGlua2dpdDpnaXQtcGFjay1yZWZzWzFdKS4KKworQXMgYW5vdGhlciB1c2VmdWwgc2hvcnRjdXQsIHRoZSAiSEVBRCIgb2YgYSByZXBvc2l0b3J5IGNhbiBiZSByZWZlcnJlZAordG8ganVzdCB1c2luZyB0aGUgbmFtZSBvZiB0aGF0IHJlcG9zaXRvcnkuICBTbywgZm9yIGV4YW1wbGUsICJvcmlnaW4iCitpcyB1c3VhbGx5IGEgc2hvcnRjdXQgZm9yIHRoZSBIRUFEIGJyYW5jaCBpbiB0aGUgcmVwb3NpdG9yeSAib3JpZ2luIi4KKworRm9yIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHBhdGhzIHdoaWNoIGdpdCBjaGVja3MgZm9yIHJlZmVyZW5jZXMsIGFuZAordGhlIG9yZGVyIGl0IHVzZXMgdG8gZGVjaWRlIHdoaWNoIHRvIGNob29zZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZQorcmVmZXJlbmNlcyB3aXRoIHRoZSBzYW1lIHNob3J0aGFuZCBuYW1lLCBzZWUgdGhlICJTUEVDSUZZSU5HCitSRVZJU0lPTlMiIHNlY3Rpb24gb2YgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKK1tbVXBkYXRpbmctYS1yZXBvc2l0b3J5LVdpdGgtZ2l0LWZldGNoXV0KK1VwZGF0aW5nIGEgcmVwb3NpdG9yeSB3aXRoIGdpdCBmZXRjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V2ZW50dWFsbHkgdGhlIGRldmVsb3BlciBjbG9uZWQgZnJvbSB3aWxsIGRvIGFkZGl0aW9uYWwgd29yayBpbiBoZXIKK3JlcG9zaXRvcnksIGNyZWF0aW5nIG5ldyBjb21taXRzIGFuZCBhZHZhbmNpbmcgdGhlIGJyYW5jaGVzIHRvIHBvaW50CithdCB0aGUgbmV3IGNvbW1pdHMuCisKK1RoZSBjb21tYW5kICJnaXQgZmV0Y2giLCB3aXRoIG5vIGFyZ3VtZW50cywgd2lsbCB1cGRhdGUgYWxsIG9mIHRoZQorcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBmb3VuZCBpbiBoZXIKK3JlcG9zaXRvcnkuICBJdCB3aWxsIG5vdCB0b3VjaCBhbnkgb2YgeW91ciBvd24gYnJhbmNoZXMtLW5vdCBldmVuIHRoZQorIm1hc3RlciIgYnJhbmNoIHRoYXQgd2FzIGNyZWF0ZWQgZm9yIHlvdSBvbiBjbG9uZS4KKworW1tmZXRjaGluZy1icmFuY2hlc11dCitGZXRjaGluZyBicmFuY2hlcyBmcm9tIG90aGVyIHJlcG9zaXRvcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIHRyYWNrIGJyYW5jaGVzIGZyb20gcmVwb3NpdG9yaWVzIG90aGVyIHRoYW4gdGhlIG9uZSB5b3UKK2Nsb25lZCBmcm9tLCB1c2luZyBsaW5rZ2l0OmdpdC1yZW1vdGVbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlbW90ZSBhZGQgbGludXgtbmZzIGdpdDovL2xpbnV4LW5mcy5vcmcvcHViL25mcy0yLjYuZ2l0CiskIGdpdCBmZXRjaCBsaW51eC1uZnMKKyogcmVmcy9yZW1vdGVzL2xpbnV4LW5mcy9tYXN0ZXI6IHN0b3JpbmcgYnJhbmNoICdtYXN0ZXInIC4uLgorICBjb21taXQ6IGJmODFiNDYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTmV3IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyB3aWxsIGJlIHN0b3JlZCB1bmRlciB0aGUgc2hvcnRoYW5kIG5hbWUKK3RoYXQgeW91IGdhdmUgImdpdCByZW1vdGUgYWRkIiwgaW4gdGhpcyBjYXNlIGxpbnV4LW5mczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1yCitsaW51eC1uZnMvbWFzdGVyCitvcmlnaW4vbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBydW4gImdpdCBmZXRjaCA8cmVtb3RlPiIgbGF0ZXIsIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgZm9yIHRoZQorbmFtZWQgPHJlbW90ZT4gd2lsbCBiZSB1cGRhdGVkLgorCitJZiB5b3UgZXhhbWluZSB0aGUgZmlsZSAuZ2l0L2NvbmZpZywgeW91IHdpbGwgc2VlIHRoYXQgZ2l0IGhhcyBhZGRlZAorYSBuZXcgc3RhbnphOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L2NvbmZpZworLi4uCitbcmVtb3RlICJsaW51eC1uZnMiXQorCXVybCA9IGdpdDovL2xpbnV4LW5mcy5vcmcvcHViL25mcy0yLjYuZ2l0CisJZmV0Y2ggPSArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9saW51eC1uZnMvKgorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgd2hhdCBjYXVzZXMgZ2l0IHRvIHRyYWNrIHRoZSByZW1vdGUncyBicmFuY2hlczsgeW91IG1heSBtb2RpZnkKK29yIGRlbGV0ZSB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYnkgZWRpdGluZyAuZ2l0L2NvbmZpZyB3aXRoIGEKK3RleHQgZWRpdG9yLiAgKFNlZSB0aGUgIkNPTkZJR1VSQVRJT04gRklMRSIgc2VjdGlvbiBvZgorbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBkZXRhaWxzLikKKworW1tleHBsb3JpbmctZ2l0LWhpc3RvcnldXQorRXhwbG9yaW5nIGdpdCBoaXN0b3J5Cis9PT09PT09PT09PT09PT09PT09PT0KKworR2l0IGlzIGJlc3QgdGhvdWdodCBvZiBhcyBhIHRvb2wgZm9yIHN0b3JpbmcgdGhlIGhpc3Rvcnkgb2YgYQorY29sbGVjdGlvbiBvZiBmaWxlcy4gIEl0IGRvZXMgdGhpcyBieSBzdG9yaW5nIGNvbXByZXNzZWQgc25hcHNob3RzIG9mCit0aGUgY29udGVudHMgb2YgYSBmaWxlIGhpZXJhcmNoeSwgdG9nZXRoZXIgd2l0aCAiY29tbWl0cyIgd2hpY2ggc2hvdwordGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBzbmFwc2hvdHMuCisKK0dpdCBwcm92aWRlcyBleHRyZW1lbHkgZmxleGlibGUgYW5kIGZhc3QgdG9vbHMgZm9yIGV4cGxvcmluZyB0aGUKK2hpc3Rvcnkgb2YgYSBwcm9qZWN0LgorCitXZSBzdGFydCB3aXRoIG9uZSBzcGVjaWFsaXplZCB0b29sIHRoYXQgaXMgdXNlZnVsIGZvciBmaW5kaW5nIHRoZQorY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyBpbnRvIGEgcHJvamVjdC4KKworW1t1c2luZy1iaXNlY3RdXQorSG93IHRvIHVzZSBiaXNlY3QgdG8gZmluZCBhIHJlZ3Jlc3Npb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvc2UgdmVyc2lvbiAyLjYuMTggb2YgeW91ciBwcm9qZWN0IHdvcmtlZCwgYnV0IHRoZSB2ZXJzaW9uIGF0CisibWFzdGVyIiBjcmFzaGVzLiAgU29tZXRpbWVzIHRoZSBiZXN0IHdheSB0byBmaW5kIHRoZSBjYXVzZSBvZiBzdWNoIGEKK3JlZ3Jlc3Npb24gaXMgdG8gcGVyZm9ybSBhIGJydXRlLWZvcmNlIHNlYXJjaCB0aHJvdWdoIHRoZSBwcm9qZWN0J3MKK2hpc3RvcnkgdG8gZmluZCB0aGUgcGFydGljdWxhciBjb21taXQgdGhhdCBjYXVzZWQgdGhlIHByb2JsZW0uICBUaGUKK2xpbmtnaXQ6Z2l0LWJpc2VjdFsxXSBjb21tYW5kIGNhbiBoZWxwIHlvdSBkbyB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQKKyQgZ2l0IGJpc2VjdCBnb29kIHYyLjYuMTgKKyQgZ2l0IGJpc2VjdCBiYWQgbWFzdGVyCitCaXNlY3Rpbmc6IDM1MzcgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzCitbNjU5MzRhOWEwMjhiODhlODNlMmIwZjhiMzY2MThmZTUwMzM0OWY4ZV0gQkxPQ0s6IE1ha2UgVVNCIHN0b3JhZ2UgZGVwZW5kIG9uIFNDU0kgcmF0aGVyIHRoYW4gc2VsZWN0aW5nIGl0IFt0cnkgIzZdCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBydW4gImdpdCBicmFuY2giIGF0IHRoaXMgcG9pbnQsIHlvdSdsbCBzZWUgdGhhdCBnaXQgaGFzCit0ZW1wb3JhcmlseSBtb3ZlZCB5b3UgaW4gIihubyBicmFuY2gpIi4gSEVBRCBpcyBub3cgZGV0YWNoZWQgZnJvbSBhbnkKK2JyYW5jaCBhbmQgcG9pbnRzIGRpcmVjdGx5IHRvIGEgY29tbWl0ICh3aXRoIGNvbW1pdCBpZCA2NTkzNC4uLikgdGhhdAoraXMgcmVhY2hhYmxlIGZyb20gIm1hc3RlciIgYnV0IG5vdCBmcm9tIHYyLjYuMTguIENvbXBpbGUgYW5kIHRlc3QgaXQsCithbmQgc2VlIHdoZXRoZXIgaXQgY3Jhc2hlcy4gQXNzdW1lIGl0IGRvZXMgY3Jhc2guIFRoZW46CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBiYWQKK0Jpc2VjdGluZzogMTc2OSByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMKK1s3ZWZmODJjOGIxNTExMDE3YWU2MDVmMGM5OWFjMjc1YTdlMjFiODY3XSBpMmMtY29yZTogRHJvcCB1c2VsZXNzIGJpdG1hc2tpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NoZWNrcyBvdXQgYW4gb2xkZXIgdmVyc2lvbi4gIENvbnRpbnVlIGxpa2UgdGhpcywgdGVsbGluZyBnaXQgYXQgZWFjaAorc3RhZ2Ugd2hldGhlciB0aGUgdmVyc2lvbiBpdCBnaXZlcyB5b3UgaXMgZ29vZCBvciBiYWQsIGFuZCBub3RpY2UKK3RoYXQgdGhlIG51bWJlciBvZiByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGlzIGN1dCBhcHByb3hpbWF0ZWx5IGluCitoYWxmIGVhY2ggdGltZS4KKworQWZ0ZXIgYWJvdXQgMTMgdGVzdHMgKGluIHRoaXMgY2FzZSksIGl0IHdpbGwgb3V0cHV0IHRoZSBjb21taXQgaWQgb2YKK3RoZSBndWlsdHkgY29tbWl0LiAgWW91IGNhbiB0aGVuIGV4YW1pbmUgdGhlIGNvbW1pdCB3aXRoCitsaW5rZ2l0OmdpdC1zaG93WzFdLCBmaW5kIG91dCB3aG8gd3JvdGUgaXQsIGFuZCBtYWlsIHRoZW0geW91ciBidWcKK3JlcG9ydCB3aXRoIHRoZSBjb21taXQgaWQuICBGaW5hbGx5LCBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlc2V0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHJldHVybiB5b3UgdG8gdGhlIGJyYW5jaCB5b3Ugd2VyZSBvbiBiZWZvcmUuCisKK05vdGUgdGhhdCB0aGUgdmVyc2lvbiB3aGljaCBgZ2l0IGJpc2VjdGAgY2hlY2tzIG91dCBmb3IgeW91IGF0IGVhY2gKK3BvaW50IGlzIGp1c3QgYSBzdWdnZXN0aW9uLCBhbmQgeW91J3JlIGZyZWUgdG8gdHJ5IGEgZGlmZmVyZW50Cit2ZXJzaW9uIGlmIHlvdSB0aGluayBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYS4gIEZvciBleGFtcGxlLAorb2NjYXNpb25hbGx5IHlvdSBtYXkgbGFuZCBvbiBhIGNvbW1pdCB0aGF0IGJyb2tlIHNvbWV0aGluZyB1bnJlbGF0ZWQ7CitydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHZpc3VhbGl6ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIHJ1biBnaXRrIGFuZCBsYWJlbCB0aGUgY29tbWl0IGl0IGNob3NlIHdpdGggYSBtYXJrZXIgdGhhdAorc2F5cyAiYmlzZWN0Ii4gIENob29zZSBhIHNhZmUtbG9va2luZyBjb21taXQgbmVhcmJ5LCBub3RlIGl0cyBjb21taXQKK2lkLCBhbmQgY2hlY2sgaXQgb3V0IHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc2V0IC0taGFyZCBmYjQ3ZGRiMmRiLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RoZW4gdGVzdCwgcnVuICJiaXNlY3QgZ29vZCIgb3IgImJpc2VjdCBiYWQiIGFzIGFwcHJvcHJpYXRlLCBhbmQKK2NvbnRpbnVlLgorCitJbnN0ZWFkIG9mICJnaXQgYmlzZWN0IHZpc3VhbGl6ZSIgYW5kIHRoZW4gImdpdCByZXNldCAtLWhhcmQKK2ZiNDdkZGIyZGIuLi4iLCB5b3UgbWlnaHQganVzdCB3YW50IHRvIHRlbGwgZ2l0IHRoYXQgeW91IHdhbnQgdG8gc2tpcAordGhlIGN1cnJlbnQgY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc2tpcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGlzIGNhc2UsIHRob3VnaCwgZ2l0IG1heSBub3QgZXZlbnR1YWxseSBiZSBhYmxlIHRvIHRlbGwgdGhlIGZpcnN0CitiYWQgb25lIGJldHdlZW4gc29tZSBmaXJzdCBza2lwcGVkIGNvbW1pdHMgYW5kIGEgbGF0ZXIgYmFkIGNvbW1pdC4KKworVGhlcmUgYXJlIGFsc28gd2F5cyB0byBhdXRvbWF0ZSB0aGUgYmlzZWN0aW5nIHByb2Nlc3MgaWYgeW91IGhhdmUgYQordGVzdCBzY3JpcHQgdGhhdCBjYW4gdGVsbCBhIGdvb2QgZnJvbSBhIGJhZCBjb21taXQuIFNlZQorbGlua2dpdDpnaXQtYmlzZWN0WzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgYW5kIG90aGVyICJnaXQKK2Jpc2VjdCIgZmVhdHVyZXMuCisKK1tbbmFtaW5nLWNvbW1pdHNdXQorTmFtaW5nIGNvbW1pdHMKKy0tLS0tLS0tLS0tLS0tCisKK1dlIGhhdmUgc2VlbiBzZXZlcmFsIHdheXMgb2YgbmFtaW5nIGNvbW1pdHMgYWxyZWFkeToKKworCS0gNDAtaGV4ZGlnaXQgb2JqZWN0IG5hbWUKKwktIGJyYW5jaCBuYW1lOiByZWZlcnMgdG8gdGhlIGNvbW1pdCBhdCB0aGUgaGVhZCBvZiB0aGUgZ2l2ZW4KKwkgIGJyYW5jaAorCS0gdGFnIG5hbWU6IHJlZmVycyB0byB0aGUgY29tbWl0IHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuIHRhZworCSAgKHdlJ3ZlIHNlZW4gYnJhbmNoZXMgYW5kIHRhZ3MgYXJlIHNwZWNpYWwgY2FzZXMgb2YKKwkgIDw8aG93LWdpdC1zdG9yZXMtcmVmZXJlbmNlcyxyZWZlcmVuY2VzPj4pLgorCS0gSEVBRDogcmVmZXJzIHRvIHRoZSBoZWFkIG9mIHRoZSBjdXJyZW50IGJyYW5jaAorCitUaGVyZSBhcmUgbWFueSBtb3JlOyBzZWUgdGhlICJTUEVDSUZZSU5HIFJFVklTSU9OUyIgc2VjdGlvbiBvZiB0aGUKK2xpbmtnaXQ6Z2l0cmV2aXNpb25zWzddIG1hbiBwYWdlIGZvciB0aGUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvCituYW1lIHJldmlzaW9ucy4gIFNvbWUgZXhhbXBsZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgZmI0N2RkYjIgIyB0aGUgZmlyc3QgZmV3IGNoYXJhY3RlcnMgb2YgdGhlIG9iamVjdCBuYW1lCisJCSAgICAjIGFyZSB1c3VhbGx5IGVub3VnaCB0byBzcGVjaWZ5IGl0IHVuaXF1ZWx5CiskIGdpdCBzaG93IEhFQUReICAgICMgdGhlIHBhcmVudCBvZiB0aGUgSEVBRCBjb21taXQKKyQgZ2l0IHNob3cgSEVBRF5eICAgIyB0aGUgZ3JhbmRwYXJlbnQKKyQgZ2l0IHNob3cgSEVBRH40ICAgIyB0aGUgZ3JlYXQtZ3JlYXQtZ3JhbmRwYXJlbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVjYWxsIHRoYXQgbWVyZ2UgY29tbWl0cyBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIHBhcmVudDsgYnkgZGVmYXVsdCwKK14gYW5kIH4gZm9sbG93IHRoZSBmaXJzdCBwYXJlbnQgbGlzdGVkIGluIHRoZSBjb21taXQsIGJ1dCB5b3UgY2FuCithbHNvIGNob29zZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyBIRUFEXjEgICAjIHNob3cgdGhlIGZpcnN0IHBhcmVudCBvZiBIRUFECiskIGdpdCBzaG93IEhFQUReMiAgICMgc2hvdyB0aGUgc2Vjb25kIHBhcmVudCBvZiBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGFkZGl0aW9uIHRvIEhFQUQsIHRoZXJlIGFyZSBzZXZlcmFsIG90aGVyIHNwZWNpYWwgbmFtZXMgZm9yCitjb21taXRzOgorCitNZXJnZXMgKHRvIGJlIGRpc2N1c3NlZCBsYXRlciksIGFzIHdlbGwgYXMgb3BlcmF0aW9ucyBzdWNoIGFzCitgZ2l0IHJlc2V0YCwgd2hpY2ggY2hhbmdlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgY29tbWl0LCBnZW5lcmFsbHkKK3NldCBPUklHX0hFQUQgdG8gdGhlIHZhbHVlIEhFQUQgaGFkIGJlZm9yZSB0aGUgY3VycmVudCBvcGVyYXRpb24uCisKK1RoZSBgZ2l0IGZldGNoYCBvcGVyYXRpb24gYWx3YXlzIHN0b3JlcyB0aGUgaGVhZCBvZiB0aGUgbGFzdCBmZXRjaGVkCiticmFuY2ggaW4gRkVUQ0hfSEVBRC4gIEZvciBleGFtcGxlLCBpZiB5b3UgcnVuIGBnaXQgZmV0Y2hgIHdpdGhvdXQKK3NwZWNpZnlpbmcgYSBsb2NhbCBicmFuY2ggYXMgdGhlIHRhcmdldCBvZiB0aGUgb3BlcmF0aW9uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIGdpdDovL2V4YW1wbGUuY29tL3Byb2ouZ2l0IHRoZWlyYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RoZSBmZXRjaGVkIGNvbW1pdHMgd2lsbCBzdGlsbCBiZSBhdmFpbGFibGUgZnJvbSBGRVRDSF9IRUFELgorCitXaGVuIHdlIGRpc2N1c3MgbWVyZ2VzIHdlJ2xsIGFsc28gc2VlIHRoZSBzcGVjaWFsIG5hbWUgTUVSR0VfSEVBRCwKK3doaWNoIHJlZmVycyB0byB0aGUgb3RoZXIgYnJhbmNoIHRoYXQgd2UncmUgbWVyZ2luZyBpbiB0byB0aGUgY3VycmVudAorYnJhbmNoLgorCitUaGUgbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdIGNvbW1hbmQgaXMgYSBsb3ctbGV2ZWwgY29tbWFuZCB0aGF0IGlzCitvY2Nhc2lvbmFsbHkgdXNlZnVsIGZvciB0cmFuc2xhdGluZyBzb21lIG5hbWUgZm9yIGEgY29tbWl0IHRvIHRoZSBvYmplY3QKK25hbWUgZm9yIHRoYXQgY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXYtcGFyc2Ugb3JpZ2luCitlMDVkYjBmZDRmMzFkZGU3MDA1ZjA3NWE4NGY5NmIzNjBkMDU5ODRiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbY3JlYXRpbmctdGFnc11dCitDcmVhdGluZyB0YWdzCistLS0tLS0tLS0tLS0tCisKK1dlIGNhbiBhbHNvIGNyZWF0ZSBhIHRhZyB0byByZWZlciB0byBhIHBhcnRpY3VsYXIgY29tbWl0OyBhZnRlcgorcnVubmluZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgc3RhYmxlLTEgMWIyZTFkNjNmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHVzZSBzdGFibGUtMSB0byByZWZlciB0byB0aGUgY29tbWl0IDFiMmUxZDYzZmYuCisKK1RoaXMgY3JlYXRlcyBhICJsaWdodHdlaWdodCIgdGFnLiAgSWYgeW91IHdvdWxkIGFsc28gbGlrZSB0byBpbmNsdWRlIGEKK2NvbW1lbnQgd2l0aCB0aGUgdGFnLCBhbmQgcG9zc2libHkgc2lnbiBpdCBjcnlwdG9ncmFwaGljYWxseSwgdGhlbiB5b3UKK3Nob3VsZCBjcmVhdGUgYSB0YWcgb2JqZWN0IGluc3RlYWQ7IHNlZSB0aGUgbGlua2dpdDpnaXQtdGFnWzFdIG1hbiBwYWdlCitmb3IgZGV0YWlscy4KKworW1ticm93c2luZy1yZXZpc2lvbnNdXQorQnJvd3NpbmcgcmV2aXNpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBjb21tYW5kIGNhbiBzaG93IGxpc3RzIG9mIGNvbW1pdHMuICBPbiBpdHMKK293biwgaXQgc2hvd3MgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gdGhlIHBhcmVudCBjb21taXQ7IGJ1dCB5b3UKK2NhbiBhbHNvIG1ha2UgbW9yZSBzcGVjaWZpYyByZXF1ZXN0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIHYyLjUuLgkjIGNvbW1pdHMgc2luY2UgKG5vdCByZWFjaGFibGUgZnJvbSkgdjIuNQorJCBnaXQgbG9nIHRlc3QuLm1hc3RlcgkjIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gbWFzdGVyIGJ1dCBub3QgdGVzdAorJCBnaXQgbG9nIG1hc3Rlci4udGVzdAkjIC4uLnJlYWNoYWJsZSBmcm9tIHRlc3QgYnV0IG5vdCBtYXN0ZXIKKyQgZ2l0IGxvZyBtYXN0ZXIuLi50ZXN0CSMgLi4ucmVhY2hhYmxlIGZyb20gZWl0aGVyIHRlc3Qgb3IgbWFzdGVyLAorCQkJIyAgICBidXQgbm90IGJvdGgKKyQgZ2l0IGxvZyAtLXNpbmNlPSIyIHdlZWtzIGFnbyIgIyBjb21taXRzIGZyb20gdGhlIGxhc3QgMiB3ZWVrcworJCBnaXQgbG9nIE1ha2VmaWxlICAgICAgIyBjb21taXRzIHdoaWNoIG1vZGlmeSBNYWtlZmlsZQorJCBnaXQgbG9nIGZzLwkJIyAuLi4gd2hpY2ggbW9kaWZ5IGFueSBmaWxlIHVuZGVyIGZzLworJCBnaXQgbG9nIC1TJ2ZvbygpJwkjIGNvbW1pdHMgd2hpY2ggYWRkIG9yIHJlbW92ZSBhbnkgZmlsZSBkYXRhCisJCQkjIG1hdGNoaW5nIHRoZSBzdHJpbmcgJ2ZvbygpJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbmQgb2YgY291cnNlIHlvdSBjYW4gY29tYmluZSBhbGwgb2YgdGhlc2U7IHRoZSBmb2xsb3dpbmcgZmluZHMKK2NvbW1pdHMgc2luY2UgdjIuNSB3aGljaCB0b3VjaCB0aGUgTWFrZWZpbGUgb3IgYW55IGZpbGUgdW5kZXIgZnM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyB2Mi41Li4gTWFrZWZpbGUgZnMvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWxzbyBhc2sgZ2l0IGxvZyB0byBzaG93IHBhdGNoZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgdGhlICItLXByZXR0eSIgb3B0aW9uIGluIHRoZSBsaW5rZ2l0OmdpdC1sb2dbMV0gbWFuIHBhZ2UgZm9yIG1vcmUKK2Rpc3BsYXkgb3B0aW9ucy4KKworTm90ZSB0aGF0IGdpdCBsb2cgc3RhcnRzIHdpdGggdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBhbmQgd29ya3MKK2JhY2t3YXJkcyB0aHJvdWdoIHRoZSBwYXJlbnRzOyBob3dldmVyLCBzaW5jZSBnaXQgaGlzdG9yeSBjYW4gY29udGFpbgorbXVsdGlwbGUgaW5kZXBlbmRlbnQgbGluZXMgb2YgZGV2ZWxvcG1lbnQsIHRoZSBwYXJ0aWN1bGFyIG9yZGVyIHRoYXQKK2NvbW1pdHMgYXJlIGxpc3RlZCBpbiBtYXkgYmUgc29tZXdoYXQgYXJiaXRyYXJ5LgorCitbW2dlbmVyYXRpbmctZGlmZnNdXQorR2VuZXJhdGluZyBkaWZmcworLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGdlbmVyYXRlIGRpZmZzIGJldHdlZW4gYW55IHR3byB2ZXJzaW9ucyB1c2luZworbGlua2dpdDpnaXQtZGlmZlsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiBtYXN0ZXIuLnRlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhhdCB3aWxsIHByb2R1Y2UgdGhlIGRpZmYgYmV0d2VlbiB0aGUgdGlwcyBvZiB0aGUgdHdvIGJyYW5jaGVzLiAgSWYKK3lvdSdkIHByZWZlciB0byBmaW5kIHRoZSBkaWZmIGZyb20gdGhlaXIgY29tbW9uIGFuY2VzdG9yIHRvIHRlc3QsIHlvdQorY2FuIHVzZSB0aHJlZSBkb3RzIGluc3RlYWQgb2YgdHdvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIG1hc3Rlci4uLnRlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZXRpbWVzIHdoYXQgeW91IHdhbnQgaW5zdGVhZCBpcyBhIHNldCBvZiBwYXRjaGVzOyBmb3IgdGhpcyB5b3UgY2FuCit1c2UgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggbWFzdGVyLi50ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgZ2VuZXJhdGUgYSBmaWxlIHdpdGggYSBwYXRjaCBmb3IgZWFjaCBjb21taXQgcmVhY2hhYmxlIGZyb20gdGVzdAorYnV0IG5vdCBmcm9tIG1hc3Rlci4KKworW1t2aWV3aW5nLW9sZC1maWxlLXZlcnNpb25zXV0KK1ZpZXdpbmcgb2xkIGZpbGUgdmVyc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHdheXMgdmlldyBhbiBvbGQgdmVyc2lvbiBvZiBhIGZpbGUgYnkganVzdCBjaGVja2luZyBvdXQgdGhlCitjb3JyZWN0IHJldmlzaW9uIGZpcnN0LiAgQnV0IHNvbWV0aW1lcyBpdCBpcyBtb3JlIGNvbnZlbmllbnQgdG8gYmUKK2FibGUgdG8gdmlldyBhbiBvbGQgdmVyc2lvbiBvZiBhIHNpbmdsZSBmaWxlIHdpdGhvdXQgY2hlY2tpbmcKK2FueXRoaW5nIG91dDsgdGhpcyBjb21tYW5kIGRvZXMgdGhhdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyB2Mi41OmZzL2xvY2tzLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVmb3JlIHRoZSBjb2xvbiBtYXkgYmUgYW55dGhpbmcgdGhhdCBuYW1lcyBhIGNvbW1pdCwgYW5kIGFmdGVyIGl0CittYXkgYmUgYW55IHBhdGggdG8gYSBmaWxlIHRyYWNrZWQgYnkgZ2l0LgorCitbW2hpc3RvcnktZXhhbXBsZXNdXQorRXhhbXBsZXMKKy0tLS0tLS0tCisKK1tbY291bnRpbmctY29tbWl0cy1vbi1hLWJyYW5jaF1dCitDb3VudGluZyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgb24gYSBicmFuY2gKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTdXBwb3NlIHlvdSB3YW50IHRvIGtub3cgaG93IG1hbnkgY29tbWl0cyB5b3UndmUgbWFkZSBvbiAibXlicmFuY2giCitzaW5jZSBpdCBkaXZlcmdlZCBmcm9tICJvcmlnaW4iOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSBvcmlnaW4uLm15YnJhbmNoIHwgd2MgLWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBvZnRlbiBzZWUgdGhpcyBzb3J0IG9mIHRoaW5nIGRvbmUgd2l0aCB0aGUKK2xvd2VyLWxldmVsIGNvbW1hbmQgbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0sIHdoaWNoIGp1c3QgbGlzdHMgdGhlIFNIQS0xJ3MKK29mIGFsbCB0aGUgZ2l2ZW4gY29tbWl0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LWxpc3Qgb3JpZ2luLi5teWJyYW5jaCB8IHdjIC1sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbY2hlY2tpbmctZm9yLWVxdWFsLWJyYW5jaGVzXV0KK0NoZWNrIHdoZXRoZXIgdHdvIGJyYW5jaGVzIHBvaW50IGF0IHRoZSBzYW1lIGhpc3RvcnkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU3VwcG9zZSB5b3Ugd2FudCB0byBjaGVjayB3aGV0aGVyIHR3byBicmFuY2hlcyBwb2ludCBhdCB0aGUgc2FtZSBwb2ludAoraW4gaGlzdG9yeS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiBvcmlnaW4uLm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHRlbGwgeW91IHdoZXRoZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBwcm9qZWN0IGFyZSB0aGUgc2FtZSBhdCB0aGUKK3R3byBicmFuY2hlczsgaW4gdGhlb3J5LCBob3dldmVyLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHNhbWUgcHJvamVjdAorY29udGVudHMgY291bGQgaGF2ZSBiZWVuIGFycml2ZWQgYXQgYnkgdHdvIGRpZmZlcmVudCBoaXN0b3JpY2FsCityb3V0ZXMuICBZb3UgY291bGQgY29tcGFyZSB0aGUgb2JqZWN0IG5hbWVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXYtbGlzdCBvcmlnaW4KK2UwNWRiMGZkNGYzMWRkZTcwMDVmMDc1YTg0Zjk2YjM2MGQwNTk4NGIKKyQgZ2l0IHJldi1saXN0IG1hc3RlcgorZTA1ZGIwZmQ0ZjMxZGRlNzAwNWYwNzVhODRmOTZiMzYwZDA1OTg0YgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPciB5b3UgY291bGQgcmVjYWxsIHRoYXQgdGhlIC4uLiBvcGVyYXRvciBzZWxlY3RzIGFsbCBjb21taXRzCitjb250YWluZWQgcmVhY2hhYmxlIGZyb20gZWl0aGVyIG9uZSByZWZlcmVuY2Ugb3IgdGhlIG90aGVyIGJ1dCBub3QKK2JvdGg6IHNvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyBvcmlnaW4uLi5tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCByZXR1cm4gbm8gY29tbWl0cyB3aGVuIHRoZSB0d28gYnJhbmNoZXMgYXJlIGVxdWFsLgorCitbW2ZpbmRpbmctdGFnZ2VkLWRlc2NlbmRhbnRzXV0KK0ZpbmQgZmlyc3QgdGFnZ2VkIHZlcnNpb24gaW5jbHVkaW5nIGEgZ2l2ZW4gZml4Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTdXBwb3NlIHlvdSBrbm93IHRoYXQgdGhlIGNvbW1pdCBlMDVkYjBmZCBmaXhlZCBhIGNlcnRhaW4gcHJvYmxlbS4KK1lvdSdkIGxpa2UgdG8gZmluZCB0aGUgZWFybGllc3QgdGFnZ2VkIHJlbGVhc2UgdGhhdCBjb250YWlucyB0aGF0CitmaXguCisKK09mIGNvdXJzZSwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgYW5zd2VyLS1pZiB0aGUgaGlzdG9yeSBicmFuY2hlZAorYWZ0ZXIgY29tbWl0IGUwNWRiMGZkLCB0aGVuIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlICJlYXJsaWVzdCIgdGFnZ2VkCityZWxlYXNlcy4KKworWW91IGNvdWxkIGp1c3QgdmlzdWFsbHkgaW5zcGVjdCB0aGUgY29tbWl0cyBzaW5jZSBlMDVkYjBmZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIGUwNWRiMGZkLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3IgeW91IGNhbiB1c2UgbGlua2dpdDpnaXQtbmFtZS1yZXZbMV0sIHdoaWNoIHdpbGwgZ2l2ZSB0aGUgY29tbWl0IGEKK25hbWUgYmFzZWQgb24gYW55IHRhZyBpdCBmaW5kcyBwb2ludGluZyB0byBvbmUgb2YgdGhlIGNvbW1pdCdzCitkZXNjZW5kYW50czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbmFtZS1yZXYgLS10YWdzIGUwNWRiMGZkCitlMDVkYjBmZCB0YWdzL3YxLjUuMC1yYzFeMH4yMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGlua2dpdDpnaXQtZGVzY3JpYmVbMV0gY29tbWFuZCBkb2VzIHRoZSBvcHBvc2l0ZSwgbmFtaW5nIHRoZQorcmV2aXNpb24gdXNpbmcgYSB0YWcgb24gd2hpY2ggdGhlIGdpdmVuIGNvbW1pdCBpcyBiYXNlZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGVzY3JpYmUgZTA1ZGIwZmQKK3YxLjUuMC1yYzAtMjYwLWdlMDVkYjBmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2J1dCB0aGF0IG1heSBzb21ldGltZXMgaGVscCB5b3UgZ3Vlc3Mgd2hpY2ggdGFncyBtaWdodCBjb21lIGFmdGVyIHRoZQorZ2l2ZW4gY29tbWl0LgorCitJZiB5b3UganVzdCB3YW50IHRvIHZlcmlmeSB3aGV0aGVyIGEgZ2l2ZW4gdGFnZ2VkIHZlcnNpb24gY29udGFpbnMgYQorZ2l2ZW4gY29tbWl0LCB5b3UgY291bGQgdXNlIGxpbmtnaXQ6Z2l0LW1lcmdlLWJhc2VbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlLWJhc2UgZTA1ZGIwZmQgdjEuNS4wLXJjMQorZTA1ZGIwZmQ0ZjMxZGRlNzAwNWYwNzVhODRmOTZiMzYwZDA1OTg0YgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVyZ2UtYmFzZSBjb21tYW5kIGZpbmRzIGEgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBnaXZlbiBjb21taXRzLAorYW5kIGFsd2F5cyByZXR1cm5zIG9uZSBvciB0aGUgb3RoZXIgaW4gdGhlIGNhc2Ugd2hlcmUgb25lIGlzIGEKK2Rlc2NlbmRhbnQgb2YgdGhlIG90aGVyOyBzbyB0aGUgYWJvdmUgb3V0cHV0IHNob3dzIHRoYXQgZTA1ZGIwZmQKK2FjdHVhbGx5IGlzIGFuIGFuY2VzdG9yIG9mIHYxLjUuMC1yYzEuCisKK0FsdGVybmF0aXZlbHksIG5vdGUgdGhhdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgdjEuNS4wLXJjMS4uZTA1ZGIwZmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBwcm9kdWNlIGVtcHR5IG91dHB1dCBpZiBhbmQgb25seSBpZiB2MS41LjAtcmMxIGluY2x1ZGVzIGUwNWRiMGZkLAorYmVjYXVzZSBpdCBvdXRwdXRzIG9ubHkgY29tbWl0cyB0aGF0IGFyZSBub3QgcmVhY2hhYmxlIGZyb20gdjEuNS4wLXJjMS4KKworQXMgeWV0IGFub3RoZXIgYWx0ZXJuYXRpdmUsIHRoZSBsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXSBjb21tYW5kIGxpc3RzCit0aGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSBpdHMgYXJndW1lbnRzIHdpdGggYSBkaXNwbGF5IG9uIHRoZSBsZWZ0LWhhbmQKK3NpZGUgdGhhdCBpbmRpY2F0ZXMgd2hpY2ggYXJndW1lbnRzIHRoYXQgY29tbWl0IGlzIHJlYWNoYWJsZSBmcm9tLiAgU28sCit5b3UgY2FuIHJ1biBzb21ldGhpbmcgbGlrZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCBlMDVkYjBmZCB2MS41LjAtcmMwIHYxLjUuMC1yYzEgdjEuNS4wLXJjMgorISBbZTA1ZGIwZmRdIEZpeCB3YXJuaW5ncyBpbiBzaGExX2ZpbGUuYyAtIHVzZSBDOTkgcHJpbnRmIGZvcm1hdCBpZgorYXZhaWxhYmxlCisgISBbdjEuNS4wLXJjMF0gR0lUIHYxLjUuMCBwcmV2aWV3CisgICEgW3YxLjUuMC1yYzFdIEdJVCB2MS41LjAtcmMxCisgICAhIFt2MS41LjAtcmMyXSBHSVQgdjEuNS4wLXJjMgorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RoZW4gc2VhcmNoIGZvciBhIGxpbmUgdGhhdCBsb29rcyBsaWtlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgKysgW2UwNWRiMGZkXSBGaXggd2FybmluZ3MgaW4gc2hhMV9maWxlLmMgLSB1c2UgQzk5IHByaW50ZiBmb3JtYXQgaWYKK2F2YWlsYWJsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGljaCBzaG93cyB0aGF0IGUwNWRiMGZkIGlzIHJlYWNoYWJsZSBmcm9tIGl0c2VsZiwgZnJvbSB2MS41LjAtcmMxLCBhbmQKK2Zyb20gdjEuNS4wLXJjMiwgYnV0IG5vdCBmcm9tIHYxLjUuMC1yYzAuCisKK1tbc2hvd2luZy1jb21taXRzLXVuaXF1ZS10by1hLWJyYW5jaF1dCitTaG93aW5nIGNvbW1pdHMgdW5pcXVlIHRvIGEgZ2l2ZW4gYnJhbmNoCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1N1cHBvc2UgeW91IHdvdWxkIGxpa2UgdG8gc2VlIGFsbCB0aGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSB0aGUgYnJhbmNoCitoZWFkIG5hbWVkICJtYXN0ZXIiIGJ1dCBub3QgZnJvbSBhbnkgb3RoZXIgaGVhZCBpbiB5b3VyIHJlcG9zaXRvcnkuCisKK1dlIGNhbiBsaXN0IGFsbCB0aGUgaGVhZHMgaW4gdGhpcyByZXBvc2l0b3J5IHdpdGgKK2xpbmtnaXQ6Z2l0LXNob3ctcmVmWzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LXJlZiAtLWhlYWRzCitiZjYyMTk2YjVlMzYzZDczMzUzYTlkY2YwOTRjNTk1OTVmMzE1M2I3IHJlZnMvaGVhZHMvY29yZS10dXRvcmlhbAorZGI3NjhkNTUwNGMxYmI0NmY2M2VlOWQ2ZTE3NzJiZDA0N2UwNWJmOSByZWZzL2hlYWRzL21haW50CithMDcxNTdhYzYyNGIyNTI0YTA1OWEzNDE0ZTk5ZjZmNDRiZWJjMWU3IHJlZnMvaGVhZHMvbWFzdGVyCisyNGRiYzE4MGVhMTRkYzFhZWJlMDlmMTRjOGVjZjMyMDEwNjkwNjI3IHJlZnMvaGVhZHMvdHV0b3JpYWwtMgorMWU4NzQ4NmFlMDY2MjZjMmYzMWVhYTYzZDI2ZmMwZmQ2NDZjOGFmMiByZWZzL2hlYWRzL3R1dG9yaWFsLWZpeGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIGNhbiBnZXQganVzdCB0aGUgYnJhbmNoLWhlYWQgbmFtZXMsIGFuZCByZW1vdmUgIm1hc3RlciIsIHdpdGgKK3RoZSBoZWxwIG9mIHRoZSBzdGFuZGFyZCB1dGlsaXRpZXMgY3V0IGFuZCBncmVwOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LXJlZiAtLWhlYWRzIHwgY3V0IC1kJyAnIC1mMiB8IGdyZXAgLXYgJ15yZWZzL2hlYWRzL21hc3RlcicKK3JlZnMvaGVhZHMvY29yZS10dXRvcmlhbAorcmVmcy9oZWFkcy9tYWludAorcmVmcy9oZWFkcy90dXRvcmlhbC0yCityZWZzL2hlYWRzL3R1dG9yaWFsLWZpeGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuZCB0aGVuIHdlIGNhbiBhc2sgdG8gc2VlIGFsbCB0aGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSBtYXN0ZXIKK2J1dCBub3QgZnJvbSB0aGVzZSBvdGhlciBoZWFkczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIG1hc3RlciAtLW5vdCAkKCBnaXQgc2hvdy1yZWYgLS1oZWFkcyB8IGN1dCAtZCcgJyAtZjIgfAorCQkJCWdyZXAgLXYgJ15yZWZzL2hlYWRzL21hc3RlcicgKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPYnZpb3VzbHksIGVuZGxlc3MgdmFyaWF0aW9ucyBhcmUgcG9zc2libGU7IGZvciBleGFtcGxlLCB0byBzZWUgYWxsCitjb21taXRzIHJlYWNoYWJsZSBmcm9tIHNvbWUgaGVhZCBidXQgbm90IGZyb20gYW55IHRhZyBpbiB0aGUgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrICQoIGdpdCBzaG93LXJlZiAtLWhlYWRzICkgLS1ub3QgICQoIGdpdCBzaG93LXJlZiAtLXRhZ3MgKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoU2VlIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddIGZvciBleHBsYW5hdGlvbnMgb2YgY29tbWl0LXNlbGVjdGluZworc3ludGF4IHN1Y2ggYXMgYC0tbm90YC4pCisKK1tbbWFraW5nLWEtcmVsZWFzZV1dCitDcmVhdGluZyBhIGNoYW5nZWxvZyBhbmQgdGFyYmFsbCBmb3IgYSBzb2Z0d2FyZSByZWxlYXNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBsaW5rZ2l0OmdpdC1hcmNoaXZlWzFdIGNvbW1hbmQgY2FuIGNyZWF0ZSBhIHRhciBvciB6aXAgYXJjaGl2ZSBmcm9tCithbnkgdmVyc2lvbiBvZiBhIHByb2plY3Q7IGZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAtLXByZWZpeD1wcm9qZWN0LyBIRUFEIHwgZ3ppcCA+bGF0ZXN0LnRhci5negorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHVzZSBIRUFEIHRvIHByb2R1Y2UgYSB0YXIgYXJjaGl2ZSBpbiB3aGljaCBlYWNoIGZpbGVuYW1lIGlzCitwcmVjZWRlZCBieSAicHJvamVjdC8iLgorCitJZiB5b3UncmUgcmVsZWFzaW5nIGEgbmV3IHZlcnNpb24gb2YgYSBzb2Z0d2FyZSBwcm9qZWN0LCB5b3UgbWF5IHdhbnQKK3RvIHNpbXVsdGFuZW91c2x5IG1ha2UgYSBjaGFuZ2Vsb2cgdG8gaW5jbHVkZSBpbiB0aGUgcmVsZWFzZQorYW5ub3VuY2VtZW50LgorCitMaW51cyBUb3J2YWxkcywgZm9yIGV4YW1wbGUsIG1ha2VzIG5ldyBrZXJuZWwgcmVsZWFzZXMgYnkgdGFnZ2luZyB0aGVtLAordGhlbiBydW5uaW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIHJlbGVhc2Utc2NyaXB0IDIuNi4xMiAyLjYuMTMtcmM2IDIuNi4xMy1yYzcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hlcmUgcmVsZWFzZS1zY3JpcHQgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBsb29rcyBsaWtlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKK3N0YWJsZT0iJDEiCitsYXN0PSIkMiIKK25ldz0iJDMiCitlY2hvICIjIGdpdCB0YWcgdiRuZXciCitlY2hvICJnaXQgYXJjaGl2ZSAtLXByZWZpeD1saW51eC0kbmV3LyB2JG5ldyB8IGd6aXAgLTkgPiAuLi9saW51eC0kbmV3LnRhci5neiIKK2VjaG8gImdpdCBkaWZmIHYkc3RhYmxlIHYkbmV3IHwgZ3ppcCAtOSA+IC4uL3BhdGNoLSRuZXcuZ3oiCitlY2hvICJnaXQgbG9nIC0tbm8tbWVyZ2VzIHYkbmV3IF52JGxhc3QgPiAuLi9DaGFuZ2VMb2ctJG5ldyIKK2VjaG8gImdpdCBzaG9ydGxvZyAtLW5vLW1lcmdlcyB2JG5ldyBediRsYXN0ID4gLi4vU2hvcnRMb2ciCitlY2hvICJnaXQgZGlmZiAtLXN0YXQgLS1zdW1tYXJ5IC1NIHYkbGFzdCB2JG5ldyA+IC4uL2RpZmZzdGF0LSRuZXciCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB0aGVuIGhlIGp1c3QgY3V0LWFuZC1wYXN0ZXMgdGhlIG91dHB1dCBjb21tYW5kcyBhZnRlciB2ZXJpZnlpbmcgdGhhdAordGhleSBsb29rIE9LLgorCitbW0ZpbmRpbmctY29tbWl0cy1XaXRoLWdpdmVuLUNvbnRlbnRdXQorRmluZGluZyBjb21taXRzIHJlZmVyZW5jaW5nIGEgZmlsZSB3aXRoIGdpdmVuIGNvbnRlbnQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NvbWVib2R5IGhhbmRzIHlvdSBhIGNvcHkgb2YgYSBmaWxlLCBhbmQgYXNrcyB3aGljaCBjb21taXRzIG1vZGlmaWVkIGEKK2ZpbGUgc3VjaCB0aGF0IGl0IGNvbnRhaW5lZCB0aGUgZ2l2ZW4gY29udGVudCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZQorY29tbWl0LiAgWW91IGNhbiBmaW5kIG91dCB3aXRoIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgIGdpdCBsb2cgLS1yYXcgLS1hYmJyZXY9NDAgLS1wcmV0dHk9b25lbGluZSB8CisJZ3JlcCAtQiAxIGBnaXQgaGFzaC1vYmplY3QgZmlsZW5hbWVgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpZ3VyaW5nIG91dCB3aHkgdGhpcyB3b3JrcyBpcyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIHRvIHRoZSAoYWR2YW5jZWQpCitzdHVkZW50LiAgVGhlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSwgbGlua2dpdDpnaXQtZGlmZi10cmVlWzFdLCBhbmQKK2xpbmtnaXQ6Z2l0LWhhc2gtb2JqZWN0WzFdIG1hbiBwYWdlcyBtYXkgcHJvdmUgaGVscGZ1bC4KKworW1tEZXZlbG9waW5nLVdpdGgtZ2l0XV0KK0RldmVsb3Bpbmcgd2l0aCBnaXQKKz09PT09PT09PT09PT09PT09PT0KKworW1t0ZWxsaW5nLWdpdC15b3VyLW5hbWVdXQorVGVsbGluZyBnaXQgeW91ciBuYW1lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVmb3JlIGNyZWF0aW5nIGFueSBjb21taXRzLCB5b3Ugc2hvdWxkIGludHJvZHVjZSB5b3Vyc2VsZiB0byBnaXQuICBUaGUKK2Vhc2llc3Qgd2F5IHRvIGRvIHNvIGlzIHRvIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGxpbmVzIGFwcGVhciBpbiBhCitmaWxlIG5hbWVkIC5naXRjb25maWcgaW4geW91ciBob21lIGRpcmVjdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbdXNlcl0KKwluYW1lID0gWW91ciBOYW1lIENvbWVzIEhlcmUKKwllbWFpbCA9IHlvdUB5b3VyZG9tYWluLmV4YW1wbGUuY29tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKFNlZSB0aGUgIkNPTkZJR1VSQVRJT04gRklMRSIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yCitkZXRhaWxzIG9uIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuKQorCisKK1tbY3JlYXRpbmctYS1uZXctcmVwb3NpdG9yeV1dCitDcmVhdGluZyBhIG5ldyByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0aW5nIGEgbmV3IHJlcG9zaXRvcnkgZnJvbSBzY3JhdGNoIGlzIHZlcnkgZWFzeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBta2RpciBwcm9qZWN0CiskIGNkIHByb2plY3QKKyQgZ2l0IGluaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGhhdmUgc29tZSBpbml0aWFsIGNvbnRlbnQgKHNheSwgYSB0YXJiYWxsKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCB0YXIgeHp2ZiBwcm9qZWN0LnRhci5negorJCBjZCBwcm9qZWN0CiskIGdpdCBpbml0CiskIGdpdCBhZGQgLiAjIGluY2x1ZGUgZXZlcnl0aGluZyBiZWxvdyAuLyBpbiB0aGUgZmlyc3QgY29tbWl0OgorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbaG93LXRvLW1ha2UtYS1jb21taXRdXQorSG93IHRvIG1ha2UgYSBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0aW5nIGEgbmV3IGNvbW1pdCB0YWtlcyB0aHJlZSBzdGVwczoKKworCTEuIE1ha2luZyBzb21lIGNoYW5nZXMgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHVzaW5nIHlvdXIKKwkgICBmYXZvcml0ZSBlZGl0b3IuCisJMi4gVGVsbGluZyBnaXQgYWJvdXQgeW91ciBjaGFuZ2VzLgorCTMuIENyZWF0aW5nIHRoZSBjb21taXQgdXNpbmcgdGhlIGNvbnRlbnQgeW91IHRvbGQgZ2l0IGFib3V0CisJICAgaW4gc3RlcCAyLgorCitJbiBwcmFjdGljZSwgeW91IGNhbiBpbnRlcmxlYXZlIGFuZCByZXBlYXQgc3RlcHMgMSBhbmQgMiBhcyBtYW55Cit0aW1lcyBhcyB5b3Ugd2FudDogaW4gb3JkZXIgdG8ga2VlcCB0cmFjayBvZiB3aGF0IHlvdSB3YW50IGNvbW1pdHRlZAorYXQgc3RlcCAzLCBnaXQgbWFpbnRhaW5zIGEgc25hcHNob3Qgb2YgdGhlIHRyZWUncyBjb250ZW50cyBpbiBhCitzcGVjaWFsIHN0YWdpbmcgYXJlYSBjYWxsZWQgInRoZSBpbmRleC4iCisKK0F0IHRoZSBiZWdpbm5pbmcsIHRoZSBjb250ZW50IG9mIHRoZSBpbmRleCB3aWxsIGJlIGlkZW50aWNhbCB0bwordGhhdCBvZiB0aGUgSEVBRC4gIFRoZSBjb21tYW5kICJnaXQgZGlmZiAtLWNhY2hlZCIsIHdoaWNoIHNob3dzCit0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBIRUFEIGFuZCB0aGUgaW5kZXgsIHNob3VsZCB0aGVyZWZvcmUKK3Byb2R1Y2Ugbm8gb3V0cHV0IGF0IHRoYXQgcG9pbnQuCisKK01vZGlmeWluZyB0aGUgaW5kZXggaXMgZWFzeToKKworVG8gdXBkYXRlIHRoZSBpbmRleCB3aXRoIHRoZSBuZXcgY29udGVudHMgb2YgYSBtb2RpZmllZCBmaWxlLCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIHBhdGgvdG8vZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBhZGQgdGhlIGNvbnRlbnRzIG9mIGEgbmV3IGZpbGUgdG8gdGhlIGluZGV4LCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIHBhdGgvdG8vZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZW1vdmUgYSBmaWxlIGZyb20gdGhlIGluZGV4IGFuZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJtIHBhdGgvdG8vZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciBlYWNoIHN0ZXAgeW91IGNhbiB2ZXJpZnkgdGhhdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIC0tY2FjaGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5cyBzaG93cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBIRUFEIGFuZCB0aGUgaW5kZXggZmlsZS0tdGhpcworaXMgd2hhdCB5b3UnZCBjb21taXQgaWYgeW91IGNyZWF0ZWQgdGhlIGNvbW1pdCBub3ctLWFuZCB0aGF0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2hvd3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggZmlsZS4KKworTm90ZSB0aGF0ICJnaXQgYWRkIiBhbHdheXMgYWRkcyBqdXN0IHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIGEgZmlsZQordG8gdGhlIGluZGV4OyBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlIHNhbWUgZmlsZSB3aWxsIGJlIGlnbm9yZWQgdW5sZXNzCit5b3UgcnVuIGBnaXQgYWRkYCBvbiB0aGUgZmlsZSBhZ2Fpbi4KKworV2hlbiB5b3UncmUgcmVhZHksIGp1c3QgcnVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgZ2l0IHdpbGwgcHJvbXB0IHlvdSBmb3IgYSBjb21taXQgbWVzc2FnZSBhbmQgdGhlbiBjcmVhdGUgdGhlIG5ldworY29tbWl0LiAgQ2hlY2sgdG8gbWFrZSBzdXJlIGl0IGxvb2tzIGxpa2Ugd2hhdCB5b3UgZXhwZWN0ZWQgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIGEgc3BlY2lhbCBzaG9ydGN1dCwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1hCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgdXBkYXRlIHRoZSBpbmRleCB3aXRoIGFueSBmaWxlcyB0aGF0IHlvdSd2ZSBtb2RpZmllZCBvciByZW1vdmVkCithbmQgY3JlYXRlIGEgY29tbWl0LCBhbGwgaW4gb25lIHN0ZXAuCisKK0EgbnVtYmVyIG9mIGNvbW1hbmRzIGFyZSB1c2VmdWwgZm9yIGtlZXBpbmcgdHJhY2sgb2Ygd2hhdCB5b3UncmUKK2Fib3V0IHRvIGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiAtLWNhY2hlZCAjIGRpZmZlcmVuY2UgYmV0d2VlbiBIRUFEIGFuZCB0aGUgaW5kZXg7IHdoYXQKKwkJICAgICMgd291bGQgYmUgY29tbWl0dGVkIGlmIHlvdSByYW4gImNvbW1pdCIgbm93LgorJCBnaXQgZGlmZgkgICAgIyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGluZGV4IGZpbGUgYW5kIHlvdXIKKwkJICAgICMgd29ya2luZyBkaXJlY3Rvcnk7IGNoYW5nZXMgdGhhdCB3b3VsZCBub3QKKwkJICAgICMgYmUgaW5jbHVkZWQgaWYgeW91IHJhbiAiY29tbWl0IiBub3cuCiskIGdpdCBkaWZmIEhFQUQJICAgICMgZGlmZmVyZW5jZSBiZXR3ZWVuIEhFQUQgYW5kIHdvcmtpbmcgdHJlZTsgd2hhdAorCQkgICAgIyB3b3VsZCBiZSBjb21taXR0ZWQgaWYgeW91IHJhbiAiY29tbWl0IC1hIiBub3cuCiskIGdpdCBzdGF0dXMJICAgICMgYSBicmllZiBwZXItZmlsZSBzdW1tYXJ5IG9mIHRoZSBhYm92ZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIHVzZSBsaW5rZ2l0OmdpdC1ndWlbMV0gdG8gY3JlYXRlIGNvbW1pdHMsIHZpZXcgY2hhbmdlcyBpbgordGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIGZpbGVzLCBhbmQgaW5kaXZpZHVhbGx5IHNlbGVjdCBkaWZmIGh1bmtzCitmb3IgaW5jbHVzaW9uIGluIHRoZSBpbmRleCAoYnkgcmlnaHQtY2xpY2tpbmcgb24gdGhlIGRpZmYgaHVuayBhbmQKK2Nob29zaW5nICJTdGFnZSBIdW5rIEZvciBDb21taXQiKS4KKworW1tjcmVhdGluZy1nb29kLWNvbW1pdC1tZXNzYWdlc11dCitDcmVhdGluZyBnb29kIGNvbW1pdCBtZXNzYWdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhvdWdoIG5vdCByZXF1aXJlZCwgaXQncyBhIGdvb2QgaWRlYSB0byBiZWdpbiB0aGUgY29tbWl0IG1lc3NhZ2UKK3dpdGggYSBzaW5nbGUgc2hvcnQgKGxlc3MgdGhhbiA1MCBjaGFyYWN0ZXIpIGxpbmUgc3VtbWFyaXppbmcgdGhlCitjaGFuZ2UsIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSBhbmQgdGhlbiBhIG1vcmUgdGhvcm91Z2gKK2Rlc2NyaXB0aW9uLiAgVGhlIHRleHQgdXAgdG8gdGhlIGZpcnN0IGJsYW5rIGxpbmUgaW4gYSBjb21taXQKK21lc3NhZ2UgaXMgdHJlYXRlZCBhcyB0aGUgY29tbWl0IHRpdGxlLCBhbmQgdGhhdCB0aXRsZSBpcyB1c2VkCit0aHJvdWdob3V0IGdpdC4gIEZvciBleGFtcGxlLCBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gdHVybnMgYQorY29tbWl0IGludG8gZW1haWwsIGFuZCBpdCB1c2VzIHRoZSB0aXRsZSBvbiB0aGUgU3ViamVjdCBsaW5lIGFuZCB0aGUKK3Jlc3Qgb2YgdGhlIGNvbW1pdCBpbiB0aGUgYm9keS4KKworCitbW2lnbm9yaW5nLWZpbGVzXV0KK0lnbm9yaW5nIGZpbGVzCistLS0tLS0tLS0tLS0tLQorCitBIHByb2plY3Qgd2lsbCBvZnRlbiBnZW5lcmF0ZSBmaWxlcyB0aGF0IHlvdSBkbyAnbm90JyB3YW50IHRvIHRyYWNrIHdpdGggZ2l0LgorVGhpcyB0eXBpY2FsbHkgaW5jbHVkZXMgZmlsZXMgZ2VuZXJhdGVkIGJ5IGEgYnVpbGQgcHJvY2VzcyBvciB0ZW1wb3JhcnkKK2JhY2t1cCBmaWxlcyBtYWRlIGJ5IHlvdXIgZWRpdG9yLiBPZiBjb3Vyc2UsICdub3QnIHRyYWNraW5nIGZpbGVzIHdpdGggZ2l0CitpcyBqdXN0IGEgbWF0dGVyIG9mICdub3QnIGNhbGxpbmcgYGdpdCBhZGRgIG9uIHRoZW0uIEJ1dCBpdCBxdWlja2x5IGJlY29tZXMKK2Fubm95aW5nIHRvIGhhdmUgdGhlc2UgdW50cmFja2VkIGZpbGVzIGx5aW5nIGFyb3VuZDsgZS5nLiB0aGV5IG1ha2UKK2BnaXQgYWRkIC5gIHByYWN0aWNhbGx5IHVzZWxlc3MsIGFuZCB0aGV5IGtlZXAgc2hvd2luZyB1cCBpbiB0aGUgb3V0cHV0IG9mCitgZ2l0IHN0YXR1c2AuCisKK1lvdSBjYW4gdGVsbCBnaXQgdG8gaWdub3JlIGNlcnRhaW4gZmlsZXMgYnkgY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCAuZ2l0aWdub3JlCitpbiB0aGUgdG9wIGxldmVsIG9mIHlvdXIgd29ya2luZyBkaXJlY3RvcnksIHdpdGggY29udGVudHMgc3VjaCBhczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyBhcmUgY29uc2lkZXJlZCBjb21tZW50cy4KKyMgSWdub3JlIGFueSBmaWxlIG5hbWVkIGZvby50eHQuCitmb28udHh0CisjIElnbm9yZSAoZ2VuZXJhdGVkKSBodG1sIGZpbGVzLAorKi5odG1sCisjIGV4Y2VwdCBmb28uaHRtbCB3aGljaCBpcyBtYWludGFpbmVkIGJ5IGhhbmQuCishZm9vLmh0bWwKKyMgSWdub3JlIG9iamVjdHMgYW5kIGFyY2hpdmVzLgorKi5bb2FdCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSBsaW5rZ2l0OmdpdGlnbm9yZVs1XSBmb3IgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiB0aGUgc3ludGF4LiAgWW91IGNhbgorYWxzbyBwbGFjZSAuZ2l0aWdub3JlIGZpbGVzIGluIG90aGVyIGRpcmVjdG9yaWVzIGluIHlvdXIgd29ya2luZyB0cmVlLCBhbmQgdGhleQord2lsbCBhcHBseSB0byB0aG9zZSBkaXJlY3RvcmllcyBhbmQgdGhlaXIgc3ViZGlyZWN0b3JpZXMuICBUaGUgYC5naXRpZ25vcmVgCitmaWxlcyBjYW4gYmUgYWRkZWQgdG8geW91ciByZXBvc2l0b3J5IGxpa2UgYW55IG90aGVyIGZpbGVzIChqdXN0IHJ1biBgZ2l0IGFkZAorLmdpdGlnbm9yZWAgYW5kIGBnaXQgY29tbWl0YCwgYXMgdXN1YWwpLCB3aGljaCBpcyBjb252ZW5pZW50IHdoZW4gdGhlIGV4Y2x1ZGUKK3BhdHRlcm5zIChzdWNoIGFzIHBhdHRlcm5zIG1hdGNoaW5nIGJ1aWxkIG91dHB1dCBmaWxlcykgd291bGQgYWxzbyBtYWtlIHNlbnNlCitmb3Igb3RoZXIgdXNlcnMgd2hvIGNsb25lIHlvdXIgcmVwb3NpdG9yeS4KKworSWYgeW91IHdpc2ggdGhlIGV4Y2x1ZGUgcGF0dGVybnMgdG8gYWZmZWN0IG9ubHkgY2VydGFpbiByZXBvc2l0b3JpZXMKKyhpbnN0ZWFkIG9mIGV2ZXJ5IHJlcG9zaXRvcnkgZm9yIGEgZ2l2ZW4gcHJvamVjdCksIHlvdSBtYXkgaW5zdGVhZCBwdXQKK3RoZW0gaW4gYSBmaWxlIGluIHlvdXIgcmVwb3NpdG9yeSBuYW1lZCAuZ2l0L2luZm8vZXhjbHVkZSwgb3IgaW4gYW55IGZpbGUKK3NwZWNpZmllZCBieSB0aGUgYGNvcmUuZXhjbHVkZXNmaWxlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgU29tZSBnaXQKK2NvbW1hbmRzIGNhbiBhbHNvIHRha2UgZXhjbHVkZSBwYXR0ZXJucyBkaXJlY3RseSBvbiB0aGUgY29tbWFuZCBsaW5lLgorU2VlIGxpbmtnaXQ6Z2l0aWdub3JlWzVdIGZvciB0aGUgZGV0YWlscy4KKworW1tob3ctdG8tbWVyZ2VdXQorSG93IHRvIG1lcmdlCistLS0tLS0tLS0tLS0KKworWW91IGNhbiByZWpvaW4gdHdvIGRpdmVyZ2luZyBicmFuY2hlcyBvZiBkZXZlbG9wbWVudCB1c2luZworbGlua2dpdDpnaXQtbWVyZ2VbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlIGJyYW5jaG5hbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbWVyZ2VzIHRoZSBkZXZlbG9wbWVudCBpbiB0aGUgYnJhbmNoICJicmFuY2huYW1lIiBpbnRvIHRoZSBjdXJyZW50CiticmFuY2guCisKK0EgbWVyZ2UgaXMgbWFkZSBieSBjb21iaW5pbmcgdGhlIGNoYW5nZXMgbWFkZSBpbiAiYnJhbmNobmFtZSIgYW5kIHRoZQorY2hhbmdlcyBtYWRlIHVwIHRvIHRoZSBsYXRlc3QgY29tbWl0IGluIHlvdXIgY3VycmVudCBicmFuY2ggc2luY2UKK3RoZWlyIGhpc3RvcmllcyBmb3JrZWQuIFRoZSB3b3JrIHRyZWUgaXMgb3ZlcndyaXR0ZW4gYnkgdGhlIHJlc3VsdCBvZgordGhlIG1lcmdlIHdoZW4gdGhpcyBjb21iaW5pbmcgaXMgZG9uZSBjbGVhbmx5LCBvciBvdmVyd3JpdHRlbiBieSBhCitoYWxmLW1lcmdlZCByZXN1bHRzIHdoZW4gdGhpcyBjb21iaW5pbmcgcmVzdWx0cyBpbiBjb25mbGljdHMuCitUaGVyZWZvcmUsIGlmIHlvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgdG91Y2hpbmcgdGhlIHNhbWUgZmlsZXMgYXMKK3RoZSBvbmVzIGltcGFjdGVkIGJ5IHRoZSBtZXJnZSwgR2l0IHdpbGwgcmVmdXNlIHRvIHByb2NlZWQuIE1vc3Qgb2YKK3RoZSB0aW1lLCB5b3Ugd2lsbCB3YW50IHRvIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UsCithbmQgaWYgeW91IGRvbid0LCB0aGVuIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdIGNhbiB0YWtlIHRoZXNlIGNoYW5nZXMKK2F3YXkgd2hpbGUgeW91J3JlIGRvaW5nIHRoZSBtZXJnZSwgYW5kIHJlYXBwbHkgdGhlbSBhZnRlcndhcmRzLgorCitJZiB0aGUgY2hhbmdlcyBhcmUgaW5kZXBlbmRlbnQgZW5vdWdoLCBHaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNvbXBsZXRlCit0aGUgbWVyZ2UgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IChvciByZXVzZSBhbiBleGlzdGluZyBjb21taXQgaW4gY2FzZQorb2YgPDxmYXN0LWZvcndhcmRzLGZhc3QtZm9yd2FyZD4+LCBzZWUgYmVsb3cpLiBPbiB0aGUgb3RoZXIgaGFuZCwKK2lmIHRoZXJlIGFyZSBjb25mbGljdHMtLWZvciBleGFtcGxlLCBpZiB0aGUgc2FtZSBmaWxlIGlzCittb2RpZmllZCBpbiB0d28gZGlmZmVyZW50IHdheXMgaW4gdGhlIHJlbW90ZSBicmFuY2ggYW5kIHRoZSBsb2NhbAorYnJhbmNoLS10aGVuIHlvdSBhcmUgd2FybmVkOyB0aGUgb3V0cHV0IG1heSBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlIG5leHQKKyAxMDAlICg0LzQpIGRvbmUKK0F1dG8tbWVyZ2VkIGZpbGUudHh0CitDT05GTElDVCAoY29udGVudCk6IE1lcmdlIGNvbmZsaWN0IGluIGZpbGUudHh0CitBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb25mbGljdCBtYXJrZXJzIGFyZSBsZWZ0IGluIHRoZSBwcm9ibGVtYXRpYyBmaWxlcywgYW5kIGFmdGVyCit5b3UgcmVzb2x2ZSB0aGUgY29uZmxpY3RzIG1hbnVhbGx5LCB5b3UgY2FuIHVwZGF0ZSB0aGUgaW5kZXgKK3dpdGggdGhlIGNvbnRlbnRzIGFuZCBydW4gZ2l0IGNvbW1pdCwgYXMgeW91IG5vcm1hbGx5IHdvdWxkIHdoZW4KK2NyZWF0aW5nIGEgbmV3IGZpbGUuCisKK0lmIHlvdSBleGFtaW5lIHRoZSByZXN1bHRpbmcgY29tbWl0IHVzaW5nIGdpdGssIHlvdSB3aWxsIHNlZSB0aGF0IGl0CitoYXMgdHdvIHBhcmVudHMsIG9uZSBwb2ludGluZyB0byB0aGUgdG9wIG9mIHRoZSBjdXJyZW50IGJyYW5jaCwgYW5kCitvbmUgdG8gdGhlIHRvcCBvZiB0aGUgb3RoZXIgYnJhbmNoLgorCitbW3Jlc29sdmluZy1hLW1lcmdlXV0KK1Jlc29sdmluZyBhIG1lcmdlCistLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGEgbWVyZ2UgaXNuJ3QgcmVzb2x2ZWQgYXV0b21hdGljYWxseSwgZ2l0IGxlYXZlcyB0aGUgaW5kZXggYW5kCit0aGUgd29ya2luZyB0cmVlIGluIGEgc3BlY2lhbCBzdGF0ZSB0aGF0IGdpdmVzIHlvdSBhbGwgdGhlCitpbmZvcm1hdGlvbiB5b3UgbmVlZCB0byBoZWxwIHJlc29sdmUgdGhlIG1lcmdlLgorCitGaWxlcyB3aXRoIGNvbmZsaWN0cyBhcmUgbWFya2VkIHNwZWNpYWxseSBpbiB0aGUgaW5kZXgsIHNvIHVudGlsIHlvdQorcmVzb2x2ZSB0aGUgcHJvYmxlbSBhbmQgdXBkYXRlIHRoZSBpbmRleCwgbGlua2dpdDpnaXQtY29tbWl0WzFdIHdpbGwKK2ZhaWw6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorZmlsZS50eHQ6IG5lZWRzIG1lcmdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Fsc28sIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSB3aWxsIGxpc3QgdGhvc2UgZmlsZXMgYXMgInVubWVyZ2VkIiwgYW5kIHRoZQorZmlsZXMgd2l0aCBjb25mbGljdHMgd2lsbCBoYXZlIGNvbmZsaWN0IG1hcmtlcnMgYWRkZWQsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPDw8PDw8PCBIRUFEOmZpbGUudHh0CitIZWxsbyB3b3JsZAorPT09PT09PQorR29vZGJ5ZQorPj4+Pj4+PiA3Nzk3NmRhMzVhMTFkYjQ1ODBiODBhZTI3ZThkNjVjYWY1MjA4MDg2OmZpbGUudHh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCB5b3UgbmVlZCB0byBkbyBpcyBlZGl0IHRoZSBmaWxlcyB0byByZXNvbHZlIHRoZSBjb25mbGljdHMsIGFuZCB0aGVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGFkZCBmaWxlLnR4dAorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugd2lsbCBhbHJlYWR5IGJlIGZpbGxlZCBpbiBmb3IgeW91IHdpdGgKK3NvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lcmdlLiAgTm9ybWFsbHkgeW91IGNhbiBqdXN0IHVzZSB0aGlzCitkZWZhdWx0IG1lc3NhZ2UgdW5jaGFuZ2VkLCBidXQgeW91IG1heSBhZGQgYWRkaXRpb25hbCBjb21tZW50YXJ5IG9mCit5b3VyIG93biBpZiBkZXNpcmVkLgorCitUaGUgYWJvdmUgaXMgYWxsIHlvdSBuZWVkIHRvIGtub3cgdG8gcmVzb2x2ZSBhIHNpbXBsZSBtZXJnZS4gIEJ1dCBnaXQKK2Fsc28gcHJvdmlkZXMgbW9yZSBpbmZvcm1hdGlvbiB0byBoZWxwIHJlc29sdmUgY29uZmxpY3RzOgorCitbW2NvbmZsaWN0LXJlc29sdXRpb25dXQorR2V0dGluZyBjb25mbGljdC1yZXNvbHV0aW9uIGhlbHAgZHVyaW5nIGEgbWVyZ2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FsbCBvZiB0aGUgY2hhbmdlcyB0aGF0IGdpdCB3YXMgYWJsZSB0byBtZXJnZSBhdXRvbWF0aWNhbGx5IGFyZQorYWxyZWFkeSBhZGRlZCB0byB0aGUgaW5kZXggZmlsZSwgc28gbGlua2dpdDpnaXQtZGlmZlsxXSBzaG93cyBvbmx5Cit0aGUgY29uZmxpY3RzLiAgSXQgdXNlcyBhbiB1bnVzdWFsIHN5bnRheDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorZGlmZiAtLWNjIGZpbGUudHh0CitpbmRleCA4MDI5OTJjLDJiNjAyMDcuLjAwMDAwMDAKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEBAIC0xLDEgLTEsMSArMSw1IEBAQAorKys8PDw8PDw8IEhFQUQ6ZmlsZS50eHQKKyArSGVsbG8gd29ybGQKKysrPT09PT09PQorKyBHb29kYnllCisrKz4+Pj4+Pj4gNzc5NzZkYTM1YTExZGI0NTgwYjgwYWUyN2U4ZDY1Y2FmNTIwODA4NjpmaWxlLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWNhbGwgdGhhdCB0aGUgY29tbWl0IHdoaWNoIHdpbGwgYmUgY29tbWl0dGVkIGFmdGVyIHdlIHJlc29sdmUgdGhpcworY29uZmxpY3Qgd2lsbCBoYXZlIHR3byBwYXJlbnRzIGluc3RlYWQgb2YgdGhlIHVzdWFsIG9uZTogb25lIHBhcmVudAord2lsbCBiZSBIRUFELCB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaDsgdGhlIG90aGVyIHdpbGwgYmUgdGhlCit0aXAgb2YgdGhlIG90aGVyIGJyYW5jaCwgd2hpY2ggaXMgc3RvcmVkIHRlbXBvcmFyaWx5IGluIE1FUkdFX0hFQUQuCisKK0R1cmluZyB0aGUgbWVyZ2UsIHRoZSBpbmRleCBob2xkcyB0aHJlZSB2ZXJzaW9ucyBvZiBlYWNoIGZpbGUuICBFYWNoIG9mCit0aGVzZSB0aHJlZSAiZmlsZSBzdGFnZXMiIHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUgZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyA6MTpmaWxlLnR4dAkjIHRoZSBmaWxlIGluIGEgY29tbW9uIGFuY2VzdG9yIG9mIGJvdGggYnJhbmNoZXMKKyQgZ2l0IHNob3cgOjI6ZmlsZS50eHQJIyB0aGUgdmVyc2lvbiBmcm9tIEhFQUQuCiskIGdpdCBzaG93IDozOmZpbGUudHh0CSMgdGhlIHZlcnNpb24gZnJvbSBNRVJHRV9IRUFELgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHlvdSBhc2sgbGlua2dpdDpnaXQtZGlmZlsxXSB0byBzaG93IHRoZSBjb25mbGljdHMsIGl0IHJ1bnMgYQordGhyZWUtd2F5IGRpZmYgYmV0d2VlbiB0aGUgY29uZmxpY3RlZCBtZXJnZSByZXN1bHRzIGluIHRoZSB3b3JrIHRyZWUgd2l0aAorc3RhZ2VzIDIgYW5kIDMgdG8gc2hvdyBvbmx5IGh1bmtzIHdob3NlIGNvbnRlbnRzIGNvbWUgZnJvbSBib3RoIHNpZGVzLAorbWl4ZWQgKGluIG90aGVyIHdvcmRzLCB3aGVuIGEgaHVuaydzIG1lcmdlIHJlc3VsdHMgY29tZSBvbmx5IGZyb20gc3RhZ2UgMiwKK3RoYXQgcGFydCBpcyBub3QgY29uZmxpY3RpbmcgYW5kIGlzIG5vdCBzaG93bi4gIFNhbWUgZm9yIHN0YWdlIDMpLgorCitUaGUgZGlmZiBhYm92ZSBzaG93cyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgd29ya2luZy10cmVlIHZlcnNpb24gb2YKK2ZpbGUudHh0IGFuZCB0aGUgc3RhZ2UgMiBhbmQgc3RhZ2UgMyB2ZXJzaW9ucy4gIFNvIGluc3RlYWQgb2YgcHJlY2VkaW5nCitlYWNoIGxpbmUgYnkgYSBzaW5nbGUgIisiIG9yICItIiwgaXQgbm93IHVzZXMgdHdvIGNvbHVtbnM6IHRoZSBmaXJzdAorY29sdW1uIGlzIHVzZWQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGZpcnN0IHBhcmVudCBhbmQgdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSBjb3B5LCBhbmQgdGhlIHNlY29uZCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc2Vjb25kIHBhcmVudAorYW5kIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBjb3B5LiAgKFNlZSB0aGUgIkNPTUJJTkVEIERJRkYgRk9STUFUIiBzZWN0aW9uCitvZiBsaW5rZ2l0OmdpdC1kaWZmLWZpbGVzWzFdIGZvciBhIGRldGFpbHMgb2YgdGhlIGZvcm1hdC4pCisKK0FmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3QgaW4gdGhlIG9idmlvdXMgd2F5IChidXQgYmVmb3JlIHVwZGF0aW5nIHRoZQoraW5kZXgpLCB0aGUgZGlmZiB3aWxsIGxvb2sgbGlrZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorZGlmZiAtLWNjIGZpbGUudHh0CitpbmRleCA4MDI5OTJjLDJiNjAyMDcuLjAwMDAwMDAKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEBAIC0xLDEgLTEsMSArMSwxIEBAQAorLSBIZWxsbyB3b3JsZAorIC1Hb29kYnllCisrK0dvb2RieWUgd29ybGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzaG93cyB0aGF0IG91ciByZXNvbHZlZCB2ZXJzaW9uIGRlbGV0ZWQgIkhlbGxvIHdvcmxkIiBmcm9tIHRoZQorZmlyc3QgcGFyZW50LCBkZWxldGVkICJHb29kYnllIiBmcm9tIHRoZSBzZWNvbmQgcGFyZW50LCBhbmQgYWRkZWQKKyJHb29kYnllIHdvcmxkIiwgd2hpY2ggd2FzIHByZXZpb3VzbHkgYWJzZW50IGZyb20gYm90aC4KKworU29tZSBzcGVjaWFsIGRpZmYgb3B0aW9ucyBhbGxvdyBkaWZmaW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhZ2FpbnN0Cithbnkgb2YgdGhlc2Ugc3RhZ2VzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIC0xIGZpbGUudHh0CQkjIGRpZmYgYWdhaW5zdCBzdGFnZSAxCiskIGdpdCBkaWZmIC0tYmFzZSBmaWxlLnR4dAkjIHNhbWUgYXMgdGhlIGFib3ZlCiskIGdpdCBkaWZmIC0yIGZpbGUudHh0CQkjIGRpZmYgYWdhaW5zdCBzdGFnZSAyCiskIGdpdCBkaWZmIC0tb3VycyBmaWxlLnR4dAkjIHNhbWUgYXMgdGhlIGFib3ZlCiskIGdpdCBkaWZmIC0zIGZpbGUudHh0CQkjIGRpZmYgYWdhaW5zdCBzdGFnZSAzCiskIGdpdCBkaWZmIC0tdGhlaXJzIGZpbGUudHh0CSMgc2FtZSBhcyB0aGUgYWJvdmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsaW5rZ2l0OmdpdC1sb2dbMV0gYW5kIGxpbmtnaXQ6Z2l0a1sxXSBjb21tYW5kcyBhbHNvIHByb3ZpZGUgc3BlY2lhbCBoZWxwCitmb3IgbWVyZ2VzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1tZXJnZQorJCBnaXRrIC0tbWVyZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2Ugd2lsbCBkaXNwbGF5IGFsbCBjb21taXRzIHdoaWNoIGV4aXN0IG9ubHkgb24gSEVBRCBvciBvbgorTUVSR0VfSEVBRCwgYW5kIHdoaWNoIHRvdWNoIGFuIHVubWVyZ2VkIGZpbGUuCisKK1lvdSBtYXkgYWxzbyB1c2UgbGlua2dpdDpnaXQtbWVyZ2V0b29sWzFdLCB3aGljaCBsZXRzIHlvdSBtZXJnZSB0aGUKK3VubWVyZ2VkIGZpbGVzIHVzaW5nIGV4dGVybmFsIHRvb2xzIHN1Y2ggYXMgRW1hY3Mgb3Iga2RpZmYzLgorCitFYWNoIHRpbWUgeW91IHJlc29sdmUgdGhlIGNvbmZsaWN0cyBpbiBhIGZpbGUgYW5kIHVwZGF0ZSB0aGUgaW5kZXg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGFkZCBmaWxlLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGUgZGlmZmVyZW50IHN0YWdlcyBvZiB0aGF0IGZpbGUgd2lsbCBiZSAiY29sbGFwc2VkIiwgYWZ0ZXIgd2hpY2gKK2BnaXQgZGlmZmAgd2lsbCAoYnkgZGVmYXVsdCkgbm8gbG9uZ2VyIHNob3cgZGlmZnMgZm9yIHRoYXQgZmlsZS4KKworW1t1bmRvaW5nLWEtbWVyZ2VdXQorVW5kb2luZyBhIG1lcmdlCistLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGdldCBzdHVjayBhbmQgZGVjaWRlIHRvIGp1c3QgZ2l2ZSB1cCBhbmQgdGhyb3cgdGhlIHdob2xlIG1lc3MKK2F3YXksIHlvdSBjYW4gYWx3YXlzIHJldHVybiB0byB0aGUgcHJlLW1lcmdlIHN0YXRlIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3IsIGlmIHlvdSd2ZSBhbHJlYWR5IGNvbW1pdHRlZCB0aGUgbWVyZ2UgdGhhdCB5b3Ugd2FudCB0byB0aHJvdyBhd2F5LAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXNldCAtLWhhcmQgT1JJR19IRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hvd2V2ZXIsIHRoaXMgbGFzdCBjb21tYW5kIGNhbiBiZSBkYW5nZXJvdXMgaW4gc29tZSBjYXNlcy0tbmV2ZXIKK3Rocm93IGF3YXkgYSBjb21taXQgeW91IGhhdmUgYWxyZWFkeSBjb21taXR0ZWQgaWYgdGhhdCBjb21taXQgbWF5CitpdHNlbGYgaGF2ZSBiZWVuIG1lcmdlZCBpbnRvIGFub3RoZXIgYnJhbmNoLCBhcyBkb2luZyBzbyBtYXkgY29uZnVzZQorZnVydGhlciBtZXJnZXMuCisKK1tbZmFzdC1mb3J3YXJkc11dCitGYXN0LWZvcndhcmQgbWVyZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIG9uZSBzcGVjaWFsIGNhc2Ugbm90IG1lbnRpb25lZCBhYm92ZSwgd2hpY2ggaXMgdHJlYXRlZAorZGlmZmVyZW50bHkuICBOb3JtYWxseSwgYSBtZXJnZSByZXN1bHRzIGluIGEgbWVyZ2UgY29tbWl0LCB3aXRoIHR3bworcGFyZW50cywgb25lIHBvaW50aW5nIGF0IGVhY2ggb2YgdGhlIHR3byBsaW5lcyBvZiBkZXZlbG9wbWVudCB0aGF0Cit3ZXJlIG1lcmdlZC4KKworSG93ZXZlciwgaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgb3RoZXItLXNvIGV2ZXJ5Citjb21taXQgcHJlc2VudCBpbiB0aGUgb25lIGlzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBvdGhlci0tdGhlbiBnaXQKK2p1c3QgcGVyZm9ybXMgYSAiZmFzdC1mb3J3YXJkIjsgdGhlIGhlYWQgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIG1vdmVkCitmb3J3YXJkIHRvIHBvaW50IGF0IHRoZSBoZWFkIG9mIHRoZSBtZXJnZWQtaW4gYnJhbmNoLCB3aXRob3V0IGFueSBuZXcKK2NvbW1pdHMgYmVpbmcgY3JlYXRlZC4KKworW1tmaXhpbmctbWlzdGFrZXNdXQorRml4aW5nIG1pc3Rha2VzCistLS0tLS0tLS0tLS0tLS0KKworSWYgeW91J3ZlIG1lc3NlZCB1cCB0aGUgd29ya2luZyB0cmVlLCBidXQgaGF2ZW4ndCB5ZXQgY29tbWl0dGVkIHlvdXIKK21pc3Rha2UsIHlvdSBjYW4gcmV0dXJuIHRoZSBlbnRpcmUgd29ya2luZyB0cmVlIHRvIHRoZSBsYXN0IGNvbW1pdHRlZAorc3RhdGUgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXNldCAtLWhhcmQgSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgbWFrZSBhIGNvbW1pdCB0aGF0IHlvdSBsYXRlciB3aXNoIHlvdSBoYWRuJ3QsIHRoZXJlIGFyZSB0d28KK2Z1bmRhbWVudGFsbHkgZGlmZmVyZW50IHdheXMgdG8gZml4IHRoZSBwcm9ibGVtOgorCisJMS4gWW91IGNhbiBjcmVhdGUgYSBuZXcgY29tbWl0IHRoYXQgdW5kb2VzIHdoYXRldmVyIHdhcyBkb25lCisJYnkgdGhlIG9sZCBjb21taXQuICBUaGlzIGlzIHRoZSBjb3JyZWN0IHRoaW5nIGlmIHlvdXIKKwltaXN0YWtlIGhhcyBhbHJlYWR5IGJlZW4gbWFkZSBwdWJsaWMuCisKKwkyLiBZb3UgY2FuIGdvIGJhY2sgYW5kIG1vZGlmeSB0aGUgb2xkIGNvbW1pdC4gIFlvdSBzaG91bGQKKwluZXZlciBkbyB0aGlzIGlmIHlvdSBoYXZlIGFscmVhZHkgbWFkZSB0aGUgaGlzdG9yeSBwdWJsaWM7CisJZ2l0IGRvZXMgbm90IG5vcm1hbGx5IGV4cGVjdCB0aGUgImhpc3RvcnkiIG9mIGEgcHJvamVjdCB0bworCWNoYW5nZSwgYW5kIGNhbm5vdCBjb3JyZWN0bHkgcGVyZm9ybSByZXBlYXRlZCBtZXJnZXMgZnJvbQorCWEgYnJhbmNoIHRoYXQgaGFzIGhhZCBpdHMgaGlzdG9yeSBjaGFuZ2VkLgorCitbW3JldmVydGluZy1hLWNvbW1pdF1dCitGaXhpbmcgYSBtaXN0YWtlIHdpdGggYSBuZXcgY29tbWl0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0NyZWF0aW5nIGEgbmV3IGNvbW1pdCB0aGF0IHJldmVydHMgYW4gZWFybGllciBjaGFuZ2UgaXMgdmVyeSBlYXN5OworanVzdCBwYXNzIHRoZSBsaW5rZ2l0OmdpdC1yZXZlcnRbMV0gY29tbWFuZCBhIHJlZmVyZW5jZSB0byB0aGUgYmFkCitjb21taXQ7IGZvciBleGFtcGxlLCB0byByZXZlcnQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmV2ZXJ0IEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjb21taXQgd2hpY2ggdW5kb2VzIHRoZSBjaGFuZ2UgaW4gSEVBRC4gIFlvdQord2lsbCBiZSBnaXZlbiBhIGNoYW5jZSB0byBlZGl0IHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlIG5ldyBjb21taXQuCisKK1lvdSBjYW4gYWxzbyByZXZlcnQgYW4gZWFybGllciBjaGFuZ2UsIGZvciBleGFtcGxlLCB0aGUgbmV4dC10by1sYXN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXZlcnQgSEVBRF4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBjYXNlIGdpdCB3aWxsIGF0dGVtcHQgdG8gdW5kbyB0aGUgb2xkIGNoYW5nZSB3aGlsZSBsZWF2aW5nCitpbnRhY3QgYW55IGNoYW5nZXMgbWFkZSBzaW5jZSB0aGVuLiAgSWYgbW9yZSByZWNlbnQgY2hhbmdlcyBvdmVybGFwCit3aXRoIHRoZSBjaGFuZ2VzIHRvIGJlIHJldmVydGVkLCB0aGVuIHlvdSB3aWxsIGJlIGFza2VkIHRvIGZpeAorY29uZmxpY3RzIG1hbnVhbGx5LCBqdXN0IGFzIGluIHRoZSBjYXNlIG9mIDw8cmVzb2x2aW5nLWEtbWVyZ2UsCityZXNvbHZpbmcgYSBtZXJnZT4+LgorCitbW2ZpeGluZy1hLW1pc3Rha2UtYnktcmV3cml0aW5nLWhpc3RvcnldXQorRml4aW5nIGEgbWlzdGFrZSBieSByZXdyaXRpbmcgaGlzdG9yeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgdGhlIHByb2JsZW1hdGljIGNvbW1pdCBpcyB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBhbmQgeW91IGhhdmUgbm90Cit5ZXQgbWFkZSB0aGF0IGNvbW1pdCBwdWJsaWMsIHRoZW4geW91IG1heSBqdXN0Cis8PHVuZG9pbmctYS1tZXJnZSxkZXN0cm95IGl0IHVzaW5nIGBnaXQgcmVzZXRgPj4uCisKK0FsdGVybmF0aXZlbHksIHlvdQorY2FuIGVkaXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCB1cGRhdGUgdGhlIGluZGV4IHRvIGZpeCB5b3VyCittaXN0YWtlLCBqdXN0IGFzIGlmIHlvdSB3ZXJlIGdvaW5nIHRvIDw8aG93LXRvLW1ha2UtYS1jb21taXQsY3JlYXRlIGEKK25ldyBjb21taXQ+PiwgdGhlbiBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC0tYW1lbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCByZXBsYWNlIHRoZSBvbGQgY29tbWl0IGJ5IGEgbmV3IGNvbW1pdCBpbmNvcnBvcmF0aW5nIHlvdXIKK2NoYW5nZXMsIGdpdmluZyB5b3UgYSBjaGFuY2UgdG8gZWRpdCB0aGUgb2xkIGNvbW1pdCBtZXNzYWdlIGZpcnN0LgorCitBZ2FpbiwgeW91IHNob3VsZCBuZXZlciBkbyB0aGlzIHRvIGEgY29tbWl0IHRoYXQgbWF5IGFscmVhZHkgaGF2ZQorYmVlbiBtZXJnZWQgaW50byBhbm90aGVyIGJyYW5jaDsgdXNlIGxpbmtnaXQ6Z2l0LXJldmVydFsxXSBpbnN0ZWFkIGluCit0aGF0IGNhc2UuCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gcmVwbGFjZSBjb21taXRzIGZ1cnRoZXIgYmFjayBpbiB0aGUgaGlzdG9yeSwgYnV0Cit0aGlzIGlzIGFuIGFkdmFuY2VkIHRvcGljIHRvIGJlIGxlZnQgZm9yCis8PGNsZWFuaW5nLXVwLWhpc3RvcnksYW5vdGhlciBjaGFwdGVyPj4uCisKK1tbY2hlY2tvdXQtb2YtcGF0aF1dCitDaGVja2luZyBvdXQgYW4gb2xkIHZlcnNpb24gb2YgYSBmaWxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0luIHRoZSBwcm9jZXNzIG9mIHVuZG9pbmcgYSBwcmV2aW91cyBiYWQgY2hhbmdlLCB5b3UgbWF5IGZpbmQgaXQKK3VzZWZ1bCB0byBjaGVjayBvdXQgYW4gb2xkZXIgdmVyc2lvbiBvZiBhIHBhcnRpY3VsYXIgZmlsZSB1c2luZworbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0uICBXZSd2ZSB1c2VkIGBnaXQgY2hlY2tvdXRgIGJlZm9yZSB0byBzd2l0Y2gKK2JyYW5jaGVzLCBidXQgaXQgaGFzIHF1aXRlIGRpZmZlcmVudCBiZWhhdmlvciBpZiBpdCBpcyBnaXZlbiBhIHBhdGgKK25hbWU6IHRoZSBjb21tYW5kCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IEhFQUReIHBhdGgvdG8vZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityZXBsYWNlcyBwYXRoL3RvL2ZpbGUgYnkgdGhlIGNvbnRlbnRzIGl0IGhhZCBpbiB0aGUgY29tbWl0IEhFQUReLCBhbmQKK2Fsc28gdXBkYXRlcyB0aGUgaW5kZXggdG8gbWF0Y2guICBJdCBkb2VzIG5vdCBjaGFuZ2UgYnJhbmNoZXMuCisKK0lmIHlvdSBqdXN0IHdhbnQgdG8gbG9vayBhdCBhbiBvbGQgdmVyc2lvbiBvZiB0aGUgZmlsZSwgd2l0aG91dAorbW9kaWZ5aW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgeW91IGNhbiBkbyB0aGF0IHdpdGgKK2xpbmtnaXQ6Z2l0LXNob3dbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgSEVBRF46cGF0aC90by9maWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgZGlzcGxheSB0aGUgZ2l2ZW4gdmVyc2lvbiBvZiB0aGUgZmlsZS4KKworW1tpbnRlcnJ1cHRlZC13b3JrXV0KK1RlbXBvcmFyaWx5IHNldHRpbmcgYXNpZGUgd29yayBpbiBwcm9ncmVzcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doaWxlIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB3b3JraW5nIG9uIHNvbWV0aGluZyBjb21wbGljYXRlZCwgeW91CitmaW5kIGFuIHVucmVsYXRlZCBidXQgb2J2aW91cyBhbmQgdHJpdmlhbCBidWcuICBZb3Ugd291bGQgbGlrZSB0byBmaXggaXQKK2JlZm9yZSBjb250aW51aW5nLiAgWW91IGNhbiB1c2UgbGlua2dpdDpnaXQtc3Rhc2hbMV0gdG8gc2F2ZSB0aGUgY3VycmVudAorc3RhdGUgb2YgeW91ciB3b3JrLCBhbmQgYWZ0ZXIgZml4aW5nIHRoZSBidWcgKG9yLCBvcHRpb25hbGx5IGFmdGVyIGRvaW5nCitzbyBvbiBhIGRpZmZlcmVudCBicmFuY2ggYW5kIHRoZW4gY29taW5nIGJhY2spLCB1bnN0YXNoIHRoZQord29yay1pbi1wcm9ncmVzcyBjaGFuZ2VzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN0YXNoIHNhdmUgIndvcmsgaW4gcHJvZ3Jlc3MgZm9yIGZvbyBmZWF0dXJlIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCB3aWxsIHNhdmUgeW91ciBjaGFuZ2VzIGF3YXkgdG8gdGhlIGBzdGFzaGAsIGFuZAorcmVzZXQgeW91ciB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCB0byBtYXRjaCB0aGUgdGlwIG9mIHlvdXIKK2N1cnJlbnQgYnJhbmNoLiAgVGhlbiB5b3UgY2FuIG1ha2UgeW91ciBmaXggYXMgdXN1YWwuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLi4uIGVkaXQgYW5kIHRlc3QgLi4uCiskIGdpdCBjb21taXQgLWEgLW0gImJsb3JwbDogdHlwb2ZpeCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciB0aGF0LCB5b3UgY2FuIGdvIGJhY2sgdG8gd2hhdCB5b3Ugd2VyZSB3b3JraW5nIG9uIHdpdGgKK2BnaXQgc3Rhc2ggcG9wYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzdGFzaCBwb3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1tbZW5zdXJpbmctZ29vZC1wZXJmb3JtYW5jZV1dCitFbnN1cmluZyBnb29kIHBlcmZvcm1hbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIGxhcmdlIHJlcG9zaXRvcmllcywgZ2l0IGRlcGVuZHMgb24gY29tcHJlc3Npb24gdG8ga2VlcCB0aGUgaGlzdG9yeQoraW5mb3JtYXRpb24gZnJvbSB0YWtpbmcgdXAgdG9vIG11Y2ggc3BhY2Ugb24gZGlzayBvciBpbiBtZW1vcnkuCisKK1RoaXMgY29tcHJlc3Npb24gaXMgbm90IHBlcmZvcm1lZCBhdXRvbWF0aWNhbGx5LiAgVGhlcmVmb3JlIHlvdQorc2hvdWxkIG9jY2FzaW9uYWxseSBydW4gbGlua2dpdDpnaXQtZ2NbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGdjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHJlY29tcHJlc3MgdGhlIGFyY2hpdmUuICBUaGlzIGNhbiBiZSB2ZXJ5IHRpbWUtY29uc3VtaW5nLCBzbworeW91IG1heSBwcmVmZXIgdG8gcnVuIGBnaXQgZ2NgIHdoZW4geW91IGFyZSBub3QgZG9pbmcgb3RoZXIgd29yay4KKworCitbW2Vuc3VyaW5nLXJlbGlhYmlsaXR5XV0KK0Vuc3VyaW5nIHJlbGlhYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW2NoZWNraW5nLWZvci1jb3JydXB0aW9uXV0KK0NoZWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBjb3JydXB0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgbGlua2dpdDpnaXQtZnNja1sxXSBjb21tYW5kIHJ1bnMgYSBudW1iZXIgb2Ygc2VsZi1jb25zaXN0ZW5jeSBjaGVja3MKK29uIHRoZSByZXBvc2l0b3J5LCBhbmQgcmVwb3J0cyBvbiBhbnkgcHJvYmxlbXMuICBUaGlzIG1heSB0YWtlIHNvbWUKK3RpbWUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZzY2sKK2RhbmdsaW5nIGNvbW1pdCA3MjgxMjUxZGRkMmE2MWUzODY1N2M4Mjc3MzljNTcwMTU2NzFhNmIzCitkYW5nbGluZyBjb21taXQgMjcwNmEwNTlmMjU4YzZiMjQ1ZjI5OGRjNGZmMmNjZDMwZWMyMWE2MworZGFuZ2xpbmcgY29tbWl0IDEzNDcyYjdjNGI4MDg1MWExYmM1NTE3NzkxNzFkY2IwMzY1NWU5YjUKK2RhbmdsaW5nIGJsb2IgMjE4NzYxZjlkOTA3MTJkMzdhOWM1ZTM2ZjQwNmY5MjIwMmRiMDdlYgorZGFuZ2xpbmcgY29tbWl0IGJmMDkzNTM1YTM0YTRkMzU3MzFhYTJiZDkwZmU2YjE3NjMwMmYxNGYKK2RhbmdsaW5nIGNvbW1pdCA4ZTRiZWM3ZjJkZGFhMjY4YmVmOTk5ODUzYzI1NzU1NDUyMTAwZjhlCitkYW5nbGluZyB0cmVlIGQ1MGJiODYxODZiZjI3YjY4MWQyNWFmODlkM2I1YjY4MzgyZTQwODUKK2RhbmdsaW5nIHRyZWUgYjI0YzI0NzNmMWZkM2Q5MTM1MmE2MjQ3OTViZTAyNmQ2NGM4ODQxZgorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSB3aWxsIHNlZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIG9uIGRhbmdsaW5nIG9iamVjdHMuIFRoZXkgYXJlIG9iamVjdHMKK3RoYXQgc3RpbGwgZXhpc3QgaW4gdGhlIHJlcG9zaXRvcnkgYnV0IGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZCBieSBhbnkgb2YKK3lvdXIgYnJhbmNoZXMsIGFuZCBjYW4gKGFuZCB3aWxsKSBiZSByZW1vdmVkIGFmdGVyIGEgd2hpbGUgd2l0aCAiZ2MiLgorWW91IGNhbiBydW4gYGdpdCBmc2NrIC0tbm8tZGFuZ2xpbmdgIHRvIHN1cHByZXNzIHRoZXNlIG1lc3NhZ2VzLCBhbmQgc3RpbGwKK3ZpZXcgcmVhbCBlcnJvcnMuCisKK1tbcmVjb3ZlcmluZy1sb3N0LWNoYW5nZXNdXQorUmVjb3ZlcmluZyBsb3N0IGNoYW5nZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1tbcmVmbG9nc11dCitSZWZsb2dzCiteXl5eXl5eCisKK1NheSB5b3UgbW9kaWZ5IGEgYnJhbmNoIHdpdGggK2xpbmtnaXQ6Z2l0LXJlc2V0WzFdIFwtLWhhcmQrLCBhbmQgdGhlbgorcmVhbGl6ZSB0aGF0IHRoZSBicmFuY2ggd2FzIHRoZSBvbmx5IHJlZmVyZW5jZSB5b3UgaGFkIHRvIHRoYXQgcG9pbnQgaW4KK2hpc3RvcnkuCisKK0ZvcnR1bmF0ZWx5LCBnaXQgYWxzbyBrZWVwcyBhIGxvZywgY2FsbGVkIGEgInJlZmxvZyIsIG9mIGFsbCB0aGUKK3ByZXZpb3VzIHZhbHVlcyBvZiBlYWNoIGJyYW5jaC4gIFNvIGluIHRoaXMgY2FzZSB5b3UgY2FuIHN0aWxsIGZpbmQgdGhlCitvbGQgaGlzdG9yeSB1c2luZywgZm9yIGV4YW1wbGUsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyBtYXN0ZXJAezF9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbGlzdHMgdGhlIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlCisibWFzdGVyIiBicmFuY2ggaGVhZC4gIFRoaXMgc3ludGF4IGNhbiBiZSB1c2VkIHdpdGggYW55IGdpdCBjb21tYW5kCit0aGF0IGFjY2VwdHMgYSBjb21taXQsIG5vdCBqdXN0IHdpdGggZ2l0IGxvZy4gIFNvbWUgb3RoZXIgZXhhbXBsZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgbWFzdGVyQHsyfQkJIyBTZWUgd2hlcmUgdGhlIGJyYW5jaCBwb2ludGVkIDIsCiskIGdpdCBzaG93IG1hc3RlckB7M30JCSMgMywgLi4uIGNoYW5nZXMgYWdvLgorJCBnaXRrIG1hc3RlckB7eWVzdGVyZGF5fQkjIFNlZSB3aGVyZSBpdCBwb2ludGVkIHllc3RlcmRheSwKKyQgZ2l0ayBtYXN0ZXJAeyIxIHdlZWsgYWdvIn0JIyAuLi4gb3IgbGFzdCB3ZWVrCiskIGdpdCBsb2cgLS13YWxrLXJlZmxvZ3MgbWFzdGVyCSMgc2hvdyByZWZsb2cgZW50cmllcyBmb3IgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Egc2VwYXJhdGUgcmVmbG9nIGlzIGtlcHQgZm9yIHRoZSBIRUFELCBzbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IEhFQURAeyIxIHdlZWsgYWdvIn0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBzaG93IHdoYXQgSEVBRCBwb2ludGVkIHRvIG9uZSB3ZWVrIGFnbywgbm90IHdoYXQgdGhlIGN1cnJlbnQgYnJhbmNoCitwb2ludGVkIHRvIG9uZSB3ZWVrIGFnby4gIFRoaXMgYWxsb3dzIHlvdSB0byBzZWUgdGhlIGhpc3Rvcnkgb2Ygd2hhdAoreW91J3ZlIGNoZWNrZWQgb3V0LgorCitUaGUgcmVmbG9ncyBhcmUga2VwdCBieSBkZWZhdWx0IGZvciAzMCBkYXlzLCBhZnRlciB3aGljaCB0aGV5IG1heSBiZQorcHJ1bmVkLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlZmxvZ1sxXSBhbmQgbGlua2dpdDpnaXQtZ2NbMV0gdG8gbGVhcm4KK2hvdyB0byBjb250cm9sIHRoaXMgcHJ1bmluZywgYW5kIHNlZSB0aGUgIlNQRUNJRllJTkcgUkVWSVNJT05TIgorc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSBmb3IgZGV0YWlscy4KKworTm90ZSB0aGF0IHRoZSByZWZsb2cgaGlzdG9yeSBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tIG5vcm1hbCBnaXQgaGlzdG9yeS4KK1doaWxlIG5vcm1hbCBoaXN0b3J5IGlzIHNoYXJlZCBieSBldmVyeSByZXBvc2l0b3J5IHRoYXQgd29ya3Mgb24gdGhlCitzYW1lIHByb2plY3QsIHRoZSByZWZsb2cgaGlzdG9yeSBpcyBub3Qgc2hhcmVkOiBpdCB0ZWxscyB5b3Ugb25seSBhYm91dAoraG93IHRoZSBicmFuY2hlcyBpbiB5b3VyIGxvY2FsIHJlcG9zaXRvcnkgaGF2ZSBjaGFuZ2VkIG92ZXIgdGltZS4KKworW1tkYW5nbGluZy1vYmplY3QtcmVjb3ZlcnldXQorRXhhbWluaW5nIGRhbmdsaW5nIG9iamVjdHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0luIHNvbWUgc2l0dWF0aW9ucyB0aGUgcmVmbG9nIG1heSBub3QgYmUgYWJsZSB0byBzYXZlIHlvdS4gIEZvciBleGFtcGxlLAorc3VwcG9zZSB5b3UgZGVsZXRlIGEgYnJhbmNoLCB0aGVuIHJlYWxpemUgeW91IG5lZWQgdGhlIGhpc3RvcnkgaXQKK2NvbnRhaW5lZC4gIFRoZSByZWZsb2cgaXMgYWxzbyBkZWxldGVkOyBob3dldmVyLCBpZiB5b3UgaGF2ZSBub3QgeWV0CitwcnVuZWQgdGhlIHJlcG9zaXRvcnksIHRoZW4geW91IG1heSBzdGlsbCBiZSBhYmxlIHRvIGZpbmQgdGhlIGxvc3QKK2NvbW1pdHMgaW4gdGhlIGRhbmdsaW5nIG9iamVjdHMgdGhhdCBgZ2l0IGZzY2tgIHJlcG9ydHMuICBTZWUKKzw8ZGFuZ2xpbmctb2JqZWN0cz4+IGZvciB0aGUgZGV0YWlscy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZnNjaworZGFuZ2xpbmcgY29tbWl0IDcyODEyNTFkZGQyYTYxZTM4NjU3YzgyNzczOWM1NzAxNTY3MWE2YjMKK2RhbmdsaW5nIGNvbW1pdCAyNzA2YTA1OWYyNThjNmIyNDVmMjk4ZGM0ZmYyY2NkMzBlYzIxYTYzCitkYW5nbGluZyBjb21taXQgMTM0NzJiN2M0YjgwODUxYTFiYzU1MTc3OTE3MWRjYjAzNjU1ZTliNQorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gZXhhbWluZQorb25lIG9mIHRob3NlIGRhbmdsaW5nIGNvbW1pdHMgd2l0aCwgZm9yIGV4YW1wbGUsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIDcyODEyNTFkZGQgLS1ub3QgLS1hbGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBkb2VzIHdoYXQgaXQgc291bmRzIGxpa2U6IGl0IHNheXMgdGhhdCB5b3Ugd2FudCB0byBzZWUgdGhlIGNvbW1pdAoraGlzdG9yeSB0aGF0IGlzIGRlc2NyaWJlZCBieSB0aGUgZGFuZ2xpbmcgY29tbWl0KHMpLCBidXQgbm90IHRoZQoraGlzdG9yeSB0aGF0IGlzIGRlc2NyaWJlZCBieSBhbGwgeW91ciBleGlzdGluZyBicmFuY2hlcyBhbmQgdGFncy4gIFRodXMKK3lvdSBnZXQgZXhhY3RseSB0aGUgaGlzdG9yeSByZWFjaGFibGUgZnJvbSB0aGF0IGNvbW1pdCB0aGF0IGlzIGxvc3QuCisoQW5kIG5vdGljZSB0aGF0IGl0IG1pZ2h0IG5vdCBiZSBqdXN0IG9uZSBjb21taXQ6IHdlIG9ubHkgcmVwb3J0IHRoZQorInRpcCBvZiB0aGUgbGluZSIgYXMgYmVpbmcgZGFuZ2xpbmcsIGJ1dCB0aGVyZSBtaWdodCBiZSBhIHdob2xlIGRlZXAKK2FuZCBjb21wbGV4IGNvbW1pdCBoaXN0b3J5IHRoYXQgd2FzIGRyb3BwZWQuKQorCitJZiB5b3UgZGVjaWRlIHlvdSB3YW50IHRoZSBoaXN0b3J5IGJhY2ssIHlvdSBjYW4gYWx3YXlzIGNyZWF0ZSBhIG5ldworcmVmZXJlbmNlIHBvaW50aW5nIHRvIGl0LCBmb3IgZXhhbXBsZSwgYSBuZXcgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCByZWNvdmVyZWQtYnJhbmNoIDcyODEyNTFkZGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPdGhlciB0eXBlcyBvZiBkYW5nbGluZyBvYmplY3RzIChibG9icyBhbmQgdHJlZXMpIGFyZSBhbHNvIHBvc3NpYmxlLCBhbmQKK2RhbmdsaW5nIG9iamVjdHMgY2FuIGFyaXNlIGluIG90aGVyIHNpdHVhdGlvbnMuCisKKworW1tzaGFyaW5nLWRldmVsb3BtZW50XV0KK1NoYXJpbmcgZGV2ZWxvcG1lbnQgd2l0aCBvdGhlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworW1tnZXR0aW5nLXVwZGF0ZXMtV2l0aC1naXQtcHVsbF1dCitHZXR0aW5nIHVwZGF0ZXMgd2l0aCBnaXQgcHVsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgeW91IGNsb25lIGEgcmVwb3NpdG9yeSBhbmQgY29tbWl0IGEgZmV3IGNoYW5nZXMgb2YgeW91ciBvd24sIHlvdQorbWF5IHdpc2ggdG8gY2hlY2sgdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnkgZm9yIHVwZGF0ZXMgYW5kIG1lcmdlIHRoZW0KK2ludG8geW91ciBvd24gd29yay4KKworV2UgaGF2ZSBhbHJlYWR5IHNlZW4gPDxVcGRhdGluZy1hLXJlcG9zaXRvcnktV2l0aC1naXQtZmV0Y2gsaG93IHRvCitrZWVwIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyB1cCB0byBkYXRlPj4gd2l0aCBsaW5rZ2l0OmdpdC1mZXRjaFsxXSwKK2FuZCBob3cgdG8gbWVyZ2UgdHdvIGJyYW5jaGVzLiAgU28geW91IGNhbiBtZXJnZSBpbiBjaGFuZ2VzIGZyb20gdGhlCitvcmlnaW5hbCByZXBvc2l0b3J5J3MgbWFzdGVyIGJyYW5jaCB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaAorJCBnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIb3dldmVyLCB0aGUgbGlua2dpdDpnaXQtcHVsbFsxXSBjb21tYW5kIHByb3ZpZGVzIGEgd2F5IHRvIGRvIHRoaXMgaW4KK29uZSBzdGVwOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsIG9yaWdpbiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gZmFjdCwgaWYgeW91IGhhdmUgIm1hc3RlciIgY2hlY2tlZCBvdXQsIHRoZW4gdGhpcyBicmFuY2ggaGFzIGJlZW4KK2NvbmZpZ3VyZWQgYnkgImdpdCBjbG9uZSIgdG8gZ2V0IGNoYW5nZXMgZnJvbSB0aGUgSEVBRCBicmFuY2ggb2YgdGhlCitvcmlnaW4gcmVwb3NpdG9yeS4gIFNvIG9mdGVuIHlvdSBjYW4KK2FjY29tcGxpc2ggdGhlIGFib3ZlIHdpdGgganVzdCBhIHNpbXBsZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCB3aWxsIGZldGNoIGNoYW5nZXMgZnJvbSB0aGUgcmVtb3RlIGJyYW5jaGVzIHRvIHlvdXIKK3JlbW90ZS10cmFja2luZyBicmFuY2hlcyBgb3JpZ2luLypgLCBhbmQgbWVyZ2UgdGhlIGRlZmF1bHQgYnJhbmNoIGludG8KK3RoZSBjdXJyZW50IGJyYW5jaC4KKworTW9yZSBnZW5lcmFsbHksIGEgYnJhbmNoIHRoYXQgaXMgY3JlYXRlZCBmcm9tIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaAord2lsbCBwdWxsCitieSBkZWZhdWx0IGZyb20gdGhhdCBicmFuY2guICBTZWUgdGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUKK2JyYW5jaC48bmFtZT4ucmVtb3RlIGFuZCBicmFuY2guPG5hbWU+Lm1lcmdlIG9wdGlvbnMgaW4KK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSwgYW5kIHRoZSBkaXNjdXNzaW9uIG9mIHRoZSBgLS10cmFja2Agb3B0aW9uIGluCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwgdG8gbGVhcm4gaG93IHRvIGNvbnRyb2wgdGhlc2UgZGVmYXVsdHMuCisKK0luIGFkZGl0aW9uIHRvIHNhdmluZyB5b3Uga2V5c3Ryb2tlcywgImdpdCBwdWxsIiBhbHNvIGhlbHBzIHlvdSBieQorcHJvZHVjaW5nIGEgZGVmYXVsdCBjb21taXQgbWVzc2FnZSBkb2N1bWVudGluZyB0aGUgYnJhbmNoIGFuZAorcmVwb3NpdG9yeSB0aGF0IHlvdSBwdWxsZWQgZnJvbS4KKworKEJ1dCBub3RlIHRoYXQgbm8gc3VjaCBjb21taXQgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBjYXNlIG9mIGEKKzw8ZmFzdC1mb3J3YXJkcyxmYXN0LWZvcndhcmQ+PjsgaW5zdGVhZCwgeW91ciBicmFuY2ggd2lsbCBqdXN0IGJlCit1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBsYXRlc3QgY29tbWl0IGZyb20gdGhlIHVwc3RyZWFtIGJyYW5jaC4pCisKK1RoZSBgZ2l0IHB1bGxgIGNvbW1hbmQgY2FuIGFsc28gYmUgZ2l2ZW4gIi4iIGFzIHRoZSAicmVtb3RlIiByZXBvc2l0b3J5LAoraW4gd2hpY2ggY2FzZSBpdCBqdXN0IG1lcmdlcyBpbiBhIGJyYW5jaCBmcm9tIHRoZSBjdXJyZW50IHJlcG9zaXRvcnk7IHNvCit0aGUgY29tbWFuZHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCAuIGJyYW5jaAorJCBnaXQgbWVyZ2UgYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FyZSByb3VnaGx5IGVxdWl2YWxlbnQuICBUaGUgZm9ybWVyIGlzIGFjdHVhbGx5IHZlcnkgY29tbW9ubHkgdXNlZC4KKworW1tzdWJtaXR0aW5nLXBhdGNoZXNdXQorU3VibWl0dGluZyBwYXRjaGVzIHRvIGEgcHJvamVjdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UganVzdCBoYXZlIGEgZmV3IGNoYW5nZXMsIHRoZSBzaW1wbGVzdCB3YXkgdG8gc3VibWl0IHRoZW0gbWF5CitqdXN0IGJlIHRvIHNlbmQgdGhlbSBhcyBwYXRjaGVzIGluIGVtYWlsOgorCitGaXJzdCwgdXNlIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXTsgZm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCBvcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBwcm9kdWNlIGEgbnVtYmVyZWQgc2VyaWVzIG9mIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgb25lCitmb3IgZWFjaCBwYXRjaCBpbiB0aGUgY3VycmVudCBicmFuY2ggYnV0IG5vdCBpbiBvcmlnaW4vSEVBRC4KKworWW91IGNhbiB0aGVuIGltcG9ydCB0aGVzZSBpbnRvIHlvdXIgbWFpbCBjbGllbnQgYW5kIHNlbmQgdGhlbSBieQoraGFuZC4gIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGEgbG90IHRvIHNlbmQgYXQgb25jZSwgeW91IG1heSBwcmVmZXIgdG8KK3VzZSB0aGUgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXSBzY3JpcHQgdG8gYXV0b21hdGUgdGhlIHByb2Nlc3MuCitDb25zdWx0IHRoZSBtYWlsaW5nIGxpc3QgZm9yIHlvdXIgcHJvamVjdCBmaXJzdCB0byBkZXRlcm1pbmUgaG93IHRoZXkKK3ByZWZlciBzdWNoIHBhdGNoZXMgYmUgaGFuZGxlZC4KKworW1tpbXBvcnRpbmctcGF0Y2hlc11dCitJbXBvcnRpbmcgcGF0Y2hlcyB0byBhIHByb2plY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgYWxzbyBwcm92aWRlcyBhIHRvb2wgY2FsbGVkIGxpbmtnaXQ6Z2l0LWFtWzFdIChhbSBzdGFuZHMgZm9yCisiYXBwbHkgbWFpbGJveCIpLCBmb3IgaW1wb3J0aW5nIHN1Y2ggYW4gZW1haWxlZCBzZXJpZXMgb2YgcGF0Y2hlcy4KK0p1c3Qgc2F2ZSBhbGwgb2YgdGhlIHBhdGNoLWNvbnRhaW5pbmcgbWVzc2FnZXMsIGluIG9yZGVyLCBpbnRvIGEKK3NpbmdsZSBtYWlsYm94IGZpbGUsIHNheSAicGF0Y2hlcy5tYm94IiwgdGhlbiBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYW0gLTMgcGF0Y2hlcy5tYm94CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCB3aWxsIGFwcGx5IGVhY2ggcGF0Y2ggaW4gb3JkZXI7IGlmIGFueSBjb25mbGljdHMgYXJlIGZvdW5kLCBpdAord2lsbCBzdG9wLCBhbmQgeW91IGNhbiBmaXggdGhlIGNvbmZsaWN0cyBhcyBkZXNjcmliZWQgaW4KKyI8PHJlc29sdmluZy1hLW1lcmdlLFJlc29sdmluZyBhIG1lcmdlPj4iLiAgKFRoZSAiLTMiIG9wdGlvbiB0ZWxscworZ2l0IHRvIHBlcmZvcm0gYSBtZXJnZTsgaWYgeW91IHdvdWxkIHByZWZlciBpdCBqdXN0IHRvIGFib3J0IGFuZAorbGVhdmUgeW91ciB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQsIHlvdSBtYXkgb21pdCB0aGF0IG9wdGlvbi4pCisKK09uY2UgdGhlIGluZGV4IGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgY29uZmxpY3QKK3Jlc29sdXRpb24sIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgY29tbWl0LCBqdXN0IHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhbSAtLXJlc29sdmVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBnaXQgd2lsbCBjcmVhdGUgdGhlIGNvbW1pdCBmb3IgeW91IGFuZCBjb250aW51ZSBhcHBseWluZyB0aGUKK3JlbWFpbmluZyBwYXRjaGVzIGZyb20gdGhlIG1haWxib3guCisKK1RoZSBmaW5hbCByZXN1bHQgd2lsbCBiZSBhIHNlcmllcyBvZiBjb21taXRzLCBvbmUgZm9yIGVhY2ggcGF0Y2ggaW4KK3RoZSBvcmlnaW5hbCBtYWlsYm94LCB3aXRoIGF1dGhvcnNoaXAgYW5kIGNvbW1pdCBsb2cgbWVzc2FnZSBlYWNoCit0YWtlbiBmcm9tIHRoZSBtZXNzYWdlIGNvbnRhaW5pbmcgZWFjaCBwYXRjaC4KKworW1twdWJsaWMtcmVwb3NpdG9yaWVzXV0KK1B1YmxpYyBnaXQgcmVwb3NpdG9yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbm90aGVyIHdheSB0byBzdWJtaXQgY2hhbmdlcyB0byBhIHByb2plY3QgaXMgdG8gdGVsbCB0aGUgbWFpbnRhaW5lcgorb2YgdGhhdCBwcm9qZWN0IHRvIHB1bGwgdGhlIGNoYW5nZXMgZnJvbSB5b3VyIHJlcG9zaXRvcnkgdXNpbmcKK2xpbmtnaXQ6Z2l0LXB1bGxbMV0uICBJbiB0aGUgc2VjdGlvbiAiPDxnZXR0aW5nLXVwZGF0ZXMtV2l0aC1naXQtcHVsbCwKK0dldHRpbmcgdXBkYXRlcyB3aXRoIGBnaXQgcHVsbGA+PiIgd2UgZGVzY3JpYmVkIHRoaXMgYXMgYSB3YXkgdG8gZ2V0Cit1cGRhdGVzIGZyb20gdGhlICJtYWluIiByZXBvc2l0b3J5LCBidXQgaXQgd29ya3MganVzdCBhcyB3ZWxsIGluIHRoZQorb3RoZXIgZGlyZWN0aW9uLgorCitJZiB5b3UgYW5kIHRoZSBtYWludGFpbmVyIGJvdGggaGF2ZSBhY2NvdW50cyBvbiB0aGUgc2FtZSBtYWNoaW5lLCB0aGVuCit5b3UgY2FuIGp1c3QgcHVsbCBjaGFuZ2VzIGZyb20gZWFjaCBvdGhlcidzIHJlcG9zaXRvcmllcyBkaXJlY3RseTsKK2NvbW1hbmRzIHRoYXQgYWNjZXB0IHJlcG9zaXRvcnkgVVJMcyBhcyBhcmd1bWVudHMgd2lsbCBhbHNvIGFjY2VwdCBhCitsb2NhbCBkaXJlY3RvcnkgbmFtZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgL3BhdGgvdG8vcmVwb3NpdG9yeQorJCBnaXQgcHVsbCAvcGF0aC90by9vdGhlci9yZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yIGFuIHNzaCBVUkw6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIHNzaDovL3lvdXJob3N0L355b3UvcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgcHJvamVjdHMgd2l0aCBmZXcgZGV2ZWxvcGVycywgb3IgZm9yIHN5bmNocm9uaXppbmcgYSBmZXcgcHJpdmF0ZQorcmVwb3NpdG9yaWVzLCB0aGlzIG1heSBiZSBhbGwgeW91IG5lZWQuCisKK0hvd2V2ZXIsIHRoZSBtb3JlIGNvbW1vbiB3YXkgdG8gZG8gdGhpcyBpcyB0byBtYWludGFpbiBhIHNlcGFyYXRlIHB1YmxpYworcmVwb3NpdG9yeSAodXN1YWxseSBvbiBhIGRpZmZlcmVudCBob3N0KSBmb3Igb3RoZXJzIHRvIHB1bGwgY2hhbmdlcworZnJvbS4gIFRoaXMgaXMgdXN1YWxseSBtb3JlIGNvbnZlbmllbnQsIGFuZCBhbGxvd3MgeW91IHRvIGNsZWFubHkKK3NlcGFyYXRlIHByaXZhdGUgd29yayBpbiBwcm9ncmVzcyBmcm9tIHB1YmxpY2x5IHZpc2libGUgd29yay4KKworWW91IHdpbGwgY29udGludWUgdG8gZG8geW91ciBkYXktdG8tZGF5IHdvcmsgaW4geW91ciBwZXJzb25hbAorcmVwb3NpdG9yeSwgYnV0IHBlcmlvZGljYWxseSAicHVzaCIgY2hhbmdlcyBmcm9tIHlvdXIgcGVyc29uYWwKK3JlcG9zaXRvcnkgaW50byB5b3VyIHB1YmxpYyByZXBvc2l0b3J5LCBhbGxvd2luZyBvdGhlciBkZXZlbG9wZXJzIHRvCitwdWxsIGZyb20gdGhhdCByZXBvc2l0b3J5LiAgU28gdGhlIGZsb3cgb2YgY2hhbmdlcywgaW4gYSBzaXR1YXRpb24KK3doZXJlIHRoZXJlIGlzIG9uZSBvdGhlciBkZXZlbG9wZXIgd2l0aCBhIHB1YmxpYyByZXBvc2l0b3J5LCBsb29rcworbGlrZSB0aGlzOgorCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgcHVzaAorICB5b3VyIHBlcnNvbmFsIHJlcG8gLS0tLS0tLS0tLS0tLS0tLS0tPiB5b3VyIHB1YmxpYyByZXBvCisJXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJfCB5b3UgcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZXkgcHVsbAorCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgdGhleSBwdXNoICAgICAgICAgICAgIFYKKyAgdGhlaXIgcHVibGljIHJlcG8gPC0tLS0tLS0tLS0tLS0tLS0tLS0gdGhlaXIgcmVwbworCitXZSBleHBsYWluIGhvdyB0byBkbyB0aGlzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisKK1tbc2V0dGluZy11cC1hLXB1YmxpYy1yZXBvc2l0b3J5XV0KK1NldHRpbmcgdXAgYSBwdWJsaWMgcmVwb3NpdG9yeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0Fzc3VtZSB5b3VyIHBlcnNvbmFsIHJlcG9zaXRvcnkgaXMgaW4gdGhlIGRpcmVjdG9yeSB+L3Byb2ouICBXZQorZmlyc3QgY3JlYXRlIGEgbmV3IGNsb25lIG9mIHRoZSByZXBvc2l0b3J5IGFuZCB0ZWxsIGBnaXQgZGFlbW9uYCB0aGF0IGl0CitpcyBtZWFudCB0byBiZSBwdWJsaWM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIC0tYmFyZSB+L3Byb2ogcHJvai5naXQKKyQgdG91Y2ggcHJvai5naXQvZ2l0LWRhZW1vbi1leHBvcnQtb2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJlc3VsdGluZyBkaXJlY3RvcnkgcHJvai5naXQgY29udGFpbnMgYSAiYmFyZSIgZ2l0IHJlcG9zaXRvcnktLWl0IGlzCitqdXN0IHRoZSBjb250ZW50cyBvZiB0aGUgIi5naXQiIGRpcmVjdG9yeSwgd2l0aG91dCBhbnkgZmlsZXMgY2hlY2tlZCBvdXQKK2Fyb3VuZCBpdC4KKworTmV4dCwgY29weSBwcm9qLmdpdCB0byB0aGUgc2VydmVyIHdoZXJlIHlvdSBwbGFuIHRvIGhvc3QgdGhlCitwdWJsaWMgcmVwb3NpdG9yeS4gIFlvdSBjYW4gdXNlIHNjcCwgcnN5bmMsIG9yIHdoYXRldmVyIGlzIG1vc3QKK2NvbnZlbmllbnQuCisKK1tbZXhwb3J0aW5nLXZpYS1naXRdXQorRXhwb3J0aW5nIGEgZ2l0IHJlcG9zaXRvcnkgdmlhIHRoZSBnaXQgcHJvdG9jb2wKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoaXMgaXMgdGhlIHByZWZlcnJlZCBtZXRob2QuCisKK0lmIHNvbWVvbmUgZWxzZSBhZG1pbmlzdGVycyB0aGUgc2VydmVyLCB0aGV5IHNob3VsZCB0ZWxsIHlvdSB3aGF0CitkaXJlY3RvcnkgdG8gcHV0IHRoZSByZXBvc2l0b3J5IGluLCBhbmQgd2hhdCBnaXQ6Ly8gVVJMIGl0IHdpbGwgYXBwZWFyCithdC4gIFlvdSBjYW4gdGhlbiBza2lwIHRvIHRoZSBzZWN0aW9uCisiPDxwdXNoaW5nLWNoYW5nZXMtdG8tYS1wdWJsaWMtcmVwb3NpdG9yeSxQdXNoaW5nIGNoYW5nZXMgdG8gYSBwdWJsaWMKK3JlcG9zaXRvcnk+PiIsIGJlbG93LgorCitPdGhlcndpc2UsIGFsbCB5b3UgbmVlZCB0byBkbyBpcyBzdGFydCBsaW5rZ2l0OmdpdC1kYWVtb25bMV07IGl0IHdpbGwKK2xpc3RlbiBvbiBwb3J0IDk0MTguICBCeSBkZWZhdWx0LCBpdCB3aWxsIGFsbG93IGFjY2VzcyB0byBhbnkgZGlyZWN0b3J5Cit0aGF0IGxvb2tzIGxpa2UgYSBnaXQgZGlyZWN0b3J5IGFuZCBjb250YWlucyB0aGUgbWFnaWMgZmlsZQorZ2l0LWRhZW1vbi1leHBvcnQtb2suICBQYXNzaW5nIHNvbWUgZGlyZWN0b3J5IHBhdGhzIGFzIGBnaXQgZGFlbW9uYAorYXJndW1lbnRzIHdpbGwgZnVydGhlciByZXN0cmljdCB0aGUgZXhwb3J0cyB0byB0aG9zZSBwYXRocy4KKworWW91IGNhbiBhbHNvIHJ1biBgZ2l0IGRhZW1vbmAgYXMgYW4gaW5ldGQgc2VydmljZTsgc2VlIHRoZQorbGlua2dpdDpnaXQtZGFlbW9uWzFdIG1hbiBwYWdlIGZvciBkZXRhaWxzLiAgKFNlZSBlc3BlY2lhbGx5IHRoZQorZXhhbXBsZXMgc2VjdGlvbi4pCisKK1tbZXhwb3J0aW5nLXZpYS1odHRwXV0KK0V4cG9ydGluZyBhIGdpdCByZXBvc2l0b3J5IHZpYSBodHRwCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgZ2l0IHByb3RvY29sIGdpdmVzIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGJ1dCBvbiBhCitob3N0IHdpdGggYSB3ZWIgc2VydmVyIHNldCB1cCwgaHR0cCBleHBvcnRzIG1heSBiZSBzaW1wbGVyIHRvIHNldCB1cC4KKworQWxsIHlvdSBuZWVkIHRvIGRvIGlzIHBsYWNlIHRoZSBuZXdseSBjcmVhdGVkIGJhcmUgZ2l0IHJlcG9zaXRvcnkgaW4KK2EgZGlyZWN0b3J5IHRoYXQgaXMgZXhwb3J0ZWQgYnkgdGhlIHdlYiBzZXJ2ZXIsIGFuZCBtYWtlIHNvbWUKK2FkanVzdG1lbnRzIHRvIGdpdmUgd2ViIGNsaWVudHMgc29tZSBleHRyYSBpbmZvcm1hdGlvbiB0aGV5IG5lZWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbXYgcHJvai5naXQgL2hvbWUveW91L3B1YmxpY19odG1sL3Byb2ouZ2l0CiskIGNkIHByb2ouZ2l0CiskIGdpdCAtLWJhcmUgdXBkYXRlLXNlcnZlci1pbmZvCiskIG12IGhvb2tzL3Bvc3QtdXBkYXRlLnNhbXBsZSBob29rcy9wb3N0LXVwZGF0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBsYXN0IHR3byBsaW5lcywgc2VlCitsaW5rZ2l0OmdpdC11cGRhdGUtc2VydmVyLWluZm9bMV0gYW5kIGxpbmtnaXQ6Z2l0aG9va3NbNV0uKQorCitBZHZlcnRpc2UgdGhlIFVSTCBvZiBwcm9qLmdpdC4gIEFueWJvZHkgZWxzZSBzaG91bGQgdGhlbiBiZSBhYmxlIHRvCitjbG9uZSBvciBwdWxsIGZyb20gdGhhdCBVUkwsIGZvciBleGFtcGxlIHdpdGggYSBjb21tYW5kIGxpbmUgbGlrZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgaHR0cDovL3lvdXJzZXJ2ZXIuY29tL355b3UvcHJvai5naXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKFNlZSBhbHNvCitsaW5rOmhvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dFtzZXR1cC1naXQtc2VydmVyLW92ZXItaHR0cF0KK2ZvciBhIHNsaWdodGx5IG1vcmUgc29waGlzdGljYXRlZCBzZXR1cCB1c2luZyBXZWJEQVYgd2hpY2ggYWxzbworYWxsb3dzIHB1c2hpbmcgb3ZlciBodHRwLikKKworW1twdXNoaW5nLWNoYW5nZXMtdG8tYS1wdWJsaWMtcmVwb3NpdG9yeV1dCitQdXNoaW5nIGNoYW5nZXMgdG8gYSBwdWJsaWMgcmVwb3NpdG9yeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworTm90ZSB0aGF0IHRoZSB0d28gdGVjaG5pcXVlcyBvdXRsaW5lZCBhYm92ZSAoZXhwb3J0aW5nIHZpYQorPDxleHBvcnRpbmctdmlhLWh0dHAsaHR0cD4+IG9yIDw8ZXhwb3J0aW5nLXZpYS1naXQsZ2l0Pj4pIGFsbG93IG90aGVyCittYWludGFpbmVycyB0byBmZXRjaCB5b3VyIGxhdGVzdCBjaGFuZ2VzLCBidXQgdGhleSBkbyBub3QgYWxsb3cgd3JpdGUKK2FjY2Vzcywgd2hpY2ggeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgdGhlIHB1YmxpYyByZXBvc2l0b3J5IHdpdGggdGhlCitsYXRlc3QgY2hhbmdlcyBjcmVhdGVkIGluIHlvdXIgcHJpdmF0ZSByZXBvc2l0b3J5LgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdXNpbmcgbGlua2dpdDpnaXQtcHVzaFsxXSBhbmQgc3NoOyB0bwordXBkYXRlIHRoZSByZW1vdGUgYnJhbmNoIG5hbWVkICJtYXN0ZXIiIHdpdGggdGhlIGxhdGVzdCBzdGF0ZSBvZiB5b3VyCiticmFuY2ggbmFtZWQgIm1hc3RlciIsIHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIHNzaDovL3lvdXJzZXJ2ZXIuY29tL355b3UvcHJvai5naXQgbWFzdGVyOm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciBqdXN0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggc3NoOi8veW91cnNlcnZlci5jb20vfnlvdS9wcm9qLmdpdCBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgd2l0aCBgZ2l0IGZldGNoYCwgYGdpdCBwdXNoYCB3aWxsIGNvbXBsYWluIGlmIHRoaXMgZG9lcyBub3QgcmVzdWx0IGluIGEKKzw8ZmFzdC1mb3J3YXJkcyxmYXN0LWZvcndhcmQ+Pjsgc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBmb3IgZGV0YWlscyBvbgoraGFuZGxpbmcgdGhpcyBjYXNlLgorCitOb3RlIHRoYXQgdGhlIHRhcmdldCBvZiBhICJwdXNoIiBpcyBub3JtYWxseSBhCis8PGRlZl9iYXJlX3JlcG9zaXRvcnksYmFyZT4+IHJlcG9zaXRvcnkuICBZb3UgY2FuIGFsc28gcHVzaCB0byBhCityZXBvc2l0b3J5IHRoYXQgaGFzIGEgY2hlY2tlZC1vdXQgd29ya2luZyB0cmVlLCBidXQgdGhlIHdvcmtpbmcgdHJlZQord2lsbCBub3QgYmUgdXBkYXRlZCBieSB0aGUgcHVzaC4gIFRoaXMgbWF5IGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzIGlmCit0aGUgYnJhbmNoIHlvdSBwdXNoIHRvIGlzIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIQorCitBcyB3aXRoIGBnaXQgZmV0Y2hgLCB5b3UgbWF5IGFsc28gc2V0IHVwIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0bworc2F2ZSB0eXBpbmc7IHNvLCBmb3IgZXhhbXBsZSwgYWZ0ZXIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjYXQgPj4uZ2l0L2NvbmZpZyA8PEVPRgorW3JlbW90ZSAicHVibGljLXJlcG8iXQorCXVybCA9IHNzaDovL3lvdXJzZXJ2ZXIuY29tL355b3UvcHJvai5naXQKK0VPRgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit5b3Ugc2hvdWxkIGJlIGFibGUgdG8gcGVyZm9ybSB0aGUgYWJvdmUgcHVzaCB3aXRoIGp1c3QKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCBwdWJsaWMtcmVwbyBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VlIHRoZSBleHBsYW5hdGlvbnMgb2YgdGhlIHJlbW90ZS48bmFtZT4udXJsLCBicmFuY2guPG5hbWU+LnJlbW90ZSwKK2FuZCByZW1vdGUuPG5hbWU+LnB1c2ggb3B0aW9ucyBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yCitkZXRhaWxzLgorCitbW2ZvcmNpbmctcHVzaF1dCitXaGF0IHRvIGRvIHdoZW4gYSBwdXNoIGZhaWxzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmIGEgcHVzaCB3b3VsZCBub3QgcmVzdWx0IGluIGEgPDxmYXN0LWZvcndhcmRzLGZhc3QtZm9yd2FyZD4+IG9mIHRoZQorcmVtb3RlIGJyYW5jaCwgdGhlbiBpdCB3aWxsIGZhaWwgd2l0aCBhbiBlcnJvciBsaWtlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlcnJvcjogcmVtb3RlICdyZWZzL2hlYWRzL21hc3RlcicgaXMgbm90IGFuIGFuY2VzdG9yIG9mCisgbG9jYWwgICdyZWZzL2hlYWRzL21hc3RlcicuCisgTWF5YmUgeW91IGFyZSBub3QgdXAtdG8tZGF0ZSBhbmQgbmVlZCB0byBwdWxsIGZpcnN0PworZXJyb3I6IGZhaWxlZCB0byBwdXNoIHRvICdzc2g6Ly95b3Vyc2VydmVyLmNvbS9+eW91L3Byb2ouZ2l0JworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNhbiBoYXBwZW4sIGZvciBleGFtcGxlLCBpZiB5b3U6CisKKwktIHVzZSBgZ2l0IHJlc2V0IC0taGFyZGAgdG8gcmVtb3ZlIGFscmVhZHktcHVibGlzaGVkIGNvbW1pdHMsIG9yCisJLSB1c2UgYGdpdCBjb21taXQgLS1hbWVuZGAgdG8gcmVwbGFjZSBhbHJlYWR5LXB1Ymxpc2hlZCBjb21taXRzCisJICAoYXMgaW4gPDxmaXhpbmctYS1taXN0YWtlLWJ5LXJld3JpdGluZy1oaXN0b3J5Pj4pLCBvcgorCS0gdXNlIGBnaXQgcmViYXNlYCB0byByZWJhc2UgYW55IGFscmVhZHktcHVibGlzaGVkIGNvbW1pdHMgKGFzCisJICBpbiA8PHVzaW5nLWdpdC1yZWJhc2U+PikuCisKK1lvdSBtYXkgZm9yY2UgYGdpdCBwdXNoYCB0byBwZXJmb3JtIHRoZSB1cGRhdGUgYW55d2F5IGJ5IHByZWNlZGluZyB0aGUKK2JyYW5jaCBuYW1lIHdpdGggYSBwbHVzIHNpZ246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggc3NoOi8veW91cnNlcnZlci5jb20vfnlvdS9wcm9qLmdpdCArbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vcm1hbGx5IHdoZW5ldmVyIGEgYnJhbmNoIGhlYWQgaW4gYSBwdWJsaWMgcmVwb3NpdG9yeSBpcyBtb2RpZmllZCwgaXQKK2lzIG1vZGlmaWVkIHRvIHBvaW50IHRvIGEgZGVzY2VuZGFudCBvZiB0aGUgY29tbWl0IHRoYXQgaXQgcG9pbnRlZCB0bworYmVmb3JlLiAgQnkgZm9yY2luZyBhIHB1c2ggaW4gdGhpcyBzaXR1YXRpb24sIHlvdSBicmVhayB0aGF0IGNvbnZlbnRpb24uCisoU2VlIDw8cHJvYmxlbXMtV2l0aC1yZXdyaXRpbmctaGlzdG9yeT4+LikKKworTmV2ZXJ0aGVsZXNzLCB0aGlzIGlzIGEgY29tbW9uIHByYWN0aWNlIGZvciBwZW9wbGUgdGhhdCBuZWVkIGEgc2ltcGxlCit3YXkgdG8gcHVibGlzaCBhIHdvcmstaW4tcHJvZ3Jlc3MgcGF0Y2ggc2VyaWVzLCBhbmQgaXQgaXMgYW4gYWNjZXB0YWJsZQorY29tcHJvbWlzZSBhcyBsb25nIGFzIHlvdSB3YXJuIG90aGVyIGRldmVsb3BlcnMgdGhhdCB0aGlzIGlzIGhvdyB5b3UKK2ludGVuZCB0byBtYW5hZ2UgdGhlIGJyYW5jaC4KKworSXQncyBhbHNvIHBvc3NpYmxlIGZvciBhIHB1c2ggdG8gZmFpbCBpbiB0aGlzIHdheSB3aGVuIG90aGVyIHBlb3BsZSBoYXZlCit0aGUgcmlnaHQgdG8gcHVzaCB0byB0aGUgc2FtZSByZXBvc2l0b3J5LiAgSW4gdGhhdCBjYXNlLCB0aGUgY29ycmVjdAorc29sdXRpb24gaXMgdG8gcmV0cnkgdGhlIHB1c2ggYWZ0ZXIgZmlyc3QgdXBkYXRpbmcgeW91ciB3b3JrOiBlaXRoZXIgYnkgYQorcHVsbCwgb3IgYnkgYSBmZXRjaCBmb2xsb3dlZCBieSBhIHJlYmFzZTsgc2VlIHRoZQorPDxzZXR0aW5nLXVwLWEtc2hhcmVkLXJlcG9zaXRvcnksbmV4dCBzZWN0aW9uPj4gYW5kCitsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10gZm9yIG1vcmUuCisKK1tbc2V0dGluZy11cC1hLXNoYXJlZC1yZXBvc2l0b3J5XV0KK1NldHRpbmcgdXAgYSBzaGFyZWQgcmVwb3NpdG9yeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0Fub3RoZXIgd2F5IHRvIGNvbGxhYm9yYXRlIGlzIGJ5IHVzaW5nIGEgbW9kZWwgc2ltaWxhciB0byB0aGF0Citjb21tb25seSB1c2VkIGluIENWUywgd2hlcmUgc2V2ZXJhbCBkZXZlbG9wZXJzIHdpdGggc3BlY2lhbCByaWdodHMKK2FsbCBwdXNoIHRvIGFuZCBwdWxsIGZyb20gYSBzaW5nbGUgc2hhcmVkIHJlcG9zaXRvcnkuICBTZWUKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworc2V0IHRoaXMgdXAuCisKK0hvd2V2ZXIsIHdoaWxlIHRoZXJlIGlzIG5vdGhpbmcgd3Jvbmcgd2l0aCBnaXQncyBzdXBwb3J0IGZvciBzaGFyZWQKK3JlcG9zaXRvcmllcywgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBpcyBub3QgZ2VuZXJhbGx5IHJlY29tbWVuZGVkLAorc2ltcGx5IGJlY2F1c2UgdGhlIG1vZGUgb2YgY29sbGFib3JhdGlvbiB0aGF0IGdpdCBzdXBwb3J0cy0tYnkKK2V4Y2hhbmdpbmcgcGF0Y2hlcyBhbmQgcHVsbGluZyBmcm9tIHB1YmxpYyByZXBvc2l0b3JpZXMtLWhhcyBzbyBtYW55CithZHZhbnRhZ2VzIG92ZXIgdGhlIGNlbnRyYWwgc2hhcmVkIHJlcG9zaXRvcnk6CisKKwktIEdpdCdzIGFiaWxpdHkgdG8gcXVpY2tseSBpbXBvcnQgYW5kIG1lcmdlIHBhdGNoZXMgYWxsb3dzIGEKKwkgIHNpbmdsZSBtYWludGFpbmVyIHRvIHByb2Nlc3MgaW5jb21pbmcgY2hhbmdlcyBldmVuIGF0IHZlcnkKKwkgIGhpZ2ggcmF0ZXMuICBBbmQgd2hlbiB0aGF0IGJlY29tZXMgdG9vIG11Y2gsIGBnaXQgcHVsbGAgcHJvdmlkZXMKKwkgIGFuIGVhc3kgd2F5IGZvciB0aGF0IG1haW50YWluZXIgdG8gZGVsZWdhdGUgdGhpcyBqb2IgdG8gb3RoZXIKKwkgIG1haW50YWluZXJzIHdoaWxlIHN0aWxsIGFsbG93aW5nIG9wdGlvbmFsIHJldmlldyBvZiBpbmNvbWluZworCSAgY2hhbmdlcy4KKwktIFNpbmNlIGV2ZXJ5IGRldmVsb3BlcidzIHJlcG9zaXRvcnkgaGFzIHRoZSBzYW1lIGNvbXBsZXRlIGNvcHkKKwkgIG9mIHRoZSBwcm9qZWN0IGhpc3RvcnksIG5vIHJlcG9zaXRvcnkgaXMgc3BlY2lhbCwgYW5kIGl0IGlzCisJICB0cml2aWFsIGZvciBhbm90aGVyIGRldmVsb3BlciB0byB0YWtlIG92ZXIgbWFpbnRlbmFuY2Ugb2YgYQorCSAgcHJvamVjdCwgZWl0aGVyIGJ5IG11dHVhbCBhZ3JlZW1lbnQsIG9yIGJlY2F1c2UgYSBtYWludGFpbmVyCisJICBiZWNvbWVzIHVucmVzcG9uc2l2ZSBvciBkaWZmaWN1bHQgdG8gd29yayB3aXRoLgorCS0gVGhlIGxhY2sgb2YgYSBjZW50cmFsIGdyb3VwIG9mICJjb21taXR0ZXJzIiBtZWFucyB0aGVyZSBpcworCSAgbGVzcyBuZWVkIGZvciBmb3JtYWwgZGVjaXNpb25zIGFib3V0IHdobyBpcyAiaW4iIGFuZCB3aG8gaXMKKwkgICJvdXQiLgorCitbW3NldHRpbmctdXAtZ2l0d2ViXV0KK0FsbG93aW5nIHdlYiBicm93c2luZyBvZiBhIHJlcG9zaXRvcnkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGdpdHdlYiBjZ2kgc2NyaXB0IHByb3ZpZGVzIHVzZXJzIGFuIGVhc3kgd2F5IHRvIGJyb3dzZSB5b3VyCitwcm9qZWN0J3MgZmlsZXMgYW5kIGhpc3Rvcnkgd2l0aG91dCBoYXZpbmcgdG8gaW5zdGFsbCBnaXQ7IHNlZSB0aGUgZmlsZQorZ2l0d2ViL0lOU1RBTEwgaW4gdGhlIGdpdCBzb3VyY2UgdHJlZSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIHNldHRpbmcgaXQgdXAuCisKK1tbc2hhcmluZy1kZXZlbG9wbWVudC1leGFtcGxlc11dCitFeGFtcGxlcworLS0tLS0tLS0KKworW1ttYWludGFpbmluZy10b3BpYy1icmFuY2hlc11dCitNYWludGFpbmluZyB0b3BpYyBicmFuY2hlcyBmb3IgYSBMaW51eCBzdWJzeXN0ZW0gbWFpbnRhaW5lcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBkZXNjcmliZXMgaG93IFRvbnkgTHVjayB1c2VzIGdpdCBpbiBoaXMgcm9sZSBhcyBtYWludGFpbmVyIG9mIHRoZQorSUE2NCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBMaW51eCBrZXJuZWwuCisKK0hlIHVzZXMgdHdvIHB1YmxpYyBicmFuY2hlczoKKworIC0gQSAidGVzdCIgdHJlZSBpbnRvIHdoaWNoIHBhdGNoZXMgYXJlIGluaXRpYWxseSBwbGFjZWQgc28gdGhhdCB0aGV5CisgICBjYW4gZ2V0IHNvbWUgZXhwb3N1cmUgd2hlbiBpbnRlZ3JhdGVkIHdpdGggb3RoZXIgb25nb2luZyBkZXZlbG9wbWVudC4KKyAgIFRoaXMgdHJlZSBpcyBhdmFpbGFibGUgdG8gQW5kcmV3IGZvciBwdWxsaW5nIGludG8gLW1tIHdoZW5ldmVyIGhlCisgICB3YW50cy4KKworIC0gQSAicmVsZWFzZSIgdHJlZSBpbnRvIHdoaWNoIHRlc3RlZCBwYXRjaGVzIGFyZSBtb3ZlZCBmb3IgZmluYWwgc2FuaXR5CisgICBjaGVja2luZywgYW5kIGFzIGEgdmVoaWNsZSB0byBzZW5kIHRoZW0gdXBzdHJlYW0gdG8gTGludXMgKGJ5IHNlbmRpbmcKKyAgIGhpbSBhICJwbGVhc2UgcHVsbCIgcmVxdWVzdC4pCisKK0hlIGFsc28gdXNlcyBhIHNldCBvZiB0ZW1wb3JhcnkgYnJhbmNoZXMgKCJ0b3BpYyBicmFuY2hlcyIpLCBlYWNoCitjb250YWluaW5nIGEgbG9naWNhbCBncm91cGluZyBvZiBwYXRjaGVzLgorCitUbyBzZXQgdGhpcyB1cCwgZmlyc3QgY3JlYXRlIHlvdXIgd29yayB0cmVlIGJ5IGNsb25pbmcgTGludXMncyBwdWJsaWMKK3RyZWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC0yLjYuZ2l0IHdvcmsKKyQgY2Qgd29yaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMaW51cydzIHRyZWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2ggbmFtZWQgb3JpZ2luL21hc3RlciwKK2FuZCBjYW4gYmUgdXBkYXRlZCB1c2luZyBsaW5rZ2l0OmdpdC1mZXRjaFsxXTsgeW91IGNhbiB0cmFjayBvdGhlcgorcHVibGljIHRyZWVzIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXSB0byBzZXQgdXAgYSAicmVtb3RlIiBhbmQKK2xpbmtnaXQ6Z2l0LWZldGNoWzFdIHRvIGtlZXAgdGhlbSB1cC10by1kYXRlOyBzZWUKKzw8cmVwb3NpdG9yaWVzLWFuZC1icmFuY2hlcz4+LgorCitOb3cgY3JlYXRlIHRoZSBicmFuY2hlcyBpbiB3aGljaCB5b3UgYXJlIGdvaW5nIHRvIHdvcms7IHRoZXNlIHN0YXJ0IG91dAorYXQgdGhlIGN1cnJlbnQgdGlwIG9mIG9yaWdpbi9tYXN0ZXIgYnJhbmNoLCBhbmQgc2hvdWxkIGJlIHNldCB1cCAodXNpbmcKK3RoZSAtLXRyYWNrIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1icmFuY2hbMV0pIHRvIG1lcmdlIGNoYW5nZXMgaW4gZnJvbQorTGludXMgYnkgZGVmYXVsdC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC0tdHJhY2sgdGVzdCBvcmlnaW4vbWFzdGVyCiskIGdpdCBicmFuY2ggLS10cmFjayByZWxlYXNlIG9yaWdpbi9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY2FuIGJlIGVhc2lseSBrZXB0IHVwIHRvIGRhdGUgdXNpbmcgbGlua2dpdDpnaXQtcHVsbFsxXS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgdGVzdCAmJiBnaXQgcHVsbAorJCBnaXQgY2hlY2tvdXQgcmVsZWFzZSAmJiBnaXQgcHVsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbXBvcnRhbnQgbm90ZSEgIElmIHlvdSBoYXZlIGFueSBsb2NhbCBjaGFuZ2VzIGluIHRoZXNlIGJyYW5jaGVzLCB0aGVuCit0aGlzIG1lcmdlIHdpbGwgY3JlYXRlIGEgY29tbWl0IG9iamVjdCBpbiB0aGUgaGlzdG9yeSAod2l0aCBubyBsb2NhbAorY2hhbmdlcyBnaXQgd2lsbCBzaW1wbHkgZG8gYSAiZmFzdC1mb3J3YXJkIiBtZXJnZSkuICBNYW55IHBlb3BsZSBkaXNsaWtlCit0aGUgIm5vaXNlIiB0aGF0IHRoaXMgY3JlYXRlcyBpbiB0aGUgTGludXggaGlzdG9yeSwgc28geW91IHNob3VsZCBhdm9pZAorZG9pbmcgdGhpcyBjYXByaWNpb3VzbHkgaW4gdGhlICJyZWxlYXNlIiBicmFuY2gsIGFzIHRoZXNlIG5vaXN5IGNvbW1pdHMKK3dpbGwgYmVjb21lIHBhcnQgb2YgdGhlIHBlcm1hbmVudCBoaXN0b3J5IHdoZW4geW91IGFzayBMaW51cyB0byBwdWxsCitmcm9tIHRoZSByZWxlYXNlIGJyYW5jaC4KKworQSBmZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pIGNhbgorbWFrZSBpdCBlYXN5IHRvIHB1c2ggYm90aCBicmFuY2hlcyB0byB5b3VyIHB1YmxpYyB0cmVlLiAgKFNlZQorPDxzZXR0aW5nLXVwLWEtcHVibGljLXJlcG9zaXRvcnk+Pi4pCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2F0ID4+IC5naXQvY29uZmlnIDw8RU9GCitbcmVtb3RlICJteXRyZWUiXQorCXVybCA9ICBtYXN0ZXIua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FlZ2wvbGludXgtMi42LmdpdAorCXB1c2ggPSByZWxlYXNlCisJcHVzaCA9IHRlc3QKK0VPRgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIHlvdSBjYW4gcHVzaCBib3RoIHRoZSB0ZXN0IGFuZCByZWxlYXNlIHRyZWVzIHVzaW5nCitsaW5rZ2l0OmdpdC1wdXNoWzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIG15dHJlZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciBwdXNoIGp1c3Qgb25lIG9mIHRoZSB0ZXN0IGFuZCByZWxlYXNlIGJyYW5jaGVzIHVzaW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIG15dHJlZSB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggbXl0cmVlIHJlbGVhc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93IHRvIGFwcGx5IHNvbWUgcGF0Y2hlcyBmcm9tIHRoZSBjb21tdW5pdHkuICBUaGluayBvZiBhIHNob3J0CitzbmFwcHkgbmFtZSBmb3IgYSBicmFuY2ggdG8gaG9sZCB0aGlzIHBhdGNoIChvciByZWxhdGVkIGdyb3VwIG9mCitwYXRjaGVzKSwgYW5kIGNyZWF0ZSBhIG5ldyBicmFuY2ggZnJvbSBhIHJlY2VudCBzdGFibGUgdGFnIG9mCitMaW51cydzIGJyYW5jaC4gUGlja2luZyBhIHN0YWJsZSBiYXNlIGZvciB5b3VyIGJyYW5jaCB3aWxsOgorMSkgaGVscCB5b3U6IGJ5IGF2b2lkaW5nIGluY2x1c2lvbiBvZiB1bnJlbGF0ZWQgYW5kIHBlcmhhcHMgbGlnaHRseQordGVzdGVkIGNoYW5nZXMKKzIpIGhlbHAgZnV0dXJlIGJ1ZyBodW50ZXJzIHRoYXQgdXNlICJnaXQgYmlzZWN0IiB0byBmaW5kIHByb2JsZW1zCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIHNwZWVkLXVwLXNwaW5sb2NrcyB2Mi42LjM1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyB5b3UgYXBwbHkgdGhlIHBhdGNoKGVzKSwgcnVuIHNvbWUgdGVzdHMsIGFuZCBjb21taXQgdGhlIGNoYW5nZShzKS4gIElmCit0aGUgcGF0Y2ggaXMgYSBtdWx0aS1wYXJ0IHNlcmllcywgdGhlbiB5b3Ugc2hvdWxkIGFwcGx5IGVhY2ggYXMgYSBzZXBhcmF0ZQorY29tbWl0IHRvIHRoaXMgYnJhbmNoLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIC4uLiBwYXRjaCAuLi4gdGVzdCAgLi4uIGNvbW1pdCBbIC4uLiBwYXRjaCAuLi4gdGVzdCAuLi4gY29tbWl0IF0qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4geW91IGFyZSBoYXBweSB3aXRoIHRoZSBzdGF0ZSBvZiB0aGlzIGNoYW5nZSwgeW91IGNhbiBwdWxsIGl0IGludG8gdGhlCisidGVzdCIgYnJhbmNoIGluIHByZXBhcmF0aW9uIHRvIG1ha2UgaXQgcHVibGljOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCB0ZXN0ICYmIGdpdCBwdWxsIC4gc3BlZWQtdXAtc3BpbmxvY2tzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdvdWxkIGhhdmUgYW55IGNvbmZsaWN0cyBoZXJlIC4uLiBidXQgeW91IG1pZ2h0IGlmIHlvdQorc3BlbnQgYSB3aGlsZSBvbiB0aGlzIHN0ZXAgYW5kIGhhZCBhbHNvIHB1bGxlZCBuZXcgdmVyc2lvbnMgZnJvbSB1cHN0cmVhbS4KKworU29tZSB0aW1lIGxhdGVyIHdoZW4gZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCBhbmQgdGVzdGluZyBkb25lLCB5b3UgY2FuIHB1bGwgdGhlCitzYW1lIGJyYW5jaCBpbnRvIHRoZSAicmVsZWFzZSIgdHJlZSByZWFkeSB0byBnbyB1cHN0cmVhbS4gIFRoaXMgaXMgd2hlcmUgeW91CitzZWUgdGhlIHZhbHVlIG9mIGtlZXBpbmcgZWFjaCBwYXRjaCAob3IgcGF0Y2ggc2VyaWVzKSBpbiBpdHMgb3duIGJyYW5jaC4gIEl0CittZWFucyB0aGF0IHRoZSBwYXRjaGVzIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSAicmVsZWFzZSIgdHJlZSBpbiBhbnkgb3JkZXIuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IHJlbGVhc2UgJiYgZ2l0IHB1bGwgLiBzcGVlZC11cC1zcGlubG9ja3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgYSB3aGlsZSwgeW91IHdpbGwgaGF2ZSBhIG51bWJlciBvZiBicmFuY2hlcywgYW5kIGRlc3BpdGUgdGhlCit3ZWxsIGNob3NlbiBuYW1lcyB5b3UgcGlja2VkIGZvciBlYWNoIG9mIHRoZW0sIHlvdSBtYXkgZm9yZ2V0IHdoYXQKK3RoZXkgYXJlIGZvciwgb3Igd2hhdCBzdGF0dXMgdGhleSBhcmUgaW4uICBUbyBnZXQgYSByZW1pbmRlciBvZiB3aGF0CitjaGFuZ2VzIGFyZSBpbiBhIHNwZWNpZmljIGJyYW5jaCwgdXNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgbGludXguLmJyYW5jaG5hbWUgfCBnaXQgc2hvcnRsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gc2VlIHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgYmVlbiBtZXJnZWQgaW50byB0aGUgdGVzdCBvciByZWxlYXNlIGJyYW5jaGVzLAordXNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgdGVzdC4uYnJhbmNobmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvcgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgcmVsZWFzZS4uYnJhbmNobmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoSWYgdGhpcyBicmFuY2ggaGFzIG5vdCB5ZXQgYmVlbiBtZXJnZWQsIHlvdSB3aWxsIHNlZSBzb21lIGxvZyBlbnRyaWVzLgorSWYgaXQgaGFzIGJlZW4gbWVyZ2VkLCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gb3V0cHV0LikKKworT25jZSBhIHBhdGNoIGNvbXBsZXRlcyB0aGUgZ3JlYXQgY3ljbGUgKG1vdmluZyBmcm9tIHRlc3QgdG8gcmVsZWFzZSwKK3RoZW4gcHVsbGVkIGJ5IExpbnVzLCBhbmQgZmluYWxseSBjb21pbmcgYmFjayBpbnRvIHlvdXIgbG9jYWwKKyJvcmlnaW4vbWFzdGVyIiBicmFuY2gpLCB0aGUgYnJhbmNoIGZvciB0aGlzIGNoYW5nZSBpcyBubyBsb25nZXIgbmVlZGVkLgorWW91IGRldGVjdCB0aGlzIHdoZW4gdGhlIG91dHB1dCBmcm9tOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgb3JpZ2luLi5icmFuY2huYW1lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lzIGVtcHR5LiAgQXQgdGhpcyBwb2ludCB0aGUgYnJhbmNoIGNhbiBiZSBkZWxldGVkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLWQgYnJhbmNobmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIGNoYW5nZXMgYXJlIHNvIHRyaXZpYWwgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIHNlcGFyYXRlCiticmFuY2ggYW5kIHRoZW4gbWVyZ2UgaW50byBlYWNoIG9mIHRoZSB0ZXN0IGFuZCByZWxlYXNlIGJyYW5jaGVzLiAgRm9yCit0aGVzZSBjaGFuZ2VzLCBqdXN0IGFwcGx5IGRpcmVjdGx5IHRvIHRoZSAicmVsZWFzZSIgYnJhbmNoLCBhbmQgdGhlbgorbWVyZ2UgdGhhdCBpbnRvIHRoZSAidGVzdCIgYnJhbmNoLgorCitUbyBjcmVhdGUgZGlmZnN0YXQgYW5kIHNob3J0bG9nIHN1bW1hcmllcyBvZiBjaGFuZ2VzIHRvIGluY2x1ZGUgaW4gYSAicGxlYXNlCitwdWxsIiByZXF1ZXN0IHRvIExpbnVzIHlvdSBjYW4gdXNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIC0tc3RhdCBvcmlnaW4uLnJlbGVhc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtcCBvcmlnaW4uLnJlbGVhc2UgfCBnaXQgc2hvcnRsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSBhcmUgc29tZSBvZiB0aGUgc2NyaXB0cyB0aGF0IHNpbXBsaWZ5IGFsbCB0aGlzIGV2ZW4gZnVydGhlci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PSB1cGRhdGUgc2NyaXB0ID09PT0KKyMgVXBkYXRlIGEgYnJhbmNoIGluIG15IEdJVCB0cmVlLiAgSWYgdGhlIGJyYW5jaCB0byBiZSB1cGRhdGVkCisjIGlzIG9yaWdpbiwgdGhlbiBwdWxsIGZyb20ga2VybmVsLm9yZy4gIE90aGVyd2lzZSBtZXJnZQorIyBvcmlnaW4vbWFzdGVyIGJyYW5jaCBpbnRvIHRlc3R8cmVsZWFzZSBicmFuY2gKKworY2FzZSAiJDEiIGluCit0ZXN0fHJlbGVhc2UpCisJZ2l0IGNoZWNrb3V0ICQxICYmIGdpdCBwdWxsIC4gb3JpZ2luCisJOzsKK29yaWdpbikKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKQorCWdpdCBmZXRjaCBvcmlnaW4KKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpCisJaWYgWyAkYmVmb3JlICE9ICRhZnRlciBdCisJdGhlbgorCQlnaXQgbG9nICRiZWZvcmUuLiRhZnRlciB8IGdpdCBzaG9ydGxvZworCWZpCisJOzsKKyopCisJZWNobyAiVXNhZ2U6ICQwIG9yaWdpbnx0ZXN0fHJlbGVhc2UiIDE+JjIKKwlleGl0IDEKKwk7OworZXNhYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09IG1lcmdlIHNjcmlwdCA9PT09CisjIE1lcmdlIGEgYnJhbmNoIGludG8gZWl0aGVyIHRoZSB0ZXN0IG9yIHJlbGVhc2UgYnJhbmNoCisKK3BuYW1lPSQwCisKK3VzYWdlKCkKK3sKKwllY2hvICJVc2FnZTogJHBuYW1lIGJyYW5jaCB0ZXN0fHJlbGVhc2UiIDE+JjIKKwlleGl0IDEKK30KKworZ2l0IHNob3ctcmVmIC1xIC0tdmVyaWZ5IC0tIHJlZnMvaGVhZHMvIiQxIiB8fCB7CisJZWNobyAiQ2FuJ3Qgc2VlIGJyYW5jaCA8JDE+IiAxPiYyCisJdXNhZ2UKK30KKworY2FzZSAiJDIiIGluCit0ZXN0fHJlbGVhc2UpCisJaWYgWyAkKGdpdCBsb2cgJDIuLiQxIHwgd2MgLWMpIC1lcSAwIF0KKwl0aGVuCisJCWVjaG8gJDEgYWxyZWFkeSBtZXJnZWQgaW50byAkMiAxPiYyCisJCWV4aXQgMQorCWZpCisJZ2l0IGNoZWNrb3V0ICQyICYmIGdpdCBwdWxsIC4gJDEKKwk7OworKikKKwl1c2FnZQorCTs7Citlc2FjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz09PT0gc3RhdHVzIHNjcmlwdCA9PT09CisjIHJlcG9ydCBvbiBzdGF0dXMgb2YgbXkgaWE2NCBHSVQgdHJlZQorCitnYj0kKHRwdXQgc2V0YWIgMikKK3JiPSQodHB1dCBzZXRhYiAxKQorcmVzdG9yZT0kKHRwdXQgc2V0YWIgOSkKKworaWYgWyBgZ2l0IHJldi1saXN0IHRlc3QuLnJlbGVhc2UgfCB3YyAtY2AgLWd0IDAgXQordGhlbgorCWVjaG8gJHJiIFdhcm5pbmc6IGNvbW1pdHMgaW4gcmVsZWFzZSB0aGF0IGFyZSBub3QgaW4gdGVzdCAkcmVzdG9yZQorCWdpdCBsb2cgdGVzdC4ucmVsZWFzZQorZmkKKworZm9yIGJyYW5jaCBpbiBgZ2l0IHNob3ctcmVmIC0taGVhZHMgfCBzZWQgJ3N8Xi4qL3x8J2AKK2RvCisJaWYgWyAkYnJhbmNoID0gdGVzdCAtbyAkYnJhbmNoID0gcmVsZWFzZSBdCisJdGhlbgorCQljb250aW51ZQorCWZpCisKKwllY2hvIC1uICRnYiA9PT09PT09ICRicmFuY2ggPT09PT09ICRyZXN0b3JlICIgIgorCXN0YXR1cz0KKwlmb3IgcmVmIGluIHRlc3QgcmVsZWFzZSBvcmlnaW4vbWFzdGVyCisJZG8KKwkJaWYgWyBgZ2l0IHJldi1saXN0ICRyZWYuLiRicmFuY2ggfCB3YyAtY2AgLWd0IDAgXQorCQl0aGVuCisJCQlzdGF0dXM9JHN0YXR1cyR7cmVmOjA6MX0KKwkJZmkKKwlkb25lCisJY2FzZSAkc3RhdHVzIGluCisJdHJsKQorCQllY2hvICRyYiBOZWVkIHRvIHB1bGwgaW50byB0ZXN0ICRyZXN0b3JlCisJCTs7CisJcmwpCisJCWVjaG8gIkluIHRlc3QiCisJCTs7CisJbCkKKwkJZWNobyAiV2FpdGluZyBmb3IgbGludXMiCisJCTs7CisJIiIpCisJCWVjaG8gJHJiIEFsbCBkb25lICRyZXN0b3JlCisJCTs7CisJKikKKwkJZWNobyAkcmIgIjwkc3RhdHVzPiIgJHJlc3RvcmUKKwkJOzsKKwllc2FjCisJZ2l0IGxvZyBvcmlnaW4vbWFzdGVyLi4kYnJhbmNoIHwgZ2l0IHNob3J0bG9nCitkb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworW1tjbGVhbmluZy11cC1oaXN0b3J5XV0KK1Jld3JpdGluZyBoaXN0b3J5IGFuZCBtYWludGFpbmluZyBwYXRjaCBzZXJpZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm9ybWFsbHkgY29tbWl0cyBhcmUgb25seSBhZGRlZCB0byBhIHByb2plY3QsIG5ldmVyIHRha2VuIGF3YXkgb3IKK3JlcGxhY2VkLiAgR2l0IGlzIGRlc2lnbmVkIHdpdGggdGhpcyBhc3N1bXB0aW9uLCBhbmQgdmlvbGF0aW5nIGl0IHdpbGwKK2NhdXNlIGdpdCdzIG1lcmdlIG1hY2hpbmVyeSAoZm9yIGV4YW1wbGUpIHRvIGRvIHRoZSB3cm9uZyB0aGluZy4KKworSG93ZXZlciwgdGhlcmUgaXMgYSBzaXR1YXRpb24gaW4gd2hpY2ggaXQgY2FuIGJlIHVzZWZ1bCB0byB2aW9sYXRlIHRoaXMKK2Fzc3VtcHRpb24uCisKK1tbcGF0Y2gtc2VyaWVzXV0KK0NyZWF0aW5nIHRoZSBwZXJmZWN0IHBhdGNoIHNlcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvc2UgeW91IGFyZSBhIGNvbnRyaWJ1dG9yIHRvIGEgbGFyZ2UgcHJvamVjdCwgYW5kIHlvdSB3YW50IHRvIGFkZCBhCitjb21wbGljYXRlZCBmZWF0dXJlLCBhbmQgdG8gcHJlc2VudCBpdCB0byB0aGUgb3RoZXIgZGV2ZWxvcGVycyBpbiBhIHdheQordGhhdCBtYWtlcyBpdCBlYXN5IGZvciB0aGVtIHRvIHJlYWQgeW91ciBjaGFuZ2VzLCB2ZXJpZnkgdGhhdCB0aGV5IGFyZQorY29ycmVjdCwgYW5kIHVuZGVyc3RhbmQgd2h5IHlvdSBtYWRlIGVhY2ggY2hhbmdlLgorCitJZiB5b3UgcHJlc2VudCBhbGwgb2YgeW91ciBjaGFuZ2VzIGFzIGEgc2luZ2xlIHBhdGNoIChvciBjb21taXQpLCB0aGV5CittYXkgZmluZCB0aGF0IGl0IGlzIHRvbyBtdWNoIHRvIGRpZ2VzdCBhbGwgYXQgb25jZS4KKworSWYgeW91IHByZXNlbnQgdGhlbSB3aXRoIHRoZSBlbnRpcmUgaGlzdG9yeSBvZiB5b3VyIHdvcmssIGNvbXBsZXRlIHdpdGgKK21pc3Rha2VzLCBjb3JyZWN0aW9ucywgYW5kIGRlYWQgZW5kcywgdGhleSBtYXkgYmUgb3ZlcndoZWxtZWQuCisKK1NvIHRoZSBpZGVhbCBpcyB1c3VhbGx5IHRvIHByb2R1Y2UgYSBzZXJpZXMgb2YgcGF0Y2hlcyBzdWNoIHRoYXQ6CisKKwkxLiBFYWNoIHBhdGNoIGNhbiBiZSBhcHBsaWVkIGluIG9yZGVyLgorCisJMi4gRWFjaCBwYXRjaCBpbmNsdWRlcyBhIHNpbmdsZSBsb2dpY2FsIGNoYW5nZSwgdG9nZXRoZXIgd2l0aCBhCisJICAgbWVzc2FnZSBleHBsYWluaW5nIHRoZSBjaGFuZ2UuCisKKwkzLiBObyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVncmVzc2lvbjogYWZ0ZXIgYXBwbHlpbmcgYW55IGluaXRpYWwKKwkgICBwYXJ0IG9mIHRoZSBzZXJpZXMsIHRoZSByZXN1bHRpbmcgcHJvamVjdCBzdGlsbCBjb21waWxlcyBhbmQKKwkgICB3b3JrcywgYW5kIGhhcyBubyBidWdzIHRoYXQgaXQgZGlkbid0IGhhdmUgYmVmb3JlLgorCisJNC4gVGhlIGNvbXBsZXRlIHNlcmllcyBwcm9kdWNlcyB0aGUgc2FtZSBlbmQgcmVzdWx0IGFzIHlvdXIgb3duCisJICAgKHByb2JhYmx5IG11Y2ggbWVzc2llciEpIGRldmVsb3BtZW50IHByb2Nlc3MgZGlkLgorCitXZSB3aWxsIGludHJvZHVjZSBzb21lIHRvb2xzIHRoYXQgY2FuIGhlbHAgeW91IGRvIHRoaXMsIGV4cGxhaW4gaG93IHRvCit1c2UgdGhlbSwgYW5kIHRoZW4gZXhwbGFpbiBzb21lIG9mIHRoZSBwcm9ibGVtcyB0aGF0IGNhbiBhcmlzZSBiZWNhdXNlCit5b3UgYXJlIHJld3JpdGluZyBoaXN0b3J5LgorCitbW3VzaW5nLWdpdC1yZWJhc2VdXQorS2VlcGluZyBhIHBhdGNoIHNlcmllcyB1cCB0byBkYXRlIHVzaW5nIGdpdCByZWJhc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvc2UgdGhhdCB5b3UgY3JlYXRlIGEgYnJhbmNoICJteXdvcmsiIG9uIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaAorIm9yaWdpbiIsIGFuZCBjcmVhdGUgc29tZSBjb21taXRzIG9uIHRvcCBvZiBpdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgbXl3b3JrIG9yaWdpbgorJCB2aSBmaWxlLnR4dAorJCBnaXQgY29tbWl0CiskIHZpIG90aGVyZmlsZS50eHQKKyQgZ2l0IGNvbW1pdAorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBoYXZlIHBlcmZvcm1lZCBubyBtZXJnZXMgaW50byBteXdvcmssIHNvIGl0IGlzIGp1c3QgYSBzaW1wbGUgbGluZWFyCitzZXF1ZW5jZSBvZiBwYXRjaGVzIG9uIHRvcCBvZiAib3JpZ2luIjoKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgby0tby0tTyA8LS0gb3JpZ2luCisgICAgICAgIFwKKwkgYS0tYi0tYyA8LS0gbXl3b3JrCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworU29tZSBtb3JlIGludGVyZXN0aW5nIHdvcmsgaGFzIGJlZW4gZG9uZSBpbiB0aGUgdXBzdHJlYW0gcHJvamVjdCwgYW5kCisib3JpZ2luIiBoYXMgYWR2YW5jZWQ6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIG8tLW8tLU8tLW8tLW8tLW8gPC0tIG9yaWdpbgorICAgICAgICBcCisgICAgICAgICBhLS1iLS1jIDwtLSBteXdvcmsKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitBdCB0aGlzIHBvaW50LCB5b3UgY291bGQgdXNlICJwdWxsIiB0byBtZXJnZSB5b3VyIGNoYW5nZXMgYmFjayBpbjsKK3RoZSByZXN1bHQgd291bGQgY3JlYXRlIGEgbmV3IG1lcmdlIGNvbW1pdCwgbGlrZSB0aGlzOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBvLS1vLS1PLS1vLS1vLS1vIDwtLSBvcmlnaW4KKyAgICAgICAgXCAgICAgICAgXAorICAgICAgICAgYS0tYi0tYy0tbSA8LS0gbXl3b3JrCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworSG93ZXZlciwgaWYgeW91IHByZWZlciB0byBrZWVwIHRoZSBoaXN0b3J5IGluIG15d29yayBhIHNpbXBsZSBzZXJpZXMgb2YKK2NvbW1pdHMgd2l0aG91dCBhbnkgbWVyZ2VzLCB5b3UgbWF5IGluc3RlYWQgY2hvb3NlIHRvIHVzZQorbGlua2dpdDpnaXQtcmViYXNlWzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBteXdvcmsKKyQgZ2l0IHJlYmFzZSBvcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIHJlbW92ZSBlYWNoIG9mIHlvdXIgY29tbWl0cyBmcm9tIG15d29yaywgdGVtcG9yYXJpbHkgc2F2aW5nCit0aGVtIGFzIHBhdGNoZXMgKGluIGEgZGlyZWN0b3J5IG5hbWVkICIuZ2l0L3JlYmFzZS1hcHBseSIpLCB1cGRhdGUgbXl3b3JrIHRvCitwb2ludCBhdCB0aGUgbGF0ZXN0IHZlcnNpb24gb2Ygb3JpZ2luLCB0aGVuIGFwcGx5IGVhY2ggb2YgdGhlIHNhdmVkCitwYXRjaGVzIHRvIHRoZSBuZXcgbXl3b3JrLiAgVGhlIHJlc3VsdCB3aWxsIGxvb2sgbGlrZToKKworCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBvLS1vLS1PLS1vLS1vLS1vIDwtLSBvcmlnaW4KKwkJIFwKKwkJICBhJy0tYictLWMnIDwtLSBteXdvcmsKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitJbiB0aGUgcHJvY2VzcywgaXQgbWF5IGRpc2NvdmVyIGNvbmZsaWN0cy4gIEluIHRoYXQgY2FzZSBpdCB3aWxsIHN0b3AKK2FuZCBhbGxvdyB5b3UgdG8gZml4IHRoZSBjb25mbGljdHM7IGFmdGVyIGZpeGluZyBjb25mbGljdHMsIHVzZSBgZ2l0IGFkZGAKK3RvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aG9zZSBjb250ZW50cywgYW5kIHRoZW4sIGluc3RlYWQgb2YKK3J1bm5pbmcgYGdpdCBjb21taXRgLCBqdXN0IHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWJhc2UgLS1jb250aW51ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgZ2l0IHdpbGwgY29udGludWUgYXBwbHlpbmcgdGhlIHJlc3Qgb2YgdGhlIHBhdGNoZXMuCisKK0F0IGFueSBwb2ludCB5b3UgbWF5IHVzZSB0aGUgYC0tYWJvcnRgIG9wdGlvbiB0byBhYm9ydCB0aGlzIHByb2Nlc3MgYW5kCityZXR1cm4gbXl3b3JrIHRvIHRoZSBzdGF0ZSBpdCBoYWQgYmVmb3JlIHlvdSBzdGFydGVkIHRoZSByZWJhc2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYmFzZSAtLWFib3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbcmV3cml0aW5nLW9uZS1jb21taXRdXQorUmV3cml0aW5nIGEgc2luZ2xlIGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBzYXcgaW4gPDxmaXhpbmctYS1taXN0YWtlLWJ5LXJld3JpdGluZy1oaXN0b3J5Pj4gdGhhdCB5b3UgY2FuIHJlcGxhY2UgdGhlCittb3N0IHJlY2VudCBjb21taXQgdXNpbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC0tYW1lbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCByZXBsYWNlIHRoZSBvbGQgY29tbWl0IGJ5IGEgbmV3IGNvbW1pdCBpbmNvcnBvcmF0aW5nIHlvdXIKK2NoYW5nZXMsIGdpdmluZyB5b3UgYSBjaGFuY2UgdG8gZWRpdCB0aGUgb2xkIGNvbW1pdCBtZXNzYWdlIGZpcnN0LgorCitZb3UgY2FuIGFsc28gdXNlIGEgY29tYmluYXRpb24gb2YgdGhpcyBhbmQgbGlua2dpdDpnaXQtcmViYXNlWzFdIHRvCityZXBsYWNlIGEgY29tbWl0IGZ1cnRoZXIgYmFjayBpbiB5b3VyIGhpc3RvcnkgYW5kIHJlY3JlYXRlIHRoZQoraW50ZXJ2ZW5pbmcgY2hhbmdlcyBvbiB0b3Agb2YgaXQuICBGaXJzdCwgdGFnIHRoZSBwcm9ibGVtYXRpYyBjb21taXQKK3dpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdGFnIGJhZCBteXdvcmt+NQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoRWl0aGVyIGdpdGsgb3IgYGdpdCBsb2dgIG1heSBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgdGhlIGNvbW1pdC4pCisKK1RoZW4gY2hlY2sgb3V0IHRoYXQgY29tbWl0LCBlZGl0IGl0LCBhbmQgcmViYXNlIHRoZSByZXN0IG9mIHRoZSBzZXJpZXMKK29uIHRvcCBvZiBpdCAobm90ZSB0aGF0IHdlIGNvdWxkIGNoZWNrIG91dCB0aGUgY29tbWl0IG9uIGEgdGVtcG9yYXJ5CiticmFuY2gsIGJ1dCBpbnN0ZWFkIHdlJ3JlIHVzaW5nIGEgPDxkZXRhY2hlZC1oZWFkLGRldGFjaGVkIGhlYWQ+Pik6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IGJhZAorJCAjIG1ha2UgY2hhbmdlcyBoZXJlIGFuZCB1cGRhdGUgdGhlIGluZGV4CiskIGdpdCBjb21taXQgLS1hbWVuZAorJCBnaXQgcmViYXNlIC0tb250byBIRUFEIGJhZCBteXdvcmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB5b3UncmUgZG9uZSwgeW91J2xsIGJlIGxlZnQgd2l0aCBteXdvcmsgY2hlY2tlZCBvdXQsIHdpdGggdGhlIHRvcAorcGF0Y2hlcyBvbiBteXdvcmsgcmVhcHBsaWVkIG9uIHRvcCBvZiB5b3VyIG1vZGlmaWVkIGNvbW1pdC4gIFlvdSBjYW4KK3RoZW4gY2xlYW4gdXAgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgLWQgYmFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCB0aGUgaW1tdXRhYmxlIG5hdHVyZSBvZiBnaXQgaGlzdG9yeSBtZWFucyB0aGF0IHlvdSBoYXZlbid0IHJlYWxseQorIm1vZGlmaWVkIiBleGlzdGluZyBjb21taXRzOyBpbnN0ZWFkLCB5b3UgaGF2ZSByZXBsYWNlZCB0aGUgb2xkIGNvbW1pdHMgd2l0aAorbmV3IGNvbW1pdHMgaGF2aW5nIG5ldyBvYmplY3QgbmFtZXMuCisKK1tbcmVvcmRlcmluZy1wYXRjaC1zZXJpZXNdXQorUmVvcmRlcmluZyBvciBzZWxlY3RpbmcgZnJvbSBhIHBhdGNoIHNlcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXZlbiBvbmUgZXhpc3RpbmcgY29tbWl0LCB0aGUgbGlua2dpdDpnaXQtY2hlcnJ5LXBpY2tbMV0gY29tbWFuZAorYWxsb3dzIHlvdSB0byBhcHBseSB0aGUgY2hhbmdlIGludHJvZHVjZWQgYnkgdGhhdCBjb21taXQgYW5kIGNyZWF0ZSBhCituZXcgY29tbWl0IHRoYXQgcmVjb3JkcyBpdC4gIFNvLCBmb3IgZXhhbXBsZSwgaWYgIm15d29yayIgcG9pbnRzIHRvIGEKK3NlcmllcyBvZiBwYXRjaGVzIG9uIHRvcCBvZiAib3JpZ2luIiwgeW91IG1pZ2h0IGRvIHNvbWV0aGluZyBsaWtlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiBteXdvcmstbmV3IG9yaWdpbgorJCBnaXRrIG9yaWdpbi4ubXl3b3JrICYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIGJyb3dzZSB0aHJvdWdoIHRoZSBsaXN0IG9mIHBhdGNoZXMgaW4gdGhlIG15d29yayBicmFuY2ggdXNpbmcgZ2l0aywKK2FwcGx5aW5nIHRoZW0gKHBvc3NpYmx5IGluIGEgZGlmZmVyZW50IG9yZGVyKSB0byBteXdvcmstbmV3IHVzaW5nCitjaGVycnktcGljaywgYW5kIHBvc3NpYmx5IG1vZGlmeWluZyB0aGVtIGFzIHlvdSBnbyB1c2luZyBgZ2l0IGNvbW1pdCAtLWFtZW5kYC4KK1RoZSBsaW5rZ2l0OmdpdC1ndWlbMV0gY29tbWFuZCBtYXkgYWxzbyBoZWxwIGFzIGl0IGFsbG93cyB5b3UgdG8KK2luZGl2aWR1YWxseSBzZWxlY3QgZGlmZiBodW5rcyBmb3IgaW5jbHVzaW9uIGluIHRoZSBpbmRleCAoYnkKK3JpZ2h0LWNsaWNraW5nIG9uIHRoZSBkaWZmIGh1bmsgYW5kIGNob29zaW5nICJTdGFnZSBIdW5rIGZvciBDb21taXQiKS4KKworQW5vdGhlciB0ZWNobmlxdWUgaXMgdG8gdXNlIGBnaXQgZm9ybWF0LXBhdGNoYCB0byBjcmVhdGUgYSBzZXJpZXMgb2YKK3BhdGNoZXMsIHRoZW4gcmVzZXQgdGhlIHN0YXRlIHRvIGJlZm9yZSB0aGUgcGF0Y2hlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIG9yaWdpbgorJCBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIG1vZGlmeSwgcmVvcmRlciwgb3IgZWxpbWluYXRlIHBhdGNoZXMgYXMgcHJlZmVycmVkIGJlZm9yZSBhcHBseWluZwordGhlbSBhZ2FpbiB3aXRoIGxpbmtnaXQ6Z2l0LWFtWzFdLgorCitbW3BhdGNoLXNlcmllcy10b29sc11dCitPdGhlciB0b29scworLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIG51bWVyb3VzIG90aGVyIHRvb2xzLCBzdWNoIGFzIFN0R2l0LCB3aGljaCBleGlzdCBmb3IgdGhlCitwdXJwb3NlIG9mIG1haW50YWluaW5nIGEgcGF0Y2ggc2VyaWVzLiAgVGhlc2UgYXJlIG91dHNpZGUgb2YgdGhlIHNjb3BlIG9mCit0aGlzIG1hbnVhbC4KKworW1twcm9ibGVtcy1XaXRoLXJld3JpdGluZy1oaXN0b3J5XV0KK1Byb2JsZW1zIHdpdGggcmV3cml0aW5nIGhpc3RvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHByaW1hcnkgcHJvYmxlbSB3aXRoIHJld3JpdGluZyB0aGUgaGlzdG9yeSBvZiBhIGJyYW5jaCBoYXMgdG8gZG8KK3dpdGggbWVyZ2luZy4gIFN1cHBvc2Ugc29tZWJvZHkgZmV0Y2hlcyB5b3VyIGJyYW5jaCBhbmQgbWVyZ2VzIGl0IGludG8KK3RoZWlyIGJyYW5jaCwgd2l0aCBhIHJlc3VsdCBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBvLS1vLS1PLS1vLS1vLS1vIDwtLSBvcmlnaW4KKyAgICAgICAgXCAgICAgICAgXAorICAgICAgICAgdC0tdC0tdC0tbSA8LS0gdGhlaXIgYnJhbmNoOgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1RoZW4gc3VwcG9zZSB5b3UgbW9kaWZ5IHRoZSBsYXN0IHRocmVlIGNvbW1pdHM6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCSBvLS1vLS1vIDwtLSBuZXcgaGVhZCBvZiBvcmlnaW4KKwkvCisgby0tby0tTy0tby0tby0tbyA8LS0gb2xkIGhlYWQgb2Ygb3JpZ2luCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworSWYgd2UgZXhhbWluZWQgYWxsIHRoaXMgaGlzdG9yeSB0b2dldGhlciBpbiBvbmUgcmVwb3NpdG9yeSwgaXQgd2lsbAorbG9vayBsaWtlOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKwkgby0tby0tbyA8LS0gbmV3IGhlYWQgb2Ygb3JpZ2luCisJLworIG8tLW8tLU8tLW8tLW8tLW8gPC0tIG9sZCBoZWFkIG9mIG9yaWdpbgorICAgICAgICBcICAgICAgICBcCisgICAgICAgICB0LS10LS10LS1tIDwtLSB0aGVpciBicmFuY2g6CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2l0IGhhcyBubyB3YXkgb2Yga25vd2luZyB0aGF0IHRoZSBuZXcgaGVhZCBpcyBhbiB1cGRhdGVkIHZlcnNpb24gb2YKK3RoZSBvbGQgaGVhZDsgaXQgdHJlYXRzIHRoaXMgc2l0dWF0aW9uIGV4YWN0bHkgdGhlIHNhbWUgYXMgaXQgd291bGQgaWYKK3R3byBkZXZlbG9wZXJzIGhhZCBpbmRlcGVuZGVudGx5IGRvbmUgdGhlIHdvcmsgb24gdGhlIG9sZCBhbmQgbmV3IGhlYWRzCitpbiBwYXJhbGxlbC4gIEF0IHRoaXMgcG9pbnQsIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbWVyZ2UgdGhlIG5ldyBoZWFkCitpbiB0byB0aGVpciBicmFuY2gsIGdpdCB3aWxsIGF0dGVtcHQgdG8gbWVyZ2UgdG9nZXRoZXIgdGhlIHR3byAob2xkIGFuZAorbmV3KSBsaW5lcyBvZiBkZXZlbG9wbWVudCwgaW5zdGVhZCBvZiB0cnlpbmcgdG8gcmVwbGFjZSB0aGUgb2xkIGJ5IHRoZQorbmV3LiAgVGhlIHJlc3VsdHMgYXJlIGxpa2VseSB0byBiZSB1bmV4cGVjdGVkLgorCitZb3UgbWF5IHN0aWxsIGNob29zZSB0byBwdWJsaXNoIGJyYW5jaGVzIHdob3NlIGhpc3RvcnkgaXMgcmV3cml0dGVuLAorYW5kIGl0IG1heSBiZSB1c2VmdWwgZm9yIG90aGVycyB0byBiZSBhYmxlIHRvIGZldGNoIHRob3NlIGJyYW5jaGVzIGluCitvcmRlciB0byBleGFtaW5lIG9yIHRlc3QgdGhlbSwgYnV0IHRoZXkgc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHB1bGwgc3VjaAorYnJhbmNoZXMgaW50byB0aGVpciBvd24gd29yay4KKworRm9yIHRydWUgZGlzdHJpYnV0ZWQgZGV2ZWxvcG1lbnQgdGhhdCBzdXBwb3J0cyBwcm9wZXIgbWVyZ2luZywKK3B1Ymxpc2hlZCBicmFuY2hlcyBzaG91bGQgbmV2ZXIgYmUgcmV3cml0dGVuLgorCitbW2Jpc2VjdC1tZXJnZXNdXQorV2h5IGJpc2VjdGluZyBtZXJnZSBjb21taXRzIGNhbiBiZSBoYXJkZXIgdGhhbiBiaXNlY3RpbmcgbGluZWFyIGhpc3RvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsaW5rZ2l0OmdpdC1iaXNlY3RbMV0gY29tbWFuZCBjb3JyZWN0bHkgaGFuZGxlcyBoaXN0b3J5IHRoYXQKK2luY2x1ZGVzIG1lcmdlIGNvbW1pdHMuICBIb3dldmVyLCB3aGVuIHRoZSBjb21taXQgdGhhdCBpdCBmaW5kcyBpcyBhCittZXJnZSBjb21taXQsIHRoZSB1c2VyIG1heSBuZWVkIHRvIHdvcmsgaGFyZGVyIHRoYW4gdXN1YWwgdG8gZmlndXJlIG91dAord2h5IHRoYXQgY29tbWl0IGludHJvZHVjZWQgYSBwcm9ibGVtLgorCitJbWFnaW5lIHRoaXMgaGlzdG9yeToKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAgICAtLS1aLS0tby0tLVgtLS0uLi4tLS1vLS0tQS0tLUMtLS1ECisgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgLworICAgICAgICAgICBvLS0tby0tLVktLS0uLi4tLS1vLS0tQgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1N1cHBvc2UgdGhhdCBvbiB0aGUgdXBwZXIgbGluZSBvZiBkZXZlbG9wbWVudCwgdGhlIG1lYW5pbmcgb2Ygb25lCitvZiB0aGUgZnVuY3Rpb25zIHRoYXQgZXhpc3RzIGF0IFogaXMgY2hhbmdlZCBhdCBjb21taXQgWC4gIFRoZQorY29tbWl0cyBmcm9tIFogbGVhZGluZyB0byBBIGNoYW5nZSBib3RoIHRoZSBmdW5jdGlvbidzCitpbXBsZW1lbnRhdGlvbiBhbmQgYWxsIGNhbGxpbmcgc2l0ZXMgdGhhdCBleGlzdCBhdCBaLCBhcyB3ZWxsCithcyBuZXcgY2FsbGluZyBzaXRlcyB0aGV5IGFkZCwgdG8gYmUgY29uc2lzdGVudC4gIFRoZXJlIGlzIG5vCitidWcgYXQgQS4KKworU3VwcG9zZSB0aGF0IGluIHRoZSBtZWFudGltZSBvbiB0aGUgbG93ZXIgbGluZSBvZiBkZXZlbG9wbWVudCBzb21lYm9keQorYWRkcyBhIG5ldyBjYWxsaW5nIHNpdGUgZm9yIHRoYXQgZnVuY3Rpb24gYXQgY29tbWl0IFkuICBUaGUKK2NvbW1pdHMgZnJvbSBaIGxlYWRpbmcgdG8gQiBhbGwgYXNzdW1lIHRoZSBvbGQgc2VtYW50aWNzIG9mIHRoYXQKK2Z1bmN0aW9uIGFuZCB0aGUgY2FsbGVycyBhbmQgdGhlIGNhbGxlZSBhcmUgY29uc2lzdGVudCB3aXRoIGVhY2gKK290aGVyLiAgVGhlcmUgaXMgbm8gYnVnIGF0IEIsIGVpdGhlci4KKworU3VwcG9zZSBmdXJ0aGVyIHRoYXQgdGhlIHR3byBkZXZlbG9wbWVudCBsaW5lcyBtZXJnZSBjbGVhbmx5IGF0IEMsCitzbyBubyBjb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLgorCitOZXZlcnRoZWxlc3MsIHRoZSBjb2RlIGF0IEMgaXMgYnJva2VuLCBiZWNhdXNlIHRoZSBjYWxsZXJzIGFkZGVkCitvbiB0aGUgbG93ZXIgbGluZSBvZiBkZXZlbG9wbWVudCBoYXZlIG5vdCBiZWVuIGNvbnZlcnRlZCB0byB0aGUgbmV3CitzZW1hbnRpY3MgaW50cm9kdWNlZCBvbiB0aGUgdXBwZXIgbGluZSBvZiBkZXZlbG9wbWVudC4gIFNvIGlmIGFsbAoreW91IGtub3cgaXMgdGhhdCBEIGlzIGJhZCwgdGhhdCBaIGlzIGdvb2QsIGFuZCB0aGF0CitsaW5rZ2l0OmdpdC1iaXNlY3RbMV0gaWRlbnRpZmllcyBDIGFzIHRoZSBjdWxwcml0LCBob3cgd2lsbCB5b3UKK2ZpZ3VyZSBvdXQgdGhhdCB0aGUgcHJvYmxlbSBpcyBkdWUgdG8gdGhpcyBjaGFuZ2UgaW4gc2VtYW50aWNzPworCitXaGVuIHRoZSByZXN1bHQgb2YgYSBgZ2l0IGJpc2VjdGAgaXMgYSBub24tbWVyZ2UgY29tbWl0LCB5b3Ugc2hvdWxkCitub3JtYWxseSBiZSBhYmxlIHRvIGRpc2NvdmVyIHRoZSBwcm9ibGVtIGJ5IGV4YW1pbmluZyBqdXN0IHRoYXQgY29tbWl0LgorRGV2ZWxvcGVycyBjYW4gbWFrZSB0aGlzIGVhc3kgYnkgYnJlYWtpbmcgdGhlaXIgY2hhbmdlcyBpbnRvIHNtYWxsCitzZWxmLWNvbnRhaW5lZCBjb21taXRzLiAgVGhhdCB3b24ndCBoZWxwIGluIHRoZSBjYXNlIGFib3ZlLCBob3dldmVyLAorYmVjYXVzZSB0aGUgcHJvYmxlbSBpc24ndCBvYnZpb3VzIGZyb20gZXhhbWluYXRpb24gb2YgYW55IHNpbmdsZQorY29tbWl0OyBpbnN0ZWFkLCBhIGdsb2JhbCB2aWV3IG9mIHRoZSBkZXZlbG9wbWVudCBpcyByZXF1aXJlZC4gIFRvCittYWtlIG1hdHRlcnMgd29yc2UsIHRoZSBjaGFuZ2UgaW4gc2VtYW50aWNzIGluIHRoZSBwcm9ibGVtYXRpYworZnVuY3Rpb24gbWF5IGJlIGp1c3Qgb25lIHNtYWxsIHBhcnQgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIHVwcGVyCitsaW5lIG9mIGRldmVsb3BtZW50LgorCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgaW5zdGVhZCBvZiBtZXJnaW5nIGF0IEMgeW91IGhhZCByZWJhc2VkIHRoZQoraGlzdG9yeSBiZXR3ZWVuIFogdG8gQiBvbiB0b3Agb2YgQSwgeW91IHdvdWxkIGhhdmUgZ290dGVuIHRoaXMKK2xpbmVhciBoaXN0b3J5OgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAgLS0tWi0tLW8tLS1YLS0uLi4tLS1vLS0tQS0tLW8tLS1vLS0tWSotLS4uLi0tLW8tLS1CKi0tRCoKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQmlzZWN0aW5nIGJldHdlZW4gWiBhbmQgRCogd291bGQgaGl0IGEgc2luZ2xlIGN1bHByaXQgY29tbWl0IFkqLAorYW5kIHVuZGVyc3RhbmRpbmcgd2h5IFkqIHdhcyBicm9rZW4gd291bGQgcHJvYmFibHkgYmUgZWFzaWVyLgorCitQYXJ0bHkgZm9yIHRoaXMgcmVhc29uLCBtYW55IGV4cGVyaWVuY2VkIGdpdCB1c2VycywgZXZlbiB3aGVuCit3b3JraW5nIG9uIGFuIG90aGVyd2lzZSBtZXJnZS1oZWF2eSBwcm9qZWN0LCBrZWVwIHRoZSBoaXN0b3J5CitsaW5lYXIgYnkgcmViYXNpbmcgYWdhaW5zdCB0aGUgbGF0ZXN0IHVwc3RyZWFtIHZlcnNpb24gYmVmb3JlCitwdWJsaXNoaW5nLgorCitbW2FkdmFuY2VkLWJyYW5jaC1tYW5hZ2VtZW50XV0KK0FkdmFuY2VkIGJyYW5jaCBtYW5hZ2VtZW50Cis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitbW2ZldGNoaW5nLWluZGl2aWR1YWwtYnJhbmNoZXNdXQorRmV0Y2hpbmcgaW5kaXZpZHVhbCBicmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnN0ZWFkIG9mIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXSwgeW91IGNhbiBhbHNvIGNob29zZSBqdXN0Cit0byB1cGRhdGUgb25lIGJyYW5jaCBhdCBhIHRpbWUsIGFuZCB0byBzdG9yZSBpdCBsb2NhbGx5IHVuZGVyIGFuCithcmJpdHJhcnkgbmFtZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggb3JpZ2luIHRvZG86bXktdG9kby13b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCBhcmd1bWVudCwgIm9yaWdpbiIsIGp1c3QgdGVsbHMgZ2l0IHRvIGZldGNoIGZyb20gdGhlCityZXBvc2l0b3J5IHlvdSBvcmlnaW5hbGx5IGNsb25lZCBmcm9tLiAgVGhlIHNlY29uZCBhcmd1bWVudCB0ZWxscyBnaXQKK3RvIGZldGNoIHRoZSBicmFuY2ggbmFtZWQgInRvZG8iIGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5LCBhbmQgdG8KK3N0b3JlIGl0IGxvY2FsbHkgdW5kZXIgdGhlIG5hbWUgcmVmcy9oZWFkcy9teS10b2RvLXdvcmsuCisKK1lvdSBjYW4gYWxzbyBmZXRjaCBicmFuY2hlcyBmcm9tIG90aGVyIHJlcG9zaXRvcmllczsgc28KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggZ2l0Oi8vZXhhbXBsZS5jb20vcHJvai5naXQgbWFzdGVyOmV4YW1wbGUtbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgY3JlYXRlIGEgbmV3IGJyYW5jaCBuYW1lZCAiZXhhbXBsZS1tYXN0ZXIiIGFuZCBzdG9yZSBpbiBpdCB0aGUKK2JyYW5jaCBuYW1lZCAibWFzdGVyIiBmcm9tIHRoZSByZXBvc2l0b3J5IGF0IHRoZSBnaXZlbiBVUkwuICBJZiB5b3UKK2FscmVhZHkgaGF2ZSBhIGJyYW5jaCBuYW1lZCBleGFtcGxlLW1hc3RlciwgaXQgd2lsbCBhdHRlbXB0IHRvCis8PGZhc3QtZm9yd2FyZHMsZmFzdC1mb3J3YXJkPj4gdG8gdGhlIGNvbW1pdCBnaXZlbiBieSBleGFtcGxlLmNvbSdzCittYXN0ZXIgYnJhbmNoLiAgSW4gbW9yZSBkZXRhaWw6CisKK1tbZmV0Y2gtZmFzdC1mb3J3YXJkc11dCitnaXQgZmV0Y2ggYW5kIGZhc3QtZm9yd2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2hlbiB1cGRhdGluZyBhbiBleGlzdGluZyBicmFuY2gsICJnaXQgZmV0Y2giCitjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiB0aGUgcmVtb3RlCiticmFuY2ggaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBtb3N0IHJlY2VudCBjb21taXQgb24geW91ciBjb3B5IG9mIHRoZQorYnJhbmNoIGJlZm9yZSB1cGRhdGluZyB5b3VyIGNvcHkgb2YgdGhlIGJyYW5jaCB0byBwb2ludCBhdCB0aGUgbmV3Citjb21taXQuICBHaXQgY2FsbHMgdGhpcyBwcm9jZXNzIGEgPDxmYXN0LWZvcndhcmRzLGZhc3QtZm9yd2FyZD4+LgorCitBIGZhc3QtZm9yd2FyZCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBvLS1vLS1vLS1vIDwtLSBvbGQgaGVhZCBvZiB0aGUgYnJhbmNoCisgICAgICAgICAgIFwKKyAgICAgICAgICAgIG8tLW8tLW8gPC0tIG5ldyBoZWFkIG9mIHRoZSBicmFuY2gKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCisKK0luIHNvbWUgY2FzZXMgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgbmV3IGhlYWQgd2lsbCAqbm90KiBhY3R1YWxseSBiZQorYSBkZXNjZW5kYW50IG9mIHRoZSBvbGQgaGVhZC4gIEZvciBleGFtcGxlLCB0aGUgZGV2ZWxvcGVyIG1heSBoYXZlCityZWFsaXplZCBzaGUgbWFkZSBhIHNlcmlvdXMgbWlzdGFrZSwgYW5kIGRlY2lkZWQgdG8gYmFja3RyYWNrLAorcmVzdWx0aW5nIGluIGEgc2l0dWF0aW9uIGxpa2U6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIG8tLW8tLW8tLW8tLWEtLWIgPC0tIG9sZCBoZWFkIG9mIHRoZSBicmFuY2gKKyAgICAgICAgICAgXAorICAgICAgICAgICAgby0tby0tbyA8LS0gbmV3IGhlYWQgb2YgdGhlIGJyYW5jaAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0luIHRoaXMgY2FzZSwgImdpdCBmZXRjaCIgd2lsbCBmYWlsLCBhbmQgcHJpbnQgb3V0IGEgd2FybmluZy4KKworSW4gdGhhdCBjYXNlLCB5b3UgY2FuIHN0aWxsIGZvcmNlIGdpdCB0byB1cGRhdGUgdG8gdGhlIG5ldyBoZWFkLCBhcworZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi4gIEhvd2V2ZXIsIG5vdGUgdGhhdCBpbiB0aGUKK3NpdHVhdGlvbiBhYm92ZSB0aGlzIG1heSBtZWFuIGxvc2luZyB0aGUgY29tbWl0cyBsYWJlbGVkICJhIiBhbmQgImIiLAordW5sZXNzIHlvdSd2ZSBhbHJlYWR5IGNyZWF0ZWQgYSByZWZlcmVuY2Ugb2YgeW91ciBvd24gcG9pbnRpbmcgdG8KK3RoZW0uCisKK1tbZm9yY2luZy1mZXRjaF1dCitGb3JjaW5nIGdpdCBmZXRjaCB0byBkbyBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBnaXQgZmV0Y2ggZmFpbHMgYmVjYXVzZSB0aGUgbmV3IGhlYWQgb2YgYSBicmFuY2ggaXMgbm90IGEKK2Rlc2NlbmRhbnQgb2YgdGhlIG9sZCBoZWFkLCB5b3UgbWF5IGZvcmNlIHRoZSB1cGRhdGUgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggZ2l0Oi8vZXhhbXBsZS5jb20vcHJvai5naXQgK21hc3RlcjpyZWZzL3JlbW90ZXMvZXhhbXBsZS9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGUgYWRkaXRpb24gb2YgdGhlICIrIiBzaWduLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlICItZiIKK2ZsYWcgdG8gZm9yY2UgdXBkYXRlcyBvZiBhbGwgdGhlIGZldGNoZWQgYnJhbmNoZXMsIGFzIGluOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCAtZiBvcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmUgYXdhcmUgdGhhdCBjb21taXRzIHRoYXQgdGhlIG9sZCB2ZXJzaW9uIG9mIGV4YW1wbGUvbWFzdGVyIHBvaW50ZWQgYXQKK21heSBiZSBsb3N0LCBhcyB3ZSBzYXcgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCisKK1tbcmVtb3RlLWJyYW5jaC1jb25maWd1cmF0aW9uXV0KK0NvbmZpZ3VyaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIHNhdyBhYm92ZSB0aGF0ICJvcmlnaW4iIGlzIGp1c3QgYSBzaG9ydGN1dCB0byByZWZlciB0byB0aGUKK3JlcG9zaXRvcnkgdGhhdCB5b3Ugb3JpZ2luYWxseSBjbG9uZWQgZnJvbS4gIFRoaXMgaW5mb3JtYXRpb24gaXMKK3N0b3JlZCBpbiBnaXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMsIHdoaWNoIHlvdSBjYW4gc2VlIHVzaW5nCitsaW5rZ2l0OmdpdC1jb25maWdbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyAtbAorY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbj0wCitjb3JlLmZpbGVtb2RlPXRydWUKK2NvcmUubG9nYWxscmVmdXBkYXRlcz10cnVlCityZW1vdGUub3JpZ2luLnVybD1naXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0CityZW1vdGUub3JpZ2luLmZldGNoPStyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qCiticmFuY2gubWFzdGVyLnJlbW90ZT1vcmlnaW4KK2JyYW5jaC5tYXN0ZXIubWVyZ2U9cmVmcy9oZWFkcy9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlcmUgYXJlIG90aGVyIHJlcG9zaXRvcmllcyB0aGF0IHlvdSBhbHNvIHVzZSBmcmVxdWVudGx5LCB5b3UgY2FuCitjcmVhdGUgc2ltaWxhciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2F2ZSB0eXBpbmc7IGZvciBleGFtcGxlLAorYWZ0ZXIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIHJlbW90ZS5leGFtcGxlLnVybCBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qLmdpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGVuIHRoZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmRzIHdpbGwgZG8gdGhlIHNhbWUgdGhpbmc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIGdpdDovL2V4YW1wbGUuY29tL3Byb2ouZ2l0IG1hc3RlcjpyZWZzL3JlbW90ZXMvZXhhbXBsZS9tYXN0ZXIKKyQgZ2l0IGZldGNoIGV4YW1wbGUgbWFzdGVyOnJlZnMvcmVtb3Rlcy9leGFtcGxlL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFdmVuIGJldHRlciwgaWYgeW91IGFkZCBvbmUgbW9yZSBvcHRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyByZW1vdGUuZXhhbXBsZS5mZXRjaCBtYXN0ZXI6cmVmcy9yZW1vdGVzL2V4YW1wbGUvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RoZW4gdGhlIGZvbGxvd2luZyBjb21tYW5kcyB3aWxsIGFsbCBkbyB0aGUgc2FtZSB0aGluZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggZ2l0Oi8vZXhhbXBsZS5jb20vcHJvai5naXQgbWFzdGVyOnJlZnMvcmVtb3Rlcy9leGFtcGxlL21hc3RlcgorJCBnaXQgZmV0Y2ggZXhhbXBsZSBtYXN0ZXI6cmVmcy9yZW1vdGVzL2V4YW1wbGUvbWFzdGVyCiskIGdpdCBmZXRjaCBleGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWxzbyBhZGQgYSAiKyIgdG8gZm9yY2UgdGhlIHVwZGF0ZSBlYWNoIHRpbWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyByZW1vdGUuZXhhbXBsZS5mZXRjaCArbWFzdGVyOnJlZnMvcmVtb3Rlcy9leGFtcGxlL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEb24ndCBkbyB0aGlzIHVubGVzcyB5b3UncmUgc3VyZSB5b3Ugd29uJ3QgbWluZCAiZ2l0IGZldGNoIiBwb3NzaWJseQordGhyb3dpbmcgYXdheSBjb21taXRzIG9uICdleGFtcGxlL21hc3RlcicuCisKK0Fsc28gbm90ZSB0aGF0IGFsbCBvZiB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGJ5CitkaXJlY3RseSBlZGl0aW5nIHRoZSBmaWxlIC5naXQvY29uZmlnIGluc3RlYWQgb2YgdXNpbmcKK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBjb25maWd1cmF0aW9uCitvcHRpb25zIG1lbnRpb25lZCBhYm92ZS4KKworCitbW2dpdC1jb25jZXB0c11dCitHaXQgY29uY2VwdHMKKz09PT09PT09PT09PQorCitHaXQgaXMgYnVpbHQgb24gYSBzbWFsbCBudW1iZXIgb2Ygc2ltcGxlIGJ1dCBwb3dlcmZ1bCBpZGVhcy4gIFdoaWxlIGl0CitpcyBwb3NzaWJsZSB0byBnZXQgdGhpbmdzIGRvbmUgd2l0aG91dCB1bmRlcnN0YW5kaW5nIHRoZW0sIHlvdSB3aWxsIGZpbmQKK2dpdCBtdWNoIG1vcmUgaW50dWl0aXZlIGlmIHlvdSBkby4KKworV2Ugc3RhcnQgd2l0aCB0aGUgbW9zdCBpbXBvcnRhbnQsIHRoZSAgPDxkZWZfb2JqZWN0X2RhdGFiYXNlLG9iamVjdAorZGF0YWJhc2U+PiBhbmQgdGhlIDw8ZGVmX2luZGV4LGluZGV4Pj4uCisKK1tbdGhlLW9iamVjdC1kYXRhYmFzZV1dCitUaGUgT2JqZWN0IERhdGFiYXNlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKworV2UgYWxyZWFkeSBzYXcgaW4gPDx1bmRlcnN0YW5kaW5nLWNvbW1pdHM+PiB0aGF0IGFsbCBjb21taXRzIGFyZSBzdG9yZWQKK3VuZGVyIGEgNDAtZGlnaXQgIm9iamVjdCBuYW1lIi4gIEluIGZhY3QsIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvCityZXByZXNlbnQgdGhlIGhpc3Rvcnkgb2YgYSBwcm9qZWN0IGlzIHN0b3JlZCBpbiBvYmplY3RzIHdpdGggc3VjaCBuYW1lcy4KK0luIGVhY2ggY2FzZSB0aGUgbmFtZSBpcyBjYWxjdWxhdGVkIGJ5IHRha2luZyB0aGUgU0hBLTEgaGFzaCBvZiB0aGUKK2NvbnRlbnRzIG9mIHRoZSBvYmplY3QuICBUaGUgU0hBLTEgaGFzaCBpcyBhIGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbi4KK1doYXQgdGhhdCBtZWFucyB0byB1cyBpcyB0aGF0IGl0IGlzIGltcG9zc2libGUgdG8gZmluZCB0d28gZGlmZmVyZW50CitvYmplY3RzIHdpdGggdGhlIHNhbWUgbmFtZS4gIFRoaXMgaGFzIGEgbnVtYmVyIG9mIGFkdmFudGFnZXM7IGFtb25nCitvdGhlcnM6CisKKy0gR2l0IGNhbiBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHR3byBvYmplY3RzIGFyZSBpZGVudGljYWwgb3Igbm90LAorICBqdXN0IGJ5IGNvbXBhcmluZyBuYW1lcy4KKy0gU2luY2Ugb2JqZWN0IG5hbWVzIGFyZSBjb21wdXRlZCB0aGUgc2FtZSB3YXkgaW4gZXZlcnkgcmVwb3NpdG9yeSwgdGhlCisgIHNhbWUgY29udGVudCBzdG9yZWQgaW4gdHdvIHJlcG9zaXRvcmllcyB3aWxsIGFsd2F5cyBiZSBzdG9yZWQgdW5kZXIKKyAgdGhlIHNhbWUgbmFtZS4KKy0gR2l0IGNhbiBkZXRlY3QgZXJyb3JzIHdoZW4gaXQgcmVhZHMgYW4gb2JqZWN0LCBieSBjaGVja2luZyB0aGF0IHRoZQorICBvYmplY3QncyBuYW1lIGlzIHN0aWxsIHRoZSBTSEEtMSBoYXNoIG9mIGl0cyBjb250ZW50cy4KKworKFNlZSA8PG9iamVjdC1kZXRhaWxzPj4gZm9yIHRoZSBkZXRhaWxzIG9mIHRoZSBvYmplY3QgZm9ybWF0dGluZyBhbmQKK1NIQS0xIGNhbGN1bGF0aW9uLikKKworVGhlcmUgYXJlIGZvdXIgZGlmZmVyZW50IHR5cGVzIG9mIG9iamVjdHM6ICJibG9iIiwgInRyZWUiLCAiY29tbWl0IiwgYW5kCisidGFnIi4KKworLSBBIDw8ZGVmX2Jsb2Jfb2JqZWN0LCJibG9iIiBvYmplY3Q+PiBpcyB1c2VkIHRvIHN0b3JlIGZpbGUgZGF0YS4KKy0gQSA8PGRlZl90cmVlX29iamVjdCwidHJlZSIgb2JqZWN0Pj4gdGllcyBvbmUgb3IgbW9yZQorICAiYmxvYiIgb2JqZWN0cyBpbnRvIGEgZGlyZWN0b3J5IHN0cnVjdHVyZS4gSW4gYWRkaXRpb24sIGEgdHJlZSBvYmplY3QKKyAgY2FuIHJlZmVyIHRvIG90aGVyIHRyZWUgb2JqZWN0cywgdGh1cyBjcmVhdGluZyBhIGRpcmVjdG9yeSBoaWVyYXJjaHkuCistIEEgPDxkZWZfY29tbWl0X29iamVjdCwiY29tbWl0IiBvYmplY3Q+PiB0aWVzIHN1Y2ggZGlyZWN0b3J5IGhpZXJhcmNoaWVzCisgIHRvZ2V0aGVyIGludG8gYSA8PGRlZl9EQUcsZGlyZWN0ZWQgYWN5Y2xpYyBncmFwaD4+IG9mIHJldmlzaW9ucy0tZWFjaAorICBjb21taXQgY29udGFpbnMgdGhlIG9iamVjdCBuYW1lIG9mIGV4YWN0bHkgb25lIHRyZWUgZGVzaWduYXRpbmcgdGhlCisgIGRpcmVjdG9yeSBoaWVyYXJjaHkgYXQgdGhlIHRpbWUgb2YgdGhlIGNvbW1pdC4gSW4gYWRkaXRpb24sIGEgY29tbWl0CisgIHJlZmVycyB0byAicGFyZW50IiBjb21taXQgb2JqZWN0cyB0aGF0IGRlc2NyaWJlIHRoZSBoaXN0b3J5IG9mIGhvdyB3ZQorICBhcnJpdmVkIGF0IHRoYXQgZGlyZWN0b3J5IGhpZXJhcmNoeS4KKy0gQSA8PGRlZl90YWdfb2JqZWN0LCJ0YWciIG9iamVjdD4+IHN5bWJvbGljYWxseSBpZGVudGlmaWVzIGFuZCBjYW4gYmUKKyAgdXNlZCB0byBzaWduIG90aGVyIG9iamVjdHMuIEl0IGNvbnRhaW5zIHRoZSBvYmplY3QgbmFtZSBhbmQgdHlwZSBvZgorICBhbm90aGVyIG9iamVjdCwgYSBzeW1ib2xpYyBuYW1lIChvZiBjb3Vyc2UhKSBhbmQsIG9wdGlvbmFsbHksIGEKKyAgc2lnbmF0dXJlLgorCitUaGUgb2JqZWN0IHR5cGVzIGluIHNvbWUgbW9yZSBkZXRhaWw6CisKK1tbY29tbWl0LW9iamVjdF1dCitDb21taXQgT2JqZWN0Cit+fn5+fn5+fn5+fn5+CisKK1RoZSAiY29tbWl0IiBvYmplY3QgbGlua3MgYSBwaHlzaWNhbCBzdGF0ZSBvZiBhIHRyZWUgd2l0aCBhIGRlc2NyaXB0aW9uCitvZiBob3cgd2UgZ290IHRoZXJlIGFuZCB3aHkuICBVc2UgdGhlIC0tcHJldHR5PXJhdyBvcHRpb24gdG8KK2xpbmtnaXQ6Z2l0LXNob3dbMV0gb3IgbGlua2dpdDpnaXQtbG9nWzFdIHRvIGV4YW1pbmUgeW91ciBmYXZvcml0ZQorY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgLXMgLS1wcmV0dHk9cmF3IDJiZTdmY2I0NzYKK2NvbW1pdCAyYmU3ZmNiNDc2NGYyZGJjZWU1MjYzNWI5MWZlZGIxYjNkY2Y3YWI0Cit0cmVlIGZiM2E4YmRkMGNlZGRkMDE5NjE1YWY0ZDU3YTUzZjQzZDhjZWUyYmYKK3BhcmVudCAyNTdhODRkOWQwMmU5MDQ0N2IxNDlhZjU4YjI3MWMxOTQwNWVkYjZhCithdXRob3IgRGF2ZSBXYXRzb24gPGR3YXRzb25AbWltdmlzdGEuY29tPiAxMTg3NTc2ODcyIC0wNDAwCitjb21taXR0ZXIgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiAxMTg3NTkxMTYzIC0wNzAwCisKKyAgICBGaXggbWlzc3BlbGxpbmcgb2YgJ3N1cHByZXNzJyBpbiBkb2NzCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgeW91IGNhbiBzZWUsIGEgY29tbWl0IGlzIGRlZmluZWQgYnk6CisKKy0gYSB0cmVlOiBUaGUgU0hBLTEgbmFtZSBvZiBhIHRyZWUgb2JqZWN0IChhcyBkZWZpbmVkIGJlbG93KSwgcmVwcmVzZW50aW5nCisgIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeSBhdCBhIGNlcnRhaW4gcG9pbnQgaW4gdGltZS4KKy0gcGFyZW50KHMpOiBUaGUgU0hBLTEgbmFtZShzKSBvZiBzb21lIG51bWJlciBvZiBjb21taXRzIHdoaWNoIHJlcHJlc2VudCB0aGUKKyAgaW1tZWRpYXRlbHkgcHJldmlvdXMgc3RlcChzKSBpbiB0aGUgaGlzdG9yeSBvZiB0aGUgcHJvamVjdC4gIFRoZQorICBleGFtcGxlIGFib3ZlIGhhcyBvbmUgcGFyZW50OyBtZXJnZSBjb21taXRzIG1heSBoYXZlIG1vcmUgdGhhbgorICBvbmUuICBBIGNvbW1pdCB3aXRoIG5vIHBhcmVudHMgaXMgY2FsbGVkIGEgInJvb3QiIGNvbW1pdCwgYW5kCisgIHJlcHJlc2VudHMgdGhlIGluaXRpYWwgcmV2aXNpb24gb2YgYSBwcm9qZWN0LiAgRWFjaCBwcm9qZWN0IG11c3QgaGF2ZQorICBhdCBsZWFzdCBvbmUgcm9vdC4gIEEgcHJvamVjdCBjYW4gYWxzbyBoYXZlIG11bHRpcGxlIHJvb3RzLCB0aG91Z2gKKyAgdGhhdCBpc24ndCBjb21tb24gKG9yIG5lY2Vzc2FyaWx5IGEgZ29vZCBpZGVhKS4KKy0gYW4gYXV0aG9yOiBUaGUgbmFtZSBvZiB0aGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvciB0aGlzIGNoYW5nZSwgdG9nZXRoZXIKKyAgd2l0aCBpdHMgZGF0ZS4KKy0gYSBjb21taXR0ZXI6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24gd2hvIGFjdHVhbGx5IGNyZWF0ZWQgdGhlIGNvbW1pdCwKKyAgd2l0aCB0aGUgZGF0ZSBpdCB3YXMgZG9uZS4gIFRoaXMgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBhdXRob3IsIGZvcgorICBleGFtcGxlLCBpZiB0aGUgYXV0aG9yIHdhcyBzb21lb25lIHdobyB3cm90ZSBhIHBhdGNoIGFuZCBlbWFpbGVkIGl0CisgIHRvIHRoZSBwZXJzb24gd2hvIHVzZWQgaXQgdG8gY3JlYXRlIHRoZSBjb21taXQuCistIGEgY29tbWVudCBkZXNjcmliaW5nIHRoaXMgY29tbWl0LgorCitOb3RlIHRoYXQgYSBjb21taXQgZG9lcyBub3QgaXRzZWxmIGNvbnRhaW4gYW55IGluZm9ybWF0aW9uIGFib3V0IHdoYXQKK2FjdHVhbGx5IGNoYW5nZWQ7IGFsbCBjaGFuZ2VzIGFyZSBjYWxjdWxhdGVkIGJ5IGNvbXBhcmluZyB0aGUgY29udGVudHMKK29mIHRoZSB0cmVlIHJlZmVycmVkIHRvIGJ5IHRoaXMgY29tbWl0IHdpdGggdGhlIHRyZWVzIGFzc29jaWF0ZWQgd2l0aAoraXRzIHBhcmVudHMuICBJbiBwYXJ0aWN1bGFyLCBnaXQgZG9lcyBub3QgYXR0ZW1wdCB0byByZWNvcmQgZmlsZSByZW5hbWVzCitleHBsaWNpdGx5LCB0aG91Z2ggaXQgY2FuIGlkZW50aWZ5IGNhc2VzIHdoZXJlIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHNhbWUKK2ZpbGUgZGF0YSBhdCBjaGFuZ2luZyBwYXRocyBzdWdnZXN0cyBhIHJlbmFtZS4gIChTZWUsIGZvciBleGFtcGxlLCB0aGUKKy1NIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1kaWZmWzFdKS4KKworQSBjb21taXQgaXMgdXN1YWxseSBjcmVhdGVkIGJ5IGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwgd2hpY2ggY3JlYXRlcyBhCitjb21taXQgd2hvc2UgcGFyZW50IGlzIG5vcm1hbGx5IHRoZSBjdXJyZW50IEhFQUQsIGFuZCB3aG9zZSB0cmVlIGlzCit0YWtlbiBmcm9tIHRoZSBjb250ZW50IGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlIGluZGV4LgorCitbW3RyZWUtb2JqZWN0XV0KK1RyZWUgT2JqZWN0Cit+fn5+fn5+fn5+fgorCitUaGUgZXZlci12ZXJzYXRpbGUgbGlua2dpdDpnaXQtc2hvd1sxXSBjb21tYW5kIGNhbiBhbHNvIGJlIHVzZWQgdG8KK2V4YW1pbmUgdHJlZSBvYmplY3RzLCBidXQgbGlua2dpdDpnaXQtbHMtdHJlZVsxXSB3aWxsIGdpdmUgeW91IG1vcmUKK2RldGFpbHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbHMtdHJlZSBmYjNhOGJkZDBjZQorMTAwNjQ0IGJsb2IgNjNjOTE4YzY2N2ZhMDA1ZmYxMmFkODk0MzdmMmZkYzgwOTI2ZTIxYyAgICAuZ2l0aWdub3JlCisxMDA2NDQgYmxvYiA1NTI5YjE5OGU4ZDE0ZGVjYmU0YWQ5OWRiM2Y3ZmI2MzJkZTA0MzlkICAgIC5tYWlsbWFwCisxMDA2NDQgYmxvYiA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzICAgIENPUFlJTkcKKzA0MDAwMCB0cmVlIDJmYjc4M2U0NzcxMDBjZTA3NmY2YmY1N2U0YTZmMDI2MDEzZGM3NDUgICAgRG9jdW1lbnRhdGlvbgorMTAwNzU1IGJsb2IgM2MwMDMyY2VjNTkyYTc2NTY5MjIzNGYxY2JhNDdkZmRjYzNhOTIwMCAgICBHSVQtVkVSU0lPTi1HRU4KKzEwMDY0NCBibG9iIDI4OWIwNDZhNDQzYzA2NDc2MjQ2MDdkNDcxMjg5YjJjN2RjZDQ3MGIgICAgSU5TVEFMTAorMTAwNjQ0IGJsb2IgNGViNDYzNzk3YWRjNjkzZGMxNjhiOTI2YjY5MzJmZjUzZjE3ZDBiMSAgICBNYWtlZmlsZQorMTAwNjQ0IGJsb2IgNTQ4MTQyYzMyN2E2NzkwZmY4ODIxZDY3YzJlZTFlZmY3YTY1NmI1MiAgICBSRUFETUUKKy4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHlvdSBjYW4gc2VlLCBhIHRyZWUgb2JqZWN0IGNvbnRhaW5zIGEgbGlzdCBvZiBlbnRyaWVzLCBlYWNoIHdpdGggYQorbW9kZSwgb2JqZWN0IHR5cGUsIFNIQS0xIG5hbWUsIGFuZCBuYW1lLCBzb3J0ZWQgYnkgbmFtZS4gIEl0IHJlcHJlc2VudHMKK3RoZSBjb250ZW50cyBvZiBhIHNpbmdsZSBkaXJlY3RvcnkgdHJlZS4KKworVGhlIG9iamVjdCB0eXBlIG1heSBiZSBhIGJsb2IsIHJlcHJlc2VudGluZyB0aGUgY29udGVudHMgb2YgYSBmaWxlLCBvcgorYW5vdGhlciB0cmVlLCByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnRzIG9mIGEgc3ViZGlyZWN0b3J5LiAgU2luY2UgdHJlZXMKK2FuZCBibG9icywgbGlrZSBhbGwgb3RoZXIgb2JqZWN0cywgYXJlIG5hbWVkIGJ5IHRoZSBTSEEtMSBoYXNoIG9mIHRoZWlyCitjb250ZW50cywgdHdvIHRyZWVzIGhhdmUgdGhlIHNhbWUgU0hBLTEgbmFtZSBpZiBhbmQgb25seSBpZiB0aGVpcgorY29udGVudHMgKGluY2x1ZGluZywgcmVjdXJzaXZlbHksIHRoZSBjb250ZW50cyBvZiBhbGwgc3ViZGlyZWN0b3JpZXMpCithcmUgaWRlbnRpY2FsLiAgVGhpcyBhbGxvd3MgZ2l0IHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBkaWZmZXJlbmNlcworYmV0d2VlbiB0d28gcmVsYXRlZCB0cmVlIG9iamVjdHMsIHNpbmNlIGl0IGNhbiBpZ25vcmUgYW55IGVudHJpZXMgd2l0aAoraWRlbnRpY2FsIG9iamVjdCBuYW1lcy4KKworKE5vdGU6IGluIHRoZSBwcmVzZW5jZSBvZiBzdWJtb2R1bGVzLCB0cmVlcyBtYXkgYWxzbyBoYXZlIGNvbW1pdHMgYXMKK2VudHJpZXMuICBTZWUgPDxzdWJtb2R1bGVzPj4gZm9yIGRvY3VtZW50YXRpb24uKQorCitOb3RlIHRoYXQgdGhlIGZpbGVzIGFsbCBoYXZlIG1vZGUgNjQ0IG9yIDc1NTogZ2l0IGFjdHVhbGx5IG9ubHkgcGF5cworYXR0ZW50aW9uIHRvIHRoZSBleGVjdXRhYmxlIGJpdC4KKworW1tibG9iLW9iamVjdF1dCitCbG9iIE9iamVjdAorfn5+fn5+fn5+fn4KKworWW91IGNhbiB1c2UgbGlua2dpdDpnaXQtc2hvd1sxXSB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiBhIGJsb2I7IHRha2UsCitmb3IgZXhhbXBsZSwgdGhlIGJsb2IgaW4gdGhlIGVudHJ5IGZvciAiQ09QWUlORyIgZnJvbSB0aGUgdHJlZSBhYm92ZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IDZmZjg3YzQ2NjQKKworIE5vdGUgdGhhdCB0aGUgb25seSB2YWxpZCB2ZXJzaW9uIG9mIHRoZSBHUEwgYXMgZmFyIGFzIHRoaXMgcHJvamVjdAorIGlzIGNvbmNlcm5lZCBpcyBfdGhpc18gcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIChpZSB2Miwgbm90CisgdjIuMiBvciB2My54IG9yIHdoYXRldmVyKSwgdW5sZXNzIGV4cGxpY2l0bHkgb3RoZXJ3aXNlIHN0YXRlZC4KKy4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgImJsb2IiIG9iamVjdCBpcyBub3RoaW5nIGJ1dCBhIGJpbmFyeSBibG9iIG9mIGRhdGEuICBJdCBkb2Vzbid0IHJlZmVyCit0byBhbnl0aGluZyBlbHNlIG9yIGhhdmUgYXR0cmlidXRlcyBvZiBhbnkga2luZC4KKworU2luY2UgdGhlIGJsb2IgaXMgZW50aXJlbHkgZGVmaW5lZCBieSBpdHMgZGF0YSwgaWYgdHdvIGZpbGVzIGluIGEKK2RpcmVjdG9yeSB0cmVlIChvciBpbiBtdWx0aXBsZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHJlcG9zaXRvcnkpCitoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLCB0aGV5IHdpbGwgc2hhcmUgdGhlIHNhbWUgYmxvYiBvYmplY3QuIFRoZSBvYmplY3QKK2lzIHRvdGFsbHkgaW5kZXBlbmRlbnQgb2YgaXRzIGxvY2F0aW9uIGluIHRoZSBkaXJlY3RvcnkgdHJlZSwgYW5kCityZW5hbWluZyBhIGZpbGUgZG9lcyBub3QgY2hhbmdlIHRoZSBvYmplY3QgdGhhdCBmaWxlIGlzIGFzc29jaWF0ZWQgd2l0aC4KKworTm90ZSB0aGF0IGFueSB0cmVlIG9yIGJsb2Igb2JqZWN0IGNhbiBiZSBleGFtaW5lZCB1c2luZworbGlua2dpdDpnaXQtc2hvd1sxXSB3aXRoIHRoZSA8cmV2aXNpb24+OjxwYXRoPiBzeW50YXguICBUaGlzIGNhbgorc29tZXRpbWVzIGJlIHVzZWZ1bCBmb3IgYnJvd3NpbmcgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSB0aGF0IGlzIG5vdAorY3VycmVudGx5IGNoZWNrZWQgb3V0LgorCitbW3RydXN0XV0KK1RydXN0Cit+fn5+fgorCitJZiB5b3UgcmVjZWl2ZSB0aGUgU0hBLTEgbmFtZSBvZiBhIGJsb2IgZnJvbSBvbmUgc291cmNlLCBhbmQgaXRzIGNvbnRlbnRzCitmcm9tIGFub3RoZXIgKHBvc3NpYmx5IHVudHJ1c3RlZCkgc291cmNlLCB5b3UgY2FuIHN0aWxsIHRydXN0IHRoYXQgdGhvc2UKK2NvbnRlbnRzIGFyZSBjb3JyZWN0IGFzIGxvbmcgYXMgdGhlIFNIQS0xIG5hbWUgYWdyZWVzLiAgVGhpcyBpcyBiZWNhdXNlCit0aGUgU0hBLTEgaXMgZGVzaWduZWQgc28gdGhhdCBpdCBpcyBpbmZlYXNpYmxlIHRvIGZpbmQgZGlmZmVyZW50IGNvbnRlbnRzCit0aGF0IHByb2R1Y2UgdGhlIHNhbWUgaGFzaC4KKworU2ltaWxhcmx5LCB5b3UgbmVlZCBvbmx5IHRydXN0IHRoZSBTSEEtMSBuYW1lIG9mIGEgdG9wLWxldmVsIHRyZWUgb2JqZWN0Cit0byB0cnVzdCB0aGUgY29udGVudHMgb2YgdGhlIGVudGlyZSBkaXJlY3RvcnkgdGhhdCBpdCByZWZlcnMgdG8sIGFuZCBpZgoreW91IHJlY2VpdmUgdGhlIFNIQS0xIG5hbWUgb2YgYSBjb21taXQgZnJvbSBhIHRydXN0ZWQgc291cmNlLCB0aGVuIHlvdQorY2FuIGVhc2lseSB2ZXJpZnkgdGhlIGVudGlyZSBoaXN0b3J5IG9mIGNvbW1pdHMgcmVhY2hhYmxlIHRocm91Z2gKK3BhcmVudHMgb2YgdGhhdCBjb21taXQsIGFuZCBhbGwgb2YgdGhvc2UgY29udGVudHMgb2YgdGhlIHRyZWVzIHJlZmVycmVkCit0byBieSB0aG9zZSBjb21taXRzLgorCitTbyB0byBpbnRyb2R1Y2Ugc29tZSByZWFsIHRydXN0IGluIHRoZSBzeXN0ZW0sIHRoZSBvbmx5IHRoaW5nIHlvdSBuZWVkCit0byBkbyBpcyB0byBkaWdpdGFsbHkgc2lnbiBqdXN0ICdvbmUnIHNwZWNpYWwgbm90ZSwgd2hpY2ggaW5jbHVkZXMgdGhlCituYW1lIG9mIGEgdG9wLWxldmVsIGNvbW1pdC4gIFlvdXIgZGlnaXRhbCBzaWduYXR1cmUgc2hvd3Mgb3RoZXJzCit0aGF0IHlvdSB0cnVzdCB0aGF0IGNvbW1pdCwgYW5kIHRoZSBpbW11dGFiaWxpdHkgb2YgdGhlIGhpc3Rvcnkgb2YKK2NvbW1pdHMgdGVsbHMgb3RoZXJzIHRoYXQgdGhleSBjYW4gdHJ1c3QgdGhlIHdob2xlIGhpc3RvcnkuCisKK0luIG90aGVyIHdvcmRzLCB5b3UgY2FuIGVhc2lseSB2YWxpZGF0ZSBhIHdob2xlIGFyY2hpdmUgYnkganVzdAorc2VuZGluZyBvdXQgYSBzaW5nbGUgZW1haWwgdGhhdCB0ZWxscyB0aGUgcGVvcGxlIHRoZSBuYW1lIChTSEEtMSBoYXNoKQorb2YgdGhlIHRvcCBjb21taXQsIGFuZCBkaWdpdGFsbHkgc2lnbiB0aGF0IGVtYWlsIHVzaW5nIHNvbWV0aGluZworbGlrZSBHUEcvUEdQLgorCitUbyBhc3Npc3QgaW4gdGhpcywgZ2l0IGFsc28gcHJvdmlkZXMgdGhlIHRhZyBvYmplY3QuLi4KKworW1t0YWctb2JqZWN0XV0KK1RhZyBPYmplY3QKK35+fn5+fn5+fn4KKworQSB0YWcgb2JqZWN0IGNvbnRhaW5zIGFuIG9iamVjdCwgb2JqZWN0IHR5cGUsIHRhZyBuYW1lLCB0aGUgbmFtZSBvZiB0aGUKK3BlcnNvbiAoInRhZ2dlciIpIHdobyBjcmVhdGVkIHRoZSB0YWcsIGFuZCBhIG1lc3NhZ2UsIHdoaWNoIG1heSBjb250YWluCithIHNpZ25hdHVyZSwgYXMgY2FuIGJlIHNlZW4gdXNpbmcgbGlua2dpdDpnaXQtY2F0LWZpbGVbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgdGFnIHYxLjUuMAorb2JqZWN0IDQzN2IxYjIwZGY0YjM1NmM5MzQyZGFjOGQzODg0OWYyNGVmNDRmMjcKK3R5cGUgY29tbWl0Cit0YWcgdjEuNS4wCit0YWdnZXIgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAxMTcxNDExMjAwICswMDAwCisKK0dJVCAxLjUuMAorLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KK1ZlcnNpb246IEdudVBHIHYxLjQuNiAoR05VL0xpbnV4KQorCitpRDhEQlFCRjBsR3F3TWJacFBNUm01b1JBdVJpQUo5b2hCTGQ3czJrcWprS2xxMXFxQzU3U2JubXpRQ2RHNHVpCituTEUvTDlhVVhkV2VURlByb245NkRMQT0KKz0yRSswCistLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgdGhlIGxpbmtnaXQ6Z2l0LXRhZ1sxXSBjb21tYW5kIHRvIGxlYXJuIGhvdyB0byBjcmVhdGUgYW5kIHZlcmlmeSB0YWcKK29iamVjdHMuICAoTm90ZSB0aGF0IGxpbmtnaXQ6Z2l0LXRhZ1sxXSBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZQorImxpZ2h0d2VpZ2h0IHRhZ3MiLCB3aGljaCBhcmUgbm90IHRhZyBvYmplY3RzIGF0IGFsbCwgYnV0IGp1c3Qgc2ltcGxlCityZWZlcmVuY2VzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggInJlZnMvdGFncy8iKS4KKworW1twYWNrLWZpbGVzXV0KK0hvdyBnaXQgc3RvcmVzIG9iamVjdHMgZWZmaWNpZW50bHk6IHBhY2sgZmlsZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworTmV3bHkgY3JlYXRlZCBvYmplY3RzIGFyZSBpbml0aWFsbHkgY3JlYXRlZCBpbiBhIGZpbGUgbmFtZWQgYWZ0ZXIgdGhlCitvYmplY3QncyBTSEEtMSBoYXNoIChzdG9yZWQgaW4gLmdpdC9vYmplY3RzKS4KKworVW5mb3J0dW5hdGVseSB0aGlzIHN5c3RlbSBiZWNvbWVzIGluZWZmaWNpZW50IG9uY2UgYSBwcm9qZWN0IGhhcyBhCitsb3Qgb2Ygb2JqZWN0cy4gIFRyeSB0aGlzIG9uIGFuIG9sZCBwcm9qZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvdW50LW9iamVjdHMKKzY5MzAgb2JqZWN0cywgNDc2MjAga2lsb2J5dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IG51bWJlciBpcyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgd2hpY2ggYXJlIGtlcHQgaW4KK2luZGl2aWR1YWwgZmlsZXMuICBUaGUgc2Vjb25kIGlzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGFrZW4gdXAgYnkKK3Rob3NlICJsb29zZSIgb2JqZWN0cy4KKworWW91IGNhbiBzYXZlIHNwYWNlIGFuZCBtYWtlIGdpdCBmYXN0ZXIgYnkgbW92aW5nIHRoZXNlIGxvb3NlIG9iamVjdHMgaW4KK3RvIGEgInBhY2sgZmlsZSIsIHdoaWNoIHN0b3JlcyBhIGdyb3VwIG9mIG9iamVjdHMgaW4gYW4gZWZmaWNpZW50Citjb21wcmVzc2VkIGZvcm1hdDsgdGhlIGRldGFpbHMgb2YgaG93IHBhY2sgZmlsZXMgYXJlIGZvcm1hdHRlZCBjYW4gYmUKK2ZvdW5kIGluIGxpbms6dGVjaG5pY2FsL3BhY2stZm9ybWF0LnR4dFt0ZWNobmljYWwvcGFjay1mb3JtYXQudHh0XS4KKworVG8gcHV0IHRoZSBsb29zZSBvYmplY3RzIGludG8gYSBwYWNrLCBqdXN0IHJ1biBnaXQgcmVwYWNrOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlcGFjaworR2VuZXJhdGluZyBwYWNrLi4uCitEb25lIGNvdW50aW5nIDYwMjAgb2JqZWN0cy4KK0RlbHRpZnlpbmcgNjAyMCBvYmplY3RzLgorIDEwMCUgKDYwMjAvNjAyMCkgZG9uZQorV3JpdGluZyA2MDIwIG9iamVjdHMuCisgMTAwJSAoNjAyMC82MDIwKSBkb25lCitUb3RhbCA2MDIwLCB3cml0dGVuIDYwMjAgKGRlbHRhIDQwNzApLCByZXVzZWQgMCAoZGVsdGEgMCkKK1BhY2sgcGFjay0zZTU0YWQyOWQ1YjJlMDU4MzhjNzVkZjU4MmM2NTI1N2I4ZDA4ZTFjIGNyZWF0ZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiB0aGVuIHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHBydW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gcmVtb3ZlIGFueSBvZiB0aGUgImxvb3NlIiBvYmplY3RzIHRoYXQgYXJlIG5vdyBjb250YWluZWQgaW4gdGhlCitwYWNrLiAgVGhpcyB3aWxsIGFsc28gcmVtb3ZlIGFueSB1bnJlZmVyZW5jZWQgb2JqZWN0cyAod2hpY2ggbWF5IGJlCitjcmVhdGVkIHdoZW4sIGZvciBleGFtcGxlLCB5b3UgdXNlICJnaXQgcmVzZXQiIHRvIHJlbW92ZSBhIGNvbW1pdCkuCitZb3UgY2FuIHZlcmlmeSB0aGF0IHRoZSBsb29zZSBvYmplY3RzIGFyZSBnb25lIGJ5IGxvb2tpbmcgYXQgdGhlCisuZ2l0L29iamVjdHMgZGlyZWN0b3J5IG9yIGJ5IHJ1bm5pbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb3VudC1vYmplY3RzCiswIG9iamVjdHMsIDAga2lsb2J5dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0aG91Z2ggdGhlIG9iamVjdCBmaWxlcyBhcmUgZ29uZSwgYW55IGNvbW1hbmRzIHRoYXQgcmVmZXIgdG8gdGhvc2UKK29iamVjdHMgd2lsbCB3b3JrIGV4YWN0bHkgYXMgdGhleSBkaWQgYmVmb3JlLgorCitUaGUgbGlua2dpdDpnaXQtZ2NbMV0gY29tbWFuZCBwZXJmb3JtcyBwYWNraW5nLCBwcnVuaW5nLCBhbmQgbW9yZSBmb3IKK3lvdSwgc28gaXMgbm9ybWFsbHkgdGhlIG9ubHkgaGlnaC1sZXZlbCBjb21tYW5kIHlvdSBuZWVkLgorCitbW2RhbmdsaW5nLW9iamVjdHNdXQorRGFuZ2xpbmcgb2JqZWN0cworfn5+fn5+fn5+fn5+fn5+fgorCitUaGUgbGlua2dpdDpnaXQtZnNja1sxXSBjb21tYW5kIHdpbGwgc29tZXRpbWVzIGNvbXBsYWluIGFib3V0IGRhbmdsaW5nCitvYmplY3RzLiAgVGhleSBhcmUgbm90IGEgcHJvYmxlbS4KKworVGhlIG1vc3QgY29tbW9uIGNhdXNlIG9mIGRhbmdsaW5nIG9iamVjdHMgaXMgdGhhdCB5b3UndmUgcmViYXNlZCBhCiticmFuY2gsIG9yIHlvdSBoYXZlIHB1bGxlZCBmcm9tIHNvbWVib2R5IGVsc2Ugd2hvIHJlYmFzZWQgYSBicmFuY2gtLXNlZQorPDxjbGVhbmluZy11cC1oaXN0b3J5Pj4uICBJbiB0aGF0IGNhc2UsIHRoZSBvbGQgaGVhZCBvZiB0aGUgb3JpZ2luYWwKK2JyYW5jaCBzdGlsbCBleGlzdHMsIGFzIGRvZXMgZXZlcnl0aGluZyBpdCBwb2ludGVkIHRvLiBUaGUgYnJhbmNoCitwb2ludGVyIGl0c2VsZiBqdXN0IGRvZXNuJ3QsIHNpbmNlIHlvdSByZXBsYWNlZCBpdCB3aXRoIGFub3RoZXIgb25lLgorCitUaGVyZSBhcmUgYWxzbyBvdGhlciBzaXR1YXRpb25zIHRoYXQgY2F1c2UgZGFuZ2xpbmcgb2JqZWN0cy4gRm9yCitleGFtcGxlLCBhICJkYW5nbGluZyBibG9iIiBtYXkgYXJpc2UgYmVjYXVzZSB5b3UgZGlkIGEgImdpdCBhZGQiIG9mIGEKK2ZpbGUsIGJ1dCB0aGVuLCBiZWZvcmUgeW91IGFjdHVhbGx5IGNvbW1pdHRlZCBpdCBhbmQgbWFkZSBpdCBwYXJ0IG9mIHRoZQorYmlnZ2VyIHBpY3R1cmUsIHlvdSBjaGFuZ2VkIHNvbWV0aGluZyBlbHNlIGluIHRoYXQgZmlsZSBhbmQgY29tbWl0dGVkCit0aGF0ICp1cGRhdGVkKiB0aGluZy0tdGhlIG9sZCBzdGF0ZSB0aGF0IHlvdSBhZGRlZCBvcmlnaW5hbGx5IGVuZHMgdXAKK25vdCBiZWluZyBwb2ludGVkIHRvIGJ5IGFueSBjb21taXQgb3IgdHJlZSwgc28gaXQncyBub3cgYSBkYW5nbGluZyBibG9iCitvYmplY3QuCisKK1NpbWlsYXJseSwgd2hlbiB0aGUgInJlY3Vyc2l2ZSIgbWVyZ2Ugc3RyYXRlZ3kgcnVucywgYW5kIGZpbmRzIHRoYXQKK3RoZXJlIGFyZSBjcmlzcy1jcm9zcyBtZXJnZXMgYW5kIHRodXMgbW9yZSB0aGFuIG9uZSBtZXJnZSBiYXNlICh3aGljaCBpcworZmFpcmx5IHVudXN1YWwsIGJ1dCBpdCBkb2VzIGhhcHBlbiksIGl0IHdpbGwgZ2VuZXJhdGUgb25lIHRlbXBvcmFyeQorbWlkd2F5IHRyZWUgKG9yIHBvc3NpYmx5IGV2ZW4gbW9yZSwgaWYgeW91IGhhZCBsb3RzIG9mIGNyaXNzLWNyb3NzaW5nCittZXJnZXMgYW5kIG1vcmUgdGhhbiB0d28gbWVyZ2UgYmFzZXMpIGFzIGEgdGVtcG9yYXJ5IGludGVybmFsIG1lcmdlCitiYXNlLCBhbmQgYWdhaW4sIHRob3NlIGFyZSByZWFsIG9iamVjdHMsIGJ1dCB0aGUgZW5kIHJlc3VsdCB3aWxsIG5vdCBlbmQKK3VwIHBvaW50aW5nIHRvIHRoZW0sIHNvIHRoZXkgZW5kIHVwICJkYW5nbGluZyIgaW4geW91ciByZXBvc2l0b3J5LgorCitHZW5lcmFsbHksIGRhbmdsaW5nIG9iamVjdHMgYXJlbid0IGFueXRoaW5nIHRvIHdvcnJ5IGFib3V0LiBUaGV5IGNhbgorZXZlbiBiZSB2ZXJ5IHVzZWZ1bDogaWYgeW91IHNjcmV3IHNvbWV0aGluZyB1cCwgdGhlIGRhbmdsaW5nIG9iamVjdHMgY2FuCitiZSBob3cgeW91IHJlY292ZXIgeW91ciBvbGQgdHJlZSAoc2F5LCB5b3UgZGlkIGEgcmViYXNlLCBhbmQgcmVhbGl6ZWQKK3RoYXQgeW91IHJlYWxseSBkaWRuJ3Qgd2FudCB0by0teW91IGNhbiBsb29rIGF0IHdoYXQgZGFuZ2xpbmcgb2JqZWN0cworeW91IGhhdmUsIGFuZCBkZWNpZGUgdG8gcmVzZXQgeW91ciBoZWFkIHRvIHNvbWUgb2xkIGRhbmdsaW5nIHN0YXRlKS4KKworRm9yIGNvbW1pdHMsIHlvdSBjYW4ganVzdCB1c2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIDxkYW5nbGluZy1jb21taXQtc2hhLWdvZXMtaGVyZT4gLS1ub3QgLS1hbGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGFza3MgZm9yIGFsbCB0aGUgaGlzdG9yeSByZWFjaGFibGUgZnJvbSB0aGUgZ2l2ZW4gY29tbWl0IGJ1dCBub3QKK2Zyb20gYW55IGJyYW5jaCwgdGFnLCBvciBvdGhlciByZWZlcmVuY2UuICBJZiB5b3UgZGVjaWRlIGl0J3Mgc29tZXRoaW5nCit5b3Ugd2FudCwgeW91IGNhbiBhbHdheXMgY3JlYXRlIGEgbmV3IHJlZmVyZW5jZSB0byBpdCwgZS5nLiwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggcmVjb3ZlcmVkLWJyYW5jaCA8ZGFuZ2xpbmctY29tbWl0LXNoYS1nb2VzLWhlcmU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGJsb2JzIGFuZCB0cmVlcywgeW91IGNhbid0IGRvIHRoZSBzYW1lLCBidXQgeW91IGNhbiBzdGlsbCBleGFtaW5lCit0aGVtLiAgWW91IGNhbiBqdXN0IGRvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyA8ZGFuZ2xpbmctYmxvYi90cmVlLXNoYS1nb2VzLWhlcmU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gc2hvdyB3aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiB3ZXJlIChvciwgZm9yIGEgdHJlZSwgYmFzaWNhbGx5Cit3aGF0IHRoZSAibHMiIGZvciB0aGF0IGRpcmVjdG9yeSB3YXMpLCBhbmQgdGhhdCBtYXkgZ2l2ZSB5b3Ugc29tZSBpZGVhCitvZiB3aGF0IHRoZSBvcGVyYXRpb24gd2FzIHRoYXQgbGVmdCB0aGF0IGRhbmdsaW5nIG9iamVjdC4KKworVXN1YWxseSwgZGFuZ2xpbmcgYmxvYnMgYW5kIHRyZWVzIGFyZW4ndCB2ZXJ5IGludGVyZXN0aW5nLiBUaGV5J3JlCithbG1vc3QgYWx3YXlzIHRoZSByZXN1bHQgb2YgZWl0aGVyIGJlaW5nIGEgaGFsZi13YXkgbWVyZ2ViYXNlICh0aGUgYmxvYgord2lsbCBvZnRlbiBldmVuIGhhdmUgdGhlIGNvbmZsaWN0IG1hcmtlcnMgZnJvbSBhIG1lcmdlIGluIGl0LCBpZiB5b3UKK2hhdmUgaGFkIGNvbmZsaWN0aW5nIG1lcmdlcyB0aGF0IHlvdSBmaXhlZCB1cCBieSBoYW5kKSwgb3Igc2ltcGx5CitiZWNhdXNlIHlvdSBpbnRlcnJ1cHRlZCBhICJnaXQgZmV0Y2giIHdpdGggXkMgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCwKK2xlYXZpbmcgX3NvbWVfIG9mIHRoZSBuZXcgb2JqZWN0cyBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLCBidXQganVzdAorZGFuZ2xpbmcgYW5kIHVzZWxlc3MuCisKK0FueXdheSwgb25jZSB5b3UgYXJlIHN1cmUgdGhhdCB5b3UncmUgbm90IGludGVyZXN0ZWQgaW4gYW55IGRhbmdsaW5nCitzdGF0ZSwgeW91IGNhbiBqdXN0IHBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHBydW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoZXknbGwgYmUgZ29uZS4gQnV0IHlvdSBzaG91bGQgb25seSBydW4gImdpdCBwcnVuZSIgb24gYSBxdWllc2NlbnQKK3JlcG9zaXRvcnktLWl0J3Mga2luZCBvZiBsaWtlIGRvaW5nIGEgZmlsZXN5c3RlbSBmc2NrIHJlY292ZXJ5OiB5b3UKK2Rvbid0IHdhbnQgdG8gZG8gdGhhdCB3aGlsZSB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLgorCisoVGhlIHNhbWUgaXMgdHJ1ZSBvZiAiZ2l0IGZzY2siIGl0c2VsZiwgYnR3LCBidXQgc2luY2UKK2BnaXQgZnNja2AgbmV2ZXIgYWN0dWFsbHkgKmNoYW5nZXMqIHRoZSByZXBvc2l0b3J5LCBpdCBqdXN0IHJlcG9ydHMKK29uIHdoYXQgaXQgZm91bmQsIGBnaXQgZnNja2AgaXRzZWxmIGlzIG5ldmVyICdkYW5nZXJvdXMnIHRvIHJ1bi4KK1J1bm5pbmcgaXQgd2hpbGUgc29tZWJvZHkgaXMgYWN0dWFsbHkgY2hhbmdpbmcgdGhlIHJlcG9zaXRvcnkgY2FuIGNhdXNlCitjb25mdXNpbmcgYW5kIHNjYXJ5IG1lc3NhZ2VzLCBidXQgaXQgd29uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgYmFkLiBJbgorY29udHJhc3QsIHJ1bm5pbmcgImdpdCBwcnVuZSIgd2hpbGUgc29tZWJvZHkgaXMgYWN0aXZlbHkgY2hhbmdpbmcgdGhlCityZXBvc2l0b3J5IGlzIGEgKkJBRCogaWRlYSkuCisKK1tbcmVjb3ZlcmluZy1mcm9tLXJlcG9zaXRvcnktY29ycnVwdGlvbl1dCitSZWNvdmVyaW5nIGZyb20gcmVwb3NpdG9yeSBjb3JydXB0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0J5IGRlc2lnbiwgZ2l0IHRyZWF0cyBkYXRhIHRydXN0ZWQgdG8gaXQgd2l0aCBjYXV0aW9uLiAgSG93ZXZlciwgZXZlbiBpbgordGhlIGFic2VuY2Ugb2YgYnVncyBpbiBnaXQgaXRzZWxmLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0aGF0IGhhcmR3YXJlIG9yCitvcGVyYXRpbmcgc3lzdGVtIGVycm9ycyBjb3VsZCBjb3JydXB0IGRhdGEuCisKK1RoZSBmaXJzdCBkZWZlbnNlIGFnYWluc3Qgc3VjaCBwcm9ibGVtcyBpcyBiYWNrdXBzLiAgWW91IGNhbiBiYWNrIHVwIGEKK2dpdCBkaXJlY3RvcnkgdXNpbmcgY2xvbmUsIG9yIGp1c3QgdXNpbmcgY3AsIHRhciwgb3IgYW55IG90aGVyIGJhY2t1cAorbWVjaGFuaXNtLgorCitBcyBhIGxhc3QgcmVzb3J0LCB5b3UgY2FuIHNlYXJjaCBmb3IgdGhlIGNvcnJ1cHRlZCBvYmplY3RzIGFuZCBhdHRlbXB0Cit0byByZXBsYWNlIHRoZW0gYnkgaGFuZC4gIEJhY2sgdXAgeW91ciByZXBvc2l0b3J5IGJlZm9yZSBhdHRlbXB0aW5nIHRoaXMKK2luIGNhc2UgeW91IGNvcnJ1cHQgdGhpbmdzIGV2ZW4gbW9yZSBpbiB0aGUgcHJvY2Vzcy4KKworV2UnbGwgYXNzdW1lIHRoYXQgdGhlIHByb2JsZW0gaXMgYSBzaW5nbGUgbWlzc2luZyBvciBjb3JydXB0ZWQgYmxvYiwKK3doaWNoIGlzIHNvbWV0aW1lcyBhIHNvbHZhYmxlIHByb2JsZW0uICAoUmVjb3ZlcmluZyBtaXNzaW5nIHRyZWVzIGFuZAorZXNwZWNpYWxseSBjb21taXRzIGlzICptdWNoKiBoYXJkZXIpLgorCitCZWZvcmUgc3RhcnRpbmcsIHZlcmlmeSB0aGF0IHRoZXJlIGlzIGNvcnJ1cHRpb24sIGFuZCBmaWd1cmUgb3V0IHdoZXJlCitpdCBpcyB3aXRoIGxpbmtnaXQ6Z2l0LWZzY2tbMV07IHRoaXMgbWF5IGJlIHRpbWUtY29uc3VtaW5nLgorCitBc3N1bWUgdGhlIG91dHB1dCBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZnNjayAtLWZ1bGwgLS1uby1kYW5nbGluZworYnJva2VuIGxpbmsgZnJvbSAgICB0cmVlIDJkOTI2M2M2ZDIzNTk1ZTdjYjJhMjFlNWViYmI1MzY1NTI3OGRmZjgKKyAgICAgICAgICAgICAgdG8gICAgYmxvYiA0Yjk0NThiMzc4NjIyODM2OWM2MzkzNmRiNjU4MjdkZTNjYzA2MjAwCittaXNzaW5nIGJsb2IgNGI5NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyB5b3Uga25vdyB0aGF0IGJsb2IgNGI5NDU4YjMgaXMgbWlzc2luZywgYW5kIHRoYXQgdGhlIHRyZWUgMmQ5MjYzYzYKK3BvaW50cyB0byBpdC4gIElmIHlvdSBjb3VsZCBmaW5kIGp1c3Qgb25lIGNvcHkgb2YgdGhhdCBtaXNzaW5nIGJsb2IKK29iamVjdCwgcG9zc2libHkgaW4gc29tZSBvdGhlciByZXBvc2l0b3J5LCB5b3UgY291bGQgbW92ZSBpdCBpbnRvCisuZ2l0L29iamVjdHMvNGIvOTQ1OGIzLi4uIGFuZCBiZSBkb25lLiAgU3VwcG9zZSB5b3UgY2FuJ3QuICBZb3UgY2FuCitzdGlsbCBleGFtaW5lIHRoZSB0cmVlIHRoYXQgcG9pbnRlZCB0byBpdCB3aXRoIGxpbmtnaXQ6Z2l0LWxzLXRyZWVbMV0sCit3aGljaCBtaWdodCBvdXRwdXQgc29tZXRoaW5nIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbHMtdHJlZSAyZDkyNjNjNmQyMzU5NWU3Y2IyYTIxZTVlYmJiNTM2NTUyNzhkZmY4CisxMDA2NDQgYmxvYiA4ZDE0NTMxODQ2Yjk1YmZhMzU2NGI1OGNjZmI3OTEzYTAzNDMyM2I4CS5naXRpZ25vcmUKKzEwMDY0NCBibG9iIGViZjliZjg0ZGEwYWFiNWVkOTQ0MjY0YTVkYjJhNjVmZTNhM2U4ODMJLm1haWxtYXAKKzEwMDY0NCBibG9iIGNhNDQyZDMxM2Q4NmRjNjdlMGEyZTVkNTg0YjQ2NWJkMzgyY2JmNWMJQ09QWUlORworLi4uCisxMDA2NDQgYmxvYiA0Yjk0NThiMzc4NjIyODM2OWM2MzkzNmRiNjU4MjdkZTNjYzA2MjAwCW15ZmlsZQorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU28gbm93IHlvdSBrbm93IHRoYXQgdGhlIG1pc3NpbmcgYmxvYiB3YXMgdGhlIGRhdGEgZm9yIGEgZmlsZSBuYW1lZAorIm15ZmlsZSIuICBBbmQgY2hhbmNlcyBhcmUgeW91IGNhbiBhbHNvIGlkZW50aWZ5IHRoZSBkaXJlY3RvcnktLWxldCdzCitzYXkgaXQncyBpbiAic29tZWRpcmVjdG9yeSIuICBJZiB5b3UncmUgbHVja3kgdGhlIG1pc3NpbmcgY29weSBtaWdodCBiZQordGhlIHNhbWUgYXMgdGhlIGNvcHkgeW91IGhhdmUgY2hlY2tlZCBvdXQgaW4geW91ciB3b3JraW5nIHRyZWUgYXQKKyJzb21lZGlyZWN0b3J5L215ZmlsZSI7IHlvdSBjYW4gdGVzdCB3aGV0aGVyIHRoYXQncyByaWdodCB3aXRoCitsaW5rZ2l0OmdpdC1oYXNoLW9iamVjdFsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBoYXNoLW9iamVjdCAtdyBzb21lZGlyZWN0b3J5L215ZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgY3JlYXRlIGFuZCBzdG9yZSBhIGJsb2Igb2JqZWN0IHdpdGggdGhlIGNvbnRlbnRzIG9mCitzb21lZGlyZWN0b3J5L215ZmlsZSwgYW5kIG91dHB1dCB0aGUgU0hBLTEgb2YgdGhhdCBvYmplY3QuICBpZiB5b3UncmUKK2V4dHJlbWVseSBsdWNreSBpdCBtaWdodCBiZSA0Yjk0NThiMzc4NjIyODM2OWM2MzkzNmRiNjU4MjdkZTNjYzA2MjAwLCBpbgord2hpY2ggY2FzZSB5b3UndmUgZ3Vlc3NlZCByaWdodCwgYW5kIHRoZSBjb3JydXB0aW9uIGlzIGZpeGVkIQorCitPdGhlcndpc2UsIHlvdSBuZWVkIG1vcmUgaW5mb3JtYXRpb24uICBIb3cgZG8geW91IHRlbGwgd2hpY2ggdmVyc2lvbiBvZgordGhlIGZpbGUgaGFzIGJlZW4gbG9zdD8KKworVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1yYXcgLS1hbGwgLS1mdWxsLWhpc3RvcnkgLS0gc29tZWRpcmVjdG9yeS9teWZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZWNhdXNlIHlvdSdyZSBhc2tpbmcgZm9yIHJhdyBvdXRwdXQsIHlvdSdsbCBub3cgZ2V0IHNvbWV0aGluZyBsaWtlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29tbWl0IGFiYworQXV0aG9yOgorRGF0ZToKKy4uLgorOjEwMDY0NCAxMDA2NDQgNGI5NDU4Yi4uLiBuZXdzaGEuLi4gTSBzb21lZGlyZWN0b3J5L215ZmlsZQorCisKK2NvbW1pdCB4eXoKK0F1dGhvcjoKK0RhdGU6CisKKy4uLgorOjEwMDY0NCAxMDA2NDQgb2xkc2hhLi4uIDRiOTQ1OGIuLi4gTSBzb21lZGlyZWN0b3J5L215ZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdGVsbHMgeW91IHRoYXQgdGhlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB2ZXJzaW9uIG9mIHRoZSBmaWxlIHdhcworIm5ld3NoYSIsIGFuZCB0aGF0IHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdmVyc2lvbiB3YXMgIm9sZHNoYSIuCitZb3UgYWxzbyBrbm93IHRoZSBjb21taXQgbWVzc2FnZXMgdGhhdCB3ZW50IHdpdGggdGhlIGNoYW5nZSBmcm9tIG9sZHNoYQordG8gNGI5NDU4YiBhbmQgd2l0aCB0aGUgY2hhbmdlIGZyb20gNGI5NDU4YiB0byBuZXdzaGEuCisKK0lmIHlvdSd2ZSBiZWVuIGNvbW1pdHRpbmcgc21hbGwgZW5vdWdoIGNoYW5nZXMsIHlvdSBtYXkgbm93IGhhdmUgYSBnb29kCitzaG90IGF0IHJlY29uc3RydWN0aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgaW4tYmV0d2VlbiBzdGF0ZSA0Yjk0NThiLgorCitJZiB5b3UgY2FuIGRvIHRoYXQsIHlvdSBjYW4gbm93IHJlY3JlYXRlIHRoZSBtaXNzaW5nIG9iamVjdCB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgaGFzaC1vYmplY3QgLXcgPHJlY3JlYXRlZC1maWxlPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB5b3VyIHJlcG9zaXRvcnkgaXMgZ29vZCBhZ2FpbiEKKworKEJ0dywgeW91IGNvdWxkIGhhdmUgaWdub3JlZCB0aGUgZnNjaywgYW5kIHN0YXJ0ZWQgd2l0aCBkb2luZyBhCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tcmF3IC0tYWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIGp1c3QgbG9va2VkIGZvciB0aGUgc2hhIG9mIHRoZSBtaXNzaW5nIG9iamVjdCAoNGI5NDU4Yi4uKSBpbiB0aGF0Cit3aG9sZSB0aGluZy4gSXQncyB1cCB0byB5b3UgLSBnaXQgZG9lcyAqaGF2ZSogYSBsb3Qgb2YgaW5mb3JtYXRpb24sIGl0IGlzCitqdXN0IG1pc3Npbmcgb25lIHBhcnRpY3VsYXIgYmxvYiB2ZXJzaW9uLgorCitbW3RoZS1pbmRleF1dCitUaGUgaW5kZXgKKy0tLS0tLS0tLS0tCisKK1RoZSBpbmRleCBpcyBhIGJpbmFyeSBmaWxlIChnZW5lcmFsbHkga2VwdCBpbiAuZ2l0L2luZGV4KSBjb250YWluaW5nIGEKK3NvcnRlZCBsaXN0IG9mIHBhdGggbmFtZXMsIGVhY2ggd2l0aCBwZXJtaXNzaW9ucyBhbmQgdGhlIFNIQS0xIG9mIGEgYmxvYgorb2JqZWN0OyBsaW5rZ2l0OmdpdC1scy1maWxlc1sxXSBjYW4gc2hvdyB5b3UgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmRleDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbHMtZmlsZXMgLS1zdGFnZQorMTAwNjQ0IDYzYzkxOGM2NjdmYTAwNWZmMTJhZDg5NDM3ZjJmZGM4MDkyNmUyMWMgMAkuZ2l0aWdub3JlCisxMDA2NDQgNTUyOWIxOThlOGQxNGRlY2JlNGFkOTlkYjNmN2ZiNjMyZGUwNDM5ZCAwCS5tYWlsbWFwCisxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyAwCUNPUFlJTkcKKzEwMDY0NCBhMzdiMjE1MmJkMjZiZTJjMjI4OWUxZjU3YTI5MjUzNGE1MWE5M2M3IDAJRG9jdW1lbnRhdGlvbi8uZ2l0aWdub3JlCisxMDA2NDQgZmJlZmU5YTQ1YjAwYTU0YjU4ZDk0ZDA2ZWNhNDhiMDNkNDBhNTBlMCAwCURvY3VtZW50YXRpb24vTWFrZWZpbGUKKy4uLgorMTAwNjQ0IDI1MTFhZWY4ZDg5YWI1MmJlNWVjNmE1ZTQ2MjM2YjRiNmJjZDA3ZWEgMAl4ZGlmZi94dHlwZXMuaAorMTAwNjQ0IDJhZGU5N2IyNTc0YTlmNzdlN2FlNDAwMmE0ZTA3YTZhMzhlNDZkMDcgMAl4ZGlmZi94dXRpbHMuYworMTAwNjQ0IGQ1ZGU4MjkyZTA1ZTdjMzZjNGI2ODg1N2MxY2Y5ODU1ZTNkMmY3MGEgMAl4ZGlmZi94dXRpbHMuaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgaW4gb2xkZXIgZG9jdW1lbnRhdGlvbiB5b3UgbWF5IHNlZSB0aGUgaW5kZXggY2FsbGVkIHRoZQorImN1cnJlbnQgZGlyZWN0b3J5IGNhY2hlIiBvciBqdXN0IHRoZSAiY2FjaGUiLiAgSXQgaGFzIHRocmVlIGltcG9ydGFudAorcHJvcGVydGllczoKKworMS4gVGhlIGluZGV4IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIGdlbmVyYXRlIGEgc2luZ2xlCisodW5pcXVlbHkgZGV0ZXJtaW5lZCkgdHJlZSBvYmplY3QuCisrCitGb3IgZXhhbXBsZSwgcnVubmluZyBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZ2VuZXJhdGVzIHRoaXMgdHJlZSBvYmplY3QKK2Zyb20gdGhlIGluZGV4LCBzdG9yZXMgaXQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSwgYW5kIHVzZXMgaXQgYXMgdGhlCit0cmVlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldyBjb21taXQuCisKKzIuIFRoZSBpbmRleCBlbmFibGVzIGZhc3QgY29tcGFyaXNvbnMgYmV0d2VlbiB0aGUgdHJlZSBvYmplY3QgaXQgZGVmaW5lcworYW5kIHRoZSB3b3JraW5nIHRyZWUuCisrCitJdCBkb2VzIHRoaXMgYnkgc3RvcmluZyBzb21lIGFkZGl0aW9uYWwgZGF0YSBmb3IgZWFjaCBlbnRyeSAoc3VjaCBhcwordGhlIGxhc3QgbW9kaWZpZWQgdGltZSkuICBUaGlzIGRhdGEgaXMgbm90IGRpc3BsYXllZCBhYm92ZSwgYW5kIGlzIG5vdAorc3RvcmVkIGluIHRoZSBjcmVhdGVkIHRyZWUgb2JqZWN0LCBidXQgaXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lCitxdWlja2x5IHdoaWNoIGZpbGVzIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBkaWZmZXIgZnJvbSB3aGF0IHdhcworc3RvcmVkIGluIHRoZSBpbmRleCwgYW5kIHRodXMgc2F2ZSBnaXQgZnJvbSBoYXZpbmcgdG8gcmVhZCBhbGwgb2YgdGhlCitkYXRhIGZyb20gc3VjaCBmaWxlcyB0byBsb29rIGZvciBjaGFuZ2VzLgorCiszLiBJdCBjYW4gZWZmaWNpZW50bHkgcmVwcmVzZW50IGluZm9ybWF0aW9uIGFib3V0IG1lcmdlIGNvbmZsaWN0cworYmV0d2VlbiBkaWZmZXJlbnQgdHJlZSBvYmplY3RzLCBhbGxvd2luZyBlYWNoIHBhdGhuYW1lIHRvIGJlCithc3NvY2lhdGVkIHdpdGggc3VmZmljaWVudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJlZXMgaW52b2x2ZWQgdGhhdAoreW91IGNhbiBjcmVhdGUgYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiB0aGVtLgorKworV2Ugc2F3IGluIDw8Y29uZmxpY3QtcmVzb2x1dGlvbj4+IHRoYXQgZHVyaW5nIGEgbWVyZ2UgdGhlIGluZGV4IGNhbgorc3RvcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYSBzaW5nbGUgZmlsZSAoY2FsbGVkICJzdGFnZXMiKS4gIFRoZSB0aGlyZAorY29sdW1uIGluIHRoZSBsaW5rZ2l0OmdpdC1scy1maWxlc1sxXSBvdXRwdXQgYWJvdmUgaXMgdGhlIHN0YWdlCitudW1iZXIsIGFuZCB3aWxsIHRha2Ugb24gdmFsdWVzIG90aGVyIHRoYW4gMCBmb3IgZmlsZXMgd2l0aCBtZXJnZQorY29uZmxpY3RzLgorCitUaGUgaW5kZXggaXMgdGh1cyBhIHNvcnQgb2YgdGVtcG9yYXJ5IHN0YWdpbmcgYXJlYSwgd2hpY2ggaXMgZmlsbGVkIHdpdGgKK2EgdHJlZSB3aGljaCB5b3UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHdvcmtpbmcgb24uCisKK0lmIHlvdSBibG93IHRoZSBpbmRleCBhd2F5IGVudGlyZWx5LCB5b3UgZ2VuZXJhbGx5IGhhdmVuJ3QgbG9zdCBhbnkKK2luZm9ybWF0aW9uIGFzIGxvbmcgYXMgeW91IGhhdmUgdGhlIG5hbWUgb2YgdGhlIHRyZWUgdGhhdCBpdCBkZXNjcmliZWQuCisKK1tbc3VibW9kdWxlc11dCitTdWJtb2R1bGVzCis9PT09PT09PT09CisKK0xhcmdlIHByb2plY3RzIGFyZSBvZnRlbiBjb21wb3NlZCBvZiBzbWFsbGVyLCBzZWxmLWNvbnRhaW5lZCBtb2R1bGVzLiAgRm9yCitleGFtcGxlLCBhbiBlbWJlZGRlZCBMaW51eCBkaXN0cmlidXRpb24ncyBzb3VyY2UgdHJlZSB3b3VsZCBpbmNsdWRlIGV2ZXJ5CitwaWVjZSBvZiBzb2Z0d2FyZSBpbiB0aGUgZGlzdHJpYnV0aW9uIHdpdGggc29tZSBsb2NhbCBtb2RpZmljYXRpb25zOyBhIG1vdmllCitwbGF5ZXIgbWlnaHQgbmVlZCB0byBidWlsZCBhZ2FpbnN0IGEgc3BlY2lmaWMsIGtub3duLXdvcmtpbmcgdmVyc2lvbiBvZiBhCitkZWNvbXByZXNzaW9uIGxpYnJhcnk7IHNldmVyYWwgaW5kZXBlbmRlbnQgcHJvZ3JhbXMgbWlnaHQgYWxsIHNoYXJlIHRoZSBzYW1lCitidWlsZCBzY3JpcHRzLgorCitXaXRoIGNlbnRyYWxpemVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtcyB0aGlzIGlzIG9mdGVuIGFjY29tcGxpc2hlZCBieQoraW5jbHVkaW5nIGV2ZXJ5IG1vZHVsZSBpbiBvbmUgc2luZ2xlIHJlcG9zaXRvcnkuICBEZXZlbG9wZXJzIGNhbiBjaGVjayBvdXQKK2FsbCBtb2R1bGVzIG9yIG9ubHkgdGhlIG1vZHVsZXMgdGhleSBuZWVkIHRvIHdvcmsgd2l0aC4gIFRoZXkgY2FuIGV2ZW4gbW9kaWZ5CitmaWxlcyBhY3Jvc3Mgc2V2ZXJhbCBtb2R1bGVzIGluIGEgc2luZ2xlIGNvbW1pdCB3aGlsZSBtb3ZpbmcgdGhpbmdzIGFyb3VuZAorb3IgdXBkYXRpbmcgQVBJcyBhbmQgdHJhbnNsYXRpb25zLgorCitHaXQgZG9lcyBub3QgYWxsb3cgcGFydGlhbCBjaGVja291dHMsIHNvIGR1cGxpY2F0aW5nIHRoaXMgYXBwcm9hY2ggaW4gR2l0Cit3b3VsZCBmb3JjZSBkZXZlbG9wZXJzIHRvIGtlZXAgYSBsb2NhbCBjb3B5IG9mIG1vZHVsZXMgdGhleSBhcmUgbm90CitpbnRlcmVzdGVkIGluIHRvdWNoaW5nLiAgQ29tbWl0cyBpbiBhbiBlbm9ybW91cyBjaGVja291dCB3b3VsZCBiZSBzbG93ZXIKK3RoYW4geW91J2QgZXhwZWN0IGFzIEdpdCB3b3VsZCBoYXZlIHRvIHNjYW4gZXZlcnkgZGlyZWN0b3J5IGZvciBjaGFuZ2VzLgorSWYgbW9kdWxlcyBoYXZlIGEgbG90IG9mIGxvY2FsIGhpc3RvcnksIGNsb25lcyB3b3VsZCB0YWtlIGZvcmV2ZXIuCisKK09uIHRoZSBwbHVzIHNpZGUsIGRpc3RyaWJ1dGVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtcyBjYW4gbXVjaCBiZXR0ZXIKK2ludGVncmF0ZSB3aXRoIGV4dGVybmFsIHNvdXJjZXMuICBJbiBhIGNlbnRyYWxpemVkIG1vZGVsLCBhIHNpbmdsZSBhcmJpdHJhcnkKK3NuYXBzaG90IG9mIHRoZSBleHRlcm5hbCBwcm9qZWN0IGlzIGV4cG9ydGVkIGZyb20gaXRzIG93biByZXZpc2lvbiBjb250cm9sCithbmQgdGhlbiBpbXBvcnRlZCBpbnRvIHRoZSBsb2NhbCByZXZpc2lvbiBjb250cm9sIG9uIGEgdmVuZG9yIGJyYW5jaC4gIEFsbAordGhlIGhpc3RvcnkgaXMgaGlkZGVuLiAgV2l0aCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHlvdSBjYW4gY2xvbmUgdGhlCitlbnRpcmUgZXh0ZXJuYWwgaGlzdG9yeSBhbmQgbXVjaCBtb3JlIGVhc2lseSBmb2xsb3cgZGV2ZWxvcG1lbnQgYW5kIHJlLW1lcmdlCitsb2NhbCBjaGFuZ2VzLgorCitHaXQncyBzdWJtb2R1bGUgc3VwcG9ydCBhbGxvd3MgYSByZXBvc2l0b3J5IHRvIGNvbnRhaW4sIGFzIGEgc3ViZGlyZWN0b3J5LCBhCitjaGVja291dCBvZiBhbiBleHRlcm5hbCBwcm9qZWN0LiAgU3VibW9kdWxlcyBtYWludGFpbiB0aGVpciBvd24gaWRlbnRpdHk7Cit0aGUgc3VibW9kdWxlIHN1cHBvcnQganVzdCBzdG9yZXMgdGhlIHN1Ym1vZHVsZSByZXBvc2l0b3J5IGxvY2F0aW9uIGFuZAorY29tbWl0IElELCBzbyBvdGhlciBkZXZlbG9wZXJzIHdobyBjbG9uZSB0aGUgY29udGFpbmluZyBwcm9qZWN0CisoInN1cGVycHJvamVjdCIpIGNhbiBlYXNpbHkgY2xvbmUgYWxsIHRoZSBzdWJtb2R1bGVzIGF0IHRoZSBzYW1lIHJldmlzaW9uLgorUGFydGlhbCBjaGVja291dHMgb2YgdGhlIHN1cGVycHJvamVjdCBhcmUgcG9zc2libGU6IHlvdSBjYW4gdGVsbCBHaXQgdG8KK2Nsb25lIG5vbmUsIHNvbWUgb3IgYWxsIG9mIHRoZSBzdWJtb2R1bGVzLgorCitUaGUgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGNvbW1hbmQgaXMgYXZhaWxhYmxlIHNpbmNlIEdpdCAxLjUuMy4gIFVzZXJzCit3aXRoIEdpdCAxLjUuMiBjYW4gbG9vayB1cCB0aGUgc3VibW9kdWxlIGNvbW1pdHMgaW4gdGhlIHJlcG9zaXRvcnkgYW5kCittYW51YWxseSBjaGVjayB0aGVtIG91dDsgZWFybGllciB2ZXJzaW9ucyB3b24ndCByZWNvZ25pemUgdGhlIHN1Ym1vZHVsZXMgYXQKK2FsbC4KKworVG8gc2VlIGhvdyBzdWJtb2R1bGUgc3VwcG9ydCB3b3JrcywgY3JlYXRlIChmb3IgZXhhbXBsZSkgZm91ciBleGFtcGxlCityZXBvc2l0b3JpZXMgdGhhdCBjYW4gYmUgdXNlZCBsYXRlciBhcyBhIHN1Ym1vZHVsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBta2RpciB+L2dpdAorJCBjZCB+L2dpdAorJCBmb3IgaSBpbiBhIGIgYyBkCitkbworCW1rZGlyICRpCisJY2QgJGkKKwlnaXQgaW5pdAorCWVjaG8gIm1vZHVsZSAkaSIgPiAkaS50eHQKKwlnaXQgYWRkICRpLnR4dAorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0LCBzdWJtb2R1bGUgJGkiCisJY2QgLi4KK2RvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93IGNyZWF0ZSB0aGUgc3VwZXJwcm9qZWN0IGFuZCBhZGQgYWxsIHRoZSBzdWJtb2R1bGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG1rZGlyIHN1cGVyCiskIGNkIHN1cGVyCiskIGdpdCBpbml0CiskIGZvciBpIGluIGEgYiBjIGQKK2RvCisJZ2l0IHN1Ym1vZHVsZSBhZGQgfi9naXQvJGkgJGkKK2RvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URTogRG8gbm90IHVzZSBsb2NhbCBVUkxzIGhlcmUgaWYgeW91IHBsYW4gdG8gcHVibGlzaCB5b3VyIHN1cGVycHJvamVjdCEKKworU2VlIHdoYXQgZmlsZXMgYGdpdCBzdWJtb2R1bGVgIGNyZWF0ZWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbHMgLWEKKy4gIC4uICAuZ2l0ICAuZ2l0bW9kdWxlcyAgYSAgYiAgYyAgZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYGdpdCBzdWJtb2R1bGUgYWRkIDxyZXBvPiA8cGF0aD5gIGNvbW1hbmQgZG9lcyBhIGNvdXBsZSBvZiB0aGluZ3M6CisKKy0gSXQgY2xvbmVzIHRoZSBzdWJtb2R1bGUgZnJvbSA8cmVwbz4gdG8gdGhlIGdpdmVuIDxwYXRoPiB1bmRlciB0aGUKKyAgY3VycmVudCBkaXJlY3RvcnkgYW5kIGJ5IGRlZmF1bHQgY2hlY2tzIG91dCB0aGUgbWFzdGVyIGJyYW5jaC4KKy0gSXQgYWRkcyB0aGUgc3VibW9kdWxlJ3MgY2xvbmUgcGF0aCB0byB0aGUgbGlua2dpdDpnaXRtb2R1bGVzWzVdIGZpbGUgYW5kCisgIGFkZHMgdGhpcyBmaWxlIHRvIHRoZSBpbmRleCwgcmVhZHkgdG8gYmUgY29tbWl0dGVkLgorLSBJdCBhZGRzIHRoZSBzdWJtb2R1bGUncyBjdXJyZW50IGNvbW1pdCBJRCB0byB0aGUgaW5kZXgsIHJlYWR5IHRvIGJlCisgIGNvbW1pdHRlZC4KKworQ29tbWl0IHRoZSBzdXBlcnByb2plY3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtbSAiQWRkIHN1Ym1vZHVsZXMgYSwgYiwgYyBhbmQgZC4iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyBjbG9uZSB0aGUgc3VwZXJwcm9qZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNkIC4uCiskIGdpdCBjbG9uZSBzdXBlciBjbG9uZWQKKyQgY2QgY2xvbmVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzdWJtb2R1bGUgZGlyZWN0b3JpZXMgYXJlIHRoZXJlLCBidXQgdGhleSdyZSBlbXB0eToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBscyAtYSBhCisuICAuLgorJCBnaXQgc3VibW9kdWxlIHN0YXR1cworLWQyNjZiOTg3M2FkNTA0ODgxNjM0NTdmMDI1ZGI3Y2RkOTY4M2Q4OGIgYQorLWU4MWQ0NTdkYTE1MzA5YjRmZWY0MjQ5YWJhOWI1MDE4Nzk5OTY3MGQgYgorLWMxNTM2YTk3MmI5YWZmZWEwZjE2ZTA2ODBiYTg3MzMyZGMwNTkxNDYgYworLWQ5NjI0OWZmNWQ1N2RlNWRlMDkzZTZiYWZmOWUwYWFmYTUyNzZhNzQgZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOT1RFOiBUaGUgY29tbWl0IG9iamVjdCBuYW1lcyBzaG93biBhYm92ZSB3b3VsZCBiZSBkaWZmZXJlbnQgZm9yIHlvdSwgYnV0IHRoZXkKK3Nob3VsZCBtYXRjaCB0aGUgSEVBRCBjb21taXQgb2JqZWN0IG5hbWVzIG9mIHlvdXIgcmVwb3NpdG9yaWVzLiAgWW91IGNhbiBjaGVjaworaXQgYnkgcnVubmluZyBgZ2l0IGxzLXJlbW90ZSAuLi9hYC4KKworUHVsbGluZyBkb3duIHRoZSBzdWJtb2R1bGVzIGlzIGEgdHdvLXN0ZXAgcHJvY2Vzcy4gRmlyc3QgcnVuIGBnaXQgc3VibW9kdWxlCitpbml0YCB0byBhZGQgdGhlIHN1Ym1vZHVsZSByZXBvc2l0b3J5IFVSTHMgdG8gYC5naXQvY29uZmlnYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3VibW9kdWxlIGluaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93IHVzZSBgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgIHRvIGNsb25lIHRoZSByZXBvc2l0b3JpZXMgYW5kIGNoZWNrIG91dCB0aGUKK2NvbW1pdHMgc3BlY2lmaWVkIGluIHRoZSBzdXBlcnByb2plY3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUKKyQgY2QgYQorJCBscyAtYQorLiAgLi4gIC5naXQgIGEudHh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uZSBtYWpvciBkaWZmZXJlbmNlIGJldHdlZW4gYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCBhbmQgYGdpdCBzdWJtb2R1bGUgYWRkYCBpcwordGhhdCBgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgIGNoZWNrcyBvdXQgYSBzcGVjaWZpYyBjb21taXQsIHJhdGhlciB0aGFuIHRoZSB0aXAKK29mIGEgYnJhbmNoLiBJdCdzIGxpa2UgY2hlY2tpbmcgb3V0IGEgdGFnOiB0aGUgaGVhZCBpcyBkZXRhY2hlZCwgc28geW91J3JlIG5vdAord29ya2luZyBvbiBhIGJyYW5jaC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoCisqIChubyBicmFuY2gpCisgIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBtYWtlIGEgY2hhbmdlIHdpdGhpbiBhIHN1Ym1vZHVsZSBhbmQgeW91IGhhdmUgYSBkZXRhY2hlZCBoZWFkLAordGhlbiB5b3Ugc2hvdWxkIGNyZWF0ZSBvciBjaGVja291dCBhIGJyYW5jaCwgbWFrZSB5b3VyIGNoYW5nZXMsIHB1Ymxpc2ggdGhlCitjaGFuZ2Ugd2l0aGluIHRoZSBzdWJtb2R1bGUsIGFuZCB0aGVuIHVwZGF0ZSB0aGUgc3VwZXJwcm9qZWN0IHRvIHJlZmVyZW5jZSB0aGUKK25ldyBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvcgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiBmaXgtdXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGhlbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gImFkZGluZyBhIGxpbmUgYWdhaW4iID4+IGEudHh0CiskIGdpdCBjb21taXQgLWEgLW0gIlVwZGF0ZWQgdGhlIHN1Ym1vZHVsZSBmcm9tIHdpdGhpbiB0aGUgc3VwZXJwcm9qZWN0LiIKKyQgZ2l0IHB1c2gKKyQgY2QgLi4KKyQgZ2l0IGRpZmYKK2RpZmYgLS1naXQgYS9hIGIvYQoraW5kZXggZDI2NmI5OC4uMjYxZGZhYyAxNjAwMDAKKy0tLSBhL2EKKysrKyBiL2EKK0BAIC0xICsxIEBACistU3VicHJvamVjdCBjb21taXQgZDI2NmI5ODczYWQ1MDQ4ODE2MzQ1N2YwMjVkYjdjZGQ5NjgzZDg4YgorK1N1YnByb2plY3QgY29tbWl0IDI2MWRmYWMzNWNiOTlkMzgwZWI5NjZlMTAyYzExOTcxMzlmN2ZhMjQKKyQgZ2l0IGFkZCBhCiskIGdpdCBjb21taXQgLW0gIlVwZGF0ZWQgc3VibW9kdWxlIGEuIgorJCBnaXQgcHVzaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgaGF2ZSB0byBydW4gYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCBhZnRlciBgZ2l0IHB1bGxgIGlmIHlvdSB3YW50IHRvIHVwZGF0ZQorc3VibW9kdWxlcywgdG9vLgorCitQaXRmYWxscyB3aXRoIHN1Ym1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbHdheXMgcHVibGlzaCB0aGUgc3VibW9kdWxlIGNoYW5nZSBiZWZvcmUgcHVibGlzaGluZyB0aGUgY2hhbmdlIHRvIHRoZQorc3VwZXJwcm9qZWN0IHRoYXQgcmVmZXJlbmNlcyBpdC4gSWYgeW91IGZvcmdldCB0byBwdWJsaXNoIHRoZSBzdWJtb2R1bGUgY2hhbmdlLAorb3RoZXJzIHdvbid0IGJlIGFibGUgdG8gY2xvbmUgdGhlIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2Qgfi9naXQvc3VwZXIvYQorJCBlY2hvIGkgYWRkZWQgYW5vdGhlciBsaW5lIHRvIHRoaXMgZmlsZSA+PiBhLnR4dAorJCBnaXQgY29tbWl0IC1hIC1tICJkb2luZyBpdCB3cm9uZyB0aGlzIHRpbWUiCiskIGNkIC4uCiskIGdpdCBhZGQgYQorJCBnaXQgY29tbWl0IC1tICJVcGRhdGVkIHN1Ym1vZHVsZSBhIGFnYWluLiIKKyQgZ2l0IHB1c2gKKyQgY2Qgfi9naXQvY2xvbmVkCiskIGdpdCBwdWxsCiskIGdpdCBzdWJtb2R1bGUgdXBkYXRlCitlcnJvcjogcGF0aHNwZWMgJzI2MWRmYWMzNWNiOTlkMzgwZWI5NjZlMTAyYzExOTcxMzlmN2ZhMjQnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0LgorRGlkIHlvdSBmb3JnZXQgdG8gJ2dpdCBhZGQnPworVW5hYmxlIHRvIGNoZWNrb3V0ICcyNjFkZmFjMzVjYjk5ZDM4MGViOTY2ZTEwMmMxMTk3MTM5ZjdmYTI0JyBpbiBzdWJtb2R1bGUgcGF0aCAnYScKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gb2xkZXIgZ2l0IHZlcnNpb25zIGl0IGNvdWxkIGJlIGVhc2lseSBmb3Jnb3R0ZW4gdG8gY29tbWl0IG5ldyBvciBtb2RpZmllZAorZmlsZXMgaW4gYSBzdWJtb2R1bGUsIHdoaWNoIHNpbGVudGx5IGxlYWRzIHRvIHNpbWlsYXIgcHJvYmxlbXMgYXMgbm90IHB1c2hpbmcKK3RoZSBzdWJtb2R1bGUgY2hhbmdlcy4gU3RhcnRpbmcgd2l0aCBnaXQgMS43LjAgYm90aCAiZ2l0IHN0YXR1cyIgYW5kICJnaXQgZGlmZiIKK2luIHRoZSBzdXBlcnByb2plY3Qgc2hvdyBzdWJtb2R1bGVzIGFzIG1vZGlmaWVkIHdoZW4gdGhleSBjb250YWluIG5ldyBvcgorbW9kaWZpZWQgZmlsZXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGFjY2lkZW50YWxseSBjb21taXR0aW5nIHN1Y2ggYSBzdGF0ZS4gImdpdAorZGlmZiIgd2lsbCBhbHNvIGFkZCBhICItZGlydHkiIHRvIHRoZSB3b3JrIHRyZWUgc2lkZSB3aGVuIGdlbmVyYXRpbmcgcGF0Y2gKK291dHB1dCBvciB1c2VkIHdpdGggdGhlIC0tc3VibW9kdWxlIG9wdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorZGlmZiAtLWdpdCBhL3N1YiBiL3N1YgorLS0tIGEvc3ViCisrKysgYi9zdWIKK0BAIC0xICsxIEBACistU3VicHJvamVjdCBjb21taXQgM2YzNTY3MDU2NDliNWQ1NjZkOTdmZjg0M2NmMTkzMzU5MjI5YTQ1MworK1N1YnByb2plY3QgY29tbWl0IDNmMzU2NzA1NjQ5YjVkNTY2ZDk3ZmY4NDNjZjE5MzM1OTIyOWE0NTMtZGlydHkKKyQgZ2l0IGRpZmYgLS1zdWJtb2R1bGUKK1N1Ym1vZHVsZSBzdWIgM2YzNTY3MC4uM2YzNTY3MC1kaXJ0eToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGFsc28gc2hvdWxkIG5vdCByZXdpbmQgYnJhbmNoZXMgaW4gYSBzdWJtb2R1bGUgYmV5b25kIGNvbW1pdHMgdGhhdCB3ZXJlCitldmVyIHJlY29yZGVkIGluIGFueSBzdXBlcnByb2plY3QuCisKK0l0J3Mgbm90IHNhZmUgdG8gcnVuIGBnaXQgc3VibW9kdWxlIHVwZGF0ZWAgaWYgeW91J3ZlIG1hZGUgYW5kIGNvbW1pdHRlZAorY2hhbmdlcyB3aXRoaW4gYSBzdWJtb2R1bGUgd2l0aG91dCBjaGVja2luZyBvdXQgYSBicmFuY2ggZmlyc3QuIFRoZXkgd2lsbCBiZQorc2lsZW50bHkgb3ZlcndyaXR0ZW46CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2F0IGEudHh0Cittb2R1bGUgYQorJCBlY2hvIGxpbmUgYWRkZWQgZnJvbSBwcml2YXRlMiA+PiBhLnR4dAorJCBnaXQgY29tbWl0IC1hIC1tICJsaW5lIGFkZGVkIGluc2lkZSBwcml2YXRlMiIKKyQgY2QgLi4KKyQgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUKK1N1Ym1vZHVsZSBwYXRoICdhJzogY2hlY2tlZCBvdXQgJ2QyNjZiOTg3M2FkNTA0ODgxNjM0NTdmMDI1ZGI3Y2RkOTY4M2Q4OGInCiskIGNkIGEKKyQgY2F0IGEudHh0Cittb2R1bGUgYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOT1RFOiBUaGUgY2hhbmdlcyBhcmUgc3RpbGwgdmlzaWJsZSBpbiB0aGUgc3VibW9kdWxlJ3MgcmVmbG9nLgorCitUaGlzIGlzIG5vdCB0aGUgY2FzZSBpZiB5b3UgZGlkIG5vdCBjb21taXQgeW91ciBjaGFuZ2VzLgorCitbW2xvdy1sZXZlbC1vcGVyYXRpb25zXV0KK0xvdy1sZXZlbCBnaXQgb3BlcmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09CisKK01hbnkgb2YgdGhlIGhpZ2hlci1sZXZlbCBjb21tYW5kcyB3ZXJlIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgYXMgc2hlbGwKK3NjcmlwdHMgdXNpbmcgYSBzbWFsbGVyIGNvcmUgb2YgbG93LWxldmVsIGdpdCBjb21tYW5kcy4gIFRoZXNlIGNhbiBzdGlsbAorYmUgdXNlZnVsIHdoZW4gZG9pbmcgdW51c3VhbCB0aGluZ3Mgd2l0aCBnaXQsIG9yIGp1c3QgYXMgYSB3YXkgdG8KK3VuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLgorCitbW29iamVjdC1tYW5pcHVsYXRpb25dXQorT2JqZWN0IGFjY2VzcyBhbmQgbWFuaXB1bGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxpbmtnaXQ6Z2l0LWNhdC1maWxlWzFdIGNvbW1hbmQgY2FuIHNob3cgdGhlIGNvbnRlbnRzIG9mIGFueSBvYmplY3QsCit0aG91Z2ggdGhlIGhpZ2hlci1sZXZlbCBsaW5rZ2l0OmdpdC1zaG93WzFdIGlzIHVzdWFsbHkgbW9yZSB1c2VmdWwuCisKK1RoZSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXSBjb21tYW5kIGFsbG93cyBjb25zdHJ1Y3RpbmcgY29tbWl0cyB3aXRoCithcmJpdHJhcnkgcGFyZW50cyBhbmQgdHJlZXMuCisKK0EgdHJlZSBjYW4gYmUgY3JlYXRlZCB3aXRoIGxpbmtnaXQ6Z2l0LXdyaXRlLXRyZWVbMV0gYW5kIGl0cyBkYXRhIGNhbiBiZQorYWNjZXNzZWQgYnkgbGlua2dpdDpnaXQtbHMtdHJlZVsxXS4gIFR3byB0cmVlcyBjYW4gYmUgY29tcGFyZWQgd2l0aAorbGlua2dpdDpnaXQtZGlmZi10cmVlWzFdLgorCitBIHRhZyBpcyBjcmVhdGVkIHdpdGggbGlua2dpdDpnaXQtbWt0YWdbMV0sIGFuZCB0aGUgc2lnbmF0dXJlIGNhbiBiZQordmVyaWZpZWQgYnkgbGlua2dpdDpnaXQtdmVyaWZ5LXRhZ1sxXSwgdGhvdWdoIGl0IGlzIG5vcm1hbGx5IHNpbXBsZXIgdG8KK3VzZSBsaW5rZ2l0OmdpdC10YWdbMV0gZm9yIGJvdGguCisKK1tbdGhlLXdvcmtmbG93XV0KK1RoZSBXb3JrZmxvdworLS0tLS0tLS0tLS0tCisKK0hpZ2gtbGV2ZWwgb3BlcmF0aW9ucyBzdWNoIGFzIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwKK2xpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIGFuZCBsaW5rZ2l0OmdpdC1yZXNldFsxXSB3b3JrIGJ5IG1vdmluZyBkYXRhCitiZXR3ZWVuIHRoZSB3b3JraW5nIHRyZWUsIHRoZSBpbmRleCwgYW5kIHRoZSBvYmplY3QgZGF0YWJhc2UuICBHaXQKK3Byb3ZpZGVzIGxvdy1sZXZlbCBvcGVyYXRpb25zIHdoaWNoIHBlcmZvcm0gZWFjaCBvZiB0aGVzZSBzdGVwcworaW5kaXZpZHVhbGx5LgorCitHZW5lcmFsbHksIGFsbCAiZ2l0IiBvcGVyYXRpb25zIHdvcmsgb24gdGhlIGluZGV4IGZpbGUuIFNvbWUgb3BlcmF0aW9ucword29yayAqcHVyZWx5KiBvbiB0aGUgaW5kZXggZmlsZSAoc2hvd2luZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKK2luZGV4KSwgYnV0IG1vc3Qgb3BlcmF0aW9ucyBtb3ZlIGRhdGEgYmV0d2VlbiB0aGUgaW5kZXggZmlsZSBhbmQgZWl0aGVyCit0aGUgZGF0YWJhc2Ugb3IgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiBUaHVzIHRoZXJlIGFyZSBmb3VyIG1haW4KK2NvbWJpbmF0aW9uczoKKworW1t3b3JraW5nLWRpcmVjdG9yeS10by1pbmRleF1dCit3b3JraW5nIGRpcmVjdG9yeSAtPiBpbmRleAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXSBjb21tYW5kIHVwZGF0ZXMgdGhlIGluZGV4IHdpdGgKK2luZm9ybWF0aW9uIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiAgWW91IGdlbmVyYWxseSB1cGRhdGUgdGhlCitpbmRleCBpbmZvcm1hdGlvbiBieSBqdXN0IHNwZWNpZnlpbmcgdGhlIGZpbGVuYW1lIHlvdSB3YW50IHRvIHVwZGF0ZSwKK2xpa2Ugc286CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCBmaWxlbmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitidXQgdG8gYXZvaWQgY29tbW9uIG1pc3Rha2VzIHdpdGggZmlsZW5hbWUgZ2xvYmJpbmcgZXRjLCB0aGUgY29tbWFuZAord2lsbCBub3Qgbm9ybWFsbHkgYWRkIHRvdGFsbHkgbmV3IGVudHJpZXMgb3IgcmVtb3ZlIG9sZCBlbnRyaWVzLAoraS5lLiBpdCB3aWxsIG5vcm1hbGx5IGp1c3QgdXBkYXRlIGV4aXN0aW5nIGNhY2hlIGVudHJpZXMuCisKK1RvIHRlbGwgZ2l0IHRoYXQgeWVzLCB5b3UgcmVhbGx5IGRvIHJlYWxpemUgdGhhdCBjZXJ0YWluIGZpbGVzIG5vCitsb25nZXIgZXhpc3QsIG9yIHRoYXQgbmV3IGZpbGVzIHNob3VsZCBiZSBhZGRlZCwgeW91CitzaG91bGQgdXNlIHRoZSBgLS1yZW1vdmVgIGFuZCBgLS1hZGRgIGZsYWdzIHJlc3BlY3RpdmVseS4KKworTk9URSEgQSBgLS1yZW1vdmVgIGZsYWcgZG9lcyAnbm90JyBtZWFuIHRoYXQgc3Vic2VxdWVudCBmaWxlbmFtZXMgd2lsbAorbmVjZXNzYXJpbHkgYmUgcmVtb3ZlZDogaWYgdGhlIGZpbGVzIHN0aWxsIGV4aXN0IGluIHlvdXIgZGlyZWN0b3J5CitzdHJ1Y3R1cmUsIHRoZSBpbmRleCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGVpciBuZXcgc3RhdHVzLCBub3QKK3JlbW92ZWQuIFRoZSBvbmx5IHRoaW5nIGAtLXJlbW92ZWAgbWVhbnMgaXMgdGhhdCB1cGRhdGUtaW5kZXggd2lsbCBiZQorY29uc2lkZXJpbmcgYSByZW1vdmVkIGZpbGUgdG8gYmUgYSB2YWxpZCB0aGluZywgYW5kIGlmIHRoZSBmaWxlIHJlYWxseQorZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIGl0IHdpbGwgdXBkYXRlIHRoZSBpbmRleCBhY2NvcmRpbmdseS4KKworQXMgYSBzcGVjaWFsIGNhc2UsIHlvdSBjYW4gYWxzbyBkbyBgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2hgLCB3aGljaAord2lsbCByZWZyZXNoIHRoZSAic3RhdCIgaW5mb3JtYXRpb24gb2YgZWFjaCBpbmRleCB0byBtYXRjaCB0aGUgY3VycmVudAorc3RhdCBpbmZvcm1hdGlvbi4gSXQgd2lsbCAnbm90JyB1cGRhdGUgdGhlIG9iamVjdCBzdGF0dXMgaXRzZWxmLCBhbmQKK2l0IHdpbGwgb25seSB1cGRhdGUgdGhlIGZpZWxkcyB0aGF0IGFyZSB1c2VkIHRvIHF1aWNrbHkgdGVzdCB3aGV0aGVyCithbiBvYmplY3Qgc3RpbGwgbWF0Y2hlcyBpdHMgb2xkIGJhY2tpbmcgc3RvcmUgb2JqZWN0LgorCitUaGUgcHJldmlvdXNseSBpbnRyb2R1Y2VkIGxpbmtnaXQ6Z2l0LWFkZFsxXSBpcyBqdXN0IGEgd3JhcHBlciBmb3IKK2xpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4KKworW1tpbmRleC10by1vYmplY3QtZGF0YWJhc2VdXQoraW5kZXggLT4gb2JqZWN0IGRhdGFiYXNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IHdyaXRlIHlvdXIgY3VycmVudCBpbmRleCBmaWxlIHRvIGEgInRyZWUiIG9iamVjdCB3aXRoIHRoZSBwcm9ncmFtCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHdyaXRlLXRyZWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGhhdCBkb2Vzbid0IGNvbWUgd2l0aCBhbnkgb3B0aW9ucy0taXQgd2lsbCBqdXN0IHdyaXRlIG91dCB0aGUKK2N1cnJlbnQgaW5kZXggaW50byB0aGUgc2V0IG9mIHRyZWUgb2JqZWN0cyB0aGF0IGRlc2NyaWJlIHRoYXQgc3RhdGUsCithbmQgaXQgd2lsbCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyB0b3AtbGV2ZWwgdHJlZS4gWW91IGNhbgordXNlIHRoYXQgdHJlZSB0byByZS1nZW5lcmF0ZSB0aGUgaW5kZXggYXQgYW55IHRpbWUgYnkgZ29pbmcgaW4gdGhlCitvdGhlciBkaXJlY3Rpb246CisKK1tbb2JqZWN0LWRhdGFiYXNlLXRvLWluZGV4XV0KK29iamVjdCBkYXRhYmFzZSAtPiBpbmRleAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSByZWFkIGEgInRyZWUiIGZpbGUgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlLCBhbmQgdXNlIHRoYXQgdG8KK3BvcHVsYXRlIChhbmQgb3ZlcndyaXRlLS1kb24ndCBkbyB0aGlzIGlmIHlvdXIgaW5kZXggY29udGFpbnMgYW55Cit1bnNhdmVkIHN0YXRlIHRoYXQgeW91IG1pZ2h0IHdhbnQgdG8gcmVzdG9yZSBsYXRlciEpIHlvdXIgY3VycmVudAoraW5kZXguICBOb3JtYWwgb3BlcmF0aW9uIGlzIGp1c3QKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIDxTSEEtMSBvZiB0cmVlPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgeW91ciBpbmRleCBmaWxlIHdpbGwgbm93IGJlIGVxdWl2YWxlbnQgdG8gdGhlIHRyZWUgdGhhdCB5b3Ugc2F2ZWQKK2VhcmxpZXIuIEhvd2V2ZXIsIHRoYXQgaXMgb25seSB5b3VyICdpbmRleCcgZmlsZTogeW91ciB3b3JraW5nCitkaXJlY3RvcnkgY29udGVudHMgaGF2ZSBub3QgYmVlbiBtb2RpZmllZC4KKworW1tpbmRleC10by13b3JraW5nLWRpcmVjdG9yeV1dCitpbmRleCAtPiB3b3JraW5nIGRpcmVjdG9yeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IHVwZGF0ZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGZyb20gdGhlIGluZGV4IGJ5ICJjaGVja2luZyBvdXQiCitmaWxlcy4gVGhpcyBpcyBub3QgYSB2ZXJ5IGNvbW1vbiBvcGVyYXRpb24sIHNpbmNlIG5vcm1hbGx5IHlvdSdkIGp1c3QKK2tlZXAgeW91ciBmaWxlcyB1cGRhdGVkLCBhbmQgcmF0aGVyIHRoYW4gd3JpdGUgdG8geW91ciB3b3JraW5nCitkaXJlY3RvcnksIHlvdSdkIHRlbGwgdGhlIGluZGV4IGZpbGVzIGFib3V0IHRoZSBjaGFuZ2VzIGluIHlvdXIKK3dvcmtpbmcgZGlyZWN0b3J5IChpLmUuIGBnaXQgdXBkYXRlLWluZGV4YCkuCisKK0hvd2V2ZXIsIGlmIHlvdSBkZWNpZGUgdG8ganVtcCB0byBhIG5ldyB2ZXJzaW9uLCBvciBjaGVjayBvdXQgc29tZWJvZHkKK2Vsc2UncyB2ZXJzaW9uLCBvciBqdXN0IHJlc3RvcmUgYSBwcmV2aW91cyB0cmVlLCB5b3UnZCBwb3B1bGF0ZSB5b3VyCitpbmRleCBmaWxlIHdpdGggcmVhZC10cmVlLCBhbmQgdGhlbiB5b3UgbmVlZCB0byBjaGVjayBvdXQgdGhlIHJlc3VsdAord2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dC1pbmRleCBmaWxlbmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciwgaWYgeW91IHdhbnQgdG8gY2hlY2sgb3V0IGFsbCBvZiB0aGUgaW5kZXgsIHVzZSBgLWFgLgorCitOT1RFISBgZ2l0IGNoZWNrb3V0LWluZGV4YCBub3JtYWxseSByZWZ1c2VzIHRvIG92ZXJ3cml0ZSBvbGQgZmlsZXMsIHNvCitpZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBvZiB0aGUgdHJlZSBhbHJlYWR5IGNoZWNrZWQgb3V0LCB5b3Ugd2lsbAorbmVlZCB0byB1c2UgdGhlICItZiIgZmxhZyAoJ2JlZm9yZScgdGhlICItYSIgZmxhZyBvciB0aGUgZmlsZW5hbWUpIHRvCisnZm9yY2UnIHRoZSBjaGVja291dC4KKworCitGaW5hbGx5LCB0aGVyZSBhcmUgYSBmZXcgb2RkcyBhbmQgZW5kcyB3aGljaCBhcmUgbm90IHB1cmVseSBtb3ZpbmcKK2Zyb20gb25lIHJlcHJlc2VudGF0aW9uIHRvIHRoZSBvdGhlcjoKKworW1t0eWluZy1pdC1hbGwtdG9nZXRoZXJdXQorVHlpbmcgaXQgYWxsIHRvZ2V0aGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVG8gY29tbWl0IGEgdHJlZSB5b3UgaGF2ZSBpbnN0YW50aWF0ZWQgd2l0aCAiZ2l0IHdyaXRlLXRyZWUiLCB5b3UnZAorY3JlYXRlIGEgImNvbW1pdCIgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIHRoYXQgdHJlZSBhbmQgdGhlIGhpc3RvcnkKK2JlaGluZCBpdC0tbW9zdCBub3RhYmx5IHRoZSAicGFyZW50IiBjb21taXRzIHRoYXQgcHJlY2VkZWQgaXQgaW4KK2hpc3RvcnkuCisKK05vcm1hbGx5IGEgImNvbW1pdCIgaGFzIG9uZSBwYXJlbnQ6IHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgdHJlZQorYmVmb3JlIGEgY2VydGFpbiBjaGFuZ2Ugd2FzIG1hZGUuIEhvd2V2ZXIsIHNvbWV0aW1lcyBpdCBjYW4gaGF2ZSB0d28KK29yIG1vcmUgcGFyZW50IGNvbW1pdHMsIGluIHdoaWNoIGNhc2Ugd2UgY2FsbCBpdCBhICJtZXJnZSIsIGR1ZSB0byB0aGUKK2ZhY3QgdGhhdCBzdWNoIGEgY29tbWl0IGJyaW5ncyB0b2dldGhlciAoIm1lcmdlcyIpIHR3byBvciBtb3JlCitwcmV2aW91cyBzdGF0ZXMgcmVwcmVzZW50ZWQgYnkgb3RoZXIgY29tbWl0cy4KKworSW4gb3RoZXIgd29yZHMsIHdoaWxlIGEgInRyZWUiIHJlcHJlc2VudHMgYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSBzdGF0ZQorb2YgYSB3b3JraW5nIGRpcmVjdG9yeSwgYSAiY29tbWl0IiByZXByZXNlbnRzIHRoYXQgc3RhdGUgaW4gInRpbWUiLAorYW5kIGV4cGxhaW5zIGhvdyB3ZSBnb3QgdGhlcmUuCisKK1lvdSBjcmVhdGUgYSBjb21taXQgb2JqZWN0IGJ5IGdpdmluZyBpdCB0aGUgdHJlZSB0aGF0IGRlc2NyaWJlcyB0aGUKK3N0YXRlIGF0IHRoZSB0aW1lIG9mIHRoZSBjb21taXQsIGFuZCBhIGxpc3Qgb2YgcGFyZW50czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0LXRyZWUgPHRyZWU+IC1wIDxwYXJlbnQ+IFsoLXAgPHBhcmVudDI+KS4uLl0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoZW4gZ2l2aW5nIHRoZSByZWFzb24gZm9yIHRoZSBjb21taXQgb24gc3RkaW4gKGVpdGhlciB0aHJvdWdoCityZWRpcmVjdGlvbiBmcm9tIGEgcGlwZSBvciBmaWxlLCBvciBieSBqdXN0IHR5cGluZyBpdCBhdCB0aGUgdHR5KS4KKworYGdpdCBjb21taXQtdHJlZWAgd2lsbCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMKK3RoYXQgY29tbWl0LCBhbmQgeW91IHNob3VsZCBzYXZlIGl0IGF3YXkgZm9yIGxhdGVyIHVzZS4gTm9ybWFsbHksCit5b3UnZCBjb21taXQgYSBuZXcgYEhFQURgIHN0YXRlLCBhbmQgd2hpbGUgZ2l0IGRvZXNuJ3QgY2FyZSB3aGVyZSB5b3UKK3NhdmUgdGhlIG5vdGUgYWJvdXQgdGhhdCBzdGF0ZSwgaW4gcHJhY3RpY2Ugd2UgdGVuZCB0byBqdXN0IHdyaXRlIHRoZQorcmVzdWx0IHRvIHRoZSBmaWxlIHBvaW50ZWQgYXQgYnkgYC5naXQvSEVBRGAsIHNvIHRoYXQgd2UgY2FuIGFsd2F5cyBzZWUKK3doYXQgdGhlIGxhc3QgY29tbWl0dGVkIHN0YXRlIHdhcy4KKworSGVyZSBpcyBhbiBBU0NJSSBhcnQgYnkgSm9uIExvZWxpZ2VyIHRoYXQgaWxsdXN0cmF0ZXMgaG93Cit2YXJpb3VzIHBpZWNlcyBmaXQgdG9nZXRoZXIuCisKKy0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgICAgICAgICBjb21taXQtdHJlZQorICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCBvYmoKKyAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgViAgICBWCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgfCBPYmplY3QgREIgfAorICAgICAgICAgICAgICAgICAgICB8ICBCYWNraW5nICB8CisgICAgICAgICAgICAgICAgICAgIHwgICBTdG9yZSAgIHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgICAgICAgIHdyaXRlLXRyZWUgIHwgICAgIHwKKyAgICAgICAgICAgICB0cmVlIG9iaiAgfCAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICByZWFkLXRyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgdHJlZSBvYmoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVgorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgICBJbmRleCAgIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgImNhY2hlIiAgfAorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICB1cGRhdGUtaW5kZXggIF4KKyAgICAgICAgICAgICBibG9iIG9iaiAgfCAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8CisgICAgY2hlY2tvdXQtaW5kZXggLXUgIHwgICAgIHwgIGNoZWNrb3V0LWluZGV4CisgICAgICAgICAgICAgc3RhdCAgICAgIHwgICAgIHwgIGJsb2Igb2JqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICB8ICBXb3JraW5nICB8CisgICAgICAgICAgICAgICAgICAgIHwgRGlyZWN0b3J5IHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworCistLS0tLS0tLS0tLS0KKworCitbW2V4YW1pbmluZy10aGUtZGF0YV1dCitFeGFtaW5pbmcgdGhlIGRhdGEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGV4YW1pbmUgdGhlIGRhdGEgcmVwcmVzZW50ZWQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSBhbmQgdGhlCitpbmRleCB3aXRoIHZhcmlvdXMgaGVscGVyIHRvb2xzLiBGb3IgZXZlcnkgb2JqZWN0LCB5b3UgY2FuIHVzZQorbGlua2dpdDpnaXQtY2F0LWZpbGVbMV0gdG8gZXhhbWluZSBkZXRhaWxzIGFib3V0IHRoZQorb2JqZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSAtdCA8b2JqZWN0bmFtZT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2hvd3MgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCwgYW5kIG9uY2UgeW91IGhhdmUgdGhlIHR5cGUgKHdoaWNoIGlzCit1c3VhbGx5IGltcGxpY2l0IGluIHdoZXJlIHlvdSBmaW5kIHRoZSBvYmplY3QpLCB5b3UgY2FuIHVzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBibG9ifHRyZWV8Y29tbWl0fHRhZyA8b2JqZWN0bmFtZT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gc2hvdyBpdHMgY29udGVudHMuIE5PVEUhIFRyZWVzIGhhdmUgYmluYXJ5IGNvbnRlbnQsIGFuZCBhcyBhIHJlc3VsdAordGhlcmUgaXMgYSBzcGVjaWFsIGhlbHBlciBmb3Igc2hvd2luZyB0aGF0IGNvbnRlbnQsIGNhbGxlZAorYGdpdCBscy10cmVlYCwgd2hpY2ggdHVybnMgdGhlIGJpbmFyeSBjb250ZW50IGludG8gYSBtb3JlIGVhc2lseQorcmVhZGFibGUgZm9ybS4KKworSXQncyBlc3BlY2lhbGx5IGluc3RydWN0aXZlIHRvIGxvb2sgYXQgImNvbW1pdCIgb2JqZWN0cywgc2luY2UgdGhvc2UKK3RlbmQgdG8gYmUgc21hbGwgYW5kIGZhaXJseSBzZWxmLWV4cGxhbmF0b3J5LiBJbiBwYXJ0aWN1bGFyLCBpZiB5b3UKK2ZvbGxvdyB0aGUgY29udmVudGlvbiBvZiBoYXZpbmcgdGhlIHRvcCBjb21taXQgbmFtZSBpbiBgLmdpdC9IRUFEYCwKK3lvdSBjYW4gZG8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gc2VlIHdoYXQgdGhlIHRvcCBjb21taXQgd2FzLgorCitbW21lcmdpbmctbXVsdGlwbGUtdHJlZXNdXQorTWVyZ2luZyBtdWx0aXBsZSB0cmVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgaGVscHMgeW91IGRvIGEgdGhyZWUtd2F5IG1lcmdlLCB3aGljaCB5b3UgY2FuIGV4cGFuZCB0byBuLXdheSBieQorcmVwZWF0aW5nIHRoZSBtZXJnZSBwcm9jZWR1cmUgYXJiaXRyYXJ5IHRpbWVzIHVudGlsIHlvdSBmaW5hbGx5CisiY29tbWl0IiB0aGUgc3RhdGUuICBUaGUgbm9ybWFsIHNpdHVhdGlvbiBpcyB0aGF0IHlvdSdkIG9ubHkgZG8gb25lCit0aHJlZS13YXkgbWVyZ2UgKHR3byBwYXJlbnRzKSwgYW5kIGNvbW1pdCBpdCwgYnV0IGlmIHlvdSBsaWtlIHRvLCB5b3UKK2NhbiBkbyBtdWx0aXBsZSBwYXJlbnRzIGluIG9uZSBnby4KKworVG8gZG8gYSB0aHJlZS13YXkgbWVyZ2UsIHlvdSBuZWVkIHRoZSB0d28gc2V0cyBvZiAiY29tbWl0IiBvYmplY3RzCit0aGF0IHlvdSB3YW50IHRvIG1lcmdlLCB1c2UgdGhvc2UgdG8gZmluZCB0aGUgY2xvc2VzdCBjb21tb24gcGFyZW50IChhCit0aGlyZCAiY29tbWl0IiBvYmplY3QpLCBhbmQgdGhlbiB1c2UgdGhvc2UgY29tbWl0IG9iamVjdHMgdG8gZmluZCB0aGUKK3N0YXRlIG9mIHRoZSBkaXJlY3RvcnkgKCJ0cmVlIiBvYmplY3QpIGF0IHRoZXNlIHBvaW50cy4KKworVG8gZ2V0IHRoZSAiYmFzZSIgZm9yIHRoZSBtZXJnZSwgeW91IGZpcnN0IGxvb2sgdXAgdGhlIGNvbW1vbiBwYXJlbnQKK29mIHR3byBjb21taXRzIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UtYmFzZSA8Y29tbWl0MT4gPGNvbW1pdDI+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgcmV0dXJuIHlvdSB0aGUgY29tbWl0IHRoZXkgYXJlIGJvdGggYmFzZWQgb24uICBZb3Ugc2hvdWxkCitub3cgbG9vayB1cCB0aGUgInRyZWUiIG9iamVjdHMgb2YgdGhvc2UgY29tbWl0cywgd2hpY2ggeW91IGNhbiBlYXNpbHkKK2RvIHdpdGggKGZvciBleGFtcGxlKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBjb21taXQgPGNvbW1pdG5hbWU+IHwgaGVhZCAtMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzaW5jZSB0aGUgdHJlZSBvYmplY3QgaW5mb3JtYXRpb24gaXMgYWx3YXlzIHRoZSBmaXJzdCBsaW5lIGluIGEgY29tbWl0CitvYmplY3QuCisKK09uY2UgeW91IGtub3cgdGhlIHRocmVlIHRyZWVzIHlvdSBhcmUgZ29pbmcgdG8gbWVyZ2UgKHRoZSBvbmUgIm9yaWdpbmFsIgordHJlZSwgYWthIHRoZSBjb21tb24gdHJlZSwgYW5kIHRoZSB0d28gInJlc3VsdCIgdHJlZXMsIGFrYSB0aGUgYnJhbmNoZXMKK3lvdSB3YW50IHRvIG1lcmdlKSwgeW91IGRvIGEgIm1lcmdlIiByZWFkIGludG8gdGhlIGluZGV4LiBUaGlzIHdpbGwKK2NvbXBsYWluIGlmIGl0IGhhcyB0byB0aHJvdyBhd2F5IHlvdXIgb2xkIGluZGV4IGNvbnRlbnRzLCBzbyB5b3Ugc2hvdWxkCittYWtlIHN1cmUgdGhhdCB5b3UndmUgY29tbWl0dGVkIHRob3NlLS1pbiBmYWN0IHlvdSB3b3VsZCBub3JtYWxseQorYWx3YXlzIGRvIGEgbWVyZ2UgYWdhaW5zdCB5b3VyIGxhc3QgY29tbWl0ICh3aGljaCBzaG91bGQgdGh1cyBtYXRjaCB3aGF0Cit5b3UgaGF2ZSBpbiB5b3VyIGN1cnJlbnQgaW5kZXggYW55d2F5KS4KKworVG8gZG8gdGhlIG1lcmdlLCBkbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWFkLXRyZWUgLW0gLXUgPG9yaWd0cmVlPiA8eW91cnRyZWU+IDx0YXJnZXR0cmVlPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIGRvIGFsbCB0cml2aWFsIG1lcmdlIG9wZXJhdGlvbnMgZm9yIHlvdSBkaXJlY3RseSBpbiB0aGUKK2luZGV4IGZpbGUsIGFuZCB5b3UgY2FuIGp1c3Qgd3JpdGUgdGhlIHJlc3VsdCBvdXQgd2l0aAorYGdpdCB3cml0ZS10cmVlYC4KKworCitbW21lcmdpbmctbXVsdGlwbGUtdHJlZXMtMl1dCitNZXJnaW5nIG11bHRpcGxlIHRyZWVzLCBjb250aW51ZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTYWRseSwgbWFueSBtZXJnZXMgYXJlbid0IHRyaXZpYWwuIElmIHRoZXJlIGFyZSBmaWxlcyB0aGF0IGhhdmUKK2JlZW4gYWRkZWQsIG1vdmVkIG9yIHJlbW92ZWQsIG9yIGlmIGJvdGggYnJhbmNoZXMgaGF2ZSBtb2RpZmllZCB0aGUKK3NhbWUgZmlsZSwgeW91IHdpbGwgYmUgbGVmdCB3aXRoIGFuIGluZGV4IHRyZWUgdGhhdCBjb250YWlucyAibWVyZ2UKK2VudHJpZXMiIGluIGl0LiBTdWNoIGFuIGluZGV4IHRyZWUgY2FuICdOT1QnIGJlIHdyaXR0ZW4gb3V0IHRvIGEgdHJlZQorb2JqZWN0LCBhbmQgeW91IHdpbGwgaGF2ZSB0byByZXNvbHZlIGFueSBzdWNoIG1lcmdlIGNsYXNoZXMgdXNpbmcKK290aGVyIHRvb2xzIGJlZm9yZSB5b3UgY2FuIHdyaXRlIG91dCB0aGUgcmVzdWx0LgorCitZb3UgY2FuIGV4YW1pbmUgc3VjaCBpbmRleCBzdGF0ZSB3aXRoIGBnaXQgbHMtZmlsZXMgLS11bm1lcmdlZGAKK2NvbW1hbmQuICBBbiBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYWQtdHJlZSAtbSAkb3JpZyBIRUFEICR0YXJnZXQKKyQgZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQKKzEwMDY0NCAyNjM0MTRmNDIzZDBlNGQ3MGRhZThmZTUzZmEzNDYxNGZmM2UyODYwIDEJaGVsbG8uYworMTAwNjQ0IDA2ZmE2YTI0MjU2ZGM3ZTU2MGVmYTU2ODdmYTg0YjUxZjAyNjNjM2EgMgloZWxsby5jCisxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFYWNoIGxpbmUgb2YgdGhlIGBnaXQgbHMtZmlsZXMgLS11bm1lcmdlZGAgb3V0cHV0IGJlZ2lucyB3aXRoCit0aGUgYmxvYiBtb2RlIGJpdHMsIGJsb2IgU0hBLTEsICdzdGFnZSBudW1iZXInLCBhbmQgdGhlCitmaWxlbmFtZS4gIFRoZSAnc3RhZ2UgbnVtYmVyJyBpcyBnaXQncyB3YXkgdG8gc2F5IHdoaWNoIHRyZWUgaXQKK2NhbWUgZnJvbTogc3RhZ2UgMSBjb3JyZXNwb25kcyB0byB0aGUgYCRvcmlnYCB0cmVlLCBzdGFnZSAyIHRvCit0aGUgYEhFQURgIHRyZWUsIGFuZCBzdGFnZSAzIHRvIHRoZSBgJHRhcmdldGAgdHJlZS4KKworRWFybGllciB3ZSBzYWlkIHRoYXQgdHJpdmlhbCBtZXJnZXMgYXJlIGRvbmUgaW5zaWRlCitgZ2l0IHJlYWQtdHJlZSAtbWAuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpbGUgZGlkIG5vdCBjaGFuZ2UKK2Zyb20gYCRvcmlnYCB0byBgSEVBRGAgbm9yIGAkdGFyZ2V0YCwgb3IgaWYgdGhlIGZpbGUgY2hhbmdlZAorZnJvbSBgJG9yaWdgIHRvIGBIRUFEYCBhbmQgYCRvcmlnYCB0byBgJHRhcmdldGAgdGhlIHNhbWUgd2F5LAorb2J2aW91c2x5IHRoZSBmaW5hbCBvdXRjb21lIGlzIHdoYXQgaXMgaW4gYEhFQURgLiAgV2hhdCB0aGUKK2Fib3ZlIGV4YW1wbGUgc2hvd3MgaXMgdGhhdCBmaWxlIGBoZWxsby5jYCB3YXMgY2hhbmdlZCBmcm9tCitgJG9yaWdgIHRvIGBIRUFEYCBhbmQgYCRvcmlnYCB0byBgJHRhcmdldGAgaW4gYSBkaWZmZXJlbnQgd2F5LgorWW91IGNvdWxkIHJlc29sdmUgdGhpcyBieSBydW5uaW5nIHlvdXIgZmF2b3JpdGUgMy13YXkgbWVyZ2UKK3Byb2dyYW0sIGUuZy4gIGBkaWZmM2AsIGBtZXJnZWAsIG9yIGdpdCdzIG93biBtZXJnZS1maWxlLCBvbgordGhlIGJsb2Igb2JqZWN0cyBmcm9tIHRoZXNlIHRocmVlIHN0YWdlcyB5b3Vyc2VsZiwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIGJsb2IgMjYzNDE0Zi4uLiA+aGVsbG8uY34xCiskIGdpdCBjYXQtZmlsZSBibG9iIDA2ZmE2YTIuLi4gPmhlbGxvLmN+MgorJCBnaXQgY2F0LWZpbGUgYmxvYiBjYzQ0YzczLi4uID5oZWxsby5jfjMKKyQgZ2l0IG1lcmdlLWZpbGUgaGVsbG8uY34yIGhlbGxvLmN+MSBoZWxsby5jfjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdvdWxkIGxlYXZlIHRoZSBtZXJnZSByZXN1bHQgaW4gYGhlbGxvLmN+MmAgZmlsZSwgYWxvbmcKK3dpdGggY29uZmxpY3QgbWFya2VycyBpZiB0aGVyZSBhcmUgY29uZmxpY3RzLiAgQWZ0ZXIgdmVyaWZ5aW5nCit0aGUgbWVyZ2UgcmVzdWx0IG1ha2VzIHNlbnNlLCB5b3UgY2FuIHRlbGwgZ2l0IHdoYXQgdGhlIGZpbmFsCittZXJnZSByZXN1bHQgZm9yIHRoaXMgZmlsZSBpcyBieToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBtdiAtZiBoZWxsby5jfjIgaGVsbG8uYworJCBnaXQgdXBkYXRlLWluZGV4IGhlbGxvLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBhIHBhdGggaXMgaW4gdGhlICJ1bm1lcmdlZCIgc3RhdGUsIHJ1bm5pbmcgYGdpdCB1cGRhdGUtaW5kZXhgIGZvcgordGhhdCBwYXRoIHRlbGxzIGdpdCB0byBtYXJrIHRoZSBwYXRoIHJlc29sdmVkLgorCitUaGUgYWJvdmUgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgZ2l0IG1lcmdlIGF0IHRoZSBsb3dlc3QgbGV2ZWwsCit0byBoZWxwIHlvdSB1bmRlcnN0YW5kIHdoYXQgY29uY2VwdHVhbGx5IGhhcHBlbnMgdW5kZXIgdGhlIGhvb2QuCitJbiBwcmFjdGljZSwgbm9ib2R5LCBub3QgZXZlbiBnaXQgaXRzZWxmLCBydW5zIGBnaXQgY2F0LWZpbGVgIHRocmVlIHRpbWVzCitmb3IgdGhpcy4gIFRoZXJlIGlzIGEgYGdpdCBtZXJnZS1pbmRleGAgcHJvZ3JhbSB0aGF0IGV4dHJhY3RzIHRoZQorc3RhZ2VzIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgY2FsbHMgYSAibWVyZ2UiIHNjcmlwdCBvbiBpdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIGhlbGxvLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoYXQgaXMgd2hhdCBoaWdoZXIgbGV2ZWwgYGdpdCBtZXJnZSAtcyByZXNvbHZlYCBpcyBpbXBsZW1lbnRlZCB3aXRoLgorCitbW2hhY2tpbmctZ2l0XV0KK0hhY2tpbmcgZ2l0Cis9PT09PT09PT09PQorCitUaGlzIGNoYXB0ZXIgY292ZXJzIGludGVybmFsIGRldGFpbHMgb2YgdGhlIGdpdCBpbXBsZW1lbnRhdGlvbiB3aGljaAorcHJvYmFibHkgb25seSBnaXQgZGV2ZWxvcGVycyBuZWVkIHRvIHVuZGVyc3RhbmQuCisKK1tbb2JqZWN0LWRldGFpbHNdXQorT2JqZWN0IHN0b3JhZ2UgZm9ybWF0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9iamVjdHMgaGF2ZSBhIHN0YXRpY2FsbHkgZGV0ZXJtaW5lZCAidHlwZSIgd2hpY2ggaWRlbnRpZmllcyB0aGUKK2Zvcm1hdCBvZiB0aGUgb2JqZWN0IChpLmUuIGhvdyBpdCBpcyB1c2VkLCBhbmQgaG93IGl0IGNhbiByZWZlciB0byBvdGhlcgorb2JqZWN0cykuICBUaGVyZSBhcmUgY3VycmVudGx5IGZvdXIgZGlmZmVyZW50IG9iamVjdCB0eXBlczogImJsb2IiLAorInRyZWUiLCAiY29tbWl0IiwgYW5kICJ0YWciLgorCitSZWdhcmRsZXNzIG9mIG9iamVjdCB0eXBlLCBhbGwgb2JqZWN0cyBzaGFyZSB0aGUgZm9sbG93aW5nCitjaGFyYWN0ZXJpc3RpY3M6IHRoZXkgYXJlIGFsbCBkZWZsYXRlZCB3aXRoIHpsaWIsIGFuZCBoYXZlIGEgaGVhZGVyCit0aGF0IG5vdCBvbmx5IHNwZWNpZmllcyB0aGVpciB0eXBlLCBidXQgYWxzbyBwcm92aWRlcyBzaXplIGluZm9ybWF0aW9uCithYm91dCB0aGUgZGF0YSBpbiB0aGUgb2JqZWN0LiAgSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgU0hBLTEgaGFzaAordGhhdCBpcyB1c2VkIHRvIG5hbWUgdGhlIG9iamVjdCBpcyB0aGUgaGFzaCBvZiB0aGUgb3JpZ2luYWwgZGF0YQorcGx1cyB0aGlzIGhlYWRlciwgc28gYHNoYTFzdW1gICdmaWxlJyBkb2VzIG5vdCBtYXRjaCB0aGUgb2JqZWN0IG5hbWUKK2ZvciAnZmlsZScuCisoSGlzdG9yaWNhbCBub3RlOiBpbiB0aGUgZGF3biBvZiB0aGUgYWdlIG9mIGdpdCB0aGUgaGFzaAord2FzIHRoZSBTSEEtMSBvZiB0aGUgJ2NvbXByZXNzZWQnIG9iamVjdC4pCisKK0FzIGEgcmVzdWx0LCB0aGUgZ2VuZXJhbCBjb25zaXN0ZW5jeSBvZiBhbiBvYmplY3QgY2FuIGFsd2F5cyBiZSB0ZXN0ZWQKK2luZGVwZW5kZW50bHkgb2YgdGhlIGNvbnRlbnRzIG9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3Q6IGFsbCBvYmplY3RzIGNhbgorYmUgdmFsaWRhdGVkIGJ5IHZlcmlmeWluZyB0aGF0IChhKSB0aGVpciBoYXNoZXMgbWF0Y2ggdGhlIGNvbnRlbnQgb2YgdGhlCitmaWxlIGFuZCAoYikgdGhlIG9iamVjdCBzdWNjZXNzZnVsbHkgaW5mbGF0ZXMgdG8gYSBzdHJlYW0gb2YgYnl0ZXMgdGhhdAorZm9ybXMgYSBzZXF1ZW5jZSBvZiA8YXNjaWkgdHlwZSB3aXRob3V0IHNwYWNlPiB7cGx1c30gPHNwYWNlPiB7cGx1c30gPGFzY2lpIGRlY2ltYWwKK3NpemU+IHtwbHVzfSA8Ynl0ZVwwPiB7cGx1c30gPGJpbmFyeSBvYmplY3QgZGF0YT4uCisKK1RoZSBzdHJ1Y3R1cmVkIG9iamVjdHMgY2FuIGZ1cnRoZXIgaGF2ZSB0aGVpciBzdHJ1Y3R1cmUgYW5kCitjb25uZWN0aXZpdHkgdG8gb3RoZXIgb2JqZWN0cyB2ZXJpZmllZC4gVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSB3aXRoCit0aGUgYGdpdCBmc2NrYCBwcm9ncmFtLCB3aGljaCBnZW5lcmF0ZXMgYSBmdWxsIGRlcGVuZGVuY3kgZ3JhcGgKK29mIGFsbCBvYmplY3RzLCBhbmQgdmVyaWZpZXMgdGhlaXIgaW50ZXJuYWwgY29uc2lzdGVuY3kgKGluIGFkZGl0aW9uCit0byBqdXN0IHZlcmlmeWluZyB0aGVpciBzdXBlcmZpY2lhbCBjb25zaXN0ZW5jeSB0aHJvdWdoIHRoZSBoYXNoKS4KKworW1tiaXJkdmlldy1vbi10aGUtc291cmNlLWNvZGVdXQorQSBiaXJkcy1leWUgdmlldyBvZiBHaXQncyBzb3VyY2UgY29kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyBub3QgYWx3YXlzIGVhc3kgZm9yIG5ldyBkZXZlbG9wZXJzIHRvIGZpbmQgdGhlaXIgd2F5IHRocm91Z2ggR2l0J3MKK3NvdXJjZSBjb2RlLiAgVGhpcyBzZWN0aW9uIGdpdmVzIHlvdSBhIGxpdHRsZSBndWlkYW5jZSB0byBzaG93IHdoZXJlIHRvCitzdGFydC4KKworQSBnb29kIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBpbml0aWFsIGNvbW1pdCwgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgZTgzYzUxNjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGluaXRpYWwgcmV2aXNpb24gbGF5cyB0aGUgZm91bmRhdGlvbiBmb3IgYWxtb3N0IGV2ZXJ5dGhpbmcgZ2l0IGhhcwordG9kYXksIGJ1dCBpcyBzbWFsbCBlbm91Z2ggdG8gcmVhZCBpbiBvbmUgc2l0dGluZy4KKworTm90ZSB0aGF0IHRlcm1pbm9sb2d5IGhhcyBjaGFuZ2VkIHNpbmNlIHRoYXQgcmV2aXNpb24uICBGb3IgZXhhbXBsZSwgdGhlCitSRUFETUUgaW4gdGhhdCByZXZpc2lvbiB1c2VzIHRoZSB3b3JkICJjaGFuZ2VzZXQiIHRvIGRlc2NyaWJlIHdoYXQgd2UKK25vdyBjYWxsIGEgPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQ+Pi4KKworQWxzbywgd2UgZG8gbm90IGNhbGwgaXQgImNhY2hlIiBhbnkgbW9yZSwgYnV0IHJhdGhlciAiaW5kZXgiOyBob3dldmVyLCB0aGUKK2ZpbGUgaXMgc3RpbGwgY2FsbGVkIGBjYWNoZS5oYC4gIFJlbWFyazogTm90IG11Y2ggcmVhc29uIHRvIGNoYW5nZSBpdCBub3csCitlc3BlY2lhbGx5IHNpbmNlIHRoZXJlIGlzIG5vIGdvb2Qgc2luZ2xlIG5hbWUgZm9yIGl0IGFueXdheSwgYmVjYXVzZSBpdCBpcworYmFzaWNhbGx5IF90aGVfIGhlYWRlciBmaWxlIHdoaWNoIGlzIGluY2x1ZGVkIGJ5IF9hbGxfIG9mIEdpdCdzIEMgc291cmNlcy4KKworSWYgeW91IGdyYXNwIHRoZSBpZGVhcyBpbiB0aGF0IGluaXRpYWwgY29tbWl0LCB5b3Ugc2hvdWxkIGNoZWNrIG91dCBhCittb3JlIHJlY2VudCB2ZXJzaW9uIGFuZCBza2ltIGBjYWNoZS5oYCwgYG9iamVjdC5oYCBhbmQgYGNvbW1pdC5oYC4KKworSW4gdGhlIGVhcmx5IGRheXMsIEdpdCAoaW4gdGhlIHRyYWRpdGlvbiBvZiBVTklYKSB3YXMgYSBidW5jaCBvZiBwcm9ncmFtcword2hpY2ggd2VyZSBleHRyZW1lbHkgc2ltcGxlLCBhbmQgd2hpY2ggeW91IHVzZWQgaW4gc2NyaXB0cywgcGlwaW5nIHRoZQorb3V0cHV0IG9mIG9uZSBpbnRvIGFub3RoZXIuIFRoaXMgdHVybmVkIG91dCB0byBiZSBnb29kIGZvciBpbml0aWFsCitkZXZlbG9wbWVudCwgc2luY2UgaXQgd2FzIGVhc2llciB0byB0ZXN0IG5ldyB0aGluZ3MuICBIb3dldmVyLCByZWNlbnRseQorbWFueSBvZiB0aGVzZSBwYXJ0cyBoYXZlIGJlY29tZSBidWlsdGlucywgYW5kIHNvbWUgb2YgdGhlIGNvcmUgaGFzIGJlZW4KKyJsaWJpZmllZCIsIGkuZS4gcHV0IGludG8gbGliZ2l0LmEgZm9yIHBlcmZvcm1hbmNlLCBwb3J0YWJpbGl0eSByZWFzb25zLAorYW5kIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uCisKK0J5IG5vdywgeW91IGtub3cgd2hhdCB0aGUgaW5kZXggaXMgKGFuZCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEKK3N0cnVjdHVyZXMgaW4gYGNhY2hlLmhgKSwgYW5kIHRoYXQgdGhlcmUgYXJlIGp1c3QgYSBjb3VwbGUgb2Ygb2JqZWN0IHR5cGVzCisoYmxvYnMsIHRyZWVzLCBjb21taXRzIGFuZCB0YWdzKSB3aGljaCBpbmhlcml0IHRoZWlyIGNvbW1vbiBzdHJ1Y3R1cmUgZnJvbQorYHN0cnVjdCBvYmplY3RgLCB3aGljaCBpcyB0aGVpciBmaXJzdCBtZW1iZXIgKGFuZCB0aHVzLCB5b3UgY2FuIGNhc3QgZS5nLgorYChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0YCB0byBhY2hpZXZlIHRoZSBfc2FtZV8gYXMgYCZjb21taXQtPm9iamVjdGAsIGkuZS4KK2dldCBhdCB0aGUgb2JqZWN0IG5hbWUgYW5kIGZsYWdzKS4KKworTm93IGlzIGEgZ29vZCBwb2ludCB0byB0YWtlIGEgYnJlYWsgdG8gbGV0IHRoaXMgaW5mb3JtYXRpb24gc2luayBpbi4KKworTmV4dCBzdGVwOiBnZXQgZmFtaWxpYXIgd2l0aCB0aGUgb2JqZWN0IG5hbWluZy4gIFJlYWQgPDxuYW1pbmctY29tbWl0cz4+LgorVGhlcmUgYXJlIHF1aXRlIGEgZmV3IHdheXMgdG8gbmFtZSBhbiBvYmplY3QgKGFuZCBub3Qgb25seSByZXZpc2lvbnMhKS4KK0FsbCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBpbiBgc2hhMV9uYW1lLmNgLiBKdXN0IGhhdmUgYSBxdWljayBsb29rIGF0Cit0aGUgZnVuY3Rpb24gYGdldF9zaGExKClgLiBBIGxvdCBvZiB0aGUgc3BlY2lhbCBoYW5kbGluZyBpcyBkb25lIGJ5CitmdW5jdGlvbnMgbGlrZSBgZ2V0X3NoYTFfYmFzaWMoKWAgb3IgdGhlIGxpa2VzLgorCitUaGlzIGlzIGp1c3QgdG8gZ2V0IHlvdSBpbnRvIHRoZSBncm9vdmUgZm9yIHRoZSBtb3N0IGxpYmlmaWVkIHBhcnQgb2YgR2l0OgordGhlIHJldmlzaW9uIHdhbGtlci4KKworQmFzaWNhbGx5LCB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIGBnaXQgbG9nYCB3YXMgYSBzaGVsbCBzY3JpcHQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0LXJldi1saXN0IC0tcHJldHR5ICQoZ2l0LXJldi1wYXJzZSAtLWRlZmF1bHQgSEVBRCAiJEAiKSB8IFwKKwlMRVNTPS1TICR7UEFHRVI6LWxlc3N9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQgZG9lcyB0aGlzIG1lYW4/CisKK2BnaXQgcmV2LWxpc3RgIGlzIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSByZXZpc2lvbiB3YWxrZXIsIHdoaWNoCitfYWx3YXlzXyBwcmludGVkIGEgbGlzdCBvZiByZXZpc2lvbnMgdG8gc3Rkb3V0LiAgSXQgaXMgc3RpbGwgZnVuY3Rpb25hbCwKK2FuZCBuZWVkcyB0bywgc2luY2UgbW9zdCBuZXcgR2l0IGNvbW1hbmRzIHN0YXJ0IG91dCBhcyBzY3JpcHRzIHVzaW5nCitgZ2l0IHJldi1saXN0YC4KKworYGdpdCByZXYtcGFyc2VgIGlzIG5vdCBhcyBpbXBvcnRhbnQgYW55IG1vcmU7IGl0IHdhcyBvbmx5IHVzZWQgdG8gZmlsdGVyIG91dAorb3B0aW9ucyB0aGF0IHdlcmUgcmVsZXZhbnQgZm9yIHRoZSBkaWZmZXJlbnQgcGx1bWJpbmcgY29tbWFuZHMgdGhhdCB3ZXJlCitjYWxsZWQgYnkgdGhlIHNjcmlwdC4KKworTW9zdCBvZiB3aGF0IGBnaXQgcmV2LWxpc3RgIGRpZCBpcyBjb250YWluZWQgaW4gYHJldmlzaW9uLmNgIGFuZAorYHJldmlzaW9uLmhgLiAgSXQgd3JhcHMgdGhlIG9wdGlvbnMgaW4gYSBzdHJ1Y3QgbmFtZWQgYHJldl9pbmZvYCwgd2hpY2gKK2NvbnRyb2xzIGhvdyBhbmQgd2hhdCByZXZpc2lvbnMgYXJlIHdhbGtlZCwgYW5kIG1vcmUuCisKK1RoZSBvcmlnaW5hbCBqb2Igb2YgYGdpdCByZXYtcGFyc2VgIGlzIG5vdyB0YWtlbiBieSB0aGUgZnVuY3Rpb24KK2BzZXR1cF9yZXZpc2lvbnMoKWAsIHdoaWNoIHBhcnNlcyB0aGUgcmV2aXNpb25zIGFuZCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZQorb3B0aW9ucyBmb3IgdGhlIHJldmlzaW9uIHdhbGtlci4gVGhpcyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHN0cnVjdAorYHJldl9pbmZvYCBmb3IgbGF0ZXIgY29uc3VtcHRpb24uIFlvdSBjYW4gZG8geW91ciBvd24gY29tbWFuZCBsaW5lIG9wdGlvbgorcGFyc2luZyBhZnRlciBjYWxsaW5nIGBzZXR1cF9yZXZpc2lvbnMoKWAuIEFmdGVyIHRoYXQsIHlvdSBoYXZlIHRvIGNhbGwKK2BwcmVwYXJlX3JldmlzaW9uX3dhbGsoKWAgZm9yIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlbiB5b3UgY2FuIGdldCB0aGUKK2NvbW1pdHMgb25lIGJ5IG9uZSB3aXRoIHRoZSBmdW5jdGlvbiBgZ2V0X3JldmlzaW9uKClgLgorCitJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gbW9yZSBkZXRhaWxzIG9mIHRoZSByZXZpc2lvbiB3YWxraW5nIHByb2Nlc3MsCitqdXN0IGhhdmUgYSBsb29rIGF0IHRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiBvZiBgY21kX2xvZygpYDsgY2FsbAorYGdpdCBzaG93IHYxLjMuMH4xNTVeMn40YCBhbmQgc2Nyb2xsIGRvd24gdG8gdGhhdCBmdW5jdGlvbiAobm90ZSB0aGF0IHlvdQorbm8gbG9uZ2VyIG5lZWQgdG8gY2FsbCBgc2V0dXBfcGFnZXIoKWAgZGlyZWN0bHkpLgorCitOb3dhZGF5cywgYGdpdCBsb2dgIGlzIGEgYnVpbHRpbiwgd2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBfY29udGFpbmVkXyBpbiB0aGUKK2NvbW1hbmQgYGdpdGAuICBUaGUgc291cmNlIHNpZGUgb2YgYSBidWlsdGluIGlzCisKKy0gYSBmdW5jdGlvbiBjYWxsZWQgYGNtZF88YmxhPmAsIHR5cGljYWxseSBkZWZpbmVkIGluIGBidWlsdGluLTxibGE+LmNgLAorICBhbmQgZGVjbGFyZWQgaW4gYGJ1aWx0aW4uaGAsCisKKy0gYW4gZW50cnkgaW4gdGhlIGBjb21tYW5kc1tdYCBhcnJheSBpbiBgZ2l0LmNgLCBhbmQKKworLSBhbiBlbnRyeSBpbiBgQlVJTFRJTl9PQkpFQ1RTYCBpbiB0aGUgYE1ha2VmaWxlYC4KKworU29tZXRpbWVzLCBtb3JlIHRoYW4gb25lIGJ1aWx0aW4gaXMgY29udGFpbmVkIGluIG9uZSBzb3VyY2UgZmlsZS4gIEZvcgorZXhhbXBsZSwgYGNtZF93aGF0Y2hhbmdlZCgpYCBhbmQgYGNtZF9sb2coKWAgYm90aCByZXNpZGUgaW4gYGJ1aWx0aW4tbG9nLmNgLAorc2luY2UgdGhleSBzaGFyZSBxdWl0ZSBhIGJpdCBvZiBjb2RlLiAgSW4gdGhhdCBjYXNlLCB0aGUgY29tbWFuZHMgd2hpY2ggYXJlCitfbm90XyBuYW1lZCBsaWtlIHRoZSBgLmNgIGZpbGUgaW4gd2hpY2ggdGhleSBsaXZlIGhhdmUgdG8gYmUgbGlzdGVkIGluCitgQlVJTFRfSU5TYCBpbiB0aGUgYE1ha2VmaWxlYC4KKworYGdpdCBsb2dgIGxvb2tzIG1vcmUgY29tcGxpY2F0ZWQgaW4gQyB0aGFuIGl0IGRvZXMgaW4gdGhlIG9yaWdpbmFsIHNjcmlwdCwKK2J1dCB0aGF0IGFsbG93cyBmb3IgYSBtdWNoIGdyZWF0ZXIgZmxleGliaWxpdHkgYW5kIHBlcmZvcm1hbmNlLgorCitIZXJlIGFnYWluIGl0IGlzIGEgZ29vZCBwb2ludCB0byB0YWtlIGEgcGF1c2UuCisKK0xlc3NvbiB0aHJlZSBpczogc3R1ZHkgdGhlIGNvZGUuICBSZWFsbHksIGl0IGlzIHRoZSBiZXN0IHdheSB0byBsZWFybiBhYm91dAordGhlIG9yZ2FuaXphdGlvbiBvZiBHaXQgKGFmdGVyIHlvdSBrbm93IHRoZSBiYXNpYyBjb25jZXB0cykuCisKK1NvLCB0aGluayBhYm91dCBzb21ldGhpbmcgd2hpY2ggeW91IGFyZSBpbnRlcmVzdGVkIGluLCBzYXksICJob3cgY2FuIEkKK2FjY2VzcyBhIGJsb2IganVzdCBrbm93aW5nIHRoZSBvYmplY3QgbmFtZSBvZiBpdD8iLiAgVGhlIGZpcnN0IHN0ZXAgaXMgdG8KK2ZpbmQgYSBHaXQgY29tbWFuZCB3aXRoIHdoaWNoIHlvdSBjYW4gZG8gaXQuICBJbiB0aGlzIGV4YW1wbGUsIGl0IGlzIGVpdGhlcgorYGdpdCBzaG93YCBvciBgZ2l0IGNhdC1maWxlYC4KKworRm9yIHRoZSBzYWtlIG9mIGNsYXJpdHksIGxldCdzIHN0YXkgd2l0aCBgZ2l0IGNhdC1maWxlYCwgYmVjYXVzZSBpdAorCistIGlzIHBsdW1iaW5nLCBhbmQKKworLSB3YXMgYXJvdW5kIGV2ZW4gaW4gdGhlIGluaXRpYWwgY29tbWl0IChpdCBsaXRlcmFsbHkgd2VudCBvbmx5IHRocm91Z2gKKyAgc29tZSAyMCByZXZpc2lvbnMgYXMgYGNhdC1maWxlLmNgLCB3YXMgcmVuYW1lZCB0byBgYnVpbHRpbi1jYXQtZmlsZS5jYAorICB3aGVuIG1hZGUgYSBidWlsdGluLCBhbmQgdGhlbiBzYXcgbGVzcyB0aGFuIDEwIHZlcnNpb25zKS4KKworU28sIGxvb2sgaW50byBgYnVpbHRpbi1jYXQtZmlsZS5jYCwgc2VhcmNoIGZvciBgY21kX2NhdF9maWxlKClgIGFuZCBsb29rIHdoYXQKK2l0IGRvZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisgICAgICAgIGlmIChhcmdjICE9IDMpCisJCXVzYWdlKCJnaXQgY2F0LWZpbGUgWy10fC1zfC1lfC1wfDx0eXBlPl0gPHNoYTE+Iik7CisgICAgICAgIGlmIChnZXRfc2hhMShhcmd2WzJdLCBzaGExKSkKKyAgICAgICAgICAgICAgICBkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJndlsyXSk7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGV0J3Mgc2tpcCBvdmVyIHRoZSBvYnZpb3VzIGRldGFpbHM7IHRoZSBvbmx5IHJlYWxseSBpbnRlcmVzdGluZyBwYXJ0CitoZXJlIGlzIHRoZSBjYWxsIHRvIGBnZXRfc2hhMSgpYC4gIEl0IHRyaWVzIHRvIGludGVycHJldCBgYXJndlsyXWAgYXMgYW4KK29iamVjdCBuYW1lLCBhbmQgaWYgaXQgcmVmZXJzIHRvIGFuIG9iamVjdCB3aGljaCBpcyBwcmVzZW50IGluIHRoZSBjdXJyZW50CityZXBvc2l0b3J5LCBpdCB3cml0ZXMgdGhlIHJlc3VsdGluZyBTSEEtMSBpbnRvIHRoZSB2YXJpYWJsZSBgc2hhMWAuCisKK1R3byB0aGluZ3MgYXJlIGludGVyZXN0aW5nIGhlcmU6CisKKy0gYGdldF9zaGExKClgIHJldHVybnMgMCBvbiBfc3VjY2Vzc18uICBUaGlzIG1pZ2h0IHN1cnByaXNlIHNvbWUgbmV3CisgIEdpdCBoYWNrZXJzLCBidXQgdGhlcmUgaXMgYSBsb25nIHRyYWRpdGlvbiBpbiBVTklYIHRvIHJldHVybiBkaWZmZXJlbnQKKyAgbmVnYXRpdmUgbnVtYmVycyBpbiBjYXNlIG9mIGRpZmZlcmVudCBlcnJvcnMtLWFuZCAwIG9uIHN1Y2Nlc3MuCisKKy0gdGhlIHZhcmlhYmxlIGBzaGExYCBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGBnZXRfc2hhMSgpYCBpcyBgdW5zaWduZWQKKyAgY2hhciAqYCwgYnV0IGlzIGFjdHVhbGx5IGV4cGVjdGVkIHRvIGJlIGEgcG9pbnRlciB0byBgdW5zaWduZWQKKyAgY2hhclsyMF1gLiAgVGhpcyB2YXJpYWJsZSB3aWxsIGNvbnRhaW4gdGhlIDE2MC1iaXQgU0hBLTEgb2YgdGhlIGdpdmVuCisgIGNvbW1pdC4gIE5vdGUgdGhhdCB3aGVuZXZlciBhIFNIQS0xIGlzIHBhc3NlZCBhcyBgdW5zaWduZWQgY2hhciAqYCwgaXQKKyAgaXMgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiwgYXMgb3Bwb3NlZCB0byB0aGUgQVNDSUkgcmVwcmVzZW50YXRpb24gaW4KKyAgaGV4IGNoYXJhY3RlcnMsIHdoaWNoIGlzIHBhc3NlZCBhcyBgY2hhciAqYC4KKworWW91IHdpbGwgc2VlIGJvdGggb2YgdGhlc2UgdGhpbmdzIHRocm91Z2hvdXQgdGhlIGNvZGUuCisKK05vdywgZm9yIHRoZSBtZWF0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgYXJndlsxXSwgJnNpemUsIE5VTEwpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBob3cgeW91IHJlYWQgYSBibG9iIChhY3R1YWxseSwgbm90IG9ubHkgYSBibG9iLCBidXQgYW55IHR5cGUgb2YKK29iamVjdCkuICBUbyBrbm93IGhvdyB0aGUgZnVuY3Rpb24gYHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKClgIGFjdHVhbGx5Cit3b3JrcywgZmluZCB0aGUgc291cmNlIGNvZGUgZm9yIGl0IChzb21ldGhpbmcgbGlrZSBgZ2l0IGdyZXAKK3JlYWRfb2JqZWN0X3dpdGggfCBncmVwICI6W2Etel0iYCBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkpLCBhbmQgcmVhZAordGhlIHNvdXJjZS4KKworVG8gZmluZCBvdXQgaG93IHRoZSByZXN1bHQgY2FuIGJlIHVzZWQsIGp1c3QgcmVhZCBvbiBpbiBgY21kX2NhdF9maWxlKClgOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICB3cml0ZV9vcl9kaWUoMSwgYnVmLCBzaXplKTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvbWV0aW1lcywgeW91IGRvIG5vdCBrbm93IHdoZXJlIHRvIGxvb2sgZm9yIGEgZmVhdHVyZS4gIEluIG1hbnkgc3VjaCBjYXNlcywKK2l0IGhlbHBzIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBvdXRwdXQgb2YgYGdpdCBsb2dgLCBhbmQgdGhlbiBgZ2l0IHNob3dgIHRoZQorY29ycmVzcG9uZGluZyBjb21taXQuCisKK0V4YW1wbGU6IElmIHlvdSBrbm93IHRoYXQgdGhlcmUgd2FzIHNvbWUgdGVzdCBjYXNlIGZvciBgZ2l0IGJ1bmRsZWAsIGJ1dAorZG8gbm90IHJlbWVtYmVyIHdoZXJlIGl0IHdhcyAoeWVzLCB5b3UgX2NvdWxkXyBgZ2l0IGdyZXAgYnVuZGxlIHQvYCwgYnV0IHRoYXQKK2RvZXMgbm90IGlsbHVzdHJhdGUgdGhlIHBvaW50ISk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tbm8tbWVyZ2VzIHQvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhlIHBhZ2VyIChgbGVzc2ApLCBqdXN0IHNlYXJjaCBmb3IgImJ1bmRsZSIsIGdvIGEgZmV3IGxpbmVzIGJhY2ssCithbmQgc2VlIHRoYXQgaXQgaXMgaW4gY29tbWl0IDE4NDQ5YWIwLi4uICBOb3cganVzdCBjb3B5IHRoaXMgb2JqZWN0IG5hbWUsCithbmQgcGFzdGUgaXQgaW50byB0aGUgY29tbWFuZCBsaW5lCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgMTg0NDlhYjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVm9pbGEuCisKK0Fub3RoZXIgZXhhbXBsZTogRmluZCBvdXQgd2hhdCB0byBkbyBpbiBvcmRlciB0byBtYWtlIHNvbWUgc2NyaXB0IGEKK2J1aWx0aW46CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtLW5vLW1lcmdlcyAtLWRpZmYtZmlsdGVyPUEgYnVpbHRpbi0qLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IHNlZSwgR2l0IGlzIGFjdHVhbGx5IHRoZSBiZXN0IHRvb2wgdG8gZmluZCBvdXQgYWJvdXQgdGhlIHNvdXJjZSBvZiBHaXQKK2l0c2VsZiEKKworW1tnbG9zc2FyeV1dCitHaXQgR2xvc3NhcnkKKz09PT09PT09PT09PQorCitpbmNsdWRlOjpnbG9zc2FyeS1jb250ZW50LnR4dFtdCisKK1tbZ2l0LXF1aWNrLXN0YXJ0XV0KK0FwcGVuZGl4IEE6IEdpdCBRdWljayBSZWZlcmVuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhIHF1aWNrIHN1bW1hcnkgb2YgdGhlIG1ham9yIGNvbW1hbmRzOyB0aGUgcHJldmlvdXMgY2hhcHRlcnMKK2V4cGxhaW4gaG93IHRoZXNlIHdvcmsgaW4gbW9yZSBkZXRhaWwuCisKK1tbcXVpY2stY3JlYXRpbmctYS1uZXctcmVwb3NpdG9yeV1dCitDcmVhdGluZyBhIG5ldyByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Zyb20gYSB0YXJiYWxsOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCB0YXIgeHpmIHByb2plY3QudGFyLmd6CiskIGNkIHByb2plY3QKKyQgZ2l0IGluaXQKK0luaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC5naXQvCiskIGdpdCBhZGQgLgorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSBnaXQ6Ly9leGFtcGxlLmNvbS9wdWIvcHJvamVjdC5naXQKKyQgY2QgcHJvamVjdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1ttYW5hZ2luZy1icmFuY2hlc11dCitNYW5hZ2luZyBicmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaAkgICAgICMgbGlzdCBhbGwgbG9jYWwgYnJhbmNoZXMgaW4gdGhpcyByZXBvCiskIGdpdCBjaGVja291dCB0ZXN0ICAjIHN3aXRjaCB3b3JraW5nIGRpcmVjdG9yeSB0byBicmFuY2ggInRlc3QiCiskIGdpdCBicmFuY2ggbmV3ICAgICAjIGNyZWF0ZSBicmFuY2ggIm5ldyIgc3RhcnRpbmcgYXQgY3VycmVudCBIRUFECiskIGdpdCBicmFuY2ggLWQgbmV3ICAjIGRlbGV0ZSBicmFuY2ggIm5ldyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luc3RlYWQgb2YgYmFzaW5nIGEgbmV3IGJyYW5jaCBvbiBjdXJyZW50IEhFQUQgKHRoZSBkZWZhdWx0KSwgdXNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIG5ldyB0ZXN0ICAgICMgYnJhbmNoIG5hbWVkICJ0ZXN0IgorJCBnaXQgYnJhbmNoIG5ldyB2Mi42LjE1ICMgdGFnIG5hbWVkIHYyLjYuMTUKKyQgZ2l0IGJyYW5jaCBuZXcgSEVBRF4gICAjIGNvbW1pdCBiZWZvcmUgdGhlIG1vc3QgcmVjZW50CiskIGdpdCBicmFuY2ggbmV3IEhFQUReXiAgIyBjb21taXQgYmVmb3JlIHRoYXQKKyQgZ2l0IGJyYW5jaCBuZXcgdGVzdH4xMCAjIHRlbiBjb21taXRzIGJlZm9yZSB0aXAgb2YgYnJhbmNoICJ0ZXN0IgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIGF0IHRoZSBzYW1lIHRpbWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiBuZXcgdjIuNi4xNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXBkYXRlIGFuZCBleGFtaW5lIGJyYW5jaGVzIGZyb20gdGhlIHJlcG9zaXRvcnkgeW91IGNsb25lZCBmcm9tOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2gJCSMgdXBkYXRlCiskIGdpdCBicmFuY2ggLXIJCSMgbGlzdAorICBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9uZXh0CisgIC4uLgorJCBnaXQgY2hlY2tvdXQgLWIgbWFzdGVyd29yayBvcmlnaW4vbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGZXRjaCBhIGJyYW5jaCBmcm9tIGEgZGlmZmVyZW50IHJlcG9zaXRvcnksIGFuZCBnaXZlIGl0IGEgbmV3CituYW1lIGluIHlvdXIgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIGdpdDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0IHRoZWlyYnJhbmNoOm15YnJhbmNoCiskIGdpdCBmZXRjaCBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qZWN0LmdpdCB2Mi42LjE1Om15YnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitLZWVwIGEgbGlzdCBvZiByZXBvc2l0b3JpZXMgeW91IHdvcmsgd2l0aCByZWd1bGFybHk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZW1vdGUgYWRkIGV4YW1wbGUgZ2l0Oi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQKKyQgZ2l0IHJlbW90ZQkJCSMgbGlzdCByZW1vdGUgcmVwb3NpdG9yaWVzCitleGFtcGxlCitvcmlnaW4KKyQgZ2l0IHJlbW90ZSBzaG93IGV4YW1wbGUJIyBnZXQgZGV0YWlscworKiByZW1vdGUgZXhhbXBsZQorICBVUkw6IGdpdDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0CisgIFRyYWNrZWQgcmVtb3RlIGJyYW5jaGVzCisgICAgbWFzdGVyCisgICAgbmV4dAorICAgIC4uLgorJCBnaXQgZmV0Y2ggZXhhbXBsZQkJIyB1cGRhdGUgYnJhbmNoZXMgZnJvbSBleGFtcGxlCiskIGdpdCBicmFuY2ggLXIJCQkjIGxpc3QgYWxsIHJlbW90ZSBicmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitbW2V4cGxvcmluZy1oaXN0b3J5XV0KK0V4cGxvcmluZyBoaXN0b3J5CistLS0tLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrCQkJICAgICMgdmlzdWFsaXplIGFuZCBicm93c2UgaGlzdG9yeQorJCBnaXQgbG9nCQkgICAgIyBsaXN0IGFsbCBjb21taXRzCiskIGdpdCBsb2cgc3JjLwkJICAgICMgLi4ubW9kaWZ5aW5nIHNyYy8KKyQgZ2l0IGxvZyB2Mi42LjE1Li52Mi42LjE2ICAjIC4uLmluIHYyLjYuMTYsIG5vdCBpbiB2Mi42LjE1CiskIGdpdCBsb2cgbWFzdGVyLi50ZXN0CSAgICAjIC4uLmluIGJyYW5jaCB0ZXN0LCBub3QgaW4gYnJhbmNoIG1hc3RlcgorJCBnaXQgbG9nIHRlc3QuLm1hc3RlcgkgICAgIyAuLi5pbiBicmFuY2ggbWFzdGVyLCBidXQgbm90IGluIHRlc3QKKyQgZ2l0IGxvZyB0ZXN0Li4ubWFzdGVyCSAgICAjIC4uLmluIG9uZSBicmFuY2gsIG5vdCBpbiBib3RoCiskIGdpdCBsb2cgLVMnZm9vKCknCSAgICAjIC4uLndoZXJlIGRpZmZlcmVuY2UgY29udGFpbiAiZm9vKCkiCiskIGdpdCBsb2cgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iCiskIGdpdCBsb2cgLXAJCSAgICAjIHNob3cgcGF0Y2hlcyBhcyB3ZWxsCiskIGdpdCBzaG93CQkgICAgIyBtb3N0IHJlY2VudCBjb21taXQKKyQgZ2l0IGRpZmYgdjIuNi4xNS4udjIuNi4xNiAjIGRpZmYgYmV0d2VlbiB0d28gdGFnZ2VkIHZlcnNpb25zCiskIGdpdCBkaWZmIHYyLjYuMTUuLkhFQUQgICAgIyBkaWZmIHdpdGggY3VycmVudCBoZWFkCiskIGdpdCBncmVwICJmb28oKSIJICAgICMgc2VhcmNoIHdvcmtpbmcgZGlyZWN0b3J5IGZvciAiZm9vKCkiCiskIGdpdCBncmVwIHYyLjYuMTUgImZvbygpIiAgIyBzZWFyY2ggb2xkIHRyZWUgZm9yICJmb28oKSIKKyQgZ2l0IHNob3cgdjIuNi4xNTphLnR4dCAgICAjIGxvb2sgYXQgb2xkIHZlcnNpb24gb2YgYS50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlYXJjaCBmb3IgcmVncmVzc2lvbnM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQKKyQgZ2l0IGJpc2VjdCBiYWQJCSMgY3VycmVudCB2ZXJzaW9uIGlzIGJhZAorJCBnaXQgYmlzZWN0IGdvb2QgdjIuNi4xMy1yYzIJIyBsYXN0IGtub3duIGdvb2QgcmV2aXNpb24KK0Jpc2VjdGluZzogNjc1IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcworCQkJCSMgdGVzdCBoZXJlLCB0aGVuOgorJCBnaXQgYmlzZWN0IGdvb2QJCSMgaWYgdGhpcyByZXZpc2lvbiBpcyBnb29kLCBvcgorJCBnaXQgYmlzZWN0IGJhZAkJIyBpZiB0aGlzIHJldmlzaW9uIGlzIGJhZC4KKwkJCQkjIHJlcGVhdCB1bnRpbCBkb25lLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1ttYWtpbmctY2hhbmdlc11dCitNYWtpbmcgY2hhbmdlcworLS0tLS0tLS0tLS0tLS0KKworTWFrZSBzdXJlIGdpdCBrbm93cyB3aG8gdG8gYmxhbWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjYXQgPj5+Ly5naXRjb25maWcgPDxcRU9GCitbdXNlcl0KKwluYW1lID0gWW91ciBOYW1lIENvbWVzIEhlcmUKKwllbWFpbCA9IHlvdUB5b3VyZG9tYWluLmV4YW1wbGUuY29tCitFT0YKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWxlY3QgZmlsZSBjb250ZW50cyB0byBpbmNsdWRlIGluIHRoZSBuZXh0IGNvbW1pdCwgdGhlbiBtYWtlIHRoZQorY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGEudHh0ICAgICMgdXBkYXRlZCBmaWxlCiskIGdpdCBhZGQgYi50eHQgICAgIyBuZXcgZmlsZQorJCBnaXQgcm0gYy50eHQgICAgICMgb2xkIGZpbGUKKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3IsIHByZXBhcmUgYW5kIGNyZWF0ZSB0aGUgY29tbWl0IGluIG9uZSBzdGVwOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IGQudHh0ICMgdXNlIGxhdGVzdCBjb250ZW50IG9ubHkgb2YgZC50eHQKKyQgZ2l0IGNvbW1pdCAtYQkgICAjIHVzZSBsYXRlc3QgY29udGVudCBvZiBhbGwgdHJhY2tlZCBmaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1ttZXJnaW5nXV0KK01lcmdpbmcKKy0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlIHRlc3QgICAjIG1lcmdlIGJyYW5jaCAidGVzdCIgaW50byB0aGUgY3VycmVudCBicmFuY2gKKyQgZ2l0IHB1bGwgZ2l0Oi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgbWFzdGVyCisJCSAgICMgZmV0Y2ggYW5kIG1lcmdlIGluIHJlbW90ZSBicmFuY2gKKyQgZ2l0IHB1bGwgLiB0ZXN0ICAjIGVxdWl2YWxlbnQgdG8gZ2l0IG1lcmdlIHRlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbc2hhcmluZy15b3VyLWNoYW5nZXNdXQorU2hhcmluZyB5b3VyIGNoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ltcG9ydGluZyBvciBleHBvcnRpbmcgcGF0Y2hlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCBvcmlnaW4uLkhFQUQgIyBmb3JtYXQgYSBwYXRjaCBmb3IgZWFjaCBjb21taXQKKwkJCQkjIGluIEhFQUQgYnV0IG5vdCBpbiBvcmlnaW4KKyQgZ2l0IGFtIG1ib3ggIyBpbXBvcnQgcGF0Y2hlcyBmcm9tIHRoZSBtYWlsYm94ICJtYm94IgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmV0Y2ggYSBicmFuY2ggaW4gYSBkaWZmZXJlbnQgZ2l0IHJlcG9zaXRvcnksIHRoZW4gbWVyZ2UgaW50byB0aGUKK2N1cnJlbnQgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qZWN0LmdpdCB0aGVpcmJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RvcmUgdGhlIGZldGNoZWQgYnJhbmNoIGludG8gYSBsb2NhbCBicmFuY2ggYmVmb3JlIG1lcmdpbmcgaW50byB0aGUKK2N1cnJlbnQgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qZWN0LmdpdCB0aGVpcmJyYW5jaDpteWJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgY3JlYXRpbmcgY29tbWl0cyBvbiBhIGxvY2FsIGJyYW5jaCwgdXBkYXRlIHRoZSByZW1vdGUKK2JyYW5jaCB3aXRoIHlvdXIgY29tbWl0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggc3NoOi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgbXlicmFuY2g6dGhlaXJicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gcmVtb3RlIGFuZCBsb2NhbCBicmFuY2ggYXJlIGJvdGggbmFtZWQgInRlc3QiOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCBzc2g6Ly9leGFtcGxlLmNvbS9wcm9qZWN0LmdpdCB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaG9ydGN1dCB2ZXJzaW9uIGZvciBhIGZyZXF1ZW50bHkgdXNlZCByZW1vdGUgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlbW90ZSBhZGQgZXhhbXBsZSBzc2g6Ly9leGFtcGxlLmNvbS9wcm9qZWN0LmdpdAorJCBnaXQgcHVzaCBleGFtcGxlIHRlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbcmVwb3NpdG9yeS1tYWludGVuYW5jZV1dCitSZXBvc2l0b3J5IG1haW50ZW5hbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoZWNrIGZvciBjb3JydXB0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZnNjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVjb21wcmVzcywgcmVtb3ZlIHVudXNlZCBjcnVmdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGdjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1tbdG9kb11dCitBcHBlbmRpeCBCOiBOb3RlcyBhbmQgdG9kbyBsaXN0IGZvciB0aGlzIG1hbnVhbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MuCisKK1RoZSBiYXNpYyByZXF1aXJlbWVudHM6CisKKy0gSXQgbXVzdCBiZSByZWFkYWJsZSBpbiBvcmRlciwgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCBieSBzb21lb25lCisgIGludGVsbGlnZW50IHdpdGggYSBiYXNpYyBncmFzcCBvZiB0aGUgVU5JWCBjb21tYW5kIGxpbmUsIGJ1dCB3aXRob3V0CisgIGFueSBzcGVjaWFsIGtub3dsZWRnZSBvZiBnaXQuICBJZiBuZWNlc3NhcnksIGFueSBvdGhlciBwcmVyZXF1aXNpdGVzCisgIHNob3VsZCBiZSBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGFzIHRoZXkgYXJpc2UuCistIFdoZW5ldmVyIHBvc3NpYmxlLCBzZWN0aW9uIGhlYWRpbmdzIHNob3VsZCBjbGVhcmx5IGRlc2NyaWJlIHRoZSB0YXNrCisgIHRoZXkgZXhwbGFpbiBob3cgdG8gZG8sIGluIGxhbmd1YWdlIHRoYXQgcmVxdWlyZXMgbm8gbW9yZSBrbm93bGVkZ2UKKyAgdGhhbiBuZWNlc3Nhcnk6IGZvciBleGFtcGxlLCAiaW1wb3J0aW5nIHBhdGNoZXMgaW50byBhIHByb2plY3QiIHJhdGhlcgorICB0aGFuICJ0aGUgYGdpdCBhbWAgY29tbWFuZCIKKworVGhpbmsgYWJvdXQgaG93IHRvIGNyZWF0ZSBhIGNsZWFyIGNoYXB0ZXIgZGVwZW5kZW5jeSBncmFwaCB0aGF0IHdpbGwKK2FsbG93IHBlb3BsZSB0byBnZXQgdG8gaW1wb3J0YW50IHRvcGljcyB3aXRob3V0IG5lY2Vzc2FyaWx5IHJlYWRpbmcKK2V2ZXJ5dGhpbmcgaW4gYmV0d2Vlbi4KKworU2NhbiBEb2N1bWVudGF0aW9uLyBmb3Igb3RoZXIgc3R1ZmYgbGVmdCBvdXQ7IGluIHBhcnRpY3VsYXI6CisKKy0gaG93dG8ncworLSBzb21lIG9mIHRlY2huaWNhbC8/CistIGhvb2tzCistIGxpc3Qgb2YgY29tbWFuZHMgaW4gbGlua2dpdDpnaXRbMV0KKworU2NhbiBlbWFpbCBhcmNoaXZlcyBmb3Igb3RoZXIgc3R1ZmYgbGVmdCBvdXQKKworU2NhbiBtYW4gcGFnZXMgdG8gc2VlIGlmIGFueSBhc3N1bWUgbW9yZSBiYWNrZ3JvdW5kIHRoYW4gdGhpcyBtYW51YWwKK3Byb3ZpZGVzLgorCitTaW1wbGlmeSBiZWdpbm5pbmcgYnkgc3VnZ2VzdGluZyBkaXNjb25uZWN0ZWQgaGVhZCBpbnN0ZWFkIG9mCit0ZW1wb3JhcnkgYnJhbmNoIGNyZWF0aW9uPworCitBZGQgbW9yZSBnb29kIGV4YW1wbGVzLiAgRW50aXJlIHNlY3Rpb25zIG9mIGp1c3QgY29va2Jvb2sgZXhhbXBsZXMKK21pZ2h0IGJlIGEgZ29vZCBpZGVhOyBtYXliZSBtYWtlIGFuICJhZHZhbmNlZCBleGFtcGxlcyIgc2VjdGlvbiBhCitzdGFuZGFyZCBlbmQtb2YtY2hhcHRlciBzZWN0aW9uPworCitJbmNsdWRlIGNyb3NzLXJlZmVyZW5jZXMgdG8gdGhlIGdsb3NzYXJ5LCB3aGVyZSBhcHByb3ByaWF0ZS4KKworRG9jdW1lbnQgc2hhbGxvdyBjbG9uZXM/ICBTZWUgZHJhZnQgMS41LjAgcmVsZWFzZSBub3RlcyBmb3Igc29tZQorZG9jdW1lbnRhdGlvbi4KKworQWRkIGEgc2VjdGlvbiBvbiB3b3JraW5nIHdpdGggb3RoZXIgdmVyc2lvbiBjb250cm9sIHN5c3RlbXMsIGluY2x1ZGluZworQ1ZTLCBTdWJ2ZXJzaW9uLCBhbmQganVzdCBpbXBvcnRzIG9mIHNlcmllcyBvZiByZWxlYXNlIHRhcmJhbGxzLgorCitNb3JlIGRldGFpbHMgb24gZ2l0d2ViPworCitXcml0ZSBhIGNoYXB0ZXIgb24gdXNpbmcgcGx1bWJpbmcgYW5kIHdyaXRpbmcgc2NyaXB0cy4KKworQWx0ZXJuYXRlcywgY2xvbmUgLXJlZmVyZW5jZSwgZXRjLgorCitNb3JlIG9uIHJlY292ZXJ5IGZyb20gcmVwb3NpdG9yeSBjb3JydXB0aW9uLiAgU2VlOgorCWh0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9Z2l0Jm09MTE3MjYzODY0ODIwNzk5Jnc9MgorCWh0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9Z2l0Jm09MTE3MTQ3ODU1NTAzNzk4Jnc9MgpkaWZmIC0tZ2l0IGEvR0lULVZFUlNJT04tR0VOIGIvR0lULVZFUlNJT04tR0VOCmluZGV4IDQ5YjYyZWEuLjI3YjQ5MGMgMTAwNzU1Ci0tLSBhL0dJVC1WRVJTSU9OLUdFTgorKysgYi9HSVQtVkVSU0lPTi1HRU4KQEAgLTEsODAgKzEsNDIgQEAKICMhL2Jpbi9zaAogCiBHVkY9R0lULVZFUlNJT04tRklMRQotREVGX1ZFUj0wLjE3LkdJVEdVSQorREVGX1ZFUj12MS44LjAtcmMzCiAKIExGPScKICcKIAotdHJlZV9zZWFyY2ggKCkKLXsKLQloZWFkPSQxCi0JdHJlZT0kMgotCWZvciBwIGluICQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLW1heC1jb3VudD0xICRoZWFkIDI+L2Rldi9udWxsKQotCWRvCi0JCXRlc3QgJHRyZWUgPSAkKGdpdCByZXYtcGFyc2UgJHBee3RyZWV9IDI+L2Rldi9udWxsKSAmJgotCQl2bj0kKGdpdCBkZXNjcmliZSAtLWFiYnJldj00ICRwIDI+L2Rldi9udWxsKSAmJgotCQljYXNlICIkdm4iIGluCi0JCWdpdGd1aS1bMC05XSopIGVjaG8gJHZuOyBicmVhazs7Ci0JCWVzYWMKLQlkb25lCi19Ci0KLSMgQWx3YXlzIHVzZSB0aGUgdGFyYmFsbCB2ZXJzaW9uIGZpbGUgaWYgZm91bmQsIGp1c3QKLSMgaW4gY2FzZSB3ZSBhcmUgc29tZWhvdyBjb250YWluZWQgaW4gYSBsYXJnZXIgZ2l0Ci0jIHJlcG9zaXRvcnkgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IHRyYWNrIG91ciBzdGF0ZS4KLSMgKEF0IGxlYXN0IG9uZSBwYWNrYWdlIG1hbmFnZXIgaXMgZG9pbmcgdGhpcy4pCi0jCi0jIFdlIG1heSBiZSBhIHN1YnByb2plY3QsIHNvIHRyeSBsb29raW5nIGZvciB0aGUgbWVyZ2UKLSMgY29tbWl0IHRoYXQgc3VwcGxpZWQgdGhpcyBkaXJlY3RvcnkgY29udGVudCBpZiB3ZSBhcmUKLSMgbm90IGF0IHRoZSB0b3BsZXZlbC4gIFdlIHByb2JhYmx5IHdpbGwgYWx3YXlzIGJlIHRoZQotIyBzZWNvbmQgcGFyZW50IGluIHRoZSBjb21taXQsIGJ1dCB3ZSBzaG91bGRuJ3QgcmVseSBvbgotIyB0aGF0IGZhY3QuCi0jCi0jIElmIHdlIGFyZSBhdCB0aGUgdG9wbGV2ZWwgb3IgdGhlIG1lcmdlIGFzc3VtcHRpb24gZmFpbHMKLSMgdHJ5IGxvb2tpbmcgZm9yIGEgZ2l0Z3VpLSogdGFnLgotCi1pZiB0ZXN0IC1mIHZlcnNpb24gJiYKLSAgIFZOPSQoY2F0IHZlcnNpb24pCisjIEZpcnN0IHNlZSBpZiB0aGVyZSBpcyBhIHZlcnNpb24gZmlsZSAoaW5jbHVkZWQgaW4gcmVsZWFzZSB0YXJiYWxscyksCisjIHRoZW4gdHJ5IGdpdC1kZXNjcmliZSwgdGhlbiBkZWZhdWx0LgoraWYgdGVzdCAtZiB2ZXJzaW9uCiB0aGVuCi0JOiBoYXBweQotZWxpZiBwcmVmaXg9IiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4IDI+L2Rldi9udWxsKSIKLSAgIHRlc3QgLW4gIiRwcmVmaXgiICYmCi0gICBoZWFkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCAtLSAuIDI+L2Rldi9udWxsKSAmJgotICAgdHJlZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIkhFQUQ6JHByZWZpeCIgMj4vZGV2L251bGwpICYmCi0gICBWTj0kKHRyZWVfc2VhcmNoICRoZWFkICR0cmVlKQotICAgY2FzZSAiJFZOIiBpbgotICAgZ2l0Z3VpLVswLTldKikgOiBoYXBweSA7OwotICAgKikgKGV4aXQgMSkgOzsKLSAgIGVzYWMKKwlWTj0kKGNhdCB2ZXJzaW9uKSB8fCBWTj0iJERFRl9WRVIiCitlbGlmIHRlc3QgLWQgLmdpdCAtbyAtZiAuZ2l0ICYmCisJVk49JChnaXQgZGVzY3JpYmUgLS1tYXRjaCAidlswLTldKiIgLS1hYmJyZXY9NyBIRUFEIDI+L2Rldi9udWxsKSAmJgorCWNhc2UgIiRWTiIgaW4KKwkqJExGKikgKGV4aXQgMSkgOzsKKwl2WzAtOV0qKQorCQlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAorCQl0ZXN0IC16ICIkKGdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQgLS0pIiB8fAorCQlWTj0iJFZOLWRpcnR5IiA7OworCWVzYWMKIHRoZW4KLQlWTj0kKGVjaG8gIiRWTiIgfCBzZWQgLWUgJ3MvXmdpdGd1aS0vLztzLy0vLi9nJyk7Ci1lbGlmIFZOPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgSEVBRCAyPi9kZXYvbnVsbCkgJiYKLSAgIGNhc2UgIiRWTiIgaW4KLSAgIGdpdGd1aS1bMC05XSopIDogaGFwcHkgOzsKLSAgICopIChleGl0IDEpIDs7Ci0gICBlc2FjCi10aGVuCi0JVk49JChlY2hvICIkVk4iIHwgc2VkIC1lICdzL15naXRndWktLy87cy8tLy4vZycpOworCVZOPSQoZWNobyAiJFZOIiB8IHNlZCAtZSAncy8tLy4vZycpOwogZWxzZQogCVZOPSIkREVGX1ZFUiIKIGZpCiAKLWRpcnR5PSQoc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsKSB8fCBkaXJ0eT0KLWNhc2UgIiRkaXJ0eSIgaW4KLScnKQotCTs7Ci0qKQotCVZOPSIkVk4tZGlydHkiIDs7Ci1lc2FjCitWTj0kKGV4cHIgIiRWTiIgOiB2KidcKC4qXCknKQogCiBpZiB0ZXN0IC1yICRHVkYKIHRoZW4KLQlWQz0kKHNlZCAtZSAncy9eR0lUR1VJX1ZFUlNJT04gPSAvLycgPCRHVkYpCisJVkM9JChzZWQgLWUgJ3MvXkdJVF9WRVJTSU9OID0gLy8nIDwkR1ZGKQogZWxzZQogCVZDPXVuc2V0CiBmaQogdGVzdCAiJFZOIiA9ICIkVkMiIHx8IHsKLQllY2hvID4mMiAiR0lUR1VJX1ZFUlNJT04gPSAkVk4iCi0JZWNobyAiR0lUR1VJX1ZFUlNJT04gPSAkVk4iID4kR1ZGCisJZWNobyA+JjIgIkdJVF9WRVJTSU9OID0gJFZOIgorCWVjaG8gIkdJVF9WRVJTSU9OID0gJFZOIiA+JEdWRgogfQorCisKZGlmZiAtLWdpdCBhL0lOU1RBTEwgYi9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjM0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9JTlNUQUxMCkBAIC0wLDAgKzEsMjA5IEBACisKKwkJR2l0IGluc3RhbGxhdGlvbgorCitOb3JtYWxseSB5b3UgY2FuIGp1c3QgZG8gIm1ha2UiIGZvbGxvd2VkIGJ5ICJtYWtlIGluc3RhbGwiLCBhbmQgdGhhdAord2lsbCBpbnN0YWxsIHRoZSBnaXQgcHJvZ3JhbXMgaW4geW91ciBvd24gfi9iaW4vIGRpcmVjdG9yeS4gIElmIHlvdSB3YW50Cit0byBkbyBhIGdsb2JhbCBpbnN0YWxsLCB5b3UgY2FuIGRvCisKKwkkIG1ha2UgcHJlZml4PS91c3IgYWxsIGRvYyBpbmZvIDsjIGFzIHlvdXJzZWxmCisJIyBtYWtlIHByZWZpeD0vdXNyIGluc3RhbGwgaW5zdGFsbC1kb2MgaW5zdGFsbC1odG1sIGluc3RhbGwtaW5mbyA7IyBhcyByb290CisKKyhvciBwcmVmaXg9L3Vzci9sb2NhbCwgb2YgY291cnNlKS4gIEp1c3QgbGlrZSBhbnkgcHJvZ3JhbSBzdWl0ZQordGhhdCB1c2VzICRwcmVmaXgsIHRoZSBidWlsdCByZXN1bHRzIGhhdmUgc29tZSBwYXRocyBlbmNvZGVkLAord2hpY2ggYXJlIGRlcml2ZWQgZnJvbSAkcHJlZml4LCBzbyAibWFrZSBhbGw7IG1ha2UgcHJlZml4PS91c3IKK2luc3RhbGwiIHdvdWxkIG5vdCB3b3JrLgorCitUaGUgYmVnaW5uaW5nIG9mIHRoZSBNYWtlZmlsZSBkb2N1bWVudHMgbWFueSB2YXJpYWJsZXMgdGhhdCBhZmZlY3QgdGhlIHdheQorZ2l0IGlzIGJ1aWx0LiAgWW91IGNhbiBvdmVycmlkZSB0aGVtIGVpdGhlciBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIG9yIGluIGEKK2NvbmZpZy5tYWsgZmlsZS4KKworQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHVzZSBhdXRvY29uZiBnZW5lcmF0ZWQgLi9jb25maWd1cmUgc2NyaXB0IHRvCitzZXQgdXAgaW5zdGFsbCBwYXRocyAodmlhIGNvbmZpZy5tYWsuYXV0b2dlbiksIHNvIHlvdSBjYW4gd3JpdGUgaW5zdGVhZAorCisJJCBtYWtlIGNvbmZpZ3VyZSA7IyBhcyB5b3Vyc2VsZgorCSQgLi9jb25maWd1cmUgLS1wcmVmaXg9L3VzciA7IyBhcyB5b3Vyc2VsZgorCSQgbWFrZSBhbGwgZG9jIDsjIGFzIHlvdXJzZWxmCisJIyBtYWtlIGluc3RhbGwgaW5zdGFsbC1kb2MgaW5zdGFsbC1odG1sOyMgYXMgcm9vdAorCitJZiB5b3UncmUgd2lsbGluZyB0byB0cmFkZSBvZmYgKG11Y2gpIGxvbmdlciBidWlsZCB0aW1lIGZvciBhIGxhdGVyCitmYXN0ZXIgZ2l0IHlvdSBjYW4gYWxzbyBkbyBhIHByb2ZpbGUgZmVlZGJhY2sgYnVpbGQgd2l0aAorCisJJCBtYWtlIHByZWZpeD0vdXNyIFBST0ZJTEU9QlVJTEQgYWxsCisJIyBtYWtlIHByZWZpeD0vdXNyIFBST0ZJTEU9QlVJTEQgaW5zdGFsbAorCitUaGlzIHdpbGwgcnVuIHRoZSBjb21wbGV0ZSB0ZXN0IHN1aXRlIGFzIHRyYWluaW5nIHdvcmtsb2FkIGFuZCB0aGVuCityZWJ1aWxkIGdpdCB3aXRoIHRoZSBnZW5lcmF0ZWQgcHJvZmlsZSBmZWVkYmFjay4gVGhpcyByZXN1bHRzIGluIGEgZ2l0Cit3aGljaCBpcyBhIGZldyBwZXJjZW50IGZhc3RlciBvbiBDUFUgaW50ZW5zaXZlIHdvcmtsb2Fkcy4gIFRoaXMKK21heSBiZSBhIGdvb2QgdHJhZGVvZmYgZm9yIGRpc3RyaWJ1dGlvbiBwYWNrYWdlcnMuCisKK09yIGlmIHlvdSBqdXN0IHdhbnQgdG8gaW5zdGFsbCBhIHByb2ZpbGUtb3B0aW1pemVkIHZlcnNpb24gb2YgZ2l0IGludG8KK3lvdXIgaG9tZSBkaXJlY3RvcnksIHlvdSBjb3VsZCBydW46CisKKwkkIG1ha2UgUFJPRklMRT1CVUlMRCBpbnN0YWxsCisKK0FzIGEgY2F2ZWF0OiBhIHByb2ZpbGUtb3B0aW1pemVkIGJ1aWxkIHRha2VzIGEgKmxvdCogbG9uZ2VyIHNpbmNlIHRoZQorZ2l0IHRyZWUgbXVzdCBiZSBidWlsdCB0d2ljZSwgYW5kIGluIG9yZGVyIGZvciB0aGUgcHJvZmlsaW5nCittZWFzdXJlbWVudHMgdG8gd29yayBwcm9wZXJseSwgY2NhY2hlIG11c3QgYmUgZGlzYWJsZWQgYW5kIHRoZSB0ZXN0CitzdWl0ZSBoYXMgdG8gYmUgcnVuIHVzaW5nIG9ubHkgYSBzaW5nbGUgQ1BVLiAgSW4gYWRkaXRpb24sIHRoZSBwcm9maWxlCitmZWVkYmFjayBidWlsZCBzdGFnZSBjdXJyZW50bHkgZ2VuZXJhdGVzIGEgbG90IG9mIGFkZGl0aW9uYWwgY29tcGlsZXIKK3dhcm5pbmdzLgorCitJc3N1ZXMgb2Ygbm90ZToKKworIC0gQW5jaWVudCB2ZXJzaW9ucyBvZiBHTlUgSW50ZXJhY3RpdmUgVG9vbHMgKHByZS00LjkuMikgaW5zdGFsbGVkIGEKKyAgIHByb2dyYW0gImdpdCIsIHdob3NlIG5hbWUgY29uZmxpY3RzIHdpdGggdGhpcyBwcm9ncmFtLiAgQnV0IHdpdGgKKyAgIHZlcnNpb24gNC45LjIsIGFmdGVyIGxvbmcgaGlhdHVzIHdpdGhvdXQgYWN0aXZlIG1haW50ZW5hbmNlIChzaW5jZQorICAgYXJvdW5kIDE5OTcpLCBpdCBjaGFuZ2VkIGl0cyBuYW1lIHRvIGdudWl0IGFuZCB0aGUgbmFtZSBjb25mbGljdCBpcyBubworICAgbG9uZ2VyIGEgcHJvYmxlbS4KKworICAgTk9URTogV2hlbiBjb21waWxlZCB3aXRoIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb3B0aW9uLCB0aGUgR05VCisgICBJbnRlcmFjdGl2ZSBUb29scyBwYWNrYWdlIHN0aWxsIGNhbiBpbnN0YWxsICJnaXQiLCBidXQgeW91IGNhbiBidWlsZCBpdAorICAgd2l0aCAtLWRpc2FibGUtdHJhbnNpdGlvbiBvcHRpb24gdG8gYXZvaWQgdGhpcy4KKworIC0gWW91IGNhbiB1c2UgZ2l0IGFmdGVyIGJ1aWxkaW5nIGJ1dCB3aXRob3V0IGluc3RhbGxpbmcgaWYgeW91IHdhbnQKKyAgIHRvIHRlc3QgZHJpdmUgaXQuICBTaW1wbHkgcnVuIGdpdCBmb3VuZCBpbiBiaW4td3JhcHBlcnMgZGlyZWN0b3J5CisgICBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LCBvciBwcmVwZW5kIHRoYXQgZGlyZWN0b3J5IHRvIHlvdXIgJFBBVEguCisgICBUaGlzIGhvd2V2ZXIgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBydW5uaW5nIGFuIGluc3RhbGxlZCBnaXQsIGFzCisgICB5b3UgYWx3YXlzIG5lZWQgYW4gZXh0cmEgZm9yaytleGVjIHRvIHJ1biBhbnkgZ2l0IHN1YmNvbW1hbmQuCisKKyAgIEl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHVzZSBnaXQgd2l0aG91dCBpbnN0YWxsaW5nIGJ5IHNldHRpbmcgYSBmZXcKKyAgIGVudmlyb25tZW50IHZhcmlhYmxlcywgd2hpY2ggd2FzIHRoZSB3YXkgdGhpcyB3YXMgZG9uZQorICAgdHJhZGl0aW9uYWxseS4gIEJ1dCB1c2luZyBnaXQgZm91bmQgaW4gYmluLXdyYXBwZXJzIGRpcmVjdG9yeSBpbgorICAgdGhlIGJ1aWxkIGRpcmVjdG9yeSBpcyBmYXIgc2ltcGxlci4gIEFzIGEgaGlzdG9yaWNhbCByZWZlcmVuY2UsIHRoZQorICAgb2xkIHdheSB3ZW50IGxpa2UgdGhpczoKKworCUdJVF9FWEVDX1BBVEg9YHB3ZGAKKwlQQVRIPWBwd2RgOiRQQVRICisJR0lUUEVSTExJQj1gcHdkYC9wZXJsL2JsaWIvbGliCisJZXhwb3J0IEdJVF9FWEVDX1BBVEggUEFUSCBHSVRQRVJMTElCCisKKyAtIEdpdCBpcyByZWFzb25hYmx5IHNlbGYtc3VmZmljaWVudCwgYnV0IGRvZXMgZGVwZW5kIG9uIGEgZmV3IGV4dGVybmFsCisgICBwcm9ncmFtcyBhbmQgbGlicmFyaWVzLiAgR2l0IGNhbiBiZSB1c2VkIHdpdGhvdXQgbW9zdCBvZiB0aGVtIGJ5IGFkZGluZworICAgdGhlIGFwcHJvcmlhdGUgIk5PXzxMSUJSQVJZPj1ZZXNQbGVhc2UiIHRvIHRoZSBtYWtlIGNvbW1hbmQgbGluZSBvcgorICAgY29uZmlnLm1hayBmaWxlLgorCisJLSAiemxpYiIsIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5LiBHaXQgd29uJ3QgYnVpbGQgd2l0aG91dCBpdC4KKworCS0gInNzaCIgaXMgdXNlZCB0byBwdXNoIGFuZCBwdWxsIG92ZXIgdGhlIG5ldC4KKworCS0gQSBQT1NJWC1jb21wbGlhbnQgc2hlbGwgaXMgcmVxdWlyZWQgdG8gcnVuIG1hbnkgc2NyaXB0cyBuZWVkZWQKKwkgIGZvciBldmVyeWRheSB1c2UgKGUuZy4gImJpc2VjdCIsICJwdWxsIikuCisKKwktICJQZXJsIiB2ZXJzaW9uIDUuOCBvciBsYXRlciBpcyBuZWVkZWQgdG8gdXNlIHNvbWUgb2YgdGhlCisJICBmZWF0dXJlcyAoZS5nLiBwcmVwYXJpbmcgYSBwYXJ0aWFsIGNvbW1pdCB1c2luZyAiZ2l0IGFkZCAtaS8tcCIsCisJICBpbnRlcmFjdGluZyB3aXRoIHN2biByZXBvc2l0b3JpZXMgd2l0aCAiZ2l0IHN2biIpLiAgSWYgeW91IGNhbgorCSAgbGl2ZSB3aXRob3V0IHRoZXNlLCB1c2UgTk9fUEVSTC4gIE5vdGUgdGhhdCByZWNlbnQgcmVsZWFzZXMgb2YKKwkgIFJlZGhhdC9GZWRvcmEgYXJlIHJlcG9ydGVkIHRvIHNoaXAgUGVybCBiaW5hcnkgcGFja2FnZSB3aXRoIHNvbWUKKwkgIGNvcmUgbW9kdWxlcyBzdHJpcHBlZCBhd2F5IChzZWUgaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvNDc3MjM0LyksCisJICBzbyB5b3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGFkZGl0aW9uYWwgcGFja2FnZXMgb3RoZXIgdGhhbiBQZXJsCisJICBpdHNlbGYsIGUuZy4gVGltZTo6SGlSZXMuCisKKwktICJvcGVuc3NsIiBsaWJyYXJ5IGlzIHVzZWQgYnkgZ2l0LWltYXAtc2VuZCB0byB1c2UgSU1BUCBvdmVyIFNTTC4KKwkgIElmIHlvdSBkb24ndCBuZWVkIGl0LCB1c2UgTk9fT1BFTlNTTC4KKworCSAgQnkgZGVmYXVsdCwgZ2l0IHVzZXMgT3BlblNTTCBmb3IgU0hBMSBidXQgaXQgd2lsbCB1c2UgaXQncyBvd24KKwkgIGxpYnJhcnkgKGluc3BpcmVkIGJ5IE1vemlsbGEncykgd2l0aCBlaXRoZXIgTk9fT1BFTlNTTCBvcgorCSAgQkxLX1NIQTEuICBBbHNvIGluY2x1ZGVkIGlzIGEgdmVyc2lvbiBvcHRpbWl6ZWQgZm9yIFBvd2VyUEMKKwkgIChQUENfU0hBMSkuCisKKwktICJsaWJjdXJsIiBsaWJyYXJ5IGlzIHVzZWQgYnkgZ2l0LWh0dHAtZmV0Y2ggYW5kIGdpdC1mZXRjaC4gIFlvdQorCSAgbWlnaHQgYWxzbyB3YW50IHRoZSAiY3VybCIgZXhlY3V0YWJsZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCSAgSWYgeW91IGRvIG5vdCB1c2UgaHR0cDovLyBvciBodHRwczovLyByZXBvc2l0b3JpZXMsIHlvdSBkbyBub3QKKwkgIGhhdmUgdG8gaGF2ZSB0aGVtICh1c2UgTk9fQ1VSTCkuCisKKwktICJleHBhdCIgbGlicmFyeTsgZ2l0LWh0dHAtcHVzaCB1c2VzIGl0IGZvciByZW1vdGUgbG9jaworCSAgbWFuYWdlbWVudCBvdmVyIERBVi4gIFNpbWlsYXIgdG8gImN1cmwiIGFib3ZlLCB0aGlzIGlzIG9wdGlvbmFsCisJICAod2l0aCBOT19FWFBBVCkuCisKKwktICJ3aXNoIiwgdGhlIFRjbC9UayB3aW5kb3dpbmcgc2hlbGwgaXMgdXNlZCBpbiBnaXRrIHRvIHNob3cgdGhlCisJICBoaXN0b3J5IGdyYXBoaWNhbGx5LCBhbmQgaW4gZ2l0LWd1aS4gIElmIHlvdSBkb24ndCB3YW50IGdpdGsgb3IKKwkgIGdpdC1ndWksIHlvdSBjYW4gdXNlIE5PX1RDTFRLLgorCisJLSBBIGdldHRleHQgbGlicmFyeSBpcyB1c2VkIGJ5IGRlZmF1bHQgZm9yIGxvY2FsaXppbmcgR2l0LiBUaGUKKwkgIHByaW1hcnkgdGFyZ2V0IGlzIEdOVSBsaWJpbnRsLCBidXQgdGhlIFNvbGFyaXMgZ2V0dGV4dAorCSAgaW1wbGVtZW50YXRpb24gYWxzbyB3b3Jrcy4KKworCSAgV2UgbmVlZCBhIGdldHRleHQuaCBvbiB0aGUgc3lzdGVtIGZvciBDIGNvZGUsIGdldHRleHQuc2ggKG9yCisJICBTb2xhcmlzIGdldHRleHQoMSkpIGZvciBzaGVsbCBzY3JpcHRzLCBhbmQgbGliaW50bC1wZXJsIGZvciBQZXJsCisJICBwcm9ncmFtcy4KKworCSAgU2V0IE5PX0dFVFRFWFQgdG8gZGlzYWJsZSBsb2NhbGl6YXRpb24gc3VwcG9ydCBhbmQgbWFrZSBHaXQgb25seQorCSAgdXNlIEVuZ2xpc2guIFVuZGVyIGF1dG9jb25mIHRoZSBjb25maWd1cmUgc2NyaXB0IHdpbGwgZG8gdGhpcworCSAgYXV0b21hdGljYWxseSBpZiBpdCBjYW4ndCBmaW5kIGxpYmludGwgb24gdGhlIHN5c3RlbS4KKworCS0gUHl0aG9uIHZlcnNpb24gMi42IG9yIGxhdGVyIGlzIG5lZWRlZCB0byB1c2UgdGhlIGdpdC1wNAorCSAgaW50ZXJmYWNlIHRvIFBlcmZvcmNlLgorCisgLSBTb21lIHBsYXRmb3JtIHNwZWNpZmljIGlzc3VlcyBhcmUgZGVhbHQgd2l0aCBNYWtlZmlsZSBydWxlcywKKyAgIGJ1dCBkZXBlbmRpbmcgb24geW91ciBzcGVjaWZpYyBpbnN0YWxsYXRpb24sIHlvdSBtYXkgbm90CisgICBoYXZlIGFsbCB0aGUgbGlicmFyaWVzL3Rvb2xzIG5lZWRlZCwgb3IgeW91IG1heSBoYXZlCisgICBuZWNlc3NhcnkgbGlicmFyaWVzIGF0IHVudXN1YWwgbG9jYXRpb25zLiAgUGxlYXNlIGxvb2sgYXQgdGhlCisgICB0b3Agb2YgdGhlIE1ha2VmaWxlIHRvIHNlZSB3aGF0IGNhbiBiZSBhZGp1c3RlZCBmb3IgeW91ciBuZWVkcy4KKyAgIFlvdSBjYW4gcGxhY2UgbG9jYWwgc2V0dGluZ3MgaW4gY29uZmlnLm1hayBhbmQgdGhlIE1ha2VmaWxlCisgICB3aWxsIGluY2x1ZGUgdGhlbS4gIE5vdGUgdGhhdCBjb25maWcubWFrIGlzIG5vdCBkaXN0cmlidXRlZDsKKyAgIHRoZSBuYW1lIGlzIHJlc2VydmVkIGZvciBsb2NhbCBzZXR0aW5ncy4KKworIC0gVG8gYnVpbGQgYW5kIGluc3RhbGwgZG9jdW1lbnRhdGlvbiBzdWl0ZSwgeW91IG5lZWQgdG8gaGF2ZQorICAgdGhlIGFzY2lpZG9jL3htbHRvIHRvb2xjaGFpbi4gIEJlY2F1c2Ugbm90IG1hbnkgcGVvcGxlIGFyZQorICAgaW5jbGluZWQgdG8gaW5zdGFsbCB0aGUgdG9vbHMsIHRoZSBkZWZhdWx0IGJ1aWxkIHRhcmdldAorICAgKCJtYWtlIGFsbCIpIGRvZXMgX25vdF8gYnVpbGQgdGhlbS4KKworICAgIm1ha2UgZG9jIiBidWlsZHMgZG9jdW1lbnRhdGlvbiBpbiBtYW4gYW5kIGh0bWwgZm9ybWF0czsgdGhlcmUgYXJlCisgICBhbHNvICJtYWtlIG1hbiIsICJtYWtlIGh0bWwiIGFuZCAibWFrZSBpbmZvIi4gTm90ZSB0aGF0ICJtYWtlIGh0bWwiCisgICByZXF1aXJlcyBhc2NpaWRvYywgYnV0IG5vdCB4bWx0by4gIm1ha2UgbWFuIiAoYW5kIHRodXMgbWFrZSBkb2MpCisgICByZXF1aXJlcyBib3RoLgorCisgICAibWFrZSBpbnN0YWxsLWRvYyIgaW5zdGFsbHMgZG9jdW1lbnRhdGlvbiBpbiBtYW4gZm9ybWF0IG9ubHk7IHRoZXJlCisgICBhcmUgYWxzbyAibWFrZSBpbnN0YWxsLW1hbiIsICJtYWtlIGluc3RhbGwtaHRtbCIgYW5kICJtYWtlCisgICBpbnN0YWxsLWluZm8iLgorCisgICBCdWlsZGluZyBhbmQgaW5zdGFsbGluZyB0aGUgaW5mbyBmaWxlIGFkZGl0aW9uYWxseSByZXF1aXJlcworICAgbWFrZWluZm8gYW5kIGRvY2Jvb2syWC4gIFZlcnNpb24gMC44LjMgaXMga25vd24gdG8gd29yay4KKworICAgQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgdGhlIHBkZiBmaWxlIGFkZGl0aW9uYWxseSByZXF1aXJlcworICAgZGJsYXRleC4gIFZlcnNpb24gPj0gMC4yLjcgaXMga25vd24gdG8gd29yay4KKworICAgQWxsIGZvcm1hdHMgcmVxdWlyZSBhdCBsZWFzdCBhc2NpaWRvYyA4LjQuMS4KKworICAgVGhlcmUgYXJlIGFsc28gIm1ha2UgcXVpY2staW5zdGFsbC1kb2MiLCAibWFrZSBxdWljay1pbnN0YWxsLW1hbiIKKyAgIGFuZCAibWFrZSBxdWljay1pbnN0YWxsLWh0bWwiIHdoaWNoIGluc3RhbGwgcHJlZm9ybWF0dGVkIG1hbiBwYWdlcworICAgYW5kIGh0bWwgZG9jdW1lbnRhdGlvbi4gVG8gdXNlIHRoZXNlIGJ1aWxkIHRhcmdldHMsIHlvdSBuZWVkIHRvCisgICBjbG9uZSB0d28gc2VwYXJhdGUgZ2l0LWh0bWxkb2NzIGFuZCBnaXQtbWFucGFnZXMgcmVwb3NpdG9yaWVzIG5leHQKKyAgIHRvIHRoZSBjbG9uZSBvZiBnaXQgaXRzZWxmLgorCisgICBJdCBoYXMgYmVlbiByZXBvcnRlZCB0aGF0IGRvY2Jvb2steHNsIHZlcnNpb24gMS43MiBhbmQgMS43MyBhcmUKKyAgIGJ1Z2d5OyAxLjcyIG1pc2Zvcm1hdHMgbWFudWFsIHBhZ2VzIGZvciBjYWxsb3V0cywgYW5kIDEuNzMgbmVlZHMKKyAgIHRoZSBwYXRjaCBpbiBjb250cmliL3BhdGNoZXMvZG9jYm9vay14c2wtbWFucGFnZXMtY2hhcm1hcC5wYXRjaAorCisgICBVc2VycyBhdHRlbXB0aW5nIHRvIGJ1aWxkIHRoZSBkb2N1bWVudGF0aW9uIG9uIEN5Z3dpbiBtYXkgbmVlZCB0byBlbnN1cmUKKyAgIHRoYXQgdGhlIC9ldGMveG1sL2NhdGFsb2cgZmlsZSBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisgICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKyAgIDwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQworICAgICAgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCIKKyAgID4KKyAgIDxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKyAgICAgPHJld3JpdGVVUkkKKyAgICAgICB1cmlTdGFydFN0cmluZyA9ICJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudCIKKyAgICAgICByZXdyaXRlUHJlZml4ID0gIi91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cyIKKyAgICAgLz4KKyAgICAgPHJld3JpdGVVUkkKKyAgICAgICB1cmlTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjUiCisgICAgICAgcmV3cml0ZVByZWZpeD0iL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sLWR0ZC00LjUiCisgICAgIC8+CisgIDwvY2F0YWxvZz4KKworICBUaGlzIGNhbiBiZSBhY2hpZXZlZCB3aXRoIHRoZSBmb2xsb3dpbmcgdHdvIHhtbGNhdGFsb2cgY29tbWFuZHM6CisKKyAgeG1sY2F0YWxvZyAtLW5vb3V0IFwKKyAgICAgLS1hZGQgcmV3cml0ZVVSSSBcCisgICAgICAgIGh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50IFwKKyAgICAgICAgL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzIFwKKyAgICAgL2V0Yy94bWwvY2F0YWxvZworCisgIHhtbGNhdGFsb2cgLS1ub291dCBcCisgICAgIC0tYWRkIHJld3JpdGVVUkkgXAorICAgICAgICAgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjUveHNsL2N1cnJlbnQgXAorICAgICAgICAgL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sLWR0ZC00LjUgXAorICAgICAvZXRjL3htbC9jYXRhbG9nCmRpZmYgLS1naXQgYS9MR1BMLTIuMSBiL0xHUEwtMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOGIxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9MR1BMLTIuMQpAQCAtMCwwICsxLDUxMSBAQAorCisgV2hpbGUgbW9zdCBvZiB0aGlzIHByb2plY3QgaXMgdW5kZXIgdGhlIEdQTCAoc2VlIENPUFlJTkcpLCB0aGUgeGRpZmYvCisgbGlicmFyeSBhbmQgc29tZSBsaWJjIGNvZGUgZnJvbSBjb21wYXQvIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUKKyBHTlUgTEdQTCwgdmVyc2lvbiAyLjEgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbiBhbmQgc29tZQorIG90aGVyIGZpbGVzIGFyZSB1bmRlciBvdGhlciBsaWNlbnNlcy4gIENoZWNrIHRoZSBpbmRpdmlkdWFsIGZpbGVzIHRvCisgYmUgc3VyZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cworIGFzIHRoZSBzdWNjZXNzb3Igb2YgdGhlIEdOVSBMaWJyYXJ5IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGhlbmNlCisgdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQorc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCBvdGhlciBhdXRob3JzIHdobyBkZWNpZGUgdG8gdXNlIGl0LiAgWW91CitjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCit0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlcgorc3RyYXRlZ3kgdG8gdXNlIGluIGFueSBwYXJ0aWN1bGFyIGNhc2UsIGJhc2VkIG9uIHRoZSBleHBsYW5hdGlvbnMgYmVsb3cuCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLAorbm90IHByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdAoreW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQorZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAoraXQgaWYgeW91IHdhbnQgaXQ7IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGFuZCB1c2UgcGllY2VzIG9mCitpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KK3RoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCitkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCityaWdodHMuICBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IKK3lvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcworb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQoreW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQorY29kZS4gIElmIHlvdSBsaW5rIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQorY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZworaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQorbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwKK3Blcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCisgIFRvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdAordGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcworbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93Cit0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCB0aGUgb3JpZ2luYWwKK2F1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQoraW50cm9kdWNlZCBieSBvdGhlcnMuCisMCisgIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCithbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CitlZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGEKK3Jlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CithbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCitjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGVzc2VyCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAoraXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKK3RoaXMgbGljZW5zZSBmb3IgY2VydGFpbiBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gcGVybWl0IGxpbmtpbmcgdGhvc2UKK2xpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgorCisgIFdoZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nCithIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKK2NvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUKK2VudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAordGhlIGxpYnJhcnkuCisKKyAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdAorZG9lcyBMZXNzIHRvIHByb3RlY3QgdGhlIHVzZXIncyBmcmVlZG9tIHRoYW4gdGhlIG9yZGluYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcworb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcworYXJlIHRoZSByZWFzb24gd2UgdXNlIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtYW55CitsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCitzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCisKKyAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KK2VuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzCithIGRlLWZhY3RvIHN0YW5kYXJkLiAgVG8gYWNoaWV2ZSB0aGlzLCBub24tZnJlZSBwcm9ncmFtcyBtdXN0IGJlCithbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCitsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKK2Nhc2UsIHRoZXJlIGlzIGxpdHRsZSB0byBnYWluIGJ5IGxpbWl0aW5nIHRoZSBmcmVlIGxpYnJhcnkgdG8gZnJlZQorc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBJbiBvdGhlciBjYXNlcywgcGVybWlzc2lvbiB0byB1c2UgYSBwYXJ0aWN1bGFyIGxpYnJhcnkgaW4gbm9uLWZyZWUKK3Byb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgorZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgorbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VCitvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZworc3lzdGVtLgorCisgIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCit1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcworbGlua2VkIHdpdGggdGhlIExpYnJhcnkgaGFzIHRoZSBmcmVlZG9tIGFuZCB0aGUgd2hlcmV3aXRoYWwgdG8gcnVuCit0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0CitiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KKwwKKyAgICAgICAgICAgICAgICAgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCitwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgorb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgorRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQorcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCisod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgorY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKK3BvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKK2luY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KK2FuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZQorICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCisgICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sCisgICAgcmF0aGVyIHRoYW4gY29weWluZyBsaWJyYXJ5IGZ1bmN0aW9ucyBpbnRvIHRoZSBleGVjdXRhYmxlLCBhbmQgKDIpCisgICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgorICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcworICAgIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gdGhhdCB0aGUgd29yayB3YXMgbWFkZSB3aXRoLgorCisgICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKKyAgICBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMKKyAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCisgICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCisgICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKKyAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKKyAgICBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKKyAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKKyAgICBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KKworICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKK0xpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yCityZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKK3RoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCitub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCit0aGlzIExpY2Vuc2UuCisMCisgIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQorcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LAorYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCithbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKK3NvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cworZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKK3dyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwordmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgorU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLAorYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBMaWJyYXJ5CitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKKyJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKK2xpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorDAorICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsCit3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcworY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIKK2RlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKK29mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nCithbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk8gV0FSUkFOVFkKKworICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KK1dBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCitFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUgorT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKK0tJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKK0xJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FCitUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KK1dSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZCitBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQorRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUKK0xJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKK1JFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCitGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGCitTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK29yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKK3NhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUKKyAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTAKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZTIyYmE1Yy4uZjY5OTc5ZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsMzQ0ICsxLDI5OTIgQEAKKyMgVGhlIGRlZmF1bHQgdGFyZ2V0IG9mIHRoaXMgTWFrZWZpbGUgaXMuLi4KIGFsbDo6CiAKICMgRGVmaW5lIFY9MSB0byBoYXZlIGEgbW9yZSB2ZXJib3NlIGNvbXBpbGUuCiAjCi0jIERlZmluZSBOT19NU0dGTVQgaWYgeW91IGRvIG5vdCBoYXZlIG1zZ2ZtdCBmcm9tIHRoZSBHTlUgZ2V0dGV4dAotIyBwYWNrYWdlIGFuZCB3YW50IHRvIHVzZSBvdXIgcm91Z2ggcHVyZSBUY2wgcG8tPm1zZyB0cmFuc2xhdG9yLgotIyBUQ0xfUEFUSCBtdXN0IGJlIHZhaWxkIGZvciB0aGlzIHRvIHdvcmsuCisjIERlZmluZSBTSEVMTF9QQVRIIHRvIGEgUE9TSVggc2hlbGwgaWYgeW91ciAvYmluL3NoIGlzIGJyb2tlbi4KICMKKyMgRGVmaW5lIFNBTkVfVE9PTF9QQVRIIHRvIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgcGF0aHMgdG8gcHJlcGVuZAorIyB0byBQQVRIIGlmIHlvdXIgdG9vbHMgaW4gL3Vzci9iaW4gYXJlIGJyb2tlbi4KKyMKKyMgRGVmaW5lIFNPQ0tMRU5fVCB0byBhIHN1aXRhYmxlIHR5cGUgKHN1Y2ggYXMgJ3NpemVfdCcpIGlmIHlvdXIKKyMgc3lzdGVtIGhlYWRlcnMgZG8gbm90IGRlZmluZSBhIHNvY2tsZW5fdCB0eXBlLgorIworIyBEZWZpbmUgSU5MSU5FIHRvIGEgc3VpdGFibGUgc3Vic3RpdHV0ZSAoc3VjaCBhcyAnX19pbmxpbmUnIG9yICcnKSBpZiBnaXQKKyMgZmFpbHMgdG8gY29tcGlsZSB3aXRoIGVycm9ycyBhYm91dCB1bmRlZmluZWQgaW5saW5lIGZ1bmN0aW9ucyBvciBzaW1pbGFyLgorIworIyBEZWZpbmUgU05QUklOVEZfUkVUVVJOU19CT0dVUyBpZiB5b3VyIGFyZSBvbiBhIHN5c3RlbSB3aGljaCBzbnByaW50ZigpCisjIG9yIHZzbnByaW50ZigpIHJldHVybiAtMSBpbnN0ZWFkIG9mIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCisjIGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoZSBmaW5hbCBzdHJpbmcgaWYgZW5vdWdoIHNwYWNlIGhhZCBiZWVuIGF2YWlsYWJsZS4KKyMKKyMgRGVmaW5lIEZSRUFEX1JFQURTX0RJUkVDVE9SSUVTIGlmIHlvdXIgYXJlIG9uIGEgc3lzdGVtIHdoaWNoIHN1Y2NlZWRzCisjIHdoZW4gYXR0ZW1wdGluZyB0byByZWFkIGZyb20gYW4gZm9wZW4nZWQgZGlyZWN0b3J5LgorIworIyBEZWZpbmUgTk9fT1BFTlNTTCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UgZG8gbm90IGhhdmUgT3BlblNTTC4KKyMgVGhpcyBhbHNvIGltcGxpZXMgQkxLX1NIQTEuCisjCisjIERlZmluZSBVU0VfTElCUENSRSBpZiB5b3UgaGF2ZSBhbmQgd2FudCB0byB1c2UgbGlicGNyZS4gZ2l0LWdyZXAgd2lsbCBiZQorIyBhYmxlIHRvIHVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucy4KKyMKKyMgRGVmaW5lIExJQlBDUkVESVI9L2Zvby9iYXIgaWYgeW91ciBsaWJwY3JlIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcmUgaW4KKyMgL2Zvby9iYXIvaW5jbHVkZSBhbmQgL2Zvby9iYXIvbGliIGRpcmVjdG9yaWVzLgorIworIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgbGliY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1mZXRjaCBhbmQKKyMgZ2l0LWh0dHAtcHVzaCBhcmUgbm90IGJ1aWx0LCBhbmQgeW91IGNhbm5vdCB1c2UgaHR0cDovLyBhbmQgaHR0cHM6Ly8KKyMgdHJhbnNwb3J0cyAobmVpdGhlciBzbWFydCBub3IgZHVtYikuCisjCisjIERlZmluZSBDVVJMRElSPS9mb28vYmFyIGlmIHlvdXIgY3VybCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KKyMKKyMgRGVmaW5lIE5PX0VYUEFUIGlmIHlvdSBkbyBub3QgaGF2ZSBleHBhdCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdXNoIGlzCisjIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgcHVzaCB1c2luZyBodHRwOi8vIGFuZCBodHRwczovLyB0cmFuc3BvcnRzIChkdW1iKS4KKyMKKyMgRGVmaW5lIEVYUEFURElSPS9mb28vYmFyIGlmIHlvdXIgZXhwYXQgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgorIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCisjCisjIERlZmluZSBOT19HRVRURVhUIGlmIHlvdSBkb24ndCB3YW50IEdpdCBvdXRwdXQgdG8gYmUgdHJhbnNsYXRlZC4KKyMgQSB0cmFuc2xhdGVkIEdpdCByZXF1aXJlcyBHTlUgbGliaW50bCBvciBhbm90aGVyIGdldHRleHQgaW1wbGVtZW50YXRpb24sCisjIHBsdXMgbGliaW50bC1wZXJsIGF0IHJ1bnRpbWUuCisjCisjIERlZmluZSBVU0VfR0VUVEVYVF9TQ0hFTUUgYW5kIHNldCBpdCB0byAnZmFsbHRocm91Z2gnLCBpZiB5b3UgZG9uJ3QgdHJ1c3QKKyMgdGhlIGluc3RhbGxlZCBnZXR0ZXh0IHRyYW5zbGF0aW9uIG9mIHRoZSBzaGVsbCBzY3JpcHRzIG91dHB1dC4KKyMKKyMgRGVmaW5lIEhBVkVfTElCQ0hBUlNFVF9IIGlmIHlvdSBoYXZlbid0IHNldCBOT19HRVRURVhUIGFuZCB5b3UgY2FuJ3QKKyMgdHJ1c3QgdGhlIGxhbmdpbmZvLmgncyBubF9sYW5naW5mbyhDT0RFU0VUKSBmdW5jdGlvbiB0byByZXR1cm4gdGhlCisjIGN1cnJlbnQgY2hhcmFjdGVyIHNldC4gR05VIGFuZCBTb2xhcmlzIGhhdmUgYSBubF9sYW5naW5mbyhDT0RFU0VUKSwKKyMgRnJlZUJTRCBjYW4gdXNlIGVpdGhlciwgYnV0IE1pbkdXIGFuZCBzb21lIG90aGVycyBuZWVkIHRvIHVzZQorIyBsaWJjaGFyc2V0LmgncyBsb2NhbGVfY2hhcnNldCgpIGluc3RlYWQuCisjCisjIERlZmluZSBDSEFSU0VUX0xJQiB0byB5b3UgbmVlZCB0byBsaW5rIHdpdGggbGlicmFyeSBvdGhlciB0aGFuIC1saWNvbnYgdG8KKyMgdXNlIGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24uICBPbiBzb21lIHBsYXRmb3JtcyB0aGlzIG5lZWRzIHRvIHNldCB0bworIyAtbGNoYXJzZXQKKyMKKyMgRGVmaW5lIExJQkNfQ09OVEFJTlNfTElCSU5UTCBpZiB5b3VyIGdldHRleHQgaW1wbGVtZW50YXRpb24gZG9lc24ndAorIyBuZWVkIC1saW50bCB3aGVuIGxpbmtpbmcuCisjCisjIERlZmluZSBOT19NU0dGTVRfRVhURU5ERURfT1BUSU9OUyBpZiB5b3VyIGltcGxlbWVudGF0aW9uIG9mIG1zZ2ZtdAorIyBkb2Vzbid0IHN1cHBvcnQgR05VIGV4dGVuc2lvbnMgbGlrZSAtLWNoZWNrIGFuZCAtLXN0YXRpc3RpY3MKKyMKKyMgRGVmaW5lIEhBVkVfUEFUSFNfSCBpZiB5b3UgaGF2ZSBwYXRocy5oIGFuZCB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBQQVRICisjIGl0IHNwZWNpZmllcy4KKyMKKyMgRGVmaW5lIE5PX0RfSU5PX0lOX0RJUkVOVCBpZiB5b3UgZG9uJ3QgaGF2ZSBkX2lubyBpbiB5b3VyIHN0cnVjdCBkaXJlbnQuCisjCisjIERlZmluZSBOT19EX1RZUEVfSU5fRElSRU5UIGlmIHlvdXIgcGxhdGZvcm0gZGVmaW5lcyBEVF9VTktOT1dOIGJ1dCBsYWNrcworIyBkX3R5cGUgaW4gc3RydWN0IGRpcmVudCAoQ3lnd2luIDEuNSwgZml4ZWQgaW4gQ3lnd2luIDEuNykuCisjCisjIERlZmluZSBOT19TVFJDQVNFU1RSIGlmIHlvdSBkb24ndCBoYXZlIHN0cmNhc2VzdHIuCisjCisjIERlZmluZSBOT19NRU1NRU0gaWYgeW91IGRvbid0IGhhdmUgbWVtbWVtLgorIworIyBEZWZpbmUgTk9fU1RSTENQWSBpZiB5b3UgZG9uJ3QgaGF2ZSBzdHJsY3B5LgorIworIyBEZWZpbmUgTk9fU1RSVE9VTUFYIGlmIHlvdSBkb24ndCBoYXZlIGJvdGggc3RydG9pbWF4IGFuZCBzdHJ0b3VtYXggaW4gdGhlCisjIEMgbGlicmFyeS4gSWYgeW91ciBjb21waWxlciBhbHNvIGRvZXMgbm90IHN1cHBvcnQgbG9uZyBsb25nIG9yIGRvZXMgbm90IGhhdmUKKyMgc3RydG91bGwsIGRlZmluZSBOT19TVFJUT1VMTC4KKyMKKyMgRGVmaW5lIE5PX1NFVEVOViBpZiB5b3UgZG9uJ3QgaGF2ZSBzZXRlbnYgaW4gdGhlIEMgbGlicmFyeS4KKyMKKyMgRGVmaW5lIE5PX1VOU0VURU5WIGlmIHlvdSBkb24ndCBoYXZlIHVuc2V0ZW52IGluIHRoZSBDIGxpYnJhcnkuCisjCisjIERlZmluZSBOT19NS0RURU1QIGlmIHlvdSBkb24ndCBoYXZlIG1rZHRlbXAgaW4gdGhlIEMgbGlicmFyeS4KKyMKKyMgRGVmaW5lIE1LRElSX1dPX1RSQUlMSU5HX1NMQVNIIGlmIHlvdXIgbWtkaXIoKSBjYW4ndCBkZWFsIHdpdGggdHJhaWxpbmcgc2xhc2guCisjCisjIERlZmluZSBOT19NS1NURU1QUyBpZiB5b3UgZG9uJ3QgaGF2ZSBta3N0ZW1wcyBpbiB0aGUgQyBsaWJyYXJ5LgorIworIyBEZWZpbmUgTk9fU1RSVE9LX1IgaWYgeW91IGRvbid0IGhhdmUgc3RydG9rX3IgaW4gdGhlIEMgbGlicmFyeS4KKyMKKyMgRGVmaW5lIE5PX0ZOTUFUQ0ggaWYgeW91IGRvbid0IGhhdmUgZm5tYXRjaCBpbiB0aGUgQyBsaWJyYXJ5LgorIworIyBEZWZpbmUgTk9fRk5NQVRDSF9DQVNFRk9MRCBpZiB5b3VyIGZubWF0Y2ggZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRoZQorIyBGTk1fQ0FTRUZPTEQgR05VIGV4dGVuc2lvbi4KKyMKKyMgRGVmaW5lIE5PX0dFQ09TX0lOX1BXRU5UIGlmIHlvdSBkb24ndCBoYXZlIHB3X2dlY29zIGluIHN0cnVjdCBwYXNzd2QKKyMgaW4gdGhlIEMgbGlicmFyeS4KKyMKKyMgRGVmaW5lIE5PX0xJQkdFTl9IIGlmIHlvdSBkb24ndCBoYXZlIGxpYmdlbi5oLgorIworIyBEZWZpbmUgTkVFRFNfTElCR0VOIGlmIHlvdXIgbGliZ2VuIG5lZWRzIC1sZ2VuIHdoZW4gbGlua2luZworIworIyBEZWZpbmUgTk9fU1lTX1NFTEVDVF9IIGlmIHlvdSBkb24ndCBoYXZlIHN5cy9zZWxlY3QuaC4KKyMKKyMgRGVmaW5lIE5PX1NZTUxJTktfSEVBRCBpZiB5b3UgbmV2ZXIgd2FudCAuZ2l0L0hFQUQgdG8gYmUgYSBzeW1ib2xpYyBsaW5rLgorIyBFbmFibGUgaXQgb24gV2luZG93cy4gIEJ5IGRlZmF1bHQsIHN5bXJlZnMgYXJlIHN0aWxsIHVzZWQuCisjCisjIERlZmluZSBOT19TVk5fVEVTVFMgaWYgeW91IHdhbnQgdG8gc2tpcCB0aW1lLWNvbnN1bWluZyBTVk4gaW50ZXJvcGVyYWJpbGl0eQorIyB0ZXN0cy4gIFRoZXNlIHRlc3RzIHRha2UgdXAgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGhlIHRvdGFsIHRlc3QgdGltZQorIyBidXQgYXJlIG5vdCBuZWVkZWQgdW5sZXNzIHlvdSBwbGFuIHRvIHRhbGsgdG8gU1ZOIHJlcG9zLgorIworIyBEZWZpbmUgTk9fRklOSyBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9uIERhcndpbi9NYWMgT1MgWCwgaGF2ZSBGaW5rCisjIGluc3RhbGxlZCBpbiAvc3csIGJ1dCBkb24ndCB3YW50IEdJVCB0byBsaW5rIGFnYWluc3QgYW55IGxpYnJhcmllcworIyBpbnN0YWxsZWQgdGhlcmUuICBJZiBkZWZpbmVkIHlvdSBtYXkgc3BlY2lmeSB5b3VyIG93biAob3IgRmluaydzKQorIyBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZCBsaWJyYXJ5IGRpcmVjdG9yaWVzIGJ5IGRlZmluaW5nIENGTEFHUworIyBhbmQgTERGTEFHUyBhcHByb3ByaWF0ZWx5LgorIworIyBEZWZpbmUgTk9fREFSV0lOX1BPUlRTIGlmIHlvdSBhcmUgYnVpbGRpbmcgb24gRGFyd2luL01hYyBPUyBYLAorIyBoYXZlIERhcndpblBvcnRzIGluc3RhbGxlZCBpbiAvb3B0L2xvY2FsLCBidXQgZG9uJ3Qgd2FudCBHSVQgdG8KKyMgbGluayBhZ2FpbnN0IGFueSBsaWJyYXJpZXMgaW5zdGFsbGVkIHRoZXJlLiAgSWYgZGVmaW5lZCB5b3UgbWF5CisjIHNwZWNpZnkgeW91ciBvd24gKG9yIERhcndpblBvcnQncykgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKKyMgbGlicmFyeSBkaXJlY3RvcmllcyBieSBkZWZpbmluZyBDRkxBR1MgYW5kIExERkxBR1MgYXBwcm9wcmlhdGVseS4KKyMKKyMgRGVmaW5lIEJMS19TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG1ha2UgdXNlIG9mIHRoZSBidW5kbGVkCisjIG9wdGltaXplZCBDIFNIQTEgcm91dGluZS4KKyMKKyMgRGVmaW5lIFBQQ19TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIG1ha2UgdXNlIG9mCisjIGEgYnVuZGxlZCBTSEExIHJvdXRpbmUgb3B0aW1pemVkIGZvciBQb3dlclBDLgorIworIyBEZWZpbmUgTkVFRFNfQ1JZUFRPX1dJVEhfU1NMIGlmIHlvdSBuZWVkIC1sY3J5cHRvIHdoZW4gdXNpbmcgLWxzc2wgKERhcndpbikuCisjCisjIERlZmluZSBORUVEU19TU0xfV0lUSF9DUllQVE8gaWYgeW91IG5lZWQgLWxzc2wgd2hlbiB1c2luZyAtbGNyeXB0byAoRGFyd2luKS4KKyMKKyMgRGVmaW5lIE5FRURTX1NTTF9XSVRIX0NVUkwgaWYgeW91IG5lZWQgLWxzc2wgd2l0aCAtbGN1cmwgKE1pbml4KS4KKyMKKyMgRGVmaW5lIE5FRURTX0lETl9XSVRIX0NVUkwgaWYgeW91IG5lZWQgLWxpZG4gd2hlbiB1c2luZyAtbGN1cmwgKE1pbml4KS4KKyMKKyMgRGVmaW5lIE5FRURTX0xJQklDT05WIGlmIGxpbmtpbmcgd2l0aCBsaWJjIGlzIG5vdCBlbm91Z2ggKERhcndpbikuCisjCisjIERlZmluZSBORUVEU19MSUJJTlRMX0JFRk9SRV9MSUJJQ09OViBpZiB5b3UgbmVlZCBsaWJpbnRsIGJlZm9yZSBsaWJpY29udi4KKyMKKyMgRGVmaW5lIE5PX0lOVFBUUl9UIGlmIHlvdSBkb24ndCBoYXZlIGludHB0cl90IG5vciB1aW50cHRyX3QuCisjCisjIERlZmluZSBOT19VSU5UTUFYX1QgaWYgeW91IGRvbid0IGhhdmUgdWludG1heF90LgorIworIyBEZWZpbmUgTkVFRFNfU09DS0VUIGlmIGxpbmtpbmcgd2l0aCBsaWJjIGlzIG5vdCBlbm91Z2ggKFN1bk9TLAorIyBQYXRyaWNrIE1hdXJpdHopLgorIworIyBEZWZpbmUgTkVFRFNfUkVTT0xWIGlmIGxpbmtpbmcgd2l0aCAtbG5zbCBhbmQvb3IgLWxzb2NrZXQgaXMgbm90IGVub3VnaC4KKyMgTm90YWJseSBvbiBTb2xhcmlzIGhzdHJlcnJvciByZXNpZGVzIGluIGxpYnJlc29sdiBhbmQgb24gU29sYXJpcyA3CisjIGluZXRfbnRvcCBhbmQgaW5ldF9wdG9uIGFkZGl0aW9uYWxseSByZXNpZGUgdGhlcmUuCisjCisjIERlZmluZSBOT19NTUFQIGlmIHlvdSB3YW50IHRvIGF2b2lkIG1tYXAuCisjCisjIERlZmluZSBOT19TWVNfUE9MTF9IIGlmIHlvdSBkb24ndCBoYXZlIHN5cy9wb2xsLmguCisjCisjIERlZmluZSBOT19QT0xMIGlmIHlvdSBkbyBub3QgaGF2ZSBvciBkb24ndCB3YW50IHRvIHVzZSBwb2xsKCkuCisjIFRoaXMgYWxzbyBpbXBsaWVzIE5PX1NZU19QT0xMX0guCisjCisjIERlZmluZSBOT19QVEhSRUFEUyBpZiB5b3UgZG8gbm90IGhhdmUgb3IgZG8gbm90IHdhbnQgdG8gdXNlIFB0aHJlYWRzLgorIworIyBEZWZpbmUgTk9fUFJFQUQgaWYgeW91IGhhdmUgYSBwcm9ibGVtIHdpdGggcHJlYWQoKSBzeXN0ZW0gY2FsbCAoZS5nLgorIyBjeWd3aW4xLmRsbCBiZWZvcmUgdjEuNS4yMikuCisjCisjIERlZmluZSBOT19TRVRJVElNRVIgaWYgeW91IGRvbid0IGhhdmUgc2V0aXRpbWVyKCkKKyMKKyMgRGVmaW5lIE5PX1NUUlVDVF9JVElNRVJWQUwgaWYgeW91IGRvbid0IGhhdmUgc3RydWN0IGl0aW1lcnZhbAorIyBUaGlzIGFsc28gaW1wbGllcyBOT19TRVRJVElNRVIKKyMKKyMgRGVmaW5lIE5PX1RIUkVBRF9TQUZFX1BSRUFEIGlmIHlvdXIgcHJlYWQoKSBpbXBsZW1lbnRhdGlvbiBpcyBub3QKKyMgdGhyZWFkLXNhZmUuIChlLmcuIGNvbXBhdC9wcmVhZC5jIG9yIGN5Z3dpbikKKyMKKyMgRGVmaW5lIE5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkgaWYgYWNjZXNzaW5nIG9iamVjdHMgaW4gcGFjayBmaWxlcyBpcworIyBnZW5lcmFsbHkgZmFzdGVyIG9uIHlvdXIgcGxhdGZvcm0gdGhhbiBhY2Nlc3NpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorIworIyBEZWZpbmUgTk9fVFJVU1RBQkxFX0ZJTEVNT0RFIGlmIHlvdXIgZmlsZXN5c3RlbSBtYXkgY2xhaW0gdG8gc3VwcG9ydAorIyB0aGUgZXhlY3V0YWJsZSBtb2RlIGJpdCwgYnV0IGRvZXNuJ3QgcmVhbGx5IGRvIHNvLgorIworIyBEZWZpbmUgTk9fSVBWNiBpZiB5b3UgbGFjayBJUHY2IHN1cHBvcnQgYW5kIGdldGFkZHJpbmZvKCkuCisjCisjIERlZmluZSBOT19VTklYX1NPQ0tFVFMgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3Qgb2ZmZXIgdW5peCBzb2NrZXRzLgorIworIyBEZWZpbmUgTk9fU09DS0FERFJfU1RPUkFHRSBpZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IGhhdmUgc3RydWN0CisjIHNvY2thZGRyX3N0b3JhZ2UuCisjCisjIERlZmluZSBOT19JQ09OViBpZiB5b3VyIGxpYmMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBpY29udi4KKyMKKyMgRGVmaW5lIE9MRF9JQ09OViBpZiB5b3VyIGxpYnJhcnkgaGFzIGFuIG9sZCBpY29udigpLCB3aGVyZSB0aGUgc2Vjb25kCisjIChpbnB1dCBidWZmZXIgcG9pbnRlcikgcGFyYW1ldGVyIGlzIGRlY2xhcmVkIHdpdGggdHlwZSAoY29uc3QgY2hhciAqKikuCisjCisjIERlZmluZSBOT19ERUZMQVRFX0JPVU5EIGlmIHlvdXIgemxpYiBkb2VzIG5vdCBoYXZlIGRlZmxhdGVCb3VuZC4KKyMKKyMgRGVmaW5lIE5PX1JfVE9fR0NDX0xJTktFUiBpZiB5b3VyIGdjYyBkb2VzIG5vdCBsaWtlICItUi9wYXRoL2xpYiIKKyMgdGhhdCB0ZWxscyBydW50aW1lIHBhdGhzIHRvIGR5bmFtaWMgbGlicmFyaWVzOworIyAiLVdsLC1ycGF0aD0vcGF0aC9saWIiIGlzIHVzZWQgaW5zdGVhZC4KKyMKKyMgRGVmaW5lIE5PX05PUkVUVVJOIGlmIHVzaW5nIGJ1Z2d5IHZlcnNpb25zIG9mIGdjYyA0LjYrIGFuZCBwcm9maWxlIGZlZWRiYWNrLAorIyBhcyB0aGUgY29tcGlsZXIgY2FuIGNyYXNoIChodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQ5Mjk5KQorIworIyBEZWZpbmUgVVNFX05TRUMgYmVsb3cgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcworIyBhbmQgY3RpbWVzLiBOb3RlIHRoYXQgeW91IG5lZWQgcmVjZW50IGdsaWJjIChhdCBsZWFzdCAyLjIuNCkgZm9yIHRoaXMsIGFuZAorIyBpdCB3aWxsIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkKKyMgcmFuZG9tbHkgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQKKyMgdGltZXMgKG15IGV4dDMgZG9lc24ndCkuCisjCisjIERlZmluZSBVU0VfU1RfVElNRVNQRUMgaWYgeW91ciAic3RydWN0IHN0YXQiIHVzZXMgInN0X2N0aW1lc3BlYyIgaW5zdGVhZCBvZgorIyAic3RfY3RpbSIKKyMKKyMgRGVmaW5lIE5PX05TRUMgaWYgeW91ciAic3RydWN0IHN0YXQiIGRvZXMgbm90IGhhdmUgInN0X2N0aW0udHZfbnNlYyIKKyMgYXZhaWxhYmxlLiAgVGhpcyBhdXRvbWF0aWNhbGx5IHR1cm5zIFVTRV9OU0VDIG9mZi4KKyMKKyMgRGVmaW5lIFVTRV9TVERFViBiZWxvdyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCB0aGUgdW5kZXJseWluZyBkZXZpY2UKKyMgY2hhbmdlIGJlaW5nIGNvbnNpZGVyZWQgYW4gaW5vZGUgY2hhbmdlIGZyb20gdGhlIHVwZGF0ZS1pbmRleCBwZXJzcGVjdGl2ZS4KKyMKKyMgRGVmaW5lIE5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVCBpZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IGhhdmUgc3RfYmxvY2tzCisjIGZpZWxkIHRoYXQgY291bnRzIHRoZSBvbi1kaXNrIGZvb3RwcmludCBpbiA1MTItYnl0ZSBibG9ja3MuCisjCisjIERlZmluZSBET0NCT09LX1hTTF8xNzIgaWYgeW91IHdhbnQgdG8gZm9ybWF0IG1hbiBwYWdlcyB3aXRoIERvY0Jvb2sgWFNMIHYxLjcyCisjIChub3QgdjEuNzMgb3IgdjEuNzEpLgorIworIyBEZWZpbmUgQVNDSUlET0NfUk9GRiBpZiB5b3VyIERvY0Jvb2sgWFNMIGRvZXMgbm90IGVzY2FwZSByYXcgcm9mZiBkaXJlY3RpdmVzCisjICh2ZXJzaW9ucyAxLjY4LjEgdGhyb3VnaCB2MS43MikuCisjCisjIERlZmluZSBHTlVfUk9GRiBpZiB5b3VyIHRhcmdldCBzeXN0ZW0gdXNlcyBHTlUgZ3JvZmYuICBUaGlzIGZvcmNlcworIyBhcG9zdHJvcGhlcyB0byBiZSBBU0NJSSBzbyB0aGF0IGN1dCZwYXN0aW5nIGV4YW1wbGVzIHRvIHRoZSBzaGVsbAorIyB3aWxsIHdvcmsuCisjCisjIERlZmluZSBOT19QRVJMX01BS0VNQUtFUiBpZiB5b3UgY2Fubm90IHVzZSBNYWtlZmlsZXMgZ2VuZXJhdGVkIGJ5IHBlcmwncworIyBNYWtlTWFrZXIgKGUuZy4gdXNpbmcgQWN0aXZlU3RhdGUgdW5kZXIgQ3lnd2luKS4KKyMKKyMgRGVmaW5lIE5PX1BFUkwgaWYgeW91IGRvIG5vdCB3YW50IFBlcmwgc2NyaXB0cyBvciBsaWJyYXJpZXMgYXQgYWxsLgorIworIyBEZWZpbmUgTk9fUFlUSE9OIGlmIHlvdSBkbyBub3Qgd2FudCBQeXRob24gc2NyaXB0cyBvciBsaWJyYXJpZXMgYXQgYWxsLgorIworIyBEZWZpbmUgTk9fVENMVEsgaWYgeW91IGRvIG5vdCB3YW50IFRjbC9UayBHVUkuCisjCisjIFRoZSBUQ0xfUEFUSCB2YXJpYWJsZSBnb3Zlcm5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgVGNsIGludGVycHJldGVyCisjIHVzZWQgdG8gb3B0aW1pemUgZ2l0LWd1aSBmb3IgeW91ciBzeXN0ZW0uICBPbmx5IHVzZWQgaWYgTk9fVENMVEsKKyMgaXMgbm90IHNldC4gIERlZmF1bHRzIHRvIHRoZSBiYXJlICd0Y2xzaCcuCisjCisjIFRoZSBUQ0xUS19QQVRIIHZhcmlhYmxlIGdvdmVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBUY2wvVGsgaW50ZXJwcmV0ZXIuCisjIElmIG5vdCBzZXQgaXQgZGVmYXVsdHMgdG8gdGhlIGJhcmUgJ3dpc2gnLiBJZiBpdCBpcyBzZXQgdG8gdGhlIGVtcHR5CisjIHN0cmluZyB0aGVuIE5PX1RDTFRLIHdpbGwgYmUgZm9yY2VkICh0aGlzIGlzIHVzZWQgYnkgY29uZmlndXJlIHNjcmlwdCkuCisjCisjIERlZmluZSBJTlRFUk5BTF9RU09SVCB0byB1c2UgR2l0J3MgaW1wbGVtZW50YXRpb24gb2YgcXNvcnQoKSwgd2hpY2gKKyMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIG1lcmdlIHNvcnQgdXNlZCBpbiBnbGliYy4gVGhpcyBpcworIyByZWNvbW1lbmRlZCBpZiBHaXQgdHJpZ2dlcnMgTyhuXjIpIGJlaGF2aW9yIGluIHlvdXIgcGxhdGZvcm0ncyBxc29ydCgpLgorIworIyBEZWZpbmUgVU5SRUxJQUJMRV9GU1RBVCBpZiB5b3VyIHN5c3RlbSdzIGZzdGF0IGRvZXMgbm90IHJldHVybiB0aGUgc2FtZQorIyBpbmZvcm1hdGlvbiBvbiBhIG5vdCB5ZXQgY2xvc2VkIGZpbGUgdGhhdCBsc3RhdCB3b3VsZCByZXR1cm4gZm9yIHRoZSBzYW1lCisjIGZpbGUgYWZ0ZXIgaXQgd2FzIGNsb3NlZC4KKyMKKyMgRGVmaW5lIE9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgaWYgeW91ciBvcGVyYXRpbmcgc3lzdGVtcyBoYXMgcHJvYmxlbXMKKyMgd2hlbiBoYXJkbGlua2luZyBhIGZpbGUgdG8gYW5vdGhlciBuYW1lIGFuZCB1bmxpbmtpbmcgdGhlIG9yaWdpbmFsIGZpbGUgcmlnaHQKKyMgYXdheSAoc29tZSBOVEZTIGRyaXZlcnMgc2VlbSB0byB6ZXJvIHRoZSBjb250ZW50cyBpbiB0aGF0IHNjZW5hcmlvKS4KKyMKKyMgRGVmaW5lIE5PX0NST1NTX0RJUkVDVE9SWV9IQVJETElOS1MgaWYgeW91IHBsYW4gdG8gZGlzdHJpYnV0ZSB0aGUgaW5zdGFsbGVkCisjIHByb2dyYW1zIGFzIGEgdGFyLCB3aGVyZSBiaW4vIGFuZCBsaWJleGVjLyBtaWdodCBiZSBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLgorIworIyBEZWZpbmUgTk9fSU5TVEFMTF9IQVJETElOS1MgaWYgeW91IHByZWZlciB0byB1c2UgZWl0aGVyIHN5bWJvbGljIGxpbmtzIG9yCisjIGNvcGllcyB0byBpbnN0YWxsIGJ1aWx0LWluIGdpdCBjb21tYW5kcyBlLmcuIGdpdC1jYXQtZmlsZS4KKyMKKyMgRGVmaW5lIFVTRV9ORURfQUxMT0NBVE9SIGlmIHlvdSB3YW50IHRvIHJlcGxhY2UgdGhlIHBsYXRmb3JtcyBkZWZhdWx0CisjIG1lbW9yeSBhbGxvY2F0b3JzIHdpdGggdGhlIG5lZG1hbGxvYyBhbGxvY2F0b3Igd3JpdHRlbiBieSBOaWFsbCBEb3VnbGFzLgorIworIyBEZWZpbmUgTk9fUkVHRVggaWYgeW91IGhhdmUgbm8gb3IgaW5mZXJpb3IgcmVnZXggc3VwcG9ydCBpbiB5b3VyIEMgbGlicmFyeS4KKyMKKyMgRGVmaW5lIEhBVkVfREVWX1RUWSBpZiB5b3VyIHN5c3RlbSBjYW4gb3BlbiAvZGV2L3R0eSB0byBpbnRlcmFjdCB3aXRoIHRoZQorIyB1c2VyLgorIworIyBEZWZpbmUgR0VUVEVYVF9QT0lTT04gaWYgeW91IGFyZSBkZWJ1Z2dpbmcgdGhlIGNob2ljZSBvZiBzdHJpbmdzIG1hcmtlZAorIyBmb3IgdHJhbnNsYXRpb24uICBJbiBhIEdFVFRFWFRfUE9JU09OIGJ1aWxkLCB5b3UgY2FuIHR1cm4gYWxsIHN0cmluZ3MgbWFya2VkCisjIGZvciB0cmFuc2xhdGlvbiBpbnRvIGdpYmJlcmlzaCBieSBzZXR0aW5nIHRoZSBHSVRfR0VUVEVYVF9QT0lTT04gdmFyaWFibGUKKyMgKHRvIGFueSB2YWx1ZSkgaW4geW91ciBlbnZpcm9ubWVudC4KKyMKKyMgRGVmaW5lIEpTTUlOIHRvIHBvaW50IHRvIEphdmFTY3JpcHQgbWluaWZpZXIgdGhhdCBmdW5jdGlvbnMgYXMKKyMgYSBmaWx0ZXIgdG8gaGF2ZSBnaXR3ZWIuanMgbWluaWZpZWQuCisjCisjIERlZmluZSBDU1NNSU4gdG8gcG9pbnQgdG8gYSBDU1MgbWluaWZpZXIgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSBtaW5pZmllZAorIyB2ZXJzaW9uIG9mIGdpdHdlYi5jc3MKKyMKKyMgRGVmaW5lIERFRkFVTFRfUEFHRVIgdG8gYSBzZW5zaWJsZSBwYWdlciBjb21tYW5kIChkZWZhdWx0cyB0byAibGVzcyIpIGlmCisjIHlvdSB3YW50IHRvIHVzZSBzb21ldGhpbmcgZGlmZmVyZW50LiAgVGhlIHZhbHVlIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYnkgdGhlCisjIHNoZWxsIGF0IHJ1bnRpbWUgd2hlbiBpdCBpcyB1c2VkLgorIworIyBEZWZpbmUgREVGQVVMVF9FRElUT1IgdG8gYSBzZW5zaWJsZSBlZGl0b3IgY29tbWFuZCAoZGVmYXVsdHMgdG8gInZpIikgaWYgeW91CisjIHdhbnQgdG8gdXNlIHNvbWV0aGluZyBkaWZmZXJlbnQuICBUaGUgdmFsdWUgd2lsbCBiZSBpbnRlcnByZXRlZCBieSB0aGUgc2hlbGwKKyMgaWYgbmVjZXNzYXJ5IHdoZW4gaXQgaXMgdXNlZC4gIEV4YW1wbGVzOgorIworIyAgIERFRkFVTFRfRURJVE9SPSd+L2Jpbi92aScsCisjICAgREVGQVVMVF9FRElUT1I9JyRHSVRfRkFMTEJBQ0tfRURJVE9SJywKKyMgICBERUZBVUxUX0VESVRPUj0nIkM6XFByb2dyYW0gRmlsZXNcVmltXGd2aW0uZXhlIiAtLW5vZm9yaycKKyMKKyMgRGVmaW5lIENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyB0byAieWVzIiBpZiB5b3Ugd2FudCBkZXBlbmRlbmNpZXMgb24KKyMgaGVhZGVyIGZpbGVzIHRvIGJlIGF1dG9tYXRpY2FsbHkgY29tcHV0ZWQsIHRvIGF2b2lkIHJlYnVpbGRpbmcgb2JqZWN0cyB3aGVuCisjIGFuIHVucmVsYXRlZCBoZWFkZXIgZmlsZSBjaGFuZ2VzLiAgRGVmaW5lIGl0IHRvICJubyIgdG8gdXNlIHRoZSBoYXJkLWNvZGVkCisjIGRlcGVuZGVuY3kgcnVsZXMuICBUaGUgZGVmYXVsdCBpcyAiYXV0byIsIHdoaWNoIG1lYW5zIHRvIHVzZSBjb21wdXRlZCBoZWFkZXIKKyMgZGVwZW5kZW5jaWVzIGlmIHlvdXIgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdG8gc3VwcG9ydCBpdC4KKyMKKyMgRGVmaW5lIENIRUNLX0hFQURFUl9ERVBFTkRFTkNJRVMgdG8gY2hlY2sgZm9yIHByb2JsZW1zIGluIHRoZSBoYXJkLWNvZGVkCisjIGRlcGVuZGVuY3kgcnVsZXMuCisjCisjIERlZmluZSBOQVRJVkVfQ1JMRiBpZiB5b3VyIHBsYXRmb3JtIHVzZXMgQ1JMRiBmb3IgbGluZSBlbmRpbmdzLgorIworIyBEZWZpbmUgWERMX0ZBU1RfSEFTSCB0byB1c2UgYW4gYWx0ZXJuYXRpdmUgbGluZS1oYXNoaW5nIG1ldGhvZCBpbgorIyB0aGUgZGlmZiBhbGdvcml0aG0uICBJdCBnaXZlcyBhIG5pY2Ugc3BlZWR1cCBpZiB5b3VyIHByb2Nlc3NvciBoYXMKKyMgZmFzdCB1bmFsaWduZWQgd29yZCBsb2Fkcy4gIERvZXMgTk9UIHdvcmsgb24gYmlnLWVuZGlhbiBzeXN0ZW1zIQorIyBFbmFibGVkIGJ5IGRlZmF1bHQgb24geDg2XzY0LgorIworIyBEZWZpbmUgR0lUX1VTRVJfQUdFTlQgaWYgeW91IHdhbnQgdG8gY2hhbmdlIGhvdyBnaXQgaWRlbnRpZmllcyBpdHNlbGYgZHVyaW5nCisjIG5ldHdvcmsgaW50ZXJhY3Rpb25zLiAgVGhlIGRlZmF1bHQgaXMgImdpdC8kKEdJVF9WRVJTSU9OKSIuCisjCisjIERlZmluZSBERUZBVUxUX0hFTFBfRk9STUFUIHRvICJtYW4iLCAiaW5mbyIgb3IgImh0bWwiCisjIChkZWZhdWx0cyB0byAibWFuIikgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIGRpZmZlcmVudCBkZWZhdWx0IHdoZW4KKyMgImdpdCBoZWxwIiBpcyBjYWxsZWQgd2l0aG91dCBhIHBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSBmb3JtYXQuCiAKIEdJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCiAJQCQoU0hFTExfUEFUSCkgLi9HSVQtVkVSU0lPTi1HRU4KIC1pbmNsdWRlIEdJVC1WRVJTSU9OLUZJTEUKIAogdW5hbWVfUyA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtcyAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9NIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1tIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKIHVuYW1lX08gOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLW8gMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQogdW5hbWVfUiA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtciAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9QIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1wIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKK3VuYW1lX1YgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXYgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQogCi1TQ1JJUFRfU0ggPSBnaXQtZ3VpLnNoCi1HSVRHVUlfTUFJTiA6PSBnaXQtZ3VpCi1HSVRHVUlfQlVJTFRfSU5TID0gZ2l0LWNpdG9vbAotQUxMX0xJQkZJTEVTID0gJCh3aWxkY2FyZCBsaWIvKi50Y2wpCi1QUkVMT0FEX0ZJTEVTID0gbGliL2NsYXNzLnRjbAotTk9OVENMX0xJQkZJTEVTID0gXAotCWxpYi9naXQtZ3VpLmljbyBcCi0JJCh3aWxkY2FyZCBsaWIvd2luMzJfKi5qcykgXAotI2VuZCBOT05UQ0xfTElCRklMRVMKK2lmZGVmIE1TVkMKKwkjIGF2b2lkIHRoZSBNaW5nVyBhbmQgQ3lnd2luIGNvbmZpZ3VyYXRpb24gc2VjdGlvbnMKKwl1bmFtZV9TIDo9IFdpbmRvd3MKKwl1bmFtZV9PIDo9IFdpbmRvd3MKK2VuZGlmCiAKKyMgQ0ZMQUdTIGFuZCBMREZMQUdTIGFyZSBmb3IgdGhlIHVzZXJzIHRvIG92ZXJyaWRlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworQ0ZMQUdTID0gLWcgLU8yIC1XYWxsCitMREZMQUdTID0KK0FMTF9DRkxBR1MgPSAkKENQUEZMQUdTKSAkKENGTEFHUykKK0FMTF9MREZMQUdTID0gJChMREZMQUdTKQorU1RSSVAgPz0gc3RyaXAKKworIyBBbW9uZyB0aGUgdmFyaWFibGVzIGJlbG93LCB0aGVzZToKKyMgICBnaXRleGVjZGlyCisjICAgdGVtcGxhdGVfZGlyCisjICAgbWFuZGlyCisjICAgaW5mb2RpcgorIyAgIGh0bWxkaXIKKyMgICBzeXNjb25mZGlyCisjIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSByZWxhdGl2ZSBwYXRoIHNvbWUvd2hlcmUvZWxzZTsKKyMgdGhpcyBpcyBpbnRlcnByZXRlZCBhcyByZWxhdGl2ZSB0byAkKHByZWZpeCkgYW5kICJnaXQiIGF0CisjIHJ1bnRpbWUgZmlndXJlcyBvdXQgd2hlcmUgdGhleSBhcmUgYmFzZWQgb24gdGhlIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUuCisjIFRoaXMgY2FuIGhlbHAgaW5zdGFsbGluZyB0aGUgc3VpdGUgaW4gYSByZWxvY2F0YWJsZSB3YXkuCisKK3ByZWZpeCA9ICQoSE9NRSkKK2JpbmRpcl9yZWxhdGl2ZSA9IGJpbgorYmluZGlyID0gJChwcmVmaXgpLyQoYmluZGlyX3JlbGF0aXZlKQorbWFuZGlyID0gc2hhcmUvbWFuCitpbmZvZGlyID0gc2hhcmUvaW5mbworZ2l0ZXhlY2RpciA9IGxpYmV4ZWMvZ2l0LWNvcmUKK21lcmdldG9vbHNkaXIgPSAkKGdpdGV4ZWNkaXIpL21lcmdldG9vbHMKK3NoYXJlZGlyID0gJChwcmVmaXgpL3NoYXJlCitnaXR3ZWJkaXIgPSAkKHNoYXJlZGlyKS9naXR3ZWIKK2xvY2FsZWRpciA9ICQoc2hhcmVkaXIpL2xvY2FsZQordGVtcGxhdGVfZGlyID0gc2hhcmUvZ2l0LWNvcmUvdGVtcGxhdGVzCitodG1sZGlyID0gc2hhcmUvZG9jL2dpdC1kb2MKK0VUQ19HSVRDT05GSUcgPSAkKHN5c2NvbmZkaXIpL2dpdGNvbmZpZworRVRDX0dJVEFUVFJJQlVURVMgPSAkKHN5c2NvbmZkaXIpL2dpdGF0dHJpYnV0ZXMKK2xpYiA9IGxpYgorIyBERVNURElSPQorcGF0aHNlcCA9IDoKKworZXhwb3J0IHByZWZpeCBiaW5kaXIgc2hhcmVkaXIgc3lzY29uZmRpciBnaXR3ZWJkaXIgbG9jYWxlZGlyCisKK0NDID0gY2MKK0FSID0gYXIKK1JNID0gcm0gLWYKK0RJRkYgPSBkaWZmCitUQVIgPSB0YXIKK0ZJTkQgPSBmaW5kCitJTlNUQUxMID0gaW5zdGFsbAorUlBNQlVJTEQgPSBycG1idWlsZAorVENMX1BBVEggPSB0Y2xzaAorVENMVEtfUEFUSCA9IHdpc2gKK1hHRVRURVhUID0geGdldHRleHQKK01TR0ZNVCA9IG1zZ2ZtdAorUFRIUkVBRF9MSUJTID0gLWxwdGhyZWFkCitQVEhSRUFEX0NGTEFHUyA9CitHQ09WID0gZ2NvdgorCitleHBvcnQgVENMX1BBVEggVENMVEtfUEFUSAorCitTUEFSU0VfRkxBR1MgPQorCisKKworIyMjIC0tLSBFTkQgQ09ORklHVVJBVElPTiBTRUNUSU9OIC0tLQorCisjIFRob3NlIG11c3Qgbm90IGJlIEdOVS1zcGVjaWZpYzsgdGhleSBhcmUgc2hhcmVkIHdpdGggcGVybC8gd2hpY2ggbWF5CisjIGJlIGJ1aWx0IGJ5IGEgZGlmZmVyZW50IGNvbXBpbGVyLiAoTm90ZSB0aGF0IHRoaXMgaXMgYW4gYXJ0aWZhY3Qgbm93CisjIGJ1dCBpdCBzdGlsbCBtaWdodCBiZSBuaWNlIHRvIGtlZXAgdGhhdCBkaXN0aW5jdGlvbi4pCitCQVNJQ19DRkxBR1MgPSAtSS4KK0JBU0lDX0xERkxBR1MgPQorCisjIEd1YXJkIGFnYWluc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzCitCVUlMVElOX09CSlMgPQorQlVJTFRfSU5TID0KK0NPTVBBVF9DRkxBR1MgPQorQ09NUEFUX09CSlMgPQorWERJRkZfT0JKUyA9CitWQ1NTVk5fT0JKUyA9CitHRU5FUkFURURfSCA9CitFWFRSQV9DUFBGTEFHUyA9CitMSUJfSCA9CitMSUJfT0JKUyA9CitQUk9HUkFNX09CSlMgPQorUFJPR1JBTVMgPQorU0NSSVBUX1BFUkwgPQorU0NSSVBUX1BZVEhPTiA9CitTQ1JJUFRfU0ggPQorU0NSSVBUX0xJQiA9CitURVNUX1BST0dSQU1TX05FRURfWCA9CisKKyMgSGF2aW5nIHRoaXMgdmFyaWFibGUgaW4geW91ciBlbnZpcm9ubWVudCB3b3VsZCBicmVhayBwaXBlbGluZXMgYmVjYXVzZQorIyB5b3UgY2F1c2UgImNkIiB0byBlY2hvIGl0cyBkZXN0aW5hdGlvbiB0byBzdGRvdXQuICBJdCBjYW4gYWxzbyB0YWtlCisjIHNjcmlwdHMgdG8gdW5leHBlY3RlZCBwbGFjZXMuICBJZiB5b3UgbGlrZSBDRFBBVEgsIGRlZmluZSBpdCBmb3IgeW91cgorIyBpbnRlcmFjdGl2ZSBzaGVsbCBzZXNzaW9ucyB3aXRob3V0IGV4cG9ydGluZyBpdC4KK3VuZXhwb3J0IENEUEFUSAorCitTQ1JJUFRfU0ggKz0gZ2l0LWFtLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LWJpc2VjdC5zaAorU0NSSVBUX1NIICs9IGdpdC1kaWZmdG9vbC0taGVscGVyLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LWZpbHRlci1icmFuY2guc2gKK1NDUklQVF9TSCArPSBnaXQtbG9zdC1mb3VuZC5zaAorU0NSSVBUX1NIICs9IGdpdC1tZXJnZS1vY3RvcHVzLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LW1lcmdlLW9uZS1maWxlLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LW1lcmdlLXJlc29sdmUuc2gKK1NDUklQVF9TSCArPSBnaXQtbWVyZ2V0b29sLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LXB1bGwuc2gKK1NDUklQVF9TSCArPSBnaXQtcXVpbHRpbXBvcnQuc2gKK1NDUklQVF9TSCArPSBnaXQtcmViYXNlLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LXJlcGFjay5zaAorU0NSSVBUX1NIICs9IGdpdC1yZXF1ZXN0LXB1bGwuc2gKK1NDUklQVF9TSCArPSBnaXQtc3Rhc2guc2gKK1NDUklQVF9TSCArPSBnaXQtc3VibW9kdWxlLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LXdlYi0tYnJvd3NlLnNoCisKK1NDUklQVF9MSUIgKz0gZ2l0LW1lcmdldG9vbC0tbGliCitTQ1JJUFRfTElCICs9IGdpdC1wYXJzZS1yZW1vdGUKK1NDUklQVF9MSUIgKz0gZ2l0LXJlYmFzZS0tYW0KK1NDUklQVF9MSUIgKz0gZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUKK1NDUklQVF9MSUIgKz0gZ2l0LXJlYmFzZS0tbWVyZ2UKK1NDUklQVF9MSUIgKz0gZ2l0LXNoLXNldHVwCitTQ1JJUFRfTElCICs9IGdpdC1zaC1pMThuCisKK1NDUklQVF9QRVJMICs9IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKK1NDUklQVF9QRVJMICs9IGdpdC1kaWZmdG9vbC5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtYXJjaGltcG9ydC5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwKK1NDUklQVF9QRVJMICs9IGdpdC1jdnNpbXBvcnQucGVybAorU0NSSVBUX1BFUkwgKz0gZ2l0LWN2c3NlcnZlci5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtcmVsaW5rLnBlcmwKK1NDUklQVF9QRVJMICs9IGdpdC1zZW5kLWVtYWlsLnBlcmwKK1NDUklQVF9QRVJMICs9IGdpdC1zdm4ucGVybAorCitTQ1JJUFRfUFlUSE9OICs9IGdpdC1yZW1vdGUtdGVzdGdpdC5weQorU0NSSVBUX1BZVEhPTiArPSBnaXQtcDQucHkKKworU0NSSVBUUyA9ICQocGF0c3Vic3QgJS5zaCwlLCQoU0NSSVBUX1NIKSkgXAorCSAgJChwYXRzdWJzdCAlLnBlcmwsJSwkKFNDUklQVF9QRVJMKSkgXAorCSAgJChwYXRzdWJzdCAlLnB5LCUsJChTQ1JJUFRfUFlUSE9OKSkgXAorCSAgZ2l0LWluc3Rhd2ViCisKK0VUQUdTX1RBUkdFVCA9IFRBR1MKKworIyBFbXB0eS4uLgorRVhUUkFfUFJPR1JBTVMgPQorCisjIC4uLiBhbmQgYWxsIHRoZSByZXN0IHRoYXQgY291bGQgYmUgbW92ZWQgb3V0IG9mIGJpbmRpciB0byBnaXRleGVjZGlyCitQUk9HUkFNUyArPSAkKEVYVFJBX1BST0dSQU1TKQorCitQUk9HUkFNX09CSlMgKz0gY3JlZGVudGlhbC1zdG9yZS5vCitQUk9HUkFNX09CSlMgKz0gZGFlbW9uLm8KK1BST0dSQU1fT0JKUyArPSBmYXN0LWltcG9ydC5vCitQUk9HUkFNX09CSlMgKz0gaHR0cC1iYWNrZW5kLm8KK1BST0dSQU1fT0JKUyArPSBpbWFwLXNlbmQubworUFJPR1JBTV9PQkpTICs9IHNoLWkxOG4tLWVudnN1YnN0Lm8KK1BST0dSQU1fT0JKUyArPSBzaGVsbC5vCitQUk9HUkFNX09CSlMgKz0gc2hvdy1pbmRleC5vCitQUk9HUkFNX09CSlMgKz0gdXBsb2FkLXBhY2subworCisjIEJpbmFyeSBzdWZmaXgsIHNldCB0byAuZXhlIGZvciBXaW5kb3dzIGJ1aWxkcworWCA9CisKK1BST0dSQU1TICs9ICQocGF0c3Vic3QgJS5vLGdpdC0lJFgsJChQUk9HUkFNX09CSlMpKQorCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LWNobXRpbWUKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtY3R5cGUKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtZGF0ZQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1kZWx0YQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1kdW1wLWNhY2hlLXRyZWUKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtZ2VucmFuZG9tCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LWluZGV4LXZlcnNpb24KK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtbGluZS1idWZmZXIKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtbWF0Y2gtdHJlZXMKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtbWVyZ2Vzb3J0CitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LW1rdGVtcAorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1wYXJzZS1vcHRpb25zCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXBhdGgtdXRpbHMKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtcmVnZXgKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtcmV2aXNpb24td2Fsa2luZworVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1ydW4tY29tbWFuZAorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1zY3JhcC1jYWNoZS10cmVlCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXNoYTEKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3Qtc2lnY2hhaW4KK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3Qtc3RyaW5nLWxpc3QKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3Qtc3VicHJvY2VzcworVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1zdm4tZmUKKworVEVTVF9QUk9HUkFNUyA9ICQocGF0c3Vic3QgJSwlJFgsJChURVNUX1BST0dSQU1TX05FRURfWCkpCisKKyMgTGlzdCBidWlsdC1pbiBjb21tYW5kICRDIHdob3NlIGltcGxlbWVudGF0aW9uIGNtZF8kQygpIGlzIG5vdCBpbgorIyBidWlsdGluLyRDLm8gYnV0IGlzIGxpbmtlZCBpbiBhcyBwYXJ0IG9mIHNvbWUgb3RoZXIgY29tbWFuZC4KK0JVSUxUX0lOUyArPSAkKHBhdHN1YnN0IGJ1aWx0aW4vJS5vLGdpdC0lJFgsJChCVUlMVElOX09CSlMpKQorCitCVUlMVF9JTlMgKz0gZ2l0LWNoZXJyeSRYCitCVUlMVF9JTlMgKz0gZ2l0LWNoZXJyeS1waWNrJFgKK0JVSUxUX0lOUyArPSBnaXQtZm9ybWF0LXBhdGNoJFgKK0JVSUxUX0lOUyArPSBnaXQtZnNjay1vYmplY3RzJFgKK0JVSUxUX0lOUyArPSBnaXQtZ2V0LXRhci1jb21taXQtaWQkWAorQlVJTFRfSU5TICs9IGdpdC1pbml0JFgKK0JVSUxUX0lOUyArPSBnaXQtbWVyZ2Utc3VidHJlZSRYCitCVUlMVF9JTlMgKz0gZ2l0LXBlZWstcmVtb3RlJFgKK0JVSUxUX0lOUyArPSBnaXQtcmVwby1jb25maWckWAorQlVJTFRfSU5TICs9IGdpdC1zaG93JFgKK0JVSUxUX0lOUyArPSBnaXQtc3RhZ2UkWAorQlVJTFRfSU5TICs9IGdpdC1zdGF0dXMkWAorQlVJTFRfSU5TICs9IGdpdC13aGF0Y2hhbmdlZCRYCisKKyMgd2hhdCAnYWxsJyB3aWxsIGJ1aWxkIGFuZCAnaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGluIGdpdGV4ZWNkaXIsCisjIGV4Y2x1ZGluZyBwcm9ncmFtcyBmb3IgYnVpbHQtaW4gY29tbWFuZHMKK0FMTF9QUk9HUkFNUyA9ICQoUFJPR1JBTVMpICQoU0NSSVBUUykKKworIyB3aGF0ICdhbGwnIHdpbGwgYnVpbGQgYnV0IG5vdCBpbnN0YWxsIGluIGdpdGV4ZWNkaXIKK09USEVSX1BST0dSQU1TID0gZ2l0JFgKKworIyB3aGF0IHRlc3Qgd3JhcHBlcnMgYXJlIG5lZWRlZCBhbmQgJ2luc3RhbGwnIHdpbGwgaW5zdGFsbCwgaW4gYmluZGlyCitCSU5ESVJfUFJPR1JBTVNfTkVFRF9YICs9IGdpdAorQklORElSX1BST0dSQU1TX05FRURfWCArPSBnaXQtdXBsb2FkLXBhY2sKK0JJTkRJUl9QUk9HUkFNU19ORUVEX1ggKz0gZ2l0LXJlY2VpdmUtcGFjaworQklORElSX1BST0dSQU1TX05FRURfWCArPSBnaXQtdXBsb2FkLWFyY2hpdmUKK0JJTkRJUl9QUk9HUkFNU19ORUVEX1ggKz0gZ2l0LXNoZWxsCisKK0JJTkRJUl9QUk9HUkFNU19OT19YICs9IGdpdC1jdnNzZXJ2ZXIKKworIyBTZXQgcGF0aHMgdG8gdG9vbHMgZWFybHkgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGZvciB2ZXJzaW9uIHRlc3RzLgogaWZuZGVmIFNIRUxMX1BBVEgKIAlTSEVMTF9QQVRIID0gL2Jpbi9zaAogZW5kaWYKLQotaWZuZGVmIGdpdGV4ZWNkaXIKLQlnaXRleGVjZGlyIDo9ICQoc2hlbGwgZ2l0IC0tZXhlYy1wYXRoKQoraWZuZGVmIFBFUkxfUEFUSAorCVBFUkxfUEFUSCA9IC91c3IvYmluL3BlcmwKK2VuZGlmCitpZm5kZWYgUFlUSE9OX1BBVEgKKwlQWVRIT05fUEFUSCA9IC91c3IvYmluL3B5dGhvbgogZW5kaWYKIAotaWZuZGVmIHNoYXJlZGlyCi1pZmVxIChnaXQtY29yZSwkKG5vdGRpciAkKGdpdGV4ZWNkaXIpKSkKLQlzaGFyZWRpciA6PSAkKGRpciAkKHBhdHN1YnN0ICUvLCUsJChkaXIgJChnaXRleGVjZGlyKSkpKXNoYXJlCi1lbHNlCi0Jc2hhcmVkaXIgOj0gJChkaXIgJChnaXRleGVjZGlyKSlzaGFyZQorZXhwb3J0IFBFUkxfUEFUSAorZXhwb3J0IFBZVEhPTl9QQVRICisKK0xJQl9GSUxFPWxpYmdpdC5hCitYRElGRl9MSUI9eGRpZmYvbGliLmEKK1ZDU1NWTl9MSUI9dmNzLXN2bi9saWIuYQorCitMSUJfSCArPSB4ZGlmZi94aW5jbHVkZS5oCitMSUJfSCArPSB4ZGlmZi94bWFjcm9zLmgKK0xJQl9IICs9IHhkaWZmL3hkaWZmLmgKK0xJQl9IICs9IHhkaWZmL3h0eXBlcy5oCitMSUJfSCArPSB4ZGlmZi94dXRpbHMuaAorTElCX0ggKz0geGRpZmYveHByZXBhcmUuaAorTElCX0ggKz0geGRpZmYveGRpZmZpLmgKK0xJQl9IICs9IHhkaWZmL3hlbWl0LmgKKworTElCX0ggKz0gdmNzLXN2bi9saW5lX2J1ZmZlci5oCitMSUJfSCArPSB2Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmgKK0xJQl9IICs9IHZjcy1zdm4vcmVwb190cmVlLmgKK0xJQl9IICs9IHZjcy1zdm4vZmFzdF9leHBvcnQuaAorTElCX0ggKz0gdmNzLXN2bi9zdm5kaWZmLmgKK0xJQl9IICs9IHZjcy1zdm4vc3ZuZHVtcC5oCisKK0dFTkVSQVRFRF9IICs9IGNvbW1vbi1jbWRzLmgKKworTElCX0ggKz0gYWR2aWNlLmgKK0xJQl9IICs9IGFyY2hpdmUuaAorTElCX0ggKz0gYXJndi1hcnJheS5oCitMSUJfSCArPSBhdHRyLmgKK0xJQl9IICs9IGJpc2VjdC5oCitMSUJfSCArPSBibG9iLmgKK0xJQl9IICs9IGJyYW5jaC5oCitMSUJfSCArPSBidWlsdGluLmgKK0xJQl9IICs9IGJ1bGstY2hlY2tpbi5oCitMSUJfSCArPSBidW5kbGUuaAorTElCX0ggKz0gY2FjaGUtdHJlZS5oCitMSUJfSCArPSBjYWNoZS5oCitMSUJfSCArPSBjb2xvci5oCitMSUJfSCArPSBjb2x1bW4uaAorTElCX0ggKz0gY29tbWl0LmgKK0xJQl9IICs9IGNvbXBhdC9ic3dhcC5oCitMSUJfSCArPSBjb21wYXQvY3lnd2luLmgKK0xJQl9IICs9IGNvbXBhdC9taW5ndy5oCitMSUJfSCArPSBjb21wYXQvb2JzdGFjay5oCitMSUJfSCArPSBjb21wYXQvcG9sbC9wb2xsLmgKK0xJQl9IICs9IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguaAorTElCX0ggKz0gY29tcGF0L3Rlcm1pbmFsLmgKK0xJQl9IICs9IGNvbXBhdC93aW4zMi9kaXJlbnQuaAorTElCX0ggKz0gY29tcGF0L3dpbjMyL3B0aHJlYWQuaAorTElCX0ggKz0gY29tcGF0L3dpbjMyL3N5c2xvZy5oCitMSUJfSCArPSBjb25uZWN0ZWQuaAorTElCX0ggKz0gY29udmVydC5oCitMSUJfSCArPSBjcmVkZW50aWFsLmgKK0xJQl9IICs9IGNzdW0tZmlsZS5oCitMSUJfSCArPSBkZWNvcmF0ZS5oCitMSUJfSCArPSBkZWx0YS5oCitMSUJfSCArPSBkaWZmLmgKK0xJQl9IICs9IGRpZmZjb3JlLmgKK0xJQl9IICs9IGRpci5oCitMSUJfSCArPSBleGVjX2NtZC5oCitMSUJfSCArPSBmZXRjaC1wYWNrLmgKK0xJQl9IICs9IGZtdC1tZXJnZS1tc2cuaAorTElCX0ggKz0gZnNjay5oCitMSUJfSCArPSBnZXR0ZXh0LmgKK0xJQl9IICs9IGdpdC1jb21wYXQtdXRpbC5oCitMSUJfSCArPSBncGctaW50ZXJmYWNlLmgKK0xJQl9IICs9IGdyYXBoLmgKK0xJQl9IICs9IGdyZXAuaAorTElCX0ggKz0gaGFzaC5oCitMSUJfSCArPSBoZWxwLmgKK0xJQl9IICs9IGh0dHAuaAorTElCX0ggKz0ga3dzZXQuaAorTElCX0ggKz0gbGV2ZW5zaHRlaW4uaAorTElCX0ggKz0gbGlzdC1vYmplY3RzLmgKK0xJQl9IICs9IGxsLW1lcmdlLmgKK0xJQl9IICs9IGxvZy10cmVlLmgKK0xJQl9IICs9IG1haWxtYXAuaAorTElCX0ggKz0gbWVyZ2UtZmlsZS5oCitMSUJfSCArPSBtZXJnZS1yZWN1cnNpdmUuaAorTElCX0ggKz0gbWVyZ2Vzb3J0LmgKK0xJQl9IICs9IG5vdGVzLWNhY2hlLmgKK0xJQl9IICs9IG5vdGVzLW1lcmdlLmgKK0xJQl9IICs9IG5vdGVzLmgKK0xJQl9IICs9IG9iamVjdC5oCitMSUJfSCArPSBwYWNrLXJlZnMuaAorTElCX0ggKz0gcGFjay1yZXZpbmRleC5oCitMSUJfSCArPSBwYWNrLmgKK0xJQl9IICs9IHBhcnNlLW9wdGlvbnMuaAorTElCX0ggKz0gcGF0Y2gtaWRzLmgKK0xJQl9IICs9IHBrdC1saW5lLmgKK0xJQl9IICs9IHByb2dyZXNzLmgKK0xJQl9IICs9IHByb21wdC5oCitMSUJfSCArPSBxdW90ZS5oCitMSUJfSCArPSByZWFjaGFibGUuaAorTElCX0ggKz0gcmVmbG9nLXdhbGsuaAorTElCX0ggKz0gcmVmcy5oCitMSUJfSCArPSByZW1vdGUuaAorTElCX0ggKz0gcmVyZXJlLmgKK0xJQl9IICs9IHJlc29sdmUtdW5kby5oCitMSUJfSCArPSByZXZpc2lvbi5oCitMSUJfSCArPSBydW4tY29tbWFuZC5oCitMSUJfSCArPSBzZW5kLXBhY2suaAorTElCX0ggKz0gc2VxdWVuY2VyLmgKK0xJQl9IICs9IHNoYTEtYXJyYXkuaAorTElCX0ggKz0gc2hhMS1sb29rdXAuaAorTElCX0ggKz0gc2hvcnRsb2cuaAorTElCX0ggKz0gc2lkZWJhbmQuaAorTElCX0ggKz0gc2lnY2hhaW4uaAorTElCX0ggKz0gc3RyYnVmLmgKK0xJQl9IICs9IHN0cmVhbWluZy5oCitMSUJfSCArPSBzdHJpbmctbGlzdC5oCitMSUJfSCArPSBzdWJtb2R1bGUuaAorTElCX0ggKz0gdGFnLmgKK0xJQl9IICs9IHRhci5oCitMSUJfSCArPSB0aHJlYWQtdXRpbHMuaAorTElCX0ggKz0gdHJhbnNwb3J0LmgKK0xJQl9IICs9IHRyZWUtd2Fsay5oCitMSUJfSCArPSB0cmVlLmgKK0xJQl9IICs9IHVucGFjay10cmVlcy5oCitMSUJfSCArPSB1cmwuaAorTElCX0ggKz0gdXNlcmRpZmYuaAorTElCX0ggKz0gdXRmOC5oCitMSUJfSCArPSB2YXJpbnQuaAorTElCX0ggKz0gd2Fsa2VyLmgKK0xJQl9IICs9IHd0LXN0YXR1cy5oCitMSUJfSCArPSB4ZGlmZi1pbnRlcmZhY2UuaAorTElCX0ggKz0geGRpZmYveGRpZmYuaAorCitMSUJfT0JKUyArPSBhYnNwYXRoLm8KK0xJQl9PQkpTICs9IGFkdmljZS5vCitMSUJfT0JKUyArPSBhbGlhcy5vCitMSUJfT0JKUyArPSBhbGxvYy5vCitMSUJfT0JKUyArPSBhcmNoaXZlLm8KK0xJQl9PQkpTICs9IGFyY2hpdmUtdGFyLm8KK0xJQl9PQkpTICs9IGFyY2hpdmUtemlwLm8KK0xJQl9PQkpTICs9IGFyZ3YtYXJyYXkubworTElCX09CSlMgKz0gYXR0ci5vCitMSUJfT0JKUyArPSBiYXNlODUubworTElCX09CSlMgKz0gYmlzZWN0Lm8KK0xJQl9PQkpTICs9IGJsb2IubworTElCX09CSlMgKz0gYnJhbmNoLm8KK0xJQl9PQkpTICs9IGJ1bGstY2hlY2tpbi5vCitMSUJfT0JKUyArPSBidW5kbGUubworTElCX09CSlMgKz0gY2FjaGUtdHJlZS5vCitMSUJfT0JKUyArPSBjb2xvci5vCitMSUJfT0JKUyArPSBjb2x1bW4ubworTElCX09CSlMgKz0gY29tYmluZS1kaWZmLm8KK0xJQl9PQkpTICs9IGNvbW1pdC5vCitMSUJfT0JKUyArPSBjb21wYXQvb2JzdGFjay5vCitMSUJfT0JKUyArPSBjb21wYXQvdGVybWluYWwubworTElCX09CSlMgKz0gY29uZmlnLm8KK0xJQl9PQkpTICs9IGNvbm5lY3QubworTElCX09CSlMgKz0gY29ubmVjdGVkLm8KK0xJQl9PQkpTICs9IGNvbnZlcnQubworTElCX09CSlMgKz0gY29weS5vCitMSUJfT0JKUyArPSBjcmVkZW50aWFsLm8KK0xJQl9PQkpTICs9IGNzdW0tZmlsZS5vCitMSUJfT0JKUyArPSBjdHlwZS5vCitMSUJfT0JKUyArPSBkYXRlLm8KK0xJQl9PQkpTICs9IGRlY29yYXRlLm8KK0xJQl9PQkpTICs9IGRpZmZjb3JlLWJyZWFrLm8KK0xJQl9PQkpTICs9IGRpZmZjb3JlLWRlbHRhLm8KK0xJQl9PQkpTICs9IGRpZmZjb3JlLW9yZGVyLm8KK0xJQl9PQkpTICs9IGRpZmZjb3JlLXBpY2theGUubworTElCX09CSlMgKz0gZGlmZmNvcmUtcmVuYW1lLm8KK0xJQl9PQkpTICs9IGRpZmYtZGVsdGEubworTElCX09CSlMgKz0gZGlmZi1saWIubworTElCX09CSlMgKz0gZGlmZi1uby1pbmRleC5vCitMSUJfT0JKUyArPSBkaWZmLm8KK0xJQl9PQkpTICs9IGRpci5vCitMSUJfT0JKUyArPSBlZGl0b3IubworTElCX09CSlMgKz0gZW50cnkubworTElCX09CSlMgKz0gZW52aXJvbm1lbnQubworTElCX09CSlMgKz0gZXhlY19jbWQubworTElCX09CSlMgKz0gZnNjay5vCitMSUJfT0JKUyArPSBnZXR0ZXh0Lm8KK0xJQl9PQkpTICs9IGdwZy1pbnRlcmZhY2UubworTElCX09CSlMgKz0gZ3JhcGgubworTElCX09CSlMgKz0gZ3JlcC5vCitMSUJfT0JKUyArPSBoYXNoLm8KK0xJQl9PQkpTICs9IGhlbHAubworTElCX09CSlMgKz0gaGV4Lm8KK0xJQl9PQkpTICs9IGlkZW50Lm8KK0xJQl9PQkpTICs9IGt3c2V0Lm8KK0xJQl9PQkpTICs9IGxldmVuc2h0ZWluLm8KK0xJQl9PQkpTICs9IGxpc3Qtb2JqZWN0cy5vCitMSUJfT0JKUyArPSBsbC1tZXJnZS5vCitMSUJfT0JKUyArPSBsb2NrZmlsZS5vCitMSUJfT0JKUyArPSBsb2ctdHJlZS5vCitMSUJfT0JKUyArPSBtYWlsbWFwLm8KK0xJQl9PQkpTICs9IG1hdGNoLXRyZWVzLm8KK0xJQl9PQkpTICs9IG1lcmdlLWZpbGUubworTElCX09CSlMgKz0gbWVyZ2UtcmVjdXJzaXZlLm8KK0xJQl9PQkpTICs9IG1lcmdlc29ydC5vCitMSUJfT0JKUyArPSBuYW1lLWhhc2gubworTElCX09CSlMgKz0gbm90ZXMubworTElCX09CSlMgKz0gbm90ZXMtY2FjaGUubworTElCX09CSlMgKz0gbm90ZXMtbWVyZ2UubworTElCX09CSlMgKz0gb2JqZWN0Lm8KK0xJQl9PQkpTICs9IHBhY2stY2hlY2subworTElCX09CSlMgKz0gcGFjay1yZWZzLm8KK0xJQl9PQkpTICs9IHBhY2stcmV2aW5kZXgubworTElCX09CSlMgKz0gcGFjay13cml0ZS5vCitMSUJfT0JKUyArPSBwYWdlci5vCitMSUJfT0JKUyArPSBwYXJzZS1vcHRpb25zLm8KK0xJQl9PQkpTICs9IHBhcnNlLW9wdGlvbnMtY2IubworTElCX09CSlMgKz0gcGF0Y2gtZGVsdGEubworTElCX09CSlMgKz0gcGF0Y2gtaWRzLm8KK0xJQl9PQkpTICs9IHBhdGgubworTElCX09CSlMgKz0gcGt0LWxpbmUubworTElCX09CSlMgKz0gcHJlbG9hZC1pbmRleC5vCitMSUJfT0JKUyArPSBwcmV0dHkubworTElCX09CSlMgKz0gcHJvZ3Jlc3MubworTElCX09CSlMgKz0gcHJvbXB0Lm8KK0xJQl9PQkpTICs9IHF1b3RlLm8KK0xJQl9PQkpTICs9IHJlYWNoYWJsZS5vCitMSUJfT0JKUyArPSByZWFkLWNhY2hlLm8KK0xJQl9PQkpTICs9IHJlZmxvZy13YWxrLm8KK0xJQl9PQkpTICs9IHJlZnMubworTElCX09CSlMgKz0gcmVtb3RlLm8KK0xJQl9PQkpTICs9IHJlcGxhY2Vfb2JqZWN0Lm8KK0xJQl9PQkpTICs9IHJlcmVyZS5vCitMSUJfT0JKUyArPSByZXNvbHZlLXVuZG8ubworTElCX09CSlMgKz0gcmV2aXNpb24ubworTElCX09CSlMgKz0gcnVuLWNvbW1hbmQubworTElCX09CSlMgKz0gc2VxdWVuY2VyLm8KK0xJQl9PQkpTICs9IHNlcnZlci1pbmZvLm8KK0xJQl9PQkpTICs9IHNldHVwLm8KK0xJQl9PQkpTICs9IHNoYTEtYXJyYXkubworTElCX09CSlMgKz0gc2hhMS1sb29rdXAubworTElCX09CSlMgKz0gc2hhMV9maWxlLm8KK0xJQl9PQkpTICs9IHNoYTFfbmFtZS5vCitMSUJfT0JKUyArPSBzaGFsbG93Lm8KK0xJQl9PQkpTICs9IHNpZGViYW5kLm8KK0xJQl9PQkpTICs9IHNpZ2NoYWluLm8KK0xJQl9PQkpTICs9IHN0cmJ1Zi5vCitMSUJfT0JKUyArPSBzdHJlYW1pbmcubworTElCX09CSlMgKz0gc3RyaW5nLWxpc3QubworTElCX09CSlMgKz0gc3VibW9kdWxlLm8KK0xJQl9PQkpTICs9IHN5bWxpbmtzLm8KK0xJQl9PQkpTICs9IHRhZy5vCitMSUJfT0JKUyArPSB0cmFjZS5vCitMSUJfT0JKUyArPSB0cmFuc3BvcnQubworTElCX09CSlMgKz0gdHJhbnNwb3J0LWhlbHBlci5vCitMSUJfT0JKUyArPSB0cmVlLWRpZmYubworTElCX09CSlMgKz0gdHJlZS5vCitMSUJfT0JKUyArPSB0cmVlLXdhbGsubworTElCX09CSlMgKz0gdW5wYWNrLXRyZWVzLm8KK0xJQl9PQkpTICs9IHVybC5vCitMSUJfT0JKUyArPSB1c2FnZS5vCitMSUJfT0JKUyArPSB1c2VyZGlmZi5vCitMSUJfT0JKUyArPSB1dGY4Lm8KK0xJQl9PQkpTICs9IHZhcmludC5vCitMSUJfT0JKUyArPSB2ZXJzaW9uLm8KK0xJQl9PQkpTICs9IHdhbGtlci5vCitMSUJfT0JKUyArPSB3cmFwcGVyLm8KK0xJQl9PQkpTICs9IHdyaXRlX29yX2RpZS5vCitMSUJfT0JKUyArPSB3cy5vCitMSUJfT0JKUyArPSB3dC1zdGF0dXMubworTElCX09CSlMgKz0geGRpZmYtaW50ZXJmYWNlLm8KK0xJQl9PQkpTICs9IHpsaWIubworCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9hZGQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYW5ub3RhdGUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYXBwbHkubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYXJjaGl2ZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9ibGFtZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9icmFuY2gubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYnVuZGxlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NhdC1maWxlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NoZWNrLWF0dHIubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2hlY2stcmVmLWZvcm1hdC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jaGVja291dC1pbmRleC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jaGVja291dC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jbGVhbi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jbG9uZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jb2x1bW4ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY29tbWl0LXRyZWUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY29tbWl0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NvbmZpZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jb3VudC1vYmplY3RzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NyZWRlbnRpYWwubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZGVzY3JpYmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZGlmZi1maWxlcy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9kaWZmLWluZGV4Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2RpZmYtdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9kaWZmLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2Zhc3QtZXhwb3J0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2ZldGNoLXBhY2subworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZmV0Y2gubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9mb3ItZWFjaC1yZWYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZnNjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9nYy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9ncmVwLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2hhc2gtb2JqZWN0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2hlbHAubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vaW5kZXgtcGFjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9pbml0LWRiLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2xvZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9scy1maWxlcy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9scy1yZW1vdGUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbHMtdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tYWlsaW5mby5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tYWlsc3BsaXQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWVyZ2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWVyZ2UtYmFzZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tZXJnZS1maWxlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLWluZGV4Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLW91cnMubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLXRyZWUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWt0YWcubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWt0cmVlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL212Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL25hbWUtcmV2Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL25vdGVzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3BhY2stb2JqZWN0cy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9wYWNrLXJlZHVuZGFudC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9wYWNrLXJlZnMubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcGF0Y2gtaWQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3BydW5lLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3B1c2gubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVhZC10cmVlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlY2VpdmUtcGFjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZWZsb2cubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVtb3RlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlbW90ZS1leHQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVtb3RlLWZkLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlcGxhY2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVyZXJlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Jlc2V0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Jldi1saXN0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Jldi1wYXJzZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZXZlcnQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcm0ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc2VuZC1wYWNrLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Nob3J0bG9nLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Nob3ctYnJhbmNoLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Nob3ctcmVmLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3N0cmlwc3BhY2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc3ltYm9saWMtcmVmLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3RhZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi90YXItdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91bnBhY2stZmlsZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91bnBhY2stb2JqZWN0cy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91cGRhdGUtaW5kZXgubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdXBkYXRlLXJlZi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdXBsb2FkLWFyY2hpdmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdmFyLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3ZlcmlmeS1wYWNrLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3ZlcmlmeS10YWcubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vd3JpdGUtdHJlZS5vCisKK0dJVExJQlMgPSAkKExJQl9GSUxFKSAkKFhESUZGX0xJQikKK0VYVExJQlMgPQorCitHSVRfVVNFUl9BR0VOVCA9IGdpdC8kKEdJVF9WRVJTSU9OKQorCisjCisjIFBsYXRmb3JtIHNwZWNpZmljIHR3ZWFrcworIworCisjIFdlIGNob29zZSB0byBhdm9pZCAiaWYgLi4gZWxzZSBpZiAuLiBlbHNlIC4uIGVuZGlmIGVuZGlmIgorIyBiZWNhdXNlIG1haW50YWluaW5nIHRoZSBuZXN0aW5nIHRvIG1hdGNoIGlzIGEgcGFpbi4gIElmCisjIHdlIGhhZCAiZWxpZiIgdGhpbmdzIHdvdWxkIGhhdmUgYmVlbiBtdWNoIG5pY2VyLi4uCisKK2lmZXEgKCQodW5hbWVfTSkseDg2XzY0KQorCVhETF9GQVNUX0hBU0ggPSBZZXNQbGVhc2UKIGVuZGlmCitpZmVxICgkKHVuYW1lX1MpLE9TRjEpCisJIyBOZWVkIHRoaXMgZm9yIHVfc2hvcnQgZGVmaW5pdGlvbnMgZXQgYWwKKwlCQVNJQ19DRkxBR1MgKz0gLURfT1NGX1NPVVJDRQorCVNPQ0tMRU5fVCA9IGludAorCU5PX1NUUlRPVUxMID0gWWVzUGxlYXNlCisJTk9fTlNFQyA9IFllc1BsZWFzZQogZW5kaWYKLQotaWZuZGVmIElOU1RBTEwKLQlJTlNUQUxMID0gaW5zdGFsbAoraWZlcSAoJCh1bmFtZV9TKSxMaW51eCkKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlIQVZFX1BBVEhTX0ggPSBZZXNQbGVhc2UKKwlMSUJDX0NPTlRBSU5TX0xJQklOVEwgPSBZZXNQbGVhc2UKKwlIQVZFX0RFVl9UVFkgPSBZZXNQbGVhc2UKIGVuZGlmCi0KLVJNX1JGICAgICA/PSBybSAtcmYKLVJNRElSICAgICA/PSBybWRpcgotCi1JTlNUQUxMX0QwID0gJChJTlNUQUxMKSAtZCAtbSA3NTUgIyBzcGFjZSBpcyByZXF1aXJlZCBoZXJlCi1JTlNUQUxMX0QxID0KLUlOU1RBTExfUjAgPSAkKElOU1RBTEwpIC1tIDY0NCAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKLUlOU1RBTExfUjEgPQotSU5TVEFMTF9YMCA9ICQoSU5TVEFMTCkgLW0gNzU1ICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQotSU5TVEFMTF9YMSA9Ci1JTlNUQUxMX0EwID0gZmluZCAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKLUlOU1RBTExfQTEgPSB8IGNwaW8gLXB1ZAotSU5TVEFMTF9MMCA9IHJtIC1mICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQotSU5TVEFMTF9MMSA9ICYmIGxuICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQotSU5TVEFMTF9MMiA9Ci1JTlNUQUxMX0wzID0KLQotUkVNT1ZFX0QwICA9ICQoUk1ESVIpICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQotUkVNT1ZFX0QxICA9IHx8IHRydWUKLVJFTU9WRV9GMCAgPSAkKFJNX1JGKSAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKLVJFTU9WRV9GMSAgPQotQ0xFQU5fRFNUICA9IHRydWUKLQotaWZuZGVmIFYKLQlRVUlFVCAgICAgICAgICA9IEAKLQlRVUlFVF9HRU4gICAgICA9ICQoUVVJRVQpZWNobyAnICAgJyBHRU4gJyRAJyAmJgotCVFVSUVUX0lOREVYICAgID0gJChRVUlFVCllY2hvICcgICAnIElOREVYICQoZGlyICRAKSAmJgotCVFVSUVUX01TR0ZNVDAgID0gJChRVUlFVClwcmludGYgJyAgICBNU0dGTVQgJTEycyAnICRAICYmIHY9YAotCVFVSUVUX01TR0ZNVDEgID0gMj4mMWAgJiYgZWNobyAiJCR2IiB8IHNlZCAtZSAncy9mdXp6eSB0cmFuc2xhdGlvbnMvZnV6enkvJyB8IHNlZCAtZSAncy8gbWVzc2FnZXMqLy9nJwotCVFVSUVUXzJERVZOVUxMID0gMj4vZGV2L251bGwKLQotCUlOU1RBTExfRDAgPSBkaXI9Ci0JSU5TVEFMTF9EMSA9ICYmIGVjaG8gJyAnIERFU1QgJCRkaXIgJiYgJChJTlNUQUxMKSAtZCAtbSA3NTUgIiQkZGlyIgotCUlOU1RBTExfUjAgPSBzcmM9Ci0JSU5TVEFMTF9SMSA9ICYmIGVjaG8gJyAgICcgSU5TVEFMTCA2NDQgYGJhc2VuYW1lICQkc3JjYCAmJiAkKElOU1RBTEwpIC1tIDY0NCAkJHNyYwotCUlOU1RBTExfWDAgPSBzcmM9Ci0JSU5TVEFMTF9YMSA9ICYmIGVjaG8gJyAgICcgSU5TVEFMTCA3NTUgYGJhc2VuYW1lICQkc3JjYCAmJiAkKElOU1RBTEwpIC1tIDc1NSAkJHNyYwotCUlOU1RBTExfQTAgPSBzcmM9Ci0JSU5TVEFMTF9BMSA9ICYmIGVjaG8gJyAgICcgSU5TVEFMTCAnICAgJyBgYmFzZW5hbWUgIiQkc3JjImAgJiYgZmluZCAiJCRzcmMiIHwgY3BpbyAtcHVkCi0KLQlJTlNUQUxMX0wwID0gZHN0PQotCUlOU1RBTExfTDEgPSAmJiBzcmM9Ci0JSU5TVEFMTF9MMiA9ICYmIGRzdD0KLQlJTlNUQUxMX0wzID0gJiYgZWNobyAnICAgJyAnTElOSyAgICAgICAnIGBiYXNlbmFtZSAiJCRkc3QiYCAnLT4nIGBiYXNlbmFtZSAiJCRzcmMiYCAmJiBybSAtZiAiJCRkc3QiICYmIGxuICIkJHNyYyIgIiQkZHN0IgotCi0JQ0xFQU5fRFNUID0gZWNobyAnICcgVU5JTlNUQUxMCi0JUkVNT1ZFX0QwID0gZGlyPQotCVJFTU9WRV9EMSA9ICYmIGVjaG8gJyAnIFJFTU9WRSAkJGRpciAmJiB0ZXN0IC1kICIkJGRpciIgJiYgJChSTURJUikgIiQkZGlyIiB8fCB0cnVlCi0JUkVNT1ZFX0YwID0gZHN0PQotCVJFTU9WRV9GMSA9ICYmIGVjaG8gJyAgICcgUkVNT1ZFIGBiYXNlbmFtZSAiJCRkc3QiYCAmJiAkKFJNX1JGKSAiJCRkc3QiCitpZmVxICgkKHVuYW1lX1MpLEdOVS9rRnJlZUJTRCkKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlIQVZFX1BBVEhTX0ggPSBZZXNQbGVhc2UKKwlESVJfSEFTX0JTRF9HUk9VUF9TRU1BTlRJQ1MgPSBZZXNQbGVhc2UKKwlMSUJDX0NPTlRBSU5TX0xJQklOVEwgPSBZZXNQbGVhc2UKIGVuZGlmCi0KLVRDTFRLX1BBVEggPz0gd2lzaAotaWZlcSAoLi8sJChkaXIgJChUQ0xUS19QQVRIKSkpCi0JVENMX1BBVEggPz0gJChzdWJzdCB3aXNoLHRjbHNoLCQoVENMVEtfUEFUSCkpCi1lbHNlCi0JVENMX1BBVEggPz0gJChkaXIgJChUQ0xUS19QQVRIKSkkKG5vdGRpciAkKHN1YnN0IHdpc2gsdGNsc2gsJChUQ0xUS19QQVRIKSkpCitpZmVxICgkKHVuYW1lX1MpLFVuaXhXYXJlKQorCUNDID0gY2MKKwlORUVEU19TT0NLRVQgPSBZZXNQbGVhc2UKKwlORUVEU19OU0wgPSBZZXNQbGVhc2UKKwlORUVEU19TU0xfV0lUSF9DUllQVE8gPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCVNIRUxMX1BBVEggPSAvdXNyL2xvY2FsL2Jpbi9iYXNoCisJTk9fSVBWNiA9IFllc1BsZWFzZQorCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1LdGhyZWFkCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCisJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCisJSU5TVEFMTCA9IGdpbnN0YWxsCisJVEFSID0gZ3RhcgorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKIGVuZGlmCi0KLWlmZXEgKCQodW5hbWVfUyksRGFyd2luKQotCVRLRlJBTUVXT1JLID0gL0xpYnJhcnkvRnJhbWV3b3Jrcy9Uay5mcmFtZXdvcmsvUmVzb3VyY2VzL1dpc2guYXBwCi0JaWZlcSAoJChzaGVsbCBlY2hvICIkKHVuYW1lX1IpIiB8IGF3ayAtRi4gJ3tpZiAoJCQxID49IDkpIHByaW50ICJ5In0nKV8kKHNoZWxsIHRlc3QgLWQgJChUS0ZSQU1FV09SSykgfHwgZWNobyBuKSx5X24pCi0JCVRLRlJBTUVXT1JLID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvVGsuZnJhbWV3b3JrL1Jlc291cmNlcy9XaXNoLmFwcAotCQlpZmVxICgkKHNoZWxsIHRlc3QgLWQgJChUS0ZSQU1FV09SSykgfHwgZWNobyBuKSxuKQotCQkJVEtGUkFNRVdPUksgPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Uay5mcmFtZXdvcmsvUmVzb3VyY2VzL1dpc2hcIFNoZWxsLmFwcAotCQllbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxTQ09fU1YpCisJaWZlcSAoJCh1bmFtZV9SKSwzLjIpCisJCUNGTEFHUyA9IC1PMgogCWVuZGlmCi0JVEtFWEVDVVRBQkxFID0gJChzaGVsbCBiYXNlbmFtZSAiJChUS0ZSQU1FV09SSykiIC5hcHApCisJaWZlcSAoJCh1bmFtZV9SKSw1KQorCQlDQyA9IGNjCisJCUJBU0lDX0NGTEFHUyArPSAtS3RocmVhZAorCWVuZGlmCisJTkVFRFNfU09DS0VUID0gWWVzUGxlYXNlCisJTkVFRFNfTlNMID0gWWVzUGxlYXNlCisJTkVFRFNfU1NMX1dJVEhfQ1JZUFRPID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlTSEVMTF9QQVRIID0gL3Vzci9iaW4vYmFzaAorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvbG9jYWwvaW5jbHVkZQorCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL2xvY2FsL2xpYgorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlJTlNUQUxMID0gZ2luc3RhbGwKKwlUQVIgPSBndGFyCiBlbmRpZgotCi1pZmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHMpLHMpCi1RVUlFVF9HRU4gPQoraWZlcSAoJCh1bmFtZV9TKSxEYXJ3aW4pCisJTkVFRFNfQ1JZUFRPX1dJVEhfU1NMID0gWWVzUGxlYXNlCisJTkVFRFNfU1NMX1dJVEhfQ1JZUFRPID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJ1sxNTY3OF1cLicpLDIpCisJCU9MRF9JQ09OViA9IFVuZm9ydHVuYXRlbHlZZXMKKwllbmRpZgorCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnWzE1XVwuJyksMikKKwkJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCWVuZGlmCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJVVNFX1NUX1RJTUVTUEVDID0gWWVzUGxlYXNlCisJSEFWRV9ERVZfVFRZID0gWWVzUGxlYXNlCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5vCisJQkFTSUNfQ0ZMQUdTICs9IC1EUFJFQ09NUE9TRV9VTklDT0RFCiBlbmRpZgotCi0taW5jbHVkZSBjb25maWcubWFrCi0KLURFU1RESVJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFU1RESVIpKQotZ2l0ZXhlY2Rpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0ZXhlY2RpcikpCi1TSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKLVRDTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xfUEFUSCkpCi1UQ0xUS19QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xUS19QQVRIKSkKLVRDTFRLX1BBVEhfU0VEID0gJChzdWJzdCAnLCdcJycsJChzdWJzdCBcLFxcLCQoVENMVEtfUEFUSCkpKQotCi1nZ19saWJkaXIgPz0gJChzaGFyZWRpcikvZ2l0LWd1aS9saWIKLWxpYmRpcl9TUSAgPSAkKHN1YnN0ICcsJ1wnJywkKGdnX2xpYmRpcikpCi1saWJkaXJfU0VEID0gJChzdWJzdCAnLCdcJycsJChzdWJzdCBcLFxcLCQoZ2dfbGliZGlyX3NlZF9pbikpKQotZXhlZGlyICAgICA9ICQoZGlyICQoZ2l0ZXhlY2Rpcikpc2hhcmUvZ2l0LWd1aS9saWIKLQotR0lUR1VJX1NDUklQVCAgIDo9ICQkMAotR0lUR1VJX1JFTEFUSVZFIDo9Ci1HSVRHVUlfTUFDT1NYQVBQIDo9Ci0KK2lmZXEgKCQodW5hbWVfUyksU3VuT1MpCisJTkVFRFNfU09DS0VUID0gWWVzUGxlYXNlCisJTkVFRFNfTlNMID0gWWVzUGxlYXNlCisJU0hFTExfUEFUSCA9IC9iaW4vYmFzaAorCVNBTkVfVE9PTF9QQVRIID0gL3Vzci94cGc2L2JpbjovdXNyL3hwZzQvYmluCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJTk9fRk5NQVRDSF9DQVNFRk9MRCA9IFllc1BsZWFzZQorCU5PX01TR0ZNVF9FWFRFTkRFRF9PUFRJT05TID0gWWVzUGxlYXNlCisJSEFWRV9ERVZfVFRZID0gWWVzUGxlYXNlCisJaWZlcSAoJCh1bmFtZV9SKSw1LjYpCisJCVNPQ0tMRU5fVCA9IGludAorCQlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwkJTk9fSVBWNiA9IFllc1BsZWFzZQorCQlOT19TT0NLQUREUl9TVE9SQUdFID0gWWVzUGxlYXNlCisJCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCQlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQorCQlHSVRfVEVTVF9DTVAgPSBjbXAKKwllbmRpZgorCWlmZXEgKCQodW5hbWVfUiksNS43KQorCQlORUVEU19SRVNPTFYgPSBZZXNQbGVhc2UKKwkJTk9fSVBWNiA9IFllc1BsZWFzZQorCQlOT19TT0NLQUREUl9TVE9SQUdFID0gWWVzUGxlYXNlCisJCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCQlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQorCQlHSVRfVEVTVF9DTVAgPSBjbXAKKwllbmRpZgorCWlmZXEgKCQodW5hbWVfUiksNS44KQorCQlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCQlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJCUdJVF9URVNUX0NNUCA9IGNtcAorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKSw1LjkpCisJCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCQlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKKwkJR0lUX1RFU1RfQ01QID0gY21wCisJZW5kaWYKKwlJTlNUQUxMID0gL3Vzci91Y2IvaW5zdGFsbAorCVRBUiA9IGd0YXIKKwlCQVNJQ19DRkxBR1MgKz0gLURfX0VYVEVOU0lPTlNfXyAtRF9fc3VuX18gLURIQVZFX0FMTE9DQV9ICitlbmRpZgogaWZlcSAoJCh1bmFtZV9PKSxDeWd3aW4pCi0JR0lUR1VJX1NDUklQVCA6PSBgY3lncGF0aCAtLXdpbmRvd3MgLS1hYnNvbHV0ZSAiJChHSVRHVUlfU0NSSVBUKSJgCi0KLQkjIElzIHRoaXMgYSBDeWd3aW4gVGNsL1RrIGJpbmFyeT8gIElmIHNvIGl0IGtub3dzIGhvdyB0byBkbwotCSMgUE9TSVggcGF0aCB0cmFuc2xhdGlvbiBqdXN0IGxpa2UgY3lncGF0aCBkb2VzIGFuZCB3ZSBtdXN0Ci0JIyBrZWVwIGxpYmRpciBpbiBQT1NJWCBmb3JtYXQgc28gQ3lnd2luIHBhY2thZ2VzIG9mIGdpdC1ndWkKLQkjIHdvcmsgbm8gbWF0dGVyIHdoZXJlIHRoZSB1c2VyIGluc3RhbGxzIHRoZW0uCi0JIwotCWlmZXEgKCQoc2hlbGwgZWNobyAncHV0cyBbZmlsZSBub3JtYWxpemUgL10nIHwgJyQoVENMX1BBVEhfU1EpJyksJChzaGVsbCBjeWdwYXRoIC0tbWl4ZWQgLS1hYnNvbHV0ZSAvKSkKLQkJZ2dfbGliZGlyX3NlZF9pbiA6PSAkKGdnX2xpYmRpcikKLQllbHNlCi0JCWdnX2xpYmRpcl9zZWRfaW4gOj0gJChzaGVsbCBjeWdwYXRoIC0td2luZG93cyAtLWFic29sdXRlICIkKGdnX2xpYmRpcikiKQorCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnMVwuWzEtNl1cLicpLDQpCisJCU5PX0RfVFlQRV9JTl9ESVJFTlQgPSBZZXNQbGVhc2UKKwkJTk9fRF9JTk9fSU5fRElSRU5UID0gWWVzUGxlYXNlCisJCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwkJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJCU5PX1NZTUxJTktfSEVBRCA9IFllc1BsZWFzZQorCQlOT19JUFY2ID0gWWVzUGxlYXNlCisJCU9MRF9JQ09OViA9IFVuZm9ydHVuYXRlbHlZZXMKIAllbmRpZgotZWxzZQotCWlmZXEgKCQoZXhlZGlyKSwkKGdnX2xpYmRpcikpCi0JCUdJVEdVSV9SRUxBVElWRSA6PSAxCi0JZW5kaWYKLQlnZ19saWJkaXJfc2VkX2luIDo9ICQoZ2dfbGliZGlyKQorCU5PX1RIUkVBRF9TQUZFX1BSRUFEID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlOT19GQVNUX1dPUktJTkdfRElSRUNUT1JZID0gVW5mb3J0dW5hdGVseVllcworCU5PX1RSVVNUQUJMRV9GSUxFTU9ERSA9IFVuZm9ydHVuYXRlbHlZZXMKKwlOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgPSBZZXNQbGVhc2UKKwkjIFRoZXJlIGFyZSBjb25mbGljdGluZyByZXBvcnRzIGFib3V0IHRoaXMuCisJIyBPbiBzb21lIGJveGVzIE5PX01NQVAgaXMgbmVlZGVkLCBhbmQgbm90IHNvIGVsc2V3aGVyZS4KKwkjIFRyeSBjb21tZW50aW5nIHRoaXMgb3V0IGlmIHlvdSBzdXNwZWN0IE1NQVAgaXMgbW9yZSBlZmZpY2llbnQKKwlOT19NTUFQID0gWWVzUGxlYXNlCisJWCA9IC5leGUKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvY3lnd2luLm8KKwlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcworCVNQQVJTRV9GTEFHUyA9IC1pc3lzdGVtIC91c3IvaW5jbHVkZS93MzJhcGkgLVduby1vbmUtYml0LXNpZ25lZC1iaXRmaWVsZAogZW5kaWYKLWlmZXEgKCQodW5hbWVfUyksRGFyd2luKQotCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAkKFRLRlJBTUVXT1JLKSAmJiBlY2hvIHkpLHkpCi0JCUdJVEdVSV9NQUNPU1hBUFAgOj0gWWVzUGxlYXNlCitpZmVxICgkKHVuYW1lX1MpLEZyZWVCU0QpCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlPTERfSUNPTlYgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKKwlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9sb2NhbC9saWIKKwlESVJfSEFTX0JTRF9HUk9VUF9TRU1BTlRJQ1MgPSBZZXNQbGVhc2UKKwlVU0VfU1RfVElNRVNQRUMgPSBZZXNQbGVhc2UKKwlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJzRcLicpLDIpCisJCVBUSFJFQURfTElCUyA9IC1wdGhyZWFkCisJCU5PX1VJTlRNQVhfVCA9IFllc1BsZWFzZQorCQlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKIAllbmRpZgorCVBZVEhPTl9QQVRIID0gL3Vzci9sb2NhbC9iaW4vcHl0aG9uCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxPcGVuQlNEKQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlVU0VfU1RfVElNRVNQRUMgPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvbG9jYWwvaW5jbHVkZQorCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL2xvY2FsL2xpYgorCUhBVkVfUEFUSFNfSCA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksTmV0QlNEKQorCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnWzAxXVwuJyksMikKKwkJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwllbmRpZgorCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvcGtnL2luY2x1ZGUKKwlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9wa2cvbGliICQoQ0NfTERfRFlOUEFUSCkvdXNyL3BrZy9saWIKKwlVU0VfU1RfVElNRVNQRUMgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCUhBVkVfUEFUSFNfSCA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksQUlYKQorCURFRkFVTFRfUEFHRVIgPSBtb3JlCisJTk9fU1RSQ0FTRVNUUj1ZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTlNFQyA9IFllc1BsZWFzZQorCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTID0gVW5mb3J0dW5hdGVseVllcworCUlOVEVSTkFMX1FTT1JUID0gVW5mb3J0dW5hdGVseVllcworCU5FRURTX0xJQklDT05WPVllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtRF9MQVJHRV9GSUxFUworCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9WKSIgOiAnWzEyMzRdJyksMSkKKwkJTk9fUFRIUkVBRFMgPSBZZXNQbGVhc2UKKwllbHNlCisJCVBUSFJFQURfTElCUyA9IC1scHRocmVhZAorCWVuZGlmCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1YpLiQodW5hbWVfUikiIDogJzVcLjEnKSwzKQorCQlJTkxJTkU9JycKKwllbmRpZgorCUdJVF9URVNUX0NNUCA9IGNtcAorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksR05VKQorCSMgR05VL0h1cmQKKwlOT19TVFJMQ1BZPVllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJTElCQ19DT05UQUlOU19MSUJJTlRMID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxJUklYKQorCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCSMgV2hlbiBjb21waWxlZCB3aXRoIHRoZSBNSVBTcHJvIDcuNC40bSBjb21waWxlciwgYW5kIHdpdGhvdXQgcHRocmVhZHMKKwkjIChpLmUuIE5PX1BUSFJFQURTIGlzIHNldCksIGFuZCBfd2l0aF8gTU1BUCAoaS5lLiBOT19NTUFQIGlzIG5vdCBzZXQpLAorCSMgZ2l0IGRpZXMgd2l0aCBhIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHRyeWluZyB0byBhY2Nlc3MgdGhlIGZpcnN0CisJIyBlbnRyeSBvZiBhIHJlZmxvZy4gIFRoZSBjb25zZXJ2YXRpdmUgY2hvaWNlIGlzIG1hZGUgdG8gYWx3YXlzIHNldAorCSMgTk9fTU1BUC4gIElmIHlvdSBzdXNwZWN0IHRoYXQgeW91ciBjb21waWxlciBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcworCSMgaXNzdWUsIGNvbW1lbnQgb3V0IHRoZSBOT19NTUFQIHN0YXRlbWVudC4KKwlOT19NTUFQID0gWWVzUGxlYXNlCisJTk9fUkVHRVggPSBZZXNQbGVhc2UKKwlOT19GTk1BVENIX0NBU0VGT0xEID0gWWVzUGxlYXNlCisJU05QUklOVEZfUkVUVVJOU19CT0dVUyA9IFllc1BsZWFzZQorCVNIRUxMX1BBVEggPSAvdXNyL2dudS9iaW4vYmFzaAorCU5FRURTX0xJQkdFTiA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksSVJJWDY0KQorCU5PX1NFVEVOVj1ZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFI9WWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJIyBXaGVuIGNvbXBpbGVkIHdpdGggdGhlIE1JUFNwcm8gNy40LjRtIGNvbXBpbGVyLCBhbmQgd2l0aG91dCBwdGhyZWFkcworCSMgKGkuZS4gTk9fUFRIUkVBRFMgaXMgc2V0KSwgYW5kIF93aXRoXyBNTUFQIChpLmUuIE5PX01NQVAgaXMgbm90IHNldCksCisJIyBnaXQgZGllcyB3aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyB0aGUgZmlyc3QKKwkjIGVudHJ5IG9mIGEgcmVmbG9nLiAgVGhlIGNvbnNlcnZhdGl2ZSBjaG9pY2UgaXMgbWFkZSB0byBhbHdheXMgc2V0CisJIyBOT19NTUFQLiAgSWYgeW91IHN1c3BlY3QgdGhhdCB5b3VyIGNvbXBpbGVyIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzCisJIyBpc3N1ZSwgY29tbWVudCBvdXQgdGhlIE5PX01NQVAgc3RhdGVtZW50LgorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlOT19SRUdFWCA9IFllc1BsZWFzZQorCU5PX0ZOTUFUQ0hfQ0FTRUZPTEQgPSBZZXNQbGVhc2UKKwlTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCisJU0hFTExfUEFUSD0vdXNyL2dudS9iaW4vYmFzaAorCU5FRURTX0xJQkdFTiA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksSFAtVVgpCisJSU5MSU5FID0gX19pbmxpbmUKKwlOT19JUFY2PVllc1BsZWFzZQorCU5PX1NFVEVOVj1ZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSPVllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCU5PX1NZU19TRUxFQ1RfSCA9IFllc1BsZWFzZQorCU5PX0ZOTUFUQ0hfQ0FTRUZPTEQgPSBZZXNQbGVhc2UKKwlTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCisJTk9fTlNFQyA9IFllc1BsZWFzZQorCWlmZXEgKCQodW5hbWVfUiksQi4xMS4wMCkKKwkJTk9fSU5FVF9OVE9QID0gWWVzUGxlYXNlCisJCU5PX0lORVRfUFRPTiA9IFllc1BsZWFzZQorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKSxCLjEwLjIwKQorCQkjIE92ZXJyaWRlIEhQLVVYIDExLnggc2V0dGluZzoKKwkJSU5MSU5FID0KKwkJU09DS0xFTl9UID0gc2l6ZV90CisJCU5PX1BSRUFEID0gWWVzUGxlYXNlCisJCU5PX0lORVRfTlRPUCA9IFllc1BsZWFzZQorCQlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwllbmRpZgorCUdJVF9URVNUX0NNUCA9IGNtcAorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksV2luZG93cykKKwlHSVRfVkVSU0lPTiA6PSAkKEdJVF9WRVJTSU9OKS5NU1ZDCisJcGF0aHNlcCA9IDsKKwlOT19QUkVBRCA9IFllc1BsZWFzZQorCU5FRURTX0NSWVBUT19XSVRIX1NTTCA9IFllc1BsZWFzZQorCU5PX0xJQkdFTl9IID0gWWVzUGxlYXNlCisJTk9fUE9MTCA9IFllc1BsZWFzZQorCU5PX1NZTUxJTktfSEVBRCA9IFllc1BsZWFzZQorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19VTklYX1NPQ0tFVFMgPSBZZXNQbGVhc2UKKwlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fU1RSVE9LX1IgPSBZZXNQbGVhc2UKKwlOT19GTk1BVENIID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJIyBORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCU5PX0lDT05WID0gWWVzUGxlYXNlCisJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJTk9fU1RSVE9VTEwgPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCisJTk9fU1ZOX1RFU1RTID0gWWVzUGxlYXNlCisJTk9fUEVSTF9NQUtFTUFLRVIgPSBZZXNQbGVhc2UKKwlSVU5USU1FX1BSRUZJWCA9IFllc1BsZWFzZQorCU5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVCA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlVU0VfV0lOMzJfTU1BUCA9IFllc1BsZWFzZQorCSMgVVNFX05FRF9BTExPQ0FUT1IgPSBZZXNQbGVhc2UKKwlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcworCU9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgPSBVbmZvcnR1bmF0ZWx5TmVlZHNUbworCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJTk9fQ1VSTCA9IFllc1BsZWFzZQorCU5PX1BZVEhPTiA9IFllc1BsZWFzZQorCUJMS19TSEExID0gWWVzUGxlYXNlCisJTk9fUE9TSVhfR09PRElFUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlOQVRJVkVfQ1JMRiA9IFllc1BsZWFzZQorCURFRkFVTFRfSEVMUF9GT1JNQVQgPSBodG1sCisKKwlDQyA9IGNvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwKKwlBUiA9IGNvbXBhdC92Y2J1aWxkL3NjcmlwdHMvbGliLnBsCisJQ0ZMQUdTID0KKwlCQVNJQ19DRkxBR1MgPSAtbm9sb2dvIC1JLiAtSS4uL3psaWIgLUljb21wYXQvdmNidWlsZCAtSWNvbXBhdC92Y2J1aWxkL2luY2x1ZGUgLURXSU4zMiAtRF9DT05TT0xFIC1ESEFWRV9TVFJJTkdfSCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURQorCUNPTVBBVF9PQkpTID0gY29tcGF0L21zdmMubyBjb21wYXQvd2luYW5zaS5vIFwKKwkJY29tcGF0L3dpbjMyL3B0aHJlYWQubyBjb21wYXQvd2luMzIvc3lzbG9nLm8gXAorCQljb21wYXQvd2luMzIvZGlyZW50Lm8KKwlDT01QQVRfQ0ZMQUdTID0gLURfX1VTRV9NSU5HV19BQ0NFU1MgLUROT0dESSAtREhBVkVfU1RSSU5HX0ggLURIQVZFX0FMTE9DQV9IIC1JY29tcGF0IC1JY29tcGF0L3JlZ2V4IC1JY29tcGF0L3dpbjMyIC1EU1RSSVBfRVhURU5TSU9OPVwiLmV4ZVwiCisJQkFTSUNfTERGTEFHUyA9IC1JR05PUkU6NDIxNyAtSUdOT1JFOjQwNDkgLU5PTE9HTyAtU1VCU1lTVEVNOkNPTlNPTEUgLU5PREVGQVVMVExJQjpNU1ZDUlQubGliCisJRVhUTElCUyA9IHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIHdpbmluZXQubGliIHdzMl8zMi5saWIKKwlQVEhSRUFEX0xJQlMgPQorCWxpYiA9CitpZm5kZWYgREVCVUcKKwlCQVNJQ19DRkxBR1MgKz0gLUdMIC1PcyAtTVQKKwlCQVNJQ19MREZMQUdTICs9IC1MVENHCisJQVIgKz0gLUxUQ0cKK2Vsc2UKKwlCQVNJQ19DRkxBR1MgKz0gLVppIC1NVGQKK2VuZGlmCisJWCA9IC5leGUKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLEludGVyaXgpCisJTk9fSU5JVEdST1VQUyA9IFllc1BsZWFzZQorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJTk9fTlNFQyA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJaWZlcSAoJCh1bmFtZV9SKSwzLjUpCisJCU5PX0lORVRfTlRPUCA9IFllc1BsZWFzZQorCQlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwkJTk9fU09DS0FERFJfU1RPUkFHRSA9IFllc1BsZWFzZQorCQlOT19GTk1BVENIX0NBU0VGT0xEID0gWWVzUGxlYXNlCisJZW5kaWYKKwlpZmVxICgkKHVuYW1lX1IpLDUuMikKKwkJTk9fSU5FVF9OVE9QID0gWWVzUGxlYXNlCisJCU5PX0lORVRfUFRPTiA9IFllc1BsZWFzZQorCQlOT19TT0NLQUREUl9TVE9SQUdFID0gWWVzUGxlYXNlCisJCU5PX0ZOTUFUQ0hfQ0FTRUZPTEQgPSBZZXNQbGVhc2UKKwllbmRpZgorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksTWluaXgpCisJTk9fSVBWNiA9IFllc1BsZWFzZQorCU5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVCA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlORUVEU19MSUJHRU4gPQorCU5FRURTX0NSWVBUT19XSVRIX1NTTCA9IFllc1BsZWFzZQorCU5FRURTX0lETl9XSVRIX0NVUkwgPSBZZXNQbGVhc2UKKwlORUVEU19TU0xfV0lUSF9DVVJMID0gWWVzUGxlYXNlCisJTkVFRFNfUkVTT0xWID0KKwlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlOT19NTUFQID0gWWVzUGxlYXNlCisJTk9fQ1VSTCA9CisJTk9fRVhQQVQgPQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksTk9OU1RPUF9LRVJORUwpCisJIyBOZWVkcyBzb21lIEM5OSBmZWF0dXJlcywgImlubGluZSIgaXMganVzdCBvbmUgb2YgdGhlbS4KKwkjIElOTElORT0nJyB3b3VsZCBqdXN0IHJlcGxhY2Ugb25lIHNldCBvZiB3YXJuaW5ncyB3aXRoIGFub3RoZXIgYW5kCisJIyBzdGlsbCBub3QgY29tcGlsZSBpbiBjODkgbW9kZSwgZHVlIHRvIG5vbi1jb25zdCBhcnJheSBpbml0aWFsaXphdGlvbnMuCisJQ0MgPSBjYyAtYzk5CisJIyBEaXNhYmxlIGFsbCBvcHRpbWl6YXRpb24sIHNlZW1zIHRvIHJlc3VsdCBpbiBiYWQgY29kZSwgd2l0aCAtTyBvciAtTzIKKwkjIG9yIGV2ZW4gLU8xIChkZWZhdWx0KSwgL3Vzci9sb2NhbC9saWJleGVjL2dpdC1jb3JlL2dpdC1wYWNrLW9iamVjdHMKKwkjIGFiZW5kcyBvbiAiZ2l0IHB1c2giLiBOZWVkcyBtb3JlIGludmVzdGlnYXRpb24uCisJQ0ZMQUdTID0gLWcgLU8wCisJIyBXZSdkIHdhbnQgaXQgdG8gYmUgaGVyZS4KKwlwcmVmaXggPSAvdXNyL2xvY2FsCisJIyBPdXIncyBhcmUgaW4gJHtwcmVmaXh9L2JpbiAocGVybCBtaWdodCBhbHNvIGJlIGluIC91c3IvYmluL3BlcmwpLgorCVBFUkxfUEFUSCA9ICR7cHJlZml4fS9iaW4vcGVybAorCVBZVEhPTl9QQVRIID0gJHtwcmVmaXh9L2Jpbi9weXRob24KKworCSMgQXMgZGV0ZWN0ZWQgYnkgJy4vY29uZmlndXJlJy4KKwkjIE1pc3NkZXRlY3RlZCwgaGVuY2UgY29tbWVudGVkIG91dCwgc2VlIGJlbG93LgorCSNOT19DVVJMID0gWWVzUGxlYXNlCisJIyBBZGRlZCBtYW51YWxseSwgc2VlIGFib3ZlLgorCU5FRURTX1NTTF9XSVRIX0NVUkwgPSBZZXNQbGVhc2UKKwlIQVZFX0xJQkNIQVJTRVRfSCA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSU5UTF9CRUZPUkVfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlOT19TWVNfU0VMRUNUX0ggPSBVbmZvcnR1bmF0ZWx5WWVzCisJTk9fRF9UWVBFX0lOX0RJUkVOVCA9IFllc1BsZWFzZQorCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19GTk1BVENIX0NBU0VGT0xEID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJIyBDdXJyZW50bHkgbGliaWNvbnYtMS45LjEuCisJT0xEX0lDT05WID0gVW5mb3J0dW5hdGVseVllcworCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJTk9fUFRIUkVBRFMgPSBVbmZvcnR1bmF0ZWx5WWVzCisKKwkjIE5vdCBkZXRlY3RlZCAobm9yIGNoZWNrZWQgZm9yKSBieSAnLi9jb25maWd1cmUnLgorCSMgV2UgZG9uJ3QgaGF2ZSBTQV9SRVNUQVJUIG9uIE5vblN0b3AsIHVuZm9ydHVuYWxldHkuCisJQ09NUEFUX0NGTEFHUyArPSAtRFNBX1JFU1RBUlQ9MAorCSMgQXBwYXJlbnRseSBuZWVkZWQgaW4gY29tcGF0L2ZubWF0Y2gvZm5tYXRjaC5jLgorCUNPTVBBVF9DRkxBR1MgKz0gLURIQVZFX1NUUklOR19IPTEKKwlOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgPSBZZXNQbGVhc2UKKwlOT19OU0VDID0gWWVzUGxlYXNlCisJTk9fUFJFQUQgPSBZZXNQbGVhc2UKKwlOT19NTUFQID0gWWVzUGxlYXNlCisJTk9fUE9MTCA9IFllc1BsZWFzZQorCU5PX0lOVFBUUl9UID0gVW5mb3J0dW5hdGVseVllcworCSMgQnVnIHJlcG9ydCAxMC0xMjA4MjItNDQ3NyBzdWJtaXR0ZWQgdG8gSFAgTm9uU3RvcCBkZXZlbG9wbWVudC4KKwlNS0RJUl9XT19UUkFJTElOR19TTEFTSCA9IFllc1BsZWFzZQorCSMgUkZFIDEwLTEyMDkxMi00NjkzIHN1Ym1pdHRlZCB0byBIUCBOb25TdG9wIGRldmVsb3BtZW50LgorCU5PX1NFVElUSU1FUiA9IFVuZm9ydHVuYXRlbHlZZXMKIGVuZGlmCiBpZm5lcSAoLCQoZmluZHN0cmluZyBNSU5HVywkKHVuYW1lX1MpKSkKLQlOT19NU0dGTVQ9MQotCUdJVEdVSV9XSU5ET1dTX1dSQVBQRVIgOj0gWWVzUGxlYXNlCi0JR0lUR1VJX1JFTEFUSVZFIDo9IDEKLWVuZGlmCi0KLWlmZGVmIEdJVEdVSV9NQUNPU1hBUFAKLUdJVEdVSV9NQUlOIDo9IGdpdC1ndWkudGNsCi0KLWdpdC1ndWk6IEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTCi0JJChRVUlFVF9HRU4pcm0gLWYgJEAgJEArICYmIFwKLQllY2hvICcjISQoU0hFTExfUEFUSF9TUSknID4kQCsgJiYgXAotCWVjaG8gJ2lmIHRlc3QgInokJCoiID0genZlcnNpb24gfHwnID4+JEArICYmIFwKLQllY2hvICcgICB0ZXN0ICJ6JCQqIiA9IHotLXZlcnNpb24nID4+JEArICYmIFwKLQllY2hvIHRoZW4gPj4kQCsgJiYgXAotCWVjaG8gJwknZWNobyBcJ2dpdC1ndWkgdmVyc2lvbiAnJChHSVRHVUlfVkVSU0lPTiknXCcgPj4kQCsgJiYgXAotCWVjaG8gZWxzZSA+PiRAKyAmJiBcCi0JZWNobyAnCSdleGVjIFwnJyQobGliZGlyX1NRKS9HaXQgR3VpLmFwcC9Db250ZW50cy9NYWNPUy8kKHN1YnN0IFwsLCQoVEtFWEVDVVRBQkxFKSknXCcgXAotCQknIiQkMCIgIiQkQCInID4+JEArICYmIFwKLQllY2hvIGZpID4+JEArICYmIFwKLQljaG1vZCAreCAkQCsgJiYgXAotCW12ICRAKyAkQAotCi1HaXRcIEd1aS5hcHA6IEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTIFwKLQkJbWFjb3N4L0luZm8ucGxpc3QgXAotCQltYWNvc3gvZ2l0LWd1aS5pY25zIFwKLQkJbWFjb3N4L0FwcE1haW4udGNsIFwKLQkJJChUS0ZSQU1FV09SSykvQ29udGVudHMvTWFjT1MvJChUS0VYRUNVVEFCTEUpCi0JJChRVUlFVF9HRU4pcm0gLXJmICckQCcgJyRAJysgJiYgXAotCW1rZGlyIC1wICckQCcrL0NvbnRlbnRzL01hY09TICYmIFwKLQlta2RpciAtcCAnJEAnKy9Db250ZW50cy9SZXNvdXJjZXMvU2NyaXB0cyAmJiBcCi0JY3AgJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgXCwsJChUS0ZSQU1FV09SSykvQ29udGVudHMvTWFjT1MvJChUS0VYRUNVVEFCTEUpKSknIFwKLQkJJyRAJysvQ29udGVudHMvTWFjT1MgJiYgXAotCWNwIG1hY29zeC9naXQtZ3VpLmljbnMgJyRAJysvQ29udGVudHMvUmVzb3VyY2VzICYmIFwKLQlzZWQgLWUgJ3MvQEBHSVRHVUlfVkVSU0lPTkBALyQoR0lUR1VJX1ZFUlNJT04pL2cnIFwKLQkJLWUgJ3MvQEBHSVRHVUlfVEtFWEVDVVRBQkxFQEAvJChUS0VYRUNVVEFCTEUpL2cnIFwKLQkJbWFjb3N4L0luZm8ucGxpc3QgXAotCQk+JyRAJysvQ29udGVudHMvSW5mby5wbGlzdCAmJiBcCi0Jc2VkIC1lICdzfEBAZ2l0ZXhlY2RpckBAfCQoZ2l0ZXhlY2Rpcl9TUSl8JyBcCi0JCS1lICdzfEBAR0lUR1VJX0xJQkRJUkBAfCQobGliZGlyX1NFRCl8JyBcCi0JCW1hY29zeC9BcHBNYWluLnRjbCBcCi0JCT4nJEAnKy9Db250ZW50cy9SZXNvdXJjZXMvU2NyaXB0cy9BcHBNYWluLnRjbCAmJiBcCi0JbXYgJyRAJysgJyRAJwotZW5kaWYKLQotaWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgotR0lUR1VJX01BSU4gOj0gZ2l0LWd1aS50Y2wKLQotZ2l0LWd1aTogd2luZG93cy9naXQtZ3VpLnNoCi0JY3AgJDwgJEAKLWVuZGlmCi0KLSQoR0lUR1VJX01BSU4pOiBnaXQtZ3VpLnNoIEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTCi0JJChRVUlFVF9HRU4pcm0gLWYgJEAgJEArICYmIFwKLQlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAotCQktZSAnc3xAQFNIRUxMX1BBVEhAQHwkKFNIRUxMX1BBVEhfU1EpfCcgXAotCQktZSAnMSwzMHN8XiBhcmd2MD0kJDB8IGFyZ3YwPSQoR0lUR1VJX1NDUklQVCl8JyBcCi0JCS1lICcxLDMwc3xeIGV4ZWMgd2lzaCB8IGV4ZWMgJ1wnJyQoVENMVEtfUEFUSF9TRUQpJ1wnJyB8JyBcCi0JCS1lICdzL0BAR0lUR1VJX1ZFUlNJT05AQC8kKEdJVEdVSV9WRVJTSU9OKS9nJyBcCi0JCS1lICdzfEBAR0lUR1VJX1JFTEFUSVZFQEB8JChHSVRHVUlfUkVMQVRJVkUpfCcgXAotCQktZSAnJChHSVRHVUlfUkVMQVRJVkUpc3xAQEdJVEdVSV9MSUJESVJAQHwkKGxpYmRpcl9TRUQpfCcgXAotCQlnaXQtZ3VpLnNoID4kQCsgJiYgXAotCWNobW9kICt4ICRAKyAmJiBcCi0JbXYgJEArICRACi0KLVhHRVRURVhUICAgPz0geGdldHRleHQKLWlmZGVmIE5PX01TR0ZNVAotCU1TR0ZNVCA/PSAkKFRDTF9QQVRIKSBwby9wbzJtc2cuc2gKKwlwYXRoc2VwID0gOworCU5PX1BSRUFEID0gWWVzUGxlYXNlCisJTkVFRFNfQ1JZUFRPX1dJVEhfU1NMID0gWWVzUGxlYXNlCisJTk9fTElCR0VOX0ggPSBZZXNQbGVhc2UKKwlOT19QT0xMID0gWWVzUGxlYXNlCisJTk9fU1lNTElOS19IRUFEID0gWWVzUGxlYXNlCisJTk9fVU5JWF9TT0NLRVRTID0gWWVzUGxlYXNlCisJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX1NUUlRPS19SID0gWWVzUGxlYXNlCisJTk9fRk5NQVRDSCA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJT0xEX0lDT05WID0gWWVzUGxlYXNlCisJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJTk9fU1ZOX1RFU1RTID0gWWVzUGxlYXNlCisJTk9fUEVSTF9NQUtFTUFLRVIgPSBZZXNQbGVhc2UKKwlSVU5USU1FX1BSRUZJWCA9IFllc1BsZWFzZQorCU5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVCA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlVU0VfV0lOMzJfTU1BUCA9IFllc1BsZWFzZQorCVVTRV9ORURfQUxMT0NBVE9SID0gWWVzUGxlYXNlCisJVU5SRUxJQUJMRV9GU1RBVCA9IFVuZm9ydHVuYXRlbHlZZXMKKwlPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTID0gVW5mb3J0dW5hdGVseU5lZWRzVG8KKwlOT19SRUdFWCA9IFllc1BsZWFzZQorCU5PX1BZVEhPTiA9IFllc1BsZWFzZQorCUJMS19TSEExID0gWWVzUGxlYXNlCisJRVRBR1NfVEFSR0VUID0gRVRBR1MKKwlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwlOT19JTkVUX05UT1AgPSBZZXNQbGVhc2UKKwlOT19QT1NJWF9HT09ESUVTID0gVW5mb3J0dW5hdGVseVllcworCUNPTVBBVF9DRkxBR1MgKz0gLURfX1VTRV9NSU5HV19BQ0NFU1MgLUROT0dESSAtSWNvbXBhdCAtSWNvbXBhdC93aW4zMgorCUNPTVBBVF9DRkxBR1MgKz0gLURTVFJJUF9FWFRFTlNJT049XCIuZXhlXCIKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvbWluZ3cubyBjb21wYXQvd2luYW5zaS5vIFwKKwkJY29tcGF0L3dpbjMyL3B0aHJlYWQubyBjb21wYXQvd2luMzIvc3lzbG9nLm8gXAorCQljb21wYXQvd2luMzIvZGlyZW50Lm8KKwlFWFRMSUJTICs9IC1sd3MyXzMyCisJUFRIUkVBRF9MSUJTID0KKwlYID0gLmV4ZQorCVNQQVJTRV9GTEFHUyA9IC1Xbm8tb25lLWJpdC1zaWduZWQtYml0ZmllbGQKK2lmbmVxICgsJCh3aWxkY2FyZCAuLi9USElTX0lTX01TWVNHSVQpKQorCWh0bWxkaXI9ZG9jL2dpdC9odG1sLworCXByZWZpeCA9CisJSU5TVEFMTCA9IC9iaW4vaW5zdGFsbAorCUVYVExJQlMgKz0gL21pbmd3L2xpYi9saWJ6LmEKKwlOT19SX1RPX0dDQ19MSU5LRVIgPSBZZXNQbGVhc2UKKwlJTlRFUk5BTF9RU09SVCA9IFllc1BsZWFzZQorCUhBVkVfTElCQ0hBUlNFVF9IID0gWWVzUGxlYXNlCiBlbHNlCi0JTVNHRk1UID89IG1zZ2ZtdAotCWlmbmVxICgkKHNoZWxsICQoTVNHRk1UKSAtLXRjbCAtbCBDIC1kIC4gL2Rldi9udWxsIDI+L2Rldi9udWxsOyBlY2hvICQkPyksMCkKLQkJTVNHRk1UIDo9ICQoVENMX1BBVEgpIHBvL3BvMm1zZy5zaAorCU5PX0NVUkwgPSBZZXNQbGVhc2UKK2VuZGlmCitlbmRpZgorCistaW5jbHVkZSBjb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIGNvbmZpZy5tYWsKKworaWZuZGVmIHN5c2NvbmZkaXIKK2lmZXEgKCQocHJlZml4KSwvdXNyKQorc3lzY29uZmRpciA9IC9ldGMKK2Vsc2UKK3N5c2NvbmZkaXIgPSBldGMKK2VuZGlmCitlbmRpZgorCitpZmRlZiBDSEVDS19IRUFERVJfREVQRU5ERU5DSUVTCitDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMgPSBubworVVNFX0NPTVBVVEVEX0hFQURFUl9ERVBFTkRFTkNJRVMgPQorZW5kaWYKKworaWZuZGVmIENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUworQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTID0gYXV0bworZW5kaWYKKworaWZlcSAoJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpLGF1dG8pCitkZXBfY2hlY2sgPSAkKHNoZWxsICQoQ0MpICQoQUxMX0NGTEFHUykgXAorCS1jIC1NRiAvZGV2L251bGwgLU1NRCAtTVAgLXggYyAvZGV2L251bGwgLW8gL2Rldi9udWxsIDI+JjE7IFwKKwllY2hvICQkPykKK2lmZXEgKCQoZGVwX2NoZWNrKSwwKQorb3ZlcnJpZGUgQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTID0geWVzCitlbHNlCitvdmVycmlkZSBDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMgPSBubworZW5kaWYKK2VuZGlmCisKK2lmZXEgKCQoQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTKSx5ZXMpCitVU0VfQ09NUFVURURfSEVBREVSX0RFUEVOREVOQ0lFUyA9IFllc1BsZWFzZQorZWxzZQoraWZuZXEgKCQoQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTKSxubykKKyQoZXJyb3IgcGxlYXNlIHNldCBDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMgdG8geWVzLCBubywgb3IgYXV0byBcCisobm90ICIkKENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUykiKSkKK2VuZGlmCitlbmRpZgorCitpZmRlZiBTQU5FX1RPT0xfUEFUSAorU0FORV9UT09MX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNBTkVfVE9PTF9QQVRIKSkKK0JST0tFTl9QQVRIX0ZJWCA9ICdzfF5cIyBAQEJST0tFTl9QQVRIX0ZJWEBAJCR8Z2l0X2Jyb2tlbl9wYXRoX2ZpeCAkKFNBTkVfVE9PTF9QQVRIX1NRKXwnCitQQVRIIDo9ICQoU0FORV9UT09MX1BBVEgpOiR7UEFUSH0KK2Vsc2UKK0JST0tFTl9QQVRIX0ZJWCA9ICcvXlwjIEBAQlJPS0VOX1BBVEhfRklYQEAkJC9kJworZW5kaWYKKworaWZuZXEgKCwkKElOTElORSkpCisJQkFTSUNfQ0ZMQUdTICs9IC1EaW5saW5lPSQoSU5MSU5FKQorZW5kaWYKKworaWZuZXEgKCwkKFNPQ0tMRU5fVCkpCisJQkFTSUNfQ0ZMQUdTICs9IC1Ec29ja2xlbl90PSQoU09DS0xFTl9UKQorZW5kaWYKKworaWZlcSAoJCh1bmFtZV9TKSxEYXJ3aW4pCisJaWZuZGVmIE5PX0ZJTksKKwkJaWZlcSAoJChzaGVsbCB0ZXN0IC1kIC9zdy9saWIgJiYgZWNobyB5KSx5KQorCQkJQkFTSUNfQ0ZMQUdTICs9IC1JL3N3L2luY2x1ZGUKKwkJCUJBU0lDX0xERkxBR1MgKz0gLUwvc3cvbGliCisJCWVuZGlmCisJZW5kaWYKKwlpZm5kZWYgTk9fREFSV0lOX1BPUlRTCisJCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAvb3B0L2xvY2FsL2xpYiAmJiBlY2hvIHkpLHkpCisJCQlCQVNJQ19DRkxBR1MgKz0gLUkvb3B0L2xvY2FsL2luY2x1ZGUKKwkJCUJBU0lDX0xERkxBR1MgKz0gLUwvb3B0L2xvY2FsL2xpYgorCQllbmRpZgorCWVuZGlmCisJUFRIUkVBRF9MSUJTID0KK2VuZGlmCisKK2lmbmRlZiBDQ19MRF9EWU5QQVRICisJaWZkZWYgTk9fUl9UT19HQ0NfTElOS0VSCisJCSMgU29tZSBnY2MgZG9lcyBub3QgYWNjZXB0IGFuZCBwYXNzIC1SIHRvIHRoZSBsaW5rZXIgdG8gc3BlY2lmeQorCQkjIHRoZSBydW50aW1lIGR5bmFtaWMgbGlicmFyeSBwYXRoLgorCQlDQ19MRF9EWU5QQVRIID0gLVdsLC1ycGF0aCwKKwllbHNlCisJCUNDX0xEX0RZTlBBVEggPSAtUgogCWVuZGlmCiBlbmRpZgogCi1tc2dzZGlyICAgICA9ICQoZ2dfbGliZGlyKS9tc2dzCi1tc2dzZGlyX1NRICA9ICQoc3Vic3QgJywnXCcnLCQobXNnc2RpcikpCi1QT19URU1QTEFURSA9IHBvL2dpdC1ndWkucG90Ci1BTExfUE9GSUxFUyA9ICQod2lsZGNhcmQgcG8vKi5wbykKLUFMTF9NU0dGSUxFUyA9ICQoc3Vic3QgLnBvLC5tc2csJChBTExfUE9GSUxFUykpCitpZmRlZiBOT19MSUJHRU5fSAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19MSUJHRU5fSAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9iYXNlbmFtZS5vCitlbmRpZgogCi0kKFBPX1RFTVBMQVRFKTogJChTQ1JJUFRfU0gpICQoQUxMX0xJQkZJTEVTKQotCSQoWEdFVFRFWFQpIC1rbWMgLUxUY2wgLW8gJEAgJChTQ1JJUFRfU0gpICQoQUxMX0xJQkZJTEVTKQotdXBkYXRlLXBvOjogJChQT19URU1QTEFURSkKLQkkKGZvcmVhY2ggcCwgJChBTExfUE9GSUxFUyksIGVjaG8gVXBkYXRpbmcgJHAgOyBtc2dtZXJnZSAtVSAkcCAkKFBPX1RFTVBMQVRFKSA7ICkKLSQoQUxMX01TR0ZJTEVTKTogJS5tc2cgOiAlLnBvCi0JJChRVUlFVF9NU0dGTVQwKSQoTVNHRk1UKSAtLXN0YXRpc3RpY3MgLS10Y2wgLWwgJChiYXNlbmFtZSAkKG5vdGRpciAkPCkpIC1kICQoZGlyICRAKSAkPCAkKFFVSUVUX01TR0ZNVDEpCitpZmRlZiBVU0VfTElCUENSRQorCUJBU0lDX0NGTEFHUyArPSAtRFVTRV9MSUJQQ1JFCisJaWZkZWYgTElCUENSRURJUgorCQlCQVNJQ19DRkxBR1MgKz0gLUkkKExJQlBDUkVESVIpL2luY2x1ZGUKKwkJRVhUTElCUyArPSAtTCQoTElCUENSRURJUikvJChsaWIpICQoQ0NfTERfRFlOUEFUSCkkKExJQlBDUkVESVIpLyQobGliKQorCWVuZGlmCisJRVhUTElCUyArPSAtbHBjcmUKK2VuZGlmCiAKLWxpYi90Y2xJbmRleDogJChBTExfTElCRklMRVMpIEdJVC1HVUktVkFSUwotCSQoUVVJRVRfSU5ERVgpaWYgZWNobyBcCi0JICAkKGZvcmVhY2ggcCwkKFBSRUxPQURfRklMRVMpLHNvdXJjZSAkcFw7KSBcCi0JICBhdXRvX21raW5kZXggbGliICcqLnRjbCcgXAotCXwgJChUQ0xfUEFUSCkgJChRVUlFVF8yREVWTlVMTCk7IHRoZW4gOiBvazsgXAotCWVsc2UgXAotCSBlY2hvIDE+JjIgIiAgICAqICQoVENMX1BBVEgpIGZhaWxlZDsgdXNpbmcgdW5vcHRpbWl6ZWQgbG9hZGluZyI7IFwKLQkgcm0gLWYgJEAgOyBcCi0JIGVjaG8gJyMgQXV0b2dlbmVyYXRlZCBieSBnaXQtZ3VpIE1ha2VmaWxlJyA+JEAgJiYgXAotCSBlY2hvID4+JEAgJiYgXAotCSAkKGZvcmVhY2ggcCwkKFBSRUxPQURfRklMRVMpICQoQUxMX0xJQkZJTEVTKSxlY2hvICckKHN1YnN0IGxpYi8sLCRwKScgPj4kQCAmJikgXAotCSBlY2hvID4+JEAgOyBcCitpZmRlZiBOT19DVVJMCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fQ1VSTAorCVJFTU9URV9DVVJMX1BSSU1BUlkgPQorCVJFTU9URV9DVVJMX0FMSUFTRVMgPQorCVJFTU9URV9DVVJMX05BTUVTID0KK2Vsc2UKKwlpZmRlZiBDVVJMRElSCisJCSMgVHJ5ICItV2wsLXJwYXRoPSQoQ1VSTERJUikvJChsaWIpIiBpbiBzdWNoIGEgY2FzZS4KKwkJQkFTSUNfQ0ZMQUdTICs9IC1JJChDVVJMRElSKS9pbmNsdWRlCisJCUNVUkxfTElCQ1VSTCA9IC1MJChDVVJMRElSKS8kKGxpYikgJChDQ19MRF9EWU5QQVRIKSQoQ1VSTERJUikvJChsaWIpIC1sY3VybAorCWVsc2UKKwkJQ1VSTF9MSUJDVVJMID0gLWxjdXJsCisJZW5kaWYKKwlpZmRlZiBORUVEU19TU0xfV0lUSF9DVVJMCisJCUNVUkxfTElCQ1VSTCArPQktbHNzbAorCQlpZmRlZiBORUVEU19DUllQVE9fV0lUSF9TU0wKKwkJCUNVUkxfTElCQ1VSTCArPSAtbGNyeXB0bworCQllbmRpZgorCWVuZGlmCisJaWZkZWYgTkVFRFNfSUROX1dJVEhfQ1VSTAorCQlDVVJMX0xJQkNVUkwgKz0gLWxpZG4KKwllbmRpZgorCisJUkVNT1RFX0NVUkxfUFJJTUFSWSA9IGdpdC1yZW1vdGUtaHR0cCRYCisJUkVNT1RFX0NVUkxfQUxJQVNFUyA9IGdpdC1yZW1vdGUtaHR0cHMkWCBnaXQtcmVtb3RlLWZ0cCRYIGdpdC1yZW1vdGUtZnRwcyRYCisJUkVNT1RFX0NVUkxfTkFNRVMgPSAkKFJFTU9URV9DVVJMX1BSSU1BUlkpICQoUkVNT1RFX0NVUkxfQUxJQVNFUykKKwlQUk9HUkFNX09CSlMgKz0gaHR0cC1mZXRjaC5vCisJUFJPR1JBTVMgKz0gJChSRU1PVEVfQ1VSTF9OQU1FUykKKwljdXJsX2NoZWNrIDo9ICQoc2hlbGwgKGVjaG8gMDcwOTA4OyBjdXJsLWNvbmZpZyAtLXZlcm51bSkgfCBzb3J0IC1yIHwgc2VkIC1uZSAycCkKKwlpZmVxICIkKGN1cmxfY2hlY2spIiAiMDcwOTA4IgorCQlpZm5kZWYgTk9fRVhQQVQKKwkJCVBST0dSQU1fT0JKUyArPSBodHRwLXB1c2gubworCQllbmRpZgorCWVuZGlmCisJaWZuZGVmIE5PX0VYUEFUCisJCWlmZGVmIEVYUEFURElSCisJCQlCQVNJQ19DRkxBR1MgKz0gLUkkKEVYUEFURElSKS9pbmNsdWRlCisJCQlFWFBBVF9MSUJFWFBBVCA9IC1MJChFWFBBVERJUikvJChsaWIpICQoQ0NfTERfRFlOUEFUSCkkKEVYUEFURElSKS8kKGxpYikgLWxleHBhdAorCQllbHNlCisJCQlFWFBBVF9MSUJFWFBBVCA9IC1sZXhwYXQKKwkJZW5kaWYKKwllbmRpZgorZW5kaWYKKworaWZkZWYgWkxJQl9QQVRICisJQkFTSUNfQ0ZMQUdTICs9IC1JJChaTElCX1BBVEgpL2luY2x1ZGUKKwlFWFRMSUJTICs9IC1MJChaTElCX1BBVEgpLyQobGliKSAkKENDX0xEX0RZTlBBVEgpJChaTElCX1BBVEgpLyQobGliKQorZW5kaWYKK0VYVExJQlMgKz0gLWx6CisKK2lmbmRlZiBOT19PUEVOU1NMCisJT1BFTlNTTF9MSUJTU0wgPSAtbHNzbAorCWlmZGVmIE9QRU5TU0xESVIKKwkJQkFTSUNfQ0ZMQUdTICs9IC1JJChPUEVOU1NMRElSKS9pbmNsdWRlCisJCU9QRU5TU0xfTElOSyA9IC1MJChPUEVOU1NMRElSKS8kKGxpYikgJChDQ19MRF9EWU5QQVRIKSQoT1BFTlNTTERJUikvJChsaWIpCisJZWxzZQorCQlPUEVOU1NMX0xJTksgPQorCWVuZGlmCisJaWZkZWYgTkVFRFNfQ1JZUFRPX1dJVEhfU1NMCisJCU9QRU5TU0xfTElCU1NMICs9IC1sY3J5cHRvCisJZW5kaWYKK2Vsc2UKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19PUEVOU1NMCisJQkxLX1NIQTEgPSAxCisJT1BFTlNTTF9MSUJTU0wgPQorZW5kaWYKK2lmZGVmIE5PX09QRU5TU0wKKwlMSUJfNF9DUllQVE8gPQorZWxzZQoraWZkZWYgTkVFRFNfU1NMX1dJVEhfQ1JZUFRPCisJTElCXzRfQ1JZUFRPID0gJChPUEVOU1NMX0xJTkspIC1sY3J5cHRvIC1sc3NsCitlbHNlCisJTElCXzRfQ1JZUFRPID0gJChPUEVOU1NMX0xJTkspIC1sY3J5cHRvCitlbmRpZgorZW5kaWYKK2lmZGVmIE5FRURTX0xJQklDT05WCisJaWZkZWYgSUNPTlZESVIKKwkJQkFTSUNfQ0ZMQUdTICs9IC1JJChJQ09OVkRJUikvaW5jbHVkZQorCQlJQ09OVl9MSU5LID0gLUwkKElDT05WRElSKS8kKGxpYikgJChDQ19MRF9EWU5QQVRIKSQoSUNPTlZESVIpLyQobGliKQorCWVsc2UKKwkJSUNPTlZfTElOSyA9CisJZW5kaWYKKwlpZmRlZiBORUVEU19MSUJJTlRMX0JFRk9SRV9MSUJJQ09OVgorCQlJQ09OVl9MSU5LICs9IC1saW50bAorCWVuZGlmCisJRVhUTElCUyArPSAkKElDT05WX0xJTkspIC1saWNvbnYKK2VuZGlmCitpZmRlZiBORUVEU19MSUJHRU4KKwlFWFRMSUJTICs9IC1sZ2VuCitlbmRpZgoraWZuZGVmIE5PX0dFVFRFWFQKK2lmbmRlZiBMSUJDX0NPTlRBSU5TX0xJQklOVEwKKwlFWFRMSUJTICs9IC1saW50bAorZW5kaWYKK2VuZGlmCitpZmRlZiBORUVEU19TT0NLRVQKKwlFWFRMSUJTICs9IC1sc29ja2V0CitlbmRpZgoraWZkZWYgTkVFRFNfTlNMCisJRVhUTElCUyArPSAtbG5zbAorZW5kaWYKK2lmZGVmIE5FRURTX1JFU09MVgorCUVYVExJQlMgKz0gLWxyZXNvbHYKK2VuZGlmCitpZmRlZiBOT19EX1RZUEVfSU5fRElSRU5UCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fRF9UWVBFX0lOX0RJUkVOVAorZW5kaWYKK2lmZGVmIE5PX0RfSU5PX0lOX0RJUkVOVAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0RfSU5PX0lOX0RJUkVOVAorZW5kaWYKK2lmZGVmIE5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVAorZW5kaWYKK2lmZGVmIFVTRV9OU0VDCisJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX05TRUMKK2VuZGlmCitpZmRlZiBVU0VfU1RfVElNRVNQRUMKKwlCQVNJQ19DRkxBR1MgKz0gLURVU0VfU1RfVElNRVNQRUMKK2VuZGlmCitpZmRlZiBOT19OT1JFVFVSTgorCUJBU0lDX0NGTEFHUyArPSAtRE5PX05PUkVUVVJOCitlbmRpZgoraWZkZWYgTk9fTlNFQworCUJBU0lDX0NGTEFHUyArPSAtRE5PX05TRUMKK2VuZGlmCitpZmRlZiBTTlBSSU5URl9SRVRVUk5TX0JPR1VTCisJQ09NUEFUX0NGTEFHUyArPSAtRFNOUFJJTlRGX1JFVFVSTlNfQk9HVVMKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvc25wcmludGYubworZW5kaWYKK2lmZGVmIEZSRUFEX1JFQURTX0RJUkVDVE9SSUVTCisJQ09NUEFUX0NGTEFHUyArPSAtREZSRUFEX1JFQURTX0RJUkVDVE9SSUVTCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L2ZvcGVuLm8KK2VuZGlmCitpZmRlZiBOT19TWU1MSU5LX0hFQUQKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19TWU1MSU5LX0hFQUQKK2VuZGlmCitpZmRlZiBHRVRURVhUX1BPSVNPTgorCUJBU0lDX0NGTEFHUyArPSAtREdFVFRFWFRfUE9JU09OCitlbmRpZgoraWZkZWYgTk9fR0VUVEVYVAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0dFVFRFWFQKKwlVU0VfR0VUVEVYVF9TQ0hFTUUgPz0gZmFsbHRocm91Z2gKK2VuZGlmCitpZmRlZiBOT19QT0xMCisJTk9fU1lTX1BPTExfSCA9IFllc1BsZWFzZQorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19QT0xMIC1JY29tcGF0L3BvbGwKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvcG9sbC9wb2xsLm8KK2VuZGlmCitpZmRlZiBOT19TVFJDQVNFU1RSCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1NUUkNBU0VTVFIKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvc3RyY2FzZXN0ci5vCitlbmRpZgoraWZkZWYgTk9fU1RSTENQWQorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19TVFJMQ1BZCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3N0cmxjcHkubworZW5kaWYKK2lmZGVmIE5PX1NUUlRPVU1BWAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19TVFJUT1VNQVgKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvc3RydG91bWF4Lm8gY29tcGF0L3N0cnRvaW1heC5vCitlbmRpZgoraWZkZWYgTk9fU1RSVE9VTEwKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU1RSVE9VTEwKK2VuZGlmCitpZmRlZiBOT19TVFJUT0tfUgorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19TVFJUT0tfUgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9zdHJ0b2tfci5vCitlbmRpZgoraWZkZWYgTk9fRk5NQVRDSAorCUNPTVBBVF9DRkxBR1MgKz0gLUljb21wYXQvZm5tYXRjaAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19GTk1BVENICisJQ09NUEFUX09CSlMgKz0gY29tcGF0L2ZubWF0Y2gvZm5tYXRjaC5vCitlbHNlCitpZmRlZiBOT19GTk1BVENIX0NBU0VGT0xECisJQ09NUEFUX0NGTEFHUyArPSAtSWNvbXBhdC9mbm1hdGNoCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX0ZOTUFUQ0hfQ0FTRUZPTEQKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvZm5tYXRjaC9mbm1hdGNoLm8KK2VuZGlmCitlbmRpZgoraWZkZWYgTk9fU0VURU5WCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1NFVEVOVgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9zZXRlbnYubworZW5kaWYKK2lmZGVmIE5PX01LRFRFTVAKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTUtEVEVNUAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9ta2R0ZW1wLm8KK2VuZGlmCitpZmRlZiBNS0RJUl9XT19UUkFJTElOR19TTEFTSAorCUNPTVBBVF9DRkxBR1MgKz0gLURNS0RJUl9XT19UUkFJTElOR19TTEFTSAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9ta2Rpci5vCitlbmRpZgoraWZkZWYgTk9fTUtTVEVNUFMKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTUtTVEVNUFMKK2VuZGlmCitpZmRlZiBOT19VTlNFVEVOVgorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19VTlNFVEVOVgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC91bnNldGVudi5vCitlbmRpZgoraWZkZWYgTk9fU1lTX1NFTEVDVF9ICisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fU1lTX1NFTEVDVF9ICitlbmRpZgoraWZkZWYgTk9fU1lTX1BPTExfSAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX1NZU19QT0xMX0gKK2VuZGlmCitpZmRlZiBOT19JTlRUWVBFU19ICisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fSU5UVFlQRVNfSAorZW5kaWYKK2lmZGVmIE5PX0lOSVRHUk9VUFMKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19JTklUR1JPVVBTCitlbmRpZgoraWZkZWYgTk9fTU1BUAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19NTUFQCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L21tYXAubworZWxzZQorCWlmZGVmIFVTRV9XSU4zMl9NTUFQCisJCUNPTVBBVF9DRkxBR1MgKz0gLURVU0VfV0lOMzJfTU1BUAorCQlDT01QQVRfT0JKUyArPSBjb21wYXQvd2luMzJtbWFwLm8KKwllbmRpZgorZW5kaWYKK2lmZGVmIE9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMKKwlDT01QQVRfQ0ZMQUdTICs9IC1ET0JKRUNUX0NSRUFUSU9OX01PREU9MQorZW5kaWYKK2lmZGVmIE5PX1NUUlVDVF9JVElNRVJWQUwKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU1RSVUNUX0lUSU1FUlZBTAorCU5PX1NFVElUSU1FUj1ZZXNQbGVhc2UKK2VuZGlmCitpZmRlZiBOT19TRVRJVElNRVIKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU0VUSVRJTUVSCitlbmRpZgoraWZkZWYgTk9fUFJFQUQKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fUFJFQUQKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvcHJlYWQubworCU5PX1RIUkVBRF9TQUZFX1BSRUFEID0gWWVzUGxlYXNlCitlbmRpZgoraWZkZWYgTk9fVEhSRUFEX1NBRkVfUFJFQUQKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19USFJFQURfU0FGRV9QUkVBRAorZW5kaWYKK2lmZGVmIE5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19GQVNUX1dPUktJTkdfRElSRUNUT1JZCitlbmRpZgoraWZkZWYgTk9fVFJVU1RBQkxFX0ZJTEVNT0RFCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fVFJVU1RBQkxFX0ZJTEVNT0RFCitlbmRpZgoraWZkZWYgTk9fSVBWNgorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0lQVjYKK2VuZGlmCitpZmRlZiBOT19JTlRQVFJfVAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19JTlRQVFJfVAorZW5kaWYKK2lmZGVmIE5PX1VJTlRNQVhfVAorCUJBU0lDX0NGTEFHUyArPSAtRHVpbnRtYXhfdD11aW50MzJfdAorZW5kaWYKK2lmZGVmIE5PX1NPQ0tBRERSX1NUT1JBR0UKK2lmZGVmIE5PX0lQVjYKKwlCQVNJQ19DRkxBR1MgKz0gLURzb2NrYWRkcl9zdG9yYWdlPXNvY2thZGRyX2luCitlbHNlCisJQkFTSUNfQ0ZMQUdTICs9IC1Ec29ja2FkZHJfc3RvcmFnZT1zb2NrYWRkcl9pbjYKK2VuZGlmCitlbmRpZgoraWZkZWYgTk9fSU5FVF9OVE9QCisJTElCX09CSlMgKz0gY29tcGF0L2luZXRfbnRvcC5vCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fSU5FVF9OVE9QCitlbmRpZgoraWZkZWYgTk9fSU5FVF9QVE9OCisJTElCX09CSlMgKz0gY29tcGF0L2luZXRfcHRvbi5vCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fSU5FVF9QVE9OCitlbmRpZgoraWZuZGVmIE5PX1VOSVhfU09DS0VUUworCUxJQl9PQkpTICs9IHVuaXgtc29ja2V0Lm8KKwlMSUJfSCArPSB1bml4LXNvY2tldC5oCisJUFJPR1JBTV9PQkpTICs9IGNyZWRlbnRpYWwtY2FjaGUubworCVBST0dSQU1fT0JKUyArPSBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24ubworZW5kaWYKKworaWZkZWYgTk9fSUNPTlYKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19JQ09OVgorZW5kaWYKKworaWZkZWYgT0xEX0lDT05WCisJQkFTSUNfQ0ZMQUdTICs9IC1ET0xEX0lDT05WCitlbmRpZgorCitpZmRlZiBOT19ERUZMQVRFX0JPVU5ECisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fREVGTEFURV9CT1VORAorZW5kaWYKKworaWZkZWYgTk9fUE9TSVhfR09PRElFUworCUJBU0lDX0NGTEFHUyArPSAtRE5PX1BPU0lYX0dPT0RJRVMKK2VuZGlmCisKK2lmZGVmIEJMS19TSEExCisJU0hBMV9IRUFERVIgPSAiYmxvY2stc2hhMS9zaGExLmgiCisJTElCX09CSlMgKz0gYmxvY2stc2hhMS9zaGExLm8KKwlMSUJfSCArPSBibG9jay1zaGExL3NoYTEuaAorZWxzZQoraWZkZWYgUFBDX1NIQTEKKwlTSEExX0hFQURFUiA9ICJwcGMvc2hhMS5oIgorCUxJQl9PQkpTICs9IHBwYy9zaGExLm8gcHBjL3NoYTFwcGMubworCUxJQl9IICs9IHBwYy9zaGExLmgKK2Vsc2UKKwlTSEExX0hFQURFUiA9IDxvcGVuc3NsL3NoYS5oPgorCUVYVExJQlMgKz0gJChMSUJfNF9DUllQVE8pCitlbmRpZgorZW5kaWYKK2lmZGVmIE5PX1BFUkxfTUFLRU1BS0VSCisJZXhwb3J0IE5PX1BFUkxfTUFLRU1BS0VSCitlbmRpZgoraWZkZWYgTk9fSFNUUkVSUk9SCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX0hTVFJFUlJPUgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9oc3RyZXJyb3IubworZW5kaWYKK2lmZGVmIE5PX01FTU1FTQorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19NRU1NRU0KKwlDT01QQVRfT0JKUyArPSBjb21wYXQvbWVtbWVtLm8KK2VuZGlmCitpZmRlZiBJTlRFUk5BTF9RU09SVAorCUNPTVBBVF9DRkxBR1MgKz0gLURJTlRFUk5BTF9RU09SVAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9xc29ydC5vCitlbmRpZgoraWZkZWYgUlVOVElNRV9QUkVGSVgKKwlDT01QQVRfQ0ZMQUdTICs9IC1EUlVOVElNRV9QUkVGSVgKK2VuZGlmCisKK2lmZGVmIE5PX1BUSFJFQURTCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fUFRIUkVBRFMKK2Vsc2UKKwlCQVNJQ19DRkxBR1MgKz0gJChQVEhSRUFEX0NGTEFHUykKKwlFWFRMSUJTICs9ICQoUFRIUkVBRF9MSUJTKQorCUxJQl9PQkpTICs9IHRocmVhZC11dGlscy5vCitlbmRpZgorCitpZmRlZiBIQVZFX1BBVEhTX0gKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX1BBVEhTX0gKK2VuZGlmCisKK2lmZGVmIEhBVkVfTElCQ0hBUlNFVF9ICisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9MSUJDSEFSU0VUX0gKKwlFWFRMSUJTICs9ICQoQ0hBUlNFVF9MSUIpCitlbmRpZgorCitpZmRlZiBIQVZFX0RFVl9UVFkKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0RFVl9UVFkKK2VuZGlmCisKK2lmZGVmIERJUl9IQVNfQlNEX0dST1VQX1NFTUFOVElDUworCUNPTVBBVF9DRkxBR1MgKz0gLURESVJfSEFTX0JTRF9HUk9VUF9TRU1BTlRJQ1MKK2VuZGlmCitpZmRlZiBVTlJFTElBQkxFX0ZTVEFUCisJQkFTSUNfQ0ZMQUdTICs9IC1EVU5SRUxJQUJMRV9GU1RBVAorZW5kaWYKK2lmZGVmIE5PX1JFR0VYCisJQ09NUEFUX0NGTEFHUyArPSAtSWNvbXBhdC9yZWdleAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9yZWdleC9yZWdleC5vCitlbmRpZgorCitpZmRlZiBVU0VfTkVEX0FMTE9DQVRPUgorICAgICAgIENPTVBBVF9DRkxBR1MgKz0gLUljb21wYXQvbmVkbWFsbG9jCisgICAgICAgQ09NUEFUX09CSlMgKz0gY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MubworZW5kaWYKKworaWZkZWYgR0lUX1RFU1RfQ01QX1VTRV9DT1BJRURfQ09OVEVYVAorCWV4cG9ydCBHSVRfVEVTVF9DTVBfVVNFX0NPUElFRF9DT05URVhUCitlbmRpZgorCitpZm5kZWYgTk9fTVNHRk1UX0VYVEVOREVEX09QVElPTlMKKwlNU0dGTVQgKz0gLS1jaGVjayAtLXN0YXRpc3RpY3MKK2VuZGlmCisKK2lmbmVxICgsJChYRExfRkFTVF9IQVNIKSkKKwlCQVNJQ19DRkxBR1MgKz0gLURYRExfRkFTVF9IQVNICitlbmRpZgorCitpZmVxICgkKFRDTFRLX1BBVEgpLCkKK05PX1RDTFRLPU5vVGhhbmtzCitlbmRpZgorCitpZmVxICgkKFBFUkxfUEFUSCksKQorTk9fUEVSTD1Ob1RoYW5rcworZW5kaWYKKworaWZlcSAoJChQWVRIT05fUEFUSCksKQorTk9fUFlUSE9OPU5vVGhhbmtzCitlbmRpZgorCitRVUlFVF9TVUJESVIwICA9ICskKE1BS0UpIC1DICMgc3BhY2UgdG8gc2VwYXJhdGUgLUMgYW5kIHN1YmRpcgorUVVJRVRfU1VCRElSMSAgPQorCitpZm5lcSAoJChmaW5kc3RyaW5nICQoTUFLRUZMQUdTKSx3KSx3KQorUFJJTlRfRElSID0gLS1uby1wcmludC1kaXJlY3RvcnkKK2Vsc2UgIyAibWFrZSAtdyIKK05PX1NVQkRJUiA9IDoKK2VuZGlmCisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHMpLHMpCitpZm5kZWYgVgorCVFVSUVUX0NDICAgICAgID0gQGVjaG8gJyAgICcgQ0MgJEA7CisJUVVJRVRfQVIgICAgICAgPSBAZWNobyAnICAgJyBBUiAkQDsKKwlRVUlFVF9MSU5LICAgICA9IEBlY2hvICcgICAnIExJTksgJEA7CisJUVVJRVRfQlVJTFRfSU4gPSBAZWNobyAnICAgJyBCVUlMVElOICRAOworCVFVSUVUX0dFTiAgICAgID0gQGVjaG8gJyAgICcgR0VOICRAOworCVFVSUVUX0xOQ1AgICAgID0gQGVjaG8gJyAgICcgTE4vQ1AgJEA7CisJUVVJRVRfWEdFVFRFWFQgPSBAZWNobyAnICAgJyBYR0VUVEVYVCAkQDsKKwlRVUlFVF9NU0dGTVQgICA9IEBlY2hvICcgICAnIE1TR0ZNVCAkQDsKKwlRVUlFVF9HQ09WICAgICA9IEBlY2hvICcgICAnIEdDT1YgJEA7CisJUVVJRVRfU1AgICAgICAgPSBAZWNobyAnICAgJyBTUCAkPDsKKwlRVUlFVF9TVUJESVIwICA9ICtAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjEgID0gOyQoTk9fU1VCRElSKSBlY2hvICcgICAnIFNVQkRJUiAkJHN1YmRpcjsgXAorCQkJICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCisJZXhwb3J0IFYKKwlleHBvcnQgUVVJRVRfR0VOCisJZXhwb3J0IFFVSUVUX0JVSUxUX0lOCitlbmRpZgorZW5kaWYKKworaWZkZWYgTk9fSU5TVEFMTF9IQVJETElOS1MKKwlleHBvcnQgTk9fSU5TVEFMTF9IQVJETElOS1MKK2VuZGlmCisKKyMjIyBwcm9maWxlIGZlZWRiYWNrIGJ1aWxkCisjCisKKyMgQ2FuIGFkanVzdCB0aGlzIHRvIGJlIGEgZ2xvYmFsIGRpcmVjdG9yeSBpZiB5b3Ugd2FudCB0byBkbyBleHRlbmRlZAorIyBkYXRhIGdhdGhlcmluZworUFJPRklMRV9ESVIgOj0gJChDVVJESVIpCisKK2lmZXEgKCIkKFBST0ZJTEUpIiwiR0VOIikKKwlDRkxBR1MgKz0gLWZwcm9maWxlLWdlbmVyYXRlPSQoUFJPRklMRV9ESVIpIC1ETk9fTk9SRVRVUk49MQorCUVYVExJQlMgKz0gLWxnY292CisJZXhwb3J0IENDQUNIRV9ESVNBQkxFPXQKKwlWPTEKK2Vsc2UKK2lmbmVxICgiJChQUk9GSUxFKSIsIiIpCisJQ0ZMQUdTICs9IC1mcHJvZmlsZS11c2U9JChQUk9GSUxFX0RJUikgLWZwcm9maWxlLWNvcnJlY3Rpb24gLUROT19OT1JFVFVSTj0xCisJZXhwb3J0IENDQUNIRV9ESVNBQkxFPXQKKwlWPTEKK2VuZGlmCitlbmRpZgorCisjIFNoZWxsIHF1b3RlIChkbyBub3QgdXNlICQoY2FsbCkgdG8gYWNjb21tb2RhdGUgYW5jaWVudCBzZXR1cHMpOworCitTSEExX0hFQURFUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hBMV9IRUFERVIpKQorRVRDX0dJVENPTkZJR19TUSA9ICQoc3Vic3QgJywnXCcnLCQoRVRDX0dJVENPTkZJRykpCitFVENfR0lUQVRUUklCVVRFU19TUSA9ICQoc3Vic3QgJywnXCcnLCQoRVRDX0dJVEFUVFJJQlVURVMpKQorCitERVNURElSX1NRID0gJChzdWJzdCAnLCdcJycsJChERVNURElSKSkKK2JpbmRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoYmluZGlyKSkKK2JpbmRpcl9yZWxhdGl2ZV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoYmluZGlyX3JlbGF0aXZlKSkKK21hbmRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQobWFuZGlyKSkKK2luZm9kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGluZm9kaXIpKQorbG9jYWxlZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChsb2NhbGVkaXIpKQorZ2l0ZXhlY2Rpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0ZXhlY2RpcikpCit0ZW1wbGF0ZV9kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKHRlbXBsYXRlX2RpcikpCitodG1sZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChodG1sZGlyKSkKK3ByZWZpeF9TUSA9ICQoc3Vic3QgJywnXCcnLCQocHJlZml4KSkKK2dpdHdlYmRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0d2ViZGlyKSkKKworU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCitQRVJMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBFUkxfUEFUSCkpCitQWVRIT05fUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUFlUSE9OX1BBVEgpKQorVENMVEtfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoVENMVEtfUEFUSCkpCitESUZGX1NRID0gJChzdWJzdCAnLCdcJycsJChESUZGKSkKKworTElCUyA9ICQoR0lUTElCUykgJChFWFRMSUJTKQorCitCQVNJQ19DRkxBR1MgKz0gLURTSEExX0hFQURFUj0nJChTSEExX0hFQURFUl9TUSknIFwKKwkkKENPTVBBVF9DRkxBR1MpCitMSUJfT0JKUyArPSAkKENPTVBBVF9PQkpTKQorCisjIFF1b3RlIGZvciBDCisKK2lmZGVmIERFRkFVTFRfRURJVE9SCitERUZBVUxUX0VESVRPUl9DUSA9ICIkKHN1YnN0ICIsXCIsJChzdWJzdCBcLFxcLCQoREVGQVVMVF9FRElUT1IpKSkiCitERUZBVUxUX0VESVRPUl9DUV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVGQVVMVF9FRElUT1JfQ1EpKQorCitCQVNJQ19DRkxBR1MgKz0gLURERUZBVUxUX0VESVRPUj0nJChERUZBVUxUX0VESVRPUl9DUV9TUSknCitlbmRpZgorCitpZmRlZiBERUZBVUxUX1BBR0VSCitERUZBVUxUX1BBR0VSX0NRID0gIiQoc3Vic3QgIixcIiwkKHN1YnN0IFwsXFwsJChERUZBVUxUX1BBR0VSKSkpIgorREVGQVVMVF9QQUdFUl9DUV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVGQVVMVF9QQUdFUl9DUSkpCisKK0JBU0lDX0NGTEFHUyArPSAtRERFRkFVTFRfUEFHRVI9JyQoREVGQVVMVF9QQUdFUl9DUV9TUSknCitlbmRpZgorCitpZmRlZiBTSEVMTF9QQVRICitTSEVMTF9QQVRIX0NRID0gIiQoc3Vic3QgIixcIiwkKHN1YnN0IFwsXFwsJChTSEVMTF9QQVRIKSkpIgorU0hFTExfUEFUSF9DUV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSF9DUSkpCisKK0JBU0lDX0NGTEFHUyArPSAtRFNIRUxMX1BBVEg9JyQoU0hFTExfUEFUSF9DUV9TUSknCitlbmRpZgorCitHSVRfVVNFUl9BR0VOVF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoR0lUX1VTRVJfQUdFTlQpKQorR0lUX1VTRVJfQUdFTlRfQ1EgPSAiJChzdWJzdCAiLFwiLCQoc3Vic3QgXCxcXCwkKEdJVF9VU0VSX0FHRU5UKSkpIgorR0lUX1VTRVJfQUdFTlRfQ1FfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKEdJVF9VU0VSX0FHRU5UX0NRKSkKK0dJVC1VU0VSLUFHRU5UOiBGT1JDRQorCUBpZiB0ZXN0IHgnJChHSVRfVVNFUl9BR0VOVF9TUSknICE9IHgiYGNhdCBHSVQtVVNFUi1BR0VOVCAyPi9kZXYvbnVsbGAiOyB0aGVuIFwKKwkJZWNobyAnJChHSVRfVVNFUl9BR0VOVF9TUSknID5HSVQtVVNFUi1BR0VOVDsgXAogCWZpCiAKLVRSQUNLX1ZBUlMgPSBcCi0JJChzdWJzdCAnLCdcJycsU0hFTExfUEFUSD0nJChTSEVMTF9QQVRIX1NRKScpIFwKLQkkKHN1YnN0ICcsJ1wnJyxUQ0xfUEFUSD0nJChUQ0xfUEFUSF9TUSknKSBcCi0JJChzdWJzdCAnLCdcJycsVENMVEtfUEFUSD0nJChUQ0xUS19QQVRIX1NRKScpIFwKLQkkKHN1YnN0ICcsJ1wnJyxnaXRleGVjZGlyPSckKGdpdGV4ZWNkaXJfU1EpJykgXAotCSQoc3Vic3QgJywnXCcnLGdnX2xpYmRpcj0nJChsaWJkaXJfU1EpJykgXAotCUdJVEdVSV9NQUNPU1hBUFA9JChHSVRHVUlfTUFDT1NYQVBQKSBcCi0jZW5kIFRSQUNLX1ZBUlMKK2lmZGVmIERFRkFVTFRfSEVMUF9GT1JNQVQKK0JBU0lDX0NGTEFHUyArPSAtRERFRkFVTFRfSEVMUF9GT1JNQVQ9JyIkKERFRkFVTFRfSEVMUF9GT1JNQVQpIicKK2VuZGlmCisKK0FMTF9DRkxBR1MgKz0gJChCQVNJQ19DRkxBR1MpCitBTExfTERGTEFHUyArPSAkKEJBU0lDX0xERkxBR1MpCisKK2V4cG9ydCBESUZGIFRBUiBJTlNUQUxMIERFU1RESVIgU0hFTExfUEFUSAorCisKKyMjIyBCdWlsZCBydWxlcworCitTSEVMTCA9ICQoU0hFTExfUEFUSCkKKworYWxsOjogc2hlbGxfY29tcGF0aWJpbGl0eV90ZXN0CisKK2lmZXEgIiQoUFJPRklMRSkiICJCVUlMRCIKK2lmZXEgKCQoZmlsdGVyIGFsbCwkKE1BS0VDTURHT0FMUykpLGFsbCkKK2FsbDo6IHByb2ZpbGUtY2xlYW4KKwkkKE1BS0UpIFBST0ZJTEU9R0VOIGFsbAorCSQoTUFLRSkgUFJPRklMRT1HRU4gLWoxIHRlc3QKK2VuZGlmCitlbmRpZgorCithbGw6OiAkKEFMTF9QUk9HUkFNUykgJChTQ1JJUFRfTElCKSAkKEJVSUxUX0lOUykgJChPVEhFUl9QUk9HUkFNUykgR0lULUJVSUxELU9QVElPTlMKK2lmbmVxICgsJFgpCisJJChRVUlFVF9CVUlMVF9JTikkKGZvcmVhY2ggcCwkKHBhdHN1YnN0ICUkWCwlLCQoZmlsdGVyICUkWCwkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIGdpdCRYKSksIHRlc3QgLWQgJyRwJyAtbyAnJHAnIC1lZiAnJHAkWCcgfHwgJChSTSkgJyRwJzspCitlbmRpZgorCithbGw6OgoraWZuZGVmIE5PX1RDTFRLCisJJChRVUlFVF9TVUJESVIwKWdpdC1ndWkgJChRVUlFVF9TVUJESVIxKSBnaXRleGVjZGlyPSckKGdpdGV4ZWNfaW5zdGRpcl9TUSknIGFsbAorCSQoUVVJRVRfU1VCRElSMClnaXRrLWdpdCAkKFFVSUVUX1NVQkRJUjEpIGFsbAorZW5kaWYKK2lmbmRlZiBOT19QRVJMCisJJChRVUlFVF9TVUJESVIwKXBlcmwgJChRVUlFVF9TVUJESVIxKSBQRVJMX1BBVEg9JyQoUEVSTF9QQVRIX1NRKScgcHJlZml4PSckKHByZWZpeF9TUSknIGxvY2FsZWRpcj0nJChsb2NhbGVkaXJfU1EpJyBhbGwKK2VuZGlmCitpZm5kZWYgTk9fUFlUSE9OCisJJChRVUlFVF9TVUJESVIwKWdpdF9yZW1vdGVfaGVscGVycyAkKFFVSUVUX1NVQkRJUjEpIFBZVEhPTl9QQVRIPSckKFBZVEhPTl9QQVRIX1NRKScgcHJlZml4PSckKHByZWZpeF9TUSknIGFsbAorZW5kaWYKKwkkKFFVSUVUX1NVQkRJUjApdGVtcGxhdGVzICQoUVVJRVRfU1VCRElSMSkgU0hFTExfUEFUSD0nJChTSEVMTF9QQVRIX1NRKScgUEVSTF9QQVRIPSckKFBFUkxfUEFUSF9TUSknCisKK3BsZWFzZV9zZXRfU0hFTExfUEFUSF90b19hX21vcmVfbW9kZXJuX3NoZWxsOgorCUAkJCg6KQorCitzaGVsbF9jb21wYXRpYmlsaXR5X3Rlc3Q6IHBsZWFzZV9zZXRfU0hFTExfUEFUSF90b19hX21vcmVfbW9kZXJuX3NoZWxsCisKK3N0cmlwOiAkKFBST0dSQU1TKSBnaXQkWAorCSQoU1RSSVApICQoU1RSSVBfT1BUUykgJChQUk9HUkFNUykgZ2l0JFgKKworIyMjIFRhcmdldC1zcGVjaWZpYyBmbGFncyBhbmQgZGVwZW5kZW5jaWVzCisKKyMgVGhlIGdlbmVyaWMgY29tcGlsYXRpb24gcGF0dGVybiBydWxlIGFuZCBhdXRvbWF0aWNhbGx5CisjIGNvbXB1dGVkIGhlYWRlciBkZXBlbmRlbmNpZXMgKGZhbGxpbmcgYmFjayB0byBhIGRlcGVuZGVuY3kgb24KKyMgTElCX0gpIGFyZSBlbm91Z2ggdG8gZGVzY3JpYmUgaG93IG1vc3QgdGFyZ2V0cyBzaG91bGQgYmUgYnVpbHQsCisjIGJ1dCBzb21lIHRhcmdldHMgYXJlIHNwZWNpYWwgZW5vdWdoIHRvIG5lZWQgc29tZXRoaW5nIGEgbGl0dGxlCisjIGRpZmZlcmVudC4KKyMKKyMgLSBXaGVuIGEgc291cmNlIGZpbGUgImZvby5jIiAjaW5jbHVkZXMgYSBnZW5lcmF0ZWQgaGVhZGVyIGZpbGUsCisjICAgd2UgbmVlZCB0byBsaXN0IHRoYXQgZGVwZW5kZW5jeSBmb3IgdGhlICJmb28ubyIgdGFyZ2V0LgorIworIyAgIFdlIGFsc28gbGlzdCBpdCBmcm9tIG90aGVyIHRhcmdldHMgdGhhdCBhcmUgYnVpbHQgZnJvbSBmb28uYworIyAgIGxpa2UgImZvby5zcCIgYW5kICJmb28ucyIsIGV2ZW4gdGhvdWdoIHRoYXQgaXMgZWFzeSB0byBmb3JnZXQKKyMgICB0byBkbyBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgaGVhZGVyIGlzIGFscmVhZHkgcHJlc2VudCBhcm91bmQKKyMgICBhZnRlciBhIHJlZ3VsYXIgYnVpbGQgYXR0ZW1wdC4KKyMKKyMgLSBTb21lIGNvZGUgZGVwZW5kcyBvbiBjb25maWd1cmF0aW9uIGtlcHQgaW4gbWFrZWZpbGUKKyMgICB2YXJpYWJsZXMuIFRoZSB0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGUgRVhUUkFfQ1BQRkxBR1MgY2FuCisjICAgYmUgdXNlZCB0byBjb252ZXkgdGhhdCBpbmZvcm1hdGlvbiB0byB0aGUgQyBwcmVwcm9jZXNzb3IKKyMgICB1c2luZyAtRCBvcHRpb25zLgorIworIyAgIFRoZSAiZm9vLm8iIHRhcmdldCBzaG91bGQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZGVwZW5kZW5jeSBvbgorIyAgIGEgZmlsZSB0aGF0IGNoYW5nZXMgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIG1ha2VmaWxlIHZhcmlhYmxlCisjICAgY2hhbmdlcy4gIEZvciBleGFtcGxlLCB0YXJnZXRzIG1ha2luZyB1c2Ugb2YgdGhlCisjICAgJChHSVRfVkVSU0lPTikgdmFyaWFibGUgZGVwZW5kIG9uIEdJVC1WRVJTSU9OLUZJTEUuCisjCisjICAgVGVjaG5pY2FsbHkgdGhlICIuc3AiIGFuZCAiLnMiIHRhcmdldHMgZG8gbm90IG5lZWQgdGhpcworIyAgIGRlcGVuZGVuY3kgYmVjYXVzZSB0aGV5IGFyZSBmb3JjZS1idWlsdCwgYnV0IHRoZXkgZ2V0IHRoZQorIyAgIHNhbWUgZGVwZW5kZW5jeSBmb3IgY29uc2lzdGVuY3kuIFRoaXMgd2F5LCB5b3UgZG8gbm90IGhhdmUgdG8KKyMgICBrbm93IGhvdyBlYWNoIHRhcmdldCBpcyBpbXBsZW1lbnRlZC4gQW5kIGl0IG1lYW5zIHRoZQorIyAgIGRlcGVuZGVuY2llcyBoZXJlIHdpbGwgbm90IG5lZWQgdG8gY2hhbmdlIGlmIHRoZSBmb3JjZS1idWlsZAorIyAgIGRldGFpbHMgY2hhbmdlIHNvbWUgZGF5LgorCitnaXQuc3AgZ2l0LnMgZ2l0Lm86IEdJVC1QUkVGSVgKK2dpdC5zcCBnaXQucyBnaXQubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJJy1ER0lUX0hUTUxfUEFUSD0iJChodG1sZGlyX1NRKSInIFwKKwknLURHSVRfTUFOX1BBVEg9IiQobWFuZGlyX1NRKSInIFwKKwknLURHSVRfSU5GT19QQVRIPSIkKGluZm9kaXJfU1EpIicKKworZ2l0JFg6IGdpdC5vIEdJVC1MREZMQUdTICQoQlVJTFRJTl9PQkpTKSAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgZ2l0Lm8gXAorCQkkKEJVSUxUSU5fT0JKUykgJChBTExfTERGTEFHUykgJChMSUJTKQorCitoZWxwLnNwIGhlbHAucyBoZWxwLm86IGNvbW1vbi1jbWRzLmgKKworYnVpbHRpbi9oZWxwLnNwIGJ1aWx0aW4vaGVscC5zIGJ1aWx0aW4vaGVscC5vOiBjb21tb24tY21kcy5oIEdJVC1QUkVGSVgKK2J1aWx0aW4vaGVscC5zcCBidWlsdGluL2hlbHAucyBidWlsdGluL2hlbHAubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJJy1ER0lUX0hUTUxfUEFUSD0iJChodG1sZGlyX1NRKSInIFwKKwknLURHSVRfTUFOX1BBVEg9IiQobWFuZGlyX1NRKSInIFwKKwknLURHSVRfSU5GT19QQVRIPSIkKGluZm9kaXJfU1EpIicKKwordmVyc2lvbi5zcCB2ZXJzaW9uLnMgdmVyc2lvbi5vOiBHSVQtVkVSU0lPTi1GSUxFIEdJVC1VU0VSLUFHRU5UCit2ZXJzaW9uLnNwIHZlcnNpb24ucyB2ZXJzaW9uLm86IEVYVFJBX0NQUEZMQUdTID0gXAorCSctREdJVF9WRVJTSU9OPSIkKEdJVF9WRVJTSU9OKSInIFwKKwknLURHSVRfVVNFUl9BR0VOVD0kKEdJVF9VU0VSX0FHRU5UX0NRX1NRKScKKworJChCVUlMVF9JTlMpOiBnaXQkWAorCSQoUVVJRVRfQlVJTFRfSU4pJChSTSkgJEAgJiYgXAorCWxuIGdpdCRYICRAIDI+L2Rldi9udWxsIHx8IFwKKwlsbiAtcyBnaXQkWCAkQCAyPi9kZXYvbnVsbCB8fCBcCisJY3AgZ2l0JFggJEAKKworY29tbW9uLWNtZHMuaDogLi9nZW5lcmF0ZS1jbWRsaXN0LnNoIGNvbW1hbmQtbGlzdC50eHQKKworY29tbW9uLWNtZHMuaDogJCh3aWxkY2FyZCBEb2N1bWVudGF0aW9uL2dpdC0qLnR4dCkKKwkkKFFVSUVUX0dFTikuL2dlbmVyYXRlLWNtZGxpc3Quc2ggPiAkQCsgJiYgbXYgJEArICRACisKK1NDUklQVF9ERUZJTkVTID0gJChTSEVMTF9QQVRIX1NRKTokKERJRkZfU1EpOiQoR0lUX1ZFUlNJT04pOlwKKwkkKGxvY2FsZWRpcl9TUSk6JChOT19DVVJMKTokKFVTRV9HRVRURVhUX1NDSEVNRSk6JChTQU5FX1RPT0xfUEFUSF9TUSk6XAorCSQoZ2l0d2ViZGlyX1NRKTokKFBFUkxfUEFUSF9TUSkKK2RlZmluZSBjbWRfbXVuZ2Vfc2NyaXB0CiskKFJNKSAkQCAkQCsgJiYgXAorc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKKyAgICAtZSAnc3xAU0hFTExfUEFUSEB8JChTSEVMTF9QQVRIX1NRKXwnIFwKKyAgICAtZSAnc3xAQERJRkZAQHwkKERJRkZfU1EpfCcgXAorICAgIC1lICdzfEBATE9DQUxFRElSQEB8JChsb2NhbGVkaXJfU1EpfGcnIFwKKyAgICAtZSAncy9AQE5PX0NVUkxAQC8kKE5PX0NVUkwpL2cnIFwKKyAgICAtZSAncy9AQFVTRV9HRVRURVhUX1NDSEVNRUBALyQoVVNFX0dFVFRFWFRfU0NIRU1FKS9nJyBcCisgICAgLWUgJChCUk9LRU5fUEFUSF9GSVgpIFwKKyAgICAtZSAnc3xAQEdJVFdFQkRJUkBAfCQoZ2l0d2ViZGlyX1NRKXxnJyBcCisgICAgLWUgJ3N8QEBQRVJMQEB8JChQRVJMX1BBVEhfU1EpfGcnIFwKKyAgICAkQC5zaCA+JEArCitlbmRlZgorCitHSVQtU0NSSVBULURFRklORVM6IEZPUkNFCisJQEZMQUdTPSckKFNDUklQVF9ERUZJTkVTKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkRkxBR1MiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gMT4mMiAiICAgICogbmV3IHNjcmlwdCBwYXJhbWV0ZXJzIjsgXAorCQllY2hvICIkJEZMQUdTIiA+JEA7IFwKKyAgICAgICAgICAgIGZpCisKKworJChwYXRzdWJzdCAlLnNoLCUsJChTQ1JJUFRfU0gpKSA6ICUgOiAlLnNoIEdJVC1TQ1JJUFQtREVGSU5FUworCSQoUVVJRVRfR0VOKSQoY21kX211bmdlX3NjcmlwdCkgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACisKKyQoU0NSSVBUX0xJQikgOiAlIDogJS5zaCBHSVQtU0NSSVBULURFRklORVMKKwkkKFFVSUVUX0dFTikkKGNtZF9tdW5nZV9zY3JpcHQpICYmIFwKKwltdiAkQCsgJEAKKworaWZuZGVmIE5PX1BFUkwKKyQocGF0c3Vic3QgJS5wZXJsLCUsJChTQ1JJUFRfUEVSTCkpOiBwZXJsL3BlcmwubWFrCisKK3BlcmwvcGVybC5tYWs6IHBlcmwvUE0uc3RhbXAKKworcGVybC9QTS5zdGFtcDogRk9SQ0UKKwkkKFFVSUVUX0dFTikkKEZJTkQpIHBlcmwgLXR5cGUgZiAtbmFtZSAnKi5wbScgfCBzb3J0ID4kQCsgJiYgXAorCXsgY21wICRAKyAkQCA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IG12ICRAKyAkQDsgfSAmJiBcCisJJChSTSkgJEArCisKK3BlcmwvcGVybC5tYWs6IEdJVC1DRkxBR1MgR0lULVBSRUZJWCBwZXJsL01ha2VmaWxlIHBlcmwvTWFrZWZpbGUuUEwKKwkkKFFVSUVUX1NVQkRJUjApcGVybCAkKFFVSUVUX1NVQkRJUjEpIFBFUkxfUEFUSD0nJChQRVJMX1BBVEhfU1EpJyBwcmVmaXg9JyQocHJlZml4X1NRKScgJChARikKKworJChwYXRzdWJzdCAlLnBlcmwsJSwkKFNDUklQVF9QRVJMKSk6ICUgOiAlLnBlcmwgR0lULVZFUlNJT04tRklMRQorCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJSU5TVExJQkRJUj1gTUFLRUZMQUdTPSAkKE1BS0UpIC1DIHBlcmwgLXMgLS1uby1wcmludC1kaXJlY3RvcnkgaW5zdGxpYmRpcmAgJiYgXAorCXNlZCAtZSAnMXsnIFwKKwkgICAgLWUgJwlzfCMhLipwZXJsfCMhJChQRVJMX1BBVEhfU1EpfCcgXAorCSAgICAtZSAnCWgnIFwKKwkgICAgLWUgJwlzPS4qPXVzZSBsaWIgKHNwbGl0KC8kKHBhdGhzZXApLywgJCRFTlZ7R0lUUEVSTExJQn0gfHwgIiciJCRJTlNUTElCRElSIiciKSk7PScgXAorCSAgICAtZSAnCUgnIFwKKwkgICAgLWUgJwl4JyBcCisJICAgIC1lICd9JyBcCisJICAgIC1lICdzL0BAR0lUX1ZFUlNJT05AQC8kKEdJVF9WRVJTSU9OKS9nJyBcCisJICAgICRALnBlcmwgPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKKworCisuUEhPTlk6IGdpdHdlYgorZ2l0d2ViOgorCSQoUVVJRVRfU1VCRElSMClnaXR3ZWIgJChRVUlFVF9TVUJESVIxKSBhbGwKKworZ2l0LWluc3Rhd2ViOiBnaXQtaW5zdGF3ZWIuc2ggZ2l0d2ViIEdJVC1TQ1JJUFQtREVGSU5FUworCSQoUVVJRVRfR0VOKSQoY21kX211bmdlX3NjcmlwdCkgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACitlbHNlICMgTk9fUEVSTAorJChwYXRzdWJzdCAlLnBlcmwsJSwkKFNDUklQVF9QRVJMKSkgZ2l0LWluc3Rhd2ViOiAlIDogdW5pbXBsZW1lbnRlZC5zaAorCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKKwkgICAgLWUgJ3N8QEBSRUFTT05AQHxOT19QRVJMPSQoTk9fUEVSTCl8ZycgXAorCSAgICB1bmltcGxlbWVudGVkLnNoID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACitlbmRpZiAjIE5PX1BFUkwKKworaWZuZGVmIE5PX1BZVEhPTgorJChwYXRzdWJzdCAlLnB5LCUsJChTQ1JJUFRfUFlUSE9OKSk6IEdJVC1DRkxBR1MgR0lULVBSRUZJWAorJChwYXRzdWJzdCAlLnB5LCUsJChTQ1JJUFRfUFlUSE9OKSk6ICUgOiAlLnB5CisJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKKwlJTlNUTElCRElSPWBNQUtFRkxBR1M9ICQoTUFLRSkgLUMgZ2l0X3JlbW90ZV9oZWxwZXJzIC1zIFwKKwkJLS1uby1wcmludC1kaXJlY3RvcnkgcHJlZml4PSckKHByZWZpeF9TUSknIERFU1RESVI9JyQoREVTVERJUl9TUSknIFwKKwkJaW5zdGxpYmRpcmAgJiYgXAorCXNlZCAtZSAnMXN8IyEuKnB5dGhvbnwjISQoUFlUSE9OX1BBVEhfU1EpfCcgXAorCSAgICAtZSAnc3xcKG9zXC5nZXRlbnYoIkdJVFBZVEhPTkxJQiJcKVteKV0qKXxcMSwiQEBJTlNUTElCRElSQEAiKXwnIFwKKwkgICAgLWUgJ3N8QEBJTlNUTElCRElSQEB8JyIkJElOU1RMSUJESVIiJ3xnJyBcCisJICAgICRALnB5ID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACitlbHNlICMgTk9fUFlUSE9OCiskKHBhdHN1YnN0ICUucHksJSwkKFNDUklQVF9QWVRIT04pKTogJSA6IHVuaW1wbGVtZW50ZWQuc2gKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAkQCsgJiYgXAorCXNlZCAtZSAnMXN8IyEuKi9zaHwjISQoU0hFTExfUEFUSF9TUSl8JyBcCisJICAgIC1lICdzfEBAUkVBU09OQEB8Tk9fUFlUSE9OPSQoTk9fUFlUSE9OKXxnJyBcCisJICAgIHVuaW1wbGVtZW50ZWQuc2ggPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKK2VuZGlmICMgTk9fUFlUSE9OCisKK2NvbmZpZ3VyZTogY29uZmlndXJlLmFjIEdJVC1WRVJTSU9OLUZJTEUKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAkPCsgJiYgXAorCXNlZCAtZSAncy9AQEdJVF9WRVJTSU9OQEAvJChHSVRfVkVSU0lPTikvZycgXAorCSAgICAkPCA+ICQ8KyAmJiBcCisJYXV0b2NvbmYgLW8gJEAgJDwrICYmIFwKKwkkKFJNKSAkPCsKKworaWZkZWYgQVVUT0NPTkZJR1VSRUQKK2NvbmZpZy5zdGF0dXM6IGNvbmZpZ3VyZQorCSQoUVVJRVRfR0VOKWlmIHRlc3QgLWYgY29uZmlnLnN0YXR1czsgdGhlbiBcCisJICAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrOyBcCisJZWxzZSBcCisJICAuL2NvbmZpZ3VyZTsgXAorCWZpCityZWNvbmZpZ3VyZSBjb25maWcubWFrLmF1dG9nZW46IGNvbmZpZy5zdGF0dXMKKwkkKFFVSUVUX0dFTikuL2NvbmZpZy5zdGF0dXMKKy5QSE9OWTogcmVjb25maWd1cmUgIyBUaGlzIGlzIGEgY29udmVuaWVuY2UgdGFyZ2V0LgorZW5kaWYKKworWERJRkZfT0JKUyArPSB4ZGlmZi94ZGlmZmkubworWERJRkZfT0JKUyArPSB4ZGlmZi94cHJlcGFyZS5vCitYRElGRl9PQkpTICs9IHhkaWZmL3h1dGlscy5vCitYRElGRl9PQkpTICs9IHhkaWZmL3hlbWl0Lm8KK1hESUZGX09CSlMgKz0geGRpZmYveG1lcmdlLm8KK1hESUZGX09CSlMgKz0geGRpZmYveHBhdGllbmNlLm8KK1hESUZGX09CSlMgKz0geGRpZmYveGhpc3RvZ3JhbS5vCisKK1ZDU1NWTl9PQkpTICs9IHZjcy1zdm4vbGluZV9idWZmZXIubworVkNTU1ZOX09CSlMgKz0gdmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5vCitWQ1NTVk5fT0JKUyArPSB2Y3Mtc3ZuL3JlcG9fdHJlZS5vCitWQ1NTVk5fT0JKUyArPSB2Y3Mtc3ZuL2Zhc3RfZXhwb3J0Lm8KK1ZDU1NWTl9PQkpTICs9IHZjcy1zdm4vc3ZuZGlmZi5vCitWQ1NTVk5fT0JKUyArPSB2Y3Mtc3ZuL3N2bmR1bXAubworCitURVNUX09CSlMgOj0gJChwYXRzdWJzdCB0ZXN0LSUkWCx0ZXN0LSUubywkKFRFU1RfUFJPR1JBTVMpKQorT0JKRUNUUyA6PSAkKExJQl9PQkpTKSAkKEJVSUxUSU5fT0JKUykgJChQUk9HUkFNX09CSlMpICQoVEVTVF9PQkpTKSBcCisJJChYRElGRl9PQkpTKSBcCisJJChWQ1NTVk5fT0JKUykgXAorCWdpdC5vCitpZm5kZWYgTk9fQ1VSTAorCU9CSkVDVFMgKz0gaHR0cC5vIGh0dHAtd2Fsa2VyLm8gcmVtb3RlLWN1cmwubworZW5kaWYKKworZGVwX2ZpbGVzIDo9ICQoZm9yZWFjaCBmLCQoT0JKRUNUUyksJChkaXIgJGYpLmRlcGVuZC8kKG5vdGRpciAkZikuZCkKK2RlcF9kaXJzIDo9ICQoYWRkc3VmZml4IC5kZXBlbmQsJChzb3J0ICQoZGlyICQoT0JKRUNUUykpKSkKKworaWZlcSAoJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpLHllcykKKyQoZGVwX2RpcnMpOgorCUBta2RpciAtcCAkQAorCittaXNzaW5nX2RlcF9kaXJzIDo9ICQoZmlsdGVyLW91dCAkKHdpbGRjYXJkICQoZGVwX2RpcnMpKSwkKGRlcF9kaXJzKSkKK2RlcF9maWxlID0gJChkaXIgJEApLmRlcGVuZC8kKG5vdGRpciAkQCkuZAorZGVwX2FyZ3MgPSAtTUYgJChkZXBfZmlsZSkgLU1NRCAtTVAKK2lmZGVmIENIRUNLX0hFQURFUl9ERVBFTkRFTkNJRVMKKyQoZXJyb3IgY2Fubm90IGNvbXB1dGUgaGVhZGVyIGRlcGVuZGVuY2llcyBvdXRzaWRlIGEgbm9ybWFsIGJ1aWxkLiBcCitQbGVhc2UgdW5zZXQgQ0hFQ0tfSEVBREVSX0RFUEVOREVOQ0lFUyBhbmQgdHJ5IGFnYWluKQorZW5kaWYKK2VuZGlmCisKK2lmbmVxICgkKENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUykseWVzKQoraWZuZGVmIENIRUNLX0hFQURFUl9ERVBFTkRFTkNJRVMKK2RlcF9kaXJzID0KK21pc3NpbmdfZGVwX2RpcnMgPQorZGVwX2FyZ3MgPQorZW5kaWYKK2VuZGlmCisKK2lmZGVmIENIRUNLX0hFQURFUl9ERVBFTkRFTkNJRVMKK2lmbmRlZiBQUklOVF9IRUFERVJfREVQRU5ERU5DSUVTCittaXNzaW5nX2RlcHMgPSAkKGZpbHRlci1vdXQgJChub3RkaXIgJF4pLCBcCisJJChub3RkaXIgJChzaGVsbCAkKE1BS0UpIC1zICRAIFwKKwkJQ0hFQ0tfSEVBREVSX0RFUEVOREVOQ0lFUz1ZZXNQbGVhc2UgXAorCQlVU0VfQ09NUFVURURfSEVBREVSX0RFUEVOREVOQ0lFUz1ZZXNQbGVhc2UgXAorCQlQUklOVF9IRUFERVJfREVQRU5ERU5DSUVTPVllc1BsZWFzZSkpKQorZW5kaWYKK2VuZGlmCisKK0FTTV9TUkMgOj0gJCh3aWxkY2FyZCAkKE9CSkVDVFM6bz1TKSkKK0FTTV9PQkogOj0gJChBU01fU1JDOlM9bykKK0NfT0JKIDo9ICQoZmlsdGVyLW91dCAkKEFTTV9PQkopLCQoT0JKRUNUUykpCisKKy5TVUZGSVhFUzoKKworaWZkZWYgUFJJTlRfSEVBREVSX0RFUEVOREVOQ0lFUworJChDX09CSik6ICUubzogJS5jIEZPUkNFCisJZWNobyAkXgorJChBU01fT0JKKTogJS5vOiAlLlMgRk9SQ0UKKwllY2hvICReCisKK2lmbmRlZiBDSEVDS19IRUFERVJfREVQRU5ERU5DSUVTCiskKGVycm9yIGNhbm5vdCBwcmludCBoZWFkZXIgZGVwZW5kZW5jaWVzIGR1cmluZyBhIG5vcm1hbCBidWlsZC4gXAorUGxlYXNlIHNldCBDSEVDS19IRUFERVJfREVQRU5ERU5DSUVTIGFuZCB0cnkgYWdhaW4pCitlbmRpZgorZW5kaWYKKworaWZuZGVmIFBSSU5UX0hFQURFUl9ERVBFTkRFTkNJRVMKK2lmZGVmIENIRUNLX0hFQURFUl9ERVBFTkRFTkNJRVMKKyQoQ19PQkopOiAlLm86ICUuYyAkKGRlcF9maWxlcykgRk9SQ0UKKwlAc2V0IC1lOyBlY2hvIENIRUNLICRAOyBcCisJbWlzc2luZ19kZXBzPSIkKG1pc3NpbmdfZGVwcykiOyBcCisJaWYgdGVzdCAiJCRtaXNzaW5nX2RlcHMiOyBcCisJdGhlbiBcCisJCWVjaG8gbWlzc2luZyBkZXBlbmRlbmNpZXM6ICQkbWlzc2luZ19kZXBzOyBcCisJCWZhbHNlOyBcCisJZmkKKyQoQVNNX09CSik6ICUubzogJS5TICQoZGVwX2ZpbGVzKSBGT1JDRQorCUBzZXQgLWU7IGVjaG8gQ0hFQ0sgJEA7IFwKKwltaXNzaW5nX2RlcHM9IiQobWlzc2luZ19kZXBzKSI7IFwKKwlpZiB0ZXN0ICIkJG1pc3NpbmdfZGVwcyI7IFwKKwl0aGVuIFwKKwkJZWNobyBtaXNzaW5nIGRlcGVuZGVuY2llczogJCRtaXNzaW5nX2RlcHM7IFwKKwkJZmFsc2U7IFwKKwlmaQorZW5kaWYKK2VuZGlmCisKK2lmbmRlZiBDSEVDS19IRUFERVJfREVQRU5ERU5DSUVTCiskKENfT0JKKTogJS5vOiAlLmMgR0lULUNGTEFHUyAkKG1pc3NpbmdfZGVwX2RpcnMpCisJJChRVUlFVF9DQykkKENDKSAtbyAkKi5vIC1jICQoZGVwX2FyZ3MpICQoQUxMX0NGTEFHUykgJChFWFRSQV9DUFBGTEFHUykgJDwKKyQoQVNNX09CSik6ICUubzogJS5TIEdJVC1DRkxBR1MgJChtaXNzaW5nX2RlcF9kaXJzKQorCSQoUVVJRVRfQ0MpJChDQykgLW8gJCoubyAtYyAkKGRlcF9hcmdzKSAkKEFMTF9DRkxBR1MpICQoRVhUUkFfQ1BQRkxBR1MpICQ8CitlbmRpZgorCislLnM6ICUuYyBHSVQtQ0ZMQUdTIEZPUkNFCisJJChRVUlFVF9DQykkKENDKSAtbyAkQCAtUyAkKEFMTF9DRkxBR1MpICQoRVhUUkFfQ1BQRkxBR1MpICQ8CisKK2lmZGVmIFVTRV9DT01QVVRFRF9IRUFERVJfREVQRU5ERU5DSUVTCisjIFRha2UgYWR2YW50YWdlIG9mIGdjYydzIG9uLXRoZS1mbHkgZGVwZW5kZW5jeSBnZW5lcmF0aW9uCisjIFNlZSA8aHR0cDovL2djYy5nbnUub3JnL2djYy0zLjAvZmVhdHVyZXMuaHRtbD4uCitkZXBfZmlsZXNfcHJlc2VudCA6PSAkKHdpbGRjYXJkICQoZGVwX2ZpbGVzKSkKK2lmbmVxICgkKGRlcF9maWxlc19wcmVzZW50KSwpCitpbmNsdWRlICQoZGVwX2ZpbGVzX3ByZXNlbnQpCitlbmRpZgorZWxzZQorIyBEZXBlbmRlbmNpZXMgb24gaGVhZGVyIGZpbGVzLCBmb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQKKyMgdGhlIGdjYyAtTU1EIG9wdGlvbi4KKyMKKyMgRGVwZW5kZW5jaWVzIG9uIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGhlYWRlcnMgc3VjaCBhcyBjb21tb24tY21kcy5oCisjIHNob3VsZCBfbm90XyBiZSBpbmNsdWRlZCBoZXJlLCBzaW5jZSB0aGV5IGFyZSBuZWNlc3NhcnkgZXZlbiB3aGVuCisjIGJ1aWxkaW5nIGFuIG9iamVjdCBmb3IgdGhlIGZpcnN0IHRpbWUuCisKKyQoT0JKRUNUUyk6ICQoTElCX0gpCitlbmRpZgorCitleGVjX2NtZC5zcCBleGVjX2NtZC5zIGV4ZWNfY21kLm86IEdJVC1QUkVGSVgKK2V4ZWNfY21kLnNwIGV4ZWNfY21kLnMgZXhlY19jbWQubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJJy1ER0lUX0VYRUNfUEFUSD0iJChnaXRleGVjZGlyX1NRKSInIFwKKwknLURCSU5ESVI9IiQoYmluZGlyX3JlbGF0aXZlX1NRKSInIFwKKwknLURQUkVGSVg9IiQocHJlZml4X1NRKSInCisKK2J1aWx0aW4vaW5pdC1kYi5zcCBidWlsdGluL2luaXQtZGIucyBidWlsdGluL2luaXQtZGIubzogR0lULVBSRUZJWAorYnVpbHRpbi9pbml0LWRiLnNwIGJ1aWx0aW4vaW5pdC1kYi5zIGJ1aWx0aW4vaW5pdC1kYi5vOiBFWFRSQV9DUFBGTEFHUyA9IFwKKwktRERFRkFVTFRfR0lUX1RFTVBMQVRFX0RJUj0nIiQodGVtcGxhdGVfZGlyX1NRKSInCisKK2NvbmZpZy5zcCBjb25maWcucyBjb25maWcubzogR0lULVBSRUZJWAorY29uZmlnLnNwIGNvbmZpZy5zIGNvbmZpZy5vOiBFWFRSQV9DUFBGTEFHUyA9IFwKKwktREVUQ19HSVRDT05GSUc9JyIkKEVUQ19HSVRDT05GSUdfU1EpIicKKworYXR0ci5zcCBhdHRyLnMgYXR0ci5vOiBHSVQtUFJFRklYCithdHRyLnNwIGF0dHIucyBhdHRyLm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1ERVRDX0dJVEFUVFJJQlVURVM9JyIkKEVUQ19HSVRBVFRSSUJVVEVTX1NRKSInCisKK2dldHRleHQuc3AgZ2V0dGV4dC5zIGdldHRleHQubzogR0lULVBSRUZJWAorZ2V0dGV4dC5zcCBnZXR0ZXh0LnMgZ2V0dGV4dC5vOiBFWFRSQV9DUFBGTEFHUyA9IFwKKwktREdJVF9MT0NBTEVfUEFUSD0nIiQobG9jYWxlZGlyX1NRKSInCisKK2lmZGVmIE5PX0VYUEFUCitodHRwLXdhbGtlci5zcCBodHRwLXdhbGtlci5zIGh0dHAtd2Fsa2VyLm86IEVYVFJBX0NQUEZMQUdTID0gLUROT19FWFBBVAorZW5kaWYKKworaWZkZWYgTk9fUkVHRVgKK2NvbXBhdC9yZWdleC9yZWdleC5zcCBjb21wYXQvcmVnZXgvcmVnZXgubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJLURHQVdLIC1ETk9fTUJTVVBQT1JUCitlbmRpZgorCitpZmRlZiBVU0VfTkVEX0FMTE9DQVRPUgorY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2Muc3AgY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJLUROREVCVUcgLURPVkVSUklERV9TVFJEVVAgLURSRVBMQUNFX1NZU1RFTV9BTExPQ0FUT1IKK2VuZGlmCisKK2dpdC0lJFg6ICUubyBHSVQtTERGTEFHUyAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCisKK2dpdC1pbWFwLXNlbmQkWDogaW1hcC1zZW5kLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgXAorCQkkKExJQlMpICQoT1BFTlNTTF9MSU5LKSAkKE9QRU5TU0xfTElCU1NMKSAkKExJQl80X0NSWVBUTykKKworZ2l0LWh0dHAtZmV0Y2gkWDogcmV2aXNpb24ubyBodHRwLm8gaHR0cC13YWxrZXIubyBodHRwLWZldGNoLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgXAorCQkkKExJQlMpICQoQ1VSTF9MSUJDVVJMKQorZ2l0LWh0dHAtcHVzaCRYOiByZXZpc2lvbi5vIGh0dHAubyBodHRwLXB1c2gubyBHSVQtTERGTEFHUyAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSBcCisJCSQoTElCUykgJChDVVJMX0xJQkNVUkwpICQoRVhQQVRfTElCRVhQQVQpCisKKyQoUkVNT1RFX0NVUkxfQUxJQVNFUyk6ICQoUkVNT1RFX0NVUkxfUFJJTUFSWSkKKwkkKFFVSUVUX0xOQ1ApJChSTSkgJEAgJiYgXAorCWxuICQ8ICRAIDI+L2Rldi9udWxsIHx8IFwKKwlsbiAtcyAkPCAkQCAyPi9kZXYvbnVsbCB8fCBcCisJY3AgJDwgJEAKKworJChSRU1PVEVfQ1VSTF9QUklNQVJZKTogcmVtb3RlLWN1cmwubyBodHRwLm8gaHR0cC13YWxrZXIubyBHSVQtTERGTEFHUyAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSBcCisJCSQoTElCUykgJChDVVJMX0xJQkNVUkwpICQoRVhQQVRfTElCRVhQQVQpCisKKyQoTElCX0ZJTEUpOiAkKExJQl9PQkpTKQorCSQoUVVJRVRfQVIpJChSTSkgJEAgJiYgJChBUikgcmNzICRAICQoTElCX09CSlMpCisKKyQoWERJRkZfTElCKTogJChYRElGRl9PQkpTKQorCSQoUVVJRVRfQVIpJChSTSkgJEAgJiYgJChBUikgcmNzICRAICQoWERJRkZfT0JKUykKKworJChWQ1NTVk5fTElCKTogJChWQ1NTVk5fT0JKUykKKwkkKFFVSUVUX0FSKSQoUk0pICRAICYmICQoQVIpIHJjcyAkQCAkKFZDU1NWTl9PQkpTKQorCitleHBvcnQgREVGQVVMVF9FRElUT1IgREVGQVVMVF9QQUdFUgorCitkb2M6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGFsbAorCittYW46CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIG1hbgorCitodG1sOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBodG1sCisKK2luZm86CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluZm8KKworcGRmOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBwZGYKKworWEdFVFRFWFRfRkxBR1MgPSBcCisJLS1mb3JjZS1wbyBcCisJLS1hZGQtY29tbWVudHMgXAorCS0tbXNnaWQtYnVncy1hZGRyZXNzPSJHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPiIgXAorCS0tZnJvbS1jb2RlPVVURi04CitYR0VUVEVYVF9GTEFHU19DID0gJChYR0VUVEVYVF9GTEFHUykgLS1sYW5ndWFnZT1DIFwKKwktLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8gLS1rZXl3b3JkPSJRXzoxLDIiCitYR0VUVEVYVF9GTEFHU19TSCA9ICQoWEdFVFRFWFRfRkxBR1MpIC0tbGFuZ3VhZ2U9U2hlbGwgXAorCS0ta2V5d29yZD1nZXR0ZXh0bG4gLS1rZXl3b3JkPWV2YWxfZ2V0dGV4dGxuCitYR0VUVEVYVF9GTEFHU19QRVJMID0gJChYR0VUVEVYVF9GTEFHUykgLS1rZXl3b3JkPV9fIC0tbGFuZ3VhZ2U9UGVybAorTE9DQUxJWkVEX0MgOj0gJChDX09CSjpvPWMpICQoTElCX0gpICQoR0VORVJBVEVEX0gpCitMT0NBTElaRURfU0ggOj0gJChTQ1JJUFRfU0gpCitMT0NBTElaRURfUEVSTCA6PSAkKFNDUklQVF9QRVJMKQorCitpZmRlZiBYR0VUVEVYVF9JTkNMVURFX1RFU1RTCitMT0NBTElaRURfQyArPSB0L3QwMjAwL3Rlc3QuYworTE9DQUxJWkVEX1NIICs9IHQvdDAyMDAvdGVzdC5zaAorTE9DQUxJWkVEX1BFUkwgKz0gdC90MDIwMC90ZXN0LnBlcmwKK2VuZGlmCisKK3BvL2dpdC5wb3Q6ICQoTE9DQUxJWkVEX0MpCisJJChRVUlFVF9YR0VUVEVYVCkkKFhHRVRURVhUKSAtbyRAKyAkKFhHRVRURVhUX0ZMQUdTX0MpICQoTE9DQUxJWkVEX0MpCisJJChRVUlFVF9YR0VUVEVYVCkkKFhHRVRURVhUKSAtbyRAKyAtLWpvaW4tZXhpc3RpbmcgJChYR0VUVEVYVF9GTEFHU19TSCkgXAorCQkkKExPQ0FMSVpFRF9TSCkKKwkkKFFVSUVUX1hHRVRURVhUKSQoWEdFVFRFWFQpIC1vJEArIC0tam9pbi1leGlzdGluZyAkKFhHRVRURVhUX0ZMQUdTX1BFUkwpIFwKKwkJJChMT0NBTElaRURfUEVSTCkKKwltdiAkQCsgJEAKKworcG90OiBwby9naXQucG90CisKK1BPRklMRVMgOj0gJCh3aWxkY2FyZCBwby8qLnBvKQorTU9GSUxFUyA6PSAkKHBhdHN1YnN0IHBvLyUucG8scG8vYnVpbGQvbG9jYWxlLyUvTENfTUVTU0FHRVMvZ2l0Lm1vLCQoUE9GSUxFUykpCisKK2lmbmRlZiBOT19HRVRURVhUCithbGw6OiAkKE1PRklMRVMpCitlbmRpZgorCitwby9idWlsZC9sb2NhbGUvJS9MQ19NRVNTQUdFUy9naXQubW86IHBvLyUucG8KKwkkKFFVSUVUX01TR0ZNVClta2RpciAtcCAkKGRpciAkQCkgJiYgJChNU0dGTVQpIC1vICRAICQ8CisKK0ZJTkRfU09VUkNFX0ZJTEVTID0gKCBnaXQgbHMtZmlsZXMgJyouW2hjU10nIDI+L2Rldi9udWxsIHx8IFwKKwkJCSQoRklORCkgLiBcKCAtbmFtZSAuZ2l0IC10eXBlIGQgLXBydW5lIFwpIFwKKwkJCQktbyBcKCAtbmFtZSAnKi5baGNTXScgLXR5cGUgZiAtcHJpbnQgXCkgKQorCiskKEVUQUdTX1RBUkdFVCk6IEZPUkNFCisJJChSTSkgJChFVEFHU19UQVJHRVQpCisJJChGSU5EX1NPVVJDRV9GSUxFUykgfCB4YXJncyBldGFncyAtYSAtbyAkKEVUQUdTX1RBUkdFVCkKKwordGFnczogRk9SQ0UKKwkkKFJNKSB0YWdzCisJJChGSU5EX1NPVVJDRV9GSUxFUykgfCB4YXJncyBjdGFncyAtYQorCitjc2NvcGU6CisJJChSTSkgY3Njb3BlKgorCSQoRklORF9TT1VSQ0VfRklMRVMpIHwgeGFyZ3MgY3Njb3BlIC1iCisKKyMjIyBEZXRlY3QgcHJlZml4IGNoYW5nZXMKK1RSQUNLX1BSRUZJWCA9ICQoYmluZGlyX1NRKTokKGdpdGV4ZWNkaXJfU1EpOiQodGVtcGxhdGVfZGlyX1NRKTokKHByZWZpeF9TUSk6XAorCQkkKGxvY2FsZWRpcl9TUSkKKworR0lULVBSRUZJWDogRk9SQ0UKKwlARkxBR1M9JyQoVFJBQ0tfUFJFRklYKSc7IFwKKwlpZiB0ZXN0IHgiJCRGTEFHUyIgIT0geCJgY2F0IEdJVC1QUkVGSVggMj4vZGV2L251bGxgIiA7IHRoZW4gXAorCQllY2hvIDE+JjIgIiAgICAqIG5ldyBwcmVmaXggZmxhZ3MiOyBcCisJCWVjaG8gIiQkRkxBR1MiID5HSVQtUFJFRklYOyBcCisJZmkKKworVFJBQ0tfQ0ZMQUdTID0gJChDQyk6JChzdWJzdCAnLCdcJycsJChBTExfQ0ZMQUdTKSk6JChVU0VfR0VUVEVYVF9TQ0hFTUUpCisKK0dJVC1DRkxBR1M6IEZPUkNFCisJQEZMQUdTPSckKFRSQUNLX0NGTEFHUyknOyBcCisJICAgIGlmIHRlc3QgeCIkJEZMQUdTIiAhPSB4ImBjYXQgR0lULUNGTEFHUyAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gMT4mMiAiICAgICogbmV3IGJ1aWxkIGZsYWdzIjsgXAorCQllY2hvICIkJEZMQUdTIiA+R0lULUNGTEFHUzsgXAorICAgICAgICAgICAgZmkKKworVFJBQ0tfTERGTEFHUyA9ICQoc3Vic3QgJywnXCcnLCQoQUxMX0xERkxBR1MpKQorCitHSVQtTERGTEFHUzogRk9SQ0UKKwlARkxBR1M9JyQoVFJBQ0tfTERGTEFHUyknOyBcCisJICAgIGlmIHRlc3QgeCIkJEZMQUdTIiAhPSB4ImBjYXQgR0lULUxERkxBR1MgMj4vZGV2L251bGxgIiA7IHRoZW4gXAorCQllY2hvIDE+JjIgIiAgICAqIG5ldyBsaW5rIGZsYWdzIjsgXAorCQllY2hvICIkJEZMQUdTIiA+R0lULUxERkxBR1M7IFwKKyAgICAgICAgICAgIGZpCisKKyMgV2UgbmVlZCB0byBhcHBseSBzcSB0d2ljZSwgb25jZSB0byBwcm90ZWN0IGZyb20gdGhlIHNoZWxsCisjIHRoYXQgcnVucyBHSVQtQlVJTEQtT1BUSU9OUywgYW5kIHRoZW4gYWdhaW4gdG8gcHJvdGVjdCBpdAorIyBhbmQgdGhlIGZpcnN0IGxldmVsIHF1b3RpbmcgZnJvbSB0aGUgc2hlbGwgdGhhdCBydW5zICJlY2hvIi4KK0dJVC1CVUlMRC1PUFRJT05TOiBGT1JDRQorCUBlY2hvIFNIRUxMX1BBVEg9XCcnJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIX1NRKSknXCcgPiRACisJQGVjaG8gUEVSTF9QQVRIPVwnJyQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIX1NRKSknXCcgPj4kQAorCUBlY2hvIERJRkY9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChESUZGKSkpJ1wnID4+JEAKKwlAZWNobyBQWVRIT05fUEFUSD1cJyckKHN1YnN0ICcsJ1wnJywkKFBZVEhPTl9QQVRIX1NRKSknXCcgPj4kQAorCUBlY2hvIFRBUj1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKFRBUikpKSdcJyA+PiRACisJQGVjaG8gTk9fQ1VSTD1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX0NVUkwpKSknXCcgPj4kQAorCUBlY2hvIFVTRV9MSUJQQ1JFPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoVVNFX0xJQlBDUkUpKSknXCcgPj4kQAorCUBlY2hvIE5PX1BFUkw9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19QRVJMKSkpJ1wnID4+JEAKKwlAZWNobyBOT19QWVRIT049XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19QWVRIT04pKSknXCcgPj4kQAorCUBlY2hvIE5PX1VOSVhfU09DS0VUUz1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX1VOSVhfU09DS0VUUykpKSdcJyA+PiRACitpZmRlZiBHSVRfVEVTVF9PUFRTCisJQGVjaG8gR0lUX1RFU1RfT1BUUz1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9URVNUX09QVFMpKSknXCcgPj4kQAorZW5kaWYKK2lmZGVmIEdJVF9URVNUX0NNUAorCUBlY2hvIEdJVF9URVNUX0NNUD1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9URVNUX0NNUCkpKSdcJyA+PiRACitlbmRpZgoraWZkZWYgR0lUX1RFU1RfQ01QX1VTRV9DT1BJRURfQ09OVEVYVAorCUBlY2hvIEdJVF9URVNUX0NNUF9VU0VfQ09QSUVEX0NPTlRFWFQ9WWVzUGxlYXNlID4+JEAKK2VuZGlmCisJQGVjaG8gTk9fR0VUVEVYVD1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX0dFVFRFWFQpKSknXCcgPj4kQAorCUBlY2hvIEdFVFRFWFRfUE9JU09OPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoR0VUVEVYVF9QT0lTT04pKSknXCcgPj4kQAoraWZkZWYgR0lUX1BFUkZfUkVQRUFUX0NPVU5UCisJQGVjaG8gR0lUX1BFUkZfUkVQRUFUX0NPVU5UPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoR0lUX1BFUkZfUkVQRUFUX0NPVU5UKSkpJ1wnID4+JEAKK2VuZGlmCitpZmRlZiBHSVRfUEVSRl9SRVBPCisJQGVjaG8gR0lUX1BFUkZfUkVQTz1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9QRVJGX1JFUE8pKSknXCcgPj4kQAorZW5kaWYKK2lmZGVmIEdJVF9QRVJGX0xBUkdFX1JFUE8KKwlAZWNobyBHSVRfUEVSRl9MQVJHRV9SRVBPPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoR0lUX1BFUkZfTEFSR0VfUkVQTykpKSdcJyA+PiRACitlbmRpZgoraWZkZWYgR0lUX1BFUkZfTUFLRV9PUFRTCisJQGVjaG8gR0lUX1BFUkZfTUFLRV9PUFRTPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoR0lUX1BFUkZfTUFLRV9PUFRTKSkpJ1wnID4+JEAKK2VuZGlmCisKKyMjIyBEZXRlY3QgVGNrL1RrIGludGVycHJldGVyIHBhdGggY2hhbmdlcworaWZuZGVmIE5PX1RDTFRLCitUUkFDS19WQVJTID0gJChzdWJzdCAnLCdcJycsLURUQ0xUS19QQVRIPSckKFRDTFRLX1BBVEhfU1EpJykKIAogR0lULUdVSS1WQVJTOiBGT1JDRQogCUBWQVJTPSckKFRSQUNLX1ZBUlMpJzsgXAotCWlmIHRlc3QgeCIkJFZBUlMiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCi0JCWVjaG8gMT4mMiAiICAgICogbmV3IGxvY2F0aW9ucyBvciBUY2wvVGsgaW50ZXJwcmV0ZXIiOyBcCi0JCWVjaG8gMT4kQCAiJCRWQVJTIjsgXAorCSAgICBpZiB0ZXN0IHgiJCRWQVJTIiAhPSB4ImBjYXQgJEAgMj4vZGV2L251bGxgIiA7IHRoZW4gXAorCQllY2hvIDE+JjIgIiAgICAqIG5ldyBUY2wvVGsgaW50ZXJwcmV0ZXIgbG9jYXRpb24iOyBcCisJCWVjaG8gIiQkVkFSUyIgPiRAOyBcCisgICAgICAgICAgICBmaQorZW5kaWYKKwordGVzdF9iaW5kaXJfcHJvZ3JhbXMgOj0gJChwYXRzdWJzdCAlLGJpbi13cmFwcGVycy8lLCQoQklORElSX1BST0dSQU1TX05FRURfWCkgJChCSU5ESVJfUFJPR1JBTVNfTk9fWCkgJChURVNUX1BST0dSQU1TX05FRURfWCkpCisKK2FsbDo6ICQoVEVTVF9QUk9HUkFNUykgJCh0ZXN0X2JpbmRpcl9wcm9ncmFtcykKKworYmluLXdyYXBwZXJzLyU6IHdyYXAtZm9yLWJpbi5zaAorCUBta2RpciAtcCBiaW4td3JhcHBlcnMKKwkkKFFVSUVUX0dFTilzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorCSAgICAgLWUgJ3N8QEBCVUlMRF9ESVJAQHwkKHNoZWxsIHB3ZCl8JyBcCisJICAgICAtZSAnc3xAQFBST0dAQHwkKEBGKXwnIDwgJDwgPiAkQCAmJiBcCisJY2htb2QgK3ggJEAKKworIyBHTlUgbWFrZSBzdXBwb3J0cyBleHBvcnRpbmcgYWxsIHZhcmlhYmxlcyBieSAiZXhwb3J0IiB3aXRob3V0IHBhcmFtZXRlcnMuCisjIEhvd2V2ZXIsIHRoZSBlbnZpcm9ubWVudCBnZXRzIHF1aXRlIGJpZywgYW5kIHNvbWUgcHJvZ3JhbXMgaGF2ZSBwcm9ibGVtcworIyB3aXRoIHRoYXQuCisKK2V4cG9ydCBOT19TVk5fVEVTVFMKK2V4cG9ydCBURVNUX05PX01BTExPQ19DSEVDSworCisjIyMgVGVzdGluZyBydWxlcworCit0ZXN0OiBhbGwKKwkkKE1BS0UpIC1DIHQvIGFsbAorCitwZXJmOiBhbGwKKwkkKE1BS0UpIC1DIHQvcGVyZi8gYWxsCisKKy5QSE9OWTogdGVzdCBwZXJmCisKK3Rlc3QtY3R5cGUkWDogY3R5cGUubworCit0ZXN0LWRhdGUkWDogZGF0ZS5vIGN0eXBlLm8KKwordGVzdC1kZWx0YSRYOiBkaWZmLWRlbHRhLm8gcGF0Y2gtZGVsdGEubworCit0ZXN0LWxpbmUtYnVmZmVyJFg6IHZjcy1zdm4vbGliLmEKKwordGVzdC1wYXJzZS1vcHRpb25zJFg6IHBhcnNlLW9wdGlvbnMubyBwYXJzZS1vcHRpb25zLWNiLm8KKwordGVzdC1zdm4tZmUkWDogdmNzLXN2bi9saWIuYQorCisuUFJFQ0lPVVM6ICQoVEVTVF9PQkpTKQorCit0ZXN0LSUkWDogdGVzdC0lLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgJChmaWx0ZXIgJS5hLCReKSAkKExJQlMpCisKK2NoZWNrLXNoYTE6OiB0ZXN0LXNoYTEkWAorCS4vdGVzdC1zaGExLnNoCisKK1NQX09CSiA9ICQocGF0c3Vic3QgJS5vLCUuc3AsJChDX09CSikpCisKKyQoU1BfT0JKKTogJS5zcDogJS5jIEdJVC1DRkxBR1MgRk9SQ0UKKwkkKFFVSUVUX1NQKWNnY2MgLW5vLWNvbXBpbGUgJChBTExfQ0ZMQUdTKSAkKEVYVFJBX0NQUEZMQUdTKSBcCisJCSQoU1BBUlNFX0ZMQUdTKSAkPAorCisuUEhPTlk6IHNwYXJzZSAkKFNQX09CSikKK3NwYXJzZTogJChTUF9PQkopCisKK2NoZWNrOiBjb21tb24tY21kcy5oCisJQGlmIHNwYXJzZTsgXAorCXRoZW4gXAorCQllY2hvIDI+JjEgIlVzZSAnbWFrZSBzcGFyc2UnIGluc3RlYWQiOyBcCisJCSQoTUFLRSkgLS1uby1wcmludC1kaXJlY3Rvcnkgc3BhcnNlOyBcCisJZWxzZSBcCisJCWVjaG8gMj4mMSAiRGlkIHlvdSBtZWFuICdtYWtlIHRlc3QnPyI7IFwKKwkJZXhpdCAxOyBcCiAJZmkKIAotaWZkZWYgR0lUR1VJX01BQ09TWEFQUAotYWxsOjogZ2l0LWd1aSBHaXRcIEd1aS5hcHAKK3JlbW92ZS1kYXNoZXM6CisJLi9maXh1cC1idWlsdGlucyAkKEJVSUxUX0lOUykgJChQUk9HUkFNUykgJChTQ1JJUFRTKQorCisjIyMgSW5zdGFsbGF0aW9uIHJ1bGVzCisKK2lmbmVxICgkKGZpbHRlciAvJSwkKGZpcnN0d29yZCAkKHRlbXBsYXRlX2RpcikpKSwpCit0ZW1wbGF0ZV9pbnN0ZGlyID0gJCh0ZW1wbGF0ZV9kaXIpCitlbHNlCit0ZW1wbGF0ZV9pbnN0ZGlyID0gJChwcmVmaXgpLyQodGVtcGxhdGVfZGlyKQogZW5kaWYKLWlmZGVmIEdJVEdVSV9XSU5ET1dTX1dSQVBQRVIKLWFsbDo6IGdpdC1ndWkKK2V4cG9ydCB0ZW1wbGF0ZV9pbnN0ZGlyCisKK2lmbmVxICgkKGZpbHRlciAvJSwkKGZpcnN0d29yZCAkKGdpdGV4ZWNkaXIpKSksKQorZ2l0ZXhlY19pbnN0ZGlyID0gJChnaXRleGVjZGlyKQorZWxzZQorZ2l0ZXhlY19pbnN0ZGlyID0gJChwcmVmaXgpLyQoZ2l0ZXhlY2RpcikKIGVuZGlmCi1hbGw6OiAkKEdJVEdVSV9NQUlOKSBsaWIvdGNsSW5kZXggJChBTExfTVNHRklMRVMpCitnaXRleGVjX2luc3RkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGdpdGV4ZWNfaW5zdGRpcikpCitleHBvcnQgZ2l0ZXhlY19pbnN0ZGlyCisKK2lmbmVxICgkKGZpbHRlciAvJSwkKGZpcnN0d29yZCAkKG1lcmdldG9vbHNkaXIpKSksKQorbWVyZ2V0b29sc19pbnN0ZGlyID0gJChtZXJnZXRvb2xzZGlyKQorZWxzZQorbWVyZ2V0b29sc19pbnN0ZGlyID0gJChwcmVmaXgpLyQobWVyZ2V0b29sc2RpcikKK2VuZGlmCittZXJnZXRvb2xzX2luc3RkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKG1lcmdldG9vbHNfaW5zdGRpcikpCisKK2luc3RhbGxfYmluZGlyX3Byb2dyYW1zIDo9ICQocGF0c3Vic3QgJSwlJFgsJChCSU5ESVJfUFJPR1JBTVNfTkVFRF9YKSkgJChCSU5ESVJfUFJPR1JBTVNfTk9fWCkKIAogaW5zdGFsbDogYWxsCi0JJChRVUlFVCkkKElOU1RBTExfRDApJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJyAkKElOU1RBTExfRDEpCi0JJChRVUlFVCkkKElOU1RBTExfWDApZ2l0LWd1aSAkKElOU1RBTExfWDEpICckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScKLQkkKFFVSUVUKSQoSU5TVEFMTF9YMClnaXQtZ3VpLS1hc2twYXNzICQoSU5TVEFMTF9YMSkgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJwotCSQoUVVJRVQpJChmb3JlYWNoIHAsJChHSVRHVUlfQlVJTFRfSU5TKSwgJChJTlNUQUxMX0wwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKS8kcCcgJChJTlNUQUxMX0wxKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKS9naXQtZ3VpJyAkKElOU1RBTExfTDIpJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpLyRwJyAkKElOU1RBTExfTDMpICYmKSB0cnVlCi1pZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCi0JJChRVUlFVCkkKElOU1RBTExfUjApZ2l0LWd1aS50Y2wgJChJTlNUQUxMX1IxKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSAkKEFMTF9QUk9HUkFNUykgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSAtbSA2NDQgJChTQ1JJUFRfTElCKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpICQoaW5zdGFsbF9iaW5kaXJfcHJvZ3JhbXMpICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJworCSQoTUFLRSkgLUMgdGVtcGxhdGVzIERFU1RESVI9JyQoREVTVERJUl9TUSknIGluc3RhbGwKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQobWVyZ2V0b29sc19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIC1tIDY0NCBtZXJnZXRvb2xzLyogJyQoREVTVERJUl9TUSkkKG1lcmdldG9vbHNfaW5zdGRpcl9TUSknCitpZm5kZWYgTk9fR0VUVEVYVAorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChsb2NhbGVkaXJfU1EpJworCShjZCBwby9idWlsZC9sb2NhbGUgJiYgJChUQVIpIGNmIC0gLikgfCBcCisJKGNkICckKERFU1RESVJfU1EpJChsb2NhbGVkaXJfU1EpJyAmJiB1bWFzayAwMjIgJiYgJChUQVIpIHhvZiAtKQogZW5kaWYKLQkkKFFVSUVUKSQoSU5TVEFMTF9EMCknJChERVNURElSX1NRKSQobGliZGlyX1NRKScgJChJTlNUQUxMX0QxKQotCSQoUVVJRVQpJChJTlNUQUxMX1IwKWxpYi90Y2xJbmRleCAkKElOU1RBTExfUjEpICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJwotaWZkZWYgR0lUR1VJX01BQ09TWEFQUAotCSQoUVVJRVQpJChJTlNUQUxMX0EwKSdHaXQgR3VpLmFwcCcgJChJTlNUQUxMX0ExKSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKScKLQkkKFFVSUVUKSQoSU5TVEFMTF9YMClnaXQtZ3VpLnRjbCAkKElOU1RBTExfWDEpICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJworaWZuZGVmIE5PX1BFUkwKKwkkKE1BS0UpIC1DIHBlcmwgcHJlZml4PSckKHByZWZpeF9TUSknIERFU1RESVI9JyQoREVTVERJUl9TUSknIGluc3RhbGwKKwkkKE1BS0UpIC1DIGdpdHdlYiBpbnN0YWxsCiBlbmRpZgotCSQoUVVJRVQpJChmb3JlYWNoIHAsJChBTExfTElCRklMRVMpICQoTk9OVENMX0xJQkZJTEVTKSwgJChJTlNUQUxMX1IwKSRwICQoSU5TVEFMTF9SMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknICYmKSB0cnVlCi0JJChRVUlFVCkkKElOU1RBTExfRDApJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAkKElOU1RBTExfRDEpCi0JJChRVUlFVCkkKGZvcmVhY2ggcCwkKEFMTF9NU0dGSUxFUyksICQoSU5TVEFMTF9SMCkkcCAkKElOU1RBTExfUjEpICckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScgJiYpIHRydWUKLQotdW5pbnN0YWxsOgotCSQoUVVJRVQpJChDTEVBTl9EU1QpICckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScKLQkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvZ2l0LWd1aSAkKFJFTU9WRV9GMSkKLQkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvZ2l0LWd1aS0tYXNrcGFzcyAkKFJFTU9WRV9GMSkKLQkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoR0lUR1VJX0JVSUxUX0lOUyksICQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvJHAgJChSRU1PVkVfRjEpICYmKSB0cnVlCi1pZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCi0JJChRVUlFVCkkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknL2dpdC1ndWkudGNsICQoUkVNT1ZFX0YxKQoraWZuZGVmIE5PX1BZVEhPTgorCSQoTUFLRSkgLUMgZ2l0X3JlbW90ZV9oZWxwZXJzIHByZWZpeD0nJChwcmVmaXhfU1EpJyBERVNURElSPSckKERFU1RESVJfU1EpJyBpbnN0YWxsCiBlbmRpZgotCSQoUVVJRVQpJChDTEVBTl9EU1QpICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJwotCSQoUVVJRVQpJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknL3RjbEluZGV4ICQoUkVNT1ZFX0YxKQotaWZkZWYgR0lUR1VJX01BQ09TWEFQUAotCSQoUVVJRVQpJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSkvR2l0IEd1aS5hcHAnICQoUkVNT1ZFX0YxKQotCSQoUVVJRVQpJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknL2dpdC1ndWkudGNsICQoUkVNT1ZFX0YxKQoraWZuZGVmIE5PX1RDTFRLCisJJChNQUtFKSAtQyBnaXRrLWdpdCBpbnN0YWxsCisJJChNQUtFKSAtQyBnaXQtZ3VpIGdpdGV4ZWNkaXI9JyQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScgaW5zdGFsbAogZW5kaWYKLQkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoQUxMX0xJQkZJTEVTKSAkKE5PTlRDTF9MSUJGSUxFUyksICQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJy8kKG5vdGRpciAkcCkgJChSRU1PVkVfRjEpICYmKSB0cnVlCi0JJChRVUlFVCkkKENMRUFOX0RTVCkgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJwotCSQoUVVJRVQpJChmb3JlYWNoIHAsJChBTExfTVNHRklMRVMpLCAkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknLyQobm90ZGlyICRwKSAkKFJFTU9WRV9GMSkgJiYpIHRydWUKLQkkKFFVSUVUKSQoUkVNT1ZFX0QwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScgJChSRU1PVkVfRDEpCi0JJChRVUlFVCkkKFJFTU9WRV9EMCknJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknICQoUkVNT1ZFX0QxKQotCSQoUVVJRVQpJChSRU1PVkVfRDApJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknICQoUkVNT1ZFX0QxKQotCSQoUVVJRVQpJChSRU1PVkVfRDApYGRpcm5hbWUgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknYCAkKFJFTU9WRV9EMSkKLQotZGlzdC12ZXJzaW9uOgotCUBta2RpciAtcCAkKFRBUkRJUikKLQlAZWNobyAkKEdJVEdVSV9WRVJTSU9OKSA+ICQoVEFSRElSKS92ZXJzaW9uCi0KLWNsZWFuOjoKLQkkKFJNX1JGKSAkKEdJVEdVSV9NQUlOKSBsaWIvdGNsSW5kZXggcG8vKi5tc2cKLQkkKFJNX1JGKSBHSVQtVkVSU0lPTi1GSUxFIEdJVC1HVUktVkFSUwotaWZkZWYgR0lUR1VJX01BQ09TWEFQUAotCSQoUk1fUkYpICdHaXQgR3VpLmFwcCcqIGdpdC1ndWkKLWVuZGlmCi1pZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCi0JJChSTV9SRikgZ2l0LWd1aQoraWZuZXEgKCwkWCkKKwkkKGZvcmVhY2ggcCwkKHBhdHN1YnN0ICUkWCwlLCQoZmlsdGVyICUkWCwkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIGdpdCRYKSksIHRlc3QgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSkvJHAnIC1lZiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKS8kcCRYJyB8fCAkKFJNKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKS8kcCc7KQogZW5kaWYKIAotLlBIT05ZOiBhbGwgaW5zdGFsbCB1bmluc3RhbGwgZGlzdC12ZXJzaW9uIGNsZWFuCi0uUEhPTlk6IEZPUkNFCisJYmluZGlyPSQkKGNkICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJyAmJiBwd2QpICYmIFwKKwlleGVjZGlyPSQkKGNkICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJyAmJiBwd2QpICYmIFwKKwl7IHRlc3QgIiQkYmluZGlyLyIgPSAiJCRleGVjZGlyLyIgfHwgXAorCSAgZm9yIHAgaW4gZ2l0JFggJChmaWx0ZXIgJChpbnN0YWxsX2JpbmRpcl9wcm9ncmFtcyksJChBTExfUFJPR1JBTVMpKTsgZG8gXAorCQkkKFJNKSAiJCRleGVjZGlyLyQkcCIgJiYgXAorCQl0ZXN0IC16ICIkKE5PX0lOU1RBTExfSEFSRExJTktTKSQoTk9fQ1JPU1NfRElSRUNUT1JZX0hBUkRMSU5LUykiICYmIFwKKwkJbG4gIiQkYmluZGlyLyQkcCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJY3AgIiQkYmluZGlyLyQkcCIgIiQkZXhlY2Rpci8kJHAiIHx8IGV4aXQ7IFwKKwkgIGRvbmU7IFwKKwl9ICYmIFwKKwlmb3IgcCBpbiAkKGZpbHRlciAkKGluc3RhbGxfYmluZGlyX3Byb2dyYW1zKSwkKEJVSUxUX0lOUykpOyBkbyBcCisJCSQoUk0pICIkJGJpbmRpci8kJHAiICYmIFwKKwkJdGVzdCAteiAiJChOT19JTlNUQUxMX0hBUkRMSU5LUykiICYmIFwKKwkJbG4gIiQkYmluZGlyL2dpdCRYIiAiJCRiaW5kaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCWxuIC1zICJnaXQkWCIgIiQkYmluZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAorCQljcCAiJCRiaW5kaXIvZ2l0JFgiICIkJGJpbmRpci8kJHAiIHx8IGV4aXQ7IFwKKwlkb25lICYmIFwKKwlmb3IgcCBpbiAkKEJVSUxUX0lOUyk7IGRvIFwKKwkJJChSTSkgIiQkZXhlY2Rpci8kJHAiICYmIFwKKwkJdGVzdCAteiAiJChOT19JTlNUQUxMX0hBUkRMSU5LUykiICYmIFwKKwkJbG4gIiQkZXhlY2Rpci9naXQkWCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJbG4gLXMgImdpdCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAorCQljcCAiJCRleGVjZGlyL2dpdCRYIiAiJCRleGVjZGlyLyQkcCIgfHwgZXhpdDsgXAorCWRvbmUgJiYgXAorCXJlbW90ZV9jdXJsX2FsaWFzZXM9IiQoUkVNT1RFX0NVUkxfQUxJQVNFUykiICYmIFwKKwlmb3IgcCBpbiAkJHJlbW90ZV9jdXJsX2FsaWFzZXM7IGRvIFwKKwkJJChSTSkgIiQkZXhlY2Rpci8kJHAiICYmIFwKKwkJdGVzdCAteiAiJChOT19JTlNUQUxMX0hBUkRMSU5LUykiICYmIFwKKwkJbG4gIiQkZXhlY2Rpci9naXQtcmVtb3RlLWh0dHAkWCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJbG4gLXMgImdpdC1yZW1vdGUtaHR0cCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAorCQljcCAiJCRleGVjZGlyL2dpdC1yZW1vdGUtaHR0cCRYIiAiJCRleGVjZGlyLyQkcCIgfHwgZXhpdDsgXAorCWRvbmUgJiYgXAorCS4vY2hlY2tfYmluZGlyICJ6JCRiaW5kaXIiICJ6JCRleGVjZGlyIiAiJCRiaW5kaXIvZ2l0LWFkZCRYIgorCitpbnN0YWxsLWdpdHdlYjoKKwkkKE1BS0UpIC1DIGdpdHdlYiBpbnN0YWxsCisKK2luc3RhbGwtZG9jOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBpbnN0YWxsCisKK2luc3RhbGwtbWFuOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBpbnN0YWxsLW1hbgorCitpbnN0YWxsLWh0bWw6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluc3RhbGwtaHRtbAorCitpbnN0YWxsLWluZm86CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluc3RhbGwtaW5mbworCitpbnN0YWxsLXBkZjoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5zdGFsbC1wZGYKKworcXVpY2staW5zdGFsbC1kb2M6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIHF1aWNrLWluc3RhbGwKKworcXVpY2staW5zdGFsbC1tYW46CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIHF1aWNrLWluc3RhbGwtbWFuCisKK3F1aWNrLWluc3RhbGwtaHRtbDoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gcXVpY2staW5zdGFsbC1odG1sCisKKworCisjIyMgTWFpbnRhaW5lcidzIGRpc3QgcnVsZXMKKworZ2l0LnNwZWM6IGdpdC5zcGVjLmluIEdJVC1WRVJTSU9OLUZJTEUKKwlzZWQgLWUgJ3MvQEBWRVJTSU9OQEAvJChHSVRfVkVSU0lPTikvZycgPCAkPCA+ICRAKworCW12ICRAKyAkQAorCitHSVRfVEFSTkFNRT1naXQtJChHSVRfVkVSU0lPTikKK2Rpc3Q6IGdpdC5zcGVjIGdpdC1hcmNoaXZlJChYKSBjb25maWd1cmUKKwkuL2dpdC1hcmNoaXZlIC0tZm9ybWF0PXRhciBcCisJCS0tcHJlZml4PSQoR0lUX1RBUk5BTUUpLyBIRUFEXnt0cmVlfSA+ICQoR0lUX1RBUk5BTUUpLnRhcgorCUBta2RpciAtcCAkKEdJVF9UQVJOQU1FKQorCUBjcCBnaXQuc3BlYyBjb25maWd1cmUgJChHSVRfVEFSTkFNRSkKKwlAZWNobyAkKEdJVF9WRVJTSU9OKSA+ICQoR0lUX1RBUk5BTUUpL3ZlcnNpb24KKwlAJChNQUtFKSAtQyBnaXQtZ3VpIFRBUkRJUj0uLi8kKEdJVF9UQVJOQU1FKS9naXQtZ3VpIGRpc3QtdmVyc2lvbgorCSQoVEFSKSByZiAkKEdJVF9UQVJOQU1FKS50YXIgXAorCQkkKEdJVF9UQVJOQU1FKS9naXQuc3BlYyBcCisJCSQoR0lUX1RBUk5BTUUpL2NvbmZpZ3VyZSBcCisJCSQoR0lUX1RBUk5BTUUpL3ZlcnNpb24gXAorCQkkKEdJVF9UQVJOQU1FKS9naXQtZ3VpL3ZlcnNpb24KKwlAJChSTSkgLXIgJChHSVRfVEFSTkFNRSkKKwlnemlwIC1mIC05ICQoR0lUX1RBUk5BTUUpLnRhcgorCitycG06IGRpc3QKKwkkKFJQTUJVSUxEKSBcCisJCS0tZGVmaW5lICJfc291cmNlX2ZpbGVkaWdlc3RfYWxnb3JpdGhtIG1kNSIgXAorCQktLWRlZmluZSAiX2JpbmFyeV9maWxlZGlnZXN0X2FsZ29yaXRobSBtZDUiIFwKKwkJLXRhICQoR0lUX1RBUk5BTUUpLnRhci5negorCitodG1sZG9jcyA9IGdpdC1odG1sZG9jcy0kKEdJVF9WRVJTSU9OKQorbWFucGFnZXMgPSBnaXQtbWFucGFnZXMtJChHSVRfVkVSU0lPTikKK2Rpc3QtZG9jOgorCSQoUk0pIC1yIC5kb2MtdG1wLWRpcgorCW1rZGlyIC5kb2MtdG1wLWRpcgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBXRUJET0NfREVTVD0uLi8uZG9jLXRtcC1kaXIgaW5zdGFsbC13ZWJkb2MKKwljZCAuZG9jLXRtcC1kaXIgJiYgJChUQVIpIGNmIC4uLyQoaHRtbGRvY3MpLnRhciAuCisJZ3ppcCAtbiAtOSAtZiAkKGh0bWxkb2NzKS50YXIKKwk6CisJJChSTSkgLXIgLmRvYy10bXAtZGlyCisJbWtkaXIgLXAgLmRvYy10bXAtZGlyL21hbjEgLmRvYy10bXAtZGlyL21hbjUgLmRvYy10bXAtZGlyL21hbjcKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gREVTVERJUj0uLyBcCisJCW1hbjFkaXI9Li4vLmRvYy10bXAtZGlyL21hbjEgXAorCQltYW41ZGlyPS4uLy5kb2MtdG1wLWRpci9tYW41IFwKKwkJbWFuN2Rpcj0uLi8uZG9jLXRtcC1kaXIvbWFuNyBcCisJCWluc3RhbGwKKwljZCAuZG9jLXRtcC1kaXIgJiYgJChUQVIpIGNmIC4uLyQobWFucGFnZXMpLnRhciAuCisJZ3ppcCAtbiAtOSAtZiAkKG1hbnBhZ2VzKS50YXIKKwkkKFJNKSAtciAuZG9jLXRtcC1kaXIKKworIyMjIENsZWFuaW5nIHJ1bGVzCisKK2Rpc3RjbGVhbjogY2xlYW4KKwkkKFJNKSBjb25maWd1cmUKKwkkKFJNKSBjb25maWcubG9nIGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlCisJJChSTSkgY29uZmlnLm1hay5hdXRvZ2VuIGNvbmZpZy5tYWsuYXBwZW5kCisJJChSTSkgLXIgYXV0b200dGUuY2FjaGUKKworcHJvZmlsZS1jbGVhbjoKKwkkKFJNKSAkKGFkZHN1ZmZpeCAqLmdjZGEsJChhZGRwcmVmaXggJChQUk9GSUxFX0RJUikvLCAkKG9iamVjdF9kaXJzKSkpCisJJChSTSkgJChhZGRzdWZmaXggKi5nY25vLCQoYWRkcHJlZml4ICQoUFJPRklMRV9ESVIpLywgJChvYmplY3RfZGlycykpKQorCitjbGVhbjogcHJvZmlsZS1jbGVhbgorCSQoUk0pICoubyBibG9jay1zaGExLyoubyBwcGMvKi5vIGNvbXBhdC8qLm8gY29tcGF0LyovKi5vIHhkaWZmLyoubyB2Y3Mtc3ZuLyoubyBcCisJCWJ1aWx0aW4vKi5vICQoTElCX0ZJTEUpICQoWERJRkZfTElCKSAkKFZDU1NWTl9MSUIpCisJJChSTSkgJChBTExfUFJPR1JBTVMpICQoU0NSSVBUX0xJQikgJChCVUlMVF9JTlMpIGdpdCRYCisJJChSTSkgJChURVNUX1BST0dSQU1TKQorCSQoUk0pIC1yIGJpbi13cmFwcGVycworCSQoUk0pIC1yICQoZGVwX2RpcnMpCisJJChSTSkgLXIgcG8vYnVpbGQvCisJJChSTSkgKi5zcGVjICoucHljICoucHlvICovKi5weWMgKi8qLnB5byBjb21tb24tY21kcy5oICQoRVRBR1NfVEFSR0VUKSB0YWdzIGNzY29wZSoKKwkkKFJNKSAtciAkKEdJVF9UQVJOQU1FKSAuZG9jLXRtcC1kaXIKKwkkKFJNKSAkKEdJVF9UQVJOQU1FKS50YXIuZ3ogZ2l0LWNvcmVfJChHSVRfVkVSU0lPTiktKi50YXIuZ3oKKwkkKFJNKSAkKGh0bWxkb2NzKS50YXIuZ3ogJChtYW5wYWdlcykudGFyLmd6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uLyBjbGVhbgoraWZuZGVmIE5PX1BFUkwKKwkkKE1BS0UpIC1DIGdpdHdlYiBjbGVhbgorCSQoTUFLRSkgLUMgcGVybCBjbGVhbgorZW5kaWYKK2lmbmRlZiBOT19QWVRIT04KKwkkKE1BS0UpIC1DIGdpdF9yZW1vdGVfaGVscGVycyBjbGVhbgorZW5kaWYKKwkkKE1BS0UpIC1DIHRlbXBsYXRlcy8gY2xlYW4KKwkkKE1BS0UpIC1DIHQvIGNsZWFuCitpZm5kZWYgTk9fVENMVEsKKwkkKE1BS0UpIC1DIGdpdGstZ2l0IGNsZWFuCisJJChNQUtFKSAtQyBnaXQtZ3VpIGNsZWFuCitlbmRpZgorCSQoUk0pIEdJVC1WRVJTSU9OLUZJTEUgR0lULUNGTEFHUyBHSVQtTERGTEFHUyBHSVQtR1VJLVZBUlMgR0lULUJVSUxELU9QVElPTlMKKwkkKFJNKSBHSVQtVVNFUi1BR0VOVCBHSVQtUFJFRklYIEdJVC1TQ1JJUFQtREVGSU5FUworCisuUEhPTlk6IGFsbCBpbnN0YWxsIHByb2ZpbGUtY2xlYW4gY2xlYW4gc3RyaXAKKy5QSE9OWTogc2hlbGxfY29tcGF0aWJpbGl0eV90ZXN0IHBsZWFzZV9zZXRfU0hFTExfUEFUSF90b19hX21vcmVfbW9kZXJuX3NoZWxsCisuUEhPTlk6IEZPUkNFIGNzY29wZQorCisjIyMgQ2hlY2sgZG9jdW1lbnRhdGlvbgorIworQUxMX0NPTU1BTkRTID0gJChBTExfUFJPR1JBTVMpICQoU0NSSVBUX0xJQikgJChCVUlMVF9JTlMpCitBTExfQ09NTUFORFMgKz0gZ2l0CitBTExfQ09NTUFORFMgKz0gZ2l0aworQUxMX0NPTU1BTkRTICs9IGdpdHdlYgorQUxMX0NPTU1BTkRTICs9IGdpdC1ndWkgZ2l0LWNpdG9vbAorY2hlY2stZG9jczo6CisJQChmb3IgdiBpbiAkKEFMTF9DT01NQU5EUyk7IFwKKwlkbyBcCisJCWNhc2UgIiQkdiIgaW4gXAorCQlnaXQtbWVyZ2Utb2N0b3B1cyB8IGdpdC1tZXJnZS1vdXJzIHwgZ2l0LW1lcmdlLXJlY3Vyc2l2ZSB8IFwKKwkJZ2l0LW1lcmdlLXJlc29sdmUgfCBnaXQtbWVyZ2Utc3VidHJlZSB8IFwKKwkJZ2l0LWZzY2stb2JqZWN0cyB8IGdpdC1pbml0LWRiIHwgXAorCQlnaXQtcmVtb3RlLSogfCBnaXQtc3RhZ2UgfCBcCisJCWdpdC0/Ki0tPyogKSBjb250aW51ZSA7OyBcCisJCWVzYWMgOyBcCisJCXRlc3QgLWYgIkRvY3VtZW50YXRpb24vJCR2LnR4dCIgfHwgXAorCQllY2hvICJubyBkb2M6ICQkdiI7IFwKKwkJc2VkIC1lICcvXiMvZCcgY29tbWFuZC1saXN0LnR4dCB8IFwKKwkJZ3JlcCAtcSAiXiQkdlsgCV0iIHx8IFwKKwkJY2FzZSAiJCR2IiBpbiBcCisJCWdpdCkgOzsgXAorCQkqKSBlY2hvICJubyBsaW5rOiAkJHYiOzsgXAorCQllc2FjIDsgXAorCWRvbmU7IFwKKwkoIFwKKwkJc2VkIC1lICcvXiMvZCcgXAorCQkgICAgLWUgJ3MvWyAJXS4qLy8nIFwKKwkJICAgIC1lICdzL14vbGlzdGVkIC8nIGNvbW1hbmQtbGlzdC50eHQ7IFwKKwkJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIHByaW50LW1hbjEgfCBcCisJCWdyZXAgJ1wudHh0JCQnIHwgXAorCQlzZWQgLWUgJ3N8RG9jdW1lbnRhdGlvbi98ZG9jdW1lbnRlZCB8JyBcCisJCSAgICAtZSAncy9cLnR4dC8vJzsgXAorCSkgfCB3aGlsZSByZWFkIGhvdyBjbWQ7IFwKKwlkbyBcCisJCWNhc2UgIiAkKEFMTF9DT01NQU5EUykgIiBpbiBcCisJCSoiICQkY21kICIqKQk7OyBcCisJCSopIGVjaG8gInJlbW92ZWQgYnV0ICQkaG93OiAkJGNtZCIgOzsgXAorCQllc2FjOyBcCisJZG9uZSApIHwgc29ydAorCisjIyMgTWFrZSBzdXJlIGJ1aWx0LWlucyBkbyBub3QgaGF2ZSBkdXBzIGFuZCBsaXN0ZWQgaW4gZ2l0LmMKKyMKK2NoZWNrLWJ1aWx0aW5zOjoKKwkuL2NoZWNrLWJ1aWx0aW5zLnNoCisKKyMjIyBUZXN0IHN1aXRlIGNvdmVyYWdlIHRlc3RpbmcKKyMKKy5QSE9OWTogY292ZXJhZ2UgY292ZXJhZ2UtY2xlYW4gY292ZXJhZ2UtYnVpbGQgY292ZXJhZ2UtcmVwb3J0CisKK2NvdmVyYWdlOgorCSQoTUFLRSkgY292ZXJhZ2UtYnVpbGQKKwkkKE1BS0UpIGNvdmVyYWdlLXJlcG9ydAorCitvYmplY3RfZGlycyA6PSAkKHNvcnQgJChkaXIgJChPQkpFQ1RTKSkpCitjb3ZlcmFnZS1jbGVhbjoKKwkkKFJNKSAkKGFkZHN1ZmZpeCAqLmdjb3YsJChvYmplY3RfZGlycykpCisJJChSTSkgJChhZGRzdWZmaXggKi5nY2RhLCQob2JqZWN0X2RpcnMpKQorCSQoUk0pICQoYWRkc3VmZml4ICouZ2NubywkKG9iamVjdF9kaXJzKSkKKwkkKFJNKSBjb3ZlcmFnZS11bnRlc3RlZC1mdW5jdGlvbnMKKwkkKFJNKSAtciBjb3Zlcl9kYi8KKwkkKFJNKSAtciBjb3Zlcl9kYl9odG1sLworCitDT1ZFUkFHRV9DRkxBR1MgPSAkKENGTEFHUykgLU8wIC1mdGVzdC1jb3ZlcmFnZSAtZnByb2ZpbGUtYXJjcworQ09WRVJBR0VfTERGTEFHUyA9ICQoQ0ZMQUdTKSAgLU8wIC1sZ2NvdgorR0NPVkZMQUdTID0gLS1wcmVzZXJ2ZS1wYXRocyAtLWJyYW5jaC1wcm9iYWJpbGl0aWVzIC0tYWxsLWJsb2NrcworCitjb3ZlcmFnZS1idWlsZDogY292ZXJhZ2UtY2xlYW4KKwkkKE1BS0UpIENGTEFHUz0iJChDT1ZFUkFHRV9DRkxBR1MpIiBMREZMQUdTPSIkKENPVkVSQUdFX0xERkxBR1MpIiBhbGwKKwkkKE1BS0UpIENGTEFHUz0iJChDT1ZFUkFHRV9DRkxBR1MpIiBMREZMQUdTPSIkKENPVkVSQUdFX0xERkxBR1MpIiBcCisJCS1qMSB0ZXN0CisKK2NvdmVyYWdlLXJlcG9ydDoKKwkkKFFVSUVUX0dDT1YpZm9yIGRpciBpbiAkKG9iamVjdF9kaXJzKTsgZG8gXAorCQkkKEdDT1YpICQoR0NPVkZMQUdTKSAtLW9iamVjdC1kaXJlY3Rvcnk9JCRkaXIgJCRkaXIqLmMgfHwgZXhpdDsgXAorCWRvbmUKKworY292ZXJhZ2UtdW50ZXN0ZWQtZnVuY3Rpb25zOiBjb3ZlcmFnZS1yZXBvcnQKKwlncmVwICdeZnVuY3Rpb24uKmNhbGxlZCAwICcgKi5jLmdjb3YgXAorCQl8IHNlZCAtZSAncy9cKFteOl0qXClcLmdjb3Y6ICpmdW5jdGlvbiBcKFteIF0qXCkgY2FsbGVkLiovXDE6IFwyLycgXAorCQk+IGNvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9ucworCitjb3Zlcl9kYjogY292ZXJhZ2UtcmVwb3J0CisJZ2NvdjJwZXJsIC1kYiBjb3Zlcl9kYiAqLmdjb3YKKworY292ZXJfZGJfaHRtbDogY292ZXJfZGIKKwljb3ZlciAtcmVwb3J0IGh0bWwgLW91dHB1dGRpciBjb3Zlcl9kYl9odG1sIGNvdmVyX2RiCisKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjY5MGVjCi0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FCkBAIC0wLDAgKzEsNTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCUdJVCAtIHRoZSBzdHVwaWQgY29udGVudCB0cmFja2VyCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworImdpdCIgY2FuIG1lYW4gYW55dGhpbmcsIGRlcGVuZGluZyBvbiB5b3VyIG1vb2QuCisKKyAtIHJhbmRvbSB0aHJlZS1sZXR0ZXIgY29tYmluYXRpb24gdGhhdCBpcyBwcm9ub3VuY2VhYmxlLCBhbmQgbm90CisgICBhY3R1YWxseSB1c2VkIGJ5IGFueSBjb21tb24gVU5JWCBjb21tYW5kLiAgVGhlIGZhY3QgdGhhdCBpdCBpcyBhCisgICBtaXNwcm9udW5jaWF0aW9uIG9mICJnZXQiIG1heSBvciBtYXkgbm90IGJlIHJlbGV2YW50LgorIC0gc3R1cGlkLiBjb250ZW1wdGlibGUgYW5kIGRlc3BpY2FibGUuIHNpbXBsZS4gVGFrZSB5b3VyIHBpY2sgZnJvbSB0aGUKKyAgIGRpY3Rpb25hcnkgb2Ygc2xhbmcuCisgLSAiZ2xvYmFsIGluZm9ybWF0aW9uIHRyYWNrZXIiOiB5b3UncmUgaW4gYSBnb29kIG1vb2QsIGFuZCBpdCBhY3R1YWxseQorICAgd29ya3MgZm9yIHlvdS4gQW5nZWxzIHNpbmcsIGFuZCBhIGxpZ2h0IHN1ZGRlbmx5IGZpbGxzIHRoZSByb29tLgorIC0gImdvZGRhbW4gaWRpb3RpYyB0cnVja2xvYWQgb2Ygc2gqdCI6IHdoZW4gaXQgYnJlYWtzCisKK0dpdCBpcyBhIGZhc3QsIHNjYWxhYmxlLCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbSB3aXRoIGFuCit1bnVzdWFsbHkgcmljaCBjb21tYW5kIHNldCB0aGF0IHByb3ZpZGVzIGJvdGggaGlnaC1sZXZlbCBvcGVyYXRpb25zCithbmQgZnVsbCBhY2Nlc3MgdG8gaW50ZXJuYWxzLgorCitHaXQgaXMgYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0l0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgd2l0aCBoZWxwIG9mIGEgZ3JvdXAgb2YKK2hhY2tlcnMgYXJvdW5kIHRoZSBuZXQuIEl0IGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEp1bmlvIEMgSGFtYW5vLgorCitQbGVhc2UgcmVhZCB0aGUgZmlsZSBJTlNUQUxMIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorCitTZWUgRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQgdG8gZ2V0IHN0YXJ0ZWQsIHRoZW4gc2VlCitEb2N1bWVudGF0aW9uL2V2ZXJ5ZGF5LnR4dCBmb3IgYSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMsIGFuZAorRG9jdW1lbnRhdGlvbi9naXQtY29tbWFuZG5hbWUudHh0IGZvciBkb2N1bWVudGF0aW9uIG9mIGVhY2ggY29tbWFuZC4KK0lmIGdpdCBoYXMgYmVlbiBjb3JyZWN0bHkgaW5zdGFsbGVkLCB0aGVuIHRoZSB0dXRvcmlhbCBjYW4gYWxzbyBiZQorcmVhZCB3aXRoICJtYW4gZ2l0dHV0b3JpYWwiIG9yICJnaXQgaGVscCB0dXRvcmlhbCIsIGFuZCB0aGUKK2RvY3VtZW50YXRpb24gb2YgZWFjaCBjb21tYW5kIHdpdGggIm1hbiBnaXQtY29tbWFuZG5hbWUiIG9yICJnaXQgaGVscAorY29tbWFuZG5hbWUiLgorCitDVlMgdXNlcnMgbWF5IGFsc28gd2FudCB0byByZWFkIERvY3VtZW50YXRpb24vZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQKKygibWFuIGdpdGN2cy1taWdyYXRpb24iIG9yICJnaXQgaGVscCBjdnMtbWlncmF0aW9uIiBpZiBnaXQgaXMKK2luc3RhbGxlZCkuCisKK01hbnkgR2l0IG9ubGluZSByZXNvdXJjZXMgYXJlIGFjY2Vzc2libGUgZnJvbSBodHRwOi8vZ2l0LXNjbS5jb20vCitpbmNsdWRpbmcgZnVsbCBkb2N1bWVudGF0aW9uIGFuZCBHaXQgcmVsYXRlZCB0b29scy4KKworVGhlIHVzZXIgZGlzY3Vzc2lvbiBhbmQgZGV2ZWxvcG1lbnQgb2YgR2l0IHRha2UgcGxhY2Ugb24gdGhlIEdpdAorbWFpbGluZyBsaXN0IC0tIGV2ZXJ5b25lIGlzIHdlbGNvbWUgdG8gcG9zdCBidWcgcmVwb3J0cywgZmVhdHVyZQorcmVxdWVzdHMsIGNvbW1lbnRzIGFuZCBwYXRjaGVzIHRvIGdpdEB2Z2VyLmtlcm5lbC5vcmcgKHJlYWQKK0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMgZm9yIGluc3RydWN0aW9ucyBvbiBwYXRjaCBzdWJtaXNzaW9uKS4KK1RvIHN1YnNjcmliZSB0byB0aGUgbGlzdCwgc2VuZCBhbiBlbWFpbCB3aXRoIGp1c3QgInN1YnNjcmliZSBnaXQiIGluCit0aGUgYm9keSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnLiBUaGUgbWFpbGluZyBsaXN0IGFyY2hpdmVzIGFyZQorYXZhaWxhYmxlIGF0IGh0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9Z2l0IGFuZCBvdGhlciBhcmNoaXZhbAorc2l0ZXMuCisKK1RoZSBtZXNzYWdlcyB0aXRsZWQgIkEgbm90ZSBmcm9tIHRoZSBtYWludGFpbmVyIiwgIldoYXQncyBpbgorZ2l0LmdpdCAoc3RhYmxlKSIgYW5kICJXaGF0J3MgY29va2luZyBpbiBnaXQuZ2l0ICh0b3BpY3MpIiBhbmQKK3RoZSBkaXNjdXNzaW9uIGZvbGxvd2luZyB0aGVtIG9uIHRoZSBtYWlsaW5nIGxpc3QgZ2l2ZSBhIGdvb2QKK3JlZmVyZW5jZSBmb3IgcHJvamVjdCBzdGF0dXMsIGRldmVsb3BtZW50IGRpcmVjdGlvbiBhbmQKK3JlbWFpbmluZyB0YXNrcy4KZGlmZiAtLWdpdCBhL1JlbE5vdGVzIGIvUmVsTm90ZXMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMjQ4NGIzOAotLS0gL2Rldi9udWxsCisrKyBiL1JlbE5vdGVzCkBAIC0wLDAgKzEgQEAKK0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYWJzcGF0aC5jIGIvYWJzcGF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZjJkNzkKLS0tIC9kZXYvbnVsbAorKysgYi9hYnNwYXRoLmMKQEAgLTAsMCArMSwxNzQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCisvKgorICogRG8gbm90IHVzZSB0aGlzIGZvciBpbnNwZWN0aW5nICp0cmFja2VkKiBjb250ZW50LiAgV2hlbiBwYXRoIGlzIGEKKyAqIHN5bWxpbmsgdG8gYSBkaXJlY3RvcnksIHdlIGRvIG5vdCB3YW50IHRvIHNheSBpdCBpcyBhIGRpcmVjdG9yeSB3aGVuCisgKiBkZWFsaW5nIHdpdGggdHJhY2tlZCBjb250ZW50IGluIHRoZSB3b3JraW5nIHRyZWUuCisgKi8KK2ludCBpc19kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlyZXR1cm4gKCFzdGF0KHBhdGgsICZzdCkgJiYgU19JU0RJUihzdC5zdF9tb2RlKSk7Cit9CisKKy8qIFdlIGFsbG93ICJyZWN1cnNpdmUiIHN5bWJvbGljIGxpbmtzLiBPbmx5IHdpdGhpbiByZWFzb24sIHRob3VnaC4gKi8KKyNkZWZpbmUgTUFYREVQVEggNQorCisvKgorICogVXNlIHRoaXMgdG8gZ2V0IHRoZSByZWFsIHBhdGgsIGkuZS4gcmVzb2x2ZSBsaW5rcy4gSWYgeW91IHdhbnQgYW4KKyAqIGFic29sdXRlIHBhdGggYnV0IGRvbid0IG1pbmQgbGlua3MsIHVzZSBhYnNvbHV0ZV9wYXRoLgorICoKKyAqIElmIHBhdGggaXMgb3VyIGJ1ZmZlciwgdGhlbiByZXR1cm4gcGF0aCwgYXMgaXQncyBhbHJlYWR5IHdoYXQgdGhlCisgKiB1c2VyIHdhbnRzLgorICovCitjb25zdCBjaGFyICpyZWFsX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgY2hhciBidWZzWzJdW1BBVEhfTUFYICsgMV0sICpidWYgPSBidWZzWzBdLCAqbmV4dF9idWYgPSBidWZzWzFdOworCWNoYXIgY3dkWzEwMjRdID0gIiI7CisJaW50IGJ1Zl9pbmRleCA9IDE7CisKKwlpbnQgZGVwdGggPSBNQVhERVBUSDsKKwljaGFyICpsYXN0X2VsZW0gPSBOVUxMOworCXN0cnVjdCBzdGF0IHN0OworCisJLyogV2UndmUgYWxyZWFkeSBkb25lIGl0ICovCisJaWYgKHBhdGggPT0gYnVmIHx8IHBhdGggPT0gbmV4dF9idWYpCisJCXJldHVybiBwYXRoOworCisJaWYgKCEqcGF0aCkKKwkJZGllKCJUaGUgZW1wdHkgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIHBhdGgiKTsKKworCWlmIChzdHJsY3B5KGJ1ZiwgcGF0aCwgUEFUSF9NQVgpID49IFBBVEhfTUFYKQorCQlkaWUgKCJUb28gbG9uZyBwYXRoOiAlLipzIiwgNjAsIHBhdGgpOworCisJd2hpbGUgKGRlcHRoLS0pIHsKKwkJaWYgKCFpc19kaXJlY3RvcnkoYnVmKSkgeworCQkJY2hhciAqbGFzdF9zbGFzaCA9IGZpbmRfbGFzdF9kaXJfc2VwKGJ1Zik7CisJCQlpZiAobGFzdF9zbGFzaCkgeworCQkJCWxhc3RfZWxlbSA9IHhzdHJkdXAobGFzdF9zbGFzaCArIDEpOworCQkJCWxhc3Rfc2xhc2hbMV0gPSAnXDAnOworCQkJfSBlbHNlIHsKKwkJCQlsYXN0X2VsZW0gPSB4c3RyZHVwKGJ1Zik7CisJCQkJKmJ1ZiA9ICdcMCc7CisJCQl9CisJCX0KKworCQlpZiAoKmJ1ZikgeworCQkJaWYgKCEqY3dkICYmICFnZXRjd2QoY3dkLCBzaXplb2YoY3dkKSkpCisJCQkJZGllX2Vycm5vICgiQ291bGQgbm90IGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CisKKwkJCWlmIChjaGRpcihidWYpKQorCQkJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBzd2l0Y2ggdG8gJyVzJyIsIGJ1Zik7CisJCX0KKwkJaWYgKCFnZXRjd2QoYnVmLCBQQVRIX01BWCkpCisJCQlkaWVfZXJybm8gKCJDb3VsZCBub3QgZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKworCQlpZiAobGFzdF9lbGVtKSB7CisJCQlzaXplX3QgbGVuID0gc3RybGVuKGJ1Zik7CisJCQlpZiAobGVuICsgc3RybGVuKGxhc3RfZWxlbSkgKyAyID4gUEFUSF9NQVgpCisJCQkJZGllICgiVG9vIGxvbmcgcGF0aCBuYW1lOiAnJXMvJXMnIiwKKwkJCQkJCWJ1ZiwgbGFzdF9lbGVtKTsKKwkJCWlmIChsZW4gJiYgIWlzX2Rpcl9zZXAoYnVmW2xlbi0xXSkpCisJCQkJYnVmW2xlbisrXSA9ICcvJzsKKwkJCXN0cmNweShidWYgKyBsZW4sIGxhc3RfZWxlbSk7CisJCQlmcmVlKGxhc3RfZWxlbSk7CisJCQlsYXN0X2VsZW0gPSBOVUxMOworCQl9CisKKwkJaWYgKCFsc3RhdChidWYsICZzdCkgJiYgU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJc3NpemVfdCBsZW4gPSByZWFkbGluayhidWYsIG5leHRfYnVmLCBQQVRIX01BWCk7CisJCQlpZiAobGVuIDwgMCkKKwkJCQlkaWVfZXJybm8gKCJJbnZhbGlkIHN5bWxpbmsgJyVzJyIsIGJ1Zik7CisJCQlpZiAoUEFUSF9NQVggPD0gbGVuKQorCQkJCWRpZSgic3ltYm9saWMgbGluayB0b28gbG9uZzogJXMiLCBidWYpOworCQkJbmV4dF9idWZbbGVuXSA9ICdcMCc7CisJCQlidWYgPSBuZXh0X2J1ZjsKKwkJCWJ1Zl9pbmRleCA9IDEgLSBidWZfaW5kZXg7CisJCQluZXh0X2J1ZiA9IGJ1ZnNbYnVmX2luZGV4XTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisKKwlpZiAoKmN3ZCAmJiBjaGRpcihjd2QpKQorCQlkaWVfZXJybm8gKCJDb3VsZCBub3QgY2hhbmdlIGJhY2sgdG8gJyVzJyIsIGN3ZCk7CisKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3B3ZF9jd2Qodm9pZCkKK3sKKwlzdGF0aWMgY2hhciBjd2RbUEFUSF9NQVggKyAxXTsKKwljaGFyICpwd2Q7CisJc3RydWN0IHN0YXQgY3dkX3N0YXQsIHB3ZF9zdGF0OworCWlmIChnZXRjd2QoY3dkLCBQQVRIX01BWCkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcHdkID0gZ2V0ZW52KCJQV0QiKTsKKwlpZiAocHdkICYmIHN0cmNtcChwd2QsIGN3ZCkpIHsKKwkJc3RhdChjd2QsICZjd2Rfc3RhdCk7CisJCWlmICgoY3dkX3N0YXQuc3RfZGV2IHx8IGN3ZF9zdGF0LnN0X2lubykgJiYKKwkJICAgICFzdGF0KHB3ZCwgJnB3ZF9zdGF0KSAmJgorCQkgICAgcHdkX3N0YXQuc3RfZGV2ID09IGN3ZF9zdGF0LnN0X2RldiAmJgorCQkgICAgcHdkX3N0YXQuc3RfaW5vID09IGN3ZF9zdGF0LnN0X2lubykgeworCQkJc3RybGNweShjd2QsIHB3ZCwgUEFUSF9NQVgpOworCQl9CisJfQorCXJldHVybiBjd2Q7Cit9CisKKy8qCisgKiBVc2UgdGhpcyB0byBnZXQgYW4gYWJzb2x1dGUgcGF0aCBmcm9tIGEgcmVsYXRpdmUgb25lLiBJZiB5b3Ugd2FudAorICogdG8gcmVzb2x2ZSBsaW5rcywgeW91IHNob3VsZCB1c2UgcmVhbF9wYXRoLgorICoKKyAqIElmIHRoZSBwYXRoIGlzIGFscmVhZHkgYWJzb2x1dGUsIHRoZW4gcmV0dXJuIHBhdGguIEFzIHRoZSB1c2VyIGlzCisgKiBuZXZlciBtZWFudCB0byBmcmVlIHRoZSByZXR1cm4gdmFsdWUsIHdlJ3JlIHNhZmUuCisgKi8KK2NvbnN0IGNoYXIgKmFic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgY2hhciBidWZbUEFUSF9NQVggKyAxXTsKKworCWlmICghKnBhdGgpIHsKKwkJZGllKCJUaGUgZW1wdHkgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIHBhdGgiKTsKKwl9IGVsc2UgaWYgKGlzX2Fic29sdXRlX3BhdGgocGF0aCkpIHsKKwkJaWYgKHN0cmxjcHkoYnVmLCBwYXRoLCBQQVRIX01BWCkgPj0gUEFUSF9NQVgpCisJCQlkaWUoIlRvbyBsb25nIHBhdGg6ICUuKnMiLCA2MCwgcGF0aCk7CisJfSBlbHNlIHsKKwkJc2l6ZV90IGxlbjsKKwkJY29uc3QgY2hhciAqZm10OworCQljb25zdCBjaGFyICpjd2QgPSBnZXRfcHdkX2N3ZCgpOworCQlpZiAoIWN3ZCkKKwkJCWRpZV9lcnJubygiQ2Fubm90IGRldGVybWluZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOworCQlsZW4gPSBzdHJsZW4oY3dkKTsKKwkJZm10ID0gKGxlbiA+IDAgJiYgaXNfZGlyX3NlcChjd2RbbGVuLTFdKSkgPyAiJXMlcyIgOiAiJXMvJXMiOworCQlpZiAoc25wcmludGYoYnVmLCBQQVRIX01BWCwgZm10LCBjd2QsIHBhdGgpID49IFBBVEhfTUFYKQorCQkJZGllKCJUb28gbG9uZyBwYXRoOiAlLipzIiwgNjAsIHBhdGgpOworCX0KKwlyZXR1cm4gYnVmOworfQorCisvKgorICogVW5saWtlIHByZWZpeF9wYXRoLCB0aGlzIHNob3VsZCBiZSB1c2VkIGlmIHRoZSBuYW1lZCBmaWxlIGRvZXMKKyAqIG5vdCBoYXZlIHRvIGludGVyYWN0IHdpdGggaW5kZXggZW50cnk7IGkuZS4gbmFtZSBvZiBhIHJhbmRvbSBmaWxlCisgKiBvbiB0aGUgZmlsZXN5c3RlbS4KKyAqLworY29uc3QgY2hhciAqcHJlZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnBmeCwgaW50IHBmeF9sZW4sIGNvbnN0IGNoYXIgKmFyZykKK3sKKwlzdGF0aWMgY2hhciBwYXRoW1BBVEhfTUFYXTsKKyNpZm5kZWYgV0lOMzIKKwlpZiAoIXBmeF9sZW4gfHwgaXNfYWJzb2x1dGVfcGF0aChhcmcpKQorCQlyZXR1cm4gYXJnOworCW1lbWNweShwYXRoLCBwZngsIHBmeF9sZW4pOworCXN0cmNweShwYXRoICsgcGZ4X2xlbiwgYXJnKTsKKyNlbHNlCisJY2hhciAqcDsKKwkvKiBkb24ndCBhZGQgcHJlZml4IHRvIGFic29sdXRlIHBhdGhzLCBidXQgc3RpbGwgcmVwbGFjZSAnXCcgYnkgJy8nICovCisJaWYgKGlzX2Fic29sdXRlX3BhdGgoYXJnKSkKKwkJcGZ4X2xlbiA9IDA7CisJZWxzZSBpZiAocGZ4X2xlbikKKwkJbWVtY3B5KHBhdGgsIHBmeCwgcGZ4X2xlbik7CisJc3RyY3B5KHBhdGggKyBwZnhfbGVuLCBhcmcpOworCWZvciAocCA9IHBhdGggKyBwZnhfbGVuOyAqcDsgcCsrKQorCQlpZiAoKnAgPT0gJ1xcJykKKwkJCSpwID0gJy8nOworI2VuZGlmCisJcmV0dXJuIHBhdGg7Cit9CmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTFiYzdlCi0tLSAvZGV2L251bGwKKysrIGIvYWNsb2NhbC5tNApAQCAtMCwwICsxLDQwIEBACitkbmwgQ2hlY2sgZm9yIHNvY2tsZW5fdDogaGlzdG9yaWNhbGx5IG9uIEJTRCBpdCBpcyBhbiBpbnQsIGFuZCBpbgorZG5sIFBPU0lYIDFnIGl0IGlzIGEgdHlwZSBvZiBpdHMgb3duLCBidXQgc29tZSBwbGF0Zm9ybXMgdXNlIGRpZmZlcmVudAorZG5sIHR5cGVzIGZvciB0aGUgYXJndW1lbnQgdG8gZ2V0c29ja29wdCwgZ2V0cGVlcm5hbWUsIGV0Yy4gIFNvIHdlCitkbmwgaGF2ZSB0byB0ZXN0IHRvIGZpbmQgc29tZXRoaW5nIHRoYXQgd2lsbCB3b3JrLgorQUNfREVGVU4oW1RZUEVfU09DS0xFTl9UXSwKK1sKKyAgIEFDX0NIRUNLX1RZUEUoW3NvY2tsZW5fdF0sICxbCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzb2NrbGVuX3QgZXF1aXZhbGVudF0pCisgICAgICBBQ19DQUNIRV9WQUwoW2dpdF9jdl9zb2NrbGVuX3RfZXF1aXZdLAorICAgICAgWworICAgICAgICAgIyBTeXN0ZW1zIGhhdmUgZWl0aGVyICJzdHJ1Y3Qgc29ja2FkZHIgKiIgb3IKKyAgICAgICAgICMgInZvaWQgKiIgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBnZXRwZWVybmFtZQorICAgICAgICAgZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdj0KKyAgICAgICAgIGZvciBhcmcyIGluICJzdHJ1Y3Qgc29ja2FkZHIiIHZvaWQ7IGRvCisgICAgICAgICAgICBmb3IgdCBpbiBpbnQgc2l6ZV90IHVuc2lnbmVkIGxvbmcgInVuc2lnbmVkIGxvbmciOyBkbworICAgICAgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbCisgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisgICAgICAgICAgICAgICAgICBpbnQgZ2V0cGVlcm5hbWUgKGludCwgJGFyZzIgKiwgJHQgKik7CisgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgICR0IGxlbjsKKyAgICAgICAgICAgICAgICAgIGdldHBlZXJuYW1lKDAsMCwmbGVuKTsKKyAgICAgICAgICAgICAgIF0pXSxbCisgICAgICAgICAgICAgICAgICBnaXRfY3Zfc29ja2xlbl90X2VxdWl2PSIkdCIKKyAgICAgICAgICAgICAgICAgIGJyZWFrIDIKKyAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICBkb25lCisgICAgICAgICBkb25lCisKKyAgICAgICAgIGlmIHRlc3QgIngkZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdiIgPSB4OyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIGEgdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90XSkKKyAgICAgICAgIGZpCisgICAgICBdKQorICAgICAgQUNfTVNHX1JFU1VMVCgkZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdikKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChzb2NrbGVuX3QsICRnaXRfY3Zfc29ja2xlbl90X2VxdWl2LAorCQkJW3R5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdCBpZiBub3QgZGVmaW5lZF0pXSwKKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCitdKQpkaWZmIC0tZ2l0IGEvYWR2aWNlLmMgYi9hZHZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGZiZDRhCi0tLSAvZGV2L251bGwKKysrIGIvYWR2aWNlLmMKQEAgLTAsMCArMSw5NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBhZHZpY2VfcHVzaF9ub25mYXN0Zm9yd2FyZCA9IDE7CitpbnQgYWR2aWNlX3B1c2hfbm9uX2ZmX2N1cnJlbnQgPSAxOworaW50IGFkdmljZV9wdXNoX25vbl9mZl9kZWZhdWx0ID0gMTsKK2ludCBhZHZpY2VfcHVzaF9ub25fZmZfbWF0Y2hpbmcgPSAxOworaW50IGFkdmljZV9zdGF0dXNfaGludHMgPSAxOworaW50IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlID0gMTsKK2ludCBhZHZpY2VfcmVzb2x2ZV9jb25mbGljdCA9IDE7CitpbnQgYWR2aWNlX2ltcGxpY2l0X2lkZW50aXR5ID0gMTsKK2ludCBhZHZpY2VfZGV0YWNoZWRfaGVhZCA9IDE7CisKK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50ICpwcmVmZXJlbmNlOworfSBhZHZpY2VfY29uZmlnW10gPSB7CisJeyAicHVzaG5vbmZhc3Rmb3J3YXJkIiwgJmFkdmljZV9wdXNoX25vbmZhc3Rmb3J3YXJkIH0sCisJeyAicHVzaG5vbmZmY3VycmVudCIsICZhZHZpY2VfcHVzaF9ub25fZmZfY3VycmVudCB9LAorCXsgInB1c2hub25mZmRlZmF1bHQiLCAmYWR2aWNlX3B1c2hfbm9uX2ZmX2RlZmF1bHQgfSwKKwl7ICJwdXNobm9uZmZtYXRjaGluZyIsICZhZHZpY2VfcHVzaF9ub25fZmZfbWF0Y2hpbmcgfSwKKwl7ICJzdGF0dXNoaW50cyIsICZhZHZpY2Vfc3RhdHVzX2hpbnRzIH0sCisJeyAiY29tbWl0YmVmb3JlbWVyZ2UiLCAmYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UgfSwKKwl7ICJyZXNvbHZlY29uZmxpY3QiLCAmYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QgfSwKKwl7ICJpbXBsaWNpdGlkZW50aXR5IiwgJmFkdmljZV9pbXBsaWNpdF9pZGVudGl0eSB9LAorCXsgImRldGFjaGVkaGVhZCIsICZhZHZpY2VfZGV0YWNoZWRfaGVhZCB9LAorfTsKKwordm9pZCBhZHZpc2UoY29uc3QgY2hhciAqYWR2aWNlLCAuLi4pCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IHBhcmFtczsKKwljb25zdCBjaGFyICpjcCwgKm5wOworCisJdmFfc3RhcnQocGFyYW1zLCBhZHZpY2UpOworCXN0cmJ1Zl92YWRkZigmYnVmLCBhZHZpY2UsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisKKwlmb3IgKGNwID0gYnVmLmJ1ZjsgKmNwOyBjcCA9IG5wKSB7CisJCW5wID0gc3RyY2hybnVsKGNwLCAnXG4nKTsKKwkJZnByaW50ZihzdGRlcnIsCV8oImhpbnQ6ICUuKnNcbiIpLCAoaW50KShucCAtIGNwKSwgY3ApOworCQlpZiAoKm5wKQorCQkJbnArKzsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK2ludCBnaXRfZGVmYXVsdF9hZHZpY2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAqayA9IHNraXBfcHJlZml4KHZhciwgImFkdmljZS4iKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkdmljZV9jb25maWcpOyBpKyspIHsKKwkJaWYgKHN0cmNtcChrLCBhZHZpY2VfY29uZmlnW2ldLm5hbWUpKQorCQkJY29udGludWU7CisJCSphZHZpY2VfY29uZmlnW2ldLnByZWZlcmVuY2UgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZXJyb3JfcmVzb2x2ZV9jb25mbGljdChjb25zdCBjaGFyICptZSkKK3sKKwllcnJvcigiJyVzJyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iLCBtZSk7CisJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KQorCQkvKgorCQkgKiBNZXNzYWdlIHVzZWQgYm90aCB3aGVuICdnaXQgY29tbWl0JyBmYWlscyBhbmQgd2hlbgorCQkgKiBvdGhlciBjb21tYW5kcyBkb2luZyBhIG1lcmdlIGRvLgorCQkgKi8KKwkJYWR2aXNlKF8oIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsXG4iCisJCQkgImFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nIGFzXG4iCisJCQkgImFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdCxcbiIKKwkJCSAib3IgdXNlICdnaXQgY29tbWl0IC1hJy4iKSk7CisJcmV0dXJuIC0xOworfQorCit2b2lkIE5PUkVUVVJOIGRpZV9yZXNvbHZlX2NvbmZsaWN0KGNvbnN0IGNoYXIgKm1lKQoreworCWVycm9yX3Jlc29sdmVfY29uZmxpY3QobWUpOworCWRpZSgiRXhpdGluZyBiZWNhdXNlIG9mIGFuIHVucmVzb2x2ZWQgY29uZmxpY3QuIik7Cit9CisKK3ZvaWQgZGV0YWNoX2FkdmljZShjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwljb25zdCBjaGFyIGZtdFtdID0KKwkiTm90ZTogY2hlY2tpbmcgb3V0ICclcycuXG5cbiIKKwkiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisJImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKwkic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHBlcmZvcm1pbmcgYW5vdGhlciBjaGVja291dC5cblxuIgorCSJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKwkiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZTpcblxuIgorCSIgIGdpdCBjaGVja291dCAtYiBuZXdfYnJhbmNoX25hbWVcblxuIjsKKworCWZwcmludGYoc3RkZXJyLCBmbXQsIG5ld19uYW1lKTsKK30KZGlmZiAtLWdpdCBhL2FkdmljZS5oIGIvYWR2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNjZGJiZgotLS0gL2Rldi9udWxsCisrKyBiL2FkdmljZS5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgQURWSUNFX0gKKyNkZWZpbmUgQURWSUNFX0gKKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorCitleHRlcm4gaW50IGFkdmljZV9wdXNoX25vbmZhc3Rmb3J3YXJkOworZXh0ZXJuIGludCBhZHZpY2VfcHVzaF9ub25fZmZfY3VycmVudDsKK2V4dGVybiBpbnQgYWR2aWNlX3B1c2hfbm9uX2ZmX2RlZmF1bHQ7CitleHRlcm4gaW50IGFkdmljZV9wdXNoX25vbl9mZl9tYXRjaGluZzsKK2V4dGVybiBpbnQgYWR2aWNlX3N0YXR1c19oaW50czsKK2V4dGVybiBpbnQgYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2U7CitleHRlcm4gaW50IGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0OworZXh0ZXJuIGludCBhZHZpY2VfaW1wbGljaXRfaWRlbnRpdHk7CitleHRlcm4gaW50IGFkdmljZV9kZXRhY2hlZF9oZWFkOworCitpbnQgZ2l0X2RlZmF1bHRfYWR2aWNlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgYWR2aXNlKGNvbnN0IGNoYXIgKmFkdmljZSwgLi4uKTsKK2ludCBlcnJvcl9yZXNvbHZlX2NvbmZsaWN0KGNvbnN0IGNoYXIgKm1lKTsKK2V4dGVybiB2b2lkIE5PUkVUVVJOIGRpZV9yZXNvbHZlX2NvbmZsaWN0KGNvbnN0IGNoYXIgKm1lKTsKK3ZvaWQgZGV0YWNoX2FkdmljZShjb25zdCBjaGFyICpuZXdfbmFtZSk7CisKKyNlbmRpZiAvKiBBRFZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYWxpYXMuYyBiL2FsaWFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI5ZjA4YgotLS0gL2Rldi9udWxsCisrKyBiL2FsaWFzLmMKQEAgLTAsMCArMSw4NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICphbGlhc19rZXk7CitzdGF0aWMgY2hhciAqYWxpYXNfdmFsOworCitzdGF0aWMgaW50IGFsaWFzX2xvb2t1cF9jYihjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlpZiAoIXByZWZpeGNtcChrLCAiYWxpYXMuIikgJiYgIXN0cmNtcChrKzYsIGFsaWFzX2tleSkpIHsKKwkJaWYgKCF2KQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGspOworCQlhbGlhc192YWwgPSB4c3RyZHVwKHYpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2NoYXIgKmFsaWFzX2xvb2t1cChjb25zdCBjaGFyICphbGlhcykKK3sKKwlhbGlhc19rZXkgPSBhbGlhczsKKwlhbGlhc192YWwgPSBOVUxMOworCWdpdF9jb25maWcoYWxpYXNfbG9va3VwX2NiLCBOVUxMKTsKKwlyZXR1cm4gYWxpYXNfdmFsOworfQorCisjZGVmaW5lIFNQTElUX0NNRExJTkVfQkFEX0VORElORyAxCisjZGVmaW5lIFNQTElUX0NNRExJTkVfVU5DTE9TRURfUVVPVEUgMgorc3RhdGljIGNvbnN0IGNoYXIgKnNwbGl0X2NtZGxpbmVfZXJyb3JzW10gPSB7CisJImNtZGxpbmUgZW5kcyB3aXRoIFxcIiwKKwkidW5jbG9zZWQgcXVvdGUiCit9OworCitpbnQgc3BsaXRfY21kbGluZShjaGFyICpjbWRsaW5lLCBjb25zdCBjaGFyICoqKmFyZ3YpCit7CisJaW50IHNyYywgZHN0LCBjb3VudCA9IDAsIHNpemUgPSAxNjsKKwljaGFyIHF1b3RlZCA9IDA7CisKKwkqYXJndiA9IHhtYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiBzaXplKTsKKworCS8qIHNwbGl0IGFsaWFzX3N0cmluZyAqLworCSgqYXJndilbY291bnQrK10gPSBjbWRsaW5lOworCWZvciAoc3JjID0gZHN0ID0gMDsgY21kbGluZVtzcmNdOykgeworCQljaGFyIGMgPSBjbWRsaW5lW3NyY107CisJCWlmICghcXVvdGVkICYmIGlzc3BhY2UoYykpIHsKKwkJCWNtZGxpbmVbZHN0KytdID0gMDsKKwkJCXdoaWxlIChjbWRsaW5lWysrc3JjXQorCQkJCQkmJiBpc3NwYWNlKGNtZGxpbmVbc3JjXSkpCisJCQkJOyAvKiBza2lwICovCisJCQlBTExPQ19HUk9XKCphcmd2LCBjb3VudCsxLCBzaXplKTsKKwkJCSgqYXJndilbY291bnQrK10gPSBjbWRsaW5lICsgZHN0OworCQl9IGVsc2UgaWYgKCFxdW90ZWQgJiYgKGMgPT0gJ1wnJyB8fCBjID09ICciJykpIHsKKwkJCXF1b3RlZCA9IGM7CisJCQlzcmMrKzsKKwkJfSBlbHNlIGlmIChjID09IHF1b3RlZCkgeworCQkJcXVvdGVkID0gMDsKKwkJCXNyYysrOworCQl9IGVsc2UgeworCQkJaWYgKGMgPT0gJ1xcJyAmJiBxdW90ZWQgIT0gJ1wnJykgeworCQkJCXNyYysrOworCQkJCWMgPSBjbWRsaW5lW3NyY107CisJCQkJaWYgKCFjKSB7CisJCQkJCWZyZWUoKmFyZ3YpOworCQkJCQkqYXJndiA9IE5VTEw7CisJCQkJCXJldHVybiAtU1BMSVRfQ01ETElORV9CQURfRU5ESU5HOworCQkJCX0KKwkJCX0KKwkJCWNtZGxpbmVbZHN0KytdID0gYzsKKwkJCXNyYysrOworCQl9CisJfQorCisJY21kbGluZVtkc3RdID0gMDsKKworCWlmIChxdW90ZWQpIHsKKwkJZnJlZSgqYXJndik7CisJCSphcmd2ID0gTlVMTDsKKwkJcmV0dXJuIC1TUExJVF9DTURMSU5FX1VOQ0xPU0VEX1FVT1RFOworCX0KKworCUFMTE9DX0dST1coKmFyZ3YsIGNvdW50KzEsIHNpemUpOworCSgqYXJndilbY291bnRdID0gTlVMTDsKKworCXJldHVybiBjb3VudDsKK30KKworY29uc3QgY2hhciAqc3BsaXRfY21kbGluZV9zdHJlcnJvcihpbnQgc3BsaXRfY21kbGluZV9lcnJubykgeworCXJldHVybiBzcGxpdF9jbWRsaW5lX2Vycm9yc1stc3BsaXRfY21kbGluZV9lcnJuby0xXTsKK30KZGlmZiAtLWdpdCBhL2FsbG9jLmMgYi9hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYWU1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9hbGxvYy5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBhbGxvYy5jICAtIHNwZWNpYWxpemVkIGFsbG9jYXRvciBmb3IgaW50ZXJuYWwgb2JqZWN0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoZSBzdGFuZGFyZCBtYWxsb2MvZnJlZSB3YXN0ZXMgdG9vIG11Y2ggc3BhY2UgZm9yIG9iamVjdHMsIHBhcnRseSBiZWNhdXNlCisgKiBpdCBtYWludGFpbnMgYWxsIHRoZSBhbGxvY2F0aW9uIGluZnJhc3RydWN0dXJlICh3aGljaCBpc24ndCBuZWVkZWQsIHNpbmNlCisgKiB3ZSBuZXZlciBmcmVlIGFuIG9iamVjdCBkZXNjcmlwdG9yIGFueXdheSksIGJ1dCBldmVuIG1vcmUgYmVjYXVzZSBpdCBlbmRzCisgKiB1cCB3aXRoIG1heGltYWwgYWxpZ25tZW50IGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IHdoYXQgdGhlIG9iamVjdCBhbGlnbm1lbnQKKyAqIGZvciB0aGUgbmV3IGFsbG9jYXRpb24gaXMuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisKKyNkZWZpbmUgQkxPQ0tJTkcgMTAyNAorCisjZGVmaW5lIERFRklORV9BTExPQ0FUT1IobmFtZSwgdHlwZSkJCQkJXAorc3RhdGljIHVuc2lnbmVkIGludCBuYW1lIyNfYWxsb2NzOwkJCQlcCit2b2lkICphbGxvY18jI25hbWUjI19ub2RlKHZvaWQpCQkJCQlcCit7CQkJCQkJCQlcCisJc3RhdGljIGludCBucjsJCQkJCQlcCisJc3RhdGljIHR5cGUgKmJsb2NrOwkJCQkJXAorCXZvaWQgKnJldDsJCQkJCQlcCisJCQkJCQkJCVwKKwlpZiAoIW5yKSB7CQkJCQkJXAorCQluciA9IEJMT0NLSU5HOwkJCQkJXAorCQlibG9jayA9IHhtYWxsb2MoQkxPQ0tJTkcgKiBzaXplb2YodHlwZSkpOwlcCisJfQkJCQkJCQlcCisJbnItLTsJCQkJCQkJXAorCW5hbWUjI19hbGxvY3MrKzsJCQkJCVwKKwlyZXQgPSBibG9jaysrOwkJCQkJCVwKKwltZW1zZXQocmV0LCAwLCBzaXplb2YodHlwZSkpOwkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQlcCit9CisKK3VuaW9uIGFueV9vYmplY3QgeworCXN0cnVjdCBvYmplY3Qgb2JqZWN0OworCXN0cnVjdCBibG9iIGJsb2I7CisJc3RydWN0IHRyZWUgdHJlZTsKKwlzdHJ1Y3QgY29tbWl0IGNvbW1pdDsKKwlzdHJ1Y3QgdGFnIHRhZzsKK307CisKK0RFRklORV9BTExPQ0FUT1IoYmxvYiwgc3RydWN0IGJsb2IpCitERUZJTkVfQUxMT0NBVE9SKHRyZWUsIHN0cnVjdCB0cmVlKQorREVGSU5FX0FMTE9DQVRPUihjb21taXQsIHN0cnVjdCBjb21taXQpCitERUZJTkVfQUxMT0NBVE9SKHRhZywgc3RydWN0IHRhZykKK0RFRklORV9BTExPQ0FUT1Iob2JqZWN0LCB1bmlvbiBhbnlfb2JqZWN0KQorCitzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGNvdW50LCBzaXplX3Qgc2l6ZSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiUxMHM6ICU4dSAoJSJQUkl1TUFYIiBrQilcbiIsCisJCQluYW1lLCBjb3VudCwgKHVpbnRtYXhfdCkgc2l6ZSk7Cit9CisKKyNkZWZpbmUgUkVQT1JUKG5hbWUpCVwKKyAgICByZXBvcnQoI25hbWUsIG5hbWUjI19hbGxvY3MsIG5hbWUjI19hbGxvY3Mqc2l6ZW9mKHN0cnVjdCBuYW1lKSA+PiAxMCkKKwordm9pZCBhbGxvY19yZXBvcnQodm9pZCkKK3sKKwlSRVBPUlQoYmxvYik7CisJUkVQT1JUKHRyZWUpOworCVJFUE9SVChjb21taXQpOworCVJFUE9SVCh0YWcpOworfQpkaWZmIC0tZ2l0IGEvYXJjaGl2ZS10YXIuYyBiL2FyY2hpdmUtdGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhM2YyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2hpdmUtdGFyLmMKQEAgLTAsMCArMSw0NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUmVuZSBTY2hhcmZlCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRhci5oIgorI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCisjZGVmaW5lIFJFQ09SRFNJWkUJKDUxMikKKyNkZWZpbmUgQkxPQ0tTSVpFCShSRUNPUkRTSVpFICogMjApCisKK3N0YXRpYyBjaGFyIGJsb2NrW0JMT0NLU0laRV07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisKK3N0YXRpYyBpbnQgdGFyX3VtYXNrID0gMDAyOworCitzdGF0aWMgaW50IHdyaXRlX3Rhcl9maWx0ZXJfYXJjaGl2ZShjb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKmFyLAorCQkJCSAgICBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncyk7CisKKy8qIHdyaXRlcyBvdXQgdGhlIHdob2xlIGJsb2NrLCBidXQgb25seSBpZiBpdCBpcyBmdWxsICovCitzdGF0aWMgdm9pZCB3cml0ZV9pZl9uZWVkZWQodm9pZCkKK3sKKwlpZiAob2Zmc2V0ID09IEJMT0NLU0laRSkgeworCQl3cml0ZV9vcl9kaWUoMSwgYmxvY2ssIEJMT0NLU0laRSk7CisJCW9mZnNldCA9IDA7CisJfQorfQorCisvKgorICogcXVldWVzIHVwIHdyaXRlcywgc28gdGhhdCBhbGwgb3VyIHdyaXRlKDIpIGNhbGxzIHdyaXRlIGV4YWN0bHkgb25lCisgKiBmdWxsIGJsb2NrOyBwYWRzIHdyaXRlcyB0byBSRUNPUkRTSVpFCisgKi8KK3N0YXRpYyB2b2lkIGRvX3dyaXRlX2Jsb2NrZWQoY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWNvbnN0IGNoYXIgKmJ1ZiA9IGRhdGE7CisKKwlpZiAob2Zmc2V0KSB7CisJCXVuc2lnbmVkIGxvbmcgY2h1bmsgPSBCTE9DS1NJWkUgLSBvZmZzZXQ7CisJCWlmIChzaXplIDwgY2h1bmspCisJCQljaHVuayA9IHNpemU7CisJCW1lbWNweShibG9jayArIG9mZnNldCwgYnVmLCBjaHVuayk7CisJCXNpemUgLT0gY2h1bms7CisJCW9mZnNldCArPSBjaHVuazsKKwkJYnVmICs9IGNodW5rOworCQl3cml0ZV9pZl9uZWVkZWQoKTsKKwl9CisJd2hpbGUgKHNpemUgPj0gQkxPQ0tTSVpFKSB7CisJCXdyaXRlX29yX2RpZSgxLCBidWYsIEJMT0NLU0laRSk7CisJCXNpemUgLT0gQkxPQ0tTSVpFOworCQlidWYgKz0gQkxPQ0tTSVpFOworCX0KKwlpZiAoc2l6ZSkgeworCQltZW1jcHkoYmxvY2sgKyBvZmZzZXQsIGJ1Ziwgc2l6ZSk7CisJCW9mZnNldCArPSBzaXplOworCX0KK30KKworc3RhdGljIHZvaWQgZmluaXNoX3JlY29yZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGFpbDsKKwl0YWlsID0gb2Zmc2V0ICUgUkVDT1JEU0laRTsKKwlpZiAodGFpbCkgIHsKKwkJbWVtc2V0KGJsb2NrICsgb2Zmc2V0LCAwLCBSRUNPUkRTSVpFIC0gdGFpbCk7CisJCW9mZnNldCArPSBSRUNPUkRTSVpFIC0gdGFpbDsKKwl9CisJd3JpdGVfaWZfbmVlZGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2Jsb2NrZWQoY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWRvX3dyaXRlX2Jsb2NrZWQoZGF0YSwgc2l6ZSk7CisJZmluaXNoX3JlY29yZCgpOworfQorCisvKgorICogVGhlIGVuZCBvZiB0YXIgYXJjaGl2ZXMgaXMgbWFya2VkIGJ5IDIqNTEyIG51bCBieXRlcyBhbmQgYWZ0ZXIgdGhhdAorICogZm9sbG93cyB0aGUgcmVzdCBvZiB0aGUgYmxvY2sgKGlmIGFueSkuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX3RyYWlsZXIodm9pZCkKK3sKKwlpbnQgdGFpbCA9IEJMT0NLU0laRSAtIG9mZnNldDsKKwltZW1zZXQoYmxvY2sgKyBvZmZzZXQsIDAsIHRhaWwpOworCXdyaXRlX29yX2RpZSgxLCBibG9jaywgQkxPQ0tTSVpFKTsKKwlpZiAodGFpbCA8IDIgKiBSRUNPUkRTSVpFKSB7CisJCW1lbXNldChibG9jaywgMCwgb2Zmc2V0KTsKKwkJd3JpdGVfb3JfZGllKDEsIGJsb2NrLCBCTE9DS1NJWkUpOworCX0KK30KKworLyoKKyAqIHF1ZXVlcyB1cCB3cml0ZXMsIHNvIHRoYXQgYWxsIG91ciB3cml0ZSgyKSBjYWxscyB3cml0ZSBleGFjdGx5IG9uZQorICogZnVsbCBibG9jazsgcGFkcyB3cml0ZXMgdG8gUkVDT1JEU0laRQorICovCitzdGF0aWMgaW50IHN0cmVhbV9ibG9ja2VkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGdpdF9pc3RyZWFtICpzdDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzejsKKwljaGFyIGJ1ZltCTE9DS1NJWkVdOworCXNzaXplX3QgcmVhZGxlbjsKKworCXN0ID0gb3Blbl9pc3RyZWFtKHNoYTEsICZ0eXBlLCAmc3osIE5VTEwpOworCWlmICghc3QpCisJCXJldHVybiBlcnJvcigiY2Fubm90IHN0cmVhbSBibG9iICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCWZvciAoOzspIHsKKwkJcmVhZGxlbiA9IHJlYWRfaXN0cmVhbShzdCwgYnVmLCBzaXplb2YoYnVmKSk7CisJCWlmIChyZWFkbGVuIDw9IDApCisJCQlicmVhazsKKwkJZG9fd3JpdGVfYmxvY2tlZChidWYsIHJlYWRsZW4pOworCX0KKwljbG9zZV9pc3RyZWFtKHN0KTsKKwlpZiAoIXJlYWRsZW4pCisJCWZpbmlzaF9yZWNvcmQoKTsKKwlyZXR1cm4gcmVhZGxlbjsKK30KKworLyoKKyAqIHBheCBleHRlbmRlZCBoZWFkZXIgcmVjb3JkcyBoYXZlIHRoZSBmb3JtYXQgIiV1ICVzPSVzXG4iLiAgJXUgY29udGFpbnMKKyAqIHRoZSBzaXplIG9mIHRoZSB3aG9sZSBzdHJpbmcgKGluY2x1ZGluZyB0aGUgJXUpLCB0aGUgZmlyc3QgJXMgaXMgdGhlCisgKiBrZXl3b3JkLCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgdmFsdWUuICBUaGlzIGZ1bmN0aW9uIGNvbnN0cnVjdHMgc3VjaCBhCisgKiBzdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gYSBzdHJ1Y3Qgc3RyYnVmLgorICovCitzdGF0aWMgdm9pZCBzdHJidWZfYXBwZW5kX2V4dF9oZWFkZXIoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmtleXdvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUsIHVuc2lnbmVkIGludCB2YWx1ZWxlbikKK3sKKwlpbnQgbGVuLCB0bXA7CisKKwkvKiAiJXUgJXM9JXNcbiIgKi8KKwlsZW4gPSAxICsgMSArIHN0cmxlbihrZXl3b3JkKSArIDEgKyB2YWx1ZWxlbiArIDE7CisJZm9yICh0bXAgPSBsZW47IHRtcCA+IDk7IHRtcCAvPSAxMCkKKwkJbGVuKys7CisKKwlzdHJidWZfZ3JvdyhzYiwgbGVuKTsKKwlzdHJidWZfYWRkZihzYiwgIiV1ICVzPSIsIGxlbiwga2V5d29yZCk7CisJc3RyYnVmX2FkZChzYiwgdmFsdWUsIHZhbHVlbGVuKTsKKwlzdHJidWZfYWRkY2goc2IsICdcbicpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHVzdGFyX2hlYWRlcl9jaGtzdW0oY29uc3Qgc3RydWN0IHVzdGFyX2hlYWRlciAqaGVhZGVyKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKWhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgY2hrc3VtID0gMDsKKwl3aGlsZSAocCA8IChjb25zdCB1bnNpZ25lZCBjaGFyICopaGVhZGVyLT5jaGtzdW0pCisJCWNoa3N1bSArPSAqcCsrOworCWNoa3N1bSArPSBzaXplb2YoaGVhZGVyLT5jaGtzdW0pICogJyAnOworCXAgKz0gc2l6ZW9mKGhlYWRlci0+Y2hrc3VtKTsKKwl3aGlsZSAocCA8IChjb25zdCB1bnNpZ25lZCBjaGFyICopaGVhZGVyICsgc2l6ZW9mKHN0cnVjdCB1c3Rhcl9oZWFkZXIpKQorCQljaGtzdW0gKz0gKnArKzsKKwlyZXR1cm4gY2hrc3VtOworfQorCitzdGF0aWMgc2l6ZV90IGdldF9wYXRoX3ByZWZpeChjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwgc2l6ZV90IG1heGxlbikKK3sKKwlzaXplX3QgaSA9IHBhdGhsZW47CisJaWYgKGkgPiBtYXhsZW4pCisJCWkgPSBtYXhsZW47CisJZG8geworCQlpLS07CisJfSB3aGlsZSAoaSA+IDAgJiYgcGF0aFtpXSAhPSAnLycpOworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCSAgIHN0cnVjdCB1c3Rhcl9oZWFkZXIgKmhlYWRlciwKKwkJCSAgIHVuc2lnbmVkIGludCBtb2RlLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3ByaW50ZihoZWFkZXItPm1vZGUsICIlMDdvIiwgbW9kZSAmIDA3Nzc3KTsKKwlzcHJpbnRmKGhlYWRlci0+c2l6ZSwgIiUwMTFsbyIsIFNfSVNSRUcobW9kZSkgPyBzaXplIDogMCk7CisJc3ByaW50ZihoZWFkZXItPm10aW1lLCAiJTAxMWxvIiwgKHVuc2lnbmVkIGxvbmcpIGFyZ3MtPnRpbWUpOworCisJc3ByaW50ZihoZWFkZXItPnVpZCwgIiUwN28iLCAwKTsKKwlzcHJpbnRmKGhlYWRlci0+Z2lkLCAiJTA3byIsIDApOworCXN0cmxjcHkoaGVhZGVyLT51bmFtZSwgInJvb3QiLCBzaXplb2YoaGVhZGVyLT51bmFtZSkpOworCXN0cmxjcHkoaGVhZGVyLT5nbmFtZSwgInJvb3QiLCBzaXplb2YoaGVhZGVyLT5nbmFtZSkpOworCXNwcmludGYoaGVhZGVyLT5kZXZtYWpvciwgIiUwN28iLCAwKTsKKwlzcHJpbnRmKGhlYWRlci0+ZGV2bWlub3IsICIlMDdvIiwgMCk7CisKKwltZW1jcHkoaGVhZGVyLT5tYWdpYywgInVzdGFyIiwgNik7CisJbWVtY3B5KGhlYWRlci0+dmVyc2lvbiwgIjAwIiwgMik7CisKKwlzcHJpbnRmKGhlYWRlci0+Y2hrc3VtLCAiJTA3byIsIHVzdGFyX2hlYWRlcl9jaGtzdW0oaGVhZGVyKSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZXh0ZW5kZWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgdXN0YXJfaGVhZGVyIGhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOworCSpoZWFkZXIudHlwZWZsYWcgPSBUWVBFRkxBR19FWFRfSEVBREVSOworCW1vZGUgPSAwMTAwNjY2OworCXNwcmludGYoaGVhZGVyLm5hbWUsICIlcy5wYXhoZWFkZXIiLCBzaGExX3RvX2hleChzaGExKSk7CisJcHJlcGFyZV9oZWFkZXIoYXJncywgJmhlYWRlciwgbW9kZSwgc2l6ZSk7CisJd3JpdGVfYmxvY2tlZCgmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisJd3JpdGVfYmxvY2tlZChidWZmZXIsIHNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX3Rhcl9lbnRyeShzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwKKwkJCSAgIHVuc2lnbmVkIGludCBtb2RlKQoreworCXN0cnVjdCB1c3Rhcl9oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBzdHJidWYgZXh0X2hlYWRlciA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGludCBvbGRfbW9kZSA9IG1vZGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXZvaWQgKmJ1ZmZlcjsKKwlpbnQgZXJyID0gMDsKKworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisKKwlpZiAoU19JU0RJUihtb2RlKSB8fCBTX0lTR0lUTElOSyhtb2RlKSkgeworCQkqaGVhZGVyLnR5cGVmbGFnID0gVFlQRUZMQUdfRElSOworCQltb2RlID0gKG1vZGUgfCAwNzc3KSAmIH50YXJfdW1hc2s7CisJfSBlbHNlIGlmIChTX0lTTE5LKG1vZGUpKSB7CisJCSpoZWFkZXIudHlwZWZsYWcgPSBUWVBFRkxBR19MTks7CisJCW1vZGUgfD0gMDc3NzsKKwl9IGVsc2UgaWYgKFNfSVNSRUcobW9kZSkpIHsKKwkJKmhlYWRlci50eXBlZmxhZyA9IFRZUEVGTEFHX1JFRzsKKwkJbW9kZSA9IChtb2RlIHwgKChtb2RlICYgMDEwMCkgPyAwNzc3IDogMDY2NikpICYgfnRhcl91bWFzazsKKwl9IGVsc2UgeworCQlyZXR1cm4gZXJyb3IoInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiLAorCQkJICAgICBtb2RlLCBzaGExX3RvX2hleChzaGExKSk7CisJfQorCWlmIChwYXRobGVuID4gc2l6ZW9mKGhlYWRlci5uYW1lKSkgeworCQlzaXplX3QgcGxlbiA9IGdldF9wYXRoX3ByZWZpeChwYXRoLCBwYXRobGVuLAorCQkJCQkgICAgICBzaXplb2YoaGVhZGVyLnByZWZpeCkpOworCQlzaXplX3QgcmVzdCA9IHBhdGhsZW4gLSBwbGVuIC0gMTsKKwkJaWYgKHBsZW4gPiAwICYmIHJlc3QgPD0gc2l6ZW9mKGhlYWRlci5uYW1lKSkgeworCQkJbWVtY3B5KGhlYWRlci5wcmVmaXgsIHBhdGgsIHBsZW4pOworCQkJCW1lbWNweShoZWFkZXIubmFtZSwgcGF0aCArIHBsZW4gKyAxLCByZXN0KTsKKwkJfSBlbHNlIHsKKwkJCXNwcmludGYoaGVhZGVyLm5hbWUsICIlcy5kYXRhIiwKKwkJCQlzaGExX3RvX2hleChzaGExKSk7CisJCQlzdHJidWZfYXBwZW5kX2V4dF9oZWFkZXIoJmV4dF9oZWFkZXIsICJwYXRoIiwKKwkJCQkJCSBwYXRoLCBwYXRobGVuKTsKKwkJfQorCX0gZWxzZQorCQltZW1jcHkoaGVhZGVyLm5hbWUsIHBhdGgsIHBhdGhsZW4pOworCisJaWYgKFNfSVNSRUcobW9kZSkgJiYgIWFyZ3MtPmNvbnZlcnQgJiYKKwkgICAgc2hhMV9vYmplY3RfaW5mbyhzaGExLCAmc2l6ZSkgPT0gT0JKX0JMT0IgJiYKKwkgICAgc2l6ZSA+IGJpZ19maWxlX3RocmVzaG9sZCkKKwkJYnVmZmVyID0gTlVMTDsKKwllbHNlIGlmIChTX0lTTE5LKG1vZGUpIHx8IFNfSVNSRUcobW9kZSkpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQlidWZmZXIgPSBzaGExX2ZpbGVfdG9fYXJjaGl2ZShhcmdzLCBwYXRoLCBzaGExLCBvbGRfbW9kZSwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFidWZmZXIpCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0gZWxzZSB7CisJCWJ1ZmZlciA9IE5VTEw7CisJCXNpemUgPSAwOworCX0KKworCWlmIChTX0lTTE5LKG1vZGUpKSB7CisJCWlmIChzaXplID4gc2l6ZW9mKGhlYWRlci5saW5rbmFtZSkpIHsKKwkJCXNwcmludGYoaGVhZGVyLmxpbmtuYW1lLCAic2VlICVzLnBheGhlYWRlciIsCisJCQkgICAgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCXN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcigmZXh0X2hlYWRlciwgImxpbmtwYXRoIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNpemUpOworCQl9IGVsc2UKKwkJCW1lbWNweShoZWFkZXIubGlua25hbWUsIGJ1ZmZlciwgc2l6ZSk7CisJfQorCisJcHJlcGFyZV9oZWFkZXIoYXJncywgJmhlYWRlciwgbW9kZSwgc2l6ZSk7CisKKwlpZiAoZXh0X2hlYWRlci5sZW4gPiAwKSB7CisJCWVyciA9IHdyaXRlX2V4dGVuZGVkX2hlYWRlcihhcmdzLCBzaGExLCBleHRfaGVhZGVyLmJ1ZiwKKwkJCQkJICAgIGV4dF9oZWFkZXIubGVuKTsKKwkJaWYgKGVycikgeworCQkJZnJlZShidWZmZXIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmZXh0X2hlYWRlcik7CisJd3JpdGVfYmxvY2tlZCgmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisJaWYgKFNfSVNSRUcobW9kZSkgJiYgc2l6ZSA+IDApIHsKKwkJaWYgKGJ1ZmZlcikKKwkJCXdyaXRlX2Jsb2NrZWQoYnVmZmVyLCBzaXplKTsKKwkJZWxzZQorCQkJZXJyID0gc3RyZWFtX2Jsb2NrZWQoc2hhMSk7CisJfQorCWZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyaXRlX2dsb2JhbF9leHRlbmRlZF9oZWFkZXIoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9IGFyZ3MtPmNvbW1pdF9zaGExOworCXN0cnVjdCBzdHJidWYgZXh0X2hlYWRlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCB1c3Rhcl9oZWFkZXIgaGVhZGVyOworCXVuc2lnbmVkIGludCBtb2RlOworCWludCBlcnIgPSAwOworCisJc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyKCZleHRfaGVhZGVyLCAiY29tbWVudCIsIHNoYTFfdG9faGV4KHNoYTEpLCA0MCk7CisJbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKKwkqaGVhZGVyLnR5cGVmbGFnID0gVFlQRUZMQUdfR0xPQkFMX0hFQURFUjsKKwltb2RlID0gMDEwMDY2NjsKKwlzdHJjcHkoaGVhZGVyLm5hbWUsICJwYXhfZ2xvYmFsX2hlYWRlciIpOworCXByZXBhcmVfaGVhZGVyKGFyZ3MsICZoZWFkZXIsIG1vZGUsIGV4dF9oZWFkZXIubGVuKTsKKwl3cml0ZV9ibG9ja2VkKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKKwl3cml0ZV9ibG9ja2VkKGV4dF9oZWFkZXIuYnVmLCBleHRfaGVhZGVyLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJmV4dF9oZWFkZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXJjaGl2ZXIgKip0YXJfZmlsdGVyczsKK3N0YXRpYyBpbnQgbnJfdGFyX2ZpbHRlcnM7CitzdGF0aWMgaW50IGFsbG9jX3Rhcl9maWx0ZXJzOworCitzdGF0aWMgc3RydWN0IGFyY2hpdmVyICpmaW5kX3Rhcl9maWx0ZXIoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdGFyX2ZpbHRlcnM7IGkrKykgeworCQlzdHJ1Y3QgYXJjaGl2ZXIgKmFyID0gdGFyX2ZpbHRlcnNbaV07CisJCWlmICghc3RybmNtcChhci0+bmFtZSwgbmFtZSwgbGVuKSAmJiAhYXItPm5hbWVbbGVuXSkKKwkJCXJldHVybiBhcjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdGFyX2ZpbHRlcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXJjaGl2ZXIgKmFyOworCWNvbnN0IGNoYXIgKmRvdDsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnR5cGU7CisJaW50IG5hbWVsZW47CisKKwlpZiAocHJlZml4Y21wKHZhciwgInRhci4iKSkKKwkJcmV0dXJuIDA7CisJZG90ID0gc3RycmNocih2YXIsICcuJyk7CisJaWYgKGRvdCA9PSB2YXIgKyA5KQorCQlyZXR1cm4gMDsKKworCW5hbWUgPSB2YXIgKyA0OworCW5hbWVsZW4gPSBkb3QgLSBuYW1lOworCXR5cGUgPSBkb3QgKyAxOworCisJYXIgPSBmaW5kX3Rhcl9maWx0ZXIobmFtZSwgbmFtZWxlbik7CisJaWYgKCFhcikgeworCQlhciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCphcikpOworCQlhci0+bmFtZSA9IHhtZW1kdXB6KG5hbWUsIG5hbWVsZW4pOworCQlhci0+d3JpdGVfYXJjaGl2ZSA9IHdyaXRlX3Rhcl9maWx0ZXJfYXJjaGl2ZTsKKwkJYXItPmZsYWdzID0gQVJDSElWRVJfV0FOVF9DT01QUkVTU0lPTl9MRVZFTFM7CisJCUFMTE9DX0dST1codGFyX2ZpbHRlcnMsIG5yX3Rhcl9maWx0ZXJzICsgMSwgYWxsb2NfdGFyX2ZpbHRlcnMpOworCQl0YXJfZmlsdGVyc1tucl90YXJfZmlsdGVycysrXSA9IGFyOworCX0KKworCWlmICghc3RyY21wKHR5cGUsICJjb21tYW5kIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlmcmVlKGFyLT5kYXRhKTsKKwkJYXItPmRhdGEgPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHR5cGUsICJyZW1vdGUiKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJYXItPmZsYWdzIHw9IEFSQ0hJVkVSX1JFTU9URTsKKwkJZWxzZQorCQkJYXItPmZsYWdzICY9IH5BUkNISVZFUl9SRU1PVEU7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF90YXJfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgInRhci51bWFzayIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY21wKHZhbHVlLCAidXNlciIpKSB7CisJCQl0YXJfdW1hc2sgPSB1bWFzaygwKTsKKwkJCXVtYXNrKHRhcl91bWFzayk7CisJCX0gZWxzZSB7CisJCQl0YXJfdW1hc2sgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gdGFyX2ZpbHRlcl9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IHdyaXRlX3Rhcl9hcmNoaXZlKGNvbnN0IHN0cnVjdCBhcmNoaXZlciAqYXIsCisJCQkgICAgIHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzKQoreworCWludCBlcnIgPSAwOworCisJaWYgKGFyZ3MtPmNvbW1pdF9zaGExKQorCQllcnIgPSB3cml0ZV9nbG9iYWxfZXh0ZW5kZWRfaGVhZGVyKGFyZ3MpOworCWlmICghZXJyKQorCQllcnIgPSB3cml0ZV9hcmNoaXZlX2VudHJpZXMoYXJncywgd3JpdGVfdGFyX2VudHJ5KTsKKwlpZiAoIWVycikKKwkJd3JpdGVfdHJhaWxlcigpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfdGFyX2ZpbHRlcl9hcmNoaXZlKGNvbnN0IHN0cnVjdCBhcmNoaXZlciAqYXIsCisJCQkJICAgIHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzKQoreworCXN0cnVjdCBzdHJidWYgY21kID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZmlsdGVyOworCWNvbnN0IGNoYXIgKmFyZ3ZbMl07CisJaW50IHI7CisKKwlpZiAoIWFyLT5kYXRhKQorCQlkaWUoIkJVRzogdGFyLWZpbHRlciBhcmNoaXZlciBjYWxsZWQgd2l0aCBubyBmaWx0ZXIgZGVmaW5lZCIpOworCisJc3RyYnVmX2FkZHN0cigmY21kLCBhci0+ZGF0YSk7CisJaWYgKGFyZ3MtPmNvbXByZXNzaW9uX2xldmVsID49IDApCisJCXN0cmJ1Zl9hZGRmKCZjbWQsICIgLSVkIiwgYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwpOworCisJbWVtc2V0KCZmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTsKKwlhcmd2WzBdID0gY21kLmJ1ZjsKKwlhcmd2WzFdID0gTlVMTDsKKwlmaWx0ZXIuYXJndiA9IGFyZ3Y7CisJZmlsdGVyLnVzZV9zaGVsbCA9IDE7CisJZmlsdGVyLmluID0gLTE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmZmlsdGVyKSA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIiwgYXJndlswXSk7CisJY2xvc2UoMSk7CisJaWYgKGR1cDIoZmlsdGVyLmluLCAxKSA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IiKTsKKwljbG9zZShmaWx0ZXIuaW4pOworCisJciA9IHdyaXRlX3Rhcl9hcmNoaXZlKGFyLCBhcmdzKTsKKworCWNsb3NlKDEpOworCWlmIChmaW5pc2hfY29tbWFuZCgmZmlsdGVyKSAhPSAwKQorCQlkaWUoIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIiwgYXJndlswXSk7CisKKwlzdHJidWZfcmVsZWFzZSgmY21kKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHN0cnVjdCBhcmNoaXZlciB0YXJfYXJjaGl2ZXIgPSB7CisJInRhciIsCisJd3JpdGVfdGFyX2FyY2hpdmUsCisJQVJDSElWRVJfUkVNT1RFCit9OworCit2b2lkIGluaXRfdGFyX2FyY2hpdmVyKHZvaWQpCit7CisJaW50IGk7CisJcmVnaXN0ZXJfYXJjaGl2ZXIoJnRhcl9hcmNoaXZlcik7CisKKwl0YXJfZmlsdGVyX2NvbmZpZygidGFyLnRnei5jb21tYW5kIiwgImd6aXAgLWNuIiwgTlVMTCk7CisJdGFyX2ZpbHRlcl9jb25maWcoInRhci50Z3oucmVtb3RlIiwgInRydWUiLCBOVUxMKTsKKwl0YXJfZmlsdGVyX2NvbmZpZygidGFyLnRhci5nei5jb21tYW5kIiwgImd6aXAgLWNuIiwgTlVMTCk7CisJdGFyX2ZpbHRlcl9jb25maWcoInRhci50YXIuZ3oucmVtb3RlIiwgInRydWUiLCBOVUxMKTsKKwlnaXRfY29uZmlnKGdpdF90YXJfY29uZmlnLCBOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdGFyX2ZpbHRlcnM7IGkrKykgeworCQkvKiBvbWl0IGFueSBmaWx0ZXJzIHRoYXQgbmV2ZXIgaGFkIGEgY29tbWFuZCBjb25maWd1cmVkICovCisJCWlmICh0YXJfZmlsdGVyc1tpXS0+ZGF0YSkKKwkJCXJlZ2lzdGVyX2FyY2hpdmVyKHRhcl9maWx0ZXJzW2ldKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoaXZlLXppcC5jIGIvYXJjaGl2ZS16aXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWY2NmI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaGl2ZS16aXAuYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBSZW5lIFNjaGFyZmUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZS5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworc3RhdGljIGludCB6aXBfZGF0ZTsKK3N0YXRpYyBpbnQgemlwX3RpbWU7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICp6aXBfZGlyOworc3RhdGljIHVuc2lnbmVkIGludCB6aXBfZGlyX3NpemU7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgemlwX29mZnNldDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgemlwX2Rpcl9vZmZzZXQ7CitzdGF0aWMgdW5zaWduZWQgaW50IHppcF9kaXJfZW50cmllczsKKworI2RlZmluZSBaSVBfRElSRUNUT1JZX01JTl9TSVpFCSgxMDI0ICogMTAyNCkKKyNkZWZpbmUgWklQX1NUUkVBTQkoMSA8PCAgMykKKyNkZWZpbmUgWklQX1VURjgJKDEgPDwgMTEpCisKK3N0cnVjdCB6aXBfbG9jYWxfaGVhZGVyIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzRdOworCXVuc2lnbmVkIGNoYXIgdmVyc2lvblsyXTsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzWzJdOworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3Npb25fbWV0aG9kWzJdOworCXVuc2lnbmVkIGNoYXIgbXRpbWVbMl07CisJdW5zaWduZWQgY2hhciBtZGF0ZVsyXTsKKwl1bnNpZ25lZCBjaGFyIGNyYzMyWzRdOworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3NlZF9zaXplWzRdOworCXVuc2lnbmVkIGNoYXIgc2l6ZVs0XTsKKwl1bnNpZ25lZCBjaGFyIGZpbGVuYW1lX2xlbmd0aFsyXTsKKwl1bnNpZ25lZCBjaGFyIGV4dHJhX2xlbmd0aFsyXTsKKwl1bnNpZ25lZCBjaGFyIF9lbmRbMV07Cit9OworCitzdHJ1Y3QgemlwX2RhdGFfZGVzYyB7CisJdW5zaWduZWQgY2hhciBtYWdpY1s0XTsKKwl1bnNpZ25lZCBjaGFyIGNyYzMyWzRdOworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3NlZF9zaXplWzRdOworCXVuc2lnbmVkIGNoYXIgc2l6ZVs0XTsKKwl1bnNpZ25lZCBjaGFyIF9lbmRbMV07Cit9OworCitzdHJ1Y3QgemlwX2Rpcl9oZWFkZXIgeworCXVuc2lnbmVkIGNoYXIgbWFnaWNbNF07CisJdW5zaWduZWQgY2hhciBjcmVhdG9yX3ZlcnNpb25bMl07CisJdW5zaWduZWQgY2hhciB2ZXJzaW9uWzJdOworCXVuc2lnbmVkIGNoYXIgZmxhZ3NbMl07CisJdW5zaWduZWQgY2hhciBjb21wcmVzc2lvbl9tZXRob2RbMl07CisJdW5zaWduZWQgY2hhciBtdGltZVsyXTsKKwl1bnNpZ25lZCBjaGFyIG1kYXRlWzJdOworCXVuc2lnbmVkIGNoYXIgY3JjMzJbNF07CisJdW5zaWduZWQgY2hhciBjb21wcmVzc2VkX3NpemVbNF07CisJdW5zaWduZWQgY2hhciBzaXplWzRdOworCXVuc2lnbmVkIGNoYXIgZmlsZW5hbWVfbGVuZ3RoWzJdOworCXVuc2lnbmVkIGNoYXIgZXh0cmFfbGVuZ3RoWzJdOworCXVuc2lnbmVkIGNoYXIgY29tbWVudF9sZW5ndGhbMl07CisJdW5zaWduZWQgY2hhciBkaXNrWzJdOworCXVuc2lnbmVkIGNoYXIgYXR0cjFbMl07CisJdW5zaWduZWQgY2hhciBhdHRyMls0XTsKKwl1bnNpZ25lZCBjaGFyIG9mZnNldFs0XTsKKwl1bnNpZ25lZCBjaGFyIF9lbmRbMV07Cit9OworCitzdHJ1Y3QgemlwX2Rpcl90cmFpbGVyIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzRdOworCXVuc2lnbmVkIGNoYXIgZGlza1syXTsKKwl1bnNpZ25lZCBjaGFyIGRpcmVjdG9yeV9zdGFydF9kaXNrWzJdOworCXVuc2lnbmVkIGNoYXIgZW50cmllc19vbl90aGlzX2Rpc2tbMl07CisJdW5zaWduZWQgY2hhciBlbnRyaWVzWzJdOworCXVuc2lnbmVkIGNoYXIgc2l6ZVs0XTsKKwl1bnNpZ25lZCBjaGFyIG9mZnNldFs0XTsKKwl1bnNpZ25lZCBjaGFyIGNvbW1lbnRfbGVuZ3RoWzJdOworCXVuc2lnbmVkIGNoYXIgX2VuZFsxXTsKK307CisKK3N0cnVjdCB6aXBfZXh0cmFfbXRpbWUgeworCXVuc2lnbmVkIGNoYXIgbWFnaWNbMl07CisJdW5zaWduZWQgY2hhciBleHRyYV9zaXplWzJdOworCXVuc2lnbmVkIGNoYXIgZmxhZ3NbMV07CisJdW5zaWduZWQgY2hhciBtdGltZVs0XTsKKwl1bnNpZ25lZCBjaGFyIF9lbmRbMV07Cit9OworCisvKgorICogT24gQVJNLCBwYWRkaW5nIGlzIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdCwgc28gYSBzaW1wbGUKKyAqIHNpemVvZihzdHJ1Y3QgLi4uKSByZXBvcnRzIHR3byBieXRlcyBtb3JlIHRoYW4gdGhlIHBheWxvYWQgc2l6ZQorICogd2UncmUgaW50ZXJlc3RlZCBpbi4KKyAqLworI2RlZmluZSBaSVBfTE9DQUxfSEVBREVSX1NJWkUJb2Zmc2V0b2Yoc3RydWN0IHppcF9sb2NhbF9oZWFkZXIsIF9lbmQpCisjZGVmaW5lIFpJUF9EQVRBX0RFU0NfU0laRQlvZmZzZXRvZihzdHJ1Y3QgemlwX2RhdGFfZGVzYywgX2VuZCkKKyNkZWZpbmUgWklQX0RJUl9IRUFERVJfU0laRQlvZmZzZXRvZihzdHJ1Y3QgemlwX2Rpcl9oZWFkZXIsIF9lbmQpCisjZGVmaW5lIFpJUF9ESVJfVFJBSUxFUl9TSVpFCW9mZnNldG9mKHN0cnVjdCB6aXBfZGlyX3RyYWlsZXIsIF9lbmQpCisjZGVmaW5lIFpJUF9FWFRSQV9NVElNRV9TSVpFCW9mZnNldG9mKHN0cnVjdCB6aXBfZXh0cmFfbXRpbWUsIF9lbmQpCisjZGVmaW5lIFpJUF9FWFRSQV9NVElNRV9QQVlMT0FEX1NJWkUgXAorCShaSVBfRVhUUkFfTVRJTUVfU0laRSAtIG9mZnNldG9mKHN0cnVjdCB6aXBfZXh0cmFfbXRpbWUsIGZsYWdzKSkKKworc3RhdGljIHZvaWQgY29weV9sZTE2KHVuc2lnbmVkIGNoYXIgKmRlc3QsIHVuc2lnbmVkIGludCBuKQoreworCWRlc3RbMF0gPSAweGZmICYgbjsKKwlkZXN0WzFdID0gMHhmZiAmIChuID4+IDAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGUzMih1bnNpZ25lZCBjaGFyICpkZXN0LCB1bnNpZ25lZCBpbnQgbikKK3sKKwlkZXN0WzBdID0gMHhmZiAmIG47CisJZGVzdFsxXSA9IDB4ZmYgJiAobiA+PiAwMTApOworCWRlc3RbMl0gPSAweGZmICYgKG4gPj4gMDIwKTsKKwlkZXN0WzNdID0gMHhmZiAmIChuID4+IDAzMCk7Cit9CisKK3N0YXRpYyB2b2lkICp6bGliX2RlZmxhdGUodm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQlpbnQgY29tcHJlc3Npb25fbGV2ZWwsIHVuc2lnbmVkIGxvbmcgKmNvbXByZXNzZWRfc2l6ZSkKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdW5zaWduZWQgbG9uZyBtYXhzaXplOworCXZvaWQgKmJ1ZmZlcjsKKwlpbnQgcmVzdWx0OworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlnaXRfZGVmbGF0ZV9pbml0KCZzdHJlYW0sIGNvbXByZXNzaW9uX2xldmVsKTsKKwltYXhzaXplID0gZ2l0X2RlZmxhdGVfYm91bmQoJnN0cmVhbSwgc2l6ZSk7CisJYnVmZmVyID0geG1hbGxvYyhtYXhzaXplKTsKKworCXN0cmVhbS5uZXh0X2luID0gZGF0YTsKKwlzdHJlYW0uYXZhaWxfaW4gPSBzaXplOworCXN0cmVhbS5uZXh0X291dCA9IGJ1ZmZlcjsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gbWF4c2l6ZTsKKworCWRvIHsKKwkJcmVzdWx0ID0gZ2l0X2RlZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCX0gd2hpbGUgKHJlc3VsdCA9PSBaX09LKTsKKworCWlmIChyZXN1bHQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCWZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCSpjb21wcmVzc2VkX3NpemUgPSBzdHJlYW0udG90YWxfb3V0OworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfemlwX2RhdGFfZGVzYyh1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJdW5zaWduZWQgbG9uZyBjb21wcmVzc2VkX3NpemUsCisJCQkJdW5zaWduZWQgbG9uZyBjcmMpCit7CisJc3RydWN0IHppcF9kYXRhX2Rlc2MgdHJhaWxlcjsKKworCWNvcHlfbGUzMih0cmFpbGVyLm1hZ2ljLCAweDA4MDc0YjUwKTsKKwljb3B5X2xlMzIodHJhaWxlci5jcmMzMiwgY3JjKTsKKwljb3B5X2xlMzIodHJhaWxlci5jb21wcmVzc2VkX3NpemUsIGNvbXByZXNzZWRfc2l6ZSk7CisJY29weV9sZTMyKHRyYWlsZXIuc2l6ZSwgc2l6ZSk7CisJd3JpdGVfb3JfZGllKDEsICZ0cmFpbGVyLCBaSVBfREFUQV9ERVNDX1NJWkUpOworfQorCitzdGF0aWMgdm9pZCBzZXRfemlwX2Rpcl9kYXRhX2Rlc2Moc3RydWN0IHppcF9kaXJfaGVhZGVyICpoZWFkZXIsCisJCQkJICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICB1bnNpZ25lZCBsb25nIGNvbXByZXNzZWRfc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgY3JjKQoreworCWNvcHlfbGUzMihoZWFkZXItPmNyYzMyLCBjcmMpOworCWNvcHlfbGUzMihoZWFkZXItPmNvbXByZXNzZWRfc2l6ZSwgY29tcHJlc3NlZF9zaXplKTsKKwljb3B5X2xlMzIoaGVhZGVyLT5zaXplLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3ppcF9oZWFkZXJfZGF0YV9kZXNjKHN0cnVjdCB6aXBfbG9jYWxfaGVhZGVyICpoZWFkZXIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGNvbXByZXNzZWRfc2l6ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY3JjKQoreworCWNvcHlfbGUzMihoZWFkZXItPmNyYzMyLCBjcmMpOworCWNvcHlfbGUzMihoZWFkZXItPmNvbXByZXNzZWRfc2l6ZSwgY29tcHJlc3NlZF9zaXplKTsKKwljb3B5X2xlMzIoaGVhZGVyLT5zaXplLCBzaXplKTsKK30KKworc3RhdGljIGludCBoYXNfb25seV9hc2NpaShjb25zdCBjaGFyICpzKQoreworCWZvciAoOzspIHsKKwkJaW50IGMgPSAqcysrOworCQlpZiAoYyA9PSAnXDAnKQorCQkJcmV0dXJuIDE7CisJCWlmICghaXNhc2NpaShjKSkKKwkJCXJldHVybiAwOworCX0KK30KKworI2RlZmluZSBTVFJFQU1fQlVGRkVSX1NJWkUgKDEwMjQgKiAxNikKKworc3RhdGljIGludCB3cml0ZV96aXBfZW50cnkoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4sCisJCQkgICB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgemlwX2xvY2FsX2hlYWRlciBoZWFkZXI7CisJc3RydWN0IHppcF9kaXJfaGVhZGVyIGRpcmVudDsKKwlzdHJ1Y3QgemlwX2V4dHJhX210aW1lIGV4dHJhOworCXVuc2lnbmVkIGxvbmcgYXR0cjI7CisJdW5zaWduZWQgbG9uZyBjb21wcmVzc2VkX3NpemU7CisJdW5zaWduZWQgbG9uZyBjcmM7CisJdW5zaWduZWQgbG9uZyBkaXJlbnRzaXplOworCWludCBtZXRob2Q7CisJdW5zaWduZWQgY2hhciAqb3V0OworCXZvaWQgKmRlZmxhdGVkID0gTlVMTDsKKwl2b2lkICpidWZmZXI7CisJc3RydWN0IGdpdF9pc3RyZWFtICpzdHJlYW0gPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCWNyYyA9IGNyYzMyKDAsIE5VTEwsIDApOworCisJaWYgKCFoYXNfb25seV9hc2NpaShwYXRoKSkgeworCQlpZiAoaXNfdXRmOChwYXRoKSkKKwkJCWZsYWdzIHw9IFpJUF9VVEY4OworCQllbHNlCisJCQl3YXJuaW5nKCJQYXRoIGlzIG5vdCB2YWxpZCBVVEYtODogJXMiLCBwYXRoKTsKKwl9CisKKwlpZiAocGF0aGxlbiA+IDB4ZmZmZikgeworCQlyZXR1cm4gZXJyb3IoInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIiwKKwkJCQkoaW50KXBhdGhsZW4sIHNoYTFfdG9faGV4KHNoYTEpLCBwYXRoKTsKKwl9CisKKwlpZiAoU19JU0RJUihtb2RlKSB8fCBTX0lTR0lUTElOSyhtb2RlKSkgeworCQltZXRob2QgPSAwOworCQlhdHRyMiA9IDE2OworCQlvdXQgPSBOVUxMOworCQlzaXplID0gMDsKKwkJY29tcHJlc3NlZF9zaXplID0gMDsKKwkJYnVmZmVyID0gTlVMTDsKKwkJc2l6ZSA9IDA7CisJfSBlbHNlIGlmIChTX0lTUkVHKG1vZGUpIHx8IFNfSVNMTksobW9kZSkpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCAmc2l6ZSk7CisKKwkJbWV0aG9kID0gMDsKKwkJYXR0cjIgPSBTX0lTTE5LKG1vZGUpID8gKChtb2RlIHwgMDc3NykgPDwgMTYpIDoKKwkJCShtb2RlICYgMDExMSkgPyAoKG1vZGUpIDw8IDE2KSA6IDA7CisJCWlmIChTX0lTUkVHKG1vZGUpICYmIGFyZ3MtPmNvbXByZXNzaW9uX2xldmVsICE9IDAgJiYgc2l6ZSA+IDApCisJCQltZXRob2QgPSA4OworCQljb21wcmVzc2VkX3NpemUgPSBzaXplOworCisJCWlmIChTX0lTUkVHKG1vZGUpICYmIHR5cGUgPT0gT0JKX0JMT0IgJiYgIWFyZ3MtPmNvbnZlcnQgJiYKKwkJICAgIHNpemUgPiBiaWdfZmlsZV90aHJlc2hvbGQpIHsKKwkJCXN0cmVhbSA9IG9wZW5faXN0cmVhbShzaGExLCAmdHlwZSwgJnNpemUsIE5VTEwpOworCQkJaWYgKCFzdHJlYW0pCisJCQkJcmV0dXJuIGVycm9yKCJjYW5ub3Qgc3RyZWFtIGJsb2IgJXMiLAorCQkJCQkgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCWZsYWdzIHw9IFpJUF9TVFJFQU07CisJCQlvdXQgPSBidWZmZXIgPSBOVUxMOworCQl9IGVsc2UgeworCQkJYnVmZmVyID0gc2hhMV9maWxlX3RvX2FyY2hpdmUoYXJncywgcGF0aCwgc2hhMSwgbW9kZSwKKwkJCQkJCSAgICAgICZ0eXBlLCAmc2l6ZSk7CisJCQlpZiAoIWJ1ZmZlcikKKwkJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCByZWFkICVzIiwKKwkJCQkJICAgICBzaGExX3RvX2hleChzaGExKSk7CisJCQljcmMgPSBjcmMzMihjcmMsIGJ1ZmZlciwgc2l6ZSk7CisJCQlvdXQgPSBidWZmZXI7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gZXJyb3IoInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiLCBtb2RlLAorCQkJCXNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisKKwlpZiAoYnVmZmVyICYmIG1ldGhvZCA9PSA4KSB7CisJCWRlZmxhdGVkID0gemxpYl9kZWZsYXRlKGJ1ZmZlciwgc2l6ZSwgYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwsCisJCQkJJmNvbXByZXNzZWRfc2l6ZSk7CisJCWlmIChkZWZsYXRlZCAmJiBjb21wcmVzc2VkX3NpemUgLSA2IDwgc2l6ZSkgeworCQkJLyogWkxJQiAtLT4gcmF3IGNvbXByZXNzZWQgZGF0YSAoc2VlIFJGQyAxOTUwKSAqLworCQkJLyogQ01GIGFuZCBGTEcgLi4uICovCisJCQlvdXQgPSAodW5zaWduZWQgY2hhciAqKWRlZmxhdGVkICsgMjsKKwkJCWNvbXByZXNzZWRfc2l6ZSAtPSA2OwkvKiAuLi4gYW5kIEFETEVSMzIgKi8KKwkJfSBlbHNlIHsKKwkJCW1ldGhvZCA9IDA7CisJCQljb21wcmVzc2VkX3NpemUgPSBzaXplOworCQl9CisJfQorCisJY29weV9sZTE2KGV4dHJhLm1hZ2ljLCAweDU0NTUpOworCWNvcHlfbGUxNihleHRyYS5leHRyYV9zaXplLCBaSVBfRVhUUkFfTVRJTUVfUEFZTE9BRF9TSVpFKTsKKwlleHRyYS5mbGFnc1swXSA9IDE7CS8qIGp1c3QgbXRpbWUgKi8KKwljb3B5X2xlMzIoZXh0cmEubXRpbWUsIGFyZ3MtPnRpbWUpOworCisJLyogbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIGZyZWUgc3BhY2UgaW4gdGhlIGRpY3Rpb25hcnkgKi8KKwlkaXJlbnRzaXplID0gWklQX0RJUl9IRUFERVJfU0laRSArIHBhdGhsZW4gKyBaSVBfRVhUUkFfTVRJTUVfU0laRTsKKwl3aGlsZSAoemlwX2Rpcl9zaXplIDwgemlwX2Rpcl9vZmZzZXQgKyBkaXJlbnRzaXplKSB7CisJCXppcF9kaXJfc2l6ZSArPSBaSVBfRElSRUNUT1JZX01JTl9TSVpFOworCQl6aXBfZGlyID0geHJlYWxsb2MoemlwX2RpciwgemlwX2Rpcl9zaXplKTsKKwl9CisKKwljb3B5X2xlMzIoZGlyZW50Lm1hZ2ljLCAweDAyMDE0YjUwKTsKKwljb3B5X2xlMTYoZGlyZW50LmNyZWF0b3JfdmVyc2lvbiwKKwkJU19JU0xOSyhtb2RlKSB8fCAoU19JU1JFRyhtb2RlKSAmJiAobW9kZSAmIDAxMTEpKSA/IDB4MDMxNyA6IDApOworCWNvcHlfbGUxNihkaXJlbnQudmVyc2lvbiwgMTApOworCWNvcHlfbGUxNihkaXJlbnQuZmxhZ3MsIGZsYWdzKTsKKwljb3B5X2xlMTYoZGlyZW50LmNvbXByZXNzaW9uX21ldGhvZCwgbWV0aG9kKTsKKwljb3B5X2xlMTYoZGlyZW50Lm10aW1lLCB6aXBfdGltZSk7CisJY29weV9sZTE2KGRpcmVudC5tZGF0ZSwgemlwX2RhdGUpOworCXNldF96aXBfZGlyX2RhdGFfZGVzYygmZGlyZW50LCBzaXplLCBjb21wcmVzc2VkX3NpemUsIGNyYyk7CisJY29weV9sZTE2KGRpcmVudC5maWxlbmFtZV9sZW5ndGgsIHBhdGhsZW4pOworCWNvcHlfbGUxNihkaXJlbnQuZXh0cmFfbGVuZ3RoLCBaSVBfRVhUUkFfTVRJTUVfU0laRSk7CisJY29weV9sZTE2KGRpcmVudC5jb21tZW50X2xlbmd0aCwgMCk7CisJY29weV9sZTE2KGRpcmVudC5kaXNrLCAwKTsKKwljb3B5X2xlMTYoZGlyZW50LmF0dHIxLCAwKTsKKwljb3B5X2xlMzIoZGlyZW50LmF0dHIyLCBhdHRyMik7CisJY29weV9sZTMyKGRpcmVudC5vZmZzZXQsIHppcF9vZmZzZXQpOworCisJY29weV9sZTMyKGhlYWRlci5tYWdpYywgMHgwNDAzNGI1MCk7CisJY29weV9sZTE2KGhlYWRlci52ZXJzaW9uLCAxMCk7CisJY29weV9sZTE2KGhlYWRlci5mbGFncywgZmxhZ3MpOworCWNvcHlfbGUxNihoZWFkZXIuY29tcHJlc3Npb25fbWV0aG9kLCBtZXRob2QpOworCWNvcHlfbGUxNihoZWFkZXIubXRpbWUsIHppcF90aW1lKTsKKwljb3B5X2xlMTYoaGVhZGVyLm1kYXRlLCB6aXBfZGF0ZSk7CisJaWYgKGZsYWdzICYgWklQX1NUUkVBTSkKKwkJc2V0X3ppcF9oZWFkZXJfZGF0YV9kZXNjKCZoZWFkZXIsIDAsIDAsIDApOworCWVsc2UKKwkJc2V0X3ppcF9oZWFkZXJfZGF0YV9kZXNjKCZoZWFkZXIsIHNpemUsIGNvbXByZXNzZWRfc2l6ZSwgY3JjKTsKKwljb3B5X2xlMTYoaGVhZGVyLmZpbGVuYW1lX2xlbmd0aCwgcGF0aGxlbik7CisJY29weV9sZTE2KGhlYWRlci5leHRyYV9sZW5ndGgsIFpJUF9FWFRSQV9NVElNRV9TSVpFKTsKKwl3cml0ZV9vcl9kaWUoMSwgJmhlYWRlciwgWklQX0xPQ0FMX0hFQURFUl9TSVpFKTsKKwl6aXBfb2Zmc2V0ICs9IFpJUF9MT0NBTF9IRUFERVJfU0laRTsKKwl3cml0ZV9vcl9kaWUoMSwgcGF0aCwgcGF0aGxlbik7CisJemlwX29mZnNldCArPSBwYXRobGVuOworCXdyaXRlX29yX2RpZSgxLCAmZXh0cmEsIFpJUF9FWFRSQV9NVElNRV9TSVpFKTsKKwl6aXBfb2Zmc2V0ICs9IFpJUF9FWFRSQV9NVElNRV9TSVpFOworCWlmIChzdHJlYW0gJiYgbWV0aG9kID09IDApIHsKKwkJdW5zaWduZWQgY2hhciBidWZbU1RSRUFNX0JVRkZFUl9TSVpFXTsKKwkJc3NpemVfdCByZWFkbGVuOworCisJCWZvciAoOzspIHsKKwkJCXJlYWRsZW4gPSByZWFkX2lzdHJlYW0oc3RyZWFtLCBidWYsIHNpemVvZihidWYpKTsKKwkJCWlmIChyZWFkbGVuIDw9IDApCisJCQkJYnJlYWs7CisJCQljcmMgPSBjcmMzMihjcmMsIGJ1ZiwgcmVhZGxlbik7CisJCQl3cml0ZV9vcl9kaWUoMSwgYnVmLCByZWFkbGVuKTsKKwkJfQorCQljbG9zZV9pc3RyZWFtKHN0cmVhbSk7CisJCWlmIChyZWFkbGVuKQorCQkJcmV0dXJuIHJlYWRsZW47CisKKwkJY29tcHJlc3NlZF9zaXplID0gc2l6ZTsKKwkJemlwX29mZnNldCArPSBjb21wcmVzc2VkX3NpemU7CisKKwkJd3JpdGVfemlwX2RhdGFfZGVzYyhzaXplLCBjb21wcmVzc2VkX3NpemUsIGNyYyk7CisJCXppcF9vZmZzZXQgKz0gWklQX0RBVEFfREVTQ19TSVpFOworCisJCXNldF96aXBfZGlyX2RhdGFfZGVzYygmZGlyZW50LCBzaXplLCBjb21wcmVzc2VkX3NpemUsIGNyYyk7CisJfSBlbHNlIGlmIChzdHJlYW0gJiYgbWV0aG9kID09IDgpIHsKKwkJdW5zaWduZWQgY2hhciBidWZbU1RSRUFNX0JVRkZFUl9TSVpFXTsKKwkJc3NpemVfdCByZWFkbGVuOworCQlnaXRfenN0cmVhbSB6c3RyZWFtOworCQlpbnQgcmVzdWx0OworCQlzaXplX3Qgb3V0X2xlbjsKKwkJdW5zaWduZWQgY2hhciBjb21wcmVzc2VkW1NUUkVBTV9CVUZGRVJfU0laRSAqIDJdOworCisJCW1lbXNldCgmenN0cmVhbSwgMCwgc2l6ZW9mKHpzdHJlYW0pKTsKKwkJZ2l0X2RlZmxhdGVfaW5pdCgmenN0cmVhbSwgYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwpOworCisJCWNvbXByZXNzZWRfc2l6ZSA9IDA7CisJCXpzdHJlYW0ubmV4dF9vdXQgPSBjb21wcmVzc2VkOworCQl6c3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihjb21wcmVzc2VkKTsKKworCQlmb3IgKDs7KSB7CisJCQlyZWFkbGVuID0gcmVhZF9pc3RyZWFtKHN0cmVhbSwgYnVmLCBzaXplb2YoYnVmKSk7CisJCQlpZiAocmVhZGxlbiA8PSAwKQorCQkJCWJyZWFrOworCQkJY3JjID0gY3JjMzIoY3JjLCBidWYsIHJlYWRsZW4pOworCisJCQl6c3RyZWFtLm5leHRfaW4gPSBidWY7CisJCQl6c3RyZWFtLmF2YWlsX2luID0gcmVhZGxlbjsKKwkJCXJlc3VsdCA9IGdpdF9kZWZsYXRlKCZ6c3RyZWFtLCAwKTsKKwkJCWlmIChyZXN1bHQgIT0gWl9PSykKKwkJCQlkaWUoImRlZmxhdGUgZXJyb3IgKCVkKSIsIHJlc3VsdCk7CisJCQlvdXQgPSBjb21wcmVzc2VkOworCQkJaWYgKCFjb21wcmVzc2VkX3NpemUpCisJCQkJb3V0ICs9IDI7CisJCQlvdXRfbGVuID0genN0cmVhbS5uZXh0X291dCAtIG91dDsKKworCQkJaWYgKG91dF9sZW4gPiAwKSB7CisJCQkJd3JpdGVfb3JfZGllKDEsIG91dCwgb3V0X2xlbik7CisJCQkJY29tcHJlc3NlZF9zaXplICs9IG91dF9sZW47CisJCQkJenN0cmVhbS5uZXh0X291dCA9IGNvbXByZXNzZWQ7CisJCQkJenN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoY29tcHJlc3NlZCk7CisJCQl9CisKKwkJfQorCQljbG9zZV9pc3RyZWFtKHN0cmVhbSk7CisJCWlmIChyZWFkbGVuKQorCQkJcmV0dXJuIHJlYWRsZW47CisKKwkJenN0cmVhbS5uZXh0X2luID0gYnVmOworCQl6c3RyZWFtLmF2YWlsX2luID0gMDsKKwkJcmVzdWx0ID0gZ2l0X2RlZmxhdGUoJnpzdHJlYW0sIFpfRklOSVNIKTsKKwkJaWYgKHJlc3VsdCAhPSBaX1NUUkVBTV9FTkQpCisJCQlkaWUoImRlZmxhdGUgZXJyb3IgKCVkKSIsIHJlc3VsdCk7CisKKwkJZ2l0X2RlZmxhdGVfZW5kKCZ6c3RyZWFtKTsKKwkJb3V0ID0gY29tcHJlc3NlZDsKKwkJaWYgKCFjb21wcmVzc2VkX3NpemUpCisJCQlvdXQgKz0gMjsKKwkJb3V0X2xlbiA9IHpzdHJlYW0ubmV4dF9vdXQgLSBvdXQgLSA0OworCQl3cml0ZV9vcl9kaWUoMSwgb3V0LCBvdXRfbGVuKTsKKwkJY29tcHJlc3NlZF9zaXplICs9IG91dF9sZW47CisJCXppcF9vZmZzZXQgKz0gY29tcHJlc3NlZF9zaXplOworCisJCXdyaXRlX3ppcF9kYXRhX2Rlc2Moc2l6ZSwgY29tcHJlc3NlZF9zaXplLCBjcmMpOworCQl6aXBfb2Zmc2V0ICs9IFpJUF9EQVRBX0RFU0NfU0laRTsKKworCQlzZXRfemlwX2Rpcl9kYXRhX2Rlc2MoJmRpcmVudCwgc2l6ZSwgY29tcHJlc3NlZF9zaXplLCBjcmMpOworCX0gZWxzZSBpZiAoY29tcHJlc3NlZF9zaXplID4gMCkgeworCQl3cml0ZV9vcl9kaWUoMSwgb3V0LCBjb21wcmVzc2VkX3NpemUpOworCQl6aXBfb2Zmc2V0ICs9IGNvbXByZXNzZWRfc2l6ZTsKKwl9CisKKwlmcmVlKGRlZmxhdGVkKTsKKwlmcmVlKGJ1ZmZlcik7CisKKwltZW1jcHkoemlwX2RpciArIHppcF9kaXJfb2Zmc2V0LCAmZGlyZW50LCBaSVBfRElSX0hFQURFUl9TSVpFKTsKKwl6aXBfZGlyX29mZnNldCArPSBaSVBfRElSX0hFQURFUl9TSVpFOworCW1lbWNweSh6aXBfZGlyICsgemlwX2Rpcl9vZmZzZXQsIHBhdGgsIHBhdGhsZW4pOworCXppcF9kaXJfb2Zmc2V0ICs9IHBhdGhsZW47CisJbWVtY3B5KHppcF9kaXIgKyB6aXBfZGlyX29mZnNldCwgJmV4dHJhLCBaSVBfRVhUUkFfTVRJTUVfU0laRSk7CisJemlwX2Rpcl9vZmZzZXQgKz0gWklQX0VYVFJBX01USU1FX1NJWkU7CisJemlwX2Rpcl9lbnRyaWVzKys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfemlwX3RyYWlsZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgemlwX2Rpcl90cmFpbGVyIHRyYWlsZXI7CisKKwljb3B5X2xlMzIodHJhaWxlci5tYWdpYywgMHgwNjA1NGI1MCk7CisJY29weV9sZTE2KHRyYWlsZXIuZGlzaywgMCk7CisJY29weV9sZTE2KHRyYWlsZXIuZGlyZWN0b3J5X3N0YXJ0X2Rpc2ssIDApOworCWNvcHlfbGUxNih0cmFpbGVyLmVudHJpZXNfb25fdGhpc19kaXNrLCB6aXBfZGlyX2VudHJpZXMpOworCWNvcHlfbGUxNih0cmFpbGVyLmVudHJpZXMsIHppcF9kaXJfZW50cmllcyk7CisJY29weV9sZTMyKHRyYWlsZXIuc2l6ZSwgemlwX2Rpcl9vZmZzZXQpOworCWNvcHlfbGUzMih0cmFpbGVyLm9mZnNldCwgemlwX29mZnNldCk7CisJY29weV9sZTE2KHRyYWlsZXIuY29tbWVudF9sZW5ndGgsIHNoYTEgPyA0MCA6IDApOworCisJd3JpdGVfb3JfZGllKDEsIHppcF9kaXIsIHppcF9kaXJfb2Zmc2V0KTsKKwl3cml0ZV9vcl9kaWUoMSwgJnRyYWlsZXIsIFpJUF9ESVJfVFJBSUxFUl9TSVpFKTsKKwlpZiAoc2hhMSkKKwkJd3JpdGVfb3JfZGllKDEsIHNoYTFfdG9faGV4KHNoYTEpLCA0MCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvc190aW1lKHRpbWVfdCAqdGltZSwgaW50ICpkb3NfZGF0ZSwgaW50ICpkb3NfdGltZSkKK3sKKwlzdHJ1Y3QgdG0gKnQgPSBsb2NhbHRpbWUodGltZSk7CisKKwkqZG9zX2RhdGUgPSB0LT50bV9tZGF5ICsgKHQtPnRtX21vbiArIDEpICogMzIgKworCSAgICAgICAgICAgICh0LT50bV95ZWFyICsgMTkwMCAtIDE5ODApICogNTEyOworCSpkb3NfdGltZSA9IHQtPnRtX3NlYyAvIDIgKyB0LT50bV9taW4gKiAzMiArIHQtPnRtX2hvdXIgKiAyMDQ4OworfQorCitzdGF0aWMgaW50IHdyaXRlX3ppcF9hcmNoaXZlKGNvbnN0IHN0cnVjdCBhcmNoaXZlciAqYXIsCisJCQkgICAgIHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzKQoreworCWludCBlcnI7CisKKwlkb3NfdGltZSgmYXJncy0+dGltZSwgJnppcF9kYXRlLCAmemlwX3RpbWUpOworCisJemlwX2RpciA9IHhtYWxsb2MoWklQX0RJUkVDVE9SWV9NSU5fU0laRSk7CisJemlwX2Rpcl9zaXplID0gWklQX0RJUkVDVE9SWV9NSU5fU0laRTsKKworCWVyciA9IHdyaXRlX2FyY2hpdmVfZW50cmllcyhhcmdzLCB3cml0ZV96aXBfZW50cnkpOworCWlmICghZXJyKQorCQl3cml0ZV96aXBfdHJhaWxlcihhcmdzLT5jb21taXRfc2hhMSk7CisKKwlmcmVlKHppcF9kaXIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBhcmNoaXZlciB6aXBfYXJjaGl2ZXIgPSB7CisJInppcCIsCisJd3JpdGVfemlwX2FyY2hpdmUsCisJQVJDSElWRVJfV0FOVF9DT01QUkVTU0lPTl9MRVZFTFN8QVJDSElWRVJfUkVNT1RFCit9OworCit2b2lkIGluaXRfemlwX2FyY2hpdmVyKHZvaWQpCit7CisJcmVnaXN0ZXJfYXJjaGl2ZXIoJnppcF9hcmNoaXZlcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoaXZlLmMgYi9hcmNoaXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2NjQwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2hpdmUuYwpAQCAtMCwwICsxLDQ1MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYXJjaGl2ZV91c2FnZVtdID0geworCU5fKCJnaXQgYXJjaGl2ZSBbb3B0aW9uc10gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIpLAorCU5fKCJnaXQgYXJjaGl2ZSAtLWxpc3QiKSwKKwlOXygiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFtvcHRpb25zXSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIiksCisJTl8oImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyY2hpdmVyICoqYXJjaGl2ZXJzOworc3RhdGljIGludCBucl9hcmNoaXZlcnM7CitzdGF0aWMgaW50IGFsbG9jX2FyY2hpdmVyczsKKwordm9pZCByZWdpc3Rlcl9hcmNoaXZlcihzdHJ1Y3QgYXJjaGl2ZXIgKmFyKQoreworCUFMTE9DX0dST1coYXJjaGl2ZXJzLCBucl9hcmNoaXZlcnMgKyAxLCBhbGxvY19hcmNoaXZlcnMpOworCWFyY2hpdmVyc1tucl9hcmNoaXZlcnMrK10gPSBhcjsKK30KKworc3RhdGljIHZvaWQgZm9ybWF0X3N1YnN0KGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgZm10ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwljdHguZGF0ZV9tb2RlID0gREFURV9OT1JNQUw7CisJY3R4LmFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCisJaWYgKHNyYyA9PSBidWYtPmJ1ZikKKwkJdG9fZnJlZSA9IHN0cmJ1Zl9kZXRhY2goYnVmLCBOVUxMKTsKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKmIsICpjOworCisJCWIgPSBtZW1tZW0oc3JjLCBsZW4sICIkRm9ybWF0OiIsIDgpOworCQlpZiAoIWIpCisJCQlicmVhazsKKwkJYyA9IG1lbWNocihiICsgOCwgJyQnLCAoc3JjICsgbGVuKSAtIGIgLSA4KTsKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisKKwkJc3RyYnVmX3Jlc2V0KCZmbXQpOworCQlzdHJidWZfYWRkKCZmbXQsIGIgKyA4LCBjIC0gYiAtIDgpOworCisJCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIGIgLSBzcmMpOworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCBmbXQuYnVmLCBidWYsICZjdHgpOworCQlsZW4gLT0gYyArIDEgLSBzcmM7CisJCXNyYyAgPSBjICsgMTsKKwl9CisJc3RyYnVmX2FkZChidWYsIHNyYywgbGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmZm10KTsKKwlmcmVlKHRvX2ZyZWUpOworfQorCit2b2lkICpzaGExX2ZpbGVfdG9fYXJjaGl2ZShjb25zdCBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICB1bnNpZ25lZCBpbnQgbW9kZSwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCXZvaWQgKmJ1ZmZlcjsKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBhcmdzLT5jb252ZXJ0ID8gYXJncy0+Y29tbWl0IDogTlVMTDsKKworCXBhdGggKz0gYXJncy0+YmFzZWxlbjsKKwlidWZmZXIgPSByZWFkX3NoYTFfZmlsZShzaGExLCB0eXBlLCBzaXplcCk7CisJaWYgKGJ1ZmZlciAmJiBTX0lTUkVHKG1vZGUpKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXNpemVfdCBzaXplID0gMDsKKworCQlzdHJidWZfYXR0YWNoKCZidWYsIGJ1ZmZlciwgKnNpemVwLCAqc2l6ZXAgKyAxKTsKKwkJY29udmVydF90b193b3JraW5nX3RyZWUocGF0aCwgYnVmLmJ1ZiwgYnVmLmxlbiwgJmJ1Zik7CisJCWlmIChjb21taXQpCisJCQlmb3JtYXRfc3Vic3QoY29tbWl0LCBidWYuYnVmLCBidWYubGVuLCAmYnVmKTsKKwkJYnVmZmVyID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc2l6ZSk7CisJCSpzaXplcCA9IHNpemU7CisJfQorCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfYXJjaGl2ZV9jaGVjayhzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrKQoreworCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHJfZXhwb3J0X2lnbm9yZTsKKwlzdGF0aWMgc3RydWN0IGdpdF9hdHRyICphdHRyX2V4cG9ydF9zdWJzdDsKKworCWlmICghYXR0cl9leHBvcnRfaWdub3JlKSB7CisJCWF0dHJfZXhwb3J0X2lnbm9yZSA9IGdpdF9hdHRyKCJleHBvcnQtaWdub3JlIik7CisJCWF0dHJfZXhwb3J0X3N1YnN0ID0gZ2l0X2F0dHIoImV4cG9ydC1zdWJzdCIpOworCX0KKwljaGVja1swXS5hdHRyID0gYXR0cl9leHBvcnRfaWdub3JlOworCWNoZWNrWzFdLmF0dHIgPSBhdHRyX2V4cG9ydF9zdWJzdDsKK30KKworc3RydWN0IGFyY2hpdmVyX2NvbnRleHQgeworCXN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzOworCXdyaXRlX2FyY2hpdmVfZW50cnlfZm5fdCB3cml0ZV9lbnRyeTsKK307CisKK3N0YXRpYyBpbnQgd3JpdGVfYXJjaGl2ZV9lbnRyeShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpiYXNlLAorCQlpbnQgYmFzZWxlbiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwKKwkJdm9pZCAqY29udGV4dCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGFyY2hpdmVyX2NvbnRleHQgKmMgPSBjb250ZXh0OworCXN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzID0gYy0+YXJnczsKKwl3cml0ZV9hcmNoaXZlX2VudHJ5X2ZuX3Qgd3JpdGVfZW50cnkgPSBjLT53cml0ZV9lbnRyeTsKKwlzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgY2hlY2tbMl07CisJY29uc3QgY2hhciAqcGF0aF93aXRob3V0X3ByZWZpeDsKKwlpbnQgZXJyOworCisJYXJncy0+Y29udmVydCA9IDA7CisJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwlzdHJidWZfZ3JvdygmcGF0aCwgUEFUSF9NQVgpOworCXN0cmJ1Zl9hZGQoJnBhdGgsIGFyZ3MtPmJhc2UsIGFyZ3MtPmJhc2VsZW4pOworCXN0cmJ1Zl9hZGQoJnBhdGgsIGJhc2UsIGJhc2VsZW4pOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGZpbGVuYW1lKTsKKwlwYXRoX3dpdGhvdXRfcHJlZml4ID0gcGF0aC5idWYgKyBhcmdzLT5iYXNlbGVuOworCisJc2V0dXBfYXJjaGl2ZV9jaGVjayhjaGVjayk7CisJaWYgKCFnaXRfY2hlY2tfYXR0cihwYXRoX3dpdGhvdXRfcHJlZml4LCBBUlJBWV9TSVpFKGNoZWNrKSwgY2hlY2spKSB7CisJCWlmIChBVFRSX1RSVUUoY2hlY2tbMF0udmFsdWUpKQorCQkJcmV0dXJuIDA7CisJCWFyZ3MtPmNvbnZlcnQgPSBBVFRSX1RSVUUoY2hlY2tbMV0udmFsdWUpOworCX0KKworCWlmIChTX0lTRElSKG1vZGUpIHx8IFNfSVNHSVRMSU5LKG1vZGUpKSB7CisJCXN0cmJ1Zl9hZGRjaCgmcGF0aCwgJy8nKTsKKwkJaWYgKGFyZ3MtPnZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiUuKnNcbiIsIChpbnQpcGF0aC5sZW4sIHBhdGguYnVmKTsKKwkJZXJyID0gd3JpdGVfZW50cnkoYXJncywgc2hhMSwgcGF0aC5idWYsIHBhdGgubGVuLCBtb2RlKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCXJldHVybiAoU19JU0RJUihtb2RlKSA/IFJFQURfVFJFRV9SRUNVUlNJVkUgOiAwKTsKKwl9CisKKwlpZiAoYXJncy0+dmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICIlLipzXG4iLCAoaW50KXBhdGgubGVuLCBwYXRoLmJ1Zik7CisJcmV0dXJuIHdyaXRlX2VudHJ5KGFyZ3MsIHNoYTEsIHBhdGguYnVmLCBwYXRoLmxlbiwgbW9kZSk7Cit9CisKK2ludCB3cml0ZV9hcmNoaXZlX2VudHJpZXMoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCisJCXdyaXRlX2FyY2hpdmVfZW50cnlfZm5fdCB3cml0ZV9lbnRyeSkKK3sKKwlzdHJ1Y3QgYXJjaGl2ZXJfY29udGV4dCBjb250ZXh0OworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCXN0cnVjdCB0cmVlX2Rlc2MgdDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJaW50IGVycjsKKworCWlmIChhcmdzLT5iYXNlbGVuID4gMCAmJiBhcmdzLT5iYXNlW2FyZ3MtPmJhc2VsZW4gLSAxXSA9PSAnLycpIHsKKwkJc2l6ZV90IGxlbiA9IGFyZ3MtPmJhc2VsZW47CisKKwkJd2hpbGUgKGxlbiA+IDEgJiYgYXJncy0+YmFzZVtsZW4gLSAyXSA9PSAnLycpCisJCQlsZW4tLTsKKwkJaWYgKGFyZ3MtPnZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiUuKnNcbiIsIChpbnQpbGVuLCBhcmdzLT5iYXNlKTsKKwkJZXJyID0gd3JpdGVfZW50cnkoYXJncywgYXJncy0+dHJlZS0+b2JqZWN0LnNoYTEsIGFyZ3MtPmJhc2UsCisJCQkJICBsZW4sIDA0MDc3Nyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWNvbnRleHQuYXJncyA9IGFyZ3M7CisJY29udGV4dC53cml0ZV9lbnRyeSA9IHdyaXRlX2VudHJ5OworCisJLyoKKwkgKiBTZXR1cCBpbmRleCBhbmQgaW5zdHJ1Y3QgYXR0ciB0byByZWFkIGluZGV4IG9ubHkKKwkgKi8KKwlpZiAoIWFyZ3MtPndvcmt0cmVlX2F0dHJpYnV0ZXMpIHsKKwkJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCQlvcHRzLmluZGV4X29ubHkgPSAxOworCQlvcHRzLmhlYWRfaWR4ID0gLTE7CisJCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwkJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCQlvcHRzLmZuID0gb25ld2F5X21lcmdlOworCQlpbml0X3RyZWVfZGVzYygmdCwgYXJncy0+dHJlZS0+YnVmZmVyLCBhcmdzLT50cmVlLT5zaXplKTsKKwkJaWYgKHVucGFja190cmVlcygxLCAmdCwgJm9wdHMpKQorCQkJcmV0dXJuIC0xOworCQlnaXRfYXR0cl9zZXRfZGlyZWN0aW9uKEdJVF9BVFRSX0lOREVYLCAmdGhlX2luZGV4KTsKKwl9CisKKwlpbml0X3BhdGhzcGVjKCZwYXRoc3BlYywgYXJncy0+cGF0aHNwZWMpOworCWVyciA9IHJlYWRfdHJlZV9yZWN1cnNpdmUoYXJncy0+dHJlZSwgIiIsIDAsIDAsICZwYXRoc3BlYywKKwkJCQkgIHdyaXRlX2FyY2hpdmVfZW50cnksICZjb250ZXh0KTsKKwlmcmVlX3BhdGhzcGVjKCZwYXRoc3BlYyk7CisJaWYgKGVyciA9PSBSRUFEX1RSRUVfUkVDVVJTSVZFKQorCQllcnIgPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKmxvb2t1cF9hcmNoaXZlcihjb25zdCBjaGFyICpuYW1lKQoreworCWludCBpOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBucl9hcmNoaXZlcnM7IGkrKykgeworCQlpZiAoIXN0cmNtcChuYW1lLCBhcmNoaXZlcnNbaV0tPm5hbWUpKQorCQkJcmV0dXJuIGFyY2hpdmVyc1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcmVqZWN0X2VudHJ5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2UsCisJCQlpbnQgYmFzZWxlbiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIG1vZGUsCisJCQlpbnQgc3RhZ2UsIHZvaWQgKmNvbnRleHQpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHBhdGhfZXhpc3RzKHN0cnVjdCB0cmVlICp0cmVlLCBjb25zdCBjaGFyICpwYXRoKQoreworCWNvbnN0IGNoYXIgKnBhdGhzW10gPSB7IHBhdGgsIE5VTEwgfTsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJaW50IHJldDsKKworCWluaXRfcGF0aHNwZWMoJnBhdGhzcGVjLCBwYXRocyk7CisJcmV0ID0gcmVhZF90cmVlX3JlY3Vyc2l2ZSh0cmVlLCAiIiwgMCwgMCwgJnBhdGhzcGVjLCByZWplY3RfZW50cnksIE5VTEwpOworCWZyZWVfcGF0aHNwZWMoJnBhdGhzcGVjKTsKKwlyZXR1cm4gcmV0ICE9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3BhdGhzcGVjX2FyZyhjb25zdCBjaGFyICoqcGF0aHNwZWMsCisJCXN0cnVjdCBhcmNoaXZlcl9hcmdzICphcl9hcmdzKQoreworCWFyX2FyZ3MtPnBhdGhzcGVjID0gcGF0aHNwZWMgPSBnZXRfcGF0aHNwZWMoIiIsIHBhdGhzcGVjKTsKKwlpZiAocGF0aHNwZWMpIHsKKwkJd2hpbGUgKCpwYXRoc3BlYykgeworCQkJaWYgKCFwYXRoX2V4aXN0cyhhcl9hcmdzLT50cmVlLCAqcGF0aHNwZWMpKQorCQkJCWRpZSgicGF0aCBub3QgZm91bmQ6ICVzIiwgKnBhdGhzcGVjKTsKKwkJCXBhdGhzcGVjKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3RyZWVpc2hfYXJnKGNvbnN0IGNoYXIgKiphcmd2LAorCQlzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJfYXJncywgY29uc3QgY2hhciAqcHJlZml4LAorCQlpbnQgcmVtb3RlKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSBhcmd2WzBdOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9zaGExOworCXRpbWVfdCBhcmNoaXZlX3RpbWU7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwkvKiBSZW1vdGVzIGFyZSBvbmx5IGFsbG93ZWQgdG8gZmV0Y2ggYWN0dWFsIHJlZnMgKi8KKwlpZiAocmVtb3RlKSB7CisJCWNoYXIgKnJlZiA9IE5VTEw7CisJCWNvbnN0IGNoYXIgKmNvbG9uID0gc3RyY2hyKG5hbWUsICc6Jyk7CisJCWludCByZWZuYW1lbGVuID0gY29sb24gPyBjb2xvbiAtIG5hbWUgOiBzdHJsZW4obmFtZSk7CisKKwkJaWYgKCFkd2ltX3JlZihuYW1lLCByZWZuYW1lbGVuLCBzaGExLCAmcmVmKSkKKwkJCWRpZSgibm8gc3VjaCByZWY6ICUuKnMiLCByZWZuYW1lbGVuLCBuYW1lKTsKKwkJZnJlZShyZWYpOworCX0KKworCWlmIChnZXRfc2hhMShuYW1lLCBzaGExKSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSIpOworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTEsIDEpOworCWlmIChjb21taXQpIHsKKwkJY29tbWl0X3NoYTEgPSBjb21taXQtPm9iamVjdC5zaGExOworCQlhcmNoaXZlX3RpbWUgPSBjb21taXQtPmRhdGU7CisJfSBlbHNlIHsKKwkJY29tbWl0X3NoYTEgPSBOVUxMOworCQlhcmNoaXZlX3RpbWUgPSB0aW1lKE5VTEwpOworCX0KKworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHNoYTEpOworCWlmICh0cmVlID09IE5VTEwpCisJCWRpZSgibm90IGEgdHJlZSBvYmplY3QiKTsKKworCWlmIChwcmVmaXgpIHsKKwkJdW5zaWduZWQgY2hhciB0cmVlX3NoYTFbMjBdOworCQl1bnNpZ25lZCBpbnQgbW9kZTsKKwkJaW50IGVycjsKKworCQllcnIgPSBnZXRfdHJlZV9lbnRyeSh0cmVlLT5vYmplY3Quc2hhMSwgcHJlZml4LAorCQkJCSAgICAgdHJlZV9zaGExLCAmbW9kZSk7CisJCWlmIChlcnIgfHwgIVNfSVNESVIobW9kZSkpCisJCQlkaWUoImN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgdW50cmFja2VkIik7CisKKwkJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QodHJlZV9zaGExKTsKKwl9CisJYXJfYXJncy0+dHJlZSA9IHRyZWU7CisJYXJfYXJncy0+Y29tbWl0X3NoYTEgPSBjb21taXRfc2hhMTsKKwlhcl9hcmdzLT5jb21taXQgPSBjb21taXQ7CisJYXJfYXJncy0+dGltZSA9IGFyY2hpdmVfdGltZTsKK30KKworI2RlZmluZSBPUFRfX0NPTVBSKHMsIHYsIGgsIHApIFwKKwl7IE9QVElPTl9TRVRfSU5ULCAocyksIE5VTEwsICh2KSwgTlVMTCwgKGgpLCBcCisJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIChwKSB9CisjZGVmaW5lIE9QVF9fQ09NUFJfSElEREVOKHMsIHYsIHApIFwKKwl7IE9QVElPTl9TRVRfSU5ULCAocyksIE5VTEwsICh2KSwgTlVMTCwgIiIsIFwKKwkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9ISURERU4sIE5VTEwsIChwKSB9CisKK3N0YXRpYyBpbnQgcGFyc2VfYXJjaGl2ZV9hcmdzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJY29uc3Qgc3RydWN0IGFyY2hpdmVyICoqYXIsIHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQljb25zdCBjaGFyICpuYW1lX2hpbnQsIGludCBpc19yZW1vdGUpCit7CisJY29uc3QgY2hhciAqZm9ybWF0ID0gTlVMTDsKKwljb25zdCBjaGFyICpiYXNlID0gTlVMTDsKKwljb25zdCBjaGFyICpyZW1vdGUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmV4ZWMgPSBOVUxMOworCWNvbnN0IGNoYXIgKm91dHB1dCA9IE5VTEw7CisJaW50IGNvbXByZXNzaW9uX2xldmVsID0gLTE7CisJaW50IHZlcmJvc2UgPSAwOworCWludCBpOworCWludCBsaXN0ID0gMDsKKwlpbnQgd29ya3RyZWVfYXR0cmlidXRlcyA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9TVFJJTkcoMCwgImZvcm1hdCIsICZmb3JtYXQsIE5fKCJmbXQiKSwgTl8oImFyY2hpdmUgZm9ybWF0IikpLAorCQlPUFRfU1RSSU5HKDAsICJwcmVmaXgiLCAmYmFzZSwgTl8oInByZWZpeCIpLAorCQkJTl8oInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiKSksCisJCU9QVF9TVFJJTkcoJ28nLCAib3V0cHV0IiwgJm91dHB1dCwgTl8oImZpbGUiKSwKKwkJCU5fKCJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiKSksCisJCU9QVF9CT09MKDAsICJ3b3JrdHJlZS1hdHRyaWJ1dGVzIiwgJndvcmt0cmVlX2F0dHJpYnV0ZXMsCisJCQlOXygicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIpKSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIpKSwKKwkJT1BUX19DT01QUignMCcsICZjb21wcmVzc2lvbl9sZXZlbCwgTl8oInN0b3JlIG9ubHkiKSwgMCksCisJCU9QVF9fQ09NUFIoJzEnLCAmY29tcHJlc3Npb25fbGV2ZWwsIE5fKCJjb21wcmVzcyBmYXN0ZXIiKSwgMSksCisJCU9QVF9fQ09NUFJfSElEREVOKCcyJywgJmNvbXByZXNzaW9uX2xldmVsLCAyKSwKKwkJT1BUX19DT01QUl9ISURERU4oJzMnLCAmY29tcHJlc3Npb25fbGV2ZWwsIDMpLAorCQlPUFRfX0NPTVBSX0hJRERFTignNCcsICZjb21wcmVzc2lvbl9sZXZlbCwgNCksCisJCU9QVF9fQ09NUFJfSElEREVOKCc1JywgJmNvbXByZXNzaW9uX2xldmVsLCA1KSwKKwkJT1BUX19DT01QUl9ISURERU4oJzYnLCAmY29tcHJlc3Npb25fbGV2ZWwsIDYpLAorCQlPUFRfX0NPTVBSX0hJRERFTignNycsICZjb21wcmVzc2lvbl9sZXZlbCwgNyksCisJCU9QVF9fQ09NUFJfSElEREVOKCc4JywgJmNvbXByZXNzaW9uX2xldmVsLCA4KSwKKwkJT1BUX19DT01QUignOScsICZjb21wcmVzc2lvbl9sZXZlbCwgTl8oImNvbXByZXNzIGJldHRlciIpLCA5KSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0JPT0woJ2wnLCAibGlzdCIsICZsaXN0LAorCQkJTl8oImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIpKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX1NUUklORygwLCAicmVtb3RlIiwgJnJlbW90ZSwgTl8oInJlcG8iKSwKKwkJCU5fKCJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIpKSwKKwkJT1BUX1NUUklORygwLCAiZXhlYyIsICZleGVjLCBOXygiY29tbWFuZCIpLAorCQkJTl8oInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdHMsIGFyY2hpdmVfdXNhZ2UsIDApOworCisJaWYgKHJlbW90ZSkKKwkJZGllKCJVbmV4cGVjdGVkIG9wdGlvbiAtLXJlbW90ZSIpOworCWlmIChleGVjKQorCQlkaWUoIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIik7CisJaWYgKG91dHB1dCkKKwkJZGllKCJVbmV4cGVjdGVkIG9wdGlvbiAtLW91dHB1dCIpOworCisJaWYgKCFiYXNlKQorCQliYXNlID0gIiI7CisKKwlpZiAobGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnJfYXJjaGl2ZXJzOyBpKyspCisJCQlpZiAoIWlzX3JlbW90ZSB8fCBhcmNoaXZlcnNbaV0tPmZsYWdzICYgQVJDSElWRVJfUkVNT1RFKQorCQkJCXByaW50ZigiJXNcbiIsIGFyY2hpdmVyc1tpXS0+bmFtZSk7CisJCWV4aXQoMCk7CisJfQorCisJaWYgKCFmb3JtYXQgJiYgbmFtZV9oaW50KQorCQlmb3JtYXQgPSBhcmNoaXZlX2Zvcm1hdF9mcm9tX2ZpbGVuYW1lKG5hbWVfaGludCk7CisJaWYgKCFmb3JtYXQpCisJCWZvcm1hdCA9ICJ0YXIiOworCisJLyogV2UgbmVlZCBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIC0tIHRyZWUtaXNoICovCisJaWYgKGFyZ2MgPCAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYXJjaGl2ZV91c2FnZSwgb3B0cyk7CisJKmFyID0gbG9va3VwX2FyY2hpdmVyKGZvcm1hdCk7CisJaWYgKCEqYXIgfHwgKGlzX3JlbW90ZSAmJiAhKCgqYXIpLT5mbGFncyAmIEFSQ0hJVkVSX1JFTU9URSkpKQorCQlkaWUoIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIsIGZvcm1hdCk7CisKKwlhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKwlpZiAoY29tcHJlc3Npb25fbGV2ZWwgIT0gLTEpIHsKKwkJaWYgKCgqYXIpLT5mbGFncyAmIEFSQ0hJVkVSX1dBTlRfQ09NUFJFU1NJT05fTEVWRUxTKQorCQkJYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwgPSBjb21wcmVzc2lvbl9sZXZlbDsKKwkJZWxzZSB7CisJCQlkaWUoIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiLAorCQkJCQlmb3JtYXQsIGNvbXByZXNzaW9uX2xldmVsKTsKKwkJfQorCX0KKwlhcmdzLT52ZXJib3NlID0gdmVyYm9zZTsKKwlhcmdzLT5iYXNlID0gYmFzZTsKKwlhcmdzLT5iYXNlbGVuID0gc3RybGVuKGJhc2UpOworCWFyZ3MtPndvcmt0cmVlX2F0dHJpYnV0ZXMgPSB3b3JrdHJlZV9hdHRyaWJ1dGVzOworCisJcmV0dXJuIGFyZ2M7Cit9CisKK2ludCB3cml0ZV9hcmNoaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgIGludCBzZXR1cF9wcmVmaXgsIGNvbnN0IGNoYXIgKm5hbWVfaGludCwgaW50IHJlbW90ZSkKK3sKKwlpbnQgbm9uZ2l0ID0gMDsKKwljb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKmFyID0gTlVMTDsKKwlzdHJ1Y3QgYXJjaGl2ZXJfYXJncyBhcmdzOworCisJaWYgKHNldHVwX3ByZWZpeCAmJiBwcmVmaXggPT0gTlVMTCkKKwkJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJaW5pdF90YXJfYXJjaGl2ZXIoKTsKKwlpbml0X3ppcF9hcmNoaXZlcigpOworCisJYXJnYyA9IHBhcnNlX2FyY2hpdmVfYXJncyhhcmdjLCBhcmd2LCAmYXIsICZhcmdzLCBuYW1lX2hpbnQsIHJlbW90ZSk7CisJaWYgKG5vbmdpdCkgeworCQkvKgorCQkgKiBXZSBrbm93IHRoaXMgd2lsbCBkaWUoKSB3aXRoIGFuIGVycm9yLCBzbyB3ZSBjb3VsZCBqdXN0CisJCSAqIGRpZSBvdXJzZWx2ZXM7IGJ1dCBpdHMgZXJyb3IgbWVzc2FnZSB3aWxsIGJlIG1vcmUgc3BlY2lmaWMKKwkJICogdGhhbiB3aGF0IHdlIGNvdWxkIHdyaXRlIGhlcmUuCisJCSAqLworCQlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJfQorCisJcGFyc2VfdHJlZWlzaF9hcmcoYXJndiwgJmFyZ3MsIHByZWZpeCwgcmVtb3RlKTsKKwlwYXJzZV9wYXRoc3BlY19hcmcoYXJndiArIDEsICZhcmdzKTsKKworCXJldHVybiBhci0+d3JpdGVfYXJjaGl2ZShhciwgJmFyZ3MpOworfQorCitzdGF0aWMgaW50IG1hdGNoX2V4dGVuc2lvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZXh0KQoreworCWludCBwcmVmaXhsZW4gPSBzdHJsZW4oZmlsZW5hbWUpIC0gc3RybGVuKGV4dCk7CisKKwkvKgorCSAqIFdlIG5lZWQgMSBjaGFyYWN0ZXIgZm9yIHRoZSAnLicsIGFuZCAxIGNoYXJhY3RlciB0byBlbnN1cmUgdGhhdCB0aGUKKwkgKiBwcmVmaXggaXMgbm9uLWVtcHR5IChrLmUuLCB3ZSBkb24ndCBtYXRjaCAudGFyLmd6IHdpdGggbm8gYWN0dWFsCisJICogZmlsZW5hbWUpLgorCSAqLworCWlmIChwcmVmaXhsZW4gPCAyIHx8IGZpbGVuYW1lW3ByZWZpeGxlbi0xXSAhPSAnLicpCisJCXJldHVybiAwOworCXJldHVybiAhc3RyY21wKGZpbGVuYW1lICsgcHJlZml4bGVuLCBleHQpOworfQorCitjb25zdCBjaGFyICphcmNoaXZlX2Zvcm1hdF9mcm9tX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2FyY2hpdmVyczsgaSsrKQorCQlpZiAobWF0Y2hfZXh0ZW5zaW9uKGZpbGVuYW1lLCBhcmNoaXZlcnNbaV0tPm5hbWUpKQorCQkJcmV0dXJuIGFyY2hpdmVyc1tpXS0+bmFtZTsKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2FyY2hpdmUuaCBiL2FyY2hpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTVhZmNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaGl2ZS5oCkBAIC0wLDAgKzEsNDUgQEAKKyNpZm5kZWYgQVJDSElWRV9ICisjZGVmaW5lIEFSQ0hJVkVfSAorCitzdHJ1Y3QgYXJjaGl2ZXJfYXJncyB7CisJY29uc3QgY2hhciAqYmFzZTsKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjb21taXRfc2hhMTsKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJdGltZV90IHRpbWU7CisJY29uc3QgY2hhciAqKnBhdGhzcGVjOworCXVuc2lnbmVkIGludCB2ZXJib3NlIDogMTsKKwl1bnNpZ25lZCBpbnQgd29ya3RyZWVfYXR0cmlidXRlcyA6IDE7CisJdW5zaWduZWQgaW50IGNvbnZlcnQgOiAxOworCWludCBjb21wcmVzc2lvbl9sZXZlbDsKK307CisKKyNkZWZpbmUgQVJDSElWRVJfV0FOVF9DT01QUkVTU0lPTl9MRVZFTFMgMQorI2RlZmluZSBBUkNISVZFUl9SRU1PVEUgMgorc3RydWN0IGFyY2hpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAoKndyaXRlX2FyY2hpdmUpKGNvbnN0IHN0cnVjdCBhcmNoaXZlciAqLCBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqKTsKKwl1bnNpZ25lZCBmbGFnczsKKwl2b2lkICpkYXRhOworfTsKK2V4dGVybiB2b2lkIHJlZ2lzdGVyX2FyY2hpdmVyKHN0cnVjdCBhcmNoaXZlciAqKTsKKworZXh0ZXJuIHZvaWQgaW5pdF90YXJfYXJjaGl2ZXIodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X3ppcF9hcmNoaXZlcih2b2lkKTsKKwordHlwZWRlZiBpbnQgKCp3cml0ZV9hcmNoaXZlX2VudHJ5X2ZuX3QpKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCQljb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwKKwkJCQkJdW5zaWduZWQgaW50IG1vZGUpOworCitleHRlcm4gaW50IHdyaXRlX2FyY2hpdmVfZW50cmllcyhzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywgd3JpdGVfYXJjaGl2ZV9lbnRyeV9mbl90IHdyaXRlX2VudHJ5KTsKK2V4dGVybiBpbnQgd3JpdGVfYXJjaGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHNldHVwX3ByZWZpeCwgY29uc3QgY2hhciAqbmFtZV9oaW50LCBpbnQgcmVtb3RlKTsKKworY29uc3QgY2hhciAqYXJjaGl2ZV9mb3JtYXRfZnJvbV9maWxlbmFtZShjb25zdCBjaGFyICpmaWxlbmFtZSk7CitleHRlcm4gdm9pZCAqc2hhMV9maWxlX3RvX2FyY2hpdmUoY29uc3Qgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCisJCQkJICBjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgdW5zaWduZWQgaW50IG1vZGUsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkJICB1bnNpZ25lZCBsb25nICpzaXplcCk7CisKKyNlbmRpZgkvKiBBUkNISVZFX0ggKi8KZGlmZiAtLWdpdCBhL2FyZ3YtYXJyYXkuYyBiL2FyZ3YtYXJyYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTY3NDFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJndi1hcnJheS5jCkBAIC0wLDAgKzEsNzAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworY29uc3QgY2hhciAqZW1wdHlfYXJndltdID0geyBOVUxMIH07CisKK3ZvaWQgYXJndl9hcnJheV9pbml0KHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSkKK3sKKwlhcnJheS0+YXJndiA9IGVtcHR5X2FyZ3Y7CisJYXJyYXktPmFyZ2MgPSAwOworCWFycmF5LT5hbGxvYyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGFyZ3ZfYXJyYXlfcHVzaF9ub2R1cChzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmIChhcnJheS0+YXJndiA9PSBlbXB0eV9hcmd2KQorCQlhcnJheS0+YXJndiA9IE5VTEw7CisKKwlBTExPQ19HUk9XKGFycmF5LT5hcmd2LCBhcnJheS0+YXJnYyArIDIsIGFycmF5LT5hbGxvYyk7CisJYXJyYXktPmFyZ3ZbYXJyYXktPmFyZ2MrK10gPSB2YWx1ZTsKKwlhcnJheS0+YXJndlthcnJheS0+YXJnY10gPSBOVUxMOworfQorCit2b2lkIGFyZ3ZfYXJyYXlfcHVzaChzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWFyZ3ZfYXJyYXlfcHVzaF9ub2R1cChhcnJheSwgeHN0cmR1cCh2YWx1ZSkpOworfQorCit2b2lkIGFyZ3ZfYXJyYXlfcHVzaGYoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXN0cnVjdCBzdHJidWYgdiA9IFNUUkJVRl9JTklUOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZ2LCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJYXJndl9hcnJheV9wdXNoX25vZHVwKGFycmF5LCBzdHJidWZfZGV0YWNoKCZ2LCBOVUxMKSk7Cit9CisKK3ZvaWQgYXJndl9hcnJheV9wdXNobChzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXksIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNvbnN0IGNoYXIgKmFyZzsKKworCXZhX3N0YXJ0KGFwLCBhcnJheSk7CisJd2hpbGUoKGFyZyA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKSkpCisJCWFyZ3ZfYXJyYXlfcHVzaChhcnJheSwgYXJnKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIGFyZ3ZfYXJyYXlfcG9wKHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSkKK3sKKwlpZiAoIWFycmF5LT5hcmdjKQorCQlyZXR1cm47CisJZnJlZSgoY2hhciAqKWFycmF5LT5hcmd2W2FycmF5LT5hcmdjIC0gMV0pOworCWFycmF5LT5hcmd2W2FycmF5LT5hcmdjIC0gMV0gPSBOVUxMOworCWFycmF5LT5hcmdjLS07Cit9CisKK3ZvaWQgYXJndl9hcnJheV9jbGVhcihzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXkpCit7CisJaWYgKGFycmF5LT5hcmd2ICE9IGVtcHR5X2FyZ3YpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+YXJnYzsgaSsrKQorCQkJZnJlZSgoY2hhciAqKWFycmF5LT5hcmd2W2ldKTsKKwkJZnJlZShhcnJheS0+YXJndik7CisJfQorCWFyZ3ZfYXJyYXlfaW5pdChhcnJheSk7Cit9CmRpZmYgLS1naXQgYS9hcmd2LWFycmF5LmggYi9hcmd2LWFycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiOTg2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyZ3YtYXJyYXkuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIEFSR1ZfQVJSQVlfSAorI2RlZmluZSBBUkdWX0FSUkFZX0gKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmVtcHR5X2FyZ3ZbXTsKKworc3RydWN0IGFyZ3ZfYXJyYXkgeworCWNvbnN0IGNoYXIgKiphcmd2OworCWludCBhcmdjOworCWludCBhbGxvYzsKK307CisKKyNkZWZpbmUgQVJHVl9BUlJBWV9JTklUIHsgZW1wdHlfYXJndiwgMCwgMCB9CisKK3ZvaWQgYXJndl9hcnJheV9pbml0KHN0cnVjdCBhcmd2X2FycmF5ICopOwordm9pZCBhcmd2X2FycmF5X3B1c2goc3RydWN0IGFyZ3ZfYXJyYXkgKiwgY29uc3QgY2hhciAqKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLDIsMykpKQordm9pZCBhcmd2X2FycmF5X3B1c2hmKHN0cnVjdCBhcmd2X2FycmF5ICosIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgYXJndl9hcnJheV9wdXNobChzdHJ1Y3QgYXJndl9hcnJheSAqLCAuLi4pOwordm9pZCBhcmd2X2FycmF5X3BvcChzdHJ1Y3QgYXJndl9hcnJheSAqKTsKK3ZvaWQgYXJndl9hcnJheV9jbGVhcihzdHJ1Y3QgYXJndl9hcnJheSAqKTsKKworI2VuZGlmIC8qIEFSR1ZfQVJSQVlfSCAqLwpkaWZmIC0tZ2l0IGEvYXR0ci5jIGIvYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4N2E5YWUKLS0tIC9kZXYvbnVsbAorKysgYi9hdHRyLmMKQEAgLTAsMCArMSw4MTAgQEAKKy8qCisgKiBIYW5kbGUgZ2l0IGF0dHJpYnV0ZXMuICBTZWUgZ2l0YXR0cmlidXRlcyg1KSBmb3IgYSBkZXNjcmlwdGlvbiBvZgorICogdGhlIGZpbGUgc3ludGF4LCBhbmQgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdpdGF0dHJpYnV0ZXMudHh0CisgKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgQVBJLgorICoKKyAqIE9uZSBiYXNpYyBkZXNpZ24gZGVjaXNpb24gaGVyZSBpcyB0aGF0IHdlIGFyZSBub3QgZ29pbmcgdG8gc3VwcG9ydAorICogYW4gaW5zYW5lbHkgbGFyZ2UgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuCisgKi8KKworI2RlZmluZSBOT19USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgImRpci5oIgorCitjb25zdCBjaGFyIGdpdF9hdHRyX190cnVlW10gPSAiKGJ1aWx0aW4pdHJ1ZSI7Citjb25zdCBjaGFyIGdpdF9hdHRyX19mYWxzZVtdID0gIlwwKGJ1aWx0aW4pZmFsc2UiOworc3RhdGljIGNvbnN0IGNoYXIgZ2l0X2F0dHJfX3Vua25vd25bXSA9ICIoYnVpbHRpbil1bmtub3duIjsKKyNkZWZpbmUgQVRUUl9fVFJVRSBnaXRfYXR0cl9fdHJ1ZQorI2RlZmluZSBBVFRSX19GQUxTRSBnaXRfYXR0cl9fZmFsc2UKKyNkZWZpbmUgQVRUUl9fVU5TRVQgTlVMTAorI2RlZmluZSBBVFRSX19VTktOT1dOIGdpdF9hdHRyX191bmtub3duCisKKy8qIFRoaXMgaXMgYSByYW5kb21seSBjaG9zZW4gcHJpbWUuICovCisjZGVmaW5lIEhBU0hTSVpFIDI1NworCisjaWZuZGVmIERFQlVHX0FUVFIKKyNkZWZpbmUgREVCVUdfQVRUUiAwCisjZW5kaWYKKworc3RydWN0IGdpdF9hdHRyIHsKKwlzdHJ1Y3QgZ2l0X2F0dHIgKm5leHQ7CisJdW5zaWduZWQgaDsKKwlpbnQgYXR0cl9ucjsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9Oworc3RhdGljIGludCBhdHRyX25yOworCitzdGF0aWMgc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVja19hbGxfYXR0cjsKK3N0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHIgKihnaXRfYXR0cl9oYXNoW0hBU0hTSVpFXSk7CisKK2NoYXIgKmdpdF9hdHRyX25hbWUoc3RydWN0IGdpdF9hdHRyICphdHRyKQoreworCXJldHVybiBhdHRyLT5uYW1lOworfQorCitzdGF0aWMgdW5zaWduZWQgaGFzaF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQoreworCXVuc2lnbmVkIHZhbCA9IDAsIGM7CisKKwl3aGlsZSAobmFtZWxlbi0tKSB7CisJCWMgPSAqbmFtZSsrOworCQl2YWwgPSAoKHZhbCA8PCA3KSB8ICh2YWwgPj4gMjIpKSBeIGM7CisJfQorCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgaW52YWxpZF9hdHRyX25hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisJLyoKKwkgKiBBdHRyaWJ1dGUgbmFtZSBjYW5ub3QgYmVnaW4gd2l0aCAnLScgYW5kIG11c3QgY29uc2lzdCBvZgorCSAqIGNoYXJhY3RlcnMgZnJvbSBbLUEtWmEtejAtOV8uXS4KKwkgKi8KKwlpZiAobmFtZWxlbiA8PSAwIHx8ICpuYW1lID09ICctJykKKwkJcmV0dXJuIC0xOworCXdoaWxlIChuYW1lbGVuLS0pIHsKKwkJY2hhciBjaCA9ICpuYW1lKys7CisJCWlmICghIChjaCA9PSAnLScgfHwgY2ggPT0gJy4nIHx8IGNoID09ICdfJyB8fAorCQkgICAgICAgKCcwJyA8PSBjaCAmJiBjaCA8PSAnOScpIHx8CisJCSAgICAgICAoJ2EnIDw9IGNoICYmIGNoIDw9ICd6JykgfHwKKwkJICAgICAgICgnQScgPD0gY2ggJiYgY2ggPD0gJ1onKSkgKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBnaXRfYXR0ciAqZ2l0X2F0dHJfaW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBodmFsID0gaGFzaF9uYW1lKG5hbWUsIGxlbik7CisJdW5zaWduZWQgcG9zID0gaHZhbCAlIEhBU0hTSVpFOworCXN0cnVjdCBnaXRfYXR0ciAqYTsKKworCWZvciAoYSA9IGdpdF9hdHRyX2hhc2hbcG9zXTsgYTsgYSA9IGEtPm5leHQpIHsKKwkJaWYgKGEtPmggPT0gaHZhbCAmJgorCQkgICAgIW1lbWNtcChhLT5uYW1lLCBuYW1lLCBsZW4pICYmICFhLT5uYW1lW2xlbl0pCisJCQlyZXR1cm4gYTsKKwl9CisKKwlpZiAoaW52YWxpZF9hdHRyX25hbWUobmFtZSwgbGVuKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhID0geG1hbGxvYyhzaXplb2YoKmEpICsgbGVuICsgMSk7CisJbWVtY3B5KGEtPm5hbWUsIG5hbWUsIGxlbik7CisJYS0+bmFtZVtsZW5dID0gMDsKKwlhLT5oID0gaHZhbDsKKwlhLT5uZXh0ID0gZ2l0X2F0dHJfaGFzaFtwb3NdOworCWEtPmF0dHJfbnIgPSBhdHRyX25yKys7CisJZ2l0X2F0dHJfaGFzaFtwb3NdID0gYTsKKworCWNoZWNrX2FsbF9hdHRyID0geHJlYWxsb2MoY2hlY2tfYWxsX2F0dHIsCisJCQkJICBzaXplb2YoKmNoZWNrX2FsbF9hdHRyKSAqIGF0dHJfbnIpOworCWNoZWNrX2FsbF9hdHRyW2EtPmF0dHJfbnJdLmF0dHIgPSBhOworCWNoZWNrX2FsbF9hdHRyW2EtPmF0dHJfbnJdLnZhbHVlID0gQVRUUl9fVU5LTk9XTjsKKwlyZXR1cm4gYTsKK30KKworc3RydWN0IGdpdF9hdHRyICpnaXRfYXR0cihjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBnaXRfYXR0cl9pbnRlcm5hbChuYW1lLCBzdHJsZW4obmFtZSkpOworfQorCisvKiBXaGF0IGRvZXMgYSBtYXRjaGVkIHBhdHRlcm4gZGVjaWRlPyAqLworc3RydWN0IGF0dHJfc3RhdGUgeworCXN0cnVjdCBnaXRfYXR0ciAqYXR0cjsKKwljb25zdCBjaGFyICpzZXR0bzsKK307CisKKy8qCisgKiBPbmUgcnVsZSwgYXMgZnJvbSBhIC5naXRhdHRyaWJ1dGVzIGZpbGUuCisgKgorICogSWYgaXNfbWFjcm8gaXMgdHJ1ZSwgdGhlbiB1LmF0dHIgaXMgYSBwb2ludGVyIHRvIHRoZSBnaXRfYXR0ciBiZWluZworICogZGVmaW5lZC4KKyAqCisgKiBJZiBpc19tYWNybyBpcyBmYWxzZSwgdGhlbiB1LnBhdHRlcm4gcG9pbnRzIGF0IHRoZSBmaWxlbmFtZSBwYXR0ZXJuCisgKiB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLiAgKFRoZSBtZW1vcnkgcG9pbnRlZCB0byBpcyBwYXJ0IG9mIHRoZQorICogbWVtb3J5IGJsb2NrIGFsbG9jYXRlZCBmb3IgdGhlIG1hdGNoX2F0dHIgaW5zdGFuY2UuKQorICoKKyAqIEluIGVpdGhlciBjYXNlLCBudW1fYXR0ciBpcyB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYWZmZWN0ZWQgYnkKKyAqIHRoaXMgcnVsZSwgYW5kIHN0YXRlIGlzIGFuIGFycmF5IGxpc3RpbmcgdGhlbS4gIFRoZSBhdHRyaWJ1dGVzIGFyZQorICogbGlzdGVkIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBmaWxlIChtYWNyb3MgdW5leHBhbmRlZCkuCisgKi8KK3N0cnVjdCBtYXRjaF9hdHRyIHsKKwl1bmlvbiB7CisJCWNoYXIgKnBhdHRlcm47CisJCXN0cnVjdCBnaXRfYXR0ciAqYXR0cjsKKwl9IHU7CisJY2hhciBpc19tYWNybzsKKwl1bnNpZ25lZCBudW1fYXR0cjsKKwlzdHJ1Y3QgYXR0cl9zdGF0ZSBzdGF0ZVtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIGJsYW5rW10gPSAiIFx0XHJcbiI7CisKKy8qCisgKiBQYXJzZSBhIHdoaXRlc3BhY2UtZGVsaW1pdGVkIGF0dHJpYnV0ZSBzdGF0ZSAoaS5lLiwgImF0dHIiLAorICogIi1hdHRyIiwgIiFhdHRyIiwgb3IgImF0dHI9dmFsdWUiKSBmcm9tIHRoZSBzdHJpbmcgc3RhcnRpbmcgYXQgc3JjLgorICogSWYgZSBpcyBub3QgTlVMTCwgd3JpdGUgdGhlIHJlc3VsdHMgdG8gKmUuICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZQorICogcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcgKHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQpLCBvciBOVUxMCisgKiBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpwYXJzZV9hdHRyKGNvbnN0IGNoYXIgKnNyYywgaW50IGxpbmVubywgY29uc3QgY2hhciAqY3AsCisJCQkgICAgICBzdHJ1Y3QgYXR0cl9zdGF0ZSAqZSkKK3sKKwljb25zdCBjaGFyICplcCwgKmVxdWFsczsKKwlpbnQgbGVuOworCisJZXAgPSBjcCArIHN0cmNzcG4oY3AsIGJsYW5rKTsKKwllcXVhbHMgPSBzdHJjaHIoY3AsICc9Jyk7CisJaWYgKGVxdWFscyAmJiBlcCA8IGVxdWFscykKKwkJZXF1YWxzID0gTlVMTDsKKwlpZiAoZXF1YWxzKQorCQlsZW4gPSBlcXVhbHMgLSBjcDsKKwllbHNlCisJCWxlbiA9IGVwIC0gY3A7CisJaWYgKCFlKSB7CisJCWlmICgqY3AgPT0gJy0nIHx8ICpjcCA9PSAnIScpIHsKKwkJCWNwKys7CisJCQlsZW4tLTsKKwkJfQorCQlpZiAoaW52YWxpZF9hdHRyX25hbWUoY3AsIGxlbikpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lOiAlczolZFxuIiwKKwkJCQlsZW4sIGNwLCBzcmMsIGxpbmVubyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgqY3AgPT0gJy0nIHx8ICpjcCA9PSAnIScpIHsKKwkJCWUtPnNldHRvID0gKCpjcCA9PSAnLScpID8gQVRUUl9fRkFMU0UgOiBBVFRSX19VTlNFVDsKKwkJCWNwKys7CisJCQlsZW4tLTsKKwkJfQorCQllbHNlIGlmICghZXF1YWxzKQorCQkJZS0+c2V0dG8gPSBBVFRSX19UUlVFOworCQllbHNlIHsKKwkJCWUtPnNldHRvID0geG1lbWR1cHooZXF1YWxzICsgMSwgZXAgLSBlcXVhbHMgLSAxKTsKKwkJfQorCQllLT5hdHRyID0gZ2l0X2F0dHJfaW50ZXJuYWwoY3AsIGxlbik7CisJfQorCXJldHVybiBlcCArIHN0cnNwbihlcCwgYmxhbmspOworfQorCitzdGF0aWMgc3RydWN0IG1hdGNoX2F0dHIgKnBhcnNlX2F0dHJfbGluZShjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpzcmMsCisJCQkJCSAgaW50IGxpbmVubywgaW50IG1hY3JvX29rKQoreworCWludCBuYW1lbGVuOworCWludCBudW1fYXR0ciwgaTsKKwljb25zdCBjaGFyICpjcCwgKm5hbWUsICpzdGF0ZXM7CisJc3RydWN0IG1hdGNoX2F0dHIgKnJlcyA9IE5VTEw7CisJaW50IGlzX21hY3JvOworCisJY3AgPSBsaW5lICsgc3Ryc3BuKGxpbmUsIGJsYW5rKTsKKwlpZiAoISpjcCB8fCAqY3AgPT0gJyMnKQorCQlyZXR1cm4gTlVMTDsKKwluYW1lID0gY3A7CisJbmFtZWxlbiA9IHN0cmNzcG4obmFtZSwgYmxhbmspOworCWlmIChzdHJsZW4oQVRUUklCVVRFX01BQ1JPX1BSRUZJWCkgPCBuYW1lbGVuICYmCisJICAgICFwcmVmaXhjbXAobmFtZSwgQVRUUklCVVRFX01BQ1JPX1BSRUZJWCkpIHsKKwkJaWYgKCFtYWNyb19vaykgeworCQkJZnByaW50ZihzdGRlcnIsICIlcyBub3QgYWxsb3dlZDogJXM6JWRcbiIsCisJCQkJbmFtZSwgc3JjLCBsaW5lbm8pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaXNfbWFjcm8gPSAxOworCQluYW1lICs9IHN0cmxlbihBVFRSSUJVVEVfTUFDUk9fUFJFRklYKTsKKwkJbmFtZSArPSBzdHJzcG4obmFtZSwgYmxhbmspOworCQluYW1lbGVuID0gc3RyY3NwbihuYW1lLCBibGFuayk7CisJCWlmIChpbnZhbGlkX2F0dHJfbmFtZShuYW1lLCBuYW1lbGVuKSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWU6ICVzOiVkXG4iLAorCQkJCW5hbWVsZW4sIG5hbWUsIHNyYywgbGluZW5vKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCWVsc2UKKwkJaXNfbWFjcm8gPSAwOworCisJc3RhdGVzID0gbmFtZSArIG5hbWVsZW47CisJc3RhdGVzICs9IHN0cnNwbihzdGF0ZXMsIGJsYW5rKTsKKworCS8qIEZpcnN0IHBhc3MgdG8gY291bnQgdGhlIGF0dHJfc3RhdGVzICovCisJZm9yIChjcCA9IHN0YXRlcywgbnVtX2F0dHIgPSAwOyAqY3A7IG51bV9hdHRyKyspIHsKKwkJY3AgPSBwYXJzZV9hdHRyKHNyYywgbGluZW5vLCBjcCwgTlVMTCk7CisJCWlmICghY3ApCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXMgPSB4Y2FsbG9jKDEsCisJCSAgICAgIHNpemVvZigqcmVzKSArCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgYXR0cl9zdGF0ZSkgKiBudW1fYXR0ciArCisJCSAgICAgIChpc19tYWNybyA/IDAgOiBuYW1lbGVuICsgMSkpOworCWlmIChpc19tYWNybykKKwkJcmVzLT51LmF0dHIgPSBnaXRfYXR0cl9pbnRlcm5hbChuYW1lLCBuYW1lbGVuKTsKKwllbHNlIHsKKwkJcmVzLT51LnBhdHRlcm4gPSAoY2hhciAqKSYocmVzLT5zdGF0ZVtudW1fYXR0cl0pOworCQltZW1jcHkocmVzLT51LnBhdHRlcm4sIG5hbWUsIG5hbWVsZW4pOworCQlyZXMtPnUucGF0dGVybltuYW1lbGVuXSA9IDA7CisJfQorCXJlcy0+aXNfbWFjcm8gPSBpc19tYWNybzsKKwlyZXMtPm51bV9hdHRyID0gbnVtX2F0dHI7CisKKwkvKiBTZWNvbmQgcGFzcyB0byBmaWxsIHRoZSBhdHRyX3N0YXRlcyAqLworCWZvciAoY3AgPSBzdGF0ZXMsIGkgPSAwOyAqY3A7IGkrKykgeworCQljcCA9IHBhcnNlX2F0dHIoc3JjLCBsaW5lbm8sIGNwLCAmKHJlcy0+c3RhdGVbaV0pKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogTGlrZSBpbmZvL2V4Y2x1ZGUgYW5kIC5naXRpZ25vcmUsIHRoZSBhdHRyaWJ1dGUgaW5mb3JtYXRpb24gY2FuCisgKiBjb21lIGZyb20gbWFueSBwbGFjZXMuCisgKgorICogKDEpIC5naXRhdHRyaWJ1dGUgZmlsZSBvZiB0aGUgc2FtZSBkaXJlY3Rvcnk7CisgKiAoMikgLmdpdGF0dHJpYnV0ZSBmaWxlIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlmICgxKSBkb2VzIG5vdCBoYXZlCisgKiAgICAgIGFueSBtYXRjaDsgdGhpcyBnb2VzIHJlY3Vyc2l2ZWx5IHVwd2FyZHMsIGp1c3QgbGlrZSAuZ2l0aWdub3JlLgorICogKDMpICRHSVRfRElSL2luZm8vYXR0cmlidXRlcywgd2hpY2ggb3ZlcnJpZGVzIGJvdGggb2YgdGhlIGFib3ZlLgorICoKKyAqIEluIHRoZSBzYW1lIGZpbGUsIGxhdGVyIGVudHJpZXMgb3ZlcnJpZGUgdGhlIGVhcmxpZXIgbWF0Y2gsIHNvIGluIHRoZQorICogZ2xvYmFsIGxpc3QsIHdlIHdvdWxkIGhhdmUgZW50cmllcyBmcm9tIGluZm8vYXR0cmlidXRlcyB0aGUgZWFybGllc3QKKyAqIChyZWFkaW5nIHRoZSBmaWxlIGZyb20gdG9wIHRvIGJvdHRvbSksIC5naXRhdHRyaWJ1dGUgb2YgdGhlIHJvb3QKKyAqIGRpcmVjdG9yeSAoYWdhaW4sIHJlYWRpbmcgdGhlIGZpbGUgZnJvbSB0b3AgdG8gYm90dG9tKSBkb3duIHRvIHRoZQorICogY3VycmVudCBkaXJlY3RvcnksIGFuZCB0aGVuIHNjYW4gdGhlIGxpc3QgYmFja3dhcmRzIHRvIGZpbmQgdGhlIGZpcnN0IG1hdGNoLgorICogVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHdoYXQgZXhjbHVkZWQoKSBkb2VzIGluIGRpci5jIHRvIGRlYWwgd2l0aAorICogLmdpdGlnbm9yZQorICovCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9zdGFjayB7CisJc3RydWN0IGF0dHJfc3RhY2sgKnByZXY7CisJY2hhciAqb3JpZ2luOworCXVuc2lnbmVkIG51bV9tYXRjaGVzOworCXVuc2lnbmVkIGFsbG9jOworCXN0cnVjdCBtYXRjaF9hdHRyICoqYXR0cnM7Cit9ICphdHRyX3N0YWNrOworCitzdGF0aWMgdm9pZCBmcmVlX2F0dHJfZWxlbShzdHJ1Y3QgYXR0cl9zdGFjayAqZSkKK3sKKwlpbnQgaTsKKwlmcmVlKGUtPm9yaWdpbik7CisJZm9yIChpID0gMDsgaSA8IGUtPm51bV9tYXRjaGVzOyBpKyspIHsKKwkJc3RydWN0IG1hdGNoX2F0dHIgKmEgPSBlLT5hdHRyc1tpXTsKKwkJaW50IGo7CisJCWZvciAoaiA9IDA7IGogPCBhLT5udW1fYXR0cjsgaisrKSB7CisJCQljb25zdCBjaGFyICpzZXR0byA9IGEtPnN0YXRlW2pdLnNldHRvOworCQkJaWYgKHNldHRvID09IEFUVFJfX1RSVUUgfHwKKwkJCSAgICBzZXR0byA9PSBBVFRSX19GQUxTRSB8fAorCQkJICAgIHNldHRvID09IEFUVFJfX1VOU0VUIHx8CisJCQkgICAgc2V0dG8gPT0gQVRUUl9fVU5LTk9XTikKKwkJCQk7CisJCQllbHNlCisJCQkJZnJlZSgoY2hhciAqKSBzZXR0byk7CisJCX0KKwkJZnJlZShhKTsKKwl9CisJZnJlZShlLT5hdHRycyk7CisJZnJlZShlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmJ1aWx0aW5fYXR0cltdID0geworCSJbYXR0cl1iaW5hcnkgLWRpZmYgLW1lcmdlIC10ZXh0IiwKKwlOVUxMLAorfTsKKworc3RhdGljIHZvaWQgaGFuZGxlX2F0dHJfbGluZShzdHJ1Y3QgYXR0cl9zdGFjayAqcmVzLAorCQkJICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgICBjb25zdCBjaGFyICpzcmMsCisJCQkgICAgIGludCBsaW5lbm8sCisJCQkgICAgIGludCBtYWNyb19vaykKK3sKKwlzdHJ1Y3QgbWF0Y2hfYXR0ciAqYTsKKworCWEgPSBwYXJzZV9hdHRyX2xpbmUobGluZSwgc3JjLCBsaW5lbm8sIG1hY3JvX29rKTsKKwlpZiAoIWEpCisJCXJldHVybjsKKwlpZiAocmVzLT5hbGxvYyA8PSByZXMtPm51bV9tYXRjaGVzKSB7CisJCXJlcy0+YWxsb2MgPSBhbGxvY19ucihyZXMtPm51bV9tYXRjaGVzKTsKKwkJcmVzLT5hdHRycyA9IHhyZWFsbG9jKHJlcy0+YXR0cnMsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBtYXRjaF9hdHRyICopICoKKwkJCQkgICAgICByZXMtPmFsbG9jKTsKKwl9CisJcmVzLT5hdHRyc1tyZXMtPm51bV9tYXRjaGVzKytdID0gYTsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyX3N0YWNrICpyZWFkX2F0dHJfZnJvbV9hcnJheShjb25zdCBjaGFyICoqbGlzdCkKK3sKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqcmVzOworCWNvbnN0IGNoYXIgKmxpbmU7CisJaW50IGxpbmVubyA9IDA7CisKKwlyZXMgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVzKSk7CisJd2hpbGUgKChsaW5lID0gKihsaXN0KyspKSAhPSBOVUxMKQorCQloYW5kbGVfYXR0cl9saW5lKHJlcywgbGluZSwgIltidWlsdGluXSIsICsrbGluZW5vLCAxKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgZW51bSBnaXRfYXR0cl9kaXJlY3Rpb24gZGlyZWN0aW9uOworc3RhdGljIHN0cnVjdCBpbmRleF9zdGF0ZSAqdXNlX2luZGV4OworCitzdGF0aWMgc3RydWN0IGF0dHJfc3RhY2sgKnJlYWRfYXR0cl9mcm9tX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgaW50IG1hY3JvX29rKQoreworCUZJTEUgKmZwID0gZm9wZW4ocGF0aCwgInIiKTsKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqcmVzOworCWNoYXIgYnVmWzIwNDhdOworCWludCBsaW5lbm8gPSAwOworCisJaWYgKCFmcCkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UICYmIGVycm5vICE9IEVOT1RESVIpCisJCQl3YXJuX29uX2luYWNjZXNzaWJsZShwYXRoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJlcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXMpKTsKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKQorCQloYW5kbGVfYXR0cl9saW5lKHJlcywgYnVmLCBwYXRoLCArK2xpbmVubywgbWFjcm9fb2spOworCWZjbG9zZShmcCk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgKnJlYWRfaW5kZXhfZGF0YShjb25zdCBjaGFyICpwYXRoKQoreworCWludCBwb3MsIGxlbjsKKwl1bnNpZ25lZCBsb25nIHN6OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpkYXRhOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gdXNlX2luZGV4ID8gdXNlX2luZGV4IDogJnRoZV9pbmRleDsKKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIHBhdGgsIGxlbik7CisJaWYgKHBvcyA8IDApIHsKKwkJLyoKKwkJICogV2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLCBpbiB3aGljaAorCQkgKiBjYXNlIHdlIHdvdWxkIHJlYWQgc3RhZ2UgIzIgKG91cnMpLgorCQkgKi8KKwkJaW50IGk7CisJCWZvciAoaSA9IC1wb3MgLSAxOworCQkgICAgIChwb3MgPCAwICYmIGkgPCBpc3RhdGUtPmNhY2hlX25yICYmCisJCSAgICAgICFzdHJjbXAoaXN0YXRlLT5jYWNoZVtpXS0+bmFtZSwgcGF0aCkpOworCQkgICAgIGkrKykKKwkJCWlmIChjZV9zdGFnZShpc3RhdGUtPmNhY2hlW2ldKSA9PSAyKQorCQkJCXBvcyA9IGk7CisJfQorCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlkYXRhID0gcmVhZF9zaGExX2ZpbGUoaXN0YXRlLT5jYWNoZVtwb3NdLT5zaGExLCAmdHlwZSwgJnN6KTsKKwlpZiAoIWRhdGEgfHwgdHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKGRhdGEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9zdGFjayAqcmVhZF9hdHRyX2Zyb21faW5kZXgoY29uc3QgY2hhciAqcGF0aCwgaW50IG1hY3JvX29rKQoreworCXN0cnVjdCBhdHRyX3N0YWNrICpyZXM7CisJY2hhciAqYnVmLCAqc3A7CisJaW50IGxpbmVubyA9IDA7CisKKwlidWYgPSByZWFkX2luZGV4X2RhdGEocGF0aCk7CisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCisJcmVzID0geGNhbGxvYygxLCBzaXplb2YoKnJlcykpOworCWZvciAoc3AgPSBidWY7ICpzcDsgKSB7CisJCWNoYXIgKmVwOworCQlpbnQgbW9yZTsKKwkJZm9yIChlcCA9IHNwOyAqZXAgJiYgKmVwICE9ICdcbic7IGVwKyspCisJCQk7CisJCW1vcmUgPSAoKmVwID09ICdcbicpOworCQkqZXAgPSAnXDAnOworCQloYW5kbGVfYXR0cl9saW5lKHJlcywgc3AsIHBhdGgsICsrbGluZW5vLCBtYWNyb19vayk7CisJCXNwID0gZXAgKyBtb3JlOworCX0KKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyX3N0YWNrICpyZWFkX2F0dHIoY29uc3QgY2hhciAqcGF0aCwgaW50IG1hY3JvX29rKQoreworCXN0cnVjdCBhdHRyX3N0YWNrICpyZXM7CisKKwlpZiAoZGlyZWN0aW9uID09IEdJVF9BVFRSX0NIRUNLT1VUKSB7CisJCXJlcyA9IHJlYWRfYXR0cl9mcm9tX2luZGV4KHBhdGgsIG1hY3JvX29rKTsKKwkJaWYgKCFyZXMpCisJCQlyZXMgPSByZWFkX2F0dHJfZnJvbV9maWxlKHBhdGgsIG1hY3JvX29rKTsKKwl9CisJZWxzZSBpZiAoZGlyZWN0aW9uID09IEdJVF9BVFRSX0NIRUNLSU4pIHsKKwkJcmVzID0gcmVhZF9hdHRyX2Zyb21fZmlsZShwYXRoLCBtYWNyb19vayk7CisJCWlmICghcmVzKQorCQkJLyoKKwkJCSAqIFRoZXJlIGlzIG5vIGNoZWNrZWQgb3V0IC5naXRhdHRyaWJ1dGVzIGZpbGUgdGhlcmUsIGJ1dAorCQkJICogd2UgbWlnaHQgaGF2ZSBpdCBpbiB0aGUgaW5kZXguICBXZSBhbGxvdyBvcGVyYXRpb24gaW4gYQorCQkJICogc3BhcnNlbHkgY2hlY2tlZCBvdXQgd29yayB0cmVlLCBzbyByZWFkIGZyb20gaXQuCisJCQkgKi8KKwkJCXJlcyA9IHJlYWRfYXR0cl9mcm9tX2luZGV4KHBhdGgsIG1hY3JvX29rKTsKKwl9CisJZWxzZQorCQlyZXMgPSByZWFkX2F0dHJfZnJvbV9pbmRleChwYXRoLCBtYWNyb19vayk7CisJaWYgKCFyZXMpCisJCXJlcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXMpKTsKKwlyZXR1cm4gcmVzOworfQorCisjaWYgREVCVUdfQVRUUgorc3RhdGljIHZvaWQgZGVidWdfaW5mbyhjb25zdCBjaGFyICp3aGF0LCBzdHJ1Y3QgYXR0cl9zdGFjayAqZWxlbSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgd2hhdCwgZWxlbS0+b3JpZ2luID8gZWxlbS0+b3JpZ2luIDogIigpIik7Cit9CitzdGF0aWMgdm9pZCBkZWJ1Z19zZXQoY29uc3QgY2hhciAqd2hhdCwgY29uc3QgY2hhciAqbWF0Y2gsIHN0cnVjdCBnaXRfYXR0ciAqYXR0ciwgY29uc3Qgdm9pZCAqdikKK3sKKwljb25zdCBjaGFyICp2YWx1ZSA9IHY7CisKKwlpZiAoQVRUUl9UUlVFKHZhbHVlKSkKKwkJdmFsdWUgPSAic2V0IjsKKwllbHNlIGlmIChBVFRSX0ZBTFNFKHZhbHVlKSkKKwkJdmFsdWUgPSAidW5zZXQiOworCWVsc2UgaWYgKEFUVFJfVU5TRVQodmFsdWUpKQorCQl2YWx1ZSA9ICJ1bnNwZWNpZmllZCI7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlcyA9PiAlcyAoJXMpXG4iLAorCQl3aGF0LCBhdHRyLT5uYW1lLCAoY2hhciAqKSB2YWx1ZSwgbWF0Y2gpOworfQorI2RlZmluZSBkZWJ1Z19wdXNoKGEpIGRlYnVnX2luZm8oInB1c2giLCAoYSkpCisjZGVmaW5lIGRlYnVnX3BvcChhKSBkZWJ1Z19pbmZvKCJwb3AiLCAoYSkpCisjZWxzZQorI2RlZmluZSBkZWJ1Z19wdXNoKGEpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBkZWJ1Z19wb3AoYSkgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRlYnVnX3NldChhLGIsYyxkKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBkcm9wX2F0dHJfc3RhY2sodm9pZCkKK3sKKwl3aGlsZSAoYXR0cl9zdGFjaykgeworCQlzdHJ1Y3QgYXR0cl9zdGFjayAqZWxlbSA9IGF0dHJfc3RhY2s7CisJCWF0dHJfc3RhY2sgPSBlbGVtLT5wcmV2OworCQlmcmVlX2F0dHJfZWxlbShlbGVtKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnaXRfZXRjX2dpdGF0dHJpYnV0ZXModm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqc3lzdGVtX3dpZGU7CisJaWYgKCFzeXN0ZW1fd2lkZSkKKwkJc3lzdGVtX3dpZGUgPSBzeXN0ZW1fcGF0aChFVENfR0lUQVRUUklCVVRFUyk7CisJcmV0dXJuIHN5c3RlbV93aWRlOworfQorCitzdGF0aWMgaW50IGdpdF9hdHRyX3N5c3RlbSh2b2lkKQoreworCXJldHVybiAhZ2l0X2Vudl9ib29sKCJHSVRfQVRUUl9OT1NZU1RFTSIsIDApOworfQorCitzdGF0aWMgdm9pZCBib290c3RyYXBfYXR0cl9zdGFjayh2b2lkKQoreworCXN0cnVjdCBhdHRyX3N0YWNrICplbGVtOworCWNoYXIgKnhkZ19hdHRyaWJ1dGVzX2ZpbGU7CisKKwlpZiAoYXR0cl9zdGFjaykKKwkJcmV0dXJuOworCisJZWxlbSA9IHJlYWRfYXR0cl9mcm9tX2FycmF5KGJ1aWx0aW5fYXR0cik7CisJZWxlbS0+b3JpZ2luID0gTlVMTDsKKwllbGVtLT5wcmV2ID0gYXR0cl9zdGFjazsKKwlhdHRyX3N0YWNrID0gZWxlbTsKKworCWlmIChnaXRfYXR0cl9zeXN0ZW0oKSkgeworCQllbGVtID0gcmVhZF9hdHRyX2Zyb21fZmlsZShnaXRfZXRjX2dpdGF0dHJpYnV0ZXMoKSwgMSk7CisJCWlmIChlbGVtKSB7CisJCQllbGVtLT5vcmlnaW4gPSBOVUxMOworCQkJZWxlbS0+cHJldiA9IGF0dHJfc3RhY2s7CisJCQlhdHRyX3N0YWNrID0gZWxlbTsKKwkJfQorCX0KKworCWlmICghZ2l0X2F0dHJpYnV0ZXNfZmlsZSkgeworCQlob21lX2NvbmZpZ19wYXRocyhOVUxMLCAmeGRnX2F0dHJpYnV0ZXNfZmlsZSwgImF0dHJpYnV0ZXMiKTsKKwkJZ2l0X2F0dHJpYnV0ZXNfZmlsZSA9IHhkZ19hdHRyaWJ1dGVzX2ZpbGU7CisJfQorCWlmIChnaXRfYXR0cmlidXRlc19maWxlKSB7CisJCWVsZW0gPSByZWFkX2F0dHJfZnJvbV9maWxlKGdpdF9hdHRyaWJ1dGVzX2ZpbGUsIDEpOworCQlpZiAoZWxlbSkgeworCQkJZWxlbS0+b3JpZ2luID0gTlVMTDsKKwkJCWVsZW0tPnByZXYgPSBhdHRyX3N0YWNrOworCQkJYXR0cl9zdGFjayA9IGVsZW07CisJCX0KKwl9CisKKwlpZiAoIWlzX2JhcmVfcmVwb3NpdG9yeSgpIHx8IGRpcmVjdGlvbiA9PSBHSVRfQVRUUl9JTkRFWCkgeworCQllbGVtID0gcmVhZF9hdHRyKEdJVEFUVFJJQlVURVNfRklMRSwgMSk7CisJCWVsZW0tPm9yaWdpbiA9IHhzdHJkdXAoIiIpOworCQllbGVtLT5wcmV2ID0gYXR0cl9zdGFjazsKKwkJYXR0cl9zdGFjayA9IGVsZW07CisJCWRlYnVnX3B1c2goZWxlbSk7CisJfQorCisJZWxlbSA9IHJlYWRfYXR0cl9mcm9tX2ZpbGUoZ2l0X3BhdGgoSU5GT0FUVFJJQlVURVNfRklMRSksIDEpOworCWlmICghZWxlbSkKKwkJZWxlbSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplbGVtKSk7CisJZWxlbS0+b3JpZ2luID0gTlVMTDsKKwllbGVtLT5wcmV2ID0gYXR0cl9zdGFjazsKKwlhdHRyX3N0YWNrID0gZWxlbTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9hdHRyX3N0YWNrKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGF0dHJfc3RhY2sgKmVsZW0sICppbmZvOworCWludCBkaXJsZW4sIGxlbjsKKwljb25zdCBjaGFyICpjcDsKKworCWNwID0gc3RycmNocihwYXRoLCAnLycpOworCWlmICghY3ApCisJCWRpcmxlbiA9IDA7CisJZWxzZQorCQlkaXJsZW4gPSBjcCAtIHBhdGg7CisKKwkvKgorCSAqIEF0IHRoZSBib3R0b20gb2YgdGhlIGF0dHJpYnV0ZSBzdGFjayBpcyB0aGUgYnVpbHQtaW4KKwkgKiBzZXQgb2YgYXR0cmlidXRlIGRlZmluaXRpb25zLCBmb2xsb3dlZCBieSB0aGUgY29udGVudHMKKwkgKiBvZiAkKHByZWZpeCkvZXRjL2dpdGF0dHJpYnV0ZXMgYW5kIGEgZmlsZSBzcGVjaWZpZWQgYnkKKwkgKiBjb3JlLmF0dHJpYnV0ZXNmaWxlLiAgVGhlbiwgY29udGVudHMgZnJvbQorCSAqIC5naXRhdHRyaWJ1dGUgZmlsZXMgZnJvbSBkaXJlY3RvcmllcyBjbG9zZXIgdG8gdGhlCisJICogcm9vdCB0byB0aGUgb25lcyBpbiBkZWVwZXIgZGlyZWN0b3JpZXMgYXJlIHB1c2hlZAorCSAqIHRvIHRoZSBzdGFjay4gIEZpbmFsbHksIGF0IHRoZSB2ZXJ5IHRvcCBvZiB0aGUgc3RhY2sKKwkgKiB3ZSBhbHdheXMga2VlcCB0aGUgY29udGVudHMgb2YgJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzLgorCSAqCisJICogV2hlbiBjaGVja2luZywgd2UgdXNlIGVudHJpZXMgZnJvbSBuZWFyIHRoZSB0b3Agb2YgdGhlCisJICogc3RhY2ssIHByZWZlcnJpbmcgJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzLCB0aGVuCisJICogLmdpdGF0dHJpYnV0ZXMgaW4gZGVlcGVyIGRpcmVjdG9yaWVzIHRvIHNoYWxsb3dlciBvbmVzLAorCSAqIGFuZCBmaW5hbGx5IHVzZSB0aGUgYnVpbHQtaW4gc2V0IGFzIHRoZSBkZWZhdWx0LgorCSAqLworCWJvb3RzdHJhcF9hdHRyX3N0YWNrKCk7CisKKwkvKgorCSAqIFBvcCB0aGUgImluZm8iIG9uZSB0aGF0IGlzIGFsd2F5cyBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKwkgKi8KKwlpbmZvID0gYXR0cl9zdGFjazsKKwlhdHRyX3N0YWNrID0gaW5mby0+cHJldjsKKworCS8qCisJICogUG9wIHRoZSBvbmVzIGZyb20gZGlyZWN0b3JpZXMgdGhhdCBhcmUgbm90IHRoZSBwcmVmaXggb2YKKwkgKiB0aGUgcGF0aCB3ZSBhcmUgY2hlY2tpbmcuIEJyZWFrIG91dCBvZiB0aGUgbG9vcCB3aGVuIHdlIHNlZQorCSAqIHRoZSByb290IG9uZSAod2hvc2Ugb3JpZ2luIGlzIGFuIGVtcHR5IHN0cmluZyAiIikgb3IgdGhlIGJ1aWx0aW4KKwkgKiBvbmUgKHdob3NlIG9yaWdpbiBpcyBOVUxMKSB3aXRob3V0IHBvcHBpbmcgaXQuCisJICovCisJd2hpbGUgKGF0dHJfc3RhY2stPm9yaWdpbikgeworCQlpbnQgbmFtZWxlbiA9IHN0cmxlbihhdHRyX3N0YWNrLT5vcmlnaW4pOworCisJCWVsZW0gPSBhdHRyX3N0YWNrOworCQlpZiAobmFtZWxlbiA8PSBkaXJsZW4gJiYKKwkJICAgICFzdHJuY21wKGVsZW0tPm9yaWdpbiwgcGF0aCwgbmFtZWxlbikgJiYKKwkJICAgICghbmFtZWxlbiB8fCBwYXRoW25hbWVsZW5dID09ICcvJykpCisJCQlicmVhazsKKworCQlkZWJ1Z19wb3AoZWxlbSk7CisJCWF0dHJfc3RhY2sgPSBlbGVtLT5wcmV2OworCQlmcmVlX2F0dHJfZWxlbShlbGVtKTsKKwl9CisKKwkvKgorCSAqIFJlYWQgZnJvbSBwYXJlbnQgZGlyZWN0b3JpZXMgYW5kIHB1c2ggdGhlbSBkb3duCisJICovCisJaWYgKCFpc19iYXJlX3JlcG9zaXRvcnkoKSB8fCBkaXJlY3Rpb24gPT0gR0lUX0FUVFJfSU5ERVgpIHsKKwkJLyoKKwkJICogYm9vdHN0cmFwX2F0dHJfc3RhY2soKSBzaG91bGQgaGF2ZSBhZGRlZCwgYW5kIHRoZQorCQkgKiBhYm92ZSBsb29wIHNob3VsZCBoYXZlIHN0b3BwZWQgYmVmb3JlIHBvcHBpbmcsIHRoZQorCQkgKiByb290IGVsZW1lbnQgd2hvc2UgYXR0cl9zdGFjay0+b3JpZ2luIGlzIHNldCB0byBhbgorCQkgKiBlbXB0eSBzdHJpbmcuCisJCSAqLworCQlzdHJ1Y3Qgc3RyYnVmIHBhdGhidWYgPSBTVFJCVUZfSU5JVDsKKworCQlhc3NlcnQoYXR0cl9zdGFjay0+b3JpZ2luKTsKKwkJd2hpbGUgKDEpIHsKKwkJCWxlbiA9IHN0cmxlbihhdHRyX3N0YWNrLT5vcmlnaW4pOworCQkJaWYgKGRpcmxlbiA8PSBsZW4pCisJCQkJYnJlYWs7CisJCQljcCA9IG1lbWNocihwYXRoICsgbGVuICsgMSwgJy8nLCBkaXJsZW4gLSBsZW4gLSAxKTsKKwkJCWlmICghY3ApCisJCQkJY3AgPSBwYXRoICsgZGlybGVuOworCQkJc3RyYnVmX2FkZCgmcGF0aGJ1ZiwgcGF0aCwgY3AgLSBwYXRoKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmcGF0aGJ1ZiwgJy8nKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnBhdGhidWYsIEdJVEFUVFJJQlVURVNfRklMRSk7CisJCQllbGVtID0gcmVhZF9hdHRyKHBhdGhidWYuYnVmLCAwKTsKKwkJCXN0cmJ1Zl9zZXRsZW4oJnBhdGhidWYsIGNwIC0gcGF0aCk7CisJCQllbGVtLT5vcmlnaW4gPSBzdHJidWZfZGV0YWNoKCZwYXRoYnVmLCBOVUxMKTsKKwkJCWVsZW0tPnByZXYgPSBhdHRyX3N0YWNrOworCQkJYXR0cl9zdGFjayA9IGVsZW07CisJCQlkZWJ1Z19wdXNoKGVsZW0pOworCQl9CisKKwkJc3RyYnVmX3JlbGVhc2UoJnBhdGhidWYpOworCX0KKworCS8qCisJICogRmluYWxseSBwdXNoIHRoZSAiaW5mbyIgb25lIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorCSAqLworCWluZm8tPnByZXYgPSBhdHRyX3N0YWNrOworCWF0dHJfc3RhY2sgPSBpbmZvOworfQorCitzdGF0aWMgaW50IHBhdGhfbWF0Y2hlcyhjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IHBhdGhsZW4sCisJCQljb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4pCit7CisJaWYgKCFzdHJjaHIocGF0dGVybiwgJy8nKSkgeworCQkvKiBtYXRjaCBiYXNlbmFtZSAqLworCQljb25zdCBjaGFyICpiYXNlbmFtZSA9IHN0cnJjaHIocGF0aG5hbWUsICcvJyk7CisJCWJhc2VuYW1lID0gYmFzZW5hbWUgPyBiYXNlbmFtZSArIDEgOiBwYXRobmFtZTsKKwkJcmV0dXJuIChmbm1hdGNoX2ljYXNlKHBhdHRlcm4sIGJhc2VuYW1lLCAwKSA9PSAwKTsKKwl9CisJLyoKKwkgKiBtYXRjaCB3aXRoIEZOTV9QQVRITkFNRTsgdGhlIHBhdHRlcm4gaGFzIGJhc2UgaW1wbGljaXRseQorCSAqIGluIGZyb250IG9mIGl0LgorCSAqLworCWlmICgqcGF0dGVybiA9PSAnLycpCisJCXBhdHRlcm4rKzsKKwlpZiAocGF0aGxlbiA8IGJhc2VsZW4gfHwKKwkgICAgKGJhc2VsZW4gJiYgcGF0aG5hbWVbYmFzZWxlbl0gIT0gJy8nKSB8fAorCSAgICBzdHJuY21wKHBhdGhuYW1lLCBiYXNlLCBiYXNlbGVuKSkKKwkJcmV0dXJuIDA7CisJaWYgKGJhc2VsZW4gIT0gMCkKKwkJYmFzZWxlbisrOworCXJldHVybiBmbm1hdGNoX2ljYXNlKHBhdHRlcm4sIHBhdGhuYW1lICsgYmFzZWxlbiwgRk5NX1BBVEhOQU1FKSA9PSAwOworfQorCitzdGF0aWMgaW50IG1hY3JvZXhwYW5kX29uZShpbnQgYXR0cl9uciwgaW50IHJlbSk7CisKK3N0YXRpYyBpbnQgZmlsbF9vbmUoY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IG1hdGNoX2F0dHIgKmEsIGludCByZW0pCit7CisJc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjayA9IGNoZWNrX2FsbF9hdHRyOworCWludCBpOworCisJZm9yIChpID0gYS0+bnVtX2F0dHIgLSAxOyAwIDwgcmVtICYmIDAgPD0gaTsgaS0tKSB7CisJCXN0cnVjdCBnaXRfYXR0ciAqYXR0ciA9IGEtPnN0YXRlW2ldLmF0dHI7CisJCWNvbnN0IGNoYXIgKipuID0gJihjaGVja1thdHRyLT5hdHRyX25yXS52YWx1ZSk7CisJCWNvbnN0IGNoYXIgKnYgPSBhLT5zdGF0ZVtpXS5zZXR0bzsKKworCQlpZiAoKm4gPT0gQVRUUl9fVU5LTk9XTikgeworCQkJZGVidWdfc2V0KHdoYXQsCisJCQkJICBhLT5pc19tYWNybyA/IGEtPnUuYXR0ci0+bmFtZSA6IGEtPnUucGF0dGVybiwKKwkJCQkgIGF0dHIsIHYpOworCQkJKm4gPSB2OworCQkJcmVtLS07CisJCQlyZW0gPSBtYWNyb2V4cGFuZF9vbmUoYXR0ci0+YXR0cl9uciwgcmVtKTsKKwkJfQorCX0KKwlyZXR1cm4gcmVtOworfQorCitzdGF0aWMgaW50IGZpbGwoY29uc3QgY2hhciAqcGF0aCwgaW50IHBhdGhsZW4sIHN0cnVjdCBhdHRyX3N0YWNrICpzdGssIGludCByZW0pCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqYmFzZSA9IHN0ay0+b3JpZ2luID8gc3RrLT5vcmlnaW4gOiAiIjsKKworCWZvciAoaSA9IHN0ay0+bnVtX21hdGNoZXMgLSAxOyAwIDwgcmVtICYmIDAgPD0gaTsgaS0tKSB7CisJCXN0cnVjdCBtYXRjaF9hdHRyICphID0gc3RrLT5hdHRyc1tpXTsKKwkJaWYgKGEtPmlzX21hY3JvKQorCQkJY29udGludWU7CisJCWlmIChwYXRoX21hdGNoZXMocGF0aCwgcGF0aGxlbiwKKwkJCQkgYS0+dS5wYXR0ZXJuLCBiYXNlLCBzdHJsZW4oYmFzZSkpKQorCQkJcmVtID0gZmlsbF9vbmUoImZpbGwiLCBhLCByZW0pOworCX0KKwlyZXR1cm4gcmVtOworfQorCitzdGF0aWMgaW50IG1hY3JvZXhwYW5kX29uZShpbnQgYXR0cl9uciwgaW50IHJlbSkKK3sKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqc3RrOworCXN0cnVjdCBtYXRjaF9hdHRyICphID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChjaGVja19hbGxfYXR0clthdHRyX25yXS52YWx1ZSAhPSBBVFRSX19UUlVFKQorCQlyZXR1cm4gcmVtOworCisJZm9yIChzdGsgPSBhdHRyX3N0YWNrOyAhYSAmJiBzdGs7IHN0ayA9IHN0ay0+cHJldikKKwkJZm9yIChpID0gc3RrLT5udW1fbWF0Y2hlcyAtIDE7ICFhICYmIDAgPD0gaTsgaS0tKSB7CisJCQlzdHJ1Y3QgbWF0Y2hfYXR0ciAqbWEgPSBzdGstPmF0dHJzW2ldOworCQkJaWYgKCFtYS0+aXNfbWFjcm8pCisJCQkJY29udGludWU7CisJCQlpZiAobWEtPnUuYXR0ci0+YXR0cl9uciA9PSBhdHRyX25yKQorCQkJCWEgPSBtYTsKKwkJfQorCisJaWYgKGEpCisJCXJlbSA9IGZpbGxfb25lKCJleHBhbmQiLCBhLCByZW0pOworCisJcmV0dXJuIHJlbTsKK30KKworLyoKKyAqIENvbGxlY3QgYWxsIGF0dHJpYnV0ZXMgZm9yIHBhdGggaW50byB0aGUgYXJyYXkgcG9pbnRlZCB0byBieQorICogY2hlY2tfYWxsX2F0dHIuCisgKi8KK3N0YXRpYyB2b2lkIGNvbGxlY3RfYWxsX2F0dHJzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGF0dHJfc3RhY2sgKnN0azsKKwlpbnQgaSwgcGF0aGxlbiwgcmVtOworCisJcHJlcGFyZV9hdHRyX3N0YWNrKHBhdGgpOworCWZvciAoaSA9IDA7IGkgPCBhdHRyX25yOyBpKyspCisJCWNoZWNrX2FsbF9hdHRyW2ldLnZhbHVlID0gQVRUUl9fVU5LTk9XTjsKKworCXBhdGhsZW4gPSBzdHJsZW4ocGF0aCk7CisJcmVtID0gYXR0cl9ucjsKKwlmb3IgKHN0ayA9IGF0dHJfc3RhY2s7IDAgPCByZW0gJiYgc3RrOyBzdGsgPSBzdGstPnByZXYpCisJCXJlbSA9IGZpbGwocGF0aCwgcGF0aGxlbiwgc3RrLCByZW0pOworfQorCitpbnQgZ2l0X2NoZWNrX2F0dHIoY29uc3QgY2hhciAqcGF0aCwgaW50IG51bSwgc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjaykKK3sKKwlpbnQgaTsKKworCWNvbGxlY3RfYWxsX2F0dHJzKHBhdGgpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2tfYWxsX2F0dHJbY2hlY2tbaV0uYXR0ci0+YXR0cl9ucl0udmFsdWU7CisJCWlmICh2YWx1ZSA9PSBBVFRSX19VTktOT1dOKQorCQkJdmFsdWUgPSBBVFRSX19VTlNFVDsKKwkJY2hlY2tbaV0udmFsdWUgPSB2YWx1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9hbGxfYXR0cnMoY29uc3QgY2hhciAqcGF0aCwgaW50ICpudW0sIHN0cnVjdCBnaXRfYXR0cl9jaGVjayAqKmNoZWNrKQoreworCWludCBpLCBjb3VudCwgajsKKworCWNvbGxlY3RfYWxsX2F0dHJzKHBhdGgpOworCisJLyogQ291bnQgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNldC4gKi8KKwljb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGF0dHJfbnI7IGkrKykgeworCQljb25zdCBjaGFyICp2YWx1ZSA9IGNoZWNrX2FsbF9hdHRyW2ldLnZhbHVlOworCQlpZiAodmFsdWUgIT0gQVRUUl9fVU5TRVQgJiYgdmFsdWUgIT0gQVRUUl9fVU5LTk9XTikKKwkJCSsrY291bnQ7CisJfQorCSpudW0gPSBjb3VudDsKKwkqY2hlY2sgPSB4bWFsbG9jKHNpemVvZigqKmNoZWNrKSAqIGNvdW50KTsKKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgYXR0cl9ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2tfYWxsX2F0dHJbaV0udmFsdWU7CisJCWlmICh2YWx1ZSAhPSBBVFRSX19VTlNFVCAmJiB2YWx1ZSAhPSBBVFRSX19VTktOT1dOKSB7CisJCQkoKmNoZWNrKVtqXS5hdHRyID0gY2hlY2tfYWxsX2F0dHJbaV0uYXR0cjsKKwkJCSgqY2hlY2spW2pdLnZhbHVlID0gdmFsdWU7CisJCQkrK2o7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBnaXRfYXR0cl9zZXRfZGlyZWN0aW9uKGVudW0gZ2l0X2F0dHJfZGlyZWN0aW9uIG5ldywgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJZW51bSBnaXRfYXR0cl9kaXJlY3Rpb24gb2xkID0gZGlyZWN0aW9uOworCisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeSgpICYmIG5ldyAhPSBHSVRfQVRUUl9JTkRFWCkKKwkJZGllKCJCVUc6IG5vbi1JTkRFWCBhdHRyIGRpcmVjdGlvbiBpbiBhIGJhcmUgcmVwbyIpOworCisJZGlyZWN0aW9uID0gbmV3OworCWlmIChuZXcgIT0gb2xkKQorCQlkcm9wX2F0dHJfc3RhY2soKTsKKwl1c2VfaW5kZXggPSBpc3RhdGU7Cit9CmRpZmYgLS1naXQgYS9hdHRyLmggYi9hdHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwOGQzMwotLS0gL2Rldi9udWxsCisrKyBiL2F0dHIuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIEFUVFJfSAorI2RlZmluZSBBVFRSX0gKKworLyogQW4gYXR0cmlidXRlIGlzIGEgcG9pbnRlciB0byB0aGlzIG9wYXF1ZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBnaXRfYXR0cjsKKworLyoKKyAqIEdpdmVuIGEgc3RyaW5nLCByZXR1cm4gdGhlIGdpdGF0dHJpYnV0ZSBvYmplY3QgdGhhdAorICogY29ycmVzcG9uZHMgdG8gaXQuCisgKi8KK3N0cnVjdCBnaXRfYXR0ciAqZ2l0X2F0dHIoY29uc3QgY2hhciAqKTsKKworLyogSW50ZXJuYWwgdXNlICovCitleHRlcm4gY29uc3QgY2hhciBnaXRfYXR0cl9fdHJ1ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X2F0dHJfX2ZhbHNlW107CisKKy8qIEZvciBwdWJsaWMgdG8gY2hlY2sgZ2l0X2F0dHJfY2hlY2sgcmVzdWx0cyAqLworI2RlZmluZSBBVFRSX1RSVUUodikgKCh2KSA9PSBnaXRfYXR0cl9fdHJ1ZSkKKyNkZWZpbmUgQVRUUl9GQUxTRSh2KSAoKHYpID09IGdpdF9hdHRyX19mYWxzZSkKKyNkZWZpbmUgQVRUUl9VTlNFVCh2KSAoKHYpID09IE5VTEwpCisKKy8qCisgKiBTZW5kIG9uZSBvciBtb3JlIGdpdF9hdHRyX2NoZWNrIHRvIGdpdF9jaGVja19hdHRyKCksIGFuZAorICogZWFjaCAndmFsdWUnIG1lbWJlciB0ZWxscyB3aGF0IGl0cyB2YWx1ZSBpcy4KKyAqIFVuc2V0IG9uZSBpcyByZXR1cm5lZCBhcyBOVUxMLgorICovCitzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgeworCXN0cnVjdCBnaXRfYXR0ciAqYXR0cjsKKwljb25zdCBjaGFyICp2YWx1ZTsKK307CisKKy8qCisgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSByZXByZXNlbnRlZCBieSB0aGUgYXJndW1lbnQuICBUaGUKKyAqIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBudWxsLWRlbGltaXRlZCBzdHJpbmcgdGhhdCBpcyBwYXJ0CisgKiBvZiB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmU7IGl0IHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NoYXIgKmdpdF9hdHRyX25hbWUoc3RydWN0IGdpdF9hdHRyICopOworCitpbnQgZ2l0X2NoZWNrX2F0dHIoY29uc3QgY2hhciAqcGF0aCwgaW50LCBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKik7CisKKy8qCisgKiBSZXRyaWV2ZSBhbGwgYXR0cmlidXRlcyB0aGF0IGFwcGx5IHRvIHRoZSBzcGVjaWZpZWQgcGF0aC4gICpudW0KKyAqIHdpbGwgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBvbiB0aGUgcGF0aDsgKipjaGVjayB3aWxsCisgKiBiZSBzZXQgdG8gcG9pbnQgYXQgYSBuZXdseS1hbGxvY2F0ZWQgYXJyYXkgb2YgZ2l0X2F0dHJfY2hlY2sKKyAqIG9iamVjdHMgZGVzY3JpYmluZyB0aGUgYXR0cmlidXRlcyBhbmQgdGhlaXIgdmFsdWVzLiAgKmNoZWNrIG11c3QgYmUKKyAqIGZyZWUoKWVkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK2ludCBnaXRfYWxsX2F0dHJzKGNvbnN0IGNoYXIgKnBhdGgsIGludCAqbnVtLCBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKipjaGVjayk7CisKK2VudW0gZ2l0X2F0dHJfZGlyZWN0aW9uIHsKKwlHSVRfQVRUUl9DSEVDS0lOLAorCUdJVF9BVFRSX0NIRUNLT1VULAorCUdJVF9BVFRSX0lOREVYCit9Owordm9pZCBnaXRfYXR0cl9zZXRfZGlyZWN0aW9uKGVudW0gZ2l0X2F0dHJfZGlyZWN0aW9uLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7CisKKyNlbmRpZiAvKiBBVFRSX0ggKi8KZGlmZiAtLWdpdCBhL2Jhc2U4NS5jIGIvYmFzZTg1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxYjU3NQotLS0gL2Rldi9udWxsCisrKyBiL2Jhc2U4NS5jCkBAIC0wLDAgKzEsMTMyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworI3VuZGVmIERFQlVHXzg1CisKKyNpZmRlZiBERUJVR184NQorI2RlZmluZSBzYXkoYSkgZnByaW50ZihzdGRlcnIsIGEpCisjZGVmaW5lIHNheTEoYSxiKSBmcHJpbnRmKHN0ZGVyciwgYSwgYikKKyNkZWZpbmUgc2F5MihhLGIsYykgZnByaW50ZihzdGRlcnIsIGEsIGIsIGMpCisjZWxzZQorI2RlZmluZSBzYXkoYSkgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZGVmaW5lIHNheTEoYSxiKSBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2F5MihhLGIsYykgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgZW44NVtdID0geworCScwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKKwknQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsCisJJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLAorCSdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWicsCisJJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLAorCSdrJywgJ2wnLCAnbScsICduJywgJ28nLCAncCcsICdxJywgJ3InLCAncycsICd0JywKKwkndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLAorCSchJywgJyMnLCAnJCcsICclJywgJyYnLCAnKCcsICcpJywgJyonLCAnKycsICctJywKKwknOycsICc8JywgJz0nLCAnPicsICc/JywgJ0AnLCAnXicsICdfJywJJ2AnLCAneycsCisJJ3wnLCAnfScsICd+JworfTsKKworc3RhdGljIGNoYXIgZGU4NVsyNTZdOworc3RhdGljIHZvaWQgcHJlcF9iYXNlODUodm9pZCkKK3sKKwlpbnQgaTsKKwlpZiAoZGU4NVsnWiddKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW44NSk7IGkrKykgeworCQlpbnQgY2ggPSBlbjg1W2ldOworCQlkZTg1W2NoXSA9IGkgKyAxOworCX0KK30KKworaW50IGRlY29kZV84NShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKK3sKKwlwcmVwX2Jhc2U4NSgpOworCisJc2F5MigiZGVjb2RlIDg1IDwlLipzPiIsIGxlbi80KjUsIGJ1ZmZlcik7CisJd2hpbGUgKGxlbikgeworCQl1bnNpZ25lZCBhY2MgPSAwOworCQlpbnQgZGUsIGNudCA9IDQ7CisJCXVuc2lnbmVkIGNoYXIgY2g7CisJCWRvIHsKKwkJCWNoID0gKmJ1ZmZlcisrOworCQkJZGUgPSBkZTg1W2NoXTsKKwkJCWlmICgtLWRlIDwgMCkKKwkJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgYmFzZTg1IGFscGhhYmV0ICVjIiwgY2gpOworCQkJYWNjID0gYWNjICogODUgKyBkZTsKKwkJfSB3aGlsZSAoLS1jbnQpOworCQljaCA9ICpidWZmZXIrKzsKKwkJZGUgPSBkZTg1W2NoXTsKKwkJaWYgKC0tZGUgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGJhc2U4NSBhbHBoYWJldCAlYyIsIGNoKTsKKwkJLyogRGV0ZWN0IG92ZXJmbG93LiAqLworCQlpZiAoMHhmZmZmZmZmZiAvIDg1IDwgYWNjIHx8CisJCSAgICAweGZmZmZmZmZmIC0gZGUgPCAoYWNjICo9IDg1KSkKKwkJCXJldHVybiBlcnJvcigiaW52YWxpZCBiYXNlODUgc2VxdWVuY2UgJS41cyIsIGJ1ZmZlci01KTsKKwkJYWNjICs9IGRlOworCQlzYXkxKCIgJTA4eCIsIGFjYyk7CisKKwkJY250ID0gKGxlbiA8IDQpID8gbGVuIDogNDsKKwkJbGVuIC09IGNudDsKKwkJZG8geworCQkJYWNjID0gKGFjYyA8PCA4KSB8IChhY2MgPj4gMjQpOworCQkJKmRzdCsrID0gYWNjOworCQl9IHdoaWxlICgtLWNudCk7CisJfQorCXNheSgiXG4iKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGVuY29kZV84NShjaGFyICpidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBieXRlcykKK3sKKwlzYXkoImVuY29kZSA4NSIpOworCXdoaWxlIChieXRlcykgeworCQl1bnNpZ25lZCBhY2MgPSAwOworCQlpbnQgY250OworCQlmb3IgKGNudCA9IDI0OyBjbnQgPj0gMDsgY250IC09IDgpIHsKKwkJCXVuc2lnbmVkIGNoID0gKmRhdGErKzsKKwkJCWFjYyB8PSBjaCA8PCBjbnQ7CisJCQlpZiAoLS1ieXRlcyA9PSAwKQorCQkJCWJyZWFrOworCQl9CisJCXNheTEoIiAlMDh4IiwgYWNjKTsKKwkJZm9yIChjbnQgPSA0OyBjbnQgPj0gMDsgY250LS0pIHsKKwkJCWludCB2YWwgPSBhY2MgJSA4NTsKKwkJCWFjYyAvPSA4NTsKKwkJCWJ1ZltjbnRdID0gZW44NVt2YWxdOworCQl9CisJCWJ1ZiArPSA1OworCX0KKwlzYXkoIlxuIik7CisKKwkqYnVmID0gMDsKK30KKworI2lmZGVmIERFQlVHXzg1CitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwljaGFyIGJ1ZlsxMDI0XTsKKworCWlmICghc3RyY21wKGF2WzFdLCAiLWUiKSkgeworCQlpbnQgbGVuID0gc3RybGVuKGF2WzJdKTsKKwkJZW5jb2RlXzg1KGJ1ZiwgYXZbMl0sIGxlbik7CisJCWlmIChsZW4gPD0gMjYpIGxlbiA9IGxlbiArICdBJyAtIDE7CisJCWVsc2UgbGVuID0gbGVuICsgJ2EnIC0gMjYgLSAxOworCQlwcmludGYoImVuY29kZWQ6ICVjJXNcbiIsIGxlbiwgYnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGF2WzFdLCAiLWQiKSkgeworCQlpbnQgbGVuID0gKmF2WzJdOworCQlpZiAoJ0EnIDw9IGxlbiAmJiBsZW4gPD0gJ1onKSBsZW4gPSBsZW4gLSAnQScgKyAxOworCQllbHNlIGxlbiA9IGxlbiAtICdhJyArIDI2ICsgMTsKKwkJZGVjb2RlXzg1KGJ1ZiwgYXZbMl0rMSwgbGVuKTsKKwkJcHJpbnRmKCJkZWNvZGVkOiAlLipzXG4iLCBsZW4sIGJ1Zik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChhdlsxXSwgIi10IikpIHsKKwkJY2hhciB0WzRdID0geyAtMSwtMSwtMSwtMSB9OworCQllbmNvZGVfODUoYnVmLCB0LCA0KTsKKwkJcHJpbnRmKCJlbmNvZGVkOiBEJXNcbiIsIGJ1Zik7CisJCXJldHVybiAwOworCX0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYmlzZWN0LmMgYi9iaXNlY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWFkNDliCi0tLSAvZGV2L251bGwKKysrIGIvYmlzZWN0LmMKQEAgLTAsMCArMSw5NTggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImJpc2VjdC5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc2hhMV9hcnJheSBnb29kX3JldnM7CitzdGF0aWMgc3RydWN0IHNoYTFfYXJyYXkgc2tpcHBlZF9yZXZzOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY3VycmVudF9iYWRfc2hhMTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZfY2hlY2tvdXRbXSA9IHsiY2hlY2tvdXQiLCAiLXEiLCBOVUxMLCAiLS0iLCBOVUxMfTsKK3N0YXRpYyBjb25zdCBjaGFyICphcmd2X3Nob3dfYnJhbmNoW10gPSB7InNob3ctYnJhbmNoIiwgTlVMTCwgTlVMTH07CitzdGF0aWMgY29uc3QgY2hhciAqYXJndl91cGRhdGVfcmVmW10gPSB7InVwZGF0ZS1yZWYiLCAiLS1uby1kZXJlZiIsICJCSVNFQ1RfSEVBRCIsIE5VTEwsIE5VTEx9OworCisvKiBiaXRzICMwLTE1IGluIHJldmlzaW9uLmggKi8KKworI2RlZmluZSBDT1VOVEVECQkoMXU8PDE2KQorCisvKgorICogVGhpcyBpcyBhIHRydWx5IHN0dXBpZCBhbGdvcml0aG0sIGJ1dCBpdCdzIG9ubHkKKyAqIHVzZWQgZm9yIGJpc2VjdGlvbiwgYW5kIHdlIGp1c3QgZG9uJ3QgY2FyZSBlbm91Z2guCisgKgorICogV2UgY2FyZSBqdXN0IGJhcmVseSBlbm91Z2ggdG8gYXZvaWQgcmVjdXJzaW5nIGZvcgorICogbm9uLW1lcmdlIGVudHJpZXMuCisgKi8KK3N0YXRpYyBpbnQgY291bnRfZGlzdGFuY2Uoc3RydWN0IGNvbW1pdF9saXN0ICplbnRyeSkKK3sKKwlpbnQgbnIgPSAwOworCisJd2hpbGUgKGVudHJ5KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGVudHJ5LT5pdGVtOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBDT1VOVEVEKSkKKwkJCWJyZWFrOworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkKKwkJCW5yKys7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IENPVU5URUQ7CisJCXAgPSBjb21taXQtPnBhcmVudHM7CisJCWVudHJ5ID0gcDsKKwkJaWYgKHApIHsKKwkJCXAgPSBwLT5uZXh0OworCQkJd2hpbGUgKHApIHsKKwkJCQluciArPSBjb3VudF9kaXN0YW5jZShwKTsKKwkJCQlwID0gcC0+bmV4dDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBucjsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfZGlzdGFuY2Uoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5DT1VOVEVEOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9Cit9CisKKyNkZWZpbmUgREVCVUdfQklTRUNUIDAKKworc3RhdGljIGlubGluZSBpbnQgd2VpZ2h0KHN0cnVjdCBjb21taXRfbGlzdCAqZWxlbSkKK3sKKwlyZXR1cm4gKigoaW50KikoZWxlbS0+aXRlbS0+dXRpbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2VpZ2h0X3NldChzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW0sIGludCB3ZWlnaHQpCit7CisJKigoaW50KikoZWxlbS0+aXRlbS0+dXRpbCkpID0gd2VpZ2h0OworfQorCitzdGF0aWMgaW50IGNvdW50X2ludGVyZXN0aW5nX3BhcmVudHMoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlpbnQgY291bnQ7CisKKwlmb3IgKGNvdW50ID0gMCwgcCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPml0ZW0tPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQljb250aW51ZTsKKwkJY291bnQrKzsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW5saW5lIGludCBoYWxmd2F5KHN0cnVjdCBjb21taXRfbGlzdCAqcCwgaW50IG5yKQoreworCS8qCisJICogRG9uJ3Qgc2hvcnQtY3V0IHNvbWV0aGluZyB3ZSBhcmUgbm90IGdvaW5nIHRvIHJldHVybiEKKwkgKi8KKwlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpCisJCXJldHVybiAwOworCWlmIChERUJVR19CSVNFQ1QpCisJCXJldHVybiAwOworCS8qCisJICogMiBhbmQgMyBhcmUgaGFsZndheSBvZiA1LgorCSAqIDMgaXMgaGFsZndheSBvZiA2IGJ1dCAyIGFuZCA0IGFyZSBub3QuCisJICovCisJc3dpdGNoICgyICogd2VpZ2h0KHApIC0gbnIpIHsKKwljYXNlIC0xOiBjYXNlIDA6IGNhc2UgMToKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCisjaWYgIURFQlVHX0JJU0VDVAorI2RlZmluZSBzaG93X2xpc3QoYSxiLGMsZCkgZG8geyA7IH0gd2hpbGUgKDApCisjZWxzZQorc3RhdGljIHZvaWQgc2hvd19saXN0KGNvbnN0IGNoYXIgKmRlYnVnLCBpbnQgY291bnRlZCwgaW50IG5yLAorCQkgICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJZnByaW50ZihzdGRlcnIsICIlcyAoJWQvJWQpXG4iLCBkZWJ1ZywgY291bnRlZCwgbnIpOworCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwcDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKKwkJdW5zaWduZWQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFnczsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWNoYXIgKmJ1ZiA9IHJlYWRfc2hhMV9maWxlKGNvbW1pdC0+b2JqZWN0LnNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJCWNvbnN0IGNoYXIgKnN1YmplY3Rfc3RhcnQ7CisJCWludCBzdWJqZWN0X2xlbjsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiVjJWMlYyAiLAorCQkJKGZsYWdzICYgVFJFRVNBTUUpID8gJyAnIDogJ1QnLAorCQkJKGZsYWdzICYgVU5JTlRFUkVTVElORykgPyAnVScgOiAnICcsCisJCQkoZmxhZ3MgJiBDT1VOVEVEKSA/ICdDJyA6ICcgJyk7CisJCWlmIChjb21taXQtPnV0aWwpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiUzZCIsIHdlaWdodChwKSk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiLS0tIik7CisJCWZwcmludGYoc3RkZXJyLCAiICUuKnMiLCA4LCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCWZvciAocHAgPSBjb21taXQtPnBhcmVudHM7IHBwOyBwcCA9IHBwLT5uZXh0KQorCQkJZnByaW50ZihzdGRlcnIsICIgJS4qcyIsIDgsCisJCQkJc2hhMV90b19oZXgocHAtPml0ZW0tPm9iamVjdC5zaGExKSk7CisKKwkJc3ViamVjdF9sZW4gPSBmaW5kX2NvbW1pdF9zdWJqZWN0KGJ1ZiwgJnN1YmplY3Rfc3RhcnQpOworCQlpZiAoc3ViamVjdF9sZW4pCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlLipzIiwgc3ViamVjdF9sZW4sIHN1YmplY3Rfc3RhcnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJfQorfQorI2VuZGlmIC8qIERFQlVHX0JJU0VDVCAqLworCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpiZXN0X2Jpc2VjdGlvbihzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIGludCBucikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnAsICpiZXN0OworCWludCBiZXN0X2Rpc3RhbmNlID0gLTE7CisKKwliZXN0ID0gbGlzdDsKKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpbnQgZGlzdGFuY2U7CisJCXVuc2lnbmVkIGZsYWdzID0gcC0+aXRlbS0+b2JqZWN0LmZsYWdzOworCisJCWlmIChmbGFncyAmIFRSRUVTQU1FKQorCQkJY29udGludWU7CisJCWRpc3RhbmNlID0gd2VpZ2h0KHApOworCQlpZiAobnIgLSBkaXN0YW5jZSA8IGRpc3RhbmNlKQorCQkJZGlzdGFuY2UgPSBuciAtIGRpc3RhbmNlOworCQlpZiAoZGlzdGFuY2UgPiBiZXN0X2Rpc3RhbmNlKSB7CisJCQliZXN0ID0gcDsKKwkJCWJlc3RfZGlzdGFuY2UgPSBkaXN0YW5jZTsKKwkJfQorCX0KKworCXJldHVybiBiZXN0OworfQorCitzdHJ1Y3QgY29tbWl0X2Rpc3QgeworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgZGlzdGFuY2U7Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfY29tbWl0X2Rpc3QoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBjb21taXRfZGlzdCAqYSwgKmI7CisKKwlhID0gKHN0cnVjdCBjb21taXRfZGlzdCAqKWFfOworCWIgPSAoc3RydWN0IGNvbW1pdF9kaXN0ICopYl87CisJaWYgKGEtPmRpc3RhbmNlICE9IGItPmRpc3RhbmNlKQorCQlyZXR1cm4gYi0+ZGlzdGFuY2UgLSBhLT5kaXN0YW5jZTsgLyogZGVzYyBzb3J0ICovCisJcmV0dXJuIGhhc2hjbXAoYS0+Y29tbWl0LT5vYmplY3Quc2hhMSwgYi0+Y29tbWl0LT5vYmplY3Quc2hhMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmJlc3RfYmlzZWN0aW9uX3NvcnRlZChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIGludCBucikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJc3RydWN0IGNvbW1pdF9kaXN0ICphcnJheSA9IHhjYWxsb2MobnIsIHNpemVvZigqYXJyYXkpKTsKKwlpbnQgY250LCBpOworCisJZm9yIChwID0gbGlzdCwgY250ID0gMDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaW50IGRpc3RhbmNlOworCQl1bnNpZ25lZCBmbGFncyA9IHAtPml0ZW0tPm9iamVjdC5mbGFnczsKKworCQlpZiAoZmxhZ3MgJiBUUkVFU0FNRSkKKwkJCWNvbnRpbnVlOworCQlkaXN0YW5jZSA9IHdlaWdodChwKTsKKwkJaWYgKG5yIC0gZGlzdGFuY2UgPCBkaXN0YW5jZSkKKwkJCWRpc3RhbmNlID0gbnIgLSBkaXN0YW5jZTsKKwkJYXJyYXlbY250XS5jb21taXQgPSBwLT5pdGVtOworCQlhcnJheVtjbnRdLmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCWNudCsrOworCX0KKwlxc29ydChhcnJheSwgY250LCBzaXplb2YoKmFycmF5KSwgY29tcGFyZV9jb21taXRfZGlzdCk7CisJZm9yIChwID0gbGlzdCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpyID0geG1hbGxvYyhzaXplb2YoKnIpICsgMTAwKTsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gJihhcnJheVtpXS5jb21taXQtPm9iamVjdCk7CisKKwkJc3ByaW50ZihyLT5uYW1lLCAiZGlzdD0lZCIsIGFycmF5W2ldLmRpc3RhbmNlKTsKKwkJci0+bmV4dCA9IGFkZF9kZWNvcmF0aW9uKCZuYW1lX2RlY29yYXRpb24sIG9iaiwgcik7CisJCXAtPml0ZW0gPSBhcnJheVtpXS5jb21taXQ7CisJCXAgPSBwLT5uZXh0OworCX0KKwlpZiAocCkKKwkJcC0+bmV4dCA9IE5VTEw7CisJZnJlZShhcnJheSk7CisJcmV0dXJuIGxpc3Q7Cit9CisKKy8qCisgKiB6ZXJvIG9yIHBvc2l0aXZlIHdlaWdodCBpcyB0aGUgbnVtYmVyIG9mIGludGVyZXN0aW5nIGNvbW1pdHMgaXQgY2FuCisgKiByZWFjaCwgaW5jbHVkaW5nIGl0c2VsZi4gIEVzcGVjaWFsbHksIHdlaWdodCA9IDAgbWVhbnMgaXQgZG9lcyBub3QKKyAqIHJlYWNoIGFueSB0cmVlLWNoYW5naW5nIGNvbW1pdHMgKGUuZy4ganVzdCBhYm92ZSB1bmludGVyZXN0aW5nIG9uZQorICogYnV0IHRyYXZlcnNhbCBpcyB3aXRoIHBhdGhzcGVjKS4KKyAqCisgKiB3ZWlnaHQgPSAtMSBtZWFucyBpdCBoYXMgb25lIHBhcmVudCBhbmQgaXRzIGRpc3RhbmNlIGlzIHlldCB0bworICogYmUgY29tcHV0ZWQuCisgKgorICogd2VpZ2h0ID0gLTIgbWVhbnMgaXQgaGFzIG1vcmUgdGhhbiBvbmUgcGFyZW50IGFuZCBpdHMgZGlzdGFuY2UgaXMKKyAqIHVua25vd24uICBBZnRlciBydW5uaW5nIGNvdW50X2Rpc3RhbmNlKCkgZmlyc3QsIHRoZXkgd2lsbCBnZXQgemVybworICogb3IgcG9zaXRpdmUgZGlzdGFuY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmRvX2ZpbmRfYmlzZWN0aW9uKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCQkJICAgICBpbnQgbnIsIGludCAqd2VpZ2h0cywKKwkJCQkJICAgICBpbnQgZmluZF9hbGwpCit7CisJaW50IG4sIGNvdW50ZWQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJY291bnRlZCA9IDA7CisKKwlmb3IgKG4gPSAwLCBwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKKwkJdW5zaWduZWQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFnczsKKworCQlwLT5pdGVtLT51dGlsID0gJndlaWdodHNbbisrXTsKKwkJc3dpdGNoIChjb3VudF9pbnRlcmVzdGluZ19wYXJlbnRzKGNvbW1pdCkpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpIHsKKwkJCQl3ZWlnaHRfc2V0KHAsIDEpOworCQkJCWNvdW50ZWQrKzsKKwkJCQlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50IG9uZSIsCisJCQkJCSAgY291bnRlZCwgbnIsIGxpc3QpOworCQkJfQorCQkJLyoKKwkJCSAqIG90aGVyd2lzZSwgaXQgaXMga25vd24gbm90IHRvIHJlYWNoIGFueQorCQkJICogdHJlZS1jaGFuZ2luZyBjb21taXQgYW5kIGdldHMgd2VpZ2h0IDAuCisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3ZWlnaHRfc2V0KHAsIC0xKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJd2VpZ2h0X3NldChwLCAtMik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNob3dfbGlzdCgiYmlzZWN0aW9uIDIgaW5pdGlhbGl6ZSIsIGNvdW50ZWQsIG5yLCBsaXN0KTsKKworCS8qCisJICogSWYgeW91IGhhdmUgb25seSBvbmUgcGFyZW50IGluIHRoZSByZXN1bHRpbmcgc2V0CisJICogdGhlbiB5b3UgY2FuIHJlYWNoIG9uZSBjb21taXQgbW9yZSB0aGFuIHRoYXQgcGFyZW50CisJICogY2FuIHJlYWNoLiAgU28gd2UgZG8gbm90IGhhdmUgdG8gcnVuIHRoZSBleHBlbnNpdmUKKwkgKiBjb3VudF9kaXN0YW5jZSgpIGZvciBzaW5nbGUgc3RyYW5kIG9mIHBlYXJscy4KKwkgKgorCSAqIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgcGFyZW50cywgeW91IGNhbm5vdAorCSAqIGp1c3QgYWRkIHRoZWlyIGRpc3RhbmNlIGFuZCBvbmUgZm9yIHlvdXJzZWxmLCBzaW5jZQorCSAqIHRoZXkgdXN1YWxseSByZWFjaCB0aGUgc2FtZSBhbmNlc3RvciBhbmQgeW91IHdvdWxkCisJICogZW5kIHVwIGNvdW50aW5nIHRoZW0gdHdpY2UgdGhhdCB3YXkuCisJICoKKwkgKiBTbyB3ZSB3aWxsIGZpcnN0IGNvdW50IGRpc3RhbmNlIG9mIG1lcmdlcyB0aGUgdXN1YWwKKwkgKiB3YXksIGFuZCB0aGVuIGZpbGwgdGhlIGJsYW5rcyB1c2luZyBjaGVhcGVyIGFsZ29yaXRobS4KKwkgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCQlpZiAod2VpZ2h0KHApICE9IC0yKQorCQkJY29udGludWU7CisJCXdlaWdodF9zZXQocCwgY291bnRfZGlzdGFuY2UocCkpOworCQljbGVhcl9kaXN0YW5jZShsaXN0KTsKKworCQkvKiBEb2VzIGl0IGhhcHBlbiB0byBiZSBhdCBleGFjdGx5IGhhbGYtd2F5PyAqLworCQlpZiAoIWZpbmRfYWxsICYmIGhhbGZ3YXkocCwgbnIpKQorCQkJcmV0dXJuIHA7CisJCWNvdW50ZWQrKzsKKwl9CisKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50X2Rpc3RhbmNlIiwgY291bnRlZCwgbnIsIGxpc3QpOworCisJd2hpbGUgKGNvdW50ZWQgPCBucikgeworCQlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpxOworCQkJdW5zaWduZWQgZmxhZ3MgPSBwLT5pdGVtLT5vYmplY3QuZmxhZ3M7CisKKwkJCWlmICgwIDw9IHdlaWdodChwKSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAocSA9IHAtPml0ZW0tPnBhcmVudHM7IHE7IHEgPSBxLT5uZXh0KSB7CisJCQkJaWYgKHEtPml0ZW0tPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICgwIDw9IHdlaWdodChxKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIXEpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiB3ZWlnaHQgZm9yIHAgaXMgdW5rbm93biBidXQgcSBpcyBrbm93bi4KKwkJCSAqIGFkZCBvbmUgZm9yIHAgaXRzZWxmIGlmIHAgaXMgdG8gYmUgY291bnRlZCwKKwkJCSAqIG90aGVyd2lzZSBpbmhlcml0IGl0IGZyb20gcSBkaXJlY3RseS4KKwkJCSAqLworCQkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpIHsKKwkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSsxKTsKKwkJCQljb3VudGVkKys7CisJCQkJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudCBvbmUiLAorCQkJCQkgIGNvdW50ZWQsIG5yLCBsaXN0KTsKKwkJCX0KKwkJCWVsc2UKKwkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSk7CisKKwkJCS8qIERvZXMgaXQgaGFwcGVuIHRvIGJlIGF0IGV4YWN0bHkgaGFsZi13YXk/ICovCisJCQlpZiAoIWZpbmRfYWxsICYmIGhhbGZ3YXkocCwgbnIpKQorCQkJCXJldHVybiBwOworCQl9CisJfQorCisJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudGVkIGFsbCIsIGNvdW50ZWQsIG5yLCBsaXN0KTsKKworCWlmICghZmluZF9hbGwpCisJCXJldHVybiBiZXN0X2Jpc2VjdGlvbihsaXN0LCBucik7CisJZWxzZQorCQlyZXR1cm4gYmVzdF9iaXNlY3Rpb25fc29ydGVkKGxpc3QsIG5yKTsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpmaW5kX2Jpc2VjdGlvbihzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCQkJCSAgaW50ICpyZWFjaGVzLCBpbnQgKmFsbCwKKwkJCQkJICBpbnQgZmluZF9hbGwpCit7CisJaW50IG5yLCBvbl9saXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcCwgKmJlc3QsICpuZXh0LCAqbGFzdDsKKwlpbnQgKndlaWdodHM7CisKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGVudHJ5IiwgMCwgMCwgbGlzdCk7CisKKwkvKgorCSAqIENvdW50IHRoZSBudW1iZXIgb2YgdG90YWwgYW5kIHRyZWUtY2hhbmdpbmcgaXRlbXMgb24gdGhlCisJICogbGlzdCwgd2hpbGUgcmV2ZXJzaW5nIHRoZSBsaXN0LgorCSAqLworCWZvciAobnIgPSBvbl9saXN0ID0gMCwgbGFzdCA9IE5VTEwsIHAgPSBsaXN0OworCSAgICAgcDsKKwkgICAgIHAgPSBuZXh0KSB7CisJCXVuc2lnbmVkIGZsYWdzID0gcC0+aXRlbS0+b2JqZWN0LmZsYWdzOworCisJCW5leHQgPSBwLT5uZXh0OworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCXAtPm5leHQgPSBsYXN0OworCQlsYXN0ID0gcDsKKwkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQlucisrOworCQlvbl9saXN0Kys7CisJfQorCWxpc3QgPSBsYXN0OworCXNob3dfbGlzdCgiYmlzZWN0aW9uIDIgc29ydGVkIiwgMCwgbnIsIGxpc3QpOworCisJKmFsbCA9IG5yOworCXdlaWdodHMgPSB4Y2FsbG9jKG9uX2xpc3QsIHNpemVvZigqd2VpZ2h0cykpOworCisJLyogRG8gdGhlIHJlYWwgd29yayBvZiBmaW5kaW5nIGJpc2VjdGlvbiBjb21taXQuICovCisJYmVzdCA9IGRvX2ZpbmRfYmlzZWN0aW9uKGxpc3QsIG5yLCB3ZWlnaHRzLCBmaW5kX2FsbCk7CisJaWYgKGJlc3QpIHsKKwkJaWYgKCFmaW5kX2FsbCkKKwkJCWJlc3QtPm5leHQgPSBOVUxMOworCQkqcmVhY2hlcyA9IHdlaWdodChiZXN0KTsKKwl9CisJZnJlZSh3ZWlnaHRzKTsKKwlyZXR1cm4gYmVzdDsKK30KKworc3RhdGljIGludCByZWdpc3Rlcl9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCWludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlpZiAoIXN0cmNtcChyZWZuYW1lLCAiYmFkIikpIHsKKwkJY3VycmVudF9iYWRfc2hhMSA9IHNoYTE7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKHJlZm5hbWUsICJnb29kLSIpKSB7CisJCXNoYTFfYXJyYXlfYXBwZW5kKCZnb29kX3JldnMsIHNoYTEpOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChyZWZuYW1lLCAic2tpcC0iKSkgeworCQlzaGExX2FycmF5X2FwcGVuZCgmc2tpcHBlZF9yZXZzLCBzaGExKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX2Jpc2VjdF9yZWZzKHZvaWQpCit7CisJcmV0dXJuIGZvcl9lYWNoX3JlZl9pbigicmVmcy9iaXNlY3QvIiwgcmVnaXN0ZXJfcmVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9iaXNlY3RfcGF0aHMoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5KQoreworCXN0cnVjdCBzdHJidWYgc3RyID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aCgiQklTRUNUX05BTUVTIik7CisJRklMRSAqZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKworCWlmICghZnApCisJCWRpZV9lcnJubygiQ291bGQgbm90IG9wZW4gZmlsZSAnJXMnIiwgZmlsZW5hbWUpOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZzdHIsIGZwLCAnXG4nKSAhPSBFT0YpIHsKKwkJc3RyYnVmX3RyaW0oJnN0cik7CisJCWlmIChzcV9kZXF1b3RlX3RvX2FyZ3ZfYXJyYXkoc3RyLmJ1ZiwgYXJyYXkpKQorCQkJZGllKCJCYWRseSBxdW90ZWQgY29udGVudCBpbiBmaWxlICclcyc6ICVzIiwKKwkJCSAgICBmaWxlbmFtZSwgc3RyLmJ1Zik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnN0cik7CisJZmNsb3NlKGZwKTsKK30KKworc3RhdGljIGNoYXIgKmpvaW5fc2hhMV9hcnJheV9oZXgoc3RydWN0IHNoYTFfYXJyYXkgKmFycmF5LCBjaGFyIGRlbGltKQoreworCXN0cnVjdCBzdHJidWYgam9pbmVkX2hleHMgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnI7IGkrKykgeworCQlzdHJidWZfYWRkc3RyKCZqb2luZWRfaGV4cywgc2hhMV90b19oZXgoYXJyYXktPnNoYTFbaV0pKTsKKwkJaWYgKGkgKyAxIDwgYXJyYXktPm5yKQorCQkJc3RyYnVmX2FkZGNoKCZqb2luZWRfaGV4cywgZGVsaW0pOworCX0KKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZqb2luZWRfaGV4cywgTlVMTCk7Cit9CisKKy8qCisgKiBJbiB0aGlzIGZ1bmN0aW9uLCBwYXNzaW5nIGEgbm90IE5VTEwgc2tpcHBlZF9maXJzdCBpcyB2ZXJ5IHNwZWNpYWwuCisgKiBJdCBtZWFucyB0aGF0IHdlIHdhbnQgdG8ga25vdyBpZiB0aGUgZmlyc3QgY29tbWl0IGluIHRoZSBsaXN0IGlzCisgKiBza2lwcGVkIGJlY2F1c2Ugd2Ugd2lsbCB3YW50IHRvIHRlc3QgYSBjb21taXQgYXdheSBmcm9tIGl0IGlmIGl0IGlzCisgKiBpbmRlZWQgc2tpcHBlZC4KKyAqIFNvIGlmIHRoZSBmaXJzdCBjb21taXQgaXMgc2tpcHBlZCwgd2UgY2Fubm90IHRha2UgdGhlIHNob3J0Y3V0IHRvCisgKiBqdXN0ICJyZXR1cm4gbGlzdCIgd2hlbiB3ZSBmaW5kIHRoZSBmaXJzdCBub24gc2tpcHBlZCBjb21taXQsIHdlCisgKiBoYXZlIHRvIHJldHVybiBhIGZ1bGx5IGZpbHRlcmVkIGxpc3QuCisgKgorICogV2UgdXNlICgqc2tpcHBlZF9maXJzdCA9PSAtMSkgdG8gbWVhbiAiaXQgaGFzIGJlZW4gZm91bmQgdGhhdCB0aGUKKyAqIGZpcnN0IGNvbW1pdCBpcyBub3Qgc2tpcHBlZCIuIEluIHRoaXMgY2FzZSAqc2tpcHBlZF9maXJzdCBpcyBzZXQgYmFjaworICogdG8gMCBqdXN0IGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKyAqLworc3RydWN0IGNvbW1pdF9saXN0ICpmaWx0ZXJfc2tpcHBlZChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCQkJICAgc3RydWN0IGNvbW1pdF9saXN0ICoqdHJpZWQsCisJCQkJICAgaW50IHNob3dfYWxsLAorCQkJCSAgIGludCAqY291bnQsCisJCQkJICAgaW50ICpza2lwcGVkX2ZpcnN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqZmlsdGVyZWQgPSBOVUxMLCAqKmYgPSAmZmlsdGVyZWQ7CisKKwkqdHJpZWQgPSBOVUxMOworCisJaWYgKHNraXBwZWRfZmlyc3QpCisJCSpza2lwcGVkX2ZpcnN0ID0gMDsKKwlpZiAoY291bnQpCisJCSpjb3VudCA9IDA7CisKKwlpZiAoIXNraXBwZWRfcmV2cy5ucikKKwkJcmV0dXJuIGxpc3Q7CisKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5leHQgPSBsaXN0LT5uZXh0OworCQlsaXN0LT5uZXh0ID0gTlVMTDsKKwkJaWYgKDAgPD0gc2hhMV9hcnJheV9sb29rdXAoJnNraXBwZWRfcmV2cywKKwkJCQkJICAgbGlzdC0+aXRlbS0+b2JqZWN0LnNoYTEpKSB7CisJCQlpZiAoc2tpcHBlZF9maXJzdCAmJiAhKnNraXBwZWRfZmlyc3QpCisJCQkJKnNraXBwZWRfZmlyc3QgPSAxOworCQkJLyogTW92ZSBjdXJyZW50IHRvIHRyaWVkIGxpc3QgKi8KKwkJCSp0cmllZCA9IGxpc3Q7CisJCQl0cmllZCA9ICZsaXN0LT5uZXh0OworCQl9IGVsc2UgeworCQkJaWYgKCFzaG93X2FsbCkgeworCQkJCWlmICghc2tpcHBlZF9maXJzdCB8fCAhKnNraXBwZWRfZmlyc3QpCisJCQkJCXJldHVybiBsaXN0OworCQkJfSBlbHNlIGlmIChza2lwcGVkX2ZpcnN0ICYmICEqc2tpcHBlZF9maXJzdCkgeworCQkJCS8qIFRoaXMgbWVhbnMgd2Uga25vdyBpdCdzIG5vdCBza2lwcGVkICovCisJCQkJKnNraXBwZWRfZmlyc3QgPSAtMTsKKwkJCX0KKwkJCS8qIE1vdmUgY3VycmVudCB0byBmaWx0ZXJlZCBsaXN0ICovCisJCQkqZiA9IGxpc3Q7CisJCQlmID0gJmxpc3QtPm5leHQ7CisJCQlpZiAoY291bnQpCisJCQkJKCpjb3VudCkrKzsKKwkJfQorCQlsaXN0ID0gbmV4dDsKKwl9CisKKwlpZiAoc2tpcHBlZF9maXJzdCAmJiAqc2tpcHBlZF9maXJzdCA9PSAtMSkKKwkJKnNraXBwZWRfZmlyc3QgPSAwOworCisJcmV0dXJuIGZpbHRlcmVkOworfQorCisjZGVmaW5lIFBSTl9NT0RVTE8gMzI3NjgKKworLyoKKyAqIFRoaXMgaXMgYSBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgYmFzZWQgb24gIm1hbiAzIHJhbmQiLgorICogSXQgaXMgbm90IHVzZWQgcHJvcGVybHkgYmVjYXVzZSB0aGUgc2VlZCBpcyB0aGUgYXJndW1lbnQgYW5kIGl0CisgKiBpcyBpbmNyZWFzZWQgYnkgb25lIGJldHdlZW4gZWFjaCBjYWxsLCBidXQgdGhhdCBzaG91bGQgbm90IG1hdHRlcgorICogZm9yIHRoaXMgYXBwbGljYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3BybihpbnQgY291bnQpIHsKKwljb3VudCA9IGNvdW50ICogMTEwMzUxNTI0NSArIDEyMzQ1OworCXJldHVybiAoKHVuc2lnbmVkKShjb3VudC82NTUzNikgJSBQUk5fTU9EVUxPKTsKK30KKworLyoKKyAqIEN1c3RvbSBpbnRlZ2VyIHNxdWFyZSByb290IGZyb20KKyAqIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZWdlcl9zcXVhcmVfcm9vdAorICovCitzdGF0aWMgaW50IHNxcnRpKGludCB2YWwpCit7CisJZmxvYXQgZCwgeCA9IHZhbDsKKworCWlmICh2YWwgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkbyB7CisJCWZsb2F0IHkgPSAoeCArIChmbG9hdCl2YWwgLyB4KSAvIDI7CisJCWQgPSAoeSA+IHgpID8geSAtIHggOiB4IC0geTsKKwkJeCA9IHk7CisJfSB3aGlsZSAoZCA+PSAwLjUpOworCisJcmV0dXJuIChpbnQpeDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqc2tpcF9hd2F5KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgaW50IGNvdW50KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqY3VyLCAqcHJldmlvdXM7CisJaW50IHBybiwgaW5kZXgsIGk7CisKKwlwcm4gPSBnZXRfcHJuKGNvdW50KTsKKwlpbmRleCA9IChjb3VudCAqIHBybiAvIFBSTl9NT0RVTE8pICogc3FydGkocHJuKSAvIHNxcnRpKFBSTl9NT0RVTE8pOworCisJY3VyID0gbGlzdDsKKwlwcmV2aW91cyA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBjdXI7IGN1ciA9IGN1ci0+bmV4dCwgaSsrKSB7CisJCWlmIChpID09IGluZGV4KSB7CisJCQlpZiAoaGFzaGNtcChjdXItPml0ZW0tPm9iamVjdC5zaGExLCBjdXJyZW50X2JhZF9zaGExKSkKKwkJCQlyZXR1cm4gY3VyOworCQkJaWYgKHByZXZpb3VzKQorCQkJCXJldHVybiBwcmV2aW91czsKKwkJCXJldHVybiBsaXN0OworCQl9CisJCXByZXZpb3VzID0gY3VyOworCX0KKworCXJldHVybiBsaXN0OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICptYW5hZ2VkX3NraXBwZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0cmllZCkKK3sKKwlpbnQgY291bnQsIHNraXBwZWRfZmlyc3Q7CisKKwkqdHJpZWQgPSBOVUxMOworCisJaWYgKCFza2lwcGVkX3JldnMubnIpCisJCXJldHVybiBsaXN0OworCisJbGlzdCA9IGZpbHRlcl9za2lwcGVkKGxpc3QsIHRyaWVkLCAwLCAmY291bnQsICZza2lwcGVkX2ZpcnN0KTsKKworCWlmICghc2tpcHBlZF9maXJzdCkKKwkJcmV0dXJuIGxpc3Q7CisKKwlyZXR1cm4gc2tpcF9hd2F5KGxpc3QsIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQgYmlzZWN0X3Jldl9zZXR1cChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgY29uc3QgY2hhciAqYmFkX2Zvcm1hdCwgY29uc3QgY2hhciAqZ29vZF9mb3JtYXQsCisJCQkgICAgIGludCByZWFkX3BhdGhzKQoreworCXN0cnVjdCBhcmd2X2FycmF5IHJldl9hcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCWludCBpOworCisJaW5pdF9yZXZpc2lvbnMocmV2cywgcHJlZml4KTsKKwlyZXZzLT5hYmJyZXYgPSAwOworCXJldnMtPmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9VTlNQRUNJRklFRDsKKworCS8qIHJldl9hcmd2LmFyZ3ZbMF0gd2lsbCBiZSBpZ25vcmVkIGJ5IHNldHVwX3JldmlzaW9ucyAqLworCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2FyZ3YsICJiaXNlY3RfcmV2X3NldHVwIik7CisJYXJndl9hcnJheV9wdXNoZigmcmV2X2FyZ3YsIGJhZF9mb3JtYXQsIHNoYTFfdG9faGV4KGN1cnJlbnRfYmFkX3NoYTEpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZ29vZF9yZXZzLm5yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJnJldl9hcmd2LCBnb29kX2Zvcm1hdCwKKwkJCQkgc2hhMV90b19oZXgoZ29vZF9yZXZzLnNoYTFbaV0pKTsKKwlhcmd2X2FycmF5X3B1c2goJnJldl9hcmd2LCAiLS0iKTsKKwlpZiAocmVhZF9wYXRocykKKwkJcmVhZF9iaXNlY3RfcGF0aHMoJnJldl9hcmd2KTsKKworCXNldHVwX3JldmlzaW9ucyhyZXZfYXJndi5hcmdjLCByZXZfYXJndi5hcmd2LCByZXZzLCBOVUxMKTsKKwkvKiBYWFggbGVhayByZXZfYXJndiwgYXMgInJldnMiIG1heSBzdGlsbCBiZSBwb2ludGluZyB0byBpdCAqLworfQorCitzdGF0aWMgdm9pZCBiaXNlY3RfY29tbW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJaWYgKHJldnMtPnRyZWVfb2JqZWN0cykKKwkJbWFya19lZGdlc191bmludGVyZXN0aW5nKHJldnMtPmNvbW1pdHMsIHJldnMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBleGl0X2lmX3NraXBwZWRfY29tbWl0cyhzdHJ1Y3QgY29tbWl0X2xpc3QgKnRyaWVkLAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpiYWQpCit7CisJaWYgKCF0cmllZCkKKwkJcmV0dXJuOworCisJcHJpbnRmKCJUaGVyZSBhcmUgb25seSAnc2tpcCdwZWQgY29tbWl0cyBsZWZ0IHRvIHRlc3QuXG4iCisJICAgICAgICJUaGUgZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2Y6XG4iKTsKKwlwcmludF9jb21taXRfbGlzdCh0cmllZCwgIiVzXG4iLCAiJXNcbiIpOworCWlmIChiYWQpCisJCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KGJhZCkpOworCXByaW50ZigiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIik7CisJZXhpdCgyKTsKK30KKworc3RhdGljIGludCBpc19leHBlY3RlZF9yZXYoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJCSVNFQ1RfRVhQRUNURURfUkVWIik7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmcDsKKwlpbnQgcmVzID0gMDsKKworCWlmIChzdGF0KGZpbGVuYW1lLCAmc3QpIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKworCWZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyYnVmX2dldGxpbmUoJnN0ciwgZnAsICdcbicpICE9IEVPRikKKwkJcmVzID0gIXN0cmNtcChzdHIuYnVmLCBzaGExX3RvX2hleChzaGExKSk7CisKKwlzdHJidWZfcmVsZWFzZSgmc3RyKTsKKwlmY2xvc2UoZnApOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgbWFya19leHBlY3RlZF9yZXYoY2hhciAqYmlzZWN0X3Jldl9oZXgpCit7CisJaW50IGxlbiA9IHN0cmxlbihiaXNlY3RfcmV2X2hleCk7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aCgiQklTRUNUX0VYUEVDVEVEX1JFViIpOworCWludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFksIDA2MDApOworCisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIsIGZpbGVuYW1lKTsKKworCWJpc2VjdF9yZXZfaGV4W2xlbl0gPSAnXG4nOworCXdyaXRlX29yX2RpZShmZCwgYmlzZWN0X3Jldl9oZXgsIGxlbiArIDEpOworCWJpc2VjdF9yZXZfaGV4W2xlbl0gPSAnXDAnOworCisJaWYgKGNsb3NlKGZkKSA8IDApCisJCWRpZSgiY2xvc2luZyBmaWxlICVzOiAlcyIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworfQorCitzdGF0aWMgaW50IGJpc2VjdF9jaGVja291dChjaGFyICpiaXNlY3RfcmV2X2hleCwgaW50IG5vX2NoZWNrb3V0KQoreworCWludCByZXM7CisKKwltYXJrX2V4cGVjdGVkX3JldihiaXNlY3RfcmV2X2hleCk7CisKKwlhcmd2X2NoZWNrb3V0WzJdID0gYmlzZWN0X3Jldl9oZXg7CisJaWYgKG5vX2NoZWNrb3V0KSB7CisJCWFyZ3ZfdXBkYXRlX3JlZlszXSA9IGJpc2VjdF9yZXZfaGV4OworCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndl91cGRhdGVfcmVmLCBSVU5fR0lUX0NNRCkpCisJCQlkaWUoInVwZGF0ZS1yZWYgLS1uby1kZXJlZiBIRUFEIGZhaWxlZCBvbiAlcyIsCisJCQkgICAgYmlzZWN0X3Jldl9oZXgpOworCX0gZWxzZSB7CisJCXJlcyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3ZfY2hlY2tvdXQsIFJVTl9HSVRfQ01EKTsKKwkJaWYgKHJlcykKKwkJCWV4aXQocmVzKTsKKwl9CisKKwlhcmd2X3Nob3dfYnJhbmNoWzFdID0gYmlzZWN0X3Jldl9oZXg7CisJcmV0dXJuIHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3Zfc2hvd19icmFuY2gsIFJVTl9HSVRfQ01EKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9jb21taXRfcmVmZXJlbmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNvbW1pdCAqciA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCWlmICghcikKKwkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKipnZXRfYmFkX2FuZF9nb29kX2NvbW1pdHMoaW50ICpyZXZfbnIpCit7CisJaW50IGxlbiA9IDEgKyBnb29kX3JldnMubnI7CisJc3RydWN0IGNvbW1pdCAqKnJldiA9IHhtYWxsb2MobGVuICogc2l6ZW9mKCpyZXYpKTsKKwlpbnQgaSwgbiA9IDA7CisKKwlyZXZbbisrXSA9IGdldF9jb21taXRfcmVmZXJlbmNlKGN1cnJlbnRfYmFkX3NoYTEpOworCWZvciAoaSA9IDA7IGkgPCBnb29kX3JldnMubnI7IGkrKykKKwkJcmV2W24rK10gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShnb29kX3JldnMuc2hhMVtpXSk7CisJKnJldl9uciA9IG47CisKKwlyZXR1cm4gcmV2OworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYmFkX21lcmdlX2Jhc2Uodm9pZCkKK3sKKwlpZiAoaXNfZXhwZWN0ZWRfcmV2KGN1cnJlbnRfYmFkX3NoYTEpKSB7CisJCWNoYXIgKmJhZF9oZXggPSBzaGExX3RvX2hleChjdXJyZW50X2JhZF9zaGExKTsKKwkJY2hhciAqZ29vZF9oZXggPSBqb2luX3NoYTFfYXJyYXlfaGV4KCZnb29kX3JldnMsICcgJyk7CisKKwkJZnByaW50ZihzdGRlcnIsICJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBiYWQuXG4iCisJCQkiVGhpcyBtZWFucyB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkICIKKwkJCSJiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIiwKKwkJCWJhZF9oZXgsIGJhZF9oZXgsIGdvb2RfaGV4KTsKKworCQlleGl0KDMpOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiU29tZSBnb29kIHJldnMgYXJlIG5vdCBhbmNlc3RvciBvZiB0aGUgYmFkIHJldi5cbiIKKwkJImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorCQkiTWF5YmUgeW91IG1pc3Rha2UgZ29vZCBhbmQgYmFkIHJldnM/XG4iKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc2tpcHBlZF9tZXJnZV9iYXNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1iKQoreworCWNoYXIgKm1iX2hleCA9IHNoYTFfdG9faGV4KG1iKTsKKwljaGFyICpiYWRfaGV4ID0gc2hhMV90b19oZXgoY3VycmVudF9iYWRfc2hhMSk7CisJY2hhciAqZ29vZF9oZXggPSBqb2luX3NoYTFfYXJyYXlfaGV4KCZnb29kX3JldnMsICcgJyk7CisKKwl3YXJuaW5nKCJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdICIKKwkJIm11c3QgYmUgc2tpcHBlZC5cbiIKKwkJIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCBiYWQgY29tbWl0IGlzICIKKwkJImJldHdlZW4gJXMgYW5kICVzLlxuIgorCQkiV2UgY29udGludWUgYW55d2F5LiIsCisJCWJhZF9oZXgsIGdvb2RfaGV4LCBtYl9oZXgsIGJhZF9oZXgpOworCWZyZWUoZ29vZF9oZXgpOworfQorCisvKgorICogImNoZWNrX21lcmdlX2Jhc2VzIiBjaGVja3MgdGhhdCBtZXJnZSBiYXNlcyBhcmUgbm90ICJiYWQiLgorICoKKyAqIC0gSWYgb25lIGlzICJiYWQiLCBpdCBtZWFucyB0aGUgdXNlciBhc3N1bWVkIHNvbWV0aGluZyB3cm9uZworICogYW5kIHdlIG11c3QgZXhpdCB3aXRoIGEgbm9uIDAgZXJyb3IgY29kZS4KKyAqIC0gSWYgb25lIGlzICJnb29kIiwgdGhhdCdzIGdvb2QsIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAqIC0gSWYgb25lIGlzICJza2lwcGVkIiwgd2UgY2FuJ3Qga25vdyBidXQgd2Ugc2hvdWxkIHdhcm4uCisgKiAtIElmIHdlIGRvbid0IGtub3csIHdlIHNob3VsZCBjaGVjayBpdCBvdXQgYW5kIGFzayB0aGUgdXNlciB0byB0ZXN0LgorICovCitzdGF0aWMgdm9pZCBjaGVja19tZXJnZV9iYXNlcyhpbnQgbm9fY2hlY2tvdXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQ7CisJaW50IHJldl9ucjsKKwlzdHJ1Y3QgY29tbWl0ICoqcmV2ID0gZ2V0X2JhZF9hbmRfZ29vZF9jb21taXRzKCZyZXZfbnIpOworCisJcmVzdWx0ID0gZ2V0X21lcmdlX2Jhc2VzX21hbnkocmV2WzBdLCByZXZfbnIgLSAxLCByZXYgKyAxLCAwKTsKKworCWZvciAoOyByZXN1bHQ7IHJlc3VsdCA9IHJlc3VsdC0+bmV4dCkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICptYiA9IHJlc3VsdC0+aXRlbS0+b2JqZWN0LnNoYTE7CisJCWlmICghaGFzaGNtcChtYiwgY3VycmVudF9iYWRfc2hhMSkpIHsKKwkJCWhhbmRsZV9iYWRfbWVyZ2VfYmFzZSgpOworCQl9IGVsc2UgaWYgKDAgPD0gc2hhMV9hcnJheV9sb29rdXAoJmdvb2RfcmV2cywgbWIpKSB7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICgwIDw9IHNoYTFfYXJyYXlfbG9va3VwKCZza2lwcGVkX3JldnMsIG1iKSkgeworCQkJaGFuZGxlX3NraXBwZWRfbWVyZ2VfYmFzZShtYik7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iKTsKKwkJCWV4aXQoYmlzZWN0X2NoZWNrb3V0KHNoYTFfdG9faGV4KG1iKSwgbm9fY2hlY2tvdXQpKTsKKwkJfQorCX0KKworCWZyZWUocmV2KTsKKwlmcmVlX2NvbW1pdF9saXN0KHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYW5jZXN0b3JzKGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IHBlbmRpbmdfY29weTsKKwlpbnQgcmVzOworCisJYmlzZWN0X3Jldl9zZXR1cCgmcmV2cywgcHJlZml4LCAiXiVzIiwgIiVzIiwgMCk7CisKKwkvKiBTYXZlIHBlbmRpbmcgb2JqZWN0cywgc28gdGhleSBjYW4gYmUgY2xlYW5lZCB1cCBsYXRlci4gKi8KKwlwZW5kaW5nX2NvcHkgPSByZXZzLnBlbmRpbmc7CisJcmV2cy5sZWFrX3BlbmRpbmcgPSAxOworCisJLyoKKwkgKiBiaXNlY3RfY29tbW9uIGNhbGxzIHByZXBhcmVfcmV2aXNpb25fd2FsayByaWdodCBhd2F5LCB3aGljaAorCSAqICh0b2dldGhlciB3aXRoIC5sZWFrX3BlbmRpbmcgPSAxKSBtYWtlcyB1cyB0aGUgc29sZSBvd25lciBvZgorCSAqIHRoZSBsaXN0IG9mIHBlbmRpbmcgb2JqZWN0cy4KKwkgKi8KKwliaXNlY3RfY29tbW9uKCZyZXZzKTsKKwlyZXMgPSAocmV2cy5jb21taXRzICE9IE5VTEwpOworCisJLyogQ2xlYW4gdXAgb2JqZWN0cyB1c2VkLCBhcyB0aGV5IHdpbGwgYmUgcmV1c2VkLiAqLworCWNsZWFyX2NvbW1pdF9tYXJrc19mb3Jfb2JqZWN0X2FycmF5KCZwZW5kaW5nX2NvcHksIEFMTF9SRVZfRkxBR1MpOworCWZyZWUocGVuZGluZ19jb3B5Lm9iamVjdHMpOworCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqICJjaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkIiBjaGVja3MgdGhhdCBhbGwgImdvb2QiIHJldnMgYXJlCisgKiBhbmNlc3RvciBvZiB0aGUgImJhZCIgcmV2LgorICoKKyAqIElmIHRoYXQncyBub3QgdGhlIGNhc2UsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG1lcmdlIGJhc2VzLgorICogSWYgYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIGJ5IHRoZSB1c2VyLCBpdHMgc291cmNlIGNvZGUgd2lsbCBiZQorICogY2hlY2tlZCBvdXQgdG8gYmUgdGVzdGVkIGJ5IHRoZSB1c2VyIGFuZCB3ZSB3aWxsIGV4aXQuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbm9fY2hlY2tvdXQpCit7CisJY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aGR1cCgiQklTRUNUX0FOQ0VTVE9SU19PSyIpOworCXN0cnVjdCBzdGF0IHN0OworCWludCBmZDsKKworCWlmICghY3VycmVudF9iYWRfc2hhMSkKKwkJZGllKCJhIGJhZCByZXZpc2lvbiBpcyBuZWVkZWQiKTsKKworCS8qIENoZWNrIGlmIGZpbGUgQklTRUNUX0FOQ0VTVE9SU19PSyBleGlzdHMuICovCisJaWYgKCFzdGF0KGZpbGVuYW1lLCAmc3QpICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCWdvdG8gZG9uZTsKKworCS8qIEJpc2VjdGluZyB3aXRoIG5vIGdvb2QgcmV2IGlzIG9rLiAqLworCWlmIChnb29kX3JldnMubnIgPT0gMCkKKwkJZ290byBkb25lOworCisJLyogQ2hlY2sgaWYgYWxsIGdvb2QgcmV2cyBhcmUgYW5jZXN0b3Igb2YgdGhlIGJhZCByZXYuICovCisJaWYgKGNoZWNrX2FuY2VzdG9ycyhwcmVmaXgpKQorCQljaGVja19tZXJnZV9iYXNlcyhub19jaGVja291dCk7CisKKwkvKiBDcmVhdGUgZmlsZSBCSVNFQ1RfQU5DRVNUT1JTX09LLiAqLworCWZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgMDYwMCk7CisJaWYgKGZkIDwgMCkKKwkJd2FybmluZygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyc6ICVzIiwKKwkJCWZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCWVsc2UKKwkJY2xvc2UoZmQpOworIGRvbmU6CisJZnJlZShmaWxlbmFtZSk7Cit9CisKKy8qCisgKiBUaGlzIGRvZXMgImdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgQ09NTUlUIiB3aXRob3V0IG9uZSBmb3JrK2V4ZWMuCisgKi8KK3N0YXRpYyB2b2lkIHNob3dfZGlmZl90cmVlKGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCByZXZfaW5mbyBvcHQ7CisKKwkvKiBkaWZmLXRyZWUgaW5pdCAqLworCWluaXRfcmV2aXNpb25zKCZvcHQsIHByZWZpeCk7CisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCW9wdC5hYmJyZXYgPSAwOworCW9wdC5kaWZmID0gMTsKKworCS8qIFRoaXMgaXMgd2hhdCAiLS1wcmV0dHkiIGRvZXMgKi8KKwlvcHQudmVyYm9zZV9oZWFkZXIgPSAxOworCW9wdC51c2VfdGVybWluYXRvciA9IDA7CisJb3B0LmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9ERUZBVUxUOworCisJLyogZGlmZi10cmVlIGluaXQgKi8KKwlpZiAoIW9wdC5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCisJCW9wdC5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9SQVc7CisKKwlsb2dfdHJlZV9jb21taXQoJm9wdCwgY29tbWl0KTsKK30KKworLyoKKyAqIFdlIHVzZSB0aGUgY29udmVudGlvbiB0aGF0IGV4aXRpbmcgd2l0aCBhbiBleGl0IGNvZGUgMTAgbWVhbnMgdGhhdAorICogdGhlIGJpc2VjdGlvbiBwcm9jZXNzIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEluIHRoaXMgY2FzZSB0aGUgY2FsbGluZyBzaGVsbCBzY3JpcHQgc2hvdWxkIGV4aXQgMC4KKyAqCisgKiBJZiBub19jaGVja291dCBpcyBub24temVybywgdGhlIGJpc2VjdGlvbiBwcm9jZXNzIGRvZXMgbm90CisgKiBjaGVja291dCB0aGUgdHJpYWwgY29tbWl0IGJ1dCBpbnN0ZWFkIHNpbXBseSB1cGRhdGVzIEJJU0VDVF9IRUFELgorICovCitpbnQgYmlzZWN0X25leHRfYWxsKGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IG5vX2NoZWNrb3V0KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBjb21taXRfbGlzdCAqdHJpZWQ7CisJaW50IHJlYWNoZXMgPSAwLCBhbGwgPSAwLCBuciwgc3RlcHM7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYmlzZWN0X3JldjsKKwljaGFyIGJpc2VjdF9yZXZfaGV4WzQxXTsKKworCWlmIChyZWFkX2Jpc2VjdF9yZWZzKCkpCisJCWRpZSgicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiKTsKKworCWNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQocHJlZml4LCBub19jaGVja291dCk7CisKKwliaXNlY3RfcmV2X3NldHVwKCZyZXZzLCBwcmVmaXgsICIlcyIsICJeJXMiLCAxKTsKKwlyZXZzLmxpbWl0ZWQgPSAxOworCisJYmlzZWN0X2NvbW1vbigmcmV2cyk7CisKKwlyZXZzLmNvbW1pdHMgPSBmaW5kX2Jpc2VjdGlvbihyZXZzLmNvbW1pdHMsICZyZWFjaGVzLCAmYWxsLAorCQkJCSAgICAgICAhIXNraXBwZWRfcmV2cy5ucik7CisJcmV2cy5jb21taXRzID0gbWFuYWdlZF9za2lwcGVkKHJldnMuY29tbWl0cywgJnRyaWVkKTsKKworCWlmICghcmV2cy5jb21taXRzKSB7CisJCS8qCisJCSAqIFdlIHNob3VsZCBleGl0IGhlcmUgb25seSBpZiB0aGUgImJhZCIKKwkJICogY29tbWl0IGlzIGFsc28gYSAic2tpcCIgY29tbWl0LgorCQkgKi8KKwkJZXhpdF9pZl9za2lwcGVkX2NvbW1pdHModHJpZWQsIE5VTEwpOworCisJCXByaW50ZigiJXMgd2FzIGJvdGggZ29vZCBhbmQgYmFkXG4iLAorCQkgICAgICAgc2hhMV90b19oZXgoY3VycmVudF9iYWRfc2hhMSkpOworCQlleGl0KDEpOworCX0KKworCWlmICghYWxsKSB7CisJCWZwcmludGYoc3RkZXJyLCAiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorCQkJIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIpOworCQlleGl0KDQpOworCX0KKworCWJpc2VjdF9yZXYgPSByZXZzLmNvbW1pdHMtPml0ZW0tPm9iamVjdC5zaGExOworCW1lbWNweShiaXNlY3RfcmV2X2hleCwgc2hhMV90b19oZXgoYmlzZWN0X3JldiksIDQxKTsKKworCWlmICghaGFzaGNtcChiaXNlY3RfcmV2LCBjdXJyZW50X2JhZF9zaGExKSkgeworCQlleGl0X2lmX3NraXBwZWRfY29tbWl0cyh0cmllZCwgY3VycmVudF9iYWRfc2hhMSk7CisJCXByaW50ZigiJXMgaXMgdGhlIGZpcnN0IGJhZCBjb21taXRcbiIsIGJpc2VjdF9yZXZfaGV4KTsKKwkJc2hvd19kaWZmX3RyZWUocHJlZml4LCByZXZzLmNvbW1pdHMtPml0ZW0pOworCQkvKiBUaGlzIG1lYW5zIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBzdWNjZWVkZWQuICovCisJCWV4aXQoMTApOworCX0KKworCW5yID0gYWxsIC0gcmVhY2hlcyAtIDE7CisJc3RlcHMgPSBlc3RpbWF0ZV9iaXNlY3Rfc3RlcHMoYWxsKTsKKwlwcmludGYoIkJpc2VjdGluZzogJWQgcmV2aXNpb24lcyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAiCisJICAgICAgICIocm91Z2hseSAlZCBzdGVwJXMpXG4iLCBuciwgKG5yID09IDEgPyAiIiA6ICJzIiksCisJICAgICAgIHN0ZXBzLCAoc3RlcHMgPT0gMSA/ICIiIDogInMiKSk7CisKKwlyZXR1cm4gYmlzZWN0X2NoZWNrb3V0KGJpc2VjdF9yZXZfaGV4LCBub19jaGVja291dCk7Cit9CisKZGlmZiAtLWdpdCBhL2Jpc2VjdC5oIGIvYmlzZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzYzNmZgotLS0gL2Rldi9udWxsCisrKyBiL2Jpc2VjdC5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgQklTRUNUX0gKKyNkZWZpbmUgQklTRUNUX0gKKworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZmluZF9iaXNlY3Rpb24oc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCQkgIGludCAqcmVhY2hlcywgaW50ICphbGwsCisJCQkJCSAgaW50IGZpbmRfYWxsKTsKKworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZmlsdGVyX3NraXBwZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCQkgIHN0cnVjdCBjb21taXRfbGlzdCAqKnRyaWVkLAorCQkJCQkgIGludCBzaG93X2FsbCwKKwkJCQkJICBpbnQgKmNvdW50LAorCQkJCQkgIGludCAqc2tpcHBlZF9maXJzdCk7CisKK2V4dGVybiB2b2lkIHByaW50X2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdF9jdXIsCisJCQkgICAgICBjb25zdCBjaGFyICpmb3JtYXRfbGFzdCk7CisKKyNkZWZpbmUgQklTRUNUX1NIT1dfQUxMCQkoMTw8MCkKKyNkZWZpbmUgUkVWX0xJU1RfUVVJRVQJCSgxPDwxKQorCitzdHJ1Y3QgcmV2X2xpc3RfaW5mbyB7CisJc3RydWN0IHJldl9pbmZvICpyZXZzOworCWludCBmbGFnczsKKwlpbnQgc2hvd190aW1lc3RhbXA7CisJaW50IGhkcl90ZXJtaW5hdGlvbjsKKwljb25zdCBjaGFyICpoZWFkZXJfcHJlZml4OworfTsKKworZXh0ZXJuIGludCBiaXNlY3RfbmV4dF9hbGwoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbm9fY2hlY2tvdXQpOworCitleHRlcm4gaW50IGVzdGltYXRlX2Jpc2VjdF9zdGVwcyhpbnQgYWxsKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9ibG9iLmMgYi9ibG9iLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzMjBiZAotLS0gL2Rldi9udWxsCisrKyBiL2Jsb2IuYwpAQCAtMCwwICsxLDI1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisKK2NvbnN0IGNoYXIgKmJsb2JfdHlwZSA9ICJibG9iIjsKKworc3RydWN0IGJsb2IgKmxvb2t1cF9ibG9iKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qoc2hhMSwgT0JKX0JMT0IsIGFsbG9jX2Jsb2Jfbm9kZSgpKTsKKwlpZiAoIW9iai0+dHlwZSkKKwkJb2JqLT50eXBlID0gT0JKX0JMT0I7CisJaWYgKG9iai0+dHlwZSAhPSBPQkpfQkxPQikgeworCQllcnJvcigiT2JqZWN0ICVzIGlzIGEgJXMsIG5vdCBhIGJsb2IiLAorCQkgICAgICBzaGExX3RvX2hleChzaGExKSwgdHlwZW5hbWUob2JqLT50eXBlKSk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gKHN0cnVjdCBibG9iICopIG9iajsKK30KKworaW50IHBhcnNlX2Jsb2JfYnVmZmVyKHN0cnVjdCBibG9iICppdGVtLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2Jsb2IuaCBiL2Jsb2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWIzOTRlCi0tLSAvZGV2L251bGwKKysrIGIvYmxvYi5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgQkxPQl9ICisjZGVmaW5lIEJMT0JfSAorCisjaW5jbHVkZSAib2JqZWN0LmgiCisKK2V4dGVybiBjb25zdCBjaGFyICpibG9iX3R5cGU7CisKK3N0cnVjdCBibG9iIHsKKwlzdHJ1Y3Qgb2JqZWN0IG9iamVjdDsKK307CisKK3N0cnVjdCBibG9iICpsb29rdXBfYmxvYihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworaW50IHBhcnNlX2Jsb2JfYnVmZmVyKHN0cnVjdCBibG9iICppdGVtLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKy8qKgorICogQmxvYnMgZG8gbm90IGNvbnRhaW4gcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGFuZCBkbyBub3QgaGF2ZQorICogc3RydWN0dXJlZCBkYXRhIHRoYXQgbmVlZHMgcGFyc2luZy4gSG93ZXZlciwgY29kZSBtYXkgdXNlIHRoZQorICogInBhcnNlZCIgYml0IGluIHRoZSBzdHJ1Y3Qgb2JqZWN0IGZvciBhIGJsb2IgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKKyAqIGl0cyBjb250ZW50IGhhcyBiZWVuIGZvdW5kIHRvIGFjdHVhbGx5IGJlIGF2YWlsYWJsZSwgc28KKyAqIHBhcnNlX2Jsb2JfYnVmZmVyKCkgaXMgdXNlZCAoYnkgb2JqZWN0LmMpIHRvIGZsYWcgdGhhdCB0aGUgb2JqZWN0CisgKiBoYXMgYmVlbiByZWFkIHN1Y2Nlc3NmdWxseSBmcm9tIHRoZSBkYXRhYmFzZS4KKyAqKi8KKworI2VuZGlmIC8qIEJMT0JfSCAqLwpkaWZmIC0tZ2l0IGEvYmxvY2stc2hhMS9zaGExLmMgYi9ibG9jay1zaGExL3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGQ0YmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYmxvY2stc2hhMS9zaGExLmMKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBTSEExIHJvdXRpbmUgb3B0aW1pemVkIHRvIGRvIHdvcmQgYWNjZXNzZXMgcmF0aGVyIHRoYW4gYnl0ZSBhY2Nlc3NlcywKKyAqIGFuZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb3BpZXMgaW50byB0aGUgY29udGV4dCBhcnJheS4KKyAqCisgKiBUaGlzIHdhcyBpbml0aWFsbHkgYmFzZWQgb24gdGhlIE1vemlsbGEgU0hBMSBpbXBsZW1lbnRhdGlvbiwgYWx0aG91Z2gKKyAqIG5vbmUgb2YgdGhlIG9yaWdpbmFsIE1vemlsbGEgY29kZSByZW1haW5zLgorICovCisKKy8qIHRoaXMgaXMgb25seSB0byBnZXQgZGVmaW5pdGlvbnMgZm9yIG1lbWNweSgpLCBudG9obCgpIGFuZCBodG9ubCgpICovCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKyNpbmNsdWRlICJzaGExLmgiCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKworLyoKKyAqIEZvcmNlIHVzYWdlIG9mIHJvbCBvciByb3IgYnkgc2VsZWN0aW5nIHRoZSBvbmUgd2l0aCB0aGUgc21hbGxlciBjb25zdGFudC4KKyAqIEl0IF9jYW5fIGdlbmVyYXRlIHNsaWdodGx5IHNtYWxsZXIgY29kZSAoYSBjb25zdGFudCBvZiAxIGlzIHNwZWNpYWwpLCBidXQKKyAqIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSBpdCdzIHBvc3NpYmx5IGZhc3RlciBvbiBhbnkgdWFyY2ggdGhhdCBkb2VzIGEKKyAqIHJvdGF0ZSB3aXRoIGEgbG9vcC4KKyAqLworCisjZGVmaW5lIFNIQV9BU00ob3AsIHgsIG4pICh7IHVuc2lnbmVkIGludCBfX3JlczsgX19hc21fXyhvcCAiICUxLCUwIjoiPXIiIChfX3Jlcyk6ImkiIChuKSwgIjAiICh4KSk7IF9fcmVzOyB9KQorI2RlZmluZSBTSEFfUk9MKHgsbikJU0hBX0FTTSgicm9sIiwgeCwgbikKKyNkZWZpbmUgU0hBX1JPUih4LG4pCVNIQV9BU00oInJvciIsIHgsIG4pCisKKyNlbHNlCisKKyNkZWZpbmUgU0hBX1JPVChYLGwscikJKCgoWCkgPDwgKGwpKSB8ICgoWCkgPj4gKHIpKSkKKyNkZWZpbmUgU0hBX1JPTChYLG4pCVNIQV9ST1QoWCxuLDMyLShuKSkKKyNkZWZpbmUgU0hBX1JPUihYLG4pCVNIQV9ST1QoWCwzMi0obiksbikKKworI2VuZGlmCisKKy8qCisgKiBJZiB5b3UgaGF2ZSAzMiByZWdpc3RlcnMgb3IgbW9yZSwgdGhlIGNvbXBpbGVyIGNhbiAoYW5kIHNob3VsZCkKKyAqIHRyeSB0byBjaGFuZ2UgdGhlIGFycmF5W10gYWNjZXNzZXMgaW50byByZWdpc3RlcnMuIEhvd2V2ZXIsIG9uCisgKiBtYWNoaW5lcyB3aXRoIGxlc3MgdGhhbiB+MjUgcmVnaXN0ZXJzLCB0aGF0IHdvbid0IHJlYWxseSB3b3JrLAorICogYW5kIGF0IGxlYXN0IGdjYyB3aWxsIG1ha2UgYW4gdW5ob2x5IG1lc3Mgb2YgaXQuCisgKgorICogU28gdG8gYXZvaWQgdGhhdCBtZXNzIHdoaWNoIGp1c3Qgc2xvd3MgdGhpbmdzIGRvd24sIHdlIGZvcmNlCisgKiB0aGUgc3RvcmVzIHRvIG1lbW9yeSB0byBhY3R1YWxseSBoYXBwZW4gKHdlIG1pZ2h0IGJlIGJldHRlciBvZmYKKyAqIHdpdGggYSAnVyh0KT0odmFsKTthc20oIiI6IittIiAoVyh0KSknIHRoZXJlIGluc3RlYWQsIGFzCisgKiBzdWdnZXN0ZWQgYnkgQXJ0dXIgU2thd2luYSAtIHRoYXQgd2lsbCBhbHNvIG1ha2UgZ2NjIHVuYWJsZSB0bworICogdHJ5IHRvIGRvIHRoZSBzaWxseSAib3B0aW1pemUgYXdheSBsb2FkcyIgcGFydCBiZWNhdXNlIGl0IHdvbid0CisgKiBzZWUgd2hhdCB0aGUgdmFsdWUgd2lsbCBiZSkuCisgKgorICogQmVuIEhlcnJlbnNjaG1pZHQgcmVwb3J0cyB0aGF0IG9uIFBQQywgdGhlIEMgdmVyc2lvbiBjb21lcyBjbG9zZQorICogdG8gdGhlIG9wdGltaXplZCBhc20gd2l0aCB0aGlzIChpZSBvbiBQUEMgeW91IGRvbid0IHdhbnQgdGhhdAorICogJ3ZvbGF0aWxlJywgc2luY2UgdGhlcmUgYXJlIGxvdHMgb2YgcmVnaXN0ZXJzKS4KKyAqCisgKiBPbiBBUk0gd2UgZ2V0IHRoZSBiZXN0IGNvZGUgZ2VuZXJhdGlvbiBieSBmb3JjaW5nIGEgZnVsbCBtZW1vcnkgYmFycmllcgorICogYmV0d2VlbiBlYWNoIFNIQV9ST1VORCwgb3RoZXJ3aXNlIGdjYyBoYXBwaWx5IGdldCB3aWxkIHdpdGggc3BpbGxpbmcgYW5kCisgKiB0aGUgc3RhY2sgZnJhbWUgc2l6ZSBzaW1wbHkgZXhwbG9kZSBhbmQgcGVyZm9ybWFuY2UgZ29lcyBkb3duIHRoZSBkcmFpbi4KKyAqLworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorICAjZGVmaW5lIHNldFcoeCwgdmFsKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikmVyh4KSA9ICh2YWwpKQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX2FybV9fKQorICAjZGVmaW5lIHNldFcoeCwgdmFsKSBkbyB7IFcoeCkgPSAodmFsKTsgX19hc21fXygiIjo6OiJtZW1vcnkiKTsgfSB3aGlsZSAoMCkKKyNlbHNlCisgICNkZWZpbmUgc2V0Vyh4LCB2YWwpIChXKHgpID0gKHZhbCkpCisjZW5kaWYKKworLyoKKyAqIFBlcmZvcm1hbmNlIG1pZ2h0IGJlIGltcHJvdmVkIGlmIHRoZSBDUFUgYXJjaGl0ZWN0dXJlIGlzIE9LIHdpdGgKKyAqIHVuYWxpZ25lZCAzMi1iaXQgbG9hZHMgYW5kIGEgZmFzdCBudG9obCgpIGlzIGF2YWlsYWJsZS4KKyAqIE90aGVyd2lzZSBmYWxsIGJhY2sgdG8gYnl0ZSBsb2FkcyBhbmQgc2hpZnRzIHdoaWNoIGlzIHBvcnRhYmxlLAorICogYW5kIGlzIGZhc3RlciBvbiBhcmNoaXRlY3R1cmVzIHdpdGggbWVtb3J5IGFsaWdubWVudCBpc3N1ZXMuCisgKi8KKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAorICAgIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfTV9YNjQpIHx8IFwKKyAgICBkZWZpbmVkKF9fcHBjX18pIHx8IGRlZmluZWQoX19wcGM2NF9fKSB8fCBcCisgICAgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBcCisgICAgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCisKKyNkZWZpbmUgZ2V0X2JlMzIocCkJbnRvaGwoKih1bnNpZ25lZCBpbnQgKikocCkpCisjZGVmaW5lIHB1dF9iZTMyKHAsIHYpCWRvIHsgKih1bnNpZ25lZCBpbnQgKikocCkgPSBodG9ubCh2KTsgfSB3aGlsZSAoMCkKKworI2Vsc2UKKworI2RlZmluZSBnZXRfYmUzMihwKQkoIFwKKwkoKigodW5zaWduZWQgY2hhciAqKShwKSArIDApIDw8IDI0KSB8IFwKKwkoKigodW5zaWduZWQgY2hhciAqKShwKSArIDEpIDw8IDE2KSB8IFwKKwkoKigodW5zaWduZWQgY2hhciAqKShwKSArIDIpIDw8ICA4KSB8IFwKKwkoKigodW5zaWduZWQgY2hhciAqKShwKSArIDMpIDw8ICAwKSApCisjZGVmaW5lIHB1dF9iZTMyKHAsIHYpCWRvIHsgXAorCXVuc2lnbmVkIGludCBfX3YgPSAodik7IFwKKwkqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMCkgPSBfX3YgPj4gMjQ7IFwKKwkqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMSkgPSBfX3YgPj4gMTY7IFwKKwkqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMikgPSBfX3YgPj4gIDg7IFwKKwkqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMykgPSBfX3YgPj4gIDA7IH0gd2hpbGUgKDApCisKKyNlbmRpZgorCisvKiBUaGlzICJyb2xscyIgb3ZlciB0aGUgNTEyLWJpdCBhcnJheSAqLworI2RlZmluZSBXKHgpIChhcnJheVsoeCkmMTVdKQorCisvKgorICogV2hlcmUgZG8gd2UgZ2V0IHRoZSBzb3VyY2UgZnJvbT8gVGhlIGZpcnN0IDE2IGl0ZXJhdGlvbnMgZ2V0IGl0IGZyb20KKyAqIHRoZSBpbnB1dCBkYXRhLCB0aGUgbmV4dCBtaXggaXQgZnJvbSB0aGUgNTEyLWJpdCBhcnJheS4KKyAqLworI2RlZmluZSBTSEFfU1JDKHQpIGdldF9iZTMyKCh1bnNpZ25lZCBjaGFyICopIGJsb2NrICsgKHQpKjQpCisjZGVmaW5lIFNIQV9NSVgodCkgU0hBX1JPTChXKCh0KSsxMykgXiBXKCh0KSs4KSBeIFcoKHQpKzIpIF4gVyh0KSwgMSk7CisKKyNkZWZpbmUgU0hBX1JPVU5EKHQsIGlucHV0LCBmbiwgY29uc3RhbnQsIEEsIEIsIEMsIEQsIEUpIGRvIHsgXAorCXVuc2lnbmVkIGludCBURU1QID0gaW5wdXQodCk7IHNldFcodCwgVEVNUCk7IFwKKwlFICs9IFRFTVAgKyBTSEFfUk9MKEEsNSkgKyAoZm4pICsgKGNvbnN0YW50KTsgXAorCUIgPSBTSEFfUk9SKEIsIDIpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFRfMF8xNSh0LCBBLCBCLCBDLCBELCBFKSAgU0hBX1JPVU5EKHQsIFNIQV9TUkMsICgoKENeRCkmQileRCkgLCAweDVhODI3OTk5LCBBLCBCLCBDLCBELCBFICkKKyNkZWZpbmUgVF8xNl8xOSh0LCBBLCBCLCBDLCBELCBFKSBTSEFfUk9VTkQodCwgU0hBX01JWCwgKCgoQ15EKSZCKV5EKSAsIDB4NWE4Mjc5OTksIEEsIEIsIEMsIEQsIEUgKQorI2RlZmluZSBUXzIwXzM5KHQsIEEsIEIsIEMsIEQsIEUpIFNIQV9ST1VORCh0LCBTSEFfTUlYLCAoQl5DXkQpICwgMHg2ZWQ5ZWJhMSwgQSwgQiwgQywgRCwgRSApCisjZGVmaW5lIFRfNDBfNTkodCwgQSwgQiwgQywgRCwgRSkgU0hBX1JPVU5EKHQsIFNIQV9NSVgsICgoQiZDKSsoRCYoQl5DKSkpICwgMHg4ZjFiYmNkYywgQSwgQiwgQywgRCwgRSApCisjZGVmaW5lIFRfNjBfNzkodCwgQSwgQiwgQywgRCwgRSkgU0hBX1JPVU5EKHQsIFNIQV9NSVgsIChCXkNeRCkgLCAgMHhjYTYyYzFkNiwgQSwgQiwgQywgRCwgRSApCisKK3N0YXRpYyB2b2lkIGJsa19TSEExX0Jsb2NrKGJsa19TSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJsb2NrKQoreworCXVuc2lnbmVkIGludCBBLEIsQyxELEU7CisJdW5zaWduZWQgaW50IGFycmF5WzE2XTsKKworCUEgPSBjdHgtPkhbMF07CisJQiA9IGN0eC0+SFsxXTsKKwlDID0gY3R4LT5IWzJdOworCUQgPSBjdHgtPkhbM107CisJRSA9IGN0eC0+SFs0XTsKKworCS8qIFJvdW5kIDEgLSBpdGVyYXRpb25zIDAtMTYgdGFrZSB0aGVpciBpbnB1dCBmcm9tICdibG9jaycgKi8KKwlUXzBfMTUoIDAsIEEsIEIsIEMsIEQsIEUpOworCVRfMF8xNSggMSwgRSwgQSwgQiwgQywgRCk7CisJVF8wXzE1KCAyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzBfMTUoIDMsIEMsIEQsIEUsIEEsIEIpOworCVRfMF8xNSggNCwgQiwgQywgRCwgRSwgQSk7CisJVF8wXzE1KCA1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzBfMTUoIDYsIEUsIEEsIEIsIEMsIEQpOworCVRfMF8xNSggNywgRCwgRSwgQSwgQiwgQyk7CisJVF8wXzE1KCA4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzBfMTUoIDksIEIsIEMsIEQsIEUsIEEpOworCVRfMF8xNSgxMCwgQSwgQiwgQywgRCwgRSk7CisJVF8wXzE1KDExLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzBfMTUoMTIsIEQsIEUsIEEsIEIsIEMpOworCVRfMF8xNSgxMywgQywgRCwgRSwgQSwgQik7CisJVF8wXzE1KDE0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzBfMTUoMTUsIEEsIEIsIEMsIEQsIEUpOworCisJLyogUm91bmQgMSAtIHRhaWwuIElucHV0IGZyb20gNTEyLWJpdCBtaXhpbmcgYXJyYXkgKi8KKwlUXzE2XzE5KDE2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzE2XzE5KDE3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzE2XzE5KDE4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzE2XzE5KDE5LCBCLCBDLCBELCBFLCBBKTsKKworCS8qIFJvdW5kIDIgKi8KKwlUXzIwXzM5KDIwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDIxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDIyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDIzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDI0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzIwXzM5KDI1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDI2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDI3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDI4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDI5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzIwXzM5KDMwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDMxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDMyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDMzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDM0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzIwXzM5KDM1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDM2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDM3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDM4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDM5LCBCLCBDLCBELCBFLCBBKTsKKworCS8qIFJvdW5kIDMgKi8KKwlUXzQwXzU5KDQwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDQxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDQyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDQzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDQ0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDQ1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDQ2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDQ3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDQ4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDQ5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDUwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDUxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDUyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDUzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDU0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDU1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDU2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDU3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDU4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDU5LCBCLCBDLCBELCBFLCBBKTsKKworCS8qIFJvdW5kIDQgKi8KKwlUXzYwXzc5KDYwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDYxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDYyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDYzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDY0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzYwXzc5KDY1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDY2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDY3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDY4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDY5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzYwXzc5KDcwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDcxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDcyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDczLCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDc0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzYwXzc5KDc1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDc2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDc3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDc4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDc5LCBCLCBDLCBELCBFLCBBKTsKKworCWN0eC0+SFswXSArPSBBOworCWN0eC0+SFsxXSArPSBCOworCWN0eC0+SFsyXSArPSBDOworCWN0eC0+SFszXSArPSBEOworCWN0eC0+SFs0XSArPSBFOworfQorCit2b2lkIGJsa19TSEExX0luaXQoYmxrX1NIQV9DVFggKmN0eCkKK3sKKwljdHgtPnNpemUgPSAwOworCisJLyogSW5pdGlhbGl6ZSBIIHdpdGggdGhlIG1hZ2ljIGNvbnN0YW50cyAoc2VlIEZJUFMxODAgZm9yIGNvbnN0YW50cykgKi8KKwljdHgtPkhbMF0gPSAweDY3NDUyMzAxOworCWN0eC0+SFsxXSA9IDB4ZWZjZGFiODk7CisJY3R4LT5IWzJdID0gMHg5OGJhZGNmZTsKKwljdHgtPkhbM10gPSAweDEwMzI1NDc2OworCWN0eC0+SFs0XSA9IDB4YzNkMmUxZjA7Cit9CisKK3ZvaWQgYmxrX1NIQTFfVXBkYXRlKGJsa19TSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXVuc2lnbmVkIGludCBsZW5XID0gY3R4LT5zaXplICYgNjM7CisKKwljdHgtPnNpemUgKz0gbGVuOworCisJLyogUmVhZCB0aGUgZGF0YSBpbnRvIFcgYW5kIHByb2Nlc3MgYmxvY2tzIGFzIHRoZXkgZ2V0IGZ1bGwgKi8KKwlpZiAobGVuVykgeworCQl1bnNpZ25lZCBpbnQgbGVmdCA9IDY0IC0gbGVuVzsKKwkJaWYgKGxlbiA8IGxlZnQpCisJCQlsZWZ0ID0gbGVuOworCQltZW1jcHkobGVuVyArIChjaGFyICopY3R4LT5XLCBkYXRhLCBsZWZ0KTsKKwkJbGVuVyA9IChsZW5XICsgbGVmdCkgJiA2MzsKKwkJbGVuIC09IGxlZnQ7CisJCWRhdGEgPSAoKGNvbnN0IGNoYXIgKilkYXRhICsgbGVmdCk7CisJCWlmIChsZW5XKQorCQkJcmV0dXJuOworCQlibGtfU0hBMV9CbG9jayhjdHgsIGN0eC0+Vyk7CisJfQorCXdoaWxlIChsZW4gPj0gNjQpIHsKKwkJYmxrX1NIQTFfQmxvY2soY3R4LCBkYXRhKTsKKwkJZGF0YSA9ICgoY29uc3QgY2hhciAqKWRhdGEgKyA2NCk7CisJCWxlbiAtPSA2NDsKKwl9CisJaWYgKGxlbikKKwkJbWVtY3B5KGN0eC0+VywgZGF0YSwgbGVuKTsKK30KKwordm9pZCBibGtfU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyIGhhc2hvdXRbMjBdLCBibGtfU0hBX0NUWCAqY3R4KQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhZFs2NF0gPSB7IDB4ODAgfTsKKwl1bnNpZ25lZCBpbnQgcGFkbGVuWzJdOworCWludCBpOworCisJLyogUGFkIHdpdGggYSBiaW5hcnkgMSAoaWUgMHg4MCksIHRoZW4gemVyb2VzLCB0aGVuIGxlbmd0aCAqLworCXBhZGxlblswXSA9IGh0b25sKCh1aW50MzJfdCkoY3R4LT5zaXplID4+IDI5KSk7CisJcGFkbGVuWzFdID0gaHRvbmwoKHVpbnQzMl90KShjdHgtPnNpemUgPDwgMykpOworCisJaSA9IGN0eC0+c2l6ZSAmIDYzOworCWJsa19TSEExX1VwZGF0ZShjdHgsIHBhZCwgMSsgKDYzICYgKDU1IC0gaSkpKTsKKwlibGtfU0hBMV9VcGRhdGUoY3R4LCBwYWRsZW4sIDgpOworCisJLyogT3V0cHV0IGhhc2ggKi8KKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlwdXRfYmUzMihoYXNob3V0ICsgaSo0LCBjdHgtPkhbaV0pOworfQpkaWZmIC0tZ2l0IGEvYmxvY2stc2hhMS9zaGExLmggYi9ibG9jay1zaGExL3NoYTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODY0ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvYmxvY2stc2hhMS9zaGExLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIFNIQTEgcm91dGluZSBvcHRpbWl6ZWQgdG8gZG8gd29yZCBhY2Nlc3NlcyByYXRoZXIgdGhhbiBieXRlIGFjY2Vzc2VzLAorICogYW5kIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvcGllcyBpbnRvIHRoZSBjb250ZXh0IGFycmF5LgorICoKKyAqIFRoaXMgd2FzIGluaXRpYWxseSBiYXNlZCBvbiB0aGUgTW96aWxsYSBTSEExIGltcGxlbWVudGF0aW9uLCBhbHRob3VnaAorICogbm9uZSBvZiB0aGUgb3JpZ2luYWwgTW96aWxsYSBjb2RlIHJlbWFpbnMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOworCXVuc2lnbmVkIGludCBIWzVdOworCXVuc2lnbmVkIGludCBXWzE2XTsKK30gYmxrX1NIQV9DVFg7CisKK3ZvaWQgYmxrX1NIQTFfSW5pdChibGtfU0hBX0NUWCAqY3R4KTsKK3ZvaWQgYmxrX1NIQTFfVXBkYXRlKGJsa19TSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGFJbiwgdW5zaWduZWQgbG9uZyBsZW4pOwordm9pZCBibGtfU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyIGhhc2hvdXRbMjBdLCBibGtfU0hBX0NUWCAqY3R4KTsKKworI2RlZmluZSBnaXRfU0hBX0NUWAlibGtfU0hBX0NUWAorI2RlZmluZSBnaXRfU0hBMV9Jbml0CWJsa19TSEExX0luaXQKKyNkZWZpbmUgZ2l0X1NIQTFfVXBkYXRlCWJsa19TSEExX1VwZGF0ZQorI2RlZmluZSBnaXRfU0hBMV9GaW5hbAlibGtfU0hBMV9GaW5hbApkaWZmIC0tZ2l0IGEvYnJhbmNoLmMgYi9icmFuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmVmMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvYnJhbmNoLmMKQEAgLTAsMCArMSwyOTEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKworc3RydWN0IHRyYWNraW5nIHsKKwlzdHJ1Y3QgcmVmc3BlYyBzcGVjOworCWNoYXIgKnNyYzsKKwljb25zdCBjaGFyICpyZW1vdGU7CisJaW50IG1hdGNoZXM7Cit9OworCitzdGF0aWMgaW50IGZpbmRfdHJhY2tlZF9icmFuY2goc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCB0cmFja2luZyAqdHJhY2tpbmcgPSBwcml2OworCisJaWYgKCFyZW1vdGVfZmluZF90cmFja2luZyhyZW1vdGUsICZ0cmFja2luZy0+c3BlYykpIHsKKwkJaWYgKCsrdHJhY2tpbmctPm1hdGNoZXMgPT0gMSkgeworCQkJdHJhY2tpbmctPnNyYyA9IHRyYWNraW5nLT5zcGVjLnNyYzsKKwkJCXRyYWNraW5nLT5yZW1vdGUgPSByZW1vdGUtPm5hbWU7CisJCX0gZWxzZSB7CisJCQlmcmVlKHRyYWNraW5nLT5zcGVjLnNyYyk7CisJCQlpZiAodHJhY2tpbmctPnNyYykgeworCQkJCWZyZWUodHJhY2tpbmctPnNyYyk7CisJCQkJdHJhY2tpbmctPnNyYyA9IE5VTEw7CisJCQl9CisJCX0KKwkJdHJhY2tpbmctPnNwZWMuc3JjID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG91bGRfc2V0dXBfcmViYXNlKGNvbnN0IGNoYXIgKm9yaWdpbikKK3sKKwlzd2l0Y2ggKGF1dG9yZWJhc2UpIHsKKwljYXNlIEFVVE9SRUJBU0VfTkVWRVI6CisJCXJldHVybiAwOworCWNhc2UgQVVUT1JFQkFTRV9MT0NBTDoKKwkJcmV0dXJuIG9yaWdpbiA9PSBOVUxMOworCWNhc2UgQVVUT1JFQkFTRV9SRU1PVEU6CisJCXJldHVybiBvcmlnaW4gIT0gTlVMTDsKKwljYXNlIEFVVE9SRUJBU0VfQUxXQVlTOgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaW5zdGFsbF9icmFuY2hfY29uZmlnKGludCBmbGFnLCBjb25zdCBjaGFyICpsb2NhbCwgY29uc3QgY2hhciAqb3JpZ2luLCBjb25zdCBjaGFyICpyZW1vdGUpCit7CisJY29uc3QgY2hhciAqc2hvcnRuYW1lID0gcmVtb3RlICsgMTE7CisJaW50IHJlbW90ZV9pc19icmFuY2ggPSAhcHJlZml4Y21wKHJlbW90ZSwgInJlZnMvaGVhZHMvIik7CisJc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmViYXNpbmcgPSBzaG91bGRfc2V0dXBfcmViYXNlKG9yaWdpbik7CisKKwlpZiAocmVtb3RlX2lzX2JyYW5jaAorCSAgICAmJiAhc3RyY21wKGxvY2FsLCBzaG9ydG5hbWUpCisJICAgICYmICFvcmlnaW4pIHsKKwkJd2FybmluZygiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIiwKKwkJCWxvY2FsKTsKKwkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9hZGRmKCZrZXksICJicmFuY2guJXMucmVtb3RlIiwgbG9jYWwpOworCWdpdF9jb25maWdfc2V0KGtleS5idWYsIG9yaWdpbiA/IG9yaWdpbiA6ICIuIik7CisKKwlzdHJidWZfcmVzZXQoJmtleSk7CisJc3RyYnVmX2FkZGYoJmtleSwgImJyYW5jaC4lcy5tZXJnZSIsIGxvY2FsKTsKKwlnaXRfY29uZmlnX3NldChrZXkuYnVmLCByZW1vdGUpOworCisJaWYgKHJlYmFzaW5nKSB7CisJCXN0cmJ1Zl9yZXNldCgma2V5KTsKKwkJc3RyYnVmX2FkZGYoJmtleSwgImJyYW5jaC4lcy5yZWJhc2UiLCBsb2NhbCk7CisJCWdpdF9jb25maWdfc2V0KGtleS5idWYsICJ0cnVlIik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCisJaWYgKGZsYWcgJiBCUkFOQ0hfQ09ORklHX1ZFUkJPU0UpIHsKKwkJaWYgKHJlbW90ZV9pc19icmFuY2ggJiYgb3JpZ2luKQorCQkJcHJpbnRmKHJlYmFzaW5nID8KKwkJCSAgICAgICAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMgYnkgcmViYXNpbmcuXG4iIDoKKwkJCSAgICAgICAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMuXG4iLAorCQkJICAgICAgIGxvY2FsLCBzaG9ydG5hbWUsIG9yaWdpbik7CisJCWVsc2UgaWYgKHJlbW90ZV9pc19icmFuY2ggJiYgIW9yaWdpbikKKwkJCXByaW50ZihyZWJhc2luZyA/CisJCQkgICAgICAgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICVzIGJ5IHJlYmFzaW5nLlxuIiA6CisJCQkgICAgICAgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICVzLlxuIiwKKwkJCSAgICAgICBsb2NhbCwgc2hvcnRuYW1lKTsKKwkJZWxzZSBpZiAoIXJlbW90ZV9pc19icmFuY2ggJiYgb3JpZ2luKQorCQkJcHJpbnRmKHJlYmFzaW5nID8KKwkJCSAgICAgICAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICVzIGJ5IHJlYmFzaW5nLlxuIiA6CisJCQkgICAgICAgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAlcy5cbiIsCisJCQkgICAgICAgbG9jYWwsIHJlbW90ZSk7CisJCWVsc2UgaWYgKCFyZW1vdGVfaXNfYnJhbmNoICYmICFvcmlnaW4pCisJCQlwcmludGYocmViYXNpbmcgPworCQkJICAgICAgICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcyBieSByZWJhc2luZy5cbiIgOgorCQkJICAgICAgICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcy5cbiIsCisJCQkgICAgICAgbG9jYWwsIHJlbW90ZSk7CisJCWVsc2UKKwkJCWRpZSgiQlVHOiBpbXBvc3NpYmxlIGNvbWJpbmF0aW9uIG9mICVkIGFuZCAlcCIsCisJCQkgICAgcmVtb3RlX2lzX2JyYW5jaCwgb3JpZ2luKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIG5ld19yZWYgaXMgYnJhbmNoZWQgb2ZmIG9mIG9yaWdfcmVmLCBhbmQgdHJpZXMKKyAqIHRvIGluZmVyIHRoZSBzZXR0aW5ncyBmb3IgYnJhbmNoLjxuZXdfcmVmPi57cmVtb3RlLG1lcmdlfSBmcm9tIHRoZQorICogY29uZmlnLgorICovCitzdGF0aWMgaW50IHNldHVwX3RyYWNraW5nKGNvbnN0IGNoYXIgKm5ld19yZWYsIGNvbnN0IGNoYXIgKm9yaWdfcmVmLAorCQkJICBlbnVtIGJyYW5jaF90cmFjayB0cmFjaywgaW50IHF1aWV0KQoreworCXN0cnVjdCB0cmFja2luZyB0cmFja2luZzsKKwlpbnQgY29uZmlnX2ZsYWdzID0gcXVpZXQgPyAwIDogQlJBTkNIX0NPTkZJR19WRVJCT1NFOworCisJaWYgKHN0cmxlbihuZXdfcmVmKSA+IDEwMjQgLSA3IC0gNyAtIDEpCisJCXJldHVybiBlcnJvcigiVHJhY2tpbmcgbm90IHNldCB1cDogbmFtZSB0b28gbG9uZzogJXMiLAorCQkJCW5ld19yZWYpOworCisJbWVtc2V0KCZ0cmFja2luZywgMCwgc2l6ZW9mKHRyYWNraW5nKSk7CisJdHJhY2tpbmcuc3BlYy5kc3QgPSAoY2hhciAqKW9yaWdfcmVmOworCWlmIChmb3JfZWFjaF9yZW1vdGUoZmluZF90cmFja2VkX2JyYW5jaCwgJnRyYWNraW5nKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIXRyYWNraW5nLm1hdGNoZXMpCisJCXN3aXRjaCAodHJhY2spIHsKKwkJY2FzZSBCUkFOQ0hfVFJBQ0tfQUxXQVlTOgorCQljYXNlIEJSQU5DSF9UUkFDS19FWFBMSUNJVDoKKwkJY2FzZSBCUkFOQ0hfVFJBQ0tfT1ZFUlJJREU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAxOworCQl9CisKKwlpZiAodHJhY2tpbmcubWF0Y2hlcyA+IDEpCisJCXJldHVybiBlcnJvcigiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIsCisJCQkJb3JpZ19yZWYpOworCisJaW5zdGFsbF9icmFuY2hfY29uZmlnKGNvbmZpZ19mbGFncywgbmV3X3JlZiwgdHJhY2tpbmcucmVtb3RlLAorCQkJICAgICAgdHJhY2tpbmcuc3JjID8gdHJhY2tpbmcuc3JjIDogb3JpZ19yZWYpOworCisJZnJlZSh0cmFja2luZy5zcmMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnJhbmNoX2Rlc2NfY2IgeworCWNvbnN0IGNoYXIgKmNvbmZpZ19uYW1lOworCWNvbnN0IGNoYXIgKnZhbHVlOworfTsKKworc3RhdGljIGludCByZWFkX2JyYW5jaF9kZXNjX2NiKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBicmFuY2hfZGVzY19jYiAqZGVzYyA9IGNiOworCWlmIChzdHJjbXAoZGVzYy0+Y29uZmlnX25hbWUsIHZhcikpCisJCXJldHVybiAwOworCWZyZWUoKGNoYXIgKilkZXNjLT52YWx1ZSk7CisJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZkZXNjLT52YWx1ZSwgdmFyLCB2YWx1ZSk7Cit9CisKK2ludCByZWFkX2JyYW5jaF9kZXNjKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqYnJhbmNoX25hbWUpCit7CisJc3RydWN0IGJyYW5jaF9kZXNjX2NiIGNiOworCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZuYW1lLCAiYnJhbmNoLiVzLmRlc2NyaXB0aW9uIiwgYnJhbmNoX25hbWUpOworCWNiLmNvbmZpZ19uYW1lID0gbmFtZS5idWY7CisJY2IudmFsdWUgPSBOVUxMOworCWlmIChnaXRfY29uZmlnKHJlYWRfYnJhbmNoX2Rlc2NfY2IsICZjYikgPCAwKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoY2IudmFsdWUpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBjYi52YWx1ZSk7CisJc3RyYnVmX3JlbGVhc2UoJm5hbWUpOworCXJldHVybiAwOworfQorCitpbnQgdmFsaWRhdGVfbmV3X2JyYW5jaG5hbWUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqcmVmLAorCQkJICAgIGludCBmb3JjZSwgaW50IGF0dHJfb25seSkKK3sKKwlpZiAoc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYocmVmLCBuYW1lKSkKKwkJZGllKCInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIsIG5hbWUpOworCisJaWYgKCFyZWZfZXhpc3RzKHJlZi0+YnVmKSkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoIWZvcmNlICYmICFhdHRyX29ubHkpCisJCWRpZSgiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iLCByZWYtPmJ1ZiArIHN0cmxlbigicmVmcy9oZWFkcy8iKSk7CisKKwlpZiAoIWF0dHJfb25seSkgeworCQljb25zdCBjaGFyICpoZWFkOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJCWhlYWQgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBzaGExLCAwLCBOVUxMKTsKKwkJaWYgKCFpc19iYXJlX3JlcG9zaXRvcnkoKSAmJiBoZWFkICYmICFzdHJjbXAoaGVhZCwgcmVmLT5idWYpKQorCQkJZGllKCJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgY3JlYXRlX2JyYW5jaChjb25zdCBjaGFyICpoZWFkLAorCQkgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdGFydF9uYW1lLAorCQkgICBpbnQgZm9yY2UsIGludCByZWZsb2csIGludCBjbG9iYmVyX2hlYWQsCisJCSAgIGludCBxdWlldCwgZW51bSBicmFuY2hfdHJhY2sgdHJhY2spCit7CisJc3RydWN0IHJlZl9sb2NrICpsb2NrID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyICpyZWFsX3JlZiwgbXNnW1BBVEhfTUFYICsgMjBdOworCXN0cnVjdCBzdHJidWYgcmVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZvcmNpbmcgPSAwOworCWludCBkb250X2NoYW5nZV9yZWYgPSAwOworCWludCBleHBsaWNpdF90cmFja2luZyA9IDA7CisKKwlpZiAodHJhY2sgPT0gQlJBTkNIX1RSQUNLX0VYUExJQ0lUIHx8IHRyYWNrID09IEJSQU5DSF9UUkFDS19PVkVSUklERSkKKwkJZXhwbGljaXRfdHJhY2tpbmcgPSAxOworCisJaWYgKHZhbGlkYXRlX25ld19icmFuY2huYW1lKG5hbWUsICZyZWYsIGZvcmNlLAorCQkJCSAgICB0cmFjayA9PSBCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUgfHwKKwkJCQkgICAgY2xvYmJlcl9oZWFkKSkgeworCQlpZiAoIWZvcmNlKQorCQkJZG9udF9jaGFuZ2VfcmVmID0gMTsKKwkJZWxzZQorCQkJZm9yY2luZyA9IDE7CisJfQorCisJcmVhbF9yZWYgPSBOVUxMOworCWlmIChnZXRfc2hhMShzdGFydF9uYW1lLCBzaGExKSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iLCBzdGFydF9uYW1lKTsKKworCXN3aXRjaCAoZHdpbV9yZWYoc3RhcnRfbmFtZSwgc3RybGVuKHN0YXJ0X25hbWUpLCBzaGExLCAmcmVhbF9yZWYpKSB7CisJY2FzZSAwOgorCQkvKiBOb3QgYnJhbmNoaW5nIGZyb20gYW55IGV4aXN0aW5nIGJyYW5jaCAqLworCQlpZiAoZXhwbGljaXRfdHJhY2tpbmcpCisJCQlkaWUoIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgaXMgbm90IGEgYnJhbmNoLiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCS8qIFVuaXF1ZSBjb21wbGV0aW9uIC0tIGdvb2QsIG9ubHkgaWYgaXQgaXMgYSByZWFsIGJyYW5jaCAqLworCQlpZiAocHJlZml4Y21wKHJlYWxfcmVmLCAicmVmcy9oZWFkcy8iKSAmJgorCQkgICAgcHJlZml4Y21wKHJlYWxfcmVmLCAicmVmcy9yZW1vdGVzLyIpKSB7CisJCQlpZiAoZXhwbGljaXRfdHJhY2tpbmcpCisJCQkJZGllKCJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50IGlzIG5vdCBhIGJyYW5jaC4iKTsKKwkJCWVsc2UKKwkJCQlyZWFsX3JlZiA9IE5VTEw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIiwgc3RhcnRfbmFtZSk7CisJCWJyZWFrOworCX0KKworCWlmICgoY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSkpID09IE5VTEwpCisJCWRpZSgiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIsIHN0YXJ0X25hbWUpOworCWhhc2hjcHkoc2hhMSwgY29tbWl0LT5vYmplY3Quc2hhMSk7CisKKwlpZiAoIWRvbnRfY2hhbmdlX3JlZikgeworCQlsb2NrID0gbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUocmVmLmJ1ZiwgTlVMTCwgMCk7CisJCWlmICghbG9jaykKKwkJCWRpZV9lcnJubygiRmFpbGVkIHRvIGxvY2sgcmVmIGZvciB1cGRhdGUiKTsKKwl9CisKKwlpZiAocmVmbG9nKQorCQlsb2dfYWxsX3JlZl91cGRhdGVzID0gMTsKKworCWlmIChmb3JjaW5nKQorCQlzbnByaW50Zihtc2csIHNpemVvZiBtc2csICJicmFuY2g6IFJlc2V0IHRvICVzIiwKKwkJCSBzdGFydF9uYW1lKTsKKwllbHNlIGlmICghZG9udF9jaGFuZ2VfcmVmKQorCQlzbnByaW50Zihtc2csIHNpemVvZiBtc2csICJicmFuY2g6IENyZWF0ZWQgZnJvbSAlcyIsCisJCQkgc3RhcnRfbmFtZSk7CisKKwlpZiAocmVhbF9yZWYgJiYgdHJhY2spCisJCXNldHVwX3RyYWNraW5nKHJlZi5idWYrMTEsIHJlYWxfcmVmLCB0cmFjaywgcXVpZXQpOworCisJaWYgKCFkb250X2NoYW5nZV9yZWYpCisJCWlmICh3cml0ZV9yZWZfc2hhMShsb2NrLCBzaGExLCBtc2cpIDwgMCkKKwkJCWRpZV9lcnJubygiRmFpbGVkIHRvIHdyaXRlIHJlZiIpOworCisJc3RyYnVmX3JlbGVhc2UoJnJlZik7CisJZnJlZShyZWFsX3JlZik7Cit9CisKK3ZvaWQgcmVtb3ZlX2JyYW5jaF9zdGF0ZSh2b2lkKQoreworCXVubGluayhnaXRfcGF0aCgiQ0hFUlJZX1BJQ0tfSEVBRCIpKTsKKwl1bmxpbmsoZ2l0X3BhdGgoIlJFVkVSVF9IRUFEIikpOworCXVubGluayhnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKTsKKwl1bmxpbmsoZ2l0X3BhdGgoIk1FUkdFX1JSIikpOworCXVubGluayhnaXRfcGF0aCgiTUVSR0VfTVNHIikpOworCXVubGluayhnaXRfcGF0aCgiTUVSR0VfTU9ERSIpKTsKKwl1bmxpbmsoZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKSk7Cit9CmRpZmYgLS1naXQgYS9icmFuY2guaCBiL2JyYW5jaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MTczYWIKLS0tIC9kZXYvbnVsbAorKysgYi9icmFuY2guaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIEJSQU5DSF9ICisjZGVmaW5lIEJSQU5DSF9ICisKKy8qIEZ1bmN0aW9ucyBmb3IgYWN0aW5nIG9uIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBicmFuY2hlcy4gKi8KKworLyoKKyAqIENyZWF0ZXMgYSBuZXcgYnJhbmNoLCB3aGVyZSBoZWFkIGlzIHRoZSBicmFuY2ggY3VycmVudGx5IGNoZWNrZWQKKyAqIG91dCwgbmFtZSBpcyB0aGUgbmV3IGJyYW5jaCBuYW1lLCBzdGFydF9uYW1lIGlzIHRoZSBuYW1lIG9mIHRoZQorICogZXhpc3RpbmcgYnJhbmNoIHRoYXQgdGhlIG5ldyBicmFuY2ggc2hvdWxkIHN0YXJ0IGZyb20sIGZvcmNlCisgKiBlbmFibGVzIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIChub24taGVhZCkgYnJhbmNoLCByZWZsb2cgY3JlYXRlcyBhCisgKiByZWZsb2cgZm9yIHRoZSBicmFuY2gsIGFuZCB0cmFjayBjYXVzZXMgdGhlIG5ldyBicmFuY2ggdG8gYmUKKyAqIGNvbmZpZ3VyZWQgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggdGhhdCBzdGFydF9uYW1lIGlzIGEgdHJhY2tpbmcKKyAqIGJyYW5jaCBmb3IgKGlmIGFueSkuCisgKi8KK3ZvaWQgY3JlYXRlX2JyYW5jaChjb25zdCBjaGFyICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdGFydF9uYW1lLAorCQkgICBpbnQgZm9yY2UsIGludCByZWZsb2csCisJCSAgIGludCBjbG9iYmVyX2hlYWQsIGludCBxdWlldCwgZW51bSBicmFuY2hfdHJhY2sgdHJhY2spOworCisvKgorICogVmFsaWRhdGVzIHRoYXQgdGhlIHJlcXVlc3RlZCBicmFuY2ggbWF5IGJlIGNyZWF0ZWQsIHJldHVybmluZyB0aGUKKyAqIGludGVycHJldGVkIHJlZiBpbiByZWYsIGZvcmNlIGluZGljYXRlcyB3aGV0aGVyIChub24taGVhZCkgYnJhbmNoZXMKKyAqIG1heSBiZSBvdmVyd3JpdHRlbi4gQSBub24temVybyByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIGZvcmNlCisgKiBwYXJhbWV0ZXIgd2FzIG5vbi16ZXJvIGFuZCB0aGUgYnJhbmNoIGFscmVhZHkgZXhpc3RzLgorICoKKyAqIENvbnRyYXJ5IHRvIGFsbCBvZiB0aGUgYWJvdmUsIHdoZW4gYXR0cl9vbmx5IGlzIDEsIHRoZSBjYWxsZXIgaXMKKyAqIG5vdCBpbnRlcmVzdGVkIGluIHZlcmlmeWluZyBpZiBpdCBpcyBPayB0byB1cGRhdGUgdGhlIG5hbWVkCisgKiBicmFuY2ggdG8gcG9pbnQgYXQgYSBwb3RlbnRpYWxseSBkaWZmZXJlbnQgY29tbWl0LiBJdCBpcyBtZXJlbHkKKyAqIGFza2luZyBpZiBpdCBpcyBPSyB0byBjaGFuZ2Ugc29tZSBhdHRyaWJ1dGUgZm9yIHRoZSBuYW1lZCBicmFuY2gKKyAqIChlLmcuIHRyYWNraW5nIHVwc3RyZWFtKS4KKyAqCisgKiBORUVEU1dPUks6IFRoaXMgbmVlZHMgdG8gYmUgc3BsaXQgaW50byB0d28gc2VwYXJhdGUgZnVuY3Rpb25zIGluIHRoZQorICogbG9uZ2VyIHJ1biBmb3Igc2FuaXR5LgorICoKKyAqLworaW50IHZhbGlkYXRlX25ld19icmFuY2huYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnJlZiwgaW50IGZvcmNlLCBpbnQgYXR0cl9vbmx5KTsKKworLyoKKyAqIFJlbW92ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2Ygd29ya2luZyBvbiB0aGUgY3VycmVudAorICogYnJhbmNoLiAoRS5nLiwgTUVSR0VfSEVBRCkKKyAqLwordm9pZCByZW1vdmVfYnJhbmNoX3N0YXRlKHZvaWQpOworCisvKgorICogQ29uZmlndXJlIGxvY2FsIGJyYW5jaCAibG9jYWwiIGFzIGRvd25zdHJlYW0gdG8gYnJhbmNoICJyZW1vdGUiCisgKiBmcm9tIHJlbW90ZSAib3JpZ2luIi4gIFVzZWQgYnkgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS4KKyAqLworI2RlZmluZSBCUkFOQ0hfQ09ORklHX1ZFUkJPU0UgMDEKK2V4dGVybiB2b2lkIGluc3RhbGxfYnJhbmNoX2NvbmZpZyhpbnQgZmxhZywgY29uc3QgY2hhciAqbG9jYWwsIGNvbnN0IGNoYXIgKm9yaWdpbiwgY29uc3QgY2hhciAqcmVtb3RlKTsKKworLyoKKyAqIFJlYWQgYnJhbmNoIGRlc2NyaXB0aW9uCisgKi8KK2V4dGVybiBpbnQgcmVhZF9icmFuY2hfZGVzYyhzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9idWlsdGluLmggYi9idWlsdGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxMTZiOAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4uaApAQCAtMCwwICsxLDE1MiBAQAorI2lmbmRlZiBCVUlMVElOX0gKKyNkZWZpbmUgQlVJTFRJTl9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisKKyNkZWZpbmUgREVGQVVMVF9NRVJHRV9MT0dfTEVOIDIwCisKK2V4dGVybiBjb25zdCBjaGFyIGdpdF91c2FnZV9zdHJpbmdbXTsKK2V4dGVybiBjb25zdCBjaGFyIGdpdF9tb3JlX2luZm9fc3RyaW5nW107CisKK2V4dGVybiB2b2lkIHBydW5lX3BhY2tlZF9vYmplY3RzKGludCk7CisKK3N0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgeworCXVuc2lnbmVkIGFkZF90aXRsZToxOworCWludCBzaG9ydGxvZ19sZW47Cit9OworCitleHRlcm4gaW50IGZtdF9tZXJnZV9tc2coc3RydWN0IHN0cmJ1ZiAqaW4sIHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCSBzdHJ1Y3QgZm10X21lcmdlX21zZ19vcHRzICopOworCitzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgeworCXN0cnVjdCBub3Rlc190cmVlICoqdHJlZXM7CisJY29uc3QgY2hhciAqY21kOworCWludCBlbmFibGVkOworCWNvbWJpbmVfbm90ZXNfZm4gY29tYmluZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZnM7CisJaW50IHJlZnNfZnJvbV9lbnY7CisJaW50IG1vZGVfZnJvbV9lbnY7Cit9OworCitzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmluaXRfY29weV9ub3Rlc19mb3JfcmV3cml0ZShjb25zdCBjaGFyICpjbWQpOworaW50IGNvcHlfbm90ZV9mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb21fb2JqLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0b19vYmopOwordm9pZCBmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMpOworCitleHRlcm4gaW50IGNoZWNrX3BhZ2VyX2NvbmZpZyhjb25zdCBjaGFyICpjbWQpOworc3RydWN0IGRpZmZfb3B0aW9uczsKK2V4dGVybiB2b2lkIHNldHVwX2RpZmZfcGFnZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKKworZXh0ZXJuIGludCB0ZXh0Y29udl9vYmplY3QoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbW9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IHNoYTFfdmFsaWQsIGNoYXIgKipidWYsIHVuc2lnbmVkIGxvbmcgKmJ1Zl9zaXplKTsKKworZXh0ZXJuIGludCBjbWRfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2FwcGx5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYmlzZWN0X19oZWxwZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYmxhbWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYnJhbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2J1bmRsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jYXRfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jaGVja291dChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jaGVja291dF9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jaGVja19hdHRyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NoZWNrX3JlZl9mb3JtYXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfY2hlcnJ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NoZXJyeV9waWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2Nsb25lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NsZWFuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NvbHVtbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfY29tbWl0X3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NvdW50X29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfY3JlZGVudGlhbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9kZXNjcmliZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9kaWZmX2ZpbGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2RpZmZfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfZGlmZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9kaWZmX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfZmFzdF9leHBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfZmV0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfZmV0Y2hfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9mbXRfbWVyZ2VfbXNnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2Zvcl9lYWNoX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9mb3JtYXRfcGF0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfZnNjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9nYyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9nZXRfdGFyX2NvbW1pdF9pZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9ncmVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2hhc2hfb2JqZWN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2hlbHAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfaW5kZXhfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9pbml0X2RiKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2xvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9sb2dfcmVmbG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2xzX2ZpbGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2xzX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbHNfcmVtb3RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX21haWxpbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX21haWxzcGxpdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9tZXJnZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9tZXJnZV9iYXNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX21lcmdlX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX21lcmdlX291cnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbWVyZ2VfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9tZXJnZV9yZWN1cnNpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbWVyZ2VfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9ta3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9ta3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbmFtZV9yZXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbm90ZXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfcGFja19vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3BhY2tfcmVkdW5kYW50KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3BhdGNoX2lkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3BydW5lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3BydW5lX3BhY2tlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9wdXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3JlYWRfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZWNlaXZlX3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfcmVmbG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3JlbW90ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZW1vdGVfZXh0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3JlbW90ZV9mZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZXBvX2NvbmZpZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZXJlcmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfcmVzZXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfcmV2X2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfcmV2X3BhcnNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3JldmVydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9ybShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9zZW5kX3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfc2hvcnRsb2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfc2hvdyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9zaG93X2JyYW5jaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9zdGF0dXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfc3RyaXBzcGFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9zeW1ib2xpY19yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdGFnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3Rhcl90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3VucGFja19maWxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3VucGFja19vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3VwZGF0ZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF91cGRhdGVfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3VwZGF0ZV9zZXJ2ZXJfaW5mbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF91cGxvYWRfYXJjaGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF91cGxvYWRfYXJjaGl2ZV93cml0ZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdmFyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3ZlcmlmeV90YWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdmVyc2lvbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF93aGF0Y2hhbmdlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF93cml0ZV90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3ZlcmlmeV9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3Nob3dfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3BhY2tfcmVmcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZXBsYWNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9idWlsdGluL2FkZC5jIGIvYnVpbHRpbi9hZGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY0MTAwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9hZGQuYwpAQCAtMCwwICsxLDQ4NSBAQAorLyoKKyAqICJnaXQgYWRkIiBidWlsdGluIGNvbW1hbmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGludXMgVG9ydmFsZHMKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiYnVsay1jaGVja2luLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9hZGRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGFkZCBbb3B0aW9uc10gWy0tXSA8ZmlsZXBhdHRlcm4+Li4uIiksCisJTlVMTAorfTsKK3N0YXRpYyBpbnQgcGF0Y2hfaW50ZXJhY3RpdmUsIGFkZF9pbnRlcmFjdGl2ZSwgZWRpdF9pbnRlcmFjdGl2ZTsKK3N0YXRpYyBpbnQgdGFrZV93b3JrdHJlZV9jaGFuZ2VzOworCitzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgeworCWludCBmbGFnczsKKwlpbnQgYWRkX2Vycm9yczsKK307CisKK3N0YXRpYyBpbnQgZml4X3VubWVyZ2VkX3N0YXR1cyhzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwKKwkJCSAgICAgICBzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgKmRhdGEpCit7CisJaWYgKHAtPnN0YXR1cyAhPSBESUZGX1NUQVRVU19VTk1FUkdFRCkKKwkJcmV0dXJuIHAtPnN0YXR1czsKKwlpZiAoIShkYXRhLT5mbGFncyAmIEFERF9DQUNIRV9JR05PUkVfUkVNT1ZBTCkgJiYgIXAtPnR3by0+bW9kZSkKKwkJLyoKKwkJICogVGhpcyBpcyBub3QgYW4gZXhwbGljaXQgYWRkIHJlcXVlc3QsIGFuZCB0aGUKKwkJICogcGF0aCBpcyBtaXNzaW5nIGZyb20gdGhlIHdvcmtpbmcgdHJlZSAoZGVsZXRlZCkKKwkJICovCisJCXJldHVybiBESUZGX1NUQVRVU19ERUxFVEVEOworCWVsc2UKKwkJLyoKKwkJICogRWl0aGVyIGFuIGV4cGxpY2l0IGFkZCByZXF1ZXN0LCBvciBwYXRoIGV4aXN0cworCQkgKiBpbiB0aGUgd29ya2luZyB0cmVlLiAgQW4gYXR0ZW1wdCB0byBleHBsaWNpdGx5CisJCSAqIGFkZCBhIHBhdGggdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd29ya2luZyB0cmVlCisJCSAqIHdpbGwgYmUgY2F1Z2h0IGFzIGFuIGVycm9yIGJ5IHRoZSBjYWxsZXIgaW1tZWRpYXRlbHkuCisJCSAqLworCQlyZXR1cm4gRElGRl9TVEFUVVNfTU9ESUZJRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jYWxsYmFjayhzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCB2b2lkICpjYmRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IHVwZGF0ZV9jYWxsYmFja19kYXRhICpkYXRhID0gY2JkYXRhOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJY29uc3QgY2hhciAqcGF0aCA9IHAtPm9uZS0+cGF0aDsKKwkJc3dpdGNoIChmaXhfdW5tZXJnZWRfc3RhdHVzKHAsIGRhdGEpKSB7CisJCWRlZmF1bHQ6CisJCQlkaWUoXygidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIpLCBwLT5zdGF0dXMpOworCQljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKKwkJCWlmIChhZGRfZmlsZV90b19pbmRleCgmdGhlX2luZGV4LCBwYXRoLCBkYXRhLT5mbGFncykpIHsKKwkJCQlpZiAoIShkYXRhLT5mbGFncyAmIEFERF9DQUNIRV9JR05PUkVfRVJST1JTKSkKKwkJCQkJZGllKF8oInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIpKTsKKwkJCQlkYXRhLT5hZGRfZXJyb3JzKys7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQkJaWYgKGRhdGEtPmZsYWdzICYgQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMKQorCQkJCWJyZWFrOworCQkJaWYgKCEoZGF0YS0+ZmxhZ3MgJiBBRERfQ0FDSEVfUFJFVEVORCkpCisJCQkJcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleCgmdGhlX2luZGV4LCBwYXRoKTsKKwkJCWlmIChkYXRhLT5mbGFncyAmIChBRERfQ0FDSEVfUFJFVEVORHxBRERfQ0FDSEVfVkVSQk9TRSkpCisJCQkJcHJpbnRmKF8oInJlbW92ZSAnJXMnXG4iKSwgcGF0aCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworaW50IGFkZF9maWxlc190b19jYWNoZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYywgaW50IGZsYWdzKQoreworCXN0cnVjdCB1cGRhdGVfY2FsbGJhY2tfZGF0YSBkYXRhOworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CisJaW5pdF9wYXRoc3BlYygmcmV2LnBydW5lX2RhdGEsIHBhdGhzcGVjKTsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gdXBkYXRlX2NhbGxiYWNrOworCWRhdGEuZmxhZ3MgPSBmbGFnczsKKwlkYXRhLmFkZF9lcnJvcnMgPSAwOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gJmRhdGE7CisJcmV2Lm1heF9jb3VudCA9IDA7IC8qIGRvIG5vdCBjb21wYXJlIHVubWVyZ2VkIHBhdGhzIHdpdGggc3RhZ2UgIzIgKi8KKwlydW5fZGlmZl9maWxlcygmcmV2LCBESUZGX1JBQ1lfSVNfTU9ESUZJRUQpOworCXJldHVybiAhIWRhdGEuYWRkX2Vycm9yczsKK30KKworc3RhdGljIHZvaWQgZmlsbF9wYXRoc3BlY19tYXRjaGVzKGNvbnN0IGNoYXIgKipwYXRoc3BlYywgY2hhciAqc2VlbiwgaW50IHNwZWNzKQoreworCWludCBudW1fdW5tYXRjaGVkID0gMCwgaTsKKworCS8qCisJICogU2luY2Ugd2UgYXJlIHdhbGtpbmcgdGhlIGluZGV4IGFzIGlmIHdlIHdlcmUgd2Fsa2luZyB0aGUgZGlyZWN0b3J5LAorCSAqIHdlIGhhdmUgdG8gbWFyayB0aGUgbWF0Y2hlZCBwYXRoc3BlYyBhcyBzZWVuOyBvdGhlcndpc2Ugd2Ugd2lsbAorCSAqIG1pc3Rha2VubHkgdGhpbmsgdGhhdCB0aGUgdXNlciBnYXZlIGEgcGF0aHNwZWMgdGhhdCBkaWQgbm90IG1hdGNoCisJICogYW55dGhpbmcuCisJICovCisJZm9yIChpID0gMDsgaSA8IHNwZWNzOyBpKyspCisJCWlmICghc2VlbltpXSkKKwkJCW51bV91bm1hdGNoZWQrKzsKKwlpZiAoIW51bV91bm1hdGNoZWQpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJbWF0Y2hfcGF0aHNwZWMocGF0aHNwZWMsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgMCwgc2Vlbik7CisJfQorfQorCitzdGF0aWMgY2hhciAqZmluZF91c2VkX3BhdGhzcGVjKGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwljaGFyICpzZWVuOworCWludCBpOworCisJZm9yIChpID0gMDsgcGF0aHNwZWNbaV07ICBpKyspCisJCTsgLyoganVzdCBjb3VudGluZyAqLworCXNlZW4gPSB4Y2FsbG9jKGksIDEpOworCWZpbGxfcGF0aHNwZWNfbWF0Y2hlcyhwYXRoc3BlYywgc2VlbiwgaSk7CisJcmV0dXJuIHNlZW47Cit9CisKK3N0YXRpYyBjaGFyICpwcnVuZV9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqKnBhdGhzcGVjLCBpbnQgcHJlZml4KQoreworCWNoYXIgKnNlZW47CisJaW50IGksIHNwZWNzOworCXN0cnVjdCBkaXJfZW50cnkgKipzcmMsICoqZHN0OworCisJZm9yIChzcGVjcyA9IDA7IHBhdGhzcGVjW3NwZWNzXTsgIHNwZWNzKyspCisJCS8qIG5vdGhpbmcgKi87CisJc2VlbiA9IHhjYWxsb2Moc3BlY3MsIDEpOworCisJc3JjID0gZHN0ID0gZGlyLT5lbnRyaWVzOworCWkgPSBkaXItPm5yOworCXdoaWxlICgtLWkgPj0gMCkgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnRyeSA9ICpzcmMrKzsKKwkJaWYgKG1hdGNoX3BhdGhzcGVjKHBhdGhzcGVjLCBlbnRyeS0+bmFtZSwgZW50cnktPmxlbiwKKwkJCQkgICBwcmVmaXgsIHNlZW4pKQorCQkJKmRzdCsrID0gZW50cnk7CisJfQorCWRpci0+bnIgPSBkc3QgLSBkaXItPmVudHJpZXM7CisJZmlsbF9wYXRoc3BlY19tYXRjaGVzKHBhdGhzcGVjLCBzZWVuLCBzcGVjcyk7CisJcmV0dXJuIHNlZW47Cit9CisKK3N0YXRpYyB2b2lkIHRyZWF0X2dpdGxpbmtzKGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwlpbnQgaTsKKworCWlmICghcGF0aHNwZWMgfHwgISpwYXRoc3BlYykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpIHsKKwkJCWludCBsZW4gPSBjZV9uYW1lbGVuKGNlKSwgajsKKwkJCWZvciAoaiA9IDA7IHBhdGhzcGVjW2pdOyBqKyspIHsKKwkJCQlpbnQgbGVuMiA9IHN0cmxlbihwYXRoc3BlY1tqXSk7CisJCQkJaWYgKGxlbjIgPD0gbGVuIHx8IHBhdGhzcGVjW2pdW2xlbl0gIT0gJy8nIHx8CisJCQkJICAgIG1lbWNtcChjZS0+bmFtZSwgcGF0aHNwZWNbal0sIGxlbikpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChsZW4yID09IGxlbiArIDEpCisJCQkJCS8qIHN0cmlwIHRyYWlsaW5nIHNsYXNoICovCisJCQkJCXBhdGhzcGVjW2pdID0geHN0cm5kdXAoY2UtPm5hbWUsIGxlbik7CisJCQkJZWxzZQorCQkJCQlkaWUgKF8oIlBhdGggJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIiksCisJCQkJCQlwYXRoc3BlY1tqXSwgbGVuLCBjZS0+bmFtZSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlZnJlc2goaW50IHZlcmJvc2UsIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwljaGFyICpzZWVuOworCWludCBpLCBzcGVjczsKKworCWZvciAoc3BlY3MgPSAwOyBwYXRoc3BlY1tzcGVjc107ICBzcGVjcysrKQorCQkvKiBub3RoaW5nICovOworCXNlZW4gPSB4Y2FsbG9jKHNwZWNzLCAxKTsKKwlyZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsIHZlcmJvc2UgPyBSRUZSRVNIX0lOX1BPUkNFTEFJTiA6IFJFRlJFU0hfUVVJRVQsCisJCSAgICAgIHBhdGhzcGVjLCBzZWVuLCBfKCJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIpKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlY3M7IGkrKykgeworCQlpZiAoIXNlZW5baV0pCisJCQlkaWUoXygicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIpLCBwYXRoc3BlY1tpXSk7CisJfQorICAgICAgICBmcmVlKHNlZW4pOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqKnZhbGlkYXRlX3BhdGhzcGVjKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKipwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YpOworCisJaWYgKHBhdGhzcGVjKSB7CisJCWNvbnN0IGNoYXIgKipwOworCQlmb3IgKHAgPSBwYXRoc3BlYzsgKnA7IHArKykgeworCQkJaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aCgqcCwgc3RybGVuKCpwKSkpIHsKKwkJCQlpbnQgbGVuID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCQkJCWRpZShfKCInJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiKSwgKnAgKyBsZW4pOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHBhdGhzcGVjOworfQorCitpbnQgcnVuX2FkZF9pbnRlcmFjdGl2ZShjb25zdCBjaGFyICpyZXZpc2lvbiwgY29uc3QgY2hhciAqcGF0Y2hfbW9kZSwKKwkJCWNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwlpbnQgc3RhdHVzLCBhYywgcGMgPSAwOworCWNvbnN0IGNoYXIgKiphcmdzOworCisJaWYgKHBhdGhzcGVjKQorCQl3aGlsZSAocGF0aHNwZWNbcGNdKQorCQkJcGMrKzsKKworCWFyZ3MgPSB4Y2FsbG9jKHNpemVvZihjb25zdCBjaGFyICopLCAocGMgKyA1KSk7CisJYWMgPSAwOworCWFyZ3NbYWMrK10gPSAiYWRkLS1pbnRlcmFjdGl2ZSI7CisJaWYgKHBhdGNoX21vZGUpCisJCWFyZ3NbYWMrK10gPSBwYXRjaF9tb2RlOworCWlmIChyZXZpc2lvbikKKwkJYXJnc1thYysrXSA9IHJldmlzaW9uOworCWFyZ3NbYWMrK10gPSAiLS0iOworCWlmIChwYykgeworCQltZW1jcHkoJihhcmdzW2FjXSksIHBhdGhzcGVjLCBzaXplb2YoY29uc3QgY2hhciAqKSAqIHBjKTsKKwkJYWMgKz0gcGM7CisJfQorCWFyZ3NbYWNdID0gTlVMTDsKKworCXN0YXR1cyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MsIFJVTl9HSVRfQ01EKTsKKwlmcmVlKGFyZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBpbnRlcmFjdGl2ZV9hZGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBwYXRjaCkKK3sKKwljb25zdCBjaGFyICoqcGF0aHNwZWMgPSBOVUxMOworCisJaWYgKGFyZ2MpIHsKKwkJcGF0aHNwZWMgPSB2YWxpZGF0ZV9wYXRoc3BlYyhhcmdjLCBhcmd2LCBwcmVmaXgpOworCQlpZiAoIXBhdGhzcGVjKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBydW5fYWRkX2ludGVyYWN0aXZlKE5VTEwsCisJCQkJICAgcGF0Y2ggPyAiLS1wYXRjaCIgOiBOVUxMLAorCQkJCSAgIHBhdGhzcGVjKTsKK30KKworc3RhdGljIGludCBlZGl0X3BhdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNoYXIgKmZpbGUgPSBnaXRfcGF0aGR1cCgiQUREX0VESVQucGF0Y2giKTsKKwljb25zdCBjaGFyICphcHBseV9hcmd2W10gPSB7ICJhcHBseSIsICItLXJlY291bnQiLCAiLS1jYWNoZWQiLAorCQlOVUxMLCBOVUxMIH07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQ7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlpbnQgb3V0OworCXN0cnVjdCBzdGF0IHN0OworCisJYXBwbHlfYXJndlszXSA9IGZpbGU7CisKKwlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllIChfKCJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiKSk7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCXJldi5kaWZmb3B0LmNvbnRleHQgPSA3OworCisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgSUdOT1JFX0RJUlRZX1NVQk1PRFVMRVMpOworCW91dCA9IG9wZW4oZmlsZSwgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKKwlpZiAob3V0IDwgMCkKKwkJZGllIChfKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIpLCBmaWxlKTsKKwlyZXYuZGlmZm9wdC5maWxlID0geGZkb3BlbihvdXQsICJ3Iik7CisJcmV2LmRpZmZvcHQuY2xvc2VfZmlsZSA9IDE7CisJaWYgKHJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApKQorCQlkaWUgKF8oIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIpKTsKKworCWxhdW5jaF9lZGl0b3IoZmlsZSwgTlVMTCwgTlVMTCk7CisKKwlpZiAoc3RhdChmaWxlLCAmc3QpKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHN0YXQgJyVzJyIpLCBmaWxlKTsKKwlpZiAoIXN0LnN0X3NpemUpCisJCWRpZShfKCJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iKSk7CisKKwltZW1zZXQoJmNoaWxkLCAwLCBzaXplb2YoY2hpbGQpKTsKKwljaGlsZC5naXRfY21kID0gMTsKKwljaGlsZC5hcmd2ID0gYXBwbHlfYXJndjsKKwlpZiAocnVuX2NvbW1hbmQoJmNoaWxkKSkKKwkJZGllIChfKCJDb3VsZCBub3QgYXBwbHkgJyVzJyIpLCBmaWxlKTsKKworCXVubGluayhmaWxlKTsKKwlmcmVlKGZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGU7CisKK3N0YXRpYyBjb25zdCBjaGFyIGlnbm9yZV9lcnJvcltdID0KK05fKCJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iKTsKKworc3RhdGljIGludCB2ZXJib3NlID0gMCwgc2hvd19vbmx5ID0gMCwgaWdub3JlZF90b28gPSAwLCByZWZyZXNoX29ubHkgPSAwOworc3RhdGljIGludCBpZ25vcmVfYWRkX2Vycm9ycywgYWRkcmVtb3ZlLCBpbnRlbnRfdG9fYWRkLCBpZ25vcmVfbWlzc2luZyA9IDA7CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fYWRkX29wdGlvbnNbXSA9IHsKKwlPUFRfX0RSWV9SVU4oJnNob3dfb25seSwgTl8oImRyeSBydW4iKSksCisJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwlPUFRfR1JPVVAoIiIpLAorCU9QVF9CT09MRUFOKCdpJywgImludGVyYWN0aXZlIiwgJmFkZF9pbnRlcmFjdGl2ZSwgTl8oImludGVyYWN0aXZlIHBpY2tpbmciKSksCisJT1BUX0JPT0xFQU4oJ3AnLCAicGF0Y2giLCAmcGF0Y2hfaW50ZXJhY3RpdmUsIE5fKCJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIpKSwKKwlPUFRfQk9PTEVBTignZScsICJlZGl0IiwgJmVkaXRfaW50ZXJhY3RpdmUsIE5fKCJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiKSksCisJT1BUX19GT1JDRSgmaWdub3JlZF90b28sIE5fKCJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiKSksCisJT1BUX0JPT0xFQU4oJ3UnLCAidXBkYXRlIiwgJnRha2Vfd29ya3RyZWVfY2hhbmdlcywgTl8oInVwZGF0ZSB0cmFja2VkIGZpbGVzIikpLAorCU9QVF9CT09MRUFOKCdOJywgImludGVudC10by1hZGQiLCAmaW50ZW50X3RvX2FkZCwgTl8oInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIpKSwKKwlPUFRfQk9PTEVBTignQScsICJhbGwiLCAmYWRkcmVtb3ZlLCBOXygiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIikpLAorCU9QVF9CT09MRUFOKCAwICwgInJlZnJlc2giLCAmcmVmcmVzaF9vbmx5LCBOXygiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IikpLAorCU9QVF9CT09MRUFOKCAwICwgImlnbm9yZS1lcnJvcnMiLCAmaWdub3JlX2FkZF9lcnJvcnMsIE5fKCJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIikpLAorCU9QVF9CT09MRUFOKCAwICwgImlnbm9yZS1taXNzaW5nIiwgJmlnbm9yZV9taXNzaW5nLCBOXygiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIikpLAorCU9QVF9FTkQoKSwKK307CisKK3N0YXRpYyBpbnQgYWRkX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJhZGQuaWdub3JlZXJyb3JzIikgfHwKKwkgICAgIXN0cmNtcCh2YXIsICJhZGQuaWdub3JlLWVycm9ycyIpKSB7CisJCWlnbm9yZV9hZGRfZXJyb3JzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2ZpbGVzKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGludCBmbGFncykKK3sKKwlpbnQgaSwgZXhpdF9zdGF0dXMgPSAwOworCisJaWYgKGRpci0+aWdub3JlZF9ucikgeworCQlmcHJpbnRmKHN0ZGVyciwgXyhpZ25vcmVfZXJyb3IpKTsKKwkJZm9yIChpID0gMDsgaSA8IGRpci0+aWdub3JlZF9ucjsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgZGlyLT5pZ25vcmVkW2ldLT5uYW1lKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iKSk7CisJCWRpZShfKCJubyBmaWxlcyBhZGRlZCIpKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLT5ucjsgaSsrKQorCQlpZiAoYWRkX2ZpbGVfdG9fY2FjaGUoZGlyLT5lbnRyaWVzW2ldLT5uYW1lLCBmbGFncykpIHsKKwkJCWlmICghaWdub3JlX2FkZF9lcnJvcnMpCisJCQkJZGllKF8oImFkZGluZyBmaWxlcyBmYWlsZWQiKSk7CisJCQlleGl0X3N0YXR1cyA9IDE7CisJCX0KKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CisKK2ludCBjbWRfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBleGl0X3N0YXR1cyA9IDA7CisJaW50IG5ld2ZkOworCWNvbnN0IGNoYXIgKipwYXRoc3BlYzsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisJaW50IGZsYWdzOworCWludCBhZGRfbmV3X2ZpbGVzOworCWludCByZXF1aXJlX3BhdGhzcGVjOworCWNoYXIgKnNlZW4gPSBOVUxMOworCisJZ2l0X2NvbmZpZyhhZGRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9hZGRfb3B0aW9ucywKKwkJCSAgYnVpbHRpbl9hZGRfdXNhZ2UsIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKwlpZiAocGF0Y2hfaW50ZXJhY3RpdmUpCisJCWFkZF9pbnRlcmFjdGl2ZSA9IDE7CisJaWYgKGFkZF9pbnRlcmFjdGl2ZSkKKwkJZXhpdChpbnRlcmFjdGl2ZV9hZGQoYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgsIHBhdGNoX2ludGVyYWN0aXZlKSk7CisKKwlpZiAoZWRpdF9pbnRlcmFjdGl2ZSkKKwkJcmV0dXJuKGVkaXRfcGF0Y2goYXJnYywgYXJndiwgcHJlZml4KSk7CisJYXJnYy0tOworCWFyZ3YrKzsKKworCWlmIChhZGRyZW1vdmUgJiYgdGFrZV93b3JrdHJlZV9jaGFuZ2VzKQorCQlkaWUoXygiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiKSk7CisJaWYgKCFzaG93X29ubHkgJiYgaWdub3JlX21pc3NpbmcpCisJCWRpZShfKCJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIikpOworCWlmICgoYWRkcmVtb3ZlIHx8IHRha2Vfd29ya3RyZWVfY2hhbmdlcykgJiYgIWFyZ2MpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKmhlcmVbMl0gPSB7ICIuIiwgTlVMTCB9OworCQlhcmdjID0gMTsKKwkJYXJndiA9IGhlcmU7CisJfQorCisJYWRkX25ld19maWxlcyA9ICF0YWtlX3dvcmt0cmVlX2NoYW5nZXMgJiYgIXJlZnJlc2hfb25seTsKKwlyZXF1aXJlX3BhdGhzcGVjID0gIXRha2Vfd29ya3RyZWVfY2hhbmdlczsKKworCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisKKwlmbGFncyA9ICgodmVyYm9zZSA/IEFERF9DQUNIRV9WRVJCT1NFIDogMCkgfAorCQkgKHNob3dfb25seSA/IEFERF9DQUNIRV9QUkVURU5EIDogMCkgfAorCQkgKGludGVudF90b19hZGQgPyBBRERfQ0FDSEVfSU5URU5UIDogMCkgfAorCQkgKGlnbm9yZV9hZGRfZXJyb3JzID8gQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMgOiAwKSB8CisJCSAoIShhZGRyZW1vdmUgfHwgdGFrZV93b3JrdHJlZV9jaGFuZ2VzKQorCQkgID8gQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMIDogMCkpOworCisJaWYgKHJlcXVpcmVfcGF0aHNwZWMgJiYgYXJnYyA9PSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIpKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIikpOworCQlyZXR1cm4gMDsKKwl9CisJcGF0aHNwZWMgPSB2YWxpZGF0ZV9wYXRoc3BlYyhhcmdjLCBhcmd2LCBwcmVmaXgpOworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisJdHJlYXRfZ2l0bGlua3MocGF0aHNwZWMpOworCisJaWYgKGFkZF9uZXdfZmlsZXMpIHsKKwkJaW50IGJhc2VsZW47CisKKwkJLyogU2V0IHVwIHRoZSBkZWZhdWx0IGdpdCBwb3JjZWxhaW4gZXhjbHVkZXMgKi8KKwkJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwkJaWYgKCFpZ25vcmVkX3RvbykgeworCQkJZGlyLmZsYWdzIHw9IERJUl9DT0xMRUNUX0lHTk9SRUQ7CisJCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKwkJfQorCisJCS8qIFRoaXMgcGlja3MgdXAgdGhlIHBhdGhzIHRoYXQgYXJlIG5vdCB0cmFja2VkICovCisJCWJhc2VsZW4gPSBmaWxsX2RpcmVjdG9yeSgmZGlyLCBwYXRoc3BlYyk7CisJCWlmIChwYXRoc3BlYykKKwkJCXNlZW4gPSBwcnVuZV9kaXJlY3RvcnkoJmRpciwgcGF0aHNwZWMsIGJhc2VsZW4pOworCX0KKworCWlmIChyZWZyZXNoX29ubHkpIHsKKwkJcmVmcmVzaCh2ZXJib3NlLCBwYXRoc3BlYyk7CisJCWdvdG8gZmluaXNoOworCX0KKworCWlmIChwYXRoc3BlYykgeworCQlpbnQgaTsKKwkJc3RydWN0IHBhdGhfZXhjbHVkZV9jaGVjayBjaGVjazsKKworCQlwYXRoX2V4Y2x1ZGVfY2hlY2tfaW5pdCgmY2hlY2ssICZkaXIpOworCQlpZiAoIXNlZW4pCisJCQlzZWVuID0gZmluZF91c2VkX3BhdGhzcGVjKHBhdGhzcGVjKTsKKwkJZm9yIChpID0gMDsgcGF0aHNwZWNbaV07IGkrKykgeworCQkJaWYgKCFzZWVuW2ldICYmIHBhdGhzcGVjW2ldWzBdCisJCQkgICAgJiYgIWZpbGVfZXhpc3RzKHBhdGhzcGVjW2ldKSkgeworCQkJCWlmIChpZ25vcmVfbWlzc2luZykgeworCQkJCQlpbnQgZHR5cGUgPSBEVF9VTktOT1dOOworCQkJCQlpZiAocGF0aF9leGNsdWRlZCgmY2hlY2ssIHBhdGhzcGVjW2ldLCAtMSwgJmR0eXBlKSkKKwkJCQkJCWRpcl9hZGRfaWdub3JlZCgmZGlyLCBwYXRoc3BlY1tpXSwgc3RybGVuKHBhdGhzcGVjW2ldKSk7CisJCQkJfSBlbHNlCisJCQkJCWRpZShfKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiksCisJCQkJCSAgICBwYXRoc3BlY1tpXSk7CisJCQl9CisJCX0KKwkJZnJlZShzZWVuKTsKKwkJcGF0aF9leGNsdWRlX2NoZWNrX2NsZWFyKCZjaGVjayk7CisJfQorCisJcGx1Z19idWxrX2NoZWNraW4oKTsKKworCWV4aXRfc3RhdHVzIHw9IGFkZF9maWxlc190b19jYWNoZShwcmVmaXgsIHBhdGhzcGVjLCBmbGFncyk7CisKKwlpZiAoYWRkX25ld19maWxlcykKKwkJZXhpdF9zdGF0dXMgfD0gYWRkX2ZpbGVzKCZkaXIsIGZsYWdzKTsKKworCXVucGx1Z19idWxrX2NoZWNraW4oKTsKKworIGZpbmlzaDoKKwlpZiAoYWN0aXZlX2NhY2hlX2NoYW5nZWQpIHsKKwkJaWYgKHdyaXRlX2NhY2hlKG5ld2ZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKKwkJICAgIGNvbW1pdF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSkpCisJCQlkaWUoXygiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCX0KKworCXJldHVybiBleGl0X3N0YXR1czsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYW5ub3RhdGUuYyBiL2J1aWx0aW4vYW5ub3RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQzZWVkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9hbm5vdGF0ZS5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiAiZ2l0IGFubm90YXRlIiBidWlsdGluIGFsaWFzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFJ5YW4gQW5kZXJzb24KKyAqLworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICoqbmFyZ3Y7CisJaW50IGk7CisJbmFyZ3YgPSB4bWFsbG9jKHNpemVvZihjaGFyICopICogKGFyZ2MgKyAyKSk7CisKKwluYXJndlswXSA9ICJhbm5vdGF0ZSI7CisJbmFyZ3ZbMV0gPSAiLWMiOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQluYXJndltpKzFdID0gYXJndltpXTsKKwl9CisJbmFyZ3ZbYXJnYyArIDFdID0gTlVMTDsKKworCXJldHVybiBjbWRfYmxhbWUoYXJnYyArIDEsIG5hcmd2LCBwcmVmaXgpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9hcHBseS5jIGIvYnVpbHRpbi9hcHBseS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NmIzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2FwcGx5LmMKQEAgLTAsMCArMSw0NDU0IEBACisvKgorICogYXBwbHkuYworICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqCisgKiBUaGlzIGFwcGxpZXMgcGF0Y2hlcyBvbiB0b3Agb2Ygc29tZSAoYXJiaXRyYXJ5KSB2ZXJzaW9uIG9mIHRoZSBTQ00uCisgKgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisKKy8qCisgKiAgLS1jaGVjayB0dXJucyBvbiBjaGVja2luZyB0aGF0IHRoZSB3b3JraW5nIHRyZWUgbWF0Y2hlcyB0aGUKKyAqICAgIGZpbGVzIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkLCBidXQgZG9lc24ndCBhcHBseSB0aGUgcGF0Y2gKKyAqICAtLXN0YXQgZG9lcyBqdXN0IGEgZGlmZnN0YXQsIGFuZCBkb2Vzbid0IGFjdHVhbGx5IGFwcGx5CisgKiAgLS1udW1zdGF0IGRvZXMgbnVtZXJpYyBkaWZmc3RhdCwgYW5kIGRvZXNuJ3QgYWN0dWFsbHkgYXBwbHkKKyAqICAtLWluZGV4LWluZm8gc2hvd3MgdGhlIG9sZCBhbmQgbmV3IGluZGV4IGluZm8gZm9yIHBhdGhzIGlmIGF2YWlsYWJsZS4KKyAqICAtLWluZGV4IHVwZGF0ZXMgdGhlIGNhY2hlIGFzIHdlbGwuCisgKiAgLS1jYWNoZWQgdXBkYXRlcyBvbmx5IHRoZSBjYWNoZSB3aXRob3V0IGV2ZXIgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnByZWZpeDsKK3N0YXRpYyBpbnQgcHJlZml4X2xlbmd0aCA9IC0xOworc3RhdGljIGludCBuZXdmZCA9IC0xOworCitzdGF0aWMgaW50IHVuaWRpZmZfemVybzsKK3N0YXRpYyBpbnQgcF92YWx1ZSA9IDE7CitzdGF0aWMgaW50IHBfdmFsdWVfa25vd247CitzdGF0aWMgaW50IGNoZWNrX2luZGV4Oworc3RhdGljIGludCB1cGRhdGVfaW5kZXg7CitzdGF0aWMgaW50IGNhY2hlZDsKK3N0YXRpYyBpbnQgZGlmZnN0YXQ7CitzdGF0aWMgaW50IG51bXN0YXQ7CitzdGF0aWMgaW50IHN1bW1hcnk7CitzdGF0aWMgaW50IGNoZWNrOworc3RhdGljIGludCBhcHBseSA9IDE7CitzdGF0aWMgaW50IGFwcGx5X2luX3JldmVyc2U7CitzdGF0aWMgaW50IGFwcGx5X3dpdGhfcmVqZWN0Oworc3RhdGljIGludCBhcHBseV92ZXJib3NlbHk7CitzdGF0aWMgaW50IGFsbG93X292ZXJsYXA7CitzdGF0aWMgaW50IG5vX2FkZDsKK3N0YXRpYyBpbnQgdGhyZWV3YXk7CitzdGF0aWMgY29uc3QgY2hhciAqZmFrZV9hbmNlc3RvcjsKK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CitzdGF0aWMgdW5zaWduZWQgaW50IHBfY29udGV4dCA9IFVJTlRfTUFYOworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcHBseV91c2FnZVtdID0geworCU5fKCJnaXQgYXBwbHkgW29wdGlvbnNdIFs8cGF0Y2g+Li4uXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBlbnVtIHdzX2Vycm9yX2FjdGlvbiB7CisJbm93YXJuX3dzX2Vycm9yLAorCXdhcm5fb25fd3NfZXJyb3IsCisJZGllX29uX3dzX2Vycm9yLAorCWNvcnJlY3Rfd3NfZXJyb3IKK30gd3NfZXJyb3JfYWN0aW9uID0gd2Fybl9vbl93c19lcnJvcjsKK3N0YXRpYyBpbnQgd2hpdGVzcGFjZV9lcnJvcjsKK3N0YXRpYyBpbnQgc3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9ycyA9IDU7CitzdGF0aWMgaW50IGFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzOworCitzdGF0aWMgZW51bSB3c19pZ25vcmUgeworCWlnbm9yZV93c19ub25lLAorCWlnbm9yZV93c19jaGFuZ2UKK30gd3NfaWdub3JlX2FjdGlvbiA9IGlnbm9yZV93c19ub25lOworCisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXRjaF9pbnB1dF9maWxlOworc3RhdGljIGNvbnN0IGNoYXIgKnJvb3Q7CitzdGF0aWMgaW50IHJvb3RfbGVuOworc3RhdGljIGludCByZWFkX3N0ZGluID0gMTsKK3N0YXRpYyBpbnQgb3B0aW9uczsKKworc3RhdGljIHZvaWQgcGFyc2Vfd2hpdGVzcGFjZV9vcHRpb24oY29uc3QgY2hhciAqb3B0aW9uKQoreworCWlmICghb3B0aW9uKSB7CisJCXdzX2Vycm9yX2FjdGlvbiA9IHdhcm5fb25fd3NfZXJyb3I7CisJCXJldHVybjsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAid2FybiIpKSB7CisJCXdzX2Vycm9yX2FjdGlvbiA9IHdhcm5fb25fd3NfZXJyb3I7CisJCXJldHVybjsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAibm93YXJuIikpIHsKKwkJd3NfZXJyb3JfYWN0aW9uID0gbm93YXJuX3dzX2Vycm9yOworCQlyZXR1cm47CisJfQorCWlmICghc3RyY21wKG9wdGlvbiwgImVycm9yIikpIHsKKwkJd3NfZXJyb3JfYWN0aW9uID0gZGllX29uX3dzX2Vycm9yOworCQlyZXR1cm47CisJfQorCWlmICghc3RyY21wKG9wdGlvbiwgImVycm9yLWFsbCIpKSB7CisJCXdzX2Vycm9yX2FjdGlvbiA9IGRpZV9vbl93c19lcnJvcjsKKwkJc3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9ycyA9IDA7CisJCXJldHVybjsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAic3RyaXAiKSB8fCAhc3RyY21wKG9wdGlvbiwgImZpeCIpKSB7CisJCXdzX2Vycm9yX2FjdGlvbiA9IGNvcnJlY3Rfd3NfZXJyb3I7CisJCXJldHVybjsKKwl9CisJZGllKF8oInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIiksIG9wdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2lnbm9yZXdoaXRlc3BhY2Vfb3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbikKK3sKKwlpZiAoIW9wdGlvbiB8fCAhc3RyY21wKG9wdGlvbiwgIm5vIikgfHwKKwkgICAgIXN0cmNtcChvcHRpb24sICJmYWxzZSIpIHx8ICFzdHJjbXAob3B0aW9uLCAibmV2ZXIiKSB8fAorCSAgICAhc3RyY21wKG9wdGlvbiwgIm5vbmUiKSkgeworCQl3c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7CisJCXJldHVybjsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAiY2hhbmdlIikpIHsKKwkJd3NfaWdub3JlX2FjdGlvbiA9IGlnbm9yZV93c19jaGFuZ2U7CisJCXJldHVybjsKKwl9CisJZGllKF8oInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIpLCBvcHRpb24pOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGVmYXVsdF93aGl0ZXNwYWNlX21vZGUoY29uc3QgY2hhciAqd2hpdGVzcGFjZV9vcHRpb24pCit7CisJaWYgKCF3aGl0ZXNwYWNlX29wdGlvbiAmJiAhYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlKQorCQl3c19lcnJvcl9hY3Rpb24gPSAoYXBwbHkgPyB3YXJuX29uX3dzX2Vycm9yIDogbm93YXJuX3dzX2Vycm9yKTsKK30KKworLyoKKyAqIEZvciAiZGlmZi1zdGF0IiBsaWtlIGJlaGF2aW91ciwgd2Uga2VlcCB0cmFjayBvZiB0aGUgYmlnZ2VzdCBjaGFuZ2UKKyAqIHdlJ3ZlIHNlZW4sIGFuZCB0aGUgbG9uZ2VzdCBmaWxlbmFtZS4gVGhhdCBhbGxvd3MgdXMgdG8gZG8gc2ltcGxlCisgKiBzY2FsaW5nLgorICovCitzdGF0aWMgaW50IG1heF9jaGFuZ2UsIG1heF9sZW47CisKKy8qCisgKiBWYXJpb3VzICJjdXJyZW50IHN0YXRlIiwgbm90YWJseSBsaW5lIG51bWJlcnMgYW5kIHdoYXQKKyAqIGZpbGUgKGFuZCBob3cpIHdlJ3JlIHBhdGNoaW5nIHJpZ2h0IG5vdy4uIFRoZSAiaXNfeHh4eCIKKyAqIHRoaW5ncyBhcmUgZmxhZ3MsIHdoZXJlIC0xIG1lYW5zICJkb24ndCBrbm93IHlldCIuCisgKi8KK3N0YXRpYyBpbnQgbGluZW5yID0gMTsKKworLyoKKyAqIFRoaXMgcmVwcmVzZW50cyBvbmUgImh1bmsiIGZyb20gYSBwYXRjaCwgc3RhcnRpbmcgd2l0aAorICogIkBAIC1vbGRwb3Msb2xkbGluZXMgK25ld3BvcyxuZXdsaW5lcyBAQCIgbWFya2VyLiAgVGhlCisgKiBwYXRjaCB0ZXh0IGlzIHBvaW50ZWQgYXQgYnkgcGF0Y2gsIGFuZCBpdHMgYnl0ZSBsZW5ndGgKKyAqIGlzIHN0b3JlZCBpbiBzaXplLiAgbGVhZGluZyBhbmQgdHJhaWxpbmcgYXJlIHRoZSBudW1iZXIKKyAqIG9mIGNvbnRleHQgbGluZXMuCisgKi8KK3N0cnVjdCBmcmFnbWVudCB7CisJdW5zaWduZWQgbG9uZyBsZWFkaW5nLCB0cmFpbGluZzsKKwl1bnNpZ25lZCBsb25nIG9sZHBvcywgb2xkbGluZXM7CisJdW5zaWduZWQgbG9uZyBuZXdwb3MsIG5ld2xpbmVzOworCS8qCisJICogJ3BhdGNoJyBpcyB1c3VhbGx5IGJvcnJvd2VkIGZyb20gYnVmIGluIGFwcGx5X3BhdGNoKCksCisJICogYnV0IHNvbWUgY29kZXBhdGhzIHN0b3JlIGFuIGFsbG9jYXRlZCBidWZmZXIuCisJICovCisJY29uc3QgY2hhciAqcGF0Y2g7CisJdW5zaWduZWQgZnJlZV9wYXRjaDoxLAorCQlyZWplY3RlZDoxOworCWludCBzaXplOworCWludCBsaW5lbnI7CisJc3RydWN0IGZyYWdtZW50ICpuZXh0OworfTsKKworLyoKKyAqIFdoZW4gZGVhbGluZyB3aXRoIGEgYmluYXJ5IHBhdGNoLCB3ZSByZXVzZSAibGVhZGluZyIgZmllbGQKKyAqIHRvIHN0b3JlIHRoZSB0eXBlIG9mIHRoZSBiaW5hcnkgaHVuaywgZWl0aGVyIGRlZmxhdGVkICJkZWx0YSIKKyAqIG9yIGRlZmxhdGVkICJsaXRlcmFsIi4KKyAqLworI2RlZmluZSBiaW5hcnlfcGF0Y2hfbWV0aG9kIGxlYWRpbmcKKyNkZWZpbmUgQklOQVJZX0RFTFRBX0RFRkxBVEVECTEKKyNkZWZpbmUgQklOQVJZX0xJVEVSQUxfREVGTEFURUQgMgorCisvKgorICogVGhpcyByZXByZXNlbnRzIGEgInBhdGNoIiB0byBhIGZpbGUsIGJvdGggbWV0YWluZm8gY2hhbmdlcworICogc3VjaCBhcyBjcmVhdGlvbi9kZWxldGlvbiwgZmlsZW1vZGUgYW5kIGNvbnRlbnQgY2hhbmdlcyByZXByZXNlbnRlZAorICogYXMgYSBzZXJpZXMgb2YgZnJhZ21lbnRzLgorICovCitzdHJ1Y3QgcGF0Y2ggeworCWNoYXIgKm5ld19uYW1lLCAqb2xkX25hbWUsICpkZWZfbmFtZTsKKwl1bnNpZ25lZCBpbnQgb2xkX21vZGUsIG5ld19tb2RlOworCWludCBpc19uZXcsIGlzX2RlbGV0ZTsJLyogLTEgPSB1bmtub3duLCAwID0gZmFsc2UsIDEgPSB0cnVlICovCisJaW50IHJlamVjdGVkOworCXVuc2lnbmVkIHdzX3J1bGU7CisJaW50IGxpbmVzX2FkZGVkLCBsaW5lc19kZWxldGVkOworCWludCBzY29yZTsKKwl1bnNpZ25lZCBpbnQgaXNfdG9wbGV2ZWxfcmVsYXRpdmU6MTsKKwl1bnNpZ25lZCBpbnQgaW5hY2N1cmF0ZV9lb2Y6MTsKKwl1bnNpZ25lZCBpbnQgaXNfYmluYXJ5OjE7CisJdW5zaWduZWQgaW50IGlzX2NvcHk6MTsKKwl1bnNpZ25lZCBpbnQgaXNfcmVuYW1lOjE7CisJdW5zaWduZWQgaW50IHJlY291bnQ6MTsKKwl1bnNpZ25lZCBpbnQgY29uZmxpY3RlZF90aHJlZXdheToxOworCXVuc2lnbmVkIGludCBkaXJlY3RfdG9fdGhyZWV3YXk6MTsKKwlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50czsKKwljaGFyICpyZXN1bHQ7CisJc2l6ZV90IHJlc3VsdHNpemU7CisJY2hhciBvbGRfc2hhMV9wcmVmaXhbNDFdOworCWNoYXIgbmV3X3NoYTFfcHJlZml4WzQxXTsKKwlzdHJ1Y3QgcGF0Y2ggKm5leHQ7CisKKwkvKiB0aHJlZS13YXkgZmFsbGJhY2sgcmVzdWx0ICovCisJdW5zaWduZWQgY2hhciB0aHJlZXdheV9zdGFnZVszXVsyMF07Cit9OworCitzdGF0aWMgdm9pZCBmcmVlX2ZyYWdtZW50X2xpc3Qoc3RydWN0IGZyYWdtZW50ICpsaXN0KQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBmcmFnbWVudCAqbmV4dCA9IGxpc3QtPm5leHQ7CisJCWlmIChsaXN0LT5mcmVlX3BhdGNoKQorCQkJZnJlZSgoY2hhciAqKWxpc3QtPnBhdGNoKTsKKwkJZnJlZShsaXN0KTsKKwkJbGlzdCA9IG5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX3BhdGNoKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJZnJlZV9mcmFnbWVudF9saXN0KHBhdGNoLT5mcmFnbWVudHMpOworCWZyZWUocGF0Y2gtPmRlZl9uYW1lKTsKKwlmcmVlKHBhdGNoLT5vbGRfbmFtZSk7CisJZnJlZShwYXRjaC0+bmV3X25hbWUpOworCWZyZWUocGF0Y2gtPnJlc3VsdCk7CisJZnJlZShwYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcGF0Y2hfbGlzdChzdHJ1Y3QgcGF0Y2ggKmxpc3QpCit7CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IHBhdGNoICpuZXh0ID0gbGlzdC0+bmV4dDsKKwkJZnJlZV9wYXRjaChsaXN0KTsKKwkJbGlzdCA9IG5leHQ7CisJfQorfQorCisvKgorICogQSBsaW5lIGluIGEgZmlsZSwgbGVuLWJ5dGVzIGxvbmcgKGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBMRiwKKyAqIGV4Y2VwdCBmb3IgYW4gaW5jb21wbGV0ZSBsaW5lIGF0IHRoZSBlbmQgaWYgdGhlIGZpbGUgZW5kcyB3aXRoCisgKiBvbmUpLCBhbmQgaXRzIGNvbnRlbnRzIGhhc2hlcyB0byAnaGFzaCcuCisgKi8KK3N0cnVjdCBsaW5lIHsKKwlzaXplX3QgbGVuOworCXVuc2lnbmVkIGhhc2ggOiAyNDsKKwl1bnNpZ25lZCBmbGFnIDogODsKKyNkZWZpbmUgTElORV9DT01NT04gICAgIDEKKyNkZWZpbmUgTElORV9QQVRDSEVECTIKK307CisKKy8qCisgKiBUaGlzIHJlcHJlc2VudHMgYSAiZmlsZSIsIHdoaWNoIGlzIGFuIGFycmF5IG9mICJsaW5lcyIuCisgKi8KK3N0cnVjdCBpbWFnZSB7CisJY2hhciAqYnVmOworCXNpemVfdCBsZW47CisJc2l6ZV90IG5yOworCXNpemVfdCBhbGxvYzsKKwlzdHJ1Y3QgbGluZSAqbGluZV9hbGxvY2F0ZWQ7CisJc3RydWN0IGxpbmUgKmxpbmU7Cit9OworCisvKgorICogUmVjb3JkcyBmaWxlbmFtZXMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCwgaW4gb3JkZXIgdG8gaGFuZGxlCisgKiB0aGUgY2FzZSB3aGVyZSBtb3JlIHRoYW4gb25lIHBhdGNoZXMgdG91Y2ggdGhlIHNhbWUgZmlsZS4KKyAqLworCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGZuX3RhYmxlOworCitzdGF0aWMgdWludDMyX3QgaGFzaF9saW5lKGNvbnN0IGNoYXIgKmNwLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBpOworCXVpbnQzMl90IGg7CisJZm9yIChpID0gMCwgaCA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoIWlzc3BhY2UoY3BbaV0pKSB7CisJCQloID0gaCAqIDMgKyAoY3BbaV0gJiAweGZmKTsKKwkJfQorCX0KKwlyZXR1cm4gaDsKK30KKworLyoKKyAqIENvbXBhcmUgbGluZXMgczEgb2YgbGVuZ3RoIG4xIGFuZCBzMiBvZiBsZW5ndGggbjIsIGlnbm9yaW5nCisgKiB3aGl0ZXNwYWNlIGRpZmZlcmVuY2UuIFJldHVybnMgMSBpZiB0aGV5IG1hdGNoLCAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGZ1enp5X21hdGNobGluZXMoY29uc3QgY2hhciAqczEsIHNpemVfdCBuMSwKKwkJCSAgICBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4yKQoreworCWNvbnN0IGNoYXIgKmxhc3QxID0gczEgKyBuMSAtIDE7CisJY29uc3QgY2hhciAqbGFzdDIgPSBzMiArIG4yIC0gMTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCS8qIGlnbm9yZSBsaW5lIGVuZGluZ3MgKi8KKwl3aGlsZSAoKCpsYXN0MSA9PSAnXHInKSB8fCAoKmxhc3QxID09ICdcbicpKQorCQlsYXN0MS0tOworCXdoaWxlICgoKmxhc3QyID09ICdccicpIHx8ICgqbGFzdDIgPT0gJ1xuJykpCisJCWxhc3QyLS07CisKKwkvKiBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworCXdoaWxlIChpc3NwYWNlKCpzMSkgJiYgKHMxIDw9IGxhc3QxKSkKKwkJczErKzsKKwl3aGlsZSAoaXNzcGFjZSgqczIpICYmIChzMiA8PSBsYXN0MikpCisJCXMyKys7CisJLyogZWFybHkgcmV0dXJuIGlmIGJvdGggbGluZXMgYXJlIGVtcHR5ICovCisJaWYgKChzMSA+IGxhc3QxKSAmJiAoczIgPiBsYXN0MikpCisJCXJldHVybiAxOworCXdoaWxlICghcmVzdWx0KSB7CisJCXJlc3VsdCA9ICpzMSsrIC0gKnMyKys7CisJCS8qCisJCSAqIFNraXAgd2hpdGVzcGFjZSBpbnNpZGUuIFdlIGNoZWNrIGZvciB3aGl0ZXNwYWNlIG9uCisJCSAqIGJvdGggYnVmZmVycyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgImEgYiIgdG8gbWF0Y2gKKwkJICogImFiIgorCQkgKi8KKwkJaWYgKGlzc3BhY2UoKnMxKSAmJiBpc3NwYWNlKCpzMikpIHsKKwkJCXdoaWxlIChpc3NwYWNlKCpzMSkgJiYgczEgPD0gbGFzdDEpCisJCQkJczErKzsKKwkJCXdoaWxlIChpc3NwYWNlKCpzMikgJiYgczIgPD0gbGFzdDIpCisJCQkJczIrKzsKKwkJfQorCQkvKgorCQkgKiBJZiB3ZSByZWFjaGVkIHRoZSBlbmQgb24gb25lIHNpZGUgb25seSwKKwkJICogbGluZXMgZG9uJ3QgbWF0Y2gKKwkJICovCisJCWlmICgKKwkJICAgICgoczIgPiBsYXN0MikgJiYgKHMxIDw9IGxhc3QxKSkgfHwKKwkJICAgICgoczEgPiBsYXN0MSkgJiYgKHMyIDw9IGxhc3QyKSkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKChzMSA+IGxhc3QxKSAmJiAoczIgPiBsYXN0MikpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gIXJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgYWRkX2xpbmVfaW5mbyhzdHJ1Y3QgaW1hZ2UgKmltZywgY29uc3QgY2hhciAqYm9sLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBmbGFnKQoreworCUFMTE9DX0dST1coaW1nLT5saW5lX2FsbG9jYXRlZCwgaW1nLT5uciArIDEsIGltZy0+YWxsb2MpOworCWltZy0+bGluZV9hbGxvY2F0ZWRbaW1nLT5ucl0ubGVuID0gbGVuOworCWltZy0+bGluZV9hbGxvY2F0ZWRbaW1nLT5ucl0uaGFzaCA9IGhhc2hfbGluZShib2wsIGxlbik7CisJaW1nLT5saW5lX2FsbG9jYXRlZFtpbWctPm5yXS5mbGFnID0gZmxhZzsKKwlpbWctPm5yKys7Cit9CisKKy8qCisgKiAiYnVmIiBoYXMgdGhlIGZpbGUgY29udGVudHMgdG8gYmUgcGF0Y2hlZCAocmVhZCBmcm9tIHZhcmlvdXMgc291cmNlcykuCisgKiBhdHRhY2ggaXQgdG8gImltYWdlIiBhbmQgYWRkIGxpbmUtYmFzZWQgaW5kZXggdG8gaXQuCisgKiAiaW1hZ2UiIG5vdyBvd25zIHRoZSAiYnVmIi4KKyAqLworc3RhdGljIHZvaWQgcHJlcGFyZV9pbWFnZShzdHJ1Y3QgaW1hZ2UgKmltYWdlLCBjaGFyICpidWYsIHNpemVfdCBsZW4sCisJCQkgIGludCBwcmVwYXJlX2xpbmV0YWJsZSkKK3sKKwljb25zdCBjaGFyICpjcCwgKmVwOworCisJbWVtc2V0KGltYWdlLCAwLCBzaXplb2YoKmltYWdlKSk7CisJaW1hZ2UtPmJ1ZiA9IGJ1ZjsKKwlpbWFnZS0+bGVuID0gbGVuOworCisJaWYgKCFwcmVwYXJlX2xpbmV0YWJsZSkKKwkJcmV0dXJuOworCisJZXAgPSBpbWFnZS0+YnVmICsgaW1hZ2UtPmxlbjsKKwljcCA9IGltYWdlLT5idWY7CisJd2hpbGUgKGNwIDwgZXApIHsKKwkJY29uc3QgY2hhciAqbmV4dDsKKwkJZm9yIChuZXh0ID0gY3A7IG5leHQgPCBlcCAmJiAqbmV4dCAhPSAnXG4nOyBuZXh0KyspCisJCQk7CisJCWlmIChuZXh0IDwgZXApCisJCQluZXh0Kys7CisJCWFkZF9saW5lX2luZm8oaW1hZ2UsIGNwLCBuZXh0IC0gY3AsIDApOworCQljcCA9IG5leHQ7CisJfQorCWltYWdlLT5saW5lID0gaW1hZ2UtPmxpbmVfYWxsb2NhdGVkOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9pbWFnZShzdHJ1Y3QgaW1hZ2UgKmltYWdlKQoreworCWZyZWUoaW1hZ2UtPmJ1Zik7CisJZnJlZShpbWFnZS0+bGluZV9hbGxvY2F0ZWQpOworCW1lbXNldChpbWFnZSwgMCwgc2l6ZW9mKCppbWFnZSkpOworfQorCisvKiBmbXQgbXVzdCBjb250YWluIF9vbmVfICVzIGFuZCBubyBvdGhlciBzdWJzdGl0dXRpb24gKi8KK3N0YXRpYyB2b2lkIHNheV9wYXRjaF9uYW1lKEZJTEUgKm91dHB1dCwgY29uc3QgY2hhciAqZm10LCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChwYXRjaC0+b2xkX25hbWUgJiYgcGF0Y2gtPm5ld19uYW1lICYmCisJICAgIHN0cmNtcChwYXRjaC0+b2xkX25hbWUsIHBhdGNoLT5uZXdfbmFtZSkpIHsKKwkJcXVvdGVfY19zdHlsZShwYXRjaC0+b2xkX25hbWUsICZzYiwgTlVMTCwgMCk7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiID0+ICIpOworCQlxdW90ZV9jX3N0eWxlKHBhdGNoLT5uZXdfbmFtZSwgJnNiLCBOVUxMLCAwKTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpuID0gcGF0Y2gtPm5ld19uYW1lOworCQlpZiAoIW4pCisJCQluID0gcGF0Y2gtPm9sZF9uYW1lOworCQlxdW90ZV9jX3N0eWxlKG4sICZzYiwgTlVMTCwgMCk7CisJfQorCWZwcmludGYob3V0cHV0LCBmbXQsIHNiLmJ1Zik7CisJZnB1dGMoJ1xuJywgb3V0cHV0KTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCisjZGVmaW5lIFNMT1AgKDE2KQorCitzdGF0aWMgdm9pZCByZWFkX3BhdGNoX2ZpbGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBmZCkKK3sKKwlpZiAoc3RyYnVmX3JlYWQoc2IsIGZkLCAwKSA8IDApCisJCWRpZV9lcnJubygiZ2l0IGFwcGx5OiBmYWlsZWQgdG8gcmVhZCIpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIHNvbWUgc2xvcCBpbiB0aGUgYnVmZmVyCisJICogc28gdGhhdCB3ZSBjYW4gZG8gc3BlY3VsYXRpdmUgIm1lbWNtcCIgZXRjLCBhbmQKKwkgKiBzZWUgdG8gaXQgdGhhdCBpdCBpcyBOVUwtZmlsbGVkLgorCSAqLworCXN0cmJ1Zl9ncm93KHNiLCBTTE9QKTsKKwltZW1zZXQoc2ItPmJ1ZiArIHNiLT5sZW4sIDAsIFNMT1ApOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsaW5lbGVuKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbGVuID0gMDsKKwl3aGlsZSAoc2l6ZS0tKSB7CisJCWxlbisrOworCQlpZiAoKmJ1ZmZlcisrID09ICdcbicpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBpc19kZXZfbnVsbChjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuICFtZW1jbXAoIi9kZXYvbnVsbCIsIHN0ciwgOSkgJiYgaXNzcGFjZShzdHJbOV0pOworfQorCisjZGVmaW5lIFRFUk1fU1BBQ0UJMQorI2RlZmluZSBURVJNX1RBQgkyCisKK3N0YXRpYyBpbnQgbmFtZV90ZXJtaW5hdGUoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBjLCBpbnQgdGVybWluYXRlKQoreworCWlmIChjID09ICcgJyAmJiAhKHRlcm1pbmF0ZSAmIFRFUk1fU1BBQ0UpKQorCQlyZXR1cm4gMDsKKwlpZiAoYyA9PSAnXHQnICYmICEodGVybWluYXRlICYgVEVSTV9UQUIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKiByZW1vdmUgZG91YmxlIHNsYXNoZXMgdG8gbWFrZSAtLWluZGV4IHdvcmsgd2l0aCBzdWNoIGZpbGVuYW1lcyAqLworc3RhdGljIGNoYXIgKnNxdWFzaF9zbGFzaChjaGFyICpuYW1lKQoreworCWludCBpID0gMCwgaiA9IDA7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKG5hbWVbaV0pIHsKKwkJaWYgKChuYW1lW2orK10gPSBuYW1lW2krK10pID09ICcvJykKKwkJCXdoaWxlIChuYW1lW2ldID09ICcvJykKKwkJCQlpKys7CisJfQorCW5hbWVbal0gPSAnXDAnOworCXJldHVybiBuYW1lOworfQorCitzdGF0aWMgY2hhciAqZmluZF9uYW1lX2dudShjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpkZWYsIGludCBwX3ZhbHVlKQoreworCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCWNoYXIgKmNwOworCisJLyoKKwkgKiBQcm9wb3NlZCAibmV3LXN0eWxlIiBHTlUgcGF0Y2gvZGlmZiBmb3JtYXQ7IHNlZQorCSAqIGh0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9Z2l0Jm09MTEyOTI3MzE2NDA4NjkwJnc9MgorCSAqLworCWlmICh1bnF1b3RlX2Nfc3R5bGUoJm5hbWUsIGxpbmUsIE5VTEwpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZm9yIChjcCA9IG5hbWUuYnVmOyBwX3ZhbHVlOyBwX3ZhbHVlLS0pIHsKKwkJY3AgPSBzdHJjaHIoY3AsICcvJyk7CisJCWlmICghY3ApIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWNwKys7CisJfQorCisJc3RyYnVmX3JlbW92ZSgmbmFtZSwgMCwgY3AgLSBuYW1lLmJ1Zik7CisJaWYgKHJvb3QpCisJCXN0cmJ1Zl9pbnNlcnQoJm5hbWUsIDAsIHJvb3QsIHJvb3RfbGVuKTsKKwlyZXR1cm4gc3F1YXNoX3NsYXNoKHN0cmJ1Zl9kZXRhY2goJm5hbWUsIE5VTEwpKTsKK30KKworc3RhdGljIHNpemVfdCBzYW5lX3R6X2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnR6LCAqcDsKKworCWlmIChsZW4gPCBzdHJsZW4oIiArMDUwMCIpIHx8IGxpbmVbbGVuLXN0cmxlbigiICswNTAwIildICE9ICcgJykKKwkJcmV0dXJuIDA7CisJdHogPSBsaW5lICsgbGVuIC0gc3RybGVuKCIgKzA1MDAiKTsKKworCWlmICh0elsxXSAhPSAnKycgJiYgdHpbMV0gIT0gJy0nKQorCQlyZXR1cm4gMDsKKworCWZvciAocCA9IHR6ICsgMjsgcCAhPSBsaW5lICsgbGVuOyBwKyspCisJCWlmICghaXNkaWdpdCgqcCkpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiBsaW5lICsgbGVuIC0gdHo7Cit9CisKK3N0YXRpYyBzaXplX3QgdHpfd2l0aF9jb2xvbl9sZW4oY29uc3QgY2hhciAqbGluZSwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICp0eiwgKnA7CisKKwlpZiAobGVuIDwgc3RybGVuKCIgKzA4OjAwIikgfHwgbGluZVtsZW4gLSBzdHJsZW4oIjowMCIpXSAhPSAnOicpCisJCXJldHVybiAwOworCXR6ID0gbGluZSArIGxlbiAtIHN0cmxlbigiICswODowMCIpOworCisJaWYgKHR6WzBdICE9ICcgJyB8fCAodHpbMV0gIT0gJysnICYmIHR6WzFdICE9ICctJykpCisJCXJldHVybiAwOworCXAgPSB0eiArIDI7CisJaWYgKCFpc2RpZ2l0KCpwKyspIHx8ICFpc2RpZ2l0KCpwKyspIHx8ICpwKysgIT0gJzonIHx8CisJICAgICFpc2RpZ2l0KCpwKyspIHx8ICFpc2RpZ2l0KCpwKyspKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBsaW5lICsgbGVuIC0gdHo7Cit9CisKK3N0YXRpYyBzaXplX3QgZGF0ZV9sZW4oY29uc3QgY2hhciAqbGluZSwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICpkYXRlLCAqcDsKKworCWlmIChsZW4gPCBzdHJsZW4oIjcyLTAyLTA1IikgfHwgbGluZVtsZW4tc3RybGVuKCItMDUiKV0gIT0gJy0nKQorCQlyZXR1cm4gMDsKKwlwID0gZGF0ZSA9IGxpbmUgKyBsZW4gLSBzdHJsZW4oIjcyLTAyLTA1Iik7CisKKwlpZiAoIWlzZGlnaXQoKnArKykgfHwgIWlzZGlnaXQoKnArKykgfHwgKnArKyAhPSAnLScgfHwKKwkgICAgIWlzZGlnaXQoKnArKykgfHwgIWlzZGlnaXQoKnArKykgfHwgKnArKyAhPSAnLScgfHwKKwkgICAgIWlzZGlnaXQoKnArKykgfHwgIWlzZGlnaXQoKnArKykpCS8qIE5vdCBhIGRhdGUuICovCisJCXJldHVybiAwOworCisJaWYgKGRhdGUgLSBsaW5lID49IHN0cmxlbigiMTkiKSAmJgorCSAgICBpc2RpZ2l0KGRhdGVbLTFdKSAmJiBpc2RpZ2l0KGRhdGVbLTJdKSkJLyogNC1kaWdpdCB5ZWFyICovCisJCWRhdGUgLT0gc3RybGVuKCIxOSIpOworCisJcmV0dXJuIGxpbmUgKyBsZW4gLSBkYXRlOworfQorCitzdGF0aWMgc2l6ZV90IHNob3J0X3RpbWVfbGVuKGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqdGltZSwgKnA7CisKKwlpZiAobGVuIDwgc3RybGVuKCIgMDc6MDE6MzIiKSB8fCBsaW5lW2xlbi1zdHJsZW4oIjozMiIpXSAhPSAnOicpCisJCXJldHVybiAwOworCXAgPSB0aW1lID0gbGluZSArIGxlbiAtIHN0cmxlbigiIDA3OjAxOjMyIik7CisKKwkvKiBQZXJtaXQgMS1kaWdpdCBob3Vycz8gKi8KKwlpZiAoKnArKyAhPSAnICcgfHwKKwkgICAgIWlzZGlnaXQoKnArKykgfHwgIWlzZGlnaXQoKnArKykgfHwgKnArKyAhPSAnOicgfHwKKwkgICAgIWlzZGlnaXQoKnArKykgfHwgIWlzZGlnaXQoKnArKykgfHwgKnArKyAhPSAnOicgfHwKKwkgICAgIWlzZGlnaXQoKnArKykgfHwgIWlzZGlnaXQoKnArKykpCS8qIE5vdCBhIHRpbWUuICovCisJCXJldHVybiAwOworCisJcmV0dXJuIGxpbmUgKyBsZW4gLSB0aW1lOworfQorCitzdGF0aWMgc2l6ZV90IGZyYWN0aW9uYWxfdGltZV9sZW4oY29uc3QgY2hhciAqbGluZSwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICpwOworCXNpemVfdCBuOworCisJLyogRXhwZWN0ZWQgZm9ybWF0OiAxOTo0MToxNy42MjAwMDAwMjMgKi8KKwlpZiAoIWxlbiB8fCAhaXNkaWdpdChsaW5lW2xlbiAtIDFdKSkKKwkJcmV0dXJuIDA7CisJcCA9IGxpbmUgKyBsZW4gLSAxOworCisJLyogRnJhY3Rpb25hbCBzZWNvbmRzLiAqLworCXdoaWxlIChwID4gbGluZSAmJiBpc2RpZ2l0KCpwKSkKKwkJcC0tOworCWlmICgqcCAhPSAnLicpCisJCXJldHVybiAwOworCisJLyogSG91cnMsIG1pbnV0ZXMsIGFuZCB3aG9sZSBzZWNvbmRzLiAqLworCW4gPSBzaG9ydF90aW1lX2xlbihsaW5lLCBwIC0gbGluZSk7CisJaWYgKCFuKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBsaW5lICsgbGVuIC0gcCArIG47Cit9CisKK3N0YXRpYyBzaXplX3QgdHJhaWxpbmdfc3BhY2VzX2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnA7CisKKwkvKiBFeHBlY3RlZCBmb3JtYXQ6ICcgJyB4ICgxIG9yIG1vcmUpICAqLworCWlmICghbGVuIHx8IGxpbmVbbGVuIC0gMV0gIT0gJyAnKQorCQlyZXR1cm4gMDsKKworCXAgPSBsaW5lICsgbGVuOworCXdoaWxlIChwICE9IGxpbmUpIHsKKwkJcC0tOworCQlpZiAoKnAgIT0gJyAnKQorCQkJcmV0dXJuIGxpbmUgKyBsZW4gLSAocCArIDEpOworCX0KKworCS8qIEFsbCBzcGFjZXMhICovCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNpemVfdCBkaWZmX3RpbWVzdGFtcF9sZW4oY29uc3QgY2hhciAqbGluZSwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICplbmQgPSBsaW5lICsgbGVuOworCXNpemVfdCBuOworCisJLyoKKwkgKiBQb3NpeDogMjAxMC0wNy0wNSAxOTo0MToxNworCSAqIEdOVTogMjAxMC0wNy0wNSAxOTo0MToxNy42MjAwMDAwMjMgLTA1MDAKKwkgKi8KKworCWlmICghaXNkaWdpdChlbmRbLTFdKSkKKwkJcmV0dXJuIDA7CisKKwluID0gc2FuZV90el9sZW4obGluZSwgZW5kIC0gbGluZSk7CisJaWYgKCFuKQorCQluID0gdHpfd2l0aF9jb2xvbl9sZW4obGluZSwgZW5kIC0gbGluZSk7CisJZW5kIC09IG47CisKKwluID0gc2hvcnRfdGltZV9sZW4obGluZSwgZW5kIC0gbGluZSk7CisJaWYgKCFuKQorCQluID0gZnJhY3Rpb25hbF90aW1lX2xlbihsaW5lLCBlbmQgLSBsaW5lKTsKKwllbmQgLT0gbjsKKworCW4gPSBkYXRlX2xlbihsaW5lLCBlbmQgLSBsaW5lKTsKKwlpZiAoIW4pCS8qIE5vIGRhdGUuICBUb28gYmFkLiAqLworCQlyZXR1cm4gMDsKKwllbmQgLT0gbjsKKworCWlmIChlbmQgPT0gbGluZSkJLyogTm8gc3BhY2UgYmVmb3JlIGRhdGUuICovCisJCXJldHVybiAwOworCWlmIChlbmRbLTFdID09ICdcdCcpIHsJLyogU3VjY2VzcyEgKi8KKwkJZW5kLS07CisJCXJldHVybiBsaW5lICsgbGVuIC0gZW5kOworCX0KKwlpZiAoZW5kWy0xXSAhPSAnICcpCS8qIE5vIHNwYWNlIGJlZm9yZSBkYXRlLiAqLworCQlyZXR1cm4gMDsKKworCS8qIFdoaXRlc3BhY2UgZGFtYWdlLiAqLworCWVuZCAtPSB0cmFpbGluZ19zcGFjZXNfbGVuKGxpbmUsIGVuZCAtIGxpbmUpOworCXJldHVybiBsaW5lICsgbGVuIC0gZW5kOworfQorCitzdGF0aWMgY2hhciAqbnVsbF9zdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gcyA/IHhzdHJkdXAocykgOiBOVUxMOworfQorCitzdGF0aWMgY2hhciAqZmluZF9uYW1lX2NvbW1vbihjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpkZWYsCisJCQkgICAgICBpbnQgcF92YWx1ZSwgY29uc3QgY2hhciAqZW5kLCBpbnQgdGVybWluYXRlKQoreworCWludCBsZW47CisJY29uc3QgY2hhciAqc3RhcnQgPSBOVUxMOworCisJaWYgKHBfdmFsdWUgPT0gMCkKKwkJc3RhcnQgPSBsaW5lOworCXdoaWxlIChsaW5lICE9IGVuZCkgeworCQljaGFyIGMgPSAqbGluZTsKKworCQlpZiAoIWVuZCAmJiBpc3NwYWNlKGMpKSB7CisJCQlpZiAoYyA9PSAnXG4nKQorCQkJCWJyZWFrOworCQkJaWYgKG5hbWVfdGVybWluYXRlKHN0YXJ0LCBsaW5lLXN0YXJ0LCBjLCB0ZXJtaW5hdGUpKQorCQkJCWJyZWFrOworCQl9CisJCWxpbmUrKzsKKwkJaWYgKGMgPT0gJy8nICYmICEtLXBfdmFsdWUpCisJCQlzdGFydCA9IGxpbmU7CisJfQorCWlmICghc3RhcnQpCisJCXJldHVybiBzcXVhc2hfc2xhc2gobnVsbF9zdHJkdXAoZGVmKSk7CisJbGVuID0gbGluZSAtIHN0YXJ0OworCWlmICghbGVuKQorCQlyZXR1cm4gc3F1YXNoX3NsYXNoKG51bGxfc3RyZHVwKGRlZikpOworCisJLyoKKwkgKiBHZW5lcmFsbHkgd2UgcHJlZmVyIHRoZSBzaG9ydGVyIG5hbWUsIGVzcGVjaWFsbHkKKwkgKiBpZiB0aGUgb3RoZXIgb25lIGlzIGp1c3QgYSB2YXJpYXRpb24gb2YgdGhhdCB3aXRoCisJICogc29tZXRoaW5nIGVsc2UgdGFja2VkIG9uIHRvIHRoZSBlbmQgKGllICJmaWxlLm9yaWciCisJICogb3IgImZpbGV+IikuCisJICovCisJaWYgKGRlZikgeworCQlpbnQgZGVmbGVuID0gc3RybGVuKGRlZik7CisJCWlmIChkZWZsZW4gPCBsZW4gJiYgIXN0cm5jbXAoc3RhcnQsIGRlZiwgZGVmbGVuKSkKKwkJCXJldHVybiBzcXVhc2hfc2xhc2goeHN0cmR1cChkZWYpKTsKKwl9CisKKwlpZiAocm9vdCkgeworCQljaGFyICpyZXQgPSB4bWFsbG9jKHJvb3RfbGVuICsgbGVuICsgMSk7CisJCXN0cmNweShyZXQsIHJvb3QpOworCQltZW1jcHkocmV0ICsgcm9vdF9sZW4sIHN0YXJ0LCBsZW4pOworCQlyZXRbcm9vdF9sZW4gKyBsZW5dID0gJ1wwJzsKKwkJcmV0dXJuIHNxdWFzaF9zbGFzaChyZXQpOworCX0KKworCXJldHVybiBzcXVhc2hfc2xhc2goeG1lbWR1cHooc3RhcnQsIGxlbikpOworfQorCitzdGF0aWMgY2hhciAqZmluZF9uYW1lKGNvbnN0IGNoYXIgKmxpbmUsIGNoYXIgKmRlZiwgaW50IHBfdmFsdWUsIGludCB0ZXJtaW5hdGUpCit7CisJaWYgKCpsaW5lID09ICciJykgeworCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShsaW5lLCBkZWYsIHBfdmFsdWUpOworCQlpZiAobmFtZSkKKwkJCXJldHVybiBuYW1lOworCX0KKworCXJldHVybiBmaW5kX25hbWVfY29tbW9uKGxpbmUsIGRlZiwgcF92YWx1ZSwgTlVMTCwgdGVybWluYXRlKTsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfbmFtZV90cmFkaXRpb25hbChjb25zdCBjaGFyICpsaW5lLCBjaGFyICpkZWYsIGludCBwX3ZhbHVlKQoreworCXNpemVfdCBsZW4gPSBzdHJsZW4obGluZSk7CisJc2l6ZV90IGRhdGVfbGVuOworCisJaWYgKCpsaW5lID09ICciJykgeworCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShsaW5lLCBkZWYsIHBfdmFsdWUpOworCQlpZiAobmFtZSkKKwkJCXJldHVybiBuYW1lOworCX0KKworCWxlbiA9IHN0cmNocm51bChsaW5lLCAnXG4nKSAtIGxpbmU7CisJZGF0ZV9sZW4gPSBkaWZmX3RpbWVzdGFtcF9sZW4obGluZSwgbGVuKTsKKwlpZiAoIWRhdGVfbGVuKQorCQlyZXR1cm4gZmluZF9uYW1lX2NvbW1vbihsaW5lLCBkZWYsIHBfdmFsdWUsIE5VTEwsIFRFUk1fVEFCKTsKKwlsZW4gLT0gZGF0ZV9sZW47CisKKwlyZXR1cm4gZmluZF9uYW1lX2NvbW1vbihsaW5lLCBkZWYsIHBfdmFsdWUsIGxpbmUgKyBsZW4sIDApOworfQorCitzdGF0aWMgaW50IGNvdW50X3NsYXNoZXMoY29uc3QgY2hhciAqY3ApCit7CisJaW50IGNudCA9IDA7CisJY2hhciBjaDsKKworCXdoaWxlICgoY2ggPSAqY3ArKykpCisJCWlmIChjaCA9PSAnLycpCisJCQljbnQrKzsKKwlyZXR1cm4gY250OworfQorCisvKgorICogR2l2ZW4gdGhlIHN0cmluZyBhZnRlciAiLS0tICIgb3IgIisrKyAiLCBndWVzcyB0aGUgYXBwcm9wcmlhdGUKKyAqIHBfdmFsdWUgZm9yIHRoZSBnaXZlbiBwYXRjaC4KKyAqLworc3RhdGljIGludCBndWVzc19wX3ZhbHVlKGNvbnN0IGNoYXIgKm5hbWVsaW5lKQoreworCWNoYXIgKm5hbWUsICpjcDsKKwlpbnQgdmFsID0gLTE7CisKKwlpZiAoaXNfZGV2X251bGwobmFtZWxpbmUpKQorCQlyZXR1cm4gLTE7CisJbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbChuYW1lbGluZSwgTlVMTCwgMCk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gLTE7CisJY3AgPSBzdHJjaHIobmFtZSwgJy8nKTsKKwlpZiAoIWNwKQorCQl2YWwgPSAwOworCWVsc2UgaWYgKHByZWZpeCkgeworCQkvKgorCQkgKiBEb2VzIGl0IGJlZ2luIHdpdGggImEvJG91ci1wcmVmaXgiIGFuZCBzdWNoPyAgVGhlbiB0aGlzIGlzCisJCSAqIHZlcnkgbGlrZWx5IHRvIGFwcGx5IHRvIG91ciBkaXJlY3RvcnkuCisJCSAqLworCQlpZiAoIXN0cm5jbXAobmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuZ3RoKSkKKwkJCXZhbCA9IGNvdW50X3NsYXNoZXMocHJlZml4KTsKKwkJZWxzZSB7CisJCQljcCsrOworCQkJaWYgKCFzdHJuY21wKGNwLCBwcmVmaXgsIHByZWZpeF9sZW5ndGgpKQorCQkJCXZhbCA9IGNvdW50X3NsYXNoZXMocHJlZml4KSArIDE7CisJCX0KKwl9CisJZnJlZShuYW1lKTsKKwlyZXR1cm4gdmFsOworfQorCisvKgorICogRG9lcyB0aGUgLS0tLysrKyBsaW5lIGhhcyB0aGUgUE9TSVggdGltZXN0YW1wIGFmdGVyIHRoZSBsYXN0IEhUPworICogR05VIGRpZmYgcHV0cyBlcG9jaCB0aGVyZSB0byBzaWduYWwgYSBjcmVhdGlvbi9kZWxldGlvbiBldmVudC4gIElzCisgKiB0aGlzIHN1Y2ggYSB0aW1lc3RhbXA/CisgKi8KK3N0YXRpYyBpbnQgaGFzX2Vwb2NoX3RpbWVzdGFtcChjb25zdCBjaGFyICpuYW1lbGluZSkKK3sKKwkvKgorCSAqIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gZXBvY2ggdGltZXN0YW1wOyBhbnkgbm9uLXplcm8KKwkgKiBmcmFjdGlvbiBjYW5ub3QgYmUgb25lLCBoZW5jZSAiKFwuMCspPyIgaW4gdGhlIHJlZ2V4cCBiZWxvdy4KKwkgKiBGb3IgdGhlIHNhbWUgcmVhc29uLCB0aGUgZGF0ZSBtdXN0IGJlIGVpdGhlciAxOTY5LTEyLTMxIG9yCisJICogMTk3MC0wMS0wMSwgYW5kIHRoZSBzZWNvbmRzIHBhcnQgbXVzdCBiZSAiMDAiLgorCSAqLworCWNvbnN0IGNoYXIgc3RhbXBfcmVnZXhwW10gPQorCQkiXigxOTY5LTEyLTMxfDE5NzAtMDEtMDEpIgorCQkiICIKKwkJIlswLTJdWzAtOV06WzAtNV1bMC05XTowMChcXC4wKyk/IgorCQkiICIKKwkJIihbLStdWzAtMl1bMC05XTo/WzAtNV1bMC05XSlcbiI7CisJY29uc3QgY2hhciAqdGltZXN0YW1wID0gTlVMTCwgKmNwLCAqY29sb247CisJc3RhdGljIHJlZ2V4X3QgKnN0YW1wOworCXJlZ21hdGNoX3QgbVsxMF07CisJaW50IHpvbmVvZmZzZXQ7CisJaW50IGhvdXJtaW51dGU7CisJaW50IHN0YXR1czsKKworCWZvciAoY3AgPSBuYW1lbGluZTsgKmNwICE9ICdcbic7IGNwKyspIHsKKwkJaWYgKCpjcCA9PSAnXHQnKQorCQkJdGltZXN0YW1wID0gY3AgKyAxOworCX0KKwlpZiAoIXRpbWVzdGFtcCkKKwkJcmV0dXJuIDA7CisJaWYgKCFzdGFtcCkgeworCQlzdGFtcCA9IHhtYWxsb2Moc2l6ZW9mKCpzdGFtcCkpOworCQlpZiAocmVnY29tcChzdGFtcCwgc3RhbXBfcmVnZXhwLCBSRUdfRVhURU5ERUQpKSB7CisJCQl3YXJuaW5nKF8oIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiKSwKKwkJCQlzdGFtcF9yZWdleHApOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlzdGF0dXMgPSByZWdleGVjKHN0YW1wLCB0aW1lc3RhbXAsIEFSUkFZX1NJWkUobSksIG0sIDApOworCWlmIChzdGF0dXMpIHsKKwkJaWYgKHN0YXR1cyAhPSBSRUdfTk9NQVRDSCkKKwkJCXdhcm5pbmcoXygicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIiksCisJCQkJc3RhdHVzLCB0aW1lc3RhbXApOworCQlyZXR1cm4gMDsKKwl9CisKKwl6b25lb2Zmc2V0ID0gc3RydG9sKHRpbWVzdGFtcCArIG1bM10ucm1fc28gKyAxLCAoY2hhciAqKikgJmNvbG9uLCAxMCk7CisJaWYgKCpjb2xvbiA9PSAnOicpCisJCXpvbmVvZmZzZXQgPSB6b25lb2Zmc2V0ICogNjAgKyBzdHJ0b2woY29sb24gKyAxLCBOVUxMLCAxMCk7CisJZWxzZQorCQl6b25lb2Zmc2V0ID0gKHpvbmVvZmZzZXQgLyAxMDApICogNjAgKyAoem9uZW9mZnNldCAlIDEwMCk7CisJaWYgKHRpbWVzdGFtcFttWzNdLnJtX3NvXSA9PSAnLScpCisJCXpvbmVvZmZzZXQgPSAtem9uZW9mZnNldDsKKworCS8qCisJICogWVlZWS1NTS1ERCBoaDptbTpzcyBtdXN0IGJlIGZyb20gZWl0aGVyIDE5NjktMTItMzEKKwkgKiAod2VzdCBvZiBHTVQpIG9yIDE5NzAtMDEtMDEgKGVhc3Qgb2YgR01UKQorCSAqLworCWlmICgoem9uZW9mZnNldCA8IDAgJiYgbWVtY21wKHRpbWVzdGFtcCwgIjE5NjktMTItMzEiLCAxMCkpIHx8CisJICAgICgwIDw9IHpvbmVvZmZzZXQgJiYgbWVtY21wKHRpbWVzdGFtcCwgIjE5NzAtMDEtMDEiLCAxMCkpKQorCQlyZXR1cm4gMDsKKworCWhvdXJtaW51dGUgPSAoc3RydG9sKHRpbWVzdGFtcCArIDExLCBOVUxMLCAxMCkgKiA2MCArCisJCSAgICAgIHN0cnRvbCh0aW1lc3RhbXAgKyAxNCwgTlVMTCwgMTApIC0KKwkJICAgICAgem9uZW9mZnNldCk7CisKKwlyZXR1cm4gKCh6b25lb2Zmc2V0IDwgMCAmJiBob3VybWludXRlID09IDE0NDApIHx8CisJCSgwIDw9IHpvbmVvZmZzZXQgJiYgIWhvdXJtaW51dGUpKTsKK30KKworLyoKKyAqIEdldCB0aGUgbmFtZSBldGMgaW5mbyBmcm9tIHRoZSAtLS0vKysrIGxpbmVzIG9mIGEgdHJhZGl0aW9uYWwgcGF0Y2ggaGVhZGVyCisgKgorICogRklYTUUhIFRoZSBlbmQtb2YtZmlsZW5hbWUgaGV1cmlzdGljcyBhcmUga2luZCBvZiBzY3Jld3kuIEZvciBleGlzdGluZworICogZmlsZXMsIHdlIGNhbiBoYXBwaWx5IGNoZWNrIHRoZSBpbmRleCBmb3IgYSBtYXRjaCwgYnV0IGZvciBjcmVhdGluZyBhCisgKiBuZXcgZmlsZSB3ZSBzaG91bGQgdHJ5IHRvIG1hdGNoIHdoYXRldmVyICJwYXRjaCIgZG9lcy4gSSBoYXZlIG5vIGlkZWEuCisgKi8KK3N0YXRpYyB2b2lkIHBhcnNlX3RyYWRpdGlvbmFsX3BhdGNoKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJY2hhciAqbmFtZTsKKworCWZpcnN0ICs9IDQ7CS8qIHNraXAgIi0tLSAiICovCisJc2Vjb25kICs9IDQ7CS8qIHNraXAgIisrKyAiICovCisJaWYgKCFwX3ZhbHVlX2tub3duKSB7CisJCWludCBwLCBxOworCQlwID0gZ3Vlc3NfcF92YWx1ZShmaXJzdCk7CisJCXEgPSBndWVzc19wX3ZhbHVlKHNlY29uZCk7CisJCWlmIChwIDwgMCkgcCA9IHE7CisJCWlmICgwIDw9IHAgJiYgcCA9PSBxKSB7CisJCQlwX3ZhbHVlID0gcDsKKwkJCXBfdmFsdWVfa25vd24gPSAxOworCQl9CisJfQorCWlmIChpc19kZXZfbnVsbChmaXJzdCkpIHsKKwkJcGF0Y2gtPmlzX25ldyA9IDE7CisJCXBhdGNoLT5pc19kZWxldGUgPSAwOworCQluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKHNlY29uZCwgTlVMTCwgcF92YWx1ZSk7CisJCXBhdGNoLT5uZXdfbmFtZSA9IG5hbWU7CisJfSBlbHNlIGlmIChpc19kZXZfbnVsbChzZWNvbmQpKSB7CisJCXBhdGNoLT5pc19uZXcgPSAwOworCQlwYXRjaC0+aXNfZGVsZXRlID0gMTsKKwkJbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbChmaXJzdCwgTlVMTCwgcF92YWx1ZSk7CisJCXBhdGNoLT5vbGRfbmFtZSA9IG5hbWU7CisJfSBlbHNlIHsKKwkJY2hhciAqZmlyc3RfbmFtZTsKKwkJZmlyc3RfbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbChmaXJzdCwgTlVMTCwgcF92YWx1ZSk7CisJCW5hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoc2Vjb25kLCBmaXJzdF9uYW1lLCBwX3ZhbHVlKTsKKwkJZnJlZShmaXJzdF9uYW1lKTsKKwkJaWYgKGhhc19lcG9jaF90aW1lc3RhbXAoZmlyc3QpKSB7CisJCQlwYXRjaC0+aXNfbmV3ID0gMTsKKwkJCXBhdGNoLT5pc19kZWxldGUgPSAwOworCQkJcGF0Y2gtPm5ld19uYW1lID0gbmFtZTsKKwkJfSBlbHNlIGlmIChoYXNfZXBvY2hfdGltZXN0YW1wKHNlY29uZCkpIHsKKwkJCXBhdGNoLT5pc19uZXcgPSAwOworCQkJcGF0Y2gtPmlzX2RlbGV0ZSA9IDE7CisJCQlwYXRjaC0+b2xkX25hbWUgPSBuYW1lOworCQl9IGVsc2UgeworCQkJcGF0Y2gtPm9sZF9uYW1lID0gbmFtZTsKKwkJCXBhdGNoLT5uZXdfbmFtZSA9IHhzdHJkdXAobmFtZSk7CisJCX0KKwl9CisJaWYgKCFuYW1lKQorCQlkaWUoXygidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIpLCBsaW5lbnIpOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfaGRyZW5kKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcmV0dXJuIC0xOworfQorCisvKgorICogV2UncmUgYW5hbCBhYm91dCBkaWZmIGhlYWRlciBjb25zaXN0ZW5jeSwgdG8gbWFrZQorICogc3VyZSB0aGF0IHdlIGRvbid0IGVuZCB1cCBoYXZpbmcgc3RyYW5nZSBhbWJpZ3VvdXMKKyAqIHBhdGNoZXMgZmxvYXRpbmcgYXJvdW5kLgorICoKKyAqIEFzIGEgcmVzdWx0LCBnaXRkaWZmX3tvbGR8bmV3fW5hbWUoKSB3aWxsIGNoZWNrCisgKiB0aGVpciBuYW1lcyBhZ2FpbnN0IGFueSBwcmV2aW91cyBpbmZvcm1hdGlvbiwganVzdAorICogdG8gbWFrZSBzdXJlLi4KKyAqLworI2RlZmluZSBESUZGX09MRF9OQU1FIDAKKyNkZWZpbmUgRElGRl9ORVdfTkFNRSAxCisKK3N0YXRpYyBjaGFyICpnaXRkaWZmX3ZlcmlmeV9uYW1lKGNvbnN0IGNoYXIgKmxpbmUsIGludCBpc251bGwsIGNoYXIgKm9yaWdfbmFtZSwgaW50IHNpZGUpCit7CisJaWYgKCFvcmlnX25hbWUgJiYgIWlzbnVsbCkKKwkJcmV0dXJuIGZpbmRfbmFtZShsaW5lLCBOVUxMLCBwX3ZhbHVlLCBURVJNX1RBQik7CisKKwlpZiAob3JpZ19uYW1lKSB7CisJCWludCBsZW47CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCWNoYXIgKmFub3RoZXI7CisJCW5hbWUgPSBvcmlnX25hbWU7CisJCWxlbiA9IHN0cmxlbihuYW1lKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWRpZShfKCJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiKSwgbmFtZSwgbGluZW5yKTsKKwkJYW5vdGhlciA9IGZpbmRfbmFtZShsaW5lLCBOVUxMLCBwX3ZhbHVlLCBURVJNX1RBQik7CisJCWlmICghYW5vdGhlciB8fCBtZW1jbXAoYW5vdGhlciwgbmFtZSwgbGVuICsgMSkpCisJCQlkaWUoKHNpZGUgPT0gRElGRl9ORVdfTkFNRSkgPworCQkJICAgIF8oImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIikgOgorCQkJICAgIF8oImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIiksIGxpbmVucik7CisJCWZyZWUoYW5vdGhlcik7CisJCXJldHVybiBvcmlnX25hbWU7CisJfQorCWVsc2UgeworCQkvKiBleHBlY3QgIi9kZXYvbnVsbCIgKi8KKwkJaWYgKG1lbWNtcCgiL2Rldi9udWxsIiwgbGluZSwgOSkgfHwgbGluZVs5XSAhPSAnXG4nKQorCQkJZGllKF8oImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiKSwgbGluZW5yKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGdpdGRpZmZfb2xkbmFtZShjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWNoYXIgKm9yaWcgPSBwYXRjaC0+b2xkX25hbWU7CisJcGF0Y2gtPm9sZF9uYW1lID0gZ2l0ZGlmZl92ZXJpZnlfbmFtZShsaW5lLCBwYXRjaC0+aXNfbmV3LCBwYXRjaC0+b2xkX25hbWUsCisJCQkJCSAgICAgIERJRkZfT0xEX05BTUUpOworCWlmIChvcmlnICE9IHBhdGNoLT5vbGRfbmFtZSkKKwkJZnJlZShvcmlnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX25ld25hbWUoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwljaGFyICpvcmlnID0gcGF0Y2gtPm5ld19uYW1lOworCXBhdGNoLT5uZXdfbmFtZSA9IGdpdGRpZmZfdmVyaWZ5X25hbWUobGluZSwgcGF0Y2gtPmlzX2RlbGV0ZSwgcGF0Y2gtPm5ld19uYW1lLAorCQkJCQkgICAgICBESUZGX05FV19OQU1FKTsKKwlpZiAob3JpZyAhPSBwYXRjaC0+bmV3X25hbWUpCisJCWZyZWUob3JpZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9vbGRtb2RlKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPm9sZF9tb2RlID0gc3RydG91bChsaW5lLCBOVUxMLCA4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX25ld21vZGUoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+bmV3X21vZGUgPSBzdHJ0b3VsKGxpbmUsIE5VTEwsIDgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfZGVsZXRlKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPmlzX2RlbGV0ZSA9IDE7CisJZnJlZShwYXRjaC0+b2xkX25hbWUpOworCXBhdGNoLT5vbGRfbmFtZSA9IG51bGxfc3RyZHVwKHBhdGNoLT5kZWZfbmFtZSk7CisJcmV0dXJuIGdpdGRpZmZfb2xkbW9kZShsaW5lLCBwYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9uZXdmaWxlKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPmlzX25ldyA9IDE7CisJZnJlZShwYXRjaC0+bmV3X25hbWUpOworCXBhdGNoLT5uZXdfbmFtZSA9IG51bGxfc3RyZHVwKHBhdGNoLT5kZWZfbmFtZSk7CisJcmV0dXJuIGdpdGRpZmZfbmV3bW9kZShsaW5lLCBwYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9jb3B5c3JjKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPmlzX2NvcHkgPSAxOworCWZyZWUocGF0Y2gtPm9sZF9uYW1lKTsKKwlwYXRjaC0+b2xkX25hbWUgPSBmaW5kX25hbWUobGluZSwgTlVMTCwgcF92YWx1ZSA/IHBfdmFsdWUgLSAxIDogMCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9jb3B5ZHN0KGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPmlzX2NvcHkgPSAxOworCWZyZWUocGF0Y2gtPm5ld19uYW1lKTsKKwlwYXRjaC0+bmV3X25hbWUgPSBmaW5kX25hbWUobGluZSwgTlVMTCwgcF92YWx1ZSA/IHBfdmFsdWUgLSAxIDogMCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9yZW5hbWVzcmMoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+aXNfcmVuYW1lID0gMTsKKwlmcmVlKHBhdGNoLT5vbGRfbmFtZSk7CisJcGF0Y2gtPm9sZF9uYW1lID0gZmluZF9uYW1lKGxpbmUsIE5VTEwsIHBfdmFsdWUgPyBwX3ZhbHVlIC0gMSA6IDAsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfcmVuYW1lZHN0KGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPmlzX3JlbmFtZSA9IDE7CisJZnJlZShwYXRjaC0+bmV3X25hbWUpOworCXBhdGNoLT5uZXdfbmFtZSA9IGZpbmRfbmFtZShsaW5lLCBOVUxMLCBwX3ZhbHVlID8gcF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX3NpbWlsYXJpdHkoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlpZiAoKHBhdGNoLT5zY29yZSA9IHN0cnRvdWwobGluZSwgTlVMTCwgMTApKSA9PSBVTE9OR19NQVgpCisJCXBhdGNoLT5zY29yZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9kaXNzaW1pbGFyaXR5KGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaWYgKChwYXRjaC0+c2NvcmUgPSBzdHJ0b3VsKGxpbmUsIE5VTEwsIDEwKSkgPT0gVUxPTkdfTUFYKQorCQlwYXRjaC0+c2NvcmUgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfaW5kZXgoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwkvKgorCSAqIGluZGV4IGxpbmUgaXMgTiBoZXhhZGVjaW1hbCwgIi4uIiwgTiBoZXhhZGVjaW1hbCwKKwkgKiBhbmQgb3B0aW9uYWwgc3BhY2Ugd2l0aCBvY3RhbCBtb2RlLgorCSAqLworCWNvbnN0IGNoYXIgKnB0ciwgKmVvbDsKKwlpbnQgbGVuOworCisJcHRyID0gc3RyY2hyKGxpbmUsICcuJyk7CisJaWYgKCFwdHIgfHwgcHRyWzFdICE9ICcuJyB8fCA0MCA8IHB0ciAtIGxpbmUpCisJCXJldHVybiAwOworCWxlbiA9IHB0ciAtIGxpbmU7CisJbWVtY3B5KHBhdGNoLT5vbGRfc2hhMV9wcmVmaXgsIGxpbmUsIGxlbik7CisJcGF0Y2gtPm9sZF9zaGExX3ByZWZpeFtsZW5dID0gMDsKKworCWxpbmUgPSBwdHIgKyAyOworCXB0ciA9IHN0cmNocihsaW5lLCAnICcpOworCWVvbCA9IHN0cmNocihsaW5lLCAnXG4nKTsKKworCWlmICghcHRyIHx8IGVvbCA8IHB0cikKKwkJcHRyID0gZW9sOworCWxlbiA9IHB0ciAtIGxpbmU7CisKKwlpZiAoNDAgPCBsZW4pCisJCXJldHVybiAwOworCW1lbWNweShwYXRjaC0+bmV3X3NoYTFfcHJlZml4LCBsaW5lLCBsZW4pOworCXBhdGNoLT5uZXdfc2hhMV9wcmVmaXhbbGVuXSA9IDA7CisJaWYgKCpwdHIgPT0gJyAnKQorCQlwYXRjaC0+b2xkX21vZGUgPSBzdHJ0b3VsKHB0cisxLCBOVUxMLCA4KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaXMgbm9ybWFsIGZvciBhIGRpZmYgdGhhdCBkb2Vzbid0IGNoYW5nZSBhbnl0aGluZzogd2UnbGwgZmFsbCB0aHJvdWdoCisgKiBpbnRvIHRoZSBuZXh0IGRpZmYuIFRlbGwgdGhlIHBhcnNlciB0byBicmVhayBvdXQuCisgKi8KK3N0YXRpYyBpbnQgZ2l0ZGlmZl91bnJlY29nbml6ZWQoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBTa2lwIHBfdmFsdWUgbGVhZGluZyBjb21wb25lbnRzIGZyb20gImxpbmUiOyBhcyB3ZSBkbyBub3QgYWNjZXB0CisgKiBhYnNvbHV0ZSBwYXRocywgcmV0dXJuIE5VTEwgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqc2tpcF90cmVlX3ByZWZpeChjb25zdCBjaGFyICpsaW5lLCBpbnQgbGxlbikKK3sKKwlpbnQgbnNsYXNoOworCWludCBpOworCisJaWYgKCFwX3ZhbHVlKQorCQlyZXR1cm4gKGxsZW4gJiYgbGluZVswXSA9PSAnLycpID8gTlVMTCA6IGxpbmU7CisKKwluc2xhc2ggPSBwX3ZhbHVlOworCWZvciAoaSA9IDA7IGkgPCBsbGVuOyBpKyspIHsKKwkJaW50IGNoID0gbGluZVtpXTsKKwkJaWYgKGNoID09ICcvJyAmJiAtLW5zbGFzaCA8PSAwKQorCQkJcmV0dXJuIChpID09IDApID8gTlVMTCA6ICZsaW5lW2kgKyAxXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRvIGV4dHJhY3QgdGhlIHNhbWUgbmFtZSB0aGF0IGFwcGVhcnMgb24gImRpZmYgLS1naXQiCisgKiBsaW5lLiAgV2UgZG8gbm90IGZpbmQgYW5kIHJldHVybiBhbnl0aGluZyBpZiBpdCBpcyBhIHJlbmFtZQorICogcGF0Y2gsIGFuZCBpdCBpcyBPSyBiZWNhdXNlIHdlIHdpbGwgZmluZCB0aGUgbmFtZSBlbHNld2hlcmUuCisgKiBXZSBuZWVkIHRvIHJlbGlhYmx5IGZpbmQgbmFtZSBvbmx5IHdoZW4gaXQgaXMgbW9kZS1jaGFuZ2Ugb25seSwKKyAqIGNyZWF0aW9uIG9yIGRlbGV0aW9uIG9mIGFuIGVtcHR5IGZpbGUuICBJbiBhbnkgb2YgdGhlc2UgY2FzZXMsCisgKiBib3RoIHNpZGVzIGFyZSB0aGUgc2FtZSBuYW1lIHVuZGVyIGEvIGFuZCBiLyByZXNwZWN0aXZlbHkuCisgKi8KK3N0YXRpYyBjaGFyICpnaXRfaGVhZGVyX25hbWUoY29uc3QgY2hhciAqbGluZSwgaW50IGxsZW4pCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpzZWNvbmQgPSBOVUxMOworCXNpemVfdCBsZW4sIGxpbmVfbGVuOworCisJbGluZSArPSBzdHJsZW4oImRpZmYgLS1naXQgIik7CisJbGxlbiAtPSBzdHJsZW4oImRpZmYgLS1naXQgIik7CisKKwlpZiAoKmxpbmUgPT0gJyInKSB7CisJCWNvbnN0IGNoYXIgKmNwOworCQlzdHJ1Y3Qgc3RyYnVmIGZpcnN0ID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgc3AgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZmaXJzdCwgbGluZSwgJnNlY29uZCkpCisJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOworCisJCS8qIHN0cmlwIHRoZSBhL2IgcHJlZml4IGluY2x1ZGluZyB0cmFpbGluZyBzbGFzaCAqLworCQljcCA9IHNraXBfdHJlZV9wcmVmaXgoZmlyc3QuYnVmLCBmaXJzdC5sZW4pOworCQlpZiAoIWNwKQorCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKwkJc3RyYnVmX3JlbW92ZSgmZmlyc3QsIDAsIGNwIC0gZmlyc3QuYnVmKTsKKworCQkvKgorCQkgKiBzZWNvbmQgcG9pbnRzIGF0IG9uZSBwYXN0IGNsb3NpbmcgZHEgb2YgbmFtZS4KKwkJICogZmluZCB0aGUgc2Vjb25kIG5hbWUuCisJCSAqLworCQl3aGlsZSAoKHNlY29uZCA8IGxpbmUgKyBsbGVuKSAmJiBpc3NwYWNlKCpzZWNvbmQpKQorCQkJc2Vjb25kKys7CisKKwkJaWYgKGxpbmUgKyBsbGVuIDw9IHNlY29uZCkKKwkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisJCWlmICgqc2Vjb25kID09ICciJykgeworCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmc3AsIHNlY29uZCwgTlVMTCkpCisJCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKwkJCWNwID0gc2tpcF90cmVlX3ByZWZpeChzcC5idWYsIHNwLmxlbik7CisJCQlpZiAoIWNwKQorCQkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisJCQkvKiBUaGV5IG11c3QgbWF0Y2gsIG90aGVyd2lzZSBpZ25vcmUgKi8KKwkJCWlmIChzdHJjbXAoY3AsIGZpcnN0LmJ1ZikpCisJCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzcCk7CisJCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmZmlyc3QsIE5VTEwpOworCQl9CisKKwkJLyogdW5xdW90ZWQgc2Vjb25kICovCisJCWNwID0gc2tpcF90cmVlX3ByZWZpeChzZWNvbmQsIGxpbmUgKyBsbGVuIC0gc2Vjb25kKTsKKwkJaWYgKCFjcCkKKwkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisJCWlmIChsaW5lICsgbGxlbiAtIGNwICE9IGZpcnN0LmxlbiB8fAorCQkgICAgbWVtY21wKGZpcnN0LmJ1ZiwgY3AsIGZpcnN0LmxlbikpCisJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOworCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmZmlyc3QsIE5VTEwpOworCisJZnJlZV9hbmRfZmFpbDE6CisJCXN0cmJ1Zl9yZWxlYXNlKCZmaXJzdCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzcCk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHVucXVvdGVkIGZpcnN0IG5hbWUgKi8KKwluYW1lID0gc2tpcF90cmVlX3ByZWZpeChsaW5lLCBsbGVuKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBzaW5jZSB0aGUgZmlyc3QgbmFtZSBpcyB1bnF1b3RlZCwgYSBkcSBpZiBleGlzdHMgbXVzdCBiZQorCSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCBuYW1lLgorCSAqLworCWZvciAoc2Vjb25kID0gbmFtZTsgc2Vjb25kIDwgbGluZSArIGxsZW47IHNlY29uZCsrKSB7CisJCWlmICgqc2Vjb25kID09ICciJykgeworCQkJc3RydWN0IHN0cmJ1ZiBzcCA9IFNUUkJVRl9JTklUOworCQkJY29uc3QgY2hhciAqbnA7CisKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnNwLCBzZWNvbmQsIE5VTEwpKQorCQkJCWdvdG8gZnJlZV9hbmRfZmFpbDI7CisKKwkJCW5wID0gc2tpcF90cmVlX3ByZWZpeChzcC5idWYsIHNwLmxlbik7CisJCQlpZiAoIW5wKQorCQkJCWdvdG8gZnJlZV9hbmRfZmFpbDI7CisKKwkJCWxlbiA9IHNwLmJ1ZiArIHNwLmxlbiAtIG5wOworCQkJaWYgKGxlbiA8IHNlY29uZCAtIG5hbWUgJiYKKwkJCSAgICAhc3RybmNtcChucCwgbmFtZSwgbGVuKSAmJgorCQkJICAgIGlzc3BhY2UobmFtZVtsZW5dKSkgeworCQkJCS8qIEdvb2QgKi8KKwkJCQlzdHJidWZfcmVtb3ZlKCZzcCwgMCwgbnAgLSBzcC5idWYpOworCQkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZzcCwgTlVMTCk7CisJCQl9CisKKwkJZnJlZV9hbmRfZmFpbDI6CisJCQlzdHJidWZfcmVsZWFzZSgmc3ApOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwkvKgorCSAqIEFjY2VwdCBhIG5hbWUgb25seSBpZiBpdCBzaG93cyB1cCB0d2ljZSwgZXhhY3RseSB0aGUgc2FtZQorCSAqIGZvcm0uCisJICovCisJc2Vjb25kID0gc3RyY2hyKG5hbWUsICdcbicpOworCWlmICghc2Vjb25kKQorCQlyZXR1cm4gTlVMTDsKKwlsaW5lX2xlbiA9IHNlY29uZCAtIG5hbWU7CisJZm9yIChsZW4gPSAwIDsgOyBsZW4rKykgeworCQlzd2l0Y2ggKG5hbWVbbGVuXSkgeworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCWNhc2UgJ1xuJzoKKwkJCXJldHVybiBOVUxMOworCQljYXNlICdcdCc6IGNhc2UgJyAnOgorCQkJLyoKKwkJCSAqIElzIHRoaXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBwcmVpbWFnZQorCQkJICogYW5kIHRoZSBwb3N0aW1hZ2UgcGF0aG5hbWU/ICBBZ2Fpbiwgd2UgYXJlCisJCQkgKiBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMKKwkJCSAqIG5vIHJlbmFtZSwgYXMgdGhpcyBpcyBvbmx5IHRvIHNldCBkZWZfbmFtZQorCQkJICogYW5kIGEgcmVuYW1lIHBhdGNoIGhhcyB0aGUgbmFtZXMgZWxzZXdoZXJlCisJCQkgKiBpbiBhbiB1bmFtYmlndW91cyBmb3JtLgorCQkJICovCisJCQlpZiAoIW5hbWVbbGVuICsgMV0pCisJCQkJcmV0dXJuIE5VTEw7IC8qIG5vIHBvc3RpbWFnZSBuYW1lICovCisJCQlzZWNvbmQgPSBza2lwX3RyZWVfcHJlZml4KG5hbWUgKyBsZW4gKyAxLAorCQkJCQkJICBsaW5lX2xlbiAtIChsZW4gKyAxKSk7CisJCQlpZiAoIXNlY29uZCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCS8qCisJCQkgKiBEb2VzIGxlbiBieXRlcyBzdGFydGluZyBhdCAibmFtZSIgYW5kICJzZWNvbmQiCisJCQkgKiAodGhhdCBhcmUgc2VwYXJhdGVkIGJ5IG9uZSBIVCBvciBTUCB3ZSBqdXN0CisJCQkgKiBmb3VuZCkgZXhhY3RseSBtYXRjaD8KKwkJCSAqLworCQkJaWYgKHNlY29uZFtsZW5dID09ICdcbicgJiYgIXN0cm5jbXAobmFtZSwgc2Vjb25kLCBsZW4pKQorCQkJCXJldHVybiB4bWVtZHVweihuYW1lLCBsZW4pOworCQl9CisJfQorfQorCisvKiBWZXJpZnkgdGhhdCB3ZSByZWNvZ25pemUgdGhlIGxpbmVzIGZvbGxvd2luZyBhIGdpdCBoZWFkZXIgKi8KK3N0YXRpYyBpbnQgcGFyc2VfZ2l0X2hlYWRlcihjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc2l6ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKworCS8qIEEgZ2l0IGRpZmYgaGFzIGV4cGxpY2l0IG5ldy9kZWxldGUgaW5mb3JtYXRpb24sIHNvIHdlIGRvbid0IGd1ZXNzICovCisJcGF0Y2gtPmlzX25ldyA9IDA7CisJcGF0Y2gtPmlzX2RlbGV0ZSA9IDA7CisKKwkvKgorCSAqIFNvbWUgdGhpbmdzIG1heSBub3QgaGF2ZSB0aGUgb2xkIG5hbWUgaW4gdGhlCisJICogcmVzdCBvZiB0aGUgaGVhZGVycyBhbnl3aGVyZSAocHVyZSBtb2RlIGNoYW5nZXMsCisJICogb3IgcmVtb3Zpbmcgb3IgYWRkaW5nIGVtcHR5IGZpbGVzKSwgc28gd2UgZ2V0CisJICogdGhlIGRlZmF1bHQgbmFtZSBmcm9tIHRoZSBoZWFkZXIuCisJICovCisJcGF0Y2gtPmRlZl9uYW1lID0gZ2l0X2hlYWRlcl9uYW1lKGxpbmUsIGxlbik7CisJaWYgKHBhdGNoLT5kZWZfbmFtZSAmJiByb290KSB7CisJCWNoYXIgKnMgPSB4bWFsbG9jKHJvb3RfbGVuICsgc3RybGVuKHBhdGNoLT5kZWZfbmFtZSkgKyAxKTsKKwkJc3RyY3B5KHMsIHJvb3QpOworCQlzdHJjcHkocyArIHJvb3RfbGVuLCBwYXRjaC0+ZGVmX25hbWUpOworCQlmcmVlKHBhdGNoLT5kZWZfbmFtZSk7CisJCXBhdGNoLT5kZWZfbmFtZSA9IHM7CisJfQorCisJbGluZSArPSBsZW47CisJc2l6ZSAtPSBsZW47CisJbGluZW5yKys7CisJZm9yIChvZmZzZXQgPSBsZW4gOyBzaXplID4gMCA7IG9mZnNldCArPSBsZW4sIHNpemUgLT0gbGVuLCBsaW5lICs9IGxlbiwgbGluZW5yKyspIHsKKwkJc3RhdGljIGNvbnN0IHN0cnVjdCBvcGVudHJ5IHsKKwkJCWNvbnN0IGNoYXIgKnN0cjsKKwkJCWludCAoKmZuKShjb25zdCBjaGFyICosIHN0cnVjdCBwYXRjaCAqKTsKKwkJfSBvcHRhYmxlW10gPSB7CisJCQl7ICJAQCAtIiwgZ2l0ZGlmZl9oZHJlbmQgfSwKKwkJCXsgIi0tLSAiLCBnaXRkaWZmX29sZG5hbWUgfSwKKwkJCXsgIisrKyAiLCBnaXRkaWZmX25ld25hbWUgfSwKKwkJCXsgIm9sZCBtb2RlICIsIGdpdGRpZmZfb2xkbW9kZSB9LAorCQkJeyAibmV3IG1vZGUgIiwgZ2l0ZGlmZl9uZXdtb2RlIH0sCisJCQl7ICJkZWxldGVkIGZpbGUgbW9kZSAiLCBnaXRkaWZmX2RlbGV0ZSB9LAorCQkJeyAibmV3IGZpbGUgbW9kZSAiLCBnaXRkaWZmX25ld2ZpbGUgfSwKKwkJCXsgImNvcHkgZnJvbSAiLCBnaXRkaWZmX2NvcHlzcmMgfSwKKwkJCXsgImNvcHkgdG8gIiwgZ2l0ZGlmZl9jb3B5ZHN0IH0sCisJCQl7ICJyZW5hbWUgb2xkICIsIGdpdGRpZmZfcmVuYW1lc3JjIH0sCisJCQl7ICJyZW5hbWUgbmV3ICIsIGdpdGRpZmZfcmVuYW1lZHN0IH0sCisJCQl7ICJyZW5hbWUgZnJvbSAiLCBnaXRkaWZmX3JlbmFtZXNyYyB9LAorCQkJeyAicmVuYW1lIHRvICIsIGdpdGRpZmZfcmVuYW1lZHN0IH0sCisJCQl7ICJzaW1pbGFyaXR5IGluZGV4ICIsIGdpdGRpZmZfc2ltaWxhcml0eSB9LAorCQkJeyAiZGlzc2ltaWxhcml0eSBpbmRleCAiLCBnaXRkaWZmX2Rpc3NpbWlsYXJpdHkgfSwKKwkJCXsgImluZGV4ICIsIGdpdGRpZmZfaW5kZXggfSwKKwkJCXsgIiIsIGdpdGRpZmZfdW5yZWNvZ25pemVkIH0sCisJCX07CisJCWludCBpOworCisJCWxlbiA9IGxpbmVsZW4obGluZSwgc2l6ZSk7CisJCWlmICghbGVuIHx8IGxpbmVbbGVuLTFdICE9ICdcbicpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3B0YWJsZSk7IGkrKykgeworCQkJY29uc3Qgc3RydWN0IG9wZW50cnkgKnAgPSBvcHRhYmxlICsgaTsKKwkJCWludCBvcGxlbiA9IHN0cmxlbihwLT5zdHIpOworCQkJaWYgKGxlbiA8IG9wbGVuIHx8IG1lbWNtcChwLT5zdHIsIGxpbmUsIG9wbGVuKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChwLT5mbihsaW5lICsgb3BsZW4sIHBhdGNoKSA8IDApCisJCQkJcmV0dXJuIG9mZnNldDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGludCBwYXJzZV9udW0oY29uc3QgY2hhciAqbGluZSwgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwljaGFyICpwdHI7CisKKwlpZiAoIWlzZGlnaXQoKmxpbmUpKQorCQlyZXR1cm4gMDsKKwkqcCA9IHN0cnRvdWwobGluZSwgJnB0ciwgMTApOworCXJldHVybiBwdHIgLSBsaW5lOworfQorCitzdGF0aWMgaW50IHBhcnNlX3JhbmdlKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIGludCBvZmZzZXQsIGNvbnN0IGNoYXIgKmV4cGVjdCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKK3sKKwlpbnQgZGlnaXRzLCBleDsKKworCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+PSBsZW4pCisJCXJldHVybiAtMTsKKwlsaW5lICs9IG9mZnNldDsKKwlsZW4gLT0gb2Zmc2V0OworCisJZGlnaXRzID0gcGFyc2VfbnVtKGxpbmUsIHAxKTsKKwlpZiAoIWRpZ2l0cykKKwkJcmV0dXJuIC0xOworCisJb2Zmc2V0ICs9IGRpZ2l0czsKKwlsaW5lICs9IGRpZ2l0czsKKwlsZW4gLT0gZGlnaXRzOworCisJKnAyID0gMTsKKwlpZiAoKmxpbmUgPT0gJywnKSB7CisJCWRpZ2l0cyA9IHBhcnNlX251bShsaW5lKzEsIHAyKTsKKwkJaWYgKCFkaWdpdHMpCisJCQlyZXR1cm4gLTE7CisKKwkJb2Zmc2V0ICs9IGRpZ2l0cysxOworCQlsaW5lICs9IGRpZ2l0cysxOworCQlsZW4gLT0gZGlnaXRzKzE7CisJfQorCisJZXggPSBzdHJsZW4oZXhwZWN0KTsKKwlpZiAoZXggPiBsZW4pCisJCXJldHVybiAtMTsKKwlpZiAobWVtY21wKGxpbmUsIGV4cGVjdCwgZXgpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gb2Zmc2V0ICsgZXg7Cit9CisKK3N0YXRpYyB2b2lkIHJlY291bnRfZGlmZihjb25zdCBjaGFyICpsaW5lLCBpbnQgc2l6ZSwgc3RydWN0IGZyYWdtZW50ICpmcmFnbWVudCkKK3sKKwlpbnQgb2xkbGluZXMgPSAwLCBuZXdsaW5lcyA9IDAsIHJldCA9IDA7CisKKwlpZiAoc2l6ZSA8IDEpIHsKKwkJd2FybmluZygicmVjb3VudDogaWdub3JlIGVtcHR5IGh1bmsiKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoOzspIHsKKwkJaW50IGxlbiA9IGxpbmVsZW4obGluZSwgc2l6ZSk7CisJCXNpemUgLT0gbGVuOworCQlsaW5lICs9IGxlbjsKKworCQlpZiAoc2l6ZSA8IDEpCisJCQlicmVhazsKKworCQlzd2l0Y2ggKCpsaW5lKSB7CisJCWNhc2UgJyAnOiBjYXNlICdcbic6CisJCQluZXdsaW5lcysrOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgJy0nOgorCQkJb2xkbGluZXMrKzsKKwkJCWNvbnRpbnVlOworCQljYXNlICcrJzoKKwkJCW5ld2xpbmVzKys7CisJCQljb250aW51ZTsKKwkJY2FzZSAnXFwnOgorCQkJY29udGludWU7CisJCWNhc2UgJ0AnOgorCQkJcmV0ID0gc2l6ZSA8IDMgfHwgcHJlZml4Y21wKGxpbmUsICJAQCAiKTsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCXJldCA9IHNpemUgPCA1IHx8IHByZWZpeGNtcChsaW5lLCAiZGlmZiAiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0KSB7CisJCQl3YXJuaW5nKF8oInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIpLAorCQkJCShpbnQpbGluZWxlbihsaW5lLCBzaXplKSwgbGluZSk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJfQorCWZyYWdtZW50LT5vbGRsaW5lcyA9IG9sZGxpbmVzOworCWZyYWdtZW50LT5uZXdsaW5lcyA9IG5ld2xpbmVzOworfQorCisvKgorICogUGFyc2UgYSB1bmlmaWVkIGRpZmYgZnJhZ21lbnQgaGVhZGVyIG9mIHRoZQorICogZm9ybSAiQEAgLWEsYiArYyxkIEBAIgorICovCitzdGF0aWMgaW50IHBhcnNlX2ZyYWdtZW50X2hlYWRlcihjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCBzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50KQoreworCWludCBvZmZzZXQ7CisKKwlpZiAoIWxlbiB8fCBsaW5lW2xlbi0xXSAhPSAnXG4nKQorCQlyZXR1cm4gLTE7CisKKwkvKiBGaWd1cmUgb3V0IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gYSBmcmFnbWVudCAqLworCW9mZnNldCA9IHBhcnNlX3JhbmdlKGxpbmUsIGxlbiwgNCwgIiArIiwgJmZyYWdtZW50LT5vbGRwb3MsICZmcmFnbWVudC0+b2xkbGluZXMpOworCW9mZnNldCA9IHBhcnNlX3JhbmdlKGxpbmUsIGxlbiwgb2Zmc2V0LCAiIEBAIiwgJmZyYWdtZW50LT5uZXdwb3MsICZmcmFnbWVudC0+bmV3bGluZXMpOworCisJcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGludCBmaW5kX2hlYWRlcihjb25zdCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCAqaGRyc2l6ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGVuOworCisJcGF0Y2gtPmlzX3RvcGxldmVsX3JlbGF0aXZlID0gMDsKKwlwYXRjaC0+aXNfcmVuYW1lID0gcGF0Y2gtPmlzX2NvcHkgPSAwOworCXBhdGNoLT5pc19uZXcgPSBwYXRjaC0+aXNfZGVsZXRlID0gLTE7CisJcGF0Y2gtPm9sZF9tb2RlID0gcGF0Y2gtPm5ld19tb2RlID0gMDsKKwlwYXRjaC0+b2xkX25hbWUgPSBwYXRjaC0+bmV3X25hbWUgPSBOVUxMOworCWZvciAob2Zmc2V0ID0gMDsgc2l6ZSA+IDA7IG9mZnNldCArPSBsZW4sIHNpemUgLT0gbGVuLCBsaW5lICs9IGxlbiwgbGluZW5yKyspIHsKKwkJdW5zaWduZWQgbG9uZyBuZXh0bGVuOworCisJCWxlbiA9IGxpbmVsZW4obGluZSwgc2l6ZSk7CisJCWlmICghbGVuKQorCQkJYnJlYWs7CisKKwkJLyogVGVzdGluZyB0aGlzIGVhcmx5IGFsbG93cyB1cyB0byB0YWtlIGEgZmV3IHNob3J0Y3V0cy4uICovCisJCWlmIChsZW4gPCA2KQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHdlIGRvbid0IGZpbmQgYW55IHVuY29ubmVjdGVkIHBhdGNoIGZyYWdtZW50cy4KKwkJICogVGhhdCdzIGEgc2lnbiB0aGF0IHdlIGRpZG4ndCBmaW5kIGEgaGVhZGVyLCBhbmQgdGhhdCBhCisJCSAqIHBhdGNoIGhhcyBiZWNvbWUgY29ycnVwdGVkL2Jyb2tlbiB1cC4KKwkJICovCisJCWlmICghbWVtY21wKCJAQCAtIiwgbGluZSwgNCkpIHsKKwkJCXN0cnVjdCBmcmFnbWVudCBkdW1teTsKKwkJCWlmIChwYXJzZV9mcmFnbWVudF9oZWFkZXIobGluZSwgbGVuLCAmZHVtbXkpIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWRpZShfKCJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIiksCisJCQkgICAgbGluZW5yLCAoaW50KWxlbi0xLCBsaW5lKTsKKwkJfQorCisJCWlmIChzaXplIDwgbGVuICsgNikKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIEdpdCBwYXRjaD8gSXQgbWlnaHQgbm90IGhhdmUgYSByZWFsIHBhdGNoLCBqdXN0IGEgcmVuYW1lCisJCSAqIG9yIG1vZGUgY2hhbmdlLCBzbyB3ZSBoYW5kbGUgdGhhdCBzcGVjaWFsbHkKKwkJICovCisJCWlmICghbWVtY21wKCJkaWZmIC0tZ2l0ICIsIGxpbmUsIDExKSkgeworCQkJaW50IGdpdF9oZHJfbGVuID0gcGFyc2VfZ2l0X2hlYWRlcihsaW5lLCBsZW4sIHNpemUsIHBhdGNoKTsKKwkJCWlmIChnaXRfaGRyX2xlbiA8PSBsZW4pCisJCQkJY29udGludWU7CisJCQlpZiAoIXBhdGNoLT5vbGRfbmFtZSAmJiAhcGF0Y2gtPm5ld19uYW1lKSB7CisJCQkJaWYgKCFwYXRjaC0+ZGVmX25hbWUpCisJCQkJCWRpZShRXygiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgIgorCQkJCQkgICAgICAgIiVkIGxlYWRpbmcgcGF0aG5hbWUgY29tcG9uZW50IChsaW5lICVkKSIsCisJCQkJCSAgICAgICAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgIgorCQkJCQkgICAgICAgIiVkIGxlYWRpbmcgcGF0aG5hbWUgY29tcG9uZW50cyAobGluZSAlZCkiLAorCQkJCQkgICAgICAgcF92YWx1ZSksCisJCQkJCSAgICBwX3ZhbHVlLCBsaW5lbnIpOworCQkJCXBhdGNoLT5vbGRfbmFtZSA9IHhzdHJkdXAocGF0Y2gtPmRlZl9uYW1lKTsKKwkJCQlwYXRjaC0+bmV3X25hbWUgPSB4c3RyZHVwKHBhdGNoLT5kZWZfbmFtZSk7CisJCQl9CisJCQlpZiAoIXBhdGNoLT5pc19kZWxldGUgJiYgIXBhdGNoLT5uZXdfbmFtZSkKKwkJCQlkaWUoImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAiCisJCQkJICAgICIobGluZSAlZCkiLCBsaW5lbnIpOworCQkJcGF0Y2gtPmlzX3RvcGxldmVsX3JlbGF0aXZlID0gMTsKKwkJCSpoZHJzaXplID0gZ2l0X2hkcl9sZW47CisJCQlyZXR1cm4gb2Zmc2V0OworCQl9CisKKwkJLyogLS0tIGZvbGxvd2VkIGJ5ICsrKyA/ICovCisJCWlmIChtZW1jbXAoIi0tLSAiLCBsaW5lLCAgNCkgfHwgbWVtY21wKCIrKysgIiwgbGluZSArIGxlbiwgNCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBvbmx5IGFjY2VwdCB1bmlmaWVkIHBhdGNoZXMsIHNvIHdlIHdhbnQgaXQgdG8KKwkJICogYXQgbGVhc3QgaGF2ZSAiQEAgLWEsYiArYyxkIEBAXG4iLCB3aGljaCBpcyAxNCBjaGFycworCQkgKiBtaW5pbXVtICgiQEAgLTAsMCArMSBAQFxuIiBpcyB0aGUgc2hvcnRlc3QpLgorCQkgKi8KKwkJbmV4dGxlbiA9IGxpbmVsZW4obGluZSArIGxlbiwgc2l6ZSAtIGxlbik7CisJCWlmIChzaXplIDwgbmV4dGxlbiArIDE0IHx8IG1lbWNtcCgiQEAgLSIsIGxpbmUgKyBsZW4gKyBuZXh0bGVuLCA0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE9rLCB3ZSdsbCBjb25zaWRlciBpdCBhIHBhdGNoICovCisJCXBhcnNlX3RyYWRpdGlvbmFsX3BhdGNoKGxpbmUsIGxpbmUrbGVuLCBwYXRjaCk7CisJCSpoZHJzaXplID0gbGVuICsgbmV4dGxlbjsKKwkJbGluZW5yICs9IDI7CisJCXJldHVybiBvZmZzZXQ7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX3dzX2Vycm9yKHVuc2lnbmVkIHJlc3VsdCwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgaW50IGxpbmVucikKK3sKKwljaGFyICplcnI7CisKKwlpZiAoIXJlc3VsdCkKKwkJcmV0dXJuOworCisJd2hpdGVzcGFjZV9lcnJvcisrOworCWlmIChzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzICYmCisJICAgIHNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgPCB3aGl0ZXNwYWNlX2Vycm9yKQorCQlyZXR1cm47CisKKwllcnIgPSB3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyhyZXN1bHQpOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzLlxuJS4qc1xuIiwKKwkJcGF0Y2hfaW5wdXRfZmlsZSwgbGluZW5yLCBlcnIsIGxlbiwgbGluZSk7CisJZnJlZShlcnIpOworfQorCitzdGF0aWMgdm9pZCBjaGVja193aGl0ZXNwYWNlKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIHdzX3J1bGUpCit7CisJdW5zaWduZWQgcmVzdWx0ID0gd3NfY2hlY2sobGluZSArIDEsIGxlbiAtIDEsIHdzX3J1bGUpOworCisJcmVjb3JkX3dzX2Vycm9yKHJlc3VsdCwgbGluZSArIDEsIGxlbiAtIDIsIGxpbmVucik7Cit9CisKKy8qCisgKiBQYXJzZSBhIHVuaWZpZWQgZGlmZi4gTm90ZSB0aGF0IHRoaXMgcmVhbGx5IG5lZWRzIHRvIHBhcnNlIGVhY2gKKyAqIGZyYWdtZW50IHNlcGFyYXRlbHksIHNpbmNlIHRoZSBvbmx5IHdheSB0byBrbm93IHRoZSBkaWZmZXJlbmNlCisgKiBiZXR3ZWVuIGEgIi0tLSIgdGhhdCBpcyBwYXJ0IG9mIGEgcGF0Y2gsIGFuZCBhICItLS0iIHRoYXQgc3RhcnRzCisgKiB0aGUgbmV4dCBwYXRjaCBpcyB0byBsb29rIGF0IHRoZSBsaW5lIGNvdW50cy4uCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfZnJhZ21lbnQoY29uc3QgY2hhciAqbGluZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoLCBzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50KQoreworCWludCBhZGRlZCwgZGVsZXRlZDsKKwlpbnQgbGVuID0gbGluZWxlbihsaW5lLCBzaXplKSwgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgb2xkbGluZXMsIG5ld2xpbmVzOworCXVuc2lnbmVkIGxvbmcgbGVhZGluZywgdHJhaWxpbmc7CisKKwlvZmZzZXQgPSBwYXJzZV9mcmFnbWVudF9oZWFkZXIobGluZSwgbGVuLCBmcmFnbWVudCk7CisJaWYgKG9mZnNldCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAob2Zmc2V0ID4gMCAmJiBwYXRjaC0+cmVjb3VudCkKKwkJcmVjb3VudF9kaWZmKGxpbmUgKyBvZmZzZXQsIHNpemUgLSBvZmZzZXQsIGZyYWdtZW50KTsKKwlvbGRsaW5lcyA9IGZyYWdtZW50LT5vbGRsaW5lczsKKwluZXdsaW5lcyA9IGZyYWdtZW50LT5uZXdsaW5lczsKKwlsZWFkaW5nID0gMDsKKwl0cmFpbGluZyA9IDA7CisKKwkvKiBQYXJzZSB0aGUgdGhpbmcuLiAqLworCWxpbmUgKz0gbGVuOworCXNpemUgLT0gbGVuOworCWxpbmVucisrOworCWFkZGVkID0gZGVsZXRlZCA9IDA7CisJZm9yIChvZmZzZXQgPSBsZW47CisJICAgICAwIDwgc2l6ZTsKKwkgICAgIG9mZnNldCArPSBsZW4sIHNpemUgLT0gbGVuLCBsaW5lICs9IGxlbiwgbGluZW5yKyspIHsKKwkJaWYgKCFvbGRsaW5lcyAmJiAhbmV3bGluZXMpCisJCQlicmVhazsKKwkJbGVuID0gbGluZWxlbihsaW5lLCBzaXplKTsKKwkJaWYgKCFsZW4gfHwgbGluZVtsZW4tMV0gIT0gJ1xuJykKKwkJCXJldHVybiAtMTsKKwkJc3dpdGNoICgqbGluZSkgeworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC0xOworCQljYXNlICdcbic6IC8qIG5ld2VyIEdOVSBkaWZmLCBhbiBlbXB0eSBjb250ZXh0IGxpbmUgKi8KKwkJY2FzZSAnICc6CisJCQlvbGRsaW5lcy0tOworCQkJbmV3bGluZXMtLTsKKwkJCWlmICghZGVsZXRlZCAmJiAhYWRkZWQpCisJCQkJbGVhZGluZysrOworCQkJdHJhaWxpbmcrKzsKKwkJCWJyZWFrOworCQljYXNlICctJzoKKwkJCWlmIChhcHBseV9pbl9yZXZlcnNlICYmCisJCQkgICAgd3NfZXJyb3JfYWN0aW9uICE9IG5vd2Fybl93c19lcnJvcikKKwkJCQljaGVja193aGl0ZXNwYWNlKGxpbmUsIGxlbiwgcGF0Y2gtPndzX3J1bGUpOworCQkJZGVsZXRlZCsrOworCQkJb2xkbGluZXMtLTsKKwkJCXRyYWlsaW5nID0gMDsKKwkJCWJyZWFrOworCQljYXNlICcrJzoKKwkJCWlmICghYXBwbHlfaW5fcmV2ZXJzZSAmJgorCQkJICAgIHdzX2Vycm9yX2FjdGlvbiAhPSBub3dhcm5fd3NfZXJyb3IpCisJCQkJY2hlY2tfd2hpdGVzcGFjZShsaW5lLCBsZW4sIHBhdGNoLT53c19ydWxlKTsKKwkJCWFkZGVkKys7CisJCQluZXdsaW5lcy0tOworCQkJdHJhaWxpbmcgPSAwOworCQkJYnJlYWs7CisKKwkJLyoKKwkJICogV2UgYWxsb3cgIlwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZSIuIERlcGVuZGluZworICAgICAgICAgICAgICAgICAqIG9uIGxvY2FsZSBzZXR0aW5ncyB3aGVuIHRoZSBwYXRjaCB3YXMgcHJvZHVjZWQgd2UKKyAgICAgICAgICAgICAgICAgKiBkb24ndCBrbm93IHdoYXQgdGhpcyBsaW5lIGxvb2tzIGxpa2UuIFRoZSBvbmx5CisgICAgICAgICAgICAgICAgICogdGhpbmcgd2UgZG8ga25vdyBpcyB0aGF0IGl0IGJlZ2lucyB3aXRoICJcICIuCisJCSAqIENoZWNraW5nIGZvciAxMiBpcyBqdXN0IGZvciBzYW5pdHkgY2hlY2sgLS0gYW55CisJCSAqIGwxMG4gb2YgIlwgTm8gbmV3bGluZS4uLiIgaXMgYXQgbGVhc3QgdGhhdCBsb25nLgorCQkgKi8KKwkJY2FzZSAnXFwnOgorCQkJaWYgKGxlbiA8IDEyIHx8IG1lbWNtcChsaW5lLCAiXFwgIiwgMikpCisJCQkJcmV0dXJuIC0xOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKG9sZGxpbmVzIHx8IG5ld2xpbmVzKQorCQlyZXR1cm4gLTE7CisJZnJhZ21lbnQtPmxlYWRpbmcgPSBsZWFkaW5nOworCWZyYWdtZW50LT50cmFpbGluZyA9IHRyYWlsaW5nOworCisJLyoKKwkgKiBJZiBhIGZyYWdtZW50IGVuZHMgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUsIHdlIGZhaWxlZCB0byBpbmNsdWRlCisJICogaXQgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoaXQgb2xkbGluZXMgPT0gbmV3bGluZXMgPT0gMAorCSAqIGJlZm9yZSBzZWVpbmcgaXQuCisJICovCisJaWYgKDEyIDwgc2l6ZSAmJiAhbWVtY21wKGxpbmUsICJcXCAiLCAyKSkKKwkJb2Zmc2V0ICs9IGxpbmVsZW4obGluZSwgc2l6ZSk7CisKKwlwYXRjaC0+bGluZXNfYWRkZWQgKz0gYWRkZWQ7CisJcGF0Y2gtPmxpbmVzX2RlbGV0ZWQgKz0gZGVsZXRlZDsKKworCWlmICgwIDwgcGF0Y2gtPmlzX25ldyAmJiBvbGRsaW5lcykKKwkJcmV0dXJuIGVycm9yKF8oIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIikpOworCWlmICgwIDwgcGF0Y2gtPmlzX2RlbGV0ZSAmJiBuZXdsaW5lcykKKwkJcmV0dXJuIGVycm9yKF8oImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiKSk7CisJcmV0dXJuIG9mZnNldDsKK30KKworLyoKKyAqIFdlIGhhdmUgc2VlbiAiZGlmZiAtLWdpdCBhLy4uLiBiLy4uLiIgaGVhZGVyIChvciBhIHRyYWRpdGlvbmFsIHBhdGNoCisgKiBoZWFkZXIpLiAgUmVhZCBodW5rcyB0aGF0IGJlbG9uZyB0byB0aGlzIHBhdGNoIGludG8gZnJhZ21lbnRzIGFuZCBoYW5nCisgKiB0aGVtIHRvIHRoZSBnaXZlbiBwYXRjaCBzdHJ1Y3R1cmUuCisgKgorICogVGhlIChmcmFnbWVudC0+cGF0Y2gsIGZyYWdtZW50LT5zaXplKSBwYWlyIHBvaW50cyBpbnRvIHRoZSBtZW1vcnkgZ2l2ZW4KKyAqIGJ5IHRoZSBjYWxsZXIsIG5vdCBhIGNvcHksIHdoZW4gd2UgcmV0dXJuLgorICovCitzdGF0aWMgaW50IHBhcnNlX3NpbmdsZV9wYXRjaChjb25zdCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgb2xkbGluZXMgPSAwLCBuZXdsaW5lcyA9IDAsIGNvbnRleHQgPSAwOworCXN0cnVjdCBmcmFnbWVudCAqKmZyYWdwID0gJnBhdGNoLT5mcmFnbWVudHM7CisKKwl3aGlsZSAoc2l6ZSA+IDQgJiYgIW1lbWNtcChsaW5lLCAiQEAgLSIsIDQpKSB7CisJCXN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnQ7CisJCWludCBsZW47CisKKwkJZnJhZ21lbnQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZnJhZ21lbnQpKTsKKwkJZnJhZ21lbnQtPmxpbmVuciA9IGxpbmVucjsKKwkJbGVuID0gcGFyc2VfZnJhZ21lbnQobGluZSwgc2l6ZSwgcGF0Y2gsIGZyYWdtZW50KTsKKwkJaWYgKGxlbiA8PSAwKQorCQkJZGllKF8oImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIpLCBsaW5lbnIpOworCQlmcmFnbWVudC0+cGF0Y2ggPSBsaW5lOworCQlmcmFnbWVudC0+c2l6ZSA9IGxlbjsKKwkJb2xkbGluZXMgKz0gZnJhZ21lbnQtPm9sZGxpbmVzOworCQluZXdsaW5lcyArPSBmcmFnbWVudC0+bmV3bGluZXM7CisJCWNvbnRleHQgKz0gZnJhZ21lbnQtPmxlYWRpbmcgKyBmcmFnbWVudC0+dHJhaWxpbmc7CisKKwkJKmZyYWdwID0gZnJhZ21lbnQ7CisJCWZyYWdwID0gJmZyYWdtZW50LT5uZXh0OworCisJCW9mZnNldCArPSBsZW47CisJCWxpbmUgKz0gbGVuOworCQlzaXplIC09IGxlbjsKKwl9CisKKwkvKgorCSAqIElmIHNvbWV0aGluZyB3YXMgcmVtb3ZlZCAoaS5lLiB3ZSBoYXZlIG9sZC1saW5lcykgaXQgY2Fubm90CisJICogYmUgY3JlYXRpb24sIGFuZCBpZiBzb21ldGhpbmcgd2FzIGFkZGVkIGl0IGNhbm5vdCBiZQorCSAqIGRlbGV0aW9uLiAgSG93ZXZlciwgdGhlIHJldmVyc2UgaXMgbm90IHRydWU7IC0tdW5pZmllZD0wCisJICogcGF0Y2hlcyB0aGF0IG9ubHkgYWRkIGFyZSBub3QgbmVjZXNzYXJpbHkgY3JlYXRpb24gZXZlbgorCSAqIHRob3VnaCB0aGV5IGRvIG5vdCBoYXZlIGFueSBvbGQgbGluZXMsIGFuZCBvbmVzIHRoYXQgb25seQorCSAqIGRlbGV0ZSBhcmUgbm90IG5lY2Vzc2FyaWx5IGRlbGV0aW9uLgorCSAqCisJICogVW5mb3J0dW5hdGVseSwgYSByZWFsIGNyZWF0aW9uL2RlbGV0aW9uIHBhdGNoIGRvIF9ub3RfIGhhdmUKKwkgKiBhbnkgY29udGV4dCBsaW5lIGJ5IGRlZmluaXRpb24sIHNvIHdlIGNhbm5vdCBzYWZlbHkgdGVsbCBpdAorCSAqIGFwYXJ0IHdpdGggLS11bmlmaWVkPTAgaW5zYW5pdHkuICBBdCBsZWFzdCBpZiB0aGUgcGF0Y2ggaGFzCisJICogbW9yZSB0aGFuIG9uZSBodW5rIGl0IGlzIG5vdCBjcmVhdGlvbiBvciBkZWxldGlvbi4KKwkgKi8KKwlpZiAocGF0Y2gtPmlzX25ldyA8IDAgJiYKKwkgICAgKG9sZGxpbmVzIHx8IChwYXRjaC0+ZnJhZ21lbnRzICYmIHBhdGNoLT5mcmFnbWVudHMtPm5leHQpKSkKKwkJcGF0Y2gtPmlzX25ldyA9IDA7CisJaWYgKHBhdGNoLT5pc19kZWxldGUgPCAwICYmCisJICAgIChuZXdsaW5lcyB8fCAocGF0Y2gtPmZyYWdtZW50cyAmJiBwYXRjaC0+ZnJhZ21lbnRzLT5uZXh0KSkpCisJCXBhdGNoLT5pc19kZWxldGUgPSAwOworCisJaWYgKDAgPCBwYXRjaC0+aXNfbmV3ICYmIG9sZGxpbmVzKQorCQlkaWUoXygibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiKSwgcGF0Y2gtPm5ld19uYW1lKTsKKwlpZiAoMCA8IHBhdGNoLT5pc19kZWxldGUgJiYgbmV3bGluZXMpCisJCWRpZShfKCJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIiksIHBhdGNoLT5vbGRfbmFtZSk7CisJaWYgKCFwYXRjaC0+aXNfZGVsZXRlICYmICFuZXdsaW5lcyAmJiBjb250ZXh0KQorCQlmcHJpbnRmX2xuKHN0ZGVyciwKKwkJCSAgIF8oIioqIHdhcm5pbmc6ICIKKwkJCSAgICAgImZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiKSwKKwkJCSAgIHBhdGNoLT5uZXdfbmFtZSk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgaW5saW5lIGludCBtZXRhZGF0YV9jaGFuZ2VzKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcmV0dXJuCXBhdGNoLT5pc19yZW5hbWUgPiAwIHx8CisJCXBhdGNoLT5pc19jb3B5ID4gMCB8fAorCQlwYXRjaC0+aXNfbmV3ID4gMCB8fAorCQlwYXRjaC0+aXNfZGVsZXRlIHx8CisJCShwYXRjaC0+b2xkX21vZGUgJiYgcGF0Y2gtPm5ld19tb2RlICYmCisJCSBwYXRjaC0+b2xkX21vZGUgIT0gcGF0Y2gtPm5ld19tb2RlKTsKK30KKworc3RhdGljIGNoYXIgKmluZmxhdGVfaXQoY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJdW5zaWduZWQgbG9uZyBpbmZsYXRlZF9zaXplKQoreworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwl2b2lkICpvdXQ7CisJaW50IHN0OworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKworCXN0cmVhbS5uZXh0X2luID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOworCXN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJc3RyZWFtLm5leHRfb3V0ID0gb3V0ID0geG1hbGxvYyhpbmZsYXRlZF9zaXplKTsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gaW5mbGF0ZWRfc2l6ZTsKKwlnaXRfaW5mbGF0ZV9pbml0KCZzdHJlYW0pOworCXN0ID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwlpZiAoKHN0ICE9IFpfU1RSRUFNX0VORCkgfHwgc3RyZWFtLnRvdGFsX291dCAhPSBpbmZsYXRlZF9zaXplKSB7CisJCWZyZWUob3V0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBvdXQ7Cit9CisKKy8qCisgKiBSZWFkIGEgYmluYXJ5IGh1bmsgYW5kIHJldHVybiBhIG5ldyBmcmFnbWVudDsgZnJhZ21lbnQtPnBhdGNoCisgKiBwb2ludHMgYXQgYW4gYWxsb2NhdGVkIG1lbW9yeSB0aGF0IHRoZSBjYWxsZXIgbXVzdCBmcmVlLCBzbworICogaXQgaXMgbWFya2VkIGFzICItPmZyZWVfcGF0Y2ggPSAxIi4KKyAqLworc3RhdGljIHN0cnVjdCBmcmFnbWVudCAqcGFyc2VfYmluYXJ5X2h1bmsoY2hhciAqKmJ1Zl9wLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgKnN6X3AsCisJCQkJCSAgaW50ICpzdGF0dXNfcCwKKwkJCQkJICBpbnQgKnVzZWRfcCkKK3sKKwkvKgorCSAqIEV4cGVjdCBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCBiaW5hcnkgcGF0Y2ggbWV0aG9kICgibGl0ZXJhbCIKKwkgKiBvciAiZGVsdGEiKSwgZm9sbG93ZWQgYnkgdGhlIGxlbmd0aCBvZiBkYXRhIGJlZm9yZSBkZWZsYXRpbmcuCisJICogYSBzZXF1ZW5jZSBvZiAnbGVuZ3RoLWJ5dGUnIGZvbGxvd2VkIGJ5IGJhc2UtODUgZW5jb2RlZCBkYXRhCisJICogc2hvdWxkIGZvbGxvdywgdGVybWluYXRlZCBieSBhIG5ld2xpbmUuCisJICoKKwkgKiBFYWNoIDUtYnl0ZSBzZXF1ZW5jZSBvZiBiYXNlLTg1IGVuY29kZXMgdXAgdG8gNCBieXRlcywKKwkgKiBhbmQgd2Ugd291bGQgbGltaXQgdGhlIHBhdGNoIGxpbmUgdG8gNjYgY2hhcmFjdGVycywKKwkgKiBzbyBvbmUgbGluZSBjYW4gZml0IHVwIHRvIDEzIGdyb3VwcyB0aGF0IHdvdWxkIGRlY29kZQorCSAqIHRvIDUyIGJ5dGVzIG1heC4gIFRoZSBsZW5ndGggYnl0ZSAnQSctJ1onIGNvcnJlc3BvbmRzCisJICogdG8gMS0yNiBieXRlcywgYW5kICdhJy0neicgY29ycmVzcG9uZHMgdG8gMjctNTIgYnl0ZXMuCisJICovCisJaW50IGxsZW4sIHVzZWQ7CisJdW5zaWduZWQgbG9uZyBzaXplID0gKnN6X3A7CisJY2hhciAqYnVmZmVyID0gKmJ1Zl9wOworCWludCBwYXRjaF9tZXRob2Q7CisJdW5zaWduZWQgbG9uZyBvcmlnbGVuOworCWNoYXIgKmRhdGEgPSBOVUxMOworCWludCBodW5rX3NpemUgPSAwOworCXN0cnVjdCBmcmFnbWVudCAqZnJhZzsKKworCWxsZW4gPSBsaW5lbGVuKGJ1ZmZlciwgc2l6ZSk7CisJdXNlZCA9IGxsZW47CisKKwkqc3RhdHVzX3AgPSAwOworCisJaWYgKCFwcmVmaXhjbXAoYnVmZmVyLCAiZGVsdGEgIikpIHsKKwkJcGF0Y2hfbWV0aG9kID0gQklOQVJZX0RFTFRBX0RFRkxBVEVEOworCQlvcmlnbGVuID0gc3RydG91bChidWZmZXIgKyA2LCBOVUxMLCAxMCk7CisJfQorCWVsc2UgaWYgKCFwcmVmaXhjbXAoYnVmZmVyLCAibGl0ZXJhbCAiKSkgeworCQlwYXRjaF9tZXRob2QgPSBCSU5BUllfTElURVJBTF9ERUZMQVRFRDsKKwkJb3JpZ2xlbiA9IHN0cnRvdWwoYnVmZmVyICsgOCwgTlVMTCwgMTApOworCX0KKwllbHNlCisJCXJldHVybiBOVUxMOworCisJbGluZW5yKys7CisJYnVmZmVyICs9IGxsZW47CisJd2hpbGUgKDEpIHsKKwkJaW50IGJ5dGVfbGVuZ3RoLCBtYXhfYnl0ZV9sZW5ndGgsIG5ld3NpemU7CisJCWxsZW4gPSBsaW5lbGVuKGJ1ZmZlciwgc2l6ZSk7CisJCXVzZWQgKz0gbGxlbjsKKwkJbGluZW5yKys7CisJCWlmIChsbGVuID09IDEpIHsKKwkJCS8qIGNvbnN1bWUgdGhlIGJsYW5rIGxpbmUgKi8KKwkJCWJ1ZmZlcisrOworCQkJc2l6ZS0tOworCQkJYnJlYWs7CisJCX0KKwkJLyoKKwkJICogTWluaW11bSBsaW5lIGlzICJBMDAwMDBcbiIgd2hpY2ggaXMgNy1ieXRlIGxvbmcsCisJCSAqIGFuZCB0aGUgbGluZSBsZW5ndGggbXVzdCBiZSBtdWx0aXBsZSBvZiA1IHBsdXMgMi4KKwkJICovCisJCWlmICgobGxlbiA8IDcpIHx8IChsbGVuLTIpICUgNSkKKwkJCWdvdG8gY29ycnVwdDsKKwkJbWF4X2J5dGVfbGVuZ3RoID0gKGxsZW4gLSAyKSAvIDUgKiA0OworCQlieXRlX2xlbmd0aCA9ICpidWZmZXI7CisJCWlmICgnQScgPD0gYnl0ZV9sZW5ndGggJiYgYnl0ZV9sZW5ndGggPD0gJ1onKQorCQkJYnl0ZV9sZW5ndGggPSBieXRlX2xlbmd0aCAtICdBJyArIDE7CisJCWVsc2UgaWYgKCdhJyA8PSBieXRlX2xlbmd0aCAmJiBieXRlX2xlbmd0aCA8PSAneicpCisJCQlieXRlX2xlbmd0aCA9IGJ5dGVfbGVuZ3RoIC0gJ2EnICsgMjc7CisJCWVsc2UKKwkJCWdvdG8gY29ycnVwdDsKKwkJLyogaWYgdGhlIGlucHV0IGxlbmd0aCB3YXMgbm90IG11bHRpcGxlIG9mIDQsIHdlIHdvdWxkCisJCSAqIGhhdmUgZmlsbGVyIGF0IHRoZSBlbmQgYnV0IHRoZSBmaWxsZXIgc2hvdWxkIG5ldmVyCisJCSAqIGV4Y2VlZCAzIGJ5dGVzCisJCSAqLworCQlpZiAobWF4X2J5dGVfbGVuZ3RoIDwgYnl0ZV9sZW5ndGggfHwKKwkJICAgIGJ5dGVfbGVuZ3RoIDw9IG1heF9ieXRlX2xlbmd0aCAtIDQpCisJCQlnb3RvIGNvcnJ1cHQ7CisJCW5ld3NpemUgPSBodW5rX3NpemUgKyBieXRlX2xlbmd0aDsKKwkJZGF0YSA9IHhyZWFsbG9jKGRhdGEsIG5ld3NpemUpOworCQlpZiAoZGVjb2RlXzg1KGRhdGEgKyBodW5rX3NpemUsIGJ1ZmZlciArIDEsIGJ5dGVfbGVuZ3RoKSkKKwkJCWdvdG8gY29ycnVwdDsKKwkJaHVua19zaXplID0gbmV3c2l6ZTsKKwkJYnVmZmVyICs9IGxsZW47CisJCXNpemUgLT0gbGxlbjsKKwl9CisKKwlmcmFnID0geGNhbGxvYygxLCBzaXplb2YoKmZyYWcpKTsKKwlmcmFnLT5wYXRjaCA9IGluZmxhdGVfaXQoZGF0YSwgaHVua19zaXplLCBvcmlnbGVuKTsKKwlmcmFnLT5mcmVlX3BhdGNoID0gMTsKKwlpZiAoIWZyYWctPnBhdGNoKQorCQlnb3RvIGNvcnJ1cHQ7CisJZnJlZShkYXRhKTsKKwlmcmFnLT5zaXplID0gb3JpZ2xlbjsKKwkqYnVmX3AgPSBidWZmZXI7CisJKnN6X3AgPSBzaXplOworCSp1c2VkX3AgPSB1c2VkOworCWZyYWctPmJpbmFyeV9wYXRjaF9tZXRob2QgPSBwYXRjaF9tZXRob2Q7CisJcmV0dXJuIGZyYWc7CisKKyBjb3JydXB0OgorCWZyZWUoZGF0YSk7CisJKnN0YXR1c19wID0gLTE7CisJZXJyb3IoXygiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIpLAorCSAgICAgIGxpbmVuci0xLCBsbGVuLTEsIGJ1ZmZlcik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYmluYXJ5KGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCS8qCisJICogV2UgaGF2ZSByZWFkICJHSVQgYmluYXJ5IHBhdGNoXG4iOyB3aGF0IGZvbGxvd3MgaXMgYSBsaW5lCisJICogdGhhdCBzYXlzIHRoZSBwYXRjaCBtZXRob2QgKGN1cnJlbnRseSwgZWl0aGVyICJsaXRlcmFsIiBvcgorCSAqICJkZWx0YSIpIGFuZCB0aGUgbGVuZ3RoIG9mIGRhdGEgYmVmb3JlIGRlZmxhdGluZzsgYQorCSAqIHNlcXVlbmNlIG9mICdsZW5ndGgtYnl0ZScgZm9sbG93ZWQgYnkgYmFzZS04NSBlbmNvZGVkIGRhdGEKKwkgKiBmb2xsb3dzLgorCSAqCisJICogV2hlbiBhIGJpbmFyeSBwYXRjaCBpcyByZXZlcnNpYmxlLCB0aGVyZSBpcyBhbm90aGVyIGJpbmFyeQorCSAqIGh1bmsgaW4gdGhlIHNhbWUgZm9ybWF0LCBzdGFydGluZyB3aXRoIHBhdGNoIG1ldGhvZCAoZWl0aGVyCisJICogImxpdGVyYWwiIG9yICJkZWx0YSIpIHdpdGggdGhlIGxlbmd0aCBvZiBkYXRhLCBhbmQgYSBzZXF1ZW5jZQorCSAqIG9mIGxlbmd0aC1ieXRlICsgYmFzZS04NSBlbmNvZGVkIGRhdGEsIHRlcm1pbmF0ZWQgd2l0aCBhbm90aGVyCisJICogZW1wdHkgbGluZS4gIFRoaXMgZGF0YSwgd2hlbiBhcHBsaWVkIHRvIHRoZSBwb3N0aW1hZ2UsIHByb2R1Y2VzCisJICogdGhlIHByZWltYWdlLgorCSAqLworCXN0cnVjdCBmcmFnbWVudCAqZm9yd2FyZDsKKwlzdHJ1Y3QgZnJhZ21lbnQgKnJldmVyc2U7CisJaW50IHN0YXR1czsKKwlpbnQgdXNlZCwgdXNlZF8xOworCisJZm9yd2FyZCA9IHBhcnNlX2JpbmFyeV9odW5rKCZidWZmZXIsICZzaXplLCAmc3RhdHVzLCAmdXNlZCk7CisJaWYgKCFmb3J3YXJkICYmICFzdGF0dXMpCisJCS8qIHRoZXJlIGhhcyB0byBiZSBvbmUgaHVuayAoZm9yd2FyZCBodW5rKSAqLworCQlyZXR1cm4gZXJyb3IoXygidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIiksIGxpbmVuci0xKTsKKwlpZiAoc3RhdHVzKQorCQkvKiBvdGhlcndpc2Ugd2UgYWxyZWFkeSBnYXZlIGFuIGVycm9yIG1lc3NhZ2UgKi8KKwkJcmV0dXJuIHN0YXR1czsKKworCXJldmVyc2UgPSBwYXJzZV9iaW5hcnlfaHVuaygmYnVmZmVyLCAmc2l6ZSwgJnN0YXR1cywgJnVzZWRfMSk7CisJaWYgKHJldmVyc2UpCisJCXVzZWQgKz0gdXNlZF8xOworCWVsc2UgaWYgKHN0YXR1cykgeworCQkvKgorCQkgKiBOb3QgaGF2aW5nIHJldmVyc2UgaHVuayBpcyBub3QgYW4gZXJyb3IsIGJ1dCBoYXZpbmcKKwkJICogYSBjb3JydXB0IHJldmVyc2UgaHVuayBpcy4KKwkJICovCisJCWZyZWUoKHZvaWQqKSBmb3J3YXJkLT5wYXRjaCk7CisJCWZyZWUoZm9yd2FyZCk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCWZvcndhcmQtPm5leHQgPSByZXZlcnNlOworCXBhdGNoLT5mcmFnbWVudHMgPSBmb3J3YXJkOworCXBhdGNoLT5pc19iaW5hcnkgPSAxOworCXJldHVybiB1c2VkOworfQorCisvKgorICogUmVhZCB0aGUgcGF0Y2ggdGV4dCBpbiAiYnVmZmVyIiB0YWh0IGV4dGVuZHMgZm9yICJzaXplIiBieXRlczsgc3RvcAorICogcmVhZGluZyBhZnRlciBzZWVpbmcgYSBzaW5nbGUgcGF0Y2ggKGkuZS4gY2hhbmdlcyB0byBhIHNpbmdsZSBmaWxlKS4KKyAqIENyZWF0ZSBmcmFnbWVudHMgKGkuZS4gcGF0Y2ggaHVua3MpIGFuZCBoYW5nIHRoZW0gdG8gdGhlIGdpdmVuIHBhdGNoLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29uc3VtZWQsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gY2FsbCB1cworICogYWdhaW4gZm9yIHRoZSBuZXh0IHBhdGNoLgorICovCitzdGF0aWMgaW50IHBhcnNlX2NodW5rKGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWludCBoZHJzaXplLCBwYXRjaHNpemU7CisJaW50IG9mZnNldCA9IGZpbmRfaGVhZGVyKGJ1ZmZlciwgc2l6ZSwgJmhkcnNpemUsIHBhdGNoKTsKKworCWlmIChvZmZzZXQgPCAwKQorCQlyZXR1cm4gb2Zmc2V0OworCisJcGF0Y2gtPndzX3J1bGUgPSB3aGl0ZXNwYWNlX3J1bGUocGF0Y2gtPm5ld19uYW1lCisJCQkJCSA/IHBhdGNoLT5uZXdfbmFtZQorCQkJCQkgOiBwYXRjaC0+b2xkX25hbWUpOworCisJcGF0Y2hzaXplID0gcGFyc2Vfc2luZ2xlX3BhdGNoKGJ1ZmZlciArIG9mZnNldCArIGhkcnNpemUsCisJCQkJICAgICAgIHNpemUgLSBvZmZzZXQgLSBoZHJzaXplLCBwYXRjaCk7CisKKwlpZiAoIXBhdGNoc2l6ZSkgeworCQlzdGF0aWMgY29uc3QgY2hhciAqYmluaGRyW10gPSB7CisJCQkiQmluYXJ5IGZpbGVzICIsCisJCQkiRmlsZXMgIiwKKwkJCU5VTEwsCisJCX07CisJCXN0YXRpYyBjb25zdCBjaGFyIGdpdF9iaW5hcnlbXSA9ICJHSVQgYmluYXJ5IHBhdGNoXG4iOworCQlpbnQgaTsKKwkJaW50IGhkID0gaGRyc2l6ZSArIG9mZnNldDsKKwkJdW5zaWduZWQgbG9uZyBsbGVuID0gbGluZWxlbihidWZmZXIgKyBoZCwgc2l6ZSAtIGhkKTsKKworCQlpZiAobGxlbiA9PSBzaXplb2YoZ2l0X2JpbmFyeSkgLSAxICYmCisJCSAgICAhbWVtY21wKGdpdF9iaW5hcnksIGJ1ZmZlciArIGhkLCBsbGVuKSkgeworCQkJaW50IHVzZWQ7CisJCQlsaW5lbnIrKzsKKwkJCXVzZWQgPSBwYXJzZV9iaW5hcnkoYnVmZmVyICsgaGQgKyBsbGVuLAorCQkJCQkgICAgc2l6ZSAtIGhkIC0gbGxlbiwgcGF0Y2gpOworCQkJaWYgKHVzZWQpCisJCQkJcGF0Y2hzaXplID0gdXNlZCArIGxsZW47CisJCQllbHNlCisJCQkJcGF0Y2hzaXplID0gMDsKKwkJfQorCQllbHNlIGlmICghbWVtY21wKCIgZGlmZmVyXG4iLCBidWZmZXIgKyBoZCArIGxsZW4gLSA4LCA4KSkgeworCQkJZm9yIChpID0gMDsgYmluaGRyW2ldOyBpKyspIHsKKwkJCQlpbnQgbGVuID0gc3RybGVuKGJpbmhkcltpXSk7CisJCQkJaWYgKGxlbiA8IHNpemUgLSBoZCAmJgorCQkJCSAgICAhbWVtY21wKGJpbmhkcltpXSwgYnVmZmVyICsgaGQsIGxlbikpIHsKKwkJCQkJbGluZW5yKys7CisJCQkJCXBhdGNoLT5pc19iaW5hcnkgPSAxOworCQkJCQlwYXRjaHNpemUgPSBsbGVuOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBFbXB0eSBwYXRjaCBjYW5ub3QgYmUgYXBwbGllZCBpZiBpdCBpcyBhIHRleHQgcGF0Y2gKKwkJICogd2l0aG91dCBtZXRhZGF0YSBjaGFuZ2UuICBBIGJpbmFyeSBwYXRjaCBhcHBlYXJzCisJCSAqIGVtcHR5IHRvIHVzIGhlcmUuCisJCSAqLworCQlpZiAoKGFwcGx5IHx8IGNoZWNrKSAmJgorCQkgICAgKCFwYXRjaC0+aXNfYmluYXJ5ICYmICFtZXRhZGF0YV9jaGFuZ2VzKHBhdGNoKSkpCisJCQlkaWUoXygicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIpLCBsaW5lbnIpOworCX0KKworCXJldHVybiBvZmZzZXQgKyBoZHJzaXplICsgcGF0Y2hzaXplOworfQorCisjZGVmaW5lIHN3YXAoYSxiKSBteXN3YXAoKGEpLChiKSxzaXplb2YoYSkpCisKKyNkZWZpbmUgbXlzd2FwKGEsIGIsIHNpemUpIGRvIHsJCVwKKwl1bnNpZ25lZCBjaGFyIG15dG1wW3NpemVdOwlcCisJbWVtY3B5KG15dG1wLCAmYSwgc2l6ZSk7CQlcCisJbWVtY3B5KCZhLCAmYiwgc2l6ZSk7CQlcCisJbWVtY3B5KCZiLCBteXRtcCwgc2l6ZSk7CQlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCByZXZlcnNlX3BhdGNoZXMoc3RydWN0IHBhdGNoICpwKQoreworCWZvciAoOyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWcgPSBwLT5mcmFnbWVudHM7CisKKwkJc3dhcChwLT5uZXdfbmFtZSwgcC0+b2xkX25hbWUpOworCQlzd2FwKHAtPm5ld19tb2RlLCBwLT5vbGRfbW9kZSk7CisJCXN3YXAocC0+aXNfbmV3LCBwLT5pc19kZWxldGUpOworCQlzd2FwKHAtPmxpbmVzX2FkZGVkLCBwLT5saW5lc19kZWxldGVkKTsKKwkJc3dhcChwLT5vbGRfc2hhMV9wcmVmaXgsIHAtPm5ld19zaGExX3ByZWZpeCk7CisKKwkJZm9yICg7IGZyYWc7IGZyYWcgPSBmcmFnLT5uZXh0KSB7CisJCQlzd2FwKGZyYWctPm5ld3BvcywgZnJhZy0+b2xkcG9zKTsKKwkJCXN3YXAoZnJhZy0+bmV3bGluZXMsIGZyYWctPm9sZGxpbmVzKTsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgcGx1c2VzW10gPQorIisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysiOworc3RhdGljIGNvbnN0IGNoYXIgbWludXNlc1tdPQorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iOworCitzdGF0aWMgdm9pZCBzaG93X3N0YXRzKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IHN0cmJ1ZiBxbmFtZSA9IFNUUkJVRl9JTklUOworCWNoYXIgKmNwID0gcGF0Y2gtPm5ld19uYW1lID8gcGF0Y2gtPm5ld19uYW1lIDogcGF0Y2gtPm9sZF9uYW1lOworCWludCBtYXgsIGFkZCwgZGVsOworCisJcXVvdGVfY19zdHlsZShjcCwgJnFuYW1lLCBOVUxMLCAwKTsKKworCS8qCisJICogInNjYWxlIiB0aGUgZmlsZW5hbWUKKwkgKi8KKwltYXggPSBtYXhfbGVuOworCWlmIChtYXggPiA1MCkKKwkJbWF4ID0gNTA7CisKKwlpZiAocW5hbWUubGVuID4gbWF4KSB7CisJCWNwID0gc3RyY2hyKHFuYW1lLmJ1ZiArIHFuYW1lLmxlbiArIDMgLSBtYXgsICcvJyk7CisJCWlmICghY3ApCisJCQljcCA9IHFuYW1lLmJ1ZiArIHFuYW1lLmxlbiArIDMgLSBtYXg7CisJCXN0cmJ1Zl9zcGxpY2UoJnFuYW1lLCAwLCBjcCAtIHFuYW1lLmJ1ZiwgIi4uLiIsIDMpOworCX0KKworCWlmIChwYXRjaC0+aXNfYmluYXJ5KSB7CisJCXByaW50ZigiICUtKnMgfCAgQmluXG4iLCBtYXgsIHFuYW1lLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZxbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoIiAlLSpzIHwiLCBtYXgsIHFuYW1lLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnFuYW1lKTsKKworCS8qCisJICogc2NhbGUgdGhlIGFkZC9kZWxldGUKKwkgKi8KKwltYXggPSBtYXggKyBtYXhfY2hhbmdlID4gNzAgPyA3MCAtIG1heCA6IG1heF9jaGFuZ2U7CisJYWRkID0gcGF0Y2gtPmxpbmVzX2FkZGVkOworCWRlbCA9IHBhdGNoLT5saW5lc19kZWxldGVkOworCisJaWYgKG1heF9jaGFuZ2UgPiAwKSB7CisJCWludCB0b3RhbCA9ICgoYWRkICsgZGVsKSAqIG1heCArIG1heF9jaGFuZ2UgLyAyKSAvIG1heF9jaGFuZ2U7CisJCWFkZCA9IChhZGQgKiBtYXggKyBtYXhfY2hhbmdlIC8gMikgLyBtYXhfY2hhbmdlOworCQlkZWwgPSB0b3RhbCAtIGFkZDsKKwl9CisJcHJpbnRmKCIlNWQgJS4qcyUuKnNcbiIsIHBhdGNoLT5saW5lc19hZGRlZCArIHBhdGNoLT5saW5lc19kZWxldGVkLAorCQlhZGQsIHBsdXNlcywgZGVsLCBtaW51c2VzKTsKK30KKworc3RhdGljIGludCByZWFkX29sZF9kYXRhKHN0cnVjdCBzdGF0ICpzdCwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXN3aXRjaCAoc3QtPnN0X21vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZMTks6CisJCWlmIChzdHJidWZfcmVhZGxpbmsoYnVmLCBwYXRoLCBzdC0+c3Rfc2l6ZSkgPCAwKQorCQkJcmV0dXJuIGVycm9yKF8oInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiKSwgcGF0aCk7CisJCXJldHVybiAwOworCWNhc2UgU19JRlJFRzoKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoYnVmLCBwYXRoLCBzdC0+c3Rfc2l6ZSkgIT0gc3QtPnN0X3NpemUpCisJCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIpLCBwYXRoKTsKKwkJY29udmVydF90b19naXQocGF0aCwgYnVmLT5idWYsIGJ1Zi0+bGVuLCBidWYsIDApOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorfQorCisvKgorICogVXBkYXRlIHRoZSBwcmVpbWFnZSwgYW5kIHRoZSBjb21tb24gbGluZXMgaW4gcG9zdGltYWdlLAorICogZnJvbSBidWZmZXIgYnVmIG9mIGxlbmd0aCBsZW4uIElmIHBvc3RsZW4gaXMgMCB0aGUgcG9zdGltYWdlCisgKiBpcyB1cGRhdGVkIGluIHBsYWNlLCBvdGhlcndpc2UgaXQncyB1cGRhdGVkIG9uIGEgbmV3IGJ1ZmZlcgorICogb2YgbGVuZ3RoIHBvc3RsZW4KKyAqLworCitzdGF0aWMgdm9pZCB1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCisJCQkJICAgc3RydWN0IGltYWdlICpwb3N0aW1hZ2UsCisJCQkJICAgY2hhciAqYnVmLAorCQkJCSAgIHNpemVfdCBsZW4sIHNpemVfdCBwb3N0bGVuKQoreworCWludCBpLCBjdHg7CisJY2hhciAqbmV3LCAqb2xkLCAqZml4ZWQ7CisJc3RydWN0IGltYWdlIGZpeGVkX3ByZWltYWdlOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIHByZWltYWdlIHdpdGggd2hpdGVzcGFjZSBmaXhlcy4gIE5vdGUgdGhhdCB3ZQorCSAqIGFyZSBub3QgbG9zaW5nIHByZWltYWdlLT5idWYgLS0gYXBwbHlfb25lX2ZyYWdtZW50KCkgd2lsbAorCSAqIGZyZWUgIm9sZGxpbmVzIi4KKwkgKi8KKwlwcmVwYXJlX2ltYWdlKCZmaXhlZF9wcmVpbWFnZSwgYnVmLCBsZW4sIDEpOworCWFzc2VydChmaXhlZF9wcmVpbWFnZS5uciA9PSBwcmVpbWFnZS0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZS0+bnI7IGkrKykKKwkJZml4ZWRfcHJlaW1hZ2UubGluZVtpXS5mbGFnID0gcHJlaW1hZ2UtPmxpbmVbaV0uZmxhZzsKKwlmcmVlKHByZWltYWdlLT5saW5lX2FsbG9jYXRlZCk7CisJKnByZWltYWdlID0gZml4ZWRfcHJlaW1hZ2U7CisKKwkvKgorCSAqIEFkanVzdCB0aGUgY29tbW9uIGNvbnRleHQgbGluZXMgaW4gcG9zdGltYWdlLiBUaGlzIGNhbiBiZQorCSAqIGRvbmUgaW4tcGxhY2Ugd2hlbiB3ZSBhcmUganVzdCBkb2luZyB3aGl0ZXNwYWNlIGZpeGluZywKKwkgKiB3aGljaCBkb2VzIG5vdCBtYWtlIHRoZSBzdHJpbmcgZ3JvdywgYnV0IG5lZWRzIGEgbmV3IGJ1ZmZlcgorCSAqIHdoZW4gaWdub3Jpbmcgd2hpdGVzcGFjZSBjYXVzZXMgdGhlIHVwZGF0ZSwgc2luY2UgaW4gdGhpcyBjYXNlCisJICogd2UgY291bGQgaGF2ZSBlLmcuIHRhYnMgY29udmVydGVkIHRvIG11bHRpcGxlIHNwYWNlcy4KKwkgKiBXZSB0cnVzdCB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaWYgdGhlIHVwZGF0ZSBjYW4gYmUgZG9uZQorCSAqIGluIHBsYWNlIChwb3N0bGVuPT0wKSBvciBub3QuCisJICovCisJb2xkID0gcG9zdGltYWdlLT5idWY7CisJaWYgKHBvc3RsZW4pCisJCW5ldyA9IHBvc3RpbWFnZS0+YnVmID0geG1hbGxvYyhwb3N0bGVuKTsKKwllbHNlCisJCW5ldyA9IG9sZDsKKwlmaXhlZCA9IHByZWltYWdlLT5idWY7CisJZm9yIChpID0gY3R4ID0gMDsgaSA8IHBvc3RpbWFnZS0+bnI7IGkrKykgeworCQlzaXplX3QgbGVuID0gcG9zdGltYWdlLT5saW5lW2ldLmxlbjsKKwkJaWYgKCEocG9zdGltYWdlLT5saW5lW2ldLmZsYWcgJiBMSU5FX0NPTU1PTikpIHsKKwkJCS8qIGFuIGFkZGVkIGxpbmUgLS0gbm8gY291bnRlcnBhcnRzIGluIHByZWltYWdlICovCisJCQltZW1tb3ZlKG5ldywgb2xkLCBsZW4pOworCQkJb2xkICs9IGxlbjsKKwkJCW5ldyArPSBsZW47CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGEgY29tbW9uIGNvbnRleHQgLS0gc2tpcCBpdCBpbiB0aGUgb3JpZ2luYWwgcG9zdGltYWdlICovCisJCW9sZCArPSBsZW47CisKKwkJLyogYW5kIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgb25lIGluIHRoZSBmaXhlZCBwcmVpbWFnZSAqLworCQl3aGlsZSAoY3R4IDwgcHJlaW1hZ2UtPm5yICYmCisJCSAgICAgICAhKHByZWltYWdlLT5saW5lW2N0eF0uZmxhZyAmIExJTkVfQ09NTU9OKSkgeworCQkJZml4ZWQgKz0gcHJlaW1hZ2UtPmxpbmVbY3R4XS5sZW47CisJCQljdHgrKzsKKwkJfQorCQlpZiAocHJlaW1hZ2UtPm5yIDw9IGN0eCkKKwkJCWRpZShfKCJvb3BzIikpOworCisJCS8qIGFuZCBjb3B5IGl0IGluLCB3aGlsZSBmaXhpbmcgdGhlIGxpbmUgbGVuZ3RoICovCisJCWxlbiA9IHByZWltYWdlLT5saW5lW2N0eF0ubGVuOworCQltZW1jcHkobmV3LCBmaXhlZCwgbGVuKTsKKwkJbmV3ICs9IGxlbjsKKwkJZml4ZWQgKz0gbGVuOworCQlwb3N0aW1hZ2UtPmxpbmVbaV0ubGVuID0gbGVuOworCQljdHgrKzsKKwl9CisKKwkvKiBGaXggdGhlIGxlbmd0aCBvZiB0aGUgd2hvbGUgdGhpbmcgKi8KKwlwb3N0aW1hZ2UtPmxlbiA9IG5ldyAtIHBvc3RpbWFnZS0+YnVmOworfQorCitzdGF0aWMgaW50IG1hdGNoX2ZyYWdtZW50KHN0cnVjdCBpbWFnZSAqaW1nLAorCQkJICBzdHJ1Y3QgaW1hZ2UgKnByZWltYWdlLAorCQkJICBzdHJ1Y3QgaW1hZ2UgKnBvc3RpbWFnZSwKKwkJCSAgdW5zaWduZWQgbG9uZyB0cnksCisJCQkgIGludCB0cnlfbG5vLAorCQkJICB1bnNpZ25lZCB3c19ydWxlLAorCQkJICBpbnQgbWF0Y2hfYmVnaW5uaW5nLCBpbnQgbWF0Y2hfZW5kKQoreworCWludCBpOworCWNoYXIgKmZpeGVkX2J1ZiwgKmJ1ZiwgKm9yaWcsICp0YXJnZXQ7CisJc3RydWN0IHN0cmJ1ZiBmaXhlZDsKKwlzaXplX3QgZml4ZWRfbGVuOworCWludCBwcmVpbWFnZV9saW1pdDsKKworCWlmIChwcmVpbWFnZS0+bnIgKyB0cnlfbG5vIDw9IGltZy0+bnIpIHsKKwkJLyoKKwkJICogVGhlIGh1bmsgZmFsbHMgd2l0aGluIHRoZSBib3VuZGFyaWVzIG9mIGltZy4KKwkJICovCisJCXByZWltYWdlX2xpbWl0ID0gcHJlaW1hZ2UtPm5yOworCQlpZiAobWF0Y2hfZW5kICYmIChwcmVpbWFnZS0+bnIgKyB0cnlfbG5vICE9IGltZy0+bnIpKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICh3c19lcnJvcl9hY3Rpb24gPT0gY29ycmVjdF93c19lcnJvciAmJgorCQkgICAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikpIHsKKwkJLyoKKwkJICogVGhpcyBodW5rIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgaW1nLCBhbmQgd2UgYXJlCisJCSAqIHJlbW92aW5nIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuICBUaGlzCisJCSAqIG1hbnkgbGluZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmVpbWFnZSBtdXN0CisJCSAqIG1hdGNoIHdpdGggaW1nLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcHJlaW1hZ2UKKwkJICogbXVzdCBiZSBibGFuay4KKwkJICovCisJCXByZWltYWdlX2xpbWl0ID0gaW1nLT5uciAtIHRyeV9sbm87CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGh1bmsgZXh0ZW5kcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW1nIGFuZAorCQkgKiB3ZSBhcmUgbm90IHJlbW92aW5nIGJsYW5rcyBhdCB0aGUgZW5kLCBzbyB3ZQorCQkgKiBzaG91bGQgcmVqZWN0IHRoZSBodW5rIGF0IHRoaXMgcG9zaXRpb24uCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobWF0Y2hfYmVnaW5uaW5nICYmIHRyeV9sbm8pCisJCXJldHVybiAwOworCisJLyogUXVpY2sgaGFzaCBjaGVjayAqLworCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZV9saW1pdDsgaSsrKQorCQlpZiAoKGltZy0+bGluZVt0cnlfbG5vICsgaV0uZmxhZyAmIExJTkVfUEFUQ0hFRCkgfHwKKwkJICAgIChwcmVpbWFnZS0+bGluZVtpXS5oYXNoICE9IGltZy0+bGluZVt0cnlfbG5vICsgaV0uaGFzaCkpCisJCQlyZXR1cm4gMDsKKworCWlmIChwcmVpbWFnZV9saW1pdCA9PSBwcmVpbWFnZS0+bnIpIHsKKwkJLyoKKwkJICogRG8gd2UgaGF2ZSBhbiBleGFjdCBtYXRjaD8gIElmIHdlIHdlcmUgdG9sZCB0byBtYXRjaAorCQkgKiBhdCB0aGUgZW5kLCBzaXplIG11c3QgYmUgZXhhY3RseSBhdCB0cnkrZnJhZ3NpemUsCisJCSAqIG90aGVyd2lzZSB0cnkrZnJhZ3NpemUgbXVzdCBiZSBzdGlsbCB3aXRoaW4gdGhlIHByZWltYWdlLAorCQkgKiBhbmQgZWl0aGVyIGNhc2UsIHRoZSBvbGQgcGllY2Ugc2hvdWxkIG1hdGNoIHRoZSBwcmVpbWFnZQorCQkgKiBleGFjdGx5LgorCQkgKi8KKwkJaWYgKChtYXRjaF9lbmQKKwkJICAgICA/ICh0cnkgKyBwcmVpbWFnZS0+bGVuID09IGltZy0+bGVuKQorCQkgICAgIDogKHRyeSArIHByZWltYWdlLT5sZW4gPD0gaW1nLT5sZW4pKSAmJgorCQkgICAgIW1lbWNtcChpbWctPmJ1ZiArIHRyeSwgcHJlaW1hZ2UtPmJ1ZiwgcHJlaW1hZ2UtPmxlbikpCisJCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGUgcHJlaW1hZ2UgZXh0ZW5kcyBiZXlvbmQgdGhlIGVuZCBvZiBpbWcsIHNvCisJCSAqIHRoZXJlIGNhbm5vdCBiZSBhbiBleGFjdCBtYXRjaC4KKwkJICoKKwkJICogVGhlcmUgbXVzdCBiZSBvbmUgbm9uLWJsYW5rIGNvbnRleHQgbGluZSB0aGF0IG1hdGNoCisJCSAqIGEgbGluZSBiZWZvcmUgdGhlIGVuZCBvZiBpbWcuCisJCSAqLworCQljaGFyICpidWZfZW5kOworCisJCWJ1ZiA9IHByZWltYWdlLT5idWY7CisJCWJ1Zl9lbmQgPSBidWY7CisJCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZV9saW1pdDsgaSsrKQorCQkJYnVmX2VuZCArPSBwcmVpbWFnZS0+bGluZVtpXS5sZW47CisKKwkJZm9yICggOyBidWYgPCBidWZfZW5kOyBidWYrKykKKwkJCWlmICghaXNzcGFjZSgqYnVmKSkKKwkJCQlicmVhazsKKwkJaWYgKGJ1ZiA9PSBidWZfZW5kKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBObyBleGFjdCBtYXRjaC4gSWYgd2UgYXJlIGlnbm9yaW5nIHdoaXRlc3BhY2UsIHJ1biBhIGxpbmUtYnktbGluZQorCSAqIGZ1enp5IG1hdGNoaW5nLiBXZSBjb2xsZWN0IGFsbCB0aGUgbGluZSBsZW5ndGggaW5mb3JtYXRpb24gYmVjYXVzZQorCSAqIHdlIG5lZWQgaXQgdG8gYWRqdXN0IHdoaXRlc3BhY2UgaWYgd2UgbWF0Y2guCisJICovCisJaWYgKHdzX2lnbm9yZV9hY3Rpb24gPT0gaWdub3JlX3dzX2NoYW5nZSkgeworCQlzaXplX3QgaW1nb2ZmID0gMDsKKwkJc2l6ZV90IHByZW9mZiA9IDA7CisJCXNpemVfdCBwb3N0bGVuID0gcG9zdGltYWdlLT5sZW47CisJCXNpemVfdCBleHRyYV9jaGFyczsKKwkJY2hhciAqcHJlaW1hZ2VfZW9mOworCQljaGFyICpwcmVpbWFnZV9lbmQ7CisJCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZV9saW1pdDsgaSsrKSB7CisJCQlzaXplX3QgcHJlbGVuID0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCQkJc2l6ZV90IGltZ2xlbiA9IGltZy0+bGluZVt0cnlfbG5vK2ldLmxlbjsKKworCQkJaWYgKCFmdXp6eV9tYXRjaGxpbmVzKGltZy0+YnVmICsgdHJ5ICsgaW1nb2ZmLCBpbWdsZW4sCisJCQkJCSAgICAgIHByZWltYWdlLT5idWYgKyBwcmVvZmYsIHByZWxlbikpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAocHJlaW1hZ2UtPmxpbmVbaV0uZmxhZyAmIExJTkVfQ09NTU9OKQorCQkJCXBvc3RsZW4gKz0gaW1nbGVuIC0gcHJlbGVuOworCQkJaW1nb2ZmICs9IGltZ2xlbjsKKwkJCXByZW9mZiArPSBwcmVsZW47CisJCX0KKworCQkvKgorCQkgKiBPaywgdGhlIHByZWltYWdlIG1hdGNoZXMgd2l0aCB3aGl0ZXNwYWNlIGZ1enouCisJCSAqCisJCSAqIGltZ29mZiBub3cgaG9sZHMgdGhlIHRydWUgbGVuZ3RoIG9mIHRoZSB0YXJnZXQgdGhhdAorCQkgKiBtYXRjaGVzIHRoZSBwcmVpbWFnZSBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkJICoKKwkJICogQ291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwcmVpbWFnZSB0aGF0IGZhbGwKKwkJICogYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIG1ha2Ugc3VyZSB0aGF0IGFsbCBvZiB0aGVtCisJCSAqIGFyZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuIChUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZgorCQkgKiB3ZSBhcmUgcmVtb3ZpbmcgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4pCisJCSAqLworCQlidWYgPSBwcmVpbWFnZV9lb2YgPSBwcmVpbWFnZS0+YnVmICsgcHJlb2ZmOworCQlmb3IgKCA7IGkgPCBwcmVpbWFnZS0+bnI7IGkrKykKKwkJCXByZW9mZiArPSBwcmVpbWFnZS0+bGluZVtpXS5sZW47CisJCXByZWltYWdlX2VuZCA9IHByZWltYWdlLT5idWYgKyBwcmVvZmY7CisJCWZvciAoIDsgYnVmIDwgcHJlaW1hZ2VfZW5kOyBidWYrKykKKwkJCWlmICghaXNzcGFjZSgqYnVmKSkKKwkJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBVcGRhdGUgdGhlIHByZWltYWdlIGFuZCB0aGUgY29tbW9uIHBvc3RpbWFnZSBjb250ZXh0CisJCSAqIGxpbmVzIHRvIHVzZSB0aGUgc2FtZSB3aGl0ZXNwYWNlIGFzIHRoZSB0YXJnZXQuCisJCSAqIElmIHdoaXRlc3BhY2UgaXMgbWlzc2luZyBpbiB0aGUgdGFyZ2V0IChpLmUuCisJCSAqIGlmIHRoZSBwcmVpbWFnZSBleHRlbmRzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlKSwKKwkJICogdXNlIHRoZSB3aGl0ZXNwYWNlIGZyb20gdGhlIHByZWltYWdlLgorCQkgKi8KKwkJZXh0cmFfY2hhcnMgPSBwcmVpbWFnZV9lbmQgLSBwcmVpbWFnZV9lb2Y7CisJCXN0cmJ1Zl9pbml0KCZmaXhlZCwgaW1nb2ZmICsgZXh0cmFfY2hhcnMpOworCQlzdHJidWZfYWRkKCZmaXhlZCwgaW1nLT5idWYgKyB0cnksIGltZ29mZik7CisJCXN0cmJ1Zl9hZGQoJmZpeGVkLCBwcmVpbWFnZV9lb2YsIGV4dHJhX2NoYXJzKTsKKwkJZml4ZWRfYnVmID0gc3RyYnVmX2RldGFjaCgmZml4ZWQsICZmaXhlZF9sZW4pOworCQl1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHByZWltYWdlLCBwb3N0aW1hZ2UsCisJCQkJZml4ZWRfYnVmLCBmaXhlZF9sZW4sIHBvc3RsZW4pOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAod3NfZXJyb3JfYWN0aW9uICE9IGNvcnJlY3Rfd3NfZXJyb3IpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGUgaHVuayBkb2VzIG5vdCBhcHBseSBieXRlLWJ5LWJ5dGUsIGJ1dCB0aGUgaGFzaCBzYXlzCisJICogaXQgbWlnaHQgd2l0aCB3aGl0ZXNwYWNlIGZ1enouIFdlIGhhdmVuJ3QgYmVlbiBhc2tlZCB0bworCSAqIGlnbm9yZSB3aGl0ZXNwYWNlLCB3ZSB3ZXJlIGFza2VkIHRvIGNvcnJlY3Qgd2hpdGVzcGFjZQorCSAqIGVycm9ycywgc28gbGV0J3MgdHJ5IG1hdGNoaW5nIGFmdGVyIHdoaXRlc3BhY2UgY29ycmVjdGlvbi4KKwkgKgorCSAqIFRoZSBwcmVpbWFnZSBtYXkgZXh0ZW5kIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlLAorCSAqIGJ1dCBpbiB0aGlzIGxvb3Agd2Ugd2lsbCBvbmx5IGhhbmRsZSB0aGUgcGFydCBvZiB0aGUKKwkgKiBwcmVpbWFnZSB0aGF0IGZhbGxzIHdpdGhpbiB0aGUgZmlsZS4KKwkgKi8KKwlzdHJidWZfaW5pdCgmZml4ZWQsIHByZWltYWdlLT5sZW4gKyAxKTsKKwlvcmlnID0gcHJlaW1hZ2UtPmJ1ZjsKKwl0YXJnZXQgPSBpbWctPmJ1ZiArIHRyeTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJlaW1hZ2VfbGltaXQ7IGkrKykgeworCQlzaXplX3Qgb2xkbGVuID0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCQlzaXplX3QgdGd0bGVuID0gaW1nLT5saW5lW3RyeV9sbm8gKyBpXS5sZW47CisJCXNpemVfdCBmaXhzdGFydCA9IGZpeGVkLmxlbjsKKwkJc3RydWN0IHN0cmJ1ZiB0Z3RmaXg7CisJCWludCBtYXRjaDsKKworCQkvKiBUcnkgZml4aW5nIHRoZSBsaW5lIGluIHRoZSBwcmVpbWFnZSAqLworCQl3c19maXhfY29weSgmZml4ZWQsIG9yaWcsIG9sZGxlbiwgd3NfcnVsZSwgTlVMTCk7CisKKwkJLyogVHJ5IGZpeGluZyB0aGUgbGluZSBpbiB0aGUgdGFyZ2V0ICovCisJCXN0cmJ1Zl9pbml0KCZ0Z3RmaXgsIHRndGxlbik7CisJCXdzX2ZpeF9jb3B5KCZ0Z3RmaXgsIHRhcmdldCwgdGd0bGVuLCB3c19ydWxlLCBOVUxMKTsKKworCQkvKgorCQkgKiBJZiB0aGV5IG1hdGNoLCBlaXRoZXIgdGhlIHByZWltYWdlIHdhcyBiYXNlZCBvbgorCQkgKiBhIHZlcnNpb24gYmVmb3JlIG91ciB0cmVlIGZpeGVkIHdoaXRlc3BhY2UgYnJlYWthZ2UsCisJCSAqIG9yIHdlIGFyZSBsYWNraW5nIGEgd2hpdGVzcGFjZS1maXggcGF0Y2ggdGhlIHRyZWUKKwkJICogdGhlIHByZWltYWdlIHdhcyBiYXNlZCBvbiBhbHJlYWR5IGhhZCAoaS5lLiB0YXJnZXQKKwkJICogaGFzIHdoaXRlc3BhY2UgYnJlYWthZ2UsIHRoZSBwcmVpbWFnZSBkb2Vzbid0KS4KKwkJICogSW4gZWl0aGVyIGNhc2UsIHdlIGFyZSBmaXhpbmcgdGhlIHdoaXRlc3BhY2UgYnJlYWthZ2VzCisJCSAqIHNvIHdlIG1pZ2h0IGFzIHdlbGwgdGFrZSB0aGUgZml4IHRvZ2V0aGVyIHdpdGggdGhlaXIKKwkJICogcmVhbCBjaGFuZ2UuCisJCSAqLworCQltYXRjaCA9ICh0Z3RmaXgubGVuID09IGZpeGVkLmxlbiAtIGZpeHN0YXJ0ICYmCisJCQkgIW1lbWNtcCh0Z3RmaXguYnVmLCBmaXhlZC5idWYgKyBmaXhzdGFydCwKKwkJCQkJICAgICBmaXhlZC5sZW4gLSBmaXhzdGFydCkpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZ0Z3RmaXgpOworCQlpZiAoIW1hdGNoKQorCQkJZ290byB1bm1hdGNoX2V4aXQ7CisKKwkJb3JpZyArPSBvbGRsZW47CisJCXRhcmdldCArPSB0Z3RsZW47CisJfQorCisKKwkvKgorCSAqIE5vdyBoYW5kbGUgdGhlIGxpbmVzIGluIHRoZSBwcmVpbWFnZSB0aGF0IGZhbGxzIGJleW9uZCB0aGUKKwkgKiBlbmQgb2YgdGhlIGZpbGUgKGlmIGFueSkuIFRoZXkgd2lsbCBvbmx5IG1hdGNoIGlmIHRoZXkgYXJlCisJICogZW1wdHkgb3Igb25seSBjb250YWluIHdoaXRlc3BhY2UgKGlmIFdTX0JMQU5LX0FUX0VPTCBpcworCSAqIGZhbHNlKS4KKwkgKi8KKwlmb3IgKCA7IGkgPCBwcmVpbWFnZS0+bnI7IGkrKykgeworCQlzaXplX3QgZml4c3RhcnQgPSBmaXhlZC5sZW47IC8qIHN0YXJ0IG9mIHRoZSBmaXhlZCBwcmVpbWFnZSAqLworCQlzaXplX3Qgb2xkbGVuID0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCQlpbnQgajsKKworCQkvKiBUcnkgZml4aW5nIHRoZSBsaW5lIGluIHRoZSBwcmVpbWFnZSAqLworCQl3c19maXhfY29weSgmZml4ZWQsIG9yaWcsIG9sZGxlbiwgd3NfcnVsZSwgTlVMTCk7CisKKwkJZm9yIChqID0gZml4c3RhcnQ7IGogPCBmaXhlZC5sZW47IGorKykKKwkJCWlmICghaXNzcGFjZShmaXhlZC5idWZbal0pKQorCQkJCWdvdG8gdW5tYXRjaF9leGl0OworCisJCW9yaWcgKz0gb2xkbGVuOworCX0KKworCS8qCisJICogWWVzLCB0aGUgcHJlaW1hZ2UgaXMgYmFzZWQgb24gYW4gb2xkZXIgdmVyc2lvbiB0aGF0IHN0aWxsCisJICogaGFzIHdoaXRlc3BhY2UgYnJlYWthZ2VzIHVuZml4ZWQsIGFuZCBmaXhpbmcgdGhlbSBtYWtlcyB0aGUKKwkgKiBodW5rIG1hdGNoLiAgVXBkYXRlIHRoZSBjb250ZXh0IGxpbmVzIGluIHRoZSBwb3N0aW1hZ2UuCisJICovCisJZml4ZWRfYnVmID0gc3RyYnVmX2RldGFjaCgmZml4ZWQsICZmaXhlZF9sZW4pOworCXVwZGF0ZV9wcmVfcG9zdF9pbWFnZXMocHJlaW1hZ2UsIHBvc3RpbWFnZSwKKwkJCSAgICAgICBmaXhlZF9idWYsIGZpeGVkX2xlbiwgMCk7CisJcmV0dXJuIDE7CisKKyB1bm1hdGNoX2V4aXQ6CisJc3RyYnVmX3JlbGVhc2UoJmZpeGVkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaW5kX3BvcyhzdHJ1Y3QgaW1hZ2UgKmltZywKKwkJICAgIHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCisJCSAgICBzdHJ1Y3QgaW1hZ2UgKnBvc3RpbWFnZSwKKwkJICAgIGludCBsaW5lLAorCQkgICAgdW5zaWduZWQgd3NfcnVsZSwKKwkJICAgIGludCBtYXRjaF9iZWdpbm5pbmcsIGludCBtYXRjaF9lbmQpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBiYWNrd2FyZHMsIGZvcndhcmRzLCB0cnk7CisJaW50IGJhY2t3YXJkc19sbm8sIGZvcndhcmRzX2xubywgdHJ5X2xubzsKKworCS8qCisJICogSWYgbWF0Y2hfYmVnaW5uaW5nIG9yIG1hdGNoX2VuZCBpcyBzcGVjaWZpZWQsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgc3RhcnRpbmcgZnJvbSBhIHdyb25nIGxpbmUgdGhhdCB3aWxsIG5ldmVyIG1hdGNoIGFuZAorCSAqIHdhbmRlciBhcm91bmQgYW5kIHdhaXQgZm9yIGEgbWF0Y2ggYXQgdGhlIHNwZWNpZmllZCBlbmQuCisJICovCisJaWYgKG1hdGNoX2JlZ2lubmluZykKKwkJbGluZSA9IDA7CisJZWxzZSBpZiAobWF0Y2hfZW5kKQorCQlsaW5lID0gaW1nLT5uciAtIHByZWltYWdlLT5ucjsKKworCS8qCisJICogQmVjYXVzZSB0aGUgY29tcGFyaXNvbiBpcyB1bnNpZ25lZCwgdGhlIGZvbGxvd2luZyB0ZXN0CisJICogd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBhIG5lZ2F0aXZlIGxpbmUgbnVtYmVyIHRoYXQgY2FuCisJICogcmVzdWx0IHdoZW4gbWF0Y2hfZW5kIGFuZCBwcmVpbWFnZSBpcyBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgorCSAqLworCWlmICgoc2l6ZV90KSBsaW5lID4gaW1nLT5ucikKKwkJbGluZSA9IGltZy0+bnI7CisKKwl0cnkgPSAwOworCWZvciAoaSA9IDA7IGkgPCBsaW5lOyBpKyspCisJCXRyeSArPSBpbWctPmxpbmVbaV0ubGVuOworCisJLyoKKwkgKiBUaGVyZSdzIHByb2JhYmx5IHNvbWUgc21hcnQgd2F5IHRvIGRvIHRoaXMsIGJ1dCBJJ2xsIGxlYXZlCisJICogdGhhdCB0byB0aGUgc21hcnQgYW5kIGJlYXV0aWZ1bCBwZW9wbGUuIEknbSBzaW1wbGUgYW5kIHN0dXBpZC4KKwkgKi8KKwliYWNrd2FyZHMgPSB0cnk7CisJYmFja3dhcmRzX2xubyA9IGxpbmU7CisJZm9yd2FyZHMgPSB0cnk7CisJZm9yd2FyZHNfbG5vID0gbGluZTsKKwl0cnlfbG5vID0gbGluZTsKKworCWZvciAoaSA9IDA7IDsgaSsrKSB7CisJCWlmIChtYXRjaF9mcmFnbWVudChpbWcsIHByZWltYWdlLCBwb3N0aW1hZ2UsCisJCQkJICAgdHJ5LCB0cnlfbG5vLCB3c19ydWxlLAorCQkJCSAgIG1hdGNoX2JlZ2lubmluZywgbWF0Y2hfZW5kKSkKKwkJCXJldHVybiB0cnlfbG5vOworCisJYWdhaW46CisJCWlmIChiYWNrd2FyZHNfbG5vID09IDAgJiYgZm9yd2FyZHNfbG5vID09IGltZy0+bnIpCisJCQlicmVhazsKKworCQlpZiAoaSAmIDEpIHsKKwkJCWlmIChiYWNrd2FyZHNfbG5vID09IDApIHsKKwkJCQlpKys7CisJCQkJZ290byBhZ2FpbjsKKwkJCX0KKwkJCWJhY2t3YXJkc19sbm8tLTsKKwkJCWJhY2t3YXJkcyAtPSBpbWctPmxpbmVbYmFja3dhcmRzX2xub10ubGVuOworCQkJdHJ5ID0gYmFja3dhcmRzOworCQkJdHJ5X2xubyA9IGJhY2t3YXJkc19sbm87CisJCX0gZWxzZSB7CisJCQlpZiAoZm9yd2FyZHNfbG5vID09IGltZy0+bnIpIHsKKwkJCQlpKys7CisJCQkJZ290byBhZ2FpbjsKKwkJCX0KKwkJCWZvcndhcmRzICs9IGltZy0+bGluZVtmb3J3YXJkc19sbm9dLmxlbjsKKwkJCWZvcndhcmRzX2xubysrOworCQkJdHJ5ID0gZm9yd2FyZHM7CisJCQl0cnlfbG5vID0gZm9yd2FyZHNfbG5vOworCQl9CisKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfZmlyc3RfbGluZShzdHJ1Y3QgaW1hZ2UgKmltZykKK3sKKwlpbWctPmJ1ZiArPSBpbWctPmxpbmVbMF0ubGVuOworCWltZy0+bGVuIC09IGltZy0+bGluZVswXS5sZW47CisJaW1nLT5saW5lKys7CisJaW1nLT5uci0tOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfbGFzdF9saW5lKHN0cnVjdCBpbWFnZSAqaW1nKQoreworCWltZy0+bGVuIC09IGltZy0+bGluZVstLWltZy0+bnJdLmxlbjsKK30KKworLyoKKyAqIFRoZSBjaGFuZ2UgZnJvbSAicHJlaW1hZ2UiIGFuZCAicG9zdGltYWdlIiBoYXMgYmVlbiBmb3VuZCB0bworICogYXBwbHkgYXQgYXBwbGllZF9wb3MgKGNvdW50cyBpbiBsaW5lIG51bWJlcnMpIGluICJpbWciLgorICogVXBkYXRlICJpbWciIHRvIHJlbW92ZSAicHJlaW1hZ2UiIGFuZCByZXBsYWNlIGl0IHdpdGggInBvc3RpbWFnZSIuCisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9pbWFnZShzdHJ1Y3QgaW1hZ2UgKmltZywKKwkJCSBpbnQgYXBwbGllZF9wb3MsCisJCQkgc3RydWN0IGltYWdlICpwcmVpbWFnZSwKKwkJCSBzdHJ1Y3QgaW1hZ2UgKnBvc3RpbWFnZSkKK3sKKwkvKgorCSAqIHJlbW92ZSB0aGUgY29weSBvZiBwcmVpbWFnZSBhdCBvZmZzZXQgaW4gaW1nCisJICogYW5kIHJlcGxhY2UgaXQgd2l0aCBwb3N0aW1hZ2UKKwkgKi8KKwlpbnQgaSwgbnI7CisJc2l6ZV90IHJlbW92ZV9jb3VudCwgaW5zZXJ0X2NvdW50LCBhcHBsaWVkX2F0ID0gMDsKKwljaGFyICpyZXN1bHQ7CisJaW50IHByZWltYWdlX2xpbWl0OworCisJLyoKKwkgKiBJZiB3ZSBhcmUgcmVtb3ZpbmcgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiBpbWcsCisJICogdGhlIHByZWltYWdlIG1heSBleHRlbmQgYmV5b25kIHRoZSBlbmQuCisJICogSWYgdGhhdCBpcyB0aGUgY2FzZSwgd2UgbXVzdCBiZSBjYXJlZnVsIG9ubHkgdG8KKwkgKiByZW1vdmUgdGhlIHBhcnQgb2YgdGhlIHByZWltYWdlIHRoYXQgZmFsbHMgd2l0aGluCisJICogdGhlIGJvdW5kYXJpZXMgb2YgaW1nLiBJbml0aWFsaXplIHByZWltYWdlX2xpbWl0CisJICogdG8gdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgcHJlaW1hZ2UgdGhhdCBmYWxscworCSAqIHdpdGhpbiB0aGUgYm91bmRhcmllcy4KKwkgKi8KKwlwcmVpbWFnZV9saW1pdCA9IHByZWltYWdlLT5ucjsKKwlpZiAocHJlaW1hZ2VfbGltaXQgPiBpbWctPm5yIC0gYXBwbGllZF9wb3MpCisJCXByZWltYWdlX2xpbWl0ID0gaW1nLT5uciAtIGFwcGxpZWRfcG9zOworCisJZm9yIChpID0gMDsgaSA8IGFwcGxpZWRfcG9zOyBpKyspCisJCWFwcGxpZWRfYXQgKz0gaW1nLT5saW5lW2ldLmxlbjsKKworCXJlbW92ZV9jb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHByZWltYWdlX2xpbWl0OyBpKyspCisJCXJlbW92ZV9jb3VudCArPSBpbWctPmxpbmVbYXBwbGllZF9wb3MgKyBpXS5sZW47CisJaW5zZXJ0X2NvdW50ID0gcG9zdGltYWdlLT5sZW47CisKKwkvKiBBZGp1c3QgdGhlIGNvbnRlbnRzICovCisJcmVzdWx0ID0geG1hbGxvYyhpbWctPmxlbiArIGluc2VydF9jb3VudCAtIHJlbW92ZV9jb3VudCArIDEpOworCW1lbWNweShyZXN1bHQsIGltZy0+YnVmLCBhcHBsaWVkX2F0KTsKKwltZW1jcHkocmVzdWx0ICsgYXBwbGllZF9hdCwgcG9zdGltYWdlLT5idWYsIHBvc3RpbWFnZS0+bGVuKTsKKwltZW1jcHkocmVzdWx0ICsgYXBwbGllZF9hdCArIHBvc3RpbWFnZS0+bGVuLAorCSAgICAgICBpbWctPmJ1ZiArIChhcHBsaWVkX2F0ICsgcmVtb3ZlX2NvdW50KSwKKwkgICAgICAgaW1nLT5sZW4gLSAoYXBwbGllZF9hdCArIHJlbW92ZV9jb3VudCkpOworCWZyZWUoaW1nLT5idWYpOworCWltZy0+YnVmID0gcmVzdWx0OworCWltZy0+bGVuICs9IGluc2VydF9jb3VudCAtIHJlbW92ZV9jb3VudDsKKwlyZXN1bHRbaW1nLT5sZW5dID0gJ1wwJzsKKworCS8qIEFkanVzdCB0aGUgbGluZSB0YWJsZSAqLworCW5yID0gaW1nLT5uciArIHBvc3RpbWFnZS0+bnIgLSBwcmVpbWFnZV9saW1pdDsKKwlpZiAocHJlaW1hZ2VfbGltaXQgPCBwb3N0aW1hZ2UtPm5yKSB7CisJCS8qCisJCSAqIE5PVEU6IHRoaXMga25vd3MgdGhhdCB3ZSBuZXZlciBjYWxsIHJlbW92ZV9maXJzdF9saW5lKCkKKwkJICogb24gYW55dGhpbmcgb3RoZXIgdGhhbiBwcmUvcG9zdCBpbWFnZS4KKwkJICovCisJCWltZy0+bGluZSA9IHhyZWFsbG9jKGltZy0+bGluZSwgbnIgKiBzaXplb2YoKmltZy0+bGluZSkpOworCQlpbWctPmxpbmVfYWxsb2NhdGVkID0gaW1nLT5saW5lOworCX0KKwlpZiAocHJlaW1hZ2VfbGltaXQgIT0gcG9zdGltYWdlLT5ucikKKwkJbWVtbW92ZShpbWctPmxpbmUgKyBhcHBsaWVkX3BvcyArIHBvc3RpbWFnZS0+bnIsCisJCQlpbWctPmxpbmUgKyBhcHBsaWVkX3BvcyArIHByZWltYWdlX2xpbWl0LAorCQkJKGltZy0+bnIgLSAoYXBwbGllZF9wb3MgKyBwcmVpbWFnZV9saW1pdCkpICoKKwkJCXNpemVvZigqaW1nLT5saW5lKSk7CisJbWVtY3B5KGltZy0+bGluZSArIGFwcGxpZWRfcG9zLAorCSAgICAgICBwb3N0aW1hZ2UtPmxpbmUsCisJICAgICAgIHBvc3RpbWFnZS0+bnIgKiBzaXplb2YoKmltZy0+bGluZSkpOworCWlmICghYWxsb3dfb3ZlcmxhcCkKKwkJZm9yIChpID0gMDsgaSA8IHBvc3RpbWFnZS0+bnI7IGkrKykKKwkJCWltZy0+bGluZVthcHBsaWVkX3BvcyArIGldLmZsYWcgfD0gTElORV9QQVRDSEVEOworCWltZy0+bnIgPSBucjsKK30KKworLyoKKyAqIFVzZSB0aGUgcGF0Y2gtaHVuayB0ZXh0IGluICJmcmFnIiB0byBwcmVwYXJlIHR3byBpbWFnZXMgKHByZWltYWdlIGFuZAorICogcG9zdGltYWdlKSBmb3IgdGhlIGh1bmsuICBGaW5kIGxpbmVzIHRoYXQgbWF0Y2ggInByZWltYWdlIiBpbiAiaW1nIiBhbmQKKyAqIHJlcGxhY2UgdGhlIHBhcnQgb2YgImltZyIgd2l0aCAicG9zdGltYWdlIiB0ZXh0LgorICovCitzdGF0aWMgaW50IGFwcGx5X29uZV9mcmFnbWVudChzdHJ1Y3QgaW1hZ2UgKmltZywgc3RydWN0IGZyYWdtZW50ICpmcmFnLAorCQkJICAgICAgaW50IGluYWNjdXJhdGVfZW9mLCB1bnNpZ25lZCB3c19ydWxlLAorCQkJICAgICAgaW50IG50aF9mcmFnbWVudCkKK3sKKwlpbnQgbWF0Y2hfYmVnaW5uaW5nLCBtYXRjaF9lbmQ7CisJY29uc3QgY2hhciAqcGF0Y2ggPSBmcmFnLT5wYXRjaDsKKwlpbnQgc2l6ZSA9IGZyYWctPnNpemU7CisJY2hhciAqb2xkLCAqb2xkbGluZXM7CisJc3RydWN0IHN0cmJ1ZiBuZXdsaW5lczsKKwlpbnQgbmV3X2JsYW5rX2xpbmVzX2F0X2VuZCA9IDA7CisJaW50IGZvdW5kX25ld19ibGFua19saW5lc19hdF9lbmQgPSAwOworCWludCBodW5rX2xpbmVuciA9IGZyYWctPmxpbmVucjsKKwl1bnNpZ25lZCBsb25nIGxlYWRpbmcsIHRyYWlsaW5nOworCWludCBwb3MsIGFwcGxpZWRfcG9zOworCXN0cnVjdCBpbWFnZSBwcmVpbWFnZTsKKwlzdHJ1Y3QgaW1hZ2UgcG9zdGltYWdlOworCisJbWVtc2V0KCZwcmVpbWFnZSwgMCwgc2l6ZW9mKHByZWltYWdlKSk7CisJbWVtc2V0KCZwb3N0aW1hZ2UsIDAsIHNpemVvZihwb3N0aW1hZ2UpKTsKKwlvbGRsaW5lcyA9IHhtYWxsb2Moc2l6ZSk7CisJc3RyYnVmX2luaXQoJm5ld2xpbmVzLCBzaXplKTsKKworCW9sZCA9IG9sZGxpbmVzOworCXdoaWxlIChzaXplID4gMCkgeworCQljaGFyIGZpcnN0OworCQlpbnQgbGVuID0gbGluZWxlbihwYXRjaCwgc2l6ZSk7CisJCWludCBwbGVuOworCQlpbnQgYWRkZWRfYmxhbmtfbGluZSA9IDA7CisJCWludCBpc19ibGFua19jb250ZXh0ID0gMDsKKwkJc2l6ZV90IHN0YXJ0OworCisJCWlmICghbGVuKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogInBsZW4iIGlzIGhvdyBtdWNoIG9mIHRoZSBsaW5lIHdlIHNob3VsZCB1c2UgZm9yCisJCSAqIHRoZSBhY3R1YWwgcGF0Y2ggZGF0YS4gTm9ybWFsbHkgd2UganVzdCByZW1vdmUgdGhlCisJCSAqIGZpcnN0IGNoYXJhY3RlciBvbiB0aGUgbGluZSwgYnV0IGlmIHRoZSBsaW5lIGlzCisJCSAqIGZvbGxvd2VkIGJ5ICJcIE5vIG5ld2xpbmUiLCB0aGVuIHdlIGFsc28gcmVtb3ZlIHRoZQorCQkgKiBsYXN0IG9uZSAod2hpY2ggaXMgdGhlIG5ld2xpbmUsIG9mIGNvdXJzZSkuCisJCSAqLworCQlwbGVuID0gbGVuIC0gMTsKKwkJaWYgKGxlbiA8IHNpemUgJiYgcGF0Y2hbbGVuXSA9PSAnXFwnKQorCQkJcGxlbi0tOworCQlmaXJzdCA9ICpwYXRjaDsKKwkJaWYgKGFwcGx5X2luX3JldmVyc2UpIHsKKwkJCWlmIChmaXJzdCA9PSAnLScpCisJCQkJZmlyc3QgPSAnKyc7CisJCQllbHNlIGlmIChmaXJzdCA9PSAnKycpCisJCQkJZmlyc3QgPSAnLSc7CisJCX0KKworCQlzd2l0Y2ggKGZpcnN0KSB7CisJCWNhc2UgJ1xuJzoKKwkJCS8qIE5ld2VyIEdOVSBkaWZmLCBlbXB0eSBjb250ZXh0IGxpbmUgKi8KKwkJCWlmIChwbGVuIDwgMCkKKwkJCQkvKiAuLi4gZm9sbG93ZWQgYnkgJ1xObyBuZXdsaW5lJzsgbm90aGluZyAqLworCQkJCWJyZWFrOworCQkJKm9sZCsrID0gJ1xuJzsKKwkJCXN0cmJ1Zl9hZGRjaCgmbmV3bGluZXMsICdcbicpOworCQkJYWRkX2xpbmVfaW5mbygmcHJlaW1hZ2UsICJcbiIsIDEsIExJTkVfQ09NTU9OKTsKKwkJCWFkZF9saW5lX2luZm8oJnBvc3RpbWFnZSwgIlxuIiwgMSwgTElORV9DT01NT04pOworCQkJaXNfYmxhbmtfY29udGV4dCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJCQlpZiAocGxlbiAmJiAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgJiYKKwkJCSAgICB3c19ibGFua19saW5lKHBhdGNoICsgMSwgcGxlbiwgd3NfcnVsZSkpCisJCQkJaXNfYmxhbmtfY29udGV4dCA9IDE7CisJCWNhc2UgJy0nOgorCQkJbWVtY3B5KG9sZCwgcGF0Y2ggKyAxLCBwbGVuKTsKKwkJCWFkZF9saW5lX2luZm8oJnByZWltYWdlLCBvbGQsIHBsZW4sCisJCQkJICAgICAgKGZpcnN0ID09ICcgJyA/IExJTkVfQ09NTU9OIDogMCkpOworCQkJb2xkICs9IHBsZW47CisJCQlpZiAoZmlyc3QgPT0gJy0nKQorCQkJCWJyZWFrOworCQkvKiBGYWxsLXRocm91Z2ggZm9yICcgJyAqLworCQljYXNlICcrJzoKKwkJCS8qIC0tbm8tYWRkIGRvZXMgbm90IGFkZCBuZXcgbGluZXMgKi8KKwkJCWlmIChmaXJzdCA9PSAnKycgJiYgbm9fYWRkKQorCQkJCWJyZWFrOworCisJCQlzdGFydCA9IG5ld2xpbmVzLmxlbjsKKwkJCWlmIChmaXJzdCAhPSAnKycgfHwKKwkJCSAgICAhd2hpdGVzcGFjZV9lcnJvciB8fAorCQkJICAgIHdzX2Vycm9yX2FjdGlvbiAhPSBjb3JyZWN0X3dzX2Vycm9yKSB7CisJCQkJc3RyYnVmX2FkZCgmbmV3bGluZXMsIHBhdGNoICsgMSwgcGxlbik7CisJCQl9CisJCQllbHNlIHsKKwkJCQl3c19maXhfY29weSgmbmV3bGluZXMsIHBhdGNoICsgMSwgcGxlbiwgd3NfcnVsZSwgJmFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzKTsKKwkJCX0KKwkJCWFkZF9saW5lX2luZm8oJnBvc3RpbWFnZSwgbmV3bGluZXMuYnVmICsgc3RhcnQsIG5ld2xpbmVzLmxlbiAtIHN0YXJ0LAorCQkJCSAgICAgIChmaXJzdCA9PSAnKycgPyAwIDogTElORV9DT01NT04pKTsKKwkJCWlmIChmaXJzdCA9PSAnKycgJiYKKwkJCSAgICAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgJiYKKwkJCSAgICB3c19ibGFua19saW5lKHBhdGNoICsgMSwgcGxlbiwgd3NfcnVsZSkpCisJCQkJYWRkZWRfYmxhbmtfbGluZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnQCc6IGNhc2UgJ1xcJzoKKwkJCS8qIElnbm9yZSBpdCwgd2UgYWxyZWFkeSBoYW5kbGVkIGl0ICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChhcHBseV92ZXJib3NlbHkpCisJCQkJZXJyb3IoXygiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIiksIGZpcnN0KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoYWRkZWRfYmxhbmtfbGluZSkgeworCQkJaWYgKCFuZXdfYmxhbmtfbGluZXNfYXRfZW5kKQorCQkJCWZvdW5kX25ld19ibGFua19saW5lc19hdF9lbmQgPSBodW5rX2xpbmVucjsKKwkJCW5ld19ibGFua19saW5lc19hdF9lbmQrKzsKKwkJfQorCQllbHNlIGlmIChpc19ibGFua19jb250ZXh0KQorCQkJOworCQllbHNlCisJCQluZXdfYmxhbmtfbGluZXNfYXRfZW5kID0gMDsKKwkJcGF0Y2ggKz0gbGVuOworCQlzaXplIC09IGxlbjsKKwkJaHVua19saW5lbnIrKzsKKwl9CisJaWYgKGluYWNjdXJhdGVfZW9mICYmCisJICAgIG9sZCA+IG9sZGxpbmVzICYmIG9sZFstMV0gPT0gJ1xuJyAmJgorCSAgICBuZXdsaW5lcy5sZW4gPiAwICYmIG5ld2xpbmVzLmJ1ZltuZXdsaW5lcy5sZW4gLSAxXSA9PSAnXG4nKSB7CisJCW9sZC0tOworCQlzdHJidWZfc2V0bGVuKCZuZXdsaW5lcywgbmV3bGluZXMubGVuIC0gMSk7CisJfQorCisJbGVhZGluZyA9IGZyYWctPmxlYWRpbmc7CisJdHJhaWxpbmcgPSBmcmFnLT50cmFpbGluZzsKKworCS8qCisJICogQSBodW5rIHRvIGNoYW5nZSBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIHdvdWxkIGJlZ2luIHdpdGgKKwkgKiBAQCAtMSxMICtOLE0gQEAKKwkgKiBidXQgd2UgbmVlZCB0byBiZSBjYXJlZnVsLiAgLVUwIHRoYXQgaW5zZXJ0cyBiZWZvcmUgdGhlIHNlY29uZAorCSAqIGxpbmUgYWxzbyBoYXMgdGhpcyBwYXR0ZXJuLgorCSAqCisJICogQW5kIGEgaHVuayB0byBhZGQgdG8gYW4gZW1wdHkgZmlsZSB3b3VsZCBiZWdpbiB3aXRoCisJICogQEAgLTAsMCArTixNIEBACisJICoKKwkgKiBJbiBvdGhlciB3b3JkcywgYSBodW5rIHRoYXQgaXMgKGZyYWctPm9sZHBvcyA8PSAxKSB3aXRoIG9yCisJICogd2l0aG91dCBsZWFkaW5nIGNvbnRleHQgbXVzdCBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nLgorCSAqLworCW1hdGNoX2JlZ2lubmluZyA9ICghZnJhZy0+b2xkcG9zIHx8CisJCQkgICAoZnJhZy0+b2xkcG9zID09IDEgJiYgIXVuaWRpZmZfemVybykpOworCisJLyoKKwkgKiBBIGh1bmsgd2l0aG91dCB0cmFpbGluZyBsaW5lcyBtdXN0IG1hdGNoIGF0IHRoZSBlbmQuCisJICogSG93ZXZlciwgd2Ugc2ltcGx5IGNhbm5vdCB0ZWxsIGlmIGEgaHVuayBtdXN0IG1hdGNoIGVuZAorCSAqIGZyb20gdGhlIGxhY2sgb2YgdHJhaWxpbmcgbGluZXMgaWYgdGhlIHBhdGNoIHdhcyBnZW5lcmF0ZWQKKwkgKiB3aXRoIHVuaWRpZmYgd2l0aG91dCBhbnkgY29udGV4dC4KKwkgKi8KKwltYXRjaF9lbmQgPSAhdW5pZGlmZl96ZXJvICYmICF0cmFpbGluZzsKKworCXBvcyA9IGZyYWctPm5ld3BvcyA/IChmcmFnLT5uZXdwb3MgLSAxKSA6IDA7CisJcHJlaW1hZ2UuYnVmID0gb2xkbGluZXM7CisJcHJlaW1hZ2UubGVuID0gb2xkIC0gb2xkbGluZXM7CisJcG9zdGltYWdlLmJ1ZiA9IG5ld2xpbmVzLmJ1ZjsKKwlwb3N0aW1hZ2UubGVuID0gbmV3bGluZXMubGVuOworCXByZWltYWdlLmxpbmUgPSBwcmVpbWFnZS5saW5lX2FsbG9jYXRlZDsKKwlwb3N0aW1hZ2UubGluZSA9IHBvc3RpbWFnZS5saW5lX2FsbG9jYXRlZDsKKworCWZvciAoOzspIHsKKworCQlhcHBsaWVkX3BvcyA9IGZpbmRfcG9zKGltZywgJnByZWltYWdlLCAmcG9zdGltYWdlLCBwb3MsCisJCQkJICAgICAgIHdzX3J1bGUsIG1hdGNoX2JlZ2lubmluZywgbWF0Y2hfZW5kKTsKKworCQlpZiAoYXBwbGllZF9wb3MgPj0gMCkKKwkJCWJyZWFrOworCisJCS8qIEFtIEkgYXQgbXkgY29udGV4dCBsaW1pdHM/ICovCisJCWlmICgobGVhZGluZyA8PSBwX2NvbnRleHQpICYmICh0cmFpbGluZyA8PSBwX2NvbnRleHQpKQorCQkJYnJlYWs7CisJCWlmIChtYXRjaF9iZWdpbm5pbmcgfHwgbWF0Y2hfZW5kKSB7CisJCQltYXRjaF9iZWdpbm5pbmcgPSBtYXRjaF9lbmQgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBSZWR1Y2UgdGhlIG51bWJlciBvZiBjb250ZXh0IGxpbmVzOyByZWR1Y2UgYm90aAorCQkgKiBsZWFkaW5nIGFuZCB0cmFpbGluZyBpZiB0aGV5IGFyZSBlcXVhbCBvdGhlcndpc2UKKwkJICoganVzdCByZWR1Y2UgdGhlIGxhcmdlciBjb250ZXh0LgorCQkgKi8KKwkJaWYgKGxlYWRpbmcgPj0gdHJhaWxpbmcpIHsKKwkJCXJlbW92ZV9maXJzdF9saW5lKCZwcmVpbWFnZSk7CisJCQlyZW1vdmVfZmlyc3RfbGluZSgmcG9zdGltYWdlKTsKKwkJCXBvcy0tOworCQkJbGVhZGluZy0tOworCQl9CisJCWlmICh0cmFpbGluZyA+IGxlYWRpbmcpIHsKKwkJCXJlbW92ZV9sYXN0X2xpbmUoJnByZWltYWdlKTsKKwkJCXJlbW92ZV9sYXN0X2xpbmUoJnBvc3RpbWFnZSk7CisJCQl0cmFpbGluZy0tOworCQl9CisJfQorCisJaWYgKGFwcGxpZWRfcG9zID49IDApIHsKKwkJaWYgKG5ld19ibGFua19saW5lc19hdF9lbmQgJiYKKwkJICAgIHByZWltYWdlLm5yICsgYXBwbGllZF9wb3MgPj0gaW1nLT5uciAmJgorCQkgICAgKHdzX3J1bGUgJiBXU19CTEFOS19BVF9FT0YpICYmCisJCSAgICB3c19lcnJvcl9hY3Rpb24gIT0gbm93YXJuX3dzX2Vycm9yKSB7CisJCQlyZWNvcmRfd3NfZXJyb3IoV1NfQkxBTktfQVRfRU9GLCAiKyIsIDEsCisJCQkJCWZvdW5kX25ld19ibGFua19saW5lc19hdF9lbmQpOworCQkJaWYgKHdzX2Vycm9yX2FjdGlvbiA9PSBjb3JyZWN0X3dzX2Vycm9yKSB7CisJCQkJd2hpbGUgKG5ld19ibGFua19saW5lc19hdF9lbmQtLSkKKwkJCQkJcmVtb3ZlX2xhc3RfbGluZSgmcG9zdGltYWdlKTsKKwkJCX0KKwkJCS8qCisJCQkgKiBXZSB3b3VsZCB3YW50IHRvIHByZXZlbnQgd3JpdGVfb3V0X3Jlc3VsdHMoKQorCQkJICogZnJvbSB0YWtpbmcgcGxhY2UgaW4gYXBwbHlfcGF0Y2goKSB0aGF0IGZvbGxvd3MKKwkJCSAqIHRoZSBjYWxsY2hhaW4gbGVkIHVzIGhlcmUsIHdoaWNoIGlzOgorCQkJICogYXBwbHlfcGF0Y2gtPmNoZWNrX3BhdGNoX2xpc3QtPmNoZWNrX3BhdGNoLT4KKwkJCSAqIGFwcGx5X2RhdGEtPmFwcGx5X2ZyYWdtZW50cy0+YXBwbHlfb25lX2ZyYWdtZW50CisJCQkgKi8KKwkJCWlmICh3c19lcnJvcl9hY3Rpb24gPT0gZGllX29uX3dzX2Vycm9yKQorCQkJCWFwcGx5ID0gMDsKKwkJfQorCisJCWlmIChhcHBseV92ZXJib3NlbHkgJiYgYXBwbGllZF9wb3MgIT0gcG9zKSB7CisJCQlpbnQgb2Zmc2V0ID0gYXBwbGllZF9wb3MgLSBwb3M7CisJCQlpZiAoYXBwbHlfaW5fcmV2ZXJzZSkKKwkJCQlvZmZzZXQgPSAwIC0gb2Zmc2V0OworCQkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkJICAgUV8oIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIsCisJCQkJICAgICAgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iLAorCQkJCSAgICAgIG9mZnNldCksCisJCQkJICAgbnRoX2ZyYWdtZW50LCBhcHBsaWVkX3BvcyArIDEsIG9mZnNldCk7CisJCX0KKworCQkvKgorCQkgKiBXYXJuIGlmIGl0IHdhcyBuZWNlc3NhcnkgdG8gcmVkdWNlIHRoZSBudW1iZXIKKwkJICogb2YgY29udGV4dCBsaW5lcy4KKwkJICovCisJCWlmICgobGVhZGluZyAhPSBmcmFnLT5sZWFkaW5nKSB8fAorCQkgICAgKHRyYWlsaW5nICE9IGZyYWctPnRyYWlsaW5nKSkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIgorCQkJCQkgICAgICIgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiKSwKKwkJCQkgICBsZWFkaW5nLCB0cmFpbGluZywgYXBwbGllZF9wb3MrMSk7CisJCXVwZGF0ZV9pbWFnZShpbWcsIGFwcGxpZWRfcG9zLCAmcHJlaW1hZ2UsICZwb3N0aW1hZ2UpOworCX0gZWxzZSB7CisJCWlmIChhcHBseV92ZXJib3NlbHkpCisJCQllcnJvcihfKCJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuJS4qcyIpLAorCQkJICAgICAgKGludCkob2xkIC0gb2xkbGluZXMpLCBvbGRsaW5lcyk7CisJfQorCisJZnJlZShvbGRsaW5lcyk7CisJc3RyYnVmX3JlbGVhc2UoJm5ld2xpbmVzKTsKKwlmcmVlKHByZWltYWdlLmxpbmVfYWxsb2NhdGVkKTsKKwlmcmVlKHBvc3RpbWFnZS5saW5lX2FsbG9jYXRlZCk7CisKKwlyZXR1cm4gKGFwcGxpZWRfcG9zIDwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfYmluYXJ5X2ZyYWdtZW50KHN0cnVjdCBpbWFnZSAqaW1nLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnQgPSBwYXRjaC0+ZnJhZ21lbnRzOworCXVuc2lnbmVkIGxvbmcgbGVuOworCXZvaWQgKmRzdDsKKworCWlmICghZnJhZ21lbnQpCisJCXJldHVybiBlcnJvcihfKCJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIiksCisJCQkgICAgIHBhdGNoLT5uZXdfbmFtZSA/CisJCQkgICAgIHBhdGNoLT5uZXdfbmFtZSA6CisJCQkgICAgIHBhdGNoLT5vbGRfbmFtZSk7CisKKwkvKiBCaW5hcnkgcGF0Y2ggaXMgaXJyZXZlcnNpYmxlIHdpdGhvdXQgdGhlIG9wdGlvbmFsIHNlY29uZCBodW5rICovCisJaWYgKGFwcGx5X2luX3JldmVyc2UpIHsKKwkJaWYgKCFmcmFnbWVudC0+bmV4dCkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggIgorCQkJCSAgICAgIndpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIiwKKwkJCQkgICAgIHBhdGNoLT5uZXdfbmFtZQorCQkJCSAgICAgPyBwYXRjaC0+bmV3X25hbWUgOiBwYXRjaC0+b2xkX25hbWUpOworCQlmcmFnbWVudCA9IGZyYWdtZW50LT5uZXh0OworCX0KKwlzd2l0Y2ggKGZyYWdtZW50LT5iaW5hcnlfcGF0Y2hfbWV0aG9kKSB7CisJY2FzZSBCSU5BUllfREVMVEFfREVGTEFURUQ6CisJCWRzdCA9IHBhdGNoX2RlbHRhKGltZy0+YnVmLCBpbWctPmxlbiwgZnJhZ21lbnQtPnBhdGNoLAorCQkJCSAgZnJhZ21lbnQtPnNpemUsICZsZW4pOworCQlpZiAoIWRzdCkKKwkJCXJldHVybiAtMTsKKwkJY2xlYXJfaW1hZ2UoaW1nKTsKKwkJaW1nLT5idWYgPSBkc3Q7CisJCWltZy0+bGVuID0gbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIEJJTkFSWV9MSVRFUkFMX0RFRkxBVEVEOgorCQljbGVhcl9pbWFnZShpbWcpOworCQlpbWctPmxlbiA9IGZyYWdtZW50LT5zaXplOworCQlpbWctPmJ1ZiA9IHhtYWxsb2MoaW1nLT5sZW4rMSk7CisJCW1lbWNweShpbWctPmJ1ZiwgZnJhZ21lbnQtPnBhdGNoLCBpbWctPmxlbik7CisJCWltZy0+YnVmW2ltZy0+bGVuXSA9ICdcMCc7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBSZXBsYWNlICJpbWciIHdpdGggdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgYmluYXJ5IHBhdGNoLgorICogVGhlIGJpbmFyeSBwYXRjaCBkYXRhIGl0c2VsZiBpbiBwYXRjaC0+ZnJhZ21lbnQgaXMgc3RpbGwga2VwdAorICogYnV0IHRoZSBwcmVpbWFnZSBwcmVwYXJlZCBieSB0aGUgY2FsbGVyIGluICJpbWciIGlzIGZyZWVkIGhlcmUKKyAqIG9yIGluIHRoZSBoZWxwZXIgZnVuY3Rpb24gYXBwbHlfYmluYXJ5X2ZyYWdtZW50KCkgdGhpcyBjYWxscy4KKyAqLworc3RhdGljIGludCBhcHBseV9iaW5hcnkoc3RydWN0IGltYWdlICppbWcsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IHBhdGNoLT5vbGRfbmFtZSA/IHBhdGNoLT5vbGRfbmFtZSA6IHBhdGNoLT5uZXdfbmFtZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJLyoKKwkgKiBGb3Igc2FmZXR5LCB3ZSByZXF1aXJlIHBhdGNoIGluZGV4IGxpbmUgdG8gY29udGFpbgorCSAqIGZ1bGwgNDAtYnl0ZSB0ZXh0dWFsIFNIQTEgZm9yIG9sZCBhbmQgbmV3LCBhdCBsZWFzdCBmb3Igbm93LgorCSAqLworCWlmIChzdHJsZW4ocGF0Y2gtPm9sZF9zaGExX3ByZWZpeCkgIT0gNDAgfHwKKwkgICAgc3RybGVuKHBhdGNoLT5uZXdfc2hhMV9wcmVmaXgpICE9IDQwIHx8CisJICAgIGdldF9zaGExX2hleChwYXRjaC0+b2xkX3NoYTFfcHJlZml4LCBzaGExKSB8fAorCSAgICBnZXRfc2hhMV9oZXgocGF0Y2gtPm5ld19zaGExX3ByZWZpeCwgc2hhMSkpCisJCXJldHVybiBlcnJvcigiY2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaCB0byAnJXMnICIKKwkJCSAgICAgIndpdGhvdXQgZnVsbCBpbmRleCBsaW5lIiwgbmFtZSk7CisKKwlpZiAocGF0Y2gtPm9sZF9uYW1lKSB7CisJCS8qCisJCSAqIFNlZSBpZiB0aGUgb2xkIG9uZSBtYXRjaGVzIHdoYXQgdGhlIHBhdGNoCisJCSAqIGFwcGxpZXMgdG8uCisJCSAqLworCQloYXNoX3NoYTFfZmlsZShpbWctPmJ1ZiwgaW1nLT5sZW4sIGJsb2JfdHlwZSwgc2hhMSk7CisJCWlmIChzdHJjbXAoc2hhMV90b19oZXgoc2hhMSksIHBhdGNoLT5vbGRfc2hhMV9wcmVmaXgpKQorCQkJcmV0dXJuIGVycm9yKCJ0aGUgcGF0Y2ggYXBwbGllcyB0byAnJXMnICglcyksICIKKwkJCQkgICAgICJ3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgIgorCQkJCSAgICAgImN1cnJlbnQgY29udGVudHMuIiwKKwkJCQkgICAgIG5hbWUsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisJZWxzZSB7CisJCS8qIE90aGVyd2lzZSwgdGhlIG9sZCBvbmUgbXVzdCBiZSBlbXB0eS4gKi8KKwkJaWYgKGltZy0+bGVuKQorCQkJcmV0dXJuIGVycm9yKCJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAiCisJCQkJICAgICAiJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IiwgbmFtZSk7CisJfQorCisJZ2V0X3NoYTFfaGV4KHBhdGNoLT5uZXdfc2hhMV9wcmVmaXgsIHNoYTEpOworCWlmIChpc19udWxsX3NoYTEoc2hhMSkpIHsKKwkJY2xlYXJfaW1hZ2UoaW1nKTsKKwkJcmV0dXJuIDA7IC8qIGRlbGV0aW9uIHBhdGNoICovCisJfQorCisJaWYgKGhhc19zaGExX2ZpbGUoc2hhMSkpIHsKKwkJLyogV2UgYWxyZWFkeSBoYXZlIHRoZSBwb3N0aW1hZ2UgKi8KKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWNoYXIgKnJlc3VsdDsKKworCQlyZXN1bHQgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIXJlc3VsdCkKKwkJCXJldHVybiBlcnJvcigidGhlIG5lY2Vzc2FyeSBwb3N0aW1hZ2UgJXMgZm9yICIKKwkJCQkgICAgICInJXMnIGNhbm5vdCBiZSByZWFkIiwKKwkJCQkgICAgIHBhdGNoLT5uZXdfc2hhMV9wcmVmaXgsIG5hbWUpOworCQljbGVhcl9pbWFnZShpbWcpOworCQlpbWctPmJ1ZiA9IHJlc3VsdDsKKwkJaW1nLT5sZW4gPSBzaXplOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdlIGhhdmUgdmVyaWZpZWQgYnVmIG1hdGNoZXMgdGhlIHByZWltYWdlOworCQkgKiBhcHBseSB0aGUgcGF0Y2ggZGF0YSB0byBpdCwgd2hpY2ggaXMgc3RvcmVkCisJCSAqIGluIHRoZSBwYXRjaC0+ZnJhZ21lbnRzLT57cGF0Y2gsc2l6ZX0uCisJCSAqLworCQlpZiAoYXBwbHlfYmluYXJ5X2ZyYWdtZW50KGltZywgcGF0Y2gpKQorCQkJcmV0dXJuIGVycm9yKF8oImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIiksCisJCQkJICAgICBuYW1lKTsKKworCQkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVzdWx0IG1hdGNoZXMgKi8KKwkJaGFzaF9zaGExX2ZpbGUoaW1nLT5idWYsIGltZy0+bGVuLCBibG9iX3R5cGUsIHNoYTEpOworCQlpZiAoc3RyY21wKHNoYTFfdG9faGV4KHNoYTEpLCBwYXRjaC0+bmV3X3NoYTFfcHJlZml4KSkKKwkJCXJldHVybiBlcnJvcihfKCJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIpLAorCQkJCW5hbWUsIHBhdGNoLT5uZXdfc2hhMV9wcmVmaXgsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9mcmFnbWVudHMoc3RydWN0IGltYWdlICppbWcsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IGZyYWdtZW50ICpmcmFnID0gcGF0Y2gtPmZyYWdtZW50czsKKwljb25zdCBjaGFyICpuYW1lID0gcGF0Y2gtPm9sZF9uYW1lID8gcGF0Y2gtPm9sZF9uYW1lIDogcGF0Y2gtPm5ld19uYW1lOworCXVuc2lnbmVkIHdzX3J1bGUgPSBwYXRjaC0+d3NfcnVsZTsKKwl1bnNpZ25lZCBpbmFjY3VyYXRlX2VvZiA9IHBhdGNoLT5pbmFjY3VyYXRlX2VvZjsKKwlpbnQgbnRoID0gMDsKKworCWlmIChwYXRjaC0+aXNfYmluYXJ5KQorCQlyZXR1cm4gYXBwbHlfYmluYXJ5KGltZywgcGF0Y2gpOworCisJd2hpbGUgKGZyYWcpIHsKKwkJbnRoKys7CisJCWlmIChhcHBseV9vbmVfZnJhZ21lbnQoaW1nLCBmcmFnLCBpbmFjY3VyYXRlX2VvZiwgd3NfcnVsZSwgbnRoKSkgeworCQkJZXJyb3IoXygicGF0Y2ggZmFpbGVkOiAlczolbGQiKSwgbmFtZSwgZnJhZy0+b2xkcG9zKTsKKwkJCWlmICghYXBwbHlfd2l0aF9yZWplY3QpCisJCQkJcmV0dXJuIC0xOworCQkJZnJhZy0+cmVqZWN0ZWQgPSAxOworCQl9CisJCWZyYWcgPSBmcmFnLT5uZXh0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX2Jsb2Jfb2JqZWN0KHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgbW9kZSkKK3sKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJc3RyYnVmX2dyb3coYnVmLCAxMDApOworCQlzdHJidWZfYWRkZihidWYsICJTdWJwcm9qZWN0IGNvbW1pdCAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0gZWxzZSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzejsKKwkJY2hhciAqcmVzdWx0OworCisJCXJlc3VsdCA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc3opOworCQlpZiAoIXJlc3VsdCkKKwkJCXJldHVybiAtMTsKKwkJLyogWFhYIHJlYWRfc2hhMV9maWxlIE5VTC10ZXJtaW5hdGVzICovCisJCXN0cmJ1Zl9hdHRhY2goYnVmLCByZXN1bHQsIHN6LCBzeiArIDEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX2ZpbGVfb3JfZ2l0bGluayhzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaWYgKCFjZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJlYWRfYmxvYl9vYmplY3QoYnVmLCBjZS0+c2hhMSwgY2UtPmNlX21vZGUpOworfQorCitzdGF0aWMgc3RydWN0IHBhdGNoICppbl9mbl90YWJsZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaWYgKG5hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKCZmbl90YWJsZSwgbmFtZSk7CisJaWYgKGl0ZW0gIT0gTlVMTCkKKwkJcmV0dXJuIChzdHJ1Y3QgcGF0Y2ggKilpdGVtLT51dGlsOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBpdGVtLT51dGlsIGluIHRoZSBmaWxlbmFtZSB0YWJsZSByZWNvcmRzIHRoZSBzdGF0dXMgb2YgdGhlIHBhdGguCisgKiBVc3VhbGx5IGl0IHBvaW50cyBhdCBhIHBhdGNoICh3aG9zZSByZXN1bHQgcmVjb3JkcyB0aGUgY29udGVudHMKKyAqIG9mIGl0IGFmdGVyIGFwcGx5aW5nIGl0KSwgYnV0IGl0IGNvdWxkIGJlIFBBVEhfV0FTX0RFTEVURUQgZm9yIGEKKyAqIHBhdGggdGhhdCBhIHByZXZpb3VzbHkgYXBwbGllZCBwYXRjaCBoYXMgYWxyZWFkeSByZW1vdmVkLCBvcgorICogUEFUSF9UT19CRV9ERUxFVEVEIGZvciBhIHBhdGggdGhhdCBhIGxhdGVyIHBhdGNoIHdvdWxkIHJlbW92ZS4KKyAqCisgKiBUaGUgbGF0dGVyIGlzIG5lZWRlZCB0byBkZWFsIHdpdGggYSBjYXNlIHdoZXJlIHR3byBwYXRocyBBIGFuZCBCCisgKiBhcmUgc3dhcHBlZCBieSBmaXJzdCByZW5hbWluZyBBIHRvIEIgYW5kIHRoZW4gcmVuYW1pbmcgQiB0byBBOworICogbW92aW5nIEEgdG8gQiBzaG91bGQgbm90IGJlIHByZXZlbnRlZCBkdWUgdG8gcHJlc2Vuc2Ugb2YgQiBhcyB3ZQorICogd2lsbCByZW1vdmUgaXQgaW4gYSBsYXRlciBwYXRjaC4KKyAqLworI2RlZmluZSBQQVRIX1RPX0JFX0RFTEVURUQgKChzdHJ1Y3QgcGF0Y2ggKikgLTIpCisjZGVmaW5lIFBBVEhfV0FTX0RFTEVURUQgKChzdHJ1Y3QgcGF0Y2ggKikgLTEpCisKK3N0YXRpYyBpbnQgdG9fYmVfZGVsZXRlZChzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybiBwYXRjaCA9PSBQQVRIX1RPX0JFX0RFTEVURUQ7Cit9CisKK3N0YXRpYyBpbnQgd2FzX2RlbGV0ZWQoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlyZXR1cm4gcGF0Y2ggPT0gUEFUSF9XQVNfREVMRVRFRDsKK30KKworc3RhdGljIHZvaWQgYWRkX3RvX2ZuX3RhYmxlKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwkvKgorCSAqIEFsd2F5cyBhZGQgbmV3X25hbWUgdW5sZXNzIHBhdGNoIGlzIGEgZGVsZXRpb24KKwkgKiBUaGlzIHNob3VsZCBjb3ZlciB0aGUgY2FzZXMgZm9yIG5vcm1hbCBkaWZmcywKKwkgKiBmaWxlIGNyZWF0aW9ucyBhbmQgY29waWVzCisJICovCisJaWYgKHBhdGNoLT5uZXdfbmFtZSAhPSBOVUxMKSB7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJmZuX3RhYmxlLCBwYXRjaC0+bmV3X25hbWUpOworCQlpdGVtLT51dGlsID0gcGF0Y2g7CisJfQorCisJLyoKKwkgKiBzdG9yZSBhIGZhaWx1cmUgb24gcmVuYW1lL2RlbGV0aW9uIGNhc2VzIGJlY2F1c2UKKwkgKiBsYXRlciBjaHVua3Mgc2hvdWxkbid0IHBhdGNoIG9sZCBuYW1lcworCSAqLworCWlmICgocGF0Y2gtPm5ld19uYW1lID09IE5VTEwpIHx8IChwYXRjaC0+aXNfcmVuYW1lKSkgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZmbl90YWJsZSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwkJaXRlbS0+dXRpbCA9IFBBVEhfV0FTX0RFTEVURUQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2ZuX3RhYmxlKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJLyoKKwkgKiBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBpbmNvbWluZyBmaWxlIGRlbGV0aW9uCisJICovCisJd2hpbGUgKHBhdGNoKSB7CisJCWlmICgocGF0Y2gtPm5ld19uYW1lID09IE5VTEwpIHx8IChwYXRjaC0+aXNfcmVuYW1lKSkgeworCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZmbl90YWJsZSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwkJCWl0ZW0tPnV0aWwgPSBQQVRIX1RPX0JFX0RFTEVURUQ7CisJCX0KKwkJcGF0Y2ggPSBwYXRjaC0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfdGFyZ2V0KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlzdHJ1Y3QgY2hlY2tvdXQgY29zdGF0ZTsKKworCW1lbXNldCgmY29zdGF0ZSwgMCwgc2l6ZW9mKGNvc3RhdGUpKTsKKwljb3N0YXRlLmJhc2VfZGlyID0gIiI7CisJY29zdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKKwlpZiAoY2hlY2tvdXRfZW50cnkoY2UsICZjb3N0YXRlLCBOVUxMKSB8fCBsc3RhdChjZS0+bmFtZSwgc3QpKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IGNoZWNrb3V0ICVzIiksIGNlLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwYXRjaCAqcHJldmlvdXNfcGF0Y2goc3RydWN0IHBhdGNoICpwYXRjaCwgaW50ICpnb25lKQoreworCXN0cnVjdCBwYXRjaCAqcHJldmlvdXM7CisKKwkqZ29uZSA9IDA7CisJaWYgKHBhdGNoLT5pc19jb3B5IHx8IHBhdGNoLT5pc19yZW5hbWUpCisJCXJldHVybiBOVUxMOyAvKiAiZ2l0IiBwYXRjaGVzIGRvIG5vdCBkZXBlbmQgb24gdGhlIG9yZGVyICovCisKKwlwcmV2aW91cyA9IGluX2ZuX3RhYmxlKHBhdGNoLT5vbGRfbmFtZSk7CisJaWYgKCFwcmV2aW91cykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAodG9fYmVfZGVsZXRlZChwcmV2aW91cykpCisJCXJldHVybiBOVUxMOyAvKiB0aGUgZGVsZXRpb24gaGFzbid0IGhhcHBlbmVkIHlldCAqLworCisJaWYgKHdhc19kZWxldGVkKHByZXZpb3VzKSkKKwkJKmdvbmUgPSAxOworCisJcmV0dXJuIHByZXZpb3VzOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9pbmRleF9tYXRjaChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkgeworCQlpZiAoIVNfSVNESVIoc3QtPnN0X21vZGUpKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGNlX21hdGNoX3N0YXQoY2UsIHN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUpOworfQorCisjZGVmaW5lIFNVQk1PRFVMRV9QQVRDSF9XSVRIT1VUX0lOREVYIDEKKworc3RhdGljIGludCBsb2FkX3BhdGNoX3RhcmdldChzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkgICAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgIHN0cnVjdCBzdGF0ICpzdCwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgdW5zaWduZWQgZXhwZWN0ZWRfbW9kZSkKK3sKKwlpZiAoY2FjaGVkKSB7CisJCWlmIChyZWFkX2ZpbGVfb3JfZ2l0bGluayhjZSwgYnVmKSkKKwkJCXJldHVybiBlcnJvcihfKCJyZWFkIG9mICVzIGZhaWxlZCIpLCBuYW1lKTsKKwl9IGVsc2UgaWYgKG5hbWUpIHsKKwkJaWYgKFNfSVNHSVRMSU5LKGV4cGVjdGVkX21vZGUpKSB7CisJCQlpZiAoY2UpCisJCQkJcmV0dXJuIHJlYWRfZmlsZV9vcl9naXRsaW5rKGNlLCBidWYpOworCQkJZWxzZQorCQkJCXJldHVybiBTVUJNT0RVTEVfUEFUQ0hfV0lUSE9VVF9JTkRFWDsKKwkJfSBlbHNlIHsKKwkJCWlmIChyZWFkX29sZF9kYXRhKHN0LCBuYW1lLCBidWYpKQorCQkJCXJldHVybiBlcnJvcihfKCJyZWFkIG9mICVzIGZhaWxlZCIpLCBuYW1lKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIGFyZSBhYm91dCB0byBhcHBseSAicGF0Y2giOyBwb3B1bGF0ZSB0aGUgImltYWdlIiB3aXRoIHRoZQorICogY3VycmVudCB2ZXJzaW9uIHdlIGhhdmUsIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBvciBmcm9tIHRoZSBpbmRleCwKKyAqIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uIGUuZy4gLS1jYWNoZWQvLS1pbmRleC4gIElmIHdlIGFyZQorICogYXBwbHlpbmcgYSBub24tZ2l0IHBhdGNoIHRoYXQgaW5jcmVtZW50YWxseSB1cGRhdGVzIHRoZSB0cmVlLAorICogd2UgcmVhZCBmcm9tIHRoZSByZXN1bHQgb2YgYSBwcmV2aW91cyBkaWZmLgorICovCitzdGF0aWMgaW50IGxvYWRfcHJlaW1hZ2Uoc3RydWN0IGltYWdlICppbWFnZSwKKwkJCSBzdHJ1Y3QgcGF0Y2ggKnBhdGNoLCBzdHJ1Y3Qgc3RhdCAqc3QsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgbGVuOworCWNoYXIgKmltZzsKKwlzdHJ1Y3QgcGF0Y2ggKnByZXZpb3VzOworCWludCBzdGF0dXM7CisKKwlwcmV2aW91cyA9IHByZXZpb3VzX3BhdGNoKHBhdGNoLCAmc3RhdHVzKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gZXJyb3IoXygicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiKSwKKwkJCSAgICAgcGF0Y2gtPm9sZF9uYW1lKTsKKwlpZiAocHJldmlvdXMpIHsKKwkJLyogV2UgaGF2ZSBhIHBhdGNoZWQgY29weSBpbiBtZW1vcnk7IHVzZSB0aGF0LiAqLworCQlzdHJidWZfYWRkKCZidWYsIHByZXZpb3VzLT5yZXN1bHQsIHByZXZpb3VzLT5yZXN1bHRzaXplKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBsb2FkX3BhdGNoX3RhcmdldCgmYnVmLCBjZSwgc3QsCisJCQkJCSAgIHBhdGNoLT5vbGRfbmFtZSwgcGF0Y2gtPm9sZF9tb2RlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQllbHNlIGlmIChzdGF0dXMgPT0gU1VCTU9EVUxFX1BBVENIX1dJVEhPVVRfSU5ERVgpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBubyB3YXkgdG8gYXBwbHkgc3VicHJvamVjdAorCQkJICogcGF0Y2ggd2l0aG91dCBsb29raW5nIGF0IHRoZSBpbmRleC4KKwkJCSAqIE5FRURTV09SSzogc2hvdWxkbid0IHRoaXMgYmUgZmxhZ2dlZAorCQkJICogYXMgYW4gZXJyb3I/Pz8KKwkJCSAqLworCQkJZnJlZV9mcmFnbWVudF9saXN0KHBhdGNoLT5mcmFnbWVudHMpOworCQkJcGF0Y2gtPmZyYWdtZW50cyA9IE5VTEw7CisJCX0gZWxzZSBpZiAoc3RhdHVzKSB7CisJCQlyZXR1cm4gZXJyb3IoXygicmVhZCBvZiAlcyBmYWlsZWQiKSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwkJfQorCX0KKworCWltZyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJmxlbik7CisJcHJlcGFyZV9pbWFnZShpbWFnZSwgaW1nLCBsZW4sICFwYXRjaC0+aXNfYmluYXJ5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aHJlZV93YXlfbWVyZ2Uoc3RydWN0IGltYWdlICppbWFnZSwKKwkJCSAgIGNoYXIgKnBhdGgsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqb3VycywKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRoZWlycykKK3sKKwltbWZpbGVfdCBiYXNlX2ZpbGUsIG91cl9maWxlLCB0aGVpcl9maWxlOworCW1tYnVmZmVyX3QgcmVzdWx0ID0geyBOVUxMIH07CisJaW50IHN0YXR1czsKKworCXJlYWRfbW1ibG9iKCZiYXNlX2ZpbGUsIGJhc2UpOworCXJlYWRfbW1ibG9iKCZvdXJfZmlsZSwgb3Vycyk7CisJcmVhZF9tbWJsb2IoJnRoZWlyX2ZpbGUsIHRoZWlycyk7CisJc3RhdHVzID0gbGxfbWVyZ2UoJnJlc3VsdCwgcGF0aCwKKwkJCSAgJmJhc2VfZmlsZSwgImJhc2UiLAorCQkJICAmb3VyX2ZpbGUsICJvdXJzIiwKKwkJCSAgJnRoZWlyX2ZpbGUsICJ0aGVpcnMiLCBOVUxMKTsKKwlmcmVlKGJhc2VfZmlsZS5wdHIpOworCWZyZWUob3VyX2ZpbGUucHRyKTsKKwlmcmVlKHRoZWlyX2ZpbGUucHRyKTsKKwlpZiAoc3RhdHVzIDwgMCB8fCAhcmVzdWx0LnB0cikgeworCQlmcmVlKHJlc3VsdC5wdHIpOworCQlyZXR1cm4gLTE7CisJfQorCWNsZWFyX2ltYWdlKGltYWdlKTsKKwlpbWFnZS0+YnVmID0gcmVzdWx0LnB0cjsKKwlpbWFnZS0+bGVuID0gcmVzdWx0LnNpemU7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogV2hlbiBkaXJlY3RseSBmYWxsaW5nIGJhY2sgdG8gYWRkL2FkZCB0aHJlZS13YXkgbWVyZ2UsIHdlIHJlYWQgZnJvbQorICogdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIG5ld19uYW1lLiAgSW4gbm8gY2FzZXMgb3RoZXIgdGhhbiB0aGF0CisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLgorICovCitzdGF0aWMgaW50IGxvYWRfY3VycmVudChzdHJ1Y3QgaW1hZ2UgKmltYWdlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHN0YXR1cywgcG9zOworCXNpemVfdCBsZW47CisJY2hhciAqaW1nOworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJY2hhciAqbmFtZSA9IHBhdGNoLT5uZXdfbmFtZTsKKwl1bnNpZ25lZCBtb2RlID0gcGF0Y2gtPm5ld19tb2RlOworCisJaWYgKCFwYXRjaC0+aXNfbmV3KQorCQlkaWUoIkJVRzogcGF0Y2ggdG8gJXMgaXMgbm90IGEgY3JlYXRpb24iLCBwYXRjaC0+b2xkX25hbWUpOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MobmFtZSwgc3RybGVuKG5hbWUpKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIpLCBuYW1lKTsKKwljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCWlmIChsc3RhdChuYW1lLCAmc3QpKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlyZXR1cm4gZXJyb3IoXygiJXM6ICVzIiksIG5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWlmIChjaGVja291dF90YXJnZXQoY2UsICZzdCkpCisJCQlyZXR1cm4gLTE7CisJfQorCWlmICh2ZXJpZnlfaW5kZXhfbWF0Y2goY2UsICZzdCkpCisJCXJldHVybiBlcnJvcihfKCIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiKSwgbmFtZSk7CisKKwlzdGF0dXMgPSBsb2FkX3BhdGNoX3RhcmdldCgmYnVmLCBjZSwgJnN0LCBuYW1lLCBtb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwllbHNlIGlmIChzdGF0dXMpCisJCXJldHVybiAtMTsKKwlpbWcgPSBzdHJidWZfZGV0YWNoKCZidWYsICZsZW4pOworCXByZXBhcmVfaW1hZ2UoaW1hZ2UsIGltZywgbGVuLCAhcGF0Y2gtPmlzX2JpbmFyeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X3RocmVld2F5KHN0cnVjdCBpbWFnZSAqaW1hZ2UsIHN0cnVjdCBwYXRjaCAqcGF0Y2gsCisJCQlzdHJ1Y3Qgc3RhdCAqc3QsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJdW5zaWduZWQgY2hhciBwcmVfc2hhMVsyMF0sIHBvc3Rfc2hhMVsyMF0sIG91cl9zaGExWzIwXTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBsZW47CisJaW50IHN0YXR1czsKKwljaGFyICppbWc7CisJc3RydWN0IGltYWdlIHRtcF9pbWFnZTsKKworCS8qIE5vIHBvaW50IGZhbGxpbmcgYmFjayB0byAzLXdheSBtZXJnZSBpbiB0aGVzZSBjYXNlcyAqLworCWlmIChwYXRjaC0+aXNfZGVsZXRlIHx8CisJICAgIFNfSVNHSVRMSU5LKHBhdGNoLT5vbGRfbW9kZSkgfHwgU19JU0dJVExJTksocGF0Y2gtPm5ld19tb2RlKSkKKwkJcmV0dXJuIC0xOworCisJLyogUHJlaW1hZ2UgdGhlIHBhdGNoIHdhcyBwcmVwYXJlZCBmb3IgKi8KKwlpZiAocGF0Y2gtPmlzX25ldykKKwkJd3JpdGVfc2hhMV9maWxlKCIiLCAwLCBibG9iX3R5cGUsIHByZV9zaGExKTsKKwllbHNlIGlmIChnZXRfc2hhMShwYXRjaC0+b2xkX3NoYTFfcHJlZml4LCBwcmVfc2hhMSkgfHwKKwkJIHJlYWRfYmxvYl9vYmplY3QoJmJ1ZiwgcHJlX3NoYTEsIHBhdGNoLT5vbGRfbW9kZSkpCisJCXJldHVybiBlcnJvcigicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIpOworCisJZnByaW50ZihzdGRlcnIsICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iKTsKKworCWltZyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJmxlbik7CisJcHJlcGFyZV9pbWFnZSgmdG1wX2ltYWdlLCBpbWcsIGxlbiwgMSk7CisJLyogQXBwbHkgdGhlIHBhdGNoIHRvIGdldCB0aGUgcG9zdCBpbWFnZSAqLworCWlmIChhcHBseV9mcmFnbWVudHMoJnRtcF9pbWFnZSwgcGF0Y2gpIDwgMCkgeworCQljbGVhcl9pbWFnZSgmdG1wX2ltYWdlKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBwb3N0X3NoYTFbXSBpcyB0aGVpcnMgKi8KKwl3cml0ZV9zaGExX2ZpbGUodG1wX2ltYWdlLmJ1ZiwgdG1wX2ltYWdlLmxlbiwgYmxvYl90eXBlLCBwb3N0X3NoYTEpOworCWNsZWFyX2ltYWdlKCZ0bXBfaW1hZ2UpOworCisJLyogb3VyX3NoYTFbXSBpcyBvdXJzICovCisJaWYgKHBhdGNoLT5pc19uZXcpIHsKKwkJaWYgKGxvYWRfY3VycmVudCgmdG1wX2ltYWdlLCBwYXRjaCkpCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciLAorCQkJCSAgICAgcGF0Y2gtPm5ld19uYW1lKTsKKwl9IGVsc2UgeworCQlpZiAobG9hZF9wcmVpbWFnZSgmdG1wX2ltYWdlLCBwYXRjaCwgc3QsIGNlKSkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIsCisJCQkJICAgICBwYXRjaC0+b2xkX25hbWUpOworCX0KKwl3cml0ZV9zaGExX2ZpbGUodG1wX2ltYWdlLmJ1ZiwgdG1wX2ltYWdlLmxlbiwgYmxvYl90eXBlLCBvdXJfc2hhMSk7CisJY2xlYXJfaW1hZ2UoJnRtcF9pbWFnZSk7CisKKwkvKiBpbi1jb3JlIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIHBvc3QgYW5kIG91ciB1c2luZyBwcmUgYXMgYmFzZSAqLworCXN0YXR1cyA9IHRocmVlX3dheV9tZXJnZShpbWFnZSwgcGF0Y2gtPm5ld19uYW1lLAorCQkJCSBwcmVfc2hhMSwgb3VyX3NoYTEsIHBvc3Rfc2hhMSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZmFsbCBiYWNrIG9uIHRocmVlLXdheSBtZXJnZS4uLlxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaWYgKHN0YXR1cykgeworCQlwYXRjaC0+Y29uZmxpY3RlZF90aHJlZXdheSA9IDE7CisJCWlmIChwYXRjaC0+aXNfbmV3KQorCQkJaGFzaGNscihwYXRjaC0+dGhyZWV3YXlfc3RhZ2VbMF0pOworCQllbHNlCisJCQloYXNoY3B5KHBhdGNoLT50aHJlZXdheV9zdGFnZVswXSwgcHJlX3NoYTEpOworCQloYXNoY3B5KHBhdGNoLT50aHJlZXdheV9zdGFnZVsxXSwgb3VyX3NoYTEpOworCQloYXNoY3B5KHBhdGNoLT50aHJlZXdheV9zdGFnZVsyXSwgcG9zdF9zaGExKTsKKwkJZnByaW50ZihzdGRlcnIsICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iLCBwYXRjaC0+bmV3X25hbWUpOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIGNsZWFubHkuXG4iLCBwYXRjaC0+bmV3X25hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9kYXRhKHN0cnVjdCBwYXRjaCAqcGF0Y2gsIHN0cnVjdCBzdGF0ICpzdCwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlzdHJ1Y3QgaW1hZ2UgaW1hZ2U7CisKKwlpZiAobG9hZF9wcmVpbWFnZSgmaW1hZ2UsIHBhdGNoLCBzdCwgY2UpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHBhdGNoLT5kaXJlY3RfdG9fdGhyZWV3YXkgfHwKKwkgICAgYXBwbHlfZnJhZ21lbnRzKCZpbWFnZSwgcGF0Y2gpIDwgMCkgeworCQkvKiBOb3RlOiB3aXRoIC0tcmVqZWN0LCBhcHBseV9mcmFnbWVudHMoKSByZXR1cm5zIDAgKi8KKwkJaWYgKCF0aHJlZXdheSB8fCB0cnlfdGhyZWV3YXkoJmltYWdlLCBwYXRjaCwgc3QsIGNlKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCXBhdGNoLT5yZXN1bHQgPSBpbWFnZS5idWY7CisJcGF0Y2gtPnJlc3VsdHNpemUgPSBpbWFnZS5sZW47CisJYWRkX3RvX2ZuX3RhYmxlKHBhdGNoKTsKKwlmcmVlKGltYWdlLmxpbmVfYWxsb2NhdGVkKTsKKworCWlmICgwIDwgcGF0Y2gtPmlzX2RlbGV0ZSAmJiBwYXRjaC0+cmVzdWx0c2l6ZSkKKwkJcmV0dXJuIGVycm9yKF8oInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmICJwYXRjaCIgdGhhdCB3ZSBhcmUgbG9va2luZyBhdCBtb2RpZmllcyBvciBkZWxldGVzIHdoYXQgd2UgaGF2ZSwKKyAqIHdlIHdvdWxkIHdhbnQgaXQgbm90IHRvIGxvc2UgYW55IGxvY2FsIG1vZGlmaWNhdGlvbiB3ZSBoYXZlLCBlaXRoZXIKKyAqIGluIHRoZSB3b3JraW5nIHRyZWUgb3IgaW4gdGhlIGluZGV4LgorICoKKyAqIFRoaXMgYWxzbyBkZWNpZGVzIGlmIGEgbm9uLWdpdCBwYXRjaCBpcyBhIGNyZWF0aW9uIHBhdGNoIG9yIGEKKyAqIG1vZGlmaWNhdGlvbiB0byBhbiBleGlzdGluZyBlbXB0eSBmaWxlLiAgV2UgZG8gbm90IGNoZWNrIHRoZSBzdGF0ZQorICogb2YgdGhlIGN1cnJlbnQgdHJlZSBmb3IgYSBjcmVhdGlvbiBwYXRjaCBpbiB0aGlzIGZ1bmN0aW9uOyB0aGUgY2FsbGVyCisgKiBjaGVja19wYXRjaCgpIHNlcGFyYXRlbHkgbWFrZXMgc3VyZSAoYW5kIGVycm9ycyBvdXQgb3RoZXJ3aXNlKSB0aGF0CisgKiB0aGUgcGF0aCB0aGUgcGF0Y2ggY3JlYXRlcyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCB0cmVlLgorICovCitzdGF0aWMgaW50IGNoZWNrX3ByZWltYWdlKHN0cnVjdCBwYXRjaCAqcGF0Y2gsIHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJY29uc3QgY2hhciAqb2xkX25hbWUgPSBwYXRjaC0+b2xkX25hbWU7CisJc3RydWN0IHBhdGNoICpwcmV2aW91cyA9IE5VTEw7CisJaW50IHN0YXRfcmV0ID0gMCwgc3RhdHVzOworCXVuc2lnbmVkIHN0X21vZGUgPSAwOworCisJaWYgKCFvbGRfbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlhc3NlcnQocGF0Y2gtPmlzX25ldyA8PSAwKTsKKwlwcmV2aW91cyA9IHByZXZpb3VzX3BhdGNoKHBhdGNoLCAmc3RhdHVzKTsKKworCWlmIChzdGF0dXMpCisJCXJldHVybiBlcnJvcihfKCJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIpLCBvbGRfbmFtZSk7CisJaWYgKHByZXZpb3VzKSB7CisJCXN0X21vZGUgPSBwcmV2aW91cy0+bmV3X21vZGU7CisJfSBlbHNlIGlmICghY2FjaGVkKSB7CisJCXN0YXRfcmV0ID0gbHN0YXQob2xkX25hbWUsIHN0KTsKKwkJaWYgKHN0YXRfcmV0ICYmIGVycm5vICE9IEVOT0VOVCkKKwkJCXJldHVybiBlcnJvcihfKCIlczogJXMiKSwgb2xkX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCisJaWYgKGNoZWNrX2luZGV4ICYmICFwcmV2aW91cykgeworCQlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3Mob2xkX25hbWUsIHN0cmxlbihvbGRfbmFtZSkpOworCQlpZiAocG9zIDwgMCkgeworCQkJaWYgKHBhdGNoLT5pc19uZXcgPCAwKQorCQkJCWdvdG8gaXNfbmV3OworCQkJcmV0dXJuIGVycm9yKF8oIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIpLCBvbGRfbmFtZSk7CisJCX0KKwkJKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWlmIChzdGF0X3JldCA8IDApIHsKKwkJCWlmIChjaGVja291dF90YXJnZXQoKmNlLCBzdCkpCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICghY2FjaGVkICYmIHZlcmlmeV9pbmRleF9tYXRjaCgqY2UsIHN0KSkKKwkJCXJldHVybiBlcnJvcihfKCIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiKSwgb2xkX25hbWUpOworCQlpZiAoY2FjaGVkKQorCQkJc3RfbW9kZSA9ICgqY2UpLT5jZV9tb2RlOworCX0gZWxzZSBpZiAoc3RhdF9yZXQgPCAwKSB7CisJCWlmIChwYXRjaC0+aXNfbmV3IDwgMCkKKwkJCWdvdG8gaXNfbmV3OworCQlyZXR1cm4gZXJyb3IoXygiJXM6ICVzIiksIG9sZF9uYW1lLCBzdHJlcnJvcihlcnJubykpOworCX0KKworCWlmICghY2FjaGVkICYmICFwcmV2aW91cykKKwkJc3RfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KCpjZSwgc3QtPnN0X21vZGUpOworCisJaWYgKHBhdGNoLT5pc19uZXcgPCAwKQorCQlwYXRjaC0+aXNfbmV3ID0gMDsKKwlpZiAoIXBhdGNoLT5vbGRfbW9kZSkKKwkJcGF0Y2gtPm9sZF9tb2RlID0gc3RfbW9kZTsKKwlpZiAoKHN0X21vZGUgXiBwYXRjaC0+b2xkX21vZGUpICYgU19JRk1UKQorCQlyZXR1cm4gZXJyb3IoXygiJXM6IHdyb25nIHR5cGUiKSwgb2xkX25hbWUpOworCWlmIChzdF9tb2RlICE9IHBhdGNoLT5vbGRfbW9kZSkKKwkJd2FybmluZyhfKCIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iKSwKKwkJCW9sZF9uYW1lLCBzdF9tb2RlLCBwYXRjaC0+b2xkX21vZGUpOworCWlmICghcGF0Y2gtPm5ld19tb2RlICYmICFwYXRjaC0+aXNfZGVsZXRlKQorCQlwYXRjaC0+bmV3X21vZGUgPSBzdF9tb2RlOworCXJldHVybiAwOworCisgaXNfbmV3OgorCXBhdGNoLT5pc19uZXcgPSAxOworCXBhdGNoLT5pc19kZWxldGUgPSAwOworCWZyZWUocGF0Y2gtPm9sZF9uYW1lKTsKKwlwYXRjaC0+b2xkX25hbWUgPSBOVUxMOworCXJldHVybiAwOworfQorCisKKyNkZWZpbmUgRVhJU1RTX0lOX0lOREVYIDEKKyNkZWZpbmUgRVhJU1RTX0lOX1dPUktUUkVFIDIKKworc3RhdGljIGludCBjaGVja190b19jcmVhdGUoY29uc3QgY2hhciAqbmV3X25hbWUsIGludCBva19pZl9leGlzdHMpCit7CisJc3RydWN0IHN0YXQgbnN0OworCisJaWYgKGNoZWNrX2luZGV4ICYmCisJICAgIGNhY2hlX25hbWVfcG9zKG5ld19uYW1lLCBzdHJsZW4obmV3X25hbWUpKSA+PSAwICYmCisJICAgICFva19pZl9leGlzdHMpCisJCXJldHVybiBFWElTVFNfSU5fSU5ERVg7CisJaWYgKGNhY2hlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWxzdGF0KG5ld19uYW1lLCAmbnN0KSkgeworCQlpZiAoU19JU0RJUihuc3Quc3RfbW9kZSkgfHwgb2tfaWZfZXhpc3RzKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIEEgbGVhZGluZyBjb21wb25lbnQgb2YgbmV3X25hbWUgbWlnaHQgYmUgYSBzeW1saW5rCisJCSAqIHRoYXQgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCB3aXRoIHRoaXMgcGF0Y2gsIGJ1dAorCQkgKiBzdGlsbCBwb2ludGluZyBhdCBzb21ld2hlcmUgdGhhdCBoYXMgdGhlIHBhdGguCisJCSAqIEluIHN1Y2ggYSBjYXNlLCBwYXRoICJuZXdfbmFtZSIgZG9lcyBub3QgZXhpc3QgYXMKKwkJICogZmFyIGFzIGdpdCBpcyBjb25jZXJuZWQuCisJCSAqLworCQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKG5ld19uYW1lLCBzdHJsZW4obmV3X25hbWUpKSkKKwkJCXJldHVybiAwOworCisJCXJldHVybiBFWElTVFNfSU5fV09SS1RSRUU7CisJfSBlbHNlIGlmICgoZXJybm8gIT0gRU5PRU5UKSAmJiAoZXJybm8gIT0gRU5PVERJUikpIHsKKwkJcmV0dXJuIGVycm9yKCIlczogJXMiLCBuZXdfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBhbmQgYXBwbHkgdGhlIHBhdGNoIGluLWNvcmU7IGxlYXZlIHRoZSByZXN1bHQgaW4gcGF0Y2gtPnJlc3VsdAorICogZm9yIHRoZSBjYWxsZXIgdG8gd3JpdGUgaXQgb3V0IHRvIHRoZSBmaW5hbCBkZXN0aW5hdGlvbi4KKyAqLworc3RhdGljIGludCBjaGVja19wYXRjaChzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IGNoYXIgKm9sZF9uYW1lID0gcGF0Y2gtPm9sZF9uYW1lOworCWNvbnN0IGNoYXIgKm5ld19uYW1lID0gcGF0Y2gtPm5ld19uYW1lOworCWNvbnN0IGNoYXIgKm5hbWUgPSBvbGRfbmFtZSA/IG9sZF9uYW1lIDogbmV3X25hbWU7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IE5VTEw7CisJc3RydWN0IHBhdGNoICp0cGF0Y2g7CisJaW50IG9rX2lmX2V4aXN0czsKKwlpbnQgc3RhdHVzOworCisJcGF0Y2gtPnJlamVjdGVkID0gMTsgLyogd2Ugd2lsbCBkcm9wIHRoaXMgYWZ0ZXIgd2Ugc3VjY2VlZCAqLworCisJc3RhdHVzID0gY2hlY2tfcHJlaW1hZ2UocGF0Y2gsICZjZSwgJnN0KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCW9sZF9uYW1lID0gcGF0Y2gtPm9sZF9uYW1lOworCisJLyoKKwkgKiBBIHR5cGUtY2hhbmdlIGRpZmYgaXMgYWx3YXlzIHNwbGl0IGludG8gYSBwYXRjaCB0byBkZWxldGUKKwkgKiBvbGQsIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgcGF0Y2ggdG8gY3JlYXRlIG5ldyAoc2VlCisJICogZGlmZi5jOjpydW5fZGlmZigpKTsgaW4gc3VjaCBhIGNhc2UgaXQgaXMgT2sgdGhhdCB0aGUgZW50cnkKKwkgKiB0byBiZSBkZWxldGVkIGJ5IHRoZSBwcmV2aW91cyBwYXRjaCBpcyBzdGlsbCBpbiB0aGUgd29ya2luZworCSAqIHRyZWUgYW5kIGluIHRoZSBpbmRleC4KKwkgKgorCSAqIEEgcGF0Y2ggdG8gc3dhcC1yZW5hbWUgYmV0d2VlbiBBIGFuZCBCIHdvdWxkIGZpcnN0IHJlbmFtZSBBCisJICogdG8gQiBhbmQgdGhlbiByZW5hbWUgQiB0byBBLiAgV2hpbGUgYXBwbHlpbmcgdGhlIGZpcnN0IG9uZSwKKwkgKiB0aGUgcHJlc2Vuc2Ugb2YgQiBzaG91bGQgbm90IHN0b3AgQSBmcm9tIGdldHRpbmcgcmVuYW1lZCB0bworCSAqIEI7IGFzayB0b19iZV9kZWxldGVkKCkgYWJvdXQgdGhlIGxhdGVyIHJlbmFtZS4gIFJlbW92YWwgb2YKKwkgKiBCIGFuZCByZW5hbWUgZnJvbSBBIHRvIEIgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYnkgYXNraW5nCisJICogd2FzX2RlbGV0ZWQoKS4KKwkgKi8KKwlpZiAoKHRwYXRjaCA9IGluX2ZuX3RhYmxlKG5ld19uYW1lKSkgJiYKKwkgICAgKHdhc19kZWxldGVkKHRwYXRjaCkgfHwgdG9fYmVfZGVsZXRlZCh0cGF0Y2gpKSkKKwkJb2tfaWZfZXhpc3RzID0gMTsKKwllbHNlCisJCW9rX2lmX2V4aXN0cyA9IDA7CisKKwlpZiAobmV3X25hbWUgJiYKKwkgICAgKCgwIDwgcGF0Y2gtPmlzX25ldykgfCAoMCA8IHBhdGNoLT5pc19yZW5hbWUpIHwgcGF0Y2gtPmlzX2NvcHkpKSB7CisJCWludCBlcnIgPSBjaGVja190b19jcmVhdGUobmV3X25hbWUsIG9rX2lmX2V4aXN0cyk7CisKKwkJaWYgKGVyciAmJiB0aHJlZXdheSkgeworCQkJcGF0Y2gtPmRpcmVjdF90b190aHJlZXdheSA9IDE7CisJCX0gZWxzZSBzd2l0Y2ggKGVycikgeworCQljYXNlIDA6CisJCQlicmVhazsgLyogaGFwcHkgKi8KKwkJY2FzZSBFWElTVFNfSU5fSU5ERVg6CisJCQlyZXR1cm4gZXJyb3IoXygiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IiksIG5ld19uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIEVYSVNUU19JTl9XT1JLVFJFRToKKwkJCXJldHVybiBlcnJvcihfKCIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiKSwKKwkJCQkgICAgIG5ld19uYW1lKTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlpZiAoIXBhdGNoLT5uZXdfbW9kZSkgeworCQkJaWYgKDAgPCBwYXRjaC0+aXNfbmV3KQorCQkJCXBhdGNoLT5uZXdfbW9kZSA9IFNfSUZSRUcgfCAwNjQ0OworCQkJZWxzZQorCQkJCXBhdGNoLT5uZXdfbW9kZSA9IHBhdGNoLT5vbGRfbW9kZTsKKwkJfQorCX0KKworCWlmIChuZXdfbmFtZSAmJiBvbGRfbmFtZSkgeworCQlpbnQgc2FtZSA9ICFzdHJjbXAob2xkX25hbWUsIG5ld19uYW1lKTsKKwkJaWYgKCFwYXRjaC0+bmV3X21vZGUpCisJCQlwYXRjaC0+bmV3X21vZGUgPSBwYXRjaC0+b2xkX21vZGU7CisJCWlmICgocGF0Y2gtPm9sZF9tb2RlIF4gcGF0Y2gtPm5ld19tb2RlKSAmIFNfSUZNVCkgeworCQkJaWYgKHNhbWUpCisJCQkJcmV0dXJuIGVycm9yKF8oIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgIgorCQkJCQkgICAgICAgIm1hdGNoIG9sZCBtb2RlICglbykiKSwKKwkJCQkJcGF0Y2gtPm5ld19tb2RlLCBuZXdfbmFtZSwKKwkJCQkJcGF0Y2gtPm9sZF9tb2RlKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gZXJyb3IoXygibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCAiCisJCQkJCSAgICAgICAibWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIpLAorCQkJCQlwYXRjaC0+bmV3X21vZGUsIG5ld19uYW1lLAorCQkJCQlwYXRjaC0+b2xkX21vZGUsIG9sZF9uYW1lKTsKKwkJfQorCX0KKworCWlmIChhcHBseV9kYXRhKHBhdGNoLCAmc3QsIGNlKSA8IDApCisJCXJldHVybiBlcnJvcihfKCIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiKSwgbmFtZSk7CisJcGF0Y2gtPnJlamVjdGVkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19wYXRjaF9saXN0KHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IGVyciA9IDA7CisKKwlwcmVwYXJlX2ZuX3RhYmxlKHBhdGNoKTsKKwl3aGlsZSAocGF0Y2gpIHsKKwkJaWYgKGFwcGx5X3ZlcmJvc2VseSkKKwkJCXNheV9wYXRjaF9uYW1lKHN0ZGVyciwKKwkJCQkgICAgICAgXygiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iKSwgcGF0Y2gpOworCQllcnIgfD0gY2hlY2tfcGF0Y2gocGF0Y2gpOworCQlwYXRjaCA9IHBhdGNoLT5uZXh0OworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHJlYWQgdGhlIHNoYTEgZnJvbSB0aGUgY3VycmVudCBpbmRleCAqLworc3RhdGljIGludCBnZXRfY3VycmVudF9zaGExKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IHBvczsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlyZXR1cm4gLTE7CisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIC0xOworCWhhc2hjcHkoc2hhMSwgYWN0aXZlX2NhY2hlW3Bvc10tPnNoYTEpOworCXJldHVybiAwOworfQorCisvKiBCdWlsZCBhbiBpbmRleCB0aGF0IGNvbnRhaW5zIHRoZSBqdXN0IHRoZSBmaWxlcyBuZWVkZWQgZm9yIGEgM3dheSBtZXJnZSAqLworc3RhdGljIHZvaWQgYnVpbGRfZmFrZV9hbmNlc3RvcihzdHJ1Y3QgcGF0Y2ggKmxpc3QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBwYXRjaCAqcGF0Y2g7CisJc3RydWN0IGluZGV4X3N0YXRlIHJlc3VsdCA9IHsgTlVMTCB9OworCWludCBmZDsKKworCS8qIE9uY2Ugd2Ugc3RhcnQgc3VwcG9ydGluZyB0aGUgcmV2ZXJzZSBwYXRjaCwgaXQgbWF5IGJlCisJICogd29ydGggc2hvd2luZyB0aGUgbmV3IHNoYTEgcHJlZml4LCBidXQgdW50aWwgdGhlbi4uLgorCSAqLworCWZvciAocGF0Y2ggPSBsaXN0OyBwYXRjaDsgcGF0Y2ggPSBwYXRjaC0+bmV4dCkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExX3B0cjsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKworCQluYW1lID0gcGF0Y2gtPm9sZF9uYW1lID8gcGF0Y2gtPm9sZF9uYW1lIDogcGF0Y2gtPm5ld19uYW1lOworCQlpZiAoMCA8IHBhdGNoLT5pc19uZXcpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoZ2V0X3NoYTFfYmxvYihwYXRjaC0+b2xkX3NoYTFfcHJlZml4LCBzaGExKSkKKwkJCS8qIGdpdCBkaWZmIGhhcyBubyBpbmRleCBsaW5lIGZvciBtb2RlL3R5cGUgY2hhbmdlcyAqLworCQkJaWYgKCFwYXRjaC0+bGluZXNfYWRkZWQgJiYgIXBhdGNoLT5saW5lc19kZWxldGVkKSB7CisJCQkJaWYgKGdldF9jdXJyZW50X3NoYTEocGF0Y2gtPm9sZF9uYW1lLCBzaGExKSkKKwkJCQkJZGllKCJtb2RlIGNoYW5nZSBmb3IgJXMsIHdoaWNoIGlzIG5vdCAiCisJCQkJCQkiaW4gY3VycmVudCBIRUFEIiwgbmFtZSk7CisJCQkJc2hhMV9wdHIgPSBzaGExOworCQkJfSBlbHNlCisJCQkJZGllKCJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAiCisJCQkJCSIoJXMpLiIsIG5hbWUpOworCQllbHNlCisJCQlzaGExX3B0ciA9IHNoYTE7CisKKwkJY2UgPSBtYWtlX2NhY2hlX2VudHJ5KHBhdGNoLT5vbGRfbW9kZSwgc2hhMV9wdHIsIG5hbWUsIDAsIDApOworCQlpZiAoIWNlKQorCQkJZGllKF8oIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciKSwgbmFtZSk7CisJCWlmIChhZGRfaW5kZXhfZW50cnkoJnJlc3VsdCwgY2UsIEFERF9DQUNIRV9PS19UT19BREQpKQorCQkJZGllICgiQ291bGQgbm90IGFkZCAlcyB0byB0ZW1wb3JhcnkgaW5kZXgiLCBuYW1lKTsKKwl9CisKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDY2Nik7CisJaWYgKGZkIDwgMCB8fCB3cml0ZV9pbmRleCgmcmVzdWx0LCBmZCkgfHwgY2xvc2UoZmQpKQorCQlkaWUgKCJDb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIiwgZmlsZW5hbWUpOworCisJZGlzY2FyZF9pbmRleCgmcmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQgc3RhdF9wYXRjaF9saXN0KHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IGZpbGVzLCBhZGRzLCBkZWxzOworCisJZm9yIChmaWxlcyA9IGFkZHMgPSBkZWxzID0gMCA7IHBhdGNoIDsgcGF0Y2ggPSBwYXRjaC0+bmV4dCkgeworCQlmaWxlcysrOworCQlhZGRzICs9IHBhdGNoLT5saW5lc19hZGRlZDsKKwkJZGVscyArPSBwYXRjaC0+bGluZXNfZGVsZXRlZDsKKwkJc2hvd19zdGF0cyhwYXRjaCk7CisJfQorCisJcHJpbnRfc3RhdF9zdW1tYXJ5KHN0ZG91dCwgZmlsZXMsIGFkZHMsIGRlbHMpOworfQorCitzdGF0aWMgdm9pZCBudW1zdGF0X3BhdGNoX2xpc3Qoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlmb3IgKCA7IHBhdGNoOyBwYXRjaCA9IHBhdGNoLT5uZXh0KSB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCW5hbWUgPSBwYXRjaC0+bmV3X25hbWUgPyBwYXRjaC0+bmV3X25hbWUgOiBwYXRjaC0+b2xkX25hbWU7CisJCWlmIChwYXRjaC0+aXNfYmluYXJ5KQorCQkJcHJpbnRmKCItXHQtXHQiKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlZFx0JWRcdCIsIHBhdGNoLT5saW5lc19hZGRlZCwgcGF0Y2gtPmxpbmVzX2RlbGV0ZWQpOworCQl3cml0ZV9uYW1lX3F1b3RlZChuYW1lLCBzdGRvdXQsIGxpbmVfdGVybWluYXRpb24pOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19maWxlX21vZGVfbmFtZShjb25zdCBjaGFyICpuZXdkZWxldGUsIHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChtb2RlKQorCQlwcmludGYoIiAlcyBtb2RlICUwNm8gJXNcbiIsIG5ld2RlbGV0ZSwgbW9kZSwgbmFtZSk7CisJZWxzZQorCQlwcmludGYoIiAlcyAlc1xuIiwgbmV3ZGVsZXRlLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19tb2RlX2NoYW5nZShzdHJ1Y3QgcGF0Y2ggKnAsIGludCBzaG93X25hbWUpCit7CisJaWYgKHAtPm9sZF9tb2RlICYmIHAtPm5ld19tb2RlICYmIHAtPm9sZF9tb2RlICE9IHAtPm5ld19tb2RlKSB7CisJCWlmIChzaG93X25hbWUpCisJCQlwcmludGYoIiBtb2RlIGNoYW5nZSAlMDZvID0+ICUwNm8gJXNcbiIsCisJCQkgICAgICAgcC0+b2xkX21vZGUsIHAtPm5ld19tb2RlLCBwLT5uZXdfbmFtZSk7CisJCWVsc2UKKwkJCXByaW50ZigiIG1vZGUgY2hhbmdlICUwNm8gPT4gJTA2b1xuIiwKKwkJCSAgICAgICBwLT5vbGRfbW9kZSwgcC0+bmV3X21vZGUpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19yZW5hbWVfY29weShzdHJ1Y3QgcGF0Y2ggKnApCit7CisJY29uc3QgY2hhciAqcmVuYW1lY29weSA9IHAtPmlzX3JlbmFtZSA/ICJyZW5hbWUiIDogImNvcHkiOworCWNvbnN0IGNoYXIgKm9sZCwgKm5ldzsKKworCS8qIEZpbmQgY29tbW9uIHByZWZpeCAqLworCW9sZCA9IHAtPm9sZF9uYW1lOworCW5ldyA9IHAtPm5ld19uYW1lOworCXdoaWxlICgxKSB7CisJCWNvbnN0IGNoYXIgKnNsYXNoX29sZCwgKnNsYXNoX25ldzsKKwkJc2xhc2hfb2xkID0gc3RyY2hyKG9sZCwgJy8nKTsKKwkJc2xhc2hfbmV3ID0gc3RyY2hyKG5ldywgJy8nKTsKKwkJaWYgKCFzbGFzaF9vbGQgfHwKKwkJICAgICFzbGFzaF9uZXcgfHwKKwkJICAgIHNsYXNoX29sZCAtIG9sZCAhPSBzbGFzaF9uZXcgLSBuZXcgfHwKKwkJICAgIG1lbWNtcChvbGQsIG5ldywgc2xhc2hfbmV3IC0gbmV3KSkKKwkJCWJyZWFrOworCQlvbGQgPSBzbGFzaF9vbGQgKyAxOworCQluZXcgPSBzbGFzaF9uZXcgKyAxOworCX0KKwkvKiBwLT5vbGRfbmFtZSB0aHJ1IG9sZCBpcyB0aGUgY29tbW9uIHByZWZpeCwgYW5kIG9sZCBhbmQgbmV3CisJICogdGhyb3VnaCB0aGUgZW5kIG9mIG5hbWVzIGFyZSByZW5hbWVzCisJICovCisJaWYgKG9sZCAhPSBwLT5vbGRfbmFtZSkKKwkJcHJpbnRmKCIgJXMgJS4qc3slcyA9PiAlc30gKCVkJSUpXG4iLCByZW5hbWVjb3B5LAorCQkgICAgICAgKGludCkob2xkIC0gcC0+b2xkX25hbWUpLCBwLT5vbGRfbmFtZSwKKwkJICAgICAgIG9sZCwgbmV3LCBwLT5zY29yZSk7CisJZWxzZQorCQlwcmludGYoIiAlcyAlcyA9PiAlcyAoJWQlJSlcbiIsIHJlbmFtZWNvcHksCisJCSAgICAgICBwLT5vbGRfbmFtZSwgcC0+bmV3X25hbWUsIHAtPnNjb3JlKTsKKwlzaG93X21vZGVfY2hhbmdlKHAsIDApOworfQorCitzdGF0aWMgdm9pZCBzdW1tYXJ5X3BhdGNoX2xpc3Qoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlzdHJ1Y3QgcGF0Y2ggKnA7CisKKwlmb3IgKHAgPSBwYXRjaDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPmlzX25ldykKKwkJCXNob3dfZmlsZV9tb2RlX25hbWUoImNyZWF0ZSIsIHAtPm5ld19tb2RlLCBwLT5uZXdfbmFtZSk7CisJCWVsc2UgaWYgKHAtPmlzX2RlbGV0ZSkKKwkJCXNob3dfZmlsZV9tb2RlX25hbWUoImRlbGV0ZSIsIHAtPm9sZF9tb2RlLCBwLT5vbGRfbmFtZSk7CisJCWVsc2UgeworCQkJaWYgKHAtPmlzX3JlbmFtZSB8fCBwLT5pc19jb3B5KQorCQkJCXNob3dfcmVuYW1lX2NvcHkocCk7CisJCQllbHNlIHsKKwkJCQlpZiAocC0+c2NvcmUpIHsKKwkJCQkJcHJpbnRmKCIgcmV3cml0ZSAlcyAoJWQlJSlcbiIsCisJCQkJCSAgICAgICBwLT5uZXdfbmFtZSwgcC0+c2NvcmUpOworCQkJCQlzaG93X21vZGVfY2hhbmdlKHAsIDApOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXNob3dfbW9kZV9jaGFuZ2UocCwgMSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhdGNoX3N0YXRzKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IGxpbmVzID0gcGF0Y2gtPmxpbmVzX2FkZGVkICsgcGF0Y2gtPmxpbmVzX2RlbGV0ZWQ7CisKKwlpZiAobGluZXMgPiBtYXhfY2hhbmdlKQorCQltYXhfY2hhbmdlID0gbGluZXM7CisJaWYgKHBhdGNoLT5vbGRfbmFtZSkgeworCQlpbnQgbGVuID0gcXVvdGVfY19zdHlsZShwYXRjaC0+b2xkX25hbWUsIE5VTEwsIE5VTEwsIDApOworCQlpZiAoIWxlbikKKwkJCWxlbiA9IHN0cmxlbihwYXRjaC0+b2xkX25hbWUpOworCQlpZiAobGVuID4gbWF4X2xlbikKKwkJCW1heF9sZW4gPSBsZW47CisJfQorCWlmIChwYXRjaC0+bmV3X25hbWUpIHsKKwkJaW50IGxlbiA9IHF1b3RlX2Nfc3R5bGUocGF0Y2gtPm5ld19uYW1lLCBOVUxMLCBOVUxMLCAwKTsKKwkJaWYgKCFsZW4pCisJCQlsZW4gPSBzdHJsZW4ocGF0Y2gtPm5ld19uYW1lKTsKKwkJaWYgKGxlbiA+IG1heF9sZW4pCisJCQltYXhfbGVuID0gbGVuOworCX0KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2ZpbGUoc3RydWN0IHBhdGNoICpwYXRjaCwgaW50IHJtZGlyX2VtcHR5KQoreworCWlmICh1cGRhdGVfaW5kZXgpIHsKKwkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0Y2gtPm9sZF9uYW1lKSA8IDApCisJCQlkaWUoXygidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IiksIHBhdGNoLT5vbGRfbmFtZSk7CisJfQorCWlmICghY2FjaGVkKSB7CisJCWlmICghcmVtb3ZlX29yX3dhcm4ocGF0Y2gtPm9sZF9tb2RlLCBwYXRjaC0+b2xkX25hbWUpICYmIHJtZGlyX2VtcHR5KSB7CisJCQlyZW1vdmVfcGF0aChwYXRjaC0+b2xkX25hbWUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfaW5kZXhfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBtb2RlLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWludCBuYW1lbGVuID0gc3RybGVuKHBhdGgpOworCXVuc2lnbmVkIGNlX3NpemUgPSBjYWNoZV9lbnRyeV9zaXplKG5hbWVsZW4pOworCisJaWYgKCF1cGRhdGVfaW5kZXgpCisJCXJldHVybjsKKworCWNlID0geGNhbGxvYygxLCBjZV9zaXplKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pOworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKDApOworCWNlLT5jZV9uYW1lbGVuID0gbmFtZWxlbjsKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJY29uc3QgY2hhciAqcyA9IGJ1ZjsKKworCQlpZiAoZ2V0X3NoYTFfaGV4KHMgKyBzdHJsZW4oIlN1YnByb2plY3QgY29tbWl0ICIpLCBjZS0+c2hhMSkpCisJCQlkaWUoXygiY29ycnVwdCBwYXRjaCBmb3Igc3VicHJvamVjdCAlcyIpLCBwYXRoKTsKKwl9IGVsc2UgeworCQlpZiAoIWNhY2hlZCkgeworCQkJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKQorCQkJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIpLAorCQkJCQkgIHBhdGgpOworCQkJZmlsbF9zdGF0X2NhY2hlX2luZm8oY2UsICZzdCk7CisJCX0KKwkJaWYgKHdyaXRlX3NoYTFfZmlsZShidWYsIHNpemUsIGJsb2JfdHlwZSwgY2UtPnNoYTEpIDwgMCkKKwkJCWRpZShfKCJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIpLCBwYXRoKTsKKwl9CisJaWYgKGFkZF9jYWNoZV9lbnRyeShjZSwgQUREX0NBQ0hFX09LX1RPX0FERCkgPCAwKQorCQlkaWUoXygidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiKSwgcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0cmJ1ZiBuYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWlmICghbHN0YXQocGF0aCwgJnN0KSAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBta2RpcihwYXRoLCAwNzc3KTsKKwl9CisKKwlpZiAoaGFzX3N5bWxpbmtzICYmIFNfSVNMTksobW9kZSkpCisJCS8qIEFsdGhvdWdoIGJ1ZjpzaXplIGlzIGNvdW50ZWQgc3RyaW5nLCBpdCBhbHNvIGlzIE5VTAorCQkgKiB0ZXJtaW5hdGVkLgorCQkgKi8KKwkJcmV0dXJuIHN5bWxpbmsoYnVmLCBwYXRoKTsKKworCWZkID0gb3BlbihwYXRoLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFksIChtb2RlICYgMDEwMCkgPyAwNzc3IDogMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGNvbnZlcnRfdG9fd29ya2luZ190cmVlKHBhdGgsIGJ1Ziwgc2l6ZSwgJm5idWYpKSB7CisJCXNpemUgPSBuYnVmLmxlbjsKKwkJYnVmICA9IG5idWYuYnVmOworCX0KKwl3cml0ZV9vcl9kaWUoZmQsIGJ1Ziwgc2l6ZSk7CisJc3RyYnVmX3JlbGVhc2UoJm5idWYpOworCisJaWYgKGNsb3NlKGZkKSA8IDApCisJCWRpZV9lcnJubyhfKCJjbG9zaW5nIGZpbGUgJyVzJyIpLCBwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIG9wdGltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IHRoZSBkaXJlY3RvcmllcyBleGlzdCwKKyAqIHdoaWNoIGlzIHRydWUgOTklIG9mIHRoZSB0aW1lIGFueXdheS4gSWYgdGhleSBkb24ndCwKKyAqIHdlIGNyZWF0ZSB0aGVtIGFuZCB0cnkgYWdhaW4uCisgKi8KK3N0YXRpYyB2b2lkIGNyZWF0ZV9vbmVfZmlsZShjaGFyICpwYXRoLCB1bnNpZ25lZCBtb2RlLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoY2FjaGVkKQorCQlyZXR1cm47CisJaWYgKCF0cnlfY3JlYXRlX2ZpbGUocGF0aCwgbW9kZSwgYnVmLCBzaXplKSkKKwkJcmV0dXJuOworCisJaWYgKGVycm5vID09IEVOT0VOVCkgeworCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhwYXRoKSkKKwkJCXJldHVybjsKKwkJaWYgKCF0cnlfY3JlYXRlX2ZpbGUocGF0aCwgbW9kZSwgYnVmLCBzaXplKSkKKwkJCXJldHVybjsKKwl9CisKKwlpZiAoZXJybm8gPT0gRUVYSVNUIHx8IGVycm5vID09IEVBQ0NFUykgeworCQkvKiBXZSBtYXkgYmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIGZpbGUgd2hlcmUgYSBkaXJlY3RvcnkKKwkJICogdXNlZCB0byBiZS4KKwkJICovCisJCXN0cnVjdCBzdGF0IHN0OworCQlpZiAoIWxzdGF0KHBhdGgsICZzdCkgJiYgKCFTX0lTRElSKHN0LnN0X21vZGUpIHx8ICFybWRpcihwYXRoKSkpCisJCQllcnJubyA9IEVFWElTVDsKKwl9CisKKwlpZiAoZXJybm8gPT0gRUVYSVNUKSB7CisJCXVuc2lnbmVkIGludCBuciA9IGdldHBpZCgpOworCisJCWZvciAoOzspIHsKKwkJCWNoYXIgbmV3cGF0aFtQQVRIX01BWF07CisJCQlta3NucGF0aChuZXdwYXRoLCBzaXplb2YobmV3cGF0aCksICIlc34ldSIsIHBhdGgsIG5yKTsKKwkJCWlmICghdHJ5X2NyZWF0ZV9maWxlKG5ld3BhdGgsIG1vZGUsIGJ1Ziwgc2l6ZSkpIHsKKwkJCQlpZiAoIXJlbmFtZShuZXdwYXRoLCBwYXRoKSkKKwkJCQkJcmV0dXJuOworCQkJCXVubGlua19vcl93YXJuKG5ld3BhdGgpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGVycm5vICE9IEVFWElTVCkKKwkJCQlicmVhazsKKwkJCSsrbnI7CisJCX0KKwl9CisJZGllX2Vycm5vKF8oInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIpLCBwYXRoLCBtb2RlKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2NvbmZsaWN0ZWRfc3RhZ2VzX2ZpbGUoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlpbnQgc3RhZ2UsIG5hbWVsZW47CisJdW5zaWduZWQgY2Vfc2l6ZSwgbW9kZTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJaWYgKCF1cGRhdGVfaW5kZXgpCisJCXJldHVybjsKKwluYW1lbGVuID0gc3RybGVuKHBhdGNoLT5uZXdfbmFtZSk7CisJY2Vfc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobmFtZWxlbik7CisJbW9kZSA9IHBhdGNoLT5uZXdfbW9kZSA/IHBhdGNoLT5uZXdfbW9kZSA6IChTX0lGUkVHIHwgMDY0NCk7CisKKwlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGNoLT5uZXdfbmFtZSk7CisJZm9yIChzdGFnZSA9IDE7IHN0YWdlIDwgNDsgc3RhZ2UrKykgeworCQlpZiAoaXNfbnVsbF9zaGExKHBhdGNoLT50aHJlZXdheV9zdGFnZVtzdGFnZSAtIDFdKSkKKwkJCWNvbnRpbnVlOworCQljZSA9IHhjYWxsb2MoMSwgY2Vfc2l6ZSk7CisJCW1lbWNweShjZS0+bmFtZSwgcGF0Y2gtPm5ld19uYW1lLCBuYW1lbGVuKTsKKwkJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShtb2RlKTsKKwkJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKHN0YWdlKTsKKwkJY2UtPmNlX25hbWVsZW4gPSBuYW1lbGVuOworCQloYXNoY3B5KGNlLT5zaGExLCBwYXRjaC0+dGhyZWV3YXlfc3RhZ2Vbc3RhZ2UgLSAxXSk7CisJCWlmIChhZGRfY2FjaGVfZW50cnkoY2UsIEFERF9DQUNIRV9PS19UT19BREQpIDwgMCkKKwkJCWRpZShfKCJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIpLCBwYXRjaC0+bmV3X25hbWUpOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2ZpbGUoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwljaGFyICpwYXRoID0gcGF0Y2gtPm5ld19uYW1lOworCXVuc2lnbmVkIG1vZGUgPSBwYXRjaC0+bmV3X21vZGU7CisJdW5zaWduZWQgbG9uZyBzaXplID0gcGF0Y2gtPnJlc3VsdHNpemU7CisJY2hhciAqYnVmID0gcGF0Y2gtPnJlc3VsdDsKKworCWlmICghbW9kZSkKKwkJbW9kZSA9IFNfSUZSRUcgfCAwNjQ0OworCWNyZWF0ZV9vbmVfZmlsZShwYXRoLCBtb2RlLCBidWYsIHNpemUpOworCisJaWYgKHBhdGNoLT5jb25mbGljdGVkX3RocmVld2F5KQorCQlhZGRfY29uZmxpY3RlZF9zdGFnZXNfZmlsZShwYXRjaCk7CisJZWxzZQorCQlhZGRfaW5kZXhfZmlsZShwYXRoLCBtb2RlLCBidWYsIHNpemUpOworfQorCisvKiBwaGFzZSB6ZXJvIGlzIHRvIHJlbW92ZSwgcGhhc2Ugb25lIGlzIHRvIGNyZWF0ZSAqLworc3RhdGljIHZvaWQgd3JpdGVfb3V0X29uZV9yZXN1bHQoc3RydWN0IHBhdGNoICpwYXRjaCwgaW50IHBoYXNlKQoreworCWlmIChwYXRjaC0+aXNfZGVsZXRlID4gMCkgeworCQlpZiAocGhhc2UgPT0gMCkKKwkJCXJlbW92ZV9maWxlKHBhdGNoLCAxKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGF0Y2gtPmlzX25ldyA+IDAgfHwgcGF0Y2gtPmlzX2NvcHkpIHsKKwkJaWYgKHBoYXNlID09IDEpCisJCQljcmVhdGVfZmlsZShwYXRjaCk7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBSZW5hbWUgb3IgbW9kaWZpY2F0aW9uIGJvaWxzIGRvd24gdG8gdGhlIHNhbWUKKwkgKiB0aGluZzogcmVtb3ZlIHRoZSBvbGQsIHdyaXRlIHRoZSBuZXcKKwkgKi8KKwlpZiAocGhhc2UgPT0gMCkKKwkJcmVtb3ZlX2ZpbGUocGF0Y2gsIHBhdGNoLT5pc19yZW5hbWUpOworCWlmIChwaGFzZSA9PSAxKQorCQljcmVhdGVfZmlsZShwYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfb3V0X29uZV9yZWplY3Qoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlGSUxFICpyZWo7CisJY2hhciBuYW1lYnVmW1BBVEhfTUFYXTsKKwlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWc7CisJaW50IGNudCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZm9yIChjbnQgPSAwLCBmcmFnID0gcGF0Y2gtPmZyYWdtZW50czsgZnJhZzsgZnJhZyA9IGZyYWctPm5leHQpIHsKKwkJaWYgKCFmcmFnLT5yZWplY3RlZCkKKwkJCWNvbnRpbnVlOworCQljbnQrKzsKKwl9CisKKwlpZiAoIWNudCkgeworCQlpZiAoYXBwbHlfdmVyYm9zZWx5KQorCQkJc2F5X3BhdGNoX25hbWUoc3RkZXJyLAorCQkJCSAgICAgICBfKCJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIiksIHBhdGNoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYmVjYXVzZSBhIHJlbW92YWwgcGF0Y2ggdGhhdCBsZWF2ZXMKKwkgKiBjb250ZW50cyBhcmUgbWFya2VkICJyZWplY3RlZCIgYXQgdGhlIHBhdGNoIGxldmVsLgorCSAqLworCWlmICghcGF0Y2gtPm5ld19uYW1lKQorCQlkaWUoXygiaW50ZXJuYWwgZXJyb3IiKSk7CisKKwkvKiBTYXkgdGhpcyBldmVuIHdpdGhvdXQgLS12ZXJib3NlICovCisJc3RyYnVmX2FkZGYoJnNiLCBRXygiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIiwKKwkJCSAgICAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIsCisJCQkgICAgY250KSwKKwkJICAgIGNudCk7CisJc2F5X3BhdGNoX25hbWUoc3RkZXJyLCBzYi5idWYsIHBhdGNoKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJY250ID0gc3RybGVuKHBhdGNoLT5uZXdfbmFtZSk7CisJaWYgKEFSUkFZX1NJWkUobmFtZWJ1ZikgPD0gY250ICsgNSkgeworCQljbnQgPSBBUlJBWV9TSVpFKG5hbWVidWYpIC0gNTsKKwkJd2FybmluZyhfKCJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiKSwKKwkJCWNudCAtIDEsIHBhdGNoLT5uZXdfbmFtZSk7CisJfQorCW1lbWNweShuYW1lYnVmLCBwYXRjaC0+bmV3X25hbWUsIGNudCk7CisJbWVtY3B5KG5hbWVidWYgKyBjbnQsICIucmVqIiwgNSk7CisKKwlyZWogPSBmb3BlbihuYW1lYnVmLCAidyIpOworCWlmICghcmVqKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IG9wZW4gJXM6ICVzIiksIG5hbWVidWYsIHN0cmVycm9yKGVycm5vKSk7CisKKwkvKiBOb3JtYWwgZ2l0IHRvb2xzIG5ldmVyIGRlYWwgd2l0aCAucmVqLCBzbyBkbyBub3QgcHJldGVuZAorCSAqIHRoaXMgaXMgYSBnaXQgcGF0Y2ggYnkgc2F5aW5nIC0tZ2l0IG5vciBnaXZlIGV4dGVuZGVkCisJICogaGVhZGVycy4gIFdoaWxlIGF0IGl0LCBtYXliZSBwbGVhc2UgImtvbXBhcmUiIHRoYXQgd2FudHMKKwkgKiB0aGUgdHJhaWxpbmcgVEFCIGFuZCBzb21lIGdhcmJhZ2UgYXQgdGhlIGVuZCBvZiBsaW5lIDstKS4KKwkgKi8KKwlmcHJpbnRmKHJlaiwgImRpZmYgYS8lcyBiLyVzXHQocmVqZWN0ZWQgaHVua3MpXG4iLAorCQlwYXRjaC0+bmV3X25hbWUsIHBhdGNoLT5uZXdfbmFtZSk7CisJZm9yIChjbnQgPSAxLCBmcmFnID0gcGF0Y2gtPmZyYWdtZW50czsKKwkgICAgIGZyYWc7CisJICAgICBjbnQrKywgZnJhZyA9IGZyYWctPm5leHQpIHsKKwkJaWYgKCFmcmFnLT5yZWplY3RlZCkgeworCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iKSwgY250KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJSZWplY3RlZCBodW5rICMlZC4iKSwgY250KTsKKwkJZnByaW50ZihyZWosICIlLipzIiwgZnJhZy0+c2l6ZSwgZnJhZy0+cGF0Y2gpOworCQlpZiAoZnJhZy0+cGF0Y2hbZnJhZy0+c2l6ZS0xXSAhPSAnXG4nKQorCQkJZnB1dGMoJ1xuJywgcmVqKTsKKwl9CisJZmNsb3NlKHJlaik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHdyaXRlX291dF9yZXN1bHRzKHN0cnVjdCBwYXRjaCAqbGlzdCkKK3sKKwlpbnQgcGhhc2U7CisJaW50IGVycnMgPSAwOworCXN0cnVjdCBwYXRjaCAqbDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY3BhdGggPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWZvciAocGhhc2UgPSAwOyBwaGFzZSA8IDI7IHBoYXNlKyspIHsKKwkJbCA9IGxpc3Q7CisJCXdoaWxlIChsKSB7CisJCQlpZiAobC0+cmVqZWN0ZWQpCisJCQkJZXJycyA9IDE7CisJCQllbHNlIHsKKwkJCQl3cml0ZV9vdXRfb25lX3Jlc3VsdChsLCBwaGFzZSk7CisJCQkJaWYgKHBoYXNlID09IDEpIHsKKwkJCQkJaWYgKHdyaXRlX291dF9vbmVfcmVqZWN0KGwpKQorCQkJCQkJZXJycyA9IDE7CisJCQkJCWlmIChsLT5jb25mbGljdGVkX3RocmVld2F5KSB7CisJCQkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmNwYXRoLCBsLT5uZXdfbmFtZSk7CisJCQkJCQllcnJzID0gMTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWwgPSBsLT5uZXh0OworCQl9CisJfQorCisJaWYgKGNwYXRoLm5yKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJCXNvcnRfc3RyaW5nX2xpc3QoJmNwYXRoKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmY3BhdGgpCisJCQlmcHJpbnRmKHN0ZGVyciwgIlUgJXNcbiIsIGl0ZW0tPnN0cmluZyk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZjcGF0aCwgMCk7CisKKwkJcmVyZXJlKDApOworCX0KKworCXJldHVybiBlcnJzOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGU7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGltaXRfYnlfbmFtZTsKK3N0YXRpYyBpbnQgaGFzX2luY2x1ZGU7CitzdGF0aWMgdm9pZCBhZGRfbmFtZV9saW1pdChjb25zdCBjaGFyICpuYW1lLCBpbnQgZXhjbHVkZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisKKwlpdCA9IHN0cmluZ19saXN0X2FwcGVuZCgmbGltaXRfYnlfbmFtZSwgbmFtZSk7CisJaXQtPnV0aWwgPSBleGNsdWRlID8gTlVMTCA6ICh2b2lkICopIDE7Cit9CisKK3N0YXRpYyBpbnQgdXNlX3BhdGNoKHN0cnVjdCBwYXRjaCAqcCkKK3sKKwljb25zdCBjaGFyICpwYXRobmFtZSA9IHAtPm5ld19uYW1lID8gcC0+bmV3X25hbWUgOiBwLT5vbGRfbmFtZTsKKwlpbnQgaTsKKworCS8qIFBhdGhzIG91dHNpZGUgYXJlIG5vdCB0b3VjaGVkIHJlZ2FyZGxlc3Mgb2YgIi0taW5jbHVkZSIgKi8KKwlpZiAoMCA8IHByZWZpeF9sZW5ndGgpIHsKKwkJaW50IHBhdGhsZW4gPSBzdHJsZW4ocGF0aG5hbWUpOworCQlpZiAocGF0aGxlbiA8PSBwcmVmaXhfbGVuZ3RoIHx8CisJCSAgICBtZW1jbXAocHJlZml4LCBwYXRobmFtZSwgcHJlZml4X2xlbmd0aCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBTZWUgaWYgaXQgbWF0Y2hlcyBhbnkgb2YgZXhjbHVkZS9pbmNsdWRlIHJ1bGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGltaXRfYnlfbmFtZS5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCA9ICZsaW1pdF9ieV9uYW1lLml0ZW1zW2ldOworCQlpZiAoIWZubWF0Y2goaXQtPnN0cmluZywgcGF0aG5hbWUsIDApKQorCQkJcmV0dXJuIChpdC0+dXRpbCAhPSBOVUxMKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGhhZCBhbnkgaW5jbHVkZSwgYSBwYXRoIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55IHJ1bGUgaXMKKwkgKiBub3QgdXNlZC4gIE90aGVyd2lzZSwgd2Ugc2F3IGJ1bmNoIG9mIGV4Y2x1ZGUgcnVsZXMgKG9yIG5vbmUpCisJICogYW5kIHN1Y2ggYSBwYXRoIGlzIHVzZWQuCisJICovCisJcmV0dXJuICFoYXNfaW5jbHVkZTsKK30KKworCitzdGF0aWMgdm9pZCBwcmVmaXhfb25lKGNoYXIgKipuYW1lKQoreworCWNoYXIgKm9sZF9uYW1lID0gKm5hbWU7CisJaWYgKCFvbGRfbmFtZSkKKwkJcmV0dXJuOworCSpuYW1lID0geHN0cmR1cChwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCAqbmFtZSkpOworCWZyZWUob2xkX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBwcmVmaXhfcGF0Y2hlcyhzdHJ1Y3QgcGF0Y2ggKnApCit7CisJaWYgKCFwcmVmaXggfHwgcC0+aXNfdG9wbGV2ZWxfcmVsYXRpdmUpCisJCXJldHVybjsKKwlmb3IgKCA7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXByZWZpeF9vbmUoJnAtPm5ld19uYW1lKTsKKwkJcHJlZml4X29uZSgmcC0+b2xkX25hbWUpOworCX0KK30KKworI2RlZmluZSBJTkFDQ1VSQVRFX0VPRgkoMTw8MCkKKyNkZWZpbmUgUkVDT1VOVAkJKDE8PDEpCisKK3N0YXRpYyBpbnQgYXBwbHlfcGF0Y2goaW50IGZkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG9wdGlvbnMpCit7CisJc2l6ZV90IG9mZnNldDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOyAvKiBvd25zIHRoZSBwYXRjaCB0ZXh0ICovCisJc3RydWN0IHBhdGNoICpsaXN0ID0gTlVMTCwgKipsaXN0cCA9ICZsaXN0OworCWludCBza2lwcGVkX3BhdGNoID0gMDsKKworCXBhdGNoX2lucHV0X2ZpbGUgPSBmaWxlbmFtZTsKKwlyZWFkX3BhdGNoX2ZpbGUoJmJ1ZiwgZmQpOworCW9mZnNldCA9IDA7CisJd2hpbGUgKG9mZnNldCA8IGJ1Zi5sZW4pIHsKKwkJc3RydWN0IHBhdGNoICpwYXRjaDsKKwkJaW50IG5yOworCisJCXBhdGNoID0geGNhbGxvYygxLCBzaXplb2YoKnBhdGNoKSk7CisJCXBhdGNoLT5pbmFjY3VyYXRlX2VvZiA9ICEhKG9wdGlvbnMgJiBJTkFDQ1VSQVRFX0VPRik7CisJCXBhdGNoLT5yZWNvdW50ID0gICEhKG9wdGlvbnMgJiBSRUNPVU5UKTsKKwkJbnIgPSBwYXJzZV9jaHVuayhidWYuYnVmICsgb2Zmc2V0LCBidWYubGVuIC0gb2Zmc2V0LCBwYXRjaCk7CisJCWlmIChuciA8IDApCisJCQlicmVhazsKKwkJaWYgKGFwcGx5X2luX3JldmVyc2UpCisJCQlyZXZlcnNlX3BhdGNoZXMocGF0Y2gpOworCQlpZiAocHJlZml4KQorCQkJcHJlZml4X3BhdGNoZXMocGF0Y2gpOworCQlpZiAodXNlX3BhdGNoKHBhdGNoKSkgeworCQkJcGF0Y2hfc3RhdHMocGF0Y2gpOworCQkJKmxpc3RwID0gcGF0Y2g7CisJCQlsaXN0cCA9ICZwYXRjaC0+bmV4dDsKKwkJfQorCQllbHNlIHsKKwkJCWZyZWVfcGF0Y2gocGF0Y2gpOworCQkJc2tpcHBlZF9wYXRjaCsrOworCQl9CisJCW9mZnNldCArPSBucjsKKwl9CisKKwlpZiAoIWxpc3QgJiYgIXNraXBwZWRfcGF0Y2gpCisJCWRpZShfKCJ1bnJlY29nbml6ZWQgaW5wdXQiKSk7CisKKwlpZiAod2hpdGVzcGFjZV9lcnJvciAmJiAod3NfZXJyb3JfYWN0aW9uID09IGRpZV9vbl93c19lcnJvcikpCisJCWFwcGx5ID0gMDsKKworCXVwZGF0ZV9pbmRleCA9IGNoZWNrX2luZGV4ICYmIGFwcGx5OworCWlmICh1cGRhdGVfaW5kZXggJiYgbmV3ZmQgPCAwKQorCQluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDEpOworCisJaWYgKGNoZWNrX2luZGV4KSB7CisJCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiKSk7CisJfQorCisJaWYgKChjaGVjayB8fCBhcHBseSkgJiYKKwkgICAgY2hlY2tfcGF0Y2hfbGlzdChsaXN0KSA8IDAgJiYKKwkgICAgIWFwcGx5X3dpdGhfcmVqZWN0KQorCQlleGl0KDEpOworCisJaWYgKGFwcGx5ICYmIHdyaXRlX291dF9yZXN1bHRzKGxpc3QpKSB7CisJCWlmIChhcHBseV93aXRoX3JlamVjdCkKKwkJCWV4aXQoMSk7CisJCS8qIHdpdGggLS0zd2F5LCB3ZSBzdGlsbCBuZWVkIHRvIHdyaXRlIHRoZSBpbmRleCBvdXQgKi8KKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGZha2VfYW5jZXN0b3IpCisJCWJ1aWxkX2Zha2VfYW5jZXN0b3IobGlzdCwgZmFrZV9hbmNlc3Rvcik7CisKKwlpZiAoZGlmZnN0YXQpCisJCXN0YXRfcGF0Y2hfbGlzdChsaXN0KTsKKworCWlmIChudW1zdGF0KQorCQludW1zdGF0X3BhdGNoX2xpc3QobGlzdCk7CisKKwlpZiAoc3VtbWFyeSkKKwkJc3VtbWFyeV9wYXRjaF9saXN0KGxpc3QpOworCisJZnJlZV9wYXRjaF9saXN0KGxpc3QpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmluZ19saXN0X2NsZWFyKCZmbl90YWJsZSwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2FwcGx5X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJhcHBseS53aGl0ZXNwYWNlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlLCB2YXIsIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImFwcGx5Lmlnbm9yZXdoaXRlc3BhY2UiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZhcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2UsIHZhciwgdmFsdWUpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9leGNsdWRlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlhZGRfbmFtZV9saW1pdChhcmcsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9pbmNsdWRlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlhZGRfbmFtZV9saW1pdChhcmcsIDApOworCWhhc19pbmNsdWRlID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfcChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXBfdmFsdWUgPSBhdG9pKGFyZyk7CisJcF92YWx1ZV9rbm93biA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3ooY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCWxpbmVfdGVybWluYXRpb24gPSAnXG4nOworCWVsc2UKKwkJbGluZV90ZXJtaW5hdGlvbiA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3NwYWNlX2NoYW5nZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkKKwkJd3NfaWdub3JlX2FjdGlvbiA9IGlnbm9yZV93c19ub25lOworCWVsc2UKKwkJd3NfaWdub3JlX2FjdGlvbiA9IGlnbm9yZV93c19jaGFuZ2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3doaXRlc3BhY2UoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWNvbnN0IGNoYXIgKip3aGl0ZXNwYWNlX29wdGlvbiA9IG9wdC0+dmFsdWU7CisKKwkqd2hpdGVzcGFjZV9vcHRpb24gPSBhcmc7CisJcGFyc2Vfd2hpdGVzcGFjZV9vcHRpb24oYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfZGlyZWN0b3J5KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJvb3RfbGVuID0gc3RybGVuKGFyZyk7CisJaWYgKHJvb3RfbGVuICYmIGFyZ1tyb290X2xlbiAtIDFdICE9ICcvJykgeworCQljaGFyICpuZXdfcm9vdDsKKwkJcm9vdCA9IG5ld19yb290ID0geG1hbGxvYyhyb290X2xlbiArIDIpOworCQlzdHJjcHkobmV3X3Jvb3QsIGFyZyk7CisJCXN0cmNweShuZXdfcm9vdCArIHJvb3RfbGVuKyssICIvIik7CisJfSBlbHNlCisJCXJvb3QgPSBhcmc7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfYXBwbHkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXhfKQoreworCWludCBpOworCWludCBlcnJzID0gMDsKKwlpbnQgaXNfbm90X2dpdGRpciA9ICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeTsKKwlpbnQgZm9yY2VfYXBwbHkgPSAwOworCisJY29uc3QgY2hhciAqd2hpdGVzcGFjZV9vcHRpb24gPSBOVUxMOworCisJc3RydWN0IG9wdGlvbiBidWlsdGluX2FwcGx5X29wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJleGNsdWRlIiwgTlVMTCwgTl8oInBhdGgiKSwKKwkJCU5fKCJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIiksCisJCQkwLCBvcHRpb25fcGFyc2VfZXhjbHVkZSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImluY2x1ZGUiLCBOVUxMLCBOXygicGF0aCIpLAorCQkJTl8oImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiKSwKKwkJCTAsIG9wdGlvbl9wYXJzZV9pbmNsdWRlIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAncCcsIE5VTEwsIE5VTEwsIE5fKCJudW0iKSwKKwkJCU5fKCJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIpLAorCQkJMCwgb3B0aW9uX3BhcnNlX3AgfSwKKwkJT1BUX0JPT0xFQU4oMCwgIm5vLWFkZCIsICZub19hZGQsCisJCQlOXygiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgInN0YXQiLCAmZGlmZnN0YXQsCisJCQlOXygiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IikpLAorCQlPUFRfTk9PUF9OT0FSRygwLCAiYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IiksCisJCU9QVF9OT09QX05PQVJHKDAsICJiaW5hcnkiKSwKKwkJT1BUX0JPT0xFQU4oMCwgIm51bXN0YXQiLCAmbnVtc3RhdCwKKwkJCU5fKCJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIikpLAorCQlPUFRfQk9PTEVBTigwLCAic3VtbWFyeSIsICZzdW1tYXJ5LAorCQkJTl8oImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiKSksCisJCU9QVF9CT09MRUFOKDAsICJjaGVjayIsICZjaGVjaywKKwkJCU5fKCJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIikpLAorCQlPUFRfQk9PTEVBTigwLCAiaW5kZXgiLCAmY2hlY2tfaW5kZXgsCisJCQlOXygibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IikpLAorCQlPUFRfQk9PTEVBTigwLCAiY2FjaGVkIiwgJmNhY2hlZCwKKwkJCU5fKCJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImFwcGx5IiwgJmZvcmNlX2FwcGx5LAorCQkJTl8oImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIikpLAorCQlPUFRfQk9PTCgnMycsICIzd2F5IiwgJnRocmVld2F5LAorCQkJIE5fKCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIpKSwKKwkJT1BUX0ZJTEVOQU1FKDAsICJidWlsZC1mYWtlLWFuY2VzdG9yIiwgJmZha2VfYW5jZXN0b3IsCisJCQlOXygiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAneicsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQlOXygicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiKSwKKwkJCVBBUlNFX09QVF9OT0FSRywgb3B0aW9uX3BhcnNlX3ogfSwKKwkJT1BUX0lOVEVHRVIoJ0MnLCBOVUxMLCAmcF9jb250ZXh0LAorCQkJCU5fKCJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAid2hpdGVzcGFjZSIsICZ3aGl0ZXNwYWNlX29wdGlvbiwgTl8oImFjdGlvbiIpLAorCQkJTl8oImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIiksCisJCQkwLCBvcHRpb25fcGFyc2Vfd2hpdGVzcGFjZSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImlnbm9yZS1zcGFjZS1jaGFuZ2UiLCBOVUxMLCBOVUxMLAorCQkJTl8oImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiKSwKKwkJCVBBUlNFX09QVF9OT0FSRywgb3B0aW9uX3BhcnNlX3NwYWNlX2NoYW5nZSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImlnbm9yZS13aGl0ZXNwYWNlIiwgTlVMTCwgTlVMTCwKKwkJCU5fKCJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IiksCisJCQlQQVJTRV9PUFRfTk9BUkcsIG9wdGlvbl9wYXJzZV9zcGFjZV9jaGFuZ2UgfSwKKwkJT1BUX0JPT0xFQU4oJ1InLCAicmV2ZXJzZSIsICZhcHBseV9pbl9yZXZlcnNlLAorCQkJTl8oImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIikpLAorCQlPUFRfQk9PTEVBTigwLCAidW5pZGlmZi16ZXJvIiwgJnVuaWRpZmZfemVybywKKwkJCU5fKCJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgInJlamVjdCIsICZhcHBseV93aXRoX3JlamVjdCwKKwkJCU5fKCJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImFsbG93LW92ZXJsYXAiLCAmYWxsb3dfb3ZlcmxhcCwKKwkJCU5fKCJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIpKSwKKwkJT1BUX19WRVJCT1NFKCZhcHBseV92ZXJib3NlbHksIE5fKCJiZSB2ZXJib3NlIikpLAorCQlPUFRfQklUKDAsICJpbmFjY3VyYXRlLWVvZiIsICZvcHRpb25zLAorCQkJTl8oInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIiksCisJCQlJTkFDQ1VSQVRFX0VPRiksCisJCU9QVF9CSVQoMCwgInJlY291bnQiLCAmb3B0aW9ucywKKwkJCU5fKCJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiKSwKKwkJCVJFQ09VTlQpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImRpcmVjdG9yeSIsIE5VTEwsIE5fKCJyb290IiksCisJCQlOXygicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIpLAorCQkJMCwgb3B0aW9uX3BhcnNlX2RpcmVjdG9yeSB9LAorCQlPUFRfRU5EKCkKKwl9OworCisJcHJlZml4ID0gcHJlZml4XzsKKwlwcmVmaXhfbGVuZ3RoID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCWdpdF9jb25maWcoZ2l0X2FwcGx5X2NvbmZpZywgTlVMTCk7CisJaWYgKGFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSkKKwkJcGFyc2Vfd2hpdGVzcGFjZV9vcHRpb24oYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlKTsKKwlpZiAoYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlKQorCQlwYXJzZV9pZ25vcmV3aGl0ZXNwYWNlX29wdGlvbihhcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2UpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2FwcGx5X29wdGlvbnMsCisJCQlhcHBseV91c2FnZSwgMCk7CisKKwlpZiAoYXBwbHlfd2l0aF9yZWplY3QgJiYgdGhyZWV3YXkpCisJCWRpZSgiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iKTsKKwlpZiAoY2FjaGVkICYmIHRocmVld2F5KQorCQlkaWUoIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIik7CisJaWYgKHRocmVld2F5KSB7CisJCWlmIChpc19ub3RfZ2l0ZGlyKQorCQkJZGllKF8oIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpKTsKKwkJY2hlY2tfaW5kZXggPSAxOworCX0KKwlpZiAoYXBwbHlfd2l0aF9yZWplY3QpCisJCWFwcGx5ID0gYXBwbHlfdmVyYm9zZWx5ID0gMTsKKwlpZiAoIWZvcmNlX2FwcGx5ICYmIChkaWZmc3RhdCB8fCBudW1zdGF0IHx8IHN1bW1hcnkgfHwgY2hlY2sgfHwgZmFrZV9hbmNlc3RvcikpCisJCWFwcGx5ID0gMDsKKwlpZiAoY2hlY2tfaW5kZXggJiYgaXNfbm90X2dpdGRpcikKKwkJZGllKF8oIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiKSk7CisJaWYgKGNhY2hlZCkgeworCQlpZiAoaXNfbm90X2dpdGRpcikKKwkJCWRpZShfKCItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpKTsKKwkJY2hlY2tfaW5kZXggPSAxOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWludCBmZDsKKworCQlpZiAoIXN0cmNtcChhcmcsICItIikpIHsKKwkJCWVycnMgfD0gYXBwbHlfcGF0Y2goMCwgIjxzdGRpbj4iLCBvcHRpb25zKTsKKwkJCXJlYWRfc3RkaW4gPSAwOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoMCA8IHByZWZpeF9sZW5ndGgpCisJCQlhcmcgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBhcmcpOworCisJCWZkID0gb3BlbihhcmcsIE9fUkRPTkxZKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjYW4ndCBvcGVuIHBhdGNoICclcyciKSwgYXJnKTsKKwkJcmVhZF9zdGRpbiA9IDA7CisJCXNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZSh3aGl0ZXNwYWNlX29wdGlvbik7CisJCWVycnMgfD0gYXBwbHlfcGF0Y2goZmQsIGFyZywgb3B0aW9ucyk7CisJCWNsb3NlKGZkKTsKKwl9CisJc2V0X2RlZmF1bHRfd2hpdGVzcGFjZV9tb2RlKHdoaXRlc3BhY2Vfb3B0aW9uKTsKKwlpZiAocmVhZF9zdGRpbikKKwkJZXJycyB8PSBhcHBseV9wYXRjaCgwLCAiPHN0ZGluPiIsIG9wdGlvbnMpOworCWlmICh3aGl0ZXNwYWNlX2Vycm9yKSB7CisJCWlmIChzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzICYmCisJCSAgICBzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzIDwgd2hpdGVzcGFjZV9lcnJvcikgeworCQkJaW50IHNxdWVsY2hlZCA9CisJCQkJd2hpdGVzcGFjZV9lcnJvciAtIHNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnM7CisJCQl3YXJuaW5nKFFfKCJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIsCisJCQkJICAgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIsCisJCQkJICAgc3F1ZWxjaGVkKSwKKwkJCQlzcXVlbGNoZWQpOworCQl9CisJCWlmICh3c19lcnJvcl9hY3Rpb24gPT0gZGllX29uX3dzX2Vycm9yKQorCQkJZGllKFFfKCIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIiwKKwkJCSAgICAgICAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIsCisJCQkgICAgICAgd2hpdGVzcGFjZV9lcnJvciksCisJCQkgICAgd2hpdGVzcGFjZV9lcnJvcik7CisJCWlmIChhcHBsaWVkX2FmdGVyX2ZpeGluZ193cyAmJiBhcHBseSkKKwkJCXdhcm5pbmcoIiVkIGxpbmUlcyBhcHBsaWVkIGFmdGVyIgorCQkJCSIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIsCisJCQkJYXBwbGllZF9hZnRlcl9maXhpbmdfd3MsCisJCQkJYXBwbGllZF9hZnRlcl9maXhpbmdfd3MgPT0gMSA/ICIiIDogInMiKTsKKwkJZWxzZSBpZiAod2hpdGVzcGFjZV9lcnJvcikKKwkJCXdhcm5pbmcoUV8oIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iLAorCQkJCSAgICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIiwKKwkJCQkgICB3aGl0ZXNwYWNlX2Vycm9yKSwKKwkJCQl3aGl0ZXNwYWNlX2Vycm9yKTsKKwl9CisKKwlpZiAodXBkYXRlX2luZGV4KSB7CisJCWlmICh3cml0ZV9jYWNoZShuZXdmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJCSAgICBjb21taXRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUpKQorCQkJZGllKF8oIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKwl9CisKKwlyZXR1cm4gISFlcnJzOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9hcmNoaXZlLmMgYi9idWlsdGluL2FyY2hpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTFjZmQzCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9hcmNoaXZlLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgRnJhbmNrIEJ1aS1IdXUKKyAqIENvcHlyaWdodCAoYykgMjAwNiBSZW5lIFNjaGFyZmUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorCitzdGF0aWMgdm9pZCBjcmVhdGVfb3V0cHV0X2ZpbGUoY29uc3QgY2hhciAqb3V0cHV0X2ZpbGUpCit7CisJaW50IG91dHB1dF9mZCA9IG9wZW4ob3V0cHV0X2ZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMsIDA2NjYpOworCWlmIChvdXRwdXRfZmQgPCAwKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIpLCBvdXRwdXRfZmlsZSk7CisJaWYgKG91dHB1dF9mZCAhPSAxKSB7CisJCWlmIChkdXAyKG91dHB1dF9mZCwgMSkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiKSk7CisJCWVsc2UKKwkJCWNsb3NlKG91dHB1dF9mZCk7CisJfQorfQorCitzdGF0aWMgaW50IHJ1bl9yZW1vdGVfYXJjaGl2ZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqZXhlYywKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lX2hpbnQpCit7CisJY2hhciBidWZbTEFSR0VfUEFDS0VUX01BWF07CisJaW50IGZkWzJdLCBpLCBsZW4sIHJ2OworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydDsKKwlzdHJ1Y3QgcmVtb3RlICpfcmVtb3RlOworCisJX3JlbW90ZSA9IHJlbW90ZV9nZXQocmVtb3RlKTsKKwlpZiAoIV9yZW1vdGUtPnVybFswXSkKKwkJZGllKF8oImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiKSk7CisJdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2dldChfcmVtb3RlLCBfcmVtb3RlLT51cmxbMF0pOworCXRyYW5zcG9ydF9jb25uZWN0KHRyYW5zcG9ydCwgImdpdC11cGxvYWQtYXJjaGl2ZSIsIGV4ZWMsIGZkKTsKKworCS8qCisJICogSW5qZWN0IGEgZmFrZSAtLWZvcm1hdCBmaWVsZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorCSAqIGFyZ3VtZW50cywgd2l0aCB0aGUgZm9ybWF0IGluZmVycmVkIGZyb20gb3VyIG91dHB1dAorCSAqIGZpbGVuYW1lLiBUaGlzIHdheSBleHBsaWNpdCAtLWZvcm1hdCBvcHRpb25zIGNhbiBvdmVycmlkZQorCSAqIGl0LgorCSAqLworCWlmIChuYW1lX2hpbnQpIHsKKwkJY29uc3QgY2hhciAqZm9ybWF0ID0gYXJjaGl2ZV9mb3JtYXRfZnJvbV9maWxlbmFtZShuYW1lX2hpbnQpOworCQlpZiAoZm9ybWF0KQorCQkJcGFja2V0X3dyaXRlKGZkWzFdLCAiYXJndW1lbnQgLS1mb3JtYXQ9JXNcbiIsIGZvcm1hdCk7CisJfQorCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCXBhY2tldF93cml0ZShmZFsxXSwgImFyZ3VtZW50ICVzXG4iLCBhcmd2W2ldKTsKKwlwYWNrZXRfZmx1c2goZmRbMV0pOworCisJbGVuID0gcGFja2V0X3JlYWRfbGluZShmZFswXSwgYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKCFsZW4pCisJCWRpZShfKCJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IEVPRiIpKTsKKwlpZiAoYnVmW2xlbi0xXSA9PSAnXG4nKQorCQlidWZbLS1sZW5dID0gMDsKKwlpZiAoc3RyY21wKGJ1ZiwgIkFDSyIpKSB7CisJCWlmIChsZW4gPiA1ICYmICFwcmVmaXhjbXAoYnVmLCAiTkFDSyAiKSkKKwkJCWRpZShfKCJnaXQgYXJjaGl2ZTogTkFDSyAlcyIpLCBidWYgKyA1KTsKKwkJaWYgKGxlbiA+IDQgJiYgIXByZWZpeGNtcChidWYsICJFUlIgIikpCisJCQlkaWUoXygicmVtb3RlIGVycm9yOiAlcyIpLCBidWYgKyA0KTsKKwkJZGllKF8oImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIpKTsKKwl9CisKKwlsZW4gPSBwYWNrZXRfcmVhZF9saW5lKGZkWzBdLCBidWYsIHNpemVvZihidWYpKTsKKwlpZiAobGVuKQorCQlkaWUoXygiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giKSk7CisKKwkvKiBOb3csIHN0YXJ0IHJlYWRpbmcgZnJvbSBmZFswXSBhbmQgc3BpdCBpdCBvdXQgdG8gc3Rkb3V0ICovCisJcnYgPSByZWN2X3NpZGViYW5kKCJhcmNoaXZlIiwgZmRbMF0sIDEpOworCXJ2IHw9IHRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CisKKwlyZXR1cm4gISFydjsKK30KKworI2RlZmluZSBQQVJTRV9PUFRfS0VFUF9BTEwgKCBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCB8IAlcCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwIHwgCVwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTiB8CVwKKwkJCSAgICAgUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFAJKQorCitpbnQgY21kX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqZXhlYyA9ICJnaXQtdXBsb2FkLWFyY2hpdmUiOworCWNvbnN0IGNoYXIgKm91dHB1dCA9IE5VTEw7CisJY29uc3QgY2hhciAqcmVtb3RlID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIGxvY2FsX29wdHNbXSA9IHsKKwkJT1BUX1NUUklORygnbycsICJvdXRwdXQiLCAmb3V0cHV0LCBOXygiZmlsZSIpLAorCQkJTl8oIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIpKSwKKwkJT1BUX1NUUklORygwLCAicmVtb3RlIiwgJnJlbW90ZSwgTl8oInJlcG8iKSwKKwkJCU5fKCJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIpKSwKKwkJT1BUX1NUUklORygwLCAiZXhlYyIsICZleGVjLCBOXygiY29tbWFuZCIpLAorCQkJTl8oInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbG9jYWxfb3B0cywgTlVMTCwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQUxMKTsKKworCWlmIChvdXRwdXQpCisJCWNyZWF0ZV9vdXRwdXRfZmlsZShvdXRwdXQpOworCisJaWYgKHJlbW90ZSkKKwkJcmV0dXJuIHJ1bl9yZW1vdGVfYXJjaGl2ZXIoYXJnYywgYXJndiwgcmVtb3RlLCBleGVjLCBvdXRwdXQpOworCisJc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT0xCRiwgQlVGU0laKTsKKworCXJldHVybiB3cml0ZV9hcmNoaXZlKGFyZ2MsIGFyZ3YsIHByZWZpeCwgMSwgb3V0cHV0LCAwKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYyBiL2J1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzg4NGUzCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiYmlzZWN0LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X2Jpc2VjdF9oZWxwZXJfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIiksCisJTlVMTAorfTsKKworaW50IGNtZF9iaXNlY3RfX2hlbHBlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgbmV4dF9hbGwgPSAwOworCWludCBub19jaGVja291dCA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKDAsICJuZXh0LWFsbCIsICZuZXh0X2FsbCwKKwkJCSAgICBOXygicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgIm5vLWNoZWNrb3V0IiwgJm5vX2NoZWNrb3V0LAorCQkJICAgIE5fKCJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfYmlzZWN0X2hlbHBlcl91c2FnZSwgMCk7CisKKwlpZiAoIW5leHRfYWxsKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X2Jpc2VjdF9oZWxwZXJfdXNhZ2UsIG9wdGlvbnMpOworCisJLyogbmV4dC1hbGwgKi8KKwlyZXR1cm4gYmlzZWN0X25leHRfYWxsKHByZWZpeCwgbm9fY2hlY2tvdXQpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ibGFtZS5jIGIvYnVpbHRpbi9ibGFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyN2VmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2JsYW1lLmMKQEAgLTAsMCArMSwyNjQyIEBACisvKgorICogQmxhbWUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIEp1bmlvIEMgSGFtYW5vCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKworc3RhdGljIGNoYXIgYmxhbWVfdXNhZ2VbXSA9IE5fKCJnaXQgYmxhbWUgW29wdGlvbnNdIFtyZXYtb3B0c10gW3Jldl0gWy0tXSBmaWxlIik7CisKK3N0YXRpYyBjb25zdCBjaGFyICpibGFtZV9vcHRfdXNhZ2VbXSA9IHsKKwlibGFtZV91c2FnZSwKKwkiIiwKKwlOXygiW3Jldi1vcHRzXSBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGxvbmdlc3RfZmlsZTsKK3N0YXRpYyBpbnQgbG9uZ2VzdF9hdXRob3I7CitzdGF0aWMgaW50IG1heF9vcmlnX2RpZ2l0czsKK3N0YXRpYyBpbnQgbWF4X2RpZ2l0czsKK3N0YXRpYyBpbnQgbWF4X3Njb3JlX2RpZ2l0czsKK3N0YXRpYyBpbnQgc2hvd19yb290Oworc3RhdGljIGludCByZXZlcnNlOworc3RhdGljIGludCBibGFua19ib3VuZGFyeTsKK3N0YXRpYyBpbnQgaW5jcmVtZW50YWw7CitzdGF0aWMgaW50IHhkbF9vcHRzOworc3RhdGljIGludCBhYmJyZXYgPSAtMTsKKworc3RhdGljIGVudW0gZGF0ZV9tb2RlIGJsYW1lX2RhdGVfbW9kZSA9IERBVEVfSVNPODYwMTsKK3N0YXRpYyBzaXplX3QgYmxhbWVfZGF0ZV93aWR0aDsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBtYWlsbWFwOworCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIERFQlVHIDAKKyNlbmRpZgorCisvKiBzdGF0cyAqLworc3RhdGljIGludCBudW1fcmVhZF9ibG9iOworc3RhdGljIGludCBudW1fZ2V0X3BhdGNoOworc3RhdGljIGludCBudW1fY29tbWl0czsKKworI2RlZmluZSBQSUNLQVhFX0JMQU1FX01PVkUJCTAxCisjZGVmaW5lIFBJQ0tBWEVfQkxBTUVfQ09QWQkJMDIKKyNkZWZpbmUgUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFUgkwNAorI2RlZmluZSBQSUNLQVhFX0JMQU1FX0NPUFlfSEFSREVTVAkwMTAKKworLyoKKyAqIGJsYW1lIGZvciBhIGJsYW1lX2VudHJ5IHdpdGggc2NvcmUgbG93ZXIgdGhhbiB0aGVzZSB0aHJlc2hvbGRzCisgKiBpcyBub3QgcGFzc2VkIHRvIHRoZSBwYXJlbnQgdXNpbmcgbW92ZS9jb3B5IGxvZ2ljLgorICovCitzdGF0aWMgdW5zaWduZWQgYmxhbWVfbW92ZV9zY29yZTsKK3N0YXRpYyB1bnNpZ25lZCBibGFtZV9jb3B5X3Njb3JlOworI2RlZmluZSBCTEFNRV9ERUZBVUxUX01PVkVfU0NPUkUJMjAKKyNkZWZpbmUgQkxBTUVfREVGQVVMVF9DT1BZX1NDT1JFCTQwCisKKy8qIGJpdHMgIzAuLjcgaW4gcmV2aXNpb24uaCwgIzguLjExIHVzZWQgZm9yIG1lcmdlX2Jhc2VzKCkgaW4gY29tbWl0LmMgKi8KKyNkZWZpbmUgTUVUQUlORk9fU0hPV04JCSgxdTw8MTIpCisjZGVmaW5lIE1PUkVfVEhBTl9PTkVfUEFUSAkoMXU8PDEzKQorCisvKgorICogT25lIGJsb2IgaW4gYSBjb21taXQgdGhhdCBpcyBiZWluZyBzdXNwZWN0ZWQKKyAqLworc3RydWN0IG9yaWdpbiB7CisJaW50IHJlZmNudDsKKwlzdHJ1Y3Qgb3JpZ2luICpwcmV2aW91czsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJbW1maWxlX3QgZmlsZTsKKwl1bnNpZ25lZCBjaGFyIGJsb2Jfc2hhMVsyMF07CisJdW5zaWduZWQgbW9kZTsKKwljaGFyIHBhdGhbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgaW50IGRpZmZfaHVua3MobW1maWxlX3QgKmZpbGVfYSwgbW1maWxlX3QgKmZpbGVfYiwgbG9uZyBjdHhsZW4sCisJCSAgICAgIHhkbF9lbWl0X2h1bmtfY29uc3VtZV9mdW5jX3QgaHVua19mdW5jLCB2b2lkICpjYl9kYXRhKQoreworCXhwcGFyYW1fdCB4cHAgPSB7MH07CisJeGRlbWl0Y29uZl90IHhlY2ZnID0gezB9OworCXhkZW1pdGNiX3QgZWNiID0ge05VTEx9OworCisJeHBwLmZsYWdzID0geGRsX29wdHM7CisJeGVjZmcuY3R4bGVuID0gY3R4bGVuOworCXhlY2ZnLmh1bmtfZnVuYyA9IGh1bmtfZnVuYzsKKwllY2IucHJpdiA9IGNiX2RhdGE7CisJcmV0dXJuIHhkaV9kaWZmKGZpbGVfYSwgZmlsZV9iLCAmeHBwLCAmeGVjZmcsICZlY2IpOworfQorCisvKgorICogUHJlcGFyZSBkaWZmX2ZpbGVzcGVjIGFuZCBjb252ZXJ0IGl0IHVzaW5nIGRpZmYgdGV4dGNvbnYgQVBJCisgKiBpZiB0aGUgdGV4dGNvbnYgZHJpdmVyIGV4aXN0cy4KKyAqIFJldHVybiAxIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2NlZWRzLCAwIG90aGVyd2lzZS4KKyAqLworaW50IHRleHRjb252X29iamVjdChjb25zdCBjaGFyICpwYXRoLAorCQkgICAgdW5zaWduZWQgbW9kZSwKKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCSAgICBpbnQgc2hhMV92YWxpZCwKKwkJICAgIGNoYXIgKipidWYsCisJCSAgICB1bnNpZ25lZCBsb25nICpidWZfc2l6ZSkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGY7CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdGV4dGNvbnY7CisKKwlkZiA9IGFsbG9jX2ZpbGVzcGVjKHBhdGgpOworCWZpbGxfZmlsZXNwZWMoZGYsIHNoYTEsIHNoYTFfdmFsaWQsIG1vZGUpOworCXRleHRjb252ID0gZ2V0X3RleHRjb252KGRmKTsKKwlpZiAoIXRleHRjb252KSB7CisJCWZyZWVfZmlsZXNwZWMoZGYpOworCQlyZXR1cm4gMDsKKwl9CisKKwkqYnVmX3NpemUgPSBmaWxsX3RleHRjb252KHRleHRjb252LCBkZiwgYnVmKTsKKwlmcmVlX2ZpbGVzcGVjKGRmKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEdpdmVuIGFuIG9yaWdpbiwgcHJlcGFyZSBtbWZpbGVfdCBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCBieSB0aGUKKyAqIGRpZmYgbWFjaGluZXJ5CisgKi8KK3N0YXRpYyB2b2lkIGZpbGxfb3JpZ2luX2Jsb2Ioc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCQkJICAgICBzdHJ1Y3Qgb3JpZ2luICpvLCBtbWZpbGVfdCAqZmlsZSkKK3sKKwlpZiAoIW8tPmZpbGUucHRyKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBmaWxlX3NpemU7CisKKwkJbnVtX3JlYWRfYmxvYisrOworCQlpZiAoRElGRl9PUFRfVFNUKG9wdCwgQUxMT1dfVEVYVENPTlYpICYmCisJCSAgICB0ZXh0Y29udl9vYmplY3Qoby0+cGF0aCwgby0+bW9kZSwgby0+YmxvYl9zaGExLCAxLCAmZmlsZS0+cHRyLCAmZmlsZV9zaXplKSkKKwkJCTsKKwkJZWxzZQorCQkJZmlsZS0+cHRyID0gcmVhZF9zaGExX2ZpbGUoby0+YmxvYl9zaGExLCAmdHlwZSwgJmZpbGVfc2l6ZSk7CisJCWZpbGUtPnNpemUgPSBmaWxlX3NpemU7CisKKwkJaWYgKCFmaWxlLT5wdHIpCisJCQlkaWUoIkNhbm5vdCByZWFkIGJsb2IgJXMgZm9yIHBhdGggJXMiLAorCQkJICAgIHNoYTFfdG9faGV4KG8tPmJsb2Jfc2hhMSksCisJCQkgICAgby0+cGF0aCk7CisJCW8tPmZpbGUgPSAqZmlsZTsKKwl9CisJZWxzZQorCQkqZmlsZSA9IG8tPmZpbGU7Cit9CisKKy8qCisgKiBPcmlnaW4gaXMgcmVmY291bnRlZCBhbmQgdXN1YWxseSB3ZSBrZWVwIHRoZSBibG9iIGNvbnRlbnRzIHRvIGJlCisgKiByZXVzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9yaWdpbiAqb3JpZ2luX2luY3JlZihzdHJ1Y3Qgb3JpZ2luICpvKQoreworCWlmIChvKQorCQlvLT5yZWZjbnQrKzsKKwlyZXR1cm4gbzsKK30KKworc3RhdGljIHZvaWQgb3JpZ2luX2RlY3JlZihzdHJ1Y3Qgb3JpZ2luICpvKQoreworCWlmIChvICYmIC0tby0+cmVmY250IDw9IDApIHsKKwkJaWYgKG8tPnByZXZpb3VzKQorCQkJb3JpZ2luX2RlY3JlZihvLT5wcmV2aW91cyk7CisJCWZyZWUoby0+ZmlsZS5wdHIpOworCQlmcmVlKG8pOworCX0KK30KKworc3RhdGljIHZvaWQgZHJvcF9vcmlnaW5fYmxvYihzdHJ1Y3Qgb3JpZ2luICpvKQoreworCWlmIChvLT5maWxlLnB0cikgeworCQlmcmVlKG8tPmZpbGUucHRyKTsKKwkJby0+ZmlsZS5wdHIgPSBOVUxMOworCX0KK30KKworLyoKKyAqIEVhY2ggZ3JvdXAgb2YgbGluZXMgaXMgZGVzY3JpYmVkIGJ5IGEgYmxhbWVfZW50cnk7IGl0IGNhbiBiZSBzcGxpdAorICogYXMgd2UgcGFzcyBibGFtZSB0byB0aGUgcGFyZW50cy4gIFRoZXkgZm9ybSBhIGxpbmtlZCBsaXN0IGluIHRoZQorICogc2NvcmVib2FyZCBzdHJ1Y3R1cmUsIHNvcnRlZCBieSB0aGUgdGFyZ2V0IGxpbmUgbnVtYmVyLgorICovCitzdHJ1Y3QgYmxhbWVfZW50cnkgeworCXN0cnVjdCBibGFtZV9lbnRyeSAqcHJldjsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQ7CisKKwkvKiB0aGUgZmlyc3QgbGluZSBvZiB0aGlzIGdyb3VwIGluIHRoZSBmaW5hbCBpbWFnZTsKKwkgKiBpbnRlcm5hbGx5IGFsbCBsaW5lIG51bWJlcnMgYXJlIDAgYmFzZWQuCisJICovCisJaW50IGxubzsKKworCS8qIGhvdyBtYW55IGxpbmVzIHRoaXMgZ3JvdXAgaGFzICovCisJaW50IG51bV9saW5lczsKKworCS8qIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIHRoaXMgZ3JvdXAgaW50byB0aGUgZmluYWwgaW1hZ2UgKi8KKwlzdHJ1Y3Qgb3JpZ2luICpzdXNwZWN0OworCisJLyogdHJ1ZSBpZiB0aGUgc3VzcGVjdCBpcyB0cnVseSBndWlsdHk7IGZhbHNlIHdoaWxlIHdlIGhhdmUgbm90CisJICogY2hlY2tlZCBpZiB0aGUgZ3JvdXAgY2FtZSBmcm9tIG9uZSBvZiBpdHMgcGFyZW50cy4KKwkgKi8KKwljaGFyIGd1aWx0eTsKKworCS8qIHRydWUgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHNjYW5uZWQgZm9yIGNvcGllcyBpbiB0aGUgY3VycmVudCBwYXJlbnQKKwkgKi8KKwljaGFyIHNjYW5uZWQ7CisKKwkvKiB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGZpcnN0IGxpbmUgb2YgdGhpcyBncm91cCBpbiB0aGUKKwkgKiBzdXNwZWN0J3MgZmlsZTsgaW50ZXJuYWxseSBhbGwgbGluZSBudW1iZXJzIGFyZSAwIGJhc2VkLgorCSAqLworCWludCBzX2xubzsKKworCS8qIGhvdyBzaWduaWZpY2FudCB0aGlzIGVudHJ5IGlzIC0tIGNhY2hlZCB0byBhdm9pZAorCSAqIHNjYW5uaW5nIHRoZSBsaW5lcyBvdmVyIGFuZCBvdmVyLgorCSAqLworCXVuc2lnbmVkIHNjb3JlOworfTsKKworLyoKKyAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBibGFtZSBhc3NpZ25tZW50LgorICovCitzdHJ1Y3Qgc2NvcmVib2FyZCB7CisJLyogdGhlIGZpbmFsIGNvbW1pdCAoaS5lLiB3aGVyZSB3ZSBzdGFydGVkIGRpZ2dpbmcgZnJvbSkgKi8KKwlzdHJ1Y3QgY29tbWl0ICpmaW5hbDsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7CisJY29uc3QgY2hhciAqcGF0aDsKKworCS8qCisJICogVGhlIGNvbnRlbnRzIGluIHRoZSBmaW5hbCBpbWFnZS4KKwkgKiBVc2VkIGJ5IG1hbnkgZnVuY3Rpb25zIHRvIG9idGFpbiBjb250ZW50cyBvZiB0aGUgbnRoIGxpbmUsCisJICogaW5kZXhlZCB3aXRoIHNjb3JlYm9hcmQubGluZW5vW2JsYW1lX2VudHJ5Lmxub10uCisJICovCisJY29uc3QgY2hhciAqZmluYWxfYnVmOworCXVuc2lnbmVkIGxvbmcgZmluYWxfYnVmX3NpemU7CisKKwkvKiBsaW5rZWQgbGlzdCBvZiBibGFtZXMgKi8KKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKworCS8qIGxvb2stdXAgYSBsaW5lIGluIHRoZSBmaW5hbCBidWZmZXIgKi8KKwlpbnQgbnVtX2xpbmVzOworCWludCAqbGluZW5vOworfTsKKworc3RhdGljIGlubGluZSBpbnQgc2FtZV9zdXNwZWN0KHN0cnVjdCBvcmlnaW4gKmEsIHN0cnVjdCBvcmlnaW4gKmIpCit7CisJaWYgKGEgPT0gYikKKwkJcmV0dXJuIDE7CisJaWYgKGEtPmNvbW1pdCAhPSBiLT5jb21taXQpCisJCXJldHVybiAwOworCXJldHVybiAhc3RyY21wKGEtPnBhdGgsIGItPnBhdGgpOworfQorCitzdGF0aWMgdm9pZCBzYW5pdHlfY2hlY2tfcmVmY250KHN0cnVjdCBzY29yZWJvYXJkICopOworCisvKgorICogSWYgdHdvIGJsYW1lIGVudHJpZXMgdGhhdCBhcmUgbmV4dCB0byBlYWNoIG90aGVyIGNhbWUgZnJvbQorICogY29udGlndW91cyBsaW5lcyBpbiB0aGUgc2FtZSBvcmlnaW4gKGkuZS4gPGNvbW1pdCwgcGF0aD4gcGFpciksCisgKiBtZXJnZSB0aGVtIHRvZ2V0aGVyLgorICovCitzdGF0aWMgdm9pZCBjb2FsZXNjZShzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQsICpuZXh0OworCisJZm9yIChlbnQgPSBzYi0+ZW50OyBlbnQgJiYgKG5leHQgPSBlbnQtPm5leHQpOyBlbnQgPSBuZXh0KSB7CisJCWlmIChzYW1lX3N1c3BlY3QoZW50LT5zdXNwZWN0LCBuZXh0LT5zdXNwZWN0KSAmJgorCQkgICAgZW50LT5ndWlsdHkgPT0gbmV4dC0+Z3VpbHR5ICYmCisJCSAgICBlbnQtPnNfbG5vICsgZW50LT5udW1fbGluZXMgPT0gbmV4dC0+c19sbm8pIHsKKwkJCWVudC0+bnVtX2xpbmVzICs9IG5leHQtPm51bV9saW5lczsKKwkJCWVudC0+bmV4dCA9IG5leHQtPm5leHQ7CisJCQlpZiAoZW50LT5uZXh0KQorCQkJCWVudC0+bmV4dC0+cHJldiA9IGVudDsKKwkJCW9yaWdpbl9kZWNyZWYobmV4dC0+c3VzcGVjdCk7CisJCQlmcmVlKG5leHQpOworCQkJZW50LT5zY29yZSA9IDA7CisJCQluZXh0ID0gZW50OyAvKiBhZ2FpbiAqLworCQl9CisJfQorCisJaWYgKERFQlVHKSAvKiBzYW5pdHkgKi8KKwkJc2FuaXR5X2NoZWNrX3JlZmNudChzYik7Cit9CisKKy8qCisgKiBHaXZlbiBhIGNvbW1pdCBhbmQgYSBwYXRoIGluIGl0LCBjcmVhdGUgYSBuZXcgb3JpZ2luIHN0cnVjdHVyZS4KKyAqIFRoZSBjYWxsZXJzIHRoYXQgYWRkIGJsYW1lIHRvIHRoZSBzY29yZWJvYXJkIHNob3VsZCB1c2UKKyAqIGdldF9vcmlnaW4oKSB0byBvYnRhaW4gc2hhcmVkLCByZWZjb3VudGVkIGNvcHkgaW5zdGVhZCBvZiBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5LgorICovCitzdGF0aWMgc3RydWN0IG9yaWdpbiAqbWFrZV9vcmlnaW4oc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBvcmlnaW4gKm87CisJbyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpvKSArIHN0cmxlbihwYXRoKSArIDEpOworCW8tPmNvbW1pdCA9IGNvbW1pdDsKKwlvLT5yZWZjbnQgPSAxOworCXN0cmNweShvLT5wYXRoLCBwYXRoKTsKKwlyZXR1cm4gbzsKK30KKworLyoKKyAqIExvY2F0ZSBhbiBleGlzdGluZyBvcmlnaW4gb3IgY3JlYXRlIGEgbmV3IG9uZS4KKyAqLworc3RhdGljIHN0cnVjdCBvcmlnaW4gKmdldF9vcmlnaW4oc3RydWN0IHNjb3JlYm9hcmQgKnNiLAorCQkJCSBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplOworCisJZm9yIChlID0gc2ItPmVudDsgZTsgZSA9IGUtPm5leHQpIHsKKwkJaWYgKGUtPnN1c3BlY3QtPmNvbW1pdCA9PSBjb21taXQgJiYKKwkJICAgICFzdHJjbXAoZS0+c3VzcGVjdC0+cGF0aCwgcGF0aCkpCisJCQlyZXR1cm4gb3JpZ2luX2luY3JlZihlLT5zdXNwZWN0KTsKKwl9CisJcmV0dXJuIG1ha2Vfb3JpZ2luKGNvbW1pdCwgcGF0aCk7Cit9CisKKy8qCisgKiBGaWxsIHRoZSBibG9iX3NoYTEgZmllbGQgb2YgYW4gb3JpZ2luIGlmIGl0IGhhc24ndCwgc28gdGhhdCBsYXRlcgorICogY2FsbCB0byBmaWxsX29yaWdpbl9ibG9iKCkgY2FuIHVzZSBpdCB0byBsb2NhdGUgdGhlIGRhdGEuICBibG9iX3NoYTEKKyAqIGZvciBhbiBvcmlnaW4gaXMgYWxzbyB1c2VkIHRvIHBhc3MgdGhlIGJsYW1lIGZvciB0aGUgZW50aXJlIGZpbGUgdG8KKyAqIHRoZSBwYXJlbnQgdG8gZGV0ZWN0IHRoZSBjYXNlIHdoZXJlIGEgY2hpbGQncyBibG9iIGlzIGlkZW50aWNhbCB0bworICogdGhhdCBvZiBpdHMgcGFyZW50J3MuCisgKgorICogVGhpcyBhbHNvIGZpbGxzIG9yaWdpbi0+bW9kZSBmb3IgY29ycmVzcG9uZGluZyB0cmVlIHBhdGguCisgKi8KK3N0YXRpYyBpbnQgZmlsbF9ibG9iX3NoYTFfYW5kX21vZGUoc3RydWN0IG9yaWdpbiAqb3JpZ2luKQoreworCWlmICghaXNfbnVsbF9zaGExKG9yaWdpbi0+YmxvYl9zaGExKSkKKwkJcmV0dXJuIDA7CisJaWYgKGdldF90cmVlX2VudHJ5KG9yaWdpbi0+Y29tbWl0LT5vYmplY3Quc2hhMSwKKwkJCSAgIG9yaWdpbi0+cGF0aCwKKwkJCSAgIG9yaWdpbi0+YmxvYl9zaGExLCAmb3JpZ2luLT5tb2RlKSkKKwkJZ290byBlcnJvcl9vdXQ7CisJaWYgKHNoYTFfb2JqZWN0X2luZm8ob3JpZ2luLT5ibG9iX3NoYTEsIE5VTEwpICE9IE9CSl9CTE9CKQorCQlnb3RvIGVycm9yX291dDsKKwlyZXR1cm4gMDsKKyBlcnJvcl9vdXQ6CisJaGFzaGNscihvcmlnaW4tPmJsb2Jfc2hhMSk7CisJb3JpZ2luLT5tb2RlID0gU19JRklOVkFMSUQ7CisJcmV0dXJuIC0xOworfQorCisvKgorICogV2UgaGF2ZSBhbiBvcmlnaW4gLS0gY2hlY2sgaWYgdGhlIHNhbWUgcGF0aCBleGlzdHMgaW4gdGhlCisgKiBwYXJlbnQgYW5kIHJldHVybiBhbiBvcmlnaW4gc3RydWN0dXJlIHRvIHJlcHJlc2VudCBpdC4KKyAqLworc3RhdGljIHN0cnVjdCBvcmlnaW4gKmZpbmRfb3JpZ2luKHN0cnVjdCBzY29yZWJvYXJkICpzYiwKKwkJCQkgIHN0cnVjdCBjb21taXQgKnBhcmVudCwKKwkJCQkgIHN0cnVjdCBvcmlnaW4gKm9yaWdpbikKK3sKKwlzdHJ1Y3Qgb3JpZ2luICpwb3JpZ2luID0gTlVMTDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0czsKKwljb25zdCBjaGFyICpwYXRoc1syXTsKKworCWlmIChwYXJlbnQtPnV0aWwpIHsKKwkJLyoKKwkJICogRWFjaCBjb21taXQgb2JqZWN0IGNhbiBjYWNoZSBvbmUgb3JpZ2luIGluIHRoYXQKKwkJICogY29tbWl0LiAgVGhpcyBpcyBhIGZyZWVzdGFuZGluZyBjb3B5IG9mIG9yaWdpbiBhbmQKKwkJICogbm90IHJlZmNvdW50ZWQuCisJCSAqLworCQlzdHJ1Y3Qgb3JpZ2luICpjYWNoZWQgPSBwYXJlbnQtPnV0aWw7CisJCWlmICghc3RyY21wKGNhY2hlZC0+cGF0aCwgb3JpZ2luLT5wYXRoKSkgeworCQkJLyoKKwkJCSAqIFRoZSBzYW1lIHBhdGggYmV0d2VlbiBvcmlnaW4gYW5kIGl0cyBwYXJlbnQKKwkJCSAqIHdpdGhvdXQgcmVuYW1pbmcgLS0gdGhlIG1vc3QgY29tbW9uIGNhc2UuCisJCQkgKi8KKwkJCXBvcmlnaW4gPSBnZXRfb3JpZ2luKHNiLCBwYXJlbnQsIGNhY2hlZC0+cGF0aCk7CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgb3JpZ2luIHdhcyBuZXdseSBjcmVhdGVkIChpLmUuIGdldF9vcmlnaW4KKwkJCSAqIHdvdWxkIGNhbGwgbWFrZV9vcmlnaW4gaWYgbm9uZSBpcyBmb3VuZCBpbiB0aGUKKwkJCSAqIHNjb3JlYm9hcmQpLCBpdCBkb2VzIG5vdCBrbm93IHRoZSBibG9iX3NoYTEvbW9kZSwKKwkJCSAqIHNvIGNvcHkgaXQuICBPdGhlcndpc2UgcG9yaWdpbiB3YXMgaW4gdGhlCisJCQkgKiBzY29yZWJvYXJkIGFuZCBhbHJlYWR5IGtub3dzIGJsb2Jfc2hhMS9tb2RlLgorCQkJICovCisJCQlpZiAocG9yaWdpbi0+cmVmY250ID09IDEpIHsKKwkJCQloYXNoY3B5KHBvcmlnaW4tPmJsb2Jfc2hhMSwgY2FjaGVkLT5ibG9iX3NoYTEpOworCQkJCXBvcmlnaW4tPm1vZGUgPSBjYWNoZWQtPm1vZGU7CisJCQl9CisJCQlyZXR1cm4gcG9yaWdpbjsKKwkJfQorCQkvKiBvdGhlcndpc2UgaXQgd2FzIG5vdCB2ZXJ5IHVzZWZ1bDsgZnJlZSBpdCAqLworCQlmcmVlKHBhcmVudC0+dXRpbCk7CisJCXBhcmVudC0+dXRpbCA9IE5VTEw7CisJfQorCisJLyogU2VlIGlmIHRoZSBvcmlnaW4tPnBhdGggaXMgZGlmZmVyZW50IGJldHdlZW4gcGFyZW50CisJICogYW5kIG9yaWdpbiBmaXJzdC4gIE1vc3Qgb2YgdGhlIHRpbWUgdGhleSBhcmUgdGhlCisJICogc2FtZSBhbmQgZGlmZi10cmVlIGlzIGZhaXJseSBlZmZpY2llbnQgYWJvdXQgdGhpcy4KKwkgKi8KKwlkaWZmX3NldHVwKCZkaWZmX29wdHMpOworCURJRkZfT1BUX1NFVCgmZGlmZl9vcHRzLCBSRUNVUlNJVkUpOworCWRpZmZfb3B0cy5kZXRlY3RfcmVuYW1lID0gMDsKKwlkaWZmX29wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlwYXRoc1swXSA9IG9yaWdpbi0+cGF0aDsKKwlwYXRoc1sxXSA9IE5VTEw7CisKKwlkaWZmX3RyZWVfc2V0dXBfcGF0aHMocGF0aHMsICZkaWZmX29wdHMpOworCWRpZmZfc2V0dXBfZG9uZSgmZGlmZl9vcHRzKTsKKworCWlmIChpc19udWxsX3NoYTEob3JpZ2luLT5jb21taXQtPm9iamVjdC5zaGExKSkKKwkJZG9fZGlmZl9jYWNoZShwYXJlbnQtPnRyZWUtPm9iamVjdC5zaGExLCAmZGlmZl9vcHRzKTsKKwllbHNlCisJCWRpZmZfdHJlZV9zaGExKHBhcmVudC0+dHJlZS0+b2JqZWN0LnNoYTEsCisJCQkgICAgICAgb3JpZ2luLT5jb21taXQtPnRyZWUtPm9iamVjdC5zaGExLAorCQkJICAgICAgICIiLCAmZGlmZl9vcHRzKTsKKwlkaWZmY29yZV9zdGQoJmRpZmZfb3B0cyk7CisKKwlpZiAoIWRpZmZfcXVldWVkX2RpZmYubnIpIHsKKwkJLyogVGhlIHBhdGggaXMgdGhlIHNhbWUgYXMgcGFyZW50ICovCisJCXBvcmlnaW4gPSBnZXRfb3JpZ2luKHNiLCBwYXJlbnQsIG9yaWdpbi0+cGF0aCk7CisJCWhhc2hjcHkocG9yaWdpbi0+YmxvYl9zaGExLCBvcmlnaW4tPmJsb2Jfc2hhMSk7CisJCXBvcmlnaW4tPm1vZGUgPSBvcmlnaW4tPm1vZGU7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogU2luY2Ugb3JpZ2luLT5wYXRoIGlzIGEgcGF0aHNwZWMsIGlmIHRoZSBwYXJlbnQKKwkJICogY29tbWl0IGhhZCBpdCBhcyBhIGRpcmVjdG9yeSwgd2Ugd2lsbCBzZWUgYSB3aG9sZQorCQkgKiBidW5jaCBvZiBkZWxldGlvbiBvZiBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgd2UKKwkJICogZG8gbm90IGNhcmUgYWJvdXQuCisJCSAqLworCQlpbnQgaTsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBOVUxMOworCQlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpuYW1lOworCQkJcCA9IGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV07CisJCQluYW1lID0gcC0+b25lLT5wYXRoID8gcC0+b25lLT5wYXRoIDogcC0+dHdvLT5wYXRoOworCQkJaWYgKCFzdHJjbXAobmFtZSwgb3JpZ2luLT5wYXRoKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIXApCisJCQlkaWUoImludGVybmFsIGVycm9yIGluIGJsYW1lOjpmaW5kX29yaWdpbiIpOworCQlzd2l0Y2ggKHAtPnN0YXR1cykgeworCQlkZWZhdWx0OgorCQkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBibGFtZTo6ZmluZF9vcmlnaW4gKCVjKSIsCisJCQkgICAgcC0+c3RhdHVzKTsKKwkJY2FzZSAnTSc6CisJCQlwb3JpZ2luID0gZ2V0X29yaWdpbihzYiwgcGFyZW50LCBvcmlnaW4tPnBhdGgpOworCQkJaGFzaGNweShwb3JpZ2luLT5ibG9iX3NoYTEsIHAtPm9uZS0+c2hhMSk7CisJCQlwb3JpZ2luLT5tb2RlID0gcC0+b25lLT5tb2RlOworCQkJYnJlYWs7CisJCWNhc2UgJ0EnOgorCQljYXNlICdUJzoKKwkJCS8qIERpZCBub3QgZXhpc3QgaW4gcGFyZW50LCBvciB0eXBlIGNoYW5nZWQgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCWRpZmZfZmx1c2goJmRpZmZfb3B0cyk7CisJZGlmZl90cmVlX3JlbGVhc2VfcGF0aHMoJmRpZmZfb3B0cyk7CisJaWYgKHBvcmlnaW4pIHsKKwkJLyoKKwkJICogQ3JlYXRlIGEgZnJlZXN0YW5kaW5nIGNvcHkgdGhhdCBpcyBub3QgcGFydCBvZgorCQkgKiB0aGUgcmVmY291bnRlZCBvcmlnaW4gZm91bmQgaW4gdGhlIHNjb3JlYm9hcmQsIGFuZAorCQkgKiBjYWNoZSBpdCBpbiB0aGUgY29tbWl0LgorCQkgKi8KKwkJc3RydWN0IG9yaWdpbiAqY2FjaGVkOworCisJCWNhY2hlZCA9IG1ha2Vfb3JpZ2luKHBvcmlnaW4tPmNvbW1pdCwgcG9yaWdpbi0+cGF0aCk7CisJCWhhc2hjcHkoY2FjaGVkLT5ibG9iX3NoYTEsIHBvcmlnaW4tPmJsb2Jfc2hhMSk7CisJCWNhY2hlZC0+bW9kZSA9IHBvcmlnaW4tPm1vZGU7CisJCXBhcmVudC0+dXRpbCA9IGNhY2hlZDsKKwl9CisJcmV0dXJuIHBvcmlnaW47Cit9CisKKy8qCisgKiBXZSBoYXZlIGFuIG9yaWdpbiAtLSBmaW5kIHRoZSBwYXRoIHRoYXQgY29ycmVzcG9uZHMgdG8gaXQgaW4gaXRzCisgKiBwYXJlbnQgYW5kIHJldHVybiBhbiBvcmlnaW4gc3RydWN0dXJlIHRvIHJlcHJlc2VudCBpdC4KKyAqLworc3RhdGljIHN0cnVjdCBvcmlnaW4gKmZpbmRfcmVuYW1lKHN0cnVjdCBzY29yZWJvYXJkICpzYiwKKwkJCQkgIHN0cnVjdCBjb21taXQgKnBhcmVudCwKKwkJCQkgIHN0cnVjdCBvcmlnaW4gKm9yaWdpbikKK3sKKwlzdHJ1Y3Qgb3JpZ2luICpwb3JpZ2luID0gTlVMTDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0czsKKwlpbnQgaTsKKwljb25zdCBjaGFyICpwYXRoc1syXTsKKworCWRpZmZfc2V0dXAoJmRpZmZfb3B0cyk7CisJRElGRl9PUFRfU0VUKCZkaWZmX29wdHMsIFJFQ1VSU0lWRSk7CisJZGlmZl9vcHRzLmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9SRU5BTUU7CisJZGlmZl9vcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJZGlmZl9vcHRzLnNpbmdsZV9mb2xsb3cgPSBvcmlnaW4tPnBhdGg7CisJcGF0aHNbMF0gPSBOVUxMOworCWRpZmZfdHJlZV9zZXR1cF9wYXRocyhwYXRocywgJmRpZmZfb3B0cyk7CisJZGlmZl9zZXR1cF9kb25lKCZkaWZmX29wdHMpOworCisJaWYgKGlzX251bGxfc2hhMShvcmlnaW4tPmNvbW1pdC0+b2JqZWN0LnNoYTEpKQorCQlkb19kaWZmX2NhY2hlKHBhcmVudC0+dHJlZS0+b2JqZWN0LnNoYTEsICZkaWZmX29wdHMpOworCWVsc2UKKwkJZGlmZl90cmVlX3NoYTEocGFyZW50LT50cmVlLT5vYmplY3Quc2hhMSwKKwkJCSAgICAgICBvcmlnaW4tPmNvbW1pdC0+dHJlZS0+b2JqZWN0LnNoYTEsCisJCQkgICAgICAgIiIsICZkaWZmX29wdHMpOworCWRpZmZjb3JlX3N0ZCgmZGlmZl9vcHRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldOworCQlpZiAoKHAtPnN0YXR1cyA9PSAnUicgfHwgcC0+c3RhdHVzID09ICdDJykgJiYKKwkJICAgICFzdHJjbXAocC0+dHdvLT5wYXRoLCBvcmlnaW4tPnBhdGgpKSB7CisJCQlwb3JpZ2luID0gZ2V0X29yaWdpbihzYiwgcGFyZW50LCBwLT5vbmUtPnBhdGgpOworCQkJaGFzaGNweShwb3JpZ2luLT5ibG9iX3NoYTEsIHAtPm9uZS0+c2hhMSk7CisJCQlwb3JpZ2luLT5tb2RlID0gcC0+b25lLT5tb2RlOworCQkJYnJlYWs7CisJCX0KKwl9CisJZGlmZl9mbHVzaCgmZGlmZl9vcHRzKTsKKwlkaWZmX3RyZWVfcmVsZWFzZV9wYXRocygmZGlmZl9vcHRzKTsKKwlyZXR1cm4gcG9yaWdpbjsKK30KKworLyoKKyAqIExpbmsgaW4gYSBuZXcgYmxhbWUgZW50cnkgdG8gdGhlIHNjb3JlYm9hcmQuICBFbnRyaWVzIHRoYXQgY292ZXIgdGhlCisgKiBzYW1lIGxpbmUgcmFuZ2UgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc2NvcmVib2FyZCBwcmV2aW91c2x5LgorICovCitzdGF0aWMgdm9pZCBhZGRfYmxhbWVfZW50cnkoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKmUpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQsICpwcmV2ID0gTlVMTDsKKworCW9yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCk7CisKKwlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudCAmJiBlbnQtPmxubyA8IGUtPmxubzsgZW50ID0gZW50LT5uZXh0KQorCQlwcmV2ID0gZW50OworCisJLyogcHJldiwgaWYgbm90IE5VTEwsIGlzIHRoZSBsYXN0IG9uZSB0aGF0IGlzIGJlbG93IGUgKi8KKwllLT5wcmV2ID0gcHJldjsKKwlpZiAocHJldikgeworCQllLT5uZXh0ID0gcHJldi0+bmV4dDsKKwkJcHJldi0+bmV4dCA9IGU7CisJfQorCWVsc2UgeworCQllLT5uZXh0ID0gc2ItPmVudDsKKwkJc2ItPmVudCA9IGU7CisJfQorCWlmIChlLT5uZXh0KQorCQllLT5uZXh0LT5wcmV2ID0gZTsKK30KKworLyoKKyAqIHNyYyB0eXBpY2FsbHkgaXMgb24tc3RhY2s7IHdlIHdhbnQgdG8gY29weSB0aGUgaW5mb3JtYXRpb24gaW4gaXQgdG8KKyAqIGEgbWFsbG9jZWQgYmxhbWVfZW50cnkgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBsaW5rZWQgbGlzdCBvZiB0aGUKKyAqIHNjb3JlYm9hcmQuICBUaGUgb3JpZ2luIG9mIGRzdCBsb3NlcyBhIHJlZmNudCB3aGlsZSB0aGUgb3JpZ2luIG9mIHNyYworICogZ2FpbnMgb25lLgorICovCitzdGF0aWMgdm9pZCBkdXBfZW50cnkoc3RydWN0IGJsYW1lX2VudHJ5ICpkc3QsIHN0cnVjdCBibGFtZV9lbnRyeSAqc3JjKQoreworCXN0cnVjdCBibGFtZV9lbnRyeSAqcCwgKm47CisKKwlwID0gZHN0LT5wcmV2OworCW4gPSBkc3QtPm5leHQ7CisJb3JpZ2luX2luY3JlZihzcmMtPnN1c3BlY3QpOworCW9yaWdpbl9kZWNyZWYoZHN0LT5zdXNwZWN0KTsKKwltZW1jcHkoZHN0LCBzcmMsIHNpemVvZigqc3JjKSk7CisJZHN0LT5wcmV2ID0gcDsKKwlkc3QtPm5leHQgPSBuOworCWRzdC0+c2NvcmUgPSAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbnRoX2xpbmUoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBpbnQgbG5vKQoreworCXJldHVybiBzYi0+ZmluYWxfYnVmICsgc2ItPmxpbmVub1tsbm9dOworfQorCisvKgorICogSXQgaXMga25vd24gdGhhdCBsaW5lcyBiZXR3ZWVuIHRsbm8gdG8gc2FtZSBjYW1lIGZyb20gcGFyZW50LCBhbmQgZQorICogaGFzIGFuIG92ZXJsYXAgd2l0aCB0aGF0IHJhbmdlLiAgaXQgYWxzbyBpcyBrbm93biB0aGF0IHBhcmVudCdzCisgKiBsaW5lIHBsbm8gY29ycmVzcG9uZHMgdG8gZSdzIGxpbmUgdGxuby4KKyAqCisgKiAgICAgICAgICAgICAgICA8LS0tLSBlIC0tLS0tPgorICogICAgICAgICAgICAgICAgICAgPC0tLS0tLT4KKyAqICAgICAgICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0+CisgKiAgICAgICAgICAgICA8LS0tLS0tLS0tLS0tPgorICogICAgICAgICAgICAgPC0tLS0tLS0tLS0tLS0tLS0tLT4KKyAqCisgKiBTcGxpdCBlIGludG8gcG90ZW50aWFsbHkgdGhyZWUgcGFydHM7IGJlZm9yZSB0aGlzIGNodW5rLCB0aGUgY2h1bmsKKyAqIHRvIGJlIGJsYW1lZCBmb3IgdGhlIHBhcmVudCwgYW5kIGFmdGVyIHRoYXQgcG9ydGlvbi4KKyAqLworc3RhdGljIHZvaWQgc3BsaXRfb3ZlcmxhcChzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0LAorCQkJICBzdHJ1Y3QgYmxhbWVfZW50cnkgKmUsCisJCQkgIGludCB0bG5vLCBpbnQgcGxubywgaW50IHNhbWUsCisJCQkgIHN0cnVjdCBvcmlnaW4gKnBhcmVudCkKK3sKKwlpbnQgY2h1bmtfZW5kX2xubzsKKwltZW1zZXQoc3BsaXQsIDAsIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkgWzNdKSk7CisKKwlpZiAoZS0+c19sbm8gPCB0bG5vKSB7CisJCS8qIHRoZXJlIGlzIGEgcHJlLWNodW5rIHBhcnQgbm90IGJsYW1lZCBvbiBwYXJlbnQgKi8KKwkJc3BsaXRbMF0uc3VzcGVjdCA9IG9yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCk7CisJCXNwbGl0WzBdLmxubyA9IGUtPmxubzsKKwkJc3BsaXRbMF0uc19sbm8gPSBlLT5zX2xubzsKKwkJc3BsaXRbMF0ubnVtX2xpbmVzID0gdGxubyAtIGUtPnNfbG5vOworCQlzcGxpdFsxXS5sbm8gPSBlLT5sbm8gKyB0bG5vIC0gZS0+c19sbm87CisJCXNwbGl0WzFdLnNfbG5vID0gcGxubzsKKwl9CisJZWxzZSB7CisJCXNwbGl0WzFdLmxubyA9IGUtPmxubzsKKwkJc3BsaXRbMV0uc19sbm8gPSBwbG5vICsgKGUtPnNfbG5vIC0gdGxubyk7CisJfQorCisJaWYgKHNhbWUgPCBlLT5zX2xubyArIGUtPm51bV9saW5lcykgeworCQkvKiB0aGVyZSBpcyBhIHBvc3QtY2h1bmsgcGFydCBub3QgYmxhbWVkIG9uIHBhcmVudCAqLworCQlzcGxpdFsyXS5zdXNwZWN0ID0gb3JpZ2luX2luY3JlZihlLT5zdXNwZWN0KTsKKwkJc3BsaXRbMl0ubG5vID0gZS0+bG5vICsgKHNhbWUgLSBlLT5zX2xubyk7CisJCXNwbGl0WzJdLnNfbG5vID0gZS0+c19sbm8gKyAoc2FtZSAtIGUtPnNfbG5vKTsKKwkJc3BsaXRbMl0ubnVtX2xpbmVzID0gZS0+c19sbm8gKyBlLT5udW1fbGluZXMgLSBzYW1lOworCQljaHVua19lbmRfbG5vID0gc3BsaXRbMl0ubG5vOworCX0KKwllbHNlCisJCWNodW5rX2VuZF9sbm8gPSBlLT5sbm8gKyBlLT5udW1fbGluZXM7CisJc3BsaXRbMV0ubnVtX2xpbmVzID0gY2h1bmtfZW5kX2xubyAtIHNwbGl0WzFdLmxubzsKKworCS8qCisJICogaWYgaXQgdHVybnMgb3V0IHRoZXJlIGlzIG5vdGhpbmcgdG8gYmxhbWUgdGhlIHBhcmVudCBmb3IsCisJICogZm9yZ2V0IGFib3V0IHRoZSBzcGxpdHRpbmcuICAhc3BsaXRbMV0uc3VzcGVjdCBzaWduYWxzIHRoaXMuCisJICovCisJaWYgKHNwbGl0WzFdLm51bV9saW5lcyA8IDEpCisJCXJldHVybjsKKwlzcGxpdFsxXS5zdXNwZWN0ID0gb3JpZ2luX2luY3JlZihwYXJlbnQpOworfQorCisvKgorICogc3BsaXRfb3ZlcmxhcCgpIGRpdmlkZWQgYW4gZXhpc3RpbmcgYmxhbWUgZSBpbnRvIHVwIHRvIHRocmVlIHBhcnRzCisgKiBpbiBzcGxpdC4gIEFkanVzdCB0aGUgbGlua2VkIGxpc3Qgb2YgYmxhbWVzIGluIHRoZSBzY29yZWJvYXJkIHRvCisgKiByZWZsZWN0IHRoZSBzcGxpdC4KKyAqLworc3RhdGljIHZvaWQgc3BsaXRfYmxhbWUoc3RydWN0IHNjb3JlYm9hcmQgKnNiLAorCQkJc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdCwKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqZSkKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5ld19lbnRyeTsKKworCWlmIChzcGxpdFswXS5zdXNwZWN0ICYmIHNwbGl0WzJdLnN1c3BlY3QpIHsKKwkJLyogVGhlIGZpcnN0IHBhcnQgKHJldXNlIHN0b3JhZ2UgZm9yIHRoZSBleGlzdGluZyBlbnRyeSBlKSAqLworCQlkdXBfZW50cnkoZSwgJnNwbGl0WzBdKTsKKworCQkvKiBUaGUgbGFzdCBwYXJ0IC0tIG1lICovCisJCW5ld19lbnRyeSA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwkJbWVtY3B5KG5ld19lbnRyeSwgJihzcGxpdFsyXSksIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkpKTsKKwkJYWRkX2JsYW1lX2VudHJ5KHNiLCBuZXdfZW50cnkpOworCisJCS8qIC4uLiBhbmQgdGhlIG1pZGRsZSBwYXJ0IC0tIHBhcmVudCAqLworCQluZXdfZW50cnkgPSB4bWFsbG9jKHNpemVvZigqbmV3X2VudHJ5KSk7CisJCW1lbWNweShuZXdfZW50cnksICYoc3BsaXRbMV0pLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5KSk7CisJCWFkZF9ibGFtZV9lbnRyeShzYiwgbmV3X2VudHJ5KTsKKwl9CisJZWxzZSBpZiAoIXNwbGl0WzBdLnN1c3BlY3QgJiYgIXNwbGl0WzJdLnN1c3BlY3QpCisJCS8qCisJCSAqIFRoZSBwYXJlbnQgY292ZXJzIHRoZSBlbnRpcmUgYXJlYTsgcmV1c2Ugc3RvcmFnZSBmb3IKKwkJICogZSBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBwYXJlbnQuCisJCSAqLworCQlkdXBfZW50cnkoZSwgJnNwbGl0WzFdKTsKKwllbHNlIGlmIChzcGxpdFswXS5zdXNwZWN0KSB7CisJCS8qIG1lIGFuZCB0aGVuIHBhcmVudCAqLworCQlkdXBfZW50cnkoZSwgJnNwbGl0WzBdKTsKKworCQluZXdfZW50cnkgPSB4bWFsbG9jKHNpemVvZigqbmV3X2VudHJ5KSk7CisJCW1lbWNweShuZXdfZW50cnksICYoc3BsaXRbMV0pLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5KSk7CisJCWFkZF9ibGFtZV9lbnRyeShzYiwgbmV3X2VudHJ5KTsKKwl9CisJZWxzZSB7CisJCS8qIHBhcmVudCBhbmQgdGhlbiBtZSAqLworCQlkdXBfZW50cnkoZSwgJnNwbGl0WzFdKTsKKworCQluZXdfZW50cnkgPSB4bWFsbG9jKHNpemVvZigqbmV3X2VudHJ5KSk7CisJCW1lbWNweShuZXdfZW50cnksICYoc3BsaXRbMl0pLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5KSk7CisJCWFkZF9ibGFtZV9lbnRyeShzYiwgbmV3X2VudHJ5KTsKKwl9CisKKwlpZiAoREVCVUcpIHsgLyogc2FuaXR5ICovCisJCXN0cnVjdCBibGFtZV9lbnRyeSAqZW50OworCQlpbnQgbG5vID0gc2ItPmVudC0+bG5vLCBjb3JydXB0ID0gMDsKKworCQlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7CisJCQlpZiAobG5vICE9IGVudC0+bG5vKQorCQkJCWNvcnJ1cHQgPSAxOworCQkJaWYgKGVudC0+c19sbm8gPCAwKQorCQkJCWNvcnJ1cHQgPSAxOworCQkJbG5vICs9IGVudC0+bnVtX2xpbmVzOworCQl9CisJCWlmIChjb3JydXB0KSB7CisJCQlsbm8gPSBzYi0+ZW50LT5sbm87CisJCQlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7CisJCQkJcHJpbnRmKCJMICU4ZCBsICU4ZCBuICU4ZFxuIiwKKwkJCQkgICAgICAgbG5vLCBlbnQtPmxubywgZW50LT5udW1fbGluZXMpOworCQkJCWxubyA9IGVudC0+bG5vICsgZW50LT5udW1fbGluZXM7CisJCQl9CisJCQlkaWUoIm9vcHMiKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEFmdGVyIHNwbGl0dGluZyB0aGUgYmxhbWUsIHRoZSBvcmlnaW5zIHVzZWQgYnkgdGhlCisgKiBvbi1zdGFjayBibGFtZV9lbnRyeSBzaG91bGQgbG9zZSBvbmUgcmVmY250IGVhY2guCisgKi8KK3N0YXRpYyB2b2lkIGRlY3JlZl9zcGxpdChzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJb3JpZ2luX2RlY3JlZihzcGxpdFtpXS5zdXNwZWN0KTsKK30KKworLyoKKyAqIEhlbHBlciBmb3IgYmxhbWVfY2h1bmsoKS4gIGJsYW1lX2VudHJ5IGUgaXMga25vd24gdG8gb3ZlcmxhcCB3aXRoCisgKiB0aGUgcGF0Y2ggaHVuazsgc3BsaXQgaXQgYW5kIHBhc3MgYmxhbWUgdG8gdGhlIHBhcmVudC4KKyAqLworc3RhdGljIHZvaWQgYmxhbWVfb3ZlcmxhcChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIHN0cnVjdCBibGFtZV9lbnRyeSAqZSwKKwkJCSAgaW50IHRsbm8sIGludCBwbG5vLCBpbnQgc2FtZSwKKwkJCSAgc3RydWN0IG9yaWdpbiAqcGFyZW50KQoreworCXN0cnVjdCBibGFtZV9lbnRyeSBzcGxpdFszXTsKKworCXNwbGl0X292ZXJsYXAoc3BsaXQsIGUsIHRsbm8sIHBsbm8sIHNhbWUsIHBhcmVudCk7CisJaWYgKHNwbGl0WzFdLnN1c3BlY3QpCisJCXNwbGl0X2JsYW1lKHNiLCBzcGxpdCwgZSk7CisJZGVjcmVmX3NwbGl0KHNwbGl0KTsKK30KKworLyoKKyAqIEZpbmQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBsYXN0IGxpbmUgdGhlIHRhcmdldCBpcyBzdXNwZWN0ZWQgZm9yLgorICovCitzdGF0aWMgaW50IGZpbmRfbGFzdF9pbl90YXJnZXQoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBzdHJ1Y3Qgb3JpZ2luICp0YXJnZXQpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplOworCWludCBsYXN0X2luX3RhcmdldCA9IC0xOworCisJZm9yIChlID0gc2ItPmVudDsgZTsgZSA9IGUtPm5leHQpIHsKKwkJaWYgKGUtPmd1aWx0eSB8fCAhc2FtZV9zdXNwZWN0KGUtPnN1c3BlY3QsIHRhcmdldCkpCisJCQljb250aW51ZTsKKwkJaWYgKGxhc3RfaW5fdGFyZ2V0IDwgZS0+c19sbm8gKyBlLT5udW1fbGluZXMpCisJCQlsYXN0X2luX3RhcmdldCA9IGUtPnNfbG5vICsgZS0+bnVtX2xpbmVzOworCX0KKwlyZXR1cm4gbGFzdF9pbl90YXJnZXQ7Cit9CisKKy8qCisgKiBQcm9jZXNzIG9uZSBodW5rIGZyb20gdGhlIHBhdGNoIGJldHdlZW4gdGhlIGN1cnJlbnQgc3VzcGVjdCBmb3IKKyAqIGJsYW1lX2VudHJ5IGUgYW5kIGl0cyBwYXJlbnQuICBGaW5kIGFuZCBzcGxpdCB0aGUgb3ZlcmxhcCwgYW5kCisgKiBwYXNzIGJsYW1lIHRvIHRoZSBvdmVybGFwcGluZyBwYXJ0IHRvIHRoZSBwYXJlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGJsYW1lX2NodW5rKHN0cnVjdCBzY29yZWJvYXJkICpzYiwKKwkJCWludCB0bG5vLCBpbnQgcGxubywgaW50IHNhbWUsCisJCQlzdHJ1Y3Qgb3JpZ2luICp0YXJnZXQsIHN0cnVjdCBvcmlnaW4gKnBhcmVudCkKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmU7CisKKwlmb3IgKGUgPSBzYi0+ZW50OyBlOyBlID0gZS0+bmV4dCkgeworCQlpZiAoZS0+Z3VpbHR5IHx8ICFzYW1lX3N1c3BlY3QoZS0+c3VzcGVjdCwgdGFyZ2V0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2FtZSA8PSBlLT5zX2xubykKKwkJCWNvbnRpbnVlOworCQlpZiAodGxubyA8IGUtPnNfbG5vICsgZS0+bnVtX2xpbmVzKQorCQkJYmxhbWVfb3ZlcmxhcChzYiwgZSwgdGxubywgcGxubywgc2FtZSwgcGFyZW50KTsKKwl9Cit9CisKK3N0cnVjdCBibGFtZV9jaHVua19jYl9kYXRhIHsKKwlzdHJ1Y3Qgc2NvcmVib2FyZCAqc2I7CisJc3RydWN0IG9yaWdpbiAqdGFyZ2V0OworCXN0cnVjdCBvcmlnaW4gKnBhcmVudDsKKwlsb25nIHBsbm87CisJbG9uZyB0bG5vOworfTsKKworc3RhdGljIGludCBibGFtZV9jaHVua19jYihsb25nIHN0YXJ0X2EsIGxvbmcgY291bnRfYSwKKwkJCSAgbG9uZyBzdGFydF9iLCBsb25nIGNvdW50X2IsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGJsYW1lX2NodW5rX2NiX2RhdGEgKmQgPSBkYXRhOworCWJsYW1lX2NodW5rKGQtPnNiLCBkLT50bG5vLCBkLT5wbG5vLCBzdGFydF9iLCBkLT50YXJnZXQsIGQtPnBhcmVudCk7CisJZC0+cGxubyA9IHN0YXJ0X2EgKyBjb3VudF9hOworCWQtPnRsbm8gPSBzdGFydF9iICsgY291bnRfYjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIGFyZSBsb29raW5nIGF0IHRoZSBvcmlnaW4gJ3RhcmdldCcgYW5kIGFpbWluZyB0byBwYXNzIGJsYW1lCisgKiBmb3IgdGhlIGxpbmVzIGl0IGlzIHN1c3BlY3RlZCB0byBpdHMgcGFyZW50LiAgUnVuIGRpZmYgdG8gZmluZAorICogd2hpY2ggbGluZXMgY2FtZSBmcm9tIHBhcmVudCBhbmQgcGFzcyBibGFtZSBmb3IgdGhlbS4KKyAqLworc3RhdGljIGludCBwYXNzX2JsYW1lX3RvX3BhcmVudChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCisJCQkJc3RydWN0IG9yaWdpbiAqdGFyZ2V0LAorCQkJCXN0cnVjdCBvcmlnaW4gKnBhcmVudCkKK3sKKwlpbnQgbGFzdF9pbl90YXJnZXQ7CisJbW1maWxlX3QgZmlsZV9wLCBmaWxlX287CisJc3RydWN0IGJsYW1lX2NodW5rX2NiX2RhdGEgZDsKKworCW1lbXNldCgmZCwgMCwgc2l6ZW9mKGQpKTsKKwlkLnNiID0gc2I7IGQudGFyZ2V0ID0gdGFyZ2V0OyBkLnBhcmVudCA9IHBhcmVudDsKKwlsYXN0X2luX3RhcmdldCA9IGZpbmRfbGFzdF9pbl90YXJnZXQoc2IsIHRhcmdldCk7CisJaWYgKGxhc3RfaW5fdGFyZ2V0IDwgMCkKKwkJcmV0dXJuIDE7IC8qIG5vdGhpbmcgcmVtYWlucyBmb3IgdGhpcyB0YXJnZXQgKi8KKworCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCBwYXJlbnQsICZmaWxlX3ApOworCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCB0YXJnZXQsICZmaWxlX28pOworCW51bV9nZXRfcGF0Y2grKzsKKworCWRpZmZfaHVua3MoJmZpbGVfcCwgJmZpbGVfbywgMCwgYmxhbWVfY2h1bmtfY2IsICZkKTsKKwkvKiBUaGUgcmVzdCAoaS5lLiBhbnl0aGluZyBhZnRlciB0bG5vKSBhcmUgdGhlIHNhbWUgYXMgdGhlIHBhcmVudCAqLworCWJsYW1lX2NodW5rKHNiLCBkLnRsbm8sIGQucGxubywgbGFzdF9pbl90YXJnZXQsIHRhcmdldCwgcGFyZW50KTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhlIGxpbmVzIGluIGJsYW1lX2VudHJ5IGFmdGVyIHNwbGl0dGluZyBibGFtZXMgbWFueSB0aW1lcyBjYW4gYmVjb21lCisgKiB2ZXJ5IHNtYWxsIGFuZCB0cml2aWFsLCBhbmQgYXQgc29tZSBwb2ludCBpdCBiZWNvbWVzIHBvaW50bGVzcyB0bworICogYmxhbWUgdGhlIHBhcmVudHMuICBFLmcuICJcdFx0fVxuXHR9XG5cbiIgYXBwZWFycyBldmVyeXdoZXJlIGluIGFueQorICogb3JkaW5hcnkgQyBwcm9ncmFtLCBhbmQgaXQgaXMgbm90IHdvcnRoIHRvIHNheSBpdCB3YXMgY29waWVkIGZyb20KKyAqIHRvdGFsbHkgdW5yZWxhdGVkIGZpbGUgaW4gdGhlIHBhcmVudC4KKyAqCisgKiBDb21wdXRlIGhvdyB0cml2aWFsIHRoZSBsaW5lcyBpbiB0aGUgYmxhbWVfZW50cnkgYXJlLgorICovCitzdGF0aWMgdW5zaWduZWQgZW50X3Njb3JlKHN0cnVjdCBzY29yZWJvYXJkICpzYiwgc3RydWN0IGJsYW1lX2VudHJ5ICplKQoreworCXVuc2lnbmVkIHNjb3JlOworCWNvbnN0IGNoYXIgKmNwLCAqZXA7CisKKwlpZiAoZS0+c2NvcmUpCisJCXJldHVybiBlLT5zY29yZTsKKworCXNjb3JlID0gMTsKKwljcCA9IG50aF9saW5lKHNiLCBlLT5sbm8pOworCWVwID0gbnRoX2xpbmUoc2IsIGUtPmxubyArIGUtPm51bV9saW5lcyk7CisJd2hpbGUgKGNwIDwgZXApIHsKKwkJdW5zaWduZWQgY2ggPSAqKCh1bnNpZ25lZCBjaGFyICopY3ApOworCQlpZiAoaXNhbG51bShjaCkpCisJCQlzY29yZSsrOworCQljcCsrOworCX0KKwllLT5zY29yZSA9IHNjb3JlOworCXJldHVybiBzY29yZTsKK30KKworLyoKKyAqIGJlc3Rfc29fZmFyW10gYW5kIHRoaXNbXSBhcmUgYm90aCBhIHNwbGl0IG9mIGFuIGV4aXN0aW5nIGJsYW1lX2VudHJ5CisgKiB0aGF0IHBhc3NlcyBibGFtZSB0byB0aGUgcGFyZW50LiAgTWFpbnRhaW4gYmVzdF9zb19mYXIgdGhlIGJlc3Qgc3BsaXQKKyAqIHNvIGZhciwgYnkgY29tcGFyaW5nIHRoaXMgYW5kIGJlc3Rfc29fZmFyIGFuZCBjb3B5aW5nIHRoaXMgaW50bworICogYnN0X3NvX2ZhciBhcyBuZWVkZWQuCisgKi8KK3N0YXRpYyB2b2lkIGNvcHlfc3BsaXRfaWZfYmV0dGVyKHN0cnVjdCBzY29yZWJvYXJkICpzYiwKKwkJCQkgc3RydWN0IGJsYW1lX2VudHJ5ICpiZXN0X3NvX2ZhciwKKwkJCQkgc3RydWN0IGJsYW1lX2VudHJ5ICp0aGlzKQoreworCWludCBpOworCisJaWYgKCF0aGlzWzFdLnN1c3BlY3QpCisJCXJldHVybjsKKwlpZiAoYmVzdF9zb19mYXJbMV0uc3VzcGVjdCkgeworCQlpZiAoZW50X3Njb3JlKHNiLCAmdGhpc1sxXSkgPCBlbnRfc2NvcmUoc2IsICZiZXN0X3NvX2ZhclsxXSkpCisJCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJb3JpZ2luX2luY3JlZih0aGlzW2ldLnN1c3BlY3QpOworCWRlY3JlZl9zcGxpdChiZXN0X3NvX2Zhcik7CisJbWVtY3B5KGJlc3Rfc29fZmFyLCB0aGlzLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5IFszXSkpOworfQorCisvKgorICogV2UgYXJlIGxvb2tpbmcgYXQgYSBwYXJ0IG9mIHRoZSBmaW5hbCBpbWFnZSByZXByZXNlbnRlZCBieQorICogZW50ICh0bG5vIGFuZCBzYW1lIGFyZSBvZmZzZXQgYnkgZW50LT5zX2xubykuCisgKiB0bG5vIGlzIHdoZXJlIHdlIGFyZSBsb29raW5nIGF0IGluIHRoZSBmaW5hbCBpbWFnZS4KKyAqIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgc2FtZSBtYXRjaCBwcmVpbWFnZS4KKyAqIHBsbm8gaXMgd2hlcmUgd2UgYXJlIGxvb2tpbmcgYXQgaW4gdGhlIHByZWltYWdlLgorICoKKyAqIDwtLS0tLS0tLS0tLS0tLSBmaW5hbCBpbWFnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tPgorICogICAgICAgPC0tLS0tLWVudC0tLS0tLT4KKyAqICAgICAgICAgXnRsbm8gXnNhbWUKKyAqICAgIDwtLS0tLS0tLS1wcmVpbWFnZS0tLS0tPgorICogICAgICAgICBecGxubworICoKKyAqIEFsbCBsaW5lIG51bWJlcnMgYXJlIDAtYmFzZWQuCisgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9zcGxpdChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCisJCQkgc3RydWN0IGJsYW1lX2VudHJ5ICplbnQsCisJCQkgaW50IHRsbm8sIGludCBwbG5vLCBpbnQgc2FtZSwKKwkJCSBzdHJ1Y3Qgb3JpZ2luICpwYXJlbnQsCisJCQkgc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdCkKK3sKKwlpZiAoZW50LT5udW1fbGluZXMgPD0gdGxubykKKwkJcmV0dXJuOworCWlmICh0bG5vIDwgc2FtZSkgeworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgdGhpc1szXTsKKwkJdGxubyArPSBlbnQtPnNfbG5vOworCQlzYW1lICs9IGVudC0+c19sbm87CisJCXNwbGl0X292ZXJsYXAodGhpcywgZW50LCB0bG5vLCBwbG5vLCBzYW1lLCBwYXJlbnQpOworCQljb3B5X3NwbGl0X2lmX2JldHRlcihzYiwgc3BsaXQsIHRoaXMpOworCQlkZWNyZWZfc3BsaXQodGhpcyk7CisJfQorfQorCitzdHJ1Y3QgaGFuZGxlX3NwbGl0X2NiX2RhdGEgeworCXN0cnVjdCBzY29yZWJvYXJkICpzYjsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKwlzdHJ1Y3Qgb3JpZ2luICpwYXJlbnQ7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdDsKKwlsb25nIHBsbm87CisJbG9uZyB0bG5vOworfTsKKworc3RhdGljIGludCBoYW5kbGVfc3BsaXRfY2IobG9uZyBzdGFydF9hLCBsb25nIGNvdW50X2EsCisJCQkgICBsb25nIHN0YXJ0X2IsIGxvbmcgY291bnRfYiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaGFuZGxlX3NwbGl0X2NiX2RhdGEgKmQgPSBkYXRhOworCWhhbmRsZV9zcGxpdChkLT5zYiwgZC0+ZW50LCBkLT50bG5vLCBkLT5wbG5vLCBzdGFydF9iLCBkLT5wYXJlbnQsCisJCSAgICAgZC0+c3BsaXQpOworCWQtPnBsbm8gPSBzdGFydF9hICsgY291bnRfYTsKKwlkLT50bG5vID0gc3RhcnRfYiArIGNvdW50X2I7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBsaW5lcyBmcm9tIHBhcmVudCB0aGF0IGFyZSB0aGUgc2FtZSBhcyBlbnQgc28gdGhhdAorICogd2UgY2FuIHBhc3MgYmxhbWVzIHRvIGl0LiAgZmlsZV9wIGhhcyB0aGUgYmxvYiBjb250ZW50cyBmb3IKKyAqIHRoZSBwYXJlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGZpbmRfY29weV9pbl9ibG9iKHN0cnVjdCBzY29yZWJvYXJkICpzYiwKKwkJCSAgICAgIHN0cnVjdCBibGFtZV9lbnRyeSAqZW50LAorCQkJICAgICAgc3RydWN0IG9yaWdpbiAqcGFyZW50LAorCQkJICAgICAgc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdCwKKwkJCSAgICAgIG1tZmlsZV90ICpmaWxlX3ApCit7CisJY29uc3QgY2hhciAqY3A7CisJaW50IGNudDsKKwltbWZpbGVfdCBmaWxlX287CisJc3RydWN0IGhhbmRsZV9zcGxpdF9jYl9kYXRhIGQ7CisKKwltZW1zZXQoJmQsIDAsIHNpemVvZihkKSk7CisJZC5zYiA9IHNiOyBkLmVudCA9IGVudDsgZC5wYXJlbnQgPSBwYXJlbnQ7IGQuc3BsaXQgPSBzcGxpdDsKKwkvKgorCSAqIFByZXBhcmUgbW1maWxlIHRoYXQgY29udGFpbnMgb25seSB0aGUgbGluZXMgaW4gZW50LgorCSAqLworCWNwID0gbnRoX2xpbmUoc2IsIGVudC0+bG5vKTsKKwlmaWxlX28ucHRyID0gKGNoYXIgKikgY3A7CisJY250ID0gZW50LT5udW1fbGluZXM7CisKKwl3aGlsZSAoY250ICYmIGNwIDwgc2ItPmZpbmFsX2J1ZiArIHNiLT5maW5hbF9idWZfc2l6ZSkgeworCQlpZiAoKmNwKysgPT0gJ1xuJykKKwkJCWNudC0tOworCX0KKwlmaWxlX28uc2l6ZSA9IGNwIC0gZmlsZV9vLnB0cjsKKworCS8qCisJICogZmlsZV9vIGlzIGEgcGFydCBvZiBmaW5hbCBpbWFnZSB3ZSBhcmUgYW5ub3RhdGluZy4KKwkgKiBmaWxlX3AgcGFydGlhbGx5IG1heSBtYXRjaCB0aGF0IGltYWdlLgorCSAqLworCW1lbXNldChzcGxpdCwgMCwgc2l6ZW9mKHN0cnVjdCBibGFtZV9lbnRyeSBbM10pKTsKKwlkaWZmX2h1bmtzKGZpbGVfcCwgJmZpbGVfbywgMSwgaGFuZGxlX3NwbGl0X2NiLCAmZCk7CisJLyogcmVtYWluZGVyLCBpZiBhbnksIGFsbCBtYXRjaCB0aGUgcHJlaW1hZ2UgKi8KKwloYW5kbGVfc3BsaXQoc2IsIGVudCwgZC50bG5vLCBkLnBsbm8sIGVudC0+bnVtX2xpbmVzLCBwYXJlbnQsIHNwbGl0KTsKK30KKworLyoKKyAqIFNlZSBpZiBsaW5lcyBjdXJyZW50bHkgdGFyZ2V0IGlzIHN1c3BlY3RlZCBmb3IgY2FuIGJlIGF0dHJpYnV0ZWQgdG8KKyAqIHBhcmVudC4KKyAqLworc3RhdGljIGludCBmaW5kX21vdmVfaW5fcGFyZW50KHN0cnVjdCBzY29yZWJvYXJkICpzYiwKKwkJCSAgICAgICBzdHJ1Y3Qgb3JpZ2luICp0YXJnZXQsCisJCQkgICAgICAgc3RydWN0IG9yaWdpbiAqcGFyZW50KQoreworCWludCBsYXN0X2luX3RhcmdldCwgbWFkZV9wcm9ncmVzczsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmUsIHNwbGl0WzNdOworCW1tZmlsZV90IGZpbGVfcDsKKworCWxhc3RfaW5fdGFyZ2V0ID0gZmluZF9sYXN0X2luX3RhcmdldChzYiwgdGFyZ2V0KTsKKwlpZiAobGFzdF9pbl90YXJnZXQgPCAwKQorCQlyZXR1cm4gMTsgLyogbm90aGluZyByZW1haW5zIGZvciB0aGlzIHRhcmdldCAqLworCisJZmlsbF9vcmlnaW5fYmxvYigmc2ItPnJldnMtPmRpZmZvcHQsIHBhcmVudCwgJmZpbGVfcCk7CisJaWYgKCFmaWxlX3AucHRyKQorCQlyZXR1cm4gMDsKKworCW1hZGVfcHJvZ3Jlc3MgPSAxOworCXdoaWxlIChtYWRlX3Byb2dyZXNzKSB7CisJCW1hZGVfcHJvZ3Jlc3MgPSAwOworCQlmb3IgKGUgPSBzYi0+ZW50OyBlOyBlID0gZS0+bmV4dCkgeworCQkJaWYgKGUtPmd1aWx0eSB8fCAhc2FtZV9zdXNwZWN0KGUtPnN1c3BlY3QsIHRhcmdldCkgfHwKKwkJCSAgICBlbnRfc2NvcmUoc2IsIGUpIDwgYmxhbWVfbW92ZV9zY29yZSkKKwkJCQljb250aW51ZTsKKwkJCWZpbmRfY29weV9pbl9ibG9iKHNiLCBlLCBwYXJlbnQsIHNwbGl0LCAmZmlsZV9wKTsKKwkJCWlmIChzcGxpdFsxXS5zdXNwZWN0ICYmCisJCQkgICAgYmxhbWVfbW92ZV9zY29yZSA8IGVudF9zY29yZShzYiwgJnNwbGl0WzFdKSkgeworCQkJCXNwbGl0X2JsYW1lKHNiLCBzcGxpdCwgZSk7CisJCQkJbWFkZV9wcm9ncmVzcyA9IDE7CisJCQl9CisJCQlkZWNyZWZfc3BsaXQoc3BsaXQpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgYmxhbWVfbGlzdCB7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisJc3RydWN0IGJsYW1lX2VudHJ5IHNwbGl0WzNdOworfTsKKworLyoKKyAqIENvdW50IHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGUgdGFyZ2V0IGlzIHN1c3BlY3RlZCBmb3IsCisgKiBhbmQgcHJlcGFyZSBhIGxpc3Qgb2YgZW50cnkgYW5kIHRoZSBiZXN0IHNwbGl0LgorICovCitzdGF0aWMgc3RydWN0IGJsYW1lX2xpc3QgKnNldHVwX2JsYW1lX2xpc3Qoc3RydWN0IHNjb3JlYm9hcmQgKnNiLAorCQkJCQkgICBzdHJ1Y3Qgb3JpZ2luICp0YXJnZXQsCisJCQkJCSAgIGludCBtaW5fc2NvcmUsCisJCQkJCSAgIGludCAqbnVtX2VudHNfcCkKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmU7CisJaW50IG51bV9lbnRzLCBpOworCXN0cnVjdCBibGFtZV9saXN0ICpibGFtZV9saXN0ID0gTlVMTDsKKworCWZvciAoZSA9IHNiLT5lbnQsIG51bV9lbnRzID0gMDsgZTsgZSA9IGUtPm5leHQpCisJCWlmICghZS0+c2Nhbm5lZCAmJiAhZS0+Z3VpbHR5ICYmCisJCSAgICBzYW1lX3N1c3BlY3QoZS0+c3VzcGVjdCwgdGFyZ2V0KSAmJgorCQkgICAgbWluX3Njb3JlIDwgZW50X3Njb3JlKHNiLCBlKSkKKwkJCW51bV9lbnRzKys7CisJaWYgKG51bV9lbnRzKSB7CisJCWJsYW1lX2xpc3QgPSB4Y2FsbG9jKG51bV9lbnRzLCBzaXplb2Yoc3RydWN0IGJsYW1lX2xpc3QpKTsKKwkJZm9yIChlID0gc2ItPmVudCwgaSA9IDA7IGU7IGUgPSBlLT5uZXh0KQorCQkJaWYgKCFlLT5zY2FubmVkICYmICFlLT5ndWlsdHkgJiYKKwkJCSAgICBzYW1lX3N1c3BlY3QoZS0+c3VzcGVjdCwgdGFyZ2V0KSAmJgorCQkJICAgIG1pbl9zY29yZSA8IGVudF9zY29yZShzYiwgZSkpCisJCQkJYmxhbWVfbGlzdFtpKytdLmVudCA9IGU7CisJfQorCSpudW1fZW50c19wID0gbnVtX2VudHM7CisJcmV0dXJuIGJsYW1lX2xpc3Q7Cit9CisKKy8qCisgKiBSZXNldCB0aGUgc2Nhbm5lZCBzdGF0dXMgb24gYWxsIGVudHJpZXMuCisgKi8KK3N0YXRpYyB2b2lkIHJlc2V0X3NjYW5uZWRfZmxhZyhzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplOworCWZvciAoZSA9IHNiLT5lbnQ7IGU7IGUgPSBlLT5uZXh0KQorCQllLT5zY2FubmVkID0gMDsKK30KKworLyoKKyAqIEZvciBsaW5lcyB0YXJnZXQgaXMgc3VzcGVjdGVkIGZvciwgc2VlIGlmIHdlIGNhbiBmaW5kIGNvZGUgbW92ZW1lbnQKKyAqIGFjcm9zcyBmaWxlIGJvdW5kYXJ5IGZyb20gdGhlIHBhcmVudCBjb21taXQuICBwb3JpZ2luIGlzIHRoZSBwYXRoCisgKiBpbiB0aGUgcGFyZW50IHdlIGFscmVhZHkgdHJpZWQuCisgKi8KK3N0YXRpYyBpbnQgZmluZF9jb3B5X2luX3BhcmVudChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCisJCQkgICAgICAgc3RydWN0IG9yaWdpbiAqdGFyZ2V0LAorCQkJICAgICAgIHN0cnVjdCBjb21taXQgKnBhcmVudCwKKwkJCSAgICAgICBzdHJ1Y3Qgb3JpZ2luICpwb3JpZ2luLAorCQkJICAgICAgIGludCBvcHQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmX29wdHM7CisJY29uc3QgY2hhciAqcGF0aHNbMV07CisJaW50IGksIGo7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgYmxhbWVfbGlzdCAqYmxhbWVfbGlzdDsKKwlpbnQgbnVtX2VudHM7CisKKwlibGFtZV9saXN0ID0gc2V0dXBfYmxhbWVfbGlzdChzYiwgdGFyZ2V0LCBibGFtZV9jb3B5X3Njb3JlLCAmbnVtX2VudHMpOworCWlmICghYmxhbWVfbGlzdCkKKwkJcmV0dXJuIDE7IC8qIG5vdGhpbmcgcmVtYWlucyBmb3IgdGhpcyB0YXJnZXQgKi8KKworCWRpZmZfc2V0dXAoJmRpZmZfb3B0cyk7CisJRElGRl9PUFRfU0VUKCZkaWZmX29wdHMsIFJFQ1VSU0lWRSk7CisJZGlmZl9vcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisKKwlwYXRoc1swXSA9IE5VTEw7CisJZGlmZl90cmVlX3NldHVwX3BhdGhzKHBhdGhzLCAmZGlmZl9vcHRzKTsKKwlkaWZmX3NldHVwX2RvbmUoJmRpZmZfb3B0cyk7CisKKwkvKiBUcnkgImZpbmQgY29waWVzIGhhcmRlciIgb24gbmV3IHBhdGggaWYgcmVxdWVzdGVkOworCSAqIHdlIGRvIG5vdCB3YW50IHRvIHVzZSBkaWZmY29yZV9yZW5hbWUoKSBhY3R1YWxseSB0bworCSAqIG1hdGNoIHRoaW5ncyB1cDsgZmluZF9jb3BpZXNfaGFyZGVyIGlzIHNldCBvbmx5IHRvCisJICogZm9yY2UgZGlmZl90cmVlX3NoYTEoKSB0byBmZWVkIGFsbCBmaWxlcGFpcnMgdG8gZGlmZl9xdWV1ZSwKKwkgKiBhbmQgdGhpcyBjb2RlIG5lZWRzIHRvIGJlIGFmdGVyIGRpZmZfc2V0dXBfZG9uZSgpLCB3aGljaAorCSAqIHVzdWFsbHkgbWFrZXMgZmluZC1jb3BpZXMtaGFyZGVyIGltcGx5IGNvcHkgZGV0ZWN0aW9uLgorCSAqLworCWlmICgob3B0ICYgUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFU1QpCisJICAgIHx8ICgob3B0ICYgUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFUikKKwkJJiYgKCFwb3JpZ2luIHx8IHN0cmNtcCh0YXJnZXQtPnBhdGgsIHBvcmlnaW4tPnBhdGgpKSkpCisJCURJRkZfT1BUX1NFVCgmZGlmZl9vcHRzLCBGSU5EX0NPUElFU19IQVJERVIpOworCisJaWYgKGlzX251bGxfc2hhMSh0YXJnZXQtPmNvbW1pdC0+b2JqZWN0LnNoYTEpKQorCQlkb19kaWZmX2NhY2hlKHBhcmVudC0+dHJlZS0+b2JqZWN0LnNoYTEsICZkaWZmX29wdHMpOworCWVsc2UKKwkJZGlmZl90cmVlX3NoYTEocGFyZW50LT50cmVlLT5vYmplY3Quc2hhMSwKKwkJCSAgICAgICB0YXJnZXQtPmNvbW1pdC0+dHJlZS0+b2JqZWN0LnNoYTEsCisJCQkgICAgICAgIiIsICZkaWZmX29wdHMpOworCisJaWYgKCFESUZGX09QVF9UU1QoJmRpZmZfb3B0cywgRklORF9DT1BJRVNfSEFSREVSKSkKKwkJZGlmZmNvcmVfc3RkKCZkaWZmX29wdHMpOworCisJcmV0dmFsID0gMDsKKwl3aGlsZSAoMSkgeworCQlpbnQgbWFkZV9wcm9ncmVzcyA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldOworCQkJc3RydWN0IG9yaWdpbiAqbm9yaWdpbjsKKwkJCW1tZmlsZV90IGZpbGVfcDsKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSB0aGlzWzNdOworCisJCQlpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpKQorCQkJCWNvbnRpbnVlOyAvKiBkb2VzIG5vdCBleGlzdCBpbiBwYXJlbnQgKi8KKwkJCWlmIChTX0lTR0lUTElOSyhwLT5vbmUtPm1vZGUpKQorCQkJCWNvbnRpbnVlOyAvKiBpZ25vcmUgZ2l0IGxpbmtzICovCisJCQlpZiAocG9yaWdpbiAmJiAhc3RyY21wKHAtPm9uZS0+cGF0aCwgcG9yaWdpbi0+cGF0aCkpCisJCQkJLyogZmluZF9tb3ZlIGFscmVhZHkgZGVhbHQgd2l0aCB0aGlzIHBhdGggKi8KKwkJCQljb250aW51ZTsKKworCQkJbm9yaWdpbiA9IGdldF9vcmlnaW4oc2IsIHBhcmVudCwgcC0+b25lLT5wYXRoKTsKKwkJCWhhc2hjcHkobm9yaWdpbi0+YmxvYl9zaGExLCBwLT5vbmUtPnNoYTEpOworCQkJbm9yaWdpbi0+bW9kZSA9IHAtPm9uZS0+bW9kZTsKKwkJCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCBub3JpZ2luLCAmZmlsZV9wKTsKKwkJCWlmICghZmlsZV9wLnB0cikKKwkJCQljb250aW51ZTsKKworCQkJZm9yIChqID0gMDsgaiA8IG51bV9lbnRzOyBqKyspIHsKKwkJCQlmaW5kX2NvcHlfaW5fYmxvYihzYiwgYmxhbWVfbGlzdFtqXS5lbnQsCisJCQkJCQkgIG5vcmlnaW4sIHRoaXMsICZmaWxlX3ApOworCQkJCWNvcHlfc3BsaXRfaWZfYmV0dGVyKHNiLCBibGFtZV9saXN0W2pdLnNwbGl0LAorCQkJCQkJICAgICB0aGlzKTsKKwkJCQlkZWNyZWZfc3BsaXQodGhpcyk7CisJCQl9CisJCQlvcmlnaW5fZGVjcmVmKG5vcmlnaW4pOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IG51bV9lbnRzOyBqKyspIHsKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqc3BsaXQgPSBibGFtZV9saXN0W2pdLnNwbGl0OworCQkJaWYgKHNwbGl0WzFdLnN1c3BlY3QgJiYKKwkJCSAgICBibGFtZV9jb3B5X3Njb3JlIDwgZW50X3Njb3JlKHNiLCAmc3BsaXRbMV0pKSB7CisJCQkJc3BsaXRfYmxhbWUoc2IsIHNwbGl0LCBibGFtZV9saXN0W2pdLmVudCk7CisJCQkJbWFkZV9wcm9ncmVzcyA9IDE7CisJCQl9CisJCQllbHNlCisJCQkJYmxhbWVfbGlzdFtqXS5lbnQtPnNjYW5uZWQgPSAxOworCQkJZGVjcmVmX3NwbGl0KHNwbGl0KTsKKwkJfQorCQlmcmVlKGJsYW1lX2xpc3QpOworCisJCWlmICghbWFkZV9wcm9ncmVzcykKKwkJCWJyZWFrOworCQlibGFtZV9saXN0ID0gc2V0dXBfYmxhbWVfbGlzdChzYiwgdGFyZ2V0LCBibGFtZV9jb3B5X3Njb3JlLCAmbnVtX2VudHMpOworCQlpZiAoIWJsYW1lX2xpc3QpIHsKKwkJCXJldHZhbCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXNldF9zY2FubmVkX2ZsYWcoc2IpOworCWRpZmZfZmx1c2goJmRpZmZfb3B0cyk7CisJZGlmZl90cmVlX3JlbGVhc2VfcGF0aHMoJmRpZmZfb3B0cyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoZSBibG9icyBvZiBvcmlnaW4gYW5kIHBvcmlnaW4gZXhhY3RseSBtYXRjaCwgc28gZXZlcnl0aGluZworICogb3JpZ2luIGlzIHN1c3BlY3RlZCBmb3IgY2FuIGJlIGJsYW1lZCBvbiB0aGUgcGFyZW50LgorICovCitzdGF0aWMgdm9pZCBwYXNzX3dob2xlX2JsYW1lKHN0cnVjdCBzY29yZWJvYXJkICpzYiwKKwkJCSAgICAgc3RydWN0IG9yaWdpbiAqb3JpZ2luLCBzdHJ1Y3Qgb3JpZ2luICpwb3JpZ2luKQoreworCXN0cnVjdCBibGFtZV9lbnRyeSAqZTsKKworCWlmICghcG9yaWdpbi0+ZmlsZS5wdHIgJiYgb3JpZ2luLT5maWxlLnB0cikgeworCQkvKiBTdGVhbCBpdHMgZmlsZSAqLworCQlwb3JpZ2luLT5maWxlID0gb3JpZ2luLT5maWxlOworCQlvcmlnaW4tPmZpbGUucHRyID0gTlVMTDsKKwl9CisJZm9yIChlID0gc2ItPmVudDsgZTsgZSA9IGUtPm5leHQpIHsKKwkJaWYgKCFzYW1lX3N1c3BlY3QoZS0+c3VzcGVjdCwgb3JpZ2luKSkKKwkJCWNvbnRpbnVlOworCQlvcmlnaW5faW5jcmVmKHBvcmlnaW4pOworCQlvcmlnaW5fZGVjcmVmKGUtPnN1c3BlY3QpOworCQllLT5zdXNwZWN0ID0gcG9yaWdpbjsKKwl9Cit9CisKKy8qCisgKiBXZSBwYXNzIGJsYW1lIGZyb20gdGhlIGN1cnJlbnQgY29tbWl0IHRvIGl0cyBwYXJlbnRzLiAgV2Uga2VlcCBzYXlpbmcKKyAqICJwYXJlbnQiIChhbmQgInBvcmlnaW4iKSwgYnV0IHdoYXQgd2UgbWVhbiBpcyB0byBmaW5kIHNjYXBlZ29hdCB0bworICogZXhvbmVyYXRlIG91cnNlbHZlcy4KKyAqLworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqZmlyc3Rfc2NhcGVnb2F0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWlmICghcmV2ZXJzZSkKKwkJcmV0dXJuIGNvbW1pdC0+cGFyZW50czsKKwlyZXR1cm4gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPmNoaWxkcmVuLCAmY29tbWl0LT5vYmplY3QpOworfQorCitzdGF0aWMgaW50IG51bV9zY2FwZWdvYXRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBjbnQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsID0gZmlyc3Rfc2NhcGVnb2F0KHJldnMsIGNvbW1pdCk7CisJZm9yIChjbnQgPSAwOyBsOyBsID0gbC0+bmV4dCkKKwkJY250Kys7CisJcmV0dXJuIGNudDsKK30KKworI2RlZmluZSBNQVhTRyAxNgorCitzdGF0aWMgdm9pZCBwYXNzX2JsYW1lKHN0cnVjdCBzY29yZWJvYXJkICpzYiwgc3RydWN0IG9yaWdpbiAqb3JpZ2luLCBpbnQgb3B0KQoreworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IHNiLT5yZXZzOworCWludCBpLCBwYXNzLCBudW1fc2c7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gb3JpZ2luLT5jb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpzZzsKKwlzdHJ1Y3Qgb3JpZ2luICpzZ19idWZbTUFYU0ddOworCXN0cnVjdCBvcmlnaW4gKnBvcmlnaW4sICoqc2dfb3JpZ2luID0gc2dfYnVmOworCisJbnVtX3NnID0gbnVtX3NjYXBlZ29hdHMocmV2cywgY29tbWl0KTsKKwlpZiAoIW51bV9zZykKKwkJZ290byBmaW5pc2g7CisJZWxzZSBpZiAobnVtX3NnIDwgQVJSQVlfU0laRShzZ19idWYpKQorCQltZW1zZXQoc2dfYnVmLCAwLCBzaXplb2Yoc2dfYnVmKSk7CisJZWxzZQorCQlzZ19vcmlnaW4gPSB4Y2FsbG9jKG51bV9zZywgc2l6ZW9mKCpzZ19vcmlnaW4pKTsKKworCS8qCisJICogVGhlIGZpcnN0IHBhc3MgbG9va3MgZm9yIHVucmVuYW1lZCBwYXRoIHRvIG9wdGltaXplIGZvcgorCSAqIGNvbW1vbiBjYXNlcywgdGhlbiB3ZSBsb29rIGZvciByZW5hbWVzIGluIHRoZSBzZWNvbmQgcGFzcy4KKwkgKi8KKwlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisJCXN0cnVjdCBvcmlnaW4gKigqZmluZCkoc3RydWN0IHNjb3JlYm9hcmQgKiwKKwkJCQkgICAgICAgc3RydWN0IGNvbW1pdCAqLCBzdHJ1Y3Qgb3JpZ2luICopOworCQlmaW5kID0gcGFzcyA/IGZpbmRfcmVuYW1lIDogZmluZF9vcmlnaW47CisKKwkJZm9yIChpID0gMCwgc2cgPSBmaXJzdF9zY2FwZWdvYXQocmV2cywgY29tbWl0KTsKKwkJICAgICBpIDwgbnVtX3NnICYmIHNnOworCQkgICAgIHNnID0gc2ctPm5leHQsIGkrKykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHNnLT5pdGVtOworCQkJaW50IGosIHNhbWU7CisKKwkJCWlmIChzZ19vcmlnaW5baV0pCisJCQkJY29udGludWU7CisJCQlpZiAocGFyc2VfY29tbWl0KHApKQorCQkJCWNvbnRpbnVlOworCQkJcG9yaWdpbiA9IGZpbmQoc2IsIHAsIG9yaWdpbik7CisJCQlpZiAoIXBvcmlnaW4pCisJCQkJY29udGludWU7CisJCQlpZiAoIWhhc2hjbXAocG9yaWdpbi0+YmxvYl9zaGExLCBvcmlnaW4tPmJsb2Jfc2hhMSkpIHsKKwkJCQlwYXNzX3dob2xlX2JsYW1lKHNiLCBvcmlnaW4sIHBvcmlnaW4pOworCQkJCW9yaWdpbl9kZWNyZWYocG9yaWdpbik7CisJCQkJZ290byBmaW5pc2g7CisJCQl9CisJCQlmb3IgKGogPSBzYW1lID0gMDsgaiA8IGk7IGorKykKKwkJCQlpZiAoc2dfb3JpZ2luW2pdICYmCisJCQkJICAgICFoYXNoY21wKHNnX29yaWdpbltqXS0+YmxvYl9zaGExLAorCQkJCQkgICAgIHBvcmlnaW4tPmJsb2Jfc2hhMSkpIHsKKwkJCQkJc2FtZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWlmICghc2FtZSkKKwkJCQlzZ19vcmlnaW5baV0gPSBwb3JpZ2luOworCQkJZWxzZQorCQkJCW9yaWdpbl9kZWNyZWYocG9yaWdpbik7CisJCX0KKwl9CisKKwludW1fY29tbWl0cysrOworCWZvciAoaSA9IDAsIHNnID0gZmlyc3Rfc2NhcGVnb2F0KHJldnMsIGNvbW1pdCk7CisJICAgICBpIDwgbnVtX3NnICYmIHNnOworCSAgICAgc2cgPSBzZy0+bmV4dCwgaSsrKSB7CisJCXN0cnVjdCBvcmlnaW4gKnBvcmlnaW4gPSBzZ19vcmlnaW5baV07CisJCWlmICghcG9yaWdpbikKKwkJCWNvbnRpbnVlOworCQlpZiAoIW9yaWdpbi0+cHJldmlvdXMpIHsKKwkJCW9yaWdpbl9pbmNyZWYocG9yaWdpbik7CisJCQlvcmlnaW4tPnByZXZpb3VzID0gcG9yaWdpbjsKKwkJfQorCQlpZiAocGFzc19ibGFtZV90b19wYXJlbnQoc2IsIG9yaWdpbiwgcG9yaWdpbikpCisJCQlnb3RvIGZpbmlzaDsKKwl9CisKKwkvKgorCSAqIE9wdGlvbmFsbHkgZmluZCBtb3ZlcyBpbiBwYXJlbnRzJyBmaWxlcy4KKwkgKi8KKwlpZiAob3B0ICYgUElDS0FYRV9CTEFNRV9NT1ZFKQorCQlmb3IgKGkgPSAwLCBzZyA9IGZpcnN0X3NjYXBlZ29hdChyZXZzLCBjb21taXQpOworCQkgICAgIGkgPCBudW1fc2cgJiYgc2c7CisJCSAgICAgc2cgPSBzZy0+bmV4dCwgaSsrKSB7CisJCQlzdHJ1Y3Qgb3JpZ2luICpwb3JpZ2luID0gc2dfb3JpZ2luW2ldOworCQkJaWYgKCFwb3JpZ2luKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGZpbmRfbW92ZV9pbl9wYXJlbnQoc2IsIG9yaWdpbiwgcG9yaWdpbikpCisJCQkJZ290byBmaW5pc2g7CisJCX0KKworCS8qCisJICogT3B0aW9uYWxseSBmaW5kIGNvcGllcyBmcm9tIHBhcmVudHMnIGZpbGVzLgorCSAqLworCWlmIChvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFkpCisJCWZvciAoaSA9IDAsIHNnID0gZmlyc3Rfc2NhcGVnb2F0KHJldnMsIGNvbW1pdCk7CisJCSAgICAgaSA8IG51bV9zZyAmJiBzZzsKKwkJICAgICBzZyA9IHNnLT5uZXh0LCBpKyspIHsKKwkJCXN0cnVjdCBvcmlnaW4gKnBvcmlnaW4gPSBzZ19vcmlnaW5baV07CisJCQlpZiAoZmluZF9jb3B5X2luX3BhcmVudChzYiwgb3JpZ2luLCBzZy0+aXRlbSwKKwkJCQkJCXBvcmlnaW4sIG9wdCkpCisJCQkJZ290byBmaW5pc2g7CisJCX0KKworIGZpbmlzaDoKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NnOyBpKyspIHsKKwkJaWYgKHNnX29yaWdpbltpXSkgeworCQkJZHJvcF9vcmlnaW5fYmxvYihzZ19vcmlnaW5baV0pOworCQkJb3JpZ2luX2RlY3JlZihzZ19vcmlnaW5baV0pOworCQl9CisJfQorCWRyb3Bfb3JpZ2luX2Jsb2Iob3JpZ2luKTsKKwlpZiAoc2dfYnVmICE9IHNnX29yaWdpbikKKwkJZnJlZShzZ19vcmlnaW4pOworfQorCisvKgorICogSW5mb3JtYXRpb24gb24gY29tbWl0cywgdXNlZCBmb3Igb3V0cHV0LgorICovCitzdHJ1Y3QgY29tbWl0X2luZm8geworCWNvbnN0IGNoYXIgKmF1dGhvcjsKKwljb25zdCBjaGFyICphdXRob3JfbWFpbDsKKwl1bnNpZ25lZCBsb25nIGF1dGhvcl90aW1lOworCWNvbnN0IGNoYXIgKmF1dGhvcl90ejsKKworCS8qIGZpbGxlZCBvbmx5IHdoZW4gYXNrZWQgZm9yIGRldGFpbHMgKi8KKwljb25zdCBjaGFyICpjb21taXR0ZXI7CisJY29uc3QgY2hhciAqY29tbWl0dGVyX21haWw7CisJdW5zaWduZWQgbG9uZyBjb21taXR0ZXJfdGltZTsKKwljb25zdCBjaGFyICpjb21taXR0ZXJfdHo7CisKKwljb25zdCBjaGFyICpzdW1tYXJ5OworfTsKKworLyoKKyAqIFBhcnNlIGF1dGhvci9jb21taXR0ZXIgbGluZSBpbiB0aGUgY29tbWl0IG9iamVjdCBidWZmZXIKKyAqLworc3RhdGljIHZvaWQgZ2V0X2FjX2xpbmUoY29uc3QgY2hhciAqaW5idWYsIGNvbnN0IGNoYXIgKndoYXQsCisJCQlpbnQgcGVyc29uX2xlbiwgY2hhciAqcGVyc29uLAorCQkJaW50IG1haWxfbGVuLCBjaGFyICptYWlsLAorCQkJdW5zaWduZWQgbG9uZyAqdGltZSwgY29uc3QgY2hhciAqKnR6KQoreworCWludCBsZW4sIHR6bGVuLCBtYWlsbGVuOworCWNoYXIgKnRtcCwgKmVuZHAsICp0aW1lcG9zLCAqbWFpbHBvczsKKworCXRtcCA9IHN0cnN0cihpbmJ1Ziwgd2hhdCk7CisJaWYgKCF0bXApCisJCWdvdG8gZXJyb3Jfb3V0OworCXRtcCArPSBzdHJsZW4od2hhdCk7CisJZW5kcCA9IHN0cmNocih0bXAsICdcbicpOworCWlmICghZW5kcCkKKwkJbGVuID0gc3RybGVuKHRtcCk7CisJZWxzZQorCQlsZW4gPSBlbmRwIC0gdG1wOworCWlmIChwZXJzb25fbGVuIDw9IGxlbikgeworCWVycm9yX291dDoKKwkJLyogVWdoICovCisJCSp0eiA9ICIodW5rbm93bikiOworCQlzdHJjcHkocGVyc29uLCAqdHopOworCQlzdHJjcHkobWFpbCwgKnR6KTsKKwkJKnRpbWUgPSAwOworCQlyZXR1cm47CisJfQorCW1lbWNweShwZXJzb24sIHRtcCwgbGVuKTsKKworCXRtcCA9IHBlcnNvbjsKKwl0bXAgKz0gbGVuOworCSp0bXAgPSAwOworCXdoaWxlIChwZXJzb24gPCB0bXAgJiYgKnRtcCAhPSAnICcpCisJCXRtcC0tOworCWlmICh0bXAgPD0gcGVyc29uKQorCQlnb3RvIGVycm9yX291dDsKKwkqdHogPSB0bXArMTsKKwl0emxlbiA9IChwZXJzb24rbGVuKS0odG1wKzEpOworCisJKnRtcCA9IDA7CisJd2hpbGUgKHBlcnNvbiA8IHRtcCAmJiAqdG1wICE9ICcgJykKKwkJdG1wLS07CisJaWYgKHRtcCA8PSBwZXJzb24pCisJCWdvdG8gZXJyb3Jfb3V0OworCSp0aW1lID0gc3RydG91bCh0bXAsIE5VTEwsIDEwKTsKKwl0aW1lcG9zID0gdG1wOworCisJKnRtcCA9IDA7CisJd2hpbGUgKHBlcnNvbiA8IHRtcCAmJiAhKCp0bXAgPT0gJyAnICYmIHRtcFsxXSA9PSAnPCcpKQorCQl0bXAtLTsKKwlpZiAodG1wIDw9IHBlcnNvbikKKwkJcmV0dXJuOworCW1haWxwb3MgPSB0bXAgKyAxOworCSp0bXAgPSAwOworCW1haWxsZW4gPSB0aW1lcG9zIC0gdG1wOworCW1lbWNweShtYWlsLCBtYWlscG9zLCBtYWlsbGVuKTsKKworCWlmICghbWFpbG1hcC5ucikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBtYWlsbWFwIGV4cGFuc2lvbiBtYXkgbWFrZSB0aGUgbmFtZSBsb25nZXIuCisJICogbWFrZSByb29tIGJ5IHB1c2hpbmcgc3R1ZmYgZG93bi4KKwkgKi8KKwl0bXAgPSBwZXJzb24gKyBwZXJzb25fbGVuIC0gKHR6bGVuICsgMSk7CisJbWVtbW92ZSh0bXAsICp0eiwgdHpsZW4pOworCXRtcFt0emxlbl0gPSAwOworCSp0eiA9IHRtcDsKKworCS8qCisJICogTm93LCBjb252ZXJ0IGJvdGggbmFtZSBhbmQgZS1tYWlsIHVzaW5nIG1haWxtYXAKKwkgKi8KKwlpZiAobWFwX3VzZXIoJm1haWxtYXAsIG1haWwrMSwgbWFpbF9sZW4tMSwgcGVyc29uLCB0bXAtcGVyc29uLTEpKSB7CisJCS8qIEFkZCBhIHRyYWlsaW5nICc+JyB0byBlbWFpbCwgc2luY2UgbWFwX3VzZXIgcmV0dXJucyBwbGFpbiBlbWFpbHMKKwkJICAgTm90ZTogSXQgYWxyZWFkeSBoYXMgJzwnLCBzaW5jZSB3ZSByZXBsYWNlIGZyb20gbWFpbCsxICovCisJCW1haWxwb3MgPSBtZW1jaHIobWFpbCwgJ1wwJywgbWFpbF9sZW4pOworCQlpZiAobWFpbHBvcyAmJiBtYWlscG9zLW1haWwgPCBtYWlsX2xlbiAtIDEpIHsKKwkJCSptYWlscG9zID0gJz4nOworCQkJKihtYWlscG9zKzEpID0gJ1wwJzsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X2NvbW1pdF9pbmZvKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0X2luZm8gKnJldCwKKwkJCSAgICBpbnQgZGV0YWlsZWQpCit7CisJaW50IGxlbjsKKwljb25zdCBjaGFyICpzdWJqZWN0OworCWNoYXIgKnJlZW5jb2RlZCwgKm1lc3NhZ2U7CisJc3RhdGljIGNoYXIgYXV0aG9yX25hbWVbMTAyNF07CisJc3RhdGljIGNoYXIgYXV0aG9yX21haWxbMTAyNF07CisJc3RhdGljIGNoYXIgY29tbWl0dGVyX25hbWVbMTAyNF07CisJc3RhdGljIGNoYXIgY29tbWl0dGVyX21haWxbMTAyNF07CisJc3RhdGljIGNoYXIgc3VtbWFyeV9idWZbMTAyNF07CisKKwkvKgorCSAqIFdlJ3ZlIG9wZXJhdGVkIHdpdGhvdXQgc2F2ZV9jb21taXRfYnVmZmVyLCBzbworCSAqIHdlIG5vdyBuZWVkIHRvIHBvcHVsYXRlIHRoZW0gZm9yIG91dHB1dC4KKwkgKi8KKwlpZiAoIWNvbW1pdC0+YnVmZmVyKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQljb21taXQtPmJ1ZmZlciA9CisJCQlyZWFkX3NoYTFfZmlsZShjb21taXQtPm9iamVjdC5zaGExLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWNvbW1pdC0+YnVmZmVyKQorCQkJZGllKCJDYW5ub3QgcmVhZCBjb21taXQgJXMiLAorCQkJICAgIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwl9CisJcmVlbmNvZGVkID0gcmVlbmNvZGVfY29tbWl0X21lc3NhZ2UoY29tbWl0LCBOVUxMKTsKKwltZXNzYWdlICAgPSByZWVuY29kZWQgPyByZWVuY29kZWQgOiBjb21taXQtPmJ1ZmZlcjsKKwlyZXQtPmF1dGhvciA9IGF1dGhvcl9uYW1lOworCXJldC0+YXV0aG9yX21haWwgPSBhdXRob3JfbWFpbDsKKwlnZXRfYWNfbGluZShtZXNzYWdlLCAiXG5hdXRob3IgIiwKKwkJICAgIHNpemVvZihhdXRob3JfbmFtZSksIGF1dGhvcl9uYW1lLAorCQkgICAgc2l6ZW9mKGF1dGhvcl9tYWlsKSwgYXV0aG9yX21haWwsCisJCSAgICAmcmV0LT5hdXRob3JfdGltZSwgJnJldC0+YXV0aG9yX3R6KTsKKworCWlmICghZGV0YWlsZWQpIHsKKwkJZnJlZShyZWVuY29kZWQpOworCQlyZXR1cm47CisJfQorCisJcmV0LT5jb21taXR0ZXIgPSBjb21taXR0ZXJfbmFtZTsKKwlyZXQtPmNvbW1pdHRlcl9tYWlsID0gY29tbWl0dGVyX21haWw7CisJZ2V0X2FjX2xpbmUobWVzc2FnZSwgIlxuY29tbWl0dGVyICIsCisJCSAgICBzaXplb2YoY29tbWl0dGVyX25hbWUpLCBjb21taXR0ZXJfbmFtZSwKKwkJICAgIHNpemVvZihjb21taXR0ZXJfbWFpbCksIGNvbW1pdHRlcl9tYWlsLAorCQkgICAgJnJldC0+Y29tbWl0dGVyX3RpbWUsICZyZXQtPmNvbW1pdHRlcl90eik7CisKKwlyZXQtPnN1bW1hcnkgPSBzdW1tYXJ5X2J1ZjsKKwlsZW4gPSBmaW5kX2NvbW1pdF9zdWJqZWN0KG1lc3NhZ2UsICZzdWJqZWN0KTsKKwlpZiAobGVuICYmIGxlbiA8IHNpemVvZihzdW1tYXJ5X2J1ZikpIHsKKwkJbWVtY3B5KHN1bW1hcnlfYnVmLCBzdWJqZWN0LCBsZW4pOworCQlzdW1tYXJ5X2J1ZltsZW5dID0gMDsKKwl9IGVsc2UgeworCQlzcHJpbnRmKHN1bW1hcnlfYnVmLCAiKCVzKSIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwl9CisJZnJlZShyZWVuY29kZWQpOworfQorCisvKgorICogVG8gYWxsb3cgTEYgYW5kIG90aGVyIG5vbnBvcnRhYmxlIGNoYXJhY3RlcnMgaW4gcGF0aG5hbWVzLAorICogdGhleSBhcmUgYy1zdHlsZSBxdW90ZWQgYXMgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9maWxlbmFtZV9pbmZvKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcHJpbnRmKCJmaWxlbmFtZSAiKTsKKwl3cml0ZV9uYW1lX3F1b3RlZChwYXRoLCBzdGRvdXQsICdcbicpOworfQorCisvKgorICogUG9yY2VsYWluL0luY3JlbWVudGFsIGZvcm1hdCB3YW50cyB0byBzaG93IGEgbG90IG9mIGRldGFpbHMgcGVyCisgKiBjb21taXQuICBJbnN0ZWFkIG9mIHJlcGVhdGluZyB0aGlzIGV2ZXJ5IGxpbmUsIGVtaXQgaXQgb25seSBvbmNlLAorICogdGhlIGZpcnN0IHRpbWUgZWFjaCBjb21taXQgYXBwZWFycyBpbiB0aGUgb3V0cHV0ICh1bmxlc3MgdGhlCisgKiB1c2VyIGhhcyBzcGVjaWZpY2FsbHkgYXNrZWQgZm9yIHVzIHRvIHJlcGVhdCkuCisgKi8KK3N0YXRpYyBpbnQgZW1pdF9vbmVfc3VzcGVjdF9kZXRhaWwoc3RydWN0IG9yaWdpbiAqc3VzcGVjdCwgaW50IHJlcGVhdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2luZm8gY2k7CisKKwlpZiAoIXJlcGVhdCAmJiAoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBNRVRBSU5GT19TSE9XTikpCisJCXJldHVybiAwOworCisJc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gTUVUQUlORk9fU0hPV047CisJZ2V0X2NvbW1pdF9pbmZvKHN1c3BlY3QtPmNvbW1pdCwgJmNpLCAxKTsKKwlwcmludGYoImF1dGhvciAlc1xuIiwgY2kuYXV0aG9yKTsKKwlwcmludGYoImF1dGhvci1tYWlsICVzXG4iLCBjaS5hdXRob3JfbWFpbCk7CisJcHJpbnRmKCJhdXRob3ItdGltZSAlbHVcbiIsIGNpLmF1dGhvcl90aW1lKTsKKwlwcmludGYoImF1dGhvci10eiAlc1xuIiwgY2kuYXV0aG9yX3R6KTsKKwlwcmludGYoImNvbW1pdHRlciAlc1xuIiwgY2kuY29tbWl0dGVyKTsKKwlwcmludGYoImNvbW1pdHRlci1tYWlsICVzXG4iLCBjaS5jb21taXR0ZXJfbWFpbCk7CisJcHJpbnRmKCJjb21taXR0ZXItdGltZSAlbHVcbiIsIGNpLmNvbW1pdHRlcl90aW1lKTsKKwlwcmludGYoImNvbW1pdHRlci10eiAlc1xuIiwgY2kuY29tbWl0dGVyX3R6KTsKKwlwcmludGYoInN1bW1hcnkgJXNcbiIsIGNpLnN1bW1hcnkpOworCWlmIChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXByaW50ZigiYm91bmRhcnlcbiIpOworCWlmIChzdXNwZWN0LT5wcmV2aW91cykgeworCQlzdHJ1Y3Qgb3JpZ2luICpwcmV2ID0gc3VzcGVjdC0+cHJldmlvdXM7CisJCXByaW50ZigicHJldmlvdXMgJXMgIiwgc2hhMV90b19oZXgocHJldi0+Y29tbWl0LT5vYmplY3Quc2hhMSkpOworCQl3cml0ZV9uYW1lX3F1b3RlZChwcmV2LT5wYXRoLCBzdGRvdXQsICdcbicpOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFRoZSBibGFtZV9lbnRyeSBpcyBmb3VuZCB0byBiZSBndWlsdHkgZm9yIHRoZSByYW5nZS4gIE1hcmsgaXQKKyAqIGFzIHN1Y2gsIGFuZCBzaG93IGl0IGluIGluY3JlbWVudGFsIG91dHB1dC4KKyAqLworc3RhdGljIHZvaWQgZm91bmRfZ3VpbHR5X2VudHJ5KHN0cnVjdCBibGFtZV9lbnRyeSAqZW50KQoreworCWlmIChlbnQtPmd1aWx0eSkKKwkJcmV0dXJuOworCWVudC0+Z3VpbHR5ID0gMTsKKwlpZiAoaW5jcmVtZW50YWwpIHsKKwkJc3RydWN0IG9yaWdpbiAqc3VzcGVjdCA9IGVudC0+c3VzcGVjdDsKKworCQlwcmludGYoIiVzICVkICVkICVkXG4iLAorCQkgICAgICAgc2hhMV90b19oZXgoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3Quc2hhMSksCisJCSAgICAgICBlbnQtPnNfbG5vICsgMSwgZW50LT5sbm8gKyAxLCBlbnQtPm51bV9saW5lcyk7CisJCWVtaXRfb25lX3N1c3BlY3RfZGV0YWlsKHN1c3BlY3QsIDApOworCQl3cml0ZV9maWxlbmFtZV9pbmZvKHN1c3BlY3QtPnBhdGgpOworCQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAic3Rkb3V0Iik7CisJfQorfQorCisvKgorICogVGhlIG1haW4gbG9vcCAtLSB3aGlsZSB0aGUgc2NvcmVib2FyZCBoYXMgbGluZXMgd2hvc2UgdHJ1ZSBvcmlnaW4KKyAqIGlzIHN0aWxsIHVua25vd24sIHBpY2sgb25lIGJsYW1lX2VudHJ5LCBhbmQgYWxsb3cgaXRzIGN1cnJlbnQKKyAqIHN1c3BlY3QgdG8gcGFzcyBibGFtZXMgdG8gaXRzIHBhcmVudHMuCisgKi8KK3N0YXRpYyB2b2lkIGFzc2lnbl9ibGFtZShzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIGludCBvcHQpCit7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gc2ItPnJldnM7CisKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQlzdHJ1Y3Qgb3JpZ2luICpzdXNwZWN0ID0gTlVMTDsKKworCQkvKiBmaW5kIG9uZSBzdXNwZWN0IHRvIGJyZWFrIGRvd24gKi8KKwkJZm9yIChlbnQgPSBzYi0+ZW50OyAhc3VzcGVjdCAmJiBlbnQ7IGVudCA9IGVudC0+bmV4dCkKKwkJCWlmICghZW50LT5ndWlsdHkpCisJCQkJc3VzcGVjdCA9IGVudC0+c3VzcGVjdDsKKwkJaWYgKCFzdXNwZWN0KQorCQkJcmV0dXJuOyAvKiBhbGwgZG9uZSAqLworCisJCS8qCisJCSAqIFdlIHdpbGwgdXNlIHRoaXMgc3VzcGVjdCBsYXRlciBpbiB0aGUgbG9vcCwKKwkJICogc28gaG9sZCBvbnRvIGl0IGluIHRoZSBtZWFudGltZS4KKwkJICovCisJCW9yaWdpbl9pbmNyZWYoc3VzcGVjdCk7CisJCWNvbW1pdCA9IHN1c3BlY3QtPmNvbW1pdDsKKwkJaWYgKCFjb21taXQtPm9iamVjdC5wYXJzZWQpCisJCQlwYXJzZV9jb21taXQoY29tbWl0KTsKKwkJaWYgKHJldmVyc2UgfHwKKwkJICAgICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgJiYKKwkJICAgICAhKHJldnMtPm1heF9hZ2UgIT0gLTEgJiYgY29tbWl0LT5kYXRlIDwgcmV2cy0+bWF4X2FnZSkpKQorCQkJcGFzc19ibGFtZShzYiwgc3VzcGVjdCwgb3B0KTsKKwkJZWxzZSB7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQkJaWYgKGNvbW1pdC0+b2JqZWN0LnBhcnNlZCkKKwkJCQltYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhjb21taXQpOworCQl9CisJCS8qIHRyZWF0IHJvb3QgY29tbWl0IGFzIGJvdW5kYXJ5ICovCisJCWlmICghY29tbWl0LT5wYXJlbnRzICYmICFzaG93X3Jvb3QpCisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCisJCS8qIFRha2UgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSByZW1haW5pbmcgZW50cmllcyAqLworCQlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudDsgZW50ID0gZW50LT5uZXh0KQorCQkJaWYgKHNhbWVfc3VzcGVjdChlbnQtPnN1c3BlY3QsIHN1c3BlY3QpKQorCQkJCWZvdW5kX2d1aWx0eV9lbnRyeShlbnQpOworCQlvcmlnaW5fZGVjcmVmKHN1c3BlY3QpOworCisJCWlmIChERUJVRykgLyogc2FuaXR5ICovCisJCQlzYW5pdHlfY2hlY2tfcmVmY250KHNiKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfdGltZSh1bnNpZ25lZCBsb25nIHRpbWUsIGNvbnN0IGNoYXIgKnR6X3N0ciwKKwkJCSAgICAgICBpbnQgc2hvd19yYXdfdGltZSkKK3sKKwlzdGF0aWMgY2hhciB0aW1lX2J1ZlsxMjhdOworCWNvbnN0IGNoYXIgKnRpbWVfc3RyOworCWludCB0aW1lX2xlbjsKKwlpbnQgdHo7CisKKwlpZiAoc2hvd19yYXdfdGltZSkgeworCQlzbnByaW50Zih0aW1lX2J1Ziwgc2l6ZW9mKHRpbWVfYnVmKSwgIiVsdSAlcyIsIHRpbWUsIHR6X3N0cik7CisJfQorCWVsc2UgeworCQl0eiA9IGF0b2kodHpfc3RyKTsKKwkJdGltZV9zdHIgPSBzaG93X2RhdGUodGltZSwgdHosIGJsYW1lX2RhdGVfbW9kZSk7CisJCXRpbWVfbGVuID0gc3RybGVuKHRpbWVfc3RyKTsKKwkJbWVtY3B5KHRpbWVfYnVmLCB0aW1lX3N0ciwgdGltZV9sZW4pOworCQltZW1zZXQodGltZV9idWYgKyB0aW1lX2xlbiwgJyAnLCBibGFtZV9kYXRlX3dpZHRoIC0gdGltZV9sZW4pOworCX0KKwlyZXR1cm4gdGltZV9idWY7Cit9CisKKyNkZWZpbmUgT1VUUFVUX0FOTk9UQVRFX0NPTVBBVAkwMDEKKyNkZWZpbmUgT1VUUFVUX0xPTkdfT0JKRUNUX05BTUUJMDAyCisjZGVmaW5lIE9VVFBVVF9SQVdfVElNRVNUQU1QCTAwNAorI2RlZmluZSBPVVRQVVRfUE9SQ0VMQUlOCTAxMAorI2RlZmluZSBPVVRQVVRfU0hPV19OQU1FCTAyMAorI2RlZmluZSBPVVRQVVRfU0hPV19OVU1CRVIJMDQwCisjZGVmaW5lIE9VVFBVVF9TSE9XX1NDT1JFICAgICAgMDEwMAorI2RlZmluZSBPVVRQVVRfTk9fQVVUSE9SICAgICAgIDAyMDAKKyNkZWZpbmUgT1VUUFVUX1NIT1dfRU1BSUwJMDQwMAorI2RlZmluZSBPVVRQVVRfTElORV9QT1JDRUxBSU4gMDEwMDAKKworc3RhdGljIHZvaWQgZW1pdF9wb3JjZWxhaW5fZGV0YWlscyhzdHJ1Y3Qgb3JpZ2luICpzdXNwZWN0LCBpbnQgcmVwZWF0KQoreworCWlmIChlbWl0X29uZV9zdXNwZWN0X2RldGFpbChzdXNwZWN0LCByZXBlYXQpIHx8CisJICAgIChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIE1PUkVfVEhBTl9PTkVfUEFUSCkpCisJCXdyaXRlX2ZpbGVuYW1lX2luZm8oc3VzcGVjdC0+cGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfcG9yY2VsYWluKHN0cnVjdCBzY29yZWJvYXJkICpzYiwgc3RydWN0IGJsYW1lX2VudHJ5ICplbnQsCisJCQkgICBpbnQgb3B0KQoreworCWludCByZXBlYXQgPSBvcHQgJiBPVVRQVVRfTElORV9QT1JDRUxBSU47CisJaW50IGNudDsKKwljb25zdCBjaGFyICpjcDsKKwlzdHJ1Y3Qgb3JpZ2luICpzdXNwZWN0ID0gZW50LT5zdXNwZWN0OworCWNoYXIgaGV4WzQxXTsKKworCXN0cmNweShoZXgsIHNoYTFfdG9faGV4KHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwlwcmludGYoIiVzJWMlZCAlZCAlZFxuIiwKKwkgICAgICAgaGV4LAorCSAgICAgICBlbnQtPmd1aWx0eSA/ICcgJyA6ICcqJywgLyogcHVyZWx5IGZvciBkZWJ1Z2dpbmcgKi8KKwkgICAgICAgZW50LT5zX2xubyArIDEsCisJICAgICAgIGVudC0+bG5vICsgMSwKKwkgICAgICAgZW50LT5udW1fbGluZXMpOworCWVtaXRfcG9yY2VsYWluX2RldGFpbHMoc3VzcGVjdCwgcmVwZWF0KTsKKworCWNwID0gbnRoX2xpbmUoc2IsIGVudC0+bG5vKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IGVudC0+bnVtX2xpbmVzOyBjbnQrKykgeworCQljaGFyIGNoOworCQlpZiAoY250KSB7CisJCQlwcmludGYoIiVzICVkICVkXG4iLCBoZXgsCisJCQkgICAgICAgZW50LT5zX2xubyArIDEgKyBjbnQsCisJCQkgICAgICAgZW50LT5sbm8gKyAxICsgY250KTsKKwkJCWlmIChyZXBlYXQpCisJCQkJZW1pdF9wb3JjZWxhaW5fZGV0YWlscyhzdXNwZWN0LCAxKTsKKwkJfQorCQlwdXRjaGFyKCdcdCcpOworCQlkbyB7CisJCQljaCA9ICpjcCsrOworCQkJcHV0Y2hhcihjaCk7CisJCX0gd2hpbGUgKGNoICE9ICdcbicgJiYKKwkJCSBjcCA8IHNiLT5maW5hbF9idWYgKyBzYi0+ZmluYWxfYnVmX3NpemUpOworCX0KKworCWlmIChzYi0+ZmluYWxfYnVmX3NpemUgJiYgY3BbLTFdICE9ICdcbicpCisJCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfb3RoZXIoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwgaW50IG9wdCkKK3sKKwlpbnQgY250OworCWNvbnN0IGNoYXIgKmNwOworCXN0cnVjdCBvcmlnaW4gKnN1c3BlY3QgPSBlbnQtPnN1c3BlY3Q7CisJc3RydWN0IGNvbW1pdF9pbmZvIGNpOworCWNoYXIgaGV4WzQxXTsKKwlpbnQgc2hvd19yYXdfdGltZSA9ICEhKG9wdCAmIE9VVFBVVF9SQVdfVElNRVNUQU1QKTsKKworCWdldF9jb21taXRfaW5mbyhzdXNwZWN0LT5jb21taXQsICZjaSwgMSk7CisJc3RyY3B5KGhleCwgc2hhMV90b19oZXgoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3Quc2hhMSkpOworCisJY3AgPSBudGhfbGluZShzYiwgZW50LT5sbm8pOworCWZvciAoY250ID0gMDsgY250IDwgZW50LT5udW1fbGluZXM7IGNudCsrKSB7CisJCWNoYXIgY2g7CisJCWludCBsZW5ndGggPSAob3B0ICYgT1VUUFVUX0xPTkdfT0JKRUNUX05BTUUpID8gNDAgOiBhYmJyZXY7CisKKwkJaWYgKHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkJaWYgKGJsYW5rX2JvdW5kYXJ5KQorCQkJCW1lbXNldChoZXgsICcgJywgbGVuZ3RoKTsKKwkJCWVsc2UgaWYgKCEob3B0ICYgT1VUUFVUX0FOTk9UQVRFX0NPTVBBVCkpIHsKKwkJCQlsZW5ndGgtLTsKKwkJCQlwdXRjaGFyKCdeJyk7CisJCQl9CisJCX0KKworCQlwcmludGYoIiUuKnMiLCBsZW5ndGgsIGhleCk7CisJCWlmIChvcHQgJiBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUKSB7CisJCQljb25zdCBjaGFyICpuYW1lOworCQkJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX0VNQUlMKQorCQkJCW5hbWUgPSBjaS5hdXRob3JfbWFpbDsKKwkJCWVsc2UKKwkJCQluYW1lID0gY2kuYXV0aG9yOworCQkJcHJpbnRmKCJcdCglMTBzXHQlMTBzXHQlZCkiLCBuYW1lLAorCQkJICAgICAgIGZvcm1hdF90aW1lKGNpLmF1dGhvcl90aW1lLCBjaS5hdXRob3JfdHosCisJCQkJCSAgIHNob3dfcmF3X3RpbWUpLAorCQkJICAgICAgIGVudC0+bG5vICsgMSArIGNudCk7CisJCX0gZWxzZSB7CisJCQlpZiAob3B0ICYgT1VUUFVUX1NIT1dfU0NPUkUpCisJCQkJcHJpbnRmKCIgJSpkICUwMmQiLAorCQkJCSAgICAgICBtYXhfc2NvcmVfZGlnaXRzLCBlbnQtPnNjb3JlLAorCQkJCSAgICAgICBlbnQtPnN1c3BlY3QtPnJlZmNudCk7CisJCQlpZiAob3B0ICYgT1VUUFVUX1NIT1dfTkFNRSkKKwkJCQlwcmludGYoIiAlLSouKnMiLCBsb25nZXN0X2ZpbGUsIGxvbmdlc3RfZmlsZSwKKwkJCQkgICAgICAgc3VzcGVjdC0+cGF0aCk7CisJCQlpZiAob3B0ICYgT1VUUFVUX1NIT1dfTlVNQkVSKQorCQkJCXByaW50ZigiICUqZCIsIG1heF9vcmlnX2RpZ2l0cywKKwkJCQkgICAgICAgZW50LT5zX2xubyArIDEgKyBjbnQpOworCisJCQlpZiAoIShvcHQgJiBPVVRQVVRfTk9fQVVUSE9SKSkgeworCQkJCWNvbnN0IGNoYXIgKm5hbWU7CisJCQkJaW50IHBhZDsKKwkJCQlpZiAob3B0ICYgT1VUUFVUX1NIT1dfRU1BSUwpCisJCQkJCW5hbWUgPSBjaS5hdXRob3JfbWFpbDsKKwkJCQllbHNlCisJCQkJCW5hbWUgPSBjaS5hdXRob3I7CisJCQkJcGFkID0gbG9uZ2VzdF9hdXRob3IgLSB1dGY4X3N0cndpZHRoKG5hbWUpOworCQkJCXByaW50ZigiICglcyUqcyAlMTBzIiwKKwkJCQkgICAgICAgbmFtZSwgcGFkLCAiIiwKKwkJCQkgICAgICAgZm9ybWF0X3RpbWUoY2kuYXV0aG9yX3RpbWUsCisJCQkJCQkgICBjaS5hdXRob3JfdHosCisJCQkJCQkgICBzaG93X3Jhd190aW1lKSk7CisJCQl9CisJCQlwcmludGYoIiAlKmQpICIsCisJCQkgICAgICAgbWF4X2RpZ2l0cywgZW50LT5sbm8gKyAxICsgY250KTsKKwkJfQorCQlkbyB7CisJCQljaCA9ICpjcCsrOworCQkJcHV0Y2hhcihjaCk7CisJCX0gd2hpbGUgKGNoICE9ICdcbicgJiYKKwkJCSBjcCA8IHNiLT5maW5hbF9idWYgKyBzYi0+ZmluYWxfYnVmX3NpemUpOworCX0KKworCWlmIChzYi0+ZmluYWxfYnVmX3NpemUgJiYgY3BbLTFdICE9ICdcbicpCisJCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIGludCBvcHRpb24pCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisKKwlpZiAob3B0aW9uICYgT1VUUFVUX1BPUkNFTEFJTikgeworCQlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7CisJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm90aDsKKwkJCXN0cnVjdCBvcmlnaW4gKnN1c3BlY3QgPSBlbnQtPnN1c3BlY3Q7CisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBzdXNwZWN0LT5jb21taXQ7CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBNT1JFX1RIQU5fT05FX1BBVEgpCisJCQkJY29udGludWU7CisJCQlmb3IgKG90aCA9IGVudC0+bmV4dDsgb3RoOyBvdGggPSBvdGgtPm5leHQpIHsKKwkJCQlpZiAoKG90aC0+c3VzcGVjdC0+Y29tbWl0ICE9IGNvbW1pdCkgfHwKKwkJCQkgICAgIXN0cmNtcChvdGgtPnN1c3BlY3QtPnBhdGgsIHN1c3BlY3QtPnBhdGgpKQorCQkJCQljb250aW51ZTsKKwkJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBNT1JFX1RIQU5fT05FX1BBVEg7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7CisJCWlmIChvcHRpb24gJiBPVVRQVVRfUE9SQ0VMQUlOKQorCQkJZW1pdF9wb3JjZWxhaW4oc2IsIGVudCwgb3B0aW9uKTsKKwkJZWxzZSB7CisJCQllbWl0X290aGVyKHNiLCBlbnQsIG9wdGlvbik7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUbyBhbGxvdyBxdWljayBhY2Nlc3MgdG8gdGhlIGNvbnRlbnRzIG9mIG50aCBsaW5lIGluIHRoZQorICogZmluYWwgaW1hZ2UsIHByZXBhcmUgYW4gaW5kZXggaW4gdGhlIHNjb3JlYm9hcmQuCisgKi8KK3N0YXRpYyBpbnQgcHJlcGFyZV9saW5lcyhzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IpCit7CisJY29uc3QgY2hhciAqYnVmID0gc2ItPmZpbmFsX2J1ZjsKKwl1bnNpZ25lZCBsb25nIGxlbiA9IHNiLT5maW5hbF9idWZfc2l6ZTsKKwlpbnQgbnVtID0gMCwgaW5jb21wbGV0ZSA9IDAsIGJvbCA9IDE7CisKKwlpZiAobGVuICYmIGJ1ZltsZW4tMV0gIT0gJ1xuJykKKwkJaW5jb21wbGV0ZSsrOyAvKiBpbmNvbXBsZXRlIGxpbmUgYXQgdGhlIGVuZCAqLworCXdoaWxlIChsZW4tLSkgeworCQlpZiAoYm9sKSB7CisJCQlzYi0+bGluZW5vID0geHJlYWxsb2Moc2ItPmxpbmVubywKKwkJCQkJICAgICAgc2l6ZW9mKGludCAqKSAqIChudW0gKyAxKSk7CisJCQlzYi0+bGluZW5vW251bV0gPSBidWYgLSBzYi0+ZmluYWxfYnVmOworCQkJYm9sID0gMDsKKwkJfQorCQlpZiAoKmJ1ZisrID09ICdcbicpIHsKKwkJCW51bSsrOworCQkJYm9sID0gMTsKKwkJfQorCX0KKwlzYi0+bGluZW5vID0geHJlYWxsb2Moc2ItPmxpbmVubywKKwkJCSAgICAgIHNpemVvZihpbnQgKikgKiAobnVtICsgaW5jb21wbGV0ZSArIDEpKTsKKwlzYi0+bGluZW5vW251bSArIGluY29tcGxldGVdID0gYnVmIC0gc2ItPmZpbmFsX2J1ZjsKKwlzYi0+bnVtX2xpbmVzID0gbnVtICsgaW5jb21wbGV0ZTsKKwlyZXR1cm4gc2ItPm51bV9saW5lczsKK30KKworLyoKKyAqIEFkZCBwaG9ueSBncmFmdHMgZm9yIHVzZSB3aXRoIC1TOyB0aGlzIGlzIHByaW1hcmlseSB0bworICogc3VwcG9ydCBnaXQncyBjdnNzZXJ2ZXIgdGhhdCB3YW50cyB0byBnaXZlIGEgbGluZWFyIGhpc3RvcnkKKyAqIHRvIGl0cyBjbGllbnRzLgorICovCitzdGF0aWMgaW50IHJlYWRfYW5jZXN0cnkoY29uc3QgY2hhciAqZ3JhZnRfZmlsZSkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKGdyYWZ0X2ZpbGUsICJyIik7CisJY2hhciBidWZbMTAyNF07CisJaWYgKCFmcCkKKwkJcmV0dXJuIC0xOworCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkpIHsKKwkJLyogVGhlIGZvcm1hdCBpcyBqdXN0ICJDb21taXQgUGFyZW50MSBQYXJlbnQyIC4uLlxuIiAqLworCQlpbnQgbGVuID0gc3RybGVuKGJ1Zik7CisJCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0ID0gcmVhZF9ncmFmdF9saW5lKGJ1ZiwgbGVuKTsKKwkJaWYgKGdyYWZ0KQorCQkJcmVnaXN0ZXJfY29tbWl0X2dyYWZ0KGdyYWZ0LCAwKTsKKwl9CisJZmNsb3NlKGZwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1cGRhdGVfYXV0b19hYmJyZXYoaW50IGF1dG9fYWJicmV2LCBzdHJ1Y3Qgb3JpZ2luICpzdXNwZWN0KQoreworCWNvbnN0IGNoYXIgKnVuaXEgPSBmaW5kX3VuaXF1ZV9hYmJyZXYoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3Quc2hhMSwKKwkJCQkJICAgICAgYXV0b19hYmJyZXYpOworCWludCBsZW4gPSBzdHJsZW4odW5pcSk7CisJaWYgKGF1dG9fYWJicmV2IDwgbGVuKQorCQlyZXR1cm4gbGVuOworCXJldHVybiBhdXRvX2FiYnJldjsKK30KKworLyoKKyAqIEhvdyBtYW55IGNvbHVtbnMgZG8gd2UgbmVlZCB0byBzaG93IGxpbmUgbnVtYmVycywgYXV0aG9ycywKKyAqIGFuZCBmaWxlbmFtZXM/CisgKi8KK3N0YXRpYyB2b2lkIGZpbmRfYWxpZ25tZW50KHN0cnVjdCBzY29yZWJvYXJkICpzYiwgaW50ICpvcHRpb24pCit7CisJaW50IGxvbmdlc3Rfc3JjX2xpbmVzID0gMDsKKwlpbnQgbG9uZ2VzdF9kc3RfbGluZXMgPSAwOworCXVuc2lnbmVkIGxhcmdlc3Rfc2NvcmUgPSAwOworCXN0cnVjdCBibGFtZV9lbnRyeSAqZTsKKwlpbnQgY29tcHV0ZV9hdXRvX2FiYnJldiA9IChhYmJyZXYgPCAwKTsKKwlpbnQgYXV0b19hYmJyZXYgPSBkZWZhdWx0X2FiYnJldjsKKworCWZvciAoZSA9IHNiLT5lbnQ7IGU7IGUgPSBlLT5uZXh0KSB7CisJCXN0cnVjdCBvcmlnaW4gKnN1c3BlY3QgPSBlLT5zdXNwZWN0OworCQlzdHJ1Y3QgY29tbWl0X2luZm8gY2k7CisJCWludCBudW07CisKKwkJaWYgKGNvbXB1dGVfYXV0b19hYmJyZXYpCisJCQlhdXRvX2FiYnJldiA9IHVwZGF0ZV9hdXRvX2FiYnJldihhdXRvX2FiYnJldiwgc3VzcGVjdCk7CisJCWlmIChzdHJjbXAoc3VzcGVjdC0+cGF0aCwgc2ItPnBhdGgpKQorCQkJKm9wdGlvbiB8PSBPVVRQVVRfU0hPV19OQU1FOworCQludW0gPSBzdHJsZW4oc3VzcGVjdC0+cGF0aCk7CisJCWlmIChsb25nZXN0X2ZpbGUgPCBudW0pCisJCQlsb25nZXN0X2ZpbGUgPSBudW07CisJCWlmICghKHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgTUVUQUlORk9fU0hPV04pKSB7CisJCQlzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyB8PSBNRVRBSU5GT19TSE9XTjsKKwkJCWdldF9jb21taXRfaW5mbyhzdXNwZWN0LT5jb21taXQsICZjaSwgMSk7CisJCQlpZiAoKm9wdGlvbiAmIE9VVFBVVF9TSE9XX0VNQUlMKQorCQkJCW51bSA9IHV0Zjhfc3Ryd2lkdGgoY2kuYXV0aG9yX21haWwpOworCQkJZWxzZQorCQkJCW51bSA9IHV0Zjhfc3Ryd2lkdGgoY2kuYXV0aG9yKTsKKwkJCWlmIChsb25nZXN0X2F1dGhvciA8IG51bSkKKwkJCQlsb25nZXN0X2F1dGhvciA9IG51bTsKKwkJfQorCQludW0gPSBlLT5zX2xubyArIGUtPm51bV9saW5lczsKKwkJaWYgKGxvbmdlc3Rfc3JjX2xpbmVzIDwgbnVtKQorCQkJbG9uZ2VzdF9zcmNfbGluZXMgPSBudW07CisJCW51bSA9IGUtPmxubyArIGUtPm51bV9saW5lczsKKwkJaWYgKGxvbmdlc3RfZHN0X2xpbmVzIDwgbnVtKQorCQkJbG9uZ2VzdF9kc3RfbGluZXMgPSBudW07CisJCWlmIChsYXJnZXN0X3Njb3JlIDwgZW50X3Njb3JlKHNiLCBlKSkKKwkJCWxhcmdlc3Rfc2NvcmUgPSBlbnRfc2NvcmUoc2IsIGUpOworCX0KKwltYXhfb3JpZ19kaWdpdHMgPSBkZWNpbWFsX3dpZHRoKGxvbmdlc3Rfc3JjX2xpbmVzKTsKKwltYXhfZGlnaXRzID0gZGVjaW1hbF93aWR0aChsb25nZXN0X2RzdF9saW5lcyk7CisJbWF4X3Njb3JlX2RpZ2l0cyA9IGRlY2ltYWxfd2lkdGgobGFyZ2VzdF9zY29yZSk7CisKKwlpZiAoY29tcHV0ZV9hdXRvX2FiYnJldikKKwkJLyogb25lIG1vcmUgYWJicmV2IGxlbmd0aCBpcyBuZWVkZWQgZm9yIHRoZSBib3VuZGFyeSBjb21taXQgKi8KKwkJYWJicmV2ID0gYXV0b19hYmJyZXYgKyAxOworfQorCisvKgorICogRm9yIGRlYnVnZ2luZyAtLSBvcmlnaW4gaXMgcmVmY291bnRlZCwgYW5kIHRoaXMgYXNzZXJ0cyB0aGF0CisgKiB3ZSBkbyBub3QgdW5kZXJmbG93LgorICovCitzdGF0aWMgdm9pZCBzYW5pdHlfY2hlY2tfcmVmY250KHN0cnVjdCBzY29yZWJvYXJkICpzYikKK3sKKwlpbnQgYmFhID0gMDsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKworCWZvciAoZW50ID0gc2ItPmVudDsgZW50OyBlbnQgPSBlbnQtPm5leHQpIHsKKwkJLyogTm9ib2R5IHNob3VsZCBoYXZlIHplcm8gb3IgbmVnYXRpdmUgcmVmY250ICovCisJCWlmIChlbnQtPnN1c3BlY3QtPnJlZmNudCA8PSAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIGluICVzIGhhcyBuZWdhdGl2ZSByZWZjbnQgJWRcbiIsCisJCQkJZW50LT5zdXNwZWN0LT5wYXRoLAorCQkJCXNoYTFfdG9faGV4KGVudC0+c3VzcGVjdC0+Y29tbWl0LT5vYmplY3Quc2hhMSksCisJCQkJZW50LT5zdXNwZWN0LT5yZWZjbnQpOworCQkJYmFhID0gMTsKKwkJfQorCX0KKwlpZiAoYmFhKSB7CisJCWludCBvcHQgPSAwMTYwOworCQlmaW5kX2FsaWdubWVudChzYiwgJm9wdCk7CisJCW91dHB1dChzYiwgb3B0KTsKKwkJZGllKCJCYWEgJWQhIiwgYmFhKTsKKwl9Cit9CisKKy8qCisgKiBVc2VkIGZvciB0aGUgY29tbWFuZCBsaW5lIHBhcnNpbmc7IGNoZWNrIGlmIHRoZSBwYXRoIGV4aXN0cworICogaW4gdGhlIHdvcmtpbmcgdHJlZS4KKyAqLworc3RhdGljIGludCBoYXNfc3RyaW5nX2luX3dvcmtfdHJlZShjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCXJldHVybiAhbHN0YXQocGF0aCwgJnN0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIHBhcnNlX3Njb3JlKGNvbnN0IGNoYXIgKmFyZykKK3sKKwljaGFyICplbmQ7CisJdW5zaWduZWQgbG9uZyBzY29yZSA9IHN0cnRvdWwoYXJnLCAmZW5kLCAxMCk7CisJaWYgKCplbmQpCisJCXJldHVybiAwOworCXJldHVybiBzY29yZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmFkZF9wcmVmaXgoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpwYXRoKQoreworCXJldHVybiBwcmVmaXhfcGF0aChwcmVmaXgsIHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMCwgcGF0aCk7Cit9CisKKy8qCisgKiBQYXJzaW5nIG9mIChjb21tYSBzZXBhcmF0ZWQpIG9uZSBpdGVtIGluIHRoZSAtTCBvcHRpb24KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2xvYyhjb25zdCBjaGFyICpzcGVjLAorCQkJICAgICBzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIGxvbmcgbG5vLAorCQkJICAgICBsb25nIGJlZ2luLCBsb25nICpyZXQpCit7CisJY2hhciAqdGVybTsKKwljb25zdCBjaGFyICpsaW5lOworCWxvbmcgbnVtOworCWludCByZWdfZXJyb3I7CisJcmVnZXhfdCByZWdleHA7CisJcmVnbWF0Y2hfdCBtYXRjaFsxXTsKKworCS8qIEFsbG93ICItTCA8c29tZXRoaW5nPiwrMjAiIHRvIG1lYW4gc3RhcnRpbmcgYXQgPHNvbWV0aGluZz4KKwkgKiBmb3IgMjAgbGluZXMsIG9yICItTCA8c29tZXRoaW5nPiwtNSIgZm9yIDUgbGluZXMgZW5kaW5nIGF0CisJICogPHNvbWV0aGluZz4uCisJICovCisJaWYgKDEgPCBiZWdpbiAmJiAoc3BlY1swXSA9PSAnKycgfHwgc3BlY1swXSA9PSAnLScpKSB7CisJCW51bSA9IHN0cnRvbChzcGVjICsgMSwgJnRlcm0sIDEwKTsKKwkJaWYgKHRlcm0gIT0gc3BlYyArIDEpIHsKKwkJCWlmIChzcGVjWzBdID09ICctJykKKwkJCQludW0gPSAwIC0gbnVtOworCQkJaWYgKDAgPCBudW0pCisJCQkJKnJldCA9IGJlZ2luICsgbnVtIC0gMjsKKwkJCWVsc2UgaWYgKCFudW0pCisJCQkJKnJldCA9IGJlZ2luOworCQkJZWxzZQorCQkJCSpyZXQgPSBiZWdpbiArIG51bTsKKwkJCXJldHVybiB0ZXJtOworCQl9CisJCXJldHVybiBzcGVjOworCX0KKwludW0gPSBzdHJ0b2woc3BlYywgJnRlcm0sIDEwKTsKKwlpZiAodGVybSAhPSBzcGVjKSB7CisJCSpyZXQgPSBudW07CisJCXJldHVybiB0ZXJtOworCX0KKwlpZiAoc3BlY1swXSAhPSAnLycpCisJCXJldHVybiBzcGVjOworCisJLyogaXQgY291bGQgYmUgYSByZWdleHAgb2YgZm9ybSAvLi4uLyAqLworCWZvciAodGVybSA9IChjaGFyICopIHNwZWMgKyAxOyAqdGVybSAmJiAqdGVybSAhPSAnLyc7IHRlcm0rKykgeworCQlpZiAoKnRlcm0gPT0gJ1xcJykKKwkJCXRlcm0rKzsKKwl9CisJaWYgKCp0ZXJtICE9ICcvJykKKwkJcmV0dXJuIHNwZWM7CisKKwkvKiB0cnkgW3NwZWMrMSAuLiB0ZXJtLTFdIGFzIHJlZ2V4cCAqLworCSp0ZXJtID0gMDsKKwliZWdpbi0tOyAvKiBpbnB1dCBpcyBpbiBodW1hbiB0ZXJtcyAqLworCWxpbmUgPSBudGhfbGluZShzYiwgYmVnaW4pOworCisJaWYgKCEocmVnX2Vycm9yID0gcmVnY29tcCgmcmVnZXhwLCBzcGVjICsgMSwgUkVHX05FV0xJTkUpKSAmJgorCSAgICAhKHJlZ19lcnJvciA9IHJlZ2V4ZWMoJnJlZ2V4cCwgbGluZSwgMSwgbWF0Y2gsIDApKSkgeworCQljb25zdCBjaGFyICpjcCA9IGxpbmUgKyBtYXRjaFswXS5ybV9zbzsKKwkJY29uc3QgY2hhciAqbmxpbmU7CisKKwkJd2hpbGUgKGJlZ2luKysgPCBsbm8pIHsKKwkJCW5saW5lID0gbnRoX2xpbmUoc2IsIGJlZ2luKTsKKwkJCWlmIChsaW5lIDw9IGNwICYmIGNwIDwgbmxpbmUpCisJCQkJYnJlYWs7CisJCQlsaW5lID0gbmxpbmU7CisJCX0KKwkJKnJldCA9IGJlZ2luOworCQlyZWdmcmVlKCZyZWdleHApOworCQkqdGVybSsrID0gJy8nOworCQlyZXR1cm4gdGVybTsKKwl9CisJZWxzZSB7CisJCWNoYXIgZXJyYnVmWzEwMjRdOworCQlyZWdlcnJvcihyZWdfZXJyb3IsICZyZWdleHAsIGVycmJ1ZiwgMTAyNCk7CisJCWRpZSgiLUwgcGFyYW1ldGVyICclcyc6ICVzIiwgc3BlYyArIDEsIGVycmJ1Zik7CisJfQorfQorCisvKgorICogUGFyc2luZyBvZiAtTCBvcHRpb24KKyAqLworc3RhdGljIHZvaWQgcHJlcGFyZV9ibGFtZV9yYW5nZShzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCisJCQkJY29uc3QgY2hhciAqYm90dG9tdG9wLAorCQkJCWxvbmcgbG5vLAorCQkJCWxvbmcgKmJvdHRvbSwgbG9uZyAqdG9wKQoreworCWNvbnN0IGNoYXIgKnRlcm07CisKKwl0ZXJtID0gcGFyc2VfbG9jKGJvdHRvbXRvcCwgc2IsIGxubywgMSwgYm90dG9tKTsKKwlpZiAoKnRlcm0gPT0gJywnKSB7CisJCXRlcm0gPSBwYXJzZV9sb2ModGVybSArIDEsIHNiLCBsbm8sICpib3R0b20gKyAxLCB0b3ApOworCQlpZiAoKnRlcm0pCisJCQl1c2FnZShibGFtZV91c2FnZSk7CisJfQorCWlmICgqdGVybSkKKwkJdXNhZ2UoYmxhbWVfdXNhZ2UpOworfQorCitzdGF0aWMgaW50IGdpdF9ibGFtZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUuc2hvd3Jvb3QiKSkgeworCQlzaG93X3Jvb3QgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJibGFtZS5ibGFua2JvdW5kYXJ5IikpIHsKKwkJYmxhbmtfYm91bmRhcnkgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJibGFtZS5kYXRlIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlibGFtZV9kYXRlX21vZGUgPSBwYXJzZV9kYXRlX2Zvcm1hdCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICh1c2VyZGlmZl9jb25maWcodmFyLCB2YWx1ZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIHZvaWQgdmVyaWZ5X3dvcmtpbmdfdHJlZV9wYXRoKHN0cnVjdCBjb21taXQgKndvcmtfdHJlZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwlmb3IgKHBhcmVudHMgPSB3b3JrX3RyZWUtPnBhcmVudHM7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9zaGExID0gcGFyZW50cy0+aXRlbS0+b2JqZWN0LnNoYTE7CisJCXVuc2lnbmVkIGNoYXIgYmxvYl9zaGExWzIwXTsKKwkJdW5zaWduZWQgbW9kZTsKKworCQlpZiAoIWdldF90cmVlX2VudHJ5KGNvbW1pdF9zaGExLCBwYXRoLCBibG9iX3NoYTEsICZtb2RlKSAmJgorCQkgICAgc2hhMV9vYmplY3RfaW5mbyhibG9iX3NoYTEsIE5VTEwpID09IE9CSl9CTE9CKQorCQkJcmV0dXJuOworCX0KKwlkaWUoIm5vIHN1Y2ggcGF0aCAnJXMnIGluIEhFQUQiLCBwYXRoKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqKmFwcGVuZF9wYXJlbnQoc3RydWN0IGNvbW1pdF9saXN0ICoqdGFpbCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQ7CisKKwlwYXJlbnQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwlpZiAoIXBhcmVudCkKKwkJZGllKCJubyBzdWNoIGNvbW1pdCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlyZXR1cm4gJmNvbW1pdF9saXN0X2luc2VydChwYXJlbnQsIHRhaWwpLT5uZXh0OworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbWVyZ2VfcGFyZW50cyhzdHJ1Y3QgY29tbWl0X2xpc3QgKip0YWlsKQoreworCWludCBtZXJnZV9oZWFkOworCWNvbnN0IGNoYXIgKm1lcmdlX2hlYWRfZmlsZSA9IGdpdF9wYXRoKCJNRVJHRV9IRUFEIik7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwltZXJnZV9oZWFkID0gb3BlbihtZXJnZV9oZWFkX2ZpbGUsIE9fUkRPTkxZKTsKKwlpZiAobWVyZ2VfaGVhZCA8IDApIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCXJldHVybjsKKwkJZGllKCJjYW5ub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIiwgbWVyZ2VfaGVhZF9maWxlKTsKKwl9CisKKwl3aGlsZSAoIXN0cmJ1Zl9nZXR3aG9sZWxpbmVfZmQoJmxpbmUsIG1lcmdlX2hlYWQsICdcbicpKSB7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWlmIChsaW5lLmxlbiA8IDQwIHx8IGdldF9zaGExX2hleChsaW5lLmJ1Ziwgc2hhMSkpCisJCQlkaWUoInVua25vd24gbGluZSBpbiAnJXMnOiAlcyIsIG1lcmdlX2hlYWRfZmlsZSwgbGluZS5idWYpOworCQl0YWlsID0gYXBwZW5kX3BhcmVudCh0YWlsLCBzaGExKTsKKwl9CisJY2xvc2UobWVyZ2VfaGVhZCk7CisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworfQorCisvKgorICogUHJlcGFyZSBhIGR1bW15IGNvbW1pdCB0aGF0IHJlcHJlc2VudHMgdGhlIHdvcmsgdHJlZSAob3Igc3RhZ2VkKSBpdGVtLgorICogTm90ZSB0aGF0IGFubm90YXRpbmcgd29yayB0cmVlIGl0ZW0gbmV2ZXIgd29ya3MgaW4gdGhlIHJldmVyc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpmYWtlX3dvcmtpbmdfdHJlZV9jb21taXQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKmNvbnRlbnRzX2Zyb20pCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBvcmlnaW4gKm9yaWdpbjsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwYXJlbnRfdGFpbCwgKnBhcmVudDsKKwl1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICppZGVudDsKKwl0aW1lX3Qgbm93OworCWludCBzaXplLCBsZW47CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwl1bnNpZ25lZCBtb2RlOworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisKKwl0aW1lKCZub3cpOworCWNvbW1pdCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpjb21taXQpKTsKKwljb21taXQtPm9iamVjdC5wYXJzZWQgPSAxOworCWNvbW1pdC0+ZGF0ZSA9IG5vdzsKKwljb21taXQtPm9iamVjdC50eXBlID0gT0JKX0NPTU1JVDsKKwlwYXJlbnRfdGFpbCA9ICZjb21taXQtPnBhcmVudHM7CisKKwlpZiAoIXJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIGhlYWRfc2hhMSwgMSwgTlVMTCkpCisJCWRpZSgibm8gc3VjaCByZWY6IEhFQUQiKTsKKworCXBhcmVudF90YWlsID0gYXBwZW5kX3BhcmVudChwYXJlbnRfdGFpbCwgaGVhZF9zaGExKTsKKwlhcHBlbmRfbWVyZ2VfcGFyZW50cyhwYXJlbnRfdGFpbCk7CisJdmVyaWZ5X3dvcmtpbmdfdHJlZV9wYXRoKGNvbW1pdCwgcGF0aCk7CisKKwlvcmlnaW4gPSBtYWtlX29yaWdpbihjb21taXQsIHBhdGgpOworCisJaWRlbnQgPSBmbXRfaWRlbnQoIk5vdCBDb21taXR0ZWQgWWV0IiwgIm5vdC5jb21taXR0ZWQueWV0IiwgTlVMTCwgMCk7CisJc3RyYnVmX2FkZHN0cigmbXNnLCAidHJlZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXG4iKTsKKwlmb3IgKHBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpCisJCXN0cmJ1Zl9hZGRmKCZtc2csICJwYXJlbnQgJXNcbiIsCisJCQkgICAgc2hhMV90b19oZXgocGFyZW50LT5pdGVtLT5vYmplY3Quc2hhMSkpOworCXN0cmJ1Zl9hZGRmKCZtc2csCisJCSAgICAiYXV0aG9yICVzXG4iCisJCSAgICAiY29tbWl0dGVyICVzXG5cbiIKKwkJICAgICJWZXJzaW9uIG9mICVzIGZyb20gJXNcbiIsCisJCSAgICBpZGVudCwgaWRlbnQsIHBhdGgsCisJCSAgICAoIWNvbnRlbnRzX2Zyb20gPyBwYXRoIDoKKwkJICAgICAoIXN0cmNtcChjb250ZW50c19mcm9tLCAiLSIpID8gInN0YW5kYXJkIGlucHV0IiA6IGNvbnRlbnRzX2Zyb20pKSk7CisJY29tbWl0LT5idWZmZXIgPSBzdHJidWZfZGV0YWNoKCZtc2csIE5VTEwpOworCisJaWYgKCFjb250ZW50c19mcm9tIHx8IHN0cmNtcCgiLSIsIGNvbnRlbnRzX2Zyb20pKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQljb25zdCBjaGFyICpyZWFkX2Zyb207CisJCWNoYXIgKmJ1Zl9wdHI7CisJCXVuc2lnbmVkIGxvbmcgYnVmX2xlbjsKKworCQlpZiAoY29udGVudHNfZnJvbSkgeworCQkJaWYgKHN0YXQoY29udGVudHNfZnJvbSwgJnN0KSA8IDApCisJCQkJZGllX2Vycm5vKCJDYW5ub3Qgc3RhdCAnJXMnIiwgY29udGVudHNfZnJvbSk7CisJCQlyZWFkX2Zyb20gPSBjb250ZW50c19mcm9tOworCQl9CisJCWVsc2UgeworCQkJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKQorCQkJCWRpZV9lcnJubygiQ2Fubm90IGxzdGF0ICclcyciLCBwYXRoKTsKKwkJCXJlYWRfZnJvbSA9IHBhdGg7CisJCX0KKwkJbW9kZSA9IGNhbm9uX21vZGUoc3Quc3RfbW9kZSk7CisKKwkJc3dpdGNoIChzdC5zdF9tb2RlICYgU19JRk1UKSB7CisJCWNhc2UgU19JRlJFRzoKKwkJCWlmIChESUZGX09QVF9UU1Qob3B0LCBBTExPV19URVhUQ09OVikgJiYKKwkJCSAgICB0ZXh0Y29udl9vYmplY3QocmVhZF9mcm9tLCBtb2RlLCBudWxsX3NoYTEsIDAsICZidWZfcHRyLCAmYnVmX2xlbikpCisJCQkJc3RyYnVmX2F0dGFjaCgmYnVmLCBidWZfcHRyLCBidWZfbGVuLCBidWZfbGVuICsgMSk7CisJCQllbHNlIGlmIChzdHJidWZfcmVhZF9maWxlKCZidWYsIHJlYWRfZnJvbSwgc3Quc3Rfc2l6ZSkgIT0gc3Quc3Rfc2l6ZSkKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuIG9yIHJlYWQgJyVzJyIsIHJlYWRfZnJvbSk7CisJCQlicmVhazsKKwkJY2FzZSBTX0lGTE5LOgorCQkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmYnVmLCByZWFkX2Zyb20sIHN0LnN0X3NpemUpIDwgMCkKKwkJCQlkaWVfZXJybm8oImNhbm5vdCByZWFkbGluayAnJXMnIiwgcmVhZF9mcm9tKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGllKCJ1bnN1cHBvcnRlZCBmaWxlIHR5cGUgJXMiLCByZWFkX2Zyb20pOworCQl9CisJfQorCWVsc2UgeworCQkvKiBSZWFkaW5nIGZyb20gc3RkaW4gKi8KKwkJbW9kZSA9IDA7CisJCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAwKSA8IDApCisJCQlkaWVfZXJybm8oImZhaWxlZCB0byByZWFkIGZyb20gc3RkaW4iKTsKKwl9CisJY29udmVydF90b19naXQocGF0aCwgYnVmLmJ1ZiwgYnVmLmxlbiwgJmJ1ZiwgMCk7CisJb3JpZ2luLT5maWxlLnB0ciA9IGJ1Zi5idWY7CisJb3JpZ2luLT5maWxlLnNpemUgPSBidWYubGVuOworCXByZXRlbmRfc2hhMV9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIE9CSl9CTE9CLCBvcmlnaW4tPmJsb2Jfc2hhMSk7CisJY29tbWl0LT51dGlsID0gb3JpZ2luOworCisJLyoKKwkgKiBSZWFkIHRoZSBjdXJyZW50IGluZGV4LCByZXBsYWNlIHRoZSBwYXRoIGVudHJ5IHdpdGgKKwkgKiBvcmlnaW4tPmJsb2Jfc2hhMSB3aXRob3V0IG11Y2tpbmcgd2l0aCBpdHMgbW9kZSBvciB0eXBlCisJICogYml0czsgd2UgYXJlIG5vdCBnb2luZyB0byB3cml0ZSB0aGlzIGluZGV4IG91dCAtLSB3ZSBqdXN0CisJICogd2FudCB0byBydW4gImRpZmYtaW5kZXggLS1jYWNoZWQiLgorCSAqLworCWRpc2NhcmRfY2FjaGUoKTsKKwlyZWFkX2NhY2hlKCk7CisKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJaWYgKCFtb2RlKSB7CisJCWludCBwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBsZW4pOworCQlpZiAoMCA8PSBwb3MpCisJCQltb2RlID0gYWN0aXZlX2NhY2hlW3Bvc10tPmNlX21vZGU7CisJCWVsc2UKKwkJCS8qIExldCdzIG5vdCBib3RoZXIgcmVhZGluZyBmcm9tIEhFQUQgdHJlZSAqLworCQkJbW9kZSA9IFNfSUZSRUcgfCAwNjQ0OworCX0KKwlzaXplID0gY2FjaGVfZW50cnlfc2l6ZShsZW4pOworCWNlID0geGNhbGxvYygxLCBzaXplKTsKKwloYXNoY3B5KGNlLT5zaGExLCBvcmlnaW4tPmJsb2Jfc2hhMSk7CisJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBsZW4pOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncygwKTsKKwljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCWFkZF9jYWNoZV9lbnRyeShjZSwgQUREX0NBQ0hFX09LX1RPX0FERHxBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSk7CisKKwkvKgorCSAqIFdlIGFyZSBub3QgZ29pbmcgdG8gd3JpdGUgdGhpcyBvdXQsIHNvIHRoaXMgZG9lcyBub3QgbWF0dGVyCisJICogcmlnaHQgbm93LCBidXQgc29tZWRheSB3ZSBtaWdodCBvcHRpbWl6ZSBkaWZmLWluZGV4IC0tY2FjaGVkCisJICogd2l0aCBjYWNoZS10cmVlIGluZm9ybWF0aW9uLgorCSAqLworCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKGFjdGl2ZV9jYWNoZV90cmVlLCBwYXRoKTsKKworCXJldHVybiBjb21taXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcmVwYXJlX2ZpbmFsKHN0cnVjdCBzY29yZWJvYXJkICpzYikKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpmaW5hbF9jb21taXRfbmFtZSA9IE5VTEw7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gc2ItPnJldnM7CisKKwkvKgorCSAqIFRoZXJlIG11c3QgYmUgb25lIGFuZCBvbmx5IG9uZSBwb3NpdGl2ZSBjb21taXQgaW4gdGhlCisJICogcmV2cy0+cGVuZGluZyBhcnJheS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5pdGVtOworCQlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQljb250aW51ZTsKKwkJd2hpbGUgKG9iai0+dHlwZSA9PSBPQkpfVEFHKQorCQkJb2JqID0gZGVyZWZfdGFnKG9iaiwgTlVMTCwgMCk7CisJCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCWRpZSgiTm9uIGNvbW1pdCAlcz8iLCByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSk7CisJCWlmIChzYi0+ZmluYWwpCisJCQlkaWUoIk1vcmUgdGhhbiBvbmUgY29tbWl0IHRvIGRpZyBmcm9tICVzIGFuZCAlcz8iLAorCQkJICAgIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lLAorCQkJICAgIGZpbmFsX2NvbW1pdF9uYW1lKTsKKwkJc2ItPmZpbmFsID0gKHN0cnVjdCBjb21taXQgKikgb2JqOworCQlmaW5hbF9jb21taXRfbmFtZSA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lOworCX0KKwlyZXR1cm4gZmluYWxfY29tbWl0X25hbWU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcmVwYXJlX2luaXRpYWwoc3RydWN0IHNjb3JlYm9hcmQgKnNiKQoreworCWludCBpOworCWNvbnN0IGNoYXIgKmZpbmFsX2NvbW1pdF9uYW1lID0gTlVMTDsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBzYi0+cmV2czsKKworCS8qCisJICogVGhlcmUgbXVzdCBiZSBvbmUgYW5kIG9ubHkgb25lIG5lZ2F0aXZlIGNvbW1pdCwgYW5kIGl0IG11c3QgYmUKKwkgKiB0aGUgYm91bmRhcnkuCisJICovCisJZm9yIChpID0gMDsgaSA8IHJldnMtPnBlbmRpbmcubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0uaXRlbTsKKwkJaWYgKCEob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJY29udGludWU7CisJCXdoaWxlIChvYmotPnR5cGUgPT0gT0JKX1RBRykKKwkJCW9iaiA9IGRlcmVmX3RhZyhvYmosIE5VTEwsIDApOworCQlpZiAob2JqLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQlkaWUoIk5vbiBjb21taXQgJXM/IiwgcmV2cy0+cGVuZGluZy5vYmplY3RzW2ldLm5hbWUpOworCQlpZiAoc2ItPmZpbmFsKQorCQkJZGllKCJNb3JlIHRoYW4gb25lIGNvbW1pdCB0byBkaWcgZG93biB0byAlcyBhbmQgJXM/IiwKKwkJCSAgICByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSwKKwkJCSAgICBmaW5hbF9jb21taXRfbmFtZSk7CisJCXNiLT5maW5hbCA9IChzdHJ1Y3QgY29tbWl0ICopIG9iajsKKwkJZmluYWxfY29tbWl0X25hbWUgPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZTsKKwl9CisJaWYgKCFmaW5hbF9jb21taXRfbmFtZSkKKwkJZGllKCJObyBjb21taXQgdG8gZGlnIGRvd24gdG8/Iik7CisJcmV0dXJuIGZpbmFsX2NvbW1pdF9uYW1lOworfQorCitzdGF0aWMgaW50IGJsYW1lX2NvcHlfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9uLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKm9wdCA9IG9wdGlvbi0+dmFsdWU7CisKKwkvKgorCSAqIC1DIGVuYWJsZXMgY29weSBmcm9tIHJlbW92ZWQgZmlsZXM7CisJICogLUMgLUMgZW5hYmxlcyBjb3B5IGZyb20gZXhpc3RpbmcgZmlsZXMsIGJ1dCBvbmx5CisJICogICAgICAgd2hlbiBibGFtaW5nIGEgbmV3IGZpbGU7CisJICogLUMgLUMgLUMgZW5hYmxlcyBjb3B5IGZyb20gZXhpc3RpbmcgZmlsZXMgZm9yCisJICogICAgICAgICAgZXZlcnlib2R5CisJICovCisJaWYgKCpvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFlfSEFSREVSKQorCQkqb3B0IHw9IFBJQ0tBWEVfQkxBTUVfQ09QWV9IQVJERVNUOworCWlmICgqb3B0ICYgUElDS0FYRV9CTEFNRV9DT1BZKQorCQkqb3B0IHw9IFBJQ0tBWEVfQkxBTUVfQ09QWV9IQVJERVI7CisJKm9wdCB8PSBQSUNLQVhFX0JMQU1FX0NPUFkgfCBQSUNLQVhFX0JMQU1FX01PVkU7CisKKwlpZiAoYXJnKQorCQlibGFtZV9jb3B5X3Njb3JlID0gcGFyc2Vfc2NvcmUoYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibGFtZV9tb3ZlX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbiwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICpvcHQgPSBvcHRpb24tPnZhbHVlOworCisJKm9wdCB8PSBQSUNLQVhFX0JMQU1FX01PVkU7CisKKwlpZiAoYXJnKQorCQlibGFtZV9tb3ZlX3Njb3JlID0gcGFyc2Vfc2NvcmUoYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibGFtZV9ib3R0b210b3BfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9uLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwljb25zdCBjaGFyICoqYm90dG9tdG9wID0gb3B0aW9uLT52YWx1ZTsKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCWlmICgqYm90dG9tdG9wKQorCQlkaWUoIk1vcmUgdGhhbiBvbmUgJy1MIG4sbScgb3B0aW9uIGdpdmVuIik7CisJKmJvdHRvbXRvcCA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9ibGFtZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwljb25zdCBjaGFyICpwYXRoOworCXN0cnVjdCBzY29yZWJvYXJkIHNiOworCXN0cnVjdCBvcmlnaW4gKm87CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisJbG9uZyBkYXNoZGFzaF9wb3MsIGJvdHRvbSwgdG9wLCBsbm87CisJY29uc3QgY2hhciAqZmluYWxfY29tbWl0X25hbWUgPSBOVUxMOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCXN0YXRpYyBjb25zdCBjaGFyICpib3R0b210b3AgPSBOVUxMOworCXN0YXRpYyBpbnQgb3V0cHV0X29wdGlvbiA9IDAsIG9wdCA9IDA7CisJc3RhdGljIGludCBzaG93X3N0YXRzID0gMDsKKwlzdGF0aWMgY29uc3QgY2hhciAqcmV2c19maWxlID0gTlVMTDsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29udGVudHNfZnJvbSA9IE5VTEw7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTigwLCAiaW5jcmVtZW50YWwiLCAmaW5jcmVtZW50YWwsIE5fKCJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IikpLAorCQlPUFRfQk9PTEVBTignYicsIE5VTEwsICZibGFua19ib3VuZGFyeSwgTl8oIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiKSksCisJCU9QVF9CT09MRUFOKDAsICJyb290IiwgJnNob3dfcm9vdCwgTl8oIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgInNob3ctc3RhdHMiLCAmc2hvd19zdGF0cywgTl8oIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiKSksCisJCU9QVF9CSVQoMCwgInNjb3JlLWRlYnVnIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIpLCBPVVRQVVRfU0hPV19TQ09SRSksCisJCU9QVF9CSVQoJ2YnLCAic2hvdy1uYW1lIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIpLCBPVVRQVVRfU0hPV19OQU1FKSwKKwkJT1BUX0JJVCgnbicsICJzaG93LW51bWJlciIsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9TSE9XX05VTUJFUiksCisJCU9QVF9CSVQoJ3AnLCAicG9yY2VsYWluIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIiksIE9VVFBVVF9QT1JDRUxBSU4pLAorCQlPUFRfQklUKDAsICJsaW5lLXBvcmNlbGFpbiIsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIiksIE9VVFBVVF9QT1JDRUxBSU58T1VUUFVUX0xJTkVfUE9SQ0VMQUlOKSwKKwkJT1BUX0JJVCgnYycsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIpLCBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUKSwKKwkJT1BUX0JJVCgndCcsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9SQVdfVElNRVNUQU1QKSwKKwkJT1BUX0JJVCgnbCcsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9MT05HX09CSkVDVF9OQU1FKSwKKwkJT1BUX0JJVCgncycsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIpLCBPVVRQVVRfTk9fQVVUSE9SKSwKKwkJT1BUX0JJVCgnZScsICJzaG93LWVtYWlsIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiKSwgT1VUUFVUX1NIT1dfRU1BSUwpLAorCQlPUFRfQklUKCd3JywgTlVMTCwgJnhkbF9vcHRzLCBOXygiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiKSwgWERGX0lHTk9SRV9XSElURVNQQUNFKSwKKwkJT1BUX0JJVCgwLCAibWluaW1hbCIsICZ4ZGxfb3B0cywgTl8oIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIpLCBYREZfTkVFRF9NSU5JTUFMKSwKKwkJT1BUX1NUUklORygnUycsIE5VTEwsICZyZXZzX2ZpbGUsIE5fKCJmaWxlIiksIE5fKCJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiKSksCisJCU9QVF9TVFJJTkcoMCwgImNvbnRlbnRzIiwgJmNvbnRlbnRzX2Zyb20sIE5fKCJmaWxlIiksIE5fKCJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ0MnLCBOVUxMLCAmb3B0LCBOXygic2NvcmUiKSwgTl8oIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiKSwgUEFSU0VfT1BUX09QVEFSRywgYmxhbWVfY29weV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ00nLCBOVUxMLCAmb3B0LCBOXygic2NvcmUiKSwgTl8oIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiKSwgUEFSU0VfT1BUX09QVEFSRywgYmxhbWVfbW92ZV9jYWxsYmFjayB9LAorCQlPUFRfQ0FMTEJBQ0soJ0wnLCBOVUxMLCAmYm90dG9tdG9wLCBOXygibixtIiksIE5fKCJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIpLCBibGFtZV9ib3R0b210b3BfY2FsbGJhY2spLAorCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX0VORCgpCisJfTsKKworCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgY3R4OworCWludCBjbWRfaXNfYW5ub3RhdGUgPSAhc3RyY21wKGFyZ3ZbMF0sICJhbm5vdGF0ZSIpOworCisJZ2l0X2NvbmZpZyhnaXRfYmxhbWVfY29uZmlnLCBOVUxMKTsKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJcmV2cy5kYXRlX21vZGUgPSBibGFtZV9kYXRlX21vZGU7CisJRElGRl9PUFRfU0VUKCZyZXZzLmRpZmZvcHQsIEFMTE9XX1RFWFRDT05WKTsKKworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisJZGFzaGRhc2hfcG9zID0gMDsKKworCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCWZvciAoOzspIHsKKwkJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgYmxhbWVfb3B0X3VzYWdlKSkgeworCQljYXNlIFBBUlNFX09QVF9IRUxQOgorCQkJZXhpdCgxMjkpOworCQljYXNlIFBBUlNFX09QVF9ET05FOgorCQkJaWYgKGN0eC5hcmd2WzBdKQorCQkJCWRhc2hkYXNoX3BvcyA9IGN0eC5jcGlkeDsKKwkJCWdvdG8gcGFyc2VfZG9uZTsKKwkJfQorCisJCWlmICghc3RyY21wKGN0eC5hcmd2WzBdLCAiLS1yZXZlcnNlIikpIHsKKwkJCWN0eC5hcmd2WzBdID0gIi0tY2hpbGRyZW4iOworCQkJcmV2ZXJzZSA9IDE7CisJCX0KKwkJcGFyc2VfcmV2aXNpb25fb3B0KCZyZXZzLCAmY3R4LCBvcHRpb25zLCBibGFtZV9vcHRfdXNhZ2UpOworCX0KK3BhcnNlX2RvbmU6CisJYXJnYyA9IHBhcnNlX29wdGlvbnNfZW5kKCZjdHgpOworCisJaWYgKDAgPCBhYmJyZXYpCisJCS8qIG9uZSBtb3JlIGFiYnJldiBsZW5ndGggaXMgbmVlZGVkIGZvciB0aGUgYm91bmRhcnkgY29tbWl0ICovCisJCWFiYnJldisrOworCisJaWYgKHJldnNfZmlsZSAmJiByZWFkX2FuY2VzdHJ5KHJldnNfZmlsZSkpCisJCWRpZV9lcnJubygicmVhZGluZyBncmFmdCBmaWxlICclcycgZmFpbGVkIiwgcmV2c19maWxlKTsKKworCWlmIChjbWRfaXNfYW5ub3RhdGUpIHsKKwkJb3V0cHV0X29wdGlvbiB8PSBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUOworCQlibGFtZV9kYXRlX21vZGUgPSBEQVRFX0lTTzg2MDE7CisJfSBlbHNlIHsKKwkJYmxhbWVfZGF0ZV9tb2RlID0gcmV2cy5kYXRlX21vZGU7CisJfQorCisJLyogVGhlIG1heGltdW0gd2lkdGggdXNlZCB0byBzaG93IHRoZSBkYXRlcyAqLworCXN3aXRjaCAoYmxhbWVfZGF0ZV9tb2RlKSB7CisJY2FzZSBEQVRFX1JGQzI4MjI6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIlRodSwgMTkgT2N0IDIwMDYgMTY6MDA6MDQgLTA3MDAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX0lTTzg2MDE6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIjIwMDYtMTAtMTkgMTY6MDA6MDQgLTA3MDAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX1JBVzoKKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHNpemVvZigiMTE2MTI5ODgwNCAtMDcwMCIpOworCQlicmVhazsKKwljYXNlIERBVEVfU0hPUlQ6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIjIwMDYtMTAtMTkiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX1JFTEFUSVZFOgorCQkvKiAibm9ybWFsIiBpcyB1c2VkIGFzIHRoZSBmYWxsYmFjayBmb3IgInJlbGF0aXZlIiAqLworCWNhc2UgREFURV9MT0NBTDoKKwljYXNlIERBVEVfTk9STUFMOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCJUaHUgT2N0IDE5IDE2OjAwOjA0IDIwMDYgLTA3MDAiKTsKKwkJYnJlYWs7CisJfQorCWJsYW1lX2RhdGVfd2lkdGggLT0gMTsgLyogc3RyaXAgdGhlIG51bGwgKi8KKworCWlmIChESUZGX09QVF9UU1QoJnJldnMuZGlmZm9wdCwgRklORF9DT1BJRVNfSEFSREVSKSkKKwkJb3B0IHw9IChQSUNLQVhFX0JMQU1FX0NPUFkgfCBQSUNLQVhFX0JMQU1FX01PVkUgfAorCQkJUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFUik7CisKKwlpZiAoIWJsYW1lX21vdmVfc2NvcmUpCisJCWJsYW1lX21vdmVfc2NvcmUgPSBCTEFNRV9ERUZBVUxUX01PVkVfU0NPUkU7CisJaWYgKCFibGFtZV9jb3B5X3Njb3JlKQorCQlibGFtZV9jb3B5X3Njb3JlID0gQkxBTUVfREVGQVVMVF9DT1BZX1NDT1JFOworCisJLyoKKwkgKiBXZSBoYXZlIGNvbGxlY3RlZCBvcHRpb25zIHVua25vd24gdG8gdXMgaW4gYXJndlsxLi51bmtdCisJICogd2hpY2ggYXJlIHRvIGJlIHBhc3NlZCB0byByZXZpc2lvbiBtYWNoaW5lcnkgaWYgd2UgYXJlCisJICogZ29pbmcgdG8gZG8gdGhlICJib3R0b20iIHByb2Nlc3NpbmcuCisJICoKKwkgKiBUaGUgcmVtYWluaW5nIGFyZToKKwkgKgorCSAqICgxKSBpZiBkYXNoZGFzaF9wb3MgIT0gMCwgaXQgaXMgZWl0aGVyCisJICogICAgICJibGFtZSBbcmV2aXNpb25zXSAtLSA8cGF0aD4iIG9yCisJICogICAgICJibGFtZSAtLSA8cGF0aD4gPHJldj4iCisJICoKKwkgKiAoMikgb3RoZXJ3aXNlLCBpdCBpcyBvbmUgb2YgdGhlIHR3bzoKKwkgKiAgICAgImJsYW1lIFtyZXZpc2lvbnNdIDxwYXRoPiIKKwkgKiAgICAgImJsYW1lIDxwYXRoPiA8cmV2PiIKKwkgKgorCSAqIE5vdGUgdGhhdCB3ZSBtdXN0IHN0cmlwIG91dCA8cGF0aD4gZnJvbSB0aGUgYXJndW1lbnRzOiB3ZSBkbyBub3QKKwkgKiB3YW50IHRoZSBwYXRoIHBydW5pbmcgYnV0IHdlIG1heSB3YW50ICJib3R0b20iIHByb2Nlc3NpbmcuCisJICovCisJaWYgKGRhc2hkYXNoX3BvcykgeworCQlzd2l0Y2ggKGFyZ2MgLSBkYXNoZGFzaF9wb3MgLSAxKSB7CisJCWNhc2UgMjogLyogKDFiKSAqLworCQkJaWYgKGFyZ2MgIT0gNCkKKwkJCQl1c2FnZV93aXRoX29wdGlvbnMoYmxhbWVfb3B0X3VzYWdlLCBvcHRpb25zKTsKKwkJCS8qIHJlb3JkZXIgZm9yIHRoZSBuZXcgd2F5OiA8cmV2PiAtLSA8cGF0aD4gKi8KKwkJCWFyZ3ZbMV0gPSBhcmd2WzNdOworCQkJYXJndlszXSA9IGFyZ3ZbMl07CisJCQlhcmd2WzJdID0gIi0tIjsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWNhc2UgMTogLyogKDFhKSAqLworCQkJcGF0aCA9IGFkZF9wcmVmaXgocHJlZml4LCBhcmd2Wy0tYXJnY10pOworCQkJYXJndlthcmdjXSA9IE5VTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhibGFtZV9vcHRfdXNhZ2UsIG9wdGlvbnMpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFyZ2MgPCAyKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJsYW1lX29wdF91c2FnZSwgb3B0aW9ucyk7CisJCXBhdGggPSBhZGRfcHJlZml4KHByZWZpeCwgYXJndlthcmdjIC0gMV0pOworCQlpZiAoYXJnYyA9PSAzICYmICFoYXNfc3RyaW5nX2luX3dvcmtfdHJlZShwYXRoKSkgeyAvKiAoMmIpICovCisJCQlwYXRoID0gYWRkX3ByZWZpeChwcmVmaXgsIGFyZ3ZbMV0pOworCQkJYXJndlsxXSA9IGFyZ3ZbMl07CisJCX0KKwkJYXJndlthcmdjIC0gMV0gPSAiLS0iOworCisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlpZiAoIWhhc19zdHJpbmdfaW5fd29ya190cmVlKHBhdGgpKQorCQkJZGllX2Vycm5vKCJjYW5ub3Qgc3RhdCBwYXRoICclcyciLCBwYXRoKTsKKwl9CisKKwlyZXZzLmRpc2FibGVfc3RkaW4gPSAxOworCXNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2cywgTlVMTCk7CisJbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHNiKSk7CisKKwlzYi5yZXZzID0gJnJldnM7CisJaWYgKCFyZXZlcnNlKQorCQlmaW5hbF9jb21taXRfbmFtZSA9IHByZXBhcmVfZmluYWwoJnNiKTsKKwllbHNlIGlmIChjb250ZW50c19mcm9tKQorCQlkaWUoIi0tY29udGVudHMgYW5kIC0tY2hpbGRyZW4gZG8gbm90IGJsZW5kIHdlbGwuIik7CisJZWxzZQorCQlmaW5hbF9jb21taXRfbmFtZSA9IHByZXBhcmVfaW5pdGlhbCgmc2IpOworCisJaWYgKCFzYi5maW5hbCkgeworCQkvKgorCQkgKiAiLS1ub3QgQSBCIC0tIHBhdGgiIHdpdGhvdXQgYW55dGhpbmcgcG9zaXRpdmU7CisJCSAqIGRvIG5vdCBkZWZhdWx0IHRvIEhFQUQsIGJ1dCB1c2UgdGhlIHdvcmtpbmcgdHJlZQorCQkgKiBvciAiLS1jb250ZW50cyIuCisJCSAqLworCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJc2IuZmluYWwgPSBmYWtlX3dvcmtpbmdfdHJlZV9jb21taXQoJnNiLnJldnMtPmRpZmZvcHQsCisJCQkJCQkgICAgcGF0aCwgY29udGVudHNfZnJvbSk7CisJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgJihzYi5maW5hbC0+b2JqZWN0KSwgIjoiKTsKKwl9CisJZWxzZSBpZiAoY29udGVudHNfZnJvbSkKKwkJZGllKCJDYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiKTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBib3R0b20sIHRoaXMgd2lsbCBtYXJrIHRoZSBhbmNlc3RvcnMgb2YgdGhlCisJICogYm90dG9tIGNvbW1pdHMgd2Ugd291bGQgcmVhY2ggd2hpbGUgdHJhdmVyc2luZyBhcworCSAqIHVuaW50ZXJlc3RpbmcuCisJICovCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKworCWlmIChpc19udWxsX3NoYTEoc2IuZmluYWwtPm9iamVjdC5zaGExKSkgeworCQljaGFyICpidWY7CisJCW8gPSBzYi5maW5hbC0+dXRpbDsKKwkJYnVmID0geG1hbGxvYyhvLT5maWxlLnNpemUgKyAxKTsKKwkJbWVtY3B5KGJ1Ziwgby0+ZmlsZS5wdHIsIG8tPmZpbGUuc2l6ZSArIDEpOworCQlzYi5maW5hbF9idWYgPSBidWY7CisJCXNiLmZpbmFsX2J1Zl9zaXplID0gby0+ZmlsZS5zaXplOworCX0KKwllbHNlIHsKKwkJbyA9IGdldF9vcmlnaW4oJnNiLCBzYi5maW5hbCwgcGF0aCk7CisJCWlmIChmaWxsX2Jsb2Jfc2hhMV9hbmRfbW9kZShvKSkKKwkJCWRpZSgibm8gc3VjaCBwYXRoICVzIGluICVzIiwgcGF0aCwgZmluYWxfY29tbWl0X25hbWUpOworCisJCWlmIChESUZGX09QVF9UU1QoJnNiLnJldnMtPmRpZmZvcHQsIEFMTE9XX1RFWFRDT05WKSAmJgorCQkgICAgdGV4dGNvbnZfb2JqZWN0KHBhdGgsIG8tPm1vZGUsIG8tPmJsb2Jfc2hhMSwgMSwgKGNoYXIgKiopICZzYi5maW5hbF9idWYsCisJCQkJICAgICZzYi5maW5hbF9idWZfc2l6ZSkpCisJCQk7CisJCWVsc2UKKwkJCXNiLmZpbmFsX2J1ZiA9IHJlYWRfc2hhMV9maWxlKG8tPmJsb2Jfc2hhMSwgJnR5cGUsCisJCQkJCQkgICAgICAmc2IuZmluYWxfYnVmX3NpemUpOworCisJCWlmICghc2IuZmluYWxfYnVmKQorCQkJZGllKCJDYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIiwKKwkJCSAgICBzaGExX3RvX2hleChvLT5ibG9iX3NoYTEpLAorCQkJICAgIHBhdGgpOworCX0KKwludW1fcmVhZF9ibG9iKys7CisJbG5vID0gcHJlcGFyZV9saW5lcygmc2IpOworCisJYm90dG9tID0gdG9wID0gMDsKKwlpZiAoYm90dG9tdG9wKQorCQlwcmVwYXJlX2JsYW1lX3JhbmdlKCZzYiwgYm90dG9tdG9wLCBsbm8sICZib3R0b20sICZ0b3ApOworCWlmIChib3R0b20gJiYgdG9wICYmIHRvcCA8IGJvdHRvbSkgeworCQlsb25nIHRtcDsKKwkJdG1wID0gdG9wOyB0b3AgPSBib3R0b207IGJvdHRvbSA9IHRtcDsKKwl9CisJaWYgKGJvdHRvbSA8IDEpCisJCWJvdHRvbSA9IDE7CisJaWYgKHRvcCA8IDEpCisJCXRvcCA9IGxubzsKKwlib3R0b20tLTsKKwlpZiAobG5vIDwgdG9wIHx8IGxubyA8IGJvdHRvbSkKKwkJZGllKCJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIsIHBhdGgsIGxubyk7CisKKwllbnQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZW50KSk7CisJZW50LT5sbm8gPSBib3R0b207CisJZW50LT5udW1fbGluZXMgPSB0b3AgLSBib3R0b207CisJZW50LT5zdXNwZWN0ID0gbzsKKwllbnQtPnNfbG5vID0gYm90dG9tOworCisJc2IuZW50ID0gZW50OworCXNiLnBhdGggPSBwYXRoOworCisJcmVhZF9tYWlsbWFwKCZtYWlsbWFwLCBOVUxMKTsKKworCWlmICghaW5jcmVtZW50YWwpCisJCXNldHVwX3BhZ2VyKCk7CisKKwlhc3NpZ25fYmxhbWUoJnNiLCBvcHQpOworCisJaWYgKGluY3JlbWVudGFsKQorCQlyZXR1cm4gMDsKKworCWNvYWxlc2NlKCZzYik7CisKKwlpZiAoIShvdXRwdXRfb3B0aW9uICYgT1VUUFVUX1BPUkNFTEFJTikpCisJCWZpbmRfYWxpZ25tZW50KCZzYiwgJm91dHB1dF9vcHRpb24pOworCisJb3V0cHV0KCZzYiwgb3V0cHV0X29wdGlvbik7CisJZnJlZSgodm9pZCAqKXNiLmZpbmFsX2J1Zik7CisJZm9yIChlbnQgPSBzYi5lbnQ7IGVudDsgKSB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqZSA9IGVudC0+bmV4dDsKKwkJZnJlZShlbnQpOworCQllbnQgPSBlOworCX0KKworCWlmIChzaG93X3N0YXRzKSB7CisJCXByaW50ZigibnVtIHJlYWQgYmxvYjogJWRcbiIsIG51bV9yZWFkX2Jsb2IpOworCQlwcmludGYoIm51bSBnZXQgcGF0Y2g6ICVkXG4iLCBudW1fZ2V0X3BhdGNoKTsKKwkJcHJpbnRmKCJudW0gY29tbWl0czogJWRcbiIsIG51bV9jb21taXRzKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2JyYW5jaC5jIGIvYnVpbHRpbi9icmFuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQyNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9icmFuY2guYwpAQCAtMCwwICsxLDkyMCBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBicmFuY2giCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+CisgKiBCYXNlZCBvbiBnaXQtYnJhbmNoLnNoIGJ5IEp1bmlvIEMgSGFtYW5vLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9icmFuY2hfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGJyYW5jaCBbb3B0aW9uc10gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIpLAorCU5fKCJnaXQgYnJhbmNoIFtvcHRpb25zXSBbLWxdIFstZl0gPGJyYW5jaG5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIpLAorCU5fKCJnaXQgYnJhbmNoIFtvcHRpb25zXSBbLXJdICgtZCB8IC1EKSA8YnJhbmNobmFtZT4uLi4iKSwKKwlOXygiZ2l0IGJyYW5jaCBbb3B0aW9uc10gKC1tIHwgLU0pIFs8b2xkYnJhbmNoPl0gPG5ld2JyYW5jaD4iKSwKKwlOVUxMCit9OworCisjZGVmaW5lIFJFRl9MT0NBTF9CUkFOQ0ggICAgMHgwMQorI2RlZmluZSBSRUZfUkVNT1RFX0JSQU5DSCAgIDB4MDIKKworc3RhdGljIGNvbnN0IGNoYXIgKmhlYWQ7CitzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworCitzdGF0aWMgaW50IGJyYW5jaF91c2VfY29sb3IgPSAtMTsKK3N0YXRpYyBjaGFyIGJyYW5jaF9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRVNFVCwKKwlHSVRfQ09MT1JfTk9STUFMLAkvKiBQTEFJTiAqLworCUdJVF9DT0xPUl9SRUQsCQkvKiBSRU1PVEUgKi8KKwlHSVRfQ09MT1JfTk9STUFMLAkvKiBMT0NBTCAqLworCUdJVF9DT0xPUl9HUkVFTiwJLyogQ1VSUkVOVCAqLworfTsKK2VudW0gY29sb3JfYnJhbmNoIHsKKwlCUkFOQ0hfQ09MT1JfUkVTRVQgPSAwLAorCUJSQU5DSF9DT0xPUl9QTEFJTiA9IDEsCisJQlJBTkNIX0NPTE9SX1JFTU9URSA9IDIsCisJQlJBTkNIX0NPTE9SX0xPQ0FMID0gMywKKwlCUkFOQ0hfQ09MT1JfQ1VSUkVOVCA9IDQKK307CisKK3N0YXRpYyBlbnVtIG1lcmdlX2ZpbHRlciB7CisJTk9fRklMVEVSID0gMCwKKwlTSE9XX05PVF9NRVJHRUQsCisJU0hPV19NRVJHRUQKK30gbWVyZ2VfZmlsdGVyOworc3RhdGljIHVuc2lnbmVkIGNoYXIgbWVyZ2VfZmlsdGVyX3JlZlsyMF07CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgb3V0cHV0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbG9wdHM7CisKK3N0YXRpYyBpbnQgcGFyc2VfYnJhbmNoX2NvbG9yX3Nsb3QoY29uc3QgY2hhciAqdmFyLCBpbnQgb2ZzKQoreworCWlmICghc3RyY2FzZWNtcCh2YXIrb2ZzLCAicGxhaW4iKSkKKwkJcmV0dXJuIEJSQU5DSF9DT0xPUl9QTEFJTjsKKwlpZiAoIXN0cmNhc2VjbXAodmFyK29mcywgInJlc2V0IikpCisJCXJldHVybiBCUkFOQ0hfQ09MT1JfUkVTRVQ7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZnMsICJyZW1vdGUiKSkKKwkJcmV0dXJuIEJSQU5DSF9DT0xPUl9SRU1PVEU7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZnMsICJsb2NhbCIpKQorCQlyZXR1cm4gQlJBTkNIX0NPTE9SX0xPQ0FMOworCWlmICghc3RyY2FzZWNtcCh2YXIrb2ZzLCAiY3VycmVudCIpKQorCQlyZXR1cm4gQlJBTkNIX0NPTE9SX0NVUlJFTlQ7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdpdF9icmFuY2hfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghcHJlZml4Y21wKHZhciwgImNvbHVtbi4iKSkKKwkJcmV0dXJuIGdpdF9jb2x1bW5fY29uZmlnKHZhciwgdmFsdWUsICJicmFuY2giLCAmY29sb3B0cyk7CisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuYnJhbmNoIikpIHsKKwkJYnJhbmNoX3VzZV9jb2xvciA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFwcmVmaXhjbXAodmFyLCAiY29sb3IuYnJhbmNoLiIpKSB7CisJCWludCBzbG90ID0gcGFyc2VfYnJhbmNoX2NvbG9yX3Nsb3QodmFyLCAxMyk7CisJCWlmIChzbG90IDwgMCkKKwkJCXJldHVybiAwOworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWNvbG9yX3BhcnNlKHZhbHVlLCB2YXIsIGJyYW5jaF9jb2xvcnNbc2xvdF0pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpicmFuY2hfZ2V0X2NvbG9yKGVudW0gY29sb3JfYnJhbmNoIGl4KQoreworCWlmICh3YW50X2NvbG9yKGJyYW5jaF91c2VfY29sb3IpKQorCQlyZXR1cm4gYnJhbmNoX2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgaW50IGJyYW5jaF9tZXJnZWQoaW50IGtpbmQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGNvbW1pdCAqcmV2LCBzdHJ1Y3QgY29tbWl0ICpoZWFkX3JldikKK3sKKwkvKgorCSAqIFRoaXMgY2hlY2tzIHdoZXRoZXIgdGhlIG1lcmdlIGJhc2VzIG9mIGJyYW5jaCBhbmQgSEVBRCAob3IKKwkgKiB0aGUgb3RoZXIgYnJhbmNoIHRoaXMgYnJhbmNoIGJ1aWxkcyB1cG9uKSBjb250YWlucyB0aGUKKwkgKiBicmFuY2gsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGJyYW5jaCBoYXMgYWxyZWFkeSBiZWVuIG1lcmdlZAorCSAqIHNhZmVseSB0byBIRUFEIChvciB0aGUgb3RoZXIgYnJhbmNoKS4KKwkgKi8KKwlzdHJ1Y3QgY29tbWl0ICpyZWZlcmVuY2VfcmV2ID0gTlVMTDsKKwljb25zdCBjaGFyICpyZWZlcmVuY2VfbmFtZSA9IE5VTEw7CisJdm9pZCAqcmVmZXJlbmNlX25hbWVfdG9fZnJlZSA9IE5VTEw7CisJaW50IG1lcmdlZDsKKworCWlmIChraW5kID09IFJFRl9MT0NBTF9CUkFOQ0gpIHsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChuYW1lKTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCQlpZiAoYnJhbmNoICYmCisJCSAgICBicmFuY2gtPm1lcmdlICYmCisJCSAgICBicmFuY2gtPm1lcmdlWzBdICYmCisJCSAgICBicmFuY2gtPm1lcmdlWzBdLT5kc3QgJiYKKwkJICAgIChyZWZlcmVuY2VfbmFtZSA9IHJlZmVyZW5jZV9uYW1lX3RvX2ZyZWUgPQorCQkgICAgIHJlc29sdmVfcmVmZHVwKGJyYW5jaC0+bWVyZ2VbMF0tPmRzdCwgc2hhMSwgMSwgTlVMTCkpICE9IE5VTEwpCisJCQlyZWZlcmVuY2VfcmV2ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJfQorCWlmICghcmVmZXJlbmNlX3JldikKKwkJcmVmZXJlbmNlX3JldiA9IGhlYWRfcmV2OworCisJbWVyZ2VkID0gaW5fbWVyZ2VfYmFzZXMocmV2LCByZWZlcmVuY2VfcmV2KTsKKworCS8qCisJICogQWZ0ZXIgdGhlIHNhZmV0eSB2YWx2ZSBpcyBmdWxseSByZWRlZmluZWQgdG8gImNoZWNrIHdpdGgKKwkgKiB1cHN0cmVhbSwgaWYgYW55LCBvdGhlcndpc2Ugd2l0aCBIRUFEIiwgd2Ugc2hvdWxkIGp1c3QKKwkgKiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgaW5fbWVyZ2VfYmFzZXMoKSBhYm92ZSB3aXRob3V0CisJICogYW55IG9mIHRoZSBmb2xsb3dpbmcgY29kZSwgYnV0IGR1cmluZyB0aGUgdHJhbnNpdGlvbiBwZXJpb2QsCisJICogYSBnZW50bGUgcmVtaW5kZXIgaXMgaW4gb3JkZXIuCisJICovCisJaWYgKChoZWFkX3JldiAhPSByZWZlcmVuY2VfcmV2KSAmJgorCSAgICBpbl9tZXJnZV9iYXNlcyhyZXYsIGhlYWRfcmV2KSAhPSBtZXJnZWQpIHsKKwkJaWYgKG1lcmdlZCkKKwkJCXdhcm5pbmcoXygiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKwkJCQkiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIiksCisJCQkJbmFtZSwgcmVmZXJlbmNlX25hbWUpOworCQllbHNlCisJCQl3YXJuaW5nKF8oIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisJCQkJIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIpLAorCQkJCW5hbWUsIHJlZmVyZW5jZV9uYW1lKTsKKwl9CisJZnJlZShyZWZlcmVuY2VfbmFtZV90b19mcmVlKTsKKwlyZXR1cm4gbWVyZ2VkOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV9icmFuY2hlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGludCBmb3JjZSwgaW50IGtpbmRzLAorCQkJICAgaW50IHF1aWV0KQoreworCXN0cnVjdCBjb21taXQgKnJldiwgKmhlYWRfcmV2ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgKm5hbWUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmZtdDsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcmVtb3RlX2JyYW5jaCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBibmFtZSA9IFNUUkJVRl9JTklUOworCisJc3dpdGNoIChraW5kcykgeworCWNhc2UgUkVGX1JFTU9URV9CUkFOQ0g6CisJCWZtdCA9ICJyZWZzL3JlbW90ZXMvJXMiOworCQkvKiBGb3Igc3Vic2VxdWVudCBVSSBtZXNzYWdlcyAqLworCQlyZW1vdGVfYnJhbmNoID0gMTsKKworCQlmb3JjZSA9IDE7CisJCWJyZWFrOworCWNhc2UgUkVGX0xPQ0FMX0JSQU5DSDoKKwkJZm10ID0gInJlZnMvaGVhZHMvJXMiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoXygiY2Fubm90IHVzZSAtYSB3aXRoIC1kIikpOworCX0KKworCWlmICghZm9yY2UpIHsKKwkJaGVhZF9yZXYgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShoZWFkX3NoYTEpOworCQlpZiAoIWhlYWRfcmV2KQorCQkJZGllKF8oIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIpKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKywgc3RyYnVmX3JlbGVhc2UoJmJuYW1lKSkgeworCQlzdHJidWZfYnJhbmNobmFtZSgmYm5hbWUsIGFyZ3ZbaV0pOworCQlpZiAoa2luZHMgPT0gUkVGX0xPQ0FMX0JSQU5DSCAmJiAhc3RyY21wKGhlYWQsIGJuYW1lLmJ1ZikpIHsKKwkJCWVycm9yKF8oIkNhbm5vdCBkZWxldGUgdGhlIGJyYW5jaCAnJXMnICIKKwkJCSAgICAgICJ3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBvbi4iKSwgYm5hbWUuYnVmKTsKKwkJCXJldCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZyZWUobmFtZSk7CisKKwkJbmFtZSA9IG1rcGF0aGR1cChmbXQsIGJuYW1lLmJ1Zik7CisJCWlmIChyZWFkX3JlZihuYW1lLCBzaGExKSkgeworCQkJZXJyb3IocmVtb3RlX2JyYW5jaAorCQkJICAgICAgPyBfKCJyZW1vdGUgYnJhbmNoICclcycgbm90IGZvdW5kLiIpCisJCQkgICAgICA6IF8oImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iKSwgYm5hbWUuYnVmKTsKKwkJCXJldCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJldiA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCQlpZiAoIXJldikgeworCQkJZXJyb3IoXygiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIiksIG5hbWUpOworCQkJcmV0ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFmb3JjZSAmJiAhYnJhbmNoX21lcmdlZChraW5kcywgYm5hbWUuYnVmLCByZXYsIGhlYWRfcmV2KSkgeworCQkJZXJyb3IoXygiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisJCQkgICAgICAiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgIgorCQkJICAgICAgInJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIiksIGJuYW1lLmJ1ZiwgYm5hbWUuYnVmKTsKKwkJCXJldCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChkZWxldGVfcmVmKG5hbWUsIHNoYTEsIDApKSB7CisJCQllcnJvcihyZW1vdGVfYnJhbmNoCisJCQkgICAgICA/IF8oIkVycm9yIGRlbGV0aW5nIHJlbW90ZSBicmFuY2ggJyVzJyIpCisJCQkgICAgICA6IF8oIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIiksCisJCQkgICAgICBibmFtZS5idWYpOworCQkJcmV0ID0gMTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoIXF1aWV0KQorCQkJCXByaW50ZihyZW1vdGVfYnJhbmNoCisJCQkJICAgICAgID8gXygiRGVsZXRlZCByZW1vdGUgYnJhbmNoICVzICh3YXMgJXMpLlxuIikKKwkJCQkgICAgICAgOiBfKCJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIpLAorCQkJCSAgICAgICBibmFtZS5idWYsCisJCQkJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVikpOworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcyIsIGJuYW1lLmJ1Zik7CisJCQlpZiAoZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihidWYuYnVmLCBOVUxMKSA8IDApCisJCQkJd2FybmluZyhfKCJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIikpOworCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCX0KKwl9CisKKwlmcmVlKG5hbWUpOworCisJcmV0dXJuKHJldCk7Cit9CisKK3N0cnVjdCByZWZfaXRlbSB7CisJY2hhciAqbmFtZTsKKwljaGFyICpkZXN0OworCXVuc2lnbmVkIGludCBraW5kLCB3aWR0aDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7Cit9OworCitzdHJ1Y3QgcmVmX2xpc3QgeworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCWludCBpbmRleCwgYWxsb2MsIG1heHdpZHRoLCB2ZXJib3NlLCBhYmJyZXY7CisJc3RydWN0IHJlZl9pdGVtICpsaXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQ7CisJaW50IGtpbmRzOworfTsKKworc3RhdGljIGNoYXIgKnJlc29sdmVfc3ltcmVmKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqcHJlZml4KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IGZsYWc7CisJY29uc3QgY2hhciAqZHN0LCAqY3A7CisKKwlkc3QgPSByZXNvbHZlX3JlZl91bnNhZmUoc3JjLCBzaGExLCAwLCAmZmxhZyk7CisJaWYgKCEoZHN0ICYmIChmbGFnICYgUkVGX0lTU1lNUkVGKSkpCisJCXJldHVybiBOVUxMOworCWlmIChwcmVmaXggJiYgKGNwID0gc2tpcF9wcmVmaXgoZHN0LCBwcmVmaXgpKSkKKwkJZHN0ID0gY3A7CisJcmV0dXJuIHhzdHJkdXAoZHN0KTsKK30KKworc3RydWN0IGFwcGVuZF9yZWZfY2IgeworCXN0cnVjdCByZWZfbGlzdCAqcmVmX2xpc3Q7CisJY29uc3QgY2hhciAqKnBhdHRlcm47CisJaW50IHJldDsKK307CisKK3N0YXRpYyBpbnQgbWF0Y2hfcGF0dGVybnMoY29uc3QgY2hhciAqKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJaWYgKCEqcGF0dGVybikKKwkJcmV0dXJuIDE7IC8qIG5vIHBhdHRlcm4gYWx3YXlzIG1hdGNoZXMgKi8KKwl3aGlsZSAoKnBhdHRlcm4pIHsKKwkJaWYgKCFmbm1hdGNoKCpwYXR0ZXJuLCByZWZuYW1lLCAwKSkKKwkJCXJldHVybiAxOworCQlwYXR0ZXJuKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBhcHBlbmRfcmVmX2NiICpjYiA9IChzdHJ1Y3QgYXBwZW5kX3JlZl9jYiAqKShjYl9kYXRhKTsKKwlzdHJ1Y3QgcmVmX2xpc3QgKnJlZl9saXN0ID0gY2ItPnJlZl9saXN0OworCXN0cnVjdCByZWZfaXRlbSAqbmV3aXRlbTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJaW50IGtpbmQsIGk7CisJY29uc3QgY2hhciAqcHJlZml4LCAqb3JpZ19yZWZuYW1lID0gcmVmbmFtZTsKKworCXN0YXRpYyBzdHJ1Y3QgeworCQlpbnQga2luZDsKKwkJY29uc3QgY2hhciAqcHJlZml4OworCQlpbnQgcGZ4bGVuOworCX0gcmVmX2tpbmRbXSA9IHsKKwkJeyBSRUZfTE9DQUxfQlJBTkNILCAicmVmcy9oZWFkcy8iLCAxMSB9LAorCQl7IFJFRl9SRU1PVEVfQlJBTkNILCAicmVmcy9yZW1vdGVzLyIsIDEzIH0sCisJfTsKKworCS8qIERldGVjdCBraW5kICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVmX2tpbmQpOyBpKyspIHsKKwkJcHJlZml4ID0gcmVmX2tpbmRbaV0ucHJlZml4OworCQlpZiAoc3RybmNtcChyZWZuYW1lLCBwcmVmaXgsIHJlZl9raW5kW2ldLnBmeGxlbikpCisJCQljb250aW51ZTsKKwkJa2luZCA9IHJlZl9raW5kW2ldLmtpbmQ7CisJCXJlZm5hbWUgKz0gcmVmX2tpbmRbaV0ucGZ4bGVuOworCQlicmVhazsKKwl9CisJaWYgKEFSUkFZX1NJWkUocmVmX2tpbmQpIDw9IGkpCisJCXJldHVybiAwOworCisJLyogRG9uJ3QgYWRkIHR5cGVzIHRoZSBjYWxsZXIgZG9lc24ndCB3YW50ICovCisJaWYgKChraW5kICYgcmVmX2xpc3QtPmtpbmRzKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmICghbWF0Y2hfcGF0dGVybnMoY2ItPnBhdHRlcm4sIHJlZm5hbWUpKQorCQlyZXR1cm4gMDsKKworCWNvbW1pdCA9IE5VTEw7CisJaWYgKHJlZl9saXN0LT52ZXJib3NlIHx8IHJlZl9saXN0LT53aXRoX2NvbW1pdCB8fCBtZXJnZV9maWx0ZXIgIT0gTk9fRklMVEVSKSB7CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzaGExLCAxKTsKKwkJaWYgKCFjb21taXQpIHsKKwkJCWNiLT5yZXQgPSBlcnJvcihfKCJicmFuY2ggJyVzJyBkb2VzIG5vdCBwb2ludCBhdCBhIGNvbW1pdCIpLCByZWZuYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogRmlsdGVyIHdpdGggd2l0aF9jb21taXQgaWYgc3BlY2lmaWVkICovCisJCWlmICghaXNfZGVzY2VuZGFudF9vZihjb21taXQsIHJlZl9saXN0LT53aXRoX2NvbW1pdCkpCisJCQlyZXR1cm4gMDsKKworCQlpZiAobWVyZ2VfZmlsdGVyICE9IE5PX0ZJTFRFUikKKwkJCWFkZF9wZW5kaW5nX29iamVjdCgmcmVmX2xpc3QtPnJldnMsCisJCQkJCSAgIChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0LCByZWZuYW1lKTsKKwl9CisKKwlBTExPQ19HUk9XKHJlZl9saXN0LT5saXN0LCByZWZfbGlzdC0+aW5kZXggKyAxLCByZWZfbGlzdC0+YWxsb2MpOworCisJLyogUmVjb3JkIHRoZSBuZXcgaXRlbSAqLworCW5ld2l0ZW0gPSAmKHJlZl9saXN0LT5saXN0W3JlZl9saXN0LT5pbmRleCsrXSk7CisJbmV3aXRlbS0+bmFtZSA9IHhzdHJkdXAocmVmbmFtZSk7CisJbmV3aXRlbS0+a2luZCA9IGtpbmQ7CisJbmV3aXRlbS0+Y29tbWl0ID0gY29tbWl0OworCW5ld2l0ZW0tPndpZHRoID0gdXRmOF9zdHJ3aWR0aChyZWZuYW1lKTsKKwluZXdpdGVtLT5kZXN0ID0gcmVzb2x2ZV9zeW1yZWYob3JpZ19yZWZuYW1lLCBwcmVmaXgpOworCS8qIGFkanVzdCBmb3IgInJlbW90ZXMvIiAqLworCWlmIChuZXdpdGVtLT5raW5kID09IFJFRl9SRU1PVEVfQlJBTkNIICYmCisJICAgIHJlZl9saXN0LT5raW5kcyAhPSBSRUZfUkVNT1RFX0JSQU5DSCkKKwkJbmV3aXRlbS0+d2lkdGggKz0gODsKKwlpZiAobmV3aXRlbS0+d2lkdGggPiByZWZfbGlzdC0+bWF4d2lkdGgpCisJCXJlZl9saXN0LT5tYXh3aWR0aCA9IG5ld2l0ZW0tPndpZHRoOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVmX2xpc3Qoc3RydWN0IHJlZl9saXN0ICpyZWZfbGlzdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByZWZfbGlzdC0+aW5kZXg7IGkrKykgeworCQlmcmVlKHJlZl9saXN0LT5saXN0W2ldLm5hbWUpOworCQlmcmVlKHJlZl9saXN0LT5saXN0W2ldLmRlc3QpOworCX0KKwlmcmVlKHJlZl9saXN0LT5saXN0KTsKK30KKworc3RhdGljIGludCByZWZfY21wKGNvbnN0IHZvaWQgKnIxLCBjb25zdCB2b2lkICpyMikKK3sKKwlzdHJ1Y3QgcmVmX2l0ZW0gKmMxID0gKHN0cnVjdCByZWZfaXRlbSAqKShyMSk7CisJc3RydWN0IHJlZl9pdGVtICpjMiA9IChzdHJ1Y3QgcmVmX2l0ZW0gKikocjIpOworCisJaWYgKGMxLT5raW5kICE9IGMyLT5raW5kKQorCQlyZXR1cm4gYzEtPmtpbmQgLSBjMi0+a2luZDsKKwlyZXR1cm4gc3RyY21wKGMxLT5uYW1lLCBjMi0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfdHJhY2tpbmdfaW5mbyhzdHJ1Y3Qgc3RyYnVmICpzdGF0LCBjb25zdCBjaGFyICpicmFuY2hfbmFtZSwKKwkJaW50IHNob3dfdXBzdHJlYW1fcmVmKQoreworCWludCBvdXJzLCB0aGVpcnM7CisJY2hhciAqcmVmID0gTlVMTDsKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KGJyYW5jaF9uYW1lKTsKKworCWlmICghc3RhdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJm91cnMsICZ0aGVpcnMpKSB7CisJCWlmIChicmFuY2ggJiYgYnJhbmNoLT5tZXJnZSAmJiBicmFuY2gtPm1lcmdlWzBdLT5kc3QgJiYKKwkJICAgIHNob3dfdXBzdHJlYW1fcmVmKQorCQkJc3RyYnVmX2FkZGYoc3RhdCwgIlslc10gIiwKKwkJCSAgICBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihicmFuY2gtPm1lcmdlWzBdLT5kc3QsIDApKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzaG93X3Vwc3RyZWFtX3JlZikKKwkJcmVmID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoYnJhbmNoLT5tZXJnZVswXS0+ZHN0LCAwKTsKKwlpZiAoIW91cnMpIHsKKwkJaWYgKHJlZikKKwkJCXN0cmJ1Zl9hZGRmKHN0YXQsIF8oIlslczogYmVoaW5kICVkXSIpLCByZWYsIHRoZWlycyk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKHN0YXQsIF8oIltiZWhpbmQgJWRdIiksIHRoZWlycyk7CisKKwl9IGVsc2UgaWYgKCF0aGVpcnMpIHsKKwkJaWYgKHJlZikKKwkJCXN0cmJ1Zl9hZGRmKHN0YXQsIF8oIlslczogYWhlYWQgJWRdIiksIHJlZiwgb3Vycyk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKHN0YXQsIF8oIlthaGVhZCAlZF0iKSwgb3Vycyk7CisJfSBlbHNlIHsKKwkJaWYgKHJlZikKKwkJCXN0cmJ1Zl9hZGRmKHN0YXQsIF8oIlslczogYWhlYWQgJWQsIGJlaGluZCAlZF0iKSwKKwkJCQkgICAgcmVmLCBvdXJzLCB0aGVpcnMpOworCQllbHNlCisJCQlzdHJidWZfYWRkZihzdGF0LCBfKCJbYWhlYWQgJWQsIGJlaGluZCAlZF0iKSwKKwkJCQkgICAgb3VycywgdGhlaXJzKTsKKwl9CisJc3RyYnVmX2FkZGNoKHN0YXQsICcgJyk7CisJZnJlZShyZWYpOworfQorCitzdGF0aWMgaW50IG1hdGNoZXNfbWVyZ2VfZmlsdGVyKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpbnQgaXNfbWVyZ2VkOworCisJaWYgKG1lcmdlX2ZpbHRlciA9PSBOT19GSUxURVIpCisJCXJldHVybiAxOworCisJaXNfbWVyZ2VkID0gISEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKTsKKwlyZXR1cm4gKGlzX21lcmdlZCA9PSAobWVyZ2VfZmlsdGVyID09IFNIT1dfTUVSR0VEKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF92ZXJib3NlX2luZm8oc3RydWN0IHN0cmJ1ZiAqb3V0LCBzdHJ1Y3QgcmVmX2l0ZW0gKml0ZW0sCisJCQkgICAgIGludCB2ZXJib3NlLCBpbnQgYWJicmV2KQoreworCXN0cnVjdCBzdHJidWYgc3ViamVjdCA9IFNUUkJVRl9JTklULCBzdGF0ID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqc3ViID0gIiAqKioqIGludmFsaWQgcmVmICoqKioiOworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGl0ZW0tPmNvbW1pdDsKKworCWlmIChjb21taXQgJiYgIXBhcnNlX2NvbW1pdChjb21taXQpKSB7CisJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJnN1YmplY3QpOworCQlzdWIgPSBzdWJqZWN0LmJ1ZjsKKwl9CisKKwlpZiAoaXRlbS0+a2luZCA9PSBSRUZfTE9DQUxfQlJBTkNIKQorCQlmaWxsX3RyYWNraW5nX2luZm8oJnN0YXQsIGl0ZW0tPm5hbWUsIHZlcmJvc2UgPiAxKTsKKworCXN0cmJ1Zl9hZGRmKG91dCwgIiAlcyAlcyVzIiwKKwkJZmluZF91bmlxdWVfYWJicmV2KGl0ZW0tPmNvbW1pdC0+b2JqZWN0LnNoYTEsIGFiYnJldiksCisJCXN0YXQuYnVmLCBzdWIpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdGF0KTsKKwlzdHJidWZfcmVsZWFzZSgmc3ViamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3JlZl9pdGVtKHN0cnVjdCByZWZfaXRlbSAqaXRlbSwgaW50IG1heHdpZHRoLCBpbnQgdmVyYm9zZSwKKwkJCSAgIGludCBhYmJyZXYsIGludCBjdXJyZW50LCBjaGFyICpwcmVmaXgpCit7CisJY2hhciBjOworCWludCBjb2xvcjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBpdGVtLT5jb21taXQ7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVCwgbmFtZSA9IFNUUkJVRl9JTklUOworCisJaWYgKCFtYXRjaGVzX21lcmdlX2ZpbHRlcihjb21taXQpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGl0ZW0tPmtpbmQpIHsKKwljYXNlIFJFRl9MT0NBTF9CUkFOQ0g6CisJCWNvbG9yID0gQlJBTkNIX0NPTE9SX0xPQ0FMOworCQlicmVhazsKKwljYXNlIFJFRl9SRU1PVEVfQlJBTkNIOgorCQljb2xvciA9IEJSQU5DSF9DT0xPUl9SRU1PVEU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbG9yID0gQlJBTkNIX0NPTE9SX1BMQUlOOworCQlicmVhazsKKwl9CisKKwljID0gJyAnOworCWlmIChjdXJyZW50KSB7CisJCWMgPSAnKic7CisJCWNvbG9yID0gQlJBTkNIX0NPTE9SX0NVUlJFTlQ7CisJfQorCisJc3RyYnVmX2FkZGYoJm5hbWUsICIlcyVzIiwgcHJlZml4LCBpdGVtLT5uYW1lKTsKKwlpZiAodmVyYm9zZSkgeworCQlpbnQgdXRmOF9jb21wZW5zYXRpb24gPSBzdHJsZW4obmFtZS5idWYpIC0gdXRmOF9zdHJ3aWR0aChuYW1lLmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZvdXQsICIlYyAlcyUtKnMlcyIsIGMsIGJyYW5jaF9nZXRfY29sb3IoY29sb3IpLAorCQkJICAgIG1heHdpZHRoICsgdXRmOF9jb21wZW5zYXRpb24sIG5hbWUuYnVmLAorCQkJICAgIGJyYW5jaF9nZXRfY29sb3IoQlJBTkNIX0NPTE9SX1JFU0VUKSk7CisJfSBlbHNlCisJCXN0cmJ1Zl9hZGRmKCZvdXQsICIlYyAlcyVzJXMiLCBjLCBicmFuY2hfZ2V0X2NvbG9yKGNvbG9yKSwKKwkJCSAgICBuYW1lLmJ1ZiwgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfUkVTRVQpKTsKKworCWlmIChpdGVtLT5kZXN0KQorCQlzdHJidWZfYWRkZigmb3V0LCAiIC0+ICVzIiwgaXRlbS0+ZGVzdCk7CisJZWxzZSBpZiAodmVyYm9zZSkKKwkJLyogIiBmN2MwYzAwIFthaGVhZCA1OCwgYmVoaW5kIDE5N10gdmNzLXN2bjogZHJvcCBvYmpfcG9vbC5oIiAqLworCQlhZGRfdmVyYm9zZV9pbmZvKCZvdXQsIGl0ZW0sIHZlcmJvc2UsIGFiYnJldik7CisJaWYgKGNvbHVtbl9hY3RpdmUoY29sb3B0cykpIHsKKwkJYXNzZXJ0KCF2ZXJib3NlICYmICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZvdXRwdXQsIG91dC5idWYpOworCX0gZWxzZSB7CisJCXByaW50ZigiJXNcbiIsIG91dC5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7Cit9CisKK3N0YXRpYyBpbnQgY2FsY19tYXh3aWR0aChzdHJ1Y3QgcmVmX2xpc3QgKnJlZnMpCit7CisJaW50IGksIHcgPSAwOworCWZvciAoaSA9IDA7IGkgPCByZWZzLT5pbmRleDsgaSsrKSB7CisJCWlmICghbWF0Y2hlc19tZXJnZV9maWx0ZXIocmVmcy0+bGlzdFtpXS5jb21taXQpKQorCQkJY29udGludWU7CisJCWlmIChyZWZzLT5saXN0W2ldLndpZHRoID4gdykKKwkJCXcgPSByZWZzLT5saXN0W2ldLndpZHRoOworCX0KKwlyZXR1cm4gdzsKK30KKworCitzdGF0aWMgdm9pZCBzaG93X2RldGFjaGVkKHN0cnVjdCByZWZfbGlzdCAqcmVmX2xpc3QpCit7CisJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoaGVhZF9zaGExLCAxKTsKKworCWlmIChoZWFkX2NvbW1pdCAmJiBpc19kZXNjZW5kYW50X29mKGhlYWRfY29tbWl0LCByZWZfbGlzdC0+d2l0aF9jb21taXQpKSB7CisJCXN0cnVjdCByZWZfaXRlbSBpdGVtOworCQlpdGVtLm5hbWUgPSB4c3RyZHVwKF8oIihubyBicmFuY2gpIikpOworCQlpdGVtLndpZHRoID0gdXRmOF9zdHJ3aWR0aChpdGVtLm5hbWUpOworCQlpdGVtLmtpbmQgPSBSRUZfTE9DQUxfQlJBTkNIOworCQlpdGVtLmRlc3QgPSBOVUxMOworCQlpdGVtLmNvbW1pdCA9IGhlYWRfY29tbWl0OworCQlpZiAoaXRlbS53aWR0aCA+IHJlZl9saXN0LT5tYXh3aWR0aCkKKwkJCXJlZl9saXN0LT5tYXh3aWR0aCA9IGl0ZW0ud2lkdGg7CisJCXByaW50X3JlZl9pdGVtKCZpdGVtLCByZWZfbGlzdC0+bWF4d2lkdGgsIHJlZl9saXN0LT52ZXJib3NlLCByZWZfbGlzdC0+YWJicmV2LCAxLCAiIik7CisJCWZyZWUoaXRlbS5uYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJpbnRfcmVmX2xpc3QoaW50IGtpbmRzLCBpbnQgZGV0YWNoZWQsIGludCB2ZXJib3NlLCBpbnQgYWJicmV2LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKndpdGhfY29tbWl0LCBjb25zdCBjaGFyICoqcGF0dGVybikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgYXBwZW5kX3JlZl9jYiBjYjsKKwlzdHJ1Y3QgcmVmX2xpc3QgcmVmX2xpc3Q7CisKKwltZW1zZXQoJnJlZl9saXN0LCAwLCBzaXplb2YocmVmX2xpc3QpKTsKKwlyZWZfbGlzdC5raW5kcyA9IGtpbmRzOworCXJlZl9saXN0LnZlcmJvc2UgPSB2ZXJib3NlOworCXJlZl9saXN0LmFiYnJldiA9IGFiYnJldjsKKwlyZWZfbGlzdC53aXRoX2NvbW1pdCA9IHdpdGhfY29tbWl0OworCWlmIChtZXJnZV9maWx0ZXIgIT0gTk9fRklMVEVSKQorCQlpbml0X3JldmlzaW9ucygmcmVmX2xpc3QucmV2cywgTlVMTCk7CisJY2IucmVmX2xpc3QgPSAmcmVmX2xpc3Q7CisJY2IucGF0dGVybiA9IHBhdHRlcm47CisJY2IucmV0ID0gMDsKKwlmb3JfZWFjaF9yYXdyZWYoYXBwZW5kX3JlZiwgJmNiKTsKKwlpZiAobWVyZ2VfZmlsdGVyICE9IE5PX0ZJTFRFUikgeworCQlzdHJ1Y3QgY29tbWl0ICpmaWx0ZXI7CisJCWZpbHRlciA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShtZXJnZV9maWx0ZXJfcmVmLCAwKTsKKwkJaWYgKCFmaWx0ZXIpCisJCQlkaWUoIm9iamVjdCAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IiwKKwkJCSAgICBzaGExX3RvX2hleChtZXJnZV9maWx0ZXJfcmVmKSk7CisKKwkJZmlsdGVyLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZWZfbGlzdC5yZXZzLAorCQkJCSAgIChzdHJ1Y3Qgb2JqZWN0ICopIGZpbHRlciwgIiIpOworCQlyZWZfbGlzdC5yZXZzLmxpbWl0ZWQgPSAxOworCQlwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJlZl9saXN0LnJldnMpOworCQlpZiAodmVyYm9zZSkKKwkJCXJlZl9saXN0Lm1heHdpZHRoID0gY2FsY19tYXh3aWR0aCgmcmVmX2xpc3QpOworCX0KKworCXFzb3J0KHJlZl9saXN0Lmxpc3QsIHJlZl9saXN0LmluZGV4LCBzaXplb2Yoc3RydWN0IHJlZl9pdGVtKSwgcmVmX2NtcCk7CisKKwlkZXRhY2hlZCA9IChkZXRhY2hlZCAmJiAoa2luZHMgJiBSRUZfTE9DQUxfQlJBTkNIKSk7CisJaWYgKGRldGFjaGVkICYmIG1hdGNoX3BhdHRlcm5zKHBhdHRlcm4sICJIRUFEIikpCisJCXNob3dfZGV0YWNoZWQoJnJlZl9saXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCByZWZfbGlzdC5pbmRleDsgaSsrKSB7CisJCWludCBjdXJyZW50ID0gIWRldGFjaGVkICYmCisJCQkocmVmX2xpc3QubGlzdFtpXS5raW5kID09IFJFRl9MT0NBTF9CUkFOQ0gpICYmCisJCQkhc3RyY21wKHJlZl9saXN0Lmxpc3RbaV0ubmFtZSwgaGVhZCk7CisJCWNoYXIgKnByZWZpeCA9IChraW5kcyAhPSBSRUZfUkVNT1RFX0JSQU5DSCAmJgorCQkJCXJlZl9saXN0Lmxpc3RbaV0ua2luZCA9PSBSRUZfUkVNT1RFX0JSQU5DSCkKKwkJCQk/ICJyZW1vdGVzLyIgOiAiIjsKKwkJcHJpbnRfcmVmX2l0ZW0oJnJlZl9saXN0Lmxpc3RbaV0sIHJlZl9saXN0Lm1heHdpZHRoLCB2ZXJib3NlLAorCQkJICAgICAgIGFiYnJldiwgY3VycmVudCwgcHJlZml4KTsKKwl9CisKKwlmcmVlX3JlZl9saXN0KCZyZWZfbGlzdCk7CisKKwlpZiAoY2IucmV0KQorCQllcnJvcihfKCJzb21lIHJlZnMgY291bGQgbm90IGJlIHJlYWQiKSk7CisKKwlyZXR1cm4gY2IucmV0OworfQorCitzdGF0aWMgdm9pZCByZW5hbWVfYnJhbmNoKGNvbnN0IGNoYXIgKm9sZG5hbWUsIGNvbnN0IGNoYXIgKm5ld25hbWUsIGludCBmb3JjZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG9sZHJlZiA9IFNUUkJVRl9JTklULCBuZXdyZWYgPSBTVFJCVUZfSU5JVCwgbG9nbXNnID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBvbGRzZWN0aW9uID0gU1RSQlVGX0lOSVQsIG5ld3NlY3Rpb24gPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmVjb3ZlcnkgPSAwOworCWludCBjbG9iYmVyX2hlYWRfb2s7CisKKwlpZiAoIW9sZG5hbWUpCisJCWRpZShfKCJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIpKTsKKworCWlmIChzdHJidWZfY2hlY2tfYnJhbmNoX3JlZigmb2xkcmVmLCBvbGRuYW1lKSkgeworCQkvKgorCQkgKiBCYWQgbmFtZSAtLS0gdGhpcyBjb3VsZCBiZSBhbiBhdHRlbXB0IHRvIHJlbmFtZSBhCisJCSAqIHJlZiB0aGF0IHdlIHVzZWQgdG8gYWxsb3cgdG8gYmUgY3JlYXRlZCBieSBhY2NpZGVudC4KKwkJICovCisJCWlmIChyZWZfZXhpc3RzKG9sZHJlZi5idWYpKQorCQkJcmVjb3ZlcnkgPSAxOworCQllbHNlCisJCQlkaWUoXygiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIpLCBvbGRuYW1lKTsKKwl9CisKKwkvKgorCSAqIEEgY29tbWFuZCBsaWtlICJnaXQgYnJhbmNoIC1NIGN1cnJlbnRicmFuY2ggY3VycmVudGJyYW5jaCIgY2Fubm90CisJICogY2F1c2UgdGhlIHdvcmt0cmVlIHRvIGJlY29tZSBpbmNvbnNpc3RlbnQgd2l0aCBIRUFELCBzbyBhbGxvdyBpdC4KKwkgKi8KKwljbG9iYmVyX2hlYWRfb2sgPSAhc3RyY21wKG9sZG5hbWUsIG5ld25hbWUpOworCisJdmFsaWRhdGVfbmV3X2JyYW5jaG5hbWUobmV3bmFtZSwgJm5ld3JlZiwgZm9yY2UsIGNsb2JiZXJfaGVhZF9vayk7CisKKwlzdHJidWZfYWRkZigmbG9nbXNnLCAiQnJhbmNoOiByZW5hbWVkICVzIHRvICVzIiwKKwkJIG9sZHJlZi5idWYsIG5ld3JlZi5idWYpOworCisJaWYgKHJlbmFtZV9yZWYob2xkcmVmLmJ1ZiwgbmV3cmVmLmJ1ZiwgbG9nbXNnLmJ1ZikpCisJCWRpZShfKCJCcmFuY2ggcmVuYW1lIGZhaWxlZCIpKTsKKwlzdHJidWZfcmVsZWFzZSgmbG9nbXNnKTsKKworCWlmIChyZWNvdmVyeSkKKwkJd2FybmluZyhfKCJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIpLCBvbGRyZWYuYnVmICsgMTEpOworCisJLyogbm8gbmVlZCB0byBwYXNzIGxvZ21zZyBoZXJlIGFzIEhFQUQgZGlkbid0IHJlYWxseSBtb3ZlICovCisJaWYgKCFzdHJjbXAob2xkbmFtZSwgaGVhZCkgJiYgY3JlYXRlX3N5bXJlZigiSEVBRCIsIG5ld3JlZi5idWYsIE5VTEwpKQorCQlkaWUoXygiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIpLCBuZXduYW1lKTsKKworCXN0cmJ1Zl9hZGRmKCZvbGRzZWN0aW9uLCAiYnJhbmNoLiVzIiwgb2xkcmVmLmJ1ZiArIDExKTsKKwlzdHJidWZfcmVsZWFzZSgmb2xkcmVmKTsKKwlzdHJidWZfYWRkZigmbmV3c2VjdGlvbiwgImJyYW5jaC4lcyIsIG5ld3JlZi5idWYgKyAxMSk7CisJc3RyYnVmX3JlbGVhc2UoJm5ld3JlZik7CisJaWYgKGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24ob2xkc2VjdGlvbi5idWYsIG5ld3NlY3Rpb24uYnVmKSA8IDApCisJCWRpZShfKCJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiKSk7CisJc3RyYnVmX3JlbGVhc2UoJm9sZHNlY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdzZWN0aW9uKTsKK30KKworc3RhdGljIGludCBvcHRfcGFyc2VfbWVyZ2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJbWVyZ2VfZmlsdGVyID0gKChvcHQtPmxvbmdfbmFtZVswXSA9PSAnbicpCisJCQk/IFNIT1dfTk9UX01FUkdFRAorCQkJOiBTSE9XX01FUkdFRCk7CisJaWYgKHVuc2V0KQorCQltZXJnZV9maWx0ZXIgPSBTSE9XX05PVF9NRVJHRUQ7IC8qIGIvYyBmb3IgLS1uby1tZXJnZWQgKi8KKwlpZiAoIWFyZykKKwkJYXJnID0gIkhFQUQiOworCWlmIChnZXRfc2hhMShhcmcsIG1lcmdlX2ZpbHRlcl9yZWYpKQorCQlkaWUoXygibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIiksIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGVkaXRfZGVzY3JpcHRpb25bXSA9ICJCUkFOQ0hfREVTQ1JJUFRJT04iOworCitzdGF0aWMgaW50IGVkaXRfYnJhbmNoX2Rlc2NyaXB0aW9uKGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lKQoreworCUZJTEUgKmZwOworCWludCBzdGF0dXM7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCXJlYWRfYnJhbmNoX2Rlc2MoJmJ1ZiwgYnJhbmNoX25hbWUpOworCWlmICghYnVmLmxlbiB8fCBidWYuYnVmW2J1Zi5sZW4tMV0gIT0gJ1xuJykKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCXN0cmJ1Zl9hZGRmKCZidWYsCisJCSAgICAiIyBQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKwkJICAgICIjICAgJXNcbiIKKwkJICAgICIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iLAorCQkgICAgYnJhbmNoX25hbWUpOworCWZwID0gZm9wZW4oZ2l0X3BhdGgoZWRpdF9kZXNjcmlwdGlvbiksICJ3Iik7CisJaWYgKChmd3JpdGUoYnVmLmJ1ZiwgMSwgYnVmLmxlbiwgZnApIDwgYnVmLmxlbikgfHwgZmNsb3NlKGZwKSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCB3cml0ZSBicmFuY2ggZGVzY3JpcHRpb24gdGVtcGxhdGU6ICVzIiksCisJCQkgICAgIHN0cmVycm9yKGVycm5vKSk7CisJfQorCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlpZiAobGF1bmNoX2VkaXRvcihnaXRfcGF0aChlZGl0X2Rlc2NyaXB0aW9uKSwgJmJ1ZiwgTlVMTCkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisJc3RyaXBzcGFjZSgmYnVmLCAxKTsKKworCXN0cmJ1Zl9hZGRmKCZuYW1lLCAiYnJhbmNoLiVzLmRlc2NyaXB0aW9uIiwgYnJhbmNoX25hbWUpOworCXN0YXR1cyA9IGdpdF9jb25maWdfc2V0KG5hbWUuYnVmLCBidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgY21kX2JyYW5jaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZGVsZXRlID0gMCwgcmVuYW1lID0gMCwgZm9yY2VfY3JlYXRlID0gMCwgbGlzdCA9IDA7CisJaW50IHZlcmJvc2UgPSAwLCBhYmJyZXYgPSAtMSwgZGV0YWNoZWQgPSAwOworCWludCByZWZsb2cgPSAwLCBlZGl0X2Rlc2NyaXB0aW9uID0gMDsKKwlpbnQgcXVpZXQgPSAwLCB1bnNldF91cHN0cmVhbSA9IDA7CisJY29uc3QgY2hhciAqbmV3X3Vwc3RyZWFtID0gTlVMTDsKKwllbnVtIGJyYW5jaF90cmFjayB0cmFjazsKKwlpbnQga2luZHMgPSBSRUZfTE9DQUxfQlJBTkNIOworCXN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQgPSBOVUxMOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9HUk9VUChOXygiR2VuZXJpYyBvcHRpb25zIikpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsCisJCQlOXygic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giKSksCisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIpKSwKKwkJT1BUX1NFVF9JTlQoJ3QnLCAidHJhY2siLCAgJnRyYWNrLCBOXygic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiKSwKKwkJCUJSQU5DSF9UUkFDS19FWFBMSUNJVCksCisJCU9QVF9TRVRfSU5UKCAwLCAic2V0LXVwc3RyZWFtIiwgICZ0cmFjaywgTl8oImNoYW5nZSB1cHN0cmVhbSBpbmZvIiksCisJCQlCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUpLAorCQlPUFRfU1RSSU5HKCd1JywgInNldC11cHN0cmVhbS10byIsICZuZXdfdXBzdHJlYW0sICJ1cHN0cmVhbSIsICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iKSwKKwkJT1BUX0JPT0xFQU4oMCwgInVuc2V0LXVwc3RyZWFtIiwgJnVuc2V0X3Vwc3RyZWFtLCAiVW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iKSwKKwkJT1BUX19DT0xPUigmYnJhbmNoX3VzZV9jb2xvciwgTl8oInVzZSBjb2xvcmVkIG91dHB1dCIpKSwKKwkJT1BUX1NFVF9JTlQoJ3InLCAicmVtb3RlcyIsICAgICAma2luZHMsIE5fKCJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIiksCisJCQlSRUZfUkVNT1RFX0JSQU5DSCksCisJCXsKKwkJCU9QVElPTl9DQUxMQkFDSywgMCwgImNvbnRhaW5zIiwgJndpdGhfY29tbWl0LCBOXygiY29tbWl0IiksCisJCQlOXygicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIpLAorCQkJUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCwKKwkJCXBhcnNlX29wdF93aXRoX2NvbW1pdCwgKGludHB0cl90KSJIRUFEIiwKKwkJfSwKKwkJeworCQkJT1BUSU9OX0NBTExCQUNLLCAwLCAid2l0aCIsICZ3aXRoX2NvbW1pdCwgTl8oImNvbW1pdCIpLAorCQkJTl8oInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiKSwKKwkJCVBBUlNFX09QVF9ISURERU4gfCBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxULAorCQkJcGFyc2Vfb3B0X3dpdGhfY29tbWl0LCAoaW50cHRyX3QpICJIRUFEIiwKKwkJfSwKKwkJT1BUX19BQkJSRVYoJmFiYnJldiksCisKKwkJT1BUX0dST1VQKE5fKCJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IikpLAorCQlPUFRfU0VUX0lOVCgnYScsICJhbGwiLCAma2luZHMsIE5fKCJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIpLAorCQkJUkVGX1JFTU9URV9CUkFOQ0ggfCBSRUZfTE9DQUxfQlJBTkNIKSwKKwkJT1BUX0JJVCgnZCcsICJkZWxldGUiLCAmZGVsZXRlLCBOXygiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giKSwgMSksCisJCU9QVF9CSVQoJ0QnLCBOVUxMLCAmZGVsZXRlLCBOXygiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIpLCAyKSwKKwkJT1BUX0JJVCgnbScsICJtb3ZlIiwgJnJlbmFtZSwgTl8oIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIiksIDEpLAorCQlPUFRfQklUKCdNJywgTlVMTCwgJnJlbmFtZSwgTl8oIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiKSwgMiksCisJCU9QVF9CT09MRUFOKDAsICJsaXN0IiwgJmxpc3QsIE5fKCJsaXN0IGJyYW5jaCBuYW1lcyIpKSwKKwkJT1BUX0JPT0xFQU4oJ2wnLCAiY3JlYXRlLXJlZmxvZyIsICZyZWZsb2csIE5fKCJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImVkaXQtZGVzY3JpcHRpb24iLCAmZWRpdF9kZXNjcmlwdGlvbiwKKwkJCSAgICBOXygiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlX2NyZWF0ZSwgTl8oImZvcmNlIGNyZWF0aW9uICh3aGVuIGFscmVhZHkgZXhpc3RzKSIpKSwKKwkJeworCQkJT1BUSU9OX0NBTExCQUNLLCAwLCAibm8tbWVyZ2VkIiwgJm1lcmdlX2ZpbHRlcl9yZWYsCisJCQlOXygiY29tbWl0IiksIE5fKCJwcmludCBvbmx5IG5vdCBtZXJnZWQgYnJhbmNoZXMiKSwKKwkJCVBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQlvcHRfcGFyc2VfbWVyZ2VfZmlsdGVyLCAoaW50cHRyX3QpICJIRUFEIiwKKwkJfSwKKwkJeworCQkJT1BUSU9OX0NBTExCQUNLLCAwLCAibWVyZ2VkIiwgJm1lcmdlX2ZpbHRlcl9yZWYsCisJCQlOXygiY29tbWl0IiksIE5fKCJwcmludCBvbmx5IG1lcmdlZCBicmFuY2hlcyIpLAorCQkJUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCB8IFBBUlNFX09QVF9OT05FRywKKwkJCW9wdF9wYXJzZV9tZXJnZV9maWx0ZXIsIChpbnRwdHJfdCkgIkhFQUQiLAorCQl9LAorCQlPUFRfQ09MVU1OKDAsICJjb2x1bW4iLCAmY29sb3B0cywgTl8oImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2JyYW5jaF91c2FnZSwgb3B0aW9ucyk7CisKKwlnaXRfY29uZmlnKGdpdF9icmFuY2hfY29uZmlnLCBOVUxMKTsKKworCXRyYWNrID0gZ2l0X2JyYW5jaF90cmFjazsKKworCWhlYWQgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIGhlYWRfc2hhMSwgMCwgTlVMTCk7CisJaWYgKCFoZWFkKQorCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iKSk7CisJaWYgKCFzdHJjbXAoaGVhZCwgIkhFQUQiKSkgeworCQlkZXRhY2hlZCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKHByZWZpeGNtcChoZWFkLCAicmVmcy9oZWFkcy8iKSkKKwkJCWRpZShfKCJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIpKTsKKwkJaGVhZCArPSAxMTsKKwl9CisJaGFzaGNweShtZXJnZV9maWx0ZXJfcmVmLCBoZWFkX3NoYTEpOworCisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fYnJhbmNoX3VzYWdlLAorCQkJICAgICAwKTsKKworCWlmICghZGVsZXRlICYmICFyZW5hbWUgJiYgIWVkaXRfZGVzY3JpcHRpb24gJiYgIW5ld191cHN0cmVhbSAmJiAhdW5zZXRfdXBzdHJlYW0gJiYgYXJnYyA9PSAwKQorCQlsaXN0ID0gMTsKKworCWlmICghIWRlbGV0ZSArICEhcmVuYW1lICsgISFmb3JjZV9jcmVhdGUgKyAhIWxpc3QgKyAhIW5ld191cHN0cmVhbSArICEhdW5zZXRfdXBzdHJlYW0gPiAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9icmFuY2hfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKGFiYnJldiA9PSAtMSkKKwkJYWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisJZmluYWxpemVfY29sb3B0cygmY29sb3B0cywgLTEpOworCWlmICh2ZXJib3NlKSB7CisJCWlmIChleHBsaWNpdGx5X2VuYWJsZV9jb2x1bW4oY29sb3B0cykpCisJCQlkaWUoXygiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIikpOworCQljb2xvcHRzID0gMDsKKwl9CisKKwlpZiAoZGVsZXRlKQorCQlyZXR1cm4gZGVsZXRlX2JyYW5jaGVzKGFyZ2MsIGFyZ3YsIGRlbGV0ZSA+IDEsIGtpbmRzLCBxdWlldCk7CisJZWxzZSBpZiAobGlzdCkgeworCQlpbnQgcmV0ID0gcHJpbnRfcmVmX2xpc3Qoa2luZHMsIGRldGFjaGVkLCB2ZXJib3NlLCBhYmJyZXYsCisJCQkJCSB3aXRoX2NvbW1pdCwgYXJndik7CisJCXByaW50X2NvbHVtbnMoJm91dHB1dCwgY29sb3B0cywgTlVMTCk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZvdXRwdXQsIDApOworCQlyZXR1cm4gcmV0OworCX0KKwllbHNlIGlmIChlZGl0X2Rlc2NyaXB0aW9uKSB7CisJCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lOworCQlzdHJ1Y3Qgc3RyYnVmIGJyYW5jaF9yZWYgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoZGV0YWNoZWQpCisJCQlkaWUoIkNhbm5vdCBnaXZlIGRlc2NyaXB0aW9uIHRvIGRldGFjaGVkIEhFQUQiKTsKKwkJaWYgKCFhcmdjKQorCQkJYnJhbmNoX25hbWUgPSBoZWFkOworCQllbHNlIGlmIChhcmdjID09IDEpCisJCQlicmFuY2hfbmFtZSA9IGFyZ3ZbMF07CisJCWVsc2UKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2JyYW5jaF91c2FnZSwgb3B0aW9ucyk7CisKKwkJc3RyYnVmX2FkZGYoJmJyYW5jaF9yZWYsICJyZWZzL2hlYWRzLyVzIiwgYnJhbmNoX25hbWUpOworCQlpZiAoIXJlZl9leGlzdHMoYnJhbmNoX3JlZi5idWYpKSB7CisJCQlzdHJidWZfcmVsZWFzZSgmYnJhbmNoX3JlZik7CisKKwkJCWlmICghYXJnYykKKwkJCQlyZXR1cm4gZXJyb3IoIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIiwKKwkJCQkJICAgICBicmFuY2hfbmFtZSk7CisJCQllbHNlCisJCQkJcmV0dXJuIGVycm9yKCJObyBzdWNoIGJyYW5jaCAnJXMnLiIsIGJyYW5jaF9uYW1lKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmYnJhbmNoX3JlZik7CisKKwkJaWYgKGVkaXRfYnJhbmNoX2Rlc2NyaXB0aW9uKGJyYW5jaF9uYW1lKSkKKwkJCXJldHVybiAxOworCX0gZWxzZSBpZiAocmVuYW1lKSB7CisJCWlmIChhcmdjID09IDEpCisJCQlyZW5hbWVfYnJhbmNoKGhlYWQsIGFyZ3ZbMF0sIHJlbmFtZSA+IDEpOworCQllbHNlIGlmIChhcmdjID09IDIpCisJCQlyZW5hbWVfYnJhbmNoKGFyZ3ZbMF0sIGFyZ3ZbMV0sIHJlbmFtZSA+IDEpOworCQllbHNlCisJCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9icmFuY2hfdXNhZ2UsIG9wdGlvbnMpOworCX0gZWxzZSBpZiAobmV3X3Vwc3RyZWFtKSB7CisJCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQoYXJndlswXSk7CisKKwkJaWYgKCFyZWZfZXhpc3RzKGJyYW5jaC0+cmVmbmFtZSkpCisJCQlkaWUoXygiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiKSwgYnJhbmNoLT5uYW1lKTsKKworCQkvKgorCQkgKiBjcmVhdGVfYnJhbmNoIHRha2VzIGNhcmUgb2Ygc2V0dGluZyB1cCB0aGUgdHJhY2tpbmcKKwkJICogaW5mbyBhbmQgbWFraW5nIHN1cmUgbmV3X3Vwc3RyZWFtIGlzIGNvcnJlY3QKKwkJICovCisJCWNyZWF0ZV9icmFuY2goaGVhZCwgYnJhbmNoLT5uYW1lLCBuZXdfdXBzdHJlYW0sIDAsIDAsIDAsIHF1aWV0LCBCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUpOworCX0gZWxzZSBpZiAodW5zZXRfdXBzdHJlYW0pIHsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChhcmd2WzBdKTsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoIWJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKGJyYW5jaCkpIHsKKwkJCWRpZShfKCJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iKSwgYnJhbmNoLT5uYW1lKTsKKwkJfQorCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJicmFuY2guJXMucmVtb3RlIiwgYnJhbmNoLT5uYW1lKTsKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgTlVMTCwgTlVMTCwgMSk7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcy5tZXJnZSIsIGJyYW5jaC0+bmFtZSk7CisJCWdpdF9jb25maWdfc2V0X211bHRpdmFyKGJ1Zi5idWYsIE5VTEwsIE5VTEwsIDEpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9IGVsc2UgaWYgKGFyZ2MgPiAwICYmIGFyZ2MgPD0gMikgeworCQlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KGFyZ3ZbMF0pOworCQlpbnQgYnJhbmNoX2V4aXN0ZWQgPSAwLCByZW1vdGVfdHJhY2tpbmcgPSAwOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWlmIChraW5kcyAhPSBSRUZfTE9DQUxfQlJBTkNIKQorCQkJZGllKF8oIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiKSk7CisKKwkJaWYgKHRyYWNrID09IEJSQU5DSF9UUkFDS19PVkVSUklERSkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tdHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG9cbiIpKTsKKworCQlzdHJidWZfYWRkZigmYnVmLCAicmVmcy9yZW1vdGVzLyVzIiwgYnJhbmNoLT5uYW1lKTsKKwkJcmVtb3RlX3RyYWNraW5nID0gcmVmX2V4aXN0cyhidWYuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwkJYnJhbmNoX2V4aXN0ZWQgPSByZWZfZXhpc3RzKGJyYW5jaC0+cmVmbmFtZSk7CisJCWNyZWF0ZV9icmFuY2goaGVhZCwgYXJndlswXSwgKGFyZ2MgPT0gMikgPyBhcmd2WzFdIDogaGVhZCwKKwkJCSAgICAgIGZvcmNlX2NyZWF0ZSwgcmVmbG9nLCAwLCBxdWlldCwgdHJhY2spOworCisJCS8qCisJCSAqIFdlIG9ubHkgc2hvdyB0aGUgaW5zdHJ1Y3Rpb25zIGlmIHRoZSB1c2VyIGdhdmUgdXMKKwkJICogb25lIGJyYW5jaCB3aGljaCBkb2Vzbid0IGV4aXN0IGxvY2FsbHksIGJ1dCBpcyB0aGUKKwkJICogbmFtZSBvZiBhIHJlbW90ZS10cmFja2luZyBicmFuY2guCisJCSAqLworCQlpZiAoYXJnYyA9PSAxICYmIHRyYWNrID09IEJSQU5DSF9UUkFDS19PVkVSUklERSAmJgorCQkgICAgIWJyYW5jaF9leGlzdGVkICYmIHJlbW90ZV90cmFja2luZykgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIlxuSWYgeW91IHdhbnRlZCB0byBtYWtlICclcycgdHJhY2sgJyVzJywgZG8gdGhpczpcblxuIiksIGhlYWQsIGJyYW5jaC0+bmFtZSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIpLCBicmFuY2gtPm5hbWUpOworCQkJZnByaW50ZihzdGRlcnIsIF8oIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iKSwgYnJhbmNoLT5uYW1lKTsKKwkJfQorCisJfSBlbHNlCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2JyYW5jaF91c2FnZSwgb3B0aW9ucyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYnVuZGxlLmMgYi9idWlsdGluL2J1bmRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYThhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2J1bmRsZS5jCkBAIC0wLDAgKzEsNjUgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidW5kbGUuaCIKKworLyoKKyAqIEJhc2ljIGhhbmRsZXIgZm9yIGJ1bmRsZSBmaWxlcyB0byBjb25uZWN0IHJlcG9zaXRvcmllcyB2aWEgc25lYWtlcm5ldC4KKyAqIEludm9jYXRpb24gbXVzdCBpbmNsdWRlIGFjdGlvbi4KKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGNyZWF0ZSBhIGJ1bmRsZSBvciBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGFuIGV4aXN0aW5nCisgKiBidW5kbGUgc3VwcG9ydGluZyAiZmV0Y2giLCAicHVsbCIsIGFuZCAibHMtcmVtb3RlIi4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX2J1bmRsZV91c2FnZVtdID0KKyAgImdpdCBidW5kbGUgY3JlYXRlIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+XG4iCisgICIgICBvcjogZ2l0IGJ1bmRsZSB2ZXJpZnkgPGZpbGU+XG4iCisgICIgICBvcjogZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXVxuIgorICAiICAgb3I6IGdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIjsKKworaW50IGNtZF9idW5kbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOworCWNvbnN0IGNoYXIgKmNtZCwgKmJ1bmRsZV9maWxlOworCWludCBidW5kbGVfZmQgPSAtMTsKKwljaGFyIGJ1ZmZlcltQQVRIX01BWF07CisKKwlpZiAoYXJnYyA8IDMpCisJCXVzYWdlKGJ1aWx0aW5fYnVuZGxlX3VzYWdlKTsKKworCWNtZCA9IGFyZ3ZbMV07CisJYnVuZGxlX2ZpbGUgPSBhcmd2WzJdOworCWFyZ2MgLT0gMjsKKwlhcmd2ICs9IDI7CisKKwlpZiAocHJlZml4ICYmIGJ1bmRsZV9maWxlWzBdICE9ICcvJykgeworCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMvJXMiLCBwcmVmaXgsIGJ1bmRsZV9maWxlKTsKKwkJYnVuZGxlX2ZpbGUgPSBidWZmZXI7CisJfQorCisJbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKKwlpZiAoc3RyY21wKGNtZCwgImNyZWF0ZSIpICYmIChidW5kbGVfZmQgPQorCQkJCXJlYWRfYnVuZGxlX2hlYWRlcihidW5kbGVfZmlsZSwgJmhlYWRlcikpIDwgMCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIXN0cmNtcChjbWQsICJ2ZXJpZnkiKSkgeworCQljbG9zZShidW5kbGVfZmQpOworCQlpZiAodmVyaWZ5X2J1bmRsZSgmaGVhZGVyLCAxKSkKKwkJCXJldHVybiAxOworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXMgaXMgb2theVxuIiksIGJ1bmRsZV9maWxlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGNtZCwgImxpc3QtaGVhZHMiKSkgeworCQljbG9zZShidW5kbGVfZmQpOworCQlyZXR1cm4gISFsaXN0X2J1bmRsZV9yZWZzKCZoZWFkZXIsIGFyZ2MsIGFyZ3YpOworCX0KKwlpZiAoIXN0cmNtcChjbWQsICJjcmVhdGUiKSkgeworCQlpZiAoIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQkJZGllKF8oIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iKSk7CisJCXJldHVybiAhIWNyZWF0ZV9idW5kbGUoJmhlYWRlciwgYnVuZGxlX2ZpbGUsIGFyZ2MsIGFyZ3YpOworCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJ1bmJ1bmRsZSIpKSB7CisJCWlmICghc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCQlkaWUoXygiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIikpOworCQlyZXR1cm4gISF1bmJ1bmRsZSgmaGVhZGVyLCBidW5kbGVfZmQsIDApIHx8CisJCQlsaXN0X2J1bmRsZV9yZWZzKCZoZWFkZXIsIGFyZ2MsIGFyZ3YpOworCX0gZWxzZQorCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NhdC1maWxlLmMgYi9idWlsdGluL2NhdC1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1MjhkZAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2F0LWZpbGUuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKworI2RlZmluZSBCQVRDSCAxCisjZGVmaW5lIEJBVENIX0NIRUNLIDIKKworc3RhdGljIHZvaWQgcHByaW50X3RhZyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwkvKiB0aGUgcGFyc2VyIGluIHRhZy5jIGlzIHVzZWxlc3MgaGVyZS4gKi8KKwljb25zdCBjaGFyICplbmRwID0gYnVmICsgc2l6ZTsKKwljb25zdCBjaGFyICpjcCA9IGJ1ZjsKKworCXdoaWxlIChjcCA8IGVuZHApIHsKKwkJY2hhciBjID0gKmNwKys7CisJCWlmIChjICE9ICdcbicpCisJCQljb250aW51ZTsKKwkJaWYgKDcgPD0gZW5kcCAtIGNwICYmICFtZW1jbXAoInRhZ2dlciAiLCBjcCwgNykpIHsKKwkJCWNvbnN0IGNoYXIgKnRhZ2dlciA9IGNwOworCisJCQkvKiBGb3VuZCB0aGUgdGFnZ2VyIGxpbmUuICBDb3B5IG91dCB0aGUgY29udGVudHMKKwkJCSAqIG9mIHRoZSBidWZmZXIgc28gZmFyLgorCQkJICovCisJCQl3cml0ZV9vcl9kaWUoMSwgYnVmLCBjcCAtIGJ1Zik7CisKKwkJCS8qCisJCQkgKiBEbyBzb21ldGhpbmcgaW50ZWxsaWdlbnQsIGxpa2UgcHJldHR5LXByaW50aW5nCisJCQkgKiB0aGUgZGF0ZS4KKwkJCSAqLworCQkJd2hpbGUgKGNwIDwgZW5kcCkgeworCQkJCWlmICgqY3ArKyA9PSAnXG4nKSB7CisJCQkJCS8qIHRhZ2dlciB0byBjcCBpcyBhIGxpbmUKKwkJCQkJICogdGhhdCBoYXMgaWRlbnQgYW5kIHRpbWUuCisJCQkJCSAqLworCQkJCQljb25zdCBjaGFyICpzcCA9IHRhZ2dlcjsKKwkJCQkJY2hhciAqZXA7CisJCQkJCXVuc2lnbmVkIGxvbmcgZGF0ZTsKKwkJCQkJbG9uZyB0ejsKKwkJCQkJd2hpbGUgKHNwIDwgY3AgJiYgKnNwICE9ICc+JykKKwkJCQkJCXNwKys7CisJCQkJCWlmIChzcCA9PSBjcCkgeworCQkJCQkJLyogZ2l2ZSB1cCAqLworCQkJCQkJd3JpdGVfb3JfZGllKDEsIHRhZ2dlciwKKwkJCQkJCQkgICAgIGNwIC0gdGFnZ2VyKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCXdoaWxlIChzcCA8IGNwICYmCisJCQkJCSAgICAgICAhKCcwJyA8PSAqc3AgJiYgKnNwIDw9ICc5JykpCisJCQkJCQlzcCsrOworCQkJCQl3cml0ZV9vcl9kaWUoMSwgdGFnZ2VyLCBzcCAtIHRhZ2dlcik7CisJCQkJCWRhdGUgPSBzdHJ0b3VsKHNwLCAmZXAsIDEwKTsKKwkJCQkJdHogPSBzdHJ0b2woZXAsIE5VTEwsIDEwKTsKKwkJCQkJc3AgPSBzaG93X2RhdGUoZGF0ZSwgdHosIDApOworCQkJCQl3cml0ZV9vcl9kaWUoMSwgc3AsIHN0cmxlbihzcCkpOworCQkJCQl4d3JpdGUoMSwgIlxuIiwgMSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWlmIChjcCA8IGVuZHAgJiYgKmNwID09ICdcbicpCisJCQkvKiBlbmQgb2YgaGVhZGVyICovCisJCQlicmVhazsKKwl9CisJLyogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBjb3BpZWQgb3V0IHRoZSBoZWFkZXIgdXAgdG8gdGhlIGVuZCBvZgorCSAqIHRoZSB0YWdnZXIgbGluZSBhbmQgY3AgcG9pbnRzIGF0IG9uZSBwYXN0IFxuLiAgSXQgY291bGQgYmUgdGhlCisJICogbmV4dCBoZWFkZXIgbGluZSBhZnRlciB0aGUgdGFnZ2VyIGxpbmUsIG9yIGl0IGNvdWxkIGJlIGFub3RoZXIKKwkgKiBcbiB0aGF0IG1hcmtzIHRoZSBlbmQgb2YgdGhlIGhlYWRlcnMuICBXZSBuZWVkIHRvIGNvcHkgb3V0IHRoZQorCSAqIHJlbWFpbmRlciBhcyBpcy4KKwkgKi8KKwlpZiAoY3AgPCBlbmRwKQorCQl3cml0ZV9vcl9kaWUoMSwgY3AsIGVuZHAgLSBjcCk7Cit9CisKK3N0YXRpYyBpbnQgY2F0X29uZV9maWxlKGludCBvcHQsIGNvbnN0IGNoYXIgKmV4cF90eXBlLCBjb25zdCBjaGFyICpvYmpfbmFtZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBvYmplY3RfY29udGV4dCBvYmpfY29udGV4dDsKKworCWlmIChnZXRfc2hhMV93aXRoX2NvbnRleHQob2JqX25hbWUsIDAsIHNoYTEsICZvYmpfY29udGV4dCkpCisJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBvYmpfbmFtZSk7CisKKwlidWYgPSBOVUxMOworCXN3aXRjaCAob3B0KSB7CisJY2FzZSAndCc6CisJCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOworCQlpZiAodHlwZSA+IDApIHsKKwkJCXByaW50ZigiJXNcbiIsIHR5cGVuYW1lKHR5cGUpKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSAncyc6CisJCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsICZzaXplKTsKKwkJaWYgKHR5cGUgPiAwKSB7CisJCQlwcmludGYoIiVsdVxuIiwgc2l6ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgJ2UnOgorCQlyZXR1cm4gIWhhc19zaGExX2ZpbGUoc2hhMSk7CisKKwljYXNlICdwJzoKKwkJdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJCWlmICh0eXBlIDwgMCkKKwkJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBvYmpfbmFtZSk7CisKKwkJLyogY3VzdG9tIHByZXR0eS1wcmludCBoZXJlICovCisJCWlmICh0eXBlID09IE9CSl9UUkVFKSB7CisJCQljb25zdCBjaGFyICpsc19hcmdzWzNdID0geyBOVUxMIH07CisJCQlsc19hcmdzWzBdID0gICJscy10cmVlIjsKKwkJCWxzX2FyZ3NbMV0gPSAgb2JqX25hbWU7CisJCQlyZXR1cm4gY21kX2xzX3RyZWUoMiwgbHNfYXJncywgTlVMTCk7CisJCX0KKworCQlpZiAodHlwZSA9PSBPQkpfQkxPQikKKwkJCXJldHVybiBzdHJlYW1fYmxvYl90b19mZCgxLCBzaGExLCBOVUxMLCAwKTsKKwkJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFidWYpCisJCQlkaWUoIkNhbm5vdCByZWFkIG9iamVjdCAlcyIsIG9ial9uYW1lKTsKKwkJaWYgKHR5cGUgPT0gT0JKX1RBRykgeworCQkJcHByaW50X3RhZyhzaGExLCBidWYsIHNpemUpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBvdGhlcndpc2UganVzdCBzcGl0IG91dCB0aGUgZGF0YSAqLworCQlicmVhazsKKworCWNhc2UgJ2MnOgorCQlpZiAoIW9ial9jb250ZXh0LnBhdGhbMF0pCisJCQlkaWUoImdpdCBjYXQtZmlsZSAtLXRleHRjb252ICVzOiA8b2JqZWN0PiBtdXN0IGJlIDxzaGExOnBhdGg+IiwKKwkJCSAgICBvYmpfbmFtZSk7CisKKwkJaWYgKCF0ZXh0Y29udl9vYmplY3Qob2JqX2NvbnRleHQucGF0aCwgb2JqX2NvbnRleHQubW9kZSwgc2hhMSwgMSwgJmJ1ZiwgJnNpemUpKQorCQkJZGllKCJnaXQgY2F0LWZpbGUgLS10ZXh0Y29udjogdW5hYmxlIHRvIHJ1biB0ZXh0Y29udiBvbiAlcyIsCisJCQkgICAgb2JqX25hbWUpOworCQlicmVhazsKKworCWNhc2UgMDoKKwkJaWYgKHR5cGVfZnJvbV9zdHJpbmcoZXhwX3R5cGUpID09IE9CSl9CTE9CKSB7CisJCQl1bnNpZ25lZCBjaGFyIGJsb2Jfc2hhMVsyMF07CisJCQlpZiAoc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKSA9PSBPQkpfVEFHKSB7CisJCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJCQljaGFyICpidWZmZXIgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCQkJCWlmIChtZW1jbXAoYnVmZmVyLCAib2JqZWN0ICIsIDcpIHx8CisJCQkJICAgIGdldF9zaGExX2hleChidWZmZXIgKyA3LCBibG9iX3NoYTEpKQorCQkJCQlkaWUoIiVzIG5vdCBhIHZhbGlkIHRhZyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCQlmcmVlKGJ1ZmZlcik7CisJCQl9IGVsc2UKKwkJCQloYXNoY3B5KGJsb2Jfc2hhMSwgc2hhMSk7CisKKwkJCWlmIChzaGExX29iamVjdF9pbmZvKGJsb2Jfc2hhMSwgTlVMTCkgPT0gT0JKX0JMT0IpCisJCQkJcmV0dXJuIHN0cmVhbV9ibG9iX3RvX2ZkKDEsIGJsb2Jfc2hhMSwgTlVMTCwgMCk7CisJCQkvKgorCQkJICogd2UgYXR0ZW1wdGVkIHRvIGRlcmVmZXJlbmNlIGEgdGFnIHRvIGEgYmxvYgorCQkJICogYW5kIGZhaWxlZDsgdGhlcmUgbWF5IGJlIG5ldyBkZXJlZmVyZW5jZQorCQkJICogbWVjaGFuaXNtcyB0aGlzIGNvZGUgaXMgbm90IGF3YXJlIG9mLgorCQkJICogZmFsbC1iYWNrIHRvIHRoZSB1c3VhbCBjYXNlLgorCQkJICovCisJCX0KKwkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgZXhwX3R5cGUsICZzaXplLCBOVUxMKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkaWUoImdpdCBjYXQtZmlsZTogdW5rbm93biBvcHRpb246ICVzIiwgZXhwX3R5cGUpOworCX0KKworCWlmICghYnVmKQorCQlkaWUoImdpdCBjYXQtZmlsZSAlczogYmFkIGZpbGUiLCBvYmpfbmFtZSk7CisKKwl3cml0ZV9vcl9kaWUoMSwgYnVmLCBzaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiYXRjaF9vbmVfb2JqZWN0KGNvbnN0IGNoYXIgKm9ial9uYW1lLCBpbnQgcHJpbnRfY29udGVudHMpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGUgPSAwOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl2b2lkICpjb250ZW50cyA9IGNvbnRlbnRzOworCisJaWYgKCFvYmpfbmFtZSkKKwkgICByZXR1cm4gMTsKKworCWlmIChnZXRfc2hhMShvYmpfbmFtZSwgc2hhMSkpIHsKKwkJcHJpbnRmKCIlcyBtaXNzaW5nXG4iLCBvYmpfbmFtZSk7CisJCWZmbHVzaChzdGRvdXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocHJpbnRfY29udGVudHMgPT0gQkFUQ0gpCisJCWNvbnRlbnRzID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwllbHNlCisJCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsICZzaXplKTsKKworCWlmICh0eXBlIDw9IDApIHsKKwkJcHJpbnRmKCIlcyBtaXNzaW5nXG4iLCBvYmpfbmFtZSk7CisJCWZmbHVzaChzdGRvdXQpOworCQlpZiAocHJpbnRfY29udGVudHMgPT0gQkFUQ0gpCisJCQlmcmVlKGNvbnRlbnRzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpbnRmKCIlcyAlcyAlbHVcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCB0eXBlbmFtZSh0eXBlKSwgc2l6ZSk7CisJZmZsdXNoKHN0ZG91dCk7CisKKwlpZiAocHJpbnRfY29udGVudHMgPT0gQkFUQ0gpIHsKKwkJd3JpdGVfb3JfZGllKDEsIGNvbnRlbnRzLCBzaXplKTsKKwkJcHJpbnRmKCJcbiIpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJZnJlZShjb250ZW50cyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmF0Y2hfb2JqZWN0cyhpbnQgcHJpbnRfY29udGVudHMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbiwgJ1xuJykgIT0gRU9GKSB7CisJCWludCBlcnJvciA9IGJhdGNoX29uZV9vYmplY3QoYnVmLmJ1ZiwgcHJpbnRfY29udGVudHMpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2F0X2ZpbGVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNhdC1maWxlICgtdHwtc3wtZXwtcHw8dHlwZT58LS10ZXh0Y29udikgPG9iamVjdD4iKSwKKwlOXygiZ2l0IGNhdC1maWxlICgtLWJhdGNofC0tYmF0Y2gtY2hlY2spIDwgPGxpc3Rfb2Zfb2JqZWN0cz4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGdpdF9jYXRfZmlsZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKHVzZXJkaWZmX2NvbmZpZyh2YXIsIHZhbHVlKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitpbnQgY21kX2NhdF9maWxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBvcHQgPSAwLCBiYXRjaCA9IDA7CisJY29uc3QgY2hhciAqZXhwX3R5cGUgPSBOVUxMLCAqb2JqX25hbWUgPSBOVUxMOworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9HUk9VUChOXygiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIikpLAorCQlPUFRfU0VUX0lOVCgndCcsIE5VTEwsICZvcHQsIE5fKCJzaG93IG9iamVjdCB0eXBlIiksICd0JyksCisJCU9QVF9TRVRfSU5UKCdzJywgTlVMTCwgJm9wdCwgTl8oInNob3cgb2JqZWN0IHNpemUiKSwgJ3MnKSwKKwkJT1BUX1NFVF9JTlQoJ2UnLCBOVUxMLCAmb3B0LAorCQkJICAgIE5fKCJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiKSwgJ2UnKSwKKwkJT1BUX1NFVF9JTlQoJ3AnLCBOVUxMLCAmb3B0LCBOXygicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiKSwgJ3AnKSwKKwkJT1BUX1NFVF9JTlQoMCwgInRleHRjb252IiwgJm9wdCwKKwkJCSAgICBOXygiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiKSwgJ2MnKSwKKwkJT1BUX1NFVF9JTlQoMCwgImJhdGNoIiwgJmJhdGNoLAorCQkJICAgIE5fKCJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiKSwKKwkJCSAgICBCQVRDSCksCisJCU9QVF9TRVRfSU5UKDAsICJiYXRjaC1jaGVjayIsICZiYXRjaCwKKwkJCSAgICBOXygic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IiksCisJCQkgICAgQkFUQ0hfQ0hFQ0spLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfY2F0X2ZpbGVfY29uZmlnLCBOVUxMKTsKKworCWlmIChhcmdjICE9IDMgJiYgYXJnYyAhPSAyKQorCQl1c2FnZV93aXRoX29wdGlvbnMoY2F0X2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBjYXRfZmlsZV91c2FnZSwgMCk7CisKKwlpZiAob3B0KSB7CisJCWlmIChhcmdjID09IDEpCisJCQlvYmpfbmFtZSA9IGFyZ3ZbMF07CisJCWVsc2UKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCWlmICghb3B0ICYmICFiYXRjaCkgeworCQlpZiAoYXJnYyA9PSAyKSB7CisJCQlleHBfdHlwZSA9IGFyZ3ZbMF07CisJCQlvYmpfbmFtZSA9IGFyZ3ZbMV07CisJCX0gZWxzZQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNhdF9maWxlX3VzYWdlLCBvcHRpb25zKTsKKwl9CisJaWYgKGJhdGNoICYmIChvcHQgfHwgYXJnYykpIHsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNhdF9maWxlX3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwlpZiAoYmF0Y2gpCisJCXJldHVybiBiYXRjaF9vYmplY3RzKGJhdGNoKTsKKworCXJldHVybiBjYXRfb25lX2ZpbGUob3B0LCBleHBfdHlwZSwgb2JqX25hbWUpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jaGVjay1hdHRyLmMgYi9idWlsdGluL2NoZWNrLWF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzVkMDFkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jaGVjay1hdHRyLmMKQEAgLTAsMCArMSwxNzUgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBpbnQgYWxsX2F0dHJzOworc3RhdGljIGludCBjYWNoZWRfYXR0cnM7CitzdGF0aWMgaW50IHN0ZGluX3BhdGhzOworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaGVja19hdHRyX3VzYWdlW10gPSB7CitOXygiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCBhdHRyLi4uXSBbLS1dIHBhdGhuYW1lLi4uIiksCitOXygiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgYXR0ci4uLl0gPCA8bGlzdC1vZi1wYXRocz4iKSwKK05VTEwKK307CisKK3N0YXRpYyBpbnQgbnVsbF90ZXJtX2xpbmU7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGNoZWNrX2F0dHJfb3B0aW9uc1tdID0geworCU9QVF9CT09MRUFOKCdhJywgImFsbCIsICZhbGxfYXR0cnMsIE5fKCJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiKSksCisJT1BUX0JPT0xFQU4oMCwgICJjYWNoZWQiLCAmY2FjaGVkX2F0dHJzLCBOXygidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiKSksCisJT1BUX0JPT0xFQU4oMCAsICJzdGRpbiIsICZzdGRpbl9wYXRocywgTl8oInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIikpLAorCU9QVF9CT09MRUFOKCd6JywgTlVMTCwgJm51bGxfdGVybV9saW5lLAorCQlOXygiaW5wdXQgcGF0aHMgYXJlIHRlcm1pbmF0ZWQgYnkgYSBudWxsIGNoYXJhY3RlciIpKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyB2b2lkIG91dHB1dF9hdHRyKGludCBjbnQsIHN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2ssCisJY29uc3QgY2hhciAqZmlsZSkKK3sKKwlpbnQgajsKKwlmb3IgKGogPSAwOyBqIDwgY250OyBqKyspIHsKKwkJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVja1tqXS52YWx1ZTsKKworCQlpZiAoQVRUUl9UUlVFKHZhbHVlKSkKKwkJCXZhbHVlID0gInNldCI7CisJCWVsc2UgaWYgKEFUVFJfRkFMU0UodmFsdWUpKQorCQkJdmFsdWUgPSAidW5zZXQiOworCQllbHNlIGlmIChBVFRSX1VOU0VUKHZhbHVlKSkKKwkJCXZhbHVlID0gInVuc3BlY2lmaWVkIjsKKworCQlxdW90ZV9jX3N0eWxlKGZpbGUsIE5VTEwsIHN0ZG91dCwgMCk7CisJCXByaW50ZigiOiAlczogJXNcbiIsIGdpdF9hdHRyX25hbWUoY2hlY2tbal0uYXR0ciksIHZhbHVlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2F0dHIoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgY250LAorCXN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2ssIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJY2hhciAqZnVsbF9wYXRoID0KKwkJcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDAsIGZpbGUpOworCWlmIChjaGVjayAhPSBOVUxMKSB7CisJCWlmIChnaXRfY2hlY2tfYXR0cihmdWxsX3BhdGgsIGNudCwgY2hlY2spKQorCQkJZGllKCJnaXRfY2hlY2tfYXR0ciBkaWVkIik7CisJCW91dHB1dF9hdHRyKGNudCwgY2hlY2ssIGZpbGUpOworCX0gZWxzZSB7CisJCWlmIChnaXRfYWxsX2F0dHJzKGZ1bGxfcGF0aCwgJmNudCwgJmNoZWNrKSkKKwkJCWRpZSgiZ2l0X2FsbF9hdHRycyBkaWVkIik7CisJCW91dHB1dF9hdHRyKGNudCwgY2hlY2ssIGZpbGUpOworCQlmcmVlKGNoZWNrKTsKKwl9CisJZnJlZShmdWxsX3BhdGgpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19hdHRyX3N0ZGluX3BhdGhzKGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGNudCwKKwlzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrKQoreworCXN0cnVjdCBzdHJidWYgYnVmLCBuYnVmOworCWludCBsaW5lX3Rlcm1pbmF0aW9uID0gbnVsbF90ZXJtX2xpbmUgPyAwIDogJ1xuJzsKKworCXN0cmJ1Zl9pbml0KCZidWYsIDApOworCXN0cmJ1Zl9pbml0KCZuYnVmLCAwKTsKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sIGxpbmVfdGVybWluYXRpb24pICE9IEVPRikgeworCQlpZiAobGluZV90ZXJtaW5hdGlvbiAmJiBidWYuYnVmWzBdID09ICciJykgeworCQkJc3RyYnVmX3Jlc2V0KCZuYnVmKTsKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJm5idWYsIGJ1Zi5idWYsIE5VTEwpKQorCQkJCWRpZSgibGluZSBpcyBiYWRseSBxdW90ZWQiKTsKKwkJCXN0cmJ1Zl9zd2FwKCZidWYsICZuYnVmKTsKKwkJfQorCQljaGVja19hdHRyKHByZWZpeCwgY250LCBjaGVjaywgYnVmLmJ1Zik7CisJCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJhdHRyaWJ1dGUgdG8gc3Rkb3V0Iik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYnVmKTsKK30KKworc3RhdGljIE5PUkVUVVJOIHZvaWQgZXJyb3Jfd2l0aF91c2FnZShjb25zdCBjaGFyICptc2cpCit7CisJZXJyb3IoIiVzIiwgbXNnKTsKKwl1c2FnZV93aXRoX29wdGlvbnMoY2hlY2tfYXR0cl91c2FnZSwgY2hlY2tfYXR0cl9vcHRpb25zKTsKK30KKworaW50IGNtZF9jaGVja19hdHRyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2s7CisJaW50IGNudCwgaSwgZG91YmxlZGFzaCwgZmlsZWk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGNoZWNrX2F0dHJfb3B0aW9ucywKKwkJCSAgICAgY2hlY2tfYXR0cl91c2FnZSwgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApIHsKKwkJZGllKCJpbnZhbGlkIGNhY2hlIik7CisJfQorCisJaWYgKGNhY2hlZF9hdHRycykKKwkJZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihHSVRfQVRUUl9JTkRFWCwgTlVMTCk7CisKKwlkb3VibGVkYXNoID0gLTE7CisJZm9yIChpID0gMDsgZG91YmxlZGFzaCA8IDAgJiYgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkKKwkJCWRvdWJsZWRhc2ggPSBpOworCX0KKworCS8qIFByb2Nlc3MgLS1hbGwgYW5kL29yIGF0dHJpYnV0ZSBhcmd1bWVudHM6ICovCisJaWYgKGFsbF9hdHRycykgeworCQlpZiAoZG91YmxlZGFzaCA+PSAxKQorCQkJZXJyb3Jfd2l0aF91c2FnZSgiQXR0cmlidXRlcyBhbmQgLS1hbGwgYm90aCBzcGVjaWZpZWQiKTsKKworCQljbnQgPSAwOworCQlmaWxlaSA9IGRvdWJsZWRhc2ggKyAxOworCX0gZWxzZSBpZiAoZG91YmxlZGFzaCA9PSAwKSB7CisJCWVycm9yX3dpdGhfdXNhZ2UoIk5vIGF0dHJpYnV0ZSBzcGVjaWZpZWQiKTsKKwl9IGVsc2UgaWYgKGRvdWJsZWRhc2ggPCAwKSB7CisJCWlmICghYXJnYykKKwkJCWVycm9yX3dpdGhfdXNhZ2UoIk5vIGF0dHJpYnV0ZSBzcGVjaWZpZWQiKTsKKworCQlpZiAoc3RkaW5fcGF0aHMpIHsKKwkJCS8qIFRyZWF0IGFsbCBhcmd1bWVudHMgYXMgYXR0cmlidXRlIG5hbWVzLiAqLworCQkJY250ID0gYXJnYzsKKwkJCWZpbGVpID0gYXJnYzsKKwkJfSBlbHNlIHsKKwkJCS8qIFRyZWF0IGV4YWN0bHkgb25lIGFyZ3VtZW50IGFzIGFuIGF0dHJpYnV0ZSBuYW1lLiAqLworCQkJY250ID0gMTsKKwkJCWZpbGVpID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWNudCA9IGRvdWJsZWRhc2g7CisJCWZpbGVpID0gZG91YmxlZGFzaCArIDE7CisJfQorCisJLyogQ2hlY2sgZmlsZSBhcmd1bWVudChzKTogKi8KKwlpZiAoc3RkaW5fcGF0aHMpIHsKKwkJaWYgKGZpbGVpIDwgYXJnYykKKwkJCWVycm9yX3dpdGhfdXNhZ2UoIkNhbid0IHNwZWNpZnkgZmlsZXMgd2l0aCAtLXN0ZGluIik7CisJfSBlbHNlIHsKKwkJaWYgKGZpbGVpID49IGFyZ2MpCisJCQllcnJvcl93aXRoX3VzYWdlKCJObyBmaWxlIHNwZWNpZmllZCIpOworCX0KKworCWlmIChhbGxfYXR0cnMpIHsKKwkJY2hlY2sgPSBOVUxMOworCX0gZWxzZSB7CisJCWNoZWNrID0geGNhbGxvYyhjbnQsIHNpemVvZigqY2hlY2spKTsKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQljb25zdCBjaGFyICpuYW1lOworCQkJc3RydWN0IGdpdF9hdHRyICphOworCQkJbmFtZSA9IGFyZ3ZbaV07CisJCQlhID0gZ2l0X2F0dHIobmFtZSk7CisJCQlpZiAoIWEpCisJCQkJcmV0dXJuIGVycm9yKCIlczogbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiLAorCQkJCQluYW1lKTsKKwkJCWNoZWNrW2ldLmF0dHIgPSBhOworCQl9CisJfQorCisJaWYgKHN0ZGluX3BhdGhzKQorCQljaGVja19hdHRyX3N0ZGluX3BhdGhzKHByZWZpeCwgY250LCBjaGVjayk7CisJZWxzZSB7CisJCWZvciAoaSA9IGZpbGVpOyBpIDwgYXJnYzsgaSsrKQorCQkJY2hlY2tfYXR0cihwcmVmaXgsIGNudCwgY2hlY2ssIGFyZ3ZbaV0pOworCQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAiYXR0cmlidXRlIHRvIHN0ZG91dCIpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2hlY2stcmVmLWZvcm1hdC5jIGIvYnVpbHRpbi9jaGVjay1yZWYtZm9ybWF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhNzMyMAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2hlY2stcmVmLWZvcm1hdC5jCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX2NoZWNrX3JlZl9mb3JtYXRfdXNhZ2VbXSA9CisiZ2l0IGNoZWNrLXJlZi1mb3JtYXQgWy0tbm9ybWFsaXplXSBbb3B0aW9uc10gPHJlZm5hbWU+XG4iCisiICAgb3I6IGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIDxicmFuY2huYW1lLXNob3J0aGFuZD4iOworCisvKgorICogUmV0dXJuIGEgY29weSBvZiByZWZuYW1lIGJ1dCB3aXRoIGxlYWRpbmcgc2xhc2hlcyByZW1vdmVkIGFuZCBydW5zCisgKiBvZiBhZGphY2VudCBzbGFzaGVzIHJlcGxhY2VkIHdpdGggc2luZ2xlIHNsYXNoZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIG5vcm1hbGl6ZV9wYXRoX2NvcHkoKSwgYnV0IHN0cmlwcGVkIGRvd24KKyAqIHRvIG1lZXQgY2hlY2tfcmVmX2Zvcm1hdCdzIHNpbXBsZXIgbmVlZHMuCisgKi8KK3N0YXRpYyBjaGFyICpjb2xsYXBzZV9zbGFzaGVzKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJY2hhciAqcmV0ID0geG1hbGxvYyhzdHJsZW4ocmVmbmFtZSkgKyAxKTsKKwljaGFyIGNoOworCWNoYXIgcHJldiA9ICcvJzsKKwljaGFyICpjcCA9IHJldDsKKworCXdoaWxlICgoY2ggPSAqcmVmbmFtZSsrKSAhPSAnXDAnKSB7CisJCWlmIChwcmV2ID09ICcvJyAmJiBjaCA9PSBwcmV2KQorCQkJY29udGludWU7CisKKwkJKmNwKysgPSBjaDsKKwkJcHJldiA9IGNoOworCX0KKwkqY3AgPSAnXDAnOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVmX2Zvcm1hdF9icmFuY2goY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgbm9uZ2l0OworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7CisJaWYgKHN0cmJ1Zl9jaGVja19icmFuY2hfcmVmKCZzYiwgYXJnKSkKKwkJZGllKCInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lIiwgYXJnKTsKKwlwcmludGYoIiVzXG4iLCBzYi5idWYgKyAxMSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfY2hlY2tfcmVmX2Zvcm1hdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlpbnQgbm9ybWFsaXplID0gMDsKKwlpbnQgZmxhZ3MgPSAwOworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKGJ1aWx0aW5fY2hlY2tfcmVmX2Zvcm1hdF91c2FnZSk7CisKKwlpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgIi0tYnJhbmNoIikpCisJCXJldHVybiBjaGVja19yZWZfZm9ybWF0X2JyYW5jaChhcmd2WzJdKTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjICYmIGFyZ3ZbaV1bMF0gPT0gJy0nOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm9ybWFsaXplIikgfHwgIXN0cmNtcChhcmd2W2ldLCAiLS1wcmludCIpKQorCQkJbm9ybWFsaXplID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1hbGxvdy1vbmVsZXZlbCIpKQorCQkJZmxhZ3MgfD0gUkVGTkFNRV9BTExPV19PTkVMRVZFTDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1uby1hbGxvdy1vbmVsZXZlbCIpKQorCQkJZmxhZ3MgJj0gflJFRk5BTUVfQUxMT1dfT05FTEVWRUw7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tcmVmc3BlYy1wYXR0ZXJuIikpCisJCQlmbGFncyB8PSBSRUZOQU1FX1JFRlNQRUNfUEFUVEVSTjsKKwkJZWxzZQorCQkJdXNhZ2UoYnVpbHRpbl9jaGVja19yZWZfZm9ybWF0X3VzYWdlKTsKKwl9CisJaWYgKCEgKGkgPT0gYXJnYyAtIDEpKQorCQl1c2FnZShidWlsdGluX2NoZWNrX3JlZl9mb3JtYXRfdXNhZ2UpOworCisJcmVmbmFtZSA9IGFyZ3ZbaV07CisJaWYgKG5vcm1hbGl6ZSkKKwkJcmVmbmFtZSA9IGNvbGxhcHNlX3NsYXNoZXMocmVmbmFtZSk7CisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZm5hbWUsIGZsYWdzKSkKKwkJcmV0dXJuIDE7CisJaWYgKG5vcm1hbGl6ZSkKKwkJcHJpbnRmKCIlc1xuIiwgcmVmbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2hlY2tvdXQtaW5kZXguYyBiL2J1aWx0aW4vY2hlY2tvdXQtaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWZlZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jaGVja291dC1pbmRleC5jCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogQ2hlY2stb3V0IGZpbGVzIGZyb20gdGhlICJjdXJyZW50IGNhY2hlIGRpcmVjdG9yeSIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTGludXMgVG9ydmFsZHMKKyAqCisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKKyNkZWZpbmUgQ0hFQ0tPVVRfQUxMIDQKK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CitzdGF0aWMgaW50IGNoZWNrb3V0X3N0YWdlOyAvKiBkZWZhdWx0IHRvIGNoZWNrb3V0IHN0YWdlMCAqLworc3RhdGljIGludCB0b190ZW1wZmlsZTsKK3N0YXRpYyBjaGFyIHRvcGF0aFs0XVtQQVRIX01BWCArIDFdOworCitzdGF0aWMgc3RydWN0IGNoZWNrb3V0IHN0YXRlOworCitzdGF0aWMgdm9pZCB3cml0ZV90ZW1wZmlsZV9yZWNvcmQoY29uc3QgY2hhciAqbmFtZSwgaW50IHByZWZpeF9sZW5ndGgpCit7CisJaW50IGk7CisKKwlpZiAoQ0hFQ0tPVVRfQUxMID09IGNoZWNrb3V0X3N0YWdlKSB7CisJCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKKwkJCWlmIChpID4gMSkKKwkJCQlwdXRjaGFyKCcgJyk7CisJCQlpZiAodG9wYXRoW2ldWzBdKQorCQkJCWZwdXRzKHRvcGF0aFtpXSwgc3Rkb3V0KTsKKwkJCWVsc2UKKwkJCQlwdXRjaGFyKCcuJyk7CisJCX0KKwl9IGVsc2UKKwkJZnB1dHModG9wYXRoW2NoZWNrb3V0X3N0YWdlXSwgc3Rkb3V0KTsKKworCXB1dGNoYXIoJ1x0Jyk7CisJd3JpdGVfbmFtZV9xdW90ZWQobmFtZSArIHByZWZpeF9sZW5ndGgsIHN0ZG91dCwgbGluZV90ZXJtaW5hdGlvbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXRvcGF0aFtpXVswXSA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgaW50IHByZWZpeF9sZW5ndGgpCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKG5hbWUsIG5hbWVsZW4pOworCWludCBoYXNfc2FtZV9uYW1lID0gMDsKKwlpbnQgZGlkX2NoZWNrb3V0ID0gMDsKKwlpbnQgZXJycyA9IDA7CisKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLXBvcyAtIDE7CisKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKGNlX25hbWVsZW4oY2UpICE9IG5hbWVsZW4gfHwKKwkJICAgIG1lbWNtcChjZS0+bmFtZSwgbmFtZSwgbmFtZWxlbikpCisJCQlicmVhazsKKwkJaGFzX3NhbWVfbmFtZSA9IDE7CisJCXBvcysrOworCQlpZiAoY2Vfc3RhZ2UoY2UpICE9IGNoZWNrb3V0X3N0YWdlCisJCSAgICAmJiAoQ0hFQ0tPVVRfQUxMICE9IGNoZWNrb3V0X3N0YWdlIHx8ICFjZV9zdGFnZShjZSkpKQorCQkJY29udGludWU7CisJCWRpZF9jaGVja291dCA9IDE7CisJCWlmIChjaGVja291dF9lbnRyeShjZSwgJnN0YXRlLAorCQkgICAgdG9fdGVtcGZpbGUgPyB0b3BhdGhbY2Vfc3RhZ2UoY2UpXSA6IE5VTEwpIDwgMCkKKwkJCWVycnMrKzsKKwl9CisKKwlpZiAoZGlkX2NoZWNrb3V0KSB7CisJCWlmICh0b190ZW1wZmlsZSkKKwkJCXdyaXRlX3RlbXBmaWxlX3JlY29yZChuYW1lLCBwcmVmaXhfbGVuZ3RoKTsKKwkJcmV0dXJuIGVycnMgPiAwID8gLTEgOiAwOworCX0KKworCWlmICghc3RhdGUucXVpZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJnaXQgY2hlY2tvdXQtaW5kZXg6ICVzICIsIG5hbWUpOworCQlpZiAoIWhhc19zYW1lX25hbWUpCisJCQlmcHJpbnRmKHN0ZGVyciwgImlzIG5vdCBpbiB0aGUgY2FjaGUiKTsKKwkJZWxzZSBpZiAoY2hlY2tvdXRfc3RhZ2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgImRvZXMgbm90IGV4aXN0IGF0IHN0YWdlICVkIiwKKwkJCQljaGVja291dF9zdGFnZSk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiaXMgdW5tZXJnZWQiKTsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBjaGVja291dF9hbGwoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbmd0aCkKK3sKKwlpbnQgaSwgZXJycyA9IDA7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpsYXN0X2NlID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnIgOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJaWYgKGNlX3N0YWdlKGNlKSAhPSBjaGVja291dF9zdGFnZQorCQkgICAgJiYgKENIRUNLT1VUX0FMTCAhPSBjaGVja291dF9zdGFnZSB8fCAhY2Vfc3RhZ2UoY2UpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJlZml4ICYmICpwcmVmaXggJiYKKwkJICAgIChjZV9uYW1lbGVuKGNlKSA8PSBwcmVmaXhfbGVuZ3RoIHx8CisJCSAgICAgbWVtY21wKHByZWZpeCwgY2UtPm5hbWUsIHByZWZpeF9sZW5ndGgpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobGFzdF9jZSAmJiB0b190ZW1wZmlsZSkgeworCQkJaWYgKGNlX25hbWVsZW4obGFzdF9jZSkgIT0gY2VfbmFtZWxlbihjZSkKKwkJCSAgICB8fCBtZW1jbXAobGFzdF9jZS0+bmFtZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSkKKwkJCQl3cml0ZV90ZW1wZmlsZV9yZWNvcmQobGFzdF9jZS0+bmFtZSwgcHJlZml4X2xlbmd0aCk7CisJCX0KKwkJaWYgKGNoZWNrb3V0X2VudHJ5KGNlLCAmc3RhdGUsCisJCSAgICB0b190ZW1wZmlsZSA/IHRvcGF0aFtjZV9zdGFnZShjZSldIDogTlVMTCkgPCAwKQorCQkJZXJycysrOworCQlsYXN0X2NlID0gY2U7CisJfQorCWlmIChsYXN0X2NlICYmIHRvX3RlbXBmaWxlKQorCQl3cml0ZV90ZW1wZmlsZV9yZWNvcmQobGFzdF9jZS0+bmFtZSwgcHJlZml4X2xlbmd0aCk7CisJaWYgKGVycnMpCisJCS8qIHdlIGhhdmUgYWxyZWFkeSBkb25lIG91ciBlcnJvciByZXBvcnRpbmcuCisJCSAqIGV4aXQgd2l0aCB0aGUgc2FtZSBjb2RlIGFzIGRpZSgpLgorCQkgKi8KKwkJZXhpdCgxMjgpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY2hlY2tvdXRfaW5kZXhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNoZWNrb3V0LWluZGV4IFtvcHRpb25zXSBbLS1dIFs8ZmlsZT4uLi5dIiksCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlOworCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV91KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqbmV3ZmQgPSBvcHQtPnZhbHVlOworCisJc3RhdGUucmVmcmVzaF9jYWNoZSA9IDE7CisJaWYgKCpuZXdmZCA8IDApCisJCSpuZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV96KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwllbHNlCisJCWxpbmVfdGVybWluYXRpb24gPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9wcmVmaXgoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0YXRlLmJhc2VfZGlyID0gYXJnOworCXN0YXRlLmJhc2VfZGlyX2xlbiA9IHN0cmxlbihhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9zdGFnZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAoIXN0cmNtcChhcmcsICJhbGwiKSkgeworCQl0b190ZW1wZmlsZSA9IDE7CisJCWNoZWNrb3V0X3N0YWdlID0gQ0hFQ0tPVVRfQUxMOworCX0gZWxzZSB7CisJCWludCBjaCA9IGFyZ1swXTsKKwkJaWYgKCcxJyA8PSBjaCAmJiBjaCA8PSAnMycpCisJCQljaGVja291dF9zdGFnZSA9IGFyZ1swXSAtICcwJzsKKwkJZWxzZQorCQkJZGllKCJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9jaGVja291dF9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlpbnQgbmV3ZmQgPSAtMTsKKwlpbnQgYWxsID0gMDsKKwlpbnQgcmVhZF9mcm9tX3N0ZGluID0gMDsKKwlpbnQgcHJlZml4X2xlbmd0aDsKKwlpbnQgZm9yY2UgPSAwLCBxdWlldCA9IDAsIG5vdF9uZXcgPSAwOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9jaGVja291dF9pbmRleF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKCdhJywgImFsbCIsICZhbGwsCisJCQlOXygiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIikpLAorCQlPUFRfX1FVSUVUKCZxdWlldCwKKwkJCU5fKCJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IikpLAorCQlPUFRfQk9PTEVBTignbicsICJuby1jcmVhdGUiLCAmbm90X25ldywKKwkJCU5fKCJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAndScsICJpbmRleCIsICZuZXdmZCwgTlVMTCwKKwkJCU5fKCJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2VfdSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ3onLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTl8oInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIiksCisJCQlQQVJTRV9PUFRfTk9BUkcsIG9wdGlvbl9wYXJzZV96IH0sCisJCU9QVF9CT09MRUFOKDAsICJzdGRpbiIsICZyZWFkX2Zyb21fc3RkaW4sCisJCQlOXygicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IikpLAorCQlPUFRfQk9PTEVBTigwLCAidGVtcCIsICZ0b190ZW1wZmlsZSwKKwkJCU5fKCJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiKSksCisJCU9QVF9DQUxMQkFDSygwLCAicHJlZml4IiwgTlVMTCwgTl8oInN0cmluZyIpLAorCQkJTl8oIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iKSwKKwkJCW9wdGlvbl9wYXJzZV9wcmVmaXgpLAorCQlPUFRfQ0FMTEJBQ0soMCwgInN0YWdlIiwgTlVMTCwgTlVMTCwKKwkJCU5fKCJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIpLAorCQkJb3B0aW9uX3BhcnNlX3N0YWdlKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY2hlY2tvdXRfaW5kZXhfdXNhZ2UsCisJCQkJICAgYnVpbHRpbl9jaGVja291dF9pbmRleF9vcHRpb25zKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJc3RhdGUuYmFzZV9kaXIgPSAiIjsKKwlwcmVmaXhfbGVuZ3RoID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApIHsKKwkJZGllKCJpbnZhbGlkIGNhY2hlIik7CisJfQorCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2NoZWNrb3V0X2luZGV4X29wdGlvbnMsCisJCQlidWlsdGluX2NoZWNrb3V0X2luZGV4X3VzYWdlLCAwKTsKKwlzdGF0ZS5mb3JjZSA9IGZvcmNlOworCXN0YXRlLnF1aWV0ID0gcXVpZXQ7CisJc3RhdGUubm90X25ldyA9IG5vdF9uZXc7CisKKwlpZiAoc3RhdGUuYmFzZV9kaXJfbGVuIHx8IHRvX3RlbXBmaWxlKSB7CisJCS8qIHdoZW4gLS1wcmVmaXggaXMgc3BlY2lmaWVkIHdlIGRvIG5vdAorCQkgKiB3YW50IHRvIHVwZGF0ZSBjYWNoZS4KKwkJICovCisJCWlmIChzdGF0ZS5yZWZyZXNoX2NhY2hlKSB7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisJCQluZXdmZCA9IC0xOworCQl9CisJCXN0YXRlLnJlZnJlc2hfY2FjaGUgPSAwOworCX0KKworCS8qIENoZWNrIG91dCBuYW1lZCBmaWxlcyBmaXJzdCAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJY29uc3QgY2hhciAqcDsKKworCQlpZiAoYWxsKQorCQkJZGllKCJnaXQgY2hlY2tvdXQtaW5kZXg6IGRvbid0IG1peCAnLS1hbGwnIGFuZCBleHBsaWNpdCBmaWxlbmFtZXMiKTsKKwkJaWYgKHJlYWRfZnJvbV9zdGRpbikKKwkJCWRpZSgiZ2l0IGNoZWNrb3V0LWluZGV4OiBkb24ndCBtaXggJy0tc3RkaW4nIGFuZCBleHBsaWNpdCBmaWxlbmFtZXMiKTsKKwkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYXJnKTsKKwkJY2hlY2tvdXRfZmlsZShwLCBwcmVmaXhfbGVuZ3RoKTsKKwkJaWYgKHAgPCBhcmcgfHwgcCA+IGFyZyArIHN0cmxlbihhcmcpKQorCQkJZnJlZSgoY2hhciAqKXApOworCX0KKworCWlmIChyZWFkX2Zyb21fc3RkaW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgbmJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWlmIChhbGwpCisJCQlkaWUoImdpdCBjaGVja291dC1pbmRleDogZG9uJ3QgbWl4ICctLWFsbCcgYW5kICctLXN0ZGluJyIpOworCisJCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbiwgbGluZV90ZXJtaW5hdGlvbikgIT0gRU9GKSB7CisJCQljb25zdCBjaGFyICpwOworCQkJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgYnVmLmJ1ZlswXSA9PSAnIicpIHsKKwkJCQlzdHJidWZfcmVzZXQoJm5idWYpOworCQkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJm5idWYsIGJ1Zi5idWYsIE5VTEwpKQorCQkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQkJc3RyYnVmX3N3YXAoJmJ1ZiwgJm5idWYpOworCQkJfQorCQkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYnVmLmJ1Zik7CisJCQljaGVja291dF9maWxlKHAsIHByZWZpeF9sZW5ndGgpOworCQkJaWYgKHAgPCBidWYuYnVmIHx8IHAgPiBidWYuYnVmICsgYnVmLmxlbikKKwkJCQlmcmVlKChjaGFyICopcCk7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJm5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisKKwlpZiAoYWxsKQorCQljaGVja291dF9hbGwocHJlZml4LCBwcmVmaXhfbGVuZ3RoKTsKKworCWlmICgwIDw9IG5ld2ZkICYmCisJICAgICh3cml0ZV9jYWNoZShuZXdmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJICAgICBjb21taXRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUpKSkKKwkJZGllKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2hlY2tvdXQuYyBiL2J1aWx0aW4vY2hlY2tvdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODEyOTViCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jaGVja291dC5jCkBAIC0wLDAgKzEsMTE0OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgIm1lcmdlLXJlY3Vyc2l2ZS5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaGVja291dF91c2FnZVtdID0geworCU5fKCJnaXQgY2hlY2tvdXQgW29wdGlvbnNdIDxicmFuY2g+IiksCisJTl8oImdpdCBjaGVja291dCBbb3B0aW9uc10gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iKSwKKwlOVUxMLAorfTsKKworc3RydWN0IGNoZWNrb3V0X29wdHMgeworCWludCBwYXRjaF9tb2RlOworCWludCBxdWlldDsKKwlpbnQgbWVyZ2U7CisJaW50IGZvcmNlOworCWludCBmb3JjZV9kZXRhY2g7CisJaW50IHdyaXRlb3V0X3N0YWdlOworCWludCBvdmVyd3JpdGVfaWdub3JlOworCisJY29uc3QgY2hhciAqbmV3X2JyYW5jaDsKKwljb25zdCBjaGFyICpuZXdfYnJhbmNoX2ZvcmNlOworCWNvbnN0IGNoYXIgKm5ld19vcnBoYW5fYnJhbmNoOworCWludCBuZXdfYnJhbmNoX2xvZzsKKwllbnVtIGJyYW5jaF90cmFjayB0cmFjazsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0aW9uczsKKworCWludCBicmFuY2hfZXhpc3RzOworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwljb25zdCBjaGFyICoqcGF0aHNwZWM7CisJc3RydWN0IHRyZWUgKnNvdXJjZV90cmVlOworfTsKKworc3RhdGljIGludCBwb3N0X2NoZWNrb3V0X2hvb2soc3RydWN0IGNvbW1pdCAqb2xkLCBzdHJ1Y3QgY29tbWl0ICpuZXcsCisJCQkgICAgICBpbnQgY2hhbmdlZCkKK3sKKwlyZXR1cm4gcnVuX2hvb2soTlVMTCwgInBvc3QtY2hlY2tvdXQiLAorCQkJc2hhMV90b19oZXgob2xkID8gb2xkLT5vYmplY3Quc2hhMSA6IG51bGxfc2hhMSksCisJCQlzaGExX3RvX2hleChuZXcgPyBuZXctPm9iamVjdC5zaGExIDogbnVsbF9zaGExKSwKKwkJCWNoYW5nZWQgPyAiMSIgOiAiMCIsIE5VTEwpOworCS8qICJuZXciIGNhbiBiZSBOVUxMIHdoZW4gY2hlY2tpbmcgb3V0IGZyb20gdGhlIGluZGV4IGJlZm9yZQorCSAgIGEgY29tbWl0IGV4aXN0cy4gKi8KKworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9zb21lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQljb25zdCBjaGFyICpwYXRobmFtZSwgdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLCB2b2lkICpjb250ZXh0KQoreworCWludCBsZW47CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWlmIChTX0lTRElSKG1vZGUpKQorCQlyZXR1cm4gUkVBRF9UUkVFX1JFQ1VSU0lWRTsKKworCWxlbiA9IGJhc2VsZW4gKyBzdHJsZW4ocGF0aG5hbWUpOworCWNlID0geGNhbGxvYygxLCBjYWNoZV9lbnRyeV9zaXplKGxlbikpOworCWhhc2hjcHkoY2UtPnNoYTEsIHNoYTEpOworCW1lbWNweShjZS0+bmFtZSwgYmFzZSwgYmFzZWxlbik7CisJbWVtY3B5KGNlLT5uYW1lICsgYmFzZWxlbiwgcGF0aG5hbWUsIGxlbiAtIGJhc2VsZW4pOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncygwKSB8IENFX1VQREFURTsKKwljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCWFkZF9jYWNoZV9lbnRyeShjZSwgQUREX0NBQ0hFX09LX1RPX0FERCB8IEFERF9DQUNIRV9PS19UT19SRVBMQUNFKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX3RyZWVfc29tZShzdHJ1Y3QgdHJlZSAqdHJlZSwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQoreworCXN0cnVjdCBwYXRoc3BlYyBwczsKKwlpbml0X3BhdGhzcGVjKCZwcywgcGF0aHNwZWMpOworCXJlYWRfdHJlZV9yZWN1cnNpdmUodHJlZSwgIiIsIDAsIDAsICZwcywgdXBkYXRlX3NvbWUsIE5VTEwpOworCWZyZWVfcGF0aHNwZWMoJnBzKTsKKworCS8qIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUgZ2l2ZW4gdHJlZSdzIGluZm8KKwkgKiBmb3IgYWxsIGFyZ3MsIGV4cGFuZGluZyB3aWxkY2FyZHMsIGFuZCBleGl0CisJICogd2l0aCBhbnkgbm9uLXplcm8gcmV0dXJuIGNvZGUuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2tpcF9zYW1lX25hbWUoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcykKK3sKKwl3aGlsZSAoKytwb3MgPCBhY3RpdmVfbnIgJiYKKwkgICAgICAgIXN0cmNtcChhY3RpdmVfY2FjaGVbcG9zXS0+bmFtZSwgY2UtPm5hbWUpKQorCQk7IC8qIHNraXAgKi8KKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N0YWdlKGludCBzdGFnZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcykKK3sKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yICYmCisJICAgICAgICFzdHJjbXAoYWN0aXZlX2NhY2hlW3Bvc10tPm5hbWUsIGNlLT5uYW1lKSkgeworCQlpZiAoY2Vfc3RhZ2UoYWN0aXZlX2NhY2hlW3Bvc10pID09IHN0YWdlKQorCQkJcmV0dXJuIDA7CisJCXBvcysrOworCX0KKwlpZiAoc3RhZ2UgPT0gMikKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIiksIGNlLT5uYW1lKTsKKwllbHNlCisJCXJldHVybiBlcnJvcihfKCJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIiksIGNlLT5uYW1lKTsKK30KKworc3RhdGljIGludCBjaGVja19zdGFnZXModW5zaWduZWQgc3RhZ2VzLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcG9zKQoreworCXVuc2lnbmVkIHNlZW4gPSAwOworCWNvbnN0IGNoYXIgKm5hbWUgPSBjZS0+bmFtZTsKKworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKHN0cmNtcChuYW1lLCBjZS0+bmFtZSkpCisJCQlicmVhazsKKwkJc2VlbiB8PSAoMSA8PCBjZV9zdGFnZShjZSkpOworCQlwb3MrKzsKKwl9CisJaWYgKChzdGFnZXMgJiBzZWVuKSAhPSBzdGFnZXMpCisJCXJldHVybiBlcnJvcihfKCJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIiksCisJCQkgICAgIG5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X3N0YWdlKGludCBzdGFnZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcywKKwkJCSAgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSkKK3sKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yICYmCisJICAgICAgICFzdHJjbXAoYWN0aXZlX2NhY2hlW3Bvc10tPm5hbWUsIGNlLT5uYW1lKSkgeworCQlpZiAoY2Vfc3RhZ2UoYWN0aXZlX2NhY2hlW3Bvc10pID09IHN0YWdlKQorCQkJcmV0dXJuIGNoZWNrb3V0X2VudHJ5KGFjdGl2ZV9jYWNoZVtwb3NdLCBzdGF0ZSwgTlVMTCk7CisJCXBvcysrOworCX0KKwlpZiAoc3RhZ2UgPT0gMikKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIiksIGNlLT5uYW1lKTsKKwllbHNlCisJCXJldHVybiBlcnJvcihfKCJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIiksIGNlLT5uYW1lKTsKK30KKworc3RhdGljIGludCBjaGVja291dF9tZXJnZWQoaW50IHBvcywgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJY29uc3QgY2hhciAqcGF0aCA9IGNlLT5uYW1lOworCW1tZmlsZV90IGFuY2VzdG9yLCBvdXJzLCB0aGVpcnM7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCW1tYnVmZmVyX3QgcmVzdWx0X2J1ZjsKKwl1bnNpZ25lZCBjaGFyIHRocmVld2F5WzNdWzIwXTsKKwl1bnNpZ25lZCBtb2RlID0gMDsKKworCW1lbXNldCh0aHJlZXdheSwgMCwgc2l6ZW9mKHRocmVld2F5KSk7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQlpbnQgc3RhZ2U7CisJCXN0YWdlID0gY2Vfc3RhZ2UoY2UpOworCQlpZiAoIXN0YWdlIHx8IHN0cmNtcChwYXRoLCBjZS0+bmFtZSkpCisJCQlicmVhazsKKwkJaGFzaGNweSh0aHJlZXdheVtzdGFnZSAtIDFdLCBjZS0+c2hhMSk7CisJCWlmIChzdGFnZSA9PSAyKQorCQkJbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKGNlLT5jZV9tb2RlKTsKKwkJcG9zKys7CisJCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJfQorCWlmIChpc19udWxsX3NoYTEodGhyZWV3YXlbMV0pIHx8IGlzX251bGxfc2hhMSh0aHJlZXdheVsyXSkpCisJCXJldHVybiBlcnJvcihfKCJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiKSwgcGF0aCk7CisKKwlyZWFkX21tYmxvYigmYW5jZXN0b3IsIHRocmVld2F5WzBdKTsKKwlyZWFkX21tYmxvYigmb3VycywgdGhyZWV3YXlbMV0pOworCXJlYWRfbW1ibG9iKCZ0aGVpcnMsIHRocmVld2F5WzJdKTsKKworCS8qCisJICogTkVFRFNXT1JLOiByZS1jcmVhdGUgY29uZmxpY3RzIGZyb20gbWVyZ2VzIHdpdGgKKwkgKiBtZXJnZS5yZW5vcm1hbGl6ZSBzZXQsIHRvbworCSAqLworCXN0YXR1cyA9IGxsX21lcmdlKCZyZXN1bHRfYnVmLCBwYXRoLCAmYW5jZXN0b3IsICJiYXNlIiwKKwkJCSAgJm91cnMsICJvdXJzIiwgJnRoZWlycywgInRoZWlycyIsIE5VTEwpOworCWZyZWUoYW5jZXN0b3IucHRyKTsKKwlmcmVlKG91cnMucHRyKTsKKwlmcmVlKHRoZWlycy5wdHIpOworCWlmIChzdGF0dXMgPCAwIHx8ICFyZXN1bHRfYnVmLnB0cikgeworCQlmcmVlKHJlc3VsdF9idWYucHRyKTsKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJzogY2Fubm90IG1lcmdlIiksIHBhdGgpOworCX0KKworCS8qCisJICogTkVFRFNXT1JLOgorCSAqIFRoZXJlIGlzIGFic29sdXRlbHkgbm8gcmVhc29uIHRvIHdyaXRlIHRoaXMgYXMgYSBibG9iIG9iamVjdAorCSAqIGFuZCBjcmVhdGUgYSBwaG9ueSBjYWNoZSBlbnRyeSBqdXN0IHRvIGxlYWsuICBUaGlzIGhhY2sgaXMKKwkgKiBwcmltYXJpbHkgdG8gZ2V0IHRvIHRoZSB3cml0ZV9lbnRyeSgpIG1hY2hpbmVyeSB0aGF0IG1hc3NhZ2VzCisJICogdGhlIGNvbnRlbnRzIHRvIHdvcmstdHJlZSBmb3JtYXQgYW5kIHdyaXRlcyBvdXQgd2hpY2ggb25seQorCSAqIGFsbG93cyBpdCBmb3IgYSBjYWNoZSBlbnRyeS4gIFRoZSBjb2RlIGluIHdyaXRlX2VudHJ5KCkgbmVlZHMKKwkgKiB0byBiZSByZWZhY3RvcmVkIHRvIGFsbG93IHVzIHRvIGZlZWQgYSA8YnVmZmVyLCBzaXplLCBtb2RlPgorCSAqIGluc3RlYWQgb2YgYSBjYWNoZSBlbnRyeS4gIFN1Y2ggYSByZWZhY3RvcmluZyB3b3VsZCBoZWxwCisJICogbWVyZ2VfcmVjdXJzaXZlIGFzIHdlbGwgKGl0IGFsc28gd3JpdGVzIHRoZSBtZXJnZSByZXN1bHQgdG8gdGhlCisJICogb2JqZWN0IGRhdGFiYXNlIGV2ZW4gd2hlbiBpdCBtYXkgY29udGFpbiBjb25mbGljdHMpLgorCSAqLworCWlmICh3cml0ZV9zaGExX2ZpbGUocmVzdWx0X2J1Zi5wdHIsIHJlc3VsdF9idWYuc2l6ZSwKKwkJCSAgICBibG9iX3R5cGUsIHNoYTEpKQorCQlkaWUoXygiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciKSwgcGF0aCk7CisJY2UgPSBtYWtlX2NhY2hlX2VudHJ5KG1vZGUsIHNoYTEsIHBhdGgsIDIsIDApOworCWlmICghY2UpCisJCWRpZShfKCJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIiksIHBhdGgpOworCXN0YXR1cyA9IGNoZWNrb3V0X2VudHJ5KGNlLCBzdGF0ZSwgTlVMTCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBjaGVja291dF9wYXRocyhjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwkJCSAgY29uc3QgY2hhciAqcmV2aXNpb24pCit7CisJaW50IHBvczsKKwlzdHJ1Y3QgY2hlY2tvdXQgc3RhdGU7CisJc3RhdGljIGNoYXIgKnBzX21hdGNoZWQ7CisJdW5zaWduZWQgY2hhciByZXZbMjBdOworCWludCBmbGFnOworCXN0cnVjdCBjb21taXQgKmhlYWQ7CisJaW50IGVycnMgPSAwOworCWludCBzdGFnZSA9IG9wdHMtPndyaXRlb3V0X3N0YWdlOworCWludCBtZXJnZSA9IG9wdHMtPm1lcmdlOworCWludCBuZXdmZDsKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGU7CisKKwlpZiAob3B0cy0+dHJhY2sgIT0gQlJBTkNIX1RSQUNLX1VOU1BFQ0lGSUVEKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIiksICItLXRyYWNrIik7CisKKwlpZiAob3B0cy0+bmV3X2JyYW5jaF9sb2cpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiKSwgIi1sIik7CisKKwlpZiAob3B0cy0+Zm9yY2UgJiYgb3B0cy0+cGF0Y2hfbW9kZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIpLCAiLWYiKTsKKworCWlmIChvcHRzLT5mb3JjZV9kZXRhY2gpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiKSwgIi0tZGV0YWNoIik7CisKKwlpZiAob3B0cy0+bWVyZ2UgJiYgb3B0cy0+cGF0Y2hfbW9kZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIpLCAiLS1tZXJnZSIsICItLXBhdGNoIik7CisKKwlpZiAob3B0cy0+Zm9yY2UgJiYgb3B0cy0+bWVyZ2UpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiKSwgIi1mIiwgIi1tIik7CisKKwlpZiAob3B0cy0+bmV3X2JyYW5jaCkKKwkJZGllKF8oIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIpLAorCQkgICAgb3B0cy0+bmV3X2JyYW5jaCk7CisKKwlpZiAob3B0cy0+cGF0Y2hfbW9kZSkKKwkJcmV0dXJuIHJ1bl9hZGRfaW50ZXJhY3RpdmUocmV2aXNpb24sICItLXBhdGNoPWNoZWNrb3V0IiwKKwkJCQkJICAgb3B0cy0+cGF0aHNwZWMpOworCisJbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOworCisJbmV3ZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQob3B0cy0+cGF0aHNwZWMpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImNvcnJ1cHQgaW5kZXggZmlsZSIpKTsKKworCWlmIChvcHRzLT5zb3VyY2VfdHJlZSkKKwkJcmVhZF90cmVlX3NvbWUob3B0cy0+c291cmNlX3RyZWUsIG9wdHMtPnBhdGhzcGVjKTsKKworCWZvciAocG9zID0gMDsgb3B0cy0+cGF0aHNwZWNbcG9zXTsgcG9zKyspCisJCTsKKwlwc19tYXRjaGVkID0geGNhbGxvYygxLCBwb3MpOworCisJZm9yIChwb3MgPSAwOyBwb3MgPCBhY3RpdmVfbnI7IHBvcysrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKG9wdHMtPnNvdXJjZV90cmVlICYmICEoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKSkKKwkJCWNvbnRpbnVlOworCQltYXRjaF9wYXRoc3BlYyhvcHRzLT5wYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwLCBwc19tYXRjaGVkKTsKKwl9CisKKwlpZiAocmVwb3J0X3BhdGhfZXJyb3IocHNfbWF0Y2hlZCwgb3B0cy0+cGF0aHNwZWMsIG9wdHMtPnByZWZpeCkpCisJCXJldHVybiAxOworCisJLyogImNoZWNrb3V0IC1tIHBhdGgiIHRvIHJlY3JlYXRlIGNvbmZsaWN0ZWQgc3RhdGUgKi8KKwlpZiAob3B0cy0+bWVyZ2UpCisJCXVubWVyZ2VfY2FjaGUob3B0cy0+cGF0aHNwZWMpOworCisJLyogQW55IHVubWVyZ2VkIHBhdGhzPyAqLworCWZvciAocG9zID0gMDsgcG9zIDwgYWN0aXZlX25yOyBwb3MrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWlmIChtYXRjaF9wYXRoc3BlYyhvcHRzLT5wYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwLCBOVUxMKSkgeworCQkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQkJY29udGludWU7CisJCQlpZiAob3B0cy0+Zm9yY2UpIHsKKwkJCQl3YXJuaW5nKF8oInBhdGggJyVzJyBpcyB1bm1lcmdlZCIpLCBjZS0+bmFtZSk7CisJCQl9IGVsc2UgaWYgKHN0YWdlKSB7CisJCQkJZXJycyB8PSBjaGVja19zdGFnZShzdGFnZSwgY2UsIHBvcyk7CisJCQl9IGVsc2UgaWYgKG9wdHMtPm1lcmdlKSB7CisJCQkJZXJycyB8PSBjaGVja19zdGFnZXMoKDE8PDIpIHwgKDE8PDMpLCBjZSwgcG9zKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJycyA9IDE7CisJCQkJZXJyb3IoXygicGF0aCAnJXMnIGlzIHVubWVyZ2VkIiksIGNlLT5uYW1lKTsKKwkJCX0KKwkJCXBvcyA9IHNraXBfc2FtZV9uYW1lKGNlLCBwb3MpIC0gMTsKKwkJfQorCX0KKwlpZiAoZXJycykKKwkJcmV0dXJuIDE7CisKKwkvKiBOb3cgd2UgYXJlIGNvbW1pdHRlZCB0byBjaGVjayB0aGVtIG91dCAqLworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCXN0YXRlLmZvcmNlID0gMTsKKwlzdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAob3B0cy0+c291cmNlX3RyZWUgJiYgIShjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpKQorCQkJY29udGludWU7CisJCWlmIChtYXRjaF9wYXRoc3BlYyhvcHRzLT5wYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwLCBOVUxMKSkgeworCQkJaWYgKCFjZV9zdGFnZShjZSkpIHsKKwkJCQllcnJzIHw9IGNoZWNrb3V0X2VudHJ5KGNlLCAmc3RhdGUsIE5VTEwpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHN0YWdlKQorCQkJCWVycnMgfD0gY2hlY2tvdXRfc3RhZ2Uoc3RhZ2UsIGNlLCBwb3MsICZzdGF0ZSk7CisJCQllbHNlIGlmIChtZXJnZSkKKwkJCQllcnJzIHw9IGNoZWNrb3V0X21lcmdlZChwb3MsICZzdGF0ZSk7CisJCQlwb3MgPSBza2lwX3NhbWVfbmFtZShjZSwgcG9zKSAtIDE7CisJCX0KKwl9CisKKwlpZiAod3JpdGVfY2FjaGUobmV3ZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAorCSAgICBjb21taXRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSkpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlyZWFkX3JlZl9mdWxsKCJIRUFEIiwgcmV2LCAwLCAmZmxhZyk7CisJaGVhZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyZXYsIDEpOworCisJZXJycyB8PSBwb3N0X2NoZWNrb3V0X2hvb2soaGVhZCwgaGVhZCwgMCk7CisJcmV0dXJuIGVycnM7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbG9jYWxfY2hhbmdlcyhzdHJ1Y3Qgb2JqZWN0ICpoZWFkLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwkvKiBJIHRoaW5rIHdlIHdhbnQgZnVsbCBwYXRocywgZXZlbiBpZiB3ZSdyZSBpbiBhIHN1YmRpcmVjdG9yeS4gKi8KKwlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwlyZXYuZGlmZm9wdC5mbGFncyA9IG9wdHMtPmZsYWdzOworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfTkFNRV9TVEFUVVM7CisJZGlmZl9zZXR1cF9kb25lKCZyZXYuZGlmZm9wdCk7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXYsIGhlYWQsIE5VTEwpOworCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDApOworfQorCitzdGF0aWMgdm9pZCBkZXNjcmliZV9kZXRhY2hlZF9oZWFkKGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlwYXJzZV9jb21taXQoY29tbWl0KTsKKwlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsICZzYik7CisJZnByaW50ZihzdGRlcnIsICIlcyAlcy4uLiAlc1xuIiwgbXNnLAorCQlmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpLCBzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwgY29uc3Qgc3RydWN0IGNoZWNrb3V0X29wdHMgKm8sCisJCSAgICAgIGludCB3b3JrdHJlZSwgaW50ICp3cml0ZW91dF9lcnJvcikKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRyZWVfZGVzYzsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gLTE7CisJb3B0cy51cGRhdGUgPSB3b3JrdHJlZTsKKwlvcHRzLnNraXBfdW5tZXJnZWQgPSAhd29ya3RyZWU7CisJb3B0cy5yZXNldCA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwlvcHRzLnZlcmJvc2VfdXBkYXRlID0gIW8tPnF1aWV0ICYmIGlzYXR0eSgyKTsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCXBhcnNlX3RyZWUodHJlZSk7CisJaW5pdF90cmVlX2Rlc2MoJnRyZWVfZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwlzd2l0Y2ggKHVucGFja190cmVlcygxLCAmdHJlZV9kZXNjLCAmb3B0cykpIHsKKwljYXNlIC0yOgorCQkqd3JpdGVvdXRfZXJyb3IgPSAxOworCQkvKgorCQkgKiBXZSByZXR1cm4gMCBuZXZlcnRoZWxlc3MsIGFzIHRoZSBpbmRleCBpcyBhbGwgcmlnaHQKKwkJICogYW5kIG1vcmUgaW1wb3J0YW50bHkgd2UgaGF2ZSBtYWRlIGJlc3QgZWZmb3J0cyB0bworCQkgKiB1cGRhdGUgcGF0aHMgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHdlIGNhbm5vdCByZXZlcnQKKwkJICogdGhlbS4KKwkJICovCisJY2FzZSAwOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTI4OworCX0KK30KKworc3RydWN0IGJyYW5jaF9pbmZvIHsKKwljb25zdCBjaGFyICpuYW1lOyAvKiBUaGUgc2hvcnQgbmFtZSB1c2VkICovCisJY29uc3QgY2hhciAqcGF0aDsgLyogVGhlIGZ1bGwgbmFtZSBvZiBhIHJlYWwgYnJhbmNoICovCisJc3RydWN0IGNvbW1pdCAqY29tbWl0OyAvKiBUaGUgbmFtZWQgY29tbWl0ICovCit9OworCitzdGF0aWMgdm9pZCBzZXR1cF9icmFuY2hfcGF0aChzdHJ1Y3QgYnJhbmNoX2luZm8gKmJyYW5jaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2JyYW5jaG5hbWUoJmJ1ZiwgYnJhbmNoLT5uYW1lKTsKKwlpZiAoc3RyY21wKGJ1Zi5idWYsIGJyYW5jaC0+bmFtZSkpCisJCWJyYW5jaC0+bmFtZSA9IHhzdHJkdXAoYnVmLmJ1Zik7CisJc3RyYnVmX3NwbGljZSgmYnVmLCAwLCAwLCAicmVmcy9oZWFkcy8iLCAxMSk7CisJYnJhbmNoLT5wYXRoID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIGludCBtZXJnZV93b3JraW5nX3RyZWUoY29uc3Qgc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsCisJCQkgICAgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm9sZCwKKwkJCSAgICAgIHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3LAorCQkJICAgICAgaW50ICp3cml0ZW91dF9lcnJvcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKwlpbnQgbmV3ZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOworCisJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZChOVUxMKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3JydXB0IGluZGV4IGZpbGUiKSk7CisKKwlyZXNvbHZlX3VuZG9fY2xlYXIoKTsKKwlpZiAob3B0cy0+Zm9yY2UpIHsKKwkJcmV0ID0gcmVzZXRfdHJlZShuZXctPmNvbW1pdC0+dHJlZSwgb3B0cywgMSwgd3JpdGVvdXRfZXJyb3IpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgdHJlZV9kZXNjIHRyZWVzWzJdOworCQlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIHRvcHRzOworCisJCW1lbXNldCgmdG9wdHMsIDAsIHNpemVvZih0b3B0cykpOworCQl0b3B0cy5oZWFkX2lkeCA9IC0xOworCQl0b3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCQl0b3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCisJCXNldHVwX3VucGFja190cmVlc19wb3JjZWxhaW4oJnRvcHRzLCAiY2hlY2tvdXQiKTsKKworCQlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCisJCWlmICh1bm1lcmdlZF9jYWNoZSgpKSB7CisJCQllcnJvcihfKCJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIpKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJLyogMi13YXkgbWVyZ2UgdG8gdGhlIG5ldyBicmFuY2ggKi8KKwkJdG9wdHMuaW5pdGlhbF9jaGVja291dCA9IGlzX2NhY2hlX3VuYm9ybigpOworCQl0b3B0cy51cGRhdGUgPSAxOworCQl0b3B0cy5tZXJnZSA9IDE7CisJCXRvcHRzLmdlbnRseSA9IG9wdHMtPm1lcmdlICYmIG9sZC0+Y29tbWl0OworCQl0b3B0cy52ZXJib3NlX3VwZGF0ZSA9ICFvcHRzLT5xdWlldCAmJiBpc2F0dHkoMik7CisJCXRvcHRzLmZuID0gdHdvd2F5X21lcmdlOworCQlpZiAob3B0cy0+b3ZlcndyaXRlX2lnbm9yZSkgeworCQkJdG9wdHMuZGlyID0geGNhbGxvYygxLCBzaXplb2YoKnRvcHRzLmRpcikpOworCQkJdG9wdHMuZGlyLT5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEOworCQkJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXModG9wdHMuZGlyKTsKKwkJfQorCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChvbGQtPmNvbW1pdCA/CisJCQkJCSAgIG9sZC0+Y29tbWl0LT5vYmplY3Quc2hhMSA6CisJCQkJCSAgIEVNUFRZX1RSRUVfU0hBMV9CSU4pOworCQlpbml0X3RyZWVfZGVzYygmdHJlZXNbMF0sIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KG5ldy0+Y29tbWl0LT5vYmplY3Quc2hhMSk7CisJCWluaXRfdHJlZV9kZXNjKCZ0cmVlc1sxXSwgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKworCQlyZXQgPSB1bnBhY2tfdHJlZXMoMiwgdHJlZXMsICZ0b3B0cyk7CisJCWlmIChyZXQgPT0gLTEpIHsKKwkJCS8qCisJCQkgKiBVbnBhY2sgY291bGRuJ3QgZG8gYSB0cml2aWFsIG1lcmdlOyBlaXRoZXIKKwkJCSAqIGdpdmUgdXAgb3IgZG8gYSByZWFsIG1lcmdlLCBkZXBlbmRpbmcgb24KKwkJCSAqIHdoZXRoZXIgdGhlIG1lcmdlIGZsYWcgd2FzIHVzZWQuCisJCQkgKi8KKwkJCXN0cnVjdCB0cmVlICpyZXN1bHQ7CisJCQlzdHJ1Y3QgdHJlZSAqd29yazsKKwkJCXN0cnVjdCBtZXJnZV9vcHRpb25zIG87CisJCQlpZiAoIW9wdHMtPm1lcmdlKQorCQkJCXJldHVybiAxOworCisJCQkvKgorCQkJICogV2l0aG91dCBvbGQtPmNvbW1pdCwgdGhlIGJlbG93IGlzIHRoZSBzYW1lIGFzCisJCQkgKiB0aGUgdHdvLXRyZWUgdW5wYWNrIHdlIGFscmVhZHkgdHJpZWQgYW5kIGZhaWxlZC4KKwkJCSAqLworCQkJaWYgKCFvbGQtPmNvbW1pdCkKKwkJCQlyZXR1cm4gMTsKKworCQkJLyogRG8gbW9yZSByZWFsIG1lcmdlICovCisKKwkJCS8qCisJCQkgKiBXZSB1cGRhdGUgdGhlIGluZGV4IGZ1bGx5LCB0aGVuIHdyaXRlIHRoZQorCQkJICogdHJlZSBmcm9tIHRoZSBpbmRleCwgdGhlbiBtZXJnZSB0aGUgbmV3CisJCQkgKiBicmFuY2ggd2l0aCB0aGUgY3VycmVudCB0cmVlLCB3aXRoIHRoZSBvbGQKKwkJCSAqIGJyYW5jaCBhcyB0aGUgYmFzZS4gVGhlbiB3ZSByZXNldCB0aGUgaW5kZXgKKwkJCSAqIChidXQgbm90IHRoZSB3b3JraW5nIHRyZWUpIHRvIHRoZSBuZXcKKwkJCSAqIGJyYW5jaCwgbGVhdmluZyB0aGUgd29ya2luZyB0cmVlIGFzIHRoZQorCQkJICogbWVyZ2VkIHZlcnNpb24sIGJ1dCBza2lwcGluZyB1bm1lcmdlZAorCQkJICogZW50cmllcyBpbiB0aGUgaW5kZXguCisJCQkgKi8KKworCQkJYWRkX2ZpbGVzX3RvX2NhY2hlKE5VTEwsIE5VTEwsIDApOworCQkJLyoKKwkJCSAqIE5FRURTV09SSzogY2Fycnlpbmcgb3ZlciBsb2NhbCBjaGFuZ2VzCisJCQkgKiB3aGVuIGJyYW5jaGVzIGhhdmUgZGlmZmVyZW50IGVuZC1vZi1saW5lCisJCQkgKiBub3JtYWxpemF0aW9uIChvciBjbGVhbitzbXVkZ2UgcnVsZXMpIGlzCisJCQkgKiBhIHBhaW47IHBsdW1iIGluIGFuIG9wdGlvbiB0byBzZXQKKwkJCSAqIG8ucmVub3JtYWxpemU/CisJCQkgKi8KKwkJCWluaXRfbWVyZ2Vfb3B0aW9ucygmbyk7CisJCQlvLnZlcmJvc2l0eSA9IDA7CisJCQl3b3JrID0gd3JpdGVfdHJlZV9mcm9tX21lbW9yeSgmbyk7CisKKwkJCXJldCA9IHJlc2V0X3RyZWUobmV3LT5jb21taXQtPnRyZWUsIG9wdHMsIDEsCisJCQkJCSB3cml0ZW91dF9lcnJvcik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlvLmFuY2VzdG9yID0gb2xkLT5uYW1lOworCQkJby5icmFuY2gxID0gbmV3LT5uYW1lOworCQkJby5icmFuY2gyID0gImxvY2FsIjsKKwkJCW1lcmdlX3RyZWVzKCZvLCBuZXctPmNvbW1pdC0+dHJlZSwgd29yaywKKwkJCQlvbGQtPmNvbW1pdC0+dHJlZSwgJnJlc3VsdCk7CisJCQlyZXQgPSByZXNldF90cmVlKG5ldy0+Y29tbWl0LT50cmVlLCBvcHRzLCAwLAorCQkJCQkgd3JpdGVvdXRfZXJyb3IpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJaWYgKHdyaXRlX2NhY2hlKG5ld2ZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKKwkgICAgY29tbWl0X2xvY2tlZF9pbmRleChsb2NrX2ZpbGUpKQorCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCisJaWYgKCFvcHRzLT5mb3JjZSAmJiAhb3B0cy0+cXVpZXQpCisJCXNob3dfbG9jYWxfY2hhbmdlcygmbmV3LT5jb21taXQtPm9iamVjdCwgJm9wdHMtPmRpZmZfb3B0aW9ucyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X3RyYWNraW5nKHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KG5ldy0+bmFtZSk7CisKKwlpZiAoIWZvcm1hdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJnNiKSkKKwkJcmV0dXJuOworCWZwdXRzKHNiLmJ1Ziwgc3Rkb3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcmVmc19mb3Jfc3dpdGNoKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJCSAgIHN0cnVjdCBicmFuY2hfaW5mbyAqb2xkLAorCQkJCSAgIHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3KQoreworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqb2xkX2Rlc2M7CisJaWYgKG9wdHMtPm5ld19icmFuY2gpIHsKKwkJaWYgKG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoKSB7CisJCQlpZiAob3B0cy0+bmV3X2JyYW5jaF9sb2cgJiYgIWxvZ19hbGxfcmVmX3VwZGF0ZXMpIHsKKwkJCQlpbnQgdGVtcDsKKwkJCQljaGFyIGxvZ19maWxlW1BBVEhfTUFYXTsKKwkJCQljaGFyICpyZWZfbmFtZSA9IG1rcGF0aCgicmVmcy9oZWFkcy8lcyIsIG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoKTsKKworCQkJCXRlbXAgPSBsb2dfYWxsX3JlZl91cGRhdGVzOworCQkJCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSAxOworCQkJCWlmIChsb2dfcmVmX3NldHVwKHJlZl9uYW1lLCBsb2dfZmlsZSwgc2l6ZW9mKGxvZ19maWxlKSkpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnXG4iKSwKKwkJCQkJICAgIG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoKTsKKwkJCQkJbG9nX2FsbF9yZWZfdXBkYXRlcyA9IHRlbXA7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJbG9nX2FsbF9yZWZfdXBkYXRlcyA9IHRlbXA7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJY3JlYXRlX2JyYW5jaChvbGQtPm5hbWUsIG9wdHMtPm5ld19icmFuY2gsIG5ldy0+bmFtZSwKKwkJCQkgICAgICBvcHRzLT5uZXdfYnJhbmNoX2ZvcmNlID8gMSA6IDAsCisJCQkJICAgICAgb3B0cy0+bmV3X2JyYW5jaF9sb2csCisJCQkJICAgICAgb3B0cy0+bmV3X2JyYW5jaF9mb3JjZSA/IDEgOiAwLAorCQkJCSAgICAgIG9wdHMtPnF1aWV0LAorCQkJCSAgICAgIG9wdHMtPnRyYWNrKTsKKwkJbmV3LT5uYW1lID0gb3B0cy0+bmV3X2JyYW5jaDsKKwkJc2V0dXBfYnJhbmNoX3BhdGgobmV3KTsKKwl9CisKKwlvbGRfZGVzYyA9IG9sZC0+bmFtZTsKKwlpZiAoIW9sZF9kZXNjICYmIG9sZC0+Y29tbWl0KQorCQlvbGRfZGVzYyA9IHNoYTFfdG9faGV4KG9sZC0+Y29tbWl0LT5vYmplY3Quc2hhMSk7CisJc3RyYnVmX2FkZGYoJm1zZywgImNoZWNrb3V0OiBtb3ZpbmcgZnJvbSAlcyB0byAlcyIsCisJCSAgICBvbGRfZGVzYyA/IG9sZF9kZXNjIDogIihpbnZhbGlkKSIsIG5ldy0+bmFtZSk7CisKKwlpZiAoIXN0cmNtcChuZXctPm5hbWUsICJIRUFEIikgJiYgIW5ldy0+cGF0aCAmJiAhb3B0cy0+Zm9yY2VfZGV0YWNoKSB7CisJCS8qIE5vdGhpbmcgdG8gZG8uICovCisJfSBlbHNlIGlmIChvcHRzLT5mb3JjZV9kZXRhY2ggfHwgIW5ldy0+cGF0aCkgewkvKiBObyBsb25nZXIgb24gYW55IGJyYW5jaC4gKi8KKwkJdXBkYXRlX3JlZihtc2cuYnVmLCAiSEVBRCIsIG5ldy0+Y29tbWl0LT5vYmplY3Quc2hhMSwgTlVMTCwKKwkJCSAgIFJFRl9OT0RFUkVGLCBESUVfT05fRVJSKTsKKwkJaWYgKCFvcHRzLT5xdWlldCkgeworCQkJaWYgKG9sZC0+cGF0aCAmJiBhZHZpY2VfZGV0YWNoZWRfaGVhZCkKKwkJCQlkZXRhY2hfYWR2aWNlKG5ldy0+bmFtZSk7CisJCQlkZXNjcmliZV9kZXRhY2hlZF9oZWFkKF8oIkhFQUQgaXMgbm93IGF0IiksIG5ldy0+Y29tbWl0KTsKKwkJfQorCX0gZWxzZSBpZiAobmV3LT5wYXRoKSB7CS8qIFN3aXRjaCBicmFuY2hlcy4gKi8KKwkJY3JlYXRlX3N5bXJlZigiSEVBRCIsIG5ldy0+cGF0aCwgbXNnLmJ1Zik7CisJCWlmICghb3B0cy0+cXVpZXQpIHsKKwkJCWlmIChvbGQtPnBhdGggJiYgIXN0cmNtcChuZXctPnBhdGgsIG9sZC0+cGF0aCkpIHsKKwkJCQlpZiAob3B0cy0+bmV3X2JyYW5jaF9mb3JjZSkKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIlJlc2V0IGJyYW5jaCAnJXMnXG4iKSwKKwkJCQkJCW5ldy0+bmFtZSk7CisJCQkJZWxzZQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiQWxyZWFkeSBvbiAnJXMnXG4iKSwKKwkJCQkJCW5ldy0+bmFtZSk7CisJCQl9IGVsc2UgaWYgKG9wdHMtPm5ld19icmFuY2gpIHsKKwkJCQlpZiAob3B0cy0+YnJhbmNoX2V4aXN0cykKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIiksIG5ldy0+bmFtZSk7CisJCQkJZWxzZQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIpLCBuZXctPm5hbWUpOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIpLAorCQkJCQluZXctPm5hbWUpOworCQkJfQorCQl9CisJCWlmIChvbGQtPnBhdGggJiYgb2xkLT5uYW1lKSB7CisJCQljaGFyIGxvZ19maWxlW1BBVEhfTUFYXSwgcmVmX2ZpbGVbUEFUSF9NQVhdOworCisJCQlnaXRfc25wYXRoKGxvZ19maWxlLCBzaXplb2YobG9nX2ZpbGUpLCAibG9ncy8lcyIsIG9sZC0+cGF0aCk7CisJCQlnaXRfc25wYXRoKHJlZl9maWxlLCBzaXplb2YocmVmX2ZpbGUpLCAiJXMiLCBvbGQtPnBhdGgpOworCQkJaWYgKCFmaWxlX2V4aXN0cyhyZWZfZmlsZSkgJiYgZmlsZV9leGlzdHMobG9nX2ZpbGUpKQorCQkJCXJlbW92ZV9wYXRoKGxvZ19maWxlKTsKKwkJfQorCX0KKwlyZW1vdmVfYnJhbmNoX3N0YXRlKCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisJaWYgKCFvcHRzLT5xdWlldCAmJgorCSAgICAobmV3LT5wYXRoIHx8ICghb3B0cy0+Zm9yY2VfZGV0YWNoICYmICFzdHJjbXAobmV3LT5uYW1lLCAiSEVBRCIpKSkpCisJCXJlcG9ydF90cmFja2luZyhuZXcpOworfQorCitzdGF0aWMgaW50IGFkZF9wZW5kaW5nX3VuaW50ZXJlc3RpbmdfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCQkgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCWFkZF9wZW5kaW5nX3NoYTEoY2JfZGF0YSwgcmVmbmFtZSwgc2hhMSwgVU5JTlRFUkVTVElORyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlc2NyaWJlX29uZV9vcnBoYW4oc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlwYXJzZV9jb21taXQoY29tbWl0KTsKKwlzdHJidWZfYWRkc3RyKHNiLCAiICAiKTsKKwlzdHJidWZfYWRkc3RyKHNiLAorCQlmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKKwlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJcHBfY29tbWl0X2Vhc3koQ01JVF9GTVRfT05FTElORSwgY29tbWl0LCBzYik7CisJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKK30KKworI2RlZmluZSBPUlBIQU5fQ1VUT0ZGIDQKK3N0YXRpYyB2b2lkIHN1Z2dlc3RfcmVhdHRhY2goc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdCAqYywgKmxhc3QgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgbG9zdCA9IDA7CisJd2hpbGUgKChjID0gZ2V0X3JldmlzaW9uKHJldnMpKSAhPSBOVUxMKSB7CisJCWlmIChsb3N0IDwgT1JQSEFOX0NVVE9GRikKKwkJCWRlc2NyaWJlX29uZV9vcnBoYW4oJnNiLCBjKTsKKwkJbGFzdCA9IGM7CisJCWxvc3QrKzsKKwl9CisJaWYgKE9SUEhBTl9DVVRPRkYgPCBsb3N0KSB7CisJCWludCBtb3JlID0gbG9zdCAtIE9SUEhBTl9DVVRPRkY7CisJCWlmIChtb3JlID09IDEpCisJCQlkZXNjcmliZV9vbmVfb3JwaGFuKCZzYiwgbGFzdCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgXygiIC4uLiBhbmQgJWQgbW9yZS5cbiIpLCBtb3JlKTsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwKKwkJUV8oCisJCS8qIFRoZSBzaW5ndWxhciB2ZXJzaW9uICovCisJCSJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgIgorCQkibm90IGNvbm5lY3RlZCB0b1xuIgorCQkiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG5cbiIKKwkJIiVzXG4iLAorCQkvKiBUaGUgcGx1cmFsIHZlcnNpb24gKi8KKwkJIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgIgorCQkibm90IGNvbm5lY3RlZCB0b1xuIgorCQkiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG5cbiIKKwkJIiVzXG4iLAorCQkvKiBHaXZlIG5nZXR0ZXh0KCkgdGhlIGNvdW50ICovCisJCWxvc3QpLAorCQlsb3N0LAorCQlzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlpZiAoYWR2aWNlX2RldGFjaGVkX2hlYWQpCisJCWZwcmludGYoc3RkZXJyLAorCQkJXygKKwkJCSJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCAiCisJCQkidGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbnRvIGRvIHNvIHdpdGg6XG5cbiIKKwkJCSIgZ2l0IGJyYW5jaCBuZXdfYnJhbmNoX25hbWUgJXNcblxuIiksCisJCQlzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7Cit9CisKKy8qCisgKiBXZSBhcmUgYWJvdXQgdG8gbGVhdmUgY29tbWl0IHRoYXQgd2FzIGF0IHRoZSB0aXAgb2YgYSBkZXRhY2hlZAorICogSEVBRC4gIElmIGl0IGlzIG5vdCByZWFjaGFibGUgZnJvbSBhbnkgcmVmLCB0aGlzIGlzIHRoZSBsYXN0IGNoYW5jZQorICogZm9yIHRoZSB1c2VyIHRvIGRvIHNvIHdpdGhvdXQgcmVzb3J0aW5nIHRvIHJlZmxvZy4KKyAqLworc3RhdGljIHZvaWQgb3JwaGFuZWRfY29tbWl0X3dhcm5pbmcoc3RydWN0IGNvbW1pdCAqb2xkLCBzdHJ1Y3QgY29tbWl0ICpuZXcpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gJm9sZC0+b2JqZWN0OworCXN0cnVjdCBvYmplY3RfYXJyYXkgcmVmczsKKworCWluaXRfcmV2aXNpb25zKCZyZXZzLCBOVUxMKTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldnMsIE5VTEwpOworCisJb2JqZWN0LT5mbGFncyAmPSB+VU5JTlRFUkVTVElORzsKKwlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsIG9iamVjdCwgc2hhMV90b19oZXgob2JqZWN0LT5zaGExKSk7CisKKwlmb3JfZWFjaF9yZWYoYWRkX3BlbmRpbmdfdW5pbnRlcmVzdGluZ19yZWYsICZyZXZzKTsKKwlhZGRfcGVuZGluZ19zaGExKCZyZXZzLCAiSEVBRCIsIG5ldy0+b2JqZWN0LnNoYTEsIFVOSU5URVJFU1RJTkcpOworCisJcmVmcyA9IHJldnMucGVuZGluZzsKKwlyZXZzLmxlYWtfcGVuZGluZyA9IDE7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKF8oImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiKSk7CisJaWYgKCEob2xkLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJc3VnZ2VzdF9yZWF0dGFjaChvbGQsICZyZXZzKTsKKwllbHNlCisJCWRlc2NyaWJlX2RldGFjaGVkX2hlYWQoXygiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiKSwgb2xkKTsKKworCWNsZWFyX2NvbW1pdF9tYXJrc19mb3Jfb2JqZWN0X2FycmF5KCZyZWZzLCBBTExfUkVWX0ZMQUdTKTsKKwlmcmVlKHJlZnMub2JqZWN0cyk7Cit9CisKK3N0YXRpYyBpbnQgc3dpdGNoX2JyYW5jaGVzKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJICAgc3RydWN0IGJyYW5jaF9pbmZvICpuZXcpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGJyYW5jaF9pbmZvIG9sZDsKKwl2b2lkICpwYXRoX3RvX2ZyZWU7CisJdW5zaWduZWQgY2hhciByZXZbMjBdOworCWludCBmbGFnLCB3cml0ZW91dF9lcnJvciA9IDA7CisJbWVtc2V0KCZvbGQsIDAsIHNpemVvZihvbGQpKTsKKwlvbGQucGF0aCA9IHBhdGhfdG9fZnJlZSA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgcmV2LCAwLCAmZmxhZyk7CisJb2xkLmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyZXYsIDEpOworCWlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKQorCQlvbGQucGF0aCA9IE5VTEw7CisKKwlpZiAob2xkLnBhdGggJiYgIXByZWZpeGNtcChvbGQucGF0aCwgInJlZnMvaGVhZHMvIikpCisJCW9sZC5uYW1lID0gb2xkLnBhdGggKyBzdHJsZW4oInJlZnMvaGVhZHMvIik7CisKKwlpZiAoIW5ldy0+bmFtZSkgeworCQluZXctPm5hbWUgPSAiSEVBRCI7CisJCW5ldy0+Y29tbWl0ID0gb2xkLmNvbW1pdDsKKwkJaWYgKCFuZXctPmNvbW1pdCkKKwkJCWRpZShfKCJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIikpOworCQlwYXJzZV9jb21taXQobmV3LT5jb21taXQpOworCX0KKworCXJldCA9IG1lcmdlX3dvcmtpbmdfdHJlZShvcHRzLCAmb2xkLCBuZXcsICZ3cml0ZW91dF9lcnJvcik7CisJaWYgKHJldCkgeworCQlmcmVlKHBhdGhfdG9fZnJlZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCFvcHRzLT5xdWlldCAmJiAhb2xkLnBhdGggJiYgb2xkLmNvbW1pdCAmJiBuZXctPmNvbW1pdCAhPSBvbGQuY29tbWl0KQorCQlvcnBoYW5lZF9jb21taXRfd2FybmluZyhvbGQuY29tbWl0LCBuZXctPmNvbW1pdCk7CisKKwl1cGRhdGVfcmVmc19mb3Jfc3dpdGNoKG9wdHMsICZvbGQsIG5ldyk7CisKKwlyZXQgPSBwb3N0X2NoZWNrb3V0X2hvb2sob2xkLmNvbW1pdCwgbmV3LT5jb21taXQsIDEpOworCWZyZWUocGF0aF90b19mcmVlKTsKKwlyZXR1cm4gcmV0IHx8IHdyaXRlb3V0X2Vycm9yOworfQorCitzdGF0aWMgaW50IGdpdF9jaGVja291dF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5pZ25vcmVzdWJtb2R1bGVzIikpIHsKKwkJc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMgPSBjYjsKKwkJaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZygmb3B0cy0+ZGlmZl9vcHRpb25zLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghcHJlZml4Y21wKHZhciwgInN1Ym1vZHVsZS4iKSkKKwkJcmV0dXJuIHBhcnNlX3N1Ym1vZHVsZV9jb25maWdfb3B0aW9uKHZhciwgdmFsdWUpOworCisJcmV0dXJuIGdpdF94bWVyZ2VfY29uZmlnKHZhciwgdmFsdWUsIE5VTEwpOworfQorCitzdHJ1Y3QgdHJhY2tpbmdfbmFtZV9kYXRhIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNoYXIgKnJlbW90ZTsKKwlpbnQgdW5pcXVlOworfTsKKworc3RhdGljIGludCBjaGVja190cmFja2luZ19uYW1lKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB0cmFja2luZ19uYW1lX2RhdGEgKmNiID0gY2JfZGF0YTsKKwljb25zdCBjaGFyICpzbGFzaDsKKworCWlmIChwcmVmaXhjbXAocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSkKKwkJcmV0dXJuIDA7CisJc2xhc2ggPSBzdHJjaHIocmVmbmFtZSArIDEzLCAnLycpOworCWlmICghc2xhc2ggfHwgc3RyY21wKHNsYXNoICsgMSwgY2ItPm5hbWUpKQorCQlyZXR1cm4gMDsKKwlpZiAoY2ItPnJlbW90ZSkgeworCQljYi0+dW5pcXVlID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWNiLT5yZW1vdGUgPSB4c3RyZHVwKHJlZm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdW5pcXVlX3RyYWNraW5nX25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdHJhY2tpbmdfbmFtZV9kYXRhIGNiX2RhdGEgPSB7IE5VTEwsIE5VTEwsIDEgfTsKKwljYl9kYXRhLm5hbWUgPSBuYW1lOworCWZvcl9lYWNoX3JlZihjaGVja190cmFja2luZ19uYW1lLCAmY2JfZGF0YSk7CisJaWYgKGNiX2RhdGEudW5pcXVlKQorCQlyZXR1cm4gY2JfZGF0YS5yZW1vdGU7CisJZnJlZShjYl9kYXRhLnJlbW90ZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYnJhbmNobmFtZV9hcmcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJCWludCBkd2ltX25ld19sb2NhbF9icmFuY2hfb2ssCisJCQkJc3RydWN0IGJyYW5jaF9pbmZvICpuZXcsCisJCQkJc3RydWN0IHRyZWUgKipzb3VyY2VfdHJlZSwKKwkJCQl1bnNpZ25lZCBjaGFyIHJldlsyMF0sCisJCQkJY29uc3QgY2hhciAqKm5ld19icmFuY2gpCit7CisJaW50IGFyZ2NvdW50ID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJyYW5jaF9yZXZbMjBdOworCWNvbnN0IGNoYXIgKmFyZzsKKwlpbnQgaGFzX2Rhc2hfZGFzaDsKKworCS8qCisJICogY2FzZSAxOiBnaXQgY2hlY2tvdXQgPHJlZj4gLS0gWzxwYXRocz5dCisJICoKKwkgKiAgIDxyZWY+IG11c3QgYmUgYSB2YWxpZCB0cmVlLCBldmVyeXRoaW5nIGFmdGVyIHRoZSAnLS0nIG11c3QgYmUKKwkgKiAgIGEgcGF0aC4KKwkgKgorCSAqIGNhc2UgMjogZ2l0IGNoZWNrb3V0IC0tIFs8cGF0aHM+XQorCSAqCisJICogICBldmVyeXRoaW5nIGFmdGVyIHRoZSAnLS0nIG11c3QgYmUgcGF0aHMuCisJICoKKwkgKiBjYXNlIDM6IGdpdCBjaGVja291dCA8c29tZXRoaW5nPiBbPHBhdGhzPl0KKwkgKgorCSAqICAgV2l0aCBubyBwYXRocywgaWYgPHNvbWV0aGluZz4gaXMgYSBjb21taXQsIHRoYXQgaXMgdG8KKwkgKiAgIHN3aXRjaCB0byB0aGUgYnJhbmNoIG9yIGRldGFjaCBIRUFEIGF0IGl0LiAgQXMgYSBzcGVjaWFsIGNhc2UsCisJICogICBpZiA8c29tZXRoaW5nPiBpcyBBLi4uQiAobWlzc2luZyBBIG9yIEIgbWVhbnMgSEVBRCBidXQgeW91IGNhbgorCSAqICAgb21pdCBhdCBtb3N0IG9uZSBzaWRlKSwgYW5kIGlmIHRoZXJlIGlzIGEgdW5pcXVlIG1lcmdlIGJhc2UKKwkgKiAgIGJldHdlZW4gQSBhbmQgQiwgQS4uLkIgbmFtZXMgdGhhdCBtZXJnZSBiYXNlLgorCSAqCisJICogICBXaXRoIG5vIHBhdGhzLCBpZiA8c29tZXRoaW5nPiBpcyBfbm90XyBhIGNvbW1pdCwgbm8gLXQgbm9yIC1iCisJICogICB3YXMgZ2l2ZW4sIGFuZCB0aGVyZSBpcyBhIHRyYWNraW5nIGJyYW5jaCB3aG9zZSBuYW1lIGlzCisJICogICA8c29tZXRoaW5nPiBpbiBvbmUgYW5kIG9ubHkgb25lIHJlbW90ZSwgdGhlbiB0aGlzIGlzIGEgc2hvcnQtaGFuZAorCSAqICAgdG8gZm9yayBsb2NhbCA8c29tZXRoaW5nPiBmcm9tIHRoYXQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4KKwkgKgorCSAqICAgT3RoZXJ3aXNlIDxzb21ldGhpbmc+IHNoYWxsIG5vdCBiZSBhbWJpZ3VvdXMuCisJICogICAtIElmIGl0J3MgKm9ubHkqIGEgcmVmZXJlbmNlLCB0cmVhdCBpdCBsaWtlIGNhc2UgKDEpLgorCSAqICAgLSBJZiBpdCdzIG9ubHkgYSBwYXRoLCB0cmVhdCBpdCBsaWtlIGNhc2UgKDIpLgorCSAqICAgLSBlbHNlOiBmYWlsLgorCSAqCisJICovCisJaWYgKCFhcmdjKQorCQlyZXR1cm4gMDsKKworCWlmICghc3RyY21wKGFyZ3ZbMF0sICItLSIpKQkvKiBjYXNlICgyKSAqLworCQlyZXR1cm4gMTsKKworCWFyZyA9IGFyZ3ZbMF07CisJaGFzX2Rhc2hfZGFzaCA9IChhcmdjID4gMSkgJiYgIXN0cmNtcChhcmd2WzFdLCAiLS0iKTsKKworCWlmICghc3RyY21wKGFyZywgIi0iKSkKKwkJYXJnID0gIkB7LTF9IjsKKworCWlmIChnZXRfc2hhMV9tYihhcmcsIHJldikpIHsKKwkJaWYgKGhhc19kYXNoX2Rhc2gpICAgICAgICAgIC8qIGNhc2UgKDEpICovCisJCQlkaWUoXygiaW52YWxpZCByZWZlcmVuY2U6ICVzIiksIGFyZyk7CisJCWlmIChkd2ltX25ld19sb2NhbF9icmFuY2hfb2sgJiYKKwkJICAgICFjaGVja19maWxlbmFtZShOVUxMLCBhcmcpICYmCisJCSAgICBhcmdjID09IDEpIHsKKwkJCWNvbnN0IGNoYXIgKnJlbW90ZSA9IHVuaXF1ZV90cmFja2luZ19uYW1lKGFyZyk7CisJCQlpZiAoIXJlbW90ZSB8fCBnZXRfc2hhMShyZW1vdGUsIHJldikpCisJCQkJcmV0dXJuIGFyZ2NvdW50OworCQkJKm5ld19icmFuY2ggPSBhcmc7CisJCQlhcmcgPSByZW1vdGU7CisJCQkvKiBEV0lNbWVkIHRvIGNyZWF0ZSBsb2NhbCBicmFuY2ggKi8KKwkJfSBlbHNlIHsKKwkJCXJldHVybiBhcmdjb3VudDsKKwkJfQorCX0KKworCS8qIHdlIGNhbid0IGVuZCB1cCBiZWluZyBpbiAoMikgYW55bW9yZSwgZWF0IHRoZSBhcmd1bWVudCAqLworCWFyZ2NvdW50Kys7CisJYXJndisrOworCWFyZ2MtLTsKKworCW5ldy0+bmFtZSA9IGFyZzsKKwlzZXR1cF9icmFuY2hfcGF0aChuZXcpOworCisJaWYgKCFjaGVja19yZWZuYW1lX2Zvcm1hdChuZXctPnBhdGgsIDApICYmCisJICAgICFyZWFkX3JlZihuZXctPnBhdGgsIGJyYW5jaF9yZXYpKQorCQloYXNoY3B5KHJldiwgYnJhbmNoX3Jldik7CisJZWxzZQorCQluZXctPnBhdGggPSBOVUxMOyAvKiBub3QgYW4gZXhpc3RpbmcgYnJhbmNoICovCisKKwluZXctPmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyZXYsIDEpOworCWlmICghbmV3LT5jb21taXQpIHsKKwkJLyogbm90IGEgY29tbWl0ICovCisJCSpzb3VyY2VfdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QocmV2KTsKKwl9IGVsc2UgeworCQlwYXJzZV9jb21taXQobmV3LT5jb21taXQpOworCQkqc291cmNlX3RyZWUgPSBuZXctPmNvbW1pdC0+dHJlZTsKKwl9CisKKwlpZiAoISpzb3VyY2VfdHJlZSkgICAgICAgICAgICAgICAgICAgLyogY2FzZSAoMSk6IHdhbnQgYSB0cmVlICovCisJCWRpZShfKCJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiKSwgYXJnKTsKKwlpZiAoIWhhc19kYXNoX2Rhc2gpIHsvKiBjYXNlICgzIC0+IDEpICovCisJCS8qCisJCSAqIERvIG5vdCBjb21wbGFpbiB0aGUgbW9zdCBjb21tb24gY2FzZQorCQkgKglnaXQgY2hlY2tvdXQgYnJhbmNoCisJCSAqIGV2ZW4gaWYgdGhlcmUgaGFwcGVuIHRvIGJlIGEgZmlsZSBjYWxsZWQgJ2JyYW5jaCc7CisJCSAqIGl0IHdvdWxkIGJlIGV4dHJlbWVseSBhbm5veWluZy4KKwkJICovCisJCWlmIChhcmdjKQorCQkJdmVyaWZ5X25vbl9maWxlbmFtZShOVUxMLCBhcmcpOworCX0gZWxzZSB7CisJCWFyZ2NvdW50Kys7CisJCWFyZ3YrKzsKKwkJYXJnYy0tOworCX0KKworCXJldHVybiBhcmdjb3VudDsKK30KKworc3RhdGljIGludCBzd2l0Y2hfdW5ib3JuX3RvX25ld19icmFuY2goY29uc3Qgc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc3RyYnVmIGJyYW5jaF9yZWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghb3B0cy0+bmV3X2JyYW5jaCkKKwkJZGllKF8oIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iKSk7CisJc3RyYnVmX2FkZGYoJmJyYW5jaF9yZWYsICJyZWZzL2hlYWRzLyVzIiwgb3B0cy0+bmV3X2JyYW5jaCk7CisJc3RhdHVzID0gY3JlYXRlX3N5bXJlZigiSEVBRCIsIGJyYW5jaF9yZWYuYnVmLCAiY2hlY2tvdXQgLWIiKTsKKwlzdHJidWZfcmVsZWFzZSgmYnJhbmNoX3JlZik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBjaGVja291dF9icmFuY2goc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsCisJCQkgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm5ldykKK3sKKwlpZiAob3B0cy0+cGF0aHNwZWMpCisJCWRpZShfKCJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIpKTsKKworCWlmIChvcHRzLT5wYXRjaF9tb2RlKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIpLAorCQkgICAgIi0tcGF0Y2giKTsKKworCWlmIChvcHRzLT53cml0ZW91dF9zdGFnZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiKSwKKwkJICAgICItLW91cnMvLS10aGVpcnMiKTsKKworCWlmIChvcHRzLT5mb3JjZSAmJiBvcHRzLT5tZXJnZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIiksICItZiIsICItbSIpOworCisJaWYgKG9wdHMtPmZvcmNlX2RldGFjaCAmJiBvcHRzLT5uZXdfYnJhbmNoKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciKSwKKwkJICAgICItLWRldGFjaCIsICItYi8tQi8tLW9ycGhhbiIpOworCisJaWYgKG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoKSB7CisJCWlmIChvcHRzLT50cmFjayAhPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQpCisJCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciKSwgIi0tb3JwaGFuIiwgIi10Iik7CisJfSBlbHNlIGlmIChvcHRzLT5mb3JjZV9kZXRhY2gpIHsKKwkJaWYgKG9wdHMtPnRyYWNrICE9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCkKKwkJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIpLCAiLS1kZXRhY2giLCAiLXQiKTsKKwl9IGVsc2UgaWYgKG9wdHMtPnRyYWNrID09IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCkKKwkJb3B0cy0+dHJhY2sgPSBnaXRfYnJhbmNoX3RyYWNrOworCisJaWYgKG5ldy0+bmFtZSAmJiAhbmV3LT5jb21taXQpCisJCWRpZShfKCJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIpLAorCQkgICAgbmV3LT5uYW1lKTsKKworCWlmICghbmV3LT5jb21taXQgJiYgb3B0cy0+bmV3X2JyYW5jaCkgeworCQl1bnNpZ25lZCBjaGFyIHJldlsyMF07CisJCWludCBmbGFnOworCisJCWlmICghcmVhZF9yZWZfZnVsbCgiSEVBRCIsIHJldiwgMCwgJmZsYWcpICYmCisJCSAgICAoZmxhZyAmIFJFRl9JU1NZTVJFRikgJiYgaXNfbnVsbF9zaGExKHJldikpCisJCQlyZXR1cm4gc3dpdGNoX3VuYm9ybl90b19uZXdfYnJhbmNoKG9wdHMpOworCX0KKwlyZXR1cm4gc3dpdGNoX2JyYW5jaGVzKG9wdHMsIG5ldyk7Cit9CisKK2ludCBjbWRfY2hlY2tvdXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNoZWNrb3V0X29wdHMgb3B0czsKKwlzdHJ1Y3QgYnJhbmNoX2luZm8gbmV3OworCWNoYXIgKmNvbmZsaWN0X3N0eWxlID0gTlVMTDsKKwlpbnQgZHdpbV9uZXdfbG9jYWxfYnJhbmNoID0gMTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmb3B0cy5xdWlldCwgTl8oInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwkJT1BUX1NUUklORygnYicsIE5VTEwsICZvcHRzLm5ld19icmFuY2gsIE5fKCJicmFuY2giKSwKKwkJCSAgIE5fKCJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIpKSwKKwkJT1BUX1NUUklORygnQicsIE5VTEwsICZvcHRzLm5ld19icmFuY2hfZm9yY2UsIE5fKCJicmFuY2giKSwKKwkJCSAgIE5fKCJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIikpLAorCQlPUFRfQk9PTEVBTignbCcsIE5VTEwsICZvcHRzLm5ld19icmFuY2hfbG9nLCBOXygiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImRldGFjaCIsICZvcHRzLmZvcmNlX2RldGFjaCwgTl8oImRldGFjaCB0aGUgSEVBRCBhdCBuYW1lZCBjb21taXQiKSksCisJCU9QVF9TRVRfSU5UKCd0JywgInRyYWNrIiwgICZvcHRzLnRyYWNrLCBOXygic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giKSwKKwkJCUJSQU5DSF9UUkFDS19FWFBMSUNJVCksCisJCU9QVF9TVFJJTkcoMCwgIm9ycGhhbiIsICZvcHRzLm5ld19vcnBoYW5fYnJhbmNoLCBOXygibmV3IGJyYW5jaCIpLCBOXygibmV3IHVucGFyZW50ZWQgYnJhbmNoIikpLAorCQlPUFRfU0VUX0lOVCgnMicsICJvdXJzIiwgJm9wdHMud3JpdGVvdXRfc3RhZ2UsIE5fKCJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiKSwKKwkJCSAgICAyKSwKKwkJT1BUX1NFVF9JTlQoJzMnLCAidGhlaXJzIiwgJm9wdHMud3JpdGVvdXRfc3RhZ2UsIE5fKCJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIpLAorCQkJICAgIDMpLAorCQlPUFRfX0ZPUkNFKCZvcHRzLmZvcmNlLCBOXygiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiKSksCisJCU9QVF9CT09MRUFOKCdtJywgIm1lcmdlIiwgJm9wdHMubWVyZ2UsIE5fKCJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgIm92ZXJ3cml0ZS1pZ25vcmUiLCAmb3B0cy5vdmVyd3JpdGVfaWdub3JlLCBOXygidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIikpLAorCQlPUFRfU1RSSU5HKDAsICJjb25mbGljdCIsICZjb25mbGljdF9zdHlsZSwgTl8oInN0eWxlIiksCisJCQkgICBOXygiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIpKSwKKwkJT1BUX0JPT0xFQU4oJ3AnLCAicGF0Y2giLCAmb3B0cy5wYXRjaF9tb2RlLCBOXygic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiKSksCisJCXsgT1BUSU9OX0JPT0xFQU4sIDAsICJndWVzcyIsICZkd2ltX25ld19sb2NhbF9icmFuY2gsIE5VTEwsCisJCSAgTl8oInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IG5vLXN1Y2gtYnJhbmNoJyIpLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ISURERU4gfSwKKwkJT1BUX0VORCgpLAorCX07CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJbWVtc2V0KCZuZXcsIDAsIHNpemVvZihuZXcpKTsKKwlvcHRzLm92ZXJ3cml0ZV9pZ25vcmUgPSAxOworCW9wdHMucHJlZml4ID0gcHJlZml4OworCisJZ2l0bW9kdWxlc19jb25maWcoKTsKKwlnaXRfY29uZmlnKGdpdF9jaGVja291dF9jb25maWcsICZvcHRzKTsKKworCW9wdHMudHJhY2sgPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQ7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGNoZWNrb3V0X3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisKKwlpZiAoY29uZmxpY3Rfc3R5bGUpIHsKKwkJb3B0cy5tZXJnZSA9IDE7IC8qIGltcGxpZWQgKi8KKwkJZ2l0X3htZXJnZV9jb25maWcoIm1lcmdlLmNvbmZsaWN0c3R5bGUiLCBjb25mbGljdF9zdHlsZSwgTlVMTCk7CisJfQorCisJaWYgKCghIW9wdHMubmV3X2JyYW5jaCArICEhb3B0cy5uZXdfYnJhbmNoX2ZvcmNlICsgISFvcHRzLm5ld19vcnBoYW5fYnJhbmNoKSA+IDEpCisJCWRpZShfKCItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSk7CisKKwkvKgorCSAqIEZyb20gaGVyZSBvbiwgbmV3X2JyYW5jaCB3aWxsIGNvbnRhaW4gdGhlIGJyYW5jaCB0byBiZSBjaGVja2VkIG91dCwKKwkgKiBhbmQgbmV3X2JyYW5jaF9mb3JjZSBhbmQgbmV3X29ycGhhbl9icmFuY2ggd2lsbCB0ZWxsIHVzIHdoaWNoIG9uZSBvZgorCSAqIC1iLy1CLy0tb3JwaGFuIGlzIGJlaW5nIHVzZWQuCisJICovCisJaWYgKG9wdHMubmV3X2JyYW5jaF9mb3JjZSkKKwkJb3B0cy5uZXdfYnJhbmNoID0gb3B0cy5uZXdfYnJhbmNoX2ZvcmNlOworCisJaWYgKG9wdHMubmV3X29ycGhhbl9icmFuY2gpCisJCW9wdHMubmV3X2JyYW5jaCA9IG9wdHMubmV3X29ycGhhbl9icmFuY2g7CisKKwkvKiAtLXRyYWNrIHdpdGhvdXQgLWIvLUIvLS1vcnBoYW4gc2hvdWxkIERXSU0gKi8KKwlpZiAob3B0cy50cmFjayAhPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQgJiYgIW9wdHMubmV3X2JyYW5jaCkgeworCQljb25zdCBjaGFyICphcmd2MCA9IGFyZ3ZbMF07CisJCWlmICghYXJnYyB8fCAhc3RyY21wKGFyZ3YwLCAiLS0iKSkKKwkJCWRpZSAoXygiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIikpOworCQlpZiAoIXByZWZpeGNtcChhcmd2MCwgInJlZnMvIikpCisJCQlhcmd2MCArPSA1OworCQlpZiAoIXByZWZpeGNtcChhcmd2MCwgInJlbW90ZXMvIikpCisJCQlhcmd2MCArPSA4OworCQlhcmd2MCA9IHN0cmNocihhcmd2MCwgJy8nKTsKKwkJaWYgKCFhcmd2MCB8fCAhYXJndjBbMV0pCisJCQlkaWUgKF8oIk1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIpKTsKKwkJb3B0cy5uZXdfYnJhbmNoID0gYXJndjAgKyAxOworCX0KKworCS8qCisJICogRXh0cmFjdCBicmFuY2ggbmFtZSBmcm9tIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsIHNvCisJICogYWxsIHRoYXQgaXMgbGVmdCBpcyBwYXRoc3BlY3MuCisJICoKKwkgKiBIYW5kbGUKKwkgKgorCSAqICAxKSBnaXQgY2hlY2tvdXQgPHRyZWU+IC0tIFs8cGF0aHM+XQorCSAqICAyKSBnaXQgY2hlY2tvdXQgLS0gWzxwYXRocz5dCisJICogIDMpIGdpdCBjaGVja291dCA8c29tZXRoaW5nPiBbPHBhdGhzPl0KKwkgKgorCSAqIGluY2x1ZGluZyAibGFzdCBicmFuY2giIHN5bnRheCBhbmQgRFdJTS1lcnkgZm9yIG5hbWVzIG9mCisJICogcmVtb3RlIGJyYW5jaGVzLCBlcnJvcmluZyBvdXQgZm9yIGludmFsaWQgb3IgYW1iaWd1b3VzIGNhc2VzLgorCSAqLworCWlmIChhcmdjKSB7CisJCXVuc2lnbmVkIGNoYXIgcmV2WzIwXTsKKwkJaW50IGR3aW1fb2sgPQorCQkJIW9wdHMucGF0Y2hfbW9kZSAmJgorCQkJZHdpbV9uZXdfbG9jYWxfYnJhbmNoICYmCisJCQlvcHRzLnRyYWNrID09IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCAmJgorCQkJIW9wdHMubmV3X2JyYW5jaDsKKwkJaW50IG4gPSBwYXJzZV9icmFuY2huYW1lX2FyZyhhcmdjLCBhcmd2LCBkd2ltX29rLAorCQkJCQkgICAgICZuZXcsICZvcHRzLnNvdXJjZV90cmVlLAorCQkJCQkgICAgIHJldiwgJm9wdHMubmV3X2JyYW5jaCk7CisJCWFyZ3YgKz0gbjsKKwkJYXJnYyAtPSBuOworCX0KKworCWlmIChhcmdjKSB7CisJCW9wdHMucGF0aHNwZWMgPSBnZXRfcGF0aHNwZWMocHJlZml4LCBhcmd2KTsKKworCQlpZiAoIW9wdHMucGF0aHNwZWMpCisJCQlkaWUoXygiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iKSk7CisKKwkJLyoKKwkJICogVHJ5IHRvIGdpdmUgbW9yZSBoZWxwZnVsIHN1Z2dlc3Rpb24uCisJCSAqIG5ld19icmFuY2ggJiYgYXJnYyA+IDEgd2lsbCBiZSBjYXVnaHQgbGF0ZXIuCisJCSAqLworCQlpZiAob3B0cy5uZXdfYnJhbmNoICYmIGFyZ2MgPT0gMSkKKwkJCWRpZShfKCJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS5cbiIKKwkJCSAgICAgICJEaWQgeW91IGludGVuZCB0byBjaGVja291dCAnJXMnIHdoaWNoIGNhbiBub3QgYmUgcmVzb2x2ZWQgYXMgY29tbWl0PyIpLAorCQkJICAgIG9wdHMubmV3X2JyYW5jaCwgYXJndlswXSk7CisKKwkJaWYgKG9wdHMuZm9yY2VfZGV0YWNoKQorCQkJZGllKF8oImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIpLAorCQkJICAgIGFyZ3ZbMF0pOworCisJCWlmICgxIDwgISFvcHRzLndyaXRlb3V0X3N0YWdlICsgISFvcHRzLmZvcmNlICsgISFvcHRzLm1lcmdlKQorCQkJZGllKF8oImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorCQkJICAgICAgImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIikpOworCX0KKworCWlmIChvcHRzLm5ld19icmFuY2gpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQlvcHRzLmJyYW5jaF9leGlzdHMgPQorCQkJdmFsaWRhdGVfbmV3X2JyYW5jaG5hbWUob3B0cy5uZXdfYnJhbmNoLCAmYnVmLAorCQkJCQkJISFvcHRzLm5ld19icmFuY2hfZm9yY2UsCisJCQkJCQkhIW9wdHMubmV3X2JyYW5jaF9mb3JjZSk7CisKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCisJaWYgKG9wdHMucGF0Y2hfbW9kZSB8fCBvcHRzLnBhdGhzcGVjKQorCQlyZXR1cm4gY2hlY2tvdXRfcGF0aHMoJm9wdHMsIG5ldy5uYW1lKTsKKwllbHNlCisJCXJldHVybiBjaGVja291dF9icmFuY2goJm9wdHMsICZuZXcpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbGVhbi5jIGIvYnVpbHRpbi9jbGVhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzFjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NsZWFuLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiAiZ2l0IGNsZWFuIiBidWlsdGluIGNvbW1hbmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gQm9ocmVyCisgKgorICogQmFzZWQgb24gZ2l0LWNsZWFuLnNoIGJ5IFBhdmVsIFJvc2tpbgorICovCisKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCitzdGF0aWMgaW50IGZvcmNlID0gLTE7IC8qIHVuc2V0ICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidWlsdGluX2NsZWFuX3VzYWdlW10gPSB7CisJTl8oImdpdCBjbGVhbiBbLWRdIFstZl0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGdpdF9jbGVhbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiY2xlYW4ucmVxdWlyZWZvcmNlIikpCisJCWZvcmNlID0gIWdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCBleGNsdWRlX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpleGNsdWRlX2xpc3QgPSBvcHQtPnZhbHVlOworCXN0cmluZ19saXN0X2FwcGVuZChleGNsdWRlX2xpc3QsIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfY2xlYW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJaW50IHNob3dfb25seSA9IDAsIHJlbW92ZV9kaXJlY3RvcmllcyA9IDAsIHF1aWV0ID0gMCwgaWdub3JlZCA9IDA7CisJaW50IGlnbm9yZWRfb25seSA9IDAsIGNvbmZpZ19zZXQgPSAwLCBlcnJvcnMgPSAwOworCWludCBybV9mbGFncyA9IFJFTU9WRV9ESVJfS0VFUF9ORVNURURfR0lUOworCXN0cnVjdCBzdHJidWYgZGlyZWN0b3J5ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCXN0YXRpYyBjb25zdCBjaGFyICoqcGF0aHNwZWM7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhjbHVkZV9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwljb25zdCBjaGFyICpxbmFtZTsKKwljaGFyICpzZWVuID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIpKSwKKwkJT1BUX19EUllfUlVOKCZzaG93X29ubHksIE5fKCJkcnkgcnVuIikpLAorCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oImZvcmNlIikpLAorCQlPUFRfQk9PTEVBTignZCcsIE5VTEwsICZyZW1vdmVfZGlyZWN0b3JpZXMsCisJCQkJTl8oInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdlJywgImV4Y2x1ZGUiLCAmZXhjbHVkZV9saXN0LCBOXygicGF0dGVybiIpLAorCQkgIE5fKCJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIpLCBQQVJTRV9PUFRfTk9ORUcsIGV4Y2x1ZGVfY2IgfSwKKwkJT1BUX0JPT0xFQU4oJ3gnLCBOVUxMLCAmaWdub3JlZCwgTl8oInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iKSksCisJCU9QVF9CT09MRUFOKCdYJywgTlVMTCwgJmlnbm9yZWRfb25seSwKKwkJCQlOXygicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2NsZWFuX2NvbmZpZywgTlVMTCk7CisJaWYgKGZvcmNlIDwgMCkKKwkJZm9yY2UgPSAwOworCWVsc2UKKwkJY29uZmlnX3NldCA9IDE7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fY2xlYW5fdXNhZ2UsCisJCQkgICAgIDApOworCisJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwlpZiAoaWdub3JlZF9vbmx5KQorCQlkaXIuZmxhZ3MgfD0gRElSX1NIT1dfSUdOT1JFRDsKKworCWlmIChpZ25vcmVkICYmIGlnbm9yZWRfb25seSkKKwkJZGllKF8oIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpKTsKKworCWlmICghc2hvd19vbmx5ICYmICFmb3JjZSkgeworCQlpZiAoY29uZmlnX3NldCkKKwkJCWRpZShfKCJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLW4gbm9yIC1mIGdpdmVuOyAiCisJCQkJICAicmVmdXNpbmcgdG8gY2xlYW4iKSk7CisJCWVsc2UKKwkJCWRpZShfKCJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47ICIKKwkJCQkgICJyZWZ1c2luZyB0byBjbGVhbiIpKTsKKwl9CisKKwlpZiAoZm9yY2UgPiAxKQorCQlybV9mbGFncyA9IDA7CisKKwlkaXIuZmxhZ3MgfD0gRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVM7CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCWlmICghaWdub3JlZCkKKwkJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZXhjbHVkZV9saXN0Lm5yOyBpKyspCisJCWFkZF9leGNsdWRlKGV4Y2x1ZGVfbGlzdC5pdGVtc1tpXS5zdHJpbmcsICIiLCAwLAorCQkJICAgICZkaXIuZXhjbHVkZV9saXN0W0VYQ19DTURMXSk7CisKKwlwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YpOworCisJZmlsbF9kaXJlY3RvcnkoJmRpciwgcGF0aHNwZWMpOworCisJaWYgKHBhdGhzcGVjKQorCQlzZWVuID0geG1hbGxvYyhhcmdjID4gMCA/IGFyZ2MgOiAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKKwkJaW50IGxlbiwgcG9zOworCQlpbnQgbWF0Y2hlcyA9IDA7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCS8qCisJCSAqIFJlbW92ZSB0aGUgJy8nIGF0IHRoZSBlbmQgdGhhdCBkaXJlY3RvcnkKKwkJICogd2Fsa2luZyBhZGRzIGZvciBkaXJlY3RvcnkgZW50cmllcy4KKwkJICovCisJCWxlbiA9IGVudC0+bGVuOworCQlpZiAobGVuICYmIGVudC0+bmFtZVtsZW4tMV0gPT0gJy8nKQorCQkJbGVuLS07CisJCXBvcyA9IGNhY2hlX25hbWVfcG9zKGVudC0+bmFtZSwgbGVuKTsKKwkJaWYgKDAgPD0gcG9zKQorCQkJY29udGludWU7CS8qIGV4YWN0IG1hdGNoICovCisJCXBvcyA9IC1wb3MgLSAxOworCQlpZiAocG9zIDwgYWN0aXZlX25yKSB7CisJCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQkJaWYgKGNlX25hbWVsZW4oY2UpID09IGxlbiAmJgorCQkJICAgICFtZW1jbXAoY2UtPm5hbWUsIGVudC0+bmFtZSwgbGVuKSkKKwkJCQljb250aW51ZTsgLyogWXVwLCB0aGlzIG9uZSBleGlzdHMgdW5tZXJnZWQgKi8KKwkJfQorCisJCS8qCisJCSAqIHdlIG1pZ2h0IGhhdmUgcmVtb3ZlZCB0aGlzIGFzIHBhcnQgb2YgZWFybGllcgorCQkgKiByZWN1cnNpdmUgZGlyZWN0b3J5IHJlbW92YWwsIHNvIGxzdGF0KCkgaGVyZSBjb3VsZAorCQkgKiBmYWlsIHdpdGggRU5PRU5ULgorCQkgKi8KKwkJaWYgKGxzdGF0KGVudC0+bmFtZSwgJnN0KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXRoc3BlYykgeworCQkJbWVtc2V0KHNlZW4sIDAsIGFyZ2MgPiAwID8gYXJnYyA6IDEpOworCQkJbWF0Y2hlcyA9IG1hdGNoX3BhdGhzcGVjKHBhdGhzcGVjLCBlbnQtPm5hbWUsIGxlbiwKKwkJCQkJCSAwLCBzZWVuKTsKKwkJfQorCisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQlzdHJidWZfYWRkc3RyKCZkaXJlY3RvcnksIGVudC0+bmFtZSk7CisJCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoZGlyZWN0b3J5LmJ1ZiwgZGlyZWN0b3J5LmxlbiwgJmJ1ZiwgcHJlZml4KTsKKwkJCWlmIChzaG93X29ubHkgJiYgKHJlbW92ZV9kaXJlY3RvcmllcyB8fAorCQkJICAgIChtYXRjaGVzID09IE1BVENIRURfRVhBQ1RMWSkpKSB7CisJCQkJcHJpbnRmKF8oIldvdWxkIHJlbW92ZSAlc1xuIiksIHFuYW1lKTsKKwkJCX0gZWxzZSBpZiAocmVtb3ZlX2RpcmVjdG9yaWVzIHx8CisJCQkJICAgKG1hdGNoZXMgPT0gTUFUQ0hFRF9FWEFDVExZKSkgeworCQkJCWlmICghcXVpZXQpCisJCQkJCXByaW50ZihfKCJSZW1vdmluZyAlc1xuIiksIHFuYW1lKTsKKwkJCQlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmZGlyZWN0b3J5LAorCQkJCQkJCSAgIHJtX2ZsYWdzKSAhPSAwKSB7CisJCQkJCXdhcm5pbmcoXygiZmFpbGVkIHRvIHJlbW92ZSAlcyIpLCBxbmFtZSk7CisJCQkJCWVycm9ycysrOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoc2hvd19vbmx5KSB7CisJCQkJcHJpbnRmKF8oIldvdWxkIG5vdCByZW1vdmUgJXNcbiIpLCBxbmFtZSk7CisJCQl9IGVsc2UgeworCQkJCXByaW50ZihfKCJOb3QgcmVtb3ZpbmcgJXNcbiIpLCBxbmFtZSk7CisJCQl9CisJCQlzdHJidWZfcmVzZXQoJmRpcmVjdG9yeSk7CisJCX0gZWxzZSB7CisJCQlpZiAocGF0aHNwZWMgJiYgIW1hdGNoZXMpCisJCQkJY29udGludWU7CisJCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoZW50LT5uYW1lLCAtMSwgJmJ1ZiwgcHJlZml4KTsKKwkJCWlmIChzaG93X29ubHkpIHsKKwkJCQlwcmludGYoXygiV291bGQgcmVtb3ZlICVzXG4iKSwgcW5hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmICghcXVpZXQpIHsKKwkJCQlwcmludGYoXygiUmVtb3ZpbmcgJXNcbiIpLCBxbmFtZSk7CisJCQl9CisJCQlpZiAodW5saW5rKGVudC0+bmFtZSkgIT0gMCkgeworCQkJCXdhcm5pbmcoXygiZmFpbGVkIHRvIHJlbW92ZSAlcyIpLCBxbmFtZSk7CisJCQkJZXJyb3JzKys7CisJCQl9CisJCX0KKwl9CisJZnJlZShzZWVuKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZkaXJlY3RvcnkpOworCXN0cmluZ19saXN0X2NsZWFyKCZleGNsdWRlX2xpc3QsIDApOworCXJldHVybiAoZXJyb3JzICE9IDApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbG9uZS5jIGIvYnVpbHRpbi9jbG9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMmY3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Nsb25lLmMKQEAgLTAsMCArMSw5MTQgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgY2xvbmUiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+LAorICoJCSAyMDA4IERhbmllbCBCYXJrYWxvdyA8YmFya2Fsb3dAaWFiZXJ2b24ub3JnPgorICogQmFzZWQgb24gZ2l0LWNvbW1pdC5zaCBieSBKdW5pbyBDIEhhbWFubyBhbmQgTGludXMgVG9ydmFsZHMKKyAqCisgKiBDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIGRpZmZlcmVudCBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCB5ZXQgZXhpc3QuCisgKi8KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZmV0Y2gtcGFjay5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicGFjay1yZWZzLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCisvKgorICogT3ZlcmFsbCBGSVhNRXM6CisgKiAgLSByZXNwZWN0IERCX0VOVklST05NRU5UIGZvciAuZ2l0L29iamVjdHMuCisgKgorICogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgKiAgLSBkcm9wcGluZyB1c2Utc2VwYXJhdGUtcmVtb3RlIGFuZCBuby1zZXBhcmF0ZS1yZW1vdGUgY29tcGF0aWJpbGl0eQorICoKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2Nsb25lX3VzYWdlW10gPSB7CisJTl8oImdpdCBjbG9uZSBbb3B0aW9uc10gWy0tXSA8cmVwbz4gWzxkaXI+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgb3B0aW9uX25vX2NoZWNrb3V0LCBvcHRpb25fYmFyZSwgb3B0aW9uX21pcnJvciwgb3B0aW9uX3NpbmdsZV9icmFuY2ggPSAtMTsKK3N0YXRpYyBpbnQgb3B0aW9uX2xvY2FsID0gLTEsIG9wdGlvbl9ub19oYXJkbGlua3MsIG9wdGlvbl9zaGFyZWQsIG9wdGlvbl9yZWN1cnNpdmU7CitzdGF0aWMgY2hhciAqb3B0aW9uX3RlbXBsYXRlLCAqb3B0aW9uX2RlcHRoOworc3RhdGljIGNoYXIgKm9wdGlvbl9vcmlnaW4gPSBOVUxMOworc3RhdGljIGNoYXIgKm9wdGlvbl9icmFuY2ggPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKnJlYWxfZ2l0X2RpcjsKK3N0YXRpYyBjaGFyICpvcHRpb25fdXBsb2FkX3BhY2sgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKK3N0YXRpYyBpbnQgb3B0aW9uX3ZlcmJvc2l0eTsKK3N0YXRpYyBpbnQgb3B0aW9uX3Byb2dyZXNzID0gLTE7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9wdGlvbl9jb25maWc7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9wdGlvbl9yZWZlcmVuY2U7CisKK3N0YXRpYyBpbnQgb3B0X3BhcnNlX3JlZmVyZW5jZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqb3B0aW9uX3JlZmVyZW5jZSA9IG9wdC0+dmFsdWU7CisJaWYgKCFhcmcpCisJCXJldHVybiAtMTsKKwlzdHJpbmdfbGlzdF9hcHBlbmQob3B0aW9uX3JlZmVyZW5jZSwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9jbG9uZV9vcHRpb25zW10gPSB7CisJT1BUX19WRVJCT1NJVFkoJm9wdGlvbl92ZXJib3NpdHkpLAorCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZvcHRpb25fcHJvZ3Jlc3MsCisJCSBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCU9QVF9CT09MRUFOKCduJywgIm5vLWNoZWNrb3V0IiwgJm9wdGlvbl9ub19jaGVja291dCwKKwkJICAgIE5fKCJkb24ndCBjcmVhdGUgYSBjaGVja291dCIpKSwKKwlPUFRfQk9PTEVBTigwLCAiYmFyZSIsICZvcHRpb25fYmFyZSwgTl8oImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIpKSwKKwl7IE9QVElPTl9CT09MRUFOLCAwLCAibmFrZWQiLCAmb3B0aW9uX2JhcmUsIE5VTEwsCisJCU5fKCJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiKSwKKwkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX0hJRERFTiB9LAorCU9QVF9CT09MRUFOKDAsICJtaXJyb3IiLCAmb3B0aW9uX21pcnJvciwKKwkJICAgIE5fKCJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIpKSwKKwlPUFRfQk9PTCgnbCcsICJsb2NhbCIsICZvcHRpb25fbG9jYWwsCisJCU5fKCJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIpKSwKKwlPUFRfQk9PTEVBTigwLCAibm8taGFyZGxpbmtzIiwgJm9wdGlvbl9ub19oYXJkbGlua3MsCisJCSAgICBOXygiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiKSksCisJT1BUX0JPT0xFQU4oJ3MnLCAic2hhcmVkIiwgJm9wdGlvbl9zaGFyZWQsCisJCSAgICBOXygic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiKSksCisJT1BUX0JPT0xFQU4oMCwgInJlY3Vyc2l2ZSIsICZvcHRpb25fcmVjdXJzaXZlLAorCQkgICAgTl8oImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiKSksCisJT1BUX0JPT0xFQU4oMCwgInJlY3Vyc2Utc3VibW9kdWxlcyIsICZvcHRpb25fcmVjdXJzaXZlLAorCQkgICAgTl8oImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiKSksCisJT1BUX1NUUklORygwLCAidGVtcGxhdGUiLCAmb3B0aW9uX3RlbXBsYXRlLCBOXygidGVtcGxhdGUtZGlyZWN0b3J5IiksCisJCSAgIE5fKCJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIikpLAorCU9QVF9DQUxMQkFDSygwICwgInJlZmVyZW5jZSIsICZvcHRpb25fcmVmZXJlbmNlLCBOXygicmVwbyIpLAorCQkgICAgIE5fKCJyZWZlcmVuY2UgcmVwb3NpdG9yeSIpLCAmb3B0X3BhcnNlX3JlZmVyZW5jZSksCisJT1BUX1NUUklORygnbycsICJvcmlnaW4iLCAmb3B0aW9uX29yaWdpbiwgTl8oIm5hbWUiKSwKKwkJICAgTl8oInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIpKSwKKwlPUFRfU1RSSU5HKCdiJywgImJyYW5jaCIsICZvcHRpb25fYnJhbmNoLCBOXygiYnJhbmNoIiksCisJCSAgIE5fKCJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIikpLAorCU9QVF9TVFJJTkcoJ3UnLCAidXBsb2FkLXBhY2siLCAmb3B0aW9uX3VwbG9hZF9wYWNrLCBOXygicGF0aCIpLAorCQkgICBOXygicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIpKSwKKwlPUFRfU1RSSU5HKDAsICJkZXB0aCIsICZvcHRpb25fZGVwdGgsIE5fKCJkZXB0aCIpLAorCQkgICAgTl8oImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIpKSwKKwlPUFRfQk9PTCgwLCAic2luZ2xlLWJyYW5jaCIsICZvcHRpb25fc2luZ2xlX2JyYW5jaCwKKwkJICAgIE5fKCJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giKSksCisJT1BUX1NUUklORygwLCAic2VwYXJhdGUtZ2l0LWRpciIsICZyZWFsX2dpdF9kaXIsIE5fKCJnaXRkaXIiKSwKKwkJICAgTl8oInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiKSksCisJT1BUX1NUUklOR19MSVNUKCdjJywgImNvbmZpZyIsICZvcHRpb25fY29uZmlnLCBOXygia2V5PXZhbHVlIiksCisJCQlOXygic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3Zfc3VibW9kdWxlW10gPSB7CisJInN1Ym1vZHVsZSIsICJ1cGRhdGUiLCAiLS1pbml0IiwgIi0tcmVjdXJzaXZlIiwgTlVMTAorfTsKKworc3RhdGljIGNoYXIgKmdldF9yZXBvX3BhdGgoY29uc3QgY2hhciAqcmVwbywgaW50ICppc19idW5kbGUpCit7CisJc3RhdGljIGNoYXIgKnN1ZmZpeFtdID0geyAiLy5naXQiLCAiIiwgIi5naXQvLmdpdCIsICIuZ2l0IiB9OworCXN0YXRpYyBjaGFyICpidW5kbGVfc3VmZml4W10gPSB7ICIuYnVuZGxlIiwgIiIgfTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1ZmZpeCk7IGkrKykgeworCQljb25zdCBjaGFyICpwYXRoOworCQlwYXRoID0gbWtwYXRoKCIlcyVzIiwgcmVwbywgc3VmZml4W2ldKTsKKwkJaWYgKHN0YXQocGF0aCwgJnN0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSAmJiBpc19naXRfZGlyZWN0b3J5KHBhdGgpKSB7CisJCQkqaXNfYnVuZGxlID0gMDsKKwkJCXJldHVybiB4c3RyZHVwKGFic29sdXRlX3BhdGgocGF0aCkpOworCQl9IGVsc2UgaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkgJiYgc3Quc3Rfc2l6ZSA+IDgpIHsKKwkJCS8qIElzIGl0IGEgImdpdGZpbGUiPyAqLworCQkJY2hhciBzaWduYXR1cmVbOF07CisJCQlpbnQgbGVuLCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCQkJaWYgKGZkIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWxlbiA9IHJlYWRfaW5fZnVsbChmZCwgc2lnbmF0dXJlLCA4KTsKKwkJCWNsb3NlKGZkKTsKKwkJCWlmIChsZW4gIT0gOCB8fCBzdHJuY21wKHNpZ25hdHVyZSwgImdpdGRpcjogIiwgOCkpCisJCQkJY29udGludWU7CisJCQlwYXRoID0gcmVhZF9naXRmaWxlKHBhdGgpOworCQkJaWYgKHBhdGgpIHsKKwkJCQkqaXNfYnVuZGxlID0gMDsKKwkJCQlyZXR1cm4geHN0cmR1cChhYnNvbHV0ZV9wYXRoKHBhdGgpKTsKKwkJCX0KKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1bmRsZV9zdWZmaXgpOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aDsKKwkJcGF0aCA9IG1rcGF0aCgiJXMlcyIsIHJlcG8sIGJ1bmRsZV9zdWZmaXhbaV0pOworCQlpZiAoIXN0YXQocGF0aCwgJnN0KSAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKSB7CisJCQkqaXNfYnVuZGxlID0gMTsKKwkJCXJldHVybiB4c3RyZHVwKGFic29sdXRlX3BhdGgocGF0aCkpOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICpndWVzc19kaXJfbmFtZShjb25zdCBjaGFyICpyZXBvLCBpbnQgaXNfYnVuZGxlLCBpbnQgaXNfYmFyZSkKK3sKKwljb25zdCBjaGFyICplbmQgPSByZXBvICsgc3RybGVuKHJlcG8pLCAqc3RhcnQ7CisJY2hhciAqZGlyOworCisJLyoKKwkgKiBTdHJpcCB0cmFpbGluZyBzcGFjZXMsIHNsYXNoZXMgYW5kIC8uZ2l0CisJICovCisJd2hpbGUgKHJlcG8gPCBlbmQgJiYgKGlzX2Rpcl9zZXAoZW5kWy0xXSkgfHwgaXNzcGFjZShlbmRbLTFdKSkpCisJCWVuZC0tOworCWlmIChlbmQgLSByZXBvID4gNSAmJiBpc19kaXJfc2VwKGVuZFstNV0pICYmCisJICAgICFzdHJuY21wKGVuZCAtIDQsICIuZ2l0IiwgNCkpIHsKKwkJZW5kIC09IDU7CisJCXdoaWxlIChyZXBvIDwgZW5kICYmIGlzX2Rpcl9zZXAoZW5kWy0xXSkpCisJCQllbmQtLTsKKwl9CisKKwkvKgorCSAqIEZpbmQgbGFzdCBjb21wb25lbnQsIGJ1dCBiZSBwcmVwYXJlZCB0aGF0IHJlcG8gY291bGQgaGF2ZQorCSAqIHRoZSBmb3JtICAicmVtb3RlLmV4YW1wbGUuY29tOmZvby5naXQiLCBpLmUuIG5vIHNsYXNoCisJICogaW4gdGhlIGRpcmVjdG9yeSBwYXJ0LgorCSAqLworCXN0YXJ0ID0gZW5kOworCXdoaWxlIChyZXBvIDwgc3RhcnQgJiYgIWlzX2Rpcl9zZXAoc3RhcnRbLTFdKSAmJiBzdGFydFstMV0gIT0gJzonKQorCQlzdGFydC0tOworCisJLyoKKwkgKiBTdHJpcCAue2J1bmRsZSxnaXR9LgorCSAqLworCWlmIChpc19idW5kbGUpIHsKKwkJaWYgKGVuZCAtIHN0YXJ0ID4gNyAmJiAhc3RybmNtcChlbmQgLSA3LCAiLmJ1bmRsZSIsIDcpKQorCQkJZW5kIC09IDc7CisJfSBlbHNlIHsKKwkJaWYgKGVuZCAtIHN0YXJ0ID4gNCAmJiAhc3RybmNtcChlbmQgLSA0LCAiLmdpdCIsIDQpKQorCQkJZW5kIC09IDQ7CisJfQorCisJaWYgKGlzX2JhcmUpIHsKKwkJc3RydWN0IHN0cmJ1ZiByZXN1bHQgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGYoJnJlc3VsdCwgIiUuKnMuZ2l0IiwgKGludCkoZW5kIC0gc3RhcnQpLCBzdGFydCk7CisJCWRpciA9IHN0cmJ1Zl9kZXRhY2goJnJlc3VsdCwgTlVMTCk7CisJfSBlbHNlCisJCWRpciA9IHhzdHJuZHVwKHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJLyoKKwkgKiBSZXBsYWNlIHNlcXVlbmNlcyBvZiAnY29udHJvbCcgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZQorCSAqIHdpdGggb25lIGFzY2lpIHNwYWNlLCByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzLgorCSAqLworCWlmICgqZGlyKSB7CisJCWNoYXIgKm91dCA9IGRpcjsKKwkJaW50IHByZXZfc3BhY2UgPSAxIC8qIHN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLzsKKwkJZm9yIChlbmQgPSBkaXI7ICplbmQ7ICsrZW5kKSB7CisJCQljaGFyIGNoID0gKmVuZDsKKwkJCWlmICgodW5zaWduZWQgY2hhciljaCA8ICdceDIwJykKKwkJCQljaCA9ICdceDIwJzsKKwkJCWlmIChpc3NwYWNlKGNoKSkgeworCQkJCWlmIChwcmV2X3NwYWNlKQorCQkJCQljb250aW51ZTsKKwkJCQlwcmV2X3NwYWNlID0gMTsKKwkJCX0gZWxzZQorCQkJCXByZXZfc3BhY2UgPSAwOworCQkJKm91dCsrID0gY2g7CisJCX0KKwkJKm91dCA9ICdcMCc7CisJCWlmIChvdXQgPiBkaXIgJiYgcHJldl9zcGFjZSkKKwkJCW91dFstMV0gPSAnXDAnOworCX0KKwlyZXR1cm4gZGlyOworfQorCitzdGF0aWMgdm9pZCBzdHJpcF90cmFpbGluZ19zbGFzaGVzKGNoYXIgKmRpcikKK3sKKwljaGFyICplbmQgPSBkaXIgKyBzdHJsZW4oZGlyKTsKKworCXdoaWxlIChkaXIgPCBlbmQgLSAxICYmIGlzX2Rpcl9zZXAoZW5kWy0xXSkpCisJCWVuZC0tOworCSplbmQgPSAnXDAnOworfQorCitzdGF0aWMgaW50IGFkZF9vbmVfcmVmZXJlbmNlKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQoreworCWNoYXIgKnJlZl9naXQ7CisJc3RydWN0IHN0cmJ1ZiBhbHRlcm5hdGUgPSBTVFJCVUZfSU5JVDsKKworCS8qIEJld2FyZTogcmVhbF9wYXRoKCkgYW5kIG1rcGF0aCgpIHJldHVybiBzdGF0aWMgYnVmZmVyICovCisJcmVmX2dpdCA9IHhzdHJkdXAocmVhbF9wYXRoKGl0ZW0tPnN0cmluZykpOworCWlmIChpc19kaXJlY3RvcnkobWtwYXRoKCIlcy8uZ2l0L29iamVjdHMiLCByZWZfZ2l0KSkpIHsKKwkJY2hhciAqcmVmX2dpdF9naXQgPSBta3BhdGhkdXAoIiVzLy5naXQiLCByZWZfZ2l0KTsKKwkJZnJlZShyZWZfZ2l0KTsKKwkJcmVmX2dpdCA9IHJlZl9naXRfZ2l0OworCX0gZWxzZSBpZiAoIWlzX2RpcmVjdG9yeShta3BhdGgoIiVzL29iamVjdHMiLCByZWZfZ2l0KSkpCisJCWRpZShfKCJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIGRpcmVjdG9yeS4iKSwKKwkJICAgIGl0ZW0tPnN0cmluZyk7CisKKwlzdHJidWZfYWRkZigmYWx0ZXJuYXRlLCAiJXMvb2JqZWN0cyIsIHJlZl9naXQpOworCWFkZF90b19hbHRlcm5hdGVzX2ZpbGUoYWx0ZXJuYXRlLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmFsdGVybmF0ZSk7CisJZnJlZShyZWZfZ2l0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcmVmZXJlbmNlKHZvaWQpCit7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3QoJm9wdGlvbl9yZWZlcmVuY2UsIGFkZF9vbmVfcmVmZXJlbmNlLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY29weV9hbHRlcm5hdGVzKHN0cnVjdCBzdHJidWYgKnNyYywgc3RydWN0IHN0cmJ1ZiAqZHN0LAorCQkJICAgIGNvbnN0IGNoYXIgKnNyY19yZXBvKQoreworCS8qCisJICogUmVhZCBmcm9tIHRoZSBzb3VyY2Ugb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgZmlsZQorCSAqIGFuZCBjb3B5IHRoZSBlbnRyaWVzIHRvIGNvcnJlc3BvbmRpbmcgZmlsZSBpbiB0aGUKKwkgKiBkZXN0aW5hdGlvbiByZXBvc2l0b3J5IHdpdGggYWRkX3RvX2FsdGVybmF0ZXNfZmlsZSgpLgorCSAqIEJvdGggc3JjIGFuZCBkc3QgaGF2ZSAiJHBhdGgvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiLgorCSAqCisJICogSW5zdGVhZCBvZiBjb3B5aW5nIGJpdC1mb3ItYml0IGZyb20gdGhlIG9yaWdpbmFsLAorCSAqIHdlIG5lZWQgdG8gYXBwZW5kIHRvIGV4aXN0aW5nIG9uZSBzbyB0aGF0IHRoZSBhbHJlYWR5CisJICogY3JlYXRlZCBlbnRyeSB2aWEgImNsb25lIC1zIiBpcyBub3QgbG9zdCwgYW5kIGFsc28KKwkgKiB0byB0dXJuIGVudHJpZXMgd2l0aCBwYXRocyByZWxhdGl2ZSB0byB0aGUgb3JpZ2luYWwKKwkgKiBhYnNvbHV0ZSwgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGluIHRoZSBuZXcgcmVwb3NpdG9yeS4KKwkgKi8KKwlGSUxFICppbiA9IGZvcGVuKHNyYy0+YnVmLCAiciIpOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBpbiwgJ1xuJykgIT0gRU9GKSB7CisJCWNoYXIgKmFic19wYXRoLCBhYnNfYnVmW1BBVEhfTUFYXTsKKwkJaWYgKCFsaW5lLmxlbiB8fCBsaW5lLmJ1ZlswXSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJaWYgKGlzX2Fic29sdXRlX3BhdGgobGluZS5idWYpKSB7CisJCQlhZGRfdG9fYWx0ZXJuYXRlc19maWxlKGxpbmUuYnVmKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWFic19wYXRoID0gbWtwYXRoKCIlcy9vYmplY3RzLyVzIiwgc3JjX3JlcG8sIGxpbmUuYnVmKTsKKwkJbm9ybWFsaXplX3BhdGhfY29weShhYnNfYnVmLCBhYnNfcGF0aCk7CisJCWFkZF90b19hbHRlcm5hdGVzX2ZpbGUoYWJzX2J1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlmY2xvc2UoaW4pOworfQorCitzdGF0aWMgdm9pZCBjb3B5X29yX2xpbmtfZGlyZWN0b3J5KHN0cnVjdCBzdHJidWYgKnNyYywgc3RydWN0IHN0cmJ1ZiAqZGVzdCwKKwkJCQkgICBjb25zdCBjaGFyICpzcmNfcmVwbywgaW50IHNyY19iYXNlbGVuKQoreworCXN0cnVjdCBkaXJlbnQgKmRlOworCXN0cnVjdCBzdGF0IGJ1ZjsKKwlpbnQgc3JjX2xlbiwgZGVzdF9sZW47CisJRElSICpkaXI7CisKKwlkaXIgPSBvcGVuZGlyKHNyYy0+YnVmKTsKKwlpZiAoIWRpcikKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBvcGVuICclcyciKSwgc3JjLT5idWYpOworCisJaWYgKG1rZGlyKGRlc3QtPmJ1ZiwgMDc3NykpIHsKKwkJaWYgKGVycm5vICE9IEVFWElTVCkKKwkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIiksIGRlc3QtPmJ1Zik7CisJCWVsc2UgaWYgKHN0YXQoZGVzdC0+YnVmLCAmYnVmKSkKKwkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiksIGRlc3QtPmJ1Zik7CisJCWVsc2UgaWYgKCFTX0lTRElSKGJ1Zi5zdF9tb2RlKSkKKwkJCWRpZShfKCIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIpLCBkZXN0LT5idWYpOworCX0KKworCXN0cmJ1Zl9hZGRjaChzcmMsICcvJyk7CisJc3JjX2xlbiA9IHNyYy0+bGVuOworCXN0cmJ1Zl9hZGRjaChkZXN0LCAnLycpOworCWRlc3RfbGVuID0gZGVzdC0+bGVuOworCisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJidWZfc2V0bGVuKHNyYywgc3JjX2xlbik7CisJCXN0cmJ1Zl9hZGRzdHIoc3JjLCBkZS0+ZF9uYW1lKTsKKwkJc3RyYnVmX3NldGxlbihkZXN0LCBkZXN0X2xlbik7CisJCXN0cmJ1Zl9hZGRzdHIoZGVzdCwgZGUtPmRfbmFtZSk7CisJCWlmIChzdGF0KHNyYy0+YnVmLCAmYnVmKSkgeworCQkJd2FybmluZyAoXygiZmFpbGVkIHRvIHN0YXQgJXNcbiIpLCBzcmMtPmJ1Zik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoU19JU0RJUihidWYuc3RfbW9kZSkpIHsKKwkJCWlmIChkZS0+ZF9uYW1lWzBdICE9ICcuJykKKwkJCQljb3B5X29yX2xpbmtfZGlyZWN0b3J5KHNyYywgZGVzdCwKKwkJCQkJCSAgICAgICBzcmNfcmVwbywgc3JjX2Jhc2VsZW4pOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBGaWxlcyB0aGF0IGNhbm5vdCBiZSBjb3BpZWQgYml0LWZvci1iaXQuLi4gKi8KKwkJaWYgKCFzdHJjbXAoc3JjLT5idWYgKyBzcmNfYmFzZWxlbiwgIi9pbmZvL2FsdGVybmF0ZXMiKSkgeworCQkJY29weV9hbHRlcm5hdGVzKHNyYywgZGVzdCwgc3JjX3JlcG8pOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAodW5saW5rKGRlc3QtPmJ1ZikgJiYgZXJybm8gIT0gRU5PRU5UKQorCQkJZGllX2Vycm5vKF8oImZhaWxlZCB0byB1bmxpbmsgJyVzJyIpLCBkZXN0LT5idWYpOworCQlpZiAoIW9wdGlvbl9ub19oYXJkbGlua3MpIHsKKwkJCWlmICghbGluayhzcmMtPmJ1ZiwgZGVzdC0+YnVmKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChvcHRpb25fbG9jYWwgPiAwKQorCQkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIpLCBkZXN0LT5idWYpOworCQkJb3B0aW9uX25vX2hhcmRsaW5rcyA9IDE7CisJCX0KKwkJaWYgKGNvcHlfZmlsZV93aXRoX3RpbWUoZGVzdC0+YnVmLCBzcmMtPmJ1ZiwgMDY2NikpCisJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIiksIGRlc3QtPmJ1Zik7CisJfQorCWNsb3NlZGlyKGRpcik7Cit9CisKK3N0YXRpYyB2b2lkIGNsb25lX2xvY2FsKGNvbnN0IGNoYXIgKnNyY19yZXBvLCBjb25zdCBjaGFyICpkZXN0X3JlcG8pCit7CisJaWYgKG9wdGlvbl9zaGFyZWQpIHsKKwkJc3RydWN0IHN0cmJ1ZiBhbHQgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGYoJmFsdCwgIiVzL29iamVjdHMiLCBzcmNfcmVwbyk7CisJCWFkZF90b19hbHRlcm5hdGVzX2ZpbGUoYWx0LmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZhbHQpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgc3JjID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgZGVzdCA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkZigmc3JjLCAiJXMvb2JqZWN0cyIsIHNyY19yZXBvKTsKKwkJc3RyYnVmX2FkZGYoJmRlc3QsICIlcy9vYmplY3RzIiwgZGVzdF9yZXBvKTsKKwkJY29weV9vcl9saW5rX2RpcmVjdG9yeSgmc3JjLCAmZGVzdCwgc3JjX3JlcG8sIHNyYy5sZW4pOworCQlzdHJidWZfcmVsZWFzZSgmc3JjKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmRlc3QpOworCX0KKworCWlmICgwIDw9IG9wdGlvbl92ZXJib3NpdHkpCisJCXByaW50ZihfKCJkb25lLlxuIikpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqanVua193b3JrX3RyZWU7CitzdGF0aWMgY29uc3QgY2hhciAqanVua19naXRfZGlyOworc3RhdGljIHBpZF90IGp1bmtfcGlkOworCitzdGF0aWMgdm9pZCByZW1vdmVfanVuayh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpZiAoZ2V0cGlkKCkgIT0ganVua19waWQpCisJCXJldHVybjsKKwlpZiAoanVua19naXRfZGlyKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBqdW5rX2dpdF9kaXIpOworCQlyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZzYiwgMCk7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCX0KKwlpZiAoanVua193b3JrX3RyZWUpIHsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIGp1bmtfd29ya190cmVlKTsKKwkJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmc2IsIDApOworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9qdW5rX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJcmVtb3ZlX2p1bmsoKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKmZpbmRfcmVtb3RlX2JyYW5jaChjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLCBjb25zdCBjaGFyICpicmFuY2gpCit7CisJc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCBzdHJidWYgaGVhZCA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRzdHIoJmhlYWQsICJyZWZzL2hlYWRzLyIpOworCXN0cmJ1Zl9hZGRzdHIoJmhlYWQsIGJyYW5jaCk7CisJcmVmID0gZmluZF9yZWZfYnlfbmFtZShyZWZzLCBoZWFkLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmhlYWQpOworCisJaWYgKHJlZikKKwkJcmV0dXJuIHJlZjsKKworCXN0cmJ1Zl9hZGRzdHIoJmhlYWQsICJyZWZzL3RhZ3MvIik7CisJc3RyYnVmX2FkZHN0cigmaGVhZCwgYnJhbmNoKTsKKwlyZWYgPSBmaW5kX3JlZl9ieV9uYW1lKHJlZnMsIGhlYWQuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmaGVhZCk7CisKKwlyZXR1cm4gcmVmOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqd2FudGVkX3BlZXJfcmVmcyhjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAorCQlzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYykKK3sKKwlzdHJ1Y3QgcmVmICpoZWFkID0gY29weV9yZWYoZmluZF9yZWZfYnlfbmFtZShyZWZzLCAiSEVBRCIpKTsKKwlzdHJ1Y3QgcmVmICpsb2NhbF9yZWZzID0gaGVhZDsKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9IGhlYWQgPyAmaGVhZC0+bmV4dCA6ICZsb2NhbF9yZWZzOworCisJaWYgKG9wdGlvbl9zaW5nbGVfYnJhbmNoKSB7CisJCXN0cnVjdCByZWYgKnJlbW90ZV9oZWFkID0gTlVMTDsKKworCQlpZiAoIW9wdGlvbl9icmFuY2gpCisJCQlyZW1vdGVfaGVhZCA9IGd1ZXNzX3JlbW90ZV9oZWFkKGhlYWQsIHJlZnMsIDApOworCQllbHNlIHsKKwkJCWxvY2FsX3JlZnMgPSBOVUxMOworCQkJdGFpbCA9ICZsb2NhbF9yZWZzOworCQkJcmVtb3RlX2hlYWQgPSBjb3B5X3JlZihmaW5kX3JlbW90ZV9icmFuY2gocmVmcywgb3B0aW9uX2JyYW5jaCkpOworCQl9CisKKwkJaWYgKCFyZW1vdGVfaGVhZCAmJiBvcHRpb25fYnJhbmNoKQorCQkJd2FybmluZyhfKCJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIpLAorCQkJCW9wdGlvbl9icmFuY2gpOworCQllbHNlIHsKKwkJCWdldF9mZXRjaF9tYXAocmVtb3RlX2hlYWQsIHJlZnNwZWMsICZ0YWlsLCAwKTsKKworCQkJLyogaWYgLS1icmFuY2g9dGFnLCBwdWxsIHRoZSByZXF1ZXN0ZWQgdGFnIGV4cGxpY2l0bHkgKi8KKwkJCWdldF9mZXRjaF9tYXAocmVtb3RlX2hlYWQsIHRhZ19yZWZzcGVjLCAmdGFpbCwgMCk7CisJCX0KKwl9IGVsc2UKKwkJZ2V0X2ZldGNoX21hcChyZWZzLCByZWZzcGVjLCAmdGFpbCwgMCk7CisKKwlpZiAoIW9wdGlvbl9taXJyb3IgJiYgIW9wdGlvbl9zaW5nbGVfYnJhbmNoKQorCQlnZXRfZmV0Y2hfbWFwKHJlZnMsIHRhZ19yZWZzcGVjLCAmdGFpbCwgMCk7CisKKwlyZXR1cm4gbG9jYWxfcmVmczsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcmVtb3RlX3JlZnMoY29uc3Qgc3RydWN0IHJlZiAqbG9jYWxfcmVmcykKK3sKKwljb25zdCBzdHJ1Y3QgcmVmICpyOworCisJZm9yIChyID0gbG9jYWxfcmVmczsgcjsgciA9IHItPm5leHQpIHsKKwkJaWYgKCFyLT5wZWVyX3JlZikKKwkJCWNvbnRpbnVlOworCQlhZGRfcGFja2VkX3JlZihyLT5wZWVyX3JlZi0+bmFtZSwgci0+b2xkX3NoYTEpOworCX0KKworCXBhY2tfcmVmcyhQQUNLX1JFRlNfQUxMKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfZm9sbG93dGFncyhjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLCBjb25zdCBjaGFyICptc2cpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCWZvciAocmVmID0gcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJaWYgKHByZWZpeGNtcChyZWYtPm5hbWUsICJyZWZzL3RhZ3MvIikpCisJCQljb250aW51ZTsKKwkJaWYgKCFzdWZmaXhjbXAocmVmLT5uYW1lLCAiXnt9IikpCisJCQljb250aW51ZTsKKwkJaWYgKCFoYXNfc2hhMV9maWxlKHJlZi0+b2xkX3NoYTEpKQorCQkJY29udGludWU7CisJCXVwZGF0ZV9yZWYobXNnLCByZWYtPm5hbWUsIHJlZi0+b2xkX3NoYTEsCisJCQkgICBOVUxMLCAwLCBESUVfT05fRVJSKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZW1vdGVfcmVmcyhjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZWYgKm1hcHBlZF9yZWZzLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9oZWFkX3BvaW50c19hdCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpicmFuY2hfdG9wLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpZiAocmVmcykgeworCQl3cml0ZV9yZW1vdGVfcmVmcyhtYXBwZWRfcmVmcyk7CisJCWlmIChvcHRpb25fc2luZ2xlX2JyYW5jaCkKKwkJCXdyaXRlX2ZvbGxvd3RhZ3MocmVmcywgbXNnKTsKKwl9CisKKwlpZiAocmVtb3RlX2hlYWRfcG9pbnRzX2F0ICYmICFvcHRpb25fYmFyZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGhlYWRfcmVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRzdHIoJmhlYWRfcmVmLCBicmFuY2hfdG9wKTsKKwkJc3RyYnVmX2FkZHN0cigmaGVhZF9yZWYsICJIRUFEIik7CisJCWNyZWF0ZV9zeW1yZWYoaGVhZF9yZWYuYnVmLAorCQkJICAgICAgcmVtb3RlX2hlYWRfcG9pbnRzX2F0LT5wZWVyX3JlZi0+bmFtZSwKKwkJCSAgICAgIG1zZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfaGVhZChjb25zdCBzdHJ1Y3QgcmVmICpvdXIsIGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZSwKKwkJCWNvbnN0IGNoYXIgKm1zZykKK3sKKwlpZiAob3VyICYmICFwcmVmaXhjbXAob3VyLT5uYW1lLCAicmVmcy9oZWFkcy8iKSkgeworCQkvKiBMb2NhbCBkZWZhdWx0IGJyYW5jaCBsaW5rICovCisJCWNyZWF0ZV9zeW1yZWYoIkhFQUQiLCBvdXItPm5hbWUsIE5VTEwpOworCQlpZiAoIW9wdGlvbl9iYXJlKSB7CisJCQljb25zdCBjaGFyICpoZWFkID0gc2tpcF9wcmVmaXgob3VyLT5uYW1lLCAicmVmcy9oZWFkcy8iKTsKKwkJCXVwZGF0ZV9yZWYobXNnLCAiSEVBRCIsIG91ci0+b2xkX3NoYTEsIE5VTEwsIDAsIERJRV9PTl9FUlIpOworCQkJaW5zdGFsbF9icmFuY2hfY29uZmlnKDAsIGhlYWQsIG9wdGlvbl9vcmlnaW4sIG91ci0+bmFtZSk7CisJCX0KKwl9IGVsc2UgaWYgKG91cikgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uob3VyLT5vbGRfc2hhMSk7CisJCS8qIC0tYnJhbmNoIHNwZWNpZmllcyBhIG5vbi1icmFuY2ggKGkuZS4gdGFncyksIGRldGFjaCBIRUFEICovCisJCXVwZGF0ZV9yZWYobXNnLCAiSEVBRCIsIGMtPm9iamVjdC5zaGExLAorCQkJICAgTlVMTCwgUkVGX05PREVSRUYsIERJRV9PTl9FUlIpOworCX0gZWxzZSBpZiAocmVtb3RlKSB7CisJCS8qCisJCSAqIFdlIGtub3cgcmVtb3RlIEhFQUQgcG9pbnRzIHRvIGEgbm9uLWJyYW5jaCwgb3IKKwkJICogSEVBRCBwb2ludHMgdG8gYSBicmFuY2ggYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggb25lLgorCQkgKiBEZXRhY2ggSEVBRCBpbiBhbGwgdGhlc2UgY2FzZXMuCisJCSAqLworCQl1cGRhdGVfcmVmKG1zZywgIkhFQUQiLCByZW1vdGUtPm9sZF9zaGExLAorCQkJICAgTlVMTCwgUkVGX05PREVSRUYsIERJRV9PTl9FUlIpOworCX0KK30KKworc3RhdGljIGludCBjaGVja291dCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciAqaGVhZDsKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGU7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCWludCBlcnIgPSAwLCBmZDsKKworCWlmIChvcHRpb25fbm9fY2hlY2tvdXQpCisJCXJldHVybiAwOworCisJaGVhZCA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgc2hhMSwgMSwgTlVMTCk7CisJaWYgKCFoZWFkKSB7CisJCXdhcm5pbmcoXygicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgIgorCQkJICAidW5hYmxlIHRvIGNoZWNrb3V0LlxuIikpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaGVhZCwgIkhFQUQiKSkgeworCQlpZiAoYWR2aWNlX2RldGFjaGVkX2hlYWQpCisJCQlkZXRhY2hfYWR2aWNlKHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9IGVsc2UgeworCQlpZiAocHJlZml4Y21wKGhlYWQsICJyZWZzL2hlYWRzLyIpKQorCQkJZGllKF8oIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIikpOworCX0KKwlmcmVlKGhlYWQpOworCisJLyogV2UgbmVlZCB0byBiZSBpbiB0aGUgbmV3IHdvcmsgdHJlZSBmb3IgdGhlIGNoZWNrb3V0ICovCisJc2V0dXBfd29ya190cmVlKCk7CisKKwlsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisJZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Ygb3B0cyk7CisJb3B0cy51cGRhdGUgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisJb3B0cy52ZXJib3NlX3VwZGF0ZSA9IChvcHRpb25fdmVyYm9zaXR5ID49IDApOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChzaGExKTsKKwlwYXJzZV90cmVlKHRyZWUpOworCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCXVucGFja190cmVlcygxLCAmdCwgJm9wdHMpOworCisJaWYgKHdyaXRlX2NhY2hlKGZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKKwkgICAgY29tbWl0X2xvY2tlZF9pbmRleChsb2NrX2ZpbGUpKQorCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCisJZXJyIHw9IHJ1bl9ob29rKE5VTEwsICJwb3N0LWNoZWNrb3V0Iiwgc2hhMV90b19oZXgobnVsbF9zaGExKSwKKwkJCXNoYTFfdG9faGV4KHNoYTEpLCAiMSIsIE5VTEwpOworCisJaWYgKCFlcnIgJiYgb3B0aW9uX3JlY3Vyc2l2ZSkKKwkJZXJyID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9zdWJtb2R1bGUsIFJVTl9HSVRfQ01EKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfb25lX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihrZXksIHZhbHVlID8gdmFsdWUgOiAidHJ1ZSIsICJeJCIsIDApOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9jb25maWcoc3RydWN0IHN0cmluZ19saXN0ICpjb25maWcpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ucjsgaSsrKSB7CisJCWlmIChnaXRfY29uZmlnX3BhcnNlX3BhcmFtZXRlcihjb25maWctPml0ZW1zW2ldLnN0cmluZywKKwkJCQkJICAgICAgIHdyaXRlX29uZV9jb25maWcsIE5VTEwpIDwgMCkKKwkJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHBhcmFtZXRlcnMgdG8gY29uZmlnIGZpbGUiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3JlZnNwZWNfY29uZmlnKGNvbnN0IGNoYXIqIHNyY19yZWZfcHJlZml4LAorCQljb25zdCBzdHJ1Y3QgcmVmKiBvdXJfaGVhZF9wb2ludHNfYXQsCisJCWNvbnN0IHN0cnVjdCByZWYqIHJlbW90ZV9oZWFkX3BvaW50c19hdCwgc3RydWN0IHN0cmJ1ZiogYnJhbmNoX3RvcCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGtleSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdmFsdWUgPSBTVFJCVUZfSU5JVDsKKworCWlmIChvcHRpb25fbWlycm9yIHx8ICFvcHRpb25fYmFyZSkgeworCQlpZiAob3B0aW9uX3NpbmdsZV9icmFuY2ggJiYgIW9wdGlvbl9taXJyb3IpIHsKKwkJCWlmIChvcHRpb25fYnJhbmNoKSB7CisJCQkJaWYgKHN0cnN0cihvdXJfaGVhZF9wb2ludHNfYXQtPm5hbWUsICJyZWZzL3RhZ3MvIikpCisJCQkJCXN0cmJ1Zl9hZGRmKCZ2YWx1ZSwgIislczolcyIsIG91cl9oZWFkX3BvaW50c19hdC0+bmFtZSwKKwkJCQkJCW91cl9oZWFkX3BvaW50c19hdC0+bmFtZSk7CisJCQkJZWxzZQorCQkJCQlzdHJidWZfYWRkZigmdmFsdWUsICIrJXM6JXMlcyIsIG91cl9oZWFkX3BvaW50c19hdC0+bmFtZSwKKwkJCQkJCWJyYW5jaF90b3AtPmJ1Ziwgb3B0aW9uX2JyYW5jaCk7CisJCQl9IGVsc2UgaWYgKHJlbW90ZV9oZWFkX3BvaW50c19hdCkgeworCQkJCXN0cmJ1Zl9hZGRmKCZ2YWx1ZSwgIislczolcyVzIiwgcmVtb3RlX2hlYWRfcG9pbnRzX2F0LT5uYW1lLAorCQkJCQkJYnJhbmNoX3RvcC0+YnVmLAorCQkJCQkJc2tpcF9wcmVmaXgocmVtb3RlX2hlYWRfcG9pbnRzX2F0LT5uYW1lLCAicmVmcy9oZWFkcy8iKSk7CisJCQl9CisJCQkvKgorCQkJICogb3RoZXJ3aXNlLCB0aGUgbmV4dCAiZ2l0IGZldGNoIiB3aWxsCisJCQkgKiBzaW1wbHkgZmV0Y2ggZnJvbSBIRUFEIHdpdGhvdXQgdXBkYXRpbmcKKwkJCSAqIGFueSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoLCB3aGljaCBpcyB3aGF0CisJCQkgKiB3ZSB3YW50LgorCQkJICovCisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkZigmdmFsdWUsICIrJXMqOiVzKiIsIHNyY19yZWZfcHJlZml4LCBicmFuY2hfdG9wLT5idWYpOworCQl9CisJCS8qIENvbmZpZ3VyZSB0aGUgcmVtb3RlICovCisJCWlmICh2YWx1ZS5sZW4pIHsKKwkJCXN0cmJ1Zl9hZGRmKCZrZXksICJyZW1vdGUuJXMuZmV0Y2giLCBvcHRpb25fb3JpZ2luKTsKKwkJCWdpdF9jb25maWdfc2V0X211bHRpdmFyKGtleS5idWYsIHZhbHVlLmJ1ZiwgIl4kIiwgMCk7CisJCQlzdHJidWZfcmVzZXQoJmtleSk7CisKKwkJCWlmIChvcHRpb25fbWlycm9yKSB7CisJCQkJc3RyYnVmX2FkZGYoJmtleSwgInJlbW90ZS4lcy5taXJyb3IiLCBvcHRpb25fb3JpZ2luKTsKKwkJCQlnaXRfY29uZmlnX3NldChrZXkuYnVmLCAidHJ1ZSIpOworCQkJCXN0cmJ1Zl9yZXNldCgma2V5KTsKKwkJCX0KKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCXN0cmJ1Zl9yZWxlYXNlKCZ2YWx1ZSk7Cit9CisKK2ludCBjbWRfY2xvbmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGlzX2J1bmRsZSA9IDAsIGlzX2xvY2FsOworCXN0cnVjdCBzdGF0IGJ1ZjsKKwljb25zdCBjaGFyICpyZXBvX25hbWUsICpyZXBvLCAqd29ya190cmVlLCAqZ2l0X2RpcjsKKwljaGFyICpwYXRoLCAqZGlyOworCWludCBkZXN0X2V4aXN0czsKKwljb25zdCBzdHJ1Y3QgcmVmICpyZWZzLCAqcmVtb3RlX2hlYWQ7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX2hlYWRfcG9pbnRzX2F0OworCWNvbnN0IHN0cnVjdCByZWYgKm91cl9oZWFkX3BvaW50c19hdDsKKwlzdHJ1Y3QgcmVmICptYXBwZWRfcmVmczsKKwljb25zdCBzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVCwgdmFsdWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJyYW5jaF90b3AgPSBTVFJCVUZfSU5JVCwgcmVmbG9nX21zZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCA9IE5VTEw7CisJY29uc3QgY2hhciAqc3JjX3JlZl9wcmVmaXggPSAicmVmcy9oZWFkcy8iOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlpbnQgZXJyID0gMCwgY29tcGxldGVfcmVmc19iZWZvcmVfZmV0Y2ggPSAxOworCisJc3RydWN0IHJlZnNwZWMgKnJlZnNwZWM7CisJY29uc3QgY2hhciAqZmV0Y2hfcGF0dGVybjsKKworCWp1bmtfcGlkID0gZ2V0cGlkKCk7CisKKwlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoImNsb25lIik7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2Nsb25lX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fY2xvbmVfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MgPiAyKQorCQl1c2FnZV9tc2dfb3B0KF8oIlRvbyBtYW55IGFyZ3VtZW50cy4iKSwKKwkJCWJ1aWx0aW5fY2xvbmVfdXNhZ2UsIGJ1aWx0aW5fY2xvbmVfb3B0aW9ucyk7CisKKwlpZiAoYXJnYyA9PSAwKQorCQl1c2FnZV9tc2dfb3B0KF8oIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIpLAorCQkJYnVpbHRpbl9jbG9uZV91c2FnZSwgYnVpbHRpbl9jbG9uZV9vcHRpb25zKTsKKworCWlmIChvcHRpb25fc2luZ2xlX2JyYW5jaCA9PSAtMSkKKwkJb3B0aW9uX3NpbmdsZV9icmFuY2ggPSBvcHRpb25fZGVwdGggPyAxIDogMDsKKworCWlmIChvcHRpb25fbWlycm9yKQorCQlvcHRpb25fYmFyZSA9IDE7CisKKwlpZiAob3B0aW9uX2JhcmUpIHsKKwkJaWYgKG9wdGlvbl9vcmlnaW4pCisJCQlkaWUoXygiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIiksCisJCQkgICAgb3B0aW9uX29yaWdpbik7CisJCW9wdGlvbl9ub19jaGVja291dCA9IDE7CisJfQorCisJaWYgKCFvcHRpb25fb3JpZ2luKQorCQlvcHRpb25fb3JpZ2luID0gIm9yaWdpbiI7CisKKwlyZXBvX25hbWUgPSBhcmd2WzBdOworCisJcGF0aCA9IGdldF9yZXBvX3BhdGgocmVwb19uYW1lLCAmaXNfYnVuZGxlKTsKKwlpZiAocGF0aCkKKwkJcmVwbyA9IHhzdHJkdXAoYWJzb2x1dGVfcGF0aChyZXBvX25hbWUpKTsKKwllbHNlIGlmICghc3RyY2hyKHJlcG9fbmFtZSwgJzonKSkKKwkJZGllKF8oInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIpLCByZXBvX25hbWUpOworCWVsc2UKKwkJcmVwbyA9IHJlcG9fbmFtZTsKKwlpc19sb2NhbCA9IG9wdGlvbl9sb2NhbCAhPSAwICYmIHBhdGggJiYgIWlzX2J1bmRsZTsKKwlpZiAoaXNfbG9jYWwgJiYgb3B0aW9uX2RlcHRoKQorCQl3YXJuaW5nKF8oIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIikpOworCisJaWYgKGFyZ2MgPT0gMikKKwkJZGlyID0geHN0cmR1cChhcmd2WzFdKTsKKwllbHNlCisJCWRpciA9IGd1ZXNzX2Rpcl9uYW1lKHJlcG9fbmFtZSwgaXNfYnVuZGxlLCBvcHRpb25fYmFyZSk7CisJc3RyaXBfdHJhaWxpbmdfc2xhc2hlcyhkaXIpOworCisJZGVzdF9leGlzdHMgPSAhc3RhdChkaXIsICZidWYpOworCWlmIChkZXN0X2V4aXN0cyAmJiAhaXNfZW1wdHlfZGlyKGRpcikpCisJCWRpZShfKCJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCAiCisJCQkiYW4gZW1wdHkgZGlyZWN0b3J5LiIpLCBkaXIpOworCisJc3RyYnVmX2FkZGYoJnJlZmxvZ19tc2csICJjbG9uZTogZnJvbSAlcyIsIHJlcG8pOworCisJaWYgKG9wdGlvbl9iYXJlKQorCQl3b3JrX3RyZWUgPSBOVUxMOworCWVsc2UgeworCQl3b3JrX3RyZWUgPSBnZXRlbnYoIkdJVF9XT1JLX1RSRUUiKTsKKwkJaWYgKHdvcmtfdHJlZSAmJiAhc3RhdCh3b3JrX3RyZWUsICZidWYpKQorCQkJZGllKF8oIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIpLCB3b3JrX3RyZWUpOworCX0KKworCWlmIChvcHRpb25fYmFyZSB8fCB3b3JrX3RyZWUpCisJCWdpdF9kaXIgPSB4c3RyZHVwKGRpcik7CisJZWxzZSB7CisJCXdvcmtfdHJlZSA9IGRpcjsKKwkJZ2l0X2RpciA9IG1rcGF0aGR1cCgiJXMvLmdpdCIsIGRpcik7CisJfQorCisJaWYgKCFvcHRpb25fYmFyZSkgeworCQlqdW5rX3dvcmtfdHJlZSA9IHdvcmtfdHJlZTsKKwkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3Qod29ya190cmVlKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciKSwKKwkJCQkgIHdvcmtfdHJlZSk7CisJCWlmICghZGVzdF9leGlzdHMgJiYgbWtkaXIod29ya190cmVlLCAwNzc3KSkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJy4iKSwKKwkJCQkgIHdvcmtfdHJlZSk7CisJCXNldF9naXRfd29ya190cmVlKHdvcmtfdHJlZSk7CisJfQorCWp1bmtfZ2l0X2RpciA9IGdpdF9kaXI7CisJYXRleGl0KHJlbW92ZV9qdW5rKTsKKwlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZW1vdmVfanVua19vbl9zaWduYWwpOworCisJc2V0ZW52KENPTkZJR19FTlZJUk9OTUVOVCwgbWtwYXRoKCIlcy9jb25maWciLCBnaXRfZGlyKSwgMSk7CisKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChnaXRfZGlyKSA8IDApCisJCWRpZShfKCJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIpLCBnaXRfZGlyKTsKKworCXNldF9naXRfZGlyX2luaXQoZ2l0X2RpciwgcmVhbF9naXRfZGlyLCAwKTsKKwlpZiAocmVhbF9naXRfZGlyKQorCQlnaXRfZGlyID0gcmVhbF9naXRfZGlyOworCisJaWYgKDAgPD0gb3B0aW9uX3ZlcmJvc2l0eSkgeworCQlpZiAob3B0aW9uX2JhcmUpCisJCQlwcmludGYoXygiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iKSwgZGlyKTsKKwkJZWxzZQorCQkJcHJpbnRmKF8oIkNsb25pbmcgaW50byAnJXMnLi4uXG4iKSwgZGlyKTsKKwl9CisJaW5pdF9kYihvcHRpb25fdGVtcGxhdGUsIElOSVRfREJfUVVJRVQpOworCXdyaXRlX2NvbmZpZygmb3B0aW9uX2NvbmZpZyk7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIHRoZSBjb25maWcgZXhpc3RzLCBzbyB3ZSBkbyBub3QgbmVlZCB0aGUKKwkgKiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFdlIGFjdHVhbGx5IG5lZWQgdG8gdW5zZXQgaXQsIHRvbywgdG8KKwkgKiByZS1lbmFibGUgcGFyc2luZyBvZiB0aGUgZ2xvYmFsIGNvbmZpZ3MuCisJICovCisJdW5zZXRlbnYoQ09ORklHX0VOVklST05NRU5UKTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWlmIChvcHRpb25fYmFyZSkgeworCQlpZiAob3B0aW9uX21pcnJvcikKKwkJCXNyY19yZWZfcHJlZml4ID0gInJlZnMvIjsKKwkJc3RyYnVmX2FkZHN0cigmYnJhbmNoX3RvcCwgc3JjX3JlZl9wcmVmaXgpOworCisJCWdpdF9jb25maWdfc2V0KCJjb3JlLmJhcmUiLCAidHJ1ZSIpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRmKCZicmFuY2hfdG9wLCAicmVmcy9yZW1vdGVzLyVzLyIsIG9wdGlvbl9vcmlnaW4pOworCX0KKworCXN0cmJ1Zl9hZGRmKCZ2YWx1ZSwgIislcyo6JXMqIiwgc3JjX3JlZl9wcmVmaXgsIGJyYW5jaF90b3AuYnVmKTsKKwlzdHJidWZfYWRkZigma2V5LCAicmVtb3RlLiVzLnVybCIsIG9wdGlvbl9vcmlnaW4pOworCWdpdF9jb25maWdfc2V0KGtleS5idWYsIHJlcG8pOworCXN0cmJ1Zl9yZXNldCgma2V5KTsKKworCWlmIChvcHRpb25fcmVmZXJlbmNlLm5yKQorCQlzZXR1cF9yZWZlcmVuY2UoKTsKKworCWZldGNoX3BhdHRlcm4gPSB2YWx1ZS5idWY7CisJcmVmc3BlYyA9IHBhcnNlX2ZldGNoX3JlZnNwZWMoMSwgJmZldGNoX3BhdHRlcm4pOworCisJc3RyYnVmX3Jlc2V0KCZ2YWx1ZSk7CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KG9wdGlvbl9vcmlnaW4pOworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCByZW1vdGUtPnVybFswXSk7CisKKwlpZiAoIWlzX2xvY2FsKSB7CisJCWlmICghdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0IHx8ICF0cmFuc3BvcnQtPmZldGNoKQorCQkJZGllKF8oIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIiksIHRyYW5zcG9ydC0+dXJsKTsKKworCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9LRUVQLCAieWVzIik7CisKKwkJaWYgKG9wdGlvbl9kZXB0aCkKKwkJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0RFUFRILAorCQkJCQkgICAgIG9wdGlvbl9kZXB0aCk7CisJCWlmIChvcHRpb25fc2luZ2xlX2JyYW5jaCkKKwkJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0ZPTExPV1RBR1MsICIxIik7CisKKwkJdHJhbnNwb3J0X3NldF92ZXJib3NpdHkodHJhbnNwb3J0LCBvcHRpb25fdmVyYm9zaXR5LCBvcHRpb25fcHJvZ3Jlc3MpOworCisJCWlmIChvcHRpb25fdXBsb2FkX3BhY2spCisJCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9VUExPQURQQUNLLAorCQkJCQkgICAgIG9wdGlvbl91cGxvYWRfcGFjayk7CisJfQorCisJcmVmcyA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0KTsKKworCWlmIChyZWZzKSB7CisJCW1hcHBlZF9yZWZzID0gd2FudGVkX3BlZXJfcmVmcyhyZWZzLCByZWZzcGVjKTsKKwkJLyoKKwkJICogdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcygpIG1heSByZXR1cm4gcmVmcyB3aXRoIG51bGwgc2hhLTEKKwkJICogaW4gbWFwcGVkX3JlZnMgKHNlZSBzdHJ1Y3QgdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0CisJCSAqIGNvbW1lbnQpLiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCBmZXRjaCBpdCBlYXJseSBiZWNhdXNlCisJCSAqIHJlbW90ZV9oZWFkIGNvZGUgYmVsb3cgcmVsaWVzIG9uIGl0LgorCQkgKgorCQkgKiBmb3Igbm9ybWFsIGNsb25lcywgdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcygpIHNob3VsZAorCQkgKiByZXR1cm4gcmVsaWFibGUgcmVmIHNldCwgd2UgY2FuIGRlbGF5IGNsb25pbmcgdW50aWwgYWZ0ZXIKKwkJICogcmVtb3RlIEhFQUQgY2hlY2suCisJCSAqLworCQlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJaWYgKGlzX251bGxfc2hhMShyZWYtPm9sZF9zaGExKSkgeworCQkJCWNvbXBsZXRlX3JlZnNfYmVmb3JlX2ZldGNoID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKworCQlpZiAoIWlzX2xvY2FsICYmICFjb21wbGV0ZV9yZWZzX2JlZm9yZV9mZXRjaCkKKwkJCXRyYW5zcG9ydF9mZXRjaF9yZWZzKHRyYW5zcG9ydCwgbWFwcGVkX3JlZnMpOworCisJCXJlbW90ZV9oZWFkID0gZmluZF9yZWZfYnlfbmFtZShyZWZzLCAiSEVBRCIpOworCQlyZW1vdGVfaGVhZF9wb2ludHNfYXQgPQorCQkJZ3Vlc3NfcmVtb3RlX2hlYWQocmVtb3RlX2hlYWQsIG1hcHBlZF9yZWZzLCAwKTsKKworCQlpZiAob3B0aW9uX2JyYW5jaCkgeworCQkJb3VyX2hlYWRfcG9pbnRzX2F0ID0KKwkJCQlmaW5kX3JlbW90ZV9icmFuY2gobWFwcGVkX3JlZnMsIG9wdGlvbl9icmFuY2gpOworCisJCQlpZiAoIW91cl9oZWFkX3BvaW50c19hdCkKKwkJCQlkaWUoXygiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiKSwKKwkJCQkgICAgb3B0aW9uX2JyYW5jaCwgb3B0aW9uX29yaWdpbik7CisJCX0KKwkJZWxzZQorCQkJb3VyX2hlYWRfcG9pbnRzX2F0ID0gcmVtb3RlX2hlYWRfcG9pbnRzX2F0OworCX0KKwllbHNlIHsKKwkJd2FybmluZyhfKCJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIikpOworCQltYXBwZWRfcmVmcyA9IE5VTEw7CisJCW91cl9oZWFkX3BvaW50c19hdCA9IE5VTEw7CisJCXJlbW90ZV9oZWFkX3BvaW50c19hdCA9IE5VTEw7CisJCXJlbW90ZV9oZWFkID0gTlVMTDsKKwkJb3B0aW9uX25vX2NoZWNrb3V0ID0gMTsKKwkJaWYgKCFvcHRpb25fYmFyZSkKKwkJCWluc3RhbGxfYnJhbmNoX2NvbmZpZygwLCAibWFzdGVyIiwgb3B0aW9uX29yaWdpbiwKKwkJCQkJICAgICAgInJlZnMvaGVhZHMvbWFzdGVyIik7CisJfQorCisJd3JpdGVfcmVmc3BlY19jb25maWcoc3JjX3JlZl9wcmVmaXgsIG91cl9oZWFkX3BvaW50c19hdCwKKwkJCXJlbW90ZV9oZWFkX3BvaW50c19hdCwgJmJyYW5jaF90b3ApOworCisJaWYgKGlzX2xvY2FsKQorCQljbG9uZV9sb2NhbChwYXRoLCBnaXRfZGlyKTsKKwllbHNlIGlmIChyZWZzICYmIGNvbXBsZXRlX3JlZnNfYmVmb3JlX2ZldGNoKQorCQl0cmFuc3BvcnRfZmV0Y2hfcmVmcyh0cmFuc3BvcnQsIG1hcHBlZF9yZWZzKTsKKworCXVwZGF0ZV9yZW1vdGVfcmVmcyhyZWZzLCBtYXBwZWRfcmVmcywgcmVtb3RlX2hlYWRfcG9pbnRzX2F0LAorCQkJICAgYnJhbmNoX3RvcC5idWYsIHJlZmxvZ19tc2cuYnVmKTsKKworCXVwZGF0ZV9oZWFkKG91cl9oZWFkX3BvaW50c19hdCwgcmVtb3RlX2hlYWQsIHJlZmxvZ19tc2cuYnVmKTsKKworCXRyYW5zcG9ydF91bmxvY2tfcGFjayh0cmFuc3BvcnQpOworCXRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CisKKwllcnIgPSBjaGVja291dCgpOworCisJc3RyYnVmX3JlbGVhc2UoJnJlZmxvZ19tc2cpOworCXN0cmJ1Zl9yZWxlYXNlKCZicmFuY2hfdG9wKTsKKwlzdHJidWZfcmVsZWFzZSgma2V5KTsKKwlzdHJidWZfcmVsZWFzZSgmdmFsdWUpOworCWp1bmtfcGlkID0gMDsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jb2x1bW4uYyBiL2J1aWx0aW4vY29sdW1uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyNWE1NQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY29sdW1uLmMKQEAgLTAsMCArMSw1OSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY29sdW1uX3VzYWdlW10gPSB7CisJTl8oImdpdCBjb2x1bW4gW29wdGlvbnNdIiksCisJTlVMTAorfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29sb3B0czsKKworc3RhdGljIGludCBjb2x1bW5fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXJldHVybiBnaXRfY29sdW1uX2NvbmZpZyh2YXIsIHZhbHVlLCBjYiwgJmNvbG9wdHMpOworfQorCitpbnQgY21kX2NvbHVtbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgY29wdHM7CisJY29uc3QgY2hhciAqY29tbWFuZCA9IE5VTEwsICpyZWFsX2NvbW1hbmQgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJjb21tYW5kIiwgJnJlYWxfY29tbWFuZCwgTl8oIm5hbWUiKSwgTl8oImxvb2t1cCBjb25maWcgdmFycyIpKSwKKwkJT1BUX0NPTFVNTigwLCAibW9kZSIsICZjb2xvcHRzLCBOXygibGF5b3V0IHRvIHVzZSIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInJhdy1tb2RlIiwgJmNvbG9wdHMsIE5fKCJsYXlvdXQgdG8gdXNlIikpLAorCQlPUFRfSU5URUdFUigwLCAid2lkdGgiLCAmY29wdHMud2lkdGgsIE5fKCJNYXhpbXVtIHdpZHRoIikpLAorCQlPUFRfU1RSSU5HKDAsICJpbmRlbnQiLCAmY29wdHMuaW5kZW50LCBOXygic3RyaW5nIiksIE5fKCJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIikpLAorCQlPUFRfSU5URUdFUigwLCAibmwiLCAmY29wdHMubmwsIE5fKCJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInBhZGRpbmciLCAmY29wdHMucGFkZGluZywgTl8oIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJLyogVGhpcyBvbmUgaXMgc3BlY2lhbCBhbmQgbXVzdCBiZSB0aGUgZmlyc3Qgb25lICovCisJaWYgKGFyZ2MgPiAxICYmICFwcmVmaXhjbXAoYXJndlsxXSwgIi0tY29tbWFuZD0iKSkgeworCQljb21tYW5kID0gYXJndlsxXSArIDEwOworCQlnaXRfY29uZmlnKGNvbHVtbl9jb25maWcsICh2b2lkICopY29tbWFuZCk7CisJfSBlbHNlCisJCWdpdF9jb25maWcoY29sdW1uX2NvbmZpZywgTlVMTCk7CisKKwltZW1zZXQoJmNvcHRzLCAwLCBzaXplb2YoY29wdHMpKTsKKwljb3B0cy53aWR0aCA9IHRlcm1fY29sdW1ucygpOworCWNvcHRzLnBhZGRpbmcgPSAxOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsICIiLCBvcHRpb25zLCBidWlsdGluX2NvbHVtbl91c2FnZSwgMCk7CisJaWYgKGFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbHVtbl91c2FnZSwgb3B0aW9ucyk7CisJaWYgKHJlYWxfY29tbWFuZCB8fCBjb21tYW5kKSB7CisJCWlmICghcmVhbF9jb21tYW5kIHx8ICFjb21tYW5kIHx8IHN0cmNtcChyZWFsX2NvbW1hbmQsIGNvbW1hbmQpKQorCQkJZGllKF8oIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIpKTsKKwl9CisJZmluYWxpemVfY29sb3B0cygmY29sb3B0cywgLTEpOworCXdoaWxlICghc3RyYnVmX2dldGxpbmUoJnNiLCBzdGRpbiwgJ1xuJykpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgc2IuYnVmKTsKKworCXByaW50X2NvbHVtbnMoJmxpc3QsIGNvbG9wdHMsICZjb3B0cyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NvbW1pdC10cmVlLmMgYi9idWlsdGluL2NvbW1pdC10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFjOTAxYQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY29tbWl0LXRyZWUuYwpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBjb21taXRfdHJlZV91c2FnZVtdID0gImdpdCBjb21taXQtdHJlZSBbKC1wIDxzaGExPikuLi5dIFstUzxzaWduZXI+XSBbLW0gPG1lc3NhZ2U+XSBbLUYgPGZpbGU+XSA8c2hhMT4gPGNoYW5nZWxvZyI7CisKK3N0YXRpYyB2b2lkIG5ld19wYXJlbnQoc3RydWN0IGNvbW1pdCAqcGFyZW50LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKipwYXJlbnRzX3ApCit7CisJdW5zaWduZWQgY2hhciAqc2hhMSA9IHBhcmVudC0+b2JqZWN0LnNoYTE7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCWZvciAocGFyZW50cyA9ICpwYXJlbnRzX3A7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCWlmIChwYXJlbnRzLT5pdGVtID09IHBhcmVudCkgeworCQkJZXJyb3IoImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCXJldHVybjsKKwkJfQorCQlwYXJlbnRzX3AgPSAmcGFyZW50cy0+bmV4dDsKKwl9CisJY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudCwgcGFyZW50c19wKTsKK30KKworc3RhdGljIGludCBjb21taXRfdHJlZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaW50IHN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKHZhciwgdmFsdWUsIE5VTEwpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK2ludCBjbWRfY29tbWl0X3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGksIGdvdF90cmVlID0gMDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgdHJlZV9zaGExWzIwXTsKKwl1bnNpZ25lZCBjaGFyIGNvbW1pdF9zaGExWzIwXTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnNpZ25fY29tbWl0ID0gTlVMTDsKKworCWdpdF9jb25maWcoY29tbWl0X3RyZWVfY29uZmlnLCBOVUxMKTsKKworCWlmIChhcmdjIDwgMiB8fCAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShjb21taXRfdHJlZV91c2FnZSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWlmICghc3RyY21wKGFyZywgIi1wIikpIHsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCQlpZiAoYXJnYyA8PSArK2kpCisJCQkJdXNhZ2UoY29tbWl0X3RyZWVfdXNhZ2UpOworCQkJaWYgKGdldF9zaGExX2NvbW1pdChhcmd2W2ldLCBzaGExKSkKKwkJCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJndltpXSk7CisJCQlhc3NlcnRfc2hhMV90eXBlKHNoYTEsIE9CSl9DT01NSVQpOworCQkJbmV3X3BhcmVudChsb29rdXBfY29tbWl0KHNoYTEpLCAmcGFyZW50cyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghbWVtY21wKGFyZywgIi1TIiwgMikpIHsKKwkJCXNpZ25fY29tbWl0ID0gYXJnICsgMjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLW0iKSkgeworCQkJaWYgKGFyZ2MgPD0gKytpKQorCQkJCXVzYWdlKGNvbW1pdF90cmVlX3VzYWdlKTsKKwkJCWlmIChidWZmZXIubGVuKQorCQkJCXN0cmJ1Zl9hZGRjaCgmYnVmZmVyLCAnXG4nKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZmZlciwgYXJndltpXSk7CisJCQlzdHJidWZfY29tcGxldGVfbGluZSgmYnVmZmVyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLUYiKSkgeworCQkJaW50IGZkOworCisJCQlpZiAoYXJnYyA8PSArK2kpCisJCQkJdXNhZ2UoY29tbWl0X3RyZWVfdXNhZ2UpOworCQkJaWYgKGJ1ZmZlci5sZW4pCisJCQkJc3RyYnVmX2FkZGNoKCZidWZmZXIsICdcbicpOworCQkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0iKSkKKwkJCQlmZCA9IDA7CisJCQllbHNlIHsKKwkJCQlmZCA9IG9wZW4oYXJndltpXSwgT19SRE9OTFkpOworCQkJCWlmIChmZCA8IDApCisJCQkJCWRpZV9lcnJubygiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gb3BlbiAnJXMnIiwKKwkJCQkJCSAgYXJndltpXSk7CisJCQl9CisJCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZmZlciwgZmQsIDApIDwgMCkKKwkJCQlkaWVfZXJybm8oImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIsCisJCQkJCSAgYXJndltpXSk7CisJCQlpZiAoZmQgJiYgY2xvc2UoZmQpKQorCQkJCWRpZV9lcnJubygiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIsCisJCQkJCSAgYXJndltpXSk7CisJCQlzdHJidWZfY29tcGxldGVfbGluZSgmYnVmZmVyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGdldF9zaGExX3RyZWUoYXJnLCB0cmVlX3NoYTEpKQorCQkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZyk7CisJCWlmIChnb3RfdHJlZSkKKwkJCWRpZSgiQ2Fubm90IGdpdmUgbW9yZSB0aGFuIG9uZSB0cmVlcyIpOworCQlnb3RfdHJlZSA9IDE7CisJfQorCisJaWYgKCFidWZmZXIubGVuKSB7CisJCWlmIChzdHJidWZfcmVhZCgmYnVmZmVyLCAwLCAwKSA8IDApCisJCQlkaWVfZXJybm8oImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQiKTsKKwl9CisKKwlpZiAoY29tbWl0X3RyZWUoJmJ1ZmZlciwgdHJlZV9zaGExLCBwYXJlbnRzLCBjb21taXRfc2hhMSwKKwkJCU5VTEwsIHNpZ25fY29tbWl0KSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoY29tbWl0X3NoYTEpKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29tbWl0LmMgYi9idWlsdGluL2NvbW1pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExN2E1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NvbW1pdC5jCkBAIC0wLDAgKzEsMTU5MyBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBjb21taXQiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+CisgKiBCYXNlZCBvbiBnaXQtY29tbWl0LnNoIGJ5IEp1bmlvIEMgSGFtYW5vIGFuZCBMaW51cyBUb3J2YWxkcworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgInNlcXVlbmNlci5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY29tbWl0X3VzYWdlW10gPSB7CisJTl8oImdpdCBjb21taXQgW29wdGlvbnNdIFstLV0gPGZpbGVwYXR0ZXJuPi4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9zdGF0dXNfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN0YXR1cyBbb3B0aW9uc10gWy0tXSA8ZmlsZXBhdHRlcm4+Li4uIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgaW1wbGljaXRfaWRlbnRfYWR2aWNlW10gPQorTl8oIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIGVtcHR5X2FtZW5kX2FkdmljZVtdID0KK05fKCJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIpOworCitzdGF0aWMgY29uc3QgY2hhciBlbXB0eV9jaGVycnlfcGlja19hZHZpY2VbXSA9CitOXygiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKyJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIpOworCitzdGF0aWMgY29uc3QgY2hhciAqdXNlX21lc3NhZ2VfYnVmZmVyOworc3RhdGljIGNvbnN0IGNoYXIgY29tbWl0X2VkaXRtc2dbXSA9ICJDT01NSVRfRURJVE1TRyI7CitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrOyAvKiByZWFsIGluZGV4ICovCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBmYWxzZV9sb2NrOyAvKiB1c2VkIG9ubHkgZm9yIHBhcnRpYWwgY29tbWl0cyAqLworc3RhdGljIGVudW0geworCUNPTU1JVF9BU19JUyA9IDEsCisJQ09NTUlUX05PUk1BTCwKKwlDT01NSVRfUEFSVElBTAorfSBjb21taXRfc3R5bGU7CisKK3N0YXRpYyBjb25zdCBjaGFyICpsb2dmaWxlLCAqZm9yY2VfYXV0aG9yOworc3RhdGljIGNvbnN0IGNoYXIgKnRlbXBsYXRlX2ZpbGU7CisvKgorICogVGhlIF9tZXNzYWdlIHZhcmlhYmxlcyBhcmUgY29tbWl0IG5hbWVzIGZyb20gd2hpY2ggdG8gdGFrZQorICogdGhlIGNvbW1pdCBtZXNzYWdlIGFuZC9vciBhdXRob3JzaGlwLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqYXV0aG9yX21lc3NhZ2UsICphdXRob3JfbWVzc2FnZV9idWZmZXI7CitzdGF0aWMgY2hhciAqZWRpdF9tZXNzYWdlLCAqdXNlX21lc3NhZ2U7CitzdGF0aWMgY2hhciAqZml4dXBfbWVzc2FnZSwgKnNxdWFzaF9tZXNzYWdlOworc3RhdGljIGludCBhbGwsIGFsc28sIGludGVyYWN0aXZlLCBwYXRjaF9pbnRlcmFjdGl2ZSwgb25seSwgYW1lbmQsIHNpZ25vZmY7CitzdGF0aWMgaW50IGVkaXRfZmxhZyA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworc3RhdGljIGludCBxdWlldCwgdmVyYm9zZSwgbm9fdmVyaWZ5LCBhbGxvd19lbXB0eSwgZHJ5X3J1biwgcmVuZXdfYXV0aG9yc2hpcDsKK3N0YXRpYyBpbnQgbm9fcG9zdF9yZXdyaXRlLCBhbGxvd19lbXB0eV9tZXNzYWdlOworc3RhdGljIGNoYXIgKnVudHJhY2tlZF9maWxlc19hcmcsICpmb3JjZV9kYXRlLCAqaWdub3JlX3N1Ym1vZHVsZV9hcmc7CitzdGF0aWMgY2hhciAqc2lnbl9jb21taXQ7CisKKy8qCisgKiBUaGUgZGVmYXVsdCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgd2lsbCByZW1vdmUgdGhlIGxpbmVzCisgKiBiZWdpbm5pbmcgd2l0aCAjIChzaGVsbCBjb21tZW50cykgYW5kIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisgKiB3aGl0ZXNwYWNlcyAoZW1wdHkgbGluZXMgb3IgY29udGFpbmluZyBvbmx5IHdoaXRlc3BhY2VzKQorICogaWYgZWRpdG9yIGlzIHVzZWQsIGFuZCBvbmx5IHRoZSB3aGl0ZXNwYWNlcyBpZiB0aGUgbWVzc2FnZQorICogaXMgc3BlY2lmaWVkIGV4cGxpY2l0bHkuCisgKi8KK3N0YXRpYyBlbnVtIHsKKwlDTEVBTlVQX1NQQUNFLAorCUNMRUFOVVBfTk9ORSwKKwlDTEVBTlVQX0FMTAorfSBjbGVhbnVwX21vZGU7CitzdGF0aWMgY2hhciAqY2xlYW51cF9hcmc7CisKK3N0YXRpYyBlbnVtIGNvbW1pdF93aGVuY2Ugd2hlbmNlOworc3RhdGljIGludCB1c2VfZWRpdG9yID0gMSwgaW5jbHVkZV9zdGF0dXMgPSAxOworc3RhdGljIGludCBzaG93X2lnbm9yZWRfaW5fc3RhdHVzOworc3RhdGljIGNvbnN0IGNoYXIgKm9ubHlfaW5jbHVkZV9hc3N1bWVkOworc3RhdGljIHN0cnVjdCBzdHJidWYgbWVzc2FnZSA9IFNUUkJVRl9JTklUOworCitzdGF0aWMgZW51bSB7CisJU1RBVFVTX0ZPUk1BVF9MT05HLAorCVNUQVRVU19GT1JNQVRfU0hPUlQsCisJU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU4KK30gc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfTE9ORzsKKworc3RhdGljIGludCBvcHRfcGFyc2VfbShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IG9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KQorCQlzdHJidWZfc2V0bGVuKGJ1ZiwgMCk7CisJZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBhcmcpOworCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIlxuXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRldGVybWluZV93aGVuY2Uoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSkpCisJCXdoZW5jZSA9IEZST01fTUVSR0U7CisJZWxzZSBpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGgoIkNIRVJSWV9QSUNLX0hFQUQiKSkpCisJCXdoZW5jZSA9IEZST01fQ0hFUlJZX1BJQ0s7CisJZWxzZQorCQl3aGVuY2UgPSBGUk9NX0NPTU1JVDsKKwlpZiAocykKKwkJcy0+d2hlbmNlID0gd2hlbmNlOworfQorCitzdGF0aWMgdm9pZCByb2xsYmFja19pbmRleF9maWxlcyh2b2lkKQoreworCXN3aXRjaCAoY29tbWl0X3N0eWxlKSB7CisJY2FzZSBDT01NSVRfQVNfSVM6CisJCWJyZWFrOyAvKiBub3RoaW5nIHRvIGRvICovCisJY2FzZSBDT01NSVRfTk9STUFMOgorCQlyb2xsYmFja19sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworCQlicmVhazsKKwljYXNlIENPTU1JVF9QQVJUSUFMOgorCQlyb2xsYmFja19sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmZhbHNlX2xvY2spOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY29tbWl0X2luZGV4X2ZpbGVzKHZvaWQpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGNvbW1pdF9zdHlsZSkgeworCWNhc2UgQ09NTUlUX0FTX0lTOgorCQlicmVhazsgLyogbm90aGluZyB0byBkbyAqLworCWNhc2UgQ09NTUlUX05PUk1BTDoKKwkJZXJyID0gY29tbWl0X2xvY2tfZmlsZSgmaW5kZXhfbG9jayk7CisJCWJyZWFrOworCWNhc2UgQ09NTUlUX1BBUlRJQUw6CisJCWVyciA9IGNvbW1pdF9sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmZhbHNlX2xvY2spOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVGFrZSBhIHVuaW9uIG9mIHBhdGhzIGluIHRoZSBpbmRleCBhbmQgdGhlIG5hbWVkIHRyZWUgKHR5cGljYWxseSwgIkhFQUQiKSwKKyAqIGFuZCByZXR1cm4gdGhlIHBhdGhzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRlcm4gaW4gbGlzdC4KKyAqLworc3RhdGljIGludCBsaXN0X3BhdGhzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqd2l0aF90cmVlLAorCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipwYXR0ZXJuKQoreworCWludCBpOworCWNoYXIgKm07CisKKwlpZiAoIXBhdHRlcm4pCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgcGF0dGVybltpXTsgaSsrKQorCQk7CisJbSA9IHhjYWxsb2MoMSwgaSk7CisKKwlpZiAod2l0aF90cmVlKSB7CisJCWNoYXIgKm1heF9wcmVmaXggPSBjb21tb25fcHJlZml4KHBhdHRlcm4pOworCQlvdmVybGF5X3RyZWVfb25fY2FjaGUod2l0aF90cmVlLCBtYXhfcHJlZml4ID8gbWF4X3ByZWZpeCA6IHByZWZpeCk7CisJCWZyZWUobWF4X3ByZWZpeCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpCisJCQljb250aW51ZTsKKwkJaWYgKCFtYXRjaF9wYXRoc3BlYyhwYXR0ZXJuLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIDAsIG0pKQorCQkJY29udGludWU7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQobGlzdCwgY2UtPm5hbWUpOworCQlpZiAoY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCQlpdGVtLT51dGlsID0gaXRlbTsgLyogYmV0dGVyIGEgdmFsaWQgcG9pbnRlciB0aGFuIGEgZmFrZSBvbmUgKi8KKwl9CisKKwlyZXR1cm4gcmVwb3J0X3BhdGhfZXJyb3IobSwgcGF0dGVybiwgcHJlZml4KTsKK30KKworc3RhdGljIHZvaWQgYWRkX3JlbW92ZV9maWxlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpwID0gJihsaXN0LT5pdGVtc1tpXSk7CisKKwkJLyogcC0+dXRpbCBpcyBza2lwLXdvcmt0cmVlICovCisJCWlmIChwLT51dGlsKQorCQkJY29udGludWU7CisKKwkJaWYgKCFsc3RhdChwLT5zdHJpbmcsICZzdCkpIHsKKwkJCWlmIChhZGRfdG9fY2FjaGUocC0+c3RyaW5nLCAmc3QsIDApKQorCQkJCWRpZShfKCJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiKSk7CisJCX0gZWxzZQorCQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwLT5zdHJpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2Jhc2VfaW5kZXgoY29uc3Qgc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkKQoreworCXN0cnVjdCB0cmVlICp0cmVlOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCXN0cnVjdCB0cmVlX2Rlc2MgdDsKKworCWlmICghY3VycmVudF9oZWFkKSB7CisJCWRpc2NhcmRfY2FjaGUoKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gMTsKKwlvcHRzLmluZGV4X29ubHkgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisKKwlvcHRzLmZuID0gb25ld2F5X21lcmdlOworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KGN1cnJlbnRfaGVhZC0+b2JqZWN0LnNoYTEpOworCWlmICghdHJlZSkKKwkJZGllKF8oImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIpKTsKKwlwYXJzZV90cmVlKHRyZWUpOworCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCWlmICh1bnBhY2tfdHJlZXMoMSwgJnQsICZvcHRzKSkKKwkJZXhpdCgxMjgpOyAvKiBXZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIHRoZSBlcnJvciwgZmluaXNoIGR5aW5nICovCit9CisKK3N0YXRpYyB2b2lkIHJlZnJlc2hfY2FjaGVfb3JfZGllKGludCByZWZyZXNoX2ZsYWdzKQoreworCS8qCisJICogcmVmcmVzaF9mbGFncyBjb250YWlucyBSRUZSRVNIX1FVSUVULCBzbyB0aGUgb25seSBlcnJvcnMKKwkgKiBhcmUgZm9yIHVubWVyZ2VkIGVudHJpZXMuCisJICovCisJaWYgKHJlZnJlc2hfY2FjaGUocmVmcmVzaF9mbGFncyB8IFJFRlJFU0hfSU5fUE9SQ0VMQUlOKSkKKwkJZGllX3Jlc29sdmVfY29uZmxpY3QoImNvbW1pdCIpOworfQorCitzdGF0aWMgY2hhciAqcHJlcGFyZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCwgaW50IGlzX3N0YXR1cykKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0cmluZ19saXN0IHBhcnRpYWw7CisJY29uc3QgY2hhciAqKnBhdGhzcGVjID0gTlVMTDsKKwljaGFyICpvbGRfaW5kZXhfZW52ID0gTlVMTDsKKwlpbnQgcmVmcmVzaF9mbGFncyA9IFJFRlJFU0hfUVVJRVQ7CisKKwlpZiAoaXNfc3RhdHVzKQorCQlyZWZyZXNoX2ZsYWdzIHw9IFJFRlJFU0hfVU5NRVJHRUQ7CisKKwlpZiAoKmFyZ3YpCisJCXBhdGhzcGVjID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndik7CisKKwlpZiAocmVhZF9jYWNoZV9wcmVsb2FkKHBhdGhzcGVjKSA8IDApCisJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisKKwlpZiAoaW50ZXJhY3RpdmUpIHsKKwkJZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgMSk7CisKKwkJcmVmcmVzaF9jYWNoZV9vcl9kaWUocmVmcmVzaF9mbGFncyk7CisKKwkJaWYgKHdyaXRlX2NhY2hlKGZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKKwkJICAgIGNsb3NlX2xvY2tfZmlsZSgmaW5kZXhfbG9jaykpCisJCQlkaWUoXygidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiKSk7CisKKwkJb2xkX2luZGV4X2VudiA9IGdldGVudihJTkRFWF9FTlZJUk9OTUVOVCk7CisJCXNldGVudihJTkRFWF9FTlZJUk9OTUVOVCwgaW5kZXhfbG9jay5maWxlbmFtZSwgMSk7CisKKwkJaWYgKGludGVyYWN0aXZlX2FkZChhcmdjLCBhcmd2LCBwcmVmaXgsIHBhdGNoX2ludGVyYWN0aXZlKSAhPSAwKQorCQkJZGllKF8oImludGVyYWN0aXZlIGFkZCBmYWlsZWQiKSk7CisKKwkJaWYgKG9sZF9pbmRleF9lbnYgJiYgKm9sZF9pbmRleF9lbnYpCisJCQlzZXRlbnYoSU5ERVhfRU5WSVJPTk1FTlQsIG9sZF9pbmRleF9lbnYsIDEpOworCQllbHNlCisJCQl1bnNldGVudihJTkRFWF9FTlZJUk9OTUVOVCk7CisKKwkJZGlzY2FyZF9jYWNoZSgpOworCQlyZWFkX2NhY2hlX2Zyb20oaW5kZXhfbG9jay5maWxlbmFtZSk7CisKKwkJY29tbWl0X3N0eWxlID0gQ09NTUlUX05PUk1BTDsKKwkJcmV0dXJuIGluZGV4X2xvY2suZmlsZW5hbWU7CisJfQorCisJLyoKKwkgKiBOb24gcGFydGlhbCwgbm9uIGFzLWlzIGNvbW1pdC4KKwkgKgorCSAqICgxKSBnZXQgdGhlIHJlYWwgaW5kZXg7CisJICogKDIpIHVwZGF0ZSB0aGVfaW5kZXggYXMgbmVjZXNzYXJ5OworCSAqICgzKSB3cml0ZSB0aGVfaW5kZXggb3V0IHRvIHRoZSByZWFsIGluZGV4IChzdGlsbCBsb2NrZWQpOworCSAqICg0KSByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxvY2tlZCBpbmRleCBmaWxlLgorCSAqCisJICogVGhlIGNhbGxlciBzaG91bGQgcnVuIGhvb2tzIG9uIHRoZSBsb2NrZWQgcmVhbCBpbmRleCwgYW5kCisJICogKEEpIGlmIGFsbCBnb2VzIHdlbGwsIGNvbW1pdCB0aGUgcmVhbCBpbmRleDsKKwkgKiAoQikgb24gZmFpbHVyZSwgcm9sbGJhY2sgdGhlIHJlYWwgaW5kZXguCisJICovCisJaWYgKGFsbCB8fCAoYWxzbyAmJiBwYXRoc3BlYyAmJiAqcGF0aHNwZWMpKSB7CisJCWZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDEpOworCQlhZGRfZmlsZXNfdG9fY2FjaGUoYWxzbyA/IHByZWZpeCA6IE5VTEwsIHBhdGhzcGVjLCAwKTsKKwkJcmVmcmVzaF9jYWNoZV9vcl9kaWUocmVmcmVzaF9mbGFncyk7CisJCXVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoV1JJVEVfVFJFRV9TSUxFTlQpOworCQlpZiAod3JpdGVfY2FjaGUoZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAorCQkgICAgY2xvc2VfbG9ja19maWxlKCZpbmRleF9sb2NrKSkKKwkJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiKSk7CisJCWNvbW1pdF9zdHlsZSA9IENPTU1JVF9OT1JNQUw7CisJCXJldHVybiBpbmRleF9sb2NrLmZpbGVuYW1lOworCX0KKworCS8qCisJICogQXMtaXMgY29tbWl0LgorCSAqCisJICogKDEpIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgcmVhbCBpbmRleCBmaWxlLgorCSAqCisJICogVGhlIGNhbGxlciBzaG91bGQgcnVuIGhvb2tzIG9uIHRoZSByZWFsIGluZGV4LAorCSAqIGFuZCBjcmVhdGUgY29tbWl0IGZyb20gdGhlX2luZGV4LgorCSAqIFdlIHN0aWxsIG5lZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXggaGVyZS4KKwkgKi8KKwlpZiAoIW9ubHkgJiYgKCFwYXRoc3BlYyB8fCAhKnBhdGhzcGVjKSkgeworCQlmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCAxKTsKKwkJcmVmcmVzaF9jYWNoZV9vcl9kaWUocmVmcmVzaF9mbGFncyk7CisJCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCkgeworCQkJdXBkYXRlX21haW5fY2FjaGVfdHJlZShXUklURV9UUkVFX1NJTEVOVCk7CisJCQlpZiAod3JpdGVfY2FjaGUoZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAorCQkJICAgIGNvbW1pdF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2spKQorCQkJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiKSk7CisJCX0gZWxzZSB7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworCQl9CisJCWNvbW1pdF9zdHlsZSA9IENPTU1JVF9BU19JUzsKKwkJcmV0dXJuIGdldF9pbmRleF9maWxlKCk7CisJfQorCisJLyoKKwkgKiBBIHBhcnRpYWwgY29tbWl0LgorCSAqCisJICogKDApIGZpbmQgdGhlIHNldCBvZiBhZmZlY3RlZCBwYXRoczsKKwkgKiAoMSkgZ2V0IGxvY2sgb24gdGhlIHJlYWwgaW5kZXggZmlsZTsKKwkgKiAoMikgdXBkYXRlIHRoZV9pbmRleCB3aXRoIHRoZSBnaXZlbiBwYXRoczsKKwkgKiAoMykgd3JpdGUgdGhlX2luZGV4IG91dCB0byB0aGUgcmVhbCBpbmRleCAoc3RpbGwgbG9ja2VkKTsKKwkgKiAoNCkgZ2V0IGxvY2sgb24gdGhlIGZhbHNlIGluZGV4IGZpbGU7CisJICogKDUpIHJlc2V0IHRoZV9pbmRleCBmcm9tIEhFQUQ7CisJICogKDYpIHVwZGF0ZSB0aGVfaW5kZXggdGhlIHNhbWUgd2F5IGFzICgyKTsKKwkgKiAoNykgd3JpdGUgdGhlX2luZGV4IG91dCB0byB0aGUgZmFsc2UgaW5kZXggZmlsZTsKKwkgKiAoOCkgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmYWxzZSBpbmRleCBmaWxlIChzdGlsbCBsb2NrZWQpOworCSAqCisJICogVGhlIGNhbGxlciBzaG91bGQgcnVuIGhvb2tzIG9uIHRoZSBsb2NrZWQgZmFsc2UgaW5kZXgsIGFuZAorCSAqIGNyZWF0ZSBjb21taXQgZnJvbSBpdC4gIFRoZW4KKwkgKiAoQSkgaWYgYWxsIGdvZXMgd2VsbCwgY29tbWl0IHRoZSByZWFsIGluZGV4OworCSAqIChCKSBvbiBmYWlsdXJlLCByb2xsYmFjayB0aGUgcmVhbCBpbmRleDsKKwkgKiBJbiBlaXRoZXIgY2FzZSwgcm9sbGJhY2sgdGhlIGZhbHNlIGluZGV4LgorCSAqLworCWNvbW1pdF9zdHlsZSA9IENPTU1JVF9QQVJUSUFMOworCisJaWYgKHdoZW5jZSAhPSBGUk9NX0NPTU1JVCkgeworCQlpZiAod2hlbmNlID09IEZST01fTUVSR0UpCisJCQlkaWUoXygiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIikpOworCQllbHNlIGlmICh3aGVuY2UgPT0gRlJPTV9DSEVSUllfUElDSykKKwkJCWRpZShfKCJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iKSk7CisJfQorCisJbWVtc2V0KCZwYXJ0aWFsLCAwLCBzaXplb2YocGFydGlhbCkpOworCXBhcnRpYWwuc3RyZHVwX3N0cmluZ3MgPSAxOworCWlmIChsaXN0X3BhdGhzKCZwYXJ0aWFsLCAhY3VycmVudF9oZWFkID8gTlVMTCA6ICJIRUFEIiwgcHJlZml4LCBwYXRoc3BlYykpCisJCWV4aXQoMSk7CisKKwlkaXNjYXJkX2NhY2hlKCk7CisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZShfKCJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiKSk7CisKKwlmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCAxKTsKKwlhZGRfcmVtb3ZlX2ZpbGVzKCZwYXJ0aWFsKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCWlmICh3cml0ZV9jYWNoZShmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJICAgIGNsb3NlX2xvY2tfZmlsZSgmaW5kZXhfbG9jaykpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiKSk7CisKKwlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmZhbHNlX2xvY2ssCisJCQkJICAgICAgIGdpdF9wYXRoKCJuZXh0LWluZGV4LSUiUFJJdU1BWCwKKwkJCQkJCSh1aW50bWF4X3QpIGdldHBpZCgpKSwKKwkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCisJY3JlYXRlX2Jhc2VfaW5kZXgoY3VycmVudF9oZWFkKTsKKwlhZGRfcmVtb3ZlX2ZpbGVzKCZwYXJ0aWFsKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCisJaWYgKHdyaXRlX2NhY2hlKGZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKKwkgICAgY2xvc2VfbG9ja19maWxlKCZmYWxzZV9sb2NrKSkKKwkJZGllKF8oInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIpKTsKKworCWRpc2NhcmRfY2FjaGUoKTsKKwlyZWFkX2NhY2hlX2Zyb20oZmFsc2VfbG9jay5maWxlbmFtZSk7CisKKwlyZXR1cm4gZmFsc2VfbG9jay5maWxlbmFtZTsKK30KKworc3RhdGljIGludCBydW5fc3RhdHVzKEZJTEUgKmZwLCBjb25zdCBjaGFyICppbmRleF9maWxlLCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBub3dhcm4sCisJCSAgICAgIHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWlmIChzLT5yZWxhdGl2ZV9wYXRocykKKwkJcy0+cHJlZml4ID0gcHJlZml4OworCisJaWYgKGFtZW5kKSB7CisJCXMtPmFtZW5kID0gMTsKKwkJcy0+cmVmZXJlbmNlID0gIkhFQUReMSI7CisJfQorCXMtPnZlcmJvc2UgPSB2ZXJib3NlOworCXMtPmluZGV4X2ZpbGUgPSBpbmRleF9maWxlOworCXMtPmZwID0gZnA7CisJcy0+bm93YXJuID0gbm93YXJuOworCXMtPmlzX2luaXRpYWwgPSBnZXRfc2hhMShzLT5yZWZlcmVuY2UsIHNoYTEpID8gMSA6IDA7CisKKwl3dF9zdGF0dXNfY29sbGVjdChzKTsKKworCXN3aXRjaCAoc3RhdHVzX2Zvcm1hdCkgeworCWNhc2UgU1RBVFVTX0ZPUk1BVF9TSE9SVDoKKwkJd3Rfc2hvcnRzdGF0dXNfcHJpbnQocyk7CisJCWJyZWFrOworCWNhc2UgU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU46CisJCXd0X3BvcmNlbGFpbl9wcmludChzKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUVVNfRk9STUFUX0xPTkc6CisJCXd0X3N0YXR1c19wcmludChzKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHMtPmNvbW1pdGFibGU7Cit9CisKK3N0YXRpYyBpbnQgaXNfYV9tZXJnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjdXJyZW50X2hlYWQpCit7CisJcmV0dXJuICEhKGN1cnJlbnRfaGVhZC0+cGFyZW50cyAmJiBjdXJyZW50X2hlYWQtPnBhcmVudHMtPm5leHQpOworfQorCitzdGF0aWMgdm9pZCBleHBvcnRfb25lKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZSwgaW50IGhhY2spCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpZiAoaGFjaykKKwkJc3RyYnVmX2FkZGNoKCZidWYsIGhhY2spOworCXN0cmJ1Zl9hZGRmKCZidWYsICIlLipzIiwgKGludCkoZSAtIHMpLCBzKTsKKwlzZXRlbnYodmFyLCBidWYuYnVmLCAxKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGludCBzYW5lX2lkZW50X3NwbGl0KHN0cnVjdCBpZGVudF9zcGxpdCAqcGVyc29uKQoreworCWlmICghcGVyc29uLT5uYW1lX2JlZ2luIHx8ICFwZXJzb24tPm5hbWVfZW5kIHx8CisJICAgIHBlcnNvbi0+bmFtZV9iZWdpbiA9PSBwZXJzb24tPm5hbWVfZW5kKQorCQlyZXR1cm4gMDsgLyogbm8gaHVtYW4gcmVhZGFibGUgbmFtZSAqLworCWlmICghcGVyc29uLT5tYWlsX2JlZ2luIHx8ICFwZXJzb24tPm1haWxfZW5kIHx8CisJICAgIHBlcnNvbi0+bWFpbF9iZWdpbiA9PSBwZXJzb24tPm1haWxfZW5kKQorCQlyZXR1cm4gMDsgLyogbm8gdXNhYmxlIG1haWwgKi8KKwlpZiAoIXBlcnNvbi0+ZGF0ZV9iZWdpbiB8fCAhcGVyc29uLT5kYXRlX2VuZCB8fAorCSAgICAhcGVyc29uLT50el9iZWdpbiB8fCAhcGVyc29uLT50el9lbmQpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkZXRlcm1pbmVfYXV0aG9yX2luZm8oc3RydWN0IHN0cmJ1ZiAqYXV0aG9yX2lkZW50KQoreworCWNoYXIgKm5hbWUsICplbWFpbCwgKmRhdGU7CisJc3RydWN0IGlkZW50X3NwbGl0IGF1dGhvcjsKKworCW5hbWUgPSBnZXRlbnYoIkdJVF9BVVRIT1JfTkFNRSIpOworCWVtYWlsID0gZ2V0ZW52KCJHSVRfQVVUSE9SX0VNQUlMIik7CisJZGF0ZSA9IGdldGVudigiR0lUX0FVVEhPUl9EQVRFIik7CisKKwlpZiAoYXV0aG9yX21lc3NhZ2UpIHsKKwkJY29uc3QgY2hhciAqYSwgKmxiLCAqcmIsICplb2w7CisJCXNpemVfdCBsZW47CisKKwkJYSA9IHN0cnN0cihhdXRob3JfbWVzc2FnZV9idWZmZXIsICJcbmF1dGhvciAiKTsKKwkJaWYgKCFhKQorCQkJZGllKF8oImludmFsaWQgY29tbWl0OiAlcyIpLCBhdXRob3JfbWVzc2FnZSk7CisKKwkJbGIgPSBzdHJjaHJudWwoYSArIHN0cmxlbigiXG5hdXRob3IgIiksICc8Jyk7CisJCXJiID0gc3RyY2hybnVsKGxiLCAnPicpOworCQllb2wgPSBzdHJjaHJudWwocmIsICdcbicpOworCQlpZiAoISpsYiB8fCAhKnJiIHx8ICEqZW9sKQorCQkJZGllKF8oImludmFsaWQgY29tbWl0OiAlcyIpLCBhdXRob3JfbWVzc2FnZSk7CisKKwkJaWYgKGxiID09IGEgKyBzdHJsZW4oIlxuYXV0aG9yICIpKQorCQkJLyogXG5hdXRob3IgPGZvb0BleGFtcGxlLmNvbT4gKi8KKwkJCW5hbWUgPSB4Y2FsbG9jKDEsIDEpOworCQllbHNlCisJCQluYW1lID0geG1lbWR1cHooYSArIHN0cmxlbigiXG5hdXRob3IgIiksCisJCQkJCShsYiAtIHN0cmxlbigiICIpIC0KKwkJCQkJIChhICsgc3RybGVuKCJcbmF1dGhvciAiKSkpKTsKKwkJZW1haWwgPSB4bWVtZHVweihsYiArIHN0cmxlbigiPCIpLCByYiAtIChsYiArIHN0cmxlbigiPCIpKSk7CisJCWRhdGUgPSB4bWVtZHVweihyYiArIHN0cmxlbigiPiAiKSwgZW9sIC0gKHJiICsgc3RybGVuKCI+ICIpKSk7CisJCWxlbiA9IGVvbCAtIChyYiArIHN0cmxlbigiPiAiKSk7CisJCWRhdGUgPSB4bWFsbG9jKGxlbiArIDIpOworCQkqZGF0ZSA9ICdAJzsKKwkJbWVtY3B5KGRhdGUgKyAxLCByYiArIHN0cmxlbigiPiAiKSwgbGVuKTsKKwkJZGF0ZVtsZW4gKyAxXSA9ICdcMCc7CisJfQorCisJaWYgKGZvcmNlX2F1dGhvcikgeworCQljb25zdCBjaGFyICpsYiA9IHN0cnN0cihmb3JjZV9hdXRob3IsICIgPCIpOworCQljb25zdCBjaGFyICpyYiA9IHN0cmNocihmb3JjZV9hdXRob3IsICc+Jyk7CisKKwkJaWYgKCFsYiB8fCAhcmIpCisJCQlkaWUoXygibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIpKTsKKwkJbmFtZSA9IHhzdHJuZHVwKGZvcmNlX2F1dGhvciwgbGIgLSBmb3JjZV9hdXRob3IpOworCQllbWFpbCA9IHhzdHJuZHVwKGxiICsgMiwgcmIgLSAobGIgKyAyKSk7CisJfQorCisJaWYgKGZvcmNlX2RhdGUpCisJCWRhdGUgPSBmb3JjZV9kYXRlOworCXN0cmJ1Zl9hZGRzdHIoYXV0aG9yX2lkZW50LCBmbXRfaWRlbnQobmFtZSwgZW1haWwsIGRhdGUsIElERU5UX1NUUklDVCkpOworCWlmICghc3BsaXRfaWRlbnRfbGluZSgmYXV0aG9yLCBhdXRob3JfaWRlbnQtPmJ1ZiwgYXV0aG9yX2lkZW50LT5sZW4pICYmCisJICAgIHNhbmVfaWRlbnRfc3BsaXQoJmF1dGhvcikpIHsKKwkJZXhwb3J0X29uZSgiR0lUX0FVVEhPUl9OQU1FIiwgYXV0aG9yLm5hbWVfYmVnaW4sIGF1dGhvci5uYW1lX2VuZCwgMCk7CisJCWV4cG9ydF9vbmUoIkdJVF9BVVRIT1JfRU1BSUwiLCBhdXRob3IubWFpbF9iZWdpbiwgYXV0aG9yLm1haWxfZW5kLCAwKTsKKwkJZXhwb3J0X29uZSgiR0lUX0FVVEhPUl9EQVRFIiwgYXV0aG9yLmRhdGVfYmVnaW4sIGF1dGhvci50el9lbmQsICdAJyk7CisJfQorfQorCitzdGF0aWMgY2hhciAqY3V0X2lkZW50X3RpbWVzdGFtcF9wYXJ0KGNoYXIgKnN0cmluZykKK3sKKwljaGFyICprZXQgPSBzdHJyY2hyKHN0cmluZywgJz4nKTsKKwlpZiAoIWtldCB8fCBrZXRbMV0gIT0gJyAnKQorCQlkaWUoXygiTWFsZm9ybWVkIGlkZW50IHN0cmluZzogJyVzJyIpLCBzdHJpbmcpOworCSorK2tldCA9ICdcMCc7CisJcmV0dXJuIGtldDsKK30KKworc3RhdGljIGludCBwcmVwYXJlX3RvX2NvbW1pdChjb25zdCBjaGFyICppbmRleF9maWxlLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgIHN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCwKKwkJCSAgICAgc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqYXV0aG9yX2lkZW50KQoreworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJc3RydWN0IHN0cmJ1ZiBjb21taXR0ZXJfaWRlbnQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgY29tbWl0YWJsZSwgc2F2ZWRfY29sb3Jfc2V0dGluZzsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqYnVmZmVyOworCWNvbnN0IGNoYXIgKmhvb2tfYXJnMSA9IE5VTEw7CisJY29uc3QgY2hhciAqaG9va19hcmcyID0gTlVMTDsKKwlpbnQgaWRlbnRfc2hvd24gPSAwOworCWludCBjbGVhbl9tZXNzYWdlX2NvbnRlbnRzID0gKGNsZWFudXBfbW9kZSAhPSBDTEVBTlVQX05PTkUpOworCisJLyogVGhpcyBjaGVja3MgYW5kIGJhcmZzIGlmIGF1dGhvciBpcyBiYWRseSBzcGVjaWZpZWQgKi8KKwlkZXRlcm1pbmVfYXV0aG9yX2luZm8oYXV0aG9yX2lkZW50KTsKKworCWlmICghbm9fdmVyaWZ5ICYmIHJ1bl9ob29rKGluZGV4X2ZpbGUsICJwcmUtY29tbWl0IiwgTlVMTCkpCisJCXJldHVybiAwOworCisJaWYgKHNxdWFzaF9tZXNzYWdlKSB7CisJCS8qCisJCSAqIEluc2VydCB0aGUgcHJvcGVyIHN1YmplY3QgbGluZSBiZWZvcmUgb3RoZXIgY29tbWl0CisJCSAqIG1lc3NhZ2Ugb3B0aW9ucyBhZGQgdGhlaXIgY29udGVudC4KKwkJICovCisJCWlmICh1c2VfbWVzc2FnZSAmJiAhc3RyY21wKHVzZV9tZXNzYWdlLCBzcXVhc2hfbWVzc2FnZSkpCisJCQlzdHJidWZfYWRkc3RyKCZzYiwgInNxdWFzaCEgIik7CisJCWVsc2UgeworCQkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJCXN0cnVjdCBjb21taXQgKmM7CisJCQljID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShzcXVhc2hfbWVzc2FnZSk7CisJCQlpZiAoIWMpCisJCQkJZGllKF8oImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIiksIHNxdWFzaF9tZXNzYWdlKTsKKwkJCWN0eC5vdXRwdXRfZW5jb2RpbmcgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCQkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGMsICJzcXVhc2ghICVzXG5cbiIsICZzYiwKKwkJCQkJICAgICAgJmN0eCk7CisJCX0KKwl9CisKKwlpZiAobWVzc2FnZS5sZW4pIHsKKwkJc3RyYnVmX2FkZGJ1Zigmc2IsICZtZXNzYWdlKTsKKwkJaG9va19hcmcxID0gIm1lc3NhZ2UiOworCX0gZWxzZSBpZiAobG9nZmlsZSAmJiAhc3RyY21wKGxvZ2ZpbGUsICItIikpIHsKKwkJaWYgKGlzYXR0eSgwKSkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIikpOworCQlpZiAoc3RyYnVmX3JlYWQoJnNiLCAwLCAwKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiKSk7CisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwl9IGVsc2UgaWYgKGxvZ2ZpbGUpIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBsb2dmaWxlLCAwKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIpLAorCQkJCSAgbG9nZmlsZSk7CisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwl9IGVsc2UgaWYgKHVzZV9tZXNzYWdlKSB7CisJCWJ1ZmZlciA9IHN0cnN0cih1c2VfbWVzc2FnZV9idWZmZXIsICJcblxuIik7CisJCWlmICghdXNlX2VkaXRvciAmJiAoIWJ1ZmZlciB8fCBidWZmZXJbMl0gPT0gJ1wwJykpCisJCQlkaWUoXygiY29tbWl0IGhhcyBlbXB0eSBtZXNzYWdlIikpOworCQlzdHJidWZfYWRkKCZzYiwgYnVmZmVyICsgMiwgc3RybGVuKGJ1ZmZlciArIDIpKTsKKwkJaG9va19hcmcxID0gImNvbW1pdCI7CisJCWhvb2tfYXJnMiA9IHVzZV9tZXNzYWdlOworCX0gZWxzZSBpZiAoZml4dXBfbWVzc2FnZSkgeworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoZml4dXBfbWVzc2FnZSk7CisJCWlmICghY29tbWl0KQorCQkJZGllKF8oImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIiksIGZpeHVwX21lc3NhZ2UpOworCQljdHgub3V0cHV0X2VuY29kaW5nID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKwkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgImZpeHVwISAlc1xuXG4iLAorCQkJCSAgICAgICZzYiwgJmN0eCk7CisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwl9IGVsc2UgaWYgKCFzdGF0KGdpdF9wYXRoKCJNRVJHRV9NU0ciKSwgJnN0YXRidWYpKSB7CisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGgoIk1FUkdFX01TRyIpLCAwKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIikpOworCQlob29rX2FyZzEgPSAibWVyZ2UiOworCX0gZWxzZSBpZiAoIXN0YXQoZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKSwgJnN0YXRidWYpKSB7CisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKSwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciKSk7CisJCWhvb2tfYXJnMSA9ICJzcXVhc2giOworCX0gZWxzZSBpZiAodGVtcGxhdGVfZmlsZSkgeworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIHRlbXBsYXRlX2ZpbGUsIDApIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnJXMnIiksIHRlbXBsYXRlX2ZpbGUpOworCQlob29rX2FyZzEgPSAidGVtcGxhdGUiOworCQljbGVhbl9tZXNzYWdlX2NvbnRlbnRzID0gMDsKKwl9CisKKwkvKgorCSAqIFRoZSByZW1haW5pbmcgY2FzZXMgZG9uJ3QgbW9kaWZ5IHRoZSB0ZW1wbGF0ZSBtZXNzYWdlLCBidXQKKwkgKiBqdXN0IHNldCB0aGUgYXJndW1lbnQocykgdG8gdGhlIHByZXBhcmUtY29tbWl0LW1zZyBob29rLgorCSAqLworCWVsc2UgaWYgKHdoZW5jZSA9PSBGUk9NX01FUkdFKQorCQlob29rX2FyZzEgPSAibWVyZ2UiOworCWVsc2UgaWYgKHdoZW5jZSA9PSBGUk9NX0NIRVJSWV9QSUNLKSB7CisJCWhvb2tfYXJnMSA9ICJjb21taXQiOworCQlob29rX2FyZzIgPSAiQ0hFUlJZX1BJQ0tfSEVBRCI7CisJfQorCisJaWYgKHNxdWFzaF9tZXNzYWdlKSB7CisJCS8qCisJCSAqIElmIHNxdWFzaF9jb21taXQgd2FzIHVzZWQgZm9yIHRoZSBjb21taXQgc3ViamVjdCwKKwkJICogdGhlbiB3ZSdyZSBwb3NzaWJseSBoaWphY2tpbmcgb3RoZXIgY29tbWl0IGxvZyBvcHRpb25zLgorCQkgKiBSZXNldCB0aGUgaG9vayBhcmdzIHRvIHRlbGwgdGhlIHJlYWwgc3RvcnkuCisJCSAqLworCQlob29rX2FyZzEgPSAibWVzc2FnZSI7CisJCWhvb2tfYXJnMiA9ICIiOworCX0KKworCXMtPmZwID0gZm9wZW4oZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCAidyIpOworCWlmIChzLT5mcCA9PSBOVUxMKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyIpLCBnaXRfcGF0aChjb21taXRfZWRpdG1zZykpOworCisJaWYgKGNsZWFuX21lc3NhZ2VfY29udGVudHMpCisJCXN0cmlwc3BhY2UoJnNiLCAwKTsKKworCWlmIChzaWdub2ZmKSB7CisJCS8qCisJCSAqIFNlZSBpZiB3ZSBoYXZlIGEgQ29uZmxpY3RzOiBibG9jayBhdCB0aGUgZW5kLiBJZiB5ZXMsIGNvdW50CisJCSAqIGl0cyBzaXplLCBzbyB3ZSBjYW4gaWdub3JlIGl0LgorCQkgKi8KKwkJaW50IGlnbm9yZV9mb290ZXIgPSAwOworCQlpbnQgaSwgZW9sLCBwcmV2aW91cyA9IDA7CisJCWNvbnN0IGNoYXIgKm5sOworCisJCWZvciAoaSA9IDA7IGkgPCBzYi5sZW47IGkrKykgeworCQkJbmwgPSBtZW1jaHIoc2IuYnVmICsgaSwgJ1xuJywgc2IubGVuIC0gaSk7CisJCQlpZiAobmwpCisJCQkJZW9sID0gbmwgLSBzYi5idWY7CisJCQllbHNlCisJCQkJZW9sID0gc2IubGVuOworCQkJaWYgKCFwcmVmaXhjbXAoc2IuYnVmICsgcHJldmlvdXMsICJcbkNvbmZsaWN0czpcbiIpKSB7CisJCQkJaWdub3JlX2Zvb3RlciA9IHNiLmxlbiAtIHByZXZpb3VzOworCQkJCWJyZWFrOworCQkJfQorCQkJd2hpbGUgKGkgPCBlb2wpCisJCQkJaSsrOworCQkJcHJldmlvdXMgPSBlb2w7CisJCX0KKworCQlhcHBlbmRfc2lnbm9mZigmc2IsIGlnbm9yZV9mb290ZXIpOworCX0KKworCWlmIChmd3JpdGUoc2IuYnVmLCAxLCBzYi5sZW4sIHMtPmZwKSA8IHNiLmxlbikKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiKSk7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJLyogVGhpcyBjaGVja3MgaWYgY29tbWl0dGVyIGlkZW50IGlzIGV4cGxpY2l0bHkgZ2l2ZW4gKi8KKwlzdHJidWZfYWRkc3RyKCZjb21taXR0ZXJfaWRlbnQsIGdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9TVFJJQ1QpKTsKKwlpZiAodXNlX2VkaXRvciAmJiBpbmNsdWRlX3N0YXR1cykgeworCQljaGFyICphaV90bXAsICpjaV90bXA7CisJCWlmICh3aGVuY2UgIT0gRlJPTV9DT01NSVQpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkgICAgd2hlbmNlID09IEZST01fTUVSR0UKKwkJCQk/IF8oIlxuIgorCQkJCQkiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKwkJCQkJIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKwkJCQkJIgklc1xuIgorCQkJCQkiYW5kIHRyeSBhZ2Fpbi5cbiIpCisJCQkJOiBfKCJcbiIKKwkJCQkJIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisJCQkJCSJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisJCQkJCSIJJXNcbiIKKwkJCQkJImFuZCB0cnkgYWdhaW4uXG4iKSwKKwkJCQlnaXRfcGF0aCh3aGVuY2UgPT0gRlJPTV9NRVJHRQorCQkJCQkgPyAiTUVSR0VfSEVBRCIKKwkJCQkJIDogIkNIRVJSWV9QSUNLX0hFQUQiKSk7CisKKwkJZnByaW50ZihzLT5mcCwgIlxuIik7CisJCWlmIChjbGVhbnVwX21vZGUgPT0gQ0xFQU5VUF9BTEwpCisJCQlzdGF0dXNfcHJpbnRmKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiIKKwkJCQkiIExpbmVzIHN0YXJ0aW5nXG53aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSIKKwkJCQkiIG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iKSk7CisJCWVsc2UgLyogQ0xFQU5VUF9TUEFDRSwgdGhhdCBpcy4gKi8KKwkJCXN0YXR1c19wcmludGYocywgR0lUX0NPTE9SX05PUk1BTCwKKwkJCQlfKCJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIgorCQkJCSIgTGluZXMgc3RhcnRpbmdcbiIKKwkJCQkid2l0aCAnIycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIgorCQkJCSIgeW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisJCQkJIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iKSk7CisJCWlmIChvbmx5X2luY2x1ZGVfYXNzdW1lZCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwKKwkJCQkJIiVzIiwgb25seV9pbmNsdWRlX2Fzc3VtZWQpOworCisJCWFpX3RtcCA9IGN1dF9pZGVudF90aW1lc3RhbXBfcGFydChhdXRob3JfaWRlbnQtPmJ1Zik7CisJCWNpX3RtcCA9IGN1dF9pZGVudF90aW1lc3RhbXBfcGFydChjb21taXR0ZXJfaWRlbnQuYnVmKTsKKwkJaWYgKHN0cmNtcChhdXRob3JfaWRlbnQtPmJ1ZiwgY29tbWl0dGVyX2lkZW50LmJ1ZikpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiJXMiCisJCQkJIkF1dGhvcjogICAgJXMiKSwKKwkJCQlpZGVudF9zaG93bisrID8gIiIgOiAiXG4iLAorCQkJCWF1dGhvcl9pZGVudC0+YnVmKTsKKworCQlpZiAoIXVzZXJfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKCkpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiJXMiCisJCQkJIkNvbW1pdHRlcjogJXMiKSwKKwkJCQlpZGVudF9zaG93bisrID8gIiIgOiAiXG4iLAorCQkJCWNvbW1pdHRlcl9pZGVudC5idWYpOworCisJCWlmIChpZGVudF9zaG93bikKKwkJCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwgIiIpOworCisJCXNhdmVkX2NvbG9yX3NldHRpbmcgPSBzLT51c2VfY29sb3I7CisJCXMtPnVzZV9jb2xvciA9IDA7CisJCWNvbW1pdGFibGUgPSBydW5fc3RhdHVzKHMtPmZwLCBpbmRleF9maWxlLCBwcmVmaXgsIDEsIHMpOworCQlzLT51c2VfY29sb3IgPSBzYXZlZF9jb2xvcl9zZXR0aW5nOworCisJCSphaV90bXAgPSAnICc7CisJCSpjaV90bXAgPSAnICc7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY29uc3QgY2hhciAqcGFyZW50ID0gIkhFQUQiOworCisJCWlmICghYWN0aXZlX25yICYmIHJlYWRfY2FjaGUoKSA8IDApCisJCQlkaWUoXygiQ2Fubm90IHJlYWQgaW5kZXgiKSk7CisKKwkJaWYgKGFtZW5kKQorCQkJcGFyZW50ID0gIkhFQUReMSI7CisKKwkJaWYgKGdldF9zaGExKHBhcmVudCwgc2hhMSkpCisJCQljb21taXRhYmxlID0gISFhY3RpdmVfbnI7CisJCWVsc2UKKwkJCWNvbW1pdGFibGUgPSBpbmRleF9kaWZmZXJzX2Zyb20ocGFyZW50LCAwKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmNvbW1pdHRlcl9pZGVudCk7CisKKwlmY2xvc2Uocy0+ZnApOworCisJLyoKKwkgKiBSZWplY3QgYW4gYXR0ZW1wdCB0byByZWNvcmQgYSBub24tbWVyZ2UgZW1wdHkgY29tbWl0IHdpdGhvdXQKKwkgKiBleHBsaWNpdCAtLWFsbG93LWVtcHR5LiBJbiB0aGUgY2hlcnJ5LXBpY2sgY2FzZSwgaXQgbWF5IGJlCisJICogZW1wdHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24sIHdoaWNoIHRoZSB1c2VyIHNob3VsZCBva2F5LgorCSAqLworCWlmICghY29tbWl0YWJsZSAmJiB3aGVuY2UgIT0gRlJPTV9NRVJHRSAmJiAhYWxsb3dfZW1wdHkgJiYKKwkgICAgIShhbWVuZCAmJiBpc19hX21lcmdlKGN1cnJlbnRfaGVhZCkpKSB7CisJCXJ1bl9zdGF0dXMoc3Rkb3V0LCBpbmRleF9maWxlLCBwcmVmaXgsIDAsIHMpOworCQlpZiAoYW1lbmQpCisJCQlmcHV0cyhfKGVtcHR5X2FtZW5kX2FkdmljZSksIHN0ZGVycik7CisJCWVsc2UgaWYgKHdoZW5jZSA9PSBGUk9NX0NIRVJSWV9QSUNLKQorCQkJZnB1dHMoXyhlbXB0eV9jaGVycnlfcGlja19hZHZpY2UpLCBzdGRlcnIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFJlLXJlYWQgdGhlIGluZGV4IGFzIHByZS1jb21taXQgaG9vayBjb3VsZCBoYXZlIHVwZGF0ZWQgaXQsCisJICogYW5kIHdyaXRlIGl0IG91dCBhcyBhIHRyZWUuICBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHdlIGludm9rZQorCSAqIHRoZSBlZGl0b3IgYW5kIGFmdGVyIHdlIGludm9rZSBydW5fc3RhdHVzIGFib3ZlLgorCSAqLworCWRpc2NhcmRfY2FjaGUoKTsKKwlyZWFkX2NhY2hlX2Zyb20oaW5kZXhfZmlsZSk7CisJaWYgKHVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoMCkpIHsKKwkJZXJyb3IoXygiRXJyb3IgYnVpbGRpbmcgdHJlZXMiKSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChydW5faG9vayhpbmRleF9maWxlLCAicHJlcGFyZS1jb21taXQtbXNnIiwKKwkJICAgICBnaXRfcGF0aChjb21taXRfZWRpdG1zZyksIGhvb2tfYXJnMSwgaG9va19hcmcyLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodXNlX2VkaXRvcikgeworCQljaGFyIGluZGV4W1BBVEhfTUFYXTsKKwkJY29uc3QgY2hhciAqZW52WzJdID0geyBOVUxMIH07CisJCWVudlswXSA9ICBpbmRleDsKKwkJc25wcmludGYoaW5kZXgsIHNpemVvZihpbmRleCksICJHSVRfSU5ERVhfRklMRT0lcyIsIGluZGV4X2ZpbGUpOworCQlpZiAobGF1bmNoX2VkaXRvcihnaXRfcGF0aChjb21taXRfZWRpdG1zZyksIE5VTEwsIGVudikpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJXygiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCWlmICghbm9fdmVyaWZ5ICYmCisJICAgIHJ1bl9ob29rKGluZGV4X2ZpbGUsICJjb21taXQtbXNnIiwgZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCBOVUxMKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCByZXN0X2lzX2VtcHR5KHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgc3RhcnQpCit7CisJaW50IGksIGVvbDsKKwljb25zdCBjaGFyICpubDsKKworCS8qIENoZWNrIGlmIHRoZSByZXN0IGlzIGp1c3Qgd2hpdGVzcGFjZSBhbmQgU2lnbmVkLW9mLWJ5J3MuICovCisJZm9yIChpID0gc3RhcnQ7IGkgPCBzYi0+bGVuOyBpKyspIHsKKwkJbmwgPSBtZW1jaHIoc2ItPmJ1ZiArIGksICdcbicsIHNiLT5sZW4gLSBpKTsKKwkJaWYgKG5sKQorCQkJZW9sID0gbmwgLSBzYi0+YnVmOworCQllbHNlCisJCQllb2wgPSBzYi0+bGVuOworCisJCWlmIChzdHJsZW4oc2lnbl9vZmZfaGVhZGVyKSA8PSBlb2wgLSBpICYmCisJCSAgICAhcHJlZml4Y21wKHNiLT5idWYgKyBpLCBzaWduX29mZl9oZWFkZXIpKSB7CisJCQlpID0gZW9sOworCQkJY29udGludWU7CisJCX0KKwkJd2hpbGUgKGkgPCBlb2wpCisJCQlpZiAoIWlzc3BhY2Uoc2ItPmJ1ZltpKytdKSkKKwkJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEZpbmQgb3V0IGlmIHRoZSBtZXNzYWdlIGluIHRoZSBzdHJidWYgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlIGFuZAorICogU2lnbmVkLW9mZi1ieSBsaW5lcy4KKyAqLworc3RhdGljIGludCBtZXNzYWdlX2lzX2VtcHR5KHN0cnVjdCBzdHJidWYgKnNiKQoreworCWlmIChjbGVhbnVwX21vZGUgPT0gQ0xFQU5VUF9OT05FICYmIHNiLT5sZW4pCisJCXJldHVybiAwOworCXJldHVybiByZXN0X2lzX2VtcHR5KHNiLCAwKTsKK30KKworLyoKKyAqIFNlZSBpZiB0aGUgdXNlciBlZGl0ZWQgdGhlIG1lc3NhZ2UgaW4gdGhlIGVkaXRvciBvciBsZWZ0IHdoYXQKKyAqIHdhcyBpbiB0aGUgdGVtcGxhdGUgaW50YWN0CisgKi8KK3N0YXRpYyBpbnQgdGVtcGxhdGVfdW50b3VjaGVkKHN0cnVjdCBzdHJidWYgKnNiKQoreworCXN0cnVjdCBzdHJidWYgdG1wbCA9IFNUUkJVRl9JTklUOworCWNoYXIgKnN0YXJ0OworCisJaWYgKGNsZWFudXBfbW9kZSA9PSBDTEVBTlVQX05PTkUgJiYgc2ItPmxlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXRlbXBsYXRlX2ZpbGUgfHwgc3RyYnVmX3JlYWRfZmlsZSgmdG1wbCwgdGVtcGxhdGVfZmlsZSwgMCkgPD0gMCkKKwkJcmV0dXJuIDA7CisKKwlzdHJpcHNwYWNlKCZ0bXBsLCBjbGVhbnVwX21vZGUgPT0gQ0xFQU5VUF9BTEwpOworCXN0YXJ0ID0gKGNoYXIgKilza2lwX3ByZWZpeChzYi0+YnVmLCB0bXBsLmJ1Zik7CisJaWYgKCFzdGFydCkKKwkJc3RhcnQgPSBzYi0+YnVmOworCXN0cmJ1Zl9yZWxlYXNlKCZ0bXBsKTsKKwlyZXR1cm4gcmVzdF9pc19lbXB0eShzYiwgc3RhcnQgLSBzYi0+YnVmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfYXV0aG9yX2J5X25pY2tuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqYXZbMjBdOworCWludCBhYyA9IDA7CisKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIi0tYXV0aG9yPSVzIiwgbmFtZSk7CisJYXZbKythY10gPSAiLS1hbGwiOworCWF2WysrYWNdID0gIi1pIjsKKwlhdlsrK2FjXSA9IGJ1Zi5idWY7CisJYXZbKythY10gPSBOVUxMOworCXNldHVwX3JldmlzaW9ucyhhYywgYXYsICZyZXZzLCBOVUxMKTsKKwlwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpOworCWNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2cyk7CisJaWYgKGNvbW1pdCkgeworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQljdHguZGF0ZV9tb2RlID0gREFURV9OT1JNQUw7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWFuIDwlYWU+IiwgJmJ1ZiwgJmN0eCk7CisJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0KKwlkaWUoXygiTm8gZXhpc3RpbmcgYXV0aG9yIGZvdW5kIHdpdGggJyVzJyIpLCBuYW1lKTsKK30KKworCitzdGF0aWMgdm9pZCBoYW5kbGVfdW50cmFja2VkX2ZpbGVzX2FyZyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWlmICghdW50cmFja2VkX2ZpbGVzX2FyZykKKwkJOyAvKiBkZWZhdWx0IGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwllbHNlIGlmICghc3RyY21wKHVudHJhY2tlZF9maWxlc19hcmcsICJubyIpKQorCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9fVU5UUkFDS0VEX0ZJTEVTOworCWVsc2UgaWYgKCFzdHJjbXAodW50cmFja2VkX2ZpbGVzX2FyZywgIm5vcm1hbCIpKQorCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9STUFMX1VOVFJBQ0tFRF9GSUxFUzsKKwllbHNlIGlmICghc3RyY21wKHVudHJhY2tlZF9maWxlc19hcmcsICJhbGwiKSkKKwkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX0FMTF9VTlRSQUNLRURfRklMRVM7CisJZWxzZQorCQlkaWUoXygiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIiksIHVudHJhY2tlZF9maWxlc19hcmcpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcmVhZF9jb21taXRfbWVzc2FnZShjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKm91dF9lbmMsICpvdXQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShuYW1lKTsKKwlpZiAoIWNvbW1pdCkKKwkJZGllKF8oImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIiksIG5hbWUpOworCW91dF9lbmMgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCW91dCA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIG91dF9lbmMpOworCisJLyoKKwkgKiBJZiB3ZSBmYWlsZWQgdG8gcmVlbmNvZGUgdGhlIGJ1ZmZlciwganVzdCBjb3B5IGl0CisJICogYnl0ZSBmb3IgYnl0ZSBzbyB0aGUgdXNlciBjYW4gdHJ5IHRvIGZpeCBpdCB1cC4KKwkgKiBUaGlzIGFsc28gaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBpbnB1dCBhbmQgb3V0cHV0CisJICogZW5jb2RpbmdzIGFyZSBpZGVudGljYWwuCisJICovCisJaWYgKG91dCA9PSBOVUxMKQorCQlvdXQgPSB4c3RyZHVwKGNvbW1pdC0+YnVmZmVyKTsKKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgaW50IHBhcnNlX2FuZF92YWxpZGF0ZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10sCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKKwkJCQkgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VbXSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJICAgICAgc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkLAorCQkJCSAgICAgIHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGYgPSAwOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CisKKwlpZiAoZm9yY2VfYXV0aG9yICYmICFzdHJjaHIoZm9yY2VfYXV0aG9yLCAnPicpKQorCQlmb3JjZV9hdXRob3IgPSBmaW5kX2F1dGhvcl9ieV9uaWNrbmFtZShmb3JjZV9hdXRob3IpOworCisJaWYgKGZvcmNlX2F1dGhvciAmJiByZW5ld19hdXRob3JzaGlwKQorCQlkaWUoXygiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIpKTsKKworCWlmIChsb2dmaWxlIHx8IG1lc3NhZ2UubGVuIHx8IHVzZV9tZXNzYWdlIHx8IGZpeHVwX21lc3NhZ2UpCisJCXVzZV9lZGl0b3IgPSAwOworCWlmICgwIDw9IGVkaXRfZmxhZykKKwkJdXNlX2VkaXRvciA9IGVkaXRfZmxhZzsKKwlpZiAoIXVzZV9lZGl0b3IpCisJCXNldGVudigiR0lUX0VESVRPUiIsICI6IiwgMSk7CisKKwkvKiBTYW5pdHkgY2hlY2sgb3B0aW9ucyAqLworCWlmIChhbWVuZCAmJiAhY3VycmVudF9oZWFkKQorCQlkaWUoXygiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iKSk7CisJaWYgKGFtZW5kICYmIHdoZW5jZSAhPSBGUk9NX0NPTU1JVCkgeworCQlpZiAod2hlbmNlID09IEZST01fTUVSR0UpCisJCQlkaWUoXygiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIpKTsKKwkJZWxzZSBpZiAod2hlbmNlID09IEZST01fQ0hFUlJZX1BJQ0spCisJCQlkaWUoXygiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hlcnJ5LXBpY2sgLS0gY2Fubm90IGFtZW5kLiIpKTsKKwl9CisJaWYgKGZpeHVwX21lc3NhZ2UgJiYgc3F1YXNoX21lc3NhZ2UpCisJCWRpZShfKCJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIikpOworCWlmICh1c2VfbWVzc2FnZSkKKwkJZisrOworCWlmIChlZGl0X21lc3NhZ2UpCisJCWYrKzsKKwlpZiAoZml4dXBfbWVzc2FnZSkKKwkJZisrOworCWlmIChsb2dmaWxlKQorCQlmKys7CisJaWYgKGYgPiAxKQorCQlkaWUoXygiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iKSk7CisJaWYgKG1lc3NhZ2UubGVuICYmIGYgPiAwKQorCQlkaWUoKF8oIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi8tLWZpeHVwLiIpKSk7CisJaWYgKGYgfHwgbWVzc2FnZS5sZW4pCisJCXRlbXBsYXRlX2ZpbGUgPSBOVUxMOworCWlmIChlZGl0X21lc3NhZ2UpCisJCXVzZV9tZXNzYWdlID0gZWRpdF9tZXNzYWdlOworCWlmIChhbWVuZCAmJiAhdXNlX21lc3NhZ2UgJiYgIWZpeHVwX21lc3NhZ2UpCisJCXVzZV9tZXNzYWdlID0gIkhFQUQiOworCWlmICghdXNlX21lc3NhZ2UgJiYgd2hlbmNlICE9IEZST01fQ0hFUlJZX1BJQ0sgJiYgcmVuZXdfYXV0aG9yc2hpcCkKKwkJZGllKF8oIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iKSk7CisJaWYgKHVzZV9tZXNzYWdlKSB7CisJCXVzZV9tZXNzYWdlX2J1ZmZlciA9IHJlYWRfY29tbWl0X21lc3NhZ2UodXNlX21lc3NhZ2UpOworCQlpZiAoIXJlbmV3X2F1dGhvcnNoaXApIHsKKwkJCWF1dGhvcl9tZXNzYWdlID0gdXNlX21lc3NhZ2U7CisJCQlhdXRob3JfbWVzc2FnZV9idWZmZXIgPSB1c2VfbWVzc2FnZV9idWZmZXI7CisJCX0KKwl9CisJaWYgKHdoZW5jZSA9PSBGUk9NX0NIRVJSWV9QSUNLICYmICFyZW5ld19hdXRob3JzaGlwKSB7CisJCWF1dGhvcl9tZXNzYWdlID0gIkNIRVJSWV9QSUNLX0hFQUQiOworCQlhdXRob3JfbWVzc2FnZV9idWZmZXIgPSByZWFkX2NvbW1pdF9tZXNzYWdlKGF1dGhvcl9tZXNzYWdlKTsKKwl9CisKKwlpZiAocGF0Y2hfaW50ZXJhY3RpdmUpCisJCWludGVyYWN0aXZlID0gMTsKKworCWlmICghIWFsc28gKyAhIW9ubHkgKyAhIWFsbCArICEhaW50ZXJhY3RpdmUgPiAxKQorCQlkaWUoXygiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIikpOworCWlmIChhcmdjID09IDAgJiYgKGFsc28gfHwgKG9ubHkgJiYgIWFtZW5kKSkpCisJCWRpZShfKCJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iKSk7CisJaWYgKGFyZ2MgPT0gMCAmJiBvbmx5ICYmIGFtZW5kKQorCQlvbmx5X2luY2x1ZGVfYXNzdW1lZCA9IF8oIkNsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iKTsKKwlpZiAoYXJnYyA+IDAgJiYgIWFsc28gJiYgIW9ubHkpCisJCW9ubHlfaW5jbHVkZV9hc3N1bWVkID0gXygiRXhwbGljaXQgcGF0aHMgc3BlY2lmaWVkIHdpdGhvdXQgLWkgbm9yIC1vOyBhc3N1bWluZyAtLW9ubHkgcGF0aHMuLi4iKTsKKwlpZiAoIWNsZWFudXBfYXJnIHx8ICFzdHJjbXAoY2xlYW51cF9hcmcsICJkZWZhdWx0IikpCisJCWNsZWFudXBfbW9kZSA9IHVzZV9lZGl0b3IgPyBDTEVBTlVQX0FMTCA6IENMRUFOVVBfU1BBQ0U7CisJZWxzZSBpZiAoIXN0cmNtcChjbGVhbnVwX2FyZywgInZlcmJhdGltIikpCisJCWNsZWFudXBfbW9kZSA9IENMRUFOVVBfTk9ORTsKKwllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAid2hpdGVzcGFjZSIpKQorCQljbGVhbnVwX21vZGUgPSBDTEVBTlVQX1NQQUNFOworCWVsc2UgaWYgKCFzdHJjbXAoY2xlYW51cF9hcmcsICJzdHJpcCIpKQorCQljbGVhbnVwX21vZGUgPSBDTEVBTlVQX0FMTDsKKwllbHNlCisJCWRpZShfKCJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIpLCBjbGVhbnVwX2FyZyk7CisKKwloYW5kbGVfdW50cmFja2VkX2ZpbGVzX2FyZyhzKTsKKworCWlmIChhbGwgJiYgYXJnYyA+IDApCisJCWRpZShfKCJQYXRocyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UuIikpOworCisJaWYgKHMtPm51bGxfdGVybWluYXRpb24gJiYgc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX0xPTkcpCisJCXN0YXR1c19mb3JtYXQgPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTjsKKwlpZiAoc3RhdHVzX2Zvcm1hdCAhPSBTVEFUVVNfRk9STUFUX0xPTkcpCisJCWRyeV9ydW4gPSAxOworCisJcmV0dXJuIGFyZ2M7Cit9CisKK3N0YXRpYyBpbnQgZHJ5X3J1bl9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIGNvbnN0IHN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCwgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgY29tbWl0YWJsZTsKKwljb25zdCBjaGFyICppbmRleF9maWxlOworCisJaW5kZXhfZmlsZSA9IHByZXBhcmVfaW5kZXgoYXJnYywgYXJndiwgcHJlZml4LCBjdXJyZW50X2hlYWQsIDEpOworCWNvbW1pdGFibGUgPSBydW5fc3RhdHVzKHN0ZG91dCwgaW5kZXhfZmlsZSwgcHJlZml4LCAwLCBzKTsKKwlyb2xsYmFja19pbmRleF9maWxlcygpOworCisJcmV0dXJuIGNvbW1pdGFibGUgPyAwIDogMTsKK30KKworc3RhdGljIGludCBwYXJzZV9zdGF0dXNfc2xvdChjb25zdCBjaGFyICp2YXIsIGludCBvZmZzZXQpCit7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZmZzZXQsICJoZWFkZXIiKSkKKwkJcmV0dXJuIFdUX1NUQVRVU19IRUFERVI7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZmZzZXQsICJicmFuY2giKSkKKwkJcmV0dXJuIFdUX1NUQVRVU19PTkJSQU5DSDsKKwlpZiAoIXN0cmNhc2VjbXAodmFyK29mZnNldCwgInVwZGF0ZWQiKQorCQl8fCAhc3RyY2FzZWNtcCh2YXIrb2Zmc2V0LCAiYWRkZWQiKSkKKwkJcmV0dXJuIFdUX1NUQVRVU19VUERBVEVEOworCWlmICghc3RyY2FzZWNtcCh2YXIrb2Zmc2V0LCAiY2hhbmdlZCIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX0NIQU5HRUQ7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZmZzZXQsICJ1bnRyYWNrZWQiKSkKKwkJcmV0dXJuIFdUX1NUQVRVU19VTlRSQUNLRUQ7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZmZzZXQsICJub2JyYW5jaCIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX05PQlJBTkNIOworCWlmICghc3RyY2FzZWNtcCh2YXIrb2Zmc2V0LCAidW5tZXJnZWQiKSkKKwkJcmV0dXJuIFdUX1NUQVRVU19VTk1FUkdFRDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3N0YXR1c19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJc3RydWN0IHd0X3N0YXR1cyAqcyA9IGNiOworCisJaWYgKCFwcmVmaXhjbXAoaywgImNvbHVtbi4iKSkKKwkJcmV0dXJuIGdpdF9jb2x1bW5fY29uZmlnKGssIHYsICJzdGF0dXMiLCAmcy0+Y29sb3B0cyk7CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IikpIHsKKwkJaW50IGlzX2Jvb2w7CisJCXMtPnN1Ym1vZHVsZV9zdW1tYXJ5ID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrLCB2LCAmaXNfYm9vbCk7CisJCWlmIChpc19ib29sICYmIHMtPnN1Ym1vZHVsZV9zdW1tYXJ5KQorCQkJcy0+c3VibW9kdWxlX3N1bW1hcnkgPSAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuY29sb3IiKSB8fCAhc3RyY21wKGssICJjb2xvci5zdGF0dXMiKSkgeworCQlzLT51c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghcHJlZml4Y21wKGssICJzdGF0dXMuY29sb3IuIikgfHwgIXByZWZpeGNtcChrLCAiY29sb3Iuc3RhdHVzLiIpKSB7CisJCWludCBzbG90ID0gcGFyc2Vfc3RhdHVzX3Nsb3QoaywgMTMpOworCQlpZiAoc2xvdCA8IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKCF2KQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGspOworCQljb2xvcl9wYXJzZSh2LCBrLCBzLT5jb2xvcl9wYWxldHRlW3Nsb3RdKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMucmVsYXRpdmVwYXRocyIpKSB7CisJCXMtPnJlbGF0aXZlX3BhdGhzID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMiKSkgeworCQlpZiAoIXYpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2woayk7CisJCWVsc2UgaWYgKCFzdHJjbXAodiwgIm5vIikpCisJCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9fVU5UUkFDS0VEX0ZJTEVTOworCQllbHNlIGlmICghc3RyY21wKHYsICJub3JtYWwiKSkKKwkJCXMtPnNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19OT1JNQUxfVU5UUkFDS0VEX0ZJTEVTOworCQllbHNlIGlmICghc3RyY21wKHYsICJhbGwiKSkKKwkJCXMtPnNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19BTExfVU5UUkFDS0VEX0ZJTEVTOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoXygiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIiksIHYpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9kaWZmX3VpX2NvbmZpZyhrLCB2LCBOVUxMKTsKK30KKworaW50IGNtZF9zdGF0dXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RhdGljIHN0cnVjdCB3dF9zdGF0dXMgczsKKwlpbnQgZmQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX3N0YXR1c19vcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJCU9QVF9TRVRfSU5UKCdzJywgInNob3J0IiwgJnN0YXR1c19mb3JtYXQsCisJCQkgICAgTl8oInNob3cgc3RhdHVzIGNvbmNpc2VseSIpLCBTVEFUVVNfRk9STUFUX1NIT1JUKSwKKwkJT1BUX0JPT0xFQU4oJ2InLCAiYnJhbmNoIiwgJnMuc2hvd19icmFuY2gsCisJCQkgICAgTl8oInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIikpLAorCQlPUFRfU0VUX0lOVCgwLCAicG9yY2VsYWluIiwgJnN0YXR1c19mb3JtYXQsCisJCQkgICAgTl8oIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IiksCisJCQkgICAgU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU4pLAorCQlPUFRfQk9PTEVBTigneicsICJudWxsIiwgJnMubnVsbF90ZXJtaW5hdGlvbiwKKwkJCSAgICBOXygidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiKSksCisJCXsgT1BUSU9OX1NUUklORywgJ3UnLCAidW50cmFja2VkLWZpbGVzIiwgJnVudHJhY2tlZF9maWxlc19hcmcsCisJCSAgTl8oIm1vZGUiKSwKKwkJICBOXygic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSJhbGwiIH0sCisJCU9QVF9CT09MRUFOKDAsICJpZ25vcmVkIiwgJnNob3dfaWdub3JlZF9pbl9zdGF0dXMsCisJCQkgICAgTl8oInNob3cgaWdub3JlZCBmaWxlcyIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAwLCAiaWdub3JlLXN1Ym1vZHVsZXMiLCAmaWdub3JlX3N1Ym1vZHVsZV9hcmcsIE5fKCJ3aGVuIiksCisJCSAgTl8oImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gKERlZmF1bHQ6IGFsbCkiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpImFsbCIgfSwKKwkJT1BUX0NPTFVNTigwLCAiY29sdW1uIiwgJnMuY29sb3B0cywgTl8oImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9zdGF0dXNfdXNhZ2UsIGJ1aWx0aW5fc3RhdHVzX29wdGlvbnMpOworCisJd3Rfc3RhdHVzX3ByZXBhcmUoJnMpOworCWdpdG1vZHVsZXNfY29uZmlnKCk7CisJZ2l0X2NvbmZpZyhnaXRfc3RhdHVzX2NvbmZpZywgJnMpOworCWRldGVybWluZV93aGVuY2UoJnMpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9zdGF0dXNfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9zdGF0dXNfdXNhZ2UsIDApOworCWZpbmFsaXplX2NvbG9wdHMoJnMuY29sb3B0cywgLTEpOworCisJaWYgKHMubnVsbF90ZXJtaW5hdGlvbiAmJiBzdGF0dXNfZm9ybWF0ID09IFNUQVRVU19GT1JNQVRfTE9ORykKKwkJc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOOworCisJaGFuZGxlX3VudHJhY2tlZF9maWxlc19hcmcoJnMpOworCWlmIChzaG93X2lnbm9yZWRfaW5fc3RhdHVzKQorCQlzLnNob3dfaWdub3JlZF9maWxlcyA9IDE7CisJaWYgKCphcmd2KQorCQlzLnBhdGhzcGVjID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndik7CisKKwlyZWFkX2NhY2hlX3ByZWxvYWQocy5wYXRoc3BlYyk7CisJcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCBSRUZSRVNIX1FVSUVUfFJFRlJFU0hfVU5NRVJHRUQsIHMucGF0aHNwZWMsIE5VTEwsIE5VTEwpOworCisJZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgMCk7CisJaWYgKDAgPD0gZmQpCisJCXVwZGF0ZV9pbmRleF9pZl9hYmxlKCZ0aGVfaW5kZXgsICZpbmRleF9sb2NrKTsKKworCXMuaXNfaW5pdGlhbCA9IGdldF9zaGExKHMucmVmZXJlbmNlLCBzaGExKSA/IDEgOiAwOworCXMuaWdub3JlX3N1Ym1vZHVsZV9hcmcgPSBpZ25vcmVfc3VibW9kdWxlX2FyZzsKKwl3dF9zdGF0dXNfY29sbGVjdCgmcyk7CisKKwlpZiAocy5yZWxhdGl2ZV9wYXRocykKKwkJcy5wcmVmaXggPSBwcmVmaXg7CisKKwlzd2l0Y2ggKHN0YXR1c19mb3JtYXQpIHsKKwljYXNlIFNUQVRVU19GT1JNQVRfU0hPUlQ6CisJCXd0X3Nob3J0c3RhdHVzX3ByaW50KCZzKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTjoKKwkJd3RfcG9yY2VsYWluX3ByaW50KCZzKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUVVNfRk9STUFUX0xPTkc6CisJCXMudmVyYm9zZSA9IHZlcmJvc2U7CisJCXMuaWdub3JlX3N1Ym1vZHVsZV9hcmcgPSBpZ25vcmVfc3VibW9kdWxlX2FyZzsKKwkJd3Rfc3RhdHVzX3ByaW50KCZzKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcmludF9zdW1tYXJ5KGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgaW50IGluaXRpYWxfY29tbWl0KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBzdHJidWYgZm9ybWF0ID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgY2hhciBqdW5rX3NoYTFbMjBdOworCWNvbnN0IGNoYXIgKmhlYWQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBjdHggPSB7MH07CisJc3RydWN0IHN0cmJ1ZiBhdXRob3JfaWRlbnQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdHRlcl9pZGVudCA9IFNUUkJVRl9JTklUOworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdChzaGExKTsKKwlpZiAoIWNvbW1pdCkKKwkJZGllKF8oImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiKSk7CisJaWYgKCFjb21taXQgfHwgcGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCWRpZShfKCJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiKSk7CisKKwlzdHJidWZfYWRkc3RyKCZmb3JtYXQsICJmb3JtYXQ6JWhdICVzIik7CisKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWFuIDwlYWU+IiwgJmF1dGhvcl9pZGVudCwgJnBjdHgpOworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlY24gPCVjZT4iLCAmY29tbWl0dGVyX2lkZW50LCAmcGN0eCk7CisJaWYgKHN0cmJ1Zl9jbXAoJmF1dGhvcl9pZGVudCwgJmNvbW1pdHRlcl9pZGVudCkpIHsKKwkJc3RyYnVmX2FkZHN0cigmZm9ybWF0LCAiXG4gQXV0aG9yOiAiKTsKKwkJc3RyYnVmX2FkZGJ1Zl9wZXJjZW50cXVvdGUoJmZvcm1hdCwgJmF1dGhvcl9pZGVudCk7CisJfQorCWlmICghdXNlcl9pZGVudF9zdWZmaWNpZW50bHlfZ2l2ZW4oKSkgeworCQlzdHJidWZfYWRkc3RyKCZmb3JtYXQsICJcbiBDb21taXR0ZXI6ICIpOworCQlzdHJidWZfYWRkYnVmX3BlcmNlbnRxdW90ZSgmZm9ybWF0LCAmY29tbWl0dGVyX2lkZW50KTsKKwkJaWYgKGFkdmljZV9pbXBsaWNpdF9pZGVudGl0eSkgeworCQkJc3RyYnVmX2FkZGNoKCZmb3JtYXQsICdcbicpOworCQkJc3RyYnVmX2FkZHN0cigmZm9ybWF0LCBfKGltcGxpY2l0X2lkZW50X2FkdmljZSkpOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZhdXRob3JfaWRlbnQpOworCXN0cmJ1Zl9yZWxlYXNlKCZjb21taXR0ZXJfaWRlbnQpOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CisKKwlyZXYuZGlmZiA9IDE7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9CisJCURJRkZfRk9STUFUX1NIT1JUU1RBVCB8IERJRkZfRk9STUFUX1NVTU1BUlk7CisKKwlyZXYudmVyYm9zZV9oZWFkZXIgPSAxOworCXJldi5zaG93X3Jvb3RfZGlmZiA9IDE7CisJZ2V0X2NvbW1pdF9mb3JtYXQoZm9ybWF0LmJ1ZiwgJnJldik7CisJcmV2LmFsd2F5c19zaG93X2hlYWRlciA9IDA7CisJcmV2LmRpZmZvcHQuZGV0ZWN0X3JlbmFtZSA9IDE7CisJcmV2LmRpZmZvcHQuYnJlYWtfb3B0ID0gMDsKKwlkaWZmX3NldHVwX2RvbmUoJnJldi5kaWZmb3B0KTsKKworCWhlYWQgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBqdW5rX3NoYTEsIDAsIE5VTEwpOworCXByaW50ZigiWyVzJXMgIiwKKwkJIXByZWZpeGNtcChoZWFkLCAicmVmcy9oZWFkcy8iKSA/CisJCQloZWFkICsgMTEgOgorCQkJIXN0cmNtcChoZWFkLCAiSEVBRCIpID8KKwkJCQlfKCJkZXRhY2hlZCBIRUFEIikgOgorCQkJCWhlYWQsCisJCWluaXRpYWxfY29tbWl0ID8gXygiIChyb290LWNvbW1pdCkiKSA6ICIiKTsKKworCWlmICghbG9nX3RyZWVfY29tbWl0KCZyZXYsIGNvbW1pdCkpIHsKKwkJcmV2LmFsd2F5c19zaG93X2hlYWRlciA9IDE7CisJCXJldi51c2VfdGVybWluYXRvciA9IDE7CisJCWxvZ190cmVlX2NvbW1pdCgmcmV2LCBjb21taXQpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZmb3JtYXQpOworfQorCitzdGF0aWMgaW50IGdpdF9jb21taXRfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCXN0cnVjdCB3dF9zdGF0dXMgKnMgPSBjYjsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFzdHJjbXAoaywgImNvbW1pdC50ZW1wbGF0ZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmdGVtcGxhdGVfZmlsZSwgaywgdik7CisJaWYgKCFzdHJjbXAoaywgImNvbW1pdC5zdGF0dXMiKSkgeworCQlpbmNsdWRlX3N0YXR1cyA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RhdHVzID0gZ2l0X2dwZ19jb25maWcoaywgdiwgTlVMTCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZ2l0X3N0YXR1c19jb25maWcoaywgdiwgcyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHBvc3RfcmV3cml0ZV9ob29rW10gPSAiaG9va3MvcG9zdC1yZXdyaXRlIjsKKworc3RhdGljIGludCBydW5fcmV3cml0ZV9ob29rKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZHNoYTEsCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3c2hhMSkKK3sKKwkvKiBvbGRzaGExIFNQIG5ld3NoYTEgTEYgTlVMICovCisJc3RhdGljIGNoYXIgYnVmWzIqNDAgKyAzXTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jOworCWNvbnN0IGNoYXIgKmFyZ3ZbM107CisJaW50IGNvZGU7CisJc2l6ZV90IG47CisKKwlpZiAoYWNjZXNzKGdpdF9wYXRoKHBvc3RfcmV3cml0ZV9ob29rKSwgWF9PSykgPCAwKQorCQlyZXR1cm4gMDsKKworCWFyZ3ZbMF0gPSBnaXRfcGF0aChwb3N0X3Jld3JpdGVfaG9vayk7CisJYXJndlsxXSA9ICJhbWVuZCI7CisJYXJndlsyXSA9IE5VTEw7CisKKwltZW1zZXQoJnByb2MsIDAsIHNpemVvZihwcm9jKSk7CisJcHJvYy5hcmd2ID0gYXJndjsKKwlwcm9jLmluID0gLTE7CisJcHJvYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKworCWNvZGUgPSBzdGFydF9jb21tYW5kKCZwcm9jKTsKKwlpZiAoY29kZSkKKwkJcmV0dXJuIGNvZGU7CisJbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyAlc1xuIiwKKwkJICAgICBzaGExX3RvX2hleChvbGRzaGExKSwgc2hhMV90b19oZXgobmV3c2hhMSkpOworCXdyaXRlX2luX2Z1bGwocHJvYy5pbiwgYnVmLCBuKTsKKwljbG9zZShwcm9jLmluKTsKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJnByb2MpOworfQorCitpbnQgY21kX2NvbW1pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdGF0aWMgc3RydWN0IHd0X3N0YXR1cyBzOworCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fY29tbWl0X29wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IikpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiKSksCisKKwkJT1BUX0dST1VQKE5fKCJDb21taXQgbWVzc2FnZSBvcHRpb25zIikpLAorCQlPUFRfRklMRU5BTUUoJ0YnLCAiZmlsZSIsICZsb2dmaWxlLCBOXygicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIpKSwKKwkJT1BUX1NUUklORygwLCAiYXV0aG9yIiwgJmZvcmNlX2F1dGhvciwgTl8oImF1dGhvciIpLCBOXygib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiKSksCisJCU9QVF9TVFJJTkcoMCwgImRhdGUiLCAmZm9yY2VfZGF0ZSwgTl8oImRhdGUiKSwgTl8oIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIpKSwKKwkJT1BUX0NBTExCQUNLKCdtJywgIm1lc3NhZ2UiLCAmbWVzc2FnZSwgTl8oIm1lc3NhZ2UiKSwgTl8oImNvbW1pdCBtZXNzYWdlIiksIG9wdF9wYXJzZV9tKSwKKwkJT1BUX1NUUklORygnYycsICJyZWVkaXQtbWVzc2FnZSIsICZlZGl0X21lc3NhZ2UsIE5fKCJjb21taXQiKSwgTl8oInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IikpLAorCQlPUFRfU1RSSU5HKCdDJywgInJldXNlLW1lc3NhZ2UiLCAmdXNlX21lc3NhZ2UsIE5fKCJjb21taXQiKSwgTl8oInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IikpLAorCQlPUFRfU1RSSU5HKDAsICJmaXh1cCIsICZmaXh1cF9tZXNzYWdlLCBOXygiY29tbWl0IiksIE5fKCJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IikpLAorCQlPUFRfU1RSSU5HKDAsICJzcXVhc2giLCAmc3F1YXNoX21lc3NhZ2UsIE5fKCJjb21taXQiKSwgTl8oInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IikpLAorCQlPUFRfQk9PTEVBTigwLCAicmVzZXQtYXV0aG9yIiwgJnJlbmV3X2F1dGhvcnNoaXAsIE5fKCJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIikpLAorCQlPUFRfQk9PTEVBTigncycsICJzaWdub2ZmIiwgJnNpZ25vZmYsIE5fKCJhZGQgU2lnbmVkLW9mZi1ieToiKSksCisJCU9QVF9GSUxFTkFNRSgndCcsICJ0ZW1wbGF0ZSIsICZ0ZW1wbGF0ZV9maWxlLCBOXygidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIikpLAorCQlPUFRfQk9PTCgnZScsICJlZGl0IiwgJmVkaXRfZmxhZywgTl8oImZvcmNlIGVkaXQgb2YgY29tbWl0IikpLAorCQlPUFRfU1RSSU5HKDAsICJjbGVhbnVwIiwgJmNsZWFudXBfYXJnLCBOXygiZGVmYXVsdCIpLCBOXygiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgInN0YXR1cyIsICZpbmNsdWRlX3N0YXR1cywgTl8oImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIikpLAorCQl7IE9QVElPTl9TVFJJTkcsICdTJywgImdwZy1zaWduIiwgJnNpZ25fY29tbWl0LCBOXygia2V5IGlkIiksCisJCSAgTl8oIkdQRyBzaWduIGNvbW1pdCIpLCBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpICIiIH0sCisJCS8qIGVuZCBjb21taXQgbWVzc2FnZSBvcHRpb25zICovCisKKwkJT1BUX0dST1VQKE5fKCJDb21taXQgY29udGVudHMgb3B0aW9ucyIpKSwKKwkJT1BUX0JPT0xFQU4oJ2EnLCAiYWxsIiwgJmFsbCwgTl8oImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIpKSwKKwkJT1BUX0JPT0xFQU4oJ2knLCAiaW5jbHVkZSIsICZhbHNvLCBOXygiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IikpLAorCQlPUFRfQk9PTEVBTigwLCAiaW50ZXJhY3RpdmUiLCAmaW50ZXJhY3RpdmUsIE5fKCJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIpKSwKKwkJT1BUX0JPT0xFQU4oJ3AnLCAicGF0Y2giLCAmcGF0Y2hfaW50ZXJhY3RpdmUsIE5fKCJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIikpLAorCQlPUFRfQk9PTEVBTignbycsICJvbmx5IiwgJm9ubHksIE5fKCJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiKSksCisJCU9QVF9CT09MRUFOKCduJywgIm5vLXZlcmlmeSIsICZub192ZXJpZnksIE5fKCJieXBhc3MgcHJlLWNvbW1pdCBob29rIikpLAorCQlPUFRfQk9PTEVBTigwLCAiZHJ5LXJ1biIsICZkcnlfcnVuLCBOXygic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgInNob3J0IiwgJnN0YXR1c19mb3JtYXQsIE5fKCJzaG93IHN0YXR1cyBjb25jaXNlbHkiKSwKKwkJCSAgICBTVEFUVVNfRk9STUFUX1NIT1JUKSwKKwkJT1BUX0JPT0xFQU4oMCwgImJyYW5jaCIsICZzLnNob3dfYnJhbmNoLCBOXygic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iKSksCisJCU9QVF9TRVRfSU5UKDAsICJwb3JjZWxhaW4iLCAmc3RhdHVzX2Zvcm1hdCwKKwkJCSAgICBOXygibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiKSwgU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU4pLAorCQlPUFRfQk9PTEVBTigneicsICJudWxsIiwgJnMubnVsbF90ZXJtaW5hdGlvbiwKKwkJCSAgICBOXygidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiKSksCisJCU9QVF9CT09MRUFOKDAsICJhbWVuZCIsICZhbWVuZCwgTl8oImFtZW5kIHByZXZpb3VzIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgIm5vLXBvc3QtcmV3cml0ZSIsICZub19wb3N0X3Jld3JpdGUsIE5fKCJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siKSksCisJCXsgT1BUSU9OX1NUUklORywgJ3UnLCAidW50cmFja2VkLWZpbGVzIiwgJnVudHJhY2tlZF9maWxlc19hcmcsIE5fKCJtb2RlIiksIE5fKCJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiKSwgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSJhbGwiIH0sCisJCS8qIGVuZCBjb21taXQgY29udGVudHMgb3B0aW9ucyAqLworCisJCXsgT1BUSU9OX0JPT0xFQU4sIDAsICJhbGxvdy1lbXB0eSIsICZhbGxvd19lbXB0eSwgTlVMTCwKKwkJICBOXygib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIpLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ISURERU4gfSwKKwkJeyBPUFRJT05fQk9PTEVBTiwgMCwgImFsbG93LWVtcHR5LW1lc3NhZ2UiLCAmYWxsb3dfZW1wdHlfbWVzc2FnZSwgTlVMTCwKKwkJICBOXygib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIpLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ISURERU4gfSwKKworCQlPUFRfRU5EKCkKKwl9OworCisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYXV0aG9yX2lkZW50ID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqaW5kZXhfZmlsZSwgKnJlZmxvZ19tc2c7CisJY2hhciAqbmwsICpwOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IHJlZl9sb2NrICpyZWZfbG9jazsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMLCAqKnBwdHIgPSAmcGFyZW50czsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCWludCBhbGxvd19mYXN0X2ZvcndhcmQgPSAxOworCXN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhID0gTlVMTDsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29tbWl0X3VzYWdlLCBidWlsdGluX2NvbW1pdF9vcHRpb25zKTsKKworCXd0X3N0YXR1c19wcmVwYXJlKCZzKTsKKwlnaXRtb2R1bGVzX2NvbmZpZygpOworCWdpdF9jb25maWcoZ2l0X2NvbW1pdF9jb25maWcsICZzKTsKKwlkZXRlcm1pbmVfd2hlbmNlKCZzKTsKKwlzLmNvbG9wdHMgPSAwOworCisJaWYgKGdldF9zaGExKCJIRUFEIiwgc2hhMSkpCisJCWN1cnJlbnRfaGVhZCA9IE5VTEw7CisJZWxzZSB7CisJCWN1cnJlbnRfaGVhZCA9IGxvb2t1cF9jb21taXRfb3JfZGllKHNoYTEsICJIRUFEIik7CisJCWlmICghY3VycmVudF9oZWFkIHx8IHBhcnNlX2NvbW1pdChjdXJyZW50X2hlYWQpKQorCQkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIpKTsKKwl9CisJYXJnYyA9IHBhcnNlX2FuZF92YWxpZGF0ZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY29tbWl0X29wdGlvbnMsCisJCQkJCSAgYnVpbHRpbl9jb21taXRfdXNhZ2UsCisJCQkJCSAgcHJlZml4LCBjdXJyZW50X2hlYWQsICZzKTsKKwlpZiAoZHJ5X3J1bikKKwkJcmV0dXJuIGRyeV9ydW5fY29tbWl0KGFyZ2MsIGFyZ3YsIHByZWZpeCwgY3VycmVudF9oZWFkLCAmcyk7CisJaW5kZXhfZmlsZSA9IHByZXBhcmVfaW5kZXgoYXJnYywgYXJndiwgcHJlZml4LCBjdXJyZW50X2hlYWQsIDApOworCisJLyogU2V0IHVwIGV2ZXJ5dGhpbmcgZm9yIHdyaXRpbmcgdGhlIGNvbW1pdCBvYmplY3QuICBUaGlzIGluY2x1ZGVzCisJICAgcnVubmluZyBob29rcywgd3JpdGluZyB0aGUgdHJlZXMsIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSB1c2VyLiAgKi8KKwlpZiAoIXByZXBhcmVfdG9fY29tbWl0KGluZGV4X2ZpbGUsIHByZWZpeCwKKwkJCSAgICAgICBjdXJyZW50X2hlYWQsICZzLCAmYXV0aG9yX2lkZW50KSkgeworCQlyb2xsYmFja19pbmRleF9maWxlcygpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgcGFyZW50cyAqLworCXJlZmxvZ19tc2cgPSBnZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIik7CisJaWYgKCFjdXJyZW50X2hlYWQpIHsKKwkJaWYgKCFyZWZsb2dfbXNnKQorCQkJcmVmbG9nX21zZyA9ICJjb21taXQgKGluaXRpYWwpIjsKKwl9IGVsc2UgaWYgKGFtZW5kKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqYzsKKworCQlpZiAoIXJlZmxvZ19tc2cpCisJCQlyZWZsb2dfbXNnID0gImNvbW1pdCAoYW1lbmQpIjsKKwkJZm9yIChjID0gY3VycmVudF9oZWFkLT5wYXJlbnRzOyBjOyBjID0gYy0+bmV4dCkKKwkJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGMtPml0ZW0sIHBwdHIpLT5uZXh0OworCX0gZWxzZSBpZiAod2hlbmNlID09IEZST01fTUVSR0UpIHsKKwkJc3RydWN0IHN0cmJ1ZiBtID0gU1RSQlVGX0lOSVQ7CisJCUZJTEUgKmZwOworCisJCWlmICghcmVmbG9nX21zZykKKwkJCXJlZmxvZ19tc2cgPSAiY29tbWl0IChtZXJnZSkiOworCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChjdXJyZW50X2hlYWQsIHBwdHIpLT5uZXh0OworCQlmcCA9IGZvcGVuKGdpdF9wYXRoKCJNRVJHRV9IRUFEIiksICJyIik7CisJCWlmIChmcCA9PSBOVUxMKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciKSwKKwkJCQkgIGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpOworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJm0sIGZwLCAnXG4nKSAhPSBFT0YpIHsKKwkJCXN0cnVjdCBjb21taXQgKnBhcmVudDsKKworCQkJcGFyZW50ID0gZ2V0X21lcmdlX3BhcmVudChtLmJ1Zik7CisJCQlpZiAoIXBhcmVudCkKKwkJCQlkaWUoXygiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIpLCBtLmJ1Zik7CisJCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChwYXJlbnQsIHBwdHIpLT5uZXh0OworCQl9CisJCWZjbG9zZShmcCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZtKTsKKwkJaWYgKCFzdGF0KGdpdF9wYXRoKCJNRVJHRV9NT0RFIiksICZzdGF0YnVmKSkgeworCQkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aCgiTUVSR0VfTU9ERSIpLCAwKSA8IDApCisJCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiKSk7CisJCQlpZiAoIXN0cmNtcChzYi5idWYsICJuby1mZiIpKQorCQkJCWFsbG93X2Zhc3RfZm9yd2FyZCA9IDA7CisJCX0KKwkJaWYgKGFsbG93X2Zhc3RfZm9yd2FyZCkKKwkJCXBhcmVudHMgPSByZWR1Y2VfaGVhZHMocGFyZW50cyk7CisJfSBlbHNlIHsKKwkJaWYgKCFyZWZsb2dfbXNnKQorCQkJcmVmbG9nX21zZyA9ICh3aGVuY2UgPT0gRlJPTV9DSEVSUllfUElDSykKKwkJCQkJPyAiY29tbWl0IChjaGVycnktcGljaykiCisJCQkJCTogImNvbW1pdCI7CisJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGN1cnJlbnRfaGVhZCwgcHB0ciktPm5leHQ7CisJfQorCisJLyogRmluYWxseSwgZ2V0IHRoZSBjb21taXQgbWVzc2FnZSAqLworCXN0cmJ1Zl9yZXNldCgmc2IpOworCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCAwKSA8IDApIHsKKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisJCWRpZShfKCJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiKSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwl9CisKKwkvKiBUcnVuY2F0ZSB0aGUgbWVzc2FnZSBqdXN0IGJlZm9yZSB0aGUgZGlmZiwgaWYgYW55LiAqLworCWlmICh2ZXJib3NlKSB7CisJCXAgPSBzdHJzdHIoc2IuYnVmLCAiXG5kaWZmIC0tZ2l0ICIpOworCQlpZiAocCAhPSBOVUxMKQorCQkJc3RyYnVmX3NldGxlbigmc2IsIHAgLSBzYi5idWYgKyAxKTsKKwl9CisKKwlpZiAoY2xlYW51cF9tb2RlICE9IENMRUFOVVBfTk9ORSkKKwkJc3RyaXBzcGFjZSgmc2IsIGNsZWFudXBfbW9kZSA9PSBDTEVBTlVQX0FMTCk7CisJaWYgKHRlbXBsYXRlX3VudG91Y2hlZCgmc2IpICYmICFhbGxvd19lbXB0eV9tZXNzYWdlKSB7CisJCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisJCWZwcmludGYoc3RkZXJyLCBfKCJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChtZXNzYWdlX2lzX2VtcHR5KCZzYikgJiYgIWFsbG93X2VtcHR5X21lc3NhZ2UpIHsKKwkJcm9sbGJhY2tfaW5kZXhfZmlsZXMoKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGFtZW5kKSB7CisJCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfZ3Bnc2lnWzJdID0geyAiZ3Bnc2lnIiwgTlVMTCB9OworCQlleHRyYSA9IHJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcnMoY3VycmVudF9oZWFkLCBleGNsdWRlX2dwZ3NpZyk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKip0YWlsID0gJmV4dHJhOworCQlhcHBlbmRfbWVyZ2VfdGFnX2hlYWRlcnMocGFyZW50cywgJnRhaWwpOworCX0KKworCWlmIChjb21taXRfdHJlZV9leHRlbmRlZCgmc2IsIGFjdGl2ZV9jYWNoZV90cmVlLT5zaGExLCBwYXJlbnRzLCBzaGExLAorCQkJCSBhdXRob3JfaWRlbnQuYnVmLCBzaWduX2NvbW1pdCwgZXh0cmEpKSB7CisJCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisJCWRpZShfKCJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIpKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmF1dGhvcl9pZGVudCk7CisJZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyhleHRyYSk7CisKKwlyZWZfbG9jayA9IGxvY2tfYW55X3JlZl9mb3JfdXBkYXRlKCJIRUFEIiwKKwkJCQkJICAgIWN1cnJlbnRfaGVhZAorCQkJCQkgICA/IE5VTEwKKwkJCQkJICAgOiBjdXJyZW50X2hlYWQtPm9iamVjdC5zaGExLAorCQkJCQkgICAwKTsKKworCW5sID0gc3RyY2hyKHNiLmJ1ZiwgJ1xuJyk7CisJaWYgKG5sKQorCQlzdHJidWZfc2V0bGVuKCZzYiwgbmwgKyAxIC0gc2IuYnVmKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCXN0cmJ1Zl9pbnNlcnQoJnNiLCAwLCByZWZsb2dfbXNnLCBzdHJsZW4ocmVmbG9nX21zZykpOworCXN0cmJ1Zl9pbnNlcnQoJnNiLCBzdHJsZW4ocmVmbG9nX21zZyksICI6ICIsIDIpOworCisJaWYgKCFyZWZfbG9jaykgeworCQlyb2xsYmFja19pbmRleF9maWxlcygpOworCQlkaWUoXygiY2Fubm90IGxvY2sgSEVBRCByZWYiKSk7CisJfQorCWlmICh3cml0ZV9yZWZfc2hhMShyZWZfbG9jaywgc2hhMSwgc2IuYnVmKSA8IDApIHsKKwkJcm9sbGJhY2tfaW5kZXhfZmlsZXMoKTsKKwkJZGllKF8oImNhbm5vdCB1cGRhdGUgSEVBRCByZWYiKSk7CisJfQorCisJdW5saW5rKGdpdF9wYXRoKCJDSEVSUllfUElDS19IRUFEIikpOworCXVubGluayhnaXRfcGF0aCgiUkVWRVJUX0hFQUQiKSk7CisJdW5saW5rKGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpOworCXVubGluayhnaXRfcGF0aCgiTUVSR0VfTVNHIikpOworCXVubGluayhnaXRfcGF0aCgiTUVSR0VfTU9ERSIpKTsKKwl1bmxpbmsoZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKSk7CisKKwlpZiAoY29tbWl0X2luZGV4X2ZpbGVzKCkpCisJCWRpZSAoXygiUmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisJCSAgICAgIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgb3IgcXVvdGEgaXNcbiIKKwkJICAgICAibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iKSk7CisKKwlyZXJlcmUoMCk7CisJcnVuX2hvb2soZ2V0X2luZGV4X2ZpbGUoKSwgInBvc3QtY29tbWl0IiwgTlVMTCk7CisJaWYgKGFtZW5kICYmICFub19wb3N0X3Jld3JpdGUpIHsKKwkJc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjZmc7CisJCWNmZyA9IGluaXRfY29weV9ub3Rlc19mb3JfcmV3cml0ZSgiYW1lbmQiKTsKKwkJaWYgKGNmZykgeworCQkJLyogd2UgYXJlIGFtZW5kaW5nLCBzbyBjdXJyZW50X2hlYWQgaXMgbm90IE5VTEwgKi8KKwkJCWNvcHlfbm90ZV9mb3JfcmV3cml0ZShjZmcsIGN1cnJlbnRfaGVhZC0+b2JqZWN0LnNoYTEsIHNoYTEpOworCQkJZmluaXNoX2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoY2ZnKTsKKwkJfQorCQlydW5fcmV3cml0ZV9ob29rKGN1cnJlbnRfaGVhZC0+b2JqZWN0LnNoYTEsIHNoYTEpOworCX0KKwlpZiAoIXF1aWV0KQorCQlwcmludF9zdW1tYXJ5KHByZWZpeCwgc2hhMSwgIWN1cnJlbnRfaGVhZCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29uZmlnLmMgYi9idWlsdGluL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYzMzZTAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NvbmZpZy5jCkBAIC0wLDAgKzEsNTczIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidWlsdGluX2NvbmZpZ191c2FnZVtdID0geworCU5fKCJnaXQgY29uZmlnIFtvcHRpb25zXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjaGFyICprZXk7CitzdGF0aWMgcmVnZXhfdCAqa2V5X3JlZ2V4cDsKK3N0YXRpYyByZWdleF90ICpyZWdleHA7CitzdGF0aWMgaW50IHNob3dfa2V5czsKK3N0YXRpYyBpbnQgdXNlX2tleV9yZWdleHA7CitzdGF0aWMgaW50IGRvX2FsbDsKK3N0YXRpYyBpbnQgZG9fbm90X21hdGNoOworc3RhdGljIGludCBzZWVuOworc3RhdGljIGNoYXIgZGVsaW0gPSAnPSc7CitzdGF0aWMgY2hhciBrZXlfZGVsaW0gPSAnICc7CitzdGF0aWMgY2hhciB0ZXJtID0gJ1xuJzsKKworc3RhdGljIGludCB1c2VfZ2xvYmFsX2NvbmZpZywgdXNlX3N5c3RlbV9jb25maWcsIHVzZV9sb2NhbF9jb25maWc7CitzdGF0aWMgY29uc3QgY2hhciAqZ2l2ZW5fY29uZmlnX2ZpbGU7CitzdGF0aWMgaW50IGFjdGlvbnMsIHR5cGVzOworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9zbG90LCAqZ2V0X2NvbG9yYm9vbF9zbG90Oworc3RhdGljIGludCBlbmRfbnVsbDsKK3N0YXRpYyBpbnQgcmVzcGVjdF9pbmNsdWRlcyA9IC0xOworCisjZGVmaW5lIEFDVElPTl9HRVQgKDE8PDApCisjZGVmaW5lIEFDVElPTl9HRVRfQUxMICgxPDwxKQorI2RlZmluZSBBQ1RJT05fR0VUX1JFR0VYUCAoMTw8MikKKyNkZWZpbmUgQUNUSU9OX1JFUExBQ0VfQUxMICgxPDwzKQorI2RlZmluZSBBQ1RJT05fQUREICgxPDw0KQorI2RlZmluZSBBQ1RJT05fVU5TRVQgKDE8PDUpCisjZGVmaW5lIEFDVElPTl9VTlNFVF9BTEwgKDE8PDYpCisjZGVmaW5lIEFDVElPTl9SRU5BTUVfU0VDVElPTiAoMTw8NykKKyNkZWZpbmUgQUNUSU9OX1JFTU9WRV9TRUNUSU9OICgxPDw4KQorI2RlZmluZSBBQ1RJT05fTElTVCAoMTw8OSkKKyNkZWZpbmUgQUNUSU9OX0VESVQgKDE8PDEwKQorI2RlZmluZSBBQ1RJT05fU0VUICgxPDwxMSkKKyNkZWZpbmUgQUNUSU9OX1NFVF9BTEwgKDE8PDEyKQorI2RlZmluZSBBQ1RJT05fR0VUX0NPTE9SICgxPDwxMykKKyNkZWZpbmUgQUNUSU9OX0dFVF9DT0xPUkJPT0wgKDE8PDE0KQorCisjZGVmaW5lIFRZUEVfQk9PTCAoMTw8MCkKKyNkZWZpbmUgVFlQRV9JTlQgKDE8PDEpCisjZGVmaW5lIFRZUEVfQk9PTF9PUl9JTlQgKDE8PDIpCisjZGVmaW5lIFRZUEVfUEFUSCAoMTw8MykKKworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9jb25maWdfb3B0aW9uc1tdID0geworCU9QVF9HUk9VUChOXygiQ29uZmlnIGZpbGUgbG9jYXRpb24iKSksCisJT1BUX0JPT0xFQU4oMCwgImdsb2JhbCIsICZ1c2VfZ2xvYmFsX2NvbmZpZywgTl8oInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiKSksCisJT1BUX0JPT0xFQU4oMCwgInN5c3RlbSIsICZ1c2Vfc3lzdGVtX2NvbmZpZywgTl8oInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiKSksCisJT1BUX0JPT0xFQU4oMCwgImxvY2FsIiwgJnVzZV9sb2NhbF9jb25maWcsIE5fKCJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIpKSwKKwlPUFRfU1RSSU5HKCdmJywgImZpbGUiLCAmZ2l2ZW5fY29uZmlnX2ZpbGUsIE5fKCJmaWxlIiksIE5fKCJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiKSksCisJT1BUX0dST1VQKE5fKCJBY3Rpb24iKSksCisJT1BUX0JJVCgwLCAiZ2V0IiwgJmFjdGlvbnMsIE5fKCJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIpLCBBQ1RJT05fR0VUKSwKKwlPUFRfQklUKDAsICJnZXQtYWxsIiwgJmFjdGlvbnMsIE5fKCJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iKSwgQUNUSU9OX0dFVF9BTEwpLAorCU9QVF9CSVQoMCwgImdldC1yZWdleHAiLCAmYWN0aW9ucywgTl8oImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIiksIEFDVElPTl9HRVRfUkVHRVhQKSwKKwlPUFRfQklUKDAsICJyZXBsYWNlLWFsbCIsICZhY3Rpb25zLCBOXygicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iKSwgQUNUSU9OX1JFUExBQ0VfQUxMKSwKKwlPUFRfQklUKDAsICJhZGQiLCAmYWN0aW9ucywgTl8oImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIpLCBBQ1RJT05fQUREKSwKKwlPUFRfQklUKDAsICJ1bnNldCIsICZhY3Rpb25zLCBOXygicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIpLCBBQ1RJT05fVU5TRVQpLAorCU9QVF9CSVQoMCwgInVuc2V0LWFsbCIsICZhY3Rpb25zLCBOXygicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iKSwgQUNUSU9OX1VOU0VUX0FMTCksCisJT1BUX0JJVCgwLCAicmVuYW1lLXNlY3Rpb24iLCAmYWN0aW9ucywgTl8oInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIpLCBBQ1RJT05fUkVOQU1FX1NFQ1RJT04pLAorCU9QVF9CSVQoMCwgInJlbW92ZS1zZWN0aW9uIiwgJmFjdGlvbnMsIE5fKCJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIiksIEFDVElPTl9SRU1PVkVfU0VDVElPTiksCisJT1BUX0JJVCgnbCcsICJsaXN0IiwgJmFjdGlvbnMsIE5fKCJsaXN0IGFsbCIpLCBBQ1RJT05fTElTVCksCisJT1BUX0JJVCgnZScsICJlZGl0IiwgJmFjdGlvbnMsIE5fKCJvcGVuIGFuIGVkaXRvciIpLCBBQ1RJT05fRURJVCksCisJT1BUX1NUUklORygwLCAiZ2V0LWNvbG9yIiwgJmdldF9jb2xvcl9zbG90LCBOXygic2xvdCIpLCBOXygiZmluZCB0aGUgY29sb3IgY29uZmlndXJlZDogW2RlZmF1bHRdIikpLAorCU9QVF9TVFJJTkcoMCwgImdldC1jb2xvcmJvb2wiLCAmZ2V0X2NvbG9yYm9vbF9zbG90LCBOXygic2xvdCIpLCBOXygiZmluZCB0aGUgY29sb3Igc2V0dGluZzogW3N0ZG91dC1pcy10dHldIikpLAorCU9QVF9HUk9VUChOXygiVHlwZSIpKSwKKwlPUFRfQklUKDAsICJib29sIiwgJnR5cGVzLCBOXygidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIiksIFRZUEVfQk9PTCksCisJT1BUX0JJVCgwLCAiaW50IiwgJnR5cGVzLCBOXygidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiKSwgVFlQRV9JTlQpLAorCU9QVF9CSVQoMCwgImJvb2wtb3ItaW50IiwgJnR5cGVzLCBOXygidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IiksIFRZUEVfQk9PTF9PUl9JTlQpLAorCU9QVF9CSVQoMCwgInBhdGgiLCAmdHlwZXMsIE5fKCJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIiksIFRZUEVfUEFUSCksCisJT1BUX0dST1VQKE5fKCJPdGhlciIpKSwKKwlPUFRfQk9PTEVBTigneicsICJudWxsIiwgJmVuZF9udWxsLCBOXygidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIikpLAorCU9QVF9CT09MKDAsICJpbmNsdWRlcyIsICZyZXNwZWN0X2luY2x1ZGVzLCBOXygicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIikpLAorCU9QVF9FTkQoKSwKK307CisKK3N0YXRpYyB2b2lkIGNoZWNrX2FyZ2MoaW50IGFyZ2MsIGludCBtaW4sIGludCBtYXgpIHsKKwlpZiAoYXJnYyA+PSBtaW4gJiYgYXJnYyA8PSBtYXgpCisJCXJldHVybjsKKwllcnJvcigid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOworCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbmZpZ191c2FnZSwgYnVpbHRpbl9jb25maWdfb3B0aW9ucyk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19hbGxfY29uZmlnKGNvbnN0IGNoYXIgKmtleV8sIGNvbnN0IGNoYXIgKnZhbHVlXywgdm9pZCAqY2IpCit7CisJaWYgKHZhbHVlXykKKwkJcHJpbnRmKCIlcyVjJXMlYyIsIGtleV8sIGRlbGltLCB2YWx1ZV8sIHRlcm0pOworCWVsc2UKKwkJcHJpbnRmKCIlcyVjIiwga2V5XywgdGVybSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19jb25maWcoY29uc3QgY2hhciAqa2V5XywgY29uc3QgY2hhciAqdmFsdWVfLCB2b2lkICpjYikKK3sKKwljaGFyIHZhbHVlWzI1Nl07CisJY29uc3QgY2hhciAqdnB0ciA9IHZhbHVlOworCWludCBtdXN0X2ZyZWVfdnB0ciA9IDA7CisJaW50IGR1cF9lcnJvciA9IDA7CisJaW50IG11c3RfcHJpbnRfZGVsaW0gPSAwOworCisJaWYgKCF1c2Vfa2V5X3JlZ2V4cCAmJiBzdHJjbXAoa2V5Xywga2V5KSkKKwkJcmV0dXJuIDA7CisJaWYgKHVzZV9rZXlfcmVnZXhwICYmIHJlZ2V4ZWMoa2V5X3JlZ2V4cCwga2V5XywgMCwgTlVMTCwgMCkpCisJCXJldHVybiAwOworCWlmIChyZWdleHAgIT0gTlVMTCAmJgorCSAgICAoZG9fbm90X21hdGNoIF4gISFyZWdleGVjKHJlZ2V4cCwgKHZhbHVlXz92YWx1ZV86IiIpLCAwLCBOVUxMLCAwKSkpCisJCXJldHVybiAwOworCisJaWYgKHNob3dfa2V5cykgeworCQlwcmludGYoIiVzIiwga2V5Xyk7CisJCW11c3RfcHJpbnRfZGVsaW0gPSAxOworCX0KKwlpZiAoc2VlbiAmJiAhZG9fYWxsKQorCQlkdXBfZXJyb3IgPSAxOworCWlmICh0eXBlcyA9PSBUWVBFX0lOVCkKKwkJc3ByaW50Zih2YWx1ZSwgIiVkIiwgZ2l0X2NvbmZpZ19pbnQoa2V5XywgdmFsdWVfP3ZhbHVlXzoiIikpOworCWVsc2UgaWYgKHR5cGVzID09IFRZUEVfQk9PTCkKKwkJdnB0ciA9IGdpdF9jb25maWdfYm9vbChrZXlfLCB2YWx1ZV8pID8gInRydWUiIDogImZhbHNlIjsKKwllbHNlIGlmICh0eXBlcyA9PSBUWVBFX0JPT0xfT1JfSU5UKSB7CisJCWludCBpc19ib29sLCB2OworCQl2ID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXlfLCB2YWx1ZV8sICZpc19ib29sKTsKKwkJaWYgKGlzX2Jvb2wpCisJCQl2cHRyID0gdiA/ICJ0cnVlIiA6ICJmYWxzZSI7CisJCWVsc2UKKwkJCXNwcmludGYodmFsdWUsICIlZCIsIHYpOworCX0gZWxzZSBpZiAodHlwZXMgPT0gVFlQRV9QQVRIKSB7CisJCWdpdF9jb25maWdfcGF0aG5hbWUoJnZwdHIsIGtleV8sIHZhbHVlXyk7CisJCW11c3RfZnJlZV92cHRyID0gMTsKKwl9IGVsc2UgaWYgKHZhbHVlXykgeworCQl2cHRyID0gdmFsdWVfOworCX0gZWxzZSB7CisJCS8qIEp1c3Qgc2hvdyB0aGUga2V5IG5hbWUgKi8KKwkJdnB0ciA9ICIiOworCQltdXN0X3ByaW50X2RlbGltID0gMDsKKwl9CisJc2VlbisrOworCWlmIChkdXBfZXJyb3IpIHsKKwkJZXJyb3IoIk1vcmUgdGhhbiBvbmUgdmFsdWUgZm9yIHRoZSBrZXkgJXM6ICVzIiwKKwkJCQlrZXlfLCB2cHRyKTsKKwl9CisJZWxzZSB7CisJCWlmIChtdXN0X3ByaW50X2RlbGltKQorCQkJcHJpbnRmKCIlYyIsIGtleV9kZWxpbSk7CisJCXByaW50ZigiJXMlYyIsIHZwdHIsIHRlcm0pOworCX0KKwlpZiAobXVzdF9mcmVlX3ZwdHIpCisJCS8qIElmIHZwdHIgbXVzdCBiZSBmcmVlZCwgaXQncyBhIHBvaW50ZXIgdG8gYQorCQkgKiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYnVmZmVyLCBpdCdzIHNhZmUgdG8gY2FzdCB0bworCQkgKiBjb25zdC4KKwkJKi8KKwkJZnJlZSgoY2hhciAqKXZwdHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3ZhbHVlKGNvbnN0IGNoYXIgKmtleV8sIGNvbnN0IGNoYXIgKnJlZ2V4XykKK3sKKwlpbnQgcmV0ID0gQ09ORklHX0dFTkVSSUNfRVJST1I7CisJY2hhciAqZ2xvYmFsID0gTlVMTCwgKnhkZyA9IE5VTEwsICpyZXBvX2NvbmZpZyA9IE5VTEw7CisJY29uc3QgY2hhciAqc3lzdGVtX3dpZGUgPSBOVUxMLCAqbG9jYWw7CisJc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgaW5jID0gQ09ORklHX0lOQ0xVREVfSU5JVDsKKwljb25maWdfZm5fdCBmbjsKKwl2b2lkICpkYXRhOworCisJbG9jYWwgPSBnaXZlbl9jb25maWdfZmlsZTsKKwlpZiAoIWxvY2FsKSB7CisJCWxvY2FsID0gcmVwb19jb25maWcgPSBnaXRfcGF0aGR1cCgiY29uZmlnIik7CisJCWlmIChnaXRfY29uZmlnX3N5c3RlbSgpKQorCQkJc3lzdGVtX3dpZGUgPSBnaXRfZXRjX2dpdGNvbmZpZygpOworCQlob21lX2NvbmZpZ19wYXRocygmZ2xvYmFsLCAmeGRnLCAiY29uZmlnIik7CisJfQorCisJaWYgKHVzZV9rZXlfcmVnZXhwKSB7CisJCWNoYXIgKnRsOworCisJCS8qCisJCSAqIE5FRURTV09SSzogdGhpcyBuYWl2ZSBwYXR0ZXJuIGxvd2VyY2FzaW5nIG9idmlvdXNseSBkb2VzIG5vdAorCQkgKiB3b3JrIGZvciBtb3JlIGNvbXBsZXggcGF0dGVybnMgbGlrZSAiXlteLl0qRm9vLipiYXIiLgorCQkgKiBQZXJoYXBzIHdlIHNob3VsZCBkZXByZWNhdGUgdGhpcyBhbHRvZ2V0aGVyIHNvbWVkYXkuCisJCSAqLworCisJCWtleSA9IHhzdHJkdXAoa2V5Xyk7CisJCWZvciAodGwgPSBrZXkgKyBzdHJsZW4oa2V5KSAtIDE7CisJCSAgICAgdGwgPj0ga2V5ICYmICp0bCAhPSAnLic7CisJCSAgICAgdGwtLSkKKwkJCSp0bCA9IHRvbG93ZXIoKnRsKTsKKwkJZm9yICh0bCA9IGtleTsgKnRsICYmICp0bCAhPSAnLic7IHRsKyspCisJCQkqdGwgPSB0b2xvd2VyKCp0bCk7CisKKwkJa2V5X3JlZ2V4cCA9IChyZWdleF90Kil4bWFsbG9jKHNpemVvZihyZWdleF90KSk7CisJCWlmIChyZWdjb21wKGtleV9yZWdleHAsIGtleSwgUkVHX0VYVEVOREVEKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBwYXR0ZXJuOiAlc1xuIiwga2V5Xyk7CisJCQlmcmVlKGtleSk7CisJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9QQVRURVJOOworCQkJZ290byBmcmVlX3N0cmluZ3M7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZ2l0X2NvbmZpZ19wYXJzZV9rZXkoa2V5XywgJmtleSwgTlVMTCkpIHsKKwkJCXJldCA9IENPTkZJR19JTlZBTElEX0tFWTsKKwkJCWdvdG8gZnJlZV9zdHJpbmdzOworCQl9CisJfQorCisJaWYgKHJlZ2V4XykgeworCQlpZiAocmVnZXhfWzBdID09ICchJykgeworCQkJZG9fbm90X21hdGNoID0gMTsKKwkJCXJlZ2V4XysrOworCQl9CisKKwkJcmVnZXhwID0gKHJlZ2V4X3QqKXhtYWxsb2Moc2l6ZW9mKHJlZ2V4X3QpKTsKKwkJaWYgKHJlZ2NvbXAocmVnZXhwLCByZWdleF8sIFJFR19FWFRFTkRFRCkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBwYXR0ZXJuOiAlc1xuIiwgcmVnZXhfKTsKKwkJCXJldCA9IENPTkZJR19JTlZBTElEX1BBVFRFUk47CisJCQlnb3RvIGZyZWVfc3RyaW5nczsKKwkJfQorCX0KKworCWZuID0gc2hvd19jb25maWc7CisJZGF0YSA9IE5VTEw7CisJaWYgKHJlc3BlY3RfaW5jbHVkZXMpIHsKKwkJaW5jLmZuID0gZm47CisJCWluYy5kYXRhID0gZGF0YTsKKwkJZm4gPSBnaXRfY29uZmlnX2luY2x1ZGU7CisJCWRhdGEgPSAmaW5jOworCX0KKworCWlmIChkb19hbGwgJiYgc3lzdGVtX3dpZGUpCisJCWdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBzeXN0ZW1fd2lkZSwgZGF0YSk7CisJaWYgKGRvX2FsbCAmJiB4ZGcpCisJCWdpdF9jb25maWdfZnJvbV9maWxlKGZuLCB4ZGcsIGRhdGEpOworCWlmIChkb19hbGwgJiYgZ2xvYmFsKQorCQlnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgZ2xvYmFsLCBkYXRhKTsKKwlpZiAoZG9fYWxsKQorCQlnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgbG9jYWwsIGRhdGEpOworCWdpdF9jb25maWdfZnJvbV9wYXJhbWV0ZXJzKGZuLCBkYXRhKTsKKwlpZiAoIWRvX2FsbCAmJiAhc2VlbikKKwkJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIGxvY2FsLCBkYXRhKTsKKwlpZiAoIWRvX2FsbCAmJiAhc2VlbiAmJiBnbG9iYWwpCisJCWdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBnbG9iYWwsIGRhdGEpOworCWlmICghZG9fYWxsICYmICFzZWVuICYmIHhkZykKKwkJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHhkZywgZGF0YSk7CisJaWYgKCFkb19hbGwgJiYgIXNlZW4gJiYgc3lzdGVtX3dpZGUpCisJCWdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBzeXN0ZW1fd2lkZSwgZGF0YSk7CisKKwlmcmVlKGtleSk7CisJaWYgKHJlZ2V4cCkgeworCQlyZWdmcmVlKHJlZ2V4cCk7CisJCWZyZWUocmVnZXhwKTsKKwl9CisKKwlpZiAoZG9fYWxsKQorCQlyZXQgPSAhc2VlbjsKKwllbHNlCisJCXJldCA9IChzZWVuID09IDEpID8gMCA6IHNlZW4gPiAxID8gMiA6IDE7CisKK2ZyZWVfc3RyaW5nczoKKwlmcmVlKHJlcG9fY29uZmlnKTsKKwlmcmVlKGdsb2JhbCk7CisJZnJlZSh4ZGcpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpub3JtYWxpemVfdmFsdWUoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljaGFyICpub3JtYWxpemVkOworCisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAodHlwZXMgPT0gMCB8fCB0eXBlcyA9PSBUWVBFX1BBVEgpCisJCS8qCisJCSAqIFdlIGRvbid0IGRvIG5vcm1hbGl6YXRpb24gZm9yIFRZUEVfUEFUSCBoZXJlOiBJZgorCQkgKiB0aGUgcGF0aCBpcyBsaWtlIH4vZm9vYmFyLywgd2UgcHJlZmVyIHRvIHN0b3JlCisJCSAqICJ+L2Zvb2Jhci8iIGluIHRoZSBjb25maWcgZmlsZSwgYW5kIHRvIGV4cGFuZCB0aGUgfgorCQkgKiB3aGVuIHJldHJpZXZpbmcgdGhlIHZhbHVlLgorCQkgKi8KKwkJbm9ybWFsaXplZCA9IHhzdHJkdXAodmFsdWUpOworCWVsc2UgeworCQlub3JtYWxpemVkID0geG1hbGxvYyg2NCk7CisJCWlmICh0eXBlcyA9PSBUWVBFX0lOVCkgeworCQkJaW50IHYgPSBnaXRfY29uZmlnX2ludChrZXksIHZhbHVlKTsKKwkJCXNwcmludGYobm9ybWFsaXplZCwgIiVkIiwgdik7CisJCX0KKwkJZWxzZSBpZiAodHlwZXMgPT0gVFlQRV9CT09MKQorCQkJc3ByaW50Zihub3JtYWxpemVkLCAiJXMiLAorCQkJCWdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQllbHNlIGlmICh0eXBlcyA9PSBUWVBFX0JPT0xfT1JfSU5UKSB7CisJCQlpbnQgaXNfYm9vbCwgdjsKKwkJCXYgPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZpc19ib29sKTsKKwkJCWlmICghaXNfYm9vbCkKKwkJCQlzcHJpbnRmKG5vcm1hbGl6ZWQsICIlZCIsIHYpOworCQkJZWxzZQorCQkJCXNwcmludGYobm9ybWFsaXplZCwgIiVzIiwgdiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQl9CisJfQorCisJcmV0dXJuIG5vcm1hbGl6ZWQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NvbG9yX2ZvdW5kOworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9zbG90Oworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcmJvb2xfc2xvdDsKK3N0YXRpYyBjaGFyIHBhcnNlZF9jb2xvcltDT0xPUl9NQVhMRU5dOworCitzdGF0aWMgaW50IGdpdF9nZXRfY29sb3JfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgZ2V0X2NvbG9yX3Nsb3QpKSB7CisJCWlmICghdmFsdWUpCisJCQljb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQljb2xvcl9wYXJzZSh2YWx1ZSwgdmFyLCBwYXJzZWRfY29sb3IpOworCQlnZXRfY29sb3JfZm91bmQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2V0X2NvbG9yKGNvbnN0IGNoYXIgKmRlZl9jb2xvcikKK3sKKwlnZXRfY29sb3JfZm91bmQgPSAwOworCXBhcnNlZF9jb2xvclswXSA9ICdcMCc7CisJZ2l0X2NvbmZpZ193aXRoX29wdGlvbnMoZ2l0X2dldF9jb2xvcl9jb25maWcsIE5VTEwsCisJCQkJZ2l2ZW5fY29uZmlnX2ZpbGUsIHJlc3BlY3RfaW5jbHVkZXMpOworCisJaWYgKCFnZXRfY29sb3JfZm91bmQgJiYgZGVmX2NvbG9yKQorCQljb2xvcl9wYXJzZShkZWZfY29sb3IsICJjb21tYW5kIGxpbmUiLCBwYXJzZWRfY29sb3IpOworCisJZnB1dHMocGFyc2VkX2NvbG9yLCBzdGRvdXQpOworfQorCitzdGF0aWMgaW50IGdldF9jb2xvcmJvb2xfZm91bmQ7CitzdGF0aWMgaW50IGdldF9kaWZmX2NvbG9yX2ZvdW5kOworc3RhdGljIGludCBnZXRfY29sb3JfdWlfZm91bmQ7CitzdGF0aWMgaW50IGdpdF9nZXRfY29sb3Jib29sX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQl2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsIGdldF9jb2xvcmJvb2xfc2xvdCkpCisJCWdldF9jb2xvcmJvb2xfZm91bmQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImRpZmYuY29sb3IiKSkKKwkJZ2V0X2RpZmZfY29sb3JfZm91bmQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImNvbG9yLnVpIikpCisJCWdldF9jb2xvcl91aV9mb3VuZCA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9jb2xvcmJvb2woaW50IHByaW50KQoreworCWdldF9jb2xvcmJvb2xfZm91bmQgPSAtMTsKKwlnZXRfZGlmZl9jb2xvcl9mb3VuZCA9IC0xOworCWdpdF9jb25maWdfd2l0aF9vcHRpb25zKGdpdF9nZXRfY29sb3Jib29sX2NvbmZpZywgTlVMTCwKKwkJCQlnaXZlbl9jb25maWdfZmlsZSwgcmVzcGVjdF9pbmNsdWRlcyk7CisKKwlpZiAoZ2V0X2NvbG9yYm9vbF9mb3VuZCA8IDApIHsKKwkJaWYgKCFzdHJjbXAoZ2V0X2NvbG9yYm9vbF9zbG90LCAiY29sb3IuZGlmZiIpKQorCQkJZ2V0X2NvbG9yYm9vbF9mb3VuZCA9IGdldF9kaWZmX2NvbG9yX2ZvdW5kOworCQlpZiAoZ2V0X2NvbG9yYm9vbF9mb3VuZCA8IDApCisJCQlnZXRfY29sb3Jib29sX2ZvdW5kID0gZ2V0X2NvbG9yX3VpX2ZvdW5kOworCX0KKworCWdldF9jb2xvcmJvb2xfZm91bmQgPSB3YW50X2NvbG9yKGdldF9jb2xvcmJvb2xfZm91bmQpOworCisJaWYgKHByaW50KSB7CisJCXByaW50ZigiJXNcbiIsIGdldF9jb2xvcmJvb2xfZm91bmQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiBnZXRfY29sb3Jib29sX2ZvdW5kID8gMCA6IDE7Cit9CisKK2ludCBjbWRfY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBub25naXQgPSAhc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnk7CisJY2hhciAqdmFsdWU7CisKKwlnaXZlbl9jb25maWdfZmlsZSA9IGdldGVudihDT05GSUdfRU5WSVJPTk1FTlQpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2NvbmZpZ19vcHRpb25zLAorCQkJICAgICBidWlsdGluX2NvbmZpZ191c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlpZiAodXNlX2dsb2JhbF9jb25maWcgKyB1c2Vfc3lzdGVtX2NvbmZpZyArIHVzZV9sb2NhbF9jb25maWcgKyAhIWdpdmVuX2NvbmZpZ19maWxlID4gMSkgeworCQllcnJvcigib25seSBvbmUgY29uZmlnIGZpbGUgYXQgYSB0aW1lLiIpOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jb25maWdfdXNhZ2UsIGJ1aWx0aW5fY29uZmlnX29wdGlvbnMpOworCX0KKworCWlmICh1c2VfZ2xvYmFsX2NvbmZpZykgeworCQljaGFyICp1c2VyX2NvbmZpZyA9IE5VTEw7CisJCWNoYXIgKnhkZ19jb25maWcgPSBOVUxMOworCisJCWhvbWVfY29uZmlnX3BhdGhzKCZ1c2VyX2NvbmZpZywgJnhkZ19jb25maWcsICJjb25maWciKTsKKworCQlpZiAoIXVzZXJfY29uZmlnKQorCQkJLyoKKwkJCSAqIEl0IGlzIHVua25vd24gaWYgSE9NRS8uZ2l0Y29uZmlnIGV4aXN0cywgc28KKwkJCSAqIHdlIGRvIG5vdCBrbm93IGlmIHdlIHNob3VsZCB3cml0ZSB0byBYREcKKwkJCSAqIGxvY2F0aW9uOyBlcnJvciBvdXQgZXZlbiBpZiBYREdfQ09ORklHX0hPTUUKKwkJCSAqIGlzIHNldCBhbmQgcG9pbnRzIGF0IGEgc2FuZSBsb2NhdGlvbi4KKwkJCSAqLworCQkJZGllKCIkSE9NRSBub3Qgc2V0Iik7CisKKwkJaWYgKGFjY2Vzc19vcl93YXJuKHVzZXJfY29uZmlnLCBSX09LKSAmJgorCQkgICAgeGRnX2NvbmZpZyAmJiAhYWNjZXNzX29yX3dhcm4oeGRnX2NvbmZpZywgUl9PSykpCisJCQlnaXZlbl9jb25maWdfZmlsZSA9IHhkZ19jb25maWc7CisJCWVsc2UKKwkJCWdpdmVuX2NvbmZpZ19maWxlID0gdXNlcl9jb25maWc7CisJfQorCWVsc2UgaWYgKHVzZV9zeXN0ZW1fY29uZmlnKQorCQlnaXZlbl9jb25maWdfZmlsZSA9IGdpdF9ldGNfZ2l0Y29uZmlnKCk7CisJZWxzZSBpZiAodXNlX2xvY2FsX2NvbmZpZykKKwkJZ2l2ZW5fY29uZmlnX2ZpbGUgPSBnaXRfcGF0aGR1cCgiY29uZmlnIik7CisJZWxzZSBpZiAoZ2l2ZW5fY29uZmlnX2ZpbGUpIHsKKwkJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGdpdmVuX2NvbmZpZ19maWxlKSAmJiBwcmVmaXgpCisJCQlnaXZlbl9jb25maWdfZmlsZSA9CisJCQkJeHN0cmR1cChwcmVmaXhfZmlsZW5hbWUocHJlZml4LAorCQkJCQkJCXN0cmxlbihwcmVmaXgpLAorCQkJCQkJCWdpdmVuX2NvbmZpZ19maWxlKSk7CisJfQorCisJaWYgKHJlc3BlY3RfaW5jbHVkZXMgPT0gLTEpCisJCXJlc3BlY3RfaW5jbHVkZXMgPSAhZ2l2ZW5fY29uZmlnX2ZpbGU7CisKKwlpZiAoZW5kX251bGwpIHsKKwkJdGVybSA9ICdcMCc7CisJCWRlbGltID0gJ1xuJzsKKwkJa2V5X2RlbGltID0gJ1xuJzsKKwl9CisKKwlpZiAoSEFTX01VTFRJX0JJVFModHlwZXMpKSB7CisJCWVycm9yKCJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZS4iKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29uZmlnX3VzYWdlLCBidWlsdGluX2NvbmZpZ19vcHRpb25zKTsKKwl9CisKKwlpZiAoZ2V0X2NvbG9yX3Nsb3QpCisJICAgIGFjdGlvbnMgfD0gQUNUSU9OX0dFVF9DT0xPUjsKKwlpZiAoZ2V0X2NvbG9yYm9vbF9zbG90KQorCSAgICBhY3Rpb25zIHw9IEFDVElPTl9HRVRfQ09MT1JCT09MOworCisJaWYgKChnZXRfY29sb3Jfc2xvdCB8fCBnZXRfY29sb3Jib29sX3Nsb3QpICYmIHR5cGVzKSB7CisJCWVycm9yKCItLWdldC1jb2xvciBhbmQgdmFyaWFibGUgdHlwZSBhcmUgaW5jb2hlcmVudCIpOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jb25maWdfdXNhZ2UsIGJ1aWx0aW5fY29uZmlnX29wdGlvbnMpOworCX0KKworCWlmIChIQVNfTVVMVElfQklUUyhhY3Rpb25zKSkgeworCQllcnJvcigib25seSBvbmUgYWN0aW9uIGF0IGEgdGltZS4iKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29uZmlnX3VzYWdlLCBidWlsdGluX2NvbmZpZ19vcHRpb25zKTsKKwl9CisJaWYgKGFjdGlvbnMgPT0gMCkKKwkJc3dpdGNoIChhcmdjKSB7CisJCWNhc2UgMTogYWN0aW9ucyA9IEFDVElPTl9HRVQ7IGJyZWFrOworCQljYXNlIDI6IGFjdGlvbnMgPSBBQ1RJT05fU0VUOyBicmVhazsKKwkJY2FzZSAzOiBhY3Rpb25zID0gQUNUSU9OX1NFVF9BTEw7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29uZmlnX3VzYWdlLCBidWlsdGluX2NvbmZpZ19vcHRpb25zKTsKKwkJfQorCisJaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0xJU1QpIHsKKwkJY2hlY2tfYXJnYyhhcmdjLCAwLCAwKTsKKwkJaWYgKGdpdF9jb25maWdfd2l0aF9vcHRpb25zKHNob3dfYWxsX2NvbmZpZywgTlVMTCwKKwkJCQkJICAgIGdpdmVuX2NvbmZpZ19maWxlLAorCQkJCQkgICAgcmVzcGVjdF9pbmNsdWRlcykgPCAwKSB7CisJCQlpZiAoZ2l2ZW5fY29uZmlnX2ZpbGUpCisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIiwKKwkJCQkJICBnaXZlbl9jb25maWdfZmlsZSk7CisJCQllbHNlCisJCQkJZGllKCJlcnJvciBwcm9jZXNzaW5nIGNvbmZpZyBmaWxlKHMpIik7CisJCX0KKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fRURJVCkgeworCQljaGVja19hcmdjKGFyZ2MsIDAsIDApOworCQlpZiAoIWdpdmVuX2NvbmZpZ19maWxlICYmIG5vbmdpdCkKKwkJCWRpZSgibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIpOworCQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJCWxhdW5jaF9lZGl0b3IoZ2l2ZW5fY29uZmlnX2ZpbGUgPworCQkJICAgICAgZ2l2ZW5fY29uZmlnX2ZpbGUgOiBnaXRfcGF0aCgiY29uZmlnIiksCisJCQkgICAgICBOVUxMLCBOVUxMKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fU0VUKSB7CisJCWludCByZXQ7CisJCWNoZWNrX2FyZ2MoYXJnYywgMiwgMik7CisJCXZhbHVlID0gbm9ybWFsaXplX3ZhbHVlKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCQlyZXQgPSBnaXRfY29uZmlnX3NldF9pbl9maWxlKGdpdmVuX2NvbmZpZ19maWxlLCBhcmd2WzBdLCB2YWx1ZSk7CisJCWlmIChyZXQgPT0gQ09ORklHX05PVEhJTkdfU0VUKQorCQkJZXJyb3IoImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKwkJCSIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iLCBhcmd2WzBdKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fU0VUX0FMTCkgeworCQljaGVja19hcmdjKGFyZ2MsIDIsIDMpOworCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoZ2l2ZW5fY29uZmlnX2ZpbGUsCisJCQkJCQkgICAgICAgYXJndlswXSwgdmFsdWUsIGFyZ3ZbMl0sIDApOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9BREQpIHsKKwkJY2hlY2tfYXJnYyhhcmdjLCAyLCAyKTsKKwkJdmFsdWUgPSBub3JtYWxpemVfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKGdpdmVuX2NvbmZpZ19maWxlLAorCQkJCQkJICAgICAgIGFyZ3ZbMF0sIHZhbHVlLCAiXiQiLCAwKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fUkVQTEFDRV9BTEwpIHsKKwkJY2hlY2tfYXJnYyhhcmdjLCAyLCAzKTsKKwkJdmFsdWUgPSBub3JtYWxpemVfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKGdpdmVuX2NvbmZpZ19maWxlLAorCQkJCQkJICAgICAgIGFyZ3ZbMF0sIHZhbHVlLCBhcmd2WzJdLCAxKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fR0VUKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnZXRfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9BTEwpIHsKKwkJZG9fYWxsID0gMTsKKwkJY2hlY2tfYXJnYyhhcmdjLCAxLCAyKTsKKwkJcmV0dXJuIGdldF92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fR0VUX1JFR0VYUCkgeworCQlzaG93X2tleXMgPSAxOworCQl1c2Vfa2V5X3JlZ2V4cCA9IDE7CisJCWRvX2FsbCA9IDE7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnZXRfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1VOU0VUKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCWlmIChhcmdjID09IDIpCisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZShnaXZlbl9jb25maWdfZmlsZSwKKwkJCQkJCQkgICAgICAgYXJndlswXSwgTlVMTCwgYXJndlsxXSwgMCk7CisJCWVsc2UKKwkJCXJldHVybiBnaXRfY29uZmlnX3NldF9pbl9maWxlKGdpdmVuX2NvbmZpZ19maWxlLAorCQkJCQkJICAgICAgYXJndlswXSwgTlVMTCk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1VOU0VUX0FMTCkgeworCQljaGVja19hcmdjKGFyZ2MsIDEsIDIpOworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZShnaXZlbl9jb25maWdfZmlsZSwKKwkJCQkJCSAgICAgICBhcmd2WzBdLCBOVUxMLCBhcmd2WzFdLCAxKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fUkVOQU1FX1NFQ1RJT04pIHsKKwkJaW50IHJldDsKKwkJY2hlY2tfYXJnYyhhcmdjLCAyLCAyKTsKKwkJcmV0ID0gZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbl9pbl9maWxlKGdpdmVuX2NvbmZpZ19maWxlLAorCQkJCQkJCWFyZ3ZbMF0sIGFyZ3ZbMV0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWlmIChyZXQgPT0gMCkKKwkJCWRpZSgiTm8gc3VjaCBzZWN0aW9uISIpOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9SRU1PVkVfU0VDVElPTikgeworCQlpbnQgcmV0OworCQljaGVja19hcmdjKGFyZ2MsIDEsIDEpOworCQlyZXQgPSBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoZ2l2ZW5fY29uZmlnX2ZpbGUsCisJCQkJCQkJYXJndlswXSwgTlVMTCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJldCA9PSAwKQorCQkJZGllKCJObyBzdWNoIHNlY3Rpb24hIik7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9DT0xPUikgeworCQlnZXRfY29sb3IoYXJndlswXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9DT0xPUkJPT0wpIHsKKwkJaWYgKGFyZ2MgPT0gMSkKKwkJCWNvbG9yX3N0ZG91dF9pc190dHkgPSBnaXRfY29uZmlnX2Jvb2woImNvbW1hbmQgbGluZSIsIGFyZ3ZbMF0pOworCQlyZXR1cm4gZ2V0X2NvbG9yYm9vbChhcmdjICE9IDApOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgY21kX3JlcG9fY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWZwcmludGYoc3RkZXJyLCAiV0FSTklORzogZ2l0IHJlcG8tY29uZmlnIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgZ2l0IGNvbmZpZy5cbiIpOworCXJldHVybiBjbWRfY29uZmlnKGFyZ2MsIGFyZ3YsIHByZWZpeCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NvdW50LW9iamVjdHMuYyBiL2J1aWx0aW4vY291bnQtb2JqZWN0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZmFhODgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NvdW50LW9iamVjdHMuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBjb3VudC1vYmplY3RzIi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgdm9pZCBjb3VudF9vYmplY3RzKERJUiAqZCwgY2hhciAqcGF0aCwgaW50IGxlbiwgaW50IHZlcmJvc2UsCisJCQkgIHVuc2lnbmVkIGxvbmcgKmxvb3NlLAorCQkJICBvZmZfdCAqbG9vc2Vfc2l6ZSwKKwkJCSAgdW5zaWduZWQgbG9uZyAqcGFja2VkX2xvb3NlLAorCQkJICB1bnNpZ25lZCBsb25nICpnYXJiYWdlKQoreworCXN0cnVjdCBkaXJlbnQgKmVudDsKKwl3aGlsZSAoKGVudCA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKwkJY2hhciBoZXhbNDFdOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljb25zdCBjaGFyICpjcDsKKwkJaW50IGJhZCA9IDA7CisKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZW50LT5kX25hbWUpKQorCQkJY29udGludWU7CisJCWZvciAoY3AgPSBlbnQtPmRfbmFtZTsgKmNwOyBjcCsrKSB7CisJCQlpbnQgY2ggPSAqY3A7CisJCQlpZiAoKCcwJyA8PSBjaCAmJiBjaCA8PSAnOScpIHx8CisJCQkgICAgKCdhJyA8PSBjaCAmJiBjaCA8PSAnZicpKQorCQkJCWNvbnRpbnVlOworCQkJYmFkID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjcCAtIGVudC0+ZF9uYW1lICE9IDM4KQorCQkJYmFkID0gMTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCW1lbWNweShwYXRoICsgbGVuICsgMywgZW50LT5kX25hbWUsIDM4KTsKKwkJCXBhdGhbbGVuICsgMl0gPSAnLyc7CisJCQlwYXRoW2xlbiArIDQxXSA9IDA7CisJCQlpZiAobHN0YXQocGF0aCwgJnN0KSB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCQliYWQgPSAxOworCQkJZWxzZQorCQkJCSgqbG9vc2Vfc2l6ZSkgKz0geHNpemVfdChvbl9kaXNrX2J5dGVzKHN0KSk7CisJCX0KKwkJaWYgKGJhZCkgeworCQkJaWYgKHZlcmJvc2UpIHsKKwkJCQllcnJvcigiZ2FyYmFnZSBmb3VuZDogJS4qcy8lcyIsCisJCQkJICAgICAgbGVuICsgMiwgcGF0aCwgZW50LT5kX25hbWUpOworCQkJCSgqZ2FyYmFnZSkrKzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCSgqbG9vc2UpKys7CisJCWlmICghdmVyYm9zZSkKKwkJCWNvbnRpbnVlOworCQltZW1jcHkoaGV4LCBwYXRoK2xlbiwgMik7CisJCW1lbWNweShoZXgrMiwgZW50LT5kX25hbWUsIDM4KTsKKwkJaGV4WzQwXSA9IDA7CisJCWlmIChnZXRfc2hhMV9oZXgoaGV4LCBzaGExKSkKKwkJCWRpZSgiaW50ZXJuYWwgZXJyb3IiKTsKKwkJaWYgKGhhc19zaGExX3BhY2soc2hhMSkpCisJCQkoKnBhY2tlZF9sb29zZSkrKzsKKwl9Cit9CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgY291bnRfb2JqZWN0c191c2FnZVtdID0geworCU5fKCJnaXQgY291bnQtb2JqZWN0cyBbLXZdIiksCisJTlVMTAorfTsKKworaW50IGNtZF9jb3VudF9vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCB2ZXJib3NlID0gMDsKKwljb25zdCBjaGFyICpvYmpkaXIgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOworCWludCBsZW4gPSBzdHJsZW4ob2JqZGlyKTsKKwljaGFyICpwYXRoID0geG1hbGxvYyhsZW4gKyA1MCk7CisJdW5zaWduZWQgbG9uZyBsb29zZSA9IDAsIHBhY2tlZCA9IDAsIHBhY2tlZF9sb29zZSA9IDAsIGdhcmJhZ2UgPSAwOworCW9mZl90IGxvb3NlX3NpemUgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0c1tdID0geworCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgY291bnRfb2JqZWN0c191c2FnZSwgMCk7CisJLyogd2UgZG8gbm90IHRha2UgYXJndW1lbnRzIG90aGVyIHRoYW4gZmxhZ3MgZm9yIG5vdyAqLworCWlmIChhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnMoY291bnRfb2JqZWN0c191c2FnZSwgb3B0cyk7CisJbWVtY3B5KHBhdGgsIG9iamRpciwgbGVuKTsKKwlpZiAobGVuICYmIG9iamRpcltsZW4tMV0gIT0gJy8nKQorCQlwYXRoW2xlbisrXSA9ICcvJzsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJRElSICpkOworCQlzcHJpbnRmKHBhdGggKyBsZW4sICIlMDJ4IiwgaSk7CisJCWQgPSBvcGVuZGlyKHBhdGgpOworCQlpZiAoIWQpCisJCQljb250aW51ZTsKKwkJY291bnRfb2JqZWN0cyhkLCBwYXRoLCBsZW4sIHZlcmJvc2UsCisJCQkgICAgICAmbG9vc2UsICZsb29zZV9zaXplLCAmcGFja2VkX2xvb3NlLCAmZ2FyYmFnZSk7CisJCWNsb3NlZGlyKGQpOworCX0KKwlpZiAodmVyYm9zZSkgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwkJdW5zaWduZWQgbG9uZyBudW1fcGFjayA9IDA7CisJCW9mZl90IHNpemVfcGFjayA9IDA7CisJCWlmICghcGFja2VkX2dpdCkKKwkJCXByZXBhcmVfcGFja2VkX2dpdCgpOworCQlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJaWYgKCFwLT5wYWNrX2xvY2FsKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCQljb250aW51ZTsKKwkJCXBhY2tlZCArPSBwLT5udW1fb2JqZWN0czsKKwkJCXNpemVfcGFjayArPSBwLT5wYWNrX3NpemUgKyBwLT5pbmRleF9zaXplOworCQkJbnVtX3BhY2srKzsKKwkJfQorCQlwcmludGYoImNvdW50OiAlbHVcbiIsIGxvb3NlKTsKKwkJcHJpbnRmKCJzaXplOiAlbHVcbiIsICh1bnNpZ25lZCBsb25nKSAobG9vc2Vfc2l6ZSAvIDEwMjQpKTsKKwkJcHJpbnRmKCJpbi1wYWNrOiAlbHVcbiIsIHBhY2tlZCk7CisJCXByaW50ZigicGFja3M6ICVsdVxuIiwgbnVtX3BhY2spOworCQlwcmludGYoInNpemUtcGFjazogJWx1XG4iLCAodW5zaWduZWQgbG9uZykgKHNpemVfcGFjayAvIDEwMjQpKTsKKwkJcHJpbnRmKCJwcnVuZS1wYWNrYWJsZTogJWx1XG4iLCBwYWNrZWRfbG9vc2UpOworCQlwcmludGYoImdhcmJhZ2U6ICVsdVxuIiwgZ2FyYmFnZSk7CisJfQorCWVsc2UKKwkJcHJpbnRmKCIlbHUgb2JqZWN0cywgJWx1IGtpbG9ieXRlc1xuIiwKKwkJICAgICAgIGxvb3NlLCAodW5zaWduZWQgbG9uZykgKGxvb3NlX3NpemUgLyAxMDI0KSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NyZWRlbnRpYWwuYyBiL2J1aWx0aW4vY3JlZGVudGlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MTJmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NyZWRlbnRpYWwuYwpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2VfbXNnW10gPQorCSJnaXQgY3JlZGVudGlhbCBbZmlsbHxhcHByb3ZlfHJlamVjdF0iOworCitpbnQgY21kX2NyZWRlbnRpYWwoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqb3A7CisJc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKKworCW9wID0gYXJndlsxXTsKKwlpZiAoIW9wKQorCQl1c2FnZSh1c2FnZV9tc2cpOworCisJaWYgKGNyZWRlbnRpYWxfcmVhZCgmYywgc3RkaW4pIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBjcmVkZW50aWFsIGZyb20gc3RkaW4iKTsKKworCWlmICghc3RyY21wKG9wLCAiZmlsbCIpKSB7CisJCWNyZWRlbnRpYWxfZmlsbCgmYyk7CisJCWNyZWRlbnRpYWxfd3JpdGUoJmMsIHN0ZG91dCk7CisJfSBlbHNlIGlmICghc3RyY21wKG9wLCAiYXBwcm92ZSIpKSB7CisJCWNyZWRlbnRpYWxfYXBwcm92ZSgmYyk7CisJfSBlbHNlIGlmICghc3RyY21wKG9wLCAicmVqZWN0IikpIHsKKwkJY3JlZGVudGlhbF9yZWplY3QoJmMpOworCX0gZWxzZSB7CisJCXVzYWdlKHVzYWdlX21zZyk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9kZXNjcmliZS5jIGIvYnVpbHRpbi9kZXNjcmliZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZTExZWQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Rlc2NyaWJlLmMKQEAgLTAsMCArMSw0ODkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImhhc2guaCIKKworI2RlZmluZSBTRUVOCQkoMXU8PDApCisjZGVmaW5lIE1BWF9UQUdTCShGTEFHX0JJVFMgLSAxKQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRlc2NyaWJlX3VzYWdlW10gPSB7CisJTl8oImdpdCBkZXNjcmliZSBbb3B0aW9uc10gPGNvbW1pdHRpc2g+KiIpLAorCU5fKCJnaXQgZGVzY3JpYmUgW29wdGlvbnNdIC0tZGlydHkiKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGRlYnVnOwkvKiBEaXNwbGF5IGxvdHMgb2YgdmVyYm9zZSBpbmZvICovCitzdGF0aWMgaW50IGFsbDsJLyogQW55IHZhbGlkIHJlZiBjYW4gYmUgdXNlZCAqLworc3RhdGljIGludCB0YWdzOwkvKiBBbGxvdyBsaWdodHdlaWdodCB0YWdzICovCitzdGF0aWMgaW50IGxvbmdmb3JtYXQ7CitzdGF0aWMgaW50IGFiYnJldiA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworc3RhdGljIGludCBtYXhfY2FuZGlkYXRlcyA9IDEwOworc3RhdGljIHN0cnVjdCBoYXNoX3RhYmxlIG5hbWVzOworc3RhdGljIGludCBoYXZlX3V0aWw7CitzdGF0aWMgY29uc3QgY2hhciAqcGF0dGVybjsKK3N0YXRpYyBpbnQgYWx3YXlzOworc3RhdGljIGNvbnN0IGNoYXIgKmRpcnR5OworCisvKiBkaWZmLWluZGV4IGNvbW1hbmQgYXJndW1lbnRzIHRvIGNoZWNrIGlmIHdvcmtpbmcgdHJlZSBpcyBkaXJ0eS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkaWZmX2luZGV4X2FyZ3NbXSA9IHsKKwkiZGlmZi1pbmRleCIsICItLXF1aWV0IiwgIkhFQUQiLCAiLS0iLCBOVUxMCit9OworCisKK3N0cnVjdCBjb21taXRfbmFtZSB7CisJc3RydWN0IGNvbW1pdF9uYW1lICpuZXh0OworCXVuc2lnbmVkIGNoYXIgcGVlbGVkWzIwXTsKKwlzdHJ1Y3QgdGFnICp0YWc7CisJdW5zaWduZWQgcHJpbzoyOyAvKiBhbm5vdGF0ZWQgdGFnID0gMiwgdGFnID0gMSwgaGVhZCA9IDAgKi8KKwl1bnNpZ25lZCBuYW1lX2NoZWNrZWQ6MTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNvbnN0IGNoYXIgKnBhdGg7Cit9Oworc3RhdGljIGNvbnN0IGNoYXIgKnByaW9fbmFtZXNbXSA9IHsKKwkiaGVhZCIsICJsaWdodHdlaWdodCIsICJhbm5vdGF0ZWQiLAorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaGFzaF9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgaW50IGhhc2g7CisJbWVtY3B5KCZoYXNoLCBzaGExLCBzaXplb2YoaGFzaCkpOworCXJldHVybiBoYXNoOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjb21taXRfbmFtZSAqZmluZF9jb21taXRfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpwZWVsZWQpCit7CisJc3RydWN0IGNvbW1pdF9uYW1lICpuID0gbG9va3VwX2hhc2goaGFzaF9zaGExKHBlZWxlZCksICZuYW1lcyk7CisJd2hpbGUgKG4gJiYgISFoYXNoY21wKHBlZWxlZCwgbi0+cGVlbGVkKSkKKwkJbiA9IG4tPm5leHQ7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgc2V0X3V0aWwodm9pZCAqY2hhaW4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvbW1pdF9uYW1lICpuOworCWZvciAobiA9IGNoYWluOyBuOyBuID0gbi0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KG4tPnBlZWxlZCwgMSk7CisJCWlmIChjKQorCQkJYy0+dXRpbCA9IG47CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlcGxhY2VfbmFtZShzdHJ1Y3QgY29tbWl0X25hbWUgKmUsCisJCQkgICAgICAgaW50IHByaW8sCisJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgICAgICBzdHJ1Y3QgdGFnICoqdGFnKQoreworCWlmICghZSB8fCBlLT5wcmlvIDwgcHJpbykKKwkJcmV0dXJuIDE7CisKKwlpZiAoZS0+cHJpbyA9PSAyICYmIHByaW8gPT0gMikgeworCQkvKiBNdWx0aXBsZSBhbm5vdGF0ZWQgdGFncyBwb2ludCB0byB0aGUgc2FtZSBjb21taXQuCisJCSAqIFNlbGVjdCBvbmUgdG8ga2VlcCBiYXNlZCB1cG9uIHRoZWlyIHRhZ2dlciBkYXRlLgorCQkgKi8KKwkJc3RydWN0IHRhZyAqdDsKKworCQlpZiAoIWUtPnRhZykgeworCQkJdCA9IGxvb2t1cF90YWcoZS0+c2hhMSk7CisJCQlpZiAoIXQgfHwgcGFyc2VfdGFnKHQpKQorCQkJCXJldHVybiAxOworCQkJZS0+dGFnID0gdDsKKwkJfQorCisJCXQgPSBsb29rdXBfdGFnKHNoYTEpOworCQlpZiAoIXQgfHwgcGFyc2VfdGFnKHQpKQorCQkJcmV0dXJuIDA7CisJCSp0YWcgPSB0OworCisJCWlmIChlLT50YWctPmRhdGUgPCB0LT5kYXRlKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF90b19rbm93bl9uYW1lcyhjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlZWxlZCwKKwkJCSAgICAgICBpbnQgcHJpbywKKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBjb21taXRfbmFtZSAqZSA9IGZpbmRfY29tbWl0X25hbWUocGVlbGVkKTsKKwlzdHJ1Y3QgdGFnICp0YWcgPSBOVUxMOworCWlmIChyZXBsYWNlX25hbWUoZSwgcHJpbywgc2hhMSwgJnRhZykpIHsKKwkJaWYgKCFlKSB7CisJCQl2b2lkICoqcG9zOworCQkJZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21taXRfbmFtZSkpOworCQkJaGFzaGNweShlLT5wZWVsZWQsIHBlZWxlZCk7CisJCQlwb3MgPSBpbnNlcnRfaGFzaChoYXNoX3NoYTEocGVlbGVkKSwgZSwgJm5hbWVzKTsKKwkJCWlmIChwb3MpIHsKKwkJCQllLT5uZXh0ID0gKnBvczsKKwkJCQkqcG9zID0gZTsKKwkJCX0gZWxzZSB7CisJCQkJZS0+bmV4dCA9IE5VTEw7CisJCQl9CisJCX0KKwkJZS0+dGFnID0gdGFnOworCQllLT5wcmlvID0gcHJpbzsKKwkJZS0+bmFtZV9jaGVja2VkID0gMDsKKwkJaGFzaGNweShlLT5zaGExLCBzaGExKTsKKwkJZS0+cGF0aCA9IHBhdGg7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9uYW1lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWludCBtaWdodF9iZV90YWcgPSAhcHJlZml4Y21wKHBhdGgsICJyZWZzL3RhZ3MvIik7CisJdW5zaWduZWQgY2hhciBwZWVsZWRbMjBdOworCWludCBpc190YWcsIHByaW87CisKKwlpZiAoIWFsbCAmJiAhbWlnaHRfYmVfdGFnKQorCQlyZXR1cm4gMDsKKworCWlmICghcGVlbF9yZWYocGF0aCwgcGVlbGVkKSAmJiAhaXNfbnVsbF9zaGExKHBlZWxlZCkpIHsKKwkJaXNfdGFnID0gISFoYXNoY21wKHNoYTEsIHBlZWxlZCk7CisJfSBlbHNlIHsKKwkJaGFzaGNweShwZWVsZWQsIHNoYTEpOworCQlpc190YWcgPSAwOworCX0KKworCS8qIElmIC0tYWxsLCB0aGVuIGFueSByZWZzIGFyZSB1c2VkLgorCSAqIElmIC0tdGFncywgdGhlbiBhbnkgdGFncyBhcmUgdXNlZC4KKwkgKiBPdGhlcndpc2Ugb25seSBhbm5vdGF0ZWQgdGFncyBhcmUgdXNlZC4KKwkgKi8KKwlpZiAobWlnaHRfYmVfdGFnKSB7CisJCWlmIChpc190YWcpCisJCQlwcmlvID0gMjsKKwkJZWxzZQorCQkJcHJpbyA9IDE7CisKKwkJaWYgKHBhdHRlcm4gJiYgZm5tYXRjaChwYXR0ZXJuLCBwYXRoICsgMTAsIDApKQorCQkJcHJpbyA9IDA7CisJfQorCWVsc2UKKwkJcHJpbyA9IDA7CisKKwlpZiAoIWFsbCkgeworCQlpZiAoIXByaW8pCisJCQlyZXR1cm4gMDsKKwl9CisJYWRkX3RvX2tub3duX25hbWVzKGFsbCA/IHBhdGggKyA1IDogcGF0aCArIDEwLCBwZWVsZWQsIHByaW8sIHNoYTEpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcG9zc2libGVfdGFnIHsKKwlzdHJ1Y3QgY29tbWl0X25hbWUgKm5hbWU7CisJaW50IGRlcHRoOworCWludCBmb3VuZF9vcmRlcjsKKwl1bnNpZ25lZCBmbGFnX3dpdGhpbjsKK307CisKK3N0YXRpYyBpbnQgY29tcGFyZV9wdChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHBvc3NpYmxlX3RhZyAqYSA9IChzdHJ1Y3QgcG9zc2libGVfdGFnICopYV87CisJc3RydWN0IHBvc3NpYmxlX3RhZyAqYiA9IChzdHJ1Y3QgcG9zc2libGVfdGFnICopYl87CisJaWYgKGEtPmRlcHRoICE9IGItPmRlcHRoKQorCQlyZXR1cm4gYS0+ZGVwdGggLSBiLT5kZXB0aDsKKwlpZiAoYS0+Zm91bmRfb3JkZXIgIT0gYi0+Zm91bmRfb3JkZXIpCisJCXJldHVybiBhLT5mb3VuZF9vcmRlciAtIGItPmZvdW5kX29yZGVyOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5pc2hfZGVwdGhfY29tcHV0YXRpb24oCisJc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCwKKwlzdHJ1Y3QgcG9zc2libGVfdGFnICpiZXN0KQoreworCXVuc2lnbmVkIGxvbmcgc2Vlbl9jb21taXRzID0gMDsKKwl3aGlsZSAoKmxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IHBvcF9jb21taXQobGlzdCk7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGMtPnBhcmVudHM7CisJCXNlZW5fY29tbWl0cysrOworCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgYmVzdC0+ZmxhZ193aXRoaW4pIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqYSA9ICpsaXN0OworCQkJd2hpbGUgKGEpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICppID0gYS0+aXRlbTsKKwkJCQlpZiAoIShpLT5vYmplY3QuZmxhZ3MgJiBiZXN0LT5mbGFnX3dpdGhpbikpCisJCQkJCWJyZWFrOworCQkJCWEgPSBhLT5uZXh0OworCQkJfQorCQkJaWYgKCFhKQorCQkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWJlc3QtPmRlcHRoKys7CisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKwkJCXBhcnNlX2NvbW1pdChwKTsKKwkJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pKQorCQkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHAsIGxpc3QpOworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IGMtPm9iamVjdC5mbGFnczsKKwkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQl9CisJfQorCXJldHVybiBzZWVuX2NvbW1pdHM7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BsYXlfbmFtZShzdHJ1Y3QgY29tbWl0X25hbWUgKm4pCit7CisJaWYgKG4tPnByaW8gPT0gMiAmJiAhbi0+dGFnKSB7CisJCW4tPnRhZyA9IGxvb2t1cF90YWcobi0+c2hhMSk7CisJCWlmICghbi0+dGFnIHx8IHBhcnNlX3RhZyhuLT50YWcpKQorCQkJZGllKF8oImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIpLCBuLT5wYXRoKTsKKwl9CisJaWYgKG4tPnRhZyAmJiAhbi0+bmFtZV9jaGVja2VkKSB7CisJCWlmICghbi0+dGFnLT50YWcpCisJCQlkaWUoXygiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIpLCBuLT5wYXRoKTsKKwkJaWYgKHN0cmNtcChuLT50YWctPnRhZywgYWxsID8gbi0+cGF0aCArIDUgOiBuLT5wYXRoKSkKKwkJCXdhcm5pbmcoXygidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIpLCBuLT50YWctPnRhZywgbi0+cGF0aCk7CisJCW4tPm5hbWVfY2hlY2tlZCA9IDE7CisJfQorCisJaWYgKG4tPnRhZykKKwkJcHJpbnRmKCIlcyIsIG4tPnRhZy0+dGFnKTsKKwllbHNlCisJCXByaW50ZigiJXMiLCBuLT5wYXRoKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19zdWZmaXgoaW50IGRlcHRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXByaW50ZigiLSVkLWclcyIsIGRlcHRoLCBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgYWJicmV2KSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc2NyaWJlKGNvbnN0IGNoYXIgKmFyZywgaW50IGxhc3Rfb25lKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IGNvbW1pdCAqY21pdCwgKmdhdmVfdXBfb24gPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgY29tbWl0X25hbWUgKm47CisJc3RydWN0IHBvc3NpYmxlX3RhZyBhbGxfbWF0Y2hlc1tNQVhfVEFHU107CisJdW5zaWduZWQgaW50IG1hdGNoX2NudCA9IDAsIGFubm90YXRlZF9jbnQgPSAwLCBjdXJfbWF0Y2g7CisJdW5zaWduZWQgbG9uZyBzZWVuX2NvbW1pdHMgPSAwOworCXVuc2lnbmVkIGludCB1bmFubm90YXRlZF9jbnQgPSAwOworCisJaWYgKGdldF9zaGExKGFyZywgc2hhMSkpCisJCWRpZShfKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIpLCBhcmcpOworCWNtaXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwlpZiAoIWNtaXQpCisJCWRpZShfKCIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIpLCBhcmcsIGNvbW1pdF90eXBlKTsKKworCW4gPSBmaW5kX2NvbW1pdF9uYW1lKGNtaXQtPm9iamVjdC5zaGExKTsKKwlpZiAobiAmJiAodGFncyB8fCBhbGwgfHwgbi0+cHJpbyA9PSAyKSkgeworCQkvKgorCQkgKiBFeGFjdCBtYXRjaCB0byBhbiBleGlzdGluZyByZWYuCisJCSAqLworCQlkaXNwbGF5X25hbWUobik7CisJCWlmIChsb25nZm9ybWF0KQorCQkJc2hvd19zdWZmaXgoMCwgbi0+dGFnID8gbi0+dGFnLT50YWdnZWQtPnNoYTEgOiBzaGExKTsKKwkJaWYgKGRpcnR5KQorCQkJcHJpbnRmKCIlcyIsIGRpcnR5KTsKKwkJcHJpbnRmKCJcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFtYXhfY2FuZGlkYXRlcykKKwkJZGllKF8oIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIpLCBzaGExX3RvX2hleChjbWl0LT5vYmplY3Quc2hhMSkpOworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsIF8oInNlYXJjaGluZyB0byBkZXNjcmliZSAlc1xuIiksIGFyZyk7CisKKwlpZiAoIWhhdmVfdXRpbCkgeworCQlmb3JfZWFjaF9oYXNoKCZuYW1lcywgc2V0X3V0aWwsIE5VTEwpOworCQloYXZlX3V0aWwgPSAxOworCX0KKworCWxpc3QgPSBOVUxMOworCWNtaXQtPm9iamVjdC5mbGFncyA9IFNFRU47CisJY29tbWl0X2xpc3RfaW5zZXJ0KGNtaXQsICZsaXN0KTsKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gcG9wX2NvbW1pdCgmbGlzdCk7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGMtPnBhcmVudHM7CisJCXNlZW5fY29tbWl0cysrOworCQluID0gYy0+dXRpbDsKKwkJaWYgKG4pIHsKKwkJCWlmICghdGFncyAmJiAhYWxsICYmIG4tPnByaW8gPCAyKSB7CisJCQkJdW5hbm5vdGF0ZWRfY250Kys7CisJCQl9IGVsc2UgaWYgKG1hdGNoX2NudCA8IG1heF9jYW5kaWRhdGVzKSB7CisJCQkJc3RydWN0IHBvc3NpYmxlX3RhZyAqdCA9ICZhbGxfbWF0Y2hlc1ttYXRjaF9jbnQrK107CisJCQkJdC0+bmFtZSA9IG47CisJCQkJdC0+ZGVwdGggPSBzZWVuX2NvbW1pdHMgLSAxOworCQkJCXQtPmZsYWdfd2l0aGluID0gMXUgPDwgbWF0Y2hfY250OworCQkJCXQtPmZvdW5kX29yZGVyID0gbWF0Y2hfY250OworCQkJCWMtPm9iamVjdC5mbGFncyB8PSB0LT5mbGFnX3dpdGhpbjsKKwkJCQlpZiAobi0+cHJpbyA9PSAyKQorCQkJCQlhbm5vdGF0ZWRfY250Kys7CisJCQl9CisJCQllbHNlIHsKKwkJCQlnYXZlX3VwX29uID0gYzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlmb3IgKGN1cl9tYXRjaCA9IDA7IGN1cl9tYXRjaCA8IG1hdGNoX2NudDsgY3VyX21hdGNoKyspIHsKKwkJCXN0cnVjdCBwb3NzaWJsZV90YWcgKnQgPSAmYWxsX21hdGNoZXNbY3VyX21hdGNoXTsKKwkJCWlmICghKGMtPm9iamVjdC5mbGFncyAmIHQtPmZsYWdfd2l0aGluKSkKKwkJCQl0LT5kZXB0aCsrOworCQl9CisJCWlmIChhbm5vdGF0ZWRfY250ICYmICFsaXN0KSB7CisJCQlpZiAoZGVidWcpCisJCQkJZnByaW50ZihzdGRlcnIsIF8oImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIiksCisJCQkJCXNoYTFfdG9faGV4KGMtPm9iamVjdC5zaGExKSk7CisJCQlicmVhazsKKwkJfQorCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudHMtPml0ZW07CisJCQlwYXJzZV9jb21taXQocCk7CisJCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkKKwkJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShwLCAmbGlzdCk7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gYy0+b2JqZWN0LmZsYWdzOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCX0KKwl9CisKKwlpZiAoIW1hdGNoX2NudCkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gY21pdC0+b2JqZWN0LnNoYTE7CisJCWlmIChhbHdheXMpIHsKKwkJCXByaW50ZigiJXMiLCBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgYWJicmV2KSk7CisJCQlpZiAoZGlydHkpCisJCQkJcHJpbnRmKCIlcyIsIGRpcnR5KTsKKwkJCXByaW50ZigiXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAodW5hbm5vdGF0ZWRfY250KQorCQkJZGllKF8oIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorCQkJICAgICJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIiksCisJCQkgICAgc2hhMV90b19oZXgoc2hhMSkpOworCQllbHNlCisJCQlkaWUoXygiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKwkJCSAgICAiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIpLAorCQkJICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisKKwlxc29ydChhbGxfbWF0Y2hlcywgbWF0Y2hfY250LCBzaXplb2YoYWxsX21hdGNoZXNbMF0pLCBjb21wYXJlX3B0KTsKKworCWlmIChnYXZlX3VwX29uKSB7CisJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKGdhdmVfdXBfb24sICZsaXN0KTsKKwkJc2Vlbl9jb21taXRzLS07CisJfQorCXNlZW5fY29tbWl0cyArPSBmaW5pc2hfZGVwdGhfY29tcHV0YXRpb24oJmxpc3QsICZhbGxfbWF0Y2hlc1swXSk7CisJZnJlZV9jb21taXRfbGlzdChsaXN0KTsKKworCWlmIChkZWJ1ZykgeworCQlmb3IgKGN1cl9tYXRjaCA9IDA7IGN1cl9tYXRjaCA8IG1hdGNoX2NudDsgY3VyX21hdGNoKyspIHsKKwkJCXN0cnVjdCBwb3NzaWJsZV90YWcgKnQgPSAmYWxsX21hdGNoZXNbY3VyX21hdGNoXTsKKwkJCWZwcmludGYoc3RkZXJyLCAiICUtMTFzICU4ZCAlc1xuIiwKKwkJCQlwcmlvX25hbWVzW3QtPm5hbWUtPnByaW9dLAorCQkJCXQtPmRlcHRoLCB0LT5uYW1lLT5wYXRoKTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgXygidHJhdmVyc2VkICVsdSBjb21taXRzXG4iKSwgc2Vlbl9jb21taXRzKTsKKwkJaWYgKGdhdmVfdXBfb24pIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKwkJCQkiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIpLAorCQkJCW1heF9jYW5kaWRhdGVzLCBtYXhfY2FuZGlkYXRlcywKKwkJCQlzaGExX3RvX2hleChnYXZlX3VwX29uLT5vYmplY3Quc2hhMSkpOworCQl9CisJfQorCisJZGlzcGxheV9uYW1lKGFsbF9tYXRjaGVzWzBdLm5hbWUpOworCWlmIChhYmJyZXYpCisJCXNob3dfc3VmZml4KGFsbF9tYXRjaGVzWzBdLmRlcHRoLCBjbWl0LT5vYmplY3Quc2hhMSk7CisJaWYgKGRpcnR5KQorCQlwcmludGYoIiVzIiwgZGlydHkpOworCXByaW50ZigiXG4iKTsKKworCWlmICghbGFzdF9vbmUpCisJCWNsZWFyX2NvbW1pdF9tYXJrcyhjbWl0LCAtMSk7Cit9CisKK2ludCBjbWRfZGVzY3JpYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGNvbnRhaW5zID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0xFQU4oMCwgImNvbnRhaW5zIiwgICAmY29udGFpbnMsIE5fKCJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IikpLAorCQlPUFRfQk9PTEVBTigwLCAiZGVidWciLCAgICAgICZkZWJ1ZywgTl8oImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiKSksCisJCU9QVF9CT09MRUFOKDAsICJhbGwiLCAgICAgICAgJmFsbCwgTl8oInVzZSBhbnkgcmVmIGluIC5naXQvcmVmcyIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgInRhZ3MiLCAgICAgICAmdGFncywgTl8oInVzZSBhbnkgdGFnIGluIC5naXQvcmVmcy90YWdzIikpLAorCQlPUFRfQk9PTEVBTigwLCAibG9uZyIsICAgICAgICZsb25nZm9ybWF0LCBOXygiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIpKSwKKwkJT1BUX19BQkJSRVYoJmFiYnJldiksCisJCU9QVF9TRVRfSU5UKDAsICJleGFjdC1tYXRjaCIsICZtYXhfY2FuZGlkYXRlcywKKwkJCSAgICBOXygib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIpLCAwKSwKKwkJT1BUX0lOVEVHRVIoMCwgImNhbmRpZGF0ZXMiLCAmbWF4X2NhbmRpZGF0ZXMsCisJCQkgICAgTl8oImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiKSksCisJCU9QVF9TVFJJTkcoMCwgIm1hdGNoIiwgICAgICAgJnBhdHRlcm4sIE5fKCJwYXR0ZXJuIiksCisJCQkgICBOXygib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImFsd2F5cyIsICAgICAmYWx3YXlzLAorCQkJICAgTl8oInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIpKSwKKwkJe09QVElPTl9TVFJJTkcsIDAsICJkaXJ0eSIsICAmZGlydHksIE5fKCJtYXJrIiksCisJCQkgICBOXygiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIiksCisJCSBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpICItZGlydHkifSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBkZXNjcmliZV91c2FnZSwgMCk7CisJaWYgKGFiYnJldiA8IDApCisJCWFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCisJaWYgKG1heF9jYW5kaWRhdGVzIDwgMCkKKwkJbWF4X2NhbmRpZGF0ZXMgPSAwOworCWVsc2UgaWYgKG1heF9jYW5kaWRhdGVzID4gTUFYX1RBR1MpCisJCW1heF9jYW5kaWRhdGVzID0gTUFYX1RBR1M7CisKKwlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOworCisJaWYgKGxvbmdmb3JtYXQgJiYgYWJicmV2ID09IDApCisJCWRpZShfKCItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIpKTsKKworCWlmIChjb250YWlucykgeworCQljb25zdCBjaGFyICoqYXJncyA9IHhtYWxsb2MoKDcgKyBhcmdjKSAqIHNpemVvZihjaGFyICopKTsKKwkJaW50IGkgPSAwOworCQlhcmdzW2krK10gPSAibmFtZS1yZXYiOworCQlhcmdzW2krK10gPSAiLS1uYW1lLW9ubHkiOworCQlhcmdzW2krK10gPSAiLS1uby11bmRlZmluZWQiOworCQlpZiAoYWx3YXlzKQorCQkJYXJnc1tpKytdID0gIi0tYWx3YXlzIjsKKwkJaWYgKCFhbGwpIHsKKwkJCWFyZ3NbaSsrXSA9ICItLXRhZ3MiOworCQkJaWYgKHBhdHRlcm4pIHsKKwkJCQljaGFyICpzID0geG1hbGxvYyhzdHJsZW4oIi0tcmVmcz1yZWZzL3RhZ3MvIikgKyBzdHJsZW4ocGF0dGVybikgKyAxKTsKKwkJCQlzcHJpbnRmKHMsICItLXJlZnM9cmVmcy90YWdzLyVzIiwgcGF0dGVybik7CisJCQkJYXJnc1tpKytdID0gczsKKwkJCX0KKwkJfQorCQltZW1jcHkoYXJncyArIGksIGFyZ3YsIGFyZ2MgKiBzaXplb2YoY2hhciAqKSk7CisJCWFyZ3NbaSArIGFyZ2NdID0gTlVMTDsKKwkJcmV0dXJuIGNtZF9uYW1lX3JldihpICsgYXJnYywgYXJncywgcHJlZml4KTsKKwl9CisKKwlpbml0X2hhc2goJm5hbWVzKTsKKwlmb3JfZWFjaF9yYXdyZWYoZ2V0X25hbWUsIE5VTEwpOworCWlmICghbmFtZXMubnIgJiYgIWFsd2F5cykKKwkJZGllKF8oIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIikpOworCisJaWYgKGFyZ2MgPT0gMCkgeworCQlpZiAoZGlydHkpIHsKKwkJCXN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2s7CisJCQlpbnQgZmQ7CisKKwkJCXJlYWRfY2FjaGVfcHJlbG9hZChOVUxMKTsKKwkJCXJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgUkVGUkVTSF9RVUlFVHxSRUZSRVNIX1VOTUVSR0VELAorCQkJCSAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgMCk7CisJCQlpZiAoMCA8PSBmZCkKKwkJCQl1cGRhdGVfaW5kZXhfaWZfYWJsZSgmdGhlX2luZGV4LCAmaW5kZXhfbG9jayk7CisKKwkJCWlmICghY21kX2RpZmZfaW5kZXgoQVJSQVlfU0laRShkaWZmX2luZGV4X2FyZ3MpIC0gMSwKKwkJCQkJICAgIGRpZmZfaW5kZXhfYXJncywgcHJlZml4KSkKKwkJCQlkaXJ0eSA9IE5VTEw7CisJCX0KKwkJZGVzY3JpYmUoIkhFQUQiLCAxKTsKKwl9IGVsc2UgaWYgKGRpcnR5KSB7CisJCWRpZShfKCItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdHRpc2hlcyIpKTsKKwl9IGVsc2UgeworCQl3aGlsZSAoYXJnYy0tID4gMCkgeworCQkJZGVzY3JpYmUoKmFyZ3YrKywgYXJnYyA9PSAwKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZGlmZi1maWxlcy5jIGIvYnVpbHRpbi9kaWZmLWZpbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwODVmOAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZGlmZi1maWxlcy5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZGlmZl9maWxlc191c2FnZVtdID0KKyJnaXQgZGlmZi1maWxlcyBbLXFdIFstMC8tMS8yLzMgfC1jfC0tY2NdIFs8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIFs8cGF0aD4uLi5dIgorQ09NTU9OX0RJRkZfT1BUSU9OU19IRUxQOworCitpbnQgY21kX2RpZmZfZmlsZXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIG9wdGlvbnMgPSAwOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlnaXRtb2R1bGVzX2NvbmZpZygpOworCWdpdF9jb25maWcoZ2l0X2RpZmZfYmFzaWNfY29uZmlnLCBOVUxMKTsgLyogbm8gImRpZmYiIFVJIG9wdGlvbnMgKi8KKwlyZXYuYWJicmV2ID0gMDsKKworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCk7CisJd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMV0sICItLWJhc2UiKSkKKwkJCXJldi5tYXhfY291bnQgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLW91cnMiKSkKKwkJCXJldi5tYXhfY291bnQgPSAyOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLXRoZWlycyIpKQorCQkJcmV2Lm1heF9jb3VudCA9IDM7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1xIikpCisJCQlvcHRpb25zIHw9IERJRkZfU0lMRU5UX09OX1JFTU9WRUQ7CisJCWVsc2UKKwkJCXVzYWdlKGRpZmZfZmlsZXNfdXNhZ2UpOworCQlhcmd2Kys7IGFyZ2MtLTsKKwl9CisJaWYgKCFyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0KQorCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUkFXOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlcmUgYXJlIE5PIHJldmlzaW9uIChpLmUuIHBlbmRpbmcgb2JqZWN0KSBwYXJhbWV0ZXIsCisJICogcmV2Lm1heF9jb3VudCBpcyByZWFzb25hYmxlICgwIDw9IG4gPD0gMyksIGFuZAorCSAqIHRoZXJlIGlzIG5vIG90aGVyIHJldmlzaW9uIGZpbHRlcmluZyBwYXJhbWV0ZXJzLgorCSAqLworCWlmIChyZXYucGVuZGluZy5uciB8fAorCSAgICByZXYubWluX2FnZSAhPSAtMSB8fCByZXYubWF4X2FnZSAhPSAtMSB8fAorCSAgICAzIDwgcmV2Lm1heF9jb3VudCkKKwkJdXNhZ2UoZGlmZl9maWxlc191c2FnZSk7CisKKwkvKgorCSAqICJkaWZmLWZpbGVzIC0tYmFzZSAtcCIgc2hvdWxkIG5vdCBjb21iaW5lIG1lcmdlcyBiZWNhdXNlIGl0CisJICogd2FzIG5vdCBhc2tlZCB0by4gICJkaWZmLWZpbGVzIC1jIC1wIiBzaG91bGQgbm90IGRlbnNpZnkKKwkgKiAodGhlIHVzZXIgc2hvdWxkIGFzayB3aXRoICJkaWZmLWZpbGVzIC0tY2MiIGV4cGxpY2l0bHkpLgorCSAqLworCWlmIChyZXYubWF4X2NvdW50ID09IC0xICYmICFyZXYuY29tYmluZV9tZXJnZXMgJiYKKwkgICAgKHJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkpCisJCXJldi5jb21iaW5lX21lcmdlcyA9IHJldi5kZW5zZV9jb21iaW5lZF9tZXJnZXMgPSAxOworCisJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZChyZXYuZGlmZm9wdC5wYXRoc3BlYy5yYXcpIDwgMCkgeworCQlwZXJyb3IoInJlYWRfY2FjaGVfcHJlbG9hZCIpOworCQlyZXR1cm4gLTE7CisJfQorCXJlc3VsdCA9IHJ1bl9kaWZmX2ZpbGVzKCZyZXYsIG9wdGlvbnMpOworCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXYuZGlmZm9wdCwgcmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZGlmZi1pbmRleC5jIGIvYnVpbHRpbi9kaWZmLWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViMzJiZAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZGlmZi1pbmRleC5jCkBAIC0wLDAgKzEsNTIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZGlmZl9jYWNoZV91c2FnZVtdID0KKyJnaXQgZGlmZi1pbmRleCBbLW1dIFstLWNhY2hlZF0gIgorIls8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCitDT01NT05fRElGRl9PUFRJT05TX0hFTFA7CisKK2ludCBjbWRfZGlmZl9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCWludCBjYWNoZWQgPSAwOworCWludCBpOworCWludCByZXN1bHQ7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCWdpdG1vZHVsZXNfY29uZmlnKCk7CisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCXJldi5hYmJyZXYgPSAwOworCisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1jYWNoZWQiKSkKKwkJCWNhY2hlZCA9IDE7CisJCWVsc2UKKwkJCXVzYWdlKGRpZmZfY2FjaGVfdXNhZ2UpOworCX0KKwlpZiAoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCisJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9SQVc7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyBvbmUgcmV2aXNpb24gKGkuZS4gcGVuZGluZyBvYmplY3QpLAorCSAqIGFuZCB0aGVyZSBpcyBubyByZXZpc2lvbiBmaWx0ZXJpbmcgcGFyYW1ldGVycy4KKwkgKi8KKwlpZiAocmV2LnBlbmRpbmcubnIgIT0gMSB8fAorCSAgICByZXYubWF4X2NvdW50ICE9IC0xIHx8IHJldi5taW5fYWdlICE9IC0xIHx8IHJldi5tYXhfYWdlICE9IC0xKQorCQl1c2FnZShkaWZmX2NhY2hlX3VzYWdlKTsKKwlpZiAoIWNhY2hlZCkKKwkJc2V0dXBfd29ya190cmVlKCk7CisJaWYgKHJlYWRfY2FjaGUoKSA8IDApIHsKKwkJcGVycm9yKCJyZWFkX2NhY2hlIik7CisJCXJldHVybiAtMTsKKwl9CisJcmVzdWx0ID0gcnVuX2RpZmZfaW5kZXgoJnJldiwgY2FjaGVkKTsKKwlyZXR1cm4gZGlmZl9yZXN1bHRfY29kZSgmcmV2LmRpZmZvcHQsIHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2RpZmYtdHJlZS5jIGIvYnVpbHRpbi9kaWZmLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTY0MTdkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9kaWZmLXRyZWUuYwpAQCAtMCwwICsxLDE5MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorCitzdGF0aWMgc3RydWN0IHJldl9pbmZvIGxvZ190cmVlX29wdDsKKworc3RhdGljIGludCBkaWZmX3RyZWVfY29tbWl0X3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBsb2dfdHJlZV9jb21taXQoJmxvZ190cmVlX29wdCwgY29tbWl0KTsKK30KKworLyogRGlmZiBvbmUgb3IgbW9yZSBjb21taXRzLiAqLworc3RhdGljIGludCBzdGRpbl9kaWZmX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpZiAoaXNzcGFjZShsaW5lWzQwXSkgJiYgIWdldF9zaGExX2hleChsaW5lKzQxLCBzaGExKSkgeworCQkvKiBHcmFmdCB0aGUgZmFrZSBwYXJlbnRzIGxvY2FsbHkgdG8gdGhlIGNvbW1pdCAqLworCQlpbnQgcG9zID0gNDE7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwdHIsICpwYXJlbnRzOworCisJCS8qIEZyZWUgdGhlIHJlYWwgcGFyZW50IGxpc3QgKi8KKwkJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnRzOyApIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqdG1wID0gcGFyZW50cy0+bmV4dDsKKwkJCWZyZWUocGFyZW50cyk7CisJCQlwYXJlbnRzID0gdG1wOworCQl9CisJCWNvbW1pdC0+cGFyZW50cyA9IE5VTEw7CisJCXBwdHIgPSAmKGNvbW1pdC0+cGFyZW50cyk7CisJCXdoaWxlIChsaW5lW3Bvc10gJiYgIWdldF9zaGExX2hleChsaW5lICsgcG9zLCBzaGExKSkgeworCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gbG9va3VwX2NvbW1pdChzaGExKTsKKwkJCWlmIChwYXJlbnQpIHsKKwkJCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChwYXJlbnQsIHBwdHIpLT5uZXh0OworCQkJfQorCQkJcG9zICs9IDQxOworCQl9CisJfQorCXJldHVybiBsb2dfdHJlZV9jb21taXQoJmxvZ190cmVlX29wdCwgY29tbWl0KTsKK30KKworLyogRGlmZiB0d28gdHJlZXMuICovCitzdGF0aWMgaW50IHN0ZGluX2RpZmZfdHJlZXMoc3RydWN0IHRyZWUgKnRyZWUxLCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IHRyZWUgKnRyZWUyOworCWlmIChsZW4gIT0gODIgfHwgIWlzc3BhY2UobGluZVs0MF0pIHx8IGdldF9zaGExX2hleChsaW5lICsgNDEsIHNoYTEpKQorCQlyZXR1cm4gZXJyb3IoIk5lZWQgZXhhY3RseSB0d28gdHJlZXMsIHNlcGFyYXRlZCBieSBhIHNwYWNlIik7CisJdHJlZTIgPSBsb29rdXBfdHJlZShzaGExKTsKKwlpZiAoIXRyZWUyIHx8IHBhcnNlX3RyZWUodHJlZTIpKQorCQlyZXR1cm4gLTE7CisJcHJpbnRmKCIlcyAlc1xuIiwgc2hhMV90b19oZXgodHJlZTEtPm9iamVjdC5zaGExKSwKKwkJCSAgc2hhMV90b19oZXgodHJlZTItPm9iamVjdC5zaGExKSk7CisJZGlmZl90cmVlX3NoYTEodHJlZTEtPm9iamVjdC5zaGExLCB0cmVlMi0+b2JqZWN0LnNoYTEsCisJCSAgICAgICAiIiwgJmxvZ190cmVlX29wdC5kaWZmb3B0KTsKKwlsb2dfdHJlZV9kaWZmX2ZsdXNoKCZsb2dfdHJlZV9vcHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpZmZfdHJlZV9zdGRpbihjaGFyICpsaW5lKQoreworCWludCBsZW4gPSBzdHJsZW4obGluZSk7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlpZiAoIWxlbiB8fCBsaW5lW2xlbi0xXSAhPSAnXG4nKQorCQlyZXR1cm4gLTE7CisJbGluZVtsZW4tMV0gPSAwOworCWlmIChnZXRfc2hhMV9oZXgobGluZSwgc2hhMSkpCisJCXJldHVybiAtMTsKKwlvYmogPSBsb29rdXBfdW5rbm93bl9vYmplY3Qoc2hhMSk7CisJaWYgKCFvYmogfHwgIW9iai0+cGFyc2VkKQorCQlvYmogPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJaWYgKCFvYmopCisJCXJldHVybiAtMTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCXJldHVybiBzdGRpbl9kaWZmX2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKW9iaiwgbGluZSwgbGVuKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKQorCQlyZXR1cm4gc3RkaW5fZGlmZl90cmVlcygoc3RydWN0IHRyZWUgKilvYmosIGxpbmUsIGxlbik7CisJZXJyb3IoIk9iamVjdCAlcyBpcyBhICVzLCBub3QgYSBjb21taXQgb3IgdHJlZSIsCisJICAgICAgc2hhMV90b19oZXgoc2hhMSksIHR5cGVuYW1lKG9iai0+dHlwZSkpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgZGlmZl90cmVlX3VzYWdlW10gPQorImdpdCBkaWZmLXRyZWUgWy0tc3RkaW5dIFstbV0gWy1jXSBbLS1jY10gWy1zXSBbLXZdIFstLXByZXR0eV0gWy10XSBbLXJdIFstLXJvb3RdICIKKyJbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8dHJlZS1pc2g+XSBbPHBhdGg+Li4uXVxuIgorIiAgLXIgICAgICAgICAgICBkaWZmIHJlY3Vyc2l2ZWx5XG4iCisiICAtLXJvb3QgICAgICAgIGluY2x1ZGUgdGhlIGluaXRpYWwgY29tbWl0IGFzIGRpZmYgYWdhaW5zdCAvZGV2L251bGxcbiIKK0NPTU1PTl9ESUZGX09QVElPTlNfSEVMUDsKKworc3RhdGljIHZvaWQgZGlmZl90cmVlX3R3ZWFrX3JldihzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqb3B0KQoreworCWlmICghcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpIHsKKwkJaWYgKHJldi0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzKQorCQkJcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9QQVRDSDsKKwkJZWxzZQorCQkJcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9SQVc7CisJfQorfQorCitpbnQgY21kX2RpZmZfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgbnJfc2hhMTsKKwljaGFyIGxpbmVbMTAwMF07CisJc3RydWN0IG9iamVjdCAqdHJlZTEsICp0cmVlMjsKKwlzdGF0aWMgc3RydWN0IHJldl9pbmZvICpvcHQgPSAmbG9nX3RyZWVfb3B0OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgc19yX29wdDsKKwlpbnQgcmVhZF9zdGRpbiA9IDA7CisKKwlpbml0X3JldmlzaW9ucyhvcHQsIHByZWZpeCk7CisJZ2l0bW9kdWxlc19jb25maWcoKTsKKwlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCisJb3B0LT5hYmJyZXYgPSAwOworCW9wdC0+ZGlmZiA9IDE7CisJb3B0LT5kaXNhYmxlX3N0ZGluID0gMTsKKwltZW1zZXQoJnNfcl9vcHQsIDAsIHNpemVvZihzX3Jfb3B0KSk7CisJc19yX29wdC50d2VhayA9IGRpZmZfdHJlZV90d2Vha19yZXY7CisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCBvcHQsICZzX3Jfb3B0KTsKKworCXdoaWxlICgtLWFyZ2MgPiAwKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9ICorK2FyZ3Y7CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGRpbiIpKSB7CisJCQlyZWFkX3N0ZGluID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXVzYWdlKGRpZmZfdHJlZV91c2FnZSk7CisJfQorCisJLyoKKwkgKiBOT1RFISBXZSBleHBlY3QgImEgXmIiIHRvIGJlIGVxdWFsIHRvICJhLi5iIiwgc28gd2UKKwkgKiByZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgb2JqZWN0cyBpZiB0aGUgc2Vjb25kIG9uZQorCSAqIGlzIG1hcmtlZCBVTklOVEVSRVNUSU5HLgorCSAqLworCW5yX3NoYTEgPSBvcHQtPnBlbmRpbmcubnI7CisJc3dpdGNoIChucl9zaGExKSB7CisJY2FzZSAwOgorCQlpZiAoIXJlYWRfc3RkaW4pCisJCQl1c2FnZShkaWZmX3RyZWVfdXNhZ2UpOworCQlicmVhazsKKwljYXNlIDE6CisJCXRyZWUxID0gb3B0LT5wZW5kaW5nLm9iamVjdHNbMF0uaXRlbTsKKwkJZGlmZl90cmVlX2NvbW1pdF9zaGExKHRyZWUxLT5zaGExKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0cmVlMSA9IG9wdC0+cGVuZGluZy5vYmplY3RzWzBdLml0ZW07CisJCXRyZWUyID0gb3B0LT5wZW5kaW5nLm9iamVjdHNbMV0uaXRlbTsKKwkJaWYgKHRyZWUyLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJCXN0cnVjdCBvYmplY3QgKnRtcCA9IHRyZWUyOworCQkJdHJlZTIgPSB0cmVlMTsKKwkJCXRyZWUxID0gdG1wOworCQl9CisJCWRpZmZfdHJlZV9zaGExKHRyZWUxLT5zaGExLAorCQkJICAgICAgIHRyZWUyLT5zaGExLAorCQkJICAgICAgICIiLCAmb3B0LT5kaWZmb3B0KTsKKwkJbG9nX3RyZWVfZGlmZl9mbHVzaChvcHQpOworCQlicmVhazsKKwl9CisKKwlpZiAocmVhZF9zdGRpbikgeworCQlpbnQgc2F2ZWRfbnJsID0gMDsKKwkJaW50IHNhdmVkX2RjY3RjID0gMDsKKworCQlpZiAob3B0LT5kaWZmb3B0LmRldGVjdF9yZW5hbWUpCisJCQlvcHQtPmRpZmZvcHQuc2V0dXAgfD0gKERJRkZfU0VUVVBfVVNFX1NJWkVfQ0FDSEUgfAorCQkJCQkgICAgICAgRElGRl9TRVRVUF9VU0VfQ0FDSEUpOworCQl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbikpIHsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwkJCWlmIChnZXRfc2hhMV9oZXgobGluZSwgc2hhMSkpIHsKKwkJCQlmcHV0cyhsaW5lLCBzdGRvdXQpOworCQkJCWZmbHVzaChzdGRvdXQpOworCQkJfQorCQkJZWxzZSB7CisJCQkJZGlmZl90cmVlX3N0ZGluKGxpbmUpOworCQkJCWlmIChzYXZlZF9ucmwgPCBvcHQtPmRpZmZvcHQubmVlZGVkX3JlbmFtZV9saW1pdCkKKwkJCQkJc2F2ZWRfbnJsID0gb3B0LT5kaWZmb3B0Lm5lZWRlZF9yZW5hbWVfbGltaXQ7CisJCQkJaWYgKG9wdC0+ZGlmZm9wdC5kZWdyYWRlZF9jY190b19jKQorCQkJCQlzYXZlZF9kY2N0YyA9IDE7CisJCQl9CisJCX0KKwkJb3B0LT5kaWZmb3B0LmRlZ3JhZGVkX2NjX3RvX2MgPSBzYXZlZF9kY2N0YzsKKwkJb3B0LT5kaWZmb3B0Lm5lZWRlZF9yZW5hbWVfbGltaXQgPSBzYXZlZF9ucmw7CisJfQorCisJcmV0dXJuIGRpZmZfcmVzdWx0X2NvZGUoJm9wdC0+ZGlmZm9wdCwgMCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2RpZmYuYyBiL2J1aWx0aW4vZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NTBiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2RpZmYuYwpAQCAtMCwwICsxLDQzNiBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBkaWZmIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKworc3RydWN0IGJsb2JpbmZvIHsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbW9kZTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIGJ1aWx0aW5fZGlmZl91c2FnZVtdID0KKyJnaXQgZGlmZiBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPHBhdGg+Li4uXSI7CisKK3N0YXRpYyB2b2lkIHN0dWZmX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsCisJCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAorCQkJIGludCBvbGRfc2hhMV92YWxpZCwKKwkJCSBpbnQgbmV3X3NoYTFfdmFsaWQsCisJCQkgY29uc3QgY2hhciAqb2xkX25hbWUsCisJCQkgY29uc3QgY2hhciAqbmV3X25hbWUpCit7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwgKnR3bzsKKworCWlmICghaXNfbnVsbF9zaGExKG9sZF9zaGExKSAmJiAhaXNfbnVsbF9zaGExKG5ld19zaGExKSAmJgorCSAgICAhaGFzaGNtcChvbGRfc2hhMSwgbmV3X3NoYTEpICYmIChvbGRfbW9kZSA9PSBuZXdfbW9kZSkpCisJCXJldHVybjsKKworCWlmIChESUZGX09QVF9UU1Qob3B0LCBSRVZFUlNFX0RJRkYpKSB7CisJCXVuc2lnbmVkIHRtcDsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqdG1wX3U7CisJCWNvbnN0IGNoYXIgKnRtcF9jOworCQl0bXAgPSBvbGRfbW9kZTsgb2xkX21vZGUgPSBuZXdfbW9kZTsgbmV3X21vZGUgPSB0bXA7CisJCXRtcF91ID0gb2xkX3NoYTE7IG9sZF9zaGExID0gbmV3X3NoYTE7IG5ld19zaGExID0gdG1wX3U7CisJCXRtcF9jID0gb2xkX25hbWU7IG9sZF9uYW1lID0gbmV3X25hbWU7IG5ld19uYW1lID0gdG1wX2M7CisJfQorCisJaWYgKG9wdC0+cHJlZml4ICYmCisJICAgIChzdHJuY21wKG9sZF9uYW1lLCBvcHQtPnByZWZpeCwgb3B0LT5wcmVmaXhfbGVuZ3RoKSB8fAorCSAgICAgc3RybmNtcChuZXdfbmFtZSwgb3B0LT5wcmVmaXgsIG9wdC0+cHJlZml4X2xlbmd0aCkpKQorCQlyZXR1cm47CisKKwlvbmUgPSBhbGxvY19maWxlc3BlYyhvbGRfbmFtZSk7CisJdHdvID0gYWxsb2NfZmlsZXNwZWMobmV3X25hbWUpOworCWZpbGxfZmlsZXNwZWMob25lLCBvbGRfc2hhMSwgb2xkX3NoYTFfdmFsaWQsIG9sZF9tb2RlKTsKKwlmaWxsX2ZpbGVzcGVjKHR3bywgbmV3X3NoYTEsIG5ld19zaGExX3ZhbGlkLCBuZXdfbW9kZSk7CisKKwlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBvbmUsIHR3byk7Cit9CisKK3N0YXRpYyBpbnQgYnVpbHRpbl9kaWZmX2JfZihzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgIHN0cnVjdCBibG9iaW5mbyAqYmxvYiwKKwkJCSAgICBjb25zdCBjaGFyICpwYXRoKQoreworCS8qIEJsb2IgdnMgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlKi8KKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChhcmdjID4gMSkKKwkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKworCWlmIChsc3RhdChwYXRoLCAmc3QpKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHN0YXQgJyVzJyIpLCBwYXRoKTsKKwlpZiAoIShTX0lTUkVHKHN0LnN0X21vZGUpIHx8IFNfSVNMTksoc3Quc3RfbW9kZSkpKQorCQlkaWUoXygiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiKSwgcGF0aCk7CisKKwlkaWZmX3NldF9tbmVtb25pY19wcmVmaXgoJnJldnMtPmRpZmZvcHQsICJvLyIsICJ3LyIpOworCisJaWYgKGJsb2JbMF0ubW9kZSA9PSBTX0lGSU5WQUxJRCkKKwkJYmxvYlswXS5tb2RlID0gY2Fub25fbW9kZShzdC5zdF9tb2RlKTsKKworCXN0dWZmX2NoYW5nZSgmcmV2cy0+ZGlmZm9wdCwKKwkJICAgICBibG9iWzBdLm1vZGUsIGNhbm9uX21vZGUoc3Quc3RfbW9kZSksCisJCSAgICAgYmxvYlswXS5zaGExLCBudWxsX3NoYTEsCisJCSAgICAgMSwgMCwKKwkJICAgICBwYXRoLCBwYXRoKTsKKwlkaWZmY29yZV9zdGQoJnJldnMtPmRpZmZvcHQpOworCWRpZmZfZmx1c2goJnJldnMtPmRpZmZvcHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ1aWx0aW5fZGlmZl9ibG9icyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkgICAgICBzdHJ1Y3QgYmxvYmluZm8gKmJsb2IpCit7CisJdW5zaWduZWQgbW9kZSA9IGNhbm9uX21vZGUoU19JRlJFRyB8IDA2NDQpOworCisJaWYgKGFyZ2MgPiAxKQorCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCisJaWYgKGJsb2JbMF0ubW9kZSA9PSBTX0lGSU5WQUxJRCkKKwkJYmxvYlswXS5tb2RlID0gbW9kZTsKKworCWlmIChibG9iWzFdLm1vZGUgPT0gU19JRklOVkFMSUQpCisJCWJsb2JbMV0ubW9kZSA9IG1vZGU7CisKKwlzdHVmZl9jaGFuZ2UoJnJldnMtPmRpZmZvcHQsCisJCSAgICAgYmxvYlswXS5tb2RlLCBibG9iWzFdLm1vZGUsCisJCSAgICAgYmxvYlswXS5zaGExLCBibG9iWzFdLnNoYTEsCisJCSAgICAgMSwgMSwKKwkJICAgICBibG9iWzBdLm5hbWUsIGJsb2JbMV0ubmFtZSk7CisJZGlmZmNvcmVfc3RkKCZyZXZzLT5kaWZmb3B0KTsKKwlkaWZmX2ZsdXNoKCZyZXZzLT5kaWZmb3B0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidWlsdGluX2RpZmZfaW5kZXgoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBjYWNoZWQgPSAwOworCXdoaWxlICgxIDwgYXJnYykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2WzFdOworCQlpZiAoIXN0cmNtcChhcmcsICItLWNhY2hlZCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1zdGFnZWQiKSkKKwkJCWNhY2hlZCA9IDE7CisJCWVsc2UKKwkJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisJCWFyZ3YrKzsgYXJnYy0tOworCX0KKwlpZiAoIWNhY2hlZCkKKwkJc2V0dXBfd29ya190cmVlKCk7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgb25lIHJldmlzaW9uIChpLmUuIHBlbmRpbmcgb2JqZWN0KSwKKwkgKiBhbmQgdGhlcmUgaXMgbm8gcmV2aXNpb24gZmlsdGVyaW5nIHBhcmFtZXRlcnMuCisJICovCisJaWYgKHJldnMtPnBlbmRpbmcubnIgIT0gMSB8fAorCSAgICByZXZzLT5tYXhfY291bnQgIT0gLTEgfHwgcmV2cy0+bWluX2FnZSAhPSAtMSB8fAorCSAgICByZXZzLT5tYXhfYWdlICE9IC0xKQorCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQocmV2cy0+ZGlmZm9wdC5wYXRoc3BlYy5yYXcpIDwgMCkgeworCQlwZXJyb3IoInJlYWRfY2FjaGVfcHJlbG9hZCIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBydW5fZGlmZl9pbmRleChyZXZzLCBjYWNoZWQpOworfQorCitzdGF0aWMgaW50IGJ1aWx0aW5fZGlmZl90cmVlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnQpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqKHNoYTFbMl0pOworCWludCBzd2FwID0gMDsKKworCWlmIChhcmdjID4gMSkKKwkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKworCS8qIFdlIHNhdyB0d28gdHJlZXMsIGVudFswXSBhbmQgZW50WzFdLgorCSAqIGlmIGVudFsxXSBpcyB1bmludGVyZXN0aW5nLCB0aGV5IGFyZSBzd2FwcGVkCisJICovCisJaWYgKGVudFsxXS5pdGVtLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXN3YXAgPSAxOworCXNoYTFbc3dhcF0gPSBlbnRbMF0uaXRlbS0+c2hhMTsKKwlzaGExWzEtc3dhcF0gPSBlbnRbMV0uaXRlbS0+c2hhMTsKKwlkaWZmX3RyZWVfc2hhMShzaGExWzBdLCBzaGExWzFdLCAiIiwgJnJldnMtPmRpZmZvcHQpOworCWxvZ190cmVlX2RpZmZfZmx1c2gocmV2cyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnVpbHRpbl9kaWZmX2NvbWJpbmVkKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJCSBzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnQsCisJCQkJIGludCBlbnRzKQoreworCXN0cnVjdCBzaGExX2FycmF5IHBhcmVudHMgPSBTSEExX0FSUkFZX0lOSVQ7CisJaW50IGk7CisKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisKKwlpZiAoIXJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyAmJiAhcmV2cy0+Y29tYmluZV9tZXJnZXMpCisJCXJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyA9IHJldnMtPmNvbWJpbmVfbWVyZ2VzID0gMTsKKwlmb3IgKGkgPSAxOyBpIDwgZW50czsgaSsrKQorCQlzaGExX2FycmF5X2FwcGVuZCgmcGFyZW50cywgZW50W2ldLml0ZW0tPnNoYTEpOworCWRpZmZfdHJlZV9jb21iaW5lZChlbnRbMF0uaXRlbS0+c2hhMSwgJnBhcmVudHMsCisJCQkgICByZXZzLT5kZW5zZV9jb21iaW5lZF9tZXJnZXMsIHJldnMpOworCXNoYTFfYXJyYXlfY2xlYXIoJnBhcmVudHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWZyZXNoX2luZGV4X3F1aWV0bHkodm9pZCkKK3sKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGU7CisJaW50IGZkOworCisJbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOworCWZkID0gaG9sZF9sb2NrZWRfaW5kZXgobG9ja19maWxlLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm47CisJZGlzY2FyZF9jYWNoZSgpOworCXJlYWRfY2FjaGUoKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVR8UkVGUkVTSF9VTk1FUkdFRCk7CisJdXBkYXRlX2luZGV4X2lmX2FibGUoJnRoZV9pbmRleCwgbG9ja19maWxlKTsKK30KKworc3RhdGljIGludCBidWlsdGluX2RpZmZfZmlsZXMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IG9wdGlvbnMgPSAwOworCisJd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMV0sICItLWJhc2UiKSkKKwkJCXJldnMtPm1heF9jb3VudCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tb3VycyIpKQorCQkJcmV2cy0+bWF4X2NvdW50ID0gMjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS10aGVpcnMiKSkKKwkJCXJldnMtPm1heF9jb3VudCA9IDM7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1xIikpCisJCQlvcHRpb25zIHw9IERJRkZfU0lMRU5UX09OX1JFTU9WRUQ7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBvcHRpb246ICVzIiksIGFyZ3ZbMV0pOworCQlhcmd2Kys7IGFyZ2MtLTsKKwl9CisKKwkvKgorCSAqICJkaWZmIC0tYmFzZSIgc2hvdWxkIG5vdCBjb21iaW5lIG1lcmdlcyBiZWNhdXNlIGl0IHdhcyBub3QKKwkgKiBhc2tlZCB0by4gICJkaWZmIC1jIiBzaG91bGQgbm90IGRlbnNpZnkgKGlmIHRoZSB1c2VyIHdhbnRzCisJICogZGVuc2Ugb25lLCAtLWNjIGNhbiBiZSBleHBsaWNpdGx5IGFza2VkIGZvciwgb3IganVzdCByZWx5CisJICogb24gdGhlIGRlZmF1bHQpLgorCSAqLworCWlmIChyZXZzLT5tYXhfY291bnQgPT0gLTEgJiYgIXJldnMtPmNvbWJpbmVfbWVyZ2VzICYmCisJICAgIChyZXZzLT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkpCisJCXJldnMtPmNvbWJpbmVfbWVyZ2VzID0gcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMTsKKworCXNldHVwX3dvcmtfdHJlZSgpOworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQocmV2cy0+ZGlmZm9wdC5wYXRoc3BlYy5yYXcpIDwgMCkgeworCQlwZXJyb3IoInJlYWRfY2FjaGVfcHJlbG9hZCIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBydW5fZGlmZl9maWxlcyhyZXZzLCBvcHRpb25zKTsKK30KKworaW50IGNtZF9kaWZmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSBlbnRbMTAwXTsKKwlpbnQgZW50cyA9IDAsIGJsb2JzID0gMCwgcGF0aHMgPSAwOworCWNvbnN0IGNoYXIgKnBhdGggPSBOVUxMOworCXN0cnVjdCBibG9iaW5mbyBibG9iWzJdOworCWludCBub25naXQ7CisJaW50IHJlc3VsdCA9IDA7CisKKwkvKgorCSAqIFdlIGNvdWxkIGdldCBOIHRyZWUtaXNoIGluIHRoZSByZXYucGVuZGluZ19vYmplY3RzIGxpc3QuCisJICogQWxzbyB0aGVyZSBjb3VsZCBiZSBNIGJsb2JzIHRoZXJlLCBhbmQgUCBwYXRoc3BlY3MuCisJICoKKwkgKiBOPTAsIE09MDoKKwkgKgljYWNoZSB2cyBmaWxlcyAoZGlmZi1maWxlcykKKwkgKiBOPTAsIE09MjoKKwkgKiAgICAgIGNvbXBhcmUgdHdvIHJhbmRvbSBibG9icy4gIFAgbXVzdCBiZSB6ZXJvLgorCSAqIE49MCwgTT0xLCBQPTE6CisJICoJY29tcGFyZSBhIGJsb2Igd2l0aCBhIHdvcmtpbmcgdHJlZSBmaWxlLgorCSAqCisJICogTj0xLCBNPTA6CisJICogICAgICB0cmVlIHZzIGNhY2hlIChkaWZmLWluZGV4IC0tY2FjaGVkKQorCSAqCisJICogTj0yLCBNPTA6CisJICogICAgICB0cmVlIHZzIHRyZWUgKGRpZmYtdHJlZSkKKwkgKgorCSAqIE49MCwgTT0wLCBQPTI6CisJICogICAgICBjb21wYXJlIHR3byBmaWxlc3lzdGVtIGVudGl0aWVzIChha2EgLS1uby1pbmRleCkuCisJICoKKwkgKiBPdGhlciBjYXNlcyBhcmUgZXJyb3JzLgorCSAqLworCisJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7CisJZ2l0bW9kdWxlc19jb25maWcoKTsKKwlnaXRfY29uZmlnKGdpdF9kaWZmX3VpX2NvbmZpZywgTlVMTCk7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCisJLyogSWYgdGhpcyBpcyBhIG5vLWluZGV4IGRpZmYsIGp1c3QgcnVuIGl0IGFuZCBleGl0IHRoZXJlLiAqLworCWRpZmZfbm9faW5kZXgoJnJldiwgYXJnYywgYXJndiwgbm9uZ2l0LCBwcmVmaXgpOworCisJLyogT3RoZXJ3aXNlLCB3ZSBhcmUgZG9pbmcgdGhlIHVzdWFsICJnaXQiIGRpZmYgKi8KKwlyZXYuZGlmZm9wdC5za2lwX3N0YXRfdW5tYXRjaCA9ICEhZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXg7CisKKwkvKiBTY2FsZSB0byByZWFsIHRlcm1pbmFsIHNpemUgYW5kIHJlc3BlY3Qgc3RhdEdyYXBoV2lkdGggY29uZmlnICovCisJcmV2LmRpZmZvcHQuc3RhdF93aWR0aCA9IC0xOworCXJldi5kaWZmb3B0LnN0YXRfZ3JhcGhfd2lkdGggPSAtMTsKKworCS8qIERlZmF1bHQgdG8gbGV0IGV4dGVybmFsIGFuZCB0ZXh0Y29udiBiZSB1c2VkICovCisJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgQUxMT1dfRVhURVJOQUwpOworCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIEFMTE9XX1RFWFRDT05WKTsKKworCWlmIChub25naXQpCisJCWRpZShfKCJOb3QgYSBnaXQgcmVwb3NpdG9yeSIpKTsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpOworCWlmICghcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkgeworCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJCWRpZmZfc2V0dXBfZG9uZSgmcmV2LmRpZmZvcHQpOworCX0KKworCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIFJFQ1VSU0lWRSk7CisKKwlzZXR1cF9kaWZmX3BhZ2VyKCZyZXYuZGlmZm9wdCk7CisKKwkvKgorCSAqIERvIHdlIGhhdmUgLS1jYWNoZWQgYW5kIG5vdCBoYXZlIGEgcGVuZGluZyBvYmplY3QsIHRoZW4KKwkgKiBkZWZhdWx0IHRvIEhFQUQgYnkgaGFuZC4gIEVlay4KKwkgKi8KKwlpZiAoIXJldi5wZW5kaW5nLm5yKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkKKwkJCQlicmVhazsKKwkJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jYWNoZWQiKSB8fAorCQkJCSAhc3RyY21wKGFyZywgIi0tc3RhZ2VkIikpIHsKKwkJCQlhZGRfaGVhZF90b19wZW5kaW5nKCZyZXYpOworCQkJCWlmICghcmV2LnBlbmRpbmcubnIpIHsKKwkJCQkJc3RydWN0IHRyZWUgKnRyZWU7CisJCQkJCXRyZWUgPSBsb29rdXBfdHJlZShFTVBUWV9UUkVFX1NIQTFfQklOKTsKKwkJCQkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXYsICZ0cmVlLT5vYmplY3QsICJIRUFEIik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJldi5wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqbGlzdCA9IHJldi5wZW5kaW5nLm9iamVjdHMraTsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gbGlzdC0+aXRlbTsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGxpc3QtPm5hbWU7CisJCWludCBmbGFncyA9IChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORyk7CisJCWlmICghb2JqLT5wYXJzZWQpCisJCQlvYmogPSBwYXJzZV9vYmplY3Qob2JqLT5zaGExKTsKKwkJb2JqID0gZGVyZWZfdGFnKG9iaiwgTlVMTCwgMCk7CisJCWlmICghb2JqKQorCQkJZGllKF8oImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIiksIG5hbWUpOworCQlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCQlvYmogPSAmKChzdHJ1Y3QgY29tbWl0ICopb2JqKS0+dHJlZS0+b2JqZWN0OworCQlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCQlpZiAoQVJSQVlfU0laRShlbnQpIDw9IGVudHMpCisJCQkJZGllKF8oIm1vcmUgdGhhbiAlZCB0cmVlcyBnaXZlbjogJyVzJyIpLAorCQkJCSAgICAoaW50KSBBUlJBWV9TSVpFKGVudCksIG5hbWUpOworCQkJb2JqLT5mbGFncyB8PSBmbGFnczsKKwkJCWVudFtlbnRzXS5pdGVtID0gb2JqOworCQkJZW50W2VudHNdLm5hbWUgPSBuYW1lOworCQkJZW50cysrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgeworCQkJaWYgKDIgPD0gYmxvYnMpCisJCQkJZGllKF8oIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciKSwgbmFtZSk7CisJCQloYXNoY3B5KGJsb2JbYmxvYnNdLnNoYTEsIG9iai0+c2hhMSk7CisJCQlibG9iW2Jsb2JzXS5uYW1lID0gbmFtZTsKKwkJCWJsb2JbYmxvYnNdLm1vZGUgPSBsaXN0LT5tb2RlOworCQkJYmxvYnMrKzsKKwkJCWNvbnRpbnVlOworCisJCX0KKwkJZGllKF8oInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iKSwgbmFtZSk7CisJfQorCWlmIChyZXYucHJ1bmVfZGF0YS5ucikgeworCQlpZiAoIXBhdGgpCisJCQlwYXRoID0gcmV2LnBydW5lX2RhdGEuaXRlbXNbMF0ubWF0Y2g7CisJCXBhdGhzICs9IHJldi5wcnVuZV9kYXRhLm5yOworCX0KKworCS8qCisJICogTm93LCBkbyB0aGUgYXJndW1lbnRzIGxvb2sgcmVhc29uYWJsZT8KKwkgKi8KKwlpZiAoIWVudHMpIHsKKwkJc3dpdGNoIChibG9icykgeworCQljYXNlIDA6CisJCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfZmlsZXMoJnJldiwgYXJnYywgYXJndik7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaWYgKHBhdGhzICE9IDEpCisJCQkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKwkJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl9iX2YoJnJldiwgYXJnYywgYXJndiwgYmxvYiwgcGF0aCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaWYgKHBhdGhzKQorCQkJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisJCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfYmxvYnMoJnJldiwgYXJnYywgYXJndiwgYmxvYik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisJCX0KKwl9CisJZWxzZSBpZiAoYmxvYnMpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisJZWxzZSBpZiAoZW50cyA9PSAxKQorCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfaW5kZXgoJnJldiwgYXJnYywgYXJndik7CisJZWxzZSBpZiAoZW50cyA9PSAyKQorCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfdHJlZSgmcmV2LCBhcmdjLCBhcmd2LCBlbnQpOworCWVsc2UgaWYgKGVudFswXS5pdGVtLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJLyoKKwkJICogZGlmZiBBLi4uQiB3aGVyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbWVyZ2UgYmFzZQorCQkgKiBiZXR3ZWVuIEEgYW5kIEIuICBXZSBoYXZlIGVudFswXSA9PSBtZXJnZS1iYXNlLAorCQkgKiBlbnRbZW50cy0yXSA9PSBBLCBhbmQgZW50W2VudHMtMV0gPT0gQi4gIFNob3cgZGlmZgorCQkgKiBiZXR3ZWVuIHRoZSBiYXNlIGFuZCBCLiAgTm90ZSB0aGF0IHdlIHBpY2sgb25lCisJCSAqIG1lcmdlIGJhc2UgYXQgcmFuZG9tIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLgorCQkgKi8KKwkJZW50WzFdID0gZW50W2VudHMtMV07CisJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl90cmVlKCZyZXYsIGFyZ2MsIGFyZ3YsIGVudCk7CisJfSBlbHNlCisJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl9jb21iaW5lZCgmcmV2LCBhcmdjLCBhcmd2LAorCQkJCQkgICAgICAgZW50LCBlbnRzKTsKKwlyZXN1bHQgPSBkaWZmX3Jlc3VsdF9jb2RlKCZyZXYuZGlmZm9wdCwgcmVzdWx0KTsKKwlpZiAoMSA8IHJldi5kaWZmb3B0LnNraXBfc3RhdF91bm1hdGNoKQorCQlyZWZyZXNoX2luZGV4X3F1aWV0bHkoKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHNldHVwX2RpZmZfcGFnZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCS8qCisJICogSWYgdGhlIHVzZXIgYXNrZWQgZm9yIG91ciBleGl0IGNvZGUsIHRoZW4gZWl0aGVyIHRoZXkgd2FudCAtLXF1aWV0CisJICogb3IgLS1leGl0LWNvZGUuIFdlIHNob3VsZCBkZWZpbml0ZWx5IG5vdCBib3RoZXIgd2l0aCBhIHBhZ2VyIGluIHRoZQorCSAqIGZvcm1lciBjYXNlLCBhcyB3ZSB3aWxsIGdlbmVyYXRlIG5vIG91dHB1dC4gU2luY2Ugd2Ugc3RpbGwgcHJvcGVybHkKKwkgKiByZXBvcnQgb3VyIGV4aXQgY29kZSBldmVuIHdoZW4gYSBwYWdlciBpcyBydW4sIHdlIF9jb3VsZF8gcnVuIGEKKwkgKiBwYWdlciB3aXRoIC0tZXhpdC1jb2RlLiBCdXQgc2luY2Ugd2UgaGF2ZSBub3QgZG9uZSBzbyBoaXN0b3JpY2FsbHksCisJICogYW5kIGJlY2F1c2UgaXQgaXMgZWFzeSB0byBmaW5kIHBlb3BsZSBvbmVsaW5lIGFkdmlzaW5nICJnaXQgZGlmZgorCSAqIC0tZXhpdC1jb2RlIiBpbiBob29rcyBhbmQgb3RoZXIgc2NyaXB0cywgd2UgZG8gbm90IGRvIHNvLgorCSAqLworCWlmICghRElGRl9PUFRfVFNUKG9wdCwgRVhJVF9XSVRIX1NUQVRVUykgJiYKKwkgICAgY2hlY2tfcGFnZXJfY29uZmlnKCJkaWZmIikgIT0gMCkKKwkJc2V0dXBfcGFnZXIoKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZmFzdC1leHBvcnQuYyBiL2J1aWx0aW4vZmFzdC1leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjIyMGFkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9mYXN0LWV4cG9ydC5jCkBAIC0wLDAgKzEsNzA1IEBACisvKgorICogImdpdCBmYXN0LWV4cG9ydCIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqZmFzdF9leHBvcnRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgcHJvZ3Jlc3M7CitzdGF0aWMgZW51bSB7IEFCT1JULCBWRVJCQVRJTSwgV0FSTiwgU1RSSVAgfSBzaWduZWRfdGFnX21vZGUgPSBBQk9SVDsKK3N0YXRpYyBlbnVtIHsgRVJST1IsIERST1AsIFJFV1JJVEUgfSB0YWdfb2ZfZmlsdGVyZWRfbW9kZSA9IEVSUk9SOworc3RhdGljIGludCBmYWtlX21pc3NpbmdfdGFnZ2VyOworc3RhdGljIGludCB1c2VfZG9uZV9mZWF0dXJlOworc3RhdGljIGludCBub19kYXRhOworc3RhdGljIGludCBmdWxsX3RyZWU7CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0X3NpZ25lZF90YWdfbW9kZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQgfHwgIXN0cmNtcChhcmcsICJhYm9ydCIpKQorCQlzaWduZWRfdGFnX21vZGUgPSBBQk9SVDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInZlcmJhdGltIikgfHwgIXN0cmNtcChhcmcsICJpZ25vcmUiKSkKKwkJc2lnbmVkX3RhZ19tb2RlID0gVkVSQkFUSU07CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ3YXJuIikpCisJCXNpZ25lZF90YWdfbW9kZSA9IFdBUk47CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzdHJpcCIpKQorCQlzaWduZWRfdGFnX21vZGUgPSBTVFJJUDsKKwllbHNlCisJCXJldHVybiBlcnJvcigiVW5rbm93biBzaWduZWQtdGFnIG1vZGU6ICVzIiwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9vcHRfdGFnX29mX2ZpbHRlcmVkX21vZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCB8fCAhc3RyY21wKGFyZywgImFib3J0IikpCisJCXRhZ19vZl9maWx0ZXJlZF9tb2RlID0gRVJST1I7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkcm9wIikpCisJCXRhZ19vZl9maWx0ZXJlZF9tb2RlID0gRFJPUDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInJld3JpdGUiKSkKKwkJdGFnX29mX2ZpbHRlcmVkX21vZGUgPSBSRVdSSVRFOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKCJVbmtub3duIHRhZy1vZi1maWx0ZXJlZCBtb2RlOiAlcyIsIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVjb3JhdGlvbiBpZG51bXM7CitzdGF0aWMgdWludDMyX3QgbGFzdF9pZG51bTsKKworc3RhdGljIGludCBoYXNfdW5zaG93bl9wYXJlbnQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJZm9yIChwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KQorCQlpZiAoIShwYXJlbnQtPml0ZW0tPm9iamVjdC5mbGFncyAmIFNIT1dOKSAmJgorCQkgICAgIShwYXJlbnQtPml0ZW0tPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNpbmNlIGludHB0cl90IGlzIEM5OSwgd2UgZG8gbm90IHVzZSBpdCBoZXJlICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90ICptYXJrX3RvX3B0cih1aW50MzJfdCBtYXJrKQoreworCXJldHVybiAoKHVpbnQzMl90ICopTlVMTCkgKyBtYXJrOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHB0cl90b19tYXJrKHZvaWQgKiBtYXJrKQoreworCXJldHVybiAodWludDMyX3QgKiltYXJrIC0gKHVpbnQzMl90ICopTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iamVjdCwgdWludDMyX3QgbWFyaykKK3sKKwlhZGRfZGVjb3JhdGlvbigmaWRudW1zLCBvYmplY3QsIG1hcmtfdG9fcHRyKG1hcmspKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfbmV4dF9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0KQoreworCW1hcmtfb2JqZWN0KG9iamVjdCwgKytsYXN0X2lkbnVtKTsKK30KKworc3RhdGljIGludCBnZXRfb2JqZWN0X21hcmsoc3RydWN0IG9iamVjdCAqb2JqZWN0KQoreworCXZvaWQgKmRlY29yYXRpb24gPSBsb29rdXBfZGVjb3JhdGlvbigmaWRudW1zLCBvYmplY3QpOworCWlmICghZGVjb3JhdGlvbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHB0cl90b19tYXJrKGRlY29yYXRpb24pOworfQorCitzdGF0aWMgdm9pZCBzaG93X3Byb2dyZXNzKHZvaWQpCit7CisJc3RhdGljIGludCBjb3VudGVyID0gMDsKKwlpZiAoIXByb2dyZXNzKQorCQlyZXR1cm47CisJaWYgKCgrK2NvdW50ZXIgJSBwcm9ncmVzcykgPT0gMCkKKwkJcHJpbnRmKCJwcm9ncmVzcyAlZCBvYmplY3RzXG4iLCBjb3VudGVyKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmOworCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKworCWlmIChub19kYXRhKQorCQlyZXR1cm47CisKKwlpZiAoaXNfbnVsbF9zaGExKHNoYTEpKQorCQlyZXR1cm47CisKKwlvYmplY3QgPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJaWYgKCFvYmplY3QpCisJCWRpZSAoIkNvdWxkIG5vdCByZWFkIGJsb2IgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisKKwlpZiAob2JqZWN0LT5mbGFncyAmIFNIT1dOKQorCQlyZXR1cm47CisKKwlidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlkaWUgKCJDb3VsZCBub3QgcmVhZCBibG9iICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJbWFya19uZXh0X29iamVjdChvYmplY3QpOworCisJcHJpbnRmKCJibG9iXG5tYXJrIDolIlBSSXUzMiJcbmRhdGEgJWx1XG4iLCBsYXN0X2lkbnVtLCBzaXplKTsKKwlpZiAoc2l6ZSAmJiBmd3JpdGUoYnVmLCBzaXplLCAxLCBzdGRvdXQpICE9IDEpCisJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCB3cml0ZSBibG9iICclcyciLCBzaGExX3RvX2hleChzaGExKSk7CisJcHJpbnRmKCJcbiIpOworCisJc2hvd19wcm9ncmVzcygpOworCisJb2JqZWN0LT5mbGFncyB8PSBTSE9XTjsKKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZGVwdGhfZmlyc3QoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICphID0gKigoY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKiopYV8pOworCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpiID0gKigoY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKiopYl8pOworCWNvbnN0IGNoYXIgKm5hbWVfYSwgKm5hbWVfYjsKKwlpbnQgbGVuX2EsIGxlbl9iLCBsZW47CisJaW50IGNtcDsKKworCW5hbWVfYSA9IGEtPm9uZSA/IGEtPm9uZS0+cGF0aCA6IGEtPnR3by0+cGF0aDsKKwluYW1lX2IgPSBiLT5vbmUgPyBiLT5vbmUtPnBhdGggOiBiLT50d28tPnBhdGg7CisKKwlsZW5fYSA9IHN0cmxlbihuYW1lX2EpOworCWxlbl9iID0gc3RybGVuKG5hbWVfYik7CisJbGVuID0gKGxlbl9hIDwgbGVuX2IpID8gbGVuX2EgOiBsZW5fYjsKKworCS8qIHN0cmNtcCB3aWxsIHNvcnQgJ2QnIGJlZm9yZSAnZC9lJywgd2Ugd2FudCAnZC9lJyBiZWZvcmUgJ2QnICovCisJY21wID0gbWVtY21wKG5hbWVfYSwgbmFtZV9iLCBsZW4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJY21wID0gbGVuX2IgLSBsZW5fYTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCS8qCisJICogTW92ZSAnUidlbmFtZSBlbnRyaWVzIGxhc3Qgc28gdGhhdCBhbGwgcmVmZXJlbmNlcyBvZiB0aGUgZmlsZQorCSAqIGFwcGVhciBpbiB0aGUgb3V0cHV0IGJlZm9yZSBpdCBpcyByZW5hbWVkIChlLmcuLCB3aGVuIGEgZmlsZQorCSAqIHdhcyBjb3BpZWQgYW5kIHJlbmFtZWQgaW4gdGhlIHNhbWUgY29tbWl0KS4KKwkgKi8KKwlyZXR1cm4gKGEtPnN0YXR1cyA9PSAnUicpIC0gKGItPnN0YXR1cyA9PSAnUicpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IG5lZWRfcXVvdGUgPSBxdW90ZV9jX3N0eWxlKHBhdGgsIE5VTEwsIE5VTEwsIDApOworCWlmIChuZWVkX3F1b3RlKQorCQlxdW90ZV9jX3N0eWxlKHBhdGgsIE5VTEwsIHN0ZG91dCwgMCk7CisJZWxzZSBpZiAoc3RyY2hyKHBhdGgsICcgJykpCisJCXByaW50ZigiXCIlc1wiIiwgcGF0aCk7CisJZWxzZQorCQlwcmludGYoIiVzIiwgcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZmlsZW1vZGlmeShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKworCS8qCisJICogSGFuZGxlIGZpbGVzIGJlbG93IGEgZGlyZWN0b3J5IGZpcnN0LCBpbiBjYXNlIHRoZXkgYXJlIGFsbCBkZWxldGVkCisJICogYW5kIHRoZSBkaXJlY3RvcnkgY2hhbmdlcyB0byBhIGZpbGUgb3Igc3ltbGluay4KKwkgKi8KKwlxc29ydChxLT5xdWV1ZSwgcS0+bnIsIHNpemVvZihxLT5xdWV1ZVswXSksIGRlcHRoX2ZpcnN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvc3BlYyA9IHEtPnF1ZXVlW2ldLT5vbmU7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjID0gcS0+cXVldWVbaV0tPnR3bzsKKworCQlzd2l0Y2ggKHEtPnF1ZXVlW2ldLT5zdGF0dXMpIHsKKwkJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQkJcHJpbnRmKCJEICIpOworCQkJcHJpbnRfcGF0aChzcGVjLT5wYXRoKTsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlicmVhazsKKworCQljYXNlIERJRkZfU1RBVFVTX0NPUElFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgorCQkJcHJpbnRmKCIlYyAiLCBxLT5xdWV1ZVtpXS0+c3RhdHVzKTsKKwkJCXByaW50X3BhdGgob3NwZWMtPnBhdGgpOworCQkJcHV0Y2hhcignICcpOworCQkJcHJpbnRfcGF0aChzcGVjLT5wYXRoKTsKKwkJCXB1dGNoYXIoJ1xuJyk7CisKKwkJCWlmICghaGFzaGNtcChvc3BlYy0+c2hhMSwgc3BlYy0+c2hhMSkgJiYKKwkJCSAgICBvc3BlYy0+bW9kZSA9PSBzcGVjLT5tb2RlKQorCQkJCWJyZWFrOworCQkJLyogZmFsbHRocm91Z2ggKi8KKworCQljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19NT0RJRklFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19BRERFRDoKKwkJCS8qCisJCQkgKiBMaW5rcyByZWZlciB0byBvYmplY3RzIGluIGFub3RoZXIgcmVwb3NpdG9yaWVzOworCQkJICogb3V0cHV0IHRoZSBTSEEtMSB2ZXJiYXRpbS4KKwkJCSAqLworCQkJaWYgKG5vX2RhdGEgfHwgU19JU0dJVExJTksoc3BlYy0+bW9kZSkpCisJCQkJcHJpbnRmKCJNICUwNm8gJXMgIiwgc3BlYy0+bW9kZSwKKwkJCQkgICAgICAgc2hhMV90b19oZXgoc3BlYy0+c2hhMSkpOworCQkJZWxzZSB7CisJCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gbG9va3VwX29iamVjdChzcGVjLT5zaGExKTsKKwkJCQlwcmludGYoIk0gJTA2byA6JWQgIiwgc3BlYy0+bW9kZSwKKwkJCQkgICAgICAgZ2V0X29iamVjdF9tYXJrKG9iamVjdCkpOworCQkJfQorCQkJcHJpbnRfcGF0aChzcGVjLT5wYXRoKTsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGllKCJVbmV4cGVjdGVkIGNvbXBhcmlzb24gc3RhdHVzICclYycgZm9yICVzLCAlcyIsCisJCQkJcS0+cXVldWVbaV0tPnN0YXR1cywKKwkJCQlvc3BlYy0+cGF0aCA/IG9zcGVjLT5wYXRoIDogIm5vbmUiLAorCQkJCXNwZWMtPnBhdGggPyBzcGVjLT5wYXRoIDogIm5vbmUiKTsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfZW5jb2RpbmcoY29uc3QgY2hhciAqYmVnaW4sIGNvbnN0IGNoYXIgKmVuZCkKK3sKKwljb25zdCBjaGFyICpuZWVkbGUgPSAiXG5lbmNvZGluZyAiOworCWNoYXIgKmJvbCwgKmVvbDsKKworCWJvbCA9IG1lbW1lbShiZWdpbiwgZW5kID8gZW5kIC0gYmVnaW4gOiBzdHJsZW4oYmVnaW4pLAorCQkgICAgIG5lZWRsZSwgc3RybGVuKG5lZWRsZSkpOworCWlmICghYm9sKQorCQlyZXR1cm4gZ2l0X2NvbW1pdF9lbmNvZGluZzsKKwlib2wgKz0gc3RybGVuKG5lZWRsZSk7CisJZW9sID0gc3RyY2hybnVsKGJvbCwgJ1xuJyk7CisJKmVvbCA9ICdcMCc7CisJcmV0dXJuIGJvbDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWludCBzYXZlZF9vdXRwdXRfZm9ybWF0ID0gcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQ7CisJY29uc3QgY2hhciAqYXV0aG9yLCAqYXV0aG9yX2VuZCwgKmNvbW1pdHRlciwgKmNvbW1pdHRlcl9lbmQ7CisJY29uc3QgY2hhciAqZW5jb2RpbmcsICptZXNzYWdlOworCWNoYXIgKnJlZW5jb2RlZCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWludCBpOworCisJcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKworCXBhcnNlX2NvbW1pdChjb21taXQpOworCWF1dGhvciA9IHN0cnN0cihjb21taXQtPmJ1ZmZlciwgIlxuYXV0aG9yICIpOworCWlmICghYXV0aG9yKQorCQlkaWUgKCJDb3VsZCBub3QgZmluZCBhdXRob3IgaW4gY29tbWl0ICVzIiwKKwkJICAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJYXV0aG9yKys7CisJYXV0aG9yX2VuZCA9IHN0cmNocm51bChhdXRob3IsICdcbicpOworCWNvbW1pdHRlciA9IHN0cnN0cihhdXRob3JfZW5kLCAiXG5jb21taXR0ZXIgIik7CisJaWYgKCFjb21taXR0ZXIpCisJCWRpZSAoIkNvdWxkIG5vdCBmaW5kIGNvbW1pdHRlciBpbiBjb21taXQgJXMiLAorCQkgICAgIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwljb21taXR0ZXIrKzsKKwljb21taXR0ZXJfZW5kID0gc3RyY2hybnVsKGNvbW1pdHRlciwgJ1xuJyk7CisJbWVzc2FnZSA9IHN0cnN0cihjb21taXR0ZXJfZW5kLCAiXG5cbiIpOworCWVuY29kaW5nID0gZmluZF9lbmNvZGluZyhjb21taXR0ZXJfZW5kLCBtZXNzYWdlKTsKKwlpZiAobWVzc2FnZSkKKwkJbWVzc2FnZSArPSAyOworCisJaWYgKGNvbW1pdC0+cGFyZW50cyAmJgorCSAgICBnZXRfb2JqZWN0X21hcmsoJmNvbW1pdC0+cGFyZW50cy0+aXRlbS0+b2JqZWN0KSAhPSAwICYmCisJICAgICFmdWxsX3RyZWUpIHsKKwkJcGFyc2VfY29tbWl0KGNvbW1pdC0+cGFyZW50cy0+aXRlbSk7CisJCWRpZmZfdHJlZV9zaGExKGNvbW1pdC0+cGFyZW50cy0+aXRlbS0+dHJlZS0+b2JqZWN0LnNoYTEsCisJCQkgICAgICAgY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSwgIiIsICZyZXYtPmRpZmZvcHQpOworCX0KKwllbHNlCisJCWRpZmZfcm9vdF90cmVlX3NoYTEoY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSwKKwkJCQkgICAgIiIsICZyZXYtPmRpZmZvcHQpOworCisJLyogRXhwb3J0IHRoZSByZWZlcmVuY2VkIGJsb2JzLCBhbmQgcmVtZW1iZXIgdGhlIG1hcmtzLiAqLworCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspCisJCWlmICghU19JU0dJVExJTksoZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXS0+dHdvLT5tb2RlKSkKKwkJCWhhbmRsZV9vYmplY3QoZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXS0+dHdvLT5zaGExKTsKKworCW1hcmtfbmV4dF9vYmplY3QoJmNvbW1pdC0+b2JqZWN0KTsKKwlpZiAoIWlzX2VuY29kaW5nX3V0ZjgoZW5jb2RpbmcpKQorCQlyZWVuY29kZWQgPSByZWVuY29kZV9zdHJpbmcobWVzc2FnZSwgIlVURi04IiwgZW5jb2RpbmcpOworCWlmICghY29tbWl0LT5wYXJlbnRzKQorCQlwcmludGYoInJlc2V0ICVzXG4iLCAoY29uc3QgY2hhciopY29tbWl0LT51dGlsKTsKKwlwcmludGYoImNvbW1pdCAlc1xubWFyayA6JSJQUkl1MzIiXG4lLipzXG4lLipzXG5kYXRhICV1XG4lcyIsCisJICAgICAgIChjb25zdCBjaGFyICopY29tbWl0LT51dGlsLCBsYXN0X2lkbnVtLAorCSAgICAgICAoaW50KShhdXRob3JfZW5kIC0gYXV0aG9yKSwgYXV0aG9yLAorCSAgICAgICAoaW50KShjb21taXR0ZXJfZW5kIC0gY29tbWl0dGVyKSwgY29tbWl0dGVyLAorCSAgICAgICAodW5zaWduZWQpKHJlZW5jb2RlZAorCQkJICA/IHN0cmxlbihyZWVuY29kZWQpIDogbWVzc2FnZQorCQkJICA/IHN0cmxlbihtZXNzYWdlKSA6IDApLAorCSAgICAgICByZWVuY29kZWQgPyByZWVuY29kZWQgOiBtZXNzYWdlID8gbWVzc2FnZSA6ICIiKTsKKwlmcmVlKHJlZW5jb2RlZCk7CisKKwlmb3IgKGkgPSAwLCBwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlpbnQgbWFyayA9IGdldF9vYmplY3RfbWFyaygmcC0+aXRlbS0+b2JqZWN0KTsKKwkJaWYgKCFtYXJrKQorCQkJY29udGludWU7CisJCWlmIChpID09IDApCisJCQlwcmludGYoImZyb20gOiVkXG4iLCBtYXJrKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJtZXJnZSA6JWRcbiIsIG1hcmspOworCQlpKys7CisJfQorCisJaWYgKGZ1bGxfdHJlZSkKKwkJcHJpbnRmKCJkZWxldGVhbGxcbiIpOworCWxvZ190cmVlX2RpZmZfZmx1c2gocmV2KTsKKwlyZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IHNhdmVkX291dHB1dF9mb3JtYXQ7CisKKwlwcmludGYoIlxuIik7CisKKwlzaG93X3Byb2dyZXNzKCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV90YWlsKHN0cnVjdCBvYmplY3RfYXJyYXkgKmNvbW1pdHMsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJd2hpbGUgKGNvbW1pdHMtPm5yKSB7CisJCWNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopY29tbWl0cy0+b2JqZWN0c1tjb21taXRzLT5uciAtIDFdLml0ZW07CisJCWlmIChoYXNfdW5zaG93bl9wYXJlbnQoY29tbWl0KSkKKwkJCXJldHVybjsKKwkJaGFuZGxlX2NvbW1pdChjb21taXQsIHJldnMpOworCQljb21taXRzLT5uci0tOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3RhZyhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgdGFnICp0YWcpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWY7CisJY29uc3QgY2hhciAqdGFnZ2VyLCAqdGFnZ2VyX2VuZCwgKm1lc3NhZ2U7CisJc2l6ZV90IG1lc3NhZ2Vfc2l6ZSA9IDA7CisJc3RydWN0IG9iamVjdCAqdGFnZ2VkOworCWludCB0YWdnZWRfbWFyazsKKwlzdHJ1Y3QgY29tbWl0ICpwOworCisJLyogVHJlZXMgaGF2ZSBubyBpZGVudGlmZXIgaW4gZmFzdC1leHBvcnQgb3V0cHV0LCB0aHVzIHdlIGhhdmUgbm8gd2F5CisJICogdG8gb3V0cHV0IHRhZ3Mgb2YgdHJlZXMsIHRhZ3Mgb2YgdGFncyBvZiB0cmVlcywgZXRjLiAgU2ltcGx5IG9taXQKKwkgKiBzdWNoIHRhZ3MuCisJICovCisJdGFnZ2VkID0gdGFnLT50YWdnZWQ7CisJd2hpbGUgKHRhZ2dlZC0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCXRhZ2dlZCA9ICgoc3RydWN0IHRhZyAqKXRhZ2dlZCktPnRhZ2dlZDsKKwl9CisJaWYgKHRhZ2dlZC0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQl3YXJuaW5nKCJPbWl0dGluZyB0YWcgJXMsXG5zaW5jZSB0YWdzIG9mIHRyZWVzIChvciB0YWdzIG9mIHRhZ3Mgb2YgdHJlZXMsIGV0Yy4pIGFyZSBub3Qgc3VwcG9ydGVkLiIsCisJCQlzaGExX3RvX2hleCh0YWctPm9iamVjdC5zaGExKSk7CisJCXJldHVybjsKKwl9CisKKwlidWYgPSByZWFkX3NoYTFfZmlsZSh0YWctPm9iamVjdC5zaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlkaWUgKCJDb3VsZCBub3QgcmVhZCB0YWcgJXMiLCBzaGExX3RvX2hleCh0YWctPm9iamVjdC5zaGExKSk7CisJbWVzc2FnZSA9IG1lbW1lbShidWYsIHNpemUsICJcblxuIiwgMik7CisJaWYgKG1lc3NhZ2UpIHsKKwkJbWVzc2FnZSArPSAyOworCQltZXNzYWdlX3NpemUgPSBzdHJsZW4obWVzc2FnZSk7CisJfQorCXRhZ2dlciA9IG1lbW1lbShidWYsIG1lc3NhZ2UgPyBtZXNzYWdlIC0gYnVmIDogc2l6ZSwgIlxudGFnZ2VyICIsIDgpOworCWlmICghdGFnZ2VyKSB7CisJCWlmIChmYWtlX21pc3NpbmdfdGFnZ2VyKQorCQkJdGFnZ2VyID0gInRhZ2dlciBVbnNwZWNpZmllZCBUYWdnZXIgIgorCQkJCSI8dW5zcGVjaWZpZWQtdGFnZ2VyPiAwICswMDAwIjsKKwkJZWxzZQorCQkJdGFnZ2VyID0gIiI7CisJCXRhZ2dlcl9lbmQgPSB0YWdnZXIgKyBzdHJsZW4odGFnZ2VyKTsKKwl9IGVsc2UgeworCQl0YWdnZXIrKzsKKwkJdGFnZ2VyX2VuZCA9IHN0cmNocm51bCh0YWdnZXIsICdcbicpOworCX0KKworCS8qIGhhbmRsZSBzaWduZWQgdGFncyAqLworCWlmIChtZXNzYWdlKSB7CisJCWNvbnN0IGNoYXIgKnNpZ25hdHVyZSA9IHN0cnN0cihtZXNzYWdlLAorCQkJCQkgICAgICAgIlxuLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS1cbiIpOworCQlpZiAoc2lnbmF0dXJlKQorCQkJc3dpdGNoKHNpZ25lZF90YWdfbW9kZSkgeworCQkJY2FzZSBBQk9SVDoKKwkJCQlkaWUgKCJFbmNvdW50ZXJlZCBzaWduZWQgdGFnICVzOyB1c2UgIgorCQkJCSAgICAgIi0tc2lnbmVkLXRhZz08bW9kZT4gdG8gaGFuZGxlIGl0LiIsCisJCQkJICAgICBzaGExX3RvX2hleCh0YWctPm9iamVjdC5zaGExKSk7CisJCQljYXNlIFdBUk46CisJCQkJd2FybmluZyAoIkV4cG9ydGluZyBzaWduZWQgdGFnICVzIiwKKwkJCQkJIHNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJCQkvKiBmYWxsdGhydSAqLworCQkJY2FzZSBWRVJCQVRJTToKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RSSVA6CisJCQkJbWVzc2FnZV9zaXplID0gc2lnbmF0dXJlICsgMSAtIG1lc3NhZ2U7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJLyogaGFuZGxlIHRhZy0+dGFnZ2VkIGhhdmluZyBiZWVuIGZpbHRlcmVkIG91dCBkdWUgdG8gcGF0aHMgc3BlY2lmaWVkICovCisJdGFnZ2VkID0gdGFnLT50YWdnZWQ7CisJdGFnZ2VkX21hcmsgPSBnZXRfb2JqZWN0X21hcmsodGFnZ2VkKTsKKwlpZiAoIXRhZ2dlZF9tYXJrKSB7CisJCXN3aXRjaCh0YWdfb2ZfZmlsdGVyZWRfbW9kZSkgeworCQljYXNlIEFCT1JUOgorCQkJZGllICgiVGFnICVzIHRhZ3MgdW5leHBvcnRlZCBvYmplY3Q7IHVzZSAiCisJCQkgICAgICItLXRhZy1vZi1maWx0ZXJlZC1vYmplY3Q9PG1vZGU+IHRvIGhhbmRsZSBpdC4iLAorCQkJICAgICBzaGExX3RvX2hleCh0YWctPm9iamVjdC5zaGExKSk7CisJCWNhc2UgRFJPUDoKKwkJCS8qIElnbm9yZSB0aGlzIHRhZyBhbHRvZ2V0aGVyICovCisJCQlyZXR1cm47CisJCWNhc2UgUkVXUklURToKKwkJCWlmICh0YWdnZWQtPnR5cGUgIT0gT0JKX0NPTU1JVCkgeworCQkJCWRpZSAoIlRhZyAlcyB0YWdzIHVuZXhwb3J0ZWQgJXMhIiwKKwkJCQkgICAgIHNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpLAorCQkJCSAgICAgdHlwZW5hbWUodGFnZ2VkLT50eXBlKSk7CisJCQl9CisJCQlwID0gKHN0cnVjdCBjb21taXQgKil0YWdnZWQ7CisJCQlmb3IgKDs7KSB7CisJCQkJaWYgKHAtPnBhcmVudHMgJiYgcC0+cGFyZW50cy0+bmV4dCkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJCWJyZWFrOworCQkJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKCFwLT5wYXJlbnRzKQorCQkJCQlkaWUgKCJDYW4ndCBmaW5kIHJlcGxhY2VtZW50IGNvbW1pdCBmb3IgdGFnICVzXG4iLAorCQkJCQkgICAgIHNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJCQlwID0gcC0+cGFyZW50cy0+aXRlbTsKKwkJCX0KKwkJCXRhZ2dlZF9tYXJrID0gZ2V0X29iamVjdF9tYXJrKCZwLT5vYmplY3QpOworCQl9CisJfQorCisJaWYgKCFwcmVmaXhjbXAobmFtZSwgInJlZnMvdGFncy8iKSkKKwkJbmFtZSArPSAxMDsKKwlwcmludGYoInRhZyAlc1xuZnJvbSA6JWRcbiUuKnMlc2RhdGEgJWRcbiUuKnNcbiIsCisJICAgICAgIG5hbWUsIHRhZ2dlZF9tYXJrLAorCSAgICAgICAoaW50KSh0YWdnZXJfZW5kIC0gdGFnZ2VyKSwgdGFnZ2VyLAorCSAgICAgICB0YWdnZXIgPT0gdGFnZ2VyX2VuZCA/ICIiIDogIlxuIiwKKwkgICAgICAgKGludCltZXNzYWdlX3NpemUsIChpbnQpbWVzc2FnZV9zaXplLCBtZXNzYWdlID8gbWVzc2FnZSA6ICIiKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3RhZ3NfYW5kX2R1cGxpY2F0ZXMoc3RydWN0IG9iamVjdF9hcnJheSAqcGVuZGluZywKKwkJCQkgICAgc3RydWN0IHN0cmluZ19saXN0ICpleHRyYV9yZWZzKQoreworCXN0cnVjdCB0YWcgKnRhZzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwZW5kaW5nLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmUgPSBwZW5kaW5nLT5vYmplY3RzICsgaTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gY29tbWl0OworCQljaGFyICpmdWxsX25hbWU7CisKKwkJaWYgKGR3aW1fcmVmKGUtPm5hbWUsIHN0cmxlbihlLT5uYW1lKSwgc2hhMSwgJmZ1bGxfbmFtZSkgIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAoZS0+aXRlbS0+dHlwZSkgeworCQljYXNlIE9CSl9DT01NSVQ6CisJCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKWUtPml0ZW07CisJCQlicmVhazsKKwkJY2FzZSBPQkpfVEFHOgorCQkJdGFnID0gKHN0cnVjdCB0YWcgKillLT5pdGVtOworCisJCQkvKiBoYW5kbGUgbmVzdGVkIHRhZ3MgKi8KKwkJCXdoaWxlICh0YWcgJiYgdGFnLT5vYmplY3QudHlwZSA9PSBPQkpfVEFHKSB7CisJCQkJcGFyc2Vfb2JqZWN0KHRhZy0+b2JqZWN0LnNoYTEpOworCQkJCXN0cmluZ19saXN0X2FwcGVuZChleHRyYV9yZWZzLCBmdWxsX25hbWUpLT51dGlsID0gdGFnOworCQkJCXRhZyA9IChzdHJ1Y3QgdGFnICopdGFnLT50YWdnZWQ7CisJCQl9CisJCQlpZiAoIXRhZykKKwkJCQlkaWUgKCJUYWcgJXMgcG9pbnRzIG5vd2hlcmU/IiwgZS0+bmFtZSk7CisJCQlzd2l0Y2godGFnLT5vYmplY3QudHlwZSkgeworCQkJY2FzZSBPQkpfQ09NTUlUOgorCQkJCWNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopdGFnOworCQkJCWJyZWFrOworCQkJY2FzZSBPQkpfQkxPQjoKKwkJCQloYW5kbGVfb2JqZWN0KHRhZy0+b2JqZWN0LnNoYTEpOworCQkJCWNvbnRpbnVlOworCQkJZGVmYXVsdDogLyogT0JKX1RBRyAobmVzdGVkIHRhZ3MpIGlzIGFscmVhZHkgaGFuZGxlZCAqLworCQkJCXdhcm5pbmcoIlRhZyBwb2ludHMgdG8gb2JqZWN0IG9mIHVuZXhwZWN0ZWQgdHlwZSAlcywgc2tpcHBpbmcuIiwKKwkJCQkJdHlwZW5hbWUodGFnLT5vYmplY3QudHlwZSkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl3YXJuaW5nKCIlczogVW5leHBlY3RlZCBvYmplY3Qgb2YgdHlwZSAlcywgc2tpcHBpbmcuIiwKKwkJCQllLT5uYW1lLAorCQkJCXR5cGVuYW1lKGUtPml0ZW0tPnR5cGUpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjb21taXQtPnV0aWwpCisJCQkvKiBtb3JlIHRoYW4gb25lIG5hbWUgZm9yIHRoZSBzYW1lIG9iamVjdCAqLworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKGV4dHJhX3JlZnMsIGZ1bGxfbmFtZSktPnV0aWwgPSBjb21taXQ7CisJCWVsc2UKKwkJCWNvbW1pdC0+dXRpbCA9IGZ1bGxfbmFtZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV90YWdzX2FuZF9kdXBsaWNhdGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqZXh0cmFfcmVmcykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSBleHRyYV9yZWZzLT5uciAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBleHRyYV9yZWZzLT5pdGVtc1tpXS5zdHJpbmc7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IGV4dHJhX3JlZnMtPml0ZW1zW2ldLnV0aWw7CisJCXN3aXRjaCAob2JqZWN0LT50eXBlKSB7CisJCWNhc2UgT0JKX1RBRzoKKwkJCWhhbmRsZV90YWcobmFtZSwgKHN0cnVjdCB0YWcgKilvYmplY3QpOworCQkJYnJlYWs7CisJCWNhc2UgT0JKX0NPTU1JVDoKKwkJCS8qIGNyZWF0ZSByZWZzIHBvaW50aW5nIHRvIGFscmVhZHkgc2VlbiBjb21taXRzICovCisJCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW9iamVjdDsKKwkJCXByaW50ZigicmVzZXQgJXNcbmZyb20gOiVkXG5cbiIsIG5hbWUsCisJCQkgICAgICAgZ2V0X29iamVjdF9tYXJrKCZjb21taXQtPm9iamVjdCkpOworCQkJc2hvd19wcm9ncmVzcygpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4cG9ydF9tYXJrcyhjaGFyICpmaWxlKQoreworCXVuc2lnbmVkIGludCBpOworCXVpbnQzMl90IG1hcms7CisJc3RydWN0IG9iamVjdF9kZWNvcmF0aW9uICpkZWNvID0gaWRudW1zLmhhc2g7CisJRklMRSAqZjsKKwlpbnQgZSA9IDA7CisKKwlmID0gZm9wZW4oZmlsZSwgInciKTsKKwlpZiAoIWYpCisJCWRpZV9lcnJubygiVW5hYmxlIHRvIG9wZW4gbWFya3MgZmlsZSAlcyBmb3Igd3JpdGluZy4iLCBmaWxlKTsKKworCWZvciAoaSA9IDA7IGkgPCBpZG51bXMuc2l6ZTsgaSsrKSB7CisJCWlmIChkZWNvLT5iYXNlICYmIGRlY28tPmJhc2UtPnR5cGUgPT0gMSkgeworCQkJbWFyayA9IHB0cl90b19tYXJrKGRlY28tPmRlY29yYXRpb24pOworCQkJaWYgKGZwcmludGYoZiwgIjolIlBSSXUzMiIgJXNcbiIsIG1hcmssCisJCQkJc2hhMV90b19oZXgoZGVjby0+YmFzZS0+c2hhMSkpIDwgMCkgeworCQkJICAgIGUgPSAxOworCQkJICAgIGJyZWFrOworCQkJfQorCQl9CisJCWRlY28rKzsKKwl9CisKKwllIHw9IGZlcnJvcihmKTsKKwllIHw9IGZjbG9zZShmKTsKKwlpZiAoZSkKKwkJZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBtYXJrcyBmaWxlICVzLiIsIGZpbGUpOworfQorCitzdGF0aWMgdm9pZCBpbXBvcnRfbWFya3MoY2hhciAqaW5wdXRfZmlsZSkKK3sKKwljaGFyIGxpbmVbNTEyXTsKKwlGSUxFICpmID0gZm9wZW4oaW5wdXRfZmlsZSwgInIiKTsKKwlpZiAoIWYpCisJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgJyVzJyIsIGlucHV0X2ZpbGUpOworCisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKKwkJdWludDMyX3QgbWFyazsKKwkJY2hhciAqbGluZV9lbmQsICptYXJrX2VuZDsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCisJCWxpbmVfZW5kID0gc3RyY2hyKGxpbmUsICdcbicpOworCQlpZiAobGluZVswXSAhPSAnOicgfHwgIWxpbmVfZW5kKQorCQkJZGllKCJjb3JydXB0IG1hcmsgbGluZTogJXMiLCBsaW5lKTsKKwkJKmxpbmVfZW5kID0gJ1wwJzsKKworCQltYXJrID0gc3RydG91bWF4KGxpbmUgKyAxLCAmbWFya19lbmQsIDEwKTsKKwkJaWYgKCFtYXJrIHx8IG1hcmtfZW5kID09IGxpbmUgKyAxCisJCQl8fCAqbWFya19lbmQgIT0gJyAnIHx8IGdldF9zaGExKG1hcmtfZW5kICsgMSwgc2hhMSkpCisJCQlkaWUoImNvcnJ1cHQgbWFyayBsaW5lOiAlcyIsIGxpbmUpOworCisJCW9iamVjdCA9IHBhcnNlX29iamVjdChzaGExKTsKKwkJaWYgKCFvYmplY3QpCisJCQlkaWUgKCJDb3VsZCBub3QgcmVhZCBibG9iICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJCWlmIChvYmplY3QtPmZsYWdzICYgU0hPV04pCisJCQllcnJvcigiT2JqZWN0ICVzIGFscmVhZHkgaGFzIGEgbWFyayIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCQltYXJrX29iamVjdChvYmplY3QsIG1hcmspOworCQlpZiAobGFzdF9pZG51bSA8IG1hcmspCisJCQlsYXN0X2lkbnVtID0gbWFyazsKKworCQlvYmplY3QtPmZsYWdzIHw9IFNIT1dOOworCX0KKwlmY2xvc2UoZik7Cit9CisKK2ludCBjbWRfZmFzdF9leHBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IG9iamVjdF9hcnJheSBjb21taXRzID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IGV4dHJhX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwljaGFyICpleHBvcnRfZmlsZW5hbWUgPSBOVUxMLCAqaW1wb3J0X2ZpbGVuYW1lID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0lOVEVHRVIoMCwgInByb2dyZXNzIiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIikpLAorCQlPUFRfQ0FMTEJBQ0soMCwgInNpZ25lZC10YWdzIiwgJnNpZ25lZF90YWdfbW9kZSwgTl8oIm1vZGUiKSwKKwkJCSAgICAgTl8oInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIpLAorCQkJICAgICBwYXJzZV9vcHRfc2lnbmVkX3RhZ19tb2RlKSwKKwkJT1BUX0NBTExCQUNLKDAsICJ0YWctb2YtZmlsdGVyZWQtb2JqZWN0IiwgJnRhZ19vZl9maWx0ZXJlZF9tb2RlLCBOXygibW9kZSIpLAorCQkJICAgICBOXygic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIpLAorCQkJICAgICBwYXJzZV9vcHRfdGFnX29mX2ZpbHRlcmVkX21vZGUpLAorCQlPUFRfU1RSSU5HKDAsICJleHBvcnQtbWFya3MiLCAmZXhwb3J0X2ZpbGVuYW1lLCBOXygiZmlsZSIpLAorCQkJICAgICBOXygiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiKSksCisJCU9QVF9TVFJJTkcoMCwgImltcG9ydC1tYXJrcyIsICZpbXBvcnRfZmlsZW5hbWUsIE5fKCJmaWxlIiksCisJCQkgICAgIE5fKCJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiKSksCisJCU9QVF9CT09MRUFOKDAsICJmYWtlLW1pc3NpbmctdGFnZ2VyIiwgJmZha2VfbWlzc2luZ190YWdnZXIsCisJCQkgICAgIE5fKCJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImZ1bGwtdHJlZSIsICZmdWxsX3RyZWUsCisJCQkgICAgIE5fKCJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgInVzZS1kb25lLWZlYXR1cmUiLCAmdXNlX2RvbmVfZmVhdHVyZSwKKwkJCSAgICAgTl8oIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIikpLAorCQlPUFRfQk9PTCgwLCAibm8tZGF0YSIsICZub19kYXRhLCBOXygiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJaWYgKGFyZ2MgPT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zIChmYXN0X2V4cG9ydF91c2FnZSwgb3B0aW9ucyk7CisKKwkvKiB3ZSBoYW5kbGUgZW5jb2RpbmdzICovCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJaW5pdF9yZXZpc2lvbnMoJnJldnMsIHByZWZpeCk7CisJcmV2cy50b3BvX29yZGVyID0gMTsKKwlyZXZzLnNob3dfc291cmNlID0gMTsKKwlyZXZzLnJld3JpdGVfcGFyZW50cyA9IDE7CisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2cywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBmYXN0X2V4cG9ydF91c2FnZSwgMCk7CisJaWYgKGFyZ2MgPiAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMgKGZhc3RfZXhwb3J0X3VzYWdlLCBvcHRpb25zKTsKKworCWlmICh1c2VfZG9uZV9mZWF0dXJlKQorCQlwcmludGYoImZlYXR1cmUgZG9uZVxuIik7CisKKwlpZiAoaW1wb3J0X2ZpbGVuYW1lKQorCQlpbXBvcnRfbWFya3MoaW1wb3J0X2ZpbGVuYW1lKTsKKworCWlmIChpbXBvcnRfZmlsZW5hbWUgJiYgcmV2cy5wcnVuZV9kYXRhLm5yKQorCQlmdWxsX3RyZWUgPSAxOworCisJZ2V0X3RhZ3NfYW5kX2R1cGxpY2F0ZXMoJnJldnMucGVuZGluZywgJmV4dHJhX3JlZnMpOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwlyZXZzLmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gc2hvd19maWxlbW9kaWZ5OworCURJRkZfT1BUX1NFVCgmcmV2cy5kaWZmb3B0LCBSRUNVUlNJVkUpOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXZzKSkpIHsKKwkJaWYgKGhhc191bnNob3duX3BhcmVudChjb21taXQpKSB7CisJCQlhZGRfb2JqZWN0X2FycmF5KCZjb21taXQtPm9iamVjdCwgTlVMTCwgJmNvbW1pdHMpOworCQl9CisJCWVsc2UgeworCQkJaGFuZGxlX2NvbW1pdChjb21taXQsICZyZXZzKTsKKwkJCWhhbmRsZV90YWlsKCZjb21taXRzLCAmcmV2cyk7CisJCX0KKwl9CisKKwloYW5kbGVfdGFnc19hbmRfZHVwbGljYXRlcygmZXh0cmFfcmVmcyk7CisKKwlpZiAoZXhwb3J0X2ZpbGVuYW1lKQorCQlleHBvcnRfbWFya3MoZXhwb3J0X2ZpbGVuYW1lKTsKKworCWlmICh1c2VfZG9uZV9mZWF0dXJlKQorCQlwcmludGYoImRvbmVcbiIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2ZldGNoLXBhY2suYyBiL2J1aWx0aW4vZmV0Y2gtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDQzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2ZldGNoLXBhY2suYwpAQCAtMCwwICsxLDExMDMgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKyNpbmNsdWRlICJmZXRjaC1wYWNrLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKK3N0YXRpYyBpbnQgdHJhbnNmZXJfdW5wYWNrX2xpbWl0ID0gLTE7CitzdGF0aWMgaW50IGZldGNoX3VucGFja19saW1pdCA9IC0xOworc3RhdGljIGludCB1bnBhY2tfbGltaXQgPSAxMDA7CitzdGF0aWMgaW50IHByZWZlcl9vZnNfZGVsdGEgPSAxOworc3RhdGljIGludCBub19kb25lOworc3RhdGljIGludCBmZXRjaF9mc2NrX29iamVjdHMgPSAtMTsKK3N0YXRpYyBpbnQgdHJhbnNmZXJfZnNja19vYmplY3RzID0gLTE7CitzdGF0aWMgaW50IGFnZW50X3N1cHBvcnRlZDsKK3N0YXRpYyBzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzIGFyZ3MgPSB7CisJLyogLnVwbG9hZHBhY2sgPSAqLyAiZ2l0LXVwbG9hZC1wYWNrIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIGZldGNoX3BhY2tfdXNhZ2VbXSA9CisiZ2l0IGZldGNoLXBhY2sgWy0tYWxsXSBbLS1zdGRpbl0gWy0tcXVpZXR8LXFdIFstLWtlZXB8LWtdIFstLXRoaW5dICIKKyJbLS1pbmNsdWRlLXRhZ10gWy0tdXBsb2FkLXBhY2s9PGdpdC11cGxvYWQtcGFjaz5dIFstLWRlcHRoPTxuPl0gIgorIlstLW5vLXByb2dyZXNzXSBbLXZdIFs8aG9zdD46XTxkaXJlY3Rvcnk+IFs8cmVmcz4uLi5dIjsKKworI2RlZmluZSBDT01QTEVURQkoMVUgPDwgMCkKKyNkZWZpbmUgQ09NTU9OCQkoMVUgPDwgMSkKKyNkZWZpbmUgQ09NTU9OX1JFRgkoMVUgPDwgMikKKyNkZWZpbmUgU0VFTgkJKDFVIDw8IDMpCisjZGVmaW5lIFBPUFBFRAkJKDFVIDw8IDQpCisKK3N0YXRpYyBpbnQgbWFya2VkOworCisvKgorICogQWZ0ZXIgc2VuZGluZyB0aGlzIG1hbnkgImhhdmUicyBpZiB3ZSBkbyBub3QgZ2V0IGFueSBuZXcgQUNLICwgd2UKKyAqIGdpdmUgdXAgdHJhdmVyc2luZyBvdXIgaGlzdG9yeS4KKyAqLworI2RlZmluZSBNQVhfSU5fVkFJTiAyNTYKKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqcmV2X2xpc3Q7CitzdGF0aWMgaW50IG5vbl9jb21tb25fcmV2cywgbXVsdGlfYWNrLCB1c2Vfc2lkZWJhbmQ7CisKK3N0YXRpYyB2b2lkIHJldl9saXN0X3B1c2goc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgbWFyaykKK3sKKwlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIG1hcmspKSB7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IG1hcms7CisKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QucGFyc2VkKSkKKwkJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJCQlyZXR1cm47CisKKwkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUoY29tbWl0LCAmcmV2X2xpc3QpOworCisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkKKwkJCW5vbl9jb21tb25fcmV2cysrOworCX0KK30KKworc3RhdGljIGludCByZXZfbGlzdF9pbnNlcnRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBkZXJlZl90YWcocGFyc2Vfb2JqZWN0KHNoYTEpLCByZWZuYW1lLCAwKTsKKworCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJcmV2X2xpc3RfcHVzaCgoc3RydWN0IGNvbW1pdCAqKW8sIFNFRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xlYXJfbWFya3MoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qoc2hhMSksIHJlZm5hbWUsIDApOworCisJaWYgKG8gJiYgby0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQljbGVhcl9jb21taXRfbWFya3MoKHN0cnVjdCBjb21taXQgKilvLAorCQkJCSAgIENPTU1PTiB8IENPTU1PTl9SRUYgfCBTRUVOIHwgUE9QUEVEKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgIFRoaXMgZnVuY3Rpb24gbWFya3MgYSByZXYgYW5kIGl0cyBhbmNlc3RvcnMgYXMgY29tbW9uLgorICAgSW4gc29tZSBjYXNlcywgaXQgaXMgZGVzaXJhYmxlIHRvIG1hcmsgb25seSB0aGUgYW5jZXN0b3JzIChmb3IgZXhhbXBsZQorICAgd2hlbiBvbmx5IHRoZSBzZXJ2ZXIgZG9lcyBub3QgeWV0IGtub3cgdGhhdCB0aGV5IGFyZSBjb21tb24pLgorKi8KKworc3RhdGljIHZvaWQgbWFya19jb21tb24oc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQlpbnQgYW5jZXN0b3JzX29ubHksIGludCBkb250X3BhcnNlKQoreworCWlmIChjb21taXQgIT0gTlVMTCAmJiAhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gKHN0cnVjdCBvYmplY3QgKiljb21taXQ7CisKKwkJaWYgKCFhbmNlc3RvcnNfb25seSkKKwkJCW8tPmZsYWdzIHw9IENPTU1PTjsKKworCQlpZiAoIShvLT5mbGFncyAmIFNFRU4pKQorCQkJcmV2X2xpc3RfcHVzaChjb21taXQsIFNFRU4pOworCQllbHNlIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKworCQkJaWYgKCFhbmNlc3RvcnNfb25seSAmJiAhKG8tPmZsYWdzICYgUE9QUEVEKSkKKwkJCQlub25fY29tbW9uX3JldnMtLTsKKwkJCWlmICghby0+cGFyc2VkICYmICFkb250X3BhcnNlKQorCQkJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJCQkJcmV0dXJuOworCisJCQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCQkJCXBhcmVudHM7CisJCQkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KQorCQkJCW1hcmtfY29tbW9uKHBhcmVudHMtPml0ZW0sIDAsIGRvbnRfcGFyc2UpOworCQl9CisJfQorfQorCisvKgorICBHZXQgdGhlIG5leHQgcmV2IHRvIHNlbmQsIGlnbm9yaW5nIHRoZSBjb21tb24uCisqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqZ2V0X3Jldih2b2lkKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IE5VTEw7CisKKwl3aGlsZSAoY29tbWl0ID09IE5VTEwpIHsKKwkJdW5zaWduZWQgaW50IG1hcms7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKworCQlpZiAocmV2X2xpc3QgPT0gTlVMTCB8fCBub25fY29tbW9uX3JldnMgPT0gMCkKKwkJCXJldHVybiBOVUxMOworCisJCWNvbW1pdCA9IHJldl9saXN0LT5pdGVtOworCQlpZiAoIWNvbW1pdC0+b2JqZWN0LnBhcnNlZCkKKwkJCXBhcnNlX2NvbW1pdChjb21taXQpOworCQlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFBPUFBFRDsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDT01NT04pKQorCQkJbm9uX2NvbW1vbl9yZXZzLS07CisKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSB7CisJCQkvKiBkbyBub3Qgc2VuZCAiaGF2ZSIsIGFuZCBpZ25vcmUgYW5jZXN0b3JzICovCisJCQljb21taXQgPSBOVUxMOworCQkJbWFyayA9IENPTU1PTiB8IFNFRU47CisJCX0gZWxzZSBpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDT01NT05fUkVGKQorCQkJLyogc2VuZCAiaGF2ZSIsIGFuZCBpZ25vcmUgYW5jZXN0b3JzICovCisJCQltYXJrID0gQ09NTU9OIHwgU0VFTjsKKwkJZWxzZQorCQkJLyogc2VuZCAiaGF2ZSIsIGFsc28gZm9yIGl0cyBhbmNlc3RvcnMgKi8KKwkJCW1hcmsgPSBTRUVOOworCisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlpZiAoIShwYXJlbnRzLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkKKwkJCQlyZXZfbGlzdF9wdXNoKHBhcmVudHMtPml0ZW0sIG1hcmspOworCQkJaWYgKG1hcmsgJiBDT01NT04pCisJCQkJbWFya19jb21tb24ocGFyZW50cy0+aXRlbSwgMSwgMCk7CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJfQorCisJCXJldl9saXN0ID0gcmV2X2xpc3QtPm5leHQ7CisJfQorCisJcmV0dXJuIGNvbW1pdC0+b2JqZWN0LnNoYTE7Cit9CisKK2VudW0gYWNrX3R5cGUgeworCU5BSyA9IDAsCisJQUNLLAorCUFDS19jb250aW51ZSwKKwlBQ0tfY29tbW9uLAorCUFDS19yZWFkeQorfTsKKworc3RhdGljIHZvaWQgY29uc3VtZV9zaGFsbG93X2xpc3QoaW50IGZkKQoreworCWlmIChhcmdzLnN0YXRlbGVzc19ycGMgJiYgYXJncy5kZXB0aCA+IDApIHsKKwkJLyogSWYgd2Ugc2VudCBhIGRlcHRoIHdlIHdpbGwgZ2V0IGJhY2sgImR1cGxpY2F0ZSIKKwkJICogc2hhbGxvdyBhbmQgdW5zaGFsbG93IGNvbW1hbmRzIGV2ZXJ5IHRpbWUgdGhlcmUKKwkJICogaXMgYSBibG9jayBvZiBoYXZlIGxpbmVzIGV4Y2hhbmdlZC4KKwkJICovCisJCWNoYXIgbGluZVsxMDAwXTsKKwkJd2hpbGUgKHBhY2tldF9yZWFkX2xpbmUoZmQsIGxpbmUsIHNpemVvZihsaW5lKSkpIHsKKwkJCWlmICghcHJlZml4Y21wKGxpbmUsICJzaGFsbG93ICIpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFwcmVmaXhjbXAobGluZSwgInVuc2hhbGxvdyAiKSkKKwkJCQljb250aW51ZTsKKwkJCWRpZSgiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIpOworCQl9CisJfQorfQorCitzdHJ1Y3Qgd3JpdGVfc2hhbGxvd19kYXRhIHsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQ7CisJaW50IHVzZV9wYWNrX3Byb3RvY29sOworCWludCBjb3VudDsKK307CisKK3N0YXRpYyBpbnQgd3JpdGVfb25lX3NoYWxsb3coY29uc3Qgc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHdyaXRlX3NoYWxsb3dfZGF0YSAqZGF0YSA9IGNiX2RhdGE7CisJY29uc3QgY2hhciAqaGV4ID0gc2hhMV90b19oZXgoZ3JhZnQtPnNoYTEpOworCWRhdGEtPmNvdW50Kys7CisJaWYgKGRhdGEtPnVzZV9wYWNrX3Byb3RvY29sKQorCQlwYWNrZXRfYnVmX3dyaXRlKGRhdGEtPm91dCwgInNoYWxsb3cgJXMiLCBoZXgpOworCWVsc2UgeworCQlzdHJidWZfYWRkc3RyKGRhdGEtPm91dCwgaGV4KTsKKwkJc3RyYnVmX2FkZGNoKGRhdGEtPm91dCwgJ1xuJyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX3NoYWxsb3dfY29tbWl0cyhzdHJ1Y3Qgc3RyYnVmICpvdXQsIGludCB1c2VfcGFja19wcm90b2NvbCkKK3sKKwlzdHJ1Y3Qgd3JpdGVfc2hhbGxvd19kYXRhIGRhdGE7CisJZGF0YS5vdXQgPSBvdXQ7CisJZGF0YS51c2VfcGFja19wcm90b2NvbCA9IHVzZV9wYWNrX3Byb3RvY29sOworCWRhdGEuY291bnQgPSAwOworCWZvcl9lYWNoX2NvbW1pdF9ncmFmdCh3cml0ZV9vbmVfc2hhbGxvdywgJmRhdGEpOworCXJldHVybiBkYXRhLmNvdW50OworfQorCitzdGF0aWMgZW51bSBhY2tfdHlwZSBnZXRfYWNrKGludCBmZCwgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEpCit7CisJc3RhdGljIGNoYXIgbGluZVsxMDAwXTsKKwlpbnQgbGVuID0gcGFja2V0X3JlYWRfbGluZShmZCwgbGluZSwgc2l6ZW9mKGxpbmUpKTsKKworCWlmICghbGVuKQorCQlkaWUoImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIik7CisJaWYgKGxpbmVbbGVuLTFdID09ICdcbicpCisJCWxpbmVbLS1sZW5dID0gMDsKKwlpZiAoIXN0cmNtcChsaW5lLCAiTkFLIikpCisJCXJldHVybiBOQUs7CisJaWYgKCFwcmVmaXhjbXAobGluZSwgIkFDSyAiKSkgeworCQlpZiAoIWdldF9zaGExX2hleChsaW5lKzQsIHJlc3VsdF9zaGExKSkgeworCQkJaWYgKHN0cnN0cihsaW5lKzQ1LCAiY29udGludWUiKSkKKwkJCQlyZXR1cm4gQUNLX2NvbnRpbnVlOworCQkJaWYgKHN0cnN0cihsaW5lKzQ1LCAiY29tbW9uIikpCisJCQkJcmV0dXJuIEFDS19jb21tb247CisJCQlpZiAoc3Ryc3RyKGxpbmUrNDUsICJyZWFkeSIpKQorCQkJCXJldHVybiBBQ0tfcmVhZHk7CisJCQlyZXR1cm4gQUNLOworCQl9CisJfQorCWRpZSgiZ2l0IGZldGNoX3BhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIiwgbGluZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfcmVxdWVzdChpbnQgZmQsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpZiAoYXJncy5zdGF0ZWxlc3NfcnBjKSB7CisJCXNlbmRfc2lkZWJhbmQoZmQsIC0xLCBidWYtPmJ1ZiwgYnVmLT5sZW4sIExBUkdFX1BBQ0tFVF9NQVgpOworCQlwYWNrZXRfZmx1c2goZmQpOworCX0gZWxzZQorCQlzYWZlX3dyaXRlKGZkLCBidWYtPmJ1ZiwgYnVmLT5sZW4pOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfb25lX2FsdGVybmF0ZV9yZWYoY29uc3Qgc3RydWN0IHJlZiAqcmVmLCB2b2lkICp1bnVzZWQpCit7CisJcmV2X2xpc3RfaW5zZXJ0X3JlZihOVUxMLCByZWYtPm9sZF9zaGExLCAwLCBOVUxMKTsKK30KKworI2RlZmluZSBJTklUSUFMX0ZMVVNIIDE2CisjZGVmaW5lIFBJUEVTQUZFX0ZMVVNIIDMyCisjZGVmaW5lIExBUkdFX0ZMVVNIIDEwMjQKKworc3RhdGljIGludCBuZXh0X2ZsdXNoKGludCBjb3VudCkKK3sKKwlpbnQgZmx1c2hfbGltaXQgPSBhcmdzLnN0YXRlbGVzc19ycGMgPyBMQVJHRV9GTFVTSCA6IFBJUEVTQUZFX0ZMVVNIOworCisJaWYgKGNvdW50IDwgZmx1c2hfbGltaXQpCisJCWNvdW50IDw8PSAxOworCWVsc2UKKwkJY291bnQgKz0gZmx1c2hfbGltaXQ7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGZpbmRfY29tbW9uKGludCBmZFsyXSwgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEsCisJCSAgICAgICBzdHJ1Y3QgcmVmICpyZWZzKQoreworCWludCBmZXRjaGluZzsKKwlpbnQgY291bnQgPSAwLCBmbHVzaGVzID0gMCwgZmx1c2hfYXQgPSBJTklUSUFMX0ZMVVNILCByZXR2YWw7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKKwl1bnNpZ25lZCBpbl92YWluID0gMDsKKwlpbnQgZ290X2NvbnRpbnVlID0gMDsKKwlpbnQgZ290X3JlYWR5ID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlcV9idWYgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3Qgc3RhdGVfbGVuID0gMDsKKworCWlmIChhcmdzLnN0YXRlbGVzc19ycGMgJiYgbXVsdGlfYWNrID09IDEpCisJCWRpZSgiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIpOworCWlmIChtYXJrZWQpCisJCWZvcl9lYWNoX3JlZihjbGVhcl9tYXJrcywgTlVMTCk7CisJbWFya2VkID0gMTsKKworCWZvcl9lYWNoX3JlZihyZXZfbGlzdF9pbnNlcnRfcmVmLCBOVUxMKTsKKwlmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKGluc2VydF9vbmVfYWx0ZXJuYXRlX3JlZiwgTlVMTCk7CisKKwlmZXRjaGluZyA9IDA7CisJZm9yICggOyByZWZzIDsgcmVmcyA9IHJlZnMtPm5leHQpIHsKKwkJdW5zaWduZWQgY2hhciAqcmVtb3RlID0gcmVmcy0+b2xkX3NoYTE7CisJCWNvbnN0IGNoYXIgKnJlbW90ZV9oZXg7CisJCXN0cnVjdCBvYmplY3QgKm87CisKKwkJLyoKKwkJICogSWYgdGhhdCBvYmplY3QgaXMgY29tcGxldGUgKGkuZS4gaXQgaXMgYW4gYW5jZXN0b3Igb2YgYQorCQkgKiBsb2NhbCByZWYpLCB3ZSB0ZWxsIHRoZW0gd2UgaGF2ZSBpdCBidXQgZG8gbm90IGhhdmUgdG8KKwkJICogdGVsbCB0aGVtIGFib3V0IGl0cyBhbmNlc3RvcnMsIHdoaWNoIHRoZXkgYWxyZWFkeSBrbm93CisJCSAqIGFib3V0LgorCQkgKgorCQkgKiBXZSB1c2UgbG9va3VwX29iamVjdCBoZXJlIGJlY2F1c2Ugd2UgYXJlIG9ubHkKKwkJICogaW50ZXJlc3RlZCBpbiB0aGUgY2FzZSB3ZSAqa25vdyogdGhlIG9iamVjdCBpcworCQkgKiByZWFjaGFibGUgYW5kIHdlIGhhdmUgYWxyZWFkeSBzY2FubmVkIGl0LgorCQkgKi8KKwkJaWYgKCgobyA9IGxvb2t1cF9vYmplY3QocmVtb3RlKSkgIT0gTlVMTCkgJiYKKwkJCQkoby0+ZmxhZ3MgJiBDT01QTEVURSkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmVtb3RlX2hleCA9IHNoYTFfdG9faGV4KHJlbW90ZSk7CisJCWlmICghZmV0Y2hpbmcpIHsKKwkJCXN0cnVjdCBzdHJidWYgYyA9IFNUUkJVRl9JTklUOworCQkJaWYgKG11bHRpX2FjayA9PSAyKSAgICAgc3RyYnVmX2FkZHN0cigmYywgIiBtdWx0aV9hY2tfZGV0YWlsZWQiKTsKKwkJCWlmIChtdWx0aV9hY2sgPT0gMSkgICAgIHN0cmJ1Zl9hZGRzdHIoJmMsICIgbXVsdGlfYWNrIik7CisJCQlpZiAobm9fZG9uZSkgICAgICAgICAgICBzdHJidWZfYWRkc3RyKCZjLCAiIG5vLWRvbmUiKTsKKwkJCWlmICh1c2Vfc2lkZWJhbmQgPT0gMikgIHN0cmJ1Zl9hZGRzdHIoJmMsICIgc2lkZS1iYW5kLTY0ayIpOworCQkJaWYgKHVzZV9zaWRlYmFuZCA9PSAxKSAgc3RyYnVmX2FkZHN0cigmYywgIiBzaWRlLWJhbmQiKTsKKwkJCWlmIChhcmdzLnVzZV90aGluX3BhY2spIHN0cmJ1Zl9hZGRzdHIoJmMsICIgdGhpbi1wYWNrIik7CisJCQlpZiAoYXJncy5ub19wcm9ncmVzcykgICBzdHJidWZfYWRkc3RyKCZjLCAiIG5vLXByb2dyZXNzIik7CisJCQlpZiAoYXJncy5pbmNsdWRlX3RhZykgICBzdHJidWZfYWRkc3RyKCZjLCAiIGluY2x1ZGUtdGFnIik7CisJCQlpZiAocHJlZmVyX29mc19kZWx0YSkgICBzdHJidWZfYWRkc3RyKCZjLCAiIG9mcy1kZWx0YSIpOworCQkJaWYgKGFnZW50X3N1cHBvcnRlZCkgICAgc3RyYnVmX2FkZGYoJmMsICIgYWdlbnQ9JXMiLAorCQkJCQkJCSAgICBnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQoKSk7CisJCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAid2FudCAlcyVzXG4iLCByZW1vdGVfaGV4LCBjLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmYyk7CisJCX0gZWxzZQorCQkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgIndhbnQgJXNcbiIsIHJlbW90ZV9oZXgpOworCQlmZXRjaGluZysrOworCX0KKworCWlmICghZmV0Y2hpbmcpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnJlcV9idWYpOworCQlwYWNrZXRfZmx1c2goZmRbMV0pOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkpCisJCXdyaXRlX3NoYWxsb3dfY29tbWl0cygmcmVxX2J1ZiwgMSk7CisJaWYgKGFyZ3MuZGVwdGggPiAwKQorCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiZGVlcGVuICVkIiwgYXJncy5kZXB0aCk7CisJcGFja2V0X2J1Zl9mbHVzaCgmcmVxX2J1Zik7CisJc3RhdGVfbGVuID0gcmVxX2J1Zi5sZW47CisKKwlpZiAoYXJncy5kZXB0aCA+IDApIHsKKwkJY2hhciBsaW5lWzEwMjRdOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJCXNlbmRfcmVxdWVzdChmZFsxXSwgJnJlcV9idWYpOworCQl3aGlsZSAocGFja2V0X3JlYWRfbGluZShmZFswXSwgbGluZSwgc2l6ZW9mKGxpbmUpKSkgeworCQkJaWYgKCFwcmVmaXhjbXAobGluZSwgInNoYWxsb3cgIikpIHsKKwkJCQlpZiAoZ2V0X3NoYTFfaGV4KGxpbmUgKyA4LCBzaGExKSkKKwkJCQkJZGllKCJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiLCBsaW5lKTsKKwkJCQlyZWdpc3Rlcl9zaGFsbG93KHNoYTEpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFwcmVmaXhjbXAobGluZSwgInVuc2hhbGxvdyAiKSkgeworCQkJCWlmIChnZXRfc2hhMV9oZXgobGluZSArIDEwLCBzaGExKSkKKwkJCQkJZGllKCJpbnZhbGlkIHVuc2hhbGxvdyBsaW5lOiAlcyIsIGxpbmUpOworCQkJCWlmICghbG9va3VwX29iamVjdChzaGExKSkKKwkJCQkJZGllKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIsIGxpbmUpOworCQkJCS8qIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIHBhcnNlZCBhcyBzaGFsbG93ICovCisJCQkJaWYgKCFwYXJzZV9vYmplY3Qoc2hhMSkpCisJCQkJCWRpZSgiZXJyb3IgaW4gb2JqZWN0OiAlcyIsIGxpbmUpOworCQkJCWlmICh1bnJlZ2lzdGVyX3NoYWxsb3coc2hhMSkpCisJCQkJCWRpZSgibm8gc2hhbGxvdyBmb3VuZDogJXMiLCBsaW5lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWRpZSgiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIsIGxpbmUpOworCQl9CisJfSBlbHNlIGlmICghYXJncy5zdGF0ZWxlc3NfcnBjKQorCQlzZW5kX3JlcXVlc3QoZmRbMV0sICZyZXFfYnVmKTsKKworCWlmICghYXJncy5zdGF0ZWxlc3NfcnBjKSB7CisJCS8qIElmIHdlIGFyZW4ndCB1c2luZyB0aGUgc3RhdGVsZXNzLXJwYyBpbnRlcmZhY2UKKwkJICogd2UgZG9uJ3QgbmVlZCB0byByZXRhaW4gdGhlIGhlYWRlcnMuCisJCSAqLworCQlzdHJidWZfc2V0bGVuKCZyZXFfYnVmLCAwKTsKKwkJc3RhdGVfbGVuID0gMDsKKwl9CisKKwlmbHVzaGVzID0gMDsKKwlyZXR2YWwgPSAtMTsKKwl3aGlsZSAoKHNoYTEgPSBnZXRfcmV2KCkpKSB7CisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJoYXZlICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CisJCWlmIChhcmdzLnZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgImhhdmUgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJaW5fdmFpbisrOworCQlpZiAoZmx1c2hfYXQgPD0gKytjb3VudCkgeworCQkJaW50IGFjazsKKworCQkJcGFja2V0X2J1Zl9mbHVzaCgmcmVxX2J1Zik7CisJCQlzZW5kX3JlcXVlc3QoZmRbMV0sICZyZXFfYnVmKTsKKwkJCXN0cmJ1Zl9zZXRsZW4oJnJlcV9idWYsIHN0YXRlX2xlbik7CisJCQlmbHVzaGVzKys7CisJCQlmbHVzaF9hdCA9IG5leHRfZmx1c2goY291bnQpOworCisJCQkvKgorCQkJICogV2Uga2VlcCBvbmUgd2luZG93ICJhaGVhZCIgb2YgdGhlIG90aGVyIHNpZGUsIGFuZAorCQkJICogd2lsbCB3YWl0IGZvciBhbiBBQ0sgb25seSBvbiB0aGUgbmV4dCBvbmUKKwkJCSAqLworCQkJaWYgKCFhcmdzLnN0YXRlbGVzc19ycGMgJiYgY291bnQgPT0gSU5JVElBTF9GTFVTSCkKKwkJCQljb250aW51ZTsKKworCQkJY29uc3VtZV9zaGFsbG93X2xpc3QoZmRbMF0pOworCQkJZG8geworCQkJCWFjayA9IGdldF9hY2soZmRbMF0sIHJlc3VsdF9zaGExKTsKKwkJCQlpZiAoYXJncy52ZXJib3NlICYmIGFjaykKKwkJCQkJZnByaW50ZihzdGRlcnIsICJnb3QgYWNrICVkICVzXG4iLCBhY2ssCisJCQkJCQkJc2hhMV90b19oZXgocmVzdWx0X3NoYTEpKTsKKwkJCQlzd2l0Y2ggKGFjaykgeworCQkJCWNhc2UgQUNLOgorCQkJCQlmbHVzaGVzID0gMDsKKwkJCQkJbXVsdGlfYWNrID0gMDsKKwkJCQkJcmV0dmFsID0gMDsKKwkJCQkJZ290byBkb25lOworCQkJCWNhc2UgQUNLX2NvbW1vbjoKKwkJCQljYXNlIEFDS19yZWFkeToKKwkJCQljYXNlIEFDS19jb250aW51ZTogeworCQkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPQorCQkJCQkJbG9va3VwX2NvbW1pdChyZXN1bHRfc2hhMSk7CisJCQkJCWlmICghY29tbWl0KQorCQkJCQkJZGllKCJpbnZhbGlkIGNvbW1pdCAlcyIsIHNoYTFfdG9faGV4KHJlc3VsdF9zaGExKSk7CisJCQkJCWlmIChhcmdzLnN0YXRlbGVzc19ycGMKKwkJCQkJICYmIGFjayA9PSBBQ0tfY29tbW9uCisJCQkJCSAmJiAhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkgeworCQkJCQkJLyogV2UgbmVlZCB0byByZXBsYXkgdGhlIGhhdmUgZm9yIHRoaXMgb2JqZWN0CisJCQkJCQkgKiBvbiB0aGUgbmV4dCBSUEMgcmVxdWVzdCBzbyB0aGUgcGVlciBrbm93cworCQkJCQkJICogaXQgaXMgaW4gY29tbW9uIHdpdGggdXMuCisJCQkJCQkgKi8KKwkJCQkJCWNvbnN0IGNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHJlc3VsdF9zaGExKTsKKwkJCQkJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJoYXZlICVzXG4iLCBoZXgpOworCQkJCQkJc3RhdGVfbGVuID0gcmVxX2J1Zi5sZW47CisJCQkJCX0KKwkJCQkJbWFya19jb21tb24oY29tbWl0LCAwLCAxKTsKKwkJCQkJcmV0dmFsID0gMDsKKwkJCQkJaW5fdmFpbiA9IDA7CisJCQkJCWdvdF9jb250aW51ZSA9IDE7CisJCQkJCWlmIChhY2sgPT0gQUNLX3JlYWR5KSB7CisJCQkJCQlyZXZfbGlzdCA9IE5VTEw7CisJCQkJCQlnb3RfcmVhZHkgPSAxOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfSB3aGlsZSAoYWNrKTsKKwkJCWZsdXNoZXMtLTsKKwkJCWlmIChnb3RfY29udGludWUgJiYgTUFYX0lOX1ZBSU4gPCBpbl92YWluKSB7CisJCQkJaWYgKGFyZ3MudmVyYm9zZSkKKwkJCQkJZnByaW50ZihzdGRlcnIsICJnaXZpbmcgdXBcbiIpOworCQkJCWJyZWFrOyAvKiBnaXZlIHVwICovCisJCQl9CisJCX0KKwl9Citkb25lOgorCWlmICghZ290X3JlYWR5IHx8ICFub19kb25lKSB7CisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJkb25lXG4iKTsKKwkJc2VuZF9yZXF1ZXN0KGZkWzFdLCAmcmVxX2J1Zik7CisJfQorCWlmIChhcmdzLnZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiZG9uZVxuIik7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCW11bHRpX2FjayA9IDA7CisJCWZsdXNoZXMrKzsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnJlcV9idWYpOworCisJY29uc3VtZV9zaGFsbG93X2xpc3QoZmRbMF0pOworCXdoaWxlIChmbHVzaGVzIHx8IG11bHRpX2FjaykgeworCQlpbnQgYWNrID0gZ2V0X2FjayhmZFswXSwgcmVzdWx0X3NoYTEpOworCQlpZiAoYWNrKSB7CisJCQlpZiAoYXJncy52ZXJib3NlKQorCQkJCWZwcmludGYoc3RkZXJyLCAiZ290IGFjayAoJWQpICVzXG4iLCBhY2ssCisJCQkJCXNoYTFfdG9faGV4KHJlc3VsdF9zaGExKSk7CisJCQlpZiAoYWNrID09IEFDSykKKwkJCQlyZXR1cm4gMDsKKwkJCW11bHRpX2FjayA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlmbHVzaGVzLS07CisJfQorCS8qIGl0IGlzIG5vIGVycm9yIHRvIGZldGNoIGludG8gYSBjb21wbGV0ZWx5IGVtcHR5IHJlcG8gKi8KKwlyZXR1cm4gY291bnQgPyByZXR2YWwgOiAwOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpjb21wbGV0ZTsKKworc3RhdGljIGludCBtYXJrX2NvbXBsZXRlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisKKwl3aGlsZSAobyAmJiBvLT50eXBlID09IE9CSl9UQUcpIHsKKwkJc3RydWN0IHRhZyAqdCA9IChzdHJ1Y3QgdGFnICopIG87CisJCWlmICghdC0+dGFnZ2VkKQorCQkJYnJlYWs7IC8qIGJyb2tlbiByZXBvc2l0b3J5ICovCisJCW8tPmZsYWdzIHw9IENPTVBMRVRFOworCQlvID0gcGFyc2Vfb2JqZWN0KHQtPnRhZ2dlZC0+c2hhMSk7CisJfQorCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NUExFVEUpKSB7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBDT01QTEVURTsKKwkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKGNvbW1pdCwgJmNvbXBsZXRlKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFya19yZWNlbnRfY29tcGxldGVfY29tbWl0cyh1bnNpZ25lZCBsb25nIGN1dG9mZikKK3sKKwl3aGlsZSAoY29tcGxldGUgJiYgY3V0b2ZmIDw9IGNvbXBsZXRlLT5pdGVtLT5kYXRlKSB7CisJCWlmIChhcmdzLnZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIk1hcmtpbmcgJXMgYXMgY29tcGxldGVcbiIsCisJCQkJc2hhMV90b19oZXgoY29tcGxldGUtPml0ZW0tPm9iamVjdC5zaGExKSk7CisJCXBvcF9tb3N0X3JlY2VudF9jb21taXQoJmNvbXBsZXRlLCBDT01QTEVURSk7CisJfQorfQorCitzdGF0aWMgaW50IG5vbl9tYXRjaGluZ19yZWYoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKnVudXNlZCkKK3sKKwlpZiAoaXRlbS0+dXRpbCkgeworCQlpdGVtLT51dGlsID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRlcl9yZWZzKHN0cnVjdCByZWYgKipyZWZzLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNvdWdodCkKK3sKKwlzdHJ1Y3QgcmVmICpuZXdsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqbmV3dGFpbCA9ICZuZXdsaXN0OworCXN0cnVjdCByZWYgKnJlZiwgKm5leHQ7CisJaW50IHNvdWdodF9wb3M7CisKKwlzb3VnaHRfcG9zID0gMDsKKwlmb3IgKHJlZiA9ICpyZWZzOyByZWY7IHJlZiA9IG5leHQpIHsKKwkJaW50IGtlZXAgPSAwOworCQluZXh0ID0gcmVmLT5uZXh0OworCQlpZiAoIW1lbWNtcChyZWYtPm5hbWUsICJyZWZzLyIsIDUpICYmCisJCSAgICBjaGVja19yZWZuYW1lX2Zvcm1hdChyZWYtPm5hbWUgKyA1LCAwKSkKKwkJCTsgLyogdHJhc2ggKi8KKwkJZWxzZSB7CisJCQl3aGlsZSAoc291Z2h0X3BvcyA8IHNvdWdodC0+bnIpIHsKKwkJCQlpbnQgY21wID0gc3RyY21wKHJlZi0+bmFtZSwgc291Z2h0LT5pdGVtc1tzb3VnaHRfcG9zXS5zdHJpbmcpOworCQkJCWlmIChjbXAgPCAwKQorCQkJCQlicmVhazsgLyogZGVmaW5pdGVseSBkbyBub3QgaGF2ZSBpdCAqLworCQkJCWVsc2UgaWYgKGNtcCA9PSAwKSB7CisJCQkJCWtlZXAgPSAxOyAvKiBkZWZpbml0ZWx5IGhhdmUgaXQgKi8KKwkJCQkJc291Z2h0LT5pdGVtc1tzb3VnaHRfcG9zKytdLnV0aWwgPSAibWF0Y2hlZCI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXNvdWdodF9wb3MrKzsgLyogbWlnaHQgaGF2ZSBpdDsga2VlcCBsb29raW5nICovCisJCQl9CisJCX0KKworCQlpZiAoISBrZWVwICYmIGFyZ3MuZmV0Y2hfYWxsICYmCisJCSAgICAoIWFyZ3MuZGVwdGggfHwgcHJlZml4Y21wKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSkpCisJCQlrZWVwID0gMTsKKworCQlpZiAoa2VlcCkgeworCQkJKm5ld3RhaWwgPSByZWY7CisJCQlyZWYtPm5leHQgPSBOVUxMOworCQkJbmV3dGFpbCA9ICZyZWYtPm5leHQ7CisJCX0gZWxzZSB7CisJCQlmcmVlKHJlZik7CisJCX0KKwl9CisKKwlmaWx0ZXJfc3RyaW5nX2xpc3Qoc291Z2h0LCAwLCBub25fbWF0Y2hpbmdfcmVmLCBOVUxMKTsKKwkqcmVmcyA9IG5ld2xpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfYWx0ZXJuYXRlX2NvbXBsZXRlKGNvbnN0IHN0cnVjdCByZWYgKnJlZiwgdm9pZCAqdW51c2VkKQoreworCW1hcmtfY29tcGxldGUoTlVMTCwgcmVmLT5vbGRfc2hhMSwgMCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgZXZlcnl0aGluZ19sb2NhbChzdHJ1Y3QgcmVmICoqcmVmcywgc3RydWN0IHN0cmluZ19saXN0ICpzb3VnaHQpCit7CisJc3RydWN0IHJlZiAqcmVmOworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBjdXRvZmYgPSAwOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKworCWZvciAocmVmID0gKnJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBvYmplY3QgKm87CisKKwkJbyA9IHBhcnNlX29iamVjdChyZWYtPm9sZF9zaGExKTsKKwkJaWYgKCFvKQorCQkJY29udGludWU7CisKKwkJLyogV2UgYWxyZWFkeSBoYXZlIGl0IC0tIHdoaWNoIG1heSBtZWFuIHRoYXQgd2Ugd2VyZQorCQkgKiBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHNpZGUgYXQgc29tZSB0aW1lIGFmdGVyCisJCSAqIHRoYXQgKGl0IGlzIE9LIGlmIHdlIGd1ZXNzIHdyb25nIGhlcmUpLgorCQkgKi8KKwkJaWYgKG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOworCQkJaWYgKCFjdXRvZmYgfHwgY3V0b2ZmIDwgY29tbWl0LT5kYXRlKQorCQkJCWN1dG9mZiA9IGNvbW1pdC0+ZGF0ZTsKKwkJfQorCX0KKworCWlmICghYXJncy5kZXB0aCkgeworCQlmb3JfZWFjaF9yZWYobWFya19jb21wbGV0ZSwgTlVMTCk7CisJCWZvcl9lYWNoX2FsdGVybmF0ZV9yZWYobWFya19hbHRlcm5hdGVfY29tcGxldGUsIE5VTEwpOworCQlpZiAoY3V0b2ZmKQorCQkJbWFya19yZWNlbnRfY29tcGxldGVfY29tbWl0cyhjdXRvZmYpOworCX0KKworCS8qCisJICogTWFyayBhbGwgY29tcGxldGUgcmVtb3RlIHJlZnMgYXMgY29tbW9uIHJlZnMuCisJICogRG9uJ3QgbWFyayB0aGVtIGNvbW1vbiB5ZXQ7IHRoZSBzZXJ2ZXIgaGFzIHRvIGJlIHRvbGQgc28gZmlyc3QuCisJICovCisJZm9yIChyZWYgPSAqcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyhsb29rdXBfb2JqZWN0KHJlZi0+b2xkX3NoYTEpLAorCQkJCQkgICAgIE5VTEwsIDApOworCisJCWlmICghbyB8fCBvLT50eXBlICE9IE9CSl9DT01NSVQgfHwgIShvLT5mbGFncyAmIENPTVBMRVRFKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghKG8tPmZsYWdzICYgU0VFTikpIHsKKwkJCXJldl9saXN0X3B1c2goKHN0cnVjdCBjb21taXQgKilvLCBDT01NT05fUkVGIHwgU0VFTik7CisKKwkJCW1hcmtfY29tbW9uKChzdHJ1Y3QgY29tbWl0ICopbywgMSwgMSk7CisJCX0KKwl9CisKKwlmaWx0ZXJfcmVmcyhyZWZzLCBzb3VnaHQpOworCisJZm9yIChyZXR2YWwgPSAxLCByZWYgPSAqcmVmczsgcmVmIDsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlbW90ZSA9IHJlZi0+b2xkX3NoYTE7CisJCXVuc2lnbmVkIGNoYXIgbG9jYWxbMjBdOworCQlzdHJ1Y3Qgb2JqZWN0ICpvOworCisJCW8gPSBsb29rdXBfb2JqZWN0KHJlbW90ZSk7CisJCWlmICghbyB8fCAhKG8tPmZsYWdzICYgQ09NUExFVEUpKSB7CisJCQlyZXR2YWwgPSAwOworCQkJaWYgKCFhcmdzLnZlcmJvc2UpCisJCQkJY29udGludWU7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkid2FudCAlcyAoJXMpXG4iLCBzaGExX3RvX2hleChyZW1vdGUpLAorCQkJCXJlZi0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWhhc2hjcHkocmVmLT5uZXdfc2hhMSwgbG9jYWwpOworCQlpZiAoIWFyZ3MudmVyYm9zZSkKKwkJCWNvbnRpbnVlOworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJhbHJlYWR5IGhhdmUgJXMgKCVzKVxuIiwgc2hhMV90b19oZXgocmVtb3RlKSwKKwkJCXJlZi0+bmFtZSk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2lkZWJhbmRfZGVtdXgoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKQoreworCWludCAqeGQgPSBkYXRhOworCisJaW50IHJldCA9IHJlY3Zfc2lkZWJhbmQoImZldGNoLXBhY2siLCB4ZFswXSwgb3V0KTsKKwljbG9zZShvdXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BhY2soaW50IHhkWzJdLCBjaGFyICoqcGFja19sb2NrZmlsZSkKK3sKKwlzdHJ1Y3QgYXN5bmMgZGVtdXg7CisJY29uc3QgY2hhciAqYXJndlsyMF07CisJY2hhciBrZWVwX2FyZ1syNTZdOworCWNoYXIgaGRyX2FyZ1syNTZdOworCWNvbnN0IGNoYXIgKiphdjsKKwlpbnQgZG9fa2VlcCA9IGFyZ3Mua2VlcF9wYWNrOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNtZDsKKworCW1lbXNldCgmZGVtdXgsIDAsIHNpemVvZihkZW11eCkpOworCWlmICh1c2Vfc2lkZWJhbmQpIHsKKwkJLyogeGRbXSBpcyB0YWxraW5nIHdpdGggdXBsb2FkLXBhY2s7IHN1YnByb2Nlc3MgcmVhZHMgZnJvbQorCQkgKiB4ZFswXSwgc3BpdHMgb3V0IGJhbmQjMiB0byBzdGRlcnIsIGFuZCBmZWVkcyB1cyBiYW5kIzEKKwkJICogdGhyb3VnaCBkZW11eC0+b3V0LgorCQkgKi8KKwkJZGVtdXgucHJvYyA9IHNpZGViYW5kX2RlbXV4OworCQlkZW11eC5kYXRhID0geGQ7CisJCWRlbXV4Lm91dCA9IC0xOworCQlpZiAoc3RhcnRfYXN5bmMoJmRlbXV4KSkKKwkJCWRpZSgiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIgorCQkJICAgICIgZGVtdWx0aXBsZXhlciIpOworCX0KKwllbHNlCisJCWRlbXV4Lm91dCA9IHhkWzBdOworCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQuYXJndiA9IGFyZ3Y7CisJYXYgPSBhcmd2OworCSpoZHJfYXJnID0gMDsKKwlpZiAoIWFyZ3Mua2VlcF9wYWNrICYmIHVucGFja19saW1pdCkgeworCQlzdHJ1Y3QgcGFja19oZWFkZXIgaGVhZGVyOworCisJCWlmIChyZWFkX3BhY2tfaGVhZGVyKGRlbXV4Lm91dCwgJmhlYWRlcikpCisJCQlkaWUoInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiKTsKKwkJc25wcmludGYoaGRyX2FyZywgc2l6ZW9mKGhkcl9hcmcpLAorCQkJICItLXBhY2tfaGVhZGVyPSUiUFJJdTMyIiwlIlBSSXUzMiwKKwkJCSBudG9obChoZWFkZXIuaGRyX3ZlcnNpb24pLCBudG9obChoZWFkZXIuaGRyX2VudHJpZXMpKTsKKwkJaWYgKG50b2hsKGhlYWRlci5oZHJfZW50cmllcykgPCB1bnBhY2tfbGltaXQpCisJCQlkb19rZWVwID0gMDsKKwkJZWxzZQorCQkJZG9fa2VlcCA9IDE7CisJfQorCisJaWYgKGRvX2tlZXApIHsKKwkJaWYgKHBhY2tfbG9ja2ZpbGUpCisJCQljbWQub3V0ID0gLTE7CisJCSphdisrID0gImluZGV4LXBhY2siOworCQkqYXYrKyA9ICItLXN0ZGluIjsKKwkJaWYgKCFhcmdzLnF1aWV0ICYmICFhcmdzLm5vX3Byb2dyZXNzKQorCQkJKmF2KysgPSAiLXYiOworCQlpZiAoYXJncy51c2VfdGhpbl9wYWNrKQorCQkJKmF2KysgPSAiLS1maXgtdGhpbiI7CisJCWlmIChhcmdzLmxvY2tfcGFjayB8fCB1bnBhY2tfbGltaXQpIHsKKwkJCWludCBzID0gc3ByaW50ZihrZWVwX2FyZywKKwkJCQkJIi0ta2VlcD1mZXRjaC1wYWNrICUiUFJJdU1BWCAiIG9uICIsICh1aW50bWF4X3QpIGdldHBpZCgpKTsKKwkJCWlmIChnZXRob3N0bmFtZShrZWVwX2FyZyArIHMsIHNpemVvZihrZWVwX2FyZykgLSBzKSkKKwkJCQlzdHJjcHkoa2VlcF9hcmcgKyBzLCAibG9jYWxob3N0Iik7CisJCQkqYXYrKyA9IGtlZXBfYXJnOworCQl9CisJfQorCWVsc2UgeworCQkqYXYrKyA9ICJ1bnBhY2stb2JqZWN0cyI7CisJCWlmIChhcmdzLnF1aWV0IHx8IGFyZ3Mubm9fcHJvZ3Jlc3MpCisJCQkqYXYrKyA9ICItcSI7CisJfQorCWlmICgqaGRyX2FyZykKKwkJKmF2KysgPSBoZHJfYXJnOworCWlmIChmZXRjaF9mc2NrX29iamVjdHMgPj0gMAorCSAgICA/IGZldGNoX2ZzY2tfb2JqZWN0cworCSAgICA6IHRyYW5zZmVyX2ZzY2tfb2JqZWN0cyA+PSAwCisJICAgID8gdHJhbnNmZXJfZnNja19vYmplY3RzCisJICAgIDogMCkKKwkJKmF2KysgPSAiLS1zdHJpY3QiOworCSphdisrID0gTlVMTDsKKworCWNtZC5pbiA9IGRlbXV4Lm91dDsKKwljbWQuZ2l0X2NtZCA9IDE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNtZCkpCisJCWRpZSgiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIiwgYXJndlswXSk7CisJaWYgKGRvX2tlZXAgJiYgcGFja19sb2NrZmlsZSkgeworCQkqcGFja19sb2NrZmlsZSA9IGluZGV4X3BhY2tfbG9ja2ZpbGUoY21kLm91dCk7CisJCWNsb3NlKGNtZC5vdXQpOworCX0KKworCWlmIChmaW5pc2hfY29tbWFuZCgmY21kKSkKKwkJZGllKCIlcyBmYWlsZWQiLCBhcmd2WzBdKTsKKwlpZiAodXNlX3NpZGViYW5kICYmIGZpbmlzaF9hc3luYygmZGVtdXgpKQorCQlkaWUoImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKmRvX2ZldGNoX3BhY2soaW50IGZkWzJdLAorCQljb25zdCBzdHJ1Y3QgcmVmICpvcmlnX3JlZiwKKwkJc3RydWN0IHN0cmluZ19saXN0ICpzb3VnaHQsCisJCWNoYXIgKipwYWNrX2xvY2tmaWxlKQoreworCXN0cnVjdCByZWYgKnJlZiA9IGNvcHlfcmVmX2xpc3Qob3JpZ19yZWYpOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY29uc3QgY2hhciAqYWdlbnRfZmVhdHVyZTsKKwlpbnQgYWdlbnRfbGVuOworCisJc29ydF9yZWZfbGlzdCgmcmVmLCByZWZfY29tcGFyZV9uYW1lKTsKKworCWlmIChpc19yZXBvc2l0b3J5X3NoYWxsb3coKSAmJiAhc2VydmVyX3N1cHBvcnRzKCJzaGFsbG93IikpCisJCWRpZSgiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIik7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygibXVsdGlfYWNrX2RldGFpbGVkIikpIHsKKwkJaWYgKGFyZ3MudmVyYm9zZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2Fja19kZXRhaWxlZFxuIik7CisJCW11bHRpX2FjayA9IDI7CisJCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm5vLWRvbmUiKSkgeworCQkJaWYgKGFyZ3MudmVyYm9zZSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlNlcnZlciBzdXBwb3J0cyBuby1kb25lXG4iKTsKKwkJCWlmIChhcmdzLnN0YXRlbGVzc19ycGMpCisJCQkJbm9fZG9uZSA9IDE7CisJCX0KKwl9CisJZWxzZSBpZiAoc2VydmVyX3N1cHBvcnRzKCJtdWx0aV9hY2siKSkgeworCQlpZiAoYXJncy52ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrXG4iKTsKKwkJbXVsdGlfYWNrID0gMTsKKwl9CisJaWYgKHNlcnZlcl9zdXBwb3J0cygic2lkZS1iYW5kLTY0ayIpKSB7CisJCWlmIChhcmdzLnZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIlNlcnZlciBzdXBwb3J0cyBzaWRlLWJhbmQtNjRrXG4iKTsKKwkJdXNlX3NpZGViYW5kID0gMjsKKwl9CisJZWxzZSBpZiAoc2VydmVyX3N1cHBvcnRzKCJzaWRlLWJhbmQiKSkgeworCQlpZiAoYXJncy52ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kXG4iKTsKKwkJdXNlX3NpZGViYW5kID0gMTsKKwl9CisJaWYgKCFzZXJ2ZXJfc3VwcG9ydHMoInRoaW4tcGFjayIpKQorCQlhcmdzLnVzZV90aGluX3BhY2sgPSAwOworCWlmICghc2VydmVyX3N1cHBvcnRzKCJuby1wcm9ncmVzcyIpKQorCQlhcmdzLm5vX3Byb2dyZXNzID0gMDsKKwlpZiAoIXNlcnZlcl9zdXBwb3J0cygiaW5jbHVkZS10YWciKSkKKwkJYXJncy5pbmNsdWRlX3RhZyA9IDA7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygib2ZzLWRlbHRhIikpIHsKKwkJaWYgKGFyZ3MudmVyYm9zZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiU2VydmVyIHN1cHBvcnRzIG9mcy1kZWx0YVxuIik7CisJfSBlbHNlCisJCXByZWZlcl9vZnNfZGVsdGEgPSAwOworCisJaWYgKChhZ2VudF9mZWF0dXJlID0gc2VydmVyX2ZlYXR1cmVfdmFsdWUoImFnZW50IiwgJmFnZW50X2xlbikpKSB7CisJCWFnZW50X3N1cHBvcnRlZCA9IDE7CisJCWlmIChhcmdzLnZlcmJvc2UgJiYgYWdlbnRfbGVuKQorCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzXG4iLAorCQkJCWFnZW50X2xlbiwgYWdlbnRfZmVhdHVyZSk7CisJfQorCisJaWYgKGV2ZXJ5dGhpbmdfbG9jYWwoJnJlZiwgc291Z2h0KSkgeworCQlwYWNrZXRfZmx1c2goZmRbMV0pOworCQlnb3RvIGFsbF9kb25lOworCX0KKwlpZiAoZmluZF9jb21tb24oZmQsIHNoYTEsIHJlZikgPCAwKQorCQlpZiAoIWFyZ3Mua2VlcF9wYWNrKQorCQkJLyogV2hlbiBjbG9uaW5nLCBpdCBpcyBub3QgdW51c3VhbCB0byBoYXZlCisJCQkgKiBubyBjb21tb24gY29tbWl0LgorCQkJICovCisJCQl3YXJuaW5nKCJubyBjb21tb24gY29tbWl0cyIpOworCisJaWYgKGFyZ3Muc3RhdGVsZXNzX3JwYykKKwkJcGFja2V0X2ZsdXNoKGZkWzFdKTsKKwlpZiAoZ2V0X3BhY2soZmQsIHBhY2tfbG9ja2ZpbGUpKQorCQlkaWUoImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIik7CisKKyBhbGxfZG9uZToKKwlyZXR1cm4gcmVmOworfQorCitzdGF0aWMgaW50IGZldGNoX3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmIChzdHJjbXAodmFyLCAiZmV0Y2gudW5wYWNrbGltaXQiKSA9PSAwKSB7CisJCWZldGNoX3VucGFja19saW1pdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInRyYW5zZmVyLnVucGFja2xpbWl0IikgPT0gMCkgeworCQl0cmFuc2Zlcl91bnBhY2tfbGltaXQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IikgPT0gMCkgeworCQlwcmVmZXJfb2ZzX2RlbHRhID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJmZXRjaC5mc2Nrb2JqZWN0cyIpKSB7CisJCWZldGNoX2ZzY2tfb2JqZWN0cyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAidHJhbnNmZXIuZnNja29iamVjdHMiKSkgeworCQl0cmFuc2Zlcl9mc2NrX29iamVjdHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2NrOworCitzdGF0aWMgdm9pZCBmZXRjaF9wYWNrX3NldHVwKHZvaWQpCit7CisJc3RhdGljIGludCBkaWRfc2V0dXA7CisJaWYgKGRpZF9zZXR1cCkKKwkJcmV0dXJuOworCWdpdF9jb25maWcoZmV0Y2hfcGFja19jb25maWcsIE5VTEwpOworCWlmICgwIDw9IHRyYW5zZmVyX3VucGFja19saW1pdCkKKwkJdW5wYWNrX2xpbWl0ID0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0OworCWVsc2UgaWYgKDAgPD0gZmV0Y2hfdW5wYWNrX2xpbWl0KQorCQl1bnBhY2tfbGltaXQgPSBmZXRjaF91bnBhY2tfbGltaXQ7CisJZGlkX3NldHVwID0gMTsKK30KKworaW50IGNtZF9mZXRjaF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCByZXQ7CisJc3RydWN0IHJlZiAqcmVmID0gTlVMTDsKKwljb25zdCBjaGFyICpkZXN0ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc291Z2h0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGZkWzJdOworCWNoYXIgKnBhY2tfbG9ja2ZpbGUgPSBOVUxMOworCWNoYXIgKipwYWNrX2xvY2tmaWxlX3B0ciA9IE5VTEw7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CisKKwlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoImZldGNoLXBhY2siKTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjICYmICphcmd2W2ldID09ICctJzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS11cGxvYWQtcGFjaz0iKSkgeworCQkJYXJncy51cGxvYWRwYWNrID0gYXJnICsgMTQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWV4ZWM9IikpIHsKKwkJCWFyZ3MudXBsb2FkcGFjayA9IGFyZyArIDc7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1xdWlldCIsIGFyZykgfHwgIXN0cmNtcCgiLXEiLCBhcmcpKSB7CisJCQlhcmdzLnF1aWV0ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLWtlZXAiLCBhcmcpIHx8ICFzdHJjbXAoIi1rIiwgYXJnKSkgeworCQkJYXJncy5sb2NrX3BhY2sgPSBhcmdzLmtlZXBfcGFjazsKKwkJCWFyZ3Mua2VlcF9wYWNrID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLXRoaW4iLCBhcmcpKSB7CisJCQlhcmdzLnVzZV90aGluX3BhY2sgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0taW5jbHVkZS10YWciLCBhcmcpKSB7CisJCQlhcmdzLmluY2x1ZGVfdGFnID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLWFsbCIsIGFyZykpIHsKKwkJCWFyZ3MuZmV0Y2hfYWxsID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLXN0ZGluIiwgYXJnKSkgeworCQkJYXJncy5zdGRpbl9yZWZzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItdiIsIGFyZykpIHsKKwkJCWFyZ3MudmVyYm9zZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWRlcHRoPSIpKSB7CisJCQlhcmdzLmRlcHRoID0gc3RydG9sKGFyZyArIDgsIE5VTEwsIDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tbm8tcHJvZ3Jlc3MiLCBhcmcpKSB7CisJCQlhcmdzLm5vX3Byb2dyZXNzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLXN0YXRlbGVzcy1ycGMiLCBhcmcpKSB7CisJCQlhcmdzLnN0YXRlbGVzc19ycGMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tbG9jay1wYWNrIiwgYXJnKSkgeworCQkJYXJncy5sb2NrX3BhY2sgPSAxOworCQkJcGFja19sb2NrZmlsZV9wdHIgPSAmcGFja19sb2NrZmlsZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXVzYWdlKGZldGNoX3BhY2tfdXNhZ2UpOworCX0KKworCWlmIChpIDwgYXJnYykKKwkJZGVzdCA9IGFyZ3ZbaSsrXTsKKwllbHNlCisJCXVzYWdlKGZldGNoX3BhY2tfdXNhZ2UpOworCisJLyoKKwkgKiBDb3B5IHJlZnMgZnJvbSBjbWRsaW5lIHRvIGdyb3dhYmxlIGxpc3QsIHRoZW4gYXBwZW5kIGFueQorCSAqIHJlZnMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQ6CisJICovCisJZm9yICg7IGkgPCBhcmdjOyBpKyspCisJCXN0cmluZ19saXN0X2FwcGVuZCgmc291Z2h0LCB4c3RyZHVwKGFyZ3ZbaV0pKTsKKwlpZiAoYXJncy5zdGRpbl9yZWZzKSB7CisJCWlmIChhcmdzLnN0YXRlbGVzc19ycGMpIHsKKwkJCS8qIGluIHN0YXRlbGVzcyBSUEMgbW9kZSB3ZSB1c2UgcGt0LWxpbmUgdG8gcmVhZAorCQkJICogZnJvbSBzdGRpbiwgdW50aWwgd2UgZ2V0IGEgZmx1c2ggcGFja2V0CisJCQkgKi8KKwkJCXN0YXRpYyBjaGFyIGxpbmVbMTAwMF07CisJCQlmb3IgKDs7KSB7CisJCQkJaW50IG4gPSBwYWNrZXRfcmVhZF9saW5lKDAsIGxpbmUsIHNpemVvZihsaW5lKSk7CisJCQkJaWYgKCFuKQorCQkJCQlicmVhazsKKwkJCQlpZiAobGluZVtuLTFdID09ICdcbicpCisJCQkJCW4tLTsKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnNvdWdodCwgeG1lbWR1cHoobGluZSwgbikpOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJLyogcmVhZCBmcm9tIHN0ZGluIG9uZSByZWYgcGVyIGxpbmUsIHVudGlsIEVPRiAqLworCQkJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluLCAnXG4nKSAhPSBFT0YpCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzb3VnaHQsIHN0cmJ1Zl9kZXRhY2goJmxpbmUsIE5VTEwpKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwkJfQorCX0KKworCWlmIChhcmdzLnN0YXRlbGVzc19ycGMpIHsKKwkJY29ubiA9IE5VTEw7CisJCWZkWzBdID0gMDsKKwkJZmRbMV0gPSAxOworCX0gZWxzZSB7CisJCWNvbm4gPSBnaXRfY29ubmVjdChmZCwgZGVzdCwgYXJncy51cGxvYWRwYWNrLAorCQkJCSAgIGFyZ3MudmVyYm9zZSA/IENPTk5FQ1RfVkVSQk9TRSA6IDApOworCX0KKworCWdldF9yZW1vdGVfaGVhZHMoZmRbMF0sICZyZWYsIDAsIE5VTEwpOworCisJcmVmID0gZmV0Y2hfcGFjaygmYXJncywgZmQsIGNvbm4sIHJlZiwgZGVzdCwKKwkJCSAmc291Z2h0LCBwYWNrX2xvY2tmaWxlX3B0cik7CisJaWYgKHBhY2tfbG9ja2ZpbGUpIHsKKwkJcHJpbnRmKCJsb2NrICVzXG4iLCBwYWNrX2xvY2tmaWxlKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJfQorCWNsb3NlKGZkWzBdKTsKKwljbG9zZShmZFsxXSk7CisJaWYgKGZpbmlzaF9jb25uZWN0KGNvbm4pKQorCQlyZXR1cm4gMTsKKworCXJldCA9ICFyZWYgfHwgc291Z2h0Lm5yOworCisJLyoKKwkgKiBJZiB0aGUgaGVhZHMgdG8gcHVsbCB3ZXJlIGdpdmVuLCB3ZSBzaG91bGQgaGF2ZSBjb25zdW1lZAorCSAqIGFsbCBvZiB0aGVtIGJ5IG1hdGNoaW5nIHRoZSByZW1vdGUuICBPdGhlcndpc2UsICdnaXQgZmV0Y2gKKwkgKiByZW1vdGUgbm8tc3VjaC1yZWYnIHdvdWxkIHNpbGVudGx5IHN1Y2NlZWQgd2l0aG91dCBpc3N1aW5nCisJICogYW4gZXJyb3IuCisJICovCisJZm9yIChpID0gMDsgaSA8IHNvdWdodC5ucjsgaSsrKQorCQllcnJvcigibm8gc3VjaCByZW1vdGUgcmVmICVzIiwgc291Z2h0Lml0ZW1zW2ldLnN0cmluZyk7CisJd2hpbGUgKHJlZikgeworCQlwcmludGYoIiVzICVzXG4iLAorCQkgICAgICAgc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSksIHJlZi0+bmFtZSk7CisJCXJlZiA9IHJlZi0+bmV4dDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcmVmICpmZXRjaF9wYWNrKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKm15X2FyZ3MsCisJCSAgICAgICBpbnQgZmRbXSwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgcmVmICpyZWYsCisJCSAgICAgICBjb25zdCBjaGFyICpkZXN0LAorCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICpzb3VnaHQsCisJCSAgICAgICBjaGFyICoqcGFja19sb2NrZmlsZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgcmVmICpyZWZfY3B5OworCisJZmV0Y2hfcGFja19zZXR1cCgpOworCWlmICgmYXJncyAhPSBteV9hcmdzKQorCQltZW1jcHkoJmFyZ3MsIG15X2FyZ3MsIHNpemVvZihhcmdzKSk7CisJaWYgKGFyZ3MuZGVwdGggPiAwKSB7CisJCWlmIChzdGF0KGdpdF9wYXRoKCJzaGFsbG93IiksICZzdCkpCisJCQlzdC5zdF9tdGltZSA9IDA7CisJfQorCisJaWYgKHNvdWdodC0+bnIpIHsKKwkJc29ydF9zdHJpbmdfbGlzdChzb3VnaHQpOworCQlzdHJpbmdfbGlzdF9yZW1vdmVfZHVwbGljYXRlcyhzb3VnaHQsIDApOworCX0KKworCWlmICghcmVmKSB7CisJCXBhY2tldF9mbHVzaChmZFsxXSk7CisJCWRpZSgibm8gbWF0Y2hpbmcgcmVtb3RlIGhlYWQiKTsKKwl9CisJcmVmX2NweSA9IGRvX2ZldGNoX3BhY2soZmQsIHJlZiwgc291Z2h0LCBwYWNrX2xvY2tmaWxlKTsKKworCWlmIChhcmdzLmRlcHRoID4gMCkgeworCQlzdHJ1Y3QgY2FjaGVfdGltZSBtdGltZTsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQljaGFyICpzaGFsbG93ID0gZ2l0X3BhdGgoInNoYWxsb3ciKTsKKwkJaW50IGZkOworCisJCW10aW1lLnNlYyA9IHN0LnN0X210aW1lOworCQltdGltZS5uc2VjID0gU1RfTVRJTUVfTlNFQyhzdCk7CisJCWlmIChzdGF0KHNoYWxsb3csICZzdCkpIHsKKwkJCWlmIChtdGltZS5zZWMpCisJCQkJZGllKCJzaGFsbG93IGZpbGUgd2FzIHJlbW92ZWQgZHVyaW5nIGZldGNoIik7CisJCX0gZWxzZSBpZiAoc3Quc3RfbXRpbWUgIT0gbXRpbWUuc2VjCisjaWZkZWYgVVNFX05TRUMKKwkJCQl8fCBTVF9NVElNRV9OU0VDKHN0KSAhPSBtdGltZS5uc2VjCisjZW5kaWYKKwkJCSAgKQorCQkJZGllKCJzaGFsbG93IGZpbGUgd2FzIGNoYW5nZWQgZHVyaW5nIGZldGNoIik7CisKKwkJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBzaGFsbG93LAorCQkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCQlpZiAoIXdyaXRlX3NoYWxsb3dfY29tbWl0cygmc2IsIDApCisJCSB8fCB3cml0ZV9pbl9mdWxsKGZkLCBzYi5idWYsIHNiLmxlbikgIT0gc2IubGVuKSB7CisJCQl1bmxpbmtfb3Jfd2FybihzaGFsbG93KTsKKwkJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCX0gZWxzZSB7CisJCQljb21taXRfbG9ja19maWxlKCZsb2NrKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCX0KKworCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisJcmV0dXJuIHJlZl9jcHk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2ZldGNoLmMgYi9idWlsdGluL2ZldGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1YTg5OAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZmV0Y2guYwpAQCAtMCwwICsxLDEwMzAgQEAKKy8qCisgKiAiZ2l0IGZldGNoIgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJjb25uZWN0ZWQuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9mZXRjaF91c2FnZVtdID0geworCU5fKCJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iKSwKKwlOXygiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iKSwKKwlOXygiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iKSwKKwlOXygiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworZW51bSB7CisJVEFHU19VTlNFVCA9IDAsCisJVEFHU19ERUZBVUxUID0gMSwKKwlUQUdTX1NFVCA9IDIKK307CisKK3N0YXRpYyBpbnQgYWxsLCBhcHBlbmQsIGRyeV9ydW4sIGZvcmNlLCBrZWVwLCBtdWx0aXBsZSwgcHJ1bmUsIHVwZGF0ZV9oZWFkX29rLCB2ZXJib3NpdHk7CitzdGF0aWMgaW50IHByb2dyZXNzID0gLTEsIHJlY3Vyc2Vfc3VibW9kdWxlcyA9IFJFQ1VSU0VfU1VCTU9EVUxFU19ERUZBVUxUOworc3RhdGljIGludCB0YWdzID0gVEFHU19ERUZBVUxUOworc3RhdGljIGNvbnN0IGNoYXIgKmRlcHRoOworc3RhdGljIGNvbnN0IGNoYXIgKnVwbG9hZF9wYWNrOworc3RhdGljIHN0cnVjdCBzdHJidWYgZGVmYXVsdF9ybGEgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CitzdGF0aWMgY29uc3QgY2hhciAqc3VibW9kdWxlX3ByZWZpeCA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnJlY3Vyc2Vfc3VibW9kdWxlc19kZWZhdWx0OworCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkgeworCQlyZWN1cnNlX3N1Ym1vZHVsZXMgPSBSRUNVUlNFX1NVQk1PRFVMRVNfT0ZGOworCX0gZWxzZSB7CisJCWlmIChhcmcpCisJCQlyZWN1cnNlX3N1Ym1vZHVsZXMgPSBwYXJzZV9mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKG9wdC0+bG9uZ19uYW1lLCBhcmcpOworCQllbHNlCisJCQlyZWN1cnNlX3N1Ym1vZHVsZXMgPSBSRUNVUlNFX1NVQk1PRFVMRVNfT047CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2ZldGNoX29wdGlvbnNbXSA9IHsKKwlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zaXR5KSwKKwlPUFRfQk9PTEVBTigwLCAiYWxsIiwgJmFsbCwKKwkJICAgIE5fKCJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIikpLAorCU9QVF9CT09MRUFOKCdhJywgImFwcGVuZCIsICZhcHBlbmQsCisJCSAgICBOXygiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIikpLAorCU9QVF9TVFJJTkcoMCwgInVwbG9hZC1wYWNrIiwgJnVwbG9hZF9wYWNrLCBOXygicGF0aCIpLAorCQkgICBOXygicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIikpLAorCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIpKSwKKwlPUFRfQk9PTEVBTignbScsICJtdWx0aXBsZSIsICZtdWx0aXBsZSwKKwkJICAgIE5fKCJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiKSksCisJT1BUX1NFVF9JTlQoJ3QnLCAidGFncyIsICZ0YWdzLAorCQkgICAgTl8oImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiKSwgVEFHU19TRVQpLAorCU9QVF9TRVRfSU5UKCduJywgTlVMTCwgJnRhZ3MsCisJCSAgICBOXygiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIiksIFRBR1NfVU5TRVQpLAorCU9QVF9CT09MRUFOKCdwJywgInBydW5lIiwgJnBydW5lLAorCQkgICAgTl8oInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIikpLAorCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgTlVMTCwgTl8oIm9uLWRlbWFuZCIpLAorCQkgICAgTl8oImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiKSwKKwkJICAgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXMgfSwKKwlPUFRfQk9PTEVBTigwLCAiZHJ5LXJ1biIsICZkcnlfcnVuLAorCQkgICAgTl8oImRyeSBydW4iKSksCisJT1BUX0JPT0xFQU4oJ2snLCAia2VlcCIsICZrZWVwLCBOXygia2VlcCBkb3dubG9hZGVkIHBhY2siKSksCisJT1BUX0JPT0xFQU4oJ3UnLCAidXBkYXRlLWhlYWQtb2siLCAmdXBkYXRlX2hlYWRfb2ssCisJCSAgICBOXygiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiKSksCisJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJnByb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCU9QVF9TVFJJTkcoMCwgImRlcHRoIiwgJmRlcHRoLCBOXygiZGVwdGgiKSwKKwkJICAgTl8oImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiKSksCisJeyBPUFRJT05fU1RSSU5HLCAwLCAic3VibW9kdWxlLXByZWZpeCIsICZzdWJtb2R1bGVfcHJlZml4LCBOXygiZGlyIiksCisJCSAgIE5fKCJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IiksIFBBUlNFX09QVF9ISURERU4gfSwKKwl7IE9QVElPTl9TVFJJTkcsIDAsICJyZWN1cnNlLXN1Ym1vZHVsZXMtZGVmYXVsdCIsCisJCSAgICZyZWN1cnNlX3N1Ym1vZHVsZXNfZGVmYXVsdCwgTlVMTCwKKwkJICAgTl8oImRlZmF1bHQgbW9kZSBmb3IgcmVjdXJzaW9uIiksIFBBUlNFX09QVF9ISURERU4gfSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyB2b2lkIHVubG9ja19wYWNrKHZvaWQpCit7CisJaWYgKHRyYW5zcG9ydCkKKwkJdHJhbnNwb3J0X3VubG9ja19wYWNrKHRyYW5zcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHVubG9ja19wYWNrX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJdW5sb2NrX3BhY2soKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKworc3RhdGljIHZvaWQgYWRkX21lcmdlX2NvbmZpZyhzdHJ1Y3QgcmVmICoqaGVhZCwKKwkJCSAgIGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCQkgICAgICAgICAgIHN0cnVjdCBicmFuY2ggKmJyYW5jaCwKKwkJICAgICAgICAgICBzdHJ1Y3QgcmVmICoqKnRhaWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnJhbmNoLT5tZXJnZV9ucjsgaSsrKSB7CisJCXN0cnVjdCByZWYgKnJtLCAqKm9sZF90YWlsID0gKnRhaWw7CisJCXN0cnVjdCByZWZzcGVjIHJlZnNwZWM7CisKKwkJZm9yIChybSA9ICpoZWFkOyBybTsgcm0gPSBybS0+bmV4dCkgeworCQkJaWYgKGJyYW5jaF9tZXJnZV9tYXRjaGVzKGJyYW5jaCwgaSwgcm0tPm5hbWUpKSB7CisJCQkJcm0tPm1lcmdlID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAocm0pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBOb3QgZmV0Y2hlZCB0byBhIHJlbW90ZS10cmFja2luZyBicmFuY2g/ICBXZSBuZWVkIHRvIGZldGNoCisJCSAqIGl0IGFueXdheSB0byBhbGxvdyB0aGlzIGJyYW5jaCdzICJicmFuY2guJG5hbWUubWVyZ2UiCisJCSAqIHRvIGJlIGhvbm9yZWQgYnkgJ2dpdCBwdWxsJywgYnV0IHdlIGRvIG5vdCBoYXZlIHRvCisJCSAqIGZhaWwgaWYgYnJhbmNoLiRuYW1lLm1lcmdlIGlzIG1pc2NvbmZpZ3VyZWQgdG8gcG9pbnQKKwkJICogYXQgYSBub25leGlzdGluZyBicmFuY2guICBJZiB3ZSB3ZXJlIGluZGVlZCBjYWxsZWQgYnkKKwkJICogJ2dpdCBwdWxsJywgaXQgd2lsbCBub3RpY2UgdGhlIG1pc2NvbmZpZ3VyYXRpb24gYmVjYXVzZQorCQkgKiB0aGVyZSBpcyBubyBlbnRyeSBpbiB0aGUgcmVzdWx0aW5nIEZFVENIX0hFQUQgbWFya2VkCisJCSAqIGZvciBtZXJnaW5nLgorCQkgKi8KKwkJbWVtc2V0KCZyZWZzcGVjLCAwLCBzaXplb2YocmVmc3BlYykpOworCQlyZWZzcGVjLnNyYyA9IGJyYW5jaC0+bWVyZ2VbaV0tPnNyYzsKKwkJZ2V0X2ZldGNoX21hcChyZW1vdGVfcmVmcywgJnJlZnNwZWMsIHRhaWwsIDEpOworCQlmb3IgKHJtID0gKm9sZF90YWlsOyBybTsgcm0gPSBybS0+bmV4dCkKKwkJCXJtLT5tZXJnZSA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5kX25vbl9sb2NhbF90YWdzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCXN0cnVjdCByZWYgKipoZWFkLAorCQkJc3RydWN0IHJlZiAqKip0YWlsKTsKKworc3RhdGljIHN0cnVjdCByZWYgKmdldF9yZWZfbWFwKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSAgICAgICBzdHJ1Y3QgcmVmc3BlYyAqcmVmcywgaW50IHJlZl9jb3VudCwgaW50IHRhZ3MsCisJCQkgICAgICAgaW50ICphdXRvdGFncykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVmICpybTsKKwlzdHJ1Y3QgcmVmICpyZWZfbWFwID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9ICZyZWZfbWFwOworCisJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCk7CisKKwlpZiAocmVmX2NvdW50IHx8IHRhZ3MgPT0gVEFHU19TRVQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHJlZl9jb3VudDsgaSsrKSB7CisJCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCAmcmVmc1tpXSwgJnRhaWwsIDApOworCQkJaWYgKHJlZnNbaV0uZHN0ICYmIHJlZnNbaV0uZHN0WzBdKQorCQkJCSphdXRvdGFncyA9IDE7CisJCX0KKwkJLyogTWVyZ2UgZXZlcnl0aGluZyBvbiB0aGUgY29tbWFuZCBsaW5lLCBidXQgbm90IC0tdGFncyAqLworCQlmb3IgKHJtID0gcmVmX21hcDsgcm07IHJtID0gcm0tPm5leHQpCisJCQlybS0+bWVyZ2UgPSAxOworCQlpZiAodGFncyA9PSBUQUdTX1NFVCkKKwkJCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsIHRhZ19yZWZzcGVjLCAmdGFpbCwgMCk7CisJfSBlbHNlIHsKKwkJLyogVXNlIHRoZSBkZWZhdWx0cyAqLworCQlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSB0cmFuc3BvcnQtPnJlbW90ZTsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwkJaW50IGhhc19tZXJnZSA9IGJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKGJyYW5jaCk7CisJCWlmIChyZW1vdGUgJiYKKwkJICAgIChyZW1vdGUtPmZldGNoX3JlZnNwZWNfbnIgfHwKKwkJICAgICAvKiBOb3RlOiBoYXNfbWVyZ2UgaW1wbGllcyBub24tTlVMTCBicmFuY2gtPnJlbW90ZV9uYW1lICovCisJCSAgICAgKGhhc19tZXJnZSAmJiAhc3RyY21wKGJyYW5jaC0+cmVtb3RlX25hbWUsIHJlbW90ZS0+bmFtZSkpKSkgeworCQkJZm9yIChpID0gMDsgaSA8IHJlbW90ZS0+ZmV0Y2hfcmVmc3BlY19ucjsgaSsrKSB7CisJCQkJZ2V0X2ZldGNoX21hcChyZW1vdGVfcmVmcywgJnJlbW90ZS0+ZmV0Y2hbaV0sICZ0YWlsLCAwKTsKKwkJCQlpZiAocmVtb3RlLT5mZXRjaFtpXS5kc3QgJiYKKwkJCQkgICAgcmVtb3RlLT5mZXRjaFtpXS5kc3RbMF0pCisJCQkJCSphdXRvdGFncyA9IDE7CisJCQkJaWYgKCFpICYmICFoYXNfbWVyZ2UgJiYgcmVmX21hcCAmJgorCQkJCSAgICAhcmVtb3RlLT5mZXRjaFswXS5wYXR0ZXJuKQorCQkJCQlyZWZfbWFwLT5tZXJnZSA9IDE7CisJCQl9CisJCQkvKgorCQkJICogaWYgdGhlIHJlbW90ZSB3ZSdyZSBmZXRjaGluZyBmcm9tIGlzIHRoZSBzYW1lCisJCQkgKiBhcyBnaXZlbiBpbiBicmFuY2guPG5hbWU+LnJlbW90ZSwgd2UgYWRkIHRoZQorCQkJICogcmVmIGdpdmVuIGluIGJyYW5jaC48bmFtZT4ubWVyZ2UsIHRvby4KKwkJCSAqCisJCQkgKiBOb3RlOiBoYXNfbWVyZ2UgaW1wbGllcyBub24tTlVMTCBicmFuY2gtPnJlbW90ZV9uYW1lCisJCQkgKi8KKwkJCWlmIChoYXNfbWVyZ2UgJiYKKwkJCSAgICAhc3RyY21wKGJyYW5jaC0+cmVtb3RlX25hbWUsIHJlbW90ZS0+bmFtZSkpCisJCQkJYWRkX21lcmdlX2NvbmZpZygmcmVmX21hcCwgcmVtb3RlX3JlZnMsIGJyYW5jaCwgJnRhaWwpOworCQl9IGVsc2UgeworCQkJcmVmX21hcCA9IGdldF9yZW1vdGVfcmVmKHJlbW90ZV9yZWZzLCAiSEVBRCIpOworCQkJaWYgKCFyZWZfbWFwKQorCQkJCWRpZShfKCJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIpKTsKKwkJCXJlZl9tYXAtPm1lcmdlID0gMTsKKwkJCXRhaWwgPSAmcmVmX21hcC0+bmV4dDsKKwkJfQorCX0KKwlpZiAodGFncyA9PSBUQUdTX0RFRkFVTFQgJiYgKmF1dG90YWdzKQorCQlmaW5kX25vbl9sb2NhbF90YWdzKHRyYW5zcG9ydCwgJnJlZl9tYXAsICZ0YWlsKTsKKwlyZWZfcmVtb3ZlX2R1cGxpY2F0ZXMocmVmX21hcCk7CisKKwlyZXR1cm4gcmVmX21hcDsKK30KKworI2RlZmluZSBTVE9SRV9SRUZfRVJST1JfT1RIRVIgMQorI2RlZmluZSBTVE9SRV9SRUZfRVJST1JfREZfQ09ORkxJQ1QgMgorCitzdGF0aWMgaW50IHNfdXBkYXRlX3JlZihjb25zdCBjaGFyICphY3Rpb24sCisJCQlzdHJ1Y3QgcmVmICpyZWYsCisJCQlpbnQgY2hlY2tfb2xkKQoreworCWNoYXIgbXNnWzEwMjRdOworCWNoYXIgKnJsYSA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKwlzdGF0aWMgc3RydWN0IHJlZl9sb2NrICpsb2NrOworCisJaWYgKGRyeV9ydW4pCisJCXJldHVybiAwOworCWlmICghcmxhKQorCQlybGEgPSBkZWZhdWx0X3JsYS5idWY7CisJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIiVzOiAlcyIsIHJsYSwgYWN0aW9uKTsKKwlsb2NrID0gbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUocmVmLT5uYW1lLAorCQkJCSAgICAgICBjaGVja19vbGQgPyByZWYtPm9sZF9zaGExIDogTlVMTCwgMCk7CisJaWYgKCFsb2NrKQorCQlyZXR1cm4gZXJybm8gPT0gRU5PVERJUiA/IFNUT1JFX1JFRl9FUlJPUl9ERl9DT05GTElDVCA6CisJCQkJCSAgU1RPUkVfUkVGX0VSUk9SX09USEVSOworCWlmICh3cml0ZV9yZWZfc2hhMShsb2NrLCByZWYtPm5ld19zaGExLCBtc2cpIDwgMCkKKwkJcmV0dXJuIGVycm5vID09IEVOT1RESVIgPyBTVE9SRV9SRUZfRVJST1JfREZfQ09ORkxJQ1QgOgorCQkJCQkgIFNUT1JFX1JFRl9FUlJPUl9PVEhFUjsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBSRUZDT0xfV0lEVEggIDEwCisKK3N0YXRpYyBpbnQgdXBkYXRlX2xvY2FsX3JlZihzdHJ1Y3QgcmVmICpyZWYsCisJCQkgICAgY29uc3QgY2hhciAqcmVtb3RlLAorCQkJICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWYsCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZGlzcGxheSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjdXJyZW50ID0gTlVMTCwgKnVwZGF0ZWQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwljb25zdCBjaGFyICpwcmV0dHlfcmVmID0gcHJldHRpZnlfcmVmbmFtZShyZWYtPm5hbWUpOworCisJdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8ocmVmLT5uZXdfc2hhMSwgTlVMTCk7CisJaWYgKHR5cGUgPCAwKQorCQlkaWUoXygib2JqZWN0ICVzIG5vdCBmb3VuZCIpLCBzaGExX3RvX2hleChyZWYtPm5ld19zaGExKSk7CisKKwlpZiAoIWhhc2hjbXAocmVmLT5vbGRfc2hhMSwgcmVmLT5uZXdfc2hhMSkpIHsKKwkJaWYgKHZlcmJvc2l0eSA+IDApCisJCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiPSAlLSpzICUtKnMgLT4gJXMiLAorCQkJCSAgICBUUkFOU1BPUlRfU1VNTUFSWShfKCJbdXAgdG8gZGF0ZV0iKSksCisJCQkJICAgIFJFRkNPTF9XSURUSCwgcmVtb3RlLCBwcmV0dHlfcmVmKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGN1cnJlbnRfYnJhbmNoICYmCisJICAgICFzdHJjbXAocmVmLT5uYW1lLCBjdXJyZW50X2JyYW5jaC0+bmFtZSkgJiYKKwkgICAgISh1cGRhdGVfaGVhZF9vayB8fCBpc19iYXJlX3JlcG9zaXRvcnkoKSkgJiYKKwkgICAgIWlzX251bGxfc2hhMShyZWYtPm9sZF9zaGExKSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBoZWFkLCBhbmQgaXQncyBub3Qgb2theSB0byB1cGRhdGUKKwkJICogdGhlIGhlYWQsIGFuZCB0aGUgb2xkIHZhbHVlIG9mIHRoZSBoZWFkIGlzbid0IGVtcHR5Li4uCisJCSAqLworCQlzdHJidWZfYWRkZihkaXNwbGF5LAorCQkJICAgIF8oIiEgJS0qcyAlLSpzIC0+ICVzICAoY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2gpIiksCisJCQkgICAgVFJBTlNQT1JUX1NVTU1BUlkoXygiW3JlamVjdGVkXSIpKSwKKwkJCSAgICBSRUZDT0xfV0lEVEgsIHJlbW90ZSwgcHJldHR5X3JlZik7CisJCXJldHVybiAxOworCX0KKworCWlmICghaXNfbnVsbF9zaGExKHJlZi0+b2xkX3NoYTEpICYmCisJICAgICFwcmVmaXhjbXAocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKSB7CisJCWludCByOworCQlyID0gc191cGRhdGVfcmVmKCJ1cGRhdGluZyB0YWciLCByZWYsIDApOworCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiJWMgJS0qcyAlLSpzIC0+ICVzJXMiLAorCQkJICAgIHIgPyAnIScgOiAnLScsCisJCQkgICAgVFJBTlNQT1JUX1NVTU1BUlkoXygiW3RhZyB1cGRhdGVdIikpLAorCQkJICAgIFJFRkNPTF9XSURUSCwgcmVtb3RlLCBwcmV0dHlfcmVmLAorCQkJICAgIHIgPyBfKCIgICh1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZikiKSA6ICIiKTsKKwkJcmV0dXJuIHI7CisJfQorCisJY3VycmVudCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyZWYtPm9sZF9zaGExLCAxKTsKKwl1cGRhdGVkID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHJlZi0+bmV3X3NoYTEsIDEpOworCWlmICghY3VycmVudCB8fCAhdXBkYXRlZCkgeworCQljb25zdCBjaGFyICptc2c7CisJCWNvbnN0IGNoYXIgKndoYXQ7CisJCWludCByOworCQkvKgorCQkgKiBOaWNlbHkgZGVzY3JpYmUgdGhlIG5ldyByZWYgd2UncmUgZmV0Y2hpbmcuCisJCSAqIEJhc2UgdGhpcyBvbiB0aGUgcmVtb3RlJ3MgcmVmIG5hbWUsIGFzIGl0J3MKKwkJICogbW9yZSBsaWtlbHkgdG8gZm9sbG93IGEgc3RhbmRhcmQgbGF5b3V0LgorCQkgKi8KKwkJY29uc3QgY2hhciAqbmFtZSA9IHJlbW90ZV9yZWYgPyByZW1vdGVfcmVmLT5uYW1lIDogIiI7CisJCWlmICghcHJlZml4Y21wKG5hbWUsICJyZWZzL3RhZ3MvIikpIHsKKwkJCW1zZyA9ICJzdG9yaW5nIHRhZyI7CisJCQl3aGF0ID0gXygiW25ldyB0YWddIik7CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChuYW1lLCAicmVmcy9oZWFkcy8iKSkgeworCQkJbXNnID0gInN0b3JpbmcgaGVhZCI7CisJCQl3aGF0ID0gXygiW25ldyBicmFuY2hdIik7CisJCX0gZWxzZSB7CisJCQltc2cgPSAic3RvcmluZyByZWYiOworCQkJd2hhdCA9IF8oIltuZXcgcmVmXSIpOworCQl9CisKKwkJaWYgKChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09GRikgJiYKKwkJICAgIChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OKSkKKwkJCWNoZWNrX2Zvcl9uZXdfc3VibW9kdWxlX2NvbW1pdHMocmVmLT5uZXdfc2hhMSk7CisJCXIgPSBzX3VwZGF0ZV9yZWYobXNnLCByZWYsIDApOworCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiJWMgJS0qcyAlLSpzIC0+ICVzJXMiLAorCQkJICAgIHIgPyAnIScgOiAnKicsCisJCQkgICAgVFJBTlNQT1JUX1NVTU1BUlkod2hhdCksCisJCQkgICAgUkVGQ09MX1dJRFRILCByZW1vdGUsIHByZXR0eV9yZWYsCisJCQkgICAgciA/IF8oIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIpIDogIiIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlpZiAoaW5fbWVyZ2VfYmFzZXMoY3VycmVudCwgdXBkYXRlZCkpIHsKKwkJY2hhciBxdWlja3JlZls4M107CisJCWludCByOworCQlzdHJjcHkocXVpY2tyZWYsIGZpbmRfdW5pcXVlX2FiYnJldihjdXJyZW50LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKKwkJc3RyY2F0KHF1aWNrcmVmLCAiLi4iKTsKKwkJc3RyY2F0KHF1aWNrcmVmLCBmaW5kX3VuaXF1ZV9hYmJyZXYocmVmLT5uZXdfc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKKwkJaWYgKChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09GRikgJiYKKwkJICAgIChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OKSkKKwkJCWNoZWNrX2Zvcl9uZXdfc3VibW9kdWxlX2NvbW1pdHMocmVmLT5uZXdfc2hhMSk7CisJCXIgPSBzX3VwZGF0ZV9yZWYoImZhc3QtZm9yd2FyZCIsIHJlZiwgMSk7CisJCXN0cmJ1Zl9hZGRmKGRpc3BsYXksICIlYyAlLSpzICUtKnMgLT4gJXMlcyIsCisJCQkgICAgciA/ICchJyA6ICcgJywKKwkJCSAgICBUUkFOU1BPUlRfU1VNTUFSWV9XSURUSCwgcXVpY2tyZWYsCisJCQkgICAgUkVGQ09MX1dJRFRILCByZW1vdGUsIHByZXR0eV9yZWYsCisJCQkgICAgciA/IF8oIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIpIDogIiIpOworCQlyZXR1cm4gcjsKKwl9IGVsc2UgaWYgKGZvcmNlIHx8IHJlZi0+Zm9yY2UpIHsKKwkJY2hhciBxdWlja3JlZls4NF07CisJCWludCByOworCQlzdHJjcHkocXVpY2tyZWYsIGZpbmRfdW5pcXVlX2FiYnJldihjdXJyZW50LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKKwkJc3RyY2F0KHF1aWNrcmVmLCAiLi4uIik7CisJCXN0cmNhdChxdWlja3JlZiwgZmluZF91bmlxdWVfYWJicmV2KHJlZi0+bmV3X3NoYTEsIERFRkFVTFRfQUJCUkVWKSk7CisJCWlmICgocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkYpICYmCisJCSAgICAocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PTikpCisJCQljaGVja19mb3JfbmV3X3N1Ym1vZHVsZV9jb21taXRzKHJlZi0+bmV3X3NoYTEpOworCQlyID0gc191cGRhdGVfcmVmKCJmb3JjZWQtdXBkYXRlIiwgcmVmLCAxKTsKKwkJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiVjICUtKnMgJS0qcyAtPiAlcyAgKCVzKSIsCisJCQkgICAgciA/ICchJyA6ICcrJywKKwkJCSAgICBUUkFOU1BPUlRfU1VNTUFSWV9XSURUSCwgcXVpY2tyZWYsCisJCQkgICAgUkVGQ09MX1dJRFRILCByZW1vdGUsIHByZXR0eV9yZWYsCisJCQkgICAgciA/IF8oInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIikgOiBfKCJmb3JjZWQgdXBkYXRlIikpOworCQlyZXR1cm4gcjsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiISAlLSpzICUtKnMgLT4gJXMgICVzIiwKKwkJCSAgICBUUkFOU1BPUlRfU1VNTUFSWShfKCJbcmVqZWN0ZWRdIikpLAorCQkJICAgIFJFRkNPTF9XSURUSCwgcmVtb3RlLCBwcmV0dHlfcmVmLAorCQkJICAgIF8oIihub24tZmFzdC1mb3J3YXJkKSIpKTsKKwkJcmV0dXJuIDE7CisJfQorfQorCitzdGF0aWMgaW50IGl0ZXJhdGVfcmVmX21hcCh2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdKQoreworCXN0cnVjdCByZWYgKipybSA9IGNiX2RhdGE7CisJc3RydWN0IHJlZiAqcmVmID0gKnJtOworCisJaWYgKCFyZWYpCisJCXJldHVybiAtMTsgLyogZW5kIG9mIHRoZSBsaXN0ICovCisJKnJtID0gcmVmLT5uZXh0OworCWhhc2hjcHkoc2hhMSwgcmVmLT5vbGRfc2hhMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RvcmVfdXBkYXRlZF9yZWZzKGNvbnN0IGNoYXIgKnJhd191cmwsIGNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lLAorCQlzdHJ1Y3QgcmVmICpyZWZfbWFwKQoreworCUZJTEUgKmZwOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgdXJsX2xlbiwgaSwgc2hvd25fdXJsID0gMCwgcmMgPSAwOworCXN0cnVjdCBzdHJidWYgbm90ZSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKndoYXQsICpraW5kOworCXN0cnVjdCByZWYgKnJtOworCWNoYXIgKnVybCwgKmZpbGVuYW1lID0gZHJ5X3J1biA/ICIvZGV2L251bGwiIDogZ2l0X3BhdGgoIkZFVENIX0hFQUQiKTsKKwlpbnQgd2FudF9tZXJnZTsKKworCWZwID0gZm9wZW4oZmlsZW5hbWUsICJhIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBvcGVuICVzOiAlc1xuIiksIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCisJaWYgKHJhd191cmwpCisJCXVybCA9IHRyYW5zcG9ydF9hbm9ueW1pemVfdXJsKHJhd191cmwpOworCWVsc2UKKwkJdXJsID0geHN0cmR1cCgiZm9yZWlnbiIpOworCisJcm0gPSByZWZfbWFwOworCWlmIChjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZChpdGVyYXRlX3JlZl9tYXAsIDAsICZybSkpIHsKKwkJcmMgPSBlcnJvcihfKCIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iKSwgdXJsKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwkvKgorCSAqIFRoZSBmaXJzdCBwYXNzIHdyaXRlcyBvYmplY3RzIHRvIGJlIG1lcmdlZCBhbmQgdGhlbiB0aGUKKwkgKiBzZWNvbmQgcGFzcyB3cml0ZXMgdGhlIHJlc3QsIGluIG9yZGVyIHRvIGFsbG93IHVzaW5nCisJICogRkVUQ0hfSEVBRCBhcyBhIHJlZm5hbWUgdG8gcmVmZXIgdG8gdGhlIHJlZiB0byBiZSBtZXJnZWQuCisJICovCisJZm9yICh3YW50X21lcmdlID0gMTsgMCA8PSB3YW50X21lcmdlOyB3YW50X21lcmdlLS0pIHsKKwkJZm9yIChybSA9IHJlZl9tYXA7IHJtOyBybSA9IHJtLT5uZXh0KSB7CisJCQlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOworCisJCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkocm0tPm9sZF9zaGExLCAxKTsKKwkJCWlmICghY29tbWl0KQorCQkJCXJtLT5tZXJnZSA9IDA7CisKKwkJCWlmIChybS0+bWVyZ2UgIT0gd2FudF9tZXJnZSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHJtLT5wZWVyX3JlZikgeworCQkJCXJlZiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZWYpICsgc3RybGVuKHJtLT5wZWVyX3JlZi0+bmFtZSkgKyAxKTsKKwkJCQlzdHJjcHkocmVmLT5uYW1lLCBybS0+cGVlcl9yZWYtPm5hbWUpOworCQkJCWhhc2hjcHkocmVmLT5vbGRfc2hhMSwgcm0tPnBlZXJfcmVmLT5vbGRfc2hhMSk7CisJCQkJaGFzaGNweShyZWYtPm5ld19zaGExLCBybS0+b2xkX3NoYTEpOworCQkJCXJlZi0+Zm9yY2UgPSBybS0+cGVlcl9yZWYtPmZvcmNlOworCQkJfQorCisKKwkJCWlmICghc3RyY21wKHJtLT5uYW1lLCAiSEVBRCIpKSB7CisJCQkJa2luZCA9ICIiOworCQkJCXdoYXQgPSAiIjsKKwkJCX0KKwkJCWVsc2UgaWYgKCFwcmVmaXhjbXAocm0tPm5hbWUsICJyZWZzL2hlYWRzLyIpKSB7CisJCQkJa2luZCA9ICJicmFuY2giOworCQkJCXdoYXQgPSBybS0+bmFtZSArIDExOworCQkJfQorCQkJZWxzZSBpZiAoIXByZWZpeGNtcChybS0+bmFtZSwgInJlZnMvdGFncy8iKSkgeworCQkJCWtpbmQgPSAidGFnIjsKKwkJCQl3aGF0ID0gcm0tPm5hbWUgKyAxMDsKKwkJCX0KKwkJCWVsc2UgaWYgKCFwcmVmaXhjbXAocm0tPm5hbWUsICJyZWZzL3JlbW90ZXMvIikpIHsKKwkJCQlraW5kID0gInJlbW90ZS10cmFja2luZyBicmFuY2giOworCQkJCXdoYXQgPSBybS0+bmFtZSArIDEzOworCQkJfQorCQkJZWxzZSB7CisJCQkJa2luZCA9ICIiOworCQkJCXdoYXQgPSBybS0+bmFtZTsKKwkJCX0KKworCQkJdXJsX2xlbiA9IHN0cmxlbih1cmwpOworCQkJZm9yIChpID0gdXJsX2xlbiAtIDE7IHVybFtpXSA9PSAnLycgJiYgMCA8PSBpOyBpLS0pCisJCQkJOworCQkJdXJsX2xlbiA9IGkgKyAxOworCQkJaWYgKDQgPCBpICYmICFzdHJuY21wKCIuZ2l0IiwgdXJsICsgaSAtIDMsIDQpKQorCQkJCXVybF9sZW4gPSBpIC0gMzsKKworCQkJc3RyYnVmX3Jlc2V0KCZub3RlKTsKKwkJCWlmICgqd2hhdCkgeworCQkJCWlmICgqa2luZCkKKwkJCQkJc3RyYnVmX2FkZGYoJm5vdGUsICIlcyAiLCBraW5kKTsKKwkJCQlzdHJidWZfYWRkZigmbm90ZSwgIiclcycgb2YgIiwgd2hhdCk7CisJCQl9CisJCQlmcHJpbnRmKGZwLCAiJXNcdCVzXHQlcyIsCisJCQkJc2hhMV90b19oZXgocm0tPm9sZF9zaGExKSwKKwkJCQlybS0+bWVyZ2UgPyAiIiA6ICJub3QtZm9yLW1lcmdlIiwKKwkJCQlub3RlLmJ1Zik7CisJCQlmb3IgKGkgPSAwOyBpIDwgdXJsX2xlbjsgKytpKQorCQkJCWlmICgnXG4nID09IHVybFtpXSkKKwkJCQkJZnB1dHMoIlxcbiIsIGZwKTsKKwkJCQllbHNlCisJCQkJCWZwdXRjKHVybFtpXSwgZnApOworCQkJZnB1dGMoJ1xuJywgZnApOworCisJCQlzdHJidWZfcmVzZXQoJm5vdGUpOworCQkJaWYgKHJlZikgeworCQkJCXJjIHw9IHVwZGF0ZV9sb2NhbF9yZWYocmVmLCB3aGF0LCBybSwgJm5vdGUpOworCQkJCWZyZWUocmVmKTsKKwkJCX0gZWxzZQorCQkJCXN0cmJ1Zl9hZGRmKCZub3RlLCAiKiAlLSpzICUtKnMgLT4gRkVUQ0hfSEVBRCIsCisJCQkJCSAgICBUUkFOU1BPUlRfU1VNTUFSWV9XSURUSCwKKwkJCQkJICAgICpraW5kID8ga2luZCA6ICJicmFuY2giLAorCQkJCQkgICAgUkVGQ09MX1dJRFRILAorCQkJCQkgICAgKndoYXQgPyB3aGF0IDogIkhFQUQiKTsKKwkJCWlmIChub3RlLmxlbikgeworCQkJCWlmICh2ZXJib3NpdHkgPj0gMCAmJiAhc2hvd25fdXJsKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJGcm9tICUuKnNcbiIpLAorCQkJCQkJCXVybF9sZW4sIHVybCk7CisJCQkJCXNob3duX3VybCA9IDE7CisJCQkJfQorCQkJCWlmICh2ZXJib3NpdHkgPj0gMCkKKwkJCQkJZnByaW50ZihzdGRlcnIsICIgJXNcbiIsIG5vdGUuYnVmKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChyYyAmIFNUT1JFX1JFRl9FUlJPUl9ERl9DT05GTElDVCkKKwkJZXJyb3IoXygic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorCQkgICAgICAiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgIgorCQkgICAgICAiYnJhbmNoZXMiKSwgcmVtb3RlX25hbWUpOworCisgYWJvcnQ6CisJc3RyYnVmX3JlbGVhc2UoJm5vdGUpOworCWZyZWUodXJsKTsKKwlmY2xvc2UoZnApOworCXJldHVybiByYzsKK30KKworLyoKKyAqIFdlIHdvdWxkIHdhbnQgdG8gYnlwYXNzIHRoZSBvYmplY3QgdHJhbnNmZXIgYWx0b2dldGhlciBpZgorICogZXZlcnl0aGluZyB3ZSBhcmUgZ29pbmcgdG8gZmV0Y2ggYWxyZWFkeSBleGlzdHMgYW5kIGlzIGNvbm5lY3RlZAorICogbG9jYWxseS4KKyAqLworc3RhdGljIGludCBxdWlja2ZldGNoKHN0cnVjdCByZWYgKnJlZl9tYXApCit7CisJc3RydWN0IHJlZiAqcm0gPSByZWZfbWFwOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZGVlcGVuaW5nIGEgc2hhbGxvdyBjbG9uZSB3ZSBhbHJlYWR5IGhhdmUgdGhlc2UKKwkgKiBvYmplY3RzIHJlYWNoYWJsZS4gIFJ1bm5pbmcgcmV2LWxpc3QgaGVyZSB3aWxsIHJldHVybiB3aXRoCisJICogYSBnb29kICgwKSBleGl0IHN0YXR1cyBhbmQgd2UnbGwgYnlwYXNzIHRoZSBmZXRjaCB0aGF0IHdlCisJICogcmVhbGx5IG5lZWQgdG8gcGVyZm9ybS4gIENsYWltaW5nIGZhaWx1cmUgbm93IHdpbGwgZW5zdXJlCisJICogd2UgcGVyZm9ybSB0aGUgbmV0d29yayBleGNoYW5nZSB0byBkZWVwZW4gb3VyIGhpc3RvcnkuCisJICovCisJaWYgKGRlcHRoKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkKGl0ZXJhdGVfcmVmX21hcCwgMSwgJnJtKTsKK30KKworc3RhdGljIGludCBmZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlpbnQgcmV0ID0gcXVpY2tmZXRjaChyZWZfbWFwKTsKKwlpZiAocmV0KQorCQlyZXQgPSB0cmFuc3BvcnRfZmV0Y2hfcmVmcyh0cmFuc3BvcnQsIHJlZl9tYXApOworCWlmICghcmV0KQorCQlyZXQgfD0gc3RvcmVfdXBkYXRlZF9yZWZzKHRyYW5zcG9ydC0+dXJsLAorCQkJCXRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lLAorCQkJCXJlZl9tYXApOworCXRyYW5zcG9ydF91bmxvY2tfcGFjayh0cmFuc3BvcnQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfcmVmcyhzdHJ1Y3QgcmVmc3BlYyAqcmVmcywgaW50IHJlZl9jb3VudCwgc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgcmVmICpyZWYsICpzdGFsZV9yZWZzID0gZ2V0X3N0YWxlX2hlYWRzKHJlZnMsIHJlZl9jb3VudCwgcmVmX21hcCk7CisJY29uc3QgY2hhciAqZGFuZ2xpbmdfbXNnID0gZHJ5X3J1bgorCQk/IF8oIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiKQorCQk6IF8oIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIpOworCisJZm9yIChyZWYgPSBzdGFsZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoIWRyeV9ydW4pCisJCQlyZXN1bHQgfD0gZGVsZXRlX3JlZihyZWYtPm5hbWUsIE5VTEwsIDApOworCQlpZiAodmVyYm9zaXR5ID49IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiIHggJS0qcyAlLSpzIC0+ICVzXG4iLAorCQkJCVRSQU5TUE9SVF9TVU1NQVJZKF8oIltkZWxldGVkXSIpKSwKKwkJCQlSRUZDT0xfV0lEVEgsIF8oIihub25lKSIpLCBwcmV0dGlmeV9yZWZuYW1lKHJlZi0+bmFtZSkpOworCQkJd2Fybl9kYW5nbGluZ19zeW1yZWYoc3RkZXJyLCBkYW5nbGluZ19tc2csIHJlZi0+bmFtZSk7CisJCX0KKwl9CisJZnJlZV9yZWZzKHN0YWxlX3JlZnMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2V4aXN0aW5nKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQlpbnQgZmxhZywgdm9pZCAqY2JkYXRhKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCA9IChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKiljYmRhdGE7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQobGlzdCwgcmVmbmFtZSk7CisJaXRlbS0+dXRpbCA9ICh2b2lkICopc2hhMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aWxsX2ZldGNoKHN0cnVjdCByZWYgKipoZWFkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCByZWYgKnJtID0gKmhlYWQ7CisJd2hpbGUgKHJtKSB7CisJCWlmICghaGFzaGNtcChybS0+b2xkX3NoYTEsIHNoYTEpKQorCQkJcmV0dXJuIDE7CisJCXJtID0gcm0tPm5leHQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmaW5kX25vbl9sb2NhbF90YWdzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCXN0cnVjdCByZWYgKipoZWFkLAorCQkJc3RydWN0IHJlZiAqKip0YWlsKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBleGlzdGluZ19yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVtb3RlX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IE5VTEw7CisKKwlmb3JfZWFjaF9yZWYoYWRkX2V4aXN0aW5nLCAmZXhpc3RpbmdfcmVmcyk7CisJZm9yIChyZWYgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCk7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmIChwcmVmaXhjbXAocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGhlIHBlZWxlZCByZWYgYWx3YXlzIGZvbGxvd3MgdGhlIG1hdGNoaW5nIGJhc2UKKwkJICogcmVmLCBzbyBpZiB3ZSBzZWUgYSBwZWVsZWQgcmVmIHRoYXQgd2UgZG9uJ3Qgd2FudAorCQkgKiB0byBmZXRjaCB0aGVuIHdlIGNhbiBtYXJrIHRoZSByZWYgZW50cnkgaW4gdGhlIGxpc3QKKwkJICogYXMgb25lIHRvIGlnbm9yZSBieSBzZXR0aW5nIHV0aWwgdG8gTlVMTC4KKwkJICovCisJCWlmICghc3VmZml4Y21wKHJlZi0+bmFtZSwgIl57fSIpKSB7CisJCQlpZiAoaXRlbSAmJiAhaGFzX3NoYTFfZmlsZShyZWYtPm9sZF9zaGExKSAmJgorCQkJICAgICF3aWxsX2ZldGNoKGhlYWQsIHJlZi0+b2xkX3NoYTEpICYmCisJCQkgICAgIWhhc19zaGExX2ZpbGUoaXRlbS0+dXRpbCkgJiYKKwkJCSAgICAhd2lsbF9mZXRjaChoZWFkLCBpdGVtLT51dGlsKSkKKwkJCQlpdGVtLT51dGlsID0gTlVMTDsKKwkJCWl0ZW0gPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBJZiBpdGVtIGlzIG5vbi1OVUxMIGhlcmUsIHRoZW4gd2UgcHJldmlvdXNseSBzYXcgYQorCQkgKiByZWYgbm90IGZvbGxvd2VkIGJ5IGEgcGVlbGVkIHJlZmVyZW5jZSwgc28gd2UgbmVlZAorCQkgKiB0byBjaGVjayBpZiBpdCBpcyBhIGxpZ2h0d2VpZ2h0IHRhZyB0aGF0IHdlIHdhbnQgdG8KKwkJICogZmV0Y2guCisJCSAqLworCQlpZiAoaXRlbSAmJiAhaGFzX3NoYTFfZmlsZShpdGVtLT51dGlsKSAmJgorCQkgICAgIXdpbGxfZmV0Y2goaGVhZCwgaXRlbS0+dXRpbCkpCisJCQlpdGVtLT51dGlsID0gTlVMTDsKKworCQlpdGVtID0gTlVMTDsKKworCQkvKiBza2lwIGR1cGxpY2F0ZXMgYW5kIHJlZnMgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgKi8KKwkJaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnJlbW90ZV9yZWZzLCByZWYtPm5hbWUpIHx8CisJCSAgICBzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZleGlzdGluZ19yZWZzLCByZWYtPm5hbWUpKQorCQkJY29udGludWU7CisKKwkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmcmVtb3RlX3JlZnMsIHJlZi0+bmFtZSk7CisJCWl0ZW0tPnV0aWwgPSAodm9pZCAqKXJlZi0+b2xkX3NoYTE7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZleGlzdGluZ19yZWZzLCAwKTsKKworCS8qCisJICogV2UgbWF5IGhhdmUgYSBmaW5hbCBsaWdodHdlaWdodCB0YWcgdGhhdCBuZWVkcyB0byBiZQorCSAqIGNoZWNrZWQgdG8gc2VlIGlmIGl0IG5lZWRzIGZldGNoaW5nLgorCSAqLworCWlmIChpdGVtICYmICFoYXNfc2hhMV9maWxlKGl0ZW0tPnV0aWwpICYmCisJICAgICF3aWxsX2ZldGNoKGhlYWQsIGl0ZW0tPnV0aWwpKQorCQlpdGVtLT51dGlsID0gTlVMTDsKKworCS8qCisJICogRm9yIGFsbCB0aGUgdGFncyBpbiB0aGUgcmVtb3RlX3JlZnMgc3RyaW5nIGxpc3QsCisJICogYWRkIHRoZW0gdG8gdGhlIGxpc3Qgb2YgcmVmcyB0byBiZSBmZXRjaGVkCisJICovCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmcmVtb3RlX3JlZnMpIHsKKwkJLyogVW5sZXNzIHdlIGhhdmUgYWxyZWFkeSBkZWNpZGVkIHRvIGlnbm9yZSB0aGlzIGl0ZW0uLi4gKi8KKwkJaWYgKGl0ZW0tPnV0aWwpCisJCXsKKwkJCXN0cnVjdCByZWYgKnJtID0gYWxsb2NfcmVmKGl0ZW0tPnN0cmluZyk7CisJCQlybS0+cGVlcl9yZWYgPSBhbGxvY19yZWYoaXRlbS0+c3RyaW5nKTsKKwkJCWhhc2hjcHkocm0tPm9sZF9zaGExLCBpdGVtLT51dGlsKTsKKwkJCSoqdGFpbCA9IHJtOworCQkJKnRhaWwgPSAmcm0tPm5leHQ7CisJCX0KKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmcmVtb3RlX3JlZnMsIDApOworfQorCitzdGF0aWMgdm9pZCBjaGVja19ub3RfY3VycmVudF9icmFuY2goc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlzdHJ1Y3QgYnJhbmNoICpjdXJyZW50X2JyYW5jaCA9IGJyYW5jaF9nZXQoTlVMTCk7CisKKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5KCkgfHwgIWN1cnJlbnRfYnJhbmNoKQorCQlyZXR1cm47CisKKwlmb3IgKDsgcmVmX21hcDsgcmVmX21hcCA9IHJlZl9tYXAtPm5leHQpCisJCWlmIChyZWZfbWFwLT5wZWVyX3JlZiAmJiAhc3RyY21wKGN1cnJlbnRfYnJhbmNoLT5yZWZuYW1lLAorCQkJCQlyZWZfbWFwLT5wZWVyX3JlZi0+bmFtZSkpCisJCQlkaWUoXygiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyAiCisJCQkgICAgIm9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiKSwgY3VycmVudF9icmFuY2gtPnJlZm5hbWUpOworfQorCitzdGF0aWMgaW50IHRydW5jYXRlX2ZldGNoX2hlYWQodm9pZCkKK3sKKwljaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJGRVRDSF9IRUFEIik7CisJRklMRSAqZnAgPSBmb3BlbihmaWxlbmFtZSwgInciKTsKKworCWlmICghZnApCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3Qgb3BlbiAlczogJXNcbiIpLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlmY2xvc2UoZnApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRvX2ZldGNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJICAgIHN0cnVjdCByZWZzcGVjICpyZWZzLCBpbnQgcmVmX2NvdW50KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBleGlzdGluZ19yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcGVlcl9pdGVtID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpyZWZfbWFwOworCXN0cnVjdCByZWYgKnJtOworCWludCBhdXRvdGFncyA9ICh0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2hfdGFncyA9PSAxKTsKKworCWZvcl9lYWNoX3JlZihhZGRfZXhpc3RpbmcsICZleGlzdGluZ19yZWZzKTsKKworCWlmICh0YWdzID09IFRBR1NfREVGQVVMVCkgeworCQlpZiAodHJhbnNwb3J0LT5yZW1vdGUtPmZldGNoX3RhZ3MgPT0gMikKKwkJCXRhZ3MgPSBUQUdTX1NFVDsKKwkJaWYgKHRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaF90YWdzID09IC0xKQorCQkJdGFncyA9IFRBR1NfVU5TRVQ7CisJfQorCisJaWYgKCF0cmFuc3BvcnQtPmdldF9yZWZzX2xpc3QgfHwgIXRyYW5zcG9ydC0+ZmV0Y2gpCisJCWRpZShfKCJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIiksIHRyYW5zcG9ydC0+dXJsKTsKKworCS8qIGlmIG5vdCBhcHBlbmRpbmcsIHRydW5jYXRlIEZFVENIX0hFQUQgKi8KKwlpZiAoIWFwcGVuZCAmJiAhZHJ5X3J1bikgeworCQlpbnQgZXJyY29kZSA9IHRydW5jYXRlX2ZldGNoX2hlYWQoKTsKKwkJaWYgKGVycmNvZGUpCisJCQlyZXR1cm4gZXJyY29kZTsKKwl9CisKKwlyZWZfbWFwID0gZ2V0X3JlZl9tYXAodHJhbnNwb3J0LCByZWZzLCByZWZfY291bnQsIHRhZ3MsICZhdXRvdGFncyk7CisJaWYgKCF1cGRhdGVfaGVhZF9vaykKKwkJY2hlY2tfbm90X2N1cnJlbnRfYnJhbmNoKHJlZl9tYXApOworCisJZm9yIChybSA9IHJlZl9tYXA7IHJtOyBybSA9IHJtLT5uZXh0KSB7CisJCWlmIChybS0+cGVlcl9yZWYpIHsKKwkJCXBlZXJfaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cCgmZXhpc3RpbmdfcmVmcywKKwkJCQkJCSAgICAgICBybS0+cGVlcl9yZWYtPm5hbWUpOworCQkJaWYgKHBlZXJfaXRlbSkKKwkJCQloYXNoY3B5KHJtLT5wZWVyX3JlZi0+b2xkX3NoYTEsCisJCQkJCXBlZXJfaXRlbS0+dXRpbCk7CisJCX0KKwl9CisKKwlpZiAodGFncyA9PSBUQUdTX0RFRkFVTFQgJiYgYXV0b3RhZ3MpCisJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0ZPTExPV1RBR1MsICIxIik7CisJaWYgKGZldGNoX3JlZnModHJhbnNwb3J0LCByZWZfbWFwKSkgeworCQlmcmVlX3JlZnMocmVmX21hcCk7CisJCXJldHVybiAxOworCX0KKwlpZiAocHJ1bmUpIHsKKwkJLyogSWYgLS10YWdzIHdhcyBzcGVjaWZpZWQsIHByZXRlbmQgdGhlIHVzZXIgZ2F2ZSB1cyB0aGUgY2Fub25pY2FsIHRhZ3MgcmVmc3BlYyAqLworCQlpZiAodGFncyA9PSBUQUdTX1NFVCkgeworCQkJY29uc3QgY2hhciAqdGFnc19zdHIgPSAicmVmcy90YWdzLyo6cmVmcy90YWdzLyoiOworCQkJc3RydWN0IHJlZnNwZWMgKnRhZ3NfcmVmc3BlYywgKnJlZnNwZWM7CisKKwkJCS8qIENvcHkgdGhlIHJlZnNwZWMgYW5kIGFkZCB0aGUgdGFncyB0byBpdCAqLworCQkJcmVmc3BlYyA9IHhjYWxsb2MocmVmX2NvdW50ICsgMSwgc2l6ZW9mKHN0cnVjdCByZWZzcGVjKSk7CisJCQl0YWdzX3JlZnNwZWMgPSBwYXJzZV9mZXRjaF9yZWZzcGVjKDEsICZ0YWdzX3N0cik7CisJCQltZW1jcHkocmVmc3BlYywgcmVmcywgcmVmX2NvdW50ICogc2l6ZW9mKHN0cnVjdCByZWZzcGVjKSk7CisJCQltZW1jcHkoJnJlZnNwZWNbcmVmX2NvdW50XSwgdGFnc19yZWZzcGVjLCBzaXplb2Yoc3RydWN0IHJlZnNwZWMpKTsKKwkJCXJlZl9jb3VudCsrOworCisJCQlwcnVuZV9yZWZzKHJlZnNwZWMsIHJlZl9jb3VudCwgcmVmX21hcCk7CisKKwkJCXJlZl9jb3VudC0tOworCQkJLyogVGhlIHJlc3Qgb2YgdGhlIHN0cmluZ3MgYmVsb25nIHRvIGZldGNoX29uZSAqLworCQkJZnJlZV9yZWZzcGVjKDEsIHRhZ3NfcmVmc3BlYyk7CisJCQlmcmVlKHJlZnNwZWMpOworCQl9IGVsc2UgaWYgKHJlZl9jb3VudCkgeworCQkJcHJ1bmVfcmVmcyhyZWZzLCByZWZfY291bnQsIHJlZl9tYXApOworCQl9IGVsc2UgeworCQkJcHJ1bmVfcmVmcyh0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2gsIHRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yLCByZWZfbWFwKTsKKwkJfQorCX0KKwlmcmVlX3JlZnMocmVmX21hcCk7CisKKwkvKiBpZiBuZWl0aGVyIC0tbm8tdGFncyBub3IgLS10YWdzIHdhcyBzcGVjaWZpZWQsIGRvIGF1dG9tYXRlZCB0YWcKKwkgKiBmb2xsb3dpbmcgLi4uICovCisJaWYgKHRhZ3MgPT0gVEFHU19ERUZBVUxUICYmIGF1dG90YWdzKSB7CisJCXN0cnVjdCByZWYgKip0YWlsID0gJnJlZl9tYXA7CisJCXJlZl9tYXAgPSBOVUxMOworCQlmaW5kX25vbl9sb2NhbF90YWdzKHRyYW5zcG9ydCwgJnJlZl9tYXAsICZ0YWlsKTsKKwkJaWYgKHJlZl9tYXApIHsKKwkJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0ZPTExPV1RBR1MsIE5VTEwpOworCQkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfREVQVEgsICIwIik7CisJCQlmZXRjaF9yZWZzKHRyYW5zcG9ydCwgcmVmX21hcCk7CisJCX0KKwkJZnJlZV9yZWZzKHJlZl9tYXApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfb3B0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCByID0gdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBuYW1lLCB2YWx1ZSk7CisJaWYgKHIgPCAwKQorCQlkaWUoXygiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIpLAorCQkJbmFtZSwgdmFsdWUsIHRyYW5zcG9ydC0+dXJsKTsKKwlpZiAociA+IDApCisJCXdhcm5pbmcoXygiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIiksCisJCQluYW1lLCB0cmFuc3BvcnQtPnVybCk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29uZV9yZW1vdGVfZm9yX2ZldGNoKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSBwcml2OworCWlmICghcmVtb3RlLT5za2lwX2RlZmF1bHRfdXBkYXRlKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcmVtb3RlLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlbW90ZV9ncm91cF9kYXRhIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3JlbW90ZV9ncm91cChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCByZW1vdGVfZ3JvdXBfZGF0YSAqZyA9IHByaXY7CisKKwlpZiAoIXByZWZpeGNtcChrZXksICJyZW1vdGVzLiIpICYmCisJCQkhc3RyY21wKGtleSArIDgsIGctPm5hbWUpKSB7CisJCS8qIHNwbGl0IGxpc3QgYnkgd2hpdGUgc3BhY2UgKi8KKwkJaW50IHNwYWNlID0gc3RyY3Nwbih2YWx1ZSwgIiBcdFxuIik7CisJCXdoaWxlICgqdmFsdWUpIHsKKwkJCWlmIChzcGFjZSA+IDEpIHsKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoZy0+bGlzdCwKKwkJCQkJCSAgIHhzdHJuZHVwKHZhbHVlLCBzcGFjZSkpOworCQkJfQorCQkJdmFsdWUgKz0gc3BhY2UgKyAodmFsdWVbc3BhY2VdICE9ICdcMCcpOworCQkJc3BhY2UgPSBzdHJjc3BuKHZhbHVlLCAiIFx0XG4iKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9yZW1vdGVfb3JfZ3JvdXAoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWludCBwcmV2X25yID0gbGlzdC0+bnI7CisJc3RydWN0IHJlbW90ZV9ncm91cF9kYXRhIGc7CisJZy5uYW1lID0gbmFtZTsgZy5saXN0ID0gbGlzdDsKKworCWdpdF9jb25maWcoZ2V0X3JlbW90ZV9ncm91cCwgJmcpOworCWlmIChsaXN0LT5uciA9PSBwcmV2X25yKSB7CisJCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwkJaWYgKCFyZW1vdGVfaXNfY29uZmlndXJlZChuYW1lKSkKKwkJCXJldHVybiAwOworCQlyZW1vdGUgPSByZW1vdGVfZ2V0KG5hbWUpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcmVtb3RlLT5uYW1lKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9vcHRpb25zX3RvX2FyZ3Yoc3RydWN0IGFyZ3ZfYXJyYXkgKmFyZ3YpCit7CisJaWYgKGRyeV9ydW4pCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1kcnktcnVuIik7CisJaWYgKHBydW5lKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi0tcHJ1bmUiKTsKKwlpZiAodXBkYXRlX2hlYWRfb2spCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS11cGRhdGUtaGVhZC1vayIpOworCWlmIChmb3JjZSkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLWZvcmNlIik7CisJaWYgKGtlZXApCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1rZWVwIik7CisJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT04pCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiKTsKKwllbHNlIGlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQiKTsKKwlpZiAodGFncyA9PSBUQUdTX1NFVCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLXRhZ3MiKTsKKwllbHNlIGlmICh0YWdzID09IFRBR1NfVU5TRVQpCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1uby10YWdzIik7CisJaWYgKHZlcmJvc2l0eSA+PSAyKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi12Iik7CisJaWYgKHZlcmJvc2l0eSA+PSAxKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi12Iik7CisJZWxzZSBpZiAodmVyYm9zaXR5IDwgMCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItcSIpOworCit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfbXVsdGlwbGUoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWludCBpLCByZXN1bHQgPSAwOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlpZiAoIWFwcGVuZCAmJiAhZHJ5X3J1bikgeworCQlpbnQgZXJyY29kZSA9IHRydW5jYXRlX2ZldGNoX2hlYWQoKTsKKwkJaWYgKGVycmNvZGUpCisJCQlyZXR1cm4gZXJyY29kZTsKKwl9CisKKwlhcmd2X2FycmF5X3B1c2hsKCZhcmd2LCAiZmV0Y2giLCAiLS1hcHBlbmQiLCBOVUxMKTsKKwlhZGRfb3B0aW9uc190b19hcmd2KCZhcmd2KTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBsaXN0LT5pdGVtc1tpXS5zdHJpbmc7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgbmFtZSk7CisJCWlmICh2ZXJib3NpdHkgPj0gMCkKKwkJCXByaW50ZihfKCJGZXRjaGluZyAlc1xuIiksIG5hbWUpOworCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndi5hcmd2LCBSVU5fR0lUX0NNRCkpIHsKKwkJCWVycm9yKF8oIkNvdWxkIG5vdCBmZXRjaCAlcyIpLCBuYW1lKTsKKwkJCXJlc3VsdCA9IDE7CisJCX0KKwkJYXJndl9hcnJheV9wb3AoJmFyZ3YpOworCX0KKworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfb25lKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpOworCXN0YXRpYyBjb25zdCBjaGFyICoqcmVmcyA9IE5VTEw7CisJc3RydWN0IHJlZnNwZWMgKnJlZnNwZWM7CisJaW50IHJlZl9uciA9IDA7CisJaW50IGV4aXRfY29kZTsKKworCWlmICghcmVtb3RlKQorCQlkaWUoXygiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisJCSAgICAicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIpKTsKKworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCBOVUxMKTsKKwl0cmFuc3BvcnRfc2V0X3ZlcmJvc2l0eSh0cmFuc3BvcnQsIHZlcmJvc2l0eSwgcHJvZ3Jlc3MpOworCWlmICh1cGxvYWRfcGFjaykKKwkJc2V0X29wdGlvbihUUkFOU19PUFRfVVBMT0FEUEFDSywgdXBsb2FkX3BhY2spOworCWlmIChrZWVwKQorCQlzZXRfb3B0aW9uKFRSQU5TX09QVF9LRUVQLCAieWVzIik7CisJaWYgKGRlcHRoKQorCQlzZXRfb3B0aW9uKFRSQU5TX09QVF9ERVBUSCwgZGVwdGgpOworCisJaWYgKGFyZ2MgPiAwKSB7CisJCWludCBqID0gMDsKKwkJcmVmcyA9IHhjYWxsb2MoYXJnYyArIDEsIHNpemVvZihjb25zdCBjaGFyICopKTsKKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQkJaWYgKCFzdHJjbXAoYXJndltpXSwgInRhZyIpKSB7CisJCQkJY2hhciAqcmVmOworCQkJCWkrKzsKKwkJCQlpZiAoaSA+PSBhcmdjKQorCQkJCQlkaWUoXygiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIpKTsKKwkJCQlyZWYgPSB4bWFsbG9jKHN0cmxlbihhcmd2W2ldKSAqIDIgKyAyMik7CisJCQkJc3RyY3B5KHJlZiwgInJlZnMvdGFncy8iKTsKKwkJCQlzdHJjYXQocmVmLCBhcmd2W2ldKTsKKwkJCQlzdHJjYXQocmVmLCAiOnJlZnMvdGFncy8iKTsKKwkJCQlzdHJjYXQocmVmLCBhcmd2W2ldKTsKKwkJCQlyZWZzW2orK10gPSByZWY7CisJCQl9IGVsc2UKKwkJCQlyZWZzW2orK10gPSBhcmd2W2ldOworCQl9CisJCXJlZnNbal0gPSBOVUxMOworCQlyZWZfbnIgPSBqOworCX0KKworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHVubG9ja19wYWNrX29uX3NpZ25hbCk7CisJYXRleGl0KHVubG9ja19wYWNrKTsKKwlyZWZzcGVjID0gcGFyc2VfZmV0Y2hfcmVmc3BlYyhyZWZfbnIsIHJlZnMpOworCWV4aXRfY29kZSA9IGRvX2ZldGNoKHRyYW5zcG9ydCwgcmVmc3BlYywgcmVmX25yKTsKKwlmcmVlX3JlZnNwZWMocmVmX25yLCByZWZzcGVjKTsKKwl0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCXRyYW5zcG9ydCA9IE5VTEw7CisJcmV0dXJuIGV4aXRfY29kZTsKK30KKworaW50IGNtZF9mZXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCWludCByZXN1bHQgPSAwOworCisJcGFja2V0X3RyYWNlX2lkZW50aXR5KCJmZXRjaCIpOworCisJLyogUmVjb3JkIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZSByZWZsb2cgKi8KKwlzdHJidWZfYWRkc3RyKCZkZWZhdWx0X3JsYSwgImZldGNoIik7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKwkJc3RyYnVmX2FkZGYoJmRlZmF1bHRfcmxhLCAiICVzIiwgYXJndltpXSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQkgICAgIGJ1aWx0aW5fZmV0Y2hfb3B0aW9ucywgYnVpbHRpbl9mZXRjaF91c2FnZSwgMCk7CisKKwlpZiAocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkYpIHsKKwkJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlc19kZWZhdWx0KSB7CisJCQlpbnQgYXJnID0gcGFyc2VfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzX2FyZygiLS1yZWN1cnNlLXN1Ym1vZHVsZXMtZGVmYXVsdCIsIHJlY3Vyc2Vfc3VibW9kdWxlc19kZWZhdWx0KTsKKwkJCXNldF9jb25maWdfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzKGFyZyk7CisJCX0KKwkJZ2l0bW9kdWxlc19jb25maWcoKTsKKwkJZ2l0X2NvbmZpZyhzdWJtb2R1bGVfY29uZmlnLCBOVUxMKTsKKwl9CisKKwlpZiAoYWxsKSB7CisJCWlmIChhcmdjID09IDEpCisJCQlkaWUoXygiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiKSk7CisJCWVsc2UgaWYgKGFyZ2MgPiAxKQorCQkJZGllKF8oImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIpKTsKKwkJKHZvaWQpIGZvcl9lYWNoX3JlbW90ZShnZXRfb25lX3JlbW90ZV9mb3JfZmV0Y2gsICZsaXN0KTsKKwkJcmVzdWx0ID0gZmV0Y2hfbXVsdGlwbGUoJmxpc3QpOworCX0gZWxzZSBpZiAoYXJnYyA9PSAwKSB7CisJCS8qIE5vIGFyZ3VtZW50cyAtLSB1c2UgZGVmYXVsdCByZW1vdGUgKi8KKwkJcmVtb3RlID0gcmVtb3RlX2dldChOVUxMKTsKKwkJcmVzdWx0ID0gZmV0Y2hfb25lKHJlbW90ZSwgYXJnYywgYXJndik7CisJfSBlbHNlIGlmIChtdWx0aXBsZSkgeworCQkvKiBBbGwgYXJndW1lbnRzIGFyZSBhc3N1bWVkIHRvIGJlIHJlbW90ZXMgb3IgZ3JvdXBzICovCisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCQlpZiAoIWFkZF9yZW1vdGVfb3JfZ3JvdXAoYXJndltpXSwgJmxpc3QpKQorCQkJCWRpZShfKCJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIiksIGFyZ3ZbaV0pOworCQlyZXN1bHQgPSBmZXRjaF9tdWx0aXBsZSgmbGlzdCk7CisJfSBlbHNlIHsKKwkJLyogU2luZ2xlIHJlbW90ZSBvciBncm91cCAqLworCQkodm9pZCkgYWRkX3JlbW90ZV9vcl9ncm91cChhcmd2WzBdLCAmbGlzdCk7CisJCWlmIChsaXN0Lm5yID4gMSkgeworCQkJLyogTW9yZSB0aGFuIG9uZSByZW1vdGUgKi8KKwkJCWlmIChhcmdjID4gMSkKKwkJCQlkaWUoXygiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIikpOworCQkJcmVzdWx0ID0gZmV0Y2hfbXVsdGlwbGUoJmxpc3QpOworCQl9IGVsc2UgeworCQkJLyogWmVybyBvciBvbmUgcmVtb3RlcyAqLworCQkJcmVtb3RlID0gcmVtb3RlX2dldChhcmd2WzBdKTsKKwkJCXJlc3VsdCA9IGZldGNoX29uZShyZW1vdGUsIGFyZ2MtMSwgYXJndisxKTsKKwkJfQorCX0KKworCWlmICghcmVzdWx0ICYmIChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09GRikpIHsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgb3B0aW9ucyA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCQlhZGRfb3B0aW9uc190b19hcmd2KCZvcHRpb25zKTsKKwkJcmVzdWx0ID0gZmV0Y2hfcG9wdWxhdGVkX3N1Ym1vZHVsZXMoJm9wdGlvbnMsCisJCQkJCQkgICAgc3VibW9kdWxlX3ByZWZpeCwKKwkJCQkJCSAgICByZWN1cnNlX3N1Ym1vZHVsZXMsCisJCQkJCQkgICAgdmVyYm9zaXR5IDwgMCk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJm9wdGlvbnMpOworCX0KKworCS8qIEFsbCBuYW1lcyB3ZXJlIHN0cmR1cCgpZWQgb3Igc3RybmR1cCgpZWQgKi8KKwlsaXN0LnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMgYi9idWlsdGluL2ZtdC1tZXJnZS1tc2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmUyN2IyCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMKQEAgLTAsMCArMSw3MDAgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgImZtdC1tZXJnZS1tc2cuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZm10X21lcmdlX21zZ191c2FnZVtdID0geworCU5fKCJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl18LS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgdXNlX2JyYW5jaF9kZXNjOworCitpbnQgZm10X21lcmdlX21zZ19jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAoa2V5LCAibWVyZ2UubG9nIikgfHwgIXN0cmNtcChrZXksICJtZXJnZS5zdW1tYXJ5IikpIHsKKwkJaW50IGlzX2Jvb2w7CisJCW1lcmdlX2xvZ19jb25maWcgPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZpc19ib29sKTsKKwkJaWYgKCFpc19ib29sICYmIG1lcmdlX2xvZ19jb25maWcgPCAwKQorCQkJcmV0dXJuIGVycm9yKCIlczogbmVnYXRpdmUgbGVuZ3RoICVzIiwga2V5LCB2YWx1ZSk7CisJCWlmIChpc19ib29sICYmIG1lcmdlX2xvZ19jb25maWcpCisJCQltZXJnZV9sb2dfY29uZmlnID0gREVGQVVMVF9NRVJHRV9MT0dfTEVOOworCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJtZXJnZS5icmFuY2hkZXNjIikpIHsKKwkJdXNlX2JyYW5jaF9kZXNjID0gZ2l0X2NvbmZpZ19ib29sKGtleSwgdmFsdWUpOworCX0gZWxzZSB7CisJCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoa2V5LCB2YWx1ZSwgY2IpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogbWVyZ2UgZGF0YSBwZXIgcmVwb3NpdG9yeSB3aGVyZSB0aGUgbWVyZ2VkIHRpcHMgY2FtZSBmcm9tICovCitzdHJ1Y3Qgc3JjX2RhdGEgeworCXN0cnVjdCBzdHJpbmdfbGlzdCBicmFuY2gsIHRhZywgcl9icmFuY2gsIGdlbmVyaWM7CisJaW50IGhlYWRfc3RhdHVzOworfTsKKworc3RydWN0IG9yaWdpbl9kYXRhIHsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXVuc2lnbmVkIGlzX2xvY2FsX2JyYW5jaDoxOworfTsKKworc3RhdGljIHZvaWQgaW5pdF9zcmNfZGF0YShzdHJ1Y3Qgc3JjX2RhdGEgKmRhdGEpCit7CisJZGF0YS0+YnJhbmNoLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlkYXRhLT50YWcuc3RyZHVwX3N0cmluZ3MgPSAxOworCWRhdGEtPnJfYnJhbmNoLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlkYXRhLT5nZW5lcmljLnN0cmR1cF9zdHJpbmdzID0gMTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBzcmNzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9yaWdpbnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworc3RydWN0IG1lcmdlX3BhcmVudHMgeworCWludCBhbGxvYywgbnI7CisJc3RydWN0IG1lcmdlX3BhcmVudCB7CisJCXVuc2lnbmVkIGNoYXIgZ2l2ZW5bMjBdOworCQl1bnNpZ25lZCBjaGFyIGNvbW1pdFsyMF07CisJCXVuc2lnbmVkIGNoYXIgdXNlZDsKKwl9ICppdGVtOworfTsKKworLyoKKyAqIEkga25vdywgSSBrbm93LCB0aGlzIGlzIGluZWZmaWNpZW50LCBidXQgeW91IHdvbid0IGJlIHB1bGxpbmcgYW5kIG1lcmdpbmcKKyAqIGh1bmRyZWRzIG9mIGhlYWRzIGF0IGEgdGltZSBhbnl3YXkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWVyZ2VfcGFyZW50ICpmaW5kX21lcmdlX3BhcmVudChzdHJ1Y3QgbWVyZ2VfcGFyZW50cyAqdGFibGUsCisJCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmdpdmVuLAorCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpjb21taXQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5ucjsgaSsrKSB7CisJCWlmIChnaXZlbiAmJiBoYXNoY21wKHRhYmxlLT5pdGVtW2ldLmdpdmVuLCBnaXZlbikpCisJCQljb250aW51ZTsKKwkJaWYgKGNvbW1pdCAmJiBoYXNoY21wKHRhYmxlLT5pdGVtW2ldLmNvbW1pdCwgY29tbWl0KSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gJnRhYmxlLT5pdGVtW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYWRkX21lcmdlX3BhcmVudChzdHJ1Y3QgbWVyZ2VfcGFyZW50cyAqdGFibGUsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmdpdmVuLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpjb21taXQpCit7CisJaWYgKHRhYmxlLT5uciAmJiBmaW5kX21lcmdlX3BhcmVudCh0YWJsZSwgZ2l2ZW4sIGNvbW1pdCkpCisJCXJldHVybjsKKwlBTExPQ19HUk9XKHRhYmxlLT5pdGVtLCB0YWJsZS0+bnIgKyAxLCB0YWJsZS0+YWxsb2MpOworCWhhc2hjcHkodGFibGUtPml0ZW1bdGFibGUtPm5yXS5naXZlbiwgZ2l2ZW4pOworCWhhc2hjcHkodGFibGUtPml0ZW1bdGFibGUtPm5yXS5jb21taXQsIGNvbW1pdCk7CisJdGFibGUtPml0ZW1bdGFibGUtPm5yXS51c2VkID0gMDsKKwl0YWJsZS0+bnIrKzsKK30KKworc3RhdGljIGludCBoYW5kbGVfbGluZShjaGFyICpsaW5lLCBzdHJ1Y3QgbWVyZ2VfcGFyZW50cyAqbWVyZ2VfcGFyZW50cykKK3sKKwlpbnQgaSwgbGVuID0gc3RybGVuKGxpbmUpOworCXN0cnVjdCBvcmlnaW5fZGF0YSAqb3JpZ2luX2RhdGE7CisJY2hhciAqc3JjLCAqb3JpZ2luOworCXN0cnVjdCBzcmNfZGF0YSAqc3JjX2RhdGE7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJaW50IHB1bGxpbmdfaGVhZCA9IDA7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWlmIChsZW4gPCA0MyB8fCBsaW5lWzQwXSAhPSAnXHQnKQorCQlyZXR1cm4gMTsKKworCWlmICghcHJlZml4Y21wKGxpbmUgKyA0MSwgIm5vdC1mb3ItbWVyZ2UiKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGluZVs0MV0gIT0gJ1x0JykKKwkJcmV0dXJuIDI7CisKKwlpID0gZ2V0X3NoYTFfaGV4KGxpbmUsIHNoYTEpOworCWlmIChpKQorCQlyZXR1cm4gMzsKKworCWlmICghZmluZF9tZXJnZV9wYXJlbnQobWVyZ2VfcGFyZW50cywgc2hhMSwgTlVMTCkpCisJCXJldHVybiAwOyAvKiBzdWJzdW1lZCBieSBvdGhlciBwYXJlbnRzICovCisKKwlvcmlnaW5fZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvcmlnaW5fZGF0YSkpOworCWhhc2hjcHkob3JpZ2luX2RhdGEtPnNoYTEsIHNoYTEpOworCisJaWYgKGxpbmVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbGluZVtsZW4gLSAxXSA9IDA7CisJbGluZSArPSA0MjsKKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgbGluZSBwb2ludHMgYXQgdGhlIGJlZ2lubmluZyBvZiBjb21tZW50IGUuZy4KKwkgKiAiYnJhbmNoICdmcm90eicgb2YgZ2l0Oi8vdGhhdC9yZXBvc2l0b3J5LmdpdCIuCisJICogRmluZCB0aGUgcmVwb3NpdG9yeSBuYW1lIGFuZCBwb2ludCBpdCB3aXRoIHNyYy4KKwkgKi8KKwlzcmMgPSBzdHJzdHIobGluZSwgIiBvZiAiKTsKKwlpZiAoc3JjKSB7CisJCSpzcmMgPSAwOworCQlzcmMgKz0gNDsKKwkJcHVsbGluZ19oZWFkID0gMDsKKwl9IGVsc2UgeworCQlzcmMgPSBsaW5lOworCQlwdWxsaW5nX2hlYWQgPSAxOworCX0KKworCWl0ZW0gPSB1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoJnNyY3MsIHNyYyk7CisJaWYgKCFpdGVtKSB7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY3MsIHNyYyk7CisJCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3JjX2RhdGEpKTsKKwkJaW5pdF9zcmNfZGF0YShpdGVtLT51dGlsKTsKKwl9CisJc3JjX2RhdGEgPSBpdGVtLT51dGlsOworCisJaWYgKHB1bGxpbmdfaGVhZCkgeworCQlvcmlnaW4gPSBzcmM7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAxOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChsaW5lLCAiYnJhbmNoICIpKSB7CisJCW9yaWdpbl9kYXRhLT5pc19sb2NhbF9icmFuY2ggPSAxOworCQlvcmlnaW4gPSBsaW5lICsgNzsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfZGF0YS0+YnJhbmNoLCBvcmlnaW4pOworCQlzcmNfZGF0YS0+aGVhZF9zdGF0dXMgfD0gMjsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAobGluZSwgInRhZyAiKSkgeworCQlvcmlnaW4gPSBsaW5lOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY19kYXRhLT50YWcsIG9yaWdpbiArIDQpOworCQlzcmNfZGF0YS0+aGVhZF9zdGF0dXMgfD0gMjsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAobGluZSwgInJlbW90ZS10cmFja2luZyBicmFuY2ggIikpIHsKKwkJb3JpZ2luID0gbGluZSArIHN0cmxlbigicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAiKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfZGF0YS0+cl9icmFuY2gsIG9yaWdpbik7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAyOworCX0gZWxzZSB7CisJCW9yaWdpbiA9IHNyYzsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfZGF0YS0+Z2VuZXJpYywgbGluZSk7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAyOworCX0KKworCWlmICghc3RyY21wKCIuIiwgc3JjKSB8fCAhc3RyY21wKHNyYywgb3JpZ2luKSkgeworCQlpbnQgbGVuID0gc3RybGVuKG9yaWdpbik7CisJCWlmIChvcmlnaW5bMF0gPT0gJ1wnJyAmJiBvcmlnaW5bbGVuIC0gMV0gPT0gJ1wnJykKKwkJCW9yaWdpbiA9IHhtZW1kdXB6KG9yaWdpbiArIDEsIGxlbiAtIDIpOworCX0gZWxzZSB7CisJCWNoYXIgKm5ld19vcmlnaW4gPSB4bWFsbG9jKHN0cmxlbihvcmlnaW4pICsgc3RybGVuKHNyYykgKyA1KTsKKwkJc3ByaW50ZihuZXdfb3JpZ2luLCAiJXMgb2YgJXMiLCBvcmlnaW4sIHNyYyk7CisJCW9yaWdpbiA9IG5ld19vcmlnaW47CisJfQorCWlmIChzdHJjbXAoIi4iLCBzcmMpKQorCQlvcmlnaW5fZGF0YS0+aXNfbG9jYWxfYnJhbmNoID0gMDsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJm9yaWdpbnMsIG9yaWdpbiktPnV0aWwgPSBvcmlnaW5fZGF0YTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfam9pbmVkKGNvbnN0IGNoYXIgKnNpbmd1bGFyLCBjb25zdCBjaGFyICpwbHVyYWwsCisJCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCWlmIChsaXN0LT5uciA9PSAwKQorCQlyZXR1cm47CisJaWYgKGxpc3QtPm5yID09IDEpIHsKKwkJc3RyYnVmX2FkZGYob3V0LCAiJXMlcyIsIHNpbmd1bGFyLCBsaXN0LT5pdGVtc1swXS5zdHJpbmcpOworCX0gZWxzZSB7CisJCWludCBpOworCQlzdHJidWZfYWRkc3RyKG91dCwgcGx1cmFsKTsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yIC0gMTsgaSsrKQorCQkJc3RyYnVmX2FkZGYob3V0LCAiJXMlcyIsIGkgPiAwID8gIiwgIiA6ICIiLAorCQkJCSAgICBsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQlzdHJidWZfYWRkZihvdXQsICIgYW5kICVzIiwgbGlzdC0+aXRlbXNbbGlzdC0+bnIgLSAxXS5zdHJpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQgYWRkX2JyYW5jaF9kZXNjKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGRlc2MgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcmVhZF9icmFuY2hfZGVzYygmZGVzYywgbmFtZSkpIHsKKwkJY29uc3QgY2hhciAqYnAgPSBkZXNjLmJ1ZjsKKwkJd2hpbGUgKCpicCkgeworCQkJY29uc3QgY2hhciAqZXAgPSBzdHJjaHJudWwoYnAsICdcbicpOworCQkJaWYgKCplcCkKKwkJCQllcCsrOworCQkJc3RyYnVmX2FkZGYob3V0LCAiICA6ICUuKnMiLCAoaW50KShlcCAtIGJwKSwgYnApOworCQkJYnAgPSBlcDsKKwkJfQorCQlpZiAob3V0LT5idWZbb3V0LT5sZW4gLSAxXSAhPSAnXG4nKQorCQkJc3RyYnVmX2FkZGNoKG91dCwgJ1xuJyk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZkZXNjKTsKK30KKworI2RlZmluZSB1dGlsX2FzX2ludGVncmFsKGVsZW0pICgoaW50cHRyX3QpKChlbGVtKS0+dXRpbCkpCisKK3N0YXRpYyB2b2lkIHJlY29yZF9wZXJzb24oaW50IHdoaWNoLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBlb3BsZSwKKwkJCSAgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWNoYXIgKm5hbWVfYnVmLCAqbmFtZSwgKm5hbWVfZW5kOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICplbGVtOworCWNvbnN0IGNoYXIgKmZpZWxkID0gKHdoaWNoID09ICdhJykgPyAiXG5hdXRob3IgIiA6ICJcbmNvbW1pdHRlciAiOworCisJbmFtZSA9IHN0cnN0cihjb21taXQtPmJ1ZmZlciwgZmllbGQpOworCWlmICghbmFtZSkKKwkJcmV0dXJuOworCW5hbWUgKz0gc3RybGVuKGZpZWxkKTsKKwluYW1lX2VuZCA9IHN0cmNocm51bChuYW1lLCAnPCcpOworCWlmICgqbmFtZV9lbmQpCisJCW5hbWVfZW5kLS07CisJd2hpbGUgKGlzc3BhY2UoKm5hbWVfZW5kKSAmJiBuYW1lIDw9IG5hbWVfZW5kKQorCQluYW1lX2VuZC0tOworCWlmIChuYW1lX2VuZCA8IG5hbWUpCisJCXJldHVybjsKKwluYW1lX2J1ZiA9IHhtZW1kdXB6KG5hbWUsIG5hbWVfZW5kIC0gbmFtZSArIDEpOworCisJZWxlbSA9IHN0cmluZ19saXN0X2xvb2t1cChwZW9wbGUsIG5hbWVfYnVmKTsKKwlpZiAoIWVsZW0pIHsKKwkJZWxlbSA9IHN0cmluZ19saXN0X2luc2VydChwZW9wbGUsIG5hbWVfYnVmKTsKKwkJZWxlbS0+dXRpbCA9ICh2b2lkICopMDsKKwl9CisJZWxlbS0+dXRpbCA9ICh2b2lkKikodXRpbF9hc19pbnRlZ3JhbChlbGVtKSArIDEpOworCWZyZWUobmFtZV9idWYpOworfQorCitzdGF0aWMgaW50IGNtcF9zdHJpbmdfbGlzdF91dGlsX2FzX2ludGVncmFsKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqYSA9IGFfLCAqYiA9IGJfOworCXJldHVybiB1dGlsX2FzX2ludGVncmFsKGIpIC0gdXRpbF9hc19pbnRlZ3JhbChhKTsKK30KKworc3RhdGljIHZvaWQgYWRkX3Blb3BsZV9jb3VudChzdHJ1Y3Qgc3RyYnVmICpvdXQsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGVvcGxlKQoreworCWlmIChwZW9wbGUtPm5yID09IDEpCisJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzIiwgcGVvcGxlLT5pdGVtc1swXS5zdHJpbmcpOworCWVsc2UgaWYgKHBlb3BsZS0+bnIgPT0gMikKKwkJc3RyYnVmX2FkZGYob3V0LCAiJXMgKCVkKSBhbmQgJXMgKCVkKSIsCisJCQkgICAgcGVvcGxlLT5pdGVtc1swXS5zdHJpbmcsCisJCQkgICAgKGludCl1dGlsX2FzX2ludGVncmFsKCZwZW9wbGUtPml0ZW1zWzBdKSwKKwkJCSAgICBwZW9wbGUtPml0ZW1zWzFdLnN0cmluZywKKwkJCSAgICAoaW50KXV0aWxfYXNfaW50ZWdyYWwoJnBlb3BsZS0+aXRlbXNbMV0pKTsKKwllbHNlIGlmIChwZW9wbGUtPm5yKQorCQlzdHJidWZfYWRkZihvdXQsICIlcyAoJWQpIGFuZCBvdGhlcnMiLAorCQkJICAgIHBlb3BsZS0+aXRlbXNbMF0uc3RyaW5nLAorCQkJICAgIChpbnQpdXRpbF9hc19pbnRlZ3JhbCgmcGVvcGxlLT5pdGVtc1swXSkpOworfQorCitzdGF0aWMgdm9pZCBjcmVkaXRfcGVvcGxlKHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCSAgc3RydWN0IHN0cmluZ19saXN0ICp0aGVtLAorCQkJICBpbnQga2luZCkKK3sKKwljb25zdCBjaGFyICpsYWJlbDsKKwljb25zdCBjaGFyICptZTsKKworCWlmIChraW5kID09ICdhJykgeworCQlsYWJlbCA9ICJcbiMgQnkgIjsKKwkJbWUgPSBnaXRfYXV0aG9yX2luZm8oSURFTlRfTk9fREFURSk7CisJfSBlbHNlIHsKKwkJbGFiZWwgPSAiXG4jIFZpYSAiOworCQltZSA9IGdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9OT19EQVRFKTsKKwl9CisKKwlpZiAoIXRoZW0tPm5yIHx8CisJICAgICh0aGVtLT5uciA9PSAxICYmCisJICAgICBtZSAmJgorCSAgICAgKG1lID0gc2tpcF9wcmVmaXgobWUsIHRoZW0tPml0ZW1zLT5zdHJpbmcpKSAhPSBOVUxMICYmCisJICAgICBza2lwX3ByZWZpeChtZSwgIiA8IikpKQorCQlyZXR1cm47CisJc3RyYnVmX2FkZHN0cihvdXQsIGxhYmVsKTsKKwlhZGRfcGVvcGxlX2NvdW50KG91dCwgdGhlbSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wZW9wbGVfaW5mbyhzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkgICAgc3RydWN0IHN0cmluZ19saXN0ICphdXRob3JzLAorCQkJICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqY29tbWl0dGVycykKK3sKKwlpZiAoYXV0aG9ycy0+bnIpCisJCXFzb3J0KGF1dGhvcnMtPml0ZW1zLAorCQkgICAgICBhdXRob3JzLT5uciwgc2l6ZW9mKGF1dGhvcnMtPml0ZW1zWzBdKSwKKwkJICAgICAgY21wX3N0cmluZ19saXN0X3V0aWxfYXNfaW50ZWdyYWwpOworCWlmIChjb21taXR0ZXJzLT5ucikKKwkJcXNvcnQoY29tbWl0dGVycy0+aXRlbXMsCisJCSAgICAgIGNvbW1pdHRlcnMtPm5yLCBzaXplb2YoY29tbWl0dGVycy0+aXRlbXNbMF0pLAorCQkgICAgICBjbXBfc3RyaW5nX2xpc3RfdXRpbF9hc19pbnRlZ3JhbCk7CisKKwljcmVkaXRfcGVvcGxlKG91dCwgYXV0aG9ycywgJ2EnKTsKKwljcmVkaXRfcGVvcGxlKG91dCwgY29tbWl0dGVycywgJ2MnKTsKK30KKworc3RhdGljIHZvaWQgc2hvcnRsb2coY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICBzdHJ1Y3Qgb3JpZ2luX2RhdGEgKm9yaWdpbl9kYXRhLAorCQkgICAgIHN0cnVjdCBjb21taXQgKmhlYWQsCisJCSAgICAgc3RydWN0IHJldl9pbmZvICpyZXYsIGludCBsaW1pdCwKKwkJICAgICBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJaW50IGksIGNvdW50ID0gMDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IG9iamVjdCAqYnJhbmNoOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzdWJqZWN0cyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBhdXRob3JzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IGNvbW1pdHRlcnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlpbnQgZmxhZ3MgPSBVTklOVEVSRVNUSU5HIHwgVFJFRVNBTUUgfCBTRUVOIHwgU0hPV04gfCBBRERFRDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9IG9yaWdpbl9kYXRhLT5zaGExOworCisJYnJhbmNoID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChzaGExKSwgc2hhMV90b19oZXgoc2hhMSksIDQwKTsKKwlpZiAoIWJyYW5jaCB8fCBicmFuY2gtPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuOworCisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsIHJldiwgTlVMTCk7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldiwgYnJhbmNoLCBuYW1lKTsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2LCAmaGVhZC0+b2JqZWN0LCAiXkhFQUQiKTsKKwloZWFkLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldikpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihyZXYpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisKKwkJaWYgKGNvbW1pdC0+cGFyZW50cyAmJiBjb21taXQtPnBhcmVudHMtPm5leHQpIHsKKwkJCS8qIGRvIG5vdCBsaXN0IGEgbWVyZ2UgYnV0IGNvdW50IGNvbW1pdHRlciAqLworCQkJcmVjb3JkX3BlcnNvbignYycsICZjb21taXR0ZXJzLCBjb21taXQpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFjb3VudCkKKwkJCS8qIHRoZSAndGlwJyBjb21taXR0ZXIgKi8KKwkJCXJlY29yZF9wZXJzb24oJ2MnLCAmY29tbWl0dGVycywgY29tbWl0KTsKKwkJcmVjb3JkX3BlcnNvbignYScsICZhdXRob3JzLCBjb21taXQpOworCQljb3VudCsrOworCQlpZiAoc3ViamVjdHMubnIgPiBsaW1pdCkKKwkJCWNvbnRpbnVlOworCisJCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlcyIsICZzYiwgJmN0eCk7CisJCXN0cmJ1Zl9sdHJpbSgmc2IpOworCisJCWlmICghc2IubGVuKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdWJqZWN0cywKKwkJCQkJICAgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCQllbHNlCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN1YmplY3RzLCBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCkpOworCX0KKworCWFkZF9wZW9wbGVfaW5mbyhvdXQsICZhdXRob3JzLCAmY29tbWl0dGVycyk7CisJaWYgKGNvdW50ID4gbGltaXQpCisJCXN0cmJ1Zl9hZGRmKG91dCwgIlxuKiAlczogKCVkIGNvbW1pdHMpXG4iLCBuYW1lLCBjb3VudCk7CisJZWxzZQorCQlzdHJidWZfYWRkZihvdXQsICJcbiogJXM6XG4iLCBuYW1lKTsKKworCWlmIChvcmlnaW5fZGF0YS0+aXNfbG9jYWxfYnJhbmNoICYmIHVzZV9icmFuY2hfZGVzYykKKwkJYWRkX2JyYW5jaF9kZXNjKG91dCwgbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3ViamVjdHMubnI7IGkrKykKKwkJaWYgKGkgPj0gbGltaXQpCisJCQlzdHJidWZfYWRkZihvdXQsICIgIC4uLlxuIik7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKG91dCwgIiAgJXNcbiIsIHN1YmplY3RzLml0ZW1zW2ldLnN0cmluZyk7CisKKwljbGVhcl9jb21taXRfbWFya3MoKHN0cnVjdCBjb21taXQgKilicmFuY2gsIGZsYWdzKTsKKwljbGVhcl9jb21taXRfbWFya3MoaGVhZCwgZmxhZ3MpOworCWZyZWVfY29tbWl0X2xpc3QocmV2LT5jb21taXRzKTsKKwlyZXYtPmNvbW1pdHMgPSBOVUxMOworCXJldi0+cGVuZGluZy5uciA9IDA7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmYXV0aG9ycywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmNvbW1pdHRlcnMsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZzdWJqZWN0cywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGZtdF9tZXJnZV9tc2dfdGl0bGUoc3RydWN0IHN0cmJ1ZiAqb3V0LAorCWNvbnN0IGNoYXIgKmN1cnJlbnRfYnJhbmNoKSB7CisJaW50IGkgPSAwOworCWNoYXIgKnNlcCA9ICIiOworCisJc3RyYnVmX2FkZHN0cihvdXQsICJNZXJnZSAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3Jjcy5ucjsgaSsrKSB7CisJCXN0cnVjdCBzcmNfZGF0YSAqc3JjX2RhdGEgPSBzcmNzLml0ZW1zW2ldLnV0aWw7CisJCWNvbnN0IGNoYXIgKnN1YnNlcCA9ICIiOworCisJCXN0cmJ1Zl9hZGRzdHIob3V0LCBzZXApOworCQlzZXAgPSAiOyAiOworCisJCWlmIChzcmNfZGF0YS0+aGVhZF9zdGF0dXMgPT0gMSkgeworCQkJc3RyYnVmX2FkZHN0cihvdXQsIHNyY3MuaXRlbXNbaV0uc3RyaW5nKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzcmNfZGF0YS0+aGVhZF9zdGF0dXMgPT0gMykgeworCQkJc3Vic2VwID0gIiwgIjsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiSEVBRCIpOworCQl9CisJCWlmIChzcmNfZGF0YS0+YnJhbmNoLm5yKSB7CisJCQlzdHJidWZfYWRkc3RyKG91dCwgc3Vic2VwKTsKKwkJCXN1YnNlcCA9ICIsICI7CisJCQlwcmludF9qb2luZWQoImJyYW5jaCAiLCAiYnJhbmNoZXMgIiwgJnNyY19kYXRhLT5icmFuY2gsCisJCQkJCW91dCk7CisJCX0KKwkJaWYgKHNyY19kYXRhLT5yX2JyYW5jaC5ucikgeworCQkJc3RyYnVmX2FkZHN0cihvdXQsIHN1YnNlcCk7CisJCQlzdWJzZXAgPSAiLCAiOworCQkJcHJpbnRfam9pbmVkKCJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICIsICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgIiwKKwkJCQkJJnNyY19kYXRhLT5yX2JyYW5jaCwgb3V0KTsKKwkJfQorCQlpZiAoc3JjX2RhdGEtPnRhZy5ucikgeworCQkJc3RyYnVmX2FkZHN0cihvdXQsIHN1YnNlcCk7CisJCQlzdWJzZXAgPSAiLCAiOworCQkJcHJpbnRfam9pbmVkKCJ0YWcgIiwgInRhZ3MgIiwgJnNyY19kYXRhLT50YWcsIG91dCk7CisJCX0KKwkJaWYgKHNyY19kYXRhLT5nZW5lcmljLm5yKSB7CisJCQlzdHJidWZfYWRkc3RyKG91dCwgc3Vic2VwKTsKKwkJCXByaW50X2pvaW5lZCgiY29tbWl0ICIsICJjb21taXRzICIsICZzcmNfZGF0YS0+Z2VuZXJpYywKKwkJCQkJb3V0KTsKKwkJfQorCQlpZiAoc3RyY21wKCIuIiwgc3Jjcy5pdGVtc1tpXS5zdHJpbmcpKQorCQkJc3RyYnVmX2FkZGYob3V0LCAiIG9mICVzIiwgc3Jjcy5pdGVtc1tpXS5zdHJpbmcpOworCX0KKworCWlmICghc3RyY21wKCJtYXN0ZXIiLCBjdXJyZW50X2JyYW5jaCkpCisJCXN0cmJ1Zl9hZGRjaChvdXQsICdcbicpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYob3V0LCAiIGludG8gJXNcbiIsIGN1cnJlbnRfYnJhbmNoKTsKK30KKworc3RhdGljIHZvaWQgZm10X3RhZ19zaWduYXR1cmUoc3RydWN0IHN0cmJ1ZiAqdGFnYnVmLAorCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqc2lnLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJY29uc3QgY2hhciAqdGFnX2JvZHkgPSBzdHJzdHIoYnVmLCAiXG5cbiIpOworCWlmICh0YWdfYm9keSkgeworCQl0YWdfYm9keSArPSAyOworCQlzdHJidWZfYWRkKHRhZ2J1ZiwgdGFnX2JvZHksIGJ1ZiArIGxlbiAtIHRhZ19ib2R5KTsKKwl9CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUodGFnYnVmKTsKKwlpZiAoc2lnLT5sZW4pIHsKKwkJc3RyYnVmX2FkZGNoKHRhZ2J1ZiwgJ1xuJyk7CisJCXN0cmJ1Zl9hZGRfbGluZXModGFnYnVmLCAiIyAiLCBzaWctPmJ1Ziwgc2lnLT5sZW4pOworCX0KK30KKworc3RhdGljIHZvaWQgZm10X21lcmdlX21zZ19zaWdzKHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpbnQgaSwgdGFnX251bWJlciA9IDAsIGZpcnN0X3RhZyA9IDA7CisJc3RydWN0IHN0cmJ1ZiB0YWdidWYgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoaSA9IDA7IGkgPCBvcmlnaW5zLm5yOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciAqc2hhMSA9IG9yaWdpbnMuaXRlbXNbaV0udXRpbDsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemUsIGxlbjsKKwkJY2hhciAqYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwkJc3RydWN0IHN0cmJ1ZiBzaWcgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoIWJ1ZiB8fCB0eXBlICE9IE9CSl9UQUcpCisJCQlnb3RvIG5leHQ7CisJCWxlbiA9IHBhcnNlX3NpZ25hdHVyZShidWYsIHNpemUpOworCisJCWlmIChzaXplID09IGxlbikKKwkJCTsgLyogbWVyZWx5IGFubm90YXRlZCAqLworCQllbHNlIGlmICh2ZXJpZnlfc2lnbmVkX2J1ZmZlcihidWYsIGxlbiwgYnVmICsgbGVuLCBzaXplIC0gbGVuLCAmc2lnKSkgeworCQkJaWYgKCFzaWcubGVuKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJnNpZywgImdwZyB2ZXJpZmljYXRpb24gZmFpbGVkLlxuIik7CisJCX0KKworCQlpZiAoIXRhZ19udW1iZXIrKykgeworCQkJZm10X3RhZ19zaWduYXR1cmUoJnRhZ2J1ZiwgJnNpZywgYnVmLCBsZW4pOworCQkJZmlyc3RfdGFnID0gaTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0YWdfbnVtYmVyID09IDIpIHsKKwkJCQlzdHJ1Y3Qgc3RyYnVmIHRhZ2xpbmUgPSBTVFJCVUZfSU5JVDsKKwkJCQlzdHJidWZfYWRkZigmdGFnbGluZSwgIlxuIyAlc1xuIiwKKwkJCQkJICAgIG9yaWdpbnMuaXRlbXNbZmlyc3RfdGFnXS5zdHJpbmcpOworCQkJCXN0cmJ1Zl9pbnNlcnQoJnRhZ2J1ZiwgMCwgdGFnbGluZS5idWYsCisJCQkJCSAgICAgIHRhZ2xpbmUubGVuKTsKKwkJCQlzdHJidWZfcmVsZWFzZSgmdGFnbGluZSk7CisJCQl9CisJCQlzdHJidWZfYWRkZigmdGFnYnVmLCAiXG4jICVzXG4iLAorCQkJCSAgICBvcmlnaW5zLml0ZW1zW2ldLnN0cmluZyk7CisJCQlmbXRfdGFnX3NpZ25hdHVyZSgmdGFnYnVmLCAmc2lnLCBidWYsIGxlbik7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJnNpZyk7CisJbmV4dDoKKwkJZnJlZShidWYpOworCX0KKwlpZiAodGFnYnVmLmxlbikgeworCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwkJc3RyYnVmX2FkZGJ1ZihvdXQsICZ0YWdidWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmdGFnYnVmKTsKK30KKworc3RhdGljIHZvaWQgZmluZF9tZXJnZV9wYXJlbnRzKHN0cnVjdCBtZXJnZV9wYXJlbnRzICpyZXN1bHQsCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqaW4sIHVuc2lnbmVkIGNoYXIgKmhlYWQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLCAqbmV4dDsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdDsKKwlpbnQgcG9zID0gMCwgaSwgajsKKworCXBhcmVudHMgPSBOVUxMOworCXdoaWxlIChwb3MgPCBpbi0+bGVuKSB7CisJCWludCBsZW47CisJCWNoYXIgKnAgPSBpbi0+YnVmICsgcG9zOworCQljaGFyICpuZXdsaW5lID0gc3RyY2hyKHAsICdcbicpOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQ7CisJCXN0cnVjdCBvYmplY3QgKm9iajsKKworCQlsZW4gPSBuZXdsaW5lID8gbmV3bGluZSAtIHAgOiBzdHJsZW4ocCk7CisJCXBvcyArPSBsZW4gKyAhIW5ld2xpbmU7CisKKwkJaWYgKGxlbiA8IDQzIHx8CisJCSAgICBnZXRfc2hhMV9oZXgocCwgc2hhMSkgfHwKKwkJICAgIHBbNDBdICE9ICdcdCcgfHwKKwkJICAgIHBbNDFdICE9ICdcdCcpCisJCQljb250aW51ZTsgLyogc2tpcCBub3QtZm9yLW1lcmdlICovCisJCS8qCisJCSAqIERvIG5vdCB1c2UgZ2V0X21lcmdlX3BhcmVudCgpIGhlcmU7IHdlIGRvIG5vdCBoYXZlCisJCSAqICJuYW1lIiBoZXJlIGFuZCB3ZSBkbyBub3Qgd2FudCB0byBjb250YW1pbmF0ZSBpdHMKKwkJICogdXRpbCBmaWVsZCB5ZXQuCisJCSAqLworCQlvYmogPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJCXBhcmVudCA9IChzdHJ1Y3QgY29tbWl0ICopcGVlbF90b190eXBlKE5VTEwsIDAsIG9iaiwgT0JKX0NPTU1JVCk7CisJCWlmICghcGFyZW50KQorCQkJY29udGludWU7CisJCWNvbW1pdF9saXN0X2luc2VydChwYXJlbnQsICZwYXJlbnRzKTsKKwkJYWRkX21lcmdlX3BhcmVudChyZXN1bHQsIG9iai0+c2hhMSwgcGFyZW50LT5vYmplY3Quc2hhMSk7CisJfQorCWhlYWRfY29tbWl0ID0gbG9va3VwX2NvbW1pdChoZWFkKTsKKwlpZiAoaGVhZF9jb21taXQpCisJCWNvbW1pdF9saXN0X2luc2VydChoZWFkX2NvbW1pdCwgJnBhcmVudHMpOworCXBhcmVudHMgPSByZWR1Y2VfaGVhZHMocGFyZW50cyk7CisKKwl3aGlsZSAocGFyZW50cykgeworCQlmb3IgKGkgPSAwOyBpIDwgcmVzdWx0LT5ucjsgaSsrKQorCQkJaWYgKCFoYXNoY21wKHJlc3VsdC0+aXRlbVtpXS5jb21taXQsCisJCQkJICAgICBwYXJlbnRzLT5pdGVtLT5vYmplY3Quc2hhMSkpCisJCQkJcmVzdWx0LT5pdGVtW2ldLnVzZWQgPSAxOworCQluZXh0ID0gcGFyZW50cy0+bmV4dDsKKwkJZnJlZShwYXJlbnRzKTsKKwkJcGFyZW50cyA9IG5leHQ7CisJfQorCisJZm9yIChpID0gaiA9IDA7IGkgPCByZXN1bHQtPm5yOyBpKyspIHsKKwkJaWYgKHJlc3VsdC0+aXRlbVtpXS51c2VkKSB7CisJCQlpZiAoaSAhPSBqKQorCQkJCXJlc3VsdC0+aXRlbVtqXSA9IHJlc3VsdC0+aXRlbVtpXTsKKwkJCWorKzsKKwkJfQorCX0KKwlyZXN1bHQtPm5yID0gajsKK30KKworaW50IGZtdF9tZXJnZV9tc2coc3RydWN0IHN0cmJ1ZiAqaW4sIHN0cnVjdCBzdHJidWYgKm91dCwKKwkJICBzdHJ1Y3QgZm10X21lcmdlX21zZ19vcHRzICpvcHRzKQoreworCWludCBpID0gMCwgcG9zID0gMDsKKwl1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CisJY29uc3QgY2hhciAqY3VycmVudF9icmFuY2g7CisJdm9pZCAqY3VycmVudF9icmFuY2hfdG9fZnJlZTsKKwlzdHJ1Y3QgbWVyZ2VfcGFyZW50cyBtZXJnZV9wYXJlbnRzOworCisJbWVtc2V0KCZtZXJnZV9wYXJlbnRzLCAwLCBzaXplb2YobWVyZ2VfcGFyZW50cykpOworCisJLyogZ2V0IGN1cnJlbnQgYnJhbmNoICovCisJY3VycmVudF9icmFuY2ggPSBjdXJyZW50X2JyYW5jaF90b19mcmVlID0KKwkJcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCBoZWFkX3NoYTEsIDEsIE5VTEwpOworCWlmICghY3VycmVudF9icmFuY2gpCisJCWRpZSgiTm8gY3VycmVudCBicmFuY2giKTsKKwlpZiAoIXByZWZpeGNtcChjdXJyZW50X2JyYW5jaCwgInJlZnMvaGVhZHMvIikpCisJCWN1cnJlbnRfYnJhbmNoICs9IDExOworCisJZmluZF9tZXJnZV9wYXJlbnRzKCZtZXJnZV9wYXJlbnRzLCBpbiwgaGVhZF9zaGExKTsKKworCS8qIGdldCBhIGxpbmUgKi8KKwl3aGlsZSAocG9zIDwgaW4tPmxlbikgeworCQlpbnQgbGVuOworCQljaGFyICpuZXdsaW5lLCAqcCA9IGluLT5idWYgKyBwb3M7CisKKwkJbmV3bGluZSA9IHN0cmNocihwLCAnXG4nKTsKKwkJbGVuID0gbmV3bGluZSA/IG5ld2xpbmUgLSBwIDogc3RybGVuKHApOworCQlwb3MgKz0gbGVuICsgISFuZXdsaW5lOworCQlpKys7CisJCXBbbGVuXSA9IDA7CisJCWlmIChoYW5kbGVfbGluZShwLCAmbWVyZ2VfcGFyZW50cykpCisJCQlkaWUgKCJFcnJvciBpbiBsaW5lICVkOiAlLipzIiwgaSwgbGVuLCBwKTsKKwl9CisKKwlpZiAob3B0cy0+YWRkX3RpdGxlICYmIHNyY3MubnIpCisJCWZtdF9tZXJnZV9tc2dfdGl0bGUob3V0LCBjdXJyZW50X2JyYW5jaCk7CisKKwlpZiAob3JpZ2lucy5ucikKKwkJZm10X21lcmdlX21zZ19zaWdzKG91dCk7CisKKwlpZiAob3B0cy0+c2hvcnRsb2dfbGVuKSB7CisJCXN0cnVjdCBjb21taXQgKmhlYWQ7CisJCXN0cnVjdCByZXZfaW5mbyByZXY7CisKKwkJaGVhZCA9IGxvb2t1cF9jb21taXRfb3JfZGllKGhlYWRfc2hhMSwgIkhFQUQiKTsKKwkJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJCXJldi5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfT05FTElORTsKKwkJcmV2Lmlnbm9yZV9tZXJnZXMgPSAxOworCQlyZXYubGltaXRlZCA9IDE7CisKKwkJc3RyYnVmX2NvbXBsZXRlX2xpbmUob3V0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgb3JpZ2lucy5ucjsgaSsrKQorCQkJc2hvcnRsb2cob3JpZ2lucy5pdGVtc1tpXS5zdHJpbmcsCisJCQkJIG9yaWdpbnMuaXRlbXNbaV0udXRpbCwKKwkJCQkgaGVhZCwgJnJldiwgb3B0cy0+c2hvcnRsb2dfbGVuLCBvdXQpOworCX0KKworCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKG91dCk7CisJZnJlZShjdXJyZW50X2JyYW5jaF90b19mcmVlKTsKKwlmcmVlKG1lcmdlX3BhcmVudHMuaXRlbSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfZm10X21lcmdlX21zZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICppbnBhdGggPSBOVUxMOworCWNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCWludCBzaG9ydGxvZ19sZW4gPSAtMTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fSU5URUdFUiwgMCwgImxvZyIsICZzaG9ydGxvZ19sZW4sIE5fKCJuIiksCisJCSAgTl8oInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIERFRkFVTFRfTUVSR0VfTE9HX0xFTiB9LAorCQl7IE9QVElPTl9JTlRFR0VSLCAwLCAic3VtbWFyeSIsICZzaG9ydGxvZ19sZW4sIE5fKCJuIiksCisJCSAgTl8oImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX0hJRERFTiwgTlVMTCwKKwkJICBERUZBVUxUX01FUkdFX0xPR19MRU4gfSwKKwkJT1BUX1NUUklORygnbScsICJtZXNzYWdlIiwgJm1lc3NhZ2UsIE5fKCJ0ZXh0IiksCisJCQlOXygidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIikpLAorCQlPUFRfRklMRU5BTUUoJ0YnLCAiZmlsZSIsICZpbnBhdGgsIE5fKCJmaWxlIHRvIHJlYWQgZnJvbSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCUZJTEUgKmluID0gc3RkaW47CisJc3RydWN0IHN0cmJ1ZiBpbnB1dCA9IFNUUkJVRl9JTklULCBvdXRwdXQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCXN0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgb3B0czsKKworCWdpdF9jb25maWcoZm10X21lcmdlX21zZ19jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZm10X21lcmdlX21zZ191c2FnZSwKKwkJCSAgICAgMCk7CisJaWYgKGFyZ2MgPiAwKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZm10X21lcmdlX21zZ191c2FnZSwgb3B0aW9ucyk7CisJaWYgKHNob3J0bG9nX2xlbiA8IDApCisJCXNob3J0bG9nX2xlbiA9IChtZXJnZV9sb2dfY29uZmlnID4gMCkgPyBtZXJnZV9sb2dfY29uZmlnIDogMDsKKworCWlmIChpbnBhdGggJiYgc3RyY21wKGlucGF0aCwgIi0iKSkgeworCQlpbiA9IGZvcGVuKGlucGF0aCwgInIiKTsKKwkJaWYgKCFpbikKKwkJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gJyVzJyIsIGlucGF0aCk7CisJfQorCisJaWYgKHN0cmJ1Zl9yZWFkKCZpbnB1dCwgZmlsZW5vKGluKSwgMCkgPCAwKQorCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUiKTsKKworCWlmIChtZXNzYWdlKQorCQlzdHJidWZfYWRkc3RyKCZvdXRwdXQsIG1lc3NhZ2UpOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuYWRkX3RpdGxlID0gIW1lc3NhZ2U7CisJb3B0cy5zaG9ydGxvZ19sZW4gPSBzaG9ydGxvZ19sZW47CisKKwlyZXQgPSBmbXRfbWVyZ2VfbXNnKCZpbnB1dCwgJm91dHB1dCwgJm9wdHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJd3JpdGVfaW5fZnVsbChTVERPVVRfRklMRU5PLCBvdXRwdXQuYnVmLCBvdXRwdXQubGVuKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZm9yLWVhY2gtcmVmLmMgYi9idWlsdGluL2Zvci1lYWNoLXJlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMDU5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Zvci1lYWNoLXJlZi5jCkBAIC0wLDAgKzEsMTA0MiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorCisvKiBRdW90aW5nIHN0eWxlcyAqLworI2RlZmluZSBRVU9URV9OT05FIDAKKyNkZWZpbmUgUVVPVEVfU0hFTEwgMQorI2RlZmluZSBRVU9URV9QRVJMIDIKKyNkZWZpbmUgUVVPVEVfUFlUSE9OIDQKKyNkZWZpbmUgUVVPVEVfVENMIDgKKwordHlwZWRlZiBlbnVtIHsgRklFTERfU1RSLCBGSUVMRF9VTE9ORywgRklFTERfVElNRSB9IGNtcF90eXBlOworCitzdHJ1Y3QgYXRvbV92YWx1ZSB7CisJY29uc3QgY2hhciAqczsKKwl1bnNpZ25lZCBsb25nIHVsOyAvKiB1c2VkIGZvciBzb3J0aW5nIHdoZW4gbm90IEZJRUxEX1NUUiAqLworfTsKKworc3RydWN0IHJlZl9zb3J0IHsKKwlzdHJ1Y3QgcmVmX3NvcnQgKm5leHQ7CisJaW50IGF0b207IC8qIGluZGV4IGludG8gdXNlZF9hdG9tIGFycmF5ICovCisJdW5zaWduZWQgcmV2ZXJzZSA6IDE7Cit9OworCitzdHJ1Y3QgcmVmaW5mbyB7CisJY2hhciAqcmVmbmFtZTsKKwl1bnNpZ25lZCBjaGFyIG9iamVjdG5hbWVbMjBdOworCWludCBmbGFnOworCWNvbnN0IGNoYXIgKnN5bXJlZjsKKwlzdHJ1Y3QgYXRvbV92YWx1ZSAqdmFsdWU7Cit9OworCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWNtcF90eXBlIGNtcF90eXBlOworfSB2YWxpZF9hdG9tW10gPSB7CisJeyAicmVmbmFtZSIgfSwKKwl7ICJvYmplY3R0eXBlIiB9LAorCXsgIm9iamVjdHNpemUiLCBGSUVMRF9VTE9ORyB9LAorCXsgIm9iamVjdG5hbWUiIH0sCisJeyAidHJlZSIgfSwKKwl7ICJwYXJlbnQiIH0sCisJeyAibnVtcGFyZW50IiwgRklFTERfVUxPTkcgfSwKKwl7ICJvYmplY3QiIH0sCisJeyAidHlwZSIgfSwKKwl7ICJ0YWciIH0sCisJeyAiYXV0aG9yIiB9LAorCXsgImF1dGhvcm5hbWUiIH0sCisJeyAiYXV0aG9yZW1haWwiIH0sCisJeyAiYXV0aG9yZGF0ZSIsIEZJRUxEX1RJTUUgfSwKKwl7ICJjb21taXR0ZXIiIH0sCisJeyAiY29tbWl0dGVybmFtZSIgfSwKKwl7ICJjb21taXR0ZXJlbWFpbCIgfSwKKwl7ICJjb21taXR0ZXJkYXRlIiwgRklFTERfVElNRSB9LAorCXsgInRhZ2dlciIgfSwKKwl7ICJ0YWdnZXJuYW1lIiB9LAorCXsgInRhZ2dlcmVtYWlsIiB9LAorCXsgInRhZ2dlcmRhdGUiLCBGSUVMRF9USU1FIH0sCisJeyAiY3JlYXRvciIgfSwKKwl7ICJjcmVhdG9yZGF0ZSIsIEZJRUxEX1RJTUUgfSwKKwl7ICJzdWJqZWN0IiB9LAorCXsgImJvZHkiIH0sCisJeyAiY29udGVudHMiIH0sCisJeyAiY29udGVudHM6c3ViamVjdCIgfSwKKwl7ICJjb250ZW50czpib2R5IiB9LAorCXsgImNvbnRlbnRzOnNpZ25hdHVyZSIgfSwKKwl7ICJ1cHN0cmVhbSIgfSwKKwl7ICJzeW1yZWYiIH0sCisJeyAiZmxhZyIgfSwKK307CisKKy8qCisgKiBBbiBhdG9tIGlzIGEgdmFsaWQgZmllbGQgYXRvbSBsaXN0ZWQgYWJvdmUsIHBvc3NpYmx5IHByZWZpeGVkIHdpdGgKKyAqIGEgIioiIHRvIGRlbm90ZSBkZXJlZl90YWcoKS4KKyAqCisgKiBXZSBwYXJzZSBnaXZlbiBmb3JtYXQgc3RyaW5nIGFuZCBzb3J0IHNwZWNpZmllcnMsIGFuZCBtYWtlIGEgbGlzdAorICogb2YgcHJvcGVydGllcyB0aGF0IHdlIG5lZWQgdG8gZXh0cmFjdCBvdXQgb2Ygb2JqZWN0cy4gIHJlZmluZm8KKyAqIHN0cnVjdHVyZSB3aWxsIGhvbGQgYW4gYXJyYXkgb2YgdmFsdWVzIGV4dHJhY3RlZCB0aGF0IGNhbiBiZQorICogaW5kZXhlZCB3aXRoIHRoZSAiYXRvbSBudW1iZXIiLCB3aGljaCBpcyBhbiBpbmRleCBpbnRvIHRoaXMKKyAqIGFycmF5LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqKnVzZWRfYXRvbTsKK3N0YXRpYyBjbXBfdHlwZSAqdXNlZF9hdG9tX3R5cGU7CitzdGF0aWMgaW50IHVzZWRfYXRvbV9jbnQsIHNvcnRfYXRvbV9saW1pdCwgbmVlZF90YWdnZWQsIG5lZWRfc3ltcmVmOworCisvKgorICogVXNlZCB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIGFuZCBzb3J0IHNwZWNpZmllcnMKKyAqLworc3RhdGljIGludCBwYXJzZV9hdG9tKGNvbnN0IGNoYXIgKmF0b20sIGNvbnN0IGNoYXIgKmVwKQoreworCWNvbnN0IGNoYXIgKnNwOworCWludCBpLCBhdDsKKworCXNwID0gYXRvbTsKKwlpZiAoKnNwID09ICcqJyAmJiBzcCA8IGVwKQorCQlzcCsrOyAvKiBkZXJlZiAqLworCWlmIChlcCA8PSBzcCkKKwkJZGllKCJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIsIChpbnQpKGVwLWF0b20pLCBhdG9tKTsKKworCS8qIERvIHdlIGhhdmUgdGhlIGF0b20gYWxyZWFkeSB1c2VkIGVsc2V3aGVyZT8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKSB7CisJCWludCBsZW4gPSBzdHJsZW4odXNlZF9hdG9tW2ldKTsKKwkJaWYgKGxlbiA9PSBlcCAtIGF0b20gJiYgIW1lbWNtcCh1c2VkX2F0b21baV0sIGF0b20sIGxlbikpCisJCQlyZXR1cm4gaTsKKwl9CisKKwkvKiBJcyB0aGUgYXRvbSBhIHZhbGlkIG9uZT8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2YWxpZF9hdG9tKTsgaSsrKSB7CisJCWludCBsZW4gPSBzdHJsZW4odmFsaWRfYXRvbVtpXS5uYW1lKTsKKwkJLyoKKwkJICogSWYgdGhlIGF0b20gbmFtZSBoYXMgYSBjb2xvbiwgc3RyaXAgaXQgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIKKwkJICogaXQgb2ZmIC0gaXQgc3BlY2lmaWVzIHRoZSBmb3JtYXQgZm9yIHRoaXMgZW50cnksIGFuZAorCQkgKiBzaG91bGRuJ3QgYmUgdXNlZCBmb3IgY2hlY2tpbmcgYWdhaW5zdCB0aGUgdmFsaWRfYXRvbQorCQkgKiB0YWJsZS4KKwkJICovCisJCWNvbnN0IGNoYXIgKmZvcm1hdHAgPSBzdHJjaHIoc3AsICc6Jyk7CisJCWlmICghZm9ybWF0cCB8fCBlcCA8IGZvcm1hdHApCisJCQlmb3JtYXRwID0gZXA7CisJCWlmIChsZW4gPT0gZm9ybWF0cCAtIHNwICYmICFtZW1jbXAodmFsaWRfYXRvbVtpXS5uYW1lLCBzcCwgbGVuKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChBUlJBWV9TSVpFKHZhbGlkX2F0b20pIDw9IGkpCisJCWRpZSgidW5rbm93biBmaWVsZCBuYW1lOiAlLipzIiwgKGludCkoZXAtYXRvbSksIGF0b20pOworCisJLyogQWRkIGl0IGluLCBpbmNsdWRpbmcgdGhlIGRlcmVmIHByZWZpeCAqLworCWF0ID0gdXNlZF9hdG9tX2NudDsKKwl1c2VkX2F0b21fY250Kys7CisJdXNlZF9hdG9tID0geHJlYWxsb2ModXNlZF9hdG9tLAorCQkJICAgICAoc2l6ZW9mICp1c2VkX2F0b20pICogdXNlZF9hdG9tX2NudCk7CisJdXNlZF9hdG9tX3R5cGUgPSB4cmVhbGxvYyh1c2VkX2F0b21fdHlwZSwKKwkJCQkgIChzaXplb2YoKnVzZWRfYXRvbV90eXBlKSAqIHVzZWRfYXRvbV9jbnQpKTsKKwl1c2VkX2F0b21bYXRdID0geG1lbWR1cHooYXRvbSwgZXAgLSBhdG9tKTsKKwl1c2VkX2F0b21fdHlwZVthdF0gPSB2YWxpZF9hdG9tW2ldLmNtcF90eXBlOworCWlmICgqYXRvbSA9PSAnKicpCisJCW5lZWRfdGFnZ2VkID0gMTsKKwlpZiAoIXN0cmNtcCh1c2VkX2F0b21bYXRdLCAic3ltcmVmIikpCisJCW5lZWRfc3ltcmVmID0gMTsKKwlyZXR1cm4gYXQ7Cit9CisKKy8qCisgKiBJbiBhIGZvcm1hdCBzdHJpbmcsIGZpbmQgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiAlKGF0b20pLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZmluZF9uZXh0KGNvbnN0IGNoYXIgKmNwKQoreworCXdoaWxlICgqY3ApIHsKKwkJaWYgKCpjcCA9PSAnJScpIHsKKwkJCS8qCisJCQkgKiAlKCBpcyB0aGUgc3RhcnQgb2YgYW4gYXRvbTsKKwkJCSAqICUlIGlzIGEgcXVvdGVkIHBlci1jZW50LgorCQkJICovCisJCQlpZiAoY3BbMV0gPT0gJygnKQorCQkJCXJldHVybiBjcDsKKwkJCWVsc2UgaWYgKGNwWzFdID09ICclJykKKwkJCQljcCsrOyAvKiBza2lwIG92ZXIgdHdvICUgKi8KKwkJCS8qIG90aGVyd2lzZSB0aGlzIGlzIGEgc2luZ2xldG9uLCBsaXRlcmFsICUgKi8KKwkJfQorCQljcCsrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGUgZm9ybWF0IHN0cmluZyBpcyB3ZWxsIGZvcm1lZCwgYW5kIHBhcnNlIG91dAorICogdGhlIHVzZWQgYXRvbXMuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2Zvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJY29uc3QgY2hhciAqY3AsICpzcDsKKwlmb3IgKGNwID0gZm9ybWF0OyAqY3AgJiYgKHNwID0gZmluZF9uZXh0KGNwKSk7ICkgeworCQljb25zdCBjaGFyICplcCA9IHN0cmNocihzcCwgJyknKTsKKwkJaWYgKCFlcCkKKwkJCXJldHVybiBlcnJvcigibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiLCBzcCk7CisJCS8qIHNwIHBvaW50cyBhdCAiJSgiIGFuZCBlcCBwb2ludHMgYXQgdGhlIGNsb3NpbmcgIikiICovCisJCXBhcnNlX2F0b20oc3AgKyAyLCBlcCk7CisJCWNwID0gZXAgKyAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdpdmVuIGFuIG9iamVjdCBuYW1lLCByZWFkIHRoZSBvYmplY3QgZGF0YSBhbmQgc2l6ZSwgYW5kIHJldHVybiBhCisgKiAic3RydWN0IG9iamVjdCIuICBJZiB0aGUgb2JqZWN0IGRhdGEgd2UgYXJlIHJldHVybmluZyBpcyBhbHNvIGJvcnJvd2VkCisgKiBieSB0aGUgInN0cnVjdCBvYmplY3QiIHJlcHJlc2VudGF0aW9uLCBzZXQgKmVhdGVuIGFzIHdlbGwtLS1pdCBpcyBhCisgKiBzaWduYWwgZnJvbSBwYXJzZV9vYmplY3RfYnVmZmVyIHRvIHVzIG5vdCB0byBmcmVlIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkICpnZXRfb2JqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBvYmplY3QgKipvYmosIHVuc2lnbmVkIGxvbmcgKnN6LCBpbnQgKmVhdGVuKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgc3opOworCisJaWYgKGJ1ZikKKwkJKm9iaiA9IHBhcnNlX29iamVjdF9idWZmZXIoc2hhMSwgdHlwZSwgKnN6LCBidWYsIGVhdGVuKTsKKwllbHNlCisJCSpvYmogPSBOVUxMOworCXJldHVybiBidWY7Cit9CisKKy8qIFNlZSBncmFiX3ZhbHVlcyAqLworc3RhdGljIHZvaWQgZ3JhYl9jb21tb25fdmFsdWVzKHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwsIGludCBkZXJlZiwgc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc3opCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1c2VkX2F0b21baV07CisJCXN0cnVjdCBhdG9tX3ZhbHVlICp2ID0gJnZhbFtpXTsKKwkJaWYgKCEhZGVyZWYgIT0gKCpuYW1lID09ICcqJykpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcmVmKQorCQkJbmFtZSsrOworCQlpZiAoIXN0cmNtcChuYW1lLCAib2JqZWN0dHlwZSIpKQorCQkJdi0+cyA9IHR5cGVuYW1lKG9iai0+dHlwZSk7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIm9iamVjdHNpemUiKSkgeworCQkJY2hhciAqcyA9IHhtYWxsb2MoNDApOworCQkJc3ByaW50ZihzLCAiJWx1Iiwgc3opOworCQkJdi0+dWwgPSBzejsKKwkJCXYtPnMgPSBzOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIm9iamVjdG5hbWUiKSkgeworCQkJY2hhciAqcyA9IHhtYWxsb2MoNDEpOworCQkJc3RyY3B5KHMsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQkJdi0+cyA9IHM7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAib2JqZWN0bmFtZTpzaG9ydCIpKSB7CisJCQl2LT5zID0geHN0cmR1cChmaW5kX3VuaXF1ZV9hYmJyZXYob2JqLT5zaGExLAorCQkJCQkJCSAgREVGQVVMVF9BQkJSRVYpKTsKKwkJfQorCX0KK30KKworLyogU2VlIGdyYWJfdmFsdWVzICovCitzdGF0aWMgdm9pZCBncmFiX3RhZ192YWx1ZXMoc3RydWN0IGF0b21fdmFsdWUgKnZhbCwgaW50IGRlcmVmLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzeikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdGFnICp0YWcgPSAoc3RydWN0IHRhZyAqKSBvYmo7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1c2VkX2F0b21baV07CisJCXN0cnVjdCBhdG9tX3ZhbHVlICp2ID0gJnZhbFtpXTsKKwkJaWYgKCEhZGVyZWYgIT0gKCpuYW1lID09ICcqJykpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcmVmKQorCQkJbmFtZSsrOworCQlpZiAoIXN0cmNtcChuYW1lLCAidGFnIikpCisJCQl2LT5zID0gdGFnLT50YWc7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgInR5cGUiKSAmJiB0YWctPnRhZ2dlZCkKKwkJCXYtPnMgPSB0eXBlbmFtZSh0YWctPnRhZ2dlZC0+dHlwZSk7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIm9iamVjdCIpICYmIHRhZy0+dGFnZ2VkKSB7CisJCQljaGFyICpzID0geG1hbGxvYyg0MSk7CisJCQlzdHJjcHkocywgc2hhMV90b19oZXgodGFnLT50YWdnZWQtPnNoYTEpKTsKKwkJCXYtPnMgPSBzOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG51bV9wYXJlbnRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwLCBwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCSAgICAgcGFyZW50czsKKwkgICAgIHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KQorCQlpKys7CisJcmV0dXJuIGk7Cit9CisKKy8qIFNlZSBncmFiX3ZhbHVlcyAqLworc3RhdGljIHZvaWQgZ3JhYl9jb21taXRfdmFsdWVzKHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwsIGludCBkZXJlZiwgc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc3opCit7CisJaW50IGk7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKikgb2JqOworCisJZm9yIChpID0gMDsgaSA8IHVzZWRfYXRvbV9jbnQ7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gdXNlZF9hdG9tW2ldOworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZ2YWxbaV07CisJCWlmICghIWRlcmVmICE9ICgqbmFtZSA9PSAnKicpKQorCQkJY29udGludWU7CisJCWlmIChkZXJlZikKKwkJCW5hbWUrKzsKKwkJaWYgKCFzdHJjbXAobmFtZSwgInRyZWUiKSkgeworCQkJY2hhciAqcyA9IHhtYWxsb2MoNDEpOworCQkJc3RyY3B5KHMsIHNoYTFfdG9faGV4KGNvbW1pdC0+dHJlZS0+b2JqZWN0LnNoYTEpKTsKKwkJCXYtPnMgPSBzOworCQl9CisJCWlmICghc3RyY21wKG5hbWUsICJudW1wYXJlbnQiKSkgeworCQkJY2hhciAqcyA9IHhtYWxsb2MoNDApOworCQkJdi0+dWwgPSBudW1fcGFyZW50cyhjb21taXQpOworCQkJc3ByaW50ZihzLCAiJWx1Iiwgdi0+dWwpOworCQkJdi0+cyA9IHM7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAicGFyZW50IikpIHsKKwkJCWludCBudW0gPSBudW1fcGFyZW50cyhjb21taXQpOworCQkJaW50IGk7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJCQljaGFyICpzID0geG1hbGxvYyg0MSAqIG51bSArIDEpOworCQkJdi0+cyA9IHM7CisJCQlmb3IgKGkgPSAwLCBwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQkJICAgICBwYXJlbnRzOworCQkJICAgICBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCwgaSA9IGkgKyA0MSkgeworCQkJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHBhcmVudHMtPml0ZW07CisJCQkJc3RyY3B5KHMraSwgc2hhMV90b19oZXgocGFyZW50LT5vYmplY3Quc2hhMSkpOworCQkJCWlmIChwYXJlbnRzLT5uZXh0KQorCQkJCQlzW2krNDBdID0gJyAnOworCQkJfQorCQkJaWYgKCFpKQorCQkJCSpzID0gJ1wwJzsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfd2hvbGluZShjb25zdCBjaGFyICp3aG8sIGludCB3aG9sZW4sIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzeikKK3sKKwljb25zdCBjaGFyICplb2w7CisJd2hpbGUgKCpidWYpIHsKKwkJaWYgKCFzdHJuY21wKGJ1Ziwgd2hvLCB3aG9sZW4pICYmCisJCSAgICBidWZbd2hvbGVuXSA9PSAnICcpCisJCQlyZXR1cm4gYnVmICsgd2hvbGVuICsgMTsKKwkJZW9sID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJCWlmICghZW9sKQorCQkJcmV0dXJuICIiOworCQllb2wrKzsKKwkJaWYgKCplb2wgPT0gJ1xuJykKKwkJCXJldHVybiAiIjsgLyogZW5kIG9mIGhlYWRlciAqLworCQlidWYgPSBlb2w7CisJfQorCXJldHVybiAiIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvcHlfbGluZShjb25zdCBjaGFyICpidWYpCit7CisJY29uc3QgY2hhciAqZW9sID0gc3RyY2hybnVsKGJ1ZiwgJ1xuJyk7CisJcmV0dXJuIHhtZW1kdXB6KGJ1ZiwgZW9sIC0gYnVmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvcHlfbmFtZShjb25zdCBjaGFyICpidWYpCit7CisJY29uc3QgY2hhciAqY3A7CisJZm9yIChjcCA9IGJ1ZjsgKmNwICYmICpjcCAhPSAnXG4nOyBjcCsrKSB7CisJCWlmICghc3RybmNtcChjcCwgIiA8IiwgMikpCisJCQlyZXR1cm4geG1lbWR1cHooYnVmLCBjcCAtIGJ1Zik7CisJfQorCXJldHVybiAiIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvcHlfZW1haWwoY29uc3QgY2hhciAqYnVmKQoreworCWNvbnN0IGNoYXIgKmVtYWlsID0gc3RyY2hyKGJ1ZiwgJzwnKTsKKwljb25zdCBjaGFyICplb2VtYWlsOworCWlmICghZW1haWwpCisJCXJldHVybiAiIjsKKwllb2VtYWlsID0gc3RyY2hyKGVtYWlsLCAnPicpOworCWlmICghZW9lbWFpbCkKKwkJcmV0dXJuICIiOworCXJldHVybiB4bWVtZHVweihlbWFpbCwgZW9lbWFpbCArIDEgLSBlbWFpbCk7Cit9CisKK3N0YXRpYyBjaGFyICpjb3B5X3N1YmplY3QoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljaGFyICpyID0geG1lbWR1cHooYnVmLCBsZW4pOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAocltpXSA9PSAnXG4nKQorCQkJcltpXSA9ICcgJzsKKworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBncmFiX2RhdGUoY29uc3QgY2hhciAqYnVmLCBzdHJ1Y3QgYXRvbV92YWx1ZSAqdiwgY29uc3QgY2hhciAqYXRvbW5hbWUpCit7CisJY29uc3QgY2hhciAqZW9lbWFpbCA9IHN0cnN0cihidWYsICI+ICIpOworCWNoYXIgKnpvbmU7CisJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CisJbG9uZyB0ejsKKwllbnVtIGRhdGVfbW9kZSBkYXRlX21vZGUgPSBEQVRFX05PUk1BTDsKKwljb25zdCBjaGFyICpmb3JtYXRwOworCisJLyoKKwkgKiBXZSBnb3QgaGVyZSBiZWNhdXNlIGF0b21uYW1lIGVuZHMgaW4gImRhdGUiIG9yICJkYXRlPHNvbWV0aGluZz4iOworCSAqIGl0J3Mgbm90IHBvc3NpYmxlIHRoYXQgPHNvbWV0aGluZz4gaXMgbm90ICI6PGZvcm1hdD4iIGJlY2F1c2UKKwkgKiBwYXJzZV9hdG9tKCkgd291bGRuJ3QgaGF2ZSBhbGxvd2VkIGl0LCBzbyB3ZSBjYW4gYXNzdW1lIHRoYXQgbm8KKwkgKiAiOiIgbWVhbnMgbm8gZm9ybWF0IGlzIHNwZWNpZmllZCwgYW5kIHVzZSB0aGUgZGVmYXVsdC4KKwkgKi8KKwlmb3JtYXRwID0gc3RyY2hyKGF0b21uYW1lLCAnOicpOworCWlmIChmb3JtYXRwICE9IE5VTEwpIHsKKwkJZm9ybWF0cCsrOworCQlkYXRlX21vZGUgPSBwYXJzZV9kYXRlX2Zvcm1hdChmb3JtYXRwKTsKKwl9CisKKwlpZiAoIWVvZW1haWwpCisJCWdvdG8gYmFkOworCXRpbWVzdGFtcCA9IHN0cnRvdWwoZW9lbWFpbCArIDIsICZ6b25lLCAxMCk7CisJaWYgKHRpbWVzdGFtcCA9PSBVTE9OR19NQVgpCisJCWdvdG8gYmFkOworCXR6ID0gc3RydG9sKHpvbmUsIE5VTEwsIDEwKTsKKwlpZiAoKHR6ID09IExPTkdfTUlOIHx8IHR6ID09IExPTkdfTUFYKSAmJiBlcnJubyA9PSBFUkFOR0UpCisJCWdvdG8gYmFkOworCXYtPnMgPSB4c3RyZHVwKHNob3dfZGF0ZSh0aW1lc3RhbXAsIHR6LCBkYXRlX21vZGUpKTsKKwl2LT51bCA9IHRpbWVzdGFtcDsKKwlyZXR1cm47CisgYmFkOgorCXYtPnMgPSAiIjsKKwl2LT51bCA9IDA7Cit9CisKKy8qIFNlZSBncmFiX3ZhbHVlcyAqLworc3RhdGljIHZvaWQgZ3JhYl9wZXJzb24oY29uc3QgY2hhciAqd2hvLCBzdHJ1Y3QgYXRvbV92YWx1ZSAqdmFsLCBpbnQgZGVyZWYsIHN0cnVjdCBvYmplY3QgKm9iaiwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHN6KQoreworCWludCBpOworCWludCB3aG9sZW4gPSBzdHJsZW4od2hvKTsKKwljb25zdCBjaGFyICp3aG9saW5lID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVzZWRfYXRvbVtpXTsKKwkJc3RydWN0IGF0b21fdmFsdWUgKnYgPSAmdmFsW2ldOworCQlpZiAoISFkZXJlZiAhPSAoKm5hbWUgPT0gJyonKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVyZWYpCisJCQluYW1lKys7CisJCWlmIChzdHJuY21wKHdobywgbmFtZSwgd2hvbGVuKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobmFtZVt3aG9sZW5dICE9IDAgJiYKKwkJICAgIHN0cmNtcChuYW1lICsgd2hvbGVuLCAibmFtZSIpICYmCisJCSAgICBzdHJjbXAobmFtZSArIHdob2xlbiwgImVtYWlsIikgJiYKKwkJICAgIHByZWZpeGNtcChuYW1lICsgd2hvbGVuLCAiZGF0ZSIpKQorCQkJY29udGludWU7CisJCWlmICghd2hvbGluZSkKKwkJCXdob2xpbmUgPSBmaW5kX3dob2xpbmUod2hvLCB3aG9sZW4sIGJ1Ziwgc3opOworCQlpZiAoIXdob2xpbmUpCisJCQlyZXR1cm47IC8qIG5vIHBvaW50IGxvb2tpbmcgZm9yIGl0ICovCisJCWlmIChuYW1lW3dob2xlbl0gPT0gMCkKKwkJCXYtPnMgPSBjb3B5X2xpbmUod2hvbGluZSk7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSArIHdob2xlbiwgIm5hbWUiKSkKKwkJCXYtPnMgPSBjb3B5X25hbWUod2hvbGluZSk7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSArIHdob2xlbiwgImVtYWlsIikpCisJCQl2LT5zID0gY29weV9lbWFpbCh3aG9saW5lKTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChuYW1lICsgd2hvbGVuLCAiZGF0ZSIpKQorCQkJZ3JhYl9kYXRlKHdob2xpbmUsIHYsIG5hbWUpOworCX0KKworCS8qCisJICogRm9yIGEgdGFnIG9yIGEgY29tbWl0IG9iamVjdCwgaWYgImNyZWF0b3IiIG9yICJjcmVhdG9yZGF0ZSIgaXMKKwkgKiByZXF1ZXN0ZWQsIGRvIHNvbWV0aGluZyBzcGVjaWFsLgorCSAqLworCWlmIChzdHJjbXAod2hvLCAidGFnZ2VyIikgJiYgc3RyY21wKHdobywgImNvbW1pdHRlciIpKQorCQlyZXR1cm47IC8qICJhdXRob3IiIGZvciBjb21taXQgb2JqZWN0IGlzIG5vdCB3YW50ZWQgKi8KKwlpZiAoIXdob2xpbmUpCisJCXdob2xpbmUgPSBmaW5kX3dob2xpbmUod2hvLCB3aG9sZW4sIGJ1Ziwgc3opOworCWlmICghd2hvbGluZSkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVzZWRfYXRvbVtpXTsKKwkJc3RydWN0IGF0b21fdmFsdWUgKnYgPSAmdmFsW2ldOworCQlpZiAoISFkZXJlZiAhPSAoKm5hbWUgPT0gJyonKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVyZWYpCisJCQluYW1lKys7CisKKwkJaWYgKCFwcmVmaXhjbXAobmFtZSwgImNyZWF0b3JkYXRlIikpCisJCQlncmFiX2RhdGUod2hvbGluZSwgdiwgbmFtZSk7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNyZWF0b3IiKSkKKwkJCXYtPnMgPSBjb3B5X2xpbmUod2hvbGluZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5kX3N1YnBvcyhjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc3osCisJCQljb25zdCBjaGFyICoqc3ViLCB1bnNpZ25lZCBsb25nICpzdWJsZW4sCisJCQljb25zdCBjaGFyICoqYm9keSwgdW5zaWduZWQgbG9uZyAqYm9keWxlbiwKKwkJCXVuc2lnbmVkIGxvbmcgKm5vbnNpZ2xlbiwKKwkJCWNvbnN0IGNoYXIgKipzaWcsIHVuc2lnbmVkIGxvbmcgKnNpZ2xlbikKK3sKKwljb25zdCBjaGFyICplb2w7CisJLyogc2tpcCBwYXN0IGhlYWRlciB1bnRpbCB3ZSBoaXQgZW1wdHkgbGluZSAqLworCXdoaWxlICgqYnVmICYmICpidWYgIT0gJ1xuJykgeworCQllb2wgPSBzdHJjaHJudWwoYnVmLCAnXG4nKTsKKwkJaWYgKCplb2wpCisJCQllb2wrKzsKKwkJYnVmID0gZW9sOworCX0KKwkvKiBza2lwIGFueSBlbXB0eSBsaW5lcyAqLworCXdoaWxlICgqYnVmID09ICdcbicpCisJCWJ1ZisrOworCisJLyogcGFyc2Ugc2lnbmF0dXJlIGZpcnN0OyB3ZSBtaWdodCBub3QgZXZlbiBoYXZlIGEgc3ViamVjdCBsaW5lICovCisJKnNpZyA9IGJ1ZiArIHBhcnNlX3NpZ25hdHVyZShidWYsIHN0cmxlbihidWYpKTsKKwkqc2lnbGVuID0gc3RybGVuKCpzaWcpOworCisJLyogc3ViamVjdCBpcyBmaXJzdCBub24tZW1wdHkgbGluZSAqLworCSpzdWIgPSBidWY7CisJLyogc3ViamVjdCBnb2VzIHRvIGZpcnN0IGVtcHR5IGxpbmUgKi8KKwl3aGlsZSAoYnVmIDwgKnNpZyAmJiAqYnVmICYmICpidWYgIT0gJ1xuJykgeworCQllb2wgPSBzdHJjaHJudWwoYnVmLCAnXG4nKTsKKwkJaWYgKCplb2wpCisJCQllb2wrKzsKKwkJYnVmID0gZW9sOworCX0KKwkqc3VibGVuID0gYnVmIC0gKnN1YjsKKwkvKiBkcm9wIHRyYWlsaW5nIG5ld2xpbmUsIGlmIHByZXNlbnQgKi8KKwlpZiAoKnN1YmxlbiAmJiAoKnN1YilbKnN1YmxlbiAtIDFdID09ICdcbicpCisJCSpzdWJsZW4gLT0gMTsKKworCS8qIHNraXAgYW55IGVtcHR5IGxpbmVzICovCisJd2hpbGUgKCpidWYgPT0gJ1xuJykKKwkJYnVmKys7CisJKmJvZHkgPSBidWY7CisJKmJvZHlsZW4gPSBzdHJsZW4oYnVmKTsKKwkqbm9uc2lnbGVuID0gKnNpZyAtIGJ1ZjsKK30KKworLyogU2VlIGdyYWJfdmFsdWVzICovCitzdGF0aWMgdm9pZCBncmFiX3N1Yl9ib2R5X2NvbnRlbnRzKHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwsIGludCBkZXJlZiwgc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc3opCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqc3VicG9zID0gTlVMTCwgKmJvZHlwb3MgPSBOVUxMLCAqc2lncG9zID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHN1YmxlbiA9IDAsIGJvZHlsZW4gPSAwLCBub25zaWdsZW4gPSAwLCBzaWdsZW4gPSAwOworCisJZm9yIChpID0gMDsgaSA8IHVzZWRfYXRvbV9jbnQ7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gdXNlZF9hdG9tW2ldOworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZ2YWxbaV07CisJCWlmICghIWRlcmVmICE9ICgqbmFtZSA9PSAnKicpKQorCQkJY29udGludWU7CisJCWlmIChkZXJlZikKKwkJCW5hbWUrKzsKKwkJaWYgKHN0cmNtcChuYW1lLCAic3ViamVjdCIpICYmCisJCSAgICBzdHJjbXAobmFtZSwgImJvZHkiKSAmJgorCQkgICAgc3RyY21wKG5hbWUsICJjb250ZW50cyIpICYmCisJCSAgICBzdHJjbXAobmFtZSwgImNvbnRlbnRzOnN1YmplY3QiKSAmJgorCQkgICAgc3RyY21wKG5hbWUsICJjb250ZW50czpib2R5IikgJiYKKwkJICAgIHN0cmNtcChuYW1lLCAiY29udGVudHM6c2lnbmF0dXJlIikpCisJCQljb250aW51ZTsKKwkJaWYgKCFzdWJwb3MpCisJCQlmaW5kX3N1YnBvcyhidWYsIHN6LAorCQkJCSAgICAmc3VicG9zLCAmc3VibGVuLAorCQkJCSAgICAmYm9keXBvcywgJmJvZHlsZW4sICZub25zaWdsZW4sCisJCQkJICAgICZzaWdwb3MsICZzaWdsZW4pOworCisJCWlmICghc3RyY21wKG5hbWUsICJzdWJqZWN0IikpCisJCQl2LT5zID0gY29weV9zdWJqZWN0KHN1YnBvcywgc3VibGVuKTsKKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY29udGVudHM6c3ViamVjdCIpKQorCQkJdi0+cyA9IGNvcHlfc3ViamVjdChzdWJwb3MsIHN1Ymxlbik7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImJvZHkiKSkKKwkJCXYtPnMgPSB4bWVtZHVweihib2R5cG9zLCBib2R5bGVuKTsKKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY29udGVudHM6Ym9keSIpKQorCQkJdi0+cyA9IHhtZW1kdXB6KGJvZHlwb3MsIG5vbnNpZ2xlbik7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNvbnRlbnRzOnNpZ25hdHVyZSIpKQorCQkJdi0+cyA9IHhtZW1kdXB6KHNpZ3Bvcywgc2lnbGVuKTsKKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY29udGVudHMiKSkKKwkJCXYtPnMgPSB4c3RyZHVwKHN1YnBvcyk7CisJfQorfQorCisvKgorICogV2Ugd2FudCB0byBoYXZlIGVtcHR5IHByaW50LXN0cmluZyBmb3IgZmllbGQgcmVxdWVzdHMKKyAqIHRoYXQgZG8gbm90IGFwcGx5IChlLmcuICJhdXRob3JkYXRlIiBmb3IgYSB0YWcgb2JqZWN0KQorICovCitzdGF0aWMgdm9pZCBmaWxsX21pc3NpbmdfdmFsdWVzKHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHVzZWRfYXRvbV9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZ2YWxbaV07CisJCWlmICh2LT5zID09IE5VTEwpCisJCQl2LT5zID0gIiI7CisJfQorfQorCisvKgorICogdmFsIGlzIGEgbGlzdCBvZiBhdG9tX3ZhbHVlIHRvIGhvbGQgcmV0dXJuZWQgdmFsdWVzLiAgRXh0cmFjdAorICogdGhlIHZhbHVlcyBmb3IgYXRvbXMgaW4gdXNlZF9hdG9tIGFycmF5IG91dCBvZiAob2JqLCBidWYsIHN6KS4KKyAqIHdoZW4gZGVyZWYgaXMgZmFsc2UsIChvYmosIGJ1Ziwgc3opIGlzIHRoZSBvYmplY3QgdGhhdCBpcworICogcG9pbnRlZCBhdCBieSB0aGUgcmVmIGl0c2VsZjsgb3RoZXJ3aXNlIGl0IGlzIHRoZSBvYmplY3QgdGhlCisgKiByZWYgKHdoaWNoIGlzIGEgdGFnKSByZWZlcnMgdG8uCisgKi8KK3N0YXRpYyB2b2lkIGdyYWJfdmFsdWVzKHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwsIGludCBkZXJlZiwgc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc3opCit7CisJZ3JhYl9jb21tb25fdmFsdWVzKHZhbCwgZGVyZWYsIG9iaiwgYnVmLCBzeik7CisJc3dpdGNoIChvYmotPnR5cGUpIHsKKwljYXNlIE9CSl9UQUc6CisJCWdyYWJfdGFnX3ZhbHVlcyh2YWwsIGRlcmVmLCBvYmosIGJ1Ziwgc3opOworCQlncmFiX3N1Yl9ib2R5X2NvbnRlbnRzKHZhbCwgZGVyZWYsIG9iaiwgYnVmLCBzeik7CisJCWdyYWJfcGVyc29uKCJ0YWdnZXIiLCB2YWwsIGRlcmVmLCBvYmosIGJ1Ziwgc3opOworCQlicmVhazsKKwljYXNlIE9CSl9DT01NSVQ6CisJCWdyYWJfY29tbWl0X3ZhbHVlcyh2YWwsIGRlcmVmLCBvYmosIGJ1Ziwgc3opOworCQlncmFiX3N1Yl9ib2R5X2NvbnRlbnRzKHZhbCwgZGVyZWYsIG9iaiwgYnVmLCBzeik7CisJCWdyYWJfcGVyc29uKCJhdXRob3IiLCB2YWwsIGRlcmVmLCBvYmosIGJ1Ziwgc3opOworCQlncmFiX3BlcnNvbigiY29tbWl0dGVyIiwgdmFsLCBkZXJlZiwgb2JqLCBidWYsIHN6KTsKKwkJYnJlYWs7CisJY2FzZSBPQkpfVFJFRToKKwkJLyogZ3JhYl90cmVlX3ZhbHVlcyh2YWwsIGRlcmVmLCBvYmosIGJ1Ziwgc3opOyAqLworCQlicmVhazsKKwljYXNlIE9CSl9CTE9COgorCQkvKiBncmFiX2Jsb2JfdmFsdWVzKHZhbCwgZGVyZWYsIG9iaiwgYnVmLCBzeik7ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRpZSgiRWg/ICBPYmplY3Qgb2YgdHlwZSAlZD8iLCBvYmotPnR5cGUpOworCX0KK30KKworc3RhdGljIGlubGluZSBjaGFyICpjb3B5X2FkdmFuY2UoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisJd2hpbGUgKCpzcmMpCisJCSpkc3QrKyA9ICpzcmMrKzsKKwlyZXR1cm4gZHN0OworfQorCisvKgorICogUGFyc2UgdGhlIG9iamVjdCByZWZlcnJlZCBieSByZWYsIGFuZCBncmFiIG5lZWRlZCB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgcG9wdWxhdGVfdmFsdWUoc3RydWN0IHJlZmluZm8gKnJlZikKK3sKKwl2b2lkICpidWY7CisJc3RydWN0IG9iamVjdCAqb2JqOworCWludCBlYXRlbiwgaTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqdGFnZ2VkOworCisJcmVmLT52YWx1ZSA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdG9tX3ZhbHVlKSwgdXNlZF9hdG9tX2NudCk7CisKKwlpZiAobmVlZF9zeW1yZWYgJiYgKHJlZi0+ZmxhZyAmIFJFRl9JU1NZTVJFRikgJiYgIXJlZi0+c3ltcmVmKSB7CisJCXVuc2lnbmVkIGNoYXIgdW51c2VkMVsyMF07CisJCXJlZi0+c3ltcmVmID0gcmVzb2x2ZV9yZWZkdXAocmVmLT5yZWZuYW1lLCB1bnVzZWQxLCAxLCBOVUxMKTsKKwkJaWYgKCFyZWYtPnN5bXJlZikKKwkJCXJlZi0+c3ltcmVmID0gIiI7CisJfQorCisJLyogRmlsbCBpbiBzcGVjaWFscyBmaXJzdCAqLworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVzZWRfYXRvbVtpXTsKKwkJc3RydWN0IGF0b21fdmFsdWUgKnYgPSAmcmVmLT52YWx1ZVtpXTsKKwkJaW50IGRlcmVmID0gMDsKKwkJY29uc3QgY2hhciAqcmVmbmFtZTsKKwkJY29uc3QgY2hhciAqZm9ybWF0cDsKKworCQlpZiAoKm5hbWUgPT0gJyonKSB7CisJCQlkZXJlZiA9IDE7CisJCQluYW1lKys7CisJCX0KKworCQlpZiAoIXByZWZpeGNtcChuYW1lLCAicmVmbmFtZSIpKQorCQkJcmVmbmFtZSA9IHJlZi0+cmVmbmFtZTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChuYW1lLCAic3ltcmVmIikpCisJCQlyZWZuYW1lID0gcmVmLT5zeW1yZWYgPyByZWYtPnN5bXJlZiA6ICIiOworCQllbHNlIGlmICghcHJlZml4Y21wKG5hbWUsICJ1cHN0cmVhbSIpKSB7CisJCQlzdHJ1Y3QgYnJhbmNoICpicmFuY2g7CisJCQkvKiBvbmx5IGxvY2FsIGJyYW5jaGVzIG1heSBoYXZlIGFuIHVwc3RyZWFtICovCisJCQlpZiAocHJlZml4Y21wKHJlZi0+cmVmbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCQkJY29udGludWU7CisJCQlicmFuY2ggPSBicmFuY2hfZ2V0KHJlZi0+cmVmbmFtZSArIDExKTsKKworCQkJaWYgKCFicmFuY2ggfHwgIWJyYW5jaC0+bWVyZ2UgfHwgIWJyYW5jaC0+bWVyZ2VbMF0gfHwKKwkJCSAgICAhYnJhbmNoLT5tZXJnZVswXS0+ZHN0KQorCQkJCWNvbnRpbnVlOworCQkJcmVmbmFtZSA9IGJyYW5jaC0+bWVyZ2VbMF0tPmRzdDsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJmbGFnIikpIHsKKwkJCWNoYXIgYnVmWzI1Nl0sICpjcCA9IGJ1ZjsKKwkJCWlmIChyZWYtPmZsYWcgJiBSRUZfSVNTWU1SRUYpCisJCQkJY3AgPSBjb3B5X2FkdmFuY2UoY3AsICIsc3ltcmVmIik7CisJCQlpZiAocmVmLT5mbGFnICYgUkVGX0lTUEFDS0VEKQorCQkJCWNwID0gY29weV9hZHZhbmNlKGNwLCAiLHBhY2tlZCIpOworCQkJaWYgKGNwID09IGJ1ZikKKwkJCQl2LT5zID0gIiI7CisJCQllbHNlIHsKKwkJCQkqY3AgPSAnXDAnOworCQkJCXYtPnMgPSB4c3RyZHVwKGJ1ZiArIDEpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJZm9ybWF0cCA9IHN0cmNocihuYW1lLCAnOicpOworCQkvKiBsb29rIGZvciAic2hvcnQiIHJlZm5hbWUgZm9ybWF0ICovCisJCWlmIChmb3JtYXRwKSB7CisJCQlmb3JtYXRwKys7CisJCQlpZiAoIXN0cmNtcChmb3JtYXRwLCAic2hvcnQiKSkKKwkJCQlyZWZuYW1lID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYocmVmbmFtZSwKKwkJCQkJCSAgICAgIHdhcm5fYW1iaWd1b3VzX3JlZnMpOworCQkJZWxzZQorCQkJCWRpZSgidW5rbm93biAlLipzIGZvcm1hdCAlcyIsCisJCQkJICAgIChpbnQpKGZvcm1hdHAgLSBuYW1lKSwgbmFtZSwgZm9ybWF0cCk7CisJCX0KKworCQlpZiAoIWRlcmVmKQorCQkJdi0+cyA9IHJlZm5hbWU7CisJCWVsc2UgeworCQkJaW50IGxlbiA9IHN0cmxlbihyZWZuYW1lKTsKKwkJCWNoYXIgKnMgPSB4bWFsbG9jKGxlbiArIDQpOworCQkJc3ByaW50ZihzLCAiJXNee30iLCByZWZuYW1lKTsKKwkJCXYtPnMgPSBzOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHVzZWRfYXRvbV9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZyZWYtPnZhbHVlW2ldOworCQlpZiAodi0+cyA9PSBOVUxMKQorCQkJZ290byBuZWVkX29iajsKKwl9CisJcmV0dXJuOworCisgbmVlZF9vYmo6CisJYnVmID0gZ2V0X29iaihyZWYtPm9iamVjdG5hbWUsICZvYmosICZzaXplLCAmZWF0ZW4pOworCWlmICghYnVmKQorCQlkaWUoIm1pc3Npbmcgb2JqZWN0ICVzIGZvciAlcyIsCisJCSAgICBzaGExX3RvX2hleChyZWYtPm9iamVjdG5hbWUpLCByZWYtPnJlZm5hbWUpOworCWlmICghb2JqKQorCQlkaWUoInBhcnNlX29iamVjdF9idWZmZXIgZmFpbGVkIG9uICVzIGZvciAlcyIsCisJCSAgICBzaGExX3RvX2hleChyZWYtPm9iamVjdG5hbWUpLCByZWYtPnJlZm5hbWUpOworCisJZ3JhYl92YWx1ZXMocmVmLT52YWx1ZSwgMCwgb2JqLCBidWYsIHNpemUpOworCWlmICghZWF0ZW4pCisJCWZyZWUoYnVmKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgbm8gYXRvbSB0aGF0IHdhbnRzIHRvIGtub3cgYWJvdXQgdGFnZ2VkCisJICogb2JqZWN0LCB3ZSBhcmUgZG9uZS4KKwkgKi8KKwlpZiAoIW5lZWRfdGFnZ2VkIHx8IChvYmotPnR5cGUgIT0gT0JKX1RBRykpCisJCXJldHVybjsKKworCS8qCisJICogSWYgaXQgaXMgYSB0YWcgb2JqZWN0LCBzZWUgaWYgd2UgdXNlIGEgdmFsdWUgdGhhdCBkZXJlZnMKKwkgKiB0aGUgb2JqZWN0LCBhbmQgaWYgd2UgZG8gZ3JhYiB0aGUgb2JqZWN0IGl0IHJlZmVycyB0by4KKwkgKi8KKwl0YWdnZWQgPSAoKHN0cnVjdCB0YWcgKilvYmopLT50YWdnZWQtPnNoYTE7CisKKwkvKgorCSAqIE5FRURTV09SSzogVGhpcyBkZXJlZnMgdGFnIG9ubHkgb25jZSwgd2hpY2gKKwkgKiBpcyBnb29kIHRvIGRlYWwgd2l0aCBjaGFpbnMgb2YgdHJ1c3QsIGJ1dAorCSAqIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggd2hhdCBkZXJlZl90YWcoKSBkb2VzCisJICogd2hpY2ggcGVlbHMgdGhlIG9uaW9uIHRvIHRoZSBjb3JlLgorCSAqLworCWJ1ZiA9IGdldF9vYmoodGFnZ2VkLCAmb2JqLCAmc2l6ZSwgJmVhdGVuKTsKKwlpZiAoIWJ1ZikKKwkJZGllKCJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiLAorCQkgICAgc2hhMV90b19oZXgodGFnZ2VkKSwgcmVmLT5yZWZuYW1lKTsKKwlpZiAoIW9iaikKKwkJZGllKCJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiLAorCQkgICAgc2hhMV90b19oZXgodGFnZ2VkKSwgcmVmLT5yZWZuYW1lKTsKKwlncmFiX3ZhbHVlcyhyZWYtPnZhbHVlLCAxLCBvYmosIGJ1Ziwgc2l6ZSk7CisJaWYgKCFlYXRlbikKKwkJZnJlZShidWYpOworfQorCisvKgorICogR2l2ZW4gYSByZWYsIHJldHVybiB0aGUgdmFsdWUgZm9yIHRoZSBhdG9tLiAgVGhpcyBsYXppbHkgZ2V0cyB2YWx1ZQorICogb3V0IG9mIHRoZSBvYmplY3QgYnkgY2FsbGluZyBwb3B1bGF0ZSB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgZ2V0X3ZhbHVlKHN0cnVjdCByZWZpbmZvICpyZWYsIGludCBhdG9tLCBzdHJ1Y3QgYXRvbV92YWx1ZSAqKnYpCit7CisJaWYgKCFyZWYtPnZhbHVlKSB7CisJCXBvcHVsYXRlX3ZhbHVlKHJlZik7CisJCWZpbGxfbWlzc2luZ192YWx1ZXMocmVmLT52YWx1ZSk7CisJfQorCSp2ID0gJnJlZi0+dmFsdWVbYXRvbV07Cit9CisKK3N0cnVjdCBncmFiX3JlZl9jYmRhdGEgeworCXN0cnVjdCByZWZpbmZvICoqZ3JhYl9hcnJheTsKKwljb25zdCBjaGFyICoqZ3JhYl9wYXR0ZXJuOworCWludCBncmFiX2NudDsKK307CisKKy8qCisgKiBBIGNhbGwtYmFjayBnaXZlbiB0byBmb3JfZWFjaF9yZWYoKS4gIEZpbHRlciByZWZzIGFuZCBrZWVwIHRoZW0gZm9yCisgKiBsYXRlciBvYmplY3QgcHJvY2Vzc2luZy4KKyAqLworc3RhdGljIGludCBncmFiX3NpbmdsZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGdyYWJfcmVmX2NiZGF0YSAqY2IgPSBjYl9kYXRhOworCXN0cnVjdCByZWZpbmZvICpyZWY7CisJaW50IGNudDsKKworCWlmICgqY2ItPmdyYWJfcGF0dGVybikgeworCQljb25zdCBjaGFyICoqcGF0dGVybjsKKwkJaW50IG5hbWVsZW4gPSBzdHJsZW4ocmVmbmFtZSk7CisJCWZvciAocGF0dGVybiA9IGNiLT5ncmFiX3BhdHRlcm47ICpwYXR0ZXJuOyBwYXR0ZXJuKyspIHsKKwkJCWNvbnN0IGNoYXIgKnAgPSAqcGF0dGVybjsKKwkJCWludCBwbGVuID0gc3RybGVuKHApOworCisJCQlpZiAoKHBsZW4gPD0gbmFtZWxlbikgJiYKKwkJCSAgICAhc3RybmNtcChyZWZuYW1lLCBwLCBwbGVuKSAmJgorCQkJICAgIChyZWZuYW1lW3BsZW5dID09ICdcMCcgfHwKKwkJCSAgICAgcmVmbmFtZVtwbGVuXSA9PSAnLycgfHwKKwkJCSAgICAgcFtwbGVuLTFdID09ICcvJykpCisJCQkJYnJlYWs7CisJCQlpZiAoIWZubWF0Y2gocCwgcmVmbmFtZSwgRk5NX1BBVEhOQU1FKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoISpwYXR0ZXJuKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBXZSBkbyBub3Qgb3BlbiB0aGUgb2JqZWN0IHlldDsgc29ydCBtYXkgb25seSBuZWVkIHJlZm5hbWUKKwkgKiB0byBkbyBpdHMgam9iIGFuZCB0aGUgcmVzdWx0aW5nIGxpc3QgbWF5IHlldCB0byBiZSBwcnVuZWQKKwkgKiBieSBtYXhjb3VudCBsb2dpYy4KKwkgKi8KKwlyZWYgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVmKSk7CisJcmVmLT5yZWZuYW1lID0geHN0cmR1cChyZWZuYW1lKTsKKwloYXNoY3B5KHJlZi0+b2JqZWN0bmFtZSwgc2hhMSk7CisJcmVmLT5mbGFnID0gZmxhZzsKKworCWNudCA9IGNiLT5ncmFiX2NudDsKKwljYi0+Z3JhYl9hcnJheSA9IHhyZWFsbG9jKGNiLT5ncmFiX2FycmF5LAorCQkJCSAgc2l6ZW9mKCpjYi0+Z3JhYl9hcnJheSkgKiAoY250ICsgMSkpOworCWNiLT5ncmFiX2FycmF5W2NudCsrXSA9IHJlZjsKKwljYi0+Z3JhYl9jbnQgPSBjbnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21wX3JlZl9zb3J0KHN0cnVjdCByZWZfc29ydCAqcywgc3RydWN0IHJlZmluZm8gKmEsIHN0cnVjdCByZWZpbmZvICpiKQoreworCXN0cnVjdCBhdG9tX3ZhbHVlICp2YSwgKnZiOworCWludCBjbXA7CisJY21wX3R5cGUgY21wX3R5cGUgPSB1c2VkX2F0b21fdHlwZVtzLT5hdG9tXTsKKworCWdldF92YWx1ZShhLCBzLT5hdG9tLCAmdmEpOworCWdldF92YWx1ZShiLCBzLT5hdG9tLCAmdmIpOworCXN3aXRjaCAoY21wX3R5cGUpIHsKKwljYXNlIEZJRUxEX1NUUjoKKwkJY21wID0gc3RyY21wKHZhLT5zLCB2Yi0+cyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICh2YS0+dWwgPCB2Yi0+dWwpCisJCQljbXAgPSAtMTsKKwkJZWxzZSBpZiAodmEtPnVsID09IHZiLT51bCkKKwkJCWNtcCA9IDA7CisJCWVsc2UKKwkJCWNtcCA9IDE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKHMtPnJldmVyc2UpID8gLWNtcCA6IGNtcDsKK30KKworc3RhdGljIHN0cnVjdCByZWZfc29ydCAqcmVmX3NvcnQ7CitzdGF0aWMgaW50IGNvbXBhcmVfcmVmcyhjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHJlZmluZm8gKmEgPSAqKChzdHJ1Y3QgcmVmaW5mbyAqKilhXyk7CisJc3RydWN0IHJlZmluZm8gKmIgPSAqKChzdHJ1Y3QgcmVmaW5mbyAqKiliXyk7CisJc3RydWN0IHJlZl9zb3J0ICpzOworCisJZm9yIChzID0gcmVmX3NvcnQ7IHM7IHMgPSBzLT5uZXh0KSB7CisJCWludCBjbXAgPSBjbXBfcmVmX3NvcnQocywgYSwgYik7CisJCWlmIChjbXApCisJCQlyZXR1cm4gY21wOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29ydF9yZWZzKHN0cnVjdCByZWZfc29ydCAqc29ydCwgc3RydWN0IHJlZmluZm8gKipyZWZzLCBpbnQgbnVtX3JlZnMpCit7CisJcmVmX3NvcnQgPSBzb3J0OworCXFzb3J0KHJlZnMsIG51bV9yZWZzLCBzaXplb2Yoc3RydWN0IHJlZmluZm8gKiksIGNvbXBhcmVfcmVmcyk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3ZhbHVlKHN0cnVjdCByZWZpbmZvICpyZWYsIGludCBhdG9tLCBpbnQgcXVvdGVfc3R5bGUpCit7CisJc3RydWN0IGF0b21fdmFsdWUgKnY7CisJZ2V0X3ZhbHVlKHJlZiwgYXRvbSwgJnYpOworCXN3aXRjaCAocXVvdGVfc3R5bGUpIHsKKwljYXNlIFFVT1RFX05PTkU6CisJCWZwdXRzKHYtPnMsIHN0ZG91dCk7CisJCWJyZWFrOworCWNhc2UgUVVPVEVfU0hFTEw6CisJCXNxX3F1b3RlX3ByaW50KHN0ZG91dCwgdi0+cyk7CisJCWJyZWFrOworCWNhc2UgUVVPVEVfUEVSTDoKKwkJcGVybF9xdW90ZV9wcmludChzdGRvdXQsIHYtPnMpOworCQlicmVhazsKKwljYXNlIFFVT1RFX1BZVEhPTjoKKwkJcHl0aG9uX3F1b3RlX3ByaW50KHN0ZG91dCwgdi0+cyk7CisJCWJyZWFrOworCWNhc2UgUVVPVEVfVENMOgorCQl0Y2xfcXVvdGVfcHJpbnQoc3Rkb3V0LCB2LT5zKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGhleDEoY2hhciBjaCkKK3sKKwlpZiAoJzAnIDw9IGNoICYmIGNoIDw9ICc5JykKKwkJcmV0dXJuIGNoIC0gJzAnOworCWVsc2UgaWYgKCdhJyA8PSBjaCAmJiBjaCA8PSAnZicpCisJCXJldHVybiBjaCAtICdhJyArIDEwOworCWVsc2UgaWYgKCdBJyA8PSBjaCAmJiBjaCA8PSAnRicpCisJCXJldHVybiBjaCAtICdBJyArIDEwOworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbnQgaGV4Mihjb25zdCBjaGFyICpjcCkKK3sKKwlpZiAoY3BbMF0gJiYgY3BbMV0pCisJCXJldHVybiAoaGV4MShjcFswXSkgPDwgNCkgfCBoZXgxKGNwWzFdKTsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgZW1pdChjb25zdCBjaGFyICpjcCwgY29uc3QgY2hhciAqZXApCit7CisJd2hpbGUgKCpjcCAmJiAoIWVwIHx8IGNwIDwgZXApKSB7CisJCWlmICgqY3AgPT0gJyUnKSB7CisJCQlpZiAoY3BbMV0gPT0gJyUnKQorCQkJCWNwKys7CisJCQllbHNlIHsKKwkJCQlpbnQgY2ggPSBoZXgyKGNwICsgMSk7CisJCQkJaWYgKDAgPD0gY2gpIHsKKwkJCQkJcHV0Y2hhcihjaCk7CisJCQkJCWNwICs9IDM7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCQlwdXRjaGFyKCpjcCk7CisJCWNwKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3JlZihzdHJ1Y3QgcmVmaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZm9ybWF0LCBpbnQgcXVvdGVfc3R5bGUpCit7CisJY29uc3QgY2hhciAqY3AsICpzcCwgKmVwOworCisJZm9yIChjcCA9IGZvcm1hdDsgKmNwICYmIChzcCA9IGZpbmRfbmV4dChjcCkpOyBjcCA9IGVwICsgMSkgeworCQllcCA9IHN0cmNocihzcCwgJyknKTsKKwkJaWYgKGNwIDwgc3ApCisJCQllbWl0KGNwLCBzcCk7CisJCXByaW50X3ZhbHVlKGluZm8sIHBhcnNlX2F0b20oc3AgKyAyLCBlcCksIHF1b3RlX3N0eWxlKTsKKwl9CisJaWYgKCpjcCkgeworCQlzcCA9IGNwICsgc3RybGVuKGNwKTsKKwkJZW1pdChjcCwgc3ApOworCX0KKwlwdXRjaGFyKCdcbicpOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9zb3J0ICpkZWZhdWx0X3NvcnQodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBjc3RyX25hbWVbXSA9ICJyZWZuYW1lIjsKKworCXN0cnVjdCByZWZfc29ydCAqc29ydCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzb3J0KSk7CisKKwlzb3J0LT5uZXh0ID0gTlVMTDsKKwlzb3J0LT5hdG9tID0gcGFyc2VfYXRvbShjc3RyX25hbWUsIGNzdHJfbmFtZSArIHN0cmxlbihjc3RyX25hbWUpKTsKKwlyZXR1cm4gc29ydDsKK30KKworc3RhdGljIGludCBvcHRfcGFyc2Vfc29ydChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCByZWZfc29ydCAqKnNvcnRfdGFpbCA9IG9wdC0+dmFsdWU7CisJc3RydWN0IHJlZl9zb3J0ICpzOworCWludCBsZW47CisKKwlpZiAoIWFyZykgLyogc2hvdWxkIC0tbm8tc29ydCB2b2lkIHRoZSBsaXN0ID8gKi8KKwkJcmV0dXJuIC0xOworCisJcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzKSk7CisJcy0+bmV4dCA9ICpzb3J0X3RhaWw7CisJKnNvcnRfdGFpbCA9IHM7CisKKwlpZiAoKmFyZyA9PSAnLScpIHsKKwkJcy0+cmV2ZXJzZSA9IDE7CisJCWFyZysrOworCX0KKwlsZW4gPSBzdHJsZW4oYXJnKTsKKwlzLT5hdG9tID0gcGFyc2VfYXRvbShhcmcsIGFyZytsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGZvcl9lYWNoX3JlZl91c2FnZVtdID0geworCU5fKCJnaXQgZm9yLWVhY2gtcmVmIFtvcHRpb25zXSBbPHBhdHRlcm4+XSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfZm9yX2VhY2hfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBudW1fcmVmczsKKwljb25zdCBjaGFyICpmb3JtYXQgPSAiJShvYmplY3RuYW1lKSAlKG9iamVjdHR5cGUpXHQlKHJlZm5hbWUpIjsKKwlzdHJ1Y3QgcmVmX3NvcnQgKnNvcnQgPSBOVUxMLCAqKnNvcnRfdGFpbCA9ICZzb3J0OworCWludCBtYXhjb3VudCA9IDAsIHF1b3RlX3N0eWxlID0gMDsKKwlzdHJ1Y3QgcmVmaW5mbyAqKnJlZnM7CisJc3RydWN0IGdyYWJfcmVmX2NiZGF0YSBjYmRhdGE7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX0JJVCgncycsICJzaGVsbCIsICZxdW90ZV9zdHlsZSwKKwkJCU5fKCJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIpLCBRVU9URV9TSEVMTCksCisJCU9QVF9CSVQoJ3AnLCAicGVybCIsICAmcXVvdGVfc3R5bGUsCisJCQlOXygicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIiksIFFVT1RFX1BFUkwpLAorCQlPUFRfQklUKDAgLCAicHl0aG9uIiwgJnF1b3RlX3N0eWxlLAorCQkJTl8oInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIiksIFFVT1RFX1BZVEhPTiksCisJCU9QVF9CSVQoMCAsICJ0Y2wiLCAgJnF1b3RlX3N0eWxlLAorCQkJTl8oInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgdGNsIiksIFFVT1RFX1RDTCksCisKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0lOVEVHRVIoIDAgLCAiY291bnQiLCAmbWF4Y291bnQsIE5fKCJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIpKSwKKwkJT1BUX1NUUklORyggIDAgLCAiZm9ybWF0IiwgJmZvcm1hdCwgTl8oImZvcm1hdCIpLCBOXygiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIpKSwKKwkJT1BUX0NBTExCQUNLKDAgLCAic29ydCIsIHNvcnRfdGFpbCwgTl8oImtleSIpLAorCQkJICAgIE5fKCJmaWVsZCBuYW1lIHRvIHNvcnQgb24iKSwgJm9wdF9wYXJzZV9zb3J0KSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgZm9yX2VhY2hfcmVmX3VzYWdlLCAwKTsKKwlpZiAobWF4Y291bnQgPCAwKSB7CisJCWVycm9yKCJpbnZhbGlkIC0tY291bnQgYXJndW1lbnQ6IGAlZCciLCBtYXhjb3VudCk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhmb3JfZWFjaF9yZWZfdXNhZ2UsIG9wdHMpOworCX0KKwlpZiAoSEFTX01VTFRJX0JJVFMocXVvdGVfc3R5bGUpKSB7CisJCWVycm9yKCJtb3JlIHRoYW4gb25lIHF1b3Rpbmcgc3R5bGU/Iik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhmb3JfZWFjaF9yZWZfdXNhZ2UsIG9wdHMpOworCX0KKwlpZiAodmVyaWZ5X2Zvcm1hdChmb3JtYXQpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZm9yX2VhY2hfcmVmX3VzYWdlLCBvcHRzKTsKKworCWlmICghc29ydCkKKwkJc29ydCA9IGRlZmF1bHRfc29ydCgpOworCXNvcnRfYXRvbV9saW1pdCA9IHVzZWRfYXRvbV9jbnQ7CisKKwkvKiBmb3Igd2Fybl9hbWJpZ3VvdXNfcmVmcyAqLworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCW1lbXNldCgmY2JkYXRhLCAwLCBzaXplb2YoY2JkYXRhKSk7CisJY2JkYXRhLmdyYWJfcGF0dGVybiA9IGFyZ3Y7CisJZm9yX2VhY2hfcmF3cmVmKGdyYWJfc2luZ2xlX3JlZiwgJmNiZGF0YSk7CisJcmVmcyA9IGNiZGF0YS5ncmFiX2FycmF5OworCW51bV9yZWZzID0gY2JkYXRhLmdyYWJfY250OworCisJc29ydF9yZWZzKHNvcnQsIHJlZnMsIG51bV9yZWZzKTsKKworCWlmICghbWF4Y291bnQgfHwgbnVtX3JlZnMgPCBtYXhjb3VudCkKKwkJbWF4Y291bnQgPSBudW1fcmVmczsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4Y291bnQ7IGkrKykKKwkJc2hvd19yZWYocmVmc1tpXSwgZm9ybWF0LCBxdW90ZV9zdHlsZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2ZzY2suYyBiL2J1aWx0aW4vZnNjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWEyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2ZzY2suYwpAQCAtMCwwICsxLDczOCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiZnNjay5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorCisjZGVmaW5lIFJFQUNIQUJMRSAweDAwMDEKKyNkZWZpbmUgU0VFTiAgICAgIDB4MDAwMgorCitzdGF0aWMgaW50IHNob3dfcm9vdDsKK3N0YXRpYyBpbnQgc2hvd190YWdzOworc3RhdGljIGludCBzaG93X3VucmVhY2hhYmxlOworc3RhdGljIGludCBpbmNsdWRlX3JlZmxvZ3MgPSAxOworc3RhdGljIGludCBjaGVja19mdWxsID0gMTsKK3N0YXRpYyBpbnQgY2hlY2tfc3RyaWN0Oworc3RhdGljIGludCBrZWVwX2NhY2hlX29iamVjdHM7CitzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworc3RhdGljIGNvbnN0IGNoYXIgKmhlYWRfcG9pbnRzX2F0Oworc3RhdGljIGludCBlcnJvcnNfZm91bmQ7CitzdGF0aWMgaW50IHdyaXRlX2xvc3RfYW5kX2ZvdW5kOworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBzaG93X3Byb2dyZXNzID0gLTE7CitzdGF0aWMgaW50IHNob3dfZGFuZ2xpbmcgPSAxOworI2RlZmluZSBFUlJPUl9PQkpFQ1QgMDEKKyNkZWZpbmUgRVJST1JfUkVBQ0hBQkxFIDAyCisjZGVmaW5lIEVSUk9SX1BBQ0sgMDQKKworI2lmZGVmIE5PX0RfSU5PX0lOX0RJUkVOVAorI2RlZmluZSBTT1JUX0RJUkVOVCAwCisjZGVmaW5lIERJUkVOVF9TT1JUX0hJTlQoZGUpIDAKKyNlbHNlCisjZGVmaW5lIFNPUlRfRElSRU5UIDEKKyNkZWZpbmUgRElSRU5UX1NPUlRfSElOVChkZSkgKChkZSktPmRfaW5vKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIG9ianJlcG9ydChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnNldmVyaXR5LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJZnByaW50ZihzdGRlcnIsICIlcyBpbiAlcyAlczogIiwKKwkgICAgICAgIHNldmVyaXR5LCB0eXBlbmFtZShvYmotPnR5cGUpLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwl2ZnByaW50ZihzdGRlcnIsIGVyciwgcGFyYW1zKTsKKwlmcHV0cygiXG4iLCBzdGRlcnIpOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQorc3RhdGljIGludCBvYmplcnJvcihzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwllcnJvcnNfZm91bmQgfD0gRVJST1JfT0JKRUNUOworCW9ianJlcG9ydChvYmosICJlcnJvciIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlyZXR1cm4gLTE7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitzdGF0aWMgaW50IGZzY2tfZXJyb3JfZnVuYyhzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJb2JqcmVwb3J0KG9iaiwgKHR5cGUgPT0gRlNDS19XQVJOKSA/ICJ3YXJuaW5nIiA6ICJlcnJvciIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlyZXR1cm4gKHR5cGUgPT0gRlNDS19XQVJOKSA/IDAgOiAxOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9hcnJheSBwZW5kaW5nOworCitzdGF0aWMgaW50IG1hcmtfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgaW50IHR5cGUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9iamVjdCAqcGFyZW50ID0gZGF0YTsKKworCS8qCisJICogVGhlIG9ubHkgY2FzZSBkYXRhIGlzIE5VTEwgb3IgdHlwZSBpcyBPQkpfQU5ZIGlzIHdoZW4KKwkgKiBtYXJrX29iamVjdF9yZWFjaGFibGUoKSBjYWxscyB1cy4gIEFsbCB0aGUgY2FsbGVycyBvZgorCSAqIHRoYXQgZnVuY3Rpb24gaGFzIG5vbi1OVUxMIG9iaiBoZW5jZSAuLi4KKwkgKi8KKwlpZiAoIW9iaikgeworCQkvKiAuLi4gdGhlc2UgcmVmZXJlbmNlcyB0byBwYXJlbnQtPmZsZCBhcmUgc2FmZSBoZXJlICovCisJCXByaW50ZigiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIsCisJCQkgICB0eXBlbmFtZShwYXJlbnQtPnR5cGUpLCBzaGExX3RvX2hleChwYXJlbnQtPnNoYTEpKTsKKwkJcHJpbnRmKCJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIiwKKwkJCSAgICh0eXBlID09IE9CSl9BTlkgPyAidW5rbm93biIgOiB0eXBlbmFtZSh0eXBlKSksICJ1bmtub3duIik7CisJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CisJCXJldHVybiAxOworCX0KKworCWlmICh0eXBlICE9IE9CSl9BTlkgJiYgb2JqLT50eXBlICE9IHR5cGUpCisJCS8qIC4uLiBhbmQgdGhlIHJlZmVyZW5jZSB0byBwYXJlbnQgaXMgc2FmZSBoZXJlICovCisJCW9iamVycm9yKHBhcmVudCwgIndyb25nIG9iamVjdCB0eXBlIGluIGxpbmsiKTsKKworCWlmIChvYmotPmZsYWdzICYgUkVBQ0hBQkxFKQorCQlyZXR1cm4gMDsKKwlvYmotPmZsYWdzIHw9IFJFQUNIQUJMRTsKKwlpZiAoIW9iai0+cGFyc2VkKSB7CisJCWlmIChwYXJlbnQgJiYgIWhhc19zaGExX2ZpbGUob2JqLT5zaGExKSkgeworCQkJcHJpbnRmKCJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIiwKKwkJCQkgdHlwZW5hbWUocGFyZW50LT50eXBlKSwgc2hhMV90b19oZXgocGFyZW50LT5zaGExKSk7CisJCQlwcmludGYoIiAgICAgICAgICAgICAgdG8gJTdzICVzXG4iLAorCQkJCSB0eXBlbmFtZShvYmotPnR5cGUpLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwkJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJYWRkX29iamVjdF9hcnJheShvYmosICh2b2lkICopIHBhcmVudCwgJnBlbmRpbmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYXJrX29iamVjdF9yZWFjaGFibGUoc3RydWN0IG9iamVjdCAqb2JqKQoreworCW1hcmtfb2JqZWN0KG9iaiwgT0JKX0FOWSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgdHJhdmVyc2Vfb25lX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgdHJlZSAqdHJlZSA9IE5VTEw7CisKKwlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCW9iai0+cGFyc2VkID0gMDsKKwkJdHJlZSA9IChzdHJ1Y3QgdHJlZSAqKW9iajsKKwkJaWYgKHBhcnNlX3RyZWUodHJlZSkgPCAwKQorCQkJcmV0dXJuIDE7IC8qIGVycm9yIGFscmVhZHkgZGlzcGxheWVkICovCisJfQorCXJlc3VsdCA9IGZzY2tfd2FsayhvYmosIG1hcmtfb2JqZWN0LCBvYmopOworCWlmICh0cmVlKSB7CisJCWZyZWUodHJlZS0+YnVmZmVyKTsKKwkJdHJlZS0+YnVmZmVyID0gTlVMTDsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB0cmF2ZXJzZV9yZWFjaGFibGUodm9pZCkKK3sKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbnIgPSAwOworCWludCByZXN1bHQgPSAwOworCWlmIChzaG93X3Byb2dyZXNzKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzX2RlbGF5KCJDaGVja2luZyBjb25uZWN0aXZpdHkiLCAwLCAwLCAyKTsKKwl3aGlsZSAocGVuZGluZy5ucikgeworCQlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnRyeTsKKwkJc3RydWN0IG9iamVjdCAqb2JqOworCisJCWVudHJ5ID0gcGVuZGluZy5vYmplY3RzICsgLS1wZW5kaW5nLm5yOworCQlvYmogPSBlbnRyeS0+aXRlbTsKKwkJcmVzdWx0IHw9IHRyYXZlcnNlX29uZV9vYmplY3Qob2JqKTsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytucik7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwlyZXR1cm4gISFyZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgbWFya191c2VkKHN0cnVjdCBvYmplY3QgKm9iaiwgaW50IHR5cGUsIHZvaWQgKmRhdGEpCit7CisJaWYgKCFvYmopCisJCXJldHVybiAxOworCW9iai0+dXNlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBhIHNpbmdsZSByZWFjaGFibGUgb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX3JlYWNoYWJsZV9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCS8qCisJICogV2Ugb2J2aW91c2x5IHdhbnQgdGhlIG9iamVjdCB0byBiZSBwYXJzZWQsCisJICogZXhjZXB0IGlmIGl0IHdhcyBpbiBhIHBhY2stZmlsZSBhbmQgd2UgZGlkbid0CisJICogZG8gYSBmdWxsIGZzY2sKKwkgKi8KKwlpZiAoIW9iai0+cGFyc2VkKSB7CisJCWlmIChoYXNfc2hhMV9wYWNrKG9iai0+c2hhMSkpCisJCQlyZXR1cm47IC8qIGl0IGlzIGluIHBhY2sgLSBmb3JnZXQgYWJvdXQgaXQgKi8KKwkJcHJpbnRmKCJtaXNzaW5nICVzICVzXG4iLCB0eXBlbmFtZShvYmotPnR5cGUpLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1JFQUNIQUJMRTsKKwkJcmV0dXJuOworCX0KK30KKworLyoKKyAqIENoZWNrIGEgc2luZ2xlIHVucmVhY2hhYmxlIG9iamVjdAorICovCitzdGF0aWMgdm9pZCBjaGVja191bnJlYWNoYWJsZV9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCS8qCisJICogTWlzc2luZyB1bnJlYWNoYWJsZSBvYmplY3Q/IElnbm9yZSBpdC4gSXQncyBub3QgbGlrZQorCSAqIHdlIG1pc3MgaXQgKHNpbmNlIGl0IGNhbid0IGJlIHJlYWNoZWQpLCBub3IgZG8gd2Ugd2FudAorCSAqIHRvIGNvbXBsYWluIGFib3V0IGl0IGJlaW5nIHVucmVhY2hhYmxlIChzaW5jZSBpdCBkb2VzCisJICogbm90IGV4aXN0KS4KKwkgKi8KKwlpZiAoIW9iai0+cGFyc2VkKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVucmVhY2hhYmxlIG9iamVjdCB0aGF0IGV4aXN0cz8gU2hvdyBpdCBpZiBhc2tlZCB0bywKKwkgKiBzaW5jZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGlzIHBydW5hYmxlLgorCSAqLworCWlmIChzaG93X3VucmVhY2hhYmxlKSB7CisJCXByaW50ZigidW5yZWFjaGFibGUgJXMgJXNcbiIsIHR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiAiIXVzZWQiIG1lYW5zIHRoYXQgbm90aGluZyBhdCBhbGwgcG9pbnRzIHRvIGl0LCBpbmNsdWRpbmcKKwkgKiBvdGhlciB1bnJlYWNoYWJsZSBvYmplY3RzLiBJbiBvdGhlciB3b3JkcywgaXQncyB0aGUgInRpcCIKKwkgKiBvZiBzb21lIHNldCBvZiB1bnJlYWNoYWJsZSBvYmplY3RzLCB1c3VhbGx5IGEgY29tbWl0IHRoYXQKKwkgKiBnb3QgZHJvcHBlZC4KKwkgKgorCSAqIFN1Y2ggc3RhcnRpbmcgcG9pbnRzIGFyZSBtb3JlIGludGVyZXN0aW5nIHRoYW4gc29tZSByYW5kb20KKwkgKiBzZXQgb2YgdW5yZWFjaGFibGUgb2JqZWN0cywgc28gd2Ugc2hvdyB0aGVtIGV2ZW4gaWYgdGhlIHVzZXIKKwkgKiBoYXNuJ3QgYXNrZWQgZm9yIF9hbGxfIHVucmVhY2hhYmxlIG9iamVjdHMuIElmIHlvdSBoYXZlCisJICogZGVsZXRlZCBhIGJyYW5jaCBieSBtaXN0YWtlLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIHRvCisJICogc3RhcnQgbG9va2luZyBhdCwgZm9yIGV4YW1wbGUuCisJICovCisJaWYgKCFvYmotPnVzZWQpIHsKKwkJaWYgKHNob3dfZGFuZ2xpbmcpCisJCQlwcmludGYoImRhbmdsaW5nICVzICVzXG4iLCB0eXBlbmFtZShvYmotPnR5cGUpLAorCQkJICAgICAgIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQlpZiAod3JpdGVfbG9zdF9hbmRfZm91bmQpIHsKKwkJCWNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGgoImxvc3QtZm91bmQvJXMvJXMiLAorCQkJCW9iai0+dHlwZSA9PSBPQkpfQ09NTUlUID8gImNvbW1pdCIgOiAib3RoZXIiLAorCQkJCXNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQkJRklMRSAqZjsKKworCQkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoZmlsZW5hbWUpKSB7CisJCQkJZXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgbG9zdC1mb3VuZCIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmICghKGYgPSBmb3BlbihmaWxlbmFtZSwgInciKSkpCisJCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAnJXMnIiwgZmlsZW5hbWUpOworCQkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgeworCQkJCWlmIChzdHJlYW1fYmxvYl90b19mZChmaWxlbm8oZiksIG9iai0+c2hhMSwgTlVMTCwgMSkpCisJCQkJCWRpZV9lcnJubygiQ291bGQgbm90IHdyaXRlICclcyciLCBmaWxlbmFtZSk7CisJCQl9IGVsc2UKKwkJCQlmcHJpbnRmKGYsICIlc1xuIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJCQlpZiAoZmNsb3NlKGYpKQorCQkJCWRpZV9lcnJubygiQ291bGQgbm90IGZpbmlzaCAnJXMnIiwKKwkJCQkJICBmaWxlbmFtZSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT3RoZXJ3aXNlPyBJdCdzIHRoZXJlLCBpdCdzIHVucmVhY2hhYmxlLCBhbmQgc29tZSBvdGhlciB1bnJlYWNoYWJsZQorCSAqIG9iamVjdCBwb2ludHMgdG8gaXQuIElnbm9yZSBpdCAtIGl0J3Mgbm90IGludGVyZXN0aW5nLCBhbmQgd2Ugc2hvd2VkCisJICogYWxsIHRoZSBpbnRlcmVzdGluZyBjYXNlcyBhYm92ZS4KKwkgKi8KK30KKworc3RhdGljIHZvaWQgY2hlY2tfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyAlc1xuIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisKKwlpZiAob2JqLT5mbGFncyAmIFJFQUNIQUJMRSkKKwkJY2hlY2tfcmVhY2hhYmxlX29iamVjdChvYmopOworCWVsc2UKKwkJY2hlY2tfdW5yZWFjaGFibGVfb2JqZWN0KG9iaik7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2Nvbm5lY3Rpdml0eSh2b2lkKQoreworCWludCBpLCBtYXg7CisKKwkvKiBUcmF2ZXJzZSB0aGUgcGVuZGluZyByZWFjaGFibGUgb2JqZWN0cyAqLworCXRyYXZlcnNlX3JlYWNoYWJsZSgpOworCisJLyogTG9vayB1cCBhbGwgdGhlIHJlcXVpcmVtZW50cywgd2FybiBhYm91dCBtaXNzaW5nIG9iamVjdHMuLiAqLworCW1heCA9IGdldF9tYXhfb2JqZWN0X2luZGV4KCk7CisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKVxuIiwgbWF4KTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBnZXRfaW5kZXhlZF9vYmplY3QoaSk7CisKKwkJaWYgKG9iaikKKwkJCWNoZWNrX29iamVjdChvYmopOworCX0KK30KKworc3RhdGljIGludCBmc2NrX29iaihzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJaWYgKG9iai0+ZmxhZ3MgJiBTRUVOKQorCQlyZXR1cm4gMDsKKwlvYmotPmZsYWdzIHw9IFNFRU47CisKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyAlcyAlc1xuIiwKKwkJCXR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCisJaWYgKGZzY2tfd2FsayhvYmosIG1hcmtfdXNlZCwgTlVMTCkpCisJCW9iamVycm9yKG9iaiwgImJyb2tlbiBsaW5rcyIpOworCWlmIChmc2NrX29iamVjdChvYmosIGNoZWNrX3N0cmljdCwgZnNja19lcnJvcl9mdW5jKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQlzdHJ1Y3QgdHJlZSAqaXRlbSA9IChzdHJ1Y3QgdHJlZSAqKSBvYmo7CisKKwkJZnJlZShpdGVtLT5idWZmZXIpOworCQlpdGVtLT5idWZmZXIgPSBOVUxMOworCX0KKworCWlmIChvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKSBvYmo7CisKKwkJZnJlZShjb21taXQtPmJ1ZmZlcik7CisJCWNvbW1pdC0+YnVmZmVyID0gTlVMTDsKKworCQlpZiAoIWNvbW1pdC0+cGFyZW50cyAmJiBzaG93X3Jvb3QpCisJCQlwcmludGYoInJvb3QgJXNcbiIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwl9CisKKwlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJc3RydWN0IHRhZyAqdGFnID0gKHN0cnVjdCB0YWcgKikgb2JqOworCisJCWlmIChzaG93X3RhZ3MgJiYgdGFnLT50YWdnZWQpIHsKKwkJCXByaW50ZigidGFnZ2VkICVzICVzIiwgdHlwZW5hbWUodGFnLT50YWdnZWQtPnR5cGUpLCBzaGExX3RvX2hleCh0YWctPnRhZ2dlZC0+c2hhMSkpOworCQkJcHJpbnRmKCIgKCVzKSBpbiAlc1xuIiwgdGFnLT50YWcsIHNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBhcnNlX29iamVjdChzaGExKTsKKwlpZiAoIW9iaikgeworCQllcnJvcnNfZm91bmQgfD0gRVJST1JfT0JKRUNUOworCQlyZXR1cm4gZXJyb3IoIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nIiwKKwkJCSAgICAgc2hhMV90b19oZXgoc2hhMSkpOworCX0KKwlyZXR1cm4gZnNja19vYmoob2JqKTsKK30KKworc3RhdGljIGludCBmc2NrX29ial9idWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpidWZmZXIsIGludCAqZWF0ZW4pCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCW9iaiA9IHBhcnNlX29iamVjdF9idWZmZXIoc2hhMSwgdHlwZSwgc2l6ZSwgYnVmZmVyLCBlYXRlbik7CisJaWYgKCFvYmopIHsKKwkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX09CSkVDVDsKKwkJcmV0dXJuIGVycm9yKCIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisJcmV0dXJuIGZzY2tfb2JqKG9iaik7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBzb3J0aW5nIGNodW5rIHNpemU6IG1ha2UgaXQgcmVhc29uYWJseQorICogYmlnIHNvIHRoYXQgd2UgY2FuIHNvcnQgd2VsbC4uCisgKi8KKyNkZWZpbmUgTUFYX1NIQTFfRU5UUklFUyAoMTAyNCkKKworc3RydWN0IHNoYTFfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgaW5vOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Cit9OworCitzdGF0aWMgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIG5yOworCXN0cnVjdCBzaGExX2VudHJ5ICplbnRyeVtNQVhfU0hBMV9FTlRSSUVTXTsKK30gc2hhMV9saXN0OworCitzdGF0aWMgaW50IGlub19jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3Qgc2hhMV9lbnRyeSAqYSA9IF9hLCAqYiA9IF9iOworCXVuc2lnbmVkIGxvbmcgaW5vMSA9IGEtPmlubywgaW5vMiA9IGItPmlubzsKKwlyZXR1cm4gaW5vMSA8IGlubzIgPyAtMSA6IGlubzEgPiBpbm8yID8gMSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZzY2tfc2hhMV9saXN0KHZvaWQpCit7CisJaW50IGksIG5yID0gc2hhMV9saXN0Lm5yOworCisJaWYgKFNPUlRfRElSRU5UKQorCQlxc29ydChzaGExX2xpc3QuZW50cnksIG5yLAorCQkgICAgICBzaXplb2Yoc3RydWN0IHNoYTFfZW50cnkgKiksIGlub19jb21wYXJlKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlzdHJ1Y3Qgc2hhMV9lbnRyeSAqZW50cnkgPSBzaGExX2xpc3QuZW50cnlbaV07CisJCXVuc2lnbmVkIGNoYXIgKnNoYTEgPSBlbnRyeS0+c2hhMTsKKworCQlzaGExX2xpc3QuZW50cnlbaV0gPSBOVUxMOworCQlmc2NrX3NoYTEoc2hhMSk7CisJCWZyZWUoZW50cnkpOworCX0KKwlzaGExX2xpc3QubnIgPSAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfc2hhMV9saXN0KHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXN0cnVjdCBzaGExX2VudHJ5ICplbnRyeSA9IHhtYWxsb2Moc2l6ZW9mKCplbnRyeSkpOworCWludCBucjsKKworCWVudHJ5LT5pbm8gPSBpbm87CisJaGFzaGNweShlbnRyeS0+c2hhMSwgc2hhMSk7CisJbnIgPSBzaGExX2xpc3QubnI7CisJaWYgKG5yID09IE1BWF9TSEExX0VOVFJJRVMpIHsKKwkJZnNja19zaGExX2xpc3QoKTsKKwkJbnIgPSAwOworCX0KKwlzaGExX2xpc3QuZW50cnlbbnJdID0gZW50cnk7CisJc2hhMV9saXN0Lm5yID0gKytucjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfbG9vc2Vfb2JqZWN0X2ZpbGUoc3RydWN0IGRpcmVudCAqZGUsCisJCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaWYgKHN0cmxlbihkZS0+ZF9uYW1lKSAhPSAzOCkKKwkJcmV0dXJuIDA7CisJbWVtY3B5KG5hbWUgKyAyLCBkZS0+ZF9uYW1lLCAzOSk7CisJcmV0dXJuICFnZXRfc2hhMV9oZXgobmFtZSwgc2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIGZzY2tfZGlyKGludCBpLCBjaGFyICpwYXRoKQoreworCURJUiAqZGlyID0gb3BlbmRpcihwYXRoKTsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwljaGFyIG5hbWVbMTAwXTsKKworCWlmICghZGlyKQorCQlyZXR1cm47CisKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyBkaXJlY3RvcnkgJXNcbiIsIHBhdGgpOworCisJc3ByaW50ZihuYW1lLCAiJTAyeCIsIGkpOworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfbG9vc2Vfb2JqZWN0X2ZpbGUoZGUsIG5hbWUsIHNoYTEpKSB7CisJCQlhZGRfc2hhMV9saXN0KHNoYTEsIERJUkVOVF9TT1JUX0hJTlQoZGUpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcHJlZml4Y21wKGRlLT5kX25hbWUsICJ0bXBfb2JqXyIpKQorCQkJY29udGludWU7CisJCWZwcmludGYoc3RkZXJyLCAiYmFkIHNoYTEgZmlsZTogJXMvJXNcbiIsIHBhdGgsIGRlLT5kX25hbWUpOworCX0KKwljbG9zZWRpcihkaXIpOworfQorCitzdGF0aWMgaW50IGRlZmF1bHRfcmVmczsKKworc3RhdGljIGludCBmc2NrX2hhbmRsZV9yZWZsb2dfZW50KHVuc2lnbmVkIGNoYXIgKm9zaGExLCB1bnNpZ25lZCBjaGFyICpuc2hhMSwKKwkJY29uc3QgY2hhciAqZW1haWwsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wLCBpbnQgdHosCisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiQ2hlY2tpbmcgcmVmbG9nICVzLT4lc1xuIiwKKwkJCXNoYTFfdG9faGV4KG9zaGExKSwgc2hhMV90b19oZXgobnNoYTEpKTsKKworCWlmICghaXNfbnVsbF9zaGExKG9zaGExKSkgeworCQlvYmogPSBsb29rdXBfb2JqZWN0KG9zaGExKTsKKwkJaWYgKG9iaikgeworCQkJb2JqLT51c2VkID0gMTsKKwkJCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOworCQl9CisJfQorCW9iaiA9IGxvb2t1cF9vYmplY3QobnNoYTEpOworCWlmIChvYmopIHsKKwkJb2JqLT51c2VkID0gMTsKKwkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfaGFuZGxlX3JlZmxvZyhjb25zdCBjaGFyICpsb2duYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlmb3JfZWFjaF9yZWZsb2dfZW50KGxvZ25hbWUsIGZzY2tfaGFuZGxlX3JlZmxvZ19lbnQsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX2JyYW5jaChjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXJldHVybiAhc3RyY21wKHJlZm5hbWUsICJIRUFEIikgfHwgIXByZWZpeGNtcChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKTsKK30KKworc3RhdGljIGludCBmc2NrX2hhbmRsZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJb2JqID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKSB7CisJCWVycm9yKCIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiLCByZWZuYW1lLCBzaGExX3RvX2hleChzaGExKSk7CisJCS8qIFdlJ2xsIGNvbnRpbnVlIHdpdGggdGhlIHJlc3QgZGVzcGl0ZSB0aGUgZXJyb3IuLiAqLworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUICYmIGlzX2JyYW5jaChyZWZuYW1lKSkKKwkJZXJyb3IoIiVzOiBub3QgYSBjb21taXQiLCByZWZuYW1lKTsKKwlkZWZhdWx0X3JlZnMrKzsKKwlvYmotPnVzZWQgPSAxOworCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9kZWZhdWx0X2hlYWRzKHZvaWQpCit7CisJaWYgKGhlYWRfcG9pbnRzX2F0ICYmICFpc19udWxsX3NoYTEoaGVhZF9zaGExKSkKKwkJZnNja19oYW5kbGVfcmVmKCJIRUFEIiwgaGVhZF9zaGExLCAwLCBOVUxMKTsKKwlmb3JfZWFjaF9yZWYoZnNja19oYW5kbGVfcmVmLCBOVUxMKTsKKwlpZiAoaW5jbHVkZV9yZWZsb2dzKQorCQlmb3JfZWFjaF9yZWZsb2coZnNja19oYW5kbGVfcmVmbG9nLCBOVUxMKTsKKworCS8qCisJICogTm90IGhhdmluZyBhbnkgZGVmYXVsdCBoZWFkcyBpc24ndCByZWFsbHkgZmF0YWwsIGJ1dAorCSAqIGl0IGRvZXMgbWVhbiB0aGF0ICItLXVucmVhY2hhYmxlIiBubyBsb25nZXIgbWFrZXMgYW55CisJICogc2Vuc2UgKHNpbmNlIGluIHRoaXMgY2FzZSBldmVyeXRoaW5nIHdpbGwgb2J2aW91c2x5CisJICogYmUgdW5yZWFjaGFibGUgYnkgZGVmaW5pdGlvbi4KKwkgKgorCSAqIFNob3dpbmcgZGFuZ2xpbmcgb2JqZWN0cyBpcyB2YWxpZCwgdGhvdWdoIChhcyB0aG9zZQorCSAqIGRhbmdsaW5nIG9iamVjdHMgYXJlIGxpa2VseSBsb3N0IGhlYWRzKS4KKwkgKgorCSAqIFNvIHdlIGp1c3QgcHJpbnQgYSB3YXJuaW5nIGFib3V0IGl0LCBhbmQgY2xlYXIgdGhlCisJICogInNob3dfdW5yZWFjaGFibGUiIGZsYWcuCisJICovCisJaWYgKCFkZWZhdWx0X3JlZnMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJub3RpY2U6IE5vIGRlZmF1bHQgcmVmZXJlbmNlc1xuIik7CisJCXNob3dfdW5yZWFjaGFibGUgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgZnNja19vYmplY3RfZGlyKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGk7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5XG4iKTsKKworCWlmIChzaG93X3Byb2dyZXNzKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKCJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiLCAyNTYpOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlzdGF0aWMgY2hhciBkaXJbNDA5Nl07CisJCXNwcmludGYoZGlyLCAiJXMvJTAyeCIsIHBhdGgsIGkpOworCQlmc2NrX2RpcihpLCBkaXIpOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpKzEpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisJZnNja19zaGExX2xpc3QoKTsKK30KKworc3RhdGljIGludCBmc2NrX2hlYWRfbGluayh2b2lkKQoreworCWludCBmbGFnOworCWludCBudWxsX2lzX2Vycm9yID0gMDsKKworCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nIEhFQUQgbGlua1xuIik7CisKKwloZWFkX3BvaW50c19hdCA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIGhlYWRfc2hhMSwgMCwgJmZsYWcpOworCWlmICghaGVhZF9wb2ludHNfYXQpCisJCXJldHVybiBlcnJvcigiSW52YWxpZCBIRUFEIik7CisJaWYgKCFzdHJjbXAoaGVhZF9wb2ludHNfYXQsICJIRUFEIikpCisJCS8qIGRldGFjaGVkIEhFQUQgKi8KKwkJbnVsbF9pc19lcnJvciA9IDE7CisJZWxzZSBpZiAocHJlZml4Y21wKGhlYWRfcG9pbnRzX2F0LCAicmVmcy9oZWFkcy8iKSkKKwkJcmV0dXJuIGVycm9yKCJIRUFEIHBvaW50cyB0byBzb21ldGhpbmcgc3RyYW5nZSAoJXMpIiwKKwkJCSAgICAgaGVhZF9wb2ludHNfYXQpOworCWlmIChpc19udWxsX3NoYTEoaGVhZF9zaGExKSkgeworCQlpZiAobnVsbF9pc19lcnJvcikKKwkJCXJldHVybiBlcnJvcigiSEVBRDogZGV0YWNoZWQgSEVBRCBwb2ludHMgYXQgbm90aGluZyIpOworCQlmcHJpbnRmKHN0ZGVyciwgIm5vdGljZTogSEVBRCBwb2ludHMgdG8gYW4gdW5ib3JuIGJyYW5jaCAoJXMpXG4iLAorCQkJaGVhZF9wb2ludHNfYXQgKyAxMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfY2FjaGVfdHJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQpCit7CisJaW50IGk7CisJaW50IGVyciA9IDA7CisKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyBjYWNoZSB0cmVlXG4iKTsKKworCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwYXJzZV9vYmplY3QoaXQtPnNoYTEpOworCQlpZiAoIW9iaikgeworCQkJZXJyb3IoIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciBpbiBjYWNoZS10cmVlIiwKKwkJCSAgICAgIHNoYTFfdG9faGV4KGl0LT5zaGExKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlvYmotPnVzZWQgPSAxOworCQltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKKwkJaWYgKG9iai0+dHlwZSAhPSBPQkpfVFJFRSkKKwkJCWVyciB8PSBvYmplcnJvcihvYmosICJub24tdHJlZSBpbiBjYWNoZS10cmVlIik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBpdC0+c3VidHJlZV9ucjsgaSsrKQorCQllcnIgfD0gZnNja19jYWNoZV90cmVlKGl0LT5kb3duW2ldLT5jYWNoZV90cmVlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGZzY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGZzY2sgW29wdGlvbnNdIFs8b2JqZWN0Pi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IG9wdGlvbiBmc2NrX29wdHNbXSA9IHsKKwlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlIikpLAorCU9QVF9CT09MRUFOKDAsICJ1bnJlYWNoYWJsZSIsICZzaG93X3VucmVhY2hhYmxlLCBOXygic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIikpLAorCU9QVF9CT09MKDAsICJkYW5nbGluZyIsICZzaG93X2RhbmdsaW5nLCBOXygic2hvdyBkYW5nbGluZyBvYmplY3RzIikpLAorCU9QVF9CT09MRUFOKDAsICJ0YWdzIiwgJnNob3dfdGFncywgTl8oInJlcG9ydCB0YWdzIikpLAorCU9QVF9CT09MRUFOKDAsICJyb290IiwgJnNob3dfcm9vdCwgTl8oInJlcG9ydCByb290IG5vZGVzIikpLAorCU9QVF9CT09MRUFOKDAsICJjYWNoZSIsICZrZWVwX2NhY2hlX29iamVjdHMsIE5fKCJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIpKSwKKwlPUFRfQk9PTEVBTigwLCAicmVmbG9ncyIsICZpbmNsdWRlX3JlZmxvZ3MsIE5fKCJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiKSksCisJT1BUX0JPT0xFQU4oMCwgImZ1bGwiLCAmY2hlY2tfZnVsbCwgTl8oImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIikpLAorCU9QVF9CT09MRUFOKDAsICJzdHJpY3QiLCAmY2hlY2tfc3RyaWN0LCBOXygiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIikpLAorCU9QVF9CT09MRUFOKDAsICJsb3N0LWZvdW5kIiwgJndyaXRlX2xvc3RfYW5kX2ZvdW5kLAorCQkJCU5fKCJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIpKSwKKwlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmc2hvd19wcm9ncmVzcywgTl8oInNob3cgcHJvZ3Jlc3MiKSksCisJT1BUX0VORCgpLAorfTsKKworaW50IGNtZF9mc2NrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBoZWFkczsKKwlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0OworCisJZXJyb3JzX2ZvdW5kID0gMDsKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGZzY2tfb3B0cywgZnNja191c2FnZSwgMCk7CisKKwlpZiAoc2hvd19wcm9ncmVzcyA9PSAtMSkKKwkJc2hvd19wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKwlpZiAodmVyYm9zZSkKKwkJc2hvd19wcm9ncmVzcyA9IDA7CisKKwlpZiAod3JpdGVfbG9zdF9hbmRfZm91bmQpIHsKKwkJY2hlY2tfZnVsbCA9IDE7CisJCWluY2x1ZGVfcmVmbG9ncyA9IDA7CisJfQorCisJZnNja19oZWFkX2xpbmsoKTsKKwlmc2NrX29iamVjdF9kaXIoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisKKwlwcmVwYXJlX2FsdF9vZGIoKTsKKwlmb3IgKGFsdCA9IGFsdF9vZGJfbGlzdDsgYWx0OyBhbHQgPSBhbHQtPm5leHQpIHsKKwkJY2hhciBuYW1lYnVmW1BBVEhfTUFYXTsKKwkJaW50IG5hbWVsZW4gPSBhbHQtPm5hbWUgLSBhbHQtPmJhc2U7CisJCW1lbWNweShuYW1lYnVmLCBhbHQtPmJhc2UsIG5hbWVsZW4pOworCQluYW1lYnVmW25hbWVsZW4gLSAxXSA9IDA7CisJCWZzY2tfb2JqZWN0X2RpcihuYW1lYnVmKTsKKwl9CisKKwlpZiAoY2hlY2tfZnVsbCkgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwkJdWludDMyX3QgdG90YWwgPSAwLCBjb3VudCA9IDA7CisJCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCisJCXByZXBhcmVfcGFja2VkX2dpdCgpOworCisJCWlmIChzaG93X3Byb2dyZXNzKSB7CisJCQlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCQkJCWNvbnRpbnVlOworCQkJCXRvdGFsICs9IHAtPm51bV9vYmplY3RzOworCQkJfQorCisJCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKCJDaGVja2luZyBvYmplY3RzIiwgdG90YWwpOworCQl9CisJCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQkvKiB2ZXJpZnkgZ2l2ZXMgZXJyb3IgbWVzc2FnZXMgaXRzZWxmICovCisJCQlpZiAodmVyaWZ5X3BhY2socCwgZnNja19vYmpfYnVmZmVyLAorCQkJCQlwcm9ncmVzcywgY291bnQpKQorCQkJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9QQUNLOworCQkJY291bnQgKz0gcC0+bnVtX29iamVjdHM7CisJCX0KKwkJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCX0KKworCWhlYWRzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWlmICghZ2V0X3NoYTEoYXJnLCBzaGExKSkgeworCQkJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKKworCQkJLyogRXJyb3IgaXMgcHJpbnRlZCBieSBsb29rdXBfb2JqZWN0KCkuICovCisJCQlpZiAoIW9iaikKKwkJCQljb250aW51ZTsKKworCQkJb2JqLT51c2VkID0gMTsKKwkJCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOworCQkJaGVhZHMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVycm9yKCJpbnZhbGlkIHBhcmFtZXRlcjogZXhwZWN0ZWQgc2hhMSwgZ290ICclcyciLCBhcmcpOworCX0KKworCS8qCisJICogSWYgd2UndmUgbm90IGJlZW4gZ2l2ZW4gYW55IGV4cGxpY2l0IGhlYWQgaW5mb3JtYXRpb24sIGRvIHRoZQorCSAqIGRlZmF1bHQgb25lcyBmcm9tIC5naXQvcmVmcy4gV2UgYWxzbyBjb25zaWRlciB0aGUgaW5kZXggZmlsZQorCSAqIGluIHRoaXMgY2FzZSAoaWUgdGhpcyBpbXBsaWVzIC0tY2FjaGUpLgorCSAqLworCWlmICghaGVhZHMpIHsKKwkJZ2V0X2RlZmF1bHRfaGVhZHMoKTsKKwkJa2VlcF9jYWNoZV9vYmplY3RzID0gMTsKKwl9CisKKwlpZiAoa2VlcF9jYWNoZV9vYmplY3RzKSB7CisJCXJlYWRfY2FjaGUoKTsKKwkJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgbW9kZTsKKwkJCXN0cnVjdCBibG9iICpibG9iOworCQkJc3RydWN0IG9iamVjdCAqb2JqOworCisJCQltb2RlID0gYWN0aXZlX2NhY2hlW2ldLT5jZV9tb2RlOworCQkJaWYgKFNfSVNHSVRMSU5LKG1vZGUpKQorCQkJCWNvbnRpbnVlOworCQkJYmxvYiA9IGxvb2t1cF9ibG9iKGFjdGl2ZV9jYWNoZVtpXS0+c2hhMSk7CisJCQlpZiAoIWJsb2IpCisJCQkJY29udGludWU7CisJCQlvYmogPSAmYmxvYi0+b2JqZWN0OworCQkJb2JqLT51c2VkID0gMTsKKwkJCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOworCQl9CisJCWlmIChhY3RpdmVfY2FjaGVfdHJlZSkKKwkJCWZzY2tfY2FjaGVfdHJlZShhY3RpdmVfY2FjaGVfdHJlZSk7CisJfQorCisJY2hlY2tfY29ubmVjdGl2aXR5KCk7CisJcmV0dXJuIGVycm9yc19mb3VuZDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZ2MuYyBiL2J1aWx0aW4vZ2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmU2YzhkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9nYy5jCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogZ2l0IGdjIGJ1aWx0aW4gY29tbWFuZAorICoKKyAqIENsZWFudXAgdW5yZWFjaGFibGUgZmlsZXMgYW5kIG9wdGltaXplIHRoZSByZXBvc2l0b3J5LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBKYW1lcyBCb3dlcworICoKKyAqIEJhc2VkIG9uIGdpdC1nYy5zaCwgd2hpY2ggaXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2hhd24gTy4gUGVhcmNlCisgKi8KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworI2RlZmluZSBGQUlMRURfUlVOICJmYWlsZWQgdG8gcnVuICVzIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fZ2NfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGdjIFtvcHRpb25zXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgcGFja19yZWZzID0gMTsKK3N0YXRpYyBpbnQgYWdncmVzc2l2ZV93aW5kb3cgPSAyNTA7CitzdGF0aWMgaW50IGdjX2F1dG9fdGhyZXNob2xkID0gNjcwMDsKK3N0YXRpYyBpbnQgZ2NfYXV0b19wYWNrX2xpbWl0ID0gNTA7CitzdGF0aWMgY29uc3QgY2hhciAqcHJ1bmVfZXhwaXJlID0gIjIud2Vla3MuYWdvIjsKKworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IHBhY2tfcmVmc19jbWQgPSBBUkdWX0FSUkFZX0lOSVQ7CitzdGF0aWMgc3RydWN0IGFyZ3ZfYXJyYXkgcmVmbG9nID0gQVJHVl9BUlJBWV9JTklUOworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IHJlcGFjayA9IEFSR1ZfQVJSQVlfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBwcnVuZSA9IEFSR1ZfQVJSQVlfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSByZXJlcmUgPSBBUkdWX0FSUkFZX0lOSVQ7CisKK3N0YXRpYyBpbnQgZ2NfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImdjLnBhY2tyZWZzIikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjbXAodmFsdWUsICJub3RiYXJlIikpCisJCQlwYWNrX3JlZnMgPSAtMTsKKwkJZWxzZQorCQkJcGFja19yZWZzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZ2MuYWdncmVzc2l2ZXdpbmRvdyIpKSB7CisJCWFnZ3Jlc3NpdmVfd2luZG93ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJnYy5hdXRvIikpIHsKKwkJZ2NfYXV0b190aHJlc2hvbGQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImdjLmF1dG9wYWNrbGltaXQiKSkgeworCQlnY19hdXRvX3BhY2tfbGltaXQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImdjLnBydW5lZXhwaXJlIikpIHsKKwkJaWYgKHZhbHVlICYmIHN0cmNtcCh2YWx1ZSwgIm5vdyIpKSB7CisJCQl1bnNpZ25lZCBsb25nIG5vdyA9IGFwcHJveGlkYXRlKCJub3ciKTsKKwkJCWlmIChhcHByb3hpZGF0ZSh2YWx1ZSkgPj0gbm93KQorCQkJCXJldHVybiBlcnJvcihfKCJJbnZhbGlkICVzOiAnJXMnIiksIHZhciwgdmFsdWUpOworCQl9CisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmcHJ1bmVfZXhwaXJlLCB2YXIsIHZhbHVlKTsKKwl9CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgdG9vX21hbnlfbG9vc2Vfb2JqZWN0cyh2b2lkKQoreworCS8qCisJICogUXVpY2tseSBjaGVjayBpZiBhICJnYyIgaXMgbmVlZGVkLCBieSBlc3RpbWF0aW5nIGhvdworCSAqIG1hbnkgbG9vc2Ugb2JqZWN0cyB0aGVyZSBhcmUuICBCZWNhdXNlIFNIQS0xIGlzIGV2ZW5seQorCSAqIGRpc3RyaWJ1dGVkLCB3ZSBjYW4gY2hlY2sgb25seSBvbmUgYW5kIGdldCBhIHJlYXNvbmFibGUKKwkgKiBlc3RpbWF0ZS4KKwkgKi8KKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCWNvbnN0IGNoYXIgKm9iamRpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZW50OworCWludCBhdXRvX3RocmVzaG9sZDsKKwlpbnQgbnVtX2xvb3NlID0gMDsKKwlpbnQgbmVlZGVkID0gMDsKKworCWlmIChnY19hdXRvX3RocmVzaG9sZCA8PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChzaXplb2YocGF0aCkgPD0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvMTciLCBvYmpkaXIpKSB7CisJCXdhcm5pbmcoXygiaW5zYW5lbHkgbG9uZyBvYmplY3QgZGlyZWN0b3J5ICUuKnMiKSwgNTAsIG9iamRpcik7CisJCXJldHVybiAwOworCX0KKwlkaXIgPSBvcGVuZGlyKHBhdGgpOworCWlmICghZGlyKQorCQlyZXR1cm4gMDsKKworCWF1dG9fdGhyZXNob2xkID0gKGdjX2F1dG9fdGhyZXNob2xkICsgMjU1KSAvIDI1NjsKKwl3aGlsZSAoKGVudCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlpZiAoc3Ryc3BuKGVudC0+ZF9uYW1lLCAiMDEyMzQ1Njc4OWFiY2RlZiIpICE9IDM4IHx8CisJCSAgICBlbnQtPmRfbmFtZVszOF0gIT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCQlpZiAoKytudW1fbG9vc2UgPiBhdXRvX3RocmVzaG9sZCkgeworCQkJbmVlZGVkID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWNsb3NlZGlyKGRpcik7CisJcmV0dXJuIG5lZWRlZDsKK30KKworc3RhdGljIGludCB0b29fbWFueV9wYWNrcyh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCBjbnQ7CisKKwlpZiAoZ2NfYXV0b19wYWNrX2xpbWl0IDw9IDApCisJCXJldHVybiAwOworCisJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisJZm9yIChjbnQgPSAwLCBwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKCFwLT5wYWNrX2xvY2FsKQorCQkJY29udGludWU7CisJCWlmIChwLT5wYWNrX2tlZXApCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogUGVyaGFwcyBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgcGFjayBhbmQgY291bnQgb25seQorCQkgKiB2ZXJ5IHNtYWxsIG9uZXMgaGVyZT8KKwkJICovCisJCWNudCsrOworCX0KKwlyZXR1cm4gZ2NfYXV0b19wYWNrX2xpbWl0IDw9IGNudDsKK30KKworc3RhdGljIHZvaWQgYWRkX3JlcGFja19hbGxfb3B0aW9uKHZvaWQpCit7CisJaWYgKHBydW5lX2V4cGlyZSAmJiAhc3RyY21wKHBydW5lX2V4cGlyZSwgIm5vdyIpKQorCQlhcmd2X2FycmF5X3B1c2goJnJlcGFjaywgIi1hIik7CisJZWxzZSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmVwYWNrLCAiLUEiKTsKKwkJaWYgKHBydW5lX2V4cGlyZSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJnJlcGFjaywgIi0tdW5wYWNrLXVucmVhY2hhYmxlPSVzIiwgcHJ1bmVfZXhwaXJlKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmVlZF90b19nYyh2b2lkKQoreworCS8qCisJICogU2V0dGluZyBnYy5hdXRvIHRvIDAgb3IgbmVnYXRpdmUgY2FuIGRpc2FibGUgdGhlCisJICogYXV0b21hdGljIGdjLgorCSAqLworCWlmIChnY19hdXRvX3RocmVzaG9sZCA8PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIHRvbyBtYW55IGxvb3NlIG9iamVjdHMsIGJ1dCBub3QgdG9vIG1hbnkKKwkgKiBwYWNrcywgd2UgcnVuICJyZXBhY2sgLWQgLWwiLiAgSWYgdGhlcmUgYXJlIHRvbyBtYW55IHBhY2tzLAorCSAqIHdlIHJ1biAicmVwYWNrIC1BIC1kIC1sIi4gIE90aGVyd2lzZSB3ZSB0ZWxsIHRoZSBjYWxsZXIKKwkgKiB0aGVyZSBpcyBubyBuZWVkLgorCSAqLworCWlmICh0b29fbWFueV9wYWNrcygpKQorCQlhZGRfcmVwYWNrX2FsbF9vcHRpb24oKTsKKwllbHNlIGlmICghdG9vX21hbnlfbG9vc2Vfb2JqZWN0cygpKQorCQlyZXR1cm4gMDsKKworCWlmIChydW5faG9vayhOVUxMLCAicHJlLWF1dG8tZ2MiLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK2ludCBjbWRfZ2MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGFnZ3Jlc3NpdmUgPSAwOworCWludCBhdXRvX2djID0gMDsKKwlpbnQgcXVpZXQgPSAwOworCisJc3RydWN0IG9wdGlvbiBidWlsdGluX2djX29wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJCXsgT1BUSU9OX1NUUklORywgMCwgInBydW5lIiwgJnBydW5lX2V4cGlyZSwgTl8oImRhdGUiKSwKKwkJCU5fKCJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIpLAorCQkJUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KXBydW5lX2V4cGlyZSB9LAorCQlPUFRfQk9PTEVBTigwLCAiYWdncmVzc2l2ZSIsICZhZ2dyZXNzaXZlLCBOXygiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIikpLAorCQlPUFRfQk9PTEVBTigwLCAiYXV0byIsICZhdXRvX2djLCBOXygiZW5hYmxlIGF1dG8tZ2MgbW9kZSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fZ2NfdXNhZ2UsIGJ1aWx0aW5fZ2Nfb3B0aW9ucyk7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZwYWNrX3JlZnNfY21kLCAicGFjay1yZWZzIiwgIi0tYWxsIiwgIi0tcHJ1bmUiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZyZWZsb2csICJyZWZsb2ciLCAiZXhwaXJlIiwgIi0tYWxsIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNobCgmcmVwYWNrLCAicmVwYWNrIiwgIi1kIiwgIi1sIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNobCgmcHJ1bmUsICJwcnVuZSIsICItLWV4cGlyZSIsIE5VTEwgKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZyZXJlcmUsICJyZXJlcmUiLCAiZ2MiLCBOVUxMKTsKKworCWdpdF9jb25maWcoZ2NfY29uZmlnLCBOVUxMKTsKKworCWlmIChwYWNrX3JlZnMgPCAwKQorCQlwYWNrX3JlZnMgPSAhaXNfYmFyZV9yZXBvc2l0b3J5KCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZ2Nfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9nY191c2FnZSwgMCk7CisJaWYgKGFyZ2MgPiAwKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9nY191c2FnZSwgYnVpbHRpbl9nY19vcHRpb25zKTsKKworCWlmIChhZ2dyZXNzaXZlKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmVwYWNrLCAiLWYiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZyZXBhY2ssICItLWRlcHRoPTI1MCIpOworCQlpZiAoYWdncmVzc2l2ZV93aW5kb3cgPiAwKQorCQkJYXJndl9hcnJheV9wdXNoZigmcmVwYWNrLCAiLS13aW5kb3c9JWQiLCBhZ2dyZXNzaXZlX3dpbmRvdyk7CisJfQorCWlmIChxdWlldCkKKwkJYXJndl9hcnJheV9wdXNoKCZyZXBhY2ssICItcSIpOworCisJaWYgKGF1dG9fZ2MpIHsKKwkJLyoKKwkJICogQXV0by1nYyBzaG91bGQgYmUgbGVhc3QgaW50cnVzaXZlIGFzIHBvc3NpYmxlLgorCQkgKi8KKwkJaWYgKCFuZWVkX3RvX2djKCkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFxdWlldCkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuIFlvdSBtYXkgYWxzb1xuIgorCQkJCQkicnVuIFwiZ2l0IGdjXCIgbWFudWFsbHkuIFNlZSAiCisJCQkJCSJcImdpdCBoZWxwIGdjXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iKSk7CisJfSBlbHNlCisJCWFkZF9yZXBhY2tfYWxsX29wdGlvbigpOworCisJaWYgKHBhY2tfcmVmcyAmJiBydW5fY29tbWFuZF92X29wdChwYWNrX3JlZnNfY21kLmFyZ3YsIFJVTl9HSVRfQ01EKSkKKwkJcmV0dXJuIGVycm9yKEZBSUxFRF9SVU4sIHBhY2tfcmVmc19jbWQuYXJndlswXSk7CisKKwlpZiAocnVuX2NvbW1hbmRfdl9vcHQocmVmbG9nLmFyZ3YsIFJVTl9HSVRfQ01EKSkKKwkJcmV0dXJuIGVycm9yKEZBSUxFRF9SVU4sIHJlZmxvZy5hcmd2WzBdKTsKKworCWlmIChydW5fY29tbWFuZF92X29wdChyZXBhY2suYXJndiwgUlVOX0dJVF9DTUQpKQorCQlyZXR1cm4gZXJyb3IoRkFJTEVEX1JVTiwgcmVwYWNrLmFyZ3ZbMF0pOworCisJaWYgKHBydW5lX2V4cGlyZSkgeworCQlhcmd2X2FycmF5X3B1c2goJnBydW5lLCBwcnVuZV9leHBpcmUpOworCQlpZiAocXVpZXQpCisJCQlhcmd2X2FycmF5X3B1c2goJnBydW5lLCAiLS1uby1wcm9ncmVzcyIpOworCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQocHJ1bmUuYXJndiwgUlVOX0dJVF9DTUQpKQorCQkJcmV0dXJuIGVycm9yKEZBSUxFRF9SVU4sIHBydW5lLmFyZ3ZbMF0pOworCX0KKworCWlmIChydW5fY29tbWFuZF92X29wdChyZXJlcmUuYXJndiwgUlVOX0dJVF9DTUQpKQorCQlyZXR1cm4gZXJyb3IoRkFJTEVEX1JVTiwgcmVyZXJlLmFyZ3ZbMF0pOworCisJaWYgKGF1dG9fZ2MgJiYgdG9vX21hbnlfbG9vc2Vfb2JqZWN0cygpKQorCQl3YXJuaW5nKF8oIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyAiCisJCQkicnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIpKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ncmVwLmMgYi9idWlsdGluL2dyZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjUzMGE2Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9ncmVwLmMKQEAgLTAsMCArMSwxMDI1IEBACisvKgorICogQnVpbHRpbiAiZ2l0IGdyZXAiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJncmVwLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBncmVwX3VzYWdlW10gPSB7CisJTl8oImdpdCBncmVwIFtvcHRpb25zXSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHVzZV90aHJlYWRzID0gMTsKKworI2lmbmRlZiBOT19QVEhSRUFEUworI2RlZmluZSBUSFJFQURTIDgKK3N0YXRpYyBwdGhyZWFkX3QgdGhyZWFkc1tUSFJFQURTXTsKKworLyogV2UgdXNlIG9uZSBwcm9kdWNlciB0aHJlYWQgYW5kIFRIUkVBRFMgY29uc3VtZXIKKyAqIHRocmVhZHMuIFRoZSBwcm9kdWNlciBhZGRzIHN0cnVjdCB3b3JrX2l0ZW1zIHRvICd0b2RvJyBhbmQgdGhlCisgKiBjb25zdW1lcnMgcGljayB3b3JrIGl0ZW1zIGZyb20gdGhlIHNhbWUgYXJyYXkuCisgKi8KK3N0cnVjdCB3b3JrX2l0ZW0geworCXN0cnVjdCBncmVwX3NvdXJjZSBzb3VyY2U7CisJY2hhciBkb25lOworCXN0cnVjdCBzdHJidWYgb3V0OworfTsKKworLyogSW4gdGhlIHJhbmdlIFt0b2RvX2RvbmUsIHRvZG9fc3RhcnQpIGluICd0b2RvJyB3ZSBoYXZlIHdvcmtfaXRlbXMKKyAqIHRoYXQgaGF2ZSBiZWVuIG9yIGFyZSBwcm9jZXNzZWQgYnkgYSBjb25zdW1lciB0aHJlYWQuIFdlIGhhdmVuJ3QKKyAqIHdyaXR0ZW4gdGhlIHJlc3VsdCBmb3IgdGhlc2UgdG8gc3Rkb3V0IHlldC4KKyAqCisgKiBUaGUgd29ya19pdGVtcyBpbiBbdG9kb19zdGFydCwgdG9kb19lbmQpIGFyZSB3YWl0aW5nIHRvIGJlIHBpY2tlZAorICogdXAgYnkgYSBjb25zdW1lciB0aHJlYWQuCisgKgorICogVGhlIHJhbmdlcyBhcmUgbW9kdWxvIFRPRE9fU0laRS4KKyAqLworI2RlZmluZSBUT0RPX1NJWkUgMTI4CitzdGF0aWMgc3RydWN0IHdvcmtfaXRlbSB0b2RvW1RPRE9fU0laRV07CitzdGF0aWMgaW50IHRvZG9fc3RhcnQ7CitzdGF0aWMgaW50IHRvZG9fZW5kOworc3RhdGljIGludCB0b2RvX2RvbmU7CisKKy8qIEhhcyBhbGwgd29yayBpdGVtcyBiZWVuIGFkZGVkPyAqLworc3RhdGljIGludCBhbGxfd29ya19hZGRlZDsKKworLyogVGhpcyBsb2NrIHByb3RlY3RzIGFsbCB0aGUgdmFyaWFibGVzIGFib3ZlLiAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBncmVwX211dGV4OworCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JlcF9sb2NrKHZvaWQpCit7CisJaWYgKHVzZV90aHJlYWRzKQorCQlwdGhyZWFkX211dGV4X2xvY2soJmdyZXBfbXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JlcF91bmxvY2sodm9pZCkKK3sKKwlpZiAodXNlX3RocmVhZHMpCisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZncmVwX211dGV4KTsKK30KKworLyogU2lnbmFsbGVkIHdoZW4gYSBuZXcgd29ya19pdGVtIGlzIGFkZGVkIHRvIHRvZG8uICovCitzdGF0aWMgcHRocmVhZF9jb25kX3QgY29uZF9hZGQ7CisKKy8qIFNpZ25hbGxlZCB3aGVuIHRoZSByZXN1bHQgZnJvbSBvbmUgd29ya19pdGVtIGlzIHdyaXR0ZW4gdG8KKyAqIHN0ZG91dC4KKyAqLworc3RhdGljIHB0aHJlYWRfY29uZF90IGNvbmRfd3JpdGU7CisKKy8qIFNpZ25hbGxlZCB3aGVuIHdlIGFyZSBmaW5pc2hlZCB3aXRoIGV2ZXJ5dGhpbmcuICovCitzdGF0aWMgcHRocmVhZF9jb25kX3QgY29uZF9yZXN1bHQ7CisKK3N0YXRpYyBpbnQgc2tpcF9maXJzdF9saW5lOworCitzdGF0aWMgdm9pZCBhZGRfd29yayhzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgZW51bSBncmVwX3NvdXJjZV90eXBlIHR5cGUsCisJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqaWQpCit7CisJZ3JlcF9sb2NrKCk7CisKKwl3aGlsZSAoKHRvZG9fZW5kKzEpICUgQVJSQVlfU0laRSh0b2RvKSA9PSB0b2RvX2RvbmUpIHsKKwkJcHRocmVhZF9jb25kX3dhaXQoJmNvbmRfd3JpdGUsICZncmVwX211dGV4KTsKKwl9CisKKwlncmVwX3NvdXJjZV9pbml0KCZ0b2RvW3RvZG9fZW5kXS5zb3VyY2UsIHR5cGUsIG5hbWUsIGlkKTsKKwlpZiAob3B0LT5iaW5hcnkgIT0gR1JFUF9CSU5BUllfVEVYVCkKKwkJZ3JlcF9zb3VyY2VfbG9hZF9kcml2ZXIoJnRvZG9bdG9kb19lbmRdLnNvdXJjZSk7CisJdG9kb1t0b2RvX2VuZF0uZG9uZSA9IDA7CisJc3RyYnVmX3Jlc2V0KCZ0b2RvW3RvZG9fZW5kXS5vdXQpOworCXRvZG9fZW5kID0gKHRvZG9fZW5kICsgMSkgJSBBUlJBWV9TSVpFKHRvZG8pOworCisJcHRocmVhZF9jb25kX3NpZ25hbCgmY29uZF9hZGQpOworCWdyZXBfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd29ya19pdGVtICpnZXRfd29yayh2b2lkKQoreworCXN0cnVjdCB3b3JrX2l0ZW0gKnJldDsKKworCWdyZXBfbG9jaygpOworCXdoaWxlICh0b2RvX3N0YXJ0ID09IHRvZG9fZW5kICYmICFhbGxfd29ya19hZGRlZCkgeworCQlwdGhyZWFkX2NvbmRfd2FpdCgmY29uZF9hZGQsICZncmVwX211dGV4KTsKKwl9CisKKwlpZiAodG9kb19zdGFydCA9PSB0b2RvX2VuZCAmJiBhbGxfd29ya19hZGRlZCkgeworCQlyZXQgPSBOVUxMOworCX0gZWxzZSB7CisJCXJldCA9ICZ0b2RvW3RvZG9fc3RhcnRdOworCQl0b2RvX3N0YXJ0ID0gKHRvZG9fc3RhcnQgKyAxKSAlIEFSUkFZX1NJWkUodG9kbyk7CisJfQorCWdyZXBfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd29ya19kb25lKHN0cnVjdCB3b3JrX2l0ZW0gKncpCit7CisJaW50IG9sZF9kb25lOworCisJZ3JlcF9sb2NrKCk7CisJdy0+ZG9uZSA9IDE7CisJb2xkX2RvbmUgPSB0b2RvX2RvbmU7CisJZm9yKDsgdG9kb1t0b2RvX2RvbmVdLmRvbmUgJiYgdG9kb19kb25lICE9IHRvZG9fc3RhcnQ7CisJICAgIHRvZG9fZG9uZSA9ICh0b2RvX2RvbmUrMSkgJSBBUlJBWV9TSVpFKHRvZG8pKSB7CisJCXcgPSAmdG9kb1t0b2RvX2RvbmVdOworCQlpZiAody0+b3V0LmxlbikgeworCQkJY29uc3QgY2hhciAqcCA9IHctPm91dC5idWY7CisJCQlzaXplX3QgbGVuID0gdy0+b3V0LmxlbjsKKworCQkJLyogU2tpcCB0aGUgbGVhZGluZyBodW5rIG1hcmsgb2YgdGhlIGZpcnN0IGZpbGUuICovCisJCQlpZiAoc2tpcF9maXJzdF9saW5lKSB7CisJCQkJd2hpbGUgKGxlbikgeworCQkJCQlsZW4tLTsKKwkJCQkJaWYgKCpwKysgPT0gJ1xuJykKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlza2lwX2ZpcnN0X2xpbmUgPSAwOworCQkJfQorCisJCQl3cml0ZV9vcl9kaWUoMSwgcCwgbGVuKTsKKwkJfQorCQlncmVwX3NvdXJjZV9jbGVhcigmdy0+c291cmNlKTsKKwl9CisKKwlpZiAob2xkX2RvbmUgIT0gdG9kb19kb25lKQorCQlwdGhyZWFkX2NvbmRfc2lnbmFsKCZjb25kX3dyaXRlKTsKKworCWlmIChhbGxfd29ya19hZGRlZCAmJiB0b2RvX2RvbmUgPT0gdG9kb19lbmQpCisJCXB0aHJlYWRfY29uZF9zaWduYWwoJmNvbmRfcmVzdWx0KTsKKworCWdyZXBfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyB2b2lkICpydW4odm9pZCAqYXJnKQoreworCWludCBoaXQgPSAwOworCXN0cnVjdCBncmVwX29wdCAqb3B0ID0gYXJnOworCisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IHdvcmtfaXRlbSAqdyA9IGdldF93b3JrKCk7CisJCWlmICghdykKKwkJCWJyZWFrOworCisJCW9wdC0+b3V0cHV0X3ByaXYgPSB3OworCQloaXQgfD0gZ3JlcF9zb3VyY2Uob3B0LCAmdy0+c291cmNlKTsKKwkJZ3JlcF9zb3VyY2VfY2xlYXJfZGF0YSgmdy0+c291cmNlKTsKKwkJd29ya19kb25lKHcpOworCX0KKwlmcmVlX2dyZXBfcGF0dGVybnMoYXJnKTsKKwlmcmVlKGFyZyk7CisKKwlyZXR1cm4gKHZvaWQqKSAoaW50cHRyX3QpIGhpdDsKK30KKworc3RhdGljIHZvaWQgc3RyYnVmX291dChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgd29ya19pdGVtICp3ID0gb3B0LT5vdXRwdXRfcHJpdjsKKwlzdHJidWZfYWRkKCZ3LT5vdXQsIGJ1Ziwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X3RocmVhZHMoc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJaW50IGk7CisKKwlwdGhyZWFkX211dGV4X2luaXQoJmdyZXBfbXV0ZXgsIE5VTEwpOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmZ3JlcF9yZWFkX211dGV4LCBOVUxMKTsKKwlwdGhyZWFkX211dGV4X2luaXQoJmdyZXBfYXR0cl9tdXRleCwgTlVMTCk7CisJcHRocmVhZF9jb25kX2luaXQoJmNvbmRfYWRkLCBOVUxMKTsKKwlwdGhyZWFkX2NvbmRfaW5pdCgmY29uZF93cml0ZSwgTlVMTCk7CisJcHRocmVhZF9jb25kX2luaXQoJmNvbmRfcmVzdWx0LCBOVUxMKTsKKwlncmVwX3VzZV9sb2NrcyA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0b2RvKTsgaSsrKSB7CisJCXN0cmJ1Zl9pbml0KCZ0b2RvW2ldLm91dCwgMCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkrKykgeworCQlpbnQgZXJyOworCQlzdHJ1Y3QgZ3JlcF9vcHQgKm8gPSBncmVwX29wdF9kdXAob3B0KTsKKwkJby0+b3V0cHV0ID0gc3RyYnVmX291dDsKKwkJby0+ZGVidWcgPSAwOworCQljb21waWxlX2dyZXBfcGF0dGVybnMobyk7CisJCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCBydW4sIG8pOworCisJCWlmIChlcnIpCisJCQlkaWUoXygiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIiksCisJCQkgICAgc3RyZXJyb3IoZXJyKSk7CisJfQorfQorCitzdGF0aWMgaW50IHdhaXRfYWxsKHZvaWQpCit7CisJaW50IGhpdCA9IDA7CisJaW50IGk7CisKKwlncmVwX2xvY2soKTsKKwlhbGxfd29ya19hZGRlZCA9IDE7CisKKwkvKiBXYWl0IHVudGlsIGFsbCB3b3JrIGlzIGRvbmUuICovCisJd2hpbGUgKHRvZG9fZG9uZSAhPSB0b2RvX2VuZCkKKwkJcHRocmVhZF9jb25kX3dhaXQoJmNvbmRfcmVzdWx0LCAmZ3JlcF9tdXRleCk7CisKKwkvKiBXYWtlIHVwIGFsbCB0aGUgY29uc3VtZXIgdGhyZWFkcyBzbyB0aGV5IGNhbiBzZWUgdGhhdCB0aGVyZQorCSAqIGlzIG5vIG1vcmUgd29yayB0byBkby4KKwkgKi8KKwlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZjb25kX2FkZCk7CisJZ3JlcF91bmxvY2soKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRocmVhZHMpOyBpKyspIHsKKwkJdm9pZCAqaDsKKwkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sICZoKTsKKwkJaGl0IHw9IChpbnQpIChpbnRwdHJfdCkgaDsKKwl9CisKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmdyZXBfbXV0ZXgpOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmZ3JlcF9yZWFkX211dGV4KTsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmdyZXBfYXR0cl9tdXRleCk7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJmNvbmRfYWRkKTsKKwlwdGhyZWFkX2NvbmRfZGVzdHJveSgmY29uZF93cml0ZSk7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJmNvbmRfcmVzdWx0KTsKKwlncmVwX3VzZV9sb2NrcyA9IDA7CisKKwlyZXR1cm4gaGl0OworfQorI2Vsc2UgLyogIU5PX1BUSFJFQURTICovCisKK3N0YXRpYyBpbnQgd2FpdF9hbGwodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHBhcnNlX3BhdHRlcm5fdHlwZV9hcmcoY29uc3QgY2hhciAqb3B0LCBjb25zdCBjaGFyICphcmcpCit7CisJaWYgKCFzdHJjbXAoYXJnLCAiZGVmYXVsdCIpKQorCQlyZXR1cm4gR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJiYXNpYyIpKQorCQlyZXR1cm4gR1JFUF9QQVRURVJOX1RZUEVfQlJFOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZXh0ZW5kZWQiKSkKKwkJcmV0dXJuIEdSRVBfUEFUVEVSTl9UWVBFX0VSRTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImZpeGVkIikpCisJCXJldHVybiBHUkVQX1BBVFRFUk5fVFlQRV9GSVhFRDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInBlcmwiKSkKKwkJcmV0dXJuIEdSRVBfUEFUVEVSTl9UWVBFX1BDUkU7CisJZGllKCJiYWQgJXMgYXJndW1lbnQ6ICVzIiwgb3B0LCBhcmcpOworfQorCitzdGF0aWMgdm9pZCBncmVwX3BhdHRlcm5fdHlwZV9vcHRpb25zKGNvbnN0IGludCBwYXR0ZXJuX3R5cGUsIHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCXN3aXRjaCAocGF0dGVybl90eXBlKSB7CisJY2FzZSBHUkVQX1BBVFRFUk5fVFlQRV9VTlNQRUNJRklFRDoKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIEdSRVBfUEFUVEVSTl9UWVBFX0JSRToKKwkJb3B0LT5maXhlZCA9IDA7CisJCW9wdC0+cGNyZSA9IDA7CisJCW9wdC0+cmVnZmxhZ3MgJj0gflJFR19FWFRFTkRFRDsKKwkJYnJlYWs7CisKKwljYXNlIEdSRVBfUEFUVEVSTl9UWVBFX0VSRToKKwkJb3B0LT5maXhlZCA9IDA7CisJCW9wdC0+cGNyZSA9IDA7CisJCW9wdC0+cmVnZmxhZ3MgfD0gUkVHX0VYVEVOREVEOworCQlicmVhazsKKworCWNhc2UgR1JFUF9QQVRURVJOX1RZUEVfRklYRUQ6CisJCW9wdC0+Zml4ZWQgPSAxOworCQlvcHQtPnBjcmUgPSAwOworCQlvcHQtPnJlZ2ZsYWdzICY9IH5SRUdfRVhURU5ERUQ7CisJCWJyZWFrOworCisJY2FzZSBHUkVQX1BBVFRFUk5fVFlQRV9QQ1JFOgorCQlvcHQtPmZpeGVkID0gMDsKKwkJb3B0LT5wY3JlID0gMTsKKwkJb3B0LT5yZWdmbGFncyAmPSB+UkVHX0VYVEVOREVEOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJc3RydWN0IGdyZXBfb3B0ICpvcHQgPSBjYjsKKwljaGFyICpjb2xvciA9IE5VTEw7CisKKwlpZiAodXNlcmRpZmZfY29uZmlnKHZhciwgdmFsdWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFzdHJjbXAodmFyLCAiZ3JlcC5leHRlbmRlZHJlZ2V4cCIpKSB7CisJCWlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCQlvcHQtPmV4dGVuZGVkX3JlZ2V4cF9vcHRpb24gPSAxOworCQllbHNlCisJCQlvcHQtPmV4dGVuZGVkX3JlZ2V4cF9vcHRpb24gPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJncmVwLnBhdHRlcm50eXBlIikpIHsKKwkJb3B0LT5wYXR0ZXJuX3R5cGVfb3B0aW9uID0gcGFyc2VfcGF0dGVybl90eXBlX2FyZyh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisgIH0KKworCWlmICghc3RyY21wKHZhciwgImdyZXAubGluZW51bWJlciIpKSB7CisJCW9wdC0+bGluZW51bSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuZ3JlcCIpKQorCQlvcHQtPmNvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5ncmVwLmNvbnRleHQiKSkKKwkJY29sb3IgPSBvcHQtPmNvbG9yX2NvbnRleHQ7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5ncmVwLmZpbGVuYW1lIikpCisJCWNvbG9yID0gb3B0LT5jb2xvcl9maWxlbmFtZTsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImNvbG9yLmdyZXAuZnVuY3Rpb24iKSkKKwkJY29sb3IgPSBvcHQtPmNvbG9yX2Z1bmN0aW9uOworCWVsc2UgaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuZ3JlcC5saW5lbnVtYmVyIikpCisJCWNvbG9yID0gb3B0LT5jb2xvcl9saW5lbm87CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5ncmVwLm1hdGNoIikpCisJCWNvbG9yID0gb3B0LT5jb2xvcl9tYXRjaDsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImNvbG9yLmdyZXAuc2VsZWN0ZWQiKSkKKwkJY29sb3IgPSBvcHQtPmNvbG9yX3NlbGVjdGVkOworCWVsc2UgaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuZ3JlcC5zZXBhcmF0b3IiKSkKKwkJY29sb3IgPSBvcHQtPmNvbG9yX3NlcDsKKwllbHNlCisJCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCWlmIChjb2xvcikgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWNvbG9yX3BhcnNlKHZhbHVlLCB2YXIsIGNvbG9yKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpsb2NrX2FuZF9yZWFkX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXZvaWQgKmRhdGE7CisKKwlncmVwX3JlYWRfbG9jaygpOworCWRhdGEgPSByZWFkX3NoYTFfZmlsZShzaGExLCB0eXBlLCBzaXplKTsKKwlncmVwX3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9zaGExKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgdHJlZV9uYW1lX2xlbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGhidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChvcHQtPnJlbGF0aXZlICYmIG9wdC0+cHJlZml4X2xlbmd0aCkgeworCQlxdW90ZV9wYXRoX3JlbGF0aXZlKGZpbGVuYW1lICsgdHJlZV9uYW1lX2xlbiwgLTEsICZwYXRoYnVmLAorCQkJCSAgICBvcHQtPnByZWZpeCk7CisJCXN0cmJ1Zl9pbnNlcnQoJnBhdGhidWYsIDAsIGZpbGVuYW1lLCB0cmVlX25hbWVfbGVuKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkc3RyKCZwYXRoYnVmLCBmaWxlbmFtZSk7CisJfQorCisjaWZuZGVmIE5PX1BUSFJFQURTCisJaWYgKHVzZV90aHJlYWRzKSB7CisJCWFkZF93b3JrKG9wdCwgR1JFUF9TT1VSQ0VfU0hBMSwgcGF0aGJ1Zi5idWYsIHNoYTEpOworCQlzdHJidWZfcmVsZWFzZSgmcGF0aGJ1Zik7CisJCXJldHVybiAwOworCX0gZWxzZQorI2VuZGlmCisJeworCQlzdHJ1Y3QgZ3JlcF9zb3VyY2UgZ3M7CisJCWludCBoaXQ7CisKKwkJZ3JlcF9zb3VyY2VfaW5pdCgmZ3MsIEdSRVBfU09VUkNFX1NIQTEsIHBhdGhidWYuYnVmLCBzaGExKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnBhdGhidWYpOworCQloaXQgPSBncmVwX3NvdXJjZShvcHQsICZncyk7CisKKwkJZ3JlcF9zb3VyY2VfY2xlYXIoJmdzKTsKKwkJcmV0dXJuIGhpdDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9maWxlKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKG9wdC0+cmVsYXRpdmUgJiYgb3B0LT5wcmVmaXhfbGVuZ3RoKQorCQlxdW90ZV9wYXRoX3JlbGF0aXZlKGZpbGVuYW1lLCAtMSwgJmJ1Ziwgb3B0LT5wcmVmaXgpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBmaWxlbmFtZSk7CisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKwlpZiAodXNlX3RocmVhZHMpIHsKKwkJYWRkX3dvcmsob3B0LCBHUkVQX1NPVVJDRV9GSUxFLCBidWYuYnVmLCBmaWxlbmFtZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJc3RydWN0IGdyZXBfc291cmNlIGdzOworCQlpbnQgaGl0OworCisJCWdyZXBfc291cmNlX2luaXQoJmdzLCBHUkVQX1NPVVJDRV9GSUxFLCBidWYuYnVmLCBmaWxlbmFtZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQloaXQgPSBncmVwX3NvdXJjZShvcHQsICZncyk7CisKKwkJZ3JlcF9zb3VyY2VfY2xlYXIoJmdzKTsKKwkJcmV0dXJuIGhpdDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9wYXRoKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcGF0aF9saXN0ID0gb3B0LT5vdXRwdXRfcHJpdjsKKworCWlmIChsZW4gPT0gMSAmJiAqKGNvbnN0IGNoYXIgKilkYXRhID09ICdcMCcpCisJCXJldHVybjsKKwlzdHJpbmdfbGlzdF9hcHBlbmQocGF0aF9saXN0LCB4c3RybmR1cChkYXRhLCBsZW4pKTsKK30KKworc3RhdGljIHZvaWQgcnVuX3BhZ2VyKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpwYXRoX2xpc3QgPSBvcHQtPm91dHB1dF9wcml2OworCWNvbnN0IGNoYXIgKiphcmd2ID0geG1hbGxvYyhzaXplb2YoY29uc3QgY2hhciAqKSAqIChwYXRoX2xpc3QtPm5yICsgMSkpOworCWludCBpLCBzdGF0dXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aF9saXN0LT5ucjsgaSsrKQorCQlhcmd2W2ldID0gcGF0aF9saXN0LT5pdGVtc1tpXS5zdHJpbmc7CisJYXJndltwYXRoX2xpc3QtPm5yXSA9IE5VTEw7CisKKwlpZiAocHJlZml4ICYmIGNoZGlyKHByZWZpeCkpCisJCWRpZShfKCJGYWlsZWQgdG8gY2hkaXI6ICVzIiksIHByZWZpeCk7CisJc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX1VTSU5HX1NIRUxMKTsKKwlpZiAoc3RhdHVzKQorCQlleGl0KHN0YXR1cyk7CisJZnJlZShhcmd2KTsKK30KKworc3RhdGljIGludCBncmVwX2NhY2hlKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCBpbnQgY2FjaGVkKQoreworCWludCBoaXQgPSAwOworCWludCBucjsKKwlyZWFkX2NhY2hlKCk7CisKKwlmb3IgKG5yID0gMDsgbnIgPCBhY3RpdmVfbnI7IG5yKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtucl07CisJCWlmICghU19JU1JFRyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFtYXRjaF9wYXRoc3BlY19kZXB0aChwYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBJZiBDRV9WQUxJRCBpcyBvbiwgd2UgYXNzdW1lIHdvcmt0cmVlIGZpbGUgYW5kIGl0cyBjYWNoZSBlbnRyeQorCQkgKiBhcmUgaWRlbnRpY2FsLCBldmVuIGlmIHdvcmt0cmVlIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQsIHNvIHVzZQorCQkgKiBjYWNoZSB2ZXJzaW9uIGluc3RlYWQKKwkJICovCisJCWlmIChjYWNoZWQgfHwgKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSB8fCBjZV9za2lwX3dvcmt0cmVlKGNlKSkgeworCQkJaWYgKGNlX3N0YWdlKGNlKSkKKwkJCQljb250aW51ZTsKKwkJCWhpdCB8PSBncmVwX3NoYTEob3B0LCBjZS0+c2hhMSwgY2UtPm5hbWUsIDApOworCQl9CisJCWVsc2UKKwkJCWhpdCB8PSBncmVwX2ZpbGUob3B0LCBjZS0+bmFtZSk7CisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCWRvIHsKKwkJCQlucisrOworCQkJfSB3aGlsZSAobnIgPCBhY3RpdmVfbnIgJiYKKwkJCQkgIXN0cmNtcChjZS0+bmFtZSwgYWN0aXZlX2NhY2hlW25yXS0+bmFtZSkpOworCQkJbnItLTsgLyogY29tcGVuc2F0ZSBmb3IgbG9vcCBjb250cm9sICovCisJCX0KKwkJaWYgKGhpdCAmJiBvcHQtPnN0YXR1c19vbmx5KQorCQkJYnJlYWs7CisJfQorCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF90cmVlKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkgICAgIHN0cnVjdCB0cmVlX2Rlc2MgKnRyZWUsIHN0cnVjdCBzdHJidWYgKmJhc2UsIGludCB0bl9sZW4pCit7CisJaW50IGhpdCA9IDA7CisJZW51bSBpbnRlcmVzdGluZyBtYXRjaCA9IGVudHJ5X25vdF9pbnRlcmVzdGluZzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwlpbnQgb2xkX2Jhc2VsZW4gPSBiYXNlLT5sZW47CisKKwl3aGlsZSAodHJlZV9lbnRyeSh0cmVlLCAmZW50cnkpKSB7CisJCWludCB0ZV9sZW4gPSB0cmVlX2VudHJ5X2xlbigmZW50cnkpOworCisJCWlmIChtYXRjaCAhPSBhbGxfZW50cmllc19pbnRlcmVzdGluZykgeworCQkJbWF0Y2ggPSB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKCZlbnRyeSwgYmFzZSwgdG5fbGVuLCBwYXRoc3BlYyk7CisJCQlpZiAobWF0Y2ggPT0gYWxsX2VudHJpZXNfbm90X2ludGVyZXN0aW5nKQorCQkJCWJyZWFrOworCQkJaWYgKG1hdGNoID09IGVudHJ5X25vdF9pbnRlcmVzdGluZykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCXN0cmJ1Zl9hZGQoYmFzZSwgZW50cnkucGF0aCwgdGVfbGVuKTsKKworCQlpZiAoU19JU1JFRyhlbnRyeS5tb2RlKSkgeworCQkJaGl0IHw9IGdyZXBfc2hhMShvcHQsIGVudHJ5LnNoYTEsIGJhc2UtPmJ1ZiwgdG5fbGVuKTsKKwkJfQorCQllbHNlIGlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKSB7CisJCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCQlzdHJ1Y3QgdHJlZV9kZXNjIHN1YjsKKwkJCXZvaWQgKmRhdGE7CisJCQl1bnNpZ25lZCBsb25nIHNpemU7CisKKwkJCWRhdGEgPSBsb2NrX2FuZF9yZWFkX3NoYTFfZmlsZShlbnRyeS5zaGExLCAmdHlwZSwgJnNpemUpOworCQkJaWYgKCFkYXRhKQorCQkJCWRpZShfKCJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiKSwKKwkJCQkgICAgc2hhMV90b19oZXgoZW50cnkuc2hhMSkpOworCisJCQlzdHJidWZfYWRkY2goYmFzZSwgJy8nKTsKKwkJCWluaXRfdHJlZV9kZXNjKCZzdWIsIGRhdGEsIHNpemUpOworCQkJaGl0IHw9IGdyZXBfdHJlZShvcHQsIHBhdGhzcGVjLCAmc3ViLCBiYXNlLCB0bl9sZW4pOworCQkJZnJlZShkYXRhKTsKKwkJfQorCQlzdHJidWZfc2V0bGVuKGJhc2UsIG9sZF9iYXNlbGVuKTsKKworCQlpZiAoaGl0ICYmIG9wdC0+c3RhdHVzX29ubHkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGhpdDsKK30KKworc3RhdGljIGludCBncmVwX29iamVjdChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJICAgICAgIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAob2JqLT50eXBlID09IE9CSl9CTE9CKQorCQlyZXR1cm4gZ3JlcF9zaGExKG9wdCwgb2JqLT5zaGExLCBuYW1lLCAwKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQgfHwgb2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCXN0cnVjdCB0cmVlX2Rlc2MgdHJlZTsKKwkJdm9pZCAqZGF0YTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQlzdHJ1Y3Qgc3RyYnVmIGJhc2U7CisJCWludCBoaXQsIGxlbjsKKworCQlncmVwX3JlYWRfbG9jaygpOworCQlkYXRhID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uob2JqLT5zaGExLCB0cmVlX3R5cGUsCisJCQkJCQkgICZzaXplLCBOVUxMKTsKKwkJZ3JlcF9yZWFkX3VubG9jaygpOworCisJCWlmICghZGF0YSkKKwkJCWRpZShfKCJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiKSwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisKKwkJbGVuID0gbmFtZSA/IHN0cmxlbihuYW1lKSA6IDA7CisJCXN0cmJ1Zl9pbml0KCZiYXNlLCBQQVRIX01BWCArIGxlbiArIDEpOworCQlpZiAobGVuKSB7CisJCQlzdHJidWZfYWRkKCZiYXNlLCBuYW1lLCBsZW4pOworCQkJc3RyYnVmX2FkZGNoKCZiYXNlLCAnOicpOworCQl9CisJCWluaXRfdHJlZV9kZXNjKCZ0cmVlLCBkYXRhLCBzaXplKTsKKwkJaGl0ID0gZ3JlcF90cmVlKG9wdCwgcGF0aHNwZWMsICZ0cmVlLCAmYmFzZSwgYmFzZS5sZW4pOworCQlzdHJidWZfcmVsZWFzZSgmYmFzZSk7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiBoaXQ7CisJfQorCWRpZShfKCJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIiksIHR5cGVuYW1lKG9iai0+dHlwZSkpOworfQorCitzdGF0aWMgaW50IGdyZXBfb2JqZWN0cyhzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfYXJyYXkgKmxpc3QpCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGhpdCA9IDA7CisJY29uc3QgdW5zaWduZWQgaW50IG5yID0gbGlzdC0+bnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpyZWFsX29iajsKKwkJcmVhbF9vYmogPSBkZXJlZl90YWcobGlzdC0+b2JqZWN0c1tpXS5pdGVtLCBOVUxMLCAwKTsKKwkJaWYgKGdyZXBfb2JqZWN0KG9wdCwgcGF0aHNwZWMsIHJlYWxfb2JqLCBsaXN0LT5vYmplY3RzW2ldLm5hbWUpKSB7CisJCQloaXQgPSAxOworCQkJaWYgKG9wdC0+c3RhdHVzX29ubHkpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGhpdDsKK30KKworc3RhdGljIGludCBncmVwX2RpcmVjdG9yeShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCSAgaW50IGV4Y19zdGQpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCWludCBpLCBoaXQgPSAwOworCisJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwlpZiAoZXhjX3N0ZCkKKwkJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisKKwlmaWxsX2RpcmVjdG9yeSgmZGlyLCBwYXRoc3BlYy0+cmF3KTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGRpci5lbnRyaWVzW2ldLT5uYW1lOworCQlpbnQgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKwkJaWYgKCFtYXRjaF9wYXRoc3BlY19kZXB0aChwYXRoc3BlYywgbmFtZSwgbmFtZWxlbiwgMCwgTlVMTCkpCisJCQljb250aW51ZTsKKwkJaGl0IHw9IGdyZXBfZmlsZShvcHQsIGRpci5lbnRyaWVzW2ldLT5uYW1lKTsKKwkJaWYgKGhpdCAmJiBvcHQtPnN0YXR1c19vbmx5KQorCQkJYnJlYWs7CisJfQorCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgY29udGV4dF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJaW50IHZhbHVlOworCWNvbnN0IGNoYXIgKmVuZHA7CisKKwlpZiAodW5zZXQpIHsKKwkJZ3JlcF9vcHQtPnByZV9jb250ZXh0ID0gZ3JlcF9vcHQtPnBvc3RfY29udGV4dCA9IDA7CisJCXJldHVybiAwOworCX0KKwl2YWx1ZSA9IHN0cnRvbChhcmcsIChjaGFyICoqKSZlbmRwLCAxMCk7CisJaWYgKCplbmRwKSB7CisJCXJldHVybiBlcnJvcihfKCJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIiksCisJCQkgICAgIG9wdC0+c2hvcnRfbmFtZSk7CisJfQorCWdyZXBfb3B0LT5wcmVfY29udGV4dCA9IGdyZXBfb3B0LT5wb3N0X2NvbnRleHQgPSB2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxlX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJaW50IGZyb21fc3RkaW4gPSAhc3RyY21wKGFyZywgIi0iKTsKKwlGSUxFICpwYXR0ZXJuczsKKwlpbnQgbG5vID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlwYXR0ZXJucyA9IGZyb21fc3RkaW4gPyBzdGRpbiA6IGZvcGVuKGFyZywgInIiKTsKKwlpZiAoIXBhdHRlcm5zKQorCQlkaWVfZXJybm8oXygiY2Fubm90IG9wZW4gJyVzJyIpLCBhcmcpOworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmc2IsIHBhdHRlcm5zLCAnXG4nKSA9PSAwKSB7CisJCS8qIGlnbm9yZSBlbXB0eSBsaW5lIGxpa2UgZ3JlcCBkb2VzICovCisJCWlmIChzYi5sZW4gPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWFwcGVuZF9ncmVwX3BhdChncmVwX29wdCwgc2IuYnVmLCBzYi5sZW4sIGFyZywgKytsbm8sCisJCQkJR1JFUF9QQVRURVJOKTsKKwl9CisJaWYgKCFmcm9tX3N0ZGluKQorCQlmY2xvc2UocGF0dGVybnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm90X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgIi0tbm90IiwgImNvbW1hbmQgbGluZSIsIDAsIEdSRVBfTk9UKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbmRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCAiLS1hbmQiLCAiY29tbWFuZCBsaW5lIiwgMCwgR1JFUF9BTkQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wZW5fY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCAiKCIsICJjb21tYW5kIGxpbmUiLCAwLCBHUkVQX09QRU5fUEFSRU4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsb3NlX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgIikiLCAiY29tbWFuZCBsaW5lIiwgMCwgR1JFUF9DTE9TRV9QQVJFTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGF0dGVybl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgYXJnLCAiLWUgb3B0aW9uIiwgMCwgR1JFUF9QQVRURVJOKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZWxwX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIC0xOworfQorCitpbnQgY21kX2dyZXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGhpdCA9IDA7CisJaW50IGNhY2hlZCA9IDAsIHVudHJhY2tlZCA9IDAsIG9wdF9leGNsdWRlID0gLTE7CisJaW50IHNlZW5fZGFzaGRhc2ggPSAwOworCWludCBleHRlcm5hbF9ncmVwX2FsbG93ZWRfX2lnbm9yZWQ7CisJY29uc3QgY2hhciAqc2hvd19pbl9wYWdlciA9IE5VTEwsICpkZWZhdWx0X3BhZ2VyID0gImR1bW15IjsKKwlzdHJ1Y3QgZ3JlcF9vcHQgb3B0OworCXN0cnVjdCBvYmplY3RfYXJyYXkgbGlzdCA9IE9CSkVDVF9BUlJBWV9JTklUOworCWNvbnN0IGNoYXIgKipwYXRocyA9IE5VTEw7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXN0cnVjdCBzdHJpbmdfbGlzdCBwYXRoX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCBpOworCWludCBkdW1teTsKKwlpbnQgdXNlX2luZGV4ID0gMTsKKwlpbnQgcGF0dGVybl90eXBlX2FyZyA9IEdSRVBfUEFUVEVSTl9UWVBFX1VOU1BFQ0lGSUVEOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKDAsICJjYWNoZWQiLCAmY2FjaGVkLAorCQkJTl8oInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiKSksCisJCU9QVF9ORUdCSVQoMCwgIm5vLWluZGV4IiwgJnVzZV9pbmRleCwKKwkJCSBOXygiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiKSwgMSksCisJCU9QVF9CT09MRUFOKDAsICJ1bnRyYWNrZWQiLCAmdW50cmFja2VkLAorCQkJTl8oInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgImV4Y2x1ZGUtc3RhbmRhcmQiLCAmb3B0X2V4Y2x1ZGUsCisJCQkgICAgTl8oInNlYXJjaCBhbHNvIGluIGlnbm9yZWQgZmlsZXMiKSwgMSksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9CT09MRUFOKCd2JywgImludmVydC1tYXRjaCIsICZvcHQuaW52ZXJ0LAorCQkJTl8oInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIikpLAorCQlPUFRfQk9PTEVBTignaScsICJpZ25vcmUtY2FzZSIsICZvcHQuaWdub3JlX2Nhc2UsCisJCQlOXygiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIpKSwKKwkJT1BUX0JPT0xFQU4oJ3cnLCAid29yZC1yZWdleHAiLCAmb3B0LndvcmRfcmVnZXhwLAorCQkJTl8oIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIikpLAorCQlPUFRfU0VUX0lOVCgnYScsICJ0ZXh0IiwgJm9wdC5iaW5hcnksCisJCQlOXygicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIpLCBHUkVQX0JJTkFSWV9URVhUKSwKKwkJT1BUX1NFVF9JTlQoJ0knLCBOVUxMLCAmb3B0LmJpbmFyeSwKKwkJCU5fKCJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiKSwKKwkJCUdSRVBfQklOQVJZX05PTUFUQ0gpLAorCQl7IE9QVElPTl9JTlRFR0VSLCAwLCAibWF4LWRlcHRoIiwgJm9wdC5tYXhfZGVwdGgsIE5fKCJkZXB0aCIpLAorCQkJTl8oImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlOVUxMLCAxIH0sCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9TRVRfSU5UKCdFJywgImV4dGVuZGVkLXJlZ2V4cCIsICZwYXR0ZXJuX3R5cGVfYXJnLAorCQkJICAgIE5fKCJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIpLAorCQkJICAgIEdSRVBfUEFUVEVSTl9UWVBFX0VSRSksCisJCU9QVF9TRVRfSU5UKCdHJywgImJhc2ljLXJlZ2V4cCIsICZwYXR0ZXJuX3R5cGVfYXJnLAorCQkJICAgIE5fKCJ1c2UgYmFzaWMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyAoZGVmYXVsdCkiKSwKKwkJCSAgICBHUkVQX1BBVFRFUk5fVFlQRV9CUkUpLAorCQlPUFRfU0VUX0lOVCgnRicsICJmaXhlZC1zdHJpbmdzIiwgJnBhdHRlcm5fdHlwZV9hcmcsCisJCQkgICAgTl8oImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIiksCisJCQkgICAgR1JFUF9QQVRURVJOX1RZUEVfRklYRUQpLAorCQlPUFRfU0VUX0lOVCgnUCcsICJwZXJsLXJlZ2V4cCIsICZwYXR0ZXJuX3R5cGVfYXJnLAorCQkJICAgIE5fKCJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiKSwKKwkJCSAgICBHUkVQX1BBVFRFUk5fVFlQRV9QQ1JFKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0JPT0xFQU4oJ24nLCAibGluZS1udW1iZXIiLCAmb3B0LmxpbmVudW0sIE5fKCJzaG93IGxpbmUgbnVtYmVycyIpKSwKKwkJT1BUX05FR0JJVCgnaCcsIE5VTEwsICZvcHQucGF0aG5hbWUsIE5fKCJkb24ndCBzaG93IGZpbGVuYW1lcyIpLCAxKSwKKwkJT1BUX0JJVCgnSCcsIE5VTEwsICZvcHQucGF0aG5hbWUsIE5fKCJzaG93IGZpbGVuYW1lcyIpLCAxKSwKKwkJT1BUX05FR0JJVCgwLCAiZnVsbC1uYW1lIiwgJm9wdC5yZWxhdGl2ZSwKKwkJCU5fKCJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IiksIDEpLAorCQlPUFRfQk9PTEVBTignbCcsICJmaWxlcy13aXRoLW1hdGNoZXMiLCAmb3B0Lm5hbWVfb25seSwKKwkJCU5fKCJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiKSksCisJCU9QVF9CT09MRUFOKDAsICJuYW1lLW9ubHkiLCAmb3B0Lm5hbWVfb25seSwKKwkJCU5fKCJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIpKSwKKwkJT1BUX0JPT0xFQU4oJ0wnLCAiZmlsZXMtd2l0aG91dC1tYXRjaCIsCisJCQkmb3B0LnVubWF0Y2hfbmFtZV9vbmx5LAorCQkJTl8oInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIpKSwKKwkJT1BUX0JPT0xFQU4oJ3onLCAibnVsbCIsICZvcHQubnVsbF9mb2xsb3dpbmdfbmFtZSwKKwkJCU5fKCJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIikpLAorCQlPUFRfQk9PTEVBTignYycsICJjb3VudCIsICZvcHQuY291bnQsCisJCQlOXygic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIpKSwKKwkJT1BUX19DT0xPUigmb3B0LmNvbG9yLCBOXygiaGlnaGxpZ2h0IG1hdGNoZXMiKSksCisJCU9QVF9CT09MRUFOKDAsICJicmVhayIsICZvcHQuZmlsZV9icmVhaywKKwkJCU5fKCJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImhlYWRpbmciLCAmb3B0LmhlYWRpbmcsCisJCQlOXygic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIpKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0NBTExCQUNLKCdDJywgImNvbnRleHQiLCAmb3B0LCBOXygibiIpLAorCQkJTl8oInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIiksCisJCQljb250ZXh0X2NhbGxiYWNrKSwKKwkJT1BUX0lOVEVHRVIoJ0InLCAiYmVmb3JlLWNvbnRleHQiLCAmb3B0LnByZV9jb250ZXh0LAorCQkJTl8oInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiKSksCisJCU9QVF9JTlRFR0VSKCdBJywgImFmdGVyLWNvbnRleHQiLCAmb3B0LnBvc3RfY29udGV4dCwKKwkJCU5fKCJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiKSksCisJCU9QVF9OVU1CRVJfQ0FMTEJBQ0soJm9wdCwgTl8oInNob3J0Y3V0IGZvciAtQyBOVU0iKSwKKwkJCWNvbnRleHRfY2FsbGJhY2spLAorCQlPUFRfQk9PTEVBTigncCcsICJzaG93LWZ1bmN0aW9uIiwgJm9wdC5mdW5jbmFtZSwKKwkJCU5fKCJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIikpLAorCQlPUFRfQk9PTEVBTignVycsICJmdW5jdGlvbi1jb250ZXh0IiwgJm9wdC5mdW5jYm9keSwKKwkJCU5fKCJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIpKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0NBTExCQUNLKCdmJywgTlVMTCwgJm9wdCwgTl8oImZpbGUiKSwKKwkJCU5fKCJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIpLCBmaWxlX2NhbGxiYWNrKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdlJywgTlVMTCwgJm9wdCwgTl8oInBhdHRlcm4iKSwKKwkJCU5fKCJtYXRjaCA8cGF0dGVybj4iKSwgUEFSU0VfT1BUX05PTkVHLCBwYXR0ZXJuX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiYW5kIiwgJm9wdCwgTlVMTCwKKwkJICBOXygiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIpLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgYW5kX2NhbGxiYWNrIH0sCisJCU9QVF9CT09MRUFOKDAsICJvciIsICZkdW1teSwgIiIpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgIm5vdCIsICZvcHQsIE5VTEwsICIiLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgbm90X2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnKCcsIE5VTEwsICZvcHQsIE5VTEwsICIiLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0RBU0gsCisJCSAgb3Blbl9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJyknLCBOVUxMLCAmb3B0LCBOVUxMLCAiIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9EQVNILAorCQkgIGNsb3NlX2NhbGxiYWNrIH0sCisJCU9QVF9fUVVJRVQoJm9wdC5zdGF0dXNfb25seSwKKwkJCSAgIE5fKCJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImFsbC1tYXRjaCIsICZvcHQuYWxsX21hdGNoLAorCQkJTl8oInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiKSksCisJCXsgT1BUSU9OX1NFVF9JTlQsIDAsICJkZWJ1ZyIsICZvcHQuZGVidWcsIE5VTEwsCisJCSAgTl8oInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIiksCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX0hJRERFTiwgTlVMTCwgMSB9LAorCQlPUFRfR1JPVVAoIiIpLAorCQl7IE9QVElPTl9TVFJJTkcsICdPJywgIm9wZW4tZmlsZXMtaW4tcGFnZXIiLCAmc2hvd19pbl9wYWdlciwKKwkJCU5fKCJwYWdlciIpLCBOXygic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdClkZWZhdWx0X3BhZ2VyIH0sCisJCU9QVF9CT09MRUFOKDAsICJleHQtZ3JlcCIsICZleHRlcm5hbF9ncmVwX2FsbG93ZWRfX2lnbm9yZWQsCisJCQkgICAgTl8oImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJoZWxwLWFsbCIsICZvcHRpb25zLCBOVUxMLCBOXygic2hvdyB1c2FnZSIpLAorCQkgIFBBUlNFX09QVF9ISURERU4gfCBQQVJTRV9PUFRfTk9BUkcsIGhlbHBfY2FsbGJhY2sgfSwKKwkJT1BUX0VORCgpCisJfTsKKworCS8qCisJICogJ2dpdCBncmVwIC1oJywgdW5saWtlICdnaXQgZ3JlcCAtaCA8cGF0dGVybj4nLCBpcyBhIHJlcXVlc3QKKwkgKiB0byBzaG93IHVzYWdlIGluZm9ybWF0aW9uIGFuZCBleGl0LgorCSAqLworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdyZXBfdXNhZ2UsIG9wdGlvbnMpOworCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQucHJlZml4ID0gcHJlZml4OworCW9wdC5wcmVmaXhfbGVuZ3RoID0gKHByZWZpeCAmJiAqcHJlZml4KSA/IHN0cmxlbihwcmVmaXgpIDogMDsKKwlvcHQucmVsYXRpdmUgPSAxOworCW9wdC5wYXRobmFtZSA9IDE7CisJb3B0LnBhdHRlcm5fdGFpbCA9ICZvcHQucGF0dGVybl9saXN0OworCW9wdC5oZWFkZXJfdGFpbCA9ICZvcHQuaGVhZGVyX2xpc3Q7CisJb3B0LnJlZ2ZsYWdzID0gUkVHX05FV0xJTkU7CisJb3B0Lm1heF9kZXB0aCA9IC0xOworCW9wdC5wYXR0ZXJuX3R5cGVfb3B0aW9uID0gR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQ7CisJb3B0LmV4dGVuZGVkX3JlZ2V4cF9vcHRpb24gPSAwOworCisJc3RyY3B5KG9wdC5jb2xvcl9jb250ZXh0LCAiIik7CisJc3RyY3B5KG9wdC5jb2xvcl9maWxlbmFtZSwgIiIpOworCXN0cmNweShvcHQuY29sb3JfZnVuY3Rpb24sICIiKTsKKwlzdHJjcHkob3B0LmNvbG9yX2xpbmVubywgIiIpOworCXN0cmNweShvcHQuY29sb3JfbWF0Y2gsIEdJVF9DT0xPUl9CT0xEX1JFRCk7CisJc3RyY3B5KG9wdC5jb2xvcl9zZWxlY3RlZCwgIiIpOworCXN0cmNweShvcHQuY29sb3Jfc2VwLCBHSVRfQ09MT1JfQ1lBTik7CisJb3B0LmNvbG9yID0gLTE7CisJZ2l0X2NvbmZpZyhncmVwX2NvbmZpZywgJm9wdCk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIC0tIHRoZW4gdGhlIHBhdGhzIG11c3QgZXhpc3QgaW4gdGhlIHdvcmtpbmcKKwkgKiB0cmVlLiAgSWYgdGhlcmUgaXMgbm8gZXhwbGljaXQgcGF0dGVybiBzcGVjaWZpZWQgd2l0aCAtZSBvcgorCSAqIC1mLCB3ZSB0YWtlIHRoZSBmaXJzdCB1bnJlY29nbml6ZWQgbm9uIG9wdGlvbiB0byBiZSB0aGUKKwkgKiBwYXR0ZXJuLCBidXQgdGhlbiB3aGF0IGZvbGxvd3MgaXQgbXVzdCBiZSB6ZXJvIG9yIG1vcmUKKwkgKiB2YWxpZCByZWZzIHVwIHRvIHRoZSAtLSAoaWYgZXhpc3RzKSwgYW5kIHRoZW4gZXhpc3RpbmcKKwkgKiBwYXRocy4gIElmIHRoZXJlIGlzIGFuIGV4cGxpY2l0IHBhdHRlcm4sIHRoZW4gdGhlIGZpcnN0CisJICogdW5yZWNvZ25pemVkIG5vbiBvcHRpb24gaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVmcyBsaXN0CisJICogdGhhdCBjb250aW51ZXMgdXAgdG8gdGhlIC0tIChpZiBleGlzdHMpLCBhbmQgdGhlbiBwYXRocy4KKwkgKi8KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdyZXBfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTiB8CisJCQkgICAgIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQKTsKKworCWlmIChwYXR0ZXJuX3R5cGVfYXJnICE9IEdSRVBfUEFUVEVSTl9UWVBFX1VOU1BFQ0lGSUVEKQorCQlncmVwX3BhdHRlcm5fdHlwZV9vcHRpb25zKHBhdHRlcm5fdHlwZV9hcmcsICZvcHQpOworCWVsc2UgaWYgKG9wdC5wYXR0ZXJuX3R5cGVfb3B0aW9uICE9IEdSRVBfUEFUVEVSTl9UWVBFX1VOU1BFQ0lGSUVEKQorCQlncmVwX3BhdHRlcm5fdHlwZV9vcHRpb25zKG9wdC5wYXR0ZXJuX3R5cGVfb3B0aW9uLCAmb3B0KTsKKwllbHNlIGlmIChvcHQuZXh0ZW5kZWRfcmVnZXhwX29wdGlvbikKKwkJZ3JlcF9wYXR0ZXJuX3R5cGVfb3B0aW9ucyhHUkVQX1BBVFRFUk5fVFlQRV9FUkUsICZvcHQpOworCisJaWYgKHVzZV9pbmRleCAmJiAhc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCS8qIGRpZSB0aGUgc2FtZSB3YXkgYXMgaWYgd2UgZGlkIGl0IGF0IHRoZSBiZWdpbm5pbmcgKi8KKwkJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJLyoKKwkgKiBza2lwIGEgLS0gc2VwYXJhdG9yOyB3ZSBrbm93IGl0IGNhbm5vdCBiZQorCSAqIHNlcGFyYXRpbmcgcmV2aXNpb25zIGZyb20gcGF0aG5hbWVzIGlmCisJICogd2UgaGF2ZW4ndCBldmVuIGhhZCBhbnkgcGF0dGVybnMgeWV0CisJICovCisJaWYgKGFyZ2MgPiAwICYmICFvcHQucGF0dGVybl9saXN0ICYmICFzdHJjbXAoYXJndlswXSwgIi0tIikpIHsKKwkJYXJndisrOworCQlhcmdjLS07CisJfQorCisJLyogRmlyc3QgdW5yZWNvZ25pemVkIG5vbi1vcHRpb24gdG9rZW4gKi8KKwlpZiAoYXJnYyA+IDAgJiYgIW9wdC5wYXR0ZXJuX2xpc3QpIHsKKwkJYXBwZW5kX2dyZXBfcGF0dGVybigmb3B0LCBhcmd2WzBdLCAiY29tbWFuZCBsaW5lIiwgMCwKKwkJCQkgICAgR1JFUF9QQVRURVJOKTsKKwkJYXJndisrOworCQlhcmdjLS07CisJfQorCisJaWYgKHNob3dfaW5fcGFnZXIgPT0gZGVmYXVsdF9wYWdlcikKKwkJc2hvd19pbl9wYWdlciA9IGdpdF9wYWdlcigxKTsKKwlpZiAoc2hvd19pbl9wYWdlcikgeworCQlvcHQuY29sb3IgPSAwOworCQlvcHQubmFtZV9vbmx5ID0gMTsKKwkJb3B0Lm51bGxfZm9sbG93aW5nX25hbWUgPSAxOworCQlvcHQub3V0cHV0X3ByaXYgPSAmcGF0aF9saXN0OworCQlvcHQub3V0cHV0ID0gYXBwZW5kX3BhdGg7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmcGF0aF9saXN0LCBzaG93X2luX3BhZ2VyKTsKKwkJdXNlX3RocmVhZHMgPSAwOworCX0KKworCWlmICghb3B0LnBhdHRlcm5fbGlzdCkKKwkJZGllKF8oIm5vIHBhdHRlcm4gZ2l2ZW4uIikpOworCWlmICghb3B0LmZpeGVkICYmIG9wdC5pZ25vcmVfY2FzZSkKKwkJb3B0LnJlZ2ZsYWdzIHw9IFJFR19JQ0FTRTsKKworCWNvbXBpbGVfZ3JlcF9wYXR0ZXJucygmb3B0KTsKKworCS8qIENoZWNrIHJldnMgYW5kIHRoZW4gcGF0aHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCS8qIElzIGl0IGEgcmV2PyAqLworCQlpZiAoIWdldF9zaGExKGFyZywgc2hhMSkpIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHBhcnNlX29iamVjdChzaGExKTsKKwkJCWlmICghb2JqZWN0KQorCQkJCWRpZShfKCJiYWQgb2JqZWN0ICVzIiksIGFyZyk7CisJCQlhZGRfb2JqZWN0X2FycmF5KG9iamVjdCwgYXJnLCAmbGlzdCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlpKys7CisJCQlzZWVuX2Rhc2hkYXNoID0gMTsKKwkJfQorCQlicmVhazsKKwl9CisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKwlpZiAobGlzdC5uciB8fCBjYWNoZWQgfHwgb25saW5lX2NwdXMoKSA9PSAxKQorCQl1c2VfdGhyZWFkcyA9IDA7CisjZWxzZQorCXVzZV90aHJlYWRzID0gMDsKKyNlbmRpZgorCisjaWZuZGVmIE5PX1BUSFJFQURTCisJaWYgKHVzZV90aHJlYWRzKSB7CisJCWlmICghKG9wdC5uYW1lX29ubHkgfHwgb3B0LnVubWF0Y2hfbmFtZV9vbmx5IHx8IG9wdC5jb3VudCkKKwkJICAgICYmIChvcHQucHJlX2NvbnRleHQgfHwgb3B0LnBvc3RfY29udGV4dCB8fAorCQkJb3B0LmZpbGVfYnJlYWsgfHwgb3B0LmZ1bmNib2R5KSkKKwkJCXNraXBfZmlyc3RfbGluZSA9IDE7CisJCXN0YXJ0X3RocmVhZHMoJm9wdCk7CisJfQorI2VuZGlmCisKKwkvKiBUaGUgcmVzdCBhcmUgcGF0aHMgKi8KKwlpZiAoIXNlZW5fZGFzaGRhc2gpIHsKKwkJaW50IGo7CisJCWZvciAoaiA9IGk7IGogPCBhcmdjOyBqKyspCisJCQl2ZXJpZnlfZmlsZW5hbWUocHJlZml4LCBhcmd2W2pdLCBqID09IGkpOworCX0KKworCXBhdGhzID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndiArIGkpOworCWluaXRfcGF0aHNwZWMoJnBhdGhzcGVjLCBwYXRocyk7CisJcGF0aHNwZWMubWF4X2RlcHRoID0gb3B0Lm1heF9kZXB0aDsKKwlwYXRoc3BlYy5yZWN1cnNpdmUgPSAxOworCisJaWYgKHNob3dfaW5fcGFnZXIgJiYgKGNhY2hlZCB8fCBsaXN0Lm5yKSkKKwkJZGllKF8oIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIpKTsKKworCWlmIChzaG93X2luX3BhZ2VyICYmIG9wdC5wYXR0ZXJuX2xpc3QgJiYgIW9wdC5wYXR0ZXJuX2xpc3QtPm5leHQpIHsKKwkJY29uc3QgY2hhciAqcGFnZXIgPSBwYXRoX2xpc3QuaXRlbXNbMF0uc3RyaW5nOworCQlpbnQgbGVuID0gc3RybGVuKHBhZ2VyKTsKKworCQlpZiAobGVuID4gNCAmJiBpc19kaXJfc2VwKHBhZ2VyW2xlbiAtIDVdKSkKKwkJCXBhZ2VyICs9IGxlbiAtIDQ7CisKKwkJaWYgKCFzdHJjbXAoImxlc3MiLCBwYWdlcikgfHwgIXN0cmNtcCgidmkiLCBwYWdlcikpIHsKKwkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkZigmYnVmLCAiKy8lcyVzIiwKKwkJCQkJc3RyY21wKCJsZXNzIiwgcGFnZXIpID8gIiIgOiAiKiIsCisJCQkJCW9wdC5wYXR0ZXJuX2xpc3QtPnBhdHRlcm4pOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZwYXRoX2xpc3QsIGJ1Zi5idWYpOworCQkJc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwkJfQorCX0KKworCWlmICghc2hvd19pbl9wYWdlcikKKwkJc2V0dXBfcGFnZXIoKTsKKworCWlmICghdXNlX2luZGV4ICYmICh1bnRyYWNrZWQgfHwgY2FjaGVkKSkKKwkJZGllKF8oIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iKSk7CisKKwlpZiAoIXVzZV9pbmRleCB8fCB1bnRyYWNrZWQpIHsKKwkJaW50IHVzZV9leGNsdWRlID0gKG9wdF9leGNsdWRlIDwgMCkgPyB1c2VfaW5kZXggOiAhIW9wdF9leGNsdWRlOworCQlpZiAobGlzdC5ucikKKwkJCWRpZShfKCItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cy4iKSk7CisJCWhpdCA9IGdyZXBfZGlyZWN0b3J5KCZvcHQsICZwYXRoc3BlYywgdXNlX2V4Y2x1ZGUpOworCX0gZWxzZSBpZiAoMCA8PSBvcHRfZXhjbHVkZSkgeworCQlkaWUoXygiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMuIikpOworCX0gZWxzZSBpZiAoIWxpc3QubnIpIHsKKwkJaWYgKCFjYWNoZWQpCisJCQlzZXR1cF93b3JrX3RyZWUoKTsKKworCQloaXQgPSBncmVwX2NhY2hlKCZvcHQsICZwYXRoc3BlYywgY2FjaGVkKTsKKwl9IGVsc2UgeworCQlpZiAoY2FjaGVkKQorCQkJZGllKF8oImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbi4iKSk7CisJCWhpdCA9IGdyZXBfb2JqZWN0cygmb3B0LCAmcGF0aHNwZWMsICZsaXN0KTsKKwl9CisKKwlpZiAodXNlX3RocmVhZHMpCisJCWhpdCB8PSB3YWl0X2FsbCgpOworCWlmIChoaXQgJiYgc2hvd19pbl9wYWdlcikKKwkJcnVuX3BhZ2VyKCZvcHQsIHByZWZpeCk7CisJZnJlZV9ncmVwX3BhdHRlcm5zKCZvcHQpOworCXJldHVybiAhaGl0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9oYXNoLW9iamVjdC5jIGIvYnVpbHRpbi9oYXNoLW9iamVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMTg0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2hhc2gtb2JqZWN0LmMKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKiBDb3B5cmlnaHQgKEMpIEp1bmlvIEMgSGFtYW5vLCAyMDA1CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisKK3N0YXRpYyB2b2lkIGhhc2hfZmQoaW50IGZkLCBjb25zdCBjaGFyICp0eXBlLCBpbnQgd3JpdGVfb2JqZWN0LCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdW5zaWduZWQgZmxhZ3MgPSAoSEFTSF9GT1JNQVRfQ0hFQ0sgfAorCQkJICAod3JpdGVfb2JqZWN0ID8gSEFTSF9XUklURV9PQkpFQ1QgOiAwKSk7CisKKwlpZiAoZnN0YXQoZmQsICZzdCkgPCAwIHx8CisJICAgIGluZGV4X2ZkKHNoYTEsIGZkLCAmc3QsIHR5cGVfZnJvbV9zdHJpbmcodHlwZSksIHBhdGgsIGZsYWdzKSkKKwkJZGllKHdyaXRlX29iamVjdAorCQkgICAgPyAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKKwkJICAgIDogIlVuYWJsZSB0byBoYXNoICVzIiwgcGF0aCk7CisJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJoYXNoIHRvIHN0ZG91dCIpOworfQorCitzdGF0aWMgdm9pZCBoYXNoX29iamVjdChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp0eXBlLCBpbnQgd3JpdGVfb2JqZWN0LAorCQkJY29uc3QgY2hhciAqdnBhdGgpCit7CisJaW50IGZkOworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKCJDYW5ub3Qgb3BlbiAnJXMnIiwgcGF0aCk7CisJaGFzaF9mZChmZCwgdHlwZSwgd3JpdGVfb2JqZWN0LCB2cGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgbm9fZmlsdGVyczsKKworc3RhdGljIHZvaWQgaGFzaF9zdGRpbl9wYXRocyhjb25zdCBjaGFyICp0eXBlLCBpbnQgd3JpdGVfb2JqZWN0cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBuYnVmID0gU1RSQlVGX0lOSVQ7CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQlpZiAoYnVmLmJ1ZlswXSA9PSAnIicpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmbmJ1Zik7CisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZuYnVmLCBidWYuYnVmLCBOVUxMKSkKKwkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQlzdHJidWZfc3dhcCgmYnVmLCAmbmJ1Zik7CisJCX0KKwkJaGFzaF9vYmplY3QoYnVmLmJ1ZiwgdHlwZSwgd3JpdGVfb2JqZWN0cywKKwkJICAgIG5vX2ZpbHRlcnMgPyBOVUxMIDogYnVmLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYnVmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoYXNoX29iamVjdF91c2FnZVtdID0geworCU5fKCJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPnwtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSBbLS1dIDxmaWxlPi4uLiIpLAorCU5fKCJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMgPCA8bGlzdC1vZi1wYXRocz4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqdHlwZTsKK3N0YXRpYyBpbnQgd3JpdGVfb2JqZWN0Oworc3RhdGljIGludCBoYXNoc3RkaW47CitzdGF0aWMgaW50IHN0ZGluX3BhdGhzOworc3RhdGljIGNvbnN0IGNoYXIgKnZwYXRoOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBoYXNoX29iamVjdF9vcHRpb25zW10gPSB7CisJT1BUX1NUUklORygndCcsIE5VTEwsICZ0eXBlLCBOXygidHlwZSIpLCBOXygib2JqZWN0IHR5cGUiKSksCisJT1BUX0JPT0xFQU4oJ3cnLCBOVUxMLCAmd3JpdGVfb2JqZWN0LCBOXygid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiKSksCisJT1BUX0JPT0xFQU4oIDAgLCAic3RkaW4iLCAmaGFzaHN0ZGluLCBOXygicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iKSksCisJT1BUX0JPT0xFQU4oIDAgLCAic3RkaW4tcGF0aHMiLCAmc3RkaW5fcGF0aHMsIE5fKCJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIpKSwKKwlPUFRfQk9PTEVBTiggMCAsICJuby1maWx0ZXJzIiwgJm5vX2ZpbHRlcnMsIE5fKCJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIpKSwKKwlPUFRfU1RSSU5HKCAwICwgInBhdGgiLCAmdnBhdGgsIE5fKCJmaWxlIiksIE5fKCJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIpKSwKKwlPUFRfRU5EKCkKK307CisKK2ludCBjbWRfaGFzaF9vYmplY3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJaW50IHByZWZpeF9sZW5ndGggPSAtMTsKKwljb25zdCBjaGFyICplcnJzdHIgPSBOVUxMOworCisJdHlwZSA9IGJsb2JfdHlwZTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIGhhc2hfb2JqZWN0X29wdGlvbnMsCisJCQkgICAgIGhhc2hfb2JqZWN0X3VzYWdlLCAwKTsKKworCWlmICh3cml0ZV9vYmplY3QpIHsKKwkJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCQlwcmVmaXhfbGVuZ3RoID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCQlpZiAodnBhdGggJiYgcHJlZml4KQorCQkJdnBhdGggPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCB2cGF0aCk7CisJfQorCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJaWYgKHN0ZGluX3BhdGhzKSB7CisJCWlmIChoYXNoc3RkaW4pCisJCQllcnJzdHIgPSAiQ2FuJ3QgdXNlIC0tc3RkaW4tcGF0aHMgd2l0aCAtLXN0ZGluIjsKKwkJZWxzZSBpZiAoYXJnYykKKwkJCWVycnN0ciA9ICJDYW4ndCBzcGVjaWZ5IGZpbGVzIHdpdGggLS1zdGRpbi1wYXRocyI7CisJCWVsc2UgaWYgKHZwYXRoKQorCQkJZXJyc3RyID0gIkNhbid0IHVzZSAtLXN0ZGluLXBhdGhzIHdpdGggLS1wYXRoIjsKKwl9CisJZWxzZSB7CisJCWlmIChoYXNoc3RkaW4gPiAxKQorCQkJZXJyc3RyID0gIk11bHRpcGxlIC0tc3RkaW4gYXJndW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIjsKKwkJaWYgKHZwYXRoICYmIG5vX2ZpbHRlcnMpCisJCQllcnJzdHIgPSAiQ2FuJ3QgdXNlIC0tcGF0aCB3aXRoIC0tbm8tZmlsdGVycyI7CisJfQorCisJaWYgKGVycnN0cikgeworCQllcnJvcigiJXMiLCBlcnJzdHIpOworCQl1c2FnZV93aXRoX29wdGlvbnMoaGFzaF9vYmplY3RfdXNhZ2UsIGhhc2hfb2JqZWN0X29wdGlvbnMpOworCX0KKworCWlmIChoYXNoc3RkaW4pCisJCWhhc2hfZmQoMCwgdHlwZSwgd3JpdGVfb2JqZWN0LCB2cGF0aCk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmICgwIDw9IHByZWZpeF9sZW5ndGgpCisJCQlhcmcgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBhcmcpOworCQloYXNoX29iamVjdChhcmcsIHR5cGUsIHdyaXRlX29iamVjdCwKKwkJCSAgICBub19maWx0ZXJzID8gTlVMTCA6IHZwYXRoID8gdnBhdGggOiBhcmcpOworCX0KKworCWlmIChzdGRpbl9wYXRocykKKwkJaGFzaF9zdGRpbl9wYXRocyh0eXBlLCB3cml0ZV9vYmplY3QpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2hlbHAuYyBiL2J1aWx0aW4vaGVscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODYyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2hlbHAuYwpAQCAtMCwwICsxLDQ4OCBAQAorLyoKKyAqIGJ1aWx0aW4taGVscC5jCisgKgorICogQnVpbHRpbiBoZWxwIGNvbW1hbmQKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAiY29tbW9uLWNtZHMuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKyNpbmNsdWRlICJoZWxwLmgiCisKKyNpZm5kZWYgREVGQVVMVF9IRUxQX0ZPUk1BVAorI2RlZmluZSBERUZBVUxUX0hFTFBfRk9STUFUICJtYW4iCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBtYW5fdmlld2VyX2xpc3QgeworCXN0cnVjdCBtYW5fdmlld2VyX2xpc3QgKm5leHQ7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfSAqbWFuX3ZpZXdlcl9saXN0OworCitzdGF0aWMgc3RydWN0IG1hbl92aWV3ZXJfaW5mb19saXN0IHsKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgKm5leHQ7CisJY29uc3QgY2hhciAqaW5mbzsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9ICptYW5fdmlld2VyX2luZm9fbGlzdDsKKworZW51bSBoZWxwX2Zvcm1hdCB7CisJSEVMUF9GT1JNQVRfTk9ORSwKKwlIRUxQX0ZPUk1BVF9NQU4sCisJSEVMUF9GT1JNQVRfSU5GTywKKwlIRUxQX0ZPUk1BVF9XRUIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpodG1sX3BhdGg7CisKK3N0YXRpYyBpbnQgc2hvd19hbGwgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBjb2xvcHRzOworc3RhdGljIGVudW0gaGVscF9mb3JtYXQgaGVscF9mb3JtYXQgPSBIRUxQX0ZPUk1BVF9OT05FOworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9oZWxwX29wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTEVBTignYScsICJhbGwiLCAmc2hvd19hbGwsIE5fKCJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIikpLAorCU9QVF9TRVRfSU5UKCdtJywgIm1hbiIsICZoZWxwX2Zvcm1hdCwgTl8oInNob3cgbWFuIHBhZ2UiKSwgSEVMUF9GT1JNQVRfTUFOKSwKKwlPUFRfU0VUX0lOVCgndycsICJ3ZWIiLCAmaGVscF9mb3JtYXQsIE5fKCJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIpLAorCQkJSEVMUF9GT1JNQVRfV0VCKSwKKwlPUFRfU0VUX0lOVCgnaScsICJpbmZvIiwgJmhlbHBfZm9ybWF0LCBOXygic2hvdyBpbmZvIHBhZ2UiKSwKKwkJCUhFTFBfRk9STUFUX0lORk8pLAorCU9QVF9FTkQoKSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9oZWxwX3VzYWdlW10gPSB7CisJTl8oImdpdCBoZWxwIFstLWFsbF0gWy0tbWFufC0td2VifC0taW5mb10gW2NvbW1hbmRdIiksCisJTlVMTAorfTsKKworc3RhdGljIGVudW0gaGVscF9mb3JtYXQgcGFyc2VfaGVscF9mb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQoreworCWlmICghc3RyY21wKGZvcm1hdCwgIm1hbiIpKQorCQlyZXR1cm4gSEVMUF9GT1JNQVRfTUFOOworCWlmICghc3RyY21wKGZvcm1hdCwgImluZm8iKSkKKwkJcmV0dXJuIEhFTFBfRk9STUFUX0lORk87CisJaWYgKCFzdHJjbXAoZm9ybWF0LCAid2ViIikgfHwgIXN0cmNtcChmb3JtYXQsICJodG1sIikpCisJCXJldHVybiBIRUxQX0ZPUk1BVF9XRUI7CisJZGllKF8oInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIiksIGZvcm1hdCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfbWFuX3ZpZXdlcl9pbmZvKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IG1hbl92aWV3ZXJfaW5mb19saXN0ICp2aWV3ZXI7CisKKwlmb3IgKHZpZXdlciA9IG1hbl92aWV3ZXJfaW5mb19saXN0OyB2aWV3ZXI7IHZpZXdlciA9IHZpZXdlci0+bmV4dCkKKwl7CisJCWlmICghc3RyY2FzZWNtcChuYW1lLCB2aWV3ZXItPm5hbWUpKQorCQkJcmV0dXJuIHZpZXdlci0+aW5mbzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZW1hY3NjbGllbnRfdmVyc2lvbih2b2lkKQoreworCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZWNfcHJvY2VzczsKKwljb25zdCBjaGFyICphcmd2X2VjW10gPSB7ICJlbWFjc2NsaWVudCIsICItLXZlcnNpb24iLCBOVUxMIH07CisJaW50IHZlcnNpb247CisKKwkvKiBlbWFjc2NsaWVudCBwcmludHMgaXRzIHZlcnNpb24gbnVtYmVyIG9uIHN0ZGVyciAqLworCW1lbXNldCgmZWNfcHJvY2VzcywgMCwgc2l6ZW9mKGVjX3Byb2Nlc3MpKTsKKwllY19wcm9jZXNzLmFyZ3YgPSBhcmd2X2VjOworCWVjX3Byb2Nlc3MuZXJyID0gLTE7CisJZWNfcHJvY2Vzcy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmZWNfcHJvY2VzcykpCisJCXJldHVybiBlcnJvcihfKCJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIikpOworCisJc3RyYnVmX3JlYWQoJmJ1ZmZlciwgZWNfcHJvY2Vzcy5lcnIsIDIwKTsKKwljbG9zZShlY19wcm9jZXNzLmVycik7CisKKwkvKgorCSAqIERvbid0IGJvdGhlciBjaGVja2luZyByZXR1cm4gdmFsdWUsIGJlY2F1c2UgImVtYWNzY2xpZW50IC0tdmVyc2lvbiIKKwkgKiBzZWVtcyB0byBhbHdheXMgZXhpdHMgd2l0aCBjb2RlIDEuCisJICovCisJZmluaXNoX2NvbW1hbmQoJmVjX3Byb2Nlc3MpOworCisJaWYgKHByZWZpeGNtcChidWZmZXIuYnVmLCAiZW1hY3NjbGllbnQiKSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwkJcmV0dXJuIGVycm9yKF8oIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIpKTsKKwl9CisKKwlzdHJidWZfcmVtb3ZlKCZidWZmZXIsIDAsIHN0cmxlbigiZW1hY3NjbGllbnQiKSk7CisJdmVyc2lvbiA9IGF0b2koYnVmZmVyLmJ1Zik7CisKKwlpZiAodmVyc2lvbiA8IDIyKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCQlyZXR1cm4gZXJyb3IoXygiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIpLAorCQkJdmVyc2lvbik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfd29tYW5fZW1hY3MoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3sKKwlpZiAoIWNoZWNrX2VtYWNzY2xpZW50X3ZlcnNpb24oKSkgeworCQkvKiBUaGlzIHdvcmtzIG9ubHkgd2l0aCBlbWFjc2NsaWVudCB2ZXJzaW9uID49IDIyLiAqLworCQlzdHJ1Y3Qgc3RyYnVmIG1hbl9wYWdlID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKCFwYXRoKQorCQkJcGF0aCA9ICJlbWFjc2NsaWVudCI7CisJCXN0cmJ1Zl9hZGRmKCZtYW5fcGFnZSwgIih3b21hbiBcIiVzXCIpIiwgcGFnZSk7CisJCWV4ZWNscChwYXRoLCAiZW1hY3NjbGllbnQiLCAiLWUiLCBtYW5fcGFnZS5idWYsIChjaGFyICopTlVMTCk7CisJCXdhcm5pbmcoXygiZmFpbGVkIHRvIGV4ZWMgJyVzJzogJXMiKSwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX2tvbnF1ZXJvcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYWdlKQoreworCWNvbnN0IGNoYXIgKmRpc3BsYXkgPSBnZXRlbnYoIkRJU1BMQVkiKTsKKwlpZiAoZGlzcGxheSAmJiAqZGlzcGxheSkgeworCQlzdHJ1Y3Qgc3RyYnVmIG1hbl9wYWdlID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gImtmbWNsaWVudCI7CisKKwkJLyogSXQncyBzaW1wbGVyIHRvIGxhdW5jaCBrb25xdWVyb3IgdXNpbmcga2ZtY2xpZW50LiAqLworCQlpZiAocGF0aCkgeworCQkJY29uc3QgY2hhciAqZmlsZSA9IHN0cnJjaHIocGF0aCwgJy8nKTsKKwkJCWlmIChmaWxlICYmICFzdHJjbXAoZmlsZSArIDEsICJrb25xdWVyb3IiKSkgeworCQkJCWNoYXIgKm5ldyA9IHhzdHJkdXAocGF0aCk7CisJCQkJY2hhciAqZGVzdCA9IHN0cnJjaHIobmV3LCAnLycpOworCisJCQkJLyogc3RybGVuKCJrb25xdWVyb3IiKSA9PSBzdHJsZW4oImtmbWNsaWVudCIpICovCisJCQkJc3RyY3B5KGRlc3QgKyAxLCAia2ZtY2xpZW50Iik7CisJCQkJcGF0aCA9IG5ldzsKKwkJCX0KKwkJCWlmIChmaWxlKQorCQkJCWZpbGVuYW1lID0gZmlsZTsKKwkJfSBlbHNlCisJCQlwYXRoID0gImtmbWNsaWVudCI7CisJCXN0cmJ1Zl9hZGRmKCZtYW5fcGFnZSwgIm1hbjolcygxKSIsIHBhZ2UpOworCQlleGVjbHAocGF0aCwgZmlsZW5hbWUsICJuZXdUYWIiLCBtYW5fcGFnZS5idWYsIChjaGFyICopTlVMTCk7CisJCXdhcm5pbmcoXygiZmFpbGVkIHRvIGV4ZWMgJyVzJzogJXMiKSwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX21hbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYWdlKQoreworCWlmICghcGF0aCkKKwkJcGF0aCA9ICJtYW4iOworCWV4ZWNscChwYXRoLCAibWFuIiwgcGFnZSwgKGNoYXIgKilOVUxMKTsKKwl3YXJuaW5nKF8oImZhaWxlZCB0byBleGVjICclcyc6ICVzIiksIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX2NtZChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IHN0cmJ1ZiBzaGVsbF9jbWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkZigmc2hlbGxfY21kLCAiJXMgJXMiLCBjbWQsIHBhZ2UpOworCWV4ZWNsKCIvYmluL3NoIiwgInNoIiwgIi1jIiwgc2hlbGxfY21kLmJ1ZiwgKGNoYXIgKilOVUxMKTsKKwl3YXJuaW5nKF8oImZhaWxlZCB0byBleGVjICclcyc6ICVzIiksIGNtZCwgc3RyZXJyb3IoZXJybm8pKTsKK30KKworc3RhdGljIHZvaWQgYWRkX21hbl92aWV3ZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9saXN0ICoqcCA9ICZtYW5fdmlld2VyX2xpc3Q7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKKworCXdoaWxlICgqcCkKKwkJcCA9ICYoKCpwKS0+bmV4dCk7CisJKnAgPSB4Y2FsbG9jKDEsIChzaXplb2YoKipwKSArIGxlbiArIDEpKTsKKwlzdHJuY3B5KCgqcCktPm5hbWUsIG5hbWUsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgc3VwcG9ydGVkX21hbl92aWV3ZXIoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gKCFzdHJuY2FzZWNtcCgibWFuIiwgbmFtZSwgbGVuKSB8fAorCQkhc3RybmNhc2VjbXAoIndvbWFuIiwgbmFtZSwgbGVuKSB8fAorCQkhc3RybmNhc2VjbXAoImtvbnF1ZXJvciIsIG5hbWUsIGxlbikpOworfQorCitzdGF0aWMgdm9pZCBkb19hZGRfbWFuX3ZpZXdlcl9pbmZvKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgc2l6ZV90IGxlbiwKKwkJCQkgICBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgKm5ldyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpuZXcpICsgbGVuICsgMSk7CisKKwlzdHJuY3B5KG5ldy0+bmFtZSwgbmFtZSwgbGVuKTsKKwluZXctPmluZm8gPSB4c3RyZHVwKHZhbHVlKTsKKwluZXctPm5leHQgPSBtYW5fdmlld2VyX2luZm9fbGlzdDsKKwltYW5fdmlld2VyX2luZm9fbGlzdCA9IG5ldzsKK30KKworc3RhdGljIGludCBhZGRfbWFuX3ZpZXdlcl9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgc2l6ZV90IGxlbiwKKwkJCSAgICAgICBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoc3VwcG9ydGVkX21hbl92aWV3ZXIobmFtZSwgbGVuKSkKKwkJZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhuYW1lLCBsZW4sIHZhbHVlKTsKKwllbHNlCisJCXdhcm5pbmcoXygiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKwkJCSAgIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIiksCisJCQluYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyX2NtZChjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgc2l6ZV90IGxlbiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmIChzdXBwb3J0ZWRfbWFuX3ZpZXdlcihuYW1lLCBsZW4pKQorCQl3YXJuaW5nKF8oIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisJCQkgICJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iKSwKKwkJCW5hbWUpOworCWVsc2UKKwkJZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhuYW1lLCBsZW4sIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyX2luZm8oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICpuYW1lID0gdmFyICsgNDsKKwljb25zdCBjaGFyICpzdWJrZXkgPSBzdHJyY2hyKG5hbWUsICcuJyk7CisKKwlpZiAoIXN1YmtleSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN0cmNtcChzdWJrZXksICIucGF0aCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGFkZF9tYW5fdmlld2VyX3BhdGgobmFtZSwgc3Via2V5IC0gbmFtZSwgdmFsdWUpOworCX0KKwlpZiAoIXN0cmNtcChzdWJrZXksICIuY21kIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlyZXR1cm4gYWRkX21hbl92aWV3ZXJfY21kKG5hbWUsIHN1YmtleSAtIG5hbWUsIHZhbHVlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfaGVscF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFwcmVmaXhjbXAodmFyLCAiY29sdW1uLiIpKQorCQlyZXR1cm4gZ2l0X2NvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgImhlbHAiLCAmY29sb3B0cyk7CisJaWYgKCFzdHJjbXAodmFyLCAiaGVscC5mb3JtYXQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWhlbHBfZm9ybWF0ID0gcGFyc2VfaGVscF9mb3JtYXQodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiaGVscC5odG1scGF0aCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJaHRtbF9wYXRoID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJtYW4udmlld2VyIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlhZGRfbWFuX3ZpZXdlcih2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXByZWZpeGNtcCh2YXIsICJtYW4uIikpCisJCXJldHVybiBhZGRfbWFuX3ZpZXdlcl9pbmZvKHZhciwgdmFsdWUpOworCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY21kbmFtZXMgbWFpbl9jbWRzLCBvdGhlcl9jbWRzOworCit2b2lkIGxpc3RfY29tbW9uX2NtZHNfaGVscCh2b2lkKQoreworCWludCBpLCBsb25nZXN0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1vbl9jbWRzKTsgaSsrKSB7CisJCWlmIChsb25nZXN0IDwgc3RybGVuKGNvbW1vbl9jbWRzW2ldLm5hbWUpKQorCQkJbG9uZ2VzdCA9IHN0cmxlbihjb21tb25fY21kc1tpXS5uYW1lKTsKKwl9CisKKwlwdXRzKF8oIlRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZ2l0IGNvbW1hbmRzIGFyZToiKSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbW9uX2NtZHMpOyBpKyspIHsKKwkJcHJpbnRmKCIgICAlcyAgICIsIGNvbW1vbl9jbWRzW2ldLm5hbWUpOworCQltcHV0X2NoYXIoJyAnLCBsb25nZXN0IC0gc3RybGVuKGNvbW1vbl9jbWRzW2ldLm5hbWUpKTsKKwkJcHV0cyhfKGNvbW1vbl9jbWRzW2ldLmhlbHApKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXNfZ2l0X2NvbW1hbmQoY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gaXNfaW5fY21kbGlzdCgmbWFpbl9jbWRzLCBzKSB8fAorCQlpc19pbl9jbWRsaXN0KCZvdGhlcl9jbWRzLCBzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnByZXBlbmQoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpjbWQpCit7CisJc2l6ZV90IHByZV9sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwlzaXplX3QgY21kX2xlbiA9IHN0cmxlbihjbWQpOworCWNoYXIgKnAgPSB4bWFsbG9jKHByZV9sZW4gKyBjbWRfbGVuICsgMSk7CisJbWVtY3B5KHAsIHByZWZpeCwgcHJlX2xlbik7CisJc3RyY3B5KHAgKyBwcmVfbGVuLCBjbWQpOworCXJldHVybiBwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY21kX3RvX3BhZ2UoY29uc3QgY2hhciAqZ2l0X2NtZCkKK3sKKwlpZiAoIWdpdF9jbWQpCisJCXJldHVybiAiZ2l0IjsKKwllbHNlIGlmICghcHJlZml4Y21wKGdpdF9jbWQsICJnaXQiKSkKKwkJcmV0dXJuIGdpdF9jbWQ7CisJZWxzZSBpZiAoaXNfZ2l0X2NvbW1hbmQoZ2l0X2NtZCkpCisJCXJldHVybiBwcmVwZW5kKCJnaXQtIiwgZ2l0X2NtZCk7CisJZWxzZQorCQlyZXR1cm4gcHJlcGVuZCgiZ2l0IiwgZ2l0X2NtZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX21hbl9wYXRoKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBuZXdfcGF0aCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm9sZF9wYXRoID0gZ2V0ZW52KCJNQU5QQVRIIik7CisKKwkvKiBXZSBzaG91bGQgYWx3YXlzIHB1dCAnOicgYWZ0ZXIgb3VyIHBhdGguIElmIHRoZXJlIGlzIG5vCisJICogb2xkX3BhdGgsIHRoZSAnOicgYXQgdGhlIGVuZCB3aWxsIGxldCAnbWFuJyB0byB0cnkKKwkgKiBzeXN0ZW0td2lkZSBwYXRocyBhZnRlciBvdXJzIHRvIGZpbmQgdGhlIG1hbnVhbCBwYWdlLiBJZgorCSAqIHRoZXJlIGlzIG9sZF9wYXRoLCB3ZSBuZWVkICc6JyBhcyBkZWxpbWl0ZXIuICovCisJc3RyYnVmX2FkZHN0cigmbmV3X3BhdGgsIHN5c3RlbV9wYXRoKEdJVF9NQU5fUEFUSCkpOworCXN0cmJ1Zl9hZGRjaCgmbmV3X3BhdGgsICc6Jyk7CisJaWYgKG9sZF9wYXRoKQorCQlzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgb2xkX3BhdGgpOworCisJc2V0ZW52KCJNQU5QQVRIIiwgbmV3X3BhdGguYnVmLCAxKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdfcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfdmlld2VyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhZ2UpCit7CisJY29uc3QgY2hhciAqaW5mbyA9IGdldF9tYW5fdmlld2VyX2luZm8obmFtZSk7CisKKwlpZiAoIXN0cmNhc2VjbXAobmFtZSwgIm1hbiIpKQorCQlleGVjX21hbl9tYW4oaW5mbywgcGFnZSk7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAobmFtZSwgIndvbWFuIikpCisJCWV4ZWNfd29tYW5fZW1hY3MoaW5mbywgcGFnZSk7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAobmFtZSwgImtvbnF1ZXJvciIpKQorCQlleGVjX21hbl9rb25xdWVyb3IoaW5mbywgcGFnZSk7CisJZWxzZSBpZiAoaW5mbykKKwkJZXhlY19tYW5fY21kKGluZm8sIHBhZ2UpOworCWVsc2UKKwkJd2FybmluZyhfKCInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIiksIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBzaG93X21hbl9wYWdlKGNvbnN0IGNoYXIgKmdpdF9jbWQpCit7CisJc3RydWN0IG1hbl92aWV3ZXJfbGlzdCAqdmlld2VyOworCWNvbnN0IGNoYXIgKnBhZ2UgPSBjbWRfdG9fcGFnZShnaXRfY21kKTsKKwljb25zdCBjaGFyICpmYWxsYmFjayA9IGdldGVudigiR0lUX01BTl9WSUVXRVIiKTsKKworCXNldHVwX21hbl9wYXRoKCk7CisJZm9yICh2aWV3ZXIgPSBtYW5fdmlld2VyX2xpc3Q7IHZpZXdlcjsgdmlld2VyID0gdmlld2VyLT5uZXh0KQorCXsKKwkJZXhlY192aWV3ZXIodmlld2VyLT5uYW1lLCBwYWdlKTsgLyogd2lsbCByZXR1cm4gd2hlbiB1bmFibGUgKi8KKwl9CisJaWYgKGZhbGxiYWNrKQorCQlleGVjX3ZpZXdlcihmYWxsYmFjaywgcGFnZSk7CisJZXhlY192aWV3ZXIoIm1hbiIsIHBhZ2UpOworCWRpZShfKCJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfaW5mb19wYWdlKGNvbnN0IGNoYXIgKmdpdF9jbWQpCit7CisJY29uc3QgY2hhciAqcGFnZSA9IGNtZF90b19wYWdlKGdpdF9jbWQpOworCXNldGVudigiSU5GT1BBVEgiLCBzeXN0ZW1fcGF0aChHSVRfSU5GT19QQVRIKSwgMSk7CisJZXhlY2xwKCJpbmZvIiwgImluZm8iLCAiZ2l0bWFuIiwgcGFnZSwgKGNoYXIgKilOVUxMKTsKKwlkaWUoXygibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIpKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2h0bWxfcGFnZV9wYXRoKHN0cnVjdCBzdHJidWYgKnBhZ2VfcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpZiAoIWh0bWxfcGF0aCkKKwkJaHRtbF9wYXRoID0gc3lzdGVtX3BhdGgoR0lUX0hUTUxfUEFUSCk7CisKKwkvKiBDaGVjayB0aGF0IHdlIGhhdmUgYSBnaXQgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuICovCisJaWYgKCFzdHJzdHIoaHRtbF9wYXRoLCAiOi8vIikpIHsKKwkJaWYgKHN0YXQobWtwYXRoKCIlcy9naXQuaHRtbCIsIGh0bWxfcGF0aCksICZzdCkKKwkJICAgIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQkJZGllKCInJXMnOiBub3QgYSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4iLCBodG1sX3BhdGgpOworCX0KKworCXN0cmJ1Zl9pbml0KHBhZ2VfcGF0aCwgMCk7CisJc3RyYnVmX2FkZGYocGFnZV9wYXRoLCAiJXMvJXMuaHRtbCIsIGh0bWxfcGF0aCwgcGFnZSk7Cit9CisKKy8qCisgKiBJZiBvcGVuX2h0bWwgaXMgbm90IGRlZmluZWQgaW4gYSBwbGF0Zm9ybS1zcGVjaWZpYyB3YXkgKHNlZSBmb3IKKyAqIGV4YW1wbGUgY29tcGF0L21pbmd3LmgpLCB3ZSB1c2UgdGhlIHNjcmlwdCB3ZWItLWJyb3dzZSB0byBkaXNwbGF5CisgKiBIVE1MLgorICovCisjaWZuZGVmIG9wZW5faHRtbAorc3RhdGljIHZvaWQgb3Blbl9odG1sKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJZXhlY2xfZ2l0X2NtZCgid2ViLS1icm93c2UiLCAiLWMiLCAiaGVscC5icm93c2VyIiwgcGF0aCwgKGNoYXIgKilOVUxMKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzaG93X2h0bWxfcGFnZShjb25zdCBjaGFyICpnaXRfY21kKQoreworCWNvbnN0IGNoYXIgKnBhZ2UgPSBjbWRfdG9fcGFnZShnaXRfY21kKTsKKwlzdHJ1Y3Qgc3RyYnVmIHBhZ2VfcGF0aDsgLyogaXQgbGVha3MgYnV0IHdlIGV4ZWMgYmVsbG93ICovCisKKwlnZXRfaHRtbF9wYWdlX3BhdGgoJnBhZ2VfcGF0aCwgcGFnZSk7CisKKwlvcGVuX2h0bWwocGFnZV9wYXRoLmJ1Zik7Cit9CisKK2ludCBjbWRfaGVscChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgbm9uZ2l0OworCWNvbnN0IGNoYXIgKmFsaWFzOworCWVudW0gaGVscF9mb3JtYXQgcGFyc2VkX2hlbHBfZm9ybWF0OworCWxvYWRfY29tbWFuZF9saXN0KCJnaXQtIiwgJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2hlbHBfb3B0aW9ucywKKwkJCWJ1aWx0aW5faGVscF91c2FnZSwgMCk7CisJcGFyc2VkX2hlbHBfZm9ybWF0ID0gaGVscF9mb3JtYXQ7CisKKwlpZiAoc2hvd19hbGwpIHsKKwkJZ2l0X2NvbmZpZyhnaXRfaGVscF9jb25maWcsIE5VTEwpOworCQlwcmludGYoXygidXNhZ2U6ICVzJXMiKSwgXyhnaXRfdXNhZ2Vfc3RyaW5nKSwgIlxuXG4iKTsKKwkJbGlzdF9jb21tYW5kcyhjb2xvcHRzLCAmbWFpbl9jbWRzLCAmb3RoZXJfY21kcyk7CisJCXByaW50ZigiJXNcbiIsIF8oZ2l0X21vcmVfaW5mb19zdHJpbmcpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFhcmd2WzBdKSB7CisJCXByaW50ZihfKCJ1c2FnZTogJXMlcyIpLCBfKGdpdF91c2FnZV9zdHJpbmcpLCAiXG5cbiIpOworCQlsaXN0X2NvbW1vbl9jbWRzX2hlbHAoKTsKKwkJcHJpbnRmKCJcbiVzXG4iLCBfKGdpdF9tb3JlX2luZm9fc3RyaW5nKSk7CisJCXJldHVybiAwOworCX0KKworCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOworCWdpdF9jb25maWcoZ2l0X2hlbHBfY29uZmlnLCBOVUxMKTsKKworCWlmIChwYXJzZWRfaGVscF9mb3JtYXQgIT0gSEVMUF9GT1JNQVRfTk9ORSkKKwkJaGVscF9mb3JtYXQgPSBwYXJzZWRfaGVscF9mb3JtYXQ7CisJaWYgKGhlbHBfZm9ybWF0ID09IEhFTFBfRk9STUFUX05PTkUpCisJCWhlbHBfZm9ybWF0ID0gcGFyc2VfaGVscF9mb3JtYXQoREVGQVVMVF9IRUxQX0ZPUk1BVCk7CisKKwlhbGlhcyA9IGFsaWFzX2xvb2t1cChhcmd2WzBdKTsKKwlpZiAoYWxpYXMgJiYgIWlzX2dpdF9jb21tYW5kKGFyZ3ZbMF0pKSB7CisJCXByaW50Zl9sbihfKCJgZ2l0ICVzJyBpcyBhbGlhc2VkIHRvIGAlcyciKSwgYXJndlswXSwgYWxpYXMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGhlbHBfZm9ybWF0KSB7CisJY2FzZSBIRUxQX0ZPUk1BVF9OT05FOgorCWNhc2UgSEVMUF9GT1JNQVRfTUFOOgorCQlzaG93X21hbl9wYWdlKGFyZ3ZbMF0pOworCQlicmVhazsKKwljYXNlIEhFTFBfRk9STUFUX0lORk86CisJCXNob3dfaW5mb19wYWdlKGFyZ3ZbMF0pOworCQlicmVhazsKKwljYXNlIEhFTFBfRk9STUFUX1dFQjoKKwkJc2hvd19odG1sX3BhZ2UoYXJndlswXSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9pbmRleC1wYWNrLmMgYi9idWlsdGluL2luZGV4LXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2QzNjRiCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9pbmRleC1wYWNrLmMKQEAgLTAsMCArMSwxNjM0IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgImNzdW0tZmlsZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJmc2NrLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgaW5kZXhfcGFja191c2FnZVtdID0KKyJnaXQgaW5kZXgtcGFjayBbLXZdIFstbyA8aW5kZXgtZmlsZT5dIFstLWtlZXAgfCAtLWtlZXA9PG1zZz5dIFstLXZlcmlmeV0gWy0tc3RyaWN0XSAoPHBhY2stZmlsZT4gfCAtLXN0ZGluIFstLWZpeC10aGluXSBbPHBhY2stZmlsZT5dKSI7CisKK3N0cnVjdCBvYmplY3RfZW50cnkgeworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSBpZHg7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGludCBoZHJfc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJZW51bSBvYmplY3RfdHlwZSByZWFsX3R5cGU7CisJdW5zaWduZWQgZGVsdGFfZGVwdGg7CisJaW50IGJhc2Vfb2JqZWN0X25vOworfTsKKwordW5pb24gZGVsdGFfYmFzZSB7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlvZmZfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgYmFzZV9kYXRhIHsKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlOworCXN0cnVjdCBiYXNlX2RhdGEgKmNoaWxkOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iajsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgcmVmX2ZpcnN0LCByZWZfbGFzdDsKKwlpbnQgb2ZzX2ZpcnN0LCBvZnNfbGFzdDsKK307CisKKyNpZiAhZGVmaW5lZChOT19QVEhSRUFEUykgJiYgZGVmaW5lZChOT19USFJFQURfU0FGRV9QUkVBRCkKKy8qIHByZWFkKCkgZW11bGF0aW9uIGlzIG5vdCB0aHJlYWQtc2FmZS4gRGlzYWJsZSB0aHJlYWRpbmcuICovCisjZGVmaW5lIE5PX1BUSFJFQURTCisjZW5kaWYKKworc3RydWN0IHRocmVhZF9sb2NhbCB7CisjaWZuZGVmIE5PX1BUSFJFQURTCisJcHRocmVhZF90IHRocmVhZDsKKyNlbmRpZgorCXN0cnVjdCBiYXNlX2RhdGEgKmJhc2VfY2FjaGU7CisJc2l6ZV90IGJhc2VfY2FjaGVfdXNlZDsKK307CisKKy8qCisgKiBFdmVuIGlmIHNpemVvZih1bmlvbiBkZWx0YV9iYXNlKSA9PSAyNCBvbiA2NC1iaXQgYXJjaHMsIHdlIHJlYWxseSB3YW50CisgKiB0byBtZW1jbXAoKSBvbmx5IHRoZSBmaXJzdCAyMCBieXRlcy4KKyAqLworI2RlZmluZSBVTklPTl9CQVNFX1NaCTIwCisKKyNkZWZpbmUgRkxBR19MSU5LICgxdTw8MjApCisjZGVmaW5lIEZMQUdfQ0hFQ0tFRCAoMXU8PDIxKQorCitzdHJ1Y3QgZGVsdGFfZW50cnkgeworCXVuaW9uIGRlbHRhX2Jhc2UgYmFzZTsKKwlpbnQgb2JqX25vOworfTsKKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdHM7CitzdGF0aWMgc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YXM7CitzdGF0aWMgc3RydWN0IHRocmVhZF9sb2NhbCBub3RocmVhZF9kYXRhOworc3RhdGljIGludCBucl9vYmplY3RzOworc3RhdGljIGludCBucl9kZWx0YXM7CitzdGF0aWMgaW50IG5yX3Jlc29sdmVkX2RlbHRhczsKK3N0YXRpYyBpbnQgbnJfdGhyZWFkczsKKworc3RhdGljIGludCBmcm9tX3N0ZGluOworc3RhdGljIGludCBzdHJpY3Q7CitzdGF0aWMgaW50IHZlcmJvc2U7CisKK3N0YXRpYyBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCisvKiBXZSBhbHdheXMgcmVhZCBpbiA0a0IgY2h1bmtzLiAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5wdXRfYnVmZmVyWzQwOTZdOworc3RhdGljIHVuc2lnbmVkIGludCBpbnB1dF9vZmZzZXQsIGlucHV0X2xlbjsKK3N0YXRpYyBvZmZfdCBjb25zdW1lZF9ieXRlczsKK3N0YXRpYyB1bnNpZ25lZCBkZWVwZXN0X2RlbHRhOworc3RhdGljIGdpdF9TSEFfQ1RYIGlucHV0X2N0eDsKK3N0YXRpYyB1aW50MzJfdCBpbnB1dF9jcmMzMjsKK3N0YXRpYyBpbnQgaW5wdXRfZmQsIG91dHB1dF9mZCwgcGFja19mZDsKKworI2lmbmRlZiBOT19QVEhSRUFEUworCitzdGF0aWMgc3RydWN0IHRocmVhZF9sb2NhbCAqdGhyZWFkX2RhdGE7CitzdGF0aWMgaW50IG5yX2Rpc3BhdGNoZWQ7CitzdGF0aWMgaW50IHRocmVhZHNfYWN0aXZlOworCitzdGF0aWMgcHRocmVhZF9tdXRleF90IHJlYWRfbXV0ZXg7CisjZGVmaW5lIHJlYWRfbG9jaygpCQlsb2NrX211dGV4KCZyZWFkX211dGV4KQorI2RlZmluZSByZWFkX3VubG9jaygpCQl1bmxvY2tfbXV0ZXgoJnJlYWRfbXV0ZXgpCisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgY291bnRlcl9tdXRleDsKKyNkZWZpbmUgY291bnRlcl9sb2NrKCkJCWxvY2tfbXV0ZXgoJmNvdW50ZXJfbXV0ZXgpCisjZGVmaW5lIGNvdW50ZXJfdW5sb2NrKCkJdW5sb2NrX211dGV4KCZjb3VudGVyX211dGV4KQorCitzdGF0aWMgcHRocmVhZF9tdXRleF90IHdvcmtfbXV0ZXg7CisjZGVmaW5lIHdvcmtfbG9jaygpCQlsb2NrX211dGV4KCZ3b3JrX211dGV4KQorI2RlZmluZSB3b3JrX3VubG9jaygpCQl1bmxvY2tfbXV0ZXgoJndvcmtfbXV0ZXgpCisKK3N0YXRpYyBwdGhyZWFkX2tleV90IGtleTsKKworc3RhdGljIGlubGluZSB2b2lkIGxvY2tfbXV0ZXgocHRocmVhZF9tdXRleF90ICptdXRleCkKK3sKKwlpZiAodGhyZWFkc19hY3RpdmUpCisJCXB0aHJlYWRfbXV0ZXhfbG9jayhtdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbXV0ZXgocHRocmVhZF9tdXRleF90ICptdXRleCkKK3sKKwlpZiAodGhyZWFkc19hY3RpdmUpCisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKG11dGV4KTsKK30KKworLyoKKyAqIE11dGV4IGFuZCBjb25kaXRpb25hbCB2YXJpYWJsZSBjYW4ndCBiZSBzdGF0aWNhbGx5LWluaXRpYWxpemVkIG9uIFdpbmRvd3MuCisgKi8KK3N0YXRpYyB2b2lkIGluaXRfdGhyZWFkKHZvaWQpCit7CisJaW5pdF9yZWN1cnNpdmVfbXV0ZXgoJnJlYWRfbXV0ZXgpOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmY291bnRlcl9tdXRleCwgTlVMTCk7CisJcHRocmVhZF9tdXRleF9pbml0KCZ3b3JrX211dGV4LCBOVUxMKTsKKwlwdGhyZWFkX2tleV9jcmVhdGUoJmtleSwgTlVMTCk7CisJdGhyZWFkX2RhdGEgPSB4Y2FsbG9jKG5yX3RocmVhZHMsIHNpemVvZigqdGhyZWFkX2RhdGEpKTsKKwl0aHJlYWRzX2FjdGl2ZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfdGhyZWFkKHZvaWQpCit7CisJaWYgKCF0aHJlYWRzX2FjdGl2ZSkKKwkJcmV0dXJuOworCXRocmVhZHNfYWN0aXZlID0gMDsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnJlYWRfbXV0ZXgpOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmY291bnRlcl9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZ3b3JrX211dGV4KTsKKwlwdGhyZWFkX2tleV9kZWxldGUoa2V5KTsKKwlmcmVlKHRocmVhZF9kYXRhKTsKK30KKworI2Vsc2UKKworI2RlZmluZSByZWFkX2xvY2soKQorI2RlZmluZSByZWFkX3VubG9jaygpCisKKyNkZWZpbmUgY291bnRlcl9sb2NrKCkKKyNkZWZpbmUgY291bnRlcl91bmxvY2soKQorCisjZGVmaW5lIHdvcmtfbG9jaygpCisjZGVmaW5lIHdvcmtfdW5sb2NrKCkKKworI2VuZGlmCisKKworc3RhdGljIGludCBtYXJrX2xpbmsoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC0xOworCisJaWYgKHR5cGUgIT0gT0JKX0FOWSAmJiBvYmotPnR5cGUgIT0gdHlwZSkKKwkJZGllKF8oIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIiksIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCisJb2JqLT5mbGFncyB8PSBGTEFHX0xJTks7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoZSBjb250ZW50IG9mIGVhY2ggbGlua2VkIG9iamVjdCBtdXN0IGhhdmUgYmVlbiBjaGVja2VkCisgICBvciBpdCBtdXN0IGJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlICovCitzdGF0aWMgdm9pZCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCWlmICghb2JqKQorCQlyZXR1cm47CisKKwlpZiAoIShvYmotPmZsYWdzICYgRkxBR19MSU5LKSkKKwkJcmV0dXJuOworCisJaWYgKCEob2JqLT5mbGFncyAmIEZMQUdfQ0hFQ0tFRCkpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQlpbnQgdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8ob2JqLT5zaGExLCAmc2l6ZSk7CisJCWlmICh0eXBlICE9IG9iai0+dHlwZSB8fCB0eXBlIDw9IDApCisJCQlkaWUoXygib2JqZWN0IG9mIHVuZXhwZWN0ZWQgdHlwZSIpKTsKKwkJb2JqLT5mbGFncyB8PSBGTEFHX0NIRUNLRUQ7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX29iamVjdHModm9pZCkKK3sKKwl1bnNpZ25lZCBpLCBtYXg7CisKKwltYXggPSBnZXRfbWF4X29iamVjdF9pbmRleCgpOworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykKKwkJY2hlY2tfb2JqZWN0KGdldF9pbmRleGVkX29iamVjdChpKSk7Cit9CisKKworLyogRGlzY2FyZCBjdXJyZW50IGJ1ZmZlciB1c2VkIGNvbnRlbnQuICovCitzdGF0aWMgdm9pZCBmbHVzaCh2b2lkKQoreworCWlmIChpbnB1dF9vZmZzZXQpIHsKKwkJaWYgKG91dHB1dF9mZCA+PSAwKQorCQkJd3JpdGVfb3JfZGllKG91dHB1dF9mZCwgaW5wdXRfYnVmZmVyLCBpbnB1dF9vZmZzZXQpOworCQlnaXRfU0hBMV9VcGRhdGUoJmlucHV0X2N0eCwgaW5wdXRfYnVmZmVyLCBpbnB1dF9vZmZzZXQpOworCQltZW1tb3ZlKGlucHV0X2J1ZmZlciwgaW5wdXRfYnVmZmVyICsgaW5wdXRfb2Zmc2V0LCBpbnB1dF9sZW4pOworCQlpbnB1dF9vZmZzZXQgPSAwOworCX0KK30KKworLyoKKyAqIE1ha2Ugc3VyZSBhdCBsZWFzdCAibWluIiBieXRlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBidWZmZXIsIGFuZAorICogcmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkICpmaWxsKGludCBtaW4pCit7CisJaWYgKG1pbiA8PSBpbnB1dF9sZW4pCisJCXJldHVybiBpbnB1dF9idWZmZXIgKyBpbnB1dF9vZmZzZXQ7CisJaWYgKG1pbiA+IHNpemVvZihpbnB1dF9idWZmZXIpKQorCQlkaWUoUV8oImNhbm5vdCBmaWxsICVkIGJ5dGUiLAorCQkgICAgICAgImNhbm5vdCBmaWxsICVkIGJ5dGVzIiwKKwkJICAgICAgIG1pbiksCisJCSAgICBtaW4pOworCWZsdXNoKCk7CisJZG8geworCQlzc2l6ZV90IHJldCA9IHhyZWFkKGlucHV0X2ZkLCBpbnB1dF9idWZmZXIgKyBpbnB1dF9sZW4sCisJCQkJc2l6ZW9mKGlucHV0X2J1ZmZlcikgLSBpbnB1dF9sZW4pOworCQlpZiAocmV0IDw9IDApIHsKKwkJCWlmICghcmV0KQorCQkJCWRpZShfKCJlYXJseSBFT0YiKSk7CisJCQlkaWVfZXJybm8oXygicmVhZCBlcnJvciBvbiBpbnB1dCIpKTsKKwkJfQorCQlpbnB1dF9sZW4gKz0gcmV0OworCQlpZiAoZnJvbV9zdGRpbikKKwkJCWRpc3BsYXlfdGhyb3VnaHB1dChwcm9ncmVzcywgY29uc3VtZWRfYnl0ZXMgKyBpbnB1dF9sZW4pOworCX0gd2hpbGUgKGlucHV0X2xlbiA8IG1pbik7CisJcmV0dXJuIGlucHV0X2J1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgdXNlKGludCBieXRlcykKK3sKKwlpZiAoYnl0ZXMgPiBpbnB1dF9sZW4pCisJCWRpZShfKCJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIpKTsKKwlpbnB1dF9jcmMzMiA9IGNyYzMyKGlucHV0X2NyYzMyLCBpbnB1dF9idWZmZXIgKyBpbnB1dF9vZmZzZXQsIGJ5dGVzKTsKKwlpbnB1dF9sZW4gLT0gYnl0ZXM7CisJaW5wdXRfb2Zmc2V0ICs9IGJ5dGVzOworCisJLyogbWFrZSBzdXJlIG9mZl90IGlzIHN1ZmZpY2llbnRseSBsYXJnZSBub3QgdG8gd3JhcCAqLworCWlmIChzaWduZWRfYWRkX292ZXJmbG93cyhjb25zdW1lZF9ieXRlcywgYnl0ZXMpKQorCQlkaWUoXygicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIpKTsKKwljb25zdW1lZF9ieXRlcyArPSBieXRlczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fcGFja19maWxlKGNvbnN0IGNoYXIgKnBhY2tfbmFtZSkKK3sKKwlpZiAoZnJvbV9zdGRpbikgeworCQlpbnB1dF9mZCA9IDA7CisJCWlmICghcGFja19uYW1lKSB7CisJCQlzdGF0aWMgY2hhciB0bXBfZmlsZVtQQVRIX01BWF07CisJCQlvdXRwdXRfZmQgPSBvZGJfbWtzdGVtcCh0bXBfZmlsZSwgc2l6ZW9mKHRtcF9maWxlKSwKKwkJCQkJCSJwYWNrL3RtcF9wYWNrX1hYWFhYWCIpOworCQkJcGFja19uYW1lID0geHN0cmR1cCh0bXBfZmlsZSk7CisJCX0gZWxzZQorCQkJb3V0cHV0X2ZkID0gb3BlbihwYWNrX25hbWUsIE9fQ1JFQVR8T19FWENMfE9fUkRXUiwgMDYwMCk7CisJCWlmIChvdXRwdXRfZmQgPCAwKQorCQkJZGllX2Vycm5vKF8oInVuYWJsZSB0byBjcmVhdGUgJyVzJyIpLCBwYWNrX25hbWUpOworCQlwYWNrX2ZkID0gb3V0cHV0X2ZkOworCX0gZWxzZSB7CisJCWlucHV0X2ZkID0gb3BlbihwYWNrX25hbWUsIE9fUkRPTkxZKTsKKwkJaWYgKGlucHV0X2ZkIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIiksIHBhY2tfbmFtZSk7CisJCW91dHB1dF9mZCA9IC0xOworCQlwYWNrX2ZkID0gaW5wdXRfZmQ7CisJfQorCWdpdF9TSEExX0luaXQoJmlucHV0X2N0eCk7CisJcmV0dXJuIHBhY2tfbmFtZTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfcGFja19oZWFkZXIodm9pZCkKK3sKKwlzdHJ1Y3QgcGFja19oZWFkZXIgKmhkciA9IGZpbGwoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikpOworCisJLyogSGVhZGVyIGNvbnNpc3RlbmN5IGNoZWNrICovCisJaWYgKGhkci0+aGRyX3NpZ25hdHVyZSAhPSBodG9ubChQQUNLX1NJR05BVFVSRSkpCisJCWRpZShfKCJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIpKTsKKwlpZiAoIXBhY2tfdmVyc2lvbl9vayhoZHItPmhkcl92ZXJzaW9uKSkKKwkJZGllKF8oInBhY2sgdmVyc2lvbiAlIlBSSXUzMiIgdW5zdXBwb3J0ZWQiKSwKKwkJCW50b2hsKGhkci0+aGRyX3ZlcnNpb24pKTsKKworCW5yX29iamVjdHMgPSBudG9obChoZHItPmhkcl9lbnRyaWVzKTsKKwl1c2Uoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikpOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBiYWRfb2JqZWN0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjb25zdCBjaGFyICpmb3JtYXQsCisJCSAgICAgICAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBiYWRfb2JqZWN0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwljaGFyIGJ1ZlsxMDI0XTsKKworCXZhX3N0YXJ0KHBhcmFtcywgZm9ybWF0KTsKKwl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCWRpZShfKCJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIiksIG9mZnNldCwgYnVmKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkX2xvY2FsICpnZXRfdGhyZWFkX2RhdGEodm9pZCkKK3sKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKwlpZiAodGhyZWFkc19hY3RpdmUpCisJCXJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljKGtleSk7CisJYXNzZXJ0KCF0aHJlYWRzX2FjdGl2ZSAmJgorCSAgICAgICAiVGhpcyBzaG91bGQgb25seSBiZSByZWFjaGVkIHdoZW4gYWxsIHRocmVhZHMgYXJlIGdvbmUiKTsKKyNlbmRpZgorCXJldHVybiAmbm90aHJlYWRfZGF0YTsKK30KKworI2lmbmRlZiBOT19QVEhSRUFEUworc3RhdGljIHZvaWQgc2V0X3RocmVhZF9kYXRhKHN0cnVjdCB0aHJlYWRfbG9jYWwgKmRhdGEpCit7CisJaWYgKHRocmVhZHNfYWN0aXZlKQorCQlwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgZGF0YSk7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBiYXNlX2RhdGEgKmFsbG9jX2Jhc2VfZGF0YSh2b2lkKQoreworCXN0cnVjdCBiYXNlX2RhdGEgKmJhc2UgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgYmFzZV9kYXRhKSk7CisJbWVtc2V0KGJhc2UsIDAsIHNpemVvZigqYmFzZSkpOworCWJhc2UtPnJlZl9sYXN0ID0gLTE7CisJYmFzZS0+b2ZzX2xhc3QgPSAtMTsKKwlyZXR1cm4gYmFzZTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9iYXNlX2RhdGEoc3RydWN0IGJhc2VfZGF0YSAqYykKK3sKKwlpZiAoYy0+ZGF0YSkgeworCQlmcmVlKGMtPmRhdGEpOworCQljLT5kYXRhID0gTlVMTDsKKwkJZ2V0X3RocmVhZF9kYXRhKCktPmJhc2VfY2FjaGVfdXNlZCAtPSBjLT5zaXplOworCX0KK30KKworc3RhdGljIHZvaWQgcHJ1bmVfYmFzZV9kYXRhKHN0cnVjdCBiYXNlX2RhdGEgKnJldGFpbikKK3sKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiOworCXN0cnVjdCB0aHJlYWRfbG9jYWwgKmRhdGEgPSBnZXRfdGhyZWFkX2RhdGEoKTsKKwlmb3IgKGIgPSBkYXRhLT5iYXNlX2NhY2hlOworCSAgICAgZGF0YS0+YmFzZV9jYWNoZV91c2VkID4gZGVsdGFfYmFzZV9jYWNoZV9saW1pdCAmJiBiOworCSAgICAgYiA9IGItPmNoaWxkKSB7CisJCWlmIChiLT5kYXRhICYmIGIgIT0gcmV0YWluKQorCQkJZnJlZV9iYXNlX2RhdGEoYik7CisJfQorfQorCitzdGF0aWMgdm9pZCBsaW5rX2Jhc2VfZGF0YShzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlLCBzdHJ1Y3QgYmFzZV9kYXRhICpjKQoreworCWlmIChiYXNlKQorCQliYXNlLT5jaGlsZCA9IGM7CisJZWxzZQorCQlnZXRfdGhyZWFkX2RhdGEoKS0+YmFzZV9jYWNoZSA9IGM7CisKKwljLT5iYXNlID0gYmFzZTsKKwljLT5jaGlsZCA9IE5VTEw7CisJaWYgKGMtPmRhdGEpCisJCWdldF90aHJlYWRfZGF0YSgpLT5iYXNlX2NhY2hlX3VzZWQgKz0gYy0+c2l6ZTsKKwlwcnVuZV9iYXNlX2RhdGEoYyk7Cit9CisKK3N0YXRpYyB2b2lkIHVubGlua19iYXNlX2RhdGEoc3RydWN0IGJhc2VfZGF0YSAqYykKK3sKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlID0gYy0+YmFzZTsKKwlpZiAoYmFzZSkKKwkJYmFzZS0+Y2hpbGQgPSBOVUxMOworCWVsc2UKKwkJZ2V0X3RocmVhZF9kYXRhKCktPmJhc2VfY2FjaGUgPSBOVUxMOworCWZyZWVfYmFzZV9kYXRhKGMpOworfQorCitzdGF0aWMgaW50IGlzX2RlbHRhX3R5cGUoZW51bSBvYmplY3RfdHlwZSB0eXBlKQoreworCXJldHVybiAodHlwZSA9PSBPQkpfUkVGX0RFTFRBIHx8IHR5cGUgPT0gT0JKX09GU19ERUxUQSk7Cit9CisKK3N0YXRpYyB2b2lkICp1bnBhY2tfZW50cnlfZGF0YSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgY2hhciBmaXhlZF9idWZbODE5Ml07CisJaW50IHN0YXR1czsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdm9pZCAqYnVmOworCWdpdF9TSEFfQ1RYIGM7CisJY2hhciBoZHJbMzJdOworCWludCBoZHJsZW47CisKKwlpZiAoIWlzX2RlbHRhX3R5cGUodHlwZSkpIHsKKwkJaGRybGVuID0gc3ByaW50ZihoZHIsICIlcyAlbHUiLCB0eXBlbmFtZSh0eXBlKSwgc2l6ZSkgKyAxOworCQlnaXRfU0hBMV9Jbml0KCZjKTsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZjLCBoZHIsIGhkcmxlbik7CisJfSBlbHNlCisJCXNoYTEgPSBOVUxMOworCWlmICh0eXBlID09IE9CSl9CTE9CICYmIHNpemUgPiBiaWdfZmlsZV90aHJlc2hvbGQpCisJCWJ1ZiA9IGZpeGVkX2J1ZjsKKwllbHNlCisJCWJ1ZiA9IHhtYWxsb2Moc2l6ZSk7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CisJc3RyZWFtLm5leHRfb3V0ID0gYnVmOworCXN0cmVhbS5hdmFpbF9vdXQgPSBidWYgPT0gZml4ZWRfYnVmID8gc2l6ZW9mKGZpeGVkX2J1ZikgOiBzaXplOworCisJZG8geworCQl1bnNpZ25lZCBjaGFyICpsYXN0X291dCA9IHN0cmVhbS5uZXh0X291dDsKKwkJc3RyZWFtLm5leHRfaW4gPSBmaWxsKDEpOworCQlzdHJlYW0uYXZhaWxfaW4gPSBpbnB1dF9sZW47CisJCXN0YXR1cyA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIDApOworCQl1c2UoaW5wdXRfbGVuIC0gc3RyZWFtLmF2YWlsX2luKTsKKwkJaWYgKHNoYTEpCisJCQlnaXRfU0hBMV9VcGRhdGUoJmMsIGxhc3Rfb3V0LCBzdHJlYW0ubmV4dF9vdXQgLSBsYXN0X291dCk7CisJCWlmIChidWYgPT0gZml4ZWRfYnVmKSB7CisJCQlzdHJlYW0ubmV4dF9vdXQgPSBidWY7CisJCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGZpeGVkX2J1Zik7CisJCX0KKwl9IHdoaWxlIChzdGF0dXMgPT0gWl9PSyk7CisJaWYgKHN0cmVhbS50b3RhbF9vdXQgIT0gc2l6ZSB8fCBzdGF0dXMgIT0gWl9TVFJFQU1fRU5EKQorCQliYWRfb2JqZWN0KG9mZnNldCwgXygiaW5mbGF0ZSByZXR1cm5lZCAlZCIpLCBzdGF0dXMpOworCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwlpZiAoc2hhMSkKKwkJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmMpOworCXJldHVybiBidWYgPT0gZml4ZWRfYnVmID8gTlVMTCA6IGJ1ZjsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19yYXdfZW50cnkoc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqLAorCQkJICAgICAgdW5pb24gZGVsdGFfYmFzZSAqZGVsdGFfYmFzZSwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgY2hhciAqcDsKKwl1bnNpZ25lZCBsb25nIHNpemUsIGM7CisJb2ZmX3QgYmFzZV9vZmZzZXQ7CisJdW5zaWduZWQgc2hpZnQ7CisJdm9pZCAqZGF0YTsKKworCW9iai0+aWR4Lm9mZnNldCA9IGNvbnN1bWVkX2J5dGVzOworCWlucHV0X2NyYzMyID0gY3JjMzIoMCwgTlVMTCwgMCk7CisKKwlwID0gZmlsbCgxKTsKKwljID0gKnA7CisJdXNlKDEpOworCW9iai0+dHlwZSA9IChjID4+IDQpICYgNzsKKwlzaXplID0gKGMgJiAxNSk7CisJc2hpZnQgPSA0OworCXdoaWxlIChjICYgMHg4MCkgeworCQlwID0gZmlsbCgxKTsKKwkJYyA9ICpwOworCQl1c2UoMSk7CisJCXNpemUgKz0gKGMgJiAweDdmKSA8PCBzaGlmdDsKKwkJc2hpZnQgKz0gNzsKKwl9CisJb2JqLT5zaXplID0gc2l6ZTsKKworCXN3aXRjaCAob2JqLT50eXBlKSB7CisJY2FzZSBPQkpfUkVGX0RFTFRBOgorCQloYXNoY3B5KGRlbHRhX2Jhc2UtPnNoYTEsIGZpbGwoMjApKTsKKwkJdXNlKDIwKTsKKwkJYnJlYWs7CisJY2FzZSBPQkpfT0ZTX0RFTFRBOgorCQltZW1zZXQoZGVsdGFfYmFzZSwgMCwgc2l6ZW9mKCpkZWx0YV9iYXNlKSk7CisJCXAgPSBmaWxsKDEpOworCQljID0gKnA7CisJCXVzZSgxKTsKKwkJYmFzZV9vZmZzZXQgPSBjICYgMTI3OworCQl3aGlsZSAoYyAmIDEyOCkgeworCQkJYmFzZV9vZmZzZXQgKz0gMTsKKwkJCWlmICghYmFzZV9vZmZzZXQgfHwgTVNCKGJhc2Vfb2Zmc2V0LCA3KSkKKwkJCQliYWRfb2JqZWN0KG9iai0+aWR4Lm9mZnNldCwgXygib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIpKTsKKwkJCXAgPSBmaWxsKDEpOworCQkJYyA9ICpwOworCQkJdXNlKDEpOworCQkJYmFzZV9vZmZzZXQgPSAoYmFzZV9vZmZzZXQgPDwgNykgKyAoYyAmIDEyNyk7CisJCX0KKwkJZGVsdGFfYmFzZS0+b2Zmc2V0ID0gb2JqLT5pZHgub2Zmc2V0IC0gYmFzZV9vZmZzZXQ7CisJCWlmIChkZWx0YV9iYXNlLT5vZmZzZXQgPD0gMCB8fCBkZWx0YV9iYXNlLT5vZmZzZXQgPj0gb2JqLT5pZHgub2Zmc2V0KQorCQkJYmFkX29iamVjdChvYmotPmlkeC5vZmZzZXQsIF8oImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIpKTsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQ09NTUlUOgorCWNhc2UgT0JKX1RSRUU6CisJY2FzZSBPQkpfQkxPQjoKKwljYXNlIE9CSl9UQUc6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJhZF9vYmplY3Qob2JqLT5pZHgub2Zmc2V0LCBfKCJ1bmtub3duIG9iamVjdCB0eXBlICVkIiksIG9iai0+dHlwZSk7CisJfQorCW9iai0+aGRyX3NpemUgPSBjb25zdW1lZF9ieXRlcyAtIG9iai0+aWR4Lm9mZnNldDsKKworCWRhdGEgPSB1bnBhY2tfZW50cnlfZGF0YShvYmotPmlkeC5vZmZzZXQsIG9iai0+c2l6ZSwgb2JqLT50eXBlLCBzaGExKTsKKwlvYmotPmlkeC5jcmMzMiA9IGlucHV0X2NyYzMyOworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdm9pZCAqdW5wYWNrX2RhdGEoc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqLAorCQkJIGludCAoKmNvbnN1bWUpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKSwKKwkJCSB2b2lkICpjYl9kYXRhKQoreworCW9mZl90IGZyb20gPSBvYmpbMF0uaWR4Lm9mZnNldCArIG9ialswXS5oZHJfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxlbiA9IG9ialsxXS5pZHgub2Zmc2V0IC0gZnJvbTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhLCAqaW5idWY7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCWludCBzdGF0dXM7CisKKwlkYXRhID0geG1hbGxvYyhjb25zdW1lID8gNjQqMTAyNCA6IG9iai0+c2l6ZSk7CisJaW5idWYgPSB4bWFsbG9jKChsZW4gPCA2NCoxMDI0KSA/IGxlbiA6IDY0KjEwMjQpOworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlnaXRfaW5mbGF0ZV9pbml0KCZzdHJlYW0pOworCXN0cmVhbS5uZXh0X291dCA9IGRhdGE7CisJc3RyZWFtLmF2YWlsX291dCA9IGNvbnN1bWUgPyA2NCoxMDI0IDogb2JqLT5zaXplOworCisJZG8geworCQlzc2l6ZV90IG4gPSAobGVuIDwgNjQqMTAyNCkgPyBsZW4gOiA2NCoxMDI0OworCQluID0gcHJlYWQocGFja19mZCwgaW5idWYsIG4sIGZyb20pOworCQlpZiAobiA8IDApCisJCQlkaWVfZXJybm8oXygiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIpKTsKKwkJaWYgKCFuKQorCQkJZGllKFFfKCJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGUgbWlzc2luZyIsCisJCQkgICAgICAgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZXMgbWlzc2luZyIsCisJCQkgICAgICAgbGVuKSwKKwkJCSAgICBsZW4pOworCQlmcm9tICs9IG47CisJCWxlbiAtPSBuOworCQlzdHJlYW0ubmV4dF9pbiA9IGluYnVmOworCQlzdHJlYW0uYXZhaWxfaW4gPSBuOworCQlpZiAoIWNvbnN1bWUpCisJCQlzdGF0dXMgPSBnaXRfaW5mbGF0ZSgmc3RyZWFtLCAwKTsKKwkJZWxzZSB7CisJCQlkbyB7CisJCQkJc3RhdHVzID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgMCk7CisJCQkJaWYgKGNvbnN1bWUoZGF0YSwgc3RyZWFtLm5leHRfb3V0IC0gZGF0YSwgY2JfZGF0YSkpIHsKKwkJCQkJZnJlZShpbmJ1Zik7CisJCQkJCWZyZWUoZGF0YSk7CisJCQkJCXJldHVybiBOVUxMOworCQkJCX0KKwkJCQlzdHJlYW0ubmV4dF9vdXQgPSBkYXRhOworCQkJCXN0cmVhbS5hdmFpbF9vdXQgPSA2NCoxMDI0OworCQkJfSB3aGlsZSAoc3RhdHVzID09IFpfT0sgJiYgc3RyZWFtLmF2YWlsX2luKTsKKwkJfQorCX0gd2hpbGUgKGxlbiAmJiBzdGF0dXMgPT0gWl9PSyAmJiAhc3RyZWFtLmF2YWlsX2luKTsKKworCS8qIFRoaXMgaGFzIGJlZW4gaW5mbGF0ZWQgT0sgd2hlbiBmaXJzdCBlbmNvdW50ZXJlZCwgc28uLi4gKi8KKwlpZiAoc3RhdHVzICE9IFpfU1RSRUFNX0VORCB8fCBzdHJlYW0udG90YWxfb3V0ICE9IG9iai0+c2l6ZSkKKwkJZGllKF8oInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IikpOworCisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCWZyZWUoaW5idWYpOworCWlmIChjb25zdW1lKSB7CisJCWZyZWUoZGF0YSk7CisJCWRhdGEgPSBOVUxMOworCX0KKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgKmdldF9kYXRhX2Zyb21fcGFjayhzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmopCit7CisJcmV0dXJuIHVucGFja19kYXRhKG9iaiwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9kZWx0YV9iYXNlcyhjb25zdCB1bmlvbiBkZWx0YV9iYXNlICpiYXNlMSwKKwkJCSAgICAgICBjb25zdCB1bmlvbiBkZWx0YV9iYXNlICpiYXNlMiwKKwkJCSAgICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUxLAorCQkJICAgICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZTIpCit7CisJaW50IGNtcCA9IHR5cGUxIC0gdHlwZTI7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlyZXR1cm4gbWVtY21wKGJhc2UxLCBiYXNlMiwgVU5JT05fQkFTRV9TWik7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9kZWx0YShjb25zdCB1bmlvbiBkZWx0YV9iYXNlICpiYXNlLCBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJaW50IGZpcnN0ID0gMCwgbGFzdCA9IG5yX2RlbHRhczsKKworICAgICAgICB3aGlsZSAoZmlyc3QgPCBsYXN0KSB7CisgICAgICAgICAgICAgICAgaW50IG5leHQgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CisgICAgICAgICAgICAgICAgc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YSA9ICZkZWx0YXNbbmV4dF07CisgICAgICAgICAgICAgICAgaW50IGNtcDsKKworCQljbXAgPSBjb21wYXJlX2RlbHRhX2Jhc2VzKGJhc2UsICZkZWx0YS0+YmFzZSwKKwkJCQkJICB0eXBlLCBvYmplY3RzW2RlbHRhLT5vYmpfbm9dLnR5cGUpOworICAgICAgICAgICAgICAgIGlmICghY21wKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7CisgICAgICAgICAgICAgICAgaWYgKGNtcCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBuZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpcnN0ID0gbmV4dCsxOworICAgICAgICB9CisgICAgICAgIHJldHVybiAtZmlyc3QtMTsKK30KKworc3RhdGljIHZvaWQgZmluZF9kZWx0YV9jaGlsZHJlbihjb25zdCB1bmlvbiBkZWx0YV9iYXNlICpiYXNlLAorCQkJCWludCAqZmlyc3RfaW5kZXgsIGludCAqbGFzdF9pbmRleCwKKwkJCQllbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJaW50IGZpcnN0ID0gZmluZF9kZWx0YShiYXNlLCB0eXBlKTsKKwlpbnQgbGFzdCA9IGZpcnN0OworCWludCBlbmQgPSBucl9kZWx0YXMgLSAxOworCisJaWYgKGZpcnN0IDwgMCkgeworCQkqZmlyc3RfaW5kZXggPSAwOworCQkqbGFzdF9pbmRleCA9IC0xOworCQlyZXR1cm47CisJfQorCXdoaWxlIChmaXJzdCA+IDAgJiYgIW1lbWNtcCgmZGVsdGFzW2ZpcnN0IC0gMV0uYmFzZSwgYmFzZSwgVU5JT05fQkFTRV9TWikpCisJCS0tZmlyc3Q7CisJd2hpbGUgKGxhc3QgPCBlbmQgJiYgIW1lbWNtcCgmZGVsdGFzW2xhc3QgKyAxXS5iYXNlLCBiYXNlLCBVTklPTl9CQVNFX1NaKSkKKwkJKytsYXN0OworCSpmaXJzdF9pbmRleCA9IGZpcnN0OworCSpsYXN0X2luZGV4ID0gbGFzdDsKK30KKworc3RydWN0IGNvbXBhcmVfZGF0YSB7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGdpdF9pc3RyZWFtICpzdDsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBidWZfc2l6ZTsKK307CisKK3N0YXRpYyBpbnQgY29tcGFyZV9vYmplY3RzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tcGFyZV9kYXRhICpkYXRhID0gY2JfZGF0YTsKKworCWlmIChkYXRhLT5idWZfc2l6ZSA8IHNpemUpIHsKKwkJZnJlZShkYXRhLT5idWYpOworCQlkYXRhLT5idWYgPSB4bWFsbG9jKHNpemUpOworCQlkYXRhLT5idWZfc2l6ZSA9IHNpemU7CisJfQorCisJd2hpbGUgKHNpemUpIHsKKwkJc3NpemVfdCBsZW4gPSByZWFkX2lzdHJlYW0oZGF0YS0+c3QsIGRhdGEtPmJ1Ziwgc2l6ZSk7CisJCWlmIChsZW4gPT0gMCkKKwkJCWRpZShfKCJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiKSwKKwkJCSAgICBzaGExX3RvX2hleChkYXRhLT5lbnRyeS0+aWR4LnNoYTEpKTsKKwkJaWYgKGxlbiA8IDApCisJCQlkaWUoXygidW5hYmxlIHRvIHJlYWQgJXMiKSwKKwkJCSAgICBzaGExX3RvX2hleChkYXRhLT5lbnRyeS0+aWR4LnNoYTEpKTsKKwkJaWYgKG1lbWNtcChidWYsIGRhdGEtPmJ1ZiwgbGVuKSkKKwkJCWRpZShfKCJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiKSwKKwkJCSAgICBzaGExX3RvX2hleChkYXRhLT5lbnRyeS0+aWR4LnNoYTEpKTsKKwkJc2l6ZSAtPSBsZW47CisJCWJ1ZiArPSBsZW47CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX2NvbGxpc29uKHN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBjb21wYXJlX2RhdGEgZGF0YTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJaWYgKGVudHJ5LT5zaXplIDw9IGJpZ19maWxlX3RocmVzaG9sZCB8fCBlbnRyeS0+dHlwZSAhPSBPQkpfQkxPQikKKwkJcmV0dXJuIC0xOworCisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCWRhdGEuZW50cnkgPSBlbnRyeTsKKwlkYXRhLnN0ID0gb3Blbl9pc3RyZWFtKGVudHJ5LT5pZHguc2hhMSwgJnR5cGUsICZzaXplLCBOVUxMKTsKKwlpZiAoIWRhdGEuc3QpCisJCXJldHVybiAtMTsKKwlpZiAoc2l6ZSAhPSBlbnRyeS0+c2l6ZSB8fCB0eXBlICE9IGVudHJ5LT50eXBlKQorCQlkaWUoXygiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIiksCisJCSAgICBzaGExX3RvX2hleChlbnRyeS0+aWR4LnNoYTEpKTsKKwl1bnBhY2tfZGF0YShlbnRyeSwgY29tcGFyZV9vYmplY3RzLCAmZGF0YSk7CisJY2xvc2VfaXN0cmVhbShkYXRhLnN0KTsKKwlmcmVlKGRhdGEuYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hhMV9vYmplY3QoY29uc3Qgdm9pZCAqZGF0YSwgc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqX2VudHJ5LAorCQkJdW5zaWduZWQgbG9uZyBzaXplLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXZvaWQgKm5ld19kYXRhID0gTlVMTDsKKwlpbnQgY29sbGlzaW9uX3Rlc3RfbmVlZGVkOworCisJYXNzZXJ0KGRhdGEgfHwgb2JqX2VudHJ5KTsKKworCXJlYWRfbG9jaygpOworCWNvbGxpc2lvbl90ZXN0X25lZWRlZCA9IGhhc19zaGExX2ZpbGUoc2hhMSk7CisJcmVhZF91bmxvY2soKTsKKworCWlmIChjb2xsaXNpb25fdGVzdF9uZWVkZWQgJiYgIWRhdGEpIHsKKwkJcmVhZF9sb2NrKCk7CisJCWlmICghY2hlY2tfY29sbGlzb24ob2JqX2VudHJ5KSkKKwkJCWNvbGxpc2lvbl90ZXN0X25lZWRlZCA9IDA7CisJCXJlYWRfdW5sb2NrKCk7CisJfQorCWlmIChjb2xsaXNpb25fdGVzdF9uZWVkZWQpIHsKKwkJdm9pZCAqaGFzX2RhdGE7CisJCWVudW0gb2JqZWN0X3R5cGUgaGFzX3R5cGU7CisJCXVuc2lnbmVkIGxvbmcgaGFzX3NpemU7CisJCXJlYWRfbG9jaygpOworCQloYXNfdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgJmhhc19zaXplKTsKKwkJaWYgKGhhc190eXBlICE9IHR5cGUgfHwgaGFzX3NpemUgIT0gc2l6ZSkKKwkJCWRpZShfKCJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiKSwgc2hhMV90b19oZXgoc2hhMSkpOworCQloYXNfZGF0YSA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZoYXNfdHlwZSwgJmhhc19zaXplKTsKKwkJcmVhZF91bmxvY2soKTsKKwkJaWYgKCFkYXRhKQorCQkJZGF0YSA9IG5ld19kYXRhID0gZ2V0X2RhdGFfZnJvbV9wYWNrKG9ial9lbnRyeSk7CisJCWlmICghaGFzX2RhdGEpCisJCQlkaWUoXygiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIiksIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJaWYgKHNpemUgIT0gaGFzX3NpemUgfHwgdHlwZSAhPSBoYXNfdHlwZSB8fAorCQkgICAgbWVtY21wKGRhdGEsIGhhc19kYXRhLCBzaXplKSAhPSAwKQorCQkJZGllKF8oIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIpLCBzaGExX3RvX2hleChzaGExKSk7CisJCWZyZWUoaGFzX2RhdGEpOworCX0KKworCWlmIChzdHJpY3QpIHsKKwkJcmVhZF9sb2NrKCk7CisJCWlmICh0eXBlID09IE9CSl9CTE9CKSB7CisJCQlzdHJ1Y3QgYmxvYiAqYmxvYiA9IGxvb2t1cF9ibG9iKHNoYTEpOworCQkJaWYgKGJsb2IpCisJCQkJYmxvYi0+b2JqZWN0LmZsYWdzIHw9IEZMQUdfQ0hFQ0tFRDsKKwkJCWVsc2UKKwkJCQlkaWUoXygiaW52YWxpZCBibG9iIG9iamVjdCAlcyIpLCBzaGExX3RvX2hleChzaGExKSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJCQlpbnQgZWF0ZW47CisJCQl2b2lkICpidWYgPSAodm9pZCAqKSBkYXRhOworCisJCQlpZiAoIWJ1ZikKKwkJCQlidWYgPSBuZXdfZGF0YSA9IGdldF9kYXRhX2Zyb21fcGFjayhvYmpfZW50cnkpOworCisJCQkvKgorCQkJICogd2UgZG8gbm90IG5lZWQgdG8gZnJlZSB0aGUgbWVtb3J5IGhlcmUsIGFzIHRoZQorCQkJICogYnVmIGlzIGRlbGV0ZWQgYnkgdGhlIGNhbGxlci4KKwkJCSAqLworCQkJb2JqID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcihzaGExLCB0eXBlLCBzaXplLCBidWYsICZlYXRlbik7CisJCQlpZiAoIW9iaikKKwkJCQlkaWUoXygiaW52YWxpZCAlcyIpLCB0eXBlbmFtZSh0eXBlKSk7CisJCQlpZiAoZnNja19vYmplY3Qob2JqLCAxLCBmc2NrX2Vycm9yX2Z1bmN0aW9uKSkKKwkJCQlkaWUoXygiRXJyb3IgaW4gb2JqZWN0IikpOworCQkJaWYgKGZzY2tfd2FsayhvYmosIG1hcmtfbGluaywgTlVMTCkpCisJCQkJZGllKF8oIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIiksIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCisJCQlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCQkJc3RydWN0IHRyZWUgKml0ZW0gPSAoc3RydWN0IHRyZWUgKikgb2JqOworCQkJCWl0ZW0tPmJ1ZmZlciA9IE5VTEw7CisJCQl9CisJCQlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKSBvYmo7CisJCQkJY29tbWl0LT5idWZmZXIgPSBOVUxMOworCQkJfQorCQkJb2JqLT5mbGFncyB8PSBGTEFHX0NIRUNLRUQ7CisJCX0KKwkJcmVhZF91bmxvY2soKTsKKwl9CisKKwlmcmVlKG5ld19kYXRhKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiBmaW5kX3VucmVzb2x2ZWRfZGVsdGFzKCkuIFRoZXJlIGFyZSB0d28KKyAqIHdhbGtlcnMgZ29pbmcgaW4gdGhlIG9wcG9zaXRlIHdheXMuCisgKgorICogVGhlIGZpcnN0IG9uZSBpbiBmaW5kX3VucmVzb2x2ZWRfZGVsdGFzKCkgdHJhdmVyc2VzIGRvd24gZnJvbQorICogcGFyZW50IG5vZGUgdG8gY2hpbGRyZW4sIGRlZmxhdGluZyBub2RlcyBhbG9uZyB0aGUgd2F5LiBIb3dldmVyLAorICogbWVtb3J5IGZvciBkZWZsYXRlZCBub2RlcyBpcyBsaW1pdGVkIGJ5IGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQsIHNvCisgKiBhdCBzb21lIHBvaW50IHBhcmVudCBub2RlJ3MgZGVmbGF0ZWQgY29udGVudCBtYXkgYmUgZnJlZWQuCisgKgorICogVGhlIHNlY29uZCB3YWxrZXIgaXMgdGhpcyBmdW5jdGlvbiwgd2hpY2ggZ29lcyBmcm9tIGN1cnJlbnQgbm9kZSB1cAorICogdG8gdG9wIHBhcmVudCBpZiBuZWNlc3NhcnkgdG8gZGVmbGF0ZSB0aGUgbm9kZS4gSW4gbm9ybWFsCisgKiBzaXR1YXRpb24sIGl0cyBwYXJlbnQgbm9kZSB3b3VsZCBiZSBhbHJlYWR5IGRlZmxhdGVkLCBzbyBpdCBqdXN0CisgKiBuZWVkcyB0byBhcHBseSBkZWx0YS4KKyAqCisgKiBJbiB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbywgcGFyZW50IG5vZGUgaXMgbm8gbG9uZ2VyIGRlZmxhdGVkIGJlY2F1c2UKKyAqIHdlJ3JlIHJ1bm5pbmcgb3V0IG9mIGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQ7IHdlIG5lZWQgdG8gcmUtZGVmbGF0ZQorICogcGFyZW50cywgcG9zc2libHkgdXAgdG8gdGhlIHRvcCBiYXNlLgorICoKKyAqIEFsbCBkZWZsYXRlZCBvYmplY3RzIGhlcmUgYXJlIHN1YmplY3QgdG8gYmUgZnJlZWQgaWYgd2UgZXhjZWVkCisgKiBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0LCBqdXN0IGxpa2UgaW4gZmluZF91bnJlc29sdmVkX2RlbHRhcygpLCB3ZQorICoganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbGFzdCBub2RlIGlzIG5vdCBmcmVlZC4KKyAqLworc3RhdGljIHZvaWQgKmdldF9iYXNlX2RhdGEoc3RydWN0IGJhc2VfZGF0YSAqYykKK3sKKwlpZiAoIWMtPmRhdGEpIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gYy0+b2JqOworCQlzdHJ1Y3QgYmFzZV9kYXRhICoqZGVsdGEgPSBOVUxMOworCQlpbnQgZGVsdGFfbnIgPSAwLCBkZWx0YV9hbGxvYyA9IDA7CisKKwkJd2hpbGUgKGlzX2RlbHRhX3R5cGUoYy0+b2JqLT50eXBlKSAmJiAhYy0+ZGF0YSkgeworCQkJQUxMT0NfR1JPVyhkZWx0YSwgZGVsdGFfbnIgKyAxLCBkZWx0YV9hbGxvYyk7CisJCQlkZWx0YVtkZWx0YV9ucisrXSA9IGM7CisJCQljID0gYy0+YmFzZTsKKwkJfQorCQlpZiAoIWRlbHRhX25yKSB7CisJCQljLT5kYXRhID0gZ2V0X2RhdGFfZnJvbV9wYWNrKG9iaik7CisJCQljLT5zaXplID0gb2JqLT5zaXplOworCQkJZ2V0X3RocmVhZF9kYXRhKCktPmJhc2VfY2FjaGVfdXNlZCArPSBjLT5zaXplOworCQkJcHJ1bmVfYmFzZV9kYXRhKGMpOworCQl9CisJCWZvciAoOyBkZWx0YV9uciA+IDA7IGRlbHRhX25yLS0pIHsKKwkJCXZvaWQgKmJhc2UsICpyYXc7CisJCQljID0gZGVsdGFbZGVsdGFfbnIgLSAxXTsKKwkJCW9iaiA9IGMtPm9iajsKKwkJCWJhc2UgPSBnZXRfYmFzZV9kYXRhKGMtPmJhc2UpOworCQkJcmF3ID0gZ2V0X2RhdGFfZnJvbV9wYWNrKG9iaik7CisJCQljLT5kYXRhID0gcGF0Y2hfZGVsdGEoCisJCQkJYmFzZSwgYy0+YmFzZS0+c2l6ZSwKKwkJCQlyYXcsIG9iai0+c2l6ZSwKKwkJCQkmYy0+c2l6ZSk7CisJCQlmcmVlKHJhdyk7CisJCQlpZiAoIWMtPmRhdGEpCisJCQkJYmFkX29iamVjdChvYmotPmlkeC5vZmZzZXQsIF8oImZhaWxlZCB0byBhcHBseSBkZWx0YSIpKTsKKwkJCWdldF90aHJlYWRfZGF0YSgpLT5iYXNlX2NhY2hlX3VzZWQgKz0gYy0+c2l6ZTsKKwkJCXBydW5lX2Jhc2VfZGF0YShjKTsKKwkJfQorCQlmcmVlKGRlbHRhKTsKKwl9CisJcmV0dXJuIGMtPmRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHJlc29sdmVfZGVsdGEoc3RydWN0IG9iamVjdF9lbnRyeSAqZGVsdGFfb2JqLAorCQkJICBzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlLCBzdHJ1Y3QgYmFzZV9kYXRhICpyZXN1bHQpCit7CisJdm9pZCAqYmFzZV9kYXRhLCAqZGVsdGFfZGF0YTsKKworCWRlbHRhX29iai0+cmVhbF90eXBlID0gYmFzZS0+b2JqLT5yZWFsX3R5cGU7CisJZGVsdGFfb2JqLT5kZWx0YV9kZXB0aCA9IGJhc2UtPm9iai0+ZGVsdGFfZGVwdGggKyAxOworCWlmIChkZWVwZXN0X2RlbHRhIDwgZGVsdGFfb2JqLT5kZWx0YV9kZXB0aCkKKwkJZGVlcGVzdF9kZWx0YSA9IGRlbHRhX29iai0+ZGVsdGFfZGVwdGg7CisJZGVsdGFfb2JqLT5iYXNlX29iamVjdF9ubyA9IGJhc2UtPm9iaiAtIG9iamVjdHM7CisJZGVsdGFfZGF0YSA9IGdldF9kYXRhX2Zyb21fcGFjayhkZWx0YV9vYmopOworCWJhc2VfZGF0YSA9IGdldF9iYXNlX2RhdGEoYmFzZSk7CisJcmVzdWx0LT5vYmogPSBkZWx0YV9vYmo7CisJcmVzdWx0LT5kYXRhID0gcGF0Y2hfZGVsdGEoYmFzZV9kYXRhLCBiYXNlLT5zaXplLAorCQkJCSAgIGRlbHRhX2RhdGEsIGRlbHRhX29iai0+c2l6ZSwgJnJlc3VsdC0+c2l6ZSk7CisJZnJlZShkZWx0YV9kYXRhKTsKKwlpZiAoIXJlc3VsdC0+ZGF0YSkKKwkJYmFkX29iamVjdChkZWx0YV9vYmotPmlkeC5vZmZzZXQsIF8oImZhaWxlZCB0byBhcHBseSBkZWx0YSIpKTsKKwloYXNoX3NoYTFfZmlsZShyZXN1bHQtPmRhdGEsIHJlc3VsdC0+c2l6ZSwKKwkJICAgICAgIHR5cGVuYW1lKGRlbHRhX29iai0+cmVhbF90eXBlKSwgZGVsdGFfb2JqLT5pZHguc2hhMSk7CisJc2hhMV9vYmplY3QocmVzdWx0LT5kYXRhLCBOVUxMLCByZXN1bHQtPnNpemUsIGRlbHRhX29iai0+cmVhbF90eXBlLAorCQkgICAgZGVsdGFfb2JqLT5pZHguc2hhMSk7CisJY291bnRlcl9sb2NrKCk7CisJbnJfcmVzb2x2ZWRfZGVsdGFzKys7CisJY291bnRlcl91bmxvY2soKTsKK30KKworc3RhdGljIHN0cnVjdCBiYXNlX2RhdGEgKmZpbmRfdW5yZXNvbHZlZF9kZWx0YXNfMShzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlLAorCQkJCQkJICBzdHJ1Y3QgYmFzZV9kYXRhICpwcmV2X2Jhc2UpCit7CisJaWYgKGJhc2UtPnJlZl9sYXN0ID09IC0xICYmIGJhc2UtPm9mc19sYXN0ID09IC0xKSB7CisJCXVuaW9uIGRlbHRhX2Jhc2UgYmFzZV9zcGVjOworCisJCWhhc2hjcHkoYmFzZV9zcGVjLnNoYTEsIGJhc2UtPm9iai0+aWR4LnNoYTEpOworCQlmaW5kX2RlbHRhX2NoaWxkcmVuKCZiYXNlX3NwZWMsCisJCQkJICAgICZiYXNlLT5yZWZfZmlyc3QsICZiYXNlLT5yZWZfbGFzdCwgT0JKX1JFRl9ERUxUQSk7CisKKwkJbWVtc2V0KCZiYXNlX3NwZWMsIDAsIHNpemVvZihiYXNlX3NwZWMpKTsKKwkJYmFzZV9zcGVjLm9mZnNldCA9IGJhc2UtPm9iai0+aWR4Lm9mZnNldDsKKwkJZmluZF9kZWx0YV9jaGlsZHJlbigmYmFzZV9zcGVjLAorCQkJCSAgICAmYmFzZS0+b2ZzX2ZpcnN0LCAmYmFzZS0+b2ZzX2xhc3QsIE9CSl9PRlNfREVMVEEpOworCisJCWlmIChiYXNlLT5yZWZfbGFzdCA9PSAtMSAmJiBiYXNlLT5vZnNfbGFzdCA9PSAtMSkgeworCQkJZnJlZShiYXNlLT5kYXRhKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJbGlua19iYXNlX2RhdGEocHJldl9iYXNlLCBiYXNlKTsKKwl9CisKKwlpZiAoYmFzZS0+cmVmX2ZpcnN0IDw9IGJhc2UtPnJlZl9sYXN0KSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmNoaWxkID0gb2JqZWN0cyArIGRlbHRhc1tiYXNlLT5yZWZfZmlyc3RdLm9ial9ubzsKKwkJc3RydWN0IGJhc2VfZGF0YSAqcmVzdWx0ID0gYWxsb2NfYmFzZV9kYXRhKCk7CisKKwkJYXNzZXJ0KGNoaWxkLT5yZWFsX3R5cGUgPT0gT0JKX1JFRl9ERUxUQSk7CisJCXJlc29sdmVfZGVsdGEoY2hpbGQsIGJhc2UsIHJlc3VsdCk7CisJCWlmIChiYXNlLT5yZWZfZmlyc3QgPT0gYmFzZS0+cmVmX2xhc3QgJiYgYmFzZS0+b2ZzX2xhc3QgPT0gLTEpCisJCQlmcmVlX2Jhc2VfZGF0YShiYXNlKTsKKworCQliYXNlLT5yZWZfZmlyc3QrKzsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlpZiAoYmFzZS0+b2ZzX2ZpcnN0IDw9IGJhc2UtPm9mc19sYXN0KSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmNoaWxkID0gb2JqZWN0cyArIGRlbHRhc1tiYXNlLT5vZnNfZmlyc3RdLm9ial9ubzsKKwkJc3RydWN0IGJhc2VfZGF0YSAqcmVzdWx0ID0gYWxsb2NfYmFzZV9kYXRhKCk7CisKKwkJYXNzZXJ0KGNoaWxkLT5yZWFsX3R5cGUgPT0gT0JKX09GU19ERUxUQSk7CisJCXJlc29sdmVfZGVsdGEoY2hpbGQsIGJhc2UsIHJlc3VsdCk7CisJCWlmIChiYXNlLT5vZnNfZmlyc3QgPT0gYmFzZS0+b2ZzX2xhc3QpCisJCQlmcmVlX2Jhc2VfZGF0YShiYXNlKTsKKworCQliYXNlLT5vZnNfZmlyc3QrKzsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwl1bmxpbmtfYmFzZV9kYXRhKGJhc2UpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBmaW5kX3VucmVzb2x2ZWRfZGVsdGFzKHN0cnVjdCBiYXNlX2RhdGEgKmJhc2UpCit7CisJc3RydWN0IGJhc2VfZGF0YSAqbmV3X2Jhc2UsICpwcmV2X2Jhc2UgPSBOVUxMOworCWZvciAoOzspIHsKKwkJbmV3X2Jhc2UgPSBmaW5kX3VucmVzb2x2ZWRfZGVsdGFzXzEoYmFzZSwgcHJldl9iYXNlKTsKKworCQlpZiAobmV3X2Jhc2UpIHsKKwkJCXByZXZfYmFzZSA9IGJhc2U7CisJCQliYXNlID0gbmV3X2Jhc2U7CisJCX0gZWxzZSB7CisJCQlmcmVlKGJhc2UpOworCQkJYmFzZSA9IHByZXZfYmFzZTsKKwkJCWlmICghYmFzZSkKKwkJCQlyZXR1cm47CisJCQlwcmV2X2Jhc2UgPSBiYXNlLT5iYXNlOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGNvbXBhcmVfZGVsdGFfZW50cnkoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgZGVsdGFfZW50cnkgKmRlbHRhX2EgPSBhOworCWNvbnN0IHN0cnVjdCBkZWx0YV9lbnRyeSAqZGVsdGFfYiA9IGI7CisKKwkvKiBncm91cCBieSB0eXBlIChyZWYgdnMgb2ZzKSBhbmQgdGhlbiBieSB2YWx1ZSAoc2hhLTEgb3Igb2Zmc2V0KSAqLworCXJldHVybiBjb21wYXJlX2RlbHRhX2Jhc2VzKCZkZWx0YV9hLT5iYXNlLCAmZGVsdGFfYi0+YmFzZSwKKwkJCQkgICBvYmplY3RzW2RlbHRhX2EtPm9ial9ub10udHlwZSwKKwkJCQkgICBvYmplY3RzW2RlbHRhX2ItPm9ial9ub10udHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc29sdmVfYmFzZShzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmopCit7CisJc3RydWN0IGJhc2VfZGF0YSAqYmFzZV9vYmogPSBhbGxvY19iYXNlX2RhdGEoKTsKKwliYXNlX29iai0+b2JqID0gb2JqOworCWJhc2Vfb2JqLT5kYXRhID0gTlVMTDsKKwlmaW5kX3VucmVzb2x2ZWRfZGVsdGFzKGJhc2Vfb2JqKTsKK30KKworI2lmbmRlZiBOT19QVEhSRUFEUworc3RhdGljIHZvaWQgKnRocmVhZGVkX3NlY29uZF9wYXNzKHZvaWQgKmRhdGEpCit7CisJc2V0X3RocmVhZF9kYXRhKGRhdGEpOworCWZvciAoOzspIHsKKwkJaW50IGk7CisJCXdvcmtfbG9jaygpOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBucl9yZXNvbHZlZF9kZWx0YXMpOworCQl3aGlsZSAobnJfZGlzcGF0Y2hlZCA8IG5yX29iamVjdHMgJiYKKwkJICAgICAgIGlzX2RlbHRhX3R5cGUob2JqZWN0c1tucl9kaXNwYXRjaGVkXS50eXBlKSkKKwkJCW5yX2Rpc3BhdGNoZWQrKzsKKwkJaWYgKG5yX2Rpc3BhdGNoZWQgPj0gbnJfb2JqZWN0cykgeworCQkJd29ya191bmxvY2soKTsKKwkJCWJyZWFrOworCQl9CisJCWkgPSBucl9kaXNwYXRjaGVkKys7CisJCXdvcmtfdW5sb2NrKCk7CisKKwkJcmVzb2x2ZV9iYXNlKCZvYmplY3RzW2ldKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworLyoKKyAqIEZpcnN0IHBhc3M6CisgKiAtIGZpbmQgbG9jYXRpb25zIG9mIGFsbCBvYmplY3RzOworICogLSBjYWxjdWxhdGUgU0hBMSBvZiBhbGwgbm9uLWRlbHRhIG9iamVjdHM7CisgKiAtIHJlbWVtYmVyIGJhc2UgKFNIQTEgb3Igb2Zmc2V0KSBmb3IgYWxsIGRlbHRhcy4KKyAqLworc3RhdGljIHZvaWQgcGFyc2VfcGFja19vYmplY3RzKHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IGksIG5yX2RlbGF5cyA9IDA7CisJc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YSA9IGRlbHRhczsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICh2ZXJib3NlKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKAorCQkJCWZyb21fc3RkaW4gPyBfKCJSZWNlaXZpbmcgb2JqZWN0cyIpIDogXygiSW5kZXhpbmcgb2JqZWN0cyIpLAorCQkJCW5yX29iamVjdHMpOworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbaV07CisJCXZvaWQgKmRhdGEgPSB1bnBhY2tfcmF3X2VudHJ5KG9iaiwgJmRlbHRhLT5iYXNlLCBvYmotPmlkeC5zaGExKTsKKwkJb2JqLT5yZWFsX3R5cGUgPSBvYmotPnR5cGU7CisJCWlmIChpc19kZWx0YV90eXBlKG9iai0+dHlwZSkpIHsKKwkJCW5yX2RlbHRhcysrOworCQkJZGVsdGEtPm9ial9ubyA9IGk7CisJCQlkZWx0YSsrOworCQl9IGVsc2UgaWYgKCFkYXRhKSB7CisJCQkvKiBsYXJnZSBibG9icywgY2hlY2sgbGF0ZXIgKi8KKwkJCW9iai0+cmVhbF90eXBlID0gT0JKX0JBRDsKKwkJCW5yX2RlbGF5cysrOworCQl9IGVsc2UKKwkJCXNoYTFfb2JqZWN0KGRhdGEsIE5VTEwsIG9iai0+c2l6ZSwgb2JqLT50eXBlLCBvYmotPmlkeC5zaGExKTsKKwkJZnJlZShkYXRhKTsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSsxKTsKKwl9CisJb2JqZWN0c1tpXS5pZHgub2Zmc2V0ID0gY29uc3VtZWRfYnl0ZXM7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJLyogQ2hlY2sgcGFjayBpbnRlZ3JpdHkgKi8KKwlmbHVzaCgpOworCWdpdF9TSEExX0ZpbmFsKHNoYTEsICZpbnB1dF9jdHgpOworCWlmIChoYXNoY21wKGZpbGwoMjApLCBzaGExKSkKKwkJZGllKF8oInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIpKTsKKwl1c2UoMjApOworCisJLyogSWYgaW5wdXRfZmQgaXMgYSBmaWxlLCB3ZSBzaG91bGQgaGF2ZSByZWFjaGVkIGl0cyBlbmQgbm93LiAqLworCWlmIChmc3RhdChpbnB1dF9mZCwgJnN0KSkKKwkJZGllX2Vycm5vKF8oImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIpKTsKKwlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSAmJgorCQkJbHNlZWsoaW5wdXRfZmQsIDAsIFNFRUtfQ1VSKSAtIGlucHV0X2xlbiAhPSBzdC5zdF9zaXplKQorCQlkaWUoXygicGFjayBoYXMganVuayBhdCB0aGUgZW5kIikpOworCisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSAmb2JqZWN0c1tpXTsKKwkJaWYgKG9iai0+cmVhbF90eXBlICE9IE9CSl9CQUQpCisJCQljb250aW51ZTsKKwkJb2JqLT5yZWFsX3R5cGUgPSBvYmotPnR5cGU7CisJCXNoYTFfb2JqZWN0KE5VTEwsIG9iaiwgb2JqLT5zaXplLCBvYmotPnR5cGUsIG9iai0+aWR4LnNoYTEpOworCQlucl9kZWxheXMtLTsKKwl9CisJaWYgKG5yX2RlbGF5cykKKwkJZGllKF8oImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiKSk7Cit9CisKKy8qCisgKiBTZWNvbmQgcGFzczoKKyAqIC0gZm9yIGFsbCBub24tZGVsdGEgb2JqZWN0cywgbG9vayBpZiBpdCBpcyB1c2VkIGFzIGEgYmFzZSBmb3IKKyAqICAgZGVsdGFzOworICogLSBpZiB1c2VkIGFzIGEgYmFzZSwgdW5jb21wcmVzcyB0aGUgb2JqZWN0IGFuZCBhcHBseSBhbGwgZGVsdGFzLAorICogICByZWN1cnNpdmVseSBjaGVja2luZyBpZiB0aGUgcmVzdWx0aW5nIG9iamVjdCBpcyB1c2VkIGFzIGEgYmFzZQorICogICBmb3Igc29tZSBtb3JlIGRlbHRhcy4KKyAqLworc3RhdGljIHZvaWQgcmVzb2x2ZV9kZWx0YXModm9pZCkKK3sKKwlpbnQgaTsKKworCWlmICghbnJfZGVsdGFzKQorCQlyZXR1cm47CisKKwkvKiBTb3J0IGRlbHRhcyBieSBiYXNlIFNIQTEvb2Zmc2V0IGZvciBmYXN0IHNlYXJjaGluZyAqLworCXFzb3J0KGRlbHRhcywgbnJfZGVsdGFzLCBzaXplb2Yoc3RydWN0IGRlbHRhX2VudHJ5KSwKKwkgICAgICBjb21wYXJlX2RlbHRhX2VudHJ5KTsKKworCWlmICh2ZXJib3NlKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIlJlc29sdmluZyBkZWx0YXMiKSwgbnJfZGVsdGFzKTsKKworI2lmbmRlZiBOT19QVEhSRUFEUworCW5yX2Rpc3BhdGNoZWQgPSAwOworCWlmIChucl90aHJlYWRzID4gMSB8fCBnZXRlbnYoIkdJVF9GT1JDRV9USFJFQURTIikpIHsKKwkJaW5pdF90aHJlYWQoKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3RocmVhZHM7IGkrKykgeworCQkJaW50IHJldCA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRfZGF0YVtpXS50aHJlYWQsIE5VTEwsCisJCQkJCQkgdGhyZWFkZWRfc2Vjb25kX3Bhc3MsIHRocmVhZF9kYXRhICsgaSk7CisJCQlpZiAocmV0KQorCQkJCWRpZShfKCJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiKSwKKwkJCQkgICAgc3RyZXJyb3IocmV0KSk7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG5yX3RocmVhZHM7IGkrKykKKwkJCXB0aHJlYWRfam9pbih0aHJlYWRfZGF0YVtpXS50aHJlYWQsIE5VTEwpOworCQljbGVhbnVwX3RocmVhZCgpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9ICZvYmplY3RzW2ldOworCisJCWlmIChpc19kZWx0YV90eXBlKG9iai0+dHlwZSkpCisJCQljb250aW51ZTsKKwkJcmVzb2x2ZV9iYXNlKG9iaik7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIG5yX3Jlc29sdmVkX2RlbHRhcyk7CisJfQorfQorCisvKgorICogVGhpcmQgcGFzczoKKyAqIC0gYXBwZW5kIG9iamVjdHMgdG8gY29udmVydCB0aGluIHBhY2sgdG8gZnVsbCBwYWNrIGlmIHJlcXVpcmVkCisgKiAtIHdyaXRlIHRoZSBmaW5hbCAyMC1ieXRlIFNIQS0xCisgKi8KK3N0YXRpYyB2b2lkIGZpeF91bnJlc29sdmVkX2RlbHRhcyhzdHJ1Y3Qgc2hhMWZpbGUgKmYsIGludCBucl91bnJlc29sdmVkKTsKK3N0YXRpYyB2b2lkIGNvbmNsdWRlX3BhY2soaW50IGZpeF90aGluX3BhY2ssIGNvbnN0IGNoYXIgKmN1cnJfcGFjaywgdW5zaWduZWQgY2hhciAqcGFja19zaGExKQoreworCWlmIChucl9kZWx0YXMgPT0gbnJfcmVzb2x2ZWRfZGVsdGFzKSB7CisJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwkJLyogRmx1c2ggcmVtYWluaW5nIHBhY2sgZmluYWwgMjAtYnl0ZSBTSEExLiAqLworCQlmbHVzaCgpOworCQlyZXR1cm47CisJfQorCisJaWYgKGZpeF90aGluX3BhY2spIHsKKwkJc3RydWN0IHNoYTFmaWxlICpmOworCQl1bnNpZ25lZCBjaGFyIHJlYWRfc2hhMVsyMF0sIHRhaWxfc2hhMVsyMF07CisJCWNoYXIgbXNnWzQ4XTsKKwkJaW50IG5yX3VucmVzb2x2ZWQgPSBucl9kZWx0YXMgLSBucl9yZXNvbHZlZF9kZWx0YXM7CisJCWludCBucl9vYmplY3RzX2luaXRpYWwgPSBucl9vYmplY3RzOworCQlpZiAobnJfdW5yZXNvbHZlZCA8PSAwKQorCQkJZGllKF8oImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiKSk7CisJCW9iamVjdHMgPSB4cmVhbGxvYyhvYmplY3RzLAorCQkJCSAgIChucl9vYmplY3RzICsgbnJfdW5yZXNvbHZlZCArIDEpCisJCQkJICAgKiBzaXplb2YoKm9iamVjdHMpKTsKKwkJZiA9IHNoYTFmZChvdXRwdXRfZmQsIGN1cnJfcGFjayk7CisJCWZpeF91bnJlc29sdmVkX2RlbHRhcyhmLCBucl91bnJlc29sdmVkKTsKKwkJc3ByaW50Zihtc2csIF8oImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiKSwKKwkJCW5yX29iamVjdHMgLSBucl9vYmplY3RzX2luaXRpYWwpOworCQlzdG9wX3Byb2dyZXNzX21zZygmcHJvZ3Jlc3MsIG1zZyk7CisJCXNoYTFjbG9zZShmLCB0YWlsX3NoYTEsIDApOworCQloYXNoY3B5KHJlYWRfc2hhMSwgcGFja19zaGExKTsKKwkJZml4dXBfcGFja19oZWFkZXJfZm9vdGVyKG91dHB1dF9mZCwgcGFja19zaGExLAorCQkJCQkgY3Vycl9wYWNrLCBucl9vYmplY3RzLAorCQkJCQkgcmVhZF9zaGExLCBjb25zdW1lZF9ieXRlcy0yMCk7CisJCWlmIChoYXNoY21wKHJlYWRfc2hhMSwgdGFpbF9zaGExKSAhPSAwKQorCQkJZGllKF8oIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgIgorCQkJICAgICAgIihkaXNrIGNvcnJ1cHRpb24/KSIpLCBjdXJyX3BhY2spOworCX0KKwlpZiAobnJfZGVsdGFzICE9IG5yX3Jlc29sdmVkX2RlbHRhcykKKwkJZGllKFFfKCJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIiwKKwkJICAgICAgICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIsCisJCSAgICAgICBucl9kZWx0YXMgLSBucl9yZXNvbHZlZF9kZWx0YXMpLAorCQkgICAgbnJfZGVsdGFzIC0gbnJfcmVzb2x2ZWRfZGVsdGFzKTsKK30KKworc3RhdGljIGludCB3cml0ZV9jb21wcmVzc2VkKHN0cnVjdCBzaGExZmlsZSAqZiwgdm9pZCAqaW4sIHVuc2lnbmVkIGludCBzaXplKQoreworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgb3V0YnVmWzQwOTZdOworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlnaXRfZGVmbGF0ZV9pbml0KCZzdHJlYW0sIHpsaWJfY29tcHJlc3Npb25fbGV2ZWwpOworCXN0cmVhbS5uZXh0X2luID0gaW47CisJc3RyZWFtLmF2YWlsX2luID0gc2l6ZTsKKworCWRvIHsKKwkJc3RyZWFtLm5leHRfb3V0ID0gb3V0YnVmOworCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKG91dGJ1Zik7CisJCXN0YXR1cyA9IGdpdF9kZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwkJc2hhMXdyaXRlKGYsIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1ZikgLSBzdHJlYW0uYXZhaWxfb3V0KTsKKwl9IHdoaWxlIChzdGF0dXMgPT0gWl9PSyk7CisKKwlpZiAoc3RhdHVzICE9IFpfU1RSRUFNX0VORCkKKwkJZGllKF8oInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIiksIHN0YXR1cyk7CisJc2l6ZSA9IHN0cmVhbS50b3RhbF9vdXQ7CisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqYXBwZW5kX29ial90b19wYWNrKHN0cnVjdCBzaGExZmlsZSAqZiwKKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpidWYsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbbnJfb2JqZWN0cysrXTsKKwl1bnNpZ25lZCBjaGFyIGhlYWRlclsxMF07CisJdW5zaWduZWQgbG9uZyBzID0gc2l6ZTsKKwlpbnQgbiA9IDA7CisJdW5zaWduZWQgY2hhciBjID0gKHR5cGUgPDwgNCkgfCAocyAmIDE1KTsKKwlzID4+PSA0OworCXdoaWxlIChzKSB7CisJCWhlYWRlcltuKytdID0gYyB8IDB4ODA7CisJCWMgPSBzICYgMHg3ZjsKKwkJcyA+Pj0gNzsKKwl9CisJaGVhZGVyW24rK10gPSBjOworCWNyYzMyX2JlZ2luKGYpOworCXNoYTF3cml0ZShmLCBoZWFkZXIsIG4pOworCW9ialswXS5zaXplID0gc2l6ZTsKKwlvYmpbMF0uaGRyX3NpemUgPSBuOworCW9ialswXS50eXBlID0gdHlwZTsKKwlvYmpbMF0ucmVhbF90eXBlID0gdHlwZTsKKwlvYmpbMV0uaWR4Lm9mZnNldCA9IG9ialswXS5pZHgub2Zmc2V0ICsgbjsKKwlvYmpbMV0uaWR4Lm9mZnNldCArPSB3cml0ZV9jb21wcmVzc2VkKGYsIGJ1Ziwgc2l6ZSk7CisJb2JqWzBdLmlkeC5jcmMzMiA9IGNyYzMyX2VuZChmKTsKKwlzaGExZmx1c2goZik7CisJaGFzaGNweShvYmotPmlkeC5zaGExLCBzaGExKTsKKwlyZXR1cm4gb2JqOworfQorCitzdGF0aWMgaW50IGRlbHRhX3Bvc19jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwlzdHJ1Y3QgZGVsdGFfZW50cnkgKmEgPSAqKHN0cnVjdCBkZWx0YV9lbnRyeSAqKilfYTsKKwlzdHJ1Y3QgZGVsdGFfZW50cnkgKmIgPSAqKHN0cnVjdCBkZWx0YV9lbnRyeSAqKilfYjsKKwlyZXR1cm4gYS0+b2JqX25vIC0gYi0+b2JqX25vOworfQorCitzdGF0aWMgdm9pZCBmaXhfdW5yZXNvbHZlZF9kZWx0YXMoc3RydWN0IHNoYTFmaWxlICpmLCBpbnQgbnJfdW5yZXNvbHZlZCkKK3sKKwlzdHJ1Y3QgZGVsdGFfZW50cnkgKipzb3J0ZWRfYnlfcG9zOworCWludCBpLCBuID0gMDsKKworCS8qCisJICogU2luY2UgbWFueSB1bnJlc29sdmVkIGRlbHRhcyBtYXkgd2VsbCBiZSB0aGVtc2VsdmVzIGJhc2Ugb2JqZWN0cworCSAqIGZvciBtb3JlIHVucmVzb2x2ZWQgZGVsdGFzLCB3ZSByZWFsbHkgd2FudCB0byBpbmNsdWRlIHRoZQorCSAqIHNtYWxsZXN0IG51bWJlciBvZiBiYXNlIG9iamVjdHMgdGhhdCB3b3VsZCBjb3ZlciBhcyBtdWNoIGRlbHRhCisJICogYXMgcG9zc2libGUgYnkgcGlja2luZyB0aGUKKwkgKiB0cnVuYyBkZWx0YXMgZmlyc3QsIGFsbG93aW5nIGZvciBvdGhlciBkZWx0YXMgdG8gcmVzb2x2ZSB3aXRob3V0CisJICogYWRkaXRpb25hbCBiYXNlIG9iamVjdHMuICBTaW5jZSBtb3N0IGJhc2Ugb2JqZWN0cyBhcmUgdG8gYmUgZm91bmQKKwkgKiBiZWZvcmUgZGVsdGFzIGRlcGVuZGluZyBvbiB0aGVtLCBhIGdvb2QgaGV1cmlzdGljIGlzIHRvIHN0YXJ0CisJICogcmVzb2x2aW5nIGRlbHRhcyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVpciBwb3NpdGlvbiBpbiB0aGUgcGFjay4KKwkgKi8KKwlzb3J0ZWRfYnlfcG9zID0geG1hbGxvYyhucl91bnJlc29sdmVkICogc2l6ZW9mKCpzb3J0ZWRfYnlfcG9zKSk7CisJZm9yIChpID0gMDsgaSA8IG5yX2RlbHRhczsgaSsrKSB7CisJCWlmIChvYmplY3RzW2RlbHRhc1tpXS5vYmpfbm9dLnJlYWxfdHlwZSAhPSBPQkpfUkVGX0RFTFRBKQorCQkJY29udGludWU7CisJCXNvcnRlZF9ieV9wb3NbbisrXSA9ICZkZWx0YXNbaV07CisJfQorCXFzb3J0KHNvcnRlZF9ieV9wb3MsIG4sIHNpemVvZigqc29ydGVkX2J5X3BvcyksIGRlbHRhX3Bvc19jb21wYXJlKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3RydWN0IGRlbHRhX2VudHJ5ICpkID0gc29ydGVkX2J5X3Bvc1tpXTsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlX29iaiA9IGFsbG9jX2Jhc2VfZGF0YSgpOworCisJCWlmIChvYmplY3RzW2QtPm9ial9ub10ucmVhbF90eXBlICE9IE9CSl9SRUZfREVMVEEpCisJCQljb250aW51ZTsKKwkJYmFzZV9vYmotPmRhdGEgPSByZWFkX3NoYTFfZmlsZShkLT5iYXNlLnNoYTEsICZ0eXBlLCAmYmFzZV9vYmotPnNpemUpOworCQlpZiAoIWJhc2Vfb2JqLT5kYXRhKQorCQkJY29udGludWU7CisKKwkJaWYgKGNoZWNrX3NoYTFfc2lnbmF0dXJlKGQtPmJhc2Uuc2hhMSwgYmFzZV9vYmotPmRhdGEsCisJCQkJYmFzZV9vYmotPnNpemUsIHR5cGVuYW1lKHR5cGUpKSkKKwkJCWRpZShfKCJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIpLCBzaGExX3RvX2hleChkLT5iYXNlLnNoYTEpKTsKKwkJYmFzZV9vYmotPm9iaiA9IGFwcGVuZF9vYmpfdG9fcGFjayhmLCBkLT5iYXNlLnNoYTEsCisJCQkJCWJhc2Vfb2JqLT5kYXRhLCBiYXNlX29iai0+c2l6ZSwgdHlwZSk7CisJCWZpbmRfdW5yZXNvbHZlZF9kZWx0YXMoYmFzZV9vYmopOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBucl9yZXNvbHZlZF9kZWx0YXMpOworCX0KKwlmcmVlKHNvcnRlZF9ieV9wb3MpOworfQorCitzdGF0aWMgdm9pZCBmaW5hbChjb25zdCBjaGFyICpmaW5hbF9wYWNrX25hbWUsIGNvbnN0IGNoYXIgKmN1cnJfcGFja19uYW1lLAorCQkgIGNvbnN0IGNoYXIgKmZpbmFsX2luZGV4X25hbWUsIGNvbnN0IGNoYXIgKmN1cnJfaW5kZXhfbmFtZSwKKwkJICBjb25zdCBjaGFyICprZWVwX25hbWUsIGNvbnN0IGNoYXIgKmtlZXBfbXNnLAorCQkgIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY29uc3QgY2hhciAqcmVwb3J0ID0gInBhY2siOworCWNoYXIgbmFtZVtQQVRIX01BWF07CisJaW50IGVycjsKKworCWlmICghZnJvbV9zdGRpbikgeworCQljbG9zZShpbnB1dF9mZCk7CisJfSBlbHNlIHsKKwkJZnN5bmNfb3JfZGllKG91dHB1dF9mZCwgY3Vycl9wYWNrX25hbWUpOworCQllcnIgPSBjbG9zZShvdXRwdXRfZmQpOworCQlpZiAoZXJyKQorCQkJZGllX2Vycm5vKF8oImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIikpOworCX0KKworCWlmIChrZWVwX21zZykgeworCQlpbnQga2VlcF9mZCwga2VlcF9tc2dfbGVuID0gc3RybGVuKGtlZXBfbXNnKTsKKworCQlpZiAoIWtlZXBfbmFtZSkKKwkJCWtlZXBfZmQgPSBvZGJfcGFja19rZWVwKG5hbWUsIHNpemVvZihuYW1lKSwgc2hhMSk7CisJCWVsc2UKKwkJCWtlZXBfZmQgPSBvcGVuKGtlZXBfbmFtZSwgT19SRFdSfE9fQ1JFQVR8T19FWENMLCAwNjAwKTsKKworCQlpZiAoa2VlcF9mZCA8IDApIHsKKwkJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQkJZGllX2Vycm5vKF8oImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIpLAorCQkJCQkgIGtlZXBfbmFtZSk7CisJCX0gZWxzZSB7CisJCQlpZiAoa2VlcF9tc2dfbGVuID4gMCkgeworCQkJCXdyaXRlX29yX2RpZShrZWVwX2ZkLCBrZWVwX21zZywga2VlcF9tc2dfbGVuKTsKKwkJCQl3cml0ZV9vcl9kaWUoa2VlcF9mZCwgIlxuIiwgMSk7CisJCQl9CisJCQlpZiAoY2xvc2Uoa2VlcF9mZCkgIT0gMCkKKwkJCQlkaWVfZXJybm8oXygiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcyciKSwKKwkJCQkgICAga2VlcF9uYW1lKTsKKwkJCXJlcG9ydCA9ICJrZWVwIjsKKwkJfQorCX0KKworCWlmIChmaW5hbF9wYWNrX25hbWUgIT0gY3Vycl9wYWNrX25hbWUpIHsKKwkJaWYgKCFmaW5hbF9wYWNrX25hbWUpIHsKKwkJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzL3BhY2svcGFjay0lcy5wYWNrIiwKKwkJCQkgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgc2hhMV90b19oZXgoc2hhMSkpOworCQkJZmluYWxfcGFja19uYW1lID0gbmFtZTsKKwkJfQorCQlpZiAobW92ZV90ZW1wX3RvX2ZpbGUoY3Vycl9wYWNrX25hbWUsIGZpbmFsX3BhY2tfbmFtZSkpCisJCQlkaWUoXygiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIpKTsKKwl9IGVsc2UgaWYgKGZyb21fc3RkaW4pCisJCWNobW9kKGZpbmFsX3BhY2tfbmFtZSwgMDQ0NCk7CisKKwlpZiAoZmluYWxfaW5kZXhfbmFtZSAhPSBjdXJyX2luZGV4X25hbWUpIHsKKwkJaWYgKCFmaW5hbF9pbmRleF9uYW1lKSB7CisJCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy9wYWNrL3BhY2stJXMuaWR4IiwKKwkJCQkgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgc2hhMV90b19oZXgoc2hhMSkpOworCQkJZmluYWxfaW5kZXhfbmFtZSA9IG5hbWU7CisJCX0KKwkJaWYgKG1vdmVfdGVtcF90b19maWxlKGN1cnJfaW5kZXhfbmFtZSwgZmluYWxfaW5kZXhfbmFtZSkpCisJCQlkaWUoXygiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiKSk7CisJfSBlbHNlCisJCWNobW9kKGZpbmFsX2luZGV4X25hbWUsIDA0NDQpOworCisJaWYgKCFmcm9tX3N0ZGluKSB7CisJCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9IGVsc2UgeworCQljaGFyIGJ1Zls0OF07CisJCWludCBsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXNcdCVzXG4iLAorCQkJCSAgIHJlcG9ydCwgc2hhMV90b19oZXgoc2hhMSkpOworCQl3cml0ZV9vcl9kaWUoMSwgYnVmLCBsZW4pOworCisJCS8qCisJCSAqIExldCdzIGp1c3QgbWltaWMgZ2l0LXVucGFjay1vYmplY3RzIGhlcmUgYW5kIHdyaXRlCisJCSAqIHRoZSBsYXN0IHBhcnQgb2YgdGhlIGlucHV0IGJ1ZmZlciB0byBzdGRvdXQuCisJCSAqLworCQl3aGlsZSAoaW5wdXRfbGVuKSB7CisJCQllcnIgPSB4d3JpdGUoMSwgaW5wdXRfYnVmZmVyICsgaW5wdXRfb2Zmc2V0LCBpbnB1dF9sZW4pOworCQkJaWYgKGVyciA8PSAwKQorCQkJCWJyZWFrOworCQkJaW5wdXRfbGVuIC09IGVycjsKKwkJCWlucHV0X29mZnNldCArPSBlcnI7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2luZGV4X3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCXN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKm9wdHMgPSBjYjsKKworCWlmICghc3RyY21wKGssICJwYWNrLmluZGV4dmVyc2lvbiIpKSB7CisJCW9wdHMtPnZlcnNpb24gPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJaWYgKG9wdHMtPnZlcnNpb24gPiAyKQorCQkJZGllKF8oImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lIlBSSXUzMiksIG9wdHMtPnZlcnNpb24pOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInBhY2sudGhyZWFkcyIpKSB7CisJCW5yX3RocmVhZHMgPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJaWYgKG5yX3RocmVhZHMgPCAwKQorCQkJZGllKF8oImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiKSwKKwkJCSAgICBucl90aHJlYWRzKTsKKyNpZmRlZiBOT19QVEhSRUFEUworCQlpZiAobnJfdGhyZWFkcyAhPSAxKQorCQkJd2FybmluZyhfKCJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIiksIGspOworCQlucl90aHJlYWRzID0gMTsKKyNlbmRpZgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2LCBjYik7Cit9CisKK3N0YXRpYyBpbnQgY21wX3VpbnQzMihjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJdWludDMyX3QgYSA9ICooKHVpbnQzMl90ICopYV8pOworCXVpbnQzMl90IGIgPSAqKCh1aW50MzJfdCAqKWJfKTsKKworCXJldHVybiAoYSA8IGIpID8gLTEgOiAoYSAhPSBiKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF92Ml9hbm9tYWxvdXNfb2Zmc2V0cyhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkgICAgICBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpvcHRzKQoreworCWNvbnN0IHVpbnQzMl90ICppZHgxLCAqaWR4MjsKKwl1aW50MzJfdCBpOworCisJLyogVGhlIGFkZHJlc3Mgb2YgdGhlIDQtYnl0ZSBvZmZzZXQgdGFibGUgKi8KKwlpZHgxID0gKCgoY29uc3QgdWludDMyX3QgKilwLT5pbmRleF9kYXRhKQorCQkrIDIgLyogOC1ieXRlIGhlYWRlciAqLworCQkrIDI1NiAvKiBmYW4gb3V0ICovCisJCSsgNSAqIHAtPm51bV9vYmplY3RzIC8qIDIwLWJ5dGUgU0hBLTEgdGFibGUgKi8KKwkJKyBwLT5udW1fb2JqZWN0cyAvKiBDUkMzMiB0YWJsZSAqLworCQkpOworCisJLyogVGhlIGFkZHJlc3Mgb2YgdGhlIDgtYnl0ZSBvZmZzZXQgdGFibGUgKi8KKwlpZHgyID0gaWR4MSArIHAtPm51bV9vYmplY3RzOworCisJZm9yIChpID0gMDsgaSA8IHAtPm51bV9vYmplY3RzOyBpKyspIHsKKwkJdWludDMyX3Qgb2ZmID0gbnRvaGwoaWR4MVtpXSk7CisJCWlmICghKG9mZiAmIDB4ODAwMDAwMDApKQorCQkJY29udGludWU7CisJCW9mZiA9IG9mZiAmIDB4N2ZmZmZmZmY7CisJCWlmIChpZHgyW29mZiAqIDJdKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIFRoZSByZWFsIG9mZnNldCBpcyBudG9obChpZHgyW29mZiAqIDJdKSBpbiBoaWdoIDQKKwkJICogb2N0ZXRzLCBhbmQgbnRvaGwoaWR4MltvZmYgKiAyICsgMV0pIGluIGxvdyA0CisJCSAqIG9jdGV0cy4gIEJ1dCBpZHgyW29mZiAqIDJdIGlzIFplcm8hISEKKwkJICovCisJCUFMTE9DX0dST1cob3B0cy0+YW5vbWFseSwgb3B0cy0+YW5vbWFseV9uciArIDEsIG9wdHMtPmFub21hbHlfYWxsb2MpOworCQlvcHRzLT5hbm9tYWx5W29wdHMtPmFub21hbHlfbnIrK10gPSBudG9obChpZHgyW29mZiAqIDIgKyAxXSk7CisJfQorCisJaWYgKDEgPCBvcHRzLT5hbm9tYWx5X25yKQorCQlxc29ydChvcHRzLT5hbm9tYWx5LCBvcHRzLT5hbm9tYWx5X25yLCBzaXplb2YodWludDMyX3QpLCBjbXBfdWludDMyKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9pZHhfb3B0aW9uKHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKm9wdHMsIGNvbnN0IGNoYXIgKnBhY2tfbmFtZSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGFkZF9wYWNrZWRfZ2l0KHBhY2tfbmFtZSwgc3RybGVuKHBhY2tfbmFtZSksIDEpOworCisJaWYgKCFwKQorCQlkaWUoXygiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciKSwgcGFja19uYW1lKTsKKwlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQlkaWUoXygiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIpLCBwYWNrX25hbWUpOworCisJLyogUmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBleGlzdGluZyBpZHggZmlsZSAqLworCW9wdHMtPnZlcnNpb24gPSBwLT5pbmRleF92ZXJzaW9uOworCisJaWYgKG9wdHMtPnZlcnNpb24gPT0gMikKKwkJcmVhZF92Ml9hbm9tYWxvdXNfb2Zmc2V0cyhwLCBvcHRzKTsKKworCS8qCisJICogR2V0IHJpZCBvZiB0aGUgaWR4IGZpbGUgYXMgd2UgZG8gbm90IG5lZWQgaXQgYW55bW9yZS4KKwkgKiBORUVEU1dPUks6IGV4dHJhY3QgdGhpcyBiaXQgZnJvbSBmcmVlX3BhY2tfYnlfbmFtZSgpIGluCisJICogc2hhMV9maWxlLmMsIHBlcmhhcHM/ICBJdCBzaG91bGRuJ3QgbWF0dGVyIHZlcnkgbXVjaCBhcyB3ZQorCSAqIGtub3cgd2UgaGF2ZW4ndCBpbnN0YWxsZWQgdGhpcyBwYWNrIChoZW5jZSB3ZSBuZXZlciBoYXZlCisJICogcmVhZCBhbnl0aGluZyBmcm9tIGl0KS4KKwkgKi8KKwljbG9zZV9wYWNrX2luZGV4KHApOworCWZyZWUocCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcGFja19pbmZvKGludCBzdGF0X29ubHkpCit7CisJaW50IGksIGJhc2VvYmplY3RzID0gbnJfb2JqZWN0cyAtIG5yX2RlbHRhczsKKwl1bnNpZ25lZCBsb25nICpjaGFpbl9oaXN0b2dyYW0gPSBOVUxMOworCisJaWYgKGRlZXBlc3RfZGVsdGEpCisJCWNoYWluX2hpc3RvZ3JhbSA9IHhjYWxsb2MoZGVlcGVzdF9kZWx0YSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbaV07CisKKwkJaWYgKGlzX2RlbHRhX3R5cGUob2JqLT50eXBlKSkKKwkJCWNoYWluX2hpc3RvZ3JhbVtvYmotPmRlbHRhX2RlcHRoIC0gMV0rKzsKKwkJaWYgKHN0YXRfb25seSkKKwkJCWNvbnRpbnVlOworCQlwcmludGYoIiVzICUtNnMgJWx1ICVsdSAlIlBSSXVNQVgsCisJCSAgICAgICBzaGExX3RvX2hleChvYmotPmlkeC5zaGExKSwKKwkJICAgICAgIHR5cGVuYW1lKG9iai0+cmVhbF90eXBlKSwgb2JqLT5zaXplLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKG9ialsxXS5pZHgub2Zmc2V0IC0gb2JqLT5pZHgub2Zmc2V0KSwKKwkJICAgICAgICh1aW50bWF4X3Qpb2JqLT5pZHgub2Zmc2V0KTsKKwkJaWYgKGlzX2RlbHRhX3R5cGUob2JqLT50eXBlKSkgeworCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqYm9iaiA9ICZvYmplY3RzW29iai0+YmFzZV9vYmplY3Rfbm9dOworCQkJcHJpbnRmKCIgJXUgJXMiLCBvYmotPmRlbHRhX2RlcHRoLCBzaGExX3RvX2hleChib2JqLT5pZHguc2hhMSkpOworCQl9CisJCXB1dGNoYXIoJ1xuJyk7CisJfQorCisJaWYgKGJhc2VvYmplY3RzKQorCQlwcmludGZfbG4oUV8oIm5vbiBkZWx0YTogJWQgb2JqZWN0IiwKKwkJCSAgICAgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIsCisJCQkgICAgIGJhc2VvYmplY3RzKSwKKwkJCSAgYmFzZW9iamVjdHMpOworCWZvciAoaSA9IDA7IGkgPCBkZWVwZXN0X2RlbHRhOyBpKyspIHsKKwkJaWYgKCFjaGFpbl9oaXN0b2dyYW1baV0pCisJCQljb250aW51ZTsKKwkJcHJpbnRmX2xuKFFfKCJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIsCisJCQkgICAgICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiLAorCQkJICAgICBjaGFpbl9oaXN0b2dyYW1baV0pLAorCQkJICBpICsgMSwKKwkJCSAgY2hhaW5faGlzdG9ncmFtW2ldKTsKKwl9Cit9CisKK2ludCBjbWRfaW5kZXhfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgZml4X3RoaW5fcGFjayA9IDAsIHZlcmlmeSA9IDAsIHN0YXRfb25seSA9IDAsIHN0YXQgPSAwOworCWNvbnN0IGNoYXIgKmN1cnJfcGFjaywgKmN1cnJfaW5kZXg7CisJY29uc3QgY2hhciAqaW5kZXhfbmFtZSA9IE5VTEwsICpwYWNrX25hbWUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmtlZXBfbmFtZSA9IE5VTEwsICprZWVwX21zZyA9IE5VTEw7CisJY2hhciAqaW5kZXhfbmFtZV9idWYgPSBOVUxMLCAqa2VlcF9uYW1lX2J1ZiA9IE5VTEw7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaWR4X29iamVjdHM7CisJc3RydWN0IHBhY2tfaWR4X29wdGlvbiBvcHRzOworCXVuc2lnbmVkIGNoYXIgcGFja19zaGExWzIwXTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisKKwlyZXNldF9wYWNrX2lkeF9vcHRpb24oJm9wdHMpOworCWdpdF9jb25maWcoZ2l0X2luZGV4X3BhY2tfY29uZmlnLCAmb3B0cyk7CisJaWYgKHByZWZpeCAmJiBjaGRpcihwcmVmaXgpKQorCQlkaWUoXygiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiKSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXN0ZGluIikpIHsKKwkJCQlmcm9tX3N0ZGluID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZpeC10aGluIikpIHsKKwkJCQlmaXhfdGhpbl9wYWNrID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXN0cmljdCIpKSB7CisJCQkJc3RyaWN0ID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeSIpKSB7CisJCQkJdmVyaWZ5ID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeS1zdGF0IikpIHsKKwkJCQl2ZXJpZnkgPSAxOworCQkJCXN0YXQgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdmVyaWZ5LXN0YXQtb25seSIpKSB7CisJCQkJdmVyaWZ5ID0gMTsKKwkJCQlzdGF0ID0gMTsKKwkJCQlzdGF0X29ubHkgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0ta2VlcCIpKSB7CisJCQkJa2VlcF9tc2cgPSAiIjsKKwkJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLWtlZXA9IikpIHsKKwkJCQlrZWVwX21zZyA9IGFyZyArIDc7CisJCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS10aHJlYWRzPSIpKSB7CisJCQkJY2hhciAqZW5kOworCQkJCW5yX3RocmVhZHMgPSBzdHJ0b3VsKGFyZysxMCwgJmVuZCwgMCk7CisJCQkJaWYgKCFhcmdbMTBdIHx8ICplbmQgfHwgbnJfdGhyZWFkcyA8IDApCisJCQkJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworI2lmZGVmIE5PX1BUSFJFQURTCisJCQkJaWYgKG5yX3RocmVhZHMgIT0gMSkKKwkJCQkJd2FybmluZyhfKCJubyB0aHJlYWRzIHN1cHBvcnQsICIKKwkJCQkJCSAgImlnbm9yaW5nICVzIiksIGFyZyk7CisJCQkJbnJfdGhyZWFkcyA9IDE7CisjZW5kaWYKKwkJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLXBhY2tfaGVhZGVyPSIpKSB7CisJCQkJc3RydWN0IHBhY2tfaGVhZGVyICpoZHI7CisJCQkJY2hhciAqYzsKKworCQkJCWhkciA9IChzdHJ1Y3QgcGFja19oZWFkZXIgKilpbnB1dF9idWZmZXI7CisJCQkJaGRyLT5oZHJfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19TSUdOQVRVUkUpOworCQkJCWhkci0+aGRyX3ZlcnNpb24gPSBodG9ubChzdHJ0b3VsKGFyZyArIDE0LCAmYywgMTApKTsKKwkJCQlpZiAoKmMgIT0gJywnKQorCQkJCQlkaWUoXygiYmFkICVzIiksIGFyZyk7CisJCQkJaGRyLT5oZHJfZW50cmllcyA9IGh0b25sKHN0cnRvdWwoYyArIDEsICZjLCAxMCkpOworCQkJCWlmICgqYykKKwkJCQkJZGllKF8oImJhZCAlcyIpLCBhcmcpOworCQkJCWlucHV0X2xlbiA9IHNpemVvZigqaGRyKTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItdiIpKSB7CisJCQkJdmVyYm9zZSA9IDE7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLW8iKSkgeworCQkJCWlmIChpbmRleF9uYW1lIHx8IChpKzEpID49IGFyZ2MpCisJCQkJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCQkJCWluZGV4X25hbWUgPSBhcmd2WysraV07CisJCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1pbmRleC12ZXJzaW9uPSIpKSB7CisJCQkJY2hhciAqYzsKKwkJCQlvcHRzLnZlcnNpb24gPSBzdHJ0b3VsKGFyZyArIDE2LCAmYywgMTApOworCQkJCWlmIChvcHRzLnZlcnNpb24gPiAyKQorCQkJCQlkaWUoXygiYmFkICVzIiksIGFyZyk7CisJCQkJaWYgKCpjID09ICcsJykKKwkJCQkJb3B0cy5vZmYzMl9saW1pdCA9IHN0cnRvdWwoYysxLCAmYywgMCk7CisJCQkJaWYgKCpjIHx8IG9wdHMub2ZmMzJfbGltaXQgJiAweDgwMDAwMDAwKQorCQkJCQlkaWUoXygiYmFkICVzIiksIGFyZyk7CisJCQl9IGVsc2UKKwkJCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHBhY2tfbmFtZSkKKwkJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCQlwYWNrX25hbWUgPSBhcmc7CisJfQorCisJaWYgKCFwYWNrX25hbWUgJiYgIWZyb21fc3RkaW4pCisJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCWlmIChmaXhfdGhpbl9wYWNrICYmICFmcm9tX3N0ZGluKQorCQlkaWUoXygiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iKSk7CisJaWYgKCFpbmRleF9uYW1lICYmIHBhY2tfbmFtZSkgeworCQlpbnQgbGVuID0gc3RybGVuKHBhY2tfbmFtZSk7CisJCWlmICghaGFzX2V4dGVuc2lvbihwYWNrX25hbWUsICIucGFjayIpKQorCQkJZGllKF8oInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIiksCisJCQkgICAgcGFja19uYW1lKTsKKwkJaW5kZXhfbmFtZV9idWYgPSB4bWFsbG9jKGxlbik7CisJCW1lbWNweShpbmRleF9uYW1lX2J1ZiwgcGFja19uYW1lLCBsZW4gLSA1KTsKKwkJc3RyY3B5KGluZGV4X25hbWVfYnVmICsgbGVuIC0gNSwgIi5pZHgiKTsKKwkJaW5kZXhfbmFtZSA9IGluZGV4X25hbWVfYnVmOworCX0KKwlpZiAoa2VlcF9tc2cgJiYgIWtlZXBfbmFtZSAmJiBwYWNrX25hbWUpIHsKKwkJaW50IGxlbiA9IHN0cmxlbihwYWNrX25hbWUpOworCQlpZiAoIWhhc19leHRlbnNpb24ocGFja19uYW1lLCAiLnBhY2siKSkKKwkJCWRpZShfKCJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIpLAorCQkJICAgIHBhY2tfbmFtZSk7CisJCWtlZXBfbmFtZV9idWYgPSB4bWFsbG9jKGxlbik7CisJCW1lbWNweShrZWVwX25hbWVfYnVmLCBwYWNrX25hbWUsIGxlbiAtIDUpOworCQlzdHJjcHkoa2VlcF9uYW1lX2J1ZiArIGxlbiAtIDUsICIua2VlcCIpOworCQlrZWVwX25hbWUgPSBrZWVwX25hbWVfYnVmOworCX0KKwlpZiAodmVyaWZ5KSB7CisJCWlmICghaW5kZXhfbmFtZSkKKwkJCWRpZShfKCItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iKSk7CisJCXJlYWRfaWR4X29wdGlvbigmb3B0cywgaW5kZXhfbmFtZSk7CisJCW9wdHMuZmxhZ3MgfD0gV1JJVEVfSURYX1ZFUklGWSB8IFdSSVRFX0lEWF9TVFJJQ1Q7CisJfQorCWlmIChzdHJpY3QpCisJCW9wdHMuZmxhZ3MgfD0gV1JJVEVfSURYX1NUUklDVDsKKworI2lmbmRlZiBOT19QVEhSRUFEUworCWlmICghbnJfdGhyZWFkcykgeworCQlucl90aHJlYWRzID0gb25saW5lX2NwdXMoKTsKKwkJLyogQW4gZXhwZXJpbWVudCBzaG93ZWQgdGhhdCBtb3JlIHRocmVhZHMgZG9lcyBub3QgbWVhbiBmYXN0ZXIgKi8KKwkJaWYgKG5yX3RocmVhZHMgPiAzKQorCQkJbnJfdGhyZWFkcyA9IDM7CisJfQorI2VuZGlmCisKKwljdXJyX3BhY2sgPSBvcGVuX3BhY2tfZmlsZShwYWNrX25hbWUpOworCXBhcnNlX3BhY2tfaGVhZGVyKCk7CisJb2JqZWN0cyA9IHhjYWxsb2MobnJfb2JqZWN0cyArIDEsIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5KSk7CisJZGVsdGFzID0geGNhbGxvYyhucl9vYmplY3RzLCBzaXplb2Yoc3RydWN0IGRlbHRhX2VudHJ5KSk7CisJcGFyc2VfcGFja19vYmplY3RzKHBhY2tfc2hhMSk7CisJcmVzb2x2ZV9kZWx0YXMoKTsKKwljb25jbHVkZV9wYWNrKGZpeF90aGluX3BhY2ssIGN1cnJfcGFjaywgcGFja19zaGExKTsKKwlmcmVlKGRlbHRhcyk7CisJaWYgKHN0cmljdCkKKwkJY2hlY2tfb2JqZWN0cygpOworCisJaWYgKHN0YXQpCisJCXNob3dfcGFja19pbmZvKHN0YXRfb25seSk7CisKKwlpZHhfb2JqZWN0cyA9IHhtYWxsb2MoKG5yX29iamVjdHMpICogc2l6ZW9mKHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKSk7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykKKwkJaWR4X29iamVjdHNbaV0gPSAmb2JqZWN0c1tpXS5pZHg7CisJY3Vycl9pbmRleCA9IHdyaXRlX2lkeF9maWxlKGluZGV4X25hbWUsIGlkeF9vYmplY3RzLCBucl9vYmplY3RzLCAmb3B0cywgcGFja19zaGExKTsKKwlmcmVlKGlkeF9vYmplY3RzKTsKKworCWlmICghdmVyaWZ5KQorCQlmaW5hbChwYWNrX25hbWUsIGN1cnJfcGFjaywKKwkJICAgICAgaW5kZXhfbmFtZSwgY3Vycl9pbmRleCwKKwkJICAgICAga2VlcF9uYW1lLCBrZWVwX21zZywKKwkJICAgICAgcGFja19zaGExKTsKKwllbHNlCisJCWNsb3NlKGlucHV0X2ZkKTsKKwlmcmVlKG9iamVjdHMpOworCWZyZWUoaW5kZXhfbmFtZV9idWYpOworCWZyZWUoa2VlcF9uYW1lX2J1Zik7CisJaWYgKHBhY2tfbmFtZSA9PSBOVUxMKQorCQlmcmVlKCh2b2lkICopIGN1cnJfcGFjayk7CisJaWYgKGluZGV4X25hbWUgPT0gTlVMTCkKKwkJZnJlZSgodm9pZCAqKSBjdXJyX2luZGV4KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9pbml0LWRiLmMgYi9idWlsdGluL2luaXQtZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGFhMzg3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9pbml0LWRiLmMKQEAgLTAsMCArMSw1OTcgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworI2lmbmRlZiBERUZBVUxUX0dJVF9URU1QTEFURV9ESVIKKyNkZWZpbmUgREVGQVVMVF9HSVRfVEVNUExBVEVfRElSICIvdXNyL3NoYXJlL2dpdC1jb3JlL3RlbXBsYXRlcyIKKyNlbmRpZgorCisjaWZkZWYgTk9fVFJVU1RBQkxFX0ZJTEVNT0RFCisjZGVmaW5lIFRFU1RfRklMRU1PREUgMAorI2Vsc2UKKyNkZWZpbmUgVEVTVF9GSUxFTU9ERSAxCisjZW5kaWYKKworc3RhdGljIGludCBpbml0X2lzX2JhcmVfcmVwb3NpdG9yeSA9IDA7CitzdGF0aWMgaW50IGluaXRfc2hhcmVkX3JlcG9zaXRvcnkgPSAtMTsKK3N0YXRpYyBjb25zdCBjaGFyICppbml0X2RiX3RlbXBsYXRlX2RpcjsKK3N0YXRpYyBjb25zdCBjaGFyICpnaXRfbGluazsKKworc3RhdGljIHZvaWQgc2FmZV9jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKmRpciwgaW50IHNoYXJlKQoreworCWlmIChta2RpcihkaXIsIDA3NzcpIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRUVYSVNUKSB7CisJCQlwZXJyb3IoZGlyKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZWxzZSBpZiAoc2hhcmUgJiYgYWRqdXN0X3NoYXJlZF9wZXJtKGRpcikpCisJCWRpZShfKCJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIpLCBkaXIpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3RlbXBsYXRlc18xKGNoYXIgKnBhdGgsIGludCBiYXNlbGVuLAorCQkJICAgICBjaGFyICp0ZW1wbGF0ZSwgaW50IHRlbXBsYXRlX2Jhc2VsZW4sCisJCQkgICAgIERJUiAqZGlyKQoreworCXN0cnVjdCBkaXJlbnQgKmRlOworCisJLyogTm90ZTogaWYgIi5naXQvaG9va3MiIGZpbGUgZXhpc3RzIGluIHRoZSByZXBvc2l0b3J5IGJlaW5nCisJICogcmUtaW5pdGlhbGl6ZWQsIC9ldGMvY29yZS1naXQvdGVtcGxhdGVzL2hvb2tzL3VwZGF0ZSB3b3VsZAorCSAqIGNhdXNlICJnaXQgaW5pdCIgdG8gZmFpbCBoZXJlLiAgSSB0aGluayB0aGlzIGlzIHNhbmUgYnV0CisJICogaXQgbWVhbnMgdGhhdCB0aGUgc2V0IG9mIHRlbXBsYXRlcyB3ZSBzaGlwIGJ5IGRlZmF1bHQsIGFsb25nCisJICogd2l0aCB0aGUgd2F5IHRoZSBuYW1lc3BhY2UgdW5kZXIgLmdpdC8gaXMgb3JnYW5pemVkLCBzaG91bGQKKwkgKiBiZSByZWFsbHkgY2FyZWZ1bGx5IGNob3Nlbi4KKwkgKi8KKwlzYWZlX2NyZWF0ZV9kaXIocGF0aCwgMSk7CisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3RhdCBzdF9naXQsIHN0X3RlbXBsYXRlOworCQlpbnQgbmFtZWxlbjsKKwkJaW50IGV4aXN0cyA9IDA7CisKKwkJaWYgKGRlLT5kX25hbWVbMF0gPT0gJy4nKQorCQkJY29udGludWU7CisJCW5hbWVsZW4gPSBzdHJsZW4oZGUtPmRfbmFtZSk7CisJCWlmICgoUEFUSF9NQVggPD0gYmFzZWxlbiArIG5hbWVsZW4pIHx8CisJCSAgICAoUEFUSF9NQVggPD0gdGVtcGxhdGVfYmFzZWxlbiArIG5hbWVsZW4pKQorCQkJZGllKF8oImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgbmFtZSAlcyIpLCBkZS0+ZF9uYW1lKTsKKwkJbWVtY3B5KHBhdGggKyBiYXNlbGVuLCBkZS0+ZF9uYW1lLCBuYW1lbGVuKzEpOworCQltZW1jcHkodGVtcGxhdGUgKyB0ZW1wbGF0ZV9iYXNlbGVuLCBkZS0+ZF9uYW1lLCBuYW1lbGVuKzEpOworCQlpZiAobHN0YXQocGF0aCwgJnN0X2dpdCkpIHsKKwkJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBzdGF0ICclcyciKSwgcGF0aCk7CisJCX0KKwkJZWxzZQorCQkJZXhpc3RzID0gMTsKKworCQlpZiAobHN0YXQodGVtcGxhdGUsICZzdF90ZW1wbGF0ZSkpCisJCQlkaWVfZXJybm8oXygiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIpLCB0ZW1wbGF0ZSk7CisKKwkJaWYgKFNfSVNESVIoc3RfdGVtcGxhdGUuc3RfbW9kZSkpIHsKKwkJCURJUiAqc3ViZGlyID0gb3BlbmRpcih0ZW1wbGF0ZSk7CisJCQlpbnQgYmFzZWxlbl9zdWIgPSBiYXNlbGVuICsgbmFtZWxlbjsKKwkJCWludCB0ZW1wbGF0ZV9iYXNlbGVuX3N1YiA9IHRlbXBsYXRlX2Jhc2VsZW4gKyBuYW1lbGVuOworCQkJaWYgKCFzdWJkaXIpCisJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBvcGVuZGlyICclcyciKSwgdGVtcGxhdGUpOworCQkJcGF0aFtiYXNlbGVuX3N1YisrXSA9CisJCQkJdGVtcGxhdGVbdGVtcGxhdGVfYmFzZWxlbl9zdWIrK10gPSAnLyc7CisJCQlwYXRoW2Jhc2VsZW5fc3ViXSA9CisJCQkJdGVtcGxhdGVbdGVtcGxhdGVfYmFzZWxlbl9zdWJdID0gMDsKKwkJCWNvcHlfdGVtcGxhdGVzXzEocGF0aCwgYmFzZWxlbl9zdWIsCisJCQkJCSB0ZW1wbGF0ZSwgdGVtcGxhdGVfYmFzZWxlbl9zdWIsCisJCQkJCSBzdWJkaXIpOworCQkJY2xvc2VkaXIoc3ViZGlyKTsKKwkJfQorCQllbHNlIGlmIChleGlzdHMpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoU19JU0xOSyhzdF90ZW1wbGF0ZS5zdF9tb2RlKSkgeworCQkJY2hhciBsbmtbMjU2XTsKKwkJCWludCBsZW47CisJCQlsZW4gPSByZWFkbGluayh0ZW1wbGF0ZSwgbG5rLCBzaXplb2YobG5rKSk7CisJCQlpZiAobGVuIDwgMCkKKwkJCQlkaWVfZXJybm8oXygiY2Fubm90IHJlYWRsaW5rICclcyciKSwgdGVtcGxhdGUpOworCQkJaWYgKHNpemVvZihsbmspIDw9IGxlbikKKwkJCQlkaWUoXygiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIiksIHRlbXBsYXRlKTsKKwkJCWxua1tsZW5dID0gMDsKKwkJCWlmIChzeW1saW5rKGxuaywgcGF0aCkpCisJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIpLCBsbmssIHBhdGgpOworCQl9CisJCWVsc2UgaWYgKFNfSVNSRUcoc3RfdGVtcGxhdGUuc3RfbW9kZSkpIHsKKwkJCWlmIChjb3B5X2ZpbGUocGF0aCwgdGVtcGxhdGUsIHN0X3RlbXBsYXRlLnN0X21vZGUpKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY29weSAnJXMnIHRvICclcyciKSwgdGVtcGxhdGUsCisJCQkJCSAgcGF0aCk7CisJCX0KKwkJZWxzZQorCQkJZXJyb3IoXygiaWdub3JpbmcgdGVtcGxhdGUgJXMiKSwgdGVtcGxhdGUpOworCX0KK30KKworc3RhdGljIHZvaWQgY29weV90ZW1wbGF0ZXMoY29uc3QgY2hhciAqdGVtcGxhdGVfZGlyKQoreworCWNoYXIgcGF0aFtQQVRIX01BWF07CisJY2hhciB0ZW1wbGF0ZV9wYXRoW1BBVEhfTUFYXTsKKwlpbnQgdGVtcGxhdGVfbGVuOworCURJUiAqZGlyOworCWNvbnN0IGNoYXIgKmdpdF9kaXIgPSBnZXRfZ2l0X2RpcigpOworCWludCBsZW4gPSBzdHJsZW4oZ2l0X2Rpcik7CisKKwlpZiAoIXRlbXBsYXRlX2RpcikKKwkJdGVtcGxhdGVfZGlyID0gZ2V0ZW52KFRFTVBMQVRFX0RJUl9FTlZJUk9OTUVOVCk7CisJaWYgKCF0ZW1wbGF0ZV9kaXIpCisJCXRlbXBsYXRlX2RpciA9IGluaXRfZGJfdGVtcGxhdGVfZGlyOworCWlmICghdGVtcGxhdGVfZGlyKQorCQl0ZW1wbGF0ZV9kaXIgPSBzeXN0ZW1fcGF0aChERUZBVUxUX0dJVF9URU1QTEFURV9ESVIpOworCWlmICghdGVtcGxhdGVfZGlyWzBdKQorCQlyZXR1cm47CisJdGVtcGxhdGVfbGVuID0gc3RybGVuKHRlbXBsYXRlX2Rpcik7CisJaWYgKFBBVEhfTUFYIDw9ICh0ZW1wbGF0ZV9sZW4rc3RybGVuKCIvY29uZmlnIikpKQorCQlkaWUoXygiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBwYXRoICVzIiksIHRlbXBsYXRlX2Rpcik7CisJc3RyY3B5KHRlbXBsYXRlX3BhdGgsIHRlbXBsYXRlX2Rpcik7CisJaWYgKHRlbXBsYXRlX3BhdGhbdGVtcGxhdGVfbGVuLTFdICE9ICcvJykgeworCQl0ZW1wbGF0ZV9wYXRoW3RlbXBsYXRlX2xlbisrXSA9ICcvJzsKKwkJdGVtcGxhdGVfcGF0aFt0ZW1wbGF0ZV9sZW5dID0gMDsKKwl9CisJZGlyID0gb3BlbmRpcih0ZW1wbGF0ZV9wYXRoKTsKKwlpZiAoIWRpcikgeworCQl3YXJuaW5nKF8oInRlbXBsYXRlcyBub3QgZm91bmQgJXMiKSwgdGVtcGxhdGVfZGlyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGF0IHRlbXBsYXRlIGlzIGZyb20gdGhlIGNvcnJlY3QgdmludGFnZSAqLworCXN0cmNweSh0ZW1wbGF0ZV9wYXRoICsgdGVtcGxhdGVfbGVuLCAiY29uZmlnIik7CisJcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbiA9IDA7CisJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbiwKKwkJCSAgICAgdGVtcGxhdGVfcGF0aCwgTlVMTCk7CisJdGVtcGxhdGVfcGF0aFt0ZW1wbGF0ZV9sZW5dID0gMDsKKworCWlmIChyZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uICYmCisJICAgIHJlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24gIT0gR0lUX1JFUE9fVkVSU0lPTikgeworCQl3YXJuaW5nKF8oIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBvZiAiCisJCQkiYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcyciKSwKKwkJCXJlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24sCisJCQl0ZW1wbGF0ZV9kaXIpOworCQljbG9zZWRpcihkaXIpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KHBhdGgsIGdpdF9kaXIsIGxlbik7CisJaWYgKGxlbiAmJiBwYXRoW2xlbiAtIDFdICE9ICcvJykKKwkJcGF0aFtsZW4rK10gPSAnLyc7CisJcGF0aFtsZW5dID0gMDsKKwljb3B5X3RlbXBsYXRlc18xKHBhdGgsIGxlbiwKKwkJCSB0ZW1wbGF0ZV9wYXRoLCB0ZW1wbGF0ZV9sZW4sCisJCQkgZGlyKTsKKwljbG9zZWRpcihkaXIpOworfQorCitzdGF0aWMgaW50IGdpdF9pbml0X2RiX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcChrLCAiaW5pdC50ZW1wbGF0ZWRpciIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmaW5pdF9kYl90ZW1wbGF0ZV9kaXIsIGssIHYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX2RlZmF1bHRfZmlsZXMoY29uc3QgY2hhciAqdGVtcGxhdGVfcGF0aCkKK3sKKwljb25zdCBjaGFyICpnaXRfZGlyID0gZ2V0X2dpdF9kaXIoKTsKKwl1bnNpZ25lZCBsZW4gPSBzdHJsZW4oZ2l0X2Rpcik7CisJc3RhdGljIGNoYXIgcGF0aFtQQVRIX01BWF07CisJc3RydWN0IHN0YXQgc3QxOworCWNoYXIgcmVwb192ZXJzaW9uX3N0cmluZ1sxMF07CisJY2hhciBqdW5rWzJdOworCWludCByZWluaXQ7CisJaW50IGZpbGVtb2RlOworCisJaWYgKGxlbiA+IHNpemVvZihwYXRoKS01MCkKKwkJZGllKF8oImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIiksIGdpdF9kaXIpOworCW1lbWNweShwYXRoLCBnaXRfZGlyLCBsZW4pOworCisJaWYgKGxlbiAmJiBwYXRoW2xlbi0xXSAhPSAnLycpCisJCXBhdGhbbGVuKytdID0gJy8nOworCisJLyoKKwkgKiBDcmVhdGUgLmdpdC9yZWZzL3toZWFkcyx0YWdzfQorCSAqLworCXNhZmVfY3JlYXRlX2RpcihnaXRfcGF0aCgicmVmcyIpLCAxKTsKKwlzYWZlX2NyZWF0ZV9kaXIoZ2l0X3BhdGgoInJlZnMvaGVhZHMiKSwgMSk7CisJc2FmZV9jcmVhdGVfZGlyKGdpdF9wYXRoKCJyZWZzL3RhZ3MiKSwgMSk7CisKKwkvKiBKdXN0IGxvb2sgZm9yIGBpbml0LnRlbXBsYXRlZGlyYCAqLworCWdpdF9jb25maWcoZ2l0X2luaXRfZGJfY29uZmlnLCBOVUxMKTsKKworCS8qIEZpcnN0IGNvcHkgdGhlIHRlbXBsYXRlcyAtLSB3ZSBtaWdodCBoYXZlIHRoZSBkZWZhdWx0CisJICogY29uZmlnIGZpbGUgdGhlcmUsIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgd2FudCB0byByZWFkCisJICogZnJvbSBpdCBhZnRlciBpbnN0YWxsaW5nLgorCSAqLworCWNvcHlfdGVtcGxhdGVzKHRlbXBsYXRlX3BhdGgpOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSBpbml0X2lzX2JhcmVfcmVwb3NpdG9yeTsKKworCS8qIHJlYWRpbmcgZXhpc3RpbmcgY29uZmlnIG1heSBoYXZlIG92ZXJ3cm90ZSBpdCAqLworCWlmIChpbml0X3NoYXJlZF9yZXBvc2l0b3J5ICE9IC0xKQorCQlzaGFyZWRfcmVwb3NpdG9yeSA9IGluaXRfc2hhcmVkX3JlcG9zaXRvcnk7CisKKwkvKgorCSAqIFdlIHdvdWxkIGhhdmUgY3JlYXRlZCB0aGUgYWJvdmUgdW5kZXIgdXNlcidzIHVtYXNrIC0tIHVuZGVyCisJICogc2hhcmVkLXJlcG9zaXRvcnkgc2V0dGluZ3MsIHdlIHdvdWxkIG5lZWQgdG8gZml4IHRoZW0gdXAuCisJICovCisJaWYgKHNoYXJlZF9yZXBvc2l0b3J5KSB7CisJCWFkanVzdF9zaGFyZWRfcGVybShnZXRfZ2l0X2RpcigpKTsKKwkJYWRqdXN0X3NoYXJlZF9wZXJtKGdpdF9wYXRoKCJyZWZzIikpOworCQlhZGp1c3Rfc2hhcmVkX3Blcm0oZ2l0X3BhdGgoInJlZnMvaGVhZHMiKSk7CisJCWFkanVzdF9zaGFyZWRfcGVybShnaXRfcGF0aCgicmVmcy90YWdzIikpOworCX0KKworCS8qCisJICogQ3JlYXRlIHRoZSBkZWZhdWx0IHN5bWxpbmsgZnJvbSAiLmdpdC9IRUFEIiB0byB0aGUgIm1hc3RlciIKKwkgKiBicmFuY2gsIGlmIGl0IGRvZXMgbm90IGV4aXN0IHlldC4KKwkgKi8KKwlzdHJjcHkocGF0aCArIGxlbiwgIkhFQUQiKTsKKwlyZWluaXQgPSAoIWFjY2VzcyhwYXRoLCBSX09LKQorCQkgIHx8IHJlYWRsaW5rKHBhdGgsIGp1bmssIHNpemVvZihqdW5rKS0xKSAhPSAtMSk7CisJaWYgKCFyZWluaXQpIHsKKwkJaWYgKGNyZWF0ZV9zeW1yZWYoIkhFQUQiLCAicmVmcy9oZWFkcy9tYXN0ZXIiLCBOVUxMKSA8IDApCisJCQlleGl0KDEpOworCX0KKworCS8qIFRoaXMgZm9yY2VzIGNyZWF0aW9uIG9mIG5ldyBjb25maWcgZmlsZSAqLworCXNwcmludGYocmVwb192ZXJzaW9uX3N0cmluZywgIiVkIiwgR0lUX1JFUE9fVkVSU0lPTik7CisJZ2l0X2NvbmZpZ19zZXQoImNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24iLCByZXBvX3ZlcnNpb25fc3RyaW5nKTsKKworCXBhdGhbbGVuXSA9IDA7CisJc3RyY3B5KHBhdGggKyBsZW4sICJjb25maWciKTsKKworCS8qIENoZWNrIGZpbGVtb2RlIHRydXN0YWJpbGl0eSAqLworCWZpbGVtb2RlID0gVEVTVF9GSUxFTU9ERTsKKwlpZiAoVEVTVF9GSUxFTU9ERSAmJiAhbHN0YXQocGF0aCwgJnN0MSkpIHsKKwkJc3RydWN0IHN0YXQgc3QyOworCQlmaWxlbW9kZSA9ICghY2htb2QocGF0aCwgc3QxLnN0X21vZGUgXiBTX0lYVVNSKSAmJgorCQkJCSFsc3RhdChwYXRoLCAmc3QyKSAmJgorCQkJCXN0MS5zdF9tb2RlICE9IHN0Mi5zdF9tb2RlKTsKKwl9CisJZ2l0X2NvbmZpZ19zZXQoImNvcmUuZmlsZW1vZGUiLCBmaWxlbW9kZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeSgpKQorCQlnaXRfY29uZmlnX3NldCgiY29yZS5iYXJlIiwgInRydWUiKTsKKwllbHNlIHsKKwkJY29uc3QgY2hhciAqd29ya190cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKwkJZ2l0X2NvbmZpZ19zZXQoImNvcmUuYmFyZSIsICJmYWxzZSIpOworCQkvKiBhbGxvdyB0ZW1wbGF0ZSBjb25maWcgZmlsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCAqLworCQlpZiAobG9nX2FsbF9yZWZfdXBkYXRlcyA9PSAtMSkKKwkJICAgIGdpdF9jb25maWdfc2V0KCJjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMiLCAidHJ1ZSIpOworCQlpZiAocHJlZml4Y21wKGdpdF9kaXIsIHdvcmtfdHJlZSkgfHwKKwkJICAgIHN0cmNtcChnaXRfZGlyICsgc3RybGVuKHdvcmtfdHJlZSksICIvLmdpdCIpKSB7CisJCQlnaXRfY29uZmlnX3NldCgiY29yZS53b3JrdHJlZSIsIHdvcmtfdHJlZSk7CisJCX0KKwl9CisKKwlpZiAoIXJlaW5pdCkgeworCQkvKiBDaGVjayBpZiBzeW1saW5rIGlzIHN1cHBvcnRlZCBpbiB0aGUgd29yayB0cmVlICovCisJCXBhdGhbbGVuXSA9IDA7CisJCXN0cmNweShwYXRoICsgbGVuLCAidFhYWFhYWCIpOworCQlpZiAoIWNsb3NlKHhta3N0ZW1wKHBhdGgpKSAmJgorCQkgICAgIXVubGluayhwYXRoKSAmJgorCQkgICAgIXN5bWxpbmsoInRlc3RpbmciLCBwYXRoKSAmJgorCQkgICAgIWxzdGF0KHBhdGgsICZzdDEpICYmCisJCSAgICBTX0lTTE5LKHN0MS5zdF9tb2RlKSkKKwkJCXVubGluayhwYXRoKTsgLyogZ29vZCAqLworCQllbHNlCisJCQlnaXRfY29uZmlnX3NldCgiY29yZS5zeW1saW5rcyIsICJmYWxzZSIpOworCisJCS8qIENoZWNrIGlmIHRoZSBmaWxlc3lzdGVtIGlzIGNhc2UtaW5zZW5zaXRpdmUgKi8KKwkJcGF0aFtsZW5dID0gMDsKKwkJc3RyY3B5KHBhdGggKyBsZW4sICJDb05mSWciKTsKKwkJaWYgKCFhY2Nlc3MocGF0aCwgRl9PSykpCisJCQlnaXRfY29uZmlnX3NldCgiY29yZS5pZ25vcmVjYXNlIiwgInRydWUiKTsKKwkJcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbihwYXRoLCBsZW4pOworCX0KKworCXJldHVybiByZWluaXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9vYmplY3RfZGlyZWN0b3J5KHZvaWQpCit7CisJY29uc3QgY2hhciAqb2JqZWN0X2RpcmVjdG9yeSA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisJaW50IGxlbiA9IHN0cmxlbihvYmplY3RfZGlyZWN0b3J5KTsKKwljaGFyICpwYXRoID0geG1hbGxvYyhsZW4gKyA0MCk7CisKKwltZW1jcHkocGF0aCwgb2JqZWN0X2RpcmVjdG9yeSwgbGVuKTsKKworCXNhZmVfY3JlYXRlX2RpcihvYmplY3RfZGlyZWN0b3J5LCAxKTsKKwlzdHJjcHkocGF0aCtsZW4sICIvcGFjayIpOworCXNhZmVfY3JlYXRlX2RpcihwYXRoLCAxKTsKKwlzdHJjcHkocGF0aCtsZW4sICIvaW5mbyIpOworCXNhZmVfY3JlYXRlX2RpcihwYXRoLCAxKTsKKworCWZyZWUocGF0aCk7Cit9CisKK2ludCBzZXRfZ2l0X2Rpcl9pbml0KGNvbnN0IGNoYXIgKmdpdF9kaXIsIGNvbnN0IGNoYXIgKnJlYWxfZ2l0X2RpciwKKwkJICAgICBpbnQgZXhpc3Rfb2spCit7CisJaWYgKHJlYWxfZ2l0X2RpcikgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlpZiAoIWV4aXN0X29rICYmICFzdGF0KGdpdF9kaXIsICZzdCkpCisJCQlkaWUoXygiJXMgYWxyZWFkeSBleGlzdHMiKSwgZ2l0X2Rpcik7CisKKwkJaWYgKCFleGlzdF9vayAmJiAhc3RhdChyZWFsX2dpdF9kaXIsICZzdCkpCisJCQlkaWUoXygiJXMgYWxyZWFkeSBleGlzdHMiKSwgcmVhbF9naXRfZGlyKTsKKworCQkvKgorCQkgKiBtYWtlIHN1cmUgc3ltbGlua3MgYXJlIHJlc29sdmVkIGJlY2F1c2Ugd2UnbGwgYmUKKwkJICogbW92aW5nIHRoZSB0YXJnZXQgcmVwbyBsYXRlciBvbiBpbiBzZXBhcmF0ZV9naXRfZGlyKCkKKwkJICovCisJCWdpdF9saW5rID0geHN0cmR1cChyZWFsX3BhdGgoZ2l0X2RpcikpOworCX0KKwllbHNlIHsKKwkJcmVhbF9naXRfZGlyID0gcmVhbF9wYXRoKGdpdF9kaXIpOworCQlnaXRfbGluayA9IE5VTEw7CisJfQorCXNldF9naXRfZGlyKHJlYWxfcGF0aChyZWFsX2dpdF9kaXIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2VwYXJhdGVfZ2l0X2Rpcihjb25zdCBjaGFyICpnaXRfZGlyKQoreworCXN0cnVjdCBzdGF0IHN0OworCUZJTEUgKmZwOworCisJaWYgKCFzdGF0KGdpdF9saW5rLCAmc3QpKSB7CisJCWNvbnN0IGNoYXIgKnNyYzsKKworCQlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCXNyYyA9IHJlYWRfZ2l0ZmlsZShnaXRfbGluayk7CisJCWVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQlzcmMgPSBnaXRfbGluazsKKwkJZWxzZQorCQkJZGllKF8oInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIiksIChpbnQpc3Quc3RfbW9kZSk7CisKKwkJaWYgKHJlbmFtZShzcmMsIGdpdF9kaXIpKQorCQkJZGllX2Vycm5vKF8oInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIiksIHNyYywgZ2l0X2Rpcik7CisJfQorCisJZnAgPSBmb3BlbihnaXRfbGluaywgInciKTsKKwlpZiAoIWZwKQorCQlkaWUoXygiQ291bGQgbm90IGNyZWF0ZSBnaXQgbGluayAlcyIpLCBnaXRfbGluayk7CisJZnByaW50ZihmcCwgImdpdGRpcjogJXNcbiIsIGdpdF9kaXIpOworCWZjbG9zZShmcCk7Cit9CisKK2ludCBpbml0X2RiKGNvbnN0IGNoYXIgKnRlbXBsYXRlX2RpciwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCByZWluaXQ7CisJY29uc3QgY2hhciAqZ2l0X2RpciA9IGdldF9naXRfZGlyKCk7CisKKwlpZiAoZ2l0X2xpbmspCisJCXNlcGFyYXRlX2dpdF9kaXIoZ2l0X2Rpcik7CisKKwlzYWZlX2NyZWF0ZV9kaXIoZ2l0X2RpciwgMCk7CisKKwlpbml0X2lzX2JhcmVfcmVwb3NpdG9yeSA9IGlzX2JhcmVfcmVwb3NpdG9yeSgpOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSByZXBvc2l0b3J5IHZlcnNpb24gaXMgcmlnaHQuCisJICogTm90ZSB0aGF0IGEgbmV3bHkgY3JlYXRlZCByZXBvc2l0b3J5IGRvZXMgbm90IGhhdmUKKwkgKiBjb25maWcgZmlsZSwgc28gdGhpcyB3aWxsIG5vdCBmYWlsLiAgV2hhdCB3ZSBhcmUgY2F0Y2hpbmcKKwkgKiBpcyBhbiBhdHRlbXB0IHRvIHJlaW5pdGlhbGl6ZSBuZXcgcmVwb3NpdG9yeSB3aXRoIGFuIG9sZCB0b29sLgorCSAqLworCWNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0KCk7CisKKwlyZWluaXQgPSBjcmVhdGVfZGVmYXVsdF9maWxlcyh0ZW1wbGF0ZV9kaXIpOworCisJY3JlYXRlX29iamVjdF9kaXJlY3RvcnkoKTsKKworCWlmIChzaGFyZWRfcmVwb3NpdG9yeSkgeworCQljaGFyIGJ1ZlsxMF07CisJCS8qIFdlIGRvIG5vdCBzcGVsbCAiZ3JvdXAiIGFuZCBzdWNoLCBzbyB0aGF0CisJCSAqIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSByZWFkIGJ5IG9sZGVyIHZlcnNpb24KKwkJICogb2YgZ2l0LiBOb3RlLCB3ZSB1c2Ugb2N0YWwgbnVtYmVycyBmb3IgbmV3IHNoYXJlIG1vZGVzLAorCQkgKiBhbmQgY29tcGF0aWJpbGl0eSB2YWx1ZXMgZm9yIFBFUk1fR1JPVVAgYW5kCisJCSAqIFBFUk1fRVZFUllCT0RZLgorCQkgKi8KKwkJaWYgKHNoYXJlZF9yZXBvc2l0b3J5IDwgMCkKKwkJCS8qIGZvcmNlIHRvIHRoZSBtb2RlIHZhbHVlICovCisJCQlzcHJpbnRmKGJ1ZiwgIjAlbyIsIC1zaGFyZWRfcmVwb3NpdG9yeSk7CisJCWVsc2UgaWYgKHNoYXJlZF9yZXBvc2l0b3J5ID09IFBFUk1fR1JPVVApCisJCQlzcHJpbnRmKGJ1ZiwgIiVkIiwgT0xEX1BFUk1fR1JPVVApOworCQllbHNlIGlmIChzaGFyZWRfcmVwb3NpdG9yeSA9PSBQRVJNX0VWRVJZQk9EWSkKKwkJCXNwcmludGYoYnVmLCAiJWQiLCBPTERfUEVSTV9FVkVSWUJPRFkpOworCQllbHNlCisJCQlkaWUoIm9vcHMiKTsKKwkJZ2l0X2NvbmZpZ19zZXQoImNvcmUuc2hhcmVkcmVwb3NpdG9yeSIsIGJ1Zik7CisJCWdpdF9jb25maWdfc2V0KCJyZWNlaXZlLmRlbnlOb25GYXN0Zm9yd2FyZHMiLCAidHJ1ZSIpOworCX0KKworCWlmICghKGZsYWdzICYgSU5JVF9EQl9RVUlFVCkpIHsKKwkJaW50IGxlbiA9IHN0cmxlbihnaXRfZGlyKTsKKworCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisJCSAqIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorCQkgKiAiIiwgYW5kIHRoZSBsYXN0ICclcyVzJyBpcyB0aGUgdmVyYmF0aW0gZGlyZWN0b3J5IG5hbWUuCisJCSAqLworCQlwcmludGYoXygiJXMlcyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iKSwKKwkJICAgICAgIHJlaW5pdCA/IF8oIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciKSA6IF8oIkluaXRpYWxpemVkIGVtcHR5IiksCisJCSAgICAgICBzaGFyZWRfcmVwb3NpdG9yeSA/IF8oIiBzaGFyZWQiKSA6ICIiLAorCQkgICAgICAgZ2l0X2RpciwgbGVuICYmIGdpdF9kaXJbbGVuLTFdICE9ICcvJyA/ICIvIiA6ICIiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBndWVzc19yZXBvc2l0b3J5X3R5cGUoY29uc3QgY2hhciAqZ2l0X2RpcikKK3sKKwljaGFyIGN3ZFtQQVRIX01BWF07CisJY29uc3QgY2hhciAqc2xhc2g7CisKKwkvKgorCSAqICJHSVRfRElSPS4gZ2l0IGluaXQiIGlzIGFsd2F5cyBiYXJlLgorCSAqICJHSVRfRElSPWBwd2RgIGdpdCBpbml0IiB0b28uCisJICovCisJaWYgKCFzdHJjbXAoIi4iLCBnaXRfZGlyKSkKKwkJcmV0dXJuIDE7CisJaWYgKCFnZXRjd2QoY3dkLCBzaXplb2YoY3dkKSkpCisJCWRpZV9lcnJubyhfKCJjYW5ub3QgdGVsbCBjd2QiKSk7CisJaWYgKCFzdHJjbXAoZ2l0X2RpciwgY3dkKSkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiAiR0lUX0RJUj0uZ2l0IG9yIEdJVF9ESVI9c29tZXRoaW5nLy5naXQgaXMgdXN1YWxseSBub3QuCisJICovCisJaWYgKCFzdHJjbXAoZ2l0X2RpciwgIi5naXQiKSkKKwkJcmV0dXJuIDA7CisJc2xhc2ggPSBzdHJyY2hyKGdpdF9kaXIsICcvJyk7CisJaWYgKHNsYXNoICYmICFzdHJjbXAoc2xhc2gsICIvLmdpdCIpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogT3RoZXJ3aXNlIGl0IGlzIG9mdGVuIGJhcmUuICBBdCB0aGlzIHBvaW50CisJICogd2UgYXJlIGp1c3QgZ3Vlc3NpbmcuCisJICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2hhcmVkX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJKigoaW50ICopIG9wdC0+dmFsdWUpID0gKGFyZykgPyBnaXRfY29uZmlnX3Blcm0oImFyZyIsIGFyZykgOiBQRVJNX0dST1VQOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaW5pdF9kYl91c2FnZVtdID0geworCU5fKCJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tc2hhcmVkWz08cGVybWlzc2lvbnM+XV0gW2RpcmVjdG9yeV0iKSwKKwlOVUxMCit9OworCisvKgorICogSWYgeW91IHdhbnQgdG8sIHlvdSBjYW4gc2hhcmUgdGhlIERCIGFyZWEgd2l0aCBhbnkgbnVtYmVyIG9mIGJyYW5jaGVzLgorICogVGhhdCBoYXMgYWR2YW50YWdlczogeW91IGNhbiBzYXZlIHNwYWNlIGJ5IHNoYXJpbmcgYWxsIHRoZSBTSEExIG9iamVjdHMuCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgbWlnaHQganVzdCBtYWtlIGxvb2t1cCBzbG93ZXIgYW5kIG1lc3NpZXIuIFlvdQorICogYmUgdGhlIGp1ZGdlLiAgVGhlIGRlZmF1bHQgY2FzZSBpcyB0byBoYXZlIG9uZSBEQiBwZXIgbWFuYWdlZCBkaXJlY3RvcnkuCisgKi8KK2ludCBjbWRfaW5pdF9kYihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpnaXRfZGlyOworCWNvbnN0IGNoYXIgKnJlYWxfZ2l0X2RpciA9IE5VTEw7CisJY29uc3QgY2hhciAqd29ya190cmVlOworCWNvbnN0IGNoYXIgKnRlbXBsYXRlX2RpciA9IE5VTEw7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIGluaXRfZGJfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJ0ZW1wbGF0ZSIsICZ0ZW1wbGF0ZV9kaXIsIE5fKCJ0ZW1wbGF0ZS1kaXJlY3RvcnkiKSwKKwkJCQlOXygiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgImJhcmUiLCAmaXNfYmFyZV9yZXBvc2l0b3J5X2NmZywKKwkJCQlOXygiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IiksIDEpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInNoYXJlZCIsICZpbml0X3NoYXJlZF9yZXBvc2l0b3J5LAorCQkJTl8oInBlcm1pc3Npb25zIiksCisJCQlOXygic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIiksCisJCQlQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBzaGFyZWRfY2FsbGJhY2ssIDB9LAorCQlPUFRfQklUKCdxJywgInF1aWV0IiwgJmZsYWdzLCBOXygiYmUgcXVpZXQiKSwgSU5JVF9EQl9RVUlFVCksCisJCU9QVF9TVFJJTkcoMCwgInNlcGFyYXRlLWdpdC1kaXIiLCAmcmVhbF9naXRfZGlyLCBOXygiZ2l0ZGlyIiksCisJCQkgICBOXygic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgaW5pdF9kYl9vcHRpb25zLCBpbml0X2RiX3VzYWdlLCAwKTsKKworCWlmIChyZWFsX2dpdF9kaXIgJiYgIWlzX2Fic29sdXRlX3BhdGgocmVhbF9naXRfZGlyKSkKKwkJcmVhbF9naXRfZGlyID0geHN0cmR1cChyZWFsX3BhdGgocmVhbF9naXRfZGlyKSk7CisKKwlpZiAoYXJnYyA9PSAxKSB7CisJCWludCBta2Rpcl90cmllZCA9IDA7CisJcmV0cnk6CisJCWlmIChjaGRpcihhcmd2WzBdKSA8IDApIHsKKwkJCWlmICghbWtkaXJfdHJpZWQpIHsKKwkJCQlpbnQgc2F2ZWQ7CisJCQkJLyoKKwkJCQkgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmVuJ3QgcmVhZCBhbnkgY29uZmlndXJhdGlvbiwKKwkJCQkgKiBhbmQgd2Uga25vdyBzaGFyZWRfcmVwb3NpdG9yeSBzaG91bGQgYWx3YXlzIGJlIDA7CisJCQkJICogYnV0IGp1c3QgaW4gY2FzZSB3ZSBwbGF5IHNhZmUuCisJCQkJICovCisJCQkJc2F2ZWQgPSBzaGFyZWRfcmVwb3NpdG9yeTsKKwkJCQlzaGFyZWRfcmVwb3NpdG9yeSA9IDA7CisJCQkJc3dpdGNoIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGFyZ3ZbMF0pKSB7CisJCQkJY2FzZSAtMzoKKwkJCQkJZXJybm8gPSBFRVhJU1Q7CisJCQkJCS8qIGZhbGx0aHJ1ICovCisJCQkJY2FzZSAtMToKKwkJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBta2RpciAlcyIpLCBhcmd2WzBdKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNoYXJlZF9yZXBvc2l0b3J5ID0gc2F2ZWQ7CisJCQkJaWYgKG1rZGlyKGFyZ3ZbMF0sIDA3NzcpIDwgMCkKKwkJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBta2RpciAlcyIpLCBhcmd2WzBdKTsKKwkJCQlta2Rpcl90cmllZCA9IDE7CisJCQkJZ290byByZXRyeTsKKwkJCX0KKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY2hkaXIgdG8gJXMiKSwgYXJndlswXSk7CisJCX0KKwl9IGVsc2UgaWYgKDAgPCBhcmdjKSB7CisJCXVzYWdlKGluaXRfZGJfdXNhZ2VbMF0pOworCX0KKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9PSAxKSB7CisJCXN0YXRpYyBjaGFyIGdpdF9kaXJbUEFUSF9NQVgrMV07CisKKwkJc2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQsCisJCQlnZXRjd2QoZ2l0X2Rpciwgc2l6ZW9mKGdpdF9kaXIpKSwgYXJnYyA+IDApOworCX0KKworCWlmIChpbml0X3NoYXJlZF9yZXBvc2l0b3J5ICE9IC0xKQorCQlzaGFyZWRfcmVwb3NpdG9yeSA9IGluaXRfc2hhcmVkX3JlcG9zaXRvcnk7CisKKwkvKgorCSAqIEdJVF9XT1JLX1RSRUUgbWFrZXMgc2Vuc2Ugb25seSBpbiBjb25qdW5jdGlvbiB3aXRoIEdJVF9ESVIKKwkgKiB3aXRob3V0IC0tYmFyZS4gIENhdGNoIHRoZSBlcnJvciBlYXJseS4KKwkgKi8KKwlnaXRfZGlyID0gZ2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQpOworCXdvcmtfdHJlZSA9IGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKTsKKwlpZiAoKCFnaXRfZGlyIHx8IGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPT0gMSkgJiYgd29ya190cmVlKQorCQlkaWUoXygiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0ICIKKwkJCSAgInNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LWRpcj08ZGlyZWN0b3J5PikiKSwKKwkJICAgIEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsCisJCSAgICBHSVRfRElSX0VOVklST05NRU5UKTsKKworCS8qCisJICogU2V0IHVwIHRoZSBkZWZhdWx0IC5naXQgZGlyZWN0b3J5IGNvbnRlbnRzCisJICovCisJaWYgKCFnaXRfZGlyKQorCQlnaXRfZGlyID0gREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UOworCisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPCAwKQorCQlpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID0gZ3Vlc3NfcmVwb3NpdG9yeV90eXBlKGdpdF9kaXIpOworCisJaWYgKCFpc19iYXJlX3JlcG9zaXRvcnlfY2ZnKSB7CisJCWNvbnN0IGNoYXIgKmdpdF9kaXJfcGFyZW50ID0gc3RycmNocihnaXRfZGlyLCAnLycpOworCQlpZiAoZ2l0X2Rpcl9wYXJlbnQpIHsKKwkJCWNoYXIgKnJlbCA9IHhzdHJuZHVwKGdpdF9kaXIsIGdpdF9kaXJfcGFyZW50IC0gZ2l0X2Rpcik7CisJCQlnaXRfd29ya190cmVlX2NmZyA9IHhzdHJkdXAocmVhbF9wYXRoKHJlbCkpOworCQkJZnJlZShyZWwpOworCQl9CisJCWlmICghZ2l0X3dvcmtfdHJlZV9jZmcpIHsKKwkJCWdpdF93b3JrX3RyZWVfY2ZnID0geGNhbGxvYyhQQVRIX01BWCwgMSk7CisJCQlpZiAoIWdldGN3ZChnaXRfd29ya190cmVlX2NmZywgUEFUSF9NQVgpKQorCQkJCWRpZV9lcnJubyAoXygiQ2Fubm90IGFjY2VzcyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IikpOworCQl9CisJCWlmICh3b3JrX3RyZWUpCisJCQlzZXRfZ2l0X3dvcmtfdHJlZShyZWFsX3BhdGgod29ya190cmVlKSk7CisJCWVsc2UKKwkJCXNldF9naXRfd29ya190cmVlKGdpdF93b3JrX3RyZWVfY2ZnKTsKKwkJaWYgKGFjY2VzcyhnZXRfZ2l0X3dvcmtfdHJlZSgpLCBYX09LKSkKKwkJCWRpZV9lcnJubyAoXygiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIpLAorCQkJCSAgIGdldF9naXRfd29ya190cmVlKCkpOworCX0KKwllbHNlIHsKKwkJaWYgKHdvcmtfdHJlZSkKKwkJCXNldF9naXRfd29ya190cmVlKHJlYWxfcGF0aCh3b3JrX3RyZWUpKTsKKwl9CisKKwlzZXRfZ2l0X2Rpcl9pbml0KGdpdF9kaXIsIHJlYWxfZ2l0X2RpciwgMSk7CisKKwlyZXR1cm4gaW5pdF9kYih0ZW1wbGF0ZV9kaXIsIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbG9nLmMgYi9idWlsdGluL2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Y2Y0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2xvZy5jCkBAIC0wLDAgKzEsMTU0NiBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBsb2ciIGFuZCByZWxhdGVkIGNvbW1hbmRzIChzaG93LCB3aGF0Y2hhbmdlZCkKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYgTGludXMgVG9ydmFsZHMKKyAqCQkgMjAwNiBKdW5pbyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJyZWZsb2ctd2Fsay5oIgorI2luY2x1ZGUgInBhdGNoLWlkcy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic2hvcnRsb2cuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKy8qIFNldCBhIGRlZmF1bHQgZGF0ZS10aW1lIGZvcm1hdCBmb3IgZ2l0IGxvZyAoImxvZy5kYXRlIiBjb25maWcgdmFyaWFibGUpICovCitzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9kYXRlX21vZGUgPSBOVUxMOworCitzdGF0aWMgaW50IGRlZmF1bHRfYWJicmV2X2NvbW1pdDsKK3N0YXRpYyBpbnQgZGVmYXVsdF9zaG93X3Jvb3QgPSAxOworc3RhdGljIGludCBkZWNvcmF0aW9uX3N0eWxlOworc3RhdGljIGludCBkZWNvcmF0aW9uX2dpdmVuOworc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9wYXRjaF9zdWJqZWN0X3ByZWZpeCA9ICJQQVRDSCI7CitzdGF0aWMgY29uc3QgY2hhciAqZm10X3ByZXR0eTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2xvZ191c2FnZVtdID0geworCU5fKCJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8c2luY2U+Li48dW50aWw+XSBbWy0tXSA8cGF0aD4uLi5dXG4iKQorCU5fKCIgICBvcjogZ2l0IHNob3cgW29wdGlvbnNdIDxvYmplY3Q+Li4uIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBwYXJzZV9kZWNvcmF0aW9uX3N0eWxlKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3dpdGNoIChnaXRfY29uZmlnX21heWJlX2Jvb2wodmFyLCB2YWx1ZSkpIHsKKwljYXNlIDE6CisJCXJldHVybiBERUNPUkFURV9TSE9SVF9SRUZTOworCWNhc2UgMDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmICghc3RyY21wKHZhbHVlLCAiZnVsbCIpKQorCQlyZXR1cm4gREVDT1JBVEVfRlVMTF9SRUZTOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJzaG9ydCIpKQorCQlyZXR1cm4gREVDT1JBVEVfU0hPUlRfUkVGUzsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZGVjb3JhdGVfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCWRlY29yYXRpb25fc3R5bGUgPSAwOworCWVsc2UgaWYgKGFyZykKKwkJZGVjb3JhdGlvbl9zdHlsZSA9IHBhcnNlX2RlY29yYXRpb25fc3R5bGUoImNvbW1hbmQgbGluZSIsIGFyZyk7CisJZWxzZQorCQlkZWNvcmF0aW9uX3N0eWxlID0gREVDT1JBVEVfU0hPUlRfUkVGUzsKKworCWlmIChkZWNvcmF0aW9uX3N0eWxlIDwgMCkKKwkJZGllKCJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIsIGFyZyk7CisKKwlkZWNvcmF0aW9uX2dpdmVuID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbWRfbG9nX2luaXRfZGVmYXVsdHMoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJaWYgKGZtdF9wcmV0dHkpCisJCWdldF9jb21taXRfZm9ybWF0KGZtdF9wcmV0dHksIHJldik7CisJcmV2LT52ZXJib3NlX2hlYWRlciA9IDE7CisJRElGRl9PUFRfU0VUKCZyZXYtPmRpZmZvcHQsIFJFQ1VSU0lWRSk7CisJcmV2LT5kaWZmb3B0LnN0YXRfd2lkdGggPSAtMTsgLyogdXNlIGZ1bGwgdGVybWluYWwgd2lkdGggKi8KKwlyZXYtPmRpZmZvcHQuc3RhdF9ncmFwaF93aWR0aCA9IC0xOyAvKiByZXNwZWN0IHN0YXRHcmFwaFdpZHRoIGNvbmZpZyAqLworCXJldi0+YWJicmV2X2NvbW1pdCA9IGRlZmF1bHRfYWJicmV2X2NvbW1pdDsKKwlyZXYtPnNob3dfcm9vdF9kaWZmID0gZGVmYXVsdF9zaG93X3Jvb3Q7CisJcmV2LT5zdWJqZWN0X3ByZWZpeCA9IGZtdF9wYXRjaF9zdWJqZWN0X3ByZWZpeDsKKwlESUZGX09QVF9TRVQoJnJldi0+ZGlmZm9wdCwgQUxMT1dfVEVYVENPTlYpOworCisJaWYgKGRlZmF1bHRfZGF0ZV9tb2RlKQorCQlyZXYtPmRhdGVfbW9kZSA9IHBhcnNlX2RhdGVfZm9ybWF0KGRlZmF1bHRfZGF0ZV9tb2RlKTsKK30KKworc3RhdGljIHZvaWQgY21kX2xvZ19pbml0X2ZpbmlzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqb3B0KQoreworCXN0cnVjdCB1c2VyZm9ybWF0X3dhbnQgdzsKKwlpbnQgcXVpZXQgPSAwLCBzb3VyY2UgPSAwOworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBidWlsdGluX2xvZ19vcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKDAsICJxdWlldCIsICZxdWlldCwgTl8oInN1cHByZXNzIGRpZmYgb3V0cHV0IikpLAorCQlPUFRfQk9PTEVBTigwLCAic291cmNlIiwgJnNvdXJjZSwgTl8oInNob3cgc291cmNlIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImRlY29yYXRlIiwgTlVMTCwgTlVMTCwgTl8oImRlY29yYXRlIG9wdGlvbnMiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBkZWNvcmF0ZV9jYWxsYmFja30sCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQkgICAgIGJ1aWx0aW5fbG9nX29wdGlvbnMsIGJ1aWx0aW5fbG9nX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IFBBUlNFX09QVF9LRUVQX1VOS05PV04gfAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisKKwlpZiAocXVpZXQpCisJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsIHJldiwgb3B0KTsKKworCS8qIEFueSBhcmd1bWVudHMgYXQgdGhpcyBwb2ludCBhcmUgbm90IHJlY29nbml6ZWQgKi8KKwlpZiAoYXJnYyA+IDEpCisJCWRpZSgidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIsIGFyZ3ZbMV0pOworCisJbWVtc2V0KCZ3LCAwLCBzaXplb2YodykpOworCXVzZXJmb3JtYXRfZmluZF9yZXF1aXJlbWVudHMoTlVMTCwgJncpOworCisJaWYgKCFyZXYtPnNob3dfbm90ZXNfZ2l2ZW4gJiYgKCFyZXYtPnByZXR0eV9naXZlbiB8fCB3Lm5vdGVzKSkKKwkJcmV2LT5zaG93X25vdGVzID0gMTsKKwlpZiAocmV2LT5zaG93X25vdGVzKQorCQlpbml0X2Rpc3BsYXlfbm90ZXMoJnJldi0+bm90ZXNfb3B0KTsKKworCWlmIChyZXYtPmRpZmZvcHQucGlja2F4ZSB8fCByZXYtPmRpZmZvcHQuZmlsdGVyKQorCQlyZXYtPmFsd2F5c19zaG93X2hlYWRlciA9IDA7CisJaWYgKERJRkZfT1BUX1RTVCgmcmV2LT5kaWZmb3B0LCBGT0xMT1dfUkVOQU1FUykpIHsKKwkJcmV2LT5hbHdheXNfc2hvd19oZWFkZXIgPSAwOworCQlpZiAocmV2LT5kaWZmb3B0LnBhdGhzcGVjLm5yICE9IDEpCisJCQl1c2FnZSgiZ2l0IGxvZ3MgY2FuIG9ubHkgZm9sbG93IHJlbmFtZXMgb24gb25lIHBhdGhuYW1lIGF0IGEgdGltZSIpOworCX0KKworCWlmIChzb3VyY2UpCisJCXJldi0+c2hvd19zb3VyY2UgPSAxOworCisJaWYgKHJldi0+cHJldHR5X2dpdmVuICYmIHJldi0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9SQVcpIHsKKwkJLyoKKwkJICogImxvZyAtLXByZXR0eT1yYXciIGlzIHNwZWNpYWw7IGlnbm9yZSBVSSBvcmllbnRlZAorCQkgKiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzdWNoIGFzIGRlY29yYXRpb24uCisJCSAqLworCQlpZiAoIWRlY29yYXRpb25fZ2l2ZW4pCisJCQlkZWNvcmF0aW9uX3N0eWxlID0gMDsKKwkJaWYgKCFyZXYtPmFiYnJldl9jb21taXRfZ2l2ZW4pCisJCQlyZXYtPmFiYnJldl9jb21taXQgPSAwOworCX0KKworCWlmIChkZWNvcmF0aW9uX3N0eWxlKSB7CisJCXJldi0+c2hvd19kZWNvcmF0aW9ucyA9IDE7CisJCWxvYWRfcmVmX2RlY29yYXRpb25zKGRlY29yYXRpb25fc3R5bGUpOworCX0KKwlzZXR1cF9wYWdlcigpOworfQorCitzdGF0aWMgdm9pZCBjbWRfbG9nX2luaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgKm9wdCkKK3sKKwljbWRfbG9nX2luaXRfZGVmYXVsdHMocmV2KTsKKwljbWRfbG9nX2luaXRfZmluaXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCwgcmV2LCBvcHQpOworfQorCisvKgorICogVGhpcyBnaXZlcyBhIHJvdWdoIGVzdGltYXRlIGZvciBob3cgbWFueSBjb21taXRzIHdlCisgKiB3aWxsIHByaW50IG91dCBpbiB0aGUgbGlzdC4KKyAqLworc3RhdGljIGludCBlc3RpbWF0ZV9jb21taXRfY291bnQoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlpbnQgbiA9IDA7CisKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFnczsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCWlmICghKGZsYWdzICYgKFRSRUVTQU1FIHwgVU5JTlRFUkVTVElORykpKQorCQkJbisrOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgc2hvd19lYXJseV9oZWFkZXIoc3RydWN0IHJldl9pbmZvICpyZXYsIGNvbnN0IGNoYXIgKnN0YWdlLCBpbnQgbnIpCit7CisJaWYgKHJldi0+c2hvd25fb25lKSB7CisJCXJldi0+c2hvd25fb25lID0gMDsKKwkJaWYgKHJldi0+Y29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9PTkVMSU5FKQorCQkJcHV0Y2hhcihyZXYtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7CisJfQorCXByaW50ZihfKCJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iKSwgbnIsIHN0YWdlKTsKK30KKworc3RhdGljIHN0cnVjdCBpdGltZXJ2YWwgZWFybHlfb3V0cHV0X3RpbWVyOworCitzdGF0aWMgdm9pZCBsb2dfc2hvd19lYXJseShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaSA9IHJldnMtPmVhcmx5X291dHB1dDsKKwlpbnQgc2hvd19oZWFkZXIgPSAxOworCisJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmbGlzdCwgcmV2cy0+bGlmbyk7CisJd2hpbGUgKGxpc3QgJiYgaSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQlzd2l0Y2ggKHNpbXBsaWZ5X2NvbW1pdChyZXZzLCBjb21taXQpKSB7CisJCWNhc2UgY29tbWl0X3Nob3c6CisJCQlpZiAoc2hvd19oZWFkZXIpIHsKKwkJCQlpbnQgbiA9IGVzdGltYXRlX2NvbW1pdF9jb3VudChyZXZzLCBsaXN0KTsKKwkJCQlzaG93X2Vhcmx5X2hlYWRlcihyZXZzLCAiaW5jb21wbGV0ZSIsIG4pOworCQkJCXNob3dfaGVhZGVyID0gMDsKKwkJCX0KKwkJCWxvZ190cmVlX2NvbW1pdChyZXZzLCBjb21taXQpOworCQkJaS0tOworCQkJYnJlYWs7CisJCWNhc2UgY29tbWl0X2lnbm9yZToKKwkJCWJyZWFrOworCQljYXNlIGNvbW1pdF9lcnJvcjoKKwkJCXJldHVybjsKKwkJfQorCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9CisKKwkvKiBEaWQgd2UgYWxyZWFkeSBnZXQgZW5vdWdoIGNvbW1pdHMgZm9yIHRoZSBlYXJseSBvdXRwdXQ/ICovCisJaWYgKCFpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIC4uaWYgbm8sIHRoZW4gcmVwZWF0IGl0IHR3aWNlIGEgc2Vjb25kIHVudGlsIHdlCisJICogZG8uCisJICoKKwkgKiBOT1RFISBXZSBkb24ndCB1c2UgIml0X2ludGVydmFsIiwgYmVjYXVzZSBpZiB0aGUKKwkgKiByZWFkZXIgaXNuJ3QgbGlzdGVuaW5nLCB3ZSB3YW50IG91ciBvdXRwdXQgdG8gYmUKKwkgKiB0aHJvdHRsZWQgYnkgdGhlIHdyaXRpbmcsIGFuZCBub3QgaGF2ZSB0aGUgdGltZXIKKwkgKiB0cmlnZ2VyIGV2ZXJ5IHNlY29uZCBldmVuIGlmIHdlJ3JlIGJsb2NrZWQgb24gYQorCSAqIHJlYWRlciEKKwkgKi8KKwllYXJseV9vdXRwdXRfdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKKwllYXJseV9vdXRwdXRfdGltZXIuaXRfdmFsdWUudHZfdXNlYyA9IDUwMDAwMDsKKwlzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZlYXJseV9vdXRwdXRfdGltZXIsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBlYXJseV9vdXRwdXQoaW50IHNpZ25hbCkKK3sKKwlzaG93X2Vhcmx5X291dHB1dCA9IGxvZ19zaG93X2Vhcmx5OworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9lYXJseV9vdXRwdXQoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKKworCS8qCisJICogU2V0IHVwIHRoZSBzaWduYWwgaGFuZGxlciwgbWluaW1hbGx5IGludHJ1c2l2ZWx5OgorCSAqIHdlIG9ubHkgc2V0IGEgc2luZ2xlIHZvbGF0aWxlIGludGVnZXIgd29yZCAobm90CisJICogdXNpbmcgc2lnYXRvbWljX3QgLSB0cnlpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkKKwkgKiBzeXN0ZW0gZGVwZW5kZW5jaWVzIGFuZCBoZWFkZXJzKSwgYW5kIHVzaW5nCisJICogU0FfUkVTVEFSVC4KKwkgKi8KKwltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKKwlzYS5zYV9oYW5kbGVyID0gZWFybHlfb3V0cHV0OworCXNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKwlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisJc2lnYWN0aW9uKFNJR0FMUk0sICZzYSwgTlVMTCk7CisKKwkvKgorCSAqIElmIHdlIGNhbiBnZXQgdGhlIHdob2xlIG91dHB1dCBpbiBsZXNzIHRoYW4gYQorCSAqIHRlbnRoIG9mIGEgc2Vjb25kLCBkb24ndCBldmVuIGJvdGhlciBkb2luZyB0aGUKKwkgKiBlYXJseS1vdXRwdXQgdGhpbmcuLgorCSAqCisJICogVGhpcyBpcyBhIG9uZS10aW1lLW9ubHkgdHJpZ2dlci4KKwkgKi8KKwllYXJseV9vdXRwdXRfdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKKwllYXJseV9vdXRwdXRfdGltZXIuaXRfdmFsdWUudHZfdXNlYyA9IDEwMDAwMDsKKwlzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZlYXJseV9vdXRwdXRfdGltZXIsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfZWFybHlfb3V0cHV0KHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWludCBuID0gZXN0aW1hdGVfY29tbWl0X2NvdW50KHJldiwgcmV2LT5jb21taXRzKTsKKwlzaWduYWwoU0lHQUxSTSwgU0lHX0lHTik7CisJc2hvd19lYXJseV9oZWFkZXIocmV2LCAiZG9uZSIsIG4pOworfQorCitzdGF0aWMgaW50IGNtZF9sb2dfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJaW50IHNhdmVkX25ybCA9IDA7CisJaW50IHNhdmVkX2RjY3RjID0gMDsKKworCWlmIChyZXYtPmVhcmx5X291dHB1dCkKKwkJc2V0dXBfZWFybHlfb3V0cHV0KHJldik7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCWlmIChyZXYtPmVhcmx5X291dHB1dCkKKwkJZmluaXNoX2Vhcmx5X291dHB1dChyZXYpOworCisJLyoKKwkgKiBGb3IgLS1jaGVjayBhbmQgLS1leGl0LWNvZGUsIHRoZSBleGl0IGNvZGUgaXMgYmFzZWQgb24gQ0hFQ0tfRkFJTEVECisJICogYW5kIEhBU19DSEFOR0VTIGJlaW5nIGFjY3VtdWxhdGVkIGluIHJldi0+ZGlmZm9wdCwgc28gYmUgY2FyZWZ1bCB0bworCSAqIHJldGFpbiB0aGF0IHN0YXRlIGluZm9ybWF0aW9uIGlmIHJlcGxhY2luZyByZXYtPmRpZmZvcHQgaW4gdGhpcyBsb29wCisJICovCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2KSkgIT0gTlVMTCkgeworCQlpZiAoIWxvZ190cmVlX2NvbW1pdChyZXYsIGNvbW1pdCkgJiYKKwkJICAgIHJldi0+bWF4X2NvdW50ID49IDApCisJCQkvKgorCQkJICogV2UgZGVjcmVtZW50ZWQgbWF4X2NvdW50IGluIGdldF9yZXZpc2lvbiwKKwkJCSAqIGJ1dCB3ZSBkaWRuJ3QgYWN0dWFsbHkgc2hvdyB0aGUgY29tbWl0LgorCQkJICovCisJCQlyZXYtPm1heF9jb3VudCsrOworCQlpZiAoIXJldi0+cmVmbG9nX2luZm8pIHsKKwkJCS8qIHdlIGFsbG93IGN5Y2xlcyBpbiByZWZsb2cgYW5jZXN0cnkgKi8KKwkJCWZyZWUoY29tbWl0LT5idWZmZXIpOworCQkJY29tbWl0LT5idWZmZXIgPSBOVUxMOworCQl9CisJCWZyZWVfY29tbWl0X2xpc3QoY29tbWl0LT5wYXJlbnRzKTsKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwkJaWYgKHNhdmVkX25ybCA8IHJldi0+ZGlmZm9wdC5uZWVkZWRfcmVuYW1lX2xpbWl0KQorCQkJc2F2ZWRfbnJsID0gcmV2LT5kaWZmb3B0Lm5lZWRlZF9yZW5hbWVfbGltaXQ7CisJCWlmIChyZXYtPmRpZmZvcHQuZGVncmFkZWRfY2NfdG9fYykKKwkJCXNhdmVkX2RjY3RjID0gMTsKKwl9CisJcmV2LT5kaWZmb3B0LmRlZ3JhZGVkX2NjX3RvX2MgPSBzYXZlZF9kY2N0YzsKKwlyZXYtPmRpZmZvcHQubmVlZGVkX3JlbmFtZV9saW1pdCA9IHNhdmVkX25ybDsKKworCWlmIChyZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NIRUNLRElGRiAmJgorCSAgICBESUZGX09QVF9UU1QoJnJldi0+ZGlmZm9wdCwgQ0hFQ0tfRkFJTEVEKSkgeworCQlyZXR1cm4gMDI7CisJfQorCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXYtPmRpZmZvcHQsIDApOworfQorCitzdGF0aWMgaW50IGdpdF9sb2dfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5wcmV0dHkiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZmbXRfcHJldHR5LCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuc3ViamVjdHByZWZpeCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmZtdF9wYXRjaF9zdWJqZWN0X3ByZWZpeCwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAibG9nLmFiYnJldmNvbW1pdCIpKSB7CisJCWRlZmF1bHRfYWJicmV2X2NvbW1pdCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImxvZy5kYXRlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZGVmYXVsdF9kYXRlX21vZGUsIHZhciwgdmFsdWUpOworCWlmICghc3RyY21wKHZhciwgImxvZy5kZWNvcmF0ZSIpKSB7CisJCWRlY29yYXRpb25fc3R5bGUgPSBwYXJzZV9kZWNvcmF0aW9uX3N0eWxlKHZhciwgdmFsdWUpOworCQlpZiAoZGVjb3JhdGlvbl9zdHlsZSA8IDApCisJCQlkZWNvcmF0aW9uX3N0eWxlID0gMDsgLyogbWF5YmUgd2Fybj8gKi8KKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImxvZy5zaG93cm9vdCIpKSB7CisJCWRlZmF1bHRfc2hvd19yb290ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFwcmVmaXhjbXAodmFyLCAiY29sb3IuZGVjb3JhdGUuIikpCisJCXJldHVybiBwYXJzZV9kZWNvcmF0ZV9jb2xvcl9jb25maWcodmFyLCAxNSwgdmFsdWUpOworCisJcmV0dXJuIGdpdF9kaWZmX3VpX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK2ludCBjbWRfd2hhdGNoYW5nZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IG9wdDsKKworCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcsIE5VTEwpOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlyZXYuZGlmZiA9IDE7CisJcmV2LnNpbXBsaWZ5X2hpc3RvcnkgPSAwOworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0LmRlZiA9ICJIRUFEIjsKKwlvcHQucmV2YXJnX29wdCA9IFJFVkFSR19DT01NSVRUSVNIOworCWNtZF9sb2dfaW5pdChhcmdjLCBhcmd2LCBwcmVmaXgsICZyZXYsICZvcHQpOworCWlmICghcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKKwlyZXR1cm4gY21kX2xvZ193YWxrKCZyZXYpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3RhZ2dlcihjaGFyICpidWYsIGludCBsZW4sIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBwID0gezB9OworCisJcHAuZm10ID0gcmV2LT5jb21taXRfZm9ybWF0OworCXBwLmRhdGVfbW9kZSA9IHJldi0+ZGF0ZV9tb2RlOworCXBwX3VzZXJfaW5mbygmcHAsICJUYWdnZXIiLCAmb3V0LCBidWYsIGdldF9sb2dfb3V0cHV0X2VuY29kaW5nKCkpOworCXByaW50ZigiJXMiLCBvdXQuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKK30KKworc3RhdGljIGludCBzaG93X2Jsb2Jfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWZmbHVzaChzdGRvdXQpOworCXJldHVybiBzdHJlYW1fYmxvYl90b19mZCgxLCBzaGExLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludCBzaG93X3RhZ19vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWludCBvZmZzZXQgPSAwOworCisJaWYgKCFidWYpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiKSwgc2hhMV90b19oZXgoc2hhMSkpOworCisJYXNzZXJ0KHR5cGUgPT0gT0JKX1RBRyk7CisJd2hpbGUgKG9mZnNldCA8IHNpemUgJiYgYnVmW29mZnNldF0gIT0gJ1xuJykgeworCQlpbnQgbmV3X29mZnNldCA9IG9mZnNldCArIDE7CisJCXdoaWxlIChuZXdfb2Zmc2V0IDwgc2l6ZSAmJiBidWZbbmV3X29mZnNldCsrXSAhPSAnXG4nKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCWlmICghcHJlZml4Y21wKGJ1ZiArIG9mZnNldCwgInRhZ2dlciAiKSkKKwkJCXNob3dfdGFnZ2VyKGJ1ZiArIG9mZnNldCArIDcsCisJCQkJICAgIG5ld19vZmZzZXQgLSBvZmZzZXQgLSA3LCByZXYpOworCQlvZmZzZXQgPSBuZXdfb2Zmc2V0OworCX0KKworCWlmIChvZmZzZXQgPCBzaXplKQorCQlmd3JpdGUoYnVmICsgb2Zmc2V0LCBzaXplIC0gb2Zmc2V0LCAxLCBzdGRvdXQpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X3RyZWVfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCWNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQljb25zdCBjaGFyICpwYXRobmFtZSwgdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLCB2b2lkICpjb250ZXh0KQoreworCXByaW50ZigiJXMlc1xuIiwgcGF0aG5hbWUsIFNfSVNESVIobW9kZSkgPyAiLyIgOiAiIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcmV2X3R3ZWFrX3JldihzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqb3B0KQoreworCWlmIChyZXYtPmlnbm9yZV9tZXJnZXMpIHsKKwkJLyogVGhlcmUgd2FzIG5vICItbSIgb24gdGhlIGNvbW1hbmQgbGluZSAqLworCQlyZXYtPmlnbm9yZV9tZXJnZXMgPSAwOworCQlpZiAoIXJldi0+Zmlyc3RfcGFyZW50X29ubHkgJiYgIXJldi0+Y29tYmluZV9tZXJnZXMpIHsKKwkJCS8qIE5vICItLWZpcnN0LXBhcmVudCIsICItYyIsIG5vciAiLS1jYyIgKi8KKwkJCXJldi0+Y29tYmluZV9tZXJnZXMgPSAxOworCQkJcmV2LT5kZW5zZV9jb21iaW5lZF9tZXJnZXMgPSAxOworCQl9CisJfQorCWlmICghcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCisJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7Cit9CisKK2ludCBjbWRfc2hvdyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm9iamVjdHM7CisJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQ7CisJc3RydWN0IHBhdGhzcGVjIG1hdGNoX2FsbDsKKwlpbnQgaSwgY291bnQsIHJldCA9IDA7CisKKwlnaXRfY29uZmlnKGdpdF9sb2dfY29uZmlnLCBOVUxMKTsKKworCWluaXRfcGF0aHNwZWMoJm1hdGNoX2FsbCwgTlVMTCk7CisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlyZXYuZGlmZiA9IDE7CisJcmV2LmFsd2F5c19zaG93X2hlYWRlciA9IDE7CisJcmV2Lm5vX3dhbGsgPSBSRVZJU0lPTl9XQUxLX05PX1dBTEtfU09SVEVEOworCXJldi5kaWZmb3B0LnN0YXRfd2lkdGggPSAtMTsgCS8qIFNjYWxlIHRvIHJlYWwgdGVybWluYWwgc2l6ZSAqLworCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gIkhFQUQiOworCW9wdC50d2VhayA9IHNob3dfcmV2X3R3ZWFrX3JldjsKKwljbWRfbG9nX2luaXQoYXJnYywgYXJndiwgcHJlZml4LCAmcmV2LCAmb3B0KTsKKworCWlmICghcmV2Lm5vX3dhbGspCisJCXJldHVybiBjbWRfbG9nX3dhbGsoJnJldik7CisKKwljb3VudCA9IHJldi5wZW5kaW5nLm5yOworCW9iamVjdHMgPSByZXYucGVuZGluZy5vYmplY3RzOworCWZvciAoaSA9IDA7IGkgPCBjb3VudCAmJiAhcmV0OyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IG9iamVjdHNbaV0uaXRlbTsKKwkJY29uc3QgY2hhciAqbmFtZSA9IG9iamVjdHNbaV0ubmFtZTsKKwkJc3dpdGNoIChvLT50eXBlKSB7CisJCWNhc2UgT0JKX0JMT0I6CisJCQlyZXQgPSBzaG93X2Jsb2Jfb2JqZWN0KG8tPnNoYTEsIE5VTEwpOworCQkJYnJlYWs7CisJCWNhc2UgT0JKX1RBRzogeworCQkJc3RydWN0IHRhZyAqdCA9IChzdHJ1Y3QgdGFnICopbzsKKworCQkJaWYgKHJldi5zaG93bl9vbmUpCisJCQkJcHV0Y2hhcignXG4nKTsKKwkJCXByaW50ZigiJXN0YWcgJXMlc1xuIiwKKwkJCQkJZGlmZl9nZXRfY29sb3Jfb3B0KCZyZXYuZGlmZm9wdCwgRElGRl9DT01NSVQpLAorCQkJCQl0LT50YWcsCisJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfUkVTRVQpKTsKKwkJCXJldCA9IHNob3dfdGFnX29iamVjdChvLT5zaGExLCAmcmV2KTsKKwkJCXJldi5zaG93bl9vbmUgPSAxOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJCW8gPSBwYXJzZV9vYmplY3QodC0+dGFnZ2VkLT5zaGExKTsKKwkJCWlmICghbykKKwkJCQlyZXQgPSBlcnJvcihfKCJDb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiKSwKKwkJCQkJICAgIHNoYTFfdG9faGV4KHQtPnRhZ2dlZC0+c2hhMSkpOworCQkJb2JqZWN0c1tpXS5pdGVtID0gbzsKKwkJCWktLTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgT0JKX1RSRUU6CisJCQlpZiAocmV2LnNob3duX29uZSkKKwkJCQlwdXRjaGFyKCdcbicpOworCQkJcHJpbnRmKCIlc3RyZWUgJXMlc1xuXG4iLAorCQkJCQlkaWZmX2dldF9jb2xvcl9vcHQoJnJldi5kaWZmb3B0LCBESUZGX0NPTU1JVCksCisJCQkJCW5hbWUsCisJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfUkVTRVQpKTsKKwkJCXJlYWRfdHJlZV9yZWN1cnNpdmUoKHN0cnVjdCB0cmVlICopbywgIiIsIDAsIDAsICZtYXRjaF9hbGwsCisJCQkJCXNob3dfdHJlZV9vYmplY3QsIE5VTEwpOworCQkJcmV2LnNob3duX29uZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPQkpfQ09NTUlUOgorCQkJcmV2LnBlbmRpbmcubnIgPSByZXYucGVuZGluZy5hbGxvYyA9IDA7CisJCQlyZXYucGVuZGluZy5vYmplY3RzID0gTlVMTDsKKwkJCWFkZF9vYmplY3RfYXJyYXkobywgbmFtZSwgJnJldi5wZW5kaW5nKTsKKwkJCXJldCA9IGNtZF9sb2dfd2FsaygmcmV2KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gZXJyb3IoXygiVW5rbm93biB0eXBlOiAlZCIpLCBvLT50eXBlKTsKKwkJfQorCX0KKwlmcmVlKG9iamVjdHMpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gImdpdCBsb2cgLWcgLS1hYmJyZXYtY29tbWl0IC0tcHJldHR5PW9uZWxpbmUiCisgKi8KK2ludCBjbWRfbG9nX3JlZmxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCisJZ2l0X2NvbmZpZyhnaXRfbG9nX2NvbmZpZywgTlVMTCk7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCWluaXRfcmVmbG9nX3dhbGsoJnJldi5yZWZsb2dfaW5mbyk7CisJcmV2LnZlcmJvc2VfaGVhZGVyID0gMTsKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW9wdC5kZWYgPSAiSEVBRCI7CisJY21kX2xvZ19pbml0X2RlZmF1bHRzKCZyZXYpOworCXJldi5hYmJyZXZfY29tbWl0ID0gMTsKKwlyZXYuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX09ORUxJTkU7CisJcmV2LnVzZV90ZXJtaW5hdG9yID0gMTsKKwlyZXYuYWx3YXlzX3Nob3dfaGVhZGVyID0gMTsKKwljbWRfbG9nX2luaXRfZmluaXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnJldiwgJm9wdCk7CisKKwlyZXR1cm4gY21kX2xvZ193YWxrKCZyZXYpOworfQorCitpbnQgY21kX2xvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCisJZ2l0X2NvbmZpZyhnaXRfbG9nX2NvbmZpZywgTlVMTCk7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCXJldi5hbHdheXNfc2hvd19oZWFkZXIgPSAxOworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0LmRlZiA9ICJIRUFEIjsKKwlvcHQucmV2YXJnX29wdCA9IFJFVkFSR19DT01NSVRUSVNIOworCWNtZF9sb2dfaW5pdChhcmdjLCBhcmd2LCBwcmVmaXgsICZyZXYsICZvcHQpOworCXJldHVybiBjbWRfbG9nX3dhbGsoJnJldik7Cit9CisKKy8qIGZvcm1hdC1wYXRjaCAqLworCitzdGF0aWMgY29uc3QgY2hhciAqZm10X3BhdGNoX3N1ZmZpeCA9ICIucGF0Y2giOworc3RhdGljIGludCBudW1iZXJlZCA9IDA7CitzdGF0aWMgaW50IGF1dG9fbnVtYmVyID0gMTsKKworc3RhdGljIGNoYXIgKmRlZmF1bHRfYXR0YWNoID0gTlVMTDsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBleHRyYV9oZHI7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGV4dHJhX3RvOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBleHRyYV9jYzsKKworc3RhdGljIHZvaWQgYWRkX2hlYWRlcihjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgbGVuID0gc3RybGVuKHZhbHVlKTsKKwl3aGlsZSAobGVuICYmIHZhbHVlW2xlbiAtIDFdID09ICdcbicpCisJCWxlbi0tOworCisJaWYgKCFzdHJuY2FzZWNtcCh2YWx1ZSwgInRvOiAiLCA0KSkgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZleHRyYV90bywgdmFsdWUgKyA0KTsKKwkJbGVuIC09IDQ7CisJfSBlbHNlIGlmICghc3RybmNhc2VjbXAodmFsdWUsICJjYzogIiwgNCkpIHsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfY2MsIHZhbHVlICsgNCk7CisJCWxlbiAtPSA0OworCX0gZWxzZSB7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJmV4dHJhX2hkciwgdmFsdWUpOworCX0KKworCWl0ZW0tPnN0cmluZ1tsZW5dID0gJ1wwJzsKK30KKworI2RlZmluZSBUSFJFQURfU0hBTExPVyAxCisjZGVmaW5lIFRIUkVBRF9ERUVQIDIKK3N0YXRpYyBpbnQgdGhyZWFkOworc3RhdGljIGludCBkb19zaWdub2ZmOworc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKKworc3RhdGljIGludCBnaXRfZm9ybWF0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuaGVhZGVycyIpKSB7CisJCWlmICghdmFsdWUpCisJCQlkaWUoXygiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIpKTsKKwkJYWRkX2hlYWRlcih2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuc3VmZml4IikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZm10X3BhdGNoX3N1ZmZpeCwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnRvIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmV4dHJhX3RvLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuY2MiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfY2MsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYuY29sb3IiKSB8fCAhc3RyY21wKHZhciwgImNvbG9yLmRpZmYiKSB8fAorCSAgICAhc3RyY21wKHZhciwgImNvbG9yLnVpIikpIHsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5udW1iZXJlZCIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImF1dG8iKSkgeworCQkJYXV0b19udW1iZXIgPSAxOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbnVtYmVyZWQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCWF1dG9fbnVtYmVyID0gYXV0b19udW1iZXIgJiYgbnVtYmVyZWQ7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuYXR0YWNoIikpIHsKKwkJaWYgKHZhbHVlICYmICp2YWx1ZSkKKwkJCWRlZmF1bHRfYXR0YWNoID0geHN0cmR1cCh2YWx1ZSk7CisJCWVsc2UKKwkJCWRlZmF1bHRfYXR0YWNoID0geHN0cmR1cChnaXRfdmVyc2lvbl9zdHJpbmcpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnRocmVhZCIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImRlZXAiKSkgeworCQkJdGhyZWFkID0gVEhSRUFEX0RFRVA7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJzaGFsbG93IikpIHsKKwkJCXRocmVhZCA9IFRIUkVBRF9TSEFMTE9XOworCQkJcmV0dXJuIDA7CisJCX0KKwkJdGhyZWFkID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpICYmIFRIUkVBRF9TSEFMTE9XOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25vZmYiKSkgeworCQlkb19zaWdub2ZmID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25hdHVyZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNpZ25hdHVyZSwgdmFyLCB2YWx1ZSk7CisKKwlyZXR1cm4gZ2l0X2xvZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgRklMRSAqcmVhbHN0ZG91dCA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqb3V0cHV0X2RpcmVjdG9yeSA9IE5VTEw7CitzdGF0aWMgaW50IG91dGRpcl9vZmZzZXQ7CisKK3N0YXRpYyBpbnQgcmVvcGVuX3N0ZG91dChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKnN1YmplY3QsCisJCQkgc3RydWN0IHJldl9pbmZvICpyZXYsIGludCBxdWlldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGZpbGVuYW1lID0gU1RSQlVGX0lOSVQ7CisJaW50IHN1ZmZpeF9sZW4gPSBzdHJsZW4oZm10X3BhdGNoX3N1ZmZpeCkgKyAxOworCisJaWYgKG91dHB1dF9kaXJlY3RvcnkpIHsKKwkJc3RyYnVmX2FkZHN0cigmZmlsZW5hbWUsIG91dHB1dF9kaXJlY3RvcnkpOworCQlpZiAoZmlsZW5hbWUubGVuID49CisJCSAgICBQQVRIX01BWCAtIEZPUk1BVF9QQVRDSF9OQU1FX01BWCAtIHN1ZmZpeF9sZW4pCisJCQlyZXR1cm4gZXJyb3IoXygibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIikpOworCQlpZiAoZmlsZW5hbWUuYnVmW2ZpbGVuYW1lLmxlbiAtIDFdICE9ICcvJykKKwkJCXN0cmJ1Zl9hZGRjaCgmZmlsZW5hbWUsICcvJyk7CisJfQorCisJZ2V0X3BhdGNoX2ZpbGVuYW1lKGNvbW1pdCwgc3ViamVjdCwgcmV2LT5uciwgZm10X3BhdGNoX3N1ZmZpeCwgJmZpbGVuYW1lKTsKKworCWlmICghcXVpZXQpCisJCWZwcmludGYocmVhbHN0ZG91dCwgIiVzXG4iLCBmaWxlbmFtZS5idWYgKyBvdXRkaXJfb2Zmc2V0KTsKKworCWlmIChmcmVvcGVuKGZpbGVuYW1lLmJ1ZiwgInciLCBzdGRvdXQpID09IE5VTEwpCisJCXJldHVybiBlcnJvcihfKCJDYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIiksIGZpbGVuYW1lLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmZmlsZW5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZXRfcGF0Y2hfaWRzKHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgcGF0Y2hfaWRzICppZHMpCit7CisJc3RydWN0IHJldl9pbmZvIGNoZWNrX3JldjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IG9iamVjdCAqbzEsICpvMjsKKwl1bnNpZ25lZCBmbGFnczEsIGZsYWdzMjsKKworCWlmIChyZXYtPnBlbmRpbmcubnIgIT0gMikKKwkJZGllKF8oIk5lZWQgZXhhY3RseSBvbmUgcmFuZ2UuIikpOworCisJbzEgPSByZXYtPnBlbmRpbmcub2JqZWN0c1swXS5pdGVtOworCWZsYWdzMSA9IG8xLT5mbGFnczsKKwlvMiA9IHJldi0+cGVuZGluZy5vYmplY3RzWzFdLml0ZW07CisJZmxhZ3MyID0gbzItPmZsYWdzOworCisJaWYgKChmbGFnczEgJiBVTklOVEVSRVNUSU5HKSA9PSAoZmxhZ3MyICYgVU5JTlRFUkVTVElORykpCisJCWRpZShfKCJOb3QgYSByYW5nZS4iKSk7CisKKwlpbml0X3BhdGNoX2lkcyhpZHMpOworCisJLyogZ2l2ZW4gYSByYW5nZSBhLi5iIGdldCBhbGwgcGF0Y2ggaWRzIGZvciBiLi5hICovCisJaW5pdF9yZXZpc2lvbnMoJmNoZWNrX3JldiwgcmV2LT5wcmVmaXgpOworCWNoZWNrX3Jldi5tYXhfcGFyZW50cyA9IDE7CisJbzEtPmZsYWdzIF49IFVOSU5URVJFU1RJTkc7CisJbzItPmZsYWdzIF49IFVOSU5URVJFU1RJTkc7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZjaGVja19yZXYsIG8xLCAibzEiKTsKKwlhZGRfcGVuZGluZ19vYmplY3QoJmNoZWNrX3JldiwgbzIsICJvMiIpOworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJmNoZWNrX3JldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZjaGVja19yZXYpKSAhPSBOVUxMKSB7CisJCWFkZF9jb21taXRfcGF0Y2hfaWQoY29tbWl0LCBpZHMpOworCX0KKworCS8qIHJlc2V0IGZvciBuZXh0IHJldmlzaW9uIHdhbGsgKi8KKwljbGVhcl9jb21taXRfbWFya3MoKHN0cnVjdCBjb21taXQgKilvMSwKKwkJCVNFRU4gfCBVTklOVEVSRVNUSU5HIHwgU0hPV04gfCBBRERFRCk7CisJY2xlYXJfY29tbWl0X21hcmtzKChzdHJ1Y3QgY29tbWl0ICopbzIsCisJCQlTRUVOIHwgVU5JTlRFUkVTVElORyB8IFNIT1dOIHwgQURERUQpOworCW8xLT5mbGFncyA9IGZsYWdzMTsKKwlvMi0+ZmxhZ3MgPSBmbGFnczI7Cit9CisKK3N0YXRpYyB2b2lkIGdlbl9tZXNzYWdlX2lkKHN0cnVjdCByZXZfaW5mbyAqaW5mbywgY2hhciAqYmFzZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy4lbHUuZ2l0LiVzIiwgYmFzZSwKKwkJICAgICh1bnNpZ25lZCBsb25nKSB0aW1lKE5VTEwpLAorCQkgICAgZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX05PX05BTUV8SURFTlRfTk9fREFURXxJREVOVF9TVFJJQ1QpKTsKKwlpbmZvLT5tZXNzYWdlX2lkID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc2lnbmF0dXJlKHZvaWQpCit7CisJaWYgKHNpZ25hdHVyZSAmJiAqc2lnbmF0dXJlKQorCQlwcmludGYoIi0tIFxuJXNcblxuIiwgc2lnbmF0dXJlKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2JyYW5jaF9kZXNjcmlwdGlvbihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lKQoreworCXN0cnVjdCBzdHJidWYgZGVzYyA9IFNUUkJVRl9JTklUOworCWlmICghYnJhbmNoX25hbWUgfHwgISpicmFuY2hfbmFtZSkKKwkJcmV0dXJuOworCXJlYWRfYnJhbmNoX2Rlc2MoJmRlc2MsIGJyYW5jaF9uYW1lKTsKKwlpZiAoZGVzYy5sZW4pIHsKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7CisJCXN0cmJ1Zl9hZGQoYnVmLCBkZXNjLmJ1ZiwgZGVzYy5sZW4pOworCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1ha2VfY292ZXJfbGV0dGVyKHN0cnVjdCByZXZfaW5mbyAqcmV2LCBpbnQgdXNlX3N0ZG91dCwKKwkJCSAgICAgIGludCBudW1iZXJlZCwgaW50IG51bWJlcmVkX2ZpbGVzLAorCQkJICAgICAgc3RydWN0IGNvbW1pdCAqb3JpZ2luLAorCQkJICAgICAgaW50IG5yLCBzdHJ1Y3QgY29tbWl0ICoqbGlzdCwgc3RydWN0IGNvbW1pdCAqaGVhZCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lLAorCQkJICAgICAgaW50IHF1aWV0KQoreworCWNvbnN0IGNoYXIgKmNvbW1pdHRlcjsKKwljb25zdCBjaGFyICpib2R5ID0gIioqKiBTVUJKRUNUIEhFUkUgKioqXG5cbioqKiBCTFVSQiBIRVJFICoqKlxuIjsKKwljb25zdCBjaGFyICptc2c7CisJc3RydWN0IHNob3J0bG9nIGxvZzsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IGk7CisJY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiVVRGLTgiOworCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKKwlpbnQgbmVlZF84Yml0X2N0ZSA9IDA7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBwID0gezB9OworCisJaWYgKHJldi0+Y29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9FTUFJTCkKKwkJZGllKF8oIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiKSk7CisKKwljb21taXR0ZXIgPSBnaXRfY29tbWl0dGVyX2luZm8oMCk7CisKKwlpZiAoIXVzZV9zdGRvdXQgJiYKKwkgICAgcmVvcGVuX3N0ZG91dChOVUxMLCBudW1iZXJlZF9maWxlcyA/IE5VTEwgOiAiY292ZXItbGV0dGVyIiwgcmV2LCBxdWlldCkpCisJCXJldHVybjsKKworCWxvZ193cml0ZV9lbWFpbF9oZWFkZXJzKHJldiwgaGVhZCwgJnBwLnN1YmplY3QsICZwcC5hZnRlcl9zdWJqZWN0LAorCQkJCSZuZWVkXzhiaXRfY3RlKTsKKworCWZvciAoaSA9IDA7ICFuZWVkXzhiaXRfY3RlICYmIGkgPCBucjsgaSsrKQorCQlpZiAoaGFzX25vbl9hc2NpaShsaXN0W2ldLT5idWZmZXIpKQorCQkJbmVlZF84Yml0X2N0ZSA9IDE7CisKKwltc2cgPSBib2R5OworCXBwLmZtdCA9IENNSVRfRk1UX0VNQUlMOworCXBwLmRhdGVfbW9kZSA9IERBVEVfUkZDMjgyMjsKKwlwcF91c2VyX2luZm8oJnBwLCBOVUxMLCAmc2IsIGNvbW1pdHRlciwgZW5jb2RpbmcpOworCXBwX3RpdGxlX2xpbmUoJnBwLCAmbXNnLCAmc2IsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKKwlwcF9yZW1haW5kZXIoJnBwLCAmbXNnLCAmc2IsIDApOworCWFkZF9icmFuY2hfZGVzY3JpcHRpb24oJnNiLCBicmFuY2hfbmFtZSk7CisJcHJpbnRmKCIlc1xuIiwgc2IuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlzaG9ydGxvZ19pbml0KCZsb2cpOworCWxvZy53cmFwX2xpbmVzID0gMTsKKwlsb2cud3JhcCA9IDcyOworCWxvZy5pbjEgPSAyOworCWxvZy5pbjIgPSA0OworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQlzaG9ydGxvZ19hZGRfY29tbWl0KCZsb2csIGxpc3RbaV0pOworCisJc2hvcnRsb2dfb3V0cHV0KCZsb2cpOworCisJLyoKKwkgKiBXZSBjYW4gb25seSBkbyBkaWZmc3RhdCB3aXRoIGEgdW5pcXVlIHJlZmVyZW5jZSBwb2ludAorCSAqLworCWlmICghb3JpZ2luKQorCQlyZXR1cm47CisKKwltZW1jcHkoJm9wdHMsICZyZXYtPmRpZmZvcHQsIHNpemVvZihvcHRzKSk7CisJb3B0cy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfU1VNTUFSWSB8IERJRkZfRk9STUFUX0RJRkZTVEFUOworCisJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKKworCWRpZmZfdHJlZV9zaGExKG9yaWdpbi0+dHJlZS0+b2JqZWN0LnNoYTEsCisJCSAgICAgICBoZWFkLT50cmVlLT5vYmplY3Quc2hhMSwKKwkJICAgICAgICIiLCAmb3B0cyk7CisJZGlmZmNvcmVfc3RkKCZvcHRzKTsKKwlkaWZmX2ZsdXNoKCZvcHRzKTsKKworCXByaW50ZigiXG4iKTsKKwlwcmludF9zaWduYXR1cmUoKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNsZWFuX21lc3NhZ2VfaWQoY29uc3QgY2hhciAqbXNnX2lkKQoreworCWNoYXIgY2g7CisJY29uc3QgY2hhciAqYSwgKnosICptOworCisJbSA9IG1zZ19pZDsKKwl3aGlsZSAoKGNoID0gKm0pICYmIChpc3NwYWNlKGNoKSB8fCAoY2ggPT0gJzwnKSkpCisJCW0rKzsKKwlhID0gbTsKKwl6ID0gTlVMTDsKKwl3aGlsZSAoKGNoID0gKm0pKSB7CisJCWlmICghaXNzcGFjZShjaCkgJiYgKGNoICE9ICc+JykpCisJCQl6ID0gbTsKKwkJbSsrOworCX0KKwlpZiAoIXopCisJCWRpZShfKCJpbnNhbmUgaW4tcmVwbHktdG86ICVzIiksIG1zZ19pZCk7CisJaWYgKCsreiA9PSBtKQorCQlyZXR1cm4gYTsKKwlyZXR1cm4geG1lbWR1cHooYSwgeiAtIGEpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2V0X291dGRpcihjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKm91dHB1dF9kaXJlY3RvcnkpCit7CisJaWYgKG91dHB1dF9kaXJlY3RvcnkgJiYgaXNfYWJzb2x1dGVfcGF0aChvdXRwdXRfZGlyZWN0b3J5KSkKKwkJcmV0dXJuIG91dHB1dF9kaXJlY3Rvcnk7CisKKwlpZiAoIXByZWZpeCB8fCAhKnByZWZpeCkgeworCQlpZiAob3V0cHV0X2RpcmVjdG9yeSkKKwkJCXJldHVybiBvdXRwdXRfZGlyZWN0b3J5OworCQkvKiBUaGUgdXNlciBkaWQgbm90IGV4cGxpY2l0bHkgYXNrIGZvciAiLi8iICovCisJCW91dGRpcl9vZmZzZXQgPSAyOworCQlyZXR1cm4gIi4vIjsKKwl9CisKKwlvdXRkaXJfb2Zmc2V0ID0gc3RybGVuKHByZWZpeCk7CisJaWYgKCFvdXRwdXRfZGlyZWN0b3J5KQorCQlyZXR1cm4gcHJlZml4OworCisJcmV0dXJuIHhzdHJkdXAocHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgb3V0ZGlyX29mZnNldCwKKwkJCQkgICAgICAgb3V0cHV0X2RpcmVjdG9yeSkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fZm9ybWF0X3BhdGNoX3VzYWdlW10gPSB7CisJTl8oImdpdCBmb3JtYXQtcGF0Y2ggW29wdGlvbnNdIFs8c2luY2U+IHwgPHJldmlzaW9uIHJhbmdlPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGtlZXBfc3ViamVjdCA9IDA7CisKK3N0YXRpYyBpbnQga2VlcF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCSgoc3RydWN0IHJldl9pbmZvICopb3B0LT52YWx1ZSktPnRvdGFsID0gLTE7CisJa2VlcF9zdWJqZWN0ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJqZWN0X3ByZWZpeCA9IDA7CisKK3N0YXRpYyBpbnQgc3ViamVjdF9wcmVmaXhfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgaW50IHVuc2V0KQoreworCXN1YmplY3RfcHJlZml4ID0gMTsKKwkoKHN0cnVjdCByZXZfaW5mbyAqKW9wdC0+dmFsdWUpLT5zdWJqZWN0X3ByZWZpeCA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudW1iZXJlZF9jbWRsaW5lX29wdCA9IDA7CisKK3N0YXRpYyBpbnQgbnVtYmVyZWRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgIGludCB1bnNldCkKK3sKKwkqKGludCAqKW9wdC0+dmFsdWUgPSBudW1iZXJlZF9jbWRsaW5lX29wdCA9IHVuc2V0ID8gMCA6IDE7CisJaWYgKHVuc2V0KQorCQlhdXRvX251bWJlciA9ICAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vX251bWJlcmVkX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCWludCB1bnNldCkKK3sKKwlyZXR1cm4gbnVtYmVyZWRfY2FsbGJhY2sob3B0LCBhcmcsIDEpOworfQorCitzdGF0aWMgaW50IG91dHB1dF9kaXJlY3RvcnlfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgICBpbnQgdW5zZXQpCit7CisJY29uc3QgY2hhciAqKmRpciA9IChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWU7CisJaWYgKCpkaXIpCisJCWRpZShfKCJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIpKTsKKwkqZGlyID0gYXJnOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRocmVhZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqdGhyZWFkID0gKGludCAqKW9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KQorCQkqdGhyZWFkID0gMDsKKwllbHNlIGlmICghYXJnIHx8ICFzdHJjbXAoYXJnLCAic2hhbGxvdyIpKQorCQkqdGhyZWFkID0gVEhSRUFEX1NIQUxMT1c7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkZWVwIikpCisJCSp0aHJlYWQgPSBUSFJFQURfREVFUDsKKwllbHNlCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0dGFjaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCByZXZfaW5mbyAqcmV2ID0gKHN0cnVjdCByZXZfaW5mbyAqKW9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KQorCQlyZXYtPm1pbWVfYm91bmRhcnkgPSBOVUxMOworCWVsc2UgaWYgKGFyZykKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gYXJnOworCWVsc2UKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gZ2l0X3ZlcnNpb25fc3RyaW5nOworCXJldi0+bm9faW5saW5lID0gdW5zZXQgPyAwIDogMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbmxpbmVfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldiA9IChzdHJ1Y3QgcmV2X2luZm8gKilvcHQtPnZhbHVlOworCWlmICh1bnNldCkKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gTlVMTDsKKwllbHNlIGlmIChhcmcpCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGFyZzsKKwllbHNlCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKKwlyZXYtPm5vX2lubGluZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGVhZGVyX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KSB7CisJCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV9oZHIsIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfdG8sIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfY2MsIDApOworCX0gZWxzZSB7CisJICAgIGFkZF9oZWFkZXIoYXJnKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9fY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV90bywgMCk7CisJZWxzZQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmV4dHJhX3RvLCBhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfY2MsIDApOworCWVsc2UKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZleHRyYV9jYywgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfYnJhbmNoX25hbWUoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJaW50IGksIHBvc2l0aXZlID0gLTE7CisJdW5zaWduZWQgY2hhciBicmFuY2hfc2hhMVsyMF07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpicmFuY2g7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV2LT5jbWRsaW5lLm5yOyBpKyspIHsKKwkJaWYgKHJldi0+Y21kbGluZS5yZXZbaV0uZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCWlmIChwb3NpdGl2ZSA8IDApCisJCQlwb3NpdGl2ZSA9IGk7CisJCWVsc2UKKwkJCXJldHVybiBOVUxMOworCX0KKwlpZiAocG9zaXRpdmUgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlzdHJidWZfYWRkZigmYnVmLCAicmVmcy9oZWFkcy8lcyIsIHJldi0+Y21kbGluZS5yZXZbcG9zaXRpdmVdLm5hbWUpOworCWJyYW5jaCA9IHJlc29sdmVfcmVmX3Vuc2FmZShidWYuYnVmLCBicmFuY2hfc2hhMSwgMSwgTlVMTCk7CisJaWYgKCFicmFuY2ggfHwKKwkgICAgcHJlZml4Y21wKGJyYW5jaCwgInJlZnMvaGVhZHMvIikgfHwKKwkgICAgaGFzaGNtcChyZXYtPmNtZGxpbmUucmV2W3Bvc2l0aXZlXS5pdGVtLT5zaGExLCBicmFuY2hfc2hhMSkpCisJCWJyYW5jaCA9IE5VTEw7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJaWYgKGJyYW5jaCkKKwkJcmV0dXJuIHhzdHJkdXAocmV2LT5jbWRsaW5lLnJldltwb3NpdGl2ZV0ubmFtZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBjbWRfZm9ybWF0X3BhdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IE5VTEw7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IHNfcl9vcHQ7CisJaW50IG5yID0gMCwgdG90YWwsIGk7CisJaW50IHVzZV9zdGRvdXQgPSAwOworCWludCBzdGFydF9udW1iZXIgPSAtMTsKKwlpbnQgbnVtYmVyZWRfZmlsZXMgPSAwOwkJLyogX2p1c3RfIG51bWJlcnMgKi8KKwlpbnQgaWdub3JlX2lmX2luX3Vwc3RyZWFtID0gMDsKKwlpbnQgY292ZXJfbGV0dGVyID0gMDsKKwlpbnQgYm91bmRhcnlfY291bnQgPSAwOworCWludCBub19iaW5hcnlfZGlmZiA9IDA7CisJc3RydWN0IGNvbW1pdCAqb3JpZ2luID0gTlVMTCwgKmhlYWQgPSBOVUxMOworCWNvbnN0IGNoYXIgKmluX3JlcGx5X3RvID0gTlVMTDsKKwlzdHJ1Y3QgcGF0Y2hfaWRzIGlkczsKKwljaGFyICphZGRfc2lnbm9mZiA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgdXNlX3BhdGNoX2Zvcm1hdCA9IDA7CisJaW50IHF1aWV0ID0gMDsKKwljaGFyICpicmFuY2hfbmFtZSA9IE5VTEw7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBidWlsdGluX2Zvcm1hdF9wYXRjaF9vcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0NBTExCQUNLLCAnbicsICJudW1iZXJlZCIsICZudW1iZXJlZCwgTlVMTCwKKwkJCSAgICBOXygidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIpLAorCQkJICAgIFBBUlNFX09QVF9OT0FSRywgbnVtYmVyZWRfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdOJywgIm5vLW51bWJlcmVkIiwgJm51bWJlcmVkLCBOVUxMLAorCQkJICAgIE5fKCJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIpLAorCQkJICAgIFBBUlNFX09QVF9OT0FSRywgbm9fbnVtYmVyZWRfY2FsbGJhY2sgfSwKKwkJT1BUX0JPT0xFQU4oJ3MnLCAic2lnbm9mZiIsICZkb19zaWdub2ZmLCBOXygiYWRkIFNpZ25lZC1vZmYtYnk6IikpLAorCQlPUFRfQk9PTEVBTigwLCAic3Rkb3V0IiwgJnVzZV9zdGRvdXQsCisJCQkgICAgTl8oInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IikpLAorCQlPUFRfQk9PTEVBTigwLCAiY292ZXItbGV0dGVyIiwgJmNvdmVyX2xldHRlciwKKwkJCSAgICBOXygiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiKSksCisJCU9QVF9CT09MRUFOKDAsICJudW1iZXJlZC1maWxlcyIsICZudW1iZXJlZF9maWxlcywKKwkJCSAgICBOXygidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIikpLAorCQlPUFRfU1RSSU5HKDAsICJzdWZmaXgiLCAmZm10X3BhdGNoX3N1ZmZpeCwgTl8oInNmeCIpLAorCQkJICAgIE5fKCJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInN0YXJ0LW51bWJlciIsICZzdGFydF9udW1iZXIsCisJCQkgICAgTl8oInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAic3ViamVjdC1wcmVmaXgiLCAmcmV2LCBOXygicHJlZml4IiksCisJCQkgICAgTl8oIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIpLAorCQkJICAgIFBBUlNFX09QVF9OT05FRywgc3ViamVjdF9wcmVmaXhfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdvJywgIm91dHB1dC1kaXJlY3RvcnkiLCAmb3V0cHV0X2RpcmVjdG9yeSwKKwkJCSAgICBOXygiZGlyIiksIE5fKCJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iKSwKKwkJCSAgICBQQVJTRV9PUFRfTk9ORUcsIG91dHB1dF9kaXJlY3RvcnlfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdrJywgImtlZXAtc3ViamVjdCIsICZyZXYsIE5VTEwsCisJCQkgICAgTl8oImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIiksCisJCQkgICAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBrZWVwX2NhbGxiYWNrIH0sCisJCU9QVF9CT09MRUFOKDAsICJuby1iaW5hcnkiLCAmbm9fYmluYXJ5X2RpZmYsCisJCQkgICAgTl8oImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiKSksCisJCU9QVF9CT09MRUFOKDAsICJpZ25vcmUtaWYtaW4tdXBzdHJlYW0iLCAmaWdub3JlX2lmX2luX3Vwc3RyZWFtLAorCQkJICAgIE5fKCJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iKSksCisJCXsgT1BUSU9OX0JPT0xFQU4sICdwJywgIm5vLXN0YXQiLCAmdXNlX3BhdGNoX2Zvcm1hdCwgTlVMTCwKKwkJICBOXygic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIiksCisJCSAgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PQVJHIH0sCisJCU9QVF9HUk9VUChOXygiTWVzc2FnaW5nIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImFkZC1oZWFkZXIiLCBOVUxMLCBOXygiaGVhZGVyIiksCisJCQkgICAgTl8oImFkZCBlbWFpbCBoZWFkZXIiKSwgMCwgaGVhZGVyX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAidG8iLCBOVUxMLCBOXygiZW1haWwiKSwgTl8oImFkZCBUbzogaGVhZGVyIiksCisJCQkgICAgMCwgdG9fY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJjYyIsIE5VTEwsIE5fKCJlbWFpbCIpLCBOXygiYWRkIENjOiBoZWFkZXIiKSwKKwkJCSAgICAwLCBjY19jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HKDAsICJpbi1yZXBseS10byIsICZpbl9yZXBseV90bywgTl8oIm1lc3NhZ2UtaWQiKSwKKwkJCSAgICBOXygibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImF0dGFjaCIsICZyZXYsIE5fKCJib3VuZGFyeSIpLAorCQkJICAgIE5fKCJhdHRhY2ggdGhlIHBhdGNoIiksIFBBUlNFX09QVF9PUFRBUkcsCisJCQkgICAgYXR0YWNoX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaW5saW5lIiwgJnJldiwgTl8oImJvdW5kYXJ5IiksCisJCQkgICAgTl8oImlubGluZSB0aGUgcGF0Y2giKSwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJICAgIGlubGluZV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInRocmVhZCIsICZ0aHJlYWQsIE5fKCJzdHlsZSIpLAorCQkJICAgIE5fKCJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIpLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIHRocmVhZF9jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HKDAsICJzaWduYXR1cmUiLCAmc2lnbmF0dXJlLCBOXygic2lnbmF0dXJlIiksCisJCQkgICAgTl8oImFkZCBhIHNpZ25hdHVyZSIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgInF1aWV0IiwgJnF1aWV0LAorCQkJICAgIE5fKCJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZXh0cmFfaGRyLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlleHRyYV90by5zdHJkdXBfc3RyaW5ncyA9IDE7CisJZXh0cmFfY2Muc3RyZHVwX3N0cmluZ3MgPSAxOworCWdpdF9jb25maWcoZ2l0X2Zvcm1hdF9jb25maWcsIE5VTEwpOworCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CisJcmV2LmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9FTUFJTDsKKwlyZXYudmVyYm9zZV9oZWFkZXIgPSAxOworCXJldi5kaWZmID0gMTsKKwlyZXYubWF4X3BhcmVudHMgPSAxOworCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIFJFQ1VSU0lWRSk7CisJcmV2LnN1YmplY3RfcHJlZml4ID0gZm10X3BhdGNoX3N1YmplY3RfcHJlZml4OworCW1lbXNldCgmc19yX29wdCwgMCwgc2l6ZW9mKHNfcl9vcHQpKTsKKwlzX3Jfb3B0LmRlZiA9ICJIRUFEIjsKKwlzX3Jfb3B0LnJldmFyZ19vcHQgPSBSRVZBUkdfQ09NTUlUVElTSDsKKworCWlmIChkZWZhdWx0X2F0dGFjaCkgeworCQlyZXYubWltZV9ib3VuZGFyeSA9IGRlZmF1bHRfYXR0YWNoOworCQlyZXYubm9faW5saW5lID0gMTsKKwl9CisKKwkvKgorCSAqIFBhcnNlIHRoZSBhcmd1bWVudHMgYmVmb3JlIHNldHVwX3JldmlzaW9ucygpLCBvciBzb21ldGhpbmcKKwkgKiBsaWtlICJnaXQgZm9ybWF0LXBhdGNoIC1vIGExMjMgSEVBRF4uLiIgbWF5IGZhaWw7IGExMjMgaXMKKwkgKiBwb3NzaWJseSBhIHZhbGlkIFNIQTEuCisJICovCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2Zvcm1hdF9wYXRjaF9vcHRpb25zLAorCQkJICAgICBidWlsdGluX2Zvcm1hdF9wYXRjaF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjAgfCBQQVJTRV9PUFRfS0VFUF9VTktOT1dOIHwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOworCisJaWYgKGRvX3NpZ25vZmYpIHsKKwkJY29uc3QgY2hhciAqY29tbWl0dGVyOworCQljb25zdCBjaGFyICplbmRwb3M7CisJCWNvbW1pdHRlciA9IGdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9TVFJJQ1QpOworCQllbmRwb3MgPSBzdHJjaHIoY29tbWl0dGVyLCAnPicpOworCQlpZiAoIWVuZHBvcykKKwkJCWRpZShfKCJib2d1cyBjb21taXR0ZXIgaW5mbyAlcyIpLCBjb21taXR0ZXIpOworCQlhZGRfc2lnbm9mZiA9IHhtZW1kdXB6KGNvbW1pdHRlciwgZW5kcG9zIC0gY29tbWl0dGVyICsgMSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGV4dHJhX2hkci5ucjsgaSsrKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZXh0cmFfaGRyLml0ZW1zW2ldLnN0cmluZyk7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwl9CisKKwlpZiAoZXh0cmFfdG8ubnIpCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIlRvOiAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXh0cmFfdG8ubnI7IGkrKykgeworCQlpZiAoaSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiAgICAiKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBleHRyYV90by5pdGVtc1tpXS5zdHJpbmcpOworCQlpZiAoaSArIDEgPCBleHRyYV90by5ucikKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnLCcpOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJfQorCisJaWYgKGV4dHJhX2NjLm5yKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICJDYzogIik7CisJZm9yIChpID0gMDsgaSA8IGV4dHJhX2NjLm5yOyBpKyspIHsKKwkJaWYgKGkpCisJCQlzdHJidWZfYWRkc3RyKCZidWYsICIgICAgIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZXh0cmFfY2MuaXRlbXNbaV0uc3RyaW5nKTsKKwkJaWYgKGkgKyAxIDwgZXh0cmFfY2MubnIpCisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJywnKTsKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCX0KKworCXJldi5leHRyYV9oZWFkZXJzID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWlmIChzdGFydF9udW1iZXIgPCAwKQorCQlzdGFydF9udW1iZXIgPSAxOworCisJLyoKKwkgKiBJZiBudW1iZXJlZCBpcyBzZXQgc29sZWx5IGR1ZSB0byBmb3JtYXQubnVtYmVyZWQgaW4gY29uZmlnLAorCSAqIGFuZCBpdCB3b3VsZCBjb25mbGljdCB3aXRoIC0ta2VlcC1zdWJqZWN0ICgtaykgZnJvbSB0aGUKKwkgKiBjb21tYW5kIGxpbmUsIHJlc2V0ICJudW1iZXJlZCIuCisJICovCisJaWYgKG51bWJlcmVkICYmIGtlZXBfc3ViamVjdCAmJiAhbnVtYmVyZWRfY21kbGluZV9vcHQpCisJCW51bWJlcmVkID0gMDsKKworCWlmIChudW1iZXJlZCAmJiBrZWVwX3N1YmplY3QpCisJCWRpZSAoXygiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIikpOworCWlmIChrZWVwX3N1YmplY3QgJiYgc3ViamVjdF9wcmVmaXgpCisJCWRpZSAoXygiLS1zdWJqZWN0LXByZWZpeCBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iKSk7CisJcmV2LnByZXNlcnZlX3N1YmplY3QgPSBrZWVwX3N1YmplY3Q7CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsICZzX3Jfb3B0KTsKKwlpZiAoYXJnYyA+IDEpCisJCWRpZSAoXygidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIpLCBhcmd2WzFdKTsKKworCWlmIChyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTkFNRSkKKwkJZGllKF8oIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiKSk7CisJaWYgKHJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykKKwkJZGllKF8oIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIpKTsKKwlpZiAocmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NIRUNLRElGRikKKwkJZGllKF8oIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIpKTsKKworCWlmICghdXNlX3BhdGNoX2Zvcm1hdCAmJgorCQkoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfHwKKwkJIHJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPT0gRElGRl9GT1JNQVRfUEFUQ0gpKQorCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfRElGRlNUQVQgfCBESUZGX0ZPUk1BVF9TVU1NQVJZOworCisJLyogQWx3YXlzIGdlbmVyYXRlIGEgcGF0Y2ggKi8KKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIOworCisJaWYgKCFESUZGX09QVF9UU1QoJnJldi5kaWZmb3B0LCBURVhUKSAmJiAhbm9fYmluYXJ5X2RpZmYpCisJCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIEJJTkFSWSk7CisKKwlpZiAocmV2LnNob3dfbm90ZXMpCisJCWluaXRfZGlzcGxheV9ub3RlcygmcmV2Lm5vdGVzX29wdCk7CisKKwlpZiAoIXVzZV9zdGRvdXQpCisJCW91dHB1dF9kaXJlY3RvcnkgPSBzZXRfb3V0ZGlyKHByZWZpeCwgb3V0cHV0X2RpcmVjdG9yeSk7CisJZWxzZQorCQlzZXR1cF9wYWdlcigpOworCisJaWYgKG91dHB1dF9kaXJlY3RvcnkpIHsKKwkJaWYgKHVzZV9zdGRvdXQpCisJCQlkaWUoXygic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iKSk7CisJCWlmIChta2RpcihvdXRwdXRfZGlyZWN0b3J5LCAwNzc3KSA8IDAgJiYgZXJybm8gIT0gRUVYSVNUKQorCQkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwKKwkJCQkgIG91dHB1dF9kaXJlY3RvcnkpOworCX0KKworCWlmIChyZXYucGVuZGluZy5uciA9PSAxKSB7CisJCWlmIChyZXYubWF4X2NvdW50IDwgMCAmJiAhcmV2LnNob3dfcm9vdF9kaWZmKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyB0cmFkaXRpb25hbCBiZWhhdmlvdXIgb2YgImdpdCBmb3JtYXQtcGF0Y2gKKwkJCSAqIG9yaWdpbiIgdGhhdCBwcmVwYXJlcyB3aGF0IHRoZSBvcmlnaW4gc2lkZSBzdGlsbAorCQkJICogZG9lcyBub3QgaGF2ZS4KKwkJCSAqLworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJCWNvbnN0IGNoYXIgKnJlZjsKKworCQkJcmV2LnBlbmRpbmcub2JqZWN0c1swXS5pdGVtLT5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQkJYWRkX2hlYWRfdG9fcGVuZGluZygmcmV2KTsKKwkJCXJlZiA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIHNoYTEsIDEsIE5VTEwpOworCQkJaWYgKHJlZiAmJiAhcHJlZml4Y21wKHJlZiwgInJlZnMvaGVhZHMvIikpCisJCQkJYnJhbmNoX25hbWUgPSB4c3RyZHVwKHJlZiArIHN0cmxlbigicmVmcy9oZWFkcy8iKSk7CisJCQllbHNlCisJCQkJYnJhbmNoX25hbWUgPSB4c3RyZHVwKCIiKTsgLyogbm8gYnJhbmNoICovCisJCX0KKwkJLyoKKwkJICogT3RoZXJ3aXNlLCBpdCBpcyAiZm9ybWF0LXBhdGNoIC0yMiBIRUFEIiwgYW5kL29yCisJCSAqICJmb3JtYXQtcGF0Y2ggLS1yb290IEhFQUQiLiAgVGhlIHVzZXIgd2FudHMKKwkJICogZ2V0X3JldmlzaW9uKCkgdG8gZG8gdGhlIHVzdWFsIHRyYXZlcnNhbC4KKwkJICovCisJfQorCisJLyoKKwkgKiBXZSBjYW5ub3QgbW92ZSB0aGlzIGFueXdoZXJlIGVhcmxpZXIgYmVjYXVzZSB3ZSBkbyB3YW50IHRvCisJICoga25vdyBpZiAtLXJvb3Qgd2FzIGdpdmVuIGV4cGxpY2l0bHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCSAqLworCXJldi5zaG93X3Jvb3RfZGlmZiA9IDE7CisKKwlpZiAoY292ZXJfbGV0dGVyKSB7CisJCS8qCisJCSAqIE5FRURTV09SSzpyYW5kb21seSBwaWNrIG9uZSBwb3NpdGl2ZSBjb21taXQgdG8gc2hvdworCQkgKiBkaWZmc3RhdDsgdGhpcyBpcyBvZnRlbiB0aGUgdGlwIGFuZCB0aGUgY29tbWFuZAorCQkgKiBoYXBwZW5zIHRvIGRvIHRoZSByaWdodCB0aGluZyBpbiBtb3N0IGNhc2VzLCBidXQgYQorCQkgKiBjb21wbGV4IGNvbW1hbmQgbGlrZSAiLS1jb3Zlci1sZXR0ZXIgYSBiIGMgXmJvdHRvbSIKKwkJICogcGlja3MgImMiIGFuZCBzaG93cyBkaWZmc3RhdCBiZXR3ZWVuIGJvdHRvbS4uYworCQkgKiB3aGljaCBtYXkgbm90IG1hdGNoIHdoYXQgdGhlIHNlcmllcyByZXByZXNlbnRzIGF0CisJCSAqIGFsbCBhbmQgdG90YWxseSBicm9rZW4uCisJCSAqLworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHJldi5wZW5kaW5nLm5yOyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3QgKm8gPSByZXYucGVuZGluZy5vYmplY3RzW2ldLml0ZW07CisJCQlpZiAoIShvLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJCWhlYWQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCX0KKwkJLyogVGhlcmUgaXMgbm90aGluZyB0byBzaG93OyBpdCBpcyBub3QgYW4gZXJyb3IsIHRob3VnaC4gKi8KKwkJaWYgKCFoZWFkKQorCQkJcmV0dXJuIDA7CisJCWlmICghYnJhbmNoX25hbWUpCisJCQlicmFuY2hfbmFtZSA9IGZpbmRfYnJhbmNoX25hbWUoJnJldik7CisJfQorCisJaWYgKGlnbm9yZV9pZl9pbl91cHN0cmVhbSkgeworCQkvKiBEb24ndCBzYXkgYW55dGhpbmcgaWYgaGVhZCBhbmQgdXBzdHJlYW0gYXJlIHRoZSBzYW1lLiAqLworCQlpZiAocmV2LnBlbmRpbmcubnIgPT0gMikgeworCQkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqbyA9IHJldi5wZW5kaW5nLm9iamVjdHM7CisJCQlpZiAoaGFzaGNtcChvWzBdLml0ZW0tPnNoYTEsIG9bMV0uaXRlbS0+c2hhMSkgPT0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQlnZXRfcGF0Y2hfaWRzKCZyZXYsICZpZHMpOworCX0KKworCWlmICghdXNlX3N0ZG91dCkKKwkJcmVhbHN0ZG91dCA9IHhmZG9wZW4oeGR1cCgxKSwgInciKTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKwlyZXYuYm91bmRhcnkgPSAxOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXYpKSAhPSBOVUxMKSB7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKSB7CisJCQlib3VuZGFyeV9jb3VudCsrOworCQkJb3JpZ2luID0gKGJvdW5kYXJ5X2NvdW50ID09IDEpID8gY29tbWl0IDogTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlnbm9yZV9pZl9pbl91cHN0cmVhbSAmJgorCQkJCWhhc19jb21taXRfcGF0Y2hfaWQoY29tbWl0LCAmaWRzKSkKKwkJCWNvbnRpbnVlOworCisJCW5yKys7CisJCWxpc3QgPSB4cmVhbGxvYyhsaXN0LCBuciAqIHNpemVvZihsaXN0WzBdKSk7CisJCWxpc3RbbnIgLSAxXSA9IGNvbW1pdDsKKwl9CisJdG90YWwgPSBucjsKKwlpZiAoIWtlZXBfc3ViamVjdCAmJiBhdXRvX251bWJlciAmJiB0b3RhbCA+IDEpCisJCW51bWJlcmVkID0gMTsKKwlpZiAobnVtYmVyZWQpCisJCXJldi50b3RhbCA9IHRvdGFsICsgc3RhcnRfbnVtYmVyIC0gMTsKKwlpZiAoaW5fcmVwbHlfdG8gfHwgdGhyZWFkIHx8IGNvdmVyX2xldHRlcikKKwkJcmV2LnJlZl9tZXNzYWdlX2lkcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCWlmIChpbl9yZXBseV90bykgeworCQljb25zdCBjaGFyICptc2dpZCA9IGNsZWFuX21lc3NhZ2VfaWQoaW5fcmVwbHlfdG8pOworCQlzdHJpbmdfbGlzdF9hcHBlbmQocmV2LnJlZl9tZXNzYWdlX2lkcywgbXNnaWQpOworCX0KKwlyZXYubnVtYmVyZWRfZmlsZXMgPSBudW1iZXJlZF9maWxlczsKKwlyZXYucGF0Y2hfc3VmZml4ID0gZm10X3BhdGNoX3N1ZmZpeDsKKwlpZiAoY292ZXJfbGV0dGVyKSB7CisJCWlmICh0aHJlYWQpCisJCQlnZW5fbWVzc2FnZV9pZCgmcmV2LCAiY292ZXIiKTsKKwkJbWFrZV9jb3Zlcl9sZXR0ZXIoJnJldiwgdXNlX3N0ZG91dCwgbnVtYmVyZWQsIG51bWJlcmVkX2ZpbGVzLAorCQkJCSAgb3JpZ2luLCBuciwgbGlzdCwgaGVhZCwgYnJhbmNoX25hbWUsIHF1aWV0KTsKKwkJdG90YWwrKzsKKwkJc3RhcnRfbnVtYmVyLS07CisJfQorCXJldi5hZGRfc2lnbm9mZiA9IGFkZF9zaWdub2ZmOworCXdoaWxlICgwIDw9IC0tbnIpIHsKKwkJaW50IHNob3duOworCQljb21taXQgPSBsaXN0W25yXTsKKwkJcmV2Lm5yID0gdG90YWwgLSBuciArIChzdGFydF9udW1iZXIgLSAxKTsKKwkJLyogTWFrZSB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IG1haWxzIHJlcGxpZXMgdG8gdGhlIGZpcnN0ICovCisJCWlmICh0aHJlYWQpIHsKKwkJCS8qIEhhdmUgd2UgYWxyZWFkeSBoYWQgYSBtZXNzYWdlIElEPyAqLworCQkJaWYgKHJldi5tZXNzYWdlX2lkKSB7CisJCQkJLyoKKwkJCQkgKiBGb3IgZGVlcCB0aHJlYWRpbmc6IG1ha2UgZXZlcnkgbWFpbAorCQkJCSAqIGEgcmVwbHkgdG8gdGhlIHByZXZpb3VzIG9uZSwgbm8KKwkJCQkgKiBtYXR0ZXIgd2hhdCBvdGhlciBvcHRpb25zIGFyZSBzZXQuCisJCQkJICoKKwkJCQkgKiBGb3Igc2hhbGxvdyB0aHJlYWRpbmc6CisJCQkJICoKKwkJCQkgKiBXaXRob3V0IC0tY292ZXItbGV0dGVyIGFuZAorCQkJCSAqIC0taW4tcmVwbHktdG8sIG1ha2UgZXZlcnkgbWFpbCBhCisJCQkJICogcmVwbHkgdG8gdGhlIG9uZSBiZWZvcmUuCisJCQkJICoKKwkJCQkgKiBXaXRoIC0taW4tcmVwbHktdG8gYnV0IG5vCisJCQkJICogLS1jb3Zlci1sZXR0ZXIsIG1ha2UgZXZlcnkgbWFpbCBhCisJCQkJICogcmVwbHkgdG8gdGhlIDxyZXBseS10bz4uCisJCQkJICoKKwkJCQkgKiBXaXRoIC0tY292ZXItbGV0dGVyLCBtYWtlIGV2ZXJ5CisJCQkJICogbWFpbCBidXQgdGhlIGNvdmVyIGxldHRlciBhIHJlcGx5CisJCQkJICogdG8gdGhlIGNvdmVyIGxldHRlci4gIFRoZSBjb3ZlcgorCQkJCSAqIGxldHRlciBpcyBhIHJlcGx5IHRvIHRoZQorCQkJCSAqIC0taW4tcmVwbHktdG8sIGlmIHNwZWNpZmllZC4KKwkJCQkgKi8KKwkJCQlpZiAodGhyZWFkID09IFRIUkVBRF9TSEFMTE9XCisJCQkJICAgICYmIHJldi5yZWZfbWVzc2FnZV9pZHMtPm5yID4gMAorCQkJCSAgICAmJiAoIWNvdmVyX2xldHRlciB8fCByZXYubnIgPiAxKSkKKwkJCQkJZnJlZShyZXYubWVzc2FnZV9pZCk7CisJCQkJZWxzZQorCQkJCQlzdHJpbmdfbGlzdF9hcHBlbmQocmV2LnJlZl9tZXNzYWdlX2lkcywKKwkJCQkJCQkgICByZXYubWVzc2FnZV9pZCk7CisJCQl9CisJCQlnZW5fbWVzc2FnZV9pZCgmcmV2LCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCX0KKworCQlpZiAoIXVzZV9zdGRvdXQgJiYKKwkJICAgIHJlb3Blbl9zdGRvdXQobnVtYmVyZWRfZmlsZXMgPyBOVUxMIDogY29tbWl0LCBOVUxMLCAmcmV2LCBxdWlldCkpCisJCQlkaWUoXygiRmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiKSk7CisJCXNob3duID0gbG9nX3RyZWVfY29tbWl0KCZyZXYsIGNvbW1pdCk7CisJCWZyZWUoY29tbWl0LT5idWZmZXIpOworCQljb21taXQtPmJ1ZmZlciA9IE5VTEw7CisKKwkJLyogV2UgcHV0IG9uZSBleHRyYSBibGFuayBsaW5lIGJldHdlZW4gZm9ybWF0dGVkCisJCSAqIHBhdGNoZXMgYW5kIHRoaXMgZmxhZyBpcyB1c2VkIGJ5IGxvZy10cmVlIGNvZGUKKwkJICogdG8gc2VlIGlmIGl0IG5lZWRzIHRvIGVtaXQgYSBMRiBiZWZvcmUgc2hvd2luZworCQkgKiB0aGUgbG9nOyB3aGVuIHVzaW5nIG9uZSBmaWxlIHBlciBwYXRjaCwgd2UgZG8KKwkJICogbm90IHdhbnQgdGhlIGV4dHJhIGJsYW5rIGxpbmUuCisJCSAqLworCQlpZiAoIXVzZV9zdGRvdXQpCisJCQlyZXYuc2hvd25fb25lID0gMDsKKwkJaWYgKHNob3duKSB7CisJCQlpZiAocmV2Lm1pbWVfYm91bmRhcnkpCisJCQkJcHJpbnRmKCJcbi0tJXMlcy0tXG5cblxuIiwKKwkJCQkgICAgICAgbWltZV9ib3VuZGFyeV9sZWFkZXIsCisJCQkJICAgICAgIHJldi5taW1lX2JvdW5kYXJ5KTsKKwkJCWVsc2UKKwkJCQlwcmludF9zaWduYXR1cmUoKTsKKwkJfQorCQlpZiAoIXVzZV9zdGRvdXQpCisJCQlmY2xvc2Uoc3Rkb3V0KTsKKwl9CisJZnJlZShsaXN0KTsKKwlmcmVlKGJyYW5jaF9uYW1lKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfdG8sIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV9jYywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2hkciwgMCk7CisJaWYgKGlnbm9yZV9pZl9pbl91cHN0cmVhbSkKKwkJZnJlZV9wYXRjaF9pZHMoJmlkcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BlbmRpbmdfY29tbWl0KGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpZiAoZ2V0X3NoYTEoYXJnLCBzaGExKSA9PSAwKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCQlpZiAoY29tbWl0KSB7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBmbGFnczsKKwkJCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCAmY29tbWl0LT5vYmplY3QsIGFyZyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2hlcnJ5X3VzYWdlW10gPSB7CisJTl8oImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIiksCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQgcHJpbnRfY29tbWl0KGNoYXIgc2lnbiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgdmVyYm9zZSwKKwkJCSBpbnQgYWJicmV2KQoreworCWlmICghdmVyYm9zZSkgeworCQlwcmludGYoIiVjICVzXG4iLCBzaWduLAorCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIGFiYnJldikpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJmJ1Zik7CisJCXByaW50ZigiJWMgJXMgJXNcbiIsIHNpZ24sCisJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgYWJicmV2KSwKKwkJICAgICAgIGJ1Zi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9Cit9CisKK2ludCBjbWRfY2hlcnJ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBwYXRjaF9pZHMgaWRzOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOworCXN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoOworCWNvbnN0IGNoYXIgKnVwc3RyZWFtOworCWNvbnN0IGNoYXIgKmhlYWQgPSAiSEVBRCI7CisJY29uc3QgY2hhciAqbGltaXQgPSBOVUxMOworCWludCB2ZXJib3NlID0gMCwgYWJicmV2ID0gMDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgY2hlcnJ5X3VzYWdlLCAwKTsKKworCXN3aXRjaCAoYXJnYykgeworCWNhc2UgMzoKKwkJbGltaXQgPSBhcmd2WzJdOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgMjoKKwkJaGVhZCA9IGFyZ3ZbMV07CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSAxOgorCQl1cHN0cmVhbSA9IGFyZ3ZbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWN1cnJlbnRfYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwkJaWYgKCFjdXJyZW50X2JyYW5jaCB8fCAhY3VycmVudF9icmFuY2gtPm1lcmdlCisJCQkJCXx8ICFjdXJyZW50X2JyYW5jaC0+bWVyZ2VbMF0KKwkJCQkJfHwgIWN1cnJlbnRfYnJhbmNoLT5tZXJnZVswXS0+ZHN0KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIgorCQkJCQkiIHJlbW90ZSBicmFuY2gsIHBsZWFzZSIKKwkJCQkJIiBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iKSk7CisJCQl1c2FnZV93aXRoX29wdGlvbnMoY2hlcnJ5X3VzYWdlLCBvcHRpb25zKTsKKwkJfQorCisJCXVwc3RyZWFtID0gY3VycmVudF9icmFuY2gtPm1lcmdlWzBdLT5kc3Q7CisJfQorCisJaW5pdF9yZXZpc2lvbnMoJnJldnMsIHByZWZpeCk7CisJcmV2cy5tYXhfcGFyZW50cyA9IDE7CisKKwlpZiAoYWRkX3BlbmRpbmdfY29tbWl0KGhlYWQsICZyZXZzLCAwKSkKKwkJZGllKF8oIlVua25vd24gY29tbWl0ICVzIiksIGhlYWQpOworCWlmIChhZGRfcGVuZGluZ19jb21taXQodXBzdHJlYW0sICZyZXZzLCBVTklOVEVSRVNUSU5HKSkKKwkJZGllKF8oIlVua25vd24gY29tbWl0ICVzIiksIHVwc3RyZWFtKTsKKworCS8qIERvbid0IHNheSBhbnl0aGluZyBpZiBoZWFkIGFuZCB1cHN0cmVhbSBhcmUgdGhlIHNhbWUuICovCisJaWYgKHJldnMucGVuZGluZy5uciA9PSAyKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm8gPSByZXZzLnBlbmRpbmcub2JqZWN0czsKKwkJaWYgKGhhc2hjbXAob1swXS5pdGVtLT5zaGExLCBvWzFdLml0ZW0tPnNoYTEpID09IDApCisJCQlyZXR1cm4gMDsKKwl9CisKKwlnZXRfcGF0Y2hfaWRzKCZyZXZzLCAmaWRzKTsKKworCWlmIChsaW1pdCAmJiBhZGRfcGVuZGluZ19jb21taXQobGltaXQsICZyZXZzLCBVTklOVEVSRVNUSU5HKSkKKwkJZGllKF8oIlVua25vd24gY29tbWl0ICVzIiksIGxpbWl0KTsKKworCS8qIHJldmVyc2UgdGhlIGxpc3Qgb2YgY29tbWl0cyAqLworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldnMpKSAhPSBOVUxMKSB7CisJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsICZsaXN0KTsKKwl9CisKKwl3aGlsZSAobGlzdCkgeworCQljaGFyIHNpZ24gPSAnKyc7CisKKwkJY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJaWYgKGhhc19jb21taXRfcGF0Y2hfaWQoY29tbWl0LCAmaWRzKSkKKwkJCXNpZ24gPSAnLSc7CisJCXByaW50X2NvbW1pdChzaWduLCBjb21taXQsIHZlcmJvc2UsIGFiYnJldik7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKworCWZyZWVfcGF0Y2hfaWRzKCZpZHMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9scy1maWxlcy5jIGIvYnVpbHRpbi9scy1maWxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDM0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2xzLWZpbGVzLmMKQEAgLTAsMCArMSw2MDMgQEAKKy8qCisgKiBUaGlzIG1lcmdlcyB0aGUgZmlsZSBsaXN0aW5nIGluIHRoZSBkaXJlY3RvcnkgY2FjaGUgaW5kZXgKKyAqIHdpdGggdGhlIGFjdHVhbCB3b3JraW5nIGRpcmVjdG9yeSBsaXN0LCBhbmQgc2hvd3MgZGlmZmVyZW50CisgKiBjb21iaW5hdGlvbnMgb2YgdGhlIHR3by4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RhdGljIGludCBhYmJyZXY7CitzdGF0aWMgaW50IHNob3dfZGVsZXRlZDsKK3N0YXRpYyBpbnQgc2hvd19jYWNoZWQ7CitzdGF0aWMgaW50IHNob3dfb3RoZXJzOworc3RhdGljIGludCBzaG93X3N0YWdlOworc3RhdGljIGludCBzaG93X3VubWVyZ2VkOworc3RhdGljIGludCBzaG93X3Jlc29sdmVfdW5kbzsKK3N0YXRpYyBpbnQgc2hvd19tb2RpZmllZDsKK3N0YXRpYyBpbnQgc2hvd19raWxsZWQ7CitzdGF0aWMgaW50IHNob3dfdmFsaWRfYml0Oworc3RhdGljIGludCBsaW5lX3Rlcm1pbmF0b3IgPSAnXG4nOworc3RhdGljIGludCBkZWJ1Z19tb2RlOworCitzdGF0aWMgY29uc3QgY2hhciAqcHJlZml4Oworc3RhdGljIGludCBtYXhfcHJlZml4X2xlbjsKK3N0YXRpYyBpbnQgcHJlZml4X2xlbjsKK3N0YXRpYyBjb25zdCBjaGFyICoqcGF0aHNwZWM7CitzdGF0aWMgaW50IGVycm9yX3VubWF0Y2g7CitzdGF0aWMgY2hhciAqcHNfbWF0Y2hlZDsKK3N0YXRpYyBjb25zdCBjaGFyICp3aXRoX3RyZWU7CitzdGF0aWMgaW50IGV4Y19naXZlbjsKKworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19jYWNoZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfdW5tZXJnZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfcmVtb3ZlZCA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19vdGhlciA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19raWxsZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfbW9kaWZpZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfc2tpcF93b3JrdHJlZSA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19yZXNvbHZlX3VuZG8gPSAiIjsKKworc3RhdGljIHZvaWQgd3JpdGVfbmFtZShjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuKQoreworCXdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKG5hbWUsIGxlbiwgcHJlZml4LCBwcmVmaXhfbGVuLCBzdGRvdXQsCisJCQlsaW5lX3Rlcm1pbmF0b3IpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2Rpcl9lbnRyeShjb25zdCBjaGFyICp0YWcsIHN0cnVjdCBkaXJfZW50cnkgKmVudCkKK3sKKwlpbnQgbGVuID0gbWF4X3ByZWZpeF9sZW47CisKKwlpZiAobGVuID49IGVudC0+bGVuKQorCQlkaWUoImdpdCBscy1maWxlczogaW50ZXJuYWwgZXJyb3IgLSBkaXJlY3RvcnkgZW50cnkgbm90IHN1cGVyc2V0IG9mIHByZWZpeCIpOworCisJaWYgKCFtYXRjaF9wYXRoc3BlYyhwYXRoc3BlYywgZW50LT5uYW1lLCBlbnQtPmxlbiwgbGVuLCBwc19tYXRjaGVkKSkKKwkJcmV0dXJuOworCisJZnB1dHModGFnLCBzdGRvdXQpOworCXdyaXRlX25hbWUoZW50LT5uYW1lLCBlbnQtPmxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb3RoZXJfZmlsZXMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpcl9lbnRyeSAqZW50ID0gZGlyLT5lbnRyaWVzW2ldOworCQlpZiAoIWNhY2hlX25hbWVfaXNfb3RoZXIoZW50LT5uYW1lLCBlbnQtPmxlbikpCisJCQljb250aW51ZTsKKwkJc2hvd19kaXJfZW50cnkodGFnX290aGVyLCBlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19raWxsZWRfZmlsZXMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaXJfZW50cnkgKmVudCA9IGRpci0+ZW50cmllc1tpXTsKKwkJY2hhciAqY3AsICpzcDsKKwkJaW50IHBvcywgbGVuLCBraWxsZWQgPSAwOworCisJCWZvciAoY3AgPSBlbnQtPm5hbWU7IGNwIC0gZW50LT5uYW1lIDwgZW50LT5sZW47IGNwID0gc3AgKyAxKSB7CisJCQlzcCA9IHN0cmNocihjcCwgJy8nKTsKKwkJCWlmICghc3ApIHsKKwkJCQkvKiBJZiBlbnQtPm5hbWUgaXMgcHJlZml4IG9mIGFuIGVudHJ5IGluIHRoZQorCQkJCSAqIGNhY2hlLCBpdCB3aWxsIGJlIGtpbGxlZC4KKwkJCQkgKi8KKwkJCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhlbnQtPm5hbWUsIGVudC0+bGVuKTsKKwkJCQlpZiAoMCA8PSBwb3MpCisJCQkJCWRpZSgiYnVnIGluIHNob3cta2lsbGVkLWZpbGVzIik7CisJCQkJcG9zID0gLXBvcyAtIDE7CisJCQkJd2hpbGUgKHBvcyA8IGFjdGl2ZV9uciAmJgorCQkJCSAgICAgICBjZV9zdGFnZShhY3RpdmVfY2FjaGVbcG9zXSkpCisJCQkJCXBvcysrOyAvKiBza2lwIHVubWVyZ2VkICovCisJCQkJaWYgKGFjdGl2ZV9uciA8PSBwb3MpCisJCQkJCWJyZWFrOworCQkJCS8qIHBvcyBwb2ludHMgYXQgYSBuYW1lIGltbWVkaWF0ZWx5IGFmdGVyCisJCQkJICogZW50LT5uYW1lIGluIHRoZSBjYWNoZS4gIERvZXMgaXQgZXhwZWN0CisJCQkJICogZW50LT5uYW1lIHRvIGJlIGEgZGlyZWN0b3J5PworCQkJCSAqLworCQkJCWxlbiA9IGNlX25hbWVsZW4oYWN0aXZlX2NhY2hlW3Bvc10pOworCQkJCWlmICgoZW50LT5sZW4gPCBsZW4pICYmCisJCQkJICAgICFzdHJuY21wKGFjdGl2ZV9jYWNoZVtwb3NdLT5uYW1lLAorCQkJCQkgICAgIGVudC0+bmFtZSwgZW50LT5sZW4pICYmCisJCQkJICAgIGFjdGl2ZV9jYWNoZVtwb3NdLT5uYW1lW2VudC0+bGVuXSA9PSAnLycpCisJCQkJCWtpbGxlZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoMCA8PSBjYWNoZV9uYW1lX3BvcyhlbnQtPm5hbWUsIHNwIC0gZW50LT5uYW1lKSkgeworCQkJCS8qIElmIGFueSBvZiB0aGUgbGVhZGluZyBkaXJlY3RvcmllcyBpbgorCQkJCSAqIGVudC0+bmFtZSBpcyByZWdpc3RlcmVkIGluIHRoZSBjYWNoZSwKKwkJCQkgKiBlbnQtPm5hbWUgd2lsbCBiZSBraWxsZWQuCisJCQkJICovCisJCQkJa2lsbGVkID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoa2lsbGVkKQorCQkJc2hvd19kaXJfZW50cnkodGFnX2tpbGxlZCwgZGlyLT5lbnRyaWVzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY2VfZW50cnkoY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWludCBsZW4gPSBtYXhfcHJlZml4X2xlbjsKKworCWlmIChsZW4gPj0gY2VfbmFtZWxlbihjZSkpCisJCWRpZSgiZ2l0IGxzLWZpbGVzOiBpbnRlcm5hbCBlcnJvciAtIGNhY2hlIGVudHJ5IG5vdCBzdXBlcnNldCBvZiBwcmVmaXgiKTsKKworCWlmICghbWF0Y2hfcGF0aHNwZWMocGF0aHNwZWMsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgbGVuLCBwc19tYXRjaGVkKSkKKwkJcmV0dXJuOworCisJaWYgKHRhZyAmJiAqdGFnICYmIHNob3dfdmFsaWRfYml0ICYmCisJICAgIChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkpIHsKKwkJc3RhdGljIGNoYXIgYWx0dGFnWzRdOworCQltZW1jcHkoYWx0dGFnLCB0YWcsIDMpOworCQlpZiAoaXNhbHBoYSh0YWdbMF0pKQorCQkJYWx0dGFnWzBdID0gdG9sb3dlcih0YWdbMF0pOworCQllbHNlIGlmICh0YWdbMF0gPT0gJz8nKQorCQkJYWx0dGFnWzBdID0gJyEnOworCQllbHNlIHsKKwkJCWFsdHRhZ1swXSA9ICd2JzsKKwkJCWFsdHRhZ1sxXSA9IHRhZ1swXTsKKwkJCWFsdHRhZ1syXSA9ICcgJzsKKwkJCWFsdHRhZ1szXSA9IDA7CisJCX0KKwkJdGFnID0gYWx0dGFnOworCX0KKworCWlmICghc2hvd19zdGFnZSkgeworCQlmcHV0cyh0YWcsIHN0ZG91dCk7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCIlcyUwNm8gJXMgJWRcdCIsCisJCSAgICAgICB0YWcsCisJCSAgICAgICBjZS0+Y2VfbW9kZSwKKwkJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldihjZS0+c2hhMSxhYmJyZXYpLAorCQkgICAgICAgY2Vfc3RhZ2UoY2UpKTsKKwl9CisJd3JpdGVfbmFtZShjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpOworCWlmIChkZWJ1Z19tb2RlKSB7CisJCXByaW50ZigiICBjdGltZTogJWQ6JWRcbiIsIGNlLT5jZV9jdGltZS5zZWMsIGNlLT5jZV9jdGltZS5uc2VjKTsKKwkJcHJpbnRmKCIgIG10aW1lOiAlZDolZFxuIiwgY2UtPmNlX210aW1lLnNlYywgY2UtPmNlX210aW1lLm5zZWMpOworCQlwcmludGYoIiAgZGV2OiAlZFx0aW5vOiAlZFxuIiwgY2UtPmNlX2RldiwgY2UtPmNlX2lubyk7CisJCXByaW50ZigiICB1aWQ6ICVkXHRnaWQ6ICVkXG4iLCBjZS0+Y2VfdWlkLCBjZS0+Y2VfZ2lkKTsKKwkJcHJpbnRmKCIgIHNpemU6ICVkXHRmbGFnczogJXhcbiIsIGNlLT5jZV9zaXplLCBjZS0+Y2VfZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19ydV9pbmZvKHZvaWQpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwlpZiAoIXRoZV9pbmRleC5yZXNvbHZlX3VuZG8pCisJCXJldHVybjsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgdGhlX2luZGV4LnJlc29sdmVfdW5kbykgeworCQljb25zdCBjaGFyICpwYXRoID0gaXRlbS0+c3RyaW5nOworCQlzdHJ1Y3QgcmVzb2x2ZV91bmRvX2luZm8gKnVpID0gaXRlbS0+dXRpbDsKKwkJaW50IGksIGxlbjsKKworCQlsZW4gPSBzdHJsZW4ocGF0aCk7CisJCWlmIChsZW4gPCBtYXhfcHJlZml4X2xlbikKKwkJCWNvbnRpbnVlOyAvKiBvdXRzaWRlIG9mIHRoZSBwcmVmaXggKi8KKwkJaWYgKCFtYXRjaF9wYXRoc3BlYyhwYXRoc3BlYywgcGF0aCwgbGVuLCBtYXhfcHJlZml4X2xlbiwgcHNfbWF0Y2hlZCkpCisJCQljb250aW51ZTsgLyogdW5pbnRlcmVzdGVkICovCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCWlmICghdWktPm1vZGVbaV0pCisJCQkJY29udGludWU7CisJCQlwcmludGYoIiVzJTA2byAlcyAlZFx0IiwgdGFnX3Jlc29sdmVfdW5kbywgdWktPm1vZGVbaV0sCisJCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KHVpLT5zaGExW2ldLCBhYmJyZXYpLAorCQkJICAgICAgIGkgKyAxKTsKKwkJCXdyaXRlX25hbWUocGF0aCwgbGVuKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBjZV9leGNsdWRlZChzdHJ1Y3QgcGF0aF9leGNsdWRlX2NoZWNrICpjaGVjaywgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpbnQgZHR5cGUgPSBjZV90b19kdHlwZShjZSk7CisJcmV0dXJuIHBhdGhfZXhjbHVkZWQoY2hlY2ssIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgJmR0eXBlKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19maWxlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKQoreworCWludCBpOworCXN0cnVjdCBwYXRoX2V4Y2x1ZGVfY2hlY2sgY2hlY2s7CisKKwlpZiAoKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSkKKwkJcGF0aF9leGNsdWRlX2NoZWNrX2luaXQoJmNoZWNrLCBkaXIpOworCisJLyogRm9yIGNhY2hlZC9kZWxldGVkIGZpbGVzIHdlIGRvbid0IG5lZWQgdG8gZXZlbiBkbyB0aGUgcmVhZGRpciAqLworCWlmIChzaG93X290aGVycyB8fCBzaG93X2tpbGxlZCkgeworCQlmaWxsX2RpcmVjdG9yeShkaXIsIHBhdGhzcGVjKTsKKwkJaWYgKHNob3dfb3RoZXJzKQorCQkJc2hvd19vdGhlcl9maWxlcyhkaXIpOworCQlpZiAoc2hvd19raWxsZWQpCisJCQlzaG93X2tpbGxlZF9maWxlcyhkaXIpOworCX0KKwlpZiAoc2hvd19jYWNoZWQgfCBzaG93X3N0YWdlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJCWlmICgoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpICYmCisJCQkgICAgIWNlX2V4Y2x1ZGVkKCZjaGVjaywgY2UpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHNob3dfdW5tZXJnZWQgJiYgIWNlX3N0YWdlKGNlKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpCisJCQkJY29udGludWU7CisJCQlzaG93X2NlX2VudHJ5KGNlX3N0YWdlKGNlKSA/IHRhZ191bm1lcmdlZCA6CisJCQkJKGNlX3NraXBfd29ya3RyZWUoY2UpID8gdGFnX3NraXBfd29ya3RyZWUgOiB0YWdfY2FjaGVkKSwgY2UpOworCQl9CisJfQorCWlmIChzaG93X2RlbGV0ZWQgfCBzaG93X21vZGlmaWVkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJCXN0cnVjdCBzdGF0IHN0OworCQkJaW50IGVycjsKKwkJCWlmICgoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpICYmCisJCQkgICAgIWNlX2V4Y2x1ZGVkKCZjaGVjaywgY2UpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJCQljb250aW51ZTsKKwkJCWVyciA9IGxzdGF0KGNlLT5uYW1lLCAmc3QpOworCQkJaWYgKHNob3dfZGVsZXRlZCAmJiBlcnIpCisJCQkJc2hvd19jZV9lbnRyeSh0YWdfcmVtb3ZlZCwgY2UpOworCQkJaWYgKHNob3dfbW9kaWZpZWQgJiYgY2VfbW9kaWZpZWQoY2UsICZzdCwgMCkpCisJCQkJc2hvd19jZV9lbnRyeSh0YWdfbW9kaWZpZWQsIGNlKTsKKwkJfQorCX0KKworCWlmICgoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpKQorCQlwYXRoX2V4Y2x1ZGVfY2hlY2tfY2xlYXIoJmNoZWNrKTsKK30KKworLyoKKyAqIFBydW5lIHRoZSBpbmRleCB0byBvbmx5IGNvbnRhaW4gc3R1ZmYgc3RhcnRpbmcgd2l0aCAicHJlZml4IgorICovCitzdGF0aWMgdm9pZCBwcnVuZV9jYWNoZShjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHByZWZpeCwgbWF4X3ByZWZpeF9sZW4pOworCXVuc2lnbmVkIGludCBmaXJzdCwgbGFzdDsKKworCWlmIChwb3MgPCAwKQorCQlwb3MgPSAtcG9zLTE7CisJbWVtbW92ZShhY3RpdmVfY2FjaGUsIGFjdGl2ZV9jYWNoZSArIHBvcywKKwkJKGFjdGl2ZV9uciAtIHBvcykgKiBzaXplb2Yoc3RydWN0IGNhY2hlX2VudHJ5ICopKTsKKwlhY3RpdmVfbnIgLT0gcG9zOworCWZpcnN0ID0gMDsKKwlsYXN0ID0gYWN0aXZlX25yOworCXdoaWxlIChsYXN0ID4gZmlyc3QpIHsKKwkJaW50IG5leHQgPSAobGFzdCArIGZpcnN0KSA+PiAxOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW25leHRdOworCQlpZiAoIXN0cm5jbXAoY2UtPm5hbWUsIHByZWZpeCwgbWF4X3ByZWZpeF9sZW4pKSB7CisJCQlmaXJzdCA9IG5leHQrMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWxhc3QgPSBuZXh0OworCX0KKwlhY3RpdmVfbnIgPSBsYXN0OworfQorCitzdGF0aWMgdm9pZCBzdHJpcF90cmFpbGluZ19zbGFzaF9mcm9tX3N1Ym1vZHVsZXModm9pZCkKK3sKKwljb25zdCBjaGFyICoqcDsKKworCWZvciAocCA9IHBhdGhzcGVjOyAqcCAhPSBOVUxMOyBwKyspIHsKKwkJaW50IGxlbiA9IHN0cmxlbigqcCksIHBvczsKKworCQlpZiAobGVuIDwgMSB8fCAoKnApW2xlbiAtIDFdICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQlwb3MgPSBjYWNoZV9uYW1lX3BvcygqcCwgbGVuIC0gMSk7CisJCWlmIChwb3MgPj0gMCAmJiBTX0lTR0lUTElOSyhhY3RpdmVfY2FjaGVbcG9zXS0+Y2VfbW9kZSkpCisJCQkqcCA9IHhzdHJuZHVwKCpwLCBsZW4gLSAxKTsKKwl9Cit9CisKKy8qCisgKiBSZWFkIHRoZSB0cmVlIHNwZWNpZmllZCB3aXRoIC0td2l0aC10cmVlIG9wdGlvbgorICogKHR5cGljYWxseSwgSEVBRCkgaW50byBzdGFnZSAjMSBhbmQgdGhlbgorICogc3F1YXNoIHRoZW0gZG93biB0byBzdGFnZSAjMC4gIFRoaXMgaXMgdXNlZCBmb3IKKyAqIC0tZXJyb3ItdW5tYXRjaCB0byBsaXN0IGFuZCBjaGVjayB0aGUgcGF0aCBwYXR0ZXJucworICogdGhhdCB3ZXJlIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIFdlIGFyZSBub3QKKyAqIGdvaW5nIHRvIHdyaXRlIHRoaXMgaW5kZXggb3V0LgorICovCit2b2lkIG92ZXJsYXlfdHJlZV9vbl9jYWNoZShjb25zdCBjaGFyICp0cmVlX25hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmxhc3Rfc3RhZ2UwID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChnZXRfc2hhMSh0cmVlX25hbWUsIHNoYTEpKQorCQlkaWUoInRyZWUtaXNoICVzIG5vdCBmb3VuZC4iLCB0cmVlX25hbWUpOworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHNoYTEpOworCWlmICghdHJlZSkKKwkJZGllKCJiYWQgdHJlZS1pc2ggJXMiLCB0cmVlX25hbWUpOworCisJLyogSG9pc3QgdGhlIHVubWVyZ2VkIGVudHJpZXMgdXAgdG8gc3RhZ2UgIzMgdG8gbWFrZSByb29tICovCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWlmICghY2Vfc3RhZ2UoY2UpKQorCQkJY29udGludWU7CisJCWNlLT5jZV9mbGFncyB8PSBDRV9TVEFHRU1BU0s7CisJfQorCisJaWYgKHByZWZpeCkgeworCQlzdGF0aWMgY29uc3QgY2hhciAqKG1hdGNoYnVmWzJdKTsKKwkJbWF0Y2hidWZbMF0gPSBwcmVmaXg7CisJCW1hdGNoYnVmWzFdID0gTlVMTDsKKwkJaW5pdF9wYXRoc3BlYygmcGF0aHNwZWMsIG1hdGNoYnVmKTsKKwkJcGF0aHNwZWMuaXRlbXNbMF0udXNlX3dpbGRjYXJkID0gMDsKKwl9IGVsc2UKKwkJaW5pdF9wYXRoc3BlYygmcGF0aHNwZWMsIE5VTEwpOworCWlmIChyZWFkX3RyZWUodHJlZSwgMSwgJnBhdGhzcGVjKSkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCB0cmVlIGVudHJpZXMgJXMiLCB0cmVlX25hbWUpOworCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCXN3aXRjaCAoY2Vfc3RhZ2UoY2UpKSB7CisJCWNhc2UgMDoKKwkJCWxhc3Rfc3RhZ2UwID0gY2U7CisJCQkvKiBmYWxsdGhydSAqLworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCWNhc2UgMToKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBpcyBzdGFnZSAjMCBlbnRyeSBmb3IgdGhpcywgd2UgZG8gbm90CisJCQkgKiBuZWVkIHRvIHNob3cgaXQuICBXZSB1c2UgQ0VfVVBEQVRFIGJpdCB0byBtYXJrCisJCQkgKiBzdWNoIGFuIGVudHJ5LgorCQkJICovCisJCQlpZiAobGFzdF9zdGFnZTAgJiYKKwkJCSAgICAhc3RyY21wKGxhc3Rfc3RhZ2UwLT5uYW1lLCBjZS0+bmFtZSkpCisJCQkJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURTsKKwkJfQorCX0KK30KKworaW50IHJlcG9ydF9wYXRoX2Vycm9yKGNvbnN0IGNoYXIgKnBzX21hdGNoZWQsIGNvbnN0IGNoYXIgKipwYXRoc3BlYywgY29uc3QgY2hhciAqcHJlZml4KQoreworCS8qCisJICogTWFrZSBzdXJlIGFsbCBwYXRoc3BlYyBtYXRjaGVkOyBvdGhlcndpc2UgaXQgaXMgYW4gZXJyb3IuCisJICovCisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG51bSwgZXJyb3JzID0gMDsKKwlmb3IgKG51bSA9IDA7IHBhdGhzcGVjW251bV07IG51bSsrKSB7CisJCWludCBvdGhlciwgZm91bmRfZHVwOworCisJCWlmIChwc19tYXRjaGVkW251bV0pCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogVGhlIGNhbGxlciBtaWdodCBoYXZlIGZlZCBpZGVudGljYWwgcGF0aHNwZWMKKwkJICogdHdpY2UuICBEbyBub3QgYmFyZiBvbiBzdWNoIGEgbWlzdGFrZS4KKwkJICovCisJCWZvciAoZm91bmRfZHVwID0gb3RoZXIgPSAwOworCQkgICAgICFmb3VuZF9kdXAgJiYgcGF0aHNwZWNbb3RoZXJdOworCQkgICAgIG90aGVyKyspIHsKKwkJCWlmIChvdGhlciA9PSBudW0gfHwgIXBzX21hdGNoZWRbb3RoZXJdKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFzdHJjbXAocGF0aHNwZWNbb3RoZXJdLCBwYXRoc3BlY1tudW1dKSkKKwkJCQkvKgorCQkJCSAqIE9rLCB3ZSBoYXZlIGEgbWF0Y2ggYWxyZWFkeS4KKwkJCQkgKi8KKwkJCQlmb3VuZF9kdXAgPSAxOworCQl9CisJCWlmIChmb3VuZF9kdXApCisJCQljb250aW51ZTsKKworCQluYW1lID0gcXVvdGVfcGF0aF9yZWxhdGl2ZShwYXRoc3BlY1tudW1dLCAtMSwgJnNiLCBwcmVmaXgpOworCQllcnJvcigicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdC4iLAorCQkgICAgICBuYW1lKTsKKwkJZXJyb3JzKys7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIGVycm9yczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsc19maWxlc191c2FnZVtdID0geworCU5fKCJnaXQgbHMtZmlsZXMgW29wdGlvbnNdIFs8ZmlsZT4uLi5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBvcHRpb25fcGFyc2Vfeihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWxpbmVfdGVybWluYXRvciA9IHVuc2V0ID8gJ1xuJyA6ICdcMCc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfZXhjbHVkZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGV4Y2x1ZGVfbGlzdCAqbGlzdCA9IG9wdC0+dmFsdWU7CisKKwlleGNfZ2l2ZW4gPSAxOworCWFkZF9leGNsdWRlKGFyZywgIiIsIDAsIGxpc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2V4Y2x1ZGVfZnJvbShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyID0gb3B0LT52YWx1ZTsKKworCWV4Y19naXZlbiA9IDE7CisJYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZShkaXIsIGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfZXhjbHVkZV9zdGFuZGFyZChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCSBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyID0gb3B0LT52YWx1ZTsKKworCWV4Y19naXZlbiA9IDE7CisJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoZGlyKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX2xzX2ZpbGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqY21kX3ByZWZpeCkKK3sKKwlpbnQgcmVxdWlyZV93b3JrX3RyZWUgPSAwLCBzaG93X3RhZyA9IDA7CisJY29uc3QgY2hhciAqbWF4X3ByZWZpeDsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisJc3RydWN0IG9wdGlvbiBidWlsdGluX2xzX2ZpbGVzX29wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICd6JywgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCU5fKCJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2VfeiB9LAorCQlPUFRfQk9PTEVBTigndCcsIE5VTEwsICZzaG93X3RhZywKKwkJCU5fKCJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIikpLAorCQlPUFRfQk9PTEVBTigndicsIE5VTEwsICZzaG93X3ZhbGlkX2JpdCwKKwkJCU5fKCJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIpKSwKKwkJT1BUX0JPT0xFQU4oJ2MnLCAiY2FjaGVkIiwgJnNob3dfY2FjaGVkLAorCQkJTl8oInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIikpLAorCQlPUFRfQk9PTEVBTignZCcsICJkZWxldGVkIiwgJnNob3dfZGVsZXRlZCwKKwkJCU5fKCJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIpKSwKKwkJT1BUX0JPT0xFQU4oJ20nLCAibW9kaWZpZWQiLCAmc2hvd19tb2RpZmllZCwKKwkJCU5fKCJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiKSksCisJCU9QVF9CT09MRUFOKCdvJywgIm90aGVycyIsICZzaG93X290aGVycywKKwkJCU5fKCJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiKSksCisJCU9QVF9CSVQoJ2knLCAiaWdub3JlZCIsICZkaXIuZmxhZ3MsCisJCQlOXygic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiKSwKKwkJCURJUl9TSE9XX0lHTk9SRUQpLAorCQlPUFRfQk9PTEVBTigncycsICJzdGFnZSIsICZzaG93X3N0YWdlLAorCQkJTl8oInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IikpLAorCQlPUFRfQk9PTEVBTignaycsICJraWxsZWQiLCAmc2hvd19raWxsZWQsCisJCQlOXygic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIpKSwKKwkJT1BUX0JJVCgwLCAiZGlyZWN0b3J5IiwgJmRpci5mbGFncywKKwkJCU5fKCJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWUgb25seSIpLAorCQkJRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMpLAorCQlPUFRfTkVHQklUKDAsICJlbXB0eS1kaXJlY3RvcnkiLCAmZGlyLmZsYWdzLAorCQkJTl8oImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiKSwKKwkJCURJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTKSwKKwkJT1BUX0JPT0xFQU4oJ3UnLCAidW5tZXJnZWQiLCAmc2hvd191bm1lcmdlZCwKKwkJCU5fKCJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiKSksCisJCU9QVF9CT09MRUFOKDAsICJyZXNvbHZlLXVuZG8iLCAmc2hvd19yZXNvbHZlX3VuZG8sCisJCQkgICAgTl8oInNob3cgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ3gnLCAiZXhjbHVkZSIsICZkaXIuZXhjbHVkZV9saXN0W0VYQ19DTURMXSwgTl8oInBhdHRlcm4iKSwKKwkJCU5fKCJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iKSwKKwkJCTAsIG9wdGlvbl9wYXJzZV9leGNsdWRlIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnWCcsICJleGNsdWRlLWZyb20iLCAmZGlyLCBOXygiZmlsZSIpLAorCQkJTl8oImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iKSwKKwkJCTAsIG9wdGlvbl9wYXJzZV9leGNsdWRlX2Zyb20gfSwKKwkJT1BUX1NUUklORygwLCAiZXhjbHVkZS1wZXItZGlyZWN0b3J5IiwgJmRpci5leGNsdWRlX3Blcl9kaXIsIE5fKCJmaWxlIiksCisJCQlOXygicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiZXhjbHVkZS1zdGFuZGFyZCIsICZkaXIsIE5VTEwsCisJCQlOXygiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2VfZXhjbHVkZV9zdGFuZGFyZCB9LAorCQl7IE9QVElPTl9TRVRfSU5ULCAwLCAiZnVsbC1uYW1lIiwgJnByZWZpeF9sZW4sIE5VTEwsCisJCQlOXygibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCB9LAorCQlPUFRfQk9PTEVBTigwLCAiZXJyb3ItdW5tYXRjaCIsICZlcnJvcl91bm1hdGNoLAorCQkJTl8oImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIpKSwKKwkJT1BUX1NUUklORygwLCAid2l0aC10cmVlIiwgJndpdGhfdHJlZSwgTl8oInRyZWUtaXNoIiksCisJCQlOXygicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIpKSwKKwkJT1BUX19BQkJSRVYoJmFiYnJldiksCisJCU9QVF9CT09MRUFOKDAsICJkZWJ1ZyIsICZkZWJ1Z19tb2RlLCBOXygic2hvdyBkZWJ1Z2dpbmcgZGF0YSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxzX2ZpbGVzX3VzYWdlLCBidWlsdGluX2xzX2ZpbGVzX29wdGlvbnMpOworCisJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwlwcmVmaXggPSBjbWRfcHJlZml4OworCWlmIChwcmVmaXgpCisJCXByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9sc19maWxlc19vcHRpb25zLAorCQkJbHNfZmlsZXNfdXNhZ2UsIDApOworCWlmIChzaG93X3RhZyB8fCBzaG93X3ZhbGlkX2JpdCkgeworCQl0YWdfY2FjaGVkID0gIkggIjsKKwkJdGFnX3VubWVyZ2VkID0gIk0gIjsKKwkJdGFnX3JlbW92ZWQgPSAiUiAiOworCQl0YWdfbW9kaWZpZWQgPSAiQyAiOworCQl0YWdfb3RoZXIgPSAiPyAiOworCQl0YWdfa2lsbGVkID0gIksgIjsKKwkJdGFnX3NraXBfd29ya3RyZWUgPSAiUyAiOworCQl0YWdfcmVzb2x2ZV91bmRvID0gIlUgIjsKKwl9CisJaWYgKHNob3dfbW9kaWZpZWQgfHwgc2hvd19vdGhlcnMgfHwgc2hvd19kZWxldGVkIHx8IChkaXIuZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSB8fCBzaG93X2tpbGxlZCkKKwkJcmVxdWlyZV93b3JrX3RyZWUgPSAxOworCWlmIChzaG93X3VubWVyZ2VkKQorCQkvKgorCQkgKiBUaGVyZSdzIG5vIHBvaW50IGluIHNob3dpbmcgdW5tZXJnZWQgdW5sZXNzCisJCSAqIHlvdSBhbHNvIHNob3cgdGhlIHN0YWdlIGluZm9ybWF0aW9uLgorCQkgKi8KKwkJc2hvd19zdGFnZSA9IDE7CisJaWYgKGRpci5leGNsdWRlX3Blcl9kaXIpCisJCWV4Y19naXZlbiA9IDE7CisKKwlpZiAocmVxdWlyZV93b3JrX3RyZWUgJiYgIWlzX2luc2lkZV93b3JrX3RyZWUoKSkKKwkJc2V0dXBfd29ya190cmVlKCk7CisKKwlwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YpOworCisJLyogYmUgbmljZSB3aXRoIHN1Ym1vZHVsZSBwYXRocyBlbmRpbmcgaW4gYSBzbGFzaCAqLworCWlmIChwYXRoc3BlYykKKwkJc3RyaXBfdHJhaWxpbmdfc2xhc2hfZnJvbV9zdWJtb2R1bGVzKCk7CisKKwkvKiBGaW5kIGNvbW1vbiBwcmVmaXggZm9yIGFsbCBwYXRoc3BlYydzICovCisJbWF4X3ByZWZpeCA9IGNvbW1vbl9wcmVmaXgocGF0aHNwZWMpOworCW1heF9wcmVmaXhfbGVuID0gbWF4X3ByZWZpeCA/IHN0cmxlbihtYXhfcHJlZml4KSA6IDA7CisKKwkvKiBUcmVhdCB1bm1hdGNoaW5nIHBhdGhzcGVjIGVsZW1lbnRzIGFzIGVycm9ycyAqLworCWlmIChwYXRoc3BlYyAmJiBlcnJvcl91bm1hdGNoKSB7CisJCWludCBudW07CisJCWZvciAobnVtID0gMDsgcGF0aHNwZWNbbnVtXTsgbnVtKyspCisJCQk7CisJCXBzX21hdGNoZWQgPSB4Y2FsbG9jKDEsIG51bSk7CisJfQorCisJaWYgKChkaXIuZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSAmJiAhZXhjX2dpdmVuKQorCQlkaWUoImxzLWZpbGVzIC0taWdub3JlZCBuZWVkcyBzb21lIGV4Y2x1ZGUgcGF0dGVybiIpOworCisJLyogV2l0aCBubyBmbGFncywgd2UgZGVmYXVsdCB0byBzaG93aW5nIHRoZSBjYWNoZWQgZmlsZXMgKi8KKwlpZiAoIShzaG93X3N0YWdlIHwgc2hvd19kZWxldGVkIHwgc2hvd19vdGhlcnMgfCBzaG93X3VubWVyZ2VkIHwKKwkgICAgICBzaG93X2tpbGxlZCB8IHNob3dfbW9kaWZpZWQgfCBzaG93X3Jlc29sdmVfdW5kbykpCisJCXNob3dfY2FjaGVkID0gMTsKKworCWlmIChtYXhfcHJlZml4KQorCQlwcnVuZV9jYWNoZShtYXhfcHJlZml4KTsKKwlpZiAod2l0aF90cmVlKSB7CisJCS8qCisJCSAqIEJhc2ljIHNhbml0eSBjaGVjazsgc2hvdy1zdGFnZXMgYW5kIHNob3ctdW5tZXJnZWQKKwkJICogd291bGQgbm90IG1ha2UgYW55IHNlbnNlIHdpdGggdGhpcyBvcHRpb24uCisJCSAqLworCQlpZiAoc2hvd19zdGFnZSB8fCBzaG93X3VubWVyZ2VkKQorCQkJZGllKCJscy1maWxlcyAtLXdpdGgtdHJlZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtcyBvciAtdSIpOworCQlvdmVybGF5X3RyZWVfb25fY2FjaGUod2l0aF90cmVlLCBtYXhfcHJlZml4KTsKKwl9CisJc2hvd19maWxlcygmZGlyKTsKKwlpZiAoc2hvd19yZXNvbHZlX3VuZG8pCisJCXNob3dfcnVfaW5mbygpOworCisJaWYgKHBzX21hdGNoZWQpIHsKKwkJaW50IGJhZDsKKwkJYmFkID0gcmVwb3J0X3BhdGhfZXJyb3IocHNfbWF0Y2hlZCwgcGF0aHNwZWMsIHByZWZpeCk7CisJCWlmIChiYWQpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkRpZCB5b3UgZm9yZ2V0IHRvICdnaXQgYWRkJz9cbiIpOworCisJCXJldHVybiBiYWQgPyAxIDogMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbHMtcmVtb3RlLmMgYi9idWlsdGluL2xzLXJlbW90ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZTgzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2xzLXJlbW90ZS5jCkBAIC0wLDAgKzEsMTM2IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGxzX3JlbW90ZV91c2FnZVtdID0KKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSAgWy11IDxleGVjPiB8IC0tdXBsb2FkLXBhY2sgPGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcXwtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIjsKKworLyoKKyAqIElzIHRoZXJlIG9uZSBhbW9uZyB0aGUgbGlzdCBvZiBwYXR0ZXJucyB0aGF0IG1hdGNoIHRoZSB0YWlsIHBhcnQKKyAqIG9mIHRoZSBwYXRoPworICovCitzdGF0aWMgaW50IHRhaWxfbWF0Y2goY29uc3QgY2hhciAqKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqcDsKKwljaGFyIHBhdGhidWZbUEFUSF9NQVhdOworCisJaWYgKCFwYXR0ZXJuKQorCQlyZXR1cm4gMTsgLyogbm8gcmVzdHJpY3Rpb24gKi8KKworCWlmIChzbnByaW50ZihwYXRoYnVmLCBzaXplb2YocGF0aGJ1ZiksICIvJXMiLCBwYXRoKSA+IHNpemVvZihwYXRoYnVmKSkKKwkJcmV0dXJuIGVycm9yKCJpbnNhbmVseSBsb25nIHJlZiAlLipzLi4uIiwgMjAsIHBhdGgpOworCXdoaWxlICgocCA9ICoocGF0dGVybisrKSkgIT0gTlVMTCkgeworCQlpZiAoIWZubWF0Y2gocCwgcGF0aGJ1ZiwgMCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfbHNfcmVtb3RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCWNvbnN0IGNoYXIgKmRlc3QgPSBOVUxMOworCXVuc2lnbmVkIGZsYWdzID0gMDsKKwlpbnQgZ2V0X3VybCA9IDA7CisJaW50IHF1aWV0ID0gMDsKKwlpbnQgc3RhdHVzID0gMDsKKwljb25zdCBjaGFyICp1cGxvYWRwYWNrID0gTlVMTDsKKwljb25zdCBjaGFyICoqcGF0dGVybiA9IE5VTEw7CisKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OworCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcCgiLWgiLCBhcmd2WzFdKSkKKwkJdXNhZ2UobHNfcmVtb3RlX3VzYWdlKTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKworCQlpZiAoKmFyZyA9PSAnLScpIHsKKwkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tdXBsb2FkLXBhY2s9IikpIHsKKwkJCQl1cGxvYWRwYWNrID0gYXJnICsgMTQ7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWV4ZWM9IikpIHsKKwkJCQl1cGxvYWRwYWNrID0gYXJnICsgNzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKCItLXRhZ3MiLCBhcmcpIHx8ICFzdHJjbXAoIi10IiwgYXJnKSkgeworCQkJCWZsYWdzIHw9IFJFRl9UQUdTOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoIi0taGVhZHMiLCBhcmcpIHx8ICFzdHJjbXAoIi1oIiwgYXJnKSkgeworCQkJCWZsYWdzIHw9IFJFRl9IRUFEUzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKCItLXJlZnMiLCBhcmcpKSB7CisJCQkJZmxhZ3MgfD0gUkVGX05PUk1BTDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKCItLXF1aWV0IiwgYXJnKSB8fCAhc3RyY21wKCItcSIsIGFyZykpIHsKKwkJCQlxdWlldCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcCgiLS1nZXQtdXJsIiwgYXJnKSkgeworCQkJCWdldF91cmwgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoIi0tZXhpdC1jb2RlIiwgYXJnKSkgeworCQkJCS8qIHJldHVybiB0aGlzIGNvZGUgaWYgbm8gcmVmcyBhcmUgcmVwb3J0ZWQgKi8KKwkJCQlzdGF0dXMgPSAyOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJdXNhZ2UobHNfcmVtb3RlX3VzYWdlKTsKKwkJfQorCQlkZXN0ID0gYXJnOworCQlpKys7CisJCWJyZWFrOworCX0KKworCWlmIChhcmd2W2ldKSB7CisJCWludCBqOworCQlwYXR0ZXJuID0geGNhbGxvYyhzaXplb2YoY29uc3QgY2hhciAqKSwgYXJnYyAtIGkgKyAxKTsKKwkJZm9yIChqID0gaTsgaiA8IGFyZ2M7IGorKykgeworCQkJaW50IGxlbiA9IHN0cmxlbihhcmd2W2pdKTsKKwkJCWNoYXIgKnAgPSB4bWFsbG9jKGxlbiArIDMpOworCQkJc3ByaW50ZihwLCAiKi8lcyIsIGFyZ3Zbal0pOworCQkJcGF0dGVybltqIC0gaV0gPSBwOworCQl9CisJfQorCXJlbW90ZSA9IHJlbW90ZV9nZXQoZGVzdCk7CisJaWYgKCFyZW1vdGUpIHsKKwkJaWYgKGRlc3QpCisJCQlkaWUoImJhZCByZXBvc2l0b3J5ICclcyciLCBkZXN0KTsKKwkJZGllKCJObyByZW1vdGUgY29uZmlndXJlZCB0byBsaXN0IHJlZnMgZnJvbS4iKTsKKwl9CisJaWYgKCFyZW1vdGUtPnVybF9ucikKKwkJZGllKCJyZW1vdGUgJXMgaGFzIG5vIGNvbmZpZ3VyZWQgVVJMIiwgZGVzdCk7CisKKwlpZiAoZ2V0X3VybCkgeworCQlwcmludGYoIiVzXG4iLCAqcmVtb3RlLT51cmwpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgTlVMTCk7CisJaWYgKHVwbG9hZHBhY2sgIT0gTlVMTCkKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVVBMT0FEUEFDSywgdXBsb2FkcGFjayk7CisKKwlyZWYgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCk7CisJaWYgKHRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCkpCisJCXJldHVybiAxOworCisJaWYgKCFkZXN0ICYmICFxdWlldCkKKwkJZnByaW50ZihzdGRlcnIsICJGcm9tICVzXG4iLCAqcmVtb3RlLT51cmwpOworCWZvciAoIDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJaWYgKCFjaGVja19yZWZfdHlwZShyZWYsIGZsYWdzKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRhaWxfbWF0Y2gocGF0dGVybiwgcmVmLT5uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlwcmludGYoIiVzCSVzXG4iLCBzaGExX3RvX2hleChyZWYtPm9sZF9zaGExKSwgcmVmLT5uYW1lKTsKKwkJc3RhdHVzID0gMDsgLyogd2UgZm91bmQgc29tZXRoaW5nICovCisJfQorCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2xzLXRyZWUuYyBiL2J1aWx0aW4vbHMtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNWMxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2xzLXRyZWUuYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CisjZGVmaW5lIExTX1JFQ1VSU0lWRSAxCisjZGVmaW5lIExTX1RSRUVfT05MWSAyCisjZGVmaW5lIExTX1NIT1dfVFJFRVMgNAorI2RlZmluZSBMU19OQU1FX09OTFkgOAorI2RlZmluZSBMU19TSE9XX1NJWkUgMTYKK3N0YXRpYyBpbnQgYWJicmV2Oworc3RhdGljIGludCBsc19vcHRpb25zOworc3RhdGljIHN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKK3N0YXRpYyBpbnQgY2hvbXBfcHJlZml4Oworc3RhdGljIGNvbnN0IGNoYXIgKmxzX3RyZWVfcHJlZml4OworCitzdGF0aWMgY29uc3QgIGNoYXIgKiBjb25zdCBsc190cmVlX3VzYWdlW10gPSB7CisJTl8oImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHNob3dfcmVjdXJzaXZlKGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwljb25zdCBjaGFyICoqczsKKworCWlmIChsc19vcHRpb25zICYgTFNfUkVDVVJTSVZFKQorCQlyZXR1cm4gMTsKKworCXMgPSBwYXRoc3BlYy5yYXc7CisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqc3BlYyA9ICpzKys7CisJCWludCBsZW4sIHNwZWNsZW47CisKKwkJaWYgKCFzcGVjKQorCQkJcmV0dXJuIDA7CisJCWlmIChzdHJuY21wKGJhc2UsIHNwZWMsIGJhc2VsZW4pKQorCQkJY29udGludWU7CisJCWxlbiA9IHN0cmxlbihwYXRobmFtZSk7CisJCXNwZWMgKz0gYmFzZWxlbjsKKwkJc3BlY2xlbiA9IHN0cmxlbihzcGVjKTsKKwkJaWYgKHNwZWNsZW4gPD0gbGVuKQorCQkJY29udGludWU7CisJCWlmIChzcGVjW2xlbl0gJiYgc3BlY1tsZW5dICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQlpZiAobWVtY21wKHBhdGhuYW1lLCBzcGVjLCBsZW4pKQorCQkJY29udGludWU7CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIGludCBzaG93X3RyZWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sCisJCWNvbnN0IGNoYXIgKnBhdGhuYW1lLCB1bnNpZ25lZCBtb2RlLCBpbnQgc3RhZ2UsIHZvaWQgKmNvbnRleHQpCit7CisJaW50IHJldHZhbCA9IDA7CisJY29uc3QgY2hhciAqdHlwZSA9IGJsb2JfdHlwZTsKKworCWlmIChTX0lTR0lUTElOSyhtb2RlKSkgeworCQkvKgorCQkgKiBNYXliZSB3ZSB3YW50IHRvIGhhdmUgc29tZSByZWN1cnNpdmUgdmVyc2lvbiBoZXJlPworCQkgKgorCQkgKiBTb21ldGhpbmcgc2ltaWxhciB0byB0aGlzIGluY29tcGxldGUgZXhhbXBsZToKKwkJICoKKwkJaWYgKHNob3dfc3VicHJvamVjdHMoYmFzZSwgYmFzZWxlbiwgcGF0aG5hbWUpKQorCQkJcmV0dmFsID0gUkVBRF9UUkVFX1JFQ1VSU0lWRTsKKwkJICoKKwkJICovCisJCXR5cGUgPSBjb21taXRfdHlwZTsKKwl9IGVsc2UgaWYgKFNfSVNESVIobW9kZSkpIHsKKwkJaWYgKHNob3dfcmVjdXJzaXZlKGJhc2UsIGJhc2VsZW4sIHBhdGhuYW1lKSkgeworCQkJcmV0dmFsID0gUkVBRF9UUkVFX1JFQ1VSU0lWRTsKKwkJCWlmICghKGxzX29wdGlvbnMgJiBMU19TSE9XX1RSRUVTKSkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCXR5cGUgPSB0cmVlX3R5cGU7CisJfQorCWVsc2UgaWYgKGxzX29wdGlvbnMgJiBMU19UUkVFX09OTFkpCisJCXJldHVybiAwOworCisJaWYgKGNob21wX3ByZWZpeCAmJgorCSAgICAoYmFzZWxlbiA8IGNob21wX3ByZWZpeCB8fCBtZW1jbXAobHNfdHJlZV9wcmVmaXgsIGJhc2UsIGNob21wX3ByZWZpeCkpKQorCQlyZXR1cm4gMDsKKworCWlmICghKGxzX29wdGlvbnMgJiBMU19OQU1FX09OTFkpKSB7CisJCWlmIChsc19vcHRpb25zICYgTFNfU0hPV19TSVpFKSB7CisJCQljaGFyIHNpemVfdGV4dFsyNF07CisJCQlpZiAoIXN0cmNtcCh0eXBlLCBibG9iX3R5cGUpKSB7CisJCQkJdW5zaWduZWQgbG9uZyBzaXplOworCQkJCWlmIChzaGExX29iamVjdF9pbmZvKHNoYTEsICZzaXplKSA9PSBPQkpfQkFEKQorCQkJCQlzdHJjcHkoc2l6ZV90ZXh0LCAiQkFEIik7CisJCQkJZWxzZQorCQkJCQlzbnByaW50ZihzaXplX3RleHQsIHNpemVvZihzaXplX3RleHQpLAorCQkJCQkJICIlbHUiLCBzaXplKTsKKwkJCX0gZWxzZQorCQkJCXN0cmNweShzaXplX3RleHQsICItIik7CisJCQlwcmludGYoIiUwNm8gJXMgJXMgJTdzXHQiLCBtb2RlLCB0eXBlLAorCQkJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBhYmJyZXYpLAorCQkJICAgICAgIHNpemVfdGV4dCk7CisJCX0gZWxzZQorCQkJcHJpbnRmKCIlMDZvICVzICVzXHQiLCBtb2RlLCB0eXBlLAorCQkJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBhYmJyZXYpKTsKKwl9CisJd3JpdGVfbmFtZV9xdW90ZWRwZngoYmFzZSArIGNob21wX3ByZWZpeCwgYmFzZWxlbiAtIGNob21wX3ByZWZpeCwKKwkJCSAgcGF0aG5hbWUsIHN0ZG91dCwgbGluZV90ZXJtaW5hdGlvbik7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IGNtZF9sc190cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IHRyZWUgKnRyZWU7CisJaW50IGksIGZ1bGxfdHJlZSA9IDA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBsc190cmVlX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgnZCcsIE5VTEwsICZsc19vcHRpb25zLCBOXygib25seSBzaG93IHRyZWVzIiksCisJCQlMU19UUkVFX09OTFkpLAorCQlPUFRfQklUKCdyJywgTlVMTCwgJmxzX29wdGlvbnMsIE5fKCJyZWN1cnNlIGludG8gc3VidHJlZXMiKSwKKwkJCUxTX1JFQ1VSU0lWRSksCisJCU9QVF9CSVQoJ3QnLCBOVUxMLCAmbHNfb3B0aW9ucywgTl8oInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciKSwKKwkJCUxTX1NIT1dfVFJFRVMpLAorCQlPUFRfU0VUX0lOVCgneicsIE5VTEwsICZsaW5lX3Rlcm1pbmF0aW9uLAorCQkJICAgIE5fKCJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIiksIDApLAorCQlPUFRfQklUKCdsJywgImxvbmciLCAmbHNfb3B0aW9ucywgTl8oImluY2x1ZGUgb2JqZWN0IHNpemUiKSwKKwkJCUxTX1NIT1dfU0laRSksCisJCU9QVF9CSVQoMCwgIm5hbWUtb25seSIsICZsc19vcHRpb25zLCBOXygibGlzdCBvbmx5IGZpbGVuYW1lcyIpLAorCQkJTFNfTkFNRV9PTkxZKSwKKwkJT1BUX0JJVCgwLCAibmFtZS1zdGF0dXMiLCAmbHNfb3B0aW9ucywgTl8oImxpc3Qgb25seSBmaWxlbmFtZXMiKSwKKwkJCUxTX05BTUVfT05MWSksCisJCU9QVF9TRVRfSU5UKDAsICJmdWxsLW5hbWUiLCAmY2hvbXBfcHJlZml4LAorCQkJICAgIE5fKCJ1c2UgZnVsbCBwYXRoIG5hbWVzIiksIDApLAorCQlPUFRfQk9PTEVBTigwLCAiZnVsbC10cmVlIiwgJmZ1bGxfdHJlZSwKKwkJCSAgICBOXygibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgIgorCQkJICAgICAgICIoaW1wbGllcyAtLWZ1bGwtbmFtZSkiKSksCisJCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWxzX3RyZWVfcHJlZml4ID0gcHJlZml4OworCWlmIChwcmVmaXggJiYgKnByZWZpeCkKKwkJY2hvbXBfcHJlZml4ID0gc3RybGVuKHByZWZpeCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGxzX3RyZWVfb3B0aW9ucywKKwkJCSAgICAgbHNfdHJlZV91c2FnZSwgMCk7CisJaWYgKGZ1bGxfdHJlZSkgeworCQlsc190cmVlX3ByZWZpeCA9IHByZWZpeCA9IE5VTEw7CisJCWNob21wX3ByZWZpeCA9IDA7CisJfQorCS8qIC1kIC1yIHNob3VsZCBpbXBseSAtdCwgYnV0IC1kIGJ5IGl0c2VsZiBzaG91bGQgbm90IGhhdmUgdG8uICovCisJaWYgKCAoTFNfVFJFRV9PTkxZfExTX1JFQ1VSU0lWRSkgPT0KKwkgICAgKChMU19UUkVFX09OTFl8TFNfUkVDVVJTSVZFKSAmIGxzX29wdGlvbnMpKQorCQlsc19vcHRpb25zIHw9IExTX1NIT1dfVFJFRVM7CisKKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhsc190cmVlX3VzYWdlLCBsc190cmVlX29wdGlvbnMpOworCWlmIChnZXRfc2hhMShhcmd2WzBdLCBzaGExKSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZ3ZbMF0pOworCisJaW5pdF9wYXRoc3BlYygmcGF0aHNwZWMsIGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YgKyAxKSk7CisJZm9yIChpID0gMDsgaSA8IHBhdGhzcGVjLm5yOyBpKyspCisJCXBhdGhzcGVjLml0ZW1zW2ldLnVzZV93aWxkY2FyZCA9IDA7CisJcGF0aHNwZWMuaGFzX3dpbGRjYXJkID0gMDsKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChzaGExKTsKKwlpZiAoIXRyZWUpCisJCWRpZSgibm90IGEgdHJlZSBvYmplY3QiKTsKKwlyZXR1cm4gISFyZWFkX3RyZWVfcmVjdXJzaXZlKHRyZWUsICIiLCAwLCAwLCAmcGF0aHNwZWMsIHNob3dfdHJlZSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21haWxpbmZvLmMgYi9idWlsdGluL21haWxpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyMzE0MAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWFpbGluZm8uYwpAQCAtMCwwICsxLDEwMzkgQEAKKy8qCisgKiBBbm90aGVyIHN0dXBpZCBwcm9ncmFtLCB0aGlzIG9uZSBwYXJzaW5nIHRoZSBoZWFkZXJzIG9mIGFuCisgKiBlbWFpbCB0byBmaWd1cmUgb3V0IGF1dGhvcnNoaXAgYW5kIHN1YmplY3QKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RhdGljIEZJTEUgKmNtaXRtc2csICpwYXRjaGZpbGUsICpmaW4sICpmb3V0OworCitzdGF0aWMgaW50IGtlZXBfc3ViamVjdDsKK3N0YXRpYyBpbnQga2VlcF9ub25fcGF0Y2hfYnJhY2tldHNfaW5fc3ViamVjdDsKK3N0YXRpYyBjb25zdCBjaGFyICptZXRhaW5mb19jaGFyc2V0Oworc3RhdGljIHN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworc3RhdGljIHN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworc3RhdGljIHN0cnVjdCBzdHJidWYgZW1haWwgPSBTVFJCVUZfSU5JVDsKKworc3RhdGljIGVudW0gIHsKKwlURV9ET05UQ0FSRSwgVEVfUVAsIFRFX0JBU0U2NAorfSB0cmFuc2Zlcl9lbmNvZGluZzsKKworc3RhdGljIHN0cnVjdCBzdHJidWYgY2hhcnNldCA9IFNUUkJVRl9JTklUOworc3RhdGljIGludCBwYXRjaF9saW5lczsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmICoqcF9oZHJfZGF0YSwgKipzX2hkcl9kYXRhOworc3RhdGljIGludCB1c2Vfc2Npc3NvcnM7CitzdGF0aWMgaW50IHVzZV9pbmJvZHlfaGVhZGVycyA9IDE7CisKKyNkZWZpbmUgTUFYX0hEUl9QQVJTRUQgMTAKKyNkZWZpbmUgTUFYX0JPVU5EQVJJRVMgNQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3NwYWNlKHN0cnVjdCBzdHJidWYgKnNiKTsKKworCitzdGF0aWMgdm9pZCBnZXRfc2FuZV9uYW1lKHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IHN0cmJ1ZiAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqZW1haWwpCit7CisJc3RydWN0IHN0cmJ1ZiAqc3JjID0gbmFtZTsKKwlpZiAobmFtZS0+bGVuIDwgMyB8fCA2MCA8IG5hbWUtPmxlbiB8fCBzdHJjaHIobmFtZS0+YnVmLCAnQCcpIHx8CisJCXN0cmNocihuYW1lLT5idWYsICc8JykgfHwgc3RyY2hyKG5hbWUtPmJ1ZiwgJz4nKSkKKwkJc3JjID0gZW1haWw7CisJZWxzZSBpZiAobmFtZSA9PSBvdXQpCisJCXJldHVybjsKKwlzdHJidWZfcmVzZXQob3V0KTsKKwlzdHJidWZfYWRkYnVmKG91dCwgc3JjKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfYm9ndXNfZnJvbShjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCS8qIEpvaG4gRG9lIDxqb2huZG9lPiAqLworCisJY2hhciAqYnJhLCAqa2V0OworCS8qIFRoaXMgaXMgZmFsbGJhY2ssIHNvIGRvIG5vdCBib3RoZXIgaWYgd2UgYWxyZWFkeSBoYXZlIGFuCisJICogZS1tYWlsIGFkZHJlc3MuCisJICovCisJaWYgKGVtYWlsLmxlbikKKwkJcmV0dXJuOworCisJYnJhID0gc3RyY2hyKGxpbmUtPmJ1ZiwgJzwnKTsKKwlpZiAoIWJyYSkKKwkJcmV0dXJuOworCWtldCA9IHN0cmNocihicmEsICc+Jyk7CisJaWYgKCFrZXQpCisJCXJldHVybjsKKworCXN0cmJ1Zl9yZXNldCgmZW1haWwpOworCXN0cmJ1Zl9hZGQoJmVtYWlsLCBicmEgKyAxLCBrZXQgLSBicmEgLSAxKTsKKworCXN0cmJ1Zl9yZXNldCgmbmFtZSk7CisJc3RyYnVmX2FkZCgmbmFtZSwgbGluZS0+YnVmLCBicmEgLSBsaW5lLT5idWYpOworCXN0cmJ1Zl90cmltKCZuYW1lKTsKKwlnZXRfc2FuZV9uYW1lKCZuYW1lLCAmbmFtZSwgJmVtYWlsKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2Zyb20oY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZnJvbSkKK3sKKwljaGFyICphdDsKKwlzaXplX3QgZWw7CisJc3RydWN0IHN0cmJ1ZiBmOworCisJc3RyYnVmX2luaXQoJmYsIGZyb20tPmxlbik7CisJc3RyYnVmX2FkZGJ1ZigmZiwgZnJvbSk7CisKKwlhdCA9IHN0cmNocihmLmJ1ZiwgJ0AnKTsKKwlpZiAoIWF0KSB7CisJCXBhcnNlX2JvZ3VzX2Zyb20oZnJvbSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFscmVhZHkgaGF2ZSBvbmUgZW1haWwsIGRvbid0IHRha2UgYW55IGNvbmZ1c2luZyBsaW5lcworCSAqLworCWlmIChlbWFpbC5sZW4gJiYgc3RyY2hyKGF0ICsgMSwgJ0AnKSkgeworCQlzdHJidWZfcmVsZWFzZSgmZik7CisJCXJldHVybjsKKwl9CisKKwkvKiBQaWNrIHVwIHRoZSBzdHJpbmcgYXJvdW5kICdAJywgcG9zc2libHkgZGVsaW1pdGVkIHdpdGggPD4KKwkgKiBwYWlyOyB0aGF0IGlzIHRoZSBlbWFpbCBwYXJ0LgorCSAqLworCXdoaWxlIChhdCA+IGYuYnVmKSB7CisJCWNoYXIgYyA9IGF0Wy0xXTsKKwkJaWYgKGlzc3BhY2UoYykpCisJCQlicmVhazsKKwkJaWYgKGMgPT0gJzwnKSB7CisJCQlhdFstMV0gPSAnICc7CisJCQlicmVhazsKKwkJfQorCQlhdC0tOworCX0KKwllbCA9IHN0cmNzcG4oYXQsICIgXG5cdFxyXHZcZj4iKTsKKwlzdHJidWZfcmVzZXQoJmVtYWlsKTsKKwlzdHJidWZfYWRkKCZlbWFpbCwgYXQsIGVsKTsKKwlzdHJidWZfcmVtb3ZlKCZmLCBhdCAtIGYuYnVmLCBlbCArIChhdFtlbF0gPyAxIDogMCkpOworCisJLyogVGhlIHJlbWFpbmRlciBpcyBuYW1lLiAgSXQgY291bGQgYmUKKwkgKgorCSAqIC0gIkpvaG4gRG9lIDxqb2huLmRvZUB4ej4iCQkJKGEpLCBvcgorCSAqIC0gImpvaG4uZG9lQHh6IChKb2huIERvZSkiCQkJKGIpLCBvcgorCSAqIC0gIkpvaG4gKHp6eikgRG9lIDxqb2huLmRvZUB4ej4gKENvbW1lbnQpIgkoYykKKwkgKgorCSAqIGJ1dCB3ZSBoYXZlIHJlbW92ZWQgdGhlIGVtYWlsIHBhcnQsIHNvCisJICoKKwkgKiAtIHJlbW92ZSBleHRyYSBzcGFjZXMgd2hpY2ggY291bGQgc3RheSBhZnRlciBlbWFpbCAoY2FzZSAnYycpLCBhbmQKKwkgKiAtIHRyaW0gZnJvbSBib3RoIGVuZHMsIHBvc3NpYmx5IHJlbW92aW5nIHRoZSAoKSBwYWlyIGF0IHRoZSBlbmQKKwkgKiAgIChjYXNlcyAnYScgYW5kICdiJykuCisJICovCisJY2xlYW51cF9zcGFjZSgmZik7CisJc3RyYnVmX3RyaW0oJmYpOworCWlmIChmLmJ1ZlswXSA9PSAnKCcgJiYgZi5sZW4gJiYgZi5idWZbZi5sZW4gLSAxXSA9PSAnKScpIHsKKwkJc3RyYnVmX3JlbW92ZSgmZiwgMCwgMSk7CisJCXN0cmJ1Zl9zZXRsZW4oJmYsIGYubGVuIC0gMSk7CisJfQorCisJZ2V0X3NhbmVfbmFtZSgmbmFtZSwgJmYsICZlbWFpbCk7CisJc3RyYnVmX3JlbGVhc2UoJmYpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfaGVhZGVyKHN0cnVjdCBzdHJidWYgKipvdXQsIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJaWYgKCEqb3V0KSB7CisJCSpvdXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJCXN0cmJ1Zl9pbml0KCpvdXQsIGxpbmUtPmxlbik7CisJfSBlbHNlCisJCXN0cmJ1Zl9yZXNldCgqb3V0KTsKKworCXN0cmJ1Zl9hZGRidWYoKm91dCwgbGluZSk7Cit9CisKKy8qIE5PVEUgTk9URSBOT1RFLiAgV2UgZG8gbm90IGNsYWltIHdlIGRvIGZ1bGwgTUlNRS4gIFdlIGp1c3QgYXR0ZW1wdAorICogdG8gaGF2ZSBlbm91Z2ggaGV1cmlzdGljcyB0byBncm9rIE1JTUUgZW5jb2RlZCBwYXRjaGVzIG9mdGVuIGZvdW5kCisgKiBvbiBvdXIgbWFpbGluZyBsaXN0cy4gIEZvciBleGFtcGxlLCB3ZSBkbyBub3QgZXZlbiB0cmVhdCBoZWFkZXIgbGluZXMKKyAqIGNhc2UgaW5zZW5zaXRpdmVseS4KKyAqLworCitzdGF0aWMgaW50IHNsdXJwX2F0dHIoY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqYXR0cikKK3sKKwljb25zdCBjaGFyICplbmRzLCAqYXAgPSBzdHJjYXNlc3RyKGxpbmUsIG5hbWUpOworCXNpemVfdCBzejsKKworCXN0cmJ1Zl9zZXRsZW4oYXR0ciwgMCk7CisJaWYgKCFhcCkKKwkJcmV0dXJuIDA7CisJYXAgKz0gc3RybGVuKG5hbWUpOworCWlmICgqYXAgPT0gJyInKSB7CisJCWFwKys7CisJCWVuZHMgPSAiXCIiOworCX0KKwllbHNlCisJCWVuZHMgPSAiOyBcdCI7CisJc3ogPSBzdHJjc3BuKGFwLCBlbmRzKTsKKwlzdHJidWZfYWRkKGF0dHIsIGFwLCBzeik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmICpjb250ZW50W01BWF9CT1VOREFSSUVTXTsKKworc3RhdGljIHN0cnVjdCBzdHJidWYgKipjb250ZW50X3RvcCA9IGNvbnRlbnQ7CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jb250ZW50X3R5cGUoc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpib3VuZGFyeSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKwlzdHJidWZfaW5pdChib3VuZGFyeSwgbGluZS0+bGVuKTsKKworCWlmIChzbHVycF9hdHRyKGxpbmUtPmJ1ZiwgImJvdW5kYXJ5PSIsIGJvdW5kYXJ5KSkgeworCQlzdHJidWZfaW5zZXJ0KGJvdW5kYXJ5LCAwLCAiLS0iLCAyKTsKKwkJaWYgKCsrY29udGVudF90b3AgPiAmY29udGVudFtNQVhfQk9VTkRBUklFU10pIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVG9vIG1hbnkgYm91bmRhcmllcyB0byBoYW5kbGVcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQkqY29udGVudF90b3AgPSBib3VuZGFyeTsKKwkJYm91bmRhcnkgPSBOVUxMOworCX0KKwlzbHVycF9hdHRyKGxpbmUtPmJ1ZiwgImNoYXJzZXQ9IiwgJmNoYXJzZXQpOworCisJaWYgKGJvdW5kYXJ5KSB7CisJCXN0cmJ1Zl9yZWxlYXNlKGJvdW5kYXJ5KTsKKwkJZnJlZShib3VuZGFyeSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY29udGVudF90cmFuc2Zlcl9lbmNvZGluZyhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWlmIChzdHJjYXNlc3RyKGxpbmUtPmJ1ZiwgImJhc2U2NCIpKQorCQl0cmFuc2Zlcl9lbmNvZGluZyA9IFRFX0JBU0U2NDsKKwllbHNlIGlmIChzdHJjYXNlc3RyKGxpbmUtPmJ1ZiwgInF1b3RlZC1wcmludGFibGUiKSkKKwkJdHJhbnNmZXJfZW5jb2RpbmcgPSBURV9RUDsKKwllbHNlCisJCXRyYW5zZmVyX2VuY29kaW5nID0gVEVfRE9OVENBUkU7Cit9CisKK3N0YXRpYyBpbnQgaXNfbXVsdGlwYXJ0X2JvdW5kYXJ5KGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJcmV0dXJuICgoKCpjb250ZW50X3RvcCktPmxlbiA8PSBsaW5lLT5sZW4pICYmCisJCSFtZW1jbXAobGluZS0+YnVmLCAoKmNvbnRlbnRfdG9wKS0+YnVmLCAoKmNvbnRlbnRfdG9wKS0+bGVuKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfc3ViamVjdChzdHJ1Y3Qgc3RyYnVmICpzdWJqZWN0KQoreworCXNpemVfdCBhdCA9IDA7CisKKwl3aGlsZSAoYXQgPCBzdWJqZWN0LT5sZW4pIHsKKwkJY2hhciAqcG9zOworCQlzaXplX3QgcmVtb3ZlOworCisJCXN3aXRjaCAoc3ViamVjdC0+YnVmW2F0XSkgeworCQljYXNlICdyJzogY2FzZSAnUic6CisJCQlpZiAoc3ViamVjdC0+bGVuIDw9IGF0ICsgMykKKwkJCQlicmVhazsKKwkJCWlmICgoc3ViamVjdC0+YnVmW2F0ICsgMV0gPT0gJ2UnIHx8CisJCQkgICAgIHN1YmplY3QtPmJ1ZlthdCArIDFdID09ICdFJykgJiYKKwkJCSAgICBzdWJqZWN0LT5idWZbYXQgKyAyXSA9PSAnOicpIHsKKwkJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCAzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWF0Kys7CisJCQlicmVhazsKKwkJY2FzZSAnICc6IGNhc2UgJ1x0JzogY2FzZSAnOic6CisJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCAxKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdbJzoKKwkJCXBvcyA9IHN0cmNocihzdWJqZWN0LT5idWYgKyBhdCwgJ10nKTsKKwkJCWlmICghcG9zKQorCQkJCWJyZWFrOworCQkJcmVtb3ZlID0gcG9zIC0gc3ViamVjdC0+YnVmICsgYXQgKyAxOworCQkJaWYgKCFrZWVwX25vbl9wYXRjaF9icmFja2V0c19pbl9zdWJqZWN0IHx8CisJCQkgICAgKDcgPD0gcmVtb3ZlICYmCisJCQkgICAgIG1lbW1lbShzdWJqZWN0LT5idWYgKyBhdCwgcmVtb3ZlLCAiUEFUQ0giLCA1KSkpCisJCQkJc3RyYnVmX3JlbW92ZShzdWJqZWN0LCBhdCwgcmVtb3ZlKTsKKwkJCWVsc2UgeworCQkJCWF0ICs9IHJlbW92ZTsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBpbnB1dCBoYWQgYSBzcGFjZSBhZnRlciB0aGUgXSwga2VlcAorCQkJCSAqIGl0LiAgV2UgZG9uJ3QgYm90aGVyIHdpdGggZmluZGluZyB0aGUgZW5kIG9mCisJCQkJICogdGhlIHNwYWNlLCBzaW5jZSB3ZSBsYXRlciBub3JtYWxpemUgaXQKKwkJCQkgKiBhbnl3YXkuCisJCQkJICovCisJCQkJaWYgKGlzc3BhY2Uoc3ViamVjdC0+YnVmW2F0XSkpCisJCQkJCWF0ICs9IDE7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisJc3RyYnVmX3RyaW0oc3ViamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfc3BhY2Uoc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJc2l6ZV90IHBvcywgY250OworCWZvciAocG9zID0gMDsgcG9zIDwgc2ItPmxlbjsgcG9zKyspIHsKKwkJaWYgKGlzc3BhY2Uoc2ItPmJ1Zltwb3NdKSkgeworCQkJc2ItPmJ1Zltwb3NdID0gJyAnOworCQkJZm9yIChjbnQgPSAwOyBpc3NwYWNlKHNiLT5idWZbcG9zICsgY250ICsgMV0pOyBjbnQrKyk7CisJCQlzdHJidWZfcmVtb3ZlKHNiLCBwb3MgKyAxLCBjbnQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfaGVhZGVyKHN0cnVjdCBzdHJidWYgKmxpbmUpOworc3RhdGljIGNvbnN0IGNoYXIgKmhlYWRlcltNQVhfSERSX1BBUlNFRF0gPSB7CisJIkZyb20iLCJTdWJqZWN0IiwiRGF0ZSIsCit9OworCitzdGF0aWMgaW5saW5lIGludCBjbXBfaGVhZGVyKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUsIGNvbnN0IGNoYXIgKmhkcikKK3sKKwlpbnQgbGVuID0gc3RybGVuKGhkcik7CisJcmV0dXJuICFzdHJuY2FzZWNtcChsaW5lLT5idWYsIGhkciwgbGVuKSAmJiBsaW5lLT5sZW4gPiBsZW4gJiYKKwkJCWxpbmUtPmJ1ZltsZW5dID09ICc6JyAmJiBpc3NwYWNlKGxpbmUtPmJ1ZltsZW4gKyAxXSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaGVhZGVyKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUsCisJCQkJc3RydWN0IHN0cmJ1ZiAqaGRyX2RhdGFbXSwgaW50IG92ZXJ3cml0ZSkKK3sKKwlpbnQgaSwgcmV0ID0gMCwgbGVuOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkvKiBzZWFyY2ggZm9yIHRoZSBpbnRlcmVzdGluZyBwYXJ0cyAqLworCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CisJCWludCBsZW4gPSBzdHJsZW4oaGVhZGVyW2ldKTsKKwkJaWYgKCghaGRyX2RhdGFbaV0gfHwgb3ZlcndyaXRlKSAmJiBjbXBfaGVhZGVyKGxpbmUsIGhlYWRlcltpXSkpIHsKKwkJCS8qIFVud3JhcCBpbmxpbmUgQiBhbmQgUSBlbmNvZGluZywgYW5kIG9wdGlvbmFsbHkKKwkJCSAqIG5vcm1hbGl6ZSB0aGUgbWV0YSBpbmZvcm1hdGlvbiB0byB1dGY4LgorCQkJICovCisJCQlzdHJidWZfYWRkKCZzYiwgbGluZS0+YnVmICsgbGVuICsgMiwgbGluZS0+bGVuIC0gbGVuIC0gMik7CisJCQlkZWNvZGVfaGVhZGVyKCZzYik7CisJCQloYW5kbGVfaGVhZGVyKCZoZHJfZGF0YVtpXSwgJnNiKTsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJCX0KKwl9CisKKwkvKiBDb250ZW50IHN0dWZmICovCisJaWYgKGNtcF9oZWFkZXIobGluZSwgIkNvbnRlbnQtVHlwZSIpKSB7CisJCWxlbiA9IHN0cmxlbigiQ29udGVudC1UeXBlOiAiKTsKKwkJc3RyYnVmX2FkZCgmc2IsIGxpbmUtPmJ1ZiArIGxlbiwgbGluZS0+bGVuIC0gbGVuKTsKKwkJZGVjb2RlX2hlYWRlcigmc2IpOworCQlzdHJidWZfaW5zZXJ0KCZzYiwgMCwgIkNvbnRlbnQtVHlwZTogIiwgbGVuKTsKKwkJaGFuZGxlX2NvbnRlbnRfdHlwZSgmc2IpOworCQlyZXQgPSAxOworCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJfQorCWlmIChjbXBfaGVhZGVyKGxpbmUsICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIikpIHsKKwkJbGVuID0gc3RybGVuKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAiKTsKKwkJc3RyYnVmX2FkZCgmc2IsIGxpbmUtPmJ1ZiArIGxlbiwgbGluZS0+bGVuIC0gbGVuKTsKKwkJZGVjb2RlX2hlYWRlcigmc2IpOworCQloYW5kbGVfY29udGVudF90cmFuc2Zlcl9lbmNvZGluZygmc2IpOworCQlyZXQgPSAxOworCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJfQorCisJLyogZm9yIGluYm9keSBzdHVmZiAqLworCWlmICghcHJlZml4Y21wKGxpbmUtPmJ1ZiwgIj5Gcm9tIikgJiYgaXNzcGFjZShsaW5lLT5idWZbNV0pKSB7CisJCXJldCA9IDE7IC8qIFNob3VsZCB0aGlzIHJldHVybiAwPyAqLworCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJfQorCWlmICghcHJlZml4Y21wKGxpbmUtPmJ1ZiwgIltQQVRDSF0iKSAmJiBpc3NwYWNlKGxpbmUtPmJ1Zls3XSkpIHsKKwkJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKwkJCWlmICghbWVtY21wKCJTdWJqZWN0IiwgaGVhZGVyW2ldLCA3KSkgeworCQkJCWhhbmRsZV9oZWFkZXIoJmhkcl9kYXRhW2ldLCBsaW5lKTsKKwkJCQlyZXQgPSAxOworCQkJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwkJCX0KKwkJfQorCX0KKworY2hlY2tfaGVhZGVyX291dDoKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfcmZjMjgyMl9oZWFkZXIoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwkvKgorCSAqIFRoZSBzZWN0aW9uIHRoYXQgZGVmaW5lcyB0aGUgbG9vc2VzdCBwb3NzaWJsZQorCSAqIGZpZWxkIG5hbWUgaXMgIjMuNi44IE9wdGlvbmFsIGZpZWxkcyIuCisJICoKKwkgKiBvcHRpb25hbC1maWVsZCA9IGZpZWxkLW5hbWUgIjoiIHVuc3RydWN0dXJlZCBDUkxGCisJICogZmllbGQtbmFtZSA9IDEqZnRleHQKKwkgKiBmdGV4dCA9ICVkMzMtNTcgLyAlNTktMTI2CisJICovCisJaW50IGNoOworCWNoYXIgKmNwID0gbGluZS0+YnVmOworCisJLyogQ291bnQgbWJveCBGcm9tIGhlYWRlcnMgYXMgaGVhZGVycyAqLworCWlmICghcHJlZml4Y21wKGNwLCAiRnJvbSAiKSB8fCAhcHJlZml4Y21wKGNwLCAiPkZyb20gIikpCisJCXJldHVybiAxOworCisJd2hpbGUgKChjaCA9ICpjcCsrKSkgeworCQlpZiAoY2ggPT0gJzonKQorCQkJcmV0dXJuIDE7CisJCWlmICgoMzMgPD0gY2ggJiYgY2ggPD0gNTcpIHx8CisJCSAgICAoNTkgPD0gY2ggJiYgY2ggPD0gMTI2KSkKKwkJCWNvbnRpbnVlOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9vbmVfaGVhZGVyX2xpbmUoc3RydWN0IHN0cmJ1ZiAqbGluZSwgRklMRSAqaW4pCit7CisJLyogR2V0IHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBsaW5lLiAqLworCWlmIChzdHJidWZfZ2V0bGluZShsaW5lLCBpbiwgJ1xuJykpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJcyBpdCBhbiBlbXB0eSBsaW5lIG9yIG5vdCBhIHZhbGlkIHJmYzI4MjIgaGVhZGVyPworCSAqIElmIHNvLCBzdG9wIGhlcmUsIGFuZCByZXR1cm4gZmFsc2UgKCJub3QgYSBoZWFkZXIiKQorCSAqLworCXN0cmJ1Zl9ydHJpbShsaW5lKTsKKwlpZiAoIWxpbmUtPmxlbiB8fCAhaXNfcmZjMjgyMl9oZWFkZXIobGluZSkpIHsKKwkJLyogUmUtYWRkIHRoZSBuZXdsaW5lICovCisJCXN0cmJ1Zl9hZGRjaChsaW5lLCAnXG4nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBOb3cgd2UgbmVlZCB0byBlYXQgYWxsIHRoZSBjb250aW51YXRpb24gbGluZXMuLgorCSAqIFl1Y2ssIDI4MjIgaGVhZGVyICJmb2xkaW5nIgorCSAqLworCWZvciAoOzspIHsKKwkJaW50IHBlZWs7CisJCXN0cnVjdCBzdHJidWYgY29udGludWF0aW9uID0gU1RSQlVGX0lOSVQ7CisKKwkJcGVlayA9IGZnZXRjKGluKTsgdW5nZXRjKHBlZWssIGluKTsKKwkJaWYgKHBlZWsgIT0gJyAnICYmIHBlZWsgIT0gJ1x0JykKKwkJCWJyZWFrOworCQlpZiAoc3RyYnVmX2dldGxpbmUoJmNvbnRpbnVhdGlvbiwgaW4sICdcbicpKQorCQkJYnJlYWs7CisJCWNvbnRpbnVhdGlvbi5idWZbMF0gPSAnICc7CisJCXN0cmJ1Zl9ydHJpbSgmY29udGludWF0aW9uKTsKKwkJc3RyYnVmX2FkZGJ1ZihsaW5lLCAmY29udGludWF0aW9uKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJidWYgKmRlY29kZV9xX3NlZ21lbnQoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqcV9zZWcsIGludCByZmMyMDQ3KQoreworCWNvbnN0IGNoYXIgKmluID0gcV9zZWctPmJ1ZjsKKwlpbnQgYzsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQob3V0LCBxX3NlZy0+bGVuKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmIChjID09ICc9JykgeworCQkJaW50IGQgPSAqaW4rKzsKKwkJCWlmIChkID09ICdcbicgfHwgIWQpCisJCQkJYnJlYWs7IC8qIGRyb3AgdHJhaWxpbmcgbmV3bGluZSAqLworCQkJc3RyYnVmX2FkZGNoKG91dCwgKGhleHZhbChkKSA8PCA0KSB8IGhleHZhbCgqaW4rKykpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJmYzIwNDcgJiYgYyA9PSAnXycpIC8qIHJmYzIwNDcgNC4yICgyKSAqLworCQkJYyA9IDB4MjA7CisJCXN0cmJ1Zl9hZGRjaChvdXQsIGMpOworCX0KKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqZGVjb2RlX2Jfc2VnbWVudChjb25zdCBzdHJ1Y3Qgc3RyYnVmICpiX3NlZykKK3sKKwkvKiBEZWNvZGUgaW4uLmVwLCBwb3NzaWJseSBpbi1wbGFjZSB0byBvdCAqLworCWludCBjLCBwb3MgPSAwLCBhY2MgPSAwOworCWNvbnN0IGNoYXIgKmluID0gYl9zZWctPmJ1ZjsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQob3V0LCBiX3NlZy0+bGVuKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmIChjID09ICcrJykKKwkJCWMgPSA2MjsKKwkJZWxzZSBpZiAoYyA9PSAnLycpCisJCQljID0gNjM7CisJCWVsc2UgaWYgKCdBJyA8PSBjICYmIGMgPD0gJ1onKQorCQkJYyAtPSAnQSc7CisJCWVsc2UgaWYgKCdhJyA8PSBjICYmIGMgPD0gJ3onKQorCQkJYyAtPSAnYScgLSAyNjsKKwkJZWxzZSBpZiAoJzAnIDw9IGMgJiYgYyA8PSAnOScpCisJCQljIC09ICcwJyAtIDUyOworCQllbHNlCisJCQljb250aW51ZTsgLyogZ2FyYmFnZSAqLworCQlzd2l0Y2ggKHBvcysrKSB7CisJCWNhc2UgMDoKKwkJCWFjYyA9IChjIDw8IDIpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsIChhY2MgfCAoYyA+PiA0KSkpOworCQkJYWNjID0gKGMgJiAxNSkgPDwgNDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzdHJidWZfYWRkY2gob3V0LCAoYWNjIHwgKGMgPj4gMikpKTsKKwkJCWFjYyA9IChjICYgMykgPDwgNjsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlzdHJidWZfYWRkY2gob3V0LCAoYWNjIHwgYykpOworCQkJYWNjID0gcG9zID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfdG9fdXRmOChzdHJ1Y3Qgc3RyYnVmICpsaW5lLCBjb25zdCBjaGFyICpjaGFyc2V0KQoreworCWNoYXIgKm91dDsKKworCWlmICghY2hhcnNldCB8fCAhKmNoYXJzZXQpCisJCXJldHVybjsKKwlpZiAoIXN0cmNhc2VjbXAobWV0YWluZm9fY2hhcnNldCwgY2hhcnNldCkpCisJCXJldHVybjsKKwlvdXQgPSByZWVuY29kZV9zdHJpbmcobGluZS0+YnVmLCBtZXRhaW5mb19jaGFyc2V0LCBjaGFyc2V0KTsKKwlpZiAoIW91dCkKKwkJZGllKCJjYW5ub3QgY29udmVydCBmcm9tICVzIHRvICVzIiwKKwkJICAgIGNoYXJzZXQsIG1ldGFpbmZvX2NoYXJzZXQpOworCXN0cmJ1Zl9hdHRhY2gobGluZSwgb3V0LCBzdHJsZW4ob3V0KSwgc3RybGVuKG91dCkpOworfQorCitzdGF0aWMgaW50IGRlY29kZV9oZWFkZXJfYnEoc3RydWN0IHN0cmJ1ZiAqaXQpCit7CisJY2hhciAqaW4sICplcCwgKmNwOworCXN0cnVjdCBzdHJidWYgb3V0YnVmID0gU1RSQlVGX0lOSVQsICpkZWM7CisJc3RydWN0IHN0cmJ1ZiBjaGFyc2V0X3EgPSBTVFJCVUZfSU5JVCwgcGllY2VidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmZjMjA0NyA9IDA7CisKKwlpbiA9IGl0LT5idWY7CisJd2hpbGUgKGluIC0gaXQtPmJ1ZiA8PSBpdC0+bGVuICYmIChlcCA9IHN0cnN0cihpbiwgIj0/IikpICE9IE5VTEwpIHsKKwkJaW50IGVuY29kaW5nOworCQlzdHJidWZfcmVzZXQoJmNoYXJzZXRfcSk7CisJCXN0cmJ1Zl9yZXNldCgmcGllY2VidWYpOworCQlyZmMyMDQ3ID0gMTsKKworCQlpZiAoaW4gIT0gZXApIHsKKwkJCS8qCisJCQkgKiBXZSBhcmUgYWJvdXQgdG8gcHJvY2VzcyBhbiBlbmNvZGVkLXdvcmQKKwkJCSAqIHRoYXQgYmVnaW5zIGF0IGVwLCBidXQgdGhlcmUgaXMgc29tZXRoaW5nCisJCQkgKiBiZWZvcmUgdGhlIGVuY29kZWQgd29yZC4KKwkJCSAqLworCQkJY2hhciAqc2NhbjsKKwkJCWZvciAoc2NhbiA9IGluOyBzY2FuIDwgZXA7IHNjYW4rKykKKwkJCQlpZiAoIWlzc3BhY2UoKnNjYW4pKQorCQkJCQlicmVhazsKKworCQkJaWYgKHNjYW4gIT0gZXAgfHwgaW4gPT0gaXQtPmJ1ZikgeworCQkJCS8qCisJCQkJICogV2Ugc2hvdWxkIG5vdCBsb3NlIHRoYXQgInNvbWV0aGluZyIsCisJCQkJICogdW5sZXNzIHdlIGhhdmUganVzdCBwcm9jZXNzZWQgYW4KKwkJCQkgKiBlbmNvZGVkLXdvcmQsIGFuZCB0aGVyZSBpcyBvbmx5IExXUworCQkJCSAqIGJlZm9yZSB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBwcm9jZXNzLgorCQkJCSAqLworCQkJCXN0cmJ1Zl9hZGQoJm91dGJ1ZiwgaW4sIGVwIC0gaW4pOworCQkJfQorCQl9CisJCS8qIEUuZy4KKwkJICogZXAgOiAiPT9pc28tMjAyMi1qcD9CP0d5Ui4uLj89IGZvbyIKKwkJICogZXAgOiAiPT9JU08tODg1OS0xP1E/Rm9vPUZDYmFyPz0gYmF6IgorCQkgKi8KKwkJZXAgKz0gMjsKKworCQlpZiAoZXAgLSBpdC0+YnVmID49IGl0LT5sZW4gfHwgIShjcCA9IHN0cmNocihlcCwgJz8nKSkpCisJCQlnb3RvIGRlY29kZV9oZWFkZXJfYnFfb3V0OworCisJCWlmIChjcCArIDMgLSBpdC0+YnVmID4gaXQtPmxlbikKKwkJCWdvdG8gZGVjb2RlX2hlYWRlcl9icV9vdXQ7CisJCXN0cmJ1Zl9hZGQoJmNoYXJzZXRfcSwgZXAsIGNwIC0gZXApOworCisJCWVuY29kaW5nID0gY3BbMV07CisJCWlmICghZW5jb2RpbmcgfHwgY3BbMl0gIT0gJz8nKQorCQkJZ290byBkZWNvZGVfaGVhZGVyX2JxX291dDsKKwkJZXAgPSBzdHJzdHIoY3AgKyAzLCAiPz0iKTsKKwkJaWYgKCFlcCkKKwkJCWdvdG8gZGVjb2RlX2hlYWRlcl9icV9vdXQ7CisJCXN0cmJ1Zl9hZGQoJnBpZWNlYnVmLCBjcCArIDMsIGVwIC0gY3AgLSAzKTsKKwkJc3dpdGNoICh0b2xvd2VyKGVuY29kaW5nKSkgeworCQlkZWZhdWx0OgorCQkJZ290byBkZWNvZGVfaGVhZGVyX2JxX291dDsKKwkJY2FzZSAnYic6CisJCQlkZWMgPSBkZWNvZGVfYl9zZWdtZW50KCZwaWVjZWJ1Zik7CisJCQlicmVhazsKKwkJY2FzZSAncSc6CisJCQlkZWMgPSBkZWNvZGVfcV9zZWdtZW50KCZwaWVjZWJ1ZiwgMSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAobWV0YWluZm9fY2hhcnNldCkKKwkJCWNvbnZlcnRfdG9fdXRmOChkZWMsIGNoYXJzZXRfcS5idWYpOworCisJCXN0cmJ1Zl9hZGRidWYoJm91dGJ1ZiwgZGVjKTsKKwkJc3RyYnVmX3JlbGVhc2UoZGVjKTsKKwkJZnJlZShkZWMpOworCQlpbiA9IGVwICsgMjsKKwl9CisJc3RyYnVmX2FkZHN0cigmb3V0YnVmLCBpbik7CisJc3RyYnVmX3Jlc2V0KGl0KTsKKwlzdHJidWZfYWRkYnVmKGl0LCAmb3V0YnVmKTsKK2RlY29kZV9oZWFkZXJfYnFfb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZvdXRidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZjaGFyc2V0X3EpOworCXN0cmJ1Zl9yZWxlYXNlKCZwaWVjZWJ1Zik7CisJcmV0dXJuIHJmYzIwNDc7Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV9oZWFkZXIoc3RydWN0IHN0cmJ1ZiAqaXQpCit7CisJaWYgKGRlY29kZV9oZWFkZXJfYnEoaXQpKQorCQlyZXR1cm47CisJLyogb3RoZXJ3aXNlICJpdCIgaXMgYSBzdHJhaWdodCBjb3B5IG9mIHRoZSBpbnB1dC4KKwkgKiBUaGlzIGNhbiBiZSBiaW5hcnkgZ3VjayBidXQgdGhlcmUgaXMgbm8gY2hhcnNldCBzcGVjaWZpZWQuCisJICovCisJaWYgKG1ldGFpbmZvX2NoYXJzZXQpCisJCWNvbnZlcnRfdG9fdXRmOChpdCwgIiIpOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfdHJhbnNmZXJfZW5jb2Rpbmcoc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpyZXQ7CisKKwlzd2l0Y2ggKHRyYW5zZmVyX2VuY29kaW5nKSB7CisJY2FzZSBURV9RUDoKKwkJcmV0ID0gZGVjb2RlX3Ffc2VnbWVudChsaW5lLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBURV9CQVNFNjQ6CisJCXJldCA9IGRlY29kZV9iX3NlZ21lbnQobGluZSk7CisJCWJyZWFrOworCWNhc2UgVEVfRE9OVENBUkU6CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKwlzdHJidWZfcmVzZXQobGluZSk7CisJc3RyYnVmX2FkZGJ1ZihsaW5lLCByZXQpOworCXN0cmJ1Zl9yZWxlYXNlKHJldCk7CisJZnJlZShyZXQpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZmlsdGVyKHN0cnVjdCBzdHJidWYgKmxpbmUpOworCitzdGF0aWMgaW50IGZpbmRfYm91bmRhcnkodm9pZCkKK3sKKwl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBmaW4sICdcbicpKSB7CisJCWlmICgqY29udGVudF90b3AgJiYgaXNfbXVsdGlwYXJ0X2JvdW5kYXJ5KCZsaW5lKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfYm91bmRhcnkodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5ld2xpbmUgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRjaCgmbmV3bGluZSwgJ1xuJyk7CithZ2FpbjoKKwlpZiAobGluZS5sZW4gPj0gKCpjb250ZW50X3RvcCktPmxlbiArIDIgJiYKKwkgICAgIW1lbWNtcChsaW5lLmJ1ZiArICgqY29udGVudF90b3ApLT5sZW4sICItLSIsIDIpKSB7CisJCS8qIHdlIGhpdCBhbiBlbmQgYm91bmRhcnkgKi8KKwkJLyogcG9wIHRoZSBjdXJyZW50IGJvdW5kYXJ5IG9mZiB0aGUgc3RhY2sgKi8KKwkJc3RyYnVmX3JlbGVhc2UoKmNvbnRlbnRfdG9wKTsKKwkJZnJlZSgqY29udGVudF90b3ApOworCQkqY29udGVudF90b3AgPSBOVUxMOworCisJCS8qIHRlY2huaWNhbGx5IHdvbid0IGhhcHBlbiBhcyBpc19tdWx0aXBhcnRfYm91bmRhcnkoKQorCQkgICB3aWxsIGZhaWwgZmlyc3QuICBCdXQganVzdCBpbiBjYXNlLi4KKwkJICovCisJCWlmICgtLWNvbnRlbnRfdG9wIDwgY29udGVudCkgeworCQkJZnByaW50ZihzdGRlcnIsICJEZXRlY3RlZCBtaXNtYXRjaGVkIGJvdW5kYXJpZXMsICIKKwkJCQkJImNhbid0IHJlY292ZXJcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQloYW5kbGVfZmlsdGVyKCZuZXdsaW5lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm5ld2xpbmUpOworCisJCS8qIHNraXAgdG8gdGhlIG5leHQgYm91bmRhcnkgKi8KKwkJaWYgKCFmaW5kX2JvdW5kYXJ5KCkpCisJCQlyZXR1cm4gMDsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwkvKiBzZXQgc29tZSBkZWZhdWx0cyAqLworCXRyYW5zZmVyX2VuY29kaW5nID0gVEVfRE9OVENBUkU7CisJc3RyYnVmX3Jlc2V0KCZjaGFyc2V0KTsKKworCS8qIHNsdXJwIGluIHRoaXMgc2VjdGlvbidzIGluZm8gKi8KKwl3aGlsZSAocmVhZF9vbmVfaGVhZGVyX2xpbmUoJmxpbmUsIGZpbikpCisJCWNoZWNrX2hlYWRlcigmbGluZSwgcF9oZHJfZGF0YSwgMCk7CisKKwlzdHJidWZfcmVsZWFzZSgmbmV3bGluZSk7CisJLyogcmVwbGVuaXNoIGxpbmUgKi8KKwlpZiAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIGZpbiwgJ1xuJykpCisJCXJldHVybiAwOworCXN0cmJ1Zl9hZGRjaCgmbGluZSwgJ1xuJyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhdGNoYnJlYWsoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzaXplX3QgaTsKKworCS8qIEJlZ2lubmluZyBvZiBhICJkaWZmIC0iIGhlYWRlcj8gKi8KKwlpZiAoIXByZWZpeGNtcChsaW5lLT5idWYsICJkaWZmIC0iKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBDVlMgIkluZGV4OiAiIGxpbmU/ICovCisJaWYgKCFwcmVmaXhjbXAobGluZS0+YnVmLCAiSW5kZXg6ICIpKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogIi0tLSA8ZmlsZW5hbWU+IiBzdGFydHMgcGF0Y2hlcyB3aXRob3V0IGhlYWRlcnMKKwkgKiAiLS0tPHNwPioiIGlzIGEgbWFudWFsIHNlcGFyYXRvcgorCSAqLworCWlmIChsaW5lLT5sZW4gPCA0KQorCQlyZXR1cm4gMDsKKworCWlmICghcHJlZml4Y21wKGxpbmUtPmJ1ZiwgIi0tLSIpKSB7CisJCS8qIHNwYWNlIGZvbGxvd2VkIGJ5IGEgZmlsZW5hbWU/ICovCisJCWlmIChsaW5lLT5idWZbM10gPT0gJyAnICYmICFpc3NwYWNlKGxpbmUtPmJ1Zls0XSkpCisJCQlyZXR1cm4gMTsKKwkJLyogSnVzdCB3aGl0ZXNwYWNlPyAqLworCQlmb3IgKGkgPSAzOyBpIDwgbGluZS0+bGVuOyBpKyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgYyA9IGxpbmUtPmJ1ZltpXTsKKwkJCWlmIChjID09ICdcbicpCisJCQkJcmV0dXJuIDE7CisJCQlpZiAoIWlzc3BhY2UoYykpCisJCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX3NjaXNzb3JzX2xpbmUoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzaXplX3QgaSwgbGVuID0gbGluZS0+bGVuOworCWludCBzY2lzc29ycyA9IDAsIGdhcCA9IDA7CisJaW50IGZpcnN0X25vbmJsYW5rID0gLTE7CisJaW50IGxhc3Rfbm9uYmxhbmsgPSAwLCB2aXNpYmxlLCBwZXJmb3JhdGlvbiA9IDAsIGluX3BlcmZvcmF0aW9uID0gMDsKKwljb25zdCBjaGFyICpidWYgPSBsaW5lLT5idWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGlzc3BhY2UoYnVmW2ldKSkgeworCQkJaWYgKGluX3BlcmZvcmF0aW9uKSB7CisJCQkJcGVyZm9yYXRpb24rKzsKKwkJCQlnYXArKzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWxhc3Rfbm9uYmxhbmsgPSBpOworCQlpZiAoZmlyc3Rfbm9uYmxhbmsgPCAwKQorCQkJZmlyc3Rfbm9uYmxhbmsgPSBpOworCQlpZiAoYnVmW2ldID09ICctJykgeworCQkJaW5fcGVyZm9yYXRpb24gPSAxOworCQkJcGVyZm9yYXRpb24rKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpICsgMSA8IGxlbiAmJgorCQkgICAgKCFtZW1jbXAoYnVmICsgaSwgIj44IiwgMikgfHwgIW1lbWNtcChidWYgKyBpLCAiODwiLCAyKSB8fAorCQkgICAgICFtZW1jbXAoYnVmICsgaSwgIj4lIiwgMikgfHwgIW1lbWNtcChidWYgKyBpLCAiJTwiLCAyKSkpIHsKKwkJCWluX3BlcmZvcmF0aW9uID0gMTsKKwkJCXBlcmZvcmF0aW9uICs9IDI7CisJCQlzY2lzc29ycyArPSAyOworCQkJaSsrOworCQkJY29udGludWU7CisJCX0KKwkJaW5fcGVyZm9yYXRpb24gPSAwOworCX0KKworCS8qCisJICogVGhlIG1hcmsgbXVzdCBiZSBhdCBsZWFzdCA4IGJ5dGVzIGxvbmcgKGUuZy4gIi0tID44IC0tIikuCisJICogRXZlbiB0aG91Z2ggdGhlcmUgY2FuIGJlIGFyYml0cmFyeSBjcnVmdCBvbiB0aGUgc2FtZSBsaW5lCisJICogKGUuZy4gImN1dCBoZXJlIiksIGluIG9yZGVyIHRvIGF2b2lkIG1pc2lkZW50aWZpY2F0aW9uLCB0aGUKKwkgKiBwZXJmb3JhdGlvbiBtdXN0IG9jY3VweSBtb3JlIHRoYW4gYSB0aGlyZCBvZiB0aGUgdmlzaWJsZQorCSAqIHdpZHRoIG9mIHRoZSBsaW5lLCBhbmQgZGFzaGVzIGFuZCBzY2lzc29ycyBtdXN0IG9jY3VweSBtb3JlCisJICogdGhhbiBoYWxmIG9mIHRoZSBwZXJmb3JhdGlvbi4KKwkgKi8KKworCXZpc2libGUgPSBsYXN0X25vbmJsYW5rIC0gZmlyc3Rfbm9uYmxhbmsgKyAxOworCXJldHVybiAoc2Npc3NvcnMgJiYgOCA8PSB2aXNpYmxlICYmCisJCXZpc2libGUgPCBwZXJmb3JhdGlvbiAqIDMgJiYKKwkJZ2FwICogMiA8IHBlcmZvcmF0aW9uKTsKK30KKworc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0YXRpYyBpbnQgc3RpbGxfbG9va2luZyA9IDE7CisKKwlpZiAoIWNtaXRtc2cpCisJCXJldHVybiAwOworCisJaWYgKHN0aWxsX2xvb2tpbmcpIHsKKwkJaWYgKCFsaW5lLT5sZW4gfHwgKGxpbmUtPmxlbiA9PSAxICYmIGxpbmUtPmJ1ZlswXSA9PSAnXG4nKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmICh1c2VfaW5ib2R5X2hlYWRlcnMgJiYgc3RpbGxfbG9va2luZykgeworCQlzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApOworCQlpZiAoc3RpbGxfbG9va2luZykKKwkJCXJldHVybiAwOworCX0gZWxzZQorCQkvKiBPbmx5IHRyaW0gdGhlIGZpcnN0IChibGFuaykgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UKKwkJICogd2hlbiBpZ25vcmluZyBpbi1ib2R5IGhlYWRlcnMuCisJCSAqLworCQlzdGlsbF9sb29raW5nID0gMDsKKworCS8qIG5vcm1hbGl6ZSB0aGUgbG9nIG1lc3NhZ2UgdG8gVVRGLTguICovCisJaWYgKG1ldGFpbmZvX2NoYXJzZXQpCisJCWNvbnZlcnRfdG9fdXRmOChsaW5lLCBjaGFyc2V0LmJ1Zik7CisKKwlpZiAodXNlX3NjaXNzb3JzICYmIGlzX3NjaXNzb3JzX2xpbmUobGluZSkpIHsKKwkJaW50IGk7CisJCWlmIChmc2VlayhjbWl0bXNnLCAwTCwgU0VFS19TRVQpKQorCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgcmV3aW5kIG91dHB1dCBtZXNzYWdlIGZpbGUiKTsKKwkJaWYgKGZ0cnVuY2F0ZShmaWxlbm8oY21pdG1zZyksIDApKQorCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgdHJ1bmNhdGUgb3V0cHV0IG1lc3NhZ2UgZmlsZSBhdCBzY2lzc29ycyIpOworCQlzdGlsbF9sb29raW5nID0gMTsKKworCQkvKgorCQkgKiBXZSBtYXkgaGF2ZSBhbHJlYWR5IHJlYWQgInNlY29uZGFyeSBoZWFkZXJzIjsgcHVyZ2UKKwkJICogdGhlbSB0byBnaXZlIG91cnNlbHZlcyBhIGNsZWFuIHJlc3RhcnQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgeworCQkJaWYgKHNfaGRyX2RhdGFbaV0pCisJCQkJc3RyYnVmX3JlbGVhc2Uoc19oZHJfZGF0YVtpXSk7CisJCQlzX2hkcl9kYXRhW2ldID0gTlVMTDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocGF0Y2hicmVhayhsaW5lKSkgeworCQlmY2xvc2UoY21pdG1zZyk7CisJCWNtaXRtc2cgPSBOVUxMOworCQlyZXR1cm4gMTsKKwl9CisKKwlmcHV0cyhsaW5lLT5idWYsIGNtaXRtc2cpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcGF0Y2goY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlmd3JpdGUobGluZS0+YnVmLCAxLCBsaW5lLT5sZW4sIHBhdGNoZmlsZSk7CisJcGF0Y2hfbGluZXMrKzsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2ZpbHRlcihzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0YXRpYyBpbnQgZmlsdGVyID0gMDsKKworCS8qIGZpbHRlciB0ZWxscyB1cyB3aGljaCBwYXJ0IHdlIGxlZnQgb2ZmIG9uICovCisJc3dpdGNoIChmaWx0ZXIpIHsKKwljYXNlIDA6CisJCWlmICghaGFuZGxlX2NvbW1pdF9tc2cobGluZSkpCisJCQlicmVhazsKKwkJZmlsdGVyKys7CisJY2FzZSAxOgorCQloYW5kbGVfcGF0Y2gobGluZSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2JvZHkodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHByZXYgPSBTVFJCVUZfSU5JVDsKKworCS8qIFNraXAgdXAgdG8gdGhlIGZpcnN0IGJvdW5kYXJ5ICovCisJaWYgKCpjb250ZW50X3RvcCkgeworCQlpZiAoIWZpbmRfYm91bmRhcnkoKSkKKwkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworCX0KKworCWRvIHsKKwkJLyogcHJvY2VzcyBhbnkgYm91bmRhcnkgbGluZXMgKi8KKwkJaWYgKCpjb250ZW50X3RvcCAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkoJmxpbmUpKSB7CisJCQkvKiBmbHVzaCBhbnkgbGVmdG92ZXIgKi8KKwkJCWlmIChwcmV2LmxlbikgeworCQkJCWhhbmRsZV9maWx0ZXIoJnByZXYpOworCQkJCXN0cmJ1Zl9yZXNldCgmcHJldik7CisJCQl9CisJCQlpZiAoIWhhbmRsZV9ib3VuZGFyeSgpKQorCQkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworCQl9CisKKwkJLyogVW53cmFwIHRyYW5zZmVyIGVuY29kaW5nICovCisJCWRlY29kZV90cmFuc2Zlcl9lbmNvZGluZygmbGluZSk7CisKKwkJc3dpdGNoICh0cmFuc2Zlcl9lbmNvZGluZykgeworCQljYXNlIFRFX0JBU0U2NDoKKwkJY2FzZSBURV9RUDoKKwkJeworCQkJc3RydWN0IHN0cmJ1ZiAqKmxpbmVzLCAqKml0LCAqc2I7CisKKwkJCS8qIFByZXBlbmQgYW55IHByZXZpb3VzIHBhcnRpYWwgbGluZXMgKi8KKwkJCXN0cmJ1Zl9pbnNlcnQoJmxpbmUsIDAsIHByZXYuYnVmLCBwcmV2Lmxlbik7CisJCQlzdHJidWZfcmVzZXQoJnByZXYpOworCisJCQkvKgorCQkJICogVGhpcyBpcyBhIGRlY29kZWQgbGluZSB0aGF0IG1heSBjb250YWluCisJCQkgKiBtdWx0aXBsZSBuZXcgbGluZXMuICBQYXNzIG9ubHkgb25lIGNodW5rCisJCQkgKiBhdCBhIHRpbWUgdG8gaGFuZGxlX2ZpbHRlcigpCisJCQkgKi8KKwkJCWxpbmVzID0gc3RyYnVmX3NwbGl0KCZsaW5lLCAnXG4nKTsKKwkJCWZvciAoaXQgPSBsaW5lczsgKHNiID0gKml0KTsgaXQrKykgeworCQkJCWlmICgqKGl0ICsgMSkgPT0gTlVMTCkgLyogVGhlIGxhc3QgbGluZSAqLworCQkJCQlpZiAoc2ItPmJ1ZltzYi0+bGVuIC0gMV0gIT0gJ1xuJykgeworCQkJCQkJLyogUGFydGlhbCBsaW5lLCBzYXZlIGl0IGZvciBsYXRlci4gKi8KKwkJCQkJCXN0cmJ1Zl9hZGRidWYoJnByZXYsIHNiKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJaGFuZGxlX2ZpbHRlcihzYik7CisJCQl9CisJCQkvKgorCQkJICogVGhlIHBhcnRpYWwgY2h1bmsgaXMgc2F2ZWQgaW4gInByZXYiIGFuZCB3aWxsIGJlCisJCQkgKiBhcHBlbmRlZCBieSB0aGUgbmV4dCBpdGVyYXRpb24gb2YgcmVhZF9saW5lX3dpdGhfbnVsKCkuCisJCQkgKi8KKwkJCXN0cmJ1Zl9saXN0X2ZyZWUobGluZXMpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCWhhbmRsZV9maWx0ZXIoJmxpbmUpOworCQl9CisKKwl9IHdoaWxlICghc3RyYnVmX2dldHdob2xlbGluZSgmbGluZSwgZmluLCAnXG4nKSk7CisKK2hhbmRsZV9ib2R5X291dDoKKwlzdHJidWZfcmVsZWFzZSgmcHJldik7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dF9oZWFkZXJfbGluZXMoRklMRSAqZm91dCwgY29uc3QgY2hhciAqaGRyLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpkYXRhKQoreworCWNvbnN0IGNoYXIgKnNwID0gZGF0YS0+YnVmOworCXdoaWxlICgxKSB7CisJCWNoYXIgKmVwID0gc3RyY2hyKHNwLCAnXG4nKTsKKwkJaW50IGxlbjsKKwkJaWYgKCFlcCkKKwkJCWxlbiA9IHN0cmxlbihzcCk7CisJCWVsc2UKKwkJCWxlbiA9IGVwIC0gc3A7CisJCWZwcmludGYoZm91dCwgIiVzOiAlLipzXG4iLCBoZHIsIGxlbiwgc3ApOworCQlpZiAoIWVwKQorCQkJYnJlYWs7CisJCXNwID0gZXAgKyAxOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2luZm8odm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpoZHI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgeworCQkvKiBvbmx5IHByaW50IGluYm9keSBoZWFkZXJzIGlmIHdlIG91dHB1dCBhIHBhdGNoIGZpbGUgKi8KKwkJaWYgKHBhdGNoX2xpbmVzICYmIHNfaGRyX2RhdGFbaV0pCisJCQloZHIgPSBzX2hkcl9kYXRhW2ldOworCQllbHNlIGlmIChwX2hkcl9kYXRhW2ldKQorCQkJaGRyID0gcF9oZHJfZGF0YVtpXTsKKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJaWYgKCFtZW1jbXAoaGVhZGVyW2ldLCAiU3ViamVjdCIsIDcpKSB7CisJCQlpZiAoIWtlZXBfc3ViamVjdCkgeworCQkJCWNsZWFudXBfc3ViamVjdChoZHIpOworCQkJCWNsZWFudXBfc3BhY2UoaGRyKTsKKwkJCX0KKwkJCW91dHB1dF9oZWFkZXJfbGluZXMoZm91dCwgIlN1YmplY3QiLCBoZHIpOworCQl9IGVsc2UgaWYgKCFtZW1jbXAoaGVhZGVyW2ldLCAiRnJvbSIsIDQpKSB7CisJCQljbGVhbnVwX3NwYWNlKGhkcik7CisJCQloYW5kbGVfZnJvbShoZHIpOworCQkJZnByaW50Zihmb3V0LCAiQXV0aG9yOiAlc1xuIiwgbmFtZS5idWYpOworCQkJZnByaW50Zihmb3V0LCAiRW1haWw6ICVzXG4iLCBlbWFpbC5idWYpOworCQl9IGVsc2UgeworCQkJY2xlYW51cF9zcGFjZShoZHIpOworCQkJZnByaW50Zihmb3V0LCAiJXM6ICVzXG4iLCBoZWFkZXJbaV0sIGhkci0+YnVmKTsKKwkJfQorCX0KKwlmcHJpbnRmKGZvdXQsICJcbiIpOworfQorCitzdGF0aWMgaW50IG1haWxpbmZvKEZJTEUgKmluLCBGSUxFICpvdXQsIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqcGF0Y2gpCit7CisJaW50IHBlZWs7CisJZmluID0gaW47CisJZm91dCA9IG91dDsKKworCWNtaXRtc2cgPSBmb3Blbihtc2csICJ3Iik7CisJaWYgKCFjbWl0bXNnKSB7CisJCXBlcnJvcihtc2cpOworCQlyZXR1cm4gLTE7CisJfQorCXBhdGNoZmlsZSA9IGZvcGVuKHBhdGNoLCAidyIpOworCWlmICghcGF0Y2hmaWxlKSB7CisJCXBlcnJvcihwYXRjaCk7CisJCWZjbG9zZShjbWl0bXNnKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXBfaGRyX2RhdGEgPSB4Y2FsbG9jKE1BWF9IRFJfUEFSU0VELCBzaXplb2YoKnBfaGRyX2RhdGEpKTsKKwlzX2hkcl9kYXRhID0geGNhbGxvYyhNQVhfSERSX1BBUlNFRCwgc2l6ZW9mKCpzX2hkcl9kYXRhKSk7CisKKwlkbyB7CisJCXBlZWsgPSBmZ2V0Yyhpbik7CisJfSB3aGlsZSAoaXNzcGFjZShwZWVrKSk7CisJdW5nZXRjKHBlZWssIGluKTsKKworCS8qIHByb2Nlc3MgdGhlIGVtYWlsIGhlYWRlciAqLworCXdoaWxlIChyZWFkX29uZV9oZWFkZXJfbGluZSgmbGluZSwgZmluKSkKKwkJY2hlY2tfaGVhZGVyKCZsaW5lLCBwX2hkcl9kYXRhLCAxKTsKKworCWhhbmRsZV9ib2R5KCk7CisJaGFuZGxlX2luZm8oKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9tYWlsaW5mb19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqdW51c2VkKQoreworCWlmIChwcmVmaXhjbXAodmFyLCAibWFpbGluZm8uIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgdW51c2VkKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJtYWlsaW5mby5zY2lzc29ycyIpKSB7CisJCXVzZV9zY2lzc29ycyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHBlcmhhcHMgb3RoZXJzIGhlcmUgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbWFpbGluZm9fdXNhZ2VbXSA9CisJImdpdCBtYWlsaW5mbyBbLWt8LWJdIFstdSB8IC0tZW5jb2Rpbmc9PGVuY29kaW5nPiB8IC1uXSBbLS1zY2lzc29ycyB8IC0tbm8tc2Npc3NvcnNdIG1zZyBwYXRjaCA8IG1haWwgPmluZm8iOworCitpbnQgY21kX21haWxpbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKmRlZl9jaGFyc2V0OworCisJLyogTkVFRFNXT1JLOiBtaWdodCB3YW50IHRvIGRvIHRoZSBvcHRpb25hbCAuZ2l0LyBkaXJlY3RvcnkKKwkgKiBkaXNjb3ZlcnkKKwkgKi8KKwlnaXRfY29uZmlnKGdpdF9tYWlsaW5mb19jb25maWcsIE5VTEwpOworCisJZGVmX2NoYXJzZXQgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCW1ldGFpbmZvX2NoYXJzZXQgPSBkZWZfY2hhcnNldDsKKworCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLWsiKSkKKwkJCWtlZXBfc3ViamVjdCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1iIikpCisJCQlrZWVwX25vbl9wYXRjaF9icmFja2V0c19pbl9zdWJqZWN0ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLXUiKSkKKwkJCW1ldGFpbmZvX2NoYXJzZXQgPSBkZWZfY2hhcnNldDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLW4iKSkKKwkJCW1ldGFpbmZvX2NoYXJzZXQgPSBOVUxMOworCQllbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbMV0sICItLWVuY29kaW5nPSIpKQorCQkJbWV0YWluZm9fY2hhcnNldCA9IGFyZ3ZbMV0gKyAxMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1zY2lzc29ycyIpKQorCQkJdXNlX3NjaXNzb3JzID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1uby1zY2lzc29ycyIpKQorCQkJdXNlX3NjaXNzb3JzID0gMDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1uby1pbmJvZHktaGVhZGVycyIpKQorCQkJdXNlX2luYm9keV9oZWFkZXJzID0gMDsKKwkJZWxzZQorCQkJdXNhZ2UobWFpbGluZm9fdXNhZ2UpOworCQlhcmdjLS07IGFyZ3YrKzsKKwl9CisKKwlpZiAoYXJnYyAhPSAzKQorCQl1c2FnZShtYWlsaW5mb191c2FnZSk7CisKKwlyZXR1cm4gISFtYWlsaW5mbyhzdGRpbiwgc3Rkb3V0LCBhcmd2WzFdLCBhcmd2WzJdKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWFpbHNwbGl0LmMgYi9idWlsdGluL21haWxzcGxpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDMyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21haWxzcGxpdC5jCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogVG90YWxseSBicmFpbmRhbWFnZWQgbWJveCBzcGxpdHRlciBwcm9ncmFtLgorICoKKyAqIEl0IGp1c3Qgc3BsaXRzIGEgbWJveCBpbnRvIGEgbGlzdCBvZiBmaWxlczogIjAwMDEiICIwMDAyIiAuLgorICogc28geW91IGNhbiBwcm9jZXNzIHRoZW0gZnVydGhlciBmcm9tIHRoZXJlLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZ2l0X21haWxzcGxpdF91c2FnZVtdID0KKyJnaXQgbWFpbHNwbGl0IFstZDxwcmVjPl0gWy1mPG4+XSBbLWJdIFstLWtlZXAtY3JdIC1vPGRpcmVjdG9yeT4gWyg8bWJveD58PE1haWxkaXI+KS4uLl0iOworCitzdGF0aWMgaW50IGlzX2Zyb21fbGluZShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWNvbnN0IGNoYXIgKmNvbG9uOworCisJaWYgKGxlbiA8IDIwIHx8IG1lbWNtcCgiRnJvbSAiLCBsaW5lLCA1KSkKKwkJcmV0dXJuIDA7CisKKwljb2xvbiA9IGxpbmUgKyBsZW4gLSAyOworCWxpbmUgKz0gNTsKKwlmb3IgKDs7KSB7CisJCWlmIChjb2xvbiA8IGxpbmUpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCotLWNvbG9uID09ICc6JykKKwkJCWJyZWFrOworCX0KKworCWlmICghaXNkaWdpdChjb2xvblstNF0pIHx8CisJICAgICFpc2RpZ2l0KGNvbG9uWy0yXSkgfHwKKwkgICAgIWlzZGlnaXQoY29sb25bLTFdKSB8fAorCSAgICAhaXNkaWdpdChjb2xvblsgMV0pIHx8CisJICAgICFpc2RpZ2l0KGNvbG9uWyAyXSkpCisJCXJldHVybiAwOworCisJLyogeWVhciAqLworCWlmIChzdHJ0b2woY29sb24rMywgTlVMTCwgMTApIDw9IDkwKQorCQlyZXR1cm4gMDsKKworCS8qIE9rLCBjbG9zZSBlbm91Z2ggKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgaW50IGtlZXBfY3I7CisKKy8qIENhbGxlZCB3aXRoIHRoZSBmaXJzdCBsaW5lIChwb3RlbnRpYWxseSBwYXJ0aWFsKQorICogYWxyZWFkeSBpbiBidWZbXSAtLSBub3JtYWxseSB0aGF0IHNob3VsZCBiZWdpbiB3aXRoCisgKiB0aGUgVW5peCAiRnJvbSAiIGxpbmUuICBXcml0ZSBpdCBpbnRvIHRoZSBzcGVjaWZpZWQKKyAqIGZpbGUuCisgKi8KK3N0YXRpYyBpbnQgc3BsaXRfb25lKEZJTEUgKm1ib3gsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBhbGxvd19iYXJlKQoreworCUZJTEUgKm91dHB1dCA9IE5VTEw7CisJaW50IGZkOworCWludCBzdGF0dXMgPSAwOworCWludCBpc19iYXJlID0gIWlzX2Zyb21fbGluZShidWYuYnVmLCBidWYubGVuKTsKKworCWlmIChpc19iYXJlICYmICFhbGxvd19iYXJlKQorCQlnb3RvIGNvcnJ1cHQ7CisKKwlmZCA9IG9wZW4obmFtZSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuIG91dHB1dCBmaWxlICclcyciLCBuYW1lKTsKKwlvdXRwdXQgPSB4ZmRvcGVuKGZkLCAidyIpOworCisJLyogQ29weSBpdCBvdXQsIHdoaWxlIHNlYXJjaGluZyBmb3IgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGgKKwkgKiAiRnJvbSAiIGFuZCBoYXZpbmcgc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIGRhdGUgZm9ybWF0LgorCSAqLworCWZvciAoOzspIHsKKwkJaWYgKCFrZWVwX2NyICYmIGJ1Zi5sZW4gPiAxICYmIGJ1Zi5idWZbYnVmLmxlbi0xXSA9PSAnXG4nICYmCisJCQlidWYuYnVmW2J1Zi5sZW4tMl0gPT0gJ1xyJykgeworCQkJc3RyYnVmX3NldGxlbigmYnVmLCBidWYubGVuLTIpOworCQkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCQl9CisKKwkJaWYgKGZ3cml0ZShidWYuYnVmLCAxLCBidWYubGVuLCBvdXRwdXQpICE9IGJ1Zi5sZW4pCisJCQlkaWVfZXJybm8oImNhbm5vdCB3cml0ZSBvdXRwdXQiKTsKKworCQlpZiAoc3RyYnVmX2dldHdob2xlbGluZSgmYnVmLCBtYm94LCAnXG4nKSkgeworCQkJaWYgKGZlb2YobWJveCkpIHsKKwkJCQlzdGF0dXMgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJZGllX2Vycm5vKCJjYW5ub3QgcmVhZCBtYm94Iik7CisJCX0KKwkJaWYgKCFpc19iYXJlICYmIGlzX2Zyb21fbGluZShidWYuYnVmLCBidWYubGVuKSkKKwkJCWJyZWFrOyAvKiBkb25lIHdpdGggb25lIG1lc3NhZ2UgKi8KKwl9CisJZmNsb3NlKG91dHB1dCk7CisJcmV0dXJuIHN0YXR1czsKKworIGNvcnJ1cHQ6CisJaWYgKG91dHB1dCkKKwkJZmNsb3NlKG91dHB1dCk7CisJdW5saW5rKG5hbWUpOworCWZwcmludGYoc3RkZXJyLCAiY29ycnVwdCBtYWlsYm94XG4iKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgaW50IHBvcHVsYXRlX21haWxkaXJfbGlzdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZGVudDsKKwljaGFyIG5hbWVbUEFUSF9NQVhdOworCWNoYXIgKnN1YnNbXSA9IHsgImN1ciIsICJuZXciLCBOVUxMIH07CisJY2hhciAqKnN1YjsKKworCWZvciAoc3ViID0gc3ViczsgKnN1YjsgKytzdWIpIHsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvJXMiLCBwYXRoLCAqc3ViKTsKKwkJaWYgKChkaXIgPSBvcGVuZGlyKG5hbWUpKSA9PSBOVUxMKSB7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCWNvbnRpbnVlOworCQkJZXJyb3IoImNhbm5vdCBvcGVuZGlyICVzICglcykiLCBuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCQlpZiAoZGVudC0+ZF9uYW1lWzBdID09ICcuJykKKwkJCQljb250aW51ZTsKKwkJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLyVzIiwgKnN1YiwgZGVudC0+ZF9uYW1lKTsKKwkJCXN0cmluZ19saXN0X2luc2VydChsaXN0LCBuYW1lKTsKKwkJfQorCisJCWNsb3NlZGlyKGRpcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfbWFpbGRpcihjb25zdCBjaGFyICptYWlsZGlyLCBjb25zdCBjaGFyICpkaXIsCisJaW50IG5yX3ByZWMsIGludCBza2lwKQoreworCWNoYXIgZmlsZVtQQVRIX01BWF07CisJY2hhciBuYW1lW1BBVEhfTUFYXTsKKwlpbnQgcmV0ID0gLTE7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWlmIChwb3B1bGF0ZV9tYWlsZGlyX2xpc3QoJmxpc3QsIG1haWxkaXIpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKSB7CisJCUZJTEUgKmY7CisJCXNucHJpbnRmKGZpbGUsIHNpemVvZihmaWxlKSwgIiVzLyVzIiwgbWFpbGRpciwgbGlzdC5pdGVtc1tpXS5zdHJpbmcpOworCQlmID0gZm9wZW4oZmlsZSwgInIiKTsKKwkJaWYgKCFmKSB7CisJCQllcnJvcigiY2Fubm90IG9wZW4gbWFpbCAlcyAoJXMpIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmJ1ZiwgZiwgJ1xuJykpIHsKKwkJCWVycm9yKCJjYW5ub3QgcmVhZCBtYWlsICVzICglcykiLCBmaWxlLCBzdHJlcnJvcihlcnJubykpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlzcHJpbnRmKG5hbWUsICIlcy8lMCpkIiwgZGlyLCBucl9wcmVjLCArK3NraXApOworCQlzcGxpdF9vbmUoZiwgbmFtZSwgMSk7CisKKwkJZmNsb3NlKGYpOworCX0KKworCXJldCA9IHNraXA7CitvdXQ6CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfbWJveChjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpkaXIsIGludCBhbGxvd19iYXJlLAorCQkgICAgICBpbnQgbnJfcHJlYywgaW50IHNraXApCit7CisJY2hhciBuYW1lW1BBVEhfTUFYXTsKKwlpbnQgcmV0ID0gLTE7CisJaW50IHBlZWs7CisKKwlGSUxFICpmID0gIXN0cmNtcChmaWxlLCAiLSIpID8gc3RkaW4gOiBmb3BlbihmaWxlLCAiciIpOworCWludCBmaWxlX2RvbmUgPSAwOworCisJaWYgKCFmKSB7CisJCWVycm9yKCJjYW5ub3Qgb3BlbiBtYm94ICVzIiwgZmlsZSk7CisJCWdvdG8gb3V0OworCX0KKworCWRvIHsKKwkJcGVlayA9IGZnZXRjKGYpOworCX0gd2hpbGUgKGlzc3BhY2UocGVlaykpOworCXVuZ2V0YyhwZWVrLCBmKTsKKworCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lKCZidWYsIGYsICdcbicpKSB7CisJCS8qIGVtcHR5IHN0ZGluIGlzIE9LICovCisJCWlmIChmICE9IHN0ZGluKSB7CisJCQllcnJvcigiY2Fubm90IHJlYWQgbWJveCAlcyIsIGZpbGUpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZmlsZV9kb25lID0gMTsKKwl9CisKKwl3aGlsZSAoIWZpbGVfZG9uZSkgeworCQlzcHJpbnRmKG5hbWUsICIlcy8lMCpkIiwgZGlyLCBucl9wcmVjLCArK3NraXApOworCQlmaWxlX2RvbmUgPSBzcGxpdF9vbmUoZiwgbmFtZSwgYWxsb3dfYmFyZSk7CisJfQorCisJaWYgKGYgIT0gc3RkaW4pCisJCWZjbG9zZShmKTsKKworCXJldCA9IHNraXA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9tYWlsc3BsaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG5yID0gMCwgbnJfcHJlYyA9IDQsIG51bSA9IDA7CisJaW50IGFsbG93X2JhcmUgPSAwOworCWNvbnN0IGNoYXIgKmRpciA9IE5VTEw7CisJY29uc3QgY2hhciAqKmFyZ3A7CisJc3RhdGljIGNvbnN0IGNoYXIgKnN0ZGluX29ubHlbXSA9IHsgIi0iLCBOVUxMIH07CisKKwlmb3IgKGFyZ3AgPSBhcmd2KzE7ICphcmdwOyBhcmdwKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gKmFyZ3A7CisKKwkJaWYgKGFyZ1swXSAhPSAnLScpCisJCQlicmVhazsKKwkJLyogZG8gZmxhZ3MgaGVyZSAqLworCQlpZiAoIGFyZ1sxXSA9PSAnZCcgKSB7CisJCQlucl9wcmVjID0gc3RydG9sKGFyZysyLCBOVUxMLCAxMCk7CisJCQlpZiAobnJfcHJlYyA8IDMgfHwgMTAgPD0gbnJfcHJlYykKKwkJCQl1c2FnZShnaXRfbWFpbHNwbGl0X3VzYWdlKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJ2YnICkgeworCQkJbnIgPSBzdHJ0b2woYXJnKzIsIE5VTEwsIDEwKTsKKwkJfSBlbHNlIGlmICggYXJnWzFdID09ICdoJyApIHsKKwkJCXVzYWdlKGdpdF9tYWlsc3BsaXRfdXNhZ2UpOworCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJ2InICYmICFhcmdbMl0gKSB7CisJCQlhbGxvd19iYXJlID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0ta2VlcC1jciIpKSB7CisJCQlrZWVwX2NyID0gMTsKKwkJfSBlbHNlIGlmICggYXJnWzFdID09ICdvJyAmJiBhcmdbMl0gKSB7CisJCQlkaXIgPSBhcmcrMjsKKwkJfSBlbHNlIGlmICggYXJnWzFdID09ICctJyAmJiAhYXJnWzJdICkgeworCQkJYXJncCsrOwkvKiAtLSBtYXJrcyBlbmQgb2Ygb3B0aW9ucyAqLworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlkaWUoInVua25vd24gb3B0aW9uOiAlcyIsIGFyZyk7CisJCX0KKwl9CisKKwlpZiAoICFkaXIgKSB7CisJCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OiBpZiBubyAtbyBzcGVjaWZpZWQsIGFjY2VwdAorCQkgICA8bWJveD4gPGRpcj4gb3IganVzdCA8ZGlyPiAqLworCQlzd2l0Y2ggKGFyZ2MgLSAoYXJncC1hcmd2KSkgeworCQljYXNlIDE6CisJCQlkaXIgPSBhcmdwWzBdOworCQkJYXJncCA9IHN0ZGluX29ubHk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJc3RkaW5fb25seVswXSA9IGFyZ3BbMF07CisJCQlkaXIgPSBhcmdwWzFdOworCQkJYXJncCA9IHN0ZGluX29ubHk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKGdpdF9tYWlsc3BsaXRfdXNhZ2UpOworCQl9CisJfSBlbHNlIHsKKwkJLyogTmV3IHVzYWdlOiBpZiBubyBtb3JlIGFyZ3VtZW50LCBwYXJzZSBzdGRpbiAqLworCQlpZiAoICEqYXJncCApCisJCQlhcmdwID0gc3RkaW5fb25seTsKKwl9CisKKwl3aGlsZSAoKmFyZ3ApIHsKKwkJY29uc3QgY2hhciAqYXJnID0gKmFyZ3ArKzsKKwkJc3RydWN0IHN0YXQgYXJnc3RhdDsKKwkJaW50IHJldCA9IDA7CisKKwkJaWYgKGFyZ1swXSA9PSAnLScgJiYgYXJnWzFdID09IDApIHsKKwkJCXJldCA9IHNwbGl0X21ib3goYXJnLCBkaXIsIGFsbG93X2JhcmUsIG5yX3ByZWMsIG5yKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZXJyb3IoImNhbm5vdCBzcGxpdCBwYXRjaGVzIGZyb20gc3RkaW4iKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCW51bSArPSAocmV0IC0gbnIpOworCQkJbnIgPSByZXQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzdGF0KGFyZywgJmFyZ3N0YXQpID09IC0xKSB7CisJCQllcnJvcigiY2Fubm90IHN0YXQgJXMgKCVzKSIsIGFyZywgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaWYgKFNfSVNESVIoYXJnc3RhdC5zdF9tb2RlKSkKKwkJCXJldCA9IHNwbGl0X21haWxkaXIoYXJnLCBkaXIsIG5yX3ByZWMsIG5yKTsKKwkJZWxzZQorCQkJcmV0ID0gc3BsaXRfbWJveChhcmcsIGRpciwgYWxsb3dfYmFyZSwgbnJfcHJlYywgbnIpOworCisJCWlmIChyZXQgPCAwKSB7CisJCQllcnJvcigiY2Fubm90IHNwbGl0IHBhdGNoZXMgZnJvbSAlcyIsIGFyZyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQludW0gKz0gKHJldCAtIG5yKTsKKwkJbnIgPSByZXQ7CisJfQorCisJcHJpbnRmKCIlZFxuIiwgbnVtKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS1iYXNlLmMgYi9idWlsdGluL21lcmdlLWJhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmM3OTkxCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tZXJnZS1iYXNlLmMKQEAgLTAsMCArMSwxMjQgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBpbnQgc2hvd19tZXJnZV9iYXNlKHN0cnVjdCBjb21taXQgKipyZXYsIGludCByZXZfbnIsIGludCBzaG93X2FsbCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdDsKKworCXJlc3VsdCA9IGdldF9tZXJnZV9iYXNlc19tYW55KHJldlswXSwgcmV2X25yIC0gMSwgcmV2ICsgMSwgMCk7CisKKwlpZiAoIXJlc3VsdCkKKwkJcmV0dXJuIDE7CisKKwl3aGlsZSAocmVzdWx0KSB7CisJCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KHJlc3VsdC0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKKwkJaWYgKCFzaG93X2FsbCkKKwkJCXJldHVybiAwOworCQlyZXN1bHQgPSByZXN1bHQtPm5leHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWVyZ2VfYmFzZV91c2FnZVtdID0geworCU5fKCJnaXQgbWVyZ2UtYmFzZSBbLWF8LS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIiksCisJTl8oImdpdCBtZXJnZS1iYXNlIFstYXwtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIiksCisJTl8oImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iKSwKKwlOXygiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfY29tbWl0X3JlZmVyZW5jZShjb25zdCBjaGFyICphcmcpCit7CisJdW5zaWduZWQgY2hhciByZXZrZXlbMjBdOworCXN0cnVjdCBjb21taXQgKnI7CisKKwlpZiAoZ2V0X3NoYTEoYXJnLCByZXZrZXkpKQorCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJnKTsKKwlyID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UocmV2a2V5KTsKKwlpZiAoIXIpCisJCWRpZSgiTm90IGEgdmFsaWQgY29tbWl0IG5hbWUgJXMiLCBhcmcpOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX29jdG9wdXMoaW50IGNvdW50LCBjb25zdCBjaGFyICoqYXJncywgaW50IHJlZHVjZSwgaW50IHNob3dfYWxsKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcmV2cyA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQ7CisJaW50IGk7CisKKwlpZiAocmVkdWNlKQorCQlzaG93X2FsbCA9IDE7CisKKwlmb3IgKGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgaS0tKQorCQljb21taXRfbGlzdF9pbnNlcnQoZ2V0X2NvbW1pdF9yZWZlcmVuY2UoYXJnc1tpXSksICZyZXZzKTsKKworCXJlc3VsdCA9IHJlZHVjZSA/IHJlZHVjZV9oZWFkcyhyZXZzKSA6IGdldF9vY3RvcHVzX21lcmdlX2Jhc2VzKHJldnMpOworCisJaWYgKCFyZXN1bHQpCisJCXJldHVybiAxOworCisJd2hpbGUgKHJlc3VsdCkgeworCQlwcmludGYoIiVzXG4iLCBzaGExX3RvX2hleChyZXN1bHQtPml0ZW0tPm9iamVjdC5zaGExKSk7CisJCWlmICghc2hvd19hbGwpCisJCQlyZXR1cm4gMDsKKwkJcmVzdWx0ID0gcmVzdWx0LT5uZXh0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9pc19hbmNlc3RvcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNvbW1pdCAqb25lLCAqdHdvOworCisJaWYgKGFyZ2MgIT0gMikKKwkJZGllKCItLWlzLWFuY2VzdG9yIHRha2VzIGV4YWN0bHkgdHdvIGNvbW1pdHMiKTsKKwlvbmUgPSBnZXRfY29tbWl0X3JlZmVyZW5jZShhcmd2WzBdKTsKKwl0d28gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShhcmd2WzFdKTsKKwlpZiAoaW5fbWVyZ2VfYmFzZXMob25lLCB0d28pKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCitpbnQgY21kX21lcmdlX2Jhc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNvbW1pdCAqKnJldjsKKwlpbnQgcmV2X25yID0gMDsKKwlpbnQgc2hvd19hbGwgPSAwOworCWludCBvY3RvcHVzID0gMDsKKwlpbnQgcmVkdWNlID0gMDsKKwlpbnQgaXNfYW5jZXN0b3IgPSAwOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKCdhJywgImFsbCIsICZzaG93X2FsbCwgTl8oIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgIm9jdG9wdXMiLCAmb2N0b3B1cywgTl8oImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImluZGVwZW5kZW50IiwgJnJlZHVjZSwgTl8oImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIikpLAorCQlPUFRfQk9PTEVBTigwLCAiaXMtYW5jZXN0b3IiLCAmaXNfYW5jZXN0b3IsCisJCQkgICAgTl8oImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIG1lcmdlX2Jhc2VfdXNhZ2UsIDApOworCWlmICghb2N0b3B1cyAmJiAhcmVkdWNlICYmIGFyZ2MgPCAyKQorCQl1c2FnZV93aXRoX29wdGlvbnMobWVyZ2VfYmFzZV91c2FnZSwgb3B0aW9ucyk7CisJaWYgKGlzX2FuY2VzdG9yICYmIChzaG93X2FsbCB8IG9jdG9wdXMgfCByZWR1Y2UpKQorCQlkaWUoIi0taXMtYW5jZXN0b3IgY2Fubm90IGJlIHVzZWQgd2l0aCBvdGhlciBvcHRpb25zIik7CisJaWYgKGlzX2FuY2VzdG9yKQorCQlyZXR1cm4gaGFuZGxlX2lzX2FuY2VzdG9yKGFyZ2MsIGFyZ3YpOworCWlmIChyZWR1Y2UgJiYgKHNob3dfYWxsIHx8IG9jdG9wdXMpKQorCQlkaWUoIi0taW5kZXBlbmRlbnQgY2Fubm90IGJlIHVzZWQgd2l0aCBvdGhlciBvcHRpb25zIik7CisKKwlpZiAob2N0b3B1cyB8fCByZWR1Y2UpCisJCXJldHVybiBoYW5kbGVfb2N0b3B1cyhhcmdjLCBhcmd2LCByZWR1Y2UsIHNob3dfYWxsKTsKKworCXJldiA9IHhtYWxsb2MoYXJnYyAqIHNpemVvZigqcmV2KSk7CisJd2hpbGUgKGFyZ2MtLSA+IDApCisJCXJldltyZXZfbnIrK10gPSBnZXRfY29tbWl0X3JlZmVyZW5jZSgqYXJndisrKTsKKwlyZXR1cm4gc2hvd19tZXJnZV9iYXNlKHJldiwgcmV2X25yLCBzaG93X2FsbCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21lcmdlLWZpbGUuYyBiL2J1aWx0aW4vbWVyZ2UtZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTcwZjIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLWZpbGUuYwpAQCAtMCwwICsxLDEwNiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInhkaWZmL3hkaWZmLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWVyZ2VfZmlsZV91c2FnZVtdID0geworCU5fKCJnaXQgbWVyZ2UtZmlsZSBbb3B0aW9uc10gWy1MIG5hbWUxIFstTCBvcmlnIFstTCBuYW1lMl1dXSBmaWxlMSBvcmlnX2ZpbGUgZmlsZTIiKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGxhYmVsX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RhdGljIGludCBsYWJlbF9jb3VudCA9IDA7CisJY29uc3QgY2hhciAqKm5hbWVzID0gKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZTsKKworCWlmIChsYWJlbF9jb3VudCA+PSAzKQorCQlyZXR1cm4gZXJyb3IoInRvbyBtYW55IGxhYmVscyBvbiB0aGUgY29tbWFuZCBsaW5lIik7CisJbmFtZXNbbGFiZWxfY291bnQrK10gPSBhcmc7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfbWVyZ2VfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpuYW1lc1szXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCB9OworCW1tZmlsZV90IG1tZnNbM107CisJbW1idWZmZXJfdCByZXN1bHQgPSB7TlVMTCwgMH07CisJeG1wYXJhbV90IHhtcCA9IHt7MH19OworCWludCByZXQgPSAwLCBpID0gMCwgdG9fc3Rkb3V0ID0gMDsKKwlpbnQgcXVpZXQgPSAwOworCWludCBwcmVmaXhsZW4gPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTigncCcsICJzdGRvdXQiLCAmdG9fc3Rkb3V0LCBOXygic2VuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dCIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgImRpZmYzIiwgJnhtcC5zdHlsZSwgTl8oInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIiksIFhETF9NRVJHRV9ESUZGMyksCisJCU9QVF9TRVRfSU5UKDAsICJvdXJzIiwgJnhtcC5mYXZvciwgTl8oImZvciBjb25mbGljdHMsIHVzZSBvdXIgdmVyc2lvbiIpLAorCQkJICAgIFhETF9NRVJHRV9GQVZPUl9PVVJTKSwKKwkJT1BUX1NFVF9JTlQoMCwgInRoZWlycyIsICZ4bXAuZmF2b3IsIE5fKCJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIpLAorCQkJICAgIFhETF9NRVJHRV9GQVZPUl9USEVJUlMpLAorCQlPUFRfU0VUX0lOVCgwLCAidW5pb24iLCAmeG1wLmZhdm9yLCBOXygiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIpLAorCQkJICAgIFhETF9NRVJHRV9GQVZPUl9VTklPTiksCisJCU9QVF9JTlRFR0VSKDAsICJtYXJrZXItc2l6ZSIsICZ4bXAubWFya2VyX3NpemUsCisJCQkgICAgTl8oImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIikpLAorCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIpKSwKKwkJT1BUX0NBTExCQUNLKCdMJywgTlVMTCwgbmFtZXMsIE5fKCJuYW1lIiksCisJCQkgICAgIE5fKCJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnX2ZpbGUvZmlsZTIiKSwgJmxhYmVsX2NiKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwl4bXAubGV2ZWwgPSBYRExfTUVSR0VfWkVBTE9VU19BTE5VTTsKKwl4bXAuc3R5bGUgPSAwOworCXhtcC5mYXZvciA9IDA7CisKKwlpZiAoc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpIHsKKwkJLyogUmVhZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlICovCisJCWdpdF9jb25maWcoZ2l0X3htZXJnZV9jb25maWcsIE5VTEwpOworCQlpZiAoMCA8PSBnaXRfeG1lcmdlX3N0eWxlKQorCQkJeG1wLnN0eWxlID0gZ2l0X3htZXJnZV9zdHlsZTsKKwl9CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIG1lcmdlX2ZpbGVfdXNhZ2UsIDApOworCWlmIChhcmdjICE9IDMpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhtZXJnZV9maWxlX3VzYWdlLCBvcHRpb25zKTsKKwlpZiAocXVpZXQpIHsKKwkJaWYgKCFmcmVvcGVuKCIvZGV2L251bGwiLCAidyIsIHN0ZGVycikpCisJCQlyZXR1cm4gZXJyb3IoImZhaWxlZCB0byByZWRpcmVjdCBzdGRlcnIgdG8gL2Rldi9udWxsOiAiCisJCQkJICAgICAiJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKworCWlmIChwcmVmaXgpCisJCXByZWZpeGxlbiA9IHN0cmxlbihwcmVmaXgpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQljb25zdCBjaGFyICpmbmFtZSA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHByZWZpeGxlbiwgYXJndltpXSk7CisJCWlmICghbmFtZXNbaV0pCisJCQluYW1lc1tpXSA9IGFyZ3ZbaV07CisJCWlmIChyZWFkX21tZmlsZShtbWZzICsgaSwgZm5hbWUpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYnVmZmVyX2lzX2JpbmFyeShtbWZzW2ldLnB0ciwgbW1mc1tpXS5zaXplKSkKKwkJCXJldHVybiBlcnJvcigiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogJXMiLAorCQkJCQlhcmd2W2ldKTsKKwl9CisKKwl4bXAuYW5jZXN0b3IgPSBuYW1lc1sxXTsKKwl4bXAuZmlsZTEgPSBuYW1lc1swXTsKKwl4bXAuZmlsZTIgPSBuYW1lc1syXTsKKwlyZXQgPSB4ZGxfbWVyZ2UobW1mcyArIDEsIG1tZnMgKyAwLCBtbWZzICsgMiwgJnhtcCwgJnJlc3VsdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlmcmVlKG1tZnNbaV0ucHRyKTsKKworCWlmIChyZXQgPj0gMCkgeworCQljb25zdCBjaGFyICpmaWxlbmFtZSA9IGFyZ3ZbMF07CisJCUZJTEUgKmYgPSB0b19zdGRvdXQgPyBzdGRvdXQgOiBmb3BlbihmaWxlbmFtZSwgIndiIik7CisKKwkJaWYgKCFmKQorCQkJcmV0ID0gZXJyb3IoIkNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nIiwgZmlsZW5hbWUpOworCQllbHNlIGlmIChyZXN1bHQuc2l6ZSAmJgorCQkJIGZ3cml0ZShyZXN1bHQucHRyLCByZXN1bHQuc2l6ZSwgMSwgZikgIT0gMSkKKwkJCXJldCA9IGVycm9yKCJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiLCBmaWxlbmFtZSk7CisJCWVsc2UgaWYgKGZjbG9zZShmKSkKKwkJCXJldCA9IGVycm9yKCJDb3VsZCBub3QgY2xvc2UgJXMiLCBmaWxlbmFtZSk7CisJCWZyZWUocmVzdWx0LnB0cik7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2UtaW5kZXguYyBiL2J1aWx0aW4vbWVyZ2UtaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzM4ODMyCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tZXJnZS1pbmRleC5jCkBAIC0wLDAgKzEsMTEwIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpwZ207CitzdGF0aWMgaW50IG9uZV9zaG90LCBxdWlldDsKK3N0YXRpYyBpbnQgZXJyOworCitzdGF0aWMgaW50IG1lcmdlX2VudHJ5KGludCBwb3MsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGZvdW5kOworCWNvbnN0IGNoYXIgKmFyZ3VtZW50c1tdID0geyBwZ20sICIiLCAiIiwgIiIsIHBhdGgsICIiLCAiIiwgIiIsIE5VTEwgfTsKKwljaGFyIGhleGJ1Zls0XVs2MF07CisJY2hhciBvd25idWZbNF1bNjBdOworCisJaWYgKHBvcyA+PSBhY3RpdmVfbnIpCisJCWRpZSgiZ2l0IG1lcmdlLWluZGV4OiAlcyBub3QgaW4gdGhlIGNhY2hlIiwgcGF0aCk7CisJZm91bmQgPSAwOworCWRvIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpbnQgc3RhZ2UgPSBjZV9zdGFnZShjZSk7CisKKwkJaWYgKHN0cmNtcChjZS0+bmFtZSwgcGF0aCkpCisJCQlicmVhazsKKwkJZm91bmQrKzsKKwkJc3RyY3B5KGhleGJ1ZltzdGFnZV0sIHNoYTFfdG9faGV4KGNlLT5zaGExKSk7CisJCXNwcmludGYob3duYnVmW3N0YWdlXSwgIiVvIiwgY2UtPmNlX21vZGUpOworCQlhcmd1bWVudHNbc3RhZ2VdID0gaGV4YnVmW3N0YWdlXTsKKwkJYXJndW1lbnRzW3N0YWdlICsgNF0gPSBvd25idWZbc3RhZ2VdOworCX0gd2hpbGUgKCsrcG9zIDwgYWN0aXZlX25yKTsKKwlpZiAoIWZvdW5kKQorCQlkaWUoImdpdCBtZXJnZS1pbmRleDogJXMgbm90IGluIHRoZSBjYWNoZSIsIHBhdGgpOworCisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3VtZW50cywgMCkpIHsKKwkJaWYgKG9uZV9zaG90KQorCQkJZXJyKys7CisJCWVsc2UgeworCQkJaWYgKCFxdWlldCkKKwkJCQlkaWUoIm1lcmdlIHByb2dyYW0gZmFpbGVkIik7CisJCQlleGl0KDEpOworCQl9CisJfQorCXJldHVybiBmb3VuZDsKK30KKworc3RhdGljIHZvaWQgbWVyZ2VfZmlsZShjb25zdCBjaGFyICpwYXRoKQoreworCWludCBwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBzdHJsZW4ocGF0aCkpOworCisJLyoKKwkgKiBJZiBpdCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY2FjaGUgYXMgc3RhZ2UwLCBpdCdzCisJICogYWxyZWFkeSBtZXJnZWQgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uCisJICovCisJaWYgKHBvcyA8IDApCisJCW1lcmdlX2VudHJ5KC1wb3MtMSwgcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX2FsbCh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlpZiAoIWNlX3N0YWdlKGNlKSkKKwkJCWNvbnRpbnVlOworCQlpICs9IG1lcmdlX2VudHJ5KGksIGNlLT5uYW1lKS0xOworCX0KK30KKworaW50IGNtZF9tZXJnZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgZm9yY2VfZmlsZSA9IDA7CisKKwkvKiBXaXRob3V0IHRoaXMgd2UgY2Fubm90IHJlbHkgb24gd2FpdHBpZCgpIHRvIHRlbGwKKwkgKiB3aGF0IGhhcHBlbmVkIHRvIG91ciBjaGlsZHJlbi4KKwkgKi8KKwlzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7CisKKwlpZiAoYXJnYyA8IDMpCisJCXVzYWdlKCJnaXQgbWVyZ2UtaW5kZXggWy1vXSBbLXFdIDxtZXJnZS1wcm9ncmFtPiAoLWEgfCBbLS1dIDxmaWxlbmFtZT4qKSIpOworCisJcmVhZF9jYWNoZSgpOworCisJaSA9IDE7CisJaWYgKCFzdHJjbXAoYXJndltpXSwgIi1vIikpIHsKKwkJb25lX3Nob3QgPSAxOworCQlpKys7CisJfQorCWlmICghc3RyY21wKGFyZ3ZbaV0sICItcSIpKSB7CisJCXF1aWV0ID0gMTsKKwkJaSsrOworCX0KKwlwZ20gPSBhcmd2W2krK107CisJZm9yICg7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJaWYgKCFmb3JjZV9maWxlICYmICphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQkJZm9yY2VfZmlsZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItYSIpKSB7CisJCQkJbWVyZ2VfYWxsKCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlkaWUoImdpdCBtZXJnZS1pbmRleDogdW5rbm93biBvcHRpb24gJXMiLCBhcmcpOworCQl9CisJCW1lcmdlX2ZpbGUoYXJnKTsKKwl9CisJaWYgKGVyciAmJiAhcXVpZXQpCisJCWRpZSgibWVyZ2UgcHJvZ3JhbSBmYWlsZWQiKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS1vdXJzLmMgYi9idWlsdGluL21lcmdlLW91cnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQ0MTE2Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tZXJnZS1vdXJzLmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIGdpdC1tZXJnZS1vdXJzLnNoIGFzIGJ1aWx0aW4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhvbWFzIEhhcm5pbmcgSnIKKyAqIE9yaWdpbmFsOgorICogT3JpZ2luYWwgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKgorICogUHJldGVuZCB3ZSByZXNvbHZlZCB0aGUgaGVhZHMsIGJ1dCBkZWNsYXJlIG91ciB0cmVlIHRydW1wcyBldmVyeWJvZHkgZWxzZS4KKyAqLworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9tZXJnZV9vdXJzX3VzYWdlW10gPQorCSJnaXQgbWVyZ2Utb3VycyA8YmFzZT4uLi4gLS0gSEVBRCA8cmVtb3RlPi4uLiI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkaWZmX2luZGV4X2FyZ3NbXSA9IHsKKwkiZGlmZi1pbmRleCIsICItLXF1aWV0IiwgIi0tY2FjaGVkIiwgIkhFQUQiLCAiLS0iLCBOVUxMCit9OworI2RlZmluZSBOQVJHUyAoQVJSQVlfU0laRShkaWZmX2luZGV4X2FyZ3MpIC0gMSkKKworaW50IGNtZF9tZXJnZV9vdXJzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoYnVpbHRpbl9tZXJnZV9vdXJzX3VzYWdlKTsKKworCS8qCisJICogV2UgbmVlZCB0byBleGl0IHdpdGggMiBpZiB0aGUgaW5kZXggZG9lcyBub3QgbWF0Y2ggb3VyIEhFQUQgdHJlZSwKKwkgKiBiZWNhdXNlIHRoZSBjdXJyZW50IGluZGV4IGlzIHdoYXQgd2Ugd2lsbCBiZSBjb21taXR0aW5nIGFzIHRoZQorCSAqIG1lcmdlIHJlc3VsdC4KKwkgKi8KKwlpZiAoY21kX2RpZmZfaW5kZXgoTkFSR1MsIGRpZmZfaW5kZXhfYXJncywgcHJlZml4KSkKKwkJZXhpdCgyKTsKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYyBiL2J1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E2NGY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmMKQEAgLTAsMCArMSw4MCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9tZXJnZV9yZWN1cnNpdmVfdXNhZ2VbXSA9CisJImdpdCAlcyA8YmFzZT4uLi4gLS0gPGhlYWQ+IDxyZW1vdGU+IC4uLiI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpiZXR0ZXJfYnJhbmNoX25hbWUoY29uc3QgY2hhciAqYnJhbmNoKQoreworCXN0YXRpYyBjaGFyIGdpdGhlYWRfZW52WzggKyA0MCArIDFdOworCWNoYXIgKm5hbWU7CisKKwlpZiAoc3RybGVuKGJyYW5jaCkgIT0gNDApCisJCXJldHVybiBicmFuY2g7CisJc3ByaW50ZihnaXRoZWFkX2VudiwgIkdJVEhFQURfJXMiLCBicmFuY2gpOworCW5hbWUgPSBnZXRlbnYoZ2l0aGVhZF9lbnYpOworCXJldHVybiBuYW1lID8gbmFtZSA6IGJyYW5jaDsKK30KKworaW50IGNtZF9tZXJnZV9yZWN1cnNpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZXNbMjFdOworCXVuc2lnbmVkIGJhc2VzX2NvdW50ID0gMDsKKwlpbnQgaSwgZmFpbGVkOworCXVuc2lnbmVkIGNoYXIgaDFbMjBdLCBoMlsyMF07CisJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKKwlzdHJ1Y3QgY29tbWl0ICpyZXN1bHQ7CisKKwlpbml0X21lcmdlX29wdGlvbnMoJm8pOworCWlmIChhcmd2WzBdICYmICFzdWZmaXhjbXAoYXJndlswXSwgIi1zdWJ0cmVlIikpCisJCW8uc3VidHJlZV9zaGlmdCA9ICIiOworCisJaWYgKGFyZ2MgPCA0KQorCQl1c2FnZWYoYnVpbHRpbl9tZXJnZV9yZWN1cnNpdmVfdXNhZ2UsIGFyZ3ZbMF0pOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7ICsraSkgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmICghcHJlZml4Y21wKGFyZywgIi0tIikpIHsKKwkJCWlmICghYXJnWzJdKQorCQkJCWJyZWFrOworCQkJaWYgKHBhcnNlX21lcmdlX29wdCgmbywgYXJnICsgMikpCisJCQkJZGllKCJVbmtub3duIG9wdGlvbiAlcyIsIGFyZyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYmFzZXNfY291bnQgPCBBUlJBWV9TSVpFKGJhc2VzKS0xKSB7CisJCQl1bnNpZ25lZCBjaGFyICpzaGEgPSB4bWFsbG9jKDIwKTsKKwkJCWlmIChnZXRfc2hhMShhcmd2W2ldLCBzaGEpKQorCQkJCWRpZSgiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIiwgYXJndltpXSk7CisJCQliYXNlc1tiYXNlc19jb3VudCsrXSA9IHNoYTsKKwkJfQorCQllbHNlCisJCQl3YXJuaW5nKCJDYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gIgorCQkJCSJJZ25vcmluZyAlcy4iLAorCQkJCShpbnQpQVJSQVlfU0laRShiYXNlcyktMSwgYXJndltpXSk7CisJfQorCWlmIChhcmdjIC0gaSAhPSAzKSAvKiAiLS0iICI8aGVhZD4iICI8cmVtb3RlPiIgKi8KKwkJZGllKCJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIik7CisKKwlvLmJyYW5jaDEgPSBhcmd2WysraV07CisJby5icmFuY2gyID0gYXJndlsrK2ldOworCisJaWYgKGdldF9zaGExKG8uYnJhbmNoMSwgaDEpKQorCQlkaWUoIkNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIiwgby5icmFuY2gxKTsKKwlpZiAoZ2V0X3NoYTEoby5icmFuY2gyLCBoMikpCisJCWRpZSgiQ291bGQgbm90IHJlc29sdmUgcmVmICclcyciLCBvLmJyYW5jaDIpOworCisJby5icmFuY2gxID0gYmV0dGVyX2JyYW5jaF9uYW1lKG8uYnJhbmNoMSk7CisJby5icmFuY2gyID0gYmV0dGVyX2JyYW5jaF9uYW1lKG8uYnJhbmNoMik7CisKKwlpZiAoby52ZXJib3NpdHkgPj0gMykKKwkJcHJpbnRmKCJNZXJnaW5nICVzIHdpdGggJXNcbiIsIG8uYnJhbmNoMSwgby5icmFuY2gyKTsKKworCWZhaWxlZCA9IG1lcmdlX3JlY3Vyc2l2ZV9nZW5lcmljKCZvLCBoMSwgaDIsIGJhc2VzX2NvdW50LCBiYXNlcywgJnJlc3VsdCk7CisJaWYgKGZhaWxlZCA8IDApCisJCXJldHVybiAxMjg7IC8qIGRpZSgpIGVycm9yIGNvZGUgKi8KKwlyZXR1cm4gZmFpbGVkOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS10cmVlLmMgYi9idWlsdGluL21lcmdlLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTdhNTYzCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tZXJnZS10cmVlLmMKQEAgLTAsMCArMSwzNTggQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAibWVyZ2UtZmlsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBtZXJnZV90cmVlX3VzYWdlW10gPSAiZ2l0IG1lcmdlLXRyZWUgPGJhc2UtdHJlZT4gPGJyYW5jaDE+IDxicmFuY2gyPiI7CitzdGF0aWMgaW50IHJlc29sdmVfZGlyZWN0b3JpZXMgPSAxOworCitzdHJ1Y3QgbWVyZ2VfbGlzdCB7CisJc3RydWN0IG1lcmdlX2xpc3QgKm5leHQ7CisJc3RydWN0IG1lcmdlX2xpc3QgKmxpbms7CS8qIG90aGVyIHN0YWdlcyBmb3IgdGhpcyBvYmplY3QgKi8KKworCXVuc2lnbmVkIGludCBzdGFnZSA6IDIsCisJCSAgICAgZmxhZ3MgOiAzMDsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwljb25zdCBjaGFyICpwYXRoOworCXN0cnVjdCBibG9iICpibG9iOworfTsKKworc3RhdGljIHN0cnVjdCBtZXJnZV9saXN0ICptZXJnZV9yZXN1bHQsICoqbWVyZ2VfcmVzdWx0X2VuZCA9ICZtZXJnZV9yZXN1bHQ7CisKK3N0YXRpYyB2b2lkIGFkZF9tZXJnZV9lbnRyeShzdHJ1Y3QgbWVyZ2VfbGlzdCAqZW50cnkpCit7CisJKm1lcmdlX3Jlc3VsdF9lbmQgPSBlbnRyeTsKKwltZXJnZV9yZXN1bHRfZW5kID0gJmVudHJ5LT5uZXh0OworfQorCitzdGF0aWMgdm9pZCBtZXJnZV90cmVlcyhzdHJ1Y3QgdHJlZV9kZXNjIHRbM10sIGNvbnN0IGNoYXIgKmJhc2UpOworCitzdGF0aWMgY29uc3QgY2hhciAqZXhwbGFuYXRpb24oc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5KQoreworCXN3aXRjaCAoZW50cnktPnN0YWdlKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gIm1lcmdlZCI7CisJY2FzZSAzOgorCQlyZXR1cm4gImFkZGVkIGluIHJlbW90ZSI7CisJY2FzZSAyOgorCQlpZiAoZW50cnktPmxpbmspCisJCQlyZXR1cm4gImFkZGVkIGluIGJvdGgiOworCQlyZXR1cm4gImFkZGVkIGluIGxvY2FsIjsKKwl9CisKKwkvKiBFeGlzdGVkIGluIGJhc2UgKi8KKwllbnRyeSA9IGVudHJ5LT5saW5rOworCWlmICghZW50cnkpCisJCXJldHVybiAicmVtb3ZlZCBpbiBib3RoIjsKKworCWlmIChlbnRyeS0+bGluaykKKwkJcmV0dXJuICJjaGFuZ2VkIGluIGJvdGgiOworCisJaWYgKGVudHJ5LT5zdGFnZSA9PSAzKQorCQlyZXR1cm4gInJlbW92ZWQgaW4gbG9jYWwiOworCXJldHVybiAicmVtb3ZlZCBpbiByZW1vdGUiOworfQorCitzdGF0aWMgdm9pZCAqcmVzdWx0KHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJc3RydWN0IGJsb2IgKmJhc2UsICpvdXIsICp0aGVpcjsKKwljb25zdCBjaGFyICpwYXRoID0gZW50cnktPnBhdGg7CisKKwlpZiAoIWVudHJ5LT5zdGFnZSkKKwkJcmV0dXJuIHJlYWRfc2hhMV9maWxlKGVudHJ5LT5ibG9iLT5vYmplY3Quc2hhMSwgJnR5cGUsIHNpemUpOworCWJhc2UgPSBOVUxMOworCWlmIChlbnRyeS0+c3RhZ2UgPT0gMSkgeworCQliYXNlID0gZW50cnktPmJsb2I7CisJCWVudHJ5ID0gZW50cnktPmxpbms7CisJfQorCW91ciA9IE5VTEw7CisJaWYgKGVudHJ5ICYmIGVudHJ5LT5zdGFnZSA9PSAyKSB7CisJCW91ciA9IGVudHJ5LT5ibG9iOworCQllbnRyeSA9IGVudHJ5LT5saW5rOworCX0KKwl0aGVpciA9IE5VTEw7CisJaWYgKGVudHJ5KQorCQl0aGVpciA9IGVudHJ5LT5ibG9iOworCXJldHVybiBtZXJnZV9maWxlKHBhdGgsIGJhc2UsIG91ciwgdGhlaXIsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCAqb3JpZ2luKHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJd2hpbGUgKGVudHJ5KSB7CisJCWlmIChlbnRyeS0+c3RhZ2UgPT0gMikKKwkJCXJldHVybiByZWFkX3NoYTFfZmlsZShlbnRyeS0+YmxvYi0+b2JqZWN0LnNoYTEsICZ0eXBlLCBzaXplKTsKKwkJZW50cnkgPSBlbnRyeS0+bGluazsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19vdXRmKHZvaWQgKnByaXZfLCBtbWJ1ZmZlcl90ICptYiwgaW50IG5idWYpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5idWY7IGkrKykKKwkJcHJpbnRmKCIlLipzIiwgKGludCkgbWJbaV0uc2l6ZSwgbWJbaV0ucHRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19kaWZmKHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJbW1maWxlX3Qgc3JjLCBkc3Q7CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisJeGRlbWl0Y2JfdCBlY2I7CisKKwl4cHAuZmxhZ3MgPSAwOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCXhlY2ZnLmN0eGxlbiA9IDM7CisJZWNiLm91dGYgPSBzaG93X291dGY7CisJZWNiLnByaXYgPSBOVUxMOworCisJc3JjLnB0ciA9IG9yaWdpbihlbnRyeSwgJnNpemUpOworCWlmICghc3JjLnB0cikKKwkJc2l6ZSA9IDA7CisJc3JjLnNpemUgPSBzaXplOworCWRzdC5wdHIgPSByZXN1bHQoZW50cnksICZzaXplKTsKKwlpZiAoIWRzdC5wdHIpCisJCXNpemUgPSAwOworCWRzdC5zaXplID0gc2l6ZTsKKwl4ZGlfZGlmZigmc3JjLCAmZHN0LCAmeHBwLCAmeGVjZmcsICZlY2IpOworCWZyZWUoc3JjLnB0cik7CisJZnJlZShkc3QucHRyKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19yZXN1bHRfbGlzdChzdHJ1Y3QgbWVyZ2VfbGlzdCAqZW50cnkpCit7CisJcHJpbnRmKCIlc1xuIiwgZXhwbGFuYXRpb24oZW50cnkpKTsKKwlkbyB7CisJCXN0cnVjdCBtZXJnZV9saXN0ICpsaW5rID0gZW50cnktPmxpbms7CisJCXN0YXRpYyBjb25zdCBjaGFyICpkZXNjWzRdID0geyAicmVzdWx0IiwgImJhc2UiLCAib3VyIiwgInRoZWlyIiB9OworCQlwcmludGYoIiAgJS02cyAlbyAlcyAlc1xuIiwgZGVzY1tlbnRyeS0+c3RhZ2VdLCBlbnRyeS0+bW9kZSwgc2hhMV90b19oZXgoZW50cnktPmJsb2ItPm9iamVjdC5zaGExKSwgZW50cnktPnBhdGgpOworCQllbnRyeSA9IGxpbms7CisJfSB3aGlsZSAoZW50cnkpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3Jlc3VsdCh2b2lkKQoreworCXN0cnVjdCBtZXJnZV9saXN0ICp3YWxrOworCisJd2FsayA9IG1lcmdlX3Jlc3VsdDsKKwl3aGlsZSAod2FsaykgeworCQlzaG93X3Jlc3VsdF9saXN0KHdhbGspOworCQlzaG93X2RpZmYod2Fsayk7CisJCXdhbGsgPSB3YWxrLT5uZXh0OworCX0KK30KKworLyogQW4gZW1wdHkgZW50cnkgbmV2ZXIgY29tcGFyZXMgc2FtZSwgbm90IGV2ZW4gdG8gYW5vdGhlciBlbXB0eSBlbnRyeSAqLworc3RhdGljIGludCBzYW1lX2VudHJ5KHN0cnVjdCBuYW1lX2VudHJ5ICphLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqYikKK3sKKwlyZXR1cm4JYS0+c2hhMSAmJgorCQliLT5zaGExICYmCisJCSFoYXNoY21wKGEtPnNoYTEsIGItPnNoYTEpICYmCisJCWEtPm1vZGUgPT0gYi0+bW9kZTsKK30KKworc3RhdGljIHN0cnVjdCBtZXJnZV9saXN0ICpjcmVhdGVfZW50cnkodW5zaWduZWQgc3RhZ2UsIHVuc2lnbmVkIG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IG1lcmdlX2xpc3QgKnJlcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXMpKTsKKworCXJlcy0+c3RhZ2UgPSBzdGFnZTsKKwlyZXMtPnBhdGggPSBwYXRoOworCXJlcy0+bW9kZSA9IG1vZGU7CisJcmVzLT5ibG9iID0gbG9va3VwX2Jsb2Ioc2hhMSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGNoYXIgKnRyYXZlcnNlX3BhdGgoY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpuKQoreworCWNoYXIgKnBhdGggPSB4bWFsbG9jKHRyYXZlcnNlX3BhdGhfbGVuKGluZm8sIG4pICsgMSk7CisJcmV0dXJuIG1ha2VfdHJhdmVyc2VfcGF0aChwYXRoLCBpbmZvLCBuKTsKK30KKworc3RhdGljIHZvaWQgcmVzb2x2ZShjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgc3RydWN0IG5hbWVfZW50cnkgKmJyYW5jaDEsIHN0cnVjdCBuYW1lX2VudHJ5ICpyZXN1bHQpCit7CisJc3RydWN0IG1lcmdlX2xpc3QgKm9yaWcsICpmaW5hbDsKKwljb25zdCBjaGFyICpwYXRoOworCisJLyogSWYgaXQncyBhbHJlYWR5IGJyYW5jaDEsIGRvbid0IGJvdGhlciBzaG93aW5nIGl0ICovCisJaWYgKCFicmFuY2gxKQorCQlyZXR1cm47CisKKwlwYXRoID0gdHJhdmVyc2VfcGF0aChpbmZvLCByZXN1bHQpOworCW9yaWcgPSBjcmVhdGVfZW50cnkoMiwgYnJhbmNoMS0+bW9kZSwgYnJhbmNoMS0+c2hhMSwgcGF0aCk7CisJZmluYWwgPSBjcmVhdGVfZW50cnkoMCwgcmVzdWx0LT5tb2RlLCByZXN1bHQtPnNoYTEsIHBhdGgpOworCisJZmluYWwtPmxpbmsgPSBvcmlnOworCisJYWRkX21lcmdlX2VudHJ5KGZpbmFsKTsKK30KKworc3RhdGljIGludCB1bnJlc29sdmVkX2RpcmVjdG9yeShjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgc3RydWN0IG5hbWVfZW50cnkgblszXSkKK3sKKwljaGFyICpuZXdiYXNlOworCXN0cnVjdCBuYW1lX2VudHJ5ICpwOworCXN0cnVjdCB0cmVlX2Rlc2MgdFszXTsKKwl2b2lkICpidWYwLCAqYnVmMSwgKmJ1ZjI7CisKKwlpZiAoIXJlc29sdmVfZGlyZWN0b3JpZXMpCisJCXJldHVybiAwOworCXAgPSBuOworCWlmICghcC0+bW9kZSkgeworCQlwKys7CisJCWlmICghcC0+bW9kZSkKKwkJCXArKzsKKwl9CisJaWYgKCFTX0lTRElSKHAtPm1vZGUpKQorCQlyZXR1cm4gMDsKKwluZXdiYXNlID0gdHJhdmVyc2VfcGF0aChpbmZvLCBwKTsKKwlidWYwID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IodCswLCBuWzBdLnNoYTEpOworCWJ1ZjEgPSBmaWxsX3RyZWVfZGVzY3JpcHRvcih0KzEsIG5bMV0uc2hhMSk7CisJYnVmMiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHQrMiwgblsyXS5zaGExKTsKKwltZXJnZV90cmVlcyh0LCBuZXdiYXNlKTsKKworCWZyZWUoYnVmMCk7CisJZnJlZShidWYxKTsKKwlmcmVlKGJ1ZjIpOworCWZyZWUobmV3YmFzZSk7CisJcmV0dXJuIDE7Cit9CisKKworc3RhdGljIHN0cnVjdCBtZXJnZV9saXN0ICpsaW5rX2VudHJ5KHVuc2lnbmVkIHN0YWdlLCBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgc3RydWN0IG5hbWVfZW50cnkgKm4sIHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSkKK3sKKwljb25zdCBjaGFyICpwYXRoOworCXN0cnVjdCBtZXJnZV9saXN0ICpsaW5rOworCisJaWYgKCFuLT5tb2RlKQorCQlyZXR1cm4gZW50cnk7CisJaWYgKGVudHJ5KQorCQlwYXRoID0gZW50cnktPnBhdGg7CisJZWxzZQorCQlwYXRoID0gdHJhdmVyc2VfcGF0aChpbmZvLCBuKTsKKwlsaW5rID0gY3JlYXRlX2VudHJ5KHN0YWdlLCBuLT5tb2RlLCBuLT5zaGExLCBwYXRoKTsKKwlsaW5rLT5saW5rID0gZW50cnk7CisJcmV0dXJuIGxpbms7Cit9CisKK3N0YXRpYyB2b2lkIHVucmVzb2x2ZWQoY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIHN0cnVjdCBuYW1lX2VudHJ5IG5bM10pCit7CisJc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5ID0gTlVMTDsKKworCWlmICh1bnJlc29sdmVkX2RpcmVjdG9yeShpbmZvLCBuKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBEbyB0aGVtIGluIHJldmVyc2Ugb3JkZXIgc28gdGhhdCB0aGUgcmVzdWx0aW5nIGxpbmsKKwkgKiBsaXN0IGhhcyB0aGUgc3RhZ2VzIGluIG9yZGVyIC0gbGlua19lbnRyeSBhZGRzIG5ldworCSAqIGxpbmtzIGF0IHRoZSBmcm9udC4KKwkgKi8KKwllbnRyeSA9IGxpbmtfZW50cnkoMywgaW5mbywgbiArIDIsIGVudHJ5KTsKKwllbnRyeSA9IGxpbmtfZW50cnkoMiwgaW5mbywgbiArIDEsIGVudHJ5KTsKKwllbnRyeSA9IGxpbmtfZW50cnkoMSwgaW5mbywgbiArIDAsIGVudHJ5KTsKKworCWFkZF9tZXJnZV9lbnRyeShlbnRyeSk7Cit9CisKKy8qCisgKiBNZXJnZSB0d28gdHJlZXMgdG9nZXRoZXIgKHRbMV0gYW5kIHRbMl0pLCB1c2luZyBhIGNvbW1vbiBiYXNlICh0WzBdKQorICogYXMgdGhlIG9yaWdpbi4KKyAqCisgKiBUaGlzIHdhbGtzIHRoZSAoc29ydGVkKSB0cmVlcyBpbiBsb2NrLXN0ZXAsIGNoZWNraW5nIGV2ZXJ5IHBvc3NpYmxlCisgKiBuYW1lLiBOb3RlIHRoYXQgZGlyZWN0b3JpZXMgYXV0b21hdGljYWxseSBzb3J0IGRpZmZlcmVudGx5IGZyb20gb3RoZXIKKyAqIGZpbGVzIChzZWUgImJhc2VfbmFtZV9jb21wYXJlIiksIHNvIHlvdSdsbCBuZXZlciBzZWUgZmlsZS9kaXJlY3RvcnkKKyAqIGNvbmZsaWN0cywgYmVjYXVzZSB0aGV5IHdvbid0IGV2ZXIgY29tcGFyZSB0aGUgc2FtZS4KKyAqCisgKiBJT1csIGlmIGEgZGlyZWN0b3J5IGNoYW5nZXMgdG8gYSBmaWxlbmFtZSwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlCisgKiBzZWVuIGFzIHRoZSBkaXJlY3RvcnkgZ29pbmcgYXdheSwgYW5kIHRoZSBmaWxlbmFtZSBiZWluZyBjcmVhdGVkLgorICoKKyAqIFRoaW5rIG9mIHRoaXMgYXMgYSB0aHJlZS13YXkgZGlmZi4KKyAqCisgKiBUaGUgb3V0cHV0IHdpbGwgYmUgZWl0aGVyOgorICogIC0gc3VjY2Vzc2Z1bCBtZXJnZQorICoJICIwIG1vZGUgc2hhMSBmaWxlbmFtZSIKKyAqICAgIE5PVEUgTk9URSBOT1RFISBGSVhNRSEgV2UgcmVhbGx5IHJlYWxseSBuZWVkIHRvIHdhbGsgdGhlIGluZGV4CisgKiAgICBpbiBwYXJhbGxlbCB3aXRoIHRoaXMgdG9vIQorICoKKyAqICAtIGNvbmZsaWN0OgorICoJIjEgbW9kZSBzaGExIGZpbGVuYW1lIgorICoJIjIgbW9kZSBzaGExIGZpbGVuYW1lIgorICoJIjMgbW9kZSBzaGExIGZpbGVuYW1lIgorICogICAgd2hlcmUgbm90IGFsbCBvZiB0aGUgMS8yLzMgbGluZXMgbWF5IGV4aXN0LCBvZiBjb3Vyc2UuCisgKgorICogVGhlIHN1Y2Nlc3NmdWwgbWVyZ2UgcnVsZXMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgdGhyZWUtd2F5IG1lcmdlCisgKiBpbiBnaXQtcmVhZC10cmVlLgorICovCitzdGF0aWMgaW50IHRocmVld2F5X2NhbGxiYWNrKGludCBuLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZGlybWFzaywgc3RydWN0IG5hbWVfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwkvKiBTYW1lIGluIGJvdGg/ICovCisJaWYgKHNhbWVfZW50cnkoZW50cnkrMSwgZW50cnkrMikpIHsKKwkJaWYgKGVudHJ5WzBdLnNoYTEpIHsKKwkJCXJlc29sdmUoaW5mbywgTlVMTCwgZW50cnkrMSk7CisJCQlyZXR1cm4gbWFzazsKKwkJfQorCX0KKworCWlmIChzYW1lX2VudHJ5KGVudHJ5KzAsIGVudHJ5KzEpKSB7CisJCWlmIChlbnRyeVsyXS5zaGExICYmICFTX0lTRElSKGVudHJ5WzJdLm1vZGUpKSB7CisJCQlyZXNvbHZlKGluZm8sIGVudHJ5KzEsIGVudHJ5KzIpOworCQkJcmV0dXJuIG1hc2s7CisJCX0KKwl9CisKKwlpZiAoc2FtZV9lbnRyeShlbnRyeSswLCBlbnRyeSsyKSkgeworCQlpZiAoZW50cnlbMV0uc2hhMSAmJiAhU19JU0RJUihlbnRyeVsxXS5tb2RlKSkgeworCQkJcmVzb2x2ZShpbmZvLCBOVUxMLCBlbnRyeSsxKTsKKwkJCXJldHVybiBtYXNrOworCQl9CisJfQorCisJdW5yZXNvbHZlZChpbmZvLCBlbnRyeSk7CisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX3RyZWVzKHN0cnVjdCB0cmVlX2Rlc2MgdFszXSwgY29uc3QgY2hhciAqYmFzZSkKK3sKKwlzdHJ1Y3QgdHJhdmVyc2VfaW5mbyBpbmZvOworCisJc2V0dXBfdHJhdmVyc2VfaW5mbygmaW5mbywgYmFzZSk7CisJaW5mby5mbiA9IHRocmVld2F5X2NhbGxiYWNrOworCXRyYXZlcnNlX3RyZWVzKDMsIHQsICZpbmZvKTsKK30KKworc3RhdGljIHZvaWQgKmdldF90cmVlX2Rlc2NyaXB0b3Ioc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqcmV2KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdm9pZCAqYnVmOworCisJaWYgKGdldF9zaGExKHJldiwgc2hhMSkpCisJCWRpZSgidW5rbm93biByZXYgJXMiLCByZXYpOworCWJ1ZiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKGRlc2MsIHNoYTEpOworCWlmICghYnVmKQorCQlkaWUoIiVzIGlzIG5vdCBhIHRyZWUiLCByZXYpOworCXJldHVybiBidWY7Cit9CisKK2ludCBjbWRfbWVyZ2VfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbM107CisJdm9pZCAqYnVmMSwgKmJ1ZjIsICpidWYzOworCisJaWYgKGFyZ2MgIT0gNCkKKwkJdXNhZ2UobWVyZ2VfdHJlZV91c2FnZSk7CisKKwlidWYxID0gZ2V0X3RyZWVfZGVzY3JpcHRvcih0KzAsIGFyZ3ZbMV0pOworCWJ1ZjIgPSBnZXRfdHJlZV9kZXNjcmlwdG9yKHQrMSwgYXJndlsyXSk7CisJYnVmMyA9IGdldF90cmVlX2Rlc2NyaXB0b3IodCsyLCBhcmd2WzNdKTsKKwltZXJnZV90cmVlcyh0LCAiIik7CisJZnJlZShidWYxKTsKKwlmcmVlKGJ1ZjIpOworCWZyZWUoYnVmMyk7CisKKwlzaG93X3Jlc3VsdCgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS5jIGIvYnVpbHRpbi9tZXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYzhmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLmMKQEAgLTAsMCArMSwxNjEzIEBACisvKgorICogQnVpbHRpbiAiZ2l0IG1lcmdlIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBNaWtsb3MgVmFqbmEgPHZtaWtsb3NAZnJ1Z2Fsd2FyZS5vcmc+CisgKgorICogQmFzZWQgb24gZ2l0LW1lcmdlLnNoIGJ5IEp1bmlvIEMgSGFtYW5vLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJyZXJlcmUuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAiZm10LW1lcmdlLW1zZy5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKworI2RlZmluZSBERUZBVUxUX1RXT0hFQUQgKDE8PDApCisjZGVmaW5lIERFRkFVTFRfT0NUT1BVUyAoMTw8MSkKKyNkZWZpbmUgTk9fRkFTVF9GT1JXQVJEICgxPDwyKQorI2RlZmluZSBOT19UUklWSUFMICAgICAgKDE8PDMpCisKK3N0cnVjdCBzdHJhdGVneSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBhdHRyOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX21lcmdlX3VzYWdlW10gPSB7CisJTl8oImdpdCBtZXJnZSBbb3B0aW9uc10gWzxjb21taXQ+Li4uXSIpLAorCU5fKCJnaXQgbWVyZ2UgW29wdGlvbnNdIDxtc2c+IEhFQUQgPGNvbW1pdD4iKSwKKwlOXygiZ2l0IG1lcmdlIC0tYWJvcnQiKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHNob3dfZGlmZnN0YXQgPSAxLCBzaG9ydGxvZ19sZW4gPSAtMSwgc3F1YXNoOworc3RhdGljIGludCBvcHRpb25fY29tbWl0ID0gMSwgYWxsb3dfZmFzdF9mb3J3YXJkID0gMTsKK3N0YXRpYyBpbnQgZmFzdF9mb3J3YXJkX29ubHksIG9wdGlvbl9lZGl0ID0gLTE7CitzdGF0aWMgaW50IGFsbG93X3RyaXZpYWwgPSAxLCBoYXZlX21lc3NhZ2U7CitzdGF0aWMgaW50IG92ZXJ3cml0ZV9pZ25vcmUgPSAxOworc3RhdGljIHN0cnVjdCBzdHJidWYgbWVyZ2VfbXNnID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgc3RydWN0IHN0cmF0ZWd5ICoqdXNlX3N0cmF0ZWdpZXM7CitzdGF0aWMgc2l6ZV90IHVzZV9zdHJhdGVnaWVzX25yLCB1c2Vfc3RyYXRlZ2llc19hbGxvYzsKK3N0YXRpYyBjb25zdCBjaGFyICoqeG9wdHM7CitzdGF0aWMgc2l6ZV90IHhvcHRzX25yLCB4b3B0c19hbGxvYzsKK3N0YXRpYyBjb25zdCBjaGFyICpicmFuY2g7CitzdGF0aWMgY2hhciAqYnJhbmNoX21lcmdlb3B0aW9uczsKK3N0YXRpYyBpbnQgb3B0aW9uX3Jlbm9ybWFsaXplOworc3RhdGljIGludCB2ZXJib3NpdHk7CitzdGF0aWMgaW50IGFsbG93X3JlcmVyZV9hdXRvOworc3RhdGljIGludCBhYm9ydF9jdXJyZW50X21lcmdlOworc3RhdGljIGludCBzaG93X3Byb2dyZXNzID0gLTE7CitzdGF0aWMgaW50IGRlZmF1bHRfdG9fdXBzdHJlYW07CitzdGF0aWMgY29uc3QgY2hhciAqc2lnbl9jb21taXQ7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYXRlZ3kgYWxsX3N0cmF0ZWd5W10gPSB7CisJeyAicmVjdXJzaXZlIiwgIERFRkFVTFRfVFdPSEVBRCB8IE5PX1RSSVZJQUwgfSwKKwl7ICJvY3RvcHVzIiwgICAgREVGQVVMVF9PQ1RPUFVTIH0sCisJeyAicmVzb2x2ZSIsICAgIDAgfSwKKwl7ICJvdXJzIiwgICAgICAgTk9fRkFTVF9GT1JXQVJEIHwgTk9fVFJJVklBTCB9LAorCXsgInN1YnRyZWUiLCAgICBOT19GQVNUX0ZPUldBUkQgfCBOT19UUklWSUFMIH0sCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcHVsbF90d29oZWFkLCAqcHVsbF9vY3RvcHVzOworCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9tZXNzYWdlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSBvcHQtPnZhbHVlOworCisJaWYgKHVuc2V0KQorCQlzdHJidWZfc2V0bGVuKGJ1ZiwgMCk7CisJZWxzZSBpZiAoYXJnKSB7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzJXMiLCBidWYtPmxlbiA/ICJcblxuIiA6ICIiLCBhcmcpOworCQloYXZlX21lc3NhZ2UgPSAxOworCX0gZWxzZQorCQlyZXR1cm4gZXJyb3IoXygic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0cmF0ZWd5ICpnZXRfc3RyYXRlZ3koY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYXRlZ3kgKnJldDsKKwlzdGF0aWMgc3RydWN0IGNtZG5hbWVzIG1haW5fY21kcywgb3RoZXJfY21kczsKKwlzdGF0aWMgaW50IGxvYWRlZDsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGxfc3RyYXRlZ3kpOyBpKyspCisJCWlmICghc3RyY21wKG5hbWUsIGFsbF9zdHJhdGVneVtpXS5uYW1lKSkKKwkJCXJldHVybiAmYWxsX3N0cmF0ZWd5W2ldOworCisJaWYgKCFsb2FkZWQpIHsKKwkJc3RydWN0IGNtZG5hbWVzIG5vdF9zdHJhdGVnaWVzOworCQlsb2FkZWQgPSAxOworCisJCW1lbXNldCgmbm90X3N0cmF0ZWdpZXMsIDAsIHNpemVvZihzdHJ1Y3QgY21kbmFtZXMpKTsKKwkJbG9hZF9jb21tYW5kX2xpc3QoImdpdC1tZXJnZS0iLCAmbWFpbl9jbWRzLCAmb3RoZXJfY21kcyk7CisJCWZvciAoaSA9IDA7IGkgPCBtYWluX2NtZHMuY250OyBpKyspIHsKKwkJCWludCBqLCBmb3VuZCA9IDA7CisJCQlzdHJ1Y3QgY21kbmFtZSAqZW50ID0gbWFpbl9jbWRzLm5hbWVzW2ldOworCQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoYWxsX3N0cmF0ZWd5KTsgaisrKQorCQkJCWlmICghc3RybmNtcChlbnQtPm5hbWUsIGFsbF9zdHJhdGVneVtqXS5uYW1lLCBlbnQtPmxlbikKKwkJCQkJCSYmICFhbGxfc3RyYXRlZ3lbal0ubmFtZVtlbnQtPmxlbl0pCisJCQkJCWZvdW5kID0gMTsKKwkJCWlmICghZm91bmQpCisJCQkJYWRkX2NtZG5hbWUoJm5vdF9zdHJhdGVnaWVzLCBlbnQtPm5hbWUsIGVudC0+bGVuKTsKKwkJfQorCQlleGNsdWRlX2NtZHMoJm1haW5fY21kcywgJm5vdF9zdHJhdGVnaWVzKTsKKwl9CisJaWYgKCFpc19pbl9jbWRsaXN0KCZtYWluX2NtZHMsIG5hbWUpICYmICFpc19pbl9jbWRsaXN0KCZvdGhlcl9jbWRzLCBuYW1lKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIpLCBuYW1lKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiKSk7CisJCWZvciAoaSA9IDA7IGkgPCBtYWluX2NtZHMuY250OyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIG1haW5fY21kcy5uYW1lc1tpXS0+bmFtZSk7CisJCWZwcmludGYoc3RkZXJyLCAiLlxuIik7CisJCWlmIChvdGhlcl9jbWRzLmNudCkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IikpOworCQkJZm9yIChpID0gMDsgaSA8IG90aGVyX2NtZHMuY250OyBpKyspCisJCQkJZnByaW50ZihzdGRlcnIsICIgJXMiLCBvdGhlcl9jbWRzLm5hbWVzW2ldLT5uYW1lKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiLlxuIik7CisJCX0KKwkJZXhpdCgxKTsKKwl9CisKKwlyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RyYXRlZ3kpKTsKKwlyZXQtPm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCXJldC0+YXR0ciA9IE5PX1RSSVZJQUw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmF0ZWd5KHN0cnVjdCBzdHJhdGVneSAqcykKK3sKKwlBTExPQ19HUk9XKHVzZV9zdHJhdGVnaWVzLCB1c2Vfc3RyYXRlZ2llc19uciArIDEsIHVzZV9zdHJhdGVnaWVzX2FsbG9jKTsKKwl1c2Vfc3RyYXRlZ2llc1t1c2Vfc3RyYXRlZ2llc19ucisrXSA9IHM7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3N0cmF0ZWd5KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSwgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkKKwkJcmV0dXJuIDA7CisKKwlhcHBlbmRfc3RyYXRlZ3koZ2V0X3N0cmF0ZWd5KG5hbWUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfeChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkKKwkJcmV0dXJuIDA7CisKKwlBTExPQ19HUk9XKHhvcHRzLCB4b3B0c19uciArIDEsIHhvcHRzX2FsbG9jKTsKKwl4b3B0c1t4b3B0c19ucisrXSA9IHhzdHJkdXAoYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2Vfbihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXNob3dfZGlmZnN0YXQgPSB1bnNldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9tZXJnZV9vcHRpb25zW10gPSB7CisJeyBPUFRJT05fQ0FMTEJBQ0ssICduJywgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTl8oImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiKSwKKwkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2VfbiB9LAorCU9QVF9CT09MRUFOKDAsICJzdGF0IiwgJnNob3dfZGlmZnN0YXQsCisJCU5fKCJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiKSksCisJT1BUX0JPT0xFQU4oMCwgInN1bW1hcnkiLCAmc2hvd19kaWZmc3RhdCwgTl8oIihzeW5vbnltIHRvIC0tc3RhdCkiKSksCisJeyBPUFRJT05fSU5URUdFUiwgMCwgImxvZyIsICZzaG9ydGxvZ19sZW4sIE5fKCJuIiksCisJICBOXygiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIiksCisJICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCBERUZBVUxUX01FUkdFX0xPR19MRU4gfSwKKwlPUFRfQk9PTEVBTigwLCAic3F1YXNoIiwgJnNxdWFzaCwKKwkJTl8oImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIikpLAorCU9QVF9CT09MRUFOKDAsICJjb21taXQiLCAmb3B0aW9uX2NvbW1pdCwKKwkJTl8oInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIpKSwKKwlPUFRfQk9PTCgnZScsICJlZGl0IiwgJm9wdGlvbl9lZGl0LAorCQlOXygiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIikpLAorCU9QVF9CT09MRUFOKDAsICJmZiIsICZhbGxvd19mYXN0X2ZvcndhcmQsCisJCU5fKCJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIikpLAorCU9QVF9CT09MRUFOKDAsICJmZi1vbmx5IiwgJmZhc3RfZm9yd2FyZF9vbmx5LAorCQlOXygiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIpKSwKKwlPUFRfUkVSRVJFX0FVVE9VUERBVEUoJmFsbG93X3JlcmVyZV9hdXRvKSwKKwlPUFRfQ0FMTEJBQ0soJ3MnLCAic3RyYXRlZ3kiLCAmdXNlX3N0cmF0ZWdpZXMsIE5fKCJzdHJhdGVneSIpLAorCQlOXygibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIiksIG9wdGlvbl9wYXJzZV9zdHJhdGVneSksCisJT1BUX0NBTExCQUNLKCdYJywgInN0cmF0ZWd5LW9wdGlvbiIsICZ4b3B0cywgTl8oIm9wdGlvbj12YWx1ZSIpLAorCQlOXygib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIpLCBvcHRpb25fcGFyc2VfeCksCisJT1BUX0NBTExCQUNLKCdtJywgIm1lc3NhZ2UiLCAmbWVyZ2VfbXNnLCBOXygibWVzc2FnZSIpLAorCQlOXygibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIiksCisJCW9wdGlvbl9wYXJzZV9tZXNzYWdlKSwKKwlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zaXR5KSwKKwlPUFRfQk9PTEVBTigwLCAiYWJvcnQiLCAmYWJvcnRfY3VycmVudF9tZXJnZSwKKwkJTl8oImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIikpLAorCU9QVF9TRVRfSU5UKDAsICJwcm9ncmVzcyIsICZzaG93X3Byb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIiksIDEpLAorCXsgT1BUSU9OX1NUUklORywgJ1MnLCAiZ3BnLXNpZ24iLCAmc2lnbl9jb21taXQsIE5fKCJrZXkgaWQiKSwKKwkgIE5fKCJHUEcgc2lnbiBjb21taXQiKSwgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiIiB9LAorCU9QVF9CT09MRUFOKDAsICJvdmVyd3JpdGUtaWdub3JlIiwgJm92ZXJ3cml0ZV9pZ25vcmUsIE5fKCJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiKSksCisJT1BUX0VORCgpCit9OworCisvKiBDbGVhbnMgdXAgbWV0YWRhdGEgdGhhdCBpcyB1bmludGVyZXN0aW5nIGFmdGVyIGEgc3VjY2VlZGVkIG1lcmdlLiAqLworc3RhdGljIHZvaWQgZHJvcF9zYXZlKHZvaWQpCit7CisJdW5saW5rKGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpOworCXVubGluayhnaXRfcGF0aCgiTUVSR0VfTVNHIikpOworCXVubGluayhnaXRfcGF0aCgiTUVSR0VfTU9ERSIpKTsKK30KKworc3RhdGljIGludCBzYXZlX3N0YXRlKHVuc2lnbmVkIGNoYXIgKnN0YXNoKQoreworCWludCBsZW47CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3A7CisJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7InN0YXNoIiwgImNyZWF0ZSIsIE5VTEx9OworCisJbWVtc2V0KCZjcCwgMCwgc2l6ZW9mKGNwKSk7CisJY3AuYXJndiA9IGFyZ3Y7CisJY3Aub3V0ID0gLTE7CisJY3AuZ2l0X2NtZCA9IDE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY3ApKQorCQlkaWUoXygiY291bGQgbm90IHJ1biBzdGFzaC4iKSk7CisJbGVuID0gc3RyYnVmX3JlYWQoJmJ1ZmZlciwgY3Aub3V0LCAxMDI0KTsKKwljbG9zZShjcC5vdXQpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjcCkgfHwgbGVuIDwgMCkKKwkJZGllKF8oInN0YXNoIGZhaWxlZCIpKTsKKwllbHNlIGlmICghbGVuKQkJLyogbm8gY2hhbmdlcyAqLworCQlyZXR1cm4gLTE7CisJc3RyYnVmX3NldGxlbigmYnVmZmVyLCBidWZmZXIubGVuLTEpOworCWlmIChnZXRfc2hhMShidWZmZXIuYnVmLCBzdGFzaCkpCisJCWRpZShfKCJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIiksIGJ1ZmZlci5idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWFkX2VtcHR5KHVuc2lnbmVkIGNvbnN0IGNoYXIgKnNoYTEsIGludCB2ZXJib3NlKQoreworCWludCBpID0gMDsKKwljb25zdCBjaGFyICphcmdzWzddOworCisJYXJnc1tpKytdID0gInJlYWQtdHJlZSI7CisJaWYgKHZlcmJvc2UpCisJCWFyZ3NbaSsrXSA9ICItdiI7CisJYXJnc1tpKytdID0gIi1tIjsKKwlhcmdzW2krK10gPSAiLXUiOworCWFyZ3NbaSsrXSA9IEVNUFRZX1RSRUVfU0hBMV9IRVg7CisJYXJnc1tpKytdID0gc2hhMV90b19oZXgoc2hhMSk7CisJYXJnc1tpXSA9IE5VTEw7CisKKwlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJncywgUlVOX0dJVF9DTUQpKQorCQlkaWUoXygicmVhZC10cmVlIGZhaWxlZCIpKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfaGFyZCh1bnNpZ25lZCBjb25zdCBjaGFyICpzaGExLCBpbnQgdmVyYm9zZSkKK3sKKwlpbnQgaSA9IDA7CisJY29uc3QgY2hhciAqYXJnc1s2XTsKKworCWFyZ3NbaSsrXSA9ICJyZWFkLXRyZWUiOworCWlmICh2ZXJib3NlKQorCQlhcmdzW2krK10gPSAiLXYiOworCWFyZ3NbaSsrXSA9ICItLXJlc2V0IjsKKwlhcmdzW2krK10gPSAiLXUiOworCWFyZ3NbaSsrXSA9IHNoYTFfdG9faGV4KHNoYTEpOworCWFyZ3NbaV0gPSBOVUxMOworCisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MsIFJVTl9HSVRfQ01EKSkKKwkJZGllKF8oInJlYWQtdHJlZSBmYWlsZWQiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfc3RhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZCwKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqc3Rhc2gpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmFyZ3NbXSA9IHsgInN0YXNoIiwgImFwcGx5IiwgTlVMTCwgTlVMTCB9OworCisJaWYgKGlzX251bGxfc2hhMShzdGFzaCkpCisJCXJldHVybjsKKworCXJlc2V0X2hhcmQoaGVhZCwgMSk7CisKKwlhcmdzWzJdID0gc2hhMV90b19oZXgoc3Rhc2gpOworCisJLyoKKwkgKiBJdCBpcyBPSyB0byBpZ25vcmUgZXJyb3IgaGVyZSwgZm9yIGV4YW1wbGUgd2hlbiB0aGVyZSB3YXMKKwkgKiBub3RoaW5nIHRvIHJlc3RvcmUuCisJICovCisJcnVuX2NvbW1hbmRfdl9vcHQoYXJncywgUlVOX0dJVF9DTUQpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworfQorCisvKiBUaGlzIGlzIGNhbGxlZCB3aGVuIG5vIG1lcmdlIHdhcyBuZWNlc3NhcnkuICovCitzdGF0aWMgdm9pZCBmaW5pc2hfdXBfdG9fZGF0ZShjb25zdCBjaGFyICptc2cpCit7CisJaWYgKHZlcmJvc2l0eSA+PSAwKQorCQlwcmludGYoIiVzJXNcbiIsIHNxdWFzaCA/IF8oIiAobm90aGluZyB0byBzcXVhc2gpIikgOiAiIiwgbXNnKTsKKwlkcm9wX3NhdmUoKTsKK30KKworc3RhdGljIHZvaWQgc3F1YXNoX21lc3NhZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmo7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJaW50IGZkOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisKKwlwcmludGYoXygiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIikpOworCWZpbGVuYW1lID0gZ2l0X3BhdGgoIlNRVUFTSF9NU0ciKTsKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIGZpbGVuYW1lKTsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOworCXJldi5pZ25vcmVfbWVyZ2VzID0gMTsKKwlyZXYuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX01FRElVTTsKKworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXYsICZjb21taXQtPm9iamVjdCwgTlVMTCk7CisKKwlmb3IgKGogPSByZW1vdGVoZWFkczsgajsgaiA9IGotPm5leHQpCisJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2LCAmai0+aXRlbS0+b2JqZWN0LCBOVUxMKTsKKworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCBOVUxMKTsKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwljdHguYWJicmV2ID0gcmV2LmFiYnJldjsKKwljdHguZGF0ZV9tb2RlID0gcmV2LmRhdGVfbW9kZTsKKwljdHguZm10ID0gcmV2LmNvbW1pdF9mb3JtYXQ7CisKKwlzdHJidWZfYWRkc3RyKCZvdXQsICJTcXVhc2hlZCBjb21taXQgb2YgdGhlIGZvbGxvd2luZzpcbiIpOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXYpKSAhPSBOVUxMKSB7CisJCXN0cmJ1Zl9hZGRjaCgmb3V0LCAnXG4nKTsKKwkJc3RyYnVmX2FkZGYoJm91dCwgImNvbW1pdCAlc1xuIiwKKwkJCXNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJcHJldHR5X3ByaW50X2NvbW1pdCgmY3R4LCBjb21taXQsICZvdXQpOworCX0KKwlpZiAod3JpdGUoZmQsIG91dC5idWYsIG91dC5sZW4pIDwgMCkKKwkJZGllX2Vycm5vKF8oIldyaXRpbmcgU1FVQVNIX01TRyIpKTsKKwlpZiAoY2xvc2UoZmQpKQorCQlkaWVfZXJybm8oXygiRmluaXNoaW5nIFNRVUFTSF9NU0ciKSk7CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaChzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdCwKKwkJICAgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcywKKwkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X2hlYWQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlZmxvZ19tZXNzYWdlID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZCA9IGhlYWRfY29tbWl0LT5vYmplY3Quc2hhMTsKKworCWlmICghbXNnKQorCQlzdHJidWZfYWRkc3RyKCZyZWZsb2dfbWVzc2FnZSwgZ2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIpKTsKKwllbHNlIHsKKwkJaWYgKHZlcmJvc2l0eSA+PSAwKQorCQkJcHJpbnRmKCIlc1xuIiwgbXNnKTsKKwkJc3RyYnVmX2FkZGYoJnJlZmxvZ19tZXNzYWdlLCAiJXM6ICVzIiwKKwkJCWdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKSwgbXNnKTsKKwl9CisJaWYgKHNxdWFzaCkgeworCQlzcXVhc2hfbWVzc2FnZShoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMpOworCX0gZWxzZSB7CisJCWlmICh2ZXJib3NpdHkgPj0gMCAmJiAhbWVyZ2VfbXNnLmxlbikKKwkJCXByaW50ZihfKCJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iKSk7CisJCWVsc2UgeworCQkJY29uc3QgY2hhciAqYXJndl9nY19hdXRvW10gPSB7ICJnYyIsICItLWF1dG8iLCBOVUxMIH07CisJCQl1cGRhdGVfcmVmKHJlZmxvZ19tZXNzYWdlLmJ1ZiwgIkhFQUQiLAorCQkJCW5ld19oZWFkLCBoZWFkLCAwLAorCQkJCURJRV9PTl9FUlIpOworCQkJLyoKKwkJCSAqIFdlIGlnbm9yZSBlcnJvcnMgaW4gJ2djIC0tYXV0bycsIHNpbmNlIHRoZQorCQkJICogdXNlciBzaG91bGQgc2VlIHRoZW0uCisJCQkgKi8KKwkJCXJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3ZfZ2NfYXV0bywgUlVOX0dJVF9DTUQpOworCQl9CisJfQorCWlmIChuZXdfaGVhZCAmJiBzaG93X2RpZmZzdGF0KSB7CisJCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKKwkJZGlmZl9zZXR1cCgmb3B0cyk7CisJCW9wdHMuc3RhdF93aWR0aCA9IC0xOyAvKiB1c2UgZnVsbCB0ZXJtaW5hbCB3aWR0aCAqLworCQlvcHRzLnN0YXRfZ3JhcGhfd2lkdGggPSAtMTsgLyogcmVzcGVjdCBzdGF0R3JhcGhXaWR0aCBjb25maWcgKi8KKwkJb3B0cy5vdXRwdXRfZm9ybWF0IHw9CisJCQlESUZGX0ZPUk1BVF9TVU1NQVJZIHwgRElGRl9GT1JNQVRfRElGRlNUQVQ7CisJCW9wdHMuZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX1JFTkFNRTsKKwkJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKKwkJZGlmZl90cmVlX3NoYTEoaGVhZCwgbmV3X2hlYWQsICIiLCAmb3B0cyk7CisJCWRpZmZjb3JlX3N0ZCgmb3B0cyk7CisJCWRpZmZfZmx1c2goJm9wdHMpOworCX0KKworCS8qIFJ1biBhIHBvc3QtbWVyZ2UgaG9vayAqLworCXJ1bl9ob29rKE5VTEwsICJwb3N0LW1lcmdlIiwgc3F1YXNoID8gIjEiIDogIjAiLCBOVUxMKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZsb2dfbWVzc2FnZSk7Cit9CisKKy8qIEdldCB0aGUgbmFtZSBmb3IgdGhlIG1lcmdlIGNvbW1pdCdzIG1lc3NhZ2UuICovCitzdGF0aWMgdm9pZCBtZXJnZV9uYW1lKGNvbnN0IGNoYXIgKnJlbW90ZSwgc3RydWN0IHN0cmJ1ZiAqbXNnKQoreworCXN0cnVjdCBjb21taXQgKnJlbW90ZV9oZWFkOworCXVuc2lnbmVkIGNoYXIgYnJhbmNoX2hlYWRbMjBdOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBibmFtZSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnB0cjsKKwljaGFyICpmb3VuZF9yZWY7CisJaW50IGxlbiwgZWFybHk7CisKKwlzdHJidWZfYnJhbmNobmFtZSgmYm5hbWUsIHJlbW90ZSk7CisJcmVtb3RlID0gYm5hbWUuYnVmOworCisJbWVtc2V0KGJyYW5jaF9oZWFkLCAwLCBzaXplb2YoYnJhbmNoX2hlYWQpKTsKKwlyZW1vdGVfaGVhZCA9IGdldF9tZXJnZV9wYXJlbnQocmVtb3RlKTsKKwlpZiAoIXJlbW90ZV9oZWFkKQorCQlkaWUoXygiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIpLCByZW1vdGUpOworCisJaWYgKGR3aW1fcmVmKHJlbW90ZSwgc3RybGVuKHJlbW90ZSksIGJyYW5jaF9oZWFkLCAmZm91bmRfcmVmKSA+IDApIHsKKwkJaWYgKCFwcmVmaXhjbXAoZm91bmRfcmVmLCAicmVmcy9oZWFkcy8iKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLCAiJXNcdFx0YnJhbmNoICclcycgb2YgLlxuIiwKKwkJCQkgICAgc2hhMV90b19oZXgoYnJhbmNoX2hlYWQpLCByZW1vdGUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCWlmICghcHJlZml4Y21wKGZvdW5kX3JlZiwgInJlZnMvdGFncy8iKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLCAiJXNcdFx0dGFnICclcycgb2YgLlxuIiwKKwkJCQkgICAgc2hhMV90b19oZXgoYnJhbmNoX2hlYWQpLCByZW1vdGUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCWlmICghcHJlZml4Y21wKGZvdW5kX3JlZiwgInJlZnMvcmVtb3Rlcy8iKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLCAiJXNcdFx0cmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG9mIC5cbiIsCisJCQkJICAgIHNoYTFfdG9faGV4KGJyYW5jaF9oZWFkKSwgcmVtb3RlKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKworCS8qIFNlZSBpZiByZW1vdGUgbWF0Y2hlcyA8bmFtZT5eXl4uLiBvciA8bmFtZT5+PG51bWJlcj4gKi8KKwlmb3IgKGxlbiA9IDAsIHB0ciA9IHJlbW90ZSArIHN0cmxlbihyZW1vdGUpOworCSAgICAgcmVtb3RlIDwgcHRyICYmIHB0clstMV0gPT0gJ14nOworCSAgICAgcHRyLS0pCisJCWxlbisrOworCWlmIChsZW4pCisJCWVhcmx5ID0gMTsKKwllbHNlIHsKKwkJZWFybHkgPSAwOworCQlwdHIgPSBzdHJyY2hyKHJlbW90ZSwgJ34nKTsKKwkJaWYgKHB0cikgeworCQkJaW50IHNlZW5fbm9uemVybyA9IDA7CisKKwkJCWxlbisrOyAvKiBjb3VudCB+ICovCisJCQl3aGlsZSAoKisrcHRyICYmIGlzZGlnaXQoKnB0cikpIHsKKwkJCQlzZWVuX25vbnplcm8gfD0gKCpwdHIgIT0gJzAnKTsKKwkJCQlsZW4rKzsKKwkJCX0KKwkJCWlmICgqcHRyKQorCQkJCWxlbiA9IDA7IC8qIG5vdCAuLi5+PG51bWJlcj4gKi8KKwkJCWVsc2UgaWYgKHNlZW5fbm9uemVybykKKwkJCQllYXJseSA9IDE7CisJCQllbHNlIGlmIChsZW4gPT0gMSkKKwkJCQllYXJseSA9IDE7IC8qICJuYW1lfiIgaXMgIm5hbWV+MSIhICovCisJCX0KKwl9CisJaWYgKGxlbikgeworCQlzdHJ1Y3Qgc3RyYnVmIHRydW5hbWUgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZHN0cigmdHJ1bmFtZSwgInJlZnMvaGVhZHMvIik7CisJCXN0cmJ1Zl9hZGRzdHIoJnRydW5hbWUsIHJlbW90ZSk7CisJCXN0cmJ1Zl9zZXRsZW4oJnRydW5hbWUsIHRydW5hbWUubGVuIC0gbGVuKTsKKwkJaWYgKHJlZl9leGlzdHModHJ1bmFtZS5idWYpKSB7CisJCQlzdHJidWZfYWRkZihtc2csCisJCQkJICAgICIlc1x0XHRicmFuY2ggJyVzJyVzIG9mIC5cbiIsCisJCQkJICAgIHNoYTFfdG9faGV4KHJlbW90ZV9oZWFkLT5vYmplY3Quc2hhMSksCisJCQkJICAgIHRydW5hbWUuYnVmICsgMTEsCisJCQkJICAgIChlYXJseSA/ICIgKGVhcmx5IHBhcnQpIiA6ICIiKSk7CisJCQlzdHJidWZfcmVsZWFzZSgmdHJ1bmFtZSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKKwlpZiAoIXN0cmNtcChyZW1vdGUsICJGRVRDSF9IRUFEIikgJiYKKwkJCSFhY2Nlc3MoZ2l0X3BhdGgoIkZFVENIX0hFQUQiKSwgUl9PSykpIHsKKwkJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJCUZJTEUgKmZwOworCQlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwkJY2hhciAqcHRyOworCisJCWZpbGVuYW1lID0gZ2l0X3BhdGgoIkZFVENIX0hFQUQiKTsKKwkJZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwkJaWYgKCFmcCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIiksCisJCQkJICBmaWxlbmFtZSk7CisJCXN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBmcCwgJ1xuJyk7CisJCWZjbG9zZShmcCk7CisJCXB0ciA9IHN0cnN0cihsaW5lLmJ1ZiwgIlx0bm90LWZvci1tZXJnZVx0Iik7CisJCWlmIChwdHIpCisJCQlzdHJidWZfcmVtb3ZlKCZsaW5lLCBwdHItbGluZS5idWYrMSwgMTMpOworCQlzdHJidWZfYWRkYnVmKG1zZywgJmxpbmUpOworCQlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJc3RyYnVmX2FkZGYobXNnLCAiJXNcdFx0Y29tbWl0ICclcydcbiIsCisJCXNoYTFfdG9faGV4KHJlbW90ZV9oZWFkLT5vYmplY3Quc2hhMSksIHJlbW90ZSk7CitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZibmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2JyYW5jaF9tZXJnZV9vcHRpb25zKGNoYXIgKmJtbykKK3sKKwljb25zdCBjaGFyICoqYXJndjsKKwlpbnQgYXJnYzsKKworCWlmICghYm1vKQorCQlyZXR1cm47CisJYXJnYyA9IHNwbGl0X2NtZGxpbmUoYm1vLCAmYXJndik7CisJaWYgKGFyZ2MgPCAwKQorCQlkaWUoXygiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIpLCBicmFuY2gsCisJCSAgICBzcGxpdF9jbWRsaW5lX3N0cmVycm9yKGFyZ2MpKTsKKwlhcmd2ID0geHJlYWxsb2MoYXJndiwgc2l6ZW9mKCphcmd2KSAqIChhcmdjICsgMikpOworCW1lbW1vdmUoYXJndiArIDEsIGFyZ3YsIHNpemVvZigqYXJndikgKiAoYXJnYyArIDEpKTsKKwlhcmdjKys7CisJYXJndlswXSA9ICJicmFuY2guKi5tZXJnZW9wdGlvbnMiOworCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgYnVpbHRpbl9tZXJnZV9vcHRpb25zLAorCQkgICAgICBidWlsdGluX21lcmdlX3VzYWdlLCAwKTsKKwlmcmVlKGFyZ3YpOworfQorCitzdGF0aWMgaW50IGdpdF9tZXJnZV9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaW50IHN0YXR1czsKKworCWlmIChicmFuY2ggJiYgIXByZWZpeGNtcChrLCAiYnJhbmNoLiIpICYmCisJCSFwcmVmaXhjbXAoayArIDcsIGJyYW5jaCkgJiYKKwkJIXN0cmNtcChrICsgNyArIHN0cmxlbihicmFuY2gpLCAiLm1lcmdlb3B0aW9ucyIpKSB7CisJCWZyZWUoYnJhbmNoX21lcmdlb3B0aW9ucyk7CisJCWJyYW5jaF9tZXJnZW9wdGlvbnMgPSB4c3RyZHVwKHYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcChrLCAibWVyZ2UuZGlmZnN0YXQiKSB8fCAhc3RyY21wKGssICJtZXJnZS5zdGF0IikpCisJCXNob3dfZGlmZnN0YXQgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJZWxzZSBpZiAoIXN0cmNtcChrLCAicHVsbC50d29oZWFkIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmcHVsbF90d29oZWFkLCBrLCB2KTsKKwllbHNlIGlmICghc3RyY21wKGssICJwdWxsLm9jdG9wdXMiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZwdWxsX29jdG9wdXMsIGssIHYpOworCWVsc2UgaWYgKCFzdHJjbXAoaywgIm1lcmdlLnJlbm9ybWFsaXplIikpCisJCW9wdGlvbl9yZW5vcm1hbGl6ZSA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwllbHNlIGlmICghc3RyY21wKGssICJtZXJnZS5mZiIpKSB7CisJCWludCBib29sdmFsID0gZ2l0X2NvbmZpZ19tYXliZV9ib29sKGssIHYpOworCQlpZiAoMCA8PSBib29sdmFsKSB7CisJCQlhbGxvd19mYXN0X2ZvcndhcmQgPSBib29sdmFsOworCQl9IGVsc2UgaWYgKHYgJiYgIXN0cmNtcCh2LCAib25seSIpKSB7CisJCQlhbGxvd19mYXN0X2ZvcndhcmQgPSAxOworCQkJZmFzdF9mb3J3YXJkX29ubHkgPSAxOworCQl9IC8qIGRvIG5vdCBiYXJmIG9uIHZhbHVlcyBmcm9tIGZ1dHVyZSB2ZXJzaW9ucyBvZiBnaXQgKi8KKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKGssICJtZXJnZS5kZWZhdWx0dG91cHN0cmVhbSIpKSB7CisJCWRlZmF1bHRfdG9fdXBzdHJlYW0gPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKworCXN0YXR1cyA9IGZtdF9tZXJnZV9tc2dfY29uZmlnKGssIHYsIGNiKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCXN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKGssIHYsIE5VTEwpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIGdpdF9kaWZmX3VpX2NvbmZpZyhrLCB2LCBjYik7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF90cmVlX3RyaXZpYWwodW5zaWduZWQgY2hhciAqY29tbW9uLCB1bnNpZ25lZCBjaGFyICpoZWFkLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpvbmUpCit7CisJaW50IGksIG5yX3RyZWVzID0gMDsKKwlzdHJ1Y3QgdHJlZSAqdHJlZXNbTUFYX1VOUEFDS19UUkVFU107CisJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuaGVhZF9pZHggPSAyOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy51cGRhdGUgPSAxOworCW9wdHMudmVyYm9zZV91cGRhdGUgPSAxOworCW9wdHMudHJpdmlhbF9tZXJnZXNfb25seSA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJdHJlZXNbbnJfdHJlZXNdID0gcGFyc2VfdHJlZV9pbmRpcmVjdChjb21tb24pOworCWlmICghdHJlZXNbbnJfdHJlZXMrK10pCisJCXJldHVybiAtMTsKKwl0cmVlc1tucl90cmVlc10gPSBwYXJzZV90cmVlX2luZGlyZWN0KGhlYWQpOworCWlmICghdHJlZXNbbnJfdHJlZXMrK10pCisJCXJldHVybiAtMTsKKwl0cmVlc1tucl90cmVlc10gPSBwYXJzZV90cmVlX2luZGlyZWN0KG9uZSk7CisJaWYgKCF0cmVlc1tucl90cmVlcysrXSkKKwkJcmV0dXJuIC0xOworCW9wdHMuZm4gPSB0aHJlZXdheV9tZXJnZTsKKwljYWNoZV90cmVlX2ZyZWUoJmFjdGl2ZV9jYWNoZV90cmVlKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdHJlZXM7IGkrKykgeworCQlwYXJzZV90cmVlKHRyZWVzW2ldKTsKKwkJaW5pdF90cmVlX2Rlc2ModCtpLCB0cmVlc1tpXS0+YnVmZmVyLCB0cmVlc1tpXS0+c2l6ZSk7CisJfQorCWlmICh1bnBhY2tfdHJlZXMobnJfdHJlZXMsIHQsICZvcHRzKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV90cmVlX3RyaXZpYWwodW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpZiAod3JpdGVfY2FjaGVfYXNfdHJlZShzaGExLCAwLCBOVUxMKSkKKwkJZGllKF8oImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiKSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICptZXJnZV9hcmd1bWVudChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKGNvbW1pdCkKKwkJcmV0dXJuIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpOworCWVsc2UKKwkJcmV0dXJuIEVNUFRZX1RSRUVfU0hBMV9IRVg7Cit9CisKK2ludCB0cnlfbWVyZ2VfY29tbWFuZChjb25zdCBjaGFyICpzdHJhdGVneSwgc2l6ZV90IHhvcHRzX25yLAorCQkgICAgICBjb25zdCBjaGFyICoqeG9wdHMsIHN0cnVjdCBjb21taXRfbGlzdCAqY29tbW9uLAorCQkgICAgICBjb25zdCBjaGFyICpoZWFkX2FyZywgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVzKQoreworCWNvbnN0IGNoYXIgKiphcmdzOworCWludCBpID0gMCwgeCA9IDAsIHJldDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmo7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWFyZ3MgPSB4bWFsbG9jKCg0ICsgeG9wdHNfbnIgKyBjb21taXRfbGlzdF9jb3VudChjb21tb24pICsKKwkJCWNvbW1pdF9saXN0X2NvdW50KHJlbW90ZXMpKSAqIHNpemVvZihjaGFyICopKTsKKwlzdHJidWZfYWRkZigmYnVmLCAibWVyZ2UtJXMiLCBzdHJhdGVneSk7CisJYXJnc1tpKytdID0gYnVmLmJ1ZjsKKwlmb3IgKHggPSAwOyB4IDwgeG9wdHNfbnI7IHgrKykgeworCQljaGFyICpzID0geG1hbGxvYyhzdHJsZW4oeG9wdHNbeF0pKzIrMSk7CisJCXN0cmNweShzLCAiLS0iKTsKKwkJc3RyY3B5KHMrMiwgeG9wdHNbeF0pOworCQlhcmdzW2krK10gPSBzOworCX0KKwlmb3IgKGogPSBjb21tb247IGo7IGogPSBqLT5uZXh0KQorCQlhcmdzW2krK10gPSB4c3RyZHVwKG1lcmdlX2FyZ3VtZW50KGotPml0ZW0pKTsKKwlhcmdzW2krK10gPSAiLS0iOworCWFyZ3NbaSsrXSA9IGhlYWRfYXJnOworCWZvciAoaiA9IHJlbW90ZXM7IGo7IGogPSBqLT5uZXh0KQorCQlhcmdzW2krK10gPSB4c3RyZHVwKG1lcmdlX2FyZ3VtZW50KGotPml0ZW0pKTsKKwlhcmdzW2ldID0gTlVMTDsKKwlyZXQgPSBydW5fY29tbWFuZF92X29wdChhcmdzLCBSVU5fR0lUX0NNRCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJaSA9IDE7CisJZm9yICh4ID0gMDsgeCA8IHhvcHRzX25yOyB4KyspCisJCWZyZWUoKHZvaWQgKilhcmdzW2krK10pOworCWZvciAoaiA9IGNvbW1vbjsgajsgaiA9IGotPm5leHQpCisJCWZyZWUoKHZvaWQgKilhcmdzW2krK10pOworCWkgKz0gMjsKKwlmb3IgKGogPSByZW1vdGVzOyBqOyBqID0gai0+bmV4dCkKKwkJZnJlZSgodm9pZCAqKWFyZ3NbaSsrXSk7CisJZnJlZShhcmdzKTsKKwlkaXNjYXJkX2NhY2hlKCk7CisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZShfKCJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiKSk7CisJcmVzb2x2ZV91bmRvX2NsZWFyKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRyeV9tZXJnZV9zdHJhdGVneShjb25zdCBjaGFyICpzdHJhdGVneSwgc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb24sCisJCQkgICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzLAorCQkJICAgICAgc3RydWN0IGNvbW1pdCAqaGVhZCwgY29uc3QgY2hhciAqaGVhZF9hcmcpCit7CisJaW50IGluZGV4X2ZkOworCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2sgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisKKwlpbmRleF9mZCA9IGhvbGRfbG9ja2VkX2luZGV4KGxvY2ssIDEpOworCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkICYmCisJCQkod3JpdGVfY2FjaGUoaW5kZXhfZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAorCQkJIGNvbW1pdF9sb2NrZWRfaW5kZXgobG9jaykpKQorCQlyZXR1cm4gZXJyb3IoXygiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIpKTsKKwlyb2xsYmFja19sb2NrX2ZpbGUobG9jayk7CisKKwlpZiAoIXN0cmNtcChzdHJhdGVneSwgInJlY3Vyc2l2ZSIpIHx8ICFzdHJjbXAoc3RyYXRlZ3ksICJzdWJ0cmVlIikpIHsKKwkJaW50IGNsZWFuLCB4OworCQlzdHJ1Y3QgY29tbWl0ICpyZXN1bHQ7CisJCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2sgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisJCWludCBpbmRleF9mZDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpyZXZlcnNlZCA9IE5VTEw7CisJCXN0cnVjdCBtZXJnZV9vcHRpb25zIG87CisJCXN0cnVjdCBjb21taXRfbGlzdCAqajsKKworCQlpZiAocmVtb3RlaGVhZHMtPm5leHQpIHsKKwkJCWVycm9yKF8oIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iKSk7CisJCQlyZXR1cm4gMjsKKwkJfQorCisJCWluaXRfbWVyZ2Vfb3B0aW9ucygmbyk7CisJCWlmICghc3RyY21wKHN0cmF0ZWd5LCAic3VidHJlZSIpKQorCQkJby5zdWJ0cmVlX3NoaWZ0ID0gIiI7CisKKwkJby5yZW5vcm1hbGl6ZSA9IG9wdGlvbl9yZW5vcm1hbGl6ZTsKKwkJby5zaG93X3JlbmFtZV9wcm9ncmVzcyA9CisJCQlzaG93X3Byb2dyZXNzID09IC0xID8gaXNhdHR5KDIpIDogc2hvd19wcm9ncmVzczsKKworCQlmb3IgKHggPSAwOyB4IDwgeG9wdHNfbnI7IHgrKykKKwkJCWlmIChwYXJzZV9tZXJnZV9vcHQoJm8sIHhvcHRzW3hdKSkKKwkJCQlkaWUoXygiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIpLCB4b3B0c1t4XSk7CisKKwkJby5icmFuY2gxID0gaGVhZF9hcmc7CisJCW8uYnJhbmNoMiA9IG1lcmdlX3JlbW90ZV91dGlsKHJlbW90ZWhlYWRzLT5pdGVtKS0+bmFtZTsKKworCQlmb3IgKGogPSBjb21tb247IGo7IGogPSBqLT5uZXh0KQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGotPml0ZW0sICZyZXZlcnNlZCk7CisKKwkJaW5kZXhfZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrLCAxKTsKKwkJY2xlYW4gPSBtZXJnZV9yZWN1cnNpdmUoJm8sIGhlYWQsCisJCQkJcmVtb3RlaGVhZHMtPml0ZW0sIHJldmVyc2VkLCAmcmVzdWx0KTsKKwkJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkICYmCisJCQkJKHdyaXRlX2NhY2hlKGluZGV4X2ZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKKwkJCQkgY29tbWl0X2xvY2tlZF9pbmRleChsb2NrKSkpCisJCQlkaWUgKF8oInVuYWJsZSB0byB3cml0ZSAlcyIpLCBnZXRfaW5kZXhfZmlsZSgpKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKGxvY2spOworCQlyZXR1cm4gY2xlYW4gPyAwIDogMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gdHJ5X21lcmdlX2NvbW1hbmQoc3RyYXRlZ3ksIHhvcHRzX25yLCB4b3B0cywKKwkJCQkJCWNvbW1vbiwgaGVhZF9hcmcsIHJlbW90ZWhlYWRzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvdW50X2RpZmZfZmlsZXMoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpCit7CisJaW50ICpjb3VudCA9IGRhdGE7CisKKwkoKmNvdW50KSArPSBxLT5ucjsKK30KKworc3RhdGljIGludCBjb3VudF91bm1lcmdlZF9lbnRyaWVzKHZvaWQpCit7CisJaW50IGksIHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspCisJCWlmIChjZV9zdGFnZShhY3RpdmVfY2FjaGVbaV0pKQorCQkJcmV0Kys7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2hlY2tvdXRfZmFzdF9mb3J3YXJkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlbW90ZSkKK3sKKwlzdHJ1Y3QgdHJlZSAqdHJlZXNbTUFYX1VOUEFDS19UUkVFU107CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOworCWludCBpLCBmZCwgbnJfdHJlZXMgPSAwOworCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCisJZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOworCisJbWVtc2V0KCZ0cmVlcywgMCwgc2l6ZW9mKHRyZWVzKSk7CisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKwlpZiAob3ZlcndyaXRlX2lnbm9yZSkgeworCQltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCQlkaXIuZmxhZ3MgfD0gRElSX1NIT1dfSUdOT1JFRDsKKwkJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisJCW9wdHMuZGlyID0gJmRpcjsKKwl9CisKKwlvcHRzLmhlYWRfaWR4ID0gMTsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMudXBkYXRlID0gMTsKKwlvcHRzLnZlcmJvc2VfdXBkYXRlID0gMTsKKwlvcHRzLm1lcmdlID0gMTsKKwlvcHRzLmZuID0gdHdvd2F5X21lcmdlOworCXNldHVwX3VucGFja190cmVlc19wb3JjZWxhaW4oJm9wdHMsICJtZXJnZSIpOworCisJdHJlZXNbbnJfdHJlZXNdID0gcGFyc2VfdHJlZV9pbmRpcmVjdChoZWFkKTsKKwlpZiAoIXRyZWVzW25yX3RyZWVzKytdKQorCQlyZXR1cm4gLTE7CisJdHJlZXNbbnJfdHJlZXNdID0gcGFyc2VfdHJlZV9pbmRpcmVjdChyZW1vdGUpOworCWlmICghdHJlZXNbbnJfdHJlZXMrK10pCisJCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdHJlZXM7IGkrKykgeworCQlwYXJzZV90cmVlKHRyZWVzW2ldKTsKKwkJaW5pdF90cmVlX2Rlc2ModCtpLCB0cmVlc1tpXS0+YnVmZmVyLCB0cmVlc1tpXS0+c2l6ZSk7CisJfQorCWlmICh1bnBhY2tfdHJlZXMobnJfdHJlZXMsIHQsICZvcHRzKSkKKwkJcmV0dXJuIC0xOworCWlmICh3cml0ZV9jYWNoZShmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJCWNvbW1pdF9sb2NrZWRfaW5kZXgobG9ja19maWxlKSkKKwkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BsaXRfbWVyZ2Vfc3RyYXRlZ2llcyhjb25zdCBjaGFyICpzdHJpbmcsIHN0cnVjdCBzdHJhdGVneSAqKmxpc3QsCisJCQkJICAgaW50ICpuciwgaW50ICphbGxvYykKK3sKKwljaGFyICpwLCAqcSwgKmJ1ZjsKKworCWlmICghc3RyaW5nKQorCQlyZXR1cm47CisKKwlidWYgPSB4c3RyZHVwKHN0cmluZyk7CisJcSA9IGJ1ZjsKKwlmb3IgKDs7KSB7CisJCXAgPSBzdHJjaHIocSwgJyAnKTsKKwkJaWYgKCFwKSB7CisJCQlBTExPQ19HUk9XKCpsaXN0LCAqbnIgKyAxLCAqYWxsb2MpOworCQkJKCpsaXN0KVsoKm5yKSsrXS5uYW1lID0geHN0cmR1cChxKTsKKwkJCWZyZWUoYnVmKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCSpwID0gJ1wwJzsKKwkJCUFMTE9DX0dST1coKmxpc3QsICpuciArIDEsICphbGxvYyk7CisJCQkoKmxpc3QpWygqbnIpKytdLm5hbWUgPSB4c3RyZHVwKHEpOworCQkJcSA9ICsrcDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYWRkX3N0cmF0ZWdpZXMoY29uc3QgY2hhciAqc3RyaW5nLCB1bnNpZ25lZCBhdHRyKQoreworCXN0cnVjdCBzdHJhdGVneSAqbGlzdCA9IE5VTEw7CisJaW50IGxpc3RfYWxsb2MgPSAwLCBsaXN0X25yID0gMCwgaTsKKworCW1lbXNldCgmbGlzdCwgMCwgc2l6ZW9mKGxpc3QpKTsKKwlzcGxpdF9tZXJnZV9zdHJhdGVnaWVzKHN0cmluZywgJmxpc3QsICZsaXN0X25yLCAmbGlzdF9hbGxvYyk7CisJaWYgKGxpc3QpIHsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3RfbnI7IGkrKykKKwkJCWFwcGVuZF9zdHJhdGVneShnZXRfc3RyYXRlZ3kobGlzdFtpXS5uYW1lKSk7CisJCXJldHVybjsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsX3N0cmF0ZWd5KTsgaSsrKQorCQlpZiAoYWxsX3N0cmF0ZWd5W2ldLmF0dHIgJiBhdHRyKQorCQkJYXBwZW5kX3N0cmF0ZWd5KCZhbGxfc3RyYXRlZ3lbaV0pOworCit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX21lcmdlX21zZyhzdHJ1Y3Qgc3RyYnVmICptc2cpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aCgiTUVSR0VfTVNHIik7CisJaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIpLAorCQkJICBmaWxlbmFtZSk7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIG1zZy0+YnVmLCBtc2ctPmxlbikgIT0gbXNnLT5sZW4pCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBmaWxlbmFtZSk7CisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgdm9pZCByZWFkX21lcmdlX21zZyhzdHJ1Y3Qgc3RyYnVmICptc2cpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aCgiTUVSR0VfTVNHIik7CisJc3RyYnVmX3Jlc2V0KG1zZyk7CisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUobXNnLCBmaWxlbmFtZSwgMCkgPCAwKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIiksIGZpbGVuYW1lKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfbWVyZ2Vfc3RhdGUoc3RydWN0IGNvbW1pdF9saXN0ICopOworc3RhdGljIHZvaWQgYWJvcnRfY29tbWl0KHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMsIGNvbnN0IGNoYXIgKmVycl9tc2cpCit7CisJaWYgKGVycl9tc2cpCisJCWVycm9yKCIlcyIsIGVycl9tc2cpOworCWZwcmludGYoc3RkZXJyLAorCQlfKCJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iKSk7CisJd3JpdGVfbWVyZ2Vfc3RhdGUocmVtb3RlaGVhZHMpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIG1lcmdlX2VkaXRvcl9jb21tZW50W10gPQorTl8oIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorICAgImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyAgICJcbiIKKyAgICJMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorICAgInRoZSBjb21taXQuXG4iKTsKKworc3RhdGljIHZvaWQgcHJlcGFyZV90b19jb21taXQoc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmNvbW1lbnQgPSBfKG1lcmdlX2VkaXRvcl9jb21tZW50KTsKKwlzdHJidWZfYWRkYnVmKCZtc2csICZtZXJnZV9tc2cpOworCXN0cmJ1Zl9hZGRjaCgmbXNnLCAnXG4nKTsKKwlpZiAoMCA8IG9wdGlvbl9lZGl0KQorCQlzdHJidWZfYWRkX2xpbmVzKCZtc2csICIjICIsIGNvbW1lbnQsIHN0cmxlbihjb21tZW50KSk7CisJd3JpdGVfbWVyZ2VfbXNnKCZtc2cpOworCXJ1bl9ob29rKGdldF9pbmRleF9maWxlKCksICJwcmVwYXJlLWNvbW1pdC1tc2ciLAorCQkgZ2l0X3BhdGgoIk1FUkdFX01TRyIpLCAibWVyZ2UiLCBOVUxMLCBOVUxMKTsKKwlpZiAoMCA8IG9wdGlvbl9lZGl0KSB7CisJCWlmIChsYXVuY2hfZWRpdG9yKGdpdF9wYXRoKCJNRVJHRV9NU0ciKSwgTlVMTCwgTlVMTCkpCisJCQlhYm9ydF9jb21taXQocmVtb3RlaGVhZHMsIE5VTEwpOworCX0KKwlyZWFkX21lcmdlX21zZygmbXNnKTsKKwlzdHJpcHNwYWNlKCZtc2csIDAgPCBvcHRpb25fZWRpdCk7CisJaWYgKCFtc2cubGVuKQorCQlhYm9ydF9jb21taXQocmVtb3RlaGVhZHMsIF8oIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIpKTsKKwlzdHJidWZfcmVsZWFzZSgmbWVyZ2VfbXNnKTsKKwlzdHJidWZfYWRkYnVmKCZtZXJnZV9tc2csICZtc2cpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworfQorCitzdGF0aWMgaW50IG1lcmdlX3RyaXZpYWwoc3RydWN0IGNvbW1pdCAqaGVhZCwgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcykKK3sKKwl1bnNpZ25lZCBjaGFyIHJlc3VsdF90cmVlWzIwXSwgcmVzdWx0X2NvbW1pdFsyMF07CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSB4bWFsbG9jKHNpemVvZigqcGFyZW50KSk7CisKKwl3cml0ZV90cmVlX3RyaXZpYWwocmVzdWx0X3RyZWUpOworCXByaW50ZihfKCJXb25kZXJmdWwuXG4iKSk7CisJcGFyZW50LT5pdGVtID0gaGVhZDsKKwlwYXJlbnQtPm5leHQgPSB4bWFsbG9jKHNpemVvZigqcGFyZW50LT5uZXh0KSk7CisJcGFyZW50LT5uZXh0LT5pdGVtID0gcmVtb3RlaGVhZHMtPml0ZW07CisJcGFyZW50LT5uZXh0LT5uZXh0ID0gTlVMTDsKKwlwcmVwYXJlX3RvX2NvbW1pdChyZW1vdGVoZWFkcyk7CisJaWYgKGNvbW1pdF90cmVlKCZtZXJnZV9tc2csIHJlc3VsdF90cmVlLCBwYXJlbnQsIHJlc3VsdF9jb21taXQsIE5VTEwsCisJCQlzaWduX2NvbW1pdCkpCisJCWRpZShfKCJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIpKTsKKwlmaW5pc2goaGVhZCwgcmVtb3RlaGVhZHMsIHJlc3VsdF9jb21taXQsICJJbi1pbmRleCBtZXJnZSIpOworCWRyb3Bfc2F2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbmlzaF9hdXRvbWVyZ2Uoc3RydWN0IGNvbW1pdCAqaGVhZCwKKwkJCSAgICBpbnQgaGVhZF9zdWJzdW1lZCwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbiwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF90cmVlLAorCQkJICAgIGNvbnN0IGNoYXIgKnd0X3N0cmF0ZWd5KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIHJlc3VsdF9jb21taXRbMjBdOworCisJZnJlZV9jb21taXRfbGlzdChjb21tb24pOworCXBhcmVudHMgPSByZW1vdGVoZWFkczsKKwlpZiAoIWhlYWRfc3Vic3VtZWQgfHwgIWFsbG93X2Zhc3RfZm9yd2FyZCkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWQsICZwYXJlbnRzKTsKKwlzdHJidWZfYWRkY2goJm1lcmdlX21zZywgJ1xuJyk7CisJcHJlcGFyZV90b19jb21taXQocmVtb3RlaGVhZHMpOworCWlmIChjb21taXRfdHJlZSgmbWVyZ2VfbXNnLCByZXN1bHRfdHJlZSwgcGFyZW50cywgcmVzdWx0X2NvbW1pdCwKKwkJCU5VTEwsIHNpZ25fY29tbWl0KSkKKwkJZGllKF8oImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IikpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJNZXJnZSBtYWRlIGJ5IHRoZSAnJXMnIHN0cmF0ZWd5LiIsIHd0X3N0cmF0ZWd5KTsKKwlmaW5pc2goaGVhZCwgcmVtb3RlaGVhZHMsIHJlc3VsdF9jb21taXQsIGJ1Zi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWRyb3Bfc2F2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1Z2dlc3RfY29uZmxpY3RzKGludCByZW5vcm1hbGl6aW5nKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCUZJTEUgKmZwOworCWludCBwb3M7CisKKwlmaWxlbmFtZSA9IGdpdF9wYXRoKCJNRVJHRV9NU0ciKTsKKwlmcCA9IGZvcGVuKGZpbGVuYW1lLCAiYSIpOworCWlmICghZnApCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksIGZpbGVuYW1lKTsKKwlmcHJpbnRmKGZwLCAiXG5Db25mbGljdHM6XG4iKTsKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCWZwcmludGYoZnAsICJcdCVzXG4iLCBjZS0+bmFtZSk7CisJCQl3aGlsZSAocG9zICsgMSA8IGFjdGl2ZV9uciAmJgorCQkJCQkhc3RyY21wKGNlLT5uYW1lLAorCQkJCQkJYWN0aXZlX2NhY2hlW3BvcyArIDFdLT5uYW1lKSkKKwkJCQlwb3MrKzsKKwkJfQorCX0KKwlmY2xvc2UoZnApOworCXJlcmVyZShhbGxvd19yZXJlcmVfYXV0byk7CisJcHJpbnRmKF8oIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7ICIKKwkJCSJmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIikpOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqaXNfb2xkX3N0eWxlX2ludm9jYXRpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkKQoreworCXN0cnVjdCBjb21taXQgKnNlY29uZF90b2tlbiA9IE5VTEw7CisJaWYgKGFyZ2MgPiAyKSB7CisJCXVuc2lnbmVkIGNoYXIgc2Vjb25kX3NoYTFbMjBdOworCisJCWlmIChnZXRfc2hhMShhcmd2WzFdLCBzZWNvbmRfc2hhMSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJc2Vjb25kX3Rva2VuID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNlY29uZF9zaGExLCAwKTsKKwkJaWYgKCFzZWNvbmRfdG9rZW4pCisJCQlkaWUoXygiJyVzJyBpcyBub3QgYSBjb21taXQiKSwgYXJndlsxXSk7CisJCWlmIChoYXNoY21wKHNlY29uZF90b2tlbi0+b2JqZWN0LnNoYTEsIGhlYWQpKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBzZWNvbmRfdG9rZW47Cit9CisKK3N0YXRpYyBpbnQgZXZhbHVhdGVfcmVzdWx0KHZvaWQpCit7CisJaW50IGNudCA9IDA7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKworCS8qIENoZWNrIGhvdyBtYW55IGZpbGVzIGRpZmZlci4gKi8KKwlpbml0X3JldmlzaW9ucygmcmV2LCAiIik7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsIE5VTEwpOworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0KKwkJRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gY291bnRfZGlmZl9maWxlczsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9ICZjbnQ7CisJcnVuX2RpZmZfZmlsZXMoJnJldiwgMCk7CisKKwkvKgorCSAqIENoZWNrIGhvdyBtYW55IHVubWVyZ2VkIGVudHJpZXMgYXJlCisJICogdGhlcmUuCisJICovCisJY250ICs9IGNvdW50X3VubWVyZ2VkX2VudHJpZXMoKTsKKworCXJldHVybiBjbnQ7Cit9CisKKy8qCisgKiBQcmV0ZW5kIGFzIGlmIHRoZSB1c2VyIHRvbGQgdXMgdG8gbWVyZ2Ugd2l0aCB0aGUgdHJhY2tpbmcKKyAqIGJyYW5jaCB3ZSBoYXZlIGZvciB0aGUgdXBzdHJlYW0gb2YgdGhlIGN1cnJlbnQgYnJhbmNoCisgKi8KK3N0YXRpYyBpbnQgc2V0dXBfd2l0aF91cHN0cmVhbShjb25zdCBjaGFyICoqKmFyZ3YpCit7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwlpbnQgaTsKKwljb25zdCBjaGFyICoqYXJnczsKKworCWlmICghYnJhbmNoKQorCQlkaWUoXygiTm8gY3VycmVudCBicmFuY2guIikpOworCWlmICghYnJhbmNoLT5yZW1vdGUpCisJCWRpZShfKCJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iKSk7CisJaWYgKCFicmFuY2gtPm1lcmdlX25yKQorCQlkaWUoXygiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIikpOworCisJYXJncyA9IHhjYWxsb2MoYnJhbmNoLT5tZXJnZV9uciArIDEsIHNpemVvZihjaGFyICopKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnJhbmNoLT5tZXJnZV9ucjsgaSsrKSB7CisJCWlmICghYnJhbmNoLT5tZXJnZVtpXS0+ZHN0KQorCQkJZGllKF8oIk5vIHJlbW90ZSB0cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiKSwKKwkJCSAgICBicmFuY2gtPm1lcmdlW2ldLT5zcmMsIGJyYW5jaC0+cmVtb3RlX25hbWUpOworCQlhcmdzW2ldID0gYnJhbmNoLT5tZXJnZVtpXS0+ZHN0OworCX0KKwlhcmdzW2ldID0gTlVMTDsKKwkqYXJndiA9IGFyZ3M7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX21lcmdlX3N0YXRlKHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJaW50IGZkOworCXN0cnVjdCBjb21taXRfbGlzdCAqajsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZm9yIChqID0gcmVtb3RlaGVhZHM7IGo7IGogPSBqLT5uZXh0KSB7CisJCXVuc2lnbmVkIGNvbnN0IGNoYXIgKnNoYTE7CisJCXN0cnVjdCBjb21taXQgKmMgPSBqLT5pdGVtOworCQlpZiAoYy0+dXRpbCAmJiBtZXJnZV9yZW1vdGVfdXRpbChjKS0+b2JqKSB7CisJCQlzaGExID0gbWVyZ2VfcmVtb3RlX3V0aWwoYyktPm9iai0+c2hhMTsKKwkJfSBlbHNlIHsKKwkJCXNoYTEgPSBjLT5vYmplY3Quc2hhMTsKKwkJfQorCQlzdHJidWZfYWRkZigmYnVmLCAiJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisJZmlsZW5hbWUgPSBnaXRfcGF0aCgiTUVSR0VfSEVBRCIpOworCWZkID0gb3BlbihmaWxlbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIpLCBmaWxlbmFtZSk7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pICE9IGJ1Zi5sZW4pCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBmaWxlbmFtZSk7CisJY2xvc2UoZmQpOworCXN0cmJ1Zl9hZGRjaCgmbWVyZ2VfbXNnLCAnXG4nKTsKKwl3cml0ZV9tZXJnZV9tc2coJm1lcmdlX21zZyk7CisKKwlmaWxlbmFtZSA9IGdpdF9wYXRoKCJNRVJHRV9NT0RFIik7CisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIpLCBmaWxlbmFtZSk7CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCWlmICghYWxsb3dfZmFzdF9mb3J3YXJkKQorCQlzdHJidWZfYWRkZigmYnVmLCAibm8tZmYiKTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLmJ1ZiwgYnVmLmxlbikgIT0gYnVmLmxlbikKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIGZpbGVuYW1lKTsKKwljbG9zZShmZCk7Cit9CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9lZGl0X29wdGlvbih2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyIG5hbWVbXSA9ICJHSVRfTUVSR0VfQVVUT0VESVQiOworCWNvbnN0IGNoYXIgKmUgPSBnZXRlbnYobmFtZSk7CisJc3RydWN0IHN0YXQgc3Rfc3RkaW4sIHN0X3N0ZG91dDsKKworCWlmIChoYXZlX21lc3NhZ2UpCisJCS8qIGFuIGV4cGxpY2l0IC1tIG1zZyB3aXRob3V0IC0tW25vLV1lZGl0ICovCisJCXJldHVybiAwOworCisJaWYgKGUpIHsKKwkJaW50IHYgPSBnaXRfY29uZmlnX21heWJlX2Jvb2wobmFtZSwgZSk7CisJCWlmICh2IDwgMCkKKwkJCWRpZSgiQmFkIHZhbHVlICclcycgaW4gZW52aXJvbm1lbnQgJyVzJyIsIGUsIG5hbWUpOworCQlyZXR1cm4gdjsKKwl9CisKKwkvKiBVc2UgZWRpdG9yIGlmIHN0ZGluIGFuZCBzdGRvdXQgYXJlIHRoZSBzYW1lIGFuZCBpcyBhIHR0eSAqLworCXJldHVybiAoIWZzdGF0KDAsICZzdF9zdGRpbikgJiYKKwkJIWZzdGF0KDEsICZzdF9zdGRvdXQpICYmCisJCWlzYXR0eSgwKSAmJiBpc2F0dHkoMSkgJiYKKwkJc3Rfc3RkaW4uc3RfZGV2ID09IHN0X3N0ZG91dC5zdF9kZXYgJiYKKwkJc3Rfc3RkaW4uc3RfaW5vID09IHN0X3N0ZG91dC5zdF9pbm8gJiYKKwkJc3Rfc3RkaW4uc3RfbW9kZSA9PSBzdF9zdGRvdXQuc3RfbW9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbGxlY3RfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdCwKKwkJCQkJICAgaW50ICpoZWFkX3N1YnN1bWVkLAorCQkJCQkgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGk7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcyA9IE5VTEwsICpwYXJlbnRzLCAqbmV4dDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipyZW1vdGVzID0gJnJlbW90ZWhlYWRzOworCisJaWYgKGhlYWRfY29tbWl0KQorCQlyZW1vdGVzID0gJmNvbW1pdF9saXN0X2luc2VydChoZWFkX2NvbW1pdCwgcmVtb3RlcyktPm5leHQ7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBnZXRfbWVyZ2VfcGFyZW50KGFyZ3ZbaV0pOworCQlpZiAoIWNvbW1pdCkKKwkJCWRpZShfKCIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIiksIGFyZ3ZbaV0pOworCQlyZW1vdGVzID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHJlbW90ZXMpLT5uZXh0OworCX0KKwkqcmVtb3RlcyA9IE5VTEw7CisKKwlwYXJlbnRzID0gcmVkdWNlX2hlYWRzKHJlbW90ZWhlYWRzKTsKKworCSpoZWFkX3N1YnN1bWVkID0gMTsgLyogd2Ugd2lsbCBmbGlwIHRoaXMgdG8gMCB3aGVuIHdlIGZpbmQgaXQgKi8KKwlmb3IgKHJlbW90ZWhlYWRzID0gTlVMTCwgcmVtb3RlcyA9ICZyZW1vdGVoZWFkczsKKwkgICAgIHBhcmVudHM7CisJICAgICBwYXJlbnRzID0gbmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwYXJlbnRzLT5pdGVtOworCQluZXh0ID0gcGFyZW50cy0+bmV4dDsKKwkJaWYgKGNvbW1pdCA9PSBoZWFkX2NvbW1pdCkKKwkJCSpoZWFkX3N1YnN1bWVkID0gMDsKKwkJZWxzZQorCQkJcmVtb3RlcyA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCByZW1vdGVzKS0+bmV4dDsKKwl9CisJcmV0dXJuIHJlbW90ZWhlYWRzOworfQorCitpbnQgY21kX21lcmdlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXVuc2lnbmVkIGNoYXIgcmVzdWx0X3RyZWVbMjBdOworCXVuc2lnbmVkIGNoYXIgc3Rhc2hbMjBdOworCXVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmhlYWRfYXJnOworCWludCBmbGFnLCBpLCByZXQgPSAwLCBoZWFkX3N1YnN1bWVkOworCWludCBiZXN0X2NudCA9IC0xLCBtZXJnZV93YXNfb2sgPSAwLCBhdXRvbWVyZ2Vfd2FzX29rID0gMDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbiA9IE5VTEw7CisJY29uc3QgY2hhciAqYmVzdF9zdHJhdGVneSA9IE5VTEwsICp3dF9zdHJhdGVneSA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcywgKnA7CisJdm9pZCAqYnJhbmNoX3RvX2ZyZWU7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX21lcmdlX3VzYWdlLCBidWlsdGluX21lcmdlX29wdGlvbnMpOworCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBhcmUgX25vdF8gb24gYSBkZXRhY2hlZCBIRUFELCBpLmUuIGlmIHRoZXJlIGlzIGEKKwkgKiBjdXJyZW50IGJyYW5jaC4KKwkgKi8KKwlicmFuY2ggPSBicmFuY2hfdG9fZnJlZSA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgaGVhZF9zaGExLCAwLCAmZmxhZyk7CisJaWYgKGJyYW5jaCAmJiAhcHJlZml4Y21wKGJyYW5jaCwgInJlZnMvaGVhZHMvIikpCisJCWJyYW5jaCArPSAxMTsKKwlpZiAoIWJyYW5jaCB8fCBpc19udWxsX3NoYTEoaGVhZF9zaGExKSkKKwkJaGVhZF9jb21taXQgPSBOVUxMOworCWVsc2UKKwkJaGVhZF9jb21taXQgPSBsb29rdXBfY29tbWl0X29yX2RpZShoZWFkX3NoYTEsICJIRUFEIik7CisKKwlnaXRfY29uZmlnKGdpdF9tZXJnZV9jb25maWcsIE5VTEwpOworCisJaWYgKGJyYW5jaF9tZXJnZW9wdGlvbnMpCisJCXBhcnNlX2JyYW5jaF9tZXJnZV9vcHRpb25zKGJyYW5jaF9tZXJnZW9wdGlvbnMpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9tZXJnZV9vcHRpb25zLAorCQkJYnVpbHRpbl9tZXJnZV91c2FnZSwgMCk7CisJaWYgKHNob3J0bG9nX2xlbiA8IDApCisJCXNob3J0bG9nX2xlbiA9IChtZXJnZV9sb2dfY29uZmlnID4gMCkgPyBtZXJnZV9sb2dfY29uZmlnIDogMDsKKworCWlmICh2ZXJib3NpdHkgPCAwICYmIHNob3dfcHJvZ3Jlc3MgPT0gLTEpCisJCXNob3dfcHJvZ3Jlc3MgPSAwOworCisJaWYgKGFib3J0X2N1cnJlbnRfbWVyZ2UpIHsKKwkJaW50IG5hcmdjID0gMjsKKwkJY29uc3QgY2hhciAqbmFyZ3ZbXSA9IHsicmVzZXQiLCAiLS1tZXJnZSIsIE5VTEx9OworCisJCWlmICghZmlsZV9leGlzdHMoZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSkpCisJCQlkaWUoXygiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIikpOworCisJCS8qIEludm9rZSAnZ2l0IHJlc2V0IC0tbWVyZ2UnICovCisJCXJldCA9IGNtZF9yZXNldChuYXJnYywgbmFyZ3YsIHByZWZpeCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAocmVhZF9jYWNoZV91bm1lcmdlZCgpKQorCQlkaWVfcmVzb2x2ZV9jb25mbGljdCgibWVyZ2UiKTsKKworCWlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aCgiTUVSR0VfSEVBRCIpKSkgeworCQkvKgorCQkgKiBUaGVyZSBpcyBubyB1bm1lcmdlZCBlbnRyeSwgZG9uJ3QgYWR2aXNlICdnaXQKKwkJICogYWRkL3JtIDxmaWxlPicsIGp1c3QgJ2dpdCBjb21taXQnLgorCQkgKi8KKwkJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KQorCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorCQkJCSAgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iKSk7CisJCWVsc2UKKwkJCWRpZShfKCJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iKSk7CisJfQorCWlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aCgiQ0hFUlJZX1BJQ0tfSEVBRCIpKSkgeworCQlpZiAoYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QpCisJCQlkaWUoXygiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisJCQkgICAgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iKSk7CisJCWVsc2UKKwkJCWRpZShfKCJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iKSk7CisJfQorCXJlc29sdmVfdW5kb19jbGVhcigpOworCisJaWYgKHZlcmJvc2l0eSA8IDApCisJCXNob3dfZGlmZnN0YXQgPSAwOworCisJaWYgKHNxdWFzaCkgeworCQlpZiAoIWFsbG93X2Zhc3RfZm9yd2FyZCkKKwkJCWRpZShfKCJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIpKTsKKwkJb3B0aW9uX2NvbW1pdCA9IDA7CisJfQorCisJaWYgKCFhbGxvd19mYXN0X2ZvcndhcmQgJiYgZmFzdF9mb3J3YXJkX29ubHkpCisJCWRpZShfKCJZb3UgY2Fubm90IGNvbWJpbmUgLS1uby1mZiB3aXRoIC0tZmYtb25seS4iKSk7CisKKwlpZiAoIWFib3J0X2N1cnJlbnRfbWVyZ2UpIHsKKwkJaWYgKCFhcmdjKSB7CisJCQlpZiAoZGVmYXVsdF90b191cHN0cmVhbSkKKwkJCQlhcmdjID0gc2V0dXBfd2l0aF91cHN0cmVhbSgmYXJndik7CisJCQllbHNlCisJCQkJZGllKF8oIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIikpOworCQl9IGVsc2UgaWYgKGFyZ2MgPT0gMSAmJiAhc3RyY21wKGFyZ3ZbMF0sICItIikpCisJCQlhcmd2WzBdID0gIkB7LTF9IjsKKwl9CisJaWYgKCFhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9tZXJnZV91c2FnZSwKKwkJCWJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucyk7CisKKwkvKgorCSAqIFRoaXMgY291bGQgYmUgdHJhZGl0aW9uYWwgIm1lcmdlIDxtc2c+IEhFQUQgPGNvbW1pdD4uLi4iICBhbmQKKwkgKiB0aGUgd2F5IHdlIGNhbiB0ZWxsIGl0IGlzIHRvIHNlZSBpZiB0aGUgc2Vjb25kIHRva2VuIGlzIEhFQUQsCisJICogYnV0IHNvbWUgcGVvcGxlIG1pZ2h0IGhhdmUgbWlzdXNlZCB0aGUgaW50ZXJmYWNlIGFuZCB1c2VkIGEKKwkgKiBjb21taXR0aXNoIHRoYXQgaXMgdGhlIHNhbWUgYXMgSEVBRCB0aGVyZSBpbnN0ZWFkLgorCSAqIFRyYWRpdGlvbmFsIGZvcm1hdCBuZXZlciB3b3VsZCBoYXZlICItbSIgc28gaXQgaXMgYW4KKwkgKiBhZGRpdGlvbmFsIHNhZmV0eSBtZWFzdXJlIHRvIGNoZWNrIGZvciBpdC4KKwkgKi8KKworCWlmICghaGF2ZV9tZXNzYWdlICYmIGhlYWRfY29tbWl0ICYmCisJICAgIGlzX29sZF9zdHlsZV9pbnZvY2F0aW9uKGFyZ2MsIGFyZ3YsIGhlYWRfY29tbWl0LT5vYmplY3Quc2hhMSkpIHsKKwkJc3RyYnVmX2FkZHN0cigmbWVyZ2VfbXNnLCBhcmd2WzBdKTsKKwkJaGVhZF9hcmcgPSBhcmd2WzFdOworCQlhcmd2ICs9IDI7CisJCWFyZ2MgLT0gMjsKKwkJcmVtb3RlaGVhZHMgPSBjb2xsZWN0X3BhcmVudHMoaGVhZF9jb21taXQsICZoZWFkX3N1YnN1bWVkLCBhcmdjLCBhcmd2KTsKKwl9IGVsc2UgaWYgKCFoZWFkX2NvbW1pdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpyZW1vdGVfaGVhZDsKKwkJLyoKKwkJICogSWYgdGhlIG1lcmdlZCBoZWFkIGlzIGEgdmFsaWQgb25lIHRoZXJlIGlzIG5vIHJlYXNvbgorCQkgKiB0byBmb3JiaWQgImdpdCBtZXJnZSIgaW50byBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybi4KKwkJICogV2UgZG8gdGhlIHNhbWUgZm9yICJnaXQgcHVsbCIuCisJCSAqLworCQlpZiAoYXJnYyAhPSAxKQorCQkJZGllKF8oIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvICIKKwkJCQkiZW1wdHkgaGVhZCIpKTsKKwkJaWYgKHNxdWFzaCkKKwkJCWRpZShfKCJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIpKTsKKwkJaWYgKCFhbGxvd19mYXN0X2ZvcndhcmQpCisJCQlkaWUoXygiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvICIKKwkJCSAgICAiYW4gZW1wdHkgaGVhZCIpKTsKKwkJcmVtb3RlaGVhZHMgPSBjb2xsZWN0X3BhcmVudHMoaGVhZF9jb21taXQsICZoZWFkX3N1YnN1bWVkLCBhcmdjLCBhcmd2KTsKKwkJcmVtb3RlX2hlYWQgPSByZW1vdGVoZWFkcy0+aXRlbTsKKwkJaWYgKCFyZW1vdGVfaGVhZCkKKwkJCWRpZShfKCIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIiksIGFyZ3ZbMF0pOworCQlyZWFkX2VtcHR5KHJlbW90ZV9oZWFkLT5vYmplY3Quc2hhMSwgMCk7CisJCXVwZGF0ZV9yZWYoImluaXRpYWwgcHVsbCIsICJIRUFEIiwgcmVtb3RlX2hlYWQtPm9iamVjdC5zaGExLAorCQkJICAgTlVMTCwgMCwgRElFX09OX0VSUik7CisJCWdvdG8gZG9uZTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIG1lcmdlX25hbWVzID0gU1RSQlVGX0lOSVQ7CisKKwkJLyogV2UgYXJlIGludm9rZWQgZGlyZWN0bHkgYXMgdGhlIGZpcnN0LWNsYXNzIFVJLiAqLworCQloZWFkX2FyZyA9ICJIRUFEIjsKKworCQkvKgorCQkgKiBBbGwgdGhlIHJlc3QgYXJlIHRoZSBjb21taXRzIGJlaW5nIG1lcmdlZDsgcHJlcGFyZQorCQkgKiB0aGUgc3RhbmRhcmQgbWVyZ2Ugc3VtbWFyeSBtZXNzYWdlIHRvIGJlIGFwcGVuZGVkCisJCSAqIHRvIHRoZSBnaXZlbiBtZXNzYWdlLgorCQkgKi8KKwkJcmVtb3RlaGVhZHMgPSBjb2xsZWN0X3BhcmVudHMoaGVhZF9jb21taXQsICZoZWFkX3N1YnN1bWVkLCBhcmdjLCBhcmd2KTsKKwkJZm9yIChwID0gcmVtb3RlaGVhZHM7IHA7IHAgPSBwLT5uZXh0KQorCQkJbWVyZ2VfbmFtZShtZXJnZV9yZW1vdGVfdXRpbChwLT5pdGVtKS0+bmFtZSwgJm1lcmdlX25hbWVzKTsKKworCQlpZiAoIWhhdmVfbWVzc2FnZSB8fCBzaG9ydGxvZ19sZW4pIHsKKwkJCXN0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgb3B0czsKKwkJCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwkJCW9wdHMuYWRkX3RpdGxlID0gIWhhdmVfbWVzc2FnZTsKKwkJCW9wdHMuc2hvcnRsb2dfbGVuID0gc2hvcnRsb2dfbGVuOworCisJCQlmbXRfbWVyZ2VfbXNnKCZtZXJnZV9uYW1lcywgJm1lcmdlX21zZywgJm9wdHMpOworCQkJaWYgKG1lcmdlX21zZy5sZW4pCisJCQkJc3RyYnVmX3NldGxlbigmbWVyZ2VfbXNnLCBtZXJnZV9tc2cubGVuIC0gMSk7CisJCX0KKwl9CisKKwlpZiAoIWhlYWRfY29tbWl0IHx8ICFhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9tZXJnZV91c2FnZSwKKwkJCWJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucyk7CisKKwlzdHJidWZfYWRkc3RyKCZidWYsICJtZXJnZSIpOworCWZvciAocCA9IHJlbW90ZWhlYWRzOyBwOyBwID0gcC0+bmV4dCkKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiAlcyIsIG1lcmdlX3JlbW90ZV91dGlsKHAtPml0ZW0pLT5uYW1lKTsKKwlzZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIiwgYnVmLmJ1ZiwgMCk7CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCisJZm9yIChwID0gcmVtb3RlaGVhZHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJHSVRIRUFEXyVzIiwKKwkJCSAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCXNldGVudihidWYuYnVmLCBtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5uYW1lLCAxKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlpZiAoIWZhc3RfZm9yd2FyZF9vbmx5ICYmCisJCSAgICBtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpICYmCisJCSAgICBtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5vYmogJiYKKwkJICAgIG1lcmdlX3JlbW90ZV91dGlsKGNvbW1pdCktPm9iai0+dHlwZSA9PSBPQkpfVEFHKQorCQkJYWxsb3dfZmFzdF9mb3J3YXJkID0gMDsKKwl9CisKKwlpZiAob3B0aW9uX2VkaXQgPCAwKQorCQlvcHRpb25fZWRpdCA9IGRlZmF1bHRfZWRpdF9vcHRpb24oKTsKKworCWlmICghdXNlX3N0cmF0ZWdpZXMpIHsKKwkJaWYgKCFyZW1vdGVoZWFkcykKKwkJCTsgLyogYWxyZWFkeSB1cC10by1kYXRlICovCisJCWVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCkKKwkJCWFkZF9zdHJhdGVnaWVzKHB1bGxfdHdvaGVhZCwgREVGQVVMVF9UV09IRUFEKTsKKwkJZWxzZQorCQkJYWRkX3N0cmF0ZWdpZXMocHVsbF9vY3RvcHVzLCBERUZBVUxUX09DVE9QVVMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1c2Vfc3RyYXRlZ2llc19ucjsgaSsrKSB7CisJCWlmICh1c2Vfc3RyYXRlZ2llc1tpXS0+YXR0ciAmIE5PX0ZBU1RfRk9SV0FSRCkKKwkJCWFsbG93X2Zhc3RfZm9yd2FyZCA9IDA7CisJCWlmICh1c2Vfc3RyYXRlZ2llc1tpXS0+YXR0ciAmIE5PX1RSSVZJQUwpCisJCQlhbGxvd190cml2aWFsID0gMDsKKwl9CisKKwlpZiAoIXJlbW90ZWhlYWRzKQorCQk7IC8qIGFscmVhZHkgdXAtdG8tZGF0ZSAqLworCWVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCkKKwkJY29tbW9uID0gZ2V0X21lcmdlX2Jhc2VzKGhlYWRfY29tbWl0LCByZW1vdGVoZWFkcy0+aXRlbSwgMSk7CisJZWxzZSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IHJlbW90ZWhlYWRzOworCQljb21taXRfbGlzdF9pbnNlcnQoaGVhZF9jb21taXQsICZsaXN0KTsKKwkJY29tbW9uID0gZ2V0X29jdG9wdXNfbWVyZ2VfYmFzZXMobGlzdCk7CisJCWZyZWUobGlzdCk7CisJfQorCisJdXBkYXRlX3JlZigidXBkYXRpbmcgT1JJR19IRUFEIiwgIk9SSUdfSEVBRCIsIGhlYWRfY29tbWl0LT5vYmplY3Quc2hhMSwKKwkJICAgTlVMTCwgMCwgRElFX09OX0VSUik7CisKKwlpZiAocmVtb3RlaGVhZHMgJiYgIWNvbW1vbikKKwkJOyAvKiBObyBjb21tb24gYW5jZXN0b3JzIGZvdW5kLiBXZSBuZWVkIGEgcmVhbCBtZXJnZS4gKi8KKwllbHNlIGlmICghcmVtb3RlaGVhZHMgfHwKKwkJICghcmVtb3RlaGVhZHMtPm5leHQgJiYgIWNvbW1vbi0+bmV4dCAmJgorCQkgIGNvbW1vbi0+aXRlbSA9PSByZW1vdGVoZWFkcy0+aXRlbSkpIHsKKwkJLyoKKwkJICogSWYgaGVhZCBjYW4gcmVhY2ggYWxsIHRoZSBtZXJnZSB0aGVuIHdlIGFyZSB1cCB0byBkYXRlLgorCQkgKiBidXQgZmlyc3QgdGhlIG1vc3QgY29tbW9uIGNhc2Ugb2YgbWVyZ2luZyBvbmUgcmVtb3RlLgorCQkgKi8KKwkJZmluaXNoX3VwX3RvX2RhdGUoIkFscmVhZHkgdXAtdG8tZGF0ZS4iKTsKKwkJZ290byBkb25lOworCX0gZWxzZSBpZiAoYWxsb3dfZmFzdF9mb3J3YXJkICYmICFyZW1vdGVoZWFkcy0+bmV4dCAmJgorCQkJIWNvbW1vbi0+bmV4dCAmJgorCQkJIWhhc2hjbXAoY29tbW9uLT5pdGVtLT5vYmplY3Quc2hhMSwgaGVhZF9jb21taXQtPm9iamVjdC5zaGExKSkgeworCQkvKiBBZ2FpbiB0aGUgbW9zdCBjb21tb24gY2FzZSBvZiBtZXJnaW5nIG9uZSByZW1vdGUuICovCisJCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJY2hhciBoZXhbNDFdOworCisJCXN0cmNweShoZXgsIGZpbmRfdW5pcXVlX2FiYnJldihoZWFkX2NvbW1pdC0+b2JqZWN0LnNoYTEsIERFRkFVTFRfQUJCUkVWKSk7CisKKwkJaWYgKHZlcmJvc2l0eSA+PSAwKQorCQkJcHJpbnRmKF8oIlVwZGF0aW5nICVzLi4lc1xuIiksCisJCQkJaGV4LAorCQkJCWZpbmRfdW5pcXVlX2FiYnJldihyZW1vdGVoZWFkcy0+aXRlbS0+b2JqZWN0LnNoYTEsCisJCQkJREVGQVVMVF9BQkJSRVYpKTsKKwkJc3RyYnVmX2FkZHN0cigmbXNnLCAiRmFzdC1mb3J3YXJkIik7CisJCWlmIChoYXZlX21lc3NhZ2UpCisJCQlzdHJidWZfYWRkc3RyKCZtc2csCisJCQkJIiAobm8gY29tbWl0IGNyZWF0ZWQ7IC1tIG9wdGlvbiBpZ25vcmVkKSIpOworCQljb21taXQgPSByZW1vdGVoZWFkcy0+aXRlbTsKKwkJaWYgKCFjb21taXQpIHsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlpZiAoY2hlY2tvdXRfZmFzdF9mb3J3YXJkKGhlYWRfY29tbWl0LT5vYmplY3Quc2hhMSwKKwkJCQkJICBjb21taXQtPm9iamVjdC5zaGExKSkgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWZpbmlzaChoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMsIGNvbW1pdC0+b2JqZWN0LnNoYTEsIG1zZy5idWYpOworCQlkcm9wX3NhdmUoKTsKKwkJZ290byBkb25lOworCX0gZWxzZSBpZiAoIXJlbW90ZWhlYWRzLT5uZXh0ICYmIGNvbW1vbi0+bmV4dCkKKwkJOworCQkvKgorCQkgKiBXZSBhcmUgbm90IGRvaW5nIG9jdG9wdXMgYW5kIG5vdCBmYXN0LWZvcndhcmQuICBOZWVkCisJCSAqIGEgcmVhbCBtZXJnZS4KKwkJICovCisJZWxzZSBpZiAoIXJlbW90ZWhlYWRzLT5uZXh0ICYmICFjb21tb24tPm5leHQgJiYgb3B0aW9uX2NvbW1pdCkgeworCQkvKgorCQkgKiBXZSBhcmUgbm90IGRvaW5nIG9jdG9wdXMsIG5vdCBmYXN0LWZvcndhcmQsIGFuZCBoYXZlCisJCSAqIG9ubHkgb25lIGNvbW1vbi4KKwkJICovCisJCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisJCWlmIChhbGxvd190cml2aWFsICYmICFmYXN0X2ZvcndhcmRfb25seSkgeworCQkJLyogU2VlIGlmIGl0IGlzIHJlYWxseSB0cml2aWFsLiAqLworCQkJZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCk7CisJCQlwcmludGYoXygiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iKSk7CisJCQlpZiAoIXJlYWRfdHJlZV90cml2aWFsKGNvbW1vbi0+aXRlbS0+b2JqZWN0LnNoYTEsCisJCQkJCSAgICAgICBoZWFkX2NvbW1pdC0+b2JqZWN0LnNoYTEsCisJCQkJCSAgICAgICByZW1vdGVoZWFkcy0+aXRlbS0+b2JqZWN0LnNoYTEpKSB7CisJCQkJcmV0ID0gbWVyZ2VfdHJpdmlhbChoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXByaW50ZihfKCJOb3BlLlxuIikpOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQW4gb2N0b3B1cy4gIElmIHdlIGNhbiByZWFjaCBhbGwgdGhlIHJlbW90ZSB3ZSBhcmUgdXAKKwkJICogdG8gZGF0ZS4KKwkJICovCisJCWludCB1cF90b19kYXRlID0gMTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpqOworCisJCWZvciAoaiA9IHJlbW90ZWhlYWRzOyBqOyBqID0gai0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb25fb25lOworCisJCQkvKgorCQkJICogSGVyZSB3ZSAqaGF2ZSogdG8gY2FsY3VsYXRlIHRoZSBpbmRpdmlkdWFsCisJCQkgKiBtZXJnZV9iYXNlcyBhZ2Fpbiwgb3RoZXJ3aXNlICJnaXQgbWVyZ2UgSEVBRF4KKwkJCSAqIEhFQUReXiIgd291bGQgYmUgbWlzc2VkLgorCQkJICovCisJCQljb21tb25fb25lID0gZ2V0X21lcmdlX2Jhc2VzKGhlYWRfY29tbWl0LCBqLT5pdGVtLCAxKTsKKwkJCWlmIChoYXNoY21wKGNvbW1vbl9vbmUtPml0ZW0tPm9iamVjdC5zaGExLAorCQkJCWotPml0ZW0tPm9iamVjdC5zaGExKSkgeworCQkJCXVwX3RvX2RhdGUgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICh1cF90b19kYXRlKSB7CisJCQlmaW5pc2hfdXBfdG9fZGF0ZSgiQWxyZWFkeSB1cC10by1kYXRlLiBZZWVhaCEiKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCWlmIChmYXN0X2ZvcndhcmRfb25seSkKKwkJZGllKF8oIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIpKTsKKworCS8qIFdlIGFyZSBnb2luZyB0byBtYWtlIGEgbmV3IGNvbW1pdC4gKi8KKwlnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfU1RSSUNUKTsKKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgd2UgbmVlZCBhIHJlYWwgbWVyZ2UuICBObyBtYXR0ZXIgd2hhdCBzdHJhdGVneQorCSAqIHdlIHVzZSwgaXQgd291bGQgb3BlcmF0ZSBvbiB0aGUgaW5kZXgsIHBvc3NpYmx5IGFmZmVjdGluZyB0aGUKKwkgKiB3b3JraW5nIHRyZWUsIGFuZCB3aGVuIHJlc29sdmVkIGNsZWFubHksIGhhdmUgdGhlIGRlc2lyZWQKKwkgKiB0cmVlIGluIHRoZSBpbmRleCAtLSB0aGlzIG1lYW5zIHRoYXQgdGhlIGluZGV4IG11c3QgYmUgaW4KKwkgKiBzeW5jIHdpdGggdGhlIGhlYWQgY29tbWl0LiAgVGhlIHN0cmF0ZWdpZXMgYXJlIHJlc3BvbnNpYmxlCisJICogdG8gZW5zdXJlIHRoaXMuCisJICovCisJaWYgKHVzZV9zdHJhdGVnaWVzX25yID09IDEgfHwKKwkgICAgLyoKKwkgICAgICogU3Rhc2ggYXdheSB0aGUgbG9jYWwgY2hhbmdlcyBzbyB0aGF0IHdlIGNhbiB0cnkgbW9yZSB0aGFuIG9uZS4KKwkgICAgICovCisJICAgIHNhdmVfc3RhdGUoc3Rhc2gpKQorCQloYXNoY3B5KHN0YXNoLCBudWxsX3NoYTEpOworCisJZm9yIChpID0gMDsgaSA8IHVzZV9zdHJhdGVnaWVzX25yOyBpKyspIHsKKwkJaW50IHJldDsKKwkJaWYgKGkpIHsKKwkJCXByaW50ZihfKCJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIpKTsKKwkJCXJlc3RvcmVfc3RhdGUoaGVhZF9jb21taXQtPm9iamVjdC5zaGExLCBzdGFzaCk7CisJCX0KKwkJaWYgKHVzZV9zdHJhdGVnaWVzX25yICE9IDEpCisJCQlwcmludGYoXygiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iKSwKKwkJCQl1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZSk7CisJCS8qCisJCSAqIFJlbWVtYmVyIHdoaWNoIHN0cmF0ZWd5IGxlZnQgdGhlIHN0YXRlIGluIHRoZSB3b3JraW5nCisJCSAqIHRyZWUuCisJCSAqLworCQl3dF9zdHJhdGVneSA9IHVzZV9zdHJhdGVnaWVzW2ldLT5uYW1lOworCisJCXJldCA9IHRyeV9tZXJnZV9zdHJhdGVneSh1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZSwKKwkJCQkJIGNvbW1vbiwgcmVtb3RlaGVhZHMsCisJCQkJCSBoZWFkX2NvbW1pdCwgaGVhZF9hcmcpOworCQlpZiAoIW9wdGlvbl9jb21taXQgJiYgIXJldCkgeworCQkJbWVyZ2Vfd2FzX29rID0gMTsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBoZXJlIGp1c3QgdG8gYXZvaWQgd3JpdGluZworCQkJICogdGhlIHRyZWUsIGJ1dCBsYXRlciB3ZSB3aWxsICpub3QqIGV4aXQgd2l0aAorCQkJICogc3RhdHVzIGNvZGUgMSBiZWNhdXNlIG1lcmdlX3dhc19vayBpcyBzZXQuCisJCQkgKi8KKwkJCXJldCA9IDE7CisJCX0KKworCQlpZiAocmV0KSB7CisJCQkvKgorCQkJICogVGhlIGJhY2tlbmQgZXhpdHMgd2l0aCAxIHdoZW4gY29uZmxpY3RzIGFyZQorCQkJICogbGVmdCB0byBiZSByZXNvbHZlZCwgd2l0aCAyIHdoZW4gaXQgZG9lcyBub3QKKwkJCSAqIGhhbmRsZSB0aGUgZ2l2ZW4gbWVyZ2UgYXQgYWxsLgorCQkJICovCisJCQlpZiAocmV0ID09IDEpIHsKKwkJCQlpbnQgY250ID0gZXZhbHVhdGVfcmVzdWx0KCk7CisKKwkJCQlpZiAoYmVzdF9jbnQgPD0gMCB8fCBjbnQgPD0gYmVzdF9jbnQpIHsKKwkJCQkJYmVzdF9zdHJhdGVneSA9IHVzZV9zdHJhdGVnaWVzW2ldLT5uYW1lOworCQkJCQliZXN0X2NudCA9IGNudDsKKwkJCQl9CisJCQl9CisJCQlpZiAobWVyZ2Vfd2FzX29rKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQXV0b21lcmdlIHN1Y2NlZWRlZC4gKi8KKwkJd3JpdGVfdHJlZV90cml2aWFsKHJlc3VsdF90cmVlKTsKKwkJYXV0b21lcmdlX3dhc19vayA9IDE7CisJCWJyZWFrOworCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBhIHJlc3VsdGluZyB0cmVlLCB0aGF0IG1lYW5zIHRoZSBzdHJhdGVneSBtb2R1bGUKKwkgKiBhdXRvIHJlc29sdmVkIHRoZSBtZXJnZSBjbGVhbmx5LgorCSAqLworCWlmIChhdXRvbWVyZ2Vfd2FzX29rKSB7CisJCXJldCA9IGZpbmlzaF9hdXRvbWVyZ2UoaGVhZF9jb21taXQsIGhlYWRfc3Vic3VtZWQsCisJCQkJICAgICAgIGNvbW1vbiwgcmVtb3RlaGVhZHMsCisJCQkJICAgICAgIHJlc3VsdF90cmVlLCB3dF9zdHJhdGVneSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIFBpY2sgdGhlIHJlc3VsdCBmcm9tIHRoZSBiZXN0IHN0cmF0ZWd5IGFuZCBoYXZlIHRoZSB1c2VyIGZpeAorCSAqIGl0IHVwLgorCSAqLworCWlmICghYmVzdF9zdHJhdGVneSkgeworCQlyZXN0b3JlX3N0YXRlKGhlYWRfY29tbWl0LT5vYmplY3Quc2hhMSwgc3Rhc2gpOworCQlpZiAodXNlX3N0cmF0ZWdpZXNfbnIgPiAxKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iKSk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIpLAorCQkJCXVzZV9zdHJhdGVnaWVzWzBdLT5uYW1lKTsKKwkJcmV0ID0gMjsKKwkJZ290byBkb25lOworCX0gZWxzZSBpZiAoYmVzdF9zdHJhdGVneSA9PSB3dF9zdHJhdGVneSkKKwkJOyAvKiBXZSBhbHJlYWR5IGhhdmUgaXRzIHJlc3VsdCBpbiB0aGUgd29ya2luZyB0cmVlLiAqLworCWVsc2UgeworCQlwcmludGYoXygiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iKSk7CisJCXJlc3RvcmVfc3RhdGUoaGVhZF9jb21taXQtPm9iamVjdC5zaGExLCBzdGFzaCk7CisJCXByaW50ZihfKCJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIpLAorCQkJYmVzdF9zdHJhdGVneSk7CisJCXRyeV9tZXJnZV9zdHJhdGVneShiZXN0X3N0cmF0ZWd5LCBjb21tb24sIHJlbW90ZWhlYWRzLAorCQkJCSAgIGhlYWRfY29tbWl0LCBoZWFkX2FyZyk7CisJfQorCisJaWYgKHNxdWFzaCkKKwkJZmluaXNoKGhlYWRfY29tbWl0LCByZW1vdGVoZWFkcywgTlVMTCwgTlVMTCk7CisJZWxzZQorCQl3cml0ZV9tZXJnZV9zdGF0ZShyZW1vdGVoZWFkcyk7CisKKwlpZiAobWVyZ2Vfd2FzX29rKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgIgorCQkJInN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iKSk7CisJZWxzZQorCQlyZXQgPSBzdWdnZXN0X2NvbmZsaWN0cyhvcHRpb25fcmVub3JtYWxpemUpOworCitkb25lOgorCWZyZWUoYnJhbmNoX3RvX2ZyZWUpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21rdGFnLmMgYi9idWlsdGluL21rdGFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwYWI2NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWt0YWcuYwpAQCAtMCwwICsxLDE3NCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ0YWcuaCIKKworLyoKKyAqIEEgc2lnbmF0dXJlIGZpbGUgaGFzIGEgdmVyeSBzaW1wbGUgZml4ZWQgZm9ybWF0OiBmb3VyIGxpbmVzCisgKiBvZiAib2JqZWN0IDxzaGExPiIgKyAidHlwZSA8dHlwZW5hbWU+IiArICJ0YWcgPHRhZ25hbWU+IiArCisgKiAidGFnZ2VyIDxjb21taXR0ZXI+IiwgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lLCBhIGZyZWUtZm9ybSB0YWcKKyAqIG1lc3NhZ2UgYW5kIGEgc2lnbmF0dXJlIGJsb2NrIHRoYXQgZ2l0IGl0c2VsZiBkb2Vzbid0IGNhcmUgYWJvdXQsCisgKiBidXQgdGhhdCBjYW4gYmUgdmVyaWZpZWQgd2l0aCBncGcgb3Igc2ltaWxhci4KKyAqCisgKiBUaGUgZmlyc3QgZm91ciBsaW5lcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBhdCBsZWFzdCA4MyBieXRlczoKKyAqICJvYmplY3QgPHNoYTE+XG4iIGlzIDQ4IGJ5dGVzLCAidHlwZSB0YWdcbiIgYXQgOSBieXRlcyBpcyB0aGUKKyAqIHNob3J0ZXN0IHBvc3NpYmxlIHR5cGUtbGluZSwgInRhZyAuXG4iIGF0IDYgYnl0ZXMgaXMgdGhlIHNob3J0ZXN0CisgKiBzaW5nbGUtY2hhcmFjdGVyLXRhZyBsaW5lLCBhbmQgInRhZ2dlciAuIDw+IDAgKzAwMDBcbiIgYXQgMjAgYnl0ZXMgaXMKKyAqIHRoZSBzaG9ydGVzdCBwb3NzaWJsZSB0YWdnZXItbGluZS4KKyAqLworCisvKgorICogV2UgcmVmdXNlIHRvIHRhZyBzb21ldGhpbmcgd2UgY2FuJ3QgdmVyaWZ5LiBKdXN0IGJlY2F1c2UuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpleHBlY3RlZF90eXBlKQoreworCWludCByZXQgPSAtMTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXZvaWQgKmJ1ZmZlciA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcmVwbCA9IGxvb2t1cF9yZXBsYWNlX29iamVjdChzaGExKTsKKworCWlmIChidWZmZXIpIHsKKwkJaWYgKHR5cGUgPT0gdHlwZV9mcm9tX3N0cmluZyhleHBlY3RlZF90eXBlKSkKKwkJCXJldCA9IGNoZWNrX3NoYTFfc2lnbmF0dXJlKHJlcGwsIGJ1ZmZlciwgc2l6ZSwgZXhwZWN0ZWRfdHlwZSk7CisJCWZyZWUoYnVmZmVyKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfdGFnKGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCB0eXBlbGVuOworCWNoYXIgdHlwZVsyMF07CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljb25zdCBjaGFyICpvYmplY3QsICp0eXBlX2xpbmUsICp0YWdfbGluZSwgKnRhZ2dlcl9saW5lLCAqbGIsICpyYjsKKwlzaXplX3QgbGVuOworCisJaWYgKHNpemUgPCA4NCkKKwkJcmV0dXJuIGVycm9yKCJ3YW5uYSBmb29sIG1lID8geW91IG9idmlvdXNseSBnb3QgdGhlIHNpemUgd3JvbmcgISIpOworCisJYnVmZmVyW3NpemVdID0gMDsKKworCS8qIFZlcmlmeSBvYmplY3QgbGluZSAqLworCW9iamVjdCA9IGJ1ZmZlcjsKKwlpZiAobWVtY21wKG9iamVjdCwgIm9iamVjdCAiLCA3KSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJWQ6IGRvZXMgbm90IHN0YXJ0IHdpdGggXCJvYmplY3QgXCIiLCAwKTsKKworCWlmIChnZXRfc2hhMV9oZXgob2JqZWN0ICsgNywgc2hhMSkpCisJCXJldHVybiBlcnJvcigiY2hhciVkOiBjb3VsZCBub3QgZ2V0IFNIQTEgaGFzaCIsIDcpOworCisJLyogVmVyaWZ5IHR5cGUgbGluZSAqLworCXR5cGVfbGluZSA9IG9iamVjdCArIDQ4OworCWlmIChtZW1jbXAodHlwZV9saW5lIC0gMSwgIlxudHlwZSAiLCA2KSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJWQ6IGNvdWxkIG5vdCBmaW5kIFwiXFxudHlwZSBcIiIsIDQ3KTsKKworCS8qIFZlcmlmeSB0YWctbGluZSAqLworCXRhZ19saW5lID0gc3RyY2hyKHR5cGVfbGluZSwgJ1xuJyk7CisJaWYgKCF0YWdfbGluZSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogY291bGQgbm90IGZpbmQgbmV4dCBcIlxcblwiIiwKKwkJCQkodWludG1heF90KSAodHlwZV9saW5lIC0gYnVmZmVyKSk7CisJdGFnX2xpbmUrKzsKKwlpZiAobWVtY21wKHRhZ19saW5lLCAidGFnICIsIDQpIHx8IHRhZ19saW5lWzRdID09ICdcbicpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IG5vIFwidGFnIFwiIGZvdW5kIiwKKwkJCQkodWludG1heF90KSAodGFnX2xpbmUgLSBidWZmZXIpKTsKKworCS8qIEdldCB0aGUgYWN0dWFsIHR5cGUgKi8KKwl0eXBlbGVuID0gdGFnX2xpbmUgLSB0eXBlX2xpbmUgLSBzdHJsZW4oInR5cGUgXG4iKTsKKwlpZiAodHlwZWxlbiA+PSBzaXplb2YodHlwZSkpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IHR5cGUgdG9vIGxvbmciLAorCQkJCSh1aW50bWF4X3QpICh0eXBlX2xpbmUrNSAtIGJ1ZmZlcikpOworCisJbWVtY3B5KHR5cGUsIHR5cGVfbGluZSs1LCB0eXBlbGVuKTsKKwl0eXBlW3R5cGVsZW5dID0gMDsKKworCS8qIFZlcmlmeSB0aGF0IHRoZSBvYmplY3QgbWF0Y2hlcyAqLworCWlmICh2ZXJpZnlfb2JqZWN0KHNoYTEsIHR5cGUpKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlZDogY291bGQgbm90IHZlcmlmeSBvYmplY3QgJXMiLCA3LCBzaGExX3RvX2hleChzaGExKSk7CisKKwkvKiBWZXJpZnkgdGhlIHRhZy1uYW1lOiB3ZSBkb24ndCBhbGxvdyBjb250cm9sIGNoYXJhY3RlcnMgb3Igc3BhY2VzIGluIGl0ICovCisJdGFnX2xpbmUgKz0gNDsKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICp0YWdfbGluZSsrOworCQlpZiAoYyA9PSAnXG4nKQorCQkJYnJlYWs7CisJCWlmIChjID4gJyAnKQorCQkJY29udGludWU7CisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IGNvdWxkIG5vdCB2ZXJpZnkgdGFnIG5hbWUiLAorCQkJCSh1aW50bWF4X3QpICh0YWdfbGluZSAtIGJ1ZmZlcikpOworCX0KKworCS8qIFZlcmlmeSB0aGUgdGFnZ2VyIGxpbmUgKi8KKwl0YWdnZXJfbGluZSA9IHRhZ19saW5lOworCisJaWYgKG1lbWNtcCh0YWdnZXJfbGluZSwgInRhZ2dlciAiLCA3KSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogY291bGQgbm90IGZpbmQgXCJ0YWdnZXIgXCIiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisKKwkvKgorCSAqIENoZWNrIGZvciBjb3JyZWN0IGZvcm0gZm9yIG5hbWUgYW5kIGVtYWlsCisJICogaS5lLiAiIDwiIGZvbGxvd2VkIGJ5ICI+ICIgb24gX3RoaXNfIGxpbmUKKwkgKiBObyBhbmdsZSBicmFja2V0cyB3aXRoaW4gdGhlIG5hbWUgb3IgZW1haWwgYWRkcmVzcyBmaWVsZHMuCisJICogTm8gc3BhY2VzIHdpdGhpbiB0aGUgZW1haWwgYWRkcmVzcyBmaWVsZC4KKwkgKi8KKwl0YWdnZXJfbGluZSArPSA3OworCWlmICghKGxiID0gc3Ryc3RyKHRhZ2dlcl9saW5lLCAiIDwiKSkgfHwgIShyYiA9IHN0cnN0cihsYisyLCAiPiAiKSkgfHwKKwkJc3RycGJyayh0YWdnZXJfbGluZSwgIjw+XG4iKSAhPSBsYisxIHx8CisJCXN0cnBicmsobGIrMiwgIj48XG4gIikgIT0gcmIpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IG1hbGZvcm1lZCB0YWdnZXIgZmllbGQiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisKKwkvKiBDaGVjayBmb3IgYXV0aG9yIG5hbWUsIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIHNwYWNlIGlzIGFjY2VwdGFibGUgKi8KKwlpZiAobGIgPT0gdGFnZ2VyX2xpbmUpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IG1pc3NpbmcgdGFnZ2VyIG5hbWUiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisKKwkvKiB0aW1lc3RhbXAsIDEgb3IgbW9yZSBkaWdpdHMgZm9sbG93ZWQgYnkgc3BhY2UgKi8KKwl0YWdnZXJfbGluZSA9IHJiICsgMjsKKwlpZiAoIShsZW4gPSBzdHJzcG4odGFnZ2VyX2xpbmUsICIwMTIzNDU2Nzg5IikpKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBtaXNzaW5nIHRhZyB0aW1lc3RhbXAiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisJdGFnZ2VyX2xpbmUgKz0gbGVuOworCWlmICgqdGFnZ2VyX2xpbmUgIT0gJyAnKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBtYWxmb3JtZWQgdGFnIHRpbWVzdGFtcCIsCisJCQkodWludG1heF90KSAodGFnZ2VyX2xpbmUgLSBidWZmZXIpKTsKKwl0YWdnZXJfbGluZSsrOworCisJLyogdGltZXpvbmUsIDUgZGlnaXRzIFsrLV1oaG1tLCBtYXguIDE0MDAgKi8KKwlpZiAoISgodGFnZ2VyX2xpbmVbMF0gPT0gJysnIHx8IHRhZ2dlcl9saW5lWzBdID09ICctJykgJiYKKwkgICAgICBzdHJzcG4odGFnZ2VyX2xpbmUrMSwgIjAxMjM0NTY3ODkiKSA9PSA0ICYmCisJICAgICAgdGFnZ2VyX2xpbmVbNV0gPT0gJ1xuJyAmJiBhdG9pKHRhZ2dlcl9saW5lKzEpIDw9IDE0MDApKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBtYWxmb3JtZWQgdGFnIHRpbWV6b25lIiwKKwkJCSh1aW50bWF4X3QpICh0YWdnZXJfbGluZSAtIGJ1ZmZlcikpOworCXRhZ2dlcl9saW5lICs9IDY7CisKKwkvKiBWZXJpZnkgdGhlIGJsYW5rIGxpbmUgc2VwYXJhdGluZyB0aGUgaGVhZGVyIGZyb20gdGhlIGJvZHkgKi8KKwlpZiAoKnRhZ2dlcl9saW5lICE9ICdcbicpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IHRyYWlsaW5nIGdhcmJhZ2UgaW4gdGFnIGhlYWRlciIsCisJCQkodWludG1heF90KSAodGFnZ2VyX2xpbmUgLSBidWZmZXIpKTsKKworCS8qIFRoZSBhY3R1YWwgc3R1ZmYgYWZ0ZXJ3YXJkcyB3ZSBkb24ndCBjYXJlIGFib3V0Li4gKi8KKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9ta3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgcmVzdWx0X3NoYTFbMjBdOworCisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2UoImdpdCBta3RhZyA8IHNpZ25hdHVyZWZpbGUiKTsKKworCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCA0MDk2KSA8IDApIHsKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIik7CisJfQorCisJLyogVmVyaWZ5IGl0IGZvciBzb21lIGJhc2ljIHNhbml0eTogaXQgbmVlZHMgdG8gc3RhcnQgd2l0aAorCSAgICJvYmplY3QgPHNoYTE+XG50eXBlXG50YWdnZXIgIiAqLworCWlmICh2ZXJpZnlfdGFnKGJ1Zi5idWYsIGJ1Zi5sZW4pIDwgMCkKKwkJZGllKCJpbnZhbGlkIHRhZyBzaWduYXR1cmUgZmlsZSIpOworCisJaWYgKHdyaXRlX3NoYTFfZmlsZShidWYuYnVmLCBidWYubGVuLCB0YWdfdHlwZSwgcmVzdWx0X3NoYTEpIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KHJlc3VsdF9zaGExKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21rdHJlZS5jIGIvYnVpbHRpbi9ta3RyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJiYTQwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9ta3RyZWUuYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIEdJVCAtIHRoZSBzdHVwaWQgY29udGVudCB0cmFja2VyCisgKgorICogQ29weXJpZ2h0IChjKSBKdW5pbyBDIEhhbWFubywgMjAwNiwgMjAwOQorICovCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIHN0cnVjdCB0cmVlZW50IHsKKwl1bnNpZ25lZCBtb2RlOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IGxlbjsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9ICoqZW50cmllczsKK3N0YXRpYyBpbnQgYWxsb2MsIHVzZWQ7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF90b190cmVlKHVuc2lnbmVkIG1vZGUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHRyZWVlbnQgKmVudDsKKwlpbnQgbGVuID0gc3RybGVuKHBhdGgpOworCWlmIChzdHJjaHIocGF0aCwgJy8nKSkKKwkJZGllKCJwYXRoICVzIGNvbnRhaW5zIHNsYXNoIiwgcGF0aCk7CisKKwlpZiAoYWxsb2MgPD0gdXNlZCkgeworCQlhbGxvYyA9IGFsbG9jX25yKHVzZWQpOworCQllbnRyaWVzID0geHJlYWxsb2MoZW50cmllcywgc2l6ZW9mKCplbnRyaWVzKSAqIGFsbG9jKTsKKwl9CisJZW50ID0gZW50cmllc1t1c2VkKytdID0geG1hbGxvYyhzaXplb2YoKiplbnRyaWVzKSArIGxlbiArIDEpOworCWVudC0+bW9kZSA9IG1vZGU7CisJZW50LT5sZW4gPSBsZW47CisJaGFzaGNweShlbnQtPnNoYTEsIHNoYTEpOworCW1lbWNweShlbnQtPm5hbWUsIHBhdGgsIGxlbisxKTsKK30KKworc3RhdGljIGludCBlbnRfY29tcGFyZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHRyZWVlbnQgKmEgPSAqKHN0cnVjdCB0cmVlZW50ICoqKWFfOworCXN0cnVjdCB0cmVlZW50ICpiID0gKihzdHJ1Y3QgdHJlZWVudCAqKiliXzsKKwlyZXR1cm4gYmFzZV9uYW1lX2NvbXBhcmUoYS0+bmFtZSwgYS0+bGVuLCBhLT5tb2RlLAorCQkJCSBiLT5uYW1lLCBiLT5sZW4sIGItPm1vZGUpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV90cmVlKHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHN0cmJ1ZiBidWY7CisJc2l6ZV90IHNpemU7CisJaW50IGk7CisKKwlxc29ydChlbnRyaWVzLCB1c2VkLCBzaXplb2YoKmVudHJpZXMpLCBlbnRfY29tcGFyZSk7CisJZm9yIChzaXplID0gaSA9IDA7IGkgPCB1c2VkOyBpKyspCisJCXNpemUgKz0gMzIgKyBlbnRyaWVzW2ldLT5sZW47CisKKwlzdHJidWZfaW5pdCgmYnVmLCBzaXplKTsKKwlmb3IgKGkgPSAwOyBpIDwgdXNlZDsgaSsrKSB7CisJCXN0cnVjdCB0cmVlZW50ICplbnQgPSBlbnRyaWVzW2ldOworCQlzdHJidWZfYWRkZigmYnVmLCAiJW8gJXMlYyIsIGVudC0+bW9kZSwgZW50LT5uYW1lLCAnXDAnKTsKKwkJc3RyYnVmX2FkZCgmYnVmLCBlbnQtPnNoYTEsIDIwKTsKKwl9CisKKwl3cml0ZV9zaGExX2ZpbGUoYnVmLmJ1ZiwgYnVmLmxlbiwgdHJlZV90eXBlLCBzaGExKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm1rdHJlZV91c2FnZVtdID0geworCU5fKCJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIiksCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQgbWt0cmVlX2xpbmUoY2hhciAqYnVmLCBzaXplX3QgbGVuLCBpbnQgbGluZV90ZXJtaW5hdGlvbiwgaW50IGFsbG93X21pc3NpbmcpCit7CisJY2hhciAqcHRyLCAqbnRyOworCXVuc2lnbmVkIG1vZGU7CisJZW51bSBvYmplY3RfdHlwZSBtb2RlX3R5cGU7IC8qIG9iamVjdCB0eXBlIGRlcml2ZWQgZnJvbSBtb2RlICovCisJZW51bSBvYmplY3RfdHlwZSBvYmpfdHlwZTsgLyogb2JqZWN0IHR5cGUgZGVyaXZlZCBmcm9tIHNoYSAqLworCWNoYXIgKnBhdGg7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCXB0ciA9IGJ1ZjsKKwkvKgorCSAqIFJlYWQgbm9uLXJlY3Vyc2l2ZSBscy10cmVlIG91dHB1dCBmb3JtYXQ6CisJICogICAgIG1vZGUgU1AgdHlwZSBTUCBzaGExIFRBQiBuYW1lCisJICovCisJbW9kZSA9IHN0cnRvdWwocHRyLCAmbnRyLCA4KTsKKwlpZiAocHRyID09IG50ciB8fCAhbnRyIHx8ICpudHIgIT0gJyAnKQorCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogJXMiLCBidWYpOworCXB0ciA9IG50ciArIDE7IC8qIHR5cGUgKi8KKwludHIgPSBzdHJjaHIocHRyLCAnICcpOworCWlmICghbnRyIHx8IGJ1ZiArIGxlbiA8PSBudHIgKyA0MCB8fAorCSAgICBudHJbNDFdICE9ICdcdCcgfHwKKwkgICAgZ2V0X3NoYTFfaGV4KG50ciArIDEsIHNoYTEpKQorCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogJXMiLCBidWYpOworCisJLyogSXQgaXMgcGVyZmVjdGx5IG5vcm1hbCBpZiB3ZSBkbyBub3QgaGF2ZSBhIGNvbW1pdCBmcm9tIGEgc3VibW9kdWxlICovCisJaWYgKFNfSVNHSVRMSU5LKG1vZGUpKQorCQlhbGxvd19taXNzaW5nID0gMTsKKworCisJKm50cisrID0gMDsgLyogbm93IGF0IHRoZSBiZWdpbm5pbmcgb2YgU0hBMSAqLworCisJcGF0aCA9IG50ciArIDQxOyAgLyogYXQgdGhlIGJlZ2lubmluZyBvZiBuYW1lICovCisJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgcGF0aFswXSA9PSAnIicpIHsKKwkJc3RydWN0IHN0cmJ1ZiBwX3VxID0gU1RSQlVGX0lOSVQ7CisJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnBfdXEsIHBhdGgsIE5VTEwpKQorCQkJZGllKCJpbnZhbGlkIHF1b3RpbmciKTsKKwkJcGF0aCA9IHN0cmJ1Zl9kZXRhY2goJnBfdXEsIE5VTEwpOworCX0KKworCS8qCisJICogT2JqZWN0IHR5cGUgaXMgcmVkdW5kYW50bHkgZGVyaXZhYmxlIHRocmVlIHdheXMuCisJICogVGhlc2Ugc2hvdWxkIGFsbCBhZ3JlZS4KKwkgKi8KKwltb2RlX3R5cGUgPSBvYmplY3RfdHlwZShtb2RlKTsKKwlpZiAobW9kZV90eXBlICE9IHR5cGVfZnJvbV9zdHJpbmcocHRyKSkgeworCQlkaWUoImVudHJ5ICclcycgb2JqZWN0IHR5cGUgKCVzKSBkb2Vzbid0IG1hdGNoIG1vZGUgdHlwZSAoJXMpIiwKKwkJCXBhdGgsIHB0ciwgdHlwZW5hbWUobW9kZV90eXBlKSk7CisJfQorCisJLyogQ2hlY2sgdGhlIHR5cGUgb2Ygb2JqZWN0IGlkZW50aWZpZWQgYnkgc2hhMSAqLworCW9ial90eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlpZiAob2JqX3R5cGUgPCAwKSB7CisJCWlmIChhbGxvd19taXNzaW5nKSB7CisJCQk7IC8qIG5vIHByb2JsZW0gLSBtaXNzaW5nIG9iamVjdHMgYXJlIHByZXN1bWVkIHRvIGJlIG9mIHRoZSByaWdodCB0eXBlICovCisJCX0gZWxzZSB7CisJCQlkaWUoImVudHJ5ICclcycgb2JqZWN0ICVzIGlzIHVuYXZhaWxhYmxlIiwgcGF0aCwgc2hhMV90b19oZXgoc2hhMSkpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG9ial90eXBlICE9IG1vZGVfdHlwZSkgeworCQkJLyoKKwkJCSAqIFRoZSBvYmplY3QgZXhpc3RzIGJ1dCBpcyBvZiB0aGUgd3JvbmcgdHlwZS4KKwkJCSAqIFRoaXMgaXMgYSBwcm9ibGVtIHJlZ2FyZGxlc3Mgb2YgYWxsb3dfbWlzc2luZworCQkJICogYmVjYXVzZSB0aGUgbmV3IHRyZWUgZW50cnkgd2lsbCBuZXZlciBiZSBjb3JyZWN0LgorCQkJICovCisJCQlkaWUoImVudHJ5ICclcycgb2JqZWN0ICVzIGlzIGEgJXMgYnV0IHNwZWNpZmllZCB0eXBlIHdhcyAoJXMpIiwKKwkJCQlwYXRoLCBzaGExX3RvX2hleChzaGExKSwgdHlwZW5hbWUob2JqX3R5cGUpLCB0eXBlbmFtZShtb2RlX3R5cGUpKTsKKwkJfQorCX0KKworCWFwcGVuZF90b190cmVlKG1vZGUsIHNoYTEsIHBhdGgpOworfQorCitpbnQgY21kX21rdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwlpbnQgYWxsb3dfbWlzc2luZyA9IDA7CisJaW50IGlzX2JhdGNoX21vZGUgPSAwOworCWludCBnb3RfZW9mID0gMDsKKworCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uW10gPSB7CisJCU9QVF9TRVRfSU5UKCd6JywgTlVMTCwgJmxpbmVfdGVybWluYXRpb24sIE5fKCJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIpLCAnXDAnKSwKKwkJT1BUX1NFVF9JTlQoIDAgLCAibWlzc2luZyIsICZhbGxvd19taXNzaW5nLCBOXygiYWxsb3cgbWlzc2luZyBvYmplY3RzIiksIDEpLAorCQlPUFRfU0VUX0lOVCggMCAsICJiYXRjaCIsICZpc19iYXRjaF9tb2RlLCBOXygiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIiksIDEpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYWMgPSBwYXJzZV9vcHRpb25zKGFjLCBhdiwgcHJlZml4LCBvcHRpb24sIG1rdHJlZV91c2FnZSwgMCk7CisKKwl3aGlsZSAoIWdvdF9lb2YpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmIChzdHJidWZfZ2V0bGluZSgmc2IsIHN0ZGluLCBsaW5lX3Rlcm1pbmF0aW9uKSA9PSBFT0YpIHsKKwkJCQlnb3RfZW9mID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzYi5idWZbMF0gPT0gJ1wwJykgeworCQkJCS8qIGVtcHR5IGxpbmVzIGRlbm90ZSB0cmVlIGJvdW5kYXJpZXMgaW4gYmF0Y2ggbW9kZSAqLworCQkJCWlmIChpc19iYXRjaF9tb2RlKQorCQkJCQlicmVhazsKKwkJCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogKGJsYW5rIGxpbmUgb25seSB2YWxpZCBpbiBiYXRjaCBtb2RlKSIpOworCQkJfQorCQkJbWt0cmVlX2xpbmUoc2IuYnVmLCBzYi5sZW4sIGxpbmVfdGVybWluYXRpb24sIGFsbG93X21pc3NpbmcpOworCQl9CisJCWlmIChpc19iYXRjaF9tb2RlICYmIGdvdF9lb2YgJiYgdXNlZCA8IDEpIHsKKwkJCS8qCisJCQkgKiBFeGVjdXRpb24gZ2V0cyBoZXJlIGlmIHRoZSBsYXN0IHRyZWUgZW50cnkgaXMgdGVybWluYXRlZCB3aXRoIGEKKwkJCSAqIG5ldy1saW5lLiAgVGhlIGZpbmFsIG5ldy1saW5lIGhhcyBiZWVuIG1hZGUgb3B0aW9uYWwgdG8gYmUKKwkJCSAqIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3JpZ2luYWwgbm9uLWJhdGNoIGJlaGF2aW91ciBvZiBta3RyZWUuCisJCQkgKi8KKwkJCTsgLyogc2tpcCBjcmVhdGluZyBhbiBlbXB0eSB0cmVlICovCisJCX0gZWxzZSB7CisJCQl3cml0ZV90cmVlKHNoYTEpOworCQkJcHV0cyhzaGExX3RvX2hleChzaGExKSk7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfQorCQl1c2VkPTA7IC8qIHJlc2V0IHRyZWUgZW50cnkgYnVmZmVyIGZvciByZS11c2UgaW4gYmF0Y2ggbW9kZSAqLworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL212LmMgYi9idWlsdGluL212LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ZmVjOQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbXYuYwpAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqICJnaXQgbXYiIGJ1aWx0aW4gY29tbWFuZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBKb2hhbm5lcyBTY2hpbmRlbGluCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9tdl91c2FnZVtdID0geworCU5fKCJnaXQgbXYgW29wdGlvbnNdIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqKmNvcHlfcGF0aHNwZWMoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICoqcGF0aHNwZWMsCisJCQkJICBpbnQgY291bnQsIGludCBiYXNlX25hbWUpCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqKnJlc3VsdCA9IHhtYWxsb2MoKGNvdW50ICsgMSkgKiBzaXplb2YoY29uc3QgY2hhciAqKSk7CisJbWVtY3B5KHJlc3VsdCwgcGF0aHNwZWMsIGNvdW50ICogc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworCXJlc3VsdFtjb3VudF0gPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWludCBsZW5ndGggPSBzdHJsZW4ocmVzdWx0W2ldKTsKKwkJaW50IHRvX2NvcHkgPSBsZW5ndGg7CisJCXdoaWxlICh0b19jb3B5ID4gMCAmJiBpc19kaXJfc2VwKHJlc3VsdFtpXVt0b19jb3B5IC0gMV0pKQorCQkJdG9fY29weS0tOworCQlpZiAodG9fY29weSAhPSBsZW5ndGggfHwgYmFzZV9uYW1lKSB7CisJCQljaGFyICppdCA9IHhtZW1kdXB6KHJlc3VsdFtpXSwgdG9fY29weSk7CisJCQlpZiAoYmFzZV9uYW1lKSB7CisJCQkJcmVzdWx0W2ldID0geHN0cmR1cChiYXNlbmFtZShpdCkpOworCQkJCWZyZWUoaXQpOworCQkJfSBlbHNlCisJCQkJcmVzdWx0W2ldID0gaXQ7CisJCX0KKwl9CisJcmV0dXJuIGdldF9wYXRoc3BlYyhwcmVmaXgsIHJlc3VsdCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICphZGRfc2xhc2goY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgbGVuID0gc3RybGVuKHBhdGgpOworCWlmIChwYXRoW2xlbiAtIDFdICE9ICcvJykgeworCQljaGFyICp3aXRoX3NsYXNoID0geG1hbGxvYyhsZW4gKyAyKTsKKwkJbWVtY3B5KHdpdGhfc2xhc2gsIHBhdGgsIGxlbik7CisJCXdpdGhfc2xhc2hbbGVuKytdID0gJy8nOworCQl3aXRoX3NsYXNoW2xlbl0gPSAwOworCQlyZXR1cm4gd2l0aF9zbGFzaDsKKwl9CisJcmV0dXJuIHBhdGg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZTsKKworaW50IGNtZF9tdihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgbmV3ZmQ7CisJaW50IHZlcmJvc2UgPSAwLCBzaG93X29ubHkgPSAwLCBmb3JjZSA9IDAsIGlnbm9yZV9lcnJvcnMgPSAwOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9tdl9vcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5LCBOXygiZHJ5IHJ1biIpKSwKKwkJT1BUX19GT1JDRSgmZm9yY2UsIE5fKCJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiKSksCisJCU9QVF9CT09MRUFOKCdrJywgTlVMTCwgJmlnbm9yZV9lcnJvcnMsIE5fKCJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIpKSwKKwkJT1BUX0VORCgpLAorCX07CisJY29uc3QgY2hhciAqKnNvdXJjZSwgKipkZXN0aW5hdGlvbiwgKipkZXN0X3BhdGg7CisJZW51bSB1cGRhdGVfbW9kZSB7IEJPVEggPSAwLCBXT1JLSU5HX0RJUkVDVE9SWSwgSU5ERVggfSAqbW9kZXM7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHN0cmluZ19saXN0IHNyY19mb3JfZHN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9tdl9vcHRpb25zLAorCQkJICAgICBidWlsdGluX212X3VzYWdlLCAwKTsKKwlpZiAoLS1hcmdjIDwgMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fbXZfdXNhZ2UsIGJ1aWx0aW5fbXZfb3B0aW9ucyk7CisKKwluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDEpOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJc291cmNlID0gY29weV9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YsIGFyZ2MsIDApOworCW1vZGVzID0geGNhbGxvYyhhcmdjLCBzaXplb2YoZW51bSB1cGRhdGVfbW9kZSkpOworCWRlc3RfcGF0aCA9IGNvcHlfcGF0aHNwZWMocHJlZml4LCBhcmd2ICsgYXJnYywgMSwgMCk7CisKKwlpZiAoZGVzdF9wYXRoWzBdWzBdID09ICdcMCcpCisJCS8qIHNwZWNpYWwgY2FzZTogIi4iIHdhcyBub3JtYWxpemVkIHRvICIiICovCisJCWRlc3RpbmF0aW9uID0gY29weV9wYXRoc3BlYyhkZXN0X3BhdGhbMF0sIGFyZ3YsIGFyZ2MsIDEpOworCWVsc2UgaWYgKCFsc3RhdChkZXN0X3BhdGhbMF0sICZzdCkgJiYKKwkJCVNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJZGVzdF9wYXRoWzBdID0gYWRkX3NsYXNoKGRlc3RfcGF0aFswXSk7CisJCWRlc3RpbmF0aW9uID0gY29weV9wYXRoc3BlYyhkZXN0X3BhdGhbMF0sIGFyZ3YsIGFyZ2MsIDEpOworCX0gZWxzZSB7CisJCWlmIChhcmdjICE9IDEpCisJCQlkaWUoImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IiwgZGVzdF9wYXRoWzBdKTsKKwkJZGVzdGluYXRpb24gPSBkZXN0X3BhdGg7CisJfQorCisJLyogQ2hlY2tpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnNyYyA9IHNvdXJjZVtpXSwgKmRzdCA9IGRlc3RpbmF0aW9uW2ldOworCQlpbnQgbGVuZ3RoLCBzcmNfaXNfZGlyOworCQljb25zdCBjaGFyICpiYWQgPSBOVUxMOworCisJCWlmIChzaG93X29ubHkpCisJCQlwcmludGYoXygiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIiksIHNyYywgZHN0KTsKKworCQlsZW5ndGggPSBzdHJsZW4oc3JjKTsKKwkJaWYgKGxzdGF0KHNyYywgJnN0KSA8IDApCisJCQliYWQgPSBfKCJiYWQgc291cmNlIik7CisJCWVsc2UgaWYgKCFzdHJuY21wKHNyYywgZHN0LCBsZW5ndGgpICYmCisJCQkJKGRzdFtsZW5ndGhdID09IDAgfHwgZHN0W2xlbmd0aF0gPT0gJy8nKSkgeworCQkJYmFkID0gXygiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIpOworCQl9IGVsc2UgaWYgKChzcmNfaXNfZGlyID0gU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQkmJiBsc3RhdChkc3QsICZzdCkgPT0gMCkKKwkJCWJhZCA9IF8oImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiKTsKKwkJZWxzZSBpZiAoc3JjX2lzX2RpcikgeworCQkJY29uc3QgY2hhciAqc3JjX3dfc2xhc2ggPSBhZGRfc2xhc2goc3JjKTsKKwkJCWludCBsZW5fd19zbGFzaCA9IGxlbmd0aCArIDE7CisJCQlpbnQgZmlyc3QsIGxhc3Q7CisKKwkJCW1vZGVzW2ldID0gV09SS0lOR19ESVJFQ1RPUlk7CisKKwkJCWZpcnN0ID0gY2FjaGVfbmFtZV9wb3Moc3JjX3dfc2xhc2gsIGxlbl93X3NsYXNoKTsKKwkJCWlmIChmaXJzdCA+PSAwKQorCQkJCWRpZSAoXygiSHVoPyAlLipzIGlzIGluIGluZGV4PyIpLAorCQkJCQkJbGVuX3dfc2xhc2gsIHNyY193X3NsYXNoKTsKKworCQkJZmlyc3QgPSAtMSAtIGZpcnN0OworCQkJZm9yIChsYXN0ID0gZmlyc3Q7IGxhc3QgPCBhY3RpdmVfbnI7IGxhc3QrKykgeworCQkJCWNvbnN0IGNoYXIgKnBhdGggPSBhY3RpdmVfY2FjaGVbbGFzdF0tPm5hbWU7CisJCQkJaWYgKHN0cm5jbXAocGF0aCwgc3JjX3dfc2xhc2gsIGxlbl93X3NsYXNoKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlmcmVlKChjaGFyICopc3JjX3dfc2xhc2gpOworCisJCQlpZiAobGFzdCAtIGZpcnN0IDwgMSkKKwkJCQliYWQgPSBfKCJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5Iik7CisJCQllbHNlIHsKKwkJCQlpbnQgaiwgZHN0X2xlbjsKKworCQkJCWlmIChsYXN0IC0gZmlyc3QgPiAwKSB7CisJCQkJCXNvdXJjZSA9IHhyZWFsbG9jKHNvdXJjZSwKKwkJCQkJCQkoYXJnYyArIGxhc3QgLSBmaXJzdCkKKwkJCQkJCQkqIHNpemVvZihjaGFyICopKTsKKwkJCQkJZGVzdGluYXRpb24gPSB4cmVhbGxvYyhkZXN0aW5hdGlvbiwKKwkJCQkJCQkoYXJnYyArIGxhc3QgLSBmaXJzdCkKKwkJCQkJCQkqIHNpemVvZihjaGFyICopKTsKKwkJCQkJbW9kZXMgPSB4cmVhbGxvYyhtb2RlcywKKwkJCQkJCQkoYXJnYyArIGxhc3QgLSBmaXJzdCkKKwkJCQkJCQkqIHNpemVvZihlbnVtIHVwZGF0ZV9tb2RlKSk7CisJCQkJfQorCisJCQkJZHN0ID0gYWRkX3NsYXNoKGRzdCk7CisJCQkJZHN0X2xlbiA9IHN0cmxlbihkc3QpOworCisJCQkJZm9yIChqID0gMDsgaiA8IGxhc3QgLSBmaXJzdDsgaisrKSB7CisJCQkJCWNvbnN0IGNoYXIgKnBhdGggPQorCQkJCQkJYWN0aXZlX2NhY2hlW2ZpcnN0ICsgal0tPm5hbWU7CisJCQkJCXNvdXJjZVthcmdjICsgal0gPSBwYXRoOworCQkJCQlkZXN0aW5hdGlvblthcmdjICsgal0gPQorCQkJCQkJcHJlZml4X3BhdGgoZHN0LCBkc3RfbGVuLAorCQkJCQkJCXBhdGggKyBsZW5ndGggKyAxKTsKKwkJCQkJbW9kZXNbYXJnYyArIGpdID0gSU5ERVg7CisJCQkJfQorCQkJCWFyZ2MgKz0gbGFzdCAtIGZpcnN0OworCQkJfQorCQl9IGVsc2UgaWYgKGNhY2hlX25hbWVfcG9zKHNyYywgbGVuZ3RoKSA8IDApCisJCQliYWQgPSBfKCJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIik7CisJCWVsc2UgaWYgKGxzdGF0KGRzdCwgJnN0KSA9PSAwKSB7CisJCQliYWQgPSBfKCJkZXN0aW5hdGlvbiBleGlzdHMiKTsKKwkJCWlmIChmb3JjZSkgeworCQkJCS8qCisJCQkJICogb25seSBmaWxlcyBjYW4gb3ZlcndyaXRlIGVhY2ggb3RoZXI6CisJCQkJICogY2hlY2sgYm90aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisJCQkJICovCisJCQkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkgfHwgU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJCQlpZiAodmVyYm9zZSkKKwkJCQkJCXdhcm5pbmcoXygib3ZlcndyaXRpbmcgJyVzJyIpLCBkc3QpOworCQkJCQliYWQgPSBOVUxMOworCQkJCX0gZWxzZQorCQkJCQliYWQgPSBfKCJDYW5ub3Qgb3ZlcndyaXRlIik7CisJCQl9CisJCX0gZWxzZSBpZiAoc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmc3JjX2Zvcl9kc3QsIGRzdCkpCisJCQliYWQgPSBfKCJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiKTsKKwkJZWxzZQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZzcmNfZm9yX2RzdCwgZHN0KTsKKworCQlpZiAoYmFkKSB7CisJCQlpZiAoaWdub3JlX2Vycm9ycykgeworCQkJCWlmICgtLWFyZ2MgPiAwKSB7CisJCQkJCW1lbW1vdmUoc291cmNlICsgaSwgc291cmNlICsgaSArIDEsCisJCQkJCQkoYXJnYyAtIGkpICogc2l6ZW9mKGNoYXIgKikpOworCQkJCQltZW1tb3ZlKGRlc3RpbmF0aW9uICsgaSwKKwkJCQkJCWRlc3RpbmF0aW9uICsgaSArIDEsCisJCQkJCQkoYXJnYyAtIGkpICogc2l6ZW9mKGNoYXIgKikpOworCQkJCQlpLS07CisJCQkJfQorCQkJfSBlbHNlCisJCQkJZGllIChfKCIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIpLAorCQkJCSAgICAgYmFkLCBzcmMsIGRzdCk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnNyYyA9IHNvdXJjZVtpXSwgKmRzdCA9IGRlc3RpbmF0aW9uW2ldOworCQllbnVtIHVwZGF0ZV9tb2RlIG1vZGUgPSBtb2Rlc1tpXTsKKwkJaW50IHBvczsKKwkJaWYgKHNob3dfb25seSB8fCB2ZXJib3NlKQorCQkJcHJpbnRmKF8oIlJlbmFtaW5nICVzIHRvICVzXG4iKSwgc3JjLCBkc3QpOworCQlpZiAoIXNob3dfb25seSAmJiBtb2RlICE9IElOREVYICYmCisJCQkJcmVuYW1lKHNyYywgZHN0KSA8IDAgJiYgIWlnbm9yZV9lcnJvcnMpCisJCQlkaWVfZXJybm8gKF8oInJlbmFtaW5nICclcycgZmFpbGVkIiksIHNyYyk7CisKKwkJaWYgKG1vZGUgPT0gV09SS0lOR19ESVJFQ1RPUlkpCisJCQljb250aW51ZTsKKworCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhzcmMsIHN0cmxlbihzcmMpKTsKKwkJYXNzZXJ0KHBvcyA+PSAwKTsKKwkJaWYgKCFzaG93X29ubHkpCisJCQlyZW5hbWVfY2FjaGVfZW50cnlfYXQocG9zLCBkc3QpOworCX0KKworCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCkgeworCQlpZiAod3JpdGVfY2FjaGUobmV3ZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAorCQkgICAgY29tbWl0X2xvY2tlZF9pbmRleCgmbG9ja19maWxlKSkKKwkJCWRpZShfKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL25hbWUtcmV2LmMgYi9idWlsdGluL25hbWUtcmV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIzODI0NwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbmFtZS1yZXYuYwpAQCAtMCwwICsxLDMwNyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKKyNkZWZpbmUgQ1VUT0ZGX0RBVEVfU0xPUCA4NjQwMCAvKiBvbmUgZGF5ICovCisKK3R5cGVkZWYgc3RydWN0IHJldl9uYW1lIHsKKwljb25zdCBjaGFyICp0aXBfbmFtZTsKKwlpbnQgZ2VuZXJhdGlvbjsKKwlpbnQgZGlzdGFuY2U7Cit9IHJldl9uYW1lOworCitzdGF0aWMgbG9uZyBjdXRvZmYgPSBMT05HX01BWDsKKworLyogSG93IG1hbnkgZ2VuZXJhdGlvbnMgYXJlIG1heGltYWxseSBwcmVmZXJyZWQgb3ZlciBfb25lXyBtZXJnZSB0cmF2ZXJzYWw/ICovCisjZGVmaW5lIE1FUkdFX1RSQVZFUlNBTF9XRUlHSFQgNjU1MzUKKworc3RhdGljIHZvaWQgbmFtZV9yZXYoc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQljb25zdCBjaGFyICp0aXBfbmFtZSwgaW50IGdlbmVyYXRpb24sIGludCBkaXN0YW5jZSwKKwkJaW50IGRlcmVmKQoreworCXN0cnVjdCByZXZfbmFtZSAqbmFtZSA9IChzdHJ1Y3QgcmV2X25hbWUgKiljb21taXQtPnV0aWw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCWludCBwYXJlbnRfbnVtYmVyID0gMTsKKworCWlmICghY29tbWl0LT5vYmplY3QucGFyc2VkKQorCQlwYXJzZV9jb21taXQoY29tbWl0KTsKKworCWlmIChjb21taXQtPmRhdGUgPCBjdXRvZmYpCisJCXJldHVybjsKKworCWlmIChkZXJlZikgeworCQljaGFyICpuZXdfbmFtZSA9IHhtYWxsb2Moc3RybGVuKHRpcF9uYW1lKSszKTsKKwkJc3RyY3B5KG5ld19uYW1lLCB0aXBfbmFtZSk7CisJCXN0cmNhdChuZXdfbmFtZSwgIl4wIik7CisJCXRpcF9uYW1lID0gbmV3X25hbWU7CisKKwkJaWYgKGdlbmVyYXRpb24pCisJCQlkaWUoImdlbmVyYXRpb246ICVkLCBidXQgZGVyZWY/IiwgZ2VuZXJhdGlvbik7CisJfQorCisJaWYgKG5hbWUgPT0gTlVMTCkgeworCQluYW1lID0geG1hbGxvYyhzaXplb2YocmV2X25hbWUpKTsKKwkJY29tbWl0LT51dGlsID0gbmFtZTsKKwkJZ290byBjb3B5X2RhdGE7CisJfSBlbHNlIGlmIChuYW1lLT5kaXN0YW5jZSA+IGRpc3RhbmNlKSB7Citjb3B5X2RhdGE6CisJCW5hbWUtPnRpcF9uYW1lID0gdGlwX25hbWU7CisJCW5hbWUtPmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOworCQluYW1lLT5kaXN0YW5jZSA9IGRpc3RhbmNlOworCX0gZWxzZQorCQlyZXR1cm47CisKKwlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCQlwYXJlbnRzOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQsIHBhcmVudF9udW1iZXIrKykgeworCQlpZiAocGFyZW50X251bWJlciA+IDEpIHsKKwkJCWludCBsZW4gPSBzdHJsZW4odGlwX25hbWUpOworCQkJY2hhciAqbmV3X25hbWUgPSB4bWFsbG9jKGxlbiArCisJCQkJMSArIGRlY2ltYWxfbGVuZ3RoKGdlbmVyYXRpb24pICsgIC8qIH48bj4gKi8KKwkJCQkxICsgMiArCQkJCSAgLyogXk5OICovCisJCQkJMSk7CisKKwkJCWlmIChsZW4gPiAyICYmICFzdHJjbXAodGlwX25hbWUgKyBsZW4gLSAyLCAiXjAiKSkKKwkJCQlsZW4gLT0gMjsKKwkJCWlmIChnZW5lcmF0aW9uID4gMCkKKwkJCQlzcHJpbnRmKG5ld19uYW1lLCAiJS4qc34lZF4lZCIsIGxlbiwgdGlwX25hbWUsCisJCQkJCQlnZW5lcmF0aW9uLCBwYXJlbnRfbnVtYmVyKTsKKwkJCWVsc2UKKwkJCQlzcHJpbnRmKG5ld19uYW1lLCAiJS4qc14lZCIsIGxlbiwgdGlwX25hbWUsCisJCQkJCQlwYXJlbnRfbnVtYmVyKTsKKworCQkJbmFtZV9yZXYocGFyZW50cy0+aXRlbSwgbmV3X25hbWUsIDAsCisJCQkJZGlzdGFuY2UgKyBNRVJHRV9UUkFWRVJTQUxfV0VJR0hULCAwKTsKKwkJfSBlbHNlIHsKKwkJCW5hbWVfcmV2KHBhcmVudHMtPml0ZW0sIHRpcF9uYW1lLCBnZW5lcmF0aW9uICsgMSwKKwkJCQlkaXN0YW5jZSArIDEsIDApOworCQl9CisJfQorfQorCitzdHJ1Y3QgbmFtZV9yZWZfZGF0YSB7CisJaW50IHRhZ3Nfb25seTsKKwlpbnQgbmFtZV9vbmx5OworCWNvbnN0IGNoYXIgKnJlZl9maWx0ZXI7Cit9OworCitzdGF0aWMgaW50IG5hbWVfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCXN0cnVjdCBuYW1lX3JlZl9kYXRhICpkYXRhID0gY2JfZGF0YTsKKwlpbnQgZGVyZWYgPSAwOworCisJaWYgKGRhdGEtPnRhZ3Nfb25seSAmJiBwcmVmaXhjbXAocGF0aCwgInJlZnMvdGFncy8iKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGF0YS0+cmVmX2ZpbHRlciAmJiBmbm1hdGNoKGRhdGEtPnJlZl9maWx0ZXIsIHBhdGgsIDApKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChvICYmIG8tPnR5cGUgPT0gT0JKX1RBRykgeworCQlzdHJ1Y3QgdGFnICp0ID0gKHN0cnVjdCB0YWcgKikgbzsKKwkJaWYgKCF0LT50YWdnZWQpCisJCQlicmVhazsgLyogYnJva2VuIHJlcG9zaXRvcnkgKi8KKwkJbyA9IHBhcnNlX29iamVjdCh0LT50YWdnZWQtPnNoYTEpOworCQlkZXJlZiA9IDE7CisJfQorCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisKKwkJaWYgKCFwcmVmaXhjbXAocGF0aCwgInJlZnMvaGVhZHMvIikpCisJCQlwYXRoID0gcGF0aCArIDExOworCQllbHNlIGlmIChkYXRhLT50YWdzX29ubHkKKwkJICAgICYmIGRhdGEtPm5hbWVfb25seQorCQkgICAgJiYgIXByZWZpeGNtcChwYXRoLCAicmVmcy90YWdzLyIpKQorCQkJcGF0aCA9IHBhdGggKyAxMDsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChwYXRoLCAicmVmcy8iKSkKKwkJCXBhdGggPSBwYXRoICsgNTsKKworCQluYW1lX3Jldihjb21taXQsIHhzdHJkdXAocGF0aCksIDAsIDAsIGRlcmVmKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHJldHVybnMgYSBzdGF0aWMgYnVmZmVyICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3Jldl9uYW1lKGNvbnN0IHN0cnVjdCBvYmplY3QgKm8pCit7CisJc3RhdGljIGNoYXIgYnVmZmVyWzEwMjRdOworCXN0cnVjdCByZXZfbmFtZSAqbjsKKwlzdHJ1Y3QgY29tbWl0ICpjOworCisJaWYgKG8tPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIE5VTEw7CisJYyA9IChzdHJ1Y3QgY29tbWl0ICopIG87CisJbiA9IGMtPnV0aWw7CisJaWYgKCFuKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghbi0+Z2VuZXJhdGlvbikKKwkJcmV0dXJuIG4tPnRpcF9uYW1lOworCWVsc2UgeworCQlpbnQgbGVuID0gc3RybGVuKG4tPnRpcF9uYW1lKTsKKwkJaWYgKGxlbiA+IDIgJiYgIXN0cmNtcChuLT50aXBfbmFtZSArIGxlbiAtIDIsICJeMCIpKQorCQkJbGVuIC09IDI7CisJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlLipzfiVkIiwgbGVuLCBuLT50aXBfbmFtZSwKKwkJCQluLT5nZW5lcmF0aW9uKTsKKworCQlyZXR1cm4gYnVmZmVyOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19uYW1lKGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaiwKKwkJICAgICAgY29uc3QgY2hhciAqY2FsbGVyX25hbWUsCisJCSAgICAgIGludCBhbHdheXMsIGludCBhbGxvd191bmRlZmluZWQsIGludCBuYW1lX29ubHkpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gb2JqLT5zaGExOworCisJaWYgKCFuYW1lX29ubHkpCisJCXByaW50ZigiJXMgIiwgY2FsbGVyX25hbWUgPyBjYWxsZXJfbmFtZSA6IHNoYTFfdG9faGV4KHNoYTEpKTsKKwluYW1lID0gZ2V0X3Jldl9uYW1lKG9iaik7CisJaWYgKG5hbWUpCisJCXByaW50ZigiJXNcbiIsIG5hbWUpOworCWVsc2UgaWYgKGFsbG93X3VuZGVmaW5lZCkKKwkJcHJpbnRmKCJ1bmRlZmluZWRcbiIpOworCWVsc2UgaWYgKGFsd2F5cykKKwkJcHJpbnRmKCIlc1xuIiwgZmluZF91bmlxdWVfYWJicmV2KHNoYTEsIERFRkFVTFRfQUJCUkVWKSk7CisJZWxzZQorCQlkaWUoImNhbm5vdCBkZXNjcmliZSAnJXMnIiwgc2hhMV90b19oZXgoc2hhMSkpOworfQorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IG5hbWVfcmV2X3VzYWdlW10gPSB7CisJTl8oImdpdCBuYW1lLXJldiBbb3B0aW9uc10gPGNvbW1pdD4uLi4iKSwKKwlOXygiZ2l0IG5hbWUtcmV2IFtvcHRpb25zXSAtLWFsbCIpLAorCU5fKCJnaXQgbmFtZS1yZXYgW29wdGlvbnNdIC0tc3RkaW4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgdm9pZCBuYW1lX3Jldl9saW5lKGNoYXIgKnAsIHN0cnVjdCBuYW1lX3JlZl9kYXRhICpkYXRhKQoreworCWludCBmb3J0eSA9IDA7CisJY2hhciAqcF9zdGFydDsKKwlmb3IgKHBfc3RhcnQgPSBwOyAqcDsgcCsrKSB7CisjZGVmaW5lIGlzaGV4KHgpIChpc2RpZ2l0KCh4KSkgfHwgKCh4KSA+PSAnYScgJiYgKHgpIDw9ICdmJykpCisJCWlmICghaXNoZXgoKnApKQorCQkJZm9ydHkgPSAwOworCQllbHNlIGlmICgrK2ZvcnR5ID09IDQwICYmCisJCQkgIWlzaGV4KCoocCsxKSkpIHsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVs0MF07CisJCQljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKwkJCWNoYXIgYyA9ICoocCsxKTsKKwkJCWludCBwX2xlbiA9IHAgLSBwX3N0YXJ0ICsgMTsKKworCQkJZm9ydHkgPSAwOworCisJCQkqKHArMSkgPSAwOworCQkJaWYgKCFnZXRfc2hhMShwIC0gMzksIHNoYTEpKSB7CisJCQkJc3RydWN0IG9iamVjdCAqbyA9CisJCQkJCWxvb2t1cF9vYmplY3Qoc2hhMSk7CisJCQkJaWYgKG8pCisJCQkJCW5hbWUgPSBnZXRfcmV2X25hbWUobyk7CisJCQl9CisJCQkqKHArMSkgPSBjOworCisJCQlpZiAoIW5hbWUpCisJCQkJY29udGludWU7CisKKwkJCWlmIChkYXRhLT5uYW1lX29ubHkpCisJCQkJcHJpbnRmKCIlLipzJXMiLCBwX2xlbiAtIDQwLCBwX3N0YXJ0LCBuYW1lKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiUuKnMgKCVzKSIsIHBfbGVuLCBwX3N0YXJ0LCBuYW1lKTsKKwkJCXBfc3RhcnQgPSBwICsgMTsKKwkJfQorCX0KKworCS8qIGZsdXNoICovCisJaWYgKHBfc3RhcnQgIT0gcCkKKwkJZndyaXRlKHBfc3RhcnQsIHAgLSBwX3N0YXJ0LCAxLCBzdGRvdXQpOworfQorCitpbnQgY21kX25hbWVfcmV2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvYmplY3RfYXJyYXkgcmV2cyA9IE9CSkVDVF9BUlJBWV9JTklUOworCWludCBhbGwgPSAwLCB0cmFuc2Zvcm1fc3RkaW4gPSAwLCBhbGxvd191bmRlZmluZWQgPSAxLCBhbHdheXMgPSAwOworCXN0cnVjdCBuYW1lX3JlZl9kYXRhIGRhdGEgPSB7IDAsIDAsIE5VTEwgfTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX0JPT0xFQU4oMCwgIm5hbWUtb25seSIsICZkYXRhLm5hbWVfb25seSwgTl8oInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgInRhZ3MiLCAmZGF0YS50YWdzX29ubHksIE5fKCJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiKSksCisJCU9QVF9TVFJJTkcoMCwgInJlZnMiLCAmZGF0YS5yZWZfZmlsdGVyLCBOXygicGF0dGVybiIpLAorCQkJCSAgIE5fKCJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIpKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0JPT0xFQU4oMCwgImFsbCIsICZhbGwsIE5fKCJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIikpLAorCQlPUFRfQk9PTEVBTigwLCAic3RkaW4iLCAmdHJhbnNmb3JtX3N0ZGluLCBOXygicmVhZCBmcm9tIHN0ZGluIikpLAorCQlPUFRfQk9PTEVBTigwLCAidW5kZWZpbmVkIiwgJmFsbG93X3VuZGVmaW5lZCwgTl8oImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIikpLAorCQlPUFRfQk9PTEVBTigwLCAiYWx3YXlzIiwgICAgICZhbHdheXMsCisJCQkgICBOXygic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdHMsIG5hbWVfcmV2X3VzYWdlLCAwKTsKKwlpZiAoISFhbGwgKyAhIXRyYW5zZm9ybV9zdGRpbiArICEhYXJnYyA+IDEpIHsKKwkJZXJyb3IoIlNwZWNpZnkgZWl0aGVyIGEgbGlzdCwgb3IgLS1hbGwsIG5vdCBib3RoISIpOworCQl1c2FnZV93aXRoX29wdGlvbnMobmFtZV9yZXZfdXNhZ2UsIG9wdHMpOworCX0KKwlpZiAoYWxsIHx8IHRyYW5zZm9ybV9zdGRpbikKKwkJY3V0b2ZmID0gMDsKKworCWZvciAoOyBhcmdjOyBhcmdjLS0sIGFyZ3YrKykgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlzdHJ1Y3Qgb2JqZWN0ICpvOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwkJaWYgKGdldF9zaGExKCphcmd2LCBzaGExKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZ2V0IHNoYTEgZm9yICVzLiBTa2lwcGluZy5cbiIsCisJCQkJCSphcmd2KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qoc2hhMSksICphcmd2LCAwKTsKKwkJaWYgKCFvIHx8IG8tPnR5cGUgIT0gT0JKX0NPTU1JVCkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZ2V0IGNvbW1pdCBmb3IgJXMuIFNraXBwaW5nLlxuIiwKKwkJCQkJKmFyZ3YpOworCQkJY29udGludWU7CisJCX0KKworCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCWlmIChjdXRvZmYgPiBjb21taXQtPmRhdGUpCisJCQljdXRvZmYgPSBjb21taXQtPmRhdGU7CisJCWFkZF9vYmplY3RfYXJyYXkoKHN0cnVjdCBvYmplY3QgKiljb21taXQsICphcmd2LCAmcmV2cyk7CisJfQorCisJaWYgKGN1dG9mZikKKwkJY3V0b2ZmID0gY3V0b2ZmIC0gQ1VUT0ZGX0RBVEVfU0xPUDsKKwlmb3JfZWFjaF9yZWYobmFtZV9yZWYsICZkYXRhKTsKKworCWlmICh0cmFuc2Zvcm1fc3RkaW4pIHsKKwkJY2hhciBidWZmZXJbMjA0OF07CisKKwkJd2hpbGUgKCFmZW9mKHN0ZGluKSkgeworCQkJY2hhciAqcCA9IGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKTsKKwkJCWlmICghcCkKKwkJCQlicmVhazsKKwkJCW5hbWVfcmV2X2xpbmUocCwgJmRhdGEpOworCQl9CisJfSBlbHNlIGlmIChhbGwpIHsKKwkJaW50IGksIG1heDsKKworCQltYXggPSBnZXRfbWF4X29iamVjdF9pbmRleCgpOworCQlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iaiA9IGdldF9pbmRleGVkX29iamVjdChpKTsKKwkJCWlmICghb2JqIHx8IG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJCWNvbnRpbnVlOworCQkJc2hvd19uYW1lKG9iaiwgTlVMTCwKKwkJCQkgIGFsd2F5cywgYWxsb3dfdW5kZWZpbmVkLCBkYXRhLm5hbWVfb25seSk7CisJCX0KKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHJldnMubnI7IGkrKykKKwkJCXNob3dfbmFtZShyZXZzLm9iamVjdHNbaV0uaXRlbSwgcmV2cy5vYmplY3RzW2ldLm5hbWUsCisJCQkJICBhbHdheXMsIGFsbG93X3VuZGVmaW5lZCwgZGF0YS5uYW1lX29ubHkpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ub3Rlcy5jIGIvYnVpbHRpbi9ub3Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MzQ1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL25vdGVzLmMKQEAgLTAsMCArMSwxMTExIEBACisvKgorICogQnVpbHRpbiAiZ2l0IG5vdGVzIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBKb2hhbiBIZXJsYW5kIDxqb2hhbkBoZXJsYW5kLm5ldD4KKyAqCisgKiBCYXNlZCBvbiBnaXQtbm90ZXMuc2ggYnkgSm9oYW5uZXMgU2NoaW5kZWxpbiwKKyAqIGFuZCBidWlsdGluLXRhZy5jIGJ5IEtyaXN0aWFuIEjDuGdzYmVyZyBhbmQgQ2FybG9zIFJpY2EuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibm90ZXMtbWVyZ2UuaCIKKworc3RhdGljIHZvaWQgY29tbWl0X25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBjaGFyICptc2cpOworc3RhdGljIGNvbWJpbmVfbm90ZXNfZm4gcGFyc2VfY29tYmluZV9ub3Rlc19mbihjb25zdCBjaGFyICp2KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iKSwKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gYWRkIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGFwcGVuZCBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iKSwKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gZWRpdCBbPG9iamVjdD5dIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIHNob3cgWzxvYmplY3Q+XSIpLAorCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT4gXSA8bm90ZXNfcmVmPiIpLAorCU5fKCJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIiksCisJTl8oImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIpLAorCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIpLAorCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBwcnVuZSBbLW4gfCAtdl0iKSwKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gZ2V0LXJlZiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX2xpc3RfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfYWRkX3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX2NvcHlfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIpLAorCU5fKCJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX2FwcGVuZF91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19lZGl0X3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19zaG93X3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19tZXJnZV91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzX3JlZj4iKSwKKwlOXygiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIiksCisJTl8oImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfcmVtb3ZlX3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX3BydW5lX3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX2dldF9yZWZfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIGdldC1yZWYiKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciBub3RlX3RlbXBsYXRlW10gPQorCSJcbiIKKwkiI1xuIgorCSIjIFdyaXRlL2VkaXQgdGhlIG5vdGVzIGZvciB0aGUgZm9sbG93aW5nIG9iamVjdDpcbiIKKwkiI1xuIjsKKworc3RydWN0IG1zZ19hcmcgeworCWludCBnaXZlbjsKKwlpbnQgdXNlX2VkaXRvcjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKK307CisKK3N0YXRpYyBpbnQgbGlzdF9lYWNoX25vdGUoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGVfc2hhMSwgY2hhciAqbm90ZV9wYXRoLAorCQl2b2lkICpjYl9kYXRhKQoreworCXByaW50ZigiJXMgJXNcbiIsIHNoYTFfdG9faGV4KG5vdGVfc2hhMSksIHNoYTFfdG9faGV4KG9iamVjdF9zaGExKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX25vdGVfZGF0YShpbnQgZmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmIChidWYpIHsKKwkJaWYgKHNpemUpCisJCQl3cml0ZV9vcl9kaWUoZmQsIGJ1Ziwgc2l6ZSk7CisJCWZyZWUoYnVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NvbW1lbnRlZF9vYmplY3QoaW50IGZkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3QpCit7CisJY29uc3QgY2hhciAqc2hvd19hcmdzWzVdID0KKwkJeyJzaG93IiwgIi0tc3RhdCIsICItLW5vLW5vdGVzIiwgc2hhMV90b19oZXgob2JqZWN0KSwgTlVMTH07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3Mgc2hvdzsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCUZJTEUgKnNob3dfb3V0OworCisJLyogSW52b2tlICJnaXQgc2hvdyAtLXN0YXQgLS1uby1ub3RlcyAkb2JqZWN0IiAqLworCW1lbXNldCgmc2hvdywgMCwgc2l6ZW9mKHNob3cpKTsKKwlzaG93LmFyZ3YgPSBzaG93X2FyZ3M7CisJc2hvdy5ub19zdGRpbiA9IDE7CisJc2hvdy5vdXQgPSAtMTsKKwlzaG93LmVyciA9IDA7CisJc2hvdy5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmc2hvdykpCisJCWRpZShfKCJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIpLAorCQkgICAgc2hhMV90b19oZXgob2JqZWN0KSk7CisKKwkvKiBPcGVuIHRoZSBvdXRwdXQgYXMgRklMRSogc28gc3RyYnVmX2dldGxpbmUoKSBjYW4gYmUgdXNlZC4gKi8KKwlzaG93X291dCA9IHhmZG9wZW4oc2hvdy5vdXQsICJyIik7CisJaWYgKHNob3dfb3V0ID09IE5VTEwpCisJCWRpZV9lcnJubyhfKCJjYW4ndCBmZG9wZW4gJ3Nob3cnIG91dHB1dCBmZCIpKTsKKworCS8qIFByZXBlbmQgIiMgIiB0byBlYWNoIG91dHB1dCBsaW5lIGFuZCB3cml0ZSByZXN1bHQgdG8gJ2ZkJyAqLworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzaG93X291dCwgJ1xuJykgIT0gRU9GKSB7CisJCXdyaXRlX29yX2RpZShmZCwgIiMgIiwgMik7CisJCXdyaXRlX29yX2RpZShmZCwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJCXdyaXRlX29yX2RpZShmZCwgIlxuIiwgMSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWlmIChmY2xvc2Uoc2hvd19vdXQpKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIpLAorCQkJICBzaGExX3RvX2hleChvYmplY3QpKTsKKwlpZiAoZmluaXNoX2NvbW1hbmQoJnNob3cpKQorCQlkaWUoXygiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIiksCisJCSAgICBzaGExX3RvX2hleChvYmplY3QpKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX25vdGUoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0LCBzdHJ1Y3QgbXNnX2FyZyAqbXNnLAorCQkJaW50IGFwcGVuZF9vbmx5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpwcmV2LAorCQkJdW5zaWduZWQgY2hhciAqcmVzdWx0KQoreworCWNoYXIgKnBhdGggPSBOVUxMOworCisJaWYgKG1zZy0+dXNlX2VkaXRvciB8fCAhbXNnLT5naXZlbikgeworCQlpbnQgZmQ7CisKKwkJLyogd3JpdGUgdGhlIHRlbXBsYXRlIG1lc3NhZ2UgYmVmb3JlIGVkaXRpbmc6ICovCisJCXBhdGggPSBnaXRfcGF0aGR1cCgiTk9URVNfRURJVE1TRyIpOworCQlmZCA9IG9wZW4ocGF0aCwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgMDYwMCk7CisJCWlmIChmZCA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciKSwgcGF0aCk7CisKKwkJaWYgKG1zZy0+Z2l2ZW4pCisJCQl3cml0ZV9vcl9kaWUoZmQsIG1zZy0+YnVmLmJ1ZiwgbXNnLT5idWYubGVuKTsKKwkJZWxzZSBpZiAocHJldiAmJiAhYXBwZW5kX29ubHkpCisJCQl3cml0ZV9ub3RlX2RhdGEoZmQsIHByZXYpOworCQl3cml0ZV9vcl9kaWUoZmQsIG5vdGVfdGVtcGxhdGUsIHN0cmxlbihub3RlX3RlbXBsYXRlKSk7CisKKwkJd3JpdGVfY29tbWVudGVkX29iamVjdChmZCwgb2JqZWN0KTsKKworCQljbG9zZShmZCk7CisJCXN0cmJ1Zl9yZXNldCgmKG1zZy0+YnVmKSk7CisKKwkJaWYgKGxhdW5jaF9lZGl0b3IocGF0aCwgJihtc2ctPmJ1ZiksIE5VTEwpKSB7CisJCQlkaWUoXygiUGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0iIFwKKwkJCSAgICAiIG9yIC1GIG9wdGlvbiIpKTsKKwkJfQorCQlzdHJpcHNwYWNlKCYobXNnLT5idWYpLCAxKTsKKwl9CisKKwlpZiAocHJldiAmJiBhcHBlbmRfb25seSkgeworCQkvKiBBcHBlbmQgYnVmIHRvIHByZXZpb3VzIG5vdGUgY29udGVudHMgKi8KKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCWNoYXIgKnByZXZfYnVmID0gcmVhZF9zaGExX2ZpbGUocHJldiwgJnR5cGUsICZzaXplKTsKKworCQlzdHJidWZfZ3JvdygmKG1zZy0+YnVmKSwgc2l6ZSArIDEpOworCQlpZiAobXNnLT5idWYubGVuICYmIHByZXZfYnVmICYmIHNpemUpCisJCQlzdHJidWZfaW5zZXJ0KCYobXNnLT5idWYpLCAwLCAiXG4iLCAxKTsKKwkJaWYgKHByZXZfYnVmICYmIHNpemUpCisJCQlzdHJidWZfaW5zZXJ0KCYobXNnLT5idWYpLCAwLCBwcmV2X2J1Ziwgc2l6ZSk7CisJCWZyZWUocHJldl9idWYpOworCX0KKworCWlmICghbXNnLT5idWYubGVuKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIpLAorCQkJc2hhMV90b19oZXgob2JqZWN0KSk7CisJCWhhc2hjbHIocmVzdWx0KTsKKwl9IGVsc2UgeworCQlpZiAod3JpdGVfc2hhMV9maWxlKG1zZy0+YnVmLmJ1ZiwgbXNnLT5idWYubGVuLCBibG9iX3R5cGUsIHJlc3VsdCkpIHsKKwkJCWVycm9yKF8oInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIpKTsKKwkJCWlmIChwYXRoKQorCQkJCWVycm9yKF8oIlRoZSBub3RlIGNvbnRlbnRzIGhhcyBiZWVuIGxlZnQgaW4gJXMiKSwKKwkJCQkgICAgICBwYXRoKTsKKwkJCWV4aXQoMTI4KTsKKwkJfQorCX0KKworCWlmIChwYXRoKSB7CisJCXVubGlua19vcl93YXJuKHBhdGgpOworCQlmcmVlKHBhdGgpOworCX0KK30KKworc3RhdGljIGludCBwYXJzZV9tc2dfYXJnKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IG1zZ19hcmcgKm1zZyA9IG9wdC0+dmFsdWU7CisKKwlzdHJidWZfZ3JvdygmKG1zZy0+YnVmKSwgc3RybGVuKGFyZykgKyAyKTsKKwlpZiAobXNnLT5idWYubGVuKQorCQlzdHJidWZfYWRkY2goJihtc2ctPmJ1ZiksICdcbicpOworCXN0cmJ1Zl9hZGRzdHIoJihtc2ctPmJ1ZiksIGFyZyk7CisJc3RyaXBzcGFjZSgmKG1zZy0+YnVmKSwgMCk7CisKKwltc2ctPmdpdmVuID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9maWxlX2FyZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBtc2dfYXJnICptc2cgPSBvcHQtPnZhbHVlOworCisJaWYgKG1zZy0+YnVmLmxlbikKKwkJc3RyYnVmX2FkZGNoKCYobXNnLT5idWYpLCAnXG4nKTsKKwlpZiAoIXN0cmNtcChhcmcsICItIikpIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkKCYobXNnLT5idWYpLCAwLCAxMDI0KSA8IDApCisJCQlkaWVfZXJybm8oXygiY2Fubm90IHJlYWQgJyVzJyIpLCBhcmcpOworCX0gZWxzZSBpZiAoc3RyYnVmX3JlYWRfZmlsZSgmKG1zZy0+YnVmKSwgYXJnLCAxMDI0KSA8IDApCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciKSwgYXJnKTsKKwlzdHJpcHNwYWNlKCYobXNnLT5idWYpLCAwKTsKKworCW1zZy0+Z2l2ZW4gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3JldXNlX2FyZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBtc2dfYXJnICptc2cgPSBvcHQtPnZhbHVlOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBjaGFyIG9iamVjdFsyMF07CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgbGVuOworCisJaWYgKG1zZy0+YnVmLmxlbikKKwkJc3RyYnVmX2FkZGNoKCYobXNnLT5idWYpLCAnXG4nKTsKKworCWlmIChnZXRfc2hhMShhcmcsIG9iamVjdCkpCisJCWRpZShfKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBhcmcpOworCWlmICghKGJ1ZiA9IHJlYWRfc2hhMV9maWxlKG9iamVjdCwgJnR5cGUsICZsZW4pKSB8fCAhbGVuKSB7CisJCWZyZWUoYnVmKTsKKwkJZGllKF8oIkZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIpLCBhcmcpOzsKKwl9CisJc3RyYnVmX2FkZCgmKG1zZy0+YnVmKSwgYnVmLCBsZW4pOworCWZyZWUoYnVmKTsKKworCW1zZy0+Z2l2ZW4gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3JlZWRpdF9hcmcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgbXNnX2FyZyAqbXNnID0gb3B0LT52YWx1ZTsKKwltc2ctPnVzZV9lZGl0b3IgPSAxOworCXJldHVybiBwYXJzZV9yZXVzZV9hcmcob3B0LCBhcmcsIHVuc2V0KTsKK30KKworc3RhdGljIHZvaWQgY29tbWl0X25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBjaGFyICptc2cpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIGNvbW1pdF9zaGExWzIwXTsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJaWYgKCF0LT5pbml0aWFsaXplZCB8fCAhdC0+cmVmIHx8ICEqdC0+cmVmKQorCQlkaWUoXygiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIikpOworCWlmICghdC0+ZGlydHkpCisJCXJldHVybjsgLyogZG9uJ3QgaGF2ZSB0byBjb21taXQgYW4gdW5jaGFuZ2VkIHRyZWUgKi8KKworCS8qIFByZXBhcmUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlZmxvZyBtZXNzYWdlICovCisJc3RyYnVmX2FkZHN0cigmYnVmLCBtc2cpOworCWlmIChidWYuYnVmW2J1Zi5sZW4gLSAxXSAhPSAnXG4nKQorCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7IC8qIE1ha2Ugc3VyZSBtc2cgZW5kcyB3aXRoIG5ld2xpbmUgKi8KKworCWNyZWF0ZV9ub3Rlc19jb21taXQodCwgTlVMTCwgJmJ1ZiwgY29tbWl0X3NoYTEpOworCXN0cmJ1Zl9pbnNlcnQoJmJ1ZiwgMCwgIm5vdGVzOiAiLCA3KTsgLyogY29tbWl0IG1lc3NhZ2Ugc3RhcnRzIGF0IGluZGV4IDcgKi8KKwl1cGRhdGVfcmVmKGJ1Zi5idWYsIHQtPnJlZiwgY29tbWl0X3NoYTEsIE5VTEwsIDAsIERJRV9PTl9FUlIpOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBjb21iaW5lX25vdGVzX2ZuIHBhcnNlX2NvbWJpbmVfbm90ZXNfZm4oY29uc3QgY2hhciAqdikKK3sKKwlpZiAoIXN0cmNhc2VjbXAodiwgIm92ZXJ3cml0ZSIpKQorCQlyZXR1cm4gY29tYmluZV9ub3Rlc19vdmVyd3JpdGU7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodiwgImlnbm9yZSIpKQorCQlyZXR1cm4gY29tYmluZV9ub3Rlc19pZ25vcmU7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodiwgImNvbmNhdGVuYXRlIikpCisJCXJldHVybiBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKHYsICJjYXRfc29ydF91bmlxIikpCisJCXJldHVybiBjb21iaW5lX25vdGVzX2NhdF9zb3J0X3VuaXE7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBub3Rlc19yZXdyaXRlX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMgPSBjYjsKKwlpZiAoIXByZWZpeGNtcChrLCAibm90ZXMucmV3cml0ZS4iKSAmJiAhc3RyY21wKGsrMTQsIGMtPmNtZCkpIHsKKwkJYy0+ZW5hYmxlZCA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghYy0+bW9kZV9mcm9tX2VudiAmJiAhc3RyY21wKGssICJub3Rlcy5yZXdyaXRlbW9kZSIpKSB7CisJCWlmICghdikKKwkJCWNvbmZpZ19lcnJvcl9ub25ib29sKGspOworCQljLT5jb21iaW5lID0gcGFyc2VfY29tYmluZV9ub3Rlc19mbih2KTsKKwkJaWYgKCFjLT5jb21iaW5lKSB7CisJCQllcnJvcihfKCJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciKSwgdik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFjLT5yZWZzX2Zyb21fZW52ICYmICFzdHJjbXAoaywgIm5vdGVzLnJld3JpdGVyZWYiKSkgeworCQkvKiBub3RlIHRoYXQgYSByZWZzLyBwcmVmaXggaXMgaW1wbGllZCBpbiB0aGUKKwkJICogdW5kZXJseWluZyBmb3JfZWFjaF9nbG9iX3JlZiAqLworCQlpZiAoIXByZWZpeGNtcCh2LCAicmVmcy9ub3Rlcy8iKSkKKwkJCXN0cmluZ19saXN0X2FkZF9yZWZzX2J5X2dsb2IoYy0+cmVmcywgdik7CisJCWVsc2UKKwkJCXdhcm5pbmcoXygiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyIKKwkJCQkiIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIpLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICppbml0X2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoY29uc3QgY2hhciAqY21kKQoreworCXN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZykpOworCWNvbnN0IGNoYXIgKnJld3JpdGVfbW9kZV9lbnYgPSBnZXRlbnYoR0lUX05PVEVTX1JFV1JJVEVfTU9ERV9FTlZJUk9OTUVOVCk7CisJY29uc3QgY2hhciAqcmV3cml0ZV9yZWZzX2VudiA9IGdldGVudihHSVRfTk9URVNfUkVXUklURV9SRUZfRU5WSVJPTk1FTlQpOworCWMtPmNtZCA9IGNtZDsKKwljLT5lbmFibGVkID0gMTsKKwljLT5jb21iaW5lID0gY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZTsKKwljLT5yZWZzID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CisJYy0+cmVmcy0+c3RyZHVwX3N0cmluZ3MgPSAxOworCWMtPnJlZnNfZnJvbV9lbnYgPSAwOworCWMtPm1vZGVfZnJvbV9lbnYgPSAwOworCWlmIChyZXdyaXRlX21vZGVfZW52KSB7CisJCWMtPm1vZGVfZnJvbV9lbnYgPSAxOworCQljLT5jb21iaW5lID0gcGFyc2VfY29tYmluZV9ub3Rlc19mbihyZXdyaXRlX21vZGVfZW52KTsKKwkJaWYgKCFjLT5jb21iaW5lKQorCQkJLyogVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiB0aGUKKwkJCSAgIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzIGl0cyB2YWx1ZSAqLworCQkJZXJyb3IoXygiQmFkICVzIHZhbHVlOiAnJXMnIiksIEdJVF9OT1RFU19SRVdSSVRFX01PREVfRU5WSVJPTk1FTlQsCisJCQkJCXJld3JpdGVfbW9kZV9lbnYpOworCX0KKwlpZiAocmV3cml0ZV9yZWZzX2VudikgeworCQljLT5yZWZzX2Zyb21fZW52ID0gMTsKKwkJc3RyaW5nX2xpc3RfYWRkX3JlZnNfZnJvbV9jb2xvbl9zZXAoYy0+cmVmcywgcmV3cml0ZV9yZWZzX2Vudik7CisJfQorCWdpdF9jb25maWcobm90ZXNfcmV3cml0ZV9jb25maWcsIGMpOworCWlmICghYy0+ZW5hYmxlZCB8fCAhYy0+cmVmcy0+bnIpIHsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoYy0+cmVmcywgMCk7CisJCWZyZWUoYy0+cmVmcyk7CisJCWZyZWUoYyk7CisJCXJldHVybiBOVUxMOworCX0KKwljLT50cmVlcyA9IGxvYWRfbm90ZXNfdHJlZXMoYy0+cmVmcyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoYy0+cmVmcywgMCk7CisJZnJlZShjLT5yZWZzKTsKKwlyZXR1cm4gYzsKK30KKworaW50IGNvcHlfbm90ZV9mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb21fb2JqLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0b19vYmopCit7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisJZm9yIChpID0gMDsgYy0+dHJlZXNbaV07IGkrKykKKwkJcmV0ID0gY29weV9ub3RlKGMtPnRyZWVzW2ldLCBmcm9tX29iaiwgdG9fb2JqLCAxLCBjLT5jb21iaW5lKSB8fCByZXQ7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgYy0+dHJlZXNbaV07IGkrKykgeworCQljb21taXRfbm90ZXMoYy0+dHJlZXNbaV0sICJOb3RlcyBhZGRlZCBieSAnZ2l0IG5vdGVzIGNvcHknIik7CisJCWZyZWVfbm90ZXMoYy0+dHJlZXNbaV0pOworCX0KKwlmcmVlKGMtPnRyZWVzKTsKKwlmcmVlKGMpOworfQorCitzdGF0aWMgaW50IG5vdGVzX2NvcHlfZnJvbV9zdGRpbihpbnQgZm9yY2UsIGNvbnN0IGNoYXIgKnJld3JpdGVfY21kKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjID0gTlVMTDsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwlpZiAocmV3cml0ZV9jbWQpIHsKKwkJYyA9IGluaXRfY29weV9ub3Rlc19mb3JfcmV3cml0ZShyZXdyaXRlX2NtZCk7CisJCWlmICghYykKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWluaXRfbm90ZXMoTlVMTCwgTlVMTCwgTlVMTCwgMCk7CisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCX0KKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbiwgJ1xuJykgIT0gRU9GKSB7CisJCXVuc2lnbmVkIGNoYXIgZnJvbV9vYmpbMjBdLCB0b19vYmpbMjBdOworCQlzdHJ1Y3Qgc3RyYnVmICoqc3BsaXQ7CisJCWludCBlcnI7CisKKwkJc3BsaXQgPSBzdHJidWZfc3BsaXQoJmJ1ZiwgJyAnKTsKKwkJaWYgKCFzcGxpdFswXSB8fCAhc3BsaXRbMV0pCisJCQlkaWUoXygiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIiksIGJ1Zi5idWYpOworCQlzdHJidWZfcnRyaW0oc3BsaXRbMF0pOworCQlzdHJidWZfcnRyaW0oc3BsaXRbMV0pOworCQlpZiAoZ2V0X3NoYTEoc3BsaXRbMF0tPmJ1ZiwgZnJvbV9vYmopKQorCQkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIHNwbGl0WzBdLT5idWYpOworCQlpZiAoZ2V0X3NoYTEoc3BsaXRbMV0tPmJ1ZiwgdG9fb2JqKSkKKwkJCWRpZShfKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBzcGxpdFsxXS0+YnVmKTsKKworCQlpZiAocmV3cml0ZV9jbWQpCisJCQllcnIgPSBjb3B5X25vdGVfZm9yX3Jld3JpdGUoYywgZnJvbV9vYmosIHRvX29iaik7CisJCWVsc2UKKwkJCWVyciA9IGNvcHlfbm90ZSh0LCBmcm9tX29iaiwgdG9fb2JqLCBmb3JjZSwKKwkJCQkJY29tYmluZV9ub3Rlc19vdmVyd3JpdGUpOworCisJCWlmIChlcnIpIHsKKwkJCWVycm9yKF8oIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIiksCisJCQkgICAgICBzcGxpdFswXS0+YnVmLCBzcGxpdFsxXS0+YnVmKTsKKwkJCXJldCA9IDE7CisJCX0KKworCQlzdHJidWZfbGlzdF9mcmVlKHNwbGl0KTsKKwl9CisKKwlpZiAoIXJld3JpdGVfY21kKSB7CisJCWNvbW1pdF9ub3Rlcyh0LCAiTm90ZXMgYWRkZWQgYnkgJ2dpdCBub3RlcyBjb3B5JyIpOworCQlmcmVlX25vdGVzKHQpOworCX0gZWxzZSB7CisJCWZpbmlzaF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKGMpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5vdGVzX3RyZWUgKmluaXRfbm90ZXNfY2hlY2soY29uc3QgY2hhciAqc3ViY29tbWFuZCkKK3sKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwlpbml0X25vdGVzKE5VTEwsIE5VTEwsIE5VTEwsIDApOworCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCisJaWYgKHByZWZpeGNtcCh0LT5yZWYsICJyZWZzL25vdGVzLyIpKQorCQlkaWUoIlJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIsCisJCSAgICBzdWJjb21tYW5kLCB0LT5yZWYpOworCXJldHVybiB0OworfQorCitzdGF0aWMgaW50IGxpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJdW5zaWduZWQgY2hhciBvYmplY3RbMjBdOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGU7CisJaW50IHJldHZhbCA9IC0xOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCisJaWYgKGFyZ2MpCisJCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCQkgICAgIGdpdF9ub3Rlc19saXN0X3VzYWdlLCAwKTsKKworCWlmICgxIDwgYXJnYykgeworCQllcnJvcihfKCJ0b28gbWFueSBwYXJhbWV0ZXJzIikpOworCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX2xpc3RfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCXQgPSBpbml0X25vdGVzX2NoZWNrKCJsaXN0Iik7CisJaWYgKGFyZ2MpIHsKKwkJaWYgKGdldF9zaGExKGFyZ3ZbMF0sIG9iamVjdCkpCisJCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgYXJndlswXSk7CisJCW5vdGUgPSBnZXRfbm90ZSh0LCBvYmplY3QpOworCQlpZiAobm90ZSkgeworCQkJcHV0cyhzaGExX3RvX2hleChub3RlKSk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UKKwkJCXJldHZhbCA9IGVycm9yKF8oIk5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iKSwKKwkJCQkgICAgICAgc2hhMV90b19oZXgob2JqZWN0KSk7CisJfSBlbHNlCisJCXJldHZhbCA9IGZvcl9lYWNoX25vdGUodCwgMCwgbGlzdF9lYWNoX25vdGUsIE5VTEwpOworCisJZnJlZV9ub3Rlcyh0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9lZGl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKKworc3RhdGljIGludCBhZGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHJldHZhbCA9IDAsIGZvcmNlID0gMDsKKwljb25zdCBjaGFyICpvYmplY3RfcmVmOworCXN0cnVjdCBub3Rlc190cmVlICp0OworCXVuc2lnbmVkIGNoYXIgb2JqZWN0WzIwXSwgbmV3X25vdGVbMjBdOworCWNoYXIgbG9nbXNnWzEwMF07CisJY29uc3QgdW5zaWduZWQgY2hhciAqbm90ZTsKKwlzdHJ1Y3QgbXNnX2FyZyBtc2cgPSB7IDAsIDAsIFNUUkJVRl9JTklUIH07CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0NBTExCQUNLLCAnbScsICJtZXNzYWdlIiwgJm1zZywgTl8oIm1lc3NhZ2UiKSwKKwkJCU5fKCJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIiksIFBBUlNFX09QVF9OT05FRywKKwkJCXBhcnNlX21zZ19hcmd9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ0YnLCAiZmlsZSIsICZtc2csIE5fKCJmaWxlIiksCisJCQlOXygibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfZmlsZV9hcmd9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2MnLCAicmVlZGl0LW1lc3NhZ2UiLCAmbXNnLCBOXygib2JqZWN0IiksCisJCQlOXygicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IiksIFBBUlNFX09QVF9OT05FRywKKwkJCXBhcnNlX3JlZWRpdF9hcmd9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ0MnLCAicmV1c2UtbWVzc2FnZSIsICZtc2csIE5fKCJvYmplY3QiKSwKKwkJCU5fKCJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfcmV1c2VfYXJnfSwKKwkJT1BUX19GT1JDRSgmZm9yY2UsIE5fKCJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfbm90ZXNfYWRkX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisKKwlpZiAoMiA8IGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19hZGRfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCW9iamVjdF9yZWYgPSBhcmdjID4gMSA/IGFyZ3ZbMV0gOiAiSEVBRCI7CisKKwlpZiAoZ2V0X3NoYTEob2JqZWN0X3JlZiwgb2JqZWN0KSkKKwkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIG9iamVjdF9yZWYpOworCisJdCA9IGluaXRfbm90ZXNfY2hlY2soImFkZCIpOworCW5vdGUgPSBnZXRfbm90ZSh0LCBvYmplY3QpOworCisJaWYgKG5vdGUpIHsKKwkJaWYgKCFmb3JjZSkgeworCQkJaWYgKCFtc2cuZ2l2ZW4pIHsKKwkJCQkvKgorCQkJCSAqIFJlZGlyZWN0IHRvICJlZGl0IiBzdWJjb21tYW5kLgorCQkJCSAqCisJCQkJICogV2Ugb25seSBlbmQgdXAgaGVyZSBpZiBub25lIG9mIC1tLy1GLy1jLy1DCisJCQkJICogb3IgLWYgYXJlIGdpdmVuLiBUaGUgb3JpZ2luYWwgYXJncyBhcmUKKwkJCQkgKiB0aGVyZWZvcmUgc3RpbGwgaW4gYXJndlswLTFdLgorCQkJCSAqLworCQkJCWFyZ3ZbMF0gPSAiZWRpdCI7CisJCQkJZnJlZV9ub3Rlcyh0KTsKKwkJCQlyZXR1cm4gYXBwZW5kX2VkaXQoYXJnYywgYXJndiwgcHJlZml4KTsKKwkJCX0KKwkJCXJldHZhbCA9IGVycm9yKF8oIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzICIKKwkJCQkgICAgICAgImZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisJCQkJICAgICAgICJleGlzdGluZyBub3RlcyIpLCBzaGExX3RvX2hleChvYmplY3QpKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWZwcmludGYoc3RkZXJyLCBfKCJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iKSwKKwkJCXNoYTFfdG9faGV4KG9iamVjdCkpOworCX0KKworCWNyZWF0ZV9ub3RlKG9iamVjdCwgJm1zZywgMCwgbm90ZSwgbmV3X25vdGUpOworCisJaWYgKGlzX251bGxfc2hhMShuZXdfbm90ZSkpCisJCXJlbW92ZV9ub3RlKHQsIG9iamVjdCk7CisJZWxzZSBpZiAoYWRkX25vdGUodCwgb2JqZWN0LCBuZXdfbm90ZSwgY29tYmluZV9ub3Rlc19vdmVyd3JpdGUpKQorCQlkaWUoIkJVRzogY29tYmluZV9ub3Rlc19vdmVyd3JpdGUgZmFpbGVkIik7CisKKwlzbnByaW50Zihsb2dtc2csIHNpemVvZihsb2dtc2cpLCAiTm90ZXMgJXMgYnkgJ2dpdCBub3RlcyAlcyciLAorCQkgaXNfbnVsbF9zaGExKG5ld19ub3RlKSA/ICJyZW1vdmVkIiA6ICJhZGRlZCIsICJhZGQiKTsKKwljb21taXRfbm90ZXModCwgbG9nbXNnKTsKK291dDoKKwlmcmVlX25vdGVzKHQpOworCXN0cmJ1Zl9yZWxlYXNlKCYobXNnLmJ1ZikpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgY29weShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcmV0dmFsID0gMCwgZm9yY2UgPSAwLCBmcm9tX3N0ZGluID0gMDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tX25vdGUsICpub3RlOworCWNvbnN0IGNoYXIgKm9iamVjdF9yZWY7CisJdW5zaWduZWQgY2hhciBvYmplY3RbMjBdLCBmcm9tX29ialsyMF07CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJY29uc3QgY2hhciAqcmV3cml0ZV9jbWQgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiKSksCisJCU9QVF9CT09MRUFOKDAsICJzdGRpbiIsICZmcm9tX3N0ZGluLCBOXygicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iKSksCisJCU9QVF9TVFJJTkcoMCwgImZvci1yZXdyaXRlIiwgJnJld3JpdGVfY21kLCBOXygiY29tbWFuZCIpLAorCQkJICAgTl8oImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzICIKKwkJCSAgICAgICItLXN0ZGluKSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X25vdGVzX2NvcHlfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKGZyb21fc3RkaW4gfHwgcmV3cml0ZV9jbWQpIHsKKwkJaWYgKGFyZ2MpIHsKKwkJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX2NvcHlfdXNhZ2UsIG9wdGlvbnMpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIG5vdGVzX2NvcHlfZnJvbV9zdGRpbihmb3JjZSwgcmV3cml0ZV9jbWQpOworCQl9CisJfQorCisJaWYgKGFyZ2MgPCAyKSB7CisJCWVycm9yKF8oInRvbyBmZXcgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19jb3B5X3VzYWdlLCBvcHRpb25zKTsKKwl9CisJaWYgKDIgPCBhcmdjKSB7CisJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfY29weV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGdldF9zaGExKGFyZ3ZbMF0sIGZyb21fb2JqKSkKKwkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIGFyZ3ZbMF0pOworCisJb2JqZWN0X3JlZiA9IDEgPCBhcmdjID8gYXJndlsxXSA6ICJIRUFEIjsKKworCWlmIChnZXRfc2hhMShvYmplY3RfcmVmLCBvYmplY3QpKQorCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgb2JqZWN0X3JlZik7CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjaygiY29weSIpOworCW5vdGUgPSBnZXRfbm90ZSh0LCBvYmplY3QpOworCisJaWYgKG5vdGUpIHsKKwkJaWYgKCFmb3JjZSkgeworCQkJcmV0dmFsID0gZXJyb3IoXygiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nICIKKwkJCQkgICAgICAgIm5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvICIKKwkJCQkgICAgICAgIm92ZXJ3cml0ZSBleGlzdGluZyBub3RlcyIpLAorCQkJCSAgICAgICBzaGExX3RvX2hleChvYmplY3QpKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWZwcmludGYoc3RkZXJyLCBfKCJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iKSwKKwkJCXNoYTFfdG9faGV4KG9iamVjdCkpOworCX0KKworCWZyb21fbm90ZSA9IGdldF9ub3RlKHQsIGZyb21fb2JqKTsKKwlpZiAoIWZyb21fbm90ZSkgeworCQlyZXR2YWwgPSBlcnJvcihfKCJNaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCAiCisJCQkgICAgICAgImNvcHkuIiksIHNoYTFfdG9faGV4KGZyb21fb2JqKSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhZGRfbm90ZSh0LCBvYmplY3QsIGZyb21fbm90ZSwgY29tYmluZV9ub3Rlc19vdmVyd3JpdGUpKQorCQlkaWUoIkJVRzogY29tYmluZV9ub3Rlc19vdmVyd3JpdGUgZmFpbGVkIik7CisJY29tbWl0X25vdGVzKHQsICJOb3RlcyBhZGRlZCBieSAnZ2l0IG5vdGVzIGNvcHknIik7CitvdXQ6CisJZnJlZV9ub3Rlcyh0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9lZGl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKm9iamVjdF9yZWY7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJdW5zaWduZWQgY2hhciBvYmplY3RbMjBdLCBuZXdfbm90ZVsyMF07CisJY29uc3QgdW5zaWduZWQgY2hhciAqbm90ZTsKKwljaGFyIGxvZ21zZ1sxMDBdOworCWNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2U7CisJc3RydWN0IG1zZ19hcmcgbXNnID0geyAwLCAwLCBTVFJCVUZfSU5JVCB9OworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQl7IE9QVElPTl9DQUxMQkFDSywgJ20nLCAibWVzc2FnZSIsICZtc2csIE5fKCJtZXNzYWdlIiksCisJCQlOXygibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9tc2dfYXJnfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdGJywgImZpbGUiLCAmbXNnLCBOXygiZmlsZSIpLAorCQkJTl8oIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIiksIFBBUlNFX09QVF9OT05FRywKKwkJCXBhcnNlX2ZpbGVfYXJnfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdjJywgInJlZWRpdC1tZXNzYWdlIiwgJm1zZywgTl8oIm9iamVjdCIpLAorCQkJTl8oInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9yZWVkaXRfYXJnfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdDJywgInJldXNlLW1lc3NhZ2UiLCAmbXNnLCBOXygib2JqZWN0IiksCisJCQlOXygicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IiksIFBBUlNFX09QVF9OT05FRywKKwkJCXBhcnNlX3JldXNlX2FyZ30sCisJCU9QVF9FTkQoKQorCX07CisJaW50IGVkaXQgPSAhc3RyY21wKGFyZ3ZbMF0sICJlZGl0Iik7CisKKwl1c2FnZSA9IGVkaXQgPyBnaXRfbm90ZXNfZWRpdF91c2FnZSA6IGdpdF9ub3Rlc19hcHBlbmRfdXNhZ2U7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCisJaWYgKDIgPCBhcmdjKSB7CisJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKG1zZy5naXZlbiAmJiBlZGl0KQorCQlmcHJpbnRmKHN0ZGVyciwgXygiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgIgorCQkJImZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisJCQkiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIpKTsKKworCW9iamVjdF9yZWYgPSAxIDwgYXJnYyA/IGFyZ3ZbMV0gOiAiSEVBRCI7CisKKwlpZiAoZ2V0X3NoYTEob2JqZWN0X3JlZiwgb2JqZWN0KSkKKwkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIG9iamVjdF9yZWYpOworCisJdCA9IGluaXRfbm90ZXNfY2hlY2soYXJndlswXSk7CisJbm90ZSA9IGdldF9ub3RlKHQsIG9iamVjdCk7CisKKwljcmVhdGVfbm90ZShvYmplY3QsICZtc2csICFlZGl0LCBub3RlLCBuZXdfbm90ZSk7CisKKwlpZiAoaXNfbnVsbF9zaGExKG5ld19ub3RlKSkKKwkJcmVtb3ZlX25vdGUodCwgb2JqZWN0KTsKKwllbHNlIGlmIChhZGRfbm90ZSh0LCBvYmplY3QsIG5ld19ub3RlLCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSkpCisJCWRpZSgiQlVHOiBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSBmYWlsZWQiKTsKKworCXNucHJpbnRmKGxvZ21zZywgc2l6ZW9mKGxvZ21zZyksICJOb3RlcyAlcyBieSAnZ2l0IG5vdGVzICVzJyIsCisJCSBpc19udWxsX3NoYTEobmV3X25vdGUpID8gInJlbW92ZWQiIDogImFkZGVkIiwgYXJndlswXSk7CisJY29tbWl0X25vdGVzKHQsIGxvZ21zZyk7CisJZnJlZV9ub3Rlcyh0KTsKKwlzdHJidWZfcmVsZWFzZSgmKG1zZy5idWYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKm9iamVjdF9yZWY7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJdW5zaWduZWQgY2hhciBvYmplY3RbMjBdOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGU7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X25vdGVzX3Nob3dfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKDEgPCBhcmdjKSB7CisJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfc2hvd191c2FnZSwgb3B0aW9ucyk7CisJfQorCisJb2JqZWN0X3JlZiA9IGFyZ2MgPyBhcmd2WzBdIDogIkhFQUQiOworCisJaWYgKGdldF9zaGExKG9iamVjdF9yZWYsIG9iamVjdCkpCisJCWRpZShfKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBvYmplY3RfcmVmKTsKKworCXQgPSBpbml0X25vdGVzX2NoZWNrKCJzaG93Iik7CisJbm90ZSA9IGdldF9ub3RlKHQsIG9iamVjdCk7CisKKwlpZiAoIW5vdGUpCisJCXJldHZhbCA9IGVycm9yKF8oIk5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iKSwKKwkJCSAgICAgICBzaGExX3RvX2hleChvYmplY3QpKTsKKwllbHNlIHsKKwkJY29uc3QgY2hhciAqc2hvd19hcmdzWzNdID0geyJzaG93Iiwgc2hhMV90b19oZXgobm90ZSksIE5VTEx9OworCQlyZXR2YWwgPSBleGVjdl9naXRfY21kKHNob3dfYXJncyk7CisJfQorCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBtZXJnZV9hYm9ydChzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbykKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qCisJICogUmVtb3ZlIC5naXQvTk9URVNfTUVSR0VfUEFSVElBTCBhbmQgLmdpdC9OT1RFU19NRVJHRV9SRUYsIGFuZCBjYWxsCisJICogbm90ZXNfbWVyZ2VfYWJvcnQoKSB0byByZW1vdmUgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4KKwkgKi8KKworCWlmIChkZWxldGVfcmVmKCJOT1RFU19NRVJHRV9QQVJUSUFMIiwgTlVMTCwgMCkpCisJCXJldCArPSBlcnJvcigiRmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIpOworCWlmIChkZWxldGVfcmVmKCJOT1RFU19NRVJHRV9SRUYiLCBOVUxMLCBSRUZfTk9ERVJFRikpCisJCXJldCArPSBlcnJvcigiRmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIik7CisJaWYgKG5vdGVzX21lcmdlX2Fib3J0KG8pKQorCQlyZXQgKz0gZXJyb3IoIkZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1lcmdlX2NvbW1pdChzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sIHBhcmVudF9zaGExWzIwXTsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwlzdHJ1Y3QgY29tbWl0ICpwYXJ0aWFsOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBwcmV0dHlfY3R4OworCXZvaWQgKmxvY2FsX3JlZl90b19mcmVlOworCWludCByZXQ7CisKKwkvKgorCSAqIFJlYWQgcGFydGlhbCBtZXJnZSByZXN1bHQgZnJvbSAuZ2l0L05PVEVTX01FUkdFX1BBUlRJQUwsCisJICogYW5kIHRhcmdldCBub3RlcyByZWYgZnJvbSAuZ2l0L05PVEVTX01FUkdFX1JFRi4KKwkgKi8KKworCWlmIChnZXRfc2hhMSgiTk9URVNfTUVSR0VfUEFSVElBTCIsIHNoYTEpKQorCQlkaWUoIkZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIik7CisJZWxzZSBpZiAoIShwYXJ0aWFsID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSkpKQorCQlkaWUoIkNvdWxkIG5vdCBmaW5kIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIik7CisJZWxzZSBpZiAocGFyc2VfY29tbWl0KHBhcnRpYWwpKQorCQlkaWUoIkNvdWxkIG5vdCBwYXJzZSBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIpOworCisJaWYgKHBhcnRpYWwtPnBhcmVudHMpCisJCWhhc2hjcHkocGFyZW50X3NoYTEsIHBhcnRpYWwtPnBhcmVudHMtPml0ZW0tPm9iamVjdC5zaGExKTsKKwllbHNlCisJCWhhc2hjbHIocGFyZW50X3NoYTEpOworCisJdCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBub3Rlc190cmVlKSk7CisJaW5pdF9ub3Rlcyh0LCAiTk9URVNfTUVSR0VfUEFSVElBTCIsIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlLCAwKTsKKworCW8tPmxvY2FsX3JlZiA9IGxvY2FsX3JlZl90b19mcmVlID0KKwkJcmVzb2x2ZV9yZWZkdXAoIk5PVEVTX01FUkdFX1JFRiIsIHNoYTEsIDAsIE5VTEwpOworCWlmICghby0+bG9jYWxfcmVmKQorCQlkaWUoIkZhaWxlZCB0byByZXNvbHZlIE5PVEVTX01FUkdFX1JFRiIpOworCisJaWYgKG5vdGVzX21lcmdlX2NvbW1pdChvLCB0LCBwYXJ0aWFsLCBzaGExKSkKKwkJZGllKCJGYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiKTsKKworCS8qIFJldXNlIGV4aXN0aW5nIGNvbW1pdCBtZXNzYWdlIGluIHJlZmxvZyBtZXNzYWdlICovCisJbWVtc2V0KCZwcmV0dHlfY3R4LCAwLCBzaXplb2YocHJldHR5X2N0eCkpOworCWZvcm1hdF9jb21taXRfbWVzc2FnZShwYXJ0aWFsLCAiJXMiLCAmbXNnLCAmcHJldHR5X2N0eCk7CisJc3RyYnVmX3RyaW0oJm1zZyk7CisJc3RyYnVmX2luc2VydCgmbXNnLCAwLCAibm90ZXM6ICIsIDcpOworCXVwZGF0ZV9yZWYobXNnLmJ1Ziwgby0+bG9jYWxfcmVmLCBzaGExLAorCQkgICBpc19udWxsX3NoYTEocGFyZW50X3NoYTEpID8gTlVMTCA6IHBhcmVudF9zaGExLAorCQkgICAwLCBESUVfT05fRVJSKTsKKworCWZyZWVfbm90ZXModCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisJcmV0ID0gbWVyZ2VfYWJvcnQobyk7CisJZnJlZShsb2NhbF9yZWZfdG9fZnJlZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtZXJnZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlbW90ZV9yZWYgPSBTVFJCVUZfSU5JVCwgbXNnID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgY2hhciByZXN1bHRfc2hhMVsyMF07CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgbzsKKwlpbnQgZG9fbWVyZ2UgPSAwLCBkb19jb21taXQgPSAwLCBkb19hYm9ydCA9IDA7CisJaW50IHZlcmJvc2l0eSA9IDAsIHJlc3VsdDsKKwljb25zdCBjaGFyICpzdHJhdGVneSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9HUk9VUChOXygiR2VuZXJhbCBvcHRpb25zIikpLAorCQlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zaXR5KSwKKwkJT1BUX0dST1VQKE5fKCJNZXJnZSBvcHRpb25zIikpLAorCQlPUFRfU1RSSU5HKCdzJywgInN0cmF0ZWd5IiwgJnN0cmF0ZWd5LCBOXygic3RyYXRlZ3kiKSwKKwkJCSAgIE5fKCJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgIgorCQkJICAgICAgIihtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiKSksCisJCU9QVF9HUk9VUChOXygiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIpKSwKKwkJeyBPUFRJT05fQk9PTEVBTiwgMCwgImNvbW1pdCIsICZkb19jb21taXQsIE5VTEwsCisJCQlOXygiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIH0sCisJCU9QVF9HUk9VUChOXygiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIpKSwKKwkJeyBPUFRJT05fQk9PTEVBTiwgMCwgImFib3J0IiwgJmRvX2Fib3J0LCBOVUxMLAorCQkJTl8oImFib3J0IG5vdGVzIG1lcmdlIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X25vdGVzX21lcmdlX3VzYWdlLCAwKTsKKworCWlmIChzdHJhdGVneSB8fCBkb19jb21taXQgKyBkb19hYm9ydCA9PSAwKQorCQlkb19tZXJnZSA9IDE7CisJaWYgKGRvX21lcmdlICsgZG9fY29tbWl0ICsgZG9fYWJvcnQgIT0gMSkgeworCQllcnJvcigiY2Fubm90IG1peCAtLWNvbW1pdCwgLS1hYm9ydCBvciAtcy8tLXN0cmF0ZWd5Iik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCWlmIChkb19tZXJnZSAmJiBhcmdjICE9IDEpIHsKKwkJZXJyb3IoIk11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIpOworCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX21lcmdlX3VzYWdlLCBvcHRpb25zKTsKKwl9IGVsc2UgaWYgKCFkb19tZXJnZSAmJiBhcmdjKSB7CisJCWVycm9yKCJ0b28gbWFueSBwYXJhbWV0ZXJzIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCWluaXRfbm90ZXNfbWVyZ2Vfb3B0aW9ucygmbyk7CisJby52ZXJib3NpdHkgPSB2ZXJib3NpdHkgKyBOT1RFU19NRVJHRV9WRVJCT1NJVFlfREVGQVVMVDsKKworCWlmIChkb19hYm9ydCkKKwkJcmV0dXJuIG1lcmdlX2Fib3J0KCZvKTsKKwlpZiAoZG9fY29tbWl0KQorCQlyZXR1cm4gbWVyZ2VfY29tbWl0KCZvKTsKKworCW8ubG9jYWxfcmVmID0gZGVmYXVsdF9ub3Rlc19yZWYoKTsKKwlzdHJidWZfYWRkc3RyKCZyZW1vdGVfcmVmLCBhcmd2WzBdKTsKKwlleHBhbmRfbm90ZXNfcmVmKCZyZW1vdGVfcmVmKTsKKwlvLnJlbW90ZV9yZWYgPSByZW1vdGVfcmVmLmJ1ZjsKKworCWlmIChzdHJhdGVneSkgeworCQlpZiAoIXN0cmNtcChzdHJhdGVneSwgIm1hbnVhbCIpKQorCQkJby5zdHJhdGVneSA9IE5PVEVTX01FUkdFX1JFU09MVkVfTUFOVUFMOworCQllbHNlIGlmICghc3RyY21wKHN0cmF0ZWd5LCAib3VycyIpKQorCQkJby5zdHJhdGVneSA9IE5PVEVTX01FUkdFX1JFU09MVkVfT1VSUzsKKwkJZWxzZSBpZiAoIXN0cmNtcChzdHJhdGVneSwgInRoZWlycyIpKQorCQkJby5zdHJhdGVneSA9IE5PVEVTX01FUkdFX1JFU09MVkVfVEhFSVJTOworCQllbHNlIGlmICghc3RyY21wKHN0cmF0ZWd5LCAidW5pb24iKSkKKwkJCW8uc3RyYXRlZ3kgPSBOT1RFU19NRVJHRV9SRVNPTFZFX1VOSU9OOworCQllbHNlIGlmICghc3RyY21wKHN0cmF0ZWd5LCAiY2F0X3NvcnRfdW5pcSIpKQorCQkJby5zdHJhdGVneSA9IE5PVEVTX01FUkdFX1JFU09MVkVfQ0FUX1NPUlRfVU5JUTsKKwkJZWxzZSB7CisJCQllcnJvcigiVW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIsIHN0cmF0ZWd5KTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIG9wdGlvbnMpOworCQl9CisJfQorCisJdCA9IGluaXRfbm90ZXNfY2hlY2soIm1lcmdlIik7CisKKwlzdHJidWZfYWRkZigmbXNnLCAibm90ZXM6IE1lcmdlZCBub3RlcyBmcm9tICVzIGludG8gJXMiLAorCQkgICAgcmVtb3RlX3JlZi5idWYsIGRlZmF1bHRfbm90ZXNfcmVmKCkpOworCXN0cmJ1Zl9hZGQoJihvLmNvbW1pdF9tc2cpLCBtc2cuYnVmICsgNywgbXNnLmxlbiAtIDcpOyAvKiBza2lwICJub3RlczogIiAqLworCisJcmVzdWx0ID0gbm90ZXNfbWVyZ2UoJm8sIHQsIHJlc3VsdF9zaGExKTsKKworCWlmIChyZXN1bHQgPj0gMCkgLyogTWVyZ2UgcmVzdWx0ZWQgKHRyaXZpYWxseSkgaW4gcmVzdWx0X3NoYTEgKi8KKwkJLyogVXBkYXRlIGRlZmF1bHQgbm90ZXMgcmVmIHdpdGggbmV3IGNvbW1pdCAqLworCQl1cGRhdGVfcmVmKG1zZy5idWYsIGRlZmF1bHRfbm90ZXNfcmVmKCksIHJlc3VsdF9zaGExLCBOVUxMLAorCQkJICAgMCwgRElFX09OX0VSUik7CisJZWxzZSB7IC8qIE1lcmdlIGhhcyB1bnJlc29sdmVkIGNvbmZsaWN0cyAqLworCQkvKiBVcGRhdGUgLmdpdC9OT1RFU19NRVJHRV9QQVJUSUFMIHdpdGggcGFydGlhbCBtZXJnZSByZXN1bHQgKi8KKwkJdXBkYXRlX3JlZihtc2cuYnVmLCAiTk9URVNfTUVSR0VfUEFSVElBTCIsIHJlc3VsdF9zaGExLCBOVUxMLAorCQkJICAgMCwgRElFX09OX0VSUik7CisJCS8qIFN0b3JlIHJlZi10by1iZS11cGRhdGVkIGludG8gLmdpdC9OT1RFU19NRVJHRV9SRUYgKi8KKwkJaWYgKGNyZWF0ZV9zeW1yZWYoIk5PVEVTX01FUkdFX1JFRiIsIGRlZmF1bHRfbm90ZXNfcmVmKCksIE5VTEwpKQorCQkJZGllKCJGYWlsZWQgdG8gc3RvcmUgbGluayB0byBjdXJyZW50IG5vdGVzIHJlZiAoJXMpIiwKKwkJCSAgICBkZWZhdWx0X25vdGVzX3JlZigpKTsKKwkJcHJpbnRmKCJBdXRvbWF0aWMgbm90ZXMgbWVyZ2UgZmFpbGVkLiBGaXggY29uZmxpY3RzIGluICVzIGFuZCAiCisJCSAgICAgICAiY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgIgorCQkgICAgICAgImFib3J0IHRoZSBtZXJnZSB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcuXG4iLAorCQkgICAgICAgZ2l0X3BhdGgoTk9URVNfTUVSR0VfV09SS1RSRUUpKTsKKwl9CisKKwlmcmVlX25vdGVzKHQpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZW1vdGVfcmVmKTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKwlyZXR1cm4gcmVzdWx0IDwgMDsgLyogcmV0dXJuIG5vbi16ZXJvIG9uIGNvbmZsaWN0cyAqLworfQorCisjZGVmaW5lIElHTk9SRV9NSVNTSU5HIDEKKworc3RhdGljIGludCByZW1vdmVfb25lX25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGZsYWcpCit7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWlmIChnZXRfc2hhMShuYW1lLCBzaGExKSkKKwkJcmV0dXJuIGVycm9yKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIG5hbWUpOworCXN0YXR1cyA9IHJlbW92ZV9ub3RlKHQsIHNoYTEpOworCWlmIChzdGF0dXMpCisJCWZwcmludGYoc3RkZXJyLCBfKCJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIpLCBuYW1lKTsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCBfKCJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIpLCBuYW1lKTsKKwlyZXR1cm4gKGZsYWcgJiBJR05PUkVfTUlTU0lORykgPyAwIDogc3RhdHVzOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9jbWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJdW5zaWduZWQgZmxhZyA9IDA7CisJaW50IGZyb21fc3RkaW4gPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQklUKDAsICJpZ25vcmUtbWlzc2luZyIsICZmbGFnLAorCQkJTl8oImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIpLAorCQkJSUdOT1JFX01JU1NJTkcpLAorCQlPUFRfQk9PTEVBTigwLCAic3RkaW4iLCAmZnJvbV9zdGRpbiwKKwkJCSAgICBOXygicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiKSksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJaW50IHJldHZhbCA9IDA7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9ub3Rlc19yZW1vdmVfdXNhZ2UsIDApOworCisJdCA9IGluaXRfbm90ZXNfY2hlY2soInJlbW92ZSIpOworCisJaWYgKCFhcmdjICYmICFmcm9tX3N0ZGluKSB7CisJCXJldHZhbCA9IHJlbW92ZV9vbmVfbm90ZSh0LCAiSEVBRCIsIGZsYWcpOworCX0gZWxzZSB7CisJCXdoaWxlICgqYXJndikgeworCQkJcmV0dmFsIHw9IHJlbW92ZV9vbmVfbm90ZSh0LCAqYXJndiwgZmxhZyk7CisJCQlhcmd2Kys7CisJCX0KKwl9CisJaWYgKGZyb21fc3RkaW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQl3aGlsZSAoc3RyYnVmX2dldHdob2xlbGluZSgmc2IsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJCXN0cmJ1Zl9ydHJpbSgmc2IpOworCQkJcmV0dmFsIHw9IHJlbW92ZV9vbmVfbm90ZSh0LCBzYi5idWYsIGZsYWcpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCWlmICghcmV0dmFsKQorCQljb21taXRfbm90ZXModCwgIk5vdGVzIHJlbW92ZWQgYnkgJ2dpdCBub3RlcyByZW1vdmUnIik7CisJZnJlZV9ub3Rlcyh0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHBydW5lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBub3Rlc190cmVlICp0OworCWludCBzaG93X29ubHkgPSAwLCB2ZXJib3NlID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19EUllfUlVOKCZzaG93X29ubHksICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiKSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCAicmVwb3J0IHBydW5lZCBub3RlcyIpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfbm90ZXNfcHJ1bmVfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19wcnVuZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJdCA9IGluaXRfbm90ZXNfY2hlY2soInBydW5lIik7CisKKwlwcnVuZV9ub3Rlcyh0LCAodmVyYm9zZSA/IE5PVEVTX1BSVU5FX1ZFUkJPU0UgOiAwKSB8CisJCShzaG93X29ubHkgPyBOT1RFU19QUlVORV9WRVJCT1NFfE5PVEVTX1BSVU5FX0RSWVJVTiA6IDApICk7CisJaWYgKCFzaG93X29ubHkpCisJCWNvbW1pdF9ub3Rlcyh0LCAiTm90ZXMgcmVtb3ZlZCBieSAnZ2l0IG5vdGVzIHBydW5lJyIpOworCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsgT1BUX0VORCgpIH07CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfbm90ZXNfZ2V0X3JlZl91c2FnZSwgMCk7CisKKwlpZiAoYXJnYykgeworCQllcnJvcigidG9vIG1hbnkgcGFyYW1ldGVycyIpOworCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX2dldF9yZWZfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCXB1dHMoZGVmYXVsdF9ub3Rlc19yZWYoKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfbm90ZXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHJlc3VsdDsKKwljb25zdCBjaGFyICpvdmVycmlkZV9ub3Rlc19yZWYgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJyZWYiLCAmb3ZlcnJpZGVfbm90ZXNfcmVmLCBOXygibm90ZXNfcmVmIiksCisJCQkgICBOXygidXNlIG5vdGVzIGZyb20gPG5vdGVzX3JlZj4iKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfbm90ZXNfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCisJaWYgKG92ZXJyaWRlX25vdGVzX3JlZikgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBvdmVycmlkZV9ub3Rlc19yZWYpOworCQlleHBhbmRfbm90ZXNfcmVmKCZzYik7CisJCXNldGVudigiR0lUX05PVEVTX1JFRiIsIHNiLmJ1ZiwgMSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCisJaWYgKGFyZ2MgPCAxIHx8ICFzdHJjbXAoYXJndlswXSwgImxpc3QiKSkKKwkJcmVzdWx0ID0gbGlzdChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImFkZCIpKQorCQlyZXN1bHQgPSBhZGQoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJjb3B5IikpCisJCXJlc3VsdCA9IGNvcHkoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJhcHBlbmQiKSB8fCAhc3RyY21wKGFyZ3ZbMF0sICJlZGl0IikpCisJCXJlc3VsdCA9IGFwcGVuZF9lZGl0KGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2hvdyIpKQorCQlyZXN1bHQgPSBzaG93KGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAibWVyZ2UiKSkKKwkJcmVzdWx0ID0gbWVyZ2UoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJyZW1vdmUiKSkKKwkJcmVzdWx0ID0gcmVtb3ZlX2NtZChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInBydW5lIikpCisJCXJlc3VsdCA9IHBydW5lKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiZ2V0LXJlZiIpKQorCQlyZXN1bHQgPSBnZXRfcmVmKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSB7CisJCXJlc3VsdCA9IGVycm9yKF8oIlVua25vd24gc3ViY29tbWFuZDogJXMiKSwgYXJndlswXSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCXJldHVybiByZXN1bHQgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcGFjay1vYmplY3RzLmMgYi9idWlsdGluL3BhY2stb2JqZWN0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMTQwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3BhY2stb2JqZWN0cy5jCkBAIC0wLDAgKzEsMjYwMyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInBhY2stcmV2aW5kZXguaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnBhY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbb3B0aW9ucy4uLl0gWzwgcmVmLWxpc3QgfCA8IG9iamVjdC1saXN0XSIpLAorCU5fKCJnaXQgcGFjay1vYmplY3RzIFtvcHRpb25zLi4uXSBiYXNlLW5hbWUgWzwgcmVmLWxpc3QgfCA8IG9iamVjdC1saXN0XSIpLAorCU5VTEwKK307CisKK3N0cnVjdCBvYmplY3RfZW50cnkgeworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSBpZHg7CisJdW5zaWduZWQgbG9uZyBzaXplOwkvKiB1bmNvbXByZXNzZWQgc2l6ZSAqLworCXN0cnVjdCBwYWNrZWRfZ2l0ICppbl9wYWNrOyAJLyogYWxyZWFkeSBpbiBwYWNrICovCisJb2ZmX3QgaW5fcGFja19vZmZzZXQ7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZGVsdGE7CS8qIGRlbHRhIGJhc2Ugb2JqZWN0ICovCisJc3RydWN0IG9iamVjdF9lbnRyeSAqZGVsdGFfY2hpbGQ7IC8qIGRlbHRpZmllZCBvYmplY3RzIHdobyBiYXNlcyBtZSAqLworCXN0cnVjdCBvYmplY3RfZW50cnkgKmRlbHRhX3NpYmxpbmc7IC8qIG90aGVyIGRlbHRpZmllZCBvYmplY3RzIHdobworCQkJCQkgICAgICogdXNlcyB0aGUgc2FtZSBiYXNlIGFzIG1lCisJCQkJCSAgICAgKi8KKwl2b2lkICpkZWx0YV9kYXRhOwkvKiBjYWNoZWQgZGVsdGEgKHVuY29tcHJlc3NlZCkgKi8KKwl1bnNpZ25lZCBsb25nIGRlbHRhX3NpemU7CS8qIGRlbHRhIGRhdGEgc2l6ZSAodW5jb21wcmVzc2VkKSAqLworCXVuc2lnbmVkIGxvbmcgel9kZWx0YV9zaXplOwkvKiBkZWx0YSBkYXRhIHNpemUgKGNvbXByZXNzZWQpICovCisJdW5zaWduZWQgaW50IGhhc2g7CS8qIG5hbWUgaGludCBoYXNoICovCisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWVudW0gb2JqZWN0X3R5cGUgaW5fcGFja190eXBlOwkvKiBjb3VsZCBiZSBkZWx0YSAqLworCXVuc2lnbmVkIGNoYXIgaW5fcGFja19oZWFkZXJfc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIHByZWZlcnJlZF9iYXNlOyAvKiB3ZSBkbyBub3QgcGFjayB0aGlzLCBidXQgaXMgYXZhaWxhYmxlCisJCQkJICAgICAgICogdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBvYmplY3QgdG8gZGVsdGEKKwkJCQkgICAgICAgKiBvYmplY3RzIGFnYWluc3QuCisJCQkJICAgICAgICovCisJdW5zaWduZWQgY2hhciBub190cnlfZGVsdGE7CisJdW5zaWduZWQgY2hhciB0YWdnZWQ7IC8qIG5lYXIgdGhlIHZlcnkgdGlwIG9mIHJlZnMgKi8KKwl1bnNpZ25lZCBjaGFyIGZpbGxlZDsgLyogYXNzaWduZWQgd3JpdGUtb3JkZXIgKi8KK307CisKKy8qCisgKiBPYmplY3RzIHdlIGFyZSBnb2luZyB0byBwYWNrIGFyZSBjb2xsZWN0ZWQgaW4gb2JqZWN0cyBhcnJheSAoZHluYW1pY2FsbHkKKyAqIGV4cGFuZGVkKS4gIG5yX29iamVjdHMgJiBucl9hbGxvYyBjb250cm9scyB0aGlzIGFycmF5LiAgVGhleSBhcmUgc3RvcmVkCisgKiBpbiB0aGUgb3JkZXIgd2Ugc2VlIC0tIHR5cGljYWxseSByZXYtbGlzdCAtLW9iamVjdHMgb3JkZXIgdGhhdCBnaXZlcyB1cworICogbmljZSAibWluaW11bSBzZWVrIiBvcmRlci4KKyAqLworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdHM7CitzdGF0aWMgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqd3JpdHRlbl9saXN0Oworc3RhdGljIHVpbnQzMl90IG5yX29iamVjdHMsIG5yX2FsbG9jLCBucl9yZXN1bHQsIG5yX3dyaXR0ZW47CisKK3N0YXRpYyBpbnQgbm9uX2VtcHR5Oworc3RhdGljIGludCByZXVzZV9kZWx0YSA9IDEsIHJldXNlX29iamVjdCA9IDE7CitzdGF0aWMgaW50IGtlZXBfdW5yZWFjaGFibGUsIHVucGFja191bnJlYWNoYWJsZSwgaW5jbHVkZV90YWc7CitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bnBhY2tfdW5yZWFjaGFibGVfZXhwaXJhdGlvbjsKK3N0YXRpYyBpbnQgbG9jYWw7CitzdGF0aWMgaW50IGluY3JlbWVudGFsOworc3RhdGljIGludCBpZ25vcmVfcGFja2VkX2tlZXA7CitzdGF0aWMgaW50IGFsbG93X29mc19kZWx0YTsKK3N0YXRpYyBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uIHBhY2tfaWR4X29wdHM7CitzdGF0aWMgY29uc3QgY2hhciAqYmFzZV9uYW1lOworc3RhdGljIGludCBwcm9ncmVzcyA9IDE7CitzdGF0aWMgaW50IHdpbmRvdyA9IDEwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFja19zaXplX2xpbWl0Oworc3RhdGljIGludCBkZXB0aCA9IDUwOworc3RhdGljIGludCBkZWx0YV9zZWFyY2hfdGhyZWFkczsKK3N0YXRpYyBpbnQgcGFja190b19zdGRvdXQ7CitzdGF0aWMgaW50IG51bV9wcmVmZXJyZWRfYmFzZTsKK3N0YXRpYyBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzX3N0YXRlOworc3RhdGljIGludCBwYWNrX2NvbXByZXNzaW9uX2xldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworc3RhdGljIGludCBwYWNrX2NvbXByZXNzaW9uX3NlZW47CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRlbHRhX2NhY2hlX3NpemUgPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2RlbHRhX2NhY2hlX3NpemUgPSAyNTYgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNhY2hlX21heF9zbWFsbF9kZWx0YV9zaXplID0gMTAwMDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgd2luZG93X21lbW9yeV9saW1pdCA9IDA7CisKKy8qCisgKiBUaGUgb2JqZWN0IG5hbWVzIGluIG9iamVjdHMgYXJyYXkgYXJlIGhhc2hlZCB3aXRoIHRoaXMgaGFzaHRhYmxlLAorICogdG8gaGVscCBsb29raW5nIHVwIHRoZSBlbnRyeSBieSBvYmplY3QgbmFtZS4KKyAqIFRoaXMgaGFzaHRhYmxlIGlzIGJ1aWx0IGFmdGVyIGFsbCB0aGUgb2JqZWN0cyBhcmUgc2Vlbi4KKyAqLworc3RhdGljIGludCAqb2JqZWN0X2l4Oworc3RhdGljIGludCBvYmplY3RfaXhfaGFzaHN6Oworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKmxvY2F0ZV9vYmplY3RfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKKy8qCisgKiBzdGF0cworICovCitzdGF0aWMgdWludDMyX3Qgd3JpdHRlbiwgd3JpdHRlbl9kZWx0YTsKK3N0YXRpYyB1aW50MzJfdCByZXVzZWQsIHJldXNlZF9kZWx0YTsKKworCitzdGF0aWMgdm9pZCAqZ2V0X2RlbHRhKHN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgYmFzZV9zaXplLCBkZWx0YV9zaXplOworCXZvaWQgKmJ1ZiwgKmJhc2VfYnVmLCAqZGVsdGFfYnVmOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKGVudHJ5LT5pZHguc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCAlcyIsIHNoYTFfdG9faGV4KGVudHJ5LT5pZHguc2hhMSkpOworCWJhc2VfYnVmID0gcmVhZF9zaGExX2ZpbGUoZW50cnktPmRlbHRhLT5pZHguc2hhMSwgJnR5cGUsICZiYXNlX3NpemUpOworCWlmICghYmFzZV9idWYpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgJXMiLCBzaGExX3RvX2hleChlbnRyeS0+ZGVsdGEtPmlkeC5zaGExKSk7CisJZGVsdGFfYnVmID0gZGlmZl9kZWx0YShiYXNlX2J1ZiwgYmFzZV9zaXplLAorCQkJICAgICAgIGJ1Ziwgc2l6ZSwgJmRlbHRhX3NpemUsIDApOworCWlmICghZGVsdGFfYnVmIHx8IGRlbHRhX3NpemUgIT0gZW50cnktPmRlbHRhX3NpemUpCisJCWRpZSgiZGVsdGEgc2l6ZSBjaGFuZ2VkIik7CisJZnJlZShidWYpOworCWZyZWUoYmFzZV9idWYpOworCXJldHVybiBkZWx0YV9idWY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRvX2NvbXByZXNzKHZvaWQgKipwcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXZvaWQgKmluLCAqb3V0OworCXVuc2lnbmVkIGxvbmcgbWF4c2l6ZTsKKworCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CisJZ2l0X2RlZmxhdGVfaW5pdCgmc3RyZWFtLCBwYWNrX2NvbXByZXNzaW9uX2xldmVsKTsKKwltYXhzaXplID0gZ2l0X2RlZmxhdGVfYm91bmQoJnN0cmVhbSwgc2l6ZSk7CisKKwlpbiA9ICpwcHRyOworCW91dCA9IHhtYWxsb2MobWF4c2l6ZSk7CisJKnBwdHIgPSBvdXQ7CisKKwlzdHJlYW0ubmV4dF9pbiA9IGluOworCXN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJc3RyZWFtLm5leHRfb3V0ID0gb3V0OworCXN0cmVhbS5hdmFpbF9vdXQgPSBtYXhzaXplOworCXdoaWxlIChnaXRfZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCkgPT0gWl9PSykKKwkJOyAvKiBub3RoaW5nICovCisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCisJZnJlZShpbik7CisJcmV0dXJuIHN0cmVhbS50b3RhbF9vdXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX2xhcmdlX2Jsb2JfZGF0YShzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0LCBzdHJ1Y3Qgc2hhMWZpbGUgKmYsCisJCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXVuc2lnbmVkIGNoYXIgaWJ1ZlsxMDI0ICogMTZdOworCXVuc2lnbmVkIGNoYXIgb2J1ZlsxMDI0ICogMTZdOworCXVuc2lnbmVkIGxvbmcgb2xlbiA9IDA7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCWdpdF9kZWZsYXRlX2luaXQoJnN0cmVhbSwgcGFja19jb21wcmVzc2lvbl9sZXZlbCk7CisKKwlmb3IgKDs7KSB7CisJCXNzaXplX3QgcmVhZGxlbjsKKwkJaW50IHpyZXQgPSBaX09LOworCQlyZWFkbGVuID0gcmVhZF9pc3RyZWFtKHN0LCBpYnVmLCBzaXplb2YoaWJ1ZikpOworCQlpZiAocmVhZGxlbiA9PSAtMSkKKwkJCWRpZShfKCJ1bmFibGUgdG8gcmVhZCAlcyIpLCBzaGExX3RvX2hleChzaGExKSk7CisKKwkJc3RyZWFtLm5leHRfaW4gPSBpYnVmOworCQlzdHJlYW0uYXZhaWxfaW4gPSByZWFkbGVuOworCQl3aGlsZSAoKHN0cmVhbS5hdmFpbF9pbiB8fCByZWFkbGVuID09IDApICYmCisJCSAgICAgICAoenJldCA9PSBaX09LIHx8IHpyZXQgPT0gWl9CVUZfRVJST1IpKSB7CisJCQlzdHJlYW0ubmV4dF9vdXQgPSBvYnVmOworCQkJc3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihvYnVmKTsKKwkJCXpyZXQgPSBnaXRfZGVmbGF0ZSgmc3RyZWFtLCByZWFkbGVuID8gMCA6IFpfRklOSVNIKTsKKwkJCXNoYTF3cml0ZShmLCBvYnVmLCBzdHJlYW0ubmV4dF9vdXQgLSBvYnVmKTsKKwkJCW9sZW4gKz0gc3RyZWFtLm5leHRfb3V0IC0gb2J1ZjsKKwkJfQorCQlpZiAoc3RyZWFtLmF2YWlsX2luKQorCQkJZGllKF8oImRlZmxhdGUgZXJyb3IgKCVkKSIpLCB6cmV0KTsKKwkJaWYgKHJlYWRsZW4gPT0gMCkgeworCQkJaWYgKHpyZXQgIT0gWl9TVFJFQU1fRU5EKQorCQkJCWRpZShfKCJkZWZsYXRlIGVycm9yICglZCkiKSwgenJldCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlnaXRfZGVmbGF0ZV9lbmQoJnN0cmVhbSk7CisJcmV0dXJuIG9sZW47Cit9CisKKy8qCisgKiB3ZSBhcmUgZ29pbmcgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIG9iamVjdCBkYXRhIGFzIGlzLiAgbWFrZQorICogc3VyZSBpdCBpcyBub3QgY29ycnVwdC4KKyAqLworc3RhdGljIGludCBjaGVja19wYWNrX2luZmxhdGUoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKKwkJb2ZmX3Qgb2Zmc2V0LAorCQlvZmZfdCBsZW4sCisJCXVuc2lnbmVkIGxvbmcgZXhwZWN0KQoreworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwl1bnNpZ25lZCBjaGFyIGZha2VidWZbNDA5Nl0sICppbjsKKwlpbnQgc3Q7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CisJZG8geworCQlpbiA9IHVzZV9wYWNrKHAsIHdfY3Vycywgb2Zmc2V0LCAmc3RyZWFtLmF2YWlsX2luKTsKKwkJc3RyZWFtLm5leHRfaW4gPSBpbjsKKwkJc3RyZWFtLm5leHRfb3V0ID0gZmFrZWJ1ZjsKKwkJc3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihmYWtlYnVmKTsKKwkJc3QgPSBnaXRfaW5mbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJCW9mZnNldCArPSBzdHJlYW0ubmV4dF9pbiAtIGluOworCX0gd2hpbGUgKHN0ID09IFpfT0sgfHwgc3QgPT0gWl9CVUZfRVJST1IpOworCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwlyZXR1cm4gKHN0ID09IFpfU1RSRUFNX0VORCAmJgorCQlzdHJlYW0udG90YWxfb3V0ID09IGV4cGVjdCAmJgorCQlzdHJlYW0udG90YWxfaW4gPT0gbGVuKSA/IDAgOiAtMTsKK30KKworc3RhdGljIHZvaWQgY29weV9wYWNrX2RhdGEoc3RydWN0IHNoYTFmaWxlICpmLAorCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQlvZmZfdCBvZmZzZXQsCisJCW9mZl90IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICppbjsKKwl1bnNpZ25lZCBsb25nIGF2YWlsOworCisJd2hpbGUgKGxlbikgeworCQlpbiA9IHVzZV9wYWNrKHAsIHdfY3Vycywgb2Zmc2V0LCAmYXZhaWwpOworCQlpZiAoYXZhaWwgPiBsZW4pCisJCQlhdmFpbCA9ICh1bnNpZ25lZCBsb25nKWxlbjsKKwkJc2hhMXdyaXRlKGYsIGluLCBhdmFpbCk7CisJCW9mZnNldCArPSBhdmFpbDsKKwkJbGVuIC09IGF2YWlsOworCX0KK30KKworLyogUmV0dXJuIDAgaWYgd2Ugd2lsbCBidXN0IHRoZSBwYWNrLXNpemUgbGltaXQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX25vX3JldXNlX29iamVjdChzdHJ1Y3Qgc2hhMWZpbGUgKmYsIHN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5LAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGxpbWl0LCBpbnQgdXNhYmxlX2RlbHRhKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZGF0YWxlbjsKKwl1bnNpZ25lZCBjaGFyIGhlYWRlclsxMF0sIGRoZWFkZXJbMTBdOworCXVuc2lnbmVkIGhkcmxlbjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqYnVmOworCXN0cnVjdCBnaXRfaXN0cmVhbSAqc3QgPSBOVUxMOworCisJaWYgKCF1c2FibGVfZGVsdGEpIHsKKwkJaWYgKGVudHJ5LT50eXBlID09IE9CSl9CTE9CICYmCisJCSAgICBlbnRyeS0+c2l6ZSA+IGJpZ19maWxlX3RocmVzaG9sZCAmJgorCQkgICAgKHN0ID0gb3Blbl9pc3RyZWFtKGVudHJ5LT5pZHguc2hhMSwgJnR5cGUsICZzaXplLCBOVUxMKSkgIT0gTlVMTCkKKwkJCWJ1ZiA9IE5VTEw7CisJCWVsc2UgeworCQkJYnVmID0gcmVhZF9zaGExX2ZpbGUoZW50cnktPmlkeC5zaGExLCAmdHlwZSwgJnNpemUpOworCQkJaWYgKCFidWYpCisJCQkJZGllKF8oInVuYWJsZSB0byByZWFkICVzIiksIHNoYTFfdG9faGV4KGVudHJ5LT5pZHguc2hhMSkpOworCQl9CisJCS8qCisJCSAqIG1ha2Ugc3VyZSBubyBjYWNoZWQgZGVsdGEgZGF0YSByZW1haW5zIGZyb20gYQorCQkgKiBwcmV2aW91cyBhdHRlbXB0IGJlZm9yZSBhIHBhY2sgc3BsaXQgb2NjdXJyZWQuCisJCSAqLworCQlmcmVlKGVudHJ5LT5kZWx0YV9kYXRhKTsKKwkJZW50cnktPmRlbHRhX2RhdGEgPSBOVUxMOworCQllbnRyeS0+el9kZWx0YV9zaXplID0gMDsKKwl9IGVsc2UgaWYgKGVudHJ5LT5kZWx0YV9kYXRhKSB7CisJCXNpemUgPSBlbnRyeS0+ZGVsdGFfc2l6ZTsKKwkJYnVmID0gZW50cnktPmRlbHRhX2RhdGE7CisJCWVudHJ5LT5kZWx0YV9kYXRhID0gTlVMTDsKKwkJdHlwZSA9IChhbGxvd19vZnNfZGVsdGEgJiYgZW50cnktPmRlbHRhLT5pZHgub2Zmc2V0KSA/CisJCQlPQkpfT0ZTX0RFTFRBIDogT0JKX1JFRl9ERUxUQTsKKwl9IGVsc2UgeworCQlidWYgPSBnZXRfZGVsdGEoZW50cnkpOworCQlzaXplID0gZW50cnktPmRlbHRhX3NpemU7CisJCXR5cGUgPSAoYWxsb3dfb2ZzX2RlbHRhICYmIGVudHJ5LT5kZWx0YS0+aWR4Lm9mZnNldCkgPworCQkJT0JKX09GU19ERUxUQSA6IE9CSl9SRUZfREVMVEE7CisJfQorCisJaWYgKHN0KQkvKiBsYXJnZSBibG9iIGNhc2UsIGp1c3QgYXNzdW1lIHdlIGRvbid0IGNvbXByZXNzIHdlbGwgKi8KKwkJZGF0YWxlbiA9IHNpemU7CisJZWxzZSBpZiAoZW50cnktPnpfZGVsdGFfc2l6ZSkKKwkJZGF0YWxlbiA9IGVudHJ5LT56X2RlbHRhX3NpemU7CisJZWxzZQorCQlkYXRhbGVuID0gZG9fY29tcHJlc3MoJmJ1Ziwgc2l6ZSk7CisKKwkvKgorCSAqIFRoZSBvYmplY3QgaGVhZGVyIGlzIGEgYnl0ZSBvZiAndHlwZScgZm9sbG93ZWQgYnkgemVybyBvcgorCSAqIG1vcmUgYnl0ZXMgb2YgbGVuZ3RoLgorCSAqLworCWhkcmxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIodHlwZSwgc2l6ZSwgaGVhZGVyKTsKKworCWlmICh0eXBlID09IE9CSl9PRlNfREVMVEEpIHsKKwkJLyoKKwkJICogRGVsdGFzIHdpdGggcmVsYXRpdmUgYmFzZSBjb250YWluIGFuIGFkZGl0aW9uYWwKKwkJICogZW5jb2Rpbmcgb2YgdGhlIHJlbGF0aXZlIG9mZnNldCBmb3IgdGhlIGRlbHRhCisJCSAqIGJhc2UgZnJvbSB0aGlzIG9iamVjdCdzIHBvc2l0aW9uIGluIHRoZSBwYWNrLgorCQkgKi8KKwkJb2ZmX3Qgb2ZzID0gZW50cnktPmlkeC5vZmZzZXQgLSBlbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQ7CisJCXVuc2lnbmVkIHBvcyA9IHNpemVvZihkaGVhZGVyKSAtIDE7CisJCWRoZWFkZXJbcG9zXSA9IG9mcyAmIDEyNzsKKwkJd2hpbGUgKG9mcyA+Pj0gNykKKwkJCWRoZWFkZXJbLS1wb3NdID0gMTI4IHwgKC0tb2ZzICYgMTI3KTsKKwkJaWYgKGxpbWl0ICYmIGhkcmxlbiArIHNpemVvZihkaGVhZGVyKSAtIHBvcyArIGRhdGFsZW4gKyAyMCA+PSBsaW1pdCkgeworCQkJaWYgKHN0KQorCQkJCWNsb3NlX2lzdHJlYW0oc3QpOworCQkJZnJlZShidWYpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc2hhMXdyaXRlKGYsIGhlYWRlciwgaGRybGVuKTsKKwkJc2hhMXdyaXRlKGYsIGRoZWFkZXIgKyBwb3MsIHNpemVvZihkaGVhZGVyKSAtIHBvcyk7CisJCWhkcmxlbiArPSBzaXplb2YoZGhlYWRlcikgLSBwb3M7CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJLyoKKwkJICogRGVsdGFzIHdpdGggYSBiYXNlIHJlZmVyZW5jZSBjb250YWluCisJCSAqIGFuIGFkZGl0aW9uYWwgMjAgYnl0ZXMgZm9yIHRoZSBiYXNlIHNoYTEuCisJCSAqLworCQlpZiAobGltaXQgJiYgaGRybGVuICsgMjAgKyBkYXRhbGVuICsgMjAgPj0gbGltaXQpIHsKKwkJCWlmIChzdCkKKwkJCQljbG9zZV9pc3RyZWFtKHN0KTsKKwkJCWZyZWUoYnVmKTsKKwkJCXJldHVybiAwOworCQl9CisJCXNoYTF3cml0ZShmLCBoZWFkZXIsIGhkcmxlbik7CisJCXNoYTF3cml0ZShmLCBlbnRyeS0+ZGVsdGEtPmlkeC5zaGExLCAyMCk7CisJCWhkcmxlbiArPSAyMDsKKwl9IGVsc2UgeworCQlpZiAobGltaXQgJiYgaGRybGVuICsgZGF0YWxlbiArIDIwID49IGxpbWl0KSB7CisJCQlpZiAoc3QpCisJCQkJY2xvc2VfaXN0cmVhbShzdCk7CisJCQlmcmVlKGJ1Zik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzaGExd3JpdGUoZiwgaGVhZGVyLCBoZHJsZW4pOworCX0KKwlpZiAoc3QpIHsKKwkJZGF0YWxlbiA9IHdyaXRlX2xhcmdlX2Jsb2JfZGF0YShzdCwgZiwgZW50cnktPmlkeC5zaGExKTsKKwkJY2xvc2VfaXN0cmVhbShzdCk7CisJfSBlbHNlIHsKKwkJc2hhMXdyaXRlKGYsIGJ1ZiwgZGF0YWxlbik7CisJCWZyZWUoYnVmKTsKKwl9CisKKwlyZXR1cm4gaGRybGVuICsgZGF0YWxlbjsKK30KKworLyogUmV0dXJuIDAgaWYgd2Ugd2lsbCBidXN0IHRoZSBwYWNrLXNpemUgbGltaXQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX3JldXNlX29iamVjdChzdHJ1Y3Qgc2hhMWZpbGUgKmYsIHN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5LAorCQkJCQl1bnNpZ25lZCBsb25nIGxpbWl0LCBpbnQgdXNhYmxlX2RlbHRhKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gZW50cnktPmluX3BhY2s7CisJc3RydWN0IHBhY2tfd2luZG93ICp3X2N1cnMgPSBOVUxMOworCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aWR4OworCW9mZl90IG9mZnNldDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBlbnRyeS0+dHlwZTsKKwl1bnNpZ25lZCBsb25nIGRhdGFsZW47CisJdW5zaWduZWQgY2hhciBoZWFkZXJbMTBdLCBkaGVhZGVyWzEwXTsKKwl1bnNpZ25lZCBoZHJsZW47CisKKwlpZiAoZW50cnktPmRlbHRhKQorCQl0eXBlID0gKGFsbG93X29mc19kZWx0YSAmJiBlbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQpID8KKwkJCU9CSl9PRlNfREVMVEEgOiBPQkpfUkVGX0RFTFRBOworCWhkcmxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIodHlwZSwgZW50cnktPnNpemUsIGhlYWRlcik7CisKKwlvZmZzZXQgPSBlbnRyeS0+aW5fcGFja19vZmZzZXQ7CisJcmV2aWR4ID0gZmluZF9wYWNrX3JldmluZGV4KHAsIG9mZnNldCk7CisJZGF0YWxlbiA9IHJldmlkeFsxXS5vZmZzZXQgLSBvZmZzZXQ7CisJaWYgKCFwYWNrX3RvX3N0ZG91dCAmJiBwLT5pbmRleF92ZXJzaW9uID4gMSAmJgorCSAgICBjaGVja19wYWNrX2NyYyhwLCAmd19jdXJzLCBvZmZzZXQsIGRhdGFsZW4sIHJldmlkeC0+bnIpKSB7CisJCWVycm9yKCJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIiwgc2hhMV90b19oZXgoZW50cnktPmlkeC5zaGExKSk7CisJCXVudXNlX3BhY2soJndfY3Vycyk7CisJCXJldHVybiB3cml0ZV9ub19yZXVzZV9vYmplY3QoZiwgZW50cnksIGxpbWl0LCB1c2FibGVfZGVsdGEpOworCX0KKworCW9mZnNldCArPSBlbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZTsKKwlkYXRhbGVuIC09IGVudHJ5LT5pbl9wYWNrX2hlYWRlcl9zaXplOworCisJaWYgKCFwYWNrX3RvX3N0ZG91dCAmJiBwLT5pbmRleF92ZXJzaW9uID09IDEgJiYKKwkgICAgY2hlY2tfcGFja19pbmZsYXRlKHAsICZ3X2N1cnMsIG9mZnNldCwgZGF0YWxlbiwgZW50cnktPnNpemUpKSB7CisJCWVycm9yKCJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIiwgc2hhMV90b19oZXgoZW50cnktPmlkeC5zaGExKSk7CisJCXVudXNlX3BhY2soJndfY3Vycyk7CisJCXJldHVybiB3cml0ZV9ub19yZXVzZV9vYmplY3QoZiwgZW50cnksIGxpbWl0LCB1c2FibGVfZGVsdGEpOworCX0KKworCWlmICh0eXBlID09IE9CSl9PRlNfREVMVEEpIHsKKwkJb2ZmX3Qgb2ZzID0gZW50cnktPmlkeC5vZmZzZXQgLSBlbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQ7CisJCXVuc2lnbmVkIHBvcyA9IHNpemVvZihkaGVhZGVyKSAtIDE7CisJCWRoZWFkZXJbcG9zXSA9IG9mcyAmIDEyNzsKKwkJd2hpbGUgKG9mcyA+Pj0gNykKKwkJCWRoZWFkZXJbLS1wb3NdID0gMTI4IHwgKC0tb2ZzICYgMTI3KTsKKwkJaWYgKGxpbWl0ICYmIGhkcmxlbiArIHNpemVvZihkaGVhZGVyKSAtIHBvcyArIGRhdGFsZW4gKyAyMCA+PSBsaW1pdCkgeworCQkJdW51c2VfcGFjaygmd19jdXJzKTsKKwkJCXJldHVybiAwOworCQl9CisJCXNoYTF3cml0ZShmLCBoZWFkZXIsIGhkcmxlbik7CisJCXNoYTF3cml0ZShmLCBkaGVhZGVyICsgcG9zLCBzaXplb2YoZGhlYWRlcikgLSBwb3MpOworCQloZHJsZW4gKz0gc2l6ZW9mKGRoZWFkZXIpIC0gcG9zOworCQlyZXVzZWRfZGVsdGErKzsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gT0JKX1JFRl9ERUxUQSkgeworCQlpZiAobGltaXQgJiYgaGRybGVuICsgMjAgKyBkYXRhbGVuICsgMjAgPj0gbGltaXQpIHsKKwkJCXVudXNlX3BhY2soJndfY3Vycyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzaGExd3JpdGUoZiwgaGVhZGVyLCBoZHJsZW4pOworCQlzaGExd3JpdGUoZiwgZW50cnktPmRlbHRhLT5pZHguc2hhMSwgMjApOworCQloZHJsZW4gKz0gMjA7CisJCXJldXNlZF9kZWx0YSsrOworCX0gZWxzZSB7CisJCWlmIChsaW1pdCAmJiBoZHJsZW4gKyBkYXRhbGVuICsgMjAgPj0gbGltaXQpIHsKKwkJCXVudXNlX3BhY2soJndfY3Vycyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzaGExd3JpdGUoZiwgaGVhZGVyLCBoZHJsZW4pOworCX0KKwljb3B5X3BhY2tfZGF0YShmLCBwLCAmd19jdXJzLCBvZmZzZXQsIGRhdGFsZW4pOworCXVudXNlX3BhY2soJndfY3Vycyk7CisJcmV1c2VkKys7CisJcmV0dXJuIGhkcmxlbiArIGRhdGFsZW47Cit9CisKKy8qIFJldHVybiAwIGlmIHdlIHdpbGwgYnVzdCB0aGUgcGFjay1zaXplIGxpbWl0ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV9vYmplY3Qoc3RydWN0IHNoYTFmaWxlICpmLAorCQkJCSAgc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnksCisJCQkJICBvZmZfdCB3cml0ZV9vZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBsaW1pdCwgbGVuOworCWludCB1c2FibGVfZGVsdGEsIHRvX3JldXNlOworCisJaWYgKCFwYWNrX3RvX3N0ZG91dCkKKwkJY3JjMzJfYmVnaW4oZik7CisKKwkvKiBhcHBseSBzaXplIGxpbWl0IGlmIGxpbWl0ZWQgcGFja3NpemUgYW5kIG5vdCBmaXJzdCBvYmplY3QgKi8KKwlpZiAoIXBhY2tfc2l6ZV9saW1pdCB8fCAhbnJfd3JpdHRlbikKKwkJbGltaXQgPSAwOworCWVsc2UgaWYgKHBhY2tfc2l6ZV9saW1pdCA8PSB3cml0ZV9vZmZzZXQpCisJCS8qCisJCSAqIHRoZSBlYXJsaWVyIG9iamVjdCBkaWQgbm90IGZpdCB0aGUgbGltaXQ7IGF2b2lkCisJCSAqIG1pc3Rha2luZyB0aGlzIHdpdGggdW5saW1pdGVkIChpLmUuIGxpbWl0ID0gMCkuCisJCSAqLworCQlsaW1pdCA9IDE7CisJZWxzZQorCQlsaW1pdCA9IHBhY2tfc2l6ZV9saW1pdCAtIHdyaXRlX29mZnNldDsKKworCWlmICghZW50cnktPmRlbHRhKQorCQl1c2FibGVfZGVsdGEgPSAwOwkvKiBubyBkZWx0YSAqLworCWVsc2UgaWYgKCFwYWNrX3NpemVfbGltaXQpCisJICAgICAgIHVzYWJsZV9kZWx0YSA9IDE7CS8qIHVubGltaXRlZCBwYWNrZmlsZSAqLworCWVsc2UgaWYgKGVudHJ5LT5kZWx0YS0+aWR4Lm9mZnNldCA9PSAob2ZmX3QpLTEpCisJCXVzYWJsZV9kZWx0YSA9IDA7CS8qIGJhc2Ugd2FzIHdyaXR0ZW4gdG8gYW5vdGhlciBwYWNrICovCisJZWxzZSBpZiAoZW50cnktPmRlbHRhLT5pZHgub2Zmc2V0KQorCQl1c2FibGVfZGVsdGEgPSAxOwkvKiBiYXNlIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgcGFjayAqLworCWVsc2UKKwkJdXNhYmxlX2RlbHRhID0gMDsJLyogYmFzZSBjb3VsZCBlbmQgdXAgaW4gYW5vdGhlciBwYWNrICovCisKKwlpZiAoIXJldXNlX29iamVjdCkKKwkJdG9fcmV1c2UgPSAwOwkvKiBleHBsaWNpdCAqLworCWVsc2UgaWYgKCFlbnRyeS0+aW5fcGFjaykKKwkJdG9fcmV1c2UgPSAwOwkvKiBjYW4ndCByZXVzZSB3aGF0IHdlIGRvbid0IGhhdmUgKi8KKwllbHNlIGlmIChlbnRyeS0+dHlwZSA9PSBPQkpfUkVGX0RFTFRBIHx8IGVudHJ5LT50eXBlID09IE9CSl9PRlNfREVMVEEpCisJCQkJLyogY2hlY2tfb2JqZWN0KCkgZGVjaWRlZCBpdCBmb3IgdXMgLi4uICovCisJCXRvX3JldXNlID0gdXNhYmxlX2RlbHRhOworCQkJCS8qIC4uLiBidXQgcGFjayBzcGxpdCBtYXkgb3ZlcnJpZGUgdGhhdCAqLworCWVsc2UgaWYgKGVudHJ5LT50eXBlICE9IGVudHJ5LT5pbl9wYWNrX3R5cGUpCisJCXRvX3JldXNlID0gMDsJLyogcGFjayBoYXMgZGVsdGEgd2hpY2ggaXMgdW51c2FibGUgKi8KKwllbHNlIGlmIChlbnRyeS0+ZGVsdGEpCisJCXRvX3JldXNlID0gMDsJLyogd2Ugd2FudCB0byBwYWNrIGFmcmVzaCAqLworCWVsc2UKKwkJdG9fcmV1c2UgPSAxOwkvKiB3ZSBoYXZlIGl0IGluLXBhY2sgdW5kZWx0aWZpZWQsCisJCQkJICogYW5kIHdlIGRvIG5vdCBuZWVkIHRvIGRlbHRpZnkgaXQuCisJCQkJICovCisKKwlpZiAoIXRvX3JldXNlKQorCQlsZW4gPSB3cml0ZV9ub19yZXVzZV9vYmplY3QoZiwgZW50cnksIGxpbWl0LCB1c2FibGVfZGVsdGEpOworCWVsc2UKKwkJbGVuID0gd3JpdGVfcmV1c2Vfb2JqZWN0KGYsIGVudHJ5LCBsaW1pdCwgdXNhYmxlX2RlbHRhKTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAodXNhYmxlX2RlbHRhKQorCQl3cml0dGVuX2RlbHRhKys7CisJd3JpdHRlbisrOworCWlmICghcGFja190b19zdGRvdXQpCisJCWVudHJ5LT5pZHguY3JjMzIgPSBjcmMzMl9lbmQoZik7CisJcmV0dXJuIGxlbjsKK30KKworZW51bSB3cml0ZV9vbmVfc3RhdHVzIHsKKwlXUklURV9PTkVfU0tJUCA9IC0xLCAvKiBhbHJlYWR5IHdyaXR0ZW4gKi8KKwlXUklURV9PTkVfQlJFQUsgPSAwLCAvKiB3cml0aW5nIHRoaXMgd2lsbCBidXN0IHRoZSBsaW1pdDsgbm90IHdyaXR0ZW4gKi8KKwlXUklURV9PTkVfV1JJVFRFTiA9IDEsIC8qIG5vcm1hbCAqLworCVdSSVRFX09ORV9SRUNVUlNJVkUgPSAyIC8qIGFscmVhZHkgc2NoZWR1bGVkIHRvIGJlIHdyaXR0ZW4gKi8KK307CisKK3N0YXRpYyBlbnVtIHdyaXRlX29uZV9zdGF0dXMgd3JpdGVfb25lKHN0cnVjdCBzaGExZmlsZSAqZiwKKwkJCQkgICAgICAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSwKKwkJCQkgICAgICAgb2ZmX3QgKm9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHJlY3Vyc2luZzsKKworCS8qCisJICogd2Ugc2V0IG9mZnNldCB0byAxICh3aGljaCBpcyBhbiBpbXBvc3NpYmxlIHZhbHVlKSB0byBtYXJrCisJICogdGhlIGZhY3QgdGhhdCB0aGlzIG9iamVjdCBpcyBpbnZvbHZlZCBpbiAid3JpdGUgaXRzIGJhc2UKKwkgKiBmaXJzdCBiZWZvcmUgd3JpdGluZyBhIGRlbHRpZmllZCBvYmplY3QiIHJlY3Vyc2lvbi4KKwkgKi8KKwlyZWN1cnNpbmcgPSAoZS0+aWR4Lm9mZnNldCA9PSAxKTsKKwlpZiAocmVjdXJzaW5nKSB7CisJCXdhcm5pbmcoInJlY3Vyc2l2ZSBkZWx0YSBkZXRlY3RlZCBmb3Igb2JqZWN0ICVzIiwKKwkJCXNoYTFfdG9faGV4KGUtPmlkeC5zaGExKSk7CisJCXJldHVybiBXUklURV9PTkVfUkVDVVJTSVZFOworCX0gZWxzZSBpZiAoZS0+aWR4Lm9mZnNldCB8fCBlLT5wcmVmZXJyZWRfYmFzZSkgeworCQkvKiBvZmZzZXQgaXMgbm9uIHplcm8gaWYgb2JqZWN0IGlzIHdyaXR0ZW4gYWxyZWFkeS4gKi8KKwkJcmV0dXJuIFdSSVRFX09ORV9TS0lQOworCX0KKworCS8qIGlmIHdlIGFyZSBkZWx0aWZpZWQsIHdyaXRlIG91dCBiYXNlIG9iamVjdCBmaXJzdC4gKi8KKwlpZiAoZS0+ZGVsdGEpIHsKKwkJZS0+aWR4Lm9mZnNldCA9IDE7IC8qIG5vdyByZWN1cnNlICovCisJCXN3aXRjaCAod3JpdGVfb25lKGYsIGUtPmRlbHRhLCBvZmZzZXQpKSB7CisJCWNhc2UgV1JJVEVfT05FX1JFQ1VSU0lWRToKKwkJCS8qIHdlIGNhbm5vdCBkZXBlbmQgb24gdGhpcyBvbmUgKi8KKwkJCWUtPmRlbHRhID0gTlVMTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCWNhc2UgV1JJVEVfT05FX0JSRUFLOgorCQkJZS0+aWR4Lm9mZnNldCA9IHJlY3Vyc2luZzsKKwkJCXJldHVybiBXUklURV9PTkVfQlJFQUs7CisJCX0KKwl9CisKKwllLT5pZHgub2Zmc2V0ID0gKm9mZnNldDsKKwlzaXplID0gd3JpdGVfb2JqZWN0KGYsIGUsICpvZmZzZXQpOworCWlmICghc2l6ZSkgeworCQllLT5pZHgub2Zmc2V0ID0gcmVjdXJzaW5nOworCQlyZXR1cm4gV1JJVEVfT05FX0JSRUFLOworCX0KKwl3cml0dGVuX2xpc3RbbnJfd3JpdHRlbisrXSA9ICZlLT5pZHg7CisKKwkvKiBtYWtlIHN1cmUgb2ZmX3QgaXMgc3VmZmljaWVudGx5IGxhcmdlIG5vdCB0byB3cmFwICovCisJaWYgKHNpZ25lZF9hZGRfb3ZlcmZsb3dzKCpvZmZzZXQsIHNpemUpKQorCQlkaWUoInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiKTsKKwkqb2Zmc2V0ICs9IHNpemU7CisJcmV0dXJuIFdSSVRFX09ORV9XUklUVEVOOworfQorCitzdGF0aWMgaW50IG1hcmtfdGFnZ2VkKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLAorCQkgICAgICAgdm9pZCAqY2JfZGF0YSkKK3sKKwl1bnNpZ25lZCBjaGFyIHBlZWxlZFsyMF07CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkgPSBsb2NhdGVfb2JqZWN0X2VudHJ5KHNoYTEpOworCisJaWYgKGVudHJ5KQorCQllbnRyeS0+dGFnZ2VkID0gMTsKKwlpZiAoIXBlZWxfcmVmKHBhdGgsIHBlZWxlZCkpIHsKKwkJZW50cnkgPSBsb2NhdGVfb2JqZWN0X2VudHJ5KHBlZWxlZCk7CisJCWlmIChlbnRyeSkKKwkJCWVudHJ5LT50YWdnZWQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZF90b193cml0ZV9vcmRlcihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqd28sCisJCQkgICAgICAgdW5zaWduZWQgaW50ICplbmRwLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUpCit7CisJaWYgKGUtPmZpbGxlZCkKKwkJcmV0dXJuOworCXdvWygqZW5kcCkrK10gPSBlOworCWUtPmZpbGxlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9kZXNjZW5kYW50c190b193cml0ZV9vcmRlcihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqd28sCisJCQkJCSAgIHVuc2lnbmVkIGludCAqZW5kcCwKKwkJCQkJICAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlpbnQgYWRkX3RvX29yZGVyID0gMTsKKwl3aGlsZSAoZSkgeworCQlpZiAoYWRkX3RvX29yZGVyKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpzOworCQkJLyogYWRkIHRoaXMgbm9kZS4uLiAqLworCQkJYWRkX3RvX3dyaXRlX29yZGVyKHdvLCBlbmRwLCBlKTsKKwkJCS8qIGFsbCBpdHMgc2libGluZ3MuLi4gKi8KKwkJCWZvciAocyA9IGUtPmRlbHRhX3NpYmxpbmc7IHM7IHMgPSBzLT5kZWx0YV9zaWJsaW5nKSB7CisJCQkJYWRkX3RvX3dyaXRlX29yZGVyKHdvLCBlbmRwLCBzKTsKKwkJCX0KKwkJfQorCQkvKiBkcm9wIGRvd24gYSBsZXZlbCB0byBhZGQgbGVmdCBzdWJ0cmVlIG5vZGVzIGlmIHBvc3NpYmxlICovCisJCWlmIChlLT5kZWx0YV9jaGlsZCkgeworCQkJYWRkX3RvX29yZGVyID0gMTsKKwkJCWUgPSBlLT5kZWx0YV9jaGlsZDsKKwkJfSBlbHNlIHsKKwkJCWFkZF90b19vcmRlciA9IDA7CisJCQkvKiBvdXIgc2libGluZyBtaWdodCBoYXZlIHNvbWUgY2hpbGRyZW4sIGl0IGlzIG5leHQgKi8KKwkJCWlmIChlLT5kZWx0YV9zaWJsaW5nKSB7CisJCQkJZSA9IGUtPmRlbHRhX3NpYmxpbmc7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBnbyBiYWNrIHRvIG91ciBwYXJlbnQgbm9kZSAqLworCQkJZSA9IGUtPmRlbHRhOworCQkJd2hpbGUgKGUgJiYgIWUtPmRlbHRhX3NpYmxpbmcpIHsKKwkJCQkvKiB3ZSdyZSBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHN1YnRyZWUsIGtlZXAKKwkJCQkgKiBnb2luZyB1cCB1bnRpbCB3ZSBjYW4gZ28gcmlnaHQgYWdhaW4gKi8KKwkJCQllID0gZS0+ZGVsdGE7CisJCQl9CisJCQlpZiAoIWUpIHsKKwkJCQkvKiBkb25lLSB3ZSBoaXQgb3VyIG9yaWdpbmFsIHJvb3Qgbm9kZSAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIHBhc3MgaXQgb2ZmIHRvIHNpYmxpbmcgYXQgdGhpcyBsZXZlbCAqLworCQkJZSA9IGUtPmRlbHRhX3NpYmxpbmc7CisJCX0KKwl9OworfQorCitzdGF0aWMgdm9pZCBhZGRfZmFtaWx5X3RvX3dyaXRlX29yZGVyKHN0cnVjdCBvYmplY3RfZW50cnkgKip3bywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmVuZHAsCisJCQkJICAgICAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpyb290OworCisJZm9yIChyb290ID0gZTsgcm9vdC0+ZGVsdGE7IHJvb3QgPSByb290LT5kZWx0YSkKKwkJOyAvKiBub3RoaW5nICovCisJYWRkX2Rlc2NlbmRhbnRzX3RvX3dyaXRlX29yZGVyKHdvLCBlbmRwLCByb290KTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKipjb21wdXRlX3dyaXRlX29yZGVyKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGksIHdvX2VuZCwgbGFzdF91bnRhZ2dlZDsKKworCXN0cnVjdCBvYmplY3RfZW50cnkgKip3byA9IHhtYWxsb2MobnJfb2JqZWN0cyAqIHNpemVvZigqd28pKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJb2JqZWN0c1tpXS50YWdnZWQgPSAwOworCQlvYmplY3RzW2ldLmZpbGxlZCA9IDA7CisJCW9iamVjdHNbaV0uZGVsdGFfY2hpbGQgPSBOVUxMOworCQlvYmplY3RzW2ldLmRlbHRhX3NpYmxpbmcgPSBOVUxMOworCX0KKworCS8qCisJICogRnVsbHkgY29ubmVjdCBkZWx0YV9jaGlsZC9kZWx0YV9zaWJsaW5nIG5ldHdvcmsuCisJICogTWFrZSBzdXJlIGRlbHRhX3NpYmxpbmcgaXMgc29ydGVkIGluIHRoZSBvcmlnaW5hbAorCSAqIHJlY2VuY3kgb3JkZXIuCisJICovCisJZm9yIChpID0gbnJfb2JqZWN0czsgaSA+IDA7KSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmUgPSAmb2JqZWN0c1stLWldOworCQlpZiAoIWUtPmRlbHRhKQorCQkJY29udGludWU7CisJCS8qIE1hcmsgbWUgYXMgdGhlIGZpcnN0IGNoaWxkICovCisJCWUtPmRlbHRhX3NpYmxpbmcgPSBlLT5kZWx0YS0+ZGVsdGFfY2hpbGQ7CisJCWUtPmRlbHRhLT5kZWx0YV9jaGlsZCA9IGU7CisJfQorCisJLyoKKwkgKiBNYXJrIG9iamVjdHMgdGhhdCBhcmUgYXQgdGhlIHRpcCBvZiB0YWdzLgorCSAqLworCWZvcl9lYWNoX3RhZ19yZWYobWFya190YWdnZWQsIE5VTEwpOworCisJLyoKKwkgKiBHaXZlIHRoZSBvYmplY3RzIGluIHRoZSBvcmlnaW5hbCByZWNlbmN5IG9yZGVyIHVudGlsCisJICogd2Ugc2VlIGEgdGFnZ2VkIHRpcC4KKwkgKi8KKwlmb3IgKGkgPSB3b19lbmQgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCWlmIChvYmplY3RzW2ldLnRhZ2dlZCkKKwkJCWJyZWFrOworCQlhZGRfdG9fd3JpdGVfb3JkZXIod28sICZ3b19lbmQsICZvYmplY3RzW2ldKTsKKwl9CisJbGFzdF91bnRhZ2dlZCA9IGk7CisKKwkvKgorCSAqIFRoZW4gZmlsbCBhbGwgdGhlIHRhZ2dlZCB0aXBzLgorCSAqLworCWZvciAoOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCWlmIChvYmplY3RzW2ldLnRhZ2dlZCkKKwkJCWFkZF90b193cml0ZV9vcmRlcih3bywgJndvX2VuZCwgJm9iamVjdHNbaV0pOworCX0KKworCS8qCisJICogQW5kIHRoZW4gYWxsIHJlbWFpbmluZyBjb21taXRzIGFuZCB0YWdzLgorCSAqLworCWZvciAoaSA9IGxhc3RfdW50YWdnZWQ7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJaWYgKG9iamVjdHNbaV0udHlwZSAhPSBPQkpfQ09NTUlUICYmCisJCSAgICBvYmplY3RzW2ldLnR5cGUgIT0gT0JKX1RBRykKKwkJCWNvbnRpbnVlOworCQlhZGRfdG9fd3JpdGVfb3JkZXIod28sICZ3b19lbmQsICZvYmplY3RzW2ldKTsKKwl9CisKKwkvKgorCSAqIEFuZCB0aGVuIGFsbCB0aGUgdHJlZXMuCisJICovCisJZm9yIChpID0gbGFzdF91bnRhZ2dlZDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlpZiAob2JqZWN0c1tpXS50eXBlICE9IE9CSl9UUkVFKQorCQkJY29udGludWU7CisJCWFkZF90b193cml0ZV9vcmRlcih3bywgJndvX2VuZCwgJm9iamVjdHNbaV0pOworCX0KKworCS8qCisJICogRmluYWxseSBhbGwgdGhlIHJlc3QgaW4gcmVhbGx5IHRpZ2h0IG9yZGVyCisJICovCisJZm9yIChpID0gbGFzdF91bnRhZ2dlZDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlpZiAoIW9iamVjdHNbaV0uZmlsbGVkKQorCQkJYWRkX2ZhbWlseV90b193cml0ZV9vcmRlcih3bywgJndvX2VuZCwgJm9iamVjdHNbaV0pOworCX0KKworCWlmICh3b19lbmQgIT0gbnJfb2JqZWN0cykKKwkJZGllKCJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICUiUFJJdTMyLCB3b19lbmQsIG5yX29iamVjdHMpOworCisJcmV0dXJuIHdvOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9wYWNrX2ZpbGUodm9pZCkKK3sKKwl1aW50MzJfdCBpID0gMCwgajsKKwlzdHJ1Y3Qgc2hhMWZpbGUgKmY7CisJb2ZmX3Qgb2Zmc2V0OworCXVpbnQzMl90IG5yX3JlbWFpbmluZyA9IG5yX3Jlc3VsdDsKKwl0aW1lX3QgbGFzdF9tdGltZSA9IDA7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqKndyaXRlX29yZGVyOworCisJaWYgKHByb2dyZXNzID4gcGFja190b19zdGRvdXQpCisJCXByb2dyZXNzX3N0YXRlID0gc3RhcnRfcHJvZ3Jlc3MoIldyaXRpbmcgb2JqZWN0cyIsIG5yX3Jlc3VsdCk7CisJd3JpdHRlbl9saXN0ID0geG1hbGxvYyhucl9vYmplY3RzICogc2l6ZW9mKCp3cml0dGVuX2xpc3QpKTsKKwl3cml0ZV9vcmRlciA9IGNvbXB1dGVfd3JpdGVfb3JkZXIoKTsKKworCWRvIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY2hhciAqcGFja190bXBfbmFtZSA9IE5VTEw7CisKKwkJaWYgKHBhY2tfdG9fc3Rkb3V0KQorCQkJZiA9IHNoYTFmZF90aHJvdWdocHV0KDEsICI8c3Rkb3V0PiIsIHByb2dyZXNzX3N0YXRlKTsKKwkJZWxzZQorCQkJZiA9IGNyZWF0ZV90bXBfcGFja2ZpbGUoJnBhY2tfdG1wX25hbWUpOworCisJCW9mZnNldCA9IHdyaXRlX3BhY2tfaGVhZGVyKGYsIG5yX3JlbWFpbmluZyk7CisJCWlmICghb2Zmc2V0KQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgcGFjayBoZWFkZXIiKTsKKwkJbnJfd3JpdHRlbiA9IDA7CisJCWZvciAoOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplID0gd3JpdGVfb3JkZXJbaV07CisJCQlpZiAod3JpdGVfb25lKGYsIGUsICZvZmZzZXQpID09IFdSSVRFX09ORV9CUkVBSykKKwkJCQlicmVhazsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3Nfc3RhdGUsIHdyaXR0ZW4pOworCQl9CisKKwkJLyoKKwkJICogRGlkIHdlIHdyaXRlIHRoZSB3cm9uZyAjIGVudHJpZXMgaW4gdGhlIGhlYWRlcj8KKwkJICogSWYgc28sIHJld3JpdGUgaXQgbGlrZSBpbiBmYXN0LWltcG9ydAorCQkgKi8KKwkJaWYgKHBhY2tfdG9fc3Rkb3V0KSB7CisJCQlzaGExY2xvc2UoZiwgc2hhMSwgQ1NVTV9DTE9TRSk7CisJCX0gZWxzZSBpZiAobnJfd3JpdHRlbiA9PSBucl9yZW1haW5pbmcpIHsKKwkJCXNoYTFjbG9zZShmLCBzaGExLCBDU1VNX0ZTWU5DKTsKKwkJfSBlbHNlIHsKKwkJCWludCBmZCA9IHNoYTFjbG9zZShmLCBzaGExLCAwKTsKKwkJCWZpeHVwX3BhY2tfaGVhZGVyX2Zvb3RlcihmZCwgc2hhMSwgcGFja190bXBfbmFtZSwKKwkJCQkJCSBucl93cml0dGVuLCBzaGExLCBvZmZzZXQpOworCQkJY2xvc2UoZmQpOworCQl9CisKKwkJaWYgKCFwYWNrX3RvX3N0ZG91dCkgeworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQljaGFyIHRtcG5hbWVbUEFUSF9NQVhdOworCisJCQkvKgorCQkJICogUGFja3MgYXJlIHJ1bnRpbWUgYWNjZXNzZWQgaW4gdGhlaXIgbXRpbWUKKwkJCSAqIG9yZGVyIHNpbmNlIG5ld2VyIHBhY2tzIGFyZSBtb3JlIGxpa2VseSB0byBjb250YWluCisJCQkgKiB5b3VuZ2VyIG9iamVjdHMuICBTbyBpZiB3ZSBhcmUgY3JlYXRpbmcgbXVsdGlwbGUKKwkJCSAqIHBhY2tzIHRoZW4gd2Ugc2hvdWxkIG1vZGlmeSB0aGUgbXRpbWUgb2YgbGF0ZXIgb25lcworCQkJICogdG8gcHJlc2VydmUgdGhpcyBwcm9wZXJ0eS4KKwkJCSAqLworCQkJaWYgKHN0YXQocGFja190bXBfbmFtZSwgJnN0KSA8IDApIHsKKwkJCQl3YXJuaW5nKCJmYWlsZWQgdG8gc3RhdCAlczogJXMiLAorCQkJCQlwYWNrX3RtcF9uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJfSBlbHNlIGlmICghbGFzdF9tdGltZSkgeworCQkJCWxhc3RfbXRpbWUgPSBzdC5zdF9tdGltZTsKKwkJCX0gZWxzZSB7CisJCQkJc3RydWN0IHV0aW1idWYgdXRiOworCQkJCXV0Yi5hY3RpbWUgPSBzdC5zdF9hdGltZTsKKwkJCQl1dGIubW9kdGltZSA9IC0tbGFzdF9tdGltZTsKKwkJCQlpZiAodXRpbWUocGFja190bXBfbmFtZSwgJnV0YikgPCAwKQorCQkJCQl3YXJuaW5nKCJmYWlsZWQgdXRpbWUoKSBvbiAlczogJXMiLAorCQkJCQkJdG1wbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCX0KKworCQkJLyogRW5vdWdoIHNwYWNlIGZvciAiLTxzaGEtMT4ucGFjayI/ICovCisJCQlpZiAoc2l6ZW9mKHRtcG5hbWUpIDw9IHN0cmxlbihiYXNlX25hbWUpICsgNTApCisJCQkJZGllKCJwYWNrIGJhc2UgbmFtZSAnJXMnIHRvbyBsb25nIiwgYmFzZV9uYW1lKTsKKwkJCXNucHJpbnRmKHRtcG5hbWUsIHNpemVvZih0bXBuYW1lKSwgIiVzLSIsIGJhc2VfbmFtZSk7CisJCQlmaW5pc2hfdG1wX3BhY2tmaWxlKHRtcG5hbWUsIHBhY2tfdG1wX25hbWUsCisJCQkJCSAgICB3cml0dGVuX2xpc3QsIG5yX3dyaXR0ZW4sCisJCQkJCSAgICAmcGFja19pZHhfb3B0cywgc2hhMSk7CisJCQlmcmVlKHBhY2tfdG1wX25hbWUpOworCQkJcHV0cyhzaGExX3RvX2hleChzaGExKSk7CisJCX0KKworCQkvKiBtYXJrIHdyaXR0ZW4gb2JqZWN0cyBhcyB3cml0dGVuIHRvIHByZXZpb3VzIHBhY2sgKi8KKwkJZm9yIChqID0gMDsgaiA8IG5yX3dyaXR0ZW47IGorKykgeworCQkJd3JpdHRlbl9saXN0W2pdLT5vZmZzZXQgPSAob2ZmX3QpLTE7CisJCX0KKwkJbnJfcmVtYWluaW5nIC09IG5yX3dyaXR0ZW47CisJfSB3aGlsZSAobnJfcmVtYWluaW5nICYmIGkgPCBucl9vYmplY3RzKTsKKworCWZyZWUod3JpdHRlbl9saXN0KTsKKwlmcmVlKHdyaXRlX29yZGVyKTsKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzc19zdGF0ZSk7CisJaWYgKHdyaXR0ZW4gIT0gbnJfcmVzdWx0KQorCQlkaWUoIndyb3RlICUiUFJJdTMyIiBvYmplY3RzIHdoaWxlIGV4cGVjdGluZyAlIlBSSXUzMiwKKwkJCXdyaXR0ZW4sIG5yX3Jlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IHVpOworCW1lbWNweSgmdWksIHNoYTEsIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKwlpID0gdWkgJSBvYmplY3RfaXhfaGFzaHN6OworCXdoaWxlICgwIDwgb2JqZWN0X2l4W2ldKSB7CisJCWlmICghaGFzaGNtcChzaGExLCBvYmplY3RzW29iamVjdF9peFtpXSAtIDFdLmlkeC5zaGExKSkKKwkJCXJldHVybiBpOworCQlpZiAoKytpID09IG9iamVjdF9peF9oYXNoc3opCisJCQlpID0gMDsKKwl9CisJcmV0dXJuIC0xIC0gaTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKmxvY2F0ZV9vYmplY3RfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgaTsKKworCWlmICghb2JqZWN0X2l4X2hhc2hzeikKKwkJcmV0dXJuIE5VTEw7CisKKwlpID0gbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKHNoYTEpOworCWlmICgwIDw9IGkpCisJCXJldHVybiAmb2JqZWN0c1tvYmplY3RfaXhbaV0tMV07CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJlaGFzaF9vYmplY3RzKHZvaWQpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZTsKKworCW9iamVjdF9peF9oYXNoc3ogPSBucl9vYmplY3RzICogMzsKKwlpZiAob2JqZWN0X2l4X2hhc2hzeiA8IDEwMjQpCisJCW9iamVjdF9peF9oYXNoc3ogPSAxMDI0OworCW9iamVjdF9peCA9IHhyZWFsbG9jKG9iamVjdF9peCwgc2l6ZW9mKGludCkgKiBvYmplY3RfaXhfaGFzaHN6KTsKKwltZW1zZXQob2JqZWN0X2l4LCAwLCBzaXplb2YoaW50KSAqIG9iamVjdF9peF9oYXNoc3opOworCWZvciAoaSA9IDAsIG9lID0gb2JqZWN0czsgaSA8IG5yX29iamVjdHM7IGkrKywgb2UrKykgeworCQlpbnQgaXggPSBsb2NhdGVfb2JqZWN0X2VudHJ5X2hhc2gob2UtPmlkeC5zaGExKTsKKwkJaWYgKDAgPD0gaXgpCisJCQljb250aW51ZTsKKwkJaXggPSAtMSAtIGl4OworCQlvYmplY3RfaXhbaXhdID0gaSArIDE7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbmFtZV9oYXNoKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdW5zaWduZWQgYywgaGFzaCA9IDA7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGlzIGVmZmVjdGl2ZWx5IGp1c3QgY3JlYXRlcyBhIHNvcnRhYmxlIG51bWJlciBmcm9tIHRoZQorCSAqIGxhc3Qgc2l4dGVlbiBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLiBMYXN0IGNoYXJhY3RlcnMKKwkgKiBjb3VudCAibW9zdCIsIHNvIHRoaW5ncyB0aGF0IGVuZCBpbiAiLmMiIHNvcnQgdG9nZXRoZXIuCisJICovCisJd2hpbGUgKChjID0gKm5hbWUrKykgIT0gMCkgeworCQlpZiAoaXNzcGFjZShjKSkKKwkJCWNvbnRpbnVlOworCQloYXNoID0gKGhhc2ggPj4gMikgKyAoYyA8PCAyNCk7CisJfQorCXJldHVybiBoYXNoOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9kZWx0YV9hdHRyX2NoZWNrKHN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2spCit7CisJc3RhdGljIHN0cnVjdCBnaXRfYXR0ciAqYXR0cl9kZWx0YTsKKworCWlmICghYXR0cl9kZWx0YSkKKwkJYXR0cl9kZWx0YSA9IGdpdF9hdHRyKCJkZWx0YSIpOworCisJY2hlY2tbMF0uYXR0ciA9IGF0dHJfZGVsdGE7Cit9CisKK3N0YXRpYyBpbnQgbm9fdHJ5X2RlbHRhKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGdpdF9hdHRyX2NoZWNrIGNoZWNrWzFdOworCisJc2V0dXBfZGVsdGFfYXR0cl9jaGVjayhjaGVjayk7CisJaWYgKGdpdF9jaGVja19hdHRyKHBhdGgsIEFSUkFZX1NJWkUoY2hlY2spLCBjaGVjaykpCisJCXJldHVybiAwOworCWlmIChBVFRSX0ZBTFNFKGNoZWNrLT52YWx1ZSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9vYmplY3RfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBleGNsdWRlKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5OworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwLCAqZm91bmRfcGFjayA9IE5VTEw7CisJb2ZmX3QgZm91bmRfb2Zmc2V0ID0gMDsKKwlpbnQgaXg7CisJdW5zaWduZWQgaGFzaCA9IG5hbWVfaGFzaChuYW1lKTsKKworCWl4ID0gbnJfb2JqZWN0cyA/IGxvY2F0ZV9vYmplY3RfZW50cnlfaGFzaChzaGExKSA6IC0xOworCWlmIChpeCA+PSAwKSB7CisJCWlmIChleGNsdWRlKSB7CisJCQllbnRyeSA9IG9iamVjdHMgKyBvYmplY3RfaXhbaXhdIC0gMTsKKwkJCWlmICghZW50cnktPnByZWZlcnJlZF9iYXNlKQorCQkJCW5yX3Jlc3VsdC0tOworCQkJZW50cnktPnByZWZlcnJlZF9iYXNlID0gMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWV4Y2x1ZGUgJiYgbG9jYWwgJiYgaGFzX2xvb3NlX29iamVjdF9ub25sb2NhbChzaGExKSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQlvZmZfdCBvZmZzZXQgPSBmaW5kX3BhY2tfZW50cnlfb25lKHNoYTEsIHApOworCQlpZiAob2Zmc2V0KSB7CisJCQlpZiAoIWZvdW5kX3BhY2spIHsKKwkJCQlpZiAoIWlzX3BhY2tfdmFsaWQocCkpIHsKKwkJCQkJd2FybmluZygicGFja2ZpbGUgJXMgY2Fubm90IGJlIGFjY2Vzc2VkIiwgcC0+cGFja19uYW1lKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWZvdW5kX29mZnNldCA9IG9mZnNldDsKKwkJCQlmb3VuZF9wYWNrID0gcDsKKwkJCX0KKwkJCWlmIChleGNsdWRlKQorCQkJCWJyZWFrOworCQkJaWYgKGluY3JlbWVudGFsKQorCQkJCXJldHVybiAwOworCQkJaWYgKGxvY2FsICYmICFwLT5wYWNrX2xvY2FsKQorCQkJCXJldHVybiAwOworCQkJaWYgKGlnbm9yZV9wYWNrZWRfa2VlcCAmJiBwLT5wYWNrX2xvY2FsICYmIHAtPnBhY2tfa2VlcCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmIChucl9vYmplY3RzID49IG5yX2FsbG9jKSB7CisJCW5yX2FsbG9jID0gKG5yX2FsbG9jICArIDEwMjQpICogMyAvIDI7CisJCW9iamVjdHMgPSB4cmVhbGxvYyhvYmplY3RzLCBucl9hbGxvYyAqIHNpemVvZigqZW50cnkpKTsKKwl9CisKKwllbnRyeSA9IG9iamVjdHMgKyBucl9vYmplY3RzKys7CisJbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoKmVudHJ5KSk7CisJaGFzaGNweShlbnRyeS0+aWR4LnNoYTEsIHNoYTEpOworCWVudHJ5LT5oYXNoID0gaGFzaDsKKwlpZiAodHlwZSkKKwkJZW50cnktPnR5cGUgPSB0eXBlOworCWlmIChleGNsdWRlKQorCQllbnRyeS0+cHJlZmVycmVkX2Jhc2UgPSAxOworCWVsc2UKKwkJbnJfcmVzdWx0Kys7CisJaWYgKGZvdW5kX3BhY2spIHsKKwkJZW50cnktPmluX3BhY2sgPSBmb3VuZF9wYWNrOworCQllbnRyeS0+aW5fcGFja19vZmZzZXQgPSBmb3VuZF9vZmZzZXQ7CisJfQorCisJaWYgKG9iamVjdF9peF9oYXNoc3ogKiAzIDw9IG5yX29iamVjdHMgKiA0KQorCQlyZWhhc2hfb2JqZWN0cygpOworCWVsc2UKKwkJb2JqZWN0X2l4Wy0xIC0gaXhdID0gbnJfb2JqZWN0czsKKworCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3Nfc3RhdGUsIG5yX29iamVjdHMpOworCisJaWYgKG5hbWUgJiYgbm9fdHJ5X2RlbHRhKG5hbWUpKQorCQllbnRyeS0+bm9fdHJ5X2RlbHRhID0gMTsKKworCXJldHVybiAxOworfQorCitzdHJ1Y3QgcGJhc2VfdHJlZV9jYWNoZSB7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgcmVmOworCWludCB0ZW1wb3Jhcnk7CisJdm9pZCAqdHJlZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdHJlZV9zaXplOworfTsKKworc3RhdGljIHN0cnVjdCBwYmFzZV90cmVlX2NhY2hlICoocGJhc2VfdHJlZV9jYWNoZVsyNTZdKTsKK3N0YXRpYyBpbnQgcGJhc2VfdHJlZV9jYWNoZV9peChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXJldHVybiBzaGExWzBdICUgQVJSQVlfU0laRShwYmFzZV90cmVlX2NhY2hlKTsKK30KK3N0YXRpYyBpbnQgcGJhc2VfdHJlZV9jYWNoZV9peF9pbmNyKGludCBpeCkKK3sKKwlyZXR1cm4gKGl4KzEpICUgQVJSQVlfU0laRShwYmFzZV90cmVlX2NhY2hlKTsKK30KKworc3RhdGljIHN0cnVjdCBwYmFzZV90cmVlIHsKKwlzdHJ1Y3QgcGJhc2VfdHJlZSAqbmV4dDsKKwkvKiBUaGlzIGlzIGEgcGhvbnkgImNhY2hlIiBlbnRyeTsgd2UgYXJlIG5vdAorCSAqIGdvaW5nIHRvIGV2aWN0IGl0IG5vciBmaW5kIGl0IHRocm91Z2ggX2dldCgpCisJICogbWVjaGFuaXNtIC0tIHRoaXMgaXMgZm9yIHRoZSB0b3BsZXZlbCBub2RlIHRoYXQKKwkgKiB3b3VsZCBhbG1vc3QgYWx3YXlzIGNoYW5nZSB3aXRoIGFueSBjb21taXQuCisJICovCisJc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgcGNhY2hlOworfSAqcGJhc2VfdHJlZTsKKworc3RhdGljIHN0cnVjdCBwYmFzZV90cmVlX2NhY2hlICpwYmFzZV90cmVlX2dldChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBwYmFzZV90cmVlX2NhY2hlICplbnQsICpuZW50OworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlpbnQgbmVpZ2g7CisJaW50IG15X2l4ID0gcGJhc2VfdHJlZV9jYWNoZV9peChzaGExKTsKKwlpbnQgYXZhaWxhYmxlX2l4ID0gLTE7CisKKwkvKiBwYmFzZS10cmVlLWNhY2hlIGFjdHMgYXMgYSBsaW1pdGVkIGhhc2h0YWJsZS4KKwkgKiB5b3VyIG9iamVjdCB3aWxsIGJlIGZvdW5kIGF0IHlvdXIgaW5kZXggb3Igd2l0aGluIGEgZmV3CisJICogc2xvdHMgYWZ0ZXIgdGhhdCBzbG90IGlmIGl0IGlzIGNhY2hlZC4KKwkgKi8KKwlmb3IgKG5laWdoID0gMDsgbmVpZ2ggPCA4OyBuZWlnaCsrKSB7CisJCWVudCA9IHBiYXNlX3RyZWVfY2FjaGVbbXlfaXhdOworCQlpZiAoZW50ICYmICFoYXNoY21wKGVudC0+c2hhMSwgc2hhMSkpIHsKKwkJCWVudC0+cmVmKys7CisJCQlyZXR1cm4gZW50OworCQl9CisJCWVsc2UgaWYgKCgoYXZhaWxhYmxlX2l4IDwgMCkgJiYgKCFlbnQgfHwgIWVudC0+cmVmKSkgfHwKKwkJCSAoKDAgPD0gYXZhaWxhYmxlX2l4KSAmJgorCQkJICAoIWVudCAmJiBwYmFzZV90cmVlX2NhY2hlW2F2YWlsYWJsZV9peF0pKSkKKwkJCWF2YWlsYWJsZV9peCA9IG15X2l4OworCQlpZiAoIWVudCkKKwkJCWJyZWFrOworCQlteV9peCA9IHBiYXNlX3RyZWVfY2FjaGVfaXhfaW5jcihteV9peCk7CisJfQorCisJLyogRGlkIG5vdCBmaW5kIG9uZS4gIEVpdGhlciB3ZSBnb3QgYSBib2d1cyByZXF1ZXN0IG9yCisJICogd2UgbmVlZCB0byByZWFkIGFuZCBwZXJoYXBzIGNhY2hlLgorCSAqLworCWRhdGEgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHR5cGUgIT0gT0JKX1RSRUUpIHsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogV2UgbmVlZCB0byBlaXRoZXIgY2FjaGUgb3IgcmV0dXJuIGEgdGhyb3dhd2F5IGNvcHkgKi8KKworCWlmIChhdmFpbGFibGVfaXggPCAwKQorCQllbnQgPSBOVUxMOworCWVsc2UgeworCQllbnQgPSBwYmFzZV90cmVlX2NhY2hlW2F2YWlsYWJsZV9peF07CisJCW15X2l4ID0gYXZhaWxhYmxlX2l4OworCX0KKworCWlmICghZW50KSB7CisJCW5lbnQgPSB4bWFsbG9jKHNpemVvZigqbmVudCkpOworCQluZW50LT50ZW1wb3JhcnkgPSAoYXZhaWxhYmxlX2l4IDwgMCk7CisJfQorCWVsc2UgeworCQkvKiBldmljdCBhbmQgcmV1c2UgKi8KKwkJZnJlZShlbnQtPnRyZWVfZGF0YSk7CisJCW5lbnQgPSBlbnQ7CisJfQorCWhhc2hjcHkobmVudC0+c2hhMSwgc2hhMSk7CisJbmVudC0+dHJlZV9kYXRhID0gZGF0YTsKKwluZW50LT50cmVlX3NpemUgPSBzaXplOworCW5lbnQtPnJlZiA9IDE7CisJaWYgKCFuZW50LT50ZW1wb3JhcnkpCisJCXBiYXNlX3RyZWVfY2FjaGVbbXlfaXhdID0gbmVudDsKKwlyZXR1cm4gbmVudDsKK30KKworc3RhdGljIHZvaWQgcGJhc2VfdHJlZV9wdXQoc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgKmNhY2hlKQoreworCWlmICghY2FjaGUtPnRlbXBvcmFyeSkgeworCQljYWNoZS0+cmVmLS07CisJCXJldHVybjsKKwl9CisJZnJlZShjYWNoZS0+dHJlZV9kYXRhKTsKKwlmcmVlKGNhY2hlKTsKK30KKworc3RhdGljIGludCBuYW1lX2NtcF9sZW4oY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBuYW1lW2ldICYmIG5hbWVbaV0gIT0gJ1xuJyAmJiBuYW1lW2ldICE9ICcvJzsgaSsrKQorCQk7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wYmFzZV9vYmplY3Qoc3RydWN0IHRyZWVfZGVzYyAqdHJlZSwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgaW50IGNtcGxlbiwKKwkJCSAgICAgY29uc3QgY2hhciAqZnVsbG5hbWUpCit7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IGNtcDsKKworCXdoaWxlICh0cmVlX2VudHJ5KHRyZWUsJmVudHJ5KSkgeworCQlpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkpCisJCQljb250aW51ZTsKKwkJY21wID0gdHJlZV9lbnRyeV9sZW4oJmVudHJ5KSAhPSBjbXBsZW4gPyAxIDoKKwkJICAgICAgbWVtY21wKG5hbWUsIGVudHJ5LnBhdGgsIGNtcGxlbik7CisJCWlmIChjbXAgPiAwKQorCQkJY29udGludWU7CisJCWlmIChjbXAgPCAwKQorCQkJcmV0dXJuOworCQlpZiAobmFtZVtjbXBsZW5dICE9ICcvJykgeworCQkJYWRkX29iamVjdF9lbnRyeShlbnRyeS5zaGExLAorCQkJCQkgb2JqZWN0X3R5cGUoZW50cnkubW9kZSksCisJCQkJCSBmdWxsbmFtZSwgMSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpIHsKKwkJCXN0cnVjdCB0cmVlX2Rlc2Mgc3ViOworCQkJc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgKnRyZWU7CisJCQljb25zdCBjaGFyICpkb3duID0gbmFtZStjbXBsZW4rMTsKKwkJCWludCBkb3dubGVuID0gbmFtZV9jbXBfbGVuKGRvd24pOworCisJCQl0cmVlID0gcGJhc2VfdHJlZV9nZXQoZW50cnkuc2hhMSk7CisJCQlpZiAoIXRyZWUpCisJCQkJcmV0dXJuOworCQkJaW5pdF90cmVlX2Rlc2MoJnN1YiwgdHJlZS0+dHJlZV9kYXRhLCB0cmVlLT50cmVlX3NpemUpOworCisJCQlhZGRfcGJhc2Vfb2JqZWN0KCZzdWIsIGRvd24sIGRvd25sZW4sIGZ1bGxuYW1lKTsKKwkJCXBiYXNlX3RyZWVfcHV0KHRyZWUpOworCQl9CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgKmRvbmVfcGJhc2VfcGF0aHM7CitzdGF0aWMgaW50IGRvbmVfcGJhc2VfcGF0aHNfbnVtOworc3RhdGljIGludCBkb25lX3BiYXNlX3BhdGhzX2FsbG9jOworc3RhdGljIGludCBkb25lX3BiYXNlX3BhdGhfcG9zKHVuc2lnbmVkIGhhc2gpCit7CisJaW50IGxvID0gMDsKKwlpbnQgaGkgPSBkb25lX3BiYXNlX3BhdGhzX251bTsKKwl3aGlsZSAobG8gPCBoaSkgeworCQlpbnQgbWkgPSAoaGkgKyBsbykgLyAyOworCQlpZiAoZG9uZV9wYmFzZV9wYXRoc1ttaV0gPT0gaGFzaCkKKwkJCXJldHVybiBtaTsKKwkJaWYgKGRvbmVfcGJhc2VfcGF0aHNbbWldIDwgaGFzaCkKKwkJCWhpID0gbWk7CisJCWVsc2UKKwkJCWxvID0gbWkgKyAxOworCX0KKwlyZXR1cm4gLWxvLTE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcGJhc2VfcGF0aCh1bnNpZ25lZCBoYXNoKQoreworCWludCBwb3MgPSAoIWRvbmVfcGJhc2VfcGF0aHMpID8gLTEgOiBkb25lX3BiYXNlX3BhdGhfcG9zKGhhc2gpOworCWlmICgwIDw9IHBvcykKKwkJcmV0dXJuIDE7CisJcG9zID0gLXBvcyAtIDE7CisJaWYgKGRvbmVfcGJhc2VfcGF0aHNfYWxsb2MgPD0gZG9uZV9wYmFzZV9wYXRoc19udW0pIHsKKwkJZG9uZV9wYmFzZV9wYXRoc19hbGxvYyA9IGFsbG9jX25yKGRvbmVfcGJhc2VfcGF0aHNfYWxsb2MpOworCQlkb25lX3BiYXNlX3BhdGhzID0geHJlYWxsb2MoZG9uZV9wYmFzZV9wYXRocywKKwkJCQkJICAgIGRvbmVfcGJhc2VfcGF0aHNfYWxsb2MgKgorCQkJCQkgICAgc2l6ZW9mKHVuc2lnbmVkKSk7CisJfQorCWRvbmVfcGJhc2VfcGF0aHNfbnVtKys7CisJaWYgKHBvcyA8IGRvbmVfcGJhc2VfcGF0aHNfbnVtKQorCQltZW1tb3ZlKGRvbmVfcGJhc2VfcGF0aHMgKyBwb3MgKyAxLAorCQkJZG9uZV9wYmFzZV9wYXRocyArIHBvcywKKwkJCShkb25lX3BiYXNlX3BhdGhzX251bSAtIHBvcyAtIDEpICogc2l6ZW9mKHVuc2lnbmVkKSk7CisJZG9uZV9wYmFzZV9wYXRoc1twb3NdID0gaGFzaDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX3ByZWZlcnJlZF9iYXNlX29iamVjdChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBwYmFzZV90cmVlICppdDsKKwlpbnQgY21wbGVuOworCXVuc2lnbmVkIGhhc2ggPSBuYW1lX2hhc2gobmFtZSk7CisKKwlpZiAoIW51bV9wcmVmZXJyZWRfYmFzZSB8fCBjaGVja19wYmFzZV9wYXRoKGhhc2gpKQorCQlyZXR1cm47CisKKwljbXBsZW4gPSBuYW1lX2NtcF9sZW4obmFtZSk7CisJZm9yIChpdCA9IHBiYXNlX3RyZWU7IGl0OyBpdCA9IGl0LT5uZXh0KSB7CisJCWlmIChjbXBsZW4gPT0gMCkgeworCQkJYWRkX29iamVjdF9lbnRyeShpdC0+cGNhY2hlLnNoYTEsIE9CSl9UUkVFLCBOVUxMLCAxKTsKKwkJfQorCQllbHNlIHsKKwkJCXN0cnVjdCB0cmVlX2Rlc2MgdHJlZTsKKwkJCWluaXRfdHJlZV9kZXNjKCZ0cmVlLCBpdC0+cGNhY2hlLnRyZWVfZGF0YSwgaXQtPnBjYWNoZS50cmVlX3NpemUpOworCQkJYWRkX3BiYXNlX29iamVjdCgmdHJlZSwgbmFtZSwgY21wbGVuLCBuYW1lKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYWRkX3ByZWZlcnJlZF9iYXNlKHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHBiYXNlX3RyZWUgKml0OworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGNoYXIgdHJlZV9zaGExWzIwXTsKKworCWlmICh3aW5kb3cgPD0gbnVtX3ByZWZlcnJlZF9iYXNlKyspCisJCXJldHVybjsKKworCWRhdGEgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzaGExLCB0cmVlX3R5cGUsICZzaXplLCB0cmVlX3NoYTEpOworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJZm9yIChpdCA9IHBiYXNlX3RyZWU7IGl0OyBpdCA9IGl0LT5uZXh0KSB7CisJCWlmICghaGFzaGNtcChpdC0+cGNhY2hlLnNoYTEsIHRyZWVfc2hhMSkpIHsKKwkJCWZyZWUoZGF0YSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpdCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppdCkpOworCWl0LT5uZXh0ID0gcGJhc2VfdHJlZTsKKwlwYmFzZV90cmVlID0gaXQ7CisKKwloYXNoY3B5KGl0LT5wY2FjaGUuc2hhMSwgdHJlZV9zaGExKTsKKwlpdC0+cGNhY2hlLnRyZWVfZGF0YSA9IGRhdGE7CisJaXQtPnBjYWNoZS50cmVlX3NpemUgPSBzaXplOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3ByZWZlcnJlZF9iYXNlKHZvaWQpCit7CisJc3RydWN0IHBiYXNlX3RyZWUgKml0OworCXVuc2lnbmVkIGk7CisKKwlpdCA9IHBiYXNlX3RyZWU7CisJcGJhc2VfdHJlZSA9IE5VTEw7CisJd2hpbGUgKGl0KSB7CisJCXN0cnVjdCBwYmFzZV90cmVlICp0aGlzID0gaXQ7CisJCWl0ID0gdGhpcy0+bmV4dDsKKwkJZnJlZSh0aGlzLT5wY2FjaGUudHJlZV9kYXRhKTsKKwkJZnJlZSh0aGlzKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYmFzZV90cmVlX2NhY2hlKTsgaSsrKSB7CisJCWlmICghcGJhc2VfdHJlZV9jYWNoZVtpXSkKKwkJCWNvbnRpbnVlOworCQlmcmVlKHBiYXNlX3RyZWVfY2FjaGVbaV0tPnRyZWVfZGF0YSk7CisJCWZyZWUocGJhc2VfdHJlZV9jYWNoZVtpXSk7CisJCXBiYXNlX3RyZWVfY2FjaGVbaV0gPSBOVUxMOworCX0KKworCWZyZWUoZG9uZV9wYmFzZV9wYXRocyk7CisJZG9uZV9wYmFzZV9wYXRocyA9IE5VTEw7CisJZG9uZV9wYmFzZV9wYXRoc19udW0gPSBkb25lX3BiYXNlX3BhdGhzX2FsbG9jID0gMDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfb2JqZWN0KHN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5KQoreworCWlmIChlbnRyeS0+aW5fcGFjaykgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGVudHJ5LT5pbl9wYWNrOworCQlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2VfcmVmID0gTlVMTDsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqYmFzZV9lbnRyeTsKKwkJdW5zaWduZWQgbG9uZyB1c2VkLCB1c2VkXzA7CisJCXVuc2lnbmVkIGxvbmcgYXZhaWw7CisJCW9mZl90IG9mczsKKwkJdW5zaWduZWQgY2hhciAqYnVmLCBjOworCisJCWJ1ZiA9IHVzZV9wYWNrKHAsICZ3X2N1cnMsIGVudHJ5LT5pbl9wYWNrX29mZnNldCwgJmF2YWlsKTsKKworCQkvKgorCQkgKiBXZSB3YW50IGluX3BhY2tfdHlwZSBldmVuIGlmIHdlIGRvIG5vdCByZXVzZSBkZWx0YQorCQkgKiBzaW5jZSBub24tZGVsdGEgcmVwcmVzZW50YXRpb25zIGNvdWxkIHN0aWxsIGJlIHJldXNlZC4KKwkJICovCisJCXVzZWQgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcl9idWZmZXIoYnVmLCBhdmFpbCwKKwkJCQkJCSAgICZlbnRyeS0+aW5fcGFja190eXBlLAorCQkJCQkJICAgJmVudHJ5LT5zaXplKTsKKwkJaWYgKHVzZWQgPT0gMCkKKwkJCWdvdG8gZ2l2ZV91cDsKKworCQkvKgorCQkgKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGRlbHRhIGFuZCBpZiBzbyB3aGV0aGVyIHdlIGNhbgorCQkgKiByZXVzZSBpdCBvciBub3QuICBPdGhlcndpc2UgbGV0J3MgZmluZCBvdXQgYXMgY2hlYXBseSBhcworCQkgKiBwb3NzaWJsZSB3aGF0IHRoZSBhY3R1YWwgdHlwZSBhbmQgc2l6ZSBmb3IgdGhpcyBvYmplY3QgaXMuCisJCSAqLworCQlzd2l0Y2ggKGVudHJ5LT5pbl9wYWNrX3R5cGUpIHsKKwkJZGVmYXVsdDoKKwkJCS8qIE5vdCBhIGRlbHRhIGhlbmNlIHdlJ3ZlIGFscmVhZHkgZ290IGFsbCB3ZSBuZWVkLiAqLworCQkJZW50cnktPnR5cGUgPSBlbnRyeS0+aW5fcGFja190eXBlOworCQkJZW50cnktPmluX3BhY2tfaGVhZGVyX3NpemUgPSB1c2VkOworCQkJaWYgKGVudHJ5LT50eXBlIDwgT0JKX0NPTU1JVCB8fCBlbnRyeS0+dHlwZSA+IE9CSl9CTE9CKQorCQkJCWdvdG8gZ2l2ZV91cDsKKwkJCXVudXNlX3BhY2soJndfY3Vycyk7CisJCQlyZXR1cm47CisJCWNhc2UgT0JKX1JFRl9ERUxUQToKKwkJCWlmIChyZXVzZV9kZWx0YSAmJiAhZW50cnktPnByZWZlcnJlZF9iYXNlKQorCQkJCWJhc2VfcmVmID0gdXNlX3BhY2socCwgJndfY3VycywKKwkJCQkJCWVudHJ5LT5pbl9wYWNrX29mZnNldCArIHVzZWQsIE5VTEwpOworCQkJZW50cnktPmluX3BhY2tfaGVhZGVyX3NpemUgPSB1c2VkICsgMjA7CisJCQlicmVhazsKKwkJY2FzZSBPQkpfT0ZTX0RFTFRBOgorCQkJYnVmID0gdXNlX3BhY2socCwgJndfY3VycywKKwkJCQkgICAgICAgZW50cnktPmluX3BhY2tfb2Zmc2V0ICsgdXNlZCwgTlVMTCk7CisJCQl1c2VkXzAgPSAwOworCQkJYyA9IGJ1Zlt1c2VkXzArK107CisJCQlvZnMgPSBjICYgMTI3OworCQkJd2hpbGUgKGMgJiAxMjgpIHsKKwkJCQlvZnMgKz0gMTsKKwkJCQlpZiAoIW9mcyB8fCBNU0Iob2ZzLCA3KSkgeworCQkJCQllcnJvcigiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiLAorCQkJCQkgICAgICBzaGExX3RvX2hleChlbnRyeS0+aWR4LnNoYTEpKTsKKwkJCQkJZ290byBnaXZlX3VwOworCQkJCX0KKwkJCQljID0gYnVmW3VzZWRfMCsrXTsKKwkJCQlvZnMgPSAob2ZzIDw8IDcpICsgKGMgJiAxMjcpOworCQkJfQorCQkJb2ZzID0gZW50cnktPmluX3BhY2tfb2Zmc2V0IC0gb2ZzOworCQkJaWYgKG9mcyA8PSAwIHx8IG9mcyA+PSBlbnRyeS0+aW5fcGFja19vZmZzZXQpIHsKKwkJCQllcnJvcigiZGVsdGEgYmFzZSBvZmZzZXQgb3V0IG9mIGJvdW5kIGZvciAlcyIsCisJCQkJICAgICAgc2hhMV90b19oZXgoZW50cnktPmlkeC5zaGExKSk7CisJCQkJZ290byBnaXZlX3VwOworCQkJfQorCQkJaWYgKHJldXNlX2RlbHRhICYmICFlbnRyeS0+cHJlZmVycmVkX2Jhc2UpIHsKKwkJCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeDsKKwkJCQlyZXZpZHggPSBmaW5kX3BhY2tfcmV2aW5kZXgocCwgb2ZzKTsKKwkJCQlpZiAoIXJldmlkeCkKKwkJCQkJZ290byBnaXZlX3VwOworCQkJCWJhc2VfcmVmID0gbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCByZXZpZHgtPm5yKTsKKwkJCX0KKwkJCWVudHJ5LT5pbl9wYWNrX2hlYWRlcl9zaXplID0gdXNlZCArIHVzZWRfMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGJhc2VfcmVmICYmIChiYXNlX2VudHJ5ID0gbG9jYXRlX29iamVjdF9lbnRyeShiYXNlX3JlZikpKSB7CisJCQkvKgorCQkJICogSWYgYmFzZV9yZWYgd2FzIHNldCBhYm92ZSB0aGF0IG1lYW5zIHdlIHdpc2ggdG8KKwkJCSAqIHJldXNlIGRlbHRhIGRhdGEsIGFuZCB3ZSBldmVuIGZvdW5kIHRoYXQgYmFzZQorCQkJICogaW4gdGhlIGxpc3Qgb2Ygb2JqZWN0cyB3ZSB3YW50IHRvIHBhY2suIEdvb2RpZSEKKwkJCSAqCisJCQkgKiBEZXB0aCB2YWx1ZSBkb2VzIG5vdCBtYXR0ZXIgLSBmaW5kX2RlbHRhcygpIHdpbGwKKwkJCSAqIG5ldmVyIGNvbnNpZGVyIHJldXNlZCBkZWx0YSBhcyB0aGUgYmFzZSBvYmplY3QgdG8KKwkJCSAqIGRlbHRpZnkgb3RoZXIgb2JqZWN0cyBhZ2FpbnN0LCBpbiBvcmRlciB0byBhdm9pZAorCQkJICogY2lyY3VsYXIgZGVsdGFzLgorCQkJICovCisJCQllbnRyeS0+dHlwZSA9IGVudHJ5LT5pbl9wYWNrX3R5cGU7CisJCQllbnRyeS0+ZGVsdGEgPSBiYXNlX2VudHJ5OworCQkJZW50cnktPmRlbHRhX3NpemUgPSBlbnRyeS0+c2l6ZTsKKwkJCWVudHJ5LT5kZWx0YV9zaWJsaW5nID0gYmFzZV9lbnRyeS0+ZGVsdGFfY2hpbGQ7CisJCQliYXNlX2VudHJ5LT5kZWx0YV9jaGlsZCA9IGVudHJ5OworCQkJdW51c2VfcGFjaygmd19jdXJzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChlbnRyeS0+dHlwZSkgeworCQkJLyoKKwkJCSAqIFRoaXMgbXVzdCBiZSBhIGRlbHRhIGFuZCB3ZSBhbHJlYWR5IGtub3cgd2hhdCB0aGUKKwkJCSAqIGZpbmFsIG9iamVjdCB0eXBlIGlzLiAgTGV0J3MgZXh0cmFjdCB0aGUgYWN0dWFsCisJCQkgKiBvYmplY3Qgc2l6ZSBmcm9tIHRoZSBkZWx0YSBoZWFkZXIuCisJCQkgKi8KKwkJCWVudHJ5LT5zaXplID0gZ2V0X3NpemVfZnJvbV9kZWx0YShwLCAmd19jdXJzLAorCQkJCQllbnRyeS0+aW5fcGFja19vZmZzZXQgKyBlbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZSk7CisJCQlpZiAoZW50cnktPnNpemUgPT0gMCkKKwkJCQlnb3RvIGdpdmVfdXA7CisJCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogTm8gY2hvaWNlIGJ1dCB0byBmYWxsIGJhY2sgdG8gdGhlIHJlY3Vyc2l2ZSBkZWx0YSB3YWxrCisJCSAqIHdpdGggc2hhMV9vYmplY3RfaW5mbygpIHRvIGZpbmQgYWJvdXQgdGhlIG9iamVjdCB0eXBlCisJCSAqIGF0IHRoaXMgcG9pbnQuLi4KKwkJICovCisJCWdpdmVfdXA6CisJCXVudXNlX3BhY2soJndfY3Vycyk7CisJfQorCisJZW50cnktPnR5cGUgPSBzaGExX29iamVjdF9pbmZvKGVudHJ5LT5pZHguc2hhMSwgJmVudHJ5LT5zaXplKTsKKwkvKgorCSAqIFRoZSBlcnJvciBjb25kaXRpb24gaXMgY2hlY2tlZCBpbiBwcmVwYXJlX3BhY2soKS4gIFRoaXMgaXMKKwkgKiB0byBwZXJtaXQgYSBtaXNzaW5nIHByZWZlcnJlZCBiYXNlIG9iamVjdCB0byBiZSBpZ25vcmVkCisJICogYXMgYSBwcmVmZXJyZWQgYmFzZS4gIERvaW5nIHNvIGNhbiByZXN1bHQgaW4gYSBsYXJnZXIKKwkgKiBwYWNrIGZpbGUsIGJ1dCB0aGUgdHJhbnNmZXIgd2lsbCBzdGlsbCB0YWtlIHBsYWNlLgorCSAqLworfQorCitzdGF0aWMgaW50IHBhY2tfb2Zmc2V0X3NvcnQoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmEgPSAqKHN0cnVjdCBvYmplY3RfZW50cnkgKiopX2E7CisJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqYiA9ICooc3RydWN0IG9iamVjdF9lbnRyeSAqKilfYjsKKworCS8qIGF2b2lkIGZpbGVzeXN0ZW0gdHJhc2hpbmcgd2l0aCBsb29zZSBvYmplY3RzICovCisJaWYgKCFhLT5pbl9wYWNrICYmICFiLT5pbl9wYWNrKQorCQlyZXR1cm4gaGFzaGNtcChhLT5pZHguc2hhMSwgYi0+aWR4LnNoYTEpOworCisJaWYgKGEtPmluX3BhY2sgPCBiLT5pbl9wYWNrKQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPmluX3BhY2sgPiBiLT5pbl9wYWNrKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gYS0+aW5fcGFja19vZmZzZXQgPCBiLT5pbl9wYWNrX29mZnNldCA/IC0xIDoKKwkJCShhLT5pbl9wYWNrX29mZnNldCA+IGItPmluX3BhY2tfb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZ2V0X29iamVjdF9kZXRhaWxzKHZvaWQpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqc29ydGVkX2J5X29mZnNldDsKKworCXNvcnRlZF9ieV9vZmZzZXQgPSB4Y2FsbG9jKG5yX29iamVjdHMsIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICopKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKQorCQlzb3J0ZWRfYnlfb2Zmc2V0W2ldID0gb2JqZWN0cyArIGk7CisJcXNvcnQoc29ydGVkX2J5X29mZnNldCwgbnJfb2JqZWN0cywgc2l6ZW9mKCpzb3J0ZWRfYnlfb2Zmc2V0KSwgcGFja19vZmZzZXRfc29ydCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gc29ydGVkX2J5X29mZnNldFtpXTsKKwkJY2hlY2tfb2JqZWN0KGVudHJ5KTsKKwkJaWYgKGJpZ19maWxlX3RocmVzaG9sZCA8IGVudHJ5LT5zaXplKQorCQkJZW50cnktPm5vX3RyeV9kZWx0YSA9IDE7CisJfQorCisJZnJlZShzb3J0ZWRfYnlfb2Zmc2V0KTsKK30KKworLyoKKyAqIFdlIHNlYXJjaCBmb3IgZGVsdGFzIGluIGEgbGlzdCBzb3J0ZWQgYnkgdHlwZSwgYnkgZmlsZW5hbWUgaGFzaCwgYW5kIHRoZW4KKyAqIGJ5IHNpemUsIHNvIHRoYXQgd2Ugc2VlIHByb2dyZXNzaXZlbHkgc21hbGxlciBhbmQgc21hbGxlciBmaWxlcy4KKyAqIFRoYXQncyBiZWNhdXNlIHdlIHByZWZlciBkZWx0YXMgdG8gYmUgZnJvbSB0aGUgYmlnZ2VyIGZpbGUKKyAqIHRvIHRoZSBzbWFsbGVyIC0tIGRlbGV0ZXMgYXJlIHBvdGVudGlhbGx5IGNoZWFwZXIsIGJ1dCBwZXJoYXBzCisgKiBtb3JlIGltcG9ydGFudGx5LCB0aGUgYmlnZ2VyIGZpbGUgaXMgbGlrZWx5IHRoZSBtb3JlIHJlY2VudAorICogb25lLiAgVGhlIGRlZXBlc3QgZGVsdGFzIGFyZSB0aGVyZWZvcmUgdGhlIG9sZGVzdCBvYmplY3RzIHdoaWNoIGFyZQorICogbGVzcyBzdXNjZXB0aWJsZSB0byBiZSBhY2Nlc3NlZCBvZnRlbi4KKyAqLworc3RhdGljIGludCB0eXBlX3NpemVfc29ydChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqYSA9ICooc3RydWN0IG9iamVjdF9lbnRyeSAqKilfYTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpiID0gKihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqKV9iOworCisJaWYgKGEtPnR5cGUgPiBiLT50eXBlKQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPnR5cGUgPCBiLT50eXBlKQorCQlyZXR1cm4gMTsKKwlpZiAoYS0+aGFzaCA+IGItPmhhc2gpCisJCXJldHVybiAtMTsKKwlpZiAoYS0+aGFzaCA8IGItPmhhc2gpCisJCXJldHVybiAxOworCWlmIChhLT5wcmVmZXJyZWRfYmFzZSA+IGItPnByZWZlcnJlZF9iYXNlKQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPnByZWZlcnJlZF9iYXNlIDwgYi0+cHJlZmVycmVkX2Jhc2UpCisJCXJldHVybiAxOworCWlmIChhLT5zaXplID4gYi0+c2l6ZSkKKwkJcmV0dXJuIC0xOworCWlmIChhLT5zaXplIDwgYi0+c2l6ZSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIGEgPCBiID8gLTEgOiAoYSA+IGIpOyAgLyogbmV3ZXN0IGZpcnN0ICovCit9CisKK3N0cnVjdCB1bnBhY2tlZCB7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnk7CisJdm9pZCAqZGF0YTsKKwlzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4OworCXVuc2lnbmVkIGRlcHRoOworfTsKKworc3RhdGljIGludCBkZWx0YV9jYWNoZWFibGUodW5zaWduZWQgbG9uZyBzcmNfc2l6ZSwgdW5zaWduZWQgbG9uZyB0cmdfc2l6ZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSkKK3sKKwlpZiAobWF4X2RlbHRhX2NhY2hlX3NpemUgJiYgZGVsdGFfY2FjaGVfc2l6ZSArIGRlbHRhX3NpemUgPiBtYXhfZGVsdGFfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGVsdGFfc2l6ZSA8IGNhY2hlX21heF9zbWFsbF9kZWx0YV9zaXplKQorCQlyZXR1cm4gMTsKKworCS8qIGNhY2hlIGRlbHRhLCBpZiBvYmplY3RzIGFyZSBsYXJnZSBlbm91Z2ggY29tcGFyZWQgdG8gZGVsdGEgc2l6ZSAqLworCWlmICgoc3JjX3NpemUgPj4gMjApICsgKHRyZ19zaXplID4+IDIxKSA+IChkZWx0YV9zaXplID4+IDEwKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworI2lmbmRlZiBOT19QVEhSRUFEUworCitzdGF0aWMgcHRocmVhZF9tdXRleF90IHJlYWRfbXV0ZXg7CisjZGVmaW5lIHJlYWRfbG9jaygpCQlwdGhyZWFkX211dGV4X2xvY2soJnJlYWRfbXV0ZXgpCisjZGVmaW5lIHJlYWRfdW5sb2NrKCkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZyZWFkX211dGV4KQorCitzdGF0aWMgcHRocmVhZF9tdXRleF90IGNhY2hlX211dGV4OworI2RlZmluZSBjYWNoZV9sb2NrKCkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmY2FjaGVfbXV0ZXgpCisjZGVmaW5lIGNhY2hlX3VubG9jaygpCQlwdGhyZWFkX211dGV4X3VubG9jaygmY2FjaGVfbXV0ZXgpCisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcHJvZ3Jlc3NfbXV0ZXg7CisjZGVmaW5lIHByb2dyZXNzX2xvY2soKQkJcHRocmVhZF9tdXRleF9sb2NrKCZwcm9ncmVzc19tdXRleCkKKyNkZWZpbmUgcHJvZ3Jlc3NfdW5sb2NrKCkJcHRocmVhZF9tdXRleF91bmxvY2soJnByb2dyZXNzX211dGV4KQorCisjZWxzZQorCisjZGVmaW5lIHJlYWRfbG9jaygpCQkodm9pZCkwCisjZGVmaW5lIHJlYWRfdW5sb2NrKCkJCSh2b2lkKTAKKyNkZWZpbmUgY2FjaGVfbG9jaygpCQkodm9pZCkwCisjZGVmaW5lIGNhY2hlX3VubG9jaygpCQkodm9pZCkwCisjZGVmaW5lIHByb2dyZXNzX2xvY2soKQkJKHZvaWQpMAorI2RlZmluZSBwcm9ncmVzc191bmxvY2soKQkodm9pZCkwCisKKyNlbmRpZgorCitzdGF0aWMgaW50IHRyeV9kZWx0YShzdHJ1Y3QgdW5wYWNrZWQgKnRyZywgc3RydWN0IHVucGFja2VkICpzcmMsCisJCSAgICAgdW5zaWduZWQgbWF4X2RlcHRoLCB1bnNpZ25lZCBsb25nICptZW1fdXNhZ2UpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqdHJnX2VudHJ5ID0gdHJnLT5lbnRyeTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpzcmNfZW50cnkgPSBzcmMtPmVudHJ5OworCXVuc2lnbmVkIGxvbmcgdHJnX3NpemUsIHNyY19zaXplLCBkZWx0YV9zaXplLCBzaXplZGlmZiwgbWF4X3NpemUsIHN6OworCXVuc2lnbmVkIHJlZl9kZXB0aDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqZGVsdGFfYnVmOworCisJLyogRG9uJ3QgYm90aGVyIGRvaW5nIGRpZmZzIGJldHdlZW4gZGlmZmVyZW50IHR5cGVzICovCisJaWYgKHRyZ19lbnRyeS0+dHlwZSAhPSBzcmNfZW50cnktPnR5cGUpCisJCXJldHVybiAtMTsKKworCS8qCisJICogV2UgZG8gbm90IGJvdGhlciB0byB0cnkgYSBkZWx0YSB0aGF0IHdlIGRpc2NhcmRlZCBvbiBhbgorCSAqIGVhcmxpZXIgdHJ5LCBidXQgb25seSB3aGVuIHJldXNpbmcgZGVsdGEgZGF0YS4gIE5vdGUgdGhhdAorCSAqIHNyY19lbnRyeSB0aGF0IGlzIG1hcmtlZCBhcyB0aGUgcHJlZmVycmVkX2Jhc2Ugc2hvdWxkIGFsd2F5cworCSAqIGJlIGNvbnNpZGVyZWQsIGFzIGV2ZW4gaWYgd2UgcHJvZHVjZSBhIHN1Ym9wdGltYWwgZGVsdGEgYWdhaW5zdAorCSAqIGl0LCB3ZSB3aWxsIHN0aWxsIHNhdmUgdGhlIHRyYW5zZmVyIGNvc3QsIGFzIHdlIGFscmVhZHkga25vdworCSAqIHRoZSBvdGhlciBzaWRlIGhhcyBpdCBhbmQgd2Ugd29uJ3Qgc2VuZCBzcmNfZW50cnkgYXQgYWxsLgorCSAqLworCWlmIChyZXVzZV9kZWx0YSAmJiB0cmdfZW50cnktPmluX3BhY2sgJiYKKwkgICAgdHJnX2VudHJ5LT5pbl9wYWNrID09IHNyY19lbnRyeS0+aW5fcGFjayAmJgorCSAgICAhc3JjX2VudHJ5LT5wcmVmZXJyZWRfYmFzZSAmJgorCSAgICB0cmdfZW50cnktPmluX3BhY2tfdHlwZSAhPSBPQkpfUkVGX0RFTFRBICYmCisJICAgIHRyZ19lbnRyeS0+aW5fcGFja190eXBlICE9IE9CSl9PRlNfREVMVEEpCisJCXJldHVybiAwOworCisJLyogTGV0J3Mgbm90IGJ1c3QgdGhlIGFsbG93ZWQgZGVwdGguICovCisJaWYgKHNyYy0+ZGVwdGggPj0gbWF4X2RlcHRoKQorCQlyZXR1cm4gMDsKKworCS8qIE5vdyBzb21lIHNpemUgZmlsdGVyaW5nIGhldXJpc3RpY3MuICovCisJdHJnX3NpemUgPSB0cmdfZW50cnktPnNpemU7CisJaWYgKCF0cmdfZW50cnktPmRlbHRhKSB7CisJCW1heF9zaXplID0gdHJnX3NpemUvMiAtIDIwOworCQlyZWZfZGVwdGggPSAxOworCX0gZWxzZSB7CisJCW1heF9zaXplID0gdHJnX2VudHJ5LT5kZWx0YV9zaXplOworCQlyZWZfZGVwdGggPSB0cmctPmRlcHRoOworCX0KKwltYXhfc2l6ZSA9ICh1aW50NjRfdCltYXhfc2l6ZSAqIChtYXhfZGVwdGggLSBzcmMtPmRlcHRoKSAvCisJCQkJCQkobWF4X2RlcHRoIC0gcmVmX2RlcHRoICsgMSk7CisJaWYgKG1heF9zaXplID09IDApCisJCXJldHVybiAwOworCXNyY19zaXplID0gc3JjX2VudHJ5LT5zaXplOworCXNpemVkaWZmID0gc3JjX3NpemUgPCB0cmdfc2l6ZSA/IHRyZ19zaXplIC0gc3JjX3NpemUgOiAwOworCWlmIChzaXplZGlmZiA+PSBtYXhfc2l6ZSkKKwkJcmV0dXJuIDA7CisJaWYgKHRyZ19zaXplIDwgc3JjX3NpemUgLyAzMikKKwkJcmV0dXJuIDA7CisKKwkvKiBMb2FkIGRhdGEgaWYgbm90IGFscmVhZHkgZG9uZSAqLworCWlmICghdHJnLT5kYXRhKSB7CisJCXJlYWRfbG9jaygpOworCQl0cmctPmRhdGEgPSByZWFkX3NoYTFfZmlsZSh0cmdfZW50cnktPmlkeC5zaGExLCAmdHlwZSwgJnN6KTsKKwkJcmVhZF91bmxvY2soKTsKKwkJaWYgKCF0cmctPmRhdGEpCisJCQlkaWUoIm9iamVjdCAlcyBjYW5ub3QgYmUgcmVhZCIsCisJCQkgICAgc2hhMV90b19oZXgodHJnX2VudHJ5LT5pZHguc2hhMSkpOworCQlpZiAoc3ogIT0gdHJnX3NpemUpCisJCQlkaWUoIm9iamVjdCAlcyBpbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aCAoJWx1IHZzICVsdSkiLAorCQkJICAgIHNoYTFfdG9faGV4KHRyZ19lbnRyeS0+aWR4LnNoYTEpLCBzeiwgdHJnX3NpemUpOworCQkqbWVtX3VzYWdlICs9IHN6OworCX0KKwlpZiAoIXNyYy0+ZGF0YSkgeworCQlyZWFkX2xvY2soKTsKKwkJc3JjLT5kYXRhID0gcmVhZF9zaGExX2ZpbGUoc3JjX2VudHJ5LT5pZHguc2hhMSwgJnR5cGUsICZzeik7CisJCXJlYWRfdW5sb2NrKCk7CisJCWlmICghc3JjLT5kYXRhKSB7CisJCQlpZiAoc3JjX2VudHJ5LT5wcmVmZXJyZWRfYmFzZSkgeworCQkJCXN0YXRpYyBpbnQgd2FybmVkID0gMDsKKwkJCQlpZiAoIXdhcm5lZCsrKQorCQkJCQl3YXJuaW5nKCJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiLAorCQkJCQkJc2hhMV90b19oZXgoc3JjX2VudHJ5LT5pZHguc2hhMSkpOworCQkJCS8qCisJCQkJICogVGhvc2Ugb2JqZWN0cyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZQorCQkJCSAqIHJlc3VsdGluZyBwYWNrLiAgQmUgcmVzaWxpZW50IGFuZCBpZ25vcmUKKwkJCQkgKiB0aGVtIGlmIHRoZXkgY2FuJ3QgYmUgcmVhZCwgaW4gY2FzZSB0aGUKKwkJCQkgKiBwYWNrIGNvdWxkIGJlIGNyZWF0ZWQgbmV2ZXJ0aGVsZXNzLgorCQkJCSAqLworCQkJCXJldHVybiAwOworCQkJfQorCQkJZGllKCJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiLAorCQkJICAgIHNoYTFfdG9faGV4KHNyY19lbnRyeS0+aWR4LnNoYTEpKTsKKwkJfQorCQlpZiAoc3ogIT0gc3JjX3NpemUpCisJCQlkaWUoIm9iamVjdCAlcyBpbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aCAoJWx1IHZzICVsdSkiLAorCQkJICAgIHNoYTFfdG9faGV4KHNyY19lbnRyeS0+aWR4LnNoYTEpLCBzeiwgc3JjX3NpemUpOworCQkqbWVtX3VzYWdlICs9IHN6OworCX0KKwlpZiAoIXNyYy0+aW5kZXgpIHsKKwkJc3JjLT5pbmRleCA9IGNyZWF0ZV9kZWx0YV9pbmRleChzcmMtPmRhdGEsIHNyY19zaXplKTsKKwkJaWYgKCFzcmMtPmluZGV4KSB7CisJCQlzdGF0aWMgaW50IHdhcm5lZCA9IDA7CisJCQlpZiAoIXdhcm5lZCsrKQorCQkJCXdhcm5pbmcoInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiKTsKKwkJCXJldHVybiAwOworCQl9CisJCSptZW1fdXNhZ2UgKz0gc2l6ZW9mX2RlbHRhX2luZGV4KHNyYy0+aW5kZXgpOworCX0KKworCWRlbHRhX2J1ZiA9IGNyZWF0ZV9kZWx0YShzcmMtPmluZGV4LCB0cmctPmRhdGEsIHRyZ19zaXplLCAmZGVsdGFfc2l6ZSwgbWF4X3NpemUpOworCWlmICghZGVsdGFfYnVmKQorCQlyZXR1cm4gMDsKKworCWlmICh0cmdfZW50cnktPmRlbHRhKSB7CisJCS8qIFByZWZlciBvbmx5IHNoYWxsb3dlciBzYW1lLXNpemVkIGRlbHRhcy4gKi8KKwkJaWYgKGRlbHRhX3NpemUgPT0gdHJnX2VudHJ5LT5kZWx0YV9zaXplICYmCisJCSAgICBzcmMtPmRlcHRoICsgMSA+PSB0cmctPmRlcHRoKSB7CisJCQlmcmVlKGRlbHRhX2J1Zik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qCisJICogSGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIG91dHNpZGUgb2YgdGhlIGNhY2hlCisJICogYWNjb3VudGluZyBsb2NrLiAgQ29tcGlsZXIgd2lsbCBvcHRpbWl6ZSB0aGUgc3RyYW5nZW5lc3MKKwkgKiBhd2F5IHdoZW4gTk9fUFRIUkVBRFMgaXMgZGVmaW5lZC4KKwkgKi8KKwlmcmVlKHRyZ19lbnRyeS0+ZGVsdGFfZGF0YSk7CisJY2FjaGVfbG9jaygpOworCWlmICh0cmdfZW50cnktPmRlbHRhX2RhdGEpIHsKKwkJZGVsdGFfY2FjaGVfc2l6ZSAtPSB0cmdfZW50cnktPmRlbHRhX3NpemU7CisJCXRyZ19lbnRyeS0+ZGVsdGFfZGF0YSA9IE5VTEw7CisJfQorCWlmIChkZWx0YV9jYWNoZWFibGUoc3JjX3NpemUsIHRyZ19zaXplLCBkZWx0YV9zaXplKSkgeworCQlkZWx0YV9jYWNoZV9zaXplICs9IGRlbHRhX3NpemU7CisJCWNhY2hlX3VubG9jaygpOworCQl0cmdfZW50cnktPmRlbHRhX2RhdGEgPSB4cmVhbGxvYyhkZWx0YV9idWYsIGRlbHRhX3NpemUpOworCX0gZWxzZSB7CisJCWNhY2hlX3VubG9jaygpOworCQlmcmVlKGRlbHRhX2J1Zik7CisJfQorCisJdHJnX2VudHJ5LT5kZWx0YSA9IHNyY19lbnRyeTsKKwl0cmdfZW50cnktPmRlbHRhX3NpemUgPSBkZWx0YV9zaXplOworCXRyZy0+ZGVwdGggPSBzcmMtPmRlcHRoICsgMTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNoZWNrX2RlbHRhX2xpbWl0KHN0cnVjdCBvYmplY3RfZW50cnkgKm1lLCB1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpjaGlsZCA9IG1lLT5kZWx0YV9jaGlsZDsKKwl1bnNpZ25lZCBpbnQgbSA9IG47CisJd2hpbGUgKGNoaWxkKSB7CisJCXVuc2lnbmVkIGludCBjID0gY2hlY2tfZGVsdGFfbGltaXQoY2hpbGQsIG4gKyAxKTsKKwkJaWYgKG0gPCBjKQorCQkJbSA9IGM7CisJCWNoaWxkID0gY2hpbGQtPmRlbHRhX3NpYmxpbmc7CisJfQorCXJldHVybiBtOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX3VucGFja2VkKHN0cnVjdCB1bnBhY2tlZCAqbikKK3sKKwl1bnNpZ25lZCBsb25nIGZyZWVkX21lbSA9IHNpemVvZl9kZWx0YV9pbmRleChuLT5pbmRleCk7CisJZnJlZV9kZWx0YV9pbmRleChuLT5pbmRleCk7CisJbi0+aW5kZXggPSBOVUxMOworCWlmIChuLT5kYXRhKSB7CisJCWZyZWVkX21lbSArPSBuLT5lbnRyeS0+c2l6ZTsKKwkJZnJlZShuLT5kYXRhKTsKKwkJbi0+ZGF0YSA9IE5VTEw7CisJfQorCW4tPmVudHJ5ID0gTlVMTDsKKwluLT5kZXB0aCA9IDA7CisJcmV0dXJuIGZyZWVkX21lbTsKK30KKworc3RhdGljIHZvaWQgZmluZF9kZWx0YXMoc3RydWN0IG9iamVjdF9lbnRyeSAqKmxpc3QsIHVuc2lnbmVkICpsaXN0X3NpemUsCisJCQlpbnQgd2luZG93LCBpbnQgZGVwdGgsIHVuc2lnbmVkICpwcm9jZXNzZWQpCit7CisJdWludDMyX3QgaSwgaWR4ID0gMCwgY291bnQgPSAwOworCXN0cnVjdCB1bnBhY2tlZCAqYXJyYXk7CisJdW5zaWduZWQgbG9uZyBtZW1fdXNhZ2UgPSAwOworCisJYXJyYXkgPSB4Y2FsbG9jKHdpbmRvdywgc2l6ZW9mKHN0cnVjdCB1bnBhY2tlZCkpOworCisJZm9yICg7OykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeTsKKwkJc3RydWN0IHVucGFja2VkICpuID0gYXJyYXkgKyBpZHg7CisJCWludCBqLCBtYXhfZGVwdGgsIGJlc3RfYmFzZSA9IC0xOworCisJCXByb2dyZXNzX2xvY2soKTsKKwkJaWYgKCEqbGlzdF9zaXplKSB7CisJCQlwcm9ncmVzc191bmxvY2soKTsKKwkJCWJyZWFrOworCQl9CisJCWVudHJ5ID0gKmxpc3QrKzsKKwkJKCpsaXN0X3NpemUpLS07CisJCWlmICghZW50cnktPnByZWZlcnJlZF9iYXNlKSB7CisJCQkoKnByb2Nlc3NlZCkrKzsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3Nfc3RhdGUsICpwcm9jZXNzZWQpOworCQl9CisJCXByb2dyZXNzX3VubG9jaygpOworCisJCW1lbV91c2FnZSAtPSBmcmVlX3VucGFja2VkKG4pOworCQluLT5lbnRyeSA9IGVudHJ5OworCisJCXdoaWxlICh3aW5kb3dfbWVtb3J5X2xpbWl0ICYmCisJCSAgICAgICBtZW1fdXNhZ2UgPiB3aW5kb3dfbWVtb3J5X2xpbWl0ICYmCisJCSAgICAgICBjb3VudCA+IDEpIHsKKwkJCXVpbnQzMl90IHRhaWwgPSAoaWR4ICsgd2luZG93IC0gY291bnQpICUgd2luZG93OworCQkJbWVtX3VzYWdlIC09IGZyZWVfdW5wYWNrZWQoYXJyYXkgKyB0YWlsKTsKKwkJCWNvdW50LS07CisJCX0KKworCQkvKiBXZSBkbyBub3QgY29tcHV0ZSBkZWx0YSB0byAqY3JlYXRlKiBvYmplY3RzIHdlIGFyZSBub3QKKwkJICogZ29pbmcgdG8gcGFjay4KKwkJICovCisJCWlmIChlbnRyeS0+cHJlZmVycmVkX2Jhc2UpCisJCQlnb3RvIG5leHQ7CisKKwkJLyoKKwkJICogSWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIGF0IHBhY2sgZWRnZSwgdGFrZSB0aGUgZGVwdGggdGhlCisJCSAqIG9iamVjdHMgdGhhdCBkZXBlbmQgb24gdGhlIGN1cnJlbnQgb2JqZWN0IGludG8gYWNjb3VudAorCQkgKiBvdGhlcndpc2UgdGhleSB3b3VsZCBiZWNvbWUgdG9vIGRlZXAuCisJCSAqLworCQltYXhfZGVwdGggPSBkZXB0aDsKKwkJaWYgKGVudHJ5LT5kZWx0YV9jaGlsZCkgeworCQkJbWF4X2RlcHRoIC09IGNoZWNrX2RlbHRhX2xpbWl0KGVudHJ5LCAwKTsKKwkJCWlmIChtYXhfZGVwdGggPD0gMCkKKwkJCQlnb3RvIG5leHQ7CisJCX0KKworCQlqID0gd2luZG93OworCQl3aGlsZSAoLS1qID4gMCkgeworCQkJaW50IHJldDsKKwkJCXVpbnQzMl90IG90aGVyX2lkeCA9IGlkeCArIGo7CisJCQlzdHJ1Y3QgdW5wYWNrZWQgKm07CisJCQlpZiAob3RoZXJfaWR4ID49IHdpbmRvdykKKwkJCQlvdGhlcl9pZHggLT0gd2luZG93OworCQkJbSA9IGFycmF5ICsgb3RoZXJfaWR4OworCQkJaWYgKCFtLT5lbnRyeSkKKwkJCQlicmVhazsKKwkJCXJldCA9IHRyeV9kZWx0YShuLCBtLCBtYXhfZGVwdGgsICZtZW1fdXNhZ2UpOworCQkJaWYgKHJldCA8IDApCisJCQkJYnJlYWs7CisJCQllbHNlIGlmIChyZXQgPiAwKQorCQkJCWJlc3RfYmFzZSA9IG90aGVyX2lkeDsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlIGRlY2lkZWQgdG8gY2FjaGUgdGhlIGRlbHRhIGRhdGEsIHRoZW4gaXQgaXMgYmVzdAorCQkgKiB0byBjb21wcmVzcyBpdCByaWdodCBhd2F5LiAgRmlyc3QgYmVjYXVzZSB3ZSBoYXZlIHRvIGRvCisJCSAqIGl0IGFueXdheSwgYW5kIGRvaW5nIGl0IGhlcmUgd2hpbGUgd2UncmUgdGhyZWFkZWQgd2lsbAorCQkgKiBzYXZlIGEgbG90IG9mIHRpbWUgaW4gdGhlIG5vbiB0aHJlYWRlZCB3cml0ZSBwaGFzZSwKKwkJICogYXMgd2VsbCBhcyBhbGxvdyBmb3IgY2FjaGluZyBtb3JlIGRlbHRhcyB3aXRoaW4KKwkJICogdGhlIHNhbWUgY2FjaGUgc2l6ZSBsaW1pdC4KKwkJICogLi4uCisJCSAqIEJ1dCBvbmx5IGlmIG5vdCB3cml0aW5nIHRvIHN0ZG91dCwgc2luY2UgaW4gdGhhdCBjYXNlCisJCSAqIHRoZSBuZXR3b3JrIGlzIG1vc3QgbGlrZWx5IHRocm90dGxpbmcgd3JpdGVzIGFueXdheSwKKwkJICogYW5kIHRoZXJlZm9yZSBpdCBpcyBiZXN0IHRvIGdvIHRvIHRoZSB3cml0ZSBwaGFzZSBBU0FQCisJCSAqIGluc3RlYWQsIGFzIHdlIGNhbiBhZmZvcmQgc3BlbmRpbmcgbW9yZSB0aW1lIGNvbXByZXNzaW5nCisJCSAqIGJldHdlZW4gd3JpdGVzIGF0IHRoYXQgbW9tZW50LgorCQkgKi8KKwkJaWYgKGVudHJ5LT5kZWx0YV9kYXRhICYmICFwYWNrX3RvX3N0ZG91dCkgeworCQkJZW50cnktPnpfZGVsdGFfc2l6ZSA9IGRvX2NvbXByZXNzKCZlbnRyeS0+ZGVsdGFfZGF0YSwKKwkJCQkJCQkgIGVudHJ5LT5kZWx0YV9zaXplKTsKKwkJCWNhY2hlX2xvY2soKTsKKwkJCWRlbHRhX2NhY2hlX3NpemUgLT0gZW50cnktPmRlbHRhX3NpemU7CisJCQlkZWx0YV9jYWNoZV9zaXplICs9IGVudHJ5LT56X2RlbHRhX3NpemU7CisJCQljYWNoZV91bmxvY2soKTsKKwkJfQorCisJCS8qIGlmIHdlIG1hZGUgbiBhIGRlbHRhLCBhbmQgaWYgbiBpcyBhbHJlYWR5IGF0IG1heAorCQkgKiBkZXB0aCwgbGVhdmluZyBpdCBpbiB0aGUgd2luZG93IGlzIHBvaW50bGVzcy4gIHdlCisJCSAqIHNob3VsZCBldmljdCBpdCBmaXJzdC4KKwkJICovCisJCWlmIChlbnRyeS0+ZGVsdGEgJiYgbWF4X2RlcHRoIDw9IG4tPmRlcHRoKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTW92ZSB0aGUgYmVzdCBkZWx0YSBiYXNlIHVwIGluIHRoZSB3aW5kb3csIGFmdGVyIHRoZQorCQkgKiBjdXJyZW50bHkgZGVsdGlmaWVkIG9iamVjdCwgdG8ga2VlcCBpdCBsb25nZXIuICBJdCB3aWxsCisJCSAqIGJlIHRoZSBmaXJzdCBiYXNlIG9iamVjdCB0byBiZSBhdHRlbXB0ZWQgbmV4dC4KKwkJICovCisJCWlmIChlbnRyeS0+ZGVsdGEpIHsKKwkJCXN0cnVjdCB1bnBhY2tlZCBzd2FwID0gYXJyYXlbYmVzdF9iYXNlXTsKKwkJCWludCBkaXN0ID0gKHdpbmRvdyArIGlkeCAtIGJlc3RfYmFzZSkgJSB3aW5kb3c7CisJCQlpbnQgZHN0ID0gYmVzdF9iYXNlOworCQkJd2hpbGUgKGRpc3QtLSkgeworCQkJCWludCBzcmMgPSAoZHN0ICsgMSkgJSB3aW5kb3c7CisJCQkJYXJyYXlbZHN0XSA9IGFycmF5W3NyY107CisJCQkJZHN0ID0gc3JjOworCQkJfQorCQkJYXJyYXlbZHN0XSA9IHN3YXA7CisJCX0KKworCQluZXh0OgorCQlpZHgrKzsKKwkJaWYgKGNvdW50ICsgMSA8IHdpbmRvdykKKwkJCWNvdW50Kys7CisJCWlmIChpZHggPj0gd2luZG93KQorCQkJaWR4ID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgd2luZG93OyArK2kpIHsKKwkJZnJlZV9kZWx0YV9pbmRleChhcnJheVtpXS5pbmRleCk7CisJCWZyZWUoYXJyYXlbaV0uZGF0YSk7CisJfQorCWZyZWUoYXJyYXkpOworfQorCisjaWZuZGVmIE5PX1BUSFJFQURTCisKK3N0YXRpYyB2b2lkIHRyeV90b19mcmVlX2Zyb21fdGhyZWFkcyhzaXplX3Qgc2l6ZSkKK3sKKwlyZWFkX2xvY2soKTsKKwlyZWxlYXNlX3BhY2tfbWVtb3J5KHNpemUsIC0xKTsKKwlyZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgdHJ5X3RvX2ZyZWVfdCBvbGRfdHJ5X3RvX2ZyZWVfcm91dGluZTsKKworLyoKKyAqIFRoZSBtYWluIHRocmVhZCB3YWl0cyBvbiB0aGUgY29uZGl0aW9uIHRoYXQgKGF0IGxlYXN0KSBvbmUgb2YgdGhlIHdvcmtlcnMKKyAqIGhhcyBzdG9wcGVkIHdvcmtpbmcgKHdoaWNoIGlzIGluZGljYXRlZCBpbiB0aGUgLndvcmtpbmcgbWVtYmVyIG9mCisgKiBzdHJ1Y3QgdGhyZWFkX3BhcmFtcykuCisgKiBXaGVuIGEgd29yayB0aHJlYWQgaGFzIGNvbXBsZXRlZCBpdHMgd29yaywgaXQgc2V0cyAud29ya2luZyB0byAwIGFuZAorICogc2lnbmFscyB0aGUgbWFpbiB0aHJlYWQgYW5kIHdhaXRzIG9uIHRoZSBjb25kaXRpb24gdGhhdCAuZGF0YV9yZWFkeQorICogYmVjb21lcyAxLgorICovCisKK3N0cnVjdCB0aHJlYWRfcGFyYW1zIHsKKwlwdGhyZWFkX3QgdGhyZWFkOworCXN0cnVjdCBvYmplY3RfZW50cnkgKipsaXN0OworCXVuc2lnbmVkIGxpc3Rfc2l6ZTsKKwl1bnNpZ25lZCByZW1haW5pbmc7CisJaW50IHdpbmRvdzsKKwlpbnQgZGVwdGg7CisJaW50IHdvcmtpbmc7CisJaW50IGRhdGFfcmVhZHk7CisJcHRocmVhZF9tdXRleF90IG11dGV4OworCXB0aHJlYWRfY29uZF90IGNvbmQ7CisJdW5zaWduZWQgKnByb2Nlc3NlZDsKK307CisKK3N0YXRpYyBwdGhyZWFkX2NvbmRfdCBwcm9ncmVzc19jb25kOworCisvKgorICogTXV0ZXggYW5kIGNvbmRpdGlvbmFsIHZhcmlhYmxlIGNhbid0IGJlIHN0YXRpY2FsbHktaW5pdGlhbGl6ZWQgb24gV2luZG93cy4KKyAqLworc3RhdGljIHZvaWQgaW5pdF90aHJlYWRlZF9zZWFyY2godm9pZCkKK3sKKwlpbml0X3JlY3Vyc2l2ZV9tdXRleCgmcmVhZF9tdXRleCk7CisJcHRocmVhZF9tdXRleF9pbml0KCZjYWNoZV9tdXRleCwgTlVMTCk7CisJcHRocmVhZF9tdXRleF9pbml0KCZwcm9ncmVzc19tdXRleCwgTlVMTCk7CisJcHRocmVhZF9jb25kX2luaXQoJnByb2dyZXNzX2NvbmQsIE5VTEwpOworCW9sZF90cnlfdG9fZnJlZV9yb3V0aW5lID0gc2V0X3RyeV90b19mcmVlX3JvdXRpbmUodHJ5X3RvX2ZyZWVfZnJvbV90aHJlYWRzKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF90aHJlYWRlZF9zZWFyY2godm9pZCkKK3sKKwlzZXRfdHJ5X3RvX2ZyZWVfcm91dGluZShvbGRfdHJ5X3RvX2ZyZWVfcm91dGluZSk7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJnByb2dyZXNzX2NvbmQpOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmcmVhZF9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZjYWNoZV9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZwcm9ncmVzc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkICp0aHJlYWRlZF9maW5kX2RlbHRhcyh2b2lkICphcmcpCit7CisJc3RydWN0IHRocmVhZF9wYXJhbXMgKm1lID0gYXJnOworCisJd2hpbGUgKG1lLT5yZW1haW5pbmcpIHsKKwkJZmluZF9kZWx0YXMobWUtPmxpc3QsICZtZS0+cmVtYWluaW5nLAorCQkJICAgIG1lLT53aW5kb3csIG1lLT5kZXB0aCwgbWUtPnByb2Nlc3NlZCk7CisKKwkJcHJvZ3Jlc3NfbG9jaygpOworCQltZS0+d29ya2luZyA9IDA7CisJCXB0aHJlYWRfY29uZF9zaWduYWwoJnByb2dyZXNzX2NvbmQpOworCQlwcm9ncmVzc191bmxvY2soKTsKKworCQkvKgorCQkgKiBXZSBtdXN0IG5vdCBzZXQgLT5kYXRhX3JlYWR5IGJlZm9yZSB3ZSB3YWl0IG9uIHRoZQorCQkgKiBjb25kaXRpb24gYmVjYXVzZSB0aGUgbWFpbiB0aHJlYWQgbWF5IGhhdmUgc2V0IGl0IHRvIDEKKwkJICogYmVmb3JlIHdlIGdldCBoZXJlLiBJbiBvcmRlciB0byBiZSBzdXJlIHRoYXQgbmV3CisJCSAqIHdvcmsgaXMgYXZhaWxhYmxlIGlmIHdlIHNlZSAxIGluIC0+ZGF0YV9yZWFkeSwgaXQKKwkJICogd2FzIGluaXRpYWxpemVkIHRvIDAgYmVmb3JlIHRoaXMgdGhyZWFkIHdhcyBzcGF3bmVkCisJCSAqIGFuZCB3ZSByZXNldCBpdCB0byAwIHJpZ2h0IGF3YXkuCisJCSAqLworCQlwdGhyZWFkX211dGV4X2xvY2soJm1lLT5tdXRleCk7CisJCXdoaWxlICghbWUtPmRhdGFfcmVhZHkpCisJCQlwdGhyZWFkX2NvbmRfd2FpdCgmbWUtPmNvbmQsICZtZS0+bXV0ZXgpOworCQltZS0+ZGF0YV9yZWFkeSA9IDA7CisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtZS0+bXV0ZXgpOworCX0KKwkvKiBsZWF2ZSAtPndvcmtpbmcgMSBzbyB0aGF0IHRoaXMgZG9lc24ndCBnZXQgbW9yZSB3b3JrIGFzc2lnbmVkICovCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGxsX2ZpbmRfZGVsdGFzKHN0cnVjdCBvYmplY3RfZW50cnkgKipsaXN0LCB1bnNpZ25lZCBsaXN0X3NpemUsCisJCQkgICBpbnQgd2luZG93LCBpbnQgZGVwdGgsIHVuc2lnbmVkICpwcm9jZXNzZWQpCit7CisJc3RydWN0IHRocmVhZF9wYXJhbXMgKnA7CisJaW50IGksIHJldCwgYWN0aXZlX3RocmVhZHMgPSAwOworCisJaW5pdF90aHJlYWRlZF9zZWFyY2goKTsKKworCWlmICghZGVsdGFfc2VhcmNoX3RocmVhZHMpCS8qIC0tdGhyZWFkcz0wIG1lYW5zIGF1dG9kZXRlY3QgKi8KKwkJZGVsdGFfc2VhcmNoX3RocmVhZHMgPSBvbmxpbmVfY3B1cygpOworCWlmIChkZWx0YV9zZWFyY2hfdGhyZWFkcyA8PSAxKSB7CisJCWZpbmRfZGVsdGFzKGxpc3QsICZsaXN0X3NpemUsIHdpbmRvdywgZGVwdGgsIHByb2Nlc3NlZCk7CisJCWNsZWFudXBfdGhyZWFkZWRfc2VhcmNoKCk7CisJCXJldHVybjsKKwl9CisJaWYgKHByb2dyZXNzID4gcGFja190b19zdGRvdXQpCisJCWZwcmludGYoc3RkZXJyLCAiRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gJWQgdGhyZWFkcy5cbiIsCisJCQkJZGVsdGFfc2VhcmNoX3RocmVhZHMpOworCXAgPSB4Y2FsbG9jKGRlbHRhX3NlYXJjaF90aHJlYWRzLCBzaXplb2YoKnApKTsKKworCS8qIFBhcnRpdGlvbiB0aGUgd29yayBhbW9uZ3N0IHdvcmsgdGhyZWFkcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGVsdGFfc2VhcmNoX3RocmVhZHM7IGkrKykgeworCQl1bnNpZ25lZCBzdWJfc2l6ZSA9IGxpc3Rfc2l6ZSAvIChkZWx0YV9zZWFyY2hfdGhyZWFkcyAtIGkpOworCisJCS8qIGRvbid0IHVzZSB0b28gc21hbGwgc2VnbWVudHMgb3Igbm8gZGVsdGFzIHdpbGwgYmUgZm91bmQgKi8KKwkJaWYgKHN1Yl9zaXplIDwgMip3aW5kb3cgJiYgaSsxIDwgZGVsdGFfc2VhcmNoX3RocmVhZHMpCisJCQlzdWJfc2l6ZSA9IDA7CisKKwkJcFtpXS53aW5kb3cgPSB3aW5kb3c7CisJCXBbaV0uZGVwdGggPSBkZXB0aDsKKwkJcFtpXS5wcm9jZXNzZWQgPSBwcm9jZXNzZWQ7CisJCXBbaV0ud29ya2luZyA9IDE7CisJCXBbaV0uZGF0YV9yZWFkeSA9IDA7CisKKwkJLyogdHJ5IHRvIHNwbGl0IGNodW5rcyBvbiAicGF0aCIgYm91bmRhcmllcyAqLworCQl3aGlsZSAoc3ViX3NpemUgJiYgc3ViX3NpemUgPCBsaXN0X3NpemUgJiYKKwkJICAgICAgIGxpc3Rbc3ViX3NpemVdLT5oYXNoICYmCisJCSAgICAgICBsaXN0W3N1Yl9zaXplXS0+aGFzaCA9PSBsaXN0W3N1Yl9zaXplLTFdLT5oYXNoKQorCQkJc3ViX3NpemUrKzsKKworCQlwW2ldLmxpc3QgPSBsaXN0OworCQlwW2ldLmxpc3Rfc2l6ZSA9IHN1Yl9zaXplOworCQlwW2ldLnJlbWFpbmluZyA9IHN1Yl9zaXplOworCisJCWxpc3QgKz0gc3ViX3NpemU7CisJCWxpc3Rfc2l6ZSAtPSBzdWJfc2l6ZTsKKwl9CisKKwkvKiBTdGFydCB3b3JrIHRocmVhZHMuICovCisJZm9yIChpID0gMDsgaSA8IGRlbHRhX3NlYXJjaF90aHJlYWRzOyBpKyspIHsKKwkJaWYgKCFwW2ldLmxpc3Rfc2l6ZSkKKwkJCWNvbnRpbnVlOworCQlwdGhyZWFkX211dGV4X2luaXQoJnBbaV0ubXV0ZXgsIE5VTEwpOworCQlwdGhyZWFkX2NvbmRfaW5pdCgmcFtpXS5jb25kLCBOVUxMKTsKKwkJcmV0ID0gcHRocmVhZF9jcmVhdGUoJnBbaV0udGhyZWFkLCBOVUxMLAorCQkJCSAgICAgdGhyZWFkZWRfZmluZF9kZWx0YXMsICZwW2ldKTsKKwkJaWYgKHJldCkKKwkJCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIiwgc3RyZXJyb3IocmV0KSk7CisJCWFjdGl2ZV90aHJlYWRzKys7CisJfQorCisJLyoKKwkgKiBOb3cgbGV0J3Mgd2FpdCBmb3Igd29yayBjb21wbGV0aW9uLiAgRWFjaCB0aW1lIGEgdGhyZWFkIGlzIGRvbmUKKwkgKiB3aXRoIGl0cyB3b3JrLCB3ZSBzdGVhbCBoYWxmIG9mIHRoZSByZW1haW5pbmcgd29yayBmcm9tIHRoZQorCSAqIHRocmVhZCB3aXRoIHRoZSBsYXJnZXN0IG51bWJlciBvZiB1bnByb2Nlc3NlZCBvYmplY3RzIGFuZCBnaXZlCisJICogaXQgdG8gdGhhdCBuZXdseSBpZGxlIHRocmVhZC4gIFRoaXMgZW5zdXJlIGdvb2QgbG9hZCBiYWxhbmNpbmcKKwkgKiB1bnRpbCB0aGUgcmVtYWluaW5nIG9iamVjdCBsaXN0IHNlZ21lbnRzIGFyZSBzaW1wbHkgdG9vIHNob3J0CisJICogdG8gYmUgd29ydGggc3BsaXR0aW5nIGFueW1vcmUuCisJICovCisJd2hpbGUgKGFjdGl2ZV90aHJlYWRzKSB7CisJCXN0cnVjdCB0aHJlYWRfcGFyYW1zICp0YXJnZXQgPSBOVUxMOworCQlzdHJ1Y3QgdGhyZWFkX3BhcmFtcyAqdmljdGltID0gTlVMTDsKKwkJdW5zaWduZWQgc3ViX3NpemUgPSAwOworCisJCXByb2dyZXNzX2xvY2soKTsKKwkJZm9yICg7OykgeworCQkJZm9yIChpID0gMDsgIXRhcmdldCAmJiBpIDwgZGVsdGFfc2VhcmNoX3RocmVhZHM7IGkrKykKKwkJCQlpZiAoIXBbaV0ud29ya2luZykKKwkJCQkJdGFyZ2V0ID0gJnBbaV07CisJCQlpZiAodGFyZ2V0KQorCQkJCWJyZWFrOworCQkJcHRocmVhZF9jb25kX3dhaXQoJnByb2dyZXNzX2NvbmQsICZwcm9ncmVzc19tdXRleCk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgZGVsdGFfc2VhcmNoX3RocmVhZHM7IGkrKykKKwkJCWlmIChwW2ldLnJlbWFpbmluZyA+IDIqd2luZG93ICYmCisJCQkgICAgKCF2aWN0aW0gfHwgdmljdGltLT5yZW1haW5pbmcgPCBwW2ldLnJlbWFpbmluZykpCisJCQkJdmljdGltID0gJnBbaV07CisJCWlmICh2aWN0aW0pIHsKKwkJCXN1Yl9zaXplID0gdmljdGltLT5yZW1haW5pbmcgLyAyOworCQkJbGlzdCA9IHZpY3RpbS0+bGlzdCArIHZpY3RpbS0+bGlzdF9zaXplIC0gc3ViX3NpemU7CisJCQl3aGlsZSAoc3ViX3NpemUgJiYgbGlzdFswXS0+aGFzaCAmJgorCQkJICAgICAgIGxpc3RbMF0tPmhhc2ggPT0gbGlzdFstMV0tPmhhc2gpIHsKKwkJCQlsaXN0Kys7CisJCQkJc3ViX3NpemUtLTsKKwkJCX0KKwkJCWlmICghc3ViX3NpemUpIHsKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHBvc3NpYmxlIGZvciBzb21lICJwYXRocyIgdG8gaGF2ZQorCQkJCSAqIHNvIG1hbnkgb2JqZWN0cyB0aGF0IG5vIGhhc2ggYm91bmRhcnkKKwkJCQkgKiBtaWdodCBiZSBmb3VuZC4gIExldCdzIGp1c3Qgc3RlYWwgdGhlCisJCQkJICogZXhhY3QgaGFsZiBpbiB0aGF0IGNhc2UuCisJCQkJICovCisJCQkJc3ViX3NpemUgPSB2aWN0aW0tPnJlbWFpbmluZyAvIDI7CisJCQkJbGlzdCAtPSBzdWJfc2l6ZTsKKwkJCX0KKwkJCXRhcmdldC0+bGlzdCA9IGxpc3Q7CisJCQl2aWN0aW0tPmxpc3Rfc2l6ZSAtPSBzdWJfc2l6ZTsKKwkJCXZpY3RpbS0+cmVtYWluaW5nIC09IHN1Yl9zaXplOworCQl9CisJCXRhcmdldC0+bGlzdF9zaXplID0gc3ViX3NpemU7CisJCXRhcmdldC0+cmVtYWluaW5nID0gc3ViX3NpemU7CisJCXRhcmdldC0+d29ya2luZyA9IDE7CisJCXByb2dyZXNzX3VubG9jaygpOworCisJCXB0aHJlYWRfbXV0ZXhfbG9jaygmdGFyZ2V0LT5tdXRleCk7CisJCXRhcmdldC0+ZGF0YV9yZWFkeSA9IDE7CisJCXB0aHJlYWRfY29uZF9zaWduYWwoJnRhcmdldC0+Y29uZCk7CisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0YXJnZXQtPm11dGV4KTsKKworCQlpZiAoIXN1Yl9zaXplKSB7CisJCQlwdGhyZWFkX2pvaW4odGFyZ2V0LT50aHJlYWQsIE5VTEwpOworCQkJcHRocmVhZF9jb25kX2Rlc3Ryb3koJnRhcmdldC0+Y29uZCk7CisJCQlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnRhcmdldC0+bXV0ZXgpOworCQkJYWN0aXZlX3RocmVhZHMtLTsKKwkJfQorCX0KKwljbGVhbnVwX3RocmVhZGVkX3NlYXJjaCgpOworCWZyZWUocCk7Cit9CisKKyNlbHNlCisjZGVmaW5lIGxsX2ZpbmRfZGVsdGFzKGwsIHMsIHcsIGQsIHApCWZpbmRfZGVsdGFzKGwsICZzLCB3LCBkLCBwKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgYWRkX3JlZl90YWcoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJdW5zaWduZWQgY2hhciBwZWVsZWRbMjBdOworCisJaWYgKCFwcmVmaXhjbXAocGF0aCwgInJlZnMvdGFncy8iKSAmJiAvKiBpcyBhIHRhZz8gKi8KKwkgICAgIXBlZWxfcmVmKHBhdGgsIHBlZWxlZCkgICAgICAgICYmIC8qIHBlZWxhYmxlPyAqLworCSAgICAhaXNfbnVsbF9zaGExKHBlZWxlZCkgICAgICAgICAgJiYgLyogYW5ub3RhdGVkIHRhZz8gKi8KKwkgICAgbG9jYXRlX29iamVjdF9lbnRyeShwZWVsZWQpKSAgICAgIC8qIG9iamVjdCBwYWNrZWQ/ICovCisJCWFkZF9vYmplY3RfZW50cnkoc2hhMSwgT0JKX1RBRywgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfcGFjayhpbnQgd2luZG93LCBpbnQgZGVwdGgpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqKmRlbHRhX2xpc3Q7CisJdWludDMyX3QgaSwgbnJfZGVsdGFzOworCXVuc2lnbmVkIG47CisKKwlnZXRfb2JqZWN0X2RldGFpbHMoKTsKKworCS8qCisJICogSWYgd2UncmUgbG9jYWxseSByZXBhY2tpbmcgdGhlbiB3ZSBuZWVkIHRvIGJlIGRvdWJseSBjYXJlZnVsCisJICogZnJvbSBub3cgb24gaW4gb3JkZXIgdG8gbWFrZSBzdXJlIG5vIHN0ZWFsdGggY29ycnVwdGlvbiBnZXRzCisJICogcHJvcGFnYXRlZCB0byB0aGUgbmV3IHBhY2suICBDbGllbnRzIHJlY2VpdmluZyBzdHJlYW1lZCBwYWNrcworCSAqIHNob3VsZCB2YWxpZGF0ZSBldmVyeXRoaW5nIHRoZXkgZ2V0IGFueXdheSBzbyBubyBuZWVkIHRvIGluY3VyCisJICogdGhlIGFkZGl0aW9uYWwgY29zdCBoZXJlIGluIHRoYXQgY2FzZS4KKwkgKi8KKwlpZiAoIXBhY2tfdG9fc3Rkb3V0KQorCQlkb19jaGVja19wYWNrZWRfb2JqZWN0X2NyYyA9IDE7CisKKwlpZiAoIW5yX29iamVjdHMgfHwgIXdpbmRvdyB8fCAhZGVwdGgpCisJCXJldHVybjsKKworCWRlbHRhX2xpc3QgPSB4bWFsbG9jKG5yX29iamVjdHMgKiBzaXplb2YoKmRlbHRhX2xpc3QpKTsKKwlucl9kZWx0YXMgPSBuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkgPSBvYmplY3RzICsgaTsKKworCQlpZiAoZW50cnktPmRlbHRhKQorCQkJLyogVGhpcyBoYXBwZW5zIGlmIHdlIGRlY2lkZWQgdG8gcmV1c2UgZXhpc3RpbmcKKwkJCSAqIGRlbHRhIGZyb20gYSBwYWNrLiAgInJldXNlX2RlbHRhICYmIiBpcyBpbXBsaWVkLgorCQkJICovCisJCQljb250aW51ZTsKKworCQlpZiAoZW50cnktPnNpemUgPCA1MCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlbnRyeS0+bm9fdHJ5X2RlbHRhKQorCQkJY29udGludWU7CisKKwkJaWYgKCFlbnRyeS0+cHJlZmVycmVkX2Jhc2UpIHsKKwkJCW5yX2RlbHRhcysrOworCQkJaWYgKGVudHJ5LT50eXBlIDwgMCkKKwkJCQlkaWUoInVuYWJsZSB0byBnZXQgdHlwZSBvZiBvYmplY3QgJXMiLAorCQkJCSAgICBzaGExX3RvX2hleChlbnRyeS0+aWR4LnNoYTEpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChlbnRyeS0+dHlwZSA8IDApIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgb2JqZWN0IGlzIG5vdCBmb3VuZCwgYnV0IHdlCisJCQkJICogZG9uJ3QgaGF2ZSB0byBpbmNsdWRlIGl0IGFueXdheS4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWRlbHRhX2xpc3RbbisrXSA9IGVudHJ5OworCX0KKworCWlmIChucl9kZWx0YXMgJiYgbiA+IDEpIHsKKwkJdW5zaWduZWQgbnJfZG9uZSA9IDA7CisJCWlmIChwcm9ncmVzcykKKwkJCXByb2dyZXNzX3N0YXRlID0gc3RhcnRfcHJvZ3Jlc3MoIkNvbXByZXNzaW5nIG9iamVjdHMiLAorCQkJCQkJCW5yX2RlbHRhcyk7CisJCXFzb3J0KGRlbHRhX2xpc3QsIG4sIHNpemVvZigqZGVsdGFfbGlzdCksIHR5cGVfc2l6ZV9zb3J0KTsKKwkJbGxfZmluZF9kZWx0YXMoZGVsdGFfbGlzdCwgbiwgd2luZG93KzEsIGRlcHRoLCAmbnJfZG9uZSk7CisJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzX3N0YXRlKTsKKwkJaWYgKG5yX2RvbmUgIT0gbnJfZGVsdGFzKQorCQkJZGllKCJpbmNvbnNpc3RlbmN5IHdpdGggZGVsdGEgY291bnQiKTsKKwl9CisJZnJlZShkZWx0YV9saXN0KTsKK30KKworc3RhdGljIGludCBnaXRfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAoaywgInBhY2sud2luZG93IikpIHsKKwkJd2luZG93ID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay53aW5kb3dtZW1vcnkiKSkgeworCQl3aW5kb3dfbWVtb3J5X2xpbWl0ID0gZ2l0X2NvbmZpZ191bG9uZyhrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLmRlcHRoIikpIHsKKwkJZGVwdGggPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLmNvbXByZXNzaW9uIikpIHsKKwkJaW50IGxldmVsID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCWlmIChsZXZlbCA9PSAtMSkKKwkJCWxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCQllbHNlIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBaX0JFU1RfQ09NUFJFU1NJT04pCisJCQlkaWUoImJhZCBwYWNrIGNvbXByZXNzaW9uIGxldmVsICVkIiwgbGV2ZWwpOworCQlwYWNrX2NvbXByZXNzaW9uX2xldmVsID0gbGV2ZWw7CisJCXBhY2tfY29tcHJlc3Npb25fc2VlbiA9IDE7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay5kZWx0YWNhY2hlc2l6ZSIpKSB7CisJCW1heF9kZWx0YV9jYWNoZV9zaXplID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay5kZWx0YWNhY2hlbGltaXQiKSkgeworCQljYWNoZV9tYXhfc21hbGxfZGVsdGFfc2l6ZSA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInBhY2sudGhyZWFkcyIpKSB7CisJCWRlbHRhX3NlYXJjaF90aHJlYWRzID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCWlmIChkZWx0YV9zZWFyY2hfdGhyZWFkcyA8IDApCisJCQlkaWUoImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiLAorCQkJICAgIGRlbHRhX3NlYXJjaF90aHJlYWRzKTsKKyNpZmRlZiBOT19QVEhSRUFEUworCQlpZiAoZGVsdGFfc2VhcmNoX3RocmVhZHMgIT0gMSkKKwkJCXdhcm5pbmcoIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiLCBrKTsKKyNlbmRpZgorCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInBhY2suaW5kZXh2ZXJzaW9uIikpIHsKKwkJcGFja19pZHhfb3B0cy52ZXJzaW9uID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCWlmIChwYWNrX2lkeF9vcHRzLnZlcnNpb24gPiAyKQorCQkJZGllKCJiYWQgcGFjay5pbmRleHZlcnNpb249JSJQUkl1MzIsCisJCQkgICAgcGFja19pZHhfb3B0cy52ZXJzaW9uKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoaywgdiwgY2IpOworfQorCitzdGF0aWMgdm9pZCByZWFkX29iamVjdF9saXN0X2Zyb21fc3RkaW4odm9pZCkKK3sKKwljaGFyIGxpbmVbNDAgKyAxICsgUEFUSF9NQVggKyAyXTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJZm9yICg7OykgeworCQlpZiAoIWZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pKSB7CisJCQlpZiAoZmVvZihzdGRpbikpCisJCQkJYnJlYWs7CisJCQlpZiAoIWZlcnJvcihzdGRpbikpCisJCQkJZGllKCJmZ2V0cyByZXR1cm5lZCBOVUxMLCBub3QgRU9GLCBub3QgZXJyb3IhIik7CisJCQlpZiAoZXJybm8gIT0gRUlOVFIpCisJCQkJZGllX2Vycm5vKCJmZ2V0cyIpOworCQkJY2xlYXJlcnIoc3RkaW4pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGxpbmVbMF0gPT0gJy0nKSB7CisJCQlpZiAoZ2V0X3NoYTFfaGV4KGxpbmUrMSwgc2hhMSkpCisJCQkJZGllKCJleHBlY3RlZCBlZGdlIHNoYTEsIGdvdCBnYXJiYWdlOlxuICVzIiwKKwkJCQkgICAgbGluZSk7CisJCQlhZGRfcHJlZmVycmVkX2Jhc2Uoc2hhMSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZ2V0X3NoYTFfaGV4KGxpbmUsIHNoYTEpKQorCQkJZGllKCJleHBlY3RlZCBzaGExLCBnb3QgZ2FyYmFnZTpcbiAlcyIsIGxpbmUpOworCisJCWFkZF9wcmVmZXJyZWRfYmFzZV9vYmplY3QobGluZSs0MSk7CisJCWFkZF9vYmplY3RfZW50cnkoc2hhMSwgMCwgbGluZSs0MSwgMCk7CisJfQorfQorCisjZGVmaW5lIE9CSkVDVF9BRERFRCAoMXU8PDIwKQorCitzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJYWRkX29iamVjdF9lbnRyeShjb21taXQtPm9iamVjdC5zaGExLCBPQkpfQ09NTUlULCBOVUxMLCAwKTsKKwljb21taXQtPm9iamVjdC5mbGFncyB8PSBPQkpFQ1RfQURERUQ7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwKKwkJCWNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKmxhc3QsCisJCQl2b2lkICpkYXRhKQoreworCWNoYXIgKm5hbWUgPSBwYXRoX25hbWUocGF0aCwgbGFzdCk7CisKKwlhZGRfcHJlZmVycmVkX2Jhc2Vfb2JqZWN0KG5hbWUpOworCWFkZF9vYmplY3RfZW50cnkob2JqLT5zaGExLCBvYmotPnR5cGUsIG5hbWUsIDApOworCW9iai0+ZmxhZ3MgfD0gT0JKRUNUX0FEREVEOworCisJLyoKKwkgKiBXZSB3aWxsIGhhdmUgZ2VuZXJhdGVkIHRoZSBoYXNoIGZyb20gdGhlIG5hbWUsCisJICogYnV0IG5vdCBzYXZlZCBhIHBvaW50ZXIgdG8gaXQgLSB3ZSBjYW4gZnJlZSBpdAorCSAqLworCWZyZWUoKGNoYXIgKiluYW1lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19lZGdlKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlhZGRfcHJlZmVycmVkX2Jhc2UoY29tbWl0LT5vYmplY3Quc2hhMSk7Cit9CisKK3N0cnVjdCBpbl9wYWNrX29iamVjdCB7CisJb2ZmX3Qgb2Zmc2V0OworCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKK307CisKK3N0cnVjdCBpbl9wYWNrIHsKKwlpbnQgYWxsb2M7CisJaW50IG5yOworCXN0cnVjdCBpbl9wYWNrX29iamVjdCAqYXJyYXk7Cit9OworCitzdGF0aWMgdm9pZCBtYXJrX2luX3BhY2tfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iamVjdCwgc3RydWN0IHBhY2tlZF9naXQgKnAsIHN0cnVjdCBpbl9wYWNrICppbl9wYWNrKQoreworCWluX3BhY2stPmFycmF5W2luX3BhY2stPm5yXS5vZmZzZXQgPSBmaW5kX3BhY2tfZW50cnlfb25lKG9iamVjdC0+c2hhMSwgcCk7CisJaW5fcGFjay0+YXJyYXlbaW5fcGFjay0+bnJdLm9iamVjdCA9IG9iamVjdDsKKwlpbl9wYWNrLT5ucisrOworfQorCisvKgorICogQ29tcGFyZSB0aGUgb2JqZWN0cyBpbiB0aGUgb2Zmc2V0IG9yZGVyLCBpbiBvcmRlciB0byBlbXVsYXRlIHRoZQorICogImdpdCByZXYtbGlzdCAtLW9iamVjdHMiIG91dHB1dCB0aGF0IHByb2R1Y2VkIHRoZSBwYWNrIG9yaWdpbmFsbHkuCisgKi8KK3N0YXRpYyBpbnQgb2ZzY21wKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwlzdHJ1Y3QgaW5fcGFja19vYmplY3QgKmEgPSAoc3RydWN0IGluX3BhY2tfb2JqZWN0ICopYV87CisJc3RydWN0IGluX3BhY2tfb2JqZWN0ICpiID0gKHN0cnVjdCBpbl9wYWNrX29iamVjdCAqKWJfOworCisJaWYgKGEtPm9mZnNldCA8IGItPm9mZnNldCkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGEtPm9mZnNldCA+IGItPm9mZnNldCkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gaGFzaGNtcChhLT5vYmplY3QtPnNoYTEsIGItPm9iamVjdC0+c2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9vYmplY3RzX2luX3VucGFja2VkX3BhY2tzKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlzdHJ1Y3QgaW5fcGFjayBpbl9wYWNrOworCXVpbnQzMl90IGk7CisKKwltZW1zZXQoJmluX3BhY2ssIDAsIHNpemVvZihpbl9wYWNrKSk7CisKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCQlzdHJ1Y3Qgb2JqZWN0ICpvOworCisJCWlmICghcC0+cGFja19sb2NhbCB8fCBwLT5wYWNrX2tlZXApCisJCQljb250aW51ZTsKKwkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCWRpZSgiY2Fubm90IG9wZW4gcGFjayBpbmRleCIpOworCisJCUFMTE9DX0dST1coaW5fcGFjay5hcnJheSwKKwkJCSAgIGluX3BhY2subnIgKyBwLT5udW1fb2JqZWN0cywKKwkJCSAgIGluX3BhY2suYWxsb2MpOworCisJCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fb2JqZWN0czsgaSsrKSB7CisJCQlzaGExID0gbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCBpKTsKKwkJCW8gPSBsb29rdXBfdW5rbm93bl9vYmplY3Qoc2hhMSk7CisJCQlpZiAoIShvLT5mbGFncyAmIE9CSkVDVF9BRERFRCkpCisJCQkJbWFya19pbl9wYWNrX29iamVjdChvLCBwLCAmaW5fcGFjayk7CisJCQlvLT5mbGFncyB8PSBPQkpFQ1RfQURERUQ7CisJCX0KKwl9CisKKwlpZiAoaW5fcGFjay5ucikgeworCQlxc29ydChpbl9wYWNrLmFycmF5LCBpbl9wYWNrLm5yLCBzaXplb2YoaW5fcGFjay5hcnJheVswXSksCisJCSAgICAgIG9mc2NtcCk7CisJCWZvciAoaSA9IDA7IGkgPCBpbl9wYWNrLm5yOyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3QgKm8gPSBpbl9wYWNrLmFycmF5W2ldLm9iamVjdDsKKwkJCWFkZF9vYmplY3RfZW50cnkoby0+c2hhMSwgby0+dHlwZSwgIiIsIDApOworCQl9CisJfQorCWZyZWUoaW5fcGFjay5hcnJheSk7Cit9CisKK3N0YXRpYyBpbnQgaGFzX3NoYTFfcGFja19rZXB0X29yX25vbmxvY2FsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RhdGljIHN0cnVjdCBwYWNrZWRfZ2l0ICpsYXN0X2ZvdW5kID0gKHZvaWQgKikxOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJcCA9IChsYXN0X2ZvdW5kICE9ICh2b2lkICopMSkgPyBsYXN0X2ZvdW5kIDogcGFja2VkX2dpdDsKKworCXdoaWxlIChwKSB7CisJCWlmICgoIXAtPnBhY2tfbG9jYWwgfHwgcC0+cGFja19rZWVwKSAmJgorCQkJZmluZF9wYWNrX2VudHJ5X29uZShzaGExLCBwKSkgeworCQkJbGFzdF9mb3VuZCA9IHA7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAocCA9PSBsYXN0X2ZvdW5kKQorCQkJcCA9IHBhY2tlZF9naXQ7CisJCWVsc2UKKwkJCXAgPSBwLT5uZXh0OworCQlpZiAocCA9PSBsYXN0X2ZvdW5kKQorCQkJcCA9IHAtPm5leHQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsb29zZW5fdW51c2VkX3BhY2tlZF9vYmplY3RzKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwl1aW50MzJfdCBpOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CisKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAoIXAtPnBhY2tfbG9jYWwgfHwgcC0+cGFja19rZWVwKQorCQkJY29udGludWU7CisKKwkJaWYgKHVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uICYmCisJCSAgICBwLT5tdGltZSA8IHVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uKQorCQkJY29udGludWU7CisKKwkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCWRpZSgiY2Fubm90IG9wZW4gcGFjayBpbmRleCIpOworCisJCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fb2JqZWN0czsgaSsrKSB7CisJCQlzaGExID0gbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCBpKTsKKwkJCWlmICghbG9jYXRlX29iamVjdF9lbnRyeShzaGExKSAmJgorCQkJCSFoYXNfc2hhMV9wYWNrX2tlcHRfb3Jfbm9ubG9jYWwoc2hhMSkpCisJCQkJaWYgKGZvcmNlX29iamVjdF9sb29zZShzaGExLCBwLT5tdGltZSkpCisJCQkJCWRpZSgidW5hYmxlIHRvIGZvcmNlIGxvb3NlIG9iamVjdCIpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRfb2JqZWN0X2xpc3QoaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJY2hhciBsaW5lWzEwMDBdOworCWludCBmbGFncyA9IDA7CisKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlzZXR1cF9yZXZpc2lvbnMoYWMsIGF2LCAmcmV2cywgTlVMTCk7CisKKwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbikgIT0gTlVMTCkgeworCQlpbnQgbGVuID0gc3RybGVuKGxpbmUpOworCQlpZiAobGVuICYmIGxpbmVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJCWxpbmVbLS1sZW5dID0gMDsKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKwkJaWYgKCpsaW5lID09ICctJykgeworCQkJaWYgKCFzdHJjbXAobGluZSwgIi0tbm90IikpIHsKKwkJCQlmbGFncyBePSBVTklOVEVSRVNUSU5HOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZGllKCJub3QgYSByZXYgJyVzJyIsIGxpbmUpOworCQl9CisJCWlmIChoYW5kbGVfcmV2aXNpb25fYXJnKGxpbmUsICZyZXZzLCBmbGFncywgUkVWQVJHX0NBTk5PVF9CRV9GSUxFTkFNRSkpCisJCQlkaWUoImJhZCByZXZpc2lvbiAnJXMnIiwgbGluZSk7CisJfQorCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcocmV2cy5jb21taXRzLCAmcmV2cywgc2hvd19lZGdlKTsKKwl0cmF2ZXJzZV9jb21taXRfbGlzdCgmcmV2cywgc2hvd19jb21taXQsIHNob3dfb2JqZWN0LCBOVUxMKTsKKworCWlmIChrZWVwX3VucmVhY2hhYmxlKQorCQlhZGRfb2JqZWN0c19pbl91bnBhY2tlZF9wYWNrcygmcmV2cyk7CisJaWYgKHVucGFja191bnJlYWNoYWJsZSkKKwkJbG9vc2VuX3VudXNlZF9wYWNrZWRfb2JqZWN0cygmcmV2cyk7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2luZGV4X3ZlcnNpb24oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWNoYXIgKmM7CisJY29uc3QgY2hhciAqdmFsID0gYXJnOworCXBhY2tfaWR4X29wdHMudmVyc2lvbiA9IHN0cnRvdWwodmFsLCAmYywgMTApOworCWlmIChwYWNrX2lkeF9vcHRzLnZlcnNpb24gPiAyKQorCQlkaWUoXygidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIpLCB2YWwpOworCWlmICgqYyA9PSAnLCcgJiYgY1sxXSkKKwkJcGFja19pZHhfb3B0cy5vZmYzMl9saW1pdCA9IHN0cnRvdWwoYysxLCAmYywgMCk7CisJaWYgKCpjIHx8IHBhY2tfaWR4X29wdHMub2ZmMzJfbGltaXQgJiAweDgwMDAwMDAwKQorCQlkaWUoXygiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIpLCB2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV91bnBhY2tfdW5yZWFjaGFibGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpIHsKKwkJdW5wYWNrX3VucmVhY2hhYmxlID0gMDsKKwkJdW5wYWNrX3VucmVhY2hhYmxlX2V4cGlyYXRpb24gPSAwOworCX0KKwllbHNlIHsKKwkJdW5wYWNrX3VucmVhY2hhYmxlID0gMTsKKwkJaWYgKGFyZykKKwkJCXVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uID0gYXBwcm94aWRhdGUoYXJnKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3Vsb25nKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkKKwkJZGllKF8oIm9wdGlvbiAlcyBkb2VzIG5vdCBhY2NlcHQgbmVnYXRpdmUgZm9ybSIpLAorCQkgICAgb3B0LT5sb25nX25hbWUpOworCisJaWYgKCFnaXRfcGFyc2VfdWxvbmcoYXJnLCBvcHQtPnZhbHVlKSkKKwkJZGllKF8oInVuYWJsZSB0byBwYXJzZSB2YWx1ZSAnJXMnIGZvciBvcHRpb24gJXMiKSwKKwkJICAgIGFyZywgb3B0LT5sb25nX25hbWUpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIE9QVF9VTE9ORyhzLCBsLCB2LCBoKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksICJuIiwgKGgpLAlcCisJICBQQVJTRV9PUFRfTk9ORUcsIG9wdGlvbl9wYXJzZV91bG9uZyB9CisKK2ludCBjbWRfcGFja19vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCB1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAwOworCWludCB0aGluID0gMDsKKwlpbnQgYWxsX3Byb2dyZXNzX2ltcGxpZWQgPSAwOworCWNvbnN0IGNoYXIgKnJwX2F2WzZdOworCWludCBycF9hYyA9IDA7CisJaW50IHJldl9saXN0X3VucGFja2VkID0gMCwgcmV2X2xpc3RfYWxsID0gMCwgcmV2X2xpc3RfcmVmbG9nID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIHBhY2tfb2JqZWN0c19vcHRpb25zW10gPSB7CisJCU9QVF9TRVRfSU5UKCdxJywgInF1aWV0IiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIpLCAwKSwKKwkJT1BUX1NFVF9JTlQoMCwgInByb2dyZXNzIiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJzaG93IHByb2dyZXNzIG1ldGVyIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAiYWxsLXByb2dyZXNzIiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIpLCAyKSwKKwkJT1BUX0JPT0woMCwgImFsbC1wcm9ncmVzcy1pbXBsaWVkIiwKKwkJCSAmYWxsX3Byb2dyZXNzX2ltcGxpZWQsCisJCQkgTl8oInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpbmRleC12ZXJzaW9uIiwgTlVMTCwgTl8oInZlcnNpb25bLG9mZnNldF0iKSwKKwkJICBOXygid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIpLAorCQkgIDAsIG9wdGlvbl9wYXJzZV9pbmRleF92ZXJzaW9uIH0sCisJCU9QVF9VTE9ORygwLCAibWF4LXBhY2stc2l6ZSIsICZwYWNrX3NpemVfbGltaXQsCisJCQkgIE5fKCJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIikpLAorCQlPUFRfQk9PTCgwLCAibG9jYWwiLCAmbG9jYWwsCisJCQkgTl8oImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIpKSwKKwkJT1BUX0JPT0woMCwgImluY3JlbWVudGFsIiwgJmluY3JlbWVudGFsLAorCQkJIE5fKCJpZ25vcmUgcGFja2VkIG9iamVjdHMiKSksCisJCU9QVF9JTlRFR0VSKDAsICJ3aW5kb3ciLCAmd2luZG93LAorCQkJICAgIE5fKCJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIikpLAorCQlPUFRfVUxPTkcoMCwgIndpbmRvdy1tZW1vcnkiLCAmd2luZG93X21lbW9yeV9saW1pdCwKKwkJCSAgTl8oImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiKSksCisJCU9QVF9JTlRFR0VSKDAsICJkZXB0aCIsICZkZXB0aCwKKwkJCSAgICBOXygibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siKSksCisJCU9QVF9CT09MKDAsICJyZXVzZS1kZWx0YSIsICZyZXVzZV9kZWx0YSwKKwkJCSBOXygicmV1c2UgZXhpc3RpbmcgZGVsdGFzIikpLAorCQlPUFRfQk9PTCgwLCAicmV1c2Utb2JqZWN0IiwgJnJldXNlX29iamVjdCwKKwkJCSBOXygicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woMCwgImRlbHRhLWJhc2Utb2Zmc2V0IiwgJmFsbG93X29mc19kZWx0YSwKKwkJCSBOXygidXNlIE9GU19ERUxUQSBvYmplY3RzIikpLAorCQlPUFRfSU5URUdFUigwLCAidGhyZWFkcyIsICZkZWx0YV9zZWFyY2hfdGhyZWFkcywKKwkJCSAgICBOXygidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIpKSwKKwkJT1BUX0JPT0woMCwgIm5vbi1lbXB0eSIsICZub25fZW1wdHksCisJCQkgTl8oImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiKSksCisJCU9QVF9CT09MKDAsICJyZXZzIiwgJnVzZV9pbnRlcm5hbF9yZXZfbGlzdCwKKwkJCSBOXygicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIpKSwKKwkJeyBPUFRJT05fU0VUX0lOVCwgMCwgInVucGFja2VkIiwgJnJldl9saXN0X3VucGFja2VkLCBOVUxMLAorCQkgIE5fKCJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIpLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgMSB9LAorCQl7IE9QVElPTl9TRVRfSU5ULCAwLCAiYWxsIiwgJnJldl9saXN0X2FsbCwgTlVMTCwKKwkJICBOXygiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiKSwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIDEgfSwKKwkJeyBPUFRJT05fU0VUX0lOVCwgMCwgInJlZmxvZyIsICZyZXZfbGlzdF9yZWZsb2csIE5VTEwsCisJCSAgTl8oImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIpLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgMSB9LAorCQlPUFRfQk9PTCgwLCAic3Rkb3V0IiwgJnBhY2tfdG9fc3Rkb3V0LAorCQkJIE5fKCJvdXRwdXQgcGFjayB0byBzdGRvdXQiKSksCisJCU9QVF9CT09MKDAsICJpbmNsdWRlLXRhZyIsICZpbmNsdWRlX3RhZywKKwkJCSBOXygiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIikpLAorCQlPUFRfQk9PTCgwLCAia2VlcC11bnJlYWNoYWJsZSIsICZrZWVwX3VucmVhY2hhYmxlLAorCQkJIE5fKCJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAidW5wYWNrLXVucmVhY2hhYmxlIiwgTlVMTCwgTl8oInRpbWUiKSwKKwkJICBOXygidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBvcHRpb25fcGFyc2VfdW5wYWNrX3VucmVhY2hhYmxlIH0sCisJCU9QVF9CT09MKDAsICJ0aGluIiwgJnRoaW4sCisJCQkgTl8oImNyZWF0ZSB0aGluIHBhY2tzIikpLAorCQlPUFRfQk9PTCgwLCAiaG9ub3ItcGFjay1rZWVwIiwgJmlnbm9yZV9wYWNrZWRfa2VlcCwKKwkJCSBOXygiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgImNvbXByZXNzaW9uIiwgJnBhY2tfY29tcHJlc3Npb25fbGV2ZWwsCisJCQkgICAgTl8oInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiKSksCisJCU9QVF9TRVRfSU5UKDAsICJrZWVwLXRydWUtcGFyZW50cyIsICZncmFmdHNfcmVwbGFjZV9wYXJlbnRzLAorCQkJICAgIE5fKCJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIpLCAwKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisKKwlyZXNldF9wYWNrX2lkeF9vcHRpb24oJnBhY2tfaWR4X29wdHMpOworCWdpdF9jb25maWcoZ2l0X3BhY2tfY29uZmlnLCBOVUxMKTsKKwlpZiAoIXBhY2tfY29tcHJlc3Npb25fc2VlbiAmJiBjb3JlX2NvbXByZXNzaW9uX3NlZW4pCisJCXBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBjb3JlX2NvbXByZXNzaW9uX2xldmVsOworCisJcHJvZ3Jlc3MgPSBpc2F0dHkoMik7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBwYWNrX29iamVjdHNfb3B0aW9ucywKKwkJCSAgICAgcGFja191c2FnZSwgMCk7CisKKwlpZiAoYXJnYykgeworCQliYXNlX25hbWUgPSBhcmd2WzBdOworCQlhcmdjLS07CisJfQorCWlmIChwYWNrX3RvX3N0ZG91dCAhPSAhYmFzZV9uYW1lIHx8IGFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhwYWNrX3VzYWdlLCBwYWNrX29iamVjdHNfb3B0aW9ucyk7CisKKwlycF9hdltycF9hYysrXSA9ICJwYWNrLW9iamVjdHMiOworCWlmICh0aGluKSB7CisJCXVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDE7CisJCXJwX2F2W3JwX2FjKytdID0gIi0tb2JqZWN0cy1lZGdlIjsKKwl9IGVsc2UKKwkJcnBfYXZbcnBfYWMrK10gPSAiLS1vYmplY3RzIjsKKworCWlmIChyZXZfbGlzdF9hbGwpIHsKKwkJdXNlX2ludGVybmFsX3Jldl9saXN0ID0gMTsKKwkJcnBfYXZbcnBfYWMrK10gPSAiLS1hbGwiOworCX0KKwlpZiAocmV2X2xpc3RfcmVmbG9nKSB7CisJCXVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDE7CisJCXJwX2F2W3JwX2FjKytdID0gIi0tcmVmbG9nIjsKKwl9CisJaWYgKHJldl9saXN0X3VucGFja2VkKSB7CisJCXVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDE7CisJCXJwX2F2W3JwX2FjKytdID0gIi0tdW5wYWNrZWQiOworCX0KKworCWlmICghcmV1c2Vfb2JqZWN0KQorCQlyZXVzZV9kZWx0YSA9IDA7CisJaWYgKHBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPT0gLTEpCisJCXBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisJZWxzZSBpZiAocGFja19jb21wcmVzc2lvbl9sZXZlbCA8IDAgfHwgcGFja19jb21wcmVzc2lvbl9sZXZlbCA+IFpfQkVTVF9DT01QUkVTU0lPTikKKwkJZGllKCJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIsIHBhY2tfY29tcHJlc3Npb25fbGV2ZWwpOworI2lmZGVmIE5PX1BUSFJFQURTCisJaWYgKGRlbHRhX3NlYXJjaF90aHJlYWRzICE9IDEpCisJCXdhcm5pbmcoIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIik7CisjZW5kaWYKKwlpZiAoIXBhY2tfdG9fc3Rkb3V0ICYmICFwYWNrX3NpemVfbGltaXQpCisJCXBhY2tfc2l6ZV9saW1pdCA9IHBhY2tfc2l6ZV9saW1pdF9jZmc7CisJaWYgKHBhY2tfdG9fc3Rkb3V0ICYmIHBhY2tfc2l6ZV9saW1pdCkKKwkJZGllKCItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2Zlci4iKTsKKwlpZiAocGFja19zaXplX2xpbWl0ICYmIHBhY2tfc2l6ZV9saW1pdCA8IDEwMjQqMTAyNCkgeworCQl3YXJuaW5nKCJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIpOworCQlwYWNrX3NpemVfbGltaXQgPSAxMDI0KjEwMjQ7CisJfQorCisJaWYgKCFwYWNrX3RvX3N0ZG91dCAmJiB0aGluKQorCQlkaWUoIi0tdGhpbiBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhbiBpbmRleGFibGUgcGFjay4iKTsKKworCWlmIChrZWVwX3VucmVhY2hhYmxlICYmIHVucGFja191bnJlYWNoYWJsZSkKKwkJZGllKCItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIGFyZSBpbmNvbXBhdGlibGUuIik7CisKKwlpZiAocHJvZ3Jlc3MgJiYgYWxsX3Byb2dyZXNzX2ltcGxpZWQpCisJCXByb2dyZXNzID0gMjsKKworCXByZXBhcmVfcGFja2VkX2dpdCgpOworCisJaWYgKHByb2dyZXNzKQorCQlwcm9ncmVzc19zdGF0ZSA9IHN0YXJ0X3Byb2dyZXNzKCJDb3VudGluZyBvYmplY3RzIiwgMCk7CisJaWYgKCF1c2VfaW50ZXJuYWxfcmV2X2xpc3QpCisJCXJlYWRfb2JqZWN0X2xpc3RfZnJvbV9zdGRpbigpOworCWVsc2UgeworCQlycF9hdltycF9hY10gPSBOVUxMOworCQlnZXRfb2JqZWN0X2xpc3QocnBfYWMsIHJwX2F2KTsKKwl9CisJY2xlYW51cF9wcmVmZXJyZWRfYmFzZSgpOworCWlmIChpbmNsdWRlX3RhZyAmJiBucl9yZXN1bHQpCisJCWZvcl9lYWNoX3JlZihhZGRfcmVmX3RhZywgTlVMTCk7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3Nfc3RhdGUpOworCisJaWYgKG5vbl9lbXB0eSAmJiAhbnJfcmVzdWx0KQorCQlyZXR1cm4gMDsKKwlpZiAobnJfcmVzdWx0KQorCQlwcmVwYXJlX3BhY2sod2luZG93LCBkZXB0aCk7CisJd3JpdGVfcGFja19maWxlKCk7CisJaWYgKHByb2dyZXNzKQorCQlmcHJpbnRmKHN0ZGVyciwgIlRvdGFsICUiUFJJdTMyIiAoZGVsdGEgJSJQUkl1MzIiKSwiCisJCQkiIHJldXNlZCAlIlBSSXUzMiIgKGRlbHRhICUiUFJJdTMyIilcbiIsCisJCQl3cml0dGVuLCB3cml0dGVuX2RlbHRhLCByZXVzZWQsIHJldXNlZF9kZWx0YSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3BhY2stcmVkdW5kYW50LmMgYi9idWlsdGluL3BhY2stcmVkdW5kYW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjNmFmYwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcGFjay1yZWR1bmRhbnQuYwpAQCAtMCwwICsxLDY5NSBAQAorLyoKKyoKKyogQ29weXJpZ2h0IDIwMDUsIEx1a2FzIFNhbmRzdHJvbSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CisqCisqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLgorKgorKi8KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworI2RlZmluZSBCTEtTSVpFIDUxMgorCitzdGF0aWMgY29uc3QgY2hhciBwYWNrX3JlZHVuZGFudF91c2FnZVtdID0KKyJnaXQgcGFjay1yZWR1bmRhbnQgWyAtLXZlcmJvc2UgXSBbIC0tYWx0LW9kYiBdIDwgLS1hbGwgfCA8LnBhY2sgZmlsZW5hbWU+IC4uLj4iOworCitzdGF0aWMgaW50IGxvYWRfYWxsX3BhY2tzLCB2ZXJib3NlLCBhbHRfb2RiOworCitzdHJ1Y3QgbGxpc3RfaXRlbSB7CisJc3RydWN0IGxsaXN0X2l0ZW0gKm5leHQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKK307CitzdGF0aWMgc3RydWN0IGxsaXN0IHsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqZnJvbnQ7CisJc3RydWN0IGxsaXN0X2l0ZW0gKmJhY2s7CisJc2l6ZV90IHNpemU7Cit9ICphbGxfb2JqZWN0czsgLyogYWxsIG9iamVjdHMgd2hpY2ggbXVzdCBiZSBwcmVzZW50IGluIGxvY2FsIHBhY2tmaWxlcyAqLworCitzdGF0aWMgc3RydWN0IHBhY2tfbGlzdCB7CisJc3RydWN0IHBhY2tfbGlzdCAqbmV4dDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjazsKKwlzdHJ1Y3QgbGxpc3QgKnVuaXF1ZV9vYmplY3RzOworCXN0cnVjdCBsbGlzdCAqYWxsX29iamVjdHM7Cit9ICpsb2NhbF9wYWNrcyA9IE5VTEwsICphbHRvZGJfcGFja3MgPSBOVUxMOworCitzdHJ1Y3QgcGxsIHsKKwlzdHJ1Y3QgcGxsICpuZXh0OworCXN0cnVjdCBwYWNrX2xpc3QgKnBsOworfTsKKworc3RhdGljIHN0cnVjdCBsbGlzdF9pdGVtICpmcmVlX25vZGVzOworCitzdGF0aWMgaW5saW5lIHZvaWQgbGxpc3RfaXRlbV9wdXQoc3RydWN0IGxsaXN0X2l0ZW0gKml0ZW0pCit7CisJaXRlbS0+bmV4dCA9IGZyZWVfbm9kZXM7CisJZnJlZV9ub2RlcyA9IGl0ZW07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2l0ZW0gKmxsaXN0X2l0ZW1fZ2V0KHZvaWQpCit7CisJc3RydWN0IGxsaXN0X2l0ZW0gKm5ldzsKKwlpZiAoIGZyZWVfbm9kZXMgKSB7CisJCW5ldyA9IGZyZWVfbm9kZXM7CisJCWZyZWVfbm9kZXMgPSBmcmVlX25vZGVzLT5uZXh0OworCX0gZWxzZSB7CisJCWludCBpID0gMTsKKwkJbmV3ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGxsaXN0X2l0ZW0pICogQkxLU0laRSk7CisJCWZvciAoOyBpIDwgQkxLU0laRTsgaSsrKQorCQkJbGxpc3RfaXRlbV9wdXQoJm5ld1tpXSk7CisJfQorCXJldHVybiBuZXc7Cit9CisKK3N0YXRpYyB2b2lkIGxsaXN0X2ZyZWUoc3RydWN0IGxsaXN0ICpsaXN0KQoreworCXdoaWxlICgobGlzdC0+YmFjayA9IGxpc3QtPmZyb250KSkgeworCQlsaXN0LT5mcm9udCA9IGxpc3QtPmZyb250LT5uZXh0OworCQlsbGlzdF9pdGVtX3B1dChsaXN0LT5iYWNrKTsKKwl9CisJZnJlZShsaXN0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxsaXN0X2luaXQoc3RydWN0IGxsaXN0ICoqbGlzdCkKK3sKKwkqbGlzdCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsbGlzdCkpOworCSgqbGlzdCktPmZyb250ID0gKCpsaXN0KS0+YmFjayA9IE5VTEw7CisJKCpsaXN0KS0+c2l6ZSA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGxpc3QgKiBsbGlzdF9jb3B5KHN0cnVjdCBsbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgbGxpc3QgKnJldDsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqbmV3LCAqb2xkLCAqcHJldjsKKworCWxsaXN0X2luaXQoJnJldCk7CisKKwlpZiAoKHJldC0+c2l6ZSA9IGxpc3QtPnNpemUpID09IDApCisJCXJldHVybiByZXQ7CisKKwluZXcgPSByZXQtPmZyb250ID0gbGxpc3RfaXRlbV9nZXQoKTsKKwluZXctPnNoYTEgPSBsaXN0LT5mcm9udC0+c2hhMTsKKworCW9sZCA9IGxpc3QtPmZyb250LT5uZXh0OworCXdoaWxlIChvbGQpIHsKKwkJcHJldiA9IG5ldzsKKwkJbmV3ID0gbGxpc3RfaXRlbV9nZXQoKTsKKwkJcHJldi0+bmV4dCA9IG5ldzsKKwkJbmV3LT5zaGExID0gb2xkLT5zaGExOworCQlvbGQgPSBvbGQtPm5leHQ7CisJfQorCW5ldy0+bmV4dCA9IE5VTEw7CisJcmV0LT5iYWNrID0gbmV3OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaXRlbSAqbGxpc3RfaW5zZXJ0KHN0cnVjdCBsbGlzdCAqbGlzdCwKKwkJCQkJICAgICAgc3RydWN0IGxsaXN0X2l0ZW0gKmFmdGVyLAorCQkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqbmV3ID0gbGxpc3RfaXRlbV9nZXQoKTsKKwluZXctPnNoYTEgPSBzaGExOworCW5ldy0+bmV4dCA9IE5VTEw7CisKKwlpZiAoYWZ0ZXIgIT0gTlVMTCkgeworCQluZXctPm5leHQgPSBhZnRlci0+bmV4dDsKKwkJYWZ0ZXItPm5leHQgPSBuZXc7CisJCWlmIChhZnRlciA9PSBsaXN0LT5iYWNrKQorCQkJbGlzdC0+YmFjayA9IG5ldzsKKwl9IGVsc2Ugey8qIGluc2VydCBpbiBmcm9udCAqLworCQlpZiAobGlzdC0+c2l6ZSA9PSAwKQorCQkJbGlzdC0+YmFjayA9IG5ldzsKKwkJZWxzZQorCQkJbmV3LT5uZXh0ID0gbGlzdC0+ZnJvbnQ7CisJCWxpc3QtPmZyb250ID0gbmV3OworCX0KKwlsaXN0LT5zaXplKys7CisJcmV0dXJuIG5ldzsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaXRlbSAqbGxpc3RfaW5zZXJ0X2JhY2soc3RydWN0IGxsaXN0ICpsaXN0LAorCQkJCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gbGxpc3RfaW5zZXJ0KGxpc3QsIGxpc3QtPmJhY2ssIHNoYTEpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9pdGVtICpsbGlzdF9pbnNlcnRfc29ydGVkX3VuaXF1ZShzdHJ1Y3QgbGxpc3QgKmxpc3QsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3QgbGxpc3RfaXRlbSAqaGludCkKK3sKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqcHJldiA9IE5VTEwsICpsOworCisJbCA9IChoaW50ID09IE5VTEwpID8gbGlzdC0+ZnJvbnQgOiBoaW50OworCXdoaWxlIChsKSB7CisJCWludCBjbXAgPSBoYXNoY21wKGwtPnNoYTEsIHNoYTEpOworCQlpZiAoY21wID4gMCkgeyAvKiB3ZSBpbnNlcnQgYmVmb3JlIHRoaXMgZW50cnkgKi8KKwkJCXJldHVybiBsbGlzdF9pbnNlcnQobGlzdCwgcHJldiwgc2hhMSk7CisJCX0KKwkJaWYgKCFjbXApIHsgLyogYWxyZWFkeSBleGlzdHMgKi8KKwkJCXJldHVybiBsOworCQl9CisJCXByZXYgPSBsOworCQlsID0gbC0+bmV4dDsKKwl9CisJLyogaW5zZXJ0IGF0IHRoZSBlbmQgKi8KKwlyZXR1cm4gbGxpc3RfaW5zZXJ0X2JhY2sobGlzdCwgc2hhMSk7Cit9CisKKy8qIHJldHVybnMgYSBwb2ludGVyIHRvIGFuIGl0ZW0gaW4gZnJvbnQgb2Ygc2hhMSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaXRlbSAqIGxsaXN0X3NvcnRlZF9yZW1vdmUoc3RydWN0IGxsaXN0ICpsaXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3QgbGxpc3RfaXRlbSAqaGludCkKK3sKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqcHJldiwgKmw7CisKK3JlZG9fZnJvbV9zdGFydDoKKwlsID0gKGhpbnQgPT0gTlVMTCkgPyBsaXN0LT5mcm9udCA6IGhpbnQ7CisJcHJldiA9IE5VTEw7CisJd2hpbGUgKGwpIHsKKwkJaW50IGNtcCA9IGhhc2hjbXAobC0+c2hhMSwgc2hhMSk7CisJCWlmIChjbXAgPiAwKSAvKiBub3QgaW4gbGlzdCwgc2luY2Ugc29ydGVkICovCisJCQlyZXR1cm4gcHJldjsKKwkJaWYgKCFjbXApIHsgLyogZm91bmQgKi8KKwkJCWlmIChwcmV2ID09IE5VTEwpIHsKKwkJCQlpZiAoaGludCAhPSBOVUxMICYmIGhpbnQgIT0gbGlzdC0+ZnJvbnQpIHsKKwkJCQkJLyogd2UgZG9uJ3Qga25vdyB0aGUgcHJldmlvdXMgZWxlbWVudCAqLworCQkJCQloaW50ID0gTlVMTDsKKwkJCQkJZ290byByZWRvX2Zyb21fc3RhcnQ7CisJCQkJfQorCQkJCWxpc3QtPmZyb250ID0gbC0+bmV4dDsKKwkJCX0gZWxzZQorCQkJCXByZXYtPm5leHQgPSBsLT5uZXh0OworCQkJaWYgKGwgPT0gbGlzdC0+YmFjaykKKwkJCQlsaXN0LT5iYWNrID0gcHJldjsKKwkJCWxsaXN0X2l0ZW1fcHV0KGwpOworCQkJbGlzdC0+c2l6ZS0tOworCQkJcmV0dXJuIHByZXY7CisJCX0KKwkJcHJldiA9IGw7CisJCWwgPSBsLT5uZXh0OworCX0KKwlyZXR1cm4gcHJldjsKK30KKworLyogY29tcHV0ZXMgQVxCICovCitzdGF0aWMgdm9pZCBsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKHN0cnVjdCBsbGlzdCAqQSwKKwkJCQkgICAgIHN0cnVjdCBsbGlzdCAqQikKK3sKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqaGludCwgKmI7CisKKwloaW50ID0gTlVMTDsKKwliID0gQi0+ZnJvbnQ7CisKKwl3aGlsZSAoYikgeworCQloaW50ID0gbGxpc3Rfc29ydGVkX3JlbW92ZShBLCBiLT5zaGExLCBoaW50KTsKKwkJYiA9IGItPm5leHQ7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWNrX2xpc3QgKiBwYWNrX2xpc3RfaW5zZXJ0KHN0cnVjdCBwYWNrX2xpc3QgKipwbCwKKwkJCQkJICAgc3RydWN0IHBhY2tfbGlzdCAqZW50cnkpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWNrX2xpc3QpKTsKKwltZW1jcHkocCwgZW50cnksIHNpemVvZihzdHJ1Y3QgcGFja19saXN0KSk7CisJcC0+bmV4dCA9ICpwbDsKKwkqcGwgPSBwOworCXJldHVybiBwOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBwYWNrX2xpc3Rfc2l6ZShzdHJ1Y3QgcGFja19saXN0ICpwbCkKK3sKKwlzaXplX3QgcmV0ID0gMDsKKwl3aGlsZSAocGwpIHsKKwkJcmV0Kys7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFja19saXN0ICogcGFja19saXN0X2RpZmZlcmVuY2UoY29uc3Qgc3RydWN0IHBhY2tfbGlzdCAqQSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwYWNrX2xpc3QgKkIpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcmV0OworCWNvbnN0IHN0cnVjdCBwYWNrX2xpc3QgKnBsOworCisJaWYgKEEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwbCA9IEI7CisJd2hpbGUgKHBsICE9IE5VTEwpIHsKKwkJaWYgKEEtPnBhY2sgPT0gcGwtPnBhY2spCisJCQlyZXR1cm4gcGFja19saXN0X2RpZmZlcmVuY2UoQS0+bmV4dCwgQik7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCXJldCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWNrX2xpc3QpKTsKKwltZW1jcHkocmV0LCBBLCBzaXplb2Yoc3RydWN0IHBhY2tfbGlzdCkpOworCXJldC0+bmV4dCA9IHBhY2tfbGlzdF9kaWZmZXJlbmNlKEEtPm5leHQsIEIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNtcF90d29fcGFja3Moc3RydWN0IHBhY2tfbGlzdCAqcDEsIHN0cnVjdCBwYWNrX2xpc3QgKnAyKQoreworCXVuc2lnbmVkIGxvbmcgcDFfb2ZmID0gMCwgcDJfb2ZmID0gMCwgcDFfc3RlcCwgcDJfc3RlcDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwMV9iYXNlLCAqcDJfYmFzZTsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqcDFfaGludCA9IE5VTEwsICpwMl9oaW50ID0gTlVMTDsKKworCXAxX2Jhc2UgPSBwMS0+cGFjay0+aW5kZXhfZGF0YTsKKwlwMl9iYXNlID0gcDItPnBhY2stPmluZGV4X2RhdGE7CisJcDFfYmFzZSArPSAyNTYgKiA0ICsgKChwMS0+cGFjay0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDgpOworCXAyX2Jhc2UgKz0gMjU2ICogNCArICgocDItPnBhY2stPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiA4KTsKKwlwMV9zdGVwID0gKHAxLT5wYWNrLT5pbmRleF92ZXJzaW9uIDwgMikgPyAyNCA6IDIwOworCXAyX3N0ZXAgPSAocDItPnBhY2stPmluZGV4X3ZlcnNpb24gPCAyKSA/IDI0IDogMjA7CisKKwl3aGlsZSAocDFfb2ZmIDwgcDEtPnBhY2stPm51bV9vYmplY3RzICogcDFfc3RlcCAmJgorCSAgICAgICBwMl9vZmYgPCBwMi0+cGFjay0+bnVtX29iamVjdHMgKiBwMl9zdGVwKQorCXsKKwkJaW50IGNtcCA9IGhhc2hjbXAocDFfYmFzZSArIHAxX29mZiwgcDJfYmFzZSArIHAyX29mZik7CisJCS8qIGNtcCB+IHAxIC0gcDIgKi8KKwkJaWYgKGNtcCA9PSAwKSB7CisJCQlwMV9oaW50ID0gbGxpc3Rfc29ydGVkX3JlbW92ZShwMS0+dW5pcXVlX29iamVjdHMsCisJCQkJCXAxX2Jhc2UgKyBwMV9vZmYsIHAxX2hpbnQpOworCQkJcDJfaGludCA9IGxsaXN0X3NvcnRlZF9yZW1vdmUocDItPnVuaXF1ZV9vYmplY3RzLAorCQkJCQlwMV9iYXNlICsgcDFfb2ZmLCBwMl9oaW50KTsKKwkJCXAxX29mZiArPSBwMV9zdGVwOworCQkJcDJfb2ZmICs9IHAyX3N0ZXA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY21wIDwgMCkgeyAvKiBwMSBoYXMgdGhlIG9iamVjdCwgcDIgZG9lc24ndCAqLworCQkJcDFfb2ZmICs9IHAxX3N0ZXA7CisJCX0gZWxzZSB7IC8qIHAyIGhhcyB0aGUgb2JqZWN0LCBwMSBkb2Vzbid0ICovCisJCQlwMl9vZmYgKz0gcDJfc3RlcDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcGxsX2ZyZWUoc3RydWN0IHBsbCAqbCkKK3sKKwlzdHJ1Y3QgcGxsICpvbGQ7CisJc3RydWN0IHBhY2tfbGlzdCAqb3BsOworCisJd2hpbGUgKGwpIHsKKwkJb2xkID0gbDsKKwkJd2hpbGUgKGwtPnBsKSB7CisJCQlvcGwgPSBsLT5wbDsKKwkJCWwtPnBsID0gb3BsLT5uZXh0OworCQkJZnJlZShvcGwpOworCQl9CisJCWwgPSBsLT5uZXh0OworCQlmcmVlKG9sZCk7CisJfQorfQorCisvKiBhbGwgdGhlIHBlcm11dGF0aW9ucyBoYXZlIHRvIGJlIGZyZWUoKWQgYXQgdGhlIHNhbWUgdGltZSwKKyAqIHNpbmNlIHRoZXkgcmVmZXIgdG8gZWFjaCBvdGhlcgorICovCitzdGF0aWMgc3RydWN0IHBsbCAqIGdldF9wZXJtdXRhdGlvbnMoc3RydWN0IHBhY2tfbGlzdCAqbGlzdCwgaW50IG4pCit7CisJc3RydWN0IHBsbCAqc3Vic2V0LCAqcmV0ID0gTlVMTCwgKm5ld19wbGwgPSBOVUxMLCAqcGxsOworCisJaWYgKGxpc3QgPT0gTlVMTCB8fCBwYWNrX2xpc3Rfc2l6ZShsaXN0KSA8IG4gfHwgbiA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChuID09IDEpIHsKKwkJd2hpbGUgKGxpc3QpIHsKKwkJCW5ld19wbGwgPSB4bWFsbG9jKHNpemVvZihwbGwpKTsKKwkJCW5ld19wbGwtPnBsID0gTlVMTDsKKwkJCXBhY2tfbGlzdF9pbnNlcnQoJm5ld19wbGwtPnBsLCBsaXN0KTsKKwkJCW5ld19wbGwtPm5leHQgPSByZXQ7CisJCQlyZXQgPSBuZXdfcGxsOworCQkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3aGlsZSAobGlzdC0+bmV4dCkgeworCQlzdWJzZXQgPSBnZXRfcGVybXV0YXRpb25zKGxpc3QtPm5leHQsIG4gLSAxKTsKKwkJd2hpbGUgKHN1YnNldCkgeworCQkJbmV3X3BsbCA9IHhtYWxsb2Moc2l6ZW9mKHBsbCkpOworCQkJbmV3X3BsbC0+cGwgPSBzdWJzZXQtPnBsOworCQkJcGFja19saXN0X2luc2VydCgmbmV3X3BsbC0+cGwsIGxpc3QpOworCQkJbmV3X3BsbC0+bmV4dCA9IHJldDsKKwkJCXJldCA9IG5ld19wbGw7CisJCQlzdWJzZXQgPSBzdWJzZXQtPm5leHQ7CisJCX0KKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfc3VwZXJzZXQoc3RydWN0IHBhY2tfbGlzdCAqcGwsIHN0cnVjdCBsbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgbGxpc3QgKmRpZmY7CisKKwlkaWZmID0gbGxpc3RfY29weShsaXN0KTsKKworCXdoaWxlIChwbCkgeworCQlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKGRpZmYsIHBsLT5hbGxfb2JqZWN0cyk7CisJCWlmIChkaWZmLT5zaXplID09IDApIHsgLyogd2UncmUgZG9uZSAqLworCQkJbGxpc3RfZnJlZShkaWZmKTsKKwkJCXJldHVybiAxOworCQl9CisJCXBsID0gcGwtPm5leHQ7CisJfQorCWxsaXN0X2ZyZWUoZGlmZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3Qgc2l6ZW9mX3VuaW9uKHN0cnVjdCBwYWNrZWRfZ2l0ICpwMSwgc3RydWN0IHBhY2tlZF9naXQgKnAyKQoreworCXNpemVfdCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgcDFfb2ZmID0gMCwgcDJfb2ZmID0gMCwgcDFfc3RlcCwgcDJfc3RlcDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwMV9iYXNlLCAqcDJfYmFzZTsKKworCXAxX2Jhc2UgPSBwMS0+aW5kZXhfZGF0YTsKKwlwMl9iYXNlID0gcDItPmluZGV4X2RhdGE7CisJcDFfYmFzZSArPSAyNTYgKiA0ICsgKChwMS0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDgpOworCXAyX2Jhc2UgKz0gMjU2ICogNCArICgocDItPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiA4KTsKKwlwMV9zdGVwID0gKHAxLT5pbmRleF92ZXJzaW9uIDwgMikgPyAyNCA6IDIwOworCXAyX3N0ZXAgPSAocDItPmluZGV4X3ZlcnNpb24gPCAyKSA/IDI0IDogMjA7CisKKwl3aGlsZSAocDFfb2ZmIDwgcDEtPm51bV9vYmplY3RzICogcDFfc3RlcCAmJgorCSAgICAgICBwMl9vZmYgPCBwMi0+bnVtX29iamVjdHMgKiBwMl9zdGVwKQorCXsKKwkJaW50IGNtcCA9IGhhc2hjbXAocDFfYmFzZSArIHAxX29mZiwgcDJfYmFzZSArIHAyX29mZik7CisJCS8qIGNtcCB+IHAxIC0gcDIgKi8KKwkJaWYgKGNtcCA9PSAwKSB7CisJCQlyZXQrKzsKKwkJCXAxX29mZiArPSBwMV9zdGVwOworCQkJcDJfb2ZmICs9IHAyX3N0ZXA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY21wIDwgMCkgeyAvKiBwMSBoYXMgdGhlIG9iamVjdCwgcDIgZG9lc24ndCAqLworCQkJcDFfb2ZmICs9IHAxX3N0ZXA7CisJCX0gZWxzZSB7IC8qIHAyIGhhcyB0aGUgb2JqZWN0LCBwMSBkb2Vzbid0ICovCisJCQlwMl9vZmYgKz0gcDJfc3RlcDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBhbm90aGVyIE8obl4yKSBmdW5jdGlvbiAuLi4gKi8KK3N0YXRpYyBzaXplX3QgZ2V0X3BhY2tfcmVkdW5kYW5jeShzdHJ1Y3QgcGFja19saXN0ICpwbCkKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICpzdWJzZXQ7CisJc2l6ZV90IHJldCA9IDA7CisKKwlpZiAocGwgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKHN1YnNldCA9IHBsLT5uZXh0KSkgeworCQl3aGlsZSAoc3Vic2V0KSB7CisJCQlyZXQgKz0gc2l6ZW9mX3VuaW9uKHBsLT5wYWNrLCBzdWJzZXQtPnBhY2spOworCQkJc3Vic2V0ID0gc3Vic2V0LT5uZXh0OworCQl9CisJCXBsID0gcGwtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgb2ZmX3QgcGFja19zZXRfYnl0ZWNvdW50KHN0cnVjdCBwYWNrX2xpc3QgKnBsKQoreworCW9mZl90IHJldCA9IDA7CisJd2hpbGUgKHBsKSB7CisJCXJldCArPSBwbC0+cGFjay0+cGFja19zaXplOworCQlyZXQgKz0gcGwtPnBhY2stPmluZGV4X3NpemU7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1pbmltaXplKHN0cnVjdCBwYWNrX2xpc3QgKiptaW4pCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcGwsICp1bmlxdWUgPSBOVUxMLAorCQkqbm9uX3VuaXF1ZSA9IE5VTEwsICptaW5fcGVybSA9IE5VTEw7CisJc3RydWN0IHBsbCAqcGVybSwgKnBlcm1fYWxsLCAqcGVybV9vayA9IE5VTEwsICpuZXdfcGVybTsKKwlzdHJ1Y3QgbGxpc3QgKm1pc3Npbmc7CisJb2ZmX3QgbWluX3Blcm1fc2l6ZSA9IDAsIHBlcm1fc2l6ZTsKKwlpbnQgbjsKKworCXBsID0gbG9jYWxfcGFja3M7CisJd2hpbGUgKHBsKSB7CisJCWlmIChwbC0+dW5pcXVlX29iamVjdHMtPnNpemUpCisJCQlwYWNrX2xpc3RfaW5zZXJ0KCZ1bmlxdWUsIHBsKTsKKwkJZWxzZQorCQkJcGFja19saXN0X2luc2VydCgmbm9uX3VuaXF1ZSwgcGwpOworCQlwbCA9IHBsLT5uZXh0OworCX0KKwkvKiBmaW5kIG91dCB3aGljaCBvYmplY3RzIGFyZSBtaXNzaW5nIGZyb20gdGhlIHNldCBvZiB1bmlxdWUgcGFja3MgKi8KKwltaXNzaW5nID0gbGxpc3RfY29weShhbGxfb2JqZWN0cyk7CisJcGwgPSB1bmlxdWU7CisJd2hpbGUgKHBsKSB7CisJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UobWlzc2luZywgcGwtPmFsbF9vYmplY3RzKTsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisKKwkvKiByZXR1cm4gaWYgdGhlcmUgYXJlIG5vIG9iamVjdHMgbWlzc2luZyBmcm9tIHRoZSB1bmlxdWUgc2V0ICovCisJaWYgKG1pc3NpbmctPnNpemUgPT0gMCkgeworCQkqbWluID0gdW5pcXVlOworCQlyZXR1cm47CisJfQorCisJLyogZmluZCB0aGUgcGVybXV0YXRpb25zIHdoaWNoIGNvbnRhaW4gYWxsIG1pc3Npbmcgb2JqZWN0cyAqLworCWZvciAobiA9IDE7IG4gPD0gcGFja19saXN0X3NpemUobm9uX3VuaXF1ZSkgJiYgIXBlcm1fb2s7IG4rKykgeworCQlwZXJtX2FsbCA9IHBlcm0gPSBnZXRfcGVybXV0YXRpb25zKG5vbl91bmlxdWUsIG4pOworCQl3aGlsZSAocGVybSkgeworCQkJaWYgKGlzX3N1cGVyc2V0KHBlcm0tPnBsLCBtaXNzaW5nKSkgeworCQkJCW5ld19wZXJtID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBsbCkpOworCQkJCW1lbWNweShuZXdfcGVybSwgcGVybSwgc2l6ZW9mKHN0cnVjdCBwbGwpKTsKKwkJCQluZXdfcGVybS0+bmV4dCA9IHBlcm1fb2s7CisJCQkJcGVybV9vayA9IG5ld19wZXJtOworCQkJfQorCQkJcGVybSA9IHBlcm0tPm5leHQ7CisJCX0KKwkJaWYgKHBlcm1fb2spCisJCQlicmVhazsKKwkJcGxsX2ZyZWUocGVybV9hbGwpOworCX0KKwlpZiAocGVybV9vayA9PSBOVUxMKQorCQlkaWUoIkludGVybmFsIGVycm9yOiBObyBjb21wbGV0ZSBzZXRzIGZvdW5kISIpOworCisJLyogZmluZCB0aGUgcGVybXV0YXRpb24gd2l0aCB0aGUgc21hbGxlc3Qgc2l6ZSAqLworCXBlcm0gPSBwZXJtX29rOworCXdoaWxlIChwZXJtKSB7CisJCXBlcm1fc2l6ZSA9IHBhY2tfc2V0X2J5dGVjb3VudChwZXJtLT5wbCk7CisJCWlmICghbWluX3Blcm1fc2l6ZSB8fCBtaW5fcGVybV9zaXplID4gcGVybV9zaXplKSB7CisJCQltaW5fcGVybV9zaXplID0gcGVybV9zaXplOworCQkJbWluX3Blcm0gPSBwZXJtLT5wbDsKKwkJfQorCQlwZXJtID0gcGVybS0+bmV4dDsKKwl9CisJKm1pbiA9IG1pbl9wZXJtOworCS8qIGFkZCB0aGUgdW5pcXVlIHBhY2tzIHRvIHRoZSBsaXN0ICovCisJcGwgPSB1bmlxdWU7CisJd2hpbGUgKHBsKSB7CisJCXBhY2tfbGlzdF9pbnNlcnQobWluLCBwbCk7CisJCXBsID0gcGwtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX2FsbF9vYmplY3RzKHZvaWQpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcGwgPSBsb2NhbF9wYWNrczsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqaGludCwgKmw7CisKKwlsbGlzdF9pbml0KCZhbGxfb2JqZWN0cyk7CisKKwl3aGlsZSAocGwpIHsKKwkJaGludCA9IE5VTEw7CisJCWwgPSBwbC0+YWxsX29iamVjdHMtPmZyb250OworCQl3aGlsZSAobCkgeworCQkJaGludCA9IGxsaXN0X2luc2VydF9zb3J0ZWRfdW5pcXVlKGFsbF9vYmplY3RzLAorCQkJCQkJCSAgbC0+c2hhMSwgaGludCk7CisJCQlsID0gbC0+bmV4dDsKKwkJfQorCQlwbCA9IHBsLT5uZXh0OworCX0KKwkvKiByZW1vdmUgb2JqZWN0cyBwcmVzZW50IGluIHJlbW90ZSBwYWNrcyAqLworCXBsID0gYWx0b2RiX3BhY2tzOworCXdoaWxlIChwbCkgeworCQlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKGFsbF9vYmplY3RzLCBwbC0+YWxsX29iamVjdHMpOworCQlwbCA9IHBsLT5uZXh0OworCX0KK30KKworLyogdGhpcyBzY2FsZXMgbGlrZSBPKG5eMikgKi8KK3N0YXRpYyB2b2lkIGNtcF9sb2NhbF9wYWNrcyh2b2lkKQoreworCXN0cnVjdCBwYWNrX2xpc3QgKnN1YnNldCwgKnBsID0gbG9jYWxfcGFja3M7CisKKwl3aGlsZSAoKHN1YnNldCA9IHBsKSkgeworCQl3aGlsZSAoKHN1YnNldCA9IHN1YnNldC0+bmV4dCkpCisJCQljbXBfdHdvX3BhY2tzKHBsLCBzdWJzZXQpOworCQlwbCA9IHBsLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgc2Nhbl9hbHRfb2RiX3BhY2tzKHZvaWQpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqbG9jYWwsICphbHQ7CisKKwlhbHQgPSBhbHRvZGJfcGFja3M7CisJd2hpbGUgKGFsdCkgeworCQlsb2NhbCA9IGxvY2FsX3BhY2tzOworCQl3aGlsZSAobG9jYWwpIHsKKwkJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UobG9jYWwtPnVuaXF1ZV9vYmplY3RzLAorCQkJCQkJCWFsdC0+YWxsX29iamVjdHMpOworCQkJbG9jYWwgPSBsb2NhbC0+bmV4dDsKKwkJfQorCQlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKGFsbF9vYmplY3RzLCBhbHQtPmFsbF9vYmplY3RzKTsKKwkJYWx0ID0gYWx0LT5uZXh0OworCX0KK30KKworc3RhdGljIHN0cnVjdCBwYWNrX2xpc3QgKiBhZGRfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlzdHJ1Y3QgcGFja19saXN0IGw7CisJdW5zaWduZWQgbG9uZyBvZmYgPSAwLCBzdGVwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2U7CisKKwlpZiAoIXAtPnBhY2tfbG9jYWwgJiYgIShhbHRfb2RiIHx8IHZlcmJvc2UpKQorCQlyZXR1cm4gTlVMTDsKKworCWwucGFjayA9IHA7CisJbGxpc3RfaW5pdCgmbC5hbGxfb2JqZWN0cyk7CisKKwlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQlyZXR1cm4gTlVMTDsKKworCWJhc2UgPSBwLT5pbmRleF9kYXRhOworCWJhc2UgKz0gMjU2ICogNCArICgocC0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDgpOworCXN0ZXAgPSAocC0+aW5kZXhfdmVyc2lvbiA8IDIpID8gMjQgOiAyMDsKKwl3aGlsZSAob2ZmIDwgcC0+bnVtX29iamVjdHMgKiBzdGVwKSB7CisJCWxsaXN0X2luc2VydF9iYWNrKGwuYWxsX29iamVjdHMsIGJhc2UgKyBvZmYpOworCQlvZmYgKz0gc3RlcDsKKwl9CisJLyogdGhpcyBsaXN0IHdpbGwgYmUgcHJ1bmVkIGluIGNtcF90d29fcGFja3MgbGF0ZXIgKi8KKwlsLnVuaXF1ZV9vYmplY3RzID0gbGxpc3RfY29weShsLmFsbF9vYmplY3RzKTsKKwlpZiAocC0+cGFja19sb2NhbCkKKwkJcmV0dXJuIHBhY2tfbGlzdF9pbnNlcnQoJmxvY2FsX3BhY2tzLCAmbCk7CisJZWxzZQorCQlyZXR1cm4gcGFja19saXN0X2luc2VydCgmYWx0b2RiX3BhY2tzLCAmbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFja19saXN0ICogYWRkX3BhY2tfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IHBhY2tlZF9naXQ7CisKKwlpZiAoc3RybGVuKGZpbGVuYW1lKSA8IDQwKQorCQlkaWUoIkJhZCBwYWNrIGZpbGVuYW1lOiAlcyIsIGZpbGVuYW1lKTsKKworCXdoaWxlIChwKSB7CisJCWlmIChzdHJzdHIocC0+cGFja19uYW1lLCBmaWxlbmFtZSkpCisJCQlyZXR1cm4gYWRkX3BhY2socCk7CisJCXAgPSBwLT5uZXh0OworCX0KKwlkaWUoIkZpbGVuYW1lICVzIG5vdCBmb3VuZCBpbiBwYWNrZWRfZ2l0IiwgZmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2FsbCh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gcGFja2VkX2dpdDsKKworCXdoaWxlIChwKSB7CisJCWFkZF9wYWNrKHApOworCQlwID0gcC0+bmV4dDsKKwl9Cit9CisKK2ludCBjbWRfcGFja19yZWR1bmRhbnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IHBhY2tfbGlzdCAqbWluLCAqcmVkLCAqcGw7CisJc3RydWN0IGxsaXN0ICppZ25vcmU7CisJdW5zaWduZWQgY2hhciAqc2hhMTsKKwljaGFyIGJ1Zls0Ml07IC8qIDQwIGJ5dGUgc2hhMSArIFxuICsgXDAgKi8KKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UocGFja19yZWR1bmRhbnRfdXNhZ2UpOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQlsb2FkX2FsbF9wYWNrcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXZlcmJvc2UiKSkgeworCQkJdmVyYm9zZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWFsdC1vZGIiKSkgeworCQkJYWx0X29kYiA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKmFyZyA9PSAnLScpCisJCQl1c2FnZShwYWNrX3JlZHVuZGFudF91c2FnZSk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCXByZXBhcmVfcGFja2VkX2dpdCgpOworCisJaWYgKGxvYWRfYWxsX3BhY2tzKQorCQlsb2FkX2FsbCgpOworCWVsc2UKKwkJd2hpbGUgKCooYXJndiArIGkpICE9IE5VTEwpCisJCQlhZGRfcGFja19maWxlKCooYXJndiArIGkrKykpOworCisJaWYgKGxvY2FsX3BhY2tzID09IE5VTEwpCisJCWRpZSgiWmVybyBwYWNrcyBmb3VuZCEiKTsKKworCWxvYWRfYWxsX29iamVjdHMoKTsKKworCWNtcF9sb2NhbF9wYWNrcygpOworCWlmIChhbHRfb2RiKQorCQlzY2FuX2FsdF9vZGJfcGFja3MoKTsKKworCS8qIGlnbm9yZSBvYmplY3RzIGdpdmVuIG9uIHN0ZGluICovCisJbGxpc3RfaW5pdCgmaWdub3JlKTsKKwlpZiAoIWlzYXR0eSgwKSkgeworCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pKSB7CisJCQlzaGExID0geG1hbGxvYygyMCk7CisJCQlpZiAoZ2V0X3NoYTFfaGV4KGJ1Ziwgc2hhMSkpCisJCQkJZGllKCJCYWQgc2hhMSBvbiBzdGRpbjogJXMiLCBidWYpOworCQkJbGxpc3RfaW5zZXJ0X3NvcnRlZF91bmlxdWUoaWdub3JlLCBzaGExLCBOVUxMKTsKKwkJfQorCX0KKwlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKGFsbF9vYmplY3RzLCBpZ25vcmUpOworCXBsID0gbG9jYWxfcGFja3M7CisJd2hpbGUgKHBsKSB7CisJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UocGwtPnVuaXF1ZV9vYmplY3RzLCBpZ25vcmUpOworCQlwbCA9IHBsLT5uZXh0OworCX0KKworCW1pbmltaXplKCZtaW4pOworCisJaWYgKHZlcmJvc2UpIHsKKwkJZnByaW50ZihzdGRlcnIsICJUaGVyZSBhcmUgJWx1IHBhY2tzIGF2YWlsYWJsZSBpbiBhbHQtb2Ricy5cbiIsCisJCQkodW5zaWduZWQgbG9uZylwYWNrX2xpc3Rfc2l6ZShhbHRvZGJfcGFja3MpKTsKKwkJZnByaW50ZihzdGRlcnIsICJUaGUgc21hbGxlc3QgKGJ5dGV3aXNlKSBzZXQgb2YgcGFja3MgaXM6XG4iKTsKKwkJcGwgPSBtaW47CisJCXdoaWxlIChwbCkgeworCQkJZnByaW50ZihzdGRlcnIsICJcdCVzXG4iLCBwbC0+cGFjay0+cGFja19uYW1lKTsKKwkJCXBsID0gcGwtPm5leHQ7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsICJjb250YWluaW5nICVsdSBkdXBsaWNhdGUgb2JqZWN0cyAiCisJCQkJIndpdGggYSB0b3RhbCBzaXplIG9mICVsdWtiLlxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKWdldF9wYWNrX3JlZHVuZGFuY3kobWluKSwKKwkJCSh1bnNpZ25lZCBsb25nKXBhY2tfc2V0X2J5dGVjb3VudChtaW4pLzEwMjQpOworCQlmcHJpbnRmKHN0ZGVyciwgIkEgdG90YWwgb2YgJWx1IHVuaXF1ZSBvYmplY3RzIHdlcmUgY29uc2lkZXJlZC5cbiIsCisJCQkodW5zaWduZWQgbG9uZylhbGxfb2JqZWN0cy0+c2l6ZSk7CisJCWZwcmludGYoc3RkZXJyLCAiUmVkdW5kYW50IHBhY2tzICh3aXRoIGluZGV4ZXMpOlxuIik7CisJfQorCXBsID0gcmVkID0gcGFja19saXN0X2RpZmZlcmVuY2UobG9jYWxfcGFja3MsIG1pbik7CisJd2hpbGUgKHBsKSB7CisJCXByaW50ZigiJXNcbiVzXG4iLAorCQkgICAgICAgc2hhMV9wYWNrX2luZGV4X25hbWUocGwtPnBhY2stPnNoYTEpLAorCQkgICAgICAgcGwtPnBhY2stPnBhY2tfbmFtZSk7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIiVsdU1CIG9mIHJlZHVuZGFudCBwYWNrcyBpbiB0b3RhbC5cbiIsCisJCQkodW5zaWduZWQgbG9uZylwYWNrX3NldF9ieXRlY291bnQocmVkKS8oMTAyNCoxMDI0KSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcGFjay1yZWZzLmMgYi9idWlsdGluL3BhY2stcmVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTBmODgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3BhY2stcmVmcy5jCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInBhY2stcmVmcy5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IHBhY2tfcmVmc191c2FnZVtdID0geworCU5fKCJnaXQgcGFjay1yZWZzIFtvcHRpb25zXSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfcGFja19yZWZzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IFBBQ0tfUkVGU19QUlVORTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX0JJVCgwLCAiYWxsIiwgICAmZmxhZ3MsIE5fKCJwYWNrIGV2ZXJ5dGhpbmciKSwgUEFDS19SRUZTX0FMTCksCisJCU9QVF9CSVQoMCwgInBydW5lIiwgJmZsYWdzLCBOXygicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiKSwgUEFDS19SRUZTX1BSVU5FKSwKKwkJT1BUX0VORCgpLAorCX07CisJaWYgKHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCBwYWNrX3JlZnNfdXNhZ2UsIDApKQorCQl1c2FnZV93aXRoX29wdGlvbnMocGFja19yZWZzX3VzYWdlLCBvcHRzKTsKKwlyZXR1cm4gcGFja19yZWZzKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcGF0Y2gtaWQuYyBiL2J1aWx0aW4vcGF0Y2gtaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2ZlMDJkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9wYXRjaC1pZC5jCkBAIC0wLDAgKzEsMTU3IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorCitzdGF0aWMgdm9pZCBmbHVzaF9jdXJyZW50X2lkKGludCBwYXRjaGxlbiwgdW5zaWduZWQgY2hhciAqaWQsIGdpdF9TSEFfQ1RYICpjKQoreworCXVuc2lnbmVkIGNoYXIgcmVzdWx0WzIwXTsKKwljaGFyIG5hbWVbNTBdOworCisJaWYgKCFwYXRjaGxlbikKKwkJcmV0dXJuOworCisJZ2l0X1NIQTFfRmluYWwocmVzdWx0LCBjKTsKKwltZW1jcHkobmFtZSwgc2hhMV90b19oZXgoaWQpLCA0MSk7CisJcHJpbnRmKCIlcyAlc1xuIiwgc2hhMV90b19oZXgocmVzdWx0KSwgbmFtZSk7CisJZ2l0X1NIQTFfSW5pdChjKTsKK30KKworc3RhdGljIGludCByZW1vdmVfc3BhY2UoY2hhciAqbGluZSkKK3sKKwljaGFyICpzcmMgPSBsaW5lOworCWNoYXIgKmRzdCA9IGxpbmU7CisJdW5zaWduZWQgY2hhciBjOworCisJd2hpbGUgKChjID0gKnNyYysrKSAhPSAnXDAnKSB7CisJCWlmICghaXNzcGFjZShjKSkKKwkJCSpkc3QrKyA9IGM7CisJfQorCXJldHVybiBkc3QgLSBsaW5lOworfQorCitzdGF0aWMgaW50IHNjYW5faHVua19oZWFkZXIoY29uc3QgY2hhciAqcCwgaW50ICpwX2JlZm9yZSwgaW50ICpwX2FmdGVyKQoreworCXN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1tdID0gIjAxMjM0NTY3ODkiOworCWNvbnN0IGNoYXIgKnEsICpyOworCWludCBuOworCisJcSA9IHAgKyA0OworCW4gPSBzdHJzcG4ocSwgZGlnaXRzKTsKKwlpZiAocVtuXSA9PSAnLCcpIHsKKwkJcSArPSBuICsgMTsKKwkJbiA9IHN0cnNwbihxLCBkaWdpdHMpOworCX0KKwlpZiAobiA9PSAwIHx8IHFbbl0gIT0gJyAnIHx8IHFbbisxXSAhPSAnKycpCisJCXJldHVybiAwOworCisJciA9IHEgKyBuICsgMjsKKwluID0gc3Ryc3BuKHIsIGRpZ2l0cyk7CisJaWYgKHJbbl0gPT0gJywnKSB7CisJCXIgKz0gbiArIDE7CisJCW4gPSBzdHJzcG4ociwgZGlnaXRzKTsKKwl9CisJaWYgKG4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkqcF9iZWZvcmUgPSBhdG9pKHEpOworCSpwX2FmdGVyID0gYXRvaShyKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBnZXRfb25lX3BhdGNoaWQodW5zaWduZWQgY2hhciAqbmV4dF9zaGExLCBnaXRfU0hBX0NUWCAqY3R4LCBzdHJ1Y3Qgc3RyYnVmICpsaW5lX2J1ZikKK3sKKwlpbnQgcGF0Y2hsZW4gPSAwLCBmb3VuZF9uZXh0ID0gMDsKKwlpbnQgYmVmb3JlID0gLTEsIGFmdGVyID0gLTE7CisKKwl3aGlsZSAoc3RyYnVmX2dldHdob2xlbGluZShsaW5lX2J1Ziwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQljaGFyICpsaW5lID0gbGluZV9idWYtPmJ1ZjsKKwkJY2hhciAqcCA9IGxpbmU7CisJCWludCBsZW47CisKKwkJaWYgKCFtZW1jbXAobGluZSwgImRpZmYtdHJlZSAiLCAxMCkpCisJCQlwICs9IDEwOworCQllbHNlIGlmICghbWVtY21wKGxpbmUsICJjb21taXQgIiwgNykpCisJCQlwICs9IDc7CisJCWVsc2UgaWYgKCFtZW1jbXAobGluZSwgIkZyb20gIiwgNSkpCisJCQlwICs9IDU7CisJCWVsc2UgaWYgKCFtZW1jbXAobGluZSwgIlxcICIsIDIpICYmIDEyIDwgc3RybGVuKGxpbmUpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFnZXRfc2hhMV9oZXgocCwgbmV4dF9zaGExKSkgeworCQkJZm91bmRfbmV4dCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIElnbm9yZSBjb21taXQgY29tbWVudHMgKi8KKwkJaWYgKCFwYXRjaGxlbiAmJiBtZW1jbXAobGluZSwgImRpZmYgIiwgNSkpCisJCQljb250aW51ZTsKKworCQkvKiBQYXJzaW5nIGRpZmYgaGVhZGVyPyAgKi8KKwkJaWYgKGJlZm9yZSA9PSAtMSkgeworCQkJaWYgKCFtZW1jbXAobGluZSwgImluZGV4ICIsIDYpKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZSBpZiAoIW1lbWNtcChsaW5lLCAiLS0tICIsIDQpKQorCQkJCWJlZm9yZSA9IGFmdGVyID0gMTsKKwkJCWVsc2UgaWYgKCFpc2FscGhhKGxpbmVbMF0pKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyogTG9va2luZyBmb3IgYSB2YWxpZCBodW5rIGhlYWRlcj8gICovCisJCWlmIChiZWZvcmUgPT0gMCAmJiBhZnRlciA9PSAwKSB7CisJCQlpZiAoIW1lbWNtcChsaW5lLCAiQEAgLSIsIDQpKSB7CisJCQkJLyogUGFyc2UgbmV4dCBodW5rLCBidXQgaWdub3JlIGxpbmUgbnVtYmVycy4gICovCisJCQkJc2Nhbl9odW5rX2hlYWRlcihsaW5lLCAmYmVmb3JlLCAmYWZ0ZXIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBTcGxpdCBhdCB0aGUgZW5kIG9mIHRoZSBwYXRjaC4gICovCisJCQlpZiAobWVtY21wKGxpbmUsICJkaWZmICIsIDUpKQorCQkJCWJyZWFrOworCisJCQkvKiBFbHNlIHdlJ3JlIHBhcnNpbmcgYW5vdGhlciBoZWFkZXIuICAqLworCQkJYmVmb3JlID0gYWZ0ZXIgPSAtMTsKKwkJfQorCisJCS8qIElmIHdlIGdldCBoZXJlLCB3ZSdyZSBpbnNpZGUgYSBodW5rLiAgKi8KKwkJaWYgKGxpbmVbMF0gPT0gJy0nIHx8IGxpbmVbMF0gPT0gJyAnKQorCQkJYmVmb3JlLS07CisJCWlmIChsaW5lWzBdID09ICcrJyB8fCBsaW5lWzBdID09ICcgJykKKwkJCWFmdGVyLS07CisKKwkJLyogQ29tcHV0ZSB0aGUgc2hhIHdpdGhvdXQgd2hpdGVzcGFjZSAqLworCQlsZW4gPSByZW1vdmVfc3BhY2UobGluZSk7CisJCXBhdGNobGVuICs9IGxlbjsKKwkJZ2l0X1NIQTFfVXBkYXRlKGN0eCwgbGluZSwgbGVuKTsKKwl9CisKKwlpZiAoIWZvdW5kX25leHQpCisJCWhhc2hjbHIobmV4dF9zaGExKTsKKworCXJldHVybiBwYXRjaGxlbjsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJhdGVfaWRfbGlzdCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sIG5bMjBdOworCWdpdF9TSEFfQ1RYIGN0eDsKKwlpbnQgcGF0Y2hsZW47CisJc3RydWN0IHN0cmJ1ZiBsaW5lX2J1ZiA9IFNUUkJVRl9JTklUOworCisJZ2l0X1NIQTFfSW5pdCgmY3R4KTsKKwloYXNoY2xyKHNoYTEpOworCXdoaWxlICghZmVvZihzdGRpbikpIHsKKwkJcGF0Y2hsZW4gPSBnZXRfb25lX3BhdGNoaWQobiwgJmN0eCwgJmxpbmVfYnVmKTsKKwkJZmx1c2hfY3VycmVudF9pZChwYXRjaGxlbiwgc2hhMSwgJmN0eCk7CisJCWhhc2hjcHkoc2hhMSwgbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lX2J1Zik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHBhdGNoX2lkX3VzYWdlW10gPSAiZ2l0IHBhdGNoLWlkIDwgcGF0Y2giOworCitpbnQgY21kX3BhdGNoX2lkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWlmIChhcmdjICE9IDEpCisJCXVzYWdlKHBhdGNoX2lkX3VzYWdlKTsKKworCWdlbmVyYXRlX2lkX2xpc3QoKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcHJ1bmUtcGFja2VkLmMgYi9idWlsdGluL3BydW5lLXBhY2tlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMzgyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3BydW5lLXBhY2tlZC5jCkBAIC0wLDAgKzEsODYgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcnVuZV9wYWNrZWRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBydW5lLXBhY2tlZCBbLW58LS1kcnktcnVuXSBbLXF8LS1xdWlldF0iKSwKKwlOVUxMCit9OworCisjZGVmaW5lIERSWV9SVU4gMDEKKyNkZWZpbmUgVkVSQk9TRSAwMgorCitzdGF0aWMgc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKworc3RhdGljIHZvaWQgcHJ1bmVfZGlyKGludCBpLCBESVIgKmRpciwgY2hhciAqcGF0aG5hbWUsIGludCBsZW4sIGludCBvcHRzKQoreworCXN0cnVjdCBkaXJlbnQgKmRlOworCWNoYXIgaGV4WzQwXTsKKworCXNwcmludGYoaGV4LCAiJTAyeCIsIGkpOworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaWYgKHN0cmxlbihkZS0+ZF9uYW1lKSAhPSAzOCkKKwkJCWNvbnRpbnVlOworCQltZW1jcHkoaGV4KzIsIGRlLT5kX25hbWUsIDM4KTsKKwkJaWYgKGdldF9zaGExX2hleChoZXgsIHNoYTEpKQorCQkJY29udGludWU7CisJCWlmICghaGFzX3NoYTFfcGFjayhzaGExKSkKKwkJCWNvbnRpbnVlOworCQltZW1jcHkocGF0aG5hbWUgKyBsZW4sIGRlLT5kX25hbWUsIDM4KTsKKwkJaWYgKG9wdHMgJiBEUllfUlVOKQorCQkJcHJpbnRmKCJybSAtZiAlc1xuIiwgcGF0aG5hbWUpOworCQllbHNlCisJCQl1bmxpbmtfb3Jfd2FybihwYXRobmFtZSk7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKwl9Cit9CisKK3ZvaWQgcHJ1bmVfcGFja2VkX29iamVjdHMoaW50IG9wdHMpCit7CisJaW50IGk7CisJc3RhdGljIGNoYXIgcGF0aG5hbWVbUEFUSF9NQVhdOworCWNvbnN0IGNoYXIgKmRpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisJaW50IGxlbiA9IHN0cmxlbihkaXIpOworCisJaWYgKG9wdHMgPT0gVkVSQk9TRSkKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzc19kZWxheSgiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiLAorCQkJMjU2LCA5NSwgMik7CisKKwlpZiAobGVuID4gUEFUSF9NQVggLSA0MikKKwkJZGllKCJpbXBvc3NpYmxlIG9iamVjdCBkaXJlY3RvcnkiKTsKKwltZW1jcHkocGF0aG5hbWUsIGRpciwgbGVuKTsKKwlpZiAobGVuICYmIHBhdGhuYW1lW2xlbi0xXSAhPSAnLycpCisJCXBhdGhuYW1lW2xlbisrXSA9ICcvJzsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJRElSICpkOworCisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKwkJc3ByaW50ZihwYXRobmFtZSArIGxlbiwgIiUwMngvIiwgaSk7CisJCWQgPSBvcGVuZGlyKHBhdGhuYW1lKTsKKwkJaWYgKCFkKQorCQkJY29udGludWU7CisJCXBydW5lX2RpcihpLCBkLCBwYXRobmFtZSwgbGVuICsgMywgb3B0cyk7CisJCWNsb3NlZGlyKGQpOworCQlwYXRobmFtZVtsZW4gKyAyXSA9ICdcMCc7CisJCXJtZGlyKHBhdGhuYW1lKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworfQorCitpbnQgY21kX3BydW5lX3BhY2tlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgb3B0cyA9IGlzYXR0eSgyKSA/IFZFUkJPU0UgOiAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gcHJ1bmVfcGFja2VkX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgnbicsICJkcnktcnVuIiwgJm9wdHMsIE5fKCJkcnkgcnVuIiksIERSWV9SVU4pLAorCQlPUFRfTkVHQklUKCdxJywgInF1aWV0IiwgJm9wdHMsIE5fKCJiZSBxdWlldCIpLCBWRVJCT1NFKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgcHJ1bmVfcGFja2VkX29wdGlvbnMsCisJCQkgICAgIHBydW5lX3BhY2tlZF91c2FnZSwgMCk7CisKKwlwcnVuZV9wYWNrZWRfb2JqZWN0cyhvcHRzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcHJ1bmUuYyBiL2J1aWx0aW4vcHJ1bmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2I4YjkxCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9wcnVuZS5jCkBAIC0wLDAgKzEsMTc2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVhY2hhYmxlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAiZGlyLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJ1bmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIiksCisJTlVMTAorfTsKK3N0YXRpYyBpbnQgc2hvd19vbmx5Oworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXhwaXJlOworc3RhdGljIGludCBzaG93X3Byb2dyZXNzID0gLTE7CisKK3N0YXRpYyBpbnQgcHJ1bmVfdG1wX29iamVjdChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwljb25zdCBjaGFyICpmdWxscGF0aCA9IG1rcGF0aCgiJXMvJXMiLCBwYXRoLCBmaWxlbmFtZSk7CisJc3RydWN0IHN0YXQgc3Q7CisJaWYgKGxzdGF0KGZ1bGxwYXRoLCAmc3QpKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBzdGF0ICclcyciLCBmdWxscGF0aCk7CisJaWYgKHN0LnN0X210aW1lID4gZXhwaXJlKQorCQlyZXR1cm4gMDsKKwlpZiAoc2hvd19vbmx5IHx8IHZlcmJvc2UpCisJCXByaW50ZigiUmVtb3Zpbmcgc3RhbGUgdGVtcG9yYXJ5IGZpbGUgJXNcbiIsIGZ1bGxwYXRoKTsKKwlpZiAoIXNob3dfb25seSkKKwkJdW5saW5rX29yX3dhcm4oZnVsbHBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBydW5lX29iamVjdChjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwljb25zdCBjaGFyICpmdWxscGF0aCA9IG1rcGF0aCgiJXMvJXMiLCBwYXRoLCBmaWxlbmFtZSk7CisJc3RydWN0IHN0YXQgc3Q7CisJaWYgKGxzdGF0KGZ1bGxwYXRoLCAmc3QpKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBzdGF0ICclcyciLCBmdWxscGF0aCk7CisJaWYgKHN0LnN0X210aW1lID4gZXhwaXJlKQorCQlyZXR1cm4gMDsKKwlpZiAoc2hvd19vbmx5IHx8IHZlcmJvc2UpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwkJcHJpbnRmKCIlcyAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSksCisJCSAgICAgICAodHlwZSA+IDApID8gdHlwZW5hbWUodHlwZSkgOiAidW5rbm93biIpOworCX0KKwlpZiAoIXNob3dfb25seSkKKwkJdW5saW5rX29yX3dhcm4oZnVsbHBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBydW5lX2RpcihpbnQgaSwgY2hhciAqcGF0aCkKK3sKKwlESVIgKmRpciA9IG9wZW5kaXIocGF0aCk7CisJc3RydWN0IGRpcmVudCAqZGU7CisKKwlpZiAoIWRpcikKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCWNoYXIgbmFtZVsxMDBdOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGRlLT5kX25hbWUpKQorCQkJY29udGludWU7CisJCWlmIChzdHJsZW4oZGUtPmRfbmFtZSkgPT0gMzgpIHsKKwkJCXNwcmludGYobmFtZSwgIiUwMngiLCBpKTsKKwkJCW1lbWNweShuYW1lKzIsIGRlLT5kX25hbWUsIDM5KTsKKwkJCWlmIChnZXRfc2hhMV9oZXgobmFtZSwgc2hhMSkgPCAwKQorCQkJCWJyZWFrOworCisJCQkvKgorCQkJICogRG8gd2Uga25vdyBhYm91dCB0aGlzIG9iamVjdD8KKwkJCSAqIEl0IG11c3QgaGF2ZSBiZWVuIHJlYWNoYWJsZQorCQkJICovCisJCQlpZiAobG9va3VwX29iamVjdChzaGExKSkKKwkJCQljb250aW51ZTsKKworCQkJcHJ1bmVfb2JqZWN0KHBhdGgsIGRlLT5kX25hbWUsIHNoYTEpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFwcmVmaXhjbXAoZGUtPmRfbmFtZSwgInRtcF9vYmpfIikpIHsKKwkJCXBydW5lX3RtcF9vYmplY3QocGF0aCwgZGUtPmRfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgImJhZCBzaGExIGZpbGU6ICVzLyVzXG4iLCBwYXRoLCBkZS0+ZF9uYW1lKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlpZiAoIXNob3dfb25seSkKKwkJcm1kaXIocGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBydW5lX29iamVjdF9kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJc3RhdGljIGNoYXIgZGlyWzQwOTZdOworCQlzcHJpbnRmKGRpciwgIiVzLyUwMngiLCBwYXRoLCBpKTsKKwkJcHJ1bmVfZGlyKGksIGRpcik7CisJfQorfQorCisvKgorICogV3JpdGUgZXJyb3JzIChwYXJ0aWN1bGFybHkgb3V0IG9mIHNwYWNlKSBjYW4gcmVzdWx0IGluCisgKiBmYWlsZWQgdGVtcG9yYXJ5IHBhY2tzIChhbmQgbW9yZSByYXJlbHkgaW5kZXhlcyBhbmQgb3RoZXIKKyAqIGZpbGVzIGJlZ2lubmluZyB3aXRoICJ0bXBfIikgYWNjdW11bGF0aW5nIGluIHRoZSBvYmplY3QKKyAqIGFuZCB0aGUgcGFjayBkaXJlY3Rvcmllcy4KKyAqLworc3RhdGljIHZvaWQgcmVtb3ZlX3RlbXBvcmFyeV9maWxlcyhjb25zdCBjaGFyICpwYXRoKQoreworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmRlOworCisJZGlyID0gb3BlbmRpcihwYXRoKTsKKwlpZiAoIWRpcikgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBvcGVuIGRpcmVjdG9yeSAlc1xuIiwgcGF0aCk7CisJCXJldHVybjsKKwl9CisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkKKwkJaWYgKCFwcmVmaXhjbXAoZGUtPmRfbmFtZSwgInRtcF8iKSkKKwkJCXBydW5lX3RtcF9vYmplY3QocGF0aCwgZGUtPmRfbmFtZSk7CisJY2xvc2VkaXIoZGlyKTsKK30KKworaW50IGNtZF9wcnVuZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19EUllfUlVOKCZzaG93X29ubHksIE5fKCJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiKSksCisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJnNob3dfcHJvZ3Jlc3MsIE5fKCJzaG93IHByb2dyZXNzIikpLAorCQlPUFRfREFURSgwLCAiZXhwaXJlIiwgJmV4cGlyZSwKKwkJCSBOXygiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iKSksCisJCU9QVF9FTkQoKQorCX07CisJY2hhciAqczsKKworCWV4cGlyZSA9IFVMT05HX01BWDsKKwlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOworCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKKwlpbml0X3JldmlzaW9ucygmcmV2cywgcHJlZml4KTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgcHJ1bmVfdXNhZ2UsIDApOworCXdoaWxlIChhcmdjLS0pIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY29uc3QgY2hhciAqbmFtZSA9ICphcmd2Kys7CisKKwkJaWYgKCFnZXRfc2hhMShuYW1lLCBzaGExKSkgeworCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCQkJaWYgKCFvYmplY3QpCisJCQkJZGllKCJiYWQgb2JqZWN0OiAlcyIsIG5hbWUpOworCQkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZzLCBvYmplY3QsICIiKTsKKwkJfQorCQllbHNlCisJCQlkaWUoInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiLCBuYW1lKTsKKwl9CisKKwlpZiAoc2hvd19wcm9ncmVzcyA9PSAtMSkKKwkJc2hvd19wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKwlpZiAoc2hvd19wcm9ncmVzcykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzc19kZWxheSgiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IiwgMCwgMCwgMik7CisKKwltYXJrX3JlYWNoYWJsZV9vYmplY3RzKCZyZXZzLCAxLCBwcm9ncmVzcyk7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCXBydW5lX29iamVjdF9kaXIoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisKKwlwcnVuZV9wYWNrZWRfb2JqZWN0cyhzaG93X29ubHkpOworCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJcyA9IG1rcGF0aGR1cCgiJXMvcGFjayIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMocyk7CisJZnJlZShzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcHVzaC5jIGIvYnVpbHRpbi9wdXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5YmEzMAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcHVzaC5jCkBAIC0wLDAgKzEsNDI3IEBACisvKgorICogImdpdCBwdXNoIgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHB1c2hfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iKSwKKwlOVUxMLAorfTsKKworc3RhdGljIGludCB0aGluOworc3RhdGljIGludCBkZWxldGVyZWZzOworc3RhdGljIGNvbnN0IGNoYXIgKnJlY2VpdmVwYWNrOworc3RhdGljIGludCB2ZXJib3NpdHk7CitzdGF0aWMgaW50IHByb2dyZXNzID0gLTE7CisKK3N0YXRpYyBjb25zdCBjaGFyICoqcmVmc3BlYzsKK3N0YXRpYyBpbnQgcmVmc3BlY19ucjsKK3N0YXRpYyBpbnQgcmVmc3BlY19hbGxvYzsKK3N0YXRpYyBpbnQgZGVmYXVsdF9tYXRjaGluZ191c2VkOworCitzdGF0aWMgdm9pZCBhZGRfcmVmc3BlYyhjb25zdCBjaGFyICpyZWYpCit7CisJcmVmc3BlY19ucisrOworCUFMTE9DX0dST1cocmVmc3BlYywgcmVmc3BlY19uciwgcmVmc3BlY19hbGxvYyk7CisJcmVmc3BlY1tyZWZzcGVjX25yLTFdID0gcmVmOworfQorCitzdGF0aWMgdm9pZCBzZXRfcmVmc3BlY3MoY29uc3QgY2hhciAqKnJlZnMsIGludCBucikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQljb25zdCBjaGFyICpyZWYgPSByZWZzW2ldOworCQlpZiAoIXN0cmNtcCgidGFnIiwgcmVmKSkgeworCQkJY2hhciAqdGFnOworCQkJaW50IGxlbjsKKwkJCWlmIChuciA8PSArK2kpCisJCQkJZGllKF8oInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIpKTsKKwkJCWxlbiA9IHN0cmxlbihyZWZzW2ldKSArIDExOworCQkJaWYgKGRlbGV0ZXJlZnMpIHsKKwkJCQl0YWcgPSB4bWFsbG9jKGxlbisxKTsKKwkJCQlzdHJjcHkodGFnLCAiOnJlZnMvdGFncy8iKTsKKwkJCX0gZWxzZSB7CisJCQkJdGFnID0geG1hbGxvYyhsZW4pOworCQkJCXN0cmNweSh0YWcsICJyZWZzL3RhZ3MvIik7CisJCQl9CisJCQlzdHJjYXQodGFnLCByZWZzW2ldKTsKKwkJCXJlZiA9IHRhZzsKKwkJfSBlbHNlIGlmIChkZWxldGVyZWZzICYmICFzdHJjaHIocmVmLCAnOicpKSB7CisJCQljaGFyICpkZWxyZWY7CisJCQlpbnQgbGVuID0gc3RybGVuKHJlZikrMTsKKwkJCWRlbHJlZiA9IHhtYWxsb2MobGVuKzEpOworCQkJc3RyY3B5KGRlbHJlZiwgIjoiKTsKKwkJCXN0cmNhdChkZWxyZWYsIHJlZik7CisJCQlyZWYgPSBkZWxyZWY7CisJCX0gZWxzZSBpZiAoZGVsZXRlcmVmcykKKwkJCWRpZShfKCItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIpKTsKKwkJYWRkX3JlZnNwZWMocmVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHVzaF91cmxfb2ZfcmVtb3RlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqKip1cmxfcCkKK3sKKwlpZiAocmVtb3RlLT5wdXNodXJsX25yKSB7CisJCSp1cmxfcCA9IHJlbW90ZS0+cHVzaHVybDsKKwkJcmV0dXJuIHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9CisJKnVybF9wID0gcmVtb3RlLT51cmw7CisJcmV0dXJuIHJlbW90ZS0+dXJsX25yOworfQorCitzdGF0aWMgTk9SRVRVUk4gaW50IGRpZV9wdXNoX3NpbXBsZShzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIHN0cnVjdCByZW1vdGUgKnJlbW90ZSkgeworCS8qCisJICogVGhlcmUncyBubyBwb2ludCBpbiB1c2luZyBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZiBoZXJlLAorCSAqIGFzIHRoZSBhbWJpZ3VpdHkgd291bGQgYmUgb24gdGhlIHJlbW90ZSBzaWRlLCBub3Qgd2hhdAorCSAqIHdlIGhhdmUgbG9jYWxseS4gUGx1cywgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2ltcGxlCisJICogbW9kZS4gSWYgdGhlIHVzZXIgaXMgZG9pbmcgc29tZXRoaW5nIGNyYXp5IGxpa2Ugc2V0dGluZworCSAqIHVwc3RyZWFtIHRvIGEgbm9uLWJyYW5jaCwgd2Ugc2hvdWxkIHByb2JhYmx5IGJlIHNob3dpbmcKKwkgKiB0aGVtIHRoZSBiaWcgdWdseSBmdWxseSBxdWFsaWZpZWQgcmVmLgorCSAqLworCWNvbnN0IGNoYXIgKmFkdmljZV9tYXliZSA9ICIiOworCWNvbnN0IGNoYXIgKnNob3J0X3Vwc3RyZWFtID0KKwkJc2tpcF9wcmVmaXgoYnJhbmNoLT5tZXJnZVswXS0+c3JjLCAicmVmcy9oZWFkcy8iKTsKKworCWlmICghc2hvcnRfdXBzdHJlYW0pCisJCXNob3J0X3Vwc3RyZWFtID0gYnJhbmNoLT5tZXJnZVswXS0+c3JjOworCS8qCisJICogRG9uJ3Qgc2hvdyBhZHZpY2UgZm9yIHBlb3BsZSB3aG8gZXhwbGljaXRlbHkgc2V0CisJICogcHVzaC5kZWZhdWx0LgorCSAqLworCWlmIChwdXNoX2RlZmF1bHQgPT0gUFVTSF9ERUZBVUxUX1VOU1BFQ0lGSUVEKQorCQlhZHZpY2VfbWF5YmUgPSBfKCJcbiIKKwkJCQkgIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCAiCisJCQkJICJzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIpOworCWRpZShfKCJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKwkgICAgICAidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorCSAgICAgICJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKwkgICAgICAiXG4iCisJICAgICAgIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisJICAgICAgIlxuIgorCSAgICAgICJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKwkgICAgICAiXG4iCisJICAgICAgIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorCSAgICAgICIlcyIpLAorCSAgICByZW1vdGUtPm5hbWUsIHNob3J0X3Vwc3RyZWFtLAorCSAgICByZW1vdGUtPm5hbWUsIGJyYW5jaC0+bmFtZSwgYWR2aWNlX21heWJlKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcHVzaF91cHN0cmVhbShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGludCBzaW1wbGUpCit7CisJc3RydWN0IHN0cmJ1ZiByZWZzcGVjID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwlpZiAoIWJyYW5jaCkKKwkJZGllKF8oIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKwkJICAgICJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisJCSAgICAic3RhdGUgbm93LCB1c2VcbiIKKwkJICAgICJcbiIKKwkJICAgICIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIiksCisJCSAgICByZW1vdGUtPm5hbWUpOworCWlmICghYnJhbmNoLT5tZXJnZV9uciB8fCAhYnJhbmNoLT5tZXJnZSB8fCAhYnJhbmNoLT5yZW1vdGVfbmFtZSkKKwkJZGllKF8oIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorCQkgICAgIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisJCSAgICAiXG4iCisJCSAgICAiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iKSwKKwkJICAgIGJyYW5jaC0+bmFtZSwKKwkJICAgIHJlbW90ZS0+bmFtZSwKKwkJICAgIGJyYW5jaC0+bmFtZSk7CisJaWYgKGJyYW5jaC0+bWVyZ2VfbnIgIT0gMSkKKwkJZGllKF8oIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsICIKKwkJICAgICJyZWZ1c2luZyB0byBwdXNoLiIpLCBicmFuY2gtPm5hbWUpOworCWlmIChzdHJjbXAoYnJhbmNoLT5yZW1vdGVfbmFtZSwgcmVtb3RlLT5uYW1lKSkKKwkJZGllKF8oIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorCQkgICAgICAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisJCSAgICAgICJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iKSwKKwkJICAgIHJlbW90ZS0+bmFtZSwgYnJhbmNoLT5uYW1lKTsKKwlpZiAoc2ltcGxlICYmIHN0cmNtcChicmFuY2gtPnJlZm5hbWUsIGJyYW5jaC0+bWVyZ2VbMF0tPnNyYykpCisJCWRpZV9wdXNoX3NpbXBsZShicmFuY2gsIHJlbW90ZSk7CisKKwlzdHJidWZfYWRkZigmcmVmc3BlYywgIiVzOiVzIiwgYnJhbmNoLT5uYW1lLCBicmFuY2gtPm1lcmdlWzBdLT5zcmMpOworCWFkZF9yZWZzcGVjKHJlZnNwZWMuYnVmKTsKK30KKworc3RhdGljIGNoYXIgd2Fybl91bnNwZWNpZmllZF9wdXNoX2RlZmF1bHRfbXNnW10gPQorTl8oInB1c2guZGVmYXVsdCBpcyB1bnNldDsgaXRzIGltcGxpY2l0IHZhbHVlIGlzIGNoYW5naW5nIGluXG4iCisgICAiR2l0IDIuMCBmcm9tICdtYXRjaGluZycgdG8gJ3NpbXBsZScuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlXG4iCisgICAiYW5kIG1haW50YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yIGFmdGVyIHRoZSBkZWZhdWx0IGNoYW5nZXMsIHVzZTpcbiIKKyAgICJcbiIKKyAgICIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisgICAiXG4iCisgICAiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igbm93LCB1c2U6XG4iCisgICAiXG4iCisgICAiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyAgICJcbiIKKyAgICJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ3B1c2guZGVmYXVsdCcgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iCisgICAiKHRoZSAnc2ltcGxlJyBtb2RlIHdhcyBpbnRyb2R1Y2VkIGluIEdpdCAxLjcuMTEuIFVzZSB0aGUgc2ltaWxhciBtb2RlXG4iCisgICAiJ2N1cnJlbnQnIGluc3RlYWQgb2YgJ3NpbXBsZScgaWYgeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0KSIpOworCitzdGF0aWMgdm9pZCB3YXJuX3Vuc3BlY2lmaWVkX3B1c2hfZGVmYXVsdF9jb25maWd1cmF0aW9uKHZvaWQpCit7CisJc3RhdGljIGludCB3YXJuX29uY2U7CisKKwlpZiAod2Fybl9vbmNlKyspCisJCXJldHVybjsKKwl3YXJuaW5nKCIlc1xuIiwgXyh3YXJuX3Vuc3BlY2lmaWVkX3B1c2hfZGVmYXVsdF9tc2cpKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZGVmYXVsdF9wdXNoX3JlZnNwZWNzKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlzd2l0Y2ggKHB1c2hfZGVmYXVsdCkgeworCWRlZmF1bHQ6CisJY2FzZSBQVVNIX0RFRkFVTFRfVU5TUEVDSUZJRUQ6CisJCWRlZmF1bHRfbWF0Y2hpbmdfdXNlZCA9IDE7CisJCXdhcm5fdW5zcGVjaWZpZWRfcHVzaF9kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKTsKKwkJLyogZmFsbHRocnUgKi8KKwljYXNlIFBVU0hfREVGQVVMVF9NQVRDSElORzoKKwkJYWRkX3JlZnNwZWMoIjoiKTsKKwkJYnJlYWs7CisKKwljYXNlIFBVU0hfREVGQVVMVF9TSU1QTEU6CisJCXNldHVwX3B1c2hfdXBzdHJlYW0ocmVtb3RlLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFBVU0hfREVGQVVMVF9VUFNUUkVBTToKKwkJc2V0dXBfcHVzaF91cHN0cmVhbShyZW1vdGUsIDApOworCQlicmVhazsKKworCWNhc2UgUFVTSF9ERUZBVUxUX0NVUlJFTlQ6CisJCWFkZF9yZWZzcGVjKCJIRUFEIik7CisJCWJyZWFrOworCisJY2FzZSBQVVNIX0RFRkFVTFRfTk9USElORzoKKwkJZGllKF8oIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kICIKKwkJICAgICJwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIikpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VfYWR2aWNlX3B1bGxfYmVmb3JlX3B1c2hbXSA9CisJTl8oIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKwkgICAiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gTWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuICdnaXQgcHVsbCcpXG4iCisJICAgImJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorCSAgICJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIpOworCitzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlX2FkdmljZV91c2VfdXBzdHJlYW1bXSA9CisJTl8oIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKwkgICAiY291bnRlcnBhcnQuIElmIHlvdSBkaWQgbm90IGludGVuZCB0byBwdXNoIHRoYXQgYnJhbmNoLCB5b3UgbWF5IHdhbnQgdG9cbiIKKwkgICAic3BlY2lmeSBicmFuY2hlcyB0byBwdXNoIG9yIHNldCB0aGUgJ3B1c2guZGVmYXVsdCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorCSAgICJ0byAnc2ltcGxlJywgJ2N1cnJlbnQnIG9yICd1cHN0cmVhbScgdG8gcHVzaCBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaC4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZV9hZHZpY2VfY2hlY2tvdXRfcHVsbF9wdXNoW10gPQorCU5fKCJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisJICAgImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIG1lcmdlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorCSAgICIoZS5nLiAnZ2l0IHB1bGwnKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKwkgICAiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iKTsKKworc3RhdGljIHZvaWQgYWR2aXNlX3B1bGxfYmVmb3JlX3B1c2godm9pZCkKK3sKKwlpZiAoIWFkdmljZV9wdXNoX25vbl9mZl9jdXJyZW50IHx8ICFhZHZpY2VfcHVzaF9ub25mYXN0Zm9yd2FyZCkKKwkJcmV0dXJuOworCWFkdmlzZShfKG1lc3NhZ2VfYWR2aWNlX3B1bGxfYmVmb3JlX3B1c2gpKTsKK30KKworc3RhdGljIHZvaWQgYWR2aXNlX3VzZV91cHN0cmVhbSh2b2lkKQoreworCWlmICghYWR2aWNlX3B1c2hfbm9uX2ZmX2RlZmF1bHQgfHwgIWFkdmljZV9wdXNoX25vbmZhc3Rmb3J3YXJkKQorCQlyZXR1cm47CisJYWR2aXNlKF8obWVzc2FnZV9hZHZpY2VfdXNlX3Vwc3RyZWFtKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkdmlzZV9jaGVja291dF9wdWxsX3B1c2godm9pZCkKK3sKKwlpZiAoIWFkdmljZV9wdXNoX25vbl9mZl9tYXRjaGluZyB8fCAhYWR2aWNlX3B1c2hfbm9uZmFzdGZvcndhcmQpCisJCXJldHVybjsKKwlhZHZpc2UoXyhtZXNzYWdlX2FkdmljZV9jaGVja291dF9wdWxsX3B1c2gpKTsKK30KKworc3RhdGljIGludCBwdXNoX3dpdGhfb3B0aW9ucyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmbGFncykKK3sKKwlpbnQgZXJyOworCWludCBub25mYXN0Zm9yd2FyZDsKKworCXRyYW5zcG9ydF9zZXRfdmVyYm9zaXR5KHRyYW5zcG9ydCwgdmVyYm9zaXR5LCBwcm9ncmVzcyk7CisKKwlpZiAocmVjZWl2ZXBhY2spCisJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwKKwkJCQkgICAgIFRSQU5TX09QVF9SRUNFSVZFUEFDSywgcmVjZWl2ZXBhY2spOworCWlmICh0aGluKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9USElOLCAieWVzIik7CisKKwlpZiAodmVyYm9zaXR5ID4gMCkKKwkJZnByaW50ZihzdGRlcnIsIF8oIlB1c2hpbmcgdG8gJXNcbiIpLCB0cmFuc3BvcnQtPnVybCk7CisJZXJyID0gdHJhbnNwb3J0X3B1c2godHJhbnNwb3J0LCByZWZzcGVjX25yLCByZWZzcGVjLCBmbGFncywKKwkJCSAgICAgJm5vbmZhc3Rmb3J3YXJkKTsKKwlpZiAoZXJyICE9IDApCisJCWVycm9yKF8oImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIiksIHRyYW5zcG9ydC0+dXJsKTsKKworCWVyciB8PSB0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCWlmICghZXJyKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAobm9uZmFzdGZvcndhcmQpIHsKKwlkZWZhdWx0OgorCQlicmVhazsKKwljYXNlIE5PTl9GRl9IRUFEOgorCQlhZHZpc2VfcHVsbF9iZWZvcmVfcHVzaCgpOworCQlicmVhazsKKwljYXNlIE5PTl9GRl9PVEhFUjoKKwkJaWYgKGRlZmF1bHRfbWF0Y2hpbmdfdXNlZCkKKwkJCWFkdmlzZV91c2VfdXBzdHJlYW0oKTsKKwkJZWxzZQorCQkJYWR2aXNlX2NoZWNrb3V0X3B1bGxfcHVzaCgpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkb19wdXNoKGNvbnN0IGNoYXIgKnJlcG8sIGludCBmbGFncykKK3sKKwlpbnQgaSwgZXJyczsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSByZW1vdGVfZ2V0KHJlcG8pOworCWNvbnN0IGNoYXIgKip1cmw7CisJaW50IHVybF9ucjsKKworCWlmICghcmVtb3RlKSB7CisJCWlmIChyZXBvKQorCQkJZGllKF8oImJhZCByZXBvc2l0b3J5ICclcyciKSwgcmVwbyk7CisJCWRpZShfKCJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisJCSAgICAiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlIHJlcG9zaXRvcnkgdXNpbmdcbiIKKwkJICAgICJcbiIKKwkJICAgICIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisJCSAgICAiXG4iCisJCSAgICAiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKwkJICAgICJcbiIKKwkJICAgICIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iKSk7CisJfQorCisJaWYgKHJlbW90ZS0+bWlycm9yKQorCQlmbGFncyB8PSAoVFJBTlNQT1JUX1BVU0hfTUlSUk9SfFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKKworCWlmICgoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpICYmIHJlZnNwZWMpIHsKKwkJaWYgKCFzdHJjbXAoKnJlZnNwZWMsICJyZWZzL3RhZ3MvKiIpKQorCQkJcmV0dXJuIGVycm9yKF8oIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIpKTsKKwkJcmV0dXJuIGVycm9yKF8oIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiKSk7CisJfQorCisJaWYgKChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUikgJiYgcmVmc3BlYykgeworCQlpZiAoIXN0cmNtcCgqcmVmc3BlYywgInJlZnMvdGFncy8qIikpCisJCQlyZXR1cm4gZXJyb3IoXygiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIikpOworCQlyZXR1cm4gZXJyb3IoXygiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIpKTsKKwl9CisKKwlpZiAoKGZsYWdzICYgKFRSQU5TUE9SVF9QVVNIX0FMTHxUUkFOU1BPUlRfUFVTSF9NSVJST1IpKSA9PQorCQkJCShUUkFOU1BPUlRfUFVTSF9BTEx8VFJBTlNQT1JUX1BVU0hfTUlSUk9SKSkgeworCQlyZXR1cm4gZXJyb3IoXygiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiKSk7CisJfQorCisJaWYgKCFyZWZzcGVjICYmICEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpKSB7CisJCWlmIChyZW1vdGUtPnB1c2hfcmVmc3BlY19ucikgeworCQkJcmVmc3BlYyA9IHJlbW90ZS0+cHVzaF9yZWZzcGVjOworCQkJcmVmc3BlY19uciA9IHJlbW90ZS0+cHVzaF9yZWZzcGVjX25yOworCQl9IGVsc2UgaWYgKCEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1IpKQorCQkJc2V0dXBfZGVmYXVsdF9wdXNoX3JlZnNwZWNzKHJlbW90ZSk7CisJfQorCWVycnMgPSAwOworCXVybF9uciA9IHB1c2hfdXJsX29mX3JlbW90ZShyZW1vdGUsICZ1cmwpOworCWlmICh1cmxfbnIpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVybF9ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQgPQorCQkJCXRyYW5zcG9ydF9nZXQocmVtb3RlLCB1cmxbaV0pOworCQkJaWYgKHB1c2hfd2l0aF9vcHRpb25zKHRyYW5zcG9ydCwgZmxhZ3MpKQorCQkJCWVycnMrKzsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCA9CisJCQl0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgTlVMTCk7CisKKwkJaWYgKHB1c2hfd2l0aF9vcHRpb25zKHRyYW5zcG9ydCwgZmxhZ3MpKQorCQkJZXJycysrOworCX0KKwlyZXR1cm4gISFlcnJzOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqZmxhZ3MgPSBvcHQtPnZhbHVlOworCisJaWYgKCpmbGFncyAmIChUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX0NIRUNLIHwKKwkJICAgICAgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQpKQorCQlkaWUoIiVzIGNhbiBvbmx5IGJlIHVzZWQgb25jZS4iLCBvcHQtPmxvbmdfbmFtZSk7CisKKwlpZiAoYXJnKSB7CisJCWlmICghc3RyY21wKGFyZywgImNoZWNrIikpCisJCQkqZmxhZ3MgfD0gVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19DSEVDSzsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJvbi1kZW1hbmQiKSkKKwkJCSpmbGFncyB8PSBUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORDsKKwkJZWxzZQorCQkJZGllKCJiYWQgJXMgYXJndW1lbnQ6ICVzIiwgb3B0LT5sb25nX25hbWUsIGFyZyk7CisJfSBlbHNlCisJCWRpZSgib3B0aW9uICVzIG5lZWRzIGFuIGFyZ3VtZW50IChjaGVja3xvbi1kZW1hbmQpIiwKKwkJCQlvcHQtPmxvbmdfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9wdXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBmbGFncyA9IDA7CisJaW50IHRhZ3MgPSAwOworCWludCByYzsKKwljb25zdCBjaGFyICpyZXBvID0gTlVMTDsJLyogZGVmYXVsdCByZXBvc2l0b3J5ICovCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TSVRZKCZ2ZXJib3NpdHkpLAorCQlPUFRfU1RSSU5HKCAwICwgInJlcG8iLCAmcmVwbywgTl8oInJlcG9zaXRvcnkiKSwgTl8oInJlcG9zaXRvcnkiKSksCisJCU9QVF9CSVQoIDAgLCAiYWxsIiwgJmZsYWdzLCBOXygicHVzaCBhbGwgcmVmcyIpLCBUUkFOU1BPUlRfUFVTSF9BTEwpLAorCQlPUFRfQklUKCAwICwgIm1pcnJvciIsICZmbGFncywgTl8oIm1pcnJvciBhbGwgcmVmcyIpLAorCQkJICAgIChUUkFOU1BPUlRfUFVTSF9NSVJST1J8VFJBTlNQT1JUX1BVU0hfRk9SQ0UpKSwKKwkJT1BUX0JPT0xFQU4oIDAsICJkZWxldGUiLCAmZGVsZXRlcmVmcywgTl8oImRlbGV0ZSByZWZzIikpLAorCQlPUFRfQk9PTEVBTiggMCAsICJ0YWdzIiwgJnRhZ3MsIE5fKCJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiKSksCisJCU9QVF9CSVQoJ24nICwgImRyeS1ydW4iLCAmZmxhZ3MsIE5fKCJkcnkgcnVuIiksIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4pLAorCQlPUFRfQklUKCAwLCAgInBvcmNlbGFpbiIsICZmbGFncywgTl8oIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IiksIFRSQU5TUE9SVF9QVVNIX1BPUkNFTEFJTiksCisJCU9QVF9CSVQoJ2YnLCAiZm9yY2UiLCAmZmxhZ3MsIE5fKCJmb3JjZSB1cGRhdGVzIiksIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJyZWN1cnNlLXN1Ym1vZHVsZXMiLCAmZmxhZ3MsIE5fKCJjaGVjayIpLAorCQkJTl8oImNvbnRyb2wgcmVjdXJzaXZlIHB1c2hpbmcgb2Ygc3VibW9kdWxlcyIpLAorCQkJUEFSU0VfT1BUX09QVEFSRywgb3B0aW9uX3BhcnNlX3JlY3Vyc2Vfc3VibW9kdWxlcyB9LAorCQlPUFRfQk9PTEVBTiggMCAsICJ0aGluIiwgJnRoaW4sIE5fKCJ1c2UgdGhpbiBwYWNrIikpLAorCQlPUFRfU1RSSU5HKCAwICwgInJlY2VpdmUtcGFjayIsICZyZWNlaXZlcGFjaywgInJlY2VpdmUtcGFjayIsIE5fKCJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIpKSwKKwkJT1BUX1NUUklORyggMCAsICJleGVjIiwgJnJlY2VpdmVwYWNrLCAicmVjZWl2ZS1wYWNrIiwgTl8oInJlY2VpdmUgcGFjayBwcm9ncmFtIikpLAorCQlPUFRfQklUKCd1JywgInNldC11cHN0cmVhbSIsICZmbGFncywgTl8oInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIiksCisJCQlUUkFOU1BPUlRfUFVTSF9TRVRfVVBTVFJFQU0pLAorCQlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsIE5fKCJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJCU9QVF9CSVQoMCwgInBydW5lIiwgJmZsYWdzLCBOXygicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiKSwKKwkJCVRSQU5TUE9SVF9QVVNIX1BSVU5FKSwKKwkJT1BUX0VORCgpCisJfTsKKworCXBhY2tldF90cmFjZV9pZGVudGl0eSgicHVzaCIpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHB1c2hfdXNhZ2UsIDApOworCisJaWYgKGRlbGV0ZXJlZnMgJiYgKHRhZ3MgfHwgKGZsYWdzICYgKFRSQU5TUE9SVF9QVVNIX0FMTCB8IFRSQU5TUE9SVF9QVVNIX01JUlJPUikpKSkKKwkJZGllKF8oIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIikpOworCWlmIChkZWxldGVyZWZzICYmIGFyZ2MgPCAyKQorCQlkaWUoXygiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiKSk7CisKKwlpZiAodGFncykKKwkJYWRkX3JlZnNwZWMoInJlZnMvdGFncy8qIik7CisKKwlpZiAoYXJnYyA+IDApIHsKKwkJcmVwbyA9IGFyZ3ZbMF07CisJCXNldF9yZWZzcGVjcyhhcmd2ICsgMSwgYXJnYyAtIDEpOworCX0KKworCXJjID0gZG9fcHVzaChyZXBvLCBmbGFncyk7CisJaWYgKHJjID09IC0xKQorCQl1c2FnZV93aXRoX29wdGlvbnMocHVzaF91c2FnZSwgb3B0aW9ucyk7CisJZWxzZQorCQlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlYWQtdHJlZS5jIGIvYnVpbHRpbi9yZWFkLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDJhYzFiCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZWFkLXRyZWUuYwpAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisKK3N0YXRpYyBpbnQgbnJfdHJlZXM7CitzdGF0aWMgaW50IHJlYWRfZW1wdHk7CitzdGF0aWMgc3RydWN0IHRyZWUgKnRyZWVzW01BWF9VTlBBQ0tfVFJFRVNdOworCitzdGF0aWMgaW50IGxpc3RfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCB0cmVlICp0cmVlOworCisJaWYgKG5yX3RyZWVzID49IE1BWF9VTlBBQ0tfVFJFRVMpCisJCWRpZSgiSSBjYW5ub3QgcmVhZCBtb3JlIHRoYW4gJWQgdHJlZXMiLCBNQVhfVU5QQUNLX1RSRUVTKTsKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChzaGExKTsKKwlpZiAoIXRyZWUpCisJCXJldHVybiAtMTsKKwl0cmVlc1tucl90cmVlcysrXSA9IHRyZWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVhZF90cmVlX3VzYWdlW10gPSB7CisJTl8oImdpdCByZWFkLXRyZWUgW1stbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4Pl0gWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0taW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBpbmRleF9vdXRwdXRfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkJIGludCB1bnNldCkKK3sKKwlzZXRfYWx0ZXJuYXRlX2luZGV4X291dHB1dChhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4Y2x1ZGVfcGVyX2RpcmVjdG9yeV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCQkgICAgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaXJfc3RydWN0ICpkaXI7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvcHRzOworCisJb3B0cyA9IChzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKilvcHQtPnZhbHVlOworCisJaWYgKG9wdHMtPmRpcikKKwkJZGllKCJtb3JlIHRoYW4gb25lIC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5IGdpdmVuLiIpOworCisJZGlyID0geGNhbGxvYygxLCBzaXplb2YoKm9wdHMtPmRpcikpOworCWRpci0+ZmxhZ3MgfD0gRElSX1NIT1dfSUdOT1JFRDsKKwlkaXItPmV4Y2x1ZGVfcGVyX2RpciA9IGFyZzsKKwlvcHRzLT5kaXIgPSBkaXI7CisJLyogV2UgZG8gbm90IG5lZWQgdG8gbm9yIHdhbnQgdG8gZG8gcmVhZC1kaXJlY3RvcnkKKwkgKiBoZXJlOyB3ZSBhcmUgbWVyZWx5IGludGVyZXN0ZWQgaW4gcmV1c2luZyB0aGUKKwkgKiBwZXIgZGlyZWN0b3J5IGlnbm9yZSBzdGFjayBtZWNoYW5pc20uCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3N0YWdlKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXByaW50ZigiJXMgIiwgbGFiZWwpOworCWlmICghY2UpCisJCXByaW50ZigiKG1pc3NpbmcpXG4iKTsKKwllbHNlIGlmIChjZSA9PSBvLT5kZl9jb25mbGljdF9lbnRyeSkKKwkJcHJpbnRmKCIoY29uZmxpY3QpXG4iKTsKKwllbHNlCisJCXByaW50ZigiJTA2byAjJWQgJXMgJS44c1xuIiwKKwkJICAgICAgIGNlLT5jZV9tb2RlLCBjZV9zdGFnZShjZSksIGNlLT5uYW1lLAorCQkgICAgICAgc2hhMV90b19oZXgoY2UtPnNoYTEpKTsKK30KKworc3RhdGljIGludCBkZWJ1Z19tZXJnZShzdHJ1Y3QgY2FjaGVfZW50cnkgKipzdGFnZXMsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpbnQgaTsKKworCXByaW50ZigiKiAlZC13YXkgbWVyZ2VcbiIsIG8tPm1lcmdlX3NpemUpOworCWRlYnVnX3N0YWdlKCJpbmRleCIsIHN0YWdlc1swXSwgbyk7CisJZm9yIChpID0gMTsgaSA8PSBvLT5tZXJnZV9zaXplOyBpKyspIHsKKwkJY2hhciBidWZbMjRdOworCQlzcHJpbnRmKGJ1ZiwgImVudCMlZCIsIGkpOworCQlkZWJ1Z19zdGFnZShidWYsIHN0YWdlc1tpXSwgbyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGU7CisKK2ludCBjbWRfcmVhZF90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqdW51c2VkX3ByZWZpeCkKK3sKKwlpbnQgaSwgbmV3ZmQsIHN0YWdlID0gMDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCB0cmVlX2Rlc2MgdFtNQVhfVU5QQUNLX1RSRUVTXTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlpbnQgcHJlZml4X3NldCA9IDA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiByZWFkX3RyZWVfb3B0aW9uc1tdID0geworCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImluZGV4LW91dHB1dCIsIE5VTEwsIE5fKCJmaWxlIiksCisJCSAgTl8oIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iKSwKKwkJICBQQVJTRV9PUFRfTk9ORUcsIGluZGV4X291dHB1dF9jYiB9LAorCQlPUFRfU0VUX0lOVCgwLCAiZW1wdHkiLCAmcmVhZF9lbXB0eSwKKwkJCSAgICBOXygib25seSBlbXB0eSB0aGUgaW5kZXgiKSwgMSksCisJCU9QVF9fVkVSQk9TRSgmb3B0cy52ZXJib3NlX3VwZGF0ZSwgTl8oImJlIHZlcmJvc2UiKSksCisJCU9QVF9HUk9VUChOXygiTWVyZ2luZyIpKSwKKwkJT1BUX1NFVF9JTlQoJ20nLCBOVUxMLCAmb3B0cy5tZXJnZSwKKwkJCSAgICBOXygicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoMCwgInRyaXZpYWwiLCAmb3B0cy50cml2aWFsX21lcmdlc19vbmx5LAorCQkJICAgIE5fKCIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiKSwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJhZ2dyZXNzaXZlIiwgJm9wdHMuYWdncmVzc2l2ZSwKKwkJCSAgICBOXygiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoMCwgInJlc2V0IiwgJm9wdHMucmVzZXQsCisJCQkgICAgTl8oInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiKSwgMSksCisJCXsgT1BUSU9OX1NUUklORywgMCwgInByZWZpeCIsICZvcHRzLnByZWZpeCwgTl8oIjxzdWJkaXJlY3Rvcnk+LyIpLAorCQkgIE5fKCJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIpLAorCQkgIFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAgfSwKKwkJT1BUX1NFVF9JTlQoJ3UnLCBOVUxMLCAmb3B0cy51cGRhdGUsCisJCQkgICAgTl8oInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiKSwgMSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiZXhjbHVkZS1wZXItZGlyZWN0b3J5IiwgJm9wdHMsCisJCSAgTl8oImdpdGlnbm9yZSIpLAorCQkgIE5fKCJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iKSwKKwkJICBQQVJTRV9PUFRfTk9ORUcsIGV4Y2x1ZGVfcGVyX2RpcmVjdG9yeV9jYiB9LAorCQlPUFRfU0VUX0lOVCgnaScsIE5VTEwsICZvcHRzLmluZGV4X29ubHksCisJCQkgICAgTl8oImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIpLCAxKSwKKwkJT1BUX19EUllfUlVOKCZvcHRzLmRyeV9ydW4sIE5fKCJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiKSksCisJCU9QVF9TRVRfSU5UKDAsICJuby1zcGFyc2UtY2hlY2tvdXQiLCAmb3B0cy5za2lwX3NwYXJzZV9jaGVja291dCwKKwkJCSAgICBOXygic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAiZGVidWctdW5wYWNrIiwgJm9wdHMuZGVidWdfdW5wYWNrLAorCQkJICAgIE5fKCJkZWJ1ZyB1bnBhY2stdHJlZXMiKSwgMSksCisJCU9QVF9FTkQoKQorCX07CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5oZWFkX2lkeCA9IC0xOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCB1bnVzZWRfcHJlZml4LCByZWFkX3RyZWVfb3B0aW9ucywKKwkJCSAgICAgcmVhZF90cmVlX3VzYWdlLCAwKTsKKworCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisKKwlwcmVmaXhfc2V0ID0gb3B0cy5wcmVmaXggPyAxIDogMDsKKwlpZiAoMSA8IG9wdHMubWVyZ2UgKyBvcHRzLnJlc2V0ICsgcHJlZml4X3NldCkKKwkJZGllKCJXaGljaCBvbmU/IC1tLCAtLXJlc2V0LCBvciAtLXByZWZpeD8iKTsKKworCWlmIChvcHRzLnJlc2V0IHx8IG9wdHMubWVyZ2UgfHwgb3B0cy5wcmVmaXgpIHsKKwkJaWYgKHJlYWRfY2FjaGVfdW5tZXJnZWQoKSAmJiAob3B0cy5wcmVmaXggfHwgb3B0cy5tZXJnZSkpCisJCQlkaWUoIllvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0Iik7CisJCXN0YWdlID0gb3B0cy5tZXJnZSA9IDE7CisJfQorCXJlc29sdmVfdW5kb19jbGVhcigpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmIChnZXRfc2hhMShhcmcsIHNoYTEpKQorCQkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZyk7CisJCWlmIChsaXN0X3RyZWUoc2hhMSkgPCAwKQorCQkJZGllKCJmYWlsZWQgdG8gdW5wYWNrIHRyZWUgb2JqZWN0ICVzIiwgYXJnKTsKKwkJc3RhZ2UrKzsKKwl9CisJaWYgKG5yX3RyZWVzID09IDAgJiYgIXJlYWRfZW1wdHkpCisJCXdhcm5pbmcoInJlYWQtdHJlZTogZW1wdHlpbmcgdGhlIGluZGV4IHdpdGggbm8gYXJndW1lbnRzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAtLWVtcHR5Iik7CisJZWxzZSBpZiAobnJfdHJlZXMgPiAwICYmIHJlYWRfZW1wdHkpCisJCWRpZSgicGFzc2luZyB0cmVlcyBhcyBhcmd1bWVudHMgY29udHJhZGljdHMgLS1lbXB0eSIpOworCisJaWYgKDEgPCBvcHRzLmluZGV4X29ubHkgKyBvcHRzLnVwZGF0ZSkKKwkJZGllKCItdSBhbmQgLWkgYXQgdGhlIHNhbWUgdGltZSBtYWtlcyBubyBzZW5zZSIpOworCWlmICgob3B0cy51cGRhdGV8fG9wdHMuaW5kZXhfb25seSkgJiYgIW9wdHMubWVyZ2UpCisJCWRpZSgiJXMgaXMgbWVhbmluZ2xlc3Mgd2l0aG91dCAtbSwgLS1yZXNldCwgb3IgLS1wcmVmaXgiLAorCQkgICAgb3B0cy51cGRhdGUgPyAiLXUiIDogIi1pIik7CisJaWYgKChvcHRzLmRpciAmJiAhb3B0cy51cGRhdGUpKQorCQlkaWUoIi0tZXhjbHVkZS1wZXItZGlyZWN0b3J5IGlzIG1lYW5pbmdsZXNzIHVubGVzcyAtdSIpOworCWlmIChvcHRzLm1lcmdlICYmICFvcHRzLmluZGV4X29ubHkpCisJCXNldHVwX3dvcmtfdHJlZSgpOworCisJaWYgKG9wdHMubWVyZ2UpIHsKKwkJaWYgKHN0YWdlIDwgMikKKwkJCWRpZSgianVzdCBob3cgZG8geW91IGV4cGVjdCBtZSB0byBtZXJnZSAlZCB0cmVlcz8iLCBzdGFnZS0xKTsKKwkJc3dpdGNoIChzdGFnZSAtIDEpIHsKKwkJY2FzZSAxOgorCQkJb3B0cy5mbiA9IG9wdHMucHJlZml4ID8gYmluZF9tZXJnZSA6IG9uZXdheV9tZXJnZTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlvcHRzLmZuID0gdHdvd2F5X21lcmdlOworCQkJb3B0cy5pbml0aWFsX2NoZWNrb3V0ID0gaXNfY2FjaGVfdW5ib3JuKCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQlkZWZhdWx0OgorCQkJb3B0cy5mbiA9IHRocmVld2F5X21lcmdlOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc3RhZ2UgLSAxID49IDMpCisJCQlvcHRzLmhlYWRfaWR4ID0gc3RhZ2UgLSAyOworCQllbHNlCisJCQlvcHRzLmhlYWRfaWR4ID0gMTsKKwl9CisKKwlpZiAob3B0cy5kZWJ1Z191bnBhY2spCisJCW9wdHMuZm4gPSBkZWJ1Z19tZXJnZTsKKworCWNhY2hlX3RyZWVfZnJlZSgmYWN0aXZlX2NhY2hlX3RyZWUpOworCWZvciAoaSA9IDA7IGkgPCBucl90cmVlczsgaSsrKSB7CisJCXN0cnVjdCB0cmVlICp0cmVlID0gdHJlZXNbaV07CisJCXBhcnNlX3RyZWUodHJlZSk7CisJCWluaXRfdHJlZV9kZXNjKHQraSwgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwl9CisJaWYgKHVucGFja190cmVlcyhucl90cmVlcywgdCwgJm9wdHMpKQorCQlyZXR1cm4gMTI4OworCisJaWYgKG9wdHMuZGVidWdfdW5wYWNrIHx8IG9wdHMuZHJ5X3J1bikKKwkJcmV0dXJuIDA7IC8qIGRvIG5vdCB3cml0ZSB0aGUgaW5kZXggb3V0ICovCisKKwkvKgorCSAqIFdoZW4gcmVhZGluZyBvbmx5IG9uZSB0cmVlIChlaXRoZXIgdGhlIG1vc3QgYmFzaWMgZm9ybSwKKwkgKiAiLW0gZW50IiBvciAiLS1yZXNldCBlbnQiIGZvcm0pLCB3ZSBjYW4gb2J0YWluIGEgZnVsbHkKKwkgKiB2YWxpZCBjYWNoZS10cmVlIGJlY2F1c2UgdGhlIGluZGV4IG11c3QgbWF0Y2ggZXhhY3RseQorCSAqIHdoYXQgY2FtZSBmcm9tIHRoZSB0cmVlLgorCSAqLworCWlmIChucl90cmVlcyA9PSAxICYmICFvcHRzLnByZWZpeCkKKwkJcHJpbWVfY2FjaGVfdHJlZSgmYWN0aXZlX2NhY2hlX3RyZWUsIHRyZWVzWzBdKTsKKworCWlmICh3cml0ZV9jYWNoZShuZXdmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJICAgIGNvbW1pdF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSkpCisJCWRpZSgidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlY2VpdmUtcGFjay5jIGIvYnVpbHRpbi9yZWNlaXZlLXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc4MWZlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZWNlaXZlLXBhY2suYwpAQCAtMCwwICsxLDEwMTIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgImNvbm5lY3RlZC5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgcmVjZWl2ZV9wYWNrX3VzYWdlW10gPSAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iOworCitlbnVtIGRlbnlfYWN0aW9uIHsKKwlERU5ZX1VOQ09ORklHVVJFRCwKKwlERU5ZX0lHTk9SRSwKKwlERU5ZX1dBUk4sCisJREVOWV9SRUZVU0UKK307CisKK3N0YXRpYyBpbnQgZGVueV9kZWxldGVzOworc3RhdGljIGludCBkZW55X25vbl9mYXN0X2ZvcndhcmRzOworc3RhdGljIGVudW0gZGVueV9hY3Rpb24gZGVueV9jdXJyZW50X2JyYW5jaCA9IERFTllfVU5DT05GSUdVUkVEOworc3RhdGljIGVudW0gZGVueV9hY3Rpb24gZGVueV9kZWxldGVfY3VycmVudCA9IERFTllfVU5DT05GSUdVUkVEOworc3RhdGljIGludCByZWNlaXZlX2ZzY2tfb2JqZWN0cyA9IC0xOworc3RhdGljIGludCB0cmFuc2Zlcl9mc2NrX29iamVjdHMgPSAtMTsKK3N0YXRpYyBpbnQgcmVjZWl2ZV91bnBhY2tfbGltaXQgPSAtMTsKK3N0YXRpYyBpbnQgdHJhbnNmZXJfdW5wYWNrX2xpbWl0ID0gLTE7CitzdGF0aWMgaW50IHVucGFja19saW1pdCA9IDEwMDsKK3N0YXRpYyBpbnQgcmVwb3J0X3N0YXR1czsKK3N0YXRpYyBpbnQgdXNlX3NpZGViYW5kOworc3RhdGljIGludCBxdWlldDsKK3N0YXRpYyBpbnQgcHJlZmVyX29mc19kZWx0YSA9IDE7CitzdGF0aWMgaW50IGF1dG9fdXBkYXRlX3NlcnZlcl9pbmZvOworc3RhdGljIGludCBhdXRvX2djID0gMTsKK3N0YXRpYyBjb25zdCBjaGFyICpoZWFkX25hbWU7CitzdGF0aWMgdm9pZCAqaGVhZF9uYW1lX3RvX2ZyZWU7CitzdGF0aWMgaW50IHNlbnRfY2FwYWJpbGl0aWVzOworCitzdGF0aWMgZW51bSBkZW55X2FjdGlvbiBwYXJzZV9kZW55X2FjdGlvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICh2YWx1ZSkgeworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJpZ25vcmUiKSkKKwkJCXJldHVybiBERU5ZX0lHTk9SRTsKKwkJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAid2FybiIpKQorCQkJcmV0dXJuIERFTllfV0FSTjsKKwkJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAicmVmdXNlIikpCisJCQlyZXR1cm4gREVOWV9SRUZVU0U7CisJfQorCWlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCXJldHVybiBERU5ZX1JFRlVTRTsKKwlyZXR1cm4gREVOWV9JR05PUkU7Cit9CisKK3N0YXRpYyBpbnQgcmVjZWl2ZV9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuZGVueWRlbGV0ZXMiKSA9PSAwKSB7CisJCWRlbnlfZGVsZXRlcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmRlbnlub25mYXN0Zm9yd2FyZHMiKSA9PSAwKSB7CisJCWRlbnlfbm9uX2Zhc3RfZm9yd2FyZHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS51bnBhY2tsaW1pdCIpID09IDApIHsKKwkJcmVjZWl2ZV91bnBhY2tfbGltaXQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJ0cmFuc2Zlci51bnBhY2tsaW1pdCIpID09IDApIHsKKwkJdHJhbnNmZXJfdW5wYWNrX2xpbWl0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5mc2Nrb2JqZWN0cyIpID09IDApIHsKKwkJcmVjZWl2ZV9mc2NrX29iamVjdHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAidHJhbnNmZXIuZnNja29iamVjdHMiKSA9PSAwKSB7CisJCXRyYW5zZmVyX2ZzY2tfb2JqZWN0cyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAicmVjZWl2ZS5kZW55Y3VycmVudGJyYW5jaCIpKSB7CisJCWRlbnlfY3VycmVudF9icmFuY2ggPSBwYXJzZV9kZW55X2FjdGlvbih2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmRlbnlkZWxldGVjdXJyZW50IikgPT0gMCkgeworCQlkZW55X2RlbGV0ZV9jdXJyZW50ID0gcGFyc2VfZGVueV9hY3Rpb24odmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCIpID09IDApIHsKKwkJcHJlZmVyX29mc19kZWx0YSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLnVwZGF0ZXNlcnZlcmluZm8iKSA9PSAwKSB7CisJCWF1dG9fdXBkYXRlX3NlcnZlcl9pbmZvID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuYXV0b2djIikgPT0gMCkgeworCQlhdXRvX2djID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpZiAoc2VudF9jYXBhYmlsaXRpZXMpCisJCXBhY2tldF93cml0ZSgxLCAiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCBwYXRoKTsKKwllbHNlCisJCXBhY2tldF93cml0ZSgxLCAiJXMgJXMlYyVzJXMgYWdlbnQ9JXNcbiIsCisJCQkgICAgIHNoYTFfdG9faGV4KHNoYTEpLCBwYXRoLCAwLAorCQkJICAgICAiIHJlcG9ydC1zdGF0dXMgZGVsZXRlLXJlZnMgc2lkZS1iYW5kLTY0ayBxdWlldCIsCisJCQkgICAgIHByZWZlcl9vZnNfZGVsdGEgPyAiIG9mcy1kZWx0YSIgOiAiIiwKKwkJCSAgICAgZ2l0X3VzZXJfYWdlbnRfc2FuaXRpemVkKCkpOworCXNlbnRfY2FwYWJpbGl0aWVzID0gMTsKK30KKworc3RhdGljIGludCBzaG93X3JlZl9jYihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqdW51c2VkKQoreworCXBhdGggPSBzdHJpcF9uYW1lc3BhY2UocGF0aCk7CisJLyoKKwkgKiBBZHZlcnRpc2UgcmVmcyBvdXRzaWRlIG91ciBjdXJyZW50IG5hbWVzcGFjZSBhcyAiLmhhdmUiCisJICogcmVmcywgc28gdGhhdCB0aGUgY2xpZW50IGNhbiB1c2UgdGhlbSB0byBtaW5pbWl6ZSBkYXRhCisJICogdHJhbnNmZXIgYnV0IHdpbGwgb3RoZXJ3aXNlIGlnbm9yZSB0aGVtLiBUaGlzIGhhcHBlbnMgdG8KKwkgKiBjb3ZlciAiLmhhdmUiIHRoYXQgYXJlIHRocm93biBpbiBieSBhZGRfb25lX2FsdGVybmF0ZV9yZWYoKQorCSAqIHRvIG1hcmsgaGlzdG9yaWVzIHRoYXQgYXJlIGNvbXBsZXRlIGluIG91ciBhbHRlcm5hdGVzIGFzCisJICogd2VsbC4KKwkgKi8KKwlpZiAoIXBhdGgpCisJCXBhdGggPSAiLmhhdmUiOworCXNob3dfcmVmKHBhdGgsIHNoYTEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X29uZV9hbHRlcm5hdGVfc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCB2b2lkICp1bnVzZWQpCit7CisJc2hvd19yZWYoIi5oYXZlIiwgc2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3Rfb25lX2FsdGVybmF0ZV9yZWYoY29uc3Qgc3RydWN0IHJlZiAqcmVmLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzaGExX2FycmF5ICpzYSA9IGRhdGE7CisJc2hhMV9hcnJheV9hcHBlbmQoc2EsIHJlZi0+b2xkX3NoYTEpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9oZWFkX2luZm8odm9pZCkKK3sKKwlzdHJ1Y3Qgc2hhMV9hcnJheSBzYSA9IFNIQTFfQVJSQVlfSU5JVDsKKwlmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKGNvbGxlY3Rfb25lX2FsdGVybmF0ZV9yZWYsICZzYSk7CisJc2hhMV9hcnJheV9mb3JfZWFjaF91bmlxdWUoJnNhLCBzaG93X29uZV9hbHRlcm5hdGVfc2hhMSwgTlVMTCk7CisJc2hhMV9hcnJheV9jbGVhcigmc2EpOworCWZvcl9lYWNoX3JlZihzaG93X3JlZl9jYiwgTlVMTCk7CisJaWYgKCFzZW50X2NhcGFiaWxpdGllcykKKwkJc2hvd19yZWYoImNhcGFiaWxpdGllc157fSIsIG51bGxfc2hhMSk7CisKKwkvKiBFT0YgKi8KKwlwYWNrZXRfZmx1c2goMSk7Cit9CisKK3N0cnVjdCBjb21tYW5kIHsKKwlzdHJ1Y3QgY29tbWFuZCAqbmV4dDsKKwljb25zdCBjaGFyICplcnJvcl9zdHJpbmc7CisJdW5zaWduZWQgaW50IHNraXBfdXBkYXRlOjEsCisJCSAgICAgZGlkX25vdF9leGlzdDoxOworCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCXVuc2lnbmVkIGNoYXIgbmV3X3NoYTFbMjBdOworCWNoYXIgcmVmX25hbWVbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKK3N0YXRpYyBjb25zdCBjaGFyIHByZV9yZWNlaXZlX2hvb2tbXSA9ICJob29rcy9wcmUtcmVjZWl2ZSI7CitzdGF0aWMgY29uc3QgY2hhciBwb3N0X3JlY2VpdmVfaG9va1tdID0gImhvb2tzL3Bvc3QtcmVjZWl2ZSI7CisKK3N0YXRpYyB2b2lkIHJwX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK3N0YXRpYyB2b2lkIHJwX3dhcm5pbmcoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCitzdGF0aWMgdm9pZCByZXBvcnRfbWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJaW50IHN6ID0gc3RybGVuKHByZWZpeCk7CisJY2hhciBtc2dbNDA5Nl07CisKKwlzdHJuY3B5KG1zZywgcHJlZml4LCBzeik7CisJc3ogKz0gdnNucHJpbnRmKG1zZyArIHN6LCBzaXplb2YobXNnKSAtIHN6LCBlcnIsIHBhcmFtcyk7CisJaWYgKHN6ID4gKHNpemVvZihtc2cpIC0gMSkpCisJCXN6ID0gc2l6ZW9mKG1zZykgLSAxOworCW1zZ1tzeisrXSA9ICdcbic7CisKKwlpZiAodXNlX3NpZGViYW5kKQorCQlzZW5kX3NpZGViYW5kKDEsIDIsIG1zZywgc3osIHVzZV9zaWRlYmFuZCk7CisJZWxzZQorCQl4d3JpdGUoMiwgbXNnLCBzeik7Cit9CisKK3N0YXRpYyB2b2lkIHJwX3dhcm5pbmcoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCXJlcG9ydF9tZXNzYWdlKCJ3YXJuaW5nOiAiLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK3N0YXRpYyB2b2lkIHJwX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwlyZXBvcnRfbWVzc2FnZSgiZXJyb3I6ICIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworc3RhdGljIGludCBjb3B5X3RvX3NpZGViYW5kKGludCBpbiwgaW50IG91dCwgdm9pZCAqYXJnKQoreworCWNoYXIgZGF0YVsxMjhdOworCXdoaWxlICgxKSB7CisJCXNzaXplX3Qgc3ogPSB4cmVhZChpbiwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwkJaWYgKHN6IDw9IDApCisJCQlicmVhazsKKwkJc2VuZF9zaWRlYmFuZCgxLCAyLCBkYXRhLCBzeiwgdXNlX3NpZGViYW5kKTsKKwl9CisJY2xvc2UoaW4pOworCXJldHVybiAwOworfQorCit0eXBlZGVmIGludCAoKmZlZWRfZm4pKHZvaWQgKiwgY29uc3QgY2hhciAqKiwgc2l6ZV90ICopOworc3RhdGljIGludCBydW5fYW5kX2ZlZWRfaG9vayhjb25zdCBjaGFyICpob29rX25hbWUsIGZlZWRfZm4gZmVlZCwgdm9pZCAqZmVlZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jOworCXN0cnVjdCBhc3luYyBtdXhlcjsKKwljb25zdCBjaGFyICphcmd2WzJdOworCWludCBjb2RlOworCisJaWYgKGFjY2Vzcyhob29rX25hbWUsIFhfT0spIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlhcmd2WzBdID0gaG9va19uYW1lOworCWFyZ3ZbMV0gPSBOVUxMOworCisJbWVtc2V0KCZwcm9jLCAwLCBzaXplb2YocHJvYykpOworCXByb2MuYXJndiA9IGFyZ3Y7CisJcHJvYy5pbiA9IC0xOworCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisKKwlpZiAodXNlX3NpZGViYW5kKSB7CisJCW1lbXNldCgmbXV4ZXIsIDAsIHNpemVvZihtdXhlcikpOworCQltdXhlci5wcm9jID0gY29weV90b19zaWRlYmFuZDsKKwkJbXV4ZXIuaW4gPSAtMTsKKwkJY29kZSA9IHN0YXJ0X2FzeW5jKCZtdXhlcik7CisJCWlmIChjb2RlKQorCQkJcmV0dXJuIGNvZGU7CisJCXByb2MuZXJyID0gbXV4ZXIuaW47CisJfQorCisJY29kZSA9IHN0YXJ0X2NvbW1hbmQoJnByb2MpOworCWlmIChjb2RlKSB7CisJCWlmICh1c2Vfc2lkZWJhbmQpCisJCQlmaW5pc2hfYXN5bmMoJm11eGVyKTsKKwkJcmV0dXJuIGNvZGU7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJY29uc3QgY2hhciAqYnVmOworCQlzaXplX3QgbjsKKwkJaWYgKGZlZWQoZmVlZF9zdGF0ZSwgJmJ1ZiwgJm4pKQorCQkJYnJlYWs7CisJCWlmICh3cml0ZV9pbl9mdWxsKHByb2MuaW4sIGJ1ZiwgbikgIT0gbikKKwkJCWJyZWFrOworCX0KKwljbG9zZShwcm9jLmluKTsKKwlpZiAodXNlX3NpZGViYW5kKQorCQlmaW5pc2hfYXN5bmMoJm11eGVyKTsKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJnByb2MpOworfQorCitzdHJ1Y3QgcmVjZWl2ZV9ob29rX2ZlZWRfc3RhdGUgeworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJaW50IHNraXBfYnJva2VuOworCXN0cnVjdCBzdHJidWYgYnVmOworfTsKKworc3RhdGljIGludCBmZWVkX3JlY2VpdmVfaG9vayh2b2lkICpzdGF0ZV8sIGNvbnN0IGNoYXIgKipidWZwLCBzaXplX3QgKnNpemVwKQoreworCXN0cnVjdCByZWNlaXZlX2hvb2tfZmVlZF9zdGF0ZSAqc3RhdGUgPSBzdGF0ZV87CisJc3RydWN0IGNvbW1hbmQgKmNtZCA9IHN0YXRlLT5jbWQ7CisKKwl3aGlsZSAoY21kICYmCisJICAgICAgIHN0YXRlLT5za2lwX2Jyb2tlbiAmJiAoY21kLT5lcnJvcl9zdHJpbmcgfHwgY21kLT5kaWRfbm90X2V4aXN0KSkKKwkJY21kID0gY21kLT5uZXh0OworCWlmICghY21kKQorCQlyZXR1cm4gLTE7IC8qIEVPRiAqLworCXN0cmJ1Zl9yZXNldCgmc3RhdGUtPmJ1Zik7CisJc3RyYnVmX2FkZGYoJnN0YXRlLT5idWYsICIlcyAlcyAlc1xuIiwKKwkJICAgIHNoYTFfdG9faGV4KGNtZC0+b2xkX3NoYTEpLCBzaGExX3RvX2hleChjbWQtPm5ld19zaGExKSwKKwkJICAgIGNtZC0+cmVmX25hbWUpOworCXN0YXRlLT5jbWQgPSBjbWQtPm5leHQ7CisJaWYgKGJ1ZnApIHsKKwkJKmJ1ZnAgPSBzdGF0ZS0+YnVmLmJ1ZjsKKwkJKnNpemVwID0gc3RhdGUtPmJ1Zi5sZW47CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ1bl9yZWNlaXZlX2hvb2soc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzLCBjb25zdCBjaGFyICpob29rX25hbWUsCisJCQkgICAgaW50IHNraXBfYnJva2VuKQoreworCXN0cnVjdCByZWNlaXZlX2hvb2tfZmVlZF9zdGF0ZSBzdGF0ZTsKKwlpbnQgc3RhdHVzOworCisJc3RyYnVmX2luaXQoJnN0YXRlLmJ1ZiwgMCk7CisJc3RhdGUuY21kID0gY29tbWFuZHM7CisJc3RhdGUuc2tpcF9icm9rZW4gPSBza2lwX2Jyb2tlbjsKKwlpZiAoZmVlZF9yZWNlaXZlX2hvb2soJnN0YXRlLCBOVUxMLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisJc3RhdGUuY21kID0gY29tbWFuZHM7CisJc3RhdHVzID0gcnVuX2FuZF9mZWVkX2hvb2soaG9va19uYW1lLCBmZWVkX3JlY2VpdmVfaG9vaywgJnN0YXRlKTsKKwlzdHJidWZfcmVsZWFzZSgmc3RhdGUuYnVmKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHJ1bl91cGRhdGVfaG9vayhzdHJ1Y3QgY29tbWFuZCAqY21kKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHVwZGF0ZV9ob29rW10gPSAiaG9va3MvdXBkYXRlIjsKKwljb25zdCBjaGFyICphcmd2WzVdOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2M7CisJaW50IGNvZGU7CisKKwlpZiAoYWNjZXNzKHVwZGF0ZV9ob29rLCBYX09LKSA8IDApCisJCXJldHVybiAwOworCisJYXJndlswXSA9IHVwZGF0ZV9ob29rOworCWFyZ3ZbMV0gPSBjbWQtPnJlZl9uYW1lOworCWFyZ3ZbMl0gPSBzaGExX3RvX2hleChjbWQtPm9sZF9zaGExKTsKKwlhcmd2WzNdID0gc2hhMV90b19oZXgoY21kLT5uZXdfc2hhMSk7CisJYXJndls0XSA9IE5VTEw7CisKKwltZW1zZXQoJnByb2MsIDAsIHNpemVvZihwcm9jKSk7CisJcHJvYy5ub19zdGRpbiA9IDE7CisJcHJvYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlwcm9jLmVyciA9IHVzZV9zaWRlYmFuZCA/IC0xIDogMDsKKwlwcm9jLmFyZ3YgPSBhcmd2OworCisJY29kZSA9IHN0YXJ0X2NvbW1hbmQoJnByb2MpOworCWlmIChjb2RlKQorCQlyZXR1cm4gY29kZTsKKwlpZiAodXNlX3NpZGViYW5kKQorCQljb3B5X3RvX3NpZGViYW5kKHByb2MuZXJyLCAtMSwgTlVMTCk7CisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKCZwcm9jKTsKK30KKworc3RhdGljIGludCBpc19yZWZfY2hlY2tlZF9vdXQoY29uc3QgY2hhciAqcmVmKQoreworCWlmIChpc19iYXJlX3JlcG9zaXRvcnkoKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWhlYWRfbmFtZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFzdHJjbXAoaGVhZF9uYW1lLCByZWYpOworfQorCitzdGF0aWMgY2hhciAqcmVmdXNlX3VuY29uZmlndXJlZF9kZW55X21zZ1tdID0geworCSJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5IiwKKwkiaXMgZGVuaWVkLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBpbmNvbnNpc3RlbnQiLAorCSJ3aXRoIHdoYXQgeW91IHB1c2hlZCwgYW5kIHdpbGwgcmVxdWlyZSAnZ2l0IHJlc2V0IC0taGFyZCcgdG8gbWF0Y2giLAorCSJ0aGUgd29yayB0cmVlIHRvIEhFQUQuIiwKKwkiIiwKKwkiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8iLAorCSInaWdub3JlJyBvciAnd2FybicgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IHB1c2hpbmcgaW50byIsCisJIml0cyBjdXJyZW50IGJyYW5jaDsgaG93ZXZlciwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdSIsCisJImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lIiwKKwkib3RoZXIgd2F5LiIsCisJIiIsCisJIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0IiwKKwkiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gJ3JlZnVzZScuIgorfTsKKworc3RhdGljIHZvaWQgcmVmdXNlX3VuY29uZmlndXJlZF9kZW55KHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVmdXNlX3VuY29uZmlndXJlZF9kZW55X21zZyk7IGkrKykKKwkJcnBfZXJyb3IoIiVzIiwgcmVmdXNlX3VuY29uZmlndXJlZF9kZW55X21zZ1tpXSk7Cit9CisKK3N0YXRpYyBjaGFyICpyZWZ1c2VfdW5jb25maWd1cmVkX2RlbnlfZGVsZXRlX2N1cnJlbnRfbXNnW10gPSB7CisJIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHQiLAorCSInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLiIsCisJIiIsCisJIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIiwKKwkiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGUiLAorCSJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLiIsCisJIiIsCisJIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCit9OworCitzdGF0aWMgdm9pZCByZWZ1c2VfdW5jb25maWd1cmVkX2RlbnlfZGVsZXRlX2N1cnJlbnQodm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOworCSAgICAgaSA8IEFSUkFZX1NJWkUocmVmdXNlX3VuY29uZmlndXJlZF9kZW55X2RlbGV0ZV9jdXJyZW50X21zZyk7CisJICAgICBpKyspCisJCXJwX2Vycm9yKCIlcyIsIHJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudF9tc2dbaV0pOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdXBkYXRlKHN0cnVjdCBjb21tYW5kICpjbWQpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IGNtZC0+cmVmX25hbWU7CisJc3RydWN0IHN0cmJ1ZiBuYW1lc3BhY2VkX25hbWVfYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqbmFtZXNwYWNlZF9uYW1lOworCXVuc2lnbmVkIGNoYXIgKm9sZF9zaGExID0gY21kLT5vbGRfc2hhMTsKKwl1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSA9IGNtZC0+bmV3X3NoYTE7CisJc3RydWN0IHJlZl9sb2NrICpsb2NrOworCisJLyogb25seSByZWZzLy4uLiBhcmUgYWxsb3dlZCAqLworCWlmIChwcmVmaXhjbXAobmFtZSwgInJlZnMvIikgfHwgY2hlY2tfcmVmbmFtZV9mb3JtYXQobmFtZSArIDUsIDApKSB7CisJCXJwX2Vycm9yKCJyZWZ1c2luZyB0byBjcmVhdGUgZnVubnkgcmVmICclcycgcmVtb3RlbHkiLCBuYW1lKTsKKwkJcmV0dXJuICJmdW5ueSByZWZuYW1lIjsKKwl9CisKKwlzdHJidWZfYWRkZigmbmFtZXNwYWNlZF9uYW1lX2J1ZiwgIiVzJXMiLCBnZXRfZ2l0X25hbWVzcGFjZSgpLCBuYW1lKTsKKwluYW1lc3BhY2VkX25hbWUgPSBzdHJidWZfZGV0YWNoKCZuYW1lc3BhY2VkX25hbWVfYnVmLCBOVUxMKTsKKworCWlmIChpc19yZWZfY2hlY2tlZF9vdXQobmFtZXNwYWNlZF9uYW1lKSkgeworCQlzd2l0Y2ggKGRlbnlfY3VycmVudF9icmFuY2gpIHsKKwkJY2FzZSBERU5ZX0lHTk9SRToKKwkJCWJyZWFrOworCQljYXNlIERFTllfV0FSTjoKKwkJCXJwX3dhcm5pbmcoInVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIpOworCQkJYnJlYWs7CisJCWNhc2UgREVOWV9SRUZVU0U6CisJCWNhc2UgREVOWV9VTkNPTkZJR1VSRUQ6CisJCQlycF9lcnJvcigicmVmdXNpbmcgdG8gdXBkYXRlIGNoZWNrZWQgb3V0IGJyYW5jaDogJXMiLCBuYW1lKTsKKwkJCWlmIChkZW55X2N1cnJlbnRfYnJhbmNoID09IERFTllfVU5DT05GSUdVUkVEKQorCQkJCXJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueSgpOworCQkJcmV0dXJuICJicmFuY2ggaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0IjsKKwkJfQorCX0KKworCWlmICghaXNfbnVsbF9zaGExKG5ld19zaGExKSAmJiAhaGFzX3NoYTFfZmlsZShuZXdfc2hhMSkpIHsKKwkJZXJyb3IoInVucGFjayBzaG91bGQgaGF2ZSBnZW5lcmF0ZWQgJXMsICIKKwkJICAgICAgImJ1dCBJIGNhbid0IGZpbmQgaXQhIiwgc2hhMV90b19oZXgobmV3X3NoYTEpKTsKKwkJcmV0dXJuICJiYWQgcGFjayI7CisJfQorCisJaWYgKCFpc19udWxsX3NoYTEob2xkX3NoYTEpICYmIGlzX251bGxfc2hhMShuZXdfc2hhMSkpIHsKKwkJaWYgKGRlbnlfZGVsZXRlcyAmJiAhcHJlZml4Y21wKG5hbWUsICJyZWZzL2hlYWRzLyIpKSB7CisJCQlycF9lcnJvcigiZGVueWluZyByZWYgZGVsZXRpb24gZm9yICVzIiwgbmFtZSk7CisJCQlyZXR1cm4gImRlbGV0aW9uIHByb2hpYml0ZWQiOworCQl9CisKKwkJaWYgKCFzdHJjbXAobmFtZXNwYWNlZF9uYW1lLCBoZWFkX25hbWUpKSB7CisJCQlzd2l0Y2ggKGRlbnlfZGVsZXRlX2N1cnJlbnQpIHsKKwkJCWNhc2UgREVOWV9JR05PUkU6CisJCQkJYnJlYWs7CisJCQljYXNlIERFTllfV0FSTjoKKwkJCQlycF93YXJuaW5nKCJkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2giKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVOWV9SRUZVU0U6CisJCQljYXNlIERFTllfVU5DT05GSUdVUkVEOgorCQkJCWlmIChkZW55X2RlbGV0ZV9jdXJyZW50ID09IERFTllfVU5DT05GSUdVUkVEKQorCQkJCQlyZWZ1c2VfdW5jb25maWd1cmVkX2RlbnlfZGVsZXRlX2N1cnJlbnQoKTsKKwkJCQlycF9lcnJvcigicmVmdXNpbmcgdG8gZGVsZXRlIHRoZSBjdXJyZW50IGJyYW5jaDogJXMiLCBuYW1lKTsKKwkJCQlyZXR1cm4gImRlbGV0aW9uIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBwcm9oaWJpdGVkIjsKKwkJCX0KKwkJfQorCX0KKworCWlmIChkZW55X25vbl9mYXN0X2ZvcndhcmRzICYmICFpc19udWxsX3NoYTEobmV3X3NoYTEpICYmCisJICAgICFpc19udWxsX3NoYTEob2xkX3NoYTEpICYmCisJICAgICFwcmVmaXhjbXAobmFtZSwgInJlZnMvaGVhZHMvIikpIHsKKwkJc3RydWN0IG9iamVjdCAqb2xkX29iamVjdCwgKm5ld19vYmplY3Q7CisJCXN0cnVjdCBjb21taXQgKm9sZF9jb21taXQsICpuZXdfY29tbWl0OworCisJCW9sZF9vYmplY3QgPSBwYXJzZV9vYmplY3Qob2xkX3NoYTEpOworCQluZXdfb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KG5ld19zaGExKTsKKworCQlpZiAoIW9sZF9vYmplY3QgfHwgIW5ld19vYmplY3QgfHwKKwkJICAgIG9sZF9vYmplY3QtPnR5cGUgIT0gT0JKX0NPTU1JVCB8fAorCQkgICAgbmV3X29iamVjdC0+dHlwZSAhPSBPQkpfQ09NTUlUKSB7CisJCQllcnJvcigiYmFkIHNoYTEgb2JqZWN0cyBmb3IgJXMiLCBuYW1lKTsKKwkJCXJldHVybiAiYmFkIHJlZiI7CisJCX0KKwkJb2xkX2NvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopb2xkX29iamVjdDsKKwkJbmV3X2NvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopbmV3X29iamVjdDsKKwkJaWYgKCFpbl9tZXJnZV9iYXNlcyhvbGRfY29tbWl0LCBuZXdfY29tbWl0KSkgeworCQkJcnBfZXJyb3IoImRlbnlpbmcgbm9uLWZhc3QtZm9yd2FyZCAlcyIKKwkJCQkgIiAoeW91IHNob3VsZCBwdWxsIGZpcnN0KSIsIG5hbWUpOworCQkJcmV0dXJuICJub24tZmFzdC1mb3J3YXJkIjsKKwkJfQorCX0KKwlpZiAocnVuX3VwZGF0ZV9ob29rKGNtZCkpIHsKKwkJcnBfZXJyb3IoImhvb2sgZGVjbGluZWQgdG8gdXBkYXRlICVzIiwgbmFtZSk7CisJCXJldHVybiAiaG9vayBkZWNsaW5lZCI7CisJfQorCisJaWYgKGlzX251bGxfc2hhMShuZXdfc2hhMSkpIHsKKwkJaWYgKCFwYXJzZV9vYmplY3Qob2xkX3NoYTEpKSB7CisJCQlvbGRfc2hhMSA9IE5VTEw7CisJCQlpZiAocmVmX2V4aXN0cyhuYW1lKSkgeworCQkJCXJwX3dhcm5pbmcoIkFsbG93aW5nIGRlbGV0aW9uIG9mIGNvcnJ1cHQgcmVmLiIpOworCQkJfSBlbHNlIHsKKwkJCQlycF93YXJuaW5nKCJEZWxldGluZyBhIG5vbi1leGlzdGVudCByZWYuIik7CisJCQkJY21kLT5kaWRfbm90X2V4aXN0ID0gMTsKKwkJCX0KKwkJfQorCQlpZiAoZGVsZXRlX3JlZihuYW1lc3BhY2VkX25hbWUsIG9sZF9zaGExLCAwKSkgeworCQkJcnBfZXJyb3IoImZhaWxlZCB0byBkZWxldGUgJXMiLCBuYW1lKTsKKwkJCXJldHVybiAiZmFpbGVkIHRvIGRlbGV0ZSI7CisJCX0KKwkJcmV0dXJuIE5VTEw7IC8qIGdvb2QgKi8KKwl9CisJZWxzZSB7CisJCWxvY2sgPSBsb2NrX2FueV9yZWZfZm9yX3VwZGF0ZShuYW1lc3BhY2VkX25hbWUsIG9sZF9zaGExLCAwKTsKKwkJaWYgKCFsb2NrKSB7CisJCQlycF9lcnJvcigiZmFpbGVkIHRvIGxvY2sgJXMiLCBuYW1lKTsKKwkJCXJldHVybiAiZmFpbGVkIHRvIGxvY2siOworCQl9CisJCWlmICh3cml0ZV9yZWZfc2hhMShsb2NrLCBuZXdfc2hhMSwgInB1c2giKSkgeworCQkJcmV0dXJuICJmYWlsZWQgdG8gd3JpdGUiOyAvKiBlcnJvcigpIGFscmVhZHkgY2FsbGVkICovCisJCX0KKwkJcmV0dXJuIE5VTEw7IC8qIGdvb2QgKi8KKwl9Cit9CisKK3N0YXRpYyBjaGFyIHVwZGF0ZV9wb3N0X2hvb2tbXSA9ICJob29rcy9wb3N0LXVwZGF0ZSI7CisKK3N0YXRpYyB2b2lkIHJ1bl91cGRhdGVfcG9zdF9ob29rKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcykKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCWludCBhcmdjOworCWNvbnN0IGNoYXIgKiphcmd2OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2M7CisKKwlmb3IgKGFyZ2MgPSAwLCBjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKGNtZC0+ZXJyb3Jfc3RyaW5nIHx8IGNtZC0+ZGlkX25vdF9leGlzdCkKKwkJCWNvbnRpbnVlOworCQlhcmdjKys7CisJfQorCWlmICghYXJnYyB8fCBhY2Nlc3ModXBkYXRlX3Bvc3RfaG9vaywgWF9PSykgPCAwKQorCQlyZXR1cm47CisJYXJndiA9IHhtYWxsb2Moc2l6ZW9mKCphcmd2KSAqICgyICsgYXJnYykpOworCWFyZ3ZbMF0gPSB1cGRhdGVfcG9zdF9ob29rOworCisJZm9yIChhcmdjID0gMSwgY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWNoYXIgKnA7CisJCWlmIChjbWQtPmVycm9yX3N0cmluZyB8fCBjbWQtPmRpZF9ub3RfZXhpc3QpCisJCQljb250aW51ZTsKKwkJcCA9IHhtYWxsb2Moc3RybGVuKGNtZC0+cmVmX25hbWUpICsgMSk7CisJCXN0cmNweShwLCBjbWQtPnJlZl9uYW1lKTsKKwkJYXJndlthcmdjXSA9IHA7CisJCWFyZ2MrKzsKKwl9CisJYXJndlthcmdjXSA9IE5VTEw7CisKKwltZW1zZXQoJnByb2MsIDAsIHNpemVvZihwcm9jKSk7CisJcHJvYy5ub19zdGRpbiA9IDE7CisJcHJvYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlwcm9jLmVyciA9IHVzZV9zaWRlYmFuZCA/IC0xIDogMDsKKwlwcm9jLmFyZ3YgPSBhcmd2OworCisJaWYgKCFzdGFydF9jb21tYW5kKCZwcm9jKSkgeworCQlpZiAodXNlX3NpZGViYW5kKQorCQkJY29weV90b19zaWRlYmFuZChwcm9jLmVyciwgLTEsIE5VTEwpOworCQlmaW5pc2hfY29tbWFuZCgmcHJvYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19hbGlhc2VkX3VwZGF0ZShzdHJ1Y3QgY29tbWFuZCAqY21kLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpkc3RfbmFtZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgY29tbWFuZCAqZHN0X2NtZDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgY21kX29sZGhbNDFdLCBjbWRfbmV3aFs0MV0sIGRzdF9vbGRoWzQxXSwgZHN0X25ld2hbNDFdOworCWludCBmbGFnOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzJXMiLCBnZXRfZ2l0X25hbWVzcGFjZSgpLCBjbWQtPnJlZl9uYW1lKTsKKwlkc3RfbmFtZSA9IHJlc29sdmVfcmVmX3Vuc2FmZShidWYuYnVmLCBzaGExLCAwLCAmZmxhZyk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAoIShmbGFnICYgUkVGX0lTU1lNUkVGKSkKKwkJcmV0dXJuOworCisJZHN0X25hbWUgPSBzdHJpcF9uYW1lc3BhY2UoZHN0X25hbWUpOworCWlmICghZHN0X25hbWUpIHsKKwkJcnBfZXJyb3IoInJlZnVzaW5nIHVwZGF0ZSB0byBicm9rZW4gc3ltcmVmICclcyciLCBjbWQtPnJlZl9uYW1lKTsKKwkJY21kLT5za2lwX3VwZGF0ZSA9IDE7CisJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gImJyb2tlbiBzeW1yZWYiOworCQlyZXR1cm47CisJfQorCisJaWYgKChpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKGxpc3QsIGRzdF9uYW1lKSkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY21kLT5za2lwX3VwZGF0ZSA9IDE7CisKKwlkc3RfY21kID0gKHN0cnVjdCBjb21tYW5kICopIGl0ZW0tPnV0aWw7CisKKwlpZiAoIWhhc2hjbXAoY21kLT5vbGRfc2hhMSwgZHN0X2NtZC0+b2xkX3NoYTEpICYmCisJICAgICFoYXNoY21wKGNtZC0+bmV3X3NoYTEsIGRzdF9jbWQtPm5ld19zaGExKSkKKwkJcmV0dXJuOworCisJZHN0X2NtZC0+c2tpcF91cGRhdGUgPSAxOworCisJc3RyY3B5KGNtZF9vbGRoLCBmaW5kX3VuaXF1ZV9hYmJyZXYoY21kLT5vbGRfc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKKwlzdHJjcHkoY21kX25ld2gsIGZpbmRfdW5pcXVlX2FiYnJldihjbWQtPm5ld19zaGExLCBERUZBVUxUX0FCQlJFVikpOworCXN0cmNweShkc3Rfb2xkaCwgZmluZF91bmlxdWVfYWJicmV2KGRzdF9jbWQtPm9sZF9zaGExLCBERUZBVUxUX0FCQlJFVikpOworCXN0cmNweShkc3RfbmV3aCwgZmluZF91bmlxdWVfYWJicmV2KGRzdF9jbWQtPm5ld19zaGExLCBERUZBVUxUX0FCQlJFVikpOworCXJwX2Vycm9yKCJyZWZ1c2luZyBpbmNvbnNpc3RlbnQgdXBkYXRlIGJldHdlZW4gc3ltcmVmICclcycgKCVzLi4lcykgYW5kIgorCQkgIiBpdHMgdGFyZ2V0ICclcycgKCVzLi4lcykiLAorCQkgY21kLT5yZWZfbmFtZSwgY21kX29sZGgsIGNtZF9uZXdoLAorCQkgZHN0X2NtZC0+cmVmX25hbWUsIGRzdF9vbGRoLCBkc3RfbmV3aCk7CisKKwljbWQtPmVycm9yX3N0cmluZyA9IGRzdF9jbWQtPmVycm9yX3N0cmluZyA9CisJCSJpbmNvbnNpc3RlbnQgYWxpYXNlZCB1cGRhdGUiOworfQorCitzdGF0aWMgdm9pZCBjaGVja19hbGlhc2VkX3VwZGF0ZXMoc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzKQoreworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZl9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0KKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVmX2xpc3QsIGNtZC0+cmVmX25hbWUpOworCQlpdGVtLT51dGlsID0gKHZvaWQgKiljbWQ7CisJfQorCXNvcnRfc3RyaW5nX2xpc3QoJnJlZl9saXN0KTsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWlmICghY21kLT5lcnJvcl9zdHJpbmcpCisJCQljaGVja19hbGlhc2VkX3VwZGF0ZShjbWQsICZyZWZfbGlzdCk7CisJfQorCisJc3RyaW5nX2xpc3RfY2xlYXIoJnJlZl9saXN0LCAwKTsKK30KKworc3RhdGljIGludCBjb21tYW5kX3NpbmdsZXRvbl9pdGVyYXRvcih2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdKQoreworCXN0cnVjdCBjb21tYW5kICoqY21kX2xpc3QgPSBjYl9kYXRhOworCXN0cnVjdCBjb21tYW5kICpjbWQgPSAqY21kX2xpc3Q7CisKKwlpZiAoIWNtZCB8fCBpc19udWxsX3NoYTEoY21kLT5uZXdfc2hhMSkpCisJCXJldHVybiAtMTsgLyogZW5kIG9mIGxpc3QgKi8KKwkqY21kX2xpc3QgPSBOVUxMOyAvKiB0aGlzIHJldHVybnMgb25seSBvbmUgKi8KKwloYXNoY3B5KHNoYTEsIGNtZC0+bmV3X3NoYTEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfY29ubmVjdGl2aXR5X2Vycm9ycyhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCXN0cnVjdCBjb21tYW5kICpzaW5nbGV0b24gPSBjbWQ7CisJCWlmICghY2hlY2tfZXZlcnl0aGluZ19jb25uZWN0ZWQoY29tbWFuZF9zaW5nbGV0b25faXRlcmF0b3IsCisJCQkJCQkwLCAmc2luZ2xldG9uKSkKKwkJCWNvbnRpbnVlOworCQljbWQtPmVycm9yX3N0cmluZyA9ICJtaXNzaW5nIG5lY2Vzc2FyeSBvYmplY3RzIjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXRlcmF0ZV9yZWNlaXZlX2NvbW1hbmRfbGlzdCh2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdKQoreworCXN0cnVjdCBjb21tYW5kICoqY21kX2xpc3QgPSBjYl9kYXRhOworCXN0cnVjdCBjb21tYW5kICpjbWQgPSAqY21kX2xpc3Q7CisKKwl3aGlsZSAoY21kKSB7CisJCWlmICghaXNfbnVsbF9zaGExKGNtZC0+bmV3X3NoYTEpKSB7CisJCQloYXNoY3B5KHNoYTEsIGNtZC0+bmV3X3NoYTEpOworCQkJKmNtZF9saXN0ID0gY21kLT5uZXh0OworCQkJcmV0dXJuIDA7CisJCX0KKwkJY21kID0gY21kLT5uZXh0OworCX0KKwkqY21kX2xpc3QgPSBOVUxMOworCXJldHVybiAtMTsgLyogZW5kIG9mIGxpc3QgKi8KK30KKworc3RhdGljIHZvaWQgZXhlY3V0ZV9jb21tYW5kcyhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsIGNvbnN0IGNoYXIgKnVucGFja2VyX2Vycm9yKQoreworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWlmICh1bnBhY2tlcl9lcnJvcikgeworCQlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkKKwkJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gInVucGFja2VyIGVycm9yIjsKKwkJcmV0dXJuOworCX0KKworCWNtZCA9IGNvbW1hbmRzOworCWlmIChjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZChpdGVyYXRlX3JlY2VpdmVfY29tbWFuZF9saXN0LAorCQkJCSAgICAgICAwLCAmY21kKSkKKwkJc2V0X2Nvbm5lY3Rpdml0eV9lcnJvcnMoY29tbWFuZHMpOworCisJaWYgKHJ1bl9yZWNlaXZlX2hvb2soY29tbWFuZHMsIHByZV9yZWNlaXZlX2hvb2ssIDApKSB7CisJCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCQlpZiAoIWNtZC0+ZXJyb3Jfc3RyaW5nKQorCQkJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gInByZS1yZWNlaXZlIGhvb2sgZGVjbGluZWQiOworCQl9CisJCXJldHVybjsKKwl9CisKKwljaGVja19hbGlhc2VkX3VwZGF0ZXMoY29tbWFuZHMpOworCisJZnJlZShoZWFkX25hbWVfdG9fZnJlZSk7CisJaGVhZF9uYW1lID0gaGVhZF9uYW1lX3RvX2ZyZWUgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIHNoYTEsIDAsIE5VTEwpOworCisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKGNtZC0+ZXJyb3Jfc3RyaW5nKQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+c2tpcF91cGRhdGUpCisJCQljb250aW51ZTsKKworCQljbWQtPmVycm9yX3N0cmluZyA9IHVwZGF0ZShjbWQpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjb21tYW5kICpyZWFkX2hlYWRfaW5mbyh2b2lkKQoreworCXN0cnVjdCBjb21tYW5kICpjb21tYW5kcyA9IE5VTEw7CisJc3RydWN0IGNvbW1hbmQgKipwID0gJmNvbW1hbmRzOworCWZvciAoOzspIHsKKwkJc3RhdGljIGNoYXIgbGluZVsxMDAwXTsKKwkJdW5zaWduZWQgY2hhciBvbGRfc2hhMVsyMF0sIG5ld19zaGExWzIwXTsKKwkJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwkJY2hhciAqcmVmbmFtZTsKKwkJaW50IGxlbiwgcmVmbGVuOworCisJCWxlbiA9IHBhY2tldF9yZWFkX2xpbmUoMCwgbGluZSwgc2l6ZW9mKGxpbmUpKTsKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKwkJaWYgKGxpbmVbbGVuLTFdID09ICdcbicpCisJCQlsaW5lWy0tbGVuXSA9IDA7CisJCWlmIChsZW4gPCA4MyB8fAorCQkgICAgbGluZVs0MF0gIT0gJyAnIHx8CisJCSAgICBsaW5lWzgxXSAhPSAnICcgfHwKKwkJICAgIGdldF9zaGExX2hleChsaW5lLCBvbGRfc2hhMSkgfHwKKwkJICAgIGdldF9zaGExX2hleChsaW5lICsgNDEsIG5ld19zaGExKSkKKwkJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIG9sZC9uZXcvcmVmLCBnb3QgJyVzJyIsCisJCQkgICAgbGluZSk7CisKKwkJcmVmbmFtZSA9IGxpbmUgKyA4MjsKKwkJcmVmbGVuID0gc3RybGVuKHJlZm5hbWUpOworCQlpZiAocmVmbGVuICsgODIgPCBsZW4pIHsKKwkJCWNvbnN0IGNoYXIgKmZlYXR1cmVfbGlzdCA9IHJlZm5hbWUgKyByZWZsZW4gKyAxOworCQkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlX2xpc3QsICJyZXBvcnQtc3RhdHVzIikpCisJCQkJcmVwb3J0X3N0YXR1cyA9IDE7CisJCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVfbGlzdCwgInNpZGUtYmFuZC02NGsiKSkKKwkJCQl1c2Vfc2lkZWJhbmQgPSBMQVJHRV9QQUNLRVRfTUFYOworCQkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlX2xpc3QsICJxdWlldCIpKQorCQkJCXF1aWV0ID0gMTsKKwkJfQorCQljbWQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY29tbWFuZCkgKyBsZW4gLSA4MCk7CisJCWhhc2hjcHkoY21kLT5vbGRfc2hhMSwgb2xkX3NoYTEpOworCQloYXNoY3B5KGNtZC0+bmV3X3NoYTEsIG5ld19zaGExKTsKKwkJbWVtY3B5KGNtZC0+cmVmX25hbWUsIGxpbmUgKyA4MiwgbGVuIC0gODEpOworCQkqcCA9IGNtZDsKKwkJcCA9ICZjbWQtPm5leHQ7CisJfQorCXJldHVybiBjb21tYW5kczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX3BhY2tfaGVhZGVyKHN0cnVjdCBwYWNrX2hlYWRlciAqaGRyKQoreworCXN3aXRjaCAocmVhZF9wYWNrX2hlYWRlcigwLCBoZHIpKSB7CisJY2FzZSBQSF9FUlJPUl9FT0Y6CisJCXJldHVybiAiZW9mIGJlZm9yZSBwYWNrIGhlYWRlciB3YXMgZnVsbHkgcmVhZCI7CisKKwljYXNlIFBIX0VSUk9SX1BBQ0tfU0lHTkFUVVJFOgorCQlyZXR1cm4gInByb3RvY29sIGVycm9yIChwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCBkZXRlY3RlZCkiOworCisJY2FzZSBQSF9FUlJPUl9QUk9UT0NPTDoKKwkJcmV0dXJuICJwcm90b2NvbCBlcnJvciAocGFjayB2ZXJzaW9uIHVuc3VwcG9ydGVkKSI7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gInVua25vd24gZXJyb3IgaW4gcGFyc2VfcGFja19oZWFkZXIiOworCisJY2FzZSAwOgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWNrX2xvY2tmaWxlOworCitzdGF0aWMgY29uc3QgY2hhciAqdW5wYWNrKGludCBlcnJfZmQpCit7CisJc3RydWN0IHBhY2tfaGVhZGVyIGhkcjsKKwljb25zdCBjaGFyICpoZHJfZXJyOworCWNoYXIgaGRyX2FyZ1szOF07CisJaW50IGZzY2tfb2JqZWN0cyA9IChyZWNlaXZlX2ZzY2tfb2JqZWN0cyA+PSAwCisJCQkgICAgPyByZWNlaXZlX2ZzY2tfb2JqZWN0cworCQkJICAgIDogdHJhbnNmZXJfZnNja19vYmplY3RzID49IDAKKwkJCSAgICA/IHRyYW5zZmVyX2ZzY2tfb2JqZWN0cworCQkJICAgIDogMCk7CisKKwloZHJfZXJyID0gcGFyc2VfcGFja19oZWFkZXIoJmhkcik7CisJaWYgKGhkcl9lcnIpCisJCXJldHVybiBoZHJfZXJyOworCXNucHJpbnRmKGhkcl9hcmcsIHNpemVvZihoZHJfYXJnKSwKKwkJCSItLXBhY2tfaGVhZGVyPSUiUFJJdTMyIiwlIlBSSXUzMiwKKwkJCW50b2hsKGhkci5oZHJfdmVyc2lvbiksIG50b2hsKGhkci5oZHJfZW50cmllcykpOworCisJaWYgKG50b2hsKGhkci5oZHJfZW50cmllcykgPCB1bnBhY2tfbGltaXQpIHsKKwkJaW50IGNvZGUsIGkgPSAwOworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZDsKKwkJY29uc3QgY2hhciAqdW5wYWNrZXJbNV07CisJCXVucGFja2VyW2krK10gPSAidW5wYWNrLW9iamVjdHMiOworCQlpZiAocXVpZXQpCisJCQl1bnBhY2tlcltpKytdID0gIi1xIjsKKwkJaWYgKGZzY2tfb2JqZWN0cykKKwkJCXVucGFja2VyW2krK10gPSAiLS1zdHJpY3QiOworCQl1bnBhY2tlcltpKytdID0gaGRyX2FyZzsKKwkJdW5wYWNrZXJbaSsrXSA9IE5VTEw7CisJCW1lbXNldCgmY2hpbGQsIDAsIHNpemVvZihjaGlsZCkpOworCQljaGlsZC5hcmd2ID0gdW5wYWNrZXI7CisJCWNoaWxkLm5vX3N0ZG91dCA9IDE7CisJCWNoaWxkLmVyciA9IGVycl9mZDsKKwkJY2hpbGQuZ2l0X2NtZCA9IDE7CisJCWNvZGUgPSBydW5fY29tbWFuZCgmY2hpbGQpOworCQlpZiAoIWNvZGUpCisJCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuICJ1bnBhY2stb2JqZWN0cyBhYm5vcm1hbCBleGl0IjsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICprZWVwZXJbN107CisJCWludCBzLCBzdGF0dXMsIGkgPSAwOworCQljaGFyIGtlZXBfYXJnWzI1Nl07CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGlwOworCisJCXMgPSBzcHJpbnRmKGtlZXBfYXJnLCAiLS1rZWVwPXJlY2VpdmUtcGFjayAlIlBSSXVNQVgiIG9uICIsICh1aW50bWF4X3QpIGdldHBpZCgpKTsKKwkJaWYgKGdldGhvc3RuYW1lKGtlZXBfYXJnICsgcywgc2l6ZW9mKGtlZXBfYXJnKSAtIHMpKQorCQkJc3RyY3B5KGtlZXBfYXJnICsgcywgImxvY2FsaG9zdCIpOworCisJCWtlZXBlcltpKytdID0gImluZGV4LXBhY2siOworCQlrZWVwZXJbaSsrXSA9ICItLXN0ZGluIjsKKwkJaWYgKGZzY2tfb2JqZWN0cykKKwkJCWtlZXBlcltpKytdID0gIi0tc3RyaWN0IjsKKwkJa2VlcGVyW2krK10gPSAiLS1maXgtdGhpbiI7CisJCWtlZXBlcltpKytdID0gaGRyX2FyZzsKKwkJa2VlcGVyW2krK10gPSBrZWVwX2FyZzsKKwkJa2VlcGVyW2krK10gPSBOVUxMOworCQltZW1zZXQoJmlwLCAwLCBzaXplb2YoaXApKTsKKwkJaXAuYXJndiA9IGtlZXBlcjsKKwkJaXAub3V0ID0gLTE7CisJCWlwLmVyciA9IGVycl9mZDsKKwkJaXAuZ2l0X2NtZCA9IDE7CisJCXN0YXR1cyA9IHN0YXJ0X2NvbW1hbmQoJmlwKTsKKwkJaWYgKHN0YXR1cykgeworCQkJcmV0dXJuICJpbmRleC1wYWNrIGZvcmsgZmFpbGVkIjsKKwkJfQorCQlwYWNrX2xvY2tmaWxlID0gaW5kZXhfcGFja19sb2NrZmlsZShpcC5vdXQpOworCQljbG9zZShpcC5vdXQpOworCQlzdGF0dXMgPSBmaW5pc2hfY29tbWFuZCgmaXApOworCQlpZiAoIXN0YXR1cykgeworCQkJcmVwcmVwYXJlX3BhY2tlZF9naXQoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXJldHVybiAiaW5kZXgtcGFjayBhYm5vcm1hbCBleGl0IjsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp1bnBhY2tfd2l0aF9zaWRlYmFuZCh2b2lkKQoreworCXN0cnVjdCBhc3luYyBtdXhlcjsKKwljb25zdCBjaGFyICpyZXQ7CisKKwlpZiAoIXVzZV9zaWRlYmFuZCkKKwkJcmV0dXJuIHVucGFjaygwKTsKKworCW1lbXNldCgmbXV4ZXIsIDAsIHNpemVvZihtdXhlcikpOworCW11eGVyLnByb2MgPSBjb3B5X3RvX3NpZGViYW5kOworCW11eGVyLmluID0gLTE7CisJaWYgKHN0YXJ0X2FzeW5jKCZtdXhlcikpCisJCXJldHVybiBOVUxMOworCisJcmV0ID0gdW5wYWNrKG11eGVyLmluKTsKKworCWZpbmlzaF9hc3luYygmbXV4ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydChzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsIGNvbnN0IGNoYXIgKnVucGFja19zdGF0dXMpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJcGFja2V0X2J1Zl93cml0ZSgmYnVmLCAidW5wYWNrICVzXG4iLAorCQkJIHVucGFja19zdGF0dXMgPyB1bnBhY2tfc3RhdHVzIDogIm9rIik7CisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKCFjbWQtPmVycm9yX3N0cmluZykKKwkJCXBhY2tldF9idWZfd3JpdGUoJmJ1ZiwgIm9rICVzXG4iLAorCQkJCQkgY21kLT5yZWZfbmFtZSk7CisJCWVsc2UKKwkJCXBhY2tldF9idWZfd3JpdGUoJmJ1ZiwgIm5nICVzICVzXG4iLAorCQkJCQkgY21kLT5yZWZfbmFtZSwgY21kLT5lcnJvcl9zdHJpbmcpOworCX0KKwlwYWNrZXRfYnVmX2ZsdXNoKCZidWYpOworCisJaWYgKHVzZV9zaWRlYmFuZCkKKwkJc2VuZF9zaWRlYmFuZCgxLCAxLCBidWYuYnVmLCBidWYubGVuLCB1c2Vfc2lkZWJhbmQpOworCWVsc2UKKwkJc2FmZV93cml0ZSgxLCBidWYuYnVmLCBidWYubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGludCBkZWxldGVfb25seShzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoIWlzX251bGxfc2hhMShjbWQtPm5ld19zaGExKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworaW50IGNtZF9yZWNlaXZlX3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGFkdmVydGlzZV9yZWZzID0gMDsKKwlpbnQgc3RhdGVsZXNzX3JwYyA9IDA7CisJaW50IGk7CisJY2hhciAqZGlyID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHM7CisKKwlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoInJlY2VpdmUtcGFjayIpOworCisJYXJndisrOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gKmFyZ3YrKzsKKworCQlpZiAoKmFyZyA9PSAnLScpIHsKKwkJCWlmICghc3RyY21wKGFyZywgIi0tcXVpZXQiKSkgeworCQkJCXF1aWV0ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1hZHZlcnRpc2UtcmVmcyIpKSB7CisJCQkJYWR2ZXJ0aXNlX3JlZnMgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGF0ZWxlc3MtcnBjIikpIHsKKwkJCQlzdGF0ZWxlc3NfcnBjID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJdXNhZ2UocmVjZWl2ZV9wYWNrX3VzYWdlKTsKKwkJfQorCQlpZiAoZGlyKQorCQkJdXNhZ2UocmVjZWl2ZV9wYWNrX3VzYWdlKTsKKwkJZGlyID0geHN0cmR1cChhcmcpOworCX0KKwlpZiAoIWRpcikKKwkJdXNhZ2UocmVjZWl2ZV9wYWNrX3VzYWdlKTsKKworCXNldHVwX3BhdGgoKTsKKworCWlmICghZW50ZXJfcmVwbyhkaXIsIDApKQorCQlkaWUoIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnkiLCBkaXIpOworCisJaWYgKGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpKQorCQlkaWUoImF0dGVtcHQgdG8gcHVzaCBpbnRvIGEgc2hhbGxvdyByZXBvc2l0b3J5Iik7CisKKwlnaXRfY29uZmlnKHJlY2VpdmVfcGFja19jb25maWcsIE5VTEwpOworCisJaWYgKDAgPD0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0KQorCQl1bnBhY2tfbGltaXQgPSB0cmFuc2Zlcl91bnBhY2tfbGltaXQ7CisJZWxzZSBpZiAoMCA8PSByZWNlaXZlX3VucGFja19saW1pdCkKKwkJdW5wYWNrX2xpbWl0ID0gcmVjZWl2ZV91bnBhY2tfbGltaXQ7CisKKwlpZiAoYWR2ZXJ0aXNlX3JlZnMgfHwgIXN0YXRlbGVzc19ycGMpIHsKKwkJd3JpdGVfaGVhZF9pbmZvKCk7CisJfQorCWlmIChhZHZlcnRpc2VfcmVmcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGNvbW1hbmRzID0gcmVhZF9oZWFkX2luZm8oKSkgIT0gTlVMTCkgeworCQljb25zdCBjaGFyICp1bnBhY2tfc3RhdHVzID0gTlVMTDsKKworCQlpZiAoIWRlbGV0ZV9vbmx5KGNvbW1hbmRzKSkKKwkJCXVucGFja19zdGF0dXMgPSB1bnBhY2tfd2l0aF9zaWRlYmFuZCgpOworCQlleGVjdXRlX2NvbW1hbmRzKGNvbW1hbmRzLCB1bnBhY2tfc3RhdHVzKTsKKwkJaWYgKHBhY2tfbG9ja2ZpbGUpCisJCQl1bmxpbmtfb3Jfd2FybihwYWNrX2xvY2tmaWxlKTsKKwkJaWYgKHJlcG9ydF9zdGF0dXMpCisJCQlyZXBvcnQoY29tbWFuZHMsIHVucGFja19zdGF0dXMpOworCQlydW5fcmVjZWl2ZV9ob29rKGNvbW1hbmRzLCBwb3N0X3JlY2VpdmVfaG9vaywgMSk7CisJCXJ1bl91cGRhdGVfcG9zdF9ob29rKGNvbW1hbmRzKTsKKwkJaWYgKGF1dG9fZ2MpIHsKKwkJCWNvbnN0IGNoYXIgKmFyZ3ZfZ2NfYXV0b1tdID0geworCQkJCSJnYyIsICItLWF1dG8iLCAiLS1xdWlldCIsIE5VTEwsCisJCQl9OworCQkJaW50IG9wdCA9IFJVTl9HSVRfQ01EIHwgUlVOX0NPTU1BTkRfU1RET1VUX1RPX1NUREVSUjsKKwkJCXJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3ZfZ2NfYXV0bywgb3B0KTsKKwkJfQorCQlpZiAoYXV0b191cGRhdGVfc2VydmVyX2luZm8pCisJCQl1cGRhdGVfc2VydmVyX2luZm8oMCk7CisJfQorCWlmICh1c2Vfc2lkZWJhbmQpCisJCXBhY2tldF9mbHVzaCgxKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVmbG9nLmMgYi9idWlsdGluL3JlZmxvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzllMjcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlZmxvZy5jCkBAIC0wLDAgKzEsNzgzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJlYWNoYWJsZS5oIgorCisvKgorICogcmVmbG9nIGV4cGlyZQorICovCisKK3N0YXRpYyBjb25zdCBjaGFyIHJlZmxvZ19leHBpcmVfdXNhZ2VbXSA9CisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tdmVyYm9zZV0gWy0tZHJ5LXJ1bl0gWy0tc3RhbGUtZml4XSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS1hbGxdIDxyZWZzPi4uLiI7CitzdGF0aWMgY29uc3QgY2hhciByZWZsb2dfZGVsZXRlX3VzYWdlW10gPQorImdpdCByZWZsb2cgZGVsZXRlIFstLXZlcmJvc2VdIFstLWRyeS1ydW5dIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gPHJlZnM+Li4uIjsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmYXVsdF9yZWZsb2dfZXhwaXJlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmYXVsdF9yZWZsb2dfZXhwaXJlX3VucmVhY2hhYmxlOworCitzdHJ1Y3QgY21kX3JlZmxvZ19leHBpcmVfY2IgeworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCWludCBkcnlfcnVuOworCWludCBzdGFsZWZpeDsKKwlpbnQgcmV3cml0ZTsKKwlpbnQgdXBkYXRlcmVmOworCWludCB2ZXJib3NlOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlX3RvdGFsOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlX3VucmVhY2hhYmxlOworCWludCByZWNubzsKK307CisKK3N0cnVjdCBleHBpcmVfcmVmbG9nX2NiIHsKKwlGSUxFICpuZXdsb2c7CisJZW51bSB7CisJCVVFX05PUk1BTCwKKwkJVUVfQUxXQVlTLAorCQlVRV9IRUFECisJfSB1bnJlYWNoYWJsZV9leHBpcmVfa2luZDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm1hcmtfbGlzdDsKKwl1bnNpZ25lZCBsb25nIG1hcmtfbGltaXQ7CisJc3RydWN0IGNtZF9yZWZsb2dfZXhwaXJlX2NiICpjbWQ7CisJdW5zaWduZWQgY2hhciBsYXN0X2tlcHRfc2hhMVsyMF07Cit9OworCitzdHJ1Y3QgY29sbGVjdGVkX3JlZmxvZyB7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIHJlZmxvZ1tGTEVYX0FSUkFZXTsKK307CitzdHJ1Y3QgY29sbGVjdF9yZWZsb2dfY2IgeworCXN0cnVjdCBjb2xsZWN0ZWRfcmVmbG9nICoqZTsKKwlpbnQgYWxsb2M7CisJaW50IG5yOworfTsKKworI2RlZmluZSBJTkNPTVBMRVRFCSgxdTw8MTApCisjZGVmaW5lIFNUVURZSU5HCSgxdTw8MTEpCisjZGVmaW5lIFJFQUNIQUJMRQkoMXU8PDEyKQorCitzdGF0aWMgaW50IHRyZWVfaXNfY29tcGxldGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IGNvbXBsZXRlOworCXN0cnVjdCB0cmVlICp0cmVlOworCisJdHJlZSA9IGxvb2t1cF90cmVlKHNoYTEpOworCWlmICghdHJlZSkKKwkJcmV0dXJuIDA7CisJaWYgKHRyZWUtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCXJldHVybiAxOworCWlmICh0cmVlLT5vYmplY3QuZmxhZ3MgJiBJTkNPTVBMRVRFKQorCQlyZXR1cm4gMDsKKworCWlmICghdHJlZS0+YnVmZmVyKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQl2b2lkICpkYXRhID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFkYXRhKSB7CisJCQl0cmVlLT5vYmplY3QuZmxhZ3MgfD0gSU5DT01QTEVURTsKKwkJCXJldHVybiAwOworCQl9CisJCXRyZWUtPmJ1ZmZlciA9IGRhdGE7CisJCXRyZWUtPnNpemUgPSBzaXplOworCX0KKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwljb21wbGV0ZSA9IDE7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJaWYgKCFoYXNfc2hhMV9maWxlKGVudHJ5LnNoYTEpIHx8CisJCSAgICAoU19JU0RJUihlbnRyeS5tb2RlKSAmJiAhdHJlZV9pc19jb21wbGV0ZShlbnRyeS5zaGExKSkpIHsKKwkJCXRyZWUtPm9iamVjdC5mbGFncyB8PSBJTkNPTVBMRVRFOworCQkJY29tcGxldGUgPSAwOworCQl9CisJfQorCWZyZWUodHJlZS0+YnVmZmVyKTsKKwl0cmVlLT5idWZmZXIgPSBOVUxMOworCisJaWYgKGNvbXBsZXRlKQorCQl0cmVlLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwlyZXR1cm4gY29tcGxldGU7Cit9CisKK3N0YXRpYyBpbnQgY29tbWl0X2lzX2NvbXBsZXRlKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IHN0dWR5OworCXN0cnVjdCBvYmplY3RfYXJyYXkgZm91bmQ7CisJaW50IGlzX2luY29tcGxldGUgPSAwOworCWludCBpOworCisJLyogZWFybHkgcmV0dXJuICovCisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU0VFTikKKwkJcmV0dXJuIDE7CisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgSU5DT01QTEVURSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBGaW5kIGFsbCBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgYXJlIG5vdCBtYXJrZWQgYXMKKwkgKiBTRUVOLiAgVGhlbiBtYWtlIHN1cmUgdGhlIHRyZWVzIGFuZCBibG9icyBjb250YWluZWQgYXJlCisJICogY29tcGxldGUuICBBZnRlciB0aGF0LCBtYXJrIHRoZXNlIGNvbW1pdHMgYWxzbyBhcyBTRUVOLgorCSAqIElmIHNvbWUgb2YgdGhlIG9iamVjdHMgdGhhdCBhcmUgbmVlZGVkIHRvIGNvbXBsZXRlIHRoaXMKKwkgKiBjb21taXQgYXJlIG1pc3NpbmcsIG1hcmsgdGhpcyBjb21taXQgYXMgSU5DT01QTEVURS4KKwkgKi8KKwltZW1zZXQoJnN0dWR5LCAwLCBzaXplb2Yoc3R1ZHkpKTsKKwltZW1zZXQoJmZvdW5kLCAwLCBzaXplb2YoZm91bmQpKTsKKwlhZGRfb2JqZWN0X2FycmF5KCZjb21taXQtPm9iamVjdCwgTlVMTCwgJnN0dWR5KTsKKwlhZGRfb2JqZWN0X2FycmF5KCZjb21taXQtPm9iamVjdCwgTlVMTCwgJmZvdW5kKTsKKwljb21taXQtPm9iamVjdC5mbGFncyB8PSBTVFVEWUlORzsKKwl3aGlsZSAoc3R1ZHkubnIpIHsKKwkJc3RydWN0IGNvbW1pdCAqYzsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwkJYyA9IChzdHJ1Y3QgY29tbWl0ICopc3R1ZHkub2JqZWN0c1stLXN0dWR5Lm5yXS5pdGVtOworCQlpZiAoIWMtPm9iamVjdC5wYXJzZWQgJiYgIXBhcnNlX29iamVjdChjLT5vYmplY3Quc2hhMSkpCisJCQljLT5vYmplY3QuZmxhZ3MgfD0gSU5DT01QTEVURTsKKworCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgSU5DT01QTEVURSkgeworCQkJaXNfaW5jb21wbGV0ZSA9IDE7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChjLT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQkJY29udGludWU7CisJCWZvciAocGFyZW50ID0gYy0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpIHsKKwkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnQtPml0ZW07CisJCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgU1RVRFlJTkcpCisJCQkJY29udGludWU7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gU1RVRFlJTkc7CisJCQlhZGRfb2JqZWN0X2FycmF5KCZwLT5vYmplY3QsIE5VTEwsICZzdHVkeSk7CisJCQlhZGRfb2JqZWN0X2FycmF5KCZwLT5vYmplY3QsIE5VTEwsICZmb3VuZCk7CisJCX0KKwl9CisJaWYgKCFpc19pbmNvbXBsZXRlKSB7CisJCS8qCisJCSAqIG1ha2Ugc3VyZSBhbGwgY29tbWl0cyBpbiAiZm91bmQiIGFycmF5IGhhdmUgYWxsIHRoZQorCQkgKiBuZWNlc3Nhcnkgb2JqZWN0cy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBmb3VuZC5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjID0KKwkJCQkoc3RydWN0IGNvbW1pdCAqKWZvdW5kLm9iamVjdHNbaV0uaXRlbTsKKwkJCWlmICghdHJlZV9pc19jb21wbGV0ZShjLT50cmVlLT5vYmplY3Quc2hhMSkpIHsKKwkJCQlpc19pbmNvbXBsZXRlID0gMTsKKwkJCQljLT5vYmplY3QuZmxhZ3MgfD0gSU5DT01QTEVURTsKKwkJCX0KKwkJfQorCQlpZiAoIWlzX2luY29tcGxldGUpIHsKKwkJCS8qIG1hcmsgYWxsIGZvdW5kIGNvbW1pdHMgYXMgY29tcGxldGUsIGlvdyBTRUVOICovCisJCQlmb3IgKGkgPSAwOyBpIDwgZm91bmQubnI7IGkrKykKKwkJCQlmb3VuZC5vYmplY3RzW2ldLml0ZW0tPmZsYWdzIHw9IFNFRU47CisJCX0KKwl9CisJLyogY2xlYXIgZmxhZ3MgZnJvbSB0aGUgb2JqZWN0cyB3ZSB0cmF2ZXJzZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZm91bmQubnI7IGkrKykKKwkJZm91bmQub2JqZWN0c1tpXS5pdGVtLT5mbGFncyAmPSB+U1RVRFlJTkc7CisJaWYgKGlzX2luY29tcGxldGUpCisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IElOQ09NUExFVEU7CisJZWxzZSB7CisJCS8qCisJCSAqIElmIHdlIGNvbWUgaGVyZSwgd2UgaGF2ZSAoMSkgdHJhdmVyc2VkIHRoZSBhbmNlc3RyeSBjaGFpbgorCQkgKiBmcm9tIHRoZSAiY29tbWl0IiB1bnRpbCB3ZSByZWFjaCBTRUVOIGNvbW1pdHMgKHdoaWNoIGFyZQorCQkgKiBrbm93biB0byBiZSBjb21wbGV0ZSksIGFuZCAoMikgbWFkZSBzdXJlIHRoYXQgdGhlIGNvbW1pdHMKKwkJICogZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBhYm92ZSB0cmF2ZXJzYWwgcmVmZXIgdG8gdHJlZXMgdGhhdAorCQkgKiBhcmUgY29tcGxldGUuICBXaGljaCBtZWFucyB0aGF0IHdlIGtub3cgKmFsbCogdGhlIGNvbW1pdHMKKwkJICogd2UgaGF2ZSBzZWVuIGR1cmluZyB0aGlzIHByb2Nlc3MgYXJlIGNvbXBsZXRlLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGZvdW5kLm5yOyBpKyspCisJCQlmb3VuZC5vYmplY3RzW2ldLml0ZW0tPmZsYWdzIHw9IFNFRU47CisJfQorCS8qIGZyZWUgb2JqZWN0IGFycmF5cyAqLworCWZyZWUoc3R1ZHkub2JqZWN0cyk7CisJZnJlZShmb3VuZC5vYmplY3RzKTsKKwlyZXR1cm4gIWlzX2luY29tcGxldGU7Cit9CisKK3N0YXRpYyBpbnQga2VlcF9lbnRyeShzdHJ1Y3QgY29tbWl0ICoqaXQsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJaWYgKGlzX251bGxfc2hhMShzaGExKSkKKwkJcmV0dXJuIDE7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTEsIDEpOworCWlmICghY29tbWl0KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBjb21taXQgZXhpc3RzLgorCSAqCisJICogV2UgaGF2ZSB3YWxrZWQgYWxsIHRoZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoZSByZWZzCisJICogYW5kIGNhY2hlIGVhcmxpZXIuICBUaGUgY29tbWl0cyByZWFjaGFibGUgYnkgdGhpcyBjb21taXQKKwkgKiBtdXN0IG1lZXQgU0VFTiBjb21taXRzIC0tIGFuZCB0aGVuIHdlIHNob3VsZCBtYXJrIHRoZW0gYXMKKwkgKiBTRUVOIGFzIHdlbGwuCisJICovCisJaWYgKCFjb21taXRfaXNfY29tcGxldGUoY29tbWl0KSkKKwkJcmV0dXJuIDA7CisJKml0ID0gY29tbWl0OworCXJldHVybiAxOworfQorCisvKgorICogU3RhcnRpbmcgZnJvbSBjb21taXRzIGluIHRoZSBjYi0+bWFya19saXN0LCBtYXJrIGNvbW1pdHMgdGhhdCBhcmUKKyAqIHJlYWNoYWJsZSBmcm9tIHRoZW0uICBTdG9wIHRoZSB0cmF2ZXJzYWwgYXQgY29tbWl0cyBvbGRlciB0aGFuCisgKiB0aGUgZXhwaXJlX2xpbWl0IGFuZCBxdWV1ZSB0aGVtIGJhY2ssIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gY2FsbAorICogdXMgYWdhaW4gdG8gcmVzdGFydCB0aGUgdHJhdmVyc2FsIHdpdGggbG9uZ2VyIGV4cGlyZV9saW1pdC4KKyAqLworc3RhdGljIHZvaWQgbWFya19yZWFjaGFibGUoc3RydWN0IGV4cGlyZV9yZWZsb2dfY2IgKmNiKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBlbmRpbmc7CisJdW5zaWduZWQgbG9uZyBleHBpcmVfbGltaXQgPSBjYi0+bWFya19saW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxlZnRvdmVyID0gTlVMTDsKKworCWZvciAocGVuZGluZyA9IGNiLT5tYXJrX2xpc3Q7IHBlbmRpbmc7IHBlbmRpbmcgPSBwZW5kaW5nLT5uZXh0KQorCQlwZW5kaW5nLT5pdGVtLT5vYmplY3QuZmxhZ3MgJj0gflJFQUNIQUJMRTsKKworCXBlbmRpbmcgPSBjYi0+bWFya19saXN0OworCXdoaWxlIChwZW5kaW5nKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqZW50cnkgPSBwZW5kaW5nOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKKwkJcGVuZGluZyA9IGVudHJ5LT5uZXh0OworCQljb21taXQgPSBlbnRyeS0+aXRlbTsKKwkJZnJlZShlbnRyeSk7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSkKKwkJCWNvbnRpbnVlOworCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCQljb250aW51ZTsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUkVBQ0hBQkxFOworCQlpZiAoY29tbWl0LT5kYXRlIDwgZXhwaXJlX2xpbWl0KSB7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmbGVmdG92ZXIpOworCQkJY29udGludWU7CisJCX0KKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUkVBQ0hBQkxFOworCQlwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisJCXdoaWxlIChwYXJlbnQpIHsKKwkJCWNvbW1pdCA9IHBhcmVudC0+aXRlbTsKKwkJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKwkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSkKKwkJCQljb250aW51ZTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsICZwZW5kaW5nKTsKKwkJfQorCX0KKwljYi0+bWFya19saXN0ID0gbGVmdG92ZXI7Cit9CisKK3N0YXRpYyBpbnQgdW5yZWFjaGFibGUoc3RydWN0IGV4cGlyZV9yZWZsb2dfY2IgKmNiLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJLyoKKwkgKiBXZSBtYXkgb3IgbWF5IG5vdCBoYXZlIHRoZSBjb21taXQgeWV0IC0gaWYgbm90LCBsb29rIGl0CisJICogdXAgdXNpbmcgdGhlIHN1cHBsaWVkIHNoYTEuCisJICovCisJaWYgKCFjb21taXQpIHsKKwkJaWYgKGlzX251bGxfc2hhMShzaGExKSkKKwkJCXJldHVybiAwOworCisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzaGExLCAxKTsKKworCQkvKiBOb3QgYSBjb21taXQgLS0ga2VlcCBpdCAqLworCQlpZiAoIWNvbW1pdCkKKwkJCXJldHVybiAwOworCX0KKworCS8qIFJlYWNoYWJsZSBmcm9tIHRoZSBjdXJyZW50IHJlZj8gIERvbid0IHBydW5lLiAqLworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY2ItPm1hcmtfbGlzdCAmJiBjYi0+bWFya19saW1pdCkgeworCQljYi0+bWFya19saW1pdCA9IDA7IC8qIGRpZyBkb3duIHRvIHRoZSByb290ICovCisJCW1hcmtfcmVhY2hhYmxlKGNiKTsKKwl9CisKKwlyZXR1cm4gIShjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSk7Cit9CisKK3N0YXRpYyBpbnQgZXhwaXJlX3JlZmxvZ19lbnQodW5zaWduZWQgY2hhciAqb3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5zaGExLAorCQljb25zdCBjaGFyICplbWFpbCwgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAsIGludCB0eiwKKwkJY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19jYiAqY2IgPSBjYl9kYXRhOworCXN0cnVjdCBjb21taXQgKm9sZCwgKm5ldzsKKworCWlmICh0aW1lc3RhbXAgPCBjYi0+Y21kLT5leHBpcmVfdG90YWwpCisJCWdvdG8gcHJ1bmU7CisKKwlpZiAoY2ItPmNtZC0+cmV3cml0ZSkKKwkJb3NoYTEgPSBjYi0+bGFzdF9rZXB0X3NoYTE7CisKKwlvbGQgPSBuZXcgPSBOVUxMOworCWlmIChjYi0+Y21kLT5zdGFsZWZpeCAmJgorCSAgICAoIWtlZXBfZW50cnkoJm9sZCwgb3NoYTEpIHx8ICFrZWVwX2VudHJ5KCZuZXcsIG5zaGExKSkpCisJCWdvdG8gcHJ1bmU7CisKKwlpZiAodGltZXN0YW1wIDwgY2ItPmNtZC0+ZXhwaXJlX3VucmVhY2hhYmxlKSB7CisJCWlmIChjYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPT0gVUVfQUxXQVlTKQorCQkJZ290byBwcnVuZTsKKwkJaWYgKHVucmVhY2hhYmxlKGNiLCBvbGQsIG9zaGExKSB8fCB1bnJlYWNoYWJsZShjYiwgbmV3LCBuc2hhMSkpCisJCQlnb3RvIHBydW5lOworCX0KKworCWlmIChjYi0+Y21kLT5yZWNubyAmJiAtLShjYi0+Y21kLT5yZWNubykgPT0gMCkKKwkJZ290byBwcnVuZTsKKworCWlmIChjYi0+bmV3bG9nKSB7CisJCWNoYXIgc2lnbiA9ICh0eiA8IDApID8gJy0nIDogJysnOworCQlpbnQgem9uZSA9ICh0eiA8IDApID8gKC10eikgOiB0ejsKKwkJZnByaW50ZihjYi0+bmV3bG9nLCAiJXMgJXMgJXMgJWx1ICVjJTA0ZFx0JXMiLAorCQkJc2hhMV90b19oZXgob3NoYTEpLCBzaGExX3RvX2hleChuc2hhMSksCisJCQllbWFpbCwgdGltZXN0YW1wLCBzaWduLCB6b25lLAorCQkJbWVzc2FnZSk7CisJCWhhc2hjcHkoY2ItPmxhc3Rfa2VwdF9zaGExLCBuc2hhMSk7CisJfQorCWlmIChjYi0+Y21kLT52ZXJib3NlKQorCQlwcmludGYoImtlZXAgJXMiLCBtZXNzYWdlKTsKKwlyZXR1cm4gMDsKKyBwcnVuZToKKwlpZiAoIWNiLT5uZXdsb2cpCisJCXByaW50Zigid291bGQgcHJ1bmUgJXMiLCBtZXNzYWdlKTsKKwllbHNlIGlmIChjYi0+Y21kLT52ZXJib3NlKQorCQlwcmludGYoInBydW5lICVzIiwgbWVzc2FnZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF90aXBfdG9fbGlzdChjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCA9IGNiX2RhdGE7CisJc3RydWN0IGNvbW1pdCAqdGlwX2NvbW1pdDsKKwlpZiAoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpCisJCXJldHVybiAwOworCXRpcF9jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CisJaWYgKCF0aXBfY29tbWl0KQorCQlyZXR1cm4gMDsKKwljb21taXRfbGlzdF9pbnNlcnQodGlwX2NvbW1pdCwgbGlzdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXhwaXJlX3JlZmxvZyhjb25zdCBjaGFyICpyZWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCB1bnVzZWQsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNtZF9yZWZsb2dfZXhwaXJlX2NiICpjbWQgPSBjYl9kYXRhOworCXN0cnVjdCBleHBpcmVfcmVmbG9nX2NiIGNiOworCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKwljaGFyICpsb2dfZmlsZSwgKm5ld2xvZ19wYXRoID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0ICp0aXBfY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqdGlwczsKKwlpbnQgc3RhdHVzID0gMDsKKworCW1lbXNldCgmY2IsIDAsIHNpemVvZihjYikpOworCisJLyoKKwkgKiB3ZSB0YWtlIHRoZSBsb2NrIGZvciB0aGUgcmVmIGl0c2VsZiB0byBwcmV2ZW50IGl0IGZyb20KKwkgKiBnZXR0aW5nIHVwZGF0ZWQuCisJICovCisJbG9jayA9IGxvY2tfYW55X3JlZl9mb3JfdXBkYXRlKHJlZiwgc2hhMSwgMCk7CisJaWYgKCFsb2NrKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBsb2NrIHJlZiAnJXMnIiwgcmVmKTsKKwlsb2dfZmlsZSA9IGdpdF9wYXRoZHVwKCJsb2dzLyVzIiwgcmVmKTsKKwlpZiAoIWZpbGVfZXhpc3RzKGxvZ19maWxlKSkKKwkJZ290byBmaW5pc2g7CisJaWYgKCFjbWQtPmRyeV9ydW4pIHsKKwkJbmV3bG9nX3BhdGggPSBnaXRfcGF0aGR1cCgibG9ncy8lcy5sb2NrIiwgcmVmKTsKKwkJY2IubmV3bG9nID0gZm9wZW4obmV3bG9nX3BhdGgsICJ3Iik7CisJfQorCisJY2IuY21kID0gY21kOworCisJaWYgKCFjbWQtPmV4cGlyZV91bnJlYWNoYWJsZSB8fCAhc3RyY21wKHJlZiwgIkhFQUQiKSkgeworCQl0aXBfY29tbWl0ID0gTlVMTDsKKwkJY2IudW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPSBVRV9IRUFEOworCX0gZWxzZSB7CisJCXRpcF9jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CisJCWlmICghdGlwX2NvbW1pdCkKKwkJCWNiLnVucmVhY2hhYmxlX2V4cGlyZV9raW5kID0gVUVfQUxXQVlTOworCQllbHNlCisJCQljYi51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9IFVFX05PUk1BTDsKKwl9CisKKwlpZiAoY21kLT5leHBpcmVfdW5yZWFjaGFibGUgPD0gY21kLT5leHBpcmVfdG90YWwpCisJCWNiLnVucmVhY2hhYmxlX2V4cGlyZV9raW5kID0gVUVfQUxXQVlTOworCisJY2IubWFya19saXN0ID0gTlVMTDsKKwl0aXBzID0gTlVMTDsKKwlpZiAoY2IudW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgIT0gVUVfQUxXQVlTKSB7CisJCWlmIChjYi51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9PSBVRV9IRUFEKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW07CisJCQlmb3JfZWFjaF9yZWYocHVzaF90aXBfdG9fbGlzdCwgJnRpcHMpOworCQkJZm9yIChlbGVtID0gdGlwczsgZWxlbTsgZWxlbSA9IGVsZW0tPm5leHQpCisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGVsZW0tPml0ZW0sICZjYi5tYXJrX2xpc3QpOworCQl9IGVsc2UgeworCQkJY29tbWl0X2xpc3RfaW5zZXJ0KHRpcF9jb21taXQsICZjYi5tYXJrX2xpc3QpOworCQl9CisJCWNiLm1hcmtfbGltaXQgPSBjbWQtPmV4cGlyZV90b3RhbDsKKwkJbWFya19yZWFjaGFibGUoJmNiKTsKKwl9CisKKwlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZiwgZXhwaXJlX3JlZmxvZ19lbnQsICZjYik7CisKKwlpZiAoY2IudW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgIT0gVUVfQUxXQVlTKSB7CisJCWlmIChjYi51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9PSBVRV9IRUFEKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW07CisJCQlmb3IgKGVsZW0gPSB0aXBzOyBlbGVtOyBlbGVtID0gZWxlbS0+bmV4dCkKKwkJCQljbGVhcl9jb21taXRfbWFya3ModGlwX2NvbW1pdCwgUkVBQ0hBQkxFKTsKKwkJCWZyZWVfY29tbWl0X2xpc3QodGlwcyk7CisJCX0gZWxzZSB7CisJCQljbGVhcl9jb21taXRfbWFya3ModGlwX2NvbW1pdCwgUkVBQ0hBQkxFKTsKKwkJfQorCX0KKyBmaW5pc2g6CisJaWYgKGNiLm5ld2xvZykgeworCQlpZiAoZmNsb3NlKGNiLm5ld2xvZykpIHsKKwkJCXN0YXR1cyB8PSBlcnJvcigiJXM6ICVzIiwgc3RyZXJyb3IoZXJybm8pLAorCQkJCQluZXdsb2dfcGF0aCk7CisJCQl1bmxpbmsobmV3bG9nX3BhdGgpOworCQl9IGVsc2UgaWYgKGNtZC0+dXBkYXRlcmVmICYmCisJCQkod3JpdGVfaW5fZnVsbChsb2NrLT5sb2NrX2ZkLAorCQkJCXNoYTFfdG9faGV4KGNiLmxhc3Rfa2VwdF9zaGExKSwgNDApICE9IDQwIHx8CisJCQkgd3JpdGVfc3RyX2luX2Z1bGwobG9jay0+bG9ja19mZCwgIlxuIikgIT0gMSB8fAorCQkJIGNsb3NlX3JlZihsb2NrKSA8IDApKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoIkNvdWxkbid0IHdyaXRlICVzIiwKKwkJCQlsb2NrLT5say0+ZmlsZW5hbWUpOworCQkJdW5saW5rKG5ld2xvZ19wYXRoKTsKKwkJfSBlbHNlIGlmIChyZW5hbWUobmV3bG9nX3BhdGgsIGxvZ19maWxlKSkgeworCQkJc3RhdHVzIHw9IGVycm9yKCJjYW5ub3QgcmVuYW1lICVzIHRvICVzIiwKKwkJCQkJbmV3bG9nX3BhdGgsIGxvZ19maWxlKTsKKwkJCXVubGluayhuZXdsb2dfcGF0aCk7CisJCX0gZWxzZSBpZiAoY21kLT51cGRhdGVyZWYgJiYgY29tbWl0X3JlZihsb2NrKSkgeworCQkJc3RhdHVzIHw9IGVycm9yKCJDb3VsZG4ndCBzZXQgJXMiLCBsb2NrLT5yZWZfbmFtZSk7CisJCX0gZWxzZSB7CisJCQlhZGp1c3Rfc2hhcmVkX3Blcm0obG9nX2ZpbGUpOworCQl9CisJfQorCWZyZWUobmV3bG9nX3BhdGgpOworCWZyZWUobG9nX2ZpbGUpOworCXVubG9ja19yZWYobG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBjb2xsZWN0X3JlZmxvZyhjb25zdCBjaGFyICpyZWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCB1bnVzZWQsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbGxlY3RlZF9yZWZsb2cgKmU7CisJc3RydWN0IGNvbGxlY3RfcmVmbG9nX2NiICpjYiA9IGNiX2RhdGE7CisJc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4ocmVmKTsKKworCWUgPSB4bWFsbG9jKHNpemVvZigqZSkgKyBuYW1lbGVuICsgMSk7CisJaGFzaGNweShlLT5zaGExLCBzaGExKTsKKwltZW1jcHkoZS0+cmVmbG9nLCByZWYsIG5hbWVsZW4gKyAxKTsKKwlBTExPQ19HUk9XKGNiLT5lLCBjYi0+bnIgKyAxLCBjYi0+YWxsb2MpOworCWNiLT5lW2NiLT5ucisrXSA9IGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmbG9nX2V4cGlyZV9jZmcgeworCXN0cnVjdCByZWZsb2dfZXhwaXJlX2NmZyAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZV90b3RhbDsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZV91bnJlYWNoYWJsZTsKKwlzaXplX3QgbGVuOworCWNoYXIgcGF0dGVybltGTEVYX0FSUkFZXTsKK30gKnJlZmxvZ19leHBpcmVfY2ZnLCAqKnJlZmxvZ19leHBpcmVfY2ZnX3RhaWw7CisKK3N0YXRpYyBzdHJ1Y3QgcmVmbG9nX2V4cGlyZV9jZmcgKmZpbmRfY2ZnX2VudChjb25zdCBjaGFyICpwYXR0ZXJuLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCByZWZsb2dfZXhwaXJlX2NmZyAqZW50OworCisJaWYgKCFyZWZsb2dfZXhwaXJlX2NmZ190YWlsKQorCQlyZWZsb2dfZXhwaXJlX2NmZ190YWlsID0gJnJlZmxvZ19leHBpcmVfY2ZnOworCisJZm9yIChlbnQgPSByZWZsb2dfZXhwaXJlX2NmZzsgZW50OyBlbnQgPSBlbnQtPm5leHQpCisJCWlmIChlbnQtPmxlbiA9PSBsZW4gJiYKKwkJICAgICFtZW1jbXAoZW50LT5wYXR0ZXJuLCBwYXR0ZXJuLCBsZW4pKQorCQkJcmV0dXJuIGVudDsKKworCWVudCA9IHhjYWxsb2MoMSwgKHNpemVvZigqZW50KSArIGxlbikpOworCW1lbWNweShlbnQtPnBhdHRlcm4sIHBhdHRlcm4sIGxlbik7CisJZW50LT5sZW4gPSBsZW47CisJKnJlZmxvZ19leHBpcmVfY2ZnX3RhaWwgPSBlbnQ7CisJcmVmbG9nX2V4cGlyZV9jZmdfdGFpbCA9ICYoZW50LT5uZXh0KTsKKwlyZXR1cm4gZW50OworfQorCitzdGF0aWMgaW50IHBhcnNlX2V4cGlyZV9jZmdfdmFsdWUoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdW5zaWduZWQgbG9uZyAqZXhwaXJlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCWlmICghc3RyY21wKHZhbHVlLCAibmV2ZXIiKSB8fCAhc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkgeworCQkqZXhwaXJlID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCSpleHBpcmUgPSBhcHByb3hpZGF0ZSh2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGV4cGlyeSB0aW1lciBzbG90ICovCisjZGVmaW5lIEVYUElSRV9UT1RBTCAgIDAxCisjZGVmaW5lIEVYUElSRV9VTlJFQUNIIDAyCisKK3N0YXRpYyBpbnQgcmVmbG9nX2V4cGlyZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqbGFzdGRvdCA9IHN0cnJjaHIodmFyLCAnLicpOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlOworCWludCBzbG90OworCXN0cnVjdCByZWZsb2dfZXhwaXJlX2NmZyAqZW50OworCisJaWYgKCFsYXN0ZG90IHx8IHByZWZpeGNtcCh2YXIsICJnYy4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisKKwlpZiAoIXN0cmNtcChsYXN0ZG90LCAiLnJlZmxvZ2V4cGlyZSIpKSB7CisJCXNsb3QgPSBFWFBJUkVfVE9UQUw7CisJCWlmIChwYXJzZV9leHBpcmVfY2ZnX3ZhbHVlKHZhciwgdmFsdWUsICZleHBpcmUpKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoIXN0cmNtcChsYXN0ZG90LCAiLnJlZmxvZ2V4cGlyZXVucmVhY2hhYmxlIikpIHsKKwkJc2xvdCA9IEVYUElSRV9VTlJFQUNIOworCQlpZiAocGFyc2VfZXhwaXJlX2NmZ192YWx1ZSh2YXIsIHZhbHVlLCAmZXhwaXJlKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisKKwlpZiAobGFzdGRvdCA9PSB2YXIgKyAyKSB7CisJCXN3aXRjaCAoc2xvdCkgeworCQljYXNlIEVYUElSRV9UT1RBTDoKKwkJCWRlZmF1bHRfcmVmbG9nX2V4cGlyZSA9IGV4cGlyZTsKKwkJCWJyZWFrOworCQljYXNlIEVYUElSRV9VTlJFQUNIOgorCQkJZGVmYXVsdF9yZWZsb2dfZXhwaXJlX3VucmVhY2hhYmxlID0gZXhwaXJlOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJZW50ID0gZmluZF9jZmdfZW50KHZhciArIDMsIGxhc3Rkb3QgLSAodmFyKzMpKTsKKwlpZiAoIWVudCkKKwkJcmV0dXJuIC0xOworCXN3aXRjaCAoc2xvdCkgeworCWNhc2UgRVhQSVJFX1RPVEFMOgorCQllbnQtPmV4cGlyZV90b3RhbCA9IGV4cGlyZTsKKwkJYnJlYWs7CisJY2FzZSBFWFBJUkVfVU5SRUFDSDoKKwkJZW50LT5leHBpcmVfdW5yZWFjaGFibGUgPSBleHBpcmU7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X3JlZmxvZ19leHBpcnlfcGFyYW0oc3RydWN0IGNtZF9yZWZsb2dfZXhwaXJlX2NiICpjYiwgaW50IHNsb3QsIGNvbnN0IGNoYXIgKnJlZikKK3sKKwlzdHJ1Y3QgcmVmbG9nX2V4cGlyZV9jZmcgKmVudDsKKworCWlmIChzbG90ID09IChFWFBJUkVfVE9UQUx8RVhQSVJFX1VOUkVBQ0gpKQorCQlyZXR1cm47IC8qIGJvdGggZ2l2ZW4gZXhwbGljaXRseSAtLSBub3RoaW5nIHRvIHR3ZWFrICovCisKKwlmb3IgKGVudCA9IHJlZmxvZ19leHBpcmVfY2ZnOyBlbnQ7IGVudCA9IGVudC0+bmV4dCkgeworCQlpZiAoIWZubWF0Y2goZW50LT5wYXR0ZXJuLCByZWYsIDApKSB7CisJCQlpZiAoIShzbG90ICYgRVhQSVJFX1RPVEFMKSkKKwkJCQljYi0+ZXhwaXJlX3RvdGFsID0gZW50LT5leHBpcmVfdG90YWw7CisJCQlpZiAoIShzbG90ICYgRVhQSVJFX1VOUkVBQ0gpKQorCQkJCWNiLT5leHBpcmVfdW5yZWFjaGFibGUgPSBlbnQtPmV4cGlyZV91bnJlYWNoYWJsZTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qCisJICogSWYgdW5jb25maWd1cmVkLCBtYWtlIHN0YXNoIG5ldmVyIGV4cGlyZQorCSAqLworCWlmICghc3RyY21wKHJlZiwgInJlZnMvc3Rhc2giKSkgeworCQlpZiAoIShzbG90ICYgRVhQSVJFX1RPVEFMKSkKKwkJCWNiLT5leHBpcmVfdG90YWwgPSAwOworCQlpZiAoIShzbG90ICYgRVhQSVJFX1VOUkVBQ0gpKQorCQkJY2ItPmV4cGlyZV91bnJlYWNoYWJsZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3RoaW5nIG1hdGNoZWQgLS0gdXNlIHRoZSBkZWZhdWx0IHZhbHVlICovCisJaWYgKCEoc2xvdCAmIEVYUElSRV9UT1RBTCkpCisJCWNiLT5leHBpcmVfdG90YWwgPSBkZWZhdWx0X3JlZmxvZ19leHBpcmU7CisJaWYgKCEoc2xvdCAmIEVYUElSRV9VTlJFQUNIKSkKKwkJY2ItPmV4cGlyZV91bnJlYWNoYWJsZSA9IGRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZTsKK30KKworc3RhdGljIGludCBjbWRfcmVmbG9nX2V4cGlyZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgY21kX3JlZmxvZ19leHBpcmVfY2IgY2I7CisJdW5zaWduZWQgbG9uZyBub3cgPSB0aW1lKE5VTEwpOworCWludCBpLCBzdGF0dXMsIGRvX2FsbDsKKwlpbnQgZXhwbGljaXRfZXhwaXJ5ID0gMDsKKworCWRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZSA9IG5vdyAtIDMwICogMjQgKiAzNjAwOworCWRlZmF1bHRfcmVmbG9nX2V4cGlyZSA9IG5vdyAtIDkwICogMjQgKiAzNjAwOworCWdpdF9jb25maWcocmVmbG9nX2V4cGlyZV9jb25maWcsIE5VTEwpOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlkb19hbGwgPSBzdGF0dXMgPSAwOworCW1lbXNldCgmY2IsIDAsIHNpemVvZihjYikpOworCisJY2IuZXhwaXJlX3RvdGFsID0gZGVmYXVsdF9yZWZsb2dfZXhwaXJlOworCWNiLmV4cGlyZV91bnJlYWNoYWJsZSA9IGRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kcnktcnVuIikgfHwgIXN0cmNtcChhcmcsICItbiIpKQorCQkJY2IuZHJ5X3J1biA9IDE7CisJCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1leHBpcmU9IikpIHsKKwkJCWNiLmV4cGlyZV90b3RhbCA9IGFwcHJveGlkYXRlKGFyZyArIDkpOworCQkJZXhwbGljaXRfZXhwaXJ5IHw9IEVYUElSRV9UT1RBTDsKKwkJfQorCQllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tZXhwaXJlLXVucmVhY2hhYmxlPSIpKSB7CisJCQljYi5leHBpcmVfdW5yZWFjaGFibGUgPSBhcHByb3hpZGF0ZShhcmcgKyAyMSk7CisJCQlleHBsaWNpdF9leHBpcnkgfD0gRVhQSVJFX1VOUkVBQ0g7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXN0YWxlLWZpeCIpKQorCQkJY2Iuc3RhbGVmaXggPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmV3cml0ZSIpKQorCQkJY2IucmV3cml0ZSA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS11cGRhdGVyZWYiKSkKKwkJCWNiLnVwZGF0ZXJlZiA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hbGwiKSkKKwkJCWRvX2FsbCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJib3NlIikpCisJCQljYi52ZXJib3NlID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChhcmdbMF0gPT0gJy0nKQorCQkJdXNhZ2UocmVmbG9nX2V4cGlyZV91c2FnZSk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogV2UgY2FuIHRydXN0IHRoZSBjb21taXRzIGFuZCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHJlZnMKKwkgKiBldmVuIGluIG9sZGVyIHJlcG9zaXRvcnkuICBXZSBjYW5ub3QgdHJ1c3Qgd2hhdCdzIHJlYWNoYWJsZQorCSAqIGZyb20gcmVmbG9nIGlmIHRoZSByZXBvc2l0b3J5IHdhcyBwcnVuZWQgd2l0aCBvbGRlciBnaXQuCisJICovCisJaWYgKGNiLnN0YWxlZml4KSB7CisJCWluaXRfcmV2aXNpb25zKCZjYi5yZXZzLCBwcmVmaXgpOworCQlpZiAoY2IudmVyYm9zZSkKKwkJCXByaW50ZigiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIpOworCQltYXJrX3JlYWNoYWJsZV9vYmplY3RzKCZjYi5yZXZzLCAwLCBOVUxMKTsKKwkJaWYgKGNiLnZlcmJvc2UpCisJCQlwdXRjaGFyKCdcbicpOworCX0KKworCWlmIChkb19hbGwpIHsKKwkJc3RydWN0IGNvbGxlY3RfcmVmbG9nX2NiIGNvbGxlY3RlZDsKKwkJaW50IGk7CisKKwkJbWVtc2V0KCZjb2xsZWN0ZWQsIDAsIHNpemVvZihjb2xsZWN0ZWQpKTsKKwkJZm9yX2VhY2hfcmVmbG9nKGNvbGxlY3RfcmVmbG9nLCAmY29sbGVjdGVkKTsKKwkJZm9yIChpID0gMDsgaSA8IGNvbGxlY3RlZC5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgY29sbGVjdGVkX3JlZmxvZyAqZSA9IGNvbGxlY3RlZC5lW2ldOworCQkJc2V0X3JlZmxvZ19leHBpcnlfcGFyYW0oJmNiLCBleHBsaWNpdF9leHBpcnksIGUtPnJlZmxvZyk7CisJCQlzdGF0dXMgfD0gZXhwaXJlX3JlZmxvZyhlLT5yZWZsb2csIGUtPnNoYTEsIDAsICZjYik7CisJCQlmcmVlKGUpOworCQl9CisJCWZyZWUoY29sbGVjdGVkLmUpOworCX0KKworCWZvciAoOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNoYXIgKnJlZjsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaWYgKCFkd2ltX2xvZyhhcmd2W2ldLCBzdHJsZW4oYXJndltpXSksIHNoYTEsICZyZWYpKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoIiVzIHBvaW50cyBub3doZXJlISIsIGFyZ3ZbaV0pOworCQkJY29udGludWU7CisJCX0KKwkJc2V0X3JlZmxvZ19leHBpcnlfcGFyYW0oJmNiLCBleHBsaWNpdF9leHBpcnksIHJlZik7CisJCXN0YXR1cyB8PSBleHBpcmVfcmVmbG9nKHJlZiwgc2hhMSwgMCwgJmNiKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBjb3VudF9yZWZsb2dfZW50KHVuc2lnbmVkIGNoYXIgKm9zaGExLCB1bnNpZ25lZCBjaGFyICpuc2hhMSwKKwkJY29uc3QgY2hhciAqZW1haWwsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wLCBpbnQgdHosCisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNtZF9yZWZsb2dfZXhwaXJlX2NiICpjYiA9IGNiX2RhdGE7CisJaWYgKCFjYi0+ZXhwaXJlX3RvdGFsIHx8IHRpbWVzdGFtcCA8IGNiLT5leHBpcmVfdG90YWwpCisJCWNiLT5yZWNubysrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtZF9yZWZsb2dfZGVsZXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjbWRfcmVmbG9nX2V4cGlyZV9jYiBjYjsKKwlpbnQgaSwgc3RhdHVzID0gMDsKKworCW1lbXNldCgmY2IsIDAsIHNpemVvZihjYikpOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoIXN0cmNtcChhcmcsICItLWRyeS1ydW4iKSB8fCAhc3RyY21wKGFyZywgIi1uIikpCisJCQljYi5kcnlfcnVuID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJld3JpdGUiKSkKKwkJCWNiLnJld3JpdGUgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tdXBkYXRlcmVmIikpCisJCQljYi51cGRhdGVyZWYgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKQorCQkJY2IudmVyYm9zZSA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJaSsrOworCQkJYnJlYWs7CisJCX0KKwkJZWxzZSBpZiAoYXJnWzBdID09ICctJykKKwkJCXVzYWdlKHJlZmxvZ19kZWxldGVfdXNhZ2UpOworCQllbHNlCisJCQlicmVhazsKKwl9CisKKwlpZiAoYXJnYyAtIGkgPCAxKQorCQlyZXR1cm4gZXJyb3IoIk5vdGhpbmcgdG8gZGVsZXRlPyIpOworCisJZm9yICggOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnNwZWMgPSBzdHJzdHIoYXJndltpXSwgIkB7Iik7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWNoYXIgKmVwLCAqcmVmOworCQlpbnQgcmVjbm87CisKKwkJaWYgKCFzcGVjKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoIk5vdCBhIHJlZmxvZzogJXMiLCBhcmd2W2ldKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFkd2ltX2xvZyhhcmd2W2ldLCBzcGVjIC0gYXJndltpXSwgc2hhMSwgJnJlZikpIHsKKwkJCXN0YXR1cyB8PSBlcnJvcigibm8gcmVmbG9nIGZvciAnJXMnIiwgYXJndltpXSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJlY25vID0gc3RydG91bChzcGVjICsgMiwgJmVwLCAxMCk7CisJCWlmICgqZXAgPT0gJ30nKSB7CisJCQljYi5yZWNubyA9IC1yZWNubzsKKwkJCWZvcl9lYWNoX3JlZmxvZ19lbnQocmVmLCBjb3VudF9yZWZsb2dfZW50LCAmY2IpOworCQl9IGVsc2UgeworCQkJY2IuZXhwaXJlX3RvdGFsID0gYXBwcm94aWRhdGUoc3BlYyArIDIpOworCQkJZm9yX2VhY2hfcmVmbG9nX2VudChyZWYsIGNvdW50X3JlZmxvZ19lbnQsICZjYik7CisJCQljYi5leHBpcmVfdG90YWwgPSAwOworCQl9CisKKwkJc3RhdHVzIHw9IGV4cGlyZV9yZWZsb2cocmVmLCBzaGExLCAwLCAmY2IpOworCQlmcmVlKHJlZik7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBtYWluICJyZWZsb2ciCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgcmVmbG9nX3VzYWdlW10gPQorImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIF0iOworCitpbnQgY21kX3JlZmxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UocmVmbG9nX3VzYWdlKTsKKworCS8qIFdpdGggbm8gY29tbWFuZCwgd2UgZGVmYXVsdCB0byBzaG93aW5nIGl0LiAqLworCWlmIChhcmdjIDwgMiB8fCAqYXJndlsxXSA9PSAnLScpCisJCXJldHVybiBjbWRfbG9nX3JlZmxvZyhhcmdjLCBhcmd2LCBwcmVmaXgpOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgInNob3ciKSkKKwkJcmV0dXJuIGNtZF9sb2dfcmVmbG9nKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJleHBpcmUiKSkKKwkJcmV0dXJuIGNtZF9yZWZsb2dfZXhwaXJlKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJkZWxldGUiKSkKKwkJcmV0dXJuIGNtZF9yZWZsb2dfZGVsZXRlKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KTsKKworCXJldHVybiBjbWRfbG9nX3JlZmxvZyhhcmdjLCBhcmd2LCBwcmVmaXgpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZW1vdGUtZXh0LmMgYi9idWlsdGluL3JlbW90ZS1leHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTJjODM0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZW1vdGUtZXh0LmMKQEAgLTAsMCArMSwyNDIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworLyoKKyAqIFVSTCBzeW50YXg6CisgKgknY29tbWFuZCBbYXJnMSBbYXJnMiBbLi4uXV1dJwlJbnZva2UgY29tbWFuZCB3aXRoIGdpdmVuIGFyZ3VtZW50cy4KKyAqCVNwZWNpYWwgY2hhcmFjdGVyczoKKyAqCSclICc6IExpdGVyYWwgc3BhY2UgaW4gYXJndW1lbnQuCisgKgknJSUnOiBMaXRlcmFsIHBlcmNlbnQgc2lnbi4KKyAqCSclUyc6IE5hbWUgb2Ygc2VydmljZSAoZ2l0LXVwbG9hZC1wYWNrL2dpdC11cGxvYWQtYXJjaGl2ZS8KKyAqCQlnaXQtcmVjZWl2ZS1wYWNrLgorICoJJyVzJzogU2FtZSBhcyBccywgYnV0IHdpdGggcG9zc2libGUgZ2l0LSBwcmVmaXggc3RyaXBwZWQuCisgKgknJUcnOiBPbmx5IGFsbG93ZWQgYXMgZmlyc3QgJ2NoYXJhY3Rlcicgb2YgYXJndW1lbnQuIERvIG5vdCBwYXNzIHRoaXMKKyAqCQlBcmd1bWVudCB0byBjb21tYW5kLCBpbnN0ZWFkIHNlbmQgdGhpcyBhcyBuYW1lIG9mIHJlcG9zaXRvcnkKKyAqCQlpbiBpbi1saW5lIGdpdDovLy1zdHlsZSByZXF1ZXN0IChhbHNvIGFjdGl2YXRlcyBzZW5kaW5nIHRoaXMKKyAqCQlzdHlsZSBvZiByZXF1ZXN0KS4KKyAqCSclVic6IE9ubHkgYWxsb3dlZCBhcyBmaXJzdCAnY2hhcmFjdGVyJyBvZiBhcmd1bWVudC4gVXNlZCBpbgorICoJCWNvbmp1bmN0aW9uIHdpdGggJyVHJzogRG8gbm90IHBhc3MgdGhpcyBhcmd1bWVudCB0byBjb21tYW5kLAorICoJCWluc3RlYWQgc2VuZCB0aGlzIGFzIHZob3N0IGluIGdpdDovLy1zdHlsZSByZXF1ZXN0IChub3RlOiBkb2VzCisgKgkJbm90IGFjdGl2YXRlIHNlbmRpbmcgZ2l0Oi8vIHN0eWxlIHJlcXVlc3QpLgorICovCisKK3N0YXRpYyBjaGFyICpnaXRfcmVxOworc3RhdGljIGNoYXIgKmdpdF9yZXFfdmhvc3Q7CisKK3N0YXRpYyBjaGFyICpzdHJpcF9lc2NhcGVzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc2VydmljZSwKKwljb25zdCBjaGFyICoqbmV4dCkKK3sKKwlzaXplX3QgcnBvcyA9IDA7CisJaW50IGVzY2FwZSA9IDA7CisJY2hhciBzcGVjaWFsID0gMDsKKwlzaXplX3QgcHNvZmYgPSAwOworCXN0cnVjdCBzdHJidWYgcmV0ID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBDYWxjdWxhdGUgcHJlZml4IGxlbmd0aCBmb3IgXHMgYW5kIGxlbmd0aHMgZm9yIFxzIGFuZCBcUyAqLworCWlmICghc3RybmNtcChzZXJ2aWNlLCAiZ2l0LSIsIDQpKQorCQlwc29mZiA9IDQ7CisKKwkvKiBQYXNzIHRoZSBzZXJ2aWNlIHRvIGNvbW1hbmQuICovCisJc2V0ZW52KCJHSVRfRVhUX1NFUlZJQ0UiLCBzZXJ2aWNlLCAxKTsKKwlzZXRlbnYoIkdJVF9FWFRfU0VSVklDRV9OT1BSRUZJWCIsIHNlcnZpY2UgKyBwc29mZiwgMSk7CisKKwkvKiBTY2FuIHRoZSBsZW5ndGggb2YgYXJndW1lbnQuICovCisJd2hpbGUgKHN0cltycG9zXSAmJiAoZXNjYXBlIHx8IHN0cltycG9zXSAhPSAnICcpKSB7CisJCWlmIChlc2NhcGUpIHsKKwkJCXN3aXRjaCAoc3RyW3Jwb3NdKSB7CisJCQljYXNlICcgJzoKKwkJCWNhc2UgJyUnOgorCQkJY2FzZSAncyc6CisJCQljYXNlICdTJzoKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0cnOgorCQkJY2FzZSAnVic6CisJCQkJc3BlY2lhbCA9IHN0cltycG9zXTsKKwkJCQlpZiAocnBvcyA9PSAxKQorCQkJCQlicmVhazsKKwkJCQkvKiBGYWxsLXRocm91Z2ggdG8gZXJyb3IuICovCisJCQlkZWZhdWx0OgorCQkJCWRpZSgiQmFkIHJlbW90ZS1leHQgcGxhY2Vob2xkZXIgJyUlJWMnLiIsCisJCQkJCXN0cltycG9zXSk7CisJCQl9CisJCQllc2NhcGUgPSAwOworCQl9IGVsc2UKKwkJCWVzY2FwZSA9IChzdHJbcnBvc10gPT0gJyUnKTsKKwkJcnBvcysrOworCX0KKwlpZiAoZXNjYXBlICYmICFzdHJbcnBvc10pCisJCWRpZSgicmVtb3RlLWV4dCBjb21tYW5kIGhhcyBpbmNvbXBsZXRlIHBsYWNlaG9sZGVyIik7CisJKm5leHQgPSBzdHIgKyBycG9zOworCWlmICgqKm5leHQgPT0gJyAnKQorCQkrKypuZXh0OwkvKiBTa2lwIG92ZXIgc3BhY2UgKi8KKworCS8qCisJICogRG8gdGhlIGFjdHVhbCBwbGFjZWhvbGRlciBzdWJzdGl0dXRpb24uIFRoZSBzdHJpbmcgd2lsbCBiZSBzaG9ydAorCSAqIGVub3VnaCBub3QgdG8gb3ZlcmZsb3cgaW50ZWdlcnMuCisJICovCisJcnBvcyA9IHNwZWNpYWwgPyAyIDogMDsJCS8qIFNraXAgZmlyc3QgMiBieXRlcyBpbiBzcGVjaWFscy4gKi8KKwllc2NhcGUgPSAwOworCXdoaWxlIChzdHJbcnBvc10gJiYgKGVzY2FwZSB8fCBzdHJbcnBvc10gIT0gJyAnKSkgeworCQlpZiAoZXNjYXBlKSB7CisJCQlzd2l0Y2ggKHN0cltycG9zXSkgeworCQkJY2FzZSAnICc6CisJCQljYXNlICclJzoKKwkJCQlzdHJidWZfYWRkY2goJnJldCwgc3RyW3Jwb3NdKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCXN0cmJ1Zl9hZGRzdHIoJnJldCwgc2VydmljZSArIHBzb2ZmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1MnOgorCQkJCXN0cmJ1Zl9hZGRzdHIoJnJldCwgc2VydmljZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQllc2NhcGUgPSAwOworCQl9IGVsc2UKKwkJCXN3aXRjaCAoc3RyW3Jwb3NdKSB7CisJCQljYXNlICclJzoKKwkJCQllc2NhcGUgPSAxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdHJidWZfYWRkY2goJnJldCwgc3RyW3Jwb3NdKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJcnBvcysrOworCX0KKwlzd2l0Y2ggKHNwZWNpYWwpIHsKKwljYXNlICdHJzoKKwkJZ2l0X3JlcSA9IHN0cmJ1Zl9kZXRhY2goJnJldCwgTlVMTCk7CisJCXJldHVybiBOVUxMOworCWNhc2UgJ1YnOgorCQlnaXRfcmVxX3Zob3N0ID0gc3RyYnVmX2RldGFjaCgmcmV0LCBOVUxMKTsKKwkJcmV0dXJuIE5VTEw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnJldCwgTlVMTCk7CisJfQorfQorCisvKiBTaG91bGQgYmUgZW5vdWdoLi4uICovCisjZGVmaW5lIE1BWEFSR1VNRU5UUyAyNTYKKworc3RhdGljIGNvbnN0IGNoYXIgKipwYXJzZV9hcmd2KGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqc2VydmljZSkKK3sKKwlpbnQgYXJndW1lbnRzID0gMDsKKwlpbnQgaTsKKwljb25zdCBjaGFyICoqcmV0OworCWNoYXIgKnRlbXBhcnJheVtNQVhBUkdVTUVOVFMgKyAxXTsKKworCXdoaWxlICgqYXJnKSB7CisJCWNoYXIgKmV4cGFuZGVkOworCQlpZiAoYXJndW1lbnRzID09IE1BWEFSR1VNRU5UUykKKwkJCWRpZSgicmVtb3RlLWV4dCBjb21tYW5kIGhhcyB0b28gbWFueSBhcmd1bWVudHMiKTsKKwkJZXhwYW5kZWQgPSBzdHJpcF9lc2NhcGVzKGFyZywgc2VydmljZSwgJmFyZyk7CisJCWlmIChleHBhbmRlZCkKKwkJCXRlbXBhcnJheVthcmd1bWVudHMrK10gPSBleHBhbmRlZDsKKwl9CisKKwlyZXQgPSB4bWFsbG9jKChhcmd1bWVudHMgKyAxKSAqIHNpemVvZihjaGFyICopKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzOyBpKyspCisJCXJldFtpXSA9IHRlbXBhcnJheVtpXTsKKwlyZXRbYXJndW1lbnRzXSA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2VuZF9naXRfcmVxdWVzdChpbnQgc3RkaW5fZmQsIGNvbnN0IGNoYXIgKnNlcnYsIGNvbnN0IGNoYXIgKnJlcG8sCisJY29uc3QgY2hhciAqdmhvc3QpCit7CisJc2l6ZV90IGJ1ZmZlcnNwYWNlOworCXNpemVfdCB3cG9zID0gMDsKKwljaGFyICpidWZmZXI7CisKKwkvKgorCSAqIFJlcXVlc3QgbmVlZHMgMTIgYnl0ZXMgZXh0cmEgaWYgdGhlcmUgaXMgdmhvc3QgKHh4eHggXDBob3N0PVwwKSBhbmQKKwkgKiA2IGJ5dGVzIGV4dHJhICh4eHh4IFwwKSBpZiB0aGVyZSBpcyBubyB2aG9zdC4KKwkgKi8KKwlpZiAodmhvc3QpCisJCWJ1ZmZlcnNwYWNlID0gc3RybGVuKHNlcnYpICsgc3RybGVuKHJlcG8pICsgc3RybGVuKHZob3N0KSArIDEyOworCWVsc2UKKwkJYnVmZmVyc3BhY2UgPSBzdHJsZW4oc2VydikgKyBzdHJsZW4ocmVwbykgKyA2OworCisJaWYgKGJ1ZmZlcnNwYWNlID4gMHhGRkZGKQorCQlkaWUoIlJlcXVlc3QgdG9vIGxhcmdlIHRvIHNlbmQiKTsKKwlidWZmZXIgPSB4bWFsbG9jKGJ1ZmZlcnNwYWNlKTsKKworCS8qIE1ha2UgdGhlIHBhY2tldC4gKi8KKwl3cG9zID0gc3ByaW50ZihidWZmZXIsICIlMDR4JXMgJXMlYyIsICh1bnNpZ25lZClidWZmZXJzcGFjZSwKKwkJc2VydiwgcmVwbywgMCk7CisKKwkvKiBBZGQgdmhvc3QgaWYgYW55LiAqLworCWlmICh2aG9zdCkKKwkJc3ByaW50ZihidWZmZXIgKyB3cG9zLCAiaG9zdD0lcyVjIiwgdmhvc3QsIDApOworCisJLyogU2VuZCB0aGUgcmVxdWVzdCAqLworCWlmICh3cml0ZV9pbl9mdWxsKHN0ZGluX2ZkLCBidWZmZXIsIGJ1ZmZlcnNwYWNlKSA8IDApCisJCWRpZV9lcnJubygiRmFpbGVkIHRvIHNlbmQgcmVxdWVzdCIpOworCisJZnJlZShidWZmZXIpOworfQorCitzdGF0aWMgaW50IHJ1bl9jaGlsZChjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKnNlcnZpY2UpCit7CisJaW50IHI7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQ7CisKKwltZW1zZXQoJmNoaWxkLCAwLCBzaXplb2YoY2hpbGQpKTsKKwljaGlsZC5pbiA9IC0xOworCWNoaWxkLm91dCA9IC0xOworCWNoaWxkLmVyciA9IDA7CisJY2hpbGQuYXJndiA9IHBhcnNlX2FyZ3YoYXJnLCBzZXJ2aWNlKTsKKworCWlmIChzdGFydF9jb21tYW5kKCZjaGlsZCkgPCAwKQorCQlkaWUoIkNhbid0IHJ1biBzcGVjaWZpZWQgY29tbWFuZCIpOworCisJaWYgKGdpdF9yZXEpCisJCXNlbmRfZ2l0X3JlcXVlc3QoY2hpbGQuaW4sIHNlcnZpY2UsIGdpdF9yZXEsIGdpdF9yZXFfdmhvc3QpOworCisJciA9IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfbG9vcChjaGlsZC5vdXQsIGNoaWxkLmluKTsKKwlpZiAoIXIpCisJCXIgPSBmaW5pc2hfY29tbWFuZCgmY2hpbGQpOworCWVsc2UKKwkJZmluaXNoX2NvbW1hbmQoJmNoaWxkKTsKKwlyZXR1cm4gcjsKK30KKworI2RlZmluZSBNQVhDT01NQU5EIDQwOTYKKworc3RhdGljIGludCBjb21tYW5kX2xvb3AoY29uc3QgY2hhciAqY2hpbGQpCit7CisJY2hhciBidWZmZXJbTUFYQ09NTUFORF07CisKKwl3aGlsZSAoMSkgeworCQlzaXplX3QgaTsKKwkJaWYgKCFmZ2V0cyhidWZmZXIsIE1BWENPTU1BTkQgLSAxLCBzdGRpbikpIHsKKwkJCWlmIChmZXJyb3Ioc3RkaW4pKQorCQkJCWRpZSgiQ29tYW1tYW5kIGlucHV0IGVycm9yIik7CisJCQlleGl0KDApOworCQl9CisJCS8qIFN0cmlwIGVuZCBvZiBsaW5lIGNoYXJhY3RlcnMuICovCisJCWkgPSBzdHJsZW4oYnVmZmVyKTsKKwkJd2hpbGUgKGkgPiAwICYmIGlzc3BhY2UoYnVmZmVyW2kgLSAxXSkpCisJCQlidWZmZXJbLS1pXSA9IDA7CisKKwkJaWYgKCFzdHJjbXAoYnVmZmVyLCAiY2FwYWJpbGl0aWVzIikpIHsKKwkJCXByaW50ZigiKmNvbm5lY3RcblxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfSBlbHNlIGlmICghc3RybmNtcChidWZmZXIsICJjb25uZWN0ICIsIDgpKSB7CisJCQlwcmludGYoIlxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCXJldHVybiBydW5fY2hpbGQoY2hpbGQsIGJ1ZmZlciArIDgpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJCYWQgY29tbWFuZCIpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9Cit9CisKK2ludCBjbWRfcmVtb3RlX2V4dChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpZiAoYXJnYyAhPSAzKQorCQlkaWUoIkV4cGVjdGVkIHR3byBhcmd1bWVudHMiKTsKKworCXJldHVybiBjb21tYW5kX2xvb3AoYXJndlsyXSk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlbW90ZS1mZC5jIGIvYnVpbHRpbi9yZW1vdGUtZmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGQ3MTIxCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZW1vdGUtZmQuYwpAQCAtMCwwICsxLDc5IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorCisvKgorICogVVJMIHN5bnRheDoKKyAqCSdmZDo6PGlub3V0ZmQ+Wy88YW55dGhpbmc+XScJCVJlYWQvd3JpdGUgc29ja2V0IHBhaXIKKyAqCQkJCQkJPGlub3V0ZmQ+LgorICoJJ2ZkOjo8aW5mZD4sPG91dGZkPlsvPGFueXRoaW5nPl0nCVJlYWQgcGlwZSA8aW5mZD4gYW5kIHdyaXRlCisgKgkJCQkJCXBpcGUgPG91dGZkPi4KKyAqCVtmb29dIGluZGljYXRlcyAnZm9vJyBpcyBvcHRpb25hbC4gPGFueXRoaW5nPiBpcyBhbnkgc3RyaW5nLgorICoKKyAqIFRoZSBkYXRhIG91dHB1dCB0byA8b3V0ZmQ+Lzxpbm91dGZkPiBzaG91bGQgYmUgcGFzc2VkIHVubW9sZXN0ZWQgdG8KKyAqIGdpdC1yZWNlaXZlLXBhY2svZ2l0LXVwbG9hZC1wYWNrL2dpdC11cGxvYWQtYXJjaGl2ZSBhbmQgb3V0cHV0IG9mCisgKiBnaXQtcmVjZWl2ZS1wYWNrL2dpdC11cGxvYWQtcGFjay9naXQtdXBsb2FkLWFyY2hpdmUgc2hvdWxkIGJlIHBhc3NlZAorICogdW5tb2xlc3RlZCB0byA8aW5mZD4vPGlub3V0ZmQ+LgorICoKKyAqLworCisjZGVmaW5lIE1BWENPTU1BTkQgNDA5NgorCitzdGF0aWMgdm9pZCBjb21tYW5kX2xvb3AoaW50IGlucHV0X2ZkLCBpbnQgb3V0cHV0X2ZkKQoreworCWNoYXIgYnVmZmVyW01BWENPTU1BTkRdOworCisJd2hpbGUgKDEpIHsKKwkJc2l6ZV90IGk7CisJCWlmICghZmdldHMoYnVmZmVyLCBNQVhDT01NQU5EIC0gMSwgc3RkaW4pKSB7CisJCQlpZiAoZmVycm9yKHN0ZGluKSkKKwkJCQlkaWUoIklucHV0IGVycm9yIik7CisJCQlyZXR1cm47CisJCX0KKwkJLyogU3RyaXAgZW5kIG9mIGxpbmUgY2hhcmFjdGVycy4gKi8KKwkJaSA9IHN0cmxlbihidWZmZXIpOworCQl3aGlsZSAoaSA+IDAgJiYgaXNzcGFjZShidWZmZXJbaSAtIDFdKSkKKwkJCWJ1ZmZlclstLWldID0gMDsKKworCQlpZiAoIXN0cmNtcChidWZmZXIsICJjYXBhYmlsaXRpZXMiKSkgeworCQkJcHJpbnRmKCIqY29ubmVjdFxuXG4iKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZmZlciwgImNvbm5lY3QgIiwgOCkpIHsKKwkJCXByaW50ZigiXG4iKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQkJaWYgKGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfbG9vcChpbnB1dF9mZCwKKwkJCQlvdXRwdXRfZmQpKQorCQkJCWRpZSgiQ29weWluZyBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycyBmYWlsZWQiKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCWRpZSgiQmFkIGNvbW1hbmQ6ICVzIiwgYnVmZmVyKTsKKwkJfQorCX0KK30KKworaW50IGNtZF9yZW1vdGVfZmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGlucHV0X2ZkID0gLTE7CisJaW50IG91dHB1dF9mZCA9IC0xOworCWNoYXIgKmVuZDsKKworCWlmIChhcmdjICE9IDMpCisJCWRpZSgiRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cyIpOworCisJaW5wdXRfZmQgPSAoaW50KXN0cnRvdWwoYXJndlsyXSwgJmVuZCwgMTApOworCisJaWYgKChlbmQgPT0gYXJndlsyXSkgfHwgKCplbmQgIT0gJywnICYmICplbmQgIT0gJy8nICYmICplbmQpKQorCQlkaWUoIkJhZCBVUkwgc3ludGF4Iik7CisKKwlpZiAoKmVuZCA9PSAnLycgfHwgISplbmQpIHsKKwkJb3V0cHV0X2ZkID0gaW5wdXRfZmQ7CisJfSBlbHNlIHsKKwkJY2hhciAqZW5kMjsKKwkJb3V0cHV0X2ZkID0gKGludClzdHJ0b3VsKGVuZCArIDEsICZlbmQyLCAxMCk7CisKKwkJaWYgKChlbmQyID09IGVuZCArIDEpIHx8ICgqZW5kMiAhPSAnLycgJiYgKmVuZDIpKQorCQkJZGllKCJCYWQgVVJMIHN5bnRheCIpOworCX0KKworCWNvbW1hbmRfbG9vcChpbnB1dF9mZCwgb3V0cHV0X2ZkKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVtb3RlLmMgYi9idWlsdGluL3JlbW90ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTRiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlbW90ZS5jCkBAIC0wLDAgKzEsMTYwMyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iKSwKKwlOXygiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFnc3wtLW5vLXRhZ3NdIFstLW1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIpLAorCU5fKCJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIpLAorCU5fKCJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLWQgfCA8YnJhbmNoPikiKSwKKwlOXygiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iKSwKKwlOXygiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIpLAorCU5fKCJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIiksCisJTl8oImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfYWRkX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfcmVuYW1lX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9ybV91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3NldGhlYWRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLWQgfCA8YnJhbmNoPl0pIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9zZXRicmFuY2hlc191c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9zaG93X3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3BydW5lX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV91cGRhdGVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3NldHVybF91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IiksCisJTlVMTAorfTsKKworI2RlZmluZSBHRVRfUkVGX1NUQVRFUyAoMTw8MCkKKyNkZWZpbmUgR0VUX0hFQURfTkFNRVMgKDE8PDEpCisjZGVmaW5lIEdFVF9QVVNIX1JFRl9TVEFURVMgKDE8PDIpCisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKKworc3RhdGljIGludCBzaG93X2FsbCh2b2lkKTsKK3N0YXRpYyBpbnQgcHJ1bmVfcmVtb3RlKGNvbnN0IGNoYXIgKnJlbW90ZSwgaW50IGRyeV9ydW4pOworCitzdGF0aWMgaW5saW5lIGludCBwb3N0Zml4Y21wKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqcG9zdGZpeCkKK3sKKwlpbnQgbGVuMSA9IHN0cmxlbihzdHJpbmcpLCBsZW4yID0gc3RybGVuKHBvc3RmaXgpOworCWlmIChsZW4xIDwgbGVuMikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIHN0cmNtcChzdHJpbmcgKyBsZW4xIC0gbGVuMiwgcG9zdGZpeCk7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfcmVtb3RlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3QgY2hhciAqYXJndltdID0geyAiZmV0Y2giLCBuYW1lLCBOVUxMLCBOVUxMIH07CisJaWYgKHZlcmJvc2UpIHsKKwkJYXJndlsxXSA9ICItdiI7CisJCWFyZ3ZbMl0gPSBuYW1lOworCX0KKwlwcmludGZfbG4oXygiVXBkYXRpbmcgJXMiKSwgbmFtZSk7CisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9HSVRfQ01EKSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBmZXRjaCAlcyIpLCBuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworZW51bSB7CisJVEFHU19VTlNFVCA9IDAsCisJVEFHU19ERUZBVUxUID0gMSwKKwlUQUdTX1NFVCA9IDIKK307CisKKyNkZWZpbmUgTUlSUk9SX05PTkUgMAorI2RlZmluZSBNSVJST1JfRkVUQ0ggMQorI2RlZmluZSBNSVJST1JfUFVTSCAyCisjZGVmaW5lIE1JUlJPUl9CT1RIIChNSVJST1JfRkVUQ0h8TUlSUk9SX1BVU0gpCisKK3N0YXRpYyBpbnQgYWRkX2JyYW5jaChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmJyYW5jaG5hbWUsCisJCWNvbnN0IGNoYXIgKnJlbW90ZW5hbWUsIGludCBtaXJyb3IsIHN0cnVjdCBzdHJidWYgKnRtcCkKK3sKKwlzdHJidWZfcmVzZXQodG1wKTsKKwlzdHJidWZfYWRkY2godG1wLCAnKycpOworCWlmIChtaXJyb3IpCisJCXN0cmJ1Zl9hZGRmKHRtcCwgInJlZnMvJXM6cmVmcy8lcyIsCisJCQkJYnJhbmNobmFtZSwgYnJhbmNobmFtZSk7CisJZWxzZQorCQlzdHJidWZfYWRkZih0bXAsICJyZWZzL2hlYWRzLyVzOnJlZnMvcmVtb3Rlcy8lcy8lcyIsCisJCQkJYnJhbmNobmFtZSwgcmVtb3RlbmFtZSwgYnJhbmNobmFtZSk7CisJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGtleSwgdG1wLT5idWYsICJeJCIsIDApOworfQorCitzdGF0aWMgY29uc3QgY2hhciBtaXJyb3JfYWR2aWNlW10gPQorTl8oIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisgICAiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIpOworCitzdGF0aWMgaW50IHBhcnNlX21pcnJvcl9vcHQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCBub3QpCit7CisJdW5zaWduZWQgKm1pcnJvciA9IG9wdC0+dmFsdWU7CisJaWYgKG5vdCkKKwkJKm1pcnJvciA9IE1JUlJPUl9OT05FOworCWVsc2UgaWYgKCFhcmcpIHsKKwkJd2FybmluZygiJXMiLCBfKG1pcnJvcl9hZHZpY2UpKTsKKwkJKm1pcnJvciA9IE1JUlJPUl9CT1RIOworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgImZldGNoIikpCisJCSptaXJyb3IgPSBNSVJST1JfRkVUQ0g7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJwdXNoIikpCisJCSptaXJyb3IgPSBNSVJST1JfUFVTSDsKKwllbHNlCisJCXJldHVybiBlcnJvcihfKCJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiKSwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBmZXRjaCA9IDAsIGZldGNoX3RhZ3MgPSBUQUdTX0RFRkFVTFQ7CisJdW5zaWduZWQgbWlycm9yID0gTUlSUk9SX05PTkU7CisJc3RydWN0IHN0cmluZ19saXN0IHRyYWNrID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwljb25zdCBjaGFyICptYXN0ZXIgPSBOVUxMOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBidWYyID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqbmFtZSwgKnVybDsKKwlpbnQgaTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTignZicsICJmZXRjaCIsICZmZXRjaCwgTl8oImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiKSksCisJCU9QVF9TRVRfSU5UKDAsICJ0YWdzIiwgJmZldGNoX3RhZ3MsCisJCQkgICAgTl8oImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciKSwKKwkJCSAgICBUQUdTX1NFVCksCisJCU9QVF9TRVRfSU5UKDAsIE5VTEwsICZmZXRjaF90YWdzLAorCQkJICAgIE5fKCJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiKSwgVEFHU19VTlNFVCksCisJCU9QVF9TVFJJTkdfTElTVCgndCcsICJ0cmFjayIsICZ0cmFjaywgTl8oImJyYW5jaCIpLAorCQkJCU5fKCJicmFuY2goZXMpIHRvIHRyYWNrIikpLAorCQlPUFRfU1RSSU5HKCdtJywgIm1hc3RlciIsICZtYXN0ZXIsIE5fKCJicmFuY2giKSwgTl8oIm1hc3RlciBicmFuY2giKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAibWlycm9yIiwgJm1pcnJvciwgTl8oInB1c2h8ZmV0Y2giKSwKKwkJCU5fKCJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIpLAorCQkJUEFSU0VfT1BUX09QVEFSRywgcGFyc2VfbWlycm9yX29wdCB9LAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfYWRkX3VzYWdlLAorCQkJICAgICAwKTsKKworCWlmIChhcmdjIDwgMikKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX2FkZF91c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAobWlycm9yICYmIG1hc3RlcikKKwkJZGllKF8oInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiKSk7CisJaWYgKG1pcnJvciAmJiAhKG1pcnJvciAmIE1JUlJPUl9GRVRDSCkgJiYgdHJhY2subnIpCisJCWRpZShfKCJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIikpOworCisJbmFtZSA9IGFyZ3ZbMF07CisJdXJsID0gYXJndlsxXTsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQobmFtZSk7CisJaWYgKHJlbW90ZSAmJiAocmVtb3RlLT51cmxfbnIgPiAxIHx8IHN0cmNtcChuYW1lLCByZW1vdGUtPnVybFswXSkgfHwKKwkJCXJlbW90ZS0+ZmV0Y2hfcmVmc3BlY19ucikpCisJCWRpZShfKCJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIiksIG5hbWUpOworCisJc3RyYnVmX2FkZGYoJmJ1ZjIsICJyZWZzL2hlYWRzL3Rlc3Q6cmVmcy9yZW1vdGVzLyVzL3Rlc3QiLCBuYW1lKTsKKwlpZiAoIXZhbGlkX2ZldGNoX3JlZnNwZWMoYnVmMi5idWYpKQorCQlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIpLCBuYW1lKTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMudXJsIiwgbmFtZSk7CisJaWYgKGdpdF9jb25maWdfc2V0KGJ1Zi5idWYsIHVybCkpCisJCXJldHVybiAxOworCisJaWYgKCFtaXJyb3IgfHwgbWlycm9yICYgTUlSUk9SX0ZFVENIKSB7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy5mZXRjaCIsIG5hbWUpOworCQlpZiAodHJhY2subnIgPT0gMCkKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmdHJhY2ssICIqIik7CisJCWZvciAoaSA9IDA7IGkgPCB0cmFjay5ucjsgaSsrKSB7CisJCQlpZiAoYWRkX2JyYW5jaChidWYuYnVmLCB0cmFjay5pdGVtc1tpXS5zdHJpbmcsCisJCQkJICAgICAgIG5hbWUsIG1pcnJvciwgJmJ1ZjIpKQorCQkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKG1pcnJvciAmIE1JUlJPUl9QVVNIKSB7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy5taXJyb3IiLCBuYW1lKTsKKwkJaWYgKGdpdF9jb25maWdfc2V0KGJ1Zi5idWYsICJ0cnVlIikpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoZmV0Y2hfdGFncyAhPSBUQUdTX0RFRkFVTFQpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzLnRhZ29wdCIsIG5hbWUpOworCQlpZiAoZ2l0X2NvbmZpZ19zZXQoYnVmLmJ1ZiwKKwkJCWZldGNoX3RhZ3MgPT0gVEFHU19TRVQgPyAiLS10YWdzIiA6ICItLW5vLXRhZ3MiKSkKKwkJCXJldHVybiAxOworCX0KKworCWlmIChmZXRjaCAmJiBmZXRjaF9yZW1vdGUobmFtZSkpCisJCXJldHVybiAxOworCisJaWYgKG1hc3RlcikgeworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL3JlbW90ZXMvJXMvSEVBRCIsIG5hbWUpOworCisJCXN0cmJ1Zl9yZXNldCgmYnVmMik7CisJCXN0cmJ1Zl9hZGRmKCZidWYyLCAicmVmcy9yZW1vdGVzLyVzLyVzIiwgbmFtZSwgbWFzdGVyKTsKKworCQlpZiAoY3JlYXRlX3N5bXJlZihidWYuYnVmLCBidWYyLmJ1ZiwgInJlbW90ZSBhZGQiKSkKKwkJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciKSwgbWFzdGVyKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmMik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnRyYWNrLCAwKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnJhbmNoX2luZm8geworCWNoYXIgKnJlbW90ZV9uYW1lOworCXN0cnVjdCBzdHJpbmdfbGlzdCBtZXJnZTsKKwlpbnQgcmViYXNlOworfTsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBicmFuY2hfbGlzdDsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFiYnJldl9yZWYoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKmFiYnJldiA9IHNraXBfcHJlZml4KG5hbWUsIHByZWZpeCk7CisJaWYgKGFiYnJldikKKwkJcmV0dXJuIGFiYnJldjsKKwlyZXR1cm4gbmFtZTsKK30KKyNkZWZpbmUgYWJicmV2X2JyYW5jaChuYW1lKSBhYmJyZXZfcmVmKChuYW1lKSwgInJlZnMvaGVhZHMvIikKKworc3RhdGljIGludCBjb25maWdfcmVhZF9icmFuY2hlcyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXByZWZpeGNtcChrZXksICJicmFuY2guIikpIHsKKwkJY29uc3QgY2hhciAqb3JpZ19rZXkgPSBrZXk7CisJCWNoYXIgKm5hbWU7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlzdHJ1Y3QgYnJhbmNoX2luZm8gKmluZm87CisJCWVudW0geyBSRU1PVEUsIE1FUkdFLCBSRUJBU0UgfSB0eXBlOworCisJCWtleSArPSA3OworCQlpZiAoIXBvc3RmaXhjbXAoa2V5LCAiLnJlbW90ZSIpKSB7CisJCQluYW1lID0geHN0cm5kdXAoa2V5LCBzdHJsZW4oa2V5KSAtIDcpOworCQkJdHlwZSA9IFJFTU9URTsKKwkJfSBlbHNlIGlmICghcG9zdGZpeGNtcChrZXksICIubWVyZ2UiKSkgeworCQkJbmFtZSA9IHhzdHJuZHVwKGtleSwgc3RybGVuKGtleSkgLSA2KTsKKwkJCXR5cGUgPSBNRVJHRTsKKwkJfSBlbHNlIGlmICghcG9zdGZpeGNtcChrZXksICIucmViYXNlIikpIHsKKwkJCW5hbWUgPSB4c3RybmR1cChrZXksIHN0cmxlbihrZXkpIC0gNyk7CisJCQl0eXBlID0gUkVCQVNFOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworCisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJmJyYW5jaF9saXN0LCBuYW1lKTsKKworCQlpZiAoIWl0ZW0tPnV0aWwpCisJCQlpdGVtLT51dGlsID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGJyYW5jaF9pbmZvKSwgMSk7CisJCWluZm8gPSBpdGVtLT51dGlsOworCQlpZiAodHlwZSA9PSBSRU1PVEUpIHsKKwkJCWlmIChpbmZvLT5yZW1vdGVfbmFtZSkKKwkJCQl3YXJuaW5nKF8oIm1vcmUgdGhhbiBvbmUgJXMiKSwgb3JpZ19rZXkpOworCQkJaW5mby0+cmVtb3RlX25hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICh0eXBlID09IE1FUkdFKSB7CisJCQljaGFyICpzcGFjZSA9IHN0cmNocih2YWx1ZSwgJyAnKTsKKwkJCXZhbHVlID0gYWJicmV2X2JyYW5jaCh2YWx1ZSk7CisJCQl3aGlsZSAoc3BhY2UpIHsKKwkJCQljaGFyICptZXJnZTsKKwkJCQltZXJnZSA9IHhzdHJuZHVwKHZhbHVlLCBzcGFjZSAtIHZhbHVlKTsKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmluZm8tPm1lcmdlLCBtZXJnZSk7CisJCQkJdmFsdWUgPSBhYmJyZXZfYnJhbmNoKHNwYWNlICsgMSk7CisJCQkJc3BhY2UgPSBzdHJjaHIodmFsdWUsICcgJyk7CisJCQl9CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmluZm8tPm1lcmdlLCB4c3RyZHVwKHZhbHVlKSk7CisJCX0gZWxzZQorCQkJaW5mby0+cmViYXNlID0gZ2l0X2NvbmZpZ19ib29sKG9yaWdfa2V5LCB2YWx1ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWFkX2JyYW5jaGVzKHZvaWQpCit7CisJaWYgKGJyYW5jaF9saXN0Lm5yKQorCQlyZXR1cm47CisJZ2l0X2NvbmZpZyhjb25maWdfcmVhZF9icmFuY2hlcywgTlVMTCk7Cit9CisKK3N0cnVjdCByZWZfc3RhdGVzIHsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHN0cmluZ19saXN0IG5ldywgc3RhbGUsIHRyYWNrZWQsIGhlYWRzLCBwdXNoOworCWludCBxdWVyaWVkOworfTsKKworc3RhdGljIGludCBnZXRfcmVmX3N0YXRlcyhjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlzdHJ1Y3QgcmVmICpmZXRjaF9tYXAgPSBOVUxMLCAqKnRhaWwgPSAmZmV0Y2hfbWFwOworCXN0cnVjdCByZWYgKnJlZiwgKnN0YWxlX3JlZnM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGVzLT5yZW1vdGUtPmZldGNoX3JlZnNwZWNfbnI7IGkrKykKKwkJaWYgKGdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsIHN0YXRlcy0+cmVtb3RlLT5mZXRjaCArIGksICZ0YWlsLCAxKSkKKwkJCWRpZShfKCJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIpLAorCQkJCXN0YXRlcy0+cmVtb3RlLT5mZXRjaF9yZWZzcGVjW2ldKTsKKworCXN0YXRlcy0+bmV3LnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdGF0ZXMtPnRyYWNrZWQuc3RyZHVwX3N0cmluZ3MgPSAxOworCXN0YXRlcy0+c3RhbGUuc3RyZHVwX3N0cmluZ3MgPSAxOworCWZvciAocmVmID0gZmV0Y2hfbWFwOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoIXJlZi0+cGVlcl9yZWYgfHwgIXJlZl9leGlzdHMocmVmLT5wZWVyX3JlZi0+bmFtZSkpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+bmV3LCBhYmJyZXZfYnJhbmNoKHJlZi0+bmFtZSkpOworCQllbHNlCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+dHJhY2tlZCwgYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpKTsKKwl9CisJc3RhbGVfcmVmcyA9IGdldF9zdGFsZV9oZWFkcyhzdGF0ZXMtPnJlbW90ZS0+ZmV0Y2gsCisJCQkJICAgICBzdGF0ZXMtPnJlbW90ZS0+ZmV0Y2hfcmVmc3BlY19uciwgZmV0Y2hfbWFwKTsKKwlmb3IgKHJlZiA9IHN0YWxlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0KKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLT5zdGFsZSwgYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpKTsKKwkJaXRlbS0+dXRpbCA9IHhzdHJkdXAocmVmLT5uYW1lKTsKKwl9CisJZnJlZV9yZWZzKHN0YWxlX3JlZnMpOworCWZyZWVfcmVmcyhmZXRjaF9tYXApOworCisJc29ydF9zdHJpbmdfbGlzdCgmc3RhdGVzLT5uZXcpOworCXNvcnRfc3RyaW5nX2xpc3QoJnN0YXRlcy0+dHJhY2tlZCk7CisJc29ydF9zdHJpbmdfbGlzdCgmc3RhdGVzLT5zdGFsZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHB1c2hfaW5mbyB7CisJY2hhciAqZGVzdDsKKwlpbnQgZm9yY2VkOworCWVudW0geworCQlQVVNIX1NUQVRVU19DUkVBVEUgPSAwLAorCQlQVVNIX1NUQVRVU19ERUxFVEUsCisJCVBVU0hfU1RBVFVTX1VQVE9EQVRFLAorCQlQVVNIX1NUQVRVU19GQVNURk9SV0FSRCwKKwkJUFVTSF9TVEFUVVNfT1VUT0ZEQVRFLAorCQlQVVNIX1NUQVRVU19OT1RRVUVSSUVECisJfSBzdGF0dXM7Cit9OworCitzdGF0aWMgaW50IGdldF9wdXNoX3JlZl9zdGF0ZXMoY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCisJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSBzdGF0ZXMtPnJlbW90ZTsKKwlzdHJ1Y3QgcmVmICpyZWYsICpsb2NhbF9yZWZzLCAqcHVzaF9tYXA7CisJaWYgKHJlbW90ZS0+bWlycm9yKQorCQlyZXR1cm4gMDsKKworCWxvY2FsX3JlZnMgPSBnZXRfbG9jYWxfaGVhZHMoKTsKKwlwdXNoX21hcCA9IGNvcHlfcmVmX2xpc3QocmVtb3RlX3JlZnMpOworCisJbWF0Y2hfcHVzaF9yZWZzKGxvY2FsX3JlZnMsICZwdXNoX21hcCwgcmVtb3RlLT5wdXNoX3JlZnNwZWNfbnIsCisJCQlyZW1vdGUtPnB1c2hfcmVmc3BlYywgTUFUQ0hfUkVGU19OT05FKTsKKworCXN0YXRlcy0+cHVzaC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJZm9yIChyZWYgPSBwdXNoX21hcDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCXN0cnVjdCBwdXNoX2luZm8gKmluZm87CisKKwkJaWYgKCFyZWYtPnBlZXJfcmVmKQorCQkJY29udGludWU7CisJCWhhc2hjcHkocmVmLT5uZXdfc2hhMSwgcmVmLT5wZWVyX3JlZi0+bmV3X3NoYTEpOworCisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+cHVzaCwKKwkJCQkJICBhYmJyZXZfYnJhbmNoKHJlZi0+cGVlcl9yZWYtPm5hbWUpKTsKKwkJaXRlbS0+dXRpbCA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBwdXNoX2luZm8pLCAxKTsKKwkJaW5mbyA9IGl0ZW0tPnV0aWw7CisJCWluZm8tPmZvcmNlZCA9IHJlZi0+Zm9yY2U7CisJCWluZm8tPmRlc3QgPSB4c3RyZHVwKGFiYnJldl9icmFuY2gocmVmLT5uYW1lKSk7CisKKwkJaWYgKGlzX251bGxfc2hhMShyZWYtPm5ld19zaGExKSkgeworCQkJaW5mby0+c3RhdHVzID0gUFVTSF9TVEFUVVNfREVMRVRFOworCQl9IGVsc2UgaWYgKCFoYXNoY21wKHJlZi0+b2xkX3NoYTEsIHJlZi0+bmV3X3NoYTEpKQorCQkJaW5mby0+c3RhdHVzID0gUFVTSF9TVEFUVVNfVVBUT0RBVEU7CisJCWVsc2UgaWYgKGlzX251bGxfc2hhMShyZWYtPm9sZF9zaGExKSkKKwkJCWluZm8tPnN0YXR1cyA9IFBVU0hfU1RBVFVTX0NSRUFURTsKKwkJZWxzZSBpZiAoaGFzX3NoYTFfZmlsZShyZWYtPm9sZF9zaGExKSAmJgorCQkJIHJlZl9uZXdlcihyZWYtPm5ld19zaGExLCByZWYtPm9sZF9zaGExKSkKKwkJCWluZm8tPnN0YXR1cyA9IFBVU0hfU1RBVFVTX0ZBU1RGT1JXQVJEOworCQllbHNlCisJCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19PVVRPRkRBVEU7CisJfQorCWZyZWVfcmVmcyhsb2NhbF9yZWZzKTsKKwlmcmVlX3JlZnMocHVzaF9tYXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9wdXNoX3JlZl9zdGF0ZXNfbm9xdWVyeShzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzKQoreworCWludCBpOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IHN0YXRlcy0+cmVtb3RlOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBwdXNoX2luZm8gKmluZm87CisKKwlpZiAocmVtb3RlLT5taXJyb3IpCisJCXJldHVybiAwOworCisJc3RhdGVzLT5wdXNoLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlpZiAoIXJlbW90ZS0+cHVzaF9yZWZzcGVjX25yKSB7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+cHVzaCwgXygiKG1hdGNoaW5nKSIpKTsKKwkJaW5mbyA9IGl0ZW0tPnV0aWwgPSB4Y2FsbG9jKHNpemVvZihzdHJ1Y3QgcHVzaF9pbmZvKSwgMSk7CisJCWluZm8tPnN0YXR1cyA9IFBVU0hfU1RBVFVTX05PVFFVRVJJRUQ7CisJCWluZm8tPmRlc3QgPSB4c3RyZHVwKGl0ZW0tPnN0cmluZyk7CisJfQorCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPnB1c2hfcmVmc3BlY19ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZzcGVjICpzcGVjID0gcmVtb3RlLT5wdXNoICsgaTsKKwkJaWYgKHNwZWMtPm1hdGNoaW5nKQorCQkJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLT5wdXNoLCBfKCIobWF0Y2hpbmcpIikpOworCQllbHNlIGlmIChzdHJsZW4oc3BlYy0+c3JjKSkKKwkJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+cHVzaCwgc3BlYy0+c3JjKTsKKwkJZWxzZQorCQkJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLT5wdXNoLCBfKCIoZGVsZXRlKSIpKTsKKworCQlpbmZvID0gaXRlbS0+dXRpbCA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBwdXNoX2luZm8pLCAxKTsKKwkJaW5mby0+Zm9yY2VkID0gc3BlYy0+Zm9yY2U7CisJCWluZm8tPnN0YXR1cyA9IFBVU0hfU1RBVFVTX05PVFFVRVJJRUQ7CisJCWluZm8tPmRlc3QgPSB4c3RyZHVwKHNwZWMtPmRzdCA/IHNwZWMtPmRzdCA6IGl0ZW0tPnN0cmluZyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9oZWFkX25hbWVzKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzKQoreworCXN0cnVjdCByZWYgKnJlZiwgKm1hdGNoZXM7CisJc3RydWN0IHJlZiAqZmV0Y2hfbWFwID0gTlVMTCwgKipmZXRjaF9tYXBfdGFpbCA9ICZmZXRjaF9tYXA7CisJc3RydWN0IHJlZnNwZWMgcmVmc3BlYzsKKworCXJlZnNwZWMuZm9yY2UgPSAwOworCXJlZnNwZWMucGF0dGVybiA9IDE7CisJcmVmc3BlYy5zcmMgPSByZWZzcGVjLmRzdCA9ICJyZWZzL2hlYWRzLyoiOworCXN0YXRlcy0+aGVhZHMuc3RyZHVwX3N0cmluZ3MgPSAxOworCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsICZyZWZzcGVjLCAmZmV0Y2hfbWFwX3RhaWwsIDApOworCW1hdGNoZXMgPSBndWVzc19yZW1vdGVfaGVhZChmaW5kX3JlZl9ieV9uYW1lKHJlbW90ZV9yZWZzLCAiSEVBRCIpLAorCQkJCSAgICBmZXRjaF9tYXAsIDEpOworCWZvciAocmVmID0gbWF0Y2hlczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLT5oZWFkcywgYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpKTsKKworCWZyZWVfcmVmcyhmZXRjaF9tYXApOworCWZyZWVfcmVmcyhtYXRjaGVzKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qga25vd25fcmVtb3RlIHsKKwlzdHJ1Y3Qga25vd25fcmVtb3RlICpuZXh0OworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKK307CisKK3N0cnVjdCBrbm93bl9yZW1vdGVzIHsKKwlzdHJ1Y3QgcmVtb3RlICp0b19kZWxldGU7CisJc3RydWN0IGtub3duX3JlbW90ZSAqbGlzdDsKK307CisKK3N0YXRpYyBpbnQgYWRkX2tub3duX3JlbW90ZShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGtub3duX3JlbW90ZXMgKmFsbCA9IGNiX2RhdGE7CisJc3RydWN0IGtub3duX3JlbW90ZSAqcjsKKworCWlmICghc3RyY21wKGFsbC0+dG9fZGVsZXRlLT5uYW1lLCByZW1vdGUtPm5hbWUpKQorCQlyZXR1cm4gMDsKKworCXIgPSB4bWFsbG9jKHNpemVvZigqcikpOworCXItPnJlbW90ZSA9IHJlbW90ZTsKKwlyLT5uZXh0ID0gYWxsLT5saXN0OworCWFsbC0+bGlzdCA9IHI7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBicmFuY2hlc19mb3JfcmVtb3RlIHsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHN0cmluZ19saXN0ICpicmFuY2hlcywgKnNraXBwZWQ7CisJc3RydWN0IGtub3duX3JlbW90ZXMgKmtlZXA7Cit9OworCitzdGF0aWMgaW50IGFkZF9icmFuY2hfZm9yX3JlbW92YWwoY29uc3QgY2hhciAqcmVmbmFtZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGJyYW5jaGVzX2Zvcl9yZW1vdGUgKmJyYW5jaGVzID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmc3BlYyByZWZzcGVjOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBrbm93bl9yZW1vdGUgKmtyOworCisJbWVtc2V0KCZyZWZzcGVjLCAwLCBzaXplb2YocmVmc3BlYykpOworCXJlZnNwZWMuZHN0ID0gKGNoYXIgKilyZWZuYW1lOworCWlmIChyZW1vdGVfZmluZF90cmFja2luZyhicmFuY2hlcy0+cmVtb3RlLCAmcmVmc3BlYykpCisJCXJldHVybiAwOworCisJLyogZG9uJ3QgZGVsZXRlIGEgYnJhbmNoIGlmIGFub3RoZXIgcmVtb3RlIGFsc28gdXNlcyBpdCAqLworCWZvciAoa3IgPSBicmFuY2hlcy0+a2VlcC0+bGlzdDsga3I7IGtyID0ga3ItPm5leHQpIHsKKwkJbWVtc2V0KCZyZWZzcGVjLCAwLCBzaXplb2YocmVmc3BlYykpOworCQlyZWZzcGVjLmRzdCA9IChjaGFyICopcmVmbmFtZTsKKwkJaWYgKCFyZW1vdGVfZmluZF90cmFja2luZyhrci0+cmVtb3RlLCAmcmVmc3BlYykpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBkb24ndCBkZWxldGUgbm9uLXJlbW90ZS10cmFja2luZyByZWZzICovCisJaWYgKHByZWZpeGNtcChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIpKSB7CisJCS8qIGFkdmlzZSB1c2VyIGhvdyB0byBkZWxldGUgbG9jYWwgYnJhbmNoZXMgKi8KKwkJaWYgKCFwcmVmaXhjbXAocmVmbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoYnJhbmNoZXMtPnNraXBwZWQsCisJCQkJCSAgIGFiYnJldl9icmFuY2gocmVmbmFtZSkpOworCQkvKiBzaWxlbnRseSBza2lwIG92ZXIgb3RoZXIgbm9uLXJlbW90ZSByZWZzICovCisJCXJldHVybiAwOworCX0KKworCS8qIG1ha2Ugc3VyZSB0aGF0IHN5bXJlZnMgYXJlIGRlbGV0ZWQgKi8KKwlpZiAoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpCisJCXJldHVybiB1bmxpbmsoZ2l0X3BhdGgoIiVzIiwgcmVmbmFtZSkpOworCisJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZChicmFuY2hlcy0+YnJhbmNoZXMsIHJlZm5hbWUpOworCWl0ZW0tPnV0aWwgPSB4bWFsbG9jKDIwKTsKKwloYXNoY3B5KGl0ZW0tPnV0aWwsIHNoYTEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZW5hbWVfaW5mbyB7CisJY29uc3QgY2hhciAqb2xkOworCWNvbnN0IGNoYXIgKm5ldzsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlbW90ZV9icmFuY2hlczsKK307CisKK3N0YXRpYyBpbnQgcmVhZF9yZW1vdGVfYnJhbmNoZXMoY29uc3QgY2hhciAqcmVmbmFtZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlbmFtZV9pbmZvICpyZW5hbWUgPSBjYl9kYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJaW50IGZsYWc7CisJdW5zaWduZWQgY2hhciBvcmlnX3NoYTFbMjBdOworCWNvbnN0IGNoYXIgKnN5bXJlZjsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL3JlbW90ZXMvJXMvIiwgcmVuYW1lLT5vbGQpOworCWlmICghcHJlZml4Y21wKHJlZm5hbWUsIGJ1Zi5idWYpKSB7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQocmVuYW1lLT5yZW1vdGVfYnJhbmNoZXMsIHhzdHJkdXAocmVmbmFtZSkpOworCQlzeW1yZWYgPSByZXNvbHZlX3JlZl91bnNhZmUocmVmbmFtZSwgb3JpZ19zaGExLCAxLCAmZmxhZyk7CisJCWlmIChmbGFnICYgUkVGX0lTU1lNUkVGKQorCQkJaXRlbS0+dXRpbCA9IHhzdHJkdXAoc3ltcmVmKTsKKwkJZWxzZQorCQkJaXRlbS0+dXRpbCA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWlncmF0ZV9maWxlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBpOworCWNoYXIgKnBhdGggPSBOVUxMOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy51cmwiLCByZW1vdGUtPm5hbWUpOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPnVybF9ucjsgaSsrKQorCQlpZiAoZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgcmVtb3RlLT51cmxbaV0sICJeJCIsIDApKQorCQkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyB0byAnJXMnIiksCisJCQkJCXJlbW90ZS0+dXJsW2ldLCBidWYuYnVmKTsKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy5wdXNoIiwgcmVtb3RlLT5uYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlLT5wdXNoX3JlZnNwZWNfbnI7IGkrKykKKwkJaWYgKGdpdF9jb25maWdfc2V0X211bHRpdmFyKGJ1Zi5idWYsIHJlbW90ZS0+cHVzaF9yZWZzcGVjW2ldLCAiXiQiLCAwKSkKKwkJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgYXBwZW5kICclcycgdG8gJyVzJyIpLAorCQkJCQlyZW1vdGUtPnB1c2hfcmVmc3BlY1tpXSwgYnVmLmJ1Zik7CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMuZmV0Y2giLCByZW1vdGUtPm5hbWUpOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPmZldGNoX3JlZnNwZWNfbnI7IGkrKykKKwkJaWYgKGdpdF9jb25maWdfc2V0X211bHRpdmFyKGJ1Zi5idWYsIHJlbW90ZS0+ZmV0Y2hfcmVmc3BlY1tpXSwgIl4kIiwgMCkpCisJCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IGFwcGVuZCAnJXMnIHRvICclcyciKSwKKwkJCQkJcmVtb3RlLT5mZXRjaF9yZWZzcGVjW2ldLCBidWYuYnVmKTsKKwlpZiAocmVtb3RlLT5vcmlnaW4gPT0gUkVNT1RFX1JFTU9URVMpCisJCXBhdGggPSBnaXRfcGF0aCgicmVtb3Rlcy8lcyIsIHJlbW90ZS0+bmFtZSk7CisJZWxzZSBpZiAocmVtb3RlLT5vcmlnaW4gPT0gUkVNT1RFX0JSQU5DSEVTKQorCQlwYXRoID0gZ2l0X3BhdGgoImJyYW5jaGVzLyVzIiwgcmVtb3RlLT5uYW1lKTsKKwlpZiAocGF0aCkKKwkJdW5saW5rX29yX3dhcm4ocGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCByZW1vdGUgKm9sZHJlbW90ZSwgKm5ld3JlbW90ZTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBidWYyID0gU1RSQlVGX0lOSVQsIGJ1ZjMgPSBTVFJCVUZfSU5JVCwKKwkJb2xkX3JlbW90ZV9jb250ZXh0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IHJlbW90ZV9icmFuY2hlcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHJlbmFtZV9pbmZvIHJlbmFtZTsKKwlpbnQgaSwgcmVmc3BlY191cGRhdGVkID0gMDsKKworCWlmIChhcmdjICE9IDMpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9yZW5hbWVfdXNhZ2UsIG9wdGlvbnMpOworCisJcmVuYW1lLm9sZCA9IGFyZ3ZbMV07CisJcmVuYW1lLm5ldyA9IGFyZ3ZbMl07CisJcmVuYW1lLnJlbW90ZV9icmFuY2hlcyA9ICZyZW1vdGVfYnJhbmNoZXM7CisKKwlvbGRyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbmFtZS5vbGQpOworCWlmICghb2xkcmVtb3RlKQorCQlkaWUoXygiTm8gc3VjaCByZW1vdGU6ICVzIiksIHJlbmFtZS5vbGQpOworCisJaWYgKCFzdHJjbXAocmVuYW1lLm9sZCwgcmVuYW1lLm5ldykgJiYgb2xkcmVtb3RlLT5vcmlnaW4gIT0gUkVNT1RFX0NPTkZJRykKKwkJcmV0dXJuIG1pZ3JhdGVfZmlsZShvbGRyZW1vdGUpOworCisJbmV3cmVtb3RlID0gcmVtb3RlX2dldChyZW5hbWUubmV3KTsKKwlpZiAobmV3cmVtb3RlICYmIChuZXdyZW1vdGUtPnVybF9uciA+IDEgfHwgbmV3cmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yKSkKKwkJZGllKF8oInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iKSwgcmVuYW1lLm5ldyk7CisKKwlzdHJidWZfYWRkZigmYnVmLCAicmVmcy9oZWFkcy90ZXN0OnJlZnMvcmVtb3Rlcy8lcy90ZXN0IiwgcmVuYW1lLm5ldyk7CisJaWYgKCF2YWxpZF9mZXRjaF9yZWZzcGVjKGJ1Zi5idWYpKQorCQlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIpLCByZW5hbWUubmV3KTsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzIiwgcmVuYW1lLm9sZCk7CisJc3RyYnVmX2FkZGYoJmJ1ZjIsICJyZW1vdGUuJXMiLCByZW5hbWUubmV3KTsKKwlpZiAoZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihidWYuYnVmLCBidWYyLmJ1ZikgPCAxKQorCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciKSwKKwkJCQlidWYuYnVmLCBidWYyLmJ1Zik7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy5mZXRjaCIsIHJlbmFtZS5uZXcpOworCWlmIChnaXRfY29uZmlnX3NldF9tdWx0aXZhcihidWYuYnVmLCBOVUxMLCBOVUxMLCAxKSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIpLCBidWYuYnVmKTsKKwlzdHJidWZfYWRkZigmb2xkX3JlbW90ZV9jb250ZXh0LCAiOnJlZnMvcmVtb3Rlcy8lcy8iLCByZW5hbWUub2xkKTsKKwlmb3IgKGkgPSAwOyBpIDwgb2xkcmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yOyBpKyspIHsKKwkJY2hhciAqcHRyOworCisJCXN0cmJ1Zl9yZXNldCgmYnVmMik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZjIsIG9sZHJlbW90ZS0+ZmV0Y2hfcmVmc3BlY1tpXSk7CisJCXB0ciA9IHN0cnN0cihidWYyLmJ1Ziwgb2xkX3JlbW90ZV9jb250ZXh0LmJ1Zik7CisJCWlmIChwdHIpIHsKKwkJCXJlZnNwZWNfdXBkYXRlZCA9IDE7CisJCQlzdHJidWZfc3BsaWNlKCZidWYyLAorCQkJCSAgICAgIHB0ci1idWYyLmJ1ZiArIHN0cmxlbigiOnJlZnMvcmVtb3Rlcy8iKSwKKwkJCQkgICAgICBzdHJsZW4ocmVuYW1lLm9sZCksIHJlbmFtZS5uZXcsCisJCQkJICAgICAgc3RybGVuKHJlbmFtZS5uZXcpKTsKKwkJfSBlbHNlCisJCQl3YXJuaW5nKF8oIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisJCQkJICAiXHQlc1xuIgorCQkJCSAgIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIiksCisJCQkJYnVmMi5idWYpOworCisJCWlmIChnaXRfY29uZmlnX3NldF9tdWx0aXZhcihidWYuYnVmLCBidWYyLmJ1ZiwgIl4kIiwgMCkpCisJCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IGFwcGVuZCAnJXMnIiksIGJ1Zi5idWYpOworCX0KKworCXJlYWRfYnJhbmNoZXMoKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnJhbmNoX2xpc3QubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IGJyYW5jaF9saXN0Lml0ZW1zICsgaTsKKwkJc3RydWN0IGJyYW5jaF9pbmZvICppbmZvID0gaXRlbS0+dXRpbDsKKwkJaWYgKGluZm8tPnJlbW90ZV9uYW1lICYmICFzdHJjbXAoaW5mby0+cmVtb3RlX25hbWUsIHJlbmFtZS5vbGQpKSB7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlzdHJidWZfYWRkZigmYnVmLCAiYnJhbmNoLiVzLnJlbW90ZSIsIGl0ZW0tPnN0cmluZyk7CisJCQlpZiAoZ2l0X2NvbmZpZ19zZXQoYnVmLmJ1ZiwgcmVuYW1lLm5ldykpIHsKKwkJCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHNldCAnJXMnIiksIGJ1Zi5idWYpOworCQkJfQorCQl9CisJfQorCisJaWYgKCFyZWZzcGVjX3VwZGF0ZWQpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBGaXJzdCByZW1vdmUgc3ltcmVmcywgdGhlbiByZW5hbWUgdGhlIHJlc3QsIGZpbmFsbHkgY3JlYXRlCisJICogdGhlIG5ldyBzeW1yZWZzLgorCSAqLworCWZvcl9lYWNoX3JlZihyZWFkX3JlbW90ZV9icmFuY2hlcywgJnJlbmFtZSk7CisJZm9yIChpID0gMDsgaSA8IHJlbW90ZV9icmFuY2hlcy5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gcmVtb3RlX2JyYW5jaGVzLml0ZW1zICsgaTsKKwkJaW50IGZsYWcgPSAwOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJCXJlYWRfcmVmX2Z1bGwoaXRlbS0+c3RyaW5nLCBzaGExLCAxLCAmZmxhZyk7CisJCWlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKQorCQkJY29udGludWU7CisJCWlmIChkZWxldGVfcmVmKGl0ZW0tPnN0cmluZywgTlVMTCwgUkVGX05PREVSRUYpKQorCQkJZGllKF8oImRlbGV0aW5nICclcycgZmFpbGVkIiksIGl0ZW0tPnN0cmluZyk7CisJfQorCWZvciAoaSA9IDA7IGkgPCByZW1vdGVfYnJhbmNoZXMubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IHJlbW90ZV9icmFuY2hlcy5pdGVtcyArIGk7CisKKwkJaWYgKGl0ZW0tPnV0aWwpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkc3RyKCZidWYsIGl0ZW0tPnN0cmluZyk7CisJCXN0cmJ1Zl9zcGxpY2UoJmJ1Ziwgc3RybGVuKCJyZWZzL3JlbW90ZXMvIiksIHN0cmxlbihyZW5hbWUub2xkKSwKKwkJCQlyZW5hbWUubmV3LCBzdHJsZW4ocmVuYW1lLm5ldykpOworCQlzdHJidWZfcmVzZXQoJmJ1ZjIpOworCQlzdHJidWZfYWRkZigmYnVmMiwgInJlbW90ZTogcmVuYW1lZCAlcyB0byAlcyIsCisJCQkJaXRlbS0+c3RyaW5nLCBidWYuYnVmKTsKKwkJaWYgKHJlbmFtZV9yZWYoaXRlbS0+c3RyaW5nLCBidWYuYnVmLCBidWYyLmJ1ZikpCisJCQlkaWUoXygicmVuYW1pbmcgJyVzJyBmYWlsZWQiKSwgaXRlbS0+c3RyaW5nKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHJlbW90ZV9icmFuY2hlcy5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gcmVtb3RlX2JyYW5jaGVzLml0ZW1zICsgaTsKKworCQlpZiAoIWl0ZW0tPnV0aWwpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkc3RyKCZidWYsIGl0ZW0tPnN0cmluZyk7CisJCXN0cmJ1Zl9zcGxpY2UoJmJ1Ziwgc3RybGVuKCJyZWZzL3JlbW90ZXMvIiksIHN0cmxlbihyZW5hbWUub2xkKSwKKwkJCQlyZW5hbWUubmV3LCBzdHJsZW4ocmVuYW1lLm5ldykpOworCQlzdHJidWZfcmVzZXQoJmJ1ZjIpOworCQlzdHJidWZfYWRkc3RyKCZidWYyLCBpdGVtLT51dGlsKTsKKwkJc3RyYnVmX3NwbGljZSgmYnVmMiwgc3RybGVuKCJyZWZzL3JlbW90ZXMvIiksIHN0cmxlbihyZW5hbWUub2xkKSwKKwkJCQlyZW5hbWUubmV3LCBzdHJsZW4ocmVuYW1lLm5ldykpOworCQlzdHJidWZfcmVzZXQoJmJ1ZjMpOworCQlzdHJidWZfYWRkZigmYnVmMywgInJlbW90ZTogcmVuYW1lZCAlcyB0byAlcyIsCisJCQkJaXRlbS0+c3RyaW5nLCBidWYuYnVmKTsKKwkJaWYgKGNyZWF0ZV9zeW1yZWYoYnVmLmJ1ZiwgYnVmMi5idWYsIGJ1ZjMuYnVmKSkKKwkJCWRpZShfKCJjcmVhdGluZyAnJXMnIGZhaWxlZCIpLCBidWYuYnVmKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2JyYW5jaGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqYnJhbmNoZXMpCit7CisJaW50IGksIHJlc3VsdCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGJyYW5jaGVzLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gYnJhbmNoZXMtPml0ZW1zICsgaTsKKwkJY29uc3QgY2hhciAqcmVmbmFtZSA9IGl0ZW0tPnN0cmluZzsKKwkJdW5zaWduZWQgY2hhciAqc2hhMSA9IGl0ZW0tPnV0aWw7CisKKwkJaWYgKGRlbGV0ZV9yZWYocmVmbmFtZSwgc2hhMSwgMCkpCisJCQlyZXN1bHQgfD0gZXJyb3IoXygiQ291bGQgbm90IHJlbW92ZSBicmFuY2ggJXMiKSwgcmVmbmFtZSk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgcm0oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBrbm93bl9yZW1vdGVzIGtub3duX3JlbW90ZXMgPSB7IE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYnJhbmNoZXMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc2tpcHBlZCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBicmFuY2hlc19mb3JfcmVtb3RlIGNiX2RhdGE7CisJaW50IGksIHJlc3VsdDsKKworCW1lbXNldCgmY2JfZGF0YSwgMCwgc2l6ZW9mKGNiX2RhdGEpKTsKKwljYl9kYXRhLmJyYW5jaGVzID0gJmJyYW5jaGVzOworCWNiX2RhdGEuc2tpcHBlZCA9ICZza2lwcGVkOworCWNiX2RhdGEua2VlcCA9ICZrbm93bl9yZW1vdGVzOworCisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX3JtX3VzYWdlLCBvcHRpb25zKTsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQoYXJndlsxXSk7CisJaWYgKCFyZW1vdGUpCisJCWRpZShfKCJObyBzdWNoIHJlbW90ZTogJXMiKSwgYXJndlsxXSk7CisKKwlrbm93bl9yZW1vdGVzLnRvX2RlbGV0ZSA9IHJlbW90ZTsKKwlmb3JfZWFjaF9yZW1vdGUoYWRkX2tub3duX3JlbW90ZSwgJmtub3duX3JlbW90ZXMpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcyIsIHJlbW90ZS0+bmFtZSk7CisJaWYgKGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oYnVmLmJ1ZiwgTlVMTCkgPCAxKQorCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIiksIGJ1Zi5idWYpOworCisJcmVhZF9icmFuY2hlcygpOworCWZvciAoaSA9IDA7IGkgPCBicmFuY2hfbGlzdC5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gYnJhbmNoX2xpc3QuaXRlbXMgKyBpOworCQlzdHJ1Y3QgYnJhbmNoX2luZm8gKmluZm8gPSBpdGVtLT51dGlsOworCQlpZiAoaW5mby0+cmVtb3RlX25hbWUgJiYgIXN0cmNtcChpbmZvLT5yZW1vdGVfbmFtZSwgcmVtb3RlLT5uYW1lKSkgeworCQkJY29uc3QgY2hhciAqa2V5c1tdID0geyAicmVtb3RlIiwgIm1lcmdlIiwgTlVMTCB9LCAqKms7CisJCQlmb3IgKGsgPSBrZXlzOyAqazsgaysrKSB7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICJicmFuY2guJXMuJXMiLAorCQkJCQkJaXRlbS0+c3RyaW5nLCAqayk7CisJCQkJaWYgKGdpdF9jb25maWdfc2V0KGJ1Zi5idWYsIE5VTEwpKSB7CisJCQkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBXZSBjYW5ub3QganVzdCBwYXNzIGEgZnVuY3Rpb24gdG8gZm9yX2VhY2hfcmVmKCkgd2hpY2ggZGVsZXRlcworCSAqIHRoZSBicmFuY2hlcyBvbmUgYnkgb25lLCBzaW5jZSBmb3JfZWFjaF9yZWYoKSByZWxpZXMgb24gY2FjaGVkCisJICogcmVmcywgd2hpY2ggYXJlIGludmFsaWRhdGVkIHdoZW4gZGVsZXRpbmcgYSBicmFuY2guCisJICovCisJY2JfZGF0YS5yZW1vdGUgPSByZW1vdGU7CisJcmVzdWx0ID0gZm9yX2VhY2hfcmVmKGFkZF9icmFuY2hfZm9yX3JlbW92YWwsICZjYl9kYXRhKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCWlmICghcmVzdWx0KQorCQlyZXN1bHQgPSByZW1vdmVfYnJhbmNoZXMoJmJyYW5jaGVzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmYnJhbmNoZXMsIDEpOworCisJaWYgKHNraXBwZWQubnIpIHsKKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBRXygiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorCQkJICAgICAgInRvIGRlbGV0ZSBpdCwgdXNlOiIsCisJCQkgICAgICAiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorCQkJICAgICAgInRvIGRlbGV0ZSB0aGVtLCB1c2U6IiwKKwkJCSAgICAgIHNraXBwZWQubnIpKTsKKwkJZm9yIChpID0gMDsgaSA8IHNraXBwZWQubnI7IGkrKykKKwkJCWZwcmludGYoc3RkZXJyLCAiICBnaXQgYnJhbmNoIC1kICVzXG4iLAorCQkJCXNraXBwZWQuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJnNraXBwZWQsIDApOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfcHVzaF9pbmZvKHZvaWQgKnV0aWwsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvID0gdXRpbDsKKwlmcmVlKGluZm8tPmRlc3QpOworCWZyZWUoaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVtb3RlX3JlZl9zdGF0ZXMoc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT5uZXcsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZXMtPnN0YWxlLCAxKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT50cmFja2VkLCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT5oZWFkcywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXJfZnVuYygmc3RhdGVzLT5wdXNoLCBjbGVhcl9wdXNoX2luZm8pOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9yZWZfdG9fdHJhY2tlZF9saXN0KGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMgPSBjYl9kYXRhOworCXN0cnVjdCByZWZzcGVjIHJlZnNwZWM7CisKKwlpZiAoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpCisJCXJldHVybiAwOworCisJbWVtc2V0KCZyZWZzcGVjLCAwLCBzaXplb2YocmVmc3BlYykpOworCXJlZnNwZWMuZHN0ID0gKGNoYXIgKilyZWZuYW1lOworCWlmICghcmVtb3RlX2ZpbmRfdHJhY2tpbmcoc3RhdGVzLT5yZW1vdGUsICZyZWZzcGVjKSkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnRyYWNrZWQsIGFiYnJldl9icmFuY2gocmVmc3BlYy5zcmMpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9yZW1vdGVfcmVmX3N0YXRlcyhjb25zdCBjaGFyICpuYW1lLAorCQkJCSBzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzLAorCQkJCSBpbnQgcXVlcnkpCit7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OworCWNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzOworCisJc3RhdGVzLT5yZW1vdGUgPSByZW1vdGVfZ2V0KG5hbWUpOworCWlmICghc3RhdGVzLT5yZW1vdGUpCisJCXJldHVybiBlcnJvcihfKCJObyBzdWNoIHJlbW90ZTogJXMiKSwgbmFtZSk7CisKKwlyZWFkX2JyYW5jaGVzKCk7CisKKwlpZiAocXVlcnkpIHsKKwkJdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2dldChzdGF0ZXMtPnJlbW90ZSwgc3RhdGVzLT5yZW1vdGUtPnVybF9uciA+IDAgPworCQkJc3RhdGVzLT5yZW1vdGUtPnVybFswXSA6IE5VTEwpOworCQlyZW1vdGVfcmVmcyA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0KTsKKwkJdHJhbnNwb3J0X2Rpc2Nvbm5lY3QodHJhbnNwb3J0KTsKKworCQlzdGF0ZXMtPnF1ZXJpZWQgPSAxOworCQlpZiAocXVlcnkgJiBHRVRfUkVGX1NUQVRFUykKKwkJCWdldF9yZWZfc3RhdGVzKHJlbW90ZV9yZWZzLCBzdGF0ZXMpOworCQlpZiAocXVlcnkgJiBHRVRfSEVBRF9OQU1FUykKKwkJCWdldF9oZWFkX25hbWVzKHJlbW90ZV9yZWZzLCBzdGF0ZXMpOworCQlpZiAocXVlcnkgJiBHRVRfUFVTSF9SRUZfU1RBVEVTKQorCQkJZ2V0X3B1c2hfcmVmX3N0YXRlcyhyZW1vdGVfcmVmcywgc3RhdGVzKTsKKwl9IGVsc2UgeworCQlmb3JfZWFjaF9yZWYoYXBwZW5kX3JlZl90b190cmFja2VkX2xpc3QsIHN0YXRlcyk7CisJCXNvcnRfc3RyaW5nX2xpc3QoJnN0YXRlcy0+dHJhY2tlZCk7CisJCWdldF9wdXNoX3JlZl9zdGF0ZXNfbm9xdWVyeShzdGF0ZXMpOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc2hvd19pbmZvIHsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3Q7CisJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlczsKKwlpbnQgd2lkdGgsIHdpZHRoMjsKKwlpbnQgYW55X3JlYmFzZTsKK307CisKK3N0YXRpYyBpbnQgYWRkX3JlbW90ZV90b19zaG93X2luZm8oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CisJaW50IG4gPSBzdHJsZW4oaXRlbS0+c3RyaW5nKTsKKwlpZiAobiA+IGluZm8tPndpZHRoKQorCQlpbmZvLT53aWR0aCA9IG47CisJc3RyaW5nX2xpc3RfaW5zZXJ0KGluZm8tPmxpc3QsIGl0ZW0tPnN0cmluZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19yZW1vdGVfaW5mb19pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzaG93X2luZm8gKmluZm8gPSBjYl9kYXRhOworCXN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMgPSBpbmZvLT5zdGF0ZXM7CisJY29uc3QgY2hhciAqbmFtZSA9IGl0ZW0tPnN0cmluZzsKKworCWlmIChzdGF0ZXMtPnF1ZXJpZWQpIHsKKwkJY29uc3QgY2hhciAqZm10ID0gIiVzIjsKKwkJY29uc3QgY2hhciAqYXJnID0gIiI7CisJCWlmIChzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZzdGF0ZXMtPm5ldywgbmFtZSkpIHsKKwkJCWZtdCA9IF8oIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIpOworCQkJYXJnID0gc3RhdGVzLT5yZW1vdGUtPm5hbWU7CisJCX0gZWxzZSBpZiAoc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmc3RhdGVzLT50cmFja2VkLCBuYW1lKSkKKwkJCWFyZyA9IF8oIiB0cmFja2VkIik7CisJCWVsc2UgaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnN0YXRlcy0+c3RhbGUsIG5hbWUpKQorCQkJYXJnID0gXygiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiKTsKKwkJZWxzZQorCQkJYXJnID0gXygiID8/PyIpOworCQlwcmludGYoIiAgICAlLSpzIiwgaW5mby0+d2lkdGgsIG5hbWUpOworCQlwcmludGYoZm10LCBhcmcpOworCQlwcmludGYoIlxuIik7CisJfSBlbHNlCisJCXByaW50ZigiICAgICVzXG4iLCBuYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9sb2NhbF90b19zaG93X2luZm8oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmJyYW5jaF9pdGVtLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CisJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IHNob3dfaW5mby0+c3RhdGVzOworCXN0cnVjdCBicmFuY2hfaW5mbyAqYnJhbmNoX2luZm8gPSBicmFuY2hfaXRlbS0+dXRpbDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgbjsKKworCWlmICghYnJhbmNoX2luZm8tPm1lcmdlLm5yIHx8ICFicmFuY2hfaW5mby0+cmVtb3RlX25hbWUgfHwKKwkgICAgc3RyY21wKHN0YXRlcy0+cmVtb3RlLT5uYW1lLCBicmFuY2hfaW5mby0+cmVtb3RlX25hbWUpKQorCQlyZXR1cm4gMDsKKwlpZiAoKG4gPSBzdHJsZW4oYnJhbmNoX2l0ZW0tPnN0cmluZykpID4gc2hvd19pbmZvLT53aWR0aCkKKwkJc2hvd19pbmZvLT53aWR0aCA9IG47CisJaWYgKGJyYW5jaF9pbmZvLT5yZWJhc2UpCisJCXNob3dfaW5mby0+YW55X3JlYmFzZSA9IDE7CisKKwlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHNob3dfaW5mby0+bGlzdCwgYnJhbmNoX2l0ZW0tPnN0cmluZyk7CisJaXRlbS0+dXRpbCA9IGJyYW5jaF9pbmZvOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19sb2NhbF9pbmZvX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqc2hvd19pbmZvID0gY2JfZGF0YTsKKwlzdHJ1Y3QgYnJhbmNoX2luZm8gKmJyYW5jaF9pbmZvID0gaXRlbS0+dXRpbDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1lcmdlID0gJmJyYW5jaF9pbmZvLT5tZXJnZTsKKwljb25zdCBjaGFyICphbHNvOworCWludCBpOworCisJaWYgKGJyYW5jaF9pbmZvLT5yZWJhc2UgJiYgYnJhbmNoX2luZm8tPm1lcmdlLm5yID4gMSkgeworCQllcnJvcihfKCJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giKSwKKwkJCWl0ZW0tPnN0cmluZyk7CisJCXJldHVybiAwOworCX0KKworCXByaW50ZigiICAgICUtKnMgIiwgc2hvd19pbmZvLT53aWR0aCwgaXRlbS0+c3RyaW5nKTsKKwlpZiAoYnJhbmNoX2luZm8tPnJlYmFzZSkgeworCQlwcmludGZfbG4oXygicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIpLCBtZXJnZS0+aXRlbXNbMF0uc3RyaW5nKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzaG93X2luZm8tPmFueV9yZWJhc2UpIHsKKwkJcHJpbnRmX2xuKF8oIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiKSwgbWVyZ2UtPml0ZW1zWzBdLnN0cmluZyk7CisJCWFsc28gPSBfKCIgICAgYW5kIHdpdGggcmVtb3RlIik7CisJfSBlbHNlIHsKKwkJcHJpbnRmX2xuKF8oIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIpLCBtZXJnZS0+aXRlbXNbMF0uc3RyaW5nKTsKKwkJYWxzbyA9IF8oIiAgIGFuZCB3aXRoIHJlbW90ZSIpOworCX0KKwlmb3IgKGkgPSAxOyBpIDwgbWVyZ2UtPm5yOyBpKyspCisJCXByaW50ZigiICAgICUtKnMgJXMgJXNcbiIsIHNob3dfaW5mby0+d2lkdGgsICIiLCBhbHNvLAorCQkgICAgICAgbWVyZ2UtPml0ZW1zW2ldLnN0cmluZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfcHVzaF90b19zaG93X2luZm8oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnB1c2hfaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICpzaG93X2luZm8gPSBjYl9kYXRhOworCXN0cnVjdCBwdXNoX2luZm8gKnB1c2hfaW5mbyA9IHB1c2hfaXRlbS0+dXRpbDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgbjsKKwlpZiAoKG4gPSBzdHJsZW4ocHVzaF9pdGVtLT5zdHJpbmcpKSA+IHNob3dfaW5mby0+d2lkdGgpCisJCXNob3dfaW5mby0+d2lkdGggPSBuOworCWlmICgobiA9IHN0cmxlbihwdXNoX2luZm8tPmRlc3QpKSA+IHNob3dfaW5mby0+d2lkdGgyKQorCQlzaG93X2luZm8tPndpZHRoMiA9IG47CisJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZChzaG93X2luZm8tPmxpc3QsIHB1c2hfaXRlbS0+c3RyaW5nKTsKKwlpdGVtLT51dGlsID0gcHVzaF9pdGVtLT51dGlsOworCXJldHVybiAwOworfQorCisvKgorICogU29ydGluZyBjb21wYXJpc29uIGZvciBhIHN0cmluZyBsaXN0IHRoYXQgaGFzIHB1c2hfaW5mbworICogc3RydWN0cyBpbiBpdHMgdXRpbCBmaWVsZAorICovCitzdGF0aWMgaW50IGNtcF9zdHJpbmdfd2l0aF9wdXNoKGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqYSA9IHZhOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpiID0gdmI7CisJY29uc3Qgc3RydWN0IHB1c2hfaW5mbyAqYV9wdXNoID0gYS0+dXRpbDsKKwljb25zdCBzdHJ1Y3QgcHVzaF9pbmZvICpiX3B1c2ggPSBiLT51dGlsOworCWludCBjbXAgPSBzdHJjbXAoYS0+c3RyaW5nLCBiLT5zdHJpbmcpOworCXJldHVybiBjbXAgPyBjbXAgOiBzdHJjbXAoYV9wdXNoLT5kZXN0LCBiX3B1c2gtPmRlc3QpOworfQorCitzdGF0aWMgaW50IHNob3dfcHVzaF9pbmZvX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqc2hvd19pbmZvID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcHVzaF9pbmZvICpwdXNoX2luZm8gPSBpdGVtLT51dGlsOworCWNvbnN0IGNoYXIgKnNyYyA9IGl0ZW0tPnN0cmluZywgKnN0YXR1cyA9IE5VTEw7CisKKwlzd2l0Y2ggKHB1c2hfaW5mby0+c3RhdHVzKSB7CisJY2FzZSBQVVNIX1NUQVRVU19DUkVBVEU6CisJCXN0YXR1cyA9IF8oImNyZWF0ZSIpOworCQlicmVhazsKKwljYXNlIFBVU0hfU1RBVFVTX0RFTEVURToKKwkJc3RhdHVzID0gXygiZGVsZXRlIik7CisJCXNyYyA9IF8oIihub25lKSIpOworCQlicmVhazsKKwljYXNlIFBVU0hfU1RBVFVTX1VQVE9EQVRFOgorCQlzdGF0dXMgPSBfKCJ1cCB0byBkYXRlIik7CisJCWJyZWFrOworCWNhc2UgUFVTSF9TVEFUVVNfRkFTVEZPUldBUkQ6CisJCXN0YXR1cyA9IF8oImZhc3QtZm9yd2FyZGFibGUiKTsKKwkJYnJlYWs7CisJY2FzZSBQVVNIX1NUQVRVU19PVVRPRkRBVEU6CisJCXN0YXR1cyA9IF8oImxvY2FsIG91dCBvZiBkYXRlIik7CisJCWJyZWFrOworCWNhc2UgUFVTSF9TVEFUVVNfTk9UUVVFUklFRDoKKwkJYnJlYWs7CisJfQorCWlmIChzdGF0dXMpIHsKKwkJaWYgKHB1c2hfaW5mby0+Zm9yY2VkKQorCQkJcHJpbnRmX2xuKF8oIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiKSwgc2hvd19pbmZvLT53aWR0aCwgc3JjLAorCQkJICAgICAgIHNob3dfaW5mby0+d2lkdGgyLCBwdXNoX2luZm8tPmRlc3QsIHN0YXR1cyk7CisJCWVsc2UKKwkJCXByaW50Zl9sbihfKCIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIiksIHNob3dfaW5mby0+d2lkdGgsIHNyYywKKwkJCSAgICAgICBzaG93X2luZm8tPndpZHRoMiwgcHVzaF9pbmZvLT5kZXN0LCBzdGF0dXMpOworCX0gZWxzZSB7CisJCWlmIChwdXNoX2luZm8tPmZvcmNlZCkKKwkJCXByaW50Zl9sbihfKCIgICAgJS0qcyBmb3JjZXMgdG8gJXMiKSwgc2hvd19pbmZvLT53aWR0aCwgc3JjLAorCQkJICAgICAgIHB1c2hfaW5mby0+ZGVzdCk7CisJCWVsc2UKKwkJCXByaW50Zl9sbihfKCIgICAgJS0qcyBwdXNoZXMgdG8gJXMiKSwgc2hvd19pbmZvLT53aWR0aCwgc3JjLAorCQkJICAgICAgIHB1c2hfaW5mby0+ZGVzdCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBub19xdWVyeSA9IDAsIHJlc3VsdCA9IDAsIHF1ZXJ5X2ZsYWcgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTignbicsIE5VTEwsICZub19xdWVyeSwgTl8oImRvIG5vdCBxdWVyeSByZW1vdGVzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCByZWZfc3RhdGVzIHN0YXRlczsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaW5mb19saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc2hvd19pbmZvIGluZm87CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9zaG93X3VzYWdlLAorCQkJICAgICAwKTsKKworCWlmIChhcmdjIDwgMSkKKwkJcmV0dXJuIHNob3dfYWxsKCk7CisKKwlpZiAoIW5vX3F1ZXJ5KQorCQlxdWVyeV9mbGFnID0gKEdFVF9SRUZfU1RBVEVTIHwgR0VUX0hFQURfTkFNRVMgfCBHRVRfUFVTSF9SRUZfU1RBVEVTKTsKKworCW1lbXNldCgmc3RhdGVzLCAwLCBzaXplb2Yoc3RhdGVzKSk7CisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCWluZm8uc3RhdGVzID0gJnN0YXRlczsKKwlpbmZvLmxpc3QgPSAmaW5mb19saXN0OworCWZvciAoOyBhcmdjOyBhcmdjLS0sIGFyZ3YrKykgeworCQlpbnQgaTsKKwkJY29uc3QgY2hhciAqKnVybDsKKwkJaW50IHVybF9ucjsKKworCQlnZXRfcmVtb3RlX3JlZl9zdGF0ZXMoKmFyZ3YsICZzdGF0ZXMsIHF1ZXJ5X2ZsYWcpOworCisJCXByaW50Zl9sbihfKCIqIHJlbW90ZSAlcyIpLCAqYXJndik7CisJCXByaW50Zl9sbihfKCIgIEZldGNoIFVSTDogJXMiKSwgc3RhdGVzLnJlbW90ZS0+dXJsX25yID4gMCA/CisJCSAgICAgICBzdGF0ZXMucmVtb3RlLT51cmxbMF0gOiBfKCIobm8gVVJMKSIpKTsKKwkJaWYgKHN0YXRlcy5yZW1vdGUtPnB1c2h1cmxfbnIpIHsKKwkJCXVybCA9IHN0YXRlcy5yZW1vdGUtPnB1c2h1cmw7CisJCQl1cmxfbnIgPSBzdGF0ZXMucmVtb3RlLT5wdXNodXJsX25yOworCQl9IGVsc2UgeworCQkJdXJsID0gc3RhdGVzLnJlbW90ZS0+dXJsOworCQkJdXJsX25yID0gc3RhdGVzLnJlbW90ZS0+dXJsX25yOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCB1cmxfbnI7IGkrKykKKwkJCXByaW50Zl9sbihfKCIgIFB1c2ggIFVSTDogJXMiKSwgdXJsW2ldKTsKKwkJaWYgKCFpKQorCQkJcHJpbnRmX2xuKF8oIiAgUHVzaCAgVVJMOiAlcyIpLCAiKG5vIFVSTCkiKTsKKwkJaWYgKG5vX3F1ZXJ5KQorCQkJcHJpbnRmX2xuKF8oIiAgSEVBRCBicmFuY2g6ICVzIiksICIobm90IHF1ZXJpZWQpIik7CisJCWVsc2UgaWYgKCFzdGF0ZXMuaGVhZHMubnIpCisJCQlwcmludGZfbG4oXygiICBIRUFEIGJyYW5jaDogJXMiKSwgIih1bmtub3duKSIpOworCQllbHNlIGlmIChzdGF0ZXMuaGVhZHMubnIgPT0gMSkKKwkJCXByaW50Zl9sbihfKCIgIEhFQUQgYnJhbmNoOiAlcyIpLCBzdGF0ZXMuaGVhZHMuaXRlbXNbMF0uc3RyaW5nKTsKKwkJZWxzZSB7CisJCQlwcmludGYoXygiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCIKKwkJCQkgIiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIikpOworCQkJZm9yIChpID0gMDsgaSA8IHN0YXRlcy5oZWFkcy5ucjsgaSsrKQorCQkJCXByaW50ZigiICAgICVzXG4iLCBzdGF0ZXMuaGVhZHMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJfQorCisJCS8qIHJlbW90ZSBicmFuY2ggaW5mbyAqLworCQlpbmZvLndpZHRoID0gMDsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoJnN0YXRlcy5uZXcsIGFkZF9yZW1vdGVfdG9fc2hvd19pbmZvLCAmaW5mbyk7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0KCZzdGF0ZXMudHJhY2tlZCwgYWRkX3JlbW90ZV90b19zaG93X2luZm8sICZpbmZvKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoJnN0YXRlcy5zdGFsZSwgYWRkX3JlbW90ZV90b19zaG93X2luZm8sICZpbmZvKTsKKwkJaWYgKGluZm8ubGlzdC0+bnIpCisJCQlwcmludGZfbG4oUV8oIiAgUmVtb3RlIGJyYW5jaDolcyIsCisJCQkJICAgICAiICBSZW1vdGUgYnJhbmNoZXM6JXMiLAorCQkJCSAgICAgaW5mby5saXN0LT5uciksCisJCQkJICBub19xdWVyeSA/IF8oIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIpIDogIiIpOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChpbmZvLmxpc3QsIHNob3dfcmVtb3RlX2luZm9faXRlbSwgJmluZm8pOworCQlzdHJpbmdfbGlzdF9jbGVhcihpbmZvLmxpc3QsIDApOworCisJCS8qIGdpdCBwdWxsIGluZm8gKi8KKwkJaW5mby53aWR0aCA9IDA7CisJCWluZm8uYW55X3JlYmFzZSA9IDA7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0KCZicmFuY2hfbGlzdCwgYWRkX2xvY2FsX3RvX3Nob3dfaW5mbywgJmluZm8pOworCQlpZiAoaW5mby5saXN0LT5ucikKKwkJCXByaW50Zl9sbihRXygiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiLAorCQkJCSAgICAgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiLAorCQkJCSAgICAgaW5mby5saXN0LT5ucikpOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChpbmZvLmxpc3QsIHNob3dfbG9jYWxfaW5mb19pdGVtLCAmaW5mbyk7CisJCXN0cmluZ19saXN0X2NsZWFyKGluZm8ubGlzdCwgMCk7CisKKwkJLyogZ2l0IHB1c2ggaW5mbyAqLworCQlpZiAoc3RhdGVzLnJlbW90ZS0+bWlycm9yKQorCQkJcHJpbnRmX2xuKF8oIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciKSk7CisKKwkJaW5mby53aWR0aCA9IGluZm8ud2lkdGgyID0gMDsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoJnN0YXRlcy5wdXNoLCBhZGRfcHVzaF90b19zaG93X2luZm8sICZpbmZvKTsKKwkJcXNvcnQoaW5mby5saXN0LT5pdGVtcywgaW5mby5saXN0LT5uciwKKwkJCXNpemVvZigqaW5mby5saXN0LT5pdGVtcyksIGNtcF9zdHJpbmdfd2l0aF9wdXNoKTsKKwkJaWYgKGluZm8ubGlzdC0+bnIpCisJCQlwcmludGZfbG4oUV8oIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiLAorCQkJCSAgICAgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IiwKKwkJCQkgICAgIGluZm8ubGlzdC0+bnIpLAorCQkJCSAgbm9fcXVlcnkgPyBfKCIgKHN0YXR1cyBub3QgcXVlcmllZCkiKSA6ICIiKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoaW5mby5saXN0LCBzaG93X3B1c2hfaW5mb19pdGVtLCAmaW5mbyk7CisJCXN0cmluZ19saXN0X2NsZWFyKGluZm8ubGlzdCwgMCk7CisKKwkJZnJlZV9yZW1vdGVfcmVmX3N0YXRlcygmc3RhdGVzKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHNldF9oZWFkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgb3B0X2EgPSAwLCBvcHRfZCA9IDAsIHJlc3VsdCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgYnVmMiA9IFNUUkJVRl9JTklUOworCWNoYXIgKmhlYWRfbmFtZSA9IE5VTEw7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0xFQU4oJ2EnLCAiYXV0byIsICZvcHRfYSwKKwkJCSAgICBOXygic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIikpLAorCQlPUFRfQk9PTEVBTignZCcsICJkZWxldGUiLCAmb3B0X2QsCisJCQkgICAgTl8oImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiKSksCisJCU9QVF9FTkQoKQorCX07CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfc2V0aGVhZF91c2FnZSwKKwkJCSAgICAgMCk7CisJaWYgKGFyZ2MpCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL3JlbW90ZXMvJXMvSEVBRCIsIGFyZ3ZbMF0pOworCisJaWYgKCFvcHRfYSAmJiAhb3B0X2QgJiYgYXJnYyA9PSAyKSB7CisJCWhlYWRfbmFtZSA9IHhzdHJkdXAoYXJndlsxXSk7CisJfSBlbHNlIGlmIChvcHRfYSAmJiAhb3B0X2QgJiYgYXJnYyA9PSAxKSB7CisJCXN0cnVjdCByZWZfc3RhdGVzIHN0YXRlczsKKwkJbWVtc2V0KCZzdGF0ZXMsIDAsIHNpemVvZihzdGF0ZXMpKTsKKwkJZ2V0X3JlbW90ZV9yZWZfc3RhdGVzKGFyZ3ZbMF0sICZzdGF0ZXMsIEdFVF9IRUFEX05BTUVTKTsKKwkJaWYgKCFzdGF0ZXMuaGVhZHMubnIpCisJCQlyZXN1bHQgfD0gZXJyb3IoXygiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIpKTsKKwkJZWxzZSBpZiAoc3RhdGVzLmhlYWRzLm5yID4gMSkgeworCQkJcmVzdWx0IHw9IGVycm9yKF8oIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiAiCisJCQkJCSAgIlBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiKSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3RhdGVzLmhlYWRzLm5yOyBpKyspCisJCQkJZnByaW50ZihzdGRlcnIsICIgIGdpdCByZW1vdGUgc2V0LWhlYWQgJXMgJXNcbiIsCisJCQkJCWFyZ3ZbMF0sIHN0YXRlcy5oZWFkcy5pdGVtc1tpXS5zdHJpbmcpOworCQl9IGVsc2UKKwkJCWhlYWRfbmFtZSA9IHhzdHJkdXAoc3RhdGVzLmhlYWRzLml0ZW1zWzBdLnN0cmluZyk7CisJCWZyZWVfcmVtb3RlX3JlZl9zdGF0ZXMoJnN0YXRlcyk7CisJfSBlbHNlIGlmIChvcHRfZCAmJiAhb3B0X2EgJiYgYXJnYyA9PSAxKSB7CisJCWlmIChkZWxldGVfcmVmKGJ1Zi5idWYsIE5VTEwsIFJFRl9OT0RFUkVGKSkKKwkJCXJlc3VsdCB8PSBlcnJvcihfKCJDb3VsZCBub3QgZGVsZXRlICVzIiksIGJ1Zi5idWYpOworCX0gZWxzZQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfc2V0aGVhZF91c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAoaGVhZF9uYW1lKSB7CisJCXN0cmJ1Zl9hZGRmKCZidWYyLCAicmVmcy9yZW1vdGVzLyVzLyVzIiwgYXJndlswXSwgaGVhZF9uYW1lKTsKKwkJLyogbWFrZSBzdXJlIGl0J3MgdmFsaWQgKi8KKwkJaWYgKCFyZWZfZXhpc3RzKGJ1ZjIuYnVmKSkKKwkJCXJlc3VsdCB8PSBlcnJvcihfKCJOb3QgYSB2YWxpZCByZWY6ICVzIiksIGJ1ZjIuYnVmKTsKKwkJZWxzZSBpZiAoY3JlYXRlX3N5bXJlZihidWYuYnVmLCBidWYyLmJ1ZiwgInJlbW90ZSBzZXQtaGVhZCIpKQorCQkJcmVzdWx0IHw9IGVycm9yKF8oIkNvdWxkIG5vdCBzZXR1cCAlcyIpLCBidWYuYnVmKTsKKwkJaWYgKG9wdF9hKQorCQkJcHJpbnRmKCIlcy9IRUFEIHNldCB0byAlc1xuIiwgYXJndlswXSwgaGVhZF9uYW1lKTsKKwkJZnJlZShoZWFkX25hbWUpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHBydW5lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgZHJ5X3J1biA9IDAsIHJlc3VsdCA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRFJZX1JVTigmZHJ5X3J1biwgTl8oImRyeSBydW4iKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9wcnVuZV91c2FnZSwKKwkJCSAgICAgMCk7CisKKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9wcnVuZV91c2FnZSwgb3B0aW9ucyk7CisKKwlmb3IgKDsgYXJnYzsgYXJnYy0tLCBhcmd2KyspCisJCXJlc3VsdCB8PSBwcnVuZV9yZW1vdGUoKmFyZ3YsIGRyeV9ydW4pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBwcnVuZV9yZW1vdGUoY29uc3QgY2hhciAqcmVtb3RlLCBpbnQgZHJ5X3J1bikKK3sKKwlpbnQgcmVzdWx0ID0gMCwgaTsKKwlzdHJ1Y3QgcmVmX3N0YXRlcyBzdGF0ZXM7CisJY29uc3QgY2hhciAqZGFuZ2xpbmdfbXNnID0gZHJ5X3J1bgorCQk/IF8oIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiKQorCQk6IF8oIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIpOworCisJbWVtc2V0KCZzdGF0ZXMsIDAsIHNpemVvZihzdGF0ZXMpKTsKKwlnZXRfcmVtb3RlX3JlZl9zdGF0ZXMocmVtb3RlLCAmc3RhdGVzLCBHRVRfUkVGX1NUQVRFUyk7CisKKwlpZiAoc3RhdGVzLnN0YWxlLm5yKSB7CisJCXByaW50Zl9sbihfKCJQcnVuaW5nICVzIiksIHJlbW90ZSk7CisJCXByaW50Zl9sbihfKCJVUkw6ICVzIiksCisJCSAgICAgICBzdGF0ZXMucmVtb3RlLT51cmxfbnIKKwkJICAgICAgID8gc3RhdGVzLnJlbW90ZS0+dXJsWzBdCisJCSAgICAgICA6IF8oIihubyBVUkwpIikpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzdGF0ZXMuc3RhbGUubnI7IGkrKykgeworCQljb25zdCBjaGFyICpyZWZuYW1lID0gc3RhdGVzLnN0YWxlLml0ZW1zW2ldLnV0aWw7CisKKwkJaWYgKCFkcnlfcnVuKQorCQkJcmVzdWx0IHw9IGRlbGV0ZV9yZWYocmVmbmFtZSwgTlVMTCwgMCk7CisKKwkJaWYgKGRyeV9ydW4pCisJCQlwcmludGZfbG4oXygiICogW3dvdWxkIHBydW5lXSAlcyIpLAorCQkJICAgICAgIGFiYnJldl9yZWYocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSk7CisJCWVsc2UKKwkJCXByaW50Zl9sbihfKCIgKiBbcHJ1bmVkXSAlcyIpLAorCQkJICAgICAgIGFiYnJldl9yZWYocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSk7CisJCXdhcm5fZGFuZ2xpbmdfc3ltcmVmKHN0ZG91dCwgZGFuZ2xpbmdfbXNnLCByZWZuYW1lKTsKKwl9CisKKwlmcmVlX3JlbW90ZV9yZWZfc3RhdGVzKCZzdGF0ZXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3JlbW90ZV9kZWZhdWx0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKnByaXYpCit7CisJaWYgKHN0cmNtcChrZXksICJyZW1vdGVzLmRlZmF1bHQiKSA9PSAwKSB7CisJCWludCAqZm91bmQgPSBwcml2OworCQkqZm91bmQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1cGRhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpLCBwcnVuZSA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKCdwJywgInBydW5lIiwgJnBydW5lLAorCQkJICAgIE5fKCJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWNvbnN0IGNoYXIgKipmZXRjaF9hcmd2OworCWludCBmZXRjaF9hcmdjID0gMDsKKwlpbnQgZGVmYXVsdF9kZWZpbmVkID0gMDsKKworCWZldGNoX2FyZ3YgPSB4bWFsbG9jKHNpemVvZihjaGFyICopICogKGFyZ2MrNSkpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfdXBkYXRlX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisKKwlmZXRjaF9hcmd2W2ZldGNoX2FyZ2MrK10gPSAiZmV0Y2giOworCisJaWYgKHBydW5lKQorCQlmZXRjaF9hcmd2W2ZldGNoX2FyZ2MrK10gPSAiLS1wcnVuZSI7CisJaWYgKHZlcmJvc2UpCisJCWZldGNoX2FyZ3ZbZmV0Y2hfYXJnYysrXSA9ICItdiI7CisJZmV0Y2hfYXJndltmZXRjaF9hcmdjKytdID0gIi0tbXVsdGlwbGUiOworCWlmIChhcmdjIDwgMikKKwkJZmV0Y2hfYXJndltmZXRjaF9hcmdjKytdID0gImRlZmF1bHQiOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCWZldGNoX2FyZ3ZbZmV0Y2hfYXJnYysrXSA9IGFyZ3ZbaV07CisKKwlpZiAoc3RyY21wKGZldGNoX2FyZ3ZbZmV0Y2hfYXJnYy0xXSwgImRlZmF1bHQiKSA9PSAwKSB7CisJCWdpdF9jb25maWcoZ2V0X3JlbW90ZV9kZWZhdWx0LCAmZGVmYXVsdF9kZWZpbmVkKTsKKwkJaWYgKCFkZWZhdWx0X2RlZmluZWQpCisJCQlmZXRjaF9hcmd2W2ZldGNoX2FyZ2MtMV0gPSAiLS1hbGwiOworCX0KKworCWZldGNoX2FyZ3ZbZmV0Y2hfYXJnY10gPSBOVUxMOworCisJcmV0dXJuIHJ1bl9jb21tYW5kX3Zfb3B0KGZldGNoX2FyZ3YsIFJVTl9HSVRfQ01EKTsKK30KKworc3RhdGljIGludCByZW1vdmVfYWxsX2ZldGNoX3JlZnNwZWNzKGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqa2V5KQoreworCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihrZXksIE5VTEwsIE5VTEwsIDEpOworfQorCitzdGF0aWMgaW50IGFkZF9icmFuY2hlcyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKipicmFuY2hlcywKKwkJCWNvbnN0IGNoYXIgKmtleSkKK3sKKwljb25zdCBjaGFyICpyZW1vdGVuYW1lID0gcmVtb3RlLT5uYW1lOworCWludCBtaXJyb3IgPSByZW1vdGUtPm1pcnJvcjsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZnNwZWMgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoOyAqYnJhbmNoZXM7IGJyYW5jaGVzKyspCisJCWlmIChhZGRfYnJhbmNoKGtleSwgKmJyYW5jaGVzLCByZW1vdGVuYW1lLCBtaXJyb3IsICZyZWZzcGVjKSkgeworCQkJc3RyYnVmX3JlbGVhc2UoJnJlZnNwZWMpOworCQkJcmV0dXJuIDE7CisJCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZzcGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfcmVtb3RlX2JyYW5jaGVzKGNvbnN0IGNoYXIgKnJlbW90ZW5hbWUsIGNvbnN0IGNoYXIgKipicmFuY2hlcywKKwkJCQlpbnQgYWRkX21vZGUpCit7CisJc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisKKwlzdHJidWZfYWRkZigma2V5LCAicmVtb3RlLiVzLmZldGNoIiwgcmVtb3RlbmFtZSk7CisKKwlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKHJlbW90ZW5hbWUpKQorCQlkaWUoXygiTm8gc3VjaCByZW1vdGUgJyVzJyIpLCByZW1vdGVuYW1lKTsKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZW5hbWUpOworCisJaWYgKCFhZGRfbW9kZSAmJiByZW1vdmVfYWxsX2ZldGNoX3JlZnNwZWNzKHJlbW90ZW5hbWUsIGtleS5idWYpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGFkZF9icmFuY2hlcyhyZW1vdGUsIGJyYW5jaGVzLCBrZXkuYnVmKSkgeworCQlzdHJidWZfcmVsZWFzZSgma2V5KTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmtleSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2JyYW5jaGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgYWRkX21vZGUgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTignXDAnLCAiYWRkIiwgJmFkZF9tb2RlLCBOXygiYWRkIGJyYW5jaCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fcmVtb3RlX3NldGJyYW5jaGVzX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA9PSAwKSB7CisJCWVycm9yKF8oIm5vIHJlbW90ZSBzcGVjaWZpZWQiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9zZXRicmFuY2hlc191c2FnZSwgb3B0aW9ucyk7CisJfQorCWFyZ3ZbYXJnY10gPSBOVUxMOworCisJcmV0dXJuIHNldF9yZW1vdGVfYnJhbmNoZXMoYXJndlswXSwgYXJndiArIDEsIGFkZF9tb2RlKTsKK30KKworc3RhdGljIGludCBzZXRfdXJsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgcHVzaF9tb2RlID0gMCwgYWRkX21vZGUgPSAwLCBkZWxldGVfbW9kZSA9IDA7CisJaW50IG1hdGNoZXMgPSAwLCBuZWdhdGl2ZV9tYXRjaGVzID0gMDsKKwljb25zdCBjaGFyICpyZW1vdGVuYW1lID0gTlVMTDsKKwljb25zdCBjaGFyICpuZXd1cmwgPSBOVUxMOworCWNvbnN0IGNoYXIgKm9sZHVybCA9IE5VTEw7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXJlZ2V4X3Qgb2xkX3JlZ2V4OworCWNvbnN0IGNoYXIgKip1cmxzZXQ7CisJaW50IHVybHNldF9ucjsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWVfYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKCdcMCcsICJwdXNoIiwgJnB1c2hfbW9kZSwKKwkJCSAgICBOXygibWFuaXB1bGF0ZSBwdXNoIFVSTHMiKSksCisJCU9QVF9CT09MRUFOKCdcMCcsICJhZGQiLCAmYWRkX21vZGUsCisJCQkgICAgTl8oImFkZCBVUkwiKSksCisJCU9QVF9CT09MRUFOKCdcMCcsICJkZWxldGUiLCAmZGVsZXRlX21vZGUsCisJCQkgICAgTl8oImRlbGV0ZSBVUkxzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3NldHVybF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCisJaWYgKGFkZF9tb2RlICYmIGRlbGV0ZV9tb2RlKQorCQlkaWUoXygiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIikpOworCisJaWYgKGFyZ2MgPCAzIHx8IGFyZ2MgPiA0IHx8ICgoYWRkX21vZGUgfHwgZGVsZXRlX21vZGUpICYmIGFyZ2MgIT0gMykpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9zZXR1cmxfdXNhZ2UsIG9wdGlvbnMpOworCisJcmVtb3RlbmFtZSA9IGFyZ3ZbMV07CisJbmV3dXJsID0gYXJndlsyXTsKKwlpZiAoYXJnYyA+IDMpCisJCW9sZHVybCA9IGFyZ3ZbM107CisKKwlpZiAoZGVsZXRlX21vZGUpCisJCW9sZHVybCA9IG5ld3VybDsKKworCWlmICghcmVtb3RlX2lzX2NvbmZpZ3VyZWQocmVtb3RlbmFtZSkpCisJCWRpZShfKCJObyBzdWNoIHJlbW90ZSAnJXMnIiksIHJlbW90ZW5hbWUpOworCXJlbW90ZSA9IHJlbW90ZV9nZXQocmVtb3RlbmFtZSk7CisKKwlpZiAocHVzaF9tb2RlKSB7CisJCXN0cmJ1Zl9hZGRmKCZuYW1lX2J1ZiwgInJlbW90ZS4lcy5wdXNodXJsIiwgcmVtb3RlbmFtZSk7CisJCXVybHNldCA9IHJlbW90ZS0+cHVzaHVybDsKKwkJdXJsc2V0X25yID0gcmVtb3RlLT5wdXNodXJsX25yOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRmKCZuYW1lX2J1ZiwgInJlbW90ZS4lcy51cmwiLCByZW1vdGVuYW1lKTsKKwkJdXJsc2V0ID0gcmVtb3RlLT51cmw7CisJCXVybHNldF9uciA9IHJlbW90ZS0+dXJsX25yOworCX0KKworCS8qIFNwZWNpYWwgY2FzZXMgdGhhdCBhZGQgbmV3IGVudHJ5LiAqLworCWlmICgoIW9sZHVybCAmJiAhZGVsZXRlX21vZGUpIHx8IGFkZF9tb2RlKSB7CisJCWlmIChhZGRfbW9kZSkKKwkJCWdpdF9jb25maWdfc2V0X211bHRpdmFyKG5hbWVfYnVmLmJ1ZiwgbmV3dXJsLAorCQkJCSJeJCIsIDApOworCQllbHNlCisJCQlnaXRfY29uZmlnX3NldChuYW1lX2J1Zi5idWYsIG5ld3VybCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lX2J1Zik7CisJCXJldHVybiAwOworCX0KKworCS8qIE9sZCBVUkwgc3BlY2lmaWVkLiBEZW1hbmQgdGhhdCBvbmUgbWF0Y2hlcy4gKi8KKwlpZiAocmVnY29tcCgmb2xkX3JlZ2V4LCBvbGR1cmwsIFJFR19FWFRFTkRFRCkpCisJCWRpZShfKCJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiKSwgb2xkdXJsKTsKKworCWZvciAoaSA9IDA7IGkgPCB1cmxzZXRfbnI7IGkrKykKKwkJaWYgKCFyZWdleGVjKCZvbGRfcmVnZXgsIHVybHNldFtpXSwgMCwgTlVMTCwgMCkpCisJCQltYXRjaGVzKys7CisJCWVsc2UKKwkJCW5lZ2F0aXZlX21hdGNoZXMrKzsKKwlpZiAoIWRlbGV0ZV9tb2RlICYmICFtYXRjaGVzKQorCQlkaWUoXygiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIiksIG9sZHVybCk7CisJaWYgKGRlbGV0ZV9tb2RlICYmICFuZWdhdGl2ZV9tYXRjaGVzICYmICFwdXNoX21vZGUpCisJCWRpZShfKCJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiKSk7CisKKwlyZWdmcmVlKCZvbGRfcmVnZXgpOworCisJaWYgKCFkZWxldGVfbW9kZSkKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIobmFtZV9idWYuYnVmLCBuZXd1cmwsIG9sZHVybCwgMCk7CisJZWxzZQorCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihuYW1lX2J1Zi5idWYsIE5VTEwsIG9sZHVybCwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29uZV9lbnRyeShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ID0gcHJpdjsKKwlzdHJ1Y3Qgc3RyYnVmIHVybF9idWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICoqdXJsOworCWludCBpLCB1cmxfbnI7CisKKwlpZiAocmVtb3RlLT51cmxfbnIgPiAwKSB7CisJCXN0cmJ1Zl9hZGRmKCZ1cmxfYnVmLCAiJXMgKGZldGNoKSIsIHJlbW90ZS0+dXJsWzBdKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHJlbW90ZS0+bmFtZSktPnV0aWwgPQorCQkJCXN0cmJ1Zl9kZXRhY2goJnVybF9idWYsIE5VTEwpOworCX0gZWxzZQorCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcmVtb3RlLT5uYW1lKS0+dXRpbCA9IE5VTEw7CisJaWYgKHJlbW90ZS0+cHVzaHVybF9ucikgeworCQl1cmwgPSByZW1vdGUtPnB1c2h1cmw7CisJCXVybF9uciA9IHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9IGVsc2UgeworCQl1cmwgPSByZW1vdGUtPnVybDsKKwkJdXJsX25yID0gcmVtb3RlLT51cmxfbnI7CisJfQorCWZvciAoaSA9IDA7IGkgPCB1cmxfbnI7IGkrKykKKwl7CisJCXN0cmJ1Zl9hZGRmKCZ1cmxfYnVmLCAiJXMgKHB1c2gpIiwgdXJsW2ldKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHJlbW90ZS0+bmFtZSktPnV0aWwgPQorCQkJCXN0cmJ1Zl9kZXRhY2goJnVybF9idWYsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfYWxsKHZvaWQpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCByZXN1bHQ7CisKKwlsaXN0LnN0cmR1cF9zdHJpbmdzID0gMTsKKwlyZXN1bHQgPSBmb3JfZWFjaF9yZW1vdGUoZ2V0X29uZV9lbnRyeSwgJmxpc3QpOworCisJaWYgKCFyZXN1bHQpIHsKKwkJaW50IGk7CisKKwkJc29ydF9zdHJpbmdfbGlzdCgmbGlzdCk7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gbGlzdC5pdGVtcyArIGk7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGYoIiVzXHQlc1xuIiwgaXRlbS0+c3RyaW5nLAorCQkJCQlpdGVtLT51dGlsID8gKGNvbnN0IGNoYXIgKilpdGVtLT51dGlsIDogIiIpOworCQkJZWxzZSB7CisJCQkJaWYgKGkgJiYgIXN0cmNtcCgoaXRlbSAtIDEpLT5zdHJpbmcsIGl0ZW0tPnN0cmluZykpCisJCQkJCWNvbnRpbnVlOworCQkJCXByaW50ZigiJXNcbiIsIGl0ZW0tPnN0cmluZyk7CisJCQl9CisJCX0KKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDEpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBjbWRfcmVtb3RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWludCByZXN1bHQ7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VzYWdlLAorCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCWlmIChhcmdjIDwgMSkKKwkJcmVzdWx0ID0gc2hvd19hbGwoKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSkKKwkJcmVzdWx0ID0gYWRkKGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInJlbmFtZSIpKQorCQlyZXN1bHQgPSBtdihhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJybSIpIHx8ICFzdHJjbXAoYXJndlswXSwgInJlbW92ZSIpKQorCQlyZXN1bHQgPSBybShhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzZXQtaGVhZCIpKQorCQlyZXN1bHQgPSBzZXRfaGVhZChhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzZXQtYnJhbmNoZXMiKSkKKwkJcmVzdWx0ID0gc2V0X2JyYW5jaGVzKGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNldC11cmwiKSkKKwkJcmVzdWx0ID0gc2V0X3VybChhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzaG93IikpCisJCXJlc3VsdCA9IHNob3coYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAicHJ1bmUiKSkKKwkJcmVzdWx0ID0gcHJ1bmUoYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAidXBkYXRlIikpCisJCXJlc3VsdCA9IHVwZGF0ZShhcmdjLCBhcmd2KTsKKwllbHNlIHsKKwkJZXJyb3IoXygiVW5rbm93biBzdWJjb21tYW5kOiAlcyIpLCBhcmd2WzBdKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0ID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlcGxhY2UuYyBiL2J1aWx0aW4vcmVwbGFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYWFmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlcGxhY2UuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCByZXBsYWNlIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz4KKyAqCisgKiBCYXNlZCBvbiBidWlsdGluLXRhZy5jIGJ5IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+CisgKiBhbmQgQ2FybG9zIFJpY2EgPGphc2FtcGxlckBnbWFpbC5jb20+IHRoYXQgd2FzIGl0c2VsZiBiYXNlZCBvbgorICogZ2l0LXRhZy5zaCBhbmQgbWt0YWcuYyBieSBMaW51cyBUb3J2YWxkcy4KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfcmVwbGFjZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iKSwKKwlOXygiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iKSwKKwlOXygiZ2l0IHJlcGxhY2UgLWwgWzxwYXR0ZXJuPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHNob3dfcmVmZXJlbmNlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWNvbnN0IGNoYXIgKnBhdHRlcm4gPSBjYl9kYXRhOworCisJaWYgKCFmbm1hdGNoKHBhdHRlcm4sIHJlZm5hbWUsIDApKQorCQlwcmludGYoIiVzXG4iLCByZWZuYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpc3RfcmVwbGFjZV9yZWZzKGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJaWYgKHBhdHRlcm4gPT0gTlVMTCkKKwkJcGF0dGVybiA9ICIqIjsKKworCWZvcl9lYWNoX3JlcGxhY2VfcmVmKHNob3dfcmVmZXJlbmNlLCAodm9pZCAqKSBwYXR0ZXJuKTsKKworCXJldHVybiAwOworfQorCit0eXBlZGVmIGludCAoKmVhY2hfcmVwbGFjZV9uYW1lX2ZuKShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWYsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitzdGF0aWMgaW50IGZvcl9lYWNoX3JlcGxhY2VfbmFtZShjb25zdCBjaGFyICoqYXJndiwgZWFjaF9yZXBsYWNlX25hbWVfZm4gZm4pCit7CisJY29uc3QgY2hhciAqKnA7CisJY2hhciByZWZbUEFUSF9NQVhdOworCWludCBoYWRfZXJyb3IgPSAwOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlmb3IgKHAgPSBhcmd2OyAqcDsgcCsrKSB7CisJCWlmIChzbnByaW50ZihyZWYsIHNpemVvZihyZWYpLCAicmVmcy9yZXBsYWNlLyVzIiwgKnApCisJCQkJCT49IHNpemVvZihyZWYpKSB7CisJCQllcnJvcigicmVwbGFjZSByZWYgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIsIDUwLCAqcCk7CisJCQloYWRfZXJyb3IgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJlYWRfcmVmKHJlZiwgc2hhMSkpIHsKKwkJCWVycm9yKCJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZC4iLCAqcCk7CisJCQloYWRfZXJyb3IgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGZuKCpwLCByZWYsIHNoYTEpKQorCQkJaGFkX2Vycm9yID0gMTsKKwl9CisJcmV0dXJuIGhhZF9lcnJvcjsKK30KKworc3RhdGljIGludCBkZWxldGVfcmVwbGFjZV9yZWYoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcmVmLAorCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpZiAoZGVsZXRlX3JlZihyZWYsIHNoYTEsIDApKQorCQlyZXR1cm4gMTsKKwlwcmludGYoIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJ1xuIiwgbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVwbGFjZV9vYmplY3QoY29uc3QgY2hhciAqb2JqZWN0X3JlZiwgY29uc3QgY2hhciAqcmVwbGFjZV9yZWYsCisJCQkgIGludCBmb3JjZSkKK3sKKwl1bnNpZ25lZCBjaGFyIG9iamVjdFsyMF0sIHByZXZbMjBdLCByZXBsWzIwXTsKKwljaGFyIHJlZltQQVRIX01BWF07CisJc3RydWN0IHJlZl9sb2NrICpsb2NrOworCisJaWYgKGdldF9zaGExKG9iamVjdF9yZWYsIG9iamVjdCkpCisJCWRpZSgiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iLCBvYmplY3RfcmVmKTsKKwlpZiAoZ2V0X3NoYTEocmVwbGFjZV9yZWYsIHJlcGwpKQorCQlkaWUoIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiwgcmVwbGFjZV9yZWYpOworCisJaWYgKHNucHJpbnRmKHJlZiwgc2l6ZW9mKHJlZiksCisJCSAgICAgInJlZnMvcmVwbGFjZS8lcyIsCisJCSAgICAgc2hhMV90b19oZXgob2JqZWN0KSkgPiBzaXplb2YocmVmKSAtIDEpCisJCWRpZSgicmVwbGFjZSByZWYgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIsIDUwLCByZWYpOworCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChyZWYsIDApKQorCQlkaWUoIiclcycgaXMgbm90IGEgdmFsaWQgcmVmIG5hbWUuIiwgcmVmKTsKKworCWlmIChyZWFkX3JlZihyZWYsIHByZXYpKQorCQloYXNoY2xyKHByZXYpOworCWVsc2UgaWYgKCFmb3JjZSkKKwkJZGllKCJyZXBsYWNlIHJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIiwgcmVmKTsKKworCWxvY2sgPSBsb2NrX2FueV9yZWZfZm9yX3VwZGF0ZShyZWYsIHByZXYsIDApOworCWlmICghbG9jaykKKwkJZGllKCIlczogY2Fubm90IGxvY2sgdGhlIHJlZiIsIHJlZik7CisJaWYgKHdyaXRlX3JlZl9zaGExKGxvY2ssIHJlcGwsIE5VTEwpIDwgMCkKKwkJZGllKCIlczogY2Fubm90IHVwZGF0ZSB0aGUgcmVmIiwgcmVmKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX3JlcGxhY2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGxpc3QgPSAwLCBkZWxldGUgPSAwLCBmb3JjZSA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MRUFOKCdsJywgTlVMTCwgJmxpc3QsIE5fKCJsaXN0IHJlcGxhY2UgcmVmcyIpKSwKKwkJT1BUX0JPT0xFQU4oJ2QnLCBOVUxMLCAmZGVsZXRlLCBOXygiZGVsZXRlIHJlcGxhY2UgcmVmcyIpKSwKKwkJT1BUX0JPT0xFQU4oJ2YnLCBOVUxMLCAmZm9yY2UsIE5fKCJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfcmVwbGFjZV91c2FnZSwgMCk7CisKKwlpZiAobGlzdCAmJiBkZWxldGUpCisJCXVzYWdlX21zZ19vcHQoIi1sIGFuZCAtZCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIsCisJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAoZm9yY2UgJiYgKGxpc3QgfHwgZGVsZXRlKSkKKwkJdXNhZ2VfbXNnX29wdCgiLWYgY2Fubm90IGJlIHVzZWQgd2l0aCAtZCBvciAtbCIsCisJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisKKwkvKiBEZWxldGUgcmVmcyAqLworCWlmIChkZWxldGUpIHsKKwkJaWYgKGFyZ2MgPCAxKQorCQkJdXNhZ2VfbXNnX29wdCgiLWQgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IiwKKwkJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisJCXJldHVybiBmb3JfZWFjaF9yZXBsYWNlX25hbWUoYXJndiwgZGVsZXRlX3JlcGxhY2VfcmVmKTsKKwl9CisKKwkvKiBSZXBsYWNlIG9iamVjdCAqLworCWlmICghbGlzdCAmJiBhcmdjKSB7CisJCWlmIChhcmdjICE9IDIpCisJCQl1c2FnZV9tc2dfb3B0KCJiYWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIsCisJCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCQlyZXR1cm4gcmVwbGFjZV9vYmplY3QoYXJndlswXSwgYXJndlsxXSwgZm9yY2UpOworCX0KKworCS8qIExpc3QgcmVmcywgZXZlbiBpZiAibGlzdCIgaXMgbm90IHNldCAqLworCWlmIChhcmdjID4gMSkKKwkJdXNhZ2VfbXNnX29wdCgib25seSBvbmUgcGF0dGVybiBjYW4gYmUgZ2l2ZW4gd2l0aCAtbCIsCisJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisJaWYgKGZvcmNlKQorCQl1c2FnZV9tc2dfb3B0KCItZiBuZWVkcyBzb21lIGFyZ3VtZW50cyIsCisJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisKKwlyZXR1cm4gbGlzdF9yZXBsYWNlX3JlZnMoYXJndlswXSk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlcmVyZS5jIGIvYnVpbHRpbi9yZXJlcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzE3MDhlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZXJlcmUuYwpAQCAtMCwwICsxLDExMCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorI2luY2x1ZGUgInhkaWZmL3hkaWZmLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVyZXJlX3VzYWdlW10gPSB7CisJTl8oImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IHBhdGguLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIiksCisJTlVMTCwKK307CisKK3N0YXRpYyBpbnQgb3V0Zih2b2lkICpkdW1teSwgbW1idWZmZXJfdCAqcHRyLCBpbnQgbmJ1ZikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrKQorCQlpZiAod3JpdGVfaW5fZnVsbCgxLCBwdHJbaV0ucHRyLCBwdHJbaV0uc2l6ZSkgIT0gcHRyW2ldLnNpemUpCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl90d28oY29uc3QgY2hhciAqZmlsZTEsIGNvbnN0IGNoYXIgKmxhYmVsMSwKKwkJY29uc3QgY2hhciAqZmlsZTIsIGNvbnN0IGNoYXIgKmxhYmVsMikKK3sKKwl4cHBhcmFtX3QgeHBwOworCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwl4ZGVtaXRjYl90IGVjYjsKKwltbWZpbGVfdCBtaW51cywgcGx1czsKKworCWlmIChyZWFkX21tZmlsZSgmbWludXMsIGZpbGUxKSB8fCByZWFkX21tZmlsZSgmcGx1cywgZmlsZTIpKQorCQlyZXR1cm4gMTsKKworCXByaW50ZigiLS0tIGEvJXNcbisrKyBiLyVzXG4iLCBsYWJlbDEsIGxhYmVsMik7CisJZmZsdXNoKHN0ZG91dCk7CisJbWVtc2V0KCZ4cHAsIDAsIHNpemVvZih4cHApKTsKKwl4cHAuZmxhZ3MgPSAwOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCXhlY2ZnLmN0eGxlbiA9IDM7CisJZWNiLm91dGYgPSBvdXRmOworCXhkaV9kaWZmKCZtaW51cywgJnBsdXMsICZ4cHAsICZ4ZWNmZywgJmVjYik7CisKKwlmcmVlKG1pbnVzLnB0cik7CisJZnJlZShwbHVzLnB0cik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfcmVyZXJlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBtZXJnZV9yciA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWludCBpLCBmZCwgYXV0b3VwZGF0ZSA9IC0xLCBmbGFncyA9IDA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NFVF9JTlQoMCwgInJlcmVyZS1hdXRvdXBkYXRlIiwgJmF1dG91cGRhdGUsCisJCQlOXygicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiKSwgMSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCByZXJlcmVfdXNhZ2UsIDApOworCisJaWYgKGF1dG91cGRhdGUgPT0gMSkKKwkJZmxhZ3MgPSBSRVJFUkVfQVVUT1VQREFURTsKKwlpZiAoYXV0b3VwZGF0ZSA9PSAwKQorCQlmbGFncyA9IFJFUkVSRV9OT0FVVE9VUERBVEU7CisKKwlpZiAoYXJnYyA8IDEpCisJCXJldHVybiByZXJlcmUoZmxhZ3MpOworCisJaWYgKCFzdHJjbXAoYXJndlswXSwgImZvcmdldCIpKSB7CisJCWNvbnN0IGNoYXIgKipwYXRoc3BlYzsKKwkJaWYgKGFyZ2MgPCAyKQorCQkJd2FybmluZygiJ2dpdCByZXJlcmUgZm9yZ2V0JyB3aXRob3V0IHBhdGhzIGlzIGRlcHJlY2F0ZWQiKTsKKwkJcGF0aHNwZWMgPSBnZXRfcGF0aHNwZWMocHJlZml4LCBhcmd2ICsgMSk7CisJCXJldHVybiByZXJlcmVfZm9yZ2V0KHBhdGhzcGVjKTsKKwl9CisKKwlmZCA9IHNldHVwX3JlcmVyZSgmbWVyZ2VfcnIsIGZsYWdzKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gMDsKKworCWlmICghc3RyY21wKGFyZ3ZbMF0sICJjbGVhciIpKSB7CisJCXJlcmVyZV9jbGVhcigmbWVyZ2VfcnIpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiZ2MiKSkKKwkJcmVyZXJlX2djKCZtZXJnZV9ycik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic3RhdHVzIikpCisJCWZvciAoaSA9IDA7IGkgPCBtZXJnZV9yci5ucjsgaSsrKQorCQkJcHJpbnRmKCIlc1xuIiwgbWVyZ2VfcnIuaXRlbXNbaV0uc3RyaW5nKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJyZW1haW5pbmciKSkgeworCQlyZXJlcmVfcmVtYWluaW5nKCZtZXJnZV9ycik7CisJCWZvciAoaSA9IDA7IGkgPCBtZXJnZV9yci5ucjsgaSsrKSB7CisJCQlpZiAobWVyZ2VfcnIuaXRlbXNbaV0udXRpbCAhPSBSRVJFUkVfUkVTT0xWRUQpCisJCQkJcHJpbnRmKCIlc1xuIiwgbWVyZ2VfcnIuaXRlbXNbaV0uc3RyaW5nKTsKKwkJCWVsc2UKKwkJCQkvKiBwcmVwYXJlIGZvciBsYXRlciBjYWxsIHRvCisJCQkJICogc3RyaW5nX2xpc3RfY2xlYXIoKSAqLworCQkJCW1lcmdlX3JyLml0ZW1zW2ldLnV0aWwgPSBOVUxMOworCQl9CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJkaWZmIikpCisJCWZvciAoaSA9IDA7IGkgPCBtZXJnZV9yci5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpwYXRoID0gbWVyZ2VfcnIuaXRlbXNbaV0uc3RyaW5nOworCQkJY29uc3QgY2hhciAqbmFtZSA9IChjb25zdCBjaGFyICopbWVyZ2VfcnIuaXRlbXNbaV0udXRpbDsKKwkJCWRpZmZfdHdvKHJlcmVyZV9wYXRoKG5hbWUsICJwcmVpbWFnZSIpLCBwYXRoLCBwYXRoLCBwYXRoKTsKKwkJfQorCWVsc2UKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHJlcmVyZV91c2FnZSwgb3B0aW9ucyk7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmbWVyZ2VfcnIsIDEpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXNldC5jIGIvYnVpbHRpbi9yZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNWNjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Jlc2V0LmMKQEAgLTAsMCArMSwzODIgQEAKKy8qCisgKiAiZ2l0IHJlc2V0IiBidWlsdGluIGNvbW1hbmQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2FybG9zIFJpY2EKKyAqCisgKiBCYXNlZCBvbiBnaXQtcmVzZXQuc2gsIHdoaWNoIGlzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IExpbnVzIFRvcnZhbGRzIGFuZCBKdW5pbyBDIEhhbWFubworICovCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9yZXNldF91c2FnZVtdID0geworCU5fKCJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iKSwKKwlOXygiZ2l0IHJlc2V0IFstcV0gPGNvbW1pdD4gWy0tXSA8cGF0aHM+Li4uIiksCisJTl8oImdpdCByZXNldCAtLXBhdGNoIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGhzPi4uLl0iKSwKKwlOVUxMCit9OworCitlbnVtIHJlc2V0X3R5cGUgeyBNSVhFRCwgU09GVCwgSEFSRCwgTUVSR0UsIEtFRVAsIE5PTkUgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpyZXNldF90eXBlX25hbWVzW10gPSB7CisJTl8oIm1peGVkIiksIE5fKCJzb2Z0IiksIE5fKCJoYXJkIiksIE5fKCJtZXJnZSIpLCBOXygia2VlcCIpLCBOVUxMCit9OworCitzdGF0aWMgaW5saW5lIGludCBpc19tZXJnZSh2b2lkKQoreworCXJldHVybiAhYWNjZXNzKGdpdF9wYXRoKCJNRVJHRV9IRUFEIiksIEZfT0spOworfQorCitzdGF0aWMgaW50IHJlc2V0X2luZGV4X2ZpbGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IHJlc2V0X3R5cGUsIGludCBxdWlldCkKK3sKKwlpbnQgbnIgPSAxOworCWludCBuZXdmZDsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2NbMl07CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9jayA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gMTsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisJb3B0cy5tZXJnZSA9IDE7CisJaWYgKCFxdWlldCkKKwkJb3B0cy52ZXJib3NlX3VwZGF0ZSA9IDE7CisJc3dpdGNoIChyZXNldF90eXBlKSB7CisJY2FzZSBLRUVQOgorCWNhc2UgTUVSR0U6CisJCW9wdHMudXBkYXRlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBIQVJEOgorCQlvcHRzLnVwZGF0ZSA9IDE7CisJCS8qIGZhbGx0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJb3B0cy5yZXNldCA9IDE7CisJfQorCisJbmV3ZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrLCAxKTsKKworCXJlYWRfY2FjaGVfdW5tZXJnZWQoKTsKKworCWlmIChyZXNldF90eXBlID09IEtFRVApIHsKKwkJdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworCQlpZiAoZ2V0X3NoYTEoIkhFQUQiLCBoZWFkX3NoYTEpKQorCQkJcmV0dXJuIGVycm9yKF8oIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIikpOworCQlpZiAoIWZpbGxfdHJlZV9kZXNjcmlwdG9yKGRlc2MsIGhlYWRfc2hhMSkpCisJCQlyZXR1cm4gZXJyb3IoXygiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIpKTsKKwkJbnIrKzsKKwkJb3B0cy5mbiA9IHR3b3dheV9tZXJnZTsKKwl9CisKKwlpZiAoIWZpbGxfdHJlZV9kZXNjcmlwdG9yKGRlc2MgKyBuciAtIDEsIHNoYTEpKQorCQlyZXR1cm4gZXJyb3IoXygiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iKSwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmICh1bnBhY2tfdHJlZXMobnIsIGRlc2MsICZvcHRzKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlc2V0X3R5cGUgPT0gTUlYRUQgfHwgcmVzZXRfdHlwZSA9PSBIQVJEKSB7CisJCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHNoYTEpOworCQlwcmltZV9jYWNoZV90cmVlKCZhY3RpdmVfY2FjaGVfdHJlZSwgdHJlZSk7CisJfQorCisJaWYgKHdyaXRlX2NhY2hlKG5ld2ZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKKwkgICAgY29tbWl0X2xvY2tlZF9pbmRleChsb2NrKSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfbmV3X2hlYWRfbGluZShzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJY29uc3QgY2hhciAqaGV4LCAqYm9keTsKKworCWhleCA9IGZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCBERUZBVUxUX0FCQlJFVik7CisJcHJpbnRmKF8oIkhFQUQgaXMgbm93IGF0ICVzIiksIGhleCk7CisJYm9keSA9IHN0cnN0cihjb21taXQtPmJ1ZmZlciwgIlxuXG4iKTsKKwlpZiAoYm9keSkgeworCQljb25zdCBjaGFyICplb2w7CisJCXNpemVfdCBsZW47CisJCWJvZHkgKz0gMjsKKwkJZW9sID0gc3RyY2hyKGJvZHksICdcbicpOworCQlsZW4gPSBlb2wgPyBlb2wgLSBib2R5IDogc3RybGVuKGJvZHkpOworCQlwcmludGYoIiAlLipzXG4iLCAoaW50KSBsZW4sIGJvZHkpOworCX0KKwllbHNlCisJCXByaW50ZigiXG4iKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfaW5kZXhfcmVmcmVzaChpbnQgZmQsIHN0cnVjdCBsb2NrX2ZpbGUgKmluZGV4X2xvY2ssIGludCBmbGFncykKK3sKKwlpbnQgcmVzdWx0OworCisJaWYgKCFpbmRleF9sb2NrKSB7CisJCWluZGV4X2xvY2sgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisJCWZkID0gaG9sZF9sb2NrZWRfaW5kZXgoaW5kZXhfbG9jaywgMSk7CisJfQorCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcmVhZCBpbmRleCIpKTsKKworCXJlc3VsdCA9IHJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgKGZsYWdzKSwgTlVMTCwgTlVMTCwKKwkJCSAgICAgICBfKCJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIpKSA/IDEgOiAwOworCWlmICh3cml0ZV9jYWNoZShmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJCQljb21taXRfbG9ja2VkX2luZGV4KGluZGV4X2xvY2spKQorCQlyZXR1cm4gZXJyb3IgKCJDb3VsZCBub3QgcmVmcmVzaCBpbmRleCIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9pbmRleF9mcm9tX2RpZmYoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisJaW50ICpkaXNjYXJkX2ZsYWcgPSBkYXRhOworCisJLyogZG9fZGlmZl9jYWNoZSgpIG1hbmdsZWQgdGhlIGluZGV4ICovCisJZGlzY2FyZF9jYWNoZSgpOworCSpkaXNjYXJkX2ZsYWcgPSAxOworCXJlYWRfY2FjaGUoKTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSBxLT5xdWV1ZVtpXS0+b25lOworCQlpZiAob25lLT5tb2RlICYmICFpc19udWxsX3NoYTEob25lLT5zaGExKSkgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJCWNlID0gbWFrZV9jYWNoZV9lbnRyeShvbmUtPm1vZGUsIG9uZS0+c2hhMSwgb25lLT5wYXRoLAorCQkJCTAsIDApOworCQkJaWYgKCFjZSkKKwkJCQlkaWUoXygibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIpLAorCQkJCSAgICBvbmUtPnBhdGgpOworCQkJYWRkX2NhY2hlX2VudHJ5KGNlLCBBRERfQ0FDSEVfT0tfVE9fQUREIHwKKwkJCQlBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSk7CisJCX0gZWxzZQorCQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShvbmUtPnBhdGgpOworCX0KK30KKworc3RhdGljIGludCBpbnRlcmFjdGl2ZV9yZXNldChjb25zdCBjaGFyICpyZXZpc2lvbiwgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICoqcGF0aHNwZWMgPSBOVUxMOworCisJaWYgKCphcmd2KQorCQlwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YpOworCisJcmV0dXJuIHJ1bl9hZGRfaW50ZXJhY3RpdmUocmV2aXNpb24sICItLXBhdGNoPXJlc2V0IiwgcGF0aHNwZWMpOworfQorCitzdGF0aWMgaW50IHJlYWRfZnJvbV90cmVlKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqKmFyZ3YsCisJCXVuc2lnbmVkIGNoYXIgKnRyZWVfc2hhMSwgaW50IHJlZnJlc2hfZmxhZ3MpCit7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9jayA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKwlpbnQgaW5kZXhfZmQsIGluZGV4X3dhc19kaXNjYXJkZWQgPSAwOworCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0OworCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlkaWZmX3RyZWVfc2V0dXBfcGF0aHMoZ2V0X3BhdGhzcGVjKHByZWZpeCwgKGNvbnN0IGNoYXIgKiopYXJndiksICZvcHQpOworCW9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJb3B0LmZvcm1hdF9jYWxsYmFjayA9IHVwZGF0ZV9pbmRleF9mcm9tX2RpZmY7CisJb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gJmluZGV4X3dhc19kaXNjYXJkZWQ7CisKKwlpbmRleF9mZCA9IGhvbGRfbG9ja2VkX2luZGV4KGxvY2ssIDEpOworCWluZGV4X3dhc19kaXNjYXJkZWQgPSAwOworCXJlYWRfY2FjaGUoKTsKKwlpZiAoZG9fZGlmZl9jYWNoZSh0cmVlX3NoYTEsICZvcHQpKQorCQlyZXR1cm4gMTsKKwlkaWZmY29yZV9zdGQoJm9wdCk7CisJZGlmZl9mbHVzaCgmb3B0KTsKKwlkaWZmX3RyZWVfcmVsZWFzZV9wYXRocygmb3B0KTsKKworCWlmICghaW5kZXhfd2FzX2Rpc2NhcmRlZCkKKwkJLyogVGhlIGluZGV4IGlzIHN0aWxsIGNsb2JiZXJlZCBmcm9tIGRvX2RpZmZfY2FjaGUoKSAqLworCQlkaXNjYXJkX2NhY2hlKCk7CisJcmV0dXJuIHVwZGF0ZV9pbmRleF9yZWZyZXNoKGluZGV4X2ZkLCBsb2NrLCByZWZyZXNoX2ZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3JlZmxvZ19tZXNzYWdlKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICphY3Rpb24sCisJCQkgICAgICAgY29uc3QgY2hhciAqcmV2KQoreworCWNvbnN0IGNoYXIgKnJsYSA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKworCXN0cmJ1Zl9yZXNldChzYik7CisJaWYgKHJsYSkKKwkJc3RyYnVmX2FkZGYoc2IsICIlczogJXMiLCBybGEsIGFjdGlvbik7CisJZWxzZSBpZiAocmV2KQorCQlzdHJidWZfYWRkZihzYiwgInJlc2V0OiBtb3ZpbmcgdG8gJXMiLCByZXYpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoc2IsICJyZXNldDogJXMiLCBhY3Rpb24pOworfQorCitzdGF0aWMgdm9pZCBkaWVfaWZfdW5tZXJnZWRfY2FjaGUoaW50IHJlc2V0X3R5cGUpCit7CisJaWYgKGlzX21lcmdlKCkgfHwgcmVhZF9jYWNoZSgpIDwgMCB8fCB1bm1lcmdlZF9jYWNoZSgpKQorCQlkaWUoXygiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIpLAorCQkgICAgXyhyZXNldF90eXBlX25hbWVzW3Jlc2V0X3R5cGVdKSk7CisKK30KKworaW50IGNtZF9yZXNldChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSA9IDAsIHJlc2V0X3R5cGUgPSBOT05FLCB1cGRhdGVfcmVmX3N0YXR1cyA9IDAsIHF1aWV0ID0gMDsKKwlpbnQgcGF0Y2hfbW9kZSA9IDA7CisJY29uc3QgY2hhciAqcmV2ID0gIkhFQUQiOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sICpvcmlnID0gTlVMTCwgc2hhMV9vcmlnWzIwXSwKKwkJCQkqb2xkX29yaWcgPSBOVUxMLCBzaGExX29sZF9vcmlnWzIwXTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIikpLAorCQlPUFRfU0VUX0lOVCgwLCAibWl4ZWQiLCAmcmVzZXRfdHlwZSwKKwkJCQkJCU5fKCJyZXNldCBIRUFEIGFuZCBpbmRleCIpLCBNSVhFRCksCisJCU9QVF9TRVRfSU5UKDAsICJzb2Z0IiwgJnJlc2V0X3R5cGUsIE5fKCJyZXNldCBvbmx5IEhFQUQiKSwgU09GVCksCisJCU9QVF9TRVRfSU5UKDAsICJoYXJkIiwgJnJlc2V0X3R5cGUsCisJCQkJTl8oInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiKSwgSEFSRCksCisJCU9QVF9TRVRfSU5UKDAsICJtZXJnZSIsICZyZXNldF90eXBlLAorCQkJCU5fKCJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIiksIE1FUkdFKSwKKwkJT1BUX1NFVF9JTlQoMCwgImtlZXAiLCAmcmVzZXRfdHlwZSwKKwkJCQlOXygicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIiksIEtFRVApLAorCQlPUFRfQk9PTEVBTigncCcsICJwYXRjaCIsICZwYXRjaF9tb2RlLCBOXygic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF9yZXNldF91c2FnZSwKKwkJCQkJCVBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKworCS8qCisJICogUG9zc2libGUgYXJndW1lbnRzIGFyZToKKwkgKgorCSAqIGdpdCByZXNldCBbLW9wdHNdIDxyZXY+IDxwYXRocz4uLi4KKwkgKiBnaXQgcmVzZXQgWy1vcHRzXSA8cmV2PiAtLSA8cGF0aHM+Li4uCisJICogZ2l0IHJlc2V0IFstb3B0c10gLS0gPHBhdGhzPi4uLgorCSAqIGdpdCByZXNldCBbLW9wdHNdIDxwYXRocz4uLi4KKwkgKgorCSAqIEF0IHRoaXMgcG9pbnQsIGFyZ3ZbaV0gcG9pbnRzIGltbWVkaWF0ZWx5IGFmdGVyIFstb3B0c10uCisJICovCisKKwlpZiAoaSA8IGFyZ2MpIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tIikpIHsKKwkJCWkrKzsgLyogcmVzZXQgdG8gSEVBRCwgcG9zc2libHkgd2l0aCBwYXRocyAqLworCQl9IGVsc2UgaWYgKGkgKyAxIDwgYXJnYyAmJiAhc3RyY21wKGFyZ3ZbaSsxXSwgIi0tIikpIHsKKwkJCXJldiA9IGFyZ3ZbaV07CisJCQlpICs9IDI7CisJCX0KKwkJLyoKKwkJICogT3RoZXJ3aXNlLCBhcmd2W2ldIGNvdWxkIGJlIGVpdGhlciA8cmV2PiBvciA8cGF0aHM+IGFuZAorCQkgKiBoYXMgdG8gYmUgdW5hbWJpZ3VvdXMuCisJCSAqLworCQllbHNlIGlmICghZ2V0X3NoYTFfY29tbWl0dGlzaChhcmd2W2ldLCBzaGExKSkgeworCQkJLyoKKwkJCSAqIE9rLCBhcmd2W2ldIGxvb2tzIGxpa2UgYSByZXY7IGl0IHNob3VsZCBub3QKKwkJCSAqIGJlIGEgZmlsZW5hbWUuCisJCQkgKi8KKwkJCXZlcmlmeV9ub25fZmlsZW5hbWUocHJlZml4LCBhcmd2W2ldKTsKKwkJCXJldiA9IGFyZ3ZbaSsrXTsKKwkJfSBlbHNlIHsKKwkJCS8qIE90aGVyd2lzZSB3ZSB0cmVhdCB0aGlzIGFzIGEgZmlsZW5hbWUgKi8KKwkJCXZlcmlmeV9maWxlbmFtZShwcmVmaXgsIGFyZ3ZbaV0sIDEpOworCQl9CisJfQorCisJaWYgKGdldF9zaGExX2NvbW1pdHRpc2gocmV2LCBzaGExKSkKKwkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIHJldik7CisKKwkvKgorCSAqIE5PVEU6IEFzICJnaXQgcmVzZXQgJHRyZWVpc2ggLS0gJHBhdGgiIHNob3VsZCBiZSB1c2FibGUgb24KKwkgKiBhbnkgdHJlZS1pc2gsIHRoaXMgaXMgbm90IHN0cmljdGx5IGNvcnJlY3QuIFdlIGFyZSBub3QKKwkgKiBtb3ZpbmcgdGhlIEhFQUQgdG8gYW55IGNvbW1pdDsgd2UgYXJlIG1lcmVseSByZXNldHRpbmcgdGhlCisJICogZW50cmllcyBpbiB0aGUgaW5kZXggdG8gdGhhdCBvZiBhIHRyZWVpc2guCisJICovCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJaWYgKCFjb21taXQpCisJCWRpZShfKCJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIiksIHJldik7CisJaGFzaGNweShzaGExLCBjb21taXQtPm9iamVjdC5zaGExKTsKKworCWlmIChwYXRjaF9tb2RlKSB7CisJCWlmIChyZXNldF90eXBlICE9IE5PTkUpCisJCQlkaWUoXygiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IikpOworCQlyZXR1cm4gaW50ZXJhY3RpdmVfcmVzZXQocmV2LCBhcmd2ICsgaSwgcHJlZml4KTsKKwl9CisKKwkvKiBnaXQgcmVzZXQgdHJlZSBbLS1dIHBhdGhzLi4uIGNhbiBiZSB1c2VkIHRvCisJICogbG9hZCBjaG9zZW4gcGF0aHMgZnJvbSB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB3aXRob3V0CisJICogYWZmZWN0aW5nIHRoZSB3b3JraW5nIHRyZWUgbm9yIEhFQUQuICovCisJaWYgKGkgPCBhcmdjKSB7CisJCWlmIChyZXNldF90eXBlID09IE1JWEVEKQorCQkJd2FybmluZyhfKCItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iKSk7CisJCWVsc2UgaWYgKHJlc2V0X3R5cGUgIT0gTk9ORSkKKwkJCWRpZShfKCJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iKSwKKwkJCQkJXyhyZXNldF90eXBlX25hbWVzW3Jlc2V0X3R5cGVdKSk7CisJCXJldHVybiByZWFkX2Zyb21fdHJlZShwcmVmaXgsIGFyZ3YgKyBpLCBzaGExLAorCQkJCXF1aWV0ID8gUkVGUkVTSF9RVUlFVCA6IFJFRlJFU0hfSU5fUE9SQ0VMQUlOKTsKKwl9CisJaWYgKHJlc2V0X3R5cGUgPT0gTk9ORSkKKwkJcmVzZXRfdHlwZSA9IE1JWEVEOyAvKiBieSBkZWZhdWx0ICovCisKKwlpZiAocmVzZXRfdHlwZSAhPSBTT0ZUICYmIHJlc2V0X3R5cGUgIT0gTUlYRUQpCisJCXNldHVwX3dvcmtfdHJlZSgpOworCisJaWYgKHJlc2V0X3R5cGUgPT0gTUlYRUQgJiYgaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCWRpZShfKCIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIpLAorCQkgICAgXyhyZXNldF90eXBlX25hbWVzW3Jlc2V0X3R5cGVdKSk7CisKKwkvKiBTb2Z0IHJlc2V0IGRvZXMgbm90IHRvdWNoIHRoZSBpbmRleCBmaWxlIG5vciB0aGUgd29ya2luZyB0cmVlCisJICogYXQgYWxsLCBidXQgcmVxdWlyZXMgdGhlbSBpbiBhIGdvb2Qgb3JkZXIuICBPdGhlciByZXNldHMgcmVzZXQKKwkgKiB0aGUgaW5kZXggZmlsZSB0byB0aGUgdHJlZSBvYmplY3Qgd2UgYXJlIHN3aXRjaGluZyB0by4gKi8KKwlpZiAocmVzZXRfdHlwZSA9PSBTT0ZUKQorCQlkaWVfaWZfdW5tZXJnZWRfY2FjaGUocmVzZXRfdHlwZSk7CisJZWxzZSB7CisJCWludCBlcnI7CisJCWlmIChyZXNldF90eXBlID09IEtFRVApCisJCQlkaWVfaWZfdW5tZXJnZWRfY2FjaGUocmVzZXRfdHlwZSk7CisJCWVyciA9IHJlc2V0X2luZGV4X2ZpbGUoc2hhMSwgcmVzZXRfdHlwZSwgcXVpZXQpOworCQlpZiAocmVzZXRfdHlwZSA9PSBLRUVQKQorCQkJZXJyID0gZXJyIHx8IHJlc2V0X2luZGV4X2ZpbGUoc2hhMSwgTUlYRUQsIHF1aWV0KTsKKwkJaWYgKGVycikKKwkJCWRpZShfKCJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIpLCByZXYpOworCX0KKworCS8qIEFueSByZXNldHMgdXBkYXRlIEhFQUQgdG8gdGhlIGhlYWQgYmVpbmcgc3dpdGNoZWQgdG8sCisJICogc2F2aW5nIHRoZSBwcmV2aW91cyBoZWFkIGluIE9SSUdfSEVBRCBiZWZvcmUuICovCisJaWYgKCFnZXRfc2hhMSgiT1JJR19IRUFEIiwgc2hhMV9vbGRfb3JpZykpCisJCW9sZF9vcmlnID0gc2hhMV9vbGRfb3JpZzsKKwlpZiAoIWdldF9zaGExKCJIRUFEIiwgc2hhMV9vcmlnKSkgeworCQlvcmlnID0gc2hhMV9vcmlnOworCQlzZXRfcmVmbG9nX21lc3NhZ2UoJm1zZywgInVwZGF0aW5nIE9SSUdfSEVBRCIsIE5VTEwpOworCQl1cGRhdGVfcmVmKG1zZy5idWYsICJPUklHX0hFQUQiLCBvcmlnLCBvbGRfb3JpZywgMCwgTVNHX09OX0VSUik7CisJfQorCWVsc2UgaWYgKG9sZF9vcmlnKQorCQlkZWxldGVfcmVmKCJPUklHX0hFQUQiLCBvbGRfb3JpZywgMCk7CisJc2V0X3JlZmxvZ19tZXNzYWdlKCZtc2csICJ1cGRhdGluZyBIRUFEIiwgcmV2KTsKKwl1cGRhdGVfcmVmX3N0YXR1cyA9IHVwZGF0ZV9yZWYobXNnLmJ1ZiwgIkhFQUQiLCBzaGExLCBvcmlnLCAwLCBNU0dfT05fRVJSKTsKKworCXN3aXRjaCAocmVzZXRfdHlwZSkgeworCWNhc2UgSEFSRDoKKwkJaWYgKCF1cGRhdGVfcmVmX3N0YXR1cyAmJiAhcXVpZXQpCisJCQlwcmludF9uZXdfaGVhZF9saW5lKGNvbW1pdCk7CisJCWJyZWFrOworCWNhc2UgU09GVDogLyogTm90aGluZyBlbHNlIHRvIGRvLiAqLworCQlicmVhazsKKwljYXNlIE1JWEVEOiAvKiBSZXBvcnQgd2hhdCBoYXMgbm90IGJlZW4gdXBkYXRlZC4gKi8KKwkJdXBkYXRlX2luZGV4X3JlZnJlc2goMCwgTlVMTCwKKwkJCQlxdWlldCA/IFJFRlJFU0hfUVVJRVQgOiBSRUZSRVNIX0lOX1BPUkNFTEFJTik7CisJCWJyZWFrOworCX0KKworCXJlbW92ZV9icmFuY2hfc3RhdGUoKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCisJcmV0dXJuIHVwZGF0ZV9yZWZfc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXYtbGlzdC5jIGIvYnVpbHRpbi9yZXYtbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWEzODMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Jldi1saXN0LmMKQEAgLTAsMCArMSw0MTMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImdyYXBoLmgiCisjaW5jbHVkZSAiYmlzZWN0LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHJldl9saXN0X3VzYWdlW10gPQorImdpdCByZXYtbGlzdCBbT1BUSU9OXSA8Y29tbWl0LWlkPi4uLiBbIC0tIHBhdGhzLi4uIF1cbiIKKyIgIGxpbWl0aW5nIG91dHB1dDpcbiIKKyIgICAgLS1tYXgtY291bnQ9PG4+XG4iCisiICAgIC0tbWF4LWFnZT08ZXBvY2g+XG4iCisiICAgIC0tbWluLWFnZT08ZXBvY2g+XG4iCisiICAgIC0tc3BhcnNlXG4iCisiICAgIC0tbm8tbWVyZ2VzXG4iCisiICAgIC0tbWluLXBhcmVudHM9PG4+XG4iCisiICAgIC0tbm8tbWluLXBhcmVudHNcbiIKKyIgICAgLS1tYXgtcGFyZW50cz08bj5cbiIKKyIgICAgLS1uby1tYXgtcGFyZW50c1xuIgorIiAgICAtLXJlbW92ZS1lbXB0eVxuIgorIiAgICAtLWFsbFxuIgorIiAgICAtLWJyYW5jaGVzXG4iCisiICAgIC0tdGFnc1xuIgorIiAgICAtLXJlbW90ZXNcbiIKKyIgICAgLS1zdGRpblxuIgorIiAgICAtLXF1aWV0XG4iCisiICBvcmRlcmluZyBvdXRwdXQ6XG4iCisiICAgIC0tdG9wby1vcmRlclxuIgorIiAgICAtLWRhdGUtb3JkZXJcbiIKKyIgICAgLS1yZXZlcnNlXG4iCisiICBmb3JtYXR0aW5nIG91dHB1dDpcbiIKKyIgICAgLS1wYXJlbnRzXG4iCisiICAgIC0tY2hpbGRyZW5cbiIKKyIgICAgLS1vYmplY3RzIHwgLS1vYmplY3RzLWVkZ2VcbiIKKyIgICAgLS11bnBhY2tlZFxuIgorIiAgICAtLWhlYWRlciB8IC0tcHJldHR5XG4iCisiICAgIC0tYWJicmV2PTxuPiB8IC0tbm8tYWJicmV2XG4iCisiICAgIC0tYWJicmV2LWNvbW1pdFxuIgorIiAgICAtLWxlZnQtcmlnaHRcbiIKKyIgIHNwZWNpYWwgcHVycG9zZTpcbiIKKyIgICAgLS1iaXNlY3RcbiIKKyIgICAgLS1iaXNlY3QtdmFyc1xuIgorIiAgICAtLWJpc2VjdC1hbGwiCis7CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIHNob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmV2X2xpc3RfaW5mbyAqaW5mbyA9IGRhdGE7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gaW5mby0+cmV2czsKKworCWlmIChpbmZvLT5mbGFncyAmIFJFVl9MSVNUX1FVSUVUKSB7CisJCWZpbmlzaF9jb21taXQoY29tbWl0LCBkYXRhKTsKKwkJcmV0dXJuOworCX0KKworCWdyYXBoX3Nob3dfY29tbWl0KHJldnMtPmdyYXBoKTsKKworCWlmIChyZXZzLT5jb3VudCkgeworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBQQVRDSFNBTUUpCisJCQlyZXZzLT5jb3VudF9zYW1lKys7CisJCWVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCisJCQlyZXZzLT5jb3VudF9sZWZ0Kys7CisJCWVsc2UKKwkJCXJldnMtPmNvdW50X3JpZ2h0Kys7CisJCWZpbmlzaF9jb21taXQoY29tbWl0LCBkYXRhKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpbmZvLT5zaG93X3RpbWVzdGFtcCkKKwkJcHJpbnRmKCIlbHUgIiwgY29tbWl0LT5kYXRlKTsKKwlpZiAoaW5mby0+aGVhZGVyX3ByZWZpeCkKKwkJZnB1dHMoaW5mby0+aGVhZGVyX3ByZWZpeCwgc3Rkb3V0KTsKKworCWlmICghcmV2cy0+Z3JhcGgpCisJCWZwdXRzKGdldF9yZXZpc2lvbl9tYXJrKHJldnMsIGNvbW1pdCksIHN0ZG91dCk7CisJaWYgKHJldnMtPmFiYnJldl9jb21taXQgJiYgcmV2cy0+YWJicmV2KQorCQlmcHV0cyhmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgcmV2cy0+YWJicmV2KSwKKwkJICAgICAgc3Rkb3V0KTsKKwllbHNlCisJCWZwdXRzKHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpLCBzdGRvdXQpOworCWlmIChyZXZzLT5wcmludF9wYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKwkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCXByaW50ZigiICVzIiwgc2hhMV90b19oZXgocGFyZW50cy0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKKwkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQl9CisJfQorCWlmIChyZXZzLT5jaGlsZHJlbi5uYW1lKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqY2hpbGRyZW47CisKKwkJY2hpbGRyZW4gPSBsb29rdXBfZGVjb3JhdGlvbigmcmV2cy0+Y2hpbGRyZW4sICZjb21taXQtPm9iamVjdCk7CisJCXdoaWxlIChjaGlsZHJlbikgeworCQkJcHJpbnRmKCIgJXMiLCBzaGExX3RvX2hleChjaGlsZHJlbi0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKKwkJCWNoaWxkcmVuID0gY2hpbGRyZW4tPm5leHQ7CisJCX0KKwl9CisJc2hvd19kZWNvcmF0aW9ucyhyZXZzLCBjb21taXQpOworCWlmIChyZXZzLT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpCisJCXB1dGNoYXIoJyAnKTsKKwllbHNlCisJCXB1dGNoYXIoJ1xuJyk7CisKKwlpZiAocmV2cy0+dmVyYm9zZV9oZWFkZXIgJiYgY29tbWl0LT5idWZmZXIpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJY3R4LmFiYnJldiA9IHJldnMtPmFiYnJldjsKKwkJY3R4LmRhdGVfbW9kZSA9IHJldnMtPmRhdGVfbW9kZTsKKwkJY3R4LmRhdGVfbW9kZV9leHBsaWNpdCA9IHJldnMtPmRhdGVfbW9kZV9leHBsaWNpdDsKKwkJY3R4LmZtdCA9IHJldnMtPmNvbW1pdF9mb3JtYXQ7CisJCXByZXR0eV9wcmludF9jb21taXQoJmN0eCwgY29tbWl0LCAmYnVmKTsKKwkJaWYgKHJldnMtPmdyYXBoKSB7CisJCQlpZiAoYnVmLmxlbikgeworCQkJCWlmIChyZXZzLT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUpCisJCQkJCWdyYXBoX3Nob3dfb25lbGluZShyZXZzLT5ncmFwaCk7CisKKwkJCQlncmFwaF9zaG93X2NvbW1pdF9tc2cocmV2cy0+Z3JhcGgsICZidWYpOworCisJCQkJLyoKKwkJCQkgKiBBZGQgYSBuZXdsaW5lIGFmdGVyIHRoZSBjb21taXQgbWVzc2FnZS4KKwkJCQkgKgorCQkJCSAqIFVzdWFsbHksIHRoaXMgbmV3bGluZSBwcm9kdWNlcyBhIGJsYW5rCisJCQkJICogcGFkZGluZyBsaW5lIGJldHdlZW4gZW50cmllcywgaW4gd2hpY2ggY2FzZQorCQkJCSAqIHdlIG5lZWQgdG8gYWRkIGdyYXBoIHBhZGRpbmcgb24gdGhpcyBsaW5lLgorCQkJCSAqCisJCQkJICogSG93ZXZlciwgdGhlIGNvbW1pdCBtZXNzYWdlIG1heSBub3QgZW5kIGluIGEKKwkJCQkgKiBuZXdsaW5lLiAgSW4gdGhpcyBjYXNlIHRoZSBuZXdsaW5lIHNpbXBseQorCQkJCSAqIGVuZHMgdGhlIGxhc3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UsCisJCQkJICogYW5kIHdlIGRvbid0IG5lZWQgYW55IGdyYXBoIG91dHB1dC4gIChUaGlzCisJCQkJICogYWx3YXlzIGhhcHBlbnMgd2l0aCBDTUlUX0ZNVF9PTkVMSU5FLCBhbmQgaXQKKwkJCQkgKiBoYXBwZW5zIHdpdGggQ01JVF9GTVRfVVNFUkZPUk1BVCB3aGVuIHRoZQorCQkJCSAqIGZvcm1hdCBkb2Vzbid0IGV4cGxpY2l0bHkgZW5kIGluIGEgbmV3bGluZS4pCisJCQkJICovCisJCQkJaWYgKGJ1Zi5sZW4gJiYgYnVmLmJ1ZltidWYubGVuIC0gMV0gPT0gJ1xuJykKKwkJCQkJZ3JhcGhfc2hvd19wYWRkaW5nKHJldnMtPmdyYXBoKTsKKwkJCQlwdXRjaGFyKCdcbicpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBtZXNzYWdlIGJ1ZmZlciBpcyBlbXB0eSwganVzdCBzaG93CisJCQkJICogdGhlIHJlc3Qgb2YgdGhlIGdyYXBoIG91dHB1dCBmb3IgdGhpcworCQkJCSAqIGNvbW1pdC4KKwkJCQkgKi8KKwkJCQlpZiAoZ3JhcGhfc2hvd19yZW1haW5kZXIocmV2cy0+Z3JhcGgpKQorCQkJCQlwdXRjaGFyKCdcbicpOworCQkJCWlmIChyZXZzLT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpCisJCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAocmV2cy0+Y29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9VU0VSRk9STUFUIHx8CisJCQkgICAgYnVmLmxlbikgeworCQkJCWZ3cml0ZShidWYuYnVmLCAxLCBidWYubGVuLCBzdGRvdXQpOworCQkJCXB1dGNoYXIoaW5mby0+aGRyX3Rlcm1pbmF0aW9uKTsKKwkJCX0KKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9IGVsc2UgeworCQlpZiAoZ3JhcGhfc2hvd19yZW1haW5kZXIocmV2cy0+Z3JhcGgpKQorCQkJcHV0Y2hhcignXG4nKTsKKwl9CisJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgInN0ZG91dCIpOworCWZpbmlzaF9jb21taXQoY29tbWl0LCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJaWYgKGNvbW1pdC0+cGFyZW50cykgeworCQlmcmVlX2NvbW1pdF9saXN0KGNvbW1pdC0+cGFyZW50cyk7CisJCWNvbW1pdC0+cGFyZW50cyA9IE5VTEw7CisJfQorCWZyZWUoY29tbWl0LT5idWZmZXIpOworCWNvbW1pdC0+YnVmZmVyID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCQkgIGNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJldl9saXN0X2luZm8gKmluZm8gPSBjYl9kYXRhOworCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IgJiYgIWhhc19zaGExX2ZpbGUob2JqLT5zaGExKSkKKwkJZGllKCJtaXNzaW5nIGJsb2Igb2JqZWN0ICclcyciLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwlpZiAoaW5mby0+cmV2cy0+dmVyaWZ5X29iamVjdHMgJiYgIW9iai0+cGFyc2VkICYmIG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlwYXJzZV9vYmplY3Qob2JqLT5zaGExKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLAorCQkJY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwgY29uc3QgY2hhciAqY29tcG9uZW50LAorCQkJdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmV2X2xpc3RfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CisJZmluaXNoX29iamVjdChvYmosIHBhdGgsIGNvbXBvbmVudCwgY2JfZGF0YSk7CisJaWYgKGluZm8tPmZsYWdzICYgUkVWX0xJU1RfUVVJRVQpCisJCXJldHVybjsKKwlzaG93X29iamVjdF93aXRoX25hbWUoc3Rkb3V0LCBvYmosIHBhdGgsIGNvbXBvbmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZWRnZShzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJcHJpbnRmKCItJXNcbiIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9nMmkoaW50IG4pCit7CisJaW50IGxvZzIgPSAwOworCisJZm9yICg7IG4gPiAxOyBuID4+PSAxKQorCQlsb2cyKys7CisKKwlyZXR1cm4gbG9nMjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXhwMmkoaW50IG4pCit7CisJcmV0dXJuIDEgPDwgbjsKK30KKworLyoKKyAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgYmlzZWN0IHN0ZXBzIGxlZnQgKGFmdGVyIHRoZSBjdXJyZW50IHN0ZXApCisgKgorICogRm9yIGFueSB4IGJldHdlZW4gMCBpbmNsdWRlZCBhbmQgMl5uIGV4Y2x1ZGVkLCB0aGUgcHJvYmFiaWxpdHkgZm9yCisgKiBuIC0gMSBzdGVwcyBsZWZ0IGxvb2tzIGxpa2U6CisgKgorICogUCgyXm4gKyB4KSA9PSAoMl5uIC0geCkgLyAoMl5uICsgeCkKKyAqCisgKiBhbmQgUCgyXm4gKyB4KSA8IDAuNSBtZWFucyAyXm4gPCAzeAorICovCitpbnQgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGludCBhbGwpCit7CisJaW50IG4sIHgsIGU7CisKKwlpZiAoYWxsIDwgMykKKwkJcmV0dXJuIDA7CisKKwluID0gbG9nMmkoYWxsKTsKKwllID0gZXhwMmkobik7CisJeCA9IGFsbCAtIGU7CisKKwlyZXR1cm4gKGUgPCAzICogeCkgPyBuIDogbiAtIDE7Cit9CisKK3ZvaWQgcHJpbnRfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkgICAgICAgY29uc3QgY2hhciAqZm9ybWF0X2N1ciwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdF9sYXN0KQoreworCWZvciAoIDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKwkJY29uc3QgY2hhciAqZm9ybWF0ID0gbGlzdC0+bmV4dCA/IGZvcm1hdF9jdXIgOiBmb3JtYXRfbGFzdDsKKwkJcHJpbnRmKGZvcm1hdCwgc2hhMV90b19oZXgobGlzdC0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Zhcl9zdHIoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWwpCit7CisJcHJpbnRmKCIlcz0nJXMnXG4iLCB2YXIsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Zhcl9pbnQoY29uc3QgY2hhciAqdmFyLCBpbnQgdmFsKQoreworCXByaW50ZigiJXM9JWRcbiIsIHZhciwgdmFsKTsKK30KKworc3RhdGljIGludCBzaG93X2Jpc2VjdF92YXJzKHN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvLCBpbnQgcmVhY2hlcywgaW50IGFsbCkKK3sKKwlpbnQgY250LCBmbGFncyA9IGluZm8tPmZsYWdzOworCWNoYXIgaGV4WzQxXSA9ICIiOworCXN0cnVjdCBjb21taXRfbGlzdCAqdHJpZWQ7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gaW5mby0+cmV2czsKKworCWlmICghcmV2cy0+Y29tbWl0cykKKwkJcmV0dXJuIDE7CisKKwlyZXZzLT5jb21taXRzID0gZmlsdGVyX3NraXBwZWQocmV2cy0+Y29tbWl0cywgJnRyaWVkLAorCQkJCSAgICAgICBmbGFncyAmIEJJU0VDVF9TSE9XX0FMTCwKKwkJCQkgICAgICAgTlVMTCwgTlVMTCk7CisKKwkvKgorCSAqIHJldnMtPmNvbW1pdHMgY2FuIHJlYWNoICJyZWFjaGVzIiBjb21taXRzIGFtb25nCisJICogImFsbCIgY29tbWl0cy4gIElmIGl0IGlzIGdvb2QsIHRoZW4gdGhlcmUgYXJlCisJICogKGFsbC1yZWFjaGVzKSBjb21taXRzIGxlZnQgdG8gYmUgYmlzZWN0ZWQuCisJICogT24gdGhlIG90aGVyIGhhbmQsIGlmIGl0IGlzIGJhZCwgdGhlbiB0aGUgc2V0CisJICogdG8gYmlzZWN0IGlzICJyZWFjaGVzIi4KKwkgKiBBIGJpc2VjdCBzZXQgb2Ygc2l6ZSBOIGhhcyAoTi0xKSBjb21taXRzIGZ1cnRoZXIKKwkgKiB0byB0ZXN0LCBhcyB3ZSBhbHJlYWR5IGtub3cgb25lIGJhZCBvbmUuCisJICovCisJY250ID0gYWxsIC0gcmVhY2hlczsKKwlpZiAoY250IDwgcmVhY2hlcykKKwkJY250ID0gcmVhY2hlczsKKworCWlmIChyZXZzLT5jb21taXRzKQorCQlzdHJjcHkoaGV4LCBzaGExX3RvX2hleChyZXZzLT5jb21taXRzLT5pdGVtLT5vYmplY3Quc2hhMSkpOworCisJaWYgKGZsYWdzICYgQklTRUNUX1NIT1dfQUxMKSB7CisJCXRyYXZlcnNlX2NvbW1pdF9saXN0KHJldnMsIHNob3dfY29tbWl0LCBzaG93X29iamVjdCwgaW5mbyk7CisJCXByaW50ZigiLS0tLS0tXG4iKTsKKwl9CisKKwlwcmludF92YXJfc3RyKCJiaXNlY3RfcmV2IiwgaGV4KTsKKwlwcmludF92YXJfaW50KCJiaXNlY3RfbnIiLCBjbnQgLSAxKTsKKwlwcmludF92YXJfaW50KCJiaXNlY3RfZ29vZCIsIGFsbCAtIHJlYWNoZXMgLSAxKTsKKwlwcmludF92YXJfaW50KCJiaXNlY3RfYmFkIiwgcmVhY2hlcyAtIDEpOworCXByaW50X3Zhcl9pbnQoImJpc2VjdF9hbGwiLCBhbGwpOworCXByaW50X3Zhcl9pbnQoImJpc2VjdF9zdGVwcyIsIGVzdGltYXRlX2Jpc2VjdF9zdGVwcyhhbGwpKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX3Jldl9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCByZXZfbGlzdF9pbmZvIGluZm87CisJaW50IGk7CisJaW50IGJpc2VjdF9saXN0ID0gMDsKKwlpbnQgYmlzZWN0X3Nob3dfdmFycyA9IDA7CisJaW50IGJpc2VjdF9maW5kX2FsbCA9IDA7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJaW5pdF9yZXZpc2lvbnMoJnJldnMsIHByZWZpeCk7CisJcmV2cy5hYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKKwlyZXZzLmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9VTlNQRUNJRklFRDsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXZzLCBOVUxMKTsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwlpbmZvLnJldnMgPSAmcmV2czsKKwlpZiAocmV2cy5iaXNlY3QpCisJCWJpc2VjdF9saXN0ID0gMTsKKworCWlmIChESUZGX09QVF9UU1QoJnJldnMuZGlmZm9wdCwgUVVJQ0spKQorCQlpbmZvLmZsYWdzIHw9IFJFVl9MSVNUX1FVSUVUOworCWZvciAoaSA9IDEgOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWFkZXIiKSkgeworCQkJcmV2cy52ZXJib3NlX2hlYWRlciA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXRpbWVzdGFtcCIpKSB7CisJCQlpbmZvLnNob3dfdGltZXN0YW1wID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tYmlzZWN0IikpIHsKKwkJCWJpc2VjdF9saXN0ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tYmlzZWN0LWFsbCIpKSB7CisJCQliaXNlY3RfbGlzdCA9IDE7CisJCQliaXNlY3RfZmluZF9hbGwgPSAxOworCQkJaW5mby5mbGFncyB8PSBCSVNFQ1RfU0hPV19BTEw7CisJCQlyZXZzLnNob3dfZGVjb3JhdGlvbnMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1iaXNlY3QtdmFycyIpKSB7CisJCQliaXNlY3RfbGlzdCA9IDE7CisJCQliaXNlY3Rfc2hvd192YXJzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKKworCX0KKwlpZiAocmV2cy5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX1VOU1BFQ0lGSUVEKSB7CisJCS8qIFRoZSBjb21tYW5kIGxpbmUgaGFzIGEgLS1wcmV0dHkgICovCisJCWluZm8uaGRyX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwkJaWYgKHJldnMuY29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQorCQkJaW5mby5oZWFkZXJfcHJlZml4ID0gIiI7CisJCWVsc2UKKwkJCWluZm8uaGVhZGVyX3ByZWZpeCA9ICJjb21taXQgIjsKKwl9CisJZWxzZSBpZiAocmV2cy52ZXJib3NlX2hlYWRlcikKKwkJLyogT25seSAtLWhlYWRlciB3YXMgc3BlY2lmaWVkICovCisJCXJldnMuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX1JBVzsKKworCWlmICgoIXJldnMuY29tbWl0cyAmJgorCSAgICAgKCEocmV2cy50YWdfb2JqZWN0c3x8cmV2cy50cmVlX29iamVjdHN8fHJldnMuYmxvYl9vYmplY3RzKSAmJgorCSAgICAgICFyZXZzLnBlbmRpbmcubnIpKSB8fAorCSAgICByZXZzLmRpZmYpCisJCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKKworCXNhdmVfY29tbWl0X2J1ZmZlciA9IChyZXZzLnZlcmJvc2VfaGVhZGVyIHx8CisJCQkgICAgICByZXZzLmdyZXBfZmlsdGVyLnBhdHRlcm5fbGlzdCB8fAorCQkJICAgICAgcmV2cy5ncmVwX2ZpbHRlci5oZWFkZXJfbGlzdCk7CisJaWYgKGJpc2VjdF9saXN0KQorCQlyZXZzLmxpbWl0ZWQgPSAxOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwlpZiAocmV2cy50cmVlX29iamVjdHMpCisJCW1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhyZXZzLmNvbW1pdHMsICZyZXZzLCBzaG93X2VkZ2UpOworCisJaWYgKGJpc2VjdF9saXN0KSB7CisJCWludCByZWFjaGVzID0gcmVhY2hlcywgYWxsID0gYWxsOworCisJCXJldnMuY29tbWl0cyA9IGZpbmRfYmlzZWN0aW9uKHJldnMuY29tbWl0cywgJnJlYWNoZXMsICZhbGwsCisJCQkJCSAgICAgIGJpc2VjdF9maW5kX2FsbCk7CisKKwkJaWYgKGJpc2VjdF9zaG93X3ZhcnMpCisJCQlyZXR1cm4gc2hvd19iaXNlY3RfdmFycygmaW5mbywgcmVhY2hlcywgYWxsKTsKKwl9CisKKwl0cmF2ZXJzZV9jb21taXRfbGlzdCgmcmV2cywgc2hvd19jb21taXQsIHNob3dfb2JqZWN0LCAmaW5mbyk7CisKKwlpZiAocmV2cy5jb3VudCkgeworCQlpZiAocmV2cy5sZWZ0X3JpZ2h0ICYmIHJldnMuY2hlcnJ5X21hcmspCisJCQlwcmludGYoIiVkXHQlZFx0JWRcbiIsIHJldnMuY291bnRfbGVmdCwgcmV2cy5jb3VudF9yaWdodCwgcmV2cy5jb3VudF9zYW1lKTsKKwkJZWxzZSBpZiAocmV2cy5sZWZ0X3JpZ2h0KQorCQkJcHJpbnRmKCIlZFx0JWRcbiIsIHJldnMuY291bnRfbGVmdCwgcmV2cy5jb3VudF9yaWdodCk7CisJCWVsc2UgaWYgKHJldnMuY2hlcnJ5X21hcmspCisJCQlwcmludGYoIiVkXHQlZFxuIiwgcmV2cy5jb3VudF9sZWZ0ICsgcmV2cy5jb3VudF9yaWdodCwgcmV2cy5jb3VudF9zYW1lKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlZFxuIiwgcmV2cy5jb3VudF9sZWZ0ICsgcmV2cy5jb3VudF9yaWdodCk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Jldi1wYXJzZS5jIGIvYnVpbHRpbi9yZXYtcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjY3YTFkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZXYtcGFyc2UuYwpAQCAtMCwwICsxLDc3MSBAQAorLyoKKyAqIHJldi1wYXJzZS5jCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCisjZGVmaW5lIERPX1JFVlMJCTEKKyNkZWZpbmUgRE9fTk9SRVYJMgorI2RlZmluZSBET19GTEFHUwk0CisjZGVmaW5lIERPX05PTkZMQUdTCTgKK3N0YXRpYyBpbnQgZmlsdGVyID0gfjA7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZWY7CisKKyNkZWZpbmUgTk9STUFMIDAKKyNkZWZpbmUgUkVWRVJTRUQgMQorc3RhdGljIGludCBzaG93X3R5cGUgPSBOT1JNQUw7CisKKyNkZWZpbmUgU0hPV19TWU1CT0xJQ19BU0lTIDEKKyNkZWZpbmUgU0hPV19TWU1CT0xJQ19GVUxMIDIKK3N0YXRpYyBpbnQgc3ltYm9saWM7CitzdGF0aWMgaW50IGFiYnJldjsKK3N0YXRpYyBpbnQgYWJicmV2X3JlZjsKK3N0YXRpYyBpbnQgYWJicmV2X3JlZl9zdHJpY3Q7CitzdGF0aWMgaW50IG91dHB1dF9zcTsKKworLyoKKyAqIFNvbWUgYXJndW1lbnRzIGFyZSByZWxldmFudCAicmV2aXNpb24iIGFyZ3VtZW50cywKKyAqIG90aGVycyBhcmUgYWJvdXQgb3V0cHV0IGZvcm1hdCBvciBvdGhlciBkZXRhaWxzLgorICogVGhpcyBzb3J0cyBpdCBhbGwgb3V0LgorICovCitzdGF0aWMgaW50IGlzX3Jldl9hcmd1bWVudChjb25zdCBjaGFyICphcmcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnJldl9hcmdzW10gPSB7CisJCSItLWFsbCIsCisJCSItLWJpc2VjdCIsCisJCSItLWRlbnNlIiwKKwkJIi0tYnJhbmNoZXM9IiwKKwkJIi0tYnJhbmNoZXMiLAorCQkiLS1oZWFkZXIiLAorCQkiLS1pZ25vcmUtbWlzc2luZyIsCisJCSItLW1heC1hZ2U9IiwKKwkJIi0tbWF4LWNvdW50PSIsCisJCSItLW1pbi1hZ2U9IiwKKwkJIi0tbm8tbWVyZ2VzIiwKKwkJIi0tbWluLXBhcmVudHM9IiwKKwkJIi0tbm8tbWluLXBhcmVudHMiLAorCQkiLS1tYXgtcGFyZW50cz0iLAorCQkiLS1uby1tYXgtcGFyZW50cyIsCisJCSItLW9iamVjdHMiLAorCQkiLS1vYmplY3RzLWVkZ2UiLAorCQkiLS1wYXJlbnRzIiwKKwkJIi0tcHJldHR5IiwKKwkJIi0tcmVtb3Rlcz0iLAorCQkiLS1yZW1vdGVzIiwKKwkJIi0tZ2xvYj0iLAorCQkiLS1zcGFyc2UiLAorCQkiLS10YWdzPSIsCisJCSItLXRhZ3MiLAorCQkiLS10b3BvLW9yZGVyIiwKKwkJIi0tZGF0ZS1vcmRlciIsCisJCSItLXVucGFja2VkIiwKKwkJTlVMTAorCX07CisJY29uc3QgY2hhciAqKnAgPSByZXZfYXJnczsKKworCS8qIGFjY2VwdCAtPGRpZ2l0PiwgbGlrZSB0cmFkaXRpb25hbCAiaGVhZCIgKi8KKwlpZiAoKCphcmcgPT0gJy0nKSAmJiBpc2RpZ2l0KGFyZ1sxXSkpCisJCXJldHVybiAxOworCisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpzdHIgPSAqcCsrOworCQlpbnQgbGVuOworCQlpZiAoIXN0cikKKwkJCXJldHVybiAwOworCQlsZW4gPSBzdHJsZW4oc3RyKTsKKwkJaWYgKCFzdHJjbXAoYXJnLCBzdHIpIHx8CisJCSAgICAoc3RyW2xlbi0xXSA9PSAnPScgJiYgIXN0cm5jbXAoYXJnLCBzdHIsIGxlbikpKQorCQkJcmV0dXJuIDE7CisJfQorfQorCisvKiBPdXRwdXQgYXJndW1lbnQgYXMgYSBzdHJpbmcsIGVpdGhlciBTUSBvciBub3JtYWwgKi8KK3N0YXRpYyB2b2lkIHNob3coY29uc3QgY2hhciAqYXJnKQoreworCWlmIChvdXRwdXRfc3EpIHsKKwkJaW50IHNxID0gJ1wnJywgY2g7CisKKwkJcHV0Y2hhcihzcSk7CisJCXdoaWxlICgoY2ggPSAqYXJnKyspKSB7CisJCQlpZiAoY2ggPT0gc3EpCisJCQkJZnB1dHMoIidcXCciLCBzdGRvdXQpOworCQkJcHV0Y2hhcihjaCk7CisJCX0KKwkJcHV0Y2hhcihzcSk7CisJCXB1dGNoYXIoJyAnKTsKKwl9CisJZWxzZQorCQlwdXRzKGFyZyk7Cit9CisKKy8qIExpa2Ugc2hvdygpLCBidXQgd2l0aCBhIG5lZ2F0aW9uIHByZWZpeCBhY2NvcmRpbmcgdG8gdHlwZSAqLworc3RhdGljIHZvaWQgc2hvd193aXRoX3R5cGUoaW50IHR5cGUsIGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAodHlwZSAhPSBzaG93X3R5cGUpCisJCXB1dGNoYXIoJ14nKTsKKwlzaG93KGFyZyk7Cit9CisKKy8qIE91dHB1dCBhIHJldmlzaW9uLCBvbmx5IGlmIGZpbHRlciBhbGxvd3MgaXQgKi8KK3N0YXRpYyB2b2lkIHNob3dfcmV2KGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghKGZpbHRlciAmIERPX1JFVlMpKQorCQlyZXR1cm47CisJZGVmID0gTlVMTDsKKworCWlmICgoc3ltYm9saWMgfHwgYWJicmV2X3JlZikgJiYgbmFtZSkgeworCQlpZiAoc3ltYm9saWMgPT0gU0hPV19TWU1CT0xJQ19GVUxMIHx8IGFiYnJldl9yZWYpIHsKKwkJCXVuc2lnbmVkIGNoYXIgZGlzY2FyZFsyMF07CisJCQljaGFyICpmdWxsOworCisJCQlzd2l0Y2ggKGR3aW1fcmVmKG5hbWUsIHN0cmxlbihuYW1lKSwgZGlzY2FyZCwgJmZ1bGwpKSB7CisJCQljYXNlIDA6CisJCQkJLyoKKwkJCQkgKiBOb3QgZm91bmQgLS0gbm90IGEgcmVmLiAgV2UgY291bGQKKwkJCQkgKiBlbWl0ICJuYW1lIiBoZXJlLCBidXQgc3ltYm9saWMtZnVsbAorCQkJCSAqIHVzZXJzIGFyZSBpbnRlcmVzdGVkIGluIGZpbmRpbmcgdGhlCisJCQkJICogcmVmcyBzcGVsbGVkIGluIGZ1bGwsIGFuZCB0aGV5IHdvdWxkCisJCQkJICogbmVlZCB0byBmaWx0ZXIgbm9uLXJlZnMgaWYgd2UgZGlkIHNvLgorCQkJCSAqLworCQkJCWJyZWFrOworCQkJY2FzZSAxOiAvKiBoYXBweSAqLworCQkJCWlmIChhYmJyZXZfcmVmKQorCQkJCQlmdWxsID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoZnVsbCwKKwkJCQkJCWFiYnJldl9yZWZfc3RyaWN0KTsKKwkJCQlzaG93X3dpdGhfdHlwZSh0eXBlLCBmdWxsKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6IC8qIGFtYmlndW91cyAqLworCQkJCWVycm9yKCJyZWZuYW1lICclcycgaXMgYW1iaWd1b3VzIiwgbmFtZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzaG93X3dpdGhfdHlwZSh0eXBlLCBuYW1lKTsKKwkJfQorCX0KKwllbHNlIGlmIChhYmJyZXYpCisJCXNob3dfd2l0aF90eXBlKHR5cGUsIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBhYmJyZXYpKTsKKwllbHNlCisJCXNob3dfd2l0aF90eXBlKHR5cGUsIHNoYTFfdG9faGV4KHNoYTEpKTsKK30KKworLyogT3V0cHV0IGEgZmxhZywgb25seSBpZiBmaWx0ZXIgYWxsb3dzIGl0LiAqLworc3RhdGljIGludCBzaG93X2ZsYWcoY29uc3QgY2hhciAqYXJnKQoreworCWlmICghKGZpbHRlciAmIERPX0ZMQUdTKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZpbHRlciAmIChpc19yZXZfYXJndW1lbnQoYXJnKSA/IERPX1JFVlMgOiBET19OT1JFVikpIHsKKwkJc2hvdyhhcmcpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19kZWZhdWx0KHZvaWQpCit7CisJY29uc3QgY2hhciAqcyA9IGRlZjsKKworCWlmIChzKSB7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwkJZGVmID0gTlVMTDsKKwkJaWYgKCFnZXRfc2hhMShzLCBzaGExKSkgeworCQkJc2hvd19yZXYoTk9STUFMLCBzaGExLCBzKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfcmVmZXJlbmNlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXNob3dfcmV2KE5PUk1BTCwgc2hhMSwgcmVmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW50aV9yZWZlcmVuY2UoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc2hvd19yZXYoUkVWRVJTRUQsIHNoYTEsIHJlZm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfYWJicmV2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHZvaWQgKmNiX2RhdGEpCit7CisJc2hvd19yZXYoTk9STUFMLCBzaGExLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19kYXRlc3RyaW5nKGNvbnN0IGNoYXIgKmZsYWcsIGNvbnN0IGNoYXIgKmRhdGVzdHIpCit7CisJc3RhdGljIGNoYXIgYnVmZmVyWzEwMF07CisKKwkvKiBkYXRlIGhhbmRsaW5nIHJlcXVpcmVzIGJvdGggZmxhZ3MgYW5kIHJldnMgKi8KKwlpZiAoKGZpbHRlciAmIChET19GTEFHUyB8IERPX1JFVlMpKSAhPSAoRE9fRkxBR1MgfCBET19SRVZTKSkKKwkJcmV0dXJuOworCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlcyVsdSIsIGZsYWcsIGFwcHJveGlkYXRlKGRhdGVzdHIpKTsKKwlzaG93KGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19maWxlKGNvbnN0IGNoYXIgKmFyZykKK3sKKwlzaG93X2RlZmF1bHQoKTsKKwlpZiAoKGZpbHRlciAmIChET19OT05GTEFHU3xET19OT1JFVikpID09IChET19OT05GTEFHU3xET19OT1JFVikpIHsKKwkJc2hvdyhhcmcpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X2RpZmZlcmVuY2UoY29uc3QgY2hhciAqYXJnKQoreworCWNoYXIgKmRvdGRvdDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXVuc2lnbmVkIGNoYXIgZW5kWzIwXTsKKwljb25zdCBjaGFyICpuZXh0OworCWNvbnN0IGNoYXIgKnRoaXM7CisJaW50IHN5bW1ldHJpYzsKKwlzdGF0aWMgY29uc3QgY2hhciBoZWFkX2J5X2RlZmF1bHRbXSA9ICJIRUFEIjsKKworCWlmICghKGRvdGRvdCA9IHN0cnN0cihhcmcsICIuLiIpKSkKKwkJcmV0dXJuIDA7CisJbmV4dCA9IGRvdGRvdCArIDI7CisJdGhpcyA9IGFyZzsKKwlzeW1tZXRyaWMgPSAoKm5leHQgPT0gJy4nKTsKKworCSpkb3Rkb3QgPSAwOworCW5leHQgKz0gc3ltbWV0cmljOworCisJaWYgKCEqbmV4dCkKKwkJbmV4dCA9IGhlYWRfYnlfZGVmYXVsdDsKKwlpZiAoZG90ZG90ID09IGFyZykKKwkJdGhpcyA9IGhlYWRfYnlfZGVmYXVsdDsKKworCWlmICh0aGlzID09IGhlYWRfYnlfZGVmYXVsdCAmJiBuZXh0ID09IGhlYWRfYnlfZGVmYXVsdCAmJgorCSAgICAhc3ltbWV0cmljKSB7CisJCS8qCisJCSAqIEp1c3QgIi4uIj8gIFRoYXQgaXMgbm90IGEgcmFuZ2UgYnV0IHRoZQorCQkgKiBwYXRoc3BlYyBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkuCisJCSAqLworCQkqZG90ZG90ID0gJy4nOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWdldF9zaGExX2NvbW1pdHRpc2godGhpcywgc2hhMSkgJiYgIWdldF9zaGExX2NvbW1pdHRpc2gobmV4dCwgZW5kKSkgeworCQlzaG93X3JldihOT1JNQUwsIGVuZCwgbmV4dCk7CisJCXNob3dfcmV2KHN5bW1ldHJpYyA/IE5PUk1BTCA6IFJFVkVSU0VELCBzaGExLCB0aGlzKTsKKwkJaWYgKHN5bW1ldHJpYykgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpleGNsdWRlOworCQkJc3RydWN0IGNvbW1pdCAqYSwgKmI7CisJCQlhID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJCQliID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UoZW5kKTsKKwkJCWV4Y2x1ZGUgPSBnZXRfbWVyZ2VfYmFzZXMoYSwgYiwgMSk7CisJCQl3aGlsZSAoZXhjbHVkZSkgeworCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqbiA9IGV4Y2x1ZGUtPm5leHQ7CisJCQkJc2hvd19yZXYoUkVWRVJTRUQsCisJCQkJCSBleGNsdWRlLT5pdGVtLT5vYmplY3Quc2hhMSxOVUxMKTsKKwkJCQlmcmVlKGV4Y2x1ZGUpOworCQkJCWV4Y2x1ZGUgPSBuOworCQkJfQorCQl9CisJCXJldHVybiAxOworCX0KKwkqZG90ZG90ID0gJy4nOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyeV9wYXJlbnRfc2hvcnRoYW5kcyhjb25zdCBjaGFyICphcmcpCit7CisJY2hhciAqZG90ZG90OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlpbnQgcGFyZW50c19vbmx5OworCisJaWYgKChkb3Rkb3QgPSBzdHJzdHIoYXJnLCAiXiEiKSkpCisJCXBhcmVudHNfb25seSA9IDA7CisJZWxzZSBpZiAoKGRvdGRvdCA9IHN0cnN0cihhcmcsICJeQCIpKSkKKwkJcGFyZW50c19vbmx5ID0gMTsKKworCWlmICghZG90ZG90IHx8IGRvdGRvdFsyXSkKKwkJcmV0dXJuIDA7CisKKwkqZG90ZG90ID0gMDsKKwlpZiAoZ2V0X3NoYTFfY29tbWl0dGlzaChhcmcsIHNoYTEpKQorCQlyZXR1cm4gMDsKKworCWlmICghcGFyZW50c19vbmx5KQorCQlzaG93X3JldihOT1JNQUwsIHNoYTEsIGFyZyk7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkKKwkJc2hvd19yZXYocGFyZW50c19vbmx5ID8gTk9STUFMIDogUkVWRVJTRUQsCisJCQkJcGFyZW50cy0+aXRlbS0+b2JqZWN0LnNoYTEsIGFyZyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwYXJzZW9wdF9kdW1wKGNvbnN0IHN0cnVjdCBvcHRpb24gKm8sIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJidWYgKnBhcnNlZCA9IG8tPnZhbHVlOworCWlmICh1bnNldCkKKwkJc3RyYnVmX2FkZGYocGFyc2VkLCAiIC0tbm8tJXMiLCBvLT5sb25nX25hbWUpOworCWVsc2UgaWYgKG8tPnNob3J0X25hbWUpCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtJWMiLCBvLT5zaG9ydF9uYW1lKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtLSVzIiwgby0+bG9uZ19uYW1lKTsKKwlpZiAoYXJnKSB7CisJCXN0cmJ1Zl9hZGRjaChwYXJzZWQsICcgJyk7CisJCXNxX3F1b3RlX2J1ZihwYXJzZWQsIGFyZyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2tpcHNwYWNlcyhjb25zdCBjaGFyICpzKQoreworCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJcysrOworCXJldHVybiBzOworfQorCitzdGF0aWMgaW50IGNtZF9wYXJzZW9wdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdGF0aWMgaW50IGtlZXBfZGFzaGRhc2ggPSAwLCBzdG9wX2F0X25vbl9vcHRpb24gPSAwOworCXN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgcGFyc2VvcHRfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbb3B0aW9uc10gLS0gWzxhcmdzPi4uLl0iKSwKKwkJTlVMTAorCX07CisJc3RhdGljIHN0cnVjdCBvcHRpb24gcGFyc2VvcHRfb3B0c1tdID0geworCQlPUFRfQk9PTEVBTigwLCAia2VlcC1kYXNoZGFzaCIsICZrZWVwX2Rhc2hkYXNoLAorCQkJCQlOXygia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIikpLAorCQlPUFRfQk9PTEVBTigwLCAic3RvcC1hdC1ub24tb3B0aW9uIiwgJnN0b3BfYXRfbm9uX29wdGlvbiwKKwkJCQkJTl8oInN0b3AgcGFyc2luZyBhZnRlciB0aGUgIgorCQkJCQkgICAiZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQsIHBhcnNlZCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKip1c2FnZSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiAqb3B0cyA9IE5VTEw7CisJaW50IG9uYiA9IDAsIG9zeiA9IDAsIHVuYiA9IDAsIHVzeiA9IDA7CisKKwlzdHJidWZfYWRkc3RyKCZwYXJzZWQsICJzZXQgLS0iKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHBhcnNlb3B0X29wdHMsIHBhcnNlb3B0X3VzYWdlLAorCSAgICAgICAgICAgICAgICAgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKwlpZiAoYXJnYyA8IDEgfHwgc3RyY21wKGFyZ3ZbMF0sICItLSIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMocGFyc2VvcHRfdXNhZ2UsIHBhcnNlb3B0X29wdHMpOworCisJLyogZ2V0IHRoZSB1c2FnZSB1cCB0byB0aGUgZmlyc3QgbGluZSB3aXRoIGEgLS0gb24gaXQgKi8KKwlmb3IgKDs7KSB7CisJCWlmIChzdHJidWZfZ2V0bGluZSgmc2IsIHN0ZGluLCAnXG4nKSA9PSBFT0YpCisJCQlkaWUoInByZW1hdHVyZSBlbmQgb2YgaW5wdXQiKTsKKwkJQUxMT0NfR1JPVyh1c2FnZSwgdW5iICsgMSwgdXN6KTsKKwkJaWYgKCFzdHJjbXAoIi0tIiwgc2IuYnVmKSkgeworCQkJaWYgKHVuYiA8IDEpCisJCQkJZGllKCJubyB1c2FnZSBzdHJpbmcgZ2l2ZW4gYmVmb3JlIHRoZSBgLS0nIHNlcGFyYXRvciIpOworCQkJdXNhZ2VbdW5iXSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQl1c2FnZVt1bmIrK10gPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisJfQorCisJLyogcGFyc2U6ICg8c2hvcnQ+fDxzaG9ydD4sPGxvbmc+fDxsb25nPilbPT9dPyBTUCsgPGhlbHA+ICovCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZzYiwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQljb25zdCBjaGFyICpzOworCQlzdHJ1Y3Qgb3B0aW9uICpvOworCisJCWlmICghc2IubGVuKQorCQkJY29udGludWU7CisKKwkJQUxMT0NfR1JPVyhvcHRzLCBvbmIgKyAxLCBvc3opOworCQltZW1zZXQob3B0cyArIG9uYiwgMCwgc2l6ZW9mKG9wdHNbb25iXSkpOworCisJCW8gPSAmb3B0c1tvbmIrK107CisJCXMgPSBzdHJjaHIoc2IuYnVmLCAnICcpOworCQlpZiAoIXMgfHwgKnNiLmJ1ZiA9PSAnICcpIHsKKwkJCW8tPnR5cGUgPSBPUFRJT05fR1JPVVA7CisJCQlvLT5oZWxwID0geHN0cmR1cChza2lwc3BhY2VzKHNiLmJ1ZikpOworCQkJY29udGludWU7CisJCX0KKworCQlvLT50eXBlID0gT1BUSU9OX0NBTExCQUNLOworCQlvLT5oZWxwID0geHN0cmR1cChza2lwc3BhY2VzKHMpKTsKKwkJby0+dmFsdWUgPSAmcGFyc2VkOworCQlvLT5mbGFncyA9IFBBUlNFX09QVF9OT0FSRzsKKwkJby0+Y2FsbGJhY2sgPSAmcGFyc2VvcHRfZHVtcDsKKwkJd2hpbGUgKHMgPiBzYi5idWYgJiYgc3RyY2hyKCIqPT8hIiwgc1stMV0pKSB7CisJCQlzd2l0Y2ggKCotLXMpIHsKKwkJCWNhc2UgJz0nOgorCQkJCW8tPmZsYWdzICY9IH5QQVJTRV9PUFRfTk9BUkc7CisJCQkJYnJlYWs7CisJCQljYXNlICc/JzoKKwkJCQlvLT5mbGFncyAmPSB+UEFSU0VfT1BUX05PQVJHOworCQkJCW8tPmZsYWdzIHw9IFBBUlNFX09QVF9PUFRBUkc7CisJCQkJYnJlYWs7CisJCQljYXNlICchJzoKKwkJCQlvLT5mbGFncyB8PSBQQVJTRV9PUFRfTk9ORUc7CisJCQkJYnJlYWs7CisJCQljYXNlICcqJzoKKwkJCQlvLT5mbGFncyB8PSBQQVJTRV9PUFRfSElEREVOOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKHMgLSBzYi5idWYgPT0gMSkgLyogc2hvcnQgb3B0aW9uIG9ubHkgKi8KKwkJCW8tPnNob3J0X25hbWUgPSAqc2IuYnVmOworCQllbHNlIGlmIChzYi5idWZbMV0gIT0gJywnKSAvKiBsb25nIG9wdGlvbiBvbmx5ICovCisJCQlvLT5sb25nX25hbWUgPSB4bWVtZHVweihzYi5idWYsIHMgLSBzYi5idWYpOworCQllbHNlIHsKKwkJCW8tPnNob3J0X25hbWUgPSAqc2IuYnVmOworCQkJby0+bG9uZ19uYW1lID0geG1lbWR1cHooc2IuYnVmICsgMiwgcyAtIHNiLmJ1ZiAtIDIpOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwkvKiBwdXQgYW4gT1BUX0VORCgpICovCisJQUxMT0NfR1JPVyhvcHRzLCBvbmIgKyAxLCBvc3opOworCW1lbXNldChvcHRzICsgb25iLCAwLCBzaXplb2Yob3B0c1tvbmJdKSk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCB1c2FnZSwKKwkJCShrZWVwX2Rhc2hkYXNoID8gUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggOiAwKSB8CisJCQkoc3RvcF9hdF9ub25fb3B0aW9uID8gUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTiA6IDApIHwKKwkJCVBBUlNFX09QVF9TSEVMTF9FVkFMKTsKKworCXN0cmJ1Zl9hZGRmKCZwYXJzZWQsICIgLS0iKTsKKwlzcV9xdW90ZV9hcmd2KCZwYXJzZWQsIGFyZ3YsIDApOworCXB1dHMocGFyc2VkLmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21kX3NxX3F1b3RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKGFyZ2MpCisJCXNxX3F1b3RlX2FyZ3YoJmJ1ZiwgYXJndiwgMCk7CisJcHJpbnRmKCIlc1xuIiwgYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGllX25vX3NpbmdsZV9yZXYoaW50IHF1aWV0KQoreworCWlmIChxdWlldCkKKwkJZXhpdCgxKTsKKwllbHNlCisJCWRpZSgiTmVlZGVkIGEgc2luZ2xlIHJldmlzaW9uIik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGJ1aWx0aW5fcmV2X3BhcnNlX3VzYWdlW10gPQorTl8oImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbb3B0aW9uc10gLS0gWzxhcmdzPi4uLl1cbiIKKyAgICIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyAgICIgICBvcjogZ2l0IHJldi1wYXJzZSBbb3B0aW9uc10gWzxhcmc+Li4uXVxuIgorICAgIlxuIgorICAgIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iKTsKKworaW50IGNtZF9yZXZfcGFyc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGksIGFzX2lzID0gMCwgdmVyaWZ5ID0gMCwgcXVpZXQgPSAwLCByZXZzX2NvdW50ID0gMCwgdHlwZSA9IDA7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKCItLXBhcnNlb3B0IiwgYXJndlsxXSkpCisJCXJldHVybiBjbWRfcGFyc2VvcHQoYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgpOworCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoIi0tc3EtcXVvdGUiLCBhcmd2WzFdKSkKKwkJcmV0dXJuIGNtZF9zcV9xdW90ZShhcmdjIC0gMiwgYXJndiArIDIpOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKCItLWxvY2FsLWVudi12YXJzIiwgYXJndlsxXSkpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGxvY2FsX3JlcG9fZW52W2ldOyBpKyspCisJCQlwcmludGYoIiVzXG4iLCBsb2NhbF9yZXBvX2VudltpXSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID4gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLXJlc29sdmUtZ2l0LWRpciIpKSB7CisJCWNvbnN0IGNoYXIgKmdpdGRpciA9IHJlc29sdmVfZ2l0ZGlyKGFyZ3ZbMl0pOworCQlpZiAoIWdpdGRpcikKKwkJCWRpZSgibm90IGEgZ2l0ZGlyICclcyciLCBhcmd2WzJdKTsKKwkJcHV0cyhnaXRkaXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCgiLWgiLCBhcmd2WzFdKSkKKwkJdXNhZ2UoYnVpbHRpbl9yZXZfcGFyc2VfdXNhZ2UpOworCisJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKGFzX2lzKSB7CisJCQlpZiAoc2hvd19maWxlKGFyZykgJiYgYXNfaXMgPCAyKQorCQkJCXZlcmlmeV9maWxlbmFtZShwcmVmaXgsIGFyZywgMCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsIi1uIikpIHsKKwkJCWlmICgrK2kgPj0gYXJnYykKKwkJCQlkaWUoIi1uIHJlcXVpcmVzIGFuIGFyZ3VtZW50Iik7CisJCQlpZiAoKGZpbHRlciAmIERPX0ZMQUdTKSAmJiAoZmlsdGVyICYgRE9fUkVWUykpIHsKKwkJCQlzaG93KGFyZyk7CisJCQkJc2hvdyhhcmd2W2ldKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcHJlZml4Y21wKGFyZywgIi1uIikpIHsKKwkJCWlmICgoZmlsdGVyICYgRE9fRkxBR1MpICYmIChmaWx0ZXIgJiBET19SRVZTKSkKKwkJCQlzaG93KGFyZyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgqYXJnID09ICctJykgeworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJCWFzX2lzID0gMjsKKwkJCQkvKiBQYXNzIG9uIHRoZSAiLS0iIGlmIHdlIHNob3cgYW55dGhpbmcgYnV0IGZpbGVzLi4gKi8KKwkJCQlpZiAoZmlsdGVyICYgKERPX0ZMQUdTIHwgRE9fUkVWUykpCisJCQkJCXNob3dfZmlsZShhcmcpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kZWZhdWx0IikpIHsKKwkJCQlkZWYgPSBhcmd2W2krMV07CisJCQkJaSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1yZXZzLW9ubHkiKSkgeworCQkJCWZpbHRlciAmPSB+RE9fTk9SRVY7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLW5vLXJldnMiKSkgeworCQkJCWZpbHRlciAmPSB+RE9fUkVWUzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tZmxhZ3MiKSkgeworCQkJCWZpbHRlciAmPSB+RE9fTk9ORkxBR1M7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLW5vLWZsYWdzIikpIHsKKwkJCQlmaWx0ZXIgJj0gfkRPX0ZMQUdTOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJpZnkiKSkgeworCQkJCWZpbHRlciAmPSB+KERPX0ZMQUdTfERPX05PUkVWKTsKKwkJCQl2ZXJpZnkgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1xdWlldCIpIHx8ICFzdHJjbXAoYXJnLCAiLXEiKSkgeworCQkJCXF1aWV0ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc2hvcnQiKSB8fAorCQkJICAgICFwcmVmaXhjbXAoYXJnLCAiLS1zaG9ydD0iKSkgeworCQkJCWZpbHRlciAmPSB+KERPX0ZMQUdTfERPX05PUkVWKTsKKwkJCQl2ZXJpZnkgPSAxOworCQkJCWFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCQkJCWlmIChhcmdbN10gPT0gJz0nKQorCQkJCQlhYmJyZXYgPSBzdHJ0b3VsKGFyZyArIDgsIE5VTEwsIDEwKTsKKwkJCQlpZiAoYWJicmV2IDwgTUlOSU1VTV9BQkJSRVYpCisJCQkJCWFiYnJldiA9IE1JTklNVU1fQUJCUkVWOworCQkJCWVsc2UgaWYgKDQwIDw9IGFiYnJldikKKwkJCQkJYWJicmV2ID0gNDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXNxIikpIHsKKwkJCQlvdXRwdXRfc3EgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1ub3QiKSkgeworCQkJCXNob3dfdHlwZSBePSBSRVZFUlNFRDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc3ltYm9saWMiKSkgeworCQkJCXN5bWJvbGljID0gU0hPV19TWU1CT0xJQ19BU0lTOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zeW1ib2xpYy1mdWxsLW5hbWUiKSkgeworCQkJCXN5bWJvbGljID0gU0hPV19TWU1CT0xJQ19GVUxMOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1hYmJyZXYtcmVmIikgJiYKKwkJCSAgICAoIWFyZ1sxMl0gfHwgYXJnWzEyXSA9PSAnPScpKSB7CisJCQkJYWJicmV2X3JlZiA9IDE7CisJCQkJYWJicmV2X3JlZl9zdHJpY3QgPSB3YXJuX2FtYmlndW91c19yZWZzOworCQkJCWlmIChhcmdbMTJdID09ICc9JykgeworCQkJCQlpZiAoIXN0cmNtcChhcmcgKyAxMywgInN0cmljdCIpKQorCQkJCQkJYWJicmV2X3JlZl9zdHJpY3QgPSAxOworCQkJCQllbHNlIGlmICghc3RyY21wKGFyZyArIDEzLCAibG9vc2UiKSkKKwkJCQkJCWFiYnJldl9yZWZfc3RyaWN0ID0gMDsKKwkJCQkJZWxzZQorCQkJCQkJZGllKCJ1bmtub3duIG1vZGUgZm9yICVzIiwgYXJnKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQkJZm9yX2VhY2hfcmVmKHNob3dfcmVmZXJlbmNlLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tZGlzYW1iaWd1YXRlPSIpKSB7CisJCQkJZm9yX2VhY2hfYWJicmV2KGFyZyArIDE1LCBzaG93X2FiYnJldiwgTlVMTCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWJpc2VjdCIpKSB7CisJCQkJZm9yX2VhY2hfcmVmX2luKCJyZWZzL2Jpc2VjdC9iYWQiLCBzaG93X3JlZmVyZW5jZSwgTlVMTCk7CisJCQkJZm9yX2VhY2hfcmVmX2luKCJyZWZzL2Jpc2VjdC9nb29kIiwgYW50aV9yZWZlcmVuY2UsIE5VTEwpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1icmFuY2hlcz0iKSkgeworCQkJCWZvcl9lYWNoX2dsb2JfcmVmX2luKHNob3dfcmVmZXJlbmNlLCBhcmcgKyAxMSwKKwkJCQkJInJlZnMvaGVhZHMvIiwgTlVMTCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWJyYW5jaGVzIikpIHsKKwkJCQlmb3JfZWFjaF9icmFuY2hfcmVmKHNob3dfcmVmZXJlbmNlLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tdGFncz0iKSkgeworCQkJCWZvcl9lYWNoX2dsb2JfcmVmX2luKHNob3dfcmVmZXJlbmNlLCBhcmcgKyA3LAorCQkJCQkicmVmcy90YWdzLyIsIE5VTEwpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS10YWdzIikpIHsKKwkJCQlmb3JfZWFjaF90YWdfcmVmKHNob3dfcmVmZXJlbmNlLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tZ2xvYj0iKSkgeworCQkJCWZvcl9lYWNoX2dsb2JfcmVmKHNob3dfcmVmZXJlbmNlLCBhcmcgKyA3LCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tcmVtb3Rlcz0iKSkgeworCQkJCWZvcl9lYWNoX2dsb2JfcmVmX2luKHNob3dfcmVmZXJlbmNlLCBhcmcgKyAxMCwKKwkJCQkJInJlZnMvcmVtb3Rlcy8iLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcmVtb3RlcyIpKSB7CisJCQkJZm9yX2VhY2hfcmVtb3RlX3JlZihzaG93X3JlZmVyZW5jZSwgTlVMTCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXNob3ctdG9wbGV2ZWwiKSkgeworCQkJCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9IGdldF9naXRfd29ya190cmVlKCk7CisJCQkJaWYgKHdvcmtfdHJlZSkKKwkJCQkJcHV0cyh3b3JrX3RyZWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LXByZWZpeCIpKSB7CisJCQkJaWYgKHByZWZpeCkKKwkJCQkJcHV0cyhwcmVmaXgpOworCQkJCWVsc2UKKwkJCQkJcHV0Y2hhcignXG4nKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc2hvdy1jZHVwIikpIHsKKwkJCQljb25zdCBjaGFyICpwZnggPSBwcmVmaXg7CisJCQkJaWYgKCFpc19pbnNpZGVfd29ya190cmVlKCkpIHsKKwkJCQkJY29uc3QgY2hhciAqd29ya190cmVlID0KKwkJCQkJCWdldF9naXRfd29ya190cmVlKCk7CisJCQkJCWlmICh3b3JrX3RyZWUpCisJCQkJCQlwcmludGYoIiVzXG4iLCB3b3JrX3RyZWUpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJd2hpbGUgKHBmeCkgeworCQkJCQlwZnggPSBzdHJjaHIocGZ4LCAnLycpOworCQkJCQlpZiAocGZ4KSB7CisJCQkJCQlwZngrKzsKKwkJCQkJCXByaW50ZigiLi4vIik7CisJCQkJCX0KKwkJCQl9CisJCQkJcHV0Y2hhcignXG4nKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tZ2l0LWRpciIpKSB7CisJCQkJY29uc3QgY2hhciAqZ2l0ZGlyID0gZ2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQpOworCQkJCXN0YXRpYyBjaGFyIGN3ZFtQQVRIX01BWF07CisJCQkJaW50IGxlbjsKKwkJCQlpZiAoZ2l0ZGlyKSB7CisJCQkJCXB1dHMoZ2l0ZGlyKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmICghcHJlZml4KSB7CisJCQkJCXB1dHMoIi5naXQiKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmICghZ2V0Y3dkKGN3ZCwgUEFUSF9NQVgpKQorCQkJCQlkaWVfZXJybm8oInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOworCQkJCWxlbiA9IHN0cmxlbihjd2QpOworCQkJCXByaW50ZigiJXMlcy5naXRcbiIsIGN3ZCwgbGVuICYmIGN3ZFtsZW4tMV0gIT0gJy8nID8gIi8iIDogIiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1pcy1pbnNpZGUtZ2l0LWRpciIpKSB7CisJCQkJcHJpbnRmKCIlc1xuIiwgaXNfaW5zaWRlX2dpdF9kaXIoKSA/ICJ0cnVlIgorCQkJCQkJOiAiZmFsc2UiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0taXMtaW5zaWRlLXdvcmstdHJlZSIpKSB7CisJCQkJcHJpbnRmKCIlc1xuIiwgaXNfaW5zaWRlX3dvcmtfdHJlZSgpID8gInRydWUiCisJCQkJCQk6ICJmYWxzZSIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1pcy1iYXJlLXJlcG9zaXRvcnkiKSkgeworCQkJCXByaW50ZigiJXNcbiIsIGlzX2JhcmVfcmVwb3NpdG9yeSgpID8gInRydWUiCisJCQkJCQk6ICJmYWxzZSIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1zaW5jZT0iKSkgeworCQkJCXNob3dfZGF0ZXN0cmluZygiLS1tYXgtYWdlPSIsIGFyZys4KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tYWZ0ZXI9IikpIHsKKwkJCQlzaG93X2RhdGVzdHJpbmcoIi0tbWF4LWFnZT0iLCBhcmcrOCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWJlZm9yZT0iKSkgeworCQkJCXNob3dfZGF0ZXN0cmluZygiLS1taW4tYWdlPSIsIGFyZys5KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tdW50aWw9IikpIHsKKwkJCQlzaG93X2RhdGVzdHJpbmcoIi0tbWluLWFnZT0iLCBhcmcrOCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc2hvd19mbGFnKGFyZykgJiYgdmVyaWZ5KQorCQkJCWRpZV9ub19zaW5nbGVfcmV2KHF1aWV0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogTm90IGEgZmxhZyBhcmd1bWVudCAqLworCQlpZiAodHJ5X2RpZmZlcmVuY2UoYXJnKSkKKwkJCWNvbnRpbnVlOworCQlpZiAodHJ5X3BhcmVudF9zaG9ydGhhbmRzKGFyZykpCisJCQljb250aW51ZTsKKwkJbmFtZSA9IGFyZzsKKwkJdHlwZSA9IE5PUk1BTDsKKwkJaWYgKCphcmcgPT0gJ14nKSB7CisJCQluYW1lKys7CisJCQl0eXBlID0gUkVWRVJTRUQ7CisJCX0KKwkJaWYgKCFnZXRfc2hhMShuYW1lLCBzaGExKSkgeworCQkJaWYgKHZlcmlmeSkKKwkJCQlyZXZzX2NvdW50Kys7CisJCQllbHNlCisJCQkJc2hvd19yZXYodHlwZSwgc2hhMSwgbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodmVyaWZ5KQorCQkJZGllX25vX3NpbmdsZV9yZXYocXVpZXQpOworCQlhc19pcyA9IDE7CisJCWlmICghc2hvd19maWxlKGFyZykpCisJCQljb250aW51ZTsKKwkJdmVyaWZ5X2ZpbGVuYW1lKHByZWZpeCwgYXJnLCAxKTsKKwl9CisJaWYgKHZlcmlmeSkgeworCQlpZiAocmV2c19jb3VudCA9PSAxKSB7CisJCQlzaG93X3Jldih0eXBlLCBzaGExLCBuYW1lKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKHJldnNfY291bnQgPT0gMCAmJiBzaG93X2RlZmF1bHQoKSkKKwkJCXJldHVybiAwOworCQlkaWVfbm9fc2luZ2xlX3JldihxdWlldCk7CisJfSBlbHNlCisJCXNob3dfZGVmYXVsdCgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXZlcnQuYyBiL2J1aWx0aW4vcmV2ZXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlMzZiOQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmV2ZXJ0LmMKQEAgLTAsMCArMSwyNDAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisKKy8qCisgKiBUaGlzIGltcGxlbWVudHMgdGhlIGJ1aWx0aW5zIHJldmVydCBhbmQgY2hlcnJ5LXBpY2suCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyAqCisgKiBCYXNlZCBvbiBnaXQtcmV2ZXJ0LnNoLCB3aGljaCBpcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBMaW51cyBUb3J2YWxkcworICogQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXZlcnRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJldmVydCBbb3B0aW9uc10gPGNvbW1pdC1pc2g+IiksCisJTl8oImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaGVycnlfcGlja191c2FnZVtdID0geworCU5fKCJnaXQgY2hlcnJ5LXBpY2sgW29wdGlvbnNdIDxjb21taXQtaXNoPiIpLAorCU5fKCJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFjdGlvbl9uYW1lKGNvbnN0IHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlyZXR1cm4gb3B0cy0+YWN0aW9uID09IFJFUExBWV9SRVZFUlQgPyAicmV2ZXJ0IiA6ICJjaGVycnktcGljayI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgKnJldmVydF9vcl9jaGVycnlfcGlja191c2FnZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJcmV0dXJuIG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUID8gcmV2ZXJ0X3VzYWdlIDogY2hlcnJ5X3BpY2tfdXNhZ2U7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3goY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmVwbGF5X29wdHMgKipvcHRzX3B0ciA9IG9wdC0+dmFsdWU7CisJc3RydWN0IHJlcGxheV9vcHRzICpvcHRzID0gKm9wdHNfcHRyOworCisJaWYgKHVuc2V0KQorCQlyZXR1cm4gMDsKKworCUFMTE9DX0dST1cob3B0cy0+eG9wdHMsIG9wdHMtPnhvcHRzX25yICsgMSwgb3B0cy0+eG9wdHNfYWxsb2MpOworCW9wdHMtPnhvcHRzW29wdHMtPnhvcHRzX25yKytdID0geHN0cmR1cChhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2ZXJpZnlfb3B0X2NvbXBhdGlibGUoY29uc3QgY2hhciAqbWUsIGNvbnN0IGNoYXIgKmJhc2Vfb3B0LCAuLi4pCit7CisJY29uc3QgY2hhciAqdGhpc19vcHQ7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBiYXNlX29wdCk7CisJd2hpbGUgKCh0aGlzX29wdCA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKSkpIHsKKwkJaWYgKHZhX2FyZyhhcCwgaW50KSkKKwkJCWJyZWFrOworCX0KKwl2YV9lbmQoYXApOworCisJaWYgKHRoaXNfb3B0KQorCQlkaWUoXygiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiKSwgbWUsIHRoaXNfb3B0LCBiYXNlX29wdCk7Cit9CisKK3N0YXRpYyB2b2lkIHZlcmlmeV9vcHRfbXV0dWFsbHlfY29tcGF0aWJsZShjb25zdCBjaGFyICptZSwgLi4uKQoreworCWNvbnN0IGNoYXIgKm9wdDEsICpvcHQyID0gTlVMTDsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIG1lKTsKKwl3aGlsZSAoKG9wdDEgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIgKikpKSB7CisJCWlmICh2YV9hcmcoYXAsIGludCkpCisJCQlicmVhazsKKwl9CisJaWYgKG9wdDEpIHsKKwkJd2hpbGUgKChvcHQyID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopKSkgeworCQkJaWYgKHZhX2FyZyhhcCwgaW50KSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwl2YV9lbmQoYXApOworCisJaWYgKG9wdDEgJiYgb3B0MikKKwkJZGllKF8oIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIiksCW1lLCBvcHQxLCBvcHQyKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfYXJncyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwljb25zdCBjaGFyICogY29uc3QgKiB1c2FnZV9zdHIgPSByZXZlcnRfb3JfY2hlcnJ5X3BpY2tfdXNhZ2Uob3B0cyk7CisJY29uc3QgY2hhciAqbWUgPSBhY3Rpb25fbmFtZShvcHRzKTsKKwlpbnQgcmVtb3ZlX3N0YXRlID0gMDsKKwlpbnQgY29udGluID0gMDsKKwlpbnQgcm9sbGJhY2sgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTigwLCAicXVpdCIsICZyZW1vdmVfc3RhdGUsIE5fKCJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIikpLAorCQlPUFRfQk9PTEVBTigwLCAiY29udGludWUiLCAmY29udGluLCBOXygicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgImFib3J0IiwgJnJvbGxiYWNrLCBOXygiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpKSwKKwkJT1BUX0JPT0xFQU4oJ24nLCAibm8tY29tbWl0IiwgJm9wdHMtPm5vX2NvbW1pdCwgTl8oImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IikpLAorCQlPUFRfQk9PTEVBTignZScsICJlZGl0IiwgJm9wdHMtPmVkaXQsIE5fKCJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIpKSwKKwkJT1BUX05PT1BfTk9BUkcoJ3InLCBOVUxMKSwKKwkJT1BUX0JPT0xFQU4oJ3MnLCAic2lnbm9mZiIsICZvcHRzLT5zaWdub2ZmLCBOXygiYWRkIFNpZ25lZC1vZmYtYnk6IikpLAorCQlPUFRfSU5URUdFUignbScsICJtYWlubGluZSIsICZvcHRzLT5tYWlubGluZSwgTl8oInBhcmVudCBudW1iZXIiKSksCisJCU9QVF9SRVJFUkVfQVVUT1VQREFURSgmb3B0cy0+YWxsb3dfcmVyZXJlX2F1dG8pLAorCQlPUFRfU1RSSU5HKDAsICJzdHJhdGVneSIsICZvcHRzLT5zdHJhdGVneSwgTl8oInN0cmF0ZWd5IiksIE5fKCJtZXJnZSBzdHJhdGVneSIpKSwKKwkJT1BUX0NBTExCQUNLKCdYJywgInN0cmF0ZWd5LW9wdGlvbiIsICZvcHRzLCBOXygib3B0aW9uIiksCisJCQlOXygib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIpLCBvcHRpb25fcGFyc2VfeCksCisJCU9QVF9FTkQoKSwKKwkJT1BUX0VORCgpLAorCQlPUFRfRU5EKCksCisJCU9QVF9FTkQoKSwKKwkJT1BUX0VORCgpLAorCQlPUFRfRU5EKCksCisJfTsKKworCWlmIChvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1BJQ0spIHsKKwkJc3RydWN0IG9wdGlvbiBjcF9leHRyYVtdID0geworCQkJT1BUX0JPT0xFQU4oJ3gnLCBOVUxMLCAmb3B0cy0+cmVjb3JkX29yaWdpbiwgTl8oImFwcGVuZCBjb21taXQgbmFtZSIpKSwKKwkJCU9QVF9CT09MRUFOKDAsICJmZiIsICZvcHRzLT5hbGxvd19mZiwgTl8oImFsbG93IGZhc3QtZm9yd2FyZCIpKSwKKwkJCU9QVF9CT09MRUFOKDAsICJhbGxvdy1lbXB0eSIsICZvcHRzLT5hbGxvd19lbXB0eSwgTl8oInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIikpLAorCQkJT1BUX0JPT0xFQU4oMCwgImFsbG93LWVtcHR5LW1lc3NhZ2UiLCAmb3B0cy0+YWxsb3dfZW1wdHlfbWVzc2FnZSwgTl8oImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIpKSwKKwkJCU9QVF9CT09MRUFOKDAsICJrZWVwLXJlZHVuZGFudC1jb21taXRzIiwgJm9wdHMtPmtlZXBfcmVkdW5kYW50X2NvbW1pdHMsIE5fKCJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIpKSwKKwkJCU9QVF9FTkQoKSwKKwkJfTsKKwkJaWYgKHBhcnNlX29wdGlvbnNfY29uY2F0KG9wdGlvbnMsIEFSUkFZX1NJWkUob3B0aW9ucyksIGNwX2V4dHJhKSkKKwkJCWRpZShfKCJwcm9ncmFtIGVycm9yIikpOworCX0KKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIHVzYWdlX3N0ciwKKwkJCVBBUlNFX09QVF9LRUVQX0FSR1YwIHwKKwkJCVBBUlNFX09QVF9LRUVQX1VOS05PV04pOworCisJLyogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBzdWJjb21tYW5kcyAqLworCXZlcmlmeV9vcHRfbXV0dWFsbHlfY29tcGF0aWJsZShtZSwKKwkJCQkiLS1xdWl0IiwgcmVtb3ZlX3N0YXRlLAorCQkJCSItLWNvbnRpbnVlIiwgY29udGluLAorCQkJCSItLWFib3J0Iiwgcm9sbGJhY2ssCisJCQkJTlVMTCk7CisKKwkvKiBpbXBsaWVzIGFsbG93X2VtcHR5ICovCisJaWYgKG9wdHMtPmtlZXBfcmVkdW5kYW50X2NvbW1pdHMpCisJCW9wdHMtPmFsbG93X2VtcHR5ID0gMTsKKworCS8qIFNldCB0aGUgc3ViY29tbWFuZCAqLworCWlmIChyZW1vdmVfc3RhdGUpCisJCW9wdHMtPnN1YmNvbW1hbmQgPSBSRVBMQVlfUkVNT1ZFX1NUQVRFOworCWVsc2UgaWYgKGNvbnRpbikKKwkJb3B0cy0+c3ViY29tbWFuZCA9IFJFUExBWV9DT05USU5VRTsKKwllbHNlIGlmIChyb2xsYmFjaykKKwkJb3B0cy0+c3ViY29tbWFuZCA9IFJFUExBWV9ST0xMQkFDSzsKKwllbHNlCisJCW9wdHMtPnN1YmNvbW1hbmQgPSBSRVBMQVlfTk9ORTsKKworCS8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworCWlmIChvcHRzLT5zdWJjb21tYW5kICE9IFJFUExBWV9OT05FKSB7CisJCWNoYXIgKnRoaXNfb3BlcmF0aW9uOworCQlpZiAob3B0cy0+c3ViY29tbWFuZCA9PSBSRVBMQVlfUkVNT1ZFX1NUQVRFKQorCQkJdGhpc19vcGVyYXRpb24gPSAiLS1xdWl0IjsKKwkJZWxzZSBpZiAob3B0cy0+c3ViY29tbWFuZCA9PSBSRVBMQVlfQ09OVElOVUUpCisJCQl0aGlzX29wZXJhdGlvbiA9ICItLWNvbnRpbnVlIjsKKwkJZWxzZSB7CisJCQlhc3NlcnQob3B0cy0+c3ViY29tbWFuZCA9PSBSRVBMQVlfUk9MTEJBQ0spOworCQkJdGhpc19vcGVyYXRpb24gPSAiLS1hYm9ydCI7CisJCX0KKworCQl2ZXJpZnlfb3B0X2NvbXBhdGlibGUobWUsIHRoaXNfb3BlcmF0aW9uLAorCQkJCSItLW5vLWNvbW1pdCIsIG9wdHMtPm5vX2NvbW1pdCwKKwkJCQkiLS1zaWdub2ZmIiwgb3B0cy0+c2lnbm9mZiwKKwkJCQkiLS1tYWlubGluZSIsIG9wdHMtPm1haW5saW5lLAorCQkJCSItLXN0cmF0ZWd5Iiwgb3B0cy0+c3RyYXRlZ3kgPyAxIDogMCwKKwkJCQkiLS1zdHJhdGVneS1vcHRpb24iLCBvcHRzLT54b3B0cyA/IDEgOiAwLAorCQkJCSIteCIsIG9wdHMtPnJlY29yZF9vcmlnaW4sCisJCQkJIi0tZmYiLCBvcHRzLT5hbGxvd19mZiwKKwkJCQlOVUxMKTsKKwl9CisKKwlpZiAob3B0cy0+YWxsb3dfZmYpCisJCXZlcmlmeV9vcHRfY29tcGF0aWJsZShtZSwgIi0tZmYiLAorCQkJCSItLXNpZ25vZmYiLCBvcHRzLT5zaWdub2ZmLAorCQkJCSItLW5vLWNvbW1pdCIsIG9wdHMtPm5vX2NvbW1pdCwKKwkJCQkiLXgiLCBvcHRzLT5yZWNvcmRfb3JpZ2luLAorCQkJCSItLWVkaXQiLCBvcHRzLT5lZGl0LAorCQkJCU5VTEwpOworCisJaWYgKG9wdHMtPnN1YmNvbW1hbmQgIT0gUkVQTEFZX05PTkUpIHsKKwkJb3B0cy0+cmV2cyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBzX3Jfb3B0OworCQlvcHRzLT5yZXZzID0geG1hbGxvYyhzaXplb2YoKm9wdHMtPnJldnMpKTsKKwkJaW5pdF9yZXZpc2lvbnMob3B0cy0+cmV2cywgTlVMTCk7CisJCW9wdHMtPnJldnMtPm5vX3dhbGsgPSBSRVZJU0lPTl9XQUxLX05PX1dBTEtfVU5TT1JURUQ7CisJCWlmIChhcmdjIDwgMikKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZV9zdHIsIG9wdGlvbnMpOworCQltZW1zZXQoJnNfcl9vcHQsIDAsIHNpemVvZihzX3Jfb3B0KSk7CisJCXNfcl9vcHQuYXNzdW1lX2Rhc2hkYXNoID0gMTsKKwkJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCBvcHRzLT5yZXZzLCAmc19yX29wdCk7CisJfQorCisJaWYgKGFyZ2MgPiAxKQorCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2Vfc3RyLCBvcHRpb25zKTsKK30KKworaW50IGNtZF9yZXZlcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJlcGxheV9vcHRzIG9wdHM7CisJaW50IHJlczsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlpZiAoaXNhdHR5KDApKQorCQlvcHRzLmVkaXQgPSAxOworCW9wdHMuYWN0aW9uID0gUkVQTEFZX1JFVkVSVDsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmb3B0cyk7CisJcmVzID0gc2VxdWVuY2VyX3BpY2tfcmV2aXNpb25zKCZvcHRzKTsKKwlpZiAocmVzIDwgMCkKKwkJZGllKF8oInJldmVydCBmYWlsZWQiKSk7CisJcmV0dXJuIHJlczsKK30KKworaW50IGNtZF9jaGVycnlfcGljayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmVwbGF5X29wdHMgb3B0czsKKwlpbnQgcmVzOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuYWN0aW9uID0gUkVQTEFZX1BJQ0s7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCXBhcnNlX2FyZ3MoYXJnYywgYXJndiwgJm9wdHMpOworCXJlcyA9IHNlcXVlbmNlcl9waWNrX3JldmlzaW9ucygmb3B0cyk7CisJaWYgKHJlcyA8IDApCisJCWRpZShfKCJjaGVycnktcGljayBmYWlsZWQiKSk7CisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcm0uYyBiL2J1aWx0aW4vcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg0YzRjCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9ybS5jCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogImdpdCBybSIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcyAyMDA2CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcm1fdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJtIFtvcHRpb25zXSBbLS1dIDxmaWxlPi4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCBuciwgYWxsb2M7CisJY29uc3QgY2hhciAqKm5hbWU7Cit9IGxpc3Q7CisKK3N0YXRpYyBpbnQgY2hlY2tfbG9jYWxfbW9kKHVuc2lnbmVkIGNoYXIgKmhlYWQsIGludCBpbmRleF9vbmx5KQoreworCS8qCisJICogSXRlbXMgaW4gbGlzdCBhcmUgYWxyZWFkeSBzb3J0ZWQgaW4gdGhlIGNhY2hlIG9yZGVyLAorCSAqIHNvIHdlIGNvdWxkIGRvIHRoaXMgYSBsb3QgbW9yZSBlZmZpY2llbnRseSBieSB1c2luZworCSAqIHRyZWVfZGVzYyBiYXNlZCB0cmF2ZXJzYWwgaWYgd2Ugd2FudGVkIHRvLCBidXQgSSBhbQorCSAqIGxhenksIGFuZCB3aG8gY2FyZXMgaWYgcmVtb3ZhbCBvZiBmaWxlcyBpcyBhIHRhZAorCSAqIHNsb3dlciB0aGFuIHRoZSB0aGVvcmV0aWNhbCBtYXhpbXVtIHNwZWVkPworCSAqLworCWludCBpLCBub19oZWFkOworCWludCBlcnJzID0gMDsKKworCW5vX2hlYWQgPSBpc19udWxsX3NoYTEoaGVhZCk7CisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaW50IHBvczsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGxpc3QubmFtZVtpXTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJdW5zaWduZWQgbW9kZTsKKwkJaW50IGxvY2FsX2NoYW5nZXMgPSAwOworCQlpbnQgc3RhZ2VkX2NoYW5nZXMgPSAwOworCisJCXBvcyA9IGNhY2hlX25hbWVfcG9zKG5hbWUsIHN0cmxlbihuYW1lKSk7CisJCWlmIChwb3MgPCAwKQorCQkJY29udGludWU7IC8qIHJlbW92aW5nIHVubWVyZ2VkIGVudHJ5ICovCisJCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisKKwkJaWYgKGxzdGF0KGNlLT5uYW1lLCAmc3QpIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCQl3YXJuaW5nKCInJXMnOiAlcyIsIGNlLT5uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJLyogSXQgYWxyZWFkeSB2YW5pc2hlZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCS8qIGlmIGEgZmlsZSB3YXMgcmVtb3ZlZCBhbmQgaXQgaXMgbm93IGEKKwkJCSAqIGRpcmVjdG9yeSwgdGhhdCBpcyB0aGUgc2FtZSBhcyBFTk9FTlQgYXMKKwkJCSAqIGZhciBhcyBnaXQgaXMgY29uY2VybmVkOyB3ZSBkbyBub3QgdHJhY2sKKwkJCSAqIGRpcmVjdG9yaWVzLgorCQkJICovCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqICJybSIgb2YgYSBwYXRoIHRoYXQgaGFzIGNoYW5nZXMgbmVlZCB0byBiZSB0cmVhdGVkCisJCSAqIGNhcmVmdWxseSBub3QgdG8gYWxsb3cgbG9zaW5nIGxvY2FsIGNoYW5nZXMKKwkJICogYWNjaWRlbnRhbGx5LiAgQSBsb2NhbCBjaGFuZ2UgY291bGQgYmUgKDEpIGZpbGUgaW4KKwkJICogd29yayB0cmVlIGlzIGRpZmZlcmVudCBzaW5jZSB0aGUgaW5kZXg7IGFuZC9vciAoMikKKwkJICogdGhlIHVzZXIgc3RhZ2VkIGEgY29udGVudCB0aGF0IGlzIGRpZmZlcmVudCBmcm9tCisJCSAqIHRoZSBjdXJyZW50IGNvbW1pdCBpbiB0aGUgaW5kZXguCisJCSAqCisJCSAqIEluIHN1Y2ggYSBjYXNlLCB5b3Ugd291bGQgbmVlZCB0byAtLWZvcmNlIHRoZQorCQkgKiByZW1vdmFsLiAgSG93ZXZlciwgInJtIC0tY2FjaGVkIiAocmVtb3ZlIG9ubHkgZnJvbQorCQkgKiB0aGUgaW5kZXgpIGlzIHNhZmUgaWYgdGhlIGluZGV4IG1hdGNoZXMgdGhlIGZpbGUgaW4KKwkJICogdGhlIHdvcmsgdHJlZSBvciB0aGUgSEVBRCBjb21taXQsIGFzIGl0IG1lYW5zIHRoYXQKKwkJICogdGhlIGNvbnRlbnQgYmVpbmcgcmVtb3ZlZCBpcyBhdmFpbGFibGUgZWxzZXdoZXJlLgorCQkgKi8KKworCQkvKgorCQkgKiBJcyB0aGUgaW5kZXggZGlmZmVyZW50IGZyb20gdGhlIGZpbGUgaW4gdGhlIHdvcmsgdHJlZT8KKwkJICovCisJCWlmIChjZV9tYXRjaF9zdGF0KGNlLCAmc3QsIDApKQorCQkJbG9jYWxfY2hhbmdlcyA9IDE7CisKKwkJLyoKKwkJICogSXMgdGhlIGluZGV4IGRpZmZlcmVudCBmcm9tIHRoZSBIRUFEIGNvbW1pdD8gIEJ5CisJCSAqIGRlZmluaXRpb24sIGJlZm9yZSB0aGUgdmVyeSBpbml0aWFsIGNvbW1pdCwKKwkJICogYW55dGhpbmcgc3RhZ2VkIGluIHRoZSBpbmRleCBpcyB0cmVhdGVkIGJ5IHRoZSBzYW1lCisJCSAqIHdheSBhcyBjaGFuZ2VkIGZyb20gdGhlIEhFQUQuCisJCSAqLworCQlpZiAobm9faGVhZAorCQkgICAgIHx8IGdldF90cmVlX2VudHJ5KGhlYWQsIG5hbWUsIHNoYTEsICZtb2RlKQorCQkgICAgIHx8IGNlLT5jZV9tb2RlICE9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpCisJCSAgICAgfHwgaGFzaGNtcChjZS0+c2hhMSwgc2hhMSkpCisJCQlzdGFnZWRfY2hhbmdlcyA9IDE7CisKKwkJLyoKKwkJICogSWYgdGhlIGluZGV4IGRvZXMgbm90IG1hdGNoIHRoZSBmaWxlIGluIHRoZSB3b3JrCisJCSAqIHRyZWUgYW5kIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBIRUFEIGNvbW1pdAorCQkgKiBlaXRoZXIsICgxKSAiZ2l0IHJtIiB3aXRob3V0IC0tY2FjaGVkIGRlZmluaXRlbHkKKwkJICogd2lsbCBsb3NlIGluZm9ybWF0aW9uOyAoMikgImdpdCBybSAtLWNhY2hlZCIgd2lsbAorCQkgKiBsb3NlIGluZm9ybWF0aW9uIHVubGVzcyBpdCBpcyBhYm91dCByZW1vdmluZyBhbgorCQkgKiAiaW50ZW50IHRvIGFkZCIgZW50cnkuCisJCSAqLworCQlpZiAobG9jYWxfY2hhbmdlcyAmJiBzdGFnZWRfY2hhbmdlcykgeworCQkJaWYgKCFpbmRleF9vbmx5IHx8ICEoY2UtPmNlX2ZsYWdzICYgQ0VfSU5URU5UX1RPX0FERCkpCisJCQkJZXJycyA9IGVycm9yKF8oIiclcycgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCAiCisJCQkJCSAgICAgImZyb20gYm90aCB0aGUgZmlsZSBhbmQgdGhlIEhFQURcbiIKKwkJCQkJICAgICAiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIpLCBuYW1lKTsKKwkJfQorCQllbHNlIGlmICghaW5kZXhfb25seSkgeworCQkJaWYgKHN0YWdlZF9jaGFuZ2VzKQorCQkJCWVycnMgPSBlcnJvcihfKCInJXMnIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXhcbiIKKwkJCQkJICAgICAiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCAiCisJCQkJCSAgICAgIm9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIiksIG5hbWUpOworCQkJaWYgKGxvY2FsX2NoYW5nZXMpCisJCQkJZXJycyA9IGVycm9yKF8oIiclcycgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnNcbiIKKwkJCQkJICAgICAiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCAiCisJCQkJCSAgICAgIm9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIiksIG5hbWUpOworCQl9CisJfQorCXJldHVybiBlcnJzOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGU7CisKK3N0YXRpYyBpbnQgc2hvd19vbmx5ID0gMCwgZm9yY2UgPSAwLCBpbmRleF9vbmx5ID0gMCwgcmVjdXJzaXZlID0gMCwgcXVpZXQgPSAwOworc3RhdGljIGludCBpZ25vcmVfdW5tYXRjaCA9IDA7CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fcm1fb3B0aW9uc1tdID0geworCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5LCBOXygiZHJ5IHJ1biIpKSwKKwlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiKSksCisJT1BUX0JPT0xFQU4oIDAgLCAiY2FjaGVkIiwgICAgICAgICAmaW5kZXhfb25seSwgTl8oIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IikpLAorCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siKSksCisJT1BUX0JPT0xFQU4oJ3InLCBOVUxMLCAgICAgICAgICAgICAmcmVjdXJzaXZlLCAgTl8oImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIikpLAorCU9QVF9CT09MRUFOKCAwICwgImlnbm9yZS11bm1hdGNoIiwgJmlnbm9yZV91bm1hdGNoLAorCQkJCU5fKCJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIpKSwKKwlPUFRfRU5EKCksCit9OworCitpbnQgY21kX3JtKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBuZXdmZDsKKwljb25zdCBjaGFyICoqcGF0aHNwZWM7CisJY2hhciAqc2VlbjsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9ybV9vcHRpb25zLAorCQkJICAgICBidWlsdGluX3JtX3VzYWdlLCAwKTsKKwlpZiAoIWFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JtX3VzYWdlLCBidWlsdGluX3JtX29wdGlvbnMpOworCisJaWYgKCFpbmRleF9vbmx5KQorCQlzZXR1cF93b3JrX3RyZWUoKTsKKworCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCXBhdGhzcGVjID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndik7CisJcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCBSRUZSRVNIX1FVSUVULCBwYXRoc3BlYywgTlVMTCwgTlVMTCk7CisKKwlzZWVuID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBwYXRoc3BlY1tpXSA7IGkrKykKKwkJLyogbm90aGluZyAqLzsKKwlzZWVuID0geGNhbGxvYyhpLCAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlpZiAoIW1hdGNoX3BhdGhzcGVjKHBhdGhzcGVjLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIDAsIHNlZW4pKQorCQkJY29udGludWU7CisJCUFMTE9DX0dST1cobGlzdC5uYW1lLCBsaXN0Lm5yICsgMSwgbGlzdC5hbGxvYyk7CisJCWxpc3QubmFtZVtsaXN0Lm5yKytdID0gY2UtPm5hbWU7CisJfQorCisJaWYgKHBhdGhzcGVjKSB7CisJCWNvbnN0IGNoYXIgKm1hdGNoOworCQlpbnQgc2Vlbl9hbnkgPSAwOworCQlmb3IgKGkgPSAwOyAobWF0Y2ggPSBwYXRoc3BlY1tpXSkgIT0gTlVMTCA7IGkrKykgeworCQkJaWYgKCFzZWVuW2ldKSB7CisJCQkJaWYgKCFpZ25vcmVfdW5tYXRjaCkgeworCQkJCQlkaWUoXygicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIpLAorCQkJCQkgICAgbWF0Y2gpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXNlZW5fYW55ID0gMTsKKwkJCX0KKwkJCWlmICghcmVjdXJzaXZlICYmIHNlZW5baV0gPT0gTUFUQ0hFRF9SRUNVUlNJVkVMWSkKKwkJCQlkaWUoXygibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIpLAorCQkJCSAgICAqbWF0Y2ggPyBtYXRjaCA6ICIuIik7CisJCX0KKworCQlpZiAoISBzZWVuX2FueSkKKwkJCWV4aXQoMCk7CisJfQorCisJLyoKKwkgKiBJZiBub3QgZm9yY2VkLCB0aGUgZmlsZSwgdGhlIGluZGV4IGFuZCB0aGUgSEVBRCAoaWYgZXhpc3RzKQorCSAqIG11c3QgbWF0Y2g7IGJ1dCB0aGUgZmlsZSBjYW4gYWxyZWFkeSBiZWVuIHJlbW92ZWQsIHNpbmNlCisJICogdGhpcyBzZXF1ZW5jZSBpcyBhIG5hdHVyYWwgIm5vdmljZSIgd2F5OgorCSAqCisJICoJcm0gRjsgZ2l0IHJtIEYKKwkgKgorCSAqIEZ1cnRoZXIsIGlmIEhFQUQgY29tbWl0IGV4aXN0cywgImRpZmYtaW5kZXggLS1jYWNoZWQiIG11c3QKKwkgKiByZXBvcnQgbm8gY2hhbmdlcyB1bmxlc3MgZm9yY2VkLgorCSAqLworCWlmICghZm9yY2UpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaWYgKGdldF9zaGExKCJIRUFEIiwgc2hhMSkpCisJCQloYXNoY2xyKHNoYTEpOworCQlpZiAoY2hlY2tfbG9jYWxfbW9kKHNoYTEsIGluZGV4X29ubHkpKQorCQkJZXhpdCgxKTsKKwl9CisKKwkvKgorCSAqIEZpcnN0IHJlbW92ZSB0aGUgbmFtZXMgZnJvbSB0aGUgaW5kZXg6IHdlIHdvbid0IGNvbW1pdAorCSAqIHRoZSBpbmRleCB1bmxlc3MgYWxsIG9mIHRoZW0gc3VjY2VlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBsaXN0Lm5hbWVbaV07CisJCWlmICghcXVpZXQpCisJCQlwcmludGYoInJtICclcydcbiIsIHBhdGgpOworCisJCWlmIChyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQorCQkJZGllKF8oImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIpLCBwYXRoKTsKKwl9CisKKwlpZiAoc2hvd19vbmx5KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhlbiwgdW5sZXNzIHdlIHVzZWQgIi0tY2FjaGVkIiwgcmVtb3ZlIHRoZSBmaWxlbmFtZXMgZnJvbQorCSAqIHRoZSB3b3Jrc3BhY2UuIElmIHdlIGZhaWwgdG8gcmVtb3ZlIHRoZSBmaXJzdCBvbmUsIHdlCisJICogYWJvcnQgdGhlICJnaXQgcm0iIChidXQgb25jZSB3ZSd2ZSBzdWNjZXNzZnVsbHkgcmVtb3ZlZAorCSAqIGFueSBmaWxlIGF0IGFsbCwgd2UnbGwgZ28gYWhlYWQgYW5kIGNvbW1pdCB0byBpdCBhbGw6CisJICogYnkgdGhlbiB3ZSd2ZSBhbHJlYWR5IGNvbW1pdHRlZCBvdXJzZWx2ZXMgYW5kIGNhbid0IGZhaWwKKwkgKiBpbiB0aGUgbWlkZGxlKQorCSAqLworCWlmICghaW5kZXhfb25seSkgeworCQlpbnQgcmVtb3ZlZCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKnBhdGggPSBsaXN0Lm5hbWVbaV07CisJCQlpZiAoIXJlbW92ZV9wYXRoKHBhdGgpKSB7CisJCQkJcmVtb3ZlZCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXJlbW92ZWQpCisJCQkJZGllX2Vycm5vKCJnaXQgcm06ICclcyciLCBwYXRoKTsKKwkJfQorCX0KKworCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCkgeworCQlpZiAod3JpdGVfY2FjaGUobmV3ZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAorCQkgICAgY29tbWl0X2xvY2tlZF9pbmRleCgmbG9ja19maWxlKSkKKwkJCWRpZShfKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3NlbmQtcGFjay5jIGIvYnVpbHRpbi9zZW5kLXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDA1MDY0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zZW5kLXBhY2suYwpAQCAtMCwwICsxLDU3MSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAic2VuZC1wYWNrLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHNlbmRfcGFja191c2FnZVtdID0KKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iOworCitzdGF0aWMgc3RydWN0IHNlbmRfcGFja19hcmdzIGFyZ3M7CisKK3N0YXRpYyBpbnQgZmVlZF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBpbnQgbmVnYXRpdmUpCit7CisJY2hhciBidWZbNDJdOworCisJaWYgKG5lZ2F0aXZlICYmICFoYXNfc2hhMV9maWxlKHNoYTEpKQorCQlyZXR1cm4gMTsKKworCW1lbWNweShidWYgKyBuZWdhdGl2ZSwgc2hhMV90b19oZXgoc2hhMSksIDQwKTsKKwlpZiAobmVnYXRpdmUpCisJCWJ1ZlswXSA9ICdeJzsKKwlidWZbNDAgKyBuZWdhdGl2ZV0gPSAnXG4nOworCXJldHVybiB3cml0ZV9vcl93aGluZShmZCwgYnVmLCA0MSArIG5lZ2F0aXZlLCAic2VuZC1wYWNrOiBzZW5kIHJlZnMiKTsKK30KKworLyoKKyAqIE1ha2UgYSBwYWNrIHN0cmVhbSBhbmQgc3BpdCBpdCBvdXQgaW50byBmaWxlIGRlc2NyaXB0b3IgZmQKKyAqLworc3RhdGljIGludCBwYWNrX29iamVjdHMoaW50IGZkLCBzdHJ1Y3QgcmVmICpyZWZzLCBzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzICpleHRyYSwgc3RydWN0IHNlbmRfcGFja19hcmdzICphcmdzKQoreworCS8qCisJICogVGhlIGNoaWxkIGJlY29tZXMgcGFjay1vYmplY3RzIC0tcmV2czsgd2UgZmVlZAorCSAqIHRoZSByZXZpc2lvbiBwYXJhbWV0ZXJzIHRvIGl0IHZpYSBpdHMgc3RkaW4gYW5kCisJICogbGV0IGl0cyBzdGRvdXQgZ28gYmFjayB0byB0aGUgb3RoZXIgZW5kLgorCSAqLworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsKKwkJInBhY2stb2JqZWN0cyIsCisJCSItLWFsbC1wcm9ncmVzcy1pbXBsaWVkIiwKKwkJIi0tcmV2cyIsCisJCSItLXN0ZG91dCIsCisJCU5VTEwsCisJCU5VTEwsCisJCU5VTEwsCisJCU5VTEwsCisJCU5VTEwsCisJfTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwbzsKKwlpbnQgaTsKKworCWkgPSA0OworCWlmIChhcmdzLT51c2VfdGhpbl9wYWNrKQorCQlhcmd2W2krK10gPSAiLS10aGluIjsKKwlpZiAoYXJncy0+dXNlX29mc19kZWx0YSkKKwkJYXJndltpKytdID0gIi0tZGVsdGEtYmFzZS1vZmZzZXQiOworCWlmIChhcmdzLT5xdWlldCB8fCAhYXJncy0+cHJvZ3Jlc3MpCisJCWFyZ3ZbaSsrXSA9ICItcSI7CisJaWYgKGFyZ3MtPnByb2dyZXNzKQorCQlhcmd2W2krK10gPSAiLS1wcm9ncmVzcyI7CisJbWVtc2V0KCZwbywgMCwgc2l6ZW9mKHBvKSk7CisJcG8uYXJndiA9IGFyZ3Y7CisJcG8uaW4gPSAtMTsKKwlwby5vdXQgPSBhcmdzLT5zdGF0ZWxlc3NfcnBjID8gLTEgOiBmZDsKKwlwby5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmcG8pKQorCQlkaWVfZXJybm8oImdpdCBwYWNrLW9iamVjdHMgZmFpbGVkIik7CisKKwkvKgorCSAqIFdlIGZlZWQgdGhlIHBhY2stb2JqZWN0cyB3ZSBqdXN0IHNwYXduZWQgd2l0aCByZXZpc2lvbgorCSAqIHBhcmFtZXRlcnMgYnkgd3JpdGluZyB0byB0aGUgcGlwZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZXh0cmEtPm5yOyBpKyspCisJCWlmICghZmVlZF9vYmplY3QoZXh0cmEtPmFycmF5W2ldLCBwby5pbiwgMSkpCisJCQlicmVhazsKKworCXdoaWxlIChyZWZzKSB7CisJCWlmICghaXNfbnVsbF9zaGExKHJlZnMtPm9sZF9zaGExKSAmJgorCQkgICAgIWZlZWRfb2JqZWN0KHJlZnMtPm9sZF9zaGExLCBwby5pbiwgMSkpCisJCQlicmVhazsKKwkJaWYgKCFpc19udWxsX3NoYTEocmVmcy0+bmV3X3NoYTEpICYmCisJCSAgICAhZmVlZF9vYmplY3QocmVmcy0+bmV3X3NoYTEsIHBvLmluLCAwKSkKKwkJCWJyZWFrOworCQlyZWZzID0gcmVmcy0+bmV4dDsKKwl9CisKKwljbG9zZShwby5pbik7CisKKwlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYykgeworCQljaGFyICpidWYgPSB4bWFsbG9jKExBUkdFX1BBQ0tFVF9NQVgpOworCQl3aGlsZSAoMSkgeworCQkJc3NpemVfdCBuID0geHJlYWQocG8ub3V0LCBidWYsIExBUkdFX1BBQ0tFVF9NQVgpOworCQkJaWYgKG4gPD0gMCkKKwkJCQlicmVhazsKKwkJCXNlbmRfc2lkZWJhbmQoZmQsIC0xLCBidWYsIG4sIExBUkdFX1BBQ0tFVF9NQVgpOworCQl9CisJCWZyZWUoYnVmKTsKKwkJY2xvc2UocG8ub3V0KTsKKwkJcG8ub3V0ID0gLTE7CisJfQorCisJaWYgKGZpbmlzaF9jb21tYW5kKCZwbykpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWNlaXZlX3N0YXR1cyhpbnQgaW4sIHN0cnVjdCByZWYgKnJlZnMpCit7CisJc3RydWN0IHJlZiAqaGludDsKKwljaGFyIGxpbmVbMTAwMF07CisJaW50IHJldCA9IDA7CisJaW50IGxlbiA9IHBhY2tldF9yZWFkX2xpbmUoaW4sIGxpbmUsIHNpemVvZihsaW5lKSk7CisJaWYgKGxlbiA8IDEwIHx8IG1lbWNtcChsaW5lLCAidW5wYWNrICIsIDcpKQorCQlyZXR1cm4gZXJyb3IoImRpZCBub3QgcmVjZWl2ZSByZW1vdGUgc3RhdHVzIik7CisJaWYgKG1lbWNtcChsaW5lLCAidW5wYWNrIG9rXG4iLCAxMCkpIHsKKwkJY2hhciAqcCA9IGxpbmUgKyBzdHJsZW4obGluZSkgLSAxOworCQlpZiAoKnAgPT0gJ1xuJykKKwkJCSpwID0gJ1wwJzsKKwkJZXJyb3IoInVucGFjayBmYWlsZWQ6ICVzIiwgbGluZSArIDcpOworCQlyZXQgPSAtMTsKKwl9CisJaGludCA9IE5VTEw7CisJd2hpbGUgKDEpIHsKKwkJY2hhciAqcmVmbmFtZTsKKwkJY2hhciAqbXNnOworCQlsZW4gPSBwYWNrZXRfcmVhZF9saW5lKGluLCBsaW5lLCBzaXplb2YobGluZSkpOworCQlpZiAoIWxlbikKKwkJCWJyZWFrOworCQlpZiAobGVuIDwgMyB8fAorCQkgICAgKG1lbWNtcChsaW5lLCAib2sgIiwgMykgJiYgbWVtY21wKGxpbmUsICJuZyAiLCAzKSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAicHJvdG9jb2wgZXJyb3I6ICVzXG4iLCBsaW5lKTsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKworCQlsaW5lW3N0cmxlbihsaW5lKS0xXSA9ICdcMCc7CisJCXJlZm5hbWUgPSBsaW5lICsgMzsKKwkJbXNnID0gc3RyY2hyKHJlZm5hbWUsICcgJyk7CisJCWlmIChtc2cpCisJCQkqbXNnKysgPSAnXDAnOworCisJCS8qIGZpcnN0IHRyeSBzZWFyY2hpbmcgYXQgb3VyIGhpbnQsIGZhbGxpbmcgYmFjayB0byBhbGwgcmVmcyAqLworCQlpZiAoaGludCkKKwkJCWhpbnQgPSBmaW5kX3JlZl9ieV9uYW1lKGhpbnQsIHJlZm5hbWUpOworCQlpZiAoIWhpbnQpCisJCQloaW50ID0gZmluZF9yZWZfYnlfbmFtZShyZWZzLCByZWZuYW1lKTsKKwkJaWYgKCFoaW50KSB7CisJCQl3YXJuaW5nKCJyZW1vdGUgcmVwb3J0ZWQgc3RhdHVzIG9uIHVua25vd24gcmVmOiAlcyIsCisJCQkJCXJlZm5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGhpbnQtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX0VYUEVDVElOR19SRVBPUlQpIHsKKwkJCXdhcm5pbmcoInJlbW90ZSByZXBvcnRlZCBzdGF0dXMgb24gdW5leHBlY3RlZCByZWY6ICVzIiwKKwkJCQkJcmVmbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsaW5lWzBdID09ICdvJyAmJiBsaW5lWzFdID09ICdrJykKKwkJCWhpbnQtPnN0YXR1cyA9IFJFRl9TVEFUVVNfT0s7CisJCWVsc2UgeworCQkJaGludC0+c3RhdHVzID0gUkVGX1NUQVRVU19SRU1PVEVfUkVKRUNUOworCQkJcmV0ID0gLTE7CisJCX0KKwkJaWYgKG1zZykKKwkJCWhpbnQtPnJlbW90ZV9zdGF0dXMgPSB4c3RyZHVwKG1zZyk7CisJCS8qIHN0YXJ0IG91ciBuZXh0IHNlYXJjaCBmcm9tIHRoZSBuZXh0IHJlZiAqLworCQloaW50ID0gaGludC0+bmV4dDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfaGVscGVyX3N0YXR1cyhzdHJ1Y3QgcmVmICpyZWYpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljb25zdCBjaGFyICptc2cgPSBOVUxMOworCQljb25zdCBjaGFyICpyZXM7CisKKwkJc3dpdGNoKHJlZi0+c3RhdHVzKSB7CisJCWNhc2UgUkVGX1NUQVRVU19OT05FOgorCQkJcmVzID0gImVycm9yIjsKKwkJCW1zZyA9ICJubyBtYXRjaCI7CisJCQlicmVhazsKKworCQljYXNlIFJFRl9TVEFUVVNfT0s6CisJCQlyZXMgPSAib2siOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQkJcmVzID0gIm9rIjsKKwkJCW1zZyA9ICJ1cCB0byBkYXRlIjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJbXNnID0gIm5vbi1mYXN0IGZvcndhcmQiOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURToKKwkJY2FzZSBSRUZfU1RBVFVTX1JFTU9URV9SRUpFQ1Q6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX0VYUEVDVElOR19SRVBPUlQ6CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzICVzIiwgcmVzLCByZWYtPm5hbWUpOworCQlpZiAocmVmLT5yZW1vdGVfc3RhdHVzKQorCQkJbXNnID0gcmVmLT5yZW1vdGVfc3RhdHVzOworCQlpZiAobXNnKSB7CisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJyAnKTsKKwkJCXF1b3RlX3R3b19jX3N0eWxlKCZidWYsICIiLCBtc2csIDApOworCQl9CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKworCQlzYWZlX3dyaXRlKDEsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGludCBzaWRlYmFuZF9kZW11eChpbnQgaW4sIGludCBvdXQsIHZvaWQgKmRhdGEpCit7CisJaW50ICpmZCA9IGRhdGEsIHJldDsKKyNpZmRlZiBOT19QVEhSRUFEUworCWNsb3NlKGZkWzFdKTsKKyNlbmRpZgorCXJldCA9IHJlY3Zfc2lkZWJhbmQoInNlbmQtcGFjayIsIGZkWzBdLCBvdXQpOworCWNsb3NlKG91dCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHNlbmRfcGFjayhzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgKmFyZ3MsCisJICAgICAgaW50IGZkW10sIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uLAorCSAgICAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCSAgICAgIHN0cnVjdCBleHRyYV9oYXZlX29iamVjdHMgKmV4dHJhX2hhdmUpCit7CisJaW50IGluID0gZmRbMF07CisJaW50IG91dCA9IGZkWzFdOworCXN0cnVjdCBzdHJidWYgcmVxX2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZWYgKnJlZjsKKwlpbnQgbmV3X3JlZnM7CisJaW50IGFsbG93X2RlbGV0aW5nX3JlZnMgPSAwOworCWludCBzdGF0dXNfcmVwb3J0ID0gMDsKKwlpbnQgdXNlX3NpZGViYW5kID0gMDsKKwlpbnQgcXVpZXRfc3VwcG9ydGVkID0gMDsKKwlpbnQgYWdlbnRfc3VwcG9ydGVkID0gMDsKKwl1bnNpZ25lZCBjbWRzX3NlbnQgPSAwOworCWludCByZXQ7CisJc3RydWN0IGFzeW5jIGRlbXV4OworCisJLyogRG9lcyB0aGUgb3RoZXIgZW5kIHN1cHBvcnQgdGhlIHJlcG9ydGluZz8gKi8KKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJyZXBvcnQtc3RhdHVzIikpCisJCXN0YXR1c19yZXBvcnQgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImRlbGV0ZS1yZWZzIikpCisJCWFsbG93X2RlbGV0aW5nX3JlZnMgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm9mcy1kZWx0YSIpKQorCQlhcmdzLT51c2Vfb2ZzX2RlbHRhID0gMTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJzaWRlLWJhbmQtNjRrIikpCisJCXVzZV9zaWRlYmFuZCA9IDE7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygicXVpZXQiKSkKKwkJcXVpZXRfc3VwcG9ydGVkID0gMTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJhZ2VudCIpKQorCQlhZ2VudF9zdXBwb3J0ZWQgPSAxOworCisJaWYgKCFyZW1vdGVfcmVmcykgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIKKwkJCSJQZXJoYXBzIHlvdSBzaG91bGQgc3BlY2lmeSBhIGJyYW5jaCBzdWNoIGFzICdtYXN0ZXInLlxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogRmluYWxseSwgdGVsbCB0aGUgb3RoZXIgZW5kIQorCSAqLworCW5ld19yZWZzID0gMDsKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoIXJlZi0+cGVlcl9yZWYgJiYgIWFyZ3MtPnNlbmRfbWlycm9yKQorCQkJY29udGludWU7CisKKwkJLyogQ2hlY2sgZm9yIHN0YXR1c2VzIHNldCBieSBzZXRfcmVmX3N0YXR1c19mb3JfcHVzaCgpICovCisJCXN3aXRjaCAocmVmLT5zdGF0dXMpIHsKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRDoKKwkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwkJfQorCisJCWlmIChyZWYtPmRlbGV0aW9uICYmICFhbGxvd19kZWxldGluZ19yZWZzKSB7CisJCQlyZWYtPnN0YXR1cyA9IFJFRl9TVEFUVVNfUkVKRUNUX05PREVMRVRFOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXJlZi0+ZGVsZXRpb24pCisJCQluZXdfcmVmcysrOworCisJCWlmIChhcmdzLT5kcnlfcnVuKSB7CisJCQlyZWYtPnN0YXR1cyA9IFJFRl9TVEFUVVNfT0s7CisJCX0gZWxzZSB7CisJCQljaGFyICpvbGRfaGV4ID0gc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSk7CisJCQljaGFyICpuZXdfaGV4ID0gc2hhMV90b19oZXgocmVmLT5uZXdfc2hhMSk7CisJCQlpbnQgcXVpZXQgPSBxdWlldF9zdXBwb3J0ZWQgJiYgKGFyZ3MtPnF1aWV0IHx8ICFhcmdzLT5wcm9ncmVzcyk7CisKKwkJCWlmICghY21kc19zZW50ICYmIChzdGF0dXNfcmVwb3J0IHx8IHVzZV9zaWRlYmFuZCB8fAorCQkJCQkgICBxdWlldCB8fCBhZ2VudF9zdXBwb3J0ZWQpKSB7CisJCQkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwKKwkJCQkJCSAiJXMgJXMgJXMlYyVzJXMlcyVzJXMiLAorCQkJCQkJIG9sZF9oZXgsIG5ld19oZXgsIHJlZi0+bmFtZSwgMCwKKwkJCQkJCSBzdGF0dXNfcmVwb3J0ID8gIiByZXBvcnQtc3RhdHVzIiA6ICIiLAorCQkJCQkJIHVzZV9zaWRlYmFuZCA/ICIgc2lkZS1iYW5kLTY0ayIgOiAiIiwKKwkJCQkJCSBxdWlldCA/ICIgcXVpZXQiIDogIiIsCisJCQkJCQkgYWdlbnRfc3VwcG9ydGVkID8gIiBhZ2VudD0iIDogIiIsCisJCQkJCQkgYWdlbnRfc3VwcG9ydGVkID8gZ2l0X3VzZXJfYWdlbnRfc2FuaXRpemVkKCkgOiAiIgorCQkJCQkJKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiJXMgJXMgJXMiLAorCQkJCQkJIG9sZF9oZXgsIG5ld19oZXgsIHJlZi0+bmFtZSk7CisJCQlyZWYtPnN0YXR1cyA9IHN0YXR1c19yZXBvcnQgPworCQkJCVJFRl9TVEFUVVNfRVhQRUNUSU5HX1JFUE9SVCA6CisJCQkJUkVGX1NUQVRVU19PSzsKKwkJCWNtZHNfc2VudCsrOworCQl9CisJfQorCisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpIHsKKwkJaWYgKCFhcmdzLT5kcnlfcnVuICYmIGNtZHNfc2VudCkgeworCQkJcGFja2V0X2J1Zl9mbHVzaCgmcmVxX2J1Zik7CisJCQlzZW5kX3NpZGViYW5kKG91dCwgLTEsIHJlcV9idWYuYnVmLCByZXFfYnVmLmxlbiwgTEFSR0VfUEFDS0VUX01BWCk7CisJCX0KKwl9IGVsc2UgeworCQlzYWZlX3dyaXRlKG91dCwgcmVxX2J1Zi5idWYsIHJlcV9idWYubGVuKTsKKwkJcGFja2V0X2ZsdXNoKG91dCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZyZXFfYnVmKTsKKworCWlmICh1c2Vfc2lkZWJhbmQgJiYgY21kc19zZW50KSB7CisJCW1lbXNldCgmZGVtdXgsIDAsIHNpemVvZihkZW11eCkpOworCQlkZW11eC5wcm9jID0gc2lkZWJhbmRfZGVtdXg7CisJCWRlbXV4LmRhdGEgPSBmZDsKKwkJZGVtdXgub3V0ID0gLTE7CisJCWlmIChzdGFydF9hc3luYygmZGVtdXgpKQorCQkJZGllKCJzZW5kLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIik7CisJCWluID0gZGVtdXgub3V0OworCX0KKworCWlmIChuZXdfcmVmcyAmJiBjbWRzX3NlbnQpIHsKKwkJaWYgKHBhY2tfb2JqZWN0cyhvdXQsIHJlbW90ZV9yZWZzLCBleHRyYV9oYXZlLCBhcmdzKSA8IDApIHsKKwkJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19OT05FOworCQkJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpCisJCQkJY2xvc2Uob3V0KTsKKwkJCWlmIChnaXRfY29ubmVjdGlvbl9pc19zb2NrZXQoY29ubikpCisJCQkJc2h1dGRvd24oZmRbMF0sIFNIVVRfV1IpOworCQkJaWYgKHVzZV9zaWRlYmFuZCkKKwkJCQlmaW5pc2hfYXN5bmMoJmRlbXV4KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYyAmJiBjbWRzX3NlbnQpCisJCXBhY2tldF9mbHVzaChvdXQpOworCisJaWYgKHN0YXR1c19yZXBvcnQgJiYgY21kc19zZW50KQorCQlyZXQgPSByZWNlaXZlX3N0YXR1cyhpbiwgcmVtb3RlX3JlZnMpOworCWVsc2UKKwkJcmV0ID0gMDsKKwlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYykKKwkJcGFja2V0X2ZsdXNoKG91dCk7CisKKwlpZiAodXNlX3NpZGViYW5kICYmIGNtZHNfc2VudCkgeworCQlpZiAoZmluaXNoX2FzeW5jKCZkZW11eCkpIHsKKwkJCWVycm9yKCJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCQljbG9zZShkZW11eC5vdXQpOworCX0KKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGFyZ3MtPnBvcmNlbGFpbikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzd2l0Y2ggKHJlZi0+c3RhdHVzKSB7CisJCWNhc2UgUkVGX1NUQVRVU19OT05FOgorCQljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCWNhc2UgUkVGX1NUQVRVU19PSzoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQgY21kX3NlbmRfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgbnJfcmVmc3BlY3MgPSAwOworCWNvbnN0IGNoYXIgKipyZWZzcGVjcyA9IE5VTEw7CisJY29uc3QgY2hhciAqcmVtb3RlX25hbWUgPSBOVUxMOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IE5VTEw7CisJY29uc3QgY2hhciAqZGVzdCA9IE5VTEw7CisJaW50IGZkWzJdOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uOworCXN0cnVjdCBleHRyYV9oYXZlX29iamVjdHMgZXh0cmFfaGF2ZTsKKwlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgKmxvY2FsX3JlZnM7CisJaW50IHJldDsKKwlpbnQgaGVscGVyX3N0YXR1cyA9IDA7CisJaW50IHNlbmRfYWxsID0gMDsKKwljb25zdCBjaGFyICpyZWNlaXZlcGFjayA9ICJnaXQtcmVjZWl2ZS1wYWNrIjsKKwlpbnQgZmxhZ3M7CisJaW50IG5vbmZhc3Rmb3J3YXJkID0gMDsKKwlpbnQgcHJvZ3Jlc3MgPSAtMTsKKworCWFyZ3YrKzsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrLCBhcmd2KyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gKmFyZ3Y7CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXJlY2VpdmUtcGFjaz0iKSkgeworCQkJCXJlY2VpdmVwYWNrID0gYXJnICsgMTU7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWV4ZWM9IikpIHsKKwkJCQlyZWNlaXZlcGFjayA9IGFyZyArIDc7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXJlbW90ZT0iKSkgeworCQkJCXJlbW90ZV9uYW1lID0gYXJnICsgOTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tYWxsIikpIHsKKwkJCQlzZW5kX2FsbCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWRyeS1ydW4iKSkgeworCQkJCWFyZ3MuZHJ5X3J1biA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLW1pcnJvciIpKSB7CisJCQkJYXJncy5zZW5kX21pcnJvciA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWZvcmNlIikpIHsKKwkJCQlhcmdzLmZvcmNlX3VwZGF0ZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXF1aWV0IikpIHsKKwkJCQlhcmdzLnF1aWV0ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKSB7CisJCQkJYXJncy52ZXJib3NlID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcHJvZ3Jlc3MiKSkgeworCQkJCXByb2dyZXNzID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tbm8tcHJvZ3Jlc3MiKSkgeworCQkJCXByb2dyZXNzID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tdGhpbiIpKSB7CisJCQkJYXJncy51c2VfdGhpbl9wYWNrID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc3RhdGVsZXNzLXJwYyIpKSB7CisJCQkJYXJncy5zdGF0ZWxlc3NfcnBjID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0taGVscGVyLXN0YXR1cyIpKSB7CisJCQkJaGVscGVyX3N0YXR1cyA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQl1c2FnZShzZW5kX3BhY2tfdXNhZ2UpOworCQl9CisJCWlmICghZGVzdCkgeworCQkJZGVzdCA9IGFyZzsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJlZnNwZWNzID0gKGNvbnN0IGNoYXIgKiopIGFyZ3Y7CisJCW5yX3JlZnNwZWNzID0gYXJnYyAtIGk7CisJCWJyZWFrOworCX0KKwlpZiAoIWRlc3QpCisJCXVzYWdlKHNlbmRfcGFja191c2FnZSk7CisJLyoKKwkgKiAtLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZTsgbmVpdGhlciBtYWtlcyBzZW5zZQorCSAqIHdpdGggYW55IHJlZnNwZWNzLgorCSAqLworCWlmICgocmVmc3BlY3MgJiYgKHNlbmRfYWxsIHx8IGFyZ3Muc2VuZF9taXJyb3IpKSB8fAorCSAgICAoc2VuZF9hbGwgJiYgYXJncy5zZW5kX21pcnJvcikpCisJCXVzYWdlKHNlbmRfcGFja191c2FnZSk7CisKKwlpZiAocmVtb3RlX25hbWUpIHsKKwkJcmVtb3RlID0gcmVtb3RlX2dldChyZW1vdGVfbmFtZSk7CisJCWlmICghcmVtb3RlX2hhc191cmwocmVtb3RlLCBkZXN0KSkgeworCQkJZGllKCJEZXN0aW5hdGlvbiAlcyBpcyBub3QgYSB1cmkgZm9yICVzIiwKKwkJCSAgICBkZXN0LCByZW1vdGVfbmFtZSk7CisJCX0KKwl9CisKKwlpZiAocHJvZ3Jlc3MgPT0gLTEpCisJCXByb2dyZXNzID0gIWFyZ3MucXVpZXQgJiYgaXNhdHR5KDIpOworCWFyZ3MucHJvZ3Jlc3MgPSBwcm9ncmVzczsKKworCWlmIChhcmdzLnN0YXRlbGVzc19ycGMpIHsKKwkJY29ubiA9IE5VTEw7CisJCWZkWzBdID0gMDsKKwkJZmRbMV0gPSAxOworCX0gZWxzZSB7CisJCWNvbm4gPSBnaXRfY29ubmVjdChmZCwgZGVzdCwgcmVjZWl2ZXBhY2ssCisJCQlhcmdzLnZlcmJvc2UgPyBDT05ORUNUX1ZFUkJPU0UgOiAwKTsKKwl9CisKKwltZW1zZXQoJmV4dHJhX2hhdmUsIDAsIHNpemVvZihleHRyYV9oYXZlKSk7CisKKwlnZXRfcmVtb3RlX2hlYWRzKGZkWzBdLCAmcmVtb3RlX3JlZnMsIFJFRl9OT1JNQUwsICZleHRyYV9oYXZlKTsKKworCXRyYW5zcG9ydF92ZXJpZnlfcmVtb3RlX25hbWVzKG5yX3JlZnNwZWNzLCByZWZzcGVjcyk7CisKKwlsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CisKKwlmbGFncyA9IE1BVENIX1JFRlNfTk9ORTsKKworCWlmIChzZW5kX2FsbCkKKwkJZmxhZ3MgfD0gTUFUQ0hfUkVGU19BTEw7CisJaWYgKGFyZ3Muc2VuZF9taXJyb3IpCisJCWZsYWdzIHw9IE1BVENIX1JFRlNfTUlSUk9SOworCisJLyogbWF0Y2ggdGhlbSB1cCAqLworCWlmIChtYXRjaF9wdXNoX3JlZnMobG9jYWxfcmVmcywgJnJlbW90ZV9yZWZzLCBucl9yZWZzcGVjcywgcmVmc3BlY3MsIGZsYWdzKSkKKwkJcmV0dXJuIC0xOworCisJc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2gocmVtb3RlX3JlZnMsIGFyZ3Muc2VuZF9taXJyb3IsCisJCWFyZ3MuZm9yY2VfdXBkYXRlKTsKKworCXJldCA9IHNlbmRfcGFjaygmYXJncywgZmQsIGNvbm4sIHJlbW90ZV9yZWZzLCAmZXh0cmFfaGF2ZSk7CisKKwlpZiAoaGVscGVyX3N0YXR1cykKKwkJcHJpbnRfaGVscGVyX3N0YXR1cyhyZW1vdGVfcmVmcyk7CisKKwljbG9zZShmZFsxXSk7CisJY2xvc2UoZmRbMF0pOworCisJcmV0IHw9IGZpbmlzaF9jb25uZWN0KGNvbm4pOworCisJaWYgKCFoZWxwZXJfc3RhdHVzKQorCQl0cmFuc3BvcnRfcHJpbnRfcHVzaF9zdGF0dXMoZGVzdCwgcmVtb3RlX3JlZnMsIGFyZ3MudmVyYm9zZSwgMCwgJm5vbmZhc3Rmb3J3YXJkKTsKKworCWlmICghYXJncy5kcnlfcnVuICYmIHJlbW90ZSkgeworCQlzdHJ1Y3QgcmVmICpyZWY7CisJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJdHJhbnNwb3J0X3VwZGF0ZV90cmFja2luZ19yZWYocmVtb3RlLCByZWYsIGFyZ3MudmVyYm9zZSk7CisJfQorCisJaWYgKCFyZXQgJiYgIXRyYW5zcG9ydF9yZWZzX3B1c2hlZChyZW1vdGVfcmVmcykpCisJCWZwcmludGYoc3RkZXJyLCAiRXZlcnl0aGluZyB1cC10by1kYXRlXG4iKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Nob3J0bG9nLmMgYi9idWlsdGluL3Nob3J0bG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxNmNmMwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vc2hvcnRsb2cuYwpAQCAtMCwwICsxLDM1MyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgIm1haWxtYXAuaCIKKyNpbmNsdWRlICJzaG9ydGxvZy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBzaG9ydGxvZ191c2FnZVtdID0geworCU5fKCJnaXQgc2hvcnRsb2cgWy1uXSBbLXNdIFstZV0gWy13XSBbcmV2LW9wdHNdIFstLV0gWzxjb21taXQtaWQ+Li4uIF0iKSwKKwkiIiwKKwlOXygiW3Jldi1vcHRzXSBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfYnlfbnVtYmVyKGNvbnN0IHZvaWQgKmExLCBjb25zdCB2b2lkICphMikKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaTEgPSBhMSwgKmkyID0gYTI7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsMSA9IGkxLT51dGlsLCAqbDIgPSBpMi0+dXRpbDsKKworCWlmIChsMS0+bnIgPCBsMi0+bnIpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGwxLT5uciA9PSBsMi0+bnIpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfb25lX3JlY29yZChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm9uZWxpbmUpCit7CisJY29uc3QgY2hhciAqZG90MyA9IGxvZy0+Y29tbW9uX3JlcG9fcHJlZml4OworCWNoYXIgKmJ1ZmZlciwgKnA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJY2hhciBuYW1lYnVmWzEwMjRdOworCWNoYXIgZW1haWxidWZbMTAyNF07CisJc2l6ZV90IGxlbjsKKwljb25zdCBjaGFyICplb2w7CisJY29uc3QgY2hhciAqYm9lbWFpbCwgKmVvZW1haWw7CisJc3RydWN0IHN0cmJ1ZiBzdWJqZWN0ID0gU1RSQlVGX0lOSVQ7CisKKwlib2VtYWlsID0gc3RyY2hyKGF1dGhvciwgJzwnKTsKKwlpZiAoIWJvZW1haWwpCisJCXJldHVybjsKKwllb2VtYWlsID0gc3RyY2hyKGJvZW1haWwsICc+Jyk7CisJaWYgKCFlb2VtYWlsKQorCQlyZXR1cm47CisKKwkvKiBjb3B5IGF1dGhvciBuYW1lIHRvIG5hbWVidWYsIHRvIHN1cHBvcnQgbWF0Y2hpbmcgb24gYm90aCBuYW1lIGFuZCBlbWFpbCAqLworCW1lbWNweShuYW1lYnVmLCBhdXRob3IsIGJvZW1haWwgLSBhdXRob3IpOworCWxlbiA9IGJvZW1haWwgLSBhdXRob3I7CisJd2hpbGUgKGxlbiA+IDAgJiYgaXNzcGFjZShuYW1lYnVmW2xlbi0xXSkpCisJCWxlbi0tOworCW5hbWVidWZbbGVuXSA9IDA7CisKKwkvKiBjb3B5IGVtYWlsIG5hbWUgdG8gZW1haWxidWYsIHRvIGFsbG93IGVtYWlsIHJlcGxhY2VtZW50IGFzIHdlbGwgKi8KKwltZW1jcHkoZW1haWxidWYsIGJvZW1haWwrMSwgZW9lbWFpbCAtIGJvZW1haWwpOworCWVtYWlsYnVmW2VvZW1haWwgLSBib2VtYWlsIC0gMV0gPSAwOworCisJaWYgKCFtYXBfdXNlcigmbG9nLT5tYWlsbWFwLCBlbWFpbGJ1Ziwgc2l6ZW9mKGVtYWlsYnVmKSwgbmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpKSkgeworCQl3aGlsZSAoYXV0aG9yIDwgYm9lbWFpbCAmJiBpc3NwYWNlKCphdXRob3IpKQorCQkJYXV0aG9yKys7CisJCWZvciAobGVuID0gMDsKKwkJICAgICBsZW4gPCBzaXplb2YobmFtZWJ1ZikgLSAxICYmIGF1dGhvciArIGxlbiA8IGJvZW1haWw7CisJCSAgICAgbGVuKyspCisJCQluYW1lYnVmW2xlbl0gPSBhdXRob3JbbGVuXTsKKwkJd2hpbGUgKDAgPCBsZW4gJiYgaXNzcGFjZShuYW1lYnVmW2xlbi0xXSkpCisJCQlsZW4tLTsKKwkJbmFtZWJ1ZltsZW5dID0gJ1wwJzsKKwl9CisJZWxzZQorCQlsZW4gPSBzdHJsZW4obmFtZWJ1Zik7CisKKwlpZiAobG9nLT5lbWFpbCkgeworCQlzaXplX3Qgcm9vbSA9IHNpemVvZihuYW1lYnVmKSAtIGxlbiAtIDE7CisJCWludCBtYWlsbGVuID0gc3RybGVuKGVtYWlsYnVmKTsKKwkJc25wcmludGYobmFtZWJ1ZiArIGxlbiwgcm9vbSwgIiA8JS4qcz4iLCBtYWlsbGVuLCBlbWFpbGJ1Zik7CisJfQorCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmbG9nLT5saXN0LCBuYW1lYnVmKTsKKwlpZiAoaXRlbS0+dXRpbCA9PSBOVUxMKQorCQlpdGVtLT51dGlsID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CisKKwkvKiBTa2lwIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UsIGluY2x1ZGluZyBhbnkgYmxhbmsgbGluZXMuICovCisJd2hpbGUgKCpvbmVsaW5lICYmIGlzc3BhY2UoKm9uZWxpbmUpKQorCQlvbmVsaW5lKys7CisJZW9sID0gc3RyY2hyKG9uZWxpbmUsICdcbicpOworCWlmICghZW9sKQorCQllb2wgPSBvbmVsaW5lICsgc3RybGVuKG9uZWxpbmUpOworCWlmICghcHJlZml4Y21wKG9uZWxpbmUsICJbUEFUQ0giKSkgeworCQljaGFyICplb2IgPSBzdHJjaHIob25lbGluZSwgJ10nKTsKKwkJaWYgKGVvYiAmJiAoIWVvbCB8fCBlb2IgPCBlb2wpKQorCQkJb25lbGluZSA9IGVvYiArIDE7CisJfQorCXdoaWxlICgqb25lbGluZSAmJiBpc3NwYWNlKCpvbmVsaW5lKSAmJiAqb25lbGluZSAhPSAnXG4nKQorCQlvbmVsaW5lKys7CisJZm9ybWF0X3N1YmplY3QoJnN1YmplY3QsIG9uZWxpbmUsICIgIik7CisJYnVmZmVyID0gc3RyYnVmX2RldGFjaCgmc3ViamVjdCwgTlVMTCk7CisKKwlpZiAoZG90MykgeworCQlpbnQgZG90M2xlbiA9IHN0cmxlbihkb3QzKTsKKwkJaWYgKGRvdDNsZW4gPiA1KSB7CisJCQl3aGlsZSAoKHAgPSBzdHJzdHIoYnVmZmVyLCBkb3QzKSkgIT0gTlVMTCkgeworCQkJCWludCB0YWlsbGVuID0gc3RybGVuKHApIC0gZG90M2xlbjsKKwkJCQltZW1jcHkocCwgIi8uLi4vIiwgNSk7CisJCQkJbWVtbW92ZShwICsgNSwgcCArIGRvdDNsZW4sIHRhaWxsZW4gKyAxKTsKKwkJCX0KKwkJfQorCX0KKworCXN0cmluZ19saXN0X2FwcGVuZChpdGVtLT51dGlsLCBidWZmZXIpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2Zyb21fc3RkaW4oc3RydWN0IHNob3J0bG9nICpsb2cpCit7CisJY2hhciBhdXRob3JbMTAyNF0sIG9uZWxpbmVbMTAyNF07CisKKwl3aGlsZSAoZmdldHMoYXV0aG9yLCBzaXplb2YoYXV0aG9yKSwgc3RkaW4pICE9IE5VTEwpIHsKKwkJaWYgKCEoYXV0aG9yWzBdID09ICdBJyB8fCBhdXRob3JbMF0gPT0gJ2EnKSB8fAorCQkgICAgcHJlZml4Y21wKGF1dGhvciArIDEsICJ1dGhvcjogIikpCisJCQljb250aW51ZTsKKwkJd2hpbGUgKGZnZXRzKG9uZWxpbmUsIHNpemVvZihvbmVsaW5lKSwgc3RkaW4pICYmCisJCSAgICAgICBvbmVsaW5lWzBdICE9ICdcbicpCisJCQk7IC8qIGRpc2NhcmQgaGVhZGVycyAqLworCQl3aGlsZSAoZmdldHMob25lbGluZSwgc2l6ZW9mKG9uZWxpbmUpLCBzdGRpbikgJiYKKwkJICAgICAgIG9uZWxpbmVbMF0gPT0gJ1xuJykKKwkJCTsgLyogZGlzY2FyZCBibGFua3MgKi8KKwkJaW5zZXJ0X29uZV9yZWNvcmQobG9nLCBhdXRob3IgKyA4LCBvbmVsaW5lKTsKKwl9Cit9CisKK3ZvaWQgc2hvcnRsb2dfYWRkX2NvbW1pdChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWNvbnN0IGNoYXIgKmF1dGhvciA9IE5VTEwsICpidWZmZXI7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVmYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9SQVcsIGNvbW1pdCwgJmJ1Zik7CisJYnVmZmVyID0gYnVmLmJ1ZjsKKwl3aGlsZSAoKmJ1ZmZlciAmJiAqYnVmZmVyICE9ICdcbicpIHsKKwkJY29uc3QgY2hhciAqZW9sID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisKKwkJaWYgKGVvbCA9PSBOVUxMKQorCQkJZW9sID0gYnVmZmVyICsgc3RybGVuKGJ1ZmZlcik7CisJCWVsc2UKKwkJCWVvbCsrOworCisJCWlmICghcHJlZml4Y21wKGJ1ZmZlciwgImF1dGhvciAiKSkKKwkJCWF1dGhvciA9IGJ1ZmZlciArIDc7CisJCWJ1ZmZlciA9IGVvbDsKKwl9CisJaWYgKCFhdXRob3IpCisJCWRpZShfKCJNaXNzaW5nIGF1dGhvcjogJXMiKSwKKwkJICAgIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwlpZiAobG9nLT51c2VyX2Zvcm1hdCkgeworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQljdHguZm10ID0gQ01JVF9GTVRfVVNFUkZPUk1BVDsKKwkJY3R4LmFiYnJldiA9IGxvZy0+YWJicmV2OworCQljdHguc3ViamVjdCA9ICIiOworCQljdHguYWZ0ZXJfc3ViamVjdCA9ICIiOworCQljdHguZGF0ZV9tb2RlID0gREFURV9OT1JNQUw7CisJCXByZXR0eV9wcmludF9jb21taXQoJmN0eCwgY29tbWl0LCAmdWZidWYpOworCQlidWZmZXIgPSB1ZmJ1Zi5idWY7CisJfSBlbHNlIGlmICgqYnVmZmVyKSB7CisJCWJ1ZmZlcisrOworCX0KKwlpbnNlcnRfb25lX3JlY29yZChsb2csIGF1dGhvciwgISpidWZmZXIgPyAiPG5vbmU+IiA6IGJ1ZmZlcik7CisJc3RyYnVmX3JlbGVhc2UoJnVmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2Zyb21fcmV2KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3Qgc2hvcnRsb2cgKmxvZykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihyZXYpKSAhPSBOVUxMKQorCQlzaG9ydGxvZ19hZGRfY29tbWl0KGxvZywgY29tbWl0KTsKK30KKworc3RhdGljIGludCBwYXJzZV91aW50KGNoYXIgY29uc3QgKiphcmcsIGludCBjb21tYSwgaW50IGRlZnZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHVsOworCWludCByZXQ7CisJY2hhciAqZW5kcDsKKworCXVsID0gc3RydG91bCgqYXJnLCAmZW5kcCwgMTApOworCWlmICgqZW5kcCAmJiAqZW5kcCAhPSBjb21tYSkKKwkJcmV0dXJuIC0xOworCWlmICh1bCA+IElOVF9NQVgpCisJCXJldHVybiAtMTsKKwlyZXQgPSAqYXJnID09IGVuZHAgPyBkZWZ2YWwgOiAoaW50KXVsOworCSphcmcgPSAqZW5kcCA/IGVuZHAgKyAxIDogZW5kcDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciB3cmFwX2FyZ191c2FnZVtdID0gIi13Wzx3aWR0aD5bLDxpbmRlbnQxPlssPGluZGVudDI+XV1dIjsKKyNkZWZpbmUgREVGQVVMVF9XUkFQTEVOIDc2CisjZGVmaW5lIERFRkFVTFRfSU5ERU5UMSA2CisjZGVmaW5lIERFRkFVTFRfSU5ERU5UMiA5CisKK3N0YXRpYyBpbnQgcGFyc2Vfd3JhcF9hcmdzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHNob3J0bG9nICpsb2cgPSBvcHQtPnZhbHVlOworCisJbG9nLT53cmFwX2xpbmVzID0gIXVuc2V0OworCWlmICh1bnNldCkKKwkJcmV0dXJuIDA7CisJaWYgKCFhcmcpIHsKKwkJbG9nLT53cmFwID0gREVGQVVMVF9XUkFQTEVOOworCQlsb2ctPmluMSA9IERFRkFVTFRfSU5ERU5UMTsKKwkJbG9nLT5pbjIgPSBERUZBVUxUX0lOREVOVDI7CisJCXJldHVybiAwOworCX0KKworCWxvZy0+d3JhcCA9IHBhcnNlX3VpbnQoJmFyZywgJywnLCBERUZBVUxUX1dSQVBMRU4pOworCWxvZy0+aW4xID0gcGFyc2VfdWludCgmYXJnLCAnLCcsIERFRkFVTFRfSU5ERU5UMSk7CisJbG9nLT5pbjIgPSBwYXJzZV91aW50KCZhcmcsICdcMCcsIERFRkFVTFRfSU5ERU5UMik7CisJaWYgKGxvZy0+d3JhcCA8IDAgfHwgbG9nLT5pbjEgPCAwIHx8IGxvZy0+aW4yIDwgMCkKKwkJcmV0dXJuIGVycm9yKHdyYXBfYXJnX3VzYWdlKTsKKwlpZiAobG9nLT53cmFwICYmCisJICAgICgobG9nLT5pbjEgJiYgbG9nLT53cmFwIDw9IGxvZy0+aW4xKSB8fAorCSAgICAgKGxvZy0+aW4yICYmIGxvZy0+d3JhcCA8PSBsb2ctPmluMikpKQorCQlyZXR1cm4gZXJyb3Iod3JhcF9hcmdfdXNhZ2UpOworCXJldHVybiAwOworfQorCit2b2lkIHNob3J0bG9nX2luaXQoc3RydWN0IHNob3J0bG9nICpsb2cpCit7CisJbWVtc2V0KGxvZywgMCwgc2l6ZW9mKCpsb2cpKTsKKworCXJlYWRfbWFpbG1hcCgmbG9nLT5tYWlsbWFwLCAmbG9nLT5jb21tb25fcmVwb19wcmVmaXgpOworCisJbG9nLT5saXN0LnN0cmR1cF9zdHJpbmdzID0gMTsKKwlsb2ctPndyYXAgPSBERUZBVUxUX1dSQVBMRU47CisJbG9nLT5pbjEgPSBERUZBVUxUX0lOREVOVDE7CisJbG9nLT5pbjIgPSBERUZBVUxUX0lOREVOVDI7Cit9CisKK2ludCBjbWRfc2hvcnRsb2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RhdGljIHN0cnVjdCBzaG9ydGxvZyBsb2c7CisJc3RhdGljIHN0cnVjdCByZXZfaW5mbyByZXY7CisJaW50IG5vbmdpdCA9ICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeTsKKworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0xFQU4oJ24nLCAibnVtYmVyZWQiLCAmbG9nLnNvcnRfYnlfbnVtYmVyLAorCQkJICAgIE5fKCJzb3J0IG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjb21taXRzIHBlciBhdXRob3IiKSksCisJCU9QVF9CT09MRUFOKCdzJywgInN1bW1hcnkiLCAmbG9nLnN1bW1hcnksCisJCQkgICAgTl8oIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IikpLAorCQlPUFRfQk9PTEVBTignZScsICJlbWFpbCIsICZsb2cuZW1haWwsCisJCQkgICAgTl8oIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAndycsIE5VTEwsICZsb2csIE5fKCJ3WyxpMVssaTJdXSIpLAorCQkJTl8oIkxpbmV3cmFwIG91dHB1dCIpLCBQQVJTRV9PUFRfT1BUQVJHLCAmcGFyc2Vfd3JhcF9hcmdzIH0sCisJCU9QVF9FTkQoKSwKKwl9OworCisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCBjdHg7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJc2hvcnRsb2dfaW5pdCgmbG9nKTsKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCisJZm9yICg7OykgeworCQlzd2l0Y2ggKHBhcnNlX29wdGlvbnNfc3RlcCgmY3R4LCBvcHRpb25zLCBzaG9ydGxvZ191c2FnZSkpIHsKKwkJY2FzZSBQQVJTRV9PUFRfSEVMUDoKKwkJCWV4aXQoMTI5KTsKKwkJY2FzZSBQQVJTRV9PUFRfRE9ORToKKwkJCWdvdG8gcGFyc2VfZG9uZTsKKwkJfQorCQlwYXJzZV9yZXZpc2lvbl9vcHQoJnJldiwgJmN0eCwgb3B0aW9ucywgc2hvcnRsb2dfdXNhZ2UpOworCX0KK3BhcnNlX2RvbmU6CisJYXJnYyA9IHBhcnNlX29wdGlvbnNfZW5kKCZjdHgpOworCisJaWYgKHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKSAhPSAxKSB7CisJCWVycm9yKF8oInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiKSwgYXJndlsxXSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhzaG9ydGxvZ191c2FnZSwgb3B0aW9ucyk7CisJfQorCisJbG9nLnVzZXJfZm9ybWF0ID0gcmV2LmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfVVNFUkZPUk1BVDsKKwlsb2cuYWJicmV2ID0gcmV2LmFiYnJldjsKKworCS8qIGFzc3VtZSBIRUFEIGlmIGZyb20gYSB0dHkgKi8KKwlpZiAoIW5vbmdpdCAmJiAhcmV2LnBlbmRpbmcubnIgJiYgaXNhdHR5KDApKQorCQlhZGRfaGVhZF90b19wZW5kaW5nKCZyZXYpOworCWlmIChyZXYucGVuZGluZy5uciA9PSAwKSB7CisJCWlmIChpc2F0dHkoMCkpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIpKTsKKwkJcmVhZF9mcm9tX3N0ZGluKCZsb2cpOworCX0KKwllbHNlCisJCWdldF9mcm9tX3JldigmcmV2LCAmbG9nKTsKKworCXNob3J0bG9nX291dHB1dCgmbG9nKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX3dyYXBwZWRfc2hvcnRsb2dfbXNnKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHNob3J0bG9nICpsb2cpCit7CisJaW50IGNvbCA9IHN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KHNiLCBzLCBsb2ctPmluMSwgbG9nLT5pbjIsIGxvZy0+d3JhcCk7CisJaWYgKGNvbCAhPSBsb2ctPndyYXApCisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7Cit9CisKK3ZvaWQgc2hvcnRsb2dfb3V0cHV0KHN0cnVjdCBzaG9ydGxvZyAqbG9nKQoreworCWludCBpLCBqOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChsb2ctPnNvcnRfYnlfbnVtYmVyKQorCQlxc29ydChsb2ctPmxpc3QuaXRlbXMsIGxvZy0+bGlzdC5uciwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtKSwKKwkJCWNvbXBhcmVfYnlfbnVtYmVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgbG9nLT5saXN0Lm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0ICpvbmVsaW5lcyA9IGxvZy0+bGlzdC5pdGVtc1tpXS51dGlsOworCisJCWlmIChsb2ctPnN1bW1hcnkpIHsKKwkJCXByaW50ZigiJTZkXHQlc1xuIiwgb25lbGluZXMtPm5yLCBsb2ctPmxpc3QuaXRlbXNbaV0uc3RyaW5nKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiJXMgKCVkKTpcbiIsIGxvZy0+bGlzdC5pdGVtc1tpXS5zdHJpbmcsIG9uZWxpbmVzLT5ucik7CisJCQlmb3IgKGogPSBvbmVsaW5lcy0+bnIgLSAxOyBqID49IDA7IGotLSkgeworCQkJCWNvbnN0IGNoYXIgKm1zZyA9IG9uZWxpbmVzLT5pdGVtc1tqXS5zdHJpbmc7CisKKwkJCQlpZiAobG9nLT53cmFwX2xpbmVzKSB7CisJCQkJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQkJCQlhZGRfd3JhcHBlZF9zaG9ydGxvZ19tc2coJnNiLCBtc2csIGxvZyk7CisJCQkJCWZ3cml0ZShzYi5idWYsIHNiLmxlbiwgMSwgc3Rkb3V0KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlwcmludGYoIiAgICAgICVzXG4iLCBtc2cpOworCQkJfQorCQkJcHV0Y2hhcignXG4nKTsKKwkJfQorCisJCW9uZWxpbmVzLT5zdHJkdXBfc3RyaW5ncyA9IDE7CisJCXN0cmluZ19saXN0X2NsZWFyKG9uZWxpbmVzLCAwKTsKKwkJZnJlZShvbmVsaW5lcyk7CisJCWxvZy0+bGlzdC5pdGVtc1tpXS51dGlsID0gTlVMTDsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWxvZy0+bGlzdC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxvZy0+bGlzdCwgMSk7CisJY2xlYXJfbWFpbG1hcCgmbG9nLT5tYWlsbWFwKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vc2hvdy1icmFuY2guYyBiL2J1aWx0aW4vc2hvdy1icmFuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjA4ZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zaG93LWJyYW5jaC5jCkBAIC0wLDAgKzEsOTUyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciogc2hvd19icmFuY2hfdXNhZ2VbXSA9IHsKKyAgICBOXygiZ2l0IHNob3ctYnJhbmNoIFstYXwtLWFsbF0gWy1yfC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl0gWy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdIFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV0gWy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIpLAorICAgIE5fKCJnaXQgc2hvdy1icmFuY2ggKC1nfC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIiksCisgICAgTlVMTAorfTsKKworc3RhdGljIGludCBzaG93YnJhbmNoX3VzZV9jb2xvciA9IC0xOworCitzdGF0aWMgaW50IGRlZmF1bHRfbnVtOworc3RhdGljIGludCBkZWZhdWx0X2FsbG9jOworc3RhdGljIGNvbnN0IGNoYXIgKipkZWZhdWx0X2FyZzsKKworI2RlZmluZSBVTklOVEVSRVNUSU5HCTAxCisKKyNkZWZpbmUgUkVWX1NISUZUCSAyCisjZGVmaW5lIE1BWF9SRVZTCShGTEFHX0JJVFMgLSBSRVZfU0hJRlQpIC8qIHNob3VsZCBub3QgZXhjZWVkIGJpdHNfcGVyX2ludCAtIFJFVl9TSElGVCAqLworCisjZGVmaW5lIERFRkFVTFRfUkVGTE9HCTQKKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9jb2RlKGludCBpZHgpCit7CisJaWYgKHdhbnRfY29sb3Ioc2hvd2JyYW5jaF91c2VfY29sb3IpKQorCQlyZXR1cm4gY29sdW1uX2NvbG9yc19hbnNpW2lkeCAlIGNvbHVtbl9jb2xvcnNfYW5zaV9tYXhdOworCXJldHVybiAiIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9yZXNldF9jb2RlKHZvaWQpCit7CisJaWYgKHdhbnRfY29sb3Ioc2hvd2JyYW5jaF91c2VfY29sb3IpKQorCQlyZXR1cm4gR0lUX0NPTE9SX1JFU0VUOworCXJldHVybiAiIjsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmludGVyZXN0aW5nKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gY29tbWl0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKnBvcF9vbmVfY29tbWl0KHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3RfcCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OworCWxpc3QgPSAqbGlzdF9wOworCWNvbW1pdCA9IGxpc3QtPml0ZW07CisJKmxpc3RfcCA9IGxpc3QtPm5leHQ7CisJZnJlZShsaXN0KTsKKwlyZXR1cm4gY29tbWl0OworfQorCitzdHJ1Y3QgY29tbWl0X25hbWUgeworCWNvbnN0IGNoYXIgKmhlYWRfbmFtZTsgLyogd2hpY2ggaGVhZCdzIGFuY2VzdG9yPyAqLworCWludCBnZW5lcmF0aW9uOyAvKiBob3cgbWFueSBwYXJlbnRzIGF3YXkgZnJvbSBoZWFkX25hbWUgKi8KK307CisKKy8qIE5hbWUgdGhlIGNvbW1pdCBhcyBudGggZ2VuZXJhdGlvbiBhbmNlc3RvciBvZiBoZWFkX25hbWU7CisgKiB3ZSBjb3VudCBvbmx5IHRoZSBmaXJzdC1wYXJlbnQgcmVsYXRpb25zaGlwIGZvciBuYW1pbmcgcHVycG9zZXMuCisgKi8KK3N0YXRpYyB2b2lkIG5hbWVfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqaGVhZF9uYW1lLCBpbnQgbnRoKQoreworCXN0cnVjdCBjb21taXRfbmFtZSAqbmFtZTsKKwlpZiAoIWNvbW1pdC0+dXRpbCkKKwkJY29tbWl0LT51dGlsID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9uYW1lKSk7CisJbmFtZSA9IGNvbW1pdC0+dXRpbDsKKwluYW1lLT5oZWFkX25hbWUgPSBoZWFkX25hbWU7CisJbmFtZS0+Z2VuZXJhdGlvbiA9IG50aDsKK30KKworLyogUGFyZW50IGlzIHRoZSBmaXJzdCBwYXJlbnQgb2YgdGhlIGNvbW1pdC4gIFdlIG1heSBuYW1lIGl0CisgKiBhcyAobisxKXRoIGdlbmVyYXRpb24gYW5jZXN0b3Igb2YgdGhlIHNhbWUgaGVhZF9uYW1lIGFzCisgKiBjb21taXQgaXMgbnRoIGdlbmVyYXRpb24gYW5jZXN0b3Igb2YsIGlmIHRoYXQgZ2VuZXJhdGlvbgorICogbnVtYmVyIGlzIGJldHRlciB0aGFuIHRoZSBuYW1lIGl0IGFscmVhZHkgaGFzLgorICovCitzdGF0aWMgdm9pZCBuYW1lX3BhcmVudChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXQgKnBhcmVudCkKK3sKKwlzdHJ1Y3QgY29tbWl0X25hbWUgKmNvbW1pdF9uYW1lID0gY29tbWl0LT51dGlsOworCXN0cnVjdCBjb21taXRfbmFtZSAqcGFyZW50X25hbWUgPSBwYXJlbnQtPnV0aWw7CisJaWYgKCFjb21taXRfbmFtZSkKKwkJcmV0dXJuOworCWlmICghcGFyZW50X25hbWUgfHwKKwkgICAgY29tbWl0X25hbWUtPmdlbmVyYXRpb24gKyAxIDwgcGFyZW50X25hbWUtPmdlbmVyYXRpb24pCisJCW5hbWVfY29tbWl0KHBhcmVudCwgY29tbWl0X25hbWUtPmhlYWRfbmFtZSwKKwkJCSAgICBjb21taXRfbmFtZS0+Z2VuZXJhdGlvbiArIDEpOworfQorCitzdGF0aWMgaW50IG5hbWVfZmlyc3RfcGFyZW50X2NoYWluKHN0cnVjdCBjb21taXQgKmMpCit7CisJaW50IGkgPSAwOworCXdoaWxlIChjKSB7CisJCXN0cnVjdCBjb21taXQgKnA7CisJCWlmICghYy0+dXRpbCkKKwkJCWJyZWFrOworCQlpZiAoIWMtPnBhcmVudHMpCisJCQlicmVhazsKKwkJcCA9IGMtPnBhcmVudHMtPml0ZW07CisJCWlmICghcC0+dXRpbCkgeworCQkJbmFtZV9wYXJlbnQoYywgcCk7CisJCQlpKys7CisJCX0KKwkJZWxzZQorCQkJYnJlYWs7CisJCWMgPSBwOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQgbmFtZV9jb21taXRzKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCSBzdHJ1Y3QgY29tbWl0ICoqcmV2LAorCQkJIGNoYXIgKipyZWZfbmFtZSwKKwkJCSBpbnQgbnVtX3JldikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNsOworCXN0cnVjdCBjb21taXQgKmM7CisJaW50IGk7CisKKwkvKiBGaXJzdCBnaXZlIG5hbWVzIHRvIHRoZSBnaXZlbiBoZWFkcyAqLworCWZvciAoY2wgPSBsaXN0OyBjbDsgY2wgPSBjbC0+bmV4dCkgeworCQljID0gY2wtPml0ZW07CisJCWlmIChjLT51dGlsKQorCQkJY29udGludWU7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fcmV2OyBpKyspIHsKKwkJCWlmIChyZXZbaV0gPT0gYykgeworCQkJCW5hbWVfY29tbWl0KGMsIHJlZl9uYW1lW2ldLCAwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qIFRoZW4gY29tbWl0cyBvbiB0aGUgZmlyc3QgcGFyZW50IGFuY2VzdHJ5IGNoYWluICovCisJZG8geworCQlpID0gMDsKKwkJZm9yIChjbCA9IGxpc3Q7IGNsOyBjbCA9IGNsLT5uZXh0KSB7CisJCQlpICs9IG5hbWVfZmlyc3RfcGFyZW50X2NoYWluKGNsLT5pdGVtKTsKKwkJfQorCX0gd2hpbGUgKGkpOworCisJLyogRmluYWxseSwgYW55IHVubmFtZWQgY29tbWl0cyAqLworCWRvIHsKKwkJaSA9IDA7CisJCWZvciAoY2wgPSBsaXN0OyBjbDsgY2wgPSBjbC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQkJc3RydWN0IGNvbW1pdF9uYW1lICpuOworCQkJaW50IG50aDsKKwkJCWMgPSBjbC0+aXRlbTsKKwkJCWlmICghYy0+dXRpbCkKKwkJCQljb250aW51ZTsKKwkJCW4gPSBjLT51dGlsOworCQkJcGFyZW50cyA9IGMtPnBhcmVudHM7CisJCQludGggPSAwOworCQkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKwkJCQljaGFyIG5ld25hbWVbMTAwMF0sICplbjsKKwkJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJCQludGgrKzsKKwkJCQlpZiAocC0+dXRpbCkKKwkJCQkJY29udGludWU7CisJCQkJZW4gPSBuZXduYW1lOworCQkJCXN3aXRjaCAobi0+Z2VuZXJhdGlvbikgeworCQkJCWNhc2UgMDoKKwkJCQkJZW4gKz0gc3ByaW50ZihlbiwgIiVzIiwgbi0+aGVhZF9uYW1lKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOgorCQkJCQllbiArPSBzcHJpbnRmKGVuLCAiJXNeIiwgbi0+aGVhZF9uYW1lKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZW4gKz0gc3ByaW50ZihlbiwgIiVzfiVkIiwKKwkJCQkJCW4tPmhlYWRfbmFtZSwgbi0+Z2VuZXJhdGlvbik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAobnRoID09IDEpCisJCQkJCWVuICs9IHNwcmludGYoZW4sICJeIik7CisJCQkJZWxzZQorCQkJCQllbiArPSBzcHJpbnRmKGVuLCAiXiVkIiwgbnRoKTsKKwkJCQluYW1lX2NvbW1pdChwLCB4c3RyZHVwKG5ld25hbWUpLCAwKTsKKwkJCQlpKys7CisJCQkJbmFtZV9maXJzdF9wYXJlbnRfY2hhaW4ocCk7CisJCQl9CisJCX0KKwl9IHdoaWxlIChpKTsKK30KKworc3RhdGljIGludCBtYXJrX3NlZW4oc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKipzZWVuX3ApCit7CisJaWYgKCFjb21taXQtPm9iamVjdC5mbGFncykgeworCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBzZWVuX3ApOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGpvaW5fcmV2cyhzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0X3AsCisJCSAgICAgIHN0cnVjdCBjb21taXRfbGlzdCAqKnNlZW5fcCwKKwkJICAgICAgaW50IG51bV9yZXYsIGludCBleHRyYSkKK3sKKwlpbnQgYWxsX21hc2sgPSAoKDF1IDw8IChSRVZfU0hJRlQgKyBudW1fcmV2KSkgLSAxKTsKKwlpbnQgYWxsX3JldnMgPSBhbGxfbWFzayAmIH4oKDF1IDw8IFJFVl9TSElGVCkgLSAxKTsKKworCXdoaWxlICgqbGlzdF9wKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwkJaW50IHN0aWxsX2ludGVyZXN0aW5nID0gISFpbnRlcmVzdGluZygqbGlzdF9wKTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX29uZV9jb21taXQobGlzdF9wKTsKKwkJaW50IGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBhbGxfbWFzazsKKworCQlpZiAoIXN0aWxsX2ludGVyZXN0aW5nICYmIGV4dHJhIDw9IDApCisJCQlicmVhazsKKworCQltYXJrX3NlZW4oY29tbWl0LCBzZWVuX3ApOworCQlpZiAoKGZsYWdzICYgYWxsX3JldnMpID09IGFsbF9yZXZzKQorCQkJZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKworCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudHMtPml0ZW07CisJCQlpbnQgdGhpc19mbGFnID0gcC0+b2JqZWN0LmZsYWdzOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCQlpZiAoKHRoaXNfZmxhZyAmIGZsYWdzKSA9PSBmbGFncykKKwkJCQljb250aW51ZTsKKwkJCWlmICghcC0+b2JqZWN0LnBhcnNlZCkKKwkJCQlwYXJzZV9jb21taXQocCk7CisJCQlpZiAobWFya19zZWVuKHAsIHNlZW5fcCkgJiYgIXN0aWxsX2ludGVyZXN0aW5nKQorCQkJCWV4dHJhLS07CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gZmxhZ3M7CisJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShwLCBsaXN0X3ApOworCQl9CisJfQorCisJLyoKKwkgKiBQb3N0cHJvY2VzcyB0byBjb21wbGV0ZSB3ZWxsLXBvaXNvbmluZy4KKwkgKgorCSAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbGwgdGhlIGNvbW1pdHMgd2UgaGF2ZSBzZWVuIGluCisJICogc2Vlbl9wIGxpc3QuICBNYXJrIGFueXRoaW5nIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbQorCSAqIHVuaW50ZXJlc3RpbmcgY29tbWl0cyBub3QgaW50ZXJlc3RpbmcuCisJICovCisJZm9yICg7OykgeworCQlpbnQgY2hhbmdlZCA9IDA7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqczsKKwkJZm9yIChzID0gKnNlZW5fcDsgczsgcyA9IHMtPm5leHQpIHsKKwkJCXN0cnVjdCBjb21taXQgKmMgPSBzLT5pdGVtOworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJCQlpZiAoKChjLT5vYmplY3QuZmxhZ3MgJiBhbGxfcmV2cykgIT0gYWxsX3JldnMpICYmCisJCQkgICAgIShjLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogVGhlIGN1cnJlbnQgY29tbWl0IGlzIGVpdGhlciBhIG1lcmdlIGJhc2Ugb3IKKwkJCSAqIGFscmVhZHkgdW5pbnRlcmVzdGluZyBvbmUuICBNYXJrIGl0cyBwYXJlbnRzCisJCQkgKiBhcyB1bmludGVyZXN0aW5nIGNvbW1pdHMgX29ubHlfIGlmIHRoZXkgYXJlCisJCQkgKiBhbHJlYWR5IHBhcnNlZC4gIE5vIHJlYXNvbiB0byBmaW5kIG5ldyBvbmVzCisJCQkgKiBoZXJlLgorCQkJICovCisJCQlwYXJlbnRzID0gYy0+cGFyZW50czsKKwkJCXdoaWxlIChwYXJlbnRzKSB7CisJCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudHMtPml0ZW07CisJCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCQkJaWYgKCEocC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpIHsKKwkJCQkJcC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQkJCWNoYW5nZWQgPSAxOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoIWNoYW5nZWQpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb25lX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBub19uYW1lKQoreworCXN0cnVjdCBzdHJidWYgcHJldHR5ID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcHJldHR5X3N0ciA9ICIodW5hdmFpbGFibGUpIjsKKwlzdHJ1Y3QgY29tbWl0X25hbWUgKm5hbWUgPSBjb21taXQtPnV0aWw7CisKKwlpZiAoY29tbWl0LT5vYmplY3QucGFyc2VkKSB7CisJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJnByZXR0eSk7CisJCXByZXR0eV9zdHIgPSBwcmV0dHkuYnVmOworCX0KKwlpZiAoIXByZWZpeGNtcChwcmV0dHlfc3RyLCAiW1BBVENIXSAiKSkKKwkJcHJldHR5X3N0ciArPSA4OworCisJaWYgKCFub19uYW1lKSB7CisJCWlmIChuYW1lICYmIG5hbWUtPmhlYWRfbmFtZSkgeworCQkJcHJpbnRmKCJbJXMiLCBuYW1lLT5oZWFkX25hbWUpOworCQkJaWYgKG5hbWUtPmdlbmVyYXRpb24pIHsKKwkJCQlpZiAobmFtZS0+Z2VuZXJhdGlvbiA9PSAxKQorCQkJCQlwcmludGYoIl4iKTsKKwkJCQllbHNlCisJCQkJCXByaW50ZigifiVkIiwgbmFtZS0+Z2VuZXJhdGlvbik7CisJCQl9CisJCQlwcmludGYoIl0gIik7CisJCX0KKwkJZWxzZQorCQkJcHJpbnRmKCJbJXNdICIsCisJCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsCisJCQkJCQkgIERFRkFVTFRfQUJCUkVWKSk7CisJfQorCXB1dHMocHJldHR5X3N0cik7CisJc3RyYnVmX3JlbGVhc2UoJnByZXR0eSk7Cit9CisKK3N0YXRpYyBjaGFyICpyZWZfbmFtZVtNQVhfUkVWUyArIDFdOworc3RhdGljIGludCByZWZfbmFtZV9jbnQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX2RpZ2l0X3ByZWZpeChjb25zdCBjaGFyICpzLCBpbnQgKnYpCit7CisJY29uc3QgY2hhciAqcDsKKwlpbnQgdmVyOworCWNoYXIgY2g7CisKKwlmb3IgKHAgPSBzLCB2ZXIgPSAwOworCSAgICAgJzAnIDw9IChjaCA9ICpwKSAmJiBjaCA8PSAnOSc7CisJICAgICBwKyspCisJCXZlciA9IHZlciAqIDEwICsgY2ggLSAnMCc7CisJKnYgPSB2ZXI7CisJcmV0dXJuIHA7Cit9CisKKworc3RhdGljIGludCB2ZXJzaW9uX2NtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCXdoaWxlICgxKSB7CisJCWludCB2YSwgdmI7CisKKwkJYSA9IGZpbmRfZGlnaXRfcHJlZml4KGEsICZ2YSk7CisJCWIgPSBmaW5kX2RpZ2l0X3ByZWZpeChiLCAmdmIpOworCQlpZiAodmEgIT0gdmIpCisJCQlyZXR1cm4gdmEgLSB2YjsKKworCQl3aGlsZSAoMSkgeworCQkJaW50IGNhID0gKmE7CisJCQlpbnQgY2IgPSAqYjsKKwkJCWlmICgnMCcgPD0gY2EgJiYgY2EgPD0gJzknKQorCQkJCWNhID0gMDsKKwkJCWlmICgnMCcgPD0gY2IgJiYgY2IgPD0gJzknKQorCQkJCWNiID0gMDsKKwkJCWlmIChjYSAhPSBjYikKKwkJCQlyZXR1cm4gY2EgLSBjYjsKKwkJCWlmICghY2EpCisJCQkJYnJlYWs7CisJCQlhKys7CisJCQliKys7CisJCX0KKwkJaWYgKCEqYSAmJiAhKmIpCisJCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9yZWZfbmFtZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3QgY2hhciAqIGNvbnN0KmEgPSBhXywgKiBjb25zdCpiID0gYl87CisJcmV0dXJuIHZlcnNpb25fY21wKCphLCAqYik7Cit9CisKK3N0YXRpYyB2b2lkIHNvcnRfcmVmX3JhbmdlKGludCBib3R0b20sIGludCB0b3ApCit7CisJcXNvcnQocmVmX25hbWUgKyBib3R0b20sIHRvcCAtIGJvdHRvbSwgc2l6ZW9mKHJlZl9uYW1lWzBdKSwKKwkgICAgICBjb21wYXJlX3JlZl9uYW1lKTsKK30KKworc3RhdGljIGludCBhcHBlbmRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCSAgICAgIGludCBhbGxvd19kdXBzKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzaGExLCAxKTsKKwlpbnQgaTsKKworCWlmICghY29tbWl0KQorCQlyZXR1cm4gMDsKKworCWlmICghYWxsb3dfZHVwcykgeworCQkvKiBBdm9pZCBhZGRpbmcgdGhlIHNhbWUgdGhpbmcgdHdpY2UgKi8KKwkJZm9yIChpID0gMDsgaSA8IHJlZl9uYW1lX2NudDsgaSsrKQorCQkJaWYgKCFzdHJjbXAocmVmbmFtZSwgcmVmX25hbWVbaV0pKQorCQkJCXJldHVybiAwOworCX0KKwlpZiAoTUFYX1JFVlMgPD0gcmVmX25hbWVfY250KSB7CisJCXdhcm5pbmcoImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWZzIiwKKwkJCXJlZm5hbWUsIE1BWF9SRVZTKTsKKwkJcmV0dXJuIDA7CisJfQorCXJlZl9uYW1lW3JlZl9uYW1lX2NudCsrXSA9IHhzdHJkdXAocmVmbmFtZSk7CisJcmVmX25hbWVbcmVmX25hbWVfY250XSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX2hlYWRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXVuc2lnbmVkIGNoYXIgdG1wWzIwXTsKKwlpbnQgb2ZzID0gMTE7CisJaWYgKHByZWZpeGNtcChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJcmV0dXJuIDA7CisJLyogSWYgYm90aCBoZWFkcy9mb28gYW5kIHRhZ3MvZm9vIGV4aXN0cywgZ2V0X3NoYTEgd291bGQKKwkgKiBnZXQgY29uZnVzZWQuCisJICovCisJaWYgKGdldF9zaGExKHJlZm5hbWUgKyBvZnMsIHRtcCkgfHwgaGFzaGNtcCh0bXAsIHNoYTEpKQorCQlvZnMgPSA1OworCXJldHVybiBhcHBlbmRfcmVmKHJlZm5hbWUgKyBvZnMsIHNoYTEsIDApOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9yZW1vdGVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXVuc2lnbmVkIGNoYXIgdG1wWzIwXTsKKwlpbnQgb2ZzID0gMTM7CisJaWYgKHByZWZpeGNtcChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIpKQorCQlyZXR1cm4gMDsKKwkvKiBJZiBib3RoIGhlYWRzL2ZvbyBhbmQgdGFncy9mb28gZXhpc3RzLCBnZXRfc2hhMSB3b3VsZAorCSAqIGdldCBjb25mdXNlZC4KKwkgKi8KKwlpZiAoZ2V0X3NoYTEocmVmbmFtZSArIG9mcywgdG1wKSB8fCBoYXNoY21wKHRtcCwgc2hhMSkpCisJCW9mcyA9IDU7CisJcmV0dXJuIGFwcGVuZF9yZWYocmVmbmFtZSArIG9mcywgc2hhMSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX3RhZ19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJaWYgKHByZWZpeGNtcChyZWZuYW1lLCAicmVmcy90YWdzLyIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYXBwZW5kX3JlZihyZWZuYW1lICsgNSwgc2hhMSwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICptYXRjaF9yZWZfcGF0dGVybiA9IE5VTEw7CitzdGF0aWMgaW50IG1hdGNoX3JlZl9zbGFzaCA9IDA7CitzdGF0aWMgaW50IGNvdW50X3NsYXNoKGNvbnN0IGNoYXIgKnMpCit7CisJaW50IGNudCA9IDA7CisJd2hpbGUgKCpzKQorCQlpZiAoKnMrKyA9PSAnLycpCisJCQljbnQrKzsKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgaW50IGFwcGVuZF9tYXRjaGluZ19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJLyogd2Ugd2FudCB0byBhbGxvdyBwYXR0ZXJuIGhvbGQvPGFzdGVyaXNrPiB0byBzaG93IGFsbAorCSAqIGJyYW5jaGVzIHVuZGVyIHJlZnMvaGVhZHMvaG9sZC8sIGFuZCB2MC45OS45PyB0byBzaG93CisJICogcmVmcy90YWdzL3YwLjk5LjlhIGFuZCBmcmllbmRzLgorCSAqLworCWNvbnN0IGNoYXIgKnRhaWw7CisJaW50IHNsYXNoID0gY291bnRfc2xhc2gocmVmbmFtZSk7CisJZm9yICh0YWlsID0gcmVmbmFtZTsgKnRhaWwgJiYgbWF0Y2hfcmVmX3NsYXNoIDwgc2xhc2g7ICkKKwkJaWYgKCp0YWlsKysgPT0gJy8nKQorCQkJc2xhc2gtLTsKKwlpZiAoISp0YWlsKQorCQlyZXR1cm4gMDsKKwlpZiAoZm5tYXRjaChtYXRjaF9yZWZfcGF0dGVybiwgdGFpbCwgMCkpCisJCXJldHVybiAwOworCWlmICghcHJlZml4Y21wKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQlyZXR1cm4gYXBwZW5kX2hlYWRfcmVmKHJlZm5hbWUsIHNoYTEsIGZsYWcsIGNiX2RhdGEpOworCWlmICghcHJlZml4Y21wKHJlZm5hbWUsICJyZWZzL3RhZ3MvIikpCisJCXJldHVybiBhcHBlbmRfdGFnX3JlZihyZWZuYW1lLCBzaGExLCBmbGFnLCBjYl9kYXRhKTsKKwlyZXR1cm4gYXBwZW5kX3JlZihyZWZuYW1lLCBzaGExLCAwKTsKK30KKworc3RhdGljIHZvaWQgc25hcmZfcmVmcyhpbnQgaGVhZCwgaW50IHJlbW90ZXMpCit7CisJaWYgKGhlYWQpIHsKKwkJaW50IG9yaWdfY250ID0gcmVmX25hbWVfY250OworCQlmb3JfZWFjaF9yZWYoYXBwZW5kX2hlYWRfcmVmLCBOVUxMKTsKKwkJc29ydF9yZWZfcmFuZ2Uob3JpZ19jbnQsIHJlZl9uYW1lX2NudCk7CisJfQorCWlmIChyZW1vdGVzKSB7CisJCWludCBvcmlnX2NudCA9IHJlZl9uYW1lX2NudDsKKwkJZm9yX2VhY2hfcmVmKGFwcGVuZF9yZW1vdGVfcmVmLCBOVUxMKTsKKwkJc29ydF9yZWZfcmFuZ2Uob3JpZ19jbnQsIHJlZl9uYW1lX2NudCk7CisJfQorfQorCitzdGF0aWMgaW50IHJldl9pc19oZWFkKGNoYXIgKmhlYWQsIGludCBoZWFkbGVuLCBjaGFyICpuYW1lLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqaGVhZF9zaGExLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWlmICgoIWhlYWRbMF0pIHx8CisJICAgIChoZWFkX3NoYTEgJiYgc2hhMSAmJiBoYXNoY21wKGhlYWRfc2hhMSwgc2hhMSkpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXByZWZpeGNtcChoZWFkLCAicmVmcy9oZWFkcy8iKSkKKwkJaGVhZCArPSAxMTsKKwlpZiAoIXByZWZpeGNtcChuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJbmFtZSArPSAxMTsKKwllbHNlIGlmICghcHJlZml4Y21wKG5hbWUsICJoZWFkcy8iKSkKKwkJbmFtZSArPSA2OworCXJldHVybiAhc3RyY21wKGhlYWQsIG5hbWUpOworfQorCitzdGF0aWMgaW50IHNob3dfbWVyZ2VfYmFzZShzdHJ1Y3QgY29tbWl0X2xpc3QgKnNlZW4sIGludCBudW1fcmV2KQoreworCWludCBhbGxfbWFzayA9ICgoMXUgPDwgKFJFVl9TSElGVCArIG51bV9yZXYpKSAtIDEpOworCWludCBhbGxfcmV2cyA9IGFsbF9tYXNrICYgfigoMXUgPDwgUkVWX1NISUZUKSAtIDEpOworCWludCBleGl0X3N0YXR1cyA9IDE7CisKKwl3aGlsZSAoc2VlbikgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwb3Bfb25lX2NvbW1pdCgmc2Vlbik7CisJCWludCBmbGFncyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgYWxsX21hc2s7CisJCWlmICghKGZsYWdzICYgVU5JTlRFUkVTVElORykgJiYKKwkJICAgICgoZmxhZ3MgJiBhbGxfcmV2cykgPT0gYWxsX3JldnMpKSB7CisJCQlwdXRzKHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJCWV4aXRfc3RhdHVzID0gMDsKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCX0KKwl9CisJcmV0dXJuIGV4aXRfc3RhdHVzOworfQorCitzdGF0aWMgaW50IHNob3dfaW5kZXBlbmRlbnQoc3RydWN0IGNvbW1pdCAqKnJldiwKKwkJCSAgICBpbnQgbnVtX3JldiwKKwkJCSAgICBjaGFyICoqcmVmX25hbWUsCisJCQkgICAgdW5zaWduZWQgaW50ICpyZXZfbWFzaykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcmV2OyBpKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcmV2W2ldOworCQl1bnNpZ25lZCBpbnQgZmxhZyA9IHJldl9tYXNrW2ldOworCisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyA9PSBmbGFnKQorCQkJcHV0cyhzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfb25lX3Jldihjb25zdCBjaGFyICphdikKK3sKKwl1bnNpZ25lZCBjaGFyIHJldmtleVsyMF07CisJaWYgKCFnZXRfc2hhMShhdiwgcmV2a2V5KSkgeworCQlhcHBlbmRfcmVmKGF2LCByZXZrZXksIDApOworCQlyZXR1cm47CisJfQorCWlmIChzdHJjaHIoYXYsICcqJykgfHwgc3RyY2hyKGF2LCAnPycpIHx8IHN0cmNocihhdiwgJ1snKSkgeworCQkvKiBnbG9iIHN0eWxlIG1hdGNoICovCisJCWludCBzYXZlZF9tYXRjaGVzID0gcmVmX25hbWVfY250OworCQltYXRjaF9yZWZfcGF0dGVybiA9IGF2OworCQltYXRjaF9yZWZfc2xhc2ggPSBjb3VudF9zbGFzaChhdik7CisJCWZvcl9lYWNoX3JlZihhcHBlbmRfbWF0Y2hpbmdfcmVmLCBOVUxMKTsKKwkJaWYgKHNhdmVkX21hdGNoZXMgPT0gcmVmX25hbWVfY250ICYmCisJCSAgICByZWZfbmFtZV9jbnQgPCBNQVhfUkVWUykKKwkJCWVycm9yKCJubyBtYXRjaGluZyByZWZzIHdpdGggJXMiLCBhdik7CisJCWlmIChzYXZlZF9tYXRjaGVzICsgMSA8IHJlZl9uYW1lX2NudCkKKwkJCXNvcnRfcmVmX3JhbmdlKHNhdmVkX21hdGNoZXMsIHJlZl9uYW1lX2NudCk7CisJCXJldHVybjsKKwl9CisJZGllKCJiYWQgc2hhMSByZWZlcmVuY2UgJXMiLCBhdik7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3Nob3dfYnJhbmNoX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJzaG93YnJhbmNoLmRlZmF1bHQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCS8qCisJCSAqIGRlZmF1bHRfYXJnIGlzIG5vdyBwYXNzZWQgdG8gcGFyc2Vfb3B0aW9ucygpLCBzbyB3ZSBuZWVkIHRvCisJCSAqIG1pbWljIHRoZSByZWFsIGFyZ3YgYSBiaXQgYmV0dGVyLgorCQkgKi8KKwkJaWYgKCFkZWZhdWx0X251bSkgeworCQkJZGVmYXVsdF9hbGxvYyA9IDIwOworCQkJZGVmYXVsdF9hcmcgPSB4Y2FsbG9jKGRlZmF1bHRfYWxsb2MsIHNpemVvZigqZGVmYXVsdF9hcmcpKTsKKwkJCWRlZmF1bHRfYXJnW2RlZmF1bHRfbnVtKytdID0gInNob3ctYnJhbmNoIjsKKwkJfSBlbHNlIGlmIChkZWZhdWx0X2FsbG9jIDw9IGRlZmF1bHRfbnVtICsgMSkgeworCQkJZGVmYXVsdF9hbGxvYyA9IGRlZmF1bHRfYWxsb2MgKiAzIC8gMiArIDIwOworCQkJZGVmYXVsdF9hcmcgPSB4cmVhbGxvYyhkZWZhdWx0X2FyZywgc2l6ZW9mICpkZWZhdWx0X2FyZyAqIGRlZmF1bHRfYWxsb2MpOworCQl9CisJCWRlZmF1bHRfYXJnW2RlZmF1bHRfbnVtKytdID0geHN0cmR1cCh2YWx1ZSk7CisJCWRlZmF1bHRfYXJnW2RlZmF1bHRfbnVtXSA9IE5VTEw7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvbG9yLnNob3dicmFuY2giKSkgeworCQlzaG93YnJhbmNoX3VzZV9jb2xvciA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCBvbWl0X2luX2RlbnNlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdCAqKnJldiwgaW50IG4pCit7CisJLyogSWYgdGhlIGNvbW1pdCBpcyB0aXAgb2YgdGhlIG5hbWVkIGJyYW5jaGVzLCBkbyBub3QKKwkgKiBvbWl0IGl0LgorCSAqIE90aGVyd2lzZSwgaWYgaXQgaXMgYSBtZXJnZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lCisJICogdGlwLCBpdCBpcyBub3QgdGhhdCBpbnRlcmVzdGluZy4KKwkgKi8KKwlpbnQgaSwgZmxhZywgY291bnQ7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJaWYgKHJldltpXSA9PSBjb21taXQpCisJCQlyZXR1cm4gMDsKKwlmbGFnID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJZm9yIChpID0gY291bnQgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChmbGFnICYgKDF1IDw8IChpICsgUkVWX1NISUZUKSkpCisJCQljb3VudCsrOworCX0KKwlpZiAoY291bnQgPT0gMSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVmbG9nID0gMDsKKworc3RhdGljIGludCBwYXJzZV9yZWZsb2dfcGFyYW0oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgICBpbnQgdW5zZXQpCit7CisJY2hhciAqZXA7CisJY29uc3QgY2hhciAqKmJhc2UgPSAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlOworCWlmICghYXJnKQorCQlhcmcgPSAiIjsKKwlyZWZsb2cgPSBzdHJ0b3VsKGFyZywgJmVwLCAxMCk7CisJaWYgKCplcCA9PSAnLCcpCisJCSpiYXNlID0gZXAgKyAxOworCWVsc2UgaWYgKCplcCkKKwkJcmV0dXJuIGVycm9yKCJ1bnJlY29nbml6ZWQgcmVmbG9nIHBhcmFtICclcyciLCBhcmcpOworCWVsc2UKKwkJKmJhc2UgPSBOVUxMOworCWlmIChyZWZsb2cgPD0gMCkKKwkJcmVmbG9nID0gREVGQVVMVF9SRUZMT0c7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfc2hvd19icmFuY2goaW50IGFjLCBjb25zdCBjaGFyICoqYXYsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpyZXZbTUFYX1JFVlNdLCAqY29tbWl0OworCWNoYXIgKnJlZmxvZ19tc2dbTUFYX1JFVlNdOworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEwsICpzZWVuID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgcmV2X21hc2tbTUFYX1JFVlNdOworCWludCBudW1fcmV2LCBpLCBleHRyYSA9IDA7CisJaW50IGFsbF9oZWFkcyA9IDAsIGFsbF9yZW1vdGVzID0gMDsKKwlpbnQgYWxsX21hc2ssIGFsbF9yZXZzOworCWludCBsaWZvID0gMTsKKwljaGFyIGhlYWRbMTI4XTsKKwljb25zdCBjaGFyICpoZWFkX3A7CisJaW50IGhlYWRfbGVuOworCXVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKKwlpbnQgbWVyZ2VfYmFzZSA9IDA7CisJaW50IGluZGVwZW5kZW50ID0gMDsKKwlpbnQgbm9fbmFtZSA9IDA7CisJaW50IHNoYTFfbmFtZSA9IDA7CisJaW50IHNob3duX21lcmdlX3BvaW50ID0gMDsKKwlpbnQgd2l0aF9jdXJyZW50X2JyYW5jaCA9IDA7CisJaW50IGhlYWRfYXQgPSAtMTsKKwlpbnQgdG9waWNzID0gMDsKKwlpbnQgZGVuc2UgPSAxOworCWNvbnN0IGNoYXIgKnJlZmxvZ19iYXNlID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fc2hvd19icmFuY2hfb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTignYScsICJhbGwiLCAmYWxsX2hlYWRzLAorCQkJICAgIE5fKCJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiKSksCisJCU9QVF9CT09MRUFOKCdyJywgInJlbW90ZXMiLCAmYWxsX3JlbW90ZXMsCisJCQkgICAgTl8oInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIikpLAorCQlPUFRfX0NPTE9SKCZzaG93YnJhbmNoX3VzZV9jb2xvciwKKwkJCSAgICBOXygiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIpKSwKKwkJeyBPUFRJT05fSU5URUdFUiwgMCwgIm1vcmUiLCAmZXh0cmEsIE5fKCJuIiksCisJCQkgICAgTl8oInNob3cgPG4+IG1vcmUgY29tbWl0cyBhZnRlciB0aGUgY29tbW9uIGFuY2VzdG9yIiksCisJCQkgICAgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KTEgfSwKKwkJT1BUX1NFVF9JTlQoMCwgImxpc3QiLCAmZXh0cmEsIE5fKCJzeW5vbnltIHRvIG1vcmU9LTEiKSwgLTEpLAorCQlPUFRfQk9PTEVBTigwLCAibm8tbmFtZSIsICZub19uYW1lLCBOXygic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiKSksCisJCU9QVF9CT09MRUFOKDAsICJjdXJyZW50IiwgJndpdGhfY3VycmVudF9icmFuY2gsCisJCQkgICAgTl8oImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIikpLAorCQlPUFRfQk9PTEVBTigwLCAic2hhMS1uYW1lIiwgJnNoYTFfbmFtZSwKKwkJCSAgICBOXygibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIikpLAorCQlPUFRfQk9PTEVBTigwLCAibWVyZ2UtYmFzZSIsICZtZXJnZV9iYXNlLAorCQkJICAgIE5fKCJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIikpLAorCQlPUFRfQk9PTEVBTigwLCAiaW5kZXBlbmRlbnQiLCAmaW5kZXBlbmRlbnQsCisJCQkgICAgTl8oInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiKSksCisJCU9QVF9CT09MRUFOKDAsICJ0b3BvLW9yZGVyIiwgJmxpZm8sCisJCQkgICAgTl8oInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIpKSwKKwkJT1BUX0JPT0xFQU4oMCwgInRvcGljcyIsICZ0b3BpY3MsCisJCQkgICAgTl8oInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIikpLAorCQlPUFRfU0VUX0lOVCgwLCAic3BhcnNlIiwgJmRlbnNlLAorCQkJICAgIE5fKCJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiKSwgMCksCisJCU9QVF9TRVRfSU5UKDAsICJkYXRlLW9yZGVyIiwgJmxpZm8sCisJCQkgICAgTl8oInNob3cgY29tbWl0cyB3aGVyZSBubyBwYXJlbnQgY29tZXMgYmVmb3JlIGl0cyAiCisJCQkgICAgICAgImNoaWxkcmVuIiksIDApLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2cnLCAicmVmbG9nIiwgJnJlZmxvZ19iYXNlLCBOXygiPG4+Wyw8YmFzZT5dIiksCisJCQkgICAgTl8oInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCAiCisJCQkgICAgICAgImJhc2UiKSwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX0xJVEVSQUxfQVJHSEVMUCwKKwkJCSAgICBwYXJzZV9yZWZsb2dfcGFyYW0gfSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X3Nob3dfYnJhbmNoX2NvbmZpZywgTlVMTCk7CisKKwkvKiBJZiBub3RoaW5nIGlzIHNwZWNpZmllZCwgdHJ5IHRoZSBkZWZhdWx0IGZpcnN0ICovCisJaWYgKGFjID09IDEgJiYgZGVmYXVsdF9udW0pIHsKKwkJYWMgPSBkZWZhdWx0X251bTsKKwkJYXYgPSBkZWZhdWx0X2FyZzsKKwl9CisKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIGJ1aWx0aW5fc2hvd19icmFuY2hfb3B0aW9ucywKKwkJCSAgIHNob3dfYnJhbmNoX3VzYWdlLCBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwlpZiAoYWxsX2hlYWRzKQorCQlhbGxfcmVtb3RlcyA9IDE7CisKKwlpZiAoZXh0cmEgfHwgcmVmbG9nKSB7CisJCS8qICJsaXN0aW5nIiBtb2RlIGlzIGluY29tcGF0aWJsZSB3aXRoCisJCSAqIGluZGVwZW5kZW50IG5vciBtZXJnZS1iYXNlIG1vZGVzLgorCQkgKi8KKwkJaWYgKGluZGVwZW5kZW50IHx8IG1lcmdlX2Jhc2UpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoc2hvd19icmFuY2hfdXNhZ2UsCisJCQkJCSAgIGJ1aWx0aW5fc2hvd19icmFuY2hfb3B0aW9ucyk7CisJCWlmIChyZWZsb2cgJiYgKCgwIDwgZXh0cmEpIHx8IGFsbF9oZWFkcyB8fCBhbGxfcmVtb3RlcykpCisJCQkvKgorCQkJICogQXNraW5nIGZvciAtLW1vcmUgaW4gcmVmbG9nIG1vZGUgZG9lcyBub3QKKwkJCSAqIG1ha2Ugc2Vuc2UuICAtLWxpc3QgaXMgT2suCisJCQkgKgorCQkJICogQWxzbyAtLWFsbCBhbmQgLS1yZW1vdGVzIGRvIG5vdCBtYWtlIHNlbnNlIGVpdGhlci4KKwkJCSAqLworCQkJZGllKCItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAiCisJCQkgICAgIi0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIik7CisJfQorCisJLyogSWYgbm90aGluZyBpcyBzcGVjaWZpZWQsIHNob3cgYWxsIGJyYW5jaGVzIGJ5IGRlZmF1bHQgKi8KKwlpZiAoYWMgKyBhbGxfaGVhZHMgKyBhbGxfcmVtb3RlcyA9PSAwKQorCQlhbGxfaGVhZHMgPSAxOworCisJaWYgKHJlZmxvZykgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljaGFyIG50aF9kZXNjWzI1Nl07CisJCWNoYXIgKnJlZjsKKwkJaW50IGJhc2UgPSAwOworCisJCWlmIChhYyA9PSAwKSB7CisJCQlzdGF0aWMgY29uc3QgY2hhciAqZmFrZV9hdlsyXTsKKworCQkJZmFrZV9hdlswXSA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgc2hhMSwgMSwgTlVMTCk7CisJCQlmYWtlX2F2WzFdID0gTlVMTDsKKwkJCWF2ID0gZmFrZV9hdjsKKwkJCWFjID0gMTsKKwkJfQorCQlpZiAoYWMgIT0gMSkKKwkJCWRpZSgiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIpOworCisJCWlmIChNQVhfUkVWUyA8IHJlZmxvZykKKwkJCWRpZSgiT25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iLAorCQkJICAgIE1BWF9SRVZTKTsKKwkJaWYgKCFkd2ltX3JlZigqYXYsIHN0cmxlbigqYXYpLCBzaGExLCAmcmVmKSkKKwkJCWRpZSgiTm8gc3VjaCByZWYgJXMiLCAqYXYpOworCisJCS8qIEhhcyB0aGUgYmFzZSBiZWVuIHNwZWNpZmllZD8gKi8KKwkJaWYgKHJlZmxvZ19iYXNlKSB7CisJCQljaGFyICplcDsKKwkJCWJhc2UgPSBzdHJ0b3VsKHJlZmxvZ19iYXNlLCAmZXAsIDEwKTsKKwkJCWlmICgqZXApIHsKKwkJCQkvKiBBaCwgdGhhdCBpcyBhIGRhdGUgc3BlYy4uLiAqLworCQkJCXVuc2lnbmVkIGxvbmcgYXQ7CisJCQkJYXQgPSBhcHByb3hpZGF0ZShyZWZsb2dfYmFzZSk7CisJCQkJcmVhZF9yZWZfYXQocmVmLCBhdCwgLTEsIHNoYTEsIE5VTEwsCisJCQkJCSAgICBOVUxMLCBOVUxMLCAmYmFzZSk7CisJCQl9CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgcmVmbG9nOyBpKyspIHsKKwkJCWNoYXIgKmxvZ21zZywgKm07CisJCQljb25zdCBjaGFyICptc2c7CisJCQl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKKwkJCWludCB0ejsKKworCQkJaWYgKHJlYWRfcmVmX2F0KHJlZiwgMCwgYmFzZStpLCBzaGExLCAmbG9nbXNnLAorCQkJCQkmdGltZXN0YW1wLCAmdHosIE5VTEwpKSB7CisJCQkJcmVmbG9nID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1zZyA9IHN0cmNocihsb2dtc2csICdcdCcpOworCQkJaWYgKCFtc2cpCisJCQkJbXNnID0gIihub25lKSI7CisJCQllbHNlCisJCQkJbXNnKys7CisJCQltID0geG1hbGxvYyhzdHJsZW4obXNnKSArIDIwMCk7CisJCQlzcHJpbnRmKG0sICIoJXMpICVzIiwKKwkJCQlzaG93X2RhdGUodGltZXN0YW1wLCB0eiwgMSksCisJCQkJbXNnKTsKKwkJCXJlZmxvZ19tc2dbaV0gPSBtOworCQkJZnJlZShsb2dtc2cpOworCQkJc3ByaW50ZihudGhfZGVzYywgIiVzQHslZH0iLCAqYXYsIGJhc2UraSk7CisJCQlhcHBlbmRfcmVmKG50aF9kZXNjLCBzaGExLCAxKTsKKwkJfQorCX0KKwllbHNlIGlmIChhbGxfaGVhZHMgKyBhbGxfcmVtb3RlcykKKwkJc25hcmZfcmVmcyhhbGxfaGVhZHMsIGFsbF9yZW1vdGVzKTsKKwllbHNlIHsKKwkJd2hpbGUgKDAgPCBhYykgeworCQkJYXBwZW5kX29uZV9yZXYoKmF2KTsKKwkJCWFjLS07IGF2Kys7CisJCX0KKwl9CisKKwloZWFkX3AgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBoZWFkX3NoYTEsIDEsIE5VTEwpOworCWlmIChoZWFkX3ApIHsKKwkJaGVhZF9sZW4gPSBzdHJsZW4oaGVhZF9wKTsKKwkJbWVtY3B5KGhlYWQsIGhlYWRfcCwgaGVhZF9sZW4gKyAxKTsKKwl9CisJZWxzZSB7CisJCWhlYWRfbGVuID0gMDsKKwkJaGVhZFswXSA9IDA7CisJfQorCisJaWYgKHdpdGhfY3VycmVudF9icmFuY2ggJiYgaGVhZF9wKSB7CisJCWludCBoYXNfaGVhZCA9IDA7CisJCWZvciAoaSA9IDA7ICFoYXNfaGVhZCAmJiBpIDwgcmVmX25hbWVfY250OyBpKyspIHsKKwkJCS8qIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gYWRkaW5nIHRoZSBicmFuY2gKKwkJCSAqIEhFQUQgcG9pbnRzIGF0LgorCQkJICovCisJCQlpZiAocmV2X2lzX2hlYWQoaGVhZCwKKwkJCQkJaGVhZF9sZW4sCisJCQkJCXJlZl9uYW1lW2ldLAorCQkJCQloZWFkX3NoYTEsIE5VTEwpKQorCQkJCWhhc19oZWFkKys7CisJCX0KKwkJaWYgKCFoYXNfaGVhZCkgeworCQkJaW50IG9mZnNldCA9ICFwcmVmaXhjbXAoaGVhZCwgInJlZnMvaGVhZHMvIikgPyAxMSA6IDA7CisJCQlhcHBlbmRfb25lX3JldihoZWFkICsgb2Zmc2V0KTsKKwkJfQorCX0KKworCWlmICghcmVmX25hbWVfY250KSB7CisJCWZwcmludGYoc3RkZXJyLCAiTm8gcmV2cyB0byBiZSBzaG93bi5cbiIpOworCQlleGl0KDApOworCX0KKworCWZvciAobnVtX3JldiA9IDA7IHJlZl9uYW1lW251bV9yZXZdOyBudW1fcmV2KyspIHsKKwkJdW5zaWduZWQgY2hhciByZXZrZXlbMjBdOworCQl1bnNpZ25lZCBpbnQgZmxhZyA9IDF1IDw8IChudW1fcmV2ICsgUkVWX1NISUZUKTsKKworCQlpZiAoTUFYX1JFVlMgPD0gbnVtX3JldikKKwkJCWRpZSgiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iLCBNQVhfUkVWUyk7CisJCWlmIChnZXRfc2hhMShyZWZfbmFtZVtudW1fcmV2XSwgcmV2a2V5KSkKKwkJCWRpZSgiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYuIiwgcmVmX25hbWVbbnVtX3Jldl0pOworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShyZXZrZXkpOworCQlpZiAoIWNvbW1pdCkKKwkJCWRpZSgiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiLAorCQkJICAgIHJlZl9uYW1lW251bV9yZXZdLCByZXZrZXkpOworCQlwYXJzZV9jb21taXQoY29tbWl0KTsKKwkJbWFya19zZWVuKGNvbW1pdCwgJnNlZW4pOworCisJCS8qIHJldiMwIHVzZXMgYml0IFJFVl9TSElGVCwgcmV2IzEgdXNlcyBiaXQgUkVWX1NISUZUKzEsCisJCSAqIGFuZCBzbyBvbi4gIFJFVl9TSElGVCBiaXRzIGZyb20gYml0IDAgYXJlIHVzZWQgZm9yCisJCSAqIGludGVybmFsIGJvb2trZWVwaW5nLgorCQkgKi8KKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gZmxhZzsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzID09IGZsYWcpCisJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShjb21taXQsICZsaXN0KTsKKwkJcmV2W251bV9yZXZdID0gY29tbWl0OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKQorCQlyZXZfbWFza1tpXSA9IHJldltpXS0+b2JqZWN0LmZsYWdzOworCisJaWYgKDAgPD0gZXh0cmEpCisJCWpvaW5fcmV2cygmbGlzdCwgJnNlZW4sIG51bV9yZXYsIGV4dHJhKTsKKworCWNvbW1pdF9saXN0X3NvcnRfYnlfZGF0ZSgmc2Vlbik7CisKKwlpZiAobWVyZ2VfYmFzZSkKKwkJcmV0dXJuIHNob3dfbWVyZ2VfYmFzZShzZWVuLCBudW1fcmV2KTsKKworCWlmIChpbmRlcGVuZGVudCkKKwkJcmV0dXJuIHNob3dfaW5kZXBlbmRlbnQocmV2LCBudW1fcmV2LCByZWZfbmFtZSwgcmV2X21hc2spOworCisJLyogU2hvdyBsaXN0OyAtLW1vcmU9LTEgbWVhbnMgbGlzdC1vbmx5ICovCisJaWYgKDEgPCBudW1fcmV2IHx8IGV4dHJhIDwgMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKSB7CisJCQlpbnQgajsKKwkJCWludCBpc19oZWFkID0gcmV2X2lzX2hlYWQoaGVhZCwKKwkJCQkJCSAgaGVhZF9sZW4sCisJCQkJCQkgIHJlZl9uYW1lW2ldLAorCQkJCQkJICBoZWFkX3NoYTEsCisJCQkJCQkgIHJldltpXS0+b2JqZWN0LnNoYTEpOworCQkJaWYgKGV4dHJhIDwgMCkKKwkJCQlwcmludGYoIiVjIFslc10gIiwKKwkJCQkgICAgICAgaXNfaGVhZCA/ICcqJyA6ICcgJywgcmVmX25hbWVbaV0pOworCQkJZWxzZSB7CisJCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJCQkJcHV0Y2hhcignICcpOworCQkJCXByaW50ZigiJXMlYyVzIFslc10gIiwKKwkJCQkgICAgICAgZ2V0X2NvbG9yX2NvZGUoaSksCisJCQkJICAgICAgIGlzX2hlYWQgPyAnKicgOiAnIScsCisJCQkJICAgICAgIGdldF9jb2xvcl9yZXNldF9jb2RlKCksIHJlZl9uYW1lW2ldKTsKKwkJCX0KKworCQkJaWYgKCFyZWZsb2cpIHsKKwkJCQkvKiBoZWFkZXIgbGluZXMgbmV2ZXIgbmVlZCBuYW1lICovCisJCQkJc2hvd19vbmVfY29tbWl0KHJldltpXSwgMSk7CisJCQl9CisJCQllbHNlCisJCQkJcHV0cyhyZWZsb2dfbXNnW2ldKTsKKworCQkJaWYgKGlzX2hlYWQpCisJCQkJaGVhZF9hdCA9IGk7CisJCX0KKwkJaWYgKDAgPD0gZXh0cmEpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fcmV2OyBpKyspCisJCQkJcHV0Y2hhcignLScpOworCQkJcHV0Y2hhcignXG4nKTsKKwkJfQorCX0KKwlpZiAoZXh0cmEgPCAwKQorCQlleGl0KDApOworCisJLyogU29ydCB0b3BvbG9naWNhbGx5ICovCisJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmc2VlbiwgbGlmbyk7CisKKwkvKiBHaXZlIG5hbWVzIHRvIGNvbW1pdHMgKi8KKwlpZiAoIXNoYTFfbmFtZSAmJiAhbm9fbmFtZSkKKwkJbmFtZV9jb21taXRzKHNlZW4sIHJldiwgcmVmX25hbWUsIG51bV9yZXYpOworCisJYWxsX21hc2sgPSAoKDF1IDw8IChSRVZfU0hJRlQgKyBudW1fcmV2KSkgLSAxKTsKKwlhbGxfcmV2cyA9IGFsbF9tYXNrICYgfigoMXUgPDwgUkVWX1NISUZUKSAtIDEpOworCisJd2hpbGUgKHNlZW4pIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX29uZV9jb21taXQoJnNlZW4pOworCQlpbnQgdGhpc19mbGFnID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJCWludCBpc19tZXJnZV9wb2ludCA9ICgodGhpc19mbGFnICYgYWxsX3JldnMpID09IGFsbF9yZXZzKTsKKworCQlzaG93bl9tZXJnZV9wb2ludCB8PSBpc19tZXJnZV9wb2ludDsKKworCQlpZiAoMSA8IG51bV9yZXYpIHsKKwkJCWludCBpc19tZXJnZSA9ICEhKGNvbW1pdC0+cGFyZW50cyAmJgorCQkJCQkgIGNvbW1pdC0+cGFyZW50cy0+bmV4dCk7CisJCQlpZiAodG9waWNzICYmCisJCQkgICAgIWlzX21lcmdlX3BvaW50ICYmCisJCQkgICAgKHRoaXNfZmxhZyAmICgxdSA8PCBSRVZfU0hJRlQpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChkZW5zZSAmJiBpc19tZXJnZSAmJgorCQkJICAgIG9taXRfaW5fZGVuc2UoY29tbWl0LCByZXYsIG51bV9yZXYpKQorCQkJCWNvbnRpbnVlOworCQkJZm9yIChpID0gMDsgaSA8IG51bV9yZXY7IGkrKykgeworCQkJCWludCBtYXJrOworCQkJCWlmICghKHRoaXNfZmxhZyAmICgxdSA8PCAoaSArIFJFVl9TSElGVCkpKSkKKwkJCQkJbWFyayA9ICcgJzsKKwkJCQllbHNlIGlmIChpc19tZXJnZSkKKwkJCQkJbWFyayA9ICctJzsKKwkJCQllbHNlIGlmIChpID09IGhlYWRfYXQpCisJCQkJCW1hcmsgPSAnKic7CisJCQkJZWxzZQorCQkJCQltYXJrID0gJysnOworCQkJCXByaW50ZigiJXMlYyVzIiwKKwkJCQkgICAgICAgZ2V0X2NvbG9yX2NvZGUoaSksCisJCQkJICAgICAgIG1hcmssIGdldF9jb2xvcl9yZXNldF9jb2RlKCkpOworCQkJfQorCQkJcHV0Y2hhcignICcpOworCQl9CisJCXNob3dfb25lX2NvbW1pdChjb21taXQsIG5vX25hbWUpOworCisJCWlmIChzaG93bl9tZXJnZV9wb2ludCAmJiAtLWV4dHJhIDwgMCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vc2hvdy1yZWYuYyBiL2J1aWx0aW4vc2hvdy1yZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWIwMTZkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zaG93LXJlZi5jCkBAIC0wLDAgKzEsMjUwIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNob3dfcmVmX3VzYWdlW10gPSB7CisJTl8oImdpdCBzaG93LXJlZiBbLXF8LS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWR8LS1kZXJlZmVyZW5jZV0gWy1zfC0taGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbcGF0dGVybipdICIpLAorCU5fKCJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz1wYXR0ZXJuXSA8IHJlZi1saXN0IiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBkZXJlZl90YWdzLCBzaG93X2hlYWQsIHRhZ3Nfb25seSwgaGVhZHNfb25seSwgZm91bmRfbWF0Y2gsIHZlcmlmeSwKKwkgICBxdWlldCwgaGFzaF9vbmx5LCBhYmJyZXYsIGV4Y2x1ZGVfYXJnOworc3RhdGljIGNvbnN0IGNoYXIgKipwYXR0ZXJuOworc3RhdGljIGNvbnN0IGNoYXIgKmV4Y2x1ZGVfZXhpc3RpbmdfYXJnOworCitzdGF0aWMgdm9pZCBzaG93X29uZShjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNvbnN0IGNoYXIgKmhleCA9IGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBhYmJyZXYpOworCWlmIChoYXNoX29ubHkpCisJCXByaW50ZigiJXNcbiIsIGhleCk7CisJZWxzZQorCQlwcmludGYoIiVzICVzXG4iLCBoZXgsIHJlZm5hbWUpOworfQorCitzdGF0aWMgaW50IHNob3dfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYmRhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCWNvbnN0IGNoYXIgKmhleDsKKwl1bnNpZ25lZCBjaGFyIHBlZWxlZFsyMF07CisKKwlpZiAodGFnc19vbmx5IHx8IGhlYWRzX29ubHkpIHsKKwkJaW50IG1hdGNoOworCisJCW1hdGNoID0gaGVhZHNfb25seSAmJiAhcHJlZml4Y21wKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpOworCQltYXRjaCB8PSB0YWdzX29ubHkgJiYgIXByZWZpeGNtcChyZWZuYW1lLCAicmVmcy90YWdzLyIpOworCQlpZiAoIW1hdGNoKQorCQkJcmV0dXJuIDA7CisJfQorCWlmIChwYXR0ZXJuKSB7CisJCWludCByZWZsZW4gPSBzdHJsZW4ocmVmbmFtZSk7CisJCWNvbnN0IGNoYXIgKipwID0gcGF0dGVybiwgKm07CisJCXdoaWxlICgobSA9ICpwKyspICE9IE5VTEwpIHsKKwkJCWludCBsZW4gPSBzdHJsZW4obSk7CisJCQlpZiAobGVuID4gcmVmbGVuKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG1lbWNtcChtLCByZWZuYW1lICsgcmVmbGVuIC0gbGVuLCBsZW4pKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGxlbiA9PSByZWZsZW4pCisJCQkJZ290byBtYXRjaDsKKwkJCS8qICItLXZlcmlmeSIgcmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2ggKi8KKwkJCWlmICh2ZXJpZnkpCisJCQkJY29udGludWU7CisJCQlpZiAocmVmbmFtZVtyZWZsZW4gLSBsZW4gLSAxXSA9PSAnLycpCisJCQkJZ290byBtYXRjaDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKK21hdGNoOgorCWZvdW5kX21hdGNoKys7CisKKwkvKiBUaGlzIGNoYW5nZXMgdGhlIHNlbWFudGljcyBzbGlnaHRseSB0aGF0IGV2ZW4gdW5kZXIgcXVpZXQgd2UKKwkgKiBkZXRlY3QgYW5kIHJldHVybiBlcnJvciBpZiB0aGUgcmVwb3NpdG9yeSBpcyBjb3JydXB0IGFuZAorCSAqIHJlZiBwb2ludHMgYXQgYSBub25leGlzdGVudCBvYmplY3QuCisJICovCisJaWYgKCFoYXNfc2hhMV9maWxlKHNoYTEpKQorCQlkaWUoImdpdCBzaG93LXJlZjogYmFkIHJlZiAlcyAoJXMpIiwgcmVmbmFtZSwKKwkJICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCWlmIChxdWlldCkKKwkJcmV0dXJuIDA7CisKKwlzaG93X29uZShyZWZuYW1lLCBzaGExKTsKKworCWlmICghZGVyZWZfdGFncykKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGZsYWcgJiBSRUZfSVNQQUNLRUQpICYmICFwZWVsX3JlZihyZWZuYW1lLCBwZWVsZWQpKSB7CisJCWlmICghaXNfbnVsbF9zaGExKHBlZWxlZCkpIHsKKwkJCWhleCA9IGZpbmRfdW5pcXVlX2FiYnJldihwZWVsZWQsIGFiYnJldik7CisJCQlwcmludGYoIiVzICVzXnt9XG4iLCBoZXgsIHJlZm5hbWUpOworCQl9CisJfQorCWVsc2UgeworCQlvYmogPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJCWlmICghb2JqKQorCQkJZGllKCJnaXQgc2hvdy1yZWY6IGJhZCByZWYgJXMgKCVzKSIsIHJlZm5hbWUsCisJCQkgICAgc2hhMV90b19oZXgoc2hhMSkpOworCQlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJCW9iaiA9IGRlcmVmX3RhZyhvYmosIHJlZm5hbWUsIDApOworCQkJaWYgKCFvYmopCisJCQkJZGllKCJnaXQgc2hvdy1yZWY6IGJhZCB0YWcgYXQgcmVmICVzICglcykiLCByZWZuYW1lLAorCQkJCSAgICBzaGExX3RvX2hleChzaGExKSk7CisJCQloZXggPSBmaW5kX3VuaXF1ZV9hYmJyZXYob2JqLT5zaGExLCBhYmJyZXYpOworCQkJcHJpbnRmKCIlcyAlc157fVxuIiwgaGV4LCByZWZuYW1lKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfZXhpc3RpbmcoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSAoc3RydWN0IHN0cmluZ19saXN0ICopY2JkYXRhOworCXN0cmluZ19saXN0X2luc2VydChsaXN0LCByZWZuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlYWQgIl4oPzo8YW55dGhpbmc+XHMpPzxyZWZuYW1lPig/OlxeXHtcfSk/JCIgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCisgKiBhbmQKKyAqICgxKSBzdHJpcCAiXnt9IiBhdCB0aGUgZW5kIG9mIGxpbmUgaWYgYW55OworICogKDIpIGlnbm9yZSBpZiBtYXRjaCBpcyBwcm92aWRlZCBhbmQgZG9lcyBub3QgaGVhZC1tYXRjaCByZWZuYW1lOworICogKDMpIHdhcm4gaWYgcmVmbmFtZSBpcyBub3QgYSB3ZWxsLWZvcm1lZCByZWZuYW1lIGFuZCBza2lwOworICogKDQpIGlnbm9yZSBpZiByZWZuYW1lIGlzIGEgcmVmIHRoYXQgZXhpc3RzIGluIHRoZSBsb2NhbCByZXBvc2l0b3J5OworICogKDUpIG90aGVyd2lzZSBvdXRwdXQgdGhlIGxpbmUuCisgKi8KK3N0YXRpYyBpbnQgZXhjbHVkZV9leGlzdGluZyhjb25zdCBjaGFyICptYXRjaCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGV4aXN0aW5nX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNoYXIgYnVmWzEwMjRdOworCWludCBtYXRjaGxlbiA9IG1hdGNoID8gc3RybGVuKG1hdGNoKSA6IDA7CisKKwlmb3JfZWFjaF9yZWYoYWRkX2V4aXN0aW5nLCAmZXhpc3RpbmdfcmVmcyk7CisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkgeworCQljaGFyICpyZWY7CisJCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKKworCQlpZiAobGVuID4gMCAmJiBidWZbbGVuIC0gMV0gPT0gJ1xuJykKKwkJCWJ1ZlstLWxlbl0gPSAnXDAnOworCQlpZiAoMyA8PSBsZW4gJiYgIXN0cmNtcChidWYgKyBsZW4gLSAzLCAiXnt9IikpIHsKKwkJCWxlbiAtPSAzOworCQkJYnVmW2xlbl0gPSAnXDAnOworCQl9CisJCWZvciAocmVmID0gYnVmICsgbGVuOyBidWYgPCByZWY7IHJlZi0tKQorCQkJaWYgKGlzc3BhY2UocmVmWy0xXSkpCisJCQkJYnJlYWs7CisJCWlmIChtYXRjaCkgeworCQkJaW50IHJlZmxlbiA9IGJ1ZiArIGxlbiAtIHJlZjsKKwkJCWlmIChyZWZsZW4gPCBtYXRjaGxlbikKKwkJCQljb250aW51ZTsKKwkJCWlmIChzdHJuY21wKHJlZiwgbWF0Y2gsIG1hdGNobGVuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmLCAwKSkgeworCQkJd2FybmluZygicmVmICclcycgaWdub3JlZCIsIHJlZik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmluZ19saXN0X2hhc19zdHJpbmcoJmV4aXN0aW5nX3JlZnMsIHJlZikpIHsKKwkJCXByaW50ZigiJXNcbiIsIGJ1Zik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFzaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWhhc2hfb25seSA9IDE7CisJLyogVXNlIGZ1bGwgbGVuZ3RoIFNIQTEgaWYgbm8gYXJndW1lbnQgKi8KKwlpZiAoIWFyZykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBhcnNlX29wdF9hYmJyZXZfY2Iob3B0LCBhcmcsIHVuc2V0KTsKK30KKworc3RhdGljIGludCBleGNsdWRlX2V4aXN0aW5nX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICAgaW50IHVuc2V0KQoreworCWV4Y2x1ZGVfYXJnID0gMTsKKwkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZWxwX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBzaG93X3JlZl9vcHRpb25zW10gPSB7CisJT1BUX0JPT0xFQU4oMCwgInRhZ3MiLCAmdGFnc19vbmx5LCBOXygib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIpKSwKKwlPUFRfQk9PTEVBTigwLCAiaGVhZHMiLCAmaGVhZHNfb25seSwgTl8oIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiKSksCisJT1BUX0JPT0xFQU4oMCwgInZlcmlmeSIsICZ2ZXJpZnksIE5fKCJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsICIKKwkJICAgICJyZXF1aXJlcyBleGFjdCByZWYgcGF0aCIpKSwKKwl7IE9QVElPTl9CT09MRUFOLCAnaCcsIE5VTEwsICZzaG93X2hlYWQsIE5VTEwsCisJICBOXygic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UiKSwKKwkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ISURERU4gfSwKKwlPUFRfQk9PTEVBTigwLCAiaGVhZCIsICZzaG93X2hlYWQsIE5fKCJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSIpKSwKKwlPUFRfQk9PTEVBTignZCcsICJkZXJlZmVyZW5jZSIsICZkZXJlZl90YWdzLAorCQkgICAgTl8oImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIikpLAorCXsgT1BUSU9OX0NBTExCQUNLLCAncycsICJoYXNoIiwgJmFiYnJldiwgTl8oIm4iKSwKKwkgIE5fKCJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiKSwKKwkgIFBBUlNFX09QVF9PUFRBUkcsICZoYXNoX2NhbGxiYWNrIH0sCisJT1BUX19BQkJSRVYoJmFiYnJldiksCisJT1BUX19RVUlFVCgmcXVpZXQsCisJCSAgIE5fKCJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIpKSwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImV4Y2x1ZGUtZXhpc3RpbmciLCAmZXhjbHVkZV9leGlzdGluZ19hcmcsCisJICBOXygicGF0dGVybiIpLCBOXygic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIpLAorCSAgUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9OT05FRywgZXhjbHVkZV9leGlzdGluZ19jYWxsYmFjayB9LAorCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaGVscC1hbGwiLCBOVUxMLCBOVUxMLCBOXygic2hvdyB1c2FnZSIpLAorCSAgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0FSRywgaGVscF9jYWxsYmFjayB9LAorCU9QVF9FTkQoKQorfTsKKworaW50IGNtZF9zaG93X3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhzaG93X3JlZl91c2FnZSwgc2hvd19yZWZfb3B0aW9ucyk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHNob3dfcmVmX29wdGlvbnMsCisJCQkgICAgIHNob3dfcmVmX3VzYWdlLCBQQVJTRV9PUFRfTk9fSU5URVJOQUxfSEVMUCk7CisKKwlpZiAoZXhjbHVkZV9hcmcpCisJCXJldHVybiBleGNsdWRlX2V4aXN0aW5nKGV4Y2x1ZGVfZXhpc3RpbmdfYXJnKTsKKworCXBhdHRlcm4gPSBhcmd2OworCWlmICghKnBhdHRlcm4pCisJCXBhdHRlcm4gPSBOVUxMOworCisJaWYgKHZlcmlmeSkgeworCQlpZiAoIXBhdHRlcm4pCisJCQlkaWUoIi0tdmVyaWZ5IHJlcXVpcmVzIGEgcmVmZXJlbmNlIik7CisJCXdoaWxlICgqcGF0dGVybikgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCQkJaWYgKCFwcmVmaXhjbXAoKnBhdHRlcm4sICJyZWZzLyIpICYmCisJCQkgICAgIXJlYWRfcmVmKCpwYXR0ZXJuLCBzaGExKSkgeworCQkJCWlmICghcXVpZXQpCisJCQkJCXNob3dfb25lKCpwYXR0ZXJuLCBzaGExKTsKKwkJCX0KKwkJCWVsc2UgaWYgKCFxdWlldCkKKwkJCQlkaWUoIiclcycgLSBub3QgYSB2YWxpZCByZWYiLCAqcGF0dGVybik7CisJCQllbHNlCisJCQkJcmV0dXJuIDE7CisJCQlwYXR0ZXJuKys7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNob3dfaGVhZCkKKwkJaGVhZF9yZWYoc2hvd19yZWYsIE5VTEwpOworCWZvcl9lYWNoX3JlZihzaG93X3JlZiwgTlVMTCk7CisJaWYgKCFmb3VuZF9tYXRjaCkgeworCQlpZiAodmVyaWZ5ICYmICFxdWlldCkKKwkJCWRpZSgiTm8gbWF0Y2giKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zdHJpcHNwYWNlLmMgYi9idWlsdGluL3N0cmlwc3BhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTY5ODZjCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zdHJpcHNwYWNlLmMKQEAgLTAsMCArMSw4OCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCisvKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIGEgbGluZSwgd2l0aG91dCB0cmFpbGluZyBzcGFjZXMuCisgKgorICogSWYgdGhlIGxpbmUgZW5kcyB3aXRoIG5ld2xpbmUsIGl0IHdpbGwgYmUgcmVtb3ZlZCB0b28uCisgKi8KK3N0YXRpYyBzaXplX3QgY2xlYW51cChjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCXdoaWxlIChsZW4pIHsKKwkJdW5zaWduZWQgY2hhciBjID0gbGluZVtsZW4gLSAxXTsKKwkJaWYgKCFpc3NwYWNlKGMpKQorCQkJYnJlYWs7CisJCWxlbi0tOworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBSZW1vdmUgZW1wdHkgbGluZXMgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBlbmQKKyAqIGFuZCBhbHNvIHRyYWlsaW5nIHNwYWNlcyBmcm9tIGV2ZXJ5IGxpbmUuCisgKgorICogVHVybiBtdWx0aXBsZSBjb25zZWN1dGl2ZSBlbXB0eSBsaW5lcyBiZXR3ZWVuIHBhcmFncmFwaHMKKyAqIGludG8ganVzdCBvbmUgZW1wdHkgbGluZS4KKyAqCisgKiBJZiB0aGUgaW5wdXQgaGFzIG9ubHkgZW1wdHkgbGluZXMgYW5kIHNwYWNlcywKKyAqIG5vIG91dHB1dCB3aWxsIGJlIHByb2R1Y2VkLgorICoKKyAqIElmIGxhc3QgbGluZSBkb2VzIG5vdCBoYXZlIGEgbmV3bGluZSBhdCB0aGUgZW5kLCBvbmUgaXMgYWRkZWQuCisgKgorICogRW5hYmxlIHNraXBfY29tbWVudHMgdG8gc2tpcCBldmVyeSBsaW5lIHN0YXJ0aW5nIHdpdGggIiMiLgorICovCit2b2lkIHN0cmlwc3BhY2Uoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBza2lwX2NvbW1lbnRzKQoreworCWludCBlbXB0aWVzID0gMDsKKwlzaXplX3QgaSwgaiwgbGVuLCBuZXdsZW47CisJY2hhciAqZW9sOworCisJLyogV2UgbWF5IGhhdmUgdG8gYWRkIGEgbmV3bGluZS4gKi8KKwlzdHJidWZfZ3JvdyhzYiwgMSk7CisKKwlmb3IgKGkgPSBqID0gMDsgaSA8IHNiLT5sZW47IGkgKz0gbGVuLCBqICs9IG5ld2xlbikgeworCQllb2wgPSBtZW1jaHIoc2ItPmJ1ZiArIGksICdcbicsIHNiLT5sZW4gLSBpKTsKKwkJbGVuID0gZW9sID8gZW9sIC0gKHNiLT5idWYgKyBpKSArIDEgOiBzYi0+bGVuIC0gaTsKKworCQlpZiAoc2tpcF9jb21tZW50cyAmJiBsZW4gJiYgc2ItPmJ1ZltpXSA9PSAnIycpIHsKKwkJCW5ld2xlbiA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQluZXdsZW4gPSBjbGVhbnVwKHNiLT5idWYgKyBpLCBsZW4pOworCisJCS8qIE5vdCBqdXN0IGFuIGVtcHR5IGxpbmU/ICovCisJCWlmIChuZXdsZW4pIHsKKwkJCWlmIChlbXB0aWVzID4gMCAmJiBqID4gMCkKKwkJCQlzYi0+YnVmW2orK10gPSAnXG4nOworCQkJZW1wdGllcyA9IDA7CisJCQltZW1tb3ZlKHNiLT5idWYgKyBqLCBzYi0+YnVmICsgaSwgbmV3bGVuKTsKKwkJCXNiLT5idWZbbmV3bGVuICsgaisrXSA9ICdcbic7CisJCX0gZWxzZSB7CisJCQllbXB0aWVzKys7CisJCX0KKwl9CisKKwlzdHJidWZfc2V0bGVuKHNiLCBqKTsKK30KKworaW50IGNtZF9zdHJpcHNwYWNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHN0cmlwX2NvbW1lbnRzID0gMDsKKworCWlmIChhcmdjID09IDIgJiYgKCFzdHJjbXAoYXJndlsxXSwgIi1zIikgfHwKKwkJCQkhc3RyY21wKGFyZ3ZbMV0sICItLXN0cmlwLWNvbW1lbnRzIikpKQorCQlzdHJpcF9jb21tZW50cyA9IDE7CisJZWxzZSBpZiAoYXJnYyA+IDEpCisJCXVzYWdlKCJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSA8IGlucHV0Iik7CisKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMTAyNCkgPCAwKQorCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIHRoZSBpbnB1dCIpOworCisJc3RyaXBzcGFjZSgmYnVmLCBzdHJpcF9jb21tZW50cyk7CisKKwl3cml0ZV9vcl9kaWUoMSwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3N5bWJvbGljLXJlZi5jIGIvYnVpbHRpbi9zeW1ib2xpYy1yZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTkyODI4Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zeW1ib2xpYy1yZWYuYwpAQCAtMCwwICsxLDYzIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfc3ltYm9saWNfcmVmX3VzYWdlW10gPSB7CisJTl8oImdpdCBzeW1ib2xpYy1yZWYgW29wdGlvbnNdIG5hbWUgW3JlZl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHNob3J0ZW47CisKK3N0YXRpYyB2b2lkIGNoZWNrX3N5bXJlZihjb25zdCBjaGFyICpIRUFELCBpbnQgcXVpZXQpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgZmxhZzsKKwljb25zdCBjaGFyICpyZWZuYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKEhFQUQsIHNoYTEsIDAsICZmbGFnKTsKKworCWlmICghcmVmbmFtZSkKKwkJZGllKCJObyBzdWNoIHJlZjogJXMiLCBIRUFEKTsKKwllbHNlIGlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKSB7CisJCWlmICghcXVpZXQpCisJCQlkaWUoInJlZiAlcyBpcyBub3QgYSBzeW1ib2xpYyByZWYiLCBIRUFEKTsKKwkJZWxzZQorCQkJZXhpdCgxKTsKKwl9CisJaWYgKHNob3J0ZW4pCisJCXJlZm5hbWUgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihyZWZuYW1lLCAwKTsKKwlwdXRzKHJlZm5hbWUpOworfQorCitpbnQgY21kX3N5bWJvbGljX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcXVpZXQgPSAwOworCWNvbnN0IGNoYXIgKm1zZyA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LAorCQkJTl8oInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiKSksCisJCU9QVF9CT09MKDAsICJzaG9ydCIsICZzaG9ydGVuLCBOXygic2hvcnRlbiByZWYgb3V0cHV0IikpLAorCQlPUFRfU1RSSU5HKCdtJywgTlVMTCwgJm1zZywgTl8oInJlYXNvbiIpLCBOXygicmVhc29uIG9mIHRoZSB1cGRhdGUiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N5bWJvbGljX3JlZl91c2FnZSwgMCk7CisJaWYgKG1zZyAmJiEqbXNnKQorCQlkaWUoIlJlZnVzaW5nIHRvIHBlcmZvcm0gdXBkYXRlIHdpdGggZW1wdHkgbWVzc2FnZSIpOworCXN3aXRjaCAoYXJnYykgeworCWNhc2UgMToKKwkJY2hlY2tfc3ltcmVmKGFyZ3ZbMF0sIHF1aWV0KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpZiAoIXN0cmNtcChhcmd2WzBdLCAiSEVBRCIpICYmCisJCSAgICBwcmVmaXhjbXAoYXJndlsxXSwgInJlZnMvIikpCisJCQlkaWUoIlJlZnVzaW5nIHRvIHBvaW50IEhFQUQgb3V0c2lkZSBvZiByZWZzLyIpOworCQljcmVhdGVfc3ltcmVmKGFyZ3ZbMF0sIGFyZ3ZbMV0sIG1zZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfc3ltYm9saWNfcmVmX3VzYWdlLCBvcHRpb25zKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3RhZy5jIGIvYnVpbHRpbi90YWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNlMDY3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi90YWcuYwpAQCAtMCwwICsxLDU5MyBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCB0YWciCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+LAorICogICAgICAgICAgICAgICAgICAgIENhcmxvcyBSaWNhIDxqYXNhbXBsZXJAZ21haWwuY29tPgorICogQmFzZWQgb24gZ2l0LXRhZy5zaCBhbmQgbWt0YWcuYyBieSBMaW51cyBUb3J2YWxkcy4KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3RhZ191c2FnZVtdID0geworCU5fKCJnaXQgdGFnIFstYXwtc3wtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz58LUYgPGZpbGU+XSA8dGFnbmFtZT4gWzxoZWFkPl0iKSwKKwlOXygiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iKSwKKwlOXygiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSAiCisJCSJcblx0XHRbPHBhdHRlcm4+Li4uXSIpLAorCU5fKCJnaXQgdGFnIC12IDx0YWduYW1lPi4uLiIpLAorCU5VTEwKK307CisKK3N0cnVjdCB0YWdfZmlsdGVyIHsKKwljb25zdCBjaGFyICoqcGF0dGVybnM7CisJaW50IGxpbmVzOworCXN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQ7Cit9OworCitzdGF0aWMgc3RydWN0IHNoYTFfYXJyYXkgcG9pbnRzX2F0Oworc3RhdGljIHVuc2lnbmVkIGludCBjb2xvcHRzOworCitzdGF0aWMgaW50IG1hdGNoX3BhdHRlcm4oY29uc3QgY2hhciAqKnBhdHRlcm5zLCBjb25zdCBjaGFyICpyZWYpCit7CisJLyogbm8gcGF0dGVybiBtZWFucyBtYXRjaCBldmVyeXRoaW5nICovCisJaWYgKCEqcGF0dGVybnMpCisJCXJldHVybiAxOworCWZvciAoOyAqcGF0dGVybnM7IHBhdHRlcm5zKyspCisJCWlmICghZm5tYXRjaCgqcGF0dGVybnMsIHJlZiwgMCkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1hdGNoX3BvaW50c19hdChjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICp0YWdnZWRfc2hhMSA9IE5VTEw7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJaWYgKHNoYTFfYXJyYXlfbG9va3VwKCZwb2ludHNfYXQsIHNoYTEpID49IDApCisJCXJldHVybiBzaGExOworCW9iaiA9IHBhcnNlX29iamVjdChzaGExKTsKKwlpZiAoIW9iaikKKwkJZGllKF8oIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIpLCByZWZuYW1lKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpCisJCXRhZ2dlZF9zaGExID0gKChzdHJ1Y3QgdGFnICopb2JqKS0+dGFnZ2VkLT5zaGExOworCWlmICh0YWdnZWRfc2hhMSAmJiBzaGExX2FycmF5X2xvb2t1cCgmcG9pbnRzX2F0LCB0YWdnZWRfc2hhMSkgPj0gMCkKKwkJcmV0dXJuIHRhZ2dlZF9zaGExOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGluX2NvbW1pdF9saXN0KGNvbnN0IHN0cnVjdCBjb21taXRfbGlzdCAqd2FudCwgc3RydWN0IGNvbW1pdCAqYykKK3sKKwlmb3IgKDsgd2FudDsgd2FudCA9IHdhbnQtPm5leHQpCisJCWlmICghaGFzaGNtcCh3YW50LT5pdGVtLT5vYmplY3Quc2hhMSwgYy0+b2JqZWN0LnNoYTEpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29udGFpbnNfcmVjdXJzZShzdHJ1Y3QgY29tbWl0ICpjYW5kaWRhdGUsCisJCQkgICAgY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICp3YW50KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCS8qIHdhcyBpdCBwcmV2aW91c2x5IG1hcmtlZCBhcyBjb250YWluaW5nIGEgd2FudCBjb21taXQ/ICovCisJaWYgKGNhbmRpZGF0ZS0+b2JqZWN0LmZsYWdzICYgVE1QX01BUkspCisJCXJldHVybiAxOworCS8qIG9yIG1hcmtlZCBhcyBub3QgcG9zc2libHkgY29udGFpbmluZyBhIHdhbnQgY29tbWl0PyAqLworCWlmIChjYW5kaWRhdGUtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXJldHVybiAwOworCS8qIG9yIGFyZSB3ZSBpdD8gKi8KKwlpZiAoaW5fY29tbWl0X2xpc3Qod2FudCwgY2FuZGlkYXRlKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAocGFyc2VfY29tbWl0KGNhbmRpZGF0ZSkgPCAwKQorCQlyZXR1cm4gMDsKKworCS8qIE90aGVyd2lzZSByZWN1cnNlIGFuZCBtYXJrIG91cnNlbHZlcyBmb3IgZnV0dXJlIHRyYXZlcnNhbHMuICovCisJZm9yIChwID0gY2FuZGlkYXRlLT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAoY29udGFpbnNfcmVjdXJzZShwLT5pdGVtLCB3YW50KSkgeworCQkJY2FuZGlkYXRlLT5vYmplY3QuZmxhZ3MgfD0gVE1QX01BUks7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwljYW5kaWRhdGUtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbnRhaW5zKHN0cnVjdCBjb21taXQgKmNhbmRpZGF0ZSwgY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICp3YW50KQoreworCXJldHVybiBjb250YWluc19yZWN1cnNlKGNhbmRpZGF0ZSwgd2FudCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfdGFnX2xpbmVzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBsaW5lcykKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZiwgKnNwLCAqZW9sOworCXNpemVfdCBsZW47CisKKwlidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byByZWFkIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlpZiAodHlwZSAhPSBPQkpfQ09NTUlUICYmIHR5cGUgIT0gT0JKX1RBRykKKwkJZ290byBmcmVlX3JldHVybjsKKwlpZiAoIXNpemUpCisJCWRpZSgiYW4gZW1wdHkgJXMgb2JqZWN0ICVzPyIsCisJCSAgICB0eXBlbmFtZSh0eXBlKSwgc2hhMV90b19oZXgoc2hhMSkpOworCisJLyogc2tpcCBoZWFkZXIgKi8KKwlzcCA9IHN0cnN0cihidWYsICJcblxuIik7CisJaWYgKCFzcCkKKwkJZ290byBmcmVlX3JldHVybjsKKworCS8qIG9ubHkgdGFrZSB1cCB0byAibGluZXMiIGxpbmVzLCBhbmQgc3RyaXAgdGhlIHNpZ25hdHVyZSBmcm9tIGEgdGFnICovCisJaWYgKHR5cGUgPT0gT0JKX1RBRykKKwkJc2l6ZSA9IHBhcnNlX3NpZ25hdHVyZShidWYsIHNpemUpOworCWZvciAoaSA9IDAsIHNwICs9IDI7IGkgPCBsaW5lcyAmJiBzcCA8IGJ1ZiArIHNpemU7IGkrKykgeworCQlpZiAoaSkKKwkJCXByaW50ZigiXG4gICAgIik7CisJCWVvbCA9IG1lbWNocihzcCwgJ1xuJywgc2l6ZSAtIChzcCAtIGJ1ZikpOworCQlsZW4gPSBlb2wgPyBlb2wgLSBzcCA6IHNpemUgLSAoc3AgLSBidWYpOworCQlmd3JpdGUoc3AsIGxlbiwgMSwgc3Rkb3V0KTsKKwkJaWYgKCFlb2wpCisJCQlicmVhazsKKwkJc3AgPSBlb2wgKyAxOworCX0KK2ZyZWVfcmV0dXJuOgorCWZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCBzaG93X3JlZmVyZW5jZShjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgdGFnX2ZpbHRlciAqZmlsdGVyID0gY2JfZGF0YTsKKworCWlmIChtYXRjaF9wYXR0ZXJuKGZpbHRlci0+cGF0dGVybnMsIHJlZm5hbWUpKSB7CisJCWlmIChmaWx0ZXItPndpdGhfY29tbWl0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwkJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzaGExLCAxKTsKKwkJCWlmICghY29tbWl0KQorCQkJCXJldHVybiAwOworCQkJaWYgKCFjb250YWlucyhjb21taXQsIGZpbHRlci0+d2l0aF9jb21taXQpKQorCQkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKHBvaW50c19hdC5uciAmJiAhbWF0Y2hfcG9pbnRzX2F0KHJlZm5hbWUsIHNoYTEpKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKCFmaWx0ZXItPmxpbmVzKSB7CisJCQlwcmludGYoIiVzXG4iLCByZWZuYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisJCXByaW50ZigiJS0xNXMgIiwgcmVmbmFtZSk7CisJCXNob3dfdGFnX2xpbmVzKHNoYTEsIGZpbHRlci0+bGluZXMpOworCQlwdXRjaGFyKCdcbicpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpc3RfdGFncyhjb25zdCBjaGFyICoqcGF0dGVybnMsIGludCBsaW5lcywKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQpCit7CisJc3RydWN0IHRhZ19maWx0ZXIgZmlsdGVyOworCisJZmlsdGVyLnBhdHRlcm5zID0gcGF0dGVybnM7CisJZmlsdGVyLmxpbmVzID0gbGluZXM7CisJZmlsdGVyLndpdGhfY29tbWl0ID0gd2l0aF9jb21taXQ7CisKKwlmb3JfZWFjaF90YWdfcmVmKHNob3dfcmVmZXJlbmNlLCAodm9pZCAqKSAmZmlsdGVyKTsKKworCXJldHVybiAwOworfQorCit0eXBlZGVmIGludCAoKmVhY2hfdGFnX25hbWVfZm4pKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZiwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworc3RhdGljIGludCBmb3JfZWFjaF90YWdfbmFtZShjb25zdCBjaGFyICoqYXJndiwgZWFjaF90YWdfbmFtZV9mbiBmbikKK3sKKwljb25zdCBjaGFyICoqcDsKKwljaGFyIHJlZltQQVRIX01BWF07CisJaW50IGhhZF9lcnJvciA9IDA7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWZvciAocCA9IGFyZ3Y7ICpwOyBwKyspIHsKKwkJaWYgKHNucHJpbnRmKHJlZiwgc2l6ZW9mKHJlZiksICJyZWZzL3RhZ3MvJXMiLCAqcCkKKwkJCQkJPj0gc2l6ZW9mKHJlZikpIHsKKwkJCWVycm9yKF8oInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIiksIDUwLCAqcCk7CisJCQloYWRfZXJyb3IgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJlYWRfcmVmKHJlZiwgc2hhMSkpIHsKKwkJCWVycm9yKF8oInRhZyAnJXMnIG5vdCBmb3VuZC4iKSwgKnApOworCQkJaGFkX2Vycm9yID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmbigqcCwgcmVmLCBzaGExKSkKKwkJCWhhZF9lcnJvciA9IDE7CisJfQorCXJldHVybiBoYWRfZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX3RhZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWYsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpZiAoZGVsZXRlX3JlZihyZWYsIHNoYTEsIDApKQorCQlyZXR1cm4gMTsKKwlwcmludGYoXygiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIiksIG5hbWUsIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZlcmlmeV90YWcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcmVmLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY29uc3QgY2hhciAqYXJndl92ZXJpZnlfdGFnW10gPSB7InZlcmlmeS10YWciLAorCQkJCQkiLXYiLCAiU0hBMV9IRVgiLCBOVUxMfTsKKwlhcmd2X3ZlcmlmeV90YWdbMl0gPSBzaGExX3RvX2hleChzaGExKTsKKworCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2X3ZlcmlmeV90YWcsIFJVTl9HSVRfQ01EKSkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCB2ZXJpZnkgdGhlIHRhZyAnJXMnIiksIG5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRvX3NpZ24oc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQoreworCXJldHVybiBzaWduX2J1ZmZlcihidWZmZXIsIGJ1ZmZlciwgZ2V0X3NpZ25pbmdfa2V5KCkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciB0YWdfdGVtcGxhdGVbXSA9CisJTl8oIlxuIgorCSIjXG4iCisJIiMgV3JpdGUgYSB0YWcgbWVzc2FnZVxuIgorCSIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZC5cbiIKKwkiI1xuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIHRhZ190ZW1wbGF0ZV9ub2NsZWFudXBbXSA9CisJTl8oIlxuIgorCSIjXG4iCisJIiMgV3JpdGUgYSB0YWcgbWVzc2FnZVxuIgorCSIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSIKKwkiIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorCSIjXG4iKTsKKworc3RhdGljIGludCBnaXRfdGFnX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpbnQgc3RhdHVzID0gZ2l0X2dwZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJaWYgKCFwcmVmaXhjbXAodmFyLCAiY29sdW1uLiIpKQorCQlyZXR1cm4gZ2l0X2NvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgInRhZyIsICZjb2xvcHRzKTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfdGFnX2JvZHkoaW50IGZkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmLCAqc3A7CisKKwlidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlyZXR1cm47CisJLyogc2tpcCBoZWFkZXIgKi8KKwlzcCA9IHN0cnN0cihidWYsICJcblxuIik7CisKKwlpZiAoIXNwIHx8ICFzaXplIHx8IHR5cGUgIT0gT0JKX1RBRykgeworCQlmcmVlKGJ1Zik7CisJCXJldHVybjsKKwl9CisJc3AgKz0gMjsgLyogc2tpcCB0aGUgMiBMRnMgKi8KKwl3cml0ZV9vcl9kaWUoZmQsIHNwLCBwYXJzZV9zaWduYXR1cmUoc3AsIGJ1ZiArIHNpemUgLSBzcCkpOworCisJZnJlZShidWYpOworfQorCitzdGF0aWMgaW50IGJ1aWxkX3RhZ19vYmplY3Qoc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgc2lnbiwgdW5zaWduZWQgY2hhciAqcmVzdWx0KQoreworCWlmIChzaWduICYmIGRvX3NpZ24oYnVmKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIikpOworCWlmICh3cml0ZV9zaGExX2ZpbGUoYnVmLT5idWYsIGJ1Zi0+bGVuLCB0YWdfdHlwZSwgcmVzdWx0KSA8IDApCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjcmVhdGVfdGFnX29wdGlvbnMgeworCXVuc2lnbmVkIGludCBtZXNzYWdlX2dpdmVuOjE7CisJdW5zaWduZWQgaW50IHNpZ247CisJZW51bSB7CisJCUNMRUFOVVBfTk9ORSwKKwkJQ0xFQU5VUF9TUEFDRSwKKwkJQ0xFQU5VUF9BTEwKKwl9IGNsZWFudXBfbW9kZTsKK307CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV90YWcoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0LCBjb25zdCBjaGFyICp0YWcsCisJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpidWYsIHN0cnVjdCBjcmVhdGVfdGFnX29wdGlvbnMgKm9wdCwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnByZXYsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciBoZWFkZXJfYnVmWzEwMjRdOworCWludCBoZWFkZXJfbGVuOworCWNoYXIgKnBhdGggPSBOVUxMOworCisJdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8ob2JqZWN0LCBOVUxMKTsKKwlpZiAodHlwZSA8PSBPQkpfTk9ORSkKKwkgICAgZGllKF8oImJhZCBvYmplY3QgdHlwZS4iKSk7CisKKwloZWFkZXJfbGVuID0gc25wcmludGYoaGVhZGVyX2J1Ziwgc2l6ZW9mKGhlYWRlcl9idWYpLAorCQkJICAib2JqZWN0ICVzXG4iCisJCQkgICJ0eXBlICVzXG4iCisJCQkgICJ0YWcgJXNcbiIKKwkJCSAgInRhZ2dlciAlc1xuXG4iLAorCQkJICBzaGExX3RvX2hleChvYmplY3QpLAorCQkJICB0eXBlbmFtZSh0eXBlKSwKKwkJCSAgdGFnLAorCQkJICBnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfU1RSSUNUKSk7CisKKwlpZiAoaGVhZGVyX2xlbiA+IHNpemVvZihoZWFkZXJfYnVmKSAtIDEpCisJCWRpZShfKCJ0YWcgaGVhZGVyIHRvbyBiaWcuIikpOworCisJaWYgKCFvcHQtPm1lc3NhZ2VfZ2l2ZW4pIHsKKwkJaW50IGZkOworCisJCS8qIHdyaXRlIHRoZSB0ZW1wbGF0ZSBtZXNzYWdlIGJlZm9yZSBlZGl0aW5nOiAqLworCQlwYXRoID0gZ2l0X3BhdGhkdXAoIlRBR19FRElUTVNHIik7CisJCWZkID0gb3BlbihwYXRoLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZLCAwNjAwKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIpLCBwYXRoKTsKKworCQlpZiAoIWlzX251bGxfc2hhMShwcmV2KSkKKwkJCXdyaXRlX3RhZ19ib2R5KGZkLCBwcmV2KTsKKwkJZWxzZSBpZiAob3B0LT5jbGVhbnVwX21vZGUgPT0gQ0xFQU5VUF9BTEwpCisJCQl3cml0ZV9vcl9kaWUoZmQsIF8odGFnX3RlbXBsYXRlKSwKKwkJCQkJc3RybGVuKF8odGFnX3RlbXBsYXRlKSkpOworCQllbHNlCisJCQl3cml0ZV9vcl9kaWUoZmQsIF8odGFnX3RlbXBsYXRlX25vY2xlYW51cCksCisJCQkJCXN0cmxlbihfKHRhZ190ZW1wbGF0ZV9ub2NsZWFudXApKSk7CisJCWNsb3NlKGZkKTsKKworCQlpZiAobGF1bmNoX2VkaXRvcihwYXRoLCBidWYsIE5VTEwpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCV8oIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAob3B0LT5jbGVhbnVwX21vZGUgIT0gQ0xFQU5VUF9OT05FKQorCQlzdHJpcHNwYWNlKGJ1Ziwgb3B0LT5jbGVhbnVwX21vZGUgPT0gQ0xFQU5VUF9BTEwpOworCisJaWYgKCFvcHQtPm1lc3NhZ2VfZ2l2ZW4gJiYgIWJ1Zi0+bGVuKQorCQlkaWUoXygibm8gdGFnIG1lc3NhZ2U/IikpOworCisJc3RyYnVmX2luc2VydChidWYsIDAsIGhlYWRlcl9idWYsIGhlYWRlcl9sZW4pOworCisJaWYgKGJ1aWxkX3RhZ19vYmplY3QoYnVmLCBvcHQtPnNpZ24sIHJlc3VsdCkgPCAwKSB7CisJCWlmIChwYXRoKQorCQkJZnByaW50ZihzdGRlcnIsIF8oIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iKSwKKwkJCQlwYXRoKTsKKwkJZXhpdCgxMjgpOworCX0KKwlpZiAocGF0aCkgeworCQl1bmxpbmtfb3Jfd2FybihwYXRoKTsKKwkJZnJlZShwYXRoKTsKKwl9Cit9CisKK3N0cnVjdCBtc2dfYXJnIHsKKwlpbnQgZ2l2ZW47CisJc3RydWN0IHN0cmJ1ZiBidWY7Cit9OworCitzdGF0aWMgaW50IHBhcnNlX21zZ19hcmcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgbXNnX2FyZyAqbXNnID0gb3B0LT52YWx1ZTsKKworCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisJaWYgKG1zZy0+YnVmLmxlbikKKwkJc3RyYnVmX2FkZHN0cigmKG1zZy0+YnVmKSwgIlxuXG4iKTsKKwlzdHJidWZfYWRkc3RyKCYobXNnLT5idWYpLCBhcmcpOworCW1zZy0+Z2l2ZW4gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0cmJ1Zl9jaGVja190YWdfcmVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChuYW1lWzBdID09ICctJykKKwkJcmV0dXJuIC0xOworCisJc3RyYnVmX3Jlc2V0KHNiKTsKKwlzdHJidWZfYWRkZihzYiwgInJlZnMvdGFncy8lcyIsIG5hbWUpOworCisJcmV0dXJuIGNoZWNrX3JlZm5hbWVfZm9ybWF0KHNiLT5idWYsIDApOworfQorCitzdGF0aWMgaW50IHBhcnNlX29wdF9wb2ludHNfYXQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAorCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWlmICh1bnNldCkgeworCQlzaGExX2FycmF5X2NsZWFyKCZwb2ludHNfYXQpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFhcmcpCisJCXJldHVybiBlcnJvcihfKCJzd2l0Y2ggJ3BvaW50cy1hdCcgcmVxdWlyZXMgYW4gb2JqZWN0IikpOworCWlmIChnZXRfc2hhMShhcmcsIHNoYTEpKQorCQlyZXR1cm4gZXJyb3IoXygibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciKSwgYXJnKTsKKwlzaGExX2FycmF5X2FwcGVuZCgmcG9pbnRzX2F0LCBzaGExKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF90YWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgb2JqZWN0WzIwXSwgcHJldlsyMF07CisJY29uc3QgY2hhciAqb2JqZWN0X3JlZiwgKnRhZzsKKwlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7CisJc3RydWN0IGNyZWF0ZV90YWdfb3B0aW9ucyBvcHQ7CisJY2hhciAqY2xlYW51cF9hcmcgPSBOVUxMOworCWludCBhbm5vdGF0ZSA9IDAsIGZvcmNlID0gMCwgbGluZXMgPSAtMSwgbGlzdCA9IDAsCisJCWRlbGV0ZSA9IDAsIHZlcmlmeSA9IDA7CisJY29uc3QgY2hhciAqbXNnZmlsZSA9IE5VTEwsICprZXlpZCA9IE5VTEw7CisJc3RydWN0IG1zZ19hcmcgbXNnID0geyAwLCBTVFJCVUZfSU5JVCB9OworCXN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTEVBTignbCcsICJsaXN0IiwgJmxpc3QsIE5fKCJsaXN0IHRhZyBuYW1lcyIpKSwKKwkJeyBPUFRJT05fSU5URUdFUiwgJ24nLCBOVUxMLCAmbGluZXMsIE5fKCJuIiksCisJCQkJTl8oInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIiksCisJCQkJUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgMSB9LAorCQlPUFRfQk9PTEVBTignZCcsICJkZWxldGUiLCAmZGVsZXRlLCBOXygiZGVsZXRlIHRhZ3MiKSksCisJCU9QVF9CT09MRUFOKCd2JywgInZlcmlmeSIsICZ2ZXJpZnksIE5fKCJ2ZXJpZnkgdGFncyIpKSwKKworCQlPUFRfR1JPVVAoTl8oIlRhZyBjcmVhdGlvbiBvcHRpb25zIikpLAorCQlPUFRfQk9PTEVBTignYScsICJhbm5vdGF0ZSIsICZhbm5vdGF0ZSwKKwkJCQkJTl8oImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIpKSwKKwkJT1BUX0NBTExCQUNLKCdtJywgIm1lc3NhZ2UiLCAmbXNnLCBOXygibWVzc2FnZSIpLAorCQkJICAgICBOXygidGFnIG1lc3NhZ2UiKSwgcGFyc2VfbXNnX2FyZyksCisJCU9QVF9GSUxFTkFNRSgnRicsICJmaWxlIiwgJm1zZ2ZpbGUsIE5fKCJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIikpLAorCQlPUFRfQk9PTEVBTigncycsICJzaWduIiwgJm9wdC5zaWduLCBOXygiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIpKSwKKwkJT1BUX1NUUklORygwLCAiY2xlYW51cCIsICZjbGVhbnVwX2FyZywgTl8oIm1vZGUiKSwKKwkJCU5fKCJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIikpLAorCQlPUFRfU1RSSU5HKCd1JywgImxvY2FsLXVzZXIiLCAma2V5aWQsIE5fKCJrZXkgaWQiKSwKKwkJCQkJTl8oInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIpKSwKKwkJT1BUX0NPTFVNTigwLCAiY29sdW1uIiwgJmNvbG9wdHMsIE5fKCJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiKSksCisKKwkJT1BUX0dST1VQKE5fKCJUYWcgbGlzdGluZyBvcHRpb25zIikpLAorCQl7CisJCQlPUFRJT05fQ0FMTEJBQ0ssIDAsICJjb250YWlucyIsICZ3aXRoX2NvbW1pdCwgTl8oImNvbW1pdCIpLAorCQkJTl8oInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIpLAorCQkJUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCwKKwkJCXBhcnNlX29wdF93aXRoX2NvbW1pdCwgKGludHB0cl90KSJIRUFEIiwKKwkJfSwKKwkJeworCQkJT1BUSU9OX0NBTExCQUNLLCAwLCAicG9pbnRzLWF0IiwgTlVMTCwgTl8oIm9iamVjdCIpLAorCQkJTl8oInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IiksIDAsIHBhcnNlX29wdF9wb2ludHNfYXQKKwkJfSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X3RhZ19jb25maWcsIE5VTEwpOworCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3RhZ191c2FnZSwgMCk7CisKKwlpZiAoa2V5aWQpIHsKKwkJb3B0LnNpZ24gPSAxOworCQlzZXRfc2lnbmluZ19rZXkoa2V5aWQpOworCX0KKwlpZiAob3B0LnNpZ24pCisJCWFubm90YXRlID0gMTsKKwlpZiAoYXJnYyA9PSAwICYmICEoZGVsZXRlIHx8IHZlcmlmeSkpCisJCWxpc3QgPSAxOworCisJaWYgKChhbm5vdGF0ZSB8fCBtc2cuZ2l2ZW4gfHwgbXNnZmlsZSB8fCBmb3JjZSkgJiYKKwkgICAgKGxpc3QgfHwgZGVsZXRlIHx8IHZlcmlmeSkpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfdGFnX3VzYWdlLCBvcHRpb25zKTsKKworCWlmIChsaXN0ICsgZGVsZXRlICsgdmVyaWZ5ID4gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF90YWdfdXNhZ2UsIG9wdGlvbnMpOworCWZpbmFsaXplX2NvbG9wdHMoJmNvbG9wdHMsIC0xKTsKKwlpZiAobGlzdCAmJiBsaW5lcyAhPSAtMSkgeworCQlpZiAoZXhwbGljaXRseV9lbmFibGVfY29sdW1uKGNvbG9wdHMpKQorCQkJZGllKF8oIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIikpOworCQljb2xvcHRzID0gMDsKKwl9CisJaWYgKGxpc3QpIHsKKwkJaW50IHJldDsKKwkJaWYgKGNvbHVtbl9hY3RpdmUoY29sb3B0cykpIHsKKwkJCXN0cnVjdCBjb2x1bW5fb3B0aW9ucyBjb3B0czsKKwkJCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCQkJY29wdHMucGFkZGluZyA9IDI7CisJCQlydW5fY29sdW1uX2ZpbHRlcihjb2xvcHRzLCAmY29wdHMpOworCQl9CisJCXJldCA9IGxpc3RfdGFncyhhcmd2LCBsaW5lcyA9PSAtMSA/IDAgOiBsaW5lcywgd2l0aF9jb21taXQpOworCQlpZiAoY29sdW1uX2FjdGl2ZShjb2xvcHRzKSkKKwkJCXN0b3BfY29sdW1uX2ZpbHRlcigpOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAobGluZXMgIT0gLTEpCisJCWRpZShfKCItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIikpOworCWlmICh3aXRoX2NvbW1pdCkKKwkJZGllKF8oIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIpKTsKKwlpZiAocG9pbnRzX2F0Lm5yKQorCQlkaWUoXygiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIpKTsKKwlpZiAoZGVsZXRlKQorCQlyZXR1cm4gZm9yX2VhY2hfdGFnX25hbWUoYXJndiwgZGVsZXRlX3RhZyk7CisJaWYgKHZlcmlmeSkKKwkJcmV0dXJuIGZvcl9lYWNoX3RhZ19uYW1lKGFyZ3YsIHZlcmlmeV90YWcpOworCisJaWYgKG1zZy5naXZlbiB8fCBtc2dmaWxlKSB7CisJCWlmIChtc2cuZ2l2ZW4gJiYgbXNnZmlsZSkKKwkJCWRpZShfKCJvbmx5IG9uZSAtRiBvciAtbSBvcHRpb24gaXMgYWxsb3dlZC4iKSk7CisJCWFubm90YXRlID0gMTsKKwkJaWYgKG1zZy5naXZlbikKKwkJCXN0cmJ1Zl9hZGRidWYoJmJ1ZiwgJihtc2cuYnVmKSk7CisJCWVsc2UgeworCQkJaWYgKCFzdHJjbXAobXNnZmlsZSwgIi0iKSkgeworCQkJCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAxMDI0KSA8IDApCisJCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgcmVhZCAnJXMnIiksIG1zZ2ZpbGUpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCBtc2dmaWxlLCAxMDI0KSA8IDApCisJCQkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciKSwKKwkJCQkJCW1zZ2ZpbGUpOworCQkJfQorCQl9CisJfQorCisJdGFnID0gYXJndlswXTsKKworCW9iamVjdF9yZWYgPSBhcmdjID09IDIgPyBhcmd2WzFdIDogIkhFQUQiOworCWlmIChhcmdjID4gMikKKwkJZGllKF8oInRvbyBtYW55IHBhcmFtcyIpKTsKKworCWlmIChnZXRfc2hhMShvYmplY3RfcmVmLCBvYmplY3QpKQorCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgb2JqZWN0X3JlZik7CisKKwlpZiAoc3RyYnVmX2NoZWNrX3RhZ19yZWYoJnJlZiwgdGFnKSkKKwkJZGllKF8oIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIiksIHRhZyk7CisKKwlpZiAocmVhZF9yZWYocmVmLmJ1ZiwgcHJldikpCisJCWhhc2hjbHIocHJldik7CisJZWxzZSBpZiAoIWZvcmNlKQorCQlkaWUoXygidGFnICclcycgYWxyZWFkeSBleGlzdHMiKSwgdGFnKTsKKworCW9wdC5tZXNzYWdlX2dpdmVuID0gbXNnLmdpdmVuIHx8IG1zZ2ZpbGU7CisKKwlpZiAoIWNsZWFudXBfYXJnIHx8ICFzdHJjbXAoY2xlYW51cF9hcmcsICJzdHJpcCIpKQorCQlvcHQuY2xlYW51cF9tb2RlID0gQ0xFQU5VUF9BTEw7CisJZWxzZSBpZiAoIXN0cmNtcChjbGVhbnVwX2FyZywgInZlcmJhdGltIikpCisJCW9wdC5jbGVhbnVwX21vZGUgPSBDTEVBTlVQX05PTkU7CisJZWxzZSBpZiAoIXN0cmNtcChjbGVhbnVwX2FyZywgIndoaXRlc3BhY2UiKSkKKwkJb3B0LmNsZWFudXBfbW9kZSA9IENMRUFOVVBfU1BBQ0U7CisJZWxzZQorCQlkaWUoXygiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiKSwgY2xlYW51cF9hcmcpOworCisJaWYgKGFubm90YXRlKQorCQljcmVhdGVfdGFnKG9iamVjdCwgdGFnLCAmYnVmLCAmb3B0LCBwcmV2LCBvYmplY3QpOworCisJbG9jayA9IGxvY2tfYW55X3JlZl9mb3JfdXBkYXRlKHJlZi5idWYsIHByZXYsIDApOworCWlmICghbG9jaykKKwkJZGllKF8oIiVzOiBjYW5ub3QgbG9jayB0aGUgcmVmIiksIHJlZi5idWYpOworCWlmICh3cml0ZV9yZWZfc2hhMShsb2NrLCBvYmplY3QsIE5VTEwpIDwgMCkKKwkJZGllKF8oIiVzOiBjYW5ub3QgdXBkYXRlIHRoZSByZWYiKSwgcmVmLmJ1Zik7CisJaWYgKGZvcmNlICYmIGhhc2hjbXAocHJldiwgb2JqZWN0KSkKKwkJcHJpbnRmKF8oIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIpLCB0YWcsIGZpbmRfdW5pcXVlX2FiYnJldihwcmV2LCBERUZBVUxUX0FCQlJFVikpOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnJlZik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Rhci10cmVlLmMgYi9idWlsdGluL3Rhci10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxZTcwMQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdGFyLXRyZWUuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBSZW5lIFNjaGFyZmUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFyLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHRhcl90cmVlX3VzYWdlW10gPQorImdpdCB0YXItdHJlZSBbLS1yZW1vdGU9PHJlcG8+XSA8dHJlZS1pc2g+IFtiYXNlZGlyXVxuIgorIioqKiBOb3RlIHRoYXQgdGhpcyBjb21tYW5kIGlzIG5vdyBkZXByZWNhdGVkOyB1c2UgXCJnaXQgYXJjaGl2ZVwiIGluc3RlYWQuIjsKKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9nZXRfdGFyX2NvbW1pdF9pZF91c2FnZVtdID0KKyJnaXQgZ2V0LXRhci1jb21taXQtaWQgPCA8dGFyZmlsZT4iOworCitpbnQgY21kX3Rhcl90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCS8qCisJICogImdpdCB0YXItdHJlZSIgaXMgbm93IGEgd3JhcHBlciBhcm91bmQgImdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciIKKwkgKgorCSAqICQwIC0tcmVtb3RlPTxyZXBvPiBhcmcuLi4gPT0+CisJICoJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIC0tcmVtb3RlPTxyZXBvPiBhcmcuLi4KKwkgKiAkMCB0cmVlLWlzaCA9PT4KKwkgKglnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgdHJlZS1pc2gKKwkgKiAkMCB0cmVlLWlzaCBiYXNlZGlyID09PgorCSAqIAlnaXQgYXJjaGl2ZSAtLWZvcm1hdC10YXIgLS1wcmVmaXg9YmFzZWRpciB0cmVlLWlzaAorCSAqLworCWludCBpOworCWNvbnN0IGNoYXIgKipuYXJndiA9IHhjYWxsb2Moc2l6ZW9mKCpuYXJndiksIGFyZ2MgKyAzKTsKKwljaGFyICpiYXNlZGlyX2FyZzsKKwlpbnQgbmFyZ2MgPSAwOworCisJbmFyZ3ZbbmFyZ2MrK10gPSAiYXJjaGl2ZSI7CisJbmFyZ3ZbbmFyZ2MrK10gPSAiLS1mb3JtYXQ9dGFyIjsKKworCWlmICgyIDw9IGFyZ2MgJiYgIXByZWZpeGNtcChhcmd2WzFdLCAiLS1yZW1vdGU9IikpIHsKKwkJbmFyZ3ZbbmFyZ2MrK10gPSBhcmd2WzFdOworCQlhcmd2Kys7CisJCWFyZ2MtLTsKKwl9CisKKwkvKgorCSAqIEJlY2F1c2UgaXQncyBqdXN0IGEgY29tcGF0aWJpbGl0eSB3cmFwcGVyLCB0YXItdHJlZSBzdXBwb3J0cyBvbmx5CisJICogdGhlIG9sZCBiZWhhdmlvdXIgb2YgcmVhZGluZyBhdHRyaWJ1dGVzIGZyb20gdGhlIHdvcmsgdHJlZS4KKwkgKi8KKwluYXJndltuYXJnYysrXSA9ICItLXdvcmt0cmVlLWF0dHJpYnV0ZXMiOworCisJc3dpdGNoIChhcmdjKSB7CisJZGVmYXVsdDoKKwkJdXNhZ2UodGFyX3RyZWVfdXNhZ2UpOworCQlicmVhazsKKwljYXNlIDM6CisJCS8qIGJhc2UtcGF0aCAqLworCQliYXNlZGlyX2FyZyA9IHhtYWxsb2Moc3RybGVuKGFyZ3ZbMl0pICsgMTEpOworCQlzcHJpbnRmKGJhc2VkaXJfYXJnLCAiLS1wcmVmaXg9JXMvIiwgYXJndlsyXSk7CisJCW5hcmd2W25hcmdjKytdID0gYmFzZWRpcl9hcmc7CisJCS8qIGZhbGx0aHJ1ICovCisJY2FzZSAyOgorCQkvKiB0cmVlLWlzaCAqLworCQluYXJndltuYXJnYysrXSA9IGFyZ3ZbMV07CisJfQorCW5hcmd2W25hcmdjXSA9IE5VTEw7CisKKwlmcHJpbnRmKHN0ZGVyciwKKwkJIioqKiBcImdpdCB0YXItdHJlZVwiIGlzIG5vdyBkZXByZWNhdGVkLlxuIgorCQkiKioqIFJ1bm5pbmcgXCJnaXQgYXJjaGl2ZVwiIGluc3RlYWQuXG4qKioiKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZ2M7IGkrKykgeworCQlmcHV0YygnICcsIHN0ZGVycik7CisJCXNxX3F1b3RlX3ByaW50KHN0ZGVyciwgbmFyZ3ZbaV0pOworCX0KKwlmcHV0YygnXG4nLCBzdGRlcnIpOworCXJldHVybiBjbWRfYXJjaGl2ZShuYXJnYywgbmFyZ3YsIHByZWZpeCk7Cit9CisKKy8qIHVzdGFyIGhlYWRlciArIGV4dGVuZGVkIGdsb2JhbCBoZWFkZXIgY29udGVudCAqLworI2RlZmluZSBSRUNPUkRTSVpFCSg1MTIpCisjZGVmaW5lIEhFQURFUlNJWkUgKDIgKiBSRUNPUkRTSVpFKQorCitpbnQgY21kX2dldF90YXJfY29tbWl0X2lkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNoYXIgYnVmZmVyW0hFQURFUlNJWkVdOworCXN0cnVjdCB1c3Rhcl9oZWFkZXIgKmhlYWRlciA9IChzdHJ1Y3QgdXN0YXJfaGVhZGVyICopYnVmZmVyOworCWNoYXIgKmNvbnRlbnQgPSBidWZmZXIgKyBSRUNPUkRTSVpFOworCXNzaXplX3QgbjsKKworCWlmIChhcmdjICE9IDEpCisJCXVzYWdlKGJ1aWx0aW5fZ2V0X3Rhcl9jb21taXRfaWRfdXNhZ2UpOworCisJbiA9IHJlYWRfaW5fZnVsbCgwLCBidWZmZXIsIEhFQURFUlNJWkUpOworCWlmIChuIDwgSEVBREVSU0laRSkKKwkJZGllKCJnaXQgZ2V0LXRhci1jb21taXQtaWQ6IHJlYWQgZXJyb3IiKTsKKwlpZiAoaGVhZGVyLT50eXBlZmxhZ1swXSAhPSAnZycpCisJCXJldHVybiAxOworCWlmIChtZW1jbXAoY29udGVudCwgIjUyIGNvbW1lbnQ9IiwgMTEpKQorCQlyZXR1cm4gMTsKKworCW4gPSB3cml0ZV9pbl9mdWxsKDEsIGNvbnRlbnQgKyAxMSwgNDEpOworCWlmIChuIDwgNDEpCisJCWRpZV9lcnJubygiZ2l0IGdldC10YXItY29tbWl0LWlkOiB3cml0ZSBlcnJvciIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VucGFjay1maWxlLmMgYi9idWlsdGluL3VucGFjay1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyMDAyOQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdW5wYWNrLWZpbGUuYwpAQCAtMCwwICsxLDM2IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorCitzdGF0aWMgY2hhciAqY3JlYXRlX3RlbXBfZmlsZSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRpYyBjaGFyIHBhdGhbNTBdOworCXZvaWQgKmJ1ZjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBmZDsKKworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYgfHwgdHlwZSAhPSBPQkpfQkxPQikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBibG9iIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCXN0cmNweShwYXRoLCAiLm1lcmdlX2ZpbGVfWFhYWFhYIik7CisJZmQgPSB4bWtzdGVtcChwYXRoKTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLCBzaXplKSAhPSBzaXplKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKKwljbG9zZShmZCk7CisJcmV0dXJuIHBhdGg7Cit9CisKK2ludCBjbWRfdW5wYWNrX2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWlmIChhcmdjICE9IDIgfHwgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoImdpdCB1bnBhY2stZmlsZSA8c2hhMT4iKTsKKwlpZiAoZ2V0X3NoYTEoYXJndlsxXSwgc2hhMSkpCisJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmd2WzFdKTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCXB1dHMoY3JlYXRlX3RlbXBfZmlsZShzaGExKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VucGFjay1vYmplY3RzLmMgYi9idWlsdGluL3VucGFjay1vYmplY3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxN2Q3YgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYwpAQCAtMCwwICsxLDU2OCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgImZzY2suaCIKKworc3RhdGljIGludCBkcnlfcnVuLCBxdWlldCwgcmVjb3ZlciwgaGFzX2Vycm9ycywgc3RyaWN0Oworc3RhdGljIGNvbnN0IGNoYXIgdW5wYWNrX3VzYWdlW10gPSAiZ2l0IHVucGFjay1vYmplY3RzIFstbl0gWy1xXSBbLXJdIFstLXN0cmljdF0gPCBwYWNrLWZpbGUiOworCisvKiBXZSBhbHdheXMgcmVhZCBpbiA0a0IgY2h1bmtzLiAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzQwOTZdOworc3RhdGljIHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjsKK3N0YXRpYyBvZmZfdCBjb25zdW1lZF9ieXRlczsKK3N0YXRpYyBnaXRfU0hBX0NUWCBjdHg7CisKKy8qCisgKiBXaGVuIHJ1bm5pbmcgdW5kZXIgLS1zdHJpY3QgbW9kZSwgb2JqZWN0cyB3aG9zZSByZWFjaGFiaWxpdHkgYXJlCisgKiBzdXNwZWN0IGFyZSBrZXB0IGluIGNvcmUgd2l0aG91dCBnZXR0aW5nIHdyaXR0ZW4gaW4gdGhlIG9iamVjdAorICogc3RvcmUuCisgKi8KK3N0cnVjdCBvYmpfYnVmZmVyIHsKKwljaGFyICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworc3RhdGljIHN0cnVjdCBkZWNvcmF0aW9uIG9ial9kZWNvcmF0ZTsKKworc3RhdGljIHN0cnVjdCBvYmpfYnVmZmVyICpsb29rdXBfb2JqZWN0X2J1ZmZlcihzdHJ1Y3Qgb2JqZWN0ICpiYXNlKQoreworCXJldHVybiBsb29rdXBfZGVjb3JhdGlvbigmb2JqX2RlY29yYXRlLCBiYXNlKTsKK30KKworc3RhdGljIHZvaWQgYWRkX29iamVjdF9idWZmZXIoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2JqX2J1ZmZlciAqb2JqOworCW9iaiA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvYmpfYnVmZmVyKSk7CisJb2JqLT5idWZmZXIgPSBidWZmZXI7CisJb2JqLT5zaXplID0gc2l6ZTsKKwlpZiAoYWRkX2RlY29yYXRpb24oJm9ial9kZWNvcmF0ZSwgb2JqZWN0LCBvYmopKQorCQlkaWUoIm9iamVjdCAlcyB0cmllZCB0byBhZGQgYnVmZmVyIHR3aWNlISIsIHNoYTFfdG9faGV4KG9iamVjdC0+c2hhMSkpOworfQorCisvKgorICogTWFrZSBzdXJlIGF0IGxlYXN0ICJtaW4iIGJ5dGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlciwgYW5kCisgKiByZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgKmZpbGwoaW50IG1pbikKK3sKKwlpZiAobWluIDw9IGxlbikKKwkJcmV0dXJuIGJ1ZmZlciArIG9mZnNldDsKKwlpZiAobWluID4gc2l6ZW9mKGJ1ZmZlcikpCisJCWRpZSgiY2Fubm90IGZpbGwgJWQgYnl0ZXMiLCBtaW4pOworCWlmIChvZmZzZXQpIHsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIGJ1ZmZlciwgb2Zmc2V0KTsKKwkJbWVtbW92ZShidWZmZXIsIGJ1ZmZlciArIG9mZnNldCwgbGVuKTsKKwkJb2Zmc2V0ID0gMDsKKwl9CisJZG8geworCQlzc2l6ZV90IHJldCA9IHhyZWFkKDAsIGJ1ZmZlciArIGxlbiwgc2l6ZW9mKGJ1ZmZlcikgLSBsZW4pOworCQlpZiAocmV0IDw9IDApIHsKKwkJCWlmICghcmV0KQorCQkJCWRpZSgiZWFybHkgRU9GIik7CisJCQlkaWVfZXJybm8oInJlYWQgZXJyb3Igb24gaW5wdXQiKTsKKwkJfQorCQlsZW4gKz0gcmV0OworCX0gd2hpbGUgKGxlbiA8IG1pbik7CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgdXNlKGludCBieXRlcykKK3sKKwlpZiAoYnl0ZXMgPiBsZW4pCisJCWRpZSgidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiKTsKKwlsZW4gLT0gYnl0ZXM7CisJb2Zmc2V0ICs9IGJ5dGVzOworCisJLyogbWFrZSBzdXJlIG9mZl90IGlzIHN1ZmZpY2llbnRseSBsYXJnZSBub3QgdG8gd3JhcCAqLworCWlmIChzaWduZWRfYWRkX292ZXJmbG93cyhjb25zdW1lZF9ieXRlcywgYnl0ZXMpKQorCQlkaWUoInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiKTsKKwljb25zdW1lZF9ieXRlcyArPSBieXRlczsKK30KKworc3RhdGljIHZvaWQgKmdldF9kYXRhKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdm9pZCAqYnVmID0geG1hbGxvYyhzaXplKTsKKworCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CisKKwlzdHJlYW0ubmV4dF9vdXQgPSBidWY7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemU7CisJc3RyZWFtLm5leHRfaW4gPSBmaWxsKDEpOworCXN0cmVhbS5hdmFpbF9pbiA9IGxlbjsKKwlnaXRfaW5mbGF0ZV9pbml0KCZzdHJlYW0pOworCisJZm9yICg7OykgeworCQlpbnQgcmV0ID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgMCk7CisJCXVzZShsZW4gLSBzdHJlYW0uYXZhaWxfaW4pOworCQlpZiAoc3RyZWFtLnRvdGFsX291dCA9PSBzaXplICYmIHJldCA9PSBaX1NUUkVBTV9FTkQpCisJCQlicmVhazsKKwkJaWYgKHJldCAhPSBaX09LKSB7CisJCQllcnJvcigiaW5mbGF0ZSByZXR1cm5lZCAlZCIsIHJldCk7CisJCQlmcmVlKGJ1Zik7CisJCQlidWYgPSBOVUxMOworCQkJaWYgKCFyZWNvdmVyKQorCQkJCWV4aXQoMSk7CisJCQloYXNfZXJyb3JzID0gMTsKKwkJCWJyZWFrOworCQl9CisJCXN0cmVhbS5uZXh0X2luID0gZmlsbCgxKTsKKwkJc3RyZWFtLmF2YWlsX2luID0gbGVuOworCX0KKwlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJcmV0dXJuIGJ1ZjsKK30KKworc3RydWN0IGRlbHRhX2luZm8geworCXVuc2lnbmVkIGNoYXIgYmFzZV9zaGExWzIwXTsKKwl1bnNpZ25lZCBucjsKKwlvZmZfdCBiYXNlX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdm9pZCAqZGVsdGE7CisJc3RydWN0IGRlbHRhX2luZm8gKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IGRlbHRhX2luZm8gKmRlbHRhX2xpc3Q7CisKK3N0YXRpYyB2b2lkIGFkZF9kZWx0YV90b19saXN0KHVuc2lnbmVkIG5yLCB1bnNpZ25lZCBjb25zdCBjaGFyICpiYXNlX3NoYTEsCisJCQkgICAgICBvZmZfdCBiYXNlX29mZnNldCwKKwkJCSAgICAgIHZvaWQgKmRlbHRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IGRlbHRhX2luZm8gKmluZm8gPSB4bWFsbG9jKHNpemVvZigqaW5mbykpOworCisJaGFzaGNweShpbmZvLT5iYXNlX3NoYTEsIGJhc2Vfc2hhMSk7CisJaW5mby0+YmFzZV9vZmZzZXQgPSBiYXNlX29mZnNldDsKKwlpbmZvLT5zaXplID0gc2l6ZTsKKwlpbmZvLT5kZWx0YSA9IGRlbHRhOworCWluZm8tPm5yID0gbnI7CisJaW5mby0+bmV4dCA9IGRlbHRhX2xpc3Q7CisJZGVsdGFfbGlzdCA9IGluZm87Cit9CisKK3N0cnVjdCBvYmpfaW5mbyB7CisJb2ZmX3Qgb2Zmc2V0OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IG9iamVjdCAqb2JqOworfTsKKworI2RlZmluZSBGTEFHX09QRU4gKDF1PDwyMCkKKyNkZWZpbmUgRkxBR19XUklUVEVOICgxdTw8MjEpCisKK3N0YXRpYyBzdHJ1Y3Qgb2JqX2luZm8gKm9ial9saXN0Oworc3RhdGljIHVuc2lnbmVkIG5yX29iamVjdHM7CisKKy8qCisgKiBDYWxsZWQgb25seSBmcm9tIGNoZWNrX29iamVjdCgpIGFmdGVyIGl0IHZlcmlmaWVkIHRoaXMgb2JqZWN0CisgKiBpcyBPay4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfY2FjaGVkX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3Qgb2JqX2J1ZmZlciAqb2JqX2J1ZiA9IGxvb2t1cF9vYmplY3RfYnVmZmVyKG9iaik7CisJaWYgKHdyaXRlX3NoYTFfZmlsZShvYmpfYnVmLT5idWZmZXIsIG9ial9idWYtPnNpemUsIHR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTEpIDwgMCkKKwkJZGllKCJmYWlsZWQgdG8gd3JpdGUgb2JqZWN0ICVzIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJb2JqLT5mbGFncyB8PSBGTEFHX1dSSVRURU47Cit9CisKKy8qCisgKiBBdCB0aGUgdmVyeSBlbmQgb2YgdGhlIHByb2Nlc3NpbmcsIHdyaXRlX3Jlc3QoKSBzY2FucyB0aGUgb2JqZWN0cworICogdGhhdCBoYXZlIHJlYWNoYWJpbGl0eSByZXF1aXJlbWVudHMgYW5kIGNhbGxzIHRoaXMgZnVuY3Rpb24uCisgKiBWZXJpZnkgaXRzIHJlYWNoYWJpbGl0eSBhbmQgdmFsaWRpdHkgcmVjdXJzaXZlbHkgYW5kIHdyaXRlIGl0IG91dC4KKyAqLworc3RhdGljIGludCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuIDE7CisKKwlpZiAob2JqLT5mbGFncyAmIEZMQUdfV1JJVFRFTikKKwkJcmV0dXJuIDA7CisKKwlpZiAodHlwZSAhPSBPQkpfQU5ZICYmIG9iai0+dHlwZSAhPSB0eXBlKQorCQlkaWUoIm9iamVjdCB0eXBlIG1pc21hdGNoIik7CisKKwlpZiAoIShvYmotPmZsYWdzICYgRkxBR19PUEVOKSkgeworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWludCB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhvYmotPnNoYTEsICZzaXplKTsKKwkJaWYgKHR5cGUgIT0gb2JqLT50eXBlIHx8IHR5cGUgPD0gMCkKKwkJCWRpZSgib2JqZWN0IG9mIHVuZXhwZWN0ZWQgdHlwZSIpOworCQlvYmotPmZsYWdzIHw9IEZMQUdfV1JJVFRFTjsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGZzY2tfb2JqZWN0KG9iaiwgMSwgZnNja19lcnJvcl9mdW5jdGlvbikpCisJCWRpZSgiRXJyb3IgaW4gb2JqZWN0Iik7CisJaWYgKGZzY2tfd2FsayhvYmosIGNoZWNrX29iamVjdCwgTlVMTCkpCisJCWRpZSgiRXJyb3Igb24gcmVhY2hhYmxlIG9iamVjdHMgb2YgJXMiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwl3cml0ZV9jYWNoZWRfb2JqZWN0KG9iaik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3Jlc3Qodm9pZCkKK3sKKwl1bnNpZ25lZCBpOworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJaWYgKG9ial9saXN0W2ldLm9iaikKKwkJCWNoZWNrX29iamVjdChvYmpfbGlzdFtpXS5vYmosIE9CSl9BTlksIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgYWRkZWRfb2JqZWN0KHVuc2lnbmVkIG5yLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyoKKyAqIFdyaXRlIG91dCBuci10aCBvYmplY3QgZnJvbSB0aGUgbGlzdCwgbm93IHdlIGtub3cgdGhlIGNvbnRlbnRzCisgKiBvZiBpdC4gIFVuZGVyIC0tc3RyaWN0LCB0aGlzIGJ1ZmZlcnMgc3RydWN0dXJlZCBvYmplY3RzIGluLWNvcmUsCisgKiB0byBiZSBjaGVja2VkIGF0IHRoZSBlbmQuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX29iamVjdCh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmICghc3RyaWN0KSB7CisJCWlmICh3cml0ZV9zaGExX2ZpbGUoYnVmLCBzaXplLCB0eXBlbmFtZSh0eXBlKSwgb2JqX2xpc3RbbnJdLnNoYTEpIDwgMCkKKwkJCWRpZSgiZmFpbGVkIHRvIHdyaXRlIG9iamVjdCIpOworCQlhZGRlZF9vYmplY3QobnIsIHR5cGUsIGJ1Ziwgc2l6ZSk7CisJCWZyZWUoYnVmKTsKKwkJb2JqX2xpc3RbbnJdLm9iaiA9IE5VTEw7CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9CTE9CKSB7CisJCXN0cnVjdCBibG9iICpibG9iOworCQlpZiAod3JpdGVfc2hhMV9maWxlKGJ1Ziwgc2l6ZSwgdHlwZW5hbWUodHlwZSksIG9ial9saXN0W25yXS5zaGExKSA8IDApCisJCQlkaWUoImZhaWxlZCB0byB3cml0ZSBvYmplY3QiKTsKKwkJYWRkZWRfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCQlmcmVlKGJ1Zik7CisKKwkJYmxvYiA9IGxvb2t1cF9ibG9iKG9ial9saXN0W25yXS5zaGExKTsKKwkJaWYgKGJsb2IpCisJCQlibG9iLT5vYmplY3QuZmxhZ3MgfD0gRkxBR19XUklUVEVOOworCQllbHNlCisJCQlkaWUoImludmFsaWQgYmxvYiBvYmplY3QiKTsKKwkJb2JqX2xpc3RbbnJdLm9iaiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqOworCQlpbnQgZWF0ZW47CisJCWhhc2hfc2hhMV9maWxlKGJ1Ziwgc2l6ZSwgdHlwZW5hbWUodHlwZSksIG9ial9saXN0W25yXS5zaGExKTsKKwkJYWRkZWRfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCQlvYmogPSBwYXJzZV9vYmplY3RfYnVmZmVyKG9ial9saXN0W25yXS5zaGExLCB0eXBlLCBzaXplLCBidWYsICZlYXRlbik7CisJCWlmICghb2JqKQorCQkJZGllKCJpbnZhbGlkICVzIiwgdHlwZW5hbWUodHlwZSkpOworCQlhZGRfb2JqZWN0X2J1ZmZlcihvYmosIGJ1Ziwgc2l6ZSk7CisJCW9iai0+ZmxhZ3MgfD0gRkxBR19PUEVOOworCQlvYmpfbGlzdFtucl0ub2JqID0gb2JqOworCX0KK30KKworc3RhdGljIHZvaWQgcmVzb2x2ZV9kZWx0YSh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICB2b2lkICpiYXNlLCB1bnNpZ25lZCBsb25nIGJhc2Vfc2l6ZSwKKwkJCSAgdm9pZCAqZGVsdGEsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSkKK3sKKwl2b2lkICpyZXN1bHQ7CisJdW5zaWduZWQgbG9uZyByZXN1bHRfc2l6ZTsKKworCXJlc3VsdCA9IHBhdGNoX2RlbHRhKGJhc2UsIGJhc2Vfc2l6ZSwKKwkJCSAgICAgZGVsdGEsIGRlbHRhX3NpemUsCisJCQkgICAgICZyZXN1bHRfc2l6ZSk7CisJaWYgKCFyZXN1bHQpCisJCWRpZSgiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIik7CisJZnJlZShkZWx0YSk7CisJd3JpdGVfb2JqZWN0KG5yLCB0eXBlLCByZXN1bHQsIHJlc3VsdF9zaXplKTsKK30KKworLyoKKyAqIFdlIG5vdyBrbm93IHRoZSBjb250ZW50cyBvZiBhbiBvYmplY3QgKHdoaWNoIGlzIG5yLXRoIGluIHRoZSBwYWNrKTsKKyAqIHJlc29sdmUgYWxsIHRoZSBkZWx0aWZpZWQgb2JqZWN0cyB0aGF0IGFyZSBiYXNlZCBvbiBpdC4KKyAqLworc3RhdGljIHZvaWQgYWRkZWRfb2JqZWN0KHVuc2lnbmVkIG5yLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBkZWx0YV9pbmZvICoqcCA9ICZkZWx0YV9saXN0OworCXN0cnVjdCBkZWx0YV9pbmZvICppbmZvOworCisJd2hpbGUgKChpbmZvID0gKnApICE9IE5VTEwpIHsKKwkJaWYgKCFoYXNoY21wKGluZm8tPmJhc2Vfc2hhMSwgb2JqX2xpc3RbbnJdLnNoYTEpIHx8CisJCSAgICBpbmZvLT5iYXNlX29mZnNldCA9PSBvYmpfbGlzdFtucl0ub2Zmc2V0KSB7CisJCQkqcCA9IGluZm8tPm5leHQ7CisJCQlwID0gJmRlbHRhX2xpc3Q7CisJCQlyZXNvbHZlX2RlbHRhKGluZm8tPm5yLCB0eXBlLCBkYXRhLCBzaXplLAorCQkJCSAgICAgIGluZm8tPmRlbHRhLCBpbmZvLT5zaXplKTsKKwkJCWZyZWUoaW5mbyk7CisJCQljb250aW51ZTsKKwkJfQorCQlwID0gJmluZm8tPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCB1bnBhY2tfbm9uX2RlbHRhX2VudHJ5KGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgIHVuc2lnbmVkIG5yKQoreworCXZvaWQgKmJ1ZiA9IGdldF9kYXRhKHNpemUpOworCisJaWYgKCFkcnlfcnVuICYmIGJ1ZikKKwkJd3JpdGVfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCWVsc2UKKwkJZnJlZShidWYpOworfQorCitzdGF0aWMgaW50IHJlc29sdmVfYWdhaW5zdF9oZWxkKHVuc2lnbmVkIG5yLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJCXZvaWQgKmRlbHRhX2RhdGEsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJc3RydWN0IG9ial9idWZmZXIgKm9ial9idWZmZXI7CisJb2JqID0gbG9va3VwX29iamVjdChiYXNlKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIDA7CisJb2JqX2J1ZmZlciA9IGxvb2t1cF9vYmplY3RfYnVmZmVyKG9iaik7CisJaWYgKCFvYmpfYnVmZmVyKQorCQlyZXR1cm4gMDsKKwlyZXNvbHZlX2RlbHRhKG5yLCBvYmotPnR5cGUsIG9ial9idWZmZXItPmJ1ZmZlciwKKwkJICAgICAgb2JqX2J1ZmZlci0+c2l6ZSwgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHVucGFja19kZWx0YV9lbnRyeShlbnVtIG9iamVjdF90eXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSwKKwkJCSAgICAgICB1bnNpZ25lZCBucikKK3sKKwl2b2lkICpkZWx0YV9kYXRhLCAqYmFzZTsKKwl1bnNpZ25lZCBsb25nIGJhc2Vfc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGJhc2Vfc2hhMVsyMF07CisKKwlpZiAodHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCWhhc2hjcHkoYmFzZV9zaGExLCBmaWxsKDIwKSk7CisJCXVzZSgyMCk7CisJCWRlbHRhX2RhdGEgPSBnZXRfZGF0YShkZWx0YV9zaXplKTsKKwkJaWYgKGRyeV9ydW4gfHwgIWRlbHRhX2RhdGEpIHsKKwkJCWZyZWUoZGVsdGFfZGF0YSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGhhc19zaGExX2ZpbGUoYmFzZV9zaGExKSkKKwkJCTsgLyogT2sgd2UgaGF2ZSB0aGlzIG9uZSAqLworCQllbHNlIGlmIChyZXNvbHZlX2FnYWluc3RfaGVsZChuciwgYmFzZV9zaGExLAorCQkJCQkgICAgICBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKSkKKwkJCXJldHVybjsgLyogd2UgYXJlIGRvbmUgKi8KKwkJZWxzZSB7CisJCQkvKiBjYW5ub3QgcmVzb2x2ZSB5ZXQgLS0tIHF1ZXVlIGl0ICovCisJCQloYXNoY3B5KG9ial9saXN0W25yXS5zaGExLCBudWxsX3NoYTEpOworCQkJYWRkX2RlbHRhX3RvX2xpc3QobnIsIGJhc2Vfc2hhMSwgMCwgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQl1bnNpZ25lZCBiYXNlX2ZvdW5kID0gMDsKKwkJdW5zaWduZWQgY2hhciAqcGFjaywgYzsKKwkJb2ZmX3QgYmFzZV9vZmZzZXQ7CisJCXVuc2lnbmVkIGxvLCBtaWQsIGhpOworCisJCXBhY2sgPSBmaWxsKDEpOworCQljID0gKnBhY2s7CisJCXVzZSgxKTsKKwkJYmFzZV9vZmZzZXQgPSBjICYgMTI3OworCQl3aGlsZSAoYyAmIDEyOCkgeworCQkJYmFzZV9vZmZzZXQgKz0gMTsKKwkJCWlmICghYmFzZV9vZmZzZXQgfHwgTVNCKGJhc2Vfb2Zmc2V0LCA3KSkKKwkJCQlkaWUoIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiKTsKKwkJCXBhY2sgPSBmaWxsKDEpOworCQkJYyA9ICpwYWNrOworCQkJdXNlKDEpOworCQkJYmFzZV9vZmZzZXQgPSAoYmFzZV9vZmZzZXQgPDwgNykgKyAoYyAmIDEyNyk7CisJCX0KKwkJYmFzZV9vZmZzZXQgPSBvYmpfbGlzdFtucl0ub2Zmc2V0IC0gYmFzZV9vZmZzZXQ7CisJCWlmIChiYXNlX29mZnNldCA8PSAwIHx8IGJhc2Vfb2Zmc2V0ID49IG9ial9saXN0W25yXS5vZmZzZXQpCisJCQlkaWUoIm9mZnNldCB2YWx1ZSBvdXQgb2YgYm91bmQgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0Iik7CisKKwkJZGVsdGFfZGF0YSA9IGdldF9kYXRhKGRlbHRhX3NpemUpOworCQlpZiAoZHJ5X3J1biB8fCAhZGVsdGFfZGF0YSkgeworCQkJZnJlZShkZWx0YV9kYXRhKTsKKwkJCXJldHVybjsKKwkJfQorCQlsbyA9IDA7CisJCWhpID0gbnI7CisJCXdoaWxlIChsbyA8IGhpKSB7CisJCQltaWQgPSAobG8gKyBoaSkvMjsKKwkJCWlmIChiYXNlX29mZnNldCA8IG9ial9saXN0W21pZF0ub2Zmc2V0KSB7CisJCQkJaGkgPSBtaWQ7CisJCQl9IGVsc2UgaWYgKGJhc2Vfb2Zmc2V0ID4gb2JqX2xpc3RbbWlkXS5vZmZzZXQpIHsKKwkJCQlsbyA9IG1pZCArIDE7CisJCQl9IGVsc2UgeworCQkJCWhhc2hjcHkoYmFzZV9zaGExLCBvYmpfbGlzdFttaWRdLnNoYTEpOworCQkJCWJhc2VfZm91bmQgPSAhaXNfbnVsbF9zaGExKGJhc2Vfc2hhMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFiYXNlX2ZvdW5kKSB7CisJCQkvKgorCQkJICogVGhlIGRlbHRhIGJhc2Ugb2JqZWN0IGlzIGl0c2VsZiBhIGRlbHRhIHRoYXQKKwkJCSAqIGhhcyBub3QgYmVlbiByZXNvbHZlZCB5ZXQuCisJCQkgKi8KKwkJCWhhc2hjcHkob2JqX2xpc3RbbnJdLnNoYTEsIG51bGxfc2hhMSk7CisJCQlhZGRfZGVsdGFfdG9fbGlzdChuciwgbnVsbF9zaGExLCBiYXNlX29mZnNldCwgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAocmVzb2x2ZV9hZ2FpbnN0X2hlbGQobnIsIGJhc2Vfc2hhMSwgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSkpCisJCXJldHVybjsKKworCWJhc2UgPSByZWFkX3NoYTFfZmlsZShiYXNlX3NoYTEsICZ0eXBlLCAmYmFzZV9zaXplKTsKKwlpZiAoIWJhc2UpIHsKKwkJZXJyb3IoImZhaWxlZCB0byByZWFkIGRlbHRhLXBhY2sgYmFzZSBvYmplY3QgJXMiLAorCQkgICAgICBzaGExX3RvX2hleChiYXNlX3NoYTEpKTsKKwkJaWYgKCFyZWNvdmVyKQorCQkJZXhpdCgxKTsKKwkJaGFzX2Vycm9ycyA9IDE7CisJCXJldHVybjsKKwl9CisJcmVzb2x2ZV9kZWx0YShuciwgdHlwZSwgYmFzZSwgYmFzZV9zaXplLCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKTsKKwlmcmVlKGJhc2UpOworfQorCitzdGF0aWMgdm9pZCB1bnBhY2tfb25lKHVuc2lnbmVkIG5yKQoreworCXVuc2lnbmVkIHNoaWZ0OworCXVuc2lnbmVkIGNoYXIgKnBhY2s7CisJdW5zaWduZWQgbG9uZyBzaXplLCBjOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCW9ial9saXN0W25yXS5vZmZzZXQgPSBjb25zdW1lZF9ieXRlczsKKworCXBhY2sgPSBmaWxsKDEpOworCWMgPSAqcGFjazsKKwl1c2UoMSk7CisJdHlwZSA9IChjID4+IDQpICYgNzsKKwlzaXplID0gKGMgJiAxNSk7CisJc2hpZnQgPSA0OworCXdoaWxlIChjICYgMHg4MCkgeworCQlwYWNrID0gZmlsbCgxKTsKKwkJYyA9ICpwYWNrOworCQl1c2UoMSk7CisJCXNpemUgKz0gKGMgJiAweDdmKSA8PCBzaGlmdDsKKwkJc2hpZnQgKz0gNzsKKwl9CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJdW5wYWNrX25vbl9kZWx0YV9lbnRyeSh0eXBlLCBzaXplLCBucik7CisJCXJldHVybjsKKwljYXNlIE9CSl9SRUZfREVMVEE6CisJY2FzZSBPQkpfT0ZTX0RFTFRBOgorCQl1bnBhY2tfZGVsdGFfZW50cnkodHlwZSwgc2l6ZSwgbnIpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZXJyb3IoImJhZCBvYmplY3QgdHlwZSAlZCIsIHR5cGUpOworCQloYXNfZXJyb3JzID0gMTsKKwkJaWYgKHJlY292ZXIpCisJCQlyZXR1cm47CisJCWV4aXQoMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1bnBhY2tfYWxsKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisJc3RydWN0IHBhY2tfaGVhZGVyICpoZHIgPSBmaWxsKHNpemVvZihzdHJ1Y3QgcGFja19oZWFkZXIpKTsKKworCW5yX29iamVjdHMgPSBudG9obChoZHItPmhkcl9lbnRyaWVzKTsKKworCWlmIChudG9obChoZHItPmhkcl9zaWduYXR1cmUpICE9IFBBQ0tfU0lHTkFUVVJFKQorCQlkaWUoImJhZCBwYWNrIGZpbGUiKTsKKwlpZiAoIXBhY2tfdmVyc2lvbl9vayhoZHItPmhkcl92ZXJzaW9uKSkKKwkJZGllKCJ1bmtub3duIHBhY2sgZmlsZSB2ZXJzaW9uICUiUFJJdTMyLAorCQkJbnRvaGwoaGRyLT5oZHJfdmVyc2lvbikpOworCXVzZShzaXplb2Yoc3RydWN0IHBhY2tfaGVhZGVyKSk7CisKKwlpZiAoIXF1aWV0KQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKCJVbnBhY2tpbmcgb2JqZWN0cyIsIG5yX29iamVjdHMpOworCW9ial9saXN0ID0geGNhbGxvYyhucl9vYmplY3RzLCBzaXplb2YoKm9ial9saXN0KSk7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQl1bnBhY2tfb25lKGkpOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKworCWlmIChkZWx0YV9saXN0KQorCQlkaWUoInVucmVzb2x2ZWQgZGVsdGFzIGxlZnQgYWZ0ZXIgdW5wYWNraW5nIik7Cit9CisKK2ludCBjbWRfdW5wYWNrX29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCXF1aWV0ID0gIWlzYXR0eSgyKTsKKworCWZvciAoaSA9IDEgOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItbiIpKSB7CisJCQkJZHJ5X3J1biA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItcSIpKSB7CisJCQkJcXVpZXQgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLXIiKSkgeworCQkJCXJlY292ZXIgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdHJpY3QiKSkgeworCQkJCXN0cmljdCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXBhY2tfaGVhZGVyPSIpKSB7CisJCQkJc3RydWN0IHBhY2tfaGVhZGVyICpoZHI7CisJCQkJY2hhciAqYzsKKworCQkJCWhkciA9IChzdHJ1Y3QgcGFja19oZWFkZXIgKilidWZmZXI7CisJCQkJaGRyLT5oZHJfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19TSUdOQVRVUkUpOworCQkJCWhkci0+aGRyX3ZlcnNpb24gPSBodG9ubChzdHJ0b3VsKGFyZyArIDE0LCAmYywgMTApKTsKKwkJCQlpZiAoKmMgIT0gJywnKQorCQkJCQlkaWUoImJhZCAlcyIsIGFyZyk7CisJCQkJaGRyLT5oZHJfZW50cmllcyA9IGh0b25sKHN0cnRvdWwoYyArIDEsICZjLCAxMCkpOworCQkJCWlmICgqYykKKwkJCQkJZGllKCJiYWQgJXMiLCBhcmcpOworCQkJCWxlbiA9IHNpemVvZigqaGRyKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXVzYWdlKHVucGFja191c2FnZSk7CisJCX0KKworCQkvKiBXZSBkb24ndCB0YWtlIGFueSBub24tZmxhZyBhcmd1bWVudHMgbm93Li4gTWF5YmUgc29tZSBkYXkgKi8KKwkJdXNhZ2UodW5wYWNrX3VzYWdlKTsKKwl9CisJZ2l0X1NIQTFfSW5pdCgmY3R4KTsKKwl1bnBhY2tfYWxsKCk7CisJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIGJ1ZmZlciwgb2Zmc2V0KTsKKwlnaXRfU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKKwlpZiAoc3RyaWN0KQorCQl3cml0ZV9yZXN0KCk7CisJaWYgKGhhc2hjbXAoZmlsbCgyMCksIHNoYTEpKQorCQlkaWUoImZpbmFsIHNoYTEgZGlkIG5vdCBtYXRjaCIpOworCXVzZSgyMCk7CisKKwkvKiBXcml0ZSB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBidWZmZXIgdG8gc3Rkb3V0ICovCisJd2hpbGUgKGxlbikgeworCQlpbnQgcmV0ID0geHdyaXRlKDEsIGJ1ZmZlciArIG9mZnNldCwgbGVuKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJYnJlYWs7CisJCWxlbiAtPSByZXQ7CisJCW9mZnNldCArPSByZXQ7CisJfQorCisJLyogQWxsIGRvbmUgKi8KKwlyZXR1cm4gaGFzX2Vycm9yczsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMgYi9idWlsdGluL3VwZGF0ZS1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OTg2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3VwZGF0ZS1pbmRleC5jCkBAIC0wLDAgKzEsOTAzIEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworLyoKKyAqIERlZmF1bHQgdG8gbm90IGFsbG93aW5nIGNoYW5nZXMgdG8gdGhlIGxpc3Qgb2YgZmlsZXMuIFRoZQorICogdG9vbCBkb2Vzbid0IGFjdHVhbGx5IGNhcmUsIGJ1dCB0aGlzIG1ha2VzIGl0IGhhcmRlciB0byBhZGQKKyAqIGZpbGVzIHRvIHRoZSByZXZpc2lvbiBjb250cm9sIGJ5IG1pc3Rha2UgYnkgZG9pbmcgc29tZXRoaW5nCisgKiBsaWtlICJnaXQgdXBkYXRlLWluZGV4ICoiIGFuZCBzdWRkZW5seSBoYXZpbmcgYWxsIHRoZSBvYmplY3QKKyAqIGZpbGVzIGJlIHJldmlzaW9uIGNvbnRyb2xsZWQuCisgKi8KK3N0YXRpYyBpbnQgYWxsb3dfYWRkOworc3RhdGljIGludCBhbGxvd19yZW1vdmU7CitzdGF0aWMgaW50IGFsbG93X3JlcGxhY2U7CitzdGF0aWMgaW50IGluZm9fb25seTsKK3N0YXRpYyBpbnQgZm9yY2VfcmVtb3ZlOworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBtYXJrX3ZhbGlkX29ubHk7CitzdGF0aWMgaW50IG1hcmtfc2tpcF93b3JrdHJlZV9vbmx5OworI2RlZmluZSBNQVJLX0ZMQUcgMQorI2RlZmluZSBVTk1BUktfRkxBRyAyCisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCB2cDsKKworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCisJdmFfc3RhcnQodnAsIGZtdCk7CisJdnByaW50ZihmbXQsIHZwKTsKKwlwdXRjaGFyKCdcbicpOworCXZhX2VuZCh2cCk7Cit9CisKK3N0YXRpYyBpbnQgbWFya19jZV9mbGFncyhjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZywgaW50IG1hcmspCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIG5hbWVsZW4pOworCWlmICgwIDw9IHBvcykgeworCQlpZiAobWFyaykKKwkJCWFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9mbGFncyB8PSBmbGFnOworCQllbHNlCisJCQlhY3RpdmVfY2FjaGVbcG9zXS0+Y2VfZmxhZ3MgJj0gfmZsYWc7CisJCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKGFjdGl2ZV9jYWNoZV90cmVlLCBwYXRoKTsKKwkJYWN0aXZlX2NhY2hlX2NoYW5nZWQgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9vbmVfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCWlmICghYWxsb3dfcmVtb3ZlKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBkb2VzIG5vdCBleGlzdCBhbmQgLS1yZW1vdmUgbm90IHBhc3NlZCIsIHBhdGgpOworCWlmIChyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW5ub3QgcmVtb3ZlIGZyb20gdGhlIGluZGV4IiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBwYXRoIHRoYXQgY291bGRuJ3QgYmUgbHN0YXQnZWQuIEl0J3MgZWl0aGVyOgorICogIC0gbWlzc2luZyBmaWxlIChFTk9FTlQgb3IgRU5PVERJUikuIFRoYXQncyBvayBpZiB3ZSdyZQorICogICAgc3VwcG9zZWQgdG8gYmUgcmVtb3ZpbmcgaXQgYW5kIHRoZSByZW1vdmFsIGFjdHVhbGx5CisgKiAgICBzdWNjZWVkcy4KKyAqICAtIHBlcm1pc3Npb24gZXJyb3IuIFRoYXQncyBuZXZlciBvay4KKyAqLworc3RhdGljIGludCBwcm9jZXNzX2xzdGF0X2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpCit7CisJaWYgKGVyciA9PSBFTk9FTlQgfHwgZXJyID09IEVOT1RESVIpCisJCXJldHVybiByZW1vdmVfb25lX3BhdGgocGF0aCk7CisJcmV0dXJuIGVycm9yKCJsc3RhdChcIiVzXCIpOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX29uZV9wYXRoKHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaW50IG9wdGlvbiwgc2l6ZTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJLyogV2FzIHRoZSBvbGQgaW5kZXggZW50cnkgYWxyZWFkeSB1cC10by1kYXRlPyAqLworCWlmIChvbGQgJiYgIWNlX3N0YWdlKG9sZCkgJiYgIWNlX21hdGNoX3N0YXQob2xkLCBzdCwgMCkpCisJCXJldHVybiAwOworCisJc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobGVuKTsKKwljZSA9IHhjYWxsb2MoMSwgc2l6ZSk7CisJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBsZW4pOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncygwKTsKKwljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwlmaWxsX3N0YXRfY2FjaGVfaW5mbyhjZSwgc3QpOworCWNlLT5jZV9tb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQob2xkLCBzdC0+c3RfbW9kZSk7CisKKwlpZiAoaW5kZXhfcGF0aChjZS0+c2hhMSwgcGF0aCwgc3QsCisJCSAgICAgICBpbmZvX29ubHkgPyAwIDogSEFTSF9XUklURV9PQkpFQ1QpKSB7CisJCWZyZWUoY2UpOworCQlyZXR1cm4gLTE7CisJfQorCW9wdGlvbiA9IGFsbG93X2FkZCA/IEFERF9DQUNIRV9PS19UT19BREQgOiAwOworCW9wdGlvbiB8PSBhbGxvd19yZXBsYWNlID8gQUREX0NBQ0hFX09LX1RPX1JFUExBQ0UgOiAwOworCWlmIChhZGRfY2FjaGVfZW50cnkoY2UsIG9wdGlvbikpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCBhZGQgdG8gdGhlIGluZGV4IC0gbWlzc2luZyAtLWFkZCBvcHRpb24/IiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBwYXRoIHRoYXQgd2FzIGEgZGlyZWN0b3J5LiBGb3VyIGNhc2VzOgorICoKKyAqICAtIGl0J3MgYWxyZWFkeSBhIGdpdGxpbmsgaW4gdGhlIGluZGV4LCBhbmQgd2Uga2VlcCBpdCB0aGF0CisgKiAgICB3YXksIGFuZCB1cGRhdGUgaXQgaWYgd2UgY2FuIChpZiB3ZSBjYW5ub3QgZmluZCB0aGUgSEVBRCwKKyAqICAgIHdlJ3JlIGdvaW5nIHRvIGtlZXAgaXQgdW5jaGFuZ2VkIGluIHRoZSBpbmRleCEpCisgKgorICogIC0gaXQncyBhICpmaWxlKiBpbiB0aGUgaW5kZXgsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlCisgKiAgICByZW1vdmVkIGFzIGEgZmlsZSBpZiByZW1vdmFsIGlzIGFsbG93ZWQsIHNpbmNlIGl0IGRvZXNuJ3QKKyAqICAgIGV4aXN0IGFzIHN1Y2ggYW55IG1vcmUuIElmIHJlbW92YWwgaXNuJ3QgYWxsb3dlZCwgaXQncworICogICAgYW4gZXJyb3IuCisgKgorICogICAgKE5PVEUhIFRoaXMgaXMgb2xkIGFuZCBhcmd1YWJseSBmYWlybHkgc3RyYW5nZSBiZWhhdmlvdXIuCisgKiAgICBXZSBtaWdodCB3YW50IHRvIG1ha2UgdGhpcyBhbiBlcnJvciB1bmNvbmRpdGlvbmFsbHksIGFuZAorICogICAgdXNlICItLWZvcmNlLXJlbW92ZSIgaWYgeW91IGFjdHVhbGx5IHdhbnQgdG8gZm9yY2UgcmVtb3ZhbCkuCisgKgorICogIC0gaXQgdXNlZCB0byBleGlzdCBhcyBhIHN1YmRpcmVjdG9yeSAoaWUgbXVsdGlwbGUgZmlsZXMgd2l0aAorICogICAgdGhpcyBwYXJ0aWN1bGFyIHByZWZpeCkgaW4gdGhlIGluZGV4LCBpbiB3aGljaCBjYXNlIGl0J3Mgd3JvbmcKKyAqICAgIHRvIHRyeSB0byB1cGRhdGUgaXQgYXMgYSBkaXJlY3RvcnkuCisgKgorICogIC0gaXQgZG9lc24ndCBleGlzdCBhdCBhbGwgaW4gdGhlIGluZGV4LCBidXQgaXQgaXMgYSB2YWxpZAorICogICAgZ2l0IGRpcmVjdG9yeSwgYW5kIGl0IHNob3VsZCBiZSAqYWRkZWQqIGFzIGEgZ2l0bGluay4KKyAqLworc3RhdGljIGludCBwcm9jZXNzX2RpcmVjdG9yeShjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbGVuKTsKKworCS8qIEV4YWN0IG1hdGNoOiBmaWxlIG9yIGV4aXN0aW5nIGdpdGxpbmsgKi8KKwlpZiAocG9zID49IDApIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKSB7CisKKwkJCS8qIERvIG5vdGhpbmcgdG8gdGhlIGluZGV4IGlmIHRoZXJlIGlzIG5vIEhFQUQhICovCisJCQlpZiAocmVzb2x2ZV9naXRsaW5rX3JlZihwYXRoLCAiSEVBRCIsIHNoYTEpIDwgMCkKKwkJCQlyZXR1cm4gMDsKKworCQkJcmV0dXJuIGFkZF9vbmVfcGF0aChjZSwgcGF0aCwgbGVuLCBzdCk7CisJCX0KKwkJLyogU2hvdWxkIHRoaXMgYmUgYW4gdW5jb25kaXRpb25hbCBlcnJvcj8gKi8KKwkJcmV0dXJuIHJlbW92ZV9vbmVfcGF0aChwYXRoKTsKKwl9CisKKwkvKiBJbmV4YWN0IG1hdGNoOiBpcyB0aGVyZSBwZXJoYXBzIGEgc3ViZGlyZWN0b3J5IG1hdGNoPyAqLworCXBvcyA9IC1wb3MtMTsKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zKytdOworCisJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBwYXRoLCBsZW4pKQorCQkJYnJlYWs7CisJCWlmIChjZS0+bmFtZVtsZW5dID4gJy8nKQorCQkJYnJlYWs7CisJCWlmIChjZS0+bmFtZVtsZW5dIDwgJy8nKQorCQkJY29udGludWU7CisKKwkJLyogU3ViZGlyZWN0b3J5IG1hdGNoIC0gZXJyb3Igb3V0ICovCisJCXJldHVybiBlcnJvcigiJXM6IGlzIGEgZGlyZWN0b3J5IC0gYWRkIGluZGl2aWR1YWwgZmlsZXMgaW5zdGVhZCIsIHBhdGgpOworCX0KKworCS8qIE5vIG1hdGNoIC0gc2hvdWxkIHdlIGFkZCBpdCBhcyBhIGdpdGxpbms/ICovCisJaWYgKCFyZXNvbHZlX2dpdGxpbmtfcmVmKHBhdGgsICJIRUFEIiwgc2hhMSkpCisJCXJldHVybiBhZGRfb25lX3BhdGgoTlVMTCwgcGF0aCwgbGVuLCBzdCk7CisKKwkvKiBFcnJvciBvdXQuICovCisJcmV0dXJuIGVycm9yKCIlczogaXMgYSBkaXJlY3RvcnkgLSBhZGQgZmlsZXMgaW5zaWRlIGluc3RlYWQiLCBwYXRoKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgcG9zLCBsZW47CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHBhdGgsIGxlbikpCisJCXJldHVybiBlcnJvcigiJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiwgcGF0aCk7CisKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBsZW4pOworCWNlID0gcG9zIDwgMCA/IE5VTEwgOiBhY3RpdmVfY2FjaGVbcG9zXTsKKwlpZiAoY2UgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJLyoKKwkJICogd29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBpcyBhc3N1bWVkICJnb29kIgorCQkgKiBzbyB1cGRhdGluZyBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlLgorCQkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgcmVtb3ZpbmcgaXQgZnJvbSBpbmRleCBzaG91bGQgd29yaworCQkgKi8KKwkJaWYgKGFsbG93X3JlbW92ZSAmJiByZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQorCQkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIsIHBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIEZpcnN0IHRoaW5ncyBmaXJzdDogZ2V0IHRoZSBzdGF0IGluZm9ybWF0aW9uLCB0byBkZWNpZGUKKwkgKiB3aGF0IHRvIGRvIGFib3V0IHRoZSBwYXRobmFtZSEKKwkgKi8KKwlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCisJCXJldHVybiBwcm9jZXNzX2xzdGF0X2Vycm9yKHBhdGgsIGVycm5vKTsKKworCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gcHJvY2Vzc19kaXJlY3RvcnkocGF0aCwgbGVuLCAmc3QpOworCisJcmV0dXJuIGFkZF9vbmVfcGF0aChjZSwgcGF0aCwgbGVuLCAmc3QpOworfQorCitzdGF0aWMgaW50IGFkZF9jYWNoZWluZm8odW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlKQoreworCWludCBzaXplLCBsZW4sIG9wdGlvbjsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJaWYgKCF2ZXJpZnlfcGF0aChwYXRoKSkKKwkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIHBhdGggJyVzJyIsIHBhdGgpOworCisJbGVuID0gc3RybGVuKHBhdGgpOworCXNpemUgPSBjYWNoZV9lbnRyeV9zaXplKGxlbik7CisJY2UgPSB4Y2FsbG9jKDEsIHNpemUpOworCisJaGFzaGNweShjZS0+c2hhMSwgc2hhMSk7CisJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBsZW4pOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncyhzdGFnZSk7CisJY2UtPmNlX25hbWVsZW4gPSBsZW47CisJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShtb2RlKTsKKwlpZiAoYXNzdW1lX3VuY2hhbmdlZCkKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX1ZBTElEOworCW9wdGlvbiA9IGFsbG93X2FkZCA/IEFERF9DQUNIRV9PS19UT19BREQgOiAwOworCW9wdGlvbiB8PSBhbGxvd19yZXBsYWNlID8gQUREX0NBQ0hFX09LX1RPX1JFUExBQ0UgOiAwOworCWlmIChhZGRfY2FjaGVfZW50cnkoY2UsIG9wdGlvbikpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCBhZGQgdG8gdGhlIGluZGV4IC0gbWlzc2luZyAtLWFkZCBvcHRpb24/IiwKKwkJCSAgICAgcGF0aCk7CisJcmVwb3J0KCJhZGQgJyVzJyIsIHBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaG1vZF9wYXRoKGludCBmbGlwLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBwb3M7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKworCXBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIHN0cmxlbihwYXRoKSk7CisJaWYgKHBvcyA8IDApCisJCWdvdG8gZmFpbDsKKwljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCW1vZGUgPSBjZS0+Y2VfbW9kZTsKKwlpZiAoIVNfSVNSRUcobW9kZSkpCisJCWdvdG8gZmFpbDsKKwlzd2l0Y2ggKGZsaXApIHsKKwljYXNlICcrJzoKKwkJY2UtPmNlX21vZGUgfD0gMDExMTsgYnJlYWs7CisJY2FzZSAnLSc6CisJCWNlLT5jZV9tb2RlICY9IH4wMTExOyBicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGZhaWw7CisJfQorCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKGFjdGl2ZV9jYWNoZV90cmVlLCBwYXRoKTsKKwlhY3RpdmVfY2FjaGVfY2hhbmdlZCA9IDE7CisJcmVwb3J0KCJjaG1vZCAlY3ggJyVzJyIsIGZsaXAsIHBhdGgpOworCXJldHVybjsKKyBmYWlsOgorCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogY2Fubm90IGNobW9kICVjeCAnJXMnIiwgZmxpcCwgcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9vbmUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbmd0aCkKK3sKKwljb25zdCBjaGFyICpwID0gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBwYXRoKTsKKwlpZiAoIXZlcmlmeV9wYXRoKHApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSWdub3JpbmcgcGF0aCAlc1xuIiwgcGF0aCk7CisJCWdvdG8gZnJlZV9yZXR1cm47CisJfQorCWlmIChtYXJrX3ZhbGlkX29ubHkpIHsKKwkJaWYgKG1hcmtfY2VfZmxhZ3MocCwgQ0VfVkFMSUQsIG1hcmtfdmFsaWRfb25seSA9PSBNQVJLX0ZMQUcpKQorCQkJZGllKCJVbmFibGUgdG8gbWFyayBmaWxlICVzIiwgcGF0aCk7CisJCWdvdG8gZnJlZV9yZXR1cm47CisJfQorCWlmIChtYXJrX3NraXBfd29ya3RyZWVfb25seSkgeworCQlpZiAobWFya19jZV9mbGFncyhwLCBDRV9TS0lQX1dPUktUUkVFLCBtYXJrX3NraXBfd29ya3RyZWVfb25seSA9PSBNQVJLX0ZMQUcpKQorCQkJZGllKCJVbmFibGUgdG8gbWFyayBmaWxlICVzIiwgcGF0aCk7CisJCWdvdG8gZnJlZV9yZXR1cm47CisJfQorCisJaWYgKGZvcmNlX3JlbW92ZSkgeworCQlpZiAocmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwKSkKKwkJCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogdW5hYmxlIHRvIHJlbW92ZSAlcyIsIHBhdGgpOworCQlyZXBvcnQoInJlbW92ZSAnJXMnIiwgcGF0aCk7CisJCWdvdG8gZnJlZV9yZXR1cm47CisJfQorCWlmIChwcm9jZXNzX3BhdGgocCkpCisJCWRpZSgiVW5hYmxlIHRvIHByb2Nlc3MgcGF0aCAlcyIsIHBhdGgpOworCXJlcG9ydCgiYWRkICclcyciLCBwYXRoKTsKKyBmcmVlX3JldHVybjoKKwlpZiAocCA8IHBhdGggfHwgcCA+IHBhdGggKyBzdHJsZW4ocGF0aCkpCisJCWZyZWUoKGNoYXIgKilwKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9pbmRleF9pbmZvKGludCBsaW5lX3Rlcm1pbmF0aW9uKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB1cSA9IFNUUkJVRl9JTklUOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZidWYsIHN0ZGluLCBsaW5lX3Rlcm1pbmF0aW9uKSAhPSBFT0YpIHsKKwkJY2hhciAqcHRyLCAqdGFiOworCQljaGFyICpwYXRoX25hbWU7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCXVuc2lnbmVkIGludCBtb2RlOworCQl1bnNpZ25lZCBsb25nIHVsOworCQlpbnQgc3RhZ2U7CisKKwkJLyogVGhpcyByZWFkcyBsaW5lcyBmb3JtYXR0ZWQgaW4gb25lIG9mIHRocmVlIGZvcm1hdHM6CisJCSAqCisJCSAqICgxKSBtb2RlICAgICAgICAgU1Agc2hhMSAgICAgICAgICBUQUIgcGF0aAorCQkgKiBUaGUgZmlyc3QgZm9ybWF0IGlzIHdoYXQgImdpdCBhcHBseSAtLWluZGV4LWluZm8iCisJCSAqIHJlcG9ydHMsIGFuZCB1c2VkIHRvIHJlY29uc3RydWN0IGEgcGFydGlhbCB0cmVlCisJCSAqIHRoYXQgaXMgdXNlZCBmb3IgcGhvbnkgbWVyZ2UgYmFzZSB0cmVlIHdoZW4gZmFsbGluZworCQkgKiBiYWNrIG9uIDMtd2F5IG1lcmdlLgorCQkgKgorCQkgKiAoMikgbW9kZSBTUCB0eXBlIFNQIHNoYTEgICAgICAgICAgVEFCIHBhdGgKKwkJICogVGhlIHNlY29uZCBmb3JtYXQgaXMgdG8gc3R1ZmYgImdpdCBscy10cmVlIiBvdXRwdXQKKwkJICogaW50byB0aGUgaW5kZXggZmlsZS4KKwkJICoKKwkJICogKDMpIG1vZGUgICAgICAgICBTUCBzaGExIFNQIHN0YWdlIFRBQiBwYXRoCisJCSAqIFRoaXMgZm9ybWF0IGlzIHRvIHB1dCBoaWdoZXIgb3JkZXIgc3RhZ2VzIGludG8gdGhlCisJCSAqIGluZGV4IGZpbGUgYW5kIG1hdGNoZXMgImdpdCBscy1maWxlcyAtLXN0YWdlIiBvdXRwdXQuCisJCSAqLworCQllcnJubyA9IDA7CisJCXVsID0gc3RydG91bChidWYuYnVmLCAmcHRyLCA4KTsKKwkJaWYgKHB0ciA9PSBidWYuYnVmIHx8ICpwdHIgIT0gJyAnCisJCSAgICB8fCBlcnJubyB8fCAodW5zaWduZWQgaW50KSB1bCAhPSB1bCkKKwkJCWdvdG8gYmFkX2xpbmU7CisJCW1vZGUgPSB1bDsKKworCQl0YWIgPSBzdHJjaHIocHRyLCAnXHQnKTsKKwkJaWYgKCF0YWIgfHwgdGFiIC0gcHRyIDwgNDEpCisJCQlnb3RvIGJhZF9saW5lOworCisJCWlmICh0YWJbLTJdID09ICcgJyAmJiAnMCcgPD0gdGFiWy0xXSAmJiB0YWJbLTFdIDw9ICczJykgeworCQkJc3RhZ2UgPSB0YWJbLTFdIC0gJzAnOworCQkJcHRyID0gdGFiICsgMTsgLyogcG9pbnQgYXQgdGhlIGhlYWQgb2YgcGF0aCAqLworCQkJdGFiID0gdGFiIC0gMjsgLyogcG9pbnQgYXQgdGFpbCBvZiBzaGExICovCisJCX0KKwkJZWxzZSB7CisJCQlzdGFnZSA9IDA7CisJCQlwdHIgPSB0YWIgKyAxOyAvKiBwb2ludCBhdCB0aGUgaGVhZCBvZiBwYXRoICovCisJCX0KKworCQlpZiAoZ2V0X3NoYTFfaGV4KHRhYiAtIDQwLCBzaGExKSB8fCB0YWJbLTQxXSAhPSAnICcpCisJCQlnb3RvIGJhZF9saW5lOworCisJCXBhdGhfbmFtZSA9IHB0cjsKKwkJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgcGF0aF9uYW1lWzBdID09ICciJykgeworCQkJc3RyYnVmX3Jlc2V0KCZ1cSk7CisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZ1cSwgcGF0aF9uYW1lLCBOVUxMKSkgeworCQkJCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogYmFkIHF1b3Rpbmcgb2YgcGF0aCBuYW1lIik7CisJCQl9CisJCQlwYXRoX25hbWUgPSB1cS5idWY7CisJCX0KKworCQlpZiAoIXZlcmlmeV9wYXRoKHBhdGhfbmFtZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSWdub3JpbmcgcGF0aCAlc1xuIiwgcGF0aF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFtb2RlKSB7CisJCQkvKiBtb2RlID09IDAgbWVhbnMgdGhlcmUgaXMgbm8gc3VjaCBwYXRoIC0tIHJlbW92ZSAqLworCQkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aF9uYW1lKSkKKwkJCQlkaWUoImdpdCB1cGRhdGUtaW5kZXg6IHVuYWJsZSB0byByZW1vdmUgJXMiLAorCQkJCSAgICBwdHIpOworCQl9CisJCWVsc2UgeworCQkJLyogbW9kZSAnICcgc2hhMSAnXHQnIG5hbWUKKwkJCSAqIHB0clstMV0gcG9pbnRzIGF0IHRhYiwKKwkJCSAqIHB0clstNDFdIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc2hhMQorCQkJICovCisJCQlwdHJbLTQyXSA9IHB0clstMV0gPSAwOworCQkJaWYgKGFkZF9jYWNoZWluZm8obW9kZSwgc2hhMSwgcGF0aF9uYW1lLCBzdGFnZSkpCisJCQkJZGllKCJnaXQgdXBkYXRlLWluZGV4OiB1bmFibGUgdG8gdXBkYXRlICVzIiwKKwkJCQkgICAgcGF0aF9uYW1lKTsKKwkJfQorCQljb250aW51ZTsKKworCWJhZF9saW5lOgorCQlkaWUoIm1hbGZvcm1lZCBpbmRleCBpbmZvICVzIiwgYnVmLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZ1cSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdXBkYXRlX2luZGV4X3VzYWdlW10gPSB7CisJTl8oImdpdCB1cGRhdGUtaW5kZXggW29wdGlvbnNdIFstLV0gWzxmaWxlPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgbWVyZ2VfaGVhZF9zaGExWzIwXTsKKworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVhZF9vbmVfZW50KGNvbnN0IGNoYXIgKndoaWNoLAorCQkJCQl1bnNpZ25lZCBjaGFyICplbnQsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCWludCBuYW1lbGVuLCBpbnQgc3RhZ2UpCit7CisJdW5zaWduZWQgbW9kZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBzaXplOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlpZiAoZ2V0X3RyZWVfZW50cnkoZW50LCBwYXRoLCBzaGExLCAmbW9kZSkpIHsKKwkJaWYgKHdoaWNoKQorCQkJZXJyb3IoIiVzOiBub3QgaW4gJXMgYnJhbmNoLiIsIHBhdGgsIHdoaWNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChtb2RlID09IFNfSUZESVIpIHsKKwkJaWYgKHdoaWNoKQorCQkJZXJyb3IoIiVzOiBub3QgYSBibG9iIGluICVzIGJyYW5jaC4iLCBwYXRoLCB3aGljaCk7CisJCXJldHVybiBOVUxMOworCX0KKwlzaXplID0gY2FjaGVfZW50cnlfc2l6ZShuYW1lbGVuKTsKKwljZSA9IHhjYWxsb2MoMSwgc2l6ZSk7CisKKwloYXNoY3B5KGNlLT5zaGExLCBzaGExKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncyhzdGFnZSk7CisJY2UtPmNlX25hbWVsZW4gPSBuYW1lbGVuOworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisJcmV0dXJuIGNlOworfQorCitzdGF0aWMgaW50IHVucmVzb2x2ZV9vbmUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgbmFtZWxlbiA9IHN0cmxlbihwYXRoKTsKKwlpbnQgcG9zOworCWludCByZXQgPSAwOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2VfMiA9IE5VTEwsICpjZV8zID0gTlVMTDsKKworCS8qIFNlZSBpZiB0aGVyZSBpcyBzdWNoIGVudHJ5IGluIHRoZSBpbmRleC4gKi8KKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBuYW1lbGVuKTsKKwlpZiAoMCA8PSBwb3MpIHsKKwkJLyogYWxyZWFkeSBtZXJnZWQgKi8KKwkJcG9zID0gdW5tZXJnZV9jYWNoZV9lbnRyeV9hdChwb3MpOworCQlpZiAocG9zIDwgYWN0aXZlX25yKSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCQlpZiAoY2Vfc3RhZ2UoY2UpICYmCisJCQkgICAgY2VfbmFtZWxlbihjZSkgPT0gbmFtZWxlbiAmJgorCQkJICAgICFtZW1jbXAoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pKQorCQkJCXJldHVybiAwOworCQl9CisJCS8qIG5vIHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbjsgZmFsbCBiYWNrICovCisJfSBlbHNlIHsKKwkJLyogSWYgdGhlcmUgaXNuJ3QsIGVpdGhlciBpdCBpcyB1bm1lcmdlZCwgb3IKKwkJICogcmVzb2x2ZWQgYXMgInJlbW92ZWQiIGJ5IG1pc3Rha2UuICBXZSBkbyBub3QKKwkJICogd2FudCB0byBkbyBhbnl0aGluZyBpbiB0aGUgZm9ybWVyIGNhc2UuCisJCSAqLworCQlwb3MgPSAtcG9zLTE7CisJCWlmIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSBuYW1lbGVuICYmCisJCQkgICAgIW1lbWNtcChjZS0+bmFtZSwgcGF0aCwgbmFtZWxlbikpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIiVzOiBza2lwcGluZyBzdGlsbCB1bm1lcmdlZCBwYXRoLlxuIiwKKwkJCQkJcGF0aCk7CisJCQkJZ290byBmcmVlX3JldHVybjsKKwkJCX0KKwkJfQorCX0KKworCS8qIEdyYWIgYmxvYnMgZnJvbSBnaXZlbiBwYXRoIGZyb20gSEVBRCBhbmQgTUVSR0VfSEVBRCwKKwkgKiBzdHVmZiBIRUFEIHZlcnNpb24gaW4gc3RhZ2UgIzIsCisJICogc3R1ZmYgTUVSR0VfSEVBRCB2ZXJzaW9uIGluIHN0YWdlICMzLgorCSAqLworCWNlXzIgPSByZWFkX29uZV9lbnQoIm91ciIsIGhlYWRfc2hhMSwgcGF0aCwgbmFtZWxlbiwgMik7CisJY2VfMyA9IHJlYWRfb25lX2VudCgidGhlaXIiLCBtZXJnZV9oZWFkX3NoYTEsIHBhdGgsIG5hbWVsZW4sIDMpOworCisJaWYgKCFjZV8yIHx8ICFjZV8zKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGZyZWVfcmV0dXJuOworCX0KKwlpZiAoIWhhc2hjbXAoY2VfMi0+c2hhMSwgY2VfMy0+c2hhMSkgJiYKKwkgICAgY2VfMi0+Y2VfbW9kZSA9PSBjZV8zLT5jZV9tb2RlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IGlkZW50aWNhbCBpbiBib3RoLCBza2lwcGluZy5cbiIsCisJCQlwYXRoKTsKKwkJZ290byBmcmVlX3JldHVybjsKKwl9CisKKwlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCWlmIChhZGRfY2FjaGVfZW50cnkoY2VfMiwgQUREX0NBQ0hFX09LX1RPX0FERCkpIHsKKwkJZXJyb3IoIiVzOiBjYW5ub3QgYWRkIG91ciB2ZXJzaW9uIHRvIHRoZSBpbmRleC4iLCBwYXRoKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZnJlZV9yZXR1cm47CisJfQorCWlmICghYWRkX2NhY2hlX2VudHJ5KGNlXzMsIEFERF9DQUNIRV9PS19UT19BREQpKQorCQlyZXR1cm4gMDsKKwllcnJvcigiJXM6IGNhbm5vdCBhZGQgdGhlaXIgdmVyc2lvbiB0byB0aGUgaW5kZXguIiwgcGF0aCk7CisJcmV0ID0gLTE7CisgZnJlZV9yZXR1cm46CisJZnJlZShjZV8yKTsKKwlmcmVlKGNlXzMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfaGVhZF9wb2ludGVycyh2b2lkKQoreworCWlmIChyZWFkX3JlZigiSEVBRCIsIGhlYWRfc2hhMSkpCisJCWRpZSgiTm8gSEVBRCAtLSBubyBpbml0aWFsIGNvbW1pdCB5ZXQ/Iik7CisJaWYgKHJlYWRfcmVmKCJNRVJHRV9IRUFEIiwgbWVyZ2VfaGVhZF9zaGExKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuXG4iKTsKKwkJZXhpdCgwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZG9fdW5yZXNvbHZlKGludCBhYywgY29uc3QgY2hhciAqKmF2LAorCQkJY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbmd0aCkKK3sKKwlpbnQgaTsKKwlpbnQgZXJyID0gMDsKKworCS8qIFJlYWQgSEVBRCBhbmQgTUVSR0VfSEVBRDsgaWYgTUVSR0VfSEVBRCBkb2VzIG5vdCBleGlzdCwgd2UKKwkgKiBhcmUgbm90IGRvaW5nIGEgbWVyZ2UsIHNvIGV4aXQgd2l0aCBzdWNjZXNzIHN0YXR1cy4KKwkgKi8KKwlyZWFkX2hlYWRfcG9pbnRlcnMoKTsKKworCWZvciAoaSA9IDE7IGkgPCBhYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGF2W2ldOworCQljb25zdCBjaGFyICpwID0gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBhcmcpOworCQllcnIgfD0gdW5yZXNvbHZlX29uZShwKTsKKwkJaWYgKHAgPCBhcmcgfHwgcCA+IGFyZyArIHN0cmxlbihhcmcpKQorCQkJZnJlZSgoY2hhciAqKXApOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRvX3JldXBkYXRlKGludCBhYywgY29uc3QgY2hhciAqKmF2LAorCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbmd0aCkKK3sKKwkvKiBSZWFkIEhFQUQgYW5kIHJ1biB1cGRhdGUtaW5kZXggb24gcGF0aHMgdGhhdCBhcmUKKwkgKiBtZXJnZWQgYW5kIGFscmVhZHkgZGlmZmVyZW50IGJldHdlZW4gaW5kZXggYW5kIEhFQUQuCisJICovCisJaW50IHBvczsKKwlpbnQgaGFzX2hlYWQgPSAxOworCWNvbnN0IGNoYXIgKipwYXRocyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGF2ICsgMSk7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCisJaW5pdF9wYXRoc3BlYygmcGF0aHNwZWMsIHBhdGhzKTsKKworCWlmIChyZWFkX3JlZigiSEVBRCIsIGhlYWRfc2hhMSkpCisJCS8qIElmIHRoZXJlIGlzIG5vIEhFQUQsIHRoYXQgbWVhbnMgaXQgaXMgYW4gaW5pdGlhbAorCQkgKiBjb21taXQuICBVcGRhdGUgZXZlcnl0aGluZyBpbiB0aGUgaW5kZXguCisJCSAqLworCQloYXNfaGVhZCA9IDA7CisgcmVkbzoKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCA9IE5VTEw7CisJCWludCBzYXZlX25yOworCisJCWlmIChjZV9zdGFnZShjZSkgfHwgIWNlX3BhdGhfbWF0Y2goY2UsICZwYXRoc3BlYykpCisJCQljb250aW51ZTsKKwkJaWYgKGhhc19oZWFkKQorCQkJb2xkID0gcmVhZF9vbmVfZW50KE5VTEwsIGhlYWRfc2hhMSwKKwkJCQkJICAgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwKTsKKwkJaWYgKG9sZCAmJiBjZS0+Y2VfbW9kZSA9PSBvbGQtPmNlX21vZGUgJiYKKwkJICAgICFoYXNoY21wKGNlLT5zaGExLCBvbGQtPnNoYTEpKSB7CisJCQlmcmVlKG9sZCk7CisJCQljb250aW51ZTsgLyogdW5jaGFuZ2VkICovCisJCX0KKwkJLyogQmUgY2FyZWZ1bC4gIFRoZSB3b3JraW5nIHRyZWUgbWF5IG5vdCBoYXZlIHRoZQorCQkgKiBwYXRoIGFueW1vcmUsIGluIHdoaWNoIGNhc2UsIHVuZGVyICdhbGxvd19yZW1vdmUnLAorCQkgKiBvciB3b3JzZSB5ZXQgJ2FsbG93X3JlcGxhY2UnLCBhY3RpdmVfbnIgbWF5IGRlY3JlYXNlLgorCQkgKi8KKwkJc2F2ZV9uciA9IGFjdGl2ZV9ucjsKKwkJdXBkYXRlX29uZShjZS0+bmFtZSArIHByZWZpeF9sZW5ndGgsIHByZWZpeCwgcHJlZml4X2xlbmd0aCk7CisJCWlmIChzYXZlX25yICE9IGFjdGl2ZV9ucikKKwkJCWdvdG8gcmVkbzsKKwl9CisJZnJlZV9wYXRoc3BlYygmcGF0aHNwZWMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmVmcmVzaF9wYXJhbXMgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlpbnQgKmhhc19lcnJvcnM7Cit9OworCitzdGF0aWMgaW50IHJlZnJlc2goc3RydWN0IHJlZnJlc2hfcGFyYW1zICpvLCB1bnNpZ25lZCBpbnQgZmxhZykKK3sKKwlzZXR1cF93b3JrX3RyZWUoKTsKKwkqby0+aGFzX2Vycm9ycyB8PSByZWZyZXNoX2NhY2hlKG8tPmZsYWdzIHwgZmxhZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVmcmVzaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIHJlZnJlc2gob3B0LT52YWx1ZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhbGx5X3JlZnJlc2hfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJldHVybiByZWZyZXNoKG9wdC0+dmFsdWUsIFJFRlJFU0hfUkVBTExZKTsKK30KKworc3RhdGljIGludCBjaG1vZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJY2hhciAqZmxpcCA9IG9wdC0+dmFsdWU7CisJaWYgKChhcmdbMF0gIT0gJy0nICYmIGFyZ1swXSAhPSAnKycpIHx8IGFyZ1sxXSAhPSAneCcgfHwgYXJnWzJdKQorCQlyZXR1cm4gZXJyb3IoIm9wdGlvbiAnY2htb2QnIGV4cGVjdHMgXCIreFwiIG9yIFwiLXhcIiIpOworCSpmbGlwID0gYXJnWzBdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlc29sdmVfdW5kb19jbGVhcl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmVzb2x2ZV91bmRvX2NsZWFyKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FjaGVpbmZvX2NhbGxiYWNrKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGludCB1bnNldCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXVuc2lnbmVkIGludCBtb2RlOworCisJaWYgKGN0eC0+YXJnYyA8PSAzKQorCQlyZXR1cm4gZXJyb3IoIm9wdGlvbiAnY2FjaGVpbmZvJyBleHBlY3RzIHRocmVlIGFyZ3VtZW50cyIpOworCWlmIChzdHJ0b3VsX3VpKCorK2N0eC0+YXJndiwgOCwgJm1vZGUpIHx8CisJICAgIGdldF9zaGExX2hleCgqKytjdHgtPmFyZ3YsIHNoYTEpIHx8CisJICAgIGFkZF9jYWNoZWluZm8obW9kZSwgc2hhMSwgKisrY3R4LT5hcmd2LCAwKSkKKwkJZGllKCJnaXQgdXBkYXRlLWluZGV4OiAtLWNhY2hlaW5mbyBjYW5ub3QgYWRkICVzIiwgKmN0eC0+YXJndik7CisJY3R4LT5hcmdjIC09IDM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RkaW5fY2FjaGVpbmZvX2NhbGxiYWNrKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgaW50IHVuc2V0KQoreworCWludCAqbGluZV90ZXJtaW5hdGlvbiA9IG9wdC0+dmFsdWU7CisKKwlpZiAoY3R4LT5hcmdjICE9IDEpCisJCXJldHVybiBlcnJvcigib3B0aW9uICclcycgbXVzdCBiZSB0aGUgbGFzdCBhcmd1bWVudCIsIG9wdC0+bG9uZ19uYW1lKTsKKwlhbGxvd19hZGQgPSBhbGxvd19yZXBsYWNlID0gYWxsb3dfcmVtb3ZlID0gMTsKKwlyZWFkX2luZGV4X2luZm8oKmxpbmVfdGVybWluYXRpb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0ZGluX2NhbGxiYWNrKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGludCB1bnNldCkKK3sKKwlpbnQgKnJlYWRfZnJvbV9zdGRpbiA9IG9wdC0+dmFsdWU7CisKKwlpZiAoY3R4LT5hcmdjICE9IDEpCisJCXJldHVybiBlcnJvcigib3B0aW9uICclcycgbXVzdCBiZSB0aGUgbGFzdCBhcmd1bWVudCIsIG9wdC0+bG9uZ19uYW1lKTsKKwkqcmVhZF9mcm9tX3N0ZGluID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bnJlc29sdmVfY2FsbGJhY2soc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgaW50IGZsYWdzKQoreworCWludCAqaGFzX2Vycm9ycyA9IG9wdC0+dmFsdWU7CisJY29uc3QgY2hhciAqcHJlZml4ID0gc3RhcnR1cF9pbmZvLT5wcmVmaXg7CisKKwkvKiBjb25zdW1lIHJlbWFpbmluZyBhcmd1bWVudHMuICovCisJKmhhc19lcnJvcnMgPSBkb191bnJlc29sdmUoY3R4LT5hcmdjLCBjdHgtPmFyZ3YsCisJCQkJcHJlZml4LCBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDApOworCWlmICgqaGFzX2Vycm9ycykKKwkJYWN0aXZlX2NhY2hlX2NoYW5nZWQgPSAwOworCisJY3R4LT5hcmd2ICs9IGN0eC0+YXJnYyAtIDE7CisJY3R4LT5hcmdjID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXVwZGF0ZV9jYWxsYmFjayhzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkJY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBpbnQgZmxhZ3MpCit7CisJaW50ICpoYXNfZXJyb3JzID0gb3B0LT52YWx1ZTsKKwljb25zdCBjaGFyICpwcmVmaXggPSBzdGFydHVwX2luZm8tPnByZWZpeDsKKworCS8qIGNvbnN1bWUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKi8KKwlzZXR1cF93b3JrX3RyZWUoKTsKKwkqaGFzX2Vycm9ycyA9IGRvX3JldXBkYXRlKGN0eC0+YXJnYywgY3R4LT5hcmd2LAorCQkJCXByZWZpeCwgcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwKTsKKwlpZiAoKmhhc19lcnJvcnMpCisJCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkID0gMDsKKworCWN0eC0+YXJndiArPSBjdHgtPmFyZ2MgLSAxOworCWN0eC0+YXJnYyA9IDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfdXBkYXRlX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBuZXdmZCwgZW50cmllcywgaGFzX2Vycm9ycyA9IDAsIGxpbmVfdGVybWluYXRpb24gPSAnXG4nOworCWludCByZWFkX2Zyb21fc3RkaW4gPSAwOworCWludCBwcmVmaXhfbGVuZ3RoID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCWludCBwcmVmZXJyZWRfaW5kZXhfZm9ybWF0ID0gMDsKKwljaGFyIHNldF9leGVjdXRhYmxlX2JpdCA9IDA7CisJc3RydWN0IHJlZnJlc2hfcGFyYW1zIHJlZnJlc2hfYXJncyA9IHswLCAmaGFzX2Vycm9yc307CisJaW50IGxvY2tfZXJyb3IgPSAwOworCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZTsKKwlzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90IGN0eDsKKwlpbnQgcGFyc2VvcHRfc3RhdGUgPSBQQVJTRV9PUFRfVU5LTk9XTjsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgncScsIE5VTEwsICZyZWZyZXNoX2FyZ3MuZmxhZ3MsCisJCQlOXygiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIiksCisJCQlSRUZSRVNIX1FVSUVUKSwKKwkJT1BUX0JJVCgwLCAiaWdub3JlLXN1Ym1vZHVsZXMiLCAmcmVmcmVzaF9hcmdzLmZsYWdzLAorCQkJTl8oInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIiksCisJCQlSRUZSRVNIX0lHTk9SRV9TVUJNT0RVTEVTKSwKKwkJT1BUX1NFVF9JTlQoMCwgImFkZCIsICZhbGxvd19hZGQsCisJCQlOXygiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiKSwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJyZXBsYWNlIiwgJmFsbG93X3JlcGxhY2UsCisJCQlOXygibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiKSwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJyZW1vdmUiLCAmYWxsb3dfcmVtb3ZlLAorCQkJTl8oIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiKSwgMSksCisJCU9QVF9CSVQoMCwgInVubWVyZ2VkIiwgJnJlZnJlc2hfYXJncy5mbGFncywKKwkJCU5fKCJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIpLAorCQkJUkVGUkVTSF9VTk1FUkdFRCksCisJCXtPUFRJT05fQ0FMTEJBQ0ssIDAsICJyZWZyZXNoIiwgJnJlZnJlc2hfYXJncywgTlVMTCwKKwkJCU5fKCJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywKKwkJCXJlZnJlc2hfY2FsbGJhY2t9LAorCQl7T1BUSU9OX0NBTExCQUNLLCAwLCAicmVhbGx5LXJlZnJlc2giLCAmcmVmcmVzaF9hcmdzLCBOVUxMLAorCQkJTl8oImxpa2UgLS1yZWZyZXNoLCBidXQgaWdub3JlIGFzc3VtZS11bmNoYW5nZWQgc2V0dGluZyIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJcmVhbGx5X3JlZnJlc2hfY2FsbGJhY2t9LAorCQl7T1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLLCAwLCAiY2FjaGVpbmZvIiwgTlVMTCwKKwkJCU5fKCI8bW9kZT4gPG9iamVjdD4gPHBhdGg+IiksCisJCQlOXygiYWRkIHRoZSBzcGVjaWZpZWQgZW50cnkgdG8gdGhlIGluZGV4IiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfAkvKiBkaXNhbGxvdyAtLWNhY2hlaW5mbz08bW9kZT4gZm9ybSAqLworCQkJUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX0xJVEVSQUxfQVJHSEVMUCwKKwkJCShwYXJzZV9vcHRfY2IgKikgY2FjaGVpbmZvX2NhbGxiYWNrfSwKKwkJe09QVElPTl9DQUxMQkFDSywgMCwgImNobW9kIiwgJnNldF9leGVjdXRhYmxlX2JpdCwgTl8oIigrLy0peCIpLAorCQkJTl8oIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIiksCisJCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQLAorCQkJY2htb2RfY2FsbGJhY2t9LAorCQl7T1BUSU9OX1NFVF9JTlQsIDAsICJhc3N1bWUtdW5jaGFuZ2VkIiwgJm1hcmtfdmFsaWRfb25seSwgTlVMTCwKKwkJCU5fKCJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgTUFSS19GTEFHfSwKKwkJe09QVElPTl9TRVRfSU5ULCAwLCAibm8tYXNzdW1lLXVuY2hhbmdlZCIsICZtYXJrX3ZhbGlkX29ubHksIE5VTEwsCisJCQlOXygiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIFVOTUFSS19GTEFHfSwKKwkJe09QVElPTl9TRVRfSU5ULCAwLCAic2tpcC13b3JrdHJlZSIsICZtYXJrX3NraXBfd29ya3RyZWVfb25seSwgTlVMTCwKKwkJCU5fKCJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIE1BUktfRkxBR30sCisJCXtPUFRJT05fU0VUX0lOVCwgMCwgIm5vLXNraXAtd29ya3RyZWUiLCAmbWFya19za2lwX3dvcmt0cmVlX29ubHksIE5VTEwsCisJCQlOXygiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgVU5NQVJLX0ZMQUd9LAorCQlPUFRfU0VUX0lOVCgwLCAiaW5mby1vbmx5IiwgJmluZm9fb25seSwKKwkJCU5fKCJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoMCwgImZvcmNlLXJlbW92ZSIsICZmb3JjZV9yZW1vdmUsCisJCQlOXygicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoJ3onLCBOVUxMLCAmbGluZV90ZXJtaW5hdGlvbiwKKwkJCU5fKCJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiKSwgJ1wwJyksCisJCXtPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssIDAsICJzdGRpbiIsICZyZWFkX2Zyb21fc3RkaW4sIE5VTEwsCisJCQlOXygicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIpLAorCQkJUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PQVJHLAorCQkJKHBhcnNlX29wdF9jYiAqKSBzdGRpbl9jYWxsYmFja30sCisJCXtPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssIDAsICJpbmRleC1pbmZvIiwgJmxpbmVfdGVybWluYXRpb24sIE5VTEwsCisJCQlOXygiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiKSwKKwkJCVBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0FSRywKKwkJCShwYXJzZV9vcHRfY2IgKikgc3RkaW5fY2FjaGVpbmZvX2NhbGxiYWNrfSwKKwkJe09QVElPTl9MT1dMRVZFTF9DQUxMQkFDSywgMCwgInVucmVzb2x2ZSIsICZoYXNfZXJyb3JzLCBOVUxMLAorCQkJTl8oInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIpLAorCQkJUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PQVJHLAorCQkJKHBhcnNlX29wdF9jYiAqKSB1bnJlc29sdmVfY2FsbGJhY2t9LAorCQl7T1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLLCAnZycsICJhZ2FpbiIsICZoYXNfZXJyb3JzLCBOVUxMLAorCQkJTl8oIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIiksCisJCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcsCisJCQkocGFyc2Vfb3B0X2NiICopIHJldXBkYXRlX2NhbGxiYWNrfSwKKwkJT1BUX0JJVCgwLCAiaWdub3JlLW1pc3NpbmciLCAmcmVmcmVzaF9hcmdzLmZsYWdzLAorCQkJTl8oImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiKSwKKwkJCVJFRlJFU0hfSUdOT1JFX01JU1NJTkcpLAorCQlPUFRfU0VUX0lOVCgwLCAidmVyYm9zZSIsICZ2ZXJib3NlLAorCQkJTl8oInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIpLCAxKSwKKwkJe09QVElPTl9DQUxMQkFDSywgMCwgImNsZWFyLXJlc29sdmUtdW5kbyIsIE5VTEwsIE5VTEwsCisJCQlOXygiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywKKwkJCXJlc29sdmVfdW5kb19jbGVhcl9jYWxsYmFja30sCisJCU9QVF9JTlRFR0VSKDAsICJpbmRleC12ZXJzaW9uIiwgJnByZWZlcnJlZF9pbmRleF9mb3JtYXQsCisJCQlOXygid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKHVwZGF0ZV9pbmRleF91c2FnZVswXSk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwkvKiBXZSBjYW4ndCBmcmVlIHRoaXMgbWVtb3J5LCBpdCBiZWNvbWVzIHBhcnQgb2YgYSBsaW5rZWQgbGlzdCBwYXJzZWQgYXRleGl0KCkgKi8KKwlsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisKKwluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSwgMCk7CisJaWYgKG5ld2ZkIDwgMCkKKwkJbG9ja19lcnJvciA9IGVycm5vOworCisJZW50cmllcyA9IHJlYWRfY2FjaGUoKTsKKwlpZiAoZW50cmllcyA8IDApCisJCWRpZSgiY2FjaGUgY29ycnVwdGVkIik7CisKKwkvKgorCSAqIEN1c3RvbSBjb3B5IG9mIHBhcnNlX29wdGlvbnMoKSBiZWNhdXNlIHdlIHdhbnQgdG8gaGFuZGxlCisJICogZmlsZW5hbWUgYXJndW1lbnRzIGFzIHRoZXkgY29tZS4KKwkgKi8KKwlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICBvcHRpb25zLCBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwl3aGlsZSAoY3R4LmFyZ2MpIHsKKwkJaWYgKHBhcnNlb3B0X3N0YXRlICE9IFBBUlNFX09QVF9ET05FKQorCQkJcGFyc2VvcHRfc3RhdGUgPSBwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywKKwkJCQkJCQkgICAgdXBkYXRlX2luZGV4X3VzYWdlKTsKKwkJaWYgKCFjdHguYXJnYykKKwkJCWJyZWFrOworCQlzd2l0Y2ggKHBhcnNlb3B0X3N0YXRlKSB7CisJCWNhc2UgUEFSU0VfT1BUX0hFTFA6CisJCQlleGl0KDEyOSk7CisJCWNhc2UgUEFSU0VfT1BUX05PTl9PUFRJT046CisJCWNhc2UgUEFSU0VfT1BUX0RPTkU6CisJCXsKKwkJCWNvbnN0IGNoYXIgKnBhdGggPSBjdHguYXJndlswXTsKKwkJCWNvbnN0IGNoYXIgKnA7CisKKwkJCXNldHVwX3dvcmtfdHJlZSgpOworCQkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgcGF0aCk7CisJCQl1cGRhdGVfb25lKHAsIE5VTEwsIDApOworCQkJaWYgKHNldF9leGVjdXRhYmxlX2JpdCkKKwkJCQljaG1vZF9wYXRoKHNldF9leGVjdXRhYmxlX2JpdCwgcCk7CisJCQlpZiAocCA8IHBhdGggfHwgcCA+IHBhdGggKyBzdHJsZW4ocGF0aCkpCisJCQkJZnJlZSgoY2hhciAqKXApOworCQkJY3R4LmFyZ2MtLTsKKwkJCWN0eC5hcmd2Kys7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFBBUlNFX09QVF9VTktOT1dOOgorCQkJaWYgKGN0eC5hcmd2WzBdWzFdID09ICctJykKKwkJCQllcnJvcigidW5rbm93biBvcHRpb24gJyVzJyIsIGN0eC5hcmd2WzBdICsgMik7CisJCQllbHNlCisJCQkJZXJyb3IoInVua25vd24gc3dpdGNoICclYyciLCAqY3R4Lm9wdCk7CisJCQl1c2FnZV93aXRoX29wdGlvbnModXBkYXRlX2luZGV4X3VzYWdlLCBvcHRpb25zKTsKKwkJfQorCX0KKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19lbmQoJmN0eCk7CisJaWYgKHByZWZlcnJlZF9pbmRleF9mb3JtYXQpIHsKKwkJaWYgKHByZWZlcnJlZF9pbmRleF9mb3JtYXQgPCBJTkRFWF9GT1JNQVRfTEIgfHwKKwkJICAgIElOREVYX0ZPUk1BVF9VQiA8IHByZWZlcnJlZF9pbmRleF9mb3JtYXQpCisJCQlkaWUoImluZGV4LXZlcnNpb24gJWQgbm90IGluIHJhbmdlOiAlZC4uJWQiLAorCQkJICAgIHByZWZlcnJlZF9pbmRleF9mb3JtYXQsCisJCQkgICAgSU5ERVhfRk9STUFUX0xCLCBJTkRFWF9GT1JNQVRfVUIpOworCisJCWlmICh0aGVfaW5kZXgudmVyc2lvbiAhPSBwcmVmZXJyZWRfaW5kZXhfZm9ybWF0KQorCQkJYWN0aXZlX2NhY2hlX2NoYW5nZWQgPSAxOworCQl0aGVfaW5kZXgudmVyc2lvbiA9IHByZWZlcnJlZF9pbmRleF9mb3JtYXQ7CisJfQorCisJaWYgKHJlYWRfZnJvbV9zdGRpbikgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBuYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJc2V0dXBfd29ya190cmVlKCk7CisJCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbiwgbGluZV90ZXJtaW5hdGlvbikgIT0gRU9GKSB7CisJCQljb25zdCBjaGFyICpwOworCQkJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgYnVmLmJ1ZlswXSA9PSAnIicpIHsKKwkJCQlzdHJidWZfcmVzZXQoJm5idWYpOworCQkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJm5idWYsIGJ1Zi5idWYsIE5VTEwpKQorCQkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQkJc3RyYnVmX3N3YXAoJmJ1ZiwgJm5idWYpOworCQkJfQorCQkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYnVmLmJ1Zik7CisJCQl1cGRhdGVfb25lKHAsIE5VTEwsIDApOworCQkJaWYgKHNldF9leGVjdXRhYmxlX2JpdCkKKwkJCQljaG1vZF9wYXRoKHNldF9leGVjdXRhYmxlX2JpdCwgcCk7CisJCQlpZiAocCA8IGJ1Zi5idWYgfHwgcCA+IGJ1Zi5idWYgKyBidWYubGVuKQorCQkJCWZyZWUoKGNoYXIgKilwKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmbmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKworCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCkgeworCQlpZiAobmV3ZmQgPCAwKSB7CisJCQlpZiAocmVmcmVzaF9hcmdzLmZsYWdzICYgUkVGUkVTSF9RVUlFVCkKKwkJCQlleGl0KDEyOCk7CisJCQl1bmFibGVfdG9fbG9ja19pbmRleF9kaWUoZ2V0X2luZGV4X2ZpbGUoKSwgbG9ja19lcnJvcik7CisJCX0KKwkJaWYgKHdyaXRlX2NhY2hlKG5ld2ZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKKwkJICAgIGNvbW1pdF9sb2NrZWRfaW5kZXgobG9ja19maWxlKSkKKwkJCWRpZSgiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIik7CisJfQorCisJcm9sbGJhY2tfbG9ja19maWxlKGxvY2tfZmlsZSk7CisKKwlyZXR1cm4gaGFzX2Vycm9ycyA/IDEgOiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi91cGRhdGUtcmVmLmMgYi9idWlsdGluL3VwZGF0ZS1yZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWQyNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi91cGRhdGUtcmVmLmMKQEAgLTAsMCArMSw1OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3VwZGF0ZV9yZWZfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHVwZGF0ZS1yZWYgW29wdGlvbnNdIC1kIDxyZWZuYW1lPiBbPG9sZHZhbD5dIiksCisJTl8oImdpdCB1cGRhdGUtcmVmIFtvcHRpb25zXSAgICA8cmVmbmFtZT4gPG5ld3ZhbD4gWzxvbGR2YWw+XSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfdXBkYXRlX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpyZWZuYW1lLCAqb2xkdmFsLCAqbXNnID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCBvbGRzaGExWzIwXTsKKwlpbnQgZGVsZXRlID0gMCwgbm9fZGVyZWYgPSAwLCBmbGFncyA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoICdtJywgTlVMTCwgJm1zZywgTl8oInJlYXNvbiIpLCBOXygicmVhc29uIG9mIHRoZSB1cGRhdGUiKSksCisJCU9QVF9CT09MRUFOKCdkJywgTlVMTCwgJmRlbGV0ZSwgTl8oImRlbGV0ZSB0aGUgcmVmZXJlbmNlIikpLAorCQlPUFRfQk9PTEVBTiggMCAsICJuby1kZXJlZiIsICZub19kZXJlZiwKKwkJCQkJTl8oInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF91cGRhdGVfcmVmX3VzYWdlLAorCQkJICAgICAwKTsKKwlpZiAobXNnICYmICEqbXNnKQorCQlkaWUoIlJlZnVzaW5nIHRvIHBlcmZvcm0gdXBkYXRlIHdpdGggZW1wdHkgbWVzc2FnZS4iKTsKKworCWlmIChkZWxldGUpIHsKKwkJaWYgKGFyZ2MgPCAxIHx8IGFyZ2MgPiAyKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF91cGRhdGVfcmVmX3VzYWdlLCBvcHRpb25zKTsKKwkJcmVmbmFtZSA9IGFyZ3ZbMF07CisJCW9sZHZhbCA9IGFyZ3ZbMV07CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisJCWlmIChhcmdjIDwgMiB8fCBhcmdjID4gMykKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfdXBkYXRlX3JlZl91c2FnZSwgb3B0aW9ucyk7CisJCXJlZm5hbWUgPSBhcmd2WzBdOworCQl2YWx1ZSA9IGFyZ3ZbMV07CisJCW9sZHZhbCA9IGFyZ3ZbMl07CisJCWlmIChnZXRfc2hhMSh2YWx1ZSwgc2hhMSkpCisJCQlkaWUoIiVzOiBub3QgYSB2YWxpZCBTSEExIiwgdmFsdWUpOworCX0KKworCWhhc2hjbHIob2xkc2hhMSk7IC8qIGFsbC16ZXJvIGhhc2ggaW4gY2FzZSBvbGR2YWwgaXMgdGhlIGVtcHR5IHN0cmluZyAqLworCWlmIChvbGR2YWwgJiYgKm9sZHZhbCAmJiBnZXRfc2hhMShvbGR2YWwsIG9sZHNoYTEpKQorCQlkaWUoIiVzOiBub3QgYSB2YWxpZCBvbGQgU0hBMSIsIG9sZHZhbCk7CisKKwlpZiAobm9fZGVyZWYpCisJCWZsYWdzID0gUkVGX05PREVSRUY7CisJaWYgKGRlbGV0ZSkKKwkJcmV0dXJuIGRlbGV0ZV9yZWYocmVmbmFtZSwgb2xkdmFsID8gb2xkc2hhMSA6IE5VTEwsIGZsYWdzKTsKKwllbHNlCisJCXJldHVybiB1cGRhdGVfcmVmKG1zZywgcmVmbmFtZSwgc2hhMSwgb2xkdmFsID8gb2xkc2hhMSA6IE5VTEwsCisJCQkJICBmbGFncywgRElFX09OX0VSUik7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jIGIvYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzhjYzNlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYwpAQCAtMCwwICsxLDI1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVwZGF0ZV9zZXJ2ZXJfaW5mb191c2FnZVtdID0geworCU5fKCJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfdXBkYXRlX3NlcnZlcl9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBmb3JjZSA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIHVwZGF0ZV9zZXJ2ZXJfaW5mb191c2FnZSwgMCk7CisJaWYgKGFyZ2MgPiAwKQorCQl1c2FnZV93aXRoX29wdGlvbnModXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlLCBvcHRpb25zKTsKKworCXJldHVybiAhIXVwZGF0ZV9zZXJ2ZXJfaW5mbyhmb3JjZSk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VwbG9hZC1hcmNoaXZlLmMgYi9idWlsdGluL3VwbG9hZC1hcmNoaXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyOGJlYgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdXBsb2FkLWFyY2hpdmUuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBGcmFuY2sgQnVpLUh1dQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiYXJjaGl2ZS5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCitzdGF0aWMgY29uc3QgY2hhciB1cGxvYWRfYXJjaGl2ZV91c2FnZVtdID0KKwkiZ2l0IHVwbG9hZC1hcmNoaXZlIDxyZXBvPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRlYWRjaGlsZFtdID0KKyJnaXQgdXBsb2FkLWFyY2hpdmU6IGFyY2hpdmVyIGRpZWQgd2l0aCBlcnJvciI7CisKKyNkZWZpbmUgTUFYX0FSR1MgKDY0KQorCitpbnQgY21kX3VwbG9hZF9hcmNoaXZlX3dyaXRlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpzZW50X2FyZ3ZbTUFYX0FSR1NdOworCWNvbnN0IGNoYXIgKmFyZ19jbWQgPSAiYXJndW1lbnQgIjsKKwljaGFyICpwLCBidWZbNDA5Nl07CisJaW50IHNlbnRfYXJnYzsKKwlpbnQgbGVuOworCisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2UodXBsb2FkX2FyY2hpdmVfdXNhZ2UpOworCisJaWYgKHN0cmxlbihhcmd2WzFdKSArIDEgPiBzaXplb2YoYnVmKSkKKwkJZGllKCJpbnNhbmVseSBsb25nIHJlcG9zaXRvcnkgbmFtZSIpOworCisJc3RyY3B5KGJ1ZiwgYXJndlsxXSk7IC8qIGVudGVyLXJlcG8gc211ZGdlcyBpdHMgYXJndW1lbnQgKi8KKworCWlmICghZW50ZXJfcmVwbyhidWYsIDApKQorCQlkaWUoIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnkiLCBidWYpOworCisJLyogcHV0IHJlY2VpdmVkIG9wdGlvbnMgaW4gc2VudF9hcmd2W10gKi8KKwlzZW50X2FyZ2MgPSAxOworCXNlbnRfYXJndlswXSA9ICJnaXQtdXBsb2FkLWFyY2hpdmUiOworCWZvciAocCA9IGJ1Zjs7KSB7CisJCS8qIFRoaXMgd2lsbCBkaWUgaWYgbm90IGVub3VnaCBmcmVlIHNwYWNlIGluIGJ1ZiAqLworCQlsZW4gPSBwYWNrZXRfcmVhZF9saW5lKDAsIHAsIChidWYgKyBzaXplb2YgYnVmKSAtIHApOworCQlpZiAobGVuID09IDApCisJCQlicmVhazsJLyogZ290IGEgZmx1c2ggKi8KKwkJaWYgKHNlbnRfYXJnYyA+IE1BWF9BUkdTIC0gMikKKwkJCWRpZSgiVG9vIG1hbnkgb3B0aW9ucyAoPiVkKSIsIE1BWF9BUkdTIC0gMik7CisKKwkJaWYgKHBbbGVuLTFdID09ICdcbicpIHsKKwkJCXBbLS1sZW5dID0gMDsKKwkJfQorCQlpZiAobGVuIDwgc3RybGVuKGFyZ19jbWQpIHx8CisJCSAgICBzdHJuY21wKGFyZ19jbWQsIHAsIHN0cmxlbihhcmdfY21kKSkpCisJCQlkaWUoIidhcmd1bWVudCcgdG9rZW4gb3IgZmx1c2ggZXhwZWN0ZWQiKTsKKworCQlsZW4gLT0gc3RybGVuKGFyZ19jbWQpOworCQltZW1tb3ZlKHAsIHAgKyBzdHJsZW4oYXJnX2NtZCksIGxlbik7CisJCXNlbnRfYXJndltzZW50X2FyZ2MrK10gPSBwOworCQlwICs9IGxlbjsKKwkJKnArKyA9IDA7CisJfQorCXNlbnRfYXJndltzZW50X2FyZ2NdID0gTlVMTDsKKworCS8qIHBhcnNlIGFsbCBvcHRpb25zIHNlbnQgYnkgdGhlIGNsaWVudCAqLworCXJldHVybiB3cml0ZV9hcmNoaXZlKHNlbnRfYXJnYywgc2VudF9hcmd2LCBwcmVmaXgsIDAsIE5VTEwsIDEpOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgZXJyb3JfY2xudChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwljaGFyIGJ1ZlsxMDI0XTsKKwl2YV9saXN0IHBhcmFtczsKKwlpbnQgbGVuOworCisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCWxlbiA9IHZzcHJpbnRmKGJ1ZiwgZm10LCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCXNlbmRfc2lkZWJhbmQoMSwgMywgYnVmLCBsZW4sIExBUkdFX1BBQ0tFVF9NQVgpOworCWRpZSgic2VudCBlcnJvciB0byB0aGUgY2xpZW50OiAlcyIsIGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHByb2Nlc3NfaW5wdXQoaW50IGNoaWxkX2ZkLCBpbnQgYmFuZCkKK3sKKwljaGFyIGJ1ZlsxNjM4NF07CisJc3NpemVfdCBzeiA9IHJlYWQoY2hpbGRfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChzeiA8IDApIHsKKwkJaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJubyAhPSBFSU5UUikKKwkJCWVycm9yX2NsbnQoInJlYWQgZXJyb3I6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gc3o7CisJfQorCXNlbmRfc2lkZWJhbmQoMSwgYmFuZCwgYnVmLCBzeiwgTEFSR0VfUEFDS0VUX01BWCk7CisJcmV0dXJuIHN6OworfQorCitpbnQgY21kX3VwbG9hZF9hcmNoaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHdyaXRlciA9IHsgYXJndiB9OworCisJLyoKKwkgKiBTZXQgdXAgc2lkZWJhbmQgc3VicHJvY2Vzcy4KKwkgKgorCSAqIFdlIChwYXJlbnQpIG1vbml0b3IgYW5kIHJlYWQgZnJvbSBjaGlsZCwgc2VuZGluZyBpdHMgZmQjMSBhbmQgZmQjMgorCSAqIG11bHRpcGxleGVkIG91dCB0byBvdXIgZmQjMS4gIElmIHRoZSBjaGlsZCBkaWVzLCB3ZSB0ZWxsIHRoZSBvdGhlcgorCSAqIGVuZCBvdmVyIGNoYW5uZWwgIzMuCisJICovCisJYXJndlswXSA9ICJ1cGxvYWQtYXJjaGl2ZS0td3JpdGVyIjsKKwl3cml0ZXIub3V0ID0gd3JpdGVyLmVyciA9IC0xOworCXdyaXRlci5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmd3JpdGVyKSkgeworCQlpbnQgZXJyID0gZXJybm87CisJCXBhY2tldF93cml0ZSgxLCAiTkFDSyB1bmFibGUgdG8gc3Bhd24gc3VicHJvY2Vzc1xuIik7CisJCWRpZSgidXBsb2FkLWFyY2hpdmU6ICVzIiwgc3RyZXJyb3IoZXJyKSk7CisJfQorCisJcGFja2V0X3dyaXRlKDEsICJBQ0tcbiIpOworCXBhY2tldF9mbHVzaCgxKTsKKworCXdoaWxlICgxKSB7CisJCXN0cnVjdCBwb2xsZmQgcGZkWzJdOworCisJCXBmZFswXS5mZCA9IHdyaXRlci5vdXQ7CisJCXBmZFswXS5ldmVudHMgPSBQT0xMSU47CisJCXBmZFsxXS5mZCA9IHdyaXRlci5lcnI7CisJCXBmZFsxXS5ldmVudHMgPSBQT0xMSU47CisJCWlmIChwb2xsKHBmZCwgMiwgLTEpIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVJTlRSKSB7CisJCQkJZXJyb3IoInBvbGwgZmFpbGVkIHJlc3VtaW5nOiAlcyIsCisJCQkJICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlzbGVlcCgxKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwZmRbMV0ucmV2ZW50cyAmIFBPTExJTikKKwkJCS8qIFN0YXR1cyBzdHJlYW0gcmVhZHkgKi8KKwkJCWlmIChwcm9jZXNzX2lucHV0KHBmZFsxXS5mZCwgMikpCisJCQkJY29udGludWU7CisJCWlmIChwZmRbMF0ucmV2ZW50cyAmIFBPTExJTikKKwkJCS8qIERhdGEgc3RyZWFtIHJlYWR5ICovCisJCQlpZiAocHJvY2Vzc19pbnB1dChwZmRbMF0uZmQsIDEpKQorCQkJCWNvbnRpbnVlOworCisJCWlmIChmaW5pc2hfY29tbWFuZCgmd3JpdGVyKSkKKwkJCWVycm9yX2NsbnQoIiVzIiwgZGVhZGNoaWxkKTsKKwkJcGFja2V0X2ZsdXNoKDEpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Zhci5jIGIvYnVpbHRpbi92YXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWRiYjUzCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi92YXIuYwpAQCAtMCwwICsxLDkzIEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBFcmljIEJpZWRlcm1hbiwgMjAwNQorICovCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorCitzdGF0aWMgY29uc3QgY2hhciB2YXJfdXNhZ2VbXSA9ICJnaXQgdmFyICgtbCB8IDx2YXJpYWJsZT4pIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmVkaXRvcihpbnQgZmxhZykKK3sKKwljb25zdCBjaGFyICpwZ20gPSBnaXRfZWRpdG9yKCk7CisKKwlpZiAoIXBnbSAmJiBmbGFnICYgSURFTlRfU1RSSUNUKQorCQlkaWUoIlRlcm1pbmFsIGlzIGR1bWIsIGJ1dCBFRElUT1IgdW5zZXQiKTsKKworCXJldHVybiBwZ207Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWdlcihpbnQgZmxhZykKK3sKKwljb25zdCBjaGFyICpwZ20gPSBnaXRfcGFnZXIoMSk7CisKKwlpZiAoIXBnbSkKKwkJcGdtID0gImNhdCI7CisJcmV0dXJuIHBnbTsKK30KKworc3RydWN0IGdpdF92YXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqKCpyZWFkKShpbnQpOworfTsKK3N0YXRpYyBzdHJ1Y3QgZ2l0X3ZhciBnaXRfdmFyc1tdID0geworCXsgIkdJVF9DT01NSVRURVJfSURFTlQiLCBnaXRfY29tbWl0dGVyX2luZm8gfSwKKwl7ICJHSVRfQVVUSE9SX0lERU5UIiwgICBnaXRfYXV0aG9yX2luZm8gfSwKKwl7ICJHSVRfRURJVE9SIiwgZWRpdG9yIH0sCisJeyAiR0lUX1BBR0VSIiwgcGFnZXIgfSwKKwl7ICIiLCBOVUxMIH0sCit9OworCitzdGF0aWMgdm9pZCBsaXN0X3ZhcnModm9pZCkKK3sKKwlzdHJ1Y3QgZ2l0X3ZhciAqcHRyOworCWNvbnN0IGNoYXIgKnZhbDsKKworCWZvciAocHRyID0gZ2l0X3ZhcnM7IHB0ci0+cmVhZDsgcHRyKyspCisJCWlmICgodmFsID0gcHRyLT5yZWFkKDApKSkKKwkJCXByaW50ZigiJXM9JXNcbiIsIHB0ci0+bmFtZSwgdmFsKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlYWRfdmFyKGNvbnN0IGNoYXIgKnZhcikKK3sKKwlzdHJ1Y3QgZ2l0X3ZhciAqcHRyOworCWNvbnN0IGNoYXIgKnZhbDsKKwl2YWwgPSBOVUxMOworCWZvciAocHRyID0gZ2l0X3ZhcnM7IHB0ci0+cmVhZDsgcHRyKyspIHsKKwkJaWYgKHN0cmNtcCh2YXIsIHB0ci0+bmFtZSkgPT0gMCkgeworCQkJdmFsID0gcHRyLT5yZWFkKElERU5UX1NUUklDVCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW50IHNob3dfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICh2YWx1ZSkKKwkJcHJpbnRmKCIlcz0lc1xuIiwgdmFyLCB2YWx1ZSk7CisJZWxzZQorCQlwcmludGYoIiVzXG4iLCB2YXIpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitpbnQgY21kX3ZhcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICp2YWwgPSBOVUxMOworCWlmIChhcmdjICE9IDIpCisJCXVzYWdlKHZhcl91c2FnZSk7CisKKwlpZiAoc3RyY21wKGFyZ3ZbMV0sICItbCIpID09IDApIHsKKwkJZ2l0X2NvbmZpZyhzaG93X2NvbmZpZywgTlVMTCk7CisJCWxpc3RfdmFycygpOworCQlyZXR1cm4gMDsKKwl9CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCXZhbCA9IHJlYWRfdmFyKGFyZ3ZbMV0pOworCWlmICghdmFsKQorCQl1c2FnZSh2YXJfdXNhZ2UpOworCisJcHJpbnRmKCIlc1xuIiwgdmFsKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi92ZXJpZnktcGFjay5jIGIvYnVpbHRpbi92ZXJpZnktcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2Y2QyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3ZlcmlmeS1wYWNrLmMKQEAgLTAsMCArMSw4NCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCisjZGVmaW5lIFZFUklGWV9QQUNLX1ZFUkJPU0UgMDEKKyNkZWZpbmUgVkVSSUZZX1BBQ0tfU1RBVF9PTkxZIDAyCisKK3N0YXRpYyBpbnQgdmVyaWZ5X29uZV9wYWNrKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBpbmRleF9wYWNrOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsiaW5kZXgtcGFjayIsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3Qgc3RyYnVmIGFyZyA9IFNUUkJVRl9JTklUOworCWludCB2ZXJib3NlID0gZmxhZ3MgJiBWRVJJRllfUEFDS19WRVJCT1NFOworCWludCBzdGF0X29ubHkgPSBmbGFncyAmIFZFUklGWV9QQUNLX1NUQVRfT05MWTsKKwlpbnQgZXJyOworCisJaWYgKHN0YXRfb25seSkKKwkJYXJndlsxXSA9ICItLXZlcmlmeS1zdGF0LW9ubHkiOworCWVsc2UgaWYgKHZlcmJvc2UpCisJCWFyZ3ZbMV0gPSAiLS12ZXJpZnktc3RhdCI7CisJZWxzZQorCQlhcmd2WzFdID0gIi0tdmVyaWZ5IjsKKworCS8qCisJICogSW4gYWRkaXRpb24gdG8gImZvby5wYWNrIiB3ZSBhY2NlcHQgImZvby5pZHgiIGFuZCAiZm9vIjsKKwkgKiBub3JtYWxpemUgdGhlc2UgZm9ybXMgdG8gImZvby5wYWNrIiBmb3IgImluZGV4LXBhY2sgLS12ZXJpZnkiLgorCSAqLworCXN0cmJ1Zl9hZGRzdHIoJmFyZywgcGF0aCk7CisJaWYgKGhhc19leHRlbnNpb24oYXJnLmJ1ZiwgIi5pZHgiKSkKKwkJc3RyYnVmX3NwbGljZSgmYXJnLCBhcmcubGVuIC0gMywgMywgInBhY2siLCA0KTsKKwllbHNlIGlmICghaGFzX2V4dGVuc2lvbihhcmcuYnVmLCAiLnBhY2siKSkKKwkJc3RyYnVmX2FkZCgmYXJnLCAiLnBhY2siLCA1KTsKKwlhcmd2WzJdID0gYXJnLmJ1ZjsKKworCW1lbXNldCgmaW5kZXhfcGFjaywgMCwgc2l6ZW9mKGluZGV4X3BhY2spKTsKKwlpbmRleF9wYWNrLmFyZ3YgPSBhcmd2OworCWluZGV4X3BhY2suZ2l0X2NtZCA9IDE7CisKKwllcnIgPSBydW5fY29tbWFuZCgmaW5kZXhfcGFjayk7CisKKwlpZiAodmVyYm9zZSB8fCBzdGF0X29ubHkpIHsKKwkJaWYgKGVycikKKwkJCXByaW50ZigiJXM6IGJhZFxuIiwgYXJnLmJ1Zik7CisJCWVsc2UgeworCQkJaWYgKCFzdGF0X29ubHkpCisJCQkJcHJpbnRmKCIlczogb2tcbiIsIGFyZy5idWYpOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZhcmcpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2ZXJpZnlfcGFja191c2FnZVtdID0geworCU5fKCJnaXQgdmVyaWZ5LXBhY2sgWy12fC0tdmVyYm9zZV0gWy1zfC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iKSwKKwlOVUxMCit9OworCitpbnQgY21kX3ZlcmlmeV9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisJaW50IGk7CisJY29uc3Qgc3RydWN0IG9wdGlvbiB2ZXJpZnlfcGFja19vcHRpb25zW10gPSB7CisJCU9QVF9CSVQoJ3YnLCAidmVyYm9zZSIsICZmbGFncywgTl8oInZlcmJvc2UiKSwKKwkJCVZFUklGWV9QQUNLX1ZFUkJPU0UpLAorCQlPUFRfQklUKCdzJywgInN0YXQtb25seSIsICZmbGFncywgTl8oInNob3cgc3RhdGlzdGljcyBvbmx5IiksCisJCQlWRVJJRllfUEFDS19TVEFUX09OTFkpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgdmVyaWZ5X3BhY2tfb3B0aW9ucywKKwkJCSAgICAgdmVyaWZ5X3BhY2tfdXNhZ2UsIDApOworCWlmIChhcmdjIDwgMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHZlcmlmeV9wYWNrX3VzYWdlLCB2ZXJpZnlfcGFja19vcHRpb25zKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmICh2ZXJpZnlfb25lX3BhY2soYXJndltpXSwgZmxhZ3MpKQorCQkJZXJyID0gMTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi92ZXJpZnktdGFnLmMgYi9idWlsdGluL3ZlcmlmeS10YWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGVlZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi92ZXJpZnktdGFnLmMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCB2ZXJpZnktdGFnIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBDYXJsb3MgUmljYSA8amFzYW1wbGVyQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBnaXQtdmVyaWZ5LXRhZy5zaAorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZlcmlmeV90YWdfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCB2ZXJpZnktdGFnIFstdnwtLXZlcmJvc2VdIDx0YWc+Li4uIiksCisJCU5VTEwKK307CisKK3N0YXRpYyBpbnQgcnVuX2dwZ192ZXJpZnkoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCB2ZXJib3NlKQoreworCWludCBsZW47CisKKwlsZW4gPSBwYXJzZV9zaWduYXR1cmUoYnVmLCBzaXplKTsKKwlpZiAodmVyYm9zZSkKKwkJd3JpdGVfaW5fZnVsbCgxLCBidWYsIGxlbik7CisKKwlpZiAoc2l6ZSA9PSBsZW4pCisJCXJldHVybiBlcnJvcigibm8gc2lnbmF0dXJlIGZvdW5kIik7CisKKwlyZXR1cm4gdmVyaWZ5X3NpZ25lZF9idWZmZXIoYnVmLCBsZW4sIGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X3RhZyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmVyYm9zZSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCByZXQ7CisKKwlpZiAoZ2V0X3NoYTEobmFtZSwgc2hhMSkpCisJCXJldHVybiBlcnJvcigidGFnICclcycgbm90IGZvdW5kLiIsIG5hbWUpOworCisJdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJaWYgKHR5cGUgIT0gT0JKX1RBRykKKwkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IHZlcmlmeSBhIG5vbi10YWcgb2JqZWN0IG9mIHR5cGUgJXMuIiwKKwkJCQluYW1lLCB0eXBlbmFtZSh0eXBlKSk7CisKKwlidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlyZXR1cm4gZXJyb3IoIiVzOiB1bmFibGUgdG8gcmVhZCBmaWxlLiIsIG5hbWUpOworCisJcmV0ID0gcnVuX2dwZ192ZXJpZnkoYnVmLCBzaXplLCB2ZXJib3NlKTsKKworCWZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdpdF92ZXJpZnlfdGFnX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpbnQgc3RhdHVzID0gZ2l0X2dwZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK2ludCBjbWRfdmVyaWZ5X3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSA9IDEsIHZlcmJvc2UgPSAwLCBoYWRfZXJyb3IgPSAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gdmVyaWZ5X3RhZ19vcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oInByaW50IHRhZyBjb250ZW50cyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X3ZlcmlmeV90YWdfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgdmVyaWZ5X3RhZ19vcHRpb25zLAorCQkJICAgICB2ZXJpZnlfdGFnX3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisJaWYgKGFyZ2MgPD0gaSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHZlcmlmeV90YWdfdXNhZ2UsIHZlcmlmeV90YWdfb3B0aW9ucyk7CisKKwkvKiBzb21ldGltZXMgdGhlIHByb2dyYW0gd2FzIHRlcm1pbmF0ZWQgYmVjYXVzZSB0aGlzIHNpZ25hbAorCSAqIHdhcyByZWNlaXZlZCBpbiB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHRoZSBncGcgaW5wdXQ6ICovCisJc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOworCXdoaWxlIChpIDwgYXJnYykKKwkJaWYgKHZlcmlmeV90YWcoYXJndltpKytdLCB2ZXJib3NlKSkKKwkJCWhhZF9lcnJvciA9IDE7CisJcmV0dXJuIGhhZF9lcnJvcjsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vd3JpdGUtdHJlZS5jIGIvYnVpbHRpbi93cml0ZS10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg0YzBkZgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vd3JpdGUtdHJlZS5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3cml0ZV90cmVlX3VzYWdlW10gPSB7CisJTl8oImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIiksCisJTlVMTAorfTsKKworaW50IGNtZF93cml0ZV90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqdW51c2VkX3ByZWZpeCkKK3sKKwlpbnQgZmxhZ3MgPSAwLCByZXQ7CisJY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNvbnN0IGNoYXIgKm1lID0gImdpdC13cml0ZS10cmVlIjsKKwlzdHJ1Y3Qgb3B0aW9uIHdyaXRlX3RyZWVfb3B0aW9uc1tdID0geworCQlPUFRfQklUKDAsICJtaXNzaW5nLW9rIiwgJmZsYWdzLCBOXygiYWxsb3cgbWlzc2luZyBvYmplY3RzIiksCisJCQlXUklURV9UUkVFX01JU1NJTkdfT0spLAorCQl7IE9QVElPTl9TVFJJTkcsIDAsICJwcmVmaXgiLCAmcHJlZml4LCBOXygiPHByZWZpeD4vIiksCisJCSAgTl8oIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIpICwKKwkJICBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQIH0sCisJCXsgT1BUSU9OX0JJVCwgMCwgImlnbm9yZS1jYWNoZS10cmVlIiwgJmZsYWdzLCBOVUxMLAorCQkgIE5fKCJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIiksCisJCSAgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0FSRywgTlVMTCwKKwkJICBXUklURV9UUkVFX0lHTk9SRV9DQUNIRV9UUkVFIH0sCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgdW51c2VkX3ByZWZpeCwgd3JpdGVfdHJlZV9vcHRpb25zLAorCQkJICAgICB3cml0ZV90cmVlX3VzYWdlLCAwKTsKKworCXJldCA9IHdyaXRlX2NhY2hlX2FzX3RyZWUoc2hhMSwgZmxhZ3MsIHByZWZpeCk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIDA6CisJCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV9UUkVFX1VOUkVBREFCTEVfSU5ERVg6CisJCWRpZSgiJXM6IGVycm9yIHJlYWRpbmcgdGhlIGluZGV4IiwgbWUpOworCQlicmVhazsKKwljYXNlIFdSSVRFX1RSRUVfVU5NRVJHRURfSU5ERVg6CisJCWRpZSgiJXM6IGVycm9yIGJ1aWxkaW5nIHRyZWVzIiwgbWUpOworCQlicmVhazsKKwljYXNlIFdSSVRFX1RSRUVfUFJFRklYX0VSUk9SOgorCQlkaWUoIiVzOiBwcmVmaXggJXMgbm90IGZvdW5kIiwgbWUsIHByZWZpeCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVsay1jaGVja2luLmMgYi9idWxrLWNoZWNraW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjBiNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVsay1jaGVja2luLmMKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuCisgKi8KKyNpbmNsdWRlICJidWxrLWNoZWNraW4uaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisKK3N0YXRpYyBpbnQgcGFja19jb21wcmVzc2lvbl9sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKworc3RhdGljIHN0cnVjdCBidWxrX2NoZWNraW5fc3RhdGUgeworCXVuc2lnbmVkIHBsdWdnZWQ6MTsKKworCWNoYXIgKnBhY2tfdG1wX25hbWU7CisJc3RydWN0IHNoYTFmaWxlICpmOworCW9mZl90IG9mZnNldDsKKwlzdHJ1Y3QgcGFja19pZHhfb3B0aW9uIHBhY2tfaWR4X29wdHM7CisKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKip3cml0dGVuOworCXVpbnQzMl90IGFsbG9jX3dyaXR0ZW47CisJdWludDMyX3QgbnJfd3JpdHRlbjsKK30gc3RhdGU7CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9idWxrX2NoZWNraW4oc3RydWN0IGJ1bGtfY2hlY2tpbl9zdGF0ZSAqc3RhdGUpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIHBhY2tuYW1lW1BBVEhfTUFYXTsKKwlpbnQgaTsKKworCWlmICghc3RhdGUtPmYpCisJCXJldHVybjsKKworCWlmIChzdGF0ZS0+bnJfd3JpdHRlbiA9PSAwKSB7CisJCWNsb3NlKHN0YXRlLT5mLT5mZCk7CisJCXVubGluayhzdGF0ZS0+cGFja190bXBfbmFtZSk7CisJCWdvdG8gY2xlYXJfZXhpdDsKKwl9IGVsc2UgaWYgKHN0YXRlLT5ucl93cml0dGVuID09IDEpIHsKKwkJc2hhMWNsb3NlKHN0YXRlLT5mLCBzaGExLCBDU1VNX0ZTWU5DKTsKKwl9IGVsc2UgeworCQlpbnQgZmQgPSBzaGExY2xvc2Uoc3RhdGUtPmYsIHNoYTEsIDApOworCQlmaXh1cF9wYWNrX2hlYWRlcl9mb290ZXIoZmQsIHNoYTEsIHN0YXRlLT5wYWNrX3RtcF9uYW1lLAorCQkJCQkgc3RhdGUtPm5yX3dyaXR0ZW4sIHNoYTEsCisJCQkJCSBzdGF0ZS0+b2Zmc2V0KTsKKwkJY2xvc2UoZmQpOworCX0KKworCXNwcmludGYocGFja25hbWUsICIlcy9wYWNrL3BhY2stIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJZmluaXNoX3RtcF9wYWNrZmlsZShwYWNrbmFtZSwgc3RhdGUtPnBhY2tfdG1wX25hbWUsCisJCQkgICAgc3RhdGUtPndyaXR0ZW4sIHN0YXRlLT5ucl93cml0dGVuLAorCQkJICAgICZzdGF0ZS0+cGFja19pZHhfb3B0cywgc2hhMSk7CisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5ucl93cml0dGVuOyBpKyspCisJCWZyZWUoc3RhdGUtPndyaXR0ZW5baV0pOworCitjbGVhcl9leGl0OgorCWZyZWUoc3RhdGUtPndyaXR0ZW4pOworCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOworCisJLyogTWFrZSBvYmplY3RzIHdlIGp1c3Qgd3JvdGUgYXZhaWxhYmxlIHRvIG91cnNlbHZlcyAqLworCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KCk7Cit9CisKK3N0YXRpYyBpbnQgYWxyZWFkeV93cml0dGVuKHN0cnVjdCBidWxrX2NoZWNraW5fc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyIHNoYTFbXSkKK3sKKwlpbnQgaTsKKworCS8qIFRoZSBvYmplY3QgbWF5IGFscmVhZHkgZXhpc3QgaW4gdGhlIHJlcG9zaXRvcnkgKi8KKwlpZiAoaGFzX3NoYTFfZmlsZShzaGExKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBNaWdodCB3YW50IHRvIGtlZXAgdGhlIGxpc3Qgc29ydGVkICovCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5ucl93cml0dGVuOyBpKyspCisJCWlmICghaGFzaGNtcChzdGF0ZS0+d3JpdHRlbltpXS0+c2hhMSwgc2hhMSkpCisJCQlyZXR1cm4gMTsKKworCS8qIFRoaXMgaXMgYSBuZXcgb2JqZWN0IHdlIG5lZWQgdG8ga2VlcCAqLworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCB0aGUgY29udGVudHMgZnJvbSBmZCBmb3Igc2l6ZSBieXRlcywgc3RyZWFtaW5nIGl0IHRvIHRoZQorICogcGFja2ZpbGUgaW4gc3RhdGUgd2hpbGUgdXBkYXRpbmcgdGhlIGhhc2ggaW4gY3R4LiBTaWduYWwgYSBmYWlsdXJlCisgKiBieSByZXR1cm5pbmcgYSBuZWdhdGl2ZSB2YWx1ZSB3aGVuIHRoZSByZXN1bHRpbmcgcGFjayB3b3VsZCBleGNlZWQKKyAqIHRoZSBwYWNrIHNpemUgbGltaXQgYW5kIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBvYmplY3QgaW4gdGhlIHBhY2ssCisgKiBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRpc2NhcmQgd2hhdCB3ZSB3cm90ZSBmcm9tIHRoZSBjdXJyZW50IHBhY2sKKyAqIGJ5IHRydW5jYXRpbmcgaXQgYW5kIG9wZW5pbmcgYSBuZXcgb25lLiBUaGUgY2FsbGVyIHdpbGwgdGhlbiBjYWxsCisgKiB1cyBhZ2FpbiBhZnRlciByZXdpbmRpbmcgdGhlIGlucHV0IGZkLgorICoKKyAqIFRoZSBhbHJlYWR5X2hhc2hlZF90byBwb2ludGVyIGlzIGtlcHQgdW50b3VjaGVkIGJ5IHRoZSBjYWxsZXIgdG8KKyAqIG1ha2Ugc3VyZSB3ZSBkbyBub3QgaGFzaCB0aGUgc2FtZSBieXRlIHdoZW4gd2UgYXJlIGNhbGxlZAorICogYWdhaW4uIFRoaXMgd2F5LCB0aGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgdG8gY2hlY2twb2ludCBpdHMgaGFzaAorICogc3RhdHVzIGJlZm9yZSBjYWxsaW5nIHVzIGp1c3QgaW4gY2FzZSB3ZSBhc2sgaXQgdG8gY2FsbCB1cyBhZ2FpbgorICogd2l0aCBhIG5ldyBwYWNrLgorICovCitzdGF0aWMgaW50IHN0cmVhbV90b19wYWNrKHN0cnVjdCBidWxrX2NoZWNraW5fc3RhdGUgKnN0YXRlLAorCQkJICBnaXRfU0hBX0NUWCAqY3R4LCBvZmZfdCAqYWxyZWFkeV9oYXNoZWRfdG8sCisJCQkgIGludCBmZCwgc2l6ZV90IHNpemUsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSAgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpCit7CisJZ2l0X3pzdHJlYW0gczsKKwl1bnNpZ25lZCBjaGFyIG9idWZbMTYzODRdOworCXVuc2lnbmVkIGhkcmxlbjsKKwlpbnQgc3RhdHVzID0gWl9PSzsKKwlpbnQgd3JpdGVfb2JqZWN0ID0gKGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1QpOworCW9mZl90IG9mZnNldCA9IDA7CisKKwltZW1zZXQoJnMsIDAsIHNpemVvZihzKSk7CisJZ2l0X2RlZmxhdGVfaW5pdCgmcywgcGFja19jb21wcmVzc2lvbl9sZXZlbCk7CisKKwloZHJsZW4gPSBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKHR5cGUsIHNpemUsIG9idWYpOworCXMubmV4dF9vdXQgPSBvYnVmICsgaGRybGVuOworCXMuYXZhaWxfb3V0ID0gc2l6ZW9mKG9idWYpIC0gaGRybGVuOworCisJd2hpbGUgKHN0YXR1cyAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJdW5zaWduZWQgY2hhciBpYnVmWzE2Mzg0XTsKKworCQlpZiAoc2l6ZSAmJiAhcy5hdmFpbF9pbikgeworCQkJc3NpemVfdCByc2l6ZSA9IHNpemUgPCBzaXplb2YoaWJ1ZikgPyBzaXplIDogc2l6ZW9mKGlidWYpOworCQkJaWYgKHhyZWFkKGZkLCBpYnVmLCByc2l6ZSkgIT0gcnNpemUpCisJCQkJZGllKCJmYWlsZWQgdG8gcmVhZCAlZCBieXRlcyBmcm9tICclcyciLAorCQkJCSAgICAoaW50KXJzaXplLCBwYXRoKTsKKwkJCW9mZnNldCArPSByc2l6ZTsKKwkJCWlmICgqYWxyZWFkeV9oYXNoZWRfdG8gPCBvZmZzZXQpIHsKKwkJCQlzaXplX3QgaHNpemUgPSBvZmZzZXQgLSAqYWxyZWFkeV9oYXNoZWRfdG87CisJCQkJaWYgKHJzaXplIDwgaHNpemUpCisJCQkJCWhzaXplID0gcnNpemU7CisJCQkJaWYgKGhzaXplKQorCQkJCQlnaXRfU0hBMV9VcGRhdGUoY3R4LCBpYnVmLCBoc2l6ZSk7CisJCQkJKmFscmVhZHlfaGFzaGVkX3RvID0gb2Zmc2V0OworCQkJfQorCQkJcy5uZXh0X2luID0gaWJ1ZjsKKwkJCXMuYXZhaWxfaW4gPSByc2l6ZTsKKwkJCXNpemUgLT0gcnNpemU7CisJCX0KKworCQlzdGF0dXMgPSBnaXRfZGVmbGF0ZSgmcywgc2l6ZSA/IDAgOiBaX0ZJTklTSCk7CisKKwkJaWYgKCFzLmF2YWlsX291dCB8fCBzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKSB7CisJCQlpZiAod3JpdGVfb2JqZWN0KSB7CisJCQkJc2l6ZV90IHdyaXR0ZW4gPSBzLm5leHRfb3V0IC0gb2J1ZjsKKworCQkJCS8qIHdvdWxkIHdlIGJ1c3QgdGhlIHNpemUgbGltaXQ/ICovCisJCQkJaWYgKHN0YXRlLT5ucl93cml0dGVuICYmCisJCQkJICAgIHBhY2tfc2l6ZV9saW1pdF9jZmcgJiYKKwkJCQkgICAgcGFja19zaXplX2xpbWl0X2NmZyA8IHN0YXRlLT5vZmZzZXQgKyB3cml0dGVuKSB7CisJCQkJCWdpdF9kZWZsYXRlX2Fib3J0KCZzKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKworCQkJCXNoYTF3cml0ZShzdGF0ZS0+Ziwgb2J1Ziwgd3JpdHRlbik7CisJCQkJc3RhdGUtPm9mZnNldCArPSB3cml0dGVuOworCQkJfQorCQkJcy5uZXh0X291dCA9IG9idWY7CisJCQlzLmF2YWlsX291dCA9IHNpemVvZihvYnVmKTsKKwkJfQorCisJCXN3aXRjaCAoc3RhdHVzKSB7CisJCWNhc2UgWl9PSzoKKwkJY2FzZSBaX0JVRl9FUlJPUjoKKwkJY2FzZSBaX1NUUkVBTV9FTkQ6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWRpZSgidW5leHBlY3RlZCBkZWZsYXRlIGZhaWx1cmU6ICVkIiwgc3RhdHVzKTsKKwkJfQorCX0KKwlnaXRfZGVmbGF0ZV9lbmQoJnMpOworCXJldHVybiAwOworfQorCisvKiBMYXppbHkgY3JlYXRlIGJhY2tpbmcgcGFja2ZpbGUgZm9yIHRoZSBzdGF0ZSAqLworc3RhdGljIHZvaWQgcHJlcGFyZV90b19zdHJlYW0oc3RydWN0IGJ1bGtfY2hlY2tpbl9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpZiAoIShmbGFncyAmIEhBU0hfV1JJVEVfT0JKRUNUKSB8fCBzdGF0ZS0+ZikKKwkJcmV0dXJuOworCisJc3RhdGUtPmYgPSBjcmVhdGVfdG1wX3BhY2tmaWxlKCZzdGF0ZS0+cGFja190bXBfbmFtZSk7CisJcmVzZXRfcGFja19pZHhfb3B0aW9uKCZzdGF0ZS0+cGFja19pZHhfb3B0cyk7CisKKwkvKiBQcmV0ZW5kIHdlIGFyZSBnb2luZyB0byB3cml0ZSBvbmx5IG9uZSBvYmplY3QgKi8KKwlzdGF0ZS0+b2Zmc2V0ID0gd3JpdGVfcGFja19oZWFkZXIoc3RhdGUtPmYsIDEpOworCWlmICghc3RhdGUtPm9mZnNldCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgcGFjayBoZWFkZXIiKTsKK30KKworc3RhdGljIGludCBkZWZsYXRlX3RvX3BhY2soc3RydWN0IGJ1bGtfY2hlY2tpbl9zdGF0ZSAqc3RhdGUsCisJCQkgICB1bnNpZ25lZCBjaGFyIHJlc3VsdF9zaGExW10sCisJCQkgICBpbnQgZmQsIHNpemVfdCBzaXplLAorCQkJICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgdW5zaWduZWQgZmxhZ3MpCit7CisJb2ZmX3Qgc2Vla2JhY2ssIGFscmVhZHlfaGFzaGVkX3RvOworCWdpdF9TSEFfQ1RYIGN0eDsKKwl1bnNpZ25lZCBjaGFyIG9idWZbMTYzODRdOworCXVuc2lnbmVkIGhlYWRlcl9sZW47CisJc3RydWN0IHNoYTFmaWxlX2NoZWNrcG9pbnQgY2hlY2twb2ludDsKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKmlkeCA9IE5VTEw7CisKKwlzZWVrYmFjayA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUik7CisJaWYgKHNlZWtiYWNrID09IChvZmZfdCkgLTEpCisJCXJldHVybiBlcnJvcigiY2Fubm90IGZpbmQgdGhlIGN1cnJlbnQgb2Zmc2V0Iik7CisKKwloZWFkZXJfbGVuID0gc3ByaW50ZigoY2hhciAqKW9idWYsICIlcyAlIiBQUkl1TUFYLAorCQkJICAgICB0eXBlbmFtZSh0eXBlKSwgKHVpbnRtYXhfdClzaXplKSArIDE7CisJZ2l0X1NIQTFfSW5pdCgmY3R4KTsKKwlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgb2J1ZiwgaGVhZGVyX2xlbik7CisKKwkvKiBOb3RlOiBpZHggaXMgbm9uLU5VTEwgd2hlbiB3ZSBhcmUgd3JpdGluZyAqLworCWlmICgoZmxhZ3MgJiBIQVNIX1dSSVRFX09CSkVDVCkgIT0gMCkKKwkJaWR4ID0geGNhbGxvYygxLCBzaXplb2YoKmlkeCkpOworCisJYWxyZWFkeV9oYXNoZWRfdG8gPSAwOworCisJd2hpbGUgKDEpIHsKKwkJcHJlcGFyZV90b19zdHJlYW0oc3RhdGUsIGZsYWdzKTsKKwkJaWYgKGlkeCkgeworCQkJc2hhMWZpbGVfY2hlY2twb2ludChzdGF0ZS0+ZiwgJmNoZWNrcG9pbnQpOworCQkJaWR4LT5vZmZzZXQgPSBzdGF0ZS0+b2Zmc2V0OworCQkJY3JjMzJfYmVnaW4oc3RhdGUtPmYpOworCQl9CisJCWlmICghc3RyZWFtX3RvX3BhY2soc3RhdGUsICZjdHgsICZhbHJlYWR5X2hhc2hlZF90bywKKwkJCQkgICAgZmQsIHNpemUsIHR5cGUsIHBhdGgsIGZsYWdzKSkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBXcml0aW5nIHRoaXMgb2JqZWN0IHRvIHRoZSBjdXJyZW50IHBhY2sgd2lsbCBtYWtlCisJCSAqIGl0IHRvbyBiaWc7IHdlIG5lZWQgdG8gdHJ1bmNhdGUgaXQsIHN0YXJ0IGEgbmV3CisJCSAqIHBhY2ssIGFuZCB3cml0ZSBpbnRvIGl0LgorCQkgKi8KKwkJaWYgKCFpZHgpCisJCQlkaWUoIkJVRzogc2hvdWxkIG5vdCBoYXBwZW4iKTsKKwkJc2hhMWZpbGVfdHJ1bmNhdGUoc3RhdGUtPmYsICZjaGVja3BvaW50KTsKKwkJc3RhdGUtPm9mZnNldCA9IGNoZWNrcG9pbnQub2Zmc2V0OworCQlmaW5pc2hfYnVsa19jaGVja2luKHN0YXRlKTsKKwkJaWYgKGxzZWVrKGZkLCBzZWVrYmFjaywgU0VFS19TRVQpID09IChvZmZfdCkgLTEpCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBzZWVrIGJhY2siKTsKKwl9CisJZ2l0X1NIQTFfRmluYWwocmVzdWx0X3NoYTEsICZjdHgpOworCWlmICghaWR4KQorCQlyZXR1cm4gMDsKKworCWlkeC0+Y3JjMzIgPSBjcmMzMl9lbmQoc3RhdGUtPmYpOworCWlmIChhbHJlYWR5X3dyaXR0ZW4oc3RhdGUsIHJlc3VsdF9zaGExKSkgeworCQlzaGExZmlsZV90cnVuY2F0ZShzdGF0ZS0+ZiwgJmNoZWNrcG9pbnQpOworCQlzdGF0ZS0+b2Zmc2V0ID0gY2hlY2twb2ludC5vZmZzZXQ7CisJCWZyZWUoaWR4KTsKKwl9IGVsc2UgeworCQloYXNoY3B5KGlkeC0+c2hhMSwgcmVzdWx0X3NoYTEpOworCQlBTExPQ19HUk9XKHN0YXRlLT53cml0dGVuLAorCQkJICAgc3RhdGUtPm5yX3dyaXR0ZW4gKyAxLAorCQkJICAgc3RhdGUtPmFsbG9jX3dyaXR0ZW4pOworCQlzdGF0ZS0+d3JpdHRlbltzdGF0ZS0+bnJfd3JpdHRlbisrXSA9IGlkeDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBpbmRleF9idWxrX2NoZWNraW4odW5zaWduZWQgY2hhciAqc2hhMSwKKwkJICAgICAgIGludCBmZCwgc2l6ZV90IHNpemUsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCBzdGF0dXMgPSBkZWZsYXRlX3RvX3BhY2soJnN0YXRlLCBzaGExLCBmZCwgc2l6ZSwgdHlwZSwKKwkJCQkgICAgIHBhdGgsIGZsYWdzKTsKKwlpZiAoIXN0YXRlLnBsdWdnZWQpCisJCWZpbmlzaF9idWxrX2NoZWNraW4oJnN0YXRlKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIHBsdWdfYnVsa19jaGVja2luKHZvaWQpCit7CisJc3RhdGUucGx1Z2dlZCA9IDE7Cit9CisKK3ZvaWQgdW5wbHVnX2J1bGtfY2hlY2tpbih2b2lkKQoreworCXN0YXRlLnBsdWdnZWQgPSAwOworCWlmIChzdGF0ZS5mKQorCQlmaW5pc2hfYnVsa19jaGVja2luKCZzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9idWxrLWNoZWNraW4uaCBiL2J1bGstY2hlY2tpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNTk5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9idWxrLWNoZWNraW4uaApAQCAtMCwwICsxLDE2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLgorICovCisjaWZuZGVmIEJVTEtfQ0hFQ0tJTl9ICisjZGVmaW5lIEJVTEtfQ0hFQ0tJTl9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorCitleHRlcm4gaW50IGluZGV4X2J1bGtfY2hlY2tpbih1bnNpZ25lZCBjaGFyIHNoYTFbXSwKKwkJCSAgICAgIGludCBmZCwgc2l6ZV90IHNpemUsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKTsKKworZXh0ZXJuIHZvaWQgcGx1Z19idWxrX2NoZWNraW4odm9pZCk7CitleHRlcm4gdm9pZCB1bnBsdWdfYnVsa19jaGVja2luKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2J1bmRsZS5jIGIvYnVuZGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxMjgxNgotLS0gL2Rldi9udWxsCisrKyBiL2J1bmRsZS5jCkBAIC0wLDAgKzEsNDQzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidW5kbGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgYnVuZGxlX3NpZ25hdHVyZVtdID0gIiMgdjIgZ2l0IGJ1bmRsZVxuIjsKKworc3RhdGljIHZvaWQgYWRkX3RvX3JlZl9saXN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKm5hbWUsCisJCXN0cnVjdCByZWZfbGlzdCAqbGlzdCkKK3sKKwlpZiAobGlzdC0+bnIgKyAxID49IGxpc3QtPmFsbG9jKSB7CisJCWxpc3QtPmFsbG9jID0gYWxsb2NfbnIobGlzdC0+bnIgKyAxKTsKKwkJbGlzdC0+bGlzdCA9IHhyZWFsbG9jKGxpc3QtPmxpc3QsCisJCQkJbGlzdC0+YWxsb2MgKiBzaXplb2YobGlzdC0+bGlzdFswXSkpOworCX0KKwltZW1jcHkobGlzdC0+bGlzdFtsaXN0LT5ucl0uc2hhMSwgc2hhMSwgMjApOworCWxpc3QtPmxpc3RbbGlzdC0+bnJdLm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCWxpc3QtPm5yKys7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYnVuZGxlX2hlYWRlcihpbnQgZmQsIHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVwb3J0X3BhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3RhdHVzID0gMDsKKworCS8qIFRoZSBidW5kbGUgaGVhZGVyIGJlZ2lucyB3aXRoIHRoZSBzaWduYXR1cmUgKi8KKwlpZiAoc3RyYnVmX2dldHdob2xlbGluZV9mZCgmYnVmLCBmZCwgJ1xuJykgfHwKKwkgICAgc3RyY21wKGJ1Zi5idWYsIGJ1bmRsZV9zaWduYXR1cmUpKSB7CisJCWlmIChyZXBvcnRfcGF0aCkKKwkJCWVycm9yKF8oIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiKSwKKwkJCSAgICAgIHJlcG9ydF9wYXRoKTsKKwkJc3RhdHVzID0gLTE7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJLyogVGhlIGJ1bmRsZSBoZWFkZXIgZW5kcyB3aXRoIGFuIGVtcHR5IGxpbmUgKi8KKwl3aGlsZSAoIXN0cmJ1Zl9nZXR3aG9sZWxpbmVfZmQoJmJ1ZiwgZmQsICdcbicpICYmCisJICAgICAgIGJ1Zi5sZW4gJiYgYnVmLmJ1ZlswXSAhPSAnXG4nKSB7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWludCBpc19wcmVyZXEgPSAwOworCisJCWlmICgqYnVmLmJ1ZiA9PSAnLScpIHsKKwkJCWlzX3ByZXJlcSA9IDE7CisJCQlzdHJidWZfcmVtb3ZlKCZidWYsIDAsIDEpOworCQl9CisJCXN0cmJ1Zl9ydHJpbSgmYnVmKTsKKworCQkvKgorCQkgKiBUaXAgbGluZXMgaGF2ZSBvYmplY3QgbmFtZSwgU1AsIGFuZCByZWZuYW1lLgorCQkgKiBQcmVyZXF1aXNpdGVzIGhhdmUgb2JqZWN0IG5hbWUgdGhhdCBpcyBvcHRpb25hbGx5CisJCSAqIGZvbGxvd2VkIGJ5IFNQIGFuZCBzdWJqZWN0IGxpbmUuCisJCSAqLworCQlpZiAoZ2V0X3NoYTFfaGV4KGJ1Zi5idWYsIHNoYTEpIHx8CisJCSAgICAoNDAgPD0gYnVmLmxlbiAmJiAhaXNzcGFjZShidWYuYnVmWzQwXSkpIHx8CisJCSAgICAoIWlzX3ByZXJlcSAmJiBidWYubGVuIDw9IDQwKSkgeworCQkJaWYgKHJlcG9ydF9wYXRoKQorCQkJCWVycm9yKF8oInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIpLAorCQkJCSAgICAgIChpc19wcmVyZXEgPyAiLSIgOiAiIiksIGJ1Zi5idWYsIChpbnQpYnVmLmxlbik7CisJCQlzdGF0dXMgPSAtMTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKGlzX3ByZXJlcSkKKwkJCQlhZGRfdG9fcmVmX2xpc3Qoc2hhMSwgIiIsICZoZWFkZXItPnByZXJlcXVpc2l0ZXMpOworCQkJZWxzZQorCQkJCWFkZF90b19yZWZfbGlzdChzaGExLCBidWYuYnVmICsgNDEsICZoZWFkZXItPnJlZmVyZW5jZXMpOworCQl9CisJfQorCisgYWJvcnQ6CisJaWYgKHN0YXR1cykgeworCQljbG9zZShmZCk7CisJCWZkID0gLTE7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiBmZDsKK30KKworaW50IHJlYWRfYnVuZGxlX2hlYWRlcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyKQoreworCWludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBvcGVuICclcyciKSwgcGF0aCk7CisJcmV0dXJuIHBhcnNlX2J1bmRsZV9oZWFkZXIoZmQsIGhlYWRlciwgcGF0aCk7Cit9CisKK2ludCBpc19idW5kbGUoY29uc3QgY2hhciAqcGF0aCwgaW50IHF1aWV0KQoreworCXN0cnVjdCBidW5kbGVfaGVhZGVyIGhlYWRlcjsKKwlpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKworCWlmIChmZCA8IDApCisJCXJldHVybiAwOworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJZmQgPSBwYXJzZV9idW5kbGVfaGVhZGVyKGZkLCAmaGVhZGVyLCBxdWlldCA/IE5VTEwgOiBwYXRoKTsKKwlpZiAoZmQgPj0gMCkKKwkJY2xvc2UoZmQpOworCXJldHVybiAoZmQgPj0gMCk7Cit9CisKK3N0YXRpYyBpbnQgbGlzdF9yZWZzKHN0cnVjdCByZWZfbGlzdCAqciwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHItPm5yOyBpKyspIHsKKwkJaWYgKGFyZ2MgPiAxKSB7CisJCQlpbnQgajsKKwkJCWZvciAoaiA9IDE7IGogPCBhcmdjOyBqKyspCisJCQkJaWYgKCFzdHJjbXAoci0+bGlzdFtpXS5uYW1lLCBhcmd2W2pdKSkKKwkJCQkJYnJlYWs7CisJCQlpZiAoaiA9PSBhcmdjKQorCQkJCWNvbnRpbnVlOworCQl9CisJCXByaW50ZigiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHItPmxpc3RbaV0uc2hhMSksCisJCQkJci0+bGlzdFtpXS5uYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgUFJFUkVRX01BUksgKDF1PDwxNikKKworaW50IHZlcmlmeV9idW5kbGUoc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlciwgaW50IHZlcmJvc2UpCit7CisJLyoKKwkgKiBEbyBmYXN0IGNoZWNrLCB0aGVuIGlmIGFueSBwcmVyZXFzIGFyZSBtaXNzaW5nIHRoZW4gZ28gbGluZSBieSBsaW5lCisJICogdG8gYmUgdmVyYm9zZSBhYm91dCB0aGUgZXJyb3JzCisJICovCisJc3RydWN0IHJlZl9saXN0ICpwID0gJmhlYWRlci0+cHJlcmVxdWlzaXRlczsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCwgIi0tYWxsIiwgTlVMTH07CisJc3RydWN0IG9iamVjdF9hcnJheSByZWZzOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgaSwgcmV0ID0gMCwgcmVxX25yOworCWNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBfKCJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIpOworCisJaW5pdF9yZXZpc2lvbnMoJnJldnMsIE5VTEwpOworCWZvciAoaSA9IDA7IGkgPCBwLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfbGlzdF9lbnRyeSAqZSA9IHAtPmxpc3QgKyBpOworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KGUtPnNoYTEpOworCQlpZiAobykgeworCQkJby0+ZmxhZ3MgfD0gUFJFUkVRX01BUks7CisJCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsIG8sIGUtPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCsrcmV0ID09IDEpCisJCQllcnJvcigiJXMiLCBtZXNzYWdlKTsKKwkJZXJyb3IoIiVzICVzIiwgc2hhMV90b19oZXgoZS0+c2hhMSksIGUtPm5hbWUpOworCX0KKwlpZiAocmV2cy5wZW5kaW5nLm5yICE9IHAtPm5yKQorCQlyZXR1cm4gcmV0OworCXJlcV9uciA9IHJldnMucGVuZGluZy5ucjsKKwlzZXR1cF9yZXZpc2lvbnMoMiwgYXJndiwgJnJldnMsIE5VTEwpOworCisJcmVmcyA9IHJldnMucGVuZGluZzsKKwlyZXZzLmxlYWtfcGVuZGluZyA9IDE7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCisJaSA9IHJlcV9ucjsKKwl3aGlsZSAoaSAmJiAoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXZzKSkpCisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFBSRVJFUV9NQVJLKQorCQkJaS0tOworCisJZm9yIChpID0gMDsgaSA8IHJlcV9ucjsgaSsrKQorCQlpZiAoIShyZWZzLm9iamVjdHNbaV0uaXRlbS0+ZmxhZ3MgJiBTSE9XTikpIHsKKwkJCWlmICgrK3JldCA9PSAxKQorCQkJCWVycm9yKCIlcyIsIG1lc3NhZ2UpOworCQkJZXJyb3IoIiVzICVzIiwgc2hhMV90b19oZXgocmVmcy5vYmplY3RzW2ldLml0ZW0tPnNoYTEpLAorCQkJCXJlZnMub2JqZWN0c1tpXS5uYW1lKTsKKwkJfQorCisJY2xlYXJfY29tbWl0X21hcmtzX2Zvcl9vYmplY3RfYXJyYXkoJnJlZnMsIEFMTF9SRVZfRkxBR1MpOworCWZyZWUocmVmcy5vYmplY3RzKTsKKworCWlmICh2ZXJib3NlKSB7CisJCXN0cnVjdCByZWZfbGlzdCAqcjsKKworCQlyID0gJmhlYWRlci0+cmVmZXJlbmNlczsKKwkJcHJpbnRmX2xuKFFfKCJUaGUgYnVuZGxlIGNvbnRhaW5zICVkIHJlZiIsCisJCQkgICAgICJUaGUgYnVuZGxlIGNvbnRhaW5zICVkIHJlZnMiLAorCQkJICAgICByLT5uciksCisJCQkgIHItPm5yKTsKKwkJbGlzdF9yZWZzKHIsIDAsIE5VTEwpOworCQlpZiAoIXItPm5yKSB7CisJCQlwcmludGZfbG4oXygiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iKSk7CisJCX0gZWxzZSB7CisJCQlyID0gJmhlYWRlci0+cHJlcmVxdWlzaXRlczsKKwkJCXByaW50Zl9sbihRXygiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZiIsCisJCQkJICAgICAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzIiwKKwkJCQkgICAgIHItPm5yKSwKKwkJCQkgIHItPm5yKTsKKwkJCWxpc3RfcmVmcyhyLCAwLCBOVUxMKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgbGlzdF9idW5kbGVfcmVmcyhzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJcmV0dXJuIGxpc3RfcmVmcygmaGVhZGVyLT5yZWZlcmVuY2VzLCBhcmdjLCBhcmd2KTsKK30KKworc3RhdGljIGludCBpc190YWdfaW5fZGF0ZV9yYW5nZShzdHJ1Y3Qgb2JqZWN0ICp0YWcsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZiwgKmxpbmUsICpsaW5lZW5kOworCXVuc2lnbmVkIGxvbmcgZGF0ZTsKKworCWlmIChyZXZzLT5tYXhfYWdlID09IC0xICYmIHJldnMtPm1pbl9hZ2UgPT0gLTEpCisJCXJldHVybiAxOworCisJYnVmID0gcmVhZF9zaGExX2ZpbGUodGFnLT5zaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlyZXR1cm4gMTsKKwlsaW5lID0gbWVtbWVtKGJ1Ziwgc2l6ZSwgIlxudGFnZ2VyICIsIDgpOworCWlmICghbGluZSsrKQorCQlyZXR1cm4gMTsKKwlsaW5lZW5kID0gbWVtY2hyKGxpbmUsIGJ1ZiArIHNpemUgLSBsaW5lLCAnXG4nKTsKKwlsaW5lID0gbWVtY2hyKGxpbmUsIGxpbmVlbmQgPyBsaW5lZW5kIC0gbGluZSA6IGJ1ZiArIHNpemUgLSBsaW5lLCAnPicpOworCWlmICghbGluZSsrKQorCQlyZXR1cm4gMTsKKwlkYXRlID0gc3RydG91bChsaW5lLCBOVUxMLCAxMCk7CisJZnJlZShidWYpOworCXJldHVybiAocmV2cy0+bWF4X2FnZSA9PSAtMSB8fCByZXZzLT5tYXhfYWdlIDwgZGF0ZSkgJiYKKwkJKHJldnMtPm1pbl9hZ2UgPT0gLTEgfHwgcmV2cy0+bWluX2FnZSA+IGRhdGUpOworfQorCitpbnQgY3JlYXRlX2J1bmRsZShzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLCBjb25zdCBjaGFyICpwYXRoLAorCQlpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9jazsKKwlpbnQgYnVuZGxlX2ZkID0gLTE7CisJaW50IGJ1bmRsZV90b19zdGRvdXQ7CisJY29uc3QgY2hhciAqKmFyZ3ZfYm91bmRhcnkgPSB4bWFsbG9jKChhcmdjICsgNCkgKiBzaXplb2YoY29uc3QgY2hhciAqKSk7CisJY29uc3QgY2hhciAqKmFyZ3ZfcGFjayA9IHhtYWxsb2MoNiAqIHNpemVvZihjb25zdCBjaGFyICopKTsKKwlpbnQgaSwgcmVmX2NvdW50ID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHJsczsKKwlGSUxFICpybHNfZm91dDsKKworCWJ1bmRsZV90b19zdGRvdXQgPSAhc3RyY21wKHBhdGgsICItIik7CisJaWYgKGJ1bmRsZV90b19zdGRvdXQpCisJCWJ1bmRsZV9mZCA9IDE7CisJZWxzZQorCQlidW5kbGVfZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBwYXRoLAorCQkJCQkJICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCisJLyogd3JpdGUgc2lnbmF0dXJlICovCisJd3JpdGVfb3JfZGllKGJ1bmRsZV9mZCwgYnVuZGxlX3NpZ25hdHVyZSwgc3RybGVuKGJ1bmRsZV9zaWduYXR1cmUpKTsKKworCS8qIGluaXQgcmV2cyB0byBsaXN0IG9iamVjdHMgZm9yIHBhY2stb2JqZWN0cyBsYXRlciAqLworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisJaW5pdF9yZXZpc2lvbnMoJnJldnMsIE5VTEwpOworCisJLyogd3JpdGUgcHJlcmVxdWlzaXRlcyAqLworCW1lbWNweShhcmd2X2JvdW5kYXJ5ICsgMywgYXJndiArIDEsIGFyZ2MgKiBzaXplb2YoY29uc3QgY2hhciAqKSk7CisJYXJndl9ib3VuZGFyeVswXSA9ICJyZXYtbGlzdCI7CisJYXJndl9ib3VuZGFyeVsxXSA9ICItLWJvdW5kYXJ5IjsKKwlhcmd2X2JvdW5kYXJ5WzJdID0gIi0tcHJldHR5PW9uZWxpbmUiOworCWFyZ3ZfYm91bmRhcnlbYXJnYyArIDJdID0gTlVMTDsKKwltZW1zZXQoJnJscywgMCwgc2l6ZW9mKHJscykpOworCXJscy5hcmd2ID0gYXJndl9ib3VuZGFyeTsKKwlybHMub3V0ID0gLTE7CisJcmxzLmdpdF9jbWQgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZybHMpKQorCQlyZXR1cm4gLTE7CisJcmxzX2ZvdXQgPSB4ZmRvcGVuKHJscy5vdXQsICJyIik7CisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmJ1ZiwgcmxzX2ZvdXQsICdcbicpICE9IEVPRikgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlpZiAoYnVmLmxlbiA+IDAgJiYgYnVmLmJ1ZlswXSA9PSAnLScpIHsKKwkJCXdyaXRlX29yX2RpZShidW5kbGVfZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCQkJaWYgKCFnZXRfc2hhMV9oZXgoYnVmLmJ1ZiArIDEsIHNoYTEpKSB7CisJCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCQkJCW9iamVjdC0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsIG9iamVjdCwgeHN0cmR1cChidWYuYnVmKSk7CisJCQl9CisJCX0gZWxzZSBpZiAoIWdldF9zaGExX2hleChidWYuYnVmLCBzaGExKSkgeworCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCQkJb2JqZWN0LT5mbGFncyB8PSBTSE9XTjsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlmY2xvc2UocmxzX2ZvdXQpOworCWlmIChmaW5pc2hfY29tbWFuZCgmcmxzKSkKKwkJcmV0dXJuIGVycm9yKF8oInJldi1saXN0IGRpZWQiKSk7CisKKwkvKiB3cml0ZSByZWZlcmVuY2VzICovCisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2cywgTlVMTCk7CisKKwlpZiAoYXJnYyA+IDEpCisJCXJldHVybiBlcnJvcihfKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiksIGFyZ3ZbMV0pOworCisJb2JqZWN0X2FycmF5X3JlbW92ZV9kdXBsaWNhdGVzKCZyZXZzLnBlbmRpbmcpOworCisJZm9yIChpID0gMDsgaSA8IHJldnMucGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmUgPSByZXZzLnBlbmRpbmcub2JqZWN0cyArIGk7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWNoYXIgKnJlZjsKKwkJY29uc3QgY2hhciAqZGlzcGxheV9yZWY7CisJCWludCBmbGFnOworCisJCWlmIChlLT5pdGVtLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQljb250aW51ZTsKKwkJaWYgKGR3aW1fcmVmKGUtPm5hbWUsIHN0cmxlbihlLT5uYW1lKSwgc2hhMSwgJnJlZikgIT0gMSkKKwkJCWNvbnRpbnVlOworCQlpZiAocmVhZF9yZWZfZnVsbChlLT5uYW1lLCBzaGExLCAxLCAmZmxhZykpCisJCQlmbGFnID0gMDsKKwkJZGlzcGxheV9yZWYgPSAoZmxhZyAmIFJFRl9JU1NZTVJFRikgPyBlLT5uYW1lIDogcmVmOworCisJCWlmIChlLT5pdGVtLT50eXBlID09IE9CSl9UQUcgJiYKKwkJCQkhaXNfdGFnX2luX2RhdGVfcmFuZ2UoZS0+aXRlbSwgJnJldnMpKSB7CisJCQllLT5pdGVtLT5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIHJlZnMgd2Ugd3JvdGUgb3V0IGlzIGNvcnJlY3Q7IC0tbWF4LWNvdW50IGFuZAorCQkgKiBvdGhlciBsaW1pdGluZyBvcHRpb25zIGNvdWxkIGhhdmUgcHJldmVudGVkIGFsbCB0aGUgdGlwcworCQkgKiBmcm9tIGdldHRpbmcgb3V0cHV0LgorCQkgKgorCQkgKiBOb24gY29tbWl0IG9iamVjdHMgc3VjaCBhcyB0YWdzIGFuZCBibG9icyBkbyBub3QgaGF2ZQorCQkgKiB0aGlzIGlzc3VlIGFzIHRoZXkgYXJlIG5vdCBhZmZlY3RlZCBieSB0aG9zZSBleHRyYQorCQkgKiBjb25zdHJhaW50cy4KKwkJICovCisJCWlmICghKGUtPml0ZW0tPmZsYWdzICYgU0hPV04pICYmIGUtPml0ZW0tPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQkJd2FybmluZyhfKCJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIpLAorCQkJCWUtPm5hbWUpOworCQkJZnJlZShyZWYpOworCQkJY29udGludWU7CisJCX0KKwkJLyoKKwkJICogSWYgeW91IHJ1biAiZ2l0IGJ1bmRsZSBjcmVhdGUgYm5kbCB2MS4wLi52Mi4wIiwgdGhlCisJCSAqIG5hbWUgb2YgdGhlIHBvc2l0aXZlIHJlZiBpcyAidjIuMCIgYnV0IHRoYXQgaXMgdGhlCisJCSAqIGNvbW1pdCB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgdGhlIHRhZywgYW5kIG5vdCB0aGUgdGFnCisJCSAqIGl0c2VsZi4KKwkJICovCisJCWlmIChoYXNoY21wKHNoYTEsIGUtPml0ZW0tPnNoYTEpKSB7CisJCQkvKgorCQkJICogSXMgdGhpcyB0aGUgcG9zaXRpdmUgZW5kIG9mIGEgcmFuZ2UgZXhwcmVzc2VkCisJCQkgKiBpbiB0ZXJtcyBvZiBhIHRhZyAoZS5nLiB2Mi4wIGZyb20gdGhlIHJhbmdlCisJCQkgKiAidjEuMC4udjIuMCIpPworCQkJICovCisJCQlzdHJ1Y3QgY29tbWl0ICpvbmUgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwkJCXN0cnVjdCBvYmplY3QgKm9iajsKKworCQkJaWYgKGUtPml0ZW0gPT0gJihvbmUtPm9iamVjdCkpIHsKKwkJCQkvKgorCQkJCSAqIE5lZWQgdG8gaW5jbHVkZSBlLT5uYW1lIGFzIGFuCisJCQkJICogaW5kZXBlbmRlbnQgcmVmIHRvIHRoZSBwYWNrLW9iamVjdHMKKwkJCQkgKiBpbnB1dCwgc28gdGhhdCB0aGUgdGFnIGlzIGluY2x1ZGVkCisJCQkJICogaW4gdGhlIG91dHB1dDsgb3RoZXJ3aXNlIHdlIHdvdWxkCisJCQkJICogZW5kIHVwIHRyaWdnZXJpbmcgImVtcHR5IGJ1bmRsZSIKKwkJCQkgKiBlcnJvci4KKwkJCQkgKi8KKwkJCQlvYmogPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJCQkJb2JqLT5mbGFncyB8PSBTSE9XTjsKKwkJCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsIG9iaiwgZS0+bmFtZSk7CisJCQl9CisJCQlmcmVlKHJlZik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJlZl9jb3VudCsrOworCQl3cml0ZV9vcl9kaWUoYnVuZGxlX2ZkLCBzaGExX3RvX2hleChlLT5pdGVtLT5zaGExKSwgNDApOworCQl3cml0ZV9vcl9kaWUoYnVuZGxlX2ZkLCAiICIsIDEpOworCQl3cml0ZV9vcl9kaWUoYnVuZGxlX2ZkLCBkaXNwbGF5X3JlZiwgc3RybGVuKGRpc3BsYXlfcmVmKSk7CisJCXdyaXRlX29yX2RpZShidW5kbGVfZmQsICJcbiIsIDEpOworCQlmcmVlKHJlZik7CisJfQorCWlmICghcmVmX2NvdW50KQorCQlkaWUoXygiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iKSk7CisKKwkvKiBlbmQgaGVhZGVyICovCisJd3JpdGVfb3JfZGllKGJ1bmRsZV9mZCwgIlxuIiwgMSk7CisKKwkvKiB3cml0ZSBwYWNrICovCisJYXJndl9wYWNrWzBdID0gInBhY2stb2JqZWN0cyI7CisJYXJndl9wYWNrWzFdID0gIi0tYWxsLXByb2dyZXNzLWltcGxpZWQiOworCWFyZ3ZfcGFja1syXSA9ICItLXN0ZG91dCI7CisJYXJndl9wYWNrWzNdID0gIi0tdGhpbiI7CisJYXJndl9wYWNrWzRdID0gIi0tZGVsdGEtYmFzZS1vZmZzZXQiOworCWFyZ3ZfcGFja1s1XSA9IE5VTEw7CisJbWVtc2V0KCZybHMsIDAsIHNpemVvZihybHMpKTsKKwlybHMuYXJndiA9IGFyZ3ZfcGFjazsKKwlybHMuaW4gPSAtMTsKKwlybHMub3V0ID0gYnVuZGxlX2ZkOworCXJscy5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmcmxzKSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiKSk7CisKKwkvKgorCSAqIHN0YXJ0X2NvbW1hbmQgY2xvc2VkIGJ1bmRsZV9mZCBpZiBpdCB3YXMgPiAxCisJICogc28gc2V0IHRoZSBsb2NrIGZkIHRvIC0xIHNvIGNvbW1pdF9sb2NrX2ZpbGUoKQorCSAqIHdvbid0IGZhaWwgdHJ5aW5nIHRvIGNsb3NlIGl0LgorCSAqLworCWxvY2suZmQgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCByZXZzLnBlbmRpbmcubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSByZXZzLnBlbmRpbmcub2JqZWN0c1tpXS5pdGVtOworCQlpZiAob2JqZWN0LT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQl3cml0ZV9vcl9kaWUocmxzLmluLCAiXiIsIDEpOworCQl3cml0ZV9vcl9kaWUocmxzLmluLCBzaGExX3RvX2hleChvYmplY3QtPnNoYTEpLCA0MCk7CisJCXdyaXRlX29yX2RpZShybHMuaW4sICJcbiIsIDEpOworCX0KKwljbG9zZShybHMuaW4pOworCWlmIChmaW5pc2hfY29tbWFuZCgmcmxzKSkKKwkJcmV0dXJuIGVycm9yKF8oInBhY2stb2JqZWN0cyBkaWVkIikpOworCWlmICghYnVuZGxlX3RvX3N0ZG91dCkgeworCQlpZiAoY29tbWl0X2xvY2tfZmlsZSgmbG9jaykpCisJCQlkaWVfZXJybm8oXygiY2Fubm90IGNyZWF0ZSAnJXMnIiksIHBhdGgpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHVuYnVuZGxlKHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsIGludCBidW5kbGVfZmQsIGludCBmbGFncykKK3sKKwljb25zdCBjaGFyICphcmd2X2luZGV4X3BhY2tbXSA9IHsiaW5kZXgtcGFjayIsCisJCQkJCSAiLS1maXgtdGhpbiIsICItLXN0ZGluIiwgTlVMTCwgTlVMTH07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgaXA7CisKKwlpZiAoZmxhZ3MgJiBCVU5ETEVfVkVSQk9TRSkKKwkJYXJndl9pbmRleF9wYWNrWzNdID0gIi12IjsKKworCWlmICh2ZXJpZnlfYnVuZGxlKGhlYWRlciwgMCkpCisJCXJldHVybiAtMTsKKwltZW1zZXQoJmlwLCAwLCBzaXplb2YoaXApKTsKKwlpcC5hcmd2ID0gYXJndl9pbmRleF9wYWNrOworCWlwLmluID0gYnVuZGxlX2ZkOworCWlwLm5vX3N0ZG91dCA9IDE7CisJaXAuZ2l0X2NtZCA9IDE7CisJaWYgKHJ1bl9jb21tYW5kKCZpcCkpCisJCXJldHVybiBlcnJvcihfKCJpbmRleC1wYWNrIGRpZWQiKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idW5kbGUuaCBiL2J1bmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ODRlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9idW5kbGUuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIEJVTkRMRV9ICisjZGVmaW5lIEJVTkRMRV9ICisKK3N0cnVjdCByZWZfbGlzdCB7CisJdW5zaWduZWQgaW50IG5yLCBhbGxvYzsKKwlzdHJ1Y3QgcmVmX2xpc3RfZW50cnkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljaGFyICpuYW1lOworCX0gKmxpc3Q7Cit9OworCitzdHJ1Y3QgYnVuZGxlX2hlYWRlciB7CisJc3RydWN0IHJlZl9saXN0IHByZXJlcXVpc2l0ZXM7CisJc3RydWN0IHJlZl9saXN0IHJlZmVyZW5jZXM7Cit9OworCitpbnQgaXNfYnVuZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBxdWlldCk7CitpbnQgcmVhZF9idW5kbGVfaGVhZGVyKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIpOworaW50IGNyZWF0ZV9idW5kbGUoc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlciwgY29uc3QgY2hhciAqcGF0aCwKKwkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCB2ZXJpZnlfYnVuZGxlKHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsIGludCB2ZXJib3NlKTsKKyNkZWZpbmUgQlVORExFX1ZFUkJPU0UgMQoraW50IHVuYnVuZGxlKHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsIGludCBidW5kbGVfZmQsIGludCBmbGFncyk7CitpbnQgbGlzdF9idW5kbGVfcmVmcyhzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLAorCQlpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NhY2hlLXRyZWUuYyBiL2NhY2hlLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGVkNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvY2FjaGUtdHJlZS5jCkBAIC0wLDAgKzEsNjc4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIERFQlVHIDAKKyNlbmRpZgorCitzdHJ1Y3QgY2FjaGVfdHJlZSAqY2FjaGVfdHJlZSh2b2lkKQoreworCXN0cnVjdCBjYWNoZV90cmVlICppdCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjYWNoZV90cmVlKSk7CisJaXQtPmVudHJ5X2NvdW50ID0gLTE7CisJcmV0dXJuIGl0OworfQorCit2b2lkIGNhY2hlX3RyZWVfZnJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqKml0X3ApCit7CisJaW50IGk7CisJc3RydWN0IGNhY2hlX3RyZWUgKml0ID0gKml0X3A7CisKKwlpZiAoIWl0KQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IGl0LT5zdWJ0cmVlX25yOyBpKyspCisJCWlmIChpdC0+ZG93bltpXSkgeworCQkJY2FjaGVfdHJlZV9mcmVlKCZpdC0+ZG93bltpXS0+Y2FjaGVfdHJlZSk7CisJCQlmcmVlKGl0LT5kb3duW2ldKTsKKwkJfQorCWZyZWUoaXQtPmRvd24pOworCWZyZWUoaXQpOworCSppdF9wID0gTlVMTDsKK30KKworc3RhdGljIGludCBzdWJ0cmVlX25hbWVfY21wKGNvbnN0IGNoYXIgKm9uZSwgaW50IG9uZWxlbiwKKwkJCSAgICBjb25zdCBjaGFyICp0d28sIGludCB0d29sZW4pCit7CisJaWYgKG9uZWxlbiA8IHR3b2xlbikKKwkJcmV0dXJuIC0xOworCWlmICh0d29sZW4gPCBvbmVsZW4pCisJCXJldHVybiAxOworCXJldHVybiBtZW1jbXAob25lLCB0d28sIG9uZWxlbik7Cit9CisKK3N0YXRpYyBpbnQgc3VidHJlZV9wb3Moc3RydWN0IGNhY2hlX3RyZWUgKml0LCBjb25zdCBjaGFyICpwYXRoLCBpbnQgcGF0aGxlbikKK3sKKwlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKipkb3duID0gaXQtPmRvd247CisJaW50IGxvLCBoaTsKKwlsbyA9IDA7CisJaGkgPSBpdC0+c3VidHJlZV9ucjsKKwl3aGlsZSAobG8gPCBoaSkgeworCQlpbnQgbWkgPSAobG8gKyBoaSkgLyAyOworCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKm1kbCA9IGRvd25bbWldOworCQlpbnQgY21wID0gc3VidHJlZV9uYW1lX2NtcChwYXRoLCBwYXRobGVuLAorCQkJCQkgICBtZGwtPm5hbWUsIG1kbC0+bmFtZWxlbik7CisJCWlmICghY21wKQorCQkJcmV0dXJuIG1pOworCQlpZiAoY21wIDwgMCkKKwkJCWhpID0gbWk7CisJCWVsc2UKKwkJCWxvID0gbWkgKyAxOworCX0KKwlyZXR1cm4gLWxvLTE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKmZpbmRfc3VidHJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCSAgIGludCBwYXRobGVuLAorCQkJCQkgICBpbnQgY3JlYXRlKQoreworCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqZG93bjsKKwlpbnQgcG9zID0gc3VidHJlZV9wb3MoaXQsIHBhdGgsIHBhdGhsZW4pOworCWlmICgwIDw9IHBvcykKKwkJcmV0dXJuIGl0LT5kb3duW3Bvc107CisJaWYgKCFjcmVhdGUpCisJCXJldHVybiBOVUxMOworCisJcG9zID0gLXBvcy0xOworCWlmIChpdC0+c3VidHJlZV9hbGxvYyA8PSBpdC0+c3VidHJlZV9ucikgeworCQlpdC0+c3VidHJlZV9hbGxvYyA9IGFsbG9jX25yKGl0LT5zdWJ0cmVlX2FsbG9jKTsKKwkJaXQtPmRvd24gPSB4cmVhbGxvYyhpdC0+ZG93biwgaXQtPnN1YnRyZWVfYWxsb2MgKgorCQkJCSAgICBzaXplb2YoKml0LT5kb3duKSk7CisJfQorCWl0LT5zdWJ0cmVlX25yKys7CisKKwlkb3duID0geG1hbGxvYyhzaXplb2YoKmRvd24pICsgcGF0aGxlbiArIDEpOworCWRvd24tPmNhY2hlX3RyZWUgPSBOVUxMOworCWRvd24tPm5hbWVsZW4gPSBwYXRobGVuOworCW1lbWNweShkb3duLT5uYW1lLCBwYXRoLCBwYXRobGVuKTsKKwlkb3duLT5uYW1lW3BhdGhsZW5dID0gMDsKKworCWlmIChwb3MgPCBpdC0+c3VidHJlZV9ucikKKwkJbWVtbW92ZShpdC0+ZG93biArIHBvcyArIDEsCisJCQlpdC0+ZG93biArIHBvcywKKwkJCXNpemVvZihkb3duKSAqIChpdC0+c3VidHJlZV9uciAtIHBvcyAtIDEpKTsKKwlpdC0+ZG93bltwb3NdID0gZG93bjsKKwlyZXR1cm4gZG93bjsKK30KKworc3RydWN0IGNhY2hlX3RyZWVfc3ViICpjYWNoZV90cmVlX3N1YihzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBhdGhsZW4gPSBzdHJsZW4ocGF0aCk7CisJcmV0dXJuIGZpbmRfc3VidHJlZShpdCwgcGF0aCwgcGF0aGxlbiwgMSk7Cit9CisKK3ZvaWQgY2FjaGVfdHJlZV9pbnZhbGlkYXRlX3BhdGgoc3RydWN0IGNhY2hlX3RyZWUgKml0LCBjb25zdCBjaGFyICpwYXRoKQoreworCS8qIGEvYi9jCisJICogPT0+IGludmFsaWRhdGUgc2VsZgorCSAqID09PiBmaW5kICJhIiwgaGF2ZSBpdCBpbnZhbGlkYXRlICJiL2MiCisJICogYQorCSAqID09PiBpbnZhbGlkYXRlIHNlbGYKKwkgKiA9PT4gaWYgImEiIGV4aXN0cyBhcyBhIHN1YnRyZWUsIHJlbW92ZSBpdC4KKwkgKi8KKwljb25zdCBjaGFyICpzbGFzaDsKKwlpbnQgbmFtZWxlbjsKKwlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKmRvd247CisKKyNpZiBERUJVRworCWZwcmludGYoc3RkZXJyLCAiY2FjaGUtdHJlZSBpbnZhbGlkYXRlIDwlcz5cbiIsIHBhdGgpOworI2VuZGlmCisKKwlpZiAoIWl0KQorCQlyZXR1cm47CisJc2xhc2ggPSBzdHJjaHIocGF0aCwgJy8nKTsKKwlpdC0+ZW50cnlfY291bnQgPSAtMTsKKwlpZiAoIXNsYXNoKSB7CisJCWludCBwb3M7CisJCW5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CisJCXBvcyA9IHN1YnRyZWVfcG9zKGl0LCBwYXRoLCBuYW1lbGVuKTsKKwkJaWYgKDAgPD0gcG9zKSB7CisJCQljYWNoZV90cmVlX2ZyZWUoJml0LT5kb3duW3Bvc10tPmNhY2hlX3RyZWUpOworCQkJZnJlZShpdC0+ZG93bltwb3NdKTsKKwkJCS8qIDAgMSAyIDMgNCA1CisJCQkgKiAgICAgICBeICAgICBec3VidHJlZV9uciA9IDYKKwkJCSAqICAgICAgIHBvcworCQkJICogbW92ZSA0IGFuZCA1IHVwIG9uZSBwbGFjZSAoMiBlbnRyaWVzKQorCQkJICogMiA9IDYgLSAzIC0gMSA9IHN1YnRyZWVfbnIgLSBwb3MgLSAxCisJCQkgKi8KKwkJCW1lbW1vdmUoaXQtPmRvd24rcG9zLCBpdC0+ZG93bitwb3MrMSwKKwkJCQlzaXplb2Yoc3RydWN0IGNhY2hlX3RyZWVfc3ViICopICoKKwkJCQkoaXQtPnN1YnRyZWVfbnIgLSBwb3MgLSAxKSk7CisJCQlpdC0+c3VidHJlZV9uci0tOworCQl9CisJCXJldHVybjsKKwl9CisJbmFtZWxlbiA9IHNsYXNoIC0gcGF0aDsKKwlkb3duID0gZmluZF9zdWJ0cmVlKGl0LCBwYXRoLCBuYW1lbGVuLCAwKTsKKwlpZiAoZG93bikKKwkJY2FjaGVfdHJlZV9pbnZhbGlkYXRlX3BhdGgoZG93bi0+Y2FjaGVfdHJlZSwgc2xhc2ggKyAxKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfY2FjaGUoc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUsCisJCQlpbnQgZW50cmllcywgaW50IGZsYWdzKQoreworCWludCBpLCBmdW5ueTsKKwlpbnQgc2lsZW50ID0gZmxhZ3MgJiBXUklURV9UUkVFX1NJTEVOVDsKKworCS8qIFZlcmlmeSB0aGF0IHRoZSB0cmVlIGlzIG1lcmdlZCAqLworCWZ1bm55ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKKwkJaWYgKGNlX3N0YWdlKGNlKSkgeworCQkJaWYgKHNpbGVudCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoMTAgPCArK2Z1bm55KSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIuLi5cbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNlX3N0YWdlKGNlKSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bm1lcmdlZCAoJXMpXG4iLAorCQkJCQljZS0+bmFtZSwgc2hhMV90b19oZXgoY2UtPnNoYTEpKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBub3QgYWRkZWQgeWV0XG4iLAorCQkJCQljZS0+bmFtZSk7CisJCX0KKwl9CisJaWYgKGZ1bm55KQorCQlyZXR1cm4gLTE7CisKKwkvKiBBbHNvIHZlcmlmeSB0aGF0IHRoZSBjYWNoZSBkb2VzIG5vdCBoYXZlIHBhdGggYW5kIHBhdGgvZmlsZQorCSAqIGF0IHRoZSBzYW1lIHRpbWUuICBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhlIGNhY2hlIGhhcyBvbmx5CisJICogc3RhZ2UgMCBlbnRyaWVzLgorCSAqLworCWZ1bm55ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllcyAtIDE7IGkrKykgeworCQkvKiBwYXRoL2ZpbGUgYWx3YXlzIGNvbWVzIGFmdGVyIHBhdGggYmVjYXVzZSBvZiB0aGUgd2F5CisJCSAqIHRoZSBjYWNoZSBpcyBzb3J0ZWQuICBBbHNvIHBhdGggY2FuIGFwcGVhciBvbmx5IG9uY2UsCisJCSAqIHdoaWNoIG1lYW5zIGNvbmZsaWN0aW5nIG9uZSB3b3VsZCBpbW1lZGlhdGVseSBmb2xsb3cuCisJCSAqLworCQljb25zdCBjaGFyICp0aGlzX25hbWUgPSBjYWNoZVtpXS0+bmFtZTsKKwkJY29uc3QgY2hhciAqbmV4dF9uYW1lID0gY2FjaGVbaSsxXS0+bmFtZTsKKwkJaW50IHRoaXNfbGVuID0gc3RybGVuKHRoaXNfbmFtZSk7CisJCWlmICh0aGlzX2xlbiA8IHN0cmxlbihuZXh0X25hbWUpICYmCisJCSAgICBzdHJuY21wKHRoaXNfbmFtZSwgbmV4dF9uYW1lLCB0aGlzX2xlbikgPT0gMCAmJgorCQkgICAgbmV4dF9uYW1lW3RoaXNfbGVuXSA9PSAnLycpIHsKKwkJCWlmICgxMCA8ICsrZnVubnkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIi4uLlxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmcHJpbnRmKHN0ZGVyciwgIllvdSBoYXZlIGJvdGggJXMgYW5kICVzXG4iLAorCQkJCXRoaXNfbmFtZSwgbmV4dF9uYW1lKTsKKwkJfQorCX0KKwlpZiAoZnVubnkpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlzY2FyZF91bnVzZWRfc3VidHJlZXMoc3RydWN0IGNhY2hlX3RyZWUgKml0KQoreworCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqKmRvd24gPSBpdC0+ZG93bjsKKwlpbnQgbnIgPSBpdC0+c3VidHJlZV9ucjsKKwlpbnQgZHN0LCBzcmM7CisJZm9yIChkc3QgPSBzcmMgPSAwOyBzcmMgPCBucjsgc3JjKyspIHsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzID0gZG93bltzcmNdOworCQlpZiAocy0+dXNlZCkKKwkJCWRvd25bZHN0KytdID0gczsKKwkJZWxzZSB7CisJCQljYWNoZV90cmVlX2ZyZWUoJnMtPmNhY2hlX3RyZWUpOworCQkJZnJlZShzKTsKKwkJCWl0LT5zdWJ0cmVlX25yLS07CisJCX0KKwl9Cit9CisKK2ludCBjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKHN0cnVjdCBjYWNoZV90cmVlICppdCkKK3sKKwlpbnQgaTsKKwlpZiAoIWl0KQorCQlyZXR1cm4gMDsKKwlpZiAoaXQtPmVudHJ5X2NvdW50IDwgMCB8fCAhaGFzX3NoYTFfZmlsZShpdC0+c2hhMSkpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBpdC0+c3VidHJlZV9ucjsgaSsrKSB7CisJCWlmICghY2FjaGVfdHJlZV9mdWxseV92YWxpZChpdC0+ZG93bltpXS0+Y2FjaGVfdHJlZSkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX29uZShzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsCisJCSAgICAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlLAorCQkgICAgICBpbnQgZW50cmllcywKKwkJICAgICAgY29uc3QgY2hhciAqYmFzZSwKKwkJICAgICAgaW50IGJhc2VsZW4sCisJCSAgICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlcjsKKwlpbnQgbWlzc2luZ19vayA9IGZsYWdzICYgV1JJVEVfVFJFRV9NSVNTSU5HX09LOworCWludCBkcnlydW4gPSBmbGFncyAmIFdSSVRFX1RSRUVfRFJZX1JVTjsKKwlpbnQgaTsKKworCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCAmJiBoYXNfc2hhMV9maWxlKGl0LT5zaGExKSkKKwkJcmV0dXJuIGl0LT5lbnRyeV9jb3VudDsKKworCS8qCisJICogV2UgZmlyc3Qgc2NhbiBmb3Igc3VidHJlZXMgYW5kIHVwZGF0ZSB0aGVtOyB3ZSBzdGFydCBieQorCSAqIG1hcmtpbmcgZXhpc3Rpbmcgc3VidHJlZXMgLS0gdGhlIG9uZXMgdGhhdCBhcmUgdW5tYXJrZWQKKwkgKiBzaG91bGQgbm90IGJlIGluIHRoZSByZXN1bHQuCisJICovCisJZm9yIChpID0gMDsgaSA8IGl0LT5zdWJ0cmVlX25yOyBpKyspCisJCWl0LT5kb3duW2ldLT51c2VkID0gMDsKKworCS8qCisJICogRmluZCB0aGUgc3VidHJlZXMgYW5kIHVwZGF0ZSB0aGVtLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGNhY2hlW2ldOworCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnN1YjsKKwkJY29uc3QgY2hhciAqcGF0aCwgKnNsYXNoOworCQlpbnQgcGF0aGxlbiwgc3VibGVuLCBzdWJjbnQ7CisKKwkJcGF0aCA9IGNlLT5uYW1lOworCQlwYXRobGVuID0gY2VfbmFtZWxlbihjZSk7CisJCWlmIChwYXRobGVuIDw9IGJhc2VsZW4gfHwgbWVtY21wKGJhc2UsIHBhdGgsIGJhc2VsZW4pKQorCQkJYnJlYWs7IC8qIGF0IHRoZSBlbmQgb2YgdGhpcyBsZXZlbCAqLworCisJCXNsYXNoID0gc3RyY2hyKHBhdGggKyBiYXNlbGVuLCAnLycpOworCQlpZiAoIXNsYXNoKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIGEvYmJiL2MgKGJhc2UgPSBhLywgc2xhc2ggPSAvYykKKwkJICogPT0+CisJCSAqIHBhdGgrYmFzZWxlbiA9IGJiYi9jLCBzdWJsZW4gPSAzCisJCSAqLworCQlzdWJsZW4gPSBzbGFzaCAtIChwYXRoICsgYmFzZWxlbik7CisJCXN1YiA9IGZpbmRfc3VidHJlZShpdCwgcGF0aCArIGJhc2VsZW4sIHN1YmxlbiwgMSk7CisJCWlmICghc3ViLT5jYWNoZV90cmVlKQorCQkJc3ViLT5jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCQlzdWJjbnQgPSB1cGRhdGVfb25lKHN1Yi0+Y2FjaGVfdHJlZSwKKwkJCQkgICAgY2FjaGUgKyBpLCBlbnRyaWVzIC0gaSwKKwkJCQkgICAgcGF0aCwKKwkJCQkgICAgYmFzZWxlbiArIHN1YmxlbiArIDEsCisJCQkJICAgIGZsYWdzKTsKKwkJaWYgKHN1YmNudCA8IDApCisJCQlyZXR1cm4gc3ViY250OworCQlpICs9IHN1YmNudCAtIDE7CisJCXN1Yi0+dXNlZCA9IDE7CisJfQorCisJZGlzY2FyZF91bnVzZWRfc3VidHJlZXMoaXQpOworCisJLyoKKwkgKiBUaGVuIHdyaXRlIG91dCB0aGUgdHJlZSBvYmplY3QgZm9yIHRoaXMgbGV2ZWwuCisJICovCisJc3RyYnVmX2luaXQoJmJ1ZmZlciwgODE5Mik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWI7CisJCWNvbnN0IGNoYXIgKnBhdGgsICpzbGFzaDsKKwkJaW50IHBhdGhsZW4sIGVudGxlbjsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKKwkJdW5zaWduZWQgbW9kZTsKKworCQlwYXRoID0gY2UtPm5hbWU7CisJCXBhdGhsZW4gPSBjZV9uYW1lbGVuKGNlKTsKKwkJaWYgKHBhdGhsZW4gPD0gYmFzZWxlbiB8fCBtZW1jbXAoYmFzZSwgcGF0aCwgYmFzZWxlbikpCisJCQlicmVhazsgLyogYXQgdGhlIGVuZCBvZiB0aGlzIGxldmVsICovCisKKwkJc2xhc2ggPSBzdHJjaHIocGF0aCArIGJhc2VsZW4sICcvJyk7CisJCWlmIChzbGFzaCkgeworCQkJZW50bGVuID0gc2xhc2ggLSAocGF0aCArIGJhc2VsZW4pOworCQkJc3ViID0gZmluZF9zdWJ0cmVlKGl0LCBwYXRoICsgYmFzZWxlbiwgZW50bGVuLCAwKTsKKwkJCWlmICghc3ViKQorCQkJCWRpZSgiY2FjaGUtdHJlZS5jOiAnJS4qcycgaW4gJyVzJyBub3QgZm91bmQiLAorCQkJCSAgICBlbnRsZW4sIHBhdGggKyBiYXNlbGVuLCBwYXRoKTsKKwkJCWkgKz0gc3ViLT5jYWNoZV90cmVlLT5lbnRyeV9jb3VudCAtIDE7CisJCQlzaGExID0gc3ViLT5jYWNoZV90cmVlLT5zaGExOworCQkJbW9kZSA9IFNfSUZESVI7CisJCX0KKwkJZWxzZSB7CisJCQlzaGExID0gY2UtPnNoYTE7CisJCQltb2RlID0gY2UtPmNlX21vZGU7CisJCQllbnRsZW4gPSBwYXRobGVuIC0gYmFzZWxlbjsKKwkJfQorCQlpZiAobW9kZSAhPSBTX0lGR0lUTElOSyAmJiAhbWlzc2luZ19vayAmJiAhaGFzX3NoYTFfZmlsZShzaGExKSkgeworCQkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgb2JqZWN0ICUwNm8gJXMgZm9yICclLipzJyIsCisJCQkJbW9kZSwgc2hhMV90b19oZXgoc2hhMSksIGVudGxlbitiYXNlbGVuLCBwYXRoKTsKKwkJfQorCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiAoQ0VfUkVNT1ZFIHwgQ0VfSU5URU5UX1RPX0FERCkpCisJCQljb250aW51ZTsgLyogZW50cnkgYmVpbmcgcmVtb3ZlZCBvciBwbGFjZWhvbGRlciAqLworCisJCXN0cmJ1Zl9ncm93KCZidWZmZXIsIGVudGxlbiArIDEwMCk7CisJCXN0cmJ1Zl9hZGRmKCZidWZmZXIsICIlbyAlLipzJWMiLCBtb2RlLCBlbnRsZW4sIHBhdGggKyBiYXNlbGVuLCAnXDAnKTsKKwkJc3RyYnVmX2FkZCgmYnVmZmVyLCBzaGExLCAyMCk7CisKKyNpZiBERUJVRworCQlmcHJpbnRmKHN0ZGVyciwgImNhY2hlLXRyZWUgdXBkYXRlLW9uZSAlbyAlLipzXG4iLAorCQkJbW9kZSwgZW50bGVuLCBwYXRoICsgYmFzZWxlbik7CisjZW5kaWYKKwl9CisKKwlpZiAoZHJ5cnVuKQorCQloYXNoX3NoYTFfZmlsZShidWZmZXIuYnVmLCBidWZmZXIubGVuLCB0cmVlX3R5cGUsIGl0LT5zaGExKTsKKwllbHNlIGlmICh3cml0ZV9zaGExX2ZpbGUoYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbiwgdHJlZV90eXBlLCBpdC0+c2hhMSkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwlpdC0+ZW50cnlfY291bnQgPSBpOworI2lmIERFQlVHCisJZnByaW50ZihzdGRlcnIsICJjYWNoZS10cmVlIHVwZGF0ZS1vbmUgKCVkIGVudCwgJWQgc3VidHJlZSkgJXNcbiIsCisJCWl0LT5lbnRyeV9jb3VudCwgaXQtPnN1YnRyZWVfbnIsCisJCXNoYTFfdG9faGV4KGl0LT5zaGExKSk7CisjZW5kaWYKKwlyZXR1cm4gaTsKK30KKworaW50IGNhY2hlX3RyZWVfdXBkYXRlKHN0cnVjdCBjYWNoZV90cmVlICppdCwKKwkJICAgICAgc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUsCisJCSAgICAgIGludCBlbnRyaWVzLAorCQkgICAgICBpbnQgZmxhZ3MpCit7CisJaW50IGk7CisJaSA9IHZlcmlmeV9jYWNoZShjYWNoZSwgZW50cmllcywgZmxhZ3MpOworCWlmIChpKQorCQlyZXR1cm4gaTsKKwlpID0gdXBkYXRlX29uZShpdCwgY2FjaGUsIGVudHJpZXMsICIiLCAwLCBmbGFncyk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfb25lKHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwgc3RydWN0IGNhY2hlX3RyZWUgKml0LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRobGVuKQoreworCWludCBpOworCisJLyogT25lICJjYWNoZS10cmVlIiBlbnRyeSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgorCSAqIHBhdGggKE5VTCB0ZXJtaW5hdGVkKQorCSAqIGVudHJ5X2NvdW50LCBzdWJ0cmVlX25yICgiJWQgJWRcbiIpCisJICogdHJlZS1zaGExIChtaXNzaW5nIGlmIGludmFsaWQpCisJICogc3VidHJlZV9uciAiY2FjaGUtdHJlZSIgZW50cmllcyBmb3Igc3VidHJlZXMuCisJICovCisJc3RyYnVmX2dyb3coYnVmZmVyLCBwYXRobGVuICsgMTAwKTsKKwlzdHJidWZfYWRkKGJ1ZmZlciwgcGF0aCwgcGF0aGxlbik7CisJc3RyYnVmX2FkZGYoYnVmZmVyLCAiJWMlZCAlZFxuIiwgMCwgaXQtPmVudHJ5X2NvdW50LCBpdC0+c3VidHJlZV9ucik7CisKKyNpZiBERUJVRworCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCkKKwkJZnByaW50ZihzdGRlcnIsICJjYWNoZS10cmVlIDwlLipzPiAoJWQgZW50LCAlZCBzdWJ0cmVlKSAlc1xuIiwKKwkJCXBhdGhsZW4sIHBhdGgsIGl0LT5lbnRyeV9jb3VudCwgaXQtPnN1YnRyZWVfbnIsCisJCQlzaGExX3RvX2hleChpdC0+c2hhMSkpOworCWVsc2UKKwkJZnByaW50ZihzdGRlcnIsICJjYWNoZS10cmVlIDwlLipzPiAoJWQgc3VidHJlZSkgaW52YWxpZFxuIiwKKwkJCXBhdGhsZW4sIHBhdGgsIGl0LT5zdWJ0cmVlX25yKTsKKyNlbmRpZgorCisJaWYgKDAgPD0gaXQtPmVudHJ5X2NvdW50KSB7CisJCXN0cmJ1Zl9hZGQoYnVmZmVyLCBpdC0+c2hhMSwgMjApOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgaXQtPnN1YnRyZWVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKmRvd24gPSBpdC0+ZG93bltpXTsKKwkJaWYgKGkpIHsKKwkJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqcHJldiA9IGl0LT5kb3duW2ktMV07CisJCQlpZiAoc3VidHJlZV9uYW1lX2NtcChkb3duLT5uYW1lLCBkb3duLT5uYW1lbGVuLAorCQkJCQkgICAgIHByZXYtPm5hbWUsIHByZXYtPm5hbWVsZW4pIDw9IDApCisJCQkJZGllKCJmYXRhbCAtIHVuc29ydGVkIGNhY2hlIHN1YnRyZWUiKTsKKwkJfQorCQl3cml0ZV9vbmUoYnVmZmVyLCBkb3duLT5jYWNoZV90cmVlLCBkb3duLT5uYW1lLCBkb3duLT5uYW1lbGVuKTsKKwl9Cit9CisKK3ZvaWQgY2FjaGVfdHJlZV93cml0ZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IGNhY2hlX3RyZWUgKnJvb3QpCit7CisJd3JpdGVfb25lKHNiLCByb290LCAiIiwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfdHJlZSAqcmVhZF9vbmUoY29uc3QgY2hhciAqKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyAqc2l6ZV9wKQoreworCWNvbnN0IGNoYXIgKmJ1ZiA9ICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplID0gKnNpemVfcDsKKwljb25zdCBjaGFyICpjcDsKKwljaGFyICplcDsKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQ7CisJaW50IGksIHN1YnRyZWVfbnI7CisKKwlpdCA9IE5VTEw7CisJLyogc2tpcCBuYW1lLCBidXQgbWFrZSBzdXJlIG5hbWUgZXhpc3RzICovCisJd2hpbGUgKHNpemUgJiYgKmJ1ZikgeworCQlzaXplLS07CisJCWJ1ZisrOworCX0KKwlpZiAoIXNpemUpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJYnVmKys7IHNpemUtLTsKKwlpdCA9IGNhY2hlX3RyZWUoKTsKKworCWNwID0gYnVmOworCWl0LT5lbnRyeV9jb3VudCA9IHN0cnRvbChjcCwgJmVwLCAxMCk7CisJaWYgKGNwID09IGVwKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCWNwID0gZXA7CisJc3VidHJlZV9uciA9IHN0cnRvbChjcCwgJmVwLCAxMCk7CisJaWYgKGNwID09IGVwKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCXdoaWxlIChzaXplICYmICpidWYgJiYgKmJ1ZiAhPSAnXG4nKSB7CisJCXNpemUtLTsKKwkJYnVmKys7CisJfQorCWlmICghc2l6ZSkKKwkJZ290byBmcmVlX3JldHVybjsKKwlidWYrKzsgc2l6ZS0tOworCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCkgeworCQlpZiAoc2l6ZSA8IDIwKQorCQkJZ290byBmcmVlX3JldHVybjsKKwkJaGFzaGNweShpdC0+c2hhMSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWJ1Zik7CisJCWJ1ZiArPSAyMDsKKwkJc2l6ZSAtPSAyMDsKKwl9CisKKyNpZiBERUJVRworCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCkKKwkJZnByaW50ZihzdGRlcnIsICJjYWNoZS10cmVlIDwlcz4gKCVkIGVudCwgJWQgc3VidHJlZSkgJXNcbiIsCisJCQkqYnVmZmVyLCBpdC0+ZW50cnlfY291bnQsIHN1YnRyZWVfbnIsCisJCQlzaGExX3RvX2hleChpdC0+c2hhMSkpOworCWVsc2UKKwkJZnByaW50ZihzdGRlcnIsICJjYWNoZS10cmVlIDwlcz4gKCVkIHN1YnRyZWVzKSBpbnZhbGlkXG4iLAorCQkJKmJ1ZmZlciwgc3VidHJlZV9ucik7CisjZW5kaWYKKworCS8qCisJICogSnVzdCBhIGhldXJpc3RpYyAtLSB3ZSBkbyBub3QgYWRkIGRpcmVjdG9yaWVzIHRoYXQgb2Z0ZW4gYnV0CisJICogd2UgZG8gbm90IHdhbnQgdG8gaGF2ZSB0byBleHRlbmQgaXQgaW1tZWRpYXRlbHkgd2hlbiB3ZSBkbywKKwkgKiBoZW5jZSArMi4KKwkgKi8KKwlpdC0+c3VidHJlZV9hbGxvYyA9IHN1YnRyZWVfbnIgKyAyOworCWl0LT5kb3duID0geGNhbGxvYyhpdC0+c3VidHJlZV9hbGxvYywgc2l6ZW9mKHN0cnVjdCBjYWNoZV90cmVlX3N1YiAqKSk7CisJZm9yIChpID0gMDsgaSA8IHN1YnRyZWVfbnI7IGkrKykgeworCQkvKiByZWFkIGVhY2ggc3VidHJlZSAqLworCQlzdHJ1Y3QgY2FjaGVfdHJlZSAqc3ViOworCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnN1YnRyZWU7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBidWY7CisKKwkJc3ViID0gcmVhZF9vbmUoJmJ1ZiwgJnNpemUpOworCQlpZiAoIXN1YikKKwkJCWdvdG8gZnJlZV9yZXR1cm47CisJCXN1YnRyZWUgPSBjYWNoZV90cmVlX3N1YihpdCwgbmFtZSk7CisJCXN1YnRyZWUtPmNhY2hlX3RyZWUgPSBzdWI7CisJfQorCWlmIChzdWJ0cmVlX25yICE9IGl0LT5zdWJ0cmVlX25yKQorCQlkaWUoImNhY2hlLXRyZWU6IGludGVybmFsIGVycm9yIik7CisJKmJ1ZmZlciA9IGJ1ZjsKKwkqc2l6ZV9wID0gc2l6ZTsKKwlyZXR1cm4gaXQ7CisKKyBmcmVlX3JldHVybjoKKwljYWNoZV90cmVlX2ZyZWUoJml0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWVfcmVhZChjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoYnVmZmVyWzBdKQorCQlyZXR1cm4gTlVMTDsgLyogbm90IHRoZSB3aG9sZSB0cmVlICovCisJcmV0dXJuIHJlYWRfb25lKCZidWZmZXIsICZzaXplKTsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlX2ZpbmQoc3RydWN0IGNhY2hlX3RyZWUgKml0LCBjb25zdCBjaGFyICpwYXRoKQoreworCWlmICghaXQpCisJCXJldHVybiBOVUxMOworCXdoaWxlICgqcGF0aCkgeworCQljb25zdCBjaGFyICpzbGFzaDsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWI7CisKKwkJc2xhc2ggPSBzdHJjaHIocGF0aCwgJy8nKTsKKwkJaWYgKCFzbGFzaCkKKwkJCXNsYXNoID0gcGF0aCArIHN0cmxlbihwYXRoKTsKKwkJLyogYmV0d2VlbiBwYXRoIGFuZCBzbGFzaCBpcyB0aGUgbmFtZSBvZiB0aGUKKwkJICogc3VidHJlZSB0byBsb29rIGZvci4KKwkJICovCisJCXN1YiA9IGZpbmRfc3VidHJlZShpdCwgcGF0aCwgc2xhc2ggLSBwYXRoLCAwKTsKKwkJaWYgKCFzdWIpCisJCQlyZXR1cm4gTlVMTDsKKwkJaXQgPSBzdWItPmNhY2hlX3RyZWU7CisJCWlmIChzbGFzaCkKKwkJCXdoaWxlICgqc2xhc2ggJiYgKnNsYXNoID09ICcvJykKKwkJCQlzbGFzaCsrOworCQlpZiAoIXNsYXNoIHx8ICEqc2xhc2gpCisJCQlyZXR1cm4gaXQ7IC8qIHByZWZpeCBlbmRlZCB3aXRoIHNsYXNoZXMgKi8KKwkJcGF0aCA9IHNsYXNoOworCX0KKwlyZXR1cm4gaXQ7Cit9CisKK2ludCB3cml0ZV9jYWNoZV9hc190cmVlKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncywgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBlbnRyaWVzLCB3YXNfdmFsaWQsIG5ld2ZkOworCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZTsKKworCS8qCisJICogV2UgY2FuJ3QgZnJlZSB0aGlzIG1lbW9yeSwgaXQgYmVjb21lcyBwYXJ0IG9mIGEgbGlua2VkIGxpc3QKKwkgKiBwYXJzZWQgYXRleGl0KCkKKwkgKi8KKwlsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisKKwluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSwgMSk7CisKKwllbnRyaWVzID0gcmVhZF9jYWNoZSgpOworCWlmIChlbnRyaWVzIDwgMCkKKwkJcmV0dXJuIFdSSVRFX1RSRUVfVU5SRUFEQUJMRV9JTkRFWDsKKwlpZiAoZmxhZ3MgJiBXUklURV9UUkVFX0lHTk9SRV9DQUNIRV9UUkVFKQorCQljYWNoZV90cmVlX2ZyZWUoJihhY3RpdmVfY2FjaGVfdHJlZSkpOworCisJaWYgKCFhY3RpdmVfY2FjaGVfdHJlZSkKKwkJYWN0aXZlX2NhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CisKKwl3YXNfdmFsaWQgPSBjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGFjdGl2ZV9jYWNoZV90cmVlKTsKKwlpZiAoIXdhc192YWxpZCkgeworCQlpZiAoY2FjaGVfdHJlZV91cGRhdGUoYWN0aXZlX2NhY2hlX3RyZWUsCisJCQkJICAgICAgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIsCisJCQkJICAgICAgZmxhZ3MpIDwgMCkKKwkJCXJldHVybiBXUklURV9UUkVFX1VOTUVSR0VEX0lOREVYOworCQlpZiAoMCA8PSBuZXdmZCkgeworCQkJaWYgKCF3cml0ZV9jYWNoZShuZXdmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpICYmCisJCQkgICAgIWNvbW1pdF9sb2NrX2ZpbGUobG9ja19maWxlKSkKKwkJCQluZXdmZCA9IC0xOworCQl9CisJCS8qIE5vdCBiZWluZyBhYmxlIHRvIHdyaXRlIGlzIGZpbmUgLS0gd2UgYXJlIG9ubHkgaW50ZXJlc3RlZAorCQkgKiBpbiB1cGRhdGluZyB0aGUgY2FjaGUtdHJlZSBwYXJ0LCBhbmQgaWYgdGhlIG5leHQgY2FsbGVyCisJCSAqIGVuZHMgdXAgdXNpbmcgdGhlIG9sZCBpbmRleCB3aXRoIHVudXBkYXRlZCBjYWNoZS10cmVlIHBhcnQKKwkJICogaXQgbWlzc2VzIHRoZSB3b3JrIHdlIGRpZCBoZXJlLCBidXQgdGhhdCBpcyBqdXN0IGEKKwkJICogcGVyZm9ybWFuY2UgcGVuYWx0eSBhbmQgbm90IGEgYmlnIGRlYWwuCisJCSAqLworCX0KKworCWlmIChwcmVmaXgpIHsKKwkJc3RydWN0IGNhY2hlX3RyZWUgKnN1YnRyZWUgPQorCQkJY2FjaGVfdHJlZV9maW5kKGFjdGl2ZV9jYWNoZV90cmVlLCBwcmVmaXgpOworCQlpZiAoIXN1YnRyZWUpCisJCQlyZXR1cm4gV1JJVEVfVFJFRV9QUkVGSVhfRVJST1I7CisJCWhhc2hjcHkoc2hhMSwgc3VidHJlZS0+c2hhMSk7CisJfQorCWVsc2UKKwkJaGFzaGNweShzaGExLCBhY3RpdmVfY2FjaGVfdHJlZS0+c2hhMSk7CisKKwlpZiAoMCA8PSBuZXdmZCkKKwkJcm9sbGJhY2tfbG9ja19maWxlKGxvY2tfZmlsZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJpbWVfY2FjaGVfdHJlZV9yZWMoc3RydWN0IGNhY2hlX3RyZWUgKml0LCBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IGNudDsKKworCWhhc2hjcHkoaXQtPnNoYTEsIHRyZWUtPm9iamVjdC5zaGExKTsKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwljbnQgPSAwOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCWlmICghU19JU0RJUihlbnRyeS5tb2RlKSkKKwkJCWNudCsrOworCQllbHNlIHsKKwkJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqc3ViOworCQkJc3RydWN0IHRyZWUgKnN1YnRyZWUgPSBsb29rdXBfdHJlZShlbnRyeS5zaGExKTsKKwkJCWlmICghc3VidHJlZS0+b2JqZWN0LnBhcnNlZCkKKwkJCQlwYXJzZV90cmVlKHN1YnRyZWUpOworCQkJc3ViID0gY2FjaGVfdHJlZV9zdWIoaXQsIGVudHJ5LnBhdGgpOworCQkJc3ViLT5jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCQkJcHJpbWVfY2FjaGVfdHJlZV9yZWMoc3ViLT5jYWNoZV90cmVlLCBzdWJ0cmVlKTsKKwkJCWNudCArPSBzdWItPmNhY2hlX3RyZWUtPmVudHJ5X2NvdW50OworCQl9CisJfQorCWl0LT5lbnRyeV9jb3VudCA9IGNudDsKK30KKwordm9pZCBwcmltZV9jYWNoZV90cmVlKHN0cnVjdCBjYWNoZV90cmVlICoqaXQsIHN0cnVjdCB0cmVlICp0cmVlKQoreworCWNhY2hlX3RyZWVfZnJlZShpdCk7CisJKml0ID0gY2FjaGVfdHJlZSgpOworCXByaW1lX2NhY2hlX3RyZWVfcmVjKCppdCwgdHJlZSk7Cit9CisKKy8qCisgKiBmaW5kIHRoZSBjYWNoZV90cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgbGV2ZWwgd2l0aG91dAorICogZXhwbG9kaW5nIHRoZSBmdWxsIHBhdGggaW50byB0ZXh0dWFsIGZvcm0uICBUaGUgcm9vdCBvZiB0aGUKKyAqIGNhY2hlIHRyZWUgaXMgZ2l2ZW4gYXMgInJvb3QiLCBhbmQgb3VyIGN1cnJlbnQgbGV2ZWwgaXMgImluZm8iLgorICogKDEpIFdoZW4gYXQgcm9vdCBsZXZlbCwgaW5mby0+cHJldiBpcyBOVUxMLCBzbyBpdCBpcyAicm9vdCIgaXRzZWxmLgorICogKDIpIE90aGVyd2lzZSwgZmluZCB0aGUgY2FjaGVfdHJlZSB0aGF0IGNvcnJlc3BvbmRzIHRvIG9uZSBsZXZlbAorICogICAgIGFib3ZlIHVzLCBhbmQgZmluZCBvdXJzZWx2ZXMgaW4gdGhlcmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfdHJlZSAqZmluZF9jYWNoZV90cmVlX2Zyb21fdHJhdmVyc2FsKHN0cnVjdCBjYWNoZV90cmVlICpyb290LAorCQkJCQkJCSBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqb3VyX3BhcmVudDsKKworCWlmICghaW5mby0+cHJldikKKwkJcmV0dXJuIHJvb3Q7CisJb3VyX3BhcmVudCA9IGZpbmRfY2FjaGVfdHJlZV9mcm9tX3RyYXZlcnNhbChyb290LCBpbmZvLT5wcmV2KTsKKwlyZXR1cm4gY2FjaGVfdHJlZV9maW5kKG91cl9wYXJlbnQsIGluZm8tPm5hbWUucGF0aCk7Cit9CisKK2ludCBjYWNoZV90cmVlX21hdGNoZXNfdHJhdmVyc2FsKHN0cnVjdCBjYWNoZV90cmVlICpyb290LAorCQkJCSBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50LAorCQkJCSBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQ7CisKKwlpdCA9IGZpbmRfY2FjaGVfdHJlZV9mcm9tX3RyYXZlcnNhbChyb290LCBpbmZvKTsKKwlpdCA9IGNhY2hlX3RyZWVfZmluZChpdCwgZW50LT5wYXRoKTsKKwlpZiAoaXQgJiYgaXQtPmVudHJ5X2NvdW50ID4gMCAmJiAhaGFzaGNtcChlbnQtPnNoYTEsIGl0LT5zaGExKSkKKwkJcmV0dXJuIGl0LT5lbnRyeV9jb3VudDsKKwlyZXR1cm4gMDsKK30KKworaW50IHVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoaW50IGZsYWdzKQoreworCWlmICghdGhlX2luZGV4LmNhY2hlX3RyZWUpCisJCXRoZV9pbmRleC5jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCXJldHVybiBjYWNoZV90cmVlX3VwZGF0ZSh0aGVfaW5kZXguY2FjaGVfdHJlZSwKKwkJCQkgdGhlX2luZGV4LmNhY2hlLCB0aGVfaW5kZXguY2FjaGVfbnIsIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2NhY2hlLXRyZWUuaCBiL2NhY2hlLXRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGNiMmU5Ci0tLSAvZGV2L251bGwKKysrIGIvY2FjaGUtdHJlZS5oCkBAIC0wLDAgKzEsNTIgQEAKKyNpZm5kZWYgQ0FDSEVfVFJFRV9ICisjZGVmaW5lIENBQ0hFX1RSRUVfSAorCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorCitzdHJ1Y3QgY2FjaGVfdHJlZTsKK3N0cnVjdCBjYWNoZV90cmVlX3N1YiB7CisJc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWU7CisJaW50IG5hbWVsZW47CisJaW50IHVzZWQ7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworc3RydWN0IGNhY2hlX3RyZWUgeworCWludCBlbnRyeV9jb3VudDsgLyogbmVnYXRpdmUgbWVhbnMgImludmFsaWQiICovCisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgc3VidHJlZV9ucjsKKwlpbnQgc3VidHJlZV9hbGxvYzsKKwlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKipkb3duOworfTsKKworc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWUodm9pZCk7Cit2b2lkIGNhY2hlX3RyZWVfZnJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqKik7Cit2b2lkIGNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKHN0cnVjdCBjYWNoZV90cmVlICosIGNvbnN0IGNoYXIgKik7CitzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKmNhY2hlX3RyZWVfc3ViKHN0cnVjdCBjYWNoZV90cmVlICosIGNvbnN0IGNoYXIgKik7CisKK3ZvaWQgY2FjaGVfdHJlZV93cml0ZShzdHJ1Y3Qgc3RyYnVmICosIHN0cnVjdCBjYWNoZV90cmVlICpyb290KTsKK3N0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlX3JlYWQoY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitpbnQgY2FjaGVfdHJlZV9mdWxseV92YWxpZChzdHJ1Y3QgY2FjaGVfdHJlZSAqKTsKK2ludCBjYWNoZV90cmVlX3VwZGF0ZShzdHJ1Y3QgY2FjaGVfdHJlZSAqLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiosIGludCwgaW50KTsKKworaW50IHVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoaW50KTsKKworLyogYml0bWFza3MgdG8gd3JpdGVfY2FjaGVfYXNfdHJlZSBmbGFncyAqLworI2RlZmluZSBXUklURV9UUkVFX01JU1NJTkdfT0sgMQorI2RlZmluZSBXUklURV9UUkVFX0lHTk9SRV9DQUNIRV9UUkVFIDIKKyNkZWZpbmUgV1JJVEVfVFJFRV9EUllfUlVOIDQKKyNkZWZpbmUgV1JJVEVfVFJFRV9TSUxFTlQgOAorCisvKiBlcnJvciByZXR1cm4gY29kZXMgKi8KKyNkZWZpbmUgV1JJVEVfVFJFRV9VTlJFQURBQkxFX0lOREVYICgtMSkKKyNkZWZpbmUgV1JJVEVfVFJFRV9VTk1FUkdFRF9JTkRFWCAoLTIpCisjZGVmaW5lIFdSSVRFX1RSRUVfUFJFRklYX0VSUk9SICgtMykKKworaW50IHdyaXRlX2NhY2hlX2FzX3RyZWUodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWdzLCBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBwcmltZV9jYWNoZV90cmVlKHN0cnVjdCBjYWNoZV90cmVlICoqLCBzdHJ1Y3QgdHJlZSAqKTsKKworZXh0ZXJuIGludCBjYWNoZV90cmVlX21hdGNoZXNfdHJhdmVyc2FsKHN0cnVjdCBjYWNoZV90cmVlICosIHN0cnVjdCBuYW1lX2VudHJ5ICplbnQsIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jYWNoZS5oIGIvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNThkZjg0Ci0tLSAvZGV2L251bGwKKysrIGIvY2FjaGUuaApAQCAtMCwwICsxLDEyNzMgQEAKKyNpZm5kZWYgQ0FDSEVfSAorI2RlZmluZSBDQUNIRV9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAiYWR2aWNlLmgiCisjaW5jbHVkZSAiZ2V0dGV4dC5oIgorI2luY2x1ZGUgImNvbnZlcnQuaCIKKworI2luY2x1ZGUgU0hBMV9IRUFERVIKKyNpZm5kZWYgZ2l0X1NIQV9DVFgKKyNkZWZpbmUgZ2l0X1NIQV9DVFgJU0hBX0NUWAorI2RlZmluZSBnaXRfU0hBMV9Jbml0CVNIQTFfSW5pdAorI2RlZmluZSBnaXRfU0hBMV9VcGRhdGUJU0hBMV9VcGRhdGUKKyNkZWZpbmUgZ2l0X1NIQTFfRmluYWwJU0hBMV9GaW5hbAorI2VuZGlmCisKKyNpbmNsdWRlIDx6bGliLmg+Cit0eXBlZGVmIHN0cnVjdCBnaXRfenN0cmVhbSB7CisJel9zdHJlYW0gejsKKwl1bnNpZ25lZCBsb25nIGF2YWlsX2luOworCXVuc2lnbmVkIGxvbmcgYXZhaWxfb3V0OworCXVuc2lnbmVkIGxvbmcgdG90YWxfaW47CisJdW5zaWduZWQgbG9uZyB0b3RhbF9vdXQ7CisJdW5zaWduZWQgY2hhciAqbmV4dF9pbjsKKwl1bnNpZ25lZCBjaGFyICpuZXh0X291dDsKK30gZ2l0X3pzdHJlYW07CisKK3ZvaWQgZ2l0X2luZmxhdGVfaW5pdChnaXRfenN0cmVhbSAqKTsKK3ZvaWQgZ2l0X2luZmxhdGVfaW5pdF9nemlwX29ubHkoZ2l0X3pzdHJlYW0gKik7Cit2b2lkIGdpdF9pbmZsYXRlX2VuZChnaXRfenN0cmVhbSAqKTsKK2ludCBnaXRfaW5mbGF0ZShnaXRfenN0cmVhbSAqLCBpbnQgZmx1c2gpOworCit2b2lkIGdpdF9kZWZsYXRlX2luaXQoZ2l0X3pzdHJlYW0gKiwgaW50IGxldmVsKTsKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdF9nemlwKGdpdF96c3RyZWFtICosIGludCBsZXZlbCk7Cit2b2lkIGdpdF9kZWZsYXRlX2VuZChnaXRfenN0cmVhbSAqKTsKK2ludCBnaXRfZGVmbGF0ZV9hYm9ydChnaXRfenN0cmVhbSAqKTsKK2ludCBnaXRfZGVmbGF0ZV9lbmRfZ2VudGx5KGdpdF96c3RyZWFtICopOworaW50IGdpdF9kZWZsYXRlKGdpdF96c3RyZWFtICosIGludCBmbHVzaCk7Cit1bnNpZ25lZCBsb25nIGdpdF9kZWZsYXRlX2JvdW5kKGdpdF96c3RyZWFtICosIHVuc2lnbmVkIGxvbmcpOworCisjaWYgZGVmaW5lZChEVF9VTktOT1dOKSAmJiAhZGVmaW5lZChOT19EX1RZUEVfSU5fRElSRU5UKQorI2RlZmluZSBEVFlQRShkZSkJKChkZSktPmRfdHlwZSkKKyNlbHNlCisjdW5kZWYgRFRfVU5LTk9XTgorI3VuZGVmIERUX0RJUgorI3VuZGVmIERUX1JFRworI3VuZGVmIERUX0xOSworI2RlZmluZSBEVF9VTktOT1dOCTAKKyNkZWZpbmUgRFRfRElSCQkxCisjZGVmaW5lIERUX1JFRwkJMgorI2RlZmluZSBEVF9MTksJCTMKKyNkZWZpbmUgRFRZUEUoZGUpCURUX1VOS05PV04KKyNlbmRpZgorCisvKiB1bmtub3duIG1vZGUgKGltcG9zc2libGUgY29tYmluYXRpb24gU19JRklGT3xTX0lGQ0hSKSAqLworI2RlZmluZSBTX0lGSU5WQUxJRCAgICAgMDAzMDAwMAorCisvKgorICogQSAiZGlyZWN0b3J5IGxpbmsiIGlzIGEgbGluayB0byBhbm90aGVyIGdpdCBkaXJlY3RvcnkuCisgKgorICogVGhlIHZhbHVlIDAxNjAwMDAgaXMgbm90IG5vcm1hbGx5IGEgdmFsaWQgbW9kZSwgYW5kCisgKiBhbHNvIGp1c3QgaGFwcGVucyB0byBiZSBTX0lGRElSICsgU19JRkxOSworICoKKyAqIE5PVEUhIFdlICpyZWFsbHkqIHNob3VsZG4ndCBkZXBlbmQgb24gdGhlIFNfSUZ4eHggbWFjcm9zCisgKiBhbHdheXMgaGF2aW5nIHRoZSBzYW1lIHZhbHVlcyBldmVyeXdoZXJlLiBXZSBzaG91bGQgdXNlCisgKiBvdXIgaW50ZXJuYWwgZ2l0IHZhbHVlcyBmb3IgdGhlc2UgdGhpbmdzLCBhbmQgdGhlbiB3ZSBjYW4KKyAqIHRyYW5zbGF0ZSB0aGF0IHRvIHRoZSBPUy1zcGVjaWZpYyB2YWx1ZS4gSXQganVzdCBzbworICogaGFwcGVucyB0aGF0IGV2ZXJ5Ym9keSBzaGFyZXMgdGhlIHNhbWUgYml0IHJlcHJlc2VudGF0aW9uCisgKiBpbiB0aGUgVU5JWCB3b3JsZCAoYW5kIGFwcGFyZW50bHkgd2lkZXIgdG9vLi4pCisgKi8KKyNkZWZpbmUgU19JRkdJVExJTksJMDE2MDAwMAorI2RlZmluZSBTX0lTR0lUTElOSyhtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRkdJVExJTkspCisKKy8qCisgKiBJbnRlbnNpdmUgcmVzZWFyY2ggb3ZlciB0aGUgY291cnNlIG9mIG1hbnkgeWVhcnMgaGFzIHNob3duIHRoYXQKKyAqIHBvcnQgOTQxOCBpcyB0b3RhbGx5IHVudXNlZCBieSBhbnl0aGluZyBlbHNlLiBPcgorICoKKyAqCVlvdXIgc2VhcmNoIC0gInBvcnQgOTQxOCIgLSBkaWQgbm90IG1hdGNoIGFueSBkb2N1bWVudHMuCisgKgorICogYXMgd3d3Lmdvb2dsZS5jb20gcHV0cyBpdC4KKyAqCisgKiBUaGlzIHBvcnQgaGFzIGJlZW4gcHJvcGVybHkgYXNzaWduZWQgZm9yIGdpdCB1c2UgYnkgSUFOQToKKyAqIGdpdCAoQXNzaWduZWQtOTQxOCkgW0kwNi0wNTA3MjgtMDAwMV0uCisgKgorICoJZ2l0ICA5NDE4L3RjcCAgIGdpdCBwYWNrIHRyYW5zZmVyIHNlcnZpY2UKKyAqCWdpdCAgOTQxOC91ZHAgICBnaXQgcGFjayB0cmFuc2ZlciBzZXJ2aWNlCisgKgorICogd2l0aCBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+IGFzIHRoZSBwb2ludCBvZgorICogY29udGFjdC4gU2VwdGVtYmVyIDIwMDUuCisgKgorICogU2VlIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvcG9ydC1udW1iZXJzCisgKi8KKyNkZWZpbmUgREVGQVVMVF9HSVRfUE9SVCA5NDE4CisKKy8qCisgKiBCYXNpYyBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBkaXJlY3RvcnkgY2FjaGUKKyAqLworCisjZGVmaW5lIENBQ0hFX1NJR05BVFVSRSAweDQ0NDk1MjQzCS8qICJESVJDIiAqLworc3RydWN0IGNhY2hlX2hlYWRlciB7CisJdW5zaWduZWQgaW50IGhkcl9zaWduYXR1cmU7CisJdW5zaWduZWQgaW50IGhkcl92ZXJzaW9uOworCXVuc2lnbmVkIGludCBoZHJfZW50cmllczsKK307CisKKyNkZWZpbmUgSU5ERVhfRk9STUFUX0xCIDIKKyNkZWZpbmUgSU5ERVhfRk9STUFUX1VCIDQKKworLyoKKyAqIFRoZSAiY2FjaGVfdGltZSIgaXMganVzdCB0aGUgbG93IDMyIGJpdHMgb2YgdGhlCisgKiB0aW1lLiBJdCBkb2Vzbid0IG1hdHRlciBpZiBpdCBvdmVyZmxvd3MgLSB3ZSBvbmx5CisgKiBjaGVjayBpdCBmb3IgZXF1YWxpdHkgaW4gdGhlIDMyIGJpdHMgd2Ugc2F2ZS4KKyAqLworc3RydWN0IGNhY2hlX3RpbWUgeworCXVuc2lnbmVkIGludCBzZWM7CisJdW5zaWduZWQgaW50IG5zZWM7Cit9OworCitzdHJ1Y3QgY2FjaGVfZW50cnkgeworCXN0cnVjdCBjYWNoZV90aW1lIGNlX2N0aW1lOworCXN0cnVjdCBjYWNoZV90aW1lIGNlX210aW1lOworCXVuc2lnbmVkIGludCBjZV9kZXY7CisJdW5zaWduZWQgaW50IGNlX2lubzsKKwl1bnNpZ25lZCBpbnQgY2VfbW9kZTsKKwl1bnNpZ25lZCBpbnQgY2VfdWlkOworCXVuc2lnbmVkIGludCBjZV9naWQ7CisJdW5zaWduZWQgaW50IGNlX3NpemU7CisJdW5zaWduZWQgaW50IGNlX2ZsYWdzOworCXVuc2lnbmVkIGludCBjZV9uYW1lbGVuOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IGNhY2hlX2VudHJ5ICpuZXh0OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqZGlyX25leHQ7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCisjZGVmaW5lIENFX1NUQUdFTUFTSyAoMHgzMDAwKQorI2RlZmluZSBDRV9FWFRFTkRFRCAgKDB4NDAwMCkKKyNkZWZpbmUgQ0VfVkFMSUQgICAgICgweDgwMDApCisjZGVmaW5lIENFX1NUQUdFU0hJRlQgMTIKKworLyoKKyAqIFJhbmdlIDB4RkZGRjAwMDAgaW4gY2VfZmxhZ3MgaXMgZGl2aWRlZCBpbnRvCisgKiB0d28gcGFydHM6IGluLW1lbW9yeSBmbGFncyBhbmQgb24tZGlzayBvbmVzLgorICogRmxhZ3MgaW4gQ0VfRVhURU5ERURfRkxBR1Mgd2lsbCBnZXQgc2F2ZWQgb24tZGlzaworICogaWYgeW91IHdhbnQgdG8gc2F2ZSBhIG5ldyBmbGFnLCBhZGQgaXQgaW4KKyAqIENFX0VYVEVOREVEX0ZMQUdTCisgKgorICogSW4tbWVtb3J5IG9ubHkgZmxhZ3MKKyAqLworI2RlZmluZSBDRV9VUERBVEUgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgQ0VfUkVNT1ZFICAgICAgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIENFX1VQVE9EQVRFICAgICAgICAgICgxIDw8IDE4KQorI2RlZmluZSBDRV9BRERFRCAgICAgICAgICAgICAoMSA8PCAxOSkKKworI2RlZmluZSBDRV9IQVNIRUQgICAgICAgICAgICAoMSA8PCAyMCkKKyNkZWZpbmUgQ0VfVU5IQVNIRUQgICAgICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIENFX1dUX1JFTU9WRSAgICAgICAgICgxIDw8IDIyKSAvKiByZW1vdmUgaW4gd29yayBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgQ0VfQ09ORkxJQ1RFRCAgICAgICAgKDEgPDwgMjMpCisKKyNkZWZpbmUgQ0VfVU5QQUNLRUQgICAgICAgICAgKDEgPDwgMjQpCisjZGVmaW5lIENFX05FV19TS0lQX1dPUktUUkVFICgxIDw8IDI1KQorCisvKgorICogRXh0ZW5kZWQgb24tZGlzayBmbGFncworICovCisjZGVmaW5lIENFX0lOVEVOVF9UT19BREQgICAgICgxIDw8IDI5KQorI2RlZmluZSBDRV9TS0lQX1dPUktUUkVFICAgICAoMSA8PCAzMCkKKy8qIENFX0VYVEVOREVEMiBpcyBmb3IgZnV0dXJlIGV4dGVuc2lvbiAqLworI2RlZmluZSBDRV9FWFRFTkRFRDIgICAgICAgICAoMSA8PCAzMSkKKworI2RlZmluZSBDRV9FWFRFTkRFRF9GTEFHUyAoQ0VfSU5URU5UX1RPX0FERCB8IENFX1NLSVBfV09SS1RSRUUpCisKKy8qCisgKiBTYWZlZ3VhcmQgdG8gYXZvaWQgc2F2aW5nIHdyb25nIGZsYWdzOgorICogIC0gQ0VfRVhURU5ERUQyIHdvbid0IGdldCBzYXZlZCB1bnRpbCBpdHMgc2VtYW50aWMgaXMga25vd24KKyAqICAtIEJpdHMgaW4gMHgwMDAwRkZGRiBoYXZlIGJlZW4gc2F2ZWQgaW4gY2VfZmxhZ3MgYWxyZWFkeQorICogIC0gQml0cyBpbiAweDAwM0YwMDAwIGFyZSBjdXJyZW50bHkgaW4tbWVtb3J5IGZsYWdzCisgKi8KKyNpZiBDRV9FWFRFTkRFRF9GTEFHUyAmIDB4ODAzRkZGRkYKKyNlcnJvciAiQ0VfRVhURU5ERURfRkxBR1Mgb3V0IG9mIHJhbmdlIgorI2VuZGlmCisKKy8qCisgKiBDb3B5IHRoZSBzaGExIGFuZCBzdGF0IHN0YXRlIG9mIGEgY2FjaGUgZW50cnkgZnJvbSBvbmUgdG8KKyAqIGFub3RoZXIuIEJ1dCB3ZSBuZXZlciBjaGFuZ2UgdGhlIG5hbWUsIG9yIHRoZSBoYXNoIHN0YXRlIQorICovCisjZGVmaW5lIENFX1NUQVRFX01BU0sgKENFX0hBU0hFRCB8IENFX1VOSEFTSEVEKQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlfY2FjaGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpkc3QsIHN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjKQoreworCXVuc2lnbmVkIGludCBzdGF0ZSA9IGRzdC0+Y2VfZmxhZ3MgJiBDRV9TVEFURV9NQVNLOworCisJLyogRG9uJ3QgY29weSBoYXNoIGNoYWluIGFuZCBuYW1lICovCisJbWVtY3B5KGRzdCwgc3JjLCBvZmZzZXRvZihzdHJ1Y3QgY2FjaGVfZW50cnksIG5leHQpKTsKKworCS8qIFJlc3RvcmUgdGhlIGhhc2ggc3RhdGUgKi8KKwlkc3QtPmNlX2ZsYWdzID0gKGRzdC0+Y2VfZmxhZ3MgJiB+Q0VfU1RBVEVfTUFTSykgfCBzdGF0ZTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjcmVhdGVfY2VfZmxhZ3ModW5zaWduZWQgc3RhZ2UpCit7CisJcmV0dXJuIChzdGFnZSA8PCBDRV9TVEFHRVNISUZUKTsKK30KKworI2RlZmluZSBjZV9uYW1lbGVuKGNlKSAoKGNlKS0+Y2VfbmFtZWxlbikKKyNkZWZpbmUgY2Vfc2l6ZShjZSkgY2FjaGVfZW50cnlfc2l6ZShjZV9uYW1lbGVuKGNlKSkKKyNkZWZpbmUgY2Vfc3RhZ2UoY2UpICgoQ0VfU1RBR0VNQVNLICYgKGNlKS0+Y2VfZmxhZ3MpID4+IENFX1NUQUdFU0hJRlQpCisjZGVmaW5lIGNlX3VwdG9kYXRlKGNlKSAoKGNlKS0+Y2VfZmxhZ3MgJiBDRV9VUFRPREFURSkKKyNkZWZpbmUgY2Vfc2tpcF93b3JrdHJlZShjZSkgKChjZSktPmNlX2ZsYWdzICYgQ0VfU0tJUF9XT1JLVFJFRSkKKyNkZWZpbmUgY2VfbWFya191cHRvZGF0ZShjZSkgKChjZSktPmNlX2ZsYWdzIHw9IENFX1VQVE9EQVRFKQorCisjZGVmaW5lIGNlX3Blcm1pc3Npb25zKG1vZGUpICgoKG1vZGUpICYgMDEwMCkgPyAwNzU1IDogMDY0NCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyZWF0ZV9jZV9tb2RlKHVuc2lnbmVkIGludCBtb2RlKQoreworCWlmIChTX0lTTE5LKG1vZGUpKQorCQlyZXR1cm4gU19JRkxOSzsKKwlpZiAoU19JU0RJUihtb2RlKSB8fCBTX0lTR0lUTElOSyhtb2RlKSkKKwkJcmV0dXJuIFNfSUZHSVRMSU5LOworCXJldHVybiBTX0lGUkVHIHwgY2VfcGVybWlzc2lvbnMobW9kZSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjZV9tb2RlX2Zyb21fc3RhdChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlleHRlcm4gaW50IHRydXN0X2V4ZWN1dGFibGVfYml0LCBoYXNfc3ltbGlua3M7CisJaWYgKCFoYXNfc3ltbGlua3MgJiYgU19JU1JFRyhtb2RlKSAmJgorCSAgICBjZSAmJiBTX0lTTE5LKGNlLT5jZV9tb2RlKSkKKwkJcmV0dXJuIGNlLT5jZV9tb2RlOworCWlmICghdHJ1c3RfZXhlY3V0YWJsZV9iaXQgJiYgU19JU1JFRyhtb2RlKSkgeworCQlpZiAoY2UgJiYgU19JU1JFRyhjZS0+Y2VfbW9kZSkpCisJCQlyZXR1cm4gY2UtPmNlX21vZGU7CisJCXJldHVybiBjcmVhdGVfY2VfbW9kZSgwNjY2KTsKKwl9CisJcmV0dXJuIGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworfQorc3RhdGljIGlubGluZSBpbnQgY2VfdG9fZHR5cGUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwl1bnNpZ25lZCBjZV9tb2RlID0gbnRvaGwoY2UtPmNlX21vZGUpOworCWlmIChTX0lTUkVHKGNlX21vZGUpKQorCQlyZXR1cm4gRFRfUkVHOworCWVsc2UgaWYgKFNfSVNESVIoY2VfbW9kZSkgfHwgU19JU0dJVExJTksoY2VfbW9kZSkpCisJCXJldHVybiBEVF9ESVI7CisJZWxzZSBpZiAoU19JU0xOSyhjZV9tb2RlKSkKKwkJcmV0dXJuIERUX0xOSzsKKwllbHNlCisJCXJldHVybiBEVF9VTktOT1dOOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2Fub25fbW9kZSh1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlpZiAoU19JU1JFRyhtb2RlKSkKKwkJcmV0dXJuIFNfSUZSRUcgfCBjZV9wZXJtaXNzaW9ucyhtb2RlKTsKKwlpZiAoU19JU0xOSyhtb2RlKSkKKwkJcmV0dXJuIFNfSUZMTks7CisJaWYgKFNfSVNESVIobW9kZSkpCisJCXJldHVybiBTX0lGRElSOworCXJldHVybiBTX0lGR0lUTElOSzsKK30KKworI2RlZmluZSBjYWNoZV9lbnRyeV9zaXplKGxlbikgKG9mZnNldG9mKHN0cnVjdCBjYWNoZV9lbnRyeSxuYW1lKSArIChsZW4pICsgMSkKKworc3RydWN0IGluZGV4X3N0YXRlIHsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZTsKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKKwl1bnNpZ25lZCBpbnQgY2FjaGVfbnIsIGNhY2hlX2FsbG9jLCBjYWNoZV9jaGFuZ2VkOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvOworCXN0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlOworCXN0cnVjdCBjYWNoZV90aW1lIHRpbWVzdGFtcDsKKwl1bnNpZ25lZCBuYW1lX2hhc2hfaW5pdGlhbGl6ZWQgOiAxLAorCQkgaW5pdGlhbGl6ZWQgOiAxOworCXN0cnVjdCBoYXNoX3RhYmxlIG5hbWVfaGFzaDsKK307CisKK2V4dGVybiBzdHJ1Y3QgaW5kZXhfc3RhdGUgdGhlX2luZGV4OworCisvKiBOYW1lIGhhc2hpbmcgKi8KK2V4dGVybiB2b2lkIGFkZF9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpOworLyoKKyAqIFdlIGRvbid0IGFjdHVhbGx5ICpyZW1vdmUqIGl0LCB3ZSBjYW4ganVzdCBtYXJrIGl0IGludmFsaWQgc28gdGhhdAorICogd2Ugd29uJ3QgZmluZCBpdCBpbiBsb29rdXBzLgorICoKKyAqIE5vdCBvbmx5IHdvdWxkIHdlIGhhdmUgdG8gc2VhcmNoIHRoZSBsaXN0cyAoc2ltcGxlIGVub3VnaCksIGJ1dAorICogd2UnZCBhbHNvIGhhdmUgdG8gcmVoYXNoIG90aGVyIGhhc2ggYnVja2V0cyBpbiBjYXNlIHRoaXMgbWFrZXMgdGhlCisgKiBoYXNoIGJ1Y2tldCBlbXB0eSAoY29tbW9uKS4gU28gaXQncyBtdWNoIGJldHRlciB0byBqdXN0IG1hcmsKKyAqIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX25hbWVfaGFzaChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWNlLT5jZV9mbGFncyB8PSBDRV9VTkhBU0hFRDsKK30KKworCisjaWZuZGVmIE5PX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSBhY3RpdmVfY2FjaGUgKHRoZV9pbmRleC5jYWNoZSkKKyNkZWZpbmUgYWN0aXZlX25yICh0aGVfaW5kZXguY2FjaGVfbnIpCisjZGVmaW5lIGFjdGl2ZV9hbGxvYyAodGhlX2luZGV4LmNhY2hlX2FsbG9jKQorI2RlZmluZSBhY3RpdmVfY2FjaGVfY2hhbmdlZCAodGhlX2luZGV4LmNhY2hlX2NoYW5nZWQpCisjZGVmaW5lIGFjdGl2ZV9jYWNoZV90cmVlICh0aGVfaW5kZXguY2FjaGVfdHJlZSkKKworI2RlZmluZSByZWFkX2NhY2hlKCkgcmVhZF9pbmRleCgmdGhlX2luZGV4KQorI2RlZmluZSByZWFkX2NhY2hlX2Zyb20ocGF0aCkgcmVhZF9pbmRleF9mcm9tKCZ0aGVfaW5kZXgsIChwYXRoKSkKKyNkZWZpbmUgcmVhZF9jYWNoZV9wcmVsb2FkKHBhdGhzcGVjKSByZWFkX2luZGV4X3ByZWxvYWQoJnRoZV9pbmRleCwgKHBhdGhzcGVjKSkKKyNkZWZpbmUgaXNfY2FjaGVfdW5ib3JuKCkgaXNfaW5kZXhfdW5ib3JuKCZ0aGVfaW5kZXgpCisjZGVmaW5lIHJlYWRfY2FjaGVfdW5tZXJnZWQoKSByZWFkX2luZGV4X3VubWVyZ2VkKCZ0aGVfaW5kZXgpCisjZGVmaW5lIHdyaXRlX2NhY2hlKG5ld2ZkLCBjYWNoZSwgZW50cmllcykgd3JpdGVfaW5kZXgoJnRoZV9pbmRleCwgKG5ld2ZkKSkKKyNkZWZpbmUgZGlzY2FyZF9jYWNoZSgpIGRpc2NhcmRfaW5kZXgoJnRoZV9pbmRleCkKKyNkZWZpbmUgdW5tZXJnZWRfY2FjaGUoKSB1bm1lcmdlZF9pbmRleCgmdGhlX2luZGV4KQorI2RlZmluZSBjYWNoZV9uYW1lX3BvcyhuYW1lLCBuYW1lbGVuKSBpbmRleF9uYW1lX3BvcygmdGhlX2luZGV4LChuYW1lKSwobmFtZWxlbikpCisjZGVmaW5lIGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9uKSBhZGRfaW5kZXhfZW50cnkoJnRoZV9pbmRleCwgKGNlKSwgKG9wdGlvbikpCisjZGVmaW5lIHJlbmFtZV9jYWNoZV9lbnRyeV9hdChwb3MsIG5ld19uYW1lKSByZW5hbWVfaW5kZXhfZW50cnlfYXQoJnRoZV9pbmRleCwgKHBvcyksIChuZXdfbmFtZSkpCisjZGVmaW5lIHJlbW92ZV9jYWNoZV9lbnRyeV9hdChwb3MpIHJlbW92ZV9pbmRleF9lbnRyeV9hdCgmdGhlX2luZGV4LCAocG9zKSkKKyNkZWZpbmUgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSByZW1vdmVfZmlsZV9mcm9tX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSkKKyNkZWZpbmUgYWRkX3RvX2NhY2hlKHBhdGgsIHN0LCBmbGFncykgYWRkX3RvX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSwgKHN0KSwgKGZsYWdzKSkKKyNkZWZpbmUgYWRkX2ZpbGVfdG9fY2FjaGUocGF0aCwgZmxhZ3MpIGFkZF9maWxlX3RvX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSwgKGZsYWdzKSkKKyNkZWZpbmUgcmVmcmVzaF9jYWNoZShmbGFncykgcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCAoZmxhZ3MpLCBOVUxMLCBOVUxMLCBOVUxMKQorI2RlZmluZSBjZV9tYXRjaF9zdGF0KGNlLCBzdCwgb3B0aW9ucykgaWVfbWF0Y2hfc3RhdCgmdGhlX2luZGV4LCAoY2UpLCAoc3QpLCAob3B0aW9ucykpCisjZGVmaW5lIGNlX21vZGlmaWVkKGNlLCBzdCwgb3B0aW9ucykgaWVfbW9kaWZpZWQoJnRoZV9pbmRleCwgKGNlKSwgKHN0KSwgKG9wdGlvbnMpKQorI2RlZmluZSBjYWNoZV9uYW1lX2V4aXN0cyhuYW1lLCBuYW1lbGVuLCBpZ25jYXNlKSBpbmRleF9uYW1lX2V4aXN0cygmdGhlX2luZGV4LCAobmFtZSksIChuYW1lbGVuKSwgKGlnbmNhc2UpKQorI2RlZmluZSBjYWNoZV9uYW1lX2lzX290aGVyKG5hbWUsIG5hbWVsZW4pIGluZGV4X25hbWVfaXNfb3RoZXIoJnRoZV9pbmRleCwgKG5hbWUpLCAobmFtZWxlbikpCisjZGVmaW5lIHJlc29sdmVfdW5kb19jbGVhcigpIHJlc29sdmVfdW5kb19jbGVhcl9pbmRleCgmdGhlX2luZGV4KQorI2RlZmluZSB1bm1lcmdlX2NhY2hlX2VudHJ5X2F0KGF0KSB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KCZ0aGVfaW5kZXgsIGF0KQorI2RlZmluZSB1bm1lcmdlX2NhY2hlKHBhdGhzcGVjKSB1bm1lcmdlX2luZGV4KCZ0aGVfaW5kZXgsIHBhdGhzcGVjKQorI2VuZGlmCisKK2VudW0gb2JqZWN0X3R5cGUgeworCU9CSl9CQUQgPSAtMSwKKwlPQkpfTk9ORSA9IDAsCisJT0JKX0NPTU1JVCA9IDEsCisJT0JKX1RSRUUgPSAyLAorCU9CSl9CTE9CID0gMywKKwlPQkpfVEFHID0gNCwKKwkvKiA1IGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJT0JKX09GU19ERUxUQSA9IDYsCisJT0JKX1JFRl9ERUxUQSA9IDcsCisJT0JKX0FOWSwKKwlPQkpfTUFYCit9OworCitzdGF0aWMgaW5saW5lIGVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUodW5zaWduZWQgaW50IG1vZGUpCit7CisJcmV0dXJuIFNfSVNESVIobW9kZSkgPyBPQkpfVFJFRSA6CisJCVNfSVNHSVRMSU5LKG1vZGUpID8gT0JKX0NPTU1JVCA6CisJCU9CSl9CTE9COworfQorCisjZGVmaW5lIEdJVF9ESVJfRU5WSVJPTk1FTlQgIkdJVF9ESVIiCisjZGVmaW5lIEdJVF9OQU1FU1BBQ0VfRU5WSVJPTk1FTlQgIkdJVF9OQU1FU1BBQ0UiCisjZGVmaW5lIEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQgIkdJVF9XT1JLX1RSRUUiCisjZGVmaW5lIERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVCAiLmdpdCIKKyNkZWZpbmUgREJfRU5WSVJPTk1FTlQgIkdJVF9PQkpFQ1RfRElSRUNUT1JZIgorI2RlZmluZSBJTkRFWF9FTlZJUk9OTUVOVCAiR0lUX0lOREVYX0ZJTEUiCisjZGVmaW5lIEdSQUZUX0VOVklST05NRU5UICJHSVRfR1JBRlRfRklMRSIKKyNkZWZpbmUgVEVNUExBVEVfRElSX0VOVklST05NRU5UICJHSVRfVEVNUExBVEVfRElSIgorI2RlZmluZSBDT05GSUdfRU5WSVJPTk1FTlQgIkdJVF9DT05GSUciCisjZGVmaW5lIENPTkZJR19EQVRBX0VOVklST05NRU5UICJHSVRfQ09ORklHX1BBUkFNRVRFUlMiCisjZGVmaW5lIEVYRUNfUEFUSF9FTlZJUk9OTUVOVCAiR0lUX0VYRUNfUEFUSCIKKyNkZWZpbmUgQ0VJTElOR19ESVJFQ1RPUklFU19FTlZJUk9OTUVOVCAiR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMiCisjZGVmaW5lIE5PX1JFUExBQ0VfT0JKRUNUU19FTlZJUk9OTUVOVCAiR0lUX05PX1JFUExBQ0VfT0JKRUNUUyIKKyNkZWZpbmUgR0lUQVRUUklCVVRFU19GSUxFICIuZ2l0YXR0cmlidXRlcyIKKyNkZWZpbmUgSU5GT0FUVFJJQlVURVNfRklMRSAiaW5mby9hdHRyaWJ1dGVzIgorI2RlZmluZSBBVFRSSUJVVEVfTUFDUk9fUFJFRklYICJbYXR0cl0iCisjZGVmaW5lIEdJVF9OT1RFU19SRUZfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19SRUYiCisjZGVmaW5lIEdJVF9OT1RFU19ERUZBVUxUX1JFRiAicmVmcy9ub3Rlcy9jb21taXRzIgorI2RlZmluZSBHSVRfTk9URVNfRElTUExBWV9SRUZfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19ESVNQTEFZX1JFRiIKKyNkZWZpbmUgR0lUX05PVEVTX1JFV1JJVEVfUkVGX0VOVklST05NRU5UICJHSVRfTk9URVNfUkVXUklURV9SRUYiCisjZGVmaW5lIEdJVF9OT1RFU19SRVdSSVRFX01PREVfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19SRVdSSVRFX01PREUiCisKKy8qCisgKiBSZXBvc2l0b3J5LWxvY2FsIEdJVF8qIGVudmlyb25tZW50IHZhcmlhYmxlcworICogVGhlIGFycmF5IGlzIE5VTEwtdGVybWluYXRlZCB0byBzaW1wbGlmeSBpdHMgdXNhZ2UgaW4gY29udGV4dHMgc3VjaAorICogZW52aXJvbm1lbnQgY3JlYXRpb24gb3Igc2ltcGxlIHdhbGsgb2YgdGhlIGxpc3QuCisgKiBUaGUgbnVtYmVyIG9mIG5vbi1OVUxMIGVudHJpZXMgaXMgYXZhaWxhYmxlIGFzIGEgbWFjcm8uCisgKi8KKyNkZWZpbmUgTE9DQUxfUkVQT19FTlZfU0laRSA5CitleHRlcm4gY29uc3QgY2hhciAqY29uc3QgbG9jYWxfcmVwb19lbnZbTE9DQUxfUkVQT19FTlZfU0laRSArIDFdOworCitleHRlcm4gaW50IGlzX2JhcmVfcmVwb3NpdG9yeV9jZmc7CitleHRlcm4gaW50IGlzX2JhcmVfcmVwb3NpdG9yeSh2b2lkKTsKK2V4dGVybiBpbnQgaXNfaW5zaWRlX2dpdF9kaXIodm9pZCk7CitleHRlcm4gY2hhciAqZ2l0X3dvcmtfdHJlZV9jZmc7CitleHRlcm4gaW50IGlzX2luc2lkZV93b3JrX3RyZWUodm9pZCk7CitleHRlcm4gaW50IGhhdmVfZ2l0X2Rpcih2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRfZ2l0X2Rpcih2b2lkKTsKK2V4dGVybiBpbnQgaXNfZ2l0X2RpcmVjdG9yeShjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBjaGFyICpnZXRfb2JqZWN0X2RpcmVjdG9yeSh2b2lkKTsKK2V4dGVybiBjaGFyICpnZXRfaW5kZXhfZmlsZSh2b2lkKTsKK2V4dGVybiBjaGFyICpnZXRfZ3JhZnRfZmlsZSh2b2lkKTsKK2V4dGVybiBpbnQgc2V0X2dpdF9kaXIoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0X2dpdF9uYW1lc3BhY2Uodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqc3RyaXBfbmFtZXNwYWNlKGNvbnN0IGNoYXIgKm5hbWVzcGFjZWRfcmVmKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRfZ2l0X3dvcmtfdHJlZSh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpyZWFkX2dpdGZpbGUoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gY29uc3QgY2hhciAqcmVzb2x2ZV9naXRkaXIoY29uc3QgY2hhciAqc3VzcGVjdCk7CitleHRlcm4gdm9pZCBzZXRfZ2l0X3dvcmtfdHJlZShjb25zdCBjaGFyICp0cmVlKTsKKworI2RlZmluZSBBTFRFUk5BVEVfREJfRU5WSVJPTk1FTlQgIkdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTIgorCitleHRlcm4gY29uc3QgY2hhciAqKmdldF9wYXRoc3BlYyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYyk7CitleHRlcm4gdm9pZCBzZXR1cF93b3JrX3RyZWUodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoaW50ICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNldHVwX2dpdF9kaXJlY3Rvcnkodm9pZCk7CitleHRlcm4gY2hhciAqcHJlZml4X3BhdGgoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbGVuLCBjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBjb25zdCBjaGFyICpwcmVmaXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbGVuLCBjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBpbnQgY2hlY2tfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIHZlcmlmeV9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICBpbnQgZGlhZ25vc2VfbWlzc3BlbHRfcmV2KTsKK2V4dGVybiB2b2lkIHZlcmlmeV9ub25fZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgcGF0aF9pbnNpZGVfcmVwbyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnBhdGgpOworCisjZGVmaW5lIElOSVRfREJfUVVJRVQgMHgwMDAxCisKK2V4dGVybiBpbnQgc2V0X2dpdF9kaXJfaW5pdChjb25zdCBjaGFyICpnaXRfZGlyLCBjb25zdCBjaGFyICpyZWFsX2dpdF9kaXIsIGludCk7CitleHRlcm4gaW50IGluaXRfZGIoY29uc3QgY2hhciAqdGVtcGxhdGVfZGlyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisjZGVmaW5lIGFsbG9jX25yKHgpICgoKHgpKzE2KSozLzIpCisKKy8qCisgKiBSZWFsbG9jIHRoZSBidWZmZXIgcG9pbnRlZCBhdCBieSB2YXJpYWJsZSAneCcgc28gdGhhdCBpdCBjYW4gaG9sZAorICogYXQgbGVhc3QgJ25yJyBlbnRyaWVzOyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY3VycmVudGx5IGFsbG9jYXRlZAorICogaXMgJ2FsbG9jJywgdXNpbmcgdGhlIHN0YW5kYXJkIGdyb3dpbmcgZmFjdG9yIGFsbG9jX25yKCkgbWFjcm8uCisgKgorICogRE8gTk9UIFVTRSBhbnkgZXhwcmVzc2lvbiB3aXRoIHNpZGUtZWZmZWN0IGZvciAneCcsICducicsIG9yICdhbGxvYycuCisgKi8KKyNkZWZpbmUgQUxMT0NfR1JPVyh4LCBuciwgYWxsb2MpIFwKKwlkbyB7IFwKKwkJaWYgKChucikgPiBhbGxvYykgeyBcCisJCQlpZiAoYWxsb2NfbnIoYWxsb2MpIDwgKG5yKSkgXAorCQkJCWFsbG9jID0gKG5yKTsgXAorCQkJZWxzZSBcCisJCQkJYWxsb2MgPSBhbGxvY19ucihhbGxvYyk7IFwKKwkJCXggPSB4cmVhbGxvYygoeCksIGFsbG9jICogc2l6ZW9mKCooeCkpKTsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisvKiBJbml0aWFsaXplIGFuZCB1c2UgdGhlIGNhY2hlIGluZm9ybWF0aW9uICovCitleHRlcm4gaW50IHJlYWRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICopOworZXh0ZXJuIGludCByZWFkX2luZGV4X3ByZWxvYWQoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKipwYXRoc3BlYyk7CitleHRlcm4gaW50IHJlYWRfaW5kZXhfZnJvbShzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gaW50IGlzX2luZGV4X3VuYm9ybihzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7CitleHRlcm4gaW50IHJlYWRfaW5kZXhfdW5tZXJnZWQoc3RydWN0IGluZGV4X3N0YXRlICopOworZXh0ZXJuIGludCB3cml0ZV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgaW50IG5ld2ZkKTsKK2V4dGVybiBpbnQgZGlzY2FyZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7CitleHRlcm4gaW50IHVubWVyZ2VkX2luZGV4KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKK2V4dGVybiBpbnQgdmVyaWZ5X3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gc3RydWN0IGNhY2hlX2VudHJ5ICppbmRleF9uYW1lX2V4aXN0cyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBpZ25jYXNlKTsKK2V4dGVybiBpbnQgaW5kZXhfbmFtZV9wb3MoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKTsKKyNkZWZpbmUgQUREX0NBQ0hFX09LX1RPX0FERCAxCQkvKiBPayB0byBhZGQgKi8KKyNkZWZpbmUgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0UgMgkvKiBPayB0byByZXBsYWNlIGZpbGUvZGlyZWN0b3J5ICovCisjZGVmaW5lIEFERF9DQUNIRV9TS0lQX0RGQ0hFQ0sgNAkvKiBPayB0byBza2lwIERGIGNvbmZsaWN0IGNoZWNrcyAqLworI2RlZmluZSBBRERfQ0FDSEVfSlVTVF9BUFBFTkQgOAkJLyogQXBwZW5kIG9ubHk7IHRyZWUuYzo6cmVhZF90cmVlKCkgKi8KKyNkZWZpbmUgQUREX0NBQ0hFX05FV19PTkxZIDE2CQkvKiBEbyBub3QgcmVwbGFjZSBleGlzdGluZyBvbmVzICovCitleHRlcm4gaW50IGFkZF9pbmRleF9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IG9wdGlvbik7CitleHRlcm4gdm9pZCByZW5hbWVfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICosIGludCBwb3MsIGNvbnN0IGNoYXIgKm5ld19uYW1lKTsKK2V4dGVybiBpbnQgcmVtb3ZlX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBpbnQgcG9zKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9tYXJrZWRfY2FjaGVfZW50cmllcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CitleHRlcm4gaW50IHJlbW92ZV9maWxlX2Zyb21faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgpOworI2RlZmluZSBBRERfQ0FDSEVfVkVSQk9TRSAxCisjZGVmaW5lIEFERF9DQUNIRV9QUkVURU5EIDIKKyNkZWZpbmUgQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMJNAorI2RlZmluZSBBRERfQ0FDSEVfSUdOT1JFX1JFTU9WQUwgOAorI2RlZmluZSBBRERfQ0FDSEVfSU5URU5UIDE2CitleHRlcm4gaW50IGFkZF90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKiwgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgYWRkX2ZpbGVfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncyk7CitleHRlcm4gc3RydWN0IGNhY2hlX2VudHJ5ICptYWtlX2NhY2hlX2VudHJ5KHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgc3RhZ2UsIGludCByZWZyZXNoKTsKK2V4dGVybiBpbnQgY2Vfc2FtZV9uYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqYSwgc3RydWN0IGNhY2hlX2VudHJ5ICpiKTsKK2V4dGVybiBpbnQgaW5kZXhfbmFtZV9pc19vdGhlcihjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqLCBpbnQpOworCisvKiBkbyBzdGF0IGNvbXBhcmlzb24gZXZlbiBpZiBDRV9WQUxJRCBpcyB0cnVlICovCisjZGVmaW5lIENFX01BVENIX0lHTk9SRV9WQUxJRAkJMDEKKy8qIGRvIG5vdCBjaGVjayB0aGUgY29udGVudHMgYnV0IHJlcG9ydCBkaXJ0eSBvbiByYWNpbHktY2xlYW4gZW50cmllcyAqLworI2RlZmluZSBDRV9NQVRDSF9SQUNZX0lTX0RJUlRZCQkwMgorLyogZG8gc3RhdCBjb21wYXJpc29uIGV2ZW4gaWYgQ0VfU0tJUF9XT1JLVFJFRSBpcyB0cnVlICovCisjZGVmaW5lIENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFCTA0CitleHRlcm4gaW50IGllX21hdGNoX3N0YXQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqLCBzdHJ1Y3Qgc3RhdCAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBpZV9tb2RpZmllZChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IGNhY2hlX2VudHJ5ICosIHN0cnVjdCBzdGF0ICosIHVuc2lnbmVkIGludCk7CisKK3N0cnVjdCBwYXRoc3BlYyB7CisJY29uc3QgY2hhciAqKnJhdzsgLyogZ2V0X3BhdGhzcGVjKCkgcmVzdWx0LCBub3QgZnJlZWQgYnkgZnJlZV9wYXRoc3BlYygpICovCisJaW50IG5yOworCXVuc2lnbmVkIGludCBoYXNfd2lsZGNhcmQ6MTsKKwl1bnNpZ25lZCBpbnQgcmVjdXJzaXZlOjE7CisJaW50IG1heF9kZXB0aDsKKwlzdHJ1Y3QgcGF0aHNwZWNfaXRlbSB7CisJCWNvbnN0IGNoYXIgKm1hdGNoOworCQlpbnQgbGVuOworCQl1bnNpZ25lZCBpbnQgdXNlX3dpbGRjYXJkOjE7CisJfSAqaXRlbXM7Cit9OworCitleHRlcm4gaW50IGluaXRfcGF0aHNwZWMoc3RydWN0IHBhdGhzcGVjICosIGNvbnN0IGNoYXIgKiopOworZXh0ZXJuIHZvaWQgZnJlZV9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKik7CitleHRlcm4gaW50IGNlX3BhdGhfbWF0Y2goY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYyk7CisKKyNkZWZpbmUgSEFTSF9XUklURV9PQkpFQ1QgMQorI2RlZmluZSBIQVNIX0ZPUk1BVF9DSEVDSyAyCitleHRlcm4gaW50IGluZGV4X2ZkKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmZCwgc3RydWN0IHN0YXQgKnN0LCBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKTsKK2V4dGVybiBpbnQgaW5kZXhfcGF0aCh1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqc3QsIHVuc2lnbmVkIGZsYWdzKTsKK2V4dGVybiB2b2lkIGZpbGxfc3RhdF9jYWNoZV9pbmZvKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCk7CisKKyNkZWZpbmUgUkVGUkVTSF9SRUFMTFkJCTB4MDAwMQkvKiBpZ25vcmVfdmFsaWQgKi8KKyNkZWZpbmUgUkVGUkVTSF9VTk1FUkdFRAkweDAwMDIJLyogYWxsb3cgdW5tZXJnZWQgKi8KKyNkZWZpbmUgUkVGUkVTSF9RVUlFVAkJMHgwMDA0CS8qIGJlIHF1aWV0IGFib3V0IGl0ICovCisjZGVmaW5lIFJFRlJFU0hfSUdOT1JFX01JU1NJTkcJMHgwMDA4CS8qIGlnbm9yZSBub24tZXhpc3RlbnQgKi8KKyNkZWZpbmUgUkVGUkVTSF9JR05PUkVfU1VCTU9EVUxFUwkweDAwMTAJLyogaWdub3JlIHN1Ym1vZHVsZXMgKi8KKyNkZWZpbmUgUkVGUkVTSF9JTl9QT1JDRUxBSU4JMHgwMDIwCS8qIHVzZXIgZnJpZW5kbHkgb3V0cHV0LCBub3QgIm5lZWRzIHVwZGF0ZSIgKi8KK2V4dGVybiBpbnQgcmVmcmVzaF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICoqcGF0aHNwZWMsIGNoYXIgKnNlZW4sIGNvbnN0IGNoYXIgKmhlYWRlcl9tc2cpOworCitzdHJ1Y3QgbG9ja19maWxlIHsKKwlzdHJ1Y3QgbG9ja19maWxlICpuZXh0OworCWludCBmZDsKKwlwaWRfdCBvd25lcjsKKwljaGFyIG9uX2xpc3Q7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07Cit9OworI2RlZmluZSBMT0NLX0RJRV9PTl9FUlJPUiAxCisjZGVmaW5lIExPQ0tfTk9ERVJFRiAyCitleHRlcm4gaW50IHVuYWJsZV90b19sb2NrX2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpOworZXh0ZXJuIE5PUkVUVVJOIHZvaWQgdW5hYmxlX3RvX2xvY2tfaW5kZXhfZGllKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpOworZXh0ZXJuIGludCBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKHN0cnVjdCBsb2NrX2ZpbGUgKiwgY29uc3QgY2hhciAqcGF0aCwgaW50KTsKK2V4dGVybiBpbnQgaG9sZF9sb2NrX2ZpbGVfZm9yX2FwcGVuZChzdHJ1Y3QgbG9ja19maWxlICosIGNvbnN0IGNoYXIgKnBhdGgsIGludCk7CitleHRlcm4gaW50IGNvbW1pdF9sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqKTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9pbmRleF9pZl9hYmxlKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgbG9ja19maWxlICopOworCitleHRlcm4gaW50IGhvbGRfbG9ja2VkX2luZGV4KHN0cnVjdCBsb2NrX2ZpbGUgKiwgaW50KTsKK2V4dGVybiBpbnQgY29tbWl0X2xvY2tlZF9pbmRleChzdHJ1Y3QgbG9ja19maWxlICopOworZXh0ZXJuIHZvaWQgc2V0X2FsdGVybmF0ZV9pbmRleF9vdXRwdXQoY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgY2xvc2VfbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKik7CitleHRlcm4gdm9pZCByb2xsYmFja19sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqKTsKK2V4dGVybiBpbnQgZGVsZXRlX3JlZihjb25zdCBjaGFyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBkZWxvcHQpOworCisvKiBFbnZpcm9ubWVudCBiaXRzIGZyb20gY29uZmlndXJhdGlvbiBtZWNoYW5pc20gKi8KK2V4dGVybiBpbnQgdHJ1c3RfZXhlY3V0YWJsZV9iaXQ7CitleHRlcm4gaW50IHRydXN0X2N0aW1lOworZXh0ZXJuIGludCBxdW90ZV9wYXRoX2Z1bGx5OworZXh0ZXJuIGludCBoYXNfc3ltbGlua3M7CitleHRlcm4gaW50IG1pbmltdW1fYWJicmV2LCBkZWZhdWx0X2FiYnJldjsKK2V4dGVybiBpbnQgaWdub3JlX2Nhc2U7CitleHRlcm4gaW50IGFzc3VtZV91bmNoYW5nZWQ7CitleHRlcm4gaW50IHByZWZlcl9zeW1saW5rX3JlZnM7CitleHRlcm4gaW50IGxvZ19hbGxfcmVmX3VwZGF0ZXM7CitleHRlcm4gaW50IHdhcm5fYW1iaWd1b3VzX3JlZnM7CitleHRlcm4gaW50IHNoYXJlZF9yZXBvc2l0b3J5OworZXh0ZXJuIGNvbnN0IGNoYXIgKmFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZTsKK2V4dGVybiBjb25zdCBjaGFyICphcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2U7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2F0dHJpYnV0ZXNfZmlsZTsKK2V4dGVybiBpbnQgemxpYl9jb21wcmVzc2lvbl9sZXZlbDsKK2V4dGVybiBpbnQgY29yZV9jb21wcmVzc2lvbl9sZXZlbDsKK2V4dGVybiBpbnQgY29yZV9jb21wcmVzc2lvbl9zZWVuOworZXh0ZXJuIHNpemVfdCBwYWNrZWRfZ2l0X3dpbmRvd19zaXplOworZXh0ZXJuIHNpemVfdCBwYWNrZWRfZ2l0X2xpbWl0OworZXh0ZXJuIHNpemVfdCBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYmlnX2ZpbGVfdGhyZXNob2xkOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGFja19zaXplX2xpbWl0X2NmZzsKK2V4dGVybiBpbnQgcmVhZF9yZXBsYWNlX3JlZnM7CitleHRlcm4gaW50IGZzeW5jX29iamVjdF9maWxlczsKK2V4dGVybiBpbnQgY29yZV9wcmVsb2FkX2luZGV4OworZXh0ZXJuIGludCBjb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dDsKK2V4dGVybiBpbnQgcHJlY29tcG9zZWRfdW5pY29kZTsKKworZW51bSBicmFuY2hfdHJhY2sgeworCUJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCA9IC0xLAorCUJSQU5DSF9UUkFDS19ORVZFUiA9IDAsCisJQlJBTkNIX1RSQUNLX1JFTU9URSwKKwlCUkFOQ0hfVFJBQ0tfQUxXQVlTLAorCUJSQU5DSF9UUkFDS19FWFBMSUNJVCwKKwlCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUKK307CisKK2VudW0gcmViYXNlX3NldHVwX3R5cGUgeworCUFVVE9SRUJBU0VfTkVWRVIgPSAwLAorCUFVVE9SRUJBU0VfTE9DQUwsCisJQVVUT1JFQkFTRV9SRU1PVEUsCisJQVVUT1JFQkFTRV9BTFdBWVMKK307CisKK2VudW0gcHVzaF9kZWZhdWx0X3R5cGUgeworCVBVU0hfREVGQVVMVF9OT1RISU5HID0gMCwKKwlQVVNIX0RFRkFVTFRfTUFUQ0hJTkcsCisJUFVTSF9ERUZBVUxUX1NJTVBMRSwKKwlQVVNIX0RFRkFVTFRfVVBTVFJFQU0sCisJUFVTSF9ERUZBVUxUX0NVUlJFTlQsCisJUFVTSF9ERUZBVUxUX1VOU1BFQ0lGSUVECit9OworCitleHRlcm4gZW51bSBicmFuY2hfdHJhY2sgZ2l0X2JyYW5jaF90cmFjazsKK2V4dGVybiBlbnVtIHJlYmFzZV9zZXR1cF90eXBlIGF1dG9yZWJhc2U7CitleHRlcm4gZW51bSBwdXNoX2RlZmF1bHRfdHlwZSBwdXNoX2RlZmF1bHQ7CisKK2VudW0gb2JqZWN0X2NyZWF0aW9uX21vZGUgeworCU9CSkVDVF9DUkVBVElPTl9VU0VTX0hBUkRMSU5LUyA9IDAsCisJT0JKRUNUX0NSRUFUSU9OX1VTRVNfUkVOQU1FUyA9IDEKK307CisKK2V4dGVybiBlbnVtIG9iamVjdF9jcmVhdGlvbl9tb2RlIG9iamVjdF9jcmVhdGlvbl9tb2RlOworCitleHRlcm4gY2hhciAqbm90ZXNfcmVmX25hbWU7CisKK2V4dGVybiBpbnQgZ3JhZnRzX3JlcGxhY2VfcGFyZW50czsKKworI2RlZmluZSBHSVRfUkVQT19WRVJTSU9OIDAKK2V4dGVybiBpbnQgcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbjsKK2V4dGVybiBpbnQgY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXQodm9pZCk7CisKKyNkZWZpbmUgTVRJTUVfQ0hBTkdFRAkweDAwMDEKKyNkZWZpbmUgQ1RJTUVfQ0hBTkdFRAkweDAwMDIKKyNkZWZpbmUgT1dORVJfQ0hBTkdFRAkweDAwMDQKKyNkZWZpbmUgTU9ERV9DSEFOR0VEICAgIDB4MDAwOAorI2RlZmluZSBJTk9ERV9DSEFOR0VEICAgMHgwMDEwCisjZGVmaW5lIERBVEFfQ0hBTkdFRCAgICAweDAwMjAKKyNkZWZpbmUgVFlQRV9DSEFOR0VEICAgIDB4MDA0MAorCitleHRlcm4gY2hhciAqbWtzbnBhdGgoY2hhciAqYnVmLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CitleHRlcm4gY2hhciAqZ2l0X3NucGF0aChjaGFyICpidWYsIHNpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKK2V4dGVybiBjaGFyICpnaXRfcGF0aGR1cChjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK2V4dGVybiBjaGFyICpta3BhdGhkdXAoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKKy8qIFJldHVybiBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGZpbGVuYW1lIG1hdGNoaW5nIHRoZSBzaGExIHNpZ25hdHVyZSAqLworZXh0ZXJuIGNoYXIgKm1rcGF0aChjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitleHRlcm4gY2hhciAqZ2l0X3BhdGgoY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIGNoYXIgKmdpdF9wYXRoX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworZXh0ZXJuIGNoYXIgKnNoYTFfZmlsZV9uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGNoYXIgKnNoYTFfcGFja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGNoYXIgKnNoYTFfcGFja19pbmRleF9uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZpbmRfdW5pcXVlX2FiYnJldihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQpOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbnVsbF9zaGExWzIwXTsKKworc3RhdGljIGlubGluZSBpbnQgaGFzaGNtcChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGEyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyssIHNoYTErKywgc2hhMisrKSB7CisJCWlmICgqc2hhMSAhPSAqc2hhMikKKwkJCXJldHVybiAqc2hhMSAtICpzaGEyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19udWxsX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gIWhhc2hjbXAoc2hhMSwgbnVsbF9zaGExKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhhc2hjcHkodW5zaWduZWQgY2hhciAqc2hhX2RzdCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhX3NyYykKK3sKKwltZW1jcHkoc2hhX2RzdCwgc2hhX3NyYywgMjApOworfQorc3RhdGljIGlubGluZSB2b2lkIGhhc2hjbHIodW5zaWduZWQgY2hhciAqaGFzaCkKK3sKKwltZW1zZXQoaGFzaCwgMCwgMjApOworfQorCisjZGVmaW5lIEVNUFRZX1RSRUVfU0hBMV9IRVggXAorCSI0YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0IgorI2RlZmluZSBFTVBUWV9UUkVFX1NIQTFfQklOX0xJVEVSQUwgXAorCSAiXHg0Ylx4ODJceDVkXHhjNlx4NDJceGNiXHg2ZVx4YjlceGEwXHg2MCIgXAorCSAiXHhlNVx4NGJceGY4XHhkNlx4OTJceDg4XHhmYlx4ZWVceDQ5XHgwNCIKKyNkZWZpbmUgRU1QVFlfVFJFRV9TSEExX0JJTiBcCisJICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBFTVBUWV9UUkVFX1NIQTFfQklOX0xJVEVSQUwpCisKKyNkZWZpbmUgRU1QVFlfQkxPQl9TSEExX0hFWCBcCisJImU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEiCisjZGVmaW5lIEVNUFRZX0JMT0JfU0hBMV9CSU5fTElURVJBTCBcCisJIlx4ZTZceDlkXHhlMlx4OWJceGIyXHhkMVx4ZDZceDQzXHg0Ylx4OGIiIFwKKwkiXHgyOVx4YWVceDc3XHg1YVx4ZDhceGMyXHhlNFx4OGNceDUzXHg5MSIKKyNkZWZpbmUgRU1QVFlfQkxPQl9TSEExX0JJTiBcCisJKChjb25zdCB1bnNpZ25lZCBjaGFyICopIEVNUFRZX0JMT0JfU0hBMV9CSU5fTElURVJBTCkKKworc3RhdGljIGlubGluZSBpbnQgaXNfZW1wdHlfYmxvYl9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJcmV0dXJuICFoYXNoY21wKHNoYTEsIEVNUFRZX0JMT0JfU0hBMV9CSU4pOworfQorCitpbnQgZ2l0X21rc3RlbXAoY2hhciAqcGF0aCwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKnRlbXBsYXRlKTsKKworaW50IGdpdF9ta3N0ZW1wcyhjaGFyICpwYXRoLCBzaXplX3QgbiwgY29uc3QgY2hhciAqdGVtcGxhdGUsIGludCBzdWZmaXhfbGVuKTsKKworLyogc2V0IGRlZmF1bHQgcGVybWlzc2lvbnMgYnkgcGFzc2luZyBtb2RlIGFyZ3VtZW50cyB0byBvcGVuKDIpICovCitpbnQgZ2l0X21rc3RlbXBzX21vZGUoY2hhciAqcGF0dGVybiwgaW50IHN1ZmZpeF9sZW4sIGludCBtb2RlKTsKK2ludCBnaXRfbWtzdGVtcF9tb2RlKGNoYXIgKnBhdHRlcm4sIGludCBtb2RlKTsKKworLyoKKyAqIE5PVEUgTk9URSBOT1RFISEKKyAqCisgKiBQRVJNX1VNQVNLLCBPTERfUEVSTV9HUk9VUCBhbmQgT0xEX1BFUk1fRVZFUllCT0RZIGVudW1lcmF0aW9ucyBtdXN0CisgKiBub3QgYmUgY2hhbmdlZC4gT2xkIHJlcG9zaXRvcmllcyBoYXZlIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSB3cml0dGVuIGluCisgKiBudW1lcmljIGZvcm1hdCwgYW5kIHRoZXJlZm9yZSB0aGVzZSB2YWx1ZXMgYXJlIHByZXNlcnZlZCBmb3IgY29tcGF0aWJpbGl0eQorICogcmVhc29ucy4KKyAqLworZW51bSBzaGFyZWRyZXBvIHsKKwlQRVJNX1VNQVNLICAgICAgICAgID0gMCwKKwlPTERfUEVSTV9HUk9VUCAgICAgID0gMSwKKwlPTERfUEVSTV9FVkVSWUJPRFkgID0gMiwKKwlQRVJNX0dST1VQICAgICAgICAgID0gMDY2MCwKKwlQRVJNX0VWRVJZQk9EWSAgICAgID0gMDY2NAorfTsKK2ludCBnaXRfY29uZmlnX3Blcm0oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CitpbnQgc2V0X3NoYXJlZF9wZXJtKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKTsKKyNkZWZpbmUgYWRqdXN0X3NoYXJlZF9wZXJtKHBhdGgpIHNldF9zaGFyZWRfcGVybSgocGF0aCksIDApCitpbnQgc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhjaGFyICpwYXRoKTsKK2ludCBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGNvbnN0IGNoYXIgKnBhdGgpOworaW50IG1rZGlyX2luX2dpdGRpcihjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiB2b2lkIGhvbWVfY29uZmlnX3BhdGhzKGNoYXIgKipnbG9iYWwsIGNoYXIgKip4ZGcsIGNoYXIgKmZpbGUpOworZXh0ZXJuIGNoYXIgKmV4cGFuZF91c2VyX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7Citjb25zdCBjaGFyICplbnRlcl9yZXBvKGNvbnN0IGNoYXIgKnBhdGgsIGludCBzdHJpY3QpOworc3RhdGljIGlubGluZSBpbnQgaXNfYWJzb2x1dGVfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCXJldHVybiBpc19kaXJfc2VwKHBhdGhbMF0pIHx8IGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpOworfQoraW50IGlzX2RpcmVjdG9yeShjb25zdCBjaGFyICopOworY29uc3QgY2hhciAqcmVhbF9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOworY29uc3QgY2hhciAqYWJzb2x1dGVfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKK2NvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqYWJzLCBjb25zdCBjaGFyICpiYXNlKTsKK2ludCBub3JtYWxpemVfcGF0aF9jb3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKK2ludCBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcmVmaXhfbGlzdCk7CitjaGFyICpzdHJpcF9wYXRoX3N1ZmZpeChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzdWZmaXgpOworaW50IGRhZW1vbl9hdm9pZF9hbGlhcyhjb25zdCBjaGFyICpwYXRoKTsKK2ludCBvZmZzZXRfMXN0X2NvbXBvbmVudChjb25zdCBjaGFyICpwYXRoKTsKKworLyogb2JqZWN0IHJlcGxhY2VtZW50ICovCisjZGVmaW5lIFJFQURfU0hBMV9GSUxFX1JFUExBQ0UgMQorZXh0ZXJuIHZvaWQgKnJlYWRfc2hhMV9maWxlX2V4dGVuZGVkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGZsYWcpOworc3RhdGljIGlubGluZSB2b2lkICpyZWFkX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXJldHVybiByZWFkX3NoYTFfZmlsZV9leHRlbmRlZChzaGExLCB0eXBlLCBzaXplLCBSRUFEX1NIQTFfRklMRV9SRVBMQUNFKTsKK30KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyICpkb19sb29rdXBfcmVwbGFjZV9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CitzdGF0aWMgaW5saW5lIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxvb2t1cF9yZXBsYWNlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWlmICghcmVhZF9yZXBsYWNlX3JlZnMpCisJCXJldHVybiBzaGExOworCXJldHVybiBkb19sb29rdXBfcmVwbGFjZV9vYmplY3Qoc2hhMSk7Cit9CisKKy8qIFJlYWQgYW5kIHVucGFjayBhIHNoYTEgZmlsZSBpbnRvIG1lbW9yeSwgd3JpdGUgbWVtb3J5IHRvIGEgc2hhMSBmaWxlICovCitleHRlcm4gaW50IHNoYTFfb2JqZWN0X2luZm8oY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIGludCBoYXNoX3NoYTFfZmlsZShjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCBjaGFyICp0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBpbnQgd3JpdGVfc2hhMV9maWxlKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IGNoYXIgKnR5cGUsIHVuc2lnbmVkIGNoYXIgKnJldHVybl9zaGExKTsKK2V4dGVybiBpbnQgcHJldGVuZF9zaGExX2ZpbGUodm9pZCAqLCB1bnNpZ25lZCBsb25nLCBlbnVtIG9iamVjdF90eXBlLCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCBmb3JjZV9vYmplY3RfbG9vc2UoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdGltZV90IG10aW1lKTsKK2V4dGVybiB2b2lkICptYXBfc2hhMV9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGxvbmcgKnNpemUpOworZXh0ZXJuIGludCB1bnBhY2tfc2hhMV9oZWFkZXIoZ2l0X3pzdHJlYW0gKnN0cmVhbSwgdW5zaWduZWQgY2hhciAqbWFwLCB1bnNpZ25lZCBsb25nIG1hcHNpemUsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZzaXopOworZXh0ZXJuIGludCBwYXJzZV9zaGExX2hlYWRlcihjb25zdCBjaGFyICpoZHIsIHVuc2lnbmVkIGxvbmcgKnNpemVwKTsKKworLyogZ2xvYmFsIGZsYWcgdG8gZW5hYmxlIGV4dHJhIGNoZWNrcyB3aGVuIGFjY2Vzc2luZyBwYWNrZWQgb2JqZWN0cyAqLworZXh0ZXJuIGludCBkb19jaGVja19wYWNrZWRfb2JqZWN0X2NyYzsKKworLyogZm9yIGRldmVsb3BtZW50OiBsb2cgb2Zmc2V0IG9mIHBhY2sgYWNjZXNzICovCitleHRlcm4gY29uc3QgY2hhciAqbG9nX3BhY2tfYWNjZXNzOworCitleHRlcm4gaW50IGNoZWNrX3NoYTFfc2lnbmF0dXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICp0eXBlKTsKKworZXh0ZXJuIGludCBtb3ZlX3RlbXBfdG9fZmlsZShjb25zdCBjaGFyICp0bXBmaWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKK2V4dGVybiBpbnQgaGFzX3NoYTFfcGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBpbnQgaGFzX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBpbnQgaGFzX2xvb3NlX29iamVjdF9ub25sb2NhbChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworZXh0ZXJuIGludCBoYXNfcGFja19pbmRleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworZXh0ZXJuIHZvaWQgYXNzZXJ0X3NoYTFfdHlwZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlIGV4cGVjdCk7CisKK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBoZXh2YWxfdGFibGVbMjU2XTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGhleHZhbCh1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGhleHZhbF90YWJsZVtjXTsKK30KKworLyogQ29udmVydCB0by9mcm9tIGhleC9zaGExIHJlcHJlc2VudGF0aW9uICovCisjZGVmaW5lIE1JTklNVU1fQUJCUkVWIG1pbmltdW1fYWJicmV2CisjZGVmaW5lIERFRkFVTFRfQUJCUkVWIGRlZmF1bHRfYWJicmV2CisKK3N0cnVjdCBvYmplY3RfY29udGV4dCB7CisJdW5zaWduZWQgY2hhciB0cmVlWzIwXTsKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCXVuc2lnbmVkIG1vZGU7Cit9OworCisjZGVmaW5lIEdFVF9TSEExX1FVSUVUTFkgICAgICAgIDAxCisjZGVmaW5lIEdFVF9TSEExX0NPTU1JVCAgICAgICAgIDAyCisjZGVmaW5lIEdFVF9TSEExX0NPTU1JVFRJU0ggICAgIDA0CisjZGVmaW5lIEdFVF9TSEExX1RSRUUgICAgICAgICAgMDEwCisjZGVmaW5lIEdFVF9TSEExX1RSRUVJU0ggICAgICAgMDIwCisjZGVmaW5lIEdFVF9TSEExX0JMT0IJICAgICAgIDA0MAorI2RlZmluZSBHRVRfU0hBMV9PTkxZX1RPX0RJRSAwNDAwMAorCitleHRlcm4gaW50IGdldF9zaGExKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gaW50IGdldF9zaGExX2NvbW1pdChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBnZXRfc2hhMV9jb21taXR0aXNoKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gaW50IGdldF9zaGExX3RyZWUoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBpbnQgZ2V0X3NoYTFfdHJlZWlzaChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBnZXRfc2hhMV9ibG9iKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gdm9pZCBtYXliZV9kaWVfb25fbWlzc3BlbHRfb2JqZWN0X25hbWUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgZ2V0X3NoYTFfd2l0aF9jb250ZXh0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBvYmplY3RfY29udGV4dCAqb3JjKTsKKwordHlwZWRlZiBpbnQgZWFjaF9hYmJyZXZfZm4oY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfYWJicmV2KGNvbnN0IGNoYXIgKnByZWZpeCwgZWFjaF9hYmJyZXZfZm4sIHZvaWQgKik7CisKKy8qCisgKiBUcnkgdG8gcmVhZCBhIFNIQTEgaW4gaGV4YWRlY2ltYWwgZm9ybWF0IGZyb20gdGhlIDQwIGNoYXJhY3RlcnMKKyAqIHN0YXJ0aW5nIGF0IGhleC4gIFdyaXRlIHRoZSAyMC1ieXRlIHJlc3VsdCB0byBzaGExIGluIGJpbmFyeSBmb3JtLgorICogUmV0dXJuIDAgb24gc3VjY2Vzcy4gIFJlYWRpbmcgc3RvcHMgaWYgYSBOVUwgaXMgZW5jb3VudGVyZWQgaW4gdGhlCisgKiBpbnB1dCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIHRoaXMgZnVuY3Rpb24gYW4gYXJiaXRyYXJ5CisgKiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgorICovCitleHRlcm4gaW50IGdldF9zaGExX2hleChjb25zdCBjaGFyICpoZXgsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitleHRlcm4gY2hhciAqc2hhMV90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CS8qIHN0YXRpYyBidWZmZXIgcmVzdWx0ISAqLworZXh0ZXJuIGludCByZWFkX3JlZl9mdWxsKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgaW50IHJlYWRpbmcsIGludCAqZmxhZ3MpOworZXh0ZXJuIGludCByZWFkX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworLyoKKyAqIFJlc29sdmUgYSByZWZlcmVuY2UsIHJlY3Vyc2l2ZWx5IGZvbGxvd2luZyBzeW1ib2xpYyByZWZlcmVyZW5jZXMuCisgKgorICogU3RvcmUgdGhlIHJlZmVycmVkLXRvIG9iamVjdCdzIG5hbWUgaW4gc2hhMSBhbmQgcmV0dXJuIHRoZSBuYW1lIG9mCisgKiB0aGUgbm9uLXN5bWJvbGljIHJlZmVyZW5jZSB0aGF0IHVsdGltYXRlbHkgcG9pbnRlZCBhdCBpdC4gIFRoZQorICogcmV0dXJuIHZhbHVlLCBpZiBub3QgTlVMTCwgaXMgYSBwb2ludGVyIGludG8gZWl0aGVyIGEgc3RhdGljIGJ1ZmZlcgorICogb3IgdGhlIGlucHV0IHJlZi4KKyAqCisgKiBJZiB0aGUgcmVmZXJlbmNlIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhbiBvYmplY3QsIHRoZSBiZWhhdmlvcgorICogZGVwZW5kcyBvbiB0aGUgInJlYWRpbmciIGFyZ3VtZW50OgorICoKKyAqIC0gSWYgcmVhZGluZyBpcyBzZXQsIHJldHVybiBOVUxMLgorICoKKyAqIC0gSWYgcmVhZGluZyBpcyBub3Qgc2V0LCBjbGVhciBzaGExIGFuZCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxhc3QKKyAqICAgcmVmZXJlbmNlIG5hbWUgaW4gdGhlIGNoYWluLCB3aGljaCB3aWxsIGVpdGhlciBiZSBhIG5vbi1zeW1ib2xpYworICogICByZWZlcmVuY2Ugb3IgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZS4gIElmIHRoaXMgaXMgYSBwcmVsdWRlIHRvCisgKiAgICJ3cml0aW5nIiB0byB0aGUgcmVmLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBuYW1lIG9mIHRoZSByZWYKKyAqICAgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIGNyZWF0ZWQgb3IgY2hhbmdlZC4KKyAqCisgKiBJZiBmbGFnIGlzIG5vbi1OVUxMLCBzZXQgdGhlIHZhbHVlIHRoYXQgaXQgcG9pbnRzIHRvIHRoZQorICogY29tYmluYXRpb24gb2YgUkVGX0lTUEFDS0VEIChpZiB0aGUgcmVmZXJlbmNlIHdhcyBmb3VuZCBhbW9uZyB0aGUKKyAqIHBhY2tlZCByZWZlcmVuY2VzKSBhbmQgUkVGX0lTU1lNUkVGIChpZiB0aGUgaW5pdGlhbCByZWZlcmVuY2Ugd2FzIGEKKyAqIHN5bWJvbGljIHJlZmVyZW5jZSkuCisgKgorICogSWYgcmVmIGlzIG5vdCBhIHByb3Blcmx5LWZvcm1hdHRlZCwgbm9ybWFsaXplZCByZWZlcmVuY2UsIHJldHVybgorICogTlVMTC4gIElmIG1vcmUgdGhhbiBNQVhERVBUSCByZWN1cnNpdmUgc3ltYm9saWMgbG9va3VwcyBhcmUgbmVlZGVkLAorICogZ2l2ZSB1cCBhbmQgcmV0dXJuIE5VTEwuCisgKgorICogZXJybm8gaXMgc29tZXRpbWVzIHNldCBvbiBlcnJvcnMsIGJ1dCBub3QgYWx3YXlzLgorICovCitleHRlcm4gY29uc3QgY2hhciAqcmVzb2x2ZV9yZWZfdW5zYWZlKGNvbnN0IGNoYXIgKnJlZiwgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IHJlYWRpbmcsIGludCAqZmxhZyk7CitleHRlcm4gY2hhciAqcmVzb2x2ZV9yZWZkdXAoY29uc3QgY2hhciAqcmVmLCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgcmVhZGluZywgaW50ICpmbGFnKTsKKworZXh0ZXJuIGludCBkd2ltX3JlZihjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKipyZWYpOworZXh0ZXJuIGludCBkd2ltX2xvZyhjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKipyZWYpOworZXh0ZXJuIGludCBpbnRlcnByZXRfYnJhbmNoX25hbWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3Qgc3RyYnVmICopOworZXh0ZXJuIGludCBnZXRfc2hhMV9tYihjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitleHRlcm4gaW50IHJlZm5hbWVfbWF0Y2goY29uc3QgY2hhciAqYWJicmV2X25hbWUsIGNvbnN0IGNoYXIgKmZ1bGxfbmFtZSwgY29uc3QgY2hhciAqKnJ1bGVzKTsKK2V4dGVybiBjb25zdCBjaGFyICpyZWZfcmV2X3BhcnNlX3J1bGVzW107CisjZGVmaW5lIHJlZl9mZXRjaF9ydWxlcyByZWZfcmV2X3BhcnNlX3J1bGVzCisKK2V4dGVybiBpbnQgY3JlYXRlX3N5bXJlZihjb25zdCBjaGFyICpyZWYsIGNvbnN0IGNoYXIgKnJlZnNfaGVhZHNfbWFzdGVyLCBjb25zdCBjaGFyICpsb2dtc2cpOworZXh0ZXJuIGludCB2YWxpZGF0ZV9oZWFkcmVmKGNvbnN0IGNoYXIgKnJlZik7CisKK2V4dGVybiBpbnQgYmFzZV9uYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqbmFtZTEsIGludCBsZW4xLCBpbnQgbW9kZTEsIGNvbnN0IGNoYXIgKm5hbWUyLCBpbnQgbGVuMiwgaW50IG1vZGUyKTsKK2V4dGVybiBpbnQgZGZfbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgaW50IG1vZGUxLCBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBtb2RlMik7CitleHRlcm4gaW50IGNhY2hlX25hbWVfY29tcGFyZShjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjEsIGNvbnN0IGNoYXIgKm5hbWUyLCBpbnQgbGVuMik7CitleHRlcm4gaW50IGNhY2hlX25hbWVfc3RhZ2VfY29tcGFyZShjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjEsIGludCBzdGFnZTEsIGNvbnN0IGNoYXIgKm5hbWUyLCBpbnQgbGVuMiwgaW50IHN0YWdlMik7CisKK2V4dGVybiB2b2lkICpyZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCQljb25zdCBjaGFyICpyZXF1aXJlZF90eXBlLAorCQkJCQl1bnNpZ25lZCBsb25nICpzaXplLAorCQkJCQl1bnNpZ25lZCBjaGFyICpzaGExX3JldCk7CisKK2V4dGVybiBzdHJ1Y3Qgb2JqZWN0ICpwZWVsX3RvX3R5cGUoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkJICAgc3RydWN0IG9iamVjdCAqbywgZW51bSBvYmplY3RfdHlwZSk7CisKK2VudW0gZGF0ZV9tb2RlIHsKKwlEQVRFX05PUk1BTCA9IDAsCisJREFURV9SRUxBVElWRSwKKwlEQVRFX1NIT1JULAorCURBVEVfTE9DQUwsCisJREFURV9JU084NjAxLAorCURBVEVfUkZDMjgyMiwKKwlEQVRFX1JBVworfTsKKworY29uc3QgY2hhciAqc2hvd19kYXRlKHVuc2lnbmVkIGxvbmcgdGltZSwgaW50IHRpbWV6b25lLCBlbnVtIGRhdGVfbW9kZSBtb2RlKTsKK3ZvaWQgc2hvd19kYXRlX3JlbGF0aXZlKHVuc2lnbmVkIGxvbmcgdGltZSwgaW50IHR6LCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqbm93LAorCQkJc3RydWN0IHN0cmJ1ZiAqdGltZWJ1Zik7CitpbnQgcGFyc2VfZGF0ZShjb25zdCBjaGFyICpkYXRlLCBjaGFyICpidWYsIGludCBidWZzaXplKTsKK2ludCBwYXJzZV9kYXRlX2Jhc2ljKGNvbnN0IGNoYXIgKmRhdGUsIHVuc2lnbmVkIGxvbmcgKnRpbWVzdGFtcCwgaW50ICpvZmZzZXQpOwordm9pZCBkYXRlc3RhbXAoY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSk7CisjZGVmaW5lIGFwcHJveGlkYXRlKHMpIGFwcHJveGlkYXRlX2NhcmVmdWwoKHMpLCBOVUxMKQordW5zaWduZWQgbG9uZyBhcHByb3hpZGF0ZV9jYXJlZnVsKGNvbnN0IGNoYXIgKiwgaW50ICopOwordW5zaWduZWQgbG9uZyBhcHByb3hpZGF0ZV9yZWxhdGl2ZShjb25zdCBjaGFyICpkYXRlLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqbm93KTsKK2VudW0gZGF0ZV9tb2RlIHBhcnNlX2RhdGVfZm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CisKKyNkZWZpbmUgSURFTlRfU1RSSUNUCSAgICAgICAxCisjZGVmaW5lIElERU5UX05PX0RBVEUJICAgICAgIDIKKyNkZWZpbmUgSURFTlRfTk9fTkFNRQkgICAgICAgNAorZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9hdXRob3JfaW5mbyhpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9jb21taXR0ZXJfaW5mbyhpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZtdF9pZGVudChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICplbWFpbCwgY29uc3QgY2hhciAqZGF0ZV9zdHIsIGludCk7CitleHRlcm4gY29uc3QgY2hhciAqZm10X25hbWUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZW1haWwpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmlkZW50X2RlZmF1bHRfZW1haWwodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2VkaXRvcih2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfcGFnZXIoaW50IHN0ZG91dF9pc190dHkpOworZXh0ZXJuIGludCBnaXRfaWRlbnRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworCitzdHJ1Y3QgaWRlbnRfc3BsaXQgeworCWNvbnN0IGNoYXIgKm5hbWVfYmVnaW47CisJY29uc3QgY2hhciAqbmFtZV9lbmQ7CisJY29uc3QgY2hhciAqbWFpbF9iZWdpbjsKKwljb25zdCBjaGFyICptYWlsX2VuZDsKKwljb25zdCBjaGFyICpkYXRlX2JlZ2luOworCWNvbnN0IGNoYXIgKmRhdGVfZW5kOworCWNvbnN0IGNoYXIgKnR6X2JlZ2luOworCWNvbnN0IGNoYXIgKnR6X2VuZDsKK307CisvKgorICogU2lnbmFscyBhbiBzdWNjZXNzIHdpdGggMCwgYnV0IHRpbWUgcGFydCBvZiB0aGUgcmVzdWx0IG1heSBiZSBOVUxMCisgKiBpZiB0aGUgaW5wdXQgbGFja3MgdGltZXN0YW1wIGFuZCB6b25lCisgKi8KK2V4dGVybiBpbnQgc3BsaXRfaWRlbnRfbGluZShzdHJ1Y3QgaWRlbnRfc3BsaXQgKiwgY29uc3QgY2hhciAqLCBpbnQpOworCitzdHJ1Y3QgY2hlY2tvdXQgeworCWNvbnN0IGNoYXIgKmJhc2VfZGlyOworCWludCBiYXNlX2Rpcl9sZW47CisJdW5zaWduZWQgZm9yY2U6MSwKKwkJIHF1aWV0OjEsCisJCSBub3RfbmV3OjEsCisJCSByZWZyZXNoX2NhY2hlOjE7Cit9OworCitleHRlcm4gaW50IGNoZWNrb3V0X2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUsIGNoYXIgKnRvcGF0aCk7CisKK3N0cnVjdCBjYWNoZV9kZWYgeworCWNoYXIgcGF0aFtQQVRIX01BWCArIDFdOworCWludCBsZW47CisJaW50IGZsYWdzOworCWludCB0cmFja19mbGFnczsKKwlpbnQgcHJlZml4X2xlbl9zdGF0X2Z1bmM7Cit9OworCitleHRlcm4gaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgdGhyZWFkZWRfaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBjaGVja19sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CitleHRlcm4gaW50IGhhc19kaXJzX29ubHlfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgcHJlZml4X2xlbik7CitleHRlcm4gdm9pZCBzY2hlZHVsZV9kaXJfZm9yX3JlbW92YWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CitleHRlcm4gdm9pZCByZW1vdmVfc2NoZWR1bGVkX2RpcnModm9pZCk7CisKK2V4dGVybiBzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSB7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKm5leHQ7CisJY2hhciAqbmFtZTsKKwljaGFyIGJhc2VbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK30gKmFsdF9vZGJfbGlzdDsKK2V4dGVybiB2b2lkIHByZXBhcmVfYWx0X29kYih2b2lkKTsKK2V4dGVybiB2b2lkIHJlYWRfaW5mb19hbHRlcm5hdGVzKGNvbnN0IGNoYXIgKiByZWxhdGl2ZV9iYXNlLCBpbnQgZGVwdGgpOworZXh0ZXJuIHZvaWQgYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShjb25zdCBjaGFyICpyZWZlcmVuY2UpOwordHlwZWRlZiBpbnQgYWx0X29kYl9mbihzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZm9yZWFjaF9hbHRfb2RiKGFsdF9vZGJfZm4sIHZvaWQqKTsKKworc3RydWN0IHBhY2tfd2luZG93IHsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKm5leHQ7CisJdW5zaWduZWQgY2hhciAqYmFzZTsKKwlvZmZfdCBvZmZzZXQ7CisJc2l6ZV90IGxlbjsKKwl1bnNpZ25lZCBpbnQgbGFzdF91c2VkOworCXVuc2lnbmVkIGludCBpbnVzZV9jbnQ7Cit9OworCitleHRlcm4gc3RydWN0IHBhY2tlZF9naXQgeworCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXh0OworCXN0cnVjdCBwYWNrX3dpbmRvdyAqd2luZG93czsKKwlvZmZfdCBwYWNrX3NpemU7CisJY29uc3Qgdm9pZCAqaW5kZXhfZGF0YTsKKwlzaXplX3QgaW5kZXhfc2l6ZTsKKwl1aW50MzJfdCBudW1fb2JqZWN0czsKKwl1aW50MzJfdCBudW1fYmFkX29iamVjdHM7CisJdW5zaWduZWQgY2hhciAqYmFkX29iamVjdF9zaGExOworCWludCBpbmRleF92ZXJzaW9uOworCXRpbWVfdCBtdGltZTsKKwlpbnQgcGFja19mZDsKKwl1bnNpZ25lZCBwYWNrX2xvY2FsOjEsCisJCSBwYWNrX2tlZXA6MSwKKwkJIGRvX25vdF9jbG9zZToxOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJLyogc29tZXRoaW5nIGxpa2UgIi5naXQvb2JqZWN0cy9wYWNrL3h4eHh4LnBhY2siICovCisJY2hhciBwYWNrX25hbWVbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK30gKnBhY2tlZF9naXQ7CisKK3N0cnVjdCBwYWNrX2VudHJ5IHsKKwlvZmZfdCBvZmZzZXQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKK307CisKK3N0cnVjdCByZWYgeworCXN0cnVjdCByZWYgKm5leHQ7CisJdW5zaWduZWQgY2hhciBvbGRfc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciBuZXdfc2hhMVsyMF07CisJY2hhciAqc3ltcmVmOworCXVuc2lnbmVkIGludCBmb3JjZToxLAorCQltZXJnZToxLAorCQlub25mYXN0Zm9yd2FyZDoxLAorCQlkZWxldGlvbjoxOworCWVudW0geworCQlSRUZfU1RBVFVTX05PTkUgPSAwLAorCQlSRUZfU1RBVFVTX09LLAorCQlSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRCwKKwkJUkVGX1NUQVRVU19SRUpFQ1RfTk9ERUxFVEUsCisJCVJFRl9TVEFUVVNfVVBUT0RBVEUsCisJCVJFRl9TVEFUVVNfUkVNT1RFX1JFSkVDVCwKKwkJUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JUCisJfSBzdGF0dXM7CisJY2hhciAqcmVtb3RlX3N0YXR1czsKKwlzdHJ1Y3QgcmVmICpwZWVyX3JlZjsgLyogd2hlbiByZW5hbWluZyAqLworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsgLyogbW9yZSAqLworfTsKKworI2RlZmluZSBSRUZfTk9STUFMCSgxdSA8PCAwKQorI2RlZmluZSBSRUZfSEVBRFMJKDF1IDw8IDEpCisjZGVmaW5lIFJFRl9UQUdTCSgxdSA8PCAyKQorCitleHRlcm4gc3RydWN0IHJlZiAqZmluZF9yZWZfYnlfbmFtZShjb25zdCBzdHJ1Y3QgcmVmICpsaXN0LCBjb25zdCBjaGFyICpuYW1lKTsKKworI2RlZmluZSBDT05ORUNUX1ZFUkJPU0UgICAgICAgKDF1IDw8IDApCitleHRlcm4gc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmdpdF9jb25uZWN0KGludCBmZFsyXSwgY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpwcm9nLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBmaW5pc2hfY29ubmVjdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubik7CitleHRlcm4gaW50IGdpdF9jb25uZWN0aW9uX2lzX3NvY2tldChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubik7CitzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzIHsKKwlpbnQgbnIsIGFsbG9jOworCXVuc2lnbmVkIGNoYXIgKCphcnJheSlbMjBdOworfTsKK2V4dGVybiBzdHJ1Y3QgcmVmICoqZ2V0X3JlbW90ZV9oZWFkcyhpbnQgaW4sIHN0cnVjdCByZWYgKipsaXN0LCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBleHRyYV9oYXZlX29iamVjdHMgKik7CitleHRlcm4gaW50IHNlcnZlcl9zdXBwb3J0cyhjb25zdCBjaGFyICpmZWF0dXJlKTsKK2V4dGVybiBpbnQgcGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGNvbnN0IGNoYXIgKmZlYXR1cmVzLCBjb25zdCBjaGFyICpmZWF0dXJlKTsKK2V4dGVybiBjb25zdCBjaGFyICpzZXJ2ZXJfZmVhdHVyZV92YWx1ZShjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgKmxlbl9yZXQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnBhcnNlX2ZlYXR1cmVfdmFsdWUoY29uc3QgY2hhciAqZmVhdHVyZV9saXN0LCBjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgKmxlbl9yZXQpOworCitleHRlcm4gc3RydWN0IHBhY2tlZF9naXQgKnBhcnNlX3BhY2tfaW5kZXgodW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqaWR4X3BhdGgpOworCitleHRlcm4gdm9pZCBwcmVwYXJlX3BhY2tlZF9naXQodm9pZCk7CitleHRlcm4gdm9pZCByZXByZXBhcmVfcGFja2VkX2dpdCh2b2lkKTsKK2V4dGVybiB2b2lkIGluc3RhbGxfcGFja2VkX2dpdChzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjayk7CisKK2V4dGVybiBzdHJ1Y3QgcGFja2VkX2dpdCAqZmluZF9zaGExX3BhY2soY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkJIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrcyk7CisKK2V4dGVybiB2b2lkIHBhY2tfcmVwb3J0KHZvaWQpOworZXh0ZXJuIGludCBvcGVuX3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKik7CitleHRlcm4gdm9pZCBjbG9zZV9wYWNrX2luZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICopOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKnVzZV9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICosIHN0cnVjdCBwYWNrX3dpbmRvdyAqKiwgb2ZmX3QsIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCBjbG9zZV9wYWNrX3dpbmRvd3Moc3RydWN0IHBhY2tlZF9naXQgKik7CitleHRlcm4gdm9pZCB1bnVzZV9wYWNrKHN0cnVjdCBwYWNrX3dpbmRvdyAqKik7CitleHRlcm4gdm9pZCBmcmVlX3BhY2tfYnlfbmFtZShjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgY2xlYXJfZGVsdGFfYmFzZV9jYWNoZSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgcGFja2VkX2dpdCAqYWRkX3BhY2tlZF9naXQoY29uc3QgY2hhciAqLCBpbnQsIGludCk7CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciAqbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShzdHJ1Y3QgcGFja2VkX2dpdCAqLCB1aW50MzJfdCk7CitleHRlcm4gb2ZmX3QgbnRoX3BhY2tlZF9vYmplY3Rfb2Zmc2V0KGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICosIHVpbnQzMl90KTsKK2V4dGVybiBvZmZfdCBmaW5kX3BhY2tfZW50cnlfb25lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IHBhY2tlZF9naXQgKik7CitleHRlcm4gaW50IGlzX3BhY2tfdmFsaWQoc3RydWN0IHBhY2tlZF9naXQgKik7CitleHRlcm4gdm9pZCAqdW5wYWNrX2VudHJ5KHN0cnVjdCBwYWNrZWRfZ2l0ICosIG9mZl90LCBlbnVtIG9iamVjdF90eXBlICosIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdW5zaWduZWQgbG9uZyB1bnBhY2tfb2JqZWN0X2hlYWRlcl9idWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyAqc2l6ZXApOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3NpemVfZnJvbV9kZWx0YShzdHJ1Y3QgcGFja2VkX2dpdCAqLCBzdHJ1Y3QgcGFja193aW5kb3cgKiosIG9mZl90KTsKK2V4dGVybiBpbnQgdW5wYWNrX29iamVjdF9oZWFkZXIoc3RydWN0IHBhY2tlZF9naXQgKiwgc3RydWN0IHBhY2tfd2luZG93ICoqLCBvZmZfdCAqLCB1bnNpZ25lZCBsb25nICopOworCitzdHJ1Y3Qgb2JqZWN0X2luZm8geworCS8qIFJlcXVlc3QgKi8KKwl1bnNpZ25lZCBsb25nICpzaXplcDsKKworCS8qIFJlc3BvbnNlICovCisJZW51bSB7CisJCU9JX0NBQ0hFRCwKKwkJT0lfTE9PU0UsCisJCU9JX1BBQ0tFRCwKKwkJT0lfREJDQUNIRUQKKwl9IHdoZW5jZTsKKwl1bmlvbiB7CisJCS8qCisJCSAqIHN0cnVjdCB7CisJCSAqIAkuLi4gTm90aGluZyB0byBleHBvc2UgaW4gdGhpcyBjYXNlCisJCSAqIH0gY2FjaGVkOworCQkgKiBzdHJ1Y3QgeworCQkgKiAJLi4uIE5vdGhpbmcgdG8gZXhwb3NlIGluIHRoaXMgY2FzZQorCQkgKiB9IGxvb3NlOworCQkgKi8KKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrOworCQkJb2ZmX3Qgb2Zmc2V0OworCQkJdW5zaWduZWQgaW50IGlzX2RlbHRhOworCQl9IHBhY2tlZDsKKwl9IHU7Cit9OworZXh0ZXJuIGludCBzaGExX29iamVjdF9pbmZvX2V4dGVuZGVkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IG9iamVjdF9pbmZvICopOworCisvKiBEdW1iIHNlcnZlcnMgc3VwcG9ydCAqLworZXh0ZXJuIGludCB1cGRhdGVfc2VydmVyX2luZm8oaW50KTsKKworLyogZ2l0X2NvbmZpZ19wYXJzZV9rZXkoKSByZXR1cm5zIHRoZXNlIG5lZ2F0ZWQ6ICovCisjZGVmaW5lIENPTkZJR19JTlZBTElEX0tFWSAxCisjZGVmaW5lIENPTkZJR19OT19TRUNUSU9OX09SX05BTUUgMgorLyogZ2l0X2NvbmZpZ19zZXQoKSwgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoKSByZXR1cm4gdGhlIGFib3ZlIG9yIHRoZXNlOiAqLworI2RlZmluZSBDT05GSUdfTk9fTE9DSyAtMQorI2RlZmluZSBDT05GSUdfSU5WQUxJRF9GSUxFIDMKKyNkZWZpbmUgQ09ORklHX05PX1dSSVRFIDQKKyNkZWZpbmUgQ09ORklHX05PVEhJTkdfU0VUIDUKKyNkZWZpbmUgQ09ORklHX0lOVkFMSURfUEFUVEVSTiA2CisjZGVmaW5lIENPTkZJR19HRU5FUklDX0VSUk9SIDcKKwordHlwZWRlZiBpbnQgKCpjb25maWdfZm5fdCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gaW50IGdpdF9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGdpdF9jb25maWdfcHVzaF9wYXJhbWV0ZXIoY29uc3QgY2hhciAqdGV4dCk7CitleHRlcm4gaW50IGdpdF9jb25maWdfZnJvbV9wYXJhbWV0ZXJzKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ193aXRoX29wdGlvbnMoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKiwKKwkJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHJlc3BlY3RfaW5jbHVkZXMpOworZXh0ZXJuIGludCBnaXRfY29uZmlnX2Vhcmx5KGNvbmZpZ19mbl90IGZuLCB2b2lkICosIGNvbnN0IGNoYXIgKnJlcG9fY29uZmlnKTsKK2V4dGVybiBpbnQgZ2l0X3BhcnNlX3Vsb25nKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19pbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2l0X2NvbmZpZ191bG9uZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19ib29sKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19tYXliZV9ib29sKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19zdHJpbmcoY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX3BhdGhuYW1lKGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19zZXQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX3BhcnNlX2tleShjb25zdCBjaGFyICosIGNoYXIgKiosIGludCAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2V0Y19naXRjb25maWcodm9pZCk7CitleHRlcm4gaW50IGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworZXh0ZXJuIGludCBnaXRfZW52X2Jvb2woY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBnaXRfY29uZmlnX3N5c3RlbSh2b2lkKTsKK2V4dGVybiBpbnQgY29uZmlnX2Vycm9yX25vbmJvb2woY29uc3QgY2hhciAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRfbG9nX291dHB1dF9lbmNvZGluZyh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZyh2b2lkKTsKKworZXh0ZXJuIGludCBnaXRfY29uZmlnX3BhcnNlX3BhcmFtZXRlcihjb25zdCBjaGFyICosIGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKTsKKworc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgeworCWludCBkZXB0aDsKKwljb25maWdfZm5fdCBmbjsKKwl2b2lkICpkYXRhOworfTsKKyNkZWZpbmUgQ09ORklHX0lOQ0xVREVfSU5JVCB7IDAgfQorZXh0ZXJuIGludCBnaXRfY29uZmlnX2luY2x1ZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpOworCisjZGVmaW5lIElERU5UX05BTUVfR0lWRU4gMDEKKyNkZWZpbmUgSURFTlRfTUFJTF9HSVZFTiAwMgorI2RlZmluZSBJREVOVF9BTExfR0lWRU4gKElERU5UX05BTUVfR0lWRU58SURFTlRfTUFJTF9HSVZFTikKK2V4dGVybiBpbnQgdXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuOworZXh0ZXJuIGludCB1c2VyX2lkZW50X3N1ZmZpY2llbnRseV9naXZlbih2b2lkKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9jb21taXRfZW5jb2Rpbmc7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2xvZ19vdXRwdXRfZW5jb2Rpbmc7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X21haWxtYXBfZmlsZTsKKworLyogSU8gaGVscGVyIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHZvaWQgbWF5YmVfZmx1c2hfb3JfZGllKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgY29weV9mZChpbnQgaWZkLCBpbnQgb2ZkKTsKK2V4dGVybiBpbnQgY29weV9maWxlKGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbW9kZSk7CitleHRlcm4gaW50IGNvcHlfZmlsZV93aXRoX3RpbWUoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBtb2RlKTsKK2V4dGVybiB2b2lkIHdyaXRlX29yX2RpZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBpbnQgd3JpdGVfb3Jfd2hpbmUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqbXNnKTsKK2V4dGVybiBpbnQgd3JpdGVfb3Jfd2hpbmVfcGlwZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICptc2cpOworZXh0ZXJuIHZvaWQgZnN5bmNfb3JfZGllKGludCBmZCwgY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIHNzaXplX3QgcmVhZF9pbl9mdWxsKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOworZXh0ZXJuIHNzaXplX3Qgd3JpdGVfaW5fZnVsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCB3cml0ZV9zdHJfaW5fZnVsbChpbnQgZmQsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gd3JpdGVfaW5fZnVsbChmZCwgc3RyLCBzdHJsZW4oc3RyKSk7Cit9CisKKy8qIHBhZ2VyLmMgKi8KK2V4dGVybiB2b2lkIHNldHVwX3BhZ2VyKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnBhZ2VyX3Byb2dyYW07CitleHRlcm4gaW50IHBhZ2VyX2luX3VzZSh2b2lkKTsKK2V4dGVybiBpbnQgcGFnZXJfdXNlX2NvbG9yOworZXh0ZXJuIGludCB0ZXJtX2NvbHVtbnModm9pZCk7CitleHRlcm4gaW50IGRlY2ltYWxfd2lkdGgoaW50KTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmVkaXRvcl9wcm9ncmFtOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFza3Bhc3NfcHJvZ3JhbTsKK2V4dGVybiBjb25zdCBjaGFyICpleGNsdWRlc19maWxlOworCisvKiBiYXNlODUgKi8KK2ludCBkZWNvZGVfODUoY2hhciAqZHN0LCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGluZWxlbik7Cit2b2lkIGVuY29kZV84NShjaGFyICpidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBieXRlcyk7CisKKy8qIGFsbG9jLmMgKi8KK2V4dGVybiB2b2lkICphbGxvY19ibG9iX25vZGUodm9pZCk7CitleHRlcm4gdm9pZCAqYWxsb2NfdHJlZV9ub2RlKHZvaWQpOworZXh0ZXJuIHZvaWQgKmFsbG9jX2NvbW1pdF9ub2RlKHZvaWQpOworZXh0ZXJuIHZvaWQgKmFsbG9jX3RhZ19ub2RlKHZvaWQpOworZXh0ZXJuIHZvaWQgKmFsbG9jX29iamVjdF9ub2RlKHZvaWQpOworZXh0ZXJuIHZvaWQgYWxsb2NfcmVwb3J0KHZvaWQpOworCisvKiB0cmFjZS5jICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorZXh0ZXJuIHZvaWQgdHJhY2VfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitleHRlcm4gdm9pZCB0cmFjZV9hcmd2X3ByaW50Zihjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworZXh0ZXJuIHZvaWQgdHJhY2VfcmVwb19zZXR1cChjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCB0cmFjZV93YW50KGNvbnN0IGNoYXIgKmtleSk7CitleHRlcm4gdm9pZCB0cmFjZV9zdHJidWYoY29uc3QgY2hhciAqa2V5LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpidWYpOworCit2b2lkIHBhY2tldF90cmFjZV9pZGVudGl0eShjb25zdCBjaGFyICpwcm9nKTsKKworLyogYWRkICovCisvKgorICogcmV0dXJuIDAgaWYgc3VjY2VzcywgMSAtIGlmIGFkZGl0aW9uIG9mIGEgZmlsZSBmYWlsZWQgYW5kCisgKiBBRERfRklMRVNfSUdOT1JFX0VSUk9SUyB3YXMgc3BlY2lmaWVkIGluIGZsYWdzCisgKi8KK2ludCBhZGRfZmlsZXNfdG9fY2FjaGUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICoqcGF0aHNwZWMsIGludCBmbGFncyk7CisKKy8qIGRpZmYuYyAqLworZXh0ZXJuIGludCBkaWZmX2F1dG9fcmVmcmVzaF9pbmRleDsKKworLyogbWF0Y2gtdHJlZXMuYyAqLwordm9pZCBzaGlmdF90cmVlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7Cit2b2lkIHNoaWZ0X3RyZWVfYnkoY29uc3QgdW5zaWduZWQgY2hhciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoKKyAqIHdoaXRlc3BhY2UgcnVsZXMuCisgKiB1c2VkIGJ5IGJvdGggZGlmZiBhbmQgYXBwbHkKKyAqIGxhc3QgdHdvIGRpZ2l0cyBhcmUgdGFiIHdpZHRoCisgKi8KKyNkZWZpbmUgV1NfQkxBTktfQVRfRU9MICAgICAgICAgMDEwMAorI2RlZmluZSBXU19TUEFDRV9CRUZPUkVfVEFCICAgICAwMjAwCisjZGVmaW5lIFdTX0lOREVOVF9XSVRIX05PTl9UQUIgIDA0MDAKKyNkZWZpbmUgV1NfQ1JfQVRfRU9MICAgICAgICAgICAwMTAwMAorI2RlZmluZSBXU19CTEFOS19BVF9FT0YgICAgICAgIDAyMDAwCisjZGVmaW5lIFdTX1RBQl9JTl9JTkRFTlQgICAgICAgMDQwMDAKKyNkZWZpbmUgV1NfVFJBSUxJTkdfU1BBQ0UgICAgICAoV1NfQkxBTktfQVRfRU9MfFdTX0JMQU5LX0FUX0VPRikKKyNkZWZpbmUgV1NfREVGQVVMVF9SVUxFIChXU19UUkFJTElOR19TUEFDRXxXU19TUEFDRV9CRUZPUkVfVEFCfDgpCisjZGVmaW5lIFdTX1RBQl9XSURUSF9NQVNLICAgICAgICAwNzcKK2V4dGVybiB1bnNpZ25lZCB3aGl0ZXNwYWNlX3J1bGVfY2ZnOworZXh0ZXJuIHVuc2lnbmVkIHdoaXRlc3BhY2VfcnVsZShjb25zdCBjaGFyICopOworZXh0ZXJuIHVuc2lnbmVkIHBhcnNlX3doaXRlc3BhY2VfcnVsZShjb25zdCBjaGFyICopOworZXh0ZXJuIHVuc2lnbmVkIHdzX2NoZWNrKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIHdzX3J1bGUpOworZXh0ZXJuIHZvaWQgd3NfY2hlY2tfZW1pdChjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlLCBGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnNldCwgY29uc3QgY2hhciAqcmVzZXQsIGNvbnN0IGNoYXIgKndzKTsKK2V4dGVybiBjaGFyICp3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyh1bnNpZ25lZCB3cyk7CitleHRlcm4gdm9pZCB3c19maXhfY29weShzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKiwgaW50LCB1bnNpZ25lZCwgaW50ICopOworZXh0ZXJuIGludCB3c19ibGFua19saW5lKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIHdzX3J1bGUpOworI2RlZmluZSB3c190YWJfd2lkdGgocnVsZSkgICAgICgocnVsZSkgJiBXU19UQUJfV0lEVEhfTUFTSykKKworLyogbHMtZmlsZXMgKi8KK2ludCByZXBvcnRfcGF0aF9lcnJvcihjb25zdCBjaGFyICpwc19tYXRjaGVkLCBjb25zdCBjaGFyICoqcGF0aHNwZWMsIGNvbnN0IGNoYXIgKnByZWZpeCk7Cit2b2lkIG92ZXJsYXlfdHJlZV9vbl9jYWNoZShjb25zdCBjaGFyICp0cmVlX25hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisKK2NoYXIgKmFsaWFzX2xvb2t1cChjb25zdCBjaGFyICphbGlhcyk7CitpbnQgc3BsaXRfY21kbGluZShjaGFyICpjbWRsaW5lLCBjb25zdCBjaGFyICoqKmFyZ3YpOworLyogVGFrZXMgYSBuZWdhdGl2ZSB2YWx1ZSByZXR1cm5lZCBieSBzcGxpdF9jbWRsaW5lICovCitjb25zdCBjaGFyICpzcGxpdF9jbWRsaW5lX3N0cmVycm9yKGludCBjbWRsaW5lX2Vycm5vKTsKKworLyogZ2l0LmMgKi8KK3N0cnVjdCBzdGFydHVwX2luZm8geworCWludCBoYXZlX3JlcG9zaXRvcnk7CisJY29uc3QgY2hhciAqcHJlZml4OworfTsKK2V4dGVybiBzdHJ1Y3Qgc3RhcnR1cF9pbmZvICpzdGFydHVwX2luZm87CisKKy8qIGJ1aWx0aW4vbWVyZ2UuYyAqLworaW50IGNoZWNrb3V0X2Zhc3RfZm9yd2FyZChjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0byk7CisKK2ludCBzYW5lX2V4ZWN2cChjb25zdCBjaGFyICpmaWxlLCBjaGFyICpjb25zdCBhcmd2W10pOworCisjZW5kaWYgLyogQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvY2hlY2stYnVpbHRpbnMuc2ggYi9jaGVjay1idWlsdGlucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNmZlNmNmCi0tLSAvZGV2L251bGwKKysrIGIvY2hlY2stYnVpbHRpbnMuc2gKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK3sKKwljYXQgPDxcRU9GCitzYXlJdDoKKwkkKGZvcmVhY2ggYiwkKEJVSUxUX0lOUyksZWNobyBYWFggJGIgWVlZOykKK0VPRgorCWNhdCBNYWtlZmlsZQorfSB8CittYWtlIC1mIC0gc2F5SXQgMj4vZGV2L251bGwgfAorc2VkIC1uIC1lICdzLy4qWFhYIFwoLipcKSBZWVkuKi9cMS9wJyB8Citzb3J0IHwKK3sKKyAgICBiYWQ9MAorICAgIHdoaWxlIHJlYWQgYnVpbHRpbgorICAgIGRvCisJYmFzZT1gZXhwciAiJGJ1aWx0aW4iIDogJ2dpdC1cKC4qXCknYAorCXg9YHNlZCAtbmUgJ3MvLip7ICInJGJhc2UnIiwgXChjbWRfW14sIF0qXCkuKi8nJGJhc2UnCVwxL3AnIGdpdC5jYAorCWlmIHRlc3QgLXogIiR4IgorCXRoZW4KKwkJZWNobyAiJGJhc2UgaXMgYnVpbHRpbiBidXQgbm90IGxpc3RlZCBpbiBnaXQuYyBjb21tYW5kIGxpc3QiCisJCWJhZD0xCisJZmkKKwlmb3Igc2Z4IGluIHNoIHBlcmwgcHkKKwlkbworCQlpZiB0ZXN0IC1mICIkYnVpbHRpbi4kc2Z4IgorCQl0aGVuCisJCQllY2hvICIkYmFzZSBpcyBidWlsdGluIGJ1dCAkYnVpbHRpbi4kc2Z4IHN0aWxsIGV4aXN0cyIKKwkJCWJhZD0xCisJCWZpCisJZG9uZQorICAgIGRvbmUKKyAgICBleGl0ICRiYWQKK30KZGlmZiAtLWdpdCBhL2NoZWNrLXJhY3kuYyBiL2NoZWNrLXJhY3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGQ5MmExCi0tLSAvZGV2L251bGwKKysrIGIvY2hlY2stcmFjeS5jCkBAIC0wLDAgKzEsMjggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlpbnQgaTsKKwlpbnQgZGlydHksIGNsZWFuLCByYWN5OworCisJZGlydHkgPSBjbGVhbiA9IHJhY3kgPSAwOworCXJlYWRfY2FjaGUoKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJaWYgKGxzdGF0KGNlLT5uYW1lLCAmc3QpKSB7CisJCQllcnJvcigibHN0YXQoJXMpOiAlcyIsIGNlLT5uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY2VfbWF0Y2hfc3RhdChjZSwgJnN0LCAwKSkKKwkJCWRpcnR5Kys7CisJCWVsc2UgaWYgKGNlX21hdGNoX3N0YXQoY2UsICZzdCwgQ0VfTUFUQ0hfUkFDWV9JU19ESVJUWSkpCisJCQlyYWN5Kys7CisJCWVsc2UKKwkJCWNsZWFuKys7CisJfQorCXByaW50ZigiZGlydHkgJWQsIGNsZWFuICVkLCByYWN5ICVkXG4iLCBkaXJ0eSwgY2xlYW4sIHJhY3kpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY2hlY2tfYmluZGlyIGIvY2hlY2tfYmluZGlyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExYzRjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9jaGVja19iaW5kaXIKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL3NoCitiaW5kaXI9IiQxIgorZ2l0ZXhlY2Rpcj0iJDIiCitnaXRjbWQ9IiQzIgoraWYgdGVzdCAiJGJpbmRpciIgIT0gIiRnaXRleGVjZGlyIiAtYSAteCAiJGdpdGNtZCIKK3RoZW4KKwllY2hvCisJZWNobyAiISEgWW91IGhhdmUgaW5zdGFsbGVkIGdpdC0qIGNvbW1hbmRzIHRvIG5ldyBnaXRleGVjZGlyLiIKKwllY2hvICIhISBPbGQgdmVyc2lvbiBnaXQtKiBjb21tYW5kcyBzdGlsbCByZW1haW4gaW4gYmluZGlyLiIKKwllY2hvICIhISBNaXhpbmcgdHdvIHZlcnNpb25zIG9mIEdpdCB3aWxsIGxlYWQgdG8gcHJvYmxlbXMuIgorCWVjaG8gIiEhIFBsZWFzZSByZW1vdmUgb2xkIHZlcnNpb24gY29tbWFuZHMgaW4gYmluZGlyIG5vdy4iCisJZWNobworZmkKZGlmZiAtLWdpdCBhL2NvbG9yLmMgYi9jb2xvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTI2ODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xvci5jCkBAIC0wLDAgKzEsMjc3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorCitzdGF0aWMgaW50IGdpdF91c2VfY29sb3JfZGVmYXVsdCA9IDA7CitpbnQgY29sb3Jfc3Rkb3V0X2lzX3R0eSA9IC0xOworCisvKgorICogVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbHVtbiBjb2xvcnMuCisgKi8KK2NvbnN0IGNoYXIgKmNvbHVtbl9jb2xvcnNfYW5zaVtdID0geworCUdJVF9DT0xPUl9SRUQsCisJR0lUX0NPTE9SX0dSRUVOLAorCUdJVF9DT0xPUl9ZRUxMT1csCisJR0lUX0NPTE9SX0JMVUUsCisJR0lUX0NPTE9SX01BR0VOVEEsCisJR0lUX0NPTE9SX0NZQU4sCisJR0lUX0NPTE9SX0JPTERfUkVELAorCUdJVF9DT0xPUl9CT0xEX0dSRUVOLAorCUdJVF9DT0xPUl9CT0xEX1lFTExPVywKKwlHSVRfQ09MT1JfQk9MRF9CTFVFLAorCUdJVF9DT0xPUl9CT0xEX01BR0VOVEEsCisJR0lUX0NPTE9SX0JPTERfQ1lBTiwKKwlHSVRfQ09MT1JfUkVTRVQsCit9OworCisvKiBJZ25vcmUgdGhlIFJFU0VUIGF0IHRoZSBlbmQgd2hlbiBnaXZpbmcgdGhlIHNpemUgKi8KK2NvbnN0IGludCBjb2x1bW5fY29sb3JzX2Fuc2lfbWF4ID0gQVJSQVlfU0laRShjb2x1bW5fY29sb3JzX2Fuc2kpIC0gMTsKKworc3RhdGljIGludCBwYXJzZV9jb2xvcihjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY29sb3JfbmFtZXNbXSA9IHsKKwkJIm5vcm1hbCIsICJibGFjayIsICJyZWQiLCAiZ3JlZW4iLCAieWVsbG93IiwKKwkJImJsdWUiLCAibWFnZW50YSIsICJjeWFuIiwgIndoaXRlIgorCX07CisJY2hhciAqZW5kOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbG9yX25hbWVzKTsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnN0ciA9IGNvbG9yX25hbWVzW2ldOworCQlpZiAoIXN0cm5jYXNlY21wKG5hbWUsIHN0ciwgbGVuKSAmJiAhc3RyW2xlbl0pCisJCQlyZXR1cm4gaSAtIDE7CisJfQorCWkgPSBzdHJ0b2wobmFtZSwgJmVuZCwgMTApOworCWlmIChlbmQgLSBuYW1lID09IGxlbiAmJiBpID49IC0xICYmIGkgPD0gMjU1KQorCQlyZXR1cm4gaTsKKwlyZXR1cm4gLTI7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYXR0cihjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCXN0YXRpYyBjb25zdCBpbnQgYXR0cl92YWx1ZXNbXSA9IHsgMSwgMiwgNCwgNSwgNyB9OworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXR0cl9uYW1lc1tdID0geworCQkiYm9sZCIsICJkaW0iLCAidWwiLCAiYmxpbmsiLCAicmV2ZXJzZSIKKwl9OworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0dHJfbmFtZXMpOyBpKyspIHsKKwkJY29uc3QgY2hhciAqc3RyID0gYXR0cl9uYW1lc1tpXTsKKwkJaWYgKCFzdHJuY2FzZWNtcChuYW1lLCBzdHIsIGxlbikgJiYgIXN0cltsZW5dKQorCQkJcmV0dXJuIGF0dHJfdmFsdWVzW2ldOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgY29sb3JfcGFyc2UoY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IGNoYXIgKnZhciwgY2hhciAqZHN0KQoreworCWNvbG9yX3BhcnNlX21lbSh2YWx1ZSwgc3RybGVuKHZhbHVlKSwgdmFyLCBkc3QpOworfQorCit2b2lkIGNvbG9yX3BhcnNlX21lbShjb25zdCBjaGFyICp2YWx1ZSwgaW50IHZhbHVlX2xlbiwgY29uc3QgY2hhciAqdmFyLAorCQljaGFyICpkc3QpCit7CisJY29uc3QgY2hhciAqcHRyID0gdmFsdWU7CisJaW50IGxlbiA9IHZhbHVlX2xlbjsKKwl1bnNpZ25lZCBpbnQgYXR0ciA9IDA7CisJaW50IGZnID0gLTI7CisJaW50IGJnID0gLTI7CisKKwlpZiAoIXN0cm5jYXNlY21wKHZhbHVlLCAicmVzZXQiLCBsZW4pKSB7CisJCXN0cmNweShkc3QsIEdJVF9DT0xPUl9SRVNFVCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBbZmcgW2JnXV0gW2F0dHJdLi4uICovCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJY29uc3QgY2hhciAqd29yZCA9IHB0cjsKKwkJaW50IHZhbCwgd29yZGxlbiA9IDA7CisKKwkJd2hpbGUgKGxlbiA+IDAgJiYgIWlzc3BhY2Uod29yZFt3b3JkbGVuXSkpIHsKKwkJCXdvcmRsZW4rKzsKKwkJCWxlbi0tOworCQl9CisKKwkJcHRyID0gd29yZCArIHdvcmRsZW47CisJCXdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UoKnB0cikpIHsKKwkJCXB0cisrOworCQkJbGVuLS07CisJCX0KKworCQl2YWwgPSBwYXJzZV9jb2xvcih3b3JkLCB3b3JkbGVuKTsKKwkJaWYgKHZhbCA+PSAtMSkgeworCQkJaWYgKGZnID09IC0yKSB7CisJCQkJZmcgPSB2YWw7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoYmcgPT0gLTIpIHsKKwkJCQliZyA9IHZhbDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWdvdG8gYmFkOworCQl9CisJCXZhbCA9IHBhcnNlX2F0dHIod29yZCwgd29yZGxlbik7CisJCWlmICgwIDw9IHZhbCkKKwkJCWF0dHIgfD0gKDEgPDwgdmFsKTsKKwkJZWxzZQorCQkJZ290byBiYWQ7CisJfQorCisJaWYgKGF0dHIgfHwgZmcgPj0gMCB8fCBiZyA+PSAwKSB7CisJCWludCBzZXAgPSAwOworCQlpbnQgaTsKKworCQkqZHN0KysgPSAnXDAzMyc7CisJCSpkc3QrKyA9ICdbJzsKKworCQlmb3IgKGkgPSAwOyBhdHRyOyBpKyspIHsKKwkJCXVuc2lnbmVkIGJpdCA9ICgxIDw8IGkpOworCQkJaWYgKCEoYXR0ciAmIGJpdCkpCisJCQkJY29udGludWU7CisJCQlhdHRyICY9IH5iaXQ7CisJCQlpZiAoc2VwKyspCisJCQkJKmRzdCsrID0gJzsnOworCQkJKmRzdCsrID0gJzAnICsgaTsKKwkJfQorCQlpZiAoZmcgPj0gMCkgeworCQkJaWYgKHNlcCsrKQorCQkJCSpkc3QrKyA9ICc7JzsKKwkJCWlmIChmZyA8IDgpIHsKKwkJCQkqZHN0KysgPSAnMyc7CisJCQkJKmRzdCsrID0gJzAnICsgZmc7CisJCQl9IGVsc2UgeworCQkJCWRzdCArPSBzcHJpbnRmKGRzdCwgIjM4OzU7JWQiLCBmZyk7CisJCQl9CisJCX0KKwkJaWYgKGJnID49IDApIHsKKwkJCWlmIChzZXArKykKKwkJCQkqZHN0KysgPSAnOyc7CisJCQlpZiAoYmcgPCA4KSB7CisJCQkJKmRzdCsrID0gJzQnOworCQkJCSpkc3QrKyA9ICcwJyArIGJnOworCQkJfSBlbHNlIHsKKwkJCQlkc3QgKz0gc3ByaW50Zihkc3QsICI0ODs1OyVkIiwgYmcpOworCQkJfQorCQl9CisJCSpkc3QrKyA9ICdtJzsKKwl9CisJKmRzdCA9IDA7CisJcmV0dXJuOworYmFkOgorCWRpZSgiYmFkIGNvbG9yIHZhbHVlICclLipzJyBmb3IgdmFyaWFibGUgJyVzJyIsIHZhbHVlX2xlbiwgdmFsdWUsIHZhcik7Cit9CisKK2ludCBnaXRfY29uZmlnX2NvbG9yYm9vbChjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICh2YWx1ZSkgeworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJuZXZlciIpKQorCQkJcmV0dXJuIDA7CisJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImFsd2F5cyIpKQorCQkJcmV0dXJuIDE7CisJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImF1dG8iKSkKKwkJCXJldHVybiBHSVRfQ09MT1JfQVVUTzsKKwl9CisKKwlpZiAoIXZhcikKKwkJcmV0dXJuIC0xOworCisJLyogTWlzc2luZyBvciBleHBsaWNpdCBmYWxzZSB0byB0dXJuIG9mZiBjb2xvcml6YXRpb24gKi8KKwlpZiAoIWdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBhbnkgbm9ybWFsIHRydXRoIHZhbHVlIGRlZmF1bHRzIHRvICdhdXRvJyAqLworCXJldHVybiBHSVRfQ09MT1JfQVVUTzsKK30KKworc3RhdGljIGludCBjaGVja19hdXRvX2NvbG9yKHZvaWQpCit7CisJaWYgKGNvbG9yX3N0ZG91dF9pc190dHkgPCAwKQorCQljb2xvcl9zdGRvdXRfaXNfdHR5ID0gaXNhdHR5KDEpOworCWlmIChjb2xvcl9zdGRvdXRfaXNfdHR5IHx8IChwYWdlcl9pbl91c2UoKSAmJiBwYWdlcl91c2VfY29sb3IpKSB7CisJCWNoYXIgKnRlcm0gPSBnZXRlbnYoIlRFUk0iKTsKKwkJaWYgKHRlcm0gJiYgc3RyY21wKHRlcm0sICJkdW1iIikpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCB3YW50X2NvbG9yKGludCB2YXIpCit7CisJc3RhdGljIGludCB3YW50X2F1dG8gPSAtMTsKKworCWlmICh2YXIgPCAwKQorCQl2YXIgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CisKKwlpZiAodmFyID09IEdJVF9DT0xPUl9BVVRPKSB7CisJCWlmICh3YW50X2F1dG8gPCAwKQorCQkJd2FudF9hdXRvID0gY2hlY2tfYXV0b19jb2xvcigpOworCQlyZXR1cm4gd2FudF9hdXRvOworCX0KKwlyZXR1cm4gdmFyOworfQorCitpbnQgZ2l0X2NvbG9yX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJjb2xvci51aSIpKSB7CisJCWdpdF91c2VfY29sb3JfZGVmYXVsdCA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoZ2l0X2NvbG9yX2NvbmZpZyh2YXIsIHZhbHVlLCBjYikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKwordm9pZCBjb2xvcl9wcmludF9zdHJidWYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpZiAoKmNvbG9yKQorCQlmcHJpbnRmKGZwLCAiJXMiLCBjb2xvcik7CisJZnByaW50ZihmcCwgIiVzIiwgc2ItPmJ1Zik7CisJaWYgKCpjb2xvcikKKwkJZnByaW50ZihmcCwgIiVzIiwgR0lUX0NPTE9SX1JFU0VUKTsKK30KKworc3RhdGljIGludCBjb2xvcl92ZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwKKwkJdmFfbGlzdCBhcmdzLCBjb25zdCBjaGFyICp0cmFpbCkKK3sKKwlpbnQgciA9IDA7CisKKwlpZiAoKmNvbG9yKQorCQlyICs9IGZwcmludGYoZnAsICIlcyIsIGNvbG9yKTsKKwlyICs9IHZmcHJpbnRmKGZwLCBmbXQsIGFyZ3MpOworCWlmICgqY29sb3IpCisJCXIgKz0gZnByaW50ZihmcCwgIiVzIiwgR0lUX0NPTE9SX1JFU0VUKTsKKwlpZiAodHJhaWwpCisJCXIgKz0gZnByaW50ZihmcCwgIiVzIiwgdHJhaWwpOworCXJldHVybiByOworfQorCisKKworaW50IGNvbG9yX2ZwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IHI7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlyID0gY29sb3JfdmZwcmludGYoZnAsIGNvbG9yLCBmbXQsIGFyZ3MsIE5VTEwpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gcjsKK30KKworaW50IGNvbG9yX2ZwcmludGZfbG4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IHI7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlyID0gY29sb3JfdmZwcmludGYoZnAsIGNvbG9yLCBmbXQsIGFyZ3MsICJcbiIpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gcjsKK30KKworaW50IGNvbG9yX2lzX25pbChjb25zdCBjaGFyICpjKQoreworCXJldHVybiAhc3RyY21wKGMsICJOSUwiKTsKK30KZGlmZiAtLWdpdCBhL2NvbG9yLmggYi9jb2xvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhODQ5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xvci5oCkBAIC0wLDAgKzEsOTAgQEAKKyNpZm5kZWYgQ09MT1JfSAorI2RlZmluZSBDT0xPUl9ICisKK3N0cnVjdCBzdHJidWY7CisKKy8qICAyICsgKDIgKiBudW1fYXR0cnMpICsgOCArIDEgKyA4ICsgJ20nICsgTlVMICovCisvKiAiXDAzM1sxOzI7NDs1Ozc7Mzg7NTsyeHg7NDg7NTsyeHhtXDAiICovCisvKgorICogVGhlIG1heGltdW0gbGVuZ3RoIG9mIEFOU0kgY29sb3Igc2VxdWVuY2Ugd2Ugd291bGQgZ2VuZXJhdGU6CisgKiAtIGxlYWRpbmcgRVNDICdbJyAgICAgICAgICAgIDIKKyAqIC0gYXR0ciArICc7JyAgICAgICAgICAgICAgICAgMiAqIDggKGUuZy4gIjE7IikKKyAqIC0gZmcgY29sb3IgKyAnOycgICAgICAgICAgICAgOSAoZS5nLiAiMzg7NTsyeHg7IikKKyAqIC0gZmcgY29sb3IgKyAnOycgICAgICAgICAgICAgOSAoZS5nLiAiNDg7NTsyeHg7IikKKyAqIC0gdGVybWluYXRpbmcgJ20nIE5VTCAgICAgICAgMgorICoKKyAqIFRoZSBhYm92ZSBvdmVyY291bnRzIGF0dHIgKHdlIG9ubHkgdXNlIDUgbm90IDgpIGFuZCBvbmUgc2VtaWNvbG9uCisgKiBidXQgaXQgaXMgY2xvc2UgZW5vdWdoLgorICovCisjZGVmaW5lIENPTE9SX01BWExFTiA0MAorCisvKgorICogSU1QT1JUQU5UOiBEdWUgdG8gdGhlIHdheSB0aGVzZSBjb2xvciBjb2RlcyBhcmUgZW11bGF0ZWQgb24gV2luZG93cywKKyAqIHdyaXRlIHRoZW0gb25seSB1c2luZyBwcmludGYoKSwgZnByaW50ZigpLCBhbmQgZnB1dHMoKS4gSW4gcGFydGljdWxhciwKKyAqIGRvIG5vdCB1c2UgcHV0cygpIG9yIHdyaXRlKCkuCisgKi8KKyNkZWZpbmUgR0lUX0NPTE9SX05PUk1BTAkiIgorI2RlZmluZSBHSVRfQ09MT1JfUkVTRVQJCSJcMDMzW20iCisjZGVmaW5lIEdJVF9DT0xPUl9CT0xECQkiXDAzM1sxbSIKKyNkZWZpbmUgR0lUX0NPTE9SX1JFRAkJIlwwMzNbMzFtIgorI2RlZmluZSBHSVRfQ09MT1JfR1JFRU4JCSJcMDMzWzMybSIKKyNkZWZpbmUgR0lUX0NPTE9SX1lFTExPVwkiXDAzM1szM20iCisjZGVmaW5lIEdJVF9DT0xPUl9CTFVFCQkiXDAzM1szNG0iCisjZGVmaW5lIEdJVF9DT0xPUl9NQUdFTlRBCSJcMDMzWzM1bSIKKyNkZWZpbmUgR0lUX0NPTE9SX0NZQU4JCSJcMDMzWzM2bSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JPTERfUkVECSJcMDMzWzE7MzFtIgorI2RlZmluZSBHSVRfQ09MT1JfQk9MRF9HUkVFTgkiXDAzM1sxOzMybSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JPTERfWUVMTE9XCSJcMDMzWzE7MzNtIgorI2RlZmluZSBHSVRfQ09MT1JfQk9MRF9CTFVFCSJcMDMzWzE7MzRtIgorI2RlZmluZSBHSVRfQ09MT1JfQk9MRF9NQUdFTlRBCSJcMDMzWzE7MzVtIgorI2RlZmluZSBHSVRfQ09MT1JfQk9MRF9DWUFOCSJcMDMzWzE7MzZtIgorI2RlZmluZSBHSVRfQ09MT1JfQkdfUkVECSJcMDMzWzQxbSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JHX0dSRUVOCSJcMDMzWzQybSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JHX1lFTExPVwkiXDAzM1s0M20iCisjZGVmaW5lIEdJVF9DT0xPUl9CR19CTFVFCSJcMDMzWzQ0bSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JHX01BR0VOVEEJIlwwMzNbNDVtIgorI2RlZmluZSBHSVRfQ09MT1JfQkdfQ1lBTgkiXDAzM1s0Nm0iCisKKy8qIEEgc3BlY2lhbCB2YWx1ZSBtZWFuaW5nICJubyBjb2xvciBzZWxlY3RlZCIgKi8KKyNkZWZpbmUgR0lUX0NPTE9SX05JTCAiTklMIgorCisvKgorICogVGhlIGZpcnN0IHRocmVlIGFyZSBjaG9zZW4gdG8gbWF0Y2ggY29tbW9uIHVzYWdlIGluIHRoZSBjb2RlLCBhbmQgd2hhdCBpcworICogcmV0dXJuZWQgZnJvbSBnaXRfY29uZmlnX2NvbG9yYm9vbC4gVGhlICJhdXRvIiB2YWx1ZSBjYW4gYmUgcmV0dXJuZWQgZnJvbQorICogY29uZmlnX2NvbG9yYm9vbCwgYW5kIHdpbGwgYmUgY29udmVydGVkIGJ5IHdhbnRfY29sb3IoKSBpbnRvIGVpdGhlciAwIG9yIDEuCisgKi8KKyNkZWZpbmUgR0lUX0NPTE9SX1VOS05PV04gLTEKKyNkZWZpbmUgR0lUX0NPTE9SX05FVkVSICAwCisjZGVmaW5lIEdJVF9DT0xPUl9BTFdBWVMgMQorI2RlZmluZSBHSVRfQ09MT1JfQVVUTyAgIDIKKworLyogQSBkZWZhdWx0IGxpc3Qgb2YgY29sb3JzIHRvIHVzZSBmb3IgY29tbWl0IGdyYXBocyBhbmQgc2hvdy1icmFuY2ggb3V0cHV0ICovCitleHRlcm4gY29uc3QgY2hhciAqY29sdW1uX2NvbG9yc19hbnNpW107CitleHRlcm4gY29uc3QgaW50IGNvbHVtbl9jb2xvcnNfYW5zaV9tYXg7CisKKy8qCisgKiBHZW5lcmFsbHkgdGhlIGNvbG9yIGNvZGUgd2lsbCBsYXppbHkgZmlndXJlIHRoaXMgb3V0IGl0c2VsZiwgYnV0CisgKiB0aGlzIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciBjYWxsZXJzIHRvIG92ZXJyaWRlIGF1dG9kZXRlY3Rpb24uCisgKi8KK2V4dGVybiBpbnQgY29sb3Jfc3Rkb3V0X2lzX3R0eTsKKworLyoKKyAqIFVzZSB0aGUgZmlyc3Qgb25lIGlmIHlvdSBuZWVkIG9ubHkgY29sb3IgY29uZmlnOyB0aGUgc2Vjb25kIGlzIGEgY29udmVuaWVuY2UKKyAqIGlmIHlvdSBhcmUganVzdCBnb2luZyB0byBjaGFuZ2UgdG8gZ2l0X2RlZmF1bHRfY29uZmlnLCB0b28uCisgKi8KK2ludCBnaXRfY29sb3JfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKK2ludCBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworCitpbnQgZ2l0X2NvbmZpZ19jb2xvcmJvb2woY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CitpbnQgd2FudF9jb2xvcihpbnQgdmFyKTsKK3ZvaWQgY29sb3JfcGFyc2UoY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IGNoYXIgKnZhciwgY2hhciAqZHN0KTsKK3ZvaWQgY29sb3JfcGFyc2VfbWVtKGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgbGVuLCBjb25zdCBjaGFyICp2YXIsIGNoYXIgKmRzdCk7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQoraW50IGNvbG9yX2ZwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQoraW50IGNvbG9yX2ZwcmludGZfbG4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIGNvbG9yX3ByaW50X3N0cmJ1ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiKTsKKworaW50IGNvbG9yX2lzX25pbChjb25zdCBjaGFyICpjb2xvcik7CisKKyNlbmRpZiAvKiBDT0xPUl9IICovCmRpZmYgLS1naXQgYS9jb2x1bW4uYyBiL2NvbHVtbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNjdiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb2x1bW4uYwpAQCAtMCwwICsxLDQzNCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKKyNkZWZpbmUgWFkyTElORUFSKGQsIHgsIHkpIChDT0xfTEFZT1VUKChkKS0+Y29sb3B0cykgPT0gQ09MX0NPTFVNTiA/IFwKKwkJCSAgICAoeCkgKiAoZCktPnJvd3MgKyAoeSkgOiBcCisJCQkgICAgKHkpICogKGQpLT5jb2xzICsgKHgpKQorCitzdHJ1Y3QgY29sdW1uX2RhdGEgeworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKKwl1bnNpZ25lZCBpbnQgY29sb3B0czsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgb3B0czsKKworCWludCByb3dzLCBjb2xzOworCWludCAqbGVuOwkJLyogY2VsbCBsZW5ndGggKi8KKwlpbnQgKndpZHRoOwkgICAgICAvKiBpbmRleCB0byB0aGUgbG9uZ2VzdCByb3cgaW4gY29sdW1uICovCit9OworCisvKiByZXR1cm4gbGVuZ3RoIG9mICdzJyBpbiBsZXR0ZXJzLCBBTlNJIGVzY2FwZXMgc3RyaXBwZWQgKi8KK3N0YXRpYyBpbnQgaXRlbV9sZW5ndGgodW5zaWduZWQgaW50IGNvbG9wdHMsIGNvbnN0IGNoYXIgKnMpCit7CisJaW50IGxlbiwgaSA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRzdHIoJnN0ciwgcyk7CisJd2hpbGUgKChzID0gc3Ryc3RyKHN0ci5idWYgKyBpLCAiXDAzM1siKSkgIT0gTlVMTCkgeworCQlpbnQgbGVuID0gc3Ryc3BuKHMgKyAyLCAiMDEyMzQ1Njc4OTsiKTsKKwkJaSA9IHMgLSBzdHIuYnVmOworCQlzdHJidWZfcmVtb3ZlKCZzdHIsIGksIGxlbiArIDMpOyAvKiBcMDMzWzxsZW4+PGZ1bmMgY2hhcj4gKi8KKwl9CisJbGVuID0gdXRmOF9zdHJ3aWR0aChzdHIuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc3RyKTsKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogQ2FsY3VsYXRlIGNlbGwgd2lkdGgsIHJvd3MgYW5kIGNvbHMgZm9yIGEgdGFibGUgb2YgZXF1YWwgY2VsbHMsIGdpdmVuCisgKiB0YWJsZSB3aWR0aCBhbmQgaG93IG1hbnkgc3BhY2VzIGJldHdlZW4gY2VsbHMuCisgKi8KK3N0YXRpYyB2b2lkIGxheW91dChzdHJ1Y3QgY29sdW1uX2RhdGEgKmRhdGEsIGludCAqd2lkdGgpCit7CisJaW50IGk7CisKKwkqd2lkdGggPSAwOworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5saXN0LT5ucjsgaSsrKQorCQlpZiAoKndpZHRoIDwgZGF0YS0+bGVuW2ldKQorCQkJKndpZHRoID0gZGF0YS0+bGVuW2ldOworCisJKndpZHRoICs9IGRhdGEtPm9wdHMucGFkZGluZzsKKworCWRhdGEtPmNvbHMgPSAoZGF0YS0+b3B0cy53aWR0aCAtIHN0cmxlbihkYXRhLT5vcHRzLmluZGVudCkpIC8gKndpZHRoOworCWlmIChkYXRhLT5jb2xzID09IDApCisJCWRhdGEtPmNvbHMgPSAxOworCisJZGF0YS0+cm93cyA9IERJVl9ST1VORF9VUChkYXRhLT5saXN0LT5uciwgZGF0YS0+Y29scyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVfY29sdW1uX3dpZHRoKHN0cnVjdCBjb2x1bW5fZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSwgeCwgeTsKKwlmb3IgKHggPSAwOyB4IDwgZGF0YS0+Y29sczsgeCsrKSB7CisJCWRhdGEtPndpZHRoW3hdID0gWFkyTElORUFSKGRhdGEsIHgsIDApOworCQlmb3IgKHkgPSAwOyB5IDwgZGF0YS0+cm93czsgeSsrKSB7CisJCQlpID0gWFkyTElORUFSKGRhdGEsIHgsIHkpOworCQkJaWYgKGkgPCBkYXRhLT5saXN0LT5uciAmJgorCQkJICAgIGRhdGEtPmxlbltkYXRhLT53aWR0aFt4XV0gPCBkYXRhLT5sZW5baV0pCisJCQkJZGF0YS0+d2lkdGhbeF0gPSBpOworCQl9CisJfQorfQorCisvKgorICogU2hyaW5rIGFsbCBjb2x1bW5zIGJ5IHNob3J0ZW5pbmcgdGhlbSBvbmUgcm93IGVhY2ggdGltZSAoYW5kIGFkZGluZworICogbW9yZSBjb2x1bW5zIGFsb25nIHRoZSB3YXkpLiBIb3BlZnVsbHkgdGhlIGxvbmdlc3QgY2VsbCB3aWxsIGJlCisgKiBtb3ZlZCB0byB0aGUgbmV4dCBjb2x1bW4sIGNvbHVtbiBpcyBzaHJ1bmsgc28gd2UgaGF2ZSBtb3JlIHNwYWNlCisgKiBmb3IgbmV3IGNvbHVtbnMuIFRoZSBwcm9jZXNzIGVuZHMgd2hlbiB0aGUgd2hvbGUgdGhpbmcgbm8gbG9uZ2VyCisgKiBmaXRzIGluIGRhdGEtPnRvdGFsX3dpZHRoLgorICovCitzdGF0aWMgdm9pZCBzaHJpbmtfY29sdW1ucyhzdHJ1Y3QgY29sdW1uX2RhdGEgKmRhdGEpCit7CisJZGF0YS0+d2lkdGggPSB4cmVhbGxvYyhkYXRhLT53aWR0aCwKKwkJCSAgICAgICBzaXplb2YoKmRhdGEtPndpZHRoKSAqIGRhdGEtPmNvbHMpOworCXdoaWxlIChkYXRhLT5yb3dzID4gMSkgeworCQlpbnQgeCwgdG90YWxfd2lkdGgsIGNvbHMsIHJvd3M7CisJCXJvd3MgPSBkYXRhLT5yb3dzOworCQljb2xzID0gZGF0YS0+Y29sczsKKworCQlkYXRhLT5yb3dzLS07CisJCWRhdGEtPmNvbHMgPSBESVZfUk9VTkRfVVAoZGF0YS0+bGlzdC0+bnIsIGRhdGEtPnJvd3MpOworCQlpZiAoZGF0YS0+Y29scyAhPSBjb2xzKQorCQkJZGF0YS0+d2lkdGggPSB4cmVhbGxvYyhkYXRhLT53aWR0aCwKKwkJCQkJICAgICAgIHNpemVvZigqZGF0YS0+d2lkdGgpICogZGF0YS0+Y29scyk7CisJCWNvbXB1dGVfY29sdW1uX3dpZHRoKGRhdGEpOworCisJCXRvdGFsX3dpZHRoID0gc3RybGVuKGRhdGEtPm9wdHMuaW5kZW50KTsKKwkJZm9yICh4ID0gMDsgeCA8IGRhdGEtPmNvbHM7IHgrKykgeworCQkJdG90YWxfd2lkdGggKz0gZGF0YS0+bGVuW2RhdGEtPndpZHRoW3hdXTsKKwkJCXRvdGFsX3dpZHRoICs9IGRhdGEtPm9wdHMucGFkZGluZzsKKwkJfQorCQlpZiAodG90YWxfd2lkdGggPiBkYXRhLT5vcHRzLndpZHRoKSB7CisJCQlkYXRhLT5yb3dzID0gcm93czsKKwkJCWRhdGEtPmNvbHMgPSBjb2xzOworCQkJYnJlYWs7CisJCX0KKwl9CisJY29tcHV0ZV9jb2x1bW5fd2lkdGgoZGF0YSk7Cit9CisKKy8qIERpc3BsYXkgd2l0aG91dCBsYXlvdXQgd2hlbiBub3QgZW5hYmxlZCAqLworc3RhdGljIHZvaWQgZGlzcGxheV9wbGFpbihjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQkgIGNvbnN0IGNoYXIgKmluZGVudCwgY29uc3QgY2hhciAqbmwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykKKwkJcHJpbnRmKCIlcyVzJXMiLCBpbmRlbnQsIGxpc3QtPml0ZW1zW2ldLnN0cmluZywgbmwpOworfQorCisvKiBQcmludCBhIGNlbGwgdG8gc3Rkb3V0IHdpdGggYWxsIG5lY2Vzc2FyeSBsZWFkaW5nL3RyYWxpbmcgc3BhY2UgKi8KK3N0YXRpYyBpbnQgZGlzcGxheV9jZWxsKHN0cnVjdCBjb2x1bW5fZGF0YSAqZGF0YSwgaW50IGluaXRpYWxfd2lkdGgsCisJCQljb25zdCBjaGFyICplbXB0eV9jZWxsLCBpbnQgeCwgaW50IHkpCit7CisJaW50IGksIGxlbiwgbmV3bGluZTsKKworCWkgPSBYWTJMSU5FQVIoZGF0YSwgeCwgeSk7CisJaWYgKGkgPj0gZGF0YS0+bGlzdC0+bnIpCisJCXJldHVybiAtMTsKKworCWxlbiA9IGRhdGEtPmxlbltpXTsKKwlpZiAoZGF0YS0+d2lkdGggJiYgZGF0YS0+bGVuW2RhdGEtPndpZHRoW3hdXSA8IGluaXRpYWxfd2lkdGgpIHsKKwkJLyoKKwkJICogZW1wdHlfY2VsbCBoYXMgaW5pdGlhbF93aWR0aCBjaGFycywgaWYgcmVhbCBjb2x1bW4KKwkJICogaXMgbmFycm93ZXIsIGluY3JlYXNlIGxlbiBhIGJpdCBzbyB3ZSBmaWxsIGxlc3MKKwkJICogc3BhY2UuCisJCSAqLworCQlsZW4gKz0gaW5pdGlhbF93aWR0aCAtIGRhdGEtPmxlbltkYXRhLT53aWR0aFt4XV07CisJCWxlbiAtPSBkYXRhLT5vcHRzLnBhZGRpbmc7CisJfQorCisJaWYgKENPTF9MQVlPVVQoZGF0YS0+Y29sb3B0cykgPT0gQ09MX0NPTFVNTikKKwkJbmV3bGluZSA9IGkgKyBkYXRhLT5yb3dzID49IGRhdGEtPmxpc3QtPm5yOworCWVsc2UKKwkJbmV3bGluZSA9IHggPT0gZGF0YS0+Y29scyAtIDEgfHwgaSA9PSBkYXRhLT5saXN0LT5uciAtIDE7CisKKwlwcmludGYoIiVzJXMlcyIsCisJICAgICAgIHggPT0gMCA/IGRhdGEtPm9wdHMuaW5kZW50IDogIiIsCisJICAgICAgIGRhdGEtPmxpc3QtPml0ZW1zW2ldLnN0cmluZywKKwkgICAgICAgbmV3bGluZSA/IGRhdGEtPm9wdHMubmwgOiBlbXB0eV9jZWxsICsgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworLyogRGlzcGxheSBDT0xfQ09MVU1OIG9yIENPTF9ST1cgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfdGFibGUoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJICB1bnNpZ25lZCBpbnQgY29sb3B0cywKKwkJCSAgY29uc3Qgc3RydWN0IGNvbHVtbl9vcHRpb25zICpvcHRzKQoreworCXN0cnVjdCBjb2x1bW5fZGF0YSBkYXRhOworCWludCB4LCB5LCBpLCBpbml0aWFsX3dpZHRoOworCWNoYXIgKmVtcHR5X2NlbGw7CisKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJZGF0YS5saXN0ID0gbGlzdDsKKwlkYXRhLmNvbG9wdHMgPSBjb2xvcHRzOworCWRhdGEub3B0cyA9ICpvcHRzOworCisJZGF0YS5sZW4gPSB4bWFsbG9jKHNpemVvZigqZGF0YS5sZW4pICogbGlzdC0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQlkYXRhLmxlbltpXSA9IGl0ZW1fbGVuZ3RoKGNvbG9wdHMsIGxpc3QtPml0ZW1zW2ldLnN0cmluZyk7CisKKwlsYXlvdXQoJmRhdGEsICZpbml0aWFsX3dpZHRoKTsKKworCWlmIChjb2xvcHRzICYgQ09MX0RFTlNFKQorCQlzaHJpbmtfY29sdW1ucygmZGF0YSk7CisKKwllbXB0eV9jZWxsID0geG1hbGxvYyhpbml0aWFsX3dpZHRoICsgMSk7CisJbWVtc2V0KGVtcHR5X2NlbGwsICcgJywgaW5pdGlhbF93aWR0aCk7CisJZW1wdHlfY2VsbFtpbml0aWFsX3dpZHRoXSA9ICdcMCc7CisJZm9yICh5ID0gMDsgeSA8IGRhdGEucm93czsgeSsrKSB7CisJCWZvciAoeCA9IDA7IHggPCBkYXRhLmNvbHM7IHgrKykKKwkJCWlmIChkaXNwbGF5X2NlbGwoJmRhdGEsIGluaXRpYWxfd2lkdGgsIGVtcHR5X2NlbGwsIHgsIHkpKQorCQkJCWJyZWFrOworCX0KKworCWZyZWUoZGF0YS5sZW4pOworCWZyZWUoZGF0YS53aWR0aCk7CisJZnJlZShlbXB0eV9jZWxsKTsKK30KKwordm9pZCBwcmludF9jb2x1bW5zKGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgdW5zaWduZWQgaW50IGNvbG9wdHMsCisJCSAgIGNvbnN0IHN0cnVjdCBjb2x1bW5fb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgbm9wdHM7CisKKwlpZiAoIWxpc3QtPm5yKQorCQlyZXR1cm47CisJYXNzZXJ0KChjb2xvcHRzICYgQ09MX0VOQUJMRV9NQVNLKSAhPSBDT0xfQVVUTyk7CisKKwltZW1zZXQoJm5vcHRzLCAwLCBzaXplb2Yobm9wdHMpKTsKKwlub3B0cy5pbmRlbnQgPSBvcHRzICYmIG9wdHMtPmluZGVudCA/IG9wdHMtPmluZGVudCA6ICIiOworCW5vcHRzLm5sID0gb3B0cyAmJiBvcHRzLT5ubCA/IG9wdHMtPm5sIDogIlxuIjsKKwlub3B0cy5wYWRkaW5nID0gb3B0cyA/IG9wdHMtPnBhZGRpbmcgOiAxOworCW5vcHRzLndpZHRoID0gb3B0cyAmJiBvcHRzLT53aWR0aCA/IG9wdHMtPndpZHRoIDogdGVybV9jb2x1bW5zKCkgLSAxOworCWlmICghY29sdW1uX2FjdGl2ZShjb2xvcHRzKSkgeworCQlkaXNwbGF5X3BsYWluKGxpc3QsICIiLCAiXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzd2l0Y2ggKENPTF9MQVlPVVQoY29sb3B0cykpIHsKKwljYXNlIENPTF9QTEFJTjoKKwkJZGlzcGxheV9wbGFpbihsaXN0LCBub3B0cy5pbmRlbnQsIG5vcHRzLm5sKTsKKwkJYnJlYWs7CisJY2FzZSBDT0xfUk9XOgorCWNhc2UgQ09MX0NPTFVNTjoKKwkJZGlzcGxheV90YWJsZShsaXN0LCBjb2xvcHRzLCAmbm9wdHMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoIkJVRzogaW52YWxpZCBsYXlvdXQgbW9kZSAlZCIsIENPTF9MQVlPVVQoY29sb3B0cykpOworCX0KK30KKworaW50IGZpbmFsaXplX2NvbG9wdHModW5zaWduZWQgaW50ICpjb2xvcHRzLCBpbnQgc3Rkb3V0X2lzX3R0eSkKK3sKKwlpZiAoKCpjb2xvcHRzICYgQ09MX0VOQUJMRV9NQVNLKSA9PSBDT0xfQVVUTykgeworCQlpZiAoc3Rkb3V0X2lzX3R0eSA8IDApCisJCQlzdGRvdXRfaXNfdHR5ID0gaXNhdHR5KDEpOworCQkqY29sb3B0cyAmPSB+Q09MX0VOQUJMRV9NQVNLOworCQlpZiAoc3Rkb3V0X2lzX3R0eSkKKwkJCSpjb2xvcHRzIHw9IENPTF9FTkFCTEVEOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNvbG9wdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJdW5zaWduZWQgaW50IG1hc2s7Cit9OworCisjZGVmaW5lIExBWU9VVF9TRVQgMQorI2RlZmluZSBFTkFCTEVfU0VUIDIKKworc3RhdGljIGludCBwYXJzZV9vcHRpb24oY29uc3QgY2hhciAqYXJnLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgKmNvbG9wdHMsCisJCQlpbnQgKmdyb3VwX3NldCkKK3sKKwlzdHJ1Y3QgY29sb3B0IG9wdHNbXSA9IHsKKwkJeyAiYWx3YXlzIiwgQ09MX0VOQUJMRUQsICBDT0xfRU5BQkxFX01BU0sgfSwKKwkJeyAibmV2ZXIiLCAgQ09MX0RJU0FCTEVELCBDT0xfRU5BQkxFX01BU0sgfSwKKwkJeyAiYXV0byIsICAgQ09MX0FVVE8sICAgICBDT0xfRU5BQkxFX01BU0sgfSwKKwkJeyAicGxhaW4iLCAgQ09MX1BMQUlOLCAgICBDT0xfTEFZT1VUX01BU0sgfSwKKwkJeyAiY29sdW1uIiwgQ09MX0NPTFVNTiwgICBDT0xfTEFZT1VUX01BU0sgfSwKKwkJeyAicm93IiwgICAgQ09MX1JPVywgICAgICBDT0xfTEFZT1VUX01BU0sgfSwKKwkJeyAiZGVuc2UiLCAgQ09MX0RFTlNFLCAgICAwIH0sCisJfTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9wdHMpOyBpKyspIHsKKwkJaW50IHNldCA9IDEsIGFyZ19sZW4gPSBsZW4sIG5hbWVfbGVuOworCQljb25zdCBjaGFyICphcmdfc3RyID0gYXJnOworCisJCWlmICghb3B0c1tpXS5tYXNrKSB7CisJCQlpZiAoYXJnX2xlbiA+IDIgJiYgIXN0cm5jbXAoYXJnX3N0ciwgIm5vIiwgMikpIHsKKwkJCQlhcmdfc3RyICs9IDI7CisJCQkJYXJnX2xlbiAtPSAyOworCQkJCXNldCA9IDA7CisJCQl9CisJCX0KKworCQluYW1lX2xlbiA9IHN0cmxlbihvcHRzW2ldLm5hbWUpOworCQlpZiAoYXJnX2xlbiAhPSBuYW1lX2xlbiB8fAorCQkgICAgc3RybmNtcChhcmdfc3RyLCBvcHRzW2ldLm5hbWUsIG5hbWVfbGVuKSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAob3B0c1tpXS5tYXNrKSB7CisJCWNhc2UgQ09MX0VOQUJMRV9NQVNLOgorCQkJKmdyb3VwX3NldCB8PSBFTkFCTEVfU0VUOworCQkJYnJlYWs7CisJCWNhc2UgQ09MX0xBWU9VVF9NQVNLOgorCQkJKmdyb3VwX3NldCB8PSBMQVlPVVRfU0VUOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAob3B0c1tpXS5tYXNrKQorCQkJKmNvbG9wdHMgPSAoKmNvbG9wdHMgJiB+b3B0c1tpXS5tYXNrKSB8IG9wdHNbaV0udmFsdWU7CisJCWVsc2UgeworCQkJaWYgKHNldCkKKwkJCQkqY29sb3B0cyB8PSBvcHRzW2ldLnZhbHVlOworCQkJZWxzZQorCQkJCSpjb2xvcHRzICY9IH5vcHRzW2ldLnZhbHVlOworCQl9CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBlcnJvcigidW5zdXBwb3J0ZWQgb3B0aW9uICclcyciLCBhcmcpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2NvbmZpZyh1bnNpZ25lZCBpbnQgKmNvbG9wdHMsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNvbnN0IGNoYXIgKnNlcCA9ICIgLCI7CisJaW50IGdyb3VwX3NldCA9IDA7CisKKwl3aGlsZSAoKnZhbHVlKSB7CisJCWludCBsZW4gPSBzdHJjc3BuKHZhbHVlLCBzZXApOworCQlpZiAobGVuKSB7CisJCQlpZiAocGFyc2Vfb3B0aW9uKHZhbHVlLCBsZW4sIGNvbG9wdHMsICZncm91cF9zZXQpKQorCQkJCXJldHVybiAtMTsKKworCQkJdmFsdWUgKz0gbGVuOworCQl9CisJCXZhbHVlICs9IHN0cnNwbih2YWx1ZSwgc2VwKTsKKwl9CisJLyoKKwkgKiBTZXR0aW5nIGxheW91dCBpbXBsaWVzICJhbHdheXMiIGlmIG5laXRoZXIgYWx3YXlzLCBuZXZlcgorCSAqIG5vciBhdXRvIGlzIHNwZWNpZmllZC4KKwkgKgorCSAqIEN1cnJlbnQgdmFsdWUgaW4gQ09MX0VOQUJMRV9NQVNLIGlzIGRpc3JlZ2FyZGVkLiBUaGlzIG1lYW5zIGlmCisJICogeW91IHNldCBjb2x1bW4udWkgPSBhdXRvIGFuZCBwYXNzIC0tY29sdW1uPXJvdywgdGhlbiAiYXV0byIKKwkgKiB3aWxsIGJlY29tZSAiYWx3YXlzIi4KKwkgKi8KKwlpZiAoKGdyb3VwX3NldCAmIExBWU9VVF9TRVQpICYmICEoZ3JvdXBfc2V0ICYgRU5BQkxFX1NFVCkpCisJCSpjb2xvcHRzID0gKCpjb2xvcHRzICYgfkNPTF9FTkFCTEVfTUFTSykgfCBDT0xfRU5BQkxFRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2x1bW5fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsCisJCQkgY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQgKmNvbG9wdHMpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJaWYgKHBhcnNlX2NvbmZpZyhjb2xvcHRzLCB2YWx1ZSkpCisJCXJldHVybiBlcnJvcigiaW52YWxpZCBjb2x1bW4uJXMgbW9kZSAlcyIsIGtleSwgdmFsdWUpOworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbHVtbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJICAgICAgY29uc3QgY2hhciAqY29tbWFuZCwgdW5zaWduZWQgaW50ICpjb2xvcHRzKQoreworCWNvbnN0IGNoYXIgKml0ID0gc2tpcF9wcmVmaXgodmFyLCAiY29sdW1uLiIpOworCWlmICghaXQpCisJCXJldHVybiAwOworCisJaWYgKCFzdHJjbXAoaXQsICJ1aSIpKQorCQlyZXR1cm4gY29sdW1uX2NvbmZpZyh2YXIsIHZhbHVlLCAidWkiLCBjb2xvcHRzKTsKKworCWlmIChjb21tYW5kICYmICFzdHJjbXAoaXQsIGNvbW1hbmQpKQorCQlyZXR1cm4gY29sdW1uX2NvbmZpZyh2YXIsIHZhbHVlLCBpdCwgY29sb3B0cyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlb3B0X2NvbHVtbl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXVuc2lnbmVkIGludCAqY29sb3B0cyA9IG9wdC0+dmFsdWU7CisJKmNvbG9wdHMgfD0gQ09MX1BBUlNFT1BUOworCSpjb2xvcHRzICY9IH5DT0xfRU5BQkxFX01BU0s7CisJaWYgKHVuc2V0KQkJLyogLS1uby1jb2x1bW4gPT0gbmV2ZXIgKi8KKwkJcmV0dXJuIDA7CisJLyogLS1jb2x1bW4gPT0gYWx3YXlzIHVubGVzcyAiYXJnIiBzdGF0ZXMgb3RoZXJ3aXNlICovCisJKmNvbG9wdHMgfD0gQ09MX0VOQUJMRUQ7CisJaWYgKGFyZykKKwkJcmV0dXJuIHBhcnNlX2NvbmZpZyhjb2xvcHRzLCBhcmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmRfb3V0ID0gLTE7CitzdGF0aWMgc3RydWN0IGNoaWxkX3Byb2Nlc3MgY29sdW1uX3Byb2Nlc3M7CisKK2ludCBydW5fY29sdW1uX2ZpbHRlcihpbnQgY29sb3B0cywgY29uc3Qgc3RydWN0IGNvbHVtbl9vcHRpb25zICpvcHRzKQoreworCWNvbnN0IGNoYXIgKmF2WzEwXTsKKwlpbnQgcmV0LCBhYyA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYl9jb2xvcHQgID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYl93aWR0aCAgID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYl9wYWRkaW5nID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZmRfb3V0ICE9IC0xKQorCQlyZXR1cm4gLTE7CisKKwlhdlthYysrXSA9ICJjb2x1bW4iOworCXN0cmJ1Zl9hZGRmKCZzYl9jb2xvcHQsICItLXJhdy1tb2RlPSVkIiwgY29sb3B0cyk7CisJYXZbYWMrK10gPSBzYl9jb2xvcHQuYnVmOworCWlmIChvcHRzICYmIG9wdHMtPndpZHRoKSB7CisJCXN0cmJ1Zl9hZGRmKCZzYl93aWR0aCwgIi0td2lkdGg9JWQiLCBvcHRzLT53aWR0aCk7CisJCWF2W2FjKytdID0gc2Jfd2lkdGguYnVmOworCX0KKwlpZiAob3B0cyAmJiBvcHRzLT5pbmRlbnQpIHsKKwkJYXZbYWMrK10gPSAiLS1pbmRlbnQiOworCQlhdlthYysrXSA9IG9wdHMtPmluZGVudDsKKwl9CisJaWYgKG9wdHMgJiYgb3B0cy0+cGFkZGluZykgeworCQlzdHJidWZfYWRkZigmc2JfcGFkZGluZywgIi0tcGFkZGluZz0lZCIsIG9wdHMtPnBhZGRpbmcpOworCQlhdlthYysrXSA9IHNiX3BhZGRpbmcuYnVmOworCX0KKwlhdlthY10gPSBOVUxMOworCisJZmZsdXNoKHN0ZG91dCk7CisJbWVtc2V0KCZjb2x1bW5fcHJvY2VzcywgMCwgc2l6ZW9mKGNvbHVtbl9wcm9jZXNzKSk7CisJY29sdW1uX3Byb2Nlc3MuaW4gPSAtMTsKKwljb2x1bW5fcHJvY2Vzcy5vdXQgPSBkdXAoMSk7CisJY29sdW1uX3Byb2Nlc3MuZ2l0X2NtZCA9IDE7CisJY29sdW1uX3Byb2Nlc3MuYXJndiA9IGF2OworCisJcmV0ID0gc3RhcnRfY29tbWFuZCgmY29sdW1uX3Byb2Nlc3MpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiX2NvbG9wdCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiX3dpZHRoKTsKKwlzdHJidWZfcmVsZWFzZSgmc2JfcGFkZGluZyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gLTI7CisKKwlmZF9vdXQgPSBkdXAoMSk7CisJY2xvc2UoMSk7CisJZHVwMihjb2x1bW5fcHJvY2Vzcy5pbiwgMSk7CisJY2xvc2UoY29sdW1uX3Byb2Nlc3MuaW4pOworCXJldHVybiAwOworfQorCitpbnQgc3RvcF9jb2x1bW5fZmlsdGVyKHZvaWQpCit7CisJaWYgKGZkX291dCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJZmZsdXNoKHN0ZG91dCk7CisJY2xvc2UoMSk7CisJZmluaXNoX2NvbW1hbmQoJmNvbHVtbl9wcm9jZXNzKTsKKwlkdXAyKGZkX291dCwgMSk7CisJY2xvc2UoZmRfb3V0KTsKKwlmZF9vdXQgPSAtMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbHVtbi5oIGIvY29sdW1uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2MTkxNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbHVtbi5oCkBAIC0wLDAgKzEsNDUgQEAKKyNpZm5kZWYgQ09MVU1OX0gKKyNkZWZpbmUgQ09MVU1OX0gKKworI2RlZmluZSBDT0xfTEFZT1VUX01BU0sgICAweDAwMEYKKyNkZWZpbmUgQ09MX0VOQUJMRV9NQVNLICAgMHgwMDMwICAgLyogYWx3YXlzLCBuZXZlciBvciBhdXRvICovCisjZGVmaW5lIENPTF9QQVJTRU9QVCAgICAgIDB4MDA0MCAgIC8qIC0tY29sdW1uIGlzIGdpdmVuIGZyb20gY21kbGluZSAqLworI2RlZmluZSBDT0xfREVOU0UgICAgICAgICAweDAwODAgICAvKiBTaHJpbmsgY29sdW1ucyB3aGVuIHBvc3NpYmxlLAorCQkJCSAgICAgIG1ha2luZyBzcGFjZSBmb3IgbW9yZSBjb2x1bW5zICovCisKKyNkZWZpbmUgQ09MX0RJU0FCTEVEICAgICAgMHgwMDAwICAgLyogbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lIENPTF9FTkFCTEVEICAgICAgIDB4MDAxMAorI2RlZmluZSBDT0xfQVVUTyAgICAgICAgICAweDAwMjAKKworI2RlZmluZSBDT0xfTEFZT1VUKGMpICgoYykgJiBDT0xfTEFZT1VUX01BU0spCisjZGVmaW5lIENPTF9DT0xVTU4gICAgICAgICAgICAgMCAgIC8qIEZpbGwgY29sdW1ucyBiZWZvcmUgcm93cyAqLworI2RlZmluZSBDT0xfUk9XICAgICAgICAgICAgICAgIDEgICAvKiBGaWxsIHJvd3MgYmVmb3JlIGNvbHVtbnMgKi8KKyNkZWZpbmUgQ09MX1BMQUlOICAgICAgICAgICAgIDE1ICAgLyogb25lIGNvbHVtbiAqLworCisjZGVmaW5lIGV4cGxpY2l0bHlfZW5hYmxlX2NvbHVtbihjKSBcCisJKCgoYykgJiBDT0xfUEFSU0VPUFQpICYmIGNvbHVtbl9hY3RpdmUoYykpCisKK3N0cnVjdCBjb2x1bW5fb3B0aW9ucyB7CisJaW50IHdpZHRoOworCWludCBwYWRkaW5nOworCWNvbnN0IGNoYXIgKmluZGVudDsKKwljb25zdCBjaGFyICpubDsKK307CisKK3N0cnVjdCBvcHRpb247CitleHRlcm4gaW50IHBhcnNlb3B0X2NvbHVtbl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgZ2l0X2NvbHVtbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqY29tbWFuZCwgdW5zaWduZWQgaW50ICpjb2xvcHRzKTsKK2V4dGVybiBpbnQgZmluYWxpemVfY29sb3B0cyh1bnNpZ25lZCBpbnQgKmNvbG9wdHMsIGludCBzdGRvdXRfaXNfdHR5KTsKK3N0YXRpYyBpbmxpbmUgaW50IGNvbHVtbl9hY3RpdmUodW5zaWduZWQgaW50IGNvbG9wdHMpCit7CisJcmV0dXJuIChjb2xvcHRzICYgQ09MX0VOQUJMRV9NQVNLKSA9PSBDT0xfRU5BQkxFRDsKK30KKworZXh0ZXJuIHZvaWQgcHJpbnRfY29sdW1ucyhjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGludCBjb2xvcHRzLAorCQkJICBjb25zdCBzdHJ1Y3QgY29sdW1uX29wdGlvbnMgKm9wdHMpOworCitleHRlcm4gaW50IHJ1bl9jb2x1bW5fZmlsdGVyKGludCBjb2xvcHRzLCBjb25zdCBzdHJ1Y3QgY29sdW1uX29wdGlvbnMgKik7CitleHRlcm4gaW50IHN0b3BfY29sdW1uX2ZpbHRlcih2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21iaW5lLWRpZmYuYyBiL2NvbWJpbmUtZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMWNjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21iaW5lLWRpZmYuYwpAQCAtMCwwICsxLDEyMTEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInVzZXJkaWZmLmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICppbnRlcnNlY3RfcGF0aHMoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpjdXJyLCBpbnQgbiwgaW50IG51bV9wYXJlbnQpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwOworCWludCBpOworCisJaWYgKCFuKSB7CisJCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqbGlzdCA9IE5VTEwsICoqdGFpbCA9ICZsaXN0OworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJaW50IGxlbjsKKwkJCWNvbnN0IGNoYXIgKnBhdGg7CisJCQlpZiAoZGlmZl91bm1vZGlmaWVkX3BhaXIocS0+cXVldWVbaV0pKQorCQkJCWNvbnRpbnVlOworCQkJcGF0aCA9IHEtPnF1ZXVlW2ldLT50d28tPnBhdGg7CisJCQlsZW4gPSBzdHJsZW4ocGF0aCk7CisJCQlwID0geG1hbGxvYyhjb21iaW5lX2RpZmZfcGF0aF9zaXplKG51bV9wYXJlbnQsIGxlbikpOworCQkJcC0+cGF0aCA9IChjaGFyICopICYocC0+cGFyZW50W251bV9wYXJlbnRdKTsKKwkJCW1lbWNweShwLT5wYXRoLCBwYXRoLCBsZW4pOworCQkJcC0+cGF0aFtsZW5dID0gMDsKKwkJCXAtPmxlbiA9IGxlbjsKKwkJCXAtPm5leHQgPSBOVUxMOworCQkJbWVtc2V0KHAtPnBhcmVudCwgMCwKKwkJCSAgICAgICBzaXplb2YocC0+cGFyZW50WzBdKSAqIG51bV9wYXJlbnQpOworCisJCQloYXNoY3B5KHAtPnNoYTEsIHEtPnF1ZXVlW2ldLT50d28tPnNoYTEpOworCQkJcC0+bW9kZSA9IHEtPnF1ZXVlW2ldLT50d28tPm1vZGU7CisJCQloYXNoY3B5KHAtPnBhcmVudFtuXS5zaGExLCBxLT5xdWV1ZVtpXS0+b25lLT5zaGExKTsKKwkJCXAtPnBhcmVudFtuXS5tb2RlID0gcS0+cXVldWVbaV0tPm9uZS0+bW9kZTsKKwkJCXAtPnBhcmVudFtuXS5zdGF0dXMgPSBxLT5xdWV1ZVtpXS0+c3RhdHVzOworCQkJKnRhaWwgPSBwOworCQkJdGFpbCA9ICZwLT5uZXh0OworCQl9CisJCXJldHVybiBsaXN0OworCX0KKworCWZvciAocCA9IGN1cnI7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWludCBmb3VuZCA9IDA7CisJCWlmICghcC0+bGVuKQorCQkJY29udGludWU7CisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpwYXRoOworCQkJaW50IGxlbjsKKworCQkJaWYgKGRpZmZfdW5tb2RpZmllZF9wYWlyKHEtPnF1ZXVlW2ldKSkKKwkJCQljb250aW51ZTsKKwkJCXBhdGggPSBxLT5xdWV1ZVtpXS0+dHdvLT5wYXRoOworCQkJbGVuID0gc3RybGVuKHBhdGgpOworCQkJaWYgKGxlbiA9PSBwLT5sZW4gJiYgIW1lbWNtcChwYXRoLCBwLT5wYXRoLCBsZW4pKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWhhc2hjcHkocC0+cGFyZW50W25dLnNoYTEsIHEtPnF1ZXVlW2ldLT5vbmUtPnNoYTEpOworCQkJCXAtPnBhcmVudFtuXS5tb2RlID0gcS0+cXVldWVbaV0tPm9uZS0+bW9kZTsKKwkJCQlwLT5wYXJlbnRbbl0uc3RhdHVzID0gcS0+cXVldWVbaV0tPnN0YXR1czsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIWZvdW5kKQorCQkJcC0+bGVuID0gMDsKKwl9CisJcmV0dXJuIGN1cnI7Cit9CisKKy8qIExpbmVzIGxvc3QgZnJvbSBwYXJlbnQgKi8KK3N0cnVjdCBsbGluZSB7CisJc3RydWN0IGxsaW5lICpuZXh0OworCWludCBsZW47CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfbWFwOworCWNoYXIgbGluZVtGTEVYX0FSUkFZXTsKK307CisKKy8qIExpbmVzIHN1cnZpdmluZyBpbiB0aGUgbWVyZ2UgcmVzdWx0ICovCitzdHJ1Y3Qgc2xpbmUgeworCXN0cnVjdCBsbGluZSAqbG9zdF9oZWFkLCAqKmxvc3RfdGFpbDsKKwlzdHJ1Y3QgbGxpbmUgKm5leHRfbG9zdDsKKwljaGFyICpib2w7CisJaW50IGxlbjsKKwkvKiBiaXQgMCB1cCB0byAoTi0xKSBhcmUgb24gaWYgdGhlIHBhcmVudCBoYXMgdGhpcyBsaW5lIChpLmUuCisJICogd2UgZGlkIG5vdCBjaGFuZ2UgaXQpLgorCSAqIGJpdCBOIGlzIHVzZWQgZm9yICJpbnRlcmVzdGluZyIgbGluZXMsIGluY2x1ZGluZyBjb250ZXh0LgorCSAqIGJpdCAoTisxKSBpcyB1c2VkIGZvciAiZG8gbm90IHNob3cgZGVsZXRpb24gYmVmb3JlIHRoaXMiLgorCSAqLworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwl1bnNpZ25lZCBsb25nICpwX2xubzsKK307CisKK3N0YXRpYyBjaGFyICpncmFiX2Jsb2IoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgaW50IG1vZGUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzaXplLCBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqYmxvYjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJYmxvYiA9IHhtYWxsb2MoMTAwKTsKKwkJKnNpemUgPSBzbnByaW50ZihibG9iLCAxMDAsCisJCQkJICJTdWJwcm9qZWN0IGNvbW1pdCAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0gZWxzZSBpZiAoaXNfbnVsbF9zaGExKHNoYTEpKSB7CisJCS8qIGRlbGV0ZWQgYmxvYiAqLworCQkqc2l6ZSA9IDA7CisJCXJldHVybiB4Y2FsbG9jKDEsIDEpOworCX0gZWxzZSBpZiAodGV4dGNvbnYpIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmID0gYWxsb2NfZmlsZXNwZWMocGF0aCk7CisJCWZpbGxfZmlsZXNwZWMoZGYsIHNoYTEsIDEsIG1vZGUpOworCQkqc2l6ZSA9IGZpbGxfdGV4dGNvbnYodGV4dGNvbnYsIGRmLCAmYmxvYik7CisJCWZyZWVfZmlsZXNwZWMoZGYpOworCX0gZWxzZSB7CisJCWJsb2IgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgc2l6ZSk7CisJCWlmICh0eXBlICE9IE9CSl9CTE9CKQorCQkJZGllKCJvYmplY3QgJyVzJyBpcyBub3QgYSBibG9iISIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisJcmV0dXJuIGJsb2I7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9sb3N0KHN0cnVjdCBzbGluZSAqc2xpbmUsIGludCBuLCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCXN0cnVjdCBsbGluZSAqbGxpbmU7CisJdW5zaWduZWQgbG9uZyB0aGlzX21hc2sgPSAoMVVMPDxuKTsKKwlpZiAobGluZVtsZW4tMV0gPT0gJ1xuJykKKwkJbGVuLS07CisKKwkvKiBDaGVjayB0byBzZWUgaWYgd2UgY2FuIHNxdWFzaCB0aGluZ3MgKi8KKwlpZiAoc2xpbmUtPmxvc3RfaGVhZCkgeworCQlsbGluZSA9IHNsaW5lLT5uZXh0X2xvc3Q7CisJCXdoaWxlIChsbGluZSkgeworCQkJaWYgKGxsaW5lLT5sZW4gPT0gbGVuICYmCisJCQkgICAgIW1lbWNtcChsbGluZS0+bGluZSwgbGluZSwgbGVuKSkgeworCQkJCWxsaW5lLT5wYXJlbnRfbWFwIHw9IHRoaXNfbWFzazsKKwkJCQlzbGluZS0+bmV4dF9sb3N0ID0gbGxpbmUtPm5leHQ7CisJCQkJcmV0dXJuOworCQkJfQorCQkJbGxpbmUgPSBsbGluZS0+bmV4dDsKKwkJfQorCX0KKworCWxsaW5lID0geG1hbGxvYyhzaXplb2YoKmxsaW5lKSArIGxlbiArIDEpOworCWxsaW5lLT5sZW4gPSBsZW47CisJbGxpbmUtPm5leHQgPSBOVUxMOworCWxsaW5lLT5wYXJlbnRfbWFwID0gdGhpc19tYXNrOworCW1lbWNweShsbGluZS0+bGluZSwgbGluZSwgbGVuKTsKKwlsbGluZS0+bGluZVtsZW5dID0gMDsKKwkqc2xpbmUtPmxvc3RfdGFpbCA9IGxsaW5lOworCXNsaW5lLT5sb3N0X3RhaWwgPSAmbGxpbmUtPm5leHQ7CisJc2xpbmUtPm5leHRfbG9zdCA9IE5VTEw7Cit9CisKK3N0cnVjdCBjb21iaW5lX2RpZmZfc3RhdGUgeworCXVuc2lnbmVkIGludCBsbm87CisJaW50IG9iLCBvbiwgbmIsIG5uOworCXVuc2lnbmVkIGxvbmcgbm1hc2s7CisJaW50IG51bV9wYXJlbnQ7CisJaW50IG47CisJc3RydWN0IHNsaW5lICpzbGluZTsKKwlzdHJ1Y3Qgc2xpbmUgKmxvc3RfYnVja2V0OworfTsKKworc3RhdGljIHZvaWQgY29uc3VtZV9saW5lKHZvaWQgKnN0YXRlXywgY2hhciAqbGluZSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9zdGF0ZSAqc3RhdGUgPSBzdGF0ZV87CisJaWYgKDUgPCBsZW4gJiYgIW1lbWNtcCgiQEAgLSIsIGxpbmUsIDQpKSB7CisJCWlmIChwYXJzZV9odW5rX2hlYWRlcihsaW5lLCBsZW4sCisJCQkJICAgICAgJnN0YXRlLT5vYiwgJnN0YXRlLT5vbiwKKwkJCQkgICAgICAmc3RhdGUtPm5iLCAmc3RhdGUtPm5uKSkKKwkJCXJldHVybjsKKwkJc3RhdGUtPmxubyA9IHN0YXRlLT5uYjsKKwkJaWYgKHN0YXRlLT5ubiA9PSAwKSB7CisJCQkvKiBAQCAtWCxZICtOLDAgQEAgcmVtb3ZlZCBZIGxpbmVzCisJCQkgKiB0aGF0IHdvdWxkIGhhdmUgY29tZSAqYWZ0ZXIqIGxpbmUgTgorCQkJICogaW4gdGhlIHJlc3VsdC4gIE91ciBsb3N0IGJ1Y2tldHMgaGFuZworCQkJICogdG8gdGhlIGxpbmUgYWZ0ZXIgdGhlIHJlbW92ZWQgbGluZXMsCisJCQkgKgorCQkJICogTm90ZSB0aGF0IHRoaXMgaXMgY29ycmVjdCBldmVuIHdoZW4gTiA9PSAwLAorCQkJICogaW4gd2hpY2ggY2FzZSB0aGUgaHVuayByZW1vdmVzIHRoZSBmaXJzdAorCQkJICogbGluZSBpbiB0aGUgZmlsZS4KKwkJCSAqLworCQkJc3RhdGUtPmxvc3RfYnVja2V0ID0gJnN0YXRlLT5zbGluZVtzdGF0ZS0+bmJdOworCQkJaWYgKCFzdGF0ZS0+bmIpCisJCQkJc3RhdGUtPm5iID0gMTsKKwkJfSBlbHNlIHsKKwkJCXN0YXRlLT5sb3N0X2J1Y2tldCA9ICZzdGF0ZS0+c2xpbmVbc3RhdGUtPm5iLTFdOworCQl9CisJCWlmICghc3RhdGUtPnNsaW5lW3N0YXRlLT5uYi0xXS5wX2xubykKKwkJCXN0YXRlLT5zbGluZVtzdGF0ZS0+bmItMV0ucF9sbm8gPQorCQkJCXhjYWxsb2Moc3RhdGUtPm51bV9wYXJlbnQsCisJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJCXN0YXRlLT5zbGluZVtzdGF0ZS0+bmItMV0ucF9sbm9bc3RhdGUtPm5dID0gc3RhdGUtPm9iOworCQlzdGF0ZS0+bG9zdF9idWNrZXQtPm5leHRfbG9zdCA9IHN0YXRlLT5sb3N0X2J1Y2tldC0+bG9zdF9oZWFkOworCQlyZXR1cm47CisJfQorCWlmICghc3RhdGUtPmxvc3RfYnVja2V0KQorCQlyZXR1cm47IC8qIG5vdCBpbiBhbnkgaHVuayB5ZXQgKi8KKwlzd2l0Y2ggKGxpbmVbMF0pIHsKKwljYXNlICctJzoKKwkJYXBwZW5kX2xvc3Qoc3RhdGUtPmxvc3RfYnVja2V0LCBzdGF0ZS0+biwgbGluZSsxLCBsZW4tMSk7CisJCWJyZWFrOworCWNhc2UgJysnOgorCQlzdGF0ZS0+c2xpbmVbc3RhdGUtPmxuby0xXS5mbGFnIHw9IHN0YXRlLT5ubWFzazsKKwkJc3RhdGUtPmxubysrOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbWJpbmVfZGlmZihjb25zdCB1bnNpZ25lZCBjaGFyICpwYXJlbnQsIHVuc2lnbmVkIGludCBtb2RlLAorCQkJIG1tZmlsZV90ICpyZXN1bHRfZmlsZSwKKwkJCSBzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBpbnQgY250LCBpbnQgbiwKKwkJCSBpbnQgbnVtX3BhcmVudCwgaW50IHJlc3VsdF9kZWxldGVkLAorCQkJIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252LAorCQkJIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJdW5zaWduZWQgaW50IHBfbG5vLCBsbm87CisJdW5zaWduZWQgbG9uZyBubWFzayA9ICgxVUwgPDwgbik7CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisJbW1maWxlX3QgcGFyZW50X2ZpbGU7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9zdGF0ZSBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHN6OworCisJaWYgKHJlc3VsdF9kZWxldGVkKQorCQlyZXR1cm47IC8qIHJlc3VsdCBkZWxldGVkICovCisKKwlwYXJlbnRfZmlsZS5wdHIgPSBncmFiX2Jsb2IocGFyZW50LCBtb2RlLCAmc3osIHRleHRjb252LCBwYXRoKTsKKwlwYXJlbnRfZmlsZS5zaXplID0gc3o7CisJbWVtc2V0KCZ4cHAsIDAsIHNpemVvZih4cHApKTsKKwl4cHAuZmxhZ3MgPSAwOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCXN0YXRlLm5tYXNrID0gbm1hc2s7CisJc3RhdGUuc2xpbmUgPSBzbGluZTsKKwlzdGF0ZS5sbm8gPSAxOworCXN0YXRlLm51bV9wYXJlbnQgPSBudW1fcGFyZW50OworCXN0YXRlLm4gPSBuOworCisJeGRpX2RpZmZfb3V0ZigmcGFyZW50X2ZpbGUsIHJlc3VsdF9maWxlLCBjb25zdW1lX2xpbmUsICZzdGF0ZSwKKwkJICAgICAgJnhwcCwgJnhlY2ZnKTsKKwlmcmVlKHBhcmVudF9maWxlLnB0cik7CisKKwkvKiBBc3NpZ24gbGluZSBudW1iZXJzIGZvciB0aGlzIHBhcmVudC4KKwkgKgorCSAqIHNsaW5lW2xub10ucF9sbm9bbl0gcmVjb3JkcyB0aGUgZmlyc3QgbGluZSBudW1iZXIKKwkgKiAoY291bnRpbmcgZnJvbSAxKSBmb3IgcGFyZW50IE4gaWYgdGhlIGZpbmFsIGh1bmsgZGlzcGxheQorCSAqIHN0YXJ0ZWQgYnkgc2hvd2luZyBzbGluZVtsbm9dIChwb3NzaWJseSBzaG93aW5nIHRoZSBsb3N0CisJICogbGluZXMgYXR0YWNoZWQgdG8gaXQgZmlyc3QpLgorCSAqLworCWZvciAobG5vID0gMCwgIHBfbG5vID0gMTsgbG5vIDw9IGNudDsgbG5vKyspIHsKKwkJc3RydWN0IGxsaW5lICpsbDsKKwkJc2xpbmVbbG5vXS5wX2xub1tuXSA9IHBfbG5vOworCisJCS8qIEhvdyBtYW55IGxpbmVzIHdvdWxkIHRoaXMgc2xpbmUgYWR2YW5jZSB0aGUgcF9sbm8/ICovCisJCWxsID0gc2xpbmVbbG5vXS5sb3N0X2hlYWQ7CisJCXdoaWxlIChsbCkgeworCQkJaWYgKGxsLT5wYXJlbnRfbWFwICYgbm1hc2spCisJCQkJcF9sbm8rKzsgLyogJy0nIG1lYW5zIHBhcmVudCBoYWQgaXQgKi8KKwkJCWxsID0gbGwtPm5leHQ7CisJCX0KKwkJaWYgKGxubyA8IGNudCAmJiAhKHNsaW5lW2xub10uZmxhZyAmIG5tYXNrKSkKKwkJCXBfbG5vKys7IC8qIG5vICcrJyBtZWFucyBwYXJlbnQgaGFkIGl0ICovCisJfQorCXNsaW5lW2xub10ucF9sbm9bbl0gPSBwX2xubzsgLyogdHJhaWxlciAqLworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb250ZXh0ID0gMzsKK3N0YXRpYyBjaGFyIGNvbWJpbmVfbWFya2VyID0gJ0AnOworCitzdGF0aWMgaW50IGludGVyZXN0aW5nKHN0cnVjdCBzbGluZSAqc2xpbmUsIHVuc2lnbmVkIGxvbmcgYWxsX21hc2spCit7CisJLyogSWYgc29tZSBwYXJlbnRzIGxvc3QgbGluZXMgaGVyZSwgb3IgaWYgd2UgaGF2ZSBhZGRlZCB0bworCSAqIHNvbWUgcGFyZW50LCBpdCBpcyBpbnRlcmVzdGluZy4KKwkgKi8KKwlyZXR1cm4gKChzbGluZS0+ZmxhZyAmIGFsbF9tYXNrKSB8fCBzbGluZS0+bG9zdF9oZWFkKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWRqdXN0X2h1bmtfdGFpbChzdHJ1Y3Qgc2xpbmUgKnNsaW5lLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWxsX21hc2ssCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBodW5rX2JlZ2luLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaSkKK3sKKwkvKiBpIHBvaW50cyBhdCB0aGUgZmlyc3QgdW5pbnRlcmVzdGluZyBsaW5lLiAgSWYgdGhlIGxhc3QgbGluZQorCSAqIG9mIHRoZSBodW5rIHdhcyBpbnRlcmVzdGluZyBvbmx5IGJlY2F1c2UgaXQgaGFzIHNvbWUKKwkgKiBkZWxldGlvbiwgdGhlbiBpdCBpcyBub3QgYWxsIHRoYXQgaW50ZXJlc3RpbmcgZm9yIHRoZQorCSAqIHB1cnBvc2Ugb2YgZ2l2aW5nIHRyYWlsaW5nIGNvbnRleHQgbGluZXMuICBUaGlzIGlzIGJlY2F1c2UKKwkgKiB3ZSBvdXRwdXQgJy0nIGxpbmUgYW5kIHRoZW4gdW5tb2RpZmllZCBzbGluZVtpLTFdIGl0c2VsZiBpbgorCSAqIHRoYXQgY2FzZSB3aGljaCBnaXZlcyB1cyBvbmUgZXh0cmEgY29udGV4dCBsaW5lLgorCSAqLworCWlmICgoaHVua19iZWdpbiArIDEgPD0gaSkgJiYgIShzbGluZVtpLTFdLmZsYWcgJiBhbGxfbWFzaykpCisJCWktLTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0KHN0cnVjdCBzbGluZSAqc2xpbmUsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBtYXJrLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNudCwKKwkJCSAgICAgICBpbnQgbG9va19mb3JfdW5pbnRlcmVzdGluZykKK3sKKwkvKiBXZSBoYXZlIGV4YW1pbmVkIHVwIHRvIGktMSBhbmQgYXJlIGFib3V0IHRvIGxvb2sgYXQgaS4KKwkgKiBGaW5kIG5leHQgaW50ZXJlc3Rpbmcgb3IgdW5pbnRlcmVzdGluZyBsaW5lLiAgSGVyZSwKKwkgKiAiaW50ZXJlc3RpbmciIGRvZXMgbm90IG1lYW4gaW50ZXJlc3RpbmcoKSwgYnV0IG1hcmtlZCBieQorCSAqIHRoZSBnaXZlX2NvbnRleHQoKSBmdW5jdGlvbiBiZWxvdyAoaS5lLiBpdCBpbmNsdWRlcyBjb250ZXh0CisJICogbGluZXMgdGhhdCBhcmUgbm90IGludGVyZXN0aW5nIHRvIGludGVyZXN0aW5nKCkgZnVuY3Rpb24KKwkgKiB0aGF0IGFyZSBzdXJyb3VuZGVkIGJ5IGludGVyZXN0aW5nKCkgb25lcy4KKwkgKi8KKwl3aGlsZSAoaSA8PSBjbnQpCisJCWlmIChsb29rX2Zvcl91bmludGVyZXN0aW5nCisJCSAgICA/ICEoc2xpbmVbaV0uZmxhZyAmIG1hcmspCisJCSAgICA6IChzbGluZVtpXS5mbGFnICYgbWFyaykpCisJCQlyZXR1cm4gaTsKKwkJZWxzZQorCQkJaSsrOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGdpdmVfY29udGV4dChzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBsb25nIGNudCwgaW50IG51bV9wYXJlbnQpCit7CisJdW5zaWduZWQgbG9uZyBhbGxfbWFzayA9ICgxVUw8PG51bV9wYXJlbnQpIC0gMTsKKwl1bnNpZ25lZCBsb25nIG1hcmsgPSAoMVVMPDxudW1fcGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIG5vX3ByZV9kZWxldGUgPSAoMlVMPDxudW1fcGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwkvKiBUd28gZ3JvdXBzIG9mIGludGVyZXN0aW5nIGxpbmVzIG1heSBoYXZlIGEgc2hvcnQgZ2FwIG9mCisJICogdW5pbnRlcmVzdGluZyBsaW5lcy4gIENvbm5lY3Qgc3VjaCBncm91cHMgdG8gZ2l2ZSB0aGVtIGEKKwkgKiBiaXQgb2YgY29udGV4dC4KKwkgKgorCSAqIFdlIGZpcnN0IHN0YXJ0IGZyb20gd2hhdCB0aGUgaW50ZXJlc3RpbmcoKSBmdW5jdGlvbiBzYXlzLAorCSAqIGFuZCBtYXJrIHRoZW0gd2l0aCAibWFyayIsIGFuZCBwYWludCBjb250ZXh0IGxpbmVzIHdpdGggdGhlCisJICogbWFyay4gIFNvIGludGVyZXN0aW5nKCkgd291bGQgc3RpbGwgc2F5IGZhbHNlIGZvciBzdWNoIGNvbnRleHQKKwkgKiBsaW5lcyBidXQgdGhleSBhcmUgdHJlYXRlZCBhcyAiaW50ZXJlc3RpbmciIGluIHRoZSBlbmQuCisJICovCisJaSA9IGZpbmRfbmV4dChzbGluZSwgbWFyaywgMCwgY250LCAwKTsKKwlpZiAoY250IDwgaSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoaSA8PSBjbnQpIHsKKwkJdW5zaWduZWQgbG9uZyBqID0gKGNvbnRleHQgPCBpKSA/IChpIC0gY29udGV4dCkgOiAwOworCQl1bnNpZ25lZCBsb25nIGs7CisKKwkJLyogUGFpbnQgYSBmZXcgbGluZXMgYmVmb3JlIHRoZSBmaXJzdCBpbnRlcmVzdGluZyBsaW5lLiAqLworCQl3aGlsZSAoaiA8IGkpCisJCQlzbGluZVtqKytdLmZsYWcgfD0gbWFyayB8IG5vX3ByZV9kZWxldGU7CisKKwlhZ2FpbjoKKwkJLyogd2Uga25vdyB1cCB0byBpIGlzIHRvIGJlIGluY2x1ZGVkLiAgd2hlcmUgZG9lcyB0aGUKKwkJICogbmV4dCB1bmludGVyZXN0aW5nIG9uZSBzdGFydD8KKwkJICovCisJCWogPSBmaW5kX25leHQoc2xpbmUsIG1hcmssIGksIGNudCwgMSk7CisJCWlmIChjbnQgPCBqKQorCQkJYnJlYWs7IC8qIHRoZSByZXN0IGFyZSBhbGwgaW50ZXJlc3RpbmcgKi8KKworCQkvKiBsb29rYWhlYWQgY29udGV4dCBsaW5lcyAqLworCQlrID0gZmluZF9uZXh0KHNsaW5lLCBtYXJrLCBqLCBjbnQsIDApOworCQlqID0gYWRqdXN0X2h1bmtfdGFpbChzbGluZSwgYWxsX21hc2ssIGksIGopOworCisJCWlmIChrIDwgaiArIGNvbnRleHQpIHsKKwkJCS8qIGsgaXMgaW50ZXJlc3RpbmcgYW5kIFtqLGspIGFyZSBub3QsIGJ1dAorCQkJICogcGFpbnQgdGhlbSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBnYXAgaXMgc21hbGwuCisJCQkgKi8KKwkJCXdoaWxlIChqIDwgaykKKwkJCQlzbGluZVtqKytdLmZsYWcgfD0gbWFyazsKKwkJCWkgPSBrOworCQkJZ290byBhZ2FpbjsKKwkJfQorCisJCS8qIGogaXMgdGhlIGZpcnN0IHVuaW50ZXJlc3RpbmcgbGluZSBhbmQgdGhlcmUgaXMKKwkJICogbm8gb3ZlcmxhcCBiZXlvbmQgaXQgd2l0aGluIGNvbnRleHQgbGluZXMuICBQYWludAorCQkgKiB0aGUgdHJhaWxpbmcgZWRnZSBhIGJpdC4KKwkJICovCisJCWkgPSBrOworCQlrID0gKGogKyBjb250ZXh0IDwgY250KzEpID8gaiArIGNvbnRleHQgOiBjbnQrMTsKKwkJd2hpbGUgKGogPCBrKQorCQkJc2xpbmVbaisrXS5mbGFnIHw9IG1hcms7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1ha2VfaHVua3Moc3RydWN0IHNsaW5lICpzbGluZSwgdW5zaWduZWQgbG9uZyBjbnQsCisJCSAgICAgICBpbnQgbnVtX3BhcmVudCwgaW50IGRlbnNlKQoreworCXVuc2lnbmVkIGxvbmcgYWxsX21hc2sgPSAoMVVMPDxudW1fcGFyZW50KSAtIDE7CisJdW5zaWduZWQgbG9uZyBtYXJrID0gKDFVTDw8bnVtX3BhcmVudCk7CisJdW5zaWduZWQgbG9uZyBpOworCWludCBoYXNfaW50ZXJlc3RpbmcgPSAwOworCisJZm9yIChpID0gMDsgaSA8PSBjbnQ7IGkrKykgeworCQlpZiAoaW50ZXJlc3RpbmcoJnNsaW5lW2ldLCBhbGxfbWFzaykpCisJCQlzbGluZVtpXS5mbGFnIHw9IG1hcms7CisJCWVsc2UKKwkJCXNsaW5lW2ldLmZsYWcgJj0gfm1hcms7CisJfQorCWlmICghZGVuc2UpCisJCXJldHVybiBnaXZlX2NvbnRleHQoc2xpbmUsIGNudCwgbnVtX3BhcmVudCk7CisKKwkvKiBMb29rIGF0IGVhY2ggaHVuaywgYW5kIGlmIHdlIGhhdmUgY2hhbmdlcyBmcm9tIG9ubHkgb25lCisJICogcGFyZW50LCBvciB0aGUgY2hhbmdlcyBhcmUgdGhlIHNhbWUgZnJvbSBhbGwgYnV0IG9uZQorCSAqIHBhcmVudCwgbWFyayB0aGF0IHVuaW50ZXJlc3RpbmcuCisJICovCisJaSA9IDA7CisJd2hpbGUgKGkgPD0gY250KSB7CisJCXVuc2lnbmVkIGxvbmcgaiwgaHVua19iZWdpbiwgaHVua19lbmQ7CisJCXVuc2lnbmVkIGxvbmcgc2FtZV9kaWZmOworCQl3aGlsZSAoaSA8PSBjbnQgJiYgIShzbGluZVtpXS5mbGFnICYgbWFyaykpCisJCQlpKys7CisJCWlmIChjbnQgPCBpKQorCQkJYnJlYWs7IC8qIE5vIG1vcmUgaW50ZXJlc3RpbmcgaHVua3MgKi8KKwkJaHVua19iZWdpbiA9IGk7CisJCWZvciAoaiA9IGkgKyAxOyBqIDw9IGNudDsgaisrKSB7CisJCQlpZiAoIShzbGluZVtqXS5mbGFnICYgbWFyaykpIHsKKwkJCQkvKiBMb29rIGJleW9uZCB0aGUgZW5kIHRvIHNlZSBpZiB0aGVyZQorCQkJCSAqIGlzIGFuIGludGVyZXN0aW5nIGxpbmUgYWZ0ZXIgdGhpcworCQkJCSAqIGh1bmsgd2l0aGluIGNvbnRleHQgc3Bhbi4KKwkJCQkgKi8KKwkJCQl1bnNpZ25lZCBsb25nIGxhOyAvKiBsb29rYWhlYWQgKi8KKwkJCQlpbnQgY29udGluID0gMDsKKwkJCQlsYSA9IGFkanVzdF9odW5rX3RhaWwoc2xpbmUsIGFsbF9tYXNrLAorCQkJCQkJICAgICBodW5rX2JlZ2luLCBqKTsKKwkJCQlsYSA9IChsYSArIGNvbnRleHQgPCBjbnQgKyAxKSA/CisJCQkJCShsYSArIGNvbnRleHQpIDogY250ICsgMTsKKwkJCQl3aGlsZSAobGEgJiYgaiA8PSAtLWxhKSB7CisJCQkJCWlmIChzbGluZVtsYV0uZmxhZyAmIG1hcmspIHsKKwkJCQkJCWNvbnRpbiA9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoIWNvbnRpbikKKwkJCQkJYnJlYWs7CisJCQkJaiA9IGxhOworCQkJfQorCQl9CisJCWh1bmtfZW5kID0gajsKKworCQkvKiBbaS4uaHVua19lbmQpIGFyZSBpbnRlcmVzdGluZy4gIE5vdyBpcyBpdCByZWFsbHkKKwkJICogaW50ZXJlc3Rpbmc/ICBXZSBjaGVjayBpZiB0aGVyZSBhcmUgb25seSB0d28gdmVyc2lvbnMKKwkJICogYW5kIHRoZSByZXN1bHQgbWF0Y2hlcyBvbmUgb2YgdGhlbS4gIFRoYXQgaXMsIHdlIGxvb2sKKwkJICogYXQ6CisJCSAqICAgKCspIGxpbmUsIHdoaWNoIHJlY29yZHMgbGluZXMgYWRkZWQgdG8gd2hpY2ggcGFyZW50czsKKwkJICogICAgICAgdGhpcyBsaW5lIGFwcGVhcnMgaW4gdGhlIHJlc3VsdC4KKwkJICogICAoLSkgbGluZSwgd2hpY2ggcmVjb3JkcyBmcm9tIHdoYXQgcGFyZW50cyB0aGUgbGluZQorCQkgKiAgICAgICB3YXMgcmVtb3ZlZDsgdGhpcyBsaW5lIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgcmVzdWx0LgorCQkgKiB0aGVuIGNoZWNrIHRoZSBzZXQgb2YgcGFyZW50cyB0aGUgcmVzdWx0IGhhcyBkaWZmZXJlbmNlCisJCSAqIGZyb20sIGZyb20gYWxsIGxpbmVzLiAgSWYgdGhlcmUgYXJlIGxpbmVzIHRoYXQgaGFzCisJCSAqIGRpZmZlcmVudCBzZXQgb2YgcGFyZW50cyB0aGF0IHRoZSByZXN1bHQgaGFzIGRpZmZlcmVuY2VzCisJCSAqIGZyb20sIHRoYXQgbWVhbnMgd2UgaGF2ZSBtb3JlIHRoYW4gdHdvIHZlcnNpb25zLgorCQkgKgorCQkgKiBFdmVuIHdoZW4gd2UgaGF2ZSBvbmx5IHR3byB2ZXJzaW9ucywgaWYgdGhlIHJlc3VsdCBkb2VzCisJCSAqIG5vdCBtYXRjaCBhbnkgb2YgdGhlIHBhcmVudHMsIHRoZSBpdCBzaG91bGQgYmUgY29uc2lkZXJlZAorCQkgKiBpbnRlcmVzdGluZy4gIEluIHN1Y2ggYSBjYXNlLCB3ZSB3b3VsZCBoYXZlIGFsbCAnKycgbGluZS4KKwkJICogQWZ0ZXIgcGFzc2luZyB0aGUgYWJvdmUgInR3byB2ZXJzaW9ucyIgdGVzdCwgdGhhdCB3b3VsZAorCQkgKiBhcHBlYXIgYXMgInRoZSBzYW1lIHNldCBvZiBwYXJlbnRzIiB0byBiZSAiYWxsIHBhcmVudHMiLgorCQkgKi8KKwkJc2FtZV9kaWZmID0gMDsKKwkJaGFzX2ludGVyZXN0aW5nID0gMDsKKwkJZm9yIChqID0gaTsgaiA8IGh1bmtfZW5kICYmICFoYXNfaW50ZXJlc3Rpbmc7IGorKykgeworCQkJdW5zaWduZWQgbG9uZyB0aGlzX2RpZmYgPSBzbGluZVtqXS5mbGFnICYgYWxsX21hc2s7CisJCQlzdHJ1Y3QgbGxpbmUgKmxsID0gc2xpbmVbal0ubG9zdF9oZWFkOworCQkJaWYgKHRoaXNfZGlmZikgeworCQkJCS8qIFRoaXMgaGFzIHNvbWUgY2hhbmdlcy4gIElzIGl0IHRoZQorCQkJCSAqIHNhbWUgYXMgb3RoZXJzPworCQkJCSAqLworCQkJCWlmICghc2FtZV9kaWZmKQorCQkJCQlzYW1lX2RpZmYgPSB0aGlzX2RpZmY7CisJCQkJZWxzZSBpZiAoc2FtZV9kaWZmICE9IHRoaXNfZGlmZikgeworCQkJCQloYXNfaW50ZXJlc3RpbmcgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQl3aGlsZSAobGwgJiYgIWhhc19pbnRlcmVzdGluZykgeworCQkJCS8qIExvc3QgdGhpcyBsaW5lIGZyb20gdGhlc2UgcGFyZW50czsKKwkJCQkgKiB3aG8gYXJlIHRoZXk/ICBBcmUgdGhleSB0aGUgc2FtZT8KKwkJCQkgKi8KKwkJCQl0aGlzX2RpZmYgPSBsbC0+cGFyZW50X21hcDsKKwkJCQlpZiAoIXNhbWVfZGlmZikKKwkJCQkJc2FtZV9kaWZmID0gdGhpc19kaWZmOworCQkJCWVsc2UgaWYgKHNhbWVfZGlmZiAhPSB0aGlzX2RpZmYpIHsKKwkJCQkJaGFzX2ludGVyZXN0aW5nID0gMTsKKwkJCQl9CisJCQkJbGwgPSBsbC0+bmV4dDsKKwkJCX0KKwkJfQorCisJCWlmICghaGFzX2ludGVyZXN0aW5nICYmIHNhbWVfZGlmZiAhPSBhbGxfbWFzaykgeworCQkJLyogVGhpcyBodW5rIGlzIG5vdCB0aGF0IGludGVyZXN0aW5nIGFmdGVyIGFsbCAqLworCQkJZm9yIChqID0gaHVua19iZWdpbjsgaiA8IGh1bmtfZW5kOyBqKyspCisJCQkJc2xpbmVbal0uZmxhZyAmPSB+bWFyazsKKwkJfQorCQlpID0gaHVua19lbmQ7CisJfQorCisJaGFzX2ludGVyZXN0aW5nID0gZ2l2ZV9jb250ZXh0KHNsaW5lLCBjbnQsIG51bV9wYXJlbnQpOworCXJldHVybiBoYXNfaW50ZXJlc3Rpbmc7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcGFyZW50X2xubyhzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBsb25nIGwwLCB1bnNpZ25lZCBsb25nIGwxLCBpbnQgbiwgdW5zaWduZWQgbG9uZyBudWxsX2NvbnRleHQpCit7CisJbDAgPSBzbGluZVtsMF0ucF9sbm9bbl07CisJbDEgPSBzbGluZVtsMV0ucF9sbm9bbl07CisJcHJpbnRmKCIgLSVsdSwlbHUiLCBsMCwgbDEtbDAtbnVsbF9jb250ZXh0KTsKK30KKworc3RhdGljIGludCBodW5rX2NvbW1lbnRfbGluZShjb25zdCBjaGFyICpib2wpCit7CisJaW50IGNoOworCisJaWYgKCFib2wpCisJCXJldHVybiAwOworCWNoID0gKmJvbCAmIDB4ZmY7CisJcmV0dXJuIChpc2FscGhhKGNoKSB8fCBjaCA9PSAnXycgfHwgY2ggPT0gJyQnKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19saW5lX3RvX2VvbChjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCBjb25zdCBjaGFyICpyZXNldCkKK3sKKwlpbnQgc2F3X2NyX2F0X2VvbCA9IDA7CisJaWYgKGxlbiA8IDApCisJCWxlbiA9IHN0cmxlbihsaW5lKTsKKwlzYXdfY3JfYXRfZW9sID0gKGxlbiAmJiBsaW5lW2xlbi0xXSA9PSAnXHInKTsKKworCXByaW50ZigiJS4qcyVzJXNcbiIsIGxlbiAtIHNhd19jcl9hdF9lb2wsIGxpbmUsCisJICAgICAgIHJlc2V0LAorCSAgICAgICBzYXdfY3JfYXRfZW9sID8gIlxyIiA6ICIiKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9zbGluZShzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBsb25nIGNudCwgaW50IG51bV9wYXJlbnQsCisJCSAgICAgICBpbnQgdXNlX2NvbG9yLCBpbnQgcmVzdWx0X2RlbGV0ZWQpCit7CisJdW5zaWduZWQgbG9uZyBtYXJrID0gKDFVTDw8bnVtX3BhcmVudCk7CisJdW5zaWduZWQgbG9uZyBub19wcmVfZGVsZXRlID0gKDJVTDw8bnVtX3BhcmVudCk7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBsbm8gPSAwOworCWNvbnN0IGNoYXIgKmNfZnJhZyA9IGRpZmZfZ2V0X2NvbG9yKHVzZV9jb2xvciwgRElGRl9GUkFHSU5GTyk7CisJY29uc3QgY2hhciAqY19mdW5jID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0ZVTkNJTkZPKTsKKwljb25zdCBjaGFyICpjX25ldyA9IGRpZmZfZ2V0X2NvbG9yKHVzZV9jb2xvciwgRElGRl9GSUxFX05FVyk7CisJY29uc3QgY2hhciAqY19vbGQgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfRklMRV9PTEQpOworCWNvbnN0IGNoYXIgKmNfcGxhaW4gPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfUExBSU4pOworCWNvbnN0IGNoYXIgKmNfcmVzZXQgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfUkVTRVQpOworCisJaWYgKHJlc3VsdF9kZWxldGVkKQorCQlyZXR1cm47IC8qIHJlc3VsdCBkZWxldGVkICovCisKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBsb25nIGh1bmtfZW5kOworCQl1bnNpZ25lZCBsb25nIHJsaW5lczsKKwkJY29uc3QgY2hhciAqaHVua19jb21tZW50ID0gTlVMTDsKKwkJdW5zaWduZWQgbG9uZyBudWxsX2NvbnRleHQgPSAwOworCisJCXdoaWxlIChsbm8gPD0gY250ICYmICEoc2xpbmVbbG5vXS5mbGFnICYgbWFyaykpIHsKKwkJCWlmIChodW5rX2NvbW1lbnRfbGluZShzbGluZVtsbm9dLmJvbCkpCisJCQkJaHVua19jb21tZW50ID0gc2xpbmVbbG5vXS5ib2w7CisJCQlsbm8rKzsKKwkJfQorCQlpZiAoY250IDwgbG5vKQorCQkJYnJlYWs7CisJCWVsc2UgeworCQkJZm9yIChodW5rX2VuZCA9IGxubyArIDE7IGh1bmtfZW5kIDw9IGNudDsgaHVua19lbmQrKykKKwkJCQlpZiAoIShzbGluZVtodW5rX2VuZF0uZmxhZyAmIG1hcmspKQorCQkJCQlicmVhazsKKwkJfQorCQlybGluZXMgPSBodW5rX2VuZCAtIGxubzsKKwkJaWYgKGNudCA8IGh1bmtfZW5kKQorCQkJcmxpbmVzLS07IC8qIHBvaW50aW5nIGF0IHRoZSBsYXN0IGRlbGV0ZSBodW5rICovCisKKwkJaWYgKCFjb250ZXh0KSB7CisJCQkvKgorCQkJICogRXZlbiB3aGVuIHJ1bm5pbmcgd2l0aCAtLXVuaWZpZWQ9MCwgYWxsCisJCQkgKiBsaW5lcyBpbiB0aGUgaHVuayBuZWVkcyB0byBiZSBwcm9jZXNzZWQgaW4KKwkJCSAqIHRoZSBsb29wIGJlbG93IGluIG9yZGVyIHRvIHNob3cgdGhlCisJCQkgKiBkZWxldGlvbiByZWNvcmRlZCBpbiBsb3N0X2hlYWQuICBIb3dldmVyLAorCQkJICogd2UgZG8gbm90IHdhbnQgdG8gc2hvdyB0aGUgcmVzdWx0aW5nIGxpbmUKKwkJCSAqIHdpdGggYWxsIGJsYW5rIGNvbnRleHQgbWFya2VycyBpbiBzdWNoIGEKKwkJCSAqIGNhc2UuICBDb21wZW5zYXRlLgorCQkJICovCisJCQl1bnNpZ25lZCBsb25nIGo7CisJCQlmb3IgKGogPSBsbm87IGogPCBodW5rX2VuZDsgaisrKQorCQkJCWlmICghKHNsaW5lW2pdLmZsYWcgJiAobWFyay0xKSkpCisJCQkJCW51bGxfY29udGV4dCsrOworCQkJcmxpbmVzIC09IG51bGxfY29udGV4dDsKKwkJfQorCisJCWZwdXRzKGNfZnJhZywgc3Rkb3V0KTsKKwkJZm9yIChpID0gMDsgaSA8PSBudW1fcGFyZW50OyBpKyspIHB1dGNoYXIoY29tYmluZV9tYXJrZXIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJc2hvd19wYXJlbnRfbG5vKHNsaW5lLCBsbm8sIGh1bmtfZW5kLCBpLCBudWxsX2NvbnRleHQpOworCQlwcmludGYoIiArJWx1LCVsdSAiLCBsbm8rMSwgcmxpbmVzKTsKKwkJZm9yIChpID0gMDsgaSA8PSBudW1fcGFyZW50OyBpKyspIHB1dGNoYXIoY29tYmluZV9tYXJrZXIpOworCisJCWlmIChodW5rX2NvbW1lbnQpIHsKKwkJCWludCBjb21tZW50X2VuZCA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDA7IGkrKykgeworCQkJCWludCBjaCA9IGh1bmtfY29tbWVudFtpXSAmIDB4ZmY7CisJCQkJaWYgKCFjaCB8fCBjaCA9PSAnXG4nKQorCQkJCQlicmVhazsKKwkJCQlpZiAoIWlzc3BhY2UoY2gpKQorCQkJCSAgICBjb21tZW50X2VuZCA9IGk7CisJCQl9CisJCQlpZiAoY29tbWVudF9lbmQpCisJCQkJcHJpbnRmKCIlcyVzICVzJXMiLCBjX3Jlc2V0LAorCQkJCQkJICAgIGNfcGxhaW4sIGNfcmVzZXQsCisJCQkJCQkgICAgY19mdW5jKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjb21tZW50X2VuZDsgaSsrKQorCQkJCXB1dGNoYXIoaHVua19jb21tZW50W2ldKTsKKwkJfQorCisJCXByaW50ZigiJXNcbiIsIGNfcmVzZXQpOworCQl3aGlsZSAobG5vIDwgaHVua19lbmQpIHsKKwkJCXN0cnVjdCBsbGluZSAqbGw7CisJCQlpbnQgajsKKwkJCXVuc2lnbmVkIGxvbmcgcF9tYXNrOworCQkJc3RydWN0IHNsaW5lICpzbCA9ICZzbGluZVtsbm8rK107CisJCQlsbCA9IChzbC0+ZmxhZyAmIG5vX3ByZV9kZWxldGUpID8gTlVMTCA6IHNsLT5sb3N0X2hlYWQ7CisJCQl3aGlsZSAobGwpIHsKKwkJCQlmcHV0cyhjX29sZCwgc3Rkb3V0KTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgbnVtX3BhcmVudDsgaisrKSB7CisJCQkJCWlmIChsbC0+cGFyZW50X21hcCAmICgxVUw8PGopKQorCQkJCQkJcHV0Y2hhcignLScpOworCQkJCQllbHNlCisJCQkJCQlwdXRjaGFyKCcgJyk7CisJCQkJfQorCQkJCXNob3dfbGluZV90b19lb2wobGwtPmxpbmUsIC0xLCBjX3Jlc2V0KTsKKwkJCQlsbCA9IGxsLT5uZXh0OworCQkJfQorCQkJaWYgKGNudCA8IGxubykKKwkJCQlicmVhazsKKwkJCXBfbWFzayA9IDE7CisJCQlpZiAoIShzbC0+ZmxhZyAmIChtYXJrLTEpKSkgeworCQkJCS8qCisJCQkJICogVGhpcyBzbGluZSB3YXMgaGVyZSB0byBoYW5nIHRoZQorCQkJCSAqIGxvc3QgbGluZXMgaW4gZnJvbnQgb2YgaXQuCisJCQkJICovCisJCQkJaWYgKCFjb250ZXh0KQorCQkJCQljb250aW51ZTsKKwkJCQlmcHV0cyhjX3BsYWluLCBzdGRvdXQpOworCQkJfQorCQkJZWxzZQorCQkJCWZwdXRzKGNfbmV3LCBzdGRvdXQpOworCQkJZm9yIChqID0gMDsgaiA8IG51bV9wYXJlbnQ7IGorKykgeworCQkJCWlmIChwX21hc2sgJiBzbC0+ZmxhZykKKwkJCQkJcHV0Y2hhcignKycpOworCQkJCWVsc2UKKwkJCQkJcHV0Y2hhcignICcpOworCQkJCXBfbWFzayA8PD0gMTsKKwkJCX0KKwkJCXNob3dfbGluZV90b19lb2woc2wtPmJvbCwgc2wtPmxlbiwgY19yZXNldCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJldXNlX2NvbWJpbmVfZGlmZihzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBsb25nIGNudCwKKwkJCSAgICAgICBpbnQgaSwgaW50IGopCit7CisJLyogV2UgaGF2ZSBhbHJlYWR5IGV4YW1pbmVkIHBhcmVudCBqIGFuZCB3ZSBrbm93IHBhcmVudCBpCisJICogYW5kIHBhcmVudCBqIGFyZSB0aGUgc2FtZSwgc28gcmV1c2UgdGhlIGNvbWJpbmVkIHJlc3VsdAorCSAqIG9mIHBhcmVudCBqIGZvciBwYXJlbnQgaS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGxubywgaW1hc2ssIGptYXNrOworCWltYXNrID0gKDFVTDw8aSk7CisJam1hc2sgPSAoMVVMPDxqKTsKKworCWZvciAobG5vID0gMDsgbG5vIDw9IGNudDsgbG5vKyspIHsKKwkJc3RydWN0IGxsaW5lICpsbCA9IHNsaW5lLT5sb3N0X2hlYWQ7CisJCXNsaW5lLT5wX2xub1tpXSA9IHNsaW5lLT5wX2xub1tqXTsKKwkJd2hpbGUgKGxsKSB7CisJCQlpZiAobGwtPnBhcmVudF9tYXAgJiBqbWFzaykKKwkJCQlsbC0+cGFyZW50X21hcCB8PSBpbWFzazsKKwkJCWxsID0gbGwtPm5leHQ7CisJCX0KKwkJaWYgKHNsaW5lLT5mbGFnICYgam1hc2spCisJCQlzbGluZS0+ZmxhZyB8PSBpbWFzazsKKwkJc2xpbmUrKzsKKwl9CisJLyogdGhlIG92ZXJhbGwgc2l6ZSBvZiB0aGUgZmlsZSAoc2xpbmVbY250XSkgKi8KKwlzbGluZS0+cF9sbm9baV0gPSBzbGluZS0+cF9sbm9bal07Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfcXVvdGVkX3BhdGgoY29uc3QgY2hhciAqaGVhZCwKKwkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICBjb25zdCBjaGFyICpjX21ldGEsIGNvbnN0IGNoYXIgKmNfcmVzZXQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZHN0cigmYnVmLCBjX21ldGEpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgaGVhZCk7CisJcXVvdGVfdHdvX2Nfc3R5bGUoJmJ1ZiwgcHJlZml4LCBwYXRoLCAwKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIGNfcmVzZXQpOworCXB1dHMoYnVmLmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY29tYmluZWRfaGVhZGVyKHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqZWxlbSwKKwkJCQkgaW50IG51bV9wYXJlbnQsCisJCQkJIGludCBkZW5zZSwKKwkJCQkgc3RydWN0IHJldl9pbmZvICpyZXYsCisJCQkJIGludCBtb2RlX2RpZmZlcnMsCisJCQkJIGludCBzaG93X2ZpbGVfaGVhZGVyKQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCA9ICZyZXYtPmRpZmZvcHQ7CisJaW50IGFiYnJldiA9IERJRkZfT1BUX1RTVChvcHQsIEZVTExfSU5ERVgpID8gNDAgOiBERUZBVUxUX0FCQlJFVjsKKwljb25zdCBjaGFyICphX3ByZWZpeCA9IG9wdC0+YV9wcmVmaXggPyBvcHQtPmFfcHJlZml4IDogImEvIjsKKwljb25zdCBjaGFyICpiX3ByZWZpeCA9IG9wdC0+Yl9wcmVmaXggPyBvcHQtPmJfcHJlZml4IDogImIvIjsKKwljb25zdCBjaGFyICpjX21ldGEgPSBkaWZmX2dldF9jb2xvcl9vcHQob3B0LCBESUZGX01FVEFJTkZPKTsKKwljb25zdCBjaGFyICpjX3Jlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG9wdCwgRElGRl9SRVNFVCk7CisJY29uc3QgY2hhciAqYWJiOworCWludCBhZGRlZCA9IDA7CisJaW50IGRlbGV0ZWQgPSAwOworCWludCBpOworCisJaWYgKHJldi0+bG9naW5mbyAmJiAhcmV2LT5ub19jb21taXRfaWQpCisJCXNob3dfbG9nKHJldik7CisKKwlkdW1wX3F1b3RlZF9wYXRoKGRlbnNlID8gImRpZmYgLS1jYyAiIDogImRpZmYgLS1jb21iaW5lZCAiLAorCQkJICIiLCBlbGVtLT5wYXRoLCBjX21ldGEsIGNfcmVzZXQpOworCXByaW50ZigiJXNpbmRleCAiLCBjX21ldGEpOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspIHsKKwkJYWJiID0gZmluZF91bmlxdWVfYWJicmV2KGVsZW0tPnBhcmVudFtpXS5zaGExLAorCQkJCQkgYWJicmV2KTsKKwkJcHJpbnRmKCIlcyVzIiwgaSA/ICIsIiA6ICIiLCBhYmIpOworCX0KKwlhYmIgPSBmaW5kX3VuaXF1ZV9hYmJyZXYoZWxlbS0+c2hhMSwgYWJicmV2KTsKKwlwcmludGYoIi4uJXMlc1xuIiwgYWJiLCBjX3Jlc2V0KTsKKworCWlmIChtb2RlX2RpZmZlcnMpIHsKKwkJZGVsZXRlZCA9ICFlbGVtLT5tb2RlOworCisJCS8qIFdlIHNheSBpdCB3YXMgYWRkZWQgaWYgbm9ib2R5IGhhZCBpdCAqLworCQlhZGRlZCA9ICFkZWxldGVkOworCQlmb3IgKGkgPSAwOyBhZGRlZCAmJiBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJaWYgKGVsZW0tPnBhcmVudFtpXS5zdGF0dXMgIT0KKwkJCSAgICBESUZGX1NUQVRVU19BRERFRCkKKwkJCQlhZGRlZCA9IDA7CisJCWlmIChhZGRlZCkKKwkJCXByaW50ZigiJXNuZXcgZmlsZSBtb2RlICUwNm8iLAorCQkJICAgICAgIGNfbWV0YSwgZWxlbS0+bW9kZSk7CisJCWVsc2UgeworCQkJaWYgKGRlbGV0ZWQpCisJCQkJcHJpbnRmKCIlc2RlbGV0ZWQgZmlsZSAiLCBjX21ldGEpOworCQkJcHJpbnRmKCJtb2RlICIpOworCQkJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQkJCXByaW50ZigiJXMlMDZvIiwgaSA/ICIsIiA6ICIiLAorCQkJCSAgICAgICBlbGVtLT5wYXJlbnRbaV0ubW9kZSk7CisJCQl9CisJCQlpZiAoZWxlbS0+bW9kZSkKKwkJCQlwcmludGYoIi4uJTA2byIsIGVsZW0tPm1vZGUpOworCQl9CisJCXByaW50ZigiJXNcbiIsIGNfcmVzZXQpOworCX0KKworCWlmICghc2hvd19maWxlX2hlYWRlcikKKwkJcmV0dXJuOworCisJaWYgKGFkZGVkKQorCQlkdW1wX3F1b3RlZF9wYXRoKCItLS0gIiwgIiIsICIvZGV2L251bGwiLAorCQkJCSBjX21ldGEsIGNfcmVzZXQpOworCWVsc2UKKwkJZHVtcF9xdW90ZWRfcGF0aCgiLS0tICIsIGFfcHJlZml4LCBlbGVtLT5wYXRoLAorCQkJCSBjX21ldGEsIGNfcmVzZXQpOworCWlmIChkZWxldGVkKQorCQlkdW1wX3F1b3RlZF9wYXRoKCIrKysgIiwgIiIsICIvZGV2L251bGwiLAorCQkJCSBjX21ldGEsIGNfcmVzZXQpOworCWVsc2UKKwkJZHVtcF9xdW90ZWRfcGF0aCgiKysrICIsIGJfcHJlZml4LCBlbGVtLT5wYXRoLAorCQkJCSBjX21ldGEsIGNfcmVzZXQpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3BhdGNoX2RpZmYoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICplbGVtLCBpbnQgbnVtX3BhcmVudCwKKwkJCSAgICBpbnQgZGVuc2UsIGludCB3b3JraW5nX3RyZWVfZmlsZSwKKwkJCSAgICBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAmcmV2LT5kaWZmb3B0OworCXVuc2lnbmVkIGxvbmcgcmVzdWx0X3NpemUsIGNudCwgbG5vOworCWludCByZXN1bHRfZGVsZXRlZCA9IDA7CisJY2hhciAqcmVzdWx0LCAqY3A7CisJc3RydWN0IHNsaW5lICpzbGluZTsgLyogc3Vydml2ZWQgbGluZXMgKi8KKwlpbnQgbW9kZV9kaWZmZXJzID0gMDsKKwlpbnQgaSwgc2hvd19odW5rczsKKwltbWZpbGVfdCByZXN1bHRfZmlsZTsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZjsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udiA9IE5VTEw7CisJaW50IGlzX2JpbmFyeTsKKworCWNvbnRleHQgPSBvcHQtPmNvbnRleHQ7CisJdXNlcmRpZmYgPSB1c2VyZGlmZl9maW5kX2J5X3BhdGgoZWxlbS0+cGF0aCk7CisJaWYgKCF1c2VyZGlmZikKKwkJdXNlcmRpZmYgPSB1c2VyZGlmZl9maW5kX2J5X25hbWUoImRlZmF1bHQiKTsKKwlpZiAoRElGRl9PUFRfVFNUKG9wdCwgQUxMT1dfVEVYVENPTlYpKQorCQl0ZXh0Y29udiA9IHVzZXJkaWZmX2dldF90ZXh0Y29udih1c2VyZGlmZik7CisKKwkvKiBSZWFkIHRoZSByZXN1bHQgb2YgbWVyZ2UgZmlyc3QgKi8KKwlpZiAoIXdvcmtpbmdfdHJlZV9maWxlKQorCQlyZXN1bHQgPSBncmFiX2Jsb2IoZWxlbS0+c2hhMSwgZWxlbS0+bW9kZSwgJnJlc3VsdF9zaXplLAorCQkJCSAgIHRleHRjb252LCBlbGVtLT5wYXRoKTsKKwllbHNlIHsKKwkJLyogVXNlZCBieSBkaWZmLXRyZWUgdG8gcmVhZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUgKi8KKwkJc3RydWN0IHN0YXQgc3Q7CisJCWludCBmZCA9IC0xOworCisJCWlmIChsc3RhdChlbGVtLT5wYXRoLCAmc3QpIDwgMCkKKwkJCWdvdG8gZGVsZXRlZF9maWxlOworCisJCWlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZidWYsIGVsZW0tPnBhdGgsIHN0LnN0X3NpemUpIDwgMCkgeworCQkJCWVycm9yKCJyZWFkbGluayglcyk6ICVzIiwgZWxlbS0+cGF0aCwKKwkJCQkgICAgICBzdHJlcnJvcihlcnJubykpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCXJlc3VsdF9zaXplID0gYnVmLmxlbjsKKwkJCXJlc3VsdCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJCQllbGVtLT5tb2RlID0gY2Fub25fbW9kZShzdC5zdF9tb2RlKTsKKwkJfSBlbHNlIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQkJaWYgKHJlc29sdmVfZ2l0bGlua19yZWYoZWxlbS0+cGF0aCwgIkhFQUQiLCBzaGExKSA8IDApCisJCQkJcmVzdWx0ID0gZ3JhYl9ibG9iKGVsZW0tPnNoYTEsIGVsZW0tPm1vZGUsCisJCQkJCQkgICAmcmVzdWx0X3NpemUsIE5VTEwsIE5VTEwpOworCQkJZWxzZQorCQkJCXJlc3VsdCA9IGdyYWJfYmxvYihzaGExLCBlbGVtLT5tb2RlLAorCQkJCQkJICAgJnJlc3VsdF9zaXplLCBOVUxMLCBOVUxMKTsKKwkJfSBlbHNlIGlmICh0ZXh0Y29udikgeworCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmID0gYWxsb2NfZmlsZXNwZWMoZWxlbS0+cGF0aCk7CisJCQlmaWxsX2ZpbGVzcGVjKGRmLCBudWxsX3NoYTEsIDAsIHN0LnN0X21vZGUpOworCQkJcmVzdWx0X3NpemUgPSBmaWxsX3RleHRjb252KHRleHRjb252LCBkZiwgJnJlc3VsdCk7CisJCQlmcmVlX2ZpbGVzcGVjKGRmKTsKKwkJfSBlbHNlIGlmICgwIDw9IChmZCA9IG9wZW4oZWxlbS0+cGF0aCwgT19SRE9OTFkpKSkgeworCQkJc2l6ZV90IGxlbiA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJCQlzc2l6ZV90IGRvbmU7CisJCQlpbnQgaXNfZmlsZSwgaTsKKworCQkJZWxlbS0+bW9kZSA9IGNhbm9uX21vZGUoc3Quc3RfbW9kZSk7CisJCQkvKiBpZiBzeW1saW5rcyBkb24ndCB3b3JrLCBhc3N1bWUgc3ltbGluayBpZiBhbGwgcGFyZW50cworCQkJICogYXJlIHN5bWxpbmtzCisJCQkgKi8KKwkJCWlzX2ZpbGUgPSBoYXNfc3ltbGlua3M7CisJCQlmb3IgKGkgPSAwOyAhaXNfZmlsZSAmJiBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJCWlzX2ZpbGUgPSAhU19JU0xOSyhlbGVtLT5wYXJlbnRbaV0ubW9kZSk7CisJCQlpZiAoIWlzX2ZpbGUpCisJCQkJZWxlbS0+bW9kZSA9IGNhbm9uX21vZGUoU19JRkxOSyk7CisKKwkJCXJlc3VsdF9zaXplID0gbGVuOworCQkJcmVzdWx0ID0geG1hbGxvYyhsZW4gKyAxKTsKKworCQkJZG9uZSA9IHJlYWRfaW5fZnVsbChmZCwgcmVzdWx0LCBsZW4pOworCQkJaWYgKGRvbmUgPCAwKQorCQkJCWRpZV9lcnJubygicmVhZCBlcnJvciAnJXMnIiwgZWxlbS0+cGF0aCk7CisJCQllbHNlIGlmIChkb25lIDwgbGVuKQorCQkJCWRpZSgiZWFybHkgRU9GICclcyciLCBlbGVtLT5wYXRoKTsKKworCQkJcmVzdWx0W2xlbl0gPSAwOworCisJCQkvKiBJZiBub3QgYSBmYWtlIHN5bWxpbmssIGFwcGx5IGZpbHRlcnMsIGUuZy4gYXV0b2NybGYgKi8KKwkJCWlmIChpc19maWxlKSB7CisJCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQkJCWlmIChjb252ZXJ0X3RvX2dpdChlbGVtLT5wYXRoLCByZXN1bHQsIGxlbiwgJmJ1Ziwgc2FmZV9jcmxmKSkgeworCQkJCQlmcmVlKHJlc3VsdCk7CisJCQkJCXJlc3VsdCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJmxlbik7CisJCQkJCXJlc3VsdF9zaXplID0gbGVuOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJZGVsZXRlZF9maWxlOgorCQkJcmVzdWx0X2RlbGV0ZWQgPSAxOworCQkJcmVzdWx0X3NpemUgPSAwOworCQkJZWxlbS0+bW9kZSA9IDA7CisJCQlyZXN1bHQgPSB4Y2FsbG9jKDEsIDEpOworCQl9CisKKwkJaWYgKDAgPD0gZmQpCisJCQljbG9zZShmZCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQlpZiAoZWxlbS0+cGFyZW50W2ldLm1vZGUgIT0gZWxlbS0+bW9kZSkgeworCQkJbW9kZV9kaWZmZXJzID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHRleHRjb252KQorCQlpc19iaW5hcnkgPSAwOworCWVsc2UgaWYgKHVzZXJkaWZmLT5iaW5hcnkgIT0gLTEpCisJCWlzX2JpbmFyeSA9IHVzZXJkaWZmLT5iaW5hcnk7CisJZWxzZSB7CisJCWlzX2JpbmFyeSA9IGJ1ZmZlcl9pc19iaW5hcnkocmVzdWx0LCByZXN1bHRfc2l6ZSk7CisJCWZvciAoaSA9IDA7ICFpc19iaW5hcnkgJiYgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQkJY2hhciAqYnVmOworCQkJdW5zaWduZWQgbG9uZyBzaXplOworCQkJYnVmID0gZ3JhYl9ibG9iKGVsZW0tPnBhcmVudFtpXS5zaGExLAorCQkJCQllbGVtLT5wYXJlbnRbaV0ubW9kZSwKKwkJCQkJJnNpemUsIE5VTEwsIE5VTEwpOworCQkJaWYgKGJ1ZmZlcl9pc19iaW5hcnkoYnVmLCBzaXplKSkKKwkJCQlpc19iaW5hcnkgPSAxOworCQkJZnJlZShidWYpOworCQl9CisJfQorCWlmIChpc19iaW5hcnkpIHsKKwkJc2hvd19jb21iaW5lZF9oZWFkZXIoZWxlbSwgbnVtX3BhcmVudCwgZGVuc2UsIHJldiwKKwkJCQkgICAgIG1vZGVfZGlmZmVycywgMCk7CisJCXByaW50ZigiQmluYXJ5IGZpbGVzIGRpZmZlclxuIik7CisJCWZyZWUocmVzdWx0KTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoY250ID0gMCwgY3AgPSByZXN1bHQ7IGNwIDwgcmVzdWx0ICsgcmVzdWx0X3NpemU7IGNwKyspIHsKKwkJaWYgKCpjcCA9PSAnXG4nKQorCQkJY250Kys7CisJfQorCWlmIChyZXN1bHRfc2l6ZSAmJiByZXN1bHRbcmVzdWx0X3NpemUtMV0gIT0gJ1xuJykKKwkJY250Kys7IC8qIGluY29tcGxldGUgbGluZSAqLworCisJc2xpbmUgPSB4Y2FsbG9jKGNudCsyLCBzaXplb2YoKnNsaW5lKSk7CisJc2xpbmVbMF0uYm9sID0gcmVzdWx0OworCWZvciAobG5vID0gMDsgbG5vIDw9IGNudCArIDE7IGxubysrKSB7CisJCXNsaW5lW2xub10ubG9zdF90YWlsID0gJnNsaW5lW2xub10ubG9zdF9oZWFkOworCQlzbGluZVtsbm9dLmZsYWcgPSAwOworCX0KKwlmb3IgKGxubyA9IDAsIGNwID0gcmVzdWx0OyBjcCA8IHJlc3VsdCArIHJlc3VsdF9zaXplOyBjcCsrKSB7CisJCWlmICgqY3AgPT0gJ1xuJykgeworCQkJc2xpbmVbbG5vXS5sZW4gPSBjcCAtIHNsaW5lW2xub10uYm9sOworCQkJbG5vKys7CisJCQlpZiAobG5vIDwgY250KQorCQkJCXNsaW5lW2xub10uYm9sID0gY3AgKyAxOworCQl9CisJfQorCWlmIChyZXN1bHRfc2l6ZSAmJiByZXN1bHRbcmVzdWx0X3NpemUtMV0gIT0gJ1xuJykKKwkJc2xpbmVbY250LTFdLmxlbiA9IHJlc3VsdF9zaXplIC0gKHNsaW5lW2NudC0xXS5ib2wgLSByZXN1bHQpOworCisJcmVzdWx0X2ZpbGUucHRyID0gcmVzdWx0OworCXJlc3VsdF9maWxlLnNpemUgPSByZXN1bHRfc2l6ZTsKKworCS8qIEV2ZW4gcF9sbm9bY250KzFdIGlzIHZhbGlkIC0tIHRoYXQgaXMgZm9yIHRoZSBlbmQgbGluZSBudW1iZXIKKwkgKiBmb3IgZGVsZXRpb24gaHVuayBhdCB0aGUgZW5kLgorCSAqLworCXNsaW5lWzBdLnBfbG5vID0geGNhbGxvYygoY250KzIpICogbnVtX3BhcmVudCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlmb3IgKGxubyA9IDA7IGxubyA8PSBjbnQ7IGxubysrKQorCQlzbGluZVtsbm8rMV0ucF9sbm8gPSBzbGluZVtsbm9dLnBfbG5vICsgbnVtX3BhcmVudDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspIHsKKwkJaW50IGo7CisJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJCWlmICghaGFzaGNtcChlbGVtLT5wYXJlbnRbaV0uc2hhMSwKKwkJCQkgICAgIGVsZW0tPnBhcmVudFtqXS5zaGExKSkgeworCQkJCXJldXNlX2NvbWJpbmVfZGlmZihzbGluZSwgY250LCBpLCBqKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBqKQorCQkJY29tYmluZV9kaWZmKGVsZW0tPnBhcmVudFtpXS5zaGExLAorCQkJCSAgICAgZWxlbS0+cGFyZW50W2ldLm1vZGUsCisJCQkJICAgICAmcmVzdWx0X2ZpbGUsIHNsaW5lLAorCQkJCSAgICAgY250LCBpLCBudW1fcGFyZW50LCByZXN1bHRfZGVsZXRlZCwKKwkJCQkgICAgIHRleHRjb252LCBlbGVtLT5wYXRoKTsKKwl9CisKKwlzaG93X2h1bmtzID0gbWFrZV9odW5rcyhzbGluZSwgY250LCBudW1fcGFyZW50LCBkZW5zZSk7CisKKwlpZiAoc2hvd19odW5rcyB8fCBtb2RlX2RpZmZlcnMgfHwgd29ya2luZ190cmVlX2ZpbGUpIHsKKwkJc2hvd19jb21iaW5lZF9oZWFkZXIoZWxlbSwgbnVtX3BhcmVudCwgZGVuc2UsIHJldiwKKwkJCQkgICAgIG1vZGVfZGlmZmVycywgMSk7CisJCWR1bXBfc2xpbmUoc2xpbmUsIGNudCwgbnVtX3BhcmVudCwKKwkJCSAgIG9wdC0+dXNlX2NvbG9yLCByZXN1bHRfZGVsZXRlZCk7CisJfQorCWZyZWUocmVzdWx0KTsKKworCWZvciAobG5vID0gMDsgbG5vIDwgY250OyBsbm8rKykgeworCQlpZiAoc2xpbmVbbG5vXS5sb3N0X2hlYWQpIHsKKwkJCXN0cnVjdCBsbGluZSAqbGwgPSBzbGluZVtsbm9dLmxvc3RfaGVhZDsKKwkJCXdoaWxlIChsbCkgeworCQkJCXN0cnVjdCBsbGluZSAqdG1wID0gbGw7CisJCQkJbGwgPSBsbC0+bmV4dDsKKwkJCQlmcmVlKHRtcCk7CisJCQl9CisJCX0KKwl9CisJZnJlZShzbGluZVswXS5wX2xubyk7CisJZnJlZShzbGluZSk7Cit9CisKKyNkZWZpbmUgQ09MT05TICI6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiIKKworc3RhdGljIHZvaWQgc2hvd19yYXdfZGlmZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnAsIGludCBudW1fcGFyZW50LCBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAmcmV2LT5kaWZmb3B0OworCWludCBpLCBvZmZzZXQ7CisJY29uc3QgY2hhciAqcHJlZml4OworCWludCBsaW5lX3Rlcm1pbmF0aW9uLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uOworCisJbGluZV90ZXJtaW5hdGlvbiA9IG9wdC0+bGluZV90ZXJtaW5hdGlvbjsKKwlpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uID0gJ1x0JzsKKwlpZiAoIWxpbmVfdGVybWluYXRpb24pCisJCWludGVyX25hbWVfdGVybWluYXRpb24gPSAwOworCisJaWYgKHJldi0+bG9naW5mbyAmJiAhcmV2LT5ub19jb21taXRfaWQpCisJCXNob3dfbG9nKHJldik7CisKKwlpZiAob3B0LT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUkFXKSB7CisJCW9mZnNldCA9IHN0cmxlbihDT0xPTlMpIC0gbnVtX3BhcmVudDsKKwkJaWYgKG9mZnNldCA8IDApCisJCQlvZmZzZXQgPSAwOworCQlwcmVmaXggPSBDT0xPTlMgKyBvZmZzZXQ7CisKKwkJLyogU2hvdyB0aGUgbW9kZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQkJcHJpbnRmKCIlcyUwNm8iLCBwcmVmaXgsIHAtPnBhcmVudFtpXS5tb2RlKTsKKwkJCXByZWZpeCA9ICIgIjsKKwkJfQorCQlwcmludGYoIiVzJTA2byIsIHByZWZpeCwgcC0+bW9kZSk7CisKKwkJLyogU2hvdyBzaGExJ3MgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykKKwkJCXByaW50ZigiICVzIiwgZGlmZl91bmlxdWVfYWJicmV2KHAtPnBhcmVudFtpXS5zaGExLAorCQkJCQkJCSBvcHQtPmFiYnJldikpOworCQlwcmludGYoIiAlcyAiLCBkaWZmX3VuaXF1ZV9hYmJyZXYocC0+c2hhMSwgb3B0LT5hYmJyZXYpKTsKKwl9CisKKwlpZiAob3B0LT5vdXRwdXRfZm9ybWF0ICYgKERJRkZfRk9STUFUX1JBVyB8IERJRkZfRk9STUFUX05BTUVfU1RBVFVTKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJcHV0Y2hhcihwLT5wYXJlbnRbaV0uc3RhdHVzKTsKKwkJcHV0Y2hhcihpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uKTsKKwl9CisKKwl3cml0ZV9uYW1lX3F1b3RlZChwLT5wYXRoLCBzdGRvdXQsIGxpbmVfdGVybWluYXRpb24pOworfQorCisvKgorICogVGhlIHJlc3VsdCAocC0+ZWxlbSkgaXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGVpcgorICogcGFyZW50cyBhcmUgdHlwaWNhbGx5IGZyb20gbXVsdGlwbGUgc3RhZ2VzIGR1cmluZyBhIG1lcmdlCisgKiAoaS5lLiBkaWZmLWZpbGVzKSBvciB0aGUgc3RhdGUgaW4gSEVBRCBhbmQgaW4gdGhlIGluZGV4CisgKiAoaS5lLiBkaWZmLWluZGV4KS4KKyAqLwordm9pZCBzaG93X2NvbWJpbmVkX2RpZmYoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLAorCQkgICAgICAgaW50IG51bV9wYXJlbnQsCisJCSAgICAgICBpbnQgZGVuc2UsCisJCSAgICAgICBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAmcmV2LT5kaWZmb3B0OworCWlmICghcC0+bGVuKQorCQlyZXR1cm47CisJaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIChESUZGX0ZPUk1BVF9SQVcgfAorCQkJCSAgRElGRl9GT1JNQVRfTkFNRSB8CisJCQkJICBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykpCisJCXNob3dfcmF3X2RpZmYocCwgbnVtX3BhcmVudCwgcmV2KTsKKwllbHNlIGlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkKKwkJc2hvd19wYXRjaF9kaWZmKHAsIG51bV9wYXJlbnQsIGRlbnNlLCAxLCByZXYpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2NvbWJpbmVkX3BhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIpCit7CisJZnJlZShwYWlyLT50d28pOworCWZyZWUocGFpcik7Cit9CisKKy8qCisgKiBBIGNvbWJpbmVfZGlmZl9wYXRoIGV4cHJlc3NlcyBOIHBhcmVudHMgb24gdGhlIExIUyBhZ2FpbnN0IDEgbWVyZ2UKKyAqIHJlc3VsdC4gU3ludGhlc2l6ZSBhIGRpZmZfZmlsZXBhaXIgdGhhdCBoYXMgTiBlbnRyaWVzIG9uIHRoZSAib25lIgorICogc2lkZSBhbmQgMSBlbnRyeSBvbiB0aGUgInR3byIgc2lkZS4KKyAqCisgKiBJbiB0aGUgZnV0dXJlLCB3ZSBtaWdodCB3YW50IHRvIGFkZCBtb3JlIGRhdGEgdG8gY29tYmluZV9kaWZmX3BhdGgKKyAqIHNvIHRoYXQgd2UgY2FuIGZpbGwgZmllbGRzIHdlIGFyZSBpZ25vcmluZyAobW9zdCBub3RhYmx5LCBzaXplKSBoZXJlLAorICogYnV0IGN1cnJlbnRseSBub2JvZHkgdXNlcyBpdCwgc28gdGhpcyBzaG91bGQgc3VmZmljZSBmb3Igbm93LgorICovCitzdGF0aWMgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmNvbWJpbmVkX3BhaXIoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLAorCQkJCQkgICBpbnQgbnVtX3BhcmVudCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcG9vbDsKKworCXBhaXIgPSB4bWFsbG9jKHNpemVvZigqcGFpcikpOworCXBvb2wgPSB4Y2FsbG9jKG51bV9wYXJlbnQgKyAxLCBzaXplb2Yoc3RydWN0IGRpZmZfZmlsZXNwZWMpKTsKKwlwYWlyLT5vbmUgPSBwb29sICsgMTsKKwlwYWlyLT50d28gPSBwb29sOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQlwYWlyLT5vbmVbaV0ucGF0aCA9IHAtPnBhdGg7CisJCXBhaXItPm9uZVtpXS5tb2RlID0gcC0+cGFyZW50W2ldLm1vZGU7CisJCWhhc2hjcHkocGFpci0+b25lW2ldLnNoYTEsIHAtPnBhcmVudFtpXS5zaGExKTsKKwkJcGFpci0+b25lW2ldLnNoYTFfdmFsaWQgPSAhaXNfbnVsbF9zaGExKHAtPnBhcmVudFtpXS5zaGExKTsKKwkJcGFpci0+b25lW2ldLmhhc19tb3JlX2VudHJpZXMgPSAxOworCX0KKwlwYWlyLT5vbmVbbnVtX3BhcmVudCAtIDFdLmhhc19tb3JlX2VudHJpZXMgPSAwOworCisJcGFpci0+dHdvLT5wYXRoID0gcC0+cGF0aDsKKwlwYWlyLT50d28tPm1vZGUgPSBwLT5tb2RlOworCWhhc2hjcHkocGFpci0+dHdvLT5zaGExLCBwLT5zaGExKTsKKwlwYWlyLT50d28tPnNoYTFfdmFsaWQgPSAhaXNfbnVsbF9zaGExKHAtPnNoYTEpOworCXJldHVybiBwYWlyOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY29tYmluZWRfY2FsbGJhY2soc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCQkJCSAgICAgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwYXRocywKKwkJCQkgICAgIGludCBudW1fcGFyZW50LAorCQkJCSAgICAgaW50IG51bV9wYXRocykKK3sKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnA7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IHE7CisJaW50IGk7CisKKwlxLnF1ZXVlID0geGNhbGxvYyhudW1fcGF0aHMsIHNpemVvZihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKSk7CisJcS5hbGxvYyA9IG51bV9wYXRoczsKKwlxLm5yID0gbnVtX3BhdGhzOworCWZvciAoaSA9IDAsIHAgPSBwYXRoczsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKCFwLT5sZW4pCisJCQljb250aW51ZTsKKwkJcS5xdWV1ZVtpKytdID0gY29tYmluZWRfcGFpcihwLCBudW1fcGFyZW50KTsKKwl9CisJb3B0LT5mb3JtYXRfY2FsbGJhY2soJnEsIG9wdCwgb3B0LT5mb3JtYXRfY2FsbGJhY2tfZGF0YSk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wYXRoczsgaSsrKQorCQlmcmVlX2NvbWJpbmVkX3BhaXIocS5xdWV1ZVtpXSk7CisJZnJlZShxLnF1ZXVlKTsKK30KKwordm9pZCBkaWZmX3RyZWVfY29tYmluZWQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCWNvbnN0IHN0cnVjdCBzaGExX2FycmF5ICpwYXJlbnRzLAorCQkJaW50IGRlbnNlLAorCQkJc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gJnJldi0+ZGlmZm9wdDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZvcHRzOworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcCwgKnBhdGhzID0gTlVMTDsKKwlpbnQgaSwgbnVtX3BhdGhzLCBuZWVkc2VwLCBzaG93X2xvZ19maXJzdCwgbnVtX3BhcmVudCA9IHBhcmVudHMtPm5yOworCisJZGlmZm9wdHMgPSAqb3B0OworCWRpZmZvcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJRElGRl9PUFRfU0VUKCZkaWZmb3B0cywgUkVDVVJTSVZFKTsKKwlESUZGX09QVF9DTFIoJmRpZmZvcHRzLCBBTExPV19FWFRFUk5BTCk7CisKKwlzaG93X2xvZ19maXJzdCA9ICEhcmV2LT5sb2dpbmZvICYmICFyZXYtPm5vX2NvbW1pdF9pZDsKKwluZWVkc2VwID0gMDsKKwkvKiBmaW5kIHNldCBvZiBwYXRocyB0aGF0IGV2ZXJ5Ym9keSB0b3VjaGVzICovCisJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQkvKiBzaG93IHN0YXQgYWdhaW5zdCB0aGUgZmlyc3QgcGFyZW50IGV2ZW4KKwkJICogd2hlbiBkb2luZyBjb21iaW5lZCBkaWZmLgorCQkgKi8KKwkJaW50IHN0YXRfb3B0ID0gKG9wdC0+b3V0cHV0X2Zvcm1hdCAmCisJCQkJKERJRkZfRk9STUFUX05VTVNUQVR8RElGRl9GT1JNQVRfRElGRlNUQVQpKTsKKwkJaWYgKGkgPT0gMCAmJiBzdGF0X29wdCkKKwkJCWRpZmZvcHRzLm91dHB1dF9mb3JtYXQgPSBzdGF0X29wdDsKKwkJZWxzZQorCQkJZGlmZm9wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwkJZGlmZl90cmVlX3NoYTEocGFyZW50cy0+c2hhMVtpXSwgc2hhMSwgIiIsICZkaWZmb3B0cyk7CisJCWRpZmZjb3JlX3N0ZCgmZGlmZm9wdHMpOworCQlwYXRocyA9IGludGVyc2VjdF9wYXRocyhwYXRocywgaSwgbnVtX3BhcmVudCk7CisKKwkJaWYgKHNob3dfbG9nX2ZpcnN0ICYmIGkgPT0gMCkgeworCQkJc2hvd19sb2cocmV2KTsKKwkJCWlmIChyZXYtPnZlcmJvc2VfaGVhZGVyICYmIG9wdC0+b3V0cHV0X2Zvcm1hdCkKKwkJCQlwdXRjaGFyKG9wdC0+bGluZV90ZXJtaW5hdGlvbik7CisJCX0KKwkJZGlmZl9mbHVzaCgmZGlmZm9wdHMpOworCX0KKworCS8qIGZpbmQgb3V0IHN1cnZpdmluZyBwYXRocyAqLworCWZvciAobnVtX3BhdGhzID0gMCwgcCA9IHBhdGhzOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+bGVuKQorCQkJbnVtX3BhdGhzKys7CisJfQorCWlmIChudW1fcGF0aHMpIHsKKwkJaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIChESUZGX0ZPUk1BVF9SQVcgfAorCQkJCQkgIERJRkZfRk9STUFUX05BTUUgfAorCQkJCQkgIERJRkZfRk9STUFUX05BTUVfU1RBVFVTKSkgeworCQkJZm9yIChwID0gcGF0aHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQkJaWYgKHAtPmxlbikKKwkJCQkJc2hvd19yYXdfZGlmZihwLCBudW1fcGFyZW50LCByZXYpOworCQkJfQorCQkJbmVlZHNlcCA9IDE7CisJCX0KKwkJZWxzZSBpZiAob3B0LT5vdXRwdXRfZm9ybWF0ICYKKwkJCSAoRElGRl9GT1JNQVRfTlVNU1RBVHxESUZGX0ZPUk1BVF9ESUZGU1RBVCkpCisJCQluZWVkc2VwID0gMTsKKwkJZWxzZSBpZiAob3B0LT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfQ0FMTEJBQ0spCisJCQloYW5kbGVfY29tYmluZWRfY2FsbGJhY2sob3B0LCBwYXRocywgbnVtX3BhcmVudCwgbnVtX3BhdGhzKTsKKworCQlpZiAob3B0LT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUEFUQ0gpIHsKKwkJCWlmIChuZWVkc2VwKQorCQkJCXB1dGNoYXIob3B0LT5saW5lX3Rlcm1pbmF0aW9uKTsKKwkJCWZvciAocCA9IHBhdGhzOyBwOyBwID0gcC0+bmV4dCkgeworCQkJCWlmIChwLT5sZW4pCisJCQkJCXNob3dfcGF0Y2hfZGlmZihwLCBudW1fcGFyZW50LCBkZW5zZSwKKwkJCQkJCQkwLCByZXYpOworCQkJfQorCQl9CisJfQorCisJLyogQ2xlYW4gdGhpbmdzIHVwICovCisJd2hpbGUgKHBhdGhzKSB7CisJCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqdG1wID0gcGF0aHM7CisJCXBhdGhzID0gcGF0aHMtPm5leHQ7CisJCWZyZWUodG1wKTsKKwl9Cit9CisKK3ZvaWQgZGlmZl90cmVlX2NvbWJpbmVkX21lcmdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IGRlbnNlLAorCQkJICAgICAgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisJc3RydWN0IHNoYTFfYXJyYXkgcGFyZW50cyA9IFNIQTFfQVJSQVlfSU5JVDsKKworCXdoaWxlIChwYXJlbnQpIHsKKwkJc2hhMV9hcnJheV9hcHBlbmQoJnBhcmVudHMsIHBhcmVudC0+aXRlbS0+b2JqZWN0LnNoYTEpOworCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJfQorCWRpZmZfdHJlZV9jb21iaW5lZChjb21taXQtPm9iamVjdC5zaGExLCAmcGFyZW50cywgZGVuc2UsIHJldik7CisJc2hhMV9hcnJheV9jbGVhcigmcGFyZW50cyk7Cit9CmRpZmYgLS1naXQgYS9jb21tYW5kLWxpc3QudHh0IGIvY29tbWFuZC1saXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThjZmVjCi0tLSAvZGV2L251bGwKKysrIGIvY29tbWFuZC1saXN0LnR4dApAQCAtMCwwICsxLDE0MSBAQAorIyBMaXN0IG9mIGtub3duIGdpdCBjb21tYW5kcy4KKyMgY29tbWFuZCBuYW1lCQkJCWNhdGVnb3J5IFtkZXByZWNhdGVkXSBbY29tbW9uXQorZ2l0LWFkZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gY29tbW9uCitnaXQtYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWFubm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1hcHBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LWFyY2hpbXBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1hcmNoaXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtYmlzZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KK2dpdC1ibGFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtYnJhbmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KK2dpdC1idW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtY2F0LWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtY2hlY2stYXR0ciAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1jaGVja291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluIGNvbW1vbgorZ2l0LWNoZWNrb3V0LWluZGV4ICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtY2hlY2stcmVmLWZvcm1hdCAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1jaGVycnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtY2hlcnJ5LXBpY2sgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWNpdG9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1jbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtY2xvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KK2dpdC1jb2x1bW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNvbW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gY29tbW9uCitnaXQtY29tbWl0LXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1jb3VudC1vYmplY3RzICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtY3JlZGVudGlhbCAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1jcmVkZW50aWFsLWNhY2hlICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNyZWRlbnRpYWwtc3RvcmUgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtY3ZzZXhwb3J0Y29tbWl0ICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LWN2c2ltcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1jdnNzZXJ2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtZGFlbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hpbmdyZXBvc2l0b3JpZXMKK2dpdC1kZXNjcmliZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtZGlmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KK2dpdC1kaWZmLWZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1kaWZmLWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1kaWZmLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1kaWZmdG9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtZmFzdC1leHBvcnQJCQkJYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtZmFzdC1pbXBvcnQJCQkJYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KK2dpdC1mZXRjaC1wYWNrICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGluZ3JlcG9zaXRvcmllcworZ2l0LWZpbHRlci1icmFuY2ggICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycworZ2l0LWZtdC1tZXJnZS1tc2cgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtZm9yLWVhY2gtcmVmICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtZm9ybWF0LXBhdGNoICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWZzY2sJICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LWdjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1nZXQtdGFyLWNvbW1pdC1pZCAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtZ3JlcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KK2dpdC1ndWkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtaGFzaC1vYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1oZWxwCQkJCWFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1odHRwLWJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGluZ3JlcG9zaXRvcmllcworZ2l0LWh0dHAtZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtaHR0cC1wdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC1pbWFwLXNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtaW5kZXgtcGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluIGNvbW1vbgorZ2l0LWluc3Rhd2ViICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KK2dpdC1sb3N0LWZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMJZGVwcmVjYXRlZAorZ2l0LWxzLWZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LWxzLXJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LWxzLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LW1haWxpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtbWFpbHNwbGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1tZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluIGNvbW1vbgorZ2l0LW1lcmdlLWJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LW1lcmdlLWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtbWVyZ2UtaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1tZXJnZS1vbmUtZmlsZSAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LW1lcmdldG9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycworZ2l0LW1lcmdlLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1ta3RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LW1rdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtbXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KK2dpdC1uYW1lLXJldiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1ub3RlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtcDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LXBhY2stb2JqZWN0cyAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtcGFjay1yZWR1bmRhbnQgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtcGFjay1yZWZzICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtcGFyc2UtcmVtb3RlICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC1wYXRjaC1pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LXBlZWstcmVtb3RlICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCWRlcHJlY2F0ZWQKK2dpdC1wcnVuZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1wcnVuZS1wYWNrZWQgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LXB1bGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gY29tbW9uCitnaXQtcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KK2dpdC1xdWlsdGltcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcmVhZC10cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1yZWJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluIGNvbW1vbgorZ2l0LXJlY2VpdmUtcGFjayAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtcmVmbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtcmVsaW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtcmVtb3RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtcmVwYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtcmVwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtcmVwby1jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCWRlcHJlY2F0ZWQKK2dpdC1yZXF1ZXN0LXB1bGwgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcmVyZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LXJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gY29tbW9uCitnaXQtcmV2ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXJldi1saXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXJldi1wYXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluIGNvbW1vbgorZ2l0LXNlbmQtZW1haWwgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1zZW5kLXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGluZ3JlcG9zaXRvcmllcworZ2l0LXNoZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtc2hvcnRsb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXNob3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gY29tbW9uCitnaXQtc2hvdy1icmFuY2ggICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LXNob3ctaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXNob3ctcmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXNoLWkxOG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtc2gtc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1zdGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiBjb21tb24KK2dpdC1zdHJpcHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LXN1Ym1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1zdm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtc3ltYm9saWMtcmVmICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC10YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluIGNvbW1vbgorZ2l0LXRhci10cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycwlkZXByZWNhdGVkCitnaXQtdW5wYWNrLWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtdW5wYWNrLW9iamVjdHMgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC11cGRhdGUtaW5kZXggICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LXVwZGF0ZS1yZWYgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtdXBkYXRlLXNlcnZlci1pbmZvICAgICAgICAgICAgICAgICAgc3luY2hpbmdyZXBvc2l0b3JpZXMKK2dpdC11cGxvYWQtYXJjaGl2ZSAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LXVwbG9hZC1wYWNrICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtdmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtdmVyaWZ5LXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtdmVyaWZ5LXRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0d2ViICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC13aGF0Y2hhbmdlZCAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtd3JpdGUtdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKZGlmZiAtLWdpdCBhL2NvbW1pdC5jIGIvY29tbWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzYmM5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1pdC5jCkBAIC0wLDAgKzEsMTM0OSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibWVyZ2Vzb3J0LmgiCisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqcmVhZF9jb21taXRfZXh0cmFfaGVhZGVyX2xpbmVzKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqKik7CisKK2ludCBzYXZlX2NvbW1pdF9idWZmZXIgPSAxOworCitjb25zdCBjaGFyICpjb21taXRfdHlwZSA9ICJjb21taXQiOworCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqY2hlY2tfY29tbWl0KHN0cnVjdCBvYmplY3QgKm9iaiwKKwkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgIGludCBxdWlldCkKK3sKKwlpZiAob2JqLT50eXBlICE9IE9CSl9DT01NSVQpIHsKKwkJaWYgKCFxdWlldCkKKwkJCWVycm9yKCJPYmplY3QgJXMgaXMgYSAlcywgbm90IGEgY29tbWl0IiwKKwkJCSAgICAgIHNoYTFfdG9faGV4KHNoYTEpLCB0eXBlbmFtZShvYmotPnR5cGUpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiAoc3RydWN0IGNvbW1pdCAqKSBvYmo7Cit9CisKK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCQkgICAgICBpbnQgcXVpZXQpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChzaGExKSwgTlVMTCwgMCk7CisKKwlpZiAoIW9iaikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNoZWNrX2NvbW1pdChvYmosIHNoYTEsIHF1aWV0KTsKK30KKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTEsIDApOworfQorCitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0X29yX2RpZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpyZWZfbmFtZSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJaWYgKCFjKQorCQlkaWUoXygiY291bGQgbm90IHBhcnNlICVzIiksIHJlZl9uYW1lKTsKKwlpZiAoaGFzaGNtcChzaGExLCBjLT5vYmplY3Quc2hhMSkpIHsKKwkJd2FybmluZyhfKCIlcyAlcyBpcyBub3QgYSBjb21taXQhIiksCisJCQlyZWZfbmFtZSwgc2hhMV90b19oZXgoc2hhMSkpOworCX0KKwlyZXR1cm4gYzsKK30KKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3Qoc2hhMSk7CisJaWYgKCFvYmopCisJCXJldHVybiBjcmVhdGVfb2JqZWN0KHNoYTEsIE9CSl9DT01NSVQsIGFsbG9jX2NvbW1pdF9ub2RlKCkpOworCWlmICghb2JqLT50eXBlKQorCQlvYmotPnR5cGUgPSBPQkpfQ09NTUlUOworCXJldHVybiBjaGVja19jb21taXQob2JqLCBzaGExLCAwKTsKK30KKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJaWYgKGdldF9zaGExX2NvbW1pdHRpc2gobmFtZSwgc2hhMSkpCisJCXJldHVybiBOVUxMOworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCWlmICghY29tbWl0IHx8IHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gY29tbWl0OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYXJzZV9jb21taXRfZGF0ZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKnRhaWwpCit7CisJY29uc3QgY2hhciAqZGF0ZXB0cjsKKworCWlmIChidWYgKyA2ID49IHRhaWwpCisJCXJldHVybiAwOworCWlmIChtZW1jbXAoYnVmLCAiYXV0aG9yIiwgNikpCisJCXJldHVybiAwOworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnXG4nKQorCQkvKiBuYWRhICovOworCWlmIChidWYgKyA5ID49IHRhaWwpCisJCXJldHVybiAwOworCWlmIChtZW1jbXAoYnVmLCAiY29tbWl0dGVyIiwgOSkpCisJCXJldHVybiAwOworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnPicpCisJCS8qIG5hZGEgKi87CisJaWYgKGJ1ZiA+PSB0YWlsKQorCQlyZXR1cm4gMDsKKwlkYXRlcHRyID0gYnVmOworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnXG4nKQorCQkvKiBuYWRhICovOworCWlmIChidWYgPj0gdGFpbCkKKwkJcmV0dXJuIDA7CisJLyogZGF0ZXB0ciA8IGJ1ZiAmJiBidWZbLTFdID09ICdcbicsIHNvIHN0cnRvdWwgd2lsbCBzdG9wIGF0IGJ1Zi0xICovCisJcmV0dXJuIHN0cnRvdWwoZGF0ZXB0ciwgTlVMTCwgMTApOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9ncmFmdCAqKmNvbW1pdF9ncmFmdDsKK3N0YXRpYyBpbnQgY29tbWl0X2dyYWZ0X2FsbG9jLCBjb21taXRfZ3JhZnRfbnI7CisKK3N0YXRpYyBpbnQgY29tbWl0X2dyYWZ0X3Bvcyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBsbywgaGk7CisJbG8gPSAwOworCWhpID0gY29tbWl0X2dyYWZ0X25yOworCXdoaWxlIChsbyA8IGhpKSB7CisJCWludCBtaSA9IChsbyArIGhpKSAvIDI7CisJCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0ID0gY29tbWl0X2dyYWZ0W21pXTsKKwkJaW50IGNtcCA9IGhhc2hjbXAoc2hhMSwgZ3JhZnQtPnNoYTEpOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBtaTsKKwkJaWYgKGNtcCA8IDApCisJCQloaSA9IG1pOworCQllbHNlCisJCQlsbyA9IG1pICsgMTsKKwl9CisJcmV0dXJuIC1sbyAtIDE7Cit9CisKK2ludCByZWdpc3Rlcl9jb21taXRfZ3JhZnQoc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQsIGludCBpZ25vcmVfZHVwcykKK3sKKwlpbnQgcG9zID0gY29tbWl0X2dyYWZ0X3BvcyhncmFmdC0+c2hhMSk7CisKKwlpZiAoMCA8PSBwb3MpIHsKKwkJaWYgKGlnbm9yZV9kdXBzKQorCQkJZnJlZShncmFmdCk7CisJCWVsc2UgeworCQkJZnJlZShjb21taXRfZ3JhZnRbcG9zXSk7CisJCQljb21taXRfZ3JhZnRbcG9zXSA9IGdyYWZ0OworCQl9CisJCXJldHVybiAxOworCX0KKwlwb3MgPSAtcG9zIC0gMTsKKwlpZiAoY29tbWl0X2dyYWZ0X2FsbG9jIDw9ICsrY29tbWl0X2dyYWZ0X25yKSB7CisJCWNvbW1pdF9ncmFmdF9hbGxvYyA9IGFsbG9jX25yKGNvbW1pdF9ncmFmdF9hbGxvYyk7CisJCWNvbW1pdF9ncmFmdCA9IHhyZWFsbG9jKGNvbW1pdF9ncmFmdCwKKwkJCQkJc2l6ZW9mKCpjb21taXRfZ3JhZnQpICoKKwkJCQkJY29tbWl0X2dyYWZ0X2FsbG9jKTsKKwl9CisJaWYgKHBvcyA8IGNvbW1pdF9ncmFmdF9ucikKKwkJbWVtbW92ZShjb21taXRfZ3JhZnQgKyBwb3MgKyAxLAorCQkJY29tbWl0X2dyYWZ0ICsgcG9zLAorCQkJKGNvbW1pdF9ncmFmdF9uciAtIHBvcyAtIDEpICoKKwkJCXNpemVvZigqY29tbWl0X2dyYWZ0KSk7CisJY29tbWl0X2dyYWZ0W3Bvc10gPSBncmFmdDsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNvbW1pdF9ncmFmdCAqcmVhZF9ncmFmdF9saW5lKGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwkvKiBUaGUgZm9ybWF0IGlzIGp1c3QgIkNvbW1pdCBQYXJlbnQxIFBhcmVudDIgLi4uXG4iICovCisJaW50IGk7CisJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQgPSBOVUxMOworCisJd2hpbGUgKGxlbiAmJiBpc3NwYWNlKGJ1ZltsZW4tMV0pKQorCQlidWZbLS1sZW5dID0gJ1wwJzsKKwlpZiAoYnVmWzBdID09ICcjJyB8fCBidWZbMF0gPT0gJ1wwJykKKwkJcmV0dXJuIE5VTEw7CisJaWYgKChsZW4gKyAxKSAlIDQxKQorCQlnb3RvIGJhZF9ncmFmdF9kYXRhOworCWkgPSAobGVuICsgMSkgLyA0MSAtIDE7CisJZ3JhZnQgPSB4bWFsbG9jKHNpemVvZigqZ3JhZnQpICsgMjAgKiBpKTsKKwlncmFmdC0+bnJfcGFyZW50ID0gaTsKKwlpZiAoZ2V0X3NoYTFfaGV4KGJ1ZiwgZ3JhZnQtPnNoYTEpKQorCQlnb3RvIGJhZF9ncmFmdF9kYXRhOworCWZvciAoaSA9IDQwOyBpIDwgbGVuOyBpICs9IDQxKSB7CisJCWlmIChidWZbaV0gIT0gJyAnKQorCQkJZ290byBiYWRfZ3JhZnRfZGF0YTsKKwkJaWYgKGdldF9zaGExX2hleChidWYgKyBpICsgMSwgZ3JhZnQtPnBhcmVudFtpLzQxXSkpCisJCQlnb3RvIGJhZF9ncmFmdF9kYXRhOworCX0KKwlyZXR1cm4gZ3JhZnQ7CisKK2JhZF9ncmFmdF9kYXRhOgorCWVycm9yKCJiYWQgZ3JhZnQgZGF0YTogJXMiLCBidWYpOworCWZyZWUoZ3JhZnQpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHJlYWRfZ3JhZnRfZmlsZShjb25zdCBjaGFyICpncmFmdF9maWxlKQoreworCUZJTEUgKmZwID0gZm9wZW4oZ3JhZnRfZmlsZSwgInIiKTsKKwljaGFyIGJ1ZlsxMDI0XTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSkgeworCQkvKiBUaGUgZm9ybWF0IGlzIGp1c3QgIkNvbW1pdCBQYXJlbnQxIFBhcmVudDIgLi4uXG4iICovCisJCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKKwkJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQgPSByZWFkX2dyYWZ0X2xpbmUoYnVmLCBsZW4pOworCQlpZiAoIWdyYWZ0KQorCQkJY29udGludWU7CisJCWlmIChyZWdpc3Rlcl9jb21taXRfZ3JhZnQoZ3JhZnQsIDEpKQorCQkJZXJyb3IoImR1cGxpY2F0ZSBncmFmdCBkYXRhOiAlcyIsIGJ1Zik7CisJfQorCWZjbG9zZShmcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfY29tbWl0X2dyYWZ0KHZvaWQpCit7CisJc3RhdGljIGludCBjb21taXRfZ3JhZnRfcHJlcGFyZWQ7CisJY2hhciAqZ3JhZnRfZmlsZTsKKworCWlmIChjb21taXRfZ3JhZnRfcHJlcGFyZWQpCisJCXJldHVybjsKKwlncmFmdF9maWxlID0gZ2V0X2dyYWZ0X2ZpbGUoKTsKKwlyZWFkX2dyYWZ0X2ZpbGUoZ3JhZnRfZmlsZSk7CisJLyogbWFrZSBzdXJlIHNoYWxsb3dzIGFyZSByZWFkICovCisJaXNfcmVwb3NpdG9yeV9zaGFsbG93KCk7CisJY29tbWl0X2dyYWZ0X3ByZXBhcmVkID0gMTsKK30KKworc3RydWN0IGNvbW1pdF9ncmFmdCAqbG9va3VwX2NvbW1pdF9ncmFmdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBwb3M7CisJcHJlcGFyZV9jb21taXRfZ3JhZnQoKTsKKwlwb3MgPSBjb21taXRfZ3JhZnRfcG9zKHNoYTEpOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gY29tbWl0X2dyYWZ0W3Bvc107Cit9CisKK2ludCBmb3JfZWFjaF9jb21taXRfZ3JhZnQoZWFjaF9jb21taXRfZ3JhZnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IGksIHJldDsKKwlmb3IgKGkgPSByZXQgPSAwOyBpIDwgY29tbWl0X2dyYWZ0X25yICYmICFyZXQ7IGkrKykKKwkJcmV0ID0gZm4oY29tbWl0X2dyYWZ0W2ldLCBjYl9kYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdW5yZWdpc3Rlcl9zaGFsbG93KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IHBvcyA9IGNvbW1pdF9ncmFmdF9wb3Moc2hhMSk7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiAtMTsKKwlpZiAocG9zICsgMSA8IGNvbW1pdF9ncmFmdF9ucikKKwkJbWVtbW92ZShjb21taXRfZ3JhZnQgKyBwb3MsIGNvbW1pdF9ncmFmdCArIHBvcyArIDEsCisJCQkJc2l6ZW9mKHN0cnVjdCBjb21taXRfZ3JhZnQgKikKKwkJCQkqIChjb21taXRfZ3JhZnRfbnIgLSBwb3MgLSAxKSk7CisJY29tbWl0X2dyYWZ0X25yLS07CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9jb21taXRfYnVmZmVyKHN0cnVjdCBjb21taXQgKml0ZW0sIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWNvbnN0IGNoYXIgKnRhaWwgPSBidWZmZXI7CisJY29uc3QgY2hhciAqYnVmcHRyID0gYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgcGFyZW50WzIwXTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcHRyOworCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0OworCisJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCisJCXJldHVybiAwOworCWl0ZW0tPm9iamVjdC5wYXJzZWQgPSAxOworCXRhaWwgKz0gc2l6ZTsKKwlpZiAodGFpbCA8PSBidWZwdHIgKyA0NiB8fCBtZW1jbXAoYnVmcHRyLCAidHJlZSAiLCA1KSB8fCBidWZwdHJbNDVdICE9ICdcbicpCisJCXJldHVybiBlcnJvcigiYm9ndXMgY29tbWl0IG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CisJaWYgKGdldF9zaGExX2hleChidWZwdHIgKyA1LCBwYXJlbnQpIDwgMCkKKwkJcmV0dXJuIGVycm9yKCJiYWQgdHJlZSBwb2ludGVyIGluIGNvbW1pdCAlcyIsCisJCQkgICAgIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CisJaXRlbS0+dHJlZSA9IGxvb2t1cF90cmVlKHBhcmVudCk7CisJYnVmcHRyICs9IDQ2OyAvKiAidHJlZSAiICsgImhleCBzaGExIiArICJcbiIgKi8KKwlwcHRyID0gJml0ZW0tPnBhcmVudHM7CisKKwlncmFmdCA9IGxvb2t1cF9jb21taXRfZ3JhZnQoaXRlbS0+b2JqZWN0LnNoYTEpOworCXdoaWxlIChidWZwdHIgKyA0OCA8IHRhaWwgJiYgIW1lbWNtcChidWZwdHIsICJwYXJlbnQgIiwgNykpIHsKKwkJc3RydWN0IGNvbW1pdCAqbmV3X3BhcmVudDsKKworCQlpZiAodGFpbCA8PSBidWZwdHIgKyA0OCB8fAorCQkgICAgZ2V0X3NoYTFfaGV4KGJ1ZnB0ciArIDcsIHBhcmVudCkgfHwKKwkJICAgIGJ1ZnB0cls0N10gIT0gJ1xuJykKKwkJCXJldHVybiBlcnJvcigiYmFkIHBhcmVudHMgaW4gY29tbWl0ICVzIiwgc2hhMV90b19oZXgoaXRlbS0+b2JqZWN0LnNoYTEpKTsKKwkJYnVmcHRyICs9IDQ4OworCQkvKgorCQkgKiBUaGUgY2xvbmUgaXMgc2hhbGxvdyBpZiBucl9wYXJlbnQgPCAwLCBhbmQgd2UgbXVzdAorCQkgKiBub3QgdHJhdmVyc2UgaXRzIHJlYWwgcGFyZW50cyBldmVuIHdoZW4gd2UgdW5oaWRlIHRoZW0uCisJCSAqLworCQlpZiAoZ3JhZnQgJiYgKGdyYWZ0LT5ucl9wYXJlbnQgPCAwIHx8IGdyYWZ0c19yZXBsYWNlX3BhcmVudHMpKQorCQkJY29udGludWU7CisJCW5ld19wYXJlbnQgPSBsb29rdXBfY29tbWl0KHBhcmVudCk7CisJCWlmIChuZXdfcGFyZW50KQorCQkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQobmV3X3BhcmVudCwgcHB0ciktPm5leHQ7CisJfQorCWlmIChncmFmdCkgeworCQlpbnQgaTsKKwkJc3RydWN0IGNvbW1pdCAqbmV3X3BhcmVudDsKKwkJZm9yIChpID0gMDsgaSA8IGdyYWZ0LT5ucl9wYXJlbnQ7IGkrKykgeworCQkJbmV3X3BhcmVudCA9IGxvb2t1cF9jb21taXQoZ3JhZnQtPnBhcmVudFtpXSk7CisJCQlpZiAoIW5ld19wYXJlbnQpCisJCQkJY29udGludWU7CisJCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChuZXdfcGFyZW50LCBwcHRyKS0+bmV4dDsKKwkJfQorCX0KKwlpdGVtLT5kYXRlID0gcGFyc2VfY29tbWl0X2RhdGUoYnVmcHRyLCB0YWlsKTsKKworCXJldHVybiAwOworfQorCitpbnQgcGFyc2VfY29tbWl0KHN0cnVjdCBjb21taXQgKml0ZW0pCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXZvaWQgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHJldDsKKworCWlmICghaXRlbSkKKwkJcmV0dXJuIC0xOworCWlmIChpdGVtLT5vYmplY3QucGFyc2VkKQorCQlyZXR1cm4gMDsKKwlidWZmZXIgPSByZWFkX3NoYTFfZmlsZShpdGVtLT5vYmplY3Quc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgcmVhZCAlcyIsCisJCQkgICAgIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CisJaWYgKHR5cGUgIT0gT0JKX0NPTU1JVCkgeworCQlmcmVlKGJ1ZmZlcik7CisJCXJldHVybiBlcnJvcigiT2JqZWN0ICVzIG5vdCBhIGNvbW1pdCIsCisJCQkgICAgIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CisJfQorCXJldCA9IHBhcnNlX2NvbW1pdF9idWZmZXIoaXRlbSwgYnVmZmVyLCBzaXplKTsKKwlpZiAoc2F2ZV9jb21taXRfYnVmZmVyICYmICFyZXQpIHsKKwkJaXRlbS0+YnVmZmVyID0gYnVmZmVyOworCQlyZXR1cm4gMDsKKwl9CisJZnJlZShidWZmZXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBmaW5kX2NvbW1pdF9zdWJqZWN0KGNvbnN0IGNoYXIgKmNvbW1pdF9idWZmZXIsIGNvbnN0IGNoYXIgKipzdWJqZWN0KQoreworCWNvbnN0IGNoYXIgKmVvbDsKKwljb25zdCBjaGFyICpwID0gY29tbWl0X2J1ZmZlcjsKKworCXdoaWxlICgqcCAmJiAoKnAgIT0gJ1xuJyB8fCBwWzFdICE9ICdcbicpKQorCQlwKys7CisJaWYgKCpwKSB7CisJCXAgKz0gMjsKKwkJZm9yIChlb2wgPSBwOyAqZW9sICYmICplb2wgIT0gJ1xuJzsgZW9sKyspCisJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwl9IGVsc2UKKwkJZW9sID0gcDsKKworCSpzdWJqZWN0ID0gcDsKKworCXJldHVybiBlb2wgLSBwOworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1pdF9saXN0X2luc2VydChzdHJ1Y3QgY29tbWl0ICppdGVtLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0X3ApCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXdfbGlzdCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21taXRfbGlzdCkpOworCW5ld19saXN0LT5pdGVtID0gaXRlbTsKKwluZXdfbGlzdC0+bmV4dCA9ICpsaXN0X3A7CisJKmxpc3RfcCA9IG5ld19saXN0OworCXJldHVybiBuZXdfbGlzdDsKK30KKwordW5zaWduZWQgY29tbWl0X2xpc3RfY291bnQoY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICpsKQoreworCXVuc2lnbmVkIGMgPSAwOworCWZvciAoOyBsOyBsID0gbC0+bmV4dCApCisJCWMrKzsKKwlyZXR1cm4gYzsKK30KKwordm9pZCBmcmVlX2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRlbXAgPSBsaXN0OworCQlsaXN0ID0gdGVtcC0+bmV4dDsKKwkJZnJlZSh0ZW1wKTsKKwl9Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqIGNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHN0cnVjdCBjb21taXQgKml0ZW0sIHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHAgPSBsaXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwl3aGlsZSAoKHAgPSAqcHApICE9IE5VTEwpIHsKKwkJaWYgKHAtPml0ZW0tPmRhdGUgPCBpdGVtLT5kYXRlKSB7CisJCQlicmVhazsKKwkJfQorCQlwcCA9ICZwLT5uZXh0OworCX0KKwlyZXR1cm4gY29tbWl0X2xpc3RfaW5zZXJ0KGl0ZW0sIHBwKTsKK30KKworc3RhdGljIGludCBjb21taXRfbGlzdF9jb21wYXJlX2J5X2RhdGUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwl1bnNpZ25lZCBsb25nIGFfZGF0ZSA9ICgoY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICopYSktPml0ZW0tPmRhdGU7CisJdW5zaWduZWQgbG9uZyBiX2RhdGUgPSAoKGNvbnN0IHN0cnVjdCBjb21taXRfbGlzdCAqKWIpLT5pdGVtLT5kYXRlOworCWlmIChhX2RhdGUgPCBiX2RhdGUpCisJCXJldHVybiAxOworCWlmIChhX2RhdGUgPiBiX2RhdGUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKmNvbW1pdF9saXN0X2dldF9uZXh0KGNvbnN0IHZvaWQgKmEpCit7CisJcmV0dXJuICgoY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICopYSktPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1pdF9saXN0X3NldF9uZXh0KHZvaWQgKmEsIHZvaWQgKm5leHQpCit7CisJKChzdHJ1Y3QgY29tbWl0X2xpc3QgKilhKS0+bmV4dCA9IG5leHQ7Cit9CisKK3ZvaWQgY29tbWl0X2xpc3Rfc29ydF9ieV9kYXRlKHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpCit7CisJKmxpc3QgPSBsbGlzdF9tZXJnZXNvcnQoKmxpc3QsIGNvbW1pdF9saXN0X2dldF9uZXh0LCBjb21taXRfbGlzdF9zZXRfbmV4dCwKKwkJCQljb21taXRfbGlzdF9jb21wYXJlX2J5X2RhdGUpOworfQorCitzdHJ1Y3QgY29tbWl0ICpwb3BfbW9zdF9yZWNlbnRfY29tbWl0KHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QsCisJCQkJICAgICAgdW5zaWduZWQgaW50IG1hcmspCit7CisJc3RydWN0IGNvbW1pdCAqcmV0ID0gKCpsaXN0KS0+aXRlbTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSByZXQtPnBhcmVudHM7CisJc3RydWN0IGNvbW1pdF9saXN0ICpvbGQgPSAqbGlzdDsKKworCSpsaXN0ID0gKCpsaXN0KS0+bmV4dDsKKwlmcmVlKG9sZCk7CisKKwl3aGlsZSAocGFyZW50cykgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwYXJlbnRzLT5pdGVtOworCQlpZiAoIXBhcnNlX2NvbW1pdChjb21taXQpICYmICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBtYXJrKSkgeworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gbWFyazsKKwkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKGNvbW1pdCwgbGlzdCk7CisJCX0KKwkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2NvbW1pdF9tYXJrc18xKHN0cnVjdCBjb21taXRfbGlzdCAqKnBsaXN0LAorCQkJCSBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHVuc2lnbmVkIGludCBtYXJrKQoreworCXdoaWxlIChjb21taXQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJCWlmICghKG1hcmsgJiBjb21taXQtPm9iamVjdC5mbGFncykpCisJCQlyZXR1cm47CisKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgJj0gfm1hcms7CisKKwkJcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKwkJaWYgKCFwYXJlbnRzKQorCQkJcmV0dXJuOworCisJCXdoaWxlICgocGFyZW50cyA9IHBhcmVudHMtPm5leHQpKQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudHMtPml0ZW0sIHBsaXN0KTsKKworCQljb21taXQgPSBjb21taXQtPnBhcmVudHMtPml0ZW07CisJfQorfQorCit2b2lkIGNsZWFyX2NvbW1pdF9tYXJrcyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHVuc2lnbmVkIGludCBtYXJrKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEw7CisJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgJmxpc3QpOworCXdoaWxlIChsaXN0KQorCQljbGVhcl9jb21taXRfbWFya3NfMSgmbGlzdCwgcG9wX2NvbW1pdCgmbGlzdCksIG1hcmspOworfQorCit2b2lkIGNsZWFyX2NvbW1pdF9tYXJrc19mb3Jfb2JqZWN0X2FycmF5KHN0cnVjdCBvYmplY3RfYXJyYXkgKmEsIHVuc2lnbmVkIG1hcmspCit7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhLT5ucjsgaSsrKSB7CisJCW9iamVjdCA9IGEtPm9iamVjdHNbaV0uaXRlbTsKKwkJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KG9iamVjdC0+c2hhMSwgMSk7CisJCWlmIChjb21taXQpCisJCQljbGVhcl9jb21taXRfbWFya3MoY29tbWl0LCBtYXJrKTsKKwl9Cit9CisKK3N0cnVjdCBjb21taXQgKnBvcF9jb21taXQoc3RydWN0IGNvbW1pdF9saXN0ICoqc3RhY2spCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICp0b3AgPSAqc3RhY2s7CisJc3RydWN0IGNvbW1pdCAqaXRlbSA9IHRvcCA/IHRvcC0+aXRlbSA6IE5VTEw7CisKKwlpZiAodG9wKSB7CisJCSpzdGFjayA9IHRvcC0+bmV4dDsKKwkJZnJlZSh0b3ApOworCX0KKwlyZXR1cm4gaXRlbTsKK30KKworLyoKKyAqIFBlcmZvcm1zIGFuIGluLXBsYWNlIHRvcG9sb2dpY2FsIHNvcnQgb24gdGhlIGxpc3Qgc3VwcGxpZWQuCisgKi8KK3ZvaWQgc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcihzdHJ1Y3QgY29tbWl0X2xpc3QgKiogbGlzdCwgaW50IGxpZm8pCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0LCAqb3JpZyA9ICpsaXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqd29yaywgKippbnNlcnQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHB0cjsKKworCWlmICghb3JpZykKKwkJcmV0dXJuOworCSpsaXN0ID0gTlVMTDsKKworCS8qIE1hcmsgdGhlbSBhbmQgY2xlYXIgdGhlIGluZGVncmVlICovCisJZm9yIChuZXh0ID0gb3JpZzsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbmV4dC0+aXRlbTsKKwkJY29tbWl0LT5pbmRlZ3JlZSA9IDE7CisJfQorCisJLyogdXBkYXRlIHRoZSBpbmRlZ3JlZSAqLworCWZvciAobmV4dCA9IG9yaWc7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqIHBhcmVudHMgPSBuZXh0LT5pdGVtLT5wYXJlbnRzOworCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKworCQkJaWYgKHBhcmVudC0+aW5kZWdyZWUpCisJCQkJcGFyZW50LT5pbmRlZ3JlZSsrOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCX0KKwl9CisKKwkvKgorCSAqIGZpbmQgdGhlIHRpcHMKKwkgKgorCSAqIHRpcHMgYXJlIG5vZGVzIG5vdCByZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgbm9kZSBpbiB0aGUgbGlzdAorCSAqCisJICogdGhlIHRpcHMgc2VydmUgYXMgYSBzdGFydGluZyBzZXQgZm9yIHRoZSB3b3JrIHF1ZXVlLgorCSAqLworCXdvcmsgPSBOVUxMOworCWluc2VydCA9ICZ3b3JrOworCWZvciAobmV4dCA9IG9yaWc7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IG5leHQtPml0ZW07CisKKwkJaWYgKGNvbW1pdC0+aW5kZWdyZWUgPT0gMSkKKwkJCWluc2VydCA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBpbnNlcnQpLT5uZXh0OworCX0KKworCS8qIHByb2Nlc3MgdGhlIGxpc3QgaW4gdG9wb2xvZ2ljYWwgb3JkZXIgKi8KKwlpZiAoIWxpZm8pCisJCWNvbW1pdF9saXN0X3NvcnRfYnlfZGF0ZSgmd29yayk7CisKKwlwcHRyID0gbGlzdDsKKwkqbGlzdCA9IE5VTEw7CisJd2hpbGUgKHdvcmspIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsICp3b3JrX2l0ZW07CisKKwkJd29ya19pdGVtID0gd29yazsKKwkJd29yayA9IHdvcmtfaXRlbS0+bmV4dDsKKwkJd29ya19pdGVtLT5uZXh0ID0gTlVMTDsKKworCQljb21taXQgPSB3b3JrX2l0ZW0tPml0ZW07CisJCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50cyA7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCisJCQlpZiAoIXBhcmVudC0+aW5kZWdyZWUpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBwYXJlbnRzIGFyZSBvbmx5IGVucXVldWVkIGZvciBlbWlzc2lvbgorCQkJICogd2hlbiBhbGwgdGhlaXIgY2hpbGRyZW4gaGF2ZSBiZWVuIGVtaXR0ZWQgdGhlcmVieQorCQkJICogZ3VhcmFudGVlaW5nIHRvcG9sb2dpY2FsIG9yZGVyLgorCQkJICovCisJCQlpZiAoLS1wYXJlbnQtPmluZGVncmVlID09IDEpIHsKKwkJCQlpZiAoIWxpZm8pCisJCQkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHBhcmVudCwgJndvcmspOworCQkJCWVsc2UKKwkJCQkJY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudCwgJndvcmspOworCQkJfQorCQl9CisJCS8qCisJCSAqIHdvcmtfaXRlbSBpcyBhIGNvbW1pdCBhbGwgb2Ygd2hvc2UgY2hpbGRyZW4KKwkJICogaGF2ZSBhbHJlYWR5IGJlZW4gZW1pdHRlZC4gd2UgY2FuIGVtaXQgaXQgbm93LgorCQkgKi8KKwkJY29tbWl0LT5pbmRlZ3JlZSA9IDA7CisJCSpwcHRyID0gd29ya19pdGVtOworCQlwcHRyID0gJndvcmtfaXRlbS0+bmV4dDsKKwl9Cit9CisKKy8qIG1lcmdlLWJhc2Ugc3R1ZmYgKi8KKworLyogYml0cyAjMC4uMTUgaW4gcmV2aXNpb24uaCAqLworI2RlZmluZSBQQVJFTlQxCQkoMXU8PDE2KQorI2RlZmluZSBQQVJFTlQyCQkoMXU8PDE3KQorI2RlZmluZSBTVEFMRQkJKDF1PDwxOCkKKyNkZWZpbmUgUkVTVUxUCQkoMXU8PDE5KQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYWxsX2ZsYWdzID0gKFBBUkVOVDEgfCBQQVJFTlQyIHwgU1RBTEUgfCBSRVNVTFQpOworCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTVEFMRSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gY29tbWl0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogYWxsIGlucHV0IGNvbW1pdHMgaW4gb25lIGFuZCB0d29zW10gbXVzdCBoYXZlIGJlZW4gcGFyc2VkISAqLworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqcGFpbnRfZG93bl90b19jb21tb24oc3RydWN0IGNvbW1pdCAqb25lLCBpbnQgbiwgc3RydWN0IGNvbW1pdCAqKnR3b3MpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCA9IE5VTEw7CisJaW50IGk7CisKKwlvbmUtPm9iamVjdC5mbGFncyB8PSBQQVJFTlQxOworCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKG9uZSwgJmxpc3QpOworCWlmICghbikKKwkJcmV0dXJuIGxpc3Q7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQl0d29zW2ldLT5vYmplY3QuZmxhZ3MgfD0gUEFSRU5UMjsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUodHdvc1tpXSwgJmxpc3QpOworCX0KKworCXdoaWxlIChpbnRlcmVzdGluZyhsaXN0KSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0OworCQlpbnQgZmxhZ3M7CisKKwkJY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJbmV4dCA9IGxpc3QtPm5leHQ7CisJCWZyZWUobGlzdCk7CisJCWxpc3QgPSBuZXh0OworCisJCWZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3MgJiAoUEFSRU5UMSB8IFBBUkVOVDIgfCBTVEFMRSk7CisJCWlmIChmbGFncyA9PSAoUEFSRU5UMSB8IFBBUkVOVDIpKSB7CisJCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIFJFU1VMVCkpIHsKKwkJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBSRVNVTFQ7CisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUoY29tbWl0LCAmcmVzdWx0KTsKKwkJCX0KKwkJCS8qIE1hcmsgcGFyZW50cyBvZiBhIGZvdW5kIG1lcmdlIHN0YWxlICovCisJCQlmbGFncyB8PSBTVEFMRTsKKwkJfQorCQlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudHMtPml0ZW07CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJCWlmICgocC0+b2JqZWN0LmZsYWdzICYgZmxhZ3MpID09IGZsYWdzKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHBhcnNlX2NvbW1pdChwKSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBmbGFnczsKKwkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHAsICZsaXN0KTsKKwkJfQorCX0KKworCWZyZWVfY29tbWl0X2xpc3QobGlzdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqbWVyZ2VfYmFzZXNfbWFueShzdHJ1Y3QgY29tbWl0ICpvbmUsIGludCBuLCBzdHJ1Y3QgY29tbWl0ICoqdHdvcykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0ID0gTlVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKG9uZSA9PSB0d29zW2ldKQorCQkJLyoKKwkJCSAqIFdlIGRvIG5vdCBtYXJrIHRoaXMgZXZlbiB3aXRoIFJFU1VMVCBzbyB3ZSBkbyBub3QKKwkJCSAqIGhhdmUgdG8gY2xlYW4gaXQgdXAuCisJCQkgKi8KKwkJCXJldHVybiBjb21taXRfbGlzdF9pbnNlcnQob25lLCAmcmVzdWx0KTsKKwl9CisKKwlpZiAocGFyc2VfY29tbWl0KG9uZSkpCisJCXJldHVybiBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKHBhcnNlX2NvbW1pdCh0d29zW2ldKSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCWxpc3QgPSBwYWludF9kb3duX3RvX2NvbW1vbihvbmUsIG4sIHR3b3MpOworCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0ID0gbGlzdC0+bmV4dDsKKwkJaWYgKCEobGlzdC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgU1RBTEUpKQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUobGlzdC0+aXRlbSwgJnJlc3VsdCk7CisJCWZyZWUobGlzdCk7CisJCWxpc3QgPSBuZXh0OworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9vY3RvcHVzX21lcmdlX2Jhc2VzKHN0cnVjdCBjb21taXRfbGlzdCAqaW4pCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICppLCAqaiwgKmssICpyZXQgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwdHIgPSAmcmV0OworCisJZm9yIChpID0gaW47IGk7IGkgPSBpLT5uZXh0KSB7CisJCWlmICghcmV0KQorCQkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQoaS0+aXRlbSwgcHB0ciktPm5leHQ7CisJCWVsc2UgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpuZXcgPSBOVUxMLCAqZW5kID0gTlVMTDsKKworCQkJZm9yIChqID0gcmV0OyBqOyBqID0gai0+bmV4dCkgeworCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXM7CisJCQkJYmFzZXMgPSBnZXRfbWVyZ2VfYmFzZXMoaS0+aXRlbSwgai0+aXRlbSwgMSk7CisJCQkJaWYgKCFuZXcpCisJCQkJCW5ldyA9IGJhc2VzOworCQkJCWVsc2UKKwkJCQkJZW5kLT5uZXh0ID0gYmFzZXM7CisJCQkJZm9yIChrID0gYmFzZXM7IGs7IGsgPSBrLT5uZXh0KQorCQkJCQllbmQgPSBrOworCQkJfQorCQkJcmV0ID0gbmV3OworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX3JlZHVuZGFudChzdHJ1Y3QgY29tbWl0ICoqYXJyYXksIGludCBjbnQpCit7CisJLyoKKwkgKiBTb21lIGNvbW1pdCBpbiB0aGUgYXJyYXkgbWF5IGJlIGFuIGFuY2VzdG9yIG9mCisJICogYW5vdGhlciBjb21taXQuICBNb3ZlIHN1Y2ggY29tbWl0IHRvIHRoZSBlbmQgb2YKKwkgKiB0aGUgYXJyYXksIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBjb21taXRzIHRoYXQKKwkgKiBhcmUgaW5kZXBlbmRlbnQgZnJvbSBlYWNoIG90aGVyLgorCSAqLworCXN0cnVjdCBjb21taXQgKip3b3JrOworCXVuc2lnbmVkIGNoYXIgKnJlZHVuZGFudDsKKwlpbnQgKmZpbGxlZF9pbmRleDsKKwlpbnQgaSwgaiwgZmlsbGVkOworCisJd29yayA9IHhjYWxsb2MoY250LCBzaXplb2YoKndvcmspKTsKKwlyZWR1bmRhbnQgPSB4Y2FsbG9jKGNudCwgMSk7CisJZmlsbGVkX2luZGV4ID0geG1hbGxvYyhzaXplb2YoKmZpbGxlZF9pbmRleCkgKiAoY250IC0gMSkpOworCisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQlwYXJzZV9jb21taXQoYXJyYXlbaV0pOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbjsKKworCQlpZiAocmVkdW5kYW50W2ldKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IGZpbGxlZCA9IDA7IGogPCBjbnQ7IGorKykgeworCQkJaWYgKGkgPT0gaiB8fCByZWR1bmRhbnRbal0pCisJCQkJY29udGludWU7CisJCQlmaWxsZWRfaW5kZXhbZmlsbGVkXSA9IGo7CisJCQl3b3JrW2ZpbGxlZCsrXSA9IGFycmF5W2pdOworCQl9CisJCWNvbW1vbiA9IHBhaW50X2Rvd25fdG9fY29tbW9uKGFycmF5W2ldLCBmaWxsZWQsIHdvcmspOworCQlpZiAoYXJyYXlbaV0tPm9iamVjdC5mbGFncyAmIFBBUkVOVDIpCisJCQlyZWR1bmRhbnRbaV0gPSAxOworCQlmb3IgKGogPSAwOyBqIDwgZmlsbGVkOyBqKyspCisJCQlpZiAod29ya1tqXS0+b2JqZWN0LmZsYWdzICYgUEFSRU5UMSkKKwkJCQlyZWR1bmRhbnRbZmlsbGVkX2luZGV4W2pdXSA9IDE7CisJCWNsZWFyX2NvbW1pdF9tYXJrcyhhcnJheVtpXSwgYWxsX2ZsYWdzKTsKKwkJZm9yIChqID0gMDsgaiA8IGZpbGxlZDsgaisrKQorCQkJY2xlYXJfY29tbWl0X21hcmtzKHdvcmtbal0sIGFsbF9mbGFncyk7CisJCWZyZWVfY29tbWl0X2xpc3QoY29tbW9uKTsKKwl9CisKKwkvKiBOb3cgY29sbGVjdCB0aGUgcmVzdWx0ICovCisJbWVtY3B5KHdvcmssIGFycmF5LCBzaXplb2YoKmFycmF5KSAqIGNudCk7CisJZm9yIChpID0gZmlsbGVkID0gMDsgaSA8IGNudDsgaSsrKQorCQlpZiAoIXJlZHVuZGFudFtpXSkKKwkJCWFycmF5W2ZpbGxlZCsrXSA9IHdvcmtbaV07CisJZm9yIChqID0gZmlsbGVkLCBpID0gMDsgaSA8IGNudDsgaSsrKQorCQlpZiAocmVkdW5kYW50W2ldKQorCQkJYXJyYXlbaisrXSA9IHdvcmtbaV07CisJZnJlZSh3b3JrKTsKKwlmcmVlKHJlZHVuZGFudCk7CisJZnJlZShmaWxsZWRfaW5kZXgpOworCXJldHVybiBmaWxsZWQ7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqZ2V0X21lcmdlX2Jhc2VzX21hbnkoc3RydWN0IGNvbW1pdCAqb25lLAorCQkJCQkgaW50IG4sCisJCQkJCSBzdHJ1Y3QgY29tbWl0ICoqdHdvcywKKwkJCQkJIGludCBjbGVhbnVwKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgY29tbWl0ICoqcnNsdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdDsKKwlpbnQgY250LCBpOworCisJcmVzdWx0ID0gbWVyZ2VfYmFzZXNfbWFueShvbmUsIG4sIHR3b3MpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKG9uZSA9PSB0d29zW2ldKQorCQkJcmV0dXJuIHJlc3VsdDsKKwl9CisJaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC0+bmV4dCkgeworCQlpZiAoY2xlYW51cCkgeworCQkJY2xlYXJfY29tbWl0X21hcmtzKG9uZSwgYWxsX2ZsYWdzKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQkJY2xlYXJfY29tbWl0X21hcmtzKHR3b3NbaV0sIGFsbF9mbGFncyk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSAqLworCWNudCA9IDA7CisJbGlzdCA9IHJlc3VsdDsKKwl3aGlsZSAobGlzdCkgeworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJY250Kys7CisJfQorCXJzbHQgPSB4Y2FsbG9jKGNudCwgc2l6ZW9mKCpyc2x0KSk7CisJZm9yIChsaXN0ID0gcmVzdWx0LCBpID0gMDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisJCXJzbHRbaSsrXSA9IGxpc3QtPml0ZW07CisJZnJlZV9jb21taXRfbGlzdChyZXN1bHQpOworCisJY2xlYXJfY29tbWl0X21hcmtzKG9uZSwgYWxsX2ZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQljbGVhcl9jb21taXRfbWFya3ModHdvc1tpXSwgYWxsX2ZsYWdzKTsKKworCWNudCA9IHJlbW92ZV9yZWR1bmRhbnQocnNsdCwgY250KTsKKwlyZXN1bHQgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUocnNsdFtpXSwgJnJlc3VsdCk7CisJZnJlZShyc2x0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9tZXJnZV9iYXNlcyhzdHJ1Y3QgY29tbWl0ICpvbmUsIHN0cnVjdCBjb21taXQgKnR3bywKKwkJCQkgICAgaW50IGNsZWFudXApCit7CisJcmV0dXJuIGdldF9tZXJnZV9iYXNlc19tYW55KG9uZSwgMSwgJnR3bywgY2xlYW51cCk7Cit9CisKKy8qCisgKiBJcyAiY29tbWl0IiBhIGRlY2VuZGFudCBvZiBvbmUgb2YgdGhlIGVsZW1lbnRzIG9uIHRoZSAid2l0aF9jb21taXQiIGxpc3Q/CisgKi8KK2ludCBpc19kZXNjZW5kYW50X29mKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9saXN0ICp3aXRoX2NvbW1pdCkKK3sKKwlpZiAoIXdpdGhfY29tbWl0KQorCQlyZXR1cm4gMTsKKwl3aGlsZSAod2l0aF9jb21taXQpIHsKKwkJc3RydWN0IGNvbW1pdCAqb3RoZXI7CisKKwkJb3RoZXIgPSB3aXRoX2NvbW1pdC0+aXRlbTsKKwkJd2l0aF9jb21taXQgPSB3aXRoX2NvbW1pdC0+bmV4dDsKKwkJaWYgKGluX21lcmdlX2Jhc2VzKG90aGVyLCBjb21taXQpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogSXMgImNvbW1pdCIgYW4gYW5jZXN0b3Igb2YgKGkuZS4gcmVhY2hhYmxlIGZyb20pIHRoZSAicmVmZXJlbmNlIj8KKyAqLworaW50IGluX21lcmdlX2Jhc2VzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdCAqcmVmZXJlbmNlKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXM7CisJaW50IHJldCA9IDA7CisKKwlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkgfHwgcGFyc2VfY29tbWl0KHJlZmVyZW5jZSkpCisJCXJldHVybiByZXQ7CisKKwliYXNlcyA9IHBhaW50X2Rvd25fdG9fY29tbW9uKGNvbW1pdCwgMSwgJnJlZmVyZW5jZSk7CisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgUEFSRU5UMikKKwkJcmV0ID0gMTsKKwljbGVhcl9jb21taXRfbWFya3MoY29tbWl0LCBhbGxfZmxhZ3MpOworCWNsZWFyX2NvbW1pdF9tYXJrcyhyZWZlcmVuY2UsIGFsbF9mbGFncyk7CisJZnJlZV9jb21taXRfbGlzdChiYXNlcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpyZWR1Y2VfaGVhZHMoc3RydWN0IGNvbW1pdF9saXN0ICpoZWFkcykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQgPSBOVUxMLCAqKnRhaWwgPSAmcmVzdWx0OworCXN0cnVjdCBjb21taXQgKiphcnJheTsKKwlpbnQgbnVtX2hlYWQsIGk7CisKKwlpZiAoIWhlYWRzKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFVuaXF1aWZ5ICovCisJZm9yIChwID0gaGVhZHM7IHA7IHAgPSBwLT5uZXh0KQorCQlwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJj0gflNUQUxFOworCWZvciAocCA9IGhlYWRzLCBudW1faGVhZCA9IDA7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBTVEFMRSkKKwkJCWNvbnRpbnVlOworCQlwLT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gU1RBTEU7CisJCW51bV9oZWFkKys7CisJfQorCWFycmF5ID0geGNhbGxvYyhzaXplb2YoKmFycmF5KSwgbnVtX2hlYWQpOworCWZvciAocCA9IGhlYWRzLCBpID0gMDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPml0ZW0tPm9iamVjdC5mbGFncyAmIFNUQUxFKSB7CisJCQlhcnJheVtpKytdID0gcC0+aXRlbTsKKwkJCXAtPml0ZW0tPm9iamVjdC5mbGFncyAmPSB+U1RBTEU7CisJCX0KKwl9CisJbnVtX2hlYWQgPSByZW1vdmVfcmVkdW5kYW50KGFycmF5LCBudW1faGVhZCk7CisJZm9yIChpID0gMDsgaSA8IG51bV9oZWFkOyBpKyspCisJCXRhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGFycmF5W2ldLCB0YWlsKS0+bmV4dDsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY29uc3QgY2hhciBncGdfc2lnX2hlYWRlcltdID0gImdwZ3NpZyI7CitzdGF0aWMgY29uc3QgaW50IGdwZ19zaWdfaGVhZGVyX2xlbiA9IHNpemVvZihncGdfc2lnX2hlYWRlcikgLSAxOworCitzdGF0aWMgaW50IGRvX3NpZ25fY29tbWl0KHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqa2V5aWQpCit7CisJc3RydWN0IHN0cmJ1ZiBzaWcgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaW5zcG9zLCBjb3B5cG9zOworCisJLyogZmluZCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIgKi8KKwlpbnNwb3MgPSBzdHJzdHIoYnVmLT5idWYsICJcblxuIikgLSBidWYtPmJ1ZiArIDE7CisKKwlpZiAoIWtleWlkIHx8ICEqa2V5aWQpCisJCWtleWlkID0gZ2V0X3NpZ25pbmdfa2V5KCk7CisJaWYgKHNpZ25fYnVmZmVyKGJ1ZiwgJnNpZywga2V5aWQpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzaWcpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChjb3B5cG9zID0gMDsgc2lnLmJ1Zltjb3B5cG9zXTsgKSB7CisJCWNvbnN0IGNoYXIgKmJvbCA9IHNpZy5idWYgKyBjb3B5cG9zOworCQljb25zdCBjaGFyICplb2wgPSBzdHJjaHJudWwoYm9sLCAnXG4nKTsKKwkJaW50IGxlbiA9IChlb2wgLSBib2wpICsgISEqZW9sOworCisJCWlmICghY29weXBvcykgeworCQkJc3RyYnVmX2luc2VydChidWYsIGluc3BvcywgZ3BnX3NpZ19oZWFkZXIsIGdwZ19zaWdfaGVhZGVyX2xlbik7CisJCQlpbnNwb3MgKz0gZ3BnX3NpZ19oZWFkZXJfbGVuOworCQl9CisJCXN0cmJ1Zl9pbnNlcnQoYnVmLCBpbnNwb3MrKywgIiAiLCAxKTsKKwkJc3RyYnVmX2luc2VydChidWYsIGluc3BvcywgYm9sLCBsZW4pOworCQlpbnNwb3MgKz0gbGVuOworCQljb3B5cG9zICs9IGxlbjsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNpZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9zaWduZWRfY29tbWl0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQlzdHJ1Y3Qgc3RyYnVmICpwYXlsb2FkLCBzdHJ1Y3Qgc3RyYnVmICpzaWduYXR1cmUpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWZmZXIgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWludCBpbl9zaWduYXR1cmUsIHNhd19zaWduYXR1cmUgPSAtMTsKKwljaGFyICpsaW5lLCAqdGFpbDsKKworCWlmICghYnVmZmVyIHx8IHR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJZ290byBjbGVhbnVwOworCisJbGluZSA9IGJ1ZmZlcjsKKwl0YWlsID0gYnVmZmVyICsgc2l6ZTsKKwlpbl9zaWduYXR1cmUgPSAwOworCXNhd19zaWduYXR1cmUgPSAwOworCXdoaWxlIChsaW5lIDwgdGFpbCkgeworCQljb25zdCBjaGFyICpzaWcgPSBOVUxMOworCQljaGFyICpuZXh0ID0gbWVtY2hyKGxpbmUsICdcbicsIHRhaWwgLSBsaW5lKTsKKworCQluZXh0ID0gbmV4dCA/IG5leHQgKyAxIDogdGFpbDsKKwkJaWYgKGluX3NpZ25hdHVyZSAmJiBsaW5lWzBdID09ICcgJykKKwkJCXNpZyA9IGxpbmUgKyAxOworCQllbHNlIGlmICghcHJlZml4Y21wKGxpbmUsIGdwZ19zaWdfaGVhZGVyKSAmJgorCQkJIGxpbmVbZ3BnX3NpZ19oZWFkZXJfbGVuXSA9PSAnICcpCisJCQlzaWcgPSBsaW5lICsgZ3BnX3NpZ19oZWFkZXJfbGVuICsgMTsKKwkJaWYgKHNpZykgeworCQkJc3RyYnVmX2FkZChzaWduYXR1cmUsIHNpZywgbmV4dCAtIHNpZyk7CisJCQlzYXdfc2lnbmF0dXJlID0gMTsKKwkJCWluX3NpZ25hdHVyZSA9IDE7CisJCX0gZWxzZSB7CisJCQlpZiAoKmxpbmUgPT0gJ1xuJykKKwkJCQkvKiBkdW1wIHRoZSB3aG9sZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciAqLworCQkJCW5leHQgPSB0YWlsOworCQkJc3RyYnVmX2FkZChwYXlsb2FkLCBsaW5lLCBuZXh0IC0gbGluZSk7CisJCQlpbl9zaWduYXR1cmUgPSAwOworCQl9CisJCWxpbmUgPSBuZXh0OworCX0KKyBjbGVhbnVwOgorCWZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gc2F3X3NpZ25hdHVyZTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3NpZ25lZF90YWcoc3RydWN0IGNvbW1pdCAqcGFyZW50LCBzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqKip0YWlsKQoreworCXN0cnVjdCBtZXJnZV9yZW1vdGVfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqbWVyZ2V0YWc7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgbGVuOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWRlc2MgPSBtZXJnZV9yZW1vdGVfdXRpbChwYXJlbnQpOworCWlmICghZGVzYyB8fCAhZGVzYy0+b2JqKQorCQlyZXR1cm47CisJYnVmID0gcmVhZF9zaGExX2ZpbGUoZGVzYy0+b2JqLT5zaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmIHx8IHR5cGUgIT0gT0JKX1RBRykKKwkJZ290byBmcmVlX3JldHVybjsKKwlsZW4gPSBwYXJzZV9zaWduYXR1cmUoYnVmLCBzaXplKTsKKwlpZiAoc2l6ZSA9PSBsZW4pCisJCWdvdG8gZnJlZV9yZXR1cm47CisJLyoKKwkgKiBXZSBjb3VsZCB2ZXJpZnkgdGhpcyBzaWduYXR1cmUgYW5kIGVpdGhlciBvbWl0IHRoZSB0YWcgd2hlbgorCSAqIGl0IGRvZXMgbm90IHZhbGlkYXRlLCBidXQgdGhlIGludGVncmF0b3IgbWF5IG5vdCBoYXZlIHRoZQorCSAqIHB1YmxpYyBrZXkgb2YgdGhlIHNpZ25lciBvZiB0aGUgdGFnIGhlIGlzIG1lcmdpbmcsIHdoaWxlIGEKKwkgKiBsYXRlciBhdWRpdG9yIG1heSBoYXZlIGl0IHdoaWxlIGF1ZGl0aW5nLCBzbyBsZXQncyBub3QgcnVuCisJICogdmVyaWZ5LXNpZ25lZC1idWZmZXIgaGVyZSBmb3Igbm93Li4uCisJICoKKwkgKiBpZiAodmVyaWZ5X3NpZ25lZF9idWZmZXIoYnVmLCBsZW4sIGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgLi4uKSkKKwkgKgl3YXJuKCJ3YXJuaW5nOiBzaWduZWQgdGFnIHVudmVyaWZpZWQuIik7CisJICovCisJbWVyZ2V0YWcgPSB4Y2FsbG9jKDEsIHNpemVvZigqbWVyZ2V0YWcpKTsKKwltZXJnZXRhZy0+a2V5ID0geHN0cmR1cCgibWVyZ2V0YWciKTsKKwltZXJnZXRhZy0+dmFsdWUgPSBidWY7CisJbWVyZ2V0YWctPmxlbiA9IHNpemU7CisKKwkqKnRhaWwgPSBtZXJnZXRhZzsKKwkqdGFpbCA9ICZtZXJnZXRhZy0+bmV4dDsKKwlyZXR1cm47CisKK2ZyZWVfcmV0dXJuOgorCWZyZWUoYnVmKTsKK30KKwordm9pZCBhcHBlbmRfbWVyZ2VfdGFnX2hlYWRlcnMoc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLAorCQkJICAgICAgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKioqdGFpbCkKK3sKKwl3aGlsZSAocGFyZW50cykgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCQloYW5kbGVfc2lnbmVkX3RhZyhwYXJlbnQsIHRhaWwpOworCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9leHRyYV9oZWFkZXIoc3RydWN0IHN0cmJ1ZiAqYnVmZmVyLAorCQkJICAgICBzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEpCit7CisJc3RyYnVmX2FkZHN0cihidWZmZXIsIGV4dHJhLT5rZXkpOworCWlmIChleHRyYS0+bGVuKQorCQlzdHJidWZfYWRkX2xpbmVzKGJ1ZmZlciwgIiAiLCBleHRyYS0+dmFsdWUsIGV4dHJhLT5sZW4pOworCWVsc2UKKwkJc3RyYnVmX2FkZGNoKGJ1ZmZlciwgJ1xuJyk7Cit9CisKK3N0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpyZWFkX2NvbW1pdF9leHRyYV9oZWFkZXJzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIgKipleGNsdWRlKQoreworCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWZmZXIgPSByZWFkX3NoYTFfZmlsZShjb21taXQtPm9iamVjdC5zaGExLCAmdHlwZSwgJnNpemUpOworCWlmIChidWZmZXIgJiYgdHlwZSA9PSBPQkpfQ09NTUlUKQorCQlleHRyYSA9IHJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcl9saW5lcyhidWZmZXIsIHNpemUsIGV4Y2x1ZGUpOworCWZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gZXh0cmE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0YW5kYXJkX2hlYWRlcl9maWVsZChjb25zdCBjaGFyICpmaWVsZCwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gKChsZW4gPT0gNCAmJiAhbWVtY21wKGZpZWxkLCAidHJlZSAiLCA1KSkgfHwKKwkJKGxlbiA9PSA2ICYmICFtZW1jbXAoZmllbGQsICJwYXJlbnQgIiwgNykpIHx8CisJCShsZW4gPT0gNiAmJiAhbWVtY21wKGZpZWxkLCAiYXV0aG9yICIsIDcpKSB8fAorCQkobGVuID09IDkgJiYgIW1lbWNtcChmaWVsZCwgImNvbW1pdHRlciAiLCAxMCkpIHx8CisJCShsZW4gPT0gOCAmJiAhbWVtY21wKGZpZWxkLCAiZW5jb2RpbmcgIiwgOSkpKTsKK30KKworc3RhdGljIGludCBleGNsdWRlZF9oZWFkZXJfZmllbGQoY29uc3QgY2hhciAqZmllbGQsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKipleGNsdWRlKQoreworCWlmICghZXhjbHVkZSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKmV4Y2x1ZGUpIHsKKwkJc2l6ZV90IHhsZW4gPSBzdHJsZW4oKmV4Y2x1ZGUpOworCQlpZiAobGVuID09IHhsZW4gJiYKKwkJICAgICFtZW1jbXAoZmllbGQsICpleGNsdWRlLCB4bGVuKSAmJiBmaWVsZFt4bGVuXSA9PSAnICcpCisJCQlyZXR1cm4gMTsKKwkJZXhjbHVkZSsrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpyZWFkX2NvbW1pdF9leHRyYV9oZWFkZXJfbGluZXMoCisJY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwljb25zdCBjaGFyICoqZXhjbHVkZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEgPSBOVUxMLCAqKnRhaWwgPSAmZXh0cmEsICppdCA9IE5VTEw7CisJY29uc3QgY2hhciAqbGluZSwgKm5leHQsICplb2YsICplb2I7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWZvciAobGluZSA9IGJ1ZmZlciwgZW9iID0gbGluZSArIHNpemU7CisJICAgICBsaW5lIDwgZW9iICYmICpsaW5lICE9ICdcbic7CisJICAgICBsaW5lID0gbmV4dCkgeworCQluZXh0ID0gbWVtY2hyKGxpbmUsICdcbicsIGVvYiAtIGxpbmUpOworCQluZXh0ID0gbmV4dCA/IG5leHQgKyAxIDogZW9iOworCQlpZiAoKmxpbmUgPT0gJyAnKSB7CisJCQkvKiBjb250aW51YXRpb24gKi8KKwkJCWlmIChpdCkKKwkJCQlzdHJidWZfYWRkKCZidWYsIGxpbmUgKyAxLCBuZXh0IC0gKGxpbmUgKyAxKSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoaXQpCisJCQlpdC0+dmFsdWUgPSBzdHJidWZfZGV0YWNoKCZidWYsICZpdC0+bGVuKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlpdCA9IE5VTEw7CisKKwkJZW9mID0gc3RyY2hyKGxpbmUsICcgJyk7CisJCWlmIChuZXh0IDw9IGVvZikKKwkJCWVvZiA9IG5leHQ7CisKKwkJaWYgKHN0YW5kYXJkX2hlYWRlcl9maWVsZChsaW5lLCBlb2YgLSBsaW5lKSB8fAorCQkgICAgZXhjbHVkZWRfaGVhZGVyX2ZpZWxkKGxpbmUsIGVvZiAtIGxpbmUsIGV4Y2x1ZGUpKQorCQkJY29udGludWU7CisKKwkJaXQgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXQpKTsKKwkJaXQtPmtleSA9IHhtZW1kdXB6KGxpbmUsIGVvZi1saW5lKTsKKwkJKnRhaWwgPSBpdDsKKwkJdGFpbCA9ICZpdC0+bmV4dDsKKwkJaWYgKGVvZiArIDEgPCBuZXh0KQorCQkJc3RyYnVmX2FkZCgmYnVmLCBlb2YgKyAxLCBuZXh0IC0gKGVvZiArIDEpKTsKKwl9CisJaWYgKGl0KQorCQlpdC0+dmFsdWUgPSBzdHJidWZfZGV0YWNoKCZidWYsICZpdC0+bGVuKTsKKwlyZXR1cm4gZXh0cmE7Cit9CisKK3ZvaWQgZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyhzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEpCit7CisJd2hpbGUgKGV4dHJhKSB7CisJCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpuZXh0ID0gZXh0cmEtPm5leHQ7CisJCWZyZWUoZXh0cmEtPmtleSk7CisJCWZyZWUoZXh0cmEtPnZhbHVlKTsKKwkJZnJlZShleHRyYSk7CisJCWV4dHJhID0gbmV4dDsKKwl9Cit9CisKK2ludCBjb21taXRfdHJlZShjb25zdCBzdHJ1Y3Qgc3RyYnVmICptc2csIHVuc2lnbmVkIGNoYXIgKnRyZWUsCisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cywgdW5zaWduZWQgY2hhciAqcmV0LAorCQljb25zdCBjaGFyICphdXRob3IsIGNvbnN0IGNoYXIgKnNpZ25fY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSA9IE5VTEwsICoqdGFpbCA9ICZleHRyYTsKKwlpbnQgcmVzdWx0OworCisJYXBwZW5kX21lcmdlX3RhZ19oZWFkZXJzKHBhcmVudHMsICZ0YWlsKTsKKwlyZXN1bHQgPSBjb21taXRfdHJlZV9leHRlbmRlZChtc2csIHRyZWUsIHBhcmVudHMsIHJldCwKKwkJCQkgICAgICBhdXRob3IsIHNpZ25fY29tbWl0LCBleHRyYSk7CisJZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyhleHRyYSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBmaW5kX2ludmFsaWRfdXRmOChjb25zdCBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IG9mZnNldCA9IDA7CisKKwl3aGlsZSAobGVuKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICpidWYrKzsKKwkJaW50IGJ5dGVzLCBiYWRfb2Zmc2V0OworCisJCWxlbi0tOworCQlvZmZzZXQrKzsKKworCQkvKiBTaW1wbGUgVVMtQVNDSUk/IE5vIHdvcnJpZXMuICovCisJCWlmIChjIDwgMHg4MCkKKwkJCWNvbnRpbnVlOworCisJCWJhZF9vZmZzZXQgPSBvZmZzZXQtMTsKKworCQkvKgorCQkgKiBDb3VudCBob3cgbWFueSBtb3JlIGhpZ2ggYml0cyBzZXQ6IHRoYXQncyBob3cKKwkJICogbWFueSBtb3JlIGJ5dGVzIHRoaXMgc2VxdWVuY2Ugc2hvdWxkIGhhdmUuCisJCSAqLworCQlieXRlcyA9IDA7CisJCXdoaWxlIChjICYgMHg0MCkgeworCQkJYyA8PD0gMTsKKwkJCWJ5dGVzKys7CisJCX0KKworCQkvKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgNSBtb3JlIGJ5dGVzICovCisJCWlmIChieXRlcyA8IDEgfHwgYnl0ZXMgPiA1KQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisKKwkJLyogRG8gd2UgKmhhdmUqIHRoYXQgbWFueSBieXRlcz8gKi8KKwkJaWYgKGxlbiA8IGJ5dGVzKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisKKwkJb2Zmc2V0ICs9IGJ5dGVzOworCQlsZW4gLT0gYnl0ZXM7CisKKwkJLyogQW5kIHZlcmlmeSB0aGF0IHRoZXkgYXJlIGdvb2QgY29udGludWF0aW9uIGJ5dGVzICovCisJCWRvIHsKKwkJCWlmICgoKmJ1ZisrICYgMHhjMCkgIT0gMHg4MCkKKwkJCQlyZXR1cm4gYmFkX29mZnNldDsKKwkJfSB3aGlsZSAoLS1ieXRlcyk7CisKKwkJLyogV2UgY291bGQvc2hvdWxkIGNoZWNrIHRoZSB2YWx1ZSBhbmQgbGVuZ3RoIGhlcmUgdG9vICovCisJfQorCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgYnVmZmVyIGlzIGluIHByb3BlciB1dGY4IGZvcm1hdC4KKyAqCisgKiBJZiBpdCBpc24ndCwgaXQgYXNzdW1lcyBhbnkgbm9uLXV0ZjggY2hhcmFjdGVycyBhcmUgTGF0aW4xLAorICogYW5kIGRvZXMgdGhlIGNvbnZlcnNpb24uCisgKgorICogRml4bWU6IHdlIHNob3VsZCBwcm9iYWJseSBhbHNvIGRpc2FsbG93IG92ZXJsb25nIGZvcm1zIGFuZAorICogaW52YWxpZCBjaGFyYWN0ZXJzLiBCdXQgd2UgZG9uJ3QgZG8gdGhhdCBjdXJyZW50bHkuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X3V0Zjgoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWludCBvayA9IDE7CisJbG9uZyBwb3MgPSAwOworCisJZm9yICg7OykgeworCQlpbnQgYmFkOworCQl1bnNpZ25lZCBjaGFyIGM7CisJCXVuc2lnbmVkIGNoYXIgcmVwbGFjZVsyXTsKKworCQliYWQgPSBmaW5kX2ludmFsaWRfdXRmOChidWYtPmJ1ZiArIHBvcywgYnVmLT5sZW4gLSBwb3MpOworCQlpZiAoYmFkIDwgMCkKKwkJCXJldHVybiBvazsKKwkJcG9zICs9IGJhZDsKKwkJb2sgPSAwOworCQljID0gYnVmLT5idWZbcG9zXTsKKwkJc3RyYnVmX3JlbW92ZShidWYsIHBvcywgMSk7CisKKwkJLyogV2Uga25vdyAnYycgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMTI4LTI1NSAqLworCQlyZXBsYWNlWzBdID0gMHhjMCArIChjID4+IDYpOworCQlyZXBsYWNlWzFdID0gMHg4MCArIChjICYgMHgzZik7CisJCXN0cmJ1Zl9pbnNlcnQoYnVmLCBwb3MsIHJlcGxhY2UsIDIpOworCQlwb3MgKz0gMjsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbW1pdF91dGY4X3dhcm5bXSA9CisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iOworCitpbnQgY29tbWl0X3RyZWVfZXh0ZW5kZWQoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbXNnLCB1bnNpZ25lZCBjaGFyICp0cmVlLAorCQkJIHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cywgdW5zaWduZWQgY2hhciAqcmV0LAorCQkJIGNvbnN0IGNoYXIgKmF1dGhvciwgY29uc3QgY2hhciAqc2lnbl9jb21taXQsCisJCQkgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhKQoreworCWludCByZXN1bHQ7CisJaW50IGVuY29kaW5nX2lzX3V0Zjg7CisJc3RydWN0IHN0cmJ1ZiBidWZmZXI7CisKKwlhc3NlcnRfc2hhMV90eXBlKHRyZWUsIE9CSl9UUkVFKTsKKworCWlmIChtZW1jaHIobXNnLT5idWYsICdcMCcsIG1zZy0+bGVuKSkKKwkJcmV0dXJuIGVycm9yKCJhIE5VTCBieXRlIGluIGNvbW1pdCBsb2cgbWVzc2FnZSBub3QgYWxsb3dlZC4iKTsKKworCS8qIE5vdCBoYXZpbmcgaTE4bi5jb21taXRlbmNvZGluZyBpcyB0aGUgc2FtZSBhcyBoYXZpbmcgdXRmLTggKi8KKwllbmNvZGluZ19pc191dGY4ID0gaXNfZW5jb2RpbmdfdXRmOChnaXRfY29tbWl0X2VuY29kaW5nKTsKKworCXN0cmJ1Zl9pbml0KCZidWZmZXIsIDgxOTIpOyAvKiBzaG91bGQgYXZvaWQgcmVhbGxvY3MgZm9yIHRoZSBoZWFkZXJzICovCisJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgInRyZWUgJXNcbiIsIHNoYTFfdG9faGV4KHRyZWUpKTsKKworCS8qCisJICogTk9URSEgVGhpcyBvcmRlcmluZyBtZWFucyB0aGF0IHRoZSBzYW1lIGV4YWN0IHRyZWUgbWVyZ2VkIHdpdGggYQorCSAqIGRpZmZlcmVudCBvcmRlciBvZiBwYXJlbnRzIHdpbGwgYmUgYSBfZGlmZmVyZW50XyBjaGFuZ2VzZXQgZXZlbgorCSAqIGlmIGV2ZXJ5dGhpbmcgZWxzZSBzdGF5cyB0aGUgc2FtZS4KKwkgKi8KKwl3aGlsZSAocGFyZW50cykgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5leHQgPSBwYXJlbnRzLT5uZXh0OworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCisJCXN0cmJ1Zl9hZGRmKCZidWZmZXIsICJwYXJlbnQgJXNcbiIsCisJCQkgICAgc2hhMV90b19oZXgocGFyZW50LT5vYmplY3Quc2hhMSkpOworCQlmcmVlKHBhcmVudHMpOworCQlwYXJlbnRzID0gbmV4dDsKKwl9CisKKwkvKiBQZXJzb24vZGF0ZSBpbmZvcm1hdGlvbiAqLworCWlmICghYXV0aG9yKQorCQlhdXRob3IgPSBnaXRfYXV0aG9yX2luZm8oSURFTlRfU1RSSUNUKTsKKwlzdHJidWZfYWRkZigmYnVmZmVyLCAiYXV0aG9yICVzXG4iLCBhdXRob3IpOworCXN0cmJ1Zl9hZGRmKCZidWZmZXIsICJjb21taXR0ZXIgJXNcbiIsIGdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9TVFJJQ1QpKTsKKwlpZiAoIWVuY29kaW5nX2lzX3V0ZjgpCisJCXN0cmJ1Zl9hZGRmKCZidWZmZXIsICJlbmNvZGluZyAlc1xuIiwgZ2l0X2NvbW1pdF9lbmNvZGluZyk7CisKKwl3aGlsZSAoZXh0cmEpIHsKKwkJYWRkX2V4dHJhX2hlYWRlcigmYnVmZmVyLCBleHRyYSk7CisJCWV4dHJhID0gZXh0cmEtPm5leHQ7CisJfQorCXN0cmJ1Zl9hZGRjaCgmYnVmZmVyLCAnXG4nKTsKKworCS8qIEFuZCBhZGQgdGhlIGNvbW1lbnQgKi8KKwlzdHJidWZfYWRkYnVmKCZidWZmZXIsIG1zZyk7CisKKwkvKiBBbmQgY2hlY2sgdGhlIGVuY29kaW5nICovCisJaWYgKGVuY29kaW5nX2lzX3V0ZjggJiYgIXZlcmlmeV91dGY4KCZidWZmZXIpKQorCQlmcHJpbnRmKHN0ZGVyciwgY29tbWl0X3V0Zjhfd2Fybik7CisKKwlpZiAoc2lnbl9jb21taXQgJiYgZG9fc2lnbl9jb21taXQoJmJ1ZmZlciwgc2lnbl9jb21taXQpKQorCQlyZXR1cm4gLTE7CisKKwlyZXN1bHQgPSB3cml0ZV9zaGExX2ZpbGUoYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbiwgY29tbWl0X3R5cGUsIHJldCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IGNvbW1pdCAqZ2V0X21lcmdlX3BhcmVudChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpZiAoZ2V0X3NoYTEobmFtZSwgc2hhMSkpCisJCXJldHVybiBOVUxMOworCW9iaiA9IHBhcnNlX29iamVjdChzaGExKTsKKwljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKXBlZWxfdG9fdHlwZShuYW1lLCAwLCBvYmosIE9CSl9DT01NSVQpOworCWlmIChjb21taXQgJiYgIWNvbW1pdC0+dXRpbCkgeworCQlzdHJ1Y3QgbWVyZ2VfcmVtb3RlX2Rlc2MgKmRlc2M7CisJCWRlc2MgPSB4bWFsbG9jKHNpemVvZigqZGVzYykpOworCQlkZXNjLT5vYmogPSBvYmo7CisJCWRlc2MtPm5hbWUgPSBzdHJkdXAobmFtZSk7CisJCWNvbW1pdC0+dXRpbCA9IGRlc2M7CisJfQorCXJldHVybiBjb21taXQ7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBjb21taXQgdG8gdGhlIGVuZCBvZiB0aGUgY29tbWl0X2xpc3QuCisgKgorICogbmV4dCBzdGFydHMgYnkgcG9pbnRpbmcgdG8gdGhlIHZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIGhlYWQgb2YgYW4KKyAqIGVtcHR5IGNvbW1pdF9saXN0LCBhbmQgaXMgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgIm5leHQiIGZpZWxkIG9mCisgKiB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0IGFzIG5ldyBjb21taXRzIGFyZSBhcHBlbmRlZC4KKyAqCisgKiBVc2FnZSBleGFtcGxlOgorICoKKyAqICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisgKiAgICAgc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCA9ICZsaXN0OworICoKKyAqICAgICBuZXh0ID0gY29tbWl0X2xpc3RfYXBwZW5kKGMxLCBuZXh0KTsKKyAqICAgICBuZXh0ID0gY29tbWl0X2xpc3RfYXBwZW5kKGMyLCBuZXh0KTsKKyAqICAgICBhc3NlcnQoY29tbWl0X2xpc3RfY291bnQobGlzdCkgPT0gMik7CisgKiAgICAgcmV0dXJuIGxpc3Q7CisgKi8KK3N0cnVjdCBjb21taXRfbGlzdCAqKmNvbW1pdF9saXN0X2FwcGVuZChzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqKm5leHQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXcgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tbWl0X2xpc3QpKTsKKwluZXctPml0ZW0gPSBjb21taXQ7CisJKm5leHQgPSBuZXc7CisJbmV3LT5uZXh0ID0gTlVMTDsKKwlyZXR1cm4gJm5ldy0+bmV4dDsKK30KZGlmZiAtLWdpdCBhL2NvbW1pdC5oIGIvY29tbWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyMTMxMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1pdC5oCkBAIC0wLDAgKzEsMjI1IEBACisjaWZuZGVmIENPTU1JVF9ICisjZGVmaW5lIENPTU1JVF9ICisKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKworc3RydWN0IGNvbW1pdF9saXN0IHsKKwlzdHJ1Y3QgY29tbWl0ICppdGVtOworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV4dDsKK307CisKK3N0cnVjdCBjb21taXQgeworCXN0cnVjdCBvYmplY3Qgb2JqZWN0OworCXZvaWQgKnV0aWw7CisJdW5zaWduZWQgaW50IGluZGVncmVlOworCXVuc2lnbmVkIGxvbmcgZGF0ZTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJY2hhciAqYnVmZmVyOworfTsKKworZXh0ZXJuIGludCBzYXZlX2NvbW1pdF9idWZmZXI7CitleHRlcm4gY29uc3QgY2hhciAqY29tbWl0X3R5cGU7CisKKy8qIFdoaWxlIHdlIGNhbiBkZWNvcmF0ZSBhbnkgb2JqZWN0IHdpdGggYSBuYW1lLCBpdCdzIG9ubHkgdXNlZCBmb3IgY29tbWl0cy4uICovCitleHRlcm4gc3RydWN0IGRlY29yYXRpb24gbmFtZV9kZWNvcmF0aW9uOworc3RydWN0IG5hbWVfZGVjb3JhdGlvbiB7CisJc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqbmV4dDsKKwlpbnQgdHlwZTsKKwljaGFyIG5hbWVbMV07Cit9OworCitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkJICAgICAgaW50IHF1aWV0KTsKK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qCisgKiBMb29rIHVwIG9iamVjdCBuYW1lZCBieSAic2hhMSIsIGRlcmVmZXJlbmNlIHRhZyBhcyBuZWNlc3NhcnksCisgKiBnZXQgYSBjb21taXQgYW5kIHJldHVybiBpdC4gSWYgInNoYTEiIGRvZXMgbm90IGRlcmVmZXJlbmNlIHRvCisgKiBhIGNvbW1pdCwgdXNlIHJlZl9uYW1lIHRvIHJlcG9ydCBhbiBlcnJvciBhbmQgZGllLgorICovCitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0X29yX2RpZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpyZWZfbmFtZSk7CisKK2ludCBwYXJzZV9jb21taXRfYnVmZmVyKHN0cnVjdCBjb21taXQgKml0ZW0sIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2ludCBwYXJzZV9jb21taXQoc3RydWN0IGNvbW1pdCAqaXRlbSk7CisKKy8qIEZpbmQgYmVnaW5uaW5nIGFuZCBsZW5ndGggb2YgY29tbWl0IHN1YmplY3QuICovCitpbnQgZmluZF9jb21taXRfc3ViamVjdChjb25zdCBjaGFyICpjb21taXRfYnVmZmVyLCBjb25zdCBjaGFyICoqc3ViamVjdCk7CisKK3N0cnVjdCBjb21taXRfbGlzdCAqY29tbWl0X2xpc3RfaW5zZXJ0KHN0cnVjdCBjb21taXQgKml0ZW0sCisJCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpOworc3RydWN0IGNvbW1pdF9saXN0ICoqY29tbWl0X2xpc3RfYXBwZW5kKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCk7Cit1bnNpZ25lZCBjb21taXRfbGlzdF9jb3VudChjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmwpOworc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShzdHJ1Y3QgY29tbWl0ICppdGVtLAorCQkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0KTsKK3ZvaWQgY29tbWl0X2xpc3Rfc29ydF9ieV9kYXRlKHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpOworCit2b2lkIGZyZWVfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KTsKKworLyogQ29tbWl0IGZvcm1hdHMgKi8KK2VudW0gY21pdF9mbXQgeworCUNNSVRfRk1UX1JBVywKKwlDTUlUX0ZNVF9NRURJVU0sCisJQ01JVF9GTVRfREVGQVVMVCA9IENNSVRfRk1UX01FRElVTSwKKwlDTUlUX0ZNVF9TSE9SVCwKKwlDTUlUX0ZNVF9GVUxMLAorCUNNSVRfRk1UX0ZVTExFUiwKKwlDTUlUX0ZNVF9PTkVMSU5FLAorCUNNSVRfRk1UX0VNQUlMLAorCUNNSVRfRk1UX1VTRVJGT1JNQVQsCisKKwlDTUlUX0ZNVF9VTlNQRUNJRklFRAorfTsKKworc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHsKKwllbnVtIGNtaXRfZm10IGZtdDsKKwlpbnQgYWJicmV2OworCWNvbnN0IGNoYXIgKnN1YmplY3Q7CisJY29uc3QgY2hhciAqYWZ0ZXJfc3ViamVjdDsKKwlpbnQgcHJlc2VydmVfc3ViamVjdDsKKwllbnVtIGRhdGVfbW9kZSBkYXRlX21vZGU7CisJdW5zaWduZWQgZGF0ZV9tb2RlX2V4cGxpY2l0OjE7CisJaW50IG5lZWRfOGJpdF9jdGU7CisJaW50IHNob3dfbm90ZXM7CisJc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvOworCWNvbnN0IGNoYXIgKm91dHB1dF9lbmNvZGluZzsKK307CisKK3N0cnVjdCB1c2VyZm9ybWF0X3dhbnQgeworCXVuc2lnbmVkIG5vdGVzOjE7Cit9OworCitleHRlcm4gaW50IGhhc19ub25fYXNjaWkoY29uc3QgY2hhciAqdGV4dCk7CitzdHJ1Y3QgcmV2X2luZm87IC8qIGluIHJldmlzaW9uLmgsIGl0IGNpcmN1bGFybHkgdXNlcyBlbnVtIGNtaXRfZm10ICovCitleHRlcm4gY2hhciAqbG9nbXNnX3JlZW5jb2RlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nKTsKK2V4dGVybiBjaGFyICpyZWVuY29kZV9jb21taXRfbWVzc2FnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJICAgICBjb25zdCBjaGFyICoqZW5jb2RpbmdfcCk7CitleHRlcm4gdm9pZCBnZXRfY29tbWl0X2Zvcm1hdChjb25zdCBjaGFyICphcmcsIHN0cnVjdCByZXZfaW5mbyAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpmb3JtYXRfc3ViamVjdChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqbXNnLAorCQkJCSAgY29uc3QgY2hhciAqbGluZV9zZXBhcmF0b3IpOworZXh0ZXJuIHZvaWQgdXNlcmZvcm1hdF9maW5kX3JlcXVpcmVtZW50cyhjb25zdCBjaGFyICpmbXQsIHN0cnVjdCB1c2VyZm9ybWF0X3dhbnQgKncpOworZXh0ZXJuIHZvaWQgZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgIGNvbnN0IGNoYXIgKmZvcm1hdCwgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJICBjb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKmNvbnRleHQpOworZXh0ZXJuIHZvaWQgcHJldHR5X3ByaW50X2NvbW1pdChjb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkJCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQlzdHJ1Y3Qgc3RyYnVmICpzYik7CitleHRlcm4gdm9pZCBwcF9jb21taXRfZWFzeShlbnVtIGNtaXRfZm10IGZtdCwgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqc2IpOwordm9pZCBwcF91c2VyX2luZm8oY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICBjb25zdCBjaGFyICp3aGF0LCBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJICBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICplbmNvZGluZyk7Cit2b2lkIHBwX3RpdGxlX2xpbmUoY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICAgY29uc3QgY2hhciAqKm1zZ19wLAorCQkgICBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisJCSAgIGludCBuZWVkXzhiaXRfY3RlKTsKK3ZvaWQgcHBfcmVtYWluZGVyKGNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCisJCSAgY29uc3QgY2hhciAqKm1zZ19wLAorCQkgIHN0cnVjdCBzdHJidWYgKnNiLAorCQkgIGludCBpbmRlbnQpOworCisKKy8qKiBSZW1vdmVzIHRoZSBmaXJzdCBjb21taXQgZnJvbSBhIGxpc3Qgc29ydGVkIGJ5IGRhdGUsIGFuZCBhZGRzIGFsbAorICogb2YgaXRzIHBhcmVudHMuCisgKiovCitzdHJ1Y3QgY29tbWl0ICpwb3BfbW9zdF9yZWNlbnRfY29tbWl0KHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QsCisJCQkJICAgICAgdW5zaWduZWQgaW50IG1hcmspOworCitzdHJ1Y3QgY29tbWl0ICpwb3BfY29tbWl0KHN0cnVjdCBjb21taXRfbGlzdCAqKnN0YWNrKTsKKwordm9pZCBjbGVhcl9jb21taXRfbWFya3Moc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBpbnQgbWFyayk7Cit2b2lkIGNsZWFyX2NvbW1pdF9tYXJrc19mb3Jfb2JqZWN0X2FycmF5KHN0cnVjdCBvYmplY3RfYXJyYXkgKmEsIHVuc2lnbmVkIG1hcmspOworCisvKgorICogUGVyZm9ybXMgYW4gaW4tcGxhY2UgdG9wb2xvZ2ljYWwgc29ydCBvZiBsaXN0IHN1cHBsaWVkLgorICoKKyAqICAgaW52YXJpYW50IG9mIHJlc3VsdGluZyBsaXN0IGlzOgorICogICAgICBhIHJlYWNoYWJsZSBmcm9tIGIgPT4gb3JkKGIpIDwgb3JkKGEpCisgKiAgIGluIGFkZGl0aW9uLCB3aGVuIGxpZm8gPT0gMCwgY29tbWl0cyBvbiBwYXJhbGxlbCB0cmFja3MgYXJlCisgKiAgIHNvcnRlZCBpbiB0aGUgZGF0ZXMgb3JkZXIuCisgKi8KK3ZvaWQgc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcihzdHJ1Y3QgY29tbWl0X2xpc3QgKiogbGlzdCwgaW50IGxpZm8pOworCitzdHJ1Y3QgY29tbWl0X2dyYWZ0IHsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBucl9wYXJlbnQ7IC8qIDwgMCBpZiBzaGFsbG93IGNvbW1pdCAqLworCXVuc2lnbmVkIGNoYXIgcGFyZW50W0ZMRVhfQVJSQVldWzIwXTsgLyogbW9yZSAqLworfTsKK3R5cGVkZWYgaW50ICgqZWFjaF9jb21taXRfZ3JhZnRfZm4pKGNvbnN0IHN0cnVjdCBjb21taXRfZ3JhZnQgKiwgdm9pZCAqKTsKKworc3RydWN0IGNvbW1pdF9ncmFmdCAqcmVhZF9ncmFmdF9saW5lKGNoYXIgKmJ1ZiwgaW50IGxlbik7CitpbnQgcmVnaXN0ZXJfY29tbWl0X2dyYWZ0KHN0cnVjdCBjb21taXRfZ3JhZnQgKiwgaW50KTsKK3N0cnVjdCBjb21taXRfZ3JhZnQgKmxvb2t1cF9jb21taXRfZ3JhZnQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKK2V4dGVybiBzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9tZXJnZV9iYXNlcyhzdHJ1Y3QgY29tbWl0ICpyZXYxLCBzdHJ1Y3QgY29tbWl0ICpyZXYyLCBpbnQgY2xlYW51cCk7CitleHRlcm4gc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfbWVyZ2VfYmFzZXNfbWFueShzdHJ1Y3QgY29tbWl0ICpvbmUsIGludCBuLCBzdHJ1Y3QgY29tbWl0ICoqdHdvcywgaW50IGNsZWFudXApOworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZ2V0X29jdG9wdXNfbWVyZ2VfYmFzZXMoc3RydWN0IGNvbW1pdF9saXN0ICppbik7CisKK2V4dGVybiBpbnQgcmVnaXN0ZXJfc2hhbGxvdyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9zaGFsbG93KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBmb3JfZWFjaF9jb21taXRfZ3JhZnQoZWFjaF9jb21taXRfZ3JhZnRfZm4sIHZvaWQgKik7CitleHRlcm4gaW50IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9zaGFsbG93X2NvbW1pdHMoc3RydWN0IG9iamVjdF9hcnJheSAqaGVhZHMsCisJCWludCBkZXB0aCwgaW50IHNoYWxsb3dfZmxhZywgaW50IG5vdF9zaGFsbG93X2ZsYWcpOworCitpbnQgaXNfZGVzY2VuZGFudF9vZihzdHJ1Y3QgY29tbWl0ICosIHN0cnVjdCBjb21taXRfbGlzdCAqKTsKK2ludCBpbl9tZXJnZV9iYXNlcyhzdHJ1Y3QgY29tbWl0ICosIHN0cnVjdCBjb21taXQgKik7CisKK2V4dGVybiBpbnQgaW50ZXJhY3RpdmVfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcGF0Y2gpOworZXh0ZXJuIGludCBydW5fYWRkX2ludGVyYWN0aXZlKGNvbnN0IGNoYXIgKnJldmlzaW9uLCBjb25zdCBjaGFyICpwYXRjaF9tb2RlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKipwYXRoc3BlYyk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHNpbmdsZV9wYXJlbnQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXJldHVybiBjb21taXQtPnBhcmVudHMgJiYgIWNvbW1pdC0+cGFyZW50cy0+bmV4dDsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpyZWR1Y2VfaGVhZHMoc3RydWN0IGNvbW1pdF9saXN0ICpoZWFkcyk7CisKK3N0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyIHsKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqbmV4dDsKKwljaGFyICprZXk7CisJY2hhciAqdmFsdWU7CisJc2l6ZV90IGxlbjsKK307CisKK2V4dGVybiB2b2lkIGFwcGVuZF9tZXJnZV90YWdfaGVhZGVycyhzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsCisJCQkJICAgICBzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqKip0YWlsKTsKKworZXh0ZXJuIGludCBjb21taXRfdHJlZShjb25zdCBzdHJ1Y3Qgc3RyYnVmICptc2csIHVuc2lnbmVkIGNoYXIgKnRyZWUsCisJCSAgICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsIHVuc2lnbmVkIGNoYXIgKnJldCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwgY29uc3QgY2hhciAqc2lnbl9jb21taXQpOworCitleHRlcm4gaW50IGNvbW1pdF90cmVlX2V4dGVuZGVkKGNvbnN0IHN0cnVjdCBzdHJidWYgKm1zZywgdW5zaWduZWQgY2hhciAqdHJlZSwKKwkJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsIHVuc2lnbmVkIGNoYXIgKnJldCwKKwkJCQljb25zdCBjaGFyICphdXRob3IsIGNvbnN0IGNoYXIgKnNpZ25fY29tbWl0LAorCQkJCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICopOworCitleHRlcm4gc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKnJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcnMoc3RydWN0IGNvbW1pdCAqLCBjb25zdCBjaGFyICoqKTsKKworZXh0ZXJuIHZvaWQgZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyhzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEpOworCitzdHJ1Y3QgbWVyZ2VfcmVtb3RlX2Rlc2MgeworCXN0cnVjdCBvYmplY3QgKm9iajsgLyogdGhlIG5hbWVkIG9iamVjdCwgY291bGQgYmUgYSB0YWcgKi8KKwljb25zdCBjaGFyICpuYW1lOworfTsKKyNkZWZpbmUgbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KSAoKHN0cnVjdCBtZXJnZV9yZW1vdGVfZGVzYyAqKSgoY29tbWl0KS0+dXRpbCkpCisKKy8qCisgKiBHaXZlbiAibmFtZSIgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRvIG1lcmdlLCBmaW5kIHRoZSBjb21taXQgb2JqZWN0CisgKiBhbmQgcmV0dXJuIGl0LCB3aGlsZSBzdG9yaW5nIG1lcmdlX3JlbW90ZV9kZXNjIGluIGl0cyAtPnV0aWwgZmllbGQsCisgKiB0byBhbGxvdyBjYWxsZXJzIHRvIHRlbGwgaWYgd2UgYXJlIHRvbGQgdG8gbWVyZ2UgYSB0YWcuCisgKi8KK3N0cnVjdCBjb21taXQgKmdldF9tZXJnZV9wYXJlbnQoY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiBpbnQgcGFyc2Vfc2lnbmVkX2NvbW1pdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKm1lc3NhZ2UsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSk7CisjZW5kaWYgLyogQ09NTUlUX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9iYXNlbmFtZS5jIGIvY29tcGF0L2Jhc2VuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmOGEzYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9iYXNlbmFtZS5jCkBAIC0wLDAgKzEsMTUgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworLyogQWRhcHRlZCBmcm9tIGxpYmliZXJ0eSdzIGJhc2VuYW1lLmMuICAqLworY2hhciAqZ2l0YmFzZW5hbWUgKGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqYmFzZTsKKwkvKiBTa2lwIG92ZXIgdGhlIGRpc2sgbmFtZSBpbiBNU0RPUyBwYXRobmFtZXMuICovCisJaWYgKGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpKQorCQlwYXRoICs9IDI7CisJZm9yIChiYXNlID0gcGF0aDsgKnBhdGg7IHBhdGgrKykgeworCQlpZiAoaXNfZGlyX3NlcCgqcGF0aCkpCisJCQliYXNlID0gcGF0aCArIDE7CisJfQorCXJldHVybiAoY2hhciAqKWJhc2U7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvYnN3YXAuaCBiL2NvbXBhdC9ic3dhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjEyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvYnN3YXAuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogTGV0J3MgbWFrZSBzdXJlIHdlIGFsd2F5cyBoYXZlIGEgc2FuZSBkZWZpbml0aW9uIGZvciBudG9obCgpL2h0b25sKCkuCisgKiBTb21lIGxpYnJhcmllcyBkZWZpbmUgdGhvc2UgYXMgYSBmdW5jdGlvbiBjYWxsLCBqdXN0IHRvIHBlcmZvcm0gYnl0ZQorICogc2hpZnRpbmcsIGJyaW5naW5nIHNpZ25pZmljYW50IG92ZXJoZWFkIHRvIHdoYXQgc2hvdWxkIGJlIGEgc2ltcGxlCisgKiBvcGVyYXRpb24uCisgKi8KKworLyoKKyAqIERlZmF1bHQgdmVyc2lvbiB0aGF0IHRoZSBjb21waWxlciBvdWdodCB0byBvcHRpbWl6ZSBwcm9wZXJseSB3aXRoCisgKiBjb25zdGFudCB2YWx1ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZGVmYXVsdF9zd2FiMzIodWludDMyX3QgdmFsKQoreworCXJldHVybiAoKCh2YWwgJiAweGZmMDAwMDAwKSA+PiAyNCkgfAorCQkoKHZhbCAmIDB4MDBmZjAwMDApID4+ICA4KSB8CisJCSgodmFsICYgMHgwMDAwZmYwMCkgPDwgIDgpIHwKKwkJKCh2YWwgJiAweDAwMDAwMGZmKSA8PCAyNCkpOworfQorCisjdW5kZWYgYnN3YXAzMgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisKKyNkZWZpbmUgYnN3YXAzMiBnaXRfYnN3YXAzMgorc3RhdGljIGlubGluZSB1aW50MzJfdCBnaXRfYnN3YXAzMih1aW50MzJfdCB4KQoreworCXVpbnQzMl90IHJlc3VsdDsKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoeCkpCisJCXJlc3VsdCA9IGRlZmF1bHRfc3dhYjMyKHgpOworCWVsc2UKKwkJX19hc21fXygiYnN3YXAgJTAiIDogIj1yIiAocmVzdWx0KSA6ICIwIiAoeCkpOworCXJldHVybiByZXN1bHQ7Cit9CisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIChkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fWDY0KSkKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIGJzd2FwMzIoeCkgX2J5dGVzd2FwX3Vsb25nKHgpCisKKyNlbmRpZgorCisjaWZkZWYgYnN3YXAzMgorCisjdW5kZWYgbnRvaGwKKyN1bmRlZiBodG9ubAorI2RlZmluZSBudG9obCh4KSBic3dhcDMyKHgpCisjZGVmaW5lIGh0b25sKHgpIGJzd2FwMzIoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvY3lnd2luLmMgYi9jb21wYXQvY3lnd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZlOWIzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9jeWd3aW4uYwpAQCAtMCwwICsxLDE0MiBAQAorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAid2luMzIuaCIKKyNpbmNsdWRlICIuLi9jYWNoZS5oIiAvKiB0byByZWFkIGNvbmZpZ3VyYXRpb24gKi8KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGV0aW1lX3RvX3RpbWVzcGVjKGNvbnN0IEZJTEVUSU1FICpmdCwgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlsb25nIGxvbmcgd2luVGltZSA9ICgobG9uZyBsb25nKWZ0LT5kd0hpZ2hEYXRlVGltZSA8PCAzMikgKworCQkJZnQtPmR3TG93RGF0ZVRpbWU7CisJd2luVGltZSAtPSAxMTY0NDQ3MzYwMDAwMDAwMDBMTDsgLyogV2luZG93cyB0byBVbml4IEVwb2NoIGNvbnZlcnNpb24gKi8KKwkvKiBjb252ZXJ0IDEwMC1uc2Vjb25kIGludGVydmFsIHRvIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzICovCisJdHMtPnR2X3NlYyA9ICh0aW1lX3QpKHdpblRpbWUvMTAwMDAwMDApOworCXRzLT50dl9uc2VjID0gKGxvbmcpKHdpblRpbWUgLSB0cy0+dHZfc2VjKjEwMDAwMDAwTEwpICogMTAwOworfQorCisjZGVmaW5lIHNpemVfdG9fYmxvY2tzKHMpICgoKHMpKzUxMSkvNTEyKQorCisvKiBkb19zdGF0IGlzIGEgY29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBjeWd3aW5fbHN0YXQgYW5kIGN5Z3dpbl9zdGF0LgorICoKKyAqIFRvIHNpbXBsaWZ5IGl0cyBsb2dpYywgaW4gdGhlIGNhc2Ugb2YgY3lnd2luIHN5bWxpbmtzLCB0aGlzIGltcGxlbWVudGF0aW9uCisgKiBmYWxscyBiYWNrIHRvIHRoZSBjeWd3aW4gdmVyc2lvbiBvZiBzdGF0L2xzdGF0LCB3aGljaCBpcyBwcm92aWRlZCBhcyB0aGUKKyAqIGxhc3QgYXJndW1lbnQuCisgKi8KK3N0YXRpYyBpbnQgZG9fc3RhdChjb25zdCBjaGFyICpmaWxlX25hbWUsIHN0cnVjdCBzdGF0ICpidWYsIHN0YXRfZm5fdCBjeWdzdGF0KQoreworCVdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgZmRhdGE7CisKKwlpZiAoZmlsZV9uYW1lWzBdID09ICcvJykKKwkJcmV0dXJuIGN5Z3N0YXQgKGZpbGVfbmFtZSwgYnVmKTsKKworCWlmICghKGVycm5vID0gZ2V0X2ZpbGVfYXR0cihmaWxlX25hbWUsICZmZGF0YSkpKSB7CisJCS8qCisJCSAqIElmIHRoZSBzeXN0ZW0gYXR0cmlidXRlIGlzIHNldCBhbmQgaXQgaXMgbm90IGEgZGlyZWN0b3J5IHRoZW4KKwkJICogaXQgY291bGQgYmUgYSBzeW1ib2wgbGluayBjcmVhdGVkIGluIHRoZSBub3dpbnN5bWxpbmtzIG1vZGUuCisJCSAqIE5vcm1hbGx5LCBDeWd3aW4gd29ya3MgaW4gdGhlIHdpbnN5bWxpbmtzIG1vZGUsIHNvIHRoaXMgc2l0dWF0aW9uCisJCSAqIGlzIHZlcnkgdW5saWtlbHkuIEZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5IG9mIG91ciBjb2RlLCBsZXQncworCQkgKiBDeWd3aW4gdG8gaGFuZGxlIGl0LgorCQkgKi8KKwkJaWYgKChmZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfU1lTVEVNKSAmJgorCQkgICAgIShmZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkKKwkJCXJldHVybiBjeWdzdGF0KGZpbGVfbmFtZSwgYnVmKTsKKworCQkvKiBmaWxsIG91dCB0aGUgc3RhdCBzdHJ1Y3R1cmUgKi8KKwkJYnVmLT5zdF9kZXYgPSBidWYtPnN0X3JkZXYgPSAwOyAvKiBub3QgdXNlZCBieSBHaXQgKi8KKwkJYnVmLT5zdF9pbm8gPSAwOworCQlidWYtPnN0X21vZGUgPSBmaWxlX2F0dHJfdG9fc3RfbW9kZShmZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzKTsKKwkJYnVmLT5zdF9ubGluayA9IDE7CisJCWJ1Zi0+c3RfdWlkID0gYnVmLT5zdF9naWQgPSAwOworI2lmZGVmIF9fQ1lHV0lOX1VTRV9CSUdfVFlQRVNfXworCQlidWYtPnN0X3NpemUgPSAoKF9vZmY2NF90KWZkYXRhLm5GaWxlU2l6ZUhpZ2ggPDwgMzIpICsKKwkJCWZkYXRhLm5GaWxlU2l6ZUxvdzsKKyNlbHNlCisJCWJ1Zi0+c3Rfc2l6ZSA9IChvZmZfdClmZGF0YS5uRmlsZVNpemVMb3c7CisjZW5kaWYKKwkJYnVmLT5zdF9ibG9ja3MgPSBzaXplX3RvX2Jsb2NrcyhidWYtPnN0X3NpemUpOworCQlmaWxldGltZV90b190aW1lc3BlYygmZmRhdGEuZnRMYXN0QWNjZXNzVGltZSwgJmJ1Zi0+c3RfYXRpbSk7CisJCWZpbGV0aW1lX3RvX3RpbWVzcGVjKCZmZGF0YS5mdExhc3RXcml0ZVRpbWUsICZidWYtPnN0X210aW0pOworCQlmaWxldGltZV90b190aW1lc3BlYygmZmRhdGEuZnRDcmVhdGlvblRpbWUsICZidWYtPnN0X2N0aW0pOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGVycm5vID09IEVOT0VOVCkgeworCQkvKgorCQkgKiBJbiB0aGUgd2luc3ltbGlua3MgbW9kZSAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCBDeWd3aW4KKwkJICogZW11bGF0ZXMgc3ltYm9sIGxpbmtzIHVzaW5nIFdpbmRvd3Mgc2hvcnRjdXQgZmlsZXMuIFRoZXNlCisJCSAqIGZpbGVzIGFyZSBmb3JtZWQgYnkgYWRkaW5nIC5sbmsgZXh0ZW5zaW9uLiBTbywgaWYgd2UgaGF2ZQorCQkgKiBub3QgZm91bmQgdGhlIHNwZWNpZmllZCBmaWxlIG5hbWUsIGl0IGNvdWxkIGJlIHRoYXQgaXQgaXMKKwkJICogYSBzeW1ib2wgbGluay4gTGV0J3MgQ3lnd2luIHRvIGRlYWwgd2l0aCB0aGF0LgorCQkgKi8KKwkJcmV0dXJuIGN5Z3N0YXQoZmlsZV9uYW1lLCBidWYpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qIFdlIHByb3ZpZGUgb3VyIG93biBsc3RhdC9zdGF0IGZ1bmN0aW9ucywgc2luY2UgdGhlIHByb3ZpZGVkIEN5Z3dpbiB2ZXJzaW9ucworICogb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB0b28gc2xvdy4gVGhlc2Ugc3RhdCBmdW5jdGlvbnMgYXJlIHRhaWxvcmVkIGZvciBHaXQncworICogdXNhZ2UsIGFuZCB0aGVyZWZvcmUgdGhleSBhcmUgbm90IG1lYW50IHRvIGJlIGNvbXBsZXRlIGFuZCBjb3JyZWN0IGVtdWxhdGlvbgorICogb2YgbHN0YXQvc3RhdCBmdW5jdGlvbmFsaXR5LgorICovCitzdGF0aWMgaW50IGN5Z3dpbl9sc3RhdChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCXJldHVybiBkb19zdGF0KHBhdGgsIGJ1ZiwgbHN0YXQpOworfQorCitzdGF0aWMgaW50IGN5Z3dpbl9zdGF0KGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpidWYpCit7CisJcmV0dXJuIGRvX3N0YXQocGF0aCwgYnVmLCBzdGF0KTsKK30KKworCisvKgorICogQXQgc3RhcnQgdXAsIHdlIGFyZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgV2luMzIgQVBJIG9yIGN5Z3dpbiBzdGF0CisgKiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQuIFRoZSBjaG9pY2UgaXMgZGV0ZXJtaW5lZCBieSBjb3JlLmlnbm9yZWN5Z3dpbmZzdHJpY2tzLgorICogUmVhZGluZyB0aGlzIG9wdGlvbiBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIGltbWVkaWF0ZWx5IGFzIGdpdF9kaXIgbWF5CisgKiBub3QgYmUgc2V0IHlldC4gU28gdW50aWwgaXQgaXMgc2V0LCB1c2UgY3lnd2luIGxzdGF0L3N0YXQgZnVuY3Rpb25zLgorICogSG93ZXZlciwgaWYgY29yZS5maWxlbW9kZSBpcyBzZXQsIHdlIG11c3QgdXNlIHRoZSBDeWd3aW4gcG9zaXgKKyAqIHN0YXQvbHN0YXQgYXMgdGhlIFdpbmRvd3Mgc3RhdCBmdW5jdGlvbnMgZG8gbm90IGRldGVybWluZSBwb3NpeCBmaWxlbW9kZS4KKyAqCisgKiBOb3RlIHRoYXQgZ2l0X2N5Z3dpbl9jb25maWcoKSBkb2VzIE5PVCBjYWxsIGdpdF9kZWZhdWx0X2NvbmZpZygpIGFuZCB0aGlzCisgKiBpcyBkZWxpYmVyYXRlLiAgTWFueSBjb21tYW5kcyByZWFkIGZyb20gY29uZmlnIHRvIGVzdGFibGlzaCBpbml0aWFsCisgKiB2YWx1ZXMgaW4gdmFyaWFibGVzIGFuZCBsYXRlciB0d2VhayB0aGVtIGZyb20gZWxzZXdoZXJlIChlLmcuIGNvbW1hbmQgbGluZSkuCisgKiBpbml0X3N0YXQoKSBpcyBjYWxsZWQgbGF6aWx5IG9uIGRlbWFuZCwgdHlwaWNhbGx5IG11Y2ggbGF0ZSBpbiB0aGUgcHJvZ3JhbSwKKyAqIGFuZCBjYWxsaW5nIGdpdF9kZWZhdWx0X2NvbmZpZygpIGZyb20gaGVyZSB3b3VsZCBicmVhayBzdWNoIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIGludCBuYXRpdmVfc3RhdCA9IDE7CitzdGF0aWMgaW50IGNvcmVfZmlsZW1vZGUgPSAxOyAvKiBtYXRjaGVzIHRydXN0X2V4ZWN1dGFibGVfYml0IGRlZmF1bHQgKi8KKworc3RhdGljIGludCBnaXRfY3lnd2luX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmlnbm9yZWN5Z3dpbmZzdHJpY2tzIikpCisJCW5hdGl2ZV9zdGF0ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAodmFyLCAiY29yZS5maWxlbW9kZSIpKQorCQljb3JlX2ZpbGVtb2RlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfc3RhdCh2b2lkKQoreworCWlmIChoYXZlX2dpdF9kaXIoKSAmJiBnaXRfY29uZmlnKGdpdF9jeWd3aW5fY29uZmlnLE5VTEwpKSB7CisJCWlmICghY29yZV9maWxlbW9kZSAmJiBuYXRpdmVfc3RhdCkgeworCQkJY3lnd2luX3N0YXRfZm4gPSBjeWd3aW5fc3RhdDsKKwkJCWN5Z3dpbl9sc3RhdF9mbiA9IGN5Z3dpbl9sc3RhdDsKKwkJfSBlbHNlIHsKKwkJCWN5Z3dpbl9zdGF0X2ZuID0gc3RhdDsKKwkJCWN5Z3dpbl9sc3RhdF9mbiA9IGxzdGF0OworCQl9CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjeWd3aW5fc3RhdF9zdHViKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlyZXR1cm4gKGluaXRfc3RhdCgpID8gc3RhdCA6ICpjeWd3aW5fc3RhdF9mbikoZmlsZV9uYW1lLCBidWYpOworfQorCitzdGF0aWMgaW50IGN5Z3dpbl9sc3RhdF9zdHViKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlyZXR1cm4gKGluaXRfc3RhdCgpID8gbHN0YXQgOiAqY3lnd2luX2xzdGF0X2ZuKShmaWxlX25hbWUsIGJ1Zik7Cit9CisKK3N0YXRfZm5fdCBjeWd3aW5fc3RhdF9mbiA9IGN5Z3dpbl9zdGF0X3N0dWI7CitzdGF0X2ZuX3QgY3lnd2luX2xzdGF0X2ZuID0gY3lnd2luX2xzdGF0X3N0dWI7CisKZGlmZiAtLWdpdCBhL2NvbXBhdC9jeWd3aW4uaCBiL2NvbXBhdC9jeWd3aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzIyOWY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2N5Z3dpbi5oCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKK3R5cGVkZWYgaW50ICgqc3RhdF9mbl90KShjb25zdCBjaGFyKiwgc3RydWN0IHN0YXQqKTsKK2V4dGVybiBzdGF0X2ZuX3QgY3lnd2luX3N0YXRfZm47CitleHRlcm4gc3RhdF9mbl90IGN5Z3dpbl9sc3RhdF9mbjsKKworI2RlZmluZSBzdGF0KHBhdGgsIGJ1ZikgKCpjeWd3aW5fc3RhdF9mbikocGF0aCwgYnVmKQorI2RlZmluZSBsc3RhdChwYXRoLCBidWYpICgqY3lnd2luX2xzdGF0X2ZuKShwYXRoLCBidWYpCmRpZmYgLS1naXQgYS9jb21wYXQvZm5tYXRjaC9mbm1hdGNoLmMgYi9jb21wYXQvZm5tYXRjaC9mbm1hdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3M2FlZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9mbm1hdGNoL2ZubWF0Y2guYwpAQCAtMCwwICsxLDQ5MiBAQAorLyogQ29weXJpZ2h0IChDKSAxOTkxLCA5MiwgOTMsIDk2LCA5NywgOTgsIDk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgaW4gZm5tYXRjaC5oLiAgKi8KKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyMgZGVmaW5lIF9HTlVfU09VUkNFCTEKKyNlbmRpZgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmbm1hdGNoLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisvKiBGb3IgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgdGhlIElTTyBDIGFtZW5kbWVudCAxIGZ1bmN0aW9uYWxpdHkgd2UKKyAgIHN1cHBvcnQgdXNlciBkZWZpbmVkIGNoYXJhY3RlciBjbGFzc2VzLiAgKi8KKyNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0gpCisvKiBTb2xhcmlzIDIuNSBoYXMgYSBidWc6IDx3Y2hhci5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2N0eXBlLmg+LiAgKi8KKyMgaW5jbHVkZSA8d2NoYXIuaD4KKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisjZW5kaWYKKworLyogQ29tbWVudCBvdXQgYWxsIHRoaXMgY29kZSBpZiB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnksIGFuZCBhcmUgbm90CisgICBhY3R1YWxseSBjb21waWxpbmcgdGhlIGxpYnJhcnkgaXRzZWxmLiAgVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEdOVSBDCisgICBMaWJyYXJ5LCBidXQgYWxzbyBpbmNsdWRlZCBpbiBtYW55IG90aGVyIEdOVSBkaXN0cmlidXRpb25zLiAgQ29tcGlsaW5nCisgICBhbmQgbGlua2luZyBpbiB0aGlzIGNvZGUgaXMgYSB3YXN0ZSB3aGVuIHVzaW5nIHRoZSBHTlUgQyBsaWJyYXJ5CisgICAoZXNwZWNpYWxseSBpZiBpdCBpcyBhIHNoYXJlZCBsaWJyYXJ5KS4gIFJhdGhlciB0aGFuIGhhdmluZyBldmVyeSBHTlUKKyAgIHByb2dyYW0gdW5kZXJzdGFuZCBgY29uZmlndXJlIC0td2l0aC1nbnUtbGliYycgYW5kIG9taXQgdGhlIG9iamVjdCBmaWxlcywKKyAgIGl0IGlzIHNpbXBsZXIgdG8ganVzdCBkbyB0aGlzIGluIHRoZSBzb3VyY2UgZm9yIGVhY2ggc3VjaCBmaWxlLiAgKi8KKworI2lmIGRlZmluZWQgX0xJQkMgfHwgIWRlZmluZWQgX19HTlVfTElCUkFSWV9fCisKKworIyBpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCAhZGVmaW5lZCBpc2FzY2lpCisjICBkZWZpbmUgSVNBU0NJSShjKSAxCisjIGVsc2UKKyMgIGRlZmluZSBJU0FTQ0lJKGMpIGlzYXNjaWkoYykKKyMgZW5kaWYKKworIyBpZmRlZiBpc2JsYW5rCisjICBkZWZpbmUgSVNCTEFOSyhjKSAoSVNBU0NJSSAoYykgJiYgaXNibGFuayAoYykpCisjIGVsc2UKKyMgIGRlZmluZSBJU0JMQU5LKGMpICgoYykgPT0gJyAnIHx8IChjKSA9PSAnXHQnKQorIyBlbmRpZgorIyBpZmRlZiBpc2dyYXBoCisjICBkZWZpbmUgSVNHUkFQSChjKSAoSVNBU0NJSSAoYykgJiYgaXNncmFwaCAoYykpCisjIGVsc2UKKyMgIGRlZmluZSBJU0dSQVBIKGMpIChJU0FTQ0lJIChjKSAmJiBpc3ByaW50IChjKSAmJiAhaXNzcGFjZSAoYykpCisjIGVuZGlmCisKKyMgZGVmaW5lIElTUFJJTlQoYykgKElTQVNDSUkgKGMpICYmIGlzcHJpbnQgKGMpKQorIyBkZWZpbmUgSVNESUdJVChjKSAoSVNBU0NJSSAoYykgJiYgaXNkaWdpdCAoYykpCisjIGRlZmluZSBJU0FMTlVNKGMpIChJU0FTQ0lJIChjKSAmJiBpc2FsbnVtIChjKSkKKyMgZGVmaW5lIElTQUxQSEEoYykgKElTQVNDSUkgKGMpICYmIGlzYWxwaGEgKGMpKQorIyBkZWZpbmUgSVNDTlRSTChjKSAoSVNBU0NJSSAoYykgJiYgaXNjbnRybCAoYykpCisjIGRlZmluZSBJU0xPV0VSKGMpIChJU0FTQ0lJIChjKSAmJiBpc2xvd2VyIChjKSkKKyMgZGVmaW5lIElTUFVOQ1QoYykgKElTQVNDSUkgKGMpICYmIGlzcHVuY3QgKGMpKQorIyBkZWZpbmUgSVNTUEFDRShjKSAoSVNBU0NJSSAoYykgJiYgaXNzcGFjZSAoYykpCisjIGRlZmluZSBJU1VQUEVSKGMpIChJU0FTQ0lJIChjKSAmJiBpc3VwcGVyIChjKSkKKyMgZGVmaW5lIElTWERJR0lUKGMpIChJU0FTQ0lJIChjKSAmJiBpc3hkaWdpdCAoYykpCisKKyMgZGVmaW5lIFNUUkVRKHMxLCBzMikgKChzdHJjbXAgKHMxLCBzMikgPT0gMCkpCisKKyMgaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQorLyogVGhlIEdOVSBDIGxpYnJhcnkgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdXNlci1kZWZpbmVkIGNoYXJhY3RlciBjbGFzc2VzCisgICBhbmQgdGhlIGZ1bmN0aW9ucyBmcm9tIElTTyBDIGFtZW5kbWVudCAxLiAgKi8KKyMgIGlmZGVmIENIQVJDTEFTU19OQU1FX01BWAorIyAgIGRlZmluZSBDSEFSX0NMQVNTX01BWF9MRU5HVEggQ0hBUkNMQVNTX05BTUVfTUFYCisjICBlbHNlCisvKiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYnV0IHNvbWUgaW1wbGVtZW50YXRpb24gbWlnaHQgc3RpbGwgaGF2ZSB0aGlzCisgICBwcm9ibGVtLiAgVXNlIGEgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlLiAgKi8KKyMgICBkZWZpbmUgQ0hBUl9DTEFTU19NQVhfTEVOR1RIIDI1NgorIyAgZW5kaWYKKworIyAgaWZkZWYgX0xJQkMKKyMgICBkZWZpbmUgSVNfQ0hBUl9DTEFTUyhzdHJpbmcpIF9fd2N0eXBlIChzdHJpbmcpCisjICBlbHNlCisjICAgZGVmaW5lIElTX0NIQVJfQ0xBU1Moc3RyaW5nKSB3Y3R5cGUgKHN0cmluZykKKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZSBDSEFSX0NMQVNTX01BWF9MRU5HVEggIDYgLyogTmFtZWx5LCBgeGRpZ2l0Jy4gICovCisKKyMgIGRlZmluZSBJU19DSEFSX0NMQVNTKHN0cmluZykJCQkJCQkgICAgICBcCisgICAoU1RSRVEgKHN0cmluZywgImFscGhhIikgfHwgU1RSRVEgKHN0cmluZywgInVwcGVyIikJCQkgICAgICBcCisgICAgfHwgU1RSRVEgKHN0cmluZywgImxvd2VyIikgfHwgU1RSRVEgKHN0cmluZywgImRpZ2l0IikJCSAgICAgIFwKKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAiYWxudW0iKSB8fCBTVFJFUSAoc3RyaW5nLCAieGRpZ2l0IikJCSAgICAgIFwKKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAic3BhY2UiKSB8fCBTVFJFUSAoc3RyaW5nLCAicHJpbnQiKQkJICAgICAgXAorICAgIHx8IFNUUkVRIChzdHJpbmcsICJwdW5jdCIpIHx8IFNUUkVRIChzdHJpbmcsICJncmFwaCIpCQkgICAgICBcCisgICAgfHwgU1RSRVEgKHN0cmluZywgImNudHJsIikgfHwgU1RSRVEgKHN0cmluZywgImJsYW5rIikpCisjIGVuZGlmCisKKy8qIEF2b2lkIGRlcGVuZGluZyBvbiBsaWJyYXJ5IGZ1bmN0aW9ucyBvciBmaWxlcworICAgd2hvc2UgbmFtZXMgYXJlIGluY29uc2lzdGVudC4gICovCisKKyMgaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgZ2V0ZW52CitleHRlcm4gY2hhciAqZ2V0ZW52ICgpOworIyBlbmRpZgorCisjIGlmbmRlZiBlcnJubworZXh0ZXJuIGludCBlcnJubzsKKyMgZW5kaWYKKworIyBpZm5kZWYgTlVMTAorIyAgZGVmaW5lIE5VTEwgMAorIyBlbmRpZgorCisvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3Qgb24gbW9zdCBzeXN0ZW1zLiAgKi8KKworIyBpZiAhZGVmaW5lZCBIQVZFX19fU1RSQ0hSTlVMICYmICFkZWZpbmVkIF9MSUJDCitzdGF0aWMgY2hhciAqCitfX3N0cmNocm51bCAocywgYykKKyAgICAgY29uc3QgY2hhciAqczsKKyAgICAgaW50IGM7Cit7CisgIGNoYXIgKnJlc3VsdCA9IHN0cmNociAocywgYyk7CisgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICByZXN1bHQgPSBzdHJjaHIgKHMsICdcMCcpOworICByZXR1cm4gcmVzdWx0OworfQorIyBlbmRpZgorCisjIGlmbmRlZiBpbnRlcm5hbF9mdW5jdGlvbgorLyogSW5zaWRlIEdOVSBsaWJjIHdlIG1hcmsgc29tZSBmdW5jdGlvbiBpbiBhIHNwZWNpYWwgd2F5LiAgSW4gb3RoZXIKKyAgIGVudmlyb25tZW50cyBzaW1wbHkgaWdub3JlIHRoZSBtYXJraW5nLiAgKi8KKyMgIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorIyBlbmRpZgorCisvKiBNYXRjaCBTVFJJTkcgYWdhaW5zdCB0aGUgZmlsZW5hbWUgcGF0dGVybiBQQVRURVJOLCByZXR1cm5pbmcgemVybyBpZgorICAgaXQgbWF0Y2hlcywgbm9uemVybyBpZiBub3QuICAqLworc3RhdGljIGludCBpbnRlcm5hbF9mbm1hdGNoIF9fUCAoKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJCQkgIGludCBub19sZWFkaW5nX3BlcmlvZCwgaW50IGZsYWdzKSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgoraW50ZXJuYWxfZm5tYXRjaCAocGF0dGVybiwgc3RyaW5nLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MpCisgICAgIGNvbnN0IGNoYXIgKnBhdHRlcm47CisgICAgIGNvbnN0IGNoYXIgKnN0cmluZzsKKyAgICAgaW50IG5vX2xlYWRpbmdfcGVyaW9kOworICAgICBpbnQgZmxhZ3M7Cit7CisgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnAgPSBwYXR0ZXJuLCAqbiA9IHN0cmluZzsKKyAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBjOworCisvKiBOb3RlIHRoYXQgdGhpcyBldmFsdWF0ZXMgQyBtYW55IHRpbWVzLiAgKi8KKyMgaWZkZWYgX0xJQkMKKyMgIGRlZmluZSBGT0xEKGMpICgoZmxhZ3MgJiBGTk1fQ0FTRUZPTEQpID8gdG9sb3dlciAoYykgOiAoYykpCisjIGVsc2UKKyMgIGRlZmluZSBGT0xEKGMpICgoZmxhZ3MgJiBGTk1fQ0FTRUZPTEQpICYmIElTVVBQRVIgKGMpID8gdG9sb3dlciAoYykgOiAoYykpCisjIGVuZGlmCisKKyAgd2hpbGUgKChjID0gKnArKykgIT0gJ1wwJykKKyAgICB7CisgICAgICBjID0gRk9MRCAoYyk7CisKKyAgICAgIHN3aXRjaCAoYykKKwl7CisJY2FzZSAnPyc6CisJICBpZiAoKm4gPT0gJ1wwJykKKwkgICAgcmV0dXJuIEZOTV9OT01BVENIOworCSAgZWxzZSBpZiAoKm4gPT0gJy8nICYmIChmbGFncyAmIEZOTV9GSUxFX05BTUUpKQorCSAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisJICBlbHNlIGlmICgqbiA9PSAnLicgJiYgbm9fbGVhZGluZ19wZXJpb2QKKwkJICAgJiYgKG4gPT0gc3RyaW5nCisJCSAgICAgICB8fCAoblstMV0gPT0gJy8nICYmIChmbGFncyAmIEZOTV9GSUxFX05BTUUpKSkpCisJICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKwkgIGJyZWFrOworCisJY2FzZSAnXFwnOgorCSAgaWYgKCEoZmxhZ3MgJiBGTk1fTk9FU0NBUEUpKQorCSAgICB7CisJICAgICAgYyA9ICpwKys7CisJICAgICAgaWYgKGMgPT0gJ1wwJykKKwkJLyogVHJhaWxpbmcgXCBsb3Nlcy4gICovCisJCXJldHVybiBGTk1fTk9NQVRDSDsKKwkgICAgICBjID0gRk9MRCAoYyk7CisJICAgIH0KKwkgIGlmIChGT0xEICgodW5zaWduZWQgY2hhcikgKm4pICE9IGMpCisJICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKwkgIGJyZWFrOworCisJY2FzZSAnKic6CisJICBpZiAoKm4gPT0gJy4nICYmIG5vX2xlYWRpbmdfcGVyaW9kCisJICAgICAgJiYgKG4gPT0gc3RyaW5nCisJCSAgfHwgKG5bLTFdID09ICcvJyAmJiAoZmxhZ3MgJiBGTk1fRklMRV9OQU1FKSkpKQorCSAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisKKwkgIGZvciAoYyA9ICpwKys7IGMgPT0gJz8nIHx8IGMgPT0gJyonOyBjID0gKnArKykKKwkgICAgeworCSAgICAgIGlmICgqbiA9PSAnLycgJiYgKGZsYWdzICYgRk5NX0ZJTEVfTkFNRSkpCisJCS8qIEEgc2xhc2ggZG9lcyBub3QgbWF0Y2ggYSB3aWxkY2FyZCB1bmRlciBGTk1fRklMRV9OQU1FLiAgKi8KKwkJcmV0dXJuIEZOTV9OT01BVENIOworCSAgICAgIGVsc2UgaWYgKGMgPT0gJz8nKQorCQl7CisJCSAgLyogQSA/IG5lZWRzIHRvIG1hdGNoIG9uZSBjaGFyYWN0ZXIuICAqLworCQkgIGlmICgqbiA9PSAnXDAnKQorCQkgICAgLyogVGhlcmUgaXNuJ3QgYW5vdGhlciBjaGFyYWN0ZXI7IG5vIG1hdGNoLiAgKi8KKwkJICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKwkJICBlbHNlCisJCSAgICAvKiBPbmUgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgaXMgY29uc3VtZWQgaW4gbWF0Y2hpbmcKKwkJICAgICAgIHRoaXMgPyB3aWxkY2FyZCwgc28gKj8/PyB3b24ndCBtYXRjaCBpZiB0aGVyZSBhcmUKKwkJICAgICAgIGxlc3MgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiAgKi8KKwkJICAgICsrbjsKKwkJfQorCSAgICB9CisKKwkgIGlmIChjID09ICdcMCcpCisJICAgIC8qIFRoZSB3aWxkY2FyZChzKSBpcy9hcmUgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0dGVybi4KKwkgICAgICAgSWYgdGhlIG5hbWUgaXMgYSBmaWxlIG5hbWUgYW5kIGNvbnRhaW5zIGFub3RoZXIgc2xhc2gKKwkgICAgICAgdGhpcyBkb2VzIG1lYW4gaXQgY2Fubm90IG1hdGNoLiAgKi8KKwkgICAgcmV0dXJuICgoZmxhZ3MgJiBGTk1fRklMRV9OQU1FKSAmJiBzdHJjaHIgKG4sICcvJykgIT0gTlVMTAorCQkgICAgPyBGTk1fTk9NQVRDSCA6IDApOworCSAgZWxzZQorCSAgICB7CisJICAgICAgY29uc3QgY2hhciAqZW5kcDsKKworCSAgICAgIGVuZHAgPSBfX3N0cmNocm51bCAobiwgKGZsYWdzICYgRk5NX0ZJTEVfTkFNRSkgPyAnLycgOiAnXDAnKTsKKworCSAgICAgIGlmIChjID09ICdbJykKKwkJeworCQkgIGludCBmbGFnczIgPSAoKGZsYWdzICYgRk5NX0ZJTEVfTkFNRSkKKwkJCQk/IGZsYWdzIDogKGZsYWdzICYgfkZOTV9QRVJJT0QpKTsKKworCQkgIGZvciAoLS1wOyBuIDwgZW5kcDsgKytuKQorCQkgICAgaWYgKGludGVybmFsX2ZubWF0Y2ggKHAsIG4sCisJCQkJCSAgKG5vX2xlYWRpbmdfcGVyaW9kCisJCQkJCSAgICYmIChuID09IHN0cmluZworCQkJCQkgICAgICAgfHwgKG5bLTFdID09ICcvJworCQkJCQkJICAgJiYgKGZsYWdzCisJCQkJCQkgICAgICAgJiBGTk1fRklMRV9OQU1FKSkpKSwKKwkJCQkJICBmbGFnczIpCisJCQk9PSAwKQorCQkgICAgICByZXR1cm4gMDsKKwkJfQorCSAgICAgIGVsc2UgaWYgKGMgPT0gJy8nICYmIChmbGFncyAmIEZOTV9GSUxFX05BTUUpKQorCQl7CisJCSAgd2hpbGUgKCpuICE9ICdcMCcgJiYgKm4gIT0gJy8nKQorCQkgICAgKytuOworCQkgIGlmICgqbiA9PSAnLycKKwkJICAgICAgJiYgKGludGVybmFsX2ZubWF0Y2ggKHAsIG4gKyAxLCBmbGFncyAmIEZOTV9QRVJJT0QsCisJCQkJCSAgICBmbGFncykgPT0gMCkpCisJCSAgICByZXR1cm4gMDsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGludCBmbGFnczIgPSAoKGZsYWdzICYgRk5NX0ZJTEVfTkFNRSkKKwkJCQk/IGZsYWdzIDogKGZsYWdzICYgfkZOTV9QRVJJT0QpKTsKKworCQkgIGlmIChjID09ICdcXCcgJiYgIShmbGFncyAmIEZOTV9OT0VTQ0FQRSkpCisJCSAgICBjID0gKnA7CisJCSAgYyA9IEZPTEQgKGMpOworCQkgIGZvciAoLS1wOyBuIDwgZW5kcDsgKytuKQorCQkgICAgaWYgKEZPTEQgKCh1bnNpZ25lZCBjaGFyKSAqbikgPT0gYworCQkJJiYgKGludGVybmFsX2ZubWF0Y2ggKHAsIG4sCisJCQkJCSAgICAgIChub19sZWFkaW5nX3BlcmlvZAorCQkJCQkgICAgICAgJiYgKG4gPT0gc3RyaW5nCisJCQkJCQkgICB8fCAoblstMV0gPT0gJy8nCisJCQkJCQkgICAgICAgJiYgKGZsYWdzCisJCQkJCQkJICAgJiBGTk1fRklMRV9OQU1FKSkpKSwKKwkJCQkJICAgICAgZmxhZ3MyKSA9PSAwKSkKKwkJICAgICAgcmV0dXJuIDA7CisJCX0KKwkgICAgfQorCisJICAvKiBJZiB3ZSBjb21lIGhlcmUgbm8gbWF0Y2ggaXMgcG9zc2libGUgd2l0aCB0aGUgd2lsZGNhcmQuICAqLworCSAgcmV0dXJuIEZOTV9OT01BVENIOworCisJY2FzZSAnWyc6CisJICB7CisJICAgIC8qIE5vbnplcm8gaWYgdGhlIHNlbnNlIG9mIHRoZSBjaGFyYWN0ZXIgY2xhc3MgaXMgaW52ZXJ0ZWQuICAqLworCSAgICBzdGF0aWMgaW50IHBvc2l4bHlfY29ycmVjdDsKKwkgICAgcmVnaXN0ZXIgaW50IG5vdDsKKwkgICAgY2hhciBjb2xkOworCisJICAgIGlmIChwb3NpeGx5X2NvcnJlY3QgPT0gMCkKKwkgICAgICBwb3NpeGx5X2NvcnJlY3QgPSBnZXRlbnYgKCJQT1NJWExZX0NPUlJFQ1QiKSAhPSBOVUxMID8gMSA6IC0xOworCisJICAgIGlmICgqbiA9PSAnXDAnKQorCSAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKworCSAgICBpZiAoKm4gPT0gJy4nICYmIG5vX2xlYWRpbmdfcGVyaW9kICYmIChuID09IHN0cmluZworCQkJCQkJICAgfHwgKG5bLTFdID09ICcvJworCQkJCQkJICAgICAgICYmIChmbGFncworCQkJCQkJCSAgICYgRk5NX0ZJTEVfTkFNRSkpKSkKKwkgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisKKwkgICAgaWYgKCpuID09ICcvJyAmJiAoZmxhZ3MgJiBGTk1fRklMRV9OQU1FKSkKKwkgICAgICAvKiBgLycgY2Fubm90IGJlIG1hdGNoZWQuICAqLworCSAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKworCSAgICBub3QgPSAoKnAgPT0gJyEnIHx8IChwb3NpeGx5X2NvcnJlY3QgPCAwICYmICpwID09ICdeJykpOworCSAgICBpZiAobm90KQorCSAgICAgICsrcDsKKworCSAgICBjID0gKnArKzsKKwkgICAgZm9yICg7OykKKwkgICAgICB7CisJCXVuc2lnbmVkIGNoYXIgZm4gPSBGT0xEICgodW5zaWduZWQgY2hhcikgKm4pOworCisJCWlmICghKGZsYWdzICYgRk5NX05PRVNDQVBFKSAmJiBjID09ICdcXCcpCisJCSAgeworCQkgICAgaWYgKCpwID09ICdcMCcpCisJCSAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKwkJICAgIGMgPSBGT0xEICgodW5zaWduZWQgY2hhcikgKnApOworCQkgICAgKytwOworCisJCSAgICBpZiAoYyA9PSBmbikKKwkJICAgICAgZ290byBtYXRjaGVkOworCQkgIH0KKwkJZWxzZSBpZiAoYyA9PSAnWycgJiYgKnAgPT0gJzonKQorCQkgIHsKKwkJICAgIC8qIExlYXZlIHJvb20gZm9yIHRoZSBudWxsLiAgKi8KKwkJICAgIGNoYXIgc3RyW0NIQVJfQ0xBU1NfTUFYX0xFTkdUSCArIDFdOworCQkgICAgc2l6ZV90IGMxID0gMDsKKyMgaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQorCQkgICAgd2N0eXBlX3Qgd3Q7CisjIGVuZGlmCisJCSAgICBjb25zdCBjaGFyICpzdGFydHAgPSBwOworCisJCSAgICBmb3IgKDs7KQorCQkgICAgICB7CisJCQlpZiAoYzEgPT0gQ0hBUl9DTEFTU19NQVhfTEVOR1RIKQorCQkJICAvKiBUaGUgbmFtZSBpcyB0b28gbG9uZyBhbmQgdGhlcmVmb3JlIHRoZSBwYXR0ZXJuCisJCQkgICAgIGlzIGlsbC1mb3JtZWQuICAqLworCQkJICByZXR1cm4gRk5NX05PTUFUQ0g7CisKKwkJCWMgPSAqKytwOworCQkJaWYgKGMgPT0gJzonICYmIHBbMV0gPT0gJ10nKQorCQkJICB7CisJCQkgICAgcCArPSAyOworCQkJICAgIGJyZWFrOworCQkJICB9CisJCQlpZiAoYyA8ICdhJyB8fCBjID49ICd6JykKKwkJCSAgeworCQkJICAgIC8qIFRoaXMgY2Fubm90IHBvc3NpYmx5IGJlIGEgY2hhcmFjdGVyIGNsYXNzIG5hbWUuCisJCQkgICAgICAgTWF0Y2ggaXQgYXMgYSBub3JtYWwgcmFuZ2UuICAqLworCQkJICAgIHAgPSBzdGFydHA7CisJCQkgICAgYyA9ICdbJzsKKwkJCSAgICBnb3RvIG5vcm1hbF9icmFja2V0OworCQkJICB9CisJCQlzdHJbYzErK10gPSBjOworCQkgICAgICB9CisJCSAgICBzdHJbYzFdID0gJ1wwJzsKKworIyBpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0gpCisJCSAgICB3dCA9IElTX0NIQVJfQ0xBU1MgKHN0cik7CisJCSAgICBpZiAod3QgPT0gMCkKKwkJICAgICAgLyogSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZS4gICovCisJCSAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKworCQkgICAgaWYgKF9faXN3Y3R5cGUgKF9fYnRvd2MgKCh1bnNpZ25lZCBjaGFyKSAqbiksIHd0KSkKKwkJICAgICAgZ290byBtYXRjaGVkOworIyBlbHNlCisJCSAgICBpZiAoKFNUUkVRIChzdHIsICJhbG51bSIpICYmIElTQUxOVU0gKCh1bnNpZ25lZCBjaGFyKSAqbikpCisJCQl8fCAoU1RSRVEgKHN0ciwgImFscGhhIikgJiYgSVNBTFBIQSAoKHVuc2lnbmVkIGNoYXIpICpuKSkKKwkJCXx8IChTVFJFUSAoc3RyLCAiYmxhbmsiKSAmJiBJU0JMQU5LICgodW5zaWduZWQgY2hhcikgKm4pKQorCQkJfHwgKFNUUkVRIChzdHIsICJjbnRybCIpICYmIElTQ05UUkwgKCh1bnNpZ25lZCBjaGFyKSAqbikpCisJCQl8fCAoU1RSRVEgKHN0ciwgImRpZ2l0IikgJiYgSVNESUdJVCAoKHVuc2lnbmVkIGNoYXIpICpuKSkKKwkJCXx8IChTVFJFUSAoc3RyLCAiZ3JhcGgiKSAmJiBJU0dSQVBIICgodW5zaWduZWQgY2hhcikgKm4pKQorCQkJfHwgKFNUUkVRIChzdHIsICJsb3dlciIpICYmIElTTE9XRVIgKCh1bnNpZ25lZCBjaGFyKSAqbikpCisJCQl8fCAoU1RSRVEgKHN0ciwgInByaW50IikgJiYgSVNQUklOVCAoKHVuc2lnbmVkIGNoYXIpICpuKSkKKwkJCXx8IChTVFJFUSAoc3RyLCAicHVuY3QiKSAmJiBJU1BVTkNUICgodW5zaWduZWQgY2hhcikgKm4pKQorCQkJfHwgKFNUUkVRIChzdHIsICJzcGFjZSIpICYmIElTU1BBQ0UgKCh1bnNpZ25lZCBjaGFyKSAqbikpCisJCQl8fCAoU1RSRVEgKHN0ciwgInVwcGVyIikgJiYgSVNVUFBFUiAoKHVuc2lnbmVkIGNoYXIpICpuKSkKKwkJCXx8IChTVFJFUSAoc3RyLCAieGRpZ2l0IikgJiYgSVNYRElHSVQgKCh1bnNpZ25lZCBjaGFyKSAqbikpKQorCQkgICAgICBnb3RvIG1hdGNoZWQ7CisjIGVuZGlmCisJCSAgfQorCQllbHNlIGlmIChjID09ICdcMCcpCisJCSAgLyogWyAodW50ZXJtaW5hdGVkKSBsb3Nlcy4gICovCisJCSAgcmV0dXJuIEZOTV9OT01BVENIOworCQllbHNlCisJCSAgeworCQkgIG5vcm1hbF9icmFja2V0OgorCQkgICAgaWYgKEZPTEQgKGMpID09IGZuKQorCQkgICAgICBnb3RvIG1hdGNoZWQ7CisKKwkJICAgIGNvbGQgPSBjOworCQkgICAgYyA9ICpwKys7CisKKwkJICAgIGlmIChjID09ICctJyAmJiAqcCAhPSAnXScpCisJCSAgICAgIHsKKwkJCS8qIEl0IGlzIGEgcmFuZ2UuICAqLworCQkJdW5zaWduZWQgY2hhciBjZW5kID0gKnArKzsKKwkJCWlmICghKGZsYWdzICYgRk5NX05PRVNDQVBFKSAmJiBjZW5kID09ICdcXCcpCisJCQkgIGNlbmQgPSAqcCsrOworCQkJaWYgKGNlbmQgPT0gJ1wwJykKKwkJCSAgcmV0dXJuIEZOTV9OT01BVENIOworCisJCQlpZiAoY29sZCA8PSBmbiAmJiBmbiA8PSBGT0xEIChjZW5kKSkKKwkJCSAgZ290byBtYXRjaGVkOworCisJCQljID0gKnArKzsKKwkJICAgICAgfQorCQkgIH0KKworCQlpZiAoYyA9PSAnXScpCisJCSAgYnJlYWs7CisJICAgICAgfQorCisJICAgIGlmICghbm90KQorCSAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKwkgICAgYnJlYWs7CisKKwkgIG1hdGNoZWQ6CisJICAgIC8qIFNraXAgdGhlIHJlc3Qgb2YgdGhlIFsuLi5dIHRoYXQgYWxyZWFkeSBtYXRjaGVkLiAgKi8KKwkgICAgd2hpbGUgKGMgIT0gJ10nKQorCSAgICAgIHsKKwkJaWYgKGMgPT0gJ1wwJykKKwkJICAvKiBbLi4uICh1bnRlcm1pbmF0ZWQpIGxvc2VzLiAgKi8KKwkJICByZXR1cm4gRk5NX05PTUFUQ0g7CisKKwkJYyA9ICpwKys7CisJCWlmICghKGZsYWdzICYgRk5NX05PRVNDQVBFKSAmJiBjID09ICdcXCcpCisJCSAgeworCQkgICAgaWYgKCpwID09ICdcMCcpCisJCSAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKwkJICAgIC8qIFhYWCAxMDAzLjJkMTEgaXMgdW5jbGVhciBpZiB0aGlzIGlzIHJpZ2h0LiAgKi8KKwkJICAgICsrcDsKKwkJICB9CisJCWVsc2UgaWYgKGMgPT0gJ1snICYmICpwID09ICc6JykKKwkJICB7CisJCSAgICBkbworCQkgICAgICBpZiAoKisrcCA9PSAnXDAnKQorCQkJcmV0dXJuIEZOTV9OT01BVENIOworCQkgICAgd2hpbGUgKCpwICE9ICc6JyB8fCBwWzFdID09ICddJyk7CisJCSAgICBwICs9IDI7CisJCSAgICBjID0gKnA7CisJCSAgfQorCSAgICAgIH0KKwkgICAgaWYgKG5vdCkKKwkgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisJICB9CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICBpZiAoYyAhPSBGT0xEICgodW5zaWduZWQgY2hhcikgKm4pKQorCSAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisJfQorCisgICAgICArK247CisgICAgfQorCisgIGlmICgqbiA9PSAnXDAnKQorICAgIHJldHVybiAwOworCisgIGlmICgoZmxhZ3MgJiBGTk1fTEVBRElOR19ESVIpICYmICpuID09ICcvJykKKyAgICAvKiBUaGUgRk5NX0xFQURJTkdfRElSIGZsYWcgc2F5cyB0aGF0ICJmb28qIiBtYXRjaGVzICJmb29iYXIvZnJvYm96eiIuICAqLworICAgIHJldHVybiAwOworCisgIHJldHVybiBGTk1fTk9NQVRDSDsKKworIyB1bmRlZiBGT0xECit9CisKKworaW50Citmbm1hdGNoIChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzKQorICAgICBjb25zdCBjaGFyICpwYXR0ZXJuOworICAgICBjb25zdCBjaGFyICpzdHJpbmc7CisgICAgIGludCBmbGFnczsKK3sKKyAgcmV0dXJuIGludGVybmFsX2ZubWF0Y2ggKHBhdHRlcm4sIHN0cmluZywgZmxhZ3MgJiBGTk1fUEVSSU9ELCBmbGFncyk7Cit9CisKKyNlbmRpZgkvKiBfTElCQyBvciBub3QgX19HTlVfTElCUkFSWV9fLiAgKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9mbm1hdGNoL2ZubWF0Y2guaCBiL2NvbXBhdC9mbm1hdGNoL2ZubWF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzNlYzM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2ZubWF0Y2gvZm5tYXRjaC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MSwgOTIsIDkzLCA5NiwgOTcsIDk4LCA5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2lmbmRlZglfRk5NQVRDSF9ICisjZGVmaW5lCV9GTk1BVENIX0gJMQorCisjaWZkZWYJX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IChkZWZpbmVkIF9fU1REQ19fICYmIF9fU1REQ19fKSB8fCBkZWZpbmVkIFdJTkRPV1MzMgorIyBpZiAhZGVmaW5lZCBfX0dMSUJDX18gfHwgIWRlZmluZWQgX19QCisjICB1bmRlZglfX1AKKyMgIGRlZmluZSBfX1AocHJvdG9zKQlwcm90b3MKKyMgZW5kaWYKKyNlbHNlIC8qIE5vdCBDKysgb3IgQU5TSSBDLiAgKi8KKyMgdW5kZWYJX19QCisjIGRlZmluZSBfX1AocHJvdG9zKQkoKQorLyogV2UgY2FuIGdldCBhd2F5IHdpdGhvdXQgZGVmaW5pbmcgYGNvbnN0JyBoZXJlIG9ubHkgYmVjYXVzZSBpbiB0aGlzIGZpbGUKKyAgIGl0IGlzIHVzZWQgb25seSBpbnNpZGUgdGhlIHByb3RvdHlwZSBmb3IgYGZubWF0Y2gnLCB3aGljaCBpcyBlbGlkZWQgaW4KKyAgIG5vbi1BTlNJIEMgd2hlcmUgYGNvbnN0JyBpcyBwcm9ibGVtYXRpY2FsLiAgKi8KKyNlbmRpZiAvKiBDKysgb3IgQU5TSSBDLiAgKi8KKworI2lmbmRlZiBjb25zdAorIyBpZiAoZGVmaW5lZCBfX1NURENfXyAmJiBfX1NURENfXykgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIF9fY29uc3QJY29uc3QKKyMgZWxzZQorIyAgZGVmaW5lIF9fY29uc3QKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBXZSAjdW5kZWYgdGhlc2UgYmVmb3JlIGRlZmluaW5nIHRoZW0gYmVjYXVzZSBzb21lIGxvc2luZyBzeXN0ZW1zCisgICAoSFAtVVggQS4wOC4wNyBmb3IgZXhhbXBsZSkgZGVmaW5lIHRoZXNlIGluIDx1bmlzdGQuaD4uICAqLworI3VuZGVmCUZOTV9QQVRITkFNRQorI3VuZGVmCUZOTV9OT0VTQ0FQRQorI3VuZGVmCUZOTV9QRVJJT0QKKworLyogQml0cyBzZXQgaW4gdGhlIEZMQUdTIGFyZ3VtZW50IHRvIGBmbm1hdGNoJy4gICovCisjZGVmaW5lCUZOTV9QQVRITkFNRQkoMSA8PCAwKSAvKiBObyB3aWxkY2FyZCBjYW4gZXZlciBtYXRjaCBgLycuICAqLworI2RlZmluZQlGTk1fTk9FU0NBUEUJKDEgPDwgMSkgLyogQmFja3NsYXNoZXMgZG9uJ3QgcXVvdGUgc3BlY2lhbCBjaGFycy4gICovCisjZGVmaW5lCUZOTV9QRVJJT0QJKDEgPDwgMikgLyogTGVhZGluZyBgLicgaXMgbWF0Y2hlZCBvbmx5IGV4cGxpY2l0bHkuICAqLworCisjaWYgIWRlZmluZWQgX1BPU0lYX0NfU09VUkNFIHx8IF9QT1NJWF9DX1NPVVJDRSA8IDIgfHwgZGVmaW5lZCBfR05VX1NPVVJDRQorIyBkZWZpbmUgRk5NX0ZJTEVfTkFNRQkgRk5NX1BBVEhOQU1FCS8qIFByZWZlcnJlZCBHTlUgbmFtZS4gICovCisjIGRlZmluZSBGTk1fTEVBRElOR19ESVIgKDEgPDwgMykJLyogSWdub3JlIGAvLi4uJyBhZnRlciBhIG1hdGNoLiAgKi8KKyMgZGVmaW5lIEZOTV9DQVNFRk9MRAkgKDEgPDwgNCkJLyogQ29tcGFyZSB3aXRob3V0IHJlZ2FyZCB0byBjYXNlLiAgKi8KKyNlbmRpZgorCisvKiBWYWx1ZSByZXR1cm5lZCBieSBgZm5tYXRjaCcgaWYgU1RSSU5HIGRvZXMgbm90IG1hdGNoIFBBVFRFUk4uICAqLworI2RlZmluZQlGTk1fTk9NQVRDSAkxCisKKy8qIFRoaXMgdmFsdWUgaXMgcmV0dXJuZWQgaWYgdGhlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQKKyAgIGBmbm1hdGNoJy4gIFNpbmNlIHRoaXMgaXMgbm90IHRoZSBjYXNlIGhlcmUgaXQgd2lsbCBuZXZlciBiZQorICAgcmV0dXJuZWQgYnV0IHRoZSBjb25mb3JtYW5jZSB0ZXN0IHN1aXRlcyBzdGlsbCByZXF1aXJlIHRoZSBzeW1ib2wKKyAgIHRvIGJlIGRlZmluZWQuICAqLworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKKyMgZGVmaW5lIEZOTV9OT1NZUwkoLTEpCisjZW5kaWYKKworLyogTWF0Y2ggTkFNRSBhZ2FpbnN0IHRoZSBmaWxlbmFtZSBwYXR0ZXJuIFBBVFRFUk4sCisgICByZXR1cm5pbmcgemVybyBpZiBpdCBtYXRjaGVzLCBGTk1fTk9NQVRDSCBpZiBub3QuICAqLworZXh0ZXJuIGludCBmbm1hdGNoIF9fUCAoKF9fY29uc3QgY2hhciAqX19wYXR0ZXJuLCBfX2NvbnN0IGNoYXIgKl9fbmFtZSwKKwkJCSBpbnQgX19mbGFncykpOworCisjaWZkZWYJX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZm5tYXRjaC5oICovCmRpZmYgLS1naXQgYS9jb21wYXQvZm9wZW4uYyBiL2NvbXBhdC9mb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Y2ExNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvZm9wZW4uYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogIFRoZSBvcmRlciBvZiB0aGUgZm9sbG93aW5nIHR3byBsaW5lcyBpcyBpbXBvcnRhbnQuCisgKgorICogIEZSRUFEX1JFQURTX0RJUkVDVE9SSUVTIGlzIHVuZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIGdpdC1jb21wYXQtdXRpbC5oCisgKiAgdG8gYXZvaWQgdGhlIHJlZGVmaW5pdGlvbiBvZiBmb3BlbiB3aXRoaW4gZ2l0LWNvbXBhdC11dGlsLmguIFRoaXMgaXMKKyAqICBuZWNlc3Nhcnkgc2luY2UgZm9wZW4gaXMgYSBtYWNybyBvbiBzb21lIHBsYXRmb3JtcyB3aGljaCBtYXkgYmUgc2V0CisgKiAgYmFzZWQgb24gY29tcGlsZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIG9uIEFJWCBmb3BlbiBpcyBzZXQgdG8gZm9wZW42NAorICogIHdoZW4gX0xBUkdFX0ZJTEVTIGlzIGRlZmluZWQuIFRoZSBwcmV2aW91cyB0ZWNobmlxdWUgb2YgbWVyZWx5IHVuZGVmaW5pbmcKKyAqICBmb3BlbiBhZnRlciBpbmNsdWRpbmcgZ2l0LWNvbXBhdC11dGlsLmggaXMgaW5hZGVxdWF0ZSBpbiB0aGlzIGNhc2UuCisgKi8KKyN1bmRlZiBGUkVBRF9SRUFEU19ESVJFQ1RPUklFUworI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitGSUxFICpnaXRfZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlGSUxFICpmcDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChtb2RlWzBdID09ICd3JyB8fCBtb2RlWzBdID09ICdhJykKKwkJcmV0dXJuIGZvcGVuKHBhdGgsIG1vZGUpOworCisJaWYgKCEoZnAgPSBmb3BlbihwYXRoLCBtb2RlKSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKGZzdGF0KGZpbGVubyhmcCksICZzdCkpIHsKKwkJZmNsb3NlKGZwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJZmNsb3NlKGZwKTsKKwkJZXJybm8gPSBFSVNESVI7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBmcDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9oc3RyZXJyb3IuYyBiL2NvbXBhdC9oc3RyZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjljNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2hzdHJlcnJvci5jCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKK2NvbnN0IGNoYXIgKmdpdGhzdHJlcnJvcihpbnQgZXJyKQoreworCXN0YXRpYyBjaGFyIGJ1ZmZlcls0OF07CisJc3dpdGNoIChlcnIpCisJeworCWNhc2UgSE9TVF9OT1RfRk9VTkQ6CisJCXJldHVybiAiQXV0aG9yaXRhdGl2ZSBhbnN3ZXI6IGhvc3Qgbm90IGZvdW5kIjsKKwljYXNlIE5PX0RBVEE6CisJCXJldHVybiAiVmFsaWQgbmFtZSwgbm8gZGF0YSByZWNvcmQgb2YgcmVxdWVzdGVkIHR5cGUiOworCWNhc2UgTk9fUkVDT1ZFUlk6CisJCXJldHVybiAiTm9uIHJlY292ZXJhYmxlIGVycm9ycywgRk9STUVSUiwgUkVGVVNFRCwgTk9USU1QIjsKKwljYXNlIFRSWV9BR0FJTjoKKwkJcmV0dXJuICJOb24tYXV0aG9yaXRhdGl2ZSBcImhvc3Qgbm90IGZvdW5kXCIsIG9yIFNFUlZFUkZBSUwiOworCX0KKwlzcHJpbnRmKGJ1ZmZlciwgIk5hbWUgcmVzb2x1dGlvbiBlcnJvciAlZCIsIGVycik7CisJcmV0dXJuIGJ1ZmZlcjsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9pbmV0X250b3AuYyBiL2NvbXBhdC9pbmV0X250b3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGI3Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2luZXRfbnRvcC5jCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0gRElTQ0xBSU1TCisgKiBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVSTkVUIFNPRlRXQVJFCisgKiBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisjaWZuZGVmIE5TX0lOQUREUlNaCisjZGVmaW5lIE5TX0lOQUREUlNaCTQKKyNlbmRpZgorI2lmbmRlZiBOU19JTjZBRERSU1oKKyNkZWZpbmUgTlNfSU42QUREUlNaCTE2CisjZW5kaWYKKyNpZm5kZWYgTlNfSU5UMTZTWgorI2RlZmluZSBOU19JTlQxNlNaCTIKKyNlbmRpZgorCisvKgorICogV0FSTklORzogRG9uJ3QgZXZlbiBjb25zaWRlciB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIG9uIGEgc3lzdGVtIHdoZXJlCisgKiBzaXplb2YoaW50KSA8IDQuICBzaXplb2YoaW50KSA+IDQgaXMgZmluZTsgYWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KKyAqLworCisvKiBjb25zdCBjaGFyICoKKyAqIGluZXRfbnRvcDQoc3JjLCBkc3QsIHNpemUpCisgKglmb3JtYXQgYW4gSVB2NCBhZGRyZXNzCisgKiByZXR1cm46CisgKglgZHN0JyAoYXMgYSBjb25zdCkKKyAqIG5vdGVzOgorICoJKDEpIHVzZXMgbm8gc3RhdGljcworICoJKDIpIHRha2VzIGEgdV9jaGFyKiBub3QgYW4gaW5fYWRkciBhcyBpbnB1dAorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgoraW5ldF9udG9wNChjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBmbXRbXSA9ICIldS4ldS4ldS4ldSI7CisJY2hhciB0bXBbc2l6ZW9mICIyNTUuMjU1LjI1NS4yNTUiXTsKKwlpbnQgbnByaW50ZWQ7CisKKwlucHJpbnRlZCA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksIGZtdCwgc3JjWzBdLCBzcmNbMV0sIHNyY1syXSwgc3JjWzNdKTsKKwlpZiAobnByaW50ZWQgPCAwKQorCQlyZXR1cm4gKE5VTEwpOwkvKiB3ZSBhc3N1bWUgImVycm5vIiB3YXMgc2V0IGJ5ICJzbnByaW50ZigpIiAqLworCWlmICgoc2l6ZV90KW5wcmludGVkID4gc2l6ZSkgeworCQllcnJubyA9IEVOT1NQQzsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJc3RyY3B5KGRzdCwgdG1wKTsKKwlyZXR1cm4gKGRzdCk7Cit9CisKKyNpZm5kZWYgTk9fSVBWNgorLyogY29uc3QgY2hhciAqCisgKiBpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKQorICoJY29udmVydCBJUHY2IGJpbmFyeSBhZGRyZXNzIGludG8gcHJlc2VudGF0aW9uIChwcmludGFibGUpIGZvcm1hdAorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgoraW5ldF9udG9wNihjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKwkvKgorCSAqIE5vdGUgdGhhdCBpbnQzMl90IGFuZCBpbnQxNl90IG5lZWQgb25seSBiZSAiYXQgbGVhc3QiIGxhcmdlIGVub3VnaAorCSAqIHRvIGNvbnRhaW4gYSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuICBPbiBzb21lIHN5c3RlbXMsIGxpa2UKKwkgKiBDcmF5cywgdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBhbiBpbnRlZ2VyIHZhcmlhYmxlIHdpdGggMTYgYml0cy4KKwkgKiBLZWVwIHRoaXMgaW4gbWluZCBpZiB5b3UgdGhpbmsgdGhpcyBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNvZGVkCisJICogdG8gdXNlIHBvaW50ZXIgb3ZlcmxheXMuICBBbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorCSAqLworCWNoYXIgdG1wW3NpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6MjU1LjI1NS4yNTUuMjU1Il0sICp0cDsKKwlzdHJ1Y3QgeyBpbnQgYmFzZSwgbGVuOyB9IGJlc3QsIGN1cjsKKwl1bnNpZ25lZCBpbnQgd29yZHNbTlNfSU42QUREUlNaIC8gTlNfSU5UMTZTWl07CisJaW50IGk7CisKKwkvKgorCSAqIFByZXByb2Nlc3M6CisJICoJQ29weSB0aGUgaW5wdXQgKGJ5dGV3aXNlKSBhcnJheSBpbnRvIGEgd29yZHdpc2UgYXJyYXkuCisJICoJRmluZCB0aGUgbG9uZ2VzdCBydW4gb2YgMHgwMCdzIGluIHNyY1tdIGZvciA6OiBzaG9ydGhhbmRpbmcuCisJICovCisJbWVtc2V0KHdvcmRzLCAnXDAnLCBzaXplb2Ygd29yZHMpOworCWZvciAoaSA9IDA7IGkgPCBOU19JTjZBRERSU1o7IGkrKykKKwkJd29yZHNbaSAvIDJdIHw9IChzcmNbaV0gPDwgKCgxIC0gKGkgJSAyKSkgPDwgMykpOworCWJlc3QuYmFzZSA9IC0xOworCWJlc3QubGVuID0gMDsKKwljdXIuYmFzZSA9IC0xOworCWN1ci5sZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCAoTlNfSU42QUREUlNaIC8gTlNfSU5UMTZTWik7IGkrKykgeworCQlpZiAod29yZHNbaV0gPT0gMCkgeworCQkJaWYgKGN1ci5iYXNlID09IC0xKQorCQkJCWN1ci5iYXNlID0gaSwgY3VyLmxlbiA9IDE7CisJCQllbHNlCisJCQkJY3VyLmxlbisrOworCQl9IGVsc2UgeworCQkJaWYgKGN1ci5iYXNlICE9IC0xKSB7CisJCQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQkJCWJlc3QgPSBjdXI7CisJCQkJY3VyLmJhc2UgPSAtMTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKKwkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQliZXN0ID0gY3VyOworCX0KKwlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGJlc3QubGVuIDwgMikKKwkJYmVzdC5iYXNlID0gLTE7CisKKwkvKgorCSAqIEZvcm1hdCB0aGUgcmVzdWx0LgorCSAqLworCXRwID0gdG1wOworCWZvciAoaSA9IDA7IGkgPCAoTlNfSU42QUREUlNaIC8gTlNfSU5UMTZTWik7IGkrKykgeworCQkvKiBBcmUgd2UgaW5zaWRlIHRoZSBiZXN0IHJ1biBvZiAweDAwJ3M/ICovCisJCWlmIChiZXN0LmJhc2UgIT0gLTEgJiYgaSA+PSBiZXN0LmJhc2UgJiYKKwkJICAgIGkgPCAoYmVzdC5iYXNlICsgYmVzdC5sZW4pKSB7CisJCQlpZiAoaSA9PSBiZXN0LmJhc2UpCisJCQkJKnRwKysgPSAnOic7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBBcmUgd2UgZm9sbG93aW5nIGFuIGluaXRpYWwgcnVuIG9mIDB4MDBzIG9yIGFueSByZWFsIGhleD8gKi8KKwkJaWYgKGkgIT0gMCkKKwkJCSp0cCsrID0gJzonOworCQkvKiBJcyB0aGlzIGFkZHJlc3MgYW4gZW5jYXBzdWxhdGVkIElQdjQ/ICovCisJCWlmIChpID09IDYgJiYgYmVzdC5iYXNlID09IDAgJiYKKwkJICAgIChiZXN0LmxlbiA9PSA2IHx8IChiZXN0LmxlbiA9PSA1ICYmIHdvcmRzWzVdID09IDB4ZmZmZikpKSB7CisJCQlpZiAoIWluZXRfbnRvcDQoc3JjKzEyLCB0cCwgc2l6ZW9mIHRtcCAtICh0cCAtIHRtcCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl0cCArPSBzdHJsZW4odHApOworCQkJYnJlYWs7CisJCX0KKwkJdHAgKz0gc25wcmludGYodHAsIHNpemVvZiB0bXAgLSAodHAgLSB0bXApLCAiJXgiLCB3b3Jkc1tpXSk7CisJfQorCS8qIFdhcyBpdCBhIHRyYWlsaW5nIHJ1biBvZiAweDAwJ3M/ICovCisJaWYgKGJlc3QuYmFzZSAhPSAtMSAmJiAoYmVzdC5iYXNlICsgYmVzdC5sZW4pID09CisJICAgIChOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaKSkKKwkJKnRwKysgPSAnOic7CisJKnRwKysgPSAnXDAnOworCisJLyoKKwkgKiBDaGVjayBmb3Igb3ZlcmZsb3csIGNvcHksIGFuZCB3ZSdyZSBkb25lLgorCSAqLworCWlmICgoc2l6ZV90KSh0cCAtIHRtcCkgPiBzaXplKSB7CisJCWVycm5vID0gRU5PU1BDOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlzdHJjcHkoZHN0LCB0bXApOworCXJldHVybiAoZHN0KTsKK30KKyNlbmRpZgorCisvKiBjaGFyICoKKyAqIGluZXRfbnRvcChhZiwgc3JjLCBkc3QsIHNpemUpCisgKgljb252ZXJ0IGEgbmV0d29yayBmb3JtYXQgYWRkcmVzcyB0byBwcmVzZW50YXRpb24gZm9ybWF0LgorICogcmV0dXJuOgorICoJcG9pbnRlciB0byBwcmVzZW50YXRpb24gZm9ybWF0IGFkZHJlc3MgKGBkc3QnKSwgb3IgTlVMTCAoc2VlIGVycm5vKS4KKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK2NvbnN0IGNoYXIgKgoraW5ldF9udG9wKGludCBhZiwgY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQoreworCXN3aXRjaCAoYWYpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiAoaW5ldF9udG9wNChzcmMsIGRzdCwgc2l6ZSkpOworI2lmbmRlZiBOT19JUFY2CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIChpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKSk7CisjZW5kaWYKKwlkZWZhdWx0OgorCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2luZXRfcHRvbi5jIGIvY29tcGF0L2luZXRfcHRvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOWEwYTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvaW5ldF9wdG9uLmMKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSAgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0KKyAqIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcKKyAqIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisjaWZuZGVmIE5TX0lOVDE2U1oKKyNkZWZpbmUgTlNfSU5UMTZTWiAgICAgICAyCisjZW5kaWYKKworI2lmbmRlZiBOU19JTkFERFJTWgorI2RlZmluZSBOU19JTkFERFJTWiAgICAgIDQKKyNlbmRpZgorCisjaWZuZGVmIE5TX0lONkFERFJTWgorI2RlZmluZSBOU19JTjZBRERSU1ogICAgMTYKKyNlbmRpZgorCisvKgorICogV0FSTklORzogRG9uJ3QgZXZlbiBjb25zaWRlciB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIG9uIGEgc3lzdGVtIHdoZXJlCisgKiBzaXplb2YoaW50KSA8IDQuICBzaXplb2YoaW50KSA+IDQgaXMgZmluZTsgYWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KKyAqLworCitzdGF0aWMgaW50IGluZXRfcHRvbjQoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QpOworI2lmbmRlZiBOT19JUFY2CitzdGF0aWMgaW50IGluZXRfcHRvbjYoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QpOworI2VuZGlmCisKKy8qIGludAorICogaW5ldF9wdG9uNChzcmMsIGRzdCkKKyAqICAgICAgbGlrZSBpbmV0X2F0b24oKSBidXQgd2l0aG91dCBhbGwgdGhlIGhleGFkZWNpbWFsIGFuZCBzaG9ydGhhbmQuCisgKiByZXR1cm46CisgKiAgICAgIDEgaWYgYHNyYycgaXMgYSB2YWxpZCBkb3R0ZWQgcXVhZCwgZWxzZSAwLgorICogbm90aWNlOgorICogICAgICBkb2VzIG5vdCB0b3VjaCBgZHN0JyB1bmxlc3MgaXQncyByZXR1cm5pbmcgMS4KKyAqIGF1dGhvcjoKKyAqICAgICAgUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGludAoraW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCkKK3sKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRzW10gPSAiMDEyMzQ1Njc4OSI7CisgICAgICAgIGludCBzYXdfZGlnaXQsIG9jdGV0cywgY2g7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdG1wW05TX0lOQUREUlNaXSwgKnRwOworCisgICAgICAgIHNhd19kaWdpdCA9IDA7CisgICAgICAgIG9jdGV0cyA9IDA7CisgICAgICAgICoodHAgPSB0bXApID0gMDsKKyAgICAgICAgd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBjaDsKKworICAgICAgICAgICAgICAgIGlmICgocGNoID0gc3RyY2hyKGRpZ2l0cywgY2gpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmV3ID0gKnRwICogMTAgKyAocGNoIC0gZGlnaXRzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldyA+IDI1NSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICp0cCA9IG5ldzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIHNhd19kaWdpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytvY3RldHMgPiA0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhd19kaWdpdCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnLicgJiYgc2F3X2RpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2N0ZXRzID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAqKyt0cCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBzYXdfZGlnaXQgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2N0ZXRzIDwgNCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICBtZW1jcHkoZHN0LCB0bXAsIE5TX0lOQUREUlNaKTsKKyAgICAgICAgcmV0dXJuICgxKTsKK30KKworLyogaW50CisgKiBpbmV0X3B0b242KHNyYywgZHN0KQorICogICAgICBjb252ZXJ0IHByZXNlbnRhdGlvbiBsZXZlbCBhZGRyZXNzIHRvIG5ldHdvcmsgb3JkZXIgYmluYXJ5IGZvcm0uCisgKiByZXR1cm46CisgKiAgICAgIDEgaWYgYHNyYycgaXMgYSB2YWxpZCBbUkZDMTg4NCAyLjJdIGFkZHJlc3MsIGVsc2UgMC4KKyAqIG5vdGljZToKKyAqICAgICAgKDEpIGRvZXMgbm90IHRvdWNoIGBkc3QnIHVubGVzcyBpdCdzIHJldHVybmluZyAxLgorICogICAgICAoMikgOjogaW4gYSBmdWxsIGFkZHJlc3MgaXMgc2lsZW50bHkgaWdub3JlZC4KKyAqIGNyZWRpdDoKKyAqICAgICAgaW5zcGlyZWQgYnkgTWFyayBBbmRyZXdzLgorICogYXV0aG9yOgorICogICAgICBQYXVsIFZpeGllLCAxOTk2LgorICovCisKKyNpZm5kZWYgTk9fSVBWNgorc3RhdGljIGludAoraW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCkKK3sKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgeGRpZ2l0c19sW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHhkaWdpdHNfdVtdID0gIjAxMjM0NTY3ODlBQkNERUYiOworICAgICAgICB1bnNpZ25lZCBjaGFyIHRtcFtOU19JTjZBRERSU1pdLCAqdHAsICplbmRwLCAqY29sb25wOworICAgICAgICBjb25zdCBjaGFyICp4ZGlnaXRzLCAqY3VydG9rOworICAgICAgICBpbnQgY2gsIHNhd194ZGlnaXQ7CisgICAgICAgIHVuc2lnbmVkIGludCB2YWw7CisKKyAgICAgICAgbWVtc2V0KCh0cCA9IHRtcCksICdcMCcsIE5TX0lONkFERFJTWik7CisgICAgICAgIGVuZHAgPSB0cCArIE5TX0lONkFERFJTWjsKKyAgICAgICAgY29sb25wID0gTlVMTDsKKyAgICAgICAgLyogTGVhZGluZyA6OiByZXF1aXJlcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcuICovCisgICAgICAgIGlmICgqc3JjID09ICc6JykKKyAgICAgICAgICAgICAgICBpZiAoKisrc3JjICE9ICc6JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIGN1cnRvayA9IHNyYzsKKyAgICAgICAgc2F3X3hkaWdpdCA9IDA7CisgICAgICAgIHZhbCA9IDA7CisgICAgICAgIHdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwY2g7CisKKyAgICAgICAgICAgICAgICBpZiAoKHBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfbCksIGNoKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfdSksIGNoKTsKKyAgICAgICAgICAgICAgICBpZiAocGNoICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA8PD0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCB8PSAocGNoIC0geGRpZ2l0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID4gMHhmZmZmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgc2F3X3hkaWdpdCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICc6JykgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VydG9rID0gc3JjOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzYXdfeGRpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvbnApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb25wID0gdHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwICsgTlNfSU5UMTZTWiA+IGVuZHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAqdHArKyA9ICh1bnNpZ25lZCBjaGFyKSAodmFsID4+IDgpICYgMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICp0cCsrID0gKHVuc2lnbmVkIGNoYXIpIHZhbCAmIDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICBzYXdfeGRpZ2l0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICcuJyAmJiAoKHRwICsgTlNfSU5BRERSU1opIDw9IGVuZHApICYmCisgICAgICAgICAgICAgICAgICAgIGluZXRfcHRvbjQoY3VydG9rLCB0cCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cCArPSBOU19JTkFERFJTWjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhd194ZGlnaXQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvKiAnXDAnIHdhcyBzZWVuIGJ5IGluZXRfcHRvbjQoKS4gKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2F3X3hkaWdpdCkgeworICAgICAgICAgICAgICAgIGlmICh0cCArIE5TX0lOVDE2U1ogPiBlbmRwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAqdHArKyA9ICh1bnNpZ25lZCBjaGFyKSAodmFsID4+IDgpICYgMHhmZjsKKyAgICAgICAgICAgICAgICAqdHArKyA9ICh1bnNpZ25lZCBjaGFyKSB2YWwgJiAweGZmOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xvbnAgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogU2luY2Ugc29tZSBtZW1tb3ZlKCkncyBlcnJvbmVvdXNseSBmYWlsIHRvIGhhbmRsZQorICAgICAgICAgICAgICAgICAqIG92ZXJsYXBwaW5nIHJlZ2lvbnMsIHdlJ2xsIGRvIHRoZSBzaGlmdCBieSBoYW5kLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGNvbnN0IGludCBuID0gdHAgLSBjb2xvbnA7CisgICAgICAgICAgICAgICAgaW50IGk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5kcFstIGldID0gY29sb25wW24gLSBpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ucFtuIC0gaV0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cCA9IGVuZHA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRwICE9IGVuZHApCisgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgbWVtY3B5KGRzdCwgdG1wLCBOU19JTjZBRERSU1opOworICAgICAgICByZXR1cm4gKDEpOworfQorI2VuZGlmCisKKy8qIGludAorICogaXNjX25ldF9wdG9uKGFmLCBzcmMsIGRzdCkKKyAqICAgICAgY29udmVydCBmcm9tIHByZXNlbnRhdGlvbiBmb3JtYXQgKHdoaWNoIHVzdWFsbHkgbWVhbnMgQVNDSUkgcHJpbnRhYmxlKQorICogICAgICB0byBuZXR3b3JrIGZvcm1hdCAod2hpY2ggaXMgdXN1YWxseSBzb21lIGtpbmQgb2YgYmluYXJ5IGZvcm1hdCkuCisgKiByZXR1cm46CisgKiAgICAgIDEgaWYgdGhlIGFkZHJlc3Mgd2FzIHZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgZmFtaWx5CisgKiAgICAgIDAgaWYgdGhlIGFkZHJlc3Mgd2Fzbid0IHZhbGlkIChgZHN0JyBpcyB1bnRvdWNoZWQgaW4gdGhpcyBjYXNlKQorICogICAgICAtMSBpZiBzb21lIG90aGVyIGVycm9yIG9jY3VycmVkIChgZHN0JyBpcyB1bnRvdWNoZWQgaW4gdGhpcyBjYXNlLCB0b28pCisgKiBhdXRob3I6CisgKiAgICAgIFBhdWwgVml4aWUsIDE5OTYuCisgKi8KK2ludAoraW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCit7CisgICAgICAgIHN3aXRjaCAoYWYpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgICAgIHJldHVybiAoaW5ldF9wdG9uNChzcmMsIGRzdCkpOworI2lmbmRlZiBOT19JUFY2CisgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbmV0X3B0b242KHNyYywgZHN0KSk7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBlcnJubyA9IEVBRk5PU1VQUE9SVDsKKyAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgfQorICAgICAgICAvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9jb21wYXQvbWVtbWVtLmMgYi9jb21wYXQvbWVtbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiY2I0MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9tZW1tZW0uYwpAQCAtMCwwICsxLDMyIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK3ZvaWQgKmdpdG1lbW1lbShjb25zdCB2b2lkICpoYXlzdGFjaywgc2l6ZV90IGhheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpuZWVkbGUsIHNpemVfdCBuZWVkbGVfbGVuKQoreworCWNvbnN0IGNoYXIgKmJlZ2luID0gaGF5c3RhY2s7CisJY29uc3QgY2hhciAqbGFzdF9wb3NzaWJsZSA9IGJlZ2luICsgaGF5c3RhY2tfbGVuIC0gbmVlZGxlX2xlbjsKKwljb25zdCBjaGFyICp0YWlsID0gbmVlZGxlOworCWNoYXIgcG9pbnQ7CisKKwkvKgorCSAqIFRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBlbXB0eSBzdHJpbmcgaXMgZGVlbWVkIHRvIG9jY3VyIGF0CisJICogdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLgorCSAqLworCWlmIChuZWVkbGVfbGVuID09IDApCisJCXJldHVybiAodm9pZCAqKWJlZ2luOworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2ssIG90aGVyd2lzZSB0aGUgbG9vcCBtaWdodCBzZWFyY2ggdGhyb3VnaCB0aGUgd2hvbGUKKwkgKiBtZW1vcnkuCisJICovCisJaWYgKGhheXN0YWNrX2xlbiA8IG5lZWRsZV9sZW4pCisJCXJldHVybiBOVUxMOworCisJcG9pbnQgPSAqdGFpbCsrOworCWZvciAoOyBiZWdpbiA8PSBsYXN0X3Bvc3NpYmxlOyBiZWdpbisrKSB7CisJCWlmICgqYmVnaW4gPT0gcG9pbnQgJiYgIW1lbWNtcChiZWdpbiArIDEsIHRhaWwsIG5lZWRsZV9sZW4gLSAxKSkKKwkJCXJldHVybiAodm9pZCAqKWJlZ2luOworCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmMgYi9jb21wYXQvbWluZ3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmM4OTJkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21pbmd3LmMKQEAgLTAsMCArMSwxNzY3IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAid2luMzIuaCIKKyNpbmNsdWRlIDxjb25pby5oPgorI2luY2x1ZGUgIi4uL3N0cmJ1Zi5oIgorI2luY2x1ZGUgIi4uL3J1bi1jb21tYW5kLmgiCisKK3N0YXRpYyBjb25zdCBpbnQgZGVsYXlbXSA9IHsgMCwgMSwgMTAsIDIwLCA0MCB9OworCitpbnQgZXJyX3dpbl90b19wb3NpeChEV09SRCB3aW5lcnIpCit7CisJaW50IGVycm9yID0gRU5PU1lTOworCXN3aXRjaCh3aW5lcnIpIHsKKwljYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0FDQ09VTlRfRElTQUJMRUQ6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0FDQ09VTlRfUkVTVFJJQ1RJT046IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0FMUkVBRFlfQVNTSUdORUQ6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfQUxSRUFEWV9FWElTVFM6IGVycm9yID0gRUVYSVNUOyBicmVhazsKKwljYXNlIEVSUk9SX0FSSVRITUVUSUNfT1ZFUkZMT1c6IGVycm9yID0gRVJBTkdFOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9DT01NQU5EOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfREVWSUNFOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfRFJJVkVSX0xFVkVMOiBlcnJvciA9IEVOWElPOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9FWEVfRk9STUFUOiBlcnJvciA9IEVOT0VYRUM7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX0ZPUk1BVDogZXJyb3IgPSBFTk9FWEVDOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9MRU5HVEg6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9QQVRITkFNRTogZXJyb3IgPSBFTk9FTlQ7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX1BJUEU6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX1VOSVQ6IGVycm9yID0gRU5PREVWOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9VU0VSTkFNRTogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfQlJPS0VOX1BJUEU6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfQlVGRkVSX09WRVJGTE9XOiBlcnJvciA9IEVOQU1FVE9PTE9ORzsgYnJlYWs7CisJY2FzZSBFUlJPUl9CVVNZOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX0JVU1lfRFJJVkU6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQ6IGVycm9yID0gRU5PU1lTOyBicmVhazsKKwljYXNlIEVSUk9SX0NBTk5PVF9NQUtFOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9DQU5UT1BFTjogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfQ0FOVFJFQUQ6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0NBTlRXUklURTogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfQ1JDOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9DVVJSRU5UX0RJUkVDVE9SWTogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfREVWSUNFX0lOX1VTRTogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9ERVZfTk9UX0VYSVNUOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9ESVJFQ1RPUlk6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0RJUl9OT1RfRU1QVFk6IGVycm9yID0gRU5PVEVNUFRZOyBicmVhazsKKwljYXNlIEVSUk9SX0RJU0tfQ0hBTkdFOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9ESVNLX0ZVTEw6IGVycm9yID0gRU5PU1BDOyBicmVhazsKKwljYXNlIEVSUk9SX0RSSVZFX0xPQ0tFRDogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5EOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9FWEVfTUFSS0VEX0lOVkFMSUQ6IGVycm9yID0gRU5PRVhFQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9GSUxFTkFNRV9FWENFRF9SQU5HRTogZXJyb3IgPSBFTkFNRVRPT0xPTkc7IGJyZWFrOworCWNhc2UgRVJST1JfRklMRV9FWElTVFM6IGVycm9yID0gRUVYSVNUOyBicmVhazsKKwljYXNlIEVSUk9SX0ZJTEVfSU5WQUxJRDogZXJyb3IgPSBFTk9ERVY7IGJyZWFrOworCWNhc2UgRVJST1JfRklMRV9OT1RfRk9VTkQ6IGVycm9yID0gRU5PRU5UOyBicmVhazsKKwljYXNlIEVSUk9SX0dFTl9GQUlMVVJFOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9IQU5ETEVfRElTS19GVUxMOiBlcnJvciA9IEVOT1NQQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSOiBlcnJvciA9IEVOT01FTTsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0FDQ0VTUzogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9BRERSRVNTOiBlcnJvciA9IEVGQVVMVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0JMT0NLOiBlcnJvciA9IEVGQVVMVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0RBVEE6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfRFJJVkU6IGVycm9yID0gRU5PREVWOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfRVhFX1NJR05BVFVSRTogZXJyb3IgPSBFTk9FWEVDOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfRkxBR1M6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfRlVOQ1RJT046IGVycm9yID0gRU5PU1lTOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOiBlcnJvciA9IEVCQURGOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfTE9HT05fSE9VUlM6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfTkFNRTogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9PV05FUjogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9QQVJBTUVURVI6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfUEFTU1dPUkQ6IGVycm9yID0gRVBFUk07IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9QUklNQVJZX0dST1VQOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX1NJR05BTF9OVU1CRVI6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfVEFSR0VUX0hBTkRMRTogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9XT1JLU1RBVElPTjogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfSU9fREVWSUNFOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JT19JTkNPTVBMRVRFOiBlcnJvciA9IEVJTlRSOyBicmVhazsKKwljYXNlIEVSUk9SX0xPQ0tFRDogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9MT0NLX1ZJT0xBVElPTjogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfTE9HT05fRkFJTFVSRTogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfTUFQUEVEX0FMSUdOTUVOVDogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfTUVUQV9FWFBBTlNJT05fVE9PX0xPTkc6IGVycm9yID0gRTJCSUc7IGJyZWFrOworCWNhc2UgRVJST1JfTU9SRV9EQVRBOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX05FR0FUSVZFX1NFRUs6IGVycm9yID0gRVNQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX05PQUNDRVNTOiBlcnJvciA9IEVGQVVMVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT05FX01BUFBFRDogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk6IGVycm9yID0gRU5PTUVNOyBicmVhazsKKwljYXNlIEVSUk9SX05PVF9SRUFEWTogZXJyb3IgPSBFQUdBSU47IGJyZWFrOworCWNhc2UgRVJST1JfTk9UX1NBTUVfREVWSUNFOiBlcnJvciA9IEVYREVWOyBicmVhazsKKwljYXNlIEVSUk9SX05PX0RBVEE6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfTk9fTU9SRV9TRUFSQ0hfSEFORExFUzogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfTk9fUFJPQ19TTE9UUzogZXJyb3IgPSBFQUdBSU47IGJyZWFrOworCWNhc2UgRVJST1JfTk9fU1VDSF9QUklWSUxFR0U6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX09QRU5fRkFJTEVEOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9PUEVOX0ZJTEVTOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX09QRVJBVElPTl9BQk9SVEVEOiBlcnJvciA9IEVJTlRSOyBicmVhazsKKwljYXNlIEVSUk9SX09VVE9GTUVNT1JZOiBlcnJvciA9IEVOT01FTTsgYnJlYWs7CisJY2FzZSBFUlJPUl9QQVNTV09SRF9FWFBJUkVEOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9QQVRIX0JVU1k6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfUEFUSF9OT1RfRk9VTkQ6IGVycm9yID0gRU5PRU5UOyBicmVhazsKKwljYXNlIEVSUk9SX1BJUEVfQlVTWTogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9QSVBFX0NPTk5FQ1RFRDogZXJyb3IgPSBFUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9QSVBFX0xJU1RFTklORzogZXJyb3IgPSBFUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9QSVBFX05PVF9DT05ORUNURUQ6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfUFJJVklMRUdFX05PVF9IRUxEOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9SRUFEX0ZBVUxUOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9TRUVLOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9TRUVLX09OX0RFVklDRTogZXJyb3IgPSBFU1BJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfU0hBUklOR19CVUZGRVJfRVhDRUVERUQ6IGVycm9yID0gRU5GSUxFOyBicmVhazsKKwljYXNlIEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9TVEFDS19PVkVSRkxPVzogZXJyb3IgPSBFTk9NRU07IGJyZWFrOworCWNhc2UgRVJST1JfU1dBUEVSUk9SOiBlcnJvciA9IEVOT0VOVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9UT09fTUFOWV9NT0RVTEVTOiBlcnJvciA9IEVNRklMRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9UT09fTUFOWV9PUEVOX0ZJTEVTOiBlcnJvciA9IEVNRklMRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9VTlJFQ09HTklaRURfTUVESUE6IGVycm9yID0gRU5YSU87IGJyZWFrOworCWNhc2UgRVJST1JfVU5SRUNPR05JWkVEX1ZPTFVNRTogZXJyb3IgPSBFTk9ERVY7IGJyZWFrOworCWNhc2UgRVJST1JfV0FJVF9OT19DSElMRFJFTjogZXJyb3IgPSBFQ0hJTEQ7IGJyZWFrOworCWNhc2UgRVJST1JfV1JJVEVfRkFVTFQ6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX1dSSVRFX1BST1RFQ1Q6IGVycm9yID0gRVJPRlM7IGJyZWFrOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2ZpbGVfaW5fdXNlX2Vycm9yKERXT1JEIGVycmNvZGUpCit7CisJc3dpdGNoIChlcnJjb2RlKSB7CisJY2FzZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTjoKKwljYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfeWVzX25vX2Fuc3dlcih2b2lkKQoreworCWNoYXIgYW5zd2VyWzEwMjRdOworCisJaWYgKGZnZXRzKGFuc3dlciwgc2l6ZW9mKGFuc3dlciksIHN0ZGluKSkgeworCQlzaXplX3QgYW5zd2VyX2xlbiA9IHN0cmxlbihhbnN3ZXIpOworCQlpbnQgZ290X2Z1bGxfbGluZSA9IDAsIGM7CisKKwkJLyogcmVtb3ZlIHRoZSBuZXdsaW5lICovCisJCWlmIChhbnN3ZXJfbGVuID49IDIgJiYgYW5zd2VyW2Fuc3dlcl9sZW4tMl0gPT0gJ1xyJykgeworCQkJYW5zd2VyW2Fuc3dlcl9sZW4tMl0gPSAnXDAnOworCQkJZ290X2Z1bGxfbGluZSA9IDE7CisJCX0gZWxzZSBpZiAoYW5zd2VyX2xlbiA+PSAxICYmIGFuc3dlclthbnN3ZXJfbGVuLTFdID09ICdcbicpIHsKKwkJCWFuc3dlclthbnN3ZXJfbGVuLTFdID0gJ1wwJzsKKwkJCWdvdF9mdWxsX2xpbmUgPSAxOworCQl9CisJCS8qIGZsdXNoIHRoZSBidWZmZXIgaW4gY2FzZSB3ZSBkaWQgbm90IGdldCB0aGUgZnVsbCBsaW5lICovCisJCWlmICghZ290X2Z1bGxfbGluZSkKKwkJCXdoaWxlICgoYyA9IGdldGNoYXIoKSkgIT0gRU9GICYmIGMgIT0gJ1xuJykKKwkJCQk7CisJfSBlbHNlCisJCS8qIHdlIGNvdWxkIG5vdCByZWFkLCByZXR1cm4gdGhlCisJCSAqIGRlZmF1bHQgYW5zd2VyIHdoaWNoIGlzIG5vICovCisJCXJldHVybiAwOworCisJaWYgKHRvbG93ZXIoYW5zd2VyWzBdKSA9PSAneScgJiYgIWFuc3dlclsxXSkKKwkJcmV0dXJuIDE7CisJaWYgKCFzdHJuY2FzZWNtcChhbnN3ZXIsICJ5ZXMiLCBzaXplb2YoYW5zd2VyKSkpCisJCXJldHVybiAxOworCWlmICh0b2xvd2VyKGFuc3dlclswXSkgPT0gJ24nICYmICFhbnN3ZXJbMV0pCisJCXJldHVybiAwOworCWlmICghc3RybmNhc2VjbXAoYW5zd2VyLCAibm8iLCBzaXplb2YoYW5zd2VyKSkpCisJCXJldHVybiAwOworCisJLyogZGlkIG5vdCBmaW5kIGFuIGFuc3dlciB3ZSB1bmRlcnN0YW5kICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGFza195ZXNfbm9faWZfcG9zc2libGUoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJY2hhciBxdWVzdGlvbls0MDk2XTsKKwljb25zdCBjaGFyICpyZXRyeV9ob29rW10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKwl2YV9saXN0IGFyZ3M7CisKKwl2YV9zdGFydChhcmdzLCBmb3JtYXQpOworCXZzbnByaW50ZihxdWVzdGlvbiwgc2l6ZW9mKHF1ZXN0aW9uKSwgZm9ybWF0LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisKKwlpZiAoKHJldHJ5X2hvb2tbMF0gPSBtaW5nd19nZXRlbnYoIkdJVF9BU0tfWUVTTk8iKSkpIHsKKwkJcmV0cnlfaG9va1sxXSA9IHF1ZXN0aW9uOworCQlyZXR1cm4gIXJ1bl9jb21tYW5kX3Zfb3B0KHJldHJ5X2hvb2ssIDApOworCX0KKworCWlmICghaXNhdHR5KF9maWxlbm8oc3RkaW4pKSB8fCAhaXNhdHR5KF9maWxlbm8oc3RkZXJyKSkpCisJCXJldHVybiAwOworCisJd2hpbGUgKDEpIHsKKwkJaW50IGFuc3dlcjsKKwkJZnByaW50ZihzdGRlcnIsICIlcyAoeS9uKSAiLCBxdWVzdGlvbik7CisKKwkJaWYgKChhbnN3ZXIgPSByZWFkX3llc19ub19hbnN3ZXIoKSkgPj0gMCkKKwkJCXJldHVybiBhbnN3ZXI7CisKKwkJZnByaW50ZihzdGRlcnIsICJTb3JyeSwgSSBkaWQgbm90IHVuZGVyc3RhbmQgeW91ciBhbnN3ZXIuICIKKwkJCQkiUGxlYXNlIHR5cGUgJ3knIG9yICduJ1xuIik7CisJfQorfQorCisjdW5kZWYgdW5saW5rCitpbnQgbWluZ3dfdW5saW5rKGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCWludCByZXQsIHRyaWVzID0gMDsKKworCS8qIHJlYWQtb25seSBmaWxlcyBjYW5ub3QgYmUgcmVtb3ZlZCAqLworCWNobW9kKHBhdGhuYW1lLCAwNjY2KTsKKwl3aGlsZSAoKHJldCA9IHVubGluayhwYXRobmFtZSkpID09IC0xICYmIHRyaWVzIDwgQVJSQVlfU0laRShkZWxheSkpIHsKKwkJaWYgKCFpc19maWxlX2luX3VzZV9lcnJvcihHZXRMYXN0RXJyb3IoKSkpCisJCQlicmVhazsKKwkJLyoKKwkJICogV2UgYXNzdW1lIHRoYXQgc29tZSBvdGhlciBwcm9jZXNzIGhhZCB0aGUgc291cmNlIG9yCisJCSAqIGRlc3RpbmF0aW9uIGZpbGUgb3BlbiBhdCB0aGUgd3JvbmcgbW9tZW50IGFuZCByZXRyeS4KKwkJICogSW4gb3JkZXIgdG8gZ2l2ZSB0aGUgb3RoZXIgcHJvY2VzcyBhIGhpZ2hlciBjaGFuY2UgdG8KKwkJICogY29tcGxldGUgaXRzIG9wZXJhdGlvbiwgd2UgZ2l2ZSB1cCBvdXIgdGltZSBzbGljZSBub3cuCisJCSAqIElmIHdlIGhhdmUgdG8gcmV0cnkgYWdhaW4sIHdlIGRvIHNsZWVwIGEgYml0LgorCQkgKi8KKwkJU2xlZXAoZGVsYXlbdHJpZXNdKTsKKwkJdHJpZXMrKzsKKwl9CisJd2hpbGUgKHJldCA9PSAtMSAmJiBpc19maWxlX2luX3VzZV9lcnJvcihHZXRMYXN0RXJyb3IoKSkgJiYKKwkgICAgICAgYXNrX3llc19ub19pZl9wb3NzaWJsZSgiVW5saW5rIG9mIGZpbGUgJyVzJyBmYWlsZWQuICIKKwkJCSJTaG91bGQgSSB0cnkgYWdhaW4/IiwgcGF0aG5hbWUpKQorCSAgICAgICByZXQgPSB1bmxpbmsocGF0aG5hbWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfZGlyX2VtcHR5KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlXSU4zMl9GSU5EX0RBVEFBIGZpbmRidWY7CisJSEFORExFIGhhbmRsZTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlc1xcKiIsIHBhdGgpOworCWhhbmRsZSA9IEZpbmRGaXJzdEZpbGVBKGJ1Zi5idWYsICZmaW5kYnVmKTsKKwlpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZXR1cm4gR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfTk9fTU9SRV9GSUxFUzsKKwl9CisKKwl3aGlsZSAoIXN0cmNtcChmaW5kYnVmLmNGaWxlTmFtZSwgIi4iKSB8fAorCQkJIXN0cmNtcChmaW5kYnVmLmNGaWxlTmFtZSwgIi4uIikpCisJCWlmICghRmluZE5leHRGaWxlKGhhbmRsZSwgJmZpbmRidWYpKSB7CisJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJCXJldHVybiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9OT19NT1JFX0ZJTEVTOworCQl9CisJRmluZENsb3NlKGhhbmRsZSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKKyN1bmRlZiBybWRpcgoraW50IG1pbmd3X3JtZGlyKGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCWludCByZXQsIHRyaWVzID0gMDsKKworCXdoaWxlICgocmV0ID0gcm1kaXIocGF0aG5hbWUpKSA9PSAtMSAmJiB0cmllcyA8IEFSUkFZX1NJWkUoZGVsYXkpKSB7CisJCWlmICghaXNfZmlsZV9pbl91c2VfZXJyb3IoR2V0TGFzdEVycm9yKCkpKQorCQkJYnJlYWs7CisJCWlmICghaXNfZGlyX2VtcHR5KHBhdGhuYW1lKSkgeworCQkJZXJybm8gPSBFTk9URU1QVFk7CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBXZSBhc3N1bWUgdGhhdCBzb21lIG90aGVyIHByb2Nlc3MgaGFkIHRoZSBzb3VyY2Ugb3IKKwkJICogZGVzdGluYXRpb24gZmlsZSBvcGVuIGF0IHRoZSB3cm9uZyBtb21lbnQgYW5kIHJldHJ5LgorCQkgKiBJbiBvcmRlciB0byBnaXZlIHRoZSBvdGhlciBwcm9jZXNzIGEgaGlnaGVyIGNoYW5jZSB0bworCQkgKiBjb21wbGV0ZSBpdHMgb3BlcmF0aW9uLCB3ZSBnaXZlIHVwIG91ciB0aW1lIHNsaWNlIG5vdy4KKwkJICogSWYgd2UgaGF2ZSB0byByZXRyeSBhZ2Fpbiwgd2UgZG8gc2xlZXAgYSBiaXQuCisJCSAqLworCQlTbGVlcChkZWxheVt0cmllc10pOworCQl0cmllcysrOworCX0KKwl3aGlsZSAocmV0ID09IC0xICYmIGlzX2ZpbGVfaW5fdXNlX2Vycm9yKEdldExhc3RFcnJvcigpKSAmJgorCSAgICAgICBhc2tfeWVzX25vX2lmX3Bvc3NpYmxlKCJEZWxldGlvbiBvZiBkaXJlY3RvcnkgJyVzJyBmYWlsZWQuICIKKwkJCSJTaG91bGQgSSB0cnkgYWdhaW4/IiwgcGF0aG5hbWUpKQorCSAgICAgICByZXQgPSBybWRpcihwYXRobmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworI3VuZGVmIG9wZW4KK2ludCBtaW5nd19vcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG9mbGFncywgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwl1bnNpZ25lZCBtb2RlOworCWludCBmZDsKKworCXZhX3N0YXJ0KGFyZ3MsIG9mbGFncyk7CisJbW9kZSA9IHZhX2FyZyhhcmdzLCBpbnQpOworCXZhX2VuZChhcmdzKTsKKworCWlmIChmaWxlbmFtZSAmJiAhc3RyY21wKGZpbGVuYW1lLCAiL2Rldi9udWxsIikpCisJCWZpbGVuYW1lID0gIm51bCI7CisKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIG9mbGFncywgbW9kZSk7CisKKwlpZiAoZmQgPCAwICYmIChvZmxhZ3MgJiBPX0NSRUFUKSAmJiBlcnJubyA9PSBFQUNDRVMpIHsKKwkJRFdPUkQgYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlcyhmaWxlbmFtZSk7CisJCWlmIChhdHRycyAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyAmJiAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKQorCQkJZXJybm8gPSBFSVNESVI7CisJfQorCXJldHVybiBmZDsKK30KKworI3VuZGVmIHdyaXRlCitzc2l6ZV90IG1pbmd3X3dyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJLyoKKwkgKiBXaGlsZSB3cml0ZSgpIGNhbGxzIHRvIGEgZmlsZSBvbiBhIGxvY2FsIGRpc2sgYXJlIHRyYW5zbGF0ZWQKKwkgKiBpbnRvIFdyaXRlRmlsZSgpIGNhbGxzIHdpdGggYSBtYXhpbXVtIHNpemUgb2YgNjRLQiBvbiBXaW5kb3dzCisJICogWFAgYW5kIDI1NktCIG9uIFZpc3RhLCBubyBzdWNoIGNhcCBpcyBwbGFjZWQgb24gd3JpdGVzIHRvCisJICogZmlsZXMgb3ZlciB0aGUgbmV0d29yayBvbiBXaW5kb3dzIFhQLiAgVW5mb3J0dW5hdGVseSwgdGhlcmUKKwkgKiBzZWVtcyB0byBiZSBhIGxpbWl0IG9mIDMyTUItMjhLQiBvbiBYNjQgYW5kIDY0TUItMzJLQiBvbiB4ODY7CisJICogYmlnZ2VyIHdyaXRlcyBmYWlsIG9uIFdpbmRvd3MgWFAuCisJICogU28gd2UgY2FwIHRvIGEgbmljZSAzMU1CIGhlcmUgdG8gYXZvaWQgd3JpdGUgZmFpbHVyZXMgb3ZlcgorCSAqIHRoZSBuZXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgbnVtYmVyIG9mIFdyaXRlRmlsZSgpIGNhbGxzIGluCisJICogdGhlIGxvY2FsIGNhc2UuCisJICovCisJcmV0dXJuIHdyaXRlKGZkLCBidWYsIG1pbihjb3VudCwgMzEgKiAxMDI0ICogMTAyNCkpOworfQorCisjdW5kZWYgZm9wZW4KK0ZJTEUgKm1pbmd3X2ZvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUpCit7CisJaWYgKGZpbGVuYW1lICYmICFzdHJjbXAoZmlsZW5hbWUsICIvZGV2L251bGwiKSkKKwkJZmlsZW5hbWUgPSAibnVsIjsKKwlyZXR1cm4gZm9wZW4oZmlsZW5hbWUsIG90eXBlKTsKK30KKworI3VuZGVmIGZyZW9wZW4KK0ZJTEUgKm1pbmd3X2ZyZW9wZW4gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpvdHlwZSwgRklMRSAqc3RyZWFtKQoreworCWlmIChmaWxlbmFtZSAmJiAhc3RyY21wKGZpbGVuYW1lLCAiL2Rldi9udWxsIikpCisJCWZpbGVuYW1lID0gIm51bCI7CisJcmV0dXJuIGZyZW9wZW4oZmlsZW5hbWUsIG90eXBlLCBzdHJlYW0pOworfQorCisvKgorICogVGhlIHVuaXQgb2YgRklMRVRJTUUgaXMgMTAwLW5hbm9zZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTYwMSwgVVRDLgorICogUmV0dXJucyB0aGUgMTAwLW5hbm9zZWNvbmRzICgiaGVrdG8gbmFub3NlY29uZHMiKSBzaW5jZSB0aGUgZXBvY2guCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBsb25nIGZpbGV0aW1lX3RvX2huc2VjKGNvbnN0IEZJTEVUSU1FICpmdCkKK3sKKwlsb25nIGxvbmcgd2luVGltZSA9ICgobG9uZyBsb25nKWZ0LT5kd0hpZ2hEYXRlVGltZSA8PCAzMikgKyBmdC0+ZHdMb3dEYXRlVGltZTsKKwkvKiBXaW5kb3dzIHRvIFVuaXggRXBvY2ggY29udmVyc2lvbiAqLworCXJldHVybiB3aW5UaW1lIC0gMTE2NDQ0NzM2MDAwMDAwMDAwTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdGltZV90IGZpbGV0aW1lX3RvX3RpbWVfdChjb25zdCBGSUxFVElNRSAqZnQpCit7CisJcmV0dXJuICh0aW1lX3QpKGZpbGV0aW1lX3RvX2huc2VjKGZ0KSAvIDEwMDAwMDAwKTsKK30KKworLyogV2Uga2VlcCB0aGUgZG9fbHN0YXQgY29kZSBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGF2b2lkIHJlY3Vyc2lvbi4KKyAqIFdoZW4gYSBwYXRoIGVuZHMgd2l0aCBhIHNsYXNoLCB0aGUgc3RhdCB3aWxsIGZhaWwgd2l0aCBFTk9FTlQuIEluCisgKiB0aGlzIGNhc2UsIHdlIHN0cmlwIHRoZSB0cmFpbGluZyBzbGFzaGVzIGFuZCBzdGF0IGFnYWluLgorICoKKyAqIElmIGZvbGxvdyBpcyB0cnVlIHRoZW4gYWN0IGxpa2Ugc3RhdCgpIGFuZCByZXBvcnQgb24gdGhlIGxpbmsKKyAqIHRhcmdldC4gT3RoZXJ3aXNlIHJlcG9ydCBvbiB0aGUgbGluayBpdHNlbGYuCisgKi8KK3N0YXRpYyBpbnQgZG9fbHN0YXQoaW50IGZvbGxvdywgY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCWludCBlcnI7CisJV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBmZGF0YTsKKworCWlmICghKGVyciA9IGdldF9maWxlX2F0dHIoZmlsZV9uYW1lLCAmZmRhdGEpKSkgeworCQlidWYtPnN0X2lubyA9IDA7CisJCWJ1Zi0+c3RfZ2lkID0gMDsKKwkJYnVmLT5zdF91aWQgPSAwOworCQlidWYtPnN0X25saW5rID0gMTsKKwkJYnVmLT5zdF9tb2RlID0gZmlsZV9hdHRyX3RvX3N0X21vZGUoZmRhdGEuZHdGaWxlQXR0cmlidXRlcyk7CisJCWJ1Zi0+c3Rfc2l6ZSA9IGZkYXRhLm5GaWxlU2l6ZUxvdyB8CisJCQkoKChvZmZfdClmZGF0YS5uRmlsZVNpemVIaWdoKTw8MzIpOworCQlidWYtPnN0X2RldiA9IGJ1Zi0+c3RfcmRldiA9IDA7IC8qIG5vdCB1c2VkIGJ5IEdpdCAqLworCQlidWYtPnN0X2F0aW1lID0gZmlsZXRpbWVfdG9fdGltZV90KCYoZmRhdGEuZnRMYXN0QWNjZXNzVGltZSkpOworCQlidWYtPnN0X210aW1lID0gZmlsZXRpbWVfdG9fdGltZV90KCYoZmRhdGEuZnRMYXN0V3JpdGVUaW1lKSk7CisJCWJ1Zi0+c3RfY3RpbWUgPSBmaWxldGltZV90b190aW1lX3QoJihmZGF0YS5mdENyZWF0aW9uVGltZSkpOworCQlpZiAoZmRhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1JFUEFSU0VfUE9JTlQpIHsKKwkJCVdJTjMyX0ZJTkRfREFUQUEgZmluZGJ1ZjsKKwkJCUhBTkRMRSBoYW5kbGUgPSBGaW5kRmlyc3RGaWxlQShmaWxlX25hbWUsICZmaW5kYnVmKTsKKwkJCWlmIChoYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJCQlpZiAoKGZpbmRidWYuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1JFUEFSU0VfUE9JTlQpICYmCisJCQkJCQkoZmluZGJ1Zi5kd1Jlc2VydmVkMCA9PSBJT19SRVBBUlNFX1RBR19TWU1MSU5LKSkgeworCQkJCQlpZiAoZm9sbG93KSB7CisJCQkJCQljaGFyIGJ1ZmZlcltNQVhJTVVNX1JFUEFSU0VfREFUQV9CVUZGRVJfU0laRV07CisJCQkJCQlidWYtPnN0X3NpemUgPSByZWFkbGluayhmaWxlX25hbWUsIGJ1ZmZlciwgTUFYSU1VTV9SRVBBUlNFX0RBVEFfQlVGRkVSX1NJWkUpOworCQkJCQl9IGVsc2UgeworCQkJCQkJYnVmLT5zdF9tb2RlID0gU19JRkxOSzsKKwkJCQkJfQorCQkJCQlidWYtPnN0X21vZGUgfD0gU19JUkVBRDsKKwkJCQkJaWYgKCEoZmluZGJ1Zi5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKQorCQkJCQkJYnVmLT5zdF9tb2RlIHw9IFNfSVdSSVRFOworCQkJCX0KKwkJCQlGaW5kQ2xvc2UoaGFuZGxlKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJZXJybm8gPSBlcnI7CisJcmV0dXJuIC0xOworfQorCisvKiBXZSBwcm92aWRlIG91ciBvd24gbHN0YXQvZnN0YXQgZnVuY3Rpb25zLCBzaW5jZSB0aGUgcHJvdmlkZWQKKyAqIGxzdGF0L2ZzdGF0IGZ1bmN0aW9ucyBhcmUgc28gc2xvdy4gVGhlc2Ugc3RhdCBmdW5jdGlvbnMgYXJlCisgKiB0YWlsb3JlZCBmb3IgR2l0J3MgdXNhZ2UgKHJlYWQ6IGZhc3QpLCBhbmQgYXJlIG5vdCBtZWFudCB0byBiZQorICogY29tcGxldGUuIE5vdGUgdGhhdCBHaXQgc3RhdCgpcyBhcmUgcmVkaXJlY3RlZCB0byBtaW5nd19sc3RhdCgpCisgKiB0b28sIHNpbmNlIFdpbmRvd3MgZG9lc24ndCByZWFsbHkgaGFuZGxlIHN5bWxpbmtzIHRoYXQgd2VsbC4KKyAqLworc3RhdGljIGludCBkb19zdGF0X2ludGVybmFsKGludCBmb2xsb3csIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlpbnQgbmFtZWxlbjsKKwlzdGF0aWMgY2hhciBhbHRfbmFtZVtQQVRIX01BWF07CisKKwlpZiAoIWRvX2xzdGF0KGZvbGxvdywgZmlsZV9uYW1lLCBidWYpKQorCQlyZXR1cm4gMDsKKworCS8qIGlmIGZpbGVfbmFtZSBlbmRlZCBpbiBhICcvJywgV2luZG93cyByZXR1cm5lZCBFTk9FTlQ7CisJICogdHJ5IGFnYWluIHdpdGhvdXQgdHJhaWxpbmcgc2xhc2hlcworCSAqLworCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCXJldHVybiAtMTsKKworCW5hbWVsZW4gPSBzdHJsZW4oZmlsZV9uYW1lKTsKKwlpZiAobmFtZWxlbiAmJiBmaWxlX25hbWVbbmFtZWxlbi0xXSAhPSAnLycpCisJCXJldHVybiAtMTsKKwl3aGlsZSAobmFtZWxlbiAmJiBmaWxlX25hbWVbbmFtZWxlbi0xXSA9PSAnLycpCisJCS0tbmFtZWxlbjsKKwlpZiAoIW5hbWVsZW4gfHwgbmFtZWxlbiA+PSBQQVRIX01BWCkKKwkJcmV0dXJuIC0xOworCisJbWVtY3B5KGFsdF9uYW1lLCBmaWxlX25hbWUsIG5hbWVsZW4pOworCWFsdF9uYW1lW25hbWVsZW5dID0gMDsKKwlyZXR1cm4gZG9fbHN0YXQoZm9sbG93LCBhbHRfbmFtZSwgYnVmKTsKK30KKworaW50IG1pbmd3X2xzdGF0KGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlyZXR1cm4gZG9fc3RhdF9pbnRlcm5hbCgwLCBmaWxlX25hbWUsIGJ1Zik7Cit9CitpbnQgbWluZ3dfc3RhdChjb25zdCBjaGFyICpmaWxlX25hbWUsIHN0cnVjdCBzdGF0ICpidWYpCit7CisJcmV0dXJuIGRvX3N0YXRfaW50ZXJuYWwoMSwgZmlsZV9uYW1lLCBidWYpOworfQorCisjdW5kZWYgZnN0YXQKK2ludCBtaW5nd19mc3RhdChpbnQgZmQsIHN0cnVjdCBzdGF0ICpidWYpCit7CisJSEFORExFIGZoID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisJQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gZmRhdGE7CisKKwlpZiAoZmggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBkaXJlY3Qgbm9uLWZpbGUgaGFuZGxlcyB0byBNUydzIGZzdGF0KCkgKi8KKwlpZiAoR2V0RmlsZVR5cGUoZmgpICE9IEZJTEVfVFlQRV9ESVNLKQorCQlyZXR1cm4gX2ZzdGF0aTY0KGZkLCBidWYpOworCisJaWYgKEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKGZoLCAmZmRhdGEpKSB7CisJCWJ1Zi0+c3RfaW5vID0gMDsKKwkJYnVmLT5zdF9naWQgPSAwOworCQlidWYtPnN0X3VpZCA9IDA7CisJCWJ1Zi0+c3RfbmxpbmsgPSAxOworCQlidWYtPnN0X21vZGUgPSBmaWxlX2F0dHJfdG9fc3RfbW9kZShmZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzKTsKKwkJYnVmLT5zdF9zaXplID0gZmRhdGEubkZpbGVTaXplTG93IHwKKwkJCSgoKG9mZl90KWZkYXRhLm5GaWxlU2l6ZUhpZ2gpPDwzMik7CisJCWJ1Zi0+c3RfZGV2ID0gYnVmLT5zdF9yZGV2ID0gMDsgLyogbm90IHVzZWQgYnkgR2l0ICovCisJCWJ1Zi0+c3RfYXRpbWUgPSBmaWxldGltZV90b190aW1lX3QoJihmZGF0YS5mdExhc3RBY2Nlc3NUaW1lKSk7CisJCWJ1Zi0+c3RfbXRpbWUgPSBmaWxldGltZV90b190aW1lX3QoJihmZGF0YS5mdExhc3RXcml0ZVRpbWUpKTsKKwkJYnVmLT5zdF9jdGltZSA9IGZpbGV0aW1lX3RvX3RpbWVfdCgmKGZkYXRhLmZ0Q3JlYXRpb25UaW1lKSk7CisJCXJldHVybiAwOworCX0KKwllcnJubyA9IEVCQURGOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVfdF90b19maWxldGltZSh0aW1lX3QgdCwgRklMRVRJTUUgKmZ0KQoreworCWxvbmcgbG9uZyB3aW5UaW1lID0gdCAqIDEwMDAwMDAwTEwgKyAxMTY0NDQ3MzYwMDAwMDAwMDBMTDsKKwlmdC0+ZHdMb3dEYXRlVGltZSA9IHdpblRpbWU7CisJZnQtPmR3SGlnaERhdGVUaW1lID0gd2luVGltZSA+PiAzMjsKK30KKworaW50IG1pbmd3X3V0aW1lIChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IHN0cnVjdCB1dGltYnVmICp0aW1lcykKK3sKKwlGSUxFVElNRSBtZnQsIGFmdDsKKwlpbnQgZmgsIHJjOworCisJLyogbXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24gKi8KKwlEV09SRCBhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzKGZpbGVfbmFtZSk7CisJaWYgKGF0dHJzICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTICYmCisJICAgIChhdHRycyAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSkgeworCQkvKiBpZ25vcmUgZXJyb3JzIGhlcmU7IG9wZW4oKSB3aWxsIHJlcG9ydCB0aGVtICovCisJCVNldEZpbGVBdHRyaWJ1dGVzKGZpbGVfbmFtZSwgYXR0cnMgJiB+RklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpOworCX0KKworCWlmICgoZmggPSBvcGVuKGZpbGVfbmFtZSwgT19SRFdSIHwgT19CSU5BUlkpKSA8IDApIHsKKwkJcmMgPSAtMTsKKwkJZ290byByZXZlcnRfYXR0cnM7CisJfQorCisJaWYgKHRpbWVzKSB7CisJCXRpbWVfdF90b19maWxldGltZSh0aW1lcy0+bW9kdGltZSwgJm1mdCk7CisJCXRpbWVfdF90b19maWxldGltZSh0aW1lcy0+YWN0aW1lLCAmYWZ0KTsKKwl9IGVsc2UgeworCQlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmbWZ0KTsKKwkJYWZ0ID0gbWZ0OworCX0KKwlpZiAoIVNldEZpbGVUaW1lKChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmgpLCBOVUxMLCAmYWZ0LCAmbWZ0KSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmMgPSAtMTsKKwl9IGVsc2UKKwkJcmMgPSAwOworCWNsb3NlKGZoKTsKKworcmV2ZXJ0X2F0dHJzOgorCWlmIChhdHRycyAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyAmJgorCSAgICAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkpIHsKKwkJLyogaWdub3JlIGVycm9ycyBhZ2FpbiAqLworCQlTZXRGaWxlQXR0cmlidXRlcyhmaWxlX25hbWUsIGF0dHJzKTsKKwl9CisJcmV0dXJuIHJjOworfQorCit1bnNpZ25lZCBpbnQgc2xlZXAgKHVuc2lnbmVkIGludCBzZWNvbmRzKQoreworCVNsZWVwKHNlY29uZHMqMTAwMCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBta3N0ZW1wKGNoYXIgKnRlbXBsYXRlKQoreworCWNoYXIgKmZpbGVuYW1lID0gbWt0ZW1wKHRlbXBsYXRlKTsKKwlpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBvcGVuKGZpbGVuYW1lLCBPX1JEV1IgfCBPX0NSRUFULCAwNjAwKTsKK30KKworaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHZvaWQgKnR6KQoreworCUZJTEVUSU1FIGZ0OworCWxvbmcgbG9uZyBobnNlYzsKKworCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7CisJaG5zZWMgPSBmaWxldGltZV90b19obnNlYygmZnQpOworCXR2LT50dl9zZWMgPSBobnNlYyAvIDEwMDAwMDAwOworCXR2LT50dl91c2VjID0gKGhuc2VjICUgMTAwMDAwMDApIC8gMTA7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwaXBlKGludCBmaWxlZGVzWzJdKQoreworCUhBTkRMRSBoWzJdOworCisJLyogdGhpcyBjcmVhdGVzIG5vbi1pbmhlcml0YWJsZSBoYW5kbGVzICovCisJaWYgKCFDcmVhdGVQaXBlKCZoWzBdLCAmaFsxXSwgTlVMTCwgODE5MikpIHsKKwkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmaWxlZGVzWzBdID0gX29wZW5fb3NmaGFuZGxlKChpbnQpaFswXSwgT19OT0lOSEVSSVQpOworCWlmIChmaWxlZGVzWzBdIDwgMCkgeworCQlDbG9zZUhhbmRsZShoWzBdKTsKKwkJQ2xvc2VIYW5kbGUoaFsxXSk7CisJCXJldHVybiAtMTsKKwl9CisJZmlsZWRlc1sxXSA9IF9vcGVuX29zZmhhbmRsZSgoaW50KWhbMV0sIE9fTk9JTkhFUklUKTsKKwlpZiAoZmlsZWRlc1swXSA8IDApIHsKKwkJY2xvc2UoZmlsZWRlc1swXSk7CisJCUNsb3NlSGFuZGxlKGhbMV0pOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqdGltZXAsIHN0cnVjdCB0bSAqcmVzdWx0KQoreworCS8qIGdtdGltZSgpIGluIE1TVkNSVC5ETEwgaXMgdGhyZWFkLXNhZmUsIGJ1dCBub3QgcmVlbnRyYW50ICovCisJbWVtY3B5KHJlc3VsdCwgZ210aW1lKHRpbWVwKSwgc2l6ZW9mKHN0cnVjdCB0bSkpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgc3RydWN0IHRtICpyZXN1bHQpCit7CisJLyogbG9jYWx0aW1lKCkgaW4gTVNWQ1JULkRMTCBpcyB0aHJlYWQtc2FmZSwgYnV0IG5vdCByZWVudHJhbnQgKi8KKwltZW1jcHkocmVzdWx0LCBsb2NhbHRpbWUodGltZXApLCBzaXplb2Yoc3RydWN0IHRtKSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworI3VuZGVmIGdldGN3ZAorY2hhciAqbWluZ3dfZ2V0Y3dkKGNoYXIgKnBvaW50ZXIsIGludCBsZW4pCit7CisJaW50IGk7CisJY2hhciAqcmV0ID0gZ2V0Y3dkKHBvaW50ZXIsIGxlbik7CisJaWYgKCFyZXQpCisJCXJldHVybiByZXQ7CisJZm9yIChpID0gMDsgcG9pbnRlcltpXTsgaSsrKQorCQlpZiAocG9pbnRlcltpXSA9PSAnXFwnKQorCQkJcG9pbnRlcltpXSA9ICcvJzsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2VlIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMTd3NXlrZnQodnMuNzEpLmFzcHgKKyAqIChQYXJzaW5nIEMrKyBDb21tYW5kLUxpbmUgQXJndW1lbnRzKQorICovCitzdGF0aWMgY29uc3QgY2hhciAqcXVvdGVfYXJnKGNvbnN0IGNoYXIgKmFyZykKK3sKKwkvKiBjb3VudCBjaGFycyB0byBxdW90ZSAqLworCWludCBsZW4gPSAwLCBuID0gMDsKKwlpbnQgZm9yY2VfcXVvdGVzID0gMDsKKwljaGFyICpxLCAqZDsKKwljb25zdCBjaGFyICpwID0gYXJnOworCWlmICghKnApIGZvcmNlX3F1b3RlcyA9IDE7CisJd2hpbGUgKCpwKSB7CisJCWlmIChpc3NwYWNlKCpwKSB8fCAqcCA9PSAnKicgfHwgKnAgPT0gJz8nIHx8ICpwID09ICd7JyB8fCAqcCA9PSAnXCcnKQorCQkJZm9yY2VfcXVvdGVzID0gMTsKKwkJZWxzZSBpZiAoKnAgPT0gJyInKQorCQkJbisrOworCQllbHNlIGlmICgqcCA9PSAnXFwnKSB7CisJCQlpbnQgY291bnQgPSAwOworCQkJd2hpbGUgKCpwID09ICdcXCcpIHsKKwkJCQljb3VudCsrOworCQkJCXArKzsKKwkJCQlsZW4rKzsKKwkJCX0KKwkJCWlmICgqcCA9PSAnIicpCisJCQkJbiArPSBjb3VudCoyICsgMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWxlbisrOworCQlwKys7CisJfQorCWlmICghZm9yY2VfcXVvdGVzICYmIG4gPT0gMCkKKwkJcmV0dXJuIGFyZzsKKworCS8qIGluc2VydCBcIHdoZXJlIG5lY2Vzc2FyeSAqLworCWQgPSBxID0geG1hbGxvYyhsZW4rbiszKTsKKwkqZCsrID0gJyInOworCXdoaWxlICgqYXJnKSB7CisJCWlmICgqYXJnID09ICciJykKKwkJCSpkKysgPSAnXFwnOworCQllbHNlIGlmICgqYXJnID09ICdcXCcpIHsKKwkJCWludCBjb3VudCA9IDA7CisJCQl3aGlsZSAoKmFyZyA9PSAnXFwnKSB7CisJCQkJY291bnQrKzsKKwkJCQkqZCsrID0gKmFyZysrOworCQkJfQorCQkJaWYgKCphcmcgPT0gJyInKSB7CisJCQkJd2hpbGUgKGNvdW50LS0gPiAwKQorCQkJCQkqZCsrID0gJ1xcJzsKKwkJCQkqZCsrID0gJ1xcJzsKKwkJCX0KKwkJfQorCQkqZCsrID0gKmFyZysrOworCX0KKwkqZCsrID0gJyInOworCSpkKysgPSAwOworCXJldHVybiBxOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfaW50ZXJwcmV0ZXIoY29uc3QgY2hhciAqY21kKQoreworCXN0YXRpYyBjaGFyIGJ1ZlsxMDBdOworCWNoYXIgKnAsICpvcHQ7CisJaW50IG4sIGZkOworCisJLyogZG9uJ3QgZXZlbiB0cnkgYSAuZXhlICovCisJbiA9IHN0cmxlbihjbWQpOworCWlmIChuID49IDQgJiYgIXN0cmNhc2VjbXAoY21kK24tNCwgIi5leGUiKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmZCA9IG9wZW4oY21kLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSk7CisJY2xvc2UoZmQpOworCWlmIChuIDwgNCkJLyogYXQgbGVhc3QgJyMhL3gnIGFuZCBub3QgZXJyb3IgKi8KKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoYnVmWzBdICE9ICcjJyB8fCBidWZbMV0gIT0gJyEnKQorCQlyZXR1cm4gTlVMTDsKKwlidWZbbl0gPSAnXDAnOworCXAgPSBidWYgKyBzdHJjc3BuKGJ1ZiwgIlxyXG4iKTsKKwlpZiAoISpwKQorCQlyZXR1cm4gTlVMTDsKKworCSpwID0gJ1wwJzsKKwlpZiAoIShwID0gc3RycmNocihidWYrMiwgJy8nKSkgJiYgIShwID0gc3RycmNocihidWYrMiwgJ1xcJykpKQorCQlyZXR1cm4gTlVMTDsKKwkvKiBzdHJpcCBvcHRpb25zICovCisJaWYgKChvcHQgPSBzdHJjaHIocCsxLCAnICcpKSkKKwkJKm9wdCA9ICdcMCc7CisJcmV0dXJuIHArMTsKK30KKworLyoKKyAqIFNwbGl0cyB0aGUgUEFUSCBpbnRvIHBhcnRzLgorICovCitzdGF0aWMgY2hhciAqKmdldF9wYXRoX3NwbGl0KHZvaWQpCit7CisJY2hhciAqcCwgKipwYXRoLCAqZW52cGF0aCA9IG1pbmd3X2dldGVudigiUEFUSCIpOworCWludCBpLCBuID0gMDsKKworCWlmICghZW52cGF0aCB8fCAhKmVudnBhdGgpCisJCXJldHVybiBOVUxMOworCisJZW52cGF0aCA9IHhzdHJkdXAoZW52cGF0aCk7CisJcCA9IGVudnBhdGg7CisJd2hpbGUgKHApIHsKKwkJY2hhciAqZGlyID0gcDsKKwkJcCA9IHN0cmNocihwLCAnOycpOworCQlpZiAocCkgKnArKyA9ICdcMCc7CisJCWlmICgqZGlyKSB7CS8qIG5vdCBlYXJsaWVyLCBjYXRjaGVzIHNlcmllcyBvZiA7ICovCisJCQkrK247CisJCX0KKwl9CisJaWYgKCFuKQorCQlyZXR1cm4gTlVMTDsKKworCXBhdGggPSB4bWFsbG9jKChuKzEpKnNpemVvZihjaGFyICopKTsKKwlwID0gZW52cGF0aDsKKwlpID0gMDsKKwlkbyB7CisJCWlmICgqcCkKKwkJCXBhdGhbaSsrXSA9IHhzdHJkdXAocCk7CisJCXAgPSBwK3N0cmxlbihwKSsxOworCX0gd2hpbGUgKGkgPCBuKTsKKwlwYXRoW2ldID0gTlVMTDsKKworCWZyZWUoZW52cGF0aCk7CisKKwlyZXR1cm4gcGF0aDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9wYXRoX3NwbGl0KGNoYXIgKipwYXRoKQoreworCWNoYXIgKipwID0gcGF0aDsKKworCWlmICghcGF0aCkKKwkJcmV0dXJuOworCisJd2hpbGUgKCpwKQorCQlmcmVlKCpwKyspOworCWZyZWUocGF0aCk7Cit9CisKKy8qCisgKiBleGVfb25seSBtZWFucyB0aGF0IHdlIG9ubHkgd2FudCB0byBkZXRlY3QgLmV4ZSBmaWxlcywgYnV0IG5vdCBzY3JpcHRzCisgKiAod2hpY2ggZG8gbm90IGhhdmUgYW4gZXh0ZW5zaW9uKQorICovCitzdGF0aWMgY2hhciAqbG9va3VwX3Byb2coY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpjbWQsIGludCBpc2V4ZSwgaW50IGV4ZV9vbmx5KQoreworCWNoYXIgcGF0aFtNQVhfUEFUSF07CisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMuZXhlIiwgZGlyLCBjbWQpOworCisJaWYgKCFpc2V4ZSAmJiBhY2Nlc3MocGF0aCwgRl9PSykgPT0gMCkKKwkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJcGF0aFtzdHJsZW4ocGF0aCktNF0gPSAnXDAnOworCWlmICgoIWV4ZV9vbmx5IHx8IGlzZXhlKSAmJiBhY2Nlc3MocGF0aCwgRl9PSykgPT0gMCkKKwkJaWYgKCEoR2V0RmlsZUF0dHJpYnV0ZXMocGF0aCkgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKQorCQkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBEZXRlcm1pbmVzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGNtZCB1c2luZyB0aGUgc3BsaXQgcGF0aCBpbiBwYXRoLgorICogSWYgY21kIGNvbnRhaW5zIGEgc2xhc2ggb3IgYmFja3NsYXNoLCBubyBsb29rdXAgaXMgcGVyZm9ybWVkLgorICovCitzdGF0aWMgY2hhciAqcGF0aF9sb29rdXAoY29uc3QgY2hhciAqY21kLCBjaGFyICoqcGF0aCwgaW50IGV4ZV9vbmx5KQoreworCWNoYXIgKnByb2cgPSBOVUxMOworCWludCBsZW4gPSBzdHJsZW4oY21kKTsKKwlpbnQgaXNleGUgPSBsZW4gPj0gNCAmJiAhc3RyY2FzZWNtcChjbWQrbGVuLTQsICIuZXhlIik7CisKKwlpZiAoc3RyY2hyKGNtZCwgJy8nKSB8fCBzdHJjaHIoY21kLCAnXFwnKSkKKwkJcHJvZyA9IHhzdHJkdXAoY21kKTsKKworCXdoaWxlICghcHJvZyAmJiAqcGF0aCkKKwkJcHJvZyA9IGxvb2t1cF9wcm9nKCpwYXRoKyssIGNtZCwgaXNleGUsIGV4ZV9vbmx5KTsKKworCXJldHVybiBwcm9nOworfQorCitzdGF0aWMgaW50IGVudl9jb21wYXJlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY2hhciAqY29uc3QgKmVhID0gYTsKKwljaGFyICpjb25zdCAqZWIgPSBiOworCXJldHVybiBzdHJjYXNlY21wKCplYSwgKmViKTsKK30KKworc3RydWN0IHBpbmZvX3QgeworCXN0cnVjdCBwaW5mb190ICpuZXh0OworCXBpZF90IHBpZDsKKwlIQU5ETEUgcHJvYzsKK30gcGluZm9fdDsKK3N0cnVjdCBwaW5mb190ICpwaW5mbyA9IE5VTEw7CitDUklUSUNBTF9TRUNUSU9OIHBpbmZvX2NzOworCitzdGF0aWMgcGlkX3QgbWluZ3dfc3Bhd252ZV9mZChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKiphcmd2LCBjaGFyICoqZW52LAorCQkJICAgICAgY29uc3QgY2hhciAqZGlyLAorCQkJICAgICAgaW50IHByZXBlbmRfY21kLCBpbnQgZmhpbiwgaW50IGZob3V0LCBpbnQgZmhlcnIpCit7CisJU1RBUlRVUElORk8gc2k7CisJUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKKwlzdHJ1Y3Qgc3RyYnVmIGVudmJsaywgYXJnczsKKwl1bnNpZ25lZCBmbGFnczsKKwlCT09MIHJldDsKKworCS8qIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYXNzb2NpYXRlZCB0byBhIGNvbnNvbGUgKi8KKwlIQU5ETEUgY29ucyA9IENyZWF0ZUZpbGUoIkNPTk9VVCQiLCBHRU5FUklDX1dSSVRFLAorCQkJRklMRV9TSEFSRV9XUklURSwgTlVMTCwgT1BFTl9FWElTVElORywKKwkJCUZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCk7CisJaWYgKGNvbnMgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJLyogVGhlcmUgaXMgbm8gY29uc29sZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBwcm9jZXNzLgorCQkgKiBTaW5jZSB0aGUgY2hpbGQgaXMgYSBjb25zb2xlIHByb2Nlc3MsIFdpbmRvd3MKKwkJICogd291bGQgbm9ybWFsbHkgY3JlYXRlIGEgY29uc29sZSB3aW5kb3cuIEJ1dAorCQkgKiBzaW5jZSB3ZSdsbCBiZSByZWRpcmVjdGluZyBzdGQgc3RyZWFtcywgd2UgZG8KKwkJICogbm90IG5lZWQgdGhlIGNvbnNvbGUuCisJCSAqIEl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgREVUQUNIRURfUFJPQ0VTUworCQkgKiBpbnN0ZWFkIG9mIENSRUFURV9OT19XSU5ET1cgdG8gbWFrZSBzc2gKKwkJICogcmVjb2duaXplIHRoYXQgaXQgaGFzIG5vIGNvbnNvbGUuCisJCSAqLworCQlmbGFncyA9IERFVEFDSEVEX1BST0NFU1M7CisJfSBlbHNlIHsKKwkJLyogVGhlcmUgaXMgYWxyZWFkeSBhIGNvbnNvbGUuIElmIHdlIHNwZWNpZmllZAorCQkgKiBERVRBQ0hFRF9QUk9DRVNTIGhlcmUsIHRvbywgV2luZG93cyB3b3VsZAorCQkgKiBkaXNhc3NvY2lhdGUgdGhlIGNoaWxkIGZyb20gdGhlIGNvbnNvbGUuCisJCSAqIFRoZSBzYW1lIGlzIHRydWUgZm9yIENSRUFURV9OT19XSU5ET1cuCisJCSAqIEdvIGZpZ3VyZSEKKwkJICovCisJCWZsYWdzID0gMDsKKwkJQ2xvc2VIYW5kbGUoY29ucyk7CisJfQorCW1lbXNldCgmc2ksIDAsIHNpemVvZihzaSkpOworCXNpLmNiID0gc2l6ZW9mKHNpKTsKKwlzaS5kd0ZsYWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7CisJc2kuaFN0ZElucHV0ID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUoZmhpbik7CisJc2kuaFN0ZE91dHB1dCA9IChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlKGZob3V0KTsKKwlzaS5oU3RkRXJyb3IgPSAoSEFORExFKSBfZ2V0X29zZmhhbmRsZShmaGVycik7CisKKwkvKiBjb25jYXRlbmF0ZSBhcmd2LCBxdW90aW5nIGFyZ3MgYXMgd2UgZ28gKi8KKwlzdHJidWZfaW5pdCgmYXJncywgMCk7CisJaWYgKHByZXBlbmRfY21kKSB7CisJCWNoYXIgKnF1b3RlZCA9IChjaGFyICopcXVvdGVfYXJnKGNtZCk7CisJCXN0cmJ1Zl9hZGRzdHIoJmFyZ3MsIHF1b3RlZCk7CisJCWlmIChxdW90ZWQgIT0gY21kKQorCQkJZnJlZShxdW90ZWQpOworCX0KKwlmb3IgKDsgKmFyZ3Y7IGFyZ3YrKykgeworCQljaGFyICpxdW90ZWQgPSAoY2hhciAqKXF1b3RlX2FyZygqYXJndik7CisJCWlmICgqYXJncy5idWYpCisJCQlzdHJidWZfYWRkY2goJmFyZ3MsICcgJyk7CisJCXN0cmJ1Zl9hZGRzdHIoJmFyZ3MsIHF1b3RlZCk7CisJCWlmIChxdW90ZWQgIT0gKmFyZ3YpCisJCQlmcmVlKHF1b3RlZCk7CisJfQorCisJaWYgKGVudikgeworCQlpbnQgY291bnQgPSAwOworCQljaGFyICoqZSwgKipzb3J0ZWRfZW52OworCisJCWZvciAoZSA9IGVudjsgKmU7IGUrKykKKwkJCWNvdW50Kys7CisKKwkJLyogZW52aXJvbm1lbnQgbXVzdCBiZSBzb3J0ZWQgKi8KKwkJc29ydGVkX2VudiA9IHhtYWxsb2Moc2l6ZW9mKCpzb3J0ZWRfZW52KSAqIChjb3VudCArIDEpKTsKKwkJbWVtY3B5KHNvcnRlZF9lbnYsIGVudiwgc2l6ZW9mKCpzb3J0ZWRfZW52KSAqIChjb3VudCArIDEpKTsKKwkJcXNvcnQoc29ydGVkX2VudiwgY291bnQsIHNpemVvZigqc29ydGVkX2VudiksIGVudl9jb21wYXJlKTsKKworCQlzdHJidWZfaW5pdCgmZW52YmxrLCAwKTsKKwkJZm9yIChlID0gc29ydGVkX2VudjsgKmU7IGUrKykgeworCQkJc3RyYnVmX2FkZHN0cigmZW52YmxrLCAqZSk7CisJCQlzdHJidWZfYWRkY2goJmVudmJsaywgJ1wwJyk7CisJCX0KKwkJZnJlZShzb3J0ZWRfZW52KTsKKwl9CisKKwltZW1zZXQoJnBpLCAwLCBzaXplb2YocGkpKTsKKwlyZXQgPSBDcmVhdGVQcm9jZXNzKGNtZCwgYXJncy5idWYsIE5VTEwsIE5VTEwsIFRSVUUsIGZsYWdzLAorCQllbnYgPyBlbnZibGsuYnVmIDogTlVMTCwgZGlyLCAmc2ksICZwaSk7CisKKwlpZiAoZW52KQorCQlzdHJidWZfcmVsZWFzZSgmZW52YmxrKTsKKwlzdHJidWZfcmVsZWFzZSgmYXJncyk7CisKKwlpZiAoIXJldCkgeworCQllcnJubyA9IEVOT0VOVDsKKwkJcmV0dXJuIC0xOworCX0KKwlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKKworCS8qCisJICogVGhlIHByb2Nlc3MgSUQgaXMgdGhlIGh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXIgb2YgdGhlIHByb2Nlc3MKKwkgKiB0aGF0IHdlIHdhbnQgdG8gcHJlc2VudCBpbiBsb2cgYW5kIGVycm9yIG1lc3NhZ2VzLiBUaGUgaGFuZGxlCisJICogaXMgbm90IHVzZWZ1bCBmb3IgdGhpcyBwdXJwb3NlLiBCdXQgd2UgY2Fubm90IGNsb3NlIGl0LCBlaXRoZXIsCisJICogYmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gdHVybiBhIHByb2Nlc3MgSUQgaW50byBhIHByb2Nlc3MKKwkgKiBoYW5kbGUgYWZ0ZXIgdGhlIHByb2Nlc3MgdGVybWluYXRlZC4KKwkgKiBLZWVwIHRoZSBoYW5kbGUgaW4gYSBsaXN0IGZvciB3YWl0cGlkLgorCSAqLworCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZwaW5mb19jcyk7CisJeworCQlzdHJ1Y3QgcGluZm9fdCAqaW5mbyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwaW5mb190KSk7CisJCWluZm8tPnBpZCA9IHBpLmR3UHJvY2Vzc0lkOworCQlpbmZvLT5wcm9jID0gcGkuaFByb2Nlc3M7CisJCWluZm8tPm5leHQgPSBwaW5mbzsKKwkJcGluZm8gPSBpbmZvOworCX0KKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmcGluZm9fY3MpOworCisJcmV0dXJuIChwaWRfdClwaS5kd1Byb2Nlc3NJZDsKK30KKworc3RhdGljIHBpZF90IG1pbmd3X3NwYXdudmUoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICoqYXJndiwgY2hhciAqKmVudiwKKwkJCSAgIGludCBwcmVwZW5kX2NtZCkKK3sKKwlyZXR1cm4gbWluZ3dfc3Bhd252ZV9mZChjbWQsIGFyZ3YsIGVudiwgTlVMTCwgcHJlcGVuZF9jbWQsIDAsIDEsIDIpOworfQorCitwaWRfdCBtaW5nd19zcGF3bnZwZShjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKiphcmd2LCBjaGFyICoqZW52LAorCQkgICAgIGNvbnN0IGNoYXIgKmRpciwKKwkJICAgICBpbnQgZmhpbiwgaW50IGZob3V0LCBpbnQgZmhlcnIpCit7CisJcGlkX3QgcGlkOworCWNoYXIgKipwYXRoID0gZ2V0X3BhdGhfc3BsaXQoKTsKKwljaGFyICpwcm9nID0gcGF0aF9sb29rdXAoY21kLCBwYXRoLCAwKTsKKworCWlmICghcHJvZykgeworCQllcnJubyA9IEVOT0VOVDsKKwkJcGlkID0gLTE7CisJfQorCWVsc2UgeworCQljb25zdCBjaGFyICppbnRlcnByID0gcGFyc2VfaW50ZXJwcmV0ZXIocHJvZyk7CisKKwkJaWYgKGludGVycHIpIHsKKwkJCWNvbnN0IGNoYXIgKmFyZ3YwID0gYXJndlswXTsKKwkJCWNoYXIgKmlwcm9nID0gcGF0aF9sb29rdXAoaW50ZXJwciwgcGF0aCwgMSk7CisJCQlhcmd2WzBdID0gcHJvZzsKKwkJCWlmICghaXByb2cpIHsKKwkJCQllcnJubyA9IEVOT0VOVDsKKwkJCQlwaWQgPSAtMTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXBpZCA9IG1pbmd3X3NwYXdudmVfZmQoaXByb2csIGFyZ3YsIGVudiwgZGlyLCAxLAorCQkJCQkJICAgICAgIGZoaW4sIGZob3V0LCBmaGVycik7CisJCQkJZnJlZShpcHJvZyk7CisJCQl9CisJCQlhcmd2WzBdID0gYXJndjA7CisJCX0KKwkJZWxzZQorCQkJcGlkID0gbWluZ3dfc3Bhd252ZV9mZChwcm9nLCBhcmd2LCBlbnYsIGRpciwgMCwKKwkJCQkJICAgICAgIGZoaW4sIGZob3V0LCBmaGVycik7CisJCWZyZWUocHJvZyk7CisJfQorCWZyZWVfcGF0aF9zcGxpdChwYXRoKTsKKwlyZXR1cm4gcGlkOworfQorCitzdGF0aWMgaW50IHRyeV9zaGVsbF9leGVjKGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqY29uc3QgKmFyZ3YsIGNoYXIgKiplbnYpCit7CisJY29uc3QgY2hhciAqaW50ZXJwciA9IHBhcnNlX2ludGVycHJldGVyKGNtZCk7CisJY2hhciAqKnBhdGg7CisJY2hhciAqcHJvZzsKKwlpbnQgcGlkID0gMDsKKworCWlmICghaW50ZXJwcikKKwkJcmV0dXJuIDA7CisJcGF0aCA9IGdldF9wYXRoX3NwbGl0KCk7CisJcHJvZyA9IHBhdGhfbG9va3VwKGludGVycHIsIHBhdGgsIDEpOworCWlmIChwcm9nKSB7CisJCWludCBhcmdjID0gMDsKKwkJY29uc3QgY2hhciAqKmFyZ3YyOworCQl3aGlsZSAoYXJndlthcmdjXSkgYXJnYysrOworCQlhcmd2MiA9IHhtYWxsb2Moc2l6ZW9mKCphcmd2KSAqIChhcmdjKzEpKTsKKwkJYXJndjJbMF0gPSAoY2hhciAqKWNtZDsJLyogZnVsbCBwYXRoIHRvIHRoZSBzY3JpcHQgZmlsZSAqLworCQltZW1jcHkoJmFyZ3YyWzFdLCAmYXJndlsxXSwgc2l6ZW9mKCphcmd2KSAqIGFyZ2MpOworCQlwaWQgPSBtaW5nd19zcGF3bnZlKHByb2csIGFyZ3YyLCBlbnYsIDEpOworCQlpZiAocGlkID49IDApIHsKKwkJCWludCBzdGF0dXM7CisJCQlpZiAod2FpdHBpZChwaWQsICZzdGF0dXMsIDApIDwgMCkKKwkJCQlzdGF0dXMgPSAyNTU7CisJCQlleGl0KHN0YXR1cyk7CisJCX0KKwkJcGlkID0gMTsJLyogaW5kaWNhdGUgdGhhdCB3ZSB0cmllZCBidXQgZmFpbGVkICovCisJCWZyZWUocHJvZyk7CisJCWZyZWUoYXJndjIpOworCX0KKwlmcmVlX3BhdGhfc3BsaXQocGF0aCk7CisJcmV0dXJuIHBpZDsKK30KKworc3RhdGljIHZvaWQgbWluZ3dfZXhlY3ZlKGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqY29uc3QgKmFyZ3YsIGNoYXIgKmNvbnN0ICplbnYpCit7CisJLyogY2hlY2sgaWYgZ2l0X2NvbW1hbmQgaXMgYSBzaGVsbCBzY3JpcHQgKi8KKwlpZiAoIXRyeV9zaGVsbF9leGVjKGNtZCwgYXJndiwgKGNoYXIgKiopZW52KSkgeworCQlpbnQgcGlkLCBzdGF0dXM7CisKKwkJcGlkID0gbWluZ3dfc3Bhd252ZShjbWQsIChjb25zdCBjaGFyICoqKWFyZ3YsIChjaGFyICoqKWVudiwgMCk7CisJCWlmIChwaWQgPCAwKQorCQkJcmV0dXJuOworCQlpZiAod2FpdHBpZChwaWQsICZzdGF0dXMsIDApIDwgMCkKKwkJCXN0YXR1cyA9IDI1NTsKKwkJZXhpdChzdGF0dXMpOworCX0KK30KKworaW50IG1pbmd3X2V4ZWN2cChjb25zdCBjaGFyICpjbWQsIGNoYXIgKmNvbnN0ICphcmd2KQoreworCWNoYXIgKipwYXRoID0gZ2V0X3BhdGhfc3BsaXQoKTsKKwljaGFyICpwcm9nID0gcGF0aF9sb29rdXAoY21kLCBwYXRoLCAwKTsKKworCWlmIChwcm9nKSB7CisJCW1pbmd3X2V4ZWN2ZShwcm9nLCBhcmd2LCBlbnZpcm9uKTsKKwkJZnJlZShwcm9nKTsKKwl9IGVsc2UKKwkJZXJybm8gPSBFTk9FTlQ7CisKKwlmcmVlX3BhdGhfc3BsaXQocGF0aCk7CisJcmV0dXJuIC0xOworfQorCitpbnQgbWluZ3dfZXhlY3YoY29uc3QgY2hhciAqY21kLCBjaGFyICpjb25zdCAqYXJndikKK3sKKwltaW5nd19leGVjdmUoY21kLCBhcmd2LCBlbnZpcm9uKTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBtaW5nd19raWxsKHBpZF90IHBpZCwgaW50IHNpZykKK3sKKwlpZiAocGlkID4gMCAmJiBzaWcgPT0gU0lHVEVSTSkgeworCQlIQU5ETEUgaCA9IE9wZW5Qcm9jZXNzKFBST0NFU1NfVEVSTUlOQVRFLCBGQUxTRSwgcGlkKTsKKworCQlpZiAoVGVybWluYXRlUHJvY2VzcyhoLCAtMSkpIHsKKwkJCUNsb3NlSGFuZGxlKGgpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCQlDbG9zZUhhbmRsZShoKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWVycm5vID0gRUlOVkFMOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGNoYXIgKipjb3B5X2Vudmlyb24odm9pZCkKK3sKKwljaGFyICoqZW52OworCWludCBpID0gMDsKKwl3aGlsZSAoZW52aXJvbltpXSkKKwkJaSsrOworCWVudiA9IHhtYWxsb2MoKGkrMSkqc2l6ZW9mKCplbnYpKTsKKwlmb3IgKGkgPSAwOyBlbnZpcm9uW2ldOyBpKyspCisJCWVudltpXSA9IHhzdHJkdXAoZW52aXJvbltpXSk7CisJZW52W2ldID0gTlVMTDsKKwlyZXR1cm4gZW52OworfQorCit2b2lkIGZyZWVfZW52aXJvbihjaGFyICoqZW52KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGVudltpXTsgaSsrKQorCQlmcmVlKGVudltpXSk7CisJZnJlZShlbnYpOworfQorCitzdGF0aWMgaW50IGxvb2t1cF9lbnYoY2hhciAqKmVudiwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5tbG4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBlbnZbaV07IGkrKykgeworCQlpZiAoMCA9PSBzdHJuY21wKGVudltpXSwgbmFtZSwgbm1sbikKKwkJICAgICYmICc9JyA9PSBlbnZbaV1bbm1sbl0pCisJCQkvKiBtYXRjaGVzICovCisJCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorICogSWYgbmFtZSBjb250YWlucyAnPScsIHRoZW4gc2V0cyB0aGUgdmFyaWFibGUsIG90aGVyd2lzZSBpdCB1bnNldHMgaXQKKyAqLworc3RhdGljIGNoYXIgKiplbnZfc2V0ZW52KGNoYXIgKiplbnYsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqZXEgPSBzdHJjaHJudWwobmFtZSwgJz0nKTsKKwlpbnQgaSA9IGxvb2t1cF9lbnYoZW52LCBuYW1lLCBlcS1uYW1lKTsKKworCWlmIChpIDwgMCkgeworCQlpZiAoKmVxKSB7CisJCQlmb3IgKGkgPSAwOyBlbnZbaV07IGkrKykKKwkJCQk7CisJCQllbnYgPSB4cmVhbGxvYyhlbnYsIChpKzIpKnNpemVvZigqZW52KSk7CisJCQllbnZbaV0gPSB4c3RyZHVwKG5hbWUpOworCQkJZW52W2krMV0gPSBOVUxMOworCQl9CisJfQorCWVsc2UgeworCQlmcmVlKGVudltpXSk7CisJCWlmICgqZXEpCisJCQllbnZbaV0gPSB4c3RyZHVwKG5hbWUpOworCQllbHNlCisJCQlmb3IgKDsgZW52W2ldOyBpKyspCisJCQkJZW52W2ldID0gZW52W2krMV07CisJfQorCXJldHVybiBlbnY7Cit9CisKKy8qCisgKiBDb3BpZXMgZ2xvYmFsIGVudmlyb24gYW5kIGFkanVzdHMgdmFyaWFibGVzIGFzIHNwZWNpZmllZCBieSB2YXJzLgorICovCitjaGFyICoqbWFrZV9hdWdtZW50ZWRfZW52aXJvbihjb25zdCBjaGFyICpjb25zdCAqdmFycykKK3sKKwljaGFyICoqZW52ID0gY29weV9lbnZpcm9uKCk7CisKKwl3aGlsZSAoKnZhcnMpCisJCWVudiA9IGVudl9zZXRlbnYoZW52LCAqdmFycysrKTsKKwlyZXR1cm4gZW52OworfQorCisjdW5kZWYgZ2V0ZW52CisKKy8qCisgKiBUaGUgc3lzdGVtJ3MgZ2V0ZW52IGxvb2tzIHVwIHRoZSBuYW1lIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYW5uZXIuCisgKiBUaGlzIHZlcnNpb24gdHJpZXMgYSBjYXNlLXNlbnNpdGl2ZSBsb29rdXAgYW5kIGZhbGxzIGJhY2sgdG8KKyAqIGNhc2UtaW5zZW5zaXRpdmUgaWYgbm90aGluZyB3YXMgZm91bmQuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAorICogYXMgYSBwcm9taW5lbnQgZXhhbXBsZSwgQ01EIHNldHMgJ1BhdGgnLCBidXQgbm90ICdQQVRIJy4KKyAqIFdhcm5pbmc6IG5vdCB0aHJlYWQtc2FmZS4KKyAqLworc3RhdGljIGNoYXIgKmdldGVudl9jcyhjb25zdCBjaGFyICpuYW1lKQoreworCXNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IGkgPSBsb29rdXBfZW52KGVudmlyb24sIG5hbWUsIGxlbik7CisJaWYgKGkgPj0gMCkKKwkJcmV0dXJuIGVudmlyb25baV0gKyBsZW4gKyAxOwkvKiBza2lwIHBhc3QgbmFtZSBhbmQgJz0nICovCisJcmV0dXJuIGdldGVudihuYW1lKTsKK30KKworY2hhciAqbWluZ3dfZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqcmVzdWx0ID0gZ2V0ZW52X2NzKG5hbWUpOworCWlmICghcmVzdWx0ICYmICFzdHJjbXAobmFtZSwgIlRNUERJUiIpKSB7CisJCS8qIG9uIFdpbmRvd3MgaXQgaXMgVE1QIGFuZCBURU1QICovCisJCXJlc3VsdCA9IGdldGVudl9jcygiVE1QIik7CisJCWlmICghcmVzdWx0KQorCQkJcmVzdWx0ID0gZ2V0ZW52X2NzKCJURU1QIik7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBOb3RlLCB0aGlzIGlzbid0IGEgY29tcGxldGUgcmVwbGFjZW1lbnQgZm9yIGdldGFkZHJpbmZvLiBJdCBhc3N1bWVzCisgKiB0aGF0IHNlcnZpY2UgY29udGFpbnMgYSBudW1lcmljYWwgcG9ydCwgb3IgdGhhdCBpdCBpcyBudWxsLiBJdAorICogZG9lcyBhIHNpbXBsZSBzZWFyY2ggdXNpbmcgZ2V0aG9zdGJ5bmFtZSwgYW5kIHJldHVybnMgb25lIElQdjQgaG9zdAorICogaWYgb25lIHdhcyBmb3VuZC4KKyAqLworc3RhdGljIGludCBXU0FBUEkgZ2V0YWRkcmluZm9fc3R1Yihjb25zdCBjaGFyICpub2RlLCBjb25zdCBjaGFyICpzZXJ2aWNlLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsCisJCQkJICAgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworCXN0cnVjdCBob3N0ZW50ICpoID0gTlVMTDsKKwlzdHJ1Y3QgYWRkcmluZm8gKmFpOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisJaWYgKG5vZGUpIHsKKwkJaCA9IGdldGhvc3RieW5hbWUobm9kZSk7CisJCWlmICghaCkKKwkJCXJldHVybiBXU0FHZXRMYXN0RXJyb3IoKTsKKwl9CisKKwlhaSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpOworCSpyZXMgPSBhaTsKKwlhaS0+YWlfZmxhZ3MgPSAwOworCWFpLT5haV9mYW1pbHkgPSBBRl9JTkVUOworCWFpLT5haV9zb2NrdHlwZSA9IGhpbnRzID8gaGludHMtPmFpX3NvY2t0eXBlIDogMDsKKwlzd2l0Y2ggKGFpLT5haV9zb2NrdHlwZSkgeworCWNhc2UgU09DS19TVFJFQU06CisJCWFpLT5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworCQlicmVhazsKKwljYXNlIFNPQ0tfREdSQU06CisJCWFpLT5haV9wcm90b2NvbCA9IElQUFJPVE9fVURQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhaS0+YWlfcHJvdG9jb2wgPSAwOworCQlicmVhazsKKwl9CisJYWktPmFpX2FkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwlpZiAoaGludHMgJiYgKGhpbnRzLT5haV9mbGFncyAmIEFJX0NBTk9OTkFNRSkpCisJCWFpLT5haV9jYW5vbm5hbWUgPSBoID8geHN0cmR1cChoLT5oX25hbWUpIDogTlVMTDsKKwllbHNlCisJCWFpLT5haV9jYW5vbm5hbWUgPSBOVUxMOworCisJc2luID0geG1hbGxvYyhhaS0+YWlfYWRkcmxlbik7CisJbWVtc2V0KHNpbiwgMCwgYWktPmFpX2FkZHJsZW4pOworCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisJLyogTm90ZTogZ2V0YWRkcmluZm8gaXMgc3VwcG9zZWQgdG8gYWxsb3cgc2VydmljZSB0byBiZSBhIHN0cmluZywKKwkgKiB3aGljaCBzaG91bGQgYmUgbG9va2VkIHVwIHVzaW5nIGdldHNlcnZieW5hbWUuIFRoaXMgaXMKKwkgKiBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkICovCisJaWYgKHNlcnZpY2UpCisJCXNpbi0+c2luX3BvcnQgPSBodG9ucyhhdG9pKHNlcnZpY2UpKTsKKwlpZiAoaCkKKwkJc2luLT5zaW5fYWRkciA9ICooc3RydWN0IGluX2FkZHIgKiloLT5oX2FkZHI7CisJZWxzZSBpZiAoaGludHMgJiYgKGhpbnRzLT5haV9mbGFncyAmIEFJX1BBU1NJVkUpKQorCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisJZWxzZQorCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9MT09QQkFDSzsKKwlhaS0+YWlfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKilzaW47CisJYWktPmFpX25leHQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBXU0FBUEkgZnJlZWFkZHJpbmZvX3N0dWIoc3RydWN0IGFkZHJpbmZvICpyZXMpCit7CisJZnJlZShyZXMtPmFpX2Nhbm9ubmFtZSk7CisJZnJlZShyZXMtPmFpX2FkZHIpOworCWZyZWUocmVzKTsKK30KKworc3RhdGljIGludCBXU0FBUEkgZ2V0bmFtZWluZm9fc3R1Yihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzb2NrbGVuX3Qgc2FsZW4sCisJCQkJICAgY2hhciAqaG9zdCwgRFdPUkQgaG9zdGxlbiwKKwkJCQkgICBjaGFyICpzZXJ2LCBEV09SRCBzZXJ2bGVuLCBpbnQgZmxhZ3MpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2E7CisJaWYgKHNhLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkKKwkJcmV0dXJuIEVBSV9GQU1JTFk7CisJaWYgKCFob3N0ICYmICFzZXJ2KQorCQlyZXR1cm4gRUFJX05PTkFNRTsKKworCWlmIChob3N0ICYmIGhvc3RsZW4gPiAwKSB7CisJCXN0cnVjdCBob3N0ZW50ICplbnQgPSBOVUxMOworCQlpZiAoIShmbGFncyAmIE5JX05VTUVSSUNIT1NUKSkKKwkJCWVudCA9IGdldGhvc3RieWFkZHIoKGNvbnN0IGNoYXIgKikmc2luLT5zaW5fYWRkciwKKwkJCQkJICAgIHNpemVvZihzaW4tPnNpbl9hZGRyKSwgQUZfSU5FVCk7CisKKwkJaWYgKGVudCkKKwkJCXNucHJpbnRmKGhvc3QsIGhvc3RsZW4sICIlcyIsIGVudC0+aF9uYW1lKTsKKwkJZWxzZSBpZiAoZmxhZ3MgJiBOSV9OQU1FUkVRRCkKKwkJCXJldHVybiBFQUlfTk9OQU1FOworCQllbHNlCisJCQlzbnByaW50Zihob3N0LCBob3N0bGVuLCAiJXMiLCBpbmV0X250b2Eoc2luLT5zaW5fYWRkcikpOworCX0KKworCWlmIChzZXJ2ICYmIHNlcnZsZW4gPiAwKSB7CisJCXN0cnVjdCBzZXJ2ZW50ICplbnQgPSBOVUxMOworCQlpZiAoIShmbGFncyAmIE5JX05VTUVSSUNTRVJWKSkKKwkJCWVudCA9IGdldHNlcnZieXBvcnQoc2luLT5zaW5fcG9ydCwKKwkJCQkJICAgIGZsYWdzICYgTklfREdSQU0gPyAidWRwIiA6ICJ0Y3AiKTsKKworCQlpZiAoZW50KQorCQkJc25wcmludGYoc2Vydiwgc2VydmxlbiwgIiVzIiwgZW50LT5zX25hbWUpOworCQllbHNlCisJCQlzbnByaW50ZihzZXJ2LCBzZXJ2bGVuLCAiJWQiLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBITU9EVUxFIGlwdjZfZGxsID0gTlVMTDsKK3N0YXRpYyB2b2lkIChXU0FBUEkgKmlwdjZfZnJlZWFkZHJpbmZvKShzdHJ1Y3QgYWRkcmluZm8gKnJlcyk7CitzdGF0aWMgaW50IChXU0FBUEkgKmlwdjZfZ2V0YWRkcmluZm8pKGNvbnN0IGNoYXIgKm5vZGUsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywKKwkJCQkgICAgICBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpOworc3RhdGljIGludCAoV1NBQVBJICppcHY2X2dldG5hbWVpbmZvKShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzb2NrbGVuX3Qgc2FsZW4sCisJCQkJICAgICAgY2hhciAqaG9zdCwgRFdPUkQgaG9zdGxlbiwKKwkJCQkgICAgICBjaGFyICpzZXJ2LCBEV09SRCBzZXJ2bGVuLCBpbnQgZmxhZ3MpOworLyoKKyAqIGdhaV9zdHJlcnJvciBpcyBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gdGhlIHdzMnRjcGlwLmggaGVhZGVyLCBzbyB3ZQorICogZG9uJ3QgbmVlZCB0byB0cnkgdG8gbG9hZCB0aGF0IG9uZSBkeW5hbWljYWxseS4KKyAqLworCitzdGF0aWMgdm9pZCBzb2NrZXRfY2xlYW51cCh2b2lkKQoreworCVdTQUNsZWFudXAoKTsKKwlpZiAoaXB2Nl9kbGwpCisJCUZyZWVMaWJyYXJ5KGlwdjZfZGxsKTsKKwlpcHY2X2RsbCA9IE5VTEw7CisJaXB2Nl9mcmVlYWRkcmluZm8gPSBmcmVlYWRkcmluZm9fc3R1YjsKKwlpcHY2X2dldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fc3R1YjsKKwlpcHY2X2dldG5hbWVpbmZvID0gZ2V0bmFtZWluZm9fc3R1YjsKK30KKworc3RhdGljIHZvaWQgZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbih2b2lkKQoreworCVdTQURBVEEgd3NhOworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCWNvbnN0IGNoYXIgKmxpYnJhcmllc1tdID0geyAid3MyXzMyLmRsbCIsICJ3c2hpcDYuZGxsIiwgTlVMTCB9OworCWNvbnN0IGNoYXIgKipuYW1lOworCisJaWYgKGluaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwlpZiAoV1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhKSkKKwkJZGllKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aW5zb2NrIHN1YnN5c3RlbSwgZXJyb3IgJWQiLAorCQkJV1NBR2V0TGFzdEVycm9yKCkpOworCisJZm9yIChuYW1lID0gbGlicmFyaWVzOyAqbmFtZTsgbmFtZSsrKSB7CisJCWlwdjZfZGxsID0gTG9hZExpYnJhcnkoKm5hbWUpOworCQlpZiAoIWlwdjZfZGxsKQorCQkJY29udGludWU7CisKKwkJaXB2Nl9mcmVlYWRkcmluZm8gPSAodm9pZCAoV1NBQVBJICopKHN0cnVjdCBhZGRyaW5mbyAqKSkKKwkJCUdldFByb2NBZGRyZXNzKGlwdjZfZGxsLCAiZnJlZWFkZHJpbmZvIik7CisJCWlwdjZfZ2V0YWRkcmluZm8gPSAoaW50IChXU0FBUEkgKikoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKKwkJCQkJCSAgIHN0cnVjdCBhZGRyaW5mbyAqKikpCisJCQlHZXRQcm9jQWRkcmVzcyhpcHY2X2RsbCwgImdldGFkZHJpbmZvIik7CisJCWlwdjZfZ2V0bmFtZWluZm8gPSAoaW50IChXU0FBUEkgKikoY29uc3Qgc3RydWN0IHNvY2thZGRyICosCisJCQkJCQkgICBzb2NrbGVuX3QsIGNoYXIgKiwgRFdPUkQsCisJCQkJCQkgICBjaGFyICosIERXT1JELCBpbnQpKQorCQkJR2V0UHJvY0FkZHJlc3MoaXB2Nl9kbGwsICJnZXRuYW1laW5mbyIpOworCQlpZiAoIWlwdjZfZnJlZWFkZHJpbmZvIHx8ICFpcHY2X2dldGFkZHJpbmZvIHx8ICFpcHY2X2dldG5hbWVpbmZvKSB7CisJCQlGcmVlTGlicmFyeShpcHY2X2RsbCk7CisJCQlpcHY2X2RsbCA9IE5VTEw7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorCWlmICghaXB2Nl9mcmVlYWRkcmluZm8gfHwgIWlwdjZfZ2V0YWRkcmluZm8gfHwgIWlwdjZfZ2V0bmFtZWluZm8pIHsKKwkJaXB2Nl9mcmVlYWRkcmluZm8gPSBmcmVlYWRkcmluZm9fc3R1YjsKKwkJaXB2Nl9nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3N0dWI7CisJCWlwdjZfZ2V0bmFtZWluZm8gPSBnZXRuYW1laW5mb19zdHViOworCX0KKworCWF0ZXhpdChzb2NrZXRfY2xlYW51cCk7CisJaW5pdGlhbGl6ZWQgPSAxOworfQorCisjdW5kZWYgZ2V0aG9zdG5hbWUKK2ludCBtaW5nd19nZXRob3N0bmFtZShjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKK3sKKyAgICBlbnN1cmVfc29ja2V0X2luaXRpYWxpemF0aW9uKCk7CisgICAgcmV0dXJuIGdldGhvc3RuYW1lKG5hbWUsIG5hbWVsZW4pOworfQorCisjdW5kZWYgZ2V0aG9zdGJ5bmFtZQorc3RydWN0IGhvc3RlbnQgKm1pbmd3X2dldGhvc3RieW5hbWUoY29uc3QgY2hhciAqaG9zdCkKK3sKKwllbnN1cmVfc29ja2V0X2luaXRpYWxpemF0aW9uKCk7CisJcmV0dXJuIGdldGhvc3RieW5hbWUoaG9zdCk7Cit9CisKK3ZvaWQgbWluZ3dfZnJlZWFkZHJpbmZvKHN0cnVjdCBhZGRyaW5mbyAqcmVzKQoreworCWlwdjZfZnJlZWFkZHJpbmZvKHJlcyk7Cit9CisKK2ludCBtaW5nd19nZXRhZGRyaW5mbyhjb25zdCBjaGFyICpub2RlLCBjb25zdCBjaGFyICpzZXJ2aWNlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisJZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbigpOworCXJldHVybiBpcHY2X2dldGFkZHJpbmZvKG5vZGUsIHNlcnZpY2UsIGhpbnRzLCByZXMpOworfQorCitpbnQgbWluZ3dfZ2V0bmFtZWluZm8oY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90IHNhbGVuLAorCQkgICAgICBjaGFyICpob3N0LCBEV09SRCBob3N0bGVuLCBjaGFyICpzZXJ2LCBEV09SRCBzZXJ2bGVuLAorCQkgICAgICBpbnQgZmxhZ3MpCit7CisJZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbigpOworCXJldHVybiBpcHY2X2dldG5hbWVpbmZvKHNhLCBzYWxlbiwgaG9zdCwgaG9zdGxlbiwgc2Vydiwgc2VydmxlbiwgZmxhZ3MpOworfQorCitpbnQgbWluZ3dfc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpCit7CisJaW50IHNvY2tmZDsKKwlTT0NLRVQgczsKKworCWVuc3VyZV9zb2NrZXRfaW5pdGlhbGl6YXRpb24oKTsKKwlzID0gV1NBU29ja2V0KGRvbWFpbiwgdHlwZSwgcHJvdG9jb2wsIE5VTEwsIDAsIDApOworCWlmIChzID09IElOVkFMSURfU09DS0VUKSB7CisJCS8qCisJCSAqIFdTQUdldExhc3RFcnJvcigpIHZhbHVlcyBhcmUgcmVndWxhciBCU0QgZXJyb3IgY29kZXMKKwkJICogYmlhc2VkIGJ5IFdTQUJBU0VFUlIuCisJCSAqIEhvd2V2ZXIsIHN0cmVycm9yKCkgZG9lcyBub3Qga25vdyBhYm91dCBuZXR3b3JraW5nCisJCSAqIHNwZWNpZmljIGVycm9ycywgd2hpY2ggYXJlIHZhbHVlcyBiZWdpbm5pbmcgYXQgMzggb3Igc28uCisJCSAqIFRoZXJlZm9yZSwgd2UgY2hvb3NlIHRvIGxlYXZlIHRoZSBiaWFzZWQgZXJyb3IgY29kZQorCQkgKiBpbiBlcnJubyBzbyB0aGF0IF9pZl8gc29tZW9uZSBsb29rcyB1cCB0aGUgY29kZSBzb21ld2hlcmUsCisJCSAqIHRoZW4gaXQgaXMgYXQgbGVhc3QgdGhlIG51bWJlciB0aGF0IGFyZSB1c3VhbGx5IGxpc3RlZC4KKwkJICovCisJCWVycm5vID0gV1NBR2V0TGFzdEVycm9yKCk7CisJCXJldHVybiAtMTsKKwl9CisJLyogY29udmVydCBpbnRvIGEgZmlsZSBkZXNjcmlwdG9yICovCisJaWYgKChzb2NrZmQgPSBfb3Blbl9vc2ZoYW5kbGUocywgT19SRFdSfE9fQklOQVJZKSkgPCAwKSB7CisJCWNsb3Nlc29ja2V0KHMpOworCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBtYWtlIGEgc29ja2V0IGZpbGUgZGVzY3JpcHRvcjogJXMiLAorCQkJc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJcmV0dXJuIHNvY2tmZDsKK30KKworI3VuZGVmIGNvbm5lY3QKK2ludCBtaW5nd19jb25uZWN0KGludCBzb2NrZmQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHNpemVfdCBzeikKK3sKKwlTT0NLRVQgcyA9IChTT0NLRVQpX2dldF9vc2ZoYW5kbGUoc29ja2ZkKTsKKwlyZXR1cm4gY29ubmVjdChzLCBzYSwgc3opOworfQorCisjdW5kZWYgYmluZAoraW50IG1pbmd3X2JpbmQoaW50IHNvY2tmZCwgc3RydWN0IHNvY2thZGRyICpzYSwgc2l6ZV90IHN6KQoreworCVNPQ0tFVCBzID0gKFNPQ0tFVClfZ2V0X29zZmhhbmRsZShzb2NrZmQpOworCXJldHVybiBiaW5kKHMsIHNhLCBzeik7Cit9CisKKyN1bmRlZiBzZXRzb2Nrb3B0CitpbnQgbWluZ3dfc2V0c29ja29wdChpbnQgc29ja2ZkLCBpbnQgbHZsLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCVNPQ0tFVCBzID0gKFNPQ0tFVClfZ2V0X29zZmhhbmRsZShzb2NrZmQpOworCXJldHVybiBzZXRzb2Nrb3B0KHMsIGx2bCwgb3B0bmFtZSwgKGNvbnN0IGNoYXIqKW9wdHZhbCwgb3B0bGVuKTsKK30KKworI3VuZGVmIHNodXRkb3duCitpbnQgbWluZ3dfc2h1dGRvd24oaW50IHNvY2tmZCwgaW50IGhvdykKK3sKKwlTT0NLRVQgcyA9IChTT0NLRVQpX2dldF9vc2ZoYW5kbGUoc29ja2ZkKTsKKwlyZXR1cm4gc2h1dGRvd24ocywgaG93KTsKK30KKworI3VuZGVmIGxpc3RlbgoraW50IG1pbmd3X2xpc3RlbihpbnQgc29ja2ZkLCBpbnQgYmFja2xvZykKK3sKKwlTT0NLRVQgcyA9IChTT0NLRVQpX2dldF9vc2ZoYW5kbGUoc29ja2ZkKTsKKwlyZXR1cm4gbGlzdGVuKHMsIGJhY2tsb2cpOworfQorCisjdW5kZWYgYWNjZXB0CitpbnQgbWluZ3dfYWNjZXB0KGludCBzb2NrZmQxLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzb2NrbGVuX3QgKnN6KQoreworCWludCBzb2NrZmQyOworCisJU09DS0VUIHMxID0gKFNPQ0tFVClfZ2V0X29zZmhhbmRsZShzb2NrZmQxKTsKKwlTT0NLRVQgczIgPSBhY2NlcHQoczEsIHNhLCBzeik7CisKKwkvKiBjb252ZXJ0IGludG8gYSBmaWxlIGRlc2NyaXB0b3IgKi8KKwlpZiAoKHNvY2tmZDIgPSBfb3Blbl9vc2ZoYW5kbGUoczIsIE9fUkRXUnxPX0JJTkFSWSkpIDwgMCkgeworCQlpbnQgZXJyID0gZXJybm87CisJCWNsb3Nlc29ja2V0KHMyKTsKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gbWFrZSBhIHNvY2tldCBmaWxlIGRlc2NyaXB0b3I6ICVzIiwKKwkJCXN0cmVycm9yKGVycikpOworCX0KKwlyZXR1cm4gc29ja2ZkMjsKK30KKworI3VuZGVmIHJlbmFtZQoraW50IG1pbmd3X3JlbmFtZShjb25zdCBjaGFyICpwb2xkLCBjb25zdCBjaGFyICpwbmV3KQoreworCURXT1JEIGF0dHJzLCBnbGU7CisJaW50IHRyaWVzID0gMDsKKworCS8qCisJICogVHJ5IG5hdGl2ZSByZW5hbWUoKSBmaXJzdCB0byBnZXQgZXJybm8gcmlnaHQuCisJICogSXQgaXMgYmFzZWQgb24gTW92ZUZpbGUoKSwgd2hpY2ggY2Fubm90IG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcy4KKwkgKi8KKwlpZiAoIXJlbmFtZShwb2xkLCBwbmV3KSkKKwkJcmV0dXJuIDA7CisJaWYgKGVycm5vICE9IEVFWElTVCkKKwkJcmV0dXJuIC0xOworcmVwZWF0OgorCWlmIChNb3ZlRmlsZUV4KHBvbGQsIHBuZXcsIE1PVkVGSUxFX1JFUExBQ0VfRVhJU1RJTkcpKQorCQlyZXR1cm4gMDsKKwkvKiBUT0RPOiB0cmFuc2xhdGUgbW9yZSBlcnJvcnMgKi8KKwlnbGUgPSBHZXRMYXN0RXJyb3IoKTsKKwlpZiAoZ2xlID09IEVSUk9SX0FDQ0VTU19ERU5JRUQgJiYKKwkgICAgKGF0dHJzID0gR2V0RmlsZUF0dHJpYnV0ZXMocG5ldykpICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CisJCWlmIChhdHRycyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgeworCQkJZXJybm8gPSBFSVNESVI7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKChhdHRycyAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSAmJgorCQkgICAgU2V0RmlsZUF0dHJpYnV0ZXMocG5ldywgYXR0cnMgJiB+RklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKSB7CisJCQlpZiAoTW92ZUZpbGVFeChwb2xkLCBwbmV3LCBNT1ZFRklMRV9SRVBMQUNFX0VYSVNUSU5HKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWdsZSA9IEdldExhc3RFcnJvcigpOworCQkJLyogcmV2ZXJ0IGZpbGUgYXR0cmlidXRlcyBvbiBmYWlsdXJlICovCisJCQlTZXRGaWxlQXR0cmlidXRlcyhwbmV3LCBhdHRycyk7CisJCX0KKwl9CisJaWYgKHRyaWVzIDwgQVJSQVlfU0laRShkZWxheSkgJiYgZ2xlID09IEVSUk9SX0FDQ0VTU19ERU5JRUQpIHsKKwkJLyoKKwkJICogV2UgYXNzdW1lIHRoYXQgc29tZSBvdGhlciBwcm9jZXNzIGhhZCB0aGUgc291cmNlIG9yCisJCSAqIGRlc3RpbmF0aW9uIGZpbGUgb3BlbiBhdCB0aGUgd3JvbmcgbW9tZW50IGFuZCByZXRyeS4KKwkJICogSW4gb3JkZXIgdG8gZ2l2ZSB0aGUgb3RoZXIgcHJvY2VzcyBhIGhpZ2hlciBjaGFuY2UgdG8KKwkJICogY29tcGxldGUgaXRzIG9wZXJhdGlvbiwgd2UgZ2l2ZSB1cCBvdXIgdGltZSBzbGljZSBub3cuCisJCSAqIElmIHdlIGhhdmUgdG8gcmV0cnkgYWdhaW4sIHdlIGRvIHNsZWVwIGEgYml0LgorCQkgKi8KKwkJU2xlZXAoZGVsYXlbdHJpZXNdKTsKKwkJdHJpZXMrKzsKKwkJZ290byByZXBlYXQ7CisJfQorCWlmIChnbGUgPT0gRVJST1JfQUNDRVNTX0RFTklFRCAmJgorCSAgICAgICBhc2tfeWVzX25vX2lmX3Bvc3NpYmxlKCJSZW5hbWUgZnJvbSAnJXMnIHRvICclcycgZmFpbGVkLiAiCisJCSAgICAgICAiU2hvdWxkIEkgdHJ5IGFnYWluPyIsIHBvbGQsIHBuZXcpKQorCQlnb3RvIHJlcGVhdDsKKworCWVycm5vID0gRUFDQ0VTOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFnZXNpemUsIGJ1dAorICogdGhlIGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkuIElmIGZ1dHVyZSBXaW5kb3dzIHNwZWNpZmljIGdpdCBjb2RlCisgKiBuZWVkcyB0aGUgcmVhbCBnZXRwYWdlc2l6ZSBmdW5jdGlvbiwgd2UgbmVlZCB0byBmaW5kIGFub3RoZXIgc29sdXRpb24uCisgKi8KK2ludCBtaW5nd19nZXRwYWdlc2l6ZSh2b2lkKQoreworCVNZU1RFTV9JTkZPIHNpOworCUdldFN5c3RlbUluZm8oJnNpKTsKKwlyZXR1cm4gc2kuZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHk7Cit9CisKK3N0cnVjdCBwYXNzd2QgKmdldHB3dWlkKGludCB1aWQpCit7CisJc3RhdGljIGNoYXIgdXNlcl9uYW1lWzEwMF07CisJc3RhdGljIHN0cnVjdCBwYXNzd2QgcDsKKworCURXT1JEIGxlbiA9IHNpemVvZih1c2VyX25hbWUpOworCWlmICghR2V0VXNlck5hbWUodXNlcl9uYW1lLCAmbGVuKSkKKwkJcmV0dXJuIE5VTEw7CisJcC5wd19uYW1lID0gdXNlcl9uYW1lOworCXAucHdfZ2Vjb3MgPSAidW5rbm93biI7CisJcC5wd19kaXIgPSBOVUxMOworCXJldHVybiAmcDsKK30KKworc3RhdGljIEhBTkRMRSB0aW1lcl9ldmVudDsKK3N0YXRpYyBIQU5ETEUgdGltZXJfdGhyZWFkOworc3RhdGljIGludCB0aW1lcl9pbnRlcnZhbDsKK3N0YXRpYyBpbnQgb25lX3Nob3Q7CitzdGF0aWMgc2lnX2hhbmRsZXJfdCB0aW1lcl9mbiA9IFNJR19ERkw7CisKKy8qIFRoZSB0aW1lciB3b3JrcyBsaWtlIHRoaXM6CisgKiBUaGUgdGhyZWFkLCB0aWNrdGFjaygpLCBpcyBhIHRyaXZpYWwgcm91dGluZSB0aGF0IG1vc3Qgb2YgdGhlIHRpbWUKKyAqIG9ubHkgd2FpdHMgdG8gcmVjZWl2ZSB0aGUgc2lnbmFsIHRvIHRlcm1pbmF0ZS4gVGhlIG1haW4gdGhyZWFkIHRlbGxzCisgKiB0aGUgdGhyZWFkIHRvIHRlcm1pbmF0ZSBieSBzZXR0aW5nIHRoZSB0aW1lcl9ldmVudCB0byB0aGUgc2lnbmFsbGVkCisgKiBzdGF0ZS4KKyAqIEJ1dCB0aWNrdGFjaygpIGludGVycnVwdHMgdGhlIHdhaXQgc3RhdGUgYWZ0ZXIgdGhlIHRpbWVyJ3MgaW50ZXJ2YWwKKyAqIGxlbmd0aCB0byBjYWxsIHRoZSBzaWduYWwgaGFuZGxlci4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHRpY2t0YWNrKHZvaWQgKmR1bW15KQoreworCXdoaWxlIChXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpbWVyX2V2ZW50LCB0aW1lcl9pbnRlcnZhbCkgPT0gV0FJVF9USU1FT1VUKSB7CisJCWlmICh0aW1lcl9mbiA9PSBTSUdfREZMKQorCQkJZGllKCJBbGFybSIpOworCQlpZiAodGltZXJfZm4gIT0gU0lHX0lHTikKKwkJCXRpbWVyX2ZuKFNJR0FMUk0pOworCQlpZiAob25lX3Nob3QpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfdGltZXJfdGhyZWFkKHZvaWQpCit7CisJdGltZXJfZXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCWlmICh0aW1lcl9ldmVudCkgeworCQl0aW1lcl90aHJlYWQgPSAoSEFORExFKSBfYmVnaW50aHJlYWRleChOVUxMLCAwLCB0aWNrdGFjaywgTlVMTCwgMCwgTlVMTCk7CisJCWlmICghdGltZXJfdGhyZWFkICkKKwkJCXJldHVybiBlcnJubyA9IEVOT01FTSwKKwkJCQllcnJvcigiY2Fubm90IHN0YXJ0IHRpbWVyIHRocmVhZCIpOworCX0gZWxzZQorCQlyZXR1cm4gZXJybm8gPSBFTk9NRU0sCisJCQllcnJvcigiY2Fubm90IGFsbG9jYXRlIHJlc291cmNlcyBmb3IgdGltZXIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RvcF90aW1lcl90aHJlYWQodm9pZCkKK3sKKwlpZiAodGltZXJfZXZlbnQpCisJCVNldEV2ZW50KHRpbWVyX2V2ZW50KTsJLyogdGVsbCB0aHJlYWQgdG8gdGVybWluYXRlICovCisJaWYgKHRpbWVyX3RocmVhZCkgeworCQlpbnQgcmMgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpbWVyX3RocmVhZCwgMTAwMCk7CisJCWlmIChyYyA9PSBXQUlUX1RJTUVPVVQpCisJCQllcnJvcigidGltZXIgdGhyZWFkIGRpZCBub3QgdGVybWluYXRlIHRpbWVseSIpOworCQllbHNlIGlmIChyYyAhPSBXQUlUX09CSkVDVF8wKQorCQkJZXJyb3IoIndhaXRpbmcgZm9yIHRpbWVyIHRocmVhZCBmYWlsZWQ6ICVsdSIsCisJCQkgICAgICBHZXRMYXN0RXJyb3IoKSk7CisJCUNsb3NlSGFuZGxlKHRpbWVyX3RocmVhZCk7CisJfQorCWlmICh0aW1lcl9ldmVudCkKKwkJQ2xvc2VIYW5kbGUodGltZXJfZXZlbnQpOworCXRpbWVyX2V2ZW50ID0gTlVMTDsKKwl0aW1lcl90aHJlYWQgPSBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc190aW1ldmFsX2VxKGNvbnN0IHN0cnVjdCB0aW1ldmFsICppMSwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKmkyKQoreworCXJldHVybiBpMS0+dHZfc2VjID09IGkyLT50dl9zZWMgJiYgaTEtPnR2X3VzZWMgPT0gaTItPnR2X3VzZWM7Cit9CisKK2ludCBzZXRpdGltZXIoaW50IHR5cGUsIHN0cnVjdCBpdGltZXJ2YWwgKmluLCBzdHJ1Y3QgaXRpbWVydmFsICpvdXQpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB0aW1ldmFsIHplcm87CisJc3RhdGljIGludCBhdGV4aXRfZG9uZTsKKworCWlmIChvdXQgIT0gTlVMTCkKKwkJcmV0dXJuIGVycm5vID0gRUlOVkFMLAorCQkJZXJyb3IoInNldGl0aW1lciBwYXJhbSAzICE9IE5VTEwgbm90IGltcGxlbWVudGVkIik7CisJaWYgKCFpc190aW1ldmFsX2VxKCZpbi0+aXRfaW50ZXJ2YWwsICZ6ZXJvKSAmJgorCSAgICAhaXNfdGltZXZhbF9lcSgmaW4tPml0X2ludGVydmFsLCAmaW4tPml0X3ZhbHVlKSkKKwkJcmV0dXJuIGVycm5vID0gRUlOVkFMLAorCQkJZXJyb3IoInNldGl0aW1lcjogaXRfaW50ZXJ2YWwgbXVzdCBiZSB6ZXJvIG9yIGVxIGl0X3ZhbHVlIik7CisKKwlpZiAodGltZXJfdGhyZWFkKQorCQlzdG9wX3RpbWVyX3RocmVhZCgpOworCisJaWYgKGlzX3RpbWV2YWxfZXEoJmluLT5pdF92YWx1ZSwgJnplcm8pICYmCisJICAgIGlzX3RpbWV2YWxfZXEoJmluLT5pdF9pbnRlcnZhbCwgJnplcm8pKQorCQlyZXR1cm4gMDsKKworCXRpbWVyX2ludGVydmFsID0gaW4tPml0X3ZhbHVlLnR2X3NlYyAqIDEwMDAgKyBpbi0+aXRfdmFsdWUudHZfdXNlYyAvIDEwMDA7CisJb25lX3Nob3QgPSBpc190aW1ldmFsX2VxKCZpbi0+aXRfaW50ZXJ2YWwsICZ6ZXJvKTsKKwlpZiAoIWF0ZXhpdF9kb25lKSB7CisJCWF0ZXhpdChzdG9wX3RpbWVyX3RocmVhZCk7CisJCWF0ZXhpdF9kb25lID0gMTsKKwl9CisJcmV0dXJuIHN0YXJ0X3RpbWVyX3RocmVhZCgpOworfQorCitpbnQgc2lnYWN0aW9uKGludCBzaWcsIHN0cnVjdCBzaWdhY3Rpb24gKmluLCBzdHJ1Y3Qgc2lnYWN0aW9uICpvdXQpCit7CisJaWYgKHNpZyAhPSBTSUdBTFJNKQorCQlyZXR1cm4gZXJybm8gPSBFSU5WQUwsCisJCQllcnJvcigic2lnYWN0aW9uIG9ubHkgaW1wbGVtZW50ZWQgZm9yIFNJR0FMUk0iKTsKKwlpZiAob3V0ICE9IE5VTEwpCisJCXJldHVybiBlcnJubyA9IEVJTlZBTCwKKwkJCWVycm9yKCJzaWdhY3Rpb246IHBhcmFtIDMgIT0gTlVMTCBub3QgaW1wbGVtZW50ZWQiKTsKKworCXRpbWVyX2ZuID0gaW4tPnNhX2hhbmRsZXI7CisJcmV0dXJuIDA7Cit9CisKKyN1bmRlZiBzaWduYWwKK3NpZ19oYW5kbGVyX3QgbWluZ3dfc2lnbmFsKGludCBzaWcsIHNpZ19oYW5kbGVyX3QgaGFuZGxlcikKK3sKKwlzaWdfaGFuZGxlcl90IG9sZCA9IHRpbWVyX2ZuOworCWlmIChzaWcgIT0gU0lHQUxSTSkKKwkJcmV0dXJuIHNpZ25hbChzaWcsIGhhbmRsZXIpOworCXRpbWVyX2ZuID0gaGFuZGxlcjsKKwlyZXR1cm4gb2xkOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbWFrZV9iYWNrc2xhc2hfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBjaGFyIGJ1ZltQQVRIX01BWCArIDFdOworCWNoYXIgKmM7CisKKwlpZiAoc3RybGNweShidWYsIHBhdGgsIFBBVEhfTUFYKSA+PSBQQVRIX01BWCkKKwkJZGllKCJUb28gbG9uZyBwYXRoOiAlLipzIiwgNjAsIHBhdGgpOworCisJZm9yIChjID0gYnVmOyAqYzsgYysrKSB7CisJCWlmICgqYyA9PSAnLycpCisJCQkqYyA9ICdcXCc7CisJfQorCXJldHVybiBidWY7Cit9CisKK3ZvaWQgbWluZ3dfb3Blbl9odG1sKGNvbnN0IGNoYXIgKnVuaXhwYXRoKQoreworCWNvbnN0IGNoYXIgKmh0bWxwYXRoID0gbWFrZV9iYWNrc2xhc2hfcGF0aCh1bml4cGF0aCk7CisJdHlwZWRlZiBISU5TVEFOQ0UgKFdJTkFQSSAqVCkoSFdORCwgY29uc3QgY2hhciAqLAorCQkJY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgSU5UKTsKKwlUIFNoZWxsRXhlY3V0ZTsKKwlITU9EVUxFIHNoZWxsMzI7CisJaW50IHI7CisKKwlzaGVsbDMyID0gTG9hZExpYnJhcnkoInNoZWxsMzIuZGxsIik7CisJaWYgKCFzaGVsbDMyKQorCQlkaWUoImNhbm5vdCBsb2FkIHNoZWxsMzIuZGxsIik7CisJU2hlbGxFeGVjdXRlID0gKFQpR2V0UHJvY0FkZHJlc3Moc2hlbGwzMiwgIlNoZWxsRXhlY3V0ZUEiKTsKKwlpZiAoIVNoZWxsRXhlY3V0ZSkKKwkJZGllKCJjYW5ub3QgcnVuIGJyb3dzZXIiKTsKKworCXByaW50ZigiTGF1bmNoaW5nIGRlZmF1bHQgYnJvd3NlciB0byBkaXNwbGF5IEhUTUwgLi4uXG4iKTsKKwlyID0gKGludClTaGVsbEV4ZWN1dGUoTlVMTCwgIm9wZW4iLCBodG1scGF0aCwgTlVMTCwgIlxcIiwgU1dfU0hPV05PUk1BTCk7CisJRnJlZUxpYnJhcnkoc2hlbGwzMik7CisJLyogc2VlIHRoZSBNU0ROIGRvY3VtZW50YXRpb24gcmVmZXJyaW5nIHRvIHRoZSByZXN1bHQgY29kZXMgaGVyZSAqLworCWlmIChyIDw9IDMyKSB7CisJCWRpZSgiZmFpbGVkIHRvIGxhdW5jaCBicm93c2VyIGZvciAlLipzIiwgTUFYX1BBVEgsIHVuaXhwYXRoKTsKKwl9Cit9CisKK2ludCBsaW5rKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpCit7CisJdHlwZWRlZiBCT09MIChXSU5BUEkgKlQpKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgTFBTRUNVUklUWV9BVFRSSUJVVEVTKTsKKwlzdGF0aWMgVCBjcmVhdGVfaGFyZF9saW5rID0gTlVMTDsKKwlpZiAoIWNyZWF0ZV9oYXJkX2xpbmspIHsKKwkJY3JlYXRlX2hhcmRfbGluayA9IChUKSBHZXRQcm9jQWRkcmVzcygKKwkJCUdldE1vZHVsZUhhbmRsZSgia2VybmVsMzIuZGxsIiksICJDcmVhdGVIYXJkTGlua0EiKTsKKwkJaWYgKCFjcmVhdGVfaGFyZF9saW5rKQorCQkJY3JlYXRlX2hhcmRfbGluayA9IChUKS0xOworCX0KKwlpZiAoY3JlYXRlX2hhcmRfbGluayA9PSAoVCktMSkgeworCQllcnJubyA9IEVOT1NZUzsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIWNyZWF0ZV9oYXJkX2xpbmsobmV3cGF0aCwgb2xkcGF0aCwgTlVMTCkpIHsKKwkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworY2hhciAqZ2V0cGFzcyhjb25zdCBjaGFyICpwcm9tcHQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWZwdXRzKHByb21wdCwgc3RkZXJyKTsKKwlmb3IgKDs7KSB7CisJCWNoYXIgYyA9IF9nZXRjaCgpOworCQlpZiAoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykKKwkJCWJyZWFrOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgYyk7CisJfQorCWZwdXRzKCJcbiIsIHN0ZGVycik7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3BpZF90IHdhaXRwaWQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgaW50IG9wdGlvbnMpCit7CisJSEFORExFIGggPSBPcGVuUHJvY2VzcyhTWU5DSFJPTklaRSB8IFBST0NFU1NfUVVFUllfSU5GT1JNQVRJT04sCisJICAgIEZBTFNFLCBwaWQpOworCWlmICghaCkgeworCQllcnJubyA9IEVDSElMRDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChwaWQgPiAwICYmIG9wdGlvbnMgJiBXTk9IQU5HKSB7CisJCWlmIChXQUlUX09CSkVDVF8wICE9IFdhaXRGb3JTaW5nbGVPYmplY3QoaCwgMCkpIHsKKwkJCUNsb3NlSGFuZGxlKGgpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJb3B0aW9ucyAmPSB+V05PSEFORzsKKwl9CisKKwlpZiAob3B0aW9ucyA9PSAwKSB7CisJCXN0cnVjdCBwaW5mb190ICoqcHBpbmZvOworCQlpZiAoV2FpdEZvclNpbmdsZU9iamVjdChoLCBJTkZJTklURSkgIT0gV0FJVF9PQkpFQ1RfMCkgeworCQkJQ2xvc2VIYW5kbGUoaCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChzdGF0dXMpCisJCQlHZXRFeGl0Q29kZVByb2Nlc3MoaCwgKExQRFdPUkQpc3RhdHVzKTsKKworCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmcGluZm9fY3MpOworCisJCXBwaW5mbyA9ICZwaW5mbzsKKwkJd2hpbGUgKCpwcGluZm8pIHsKKwkJCXN0cnVjdCBwaW5mb190ICppbmZvID0gKnBwaW5mbzsKKwkJCWlmIChpbmZvLT5waWQgPT0gcGlkKSB7CisJCQkJQ2xvc2VIYW5kbGUoaW5mby0+cHJvYyk7CisJCQkJKnBwaW5mbyA9IGluZm8tPm5leHQ7CisJCQkJZnJlZShpbmZvKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBwaW5mbyA9ICZpbmZvLT5uZXh0OworCQl9CisKKwkJTGVhdmVDcml0aWNhbFNlY3Rpb24oJnBpbmZvX2NzKTsKKworCQlDbG9zZUhhbmRsZShoKTsKKwkJcmV0dXJuIHBpZDsKKwl9CisJQ2xvc2VIYW5kbGUoaCk7CisKKwllcnJubyA9IEVJTlZBTDsKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvbWluZ3cuaCBiL2NvbXBhdC9taW5ndy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYTY1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbWluZ3cuaApAQCAtMCwwICsxLDM1MiBAQAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKworLyoKKyAqIHRoaW5ncyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGluIGhlYWRlciBmaWxlcworICovCisKK3R5cGVkZWYgaW50IHBpZF90OwordHlwZWRlZiBpbnQgdWlkX3Q7Cit0eXBlZGVmIGludCBzb2NrbGVuX3Q7CisjZGVmaW5lIGhzdHJlcnJvciBzdHJlcnJvcgorCisjZGVmaW5lIFNfSUZMTksgICAgMDEyMDAwMCAvKiBTeW1ib2xpYyBsaW5rICovCisjZGVmaW5lIFNfSVNMTksoeCkgKCgoeCkgJiBTX0lGTVQpID09IFNfSUZMTkspCisjZGVmaW5lIFNfSVNTT0NLKHgpIDAKKworI2RlZmluZSBTX0lSR1JQIDAKKyNkZWZpbmUgU19JV0dSUCAwCisjZGVmaW5lIFNfSVhHUlAgMAorI2RlZmluZSBTX0lSV1hHIChTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVhHUlApCisjZGVmaW5lIFNfSVJPVEggMAorI2RlZmluZSBTX0lXT1RIIDAKKyNkZWZpbmUgU19JWE9USCAwCisjZGVmaW5lIFNfSVJXWE8gKFNfSVJPVEggfCBTX0lXT1RIIHwgU19JWE9USCkKKworI2RlZmluZSBTX0lTVUlEIDAwMDQwMDAKKyNkZWZpbmUgU19JU0dJRCAwMDAyMDAwCisjZGVmaW5lIFNfSVNWVFggMDAwMTAwMAorCisjZGVmaW5lIFdJRkVYSVRFRCh4KSAxCisjZGVmaW5lIFdJRlNJR05BTEVEKHgpIDAKKyNkZWZpbmUgV0VYSVRTVEFUVVMoeCkgKCh4KSAmIDB4ZmYpCisjZGVmaW5lIFdURVJNU0lHKHgpIFNJR1RFUk0KKworI2RlZmluZSBFV09VTERCTE9DSyBFQUdBSU4KKyNkZWZpbmUgU0hVVF9XUiBTRF9TRU5ECisKKyNkZWZpbmUgU0lHSFVQIDEKKyNkZWZpbmUgU0lHUVVJVCAzCisjZGVmaW5lIFNJR0tJTEwgOQorI2RlZmluZSBTSUdQSVBFIDEzCisjZGVmaW5lIFNJR0FMUk0gMTQKKyNkZWZpbmUgU0lHQ0hMRCAxNworCisjZGVmaW5lIEZfR0VURkQgMQorI2RlZmluZSBGX1NFVEZEIDIKKyNkZWZpbmUgRkRfQ0xPRVhFQyAweDEKKworI2RlZmluZSBFQUZOT1NVUFBPUlQgV1NBRUFGTk9TVVBQT1JUCisjZGVmaW5lIEVDT05OQUJPUlRFRCBXU0FFQ09OTkFCT1JURUQKKworc3RydWN0IHBhc3N3ZCB7CisJY2hhciAqcHdfbmFtZTsKKwljaGFyICpwd19nZWNvczsKKwljaGFyICpwd19kaXI7Cit9OworCitleHRlcm4gY2hhciAqZ2V0cGFzcyhjb25zdCBjaGFyICpwcm9tcHQpOworCit0eXBlZGVmIHZvaWQgKF9fY2RlY2wgKnNpZ19oYW5kbGVyX3QpKGludCk7CitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwlzaWdfaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgc2FfZmxhZ3M7Cit9OworI2RlZmluZSBzaWdlbXB0eXNldCh4KSAodm9pZCkwCisjZGVmaW5lIFNBX1JFU1RBUlQgMAorCitzdHJ1Y3QgaXRpbWVydmFsIHsKKwlzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZSwgaXRfaW50ZXJ2YWw7Cit9OworI2RlZmluZSBJVElNRVJfUkVBTCAwCisKKy8qCisgKiBzYW5pdGl6ZSBwcmVwcm9jZXNzb3IgbmFtZXNwYWNlIHBvbGx1dGVkIGJ5IFdpbmRvd3MgaGVhZGVycyBkZWZpbmluZworICogbWFjcm9zIHdoaWNoIGNvbGxpZGUgd2l0aCBnaXQgbG9jYWwgdmVyc2lvbnMKKyAqLworI3VuZGVmIEhFTFBfQ09NTUFORCAvKiBmcm9tIHdpbnVzZXIuaCAqLworCisvKgorICogdHJpdmlhbCBzdHVicworICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHJlYWRsaW5rKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpeikKK3sgZXJybm8gPSBFTk9TWVM7IHJldHVybiAtMTsgfQorc3RhdGljIGlubGluZSBpbnQgc3ltbGluayhjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKQoreyBlcnJubyA9IEVOT1NZUzsgcmV0dXJuIC0xOyB9CitzdGF0aWMgaW5saW5lIGludCBmY2htb2QoaW50IGZpbGRlcywgbW9kZV90IG1vZGUpCit7IGVycm5vID0gRU5PU1lTOyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgcGlkX3QgZm9yayh2b2lkKQoreyBlcnJubyA9IEVOT1NZUzsgcmV0dXJuIC0xOyB9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGFybSh1bnNpZ25lZCBpbnQgc2Vjb25kcykKK3sgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGZzeW5jKGludCBmZCkKK3sgcmV0dXJuIF9jb21taXQoZmQpOyB9CitzdGF0aWMgaW5saW5lIHBpZF90IGdldHBwaWQodm9pZCkKK3sgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzeW5jKHZvaWQpCit7fQorc3RhdGljIGlubGluZSB1aWRfdCBnZXR1aWQodm9pZCkKK3sgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhc3N3ZCAqZ2V0cHduYW0oY29uc3QgY2hhciAqbmFtZSkKK3sgcmV0dXJuIE5VTEw7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGZjbnRsKGludCBmZCwgaW50IGNtZCwgLi4uKQoreworCWlmIChjbWQgPT0gRl9HRVRGRCB8fCBjbWQgPT0gRl9TRVRGRCkKKwkJcmV0dXJuIDA7CisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuIC0xOworfQorLyogYmFzaCBjYW5ub3QgcmVsaWFibHkgZGV0ZWN0IG5lZ2F0aXZlIHJldHVybiBjb2RlcyBhcyBmYWlsdXJlICovCisjZGVmaW5lIGV4aXQoY29kZSkgZXhpdCgoY29kZSkgJiAweGZmKQorCisvKgorICogc2ltcGxlIGFkYXB0b3JzCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgbWluZ3dfbWtkaXIoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpCit7CisJcmV0dXJuIG1rZGlyKHBhdGgpOworfQorI2RlZmluZSBta2RpciBtaW5nd19ta2RpcgorCisjZGVmaW5lIFdOT0hBTkcgMQorcGlkX3Qgd2FpdHBpZChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucyk7CisKKyNkZWZpbmUga2lsbCBtaW5nd19raWxsCitpbnQgbWluZ3dfa2lsbChwaWRfdCBwaWQsIGludCBzaWcpOworCisjaWZuZGVmIE5PX09QRU5TU0wKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorc3RhdGljIGlubGluZSBpbnQgbWluZ3dfU1NMX3NldF9mZChTU0wgKnNzbCwgaW50IGZkKQoreworCXJldHVybiBTU0xfc2V0X2ZkKHNzbCwgX2dldF9vc2ZoYW5kbGUoZmQpKTsKK30KKyNkZWZpbmUgU1NMX3NldF9mZCBtaW5nd19TU0xfc2V0X2ZkCisKK3N0YXRpYyBpbmxpbmUgaW50IG1pbmd3X1NTTF9zZXRfcmZkKFNTTCAqc3NsLCBpbnQgZmQpCit7CisJcmV0dXJuIFNTTF9zZXRfcmZkKHNzbCwgX2dldF9vc2ZoYW5kbGUoZmQpKTsKK30KKyNkZWZpbmUgU1NMX3NldF9yZmQgbWluZ3dfU1NMX3NldF9yZmQKKworc3RhdGljIGlubGluZSBpbnQgbWluZ3dfU1NMX3NldF93ZmQoU1NMICpzc2wsIGludCBmZCkKK3sKKwlyZXR1cm4gU1NMX3NldF93ZmQoc3NsLCBfZ2V0X29zZmhhbmRsZShmZCkpOworfQorI2RlZmluZSBTU0xfc2V0X3dmZCBtaW5nd19TU0xfc2V0X3dmZAorI2VuZGlmCisKKy8qCisgKiBpbXBsZW1lbnRhdGlvbnMgb2YgbWlzc2luZyBmdW5jdGlvbnMKKyAqLworCitpbnQgcGlwZShpbnQgZmlsZWRlc1syXSk7Cit1bnNpZ25lZCBpbnQgc2xlZXAgKHVuc2lnbmVkIGludCBzZWNvbmRzKTsKK2ludCBta3N0ZW1wKGNoYXIgKnRlbXBsYXRlKTsKK2ludCBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCB2b2lkICp0eik7CitzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqdGltZXAsIHN0cnVjdCB0bSAqcmVzdWx0KTsKK3N0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgc3RydWN0IHRtICpyZXN1bHQpOworaW50IGdldHBhZ2VzaXplKHZvaWQpOwkvKiBkZWZpbmVkIGluIE1pbkdXJ3MgbGliZ2NjLmEgKi8KK3N0cnVjdCBwYXNzd2QgKmdldHB3dWlkKHVpZF90IHVpZCk7CitpbnQgc2V0aXRpbWVyKGludCB0eXBlLCBzdHJ1Y3QgaXRpbWVydmFsICppbiwgc3RydWN0IGl0aW1lcnZhbCAqb3V0KTsKK2ludCBzaWdhY3Rpb24oaW50IHNpZywgc3RydWN0IHNpZ2FjdGlvbiAqaW4sIHN0cnVjdCBzaWdhY3Rpb24gKm91dCk7CitpbnQgbGluayhjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKTsKKworLyoKKyAqIHJlcGxhY2VtZW50cyBvZiBleGlzdGluZyBmdW5jdGlvbnMKKyAqLworCitpbnQgbWluZ3dfdW5saW5rKGNvbnN0IGNoYXIgKnBhdGhuYW1lKTsKKyNkZWZpbmUgdW5saW5rIG1pbmd3X3VubGluaworCitpbnQgbWluZ3dfcm1kaXIoY29uc3QgY2hhciAqcGF0aCk7CisjZGVmaW5lIHJtZGlyIG1pbmd3X3JtZGlyCisKK2ludCBtaW5nd19vcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG9mbGFncywgLi4uKTsKKyNkZWZpbmUgb3BlbiBtaW5nd19vcGVuCisKK3NzaXplX3QgbWluZ3dfd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CisjZGVmaW5lIHdyaXRlIG1pbmd3X3dyaXRlCisKK0ZJTEUgKm1pbmd3X2ZvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUpOworI2RlZmluZSBmb3BlbiBtaW5nd19mb3BlbgorCitGSUxFICptaW5nd19mcmVvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUsIEZJTEUgKnN0cmVhbSk7CisjZGVmaW5lIGZyZW9wZW4gbWluZ3dfZnJlb3BlbgorCitjaGFyICptaW5nd19nZXRjd2QoY2hhciAqcG9pbnRlciwgaW50IGxlbik7CisjZGVmaW5lIGdldGN3ZCBtaW5nd19nZXRjd2QKKworY2hhciAqbWluZ3dfZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpOworI2RlZmluZSBnZXRlbnYgbWluZ3dfZ2V0ZW52CisKK2ludCBtaW5nd19nZXRob3N0bmFtZShjaGFyICpob3N0LCBpbnQgbmFtZWxlbik7CisjZGVmaW5lIGdldGhvc3RuYW1lIG1pbmd3X2dldGhvc3RuYW1lCisKK3N0cnVjdCBob3N0ZW50ICptaW5nd19nZXRob3N0YnluYW1lKGNvbnN0IGNoYXIgKmhvc3QpOworI2RlZmluZSBnZXRob3N0YnluYW1lIG1pbmd3X2dldGhvc3RieW5hbWUKKwordm9pZCBtaW5nd19mcmVlYWRkcmluZm8oc3RydWN0IGFkZHJpbmZvICpyZXMpOworI2RlZmluZSBmcmVlYWRkcmluZm8gbWluZ3dfZnJlZWFkZHJpbmZvCisKK2ludCBtaW5nd19nZXRhZGRyaW5mbyhjb25zdCBjaGFyICpub2RlLCBjb25zdCBjaGFyICpzZXJ2aWNlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpOworI2RlZmluZSBnZXRhZGRyaW5mbyBtaW5nd19nZXRhZGRyaW5mbworCitpbnQgbWluZ3dfZ2V0bmFtZWluZm8oY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90IHNhbGVuLAorCQkgICAgICBjaGFyICpob3N0LCBEV09SRCBob3N0bGVuLCBjaGFyICpzZXJ2LCBEV09SRCBzZXJ2bGVuLAorCQkgICAgICBpbnQgZmxhZ3MpOworI2RlZmluZSBnZXRuYW1laW5mbyBtaW5nd19nZXRuYW1laW5mbworCitpbnQgbWluZ3dfc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpOworI2RlZmluZSBzb2NrZXQgbWluZ3dfc29ja2V0CisKK2ludCBtaW5nd19jb25uZWN0KGludCBzb2NrZmQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHNpemVfdCBzeik7CisjZGVmaW5lIGNvbm5lY3QgbWluZ3dfY29ubmVjdAorCitpbnQgbWluZ3dfYmluZChpbnQgc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzaXplX3Qgc3opOworI2RlZmluZSBiaW5kIG1pbmd3X2JpbmQKKworaW50IG1pbmd3X3NldHNvY2tvcHQoaW50IHNvY2tmZCwgaW50IGx2bCwgaW50IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCwgaW50IG9wdGxlbik7CisjZGVmaW5lIHNldHNvY2tvcHQgbWluZ3dfc2V0c29ja29wdAorCitpbnQgbWluZ3dfc2h1dGRvd24oaW50IHNvY2tmZCwgaW50IGhvdyk7CisjZGVmaW5lIHNodXRkb3duIG1pbmd3X3NodXRkb3duCisKK2ludCBtaW5nd19saXN0ZW4oaW50IHNvY2tmZCwgaW50IGJhY2tsb2cpOworI2RlZmluZSBsaXN0ZW4gbWluZ3dfbGlzdGVuCisKK2ludCBtaW5nd19hY2NlcHQoaW50IHNvY2tmZCwgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90ICpzeik7CisjZGVmaW5lIGFjY2VwdCBtaW5nd19hY2NlcHQKKworaW50IG1pbmd3X3JlbmFtZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworI2RlZmluZSByZW5hbWUgbWluZ3dfcmVuYW1lCisKKyNpZiBkZWZpbmVkKFVTRV9XSU4zMl9NTUFQKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQoraW50IG1pbmd3X2dldHBhZ2VzaXplKHZvaWQpOworI2RlZmluZSBnZXRwYWdlc2l6ZSBtaW5nd19nZXRwYWdlc2l6ZQorI2VuZGlmCisKK3N0cnVjdCBybGltaXQgeworCXVuc2lnbmVkIGludCBybGltX2N1cjsKK307CisjZGVmaW5lIFJMSU1JVF9OT0ZJTEUgMAorCitzdGF0aWMgaW5saW5lIGludCBnZXRybGltaXQoaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0ICpybHApCit7CisJaWYgKHJlc291cmNlICE9IFJMSU1JVF9OT0ZJTEUpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisKKwlybHAtPnJsaW1fY3VyID0gMjA0ODsKKwlyZXR1cm4gMDsKK30KKworLyogVXNlIG1pbmd3X2xzdGF0KCkgaW5zdGVhZCBvZiBsc3RhdCgpL3N0YXQoKSBhbmQKKyAqIG1pbmd3X2ZzdGF0KCkgaW5zdGVhZCBvZiBmc3RhdCgpIG9uIFdpbmRvd3MuCisgKi8KKyNkZWZpbmUgb2ZmX3Qgb2ZmNjRfdAorI2RlZmluZSBsc2VlayBfbHNlZWtpNjQKKyNpZm5kZWYgQUxSRUFEWV9ERUNMQVJFRF9TVEFUX0ZVTkNTCisjZGVmaW5lIHN0YXQgX3N0YXRpNjQKK2ludCBtaW5nd19sc3RhdChjb25zdCBjaGFyICpmaWxlX25hbWUsIHN0cnVjdCBzdGF0ICpidWYpOworaW50IG1pbmd3X3N0YXQoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKTsKK2ludCBtaW5nd19mc3RhdChpbnQgZmQsIHN0cnVjdCBzdGF0ICpidWYpOworI2RlZmluZSBmc3RhdCBtaW5nd19mc3RhdAorI2RlZmluZSBsc3RhdCBtaW5nd19sc3RhdAorI2RlZmluZSBfc3RhdGk2NCh4LHkpIG1pbmd3X3N0YXQoeCx5KQorI2VuZGlmCisKK2ludCBtaW5nd191dGltZShjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IHN0cnVjdCB1dGltYnVmICp0aW1lcyk7CisjZGVmaW5lIHV0aW1lIG1pbmd3X3V0aW1lCisKK3BpZF90IG1pbmd3X3NwYXdudnBlKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYsCisJCSAgICAgY29uc3QgY2hhciAqZGlyLAorCQkgICAgIGludCBmaGluLCBpbnQgZmhvdXQsIGludCBmaGVycik7CitpbnQgbWluZ3dfZXhlY3ZwKGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqY29uc3QgKmFyZ3YpOworI2RlZmluZSBleGVjdnAgbWluZ3dfZXhlY3ZwCitpbnQgbWluZ3dfZXhlY3YoY29uc3QgY2hhciAqY21kLCBjaGFyICpjb25zdCAqYXJndik7CisjZGVmaW5lIGV4ZWN2IG1pbmd3X2V4ZWN2CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdpdF9udG9obCh1bnNpZ25lZCBpbnQgeCkKK3sgcmV0dXJuICh1bnNpZ25lZCBpbnQpbnRvaGwoeCk7IH0KKyNkZWZpbmUgbnRvaGwgZ2l0X250b2hsCisKK3NpZ19oYW5kbGVyX3QgbWluZ3dfc2lnbmFsKGludCBzaWcsIHNpZ19oYW5kbGVyX3QgaGFuZGxlcik7CisjZGVmaW5lIHNpZ25hbCBtaW5nd19zaWduYWwKKworLyoKKyAqIEFOU0kgZW11bGF0aW9uIHdyYXBwZXJzCisgKi8KKworaW50IHdpbmFuc2lfZnB1dHMoY29uc3QgY2hhciAqc3RyLCBGSUxFICpzdHJlYW0pOworaW50IHdpbmFuc2lfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK2ludCB3aW5hbnNpX2ZwcmludGYoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisjZGVmaW5lIGZwdXRzIHdpbmFuc2lfZnB1dHMKKyNkZWZpbmUgcHJpbnRmKC4uLikgd2luYW5zaV9wcmludGYoX19WQV9BUkdTX18pCisjZGVmaW5lIGZwcmludGYoLi4uKSB3aW5hbnNpX2ZwcmludGYoX19WQV9BUkdTX18pCisKKy8qCisgKiBnaXQgc3BlY2lmaWMgY29tcGF0aWJpbGl0eQorICovCisKKyNkZWZpbmUgaGFzX2Rvc19kcml2ZV9wcmVmaXgocGF0aCkgKGlzYWxwaGEoKihwYXRoKSkgJiYgKHBhdGgpWzFdID09ICc6JykKKyNkZWZpbmUgaXNfZGlyX3NlcChjKSAoKGMpID09ICcvJyB8fCAoYykgPT0gJ1xcJykKK3N0YXRpYyBpbmxpbmUgY2hhciAqbWluZ3dfZmluZF9sYXN0X2Rpcl9zZXAoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICpyZXQgPSBOVUxMOworCWZvciAoOyAqcGF0aDsgKytwYXRoKQorCQlpZiAoaXNfZGlyX3NlcCgqcGF0aCkpCisJCQlyZXQgPSAoY2hhciAqKXBhdGg7CisJcmV0dXJuIHJldDsKK30KKyNkZWZpbmUgZmluZF9sYXN0X2Rpcl9zZXAgbWluZ3dfZmluZF9sYXN0X2Rpcl9zZXAKKyNkZWZpbmUgUEFUSF9TRVAgJzsnCisjZGVmaW5lIFBSSXVNQVggIkk2NHUiCisKK3ZvaWQgbWluZ3dfb3Blbl9odG1sKGNvbnN0IGNoYXIgKnBhdGgpOworI2RlZmluZSBvcGVuX2h0bWwgbWluZ3dfb3Blbl9odG1sCisKKy8qCisgKiBoZWxwZXJzCisgKi8KKworY2hhciAqKm1ha2VfYXVnbWVudGVkX2Vudmlyb24oY29uc3QgY2hhciAqY29uc3QgKnZhcnMpOwordm9pZCBmcmVlX2Vudmlyb24oY2hhciAqKmVudik7CisKKy8qCisgKiBBIHJlcGxhY2VtZW50IG9mIG1haW4oKSB0aGF0IGVuc3VyZXMgdGhhdCBhcmd2WzBdIGhhcyBhIHBhdGgKKyAqIGFuZCB0aGF0IGRlZmF1bHQgZm1vZGUgYW5kIHN0ZChpbnxvdXR8ZXJyKSBhcmUgaW4gYmluYXJ5IG1vZGUKKyAqLworCisjZGVmaW5lIG1haW4oYyx2KSBkdW1teV9kZWNsX21pbmd3X21haW4oKTsgXAorc3RhdGljIGludCBtaW5nd19tYWluKCk7IFwKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikgXAoreyBcCisJZXh0ZXJuIENSSVRJQ0FMX1NFQ1RJT04gcGluZm9fY3M7IFwKKwlfZm1vZGUgPSBfT19CSU5BUlk7IFwKKwlfc2V0bW9kZShfZmlsZW5vKHN0ZGluKSwgX09fQklOQVJZKTsgXAorCV9zZXRtb2RlKF9maWxlbm8oc3Rkb3V0KSwgX09fQklOQVJZKTsgXAorCV9zZXRtb2RlKF9maWxlbm8oc3RkZXJyKSwgX09fQklOQVJZKTsgXAorCWFyZ3ZbMF0gPSB4c3RyZHVwKF9wZ21wdHIpOyBcCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmcGluZm9fY3MpOyBcCisJcmV0dXJuIG1pbmd3X21haW4oYXJnYywgYXJndik7IFwKK30gXAorc3RhdGljIGludCBtaW5nd19tYWluKGMsdikKKworLyoKKyAqIFVzZWQgYnkgUHRocmVhZCBBUEkgaW1wbGVtZW50YXRpb24gZm9yIFdpbmRvd3MKKyAqLworZXh0ZXJuIGludCBlcnJfd2luX3RvX3Bvc2l4KERXT1JEIHdpbmVycik7CmRpZmYgLS1naXQgYS9jb21wYXQvbWtkaXIuYyBiL2NvbXBhdC9ta2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjUzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbWtkaXIuYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjdW5kZWYgbWtkaXIKKworLyogZm9yIHBsYXRmb3JtcyB0aGF0IGNhbid0IGRlYWwgd2l0aCBhIHRyYWlsaW5nICcvJyAqLworaW50IGNvbXBhdF9ta2Rpcl93b190cmFpbGluZ19zbGFzaChjb25zdCBjaGFyICpkaXIsIG1vZGVfdCBtb2RlKQoreworCWludCByZXR2YWw7CisJY2hhciAqdG1wX2RpciA9IE5VTEw7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihkaXIpOworCisJaWYgKGxlbiAmJiBkaXJbbGVuLTFdID09ICcvJykgeworCQlpZiAoKHRtcF9kaXIgPSBzdHJkdXAoZGlyKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKwkJdG1wX2RpcltsZW4tMV0gPSAnXDAnOworCX0KKwllbHNlCisJCXRtcF9kaXIgPSAoY2hhciAqKWRpcjsKKworCXJldHZhbCA9IG1rZGlyKHRtcF9kaXIsIG1vZGUpOworCWlmICh0bXBfZGlyICE9IGRpcikKKwkJZnJlZSh0bXBfZGlyKTsKKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvbWtkdGVtcC5jIGIvY29tcGF0L21rZHRlbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTM2MTE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21rZHRlbXAuYwpAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworY2hhciAqZ2l0bWtkdGVtcChjaGFyICp0ZW1wbGF0ZSkKK3sKKwlpZiAoISpta3RlbXAodGVtcGxhdGUpIHx8IG1rZGlyKHRlbXBsYXRlLCAwNzAwKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHRlbXBsYXRlOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21tYXAuYyBiL2NvbXBhdC9tbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkNDZkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9tbWFwLmMKQEAgLTAsMCArMSw0MiBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCit2b2lkICpnaXRfbW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisJc2l6ZV90IG4gPSAwOworCisJaWYgKHN0YXJ0ICE9IE5VTEwgfHwgIShmbGFncyAmIE1BUF9QUklWQVRFKSkKKwkJZGllKCJJbnZhbGlkIHVzYWdlIG9mIG1tYXAgd2hlbiBidWlsdCB3aXRoIE5PX01NQVAiKTsKKworCXN0YXJ0ID0geG1hbGxvYyhsZW5ndGgpOworCWlmIChzdGFydCA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gTUFQX0ZBSUxFRDsKKwl9CisKKwl3aGlsZSAobiA8IGxlbmd0aCkgeworCQlzc2l6ZV90IGNvdW50ID0gcHJlYWQoZmQsIChjaGFyICopc3RhcnQgKyBuLCBsZW5ndGggLSBuLCBvZmZzZXQgKyBuKTsKKworCQlpZiAoY291bnQgPT0gMCkgeworCQkJbWVtc2V0KChjaGFyICopc3RhcnQrbiwgMCwgbGVuZ3RoLW4pOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoY291bnQgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJZnJlZShzdGFydCk7CisJCQllcnJubyA9IEVBQ0NFUzsKKwkJCXJldHVybiBNQVBfRkFJTEVEOworCQl9CisKKwkJbiArPSBjb3VudDsKKwl9CisKKwlyZXR1cm4gc3RhcnQ7Cit9CisKK2ludCBnaXRfbXVubWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKQoreworCWZyZWUoc3RhcnQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21zdmMuYyBiL2NvbXBhdC9tc3ZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4NDNkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9tc3ZjLmMKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAid2luMzIuaCIKKyNpbmNsdWRlIDxjb25pby5oPgorI2luY2x1ZGUgIi4uL3N0cmJ1Zi5oIgorCisjaW5jbHVkZSAibWluZ3cuYyIKZGlmZiAtLWdpdCBhL2NvbXBhdC9tc3ZjLmggYi9jb21wYXQvbXN2Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGI1NjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbXN2Yy5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX19NU1ZDX19IRUFECisjZGVmaW5lIF9fTVNWQ19fSEVBRAorCisjaW5jbHVkZSA8ZGlyZWN0Lmg+CisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPGlvLmg+CisKKy8qIHBvcnRpbmcgZnVuY3Rpb24gKi8KKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisjZGVmaW5lIF9faW5saW5lX18gX19pbmxpbmUKKyNkZWZpbmUgX19hdHRyaWJ1dGVfXyh4KQorI2RlZmluZSBzdHJuY2FzZWNtcCAgX3N0cm5pY21wCisjZGVmaW5lIGZ0cnVuY2F0ZSAgICBfY2hzaXplCisKK3N0YXRpYyBfX2lubGluZSBpbnQgc3RyY2FzZWNtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCWludCBzaXplMSA9IHN0cmxlbihzMSk7CisJaW50IHNpc3oyID0gc3RybGVuKHMyKTsKKwlyZXR1cm4gX3N0cm5pY21wKHMxLCBzMiwgc2lzejIgPiBzaXplMSA/IHNpc3oyIDogc2l6ZTEpOworfQorCisjdW5kZWYgRVJST1IKKworLyogVXNlIG1pbmd3X2xzdGF0KCkgaW5zdGVhZCBvZiBsc3RhdCgpL3N0YXQoKSBhbmQgbWluZ3dfZnN0YXQoKSBpbnN0ZWFkCisgKiBvZiBmc3RhdCgpLiBXZSBhZGQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBoZXJlLCBzdXBwcmVzc2luZworICogdGhlIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb25zIGluIG1pbmd3LmgsIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGUKKyAqIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSB0eXBlIChhbmQgZnVuY3Rpb24pIG5hbWVzIGZyb20gdGhlIG1zdmMgaGVhZGVycy4KKyAqLworI2RlZmluZSBzdGF0IF9zdGF0NjQKK2ludCBtaW5nd19sc3RhdChjb25zdCBjaGFyICpmaWxlX25hbWUsIHN0cnVjdCBzdGF0ICpidWYpOworaW50IG1pbmd3X2ZzdGF0KGludCBmZCwgc3RydWN0IHN0YXQgKmJ1Zik7CisjZGVmaW5lIGZzdGF0IG1pbmd3X2ZzdGF0CisjZGVmaW5lIGxzdGF0IG1pbmd3X2xzdGF0CisjZGVmaW5lIF9zdGF0NjQoeCx5KSBtaW5nd19sc3RhdCh4LHkpCisjZGVmaW5lIEFMUkVBRFlfREVDTEFSRURfU1RBVF9GVU5DUworCisjaW5jbHVkZSAiY29tcGF0L21pbmd3LmgiCisKKyN1bmRlZiBBTFJFQURZX0RFQ0xBUkVEX1NUQVRfRlVOQ1MKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL0xpY2Vuc2UudHh0IGIvY29tcGF0L25lZG1hbGxvYy9MaWNlbnNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmI3Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9MaWNlbnNlLnR4dApAQCAtMCwwICsxLDIzIEBACitCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Cit0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKK2V4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bworZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCit0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCit3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKK2Egc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKK0RFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dCBiL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDZkOGYxCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9SZWFkbWUudHh0CkBAIC0wLDAgKzEsMTM2IEBACituZWRhbGxvYyB2MS4wNSAxNXRoIEp1bmUgMjAwODoKKy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPQorCitieSBOaWFsbCBEb3VnbGFzIChodHRwOi8vd3d3Lm5lZHByb2QuY29tL3Byb2dyYW1zL3BvcnRhYmxlL25lZG1hbGxvYy8pCisKK0VuY2xvc2VkIGlzIG5lZGFsbG9jLCBhbiBhbHRlcm5hdGl2ZSBtYWxsb2MgaW1wbGVtZW50YXRpb24gZm9yIG11bHRpcGxlCit0aHJlYWRzIHdpdGhvdXQgbG9jayBjb250ZW50aW9uIGJhc2VkIG9uIGRsbWFsbG9jIHYyLjguNC4gSXQgaXMgbW9yZQorb3IgbGVzcyBhIG5ld2VyIGltcGxlbWVudGF0aW9uIG9mIHB0bWFsbG9jMiwgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpbgorTGludXggKHdoaWNoIGlzIGJhc2VkIG9uIGRsbWFsbG9jIHYyLjcuMCkgYnV0IGFsc28gY29udGFpbnMgYSBwZXItdGhyZWFkCitjYWNoZSBmb3IgbWF4aW11bSBDUFUgc2NhbGFiaWxpdHkuCisKK0l0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIHdoaWNoIGJhc2ljYWxseSBtZWFucworeW91IGNhbiBkbyBhbnl0aGluZyB5b3UgbGlrZSB3aXRoIGl0LiBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBtYWxsb2MuYy5oCitmaWxlIHdoaWNoIHJlbWFpbnMgY29weXJpZ2h0IHRvIG90aGVycy4KKworSXQgaGFzIGJlZW4gdGVzdGVkIG9uIHdpbjMyICh4ODYpLCB3aW42NCAoeDY0KSwgTGludXggKHg2NCksIEZyZWVCU0QgKHg2NCkKK2FuZCBBcHBsZSBNYWNPUyBYICh4ODYpLiBJdCB3b3JrcyB2ZXJ5IHdlbGwgb24gYWxsIG9mIHRoZXNlIGFuZCBpcyB2ZXJ5CitzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSBzeXN0ZW0gYWxsb2NhdG9yIG9uIGFsbCBvZiB0aGVzZSBwbGF0Zm9ybXMuCisKK0J5IGxpdGVyYWxseSBkcm9wcGluZyBpbiB0aGlzIGFsbG9jYXRvciBhcyBhIHJlcGxhY2VtZW50IGZvciB5b3VyIHN5c3RlbQorYWxsb2NhdG9yLCB5b3UgY2FuIHNlZSByZWFsIHdvcmxkIGltcHJvdmVtZW50cyBvZiB1cCB0byB0aHJlZSB0aW1lcyBpbiBub3JtYWwKK2NvZGUhCisKK1RvIHVzZToKKy09LT0tPS0KK0Ryb3AgaW4gbmVkbWFsbG9jLmgsIG5lZG1hbGxvYy5jIGFuZCBtYWxsb2MuYy5oIGludG8geW91ciBwcm9qZWN0LgorQ29uZmlndXJlIHVzaW5nIHRoZSBpbnN0cnVjdGlvbnMgaW4gbmVkbWFsbG9jLmguIFJ1biBhbmQgZW5qb3kuCisKK1RvIHRlc3QsIGNvbXBpbGUgdGVzdC5jLiBJdCB3aWxsIHJ1biBhIGNvbXBhcmlzb24gYmV0d2VlbiB5b3VyIHN5c3RlbQorYWxsb2NhdG9yIGFuZCBuZWRhbGxvYyBhbmQgdGVsbCB5b3UgaG93IG11Y2ggZmFzdGVyIG5lZGFsbG9jIGlzLiBJdCBhbHNvCitzZXJ2ZXMgYXMgYW4gZXhhbXBsZSBvZiB1c2FnZS4KKworTm90ZXM6CistPS09LT0KK0lmIHlvdSB3YW50IHRoZSB2ZXJ5IGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgYWxsb2NhdG9yLCBnZXQgaXQgZnJvbSB0aGUKK1RuRk9YIFNWTiByZXBvc2l0b3J5IGF0IHN2bjovL3N2bi5iZXJsaW9zLmRlL3ZpZXdjdnMvdG5mb3gvdHJ1bmsvc3JjL25lZG1hbGxvYworCitCZWNhdXNlIG9mIGhvdyBuZWRhbGxvYyBhbGxvY2F0ZXMgYW4gbXNwYWNlIHBlciB0aHJlYWQsIGl0IGNhbiBjYXVzZQorc2V2ZXJlIGJsb2F0aW5nIG9mIG1lbW9yeSB1c2FnZSB1bmRlciBjZXJ0YWluIGFsbG9jYXRpb24gcGF0dGVybnMuCitZb3UgY2FuIHN1YnN0YW50aWFsbHkgcmVkdWNlIHRoaXMgd2FzdGFnZSBieSBzZXR0aW5nIE1BWFRIUkVBRFNJTlBPT0wKK29yIHRoZSB0aHJlYWRzIHBhcmFtZXRlciB0byBuZWRjcmVhdGVwb29sKCkgdG8gYSBmcmFjdGlvbiBvZiB0aGUgbnVtYmVyIG9mCit0aHJlYWRzIHdoaWNoIHdvdWxkIG5vcm1hbGx5IGJlIGluIGEgcG9vbCBhdCBvbmNlLiBUaGlzIHdpbGwgcmVkdWNlCitibG9hdGluZyBhdCB0aGUgY29zdCBvZiBhbiBpbmNyZWFzZSBpbiBsb2NrIGNvbnRlbnRpb24uIElmIGFsbG9jYXRlZCBzaXplCitpcyBsZXNzIHRoYW4gVEhSRUFEQ0FDSEVNQVgsIGxvY2tpbmcgaXMgYXZvaWRlZCA5MC05OSUgb2YgdGhlIHRpbWUgYW5kCitpZiBtb3N0IG9mIHlvdXIgYWxsb2NhdGlvbnMgYXJlIGJlbG93IHRoaXMgdmFsdWUsIHlvdSBjYW4gc2FmZWx5IHNldAorTUFYVEhSRUFEU0lOUE9PTCB0byBvbmUuCisKK1lvdSB3aWxsIHN1ZmZlciBtZW1vcnkgbGVha2FnZSB1bmxlc3MgeW91IGNhbGwgbmVkZGlzYWJsZXRocmVhZGNhY2hlKCkKK3BlciBwb29sIGZvciBldmVyeSB0aHJlYWQgd2hpY2ggZXhpdHMuIFRoaXMgaXMgYmVjYXVzZSBuZWRhbGxvYyBjYW5ub3QKK3BvcnRhYmx5IGtub3cgd2hlbiBhIHRocmVhZCBleGl0cyBhbmQgdGh1cyB3aGVuIGl0cyB0aHJlYWQgY2FjaGUgY2FuCitiZSByZXR1cm5lZCBmb3IgdXNlIGJ5IG90aGVyIGNvZGUuIERvbid0IGZvcmdldCBwb29sIHplcm8sIHRoZSBzeXN0ZW0gcG9vbC4KKworRm9yIEMrKyB0eXBlIGFsbG9jYXRpb24gcGF0dGVybnMgKHdoZXJlIHRoZSBzYW1lIHNpemVzIG9mIG1lbW9yeSBhcmUKK3JlZ3VsYXJseSBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkIGFzIG9iamVjdHMgYXJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCksCit0aGUgdGhyZWFkY2FjaGUgYWx3YXlzIGJlbmVmaXRzIHBlcmZvcm1hbmNlLiBJZiBob3dldmVyIHlvdXIgYWxsb2NhdGlvbgorcGF0dGVybnMgYXJlIGRpZmZlcmVudCwgc2VhcmNoaW5nIHRoZSB0aHJlYWRjYWNoZSBtYXkgc2lnbmlmaWNhbnRseSBzbG93Citkb3duIHlvdXIgY29kZSAtIGFzIGEgcnVsZSBvZiB0aHVtYiwgaWYgY2FjaGUgdXRpbGlzYXRpb24gaXMgYmVsb3cgODAlCisoc2VlIHRoZSBzb3VyY2UgZm9yIG5lZGRpc2FibGV0aHJlYWRjYWNoZSgpIGZvciBob3cgdG8gZW5hYmxlIGRlYnVnCitwcmludGluZyBpbiByZWxlYXNlIG1vZGUpIHRoZW4geW91IHNob3VsZCBkaXNhYmxlIHRoZSB0aHJlYWQgY2FjaGUgZm9yCit0aGF0IHRocmVhZC4gWW91IGNhbiBjb21waWxlIG91dCB0aGUgdGhyZWFkY2FjaGUgY29kZSBieSBzZXR0aW5nCitUSFJFQURDQUNIRU1BWCB0byB6ZXJvLgorCitTcGVlZCBjb21wYXJpc29uczoKKy09LT0tPS09LT0tPS09LT0tPQorU2VlIEJlbmNobWFya3MueGxzIGZvciBkZXRhaWxzLgorCitUaGUgZW5jbG9zZWQgdGVzdC5jIGNhbiBkbyB0d28gdGhpbmdzOiBpdCBjYW4gYmUgYSB0b3J0dXJlIHRlc3Qgb3IgYSBzcGVlZAordGVzdC4gVGhlIHNwZWVkIHRlc3QgaXMgZGVzaWduZWQgdG8gYmUgYSByZXByZXNlbnRhdGl2ZSBzeW50aGV0aWMKK21lbW9yeSBhbGxvY2F0b3IgdGVzdC4gSXQgd29ya3MgYnkgcmFuZG9tbHkgbWl4aW5nIGFsbG9jYXRpb25zIHdpdGggZnJlZXMKK3dpdGggaGFsZiBvZiB0aGUgYWxsb2NhdGlvbiBzaXplcyBiZWluZyBhIHR3byBwb3dlciBtdWx0aXBsZSBsZXNzIHRoYW4KKzUxMiBieXRlcyAodG8gbWltaWMgQysrIHN0YWNrIGluc3RhbnRpYXRlZCBvYmplY3RzKSBhbmQgdGhlIG90aGVyIGhhbGYKK2JlaW5nIGEgc2ltcGxlIHJhbmRvbSB2YWx1ZSBsZXNzIHRoYW4gMTZLYi4KKworVGhlIHJlYWwgd29ybGQgY29kZSByZXN1bHRzIGFyZSBmcm9tIFRuJ3MgVGVzdElPIGJlbmNobWFyay4gVGhpcyBpcyBhCitoZWF2aWx5IG11bHRpdGhyZWFkZWQgYW5kIG1lbW9yeSBpbnRlbnNpdmUgYmVuY2htYXJrIHdpdGggYSBsb3Qgb2YgYnJhbmNoaW5nCithbmQgb3RoZXIgc3R1ZmYgbW9kZXJuIHByb2Nlc3NvcnMgZG9uJ3QgbGlrZSBzbyBtdWNoLiBBcyB5b3UnbGwgbm90ZSwgdGhlCit0ZXN0IGRvZXNuJ3Qgc2hvdyB0aGUgYmVuZWZpdHMgb2YgdGhlIHRocmVhZGNhY2hlIG1vc3RseSBkdWUgdG8gdGhlIHNhdHVyYXRpb24KK29mIHRoZSBtZW1vcnkgYnVzIGJlaW5nIHRoZSBsaW1pdGluZyBmYWN0b3IuCisKK0NoYW5nZUxvZzoKKy09LT0tPS09LT0KK3YxLjA1IDE1dGggSnVuZSAyMDA4OgorICogeyAxMDQyIH0gQWRkZWQgZXJyb3IgY2hlY2sgZm9yIFRMU1NFVCgpIGFuZCBUTFNGUkVFKCkgbWFjcm9zLiBUaGFua3MgdG8KK01hcmt1cyBFbGZyaW5nIGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIHsgMTA0MyB9IEZpeGVkIGEgc2VnZmF1bHQgd2hlbiBmcmVlaW5nIG1lbW9yeSBhbGxvY2F0ZWQgdXNpbmcKK25lZGluZGVwZW5kZW50X2NvbWFsbG9jKCkuIFRoYW5rcyB0byBQYXZlbCBWb3plbmlsZWsgZm9yIHJlcG9ydGluZyB0aGlzLgorCit2MS4wNCAxNHRoIEp1bHkgMjAwNzoKKyAqIEZpeGVkIGEgYnVnIHdpdGggdGhlIG5ldyBvcHRpbWlzZWQgaW1wbGVtZW50YXRpb24gdGhhdCBmYWlsZWQgdG8gbG9jaworb24gYSByZWFsbG9jIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAqIEZpeGVkIGxhY2sgb2YgdGhyZWFkIHN5bmNocm9uaXNhdGlvbiBpbiBJbml0UG9vbCgpIGNhdXNpbmcgcG9vbCBjb3JydXB0aW9uCisgKiBGaXhlZCBhIG1lbW9yeSBsZWFrIG9mIHRocmVhZCBjYWNoZSBjb250ZW50cyBvbiBkaXNhYmxpbmcuIFRoYW5rcyB0byBFYXJsCitDaGV3IGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIEFkZGVkIGEgc2FuaXR5IGNoZWNrIGZvciBmcmVlZCBibG9ja3MgYmVpbmcgdmFsaWQuCisgKiBSZXdvcmtlZCB0ZXN0LmMgaW50byBiZWluZyBhIHRvcnR1cmUgdGVzdC4KKyAqIEZpeGVkIEdDQyBhc3NlbWJsZXIgb3B0aW1pc2F0aW9uIG1pc3NwZWNpZmljYXRpb24KKwordjEuMDRhbHBoYV9zdm45MTUgN3RoIE9jdG9iZXIgMjAwNjoKKyAqIEZpeGVkIGZhaWx1cmUgdG8gdW5sb2NrIHRocmVhZCBjYWNoZSBsaXN0IGlmIGFsbG9jYXRpbmcgYSBuZXcgbGlzdCBmYWlsZWQuCitUaGFua3MgdG8gRG1pdHJ5IENoaWNoa292IGZvciByZXBvcnRpbmcgdGhpcy4gRnV0aGVyIHRoYW5rcyB0byBBbGVrc2V5IFNhbmluLgorICogRml4ZWQgcmVhbGxvYygwLCA8c2l6ZT4pIHNlZ2ZhdWx0aW5nLiBUaGFua3MgdG8gRG1pdHJ5IENoaWNoa292IGZvcgorcmVwb3J0aW5nIHRoaXMuCisgKiBNYWRlIGNvbmZpZyBkZWZpbmVzICNpZm5kZWYgc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYnVpbGQgc3lzdGVtLgorVGhhbmtzIHRvIEFsZWtzZXkgU2FuaW4gZm9yIHN1Z2dlc3RpbmcgdGhpcy4KKyAqIEZpeGVkIGRlYWRsb2NrIGluIG5lZHByZWFsbG9jKCkgZHVlIHRvIHVubmVjZXNzYXJ5IGxvY2tpbmcgb2YgcHJlZmVycmVkCit0aHJlYWQgbXNwYWNlIHdoZW4gbXNwYWNlX3JlYWxsb2MoKSBhbHdheXMgdXNlcyB0aGUgb3JpZ2luYWwgYmxvY2sncyBtc3BhY2UKK2FueXdheS4gVGhhbmtzIHRvIEFsZWtzZXkgU2FuaW4gZm9yIHJlcG9ydGluZyB0aGlzLgorICogTWFkZSBzb21lIHNwZWVkIGltcHJvdmVtZW50cyBieSBoYWNraW5nIG1zcGFjZV9tYWxsb2MoKSB0byBubyBsb25nZXIgbG9jaworaXRzIG1zcGFjZSwgdGh1cyBhbGxvd2luZyB0aGUgcmVjdXJzaXZlIG11dGV4IGltcGxlbWVudGF0aW9uIHRvIGJlIHJlbW92ZWQKK3dpdGggYW4gYXNzb2NpYXRlZCBzcGVlZCBpbmNyZWFzZS4gVGhhbmtzIHRvIEFsZWtzZXkgU2FuaW4gZm9yIHN1Z2dlc3RpbmcgdGhpcy4KKyAqIEZpeGVkIGEgYnVnIHdoZXJlIGFsbG9jYXRpbmcgbXNwYWNlcyBvdmVycmFuIGl0cyBtYXggbGltaXQuIFRoYW5rcyB0bworQWxla3NleSBTYW5pbiBmb3IgcmVwb3J0aW5nIHRoaXMuCisKK3YxLjAzIDEwdGggSnVseSAyMDA2OgorICogRml4ZWQgbWVtb3J5IGNvcnJ1cHRpb24gYnVnIGluIHRocmVhZGNhY2hlIGNvZGUgd2hpY2ggb25seSBhcHBlYXJlZCB3aXRoID40Cit0aHJlYWRzIGFuZCBpbiBoZWF2eSB1c2Ugb2YgdGhlIHRocmVhZGNhY2hlLgorCit2MS4wMiAxNXRoIE1heSAyMDA2OgorICogSW50ZWdyYXRlZCBkbG1hbGxvYyB2Mi44LjQsIGZpeGluZyB0aGUgd2luMzIgbWVtb3J5IHJlbGVhc2UgcHJvYmxlbSBhbmQKK2ltcHJvdmluZyBwZXJmb3JtYW5jZSBzdGlsbCBmdXJ0aGVyLiBTcGVlZCBpcyBub3cgdXAgdG8gdHdpY2UgdGhlIHNwZWVkIG9mIHYxLjAxCisoYXZlcmFnZSBpcyA2NyUgZmFzdGVyKS4KKyAqIEZpeGVkIHdpbjMyIGNyaXRpY2FsIHNlY3Rpb24gaW1wbGVtZW50YXRpb24uIFRoYW5rcyB0byBQYXZlbCBLdXpuZXRzb3YKK2ZvciByZXBvcnRpbmcgdGhpcy4KKyAqIFdhc24ndCBsb2NraW5nIG1zcGFjZSBpZiBhbGwgbXNwYWNlcyB3ZXJlIGxvY2tlZC4gVGhhbmtzIHRvIFBhdmVsIEt1em5ldHNvdgorZm9yIHJlcG9ydGluZyB0aGlzLgorICogQWRkZWQgQXBwbGUgTWFjIE9TIFggc3VwcG9ydC4KKwordjEuMDEgMjR0aCBGZWJydWFyeSAyMDA2OgorICogRml4ZWQgbXVsdGlwcm9jZXNzb3Igc2NhbGluZyBwcm9ibGVtcyBieSByZW1vdmluZyBzb3VyY2VzIG9mIGNhY2hlIHNsb3NoaW5nCisgKiBFYXJsIENoZXcgPGVhcmxfY2hldyA8YXQ+IGFnaWxlbnQgPGRvdD4gY29tPiBzZW50IHBhdGNoZXMgZm9yIHRoZSBmb2xsb3dpbmc6CisgICAxLiBzaXplMmJpbmlkeCgpIHdhc24ndCB3b3JraW5nIGZvciBkZWZhdWx0IGNvZGUgcGF0aCAobm9uIHg4NikKKyAgIDIuIEZpeGVkIGZhaWx1cmUgdG8gcmVsZWFzZSBtc3BhY2UgbG9jayB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgd2hpY2gKKyAgICAgIGNhdXNlZCBhIGRlYWRsb2NrCisKK3YxLjAwIDFzdCBKYW51YXJ5IDIwMDY6CisgKiBGaXJzdCByZWxlYXNlCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmggYi9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3YzJjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvbWFsbG9jLmMuaApAQCAtMCwwICsxLDU3NTAgQEAKKy8qCisgIFRoaXMgaXMgYSB2ZXJzaW9uIChha2EgZGxtYWxsb2MpIG9mIG1hbGxvYy9mcmVlL3JlYWxsb2Mgd3JpdHRlbiBieQorICBEb3VnIExlYSBhbmQgcmVsZWFzZWQgdG8gdGhlIHB1YmxpYyBkb21haW4sIGFzIGV4cGxhaW5lZCBhdAorICBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9wdWJsaWNkb21haW4uICBTZW5kIHF1ZXN0aW9ucywKKyAgY29tbWVudHMsIGNvbXBsYWludHMsIHBlcmZvcm1hbmNlIGRhdGEsIGV0YyB0byBkbEBjcy5vc3dlZ28uZWR1CisKKyogVmVyc2lvbiBwcmUtMi44LjQgTW9uIE5vdiAyNyAxMToyMjozNyAyMDA2ICAgIChkbCBhdCBnZWUpCisKKyAgIE5vdGU6IFRoZXJlIG1heSBiZSBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhpcyBtYWxsb2Mgb2J0YWluYWJsZSBhdAorCSAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy5jCisJIENoZWNrIGJlZm9yZSBpbnN0YWxsaW5nIQorCisqIFF1aWNrc3RhcnQKKworICBUaGlzIGxpYnJhcnkgaXMgYWxsIGluIG9uZSBmaWxlIHRvIHNpbXBsaWZ5IHRoZSBtb3N0IGNvbW1vbiB1c2FnZToKKyAgZnRwIGl0LCBjb21waWxlIGl0ICgtTzMpLCBhbmQgbGluayBpdCBpbnRvIGFub3RoZXIgcHJvZ3JhbS4gQWxsIG9mCisgIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBkZWZhdWx0IHRvIHJlYXNvbmFibGUgdmFsdWVzIGZvciB1c2Ugb24KKyAgbW9zdCBwbGF0Zm9ybXMuICBZb3UgbWlnaHQgbGF0ZXIgd2FudCB0byBzdGVwIHRocm91Z2ggdmFyaW91cworICBjb21waWxlLXRpbWUgYW5kIGR5bmFtaWMgdHVuaW5nIG9wdGlvbnMuCisKKyAgRm9yIGNvbnZlbmllbmNlLCBhbiBpbmNsdWRlIGZpbGUgZm9yIGNvZGUgdXNpbmcgdGhpcyBtYWxsb2MgaXMgYXQ6CisgICAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy0yLjguNC5oCisgIFlvdSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIC5oIGZpbGUgdW5sZXNzIHlvdSBjYWxsIGZ1bmN0aW9ucyBub3QKKyAgZGVmaW5lZCBpbiB5b3VyIHN5c3RlbSBpbmNsdWRlIGZpbGVzLiAgVGhlIC5oIGZpbGUgY29udGFpbnMgb25seSB0aGUKKyAgZXhjZXJwdHMgZnJvbSB0aGlzIGZpbGUgbmVlZGVkIGZvciB1c2luZyB0aGlzIG1hbGxvYyBvbiBBTlNJIEMvQysrCisgIHN5c3RlbXMsIHNvIGxvbmcgYXMgeW91IGhhdmVuJ3QgY2hhbmdlZCBjb21waWxlLXRpbWUgb3B0aW9ucyBhYm91dAorICBuYW1pbmcgYW5kIHR1bmluZyBwYXJhbWV0ZXJzLiAgSWYgeW91IGRvLCB0aGVuIHlvdSBjYW4gY3JlYXRlIHlvdXIKKyAgb3duIG1hbGxvYy5oIHRoYXQgZG9lcyBpbmNsdWRlIGFsbCBzZXR0aW5ncyBieSBjdXR0aW5nIGF0IHRoZSBwb2ludAorICBpbmRpY2F0ZWQgYmVsb3cuIE5vdGUgdGhhdCB5b3UgbWF5IGFscmVhZHkgYnkgZGVmYXVsdCBiZSB1c2luZyBhIEMKKyAgbGlicmFyeSBjb250YWluaW5nIGEgbWFsbG9jIHRoYXQgaXMgYmFzZWQgb24gc29tZSB2ZXJzaW9uIG9mIHRoaXMKKyAgbWFsbG9jIChmb3IgZXhhbXBsZSBpbiBsaW51eCkuIFlvdSBtaWdodCBzdGlsbCB3YW50IHRvIHVzZSB0aGUgb25lCisgIGluIHRoaXMgZmlsZSB0byBjdXN0b21pemUgc2V0dGluZ3Mgb3IgdG8gYXZvaWQgb3ZlcmhlYWRzIGFzc29jaWF0ZWQKKyAgd2l0aCBsaWJyYXJ5IHZlcnNpb25zLgorCisqIFZpdGFsIHN0YXRpc3RpY3M6CisKKyAgU3VwcG9ydGVkIHBvaW50ZXIvc2l6ZV90IHJlcHJlc2VudGF0aW9uOiAgICAgICA0IG9yIDggYnl0ZXMKKyAgICAgICBzaXplX3QgTVVTVCBiZSBhbiB1bnNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCisgICAgICAgcG9pbnRlcnMuIChJZiB5b3UgYXJlIHVzaW5nIGFuIGFuY2llbnQgc3lzdGVtIHRoYXQgZGVjbGFyZXMKKyAgICAgICBzaXplX3QgYXMgYSBzaWduZWQgdHlwZSwgb3IgbmVlZCBpdCB0byBiZSBhIGRpZmZlcmVudCB3aWR0aAorICAgICAgIHRoYW4gcG9pbnRlcnMsIHlvdSBjYW4gdXNlIGEgcHJldmlvdXMgcmVsZWFzZSBvZiB0aGlzIG1hbGxvYworICAgICAgIChlLmcuIDIuNy4yKSBzdXBwb3J0aW5nIHRoZXNlLikKKworICBBbGlnbm1lbnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgKGRlZmF1bHQpCisgICAgICAgVGhpcyBzdWZmaWNlcyBmb3IgbmVhcmx5IGFsbCBjdXJyZW50IG1hY2hpbmVzIGFuZCBDIGNvbXBpbGVycy4KKyAgICAgICBIb3dldmVyLCB5b3UgY2FuIGRlZmluZSBNQUxMT0NfQUxJR05NRU5UIHRvIGJlIHdpZGVyIHRoYW4gdGhpcworICAgICAgIGlmIG5lY2Vzc2FyeSAodXAgdG8gMTI4Ynl0ZXMpLCBhdCB0aGUgZXhwZW5zZSBvZiB1c2luZyBtb3JlIHNwYWNlLgorCisgIE1pbmltdW0gb3ZlcmhlYWQgcGVyIGFsbG9jYXRlZCBjaHVuazogICA0IG9yICA4IGJ5dGVzIChpZiA0Ynl0ZSBzaXplcykKKwkJCQkJICA4IG9yIDE2IGJ5dGVzIChpZiA4Ynl0ZSBzaXplcykKKyAgICAgICBFYWNoIG1hbGxvY2VkIGNodW5rIGhhcyBhIGhpZGRlbiB3b3JkIG9mIG92ZXJoZWFkIGhvbGRpbmcgc2l6ZQorICAgICAgIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24sIGFuZCBhZGRpdGlvbmFsIGNyb3NzLWNoZWNrIHdvcmQKKyAgICAgICBpZiBGT09URVJTIGlzIGRlZmluZWQuCisKKyAgTWluaW11bSBhbGxvY2F0ZWQgc2l6ZTogNC1ieXRlIHB0cnM6ICAxNiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQorCQkJICA4LWJ5dGUgcHRyczogIDMyIGJ5dGVzICAgIChpbmNsdWRpbmcgb3ZlcmhlYWQpCisKKyAgICAgICBFdmVuIGEgcmVxdWVzdCBmb3IgemVybyBieXRlcyAoaS5lLiwgbWFsbG9jKDApKSByZXR1cm5zIGEKKyAgICAgICBwb2ludGVyIHRvIHNvbWV0aGluZyBvZiB0aGUgbWluaW11bSBhbGxvY2F0YWJsZSBzaXplLgorICAgICAgIFRoZSBtYXhpbXVtIG92ZXJoZWFkIHdhc3RhZ2UgKGkuZS4sIG51bWJlciBvZiBleHRyYSBieXRlcworICAgICAgIGFsbG9jYXRlZCB0aGFuIHdlcmUgcmVxdWVzdGVkIGluIG1hbGxvYykgaXMgbGVzcyB0aGFuIG9yIGVxdWFsCisgICAgICAgdG8gdGhlIG1pbmltdW0gc2l6ZSwgZXhjZXB0IGZvciByZXF1ZXN0cyA+PSBtbWFwX3RocmVzaG9sZCB0aGF0CisgICAgICAgYXJlIHNlcnZpY2VkIHZpYSBtbWFwKCksIHdoZXJlIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgaXMgYWJvdXQKKyAgICAgICAzMiBieXRlcyBwbHVzIHRoZSByZW1haW5kZXIgZnJvbSBhIHN5c3RlbSBwYWdlICh0aGUgbWluaW1hbAorICAgICAgIG1tYXAgdW5pdCk7IHR5cGljYWxseSA0MDk2IG9yIDgxOTIgYnl0ZXMuCisKKyAgU2VjdXJpdHk6IHN0YXRpYy1zYWZlOyBvcHRpb25hbGx5IG1vcmUgb3IgbGVzcworICAgICAgIFRoZSAic2VjdXJpdHkiIG9mIG1hbGxvYyByZWZlcnMgdG8gdGhlIGFiaWxpdHkgb2YgbWFsaWNpb3VzCisgICAgICAgY29kZSB0byBhY2NlbnR1YXRlIHRoZSBlZmZlY3RzIG9mIGVycm9ycyAoZm9yIGV4YW1wbGUsIGZyZWVpbmcKKyAgICAgICBzcGFjZSB0aGF0IGlzIG5vdCBjdXJyZW50bHkgbWFsbG9jJ2VkIG9yIG92ZXJ3cml0aW5nIHBhc3QgdGhlCisgICAgICAgZW5kcyBvZiBjaHVua3MpIGluIGNvZGUgdGhhdCBjYWxscyBtYWxsb2MuICBUaGlzIG1hbGxvYworICAgICAgIGd1YXJhbnRlZXMgbm90IHRvIG1vZGlmeSBhbnkgbWVtb3J5IGxvY2F0aW9ucyBiZWxvdyB0aGUgYmFzZSBvZgorICAgICAgIGhlYXAsIGkuZS4sIHN0YXRpYyB2YXJpYWJsZXMsIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHVzYWdlCisgICAgICAgZXJyb3JzLiAgVGhlIHJvdXRpbmVzIGFkZGl0aW9uYWxseSBkZXRlY3QgbW9zdCBpbXByb3BlciBmcmVlcworICAgICAgIGFuZCByZWFsbG9jcy4gIEFsbCB0aGlzIGhvbGRzIGFzIGxvbmcgYXMgdGhlIHN0YXRpYyBib29ra2VlcGluZworICAgICAgIGZvciBtYWxsb2MgaXRzZWxmIGlzIG5vdCBjb3JydXB0ZWQgYnkgc29tZSBvdGhlciBtZWFucy4gIFRoaXMKKyAgICAgICBpcyBvbmx5IG9uZSBhc3BlY3Qgb2Ygc2VjdXJpdHkgLS0gdGhlc2UgY2hlY2tzIGRvIG5vdCwgYW5kCisgICAgICAgY2Fubm90LCBkZXRlY3QgYWxsIHBvc3NpYmxlIHByb2dyYW1taW5nIGVycm9ycy4KKworICAgICAgIElmIEZPT1RFUlMgaXMgZGVmaW5lZCBub256ZXJvLCB0aGVuIGVhY2ggYWxsb2NhdGVkIGNodW5rCisgICAgICAgY2FycmllcyBhbiBhZGRpdGlvbmFsIGNoZWNrIHdvcmQgdG8gdmVyaWZ5IHRoYXQgaXQgd2FzIG1hbGxvY2VkCisgICAgICAgZnJvbSBpdHMgc3BhY2UuICBUaGVzZSBjaGVjayB3b3JkcyBhcmUgdGhlIHNhbWUgd2l0aGluIGVhY2gKKyAgICAgICBleGVjdXRpb24gb2YgYSBwcm9ncmFtIHVzaW5nIG1hbGxvYywgYnV0IGRpZmZlciBhY3Jvc3MKKyAgICAgICBleGVjdXRpb25zLCBzbyBleHRlcm5hbGx5IGNyYWZ0ZWQgZmFrZSBjaHVua3MgY2Fubm90IGJlCisgICAgICAgZnJlZWQuIFRoaXMgaW1wcm92ZXMgc2VjdXJpdHkgYnkgcmVqZWN0aW5nIGZyZWVzL3JlYWxsb2NzIHRoYXQKKyAgICAgICBjb3VsZCBjb3JydXB0IGhlYXAgbWVtb3J5LCBpbiBhZGRpdGlvbiB0byB0aGUgY2hlY2tzIHByZXZlbnRpbmcKKyAgICAgICB3cml0ZXMgdG8gc3RhdGljcyB0aGF0IGFyZSBhbHdheXMgb24uICBUaGlzIG1heSBmdXJ0aGVyIGltcHJvdmUKKyAgICAgICBzZWN1cml0eSBhdCB0aGUgZXhwZW5zZSBvZiB0aW1lIGFuZCBzcGFjZSBvdmVyaGVhZC4gIChOb3RlIHRoYXQKKyAgICAgICBGT09URVJTIG1heSBhbHNvIGJlIHdvcnRoIHVzaW5nIHdpdGggTVNQQUNFUy4pCisKKyAgICAgICBCeSBkZWZhdWx0IGRldGVjdGVkIGVycm9ycyBjYXVzZSB0aGUgcHJvZ3JhbSB0byBhYm9ydCAoY2FsbGluZworICAgICAgICJhYm9ydCgpIikuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB0byBpbnN0ZWFkIHByb2NlZWQgcGFzdAorICAgICAgIGVycm9ycyBieSBkZWZpbmluZyBQUk9DRUVEX09OX0VSUk9SLiAgSW4gdGhpcyBjYXNlLCBhIGJhZCBmcmVlCisgICAgICAgaGFzIG5vIGVmZmVjdCwgYW5kIGEgbWFsbG9jIHRoYXQgZW5jb3VudGVycyBhIGJhZCBhZGRyZXNzCisgICAgICAgY2F1c2VkIGJ5IHVzZXIgb3ZlcndyaXRlcyB3aWxsIGlnbm9yZSB0aGUgYmFkIGFkZHJlc3MgYnkKKyAgICAgICBkcm9wcGluZyBwb2ludGVycyBhbmQgaW5kaWNlcyB0byBhbGwga25vd24gbWVtb3J5LiBUaGlzIG1heQorICAgICAgIGJlIGFwcHJvcHJpYXRlIGZvciBwcm9ncmFtcyB0aGF0IHNob3VsZCBjb250aW51ZSBpZiBhdCBhbGwKKyAgICAgICBwb3NzaWJsZSBpbiB0aGUgZmFjZSBvZiBwcm9ncmFtbWluZyBlcnJvcnMsIGFsdGhvdWdoIHRoZXkgbWF5CisgICAgICAgcnVuIG91dCBvZiBtZW1vcnkgYmVjYXVzZSBkcm9wcGVkIG1lbW9yeSBpcyBuZXZlciByZWNsYWltZWQuCisKKyAgICAgICBJZiB5b3UgZG9uJ3QgbGlrZSBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucywgeW91IGNhbiBkZWZpbmUKKyAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBhbmQgVVNBR0VfRVJST1JfQUNUSU9OIHRvIGRvIGFueXRoaW5nCisgICAgICAgZWxzZS4gQW5kIGlmIHlvdSBhcmUgc3VyZSB0aGF0IHlvdXIgcHJvZ3JhbSB1c2luZyBtYWxsb2MgaGFzCisgICAgICAgbm8gZXJyb3JzIG9yIHZ1bG5lcmFiaWxpdGllcywgeW91IGNhbiBkZWZpbmUgSU5TRUNVUkUgdG8gMSwKKyAgICAgICB3aGljaCBtaWdodCAob3IgbWlnaHQgbm90KSBwcm92aWRlIGEgc21hbGwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuCisKKyAgVGhyZWFkLXNhZmV0eTogTk9UIHRocmVhZC1zYWZlIHVubGVzcyBVU0VfTE9DS1MgZGVmaW5lZAorICAgICAgIFdoZW4gVVNFX0xPQ0tTIGlzIGRlZmluZWQsIGVhY2ggcHVibGljIGNhbGwgdG8gbWFsbG9jLCBmcmVlLAorICAgICAgIGV0YyBpcyBzdXJyb3VuZGVkIHdpdGggZWl0aGVyIGEgcHRocmVhZCBtdXRleCBvciBhIHdpbjMyCisgICAgICAgc3BpbmxvY2sgKGRlcGVuZGluZyBvbiBXSU4zMikuIFRoaXMgaXMgbm90IGVzcGVjaWFsbHkgZmFzdCwgYW5kCisgICAgICAgY2FuIGJlIGEgbWFqb3IgYm90dGxlbmVjay4gIEl0IGlzIGRlc2lnbmVkIG9ubHkgdG8gcHJvdmlkZQorICAgICAgIG1pbmltYWwgcHJvdGVjdGlvbiBpbiBjb25jdXJyZW50IGVudmlyb25tZW50cywgYW5kIHRvIHByb3ZpZGUgYQorICAgICAgIGJhc2lzIGZvciBleHRlbnNpb25zLiAgSWYgeW91IGFyZSB1c2luZyBtYWxsb2MgaW4gYSBjb25jdXJyZW50CisgICAgICAgcHJvZ3JhbSwgY29uc2lkZXIgaW5zdGVhZCB1c2luZyBuZWRtYWxsb2MKKyAgICAgICAoaHR0cDovL3d3dy5uZWRwcm9kLmNvbS9wcm9ncmFtcy9wb3J0YWJsZS9uZWRtYWxsb2MvKSBvcgorICAgICAgIHB0bWFsbG9jIChTZWUgaHR0cDovL3d3dy5tYWxsb2MuZGUpLCB3aGljaCBhcmUgZGVyaXZlZAorICAgICAgIGZyb20gdmVyc2lvbnMgb2YgdGhpcyBtYWxsb2MuCisKKyAgU3lzdGVtIHJlcXVpcmVtZW50czogQW55IGNvbWJpbmF0aW9uIG9mIE1PUkVDT1JFIGFuZC9vciBNTUFQL01VTk1BUAorICAgICAgIFRoaXMgbWFsbG9jIGNhbiB1c2UgdW5peCBzYnJrIG9yIGFueSBlbXVsYXRpb24gKGludm9rZWQgdXNpbmcKKyAgICAgICB0aGUgQ0FMTF9NT1JFQ09SRSBtYWNybykgYW5kL29yIG1tYXAvbXVubWFwIG9yIGFueSBlbXVsYXRpb24KKyAgICAgICAoaW52b2tlZCB1c2luZyBDQUxMX01NQVAvQ0FMTF9NVU5NQVApIHRvIGdldCBhbmQgcmVsZWFzZSBzeXN0ZW0KKyAgICAgICBtZW1vcnkuICBPbiBtb3N0IHVuaXggc3lzdGVtcywgaXQgdGVuZHMgdG8gd29yayBiZXN0IGlmIGJvdGgKKyAgICAgICBNT1JFQ09SRSBhbmQgTU1BUCBhcmUgZW5hYmxlZC4gIE9uIFdpbjMyLCBpdCB1c2VzIGVtdWxhdGlvbnMKKyAgICAgICBiYXNlZCBvbiBWaXJ0dWFsQWxsb2MuIEl0IGFsc28gdXNlcyBjb21tb24gQyBsaWJyYXJ5IGZ1bmN0aW9ucworICAgICAgIGxpa2UgbWVtc2V0LgorCisgIENvbXBsaWFuY2U6IEkgYmVsaWV2ZSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbgorICAgICAgIChTZWUgaHR0cDovL3d3dy51bml4Lm9yZykuIEFsc28gU1ZJRC9YUEcsIEFOU0kgQywgYW5kIHByb2JhYmx5CisgICAgICAgb3RoZXJzIGFzIHdlbGwuCisKKyogT3ZlcnZpZXcgb2YgYWxnb3JpdGhtcworCisgIFRoaXMgaXMgbm90IHRoZSBmYXN0ZXN0LCBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIG1vc3QgcG9ydGFibGUsIG9yCisgIG1vc3QgdHVuYWJsZSBtYWxsb2MgZXZlciB3cml0dGVuLiBIb3dldmVyIGl0IGlzIGFtb25nIHRoZSBmYXN0ZXN0CisgIHdoaWxlIGFsc28gYmVpbmcgYW1vbmcgdGhlIG1vc3Qgc3BhY2UtY29uc2VydmluZywgcG9ydGFibGUgYW5kCisgIHR1bmFibGUuICBDb25zaXN0ZW50IGJhbGFuY2UgYWNyb3NzIHRoZXNlIGZhY3RvcnMgcmVzdWx0cyBpbiBhIGdvb2QKKyAgZ2VuZXJhbC1wdXJwb3NlIGFsbG9jYXRvciBmb3IgbWFsbG9jLWludGVuc2l2ZSBwcm9ncmFtcy4KKworICBJbiBtb3N0IHdheXMsIHRoaXMgbWFsbG9jIGlzIGEgYmVzdC1maXQgYWxsb2NhdG9yLiBHZW5lcmFsbHksIGl0CisgIGNob29zZXMgdGhlIGJlc3QtZml0dGluZyBleGlzdGluZyBjaHVuayBmb3IgYSByZXF1ZXN0LCB3aXRoIHRpZXMKKyAgYnJva2VuIGluIGFwcHJveGltYXRlbHkgbGVhc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoaXMgc3RyYXRlZ3kKKyAgbm9ybWFsbHkgbWFpbnRhaW5zIGxvdyBmcmFnbWVudGF0aW9uLikgSG93ZXZlciwgZm9yIHJlcXVlc3RzIGxlc3MKKyAgdGhhbiAyNTZieXRlcywgaXQgZGV2aWF0ZXMgZnJvbSBiZXN0LWZpdCB3aGVuIHRoZXJlIGlzIG5vdCBhbgorICBleGFjdGx5IGZpdHRpbmcgYXZhaWxhYmxlIGNodW5rIGJ5IHByZWZlcnJpbmcgdG8gdXNlIHNwYWNlIGFkamFjZW50CisgIHRvIHRoYXQgdXNlZCBmb3IgdGhlIHByZXZpb3VzIHNtYWxsIHJlcXVlc3QsIGFzIHdlbGwgYXMgYnkgYnJlYWtpbmcKKyAgdGllcyBpbiBhcHByb3hpbWF0ZWx5IG1vc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoZXNlIGVuaGFuY2UKKyAgbG9jYWxpdHkgb2Ygc2VyaWVzIG9mIHNtYWxsIGFsbG9jYXRpb25zLikgIEFuZCBmb3IgdmVyeSBsYXJnZSByZXF1ZXN0cworICAoPj0gMjU2S2IgYnkgZGVmYXVsdCksIGl0IHJlbGllcyBvbiBzeXN0ZW0gbWVtb3J5IG1hcHBpbmcKKyAgZmFjaWxpdGllcywgaWYgc3VwcG9ydGVkLiAgKFRoaXMgaGVscHMgYXZvaWQgY2FycnlpbmcgYXJvdW5kIGFuZAorICBwb3NzaWJseSBmcmFnbWVudGluZyBtZW1vcnkgdXNlZCBvbmx5IGZvciBsYXJnZSBjaHVua3MuKQorCisgIEFsbCBvcGVyYXRpb25zIChleGNlcHQgbWFsbG9jX3N0YXRzIGFuZCBtYWxsaW5mbykgaGF2ZSBleGVjdXRpb24KKyAgdGltZXMgdGhhdCBhcmUgYm91bmRlZCBieSBhIGNvbnN0YW50IGZhY3RvciBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4KKyAgYSBzaXplX3QsIG5vdCBjb3VudGluZyBhbnkgY2xlYXJpbmcgaW4gY2FsbG9jIG9yIGNvcHlpbmcgaW4gcmVhbGxvYywKKyAgb3IgYWN0aW9ucyBzdXJyb3VuZGluZyBNT1JFQ09SRSBhbmQgTU1BUCB0aGF0IGhhdmUgdGltZXMKKyAgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2Ygbm9uLWNvbnRpZ3VvdXMgcmVnaW9ucyByZXR1cm5lZCBieQorICBzeXN0ZW0gYWxsb2NhdGlvbiByb3V0aW5lcywgd2hpY2ggaXMgb2Z0ZW4ganVzdCAxLiBJbiByZWFsLXRpbWUKKyAgYXBwbGljYXRpb25zLCB5b3UgY2FuIG9wdGlvbmFsbHkgc3VwcHJlc3Mgc2VnbWVudCB0cmF2ZXJzYWxzIHVzaW5nCisgIE5PX1NFR01FTlRfVFJBVkVSU0FMLCB3aGljaCBhc3N1cmVzIGJvdW5kZWQgZXhlY3V0aW9uIGV2ZW4gd2hlbgorICBzeXN0ZW0gYWxsb2NhdG9ycyByZXR1cm4gbm9uLWNvbnRpZ3VvdXMgc3BhY2VzLCBhdCB0aGUgdHlwaWNhbAorICBleHBlbnNlIG9mIGNhcnJ5aW5nIGFyb3VuZCBtb3JlIG1lbW9yeSBhbmQgaW5jcmVhc2VkIGZyYWdtZW50YXRpb24uCisKKyAgVGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdCB2ZXJ5IG1vZHVsYXIgYW5kIHNlcmlvdXNseSBvdmVydXNlcworICBtYWNyb3MuIFBlcmhhcHMgc29tZWRheSBhbGwgQyBjb21waWxlcnMgd2lsbCBkbyBhcyBnb29kIGEgam9iCisgIGlubGluaW5nIG1vZHVsYXIgY29kZSBhcyBjYW4gbm93IGJlIGRvbmUgYnkgYnJ1dGUtZm9yY2UgZXhwYW5zaW9uLAorICBidXQgbm93LCBlbm91Z2ggb2YgdGhlbSBzZWVtIG5vdCB0by4KKworICBTb21lIGNvbXBpbGVycyBpc3N1ZSBhIGxvdCBvZiB3YXJuaW5ncyBhYm91dCBjb2RlIHRoYXQgaXMKKyAgZGVhZC91bnJlYWNoYWJsZSBvbmx5IG9uIHNvbWUgcGxhdGZvcm1zLCBhbmQgYWxzbyBhYm91dCBpbnRlbnRpb25hbAorICB1c2VzIG9mIG5lZ2F0aW9uIG9uIHVuc2lnbmVkIHR5cGVzLiBBbGwga25vd24gY2FzZXMgb2YgZWFjaCBjYW4gYmUKKyAgaWdub3JlZC4KKworICBGb3IgYSBsb25nZXIgYnV0IG91dCBvZiBkYXRlIGhpZ2gtbGV2ZWwgZGVzY3JpcHRpb24sIHNlZQorICAgICBodHRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvZGwvaHRtbC9tYWxsb2MuaHRtbAorCisqIE1TUEFDRVMKKyAgSWYgTVNQQUNFUyBpcyBkZWZpbmVkLCB0aGVuIGluIGFkZGl0aW9uIHRvIG1hbGxvYywgZnJlZSwgZXRjLiwKKyAgdGhpcyBmaWxlIGFsc28gZGVmaW5lcyBtc3BhY2VfbWFsbG9jLCBtc3BhY2VfZnJlZSwgZXRjLiBUaGVzZQorICBhcmUgdmVyc2lvbnMgb2YgbWFsbG9jIHJvdXRpbmVzIHRoYXQgdGFrZSBhbiAibXNwYWNlIiBhcmd1bWVudAorICBvYnRhaW5lZCB1c2luZyBjcmVhdGVfbXNwYWNlLCB0byBjb250cm9sIGFsbCBpbnRlcm5hbCBib29ra2VlcGluZy4KKyAgSWYgT05MWV9NU1BBQ0VTIGlzIGRlZmluZWQsIG9ubHkgdGhlc2UgdmVyc2lvbnMgYXJlIGNvbXBpbGVkLgorICBTbyBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgdGhpcyBhbGxvY2F0b3IgZm9yIG9ubHkgc29tZSBhbGxvY2F0aW9ucywKKyAgYW5kIHlvdXIgc3lzdGVtIG1hbGxvYyBmb3Igb3RoZXJzLCB5b3UgY2FuIGNvbXBpbGUgd2l0aAorICBPTkxZX01TUEFDRVMgYW5kIHRoZW4gZG8gc29tZXRoaW5nIGxpa2UuLi4KKyAgICBzdGF0aWMgbXNwYWNlIG15bXNwYWNlID0gY3JlYXRlX21zcGFjZSgwLDApOyAvLyBmb3IgZXhhbXBsZQorICAgICNkZWZpbmUgbXltYWxsb2MoYnl0ZXMpICBtc3BhY2VfbWFsbG9jKG15bXNwYWNlLCBieXRlcykKKworICAoTm90ZTogSWYgeW91IG9ubHkgbmVlZCBvbmUgaW5zdGFuY2Ugb2YgYW4gbXNwYWNlLCB5b3UgY2FuIGluc3RlYWQKKyAgdXNlICJVU0VfRExfUFJFRklYIiB0byByZWxhYmVsIHRoZSBnbG9iYWwgbWFsbG9jLikKKworICBZb3UgY2FuIHNpbWlsYXJseSBjcmVhdGUgdGhyZWFkLWxvY2FsIGFsbG9jYXRvcnMgYnkgc3RvcmluZworICBtc3BhY2VzIGFzIHRocmVhZC1sb2NhbHMuIEZvciBleGFtcGxlOgorICAgIHN0YXRpYyBfX3RocmVhZCBtc3BhY2UgdGxtcyA9IDA7CisgICAgdm9pZCogIHRsbWFsbG9jKHNpemVfdCBieXRlcykgeworICAgICAgaWYgKHRsbXMgPT0gMCkgdGxtcyA9IGNyZWF0ZV9tc3BhY2UoMCwgMCk7CisgICAgICByZXR1cm4gbXNwYWNlX21hbGxvYyh0bG1zLCBieXRlcyk7CisgICAgfQorICAgIHZvaWQgIHRsZnJlZSh2b2lkKiBtZW0pIHsgbXNwYWNlX2ZyZWUodGxtcywgbWVtKTsgfQorCisgIFVubGVzcyBGT09URVJTIGlzIGRlZmluZWQsIGVhY2ggbXNwYWNlIGlzIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQuCisgIFlvdSBjYW5ub3QgYWxsb2NhdGUgZnJvbSBvbmUgYW5kIGZyZWUgdG8gYW5vdGhlciAoYWx0aG91Z2gKKyAgY29uZm9ybWFuY2UgaXMgb25seSB3ZWFrbHkgY2hlY2tlZCwgc28gdXNhZ2UgZXJyb3JzIGFyZSBub3QgYWx3YXlzCisgIGNhdWdodCkuIElmIEZPT1RFUlMgaXMgZGVmaW5lZCwgdGhlbiBlYWNoIGNodW5rIGNhcnJpZXMgYXJvdW5kIGEgdGFnCisgIGluZGljYXRpbmcgaXRzIG9yaWdpbmF0aW5nIG1zcGFjZSwgYW5kIGZyZWVzIGFyZSBkaXJlY3RlZCB0byB0aGVpcgorICBvcmlnaW5hdGluZyBzcGFjZXMuCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDb21waWxlLXRpbWUgb3B0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmUgY2FyZWZ1bCBpbiBzZXR0aW5nICNkZWZpbmUgdmFsdWVzIGZvciBudW1lcmljYWwgY29uc3RhbnRzIG9mIHR5cGUKK3NpemVfdC4gT24gc29tZSBzeXN0ZW1zLCBsaXRlcmFsIHZhbHVlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQKK3RvIHNpemVfdCBwcmVjaXNpb24gdW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgY2FzdGVkLiBZb3UgY2FuIGFsc28KK3VzZSB0aGUgc3ltYm9saWMgdmFsdWVzIE1BWF9TSVpFX1QsIFNJWkVfVF9PTkUsIGV0YyBiZWxvdy4KKworV0lOMzIgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgaWYgX1dJTjMyIGRlZmluZWQKKyAgRGVmaW5pbmcgV0lOMzIgc2V0cyB1cCBkZWZhdWx0cyBmb3IgTVMgZW52aXJvbm1lbnQgYW5kIGNvbXBpbGVycy4KKyAgT3RoZXJ3aXNlIGRlZmF1bHRzIGFyZSBmb3IgdW5peC4gQmV3YXJlIHRoYXQgdGhlcmUgc2VlbSB0byBiZSBzb21lCisgIGNhc2VzIHdoZXJlIHRoaXMgbWFsbG9jIG1pZ2h0IG5vdCBiZSBhIHB1cmUgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IKKyAgV2luMzIgbWFsbG9jOiBSYW5kb20tbG9va2luZyBmYWlsdXJlcyBmcm9tIFdpbjMyIEdESSBBUEkncyAoZWc7CisgIFNldERJQml0cygpKSBtYXkgYmUgZHVlIHRvIGJ1Z3MgaW4gc29tZSB2aWRlbyBkcml2ZXIgaW1wbGVtZW50YXRpb25zCisgIHdoZW4gcGl4ZWwgYnVmZmVycyBhcmUgbWFsbG9jKCllZCwgYW5kIHRoZSByZWdpb24gc3BhbnMgbW9yZSB0aGFuCisgIG9uZSBWaXJ0dWFsQWxsb2MoKWVkIHJlZ2lvbi4gQmVjYXVzZSBkbG1hbGxvYyB1c2VzIGEgc21hbGwgKDY0S2IpCisgIGRlZmF1bHQgZ3JhbnVsYXJpdHksIHBpeGVsIGJ1ZmZlcnMgbWF5IHN0cmFkZGxlIHZpcnR1YWwgYWxsb2NhdGlvbgorICByZWdpb25zIG1vcmUgb2Z0ZW4gdGhhbiB3aGVuIHVzaW5nIHRoZSBNaWNyb3NvZnQgYWxsb2NhdG9yLiAgWW91IGNhbgorICBhdm9pZCB0aGlzIGJ5IHVzaW5nIFZpcnR1YWxBbGxvYygpIGFuZCBWaXJ0dWFsRnJlZSgpIGZvciBhbGwgcGl4ZWwKKyAgYnVmZmVycyByYXRoZXIgdGhhbiB1c2luZyBtYWxsb2MoKS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLAorICByZWNvbXBpbGUgdGhpcyBtYWxsb2Mgd2l0aCBhIGxhcmdlciBERUZBVUxUX0dSQU5VTEFSSVRZLgorCitNQUxMT0NfQUxJR05NRU5UICAgICAgICAgZGVmYXVsdDogKHNpemVfdCk4CisgIENvbnRyb2xzIHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgbWFsbG9jJ2VkIGNodW5rcy4gIEl0IG11c3QgYmUgYQorICBwb3dlciBvZiB0d28gYW5kIGF0IGxlYXN0IDgsIGV2ZW4gb24gbWFjaGluZXMgZm9yIHdoaWNoIHNtYWxsZXIKKyAgYWxpZ25tZW50cyB3b3VsZCBzdWZmaWNlLiBJdCBtYXkgYmUgZGVmaW5lZCBhcyBsYXJnZXIgdGhhbiB0aGlzCisgIHRob3VnaC4gTm90ZSBob3dldmVyIHRoYXQgY29kZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBvcHRpbWl6ZWQgZm9yCisgIHRoZSBjYXNlIG9mIDgtYnl0ZSBhbGlnbm1lbnQuCisKK01TUEFDRVMgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgSWYgdHJ1ZSwgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudCBhbGxvY2F0aW9uIHNwYWNlcy4KKyAgVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBpZiBIQVZFX01NQVAgaXMgdHJ1ZS4KKworT05MWV9NU1BBQ0VTICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQorICBJZiB0cnVlLCBvbmx5IGNvbXBpbGUgaW4gbXNwYWNlIHZlcnNpb25zLCBub3QgcmVndWxhciB2ZXJzaW9ucy4KKworVVNFX0xPQ0tTICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQorICBDYXVzZXMgZWFjaCBjYWxsIHRvIGVhY2ggcHVibGljIHJvdXRpbmUgdG8gYmUgc3Vycm91bmRlZCB3aXRoCisgIHB0aHJlYWQgb3IgV0lOMzIgbXV0ZXggbG9jay91bmxvY2suIChJZiBzZXQgdHJ1ZSwgdGhpcyBjYW4gYmUKKyAgb3ZlcnJpZGRlbiBvbiBhIHBlci1tc3BhY2UgYmFzaXMgZm9yIG1zcGFjZSB2ZXJzaW9ucy4pIElmIHNldCB0byBhCisgIG5vbi16ZXJvIHZhbHVlIG90aGVyIHRoYW4gMSwgbG9ja3MgYXJlIHVzZWQsIGJ1dCB0aGVpcgorICBpbXBsZW1lbnRhdGlvbiBpcyBsZWZ0IG91dCwgc28gbG9jayBmdW5jdGlvbnMgbXVzdCBiZSBzdXBwbGllZCBtYW51YWxseS4KKworVVNFX1NQSU5fTE9DS1MgICAgICAgICAgIGRlZmF1bHQ6IDEgaWZmIFVTRV9MT0NLUyBhbmQgb24geDg2IHVzaW5nIGdjYyBvciBNU0MKKyAgSWYgdHJ1ZSwgdXNlcyBjdXN0b20gc3BpbiBsb2NrcyBmb3IgbG9ja2luZy4gVGhpcyBpcyBjdXJyZW50bHkKKyAgc3VwcG9ydGVkIG9ubHkgZm9yIHg4NiBwbGF0Zm9ybXMgdXNpbmcgZ2NjIG9yIHJlY2VudCBNUyBjb21waWxlcnMuCisgIE90aGVyd2lzZSwgcG9zaXggbG9ja3Mgb3Igd2luMzIgY3JpdGljYWwgc2VjdGlvbnMgYXJlIHVzZWQuCisKK0ZPT1RFUlMgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIHRydWUsIHByb3ZpZGUgZXh0cmEgY2hlY2tpbmcgYW5kIGRpc3BhdGNoaW5nIGJ5IHBsYWNpbmcKKyAgaW5mb3JtYXRpb24gaW4gdGhlIGZvb3RlcnMgb2YgYWxsb2NhdGVkIGNodW5rcy4gVGhpcyBhZGRzCisgIHNwYWNlIGFuZCB0aW1lIG92ZXJoZWFkLgorCitJTlNFQ1VSRSAgICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiB0cnVlLCBvbWl0IGNoZWNrcyBmb3IgdXNhZ2UgZXJyb3JzIGFuZCBoZWFwIHNwYWNlIG92ZXJ3cml0ZXMuCisKK1VTRV9ETF9QUkVGSVggICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBDYXVzZXMgY29tcGlsZXIgdG8gcHJlZml4IGFsbCBwdWJsaWMgcm91dGluZXMgd2l0aCB0aGUgc3RyaW5nICdkbCcuCisgIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgbWFsbG9jIGluIG9uZSBwYXJ0CisgIG9mIGEgcHJvZ3JhbSwgdXNpbmcgeW91ciByZWd1bGFyIHN5c3RlbSBtYWxsb2MgZWxzZXdoZXJlLgorCitBQk9SVCAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBhcyBhYm9ydCgpCisgIERlZmluZXMgaG93IHRvIGFib3J0IG9uIGZhaWxlZCBjaGVja3MuICBPbiBtb3N0IHN5c3RlbXMsIGEgZmFpbGVkCisgIGNoZWNrIGNhbm5vdCBkaWUgd2l0aCBhbiAiYXNzZXJ0IiBvciBldmVuIHByaW50IGFuIGluZm9ybWF0aXZlCisgIG1lc3NhZ2UsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgcHJpbnQgcm91dGluZXMgaW4gdHVybiBjYWxsIG1hbGxvYywKKyAgd2hpY2ggd2lsbCBmYWlsIGFnYWluLiAgR2VuZXJhbGx5LCB0aGUgYmVzdCBwb2xpY3kgaXMgdG8gc2ltcGx5IGNhbGwKKyAgYWJvcnQoKS4gSXQncyBub3QgdmVyeSB1c2VmdWwgdG8gZG8gbW9yZSB0aGFuIHRoaXMgYmVjYXVzZSBtYW55CisgIGVycm9ycyBkdWUgdG8gb3ZlcndyaXRpbmcgd2lsbCBzaG93IHVwIGFzIGFkZHJlc3MgZmF1bHRzIChudWxsLCBvZGQKKyAgYWRkcmVzc2VzIGV0YykgcmF0aGVyIHRoYW4gbWFsbG9jLXRyaWdnZXJlZCBjaGVja3MsIHNvIHdpbGwgYWxzbworICBhYm9ydC4gIEFsc28sIG1vc3QgY29tcGlsZXJzIGtub3cgdGhhdCBhYm9ydCgpIGRvZXMgbm90IHJldHVybiwgc28KKyAgY2FuIGJldHRlciBvcHRpbWl6ZSBjb2RlIGNvbmRpdGlvbmFsbHkgY2FsbGluZyBpdC4KKworUFJPQ0VFRF9PTl9FUlJPUiAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBhcyAwIChmYWxzZSkKKyAgQ29udHJvbHMgd2hldGhlciBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzIGNhdXNlIHRoZW0gdG8gYnlwYXNzZWQKKyAgcmF0aGVyIHRoYW4gYWJvcnRpbmcuIElmIHNldCwgZGV0ZWN0ZWQgYmFkIGFyZ3VtZW50cyB0byBmcmVlIGFuZAorICByZWFsbG9jIGFyZSBpZ25vcmVkLiBBbmQgYWxsIGJvb2trZWVwaW5nIGluZm9ybWF0aW9uIGlzIHplcm9lZCBvdXQKKyAgdXBvbiBhIGRldGVjdGVkIG92ZXJ3cml0ZSBvZiBmcmVlZCBoZWFwIHNwYWNlLCB0aHVzIGxvc2luZyB0aGUKKyAgYWJpbGl0eSB0byBldmVyIHJldHVybiBpdCBmcm9tIG1hbGxvYyBhZ2FpbiwgYnV0IGVuYWJsaW5nIHRoZQorICBhcHBsaWNhdGlvbiB0byBwcm9jZWVkLiBJZiBQUk9DRUVEX09OX0VSUk9SIGlzIGRlZmluZWQsIHRoZQorICBzdGF0aWMgdmFyaWFibGUgbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQgaXMgY29tcGlsZWQgaW4KKyAgYW5kIGNhbiBiZSBleGFtaW5lZCB0byBzZWUgaWYgZXJyb3JzIGhhdmUgb2NjdXJyZWQuIFRoaXMgb3B0aW9uCisgIGdlbmVyYXRlcyBzbG93ZXIgY29kZSB0aGFuIHRoZSBkZWZhdWx0IGFib3J0IHBvbGljeS4KKworREVCVUcgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIFRoZSBERUJVRyBzZXR0aW5nIGlzIG1haW5seSBpbnRlbmRlZCBmb3IgcGVvcGxlIHRyeWluZyB0byBtb2RpZnkKKyAgdGhpcyBjb2RlIG9yIGRpYWdub3NlIHByb2JsZW1zIHdoZW4gcG9ydGluZyB0byBuZXcgcGxhdGZvcm1zLgorICBIb3dldmVyLCBpdCBtYXkgYWxzbyBiZSBhYmxlIHRvIGJldHRlciBpc29sYXRlIHVzZXIgZXJyb3JzIHRoYW4ganVzdAorICB1c2luZyBydW50aW1lIGNoZWNrcy4gIFRoZSBhc3NlcnRpb25zIGluIHRoZSBjaGVjayByb3V0aW5lcyBzcGVsbAorICBvdXQgaW4gbW9yZSBkZXRhaWwgdGhlIGFzc3VtcHRpb25zIGFuZCBpbnZhcmlhbnRzIHVuZGVybHlpbmcgdGhlCisgIGFsZ29yaXRobXMuICBUaGUgY2hlY2tpbmcgaXMgZmFpcmx5IGV4dGVuc2l2ZSwgYW5kIHdpbGwgc2xvdyBkb3duCisgIGV4ZWN1dGlvbiBub3RpY2VhYmx5LiBDYWxsaW5nIG1hbGxvY19zdGF0cyBvciBtYWxsaW5mbyB3aXRoIERFQlVHCisgIHNldCB3aWxsIGF0dGVtcHQgdG8gY2hlY2sgZXZlcnkgbm9uLW1tYXBwZWQgYWxsb2NhdGVkIGFuZCBmcmVlIGNodW5rCisgIGluIHRoZSBjb3Vyc2Ugb2YgY29tcHV0aW5nIHRoZSBzdW1tYXJpZXMuCisKK0FCT1JUX09OX0FTU0VSVF9GQUlMVVJFICAgZGVmYXVsdDogZGVmaW5lZCBhcyAxICh0cnVlKQorICBEZWJ1Z2dpbmcgYXNzZXJ0aW9uIGZhaWx1cmVzIGNhbiBiZSBuZWFybHkgaW1wb3NzaWJsZSBpZiB5b3VyCisgIHZlcnNpb24gb2YgdGhlIGFzc2VydCBtYWNybyBjYXVzZXMgbWFsbG9jIHRvIGJlIGNhbGxlZCwgd2hpY2ggd2lsbAorICBsZWFkIHRvIGEgY2FzY2FkZSBvZiBmdXJ0aGVyIGZhaWx1cmVzLCBibG93aW5nIHRoZSBydW50aW1lIHN0YWNrLgorICBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSBjYXVzZSBhc3NlcnRpb25zIGZhaWx1cmVzIHRvIGNhbGwgYWJvcnQoKSwKKyAgd2hpY2ggd2lsbCB1c3VhbGx5IG1ha2UgZGVidWdnaW5nIGVhc2llci4KKworTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICAgICBkZWZhdWx0OiBzZXRzIGVycm5vIHRvIEVOT01FTSwgb3Igbm8tb3Agb24gd2luMzIKKyAgVGhlIGFjdGlvbiB0byB0YWtlIGJlZm9yZSAicmV0dXJuIDAiIHdoZW4gbWFsbG9jIGZhaWxzIHRvIGJlIGFibGUgdG8KKyAgcmV0dXJuIG1lbW9yeSBiZWNhdXNlIHRoZXJlIGlzIG5vbmUgYXZhaWxhYmxlLgorCitIQVZFX01PUkVDT1JFICAgICAgICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpIHVubGVzcyB3aW4zMiBvciBPTkxZX01TUEFDRVMKKyAgVHJ1ZSBpZiB0aGlzIHN5c3RlbSBzdXBwb3J0cyBzYnJrIG9yIGFuIGVtdWxhdGlvbiBvZiBpdC4KKworTU9SRUNPUkUgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBzYnJrCisgIFRoZSBuYW1lIG9mIHRoZSBzYnJrLXN0eWxlIHN5c3RlbSByb3V0aW5lIHRvIGNhbGwgdG8gb2J0YWluIG1vcmUKKyAgbWVtb3J5LiAgU2VlIGJlbG93IGZvciBndWlkYW5jZSBvbiB3cml0aW5nIGN1c3RvbSBNT1JFQ09SRQorICBmdW5jdGlvbnMuIFRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudCB0byBzYnJrL01PUkVDT1JFIHZhcmllcyBhY3Jvc3MKKyAgc3lzdGVtcy4gIEl0IGNhbm5vdCBiZSBzaXplX3QsIGJlY2F1c2UgaXQgc3VwcG9ydHMgbmVnYXRpdmUKKyAgYXJndW1lbnRzLCBzbyBpdCBpcyBub3JtYWxseSB0aGUgc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMKKyAgc2l6ZV90IChzb21ldGltZXMgZGVjbGFyZWQgYXMgImludHB0cl90IikuICBJdCBkb2Vzbid0IG11Y2ggbWF0dGVyCisgIHRob3VnaC4gSW50ZXJuYWxseSwgd2Ugb25seSBjYWxsIGl0IHdpdGggYXJndW1lbnRzIGxlc3MgdGhhbiBoYWxmCisgIHRoZSBtYXggdmFsdWUgb2YgYSBzaXplX3QsIHdoaWNoIHNob3VsZCB3b3JrIGFjcm9zcyBhbGwgcmVhc29uYWJsZQorICBwb3NzaWJpbGl0aWVzLCBhbHRob3VnaCBzb21ldGltZXMgZ2VuZXJhdGluZyBjb21waWxlciB3YXJuaW5ncy4KKworTU9SRUNPUkVfQ09OVElHVU9VUyAgICAgICBkZWZhdWx0OiAxICh0cnVlKSBpZiBIQVZFX01PUkVDT1JFCisgIElmIHRydWUsIHRha2UgYWR2YW50YWdlIG9mIGZhY3QgdGhhdCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRQorICB3aXRoIHBvc2l0aXZlIGFyZ3VtZW50cyBhbHdheXMgcmV0dXJuIGNvbnRpZ3VvdXMgaW5jcmVhc2luZworICBhZGRyZXNzZXMuICBUaGlzIGlzIHRydWUgb2YgdW5peCBzYnJrLiBJdCBkb2VzIG5vdCBodXJ0IHRvbyBtdWNoIHRvCisgIHNldCBpdCB0cnVlIGFueXdheSwgc2luY2UgbWFsbG9jIGNvcGVzIHdpdGggbm9uLWNvbnRpZ3VpdGllcy4KKyAgU2V0dGluZyBpdCBmYWxzZSB3aGVuIGRlZmluaXRlbHkgbm9uLWNvbnRpZ3VvdXMgc2F2ZXMgdGltZQorICBhbmQgcG9zc2libHkgd2FzdGVkIHNwYWNlIGl0IHdvdWxkIHRha2UgdG8gZGlzY292ZXIgdGhpcyB0aG91Z2guCisKK01PUkVDT1JFX0NBTk5PVF9UUklNICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgVHJ1ZSBpZiBNT1JFQ09SRSBjYW5ub3QgcmVsZWFzZSBzcGFjZSBiYWNrIHRvIHRoZSBzeXN0ZW0gd2hlbiBnaXZlbgorICBuZWdhdGl2ZSBhcmd1bWVudHMuIFRoaXMgaXMgZ2VuZXJhbGx5IG5lY2Vzc2FyeSBvbmx5IGlmIHlvdSBhcmUKKyAgdXNpbmcgYSBoYW5kLWNyYWZ0ZWQgTU9SRUNPUkUgZnVuY3Rpb24gdGhhdCBjYW5ub3QgaGFuZGxlIG5lZ2F0aXZlCisgIGFyZ3VtZW50cy4KKworTk9fU0VHTUVOVF9UUkFWRVJTQUwgICAgICAgZGVmYXVsdDogMAorICBJZiBub24temVybywgc3VwcHJlc3NlcyB0cmF2ZXJzYWxzIG9mIG1lbW9yeSBzZWdtZW50cworICByZXR1cm5lZCBieSBlaXRoZXIgTU9SRUNPUkUgb3IgQ0FMTF9NTUFQLiBUaGlzIGRpc2FibGVzCisgIG1lcmdpbmcgb2Ygc2VnbWVudHMgdGhhdCBhcmUgY29udGlndW91cywgYW5kIHNlbGVjdGl2ZWx5CisgIHJlbGVhc2luZyB0aGVtIHRvIHRoZSBPUyBpZiB1bnVzZWQsIGJ1dCBib3VuZHMgZXhlY3V0aW9uIHRpbWVzLgorCitIQVZFX01NQVAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpCisgIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgbW1hcCBvciBhbiBlbXVsYXRpb24gb2YgaXQuICBJZiBzbywgYW5kCisgIEhBVkVfTU9SRUNPUkUgaXMgbm90IHRydWUsIE1NQVAgaXMgdXNlZCBmb3IgYWxsIHN5c3RlbQorICBhbGxvY2F0aW9uLiBJZiBzZXQgYW5kIEhBVkVfTU9SRUNPUkUgaXMgdHJ1ZSBhcyB3ZWxsLCBNTUFQIGlzCisgIHByaW1hcmlseSB1c2VkIHRvIGRpcmVjdGx5IGFsbG9jYXRlIHZlcnkgbGFyZ2UgYmxvY2tzLiBJdCBpcyBhbHNvCisgIHVzZWQgYXMgYSBiYWNrdXAgc3RyYXRlZ3kgaW4gY2FzZXMgd2hlcmUgTU9SRUNPUkUgZmFpbHMgdG8gcHJvdmlkZQorICBzcGFjZSBmcm9tIHN5c3RlbS4gTm90ZTogQSBzaW5nbGUgY2FsbCB0byBNVU5NQVAgaXMgYXNzdW1lZCB0byBiZQorICBhYmxlIHRvIHVubWFwIG1lbW9yeSB0aGF0IG1heSBoYXZlIGJlIGFsbG9jYXRlZCB1c2luZyBtdWx0aXBsZSBjYWxscworICB0byBNTUFQLCBzbyBsb25nIGFzIHRoZXkgYXJlIGFkamFjZW50LgorCitIQVZFX01SRU1BUCAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgb24gbGludXgsIGVsc2UgMAorICBJZiB0cnVlIHJlYWxsb2MoKSB1c2VzIG1yZW1hcCgpIHRvIHJlLWFsbG9jYXRlIGxhcmdlIGJsb2NrcyBhbmQKKyAgZXh0ZW5kIG9yIHNocmluayBhbGxvY2F0aW9uIHNwYWNlcy4KKworTU1BUF9DTEVBUlMgICAgICAgICAgICAgICBkZWZhdWx0OiAxIGV4Y2VwdCBvbiBXSU5DRS4KKyAgVHJ1ZSBpZiBtbWFwIGNsZWFycyBtZW1vcnkgc28gY2FsbG9jIGRvZXNuJ3QgbmVlZCB0by4gVGhpcyBpcyB0cnVlCisgIGZvciBzdGFuZGFyZCB1bml4IG1tYXAgdXNpbmcgL2Rldi96ZXJvIGFuZCBvbiBXSU4zMiBleGNlcHQgZm9yIFdJTkNFLgorCitVU0VfQlVJTFRJTl9GRlMgICAgICAgICAgICBkZWZhdWx0OiAwIChpLmUuLCBub3QgdXNlZCkKKyAgQ2F1c2VzIG1hbGxvYyB0byB1c2UgdGhlIGJ1aWx0aW4gZmZzKCkgZnVuY3Rpb24gdG8gY29tcHV0ZSBpbmRpY2VzLgorICBTb21lIGNvbXBpbGVycyBtYXkgcmVjb2duaXplIGFuZCBpbnRyaW5zaWZ5IGZmcyB0byBiZSBmYXN0ZXIgdGhhbiB0aGUKKyAgc3VwcGxpZWQgQyB2ZXJzaW9uLiBBbHNvLCB0aGUgY2FzZSBvZiB4ODYgdXNpbmcgZ2NjIGlzIHNwZWNpYWwtY2FzZWQKKyAgdG8gYW4gYXNtIGluc3RydWN0aW9uLCBzbyBpcyBhbHJlYWR5IGFzIGZhc3QgYXMgaXQgY2FuIGJlLCBhbmQgc28KKyAgdGhpcyBzZXR0aW5nIGhhcyBubyBlZmZlY3QuIFNpbWlsYXJseSBmb3IgV2luMzIgdW5kZXIgcmVjZW50IE1TIGNvbXBpbGVycy4KKyAgKE9uIG1vc3QgeDg2cywgdGhlIGFzbSB2ZXJzaW9uIGlzIG9ubHkgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gdGhlIEMgdmVyc2lvbi4pCisKK21hbGxvY19nZXRwYWdlc2l6ZSAgICAgICAgIGRlZmF1bHQ6IGRlcml2ZSBmcm9tIHN5c3RlbSBpbmNsdWRlcywgb3IgNDA5Ni4KKyAgVGhlIHN5c3RlbSBwYWdlIHNpemUuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoaXMgbWFsbG9jIG1hbmFnZXMKKyAgbWVtb3J5IGZyb20gdGhlIHN5c3RlbSBpbiBwYWdlLXNpemUgdW5pdHMuICBUaGlzIG1heSBiZSAoYW5kCisgIHVzdWFsbHkgaXMpIGEgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYSBjb25zdGFudC4gVGhpcyBpcyBpZ25vcmVkCisgIGlmIFdJTjMyLCB3aGVyZSBwYWdlIHNpemUgaXMgZGV0ZXJtaW5lZCB1c2luZyBnZXRTeXN0ZW1JbmZvIGR1cmluZworICBpbml0aWFsaXphdGlvbi4KKworVVNFX0RFVl9SQU5ET00gICAgICAgICAgICAgZGVmYXVsdDogMCAoaS5lLiwgbm90IHVzZWQpCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIC9kZXYvcmFuZG9tIHRvIGluaXRpYWxpemUgc2VjdXJlIG1hZ2ljIHNlZWQgZm9yCisgIHN0YW1waW5nIGZvb3RlcnMuIE90aGVyd2lzZSwgdGhlIGN1cnJlbnQgdGltZSBpcyB1c2VkLgorCitOT19NQUxMSU5GTyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIGRlZmluZWQsIGRvbid0IGNvbXBpbGUgIm1hbGxpbmZvIi4gVGhpcyBjYW4gYmUgYSBzaW1wbGUgd2F5CisgIG9mIGRlYWxpbmcgd2l0aCBtaXNtYXRjaGVzIGJldHdlZW4gc3lzdGVtIGRlY2xhcmF0aW9ucyBhbmQKKyAgdGhvc2UgaW4gdGhpcyBmaWxlLgorCitNQUxMSU5GT19GSUVMRF9UWVBFICAgICAgICBkZWZhdWx0OiBzaXplX3QKKyAgVGhlIHR5cGUgb2YgdGhlIGZpZWxkcyBpbiB0aGUgbWFsbGluZm8gc3RydWN0LiBUaGlzIHdhcyBvcmlnaW5hbGx5CisgIGRlZmluZWQgYXMgImludCIgaW4gU1ZJRCBldGMsIGJ1dCBpcyBtb3JlIHVzZWZ1bGx5IGRlZmluZWQgYXMKKyAgc2l6ZV90LiBUaGUgdmFsdWUgaXMgdXNlZCBvbmx5IGlmICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIGlzIG5vdCBzZXQKKworUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICAgIGRlZmF1bHQ6IG5vdCBkZWZpbmVkCisgIFRoaXMgc2hvdWxkIGJlIHNldCBpZiBhIGNhbGwgdG8gcmVhbGxvYyB3aXRoIHplcm8gYnl0ZXMgc2hvdWxkCisgIGJlIHRoZSBzYW1lIGFzIGEgY2FsbCB0byBmcmVlLiBTb21lIHBlb3BsZSB0aGluayBpdCBzaG91bGQuIE90aGVyd2lzZSwKKyAgc2luY2UgdGhpcyBtYWxsb2MgcmV0dXJucyBhIHVuaXF1ZSBwb2ludGVyIGZvciBtYWxsb2MoMCksIHNvIGRvZXMKKyAgcmVhbGxvYyhwLCAwKS4KKworTEFDS1NfVU5JU1REX0gsIExBQ0tTX0ZDTlRMX0gsIExBQ0tTX1NZU19QQVJBTV9ILCBMQUNLU19TWVNfTU1BTl9ICitMQUNLU19TVFJJTkdTX0gsIExBQ0tTX1NUUklOR19ILCBMQUNLU19TWVNfVFlQRVNfSCwgIExBQ0tTX0VSUk5PX0gKK0xBQ0tTX1NURExJQl9IICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkIHVubGVzcyBvbiBXSU4zMgorICBEZWZpbmUgdGhlc2UgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGVzZSBoZWFkZXIgZmlsZXMuCisgIFlvdSBtaWdodCBuZWVkIHRvIG1hbnVhbGx5IGluc2VydCBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwcm92aWRlLgorCitERUZBVUxUX0dSQU5VTEFSSVRZICAgICAgICBkZWZhdWx0OiBwYWdlIHNpemUgaWYgTU9SRUNPUkVfQ09OVElHVU9VUywKKwkJCQlzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eSBpbiBXSU4zMiwKKwkJCQlvdGhlcndpc2UgNjRLLgorICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHgpCisgIFRoZSB1bml0IGZvciBhbGxvY2F0aW5nIGFuZCBkZWFsbG9jYXRpbmcgbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4gIE9uCisgIG1vc3Qgc3lzdGVtcyB3aXRoIGNvbnRpZ3VvdXMgTU9SRUNPUkUsIHRoZXJlIGlzIG5vIHJlYXNvbiB0bworICBtYWtlIHRoaXMgbW9yZSB0aGFuIGEgcGFnZS4gSG93ZXZlciwgc3lzdGVtcyB3aXRoIE1NQVAgdGVuZCB0bworICBlaXRoZXIgcmVxdWlyZSBvciBlbmNvdXJhZ2UgbGFyZ2VyIGdyYW51bGFyaXRpZXMuICBZb3UgY2FuIGluY3JlYXNlCisgIHRoaXMgdmFsdWUgdG8gcHJldmVudCBzeXN0ZW0gYWxsb2NhdGlvbiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHNvCisgIG9mdGVuLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIHNsb3cuICBUaGUgdmFsdWUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAgcGFnZSBhbmQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4gIFNldHRpbmcgdG8gMCBjYXVzZXMgaW5pdGlhbGl6YXRpb24KKyAgdG8gZWl0aGVyIHBhZ2Ugc2l6ZSBvciB3aW4zMiByZWdpb24gc2l6ZS4gIChOb3RlOiBJbiBwcmV2aW91cworICB2ZXJzaW9ucyBvZiBtYWxsb2MsIHRoZSBlcXVpdmFsZW50IG9mIHRoaXMgb3B0aW9uIHdhcyBjYWxsZWQKKyAgIlRPUF9QQUQiKQorCitERUZBVUxUX1RSSU1fVEhSRVNIT0xEICAgIGRlZmF1bHQ6IDJNQgorICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fVFJJTV9USFJFU0hPTEQsIHgpCisgIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB1bnVzZWQgdG9wLW1vc3QgbWVtb3J5IHRvIGtlZXAgYmVmb3JlCisgIHJlbGVhc2luZyB2aWEgbWFsbG9jX3RyaW0gaW4gZnJlZSgpLiAgQXV0b21hdGljIHRyaW1taW5nIGlzIG1haW5seQorICB1c2VmdWwgaW4gbG9uZy1saXZlZCBwcm9ncmFtcyB1c2luZyBjb250aWd1b3VzIE1PUkVDT1JFLiAgQmVjYXVzZQorICB0cmltbWluZyB2aWEgc2JyayBjYW4gYmUgc2xvdyBvbiBzb21lIHN5c3RlbXMsIGFuZCBjYW4gc29tZXRpbWVzIGJlCisgIHdhc3RlZnVsIChpbiBjYXNlcyB3aGVyZSBwcm9ncmFtcyBpbW1lZGlhdGVseSBhZnRlcndhcmQgYWxsb2NhdGUKKyAgbW9yZSBsYXJnZSBjaHVua3MpIHRoZSB2YWx1ZSBzaG91bGQgYmUgaGlnaCBlbm91Z2ggc28gdGhhdCB5b3VyCisgIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIHdvdWxkIGltcHJvdmUgYnkgcmVsZWFzaW5nIHRoaXMgbXVjaAorICBtZW1vcnkuICBBcyBhIHJvdWdoIGd1aWRlLCB5b3UgbWlnaHQgc2V0IHRvIGEgdmFsdWUgY2xvc2UgdG8gdGhlCisgIGF2ZXJhZ2Ugc2l6ZSBvZiBhIHByb2Nlc3MgKHByb2dyYW0pIHJ1bm5pbmcgb24geW91ciBzeXN0ZW0uCisgIFJlbGVhc2luZyB0aGlzIG11Y2ggbWVtb3J5IHdvdWxkIGFsbG93IHN1Y2ggYSBwcm9jZXNzIHRvIHJ1biBpbgorICBtZW1vcnkuICBHZW5lcmFsbHksIGl0IGlzIHdvcnRoIHR1bmluZyB0cmltIHRocmVzaG9sZHMgd2hlbiBhCisgIHByb2dyYW0gdW5kZXJnb2VzIHBoYXNlcyB3aGVyZSBzZXZlcmFsIGxhcmdlIGNodW5rcyBhcmUgYWxsb2NhdGVkCisgIGFuZCByZWxlYXNlZCBpbiB3YXlzIHRoYXQgY2FuIHJldXNlIGVhY2ggb3RoZXIncyBzdG9yYWdlLCBwZXJoYXBzCisgIG1peGVkIHdpdGggcGhhc2VzIHdoZXJlIHRoZXJlIGFyZSBubyBzdWNoIGNodW5rcyBhdCBhbGwuIFRoZSB0cmltCisgIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHBhZ2Ugc2l6ZSB0byBoYXZlIGFueSB1c2VmdWwgZWZmZWN0LiAgVG8KKyAgZGlzYWJsZSB0cmltbWluZyBjb21wbGV0ZWx5LCB5b3UgY2FuIHNldCB0byBNQVhfU0laRV9ULiBOb3RlIHRoYXQgdGhlIHRyaWNrCisgIHNvbWUgcGVvcGxlIHVzZSBvZiBtYWxsb2NpbmcgYSBodWdlIHNwYWNlIGFuZCB0aGVuIGZyZWVpbmcgaXQgYXQKKyAgcHJvZ3JhbSBzdGFydHVwLCBpbiBhbiBhdHRlbXB0IHRvIHJlc2VydmUgc3lzdGVtIG1lbW9yeSwgZG9lc24ndAorICBoYXZlIHRoZSBpbnRlbmRlZCBlZmZlY3QgdW5kZXIgYXV0b21hdGljIHRyaW1taW5nLCBzaW5jZSB0aGF0IG1lbW9yeQorICB3aWxsIGltbWVkaWF0ZWx5IGJlIHJldHVybmVkIHRvIHRoZSBzeXN0ZW0uCisKK0RFRkFVTFRfTU1BUF9USFJFU0hPTEQgICAgICAgZGVmYXVsdDogMjU2SworICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fTU1BUF9USFJFU0hPTEQsIHgpCisgIFRoZSByZXF1ZXN0IHNpemUgdGhyZXNob2xkIGZvciB1c2luZyBNTUFQIHRvIGRpcmVjdGx5IHNlcnZpY2UgYQorICByZXF1ZXN0LiBSZXF1ZXN0cyBvZiBhdCBsZWFzdCB0aGlzIHNpemUgdGhhdCBjYW5ub3QgYmUgYWxsb2NhdGVkCisgIHVzaW5nIGFscmVhZHktZXhpc3Rpbmcgc3BhY2Ugd2lsbCBiZSBzZXJ2aWNlZCB2aWEgbW1hcC4gIChJZiBlbm91Z2gKKyAgbm9ybWFsIGZyZWVkIHNwYWNlIGFscmVhZHkgZXhpc3RzIGl0IGlzIHVzZWQgaW5zdGVhZC4pICBVc2luZyBtbWFwCisgIHNlZ3JlZ2F0ZXMgcmVsYXRpdmVseSBsYXJnZSBjaHVua3Mgb2YgbWVtb3J5IHNvIHRoYXQgdGhleSBjYW4gYmUKKyAgaW5kaXZpZHVhbGx5IG9idGFpbmVkIGFuZCByZWxlYXNlZCBmcm9tIHRoZSBob3N0IHN5c3RlbS4gQSByZXF1ZXN0CisgIHNlcnZpY2VkIHRocm91Z2ggbW1hcCBpcyBuZXZlciByZXVzZWQgYnkgYW55IG90aGVyIHJlcXVlc3QgKGF0IGxlYXN0CisgIG5vdCBkaXJlY3RseTsgdGhlIHN5c3RlbSBtYXkganVzdCBzbyBoYXBwZW4gdG8gcmVtYXAgc3VjY2Vzc2l2ZQorICByZXF1ZXN0cyB0byB0aGUgc2FtZSBsb2NhdGlvbnMpLiAgU2VncmVnYXRpbmcgc3BhY2UgaW4gdGhpcyB3YXkgaGFzCisgIHRoZSBiZW5lZml0cyB0aGF0OiBNbWFwcGVkIHNwYWNlIGNhbiBhbHdheXMgYmUgaW5kaXZpZHVhbGx5IHJlbGVhc2VkCisgIGJhY2sgdG8gdGhlIHN5c3RlbSwgd2hpY2ggaGVscHMga2VlcCB0aGUgc3lzdGVtIGxldmVsIG1lbW9yeSBkZW1hbmRzCisgIG9mIGEgbG9uZy1saXZlZCBwcm9ncmFtIGxvdy4gIEFsc28sIG1hcHBlZCBtZW1vcnkgZG9lc24ndCBiZWNvbWUKKyAgYGxvY2tlZCcgYmV0d2VlbiBvdGhlciBjaHVua3MsIGFzIGNhbiBoYXBwZW4gd2l0aCBub3JtYWxseSBhbGxvY2F0ZWQKKyAgY2h1bmtzLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gdHJpbW1pbmcgdmlhIG1hbGxvY190cmltIHdvdWxkIG5vdAorICByZWxlYXNlIHRoZW0uICBIb3dldmVyLCBpdCBoYXMgdGhlIGRpc2FkdmFudGFnZSB0aGF0IHRoZSBzcGFjZQorICBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuIHVzZWQgdG8gc2VydmljZSBsYXRlcgorICByZXF1ZXN0cywgYXMgaGFwcGVucyB3aXRoIG5vcm1hbCBjaHVua3MuICBUaGUgYWR2YW50YWdlcyBvZiBtbWFwCisgIG5lYXJseSBhbHdheXMgb3V0d2VpZ2ggZGlzYWR2YW50YWdlcyBmb3IgImxhcmdlIiBjaHVua3MsIGJ1dCB0aGUKKyAgdmFsdWUgb2YgImxhcmdlIiBtYXkgdmFyeSBhY3Jvc3Mgc3lzdGVtcy4gIFRoZSBkZWZhdWx0IGlzIGFuCisgIGVtcGlyaWNhbGx5IGRlcml2ZWQgdmFsdWUgdGhhdCB3b3JrcyB3ZWxsIGluIG1vc3Qgc3lzdGVtcy4gWW91IGNhbgorICBkaXNhYmxlIG1tYXAgYnkgc2V0dGluZyB0byBNQVhfU0laRV9ULgorCitNQVhfUkVMRUFTRV9DSEVDS19SQVRFICAgZGVmYXVsdDogNDA5NSB1bmxlc3Mgbm90IEhBVkVfTU1BUAorICBUaGUgbnVtYmVyIG9mIGNvbnNvbGlkYXRlZCBmcmVlcyBiZXR3ZWVuIGNoZWNrcyB0byByZWxlYXNlCisgIHVudXNlZCBzZWdtZW50cyB3aGVuIGZyZWVpbmcuIFdoZW4gdXNpbmcgbm9uLWNvbnRpZ3VvdXMgc2VnbWVudHMsCisgIGVzcGVjaWFsbHkgd2l0aCBtdWx0aXBsZSBtc3BhY2VzLCBjaGVja2luZyBvbmx5IGZvciB0b3Btb3N0IHNwYWNlCisgIGRvZXNuJ3QgYWx3YXlzIHN1ZmZpY2UgdG8gdHJpZ2dlciB0cmltbWluZy4gVG8gY29tcGVuc2F0ZSBmb3IgdGhpcywKKyAgZnJlZSgpIHdpbGwsIHdpdGggYSBwZXJpb2Qgb2YgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAob3IgdGhlCisgIGN1cnJlbnQgbnVtYmVyIG9mIHNlZ21lbnRzLCBpZiBncmVhdGVyKSB0cnkgdG8gcmVsZWFzZSB1bnVzZWQKKyAgc2VnbWVudHMgdG8gdGhlIE9TIHdoZW4gZnJlZWluZyBjaHVua3MgdGhhdCByZXN1bHQgaW4KKyAgY29uc29saWRhdGlvbi4gVGhlIGJlc3QgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIGEgY29tcHJvbWlzZQorICBiZXR3ZWVuIHNsb3dpbmcgZG93biBmcmVlcyB3aXRoIHJlbGF0aXZlbHkgY29zdGx5IGNoZWNrcyB0aGF0CisgIHJhcmVseSB0cmlnZ2VyIHZlcnN1cyBob2xkaW5nIG9uIHRvIHVudXNlZCBtZW1vcnkuIFRvIGVmZmVjdGl2ZWx5CisgIGRpc2FibGUsIHNldCB0byBNQVhfU0laRV9ULiBUaGlzIG1heSBsZWFkIHRvIGEgdmVyeSBzbGlnaHQgc3BlZWQKKyAgaW1wcm92ZW1lbnQgYXQgdGhlIGV4cGVuc2Ugb2YgY2FycnlpbmcgYXJvdW5kIG1vcmUgbWVtb3J5LgorKi8KKworLyogVmVyc2lvbiBpZGVudGlmaWVyIHRvIGFsbG93IHBlb3BsZSB0byBzdXBwb3J0IG11bHRpcGxlIHZlcnNpb25zICovCisjaWZuZGVmIERMTUFMTE9DX1ZFUlNJT04KKyNkZWZpbmUgRExNQUxMT0NfVkVSU0lPTiAyMDgwNAorI2VuZGlmIC8qIERMTUFMTE9DX1ZFUlNJT04gKi8KKworI2lmbmRlZiBXSU4zMgorI2lmZGVmIF9XSU4zMgorI2RlZmluZSBXSU4zMiAxCisjZW5kaWYgIC8qIF9XSU4zMiAqLworI2lmZGVmIF9XSU4zMl9XQ0UKKyNkZWZpbmUgTEFDS1NfRkNOVExfSAorI2RlZmluZSBXSU4zMiAxCisjZW5kaWYgLyogX1dJTjMyX1dDRSAqLworI2VuZGlmICAvKiBXSU4zMiAqLworI2lmZGVmIFdJTjMyCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4NDAzCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2RlZmluZSBIQVZFX01NQVAgMQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgTEFDS1NfVU5JU1REX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1BBUkFNX0gKKyNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAorI2RlZmluZSBMQUNLU19TVFJJTkdfSAorI2RlZmluZSBMQUNLU19TVFJJTkdTX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1RZUEVTX0gKKyNkZWZpbmUgTEFDS1NfRVJSTk9fSAorI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZW5kaWYgLyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjaWZkZWYgX1dJTjMyX1dDRSAvKiBXSU5DRSByZXBvcnRlZGx5IGRvZXMgbm90IGNsZWFyICovCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDAKKyNlbHNlCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDEKKyNlbmRpZiAvKiBfV0lOMzJfV0NFICovCisjZW5kaWYgIC8qIFdJTjMyICovCisKKyNpZiBkZWZpbmVkKERBUldJTikgfHwgZGVmaW5lZChfREFSV0lOKQorLyogTWFjIE9TWCBkb2NzIGFkdmlzZSBub3QgdG8gdXNlIHNicms7IGl0IHNlZW1zIGJldHRlciB0byB1c2UgbW1hcCAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2RlZmluZSBIQVZFX01NQVAgMQorLyogT1NYIGFsbG9jYXRvcnMgcHJvdmlkZSAxNiBieXRlIGFsaWdubWVudCAqLworI2lmbmRlZiBNQUxMT0NfQUxJR05NRU5UCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpMTZVKQorI2VuZGlmCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNlbmRpZiAgLyogREFSV0lOICovCisKKyNpZm5kZWYgTEFDS1NfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gIC8qIEZvciBzaXplX3QgKi8KKyNlbmRpZiAgLyogTEFDS1NfU1lTX1RZUEVTX0ggKi8KKworLyogVGhlIG1heGltdW0gcG9zc2libGUgc2l6ZV90IHZhbHVlIGhhcyBhbGwgYml0cyBzZXQgKi8KKyNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCisKKyNpZm5kZWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAwICAgICAvKiBkZWZpbmUgdG8gYSB2YWx1ZSAqLworI2Vsc2UKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDEKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjaWZuZGVmIE1TUEFDRVMKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgTVNQQUNFUyAxCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBNU1BBQ0VTIDAKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIE1TUEFDRVMgKi8KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UICgoc2l6ZV90KThVKQorI2VuZGlmICAvKiBNQUxMT0NfQUxJR05NRU5UICovCisjaWZuZGVmIEZPT1RFUlMKKyNkZWZpbmUgRk9PVEVSUyAwCisjZW5kaWYgIC8qIEZPT1RFUlMgKi8KKyNpZm5kZWYgQUJPUlQKKyNkZWZpbmUgQUJPUlQgIGFib3J0KCkKKyNlbmRpZiAgLyogQUJPUlQgKi8KKyNpZm5kZWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKKyNkZWZpbmUgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgMQorI2VuZGlmICAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2lmbmRlZiBQUk9DRUVEX09OX0VSUk9SCisjZGVmaW5lIFBST0NFRURfT05fRVJST1IgMAorI2VuZGlmICAvKiBQUk9DRUVEX09OX0VSUk9SICovCisjaWZuZGVmIFVTRV9MT0NLUworI2RlZmluZSBVU0VfTE9DS1MgMAorI2VuZGlmICAvKiBVU0VfTE9DS1MgKi8KKyNpZm5kZWYgVVNFX1NQSU5fTE9DS1MKKyNpZiBVU0VfTE9DS1MgJiYgKGRlZmluZWQoX19HTlVDX18pICYmICgoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkpKSB8fCAoZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMTApCisjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDAKKyNlbmRpZiAvKiBVU0VfTE9DS1MgJiYgLi4uICovCisjZW5kaWYgLyogVVNFX1NQSU5fTE9DS1MgKi8KKyNpZm5kZWYgSU5TRUNVUkUKKyNkZWZpbmUgSU5TRUNVUkUgMAorI2VuZGlmICAvKiBJTlNFQ1VSRSAqLworI2lmbmRlZiBIQVZFX01NQVAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjaWZuZGVmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDEKKyNlbmRpZiAgLyogTU1BUF9DTEVBUlMgKi8KKyNpZm5kZWYgSEFWRV9NUkVNQVAKKyNpZmRlZiBsaW51eAorI2RlZmluZSBIQVZFX01SRU1BUCAxCisjZWxzZSAgIC8qIGxpbnV4ICovCisjZGVmaW5lIEhBVkVfTVJFTUFQIDAKKyNlbmRpZiAgLyogbGludXggKi8KKyNlbmRpZiAgLyogSEFWRV9NUkVNQVAgKi8KKyNpZm5kZWYgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTiAgZXJybm8gPSBFTk9NRU07CisjZW5kaWYgIC8qIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAxCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjaWYgIUhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAwCisjZWxzZSAgIC8qICFIQVZFX01PUkVDT1JFICovCisjZGVmaW5lIE1PUkVDT1JFX0RFRkFVTFQgc2JyaworI2lmbmRlZiBNT1JFQ09SRV9DT05USUdVT1VTCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQorI2lmIChNT1JFQ09SRV9DT05USUdVT1VTIHx8IGRlZmluZWQoV0lOMzIpKQorI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgwKSAgLyogMCBtZWFucyB0byBjb21wdXRlIGluIGluaXRfbXBhcmFtcyAqLworI2Vsc2UgICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKChzaXplX3QpNjRVICogKHNpemVfdCkxMDI0VSkKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2VuZGlmICAvKiBERUZBVUxUX0dSQU5VTEFSSVRZICovCisjaWZuZGVmIERFRkFVTFRfVFJJTV9USFJFU0hPTEQKKyNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoKHNpemVfdCkyVSAqIChzaXplX3QpMTAyNFUgKiAoc2l6ZV90KTEwMjRVKQorI2Vsc2UgICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNlbmRpZiAgLyogREVGQVVMVF9UUklNX1RIUkVTSE9MRCAqLworI2lmbmRlZiBERUZBVUxUX01NQVBfVEhSRVNIT0xECisjaWYgSEFWRV9NTUFQCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKChzaXplX3QpMjU2VSAqIChzaXplX3QpMTAyNFUpCisjZWxzZSAgIC8qIEhBVkVfTU1BUCAqLworI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjZW5kaWYgIC8qIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKi8KKyNpZm5kZWYgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURQorI2lmIEhBVkVfTU1BUAorI2RlZmluZSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIDQwOTUKKyNlbHNlCisjZGVmaW5lIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgTUFYX1NJWkVfVAorI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2VuZGlmIC8qIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgKi8KKyNpZm5kZWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAwCisjZW5kaWYgIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmbmRlZiBVU0VfREVWX1JBTkRPTQorI2RlZmluZSBVU0VfREVWX1JBTkRPTSAwCisjZW5kaWYgIC8qIFVTRV9ERVZfUkFORE9NICovCisjaWZuZGVmIE5PX01BTExJTkZPCisjZGVmaW5lIE5PX01BTExJTkZPIDAKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKyNpZm5kZWYgTUFMTElORk9fRklFTERfVFlQRQorI2RlZmluZSBNQUxMSU5GT19GSUVMRF9UWVBFIHNpemVfdAorI2VuZGlmICAvKiBNQUxMSU5GT19GSUVMRF9UWVBFICovCisjaWZuZGVmIE5PX1NFR01FTlRfVFJBVkVSU0FMCisjZGVmaW5lIE5PX1NFR01FTlRfVFJBVkVSU0FMIDAKKyNlbmRpZiAvKiBOT19TRUdNRU5UX1RSQVZFUlNBTCAqLworCisvKgorICBtYWxsb3B0IHR1bmluZyBvcHRpb25zLiAgU1ZJRC9YUEcgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtZXRlcgorICBudW1iZXJzIGZvciBtYWxsb3B0LCBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZQorICBhcmUgdXNlZCBpbiB0aGlzIG1hbGxvYywgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzCisgIG1hbGxvYyBkb2VzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBvcHRpb25zLgorKi8KKworI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgICAoLTEpCisjZGVmaW5lIE1fR1JBTlVMQVJJVFkgICAgICAgICgtMikKKyNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAgKC0zKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFsbGluZm8gZGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBUaGlzIHZlcnNpb24gb2YgbWFsbG9jIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBTVklEL1hQRyBtYWxsaW5mbworICByb3V0aW5lIHRoYXQgcmV0dXJucyBhIHN0cnVjdCBjb250YWluaW5nIHVzYWdlIHByb3BlcnRpZXMgYW5kCisgIHN0YXRpc3RpY3MuIEl0IHNob3VsZCB3b3JrIG9uIGFueSBzeXN0ZW0gdGhhdCBoYXMgYQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZGVmaW5pbmcgc3RydWN0IG1hbGxpbmZvLiAgVGhlIG1haW4KKyAgZGVjbGFyYXRpb24gbmVlZGVkIGlzIHRoZSBtYWxsaW5mbyBzdHJ1Y3QgdGhhdCBpcyByZXR1cm5lZCAoYnktY29weSkKKyAgYnkgbWFsbGluZm8oKS4gIFRoZSBtYWxsb2luZm8gc3RydWN0IGNvbnRhaW5zIGEgYnVuY2ggb2YgZmllbGRzIHRoYXQKKyAgYXJlIG5vdCBldmVuIG1lYW5pbmdmdWwgaW4gdGhpcyB2ZXJzaW9uIG9mIG1hbGxvYy4gIFRoZXNlIGZpZWxkcyBhcmUKKyAgYXJlIGluc3RlYWQgZmlsbGVkIGJ5IG1hbGxpbmZvKCkgd2l0aCBvdGhlciBudW1iZXJzIHRoYXQgbWlnaHQgYmUgb2YKKyAgaW50ZXJlc3QuCisKKyAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBzaG91bGQgYmUgc2V0IGlmIHlvdSBoYXZlIGEKKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGZpbGUgdGhhdCBpbmNsdWRlcyBhIGRlY2xhcmF0aW9uIG9mIHN0cnVjdAorICBtYWxsaW5mby4gIElmIHNvLCBpdCBpcyBpbmNsdWRlZDsgZWxzZSBhIGNvbXBsaWFudCB2ZXJzaW9uIGlzCisgIGRlY2xhcmVkIGJlbG93LiAgVGhlc2UgbXVzdCBiZSBwcmVjaXNlbHkgdGhlIHNhbWUgZm9yIG1hbGxpbmZvKCkgdG8KKyAgd29yay4gIFRoZSBvcmlnaW5hbCBTVklEIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3QsIGRlZmluZWQgb24gbW9zdAorICBzeXN0ZW1zIHdpdGggbWFsbGluZm8sIGRlY2xhcmVzIGFsbCBmaWVsZHMgYXMgaW50cy4gQnV0IHNvbWUgb3RoZXJzCisgIGRlZmluZSBhcyB1bnNpZ25lZCBsb25nLiBJZiB5b3VyIHN5c3RlbSBkZWZpbmVzIHRoZSBmaWVsZHMgdXNpbmcgYQorICB0eXBlIG9mIGRpZmZlcmVudCB3aWR0aCB0aGFuIGxpc3RlZCBoZXJlLCB5b3UgTVVTVCAjaW5jbHVkZSB5b3VyCisgIHN5c3RlbSB2ZXJzaW9uIGFuZCAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0guCisqLworCisvKiAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKworI2lmZGVmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0gKKyNpbmNsdWRlICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiCisjZWxzZSAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisjaWZuZGVmIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRAorI2RlZmluZSBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgMQorc3RydWN0IG1hbGxpbmZvIHsKKyAgTUFMTElORk9fRklFTERfVFlQRSBhcmVuYTsgICAgLyogbm9uLW1tYXBwZWQgc3BhY2UgYWxsb2NhdGVkIGZyb20gc3lzdGVtICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHNtYmxrczsgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtzOyAgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1c21ibGtzOyAgLyogbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmc21ibGtzOyAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZm9yZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBrZWVwY29zdDsgLyogcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFjZSAqLworfTsKKyNlbmRpZiAvKiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgKi8KKyNlbmRpZiAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgVHJ5IHRvIHBlcnN1YWRlIGNvbXBpbGVycyB0byBpbmxpbmUuIFRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IKKyAgaW5saW5pbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLCBzbyB0aGVzZSBhcmVuJ3QgdXNlZCBmb3IgdGhlbS4KKyovCisKKyNpZm5kZWYgRk9SQ0VJTkxJTkUKKyAgI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIEZPUkNFSU5MSU5FIF9faW5saW5lIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkKKyAgI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIEZPUkNFSU5MSU5FIF9fZm9yY2VpbmxpbmUKKyAgI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTk9JTkxJTkUKKyAgI2lmIGRlZmluZWQoX19HTlVDX18pCisgICAgI2RlZmluZSBOT0lOTElORSBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorICAjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgTk9JTkxJTkUgX19kZWNsc3BlYyhub2lubGluZSkKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIE5PSU5MSU5FCisgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjaWZuZGVmIEZPUkNFSU5MSU5FCisgI2RlZmluZSBGT1JDRUlOTElORSBpbmxpbmUKKyNlbmRpZgorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjaWZuZGVmIEZPUkNFSU5MSU5FCisgI2RlZmluZSBGT1JDRUlOTElORQorI2VuZGlmCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRGVjbGFyYXRpb25zIG9mIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgVVNFX0RMX1BSRUZJWAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyNkZWZpbmUgZGx2YWxsb2MgICAgICAgICAgICAgICB2YWxsb2MKKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyNkZWZpbmUgZGxtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyNkZWZpbmUgZGxtYWxsb2Nfc3RhdHMgICAgICAgICBtYWxsb2Nfc3RhdHMKKyNkZWZpbmUgZGxtYWxsb2NfdXNhYmxlX3NpemUgICBtYWxsb2NfdXNhYmxlX3NpemUKKyNkZWZpbmUgZGxtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworI2VuZGlmIC8qIFVTRV9ETF9QUkVGSVggKi8KKworCisvKgorICBtYWxsb2Moc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0KKyAgb24gQU5TSSBDIHN5c3RlbXMuCisKKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQorICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3QgMzJiaXQgc3lzdGVtcywgYW5kIDMyIGJ5dGVzIG9uIDY0Yml0CisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgcmVxdWVzdHMgZm9yIGh1Z2UgYW1vdW50cyBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUKKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90LgorKi8KK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCk7CisKKy8qCisgIGZyZWUodm9pZCogcCkKKyAgUmVsZWFzZXMgdGhlIGNodW5rIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHAsIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4KKyAgSXQgaGFzIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuIElmIHAgd2FzIG5vdCBtYWxsb2NlZCBvciBhbHJlYWR5CisgIGZyZWVkLCBmcmVlKHApIHdpbGwgYnkgZGVmYXVsdCBjYXVzZSB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGFib3J0LgorKi8KK3ZvaWQgIGRsZnJlZSh2b2lkKik7CisKKy8qCisgIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxvY2F0aW9ucworICBzZXQgdG8gemVyby4KKyovCit2b2lkKiBkbGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbAorICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuCisKKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQorICBwcmVmZXJzIGV4dGVuZGluZyBwIGluIG1vc3QgY2FzZXMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0CisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgorCisgIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBpcyBlcXVpdmFsZW50IHRvIG1hbGxvYy4KKworICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbgorICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCisKKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAorICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIHJlYWxsb2Mgd2l0aCBhIHNpemUKKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KKworICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuaworICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KKyovCisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKKworLyoKKyAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkCisgIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJndW1lbnQuCisKKyAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uIElmIHRoZSBhcmd1bWVudCBpcworICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KKyAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0CisgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgorCisgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgorKi8KK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworCisvKgorICB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UKKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLgorKi8KK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpCisgIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBhCisgIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRoZW4gc2V0cyB0aGUKKyAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZhbHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KKyAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCisgIDAuICBUbyB3b3JrYXJvdW5kIHRoZSBmYWN0IHRoYXQgbWFsbG9wdCBpcyBzcGVjaWZpZWQgdG8gdXNlIGludCwKKyAgbm90IHNpemVfdCBwYXJhbWV0ZXJzLCB0aGUgdmFsdWUgLTEgaXMgc3BlY2lhbGx5IHRyZWF0ZWQgYXMgdGhlCisgIG1heGltdW0gdW5zaWduZWQgc2l6ZV90IHZhbHVlLgorCisgIFNWSUQvWFBHL0FOU0kgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtIG51bWJlcnMgZm9yIG1hbGxvcHQsCisgIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlIGFyZSB1c2UgaW4gdGhpcyBtYWxsb2MsCisgIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcyBtYWxsb2MgYWxzbyBzdXBwb3J0cyBvdGhlcgorICBvcHRpb25zIGluIG1hbGxvcHQuIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4gIEJyaWVmbHksIHN1cHBvcnRlZAorICBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzIChsaXN0ZWQgZGVmYXVsdHMgYXJlIGZvciAidHlwaWNhbCIKKyAgY29uZmlndXJhdGlvbnMpLgorCisgIFN5bWJvbCAgICAgICAgICAgIHBhcmFtICMgIGRlZmF1bHQgICAgYWxsb3dlZCBwYXJhbSB2YWx1ZXMKKyAgTV9UUklNX1RIUkVTSE9MRCAgICAgLTEgICAyKjEwMjQqMTAyNCAgIGFueSAgICgtMSBkaXNhYmxlcykKKyAgTV9HUkFOVUxBUklUWSAgICAgICAgLTIgICAgIHBhZ2Ugc2l6ZSAgIGFueSBwb3dlciBvZiAyID49IHBhZ2Ugc2l6ZQorICBNX01NQVBfVEhSRVNIT0xEICAgICAtMyAgICAgIDI1NioxMDI0ICAgYW55ICAgKG9yIDAgaWYgbm8gTU1BUCBzdXBwb3J0KQorKi8KK2ludCBkbG1hbGxvcHQoaW50LCBpbnQpOworCisvKgorICBtYWxsb2NfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgdG90YWwKKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMKKyAgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZAorICByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgRXZlbiBpZiBsb2NrcyBhcmUgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sCisgIHNvIHJlc3VsdHMgbWlnaHQgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKTsKKworLyoKKyAgbWFsbG9jX21heF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzCisgIHZhbHVlIHdpbGwgYmUgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZm9vdHByaW50IGlmIGRlYWxsb2NhdGVkIHNwYWNlCisgIGhhcyBiZWVuIHJlY2xhaW1lZCBieSB0aGUgc3lzdGVtLiBUaGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkCisgIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLAorICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZAorICBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLiAgRXZlbiBpZiBsb2NrcyBhcmUKKyAgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sIHNvIHJlc3VsdHMgbWlnaHQKKyAgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7CisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIG1hbGxpbmZvKCkKKyAgUmV0dXJucyAoYnkgY29weSkgYSBzdHJ1Y3QgY29udGFpbmluZyB2YXJpb3VzIHN1bW1hcnkgc3RhdGlzdGljczoKKworICBhcmVuYTogICAgIGN1cnJlbnQgdG90YWwgbm9uLW1tYXBwZWQgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCisgIG9yZGJsa3M6ICAgdGhlIG51bWJlciBvZiBmcmVlIGNodW5rcworICBzbWJsa3M6ICAgIGFsd2F5cyB6ZXJvLgorICBoYmxrczogICAgIGN1cnJlbnQgbnVtYmVyIG9mIG1tYXBwZWQgcmVnaW9ucworICBoYmxraGQ6ICAgIHRvdGFsIGJ5dGVzIGhlbGQgaW4gbW1hcHBlZCByZWdpb25zCisgIHVzbWJsa3M6ICAgdGhlIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlLiBUaGlzIHdpbGwgYmUgZ3JlYXRlcgorCQl0aGFuIGN1cnJlbnQgdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3VycmVkLgorICBmc21ibGtzOiAgIGFsd2F5cyB6ZXJvCisgIHVvcmRibGtzOiAgY3VycmVudCB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKG5vcm1hbCBvciBtbWFwcGVkKQorICBmb3JkYmxrczogIHRvdGFsIGZyZWUgc3BhY2UKKyAga2VlcGNvc3Q6ICB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBpZGVhbGx5IGJlIHJlbGVhc2VkCisJICAgICAgIGJhY2sgdG8gc3lzdGVtIHZpYSBtYWxsb2NfdHJpbS4gKCJpZGVhbGx5IiBtZWFucyB0aGF0CisJICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRjLikKKworICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQorICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3cmFwIGFyb3VuZCB6ZXJvIGFuZAorICB0aHVzIGJlIGluYWNjdXJhdGUuCisqLworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQorICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBuX2VsZW1lbnRzCisgIGluZGVwZW5kZW50IGVsZW1lbnRzIHRoYXQgY2FuIGhvbGQgY29udGVudHMgb2Ygc2l6ZSBlbGVtX3NpemUsIGVhY2gKKyAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVkLCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsCisgIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQorICBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aCBtdWx0aXBsZSBjYWxsb2NzIG9yCisgIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUKKyAgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzCisgIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwgdXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkKKyAgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28gYmUgZnJlZWQgd2hlbiBpdCBpcworICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBvZiBhdCBsZWFzdAorICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZQorICBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kICJjaHVua3MiCisgIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSByZWd1bGFyIGNhbGxvYyBhbmQgYXNzaWduIHBvaW50ZXJzIGludG8gdGhpcworICBzcGFjZSB0byByZXByZXNlbnQgZWxlbWVudHMuICAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91IGNhbm5vdAorICBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9mIG1hbnkKKyAga2luZHMgb2YgcG9vbHMuICBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgd2hlbiBjb25zdHJ1Y3RpbmcgbGFyZ2UgZGF0YQorICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsCisgIGJ1dCB0aGUgbnVtYmVyIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2RlcworICBtYXkgbGF0ZXIgbmVlZCB0byBiZSBmcmVlZC4gRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IE5vZGUgeyBpbnQgaXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07CisKKyAgc3RydWN0IE5vZGUqIGJ1aWxkX2xpc3QoKSB7CisgICAgc3RydWN0IE5vZGUqKiBwb29sOworICAgIGludCBuID0gcmVhZF9udW1iZXJfb2Zfbm9kZXNfbmVlZGVkKCk7CisgICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7CisgICAgcG9vbCA9IChzdHJ1Y3QgTm9kZSoqKShpbmRlcGVuZGVudF9jYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBOb2RlKSwgMCk7CisgICAgaWYgKHBvb2wgPT0gMCkgZGllKCk7CisgICAgLy8gb3JnYW5pemUgaW50byBhIGxpbmtlZCBsaXN0Li4uCisgICAgc3RydWN0IE5vZGUqIGZpcnN0ID0gcG9vbFswXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyArK2kpCisgICAgICBwb29sW2ldLT5uZXh0ID0gcG9vbFtpKzFdOworICAgIGZyZWUocG9vbCk7ICAgICAvLyBDYW4gbm93IGZyZWUgdGhlIGFycmF5IChvciBub3QsIGlmIGl0IGlzIG5lZWRlZCBsYXRlcikKKyAgICByZXR1cm4gZmlyc3Q7CisgIH0KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQqKik7CisKKy8qCisgIGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVudHMKKyAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAgICBJdCByZXR1cm5zCisgIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZXNlIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiBiZQorICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvCisgIGJlIGFkamFjZW50bHkgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgKKyAgbXVsdGlwbGUgY2FsbG9jcyBvciBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eQorICBpbiBzb21lIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsKS4gSWYgaXQgaXMgbnVsbAorICB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28KKyAgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkKKyAgbXVzdCBiZSBvZiBhdCBsZWFzdCBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlCisgIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NvbWFsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgY2h1bmtzIGlzCisgIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSBhIHNpbmdsZSByZWd1bGFyIG1hbGxvYywgYW5kIGFzc2lnbiBwb2ludGVycyBhdAorICBwYXJ0aWN1bGFyIG9mZnNldHMgaW4gdGhlIGFnZ3JlZ2F0ZSBzcGFjZS4gKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdQorICBjYW5ub3QgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKKworICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGluIHRoYXQgZWFjaAorICBlbGVtZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IHNpemUsIGFuZCBhbHNvIHRoYXQgaXQgZG9lcyBub3QKKyAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4KKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBhbGxvY2F0aW9uIGluIGNhc2VzCisgIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBhdCB0aGUKKyAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IEhlYWQgeyAuLi4gfQorICBzdHJ1Y3QgRm9vdCB7IC4uLiB9CisKKyAgdm9pZCBzZW5kX21lc3NhZ2UoY2hhciogbXNnKSB7CisgICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOworICAgIHNpemVfdCBzaXplc1szXSA9IHsgc2l6ZW9mKHN0cnVjdCBIZWFkKSwgbXNnbGVuLCBzaXplb2Yoc3RydWN0IEZvb3QpIH07CisgICAgdm9pZCogY2h1bmtzWzNdOworICAgIGlmIChpbmRlcGVuZGVudF9jb21hbGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQorICAgICAgZGllKCk7CisgICAgc3RydWN0IEhlYWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOworICAgIGNoYXIqICAgICAgICBib2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOworICAgIHN0cnVjdCBGb290KiBmb290ID0gKHN0cnVjdCBGb290KikoY2h1bmtzWzJdKTsKKyAgICAvLyAuLi4KKyAgfQorCisgIEluIGdlbmVyYWwgdGhvdWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcgorICBsYXJnZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3b24ndAorICBkZXRlY3QgZW5vdWdoIGRpZmZlcmVuY2UgZnJvbSBzZXJpZXMgb2YgbWFsbG9jIGNhbGxzIHRvIGJvdGhlci4KKworICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBpbmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwKKyAgc2luY2UgaXQgY2Fubm90IHJldXNlIGV4aXN0aW5nIG5vbmNvbnRpZ3VvdXMgc21hbGwgY2h1bmtzIHRoYXQKKyAgbWlnaHQgYmUgYXZhaWxhYmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QsIHNpemVfdCosIHZvaWQqKik7CisKKworLyoKKyAgcHZhbGxvYyhzaXplX3Qgbik7CisgIEVxdWl2YWxlbnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKKyAgcm91bmQgdXAgbiB0byBuZWFyZXN0IHBhZ2VzaXplLgorICovCit2b2lkKiAgZGxwdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY190cmltKHNpemVfdCBwYWQpOworCisgIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzCisgIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYworICBwb29sIG9yIGluIHVudXNlZCBNTUFQIHNlZ21lbnRzLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nCisgIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5CisgIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlCisgIG1lbW9yeS4gVW5kZXIgc29tZSBhbGxvY2F0aW9uIHBhdHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mCisgIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUKKyAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLgorCisgIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQorICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQorICB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoCisgIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nCisgIHRvIHJlLW9idGFpbiBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgorCisgIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCisqLworaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLwordm9pZCAgZGxtYWxsb2Nfc3RhdHModm9pZCk7CisKKyNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KKworLyoKKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApOworCisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB5b3UgY2FuIGFjdHVhbGx5IHVzZSBpbgorICBhbiBhbGxvY2F0ZWQgY2h1bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVlc3RlZCAoYWx0aG91Z2gKKyAgb2Z0ZW4gbm90KSBkdWUgdG8gYWxpZ25tZW50IGFuZCBtaW5pbXVtIHNpemUgY29uc3RyYWludHMuCisgIFlvdSBjYW4gdXNlIHRoaXMgbWFueSBieXRlcyB3aXRob3V0IHdvcnJ5aW5nIGFib3V0CisgIG92ZXJ3cml0aW5nIG90aGVyIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBncmVhdAorICBwcm9ncmFtbWluZyBwcmFjdGljZS4gbWFsbG9jX3VzYWJsZV9zaXplIGNhbiBiZSBtb3JlIHVzZWZ1bCBpbgorICBkZWJ1Z2dpbmcgYW5kIGFzc2VydGlvbnMsIGZvciBleGFtcGxlOgorCisgIHAgPSBtYWxsb2Mobik7CisgIGFzc2VydChtYWxsb2NfdXNhYmxlX3NpemUocCkgPj0gMjU2KTsKKyovCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCopOworCisKKyNpZiBNU1BBQ0VTCisKKy8qCisgIG1zcGFjZSBpcyBhbiBvcGFxdWUgdHlwZSByZXByZXNlbnRpbmcgYW4gaW5kZXBlbmRlbnQKKyAgcmVnaW9uIG9mIHNwYWNlIHRoYXQgc3VwcG9ydHMgbXNwYWNlX21hbGxvYywgZXRjLgorKi8KK3R5cGVkZWYgdm9pZCogbXNwYWNlOworCisvKgorICBjcmVhdGVfbXNwYWNlIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaW5kZXBlbmRlbnQgc3BhY2Ugd2l0aCB0aGUKKyAgZ2l2ZW4gaW5pdGlhbCBjYXBhY2l0eSwgb3IsIGlmIDAsIHRoZSBkZWZhdWx0IGdyYW51bGFyaXR5IHNpemUuICBJdAorICByZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gc3lzdGVtIG1lbW9yeSBhdmFpbGFibGUgdG8gY3JlYXRlIHRoZQorICBzcGFjZS4gIElmIGFyZ3VtZW50IGxvY2tlZCBpcyBub24temVybywgdGhlIHNwYWNlIHVzZXMgYSBzZXBhcmF0ZQorICBsb2NrIHRvIGNvbnRyb2wgYWNjZXNzLiBUaGUgY2FwYWNpdHkgb2YgdGhlIHNwYWNlIHdpbGwgZ3JvdworICBkeW5hbWljYWxseSBhcyBuZWVkZWQgdG8gc2VydmljZSBtc3BhY2VfbWFsbG9jIHJlcXVlc3RzLiAgWW91IGNhbgorICBjb250cm9sIHRoZSBzaXplcyBvZiBpbmNyZW1lbnRhbCBpbmNyZWFzZXMgb2YgdGhpcyBzcGFjZSBieQorICBjb21waWxpbmcgd2l0aCBhIGRpZmZlcmVudCBERUZBVUxUX0dSQU5VTEFSSVRZIG9yIGR5bmFtaWNhbGx5CisgIHNldHRpbmcgd2l0aCBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHZhbHVlKS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOworCisvKgorICBkZXN0cm95X21zcGFjZSBkZXN0cm95cyB0aGUgZ2l2ZW4gc3BhY2UsIGFuZCBhdHRlbXB0cyB0byByZXR1cm4gYWxsCisgIG9mIGl0cyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtLCByZXR1cm5pbmcgdGhlIHRvdGFsIG51bWJlciBvZgorICBieXRlcyBmcmVlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24sIHRoZSByZXN1bHRzIG9mIGFjY2VzcyB0byBhbGwgbWVtb3J5CisgIHVzZWQgYnkgdGhlIHNwYWNlIGJlY29tZSB1bmRlZmluZWQuCisqLworc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApOworCisvKgorICBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSB1c2VzIHRoZSBtZW1vcnkgc3VwcGxpZWQgYXMgdGhlIGluaXRpYWwgYmFzZQorICBvZiBhIG5ldyBtc3BhY2UuIFBhcnQgKGxlc3MgdGhhbiAxMjgqc2l6ZW9mKHNpemVfdCkgYnl0ZXMpIG9mIHRoaXMKKyAgc3BhY2UgaXMgdXNlZCBmb3IgYm9va2tlZXBpbmcsIHNvIHRoZSBjYXBhY2l0eSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMKKyAgbGFyZ2UuIChPdGhlcndpc2UgMCBpcyByZXR1cm5lZC4pIFdoZW4gdGhpcyBpbml0aWFsIHNwYWNlIGlzCisgIGV4aGF1c3RlZCwgYWRkaXRpb25hbCBtZW1vcnkgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uCisgIERlc3Ryb3lpbmcgdGhpcyBzcGFjZSB3aWxsIGRlYWxsb2NhdGUgYWxsIGFkZGl0aW9uYWxseSBhbGxvY2F0ZWQKKyAgc3BhY2UgKGlmIHBvc3NpYmxlKSBidXQgbm90IHRoZSBpbml0aWFsIGJhc2UuCisqLworbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rcyBjb250cm9scyB3aGV0aGVyIHJlcXVlc3RzIGZvciBsYXJnZSBjaHVua3MKKyAgYXJlIGFsbG9jYXRlZCBpbiB0aGVpciBvd24gbW1hcHBlZCByZWdpb25zLCBzZXBhcmF0ZSBmcm9tIG90aGVycyBpbgorICB0aGlzIG1zcGFjZS4gQnkgZGVmYXVsdCB0aGlzIGlzIGVuYWJsZWQsIHdoaWNoIHJlZHVjZXMKKyAgZnJhZ21lbnRhdGlvbi4gSG93ZXZlciwgc3VjaCBjaHVua3MgYXJlIG5vdCBuZWNlc3NhcmlseSByZWxlYXNlZCB0bworICB0aGUgc3lzdGVtIHVwb24gZGVzdHJveV9tc3BhY2UuICBEaXNhYmxpbmcgYnkgc2V0dGluZyB0byBmYWxzZSBtYXkKKyAgaW5jcmVhc2UgZnJhZ21lbnRhdGlvbiwgYnV0IGF2b2lkcyBsZWFrYWdlIHdoZW4gcmVseWluZyBvbgorICBkZXN0cm95X21zcGFjZSB0byByZWxlYXNlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIHRoaXMgc3BhY2UuCisqLworaW50IG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rcyhtc3BhY2UgbXNwLCBpbnQgZW5hYmxlKTsKKworCisvKgorICBtc3BhY2VfbWFsbG9jIGJlaGF2ZXMgYXMgbWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1zcGFjZV9mcmVlIGJlaGF2ZXMgYXMgZnJlZSwgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisKKyAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfZnJlZSBpcyBub3QgYWN0dWFsbHkgbmVlZGVkLgorICBmcmVlIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfZnJlZSBiZWNhdXNlIGZyZWVkIGNodW5rcyBmcm9tCisgIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZyBzcGFjZXMuCisqLwordm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBtZW0pOworCisvKgorICBtc3BhY2VfcmVhbGxvYyBiZWhhdmVzIGFzIHJlYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX3JlYWxsb2MgaXMgbm90IGFjdHVhbGx5CisgIG5lZWRlZC4gIHJlYWxsb2MgbWF5IGJlIGNhbGxlZCBpbnN0ZWFkIG9mIG1zcGFjZV9yZWFsbG9jIGJlY2F1c2UKKyAgcmVhbGxvY2VkIGNodW5rcyBmcm9tIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZworICBzcGFjZXMuCisqLwordm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogbWVtLCBzaXplX3QgbmV3c2l6ZSk7CisKKy8qCisgIG1zcGFjZV9jYWxsb2MgYmVoYXZlcyBhcyBjYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOworCisvKgorICBtc3BhY2VfbWVtYWxpZ24gYmVoYXZlcyBhcyBtZW1hbGlnbiwgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NvbWFsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfbWF4X2Zvb3RwcmludCgpIHJldHVybnMgdGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KKyovCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbXNwYWNlX21hbGxpbmZvIGJlaGF2ZXMgYXMgbWFsbGluZm8sIGJ1dCByZXBvcnRzIHByb3BlcnRpZXMgb2YKKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3N0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbWFsbG9jX3VzYWJsZV9zaXplOworKi8KKyAgc2l6ZV90IG1zcGFjZV91c2FibGVfc2l6ZSh2b2lkKiBtZW0pOworCisvKgorICBtc3BhY2VfbWFsbG9jX3N0YXRzIGJlaGF2ZXMgYXMgbWFsbG9jX3N0YXRzLCBidXQgcmVwb3J0cworICBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV90cmltIGJlaGF2ZXMgYXMgbWFsbG9jX3RyaW0sIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKTsKKworLyoKKyAgQW4gYWxpYXMgZm9yIG1hbGxvcHQuCisqLworaW50IG1zcGFjZV9tYWxsb3B0KGludCwgaW50KTsKKworI2VuZGlmIC8qIE1TUEFDRVMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OyAgLyogZW5kIG9mIGV4dGVybiAiQyIgKi8KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgVG8gbWFrZSBhIGZ1bGx5IGN1c3RvbWl6YWJsZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSwgY3V0IGV2ZXJ5dGhpbmcKKyAgYWJvdmUgdGhpcyBsaW5lLCBwdXQgaW50byBmaWxlIG1hbGxvYy5oLCBlZGl0IHRvIHN1aXQsIGFuZCAjaW5jbHVkZSBpdAorICBvbiB0aGUgbmV4dCBsaW5lLCBhcyB3ZWxsIGFzIGluIHByb2dyYW1zIHRoYXQgdXNlIHRoaXMgbWFsbG9jLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKy8qICNpbmNsdWRlICJtYWxsb2MuaCIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW50ZXJuYWwgI2luY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIFdJTjMyCisjaWZuZGVmIF9fR05VQ19fCisjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MTQ2ICkgLyogbm8gInVuc2lnbmVkIiB3YXJuaW5ncyAqLworI2VuZGlmCisjZW5kaWYgLyogV0lOMzIgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgIC8qIGZvciBwcmludGluZyBpbiBtYWxsb2Nfc3RhdHMgKi8KKworI2lmbmRlZiBMQUNLU19FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgLyogZm9yIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2VuZGlmIC8qIExBQ0tTX0VSUk5PX0ggKi8KKyNpZiBGT09URVJTCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgLyogZm9yIG1hZ2ljIGluaXRpYWxpemF0aW9uICovCisjZW5kaWYgLyogRk9PVEVSUyAqLworI2lmbmRlZiBMQUNLU19TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgIC8qIGZvciBhYm9ydCgpICovCisjZW5kaWYgLyogTEFDS1NfU1RETElCX0ggKi8KKyNpZmRlZiBERUJVRworI2lmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCisjZGVmaW5lIGFzc2VydCh4KSBpZighKHgpKSBBQk9SVAorI2Vsc2UgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZiAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2Vsc2UgIC8qIERFQlVHICovCisjaWZuZGVmIGFzc2VydAorI2RlZmluZSBhc3NlcnQoeCkKKyNlbmRpZgorI2RlZmluZSBERUJVRyAwCisjZW5kaWYgLyogREVCVUcgKi8KKyNpZm5kZWYgTEFDS1NfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAvKiBmb3IgbWVtc2V0IGV0YyAqLworI2VuZGlmICAvKiBMQUNLU19TVFJJTkdfSCAqLworI2lmIFVTRV9CVUlMVElOX0ZGUworI2lmbmRlZiBMQUNLU19TVFJJTkdTX0gKKyNpbmNsdWRlIDxzdHJpbmdzLmg+ICAgICAvKiBmb3IgZmZzICovCisjZW5kaWYgLyogTEFDS1NfU1RSSU5HU19IICovCisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisjaWYgSEFWRV9NTUFQCisjaWZuZGVmIExBQ0tTX1NZU19NTUFOX0gKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPiAgICAvKiBmb3IgbW1hcCAqLworI2VuZGlmIC8qIExBQ0tTX1NZU19NTUFOX0ggKi8KKyNpZm5kZWYgTEFDS1NfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogTEFDS1NfRkNOVExfSCAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2lmbmRlZiBMQUNLU19VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIHNicmssIHN5c2NvbmYgKi8KKyNlbHNlIC8qIExBQ0tTX1VOSVNURF9IICovCisjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQorZXh0ZXJuIHZvaWQqICAgICBzYnJrKHB0cmRpZmZfdCk7CisjZW5kaWYgLyogRnJlZUJTRCBldGMgKi8KKyNlbmRpZiAvKiBMQUNLU19VTklTVERfSCAqLworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGxvY2tpbmcgKi8KKyNpZiBVU0VfTE9DS1MKKyNpZm5kZWYgV0lOMzIKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWYgZGVmaW5lZCAoX19TVlI0KSAmJiBkZWZpbmVkIChfX3N1bikgIC8qIHNvbGFyaXMgKi8KKyNpbmNsdWRlIDx0aHJlYWQuaD4KKyNlbmRpZiAvKiBzb2xhcmlzICovCisjZWxzZQorI2lmbmRlZiBfTV9BTUQ2NAorLyogVGhlc2UgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiBBTUQ2NCBidWlsZHMgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNpZm5kZWYgX19NSU5HVzMyX18KK0xPTkcgX19jZGVjbCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoTE9ORyB2b2xhdGlsZSAqRGVzdCwgTE9ORyBFeGNoYW5nZSwgTE9ORyBDb21wKTsKK0xPTkcgX19jZGVjbCBfSW50ZXJsb2NrZWRFeGNoYW5nZShMT05HIHZvbGF0aWxlICpUYXJnZXQsIExPTkcgVmFsdWUpOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9NX0FNRDY0ICovCisjaWZuZGVmIF9fTUlOR1czMl9fCisjcHJhZ21hIGludHJpbnNpYyAoX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKQorI3ByYWdtYSBpbnRyaW5zaWMgKF9JbnRlcmxvY2tlZEV4Y2hhbmdlKQorI2Vsc2UKKyAgLyogLS1bIHN0YXJ0IEdDQyBjb21wYXRpYmlsaXR5IF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqIENvbXBhdGliaWxpdHkgPGludHJpbl94ODYuaD4gaGVhZGVyIGZvciBHQ0MgLS0gR0NDIGVxdWl2YWxlbnRzIG9mIGludHJpbnNpYworICAgKiBNaWNyb3NvZnQgVmlzdWFsIEMrKyBmdW5jdGlvbnMuIE9yaWdpbmFsbHkgZGV2ZWxvcGVkIGZvciB0aGUgUmVhY3RPUworICAgKiAoPGh0dHA6Ly93d3cucmVhY3Rvcy5vcmcvPikgYW5kIFRpbnlLcm5sICg8aHR0cDovL3d3dy50aW55a3JubC5vcmcvPikKKyAgICogcHJvamVjdHMuCisgICAqCisgICAqIENvcHlyaWdodCAoYykgMjAwNiBLSks6Okh5cGVyaW9uIDxoYWNrYnVubnlAcmVhY3Rvcy5jb20+CisgICAqCisgICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgICAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAgICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgICAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICAgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgKgorICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICAgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAgICoKKyAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAgICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgICAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgICAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgKi8KKworICAvKioqIEF0b21pYyBvcGVyYXRpb25zICoqKi8KKyAgI2lmIChfX0dOVUNfXyAqIDEwMDAwICsgX19HTlVDX01JTk9SX18gKiAxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKSA+IDQwMTAwCisgICAgI2RlZmluZSBfUmVhZFdyaXRlQmFycmllcigpIF9fc3luY19zeW5jaHJvbml6ZSgpCisgICNlbHNlCisgICAgc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGxvbmcgX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KHZvbGF0aWxlIGxvbmcgKiBjb25zdCBUYXJnZXQsIGNvbnN0IGxvbmcgVmFsdWUpCisgICAgeworICAgICAgbG9uZyByZXM7CisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZyV6MCAlMiwgJTAiIDogIj1nIiAoKihUYXJnZXQpKSwgIj1yIiAocmVzKSA6ICIxIiAoVmFsdWUpKTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9NZW1vcnlCYXJyaWVyKHZvaWQpCisgICAgeworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgOiA6IDogIm1lbW9yeSIpOworICAgIH0KKyAgICAjZGVmaW5lIF9SZWFkV3JpdGVCYXJyaWVyKCkgX01lbW9yeUJhcnJpZXIoKQorICAjZW5kaWYKKyAgLyogQlVHQlVHOiBHQ0Mgb25seSBzdXBwb3J0cyBmdWxsIGJhcnJpZXJzICovCisgIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBsb25nIF9JbnRlcmxvY2tlZEV4Y2hhbmdlKHZvbGF0aWxlIGxvbmcgKiBjb25zdCBUYXJnZXQsIGNvbnN0IGxvbmcgVmFsdWUpCisgIHsKKyAgICAvKiBOT1RFOiBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQgd291bGQgYmUgYW4gYWNxdWlyZSBiYXJyaWVyLCBzbyB3ZSBmb3JjZSBhIGZ1bGwgYmFycmllciAqLworICAgIF9SZWFkV3JpdGVCYXJyaWVyKCk7CisgICAgcmV0dXJuIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldChUYXJnZXQsIFZhbHVlKTsKKyAgfQorICAvKiAtLVsgZW5kIEdDQyBjb21wYXRpYmlsaXR5IF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZW5kaWYKKyNkZWZpbmUgaW50ZXJsb2NrZWRjb21wYXJlZXhjaGFuZ2UgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlCisjZGVmaW5lIGludGVybG9ja2VkZXhjaGFuZ2UgX0ludGVybG9ja2VkRXhjaGFuZ2UKKyNlbmRpZiAvKiBXaW4zMiAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGJpdCBzY2FubmluZyBvbiB3aW4zMiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisjaWZuZGVmIEJpdFNjYW5Gb3J3YXJkCS8qIFRyeSB0byBhdm9pZCBwdWxsaW5nIGluIFdpbk5ULmggKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5Gb3J3YXJkKHVuc2lnbmVkIGxvbmcgKmluZGV4LCB1bnNpZ25lZCBsb25nIG1hc2spOwordW5zaWduZWQgY2hhciBfQml0U2NhblJldmVyc2UodW5zaWduZWQgbG9uZyAqaW5kZXgsIHVuc2lnbmVkIGxvbmcgbWFzayk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIEJpdFNjYW5Gb3J3YXJkIF9CaXRTY2FuRm9yd2FyZAorI2RlZmluZSBCaXRTY2FuUmV2ZXJzZSBfQml0U2NhblJldmVyc2UKKyNwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuRm9yd2FyZCkKKyNwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuUmV2ZXJzZSkKKyNlbmRpZiAvKiBCaXRTY2FuRm9yd2FyZCAqLworI2VuZGlmIC8qIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwICovCisKKyNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgbWFsbG9jX2dldHBhZ2VzaXplCisjICBpZmRlZiBfU0NfUEFHRVNJWkUgICAgICAgICAvKiBzb21lIFNWUjQgc3lzdGVtcyBvbWl0IGFuIHVuZGVyc2NvcmUgKi8KKyMgICAgaWZuZGVmIF9TQ19QQUdFX1NJWkUKKyMgICAgICBkZWZpbmUgX1NDX1BBR0VfU0laRSBfU0NfUEFHRVNJWkUKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZmRlZiBfU0NfUEFHRV9TSVpFCisjICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgc3lzY29uZihfU0NfUEFHRV9TSVpFKQorIyAgZWxzZQorIyAgICBpZiBkZWZpbmVkKEJTRCkgfHwgZGVmaW5lZChER1VYKSB8fCBkZWZpbmVkKEhBVkVfR0VUUEFHRVNJWkUpCisgICAgICAgZXh0ZXJuIHNpemVfdCBnZXRwYWdlc2l6ZSgpOworIyAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgV0lOMzIgLyogdXNlIHN1cHBsaWVkIGVtdWxhdGlvbiBvZiBnZXRwYWdlc2l6ZSAqLworIyAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCisjICAgICAgZWxzZQorIyAgICAgICAgaWZuZGVmIExBQ0tTX1NZU19QQVJBTV9ICisjICAgICAgICAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgICAgICAgZW5kaWYKKyMgICAgICAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKKyMgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBFWEVDX1BBR0VTSVpFCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGlmZGVmIE5CUEcKKyMgICAgICAgICAgICBpZm5kZWYgQ0xTSVpFCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEcKKyMgICAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIChOQlBHICogQ0xTSVpFKQorIyAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICBpZmRlZiBOQlBDCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEMKKyMgICAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgICBpZmRlZiBQQUdFU0laRQorIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIFBBR0VTSVpFCisjICAgICAgICAgICAgICBlbHNlIC8qIGp1c3QgZ3Vlc3MgKi8KKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoKHNpemVfdCk0MDk2VSkKKyMgICAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgZW5kaWYKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBzaXplX3QgYW5kIGFsaWdubWVudCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBieXRlIGFuZCBiaXQgc2l6ZSBvZiBhIHNpemVfdCAqLworI2RlZmluZSBTSVpFX1RfU0laRSAgICAgICAgIChzaXplb2Yoc2l6ZV90KSkKKyNkZWZpbmUgU0laRV9UX0JJVFNJWkUgICAgICAoc2l6ZW9mKHNpemVfdCkgPDwgMykKKworLyogU29tZSBjb25zdGFudHMgY29lcmNlZCB0byBzaXplX3QgKi8KKy8qIEFubm95aW5nIGJ1dCBuZWNlc3NhcnkgdG8gYXZvaWQgZXJyb3JzIG9uIHNvbWUgcGxhdGZvcm1zICovCisjZGVmaW5lIFNJWkVfVF9aRVJPICAgICAgICAgKChzaXplX3QpMCkKKyNkZWZpbmUgU0laRV9UX09ORSAgICAgICAgICAoKHNpemVfdCkxKQorI2RlZmluZSBTSVpFX1RfVFdPICAgICAgICAgICgoc2l6ZV90KTIpCisjZGVmaW5lIFNJWkVfVF9GT1VSICAgICAgICAgKChzaXplX3QpNCkKKyNkZWZpbmUgVFdPX1NJWkVfVF9TSVpFUyAgICAoU0laRV9UX1NJWkU8PDEpCisjZGVmaW5lIEZPVVJfU0laRV9UX1NJWkVTICAgKFNJWkVfVF9TSVpFPDwyKQorI2RlZmluZSBTSVhfU0laRV9UX1NJWkVTICAgIChGT1VSX1NJWkVfVF9TSVpFUytUV09fU0laRV9UX1NJWkVTKQorI2RlZmluZSBIQUxGX01BWF9TSVpFX1QgICAgIChNQVhfU0laRV9UIC8gMlUpCisKKy8qIFRoZSBiaXQgbWFzayB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIE1BTExPQ19BTElHTk1FTlQgKi8KKyNkZWZpbmUgQ0hVTktfQUxJR05fTUFTSyAgICAoTUFMTE9DX0FMSUdOTUVOVCAtIFNJWkVfVF9PTkUpCisKKy8qIFRydWUgaWYgYWRkcmVzcyBhIGhhcyBhY2NlcHRhYmxlIGFsaWdubWVudCAqLworI2RlZmluZSBpc19hbGlnbmVkKEEpICAgICAgICgoKHNpemVfdCkoKEEpKSAmIChDSFVOS19BTElHTl9NQVNLKSkgPT0gMCkKKworLyogdGhlIG51bWJlciBvZiBieXRlcyB0byBvZmZzZXQgYW4gYWRkcmVzcyB0byBhbGlnbiBpdCAqLworI2RlZmluZSBhbGlnbl9vZmZzZXQoQSlcCisgKCgoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKT8gMCA6XAorICAoKE1BTExPQ19BTElHTk1FTlQgLSAoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSkgJiBDSFVOS19BTElHTl9NQVNLKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTU1BUCBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgIElmIEhBVkVfTU9SRUNPUkUgb3IgSEFWRV9NTUFQIGFyZSBmYWxzZSwgd2UganVzdCBkZWZpbmUgY2FsbHMgYW5kCisgICBjaGVja3MgdG8gZmFpbCBzbyBjb21waWxlciBvcHRpbWl6ZXIgY2FuIGRlbGV0ZSBjb2RlIHJhdGhlciB0aGFuCisgICB1c2luZyBzbyBtYW55ICIjaWYicy4KKyovCisKKworLyogTU9SRUNPUkUgYW5kIE1NQVAgbXVzdCByZXR1cm4gTUZBSUwgb24gZmFpbHVyZSAqLworI2RlZmluZSBNRkFJTCAgICAgICAgICAgICAgICAoKHZvaWQqKShNQVhfU0laRV9UKSkKKyNkZWZpbmUgQ01GQUlMICAgICAgICAgICAgICAgKChjaGFyKikoTUZBSUwpKSAvKiBkZWZpbmVkIGZvciBjb252ZW5pZW5jZSAqLworCisjaWYgSEFWRV9NTUFQCisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgTVVOTUFQX0RFRkFVTFQoYSwgcykgIG11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgTU1BUF9QUk9UICAgICAgICAgICAgKFBST1RfUkVBRHxQUk9UX1dSSVRFKQorI2lmICFkZWZpbmVkKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQoTUFQX0FOT04pCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMgICAgICAgIE1BUF9BTk9OCisjZW5kaWYgLyogTUFQX0FOT04gKi8KKyNpZmRlZiBNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTKQorI2RlZmluZSBNTUFQX0RFRkFVTFQocykgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgLTEsIDApCisjZWxzZSAvKiBNQVBfQU5PTllNT1VTICovCisvKgorICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFwIHN1cHBvcnQgTUFQX0FOT05ZTU9VUywgc28gdGhlIGZvbGxvd2luZworICAgaXMgdW5saWtlbHkgdG8gYmUgbmVlZGVkLCBidXQgaXMgc3VwcGxpZWQganVzdCBpbiBjYXNlLgorKi8KKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFKQorc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOyAvKiBDYWNoZWQgZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L3plcm8uICovCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAoKGRldl96ZXJvX2ZkIDwgMCkgPyBcCisJICAgKGRldl96ZXJvX2ZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKSwgXAorCSAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpIDogXAorCSAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpCisjZW5kaWYgLyogTUFQX0FOT05ZTU9VUyAqLworCisjZGVmaW5lIERJUkVDVF9NTUFQX0RFRkFVTFQocykgTU1BUF9ERUZBVUxUKHMpCisKKyNlbHNlIC8qIFdJTjMyICovCisKKy8qIFdpbjMyIE1NQVAgdmlhIFZpcnR1YWxBbGxvYyAqLworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQqIHdpbjMybW1hcChzaXplX3Qgc2l6ZSkgeworICB2b2lkKiBwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogRm9yIGRpcmVjdCBNTUFQLCB1c2UgTUVNX1RPUF9ET1dOIHRvIG1pbmltaXplIGludGVyZmVyZW5jZSAqLworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQqIHdpbjMyZGlyZWN0X21tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVR8TUVNX1RPUF9ET1dOLAorCQkJICAgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzZWQgc2VnbWVudHMgKi8KK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgd2luMzJtdW5tYXAodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgeworICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gbWluZm87CisgIGNoYXIqIGNwdHIgPSAoY2hhciopcHRyOworICB3aGlsZSAoc2l6ZSkgeworICAgIGlmIChWaXJ0dWFsUXVlcnkoY3B0ciwgJm1pbmZvLCBzaXplb2YobWluZm8pKSA9PSAwKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtaW5mby5CYXNlQWRkcmVzcyAhPSBjcHRyIHx8IG1pbmZvLkFsbG9jYXRpb25CYXNlICE9IGNwdHIgfHwKKwltaW5mby5TdGF0ZSAhPSBNRU1fQ09NTUlUIHx8IG1pbmZvLlJlZ2lvblNpemUgPiBzaXplKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChWaXJ0dWFsRnJlZShjcHRyLCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBjcHRyICs9IG1pbmZvLlJlZ2lvblNpemU7CisgICAgc2l6ZSAtPSBtaW5mby5SZWdpb25TaXplOworICB9CisgIHJldHVybiAwOworfQorCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAgICAgICAgICAgICB3aW4zMm1tYXAocykKKyNkZWZpbmUgTVVOTUFQX0RFRkFVTFQoYSwgcykgICAgICAgIHdpbjMybXVubWFwKChhKSwgKHMpKQorI2RlZmluZSBESVJFQ1RfTU1BUF9ERUZBVUxUKHMpICAgICAgd2luMzJkaXJlY3RfbW1hcChzKQorI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKKyNpZiBIQVZFX01SRU1BUAorI2lmbmRlZiBXSU4zMgorI2RlZmluZSBNUkVNQVBfREVGQVVMVChhZGRyLCBvc3osIG5zeiwgbXYpIG1yZW1hcCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkKKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIEhBVkVfTVJFTUFQICovCisKKworLyoqCisgKiBEZWZpbmUgQ0FMTF9NT1JFQ09SRQorICovCisjaWYgSEFWRV9NT1JFQ09SRQorICAgICNpZmRlZiBNT1JFQ09SRQorCSNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICBNT1JFQ09SRShTKQorICAgICNlbHNlICAvKiBNT1JFQ09SRSAqLworCSNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICBNT1JFQ09SRV9ERUZBVUxUKFMpCisgICAgI2VuZGlmIC8qIE1PUkVDT1JFICovCisjZWxzZSAgLyogSEFWRV9NT1JFQ09SRSAqLworICAgICNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICAgICAgTUZBSUwKKyNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovCisKKy8qKgorICogRGVmaW5lIENBTExfTU1BUC9DQUxMX01VTk1BUC9DQUxMX0RJUkVDVF9NTUFQCisgKi8KKyNpZiBIQVZFX01NQVAKKyAgICAjZGVmaW5lIElTX01NQVBQRURfQklUICAgICAgICAgIChTSVpFX1RfT05FKQorICAgICNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgICAgKFNJWkVfVF9PTkUpCisKKyAgICAjaWZkZWYgTU1BUAorCSNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICBNTUFQKHMpCisgICAgI2Vsc2UgLyogTU1BUCAqLworCSNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICBNTUFQX0RFRkFVTFQocykKKyAgICAjZW5kaWYgLyogTU1BUCAqLworICAgICNpZmRlZiBNVU5NQVAKKwkjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgTVVOTUFQKChhKSwgKHMpKQorICAgICNlbHNlIC8qIE1VTk1BUCAqLworCSNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICBNVU5NQVBfREVGQVVMVCgoYSksIChzKSkKKyAgICAjZW5kaWYgLyogTVVOTUFQICovCisgICAgI2lmZGVmIERJUkVDVF9NTUFQCisJI2RlZmluZSBDQUxMX0RJUkVDVF9NTUFQKHMpIERJUkVDVF9NTUFQKHMpCisgICAgI2Vsc2UgLyogRElSRUNUX01NQVAgKi8KKwkjZGVmaW5lIENBTExfRElSRUNUX01NQVAocykgRElSRUNUX01NQVBfREVGQVVMVChzKQorICAgICNlbmRpZiAvKiBESVJFQ1RfTU1BUCAqLworI2Vsc2UgIC8qIEhBVkVfTU1BUCAqLworICAgICNkZWZpbmUgSVNfTU1BUFBFRF9CSVQgICAgICAgICAgKFNJWkVfVF9aRVJPKQorICAgICNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgICAgKFNJWkVfVF9aRVJPKQorCisgICAgI2RlZmluZSBNTUFQKHMpICAgICAgICAgICAgICAgICBNRkFJTAorICAgICNkZWZpbmUgTVVOTUFQKGEsIHMpICAgICAgICAgICAgKC0xKQorICAgICNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgICAgTUZBSUwKKyAgICAjZGVmaW5lIENBTExfRElSRUNUX01NQVAocykgICAgIERJUkVDVF9NTUFQKHMpCisgICAgI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICAgICBNTUFQKHMpCisgICAgI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICAgICBNVU5NQVAoKGEpLCAocykpCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKKy8qKgorICogRGVmaW5lIENBTExfTVJFTUFQCisgKi8KKyNpZiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAKKyAgICAjaWZkZWYgTVJFTUFQCisJI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIE1SRU1BUCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkKKyAgICAjZWxzZSAvKiBNUkVNQVAgKi8KKwkjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgTVJFTUFQX0RFRkFVTFQoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisgICAgI2VuZGlmIC8qIE1SRU1BUCAqLworI2Vsc2UgIC8qIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUCAqLworICAgICNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSAgICAgTUZBSUwKKyNlbmRpZiAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KKworLyogbXN0YXRlIGJpdCBzZXQgaWYgY29udGluZ3VvdXMgbW9yZWNvcmUgZGlzYWJsZWQgb3IgZmFpbGVkICovCisjZGVmaW5lIFVTRV9OT05DT05USUdVT1VTX0JJVCAoNFUpCisKKy8qIHNlZ21lbnQgYml0IHNldCBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSAqLworI2RlZmluZSBFWFRFUk5fQklUICAgICAgICAgICAgKDhVKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2NrIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFdoZW4gbG9ja3MgYXJlIGRlZmluZWQsIHRoZXJlIGlzIG9uZSBnbG9iYWwgbG9jaywgcGx1cworICBvbmUgcGVyLW1zcGFjZSBsb2NrLgorCisgIFRoZSBnbG9iYWwgbG9ja19lbnN1cmVzIHRoYXQgbXBhcmFtcy5tYWdpYyBhbmQgb3RoZXIgdW5pcXVlCisgIG1wYXJhbXMgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuIEl0IGFsc28gcHJvdGVjdHMKKyAgc2VxdWVuY2VzIG9mIGNhbGxzIHRvIE1PUkVDT1JFLiAgSW4gbWFueSBjYXNlcyBzeXNfYWxsb2MgcmVxdWlyZXMKKyAgdHdvIGNhbGxzLCB0aGF0IHNob3VsZCBub3QgYmUgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyBieSBvdGhlcgorICB0aHJlYWRzLiAgVGhpcyBkb2VzIG5vdCBwcm90ZWN0IGFnYWluc3QgZGlyZWN0IGNhbGxzIHRvIE1PUkVDT1JFCisgIGJ5IG90aGVyIHRocmVhZHMgbm90IHVzaW5nIHRoaXMgbG9jaywgc28gdGhlcmUgaXMgc3RpbGwgY29kZSB0bworICBjb3BlIHRoZSBiZXN0IHdlIGNhbiBvbiBpbnRlcmZlcmVuY2UuCisKKyAgUGVyLW1zcGFjZSBsb2NrcyBzdXJyb3VuZCBjYWxscyB0byBtYWxsb2MsIGZyZWUsIGV0Yy4gIFRvIGVuYWJsZSB1c2UKKyAgaW4gbGF5ZXJlZCBleHRlbnNpb25zLCBwZXItbXNwYWNlIGxvY2tzIGFyZSByZWVudHJhbnQuCisKKyAgQmVjYXVzZSBsb2NrLXByb3RlY3RlZCByZWdpb25zIGdlbmVyYWxseSBoYXZlIGJvdW5kZWQgdGltZXMsIGl0IGlzCisgIE9LIHRvIHVzZSB0aGUgc3VwcGxpZWQgc2ltcGxlIHNwaW5sb2NrcyBpbiB0aGUgY3VzdG9tIHZlcnNpb25zIGZvcgorICB4ODYuCisKKyAgSWYgVVNFX0xPQ0tTIGlzID4gMSwgdGhlIGRlZmluaXRpb25zIG9mIGxvY2sgcm91dGluZXMgaGVyZSBhcmUKKyAgYnlwYXNzZWQsIGluIHdoaWNoIGNhc2UgeW91IHdpbGwgbmVlZCB0byBkZWZpbmUgYXQgbGVhc3QKKyAgSU5JVElBTF9MT0NLLCBBQ1FVSVJFX0xPQ0ssIFJFTEVBU0VfTE9DSyBhbmQgcG9zc2libHkgVFJZX0xPQ0sKKyAgKHdoaWNoIGlzIG5vdCB1c2VkIGluIHRoaXMgbWFsbG9jLCBidXQgY29tbW9ubHkgbmVlZGVkIGluCisgIGV4dGVuc2lvbnMuKQorKi8KKworI2lmIFVTRV9MT0NLUyA9PSAxCisKKyNpZiBVU0VfU1BJTl9MT0NLUworI2lmbmRlZiBXSU4zMgorCisvKiBDdXN0b20gcHRocmVhZC1zdHlsZSBzcGluIGxvY2tzIG9uIHg4NiBhbmQgeDY0IGZvciBnY2MgKi8KK3N0cnVjdCBwdGhyZWFkX21sb2NrX3QgeworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGM7CisgIHZvbGF0aWxlIHB0aHJlYWRfdCB0aHJlYWRpZDsKK307CisjZGVmaW5lIE1MT0NLX1Qgc3RydWN0ICAgICAgICBwdGhyZWFkX21sb2NrX3QKKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIHB0aHJlYWRfc2VsZigpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzbCkgICAgICAobWVtc2V0KHNsLCAwLCBzaXplb2YoTUxPQ0tfVCkpLCAwKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAgICAgcHRocmVhZF9hY3F1aXJlX2xvY2soc2wpCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgICAgICBwdGhyZWFkX3JlbGVhc2VfbG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgIHB0aHJlYWRfdHJ5X2xvY2soc2wpCisjZGVmaW5lIFNQSU5TX1BFUl9ZSUVMRCAgICAgICA2MworCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0geyAwLCAwLCAwfTsKKworc3RhdGljIEZPUkNFSU5MSU5FIGludCBwdGhyZWFkX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgaW50IHNwaW5zID0gMDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50KiBscCA9ICZzbC0+bDsKKyAgZm9yICg7OykgeworICAgIGlmICgqbHAgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogcGxhY2UgYXJncyB0byBjbXB4Y2hnbCBpbiBsb2NhbHMgdG8gZXZhZGUgb2RkaXRpZXMgaW4gc29tZSBnY2NzICovCisgICAgICBpbnQgY21wID0gMDsKKyAgICAgIGludCB2YWwgPSAxOworICAgICAgaW50IHJldDsKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICAoImxvY2s7IGNtcHhjaGdsICUxLCAlMiIKKwkJCSAgICAgOiAiPWEiIChyZXQpCisJCQkgICAgIDogInIiICh2YWwpLCAibSIgKCoobHApKSwgIjAiKGNtcCkKKwkJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CisgICAgICBpZiAoIXJldCkgeworCWFzc2VydCghc2wtPnRocmVhZGlkKTsKKwlzbC0+YyA9IDE7CisJc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgICBpZiAoKCsrc3BpbnMgJiBTUElOU19QRVJfWUlFTEQpID09IDApIHsKKyNpZiBkZWZpbmVkIChfX1NWUjQpICYmIGRlZmluZWQgKF9fc3VuKSAvKiBzb2xhcmlzICovCisJdGhyX3lpZWxkKCk7CisjZWxzZQorI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKwlzY2hlZF95aWVsZCgpOworI2Vsc2UgIC8qIG5vLW9wIHlpZWxkIG9uIHVua25vd24gc3lzdGVtcyAqLworCTsKKyNlbmRpZiAvKiBfX2xpbnV4X18gfHwgX19GcmVlQlNEX18gfHwgX19BUFBMRV9fICovCisjZW5kaWYgLyogc29sYXJpcyAqLworICAgICAgfQorICAgIH0KKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCBwdGhyZWFkX3JlbGVhc2VfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgYXNzZXJ0KHNsLT5sICE9IDApOworICBhc3NlcnQoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKTsKKyAgaWYgKC0tc2wtPmMgPT0gMCkgeworICAgIHNsLT50aHJlYWRpZCA9IDA7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50KiBscCA9ICZzbC0+bDsKKyAgICBpbnQgcHJldiA9IDA7CisgICAgaW50IHJldDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhjaGdsICUwLCAlMSIKKwkJCSAgOiAiPXIiIChyZXQpCisJCQkgIDogIm0iICgqKGxwKSksICIwIihwcmV2KQorCQkJICA6ICJtZW1vcnkiKTsKKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHB0aHJlYWRfdHJ5X2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCogbHAgPSAmc2wtPmw7CisgIGlmICgqbHAgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaW50IGNtcCA9IDA7CisgICAgaW50IHZhbCA9IDE7CisgICAgaW50IHJldDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAgKCJsb2NrOyBjbXB4Y2hnbCAlMSwgJTIiCisJCQkgICA6ICI9YSIgKHJldCkKKwkJCSAgIDogInIiICh2YWwpLCAibSIgKCoobHApKSwgIjAiKGNtcCkKKwkJCSAgIDogIm1lbW9yeSIsICJjYyIpOworICAgIGlmICghcmV0KSB7CisgICAgICBhc3NlcnQoIXNsLT50aHJlYWRpZCk7CisgICAgICBzbC0+YyA9IDE7CisgICAgICBzbC0+dGhyZWFkaWQgPSBDVVJSRU5UX1RIUkVBRDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworCisjZWxzZSAvKiBXSU4zMiAqLworLyogQ3VzdG9tIHdpbjMyLXN0eWxlIHNwaW4gbG9ja3Mgb24geDg2IGFuZCB4NjQgZm9yIE1TQyAqLworc3RydWN0IHdpbjMyX21sb2NrX3QKK3sKKyAgdm9sYXRpbGUgbG9uZyBsOworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYzsKKyAgdm9sYXRpbGUgbG9uZyB0aHJlYWRpZDsKK307CisKKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIHN0cnVjdCB3aW4zMl9tbG9ja190CisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICB3aW4zMl9nZXRjdXJyZW50dGhyZWFkaWQoKQorI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAgICAgKG1lbXNldChzbCwgMCwgc2l6ZW9mKE1MT0NLX1QpKSwgMCkKKyNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgICAgIHdpbjMyX2FjcXVpcmVfbG9jayhzbCkKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKHNsKSAgICAgIHdpbjMyX3JlbGVhc2VfbG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgIHdpbjMyX3RyeV9sb2NrKHNsKQorI2RlZmluZSBTUElOU19QRVJfWUlFTEQgICAgICAgNjMKKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IHsgMCwgMCwgMH07CisKK3N0YXRpYyBGT1JDRUlOTElORSBsb25nIHdpbjMyX2dldGN1cnJlbnR0aHJlYWRpZCgpIHsKKyNpZmRlZiBfTVNDX1ZFUgorI2lmIGRlZmluZWQoX01fSVg4NikKKyAgbG9uZyAqdGhyZWFkc3RydWN0PShsb25nICopX19yZWFkZnNkd29yZCgweDE4KTsKKyAgbG9uZyB0aHJlYWRpZD10aHJlYWRzdHJ1Y3RbMHgyNC9zaXplb2YobG9uZyldOworICByZXR1cm4gdGhyZWFkaWQ7CisjZWxpZiBkZWZpbmVkKF9NX1g2NCkKKyAgLyogdG9kbyAqLworICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CisjZWxzZQorICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CisjZW5kaWYKKyNlbHNlCisgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHdpbjMyX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgaW50IHNwaW5zID0gMDsKKyAgZm9yICg7OykgeworICAgIGlmIChzbC0+bCAhPSAwKSB7CisgICAgICBpZiAoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKSB7CisJKytzbC0+YzsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZiAoIWludGVybG9ja2VkZXhjaGFuZ2UoJnNsLT5sLCAxKSkgeworCWFzc2VydCghc2wtPnRocmVhZGlkKTsKKwkJc2wtPmM9Q1VSUkVOVF9USFJFQUQ7CisJc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisJc2wtPmMgPSAxOworCXJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgICBpZiAoKCsrc3BpbnMgJiBTUElOU19QRVJfWUlFTEQpID09IDApCisgICAgICBTbGVlcEV4KDAsIEZBTFNFKTsKKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCB3aW4zMl9yZWxlYXNlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGFzc2VydChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpOworICBhc3NlcnQoc2wtPmwgIT0gMCk7CisgIGlmICgtLXNsLT5jID09IDApIHsKKyAgICBzbC0+dGhyZWFkaWQgPSAwOworICAgIGludGVybG9ja2VkZXhjaGFuZ2UgKCZzbC0+bCwgMCk7CisgIH0KK30KKworc3RhdGljIEZPUkNFSU5MSU5FIGludCB3aW4zMl90cnlfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgaWYoc2wtPmwgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKCFpbnRlcmxvY2tlZGV4Y2hhbmdlKCZzbC0+bCwgMSkpeworICAgICAgYXNzZXJ0KCFzbC0+dGhyZWFkaWQpOworICAgICAgc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisgICAgICBzbC0+YyA9IDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBXSU4zMiAqLworI2Vsc2UgLyogVVNFX1NQSU5fTE9DS1MgKi8KKworI2lmbmRlZiBXSU4zMgorLyogcHRocmVhZHMtYmFzZWQgbG9ja3MgKi8KKworI2RlZmluZSBNTE9DS19UICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90CisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICBwdGhyZWFkX3NlbGYoKQorI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAgICAgcHRocmVhZF9pbml0X2xvY2soc2wpCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhzbCkgICAgICBwdGhyZWFkX211dGV4X2xvY2soc2wpCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgICAgICBwdGhyZWFkX211dGV4X3VubG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgICghcHRocmVhZF9tdXRleF90cnlsb2NrKHNsKSkKKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKKy8qIENvcGUgd2l0aCBvbGQtc3R5bGUgbGludXggcmVjdXJzaXZlIGxvY2sgaW5pdGlhbGl6YXRpb24gYnkgYWRkaW5nICovCisvKiBza2lwcGVkIGludGVybmFsIGRlY2xhcmF0aW9uIGZyb20gcHRocmVhZC5oICovCisjaWZkZWYgbGludXgKKyNpZm5kZWYgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUKK2V4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCBfX1AgKChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCisJCQkJCSAgIGludCBfX2tpbmQpKTsKKyNkZWZpbmUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAKKyNkZWZpbmUgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSh4LHkpIHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAoeCx5KQorI2VuZGlmCisjZW5kaWYKKworc3RhdGljIGludCBwdGhyZWFkX2luaXRfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgcHRocmVhZF9tdXRleGF0dHJfdCBhdHRyOworICBpZiAocHRocmVhZF9tdXRleGF0dHJfaW5pdCgmYXR0cikpIHJldHVybiAxOworICBpZiAocHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpKSByZXR1cm4gMTsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdChzbCwgJmF0dHIpKSByZXR1cm4gMTsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJmF0dHIpKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIFdJTjMyICovCisvKiBXaW4zMiBjcml0aWNhbCBzZWN0aW9ucyAqLworI2RlZmluZSBNTE9DS19UICAgICAgICAgICAgICAgQ1JJVElDQUxfU0VDVElPTgorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgR2V0Q3VycmVudFRocmVhZElkKCkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKHMpICAgICAgICghSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbkFuZFNwaW5Db3VudCgocyksIDB4ODAwMDAwMDB8NDAwMCkpCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhzKSAgICAgICAoRW50ZXJDcml0aWNhbFNlY3Rpb24ocyksIDApCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzKSAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbihzKQorI2RlZmluZSBUUllfTE9DSyhzKSAgICAgICAgICAgVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24ocykKKyNkZWZpbmUgTkVFRF9HTE9CQUxfTE9DS19JTklUCisKK3N0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXg7CitzdGF0aWMgdm9sYXRpbGUgbG9uZyBtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1czsKKworLyogVXNlIHNwaW4gbG9vcCB0byBpbml0aWFsaXplIGdsb2JhbCBsb2NrICovCitzdGF0aWMgdm9pZCBpbml0X21hbGxvY19nbG9iYWxfbXV0ZXgoKSB7CisgIGZvciAoOzspIHsKKyAgICBsb25nIHN0YXQgPSBtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1czsKKyAgICBpZiAoc3RhdCA+IDApCisgICAgICByZXR1cm47CisgICAgLyogdHJhbnNpdGlvbiB0byA8IDAgd2hpbGUgaW5pdGlhbGl6aW5nLCB0aGVuIHRvID4gMCkgKi8KKyAgICBpZiAoc3RhdCA9PSAwICYmCisJaW50ZXJsb2NrZWRjb21wYXJlZXhjaGFuZ2UoJm1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzLCAtMSwgMCkgPT0gMCkgeworICAgICAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmbWFsbG9jX2dsb2JhbF9tdXRleCk7CisgICAgICBpbnRlcmxvY2tlZGV4Y2hhbmdlKCZtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cywxKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2xlZXBFeCgwLCBGQUxTRSk7CisgIH0KK30KKworI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogVVNFX1NQSU5fTE9DS1MgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgPT0gMSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVXNlci1kZWZpbmVkIGxvY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgVVNFX0xPQ0tTID4gMQorLyogRGVmaW5lIHlvdXIgb3duIGxvY2sgaW1wbGVtZW50YXRpb24gaGVyZSAqLworLyogI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAuLi4gKi8KKy8qICNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgLi4uICovCisvKiAjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgIC4uLiAqLworLyogI2RlZmluZSBUUllfTE9DSyhzbCkgLi4uICovCisvKiBzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0gLi4uICovCisjZW5kaWYgLyogVVNFX0xPQ0tTID4gMSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTG9jay1iYXNlZCBzdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIFVTRV9MT0NLUworI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMlUpCisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisjZGVmaW5lIFVTRV9MT0NLX0JJVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKyNpZiBVU0VfTE9DS1MKKyNkZWZpbmUgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKSAgQUNRVUlSRV9MT0NLKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsKKyNkZWZpbmUgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKSAgUkVMRUFTRV9MT0NLKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsKKyNlbHNlICAvKiBVU0VfTE9DS1MgKi8KKyNkZWZpbmUgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKQorI2RlZmluZSBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENodW5rIHJlcHJlc2VudGF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgKFRoZSBmb2xsb3dpbmcgaW5jbHVkZXMgbGlnaHRseSBlZGl0ZWQgZXhwbGFuYXRpb25zIGJ5IENvbGluIFBsdW1iLikKKworICBUaGUgbWFsbG9jX2NodW5rIGRlY2xhcmF0aW9uIGJlbG93IGlzIG1pc2xlYWRpbmcgKGJ1dCBhY2N1cmF0ZSBhbmQKKyAgbmVjZXNzYXJ5KS4gIEl0IGRlY2xhcmVzIGEgInZpZXciIGludG8gbWVtb3J5IGFsbG93aW5nIGFjY2VzcyB0bworICBuZWNlc3NhcnkgZmllbGRzIGF0IGtub3duIG9mZnNldHMgZnJvbSBhIGdpdmVuIGJhc2UuCisKKyAgQ2h1bmtzIG9mIG1lbW9yeSBhcmUgbWFpbnRhaW5lZCB1c2luZyBhIGBib3VuZGFyeSB0YWcnIG1ldGhvZCBhcworICBvcmlnaW5hbGx5IGRlc2NyaWJlZCBieSBLbnV0aC4gIChTZWUgdGhlIHBhcGVyIGJ5IFBhdWwgV2lsc29uCisgIGZ0cDovL2Z0cC5jcy51dGV4YXMuZWR1L3B1Yi9nYXJiYWdlL2FsbG9jc3J2LnBzIGZvciBhIHN1cnZleSBvZiBzdWNoCisgIHRlY2huaXF1ZXMuKSAgU2l6ZXMgb2YgZnJlZSBjaHVua3MgYXJlIHN0b3JlZCBib3RoIGluIHRoZSBmcm9udCBvZgorICBlYWNoIGNodW5rIGFuZCBhdCB0aGUgZW5kLiAgVGhpcyBtYWtlcyBjb25zb2xpZGF0aW5nIGZyYWdtZW50ZWQKKyAgY2h1bmtzIGludG8gYmlnZ2VyIGNodW5rcyBmYXN0LiAgVGhlIGhlYWQgZmllbGRzIGFsc28gaG9sZCBiaXRzCisgIHJlcHJlc2VudGluZyB3aGV0aGVyIGNodW5rcyBhcmUgZnJlZSBvciBpbiB1c2UuCisKKyAgSGVyZSBhcmUgc29tZSBwaWN0dXJlcyB0byBtYWtlIGl0IGNsZWFyZXIuICBUaGV5IGFyZSAiZXhwbG9kZWQiIHRvCisgIHNob3cgdGhhdCB0aGUgc3RhdGUgb2YgYSBjaHVuayBjYW4gYmUgdGhvdWdodCBvZiBhcyBleHRlbmRpbmcgZnJvbQorICB0aGUgaGlnaCAzMSBiaXRzIG9mIHRoZSBoZWFkIGZpZWxkIG9mIGl0cyBoZWFkZXIgdGhyb3VnaCB0aGUKKyAgcHJldl9mb290IGFuZCBQSU5VU0VfQklUIGJpdCBvZiB0aGUgZm9sbG93aW5nIGNodW5rIGhlYWRlci4KKworICBBIGNodW5rIHRoYXQncyBpbiB1c2UgbG9va3MgbGlrZToKKworICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgIHwgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgUCA9IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfAorCSB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMXwgKy0rCisgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorCSArLSAgICAgIHNpemUgLSBzaXplb2Yoc2l6ZV90KSBhdmFpbGFibGUgcGF5bG9hZCBieXRlcyAgICAgICAgICAtKworCSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfDF8CisgICAgICAgfCBTaXplIG9mIG5leHQgY2h1bmsgKG1heSBvciBtYXkgbm90IGJlIGluIHVzZSkgICAgICAgICAgICAgICB8ICstKworIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgICBBbmQgaWYgaXQncyBmcmVlLCBpdCBsb29rcyBsaWtlIHRoaXM6CisKKyAgIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgICB8IFVzZXIgcGF5bG9hZCAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkISkgICAgICAgfAorCSAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKKwkgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCBOZXh0IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCBQcmV2IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKwkgKy0gICAgICBzaXplIC0gc2l6ZW9mKHN0cnVjdCBjaHVuaykgdW51c2VkIGJ5dGVzICAgICAgICAgICAgICAgLSsKKwkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwwfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtdXN0IGJlIGluIHVzZSwgb3Igd2Ugd291bGQgaGF2ZSBtZXJnZWQpfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgKy0gVXNlciBwYXlsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJCQkJCQkJCSAgICAgfDB8CisJCQkJCQkJCSAgICAgKy0rCisgIE5vdGUgdGhhdCBzaW5jZSB3ZSBhbHdheXMgbWVyZ2UgYWRqYWNlbnQgZnJlZSBjaHVua3MsIHRoZSBjaHVua3MKKyAgYWRqYWNlbnQgdG8gYSBmcmVlIGNodW5rIG11c3QgYmUgaW4gdXNlLgorCisgIEdpdmVuIGEgcG9pbnRlciB0byBhIGNodW5rICh3aGljaCBjYW4gYmUgZGVyaXZlZCB0cml2aWFsbHkgZnJvbSB0aGUKKyAgcGF5bG9hZCBwb2ludGVyKSB3ZSBjYW4sIGluIE8oMSkgdGltZSwgZmluZCBvdXQgd2hldGhlciB0aGUgYWRqYWNlbnQKKyAgY2h1bmtzIGFyZSBmcmVlLCBhbmQgaWYgc28sIHVubGluayB0aGVtIGZyb20gdGhlIGxpc3RzIHRoYXQgdGhleQorICBhcmUgb24gYW5kIG1lcmdlIHRoZW0gd2l0aCB0aGUgY3VycmVudCBjaHVuay4KKworICBDaHVua3MgYWx3YXlzIGJlZ2luIG9uIGV2ZW4gd29yZCBib3VuZGFyaWVzLCBzbyB0aGUgbWVtIHBvcnRpb24KKyAgKHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyKSBpcyBhbHNvIG9uIGFuIGV2ZW4gd29yZCBib3VuZGFyeSwgYW5kCisgIHRodXMgYXQgbGVhc3QgZG91YmxlLXdvcmQgYWxpZ25lZC4KKworICBUaGUgUCAoUElOVVNFX0JJVCkgYml0LCBzdG9yZWQgaW4gdGhlIHVudXNlZCBsb3ctb3JkZXIgYml0IG9mIHRoZQorICBjaHVuayBzaXplICh3aGljaCBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiB0d28gd29yZHMpLCBpcyBhbiBpbi11c2UKKyAgYml0IGZvciB0aGUgKnByZXZpb3VzKiBjaHVuay4gIElmIHRoYXQgYml0IGlzICpjbGVhciosIHRoZW4gdGhlCisgIHdvcmQgYmVmb3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUgY29udGFpbnMgdGhlIHByZXZpb3VzIGNodW5rCisgIHNpemUsIGFuZCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBmcm9udCBvZiB0aGUgcHJldmlvdXMgY2h1bmsuCisgIFRoZSB2ZXJ5IGZpcnN0IGNodW5rIGFsbG9jYXRlZCBhbHdheXMgaGFzIHRoaXMgYml0IHNldCwgcHJldmVudGluZworICBhY2Nlc3MgdG8gbm9uLWV4aXN0ZW50IChvciBub24tb3duZWQpIG1lbW9yeS4gSWYgcGludXNlIGlzIHNldCBmb3IKKyAgYW55IGdpdmVuIGNodW5rLCB0aGVuIHlvdSBDQU5OT1QgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZQorICBwcmV2aW91cyBjaHVuaywgYW5kIG1pZ2h0IGV2ZW4gZ2V0IGEgbWVtb3J5IGFkZHJlc3NpbmcgZmF1bHQgd2hlbgorICB0cnlpbmcgdG8gZG8gc28uCisKKyAgVGhlIEMgKENJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgc2Vjb25kLWxvd2VzdCBiaXQgb2YKKyAgdGhlIGNodW5rIHNpemUgcmVkdW5kYW50bHkgcmVjb3JkcyB3aGV0aGVyIHRoZSBjdXJyZW50IGNodW5rIGlzCisgIGludXNlLiBUaGlzIHJlZHVuZGFuY3kgZW5hYmxlcyB1c2FnZSBjaGVja3Mgd2l0aGluIGZyZWUgYW5kIHJlYWxsb2MsCisgIGFuZCByZWR1Y2VzIGluZGlyZWN0aW9uIHdoZW4gZnJlZWluZyBhbmQgY29uc29saWRhdGluZyBjaHVua3MuCisKKyAgRWFjaCBmcmVzaGx5IGFsbG9jYXRlZCBjaHVuayBtdXN0IGhhdmUgYm90aCBjaW51c2UgYW5kIHBpbnVzZSBzZXQuCisgIFRoYXQgaXMsIGVhY2ggYWxsb2NhdGVkIGNodW5rIGJvcmRlcnMgZWl0aGVyIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQKKyAgYW5kIHN0aWxsIGluLXVzZSBjaHVuaywgb3IgdGhlIGJhc2Ugb2YgaXRzIG1lbW9yeSBhcmVuYS4gVGhpcyBpcworICBlbnN1cmVkIGJ5IG1ha2luZyBhbGwgYWxsb2NhdGlvbnMgZnJvbSB0aGUgYGxvd2VzdCcgcGFydCBvZiBhbnkKKyAgZm91bmQgY2h1bmsuICBGdXJ0aGVyLCBubyBmcmVlIGNodW5rIHBoeXNpY2FsbHkgYm9yZGVycyBhbm90aGVyIG9uZSwKKyAgc28gZWFjaCBmcmVlIGNodW5rIGlzIGtub3duIHRvIGJlIHByZWNlZGVkIGFuZCBmb2xsb3dlZCBieSBlaXRoZXIKKyAgaW51c2UgY2h1bmtzIG9yIHRoZSBlbmRzIG9mIG1lbW9yeS4KKworICBOb3RlIHRoYXQgdGhlIGBmb290JyBvZiB0aGUgY3VycmVudCBjaHVuayBpcyBhY3R1YWxseSByZXByZXNlbnRlZAorICBhcyB0aGUgcHJldl9mb290IG9mIHRoZSBORVhUIGNodW5rLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0bworICBkZWFsIHdpdGggYWxpZ25tZW50cyBldGMgYnV0IGNhbiBiZSB2ZXJ5IGNvbmZ1c2luZyB3aGVuIHRyeWluZworICB0byBleHRlbmQgb3IgYWRhcHQgdGhpcyBjb2RlLgorCisgIFRoZSBleGNlcHRpb25zIHRvIGFsbCB0aGlzIGFyZQorCisgICAgIDEuIFRoZSBzcGVjaWFsIGNodW5rIGB0b3AnIGlzIHRoZSB0b3AtbW9zdCBhdmFpbGFibGUgY2h1bmsgKGkuZS4sCisJdGhlIG9uZSBib3JkZXJpbmcgdGhlIGVuZCBvZiBhdmFpbGFibGUgbWVtb3J5KS4gSXQgaXMgdHJlYXRlZAorCXNwZWNpYWxseS4gIFRvcCBpcyBuZXZlciBpbmNsdWRlZCBpbiBhbnkgYmluLCBpcyB1c2VkIG9ubHkgaWYKKwlubyBvdGhlciBjaHVuayBpcyBhdmFpbGFibGUsIGFuZCBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZQorCXN5c3RlbSBpZiBpdCBpcyB2ZXJ5IGxhcmdlIChzZWUgTV9UUklNX1RIUkVTSE9MRCkuICBJbiBlZmZlY3QsCisJdGhlIHRvcCBjaHVuayBpcyB0cmVhdGVkIGFzIGxhcmdlciAoYW5kIHRodXMgbGVzcyB3ZWxsCisJZml0dGluZykgdGhhbiBhbnkgb3RoZXIgYXZhaWxhYmxlIGNodW5rLiAgVGhlIHRvcCBjaHVuaworCWRvZXNuJ3QgdXBkYXRlIGl0cyB0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vIG5leHQKKwljb250aWd1b3VzIGNodW5rIHRoYXQgd291bGQgaGF2ZSB0byBpbmRleCBvZmYgaXQuIEhvd2V2ZXIsCisJc3BhY2UgaXMgc3RpbGwgYWxsb2NhdGVkIGZvciBpdCAoVE9QX0ZPT1RfU0laRSkgdG8gZW5hYmxlCisJc2VwYXJhdGlvbiBvciBtZXJnaW5nIHdoZW4gc3BhY2UgaXMgZXh0ZW5kZWQuCisKKyAgICAgMy4gQ2h1bmtzIGFsbG9jYXRlZCB2aWEgbW1hcCwgd2hpY2ggaGF2ZSB0aGUgbG93ZXN0LW9yZGVyIGJpdAorCShJU19NTUFQUEVEX0JJVCkgc2V0IGluIHRoZWlyIHByZXZfZm9vdCBmaWVsZHMsIGFuZCBkbyBub3Qgc2V0CisJUElOVVNFX0JJVCBpbiB0aGVpciBoZWFkIGZpZWxkcy4gIEJlY2F1c2UgdGhleSBhcmUgYWxsb2NhdGVkCisJb25lLWJ5LW9uZSwgZWFjaCBtdXN0IGNhcnJ5IGl0cyBvd24gcHJldl9mb290IGZpZWxkLCB3aGljaCBpcworCWFsc28gdXNlZCB0byBob2xkIHRoZSBvZmZzZXQgdGhpcyBjaHVuayBoYXMgd2l0aGluIGl0cyBtbWFwcGVkCisJcmVnaW9uLCB3aGljaCBpcyBuZWVkZWQgdG8gcHJlc2VydmUgYWxpZ25tZW50LiBFYWNoIG1tYXBwZWQKKwljaHVuayBpcyB0cmFpbGVkIGJ5IHRoZSBmaXJzdCB0d28gZmllbGRzIG9mIGEgZmFrZSBuZXh0LWNodW5rCisJZm9yIHNha2Ugb2YgdXNhZ2UgY2hlY2tzLgorCisqLworCitzdHJ1Y3QgbWFsbG9jX2NodW5rIHsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgcHJldl9mb290OyAgLyogU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgZnJlZSkuICAqLworICBzaXplX3QgICAgICAgICAgICAgICBoZWFkOyAgICAgICAvKiBTaXplIGFuZCBpbnVzZSBiaXRzLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBmZDsgICAgICAgICAvKiBkb3VibGUgbGlua3MgLS0gdXNlZCBvbmx5IGlmIGZyZWUuICovCisgIHN0cnVjdCBtYWxsb2NfY2h1bmsqIGJrOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rICBtY2h1bms7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIG1jaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogc2JpbnB0cjsgIC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgY2h1bmtzICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5kZXhfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGJpbm1hcF90OyAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxhZ190OyAgICAgICAgICAgLyogVGhlIHR5cGUgb2YgdmFyaW91cyBiaXQgZmxhZyBzZXRzICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gQ2h1bmtzIHNpemVzIGFuZCBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTUNIVU5LX1NJWkUgICAgICAgICAoc2l6ZW9mKG1jaHVuaykpCisKKyNpZiBGT09URVJTCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFRXT19TSVpFX1RfU0laRVMpCisjZWxzZSAvKiBGT09URVJTICovCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFNJWkVfVF9TSVpFKQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKworLyogTU1hcHBlZCBjaHVua3MgbmVlZCBhIHNlY29uZCB3b3JkIG9mIG92ZXJoZWFkIC4uLiAqLworI2RlZmluZSBNTUFQX0NIVU5LX09WRVJIRUFEIChUV09fU0laRV9UX1NJWkVTKQorLyogLi4uIGFuZCBhZGRpdGlvbmFsIHBhZGRpbmcgZm9yIGZha2UgbmV4dC1jaHVuayBhdCBmb290ICovCisjZGVmaW5lIE1NQVBfRk9PVF9QQUQgICAgICAgKEZPVVJfU0laRV9UX1NJWkVTKQorCisvKiBUaGUgc21hbGxlc3Qgc2l6ZSB3ZSBjYW4gbWFsbG9jIGlzIGFuIGFsaWduZWQgbWluaW1hbCBjaHVuayAqLworI2RlZmluZSBNSU5fQ0hVTktfU0laRVwKKyAgKChNQ0hVTktfU0laRSArIENIVU5LX0FMSUdOX01BU0spICYgfkNIVU5LX0FMSUdOX01BU0spCisKKy8qIGNvbnZlcnNpb24gZnJvbSBtYWxsb2MgaGVhZGVycyB0byB1c2VyIHBvaW50ZXJzLCBhbmQgYmFjayAqLworI2RlZmluZSBjaHVuazJtZW0ocCkgICAgICAgICgodm9pZCopKChjaGFyKikocCkgICAgICAgKyBUV09fU0laRV9UX1NJWkVTKSkKKyNkZWZpbmUgbWVtMmNodW5rKG1lbSkgICAgICAoKG1jaHVua3B0cikoKGNoYXIqKShtZW0pIC0gVFdPX1NJWkVfVF9TSVpFUykpCisvKiBjaHVuayBhc3NvY2lhdGVkIHdpdGggYWxpZ25lZCBhZGRyZXNzIEEgKi8KKyNkZWZpbmUgYWxpZ25fYXNfY2h1bmsoQSkgICAobWNodW5rcHRyKSgoQSkgKyBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKEEpKSkKKworLyogQm91bmRzIG9uIHJlcXVlc3QgKG5vdCBjaHVuaykgc2l6ZXMuICovCisjZGVmaW5lIE1BWF9SRVFVRVNUICAgICAgICAgKCgtTUlOX0NIVU5LX1NJWkUpIDw8IDIpCisjZGVmaW5lIE1JTl9SRVFVRVNUICAgICAgICAgKE1JTl9DSFVOS19TSVpFIC0gQ0hVTktfT1ZFUkhFQUQgLSBTSVpFX1RfT05FKQorCisvKiBwYWQgcmVxdWVzdCBieXRlcyBpbnRvIGEgdXNhYmxlIHNpemUgKi8KKyNkZWZpbmUgcGFkX3JlcXVlc3QocmVxKSBcCisgICAoKChyZXEpICsgQ0hVTktfT1ZFUkhFQUQgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBwYWQgcmVxdWVzdCwgY2hlY2tpbmcgZm9yIG1pbmltdW0gKGJ1dCBub3QgbWF4aW11bSkgKi8KKyNkZWZpbmUgcmVxdWVzdDJzaXplKHJlcSkgXAorICAoKChyZXEpIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KHJlcSkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gaGVhZCBhbmQgZm9vdCBmaWVsZHMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgVGhlIGhlYWQgZmllbGQgb2YgYSBjaHVuayBpcyBvcidlZCB3aXRoIFBJTlVTRV9CSVQgd2hlbiBwcmV2aW91cworICBhZGphY2VudCBjaHVuayBpbiB1c2UsIGFuZCBvcidlZCB3aXRoIENJTlVTRV9CSVQgaWYgdGhpcyBjaHVuayBpcyBpbgorICB1c2UuIElmIHRoZSBjaHVuayB3YXMgb2J0YWluZWQgd2l0aCBtbWFwLCB0aGUgcHJldl9mb290IGZpZWxkIGhhcworICBJU19NTUFQUEVEX0JJVCBzZXQsIG90aGVyd2lzZSBob2xkaW5nIHRoZSBvZmZzZXQgb2YgdGhlIGJhc2Ugb2YgdGhlCisgIG1tYXBwZWQgcmVnaW9uIHRvIHRoZSBiYXNlIG9mIHRoZSBjaHVuay4KKworICBGTEFHNF9CSVQgaXMgbm90IHVzZWQgYnkgdGhpcyBtYWxsb2MsIGJ1dCBtaWdodCBiZSB1c2VmdWwgaW4gZXh0ZW5zaW9ucy4KKyovCisKKyNkZWZpbmUgUElOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX09ORSkKKyNkZWZpbmUgQ0lOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX1RXTykKKyNkZWZpbmUgRkxBRzRfQklUICAgICAgICAgICAoU0laRV9UX0ZPVVIpCisjZGVmaW5lIElOVVNFX0JJVFMgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkKKyNkZWZpbmUgRkxBR19CSVRTICAgICAgICAgICAoUElOVVNFX0JJVHxDSU5VU0VfQklUfEZMQUc0X0JJVCkKKworLyogSGVhZCB2YWx1ZSBmb3IgZmVuY2Vwb3N0cyAqLworI2RlZmluZSBGRU5DRVBPU1RfSEVBRCAgICAgIChJTlVTRV9CSVRTfFNJWkVfVF9TSVpFKQorCisvKiBleHRyYWN0aW9uIG9mIGZpZWxkcyBmcm9tIGhlYWQgd29yZHMgKi8KKyNkZWZpbmUgY2ludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgQ0lOVVNFX0JJVCkKKyNkZWZpbmUgcGludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgUElOVVNFX0JJVCkKKyNkZWZpbmUgY2h1bmtzaXplKHApICAgICAgICAoKHApLT5oZWFkICYgfihGTEFHX0JJVFMpKQorCisjZGVmaW5lIGNsZWFyX3BpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+UElOVVNFX0JJVCkKKyNkZWZpbmUgY2xlYXJfY2ludXNlKHApICAgICAoKHApLT5oZWFkICY9IH5DSU5VU0VfQklUKQorCisvKiBUcmVhdCBzcGFjZSBhdCBwdHIgKy8tIG9mZnNldCBhcyBhIGNodW5rICovCisjZGVmaW5lIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHMpICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSkKKyNkZWZpbmUgY2h1bmtfbWludXNfb2Zmc2V0KHAsIHMpICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgLSAocykpKQorCisvKiBQdHIgdG8gbmV4dCBvciBwcmV2aW91cyBwaHlzaWNhbCBtYWxsb2NfY2h1bmsuICovCisjZGVmaW5lIG5leHRfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgKyAoKHApLT5oZWFkICYgfkZMQUdfQklUUykpKQorI2RlZmluZSBwcmV2X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpIC0gKChwKS0+cHJldl9mb290KSApKQorCisvKiBleHRyYWN0IG5leHQgY2h1bmsncyBwaW51c2UgYml0ICovCisjZGVmaW5lIG5leHRfcGludXNlKHApICAoKG5leHRfY2h1bmsocCktPmhlYWQpICYgUElOVVNFX0JJVCkKKworLyogR2V0L3NldCBzaXplIGF0IGZvb3RlciAqLworI2RlZmluZSBnZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCkKKyNkZWZpbmUgc2V0X2Zvb3QocCwgcykgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAocykpCisKKy8qIFNldCBzaXplLCBwaW51c2UgYml0LCBhbmQgZm9vdCAqLworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUKSwgc2V0X2Zvb3QocCwgcykpCisKKy8qIFNldCBzaXplLCBwaW51c2UgYml0LCBmb290LCBhbmQgY2xlYXIgbmV4dCBwaW51c2UgKi8KKyNkZWZpbmUgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcywgbilcCisgIChjbGVhcl9waW51c2UobiksIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKSkKKworI2RlZmluZSBpc19tbWFwcGVkKHApXAorICAoISgocCktPmhlYWQgJiBQSU5VU0VfQklUKSAmJiAoKHApLT5wcmV2X2Zvb3QgJiBJU19NTUFQUEVEX0JJVCkpCisKKy8qIEdldCB0aGUgaW50ZXJuYWwgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGNodW5rIHAgKi8KKyNkZWZpbmUgb3ZlcmhlYWRfZm9yKHApXAorIChpc19tbWFwcGVkKHApPyBNTUFQX0NIVU5LX09WRVJIRUFEIDogQ0hVTktfT1ZFUkhFQUQpCisKKy8qIFJldHVybiB0cnVlIGlmIG1hbGxvY2VkIHNwYWNlIGlzIG5vdCBuZWNlc3NhcmlseSBjbGVhcmVkICovCisjaWYgTU1BUF9DTEVBUlMKKyNkZWZpbmUgY2FsbG9jX211c3RfY2xlYXIocCkgKCFpc19tbWFwcGVkKHApKQorI2Vsc2UgLyogTU1BUF9DTEVBUlMgKi8KKyNkZWZpbmUgY2FsbG9jX211c3RfY2xlYXIocCkgKDEpCisjZW5kaWYgLyogTU1BUF9DTEVBUlMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPdmVybGFpZCBkYXRhIHN0cnVjdHVyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgV2hlbiBjaHVua3MgYXJlIG5vdCBpbiB1c2UsIHRoZXkgYXJlIHRyZWF0ZWQgYXMgbm9kZXMgb2YgZWl0aGVyCisgIGxpc3RzIG9yIHRyZWVzLgorCisgICJTbWFsbCIgIGNodW5rcyBhcmUgc3RvcmVkIGluIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdHMsIGFuZCBsb29rCisgIGxpa2UgdGhpczoKKworICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIGluIGxpc3QgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgTGFyZ2VyIGNodW5rcyBhcmUga2VwdCBpbiBhIGZvcm0gb2YgYml0d2lzZSBkaWdpdGFsIHRyZWVzIChha2EKKyAgdHJpZXMpIGtleWVkIG9uIGNodW5rc2l6ZXMuICBCZWNhdXNlIG1hbGxvY190cmVlX2NodW5rcyBhcmUgb25seSBmb3IKKyAgZnJlZSBjaHVua3MgZ3JlYXRlciB0aGFuIDI1NiBieXRlcywgdGhlaXIgc2l6ZSBkb2Vzbid0IGltcG9zZSBhbnkKKyAgY29uc3RyYWludHMgb24gdXNlciBjaHVuayBzaXplcy4gIEVhY2ggbm9kZSBsb29rcyBsaWtlOgorCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBoZWFkOicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICB8UHwKKyAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgQmFjayBwb2ludGVyIHRvIHByZXZpb3VzIGNodW5rIG9mIHNhbWUgc2l6ZSAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBsZWZ0IGNoaWxkIChjaGlsZFswXSkgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byByaWdodCBjaGlsZCAoY2hpbGRbMV0pICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBwYXJlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgYmluIGluZGV4IG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisJICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CituZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICBFYWNoIHRyZWUgaG9sZGluZyB0cmVlbm9kZXMgaXMgYSB0cmVlIG9mIHVuaXF1ZSBjaHVuayBzaXplcy4gIENodW5rcworICBvZiB0aGUgc2FtZSBzaXplIGFyZSBhcnJhbmdlZCBpbiBhIGNpcmN1bGFybHktbGlua2VkIGxpc3QsIHdpdGggb25seQorICB0aGUgb2xkZXN0IGNodW5rICh0aGUgbmV4dCB0byBiZSB1c2VkLCBpbiBvdXIgRklGTyBvcmRlcmluZykKKyAgYWN0dWFsbHkgaW4gdGhlIHRyZWUuICAoVHJlZSBtZW1iZXJzIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IGEgbm9uLW51bGwKKyAgcGFyZW50IHBvaW50ZXIuKSAgSWYgYSBjaHVuayB3aXRoIHRoZSBzYW1lIHNpemUgYXMgYW4gZXhpc3Rpbmcgbm9kZQorICBpcyBpbnNlcnRlZCwgaXQgaXMgbGlua2VkIG9mZiB0aGUgZXhpc3Rpbmcgbm9kZSB1c2luZyBwb2ludGVycyB0aGF0CisgIHdvcmsgaW4gdGhlIHNhbWUgd2F5IGFzIGZkL2JrIHBvaW50ZXJzIG9mIHNtYWxsIGNodW5rcy4KKworICBFYWNoIHRyZWUgY29udGFpbnMgYSBwb3dlciBvZiAyIHNpemVkIHJhbmdlIG9mIGNodW5rIHNpemVzICh0aGUKKyAgc21hbGxlc3QgaXMgMHgxMDAgPD0geCA8IDB4MTgwKSwgd2hpY2ggaXMgZGl2aWRlZCBpbiBoYWxmIGF0IGVhY2gKKyAgdHJlZSBsZXZlbCwgd2l0aCB0aGUgY2h1bmtzIGluIHRoZSBzbWFsbGVyIGhhbGYgb2YgdGhlIHJhbmdlICgweDEwMAorICA8PSB4IDwgMHgxNDAgZm9yIHRoZSB0b3Agbm9zZSkgaW4gdGhlIGxlZnQgc3VidHJlZSBhbmQgdGhlIGxhcmdlcgorICBoYWxmICgweDE0MCA8PSB4IDwgMHgxODApIGluIHRoZSByaWdodCBzdWJ0cmVlLiAgVGhpcyBpcywgb2YgY291cnNlLAorICBkb25lIGJ5IGluc3BlY3RpbmcgaW5kaXZpZHVhbCBiaXRzLgorCisgIFVzaW5nIHRoZXNlIHJ1bGVzLCBlYWNoIG5vZGUncyBsZWZ0IHN1YnRyZWUgY29udGFpbnMgYWxsIHNtYWxsZXIKKyAgc2l6ZXMgdGhhbiBpdHMgcmlnaHQgc3VidHJlZS4gIEhvd2V2ZXIsIHRoZSBub2RlIGF0IHRoZSByb290IG9mIGVhY2gKKyAgc3VidHJlZSBoYXMgbm8gcGFydGljdWxhciBvcmRlcmluZyByZWxhdGlvbnNoaXAgdG8gZWl0aGVyLiAgKFRoZQorICBkaXZpZGluZyBsaW5lIGJldHdlZW4gdGhlIHN1YnRyZWUgc2l6ZXMgaXMgYmFzZWQgb24gdHJpZSByZWxhdGlvbi4pCisgIElmIHdlIHJlbW92ZSB0aGUgbGFzdCBjaHVuayBvZiBhIGdpdmVuIHNpemUgZnJvbSB0aGUgaW50ZXJpb3Igb2YgdGhlCisgIHRyZWUsIHdlIG5lZWQgdG8gcmVwbGFjZSBpdCB3aXRoIGEgbGVhZiBub2RlLiAgVGhlIHRyZWUgb3JkZXJpbmcKKyAgcnVsZXMgcGVybWl0IGEgbm9kZSB0byBiZSByZXBsYWNlZCBieSBhbnkgbGVhZiBiZWxvdyBpdC4KKworICBUaGUgc21hbGxlc3QgY2h1bmsgaW4gYSB0cmVlIChhIGNvbW1vbiBvcGVyYXRpb24gaW4gYSBiZXN0LWZpdAorICBhbGxvY2F0b3IpIGNhbiBiZSBmb3VuZCBieSB3YWxraW5nIGEgcGF0aCB0byB0aGUgbGVmdG1vc3QgbGVhZiBpbgorICB0aGUgdHJlZS4gIFVubGlrZSBhIHVzdWFsIGJpbmFyeSB0cmVlLCB3aGVyZSB3ZSBmb2xsb3cgbGVmdCBjaGlsZAorICBwb2ludGVycyB1bnRpbCB3ZSByZWFjaCBhIG51bGwsIGhlcmUgd2UgZm9sbG93IHRoZSByaWdodCBjaGlsZAorICBwb2ludGVyIGFueSB0aW1lIHRoZSBsZWZ0IG9uZSBpcyBudWxsLCB1bnRpbCB3ZSByZWFjaCBhIGxlYWYgd2l0aAorICBib3RoIGNoaWxkIHBvaW50ZXJzIG51bGwuIFRoZSBzbWFsbGVzdCBjaHVuayBpbiB0aGUgdHJlZSB3aWxsIGJlCisgIHNvbWV3aGVyZSBhbG9uZyB0aGF0IHBhdGguCisKKyAgVGhlIHdvcnN0IGNhc2UgbnVtYmVyIG9mIHN0ZXBzIHRvIGFkZCwgZmluZCwgb3IgcmVtb3ZlIGEgbm9kZSBpcworICBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgYml0cyBkaWZmZXJlbnRpYXRpbmcgY2h1bmtzIHdpdGhpbgorICBiaW5zLiBVbmRlciBjdXJyZW50IGJpbiBjYWxjdWxhdGlvbnMsIHRoaXMgcmFuZ2VzIGZyb20gNiB1cCB0byAyMQorICAoZm9yIDMyIGJpdCBzaXplcykgb3IgdXAgdG8gNTMgKGZvciA2NCBiaXQgc2l6ZXMpLiBUaGUgdHlwaWNhbCBjYXNlCisgIGlzIG9mIGNvdXJzZSBtdWNoIGJldHRlci4KKyovCisKK3N0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayB7CisgIC8qIFRoZSBmaXJzdCBmb3VyIGZpZWxkcyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBtYWxsb2NfY2h1bmsgKi8KKyAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBwcmV2X2Zvb3Q7CisgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgaGVhZDsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBmZDsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBiazsKKworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGNoaWxkWzJdOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHBhcmVudDsKKyAgYmluZGV4X3QgICAgICAgICAgICAgICAgICBpbmRleDsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rICB0Y2h1bms7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogdGNodW5rcHRyOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHRiaW5wdHI7IC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgdHJlZXMgKi8KKworLyogQSBsaXR0bGUgaGVscGVyIG1hY3JvIGZvciB0cmVlcyAqLworI2RlZmluZSBsZWZ0bW9zdF9jaGlsZCh0KSAoKHQpLT5jaGlsZFswXSAhPSAwPyAodCktPmNoaWxkWzBdIDogKHQpLT5jaGlsZFsxXSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2VnbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRWFjaCBtYWxsb2Mgc3BhY2UgbWF5IGluY2x1ZGUgbm9uLWNvbnRpZ3VvdXMgc2VnbWVudHMsIGhlbGQgaW4gYQorICBsaXN0IGhlYWRlZCBieSBhbiBlbWJlZGRlZCBtYWxsb2Nfc2VnbWVudCByZWNvcmQgcmVwcmVzZW50aW5nIHRoZQorICB0b3AtbW9zdCBzcGFjZS4gU2VnbWVudHMgYWxzbyBpbmNsdWRlIGZsYWdzIGhvbGRpbmcgcHJvcGVydGllcyBvZgorICB0aGUgc3BhY2UuIExhcmdlIGNodW5rcyB0aGF0IGFyZSBkaXJlY3RseSBhbGxvY2F0ZWQgYnkgbW1hcCBhcmUgbm90CisgIGluY2x1ZGVkIGluIHRoaXMgbGlzdC4gVGhleSBhcmUgaW5zdGVhZCBpbmRlcGVuZGVudGx5IGNyZWF0ZWQgYW5kCisgIGRlc3Ryb3llZCB3aXRob3V0IG90aGVyd2lzZSBrZWVwaW5nIHRyYWNrIG9mIHRoZW0uCisKKyAgU2VnbWVudCBtYW5hZ2VtZW50IG1haW5seSBjb21lcyBpbnRvIHBsYXkgZm9yIHNwYWNlcyBhbGxvY2F0ZWQgYnkKKyAgTU1BUC4gIEFueSBjYWxsIHRvIE1NQVAgbWlnaHQgb3IgbWlnaHQgbm90IHJldHVybiBtZW1vcnkgdGhhdCBpcworICBhZGphY2VudCB0byBhbiBleGlzdGluZyBzZWdtZW50LiAgTU9SRUNPUkUgbm9ybWFsbHkgY29udGlndW91c2x5CisgIGV4dGVuZHMgdGhlIGN1cnJlbnQgc3BhY2UsIHNvIHRoaXMgc3BhY2UgaXMgYWxtb3N0IGFsd2F5cyBhZGphY2VudCwKKyAgd2hpY2ggaXMgc2ltcGxlciBhbmQgZmFzdGVyIHRvIGRlYWwgd2l0aC4gKFRoaXMgaXMgd2h5IE1PUkVDT1JFIGlzCisgIHVzZWQgcHJlZmVyZW50aWFsbHkgdG8gTU1BUCB3aGVuIGJvdGggYXJlIGF2YWlsYWJsZSAtLSBzZWUKKyAgc3lzX2FsbG9jLikgIFdoZW4gYWxsb2NhdGluZyB1c2luZyBNTUFQLCB3ZSBkb24ndCB1c2UgYW55IG9mIHRoZQorICBoaW50aW5nIG1lY2hhbmlzbXMgKGluY29uc2lzdGVudGx5KSBzdXBwb3J0ZWQgaW4gdmFyaW91cworICBpbXBsZW1lbnRhdGlvbnMgb2YgdW5peCBtbWFwLCBvciBkaXN0aW5ndWlzaCByZXNlcnZpbmcgZnJvbQorICBjb21taXR0aW5nIG1lbW9yeS4gSW5zdGVhZCwgd2UganVzdCBhc2sgZm9yIHNwYWNlLCBhbmQgZXhwbG9pdAorICBjb250aWd1aXR5IHdoZW4gd2UgZ2V0IGl0LiAgSXQgaXMgcHJvYmFibHkgcG9zc2libGUgdG8gZG8KKyAgYmV0dGVyIHRoYW4gdGhpcyBvbiBzb21lIHN5c3RlbXMsIGJ1dCBubyBnZW5lcmFsIHNjaGVtZSBzZWVtcworICB0byBiZSBzaWduaWZpY2FudGx5IGJldHRlci4KKworICBNYW5hZ2VtZW50IGVudGFpbHMgYSBzaW1wbGVyIHZhcmlhbnQgb2YgdGhlIGNvbnNvbGlkYXRpb24gc2NoZW1lCisgIHVzZWQgZm9yIGNodW5rcyB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbiAtLSBuZXcgYWRqYWNlbnQgbWVtb3J5IGlzCisgIG5vcm1hbGx5IHByZXBlbmRlZCBvciBhcHBlbmRlZCB0byBhbiBleGlzdGluZyBzZWdtZW50LiBIb3dldmVyLAorICB0aGVyZSBhcmUgbGltaXRhdGlvbnMgY29tcGFyZWQgdG8gY2h1bmsgY29uc29saWRhdGlvbiB0aGF0IG1vc3RseQorICByZWZsZWN0IHRoZSBmYWN0IHRoYXQgc2VnbWVudCBwcm9jZXNzaW5nIGlzIHJlbGF0aXZlbHkgaW5mcmVxdWVudAorICAob2NjdXJyaW5nIG9ubHkgd2hlbiBnZXR0aW5nIG1lbW9yeSBmcm9tIHN5c3RlbSkgYW5kIHRoYXQgd2UKKyAgZG9uJ3QgZXhwZWN0IHRvIGhhdmUgaHVnZSBudW1iZXJzIG9mIHNlZ21lbnRzOgorCisgICogU2VnbWVudHMgYXJlIG5vdCBpbmRleGVkLCBzbyB0cmF2ZXJzYWwgcmVxdWlyZXMgbGluZWFyIHNjYW5zLiAgKEl0CisgICAgd291bGQgYmUgcG9zc2libGUgdG8gaW5kZXggdGhlc2UsIGJ1dCBpcyBub3Qgd29ydGggdGhlIGV4dHJhCisgICAgb3ZlcmhlYWQgYW5kIGNvbXBsZXhpdHkgZm9yIG1vc3QgcHJvZ3JhbXMgb24gbW9zdCBwbGF0Zm9ybXMuKQorICAqIE5ldyBzZWdtZW50cyBhcmUgb25seSBhcHBlbmRlZCB0byBvbGQgb25lcyB3aGVuIGhvbGRpbmcgdG9wLW1vc3QKKyAgICBtZW1vcnk7IGlmIHRoZXkgY2Fubm90IGJlIHByZXBlbmRlZCB0byBvdGhlcnMsIHRoZXkgYXJlIGhlbGQgaW4KKyAgICBkaWZmZXJlbnQgc2VnbWVudHMuCisKKyAgRXhjZXB0IGZvciB0aGUgdG9wLW1vc3Qgc2VnbWVudCBvZiBhbiBtc3RhdGUsIGVhY2ggc2VnbWVudCByZWNvcmQKKyAgaXMga2VwdCBhdCB0aGUgdGFpbCBvZiBpdHMgc2VnbWVudC4gU2VnbWVudHMgYXJlIGFkZGVkIGJ5IHB1c2hpbmcKKyAgc2VnbWVudCByZWNvcmRzIG9udG8gdGhlIGxpc3QgaGVhZGVkIGJ5ICZtc3RhdGUuc2VnIGZvciB0aGUKKyAgY29udGFpbmluZyBtc3RhdGUuCisKKyAgU2VnbWVudCBmbGFncyBjb250cm9sIGFsbG9jYXRpb24vbWVyZ2UvZGVhbGxvY2F0aW9uIHBvbGljaWVzOgorICAqIElmIEVYVEVSTl9CSVQgc2V0LCB0aGVuIHdlIGRpZCBub3QgYWxsb2NhdGUgdGhpcyBzZWdtZW50LAorICAgIGFuZCBzbyBzaG91bGQgbm90IHRyeSB0byBkZWFsbG9jYXRlIG9yIG1lcmdlIHdpdGggb3RoZXJzLgorICAgIChUaGlzIGN1cnJlbnRseSBob2xkcyBvbmx5IGZvciB0aGUgaW5pdGlhbCBzZWdtZW50IHBhc3NlZAorICAgIGludG8gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UuKQorICAqIElmIElTX01NQVBQRURfQklUIHNldCwgdGhlIHNlZ21lbnQgbWF5IGJlIG1lcmdlZCB3aXRoCisgICAgb3RoZXIgc3Vycm91bmRpbmcgbW1hcHBlZCBzZWdtZW50cyBhbmQgdHJpbW1lZC9kZS1hbGxvY2F0ZWQKKyAgICB1c2luZyBtdW5tYXAuCisgICogSWYgbmVpdGhlciBiaXQgaXMgc2V0LCB0aGVuIHRoZSBzZWdtZW50IHdhcyBvYnRhaW5lZCB1c2luZworICAgIE1PUkVDT1JFIHNvIGNhbiBiZSBtZXJnZWQgd2l0aCBzdXJyb3VuZGluZyBNT1JFQ09SRSdkIHNlZ21lbnRzCisgICAgYW5kIGRlYWxsb2NhdGVkL3RyaW1tZWQgdXNpbmcgTU9SRUNPUkUgd2l0aCBuZWdhdGl2ZSBhcmd1bWVudHMuCisqLworCitzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgeworICBjaGFyKiAgICAgICAgYmFzZTsgICAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzICovCisgIHNpemVfdCAgICAgICBzaXplOyAgICAgICAgICAgICAvKiBhbGxvY2F0ZWQgc2l6ZSAqLworICBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQqIG5leHQ7ICAgLyogcHRyIHRvIG5leHQgc2VnbWVudCAqLworICBmbGFnX3QgICAgICAgc2ZsYWdzOyAgICAgICAgICAgLyogbW1hcCBhbmQgZXh0ZXJuIGZsYWcgKi8KK307CisKKyNkZWZpbmUgaXNfbW1hcHBlZF9zZWdtZW50KFMpICAoKFMpLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkKKyNkZWZpbmUgaXNfZXh0ZXJuX3NlZ21lbnQoUykgICAoKFMpLT5zZmxhZ3MgJiBFWFRFUk5fQklUKQorCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCAgbXNlZ21lbnQ7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbXNlZ21lbnRwdHI7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jX3N0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgICBBIG1hbGxvY19zdGF0ZSBob2xkcyBhbGwgb2YgdGhlIGJvb2trZWVwaW5nIGZvciBhIHNwYWNlLgorICAgVGhlIG1haW4gZmllbGRzIGFyZToKKworICBUb3AKKyAgICBUaGUgdG9wbW9zdCBjaHVuayBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzZWdtZW50LiBJdHMgc2l6ZSBpcworICAgIGNhY2hlZCBpbiB0b3BzaXplLiAgVGhlIGFjdHVhbCBzaXplIG9mIHRvcG1vc3Qgc3BhY2UgaXMKKyAgICB0b3BzaXplK1RPUF9GT09UX1NJWkUsIHdoaWNoIGluY2x1ZGVzIHNwYWNlIHJlc2VydmVkIGZvciBhZGRpbmcKKyAgICBmZW5jZXBvc3RzIGFuZCBzZWdtZW50IHJlY29yZHMgaWYgbmVjZXNzYXJ5IHdoZW4gZ2V0dGluZyBtb3JlCisgICAgc3BhY2UgZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHNpemUgYXQgd2hpY2ggdG8gYXV0b3RyaW0gdG9wIGlzCisgICAgY2FjaGVkIGZyb20gbXBhcmFtcyBpbiB0cmltX2NoZWNrLCBleGNlcHQgdGhhdCBpdCBpcyBkaXNhYmxlZCBpZgorICAgIGFuIGF1dG90cmltIGZhaWxzLgorCisgIERlc2lnbmF0ZWQgdmljdGltIChkdikKKyAgICBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgY2h1bmsgZm9yIHNlcnZpY2luZyBzbWFsbCByZXF1ZXN0cyB0aGF0CisgICAgZG9uJ3QgaGF2ZSBleGFjdCBmaXRzLiAgSXQgaXMgbm9ybWFsbHkgdGhlIGNodW5rIHNwbGl0IG9mZiBtb3N0CisgICAgcmVjZW50bHkgdG8gc2VydmljZSBhbm90aGVyIHNtYWxsIHJlcXVlc3QuICBJdHMgc2l6ZSBpcyBjYWNoZWQgaW4KKyAgICBkdnNpemUuIFRoZSBsaW5rIGZpZWxkcyBvZiB0aGlzIGNodW5rIGFyZSBub3QgbWFpbnRhaW5lZCBzaW5jZSBpdAorICAgIGlzIG5vdCBrZXB0IGluIGEgYmluLgorCisgIFNtYWxsQmlucworICAgIEFuIGFycmF5IG9mIGJpbiBoZWFkZXJzIGZvciBmcmVlIGNodW5rcy4gIFRoZXNlIGJpbnMgaG9sZCBjaHVua3MKKyAgICB3aXRoIHNpemVzIGxlc3MgdGhhbiBNSU5fTEFSR0VfU0laRSBieXRlcy4gRWFjaCBiaW4gY29udGFpbnMKKyAgICBjaHVua3Mgb2YgYWxsIHRoZSBzYW1lIHNpemUsIHNwYWNlZCA4IGJ5dGVzIGFwYXJ0LiAgVG8gc2ltcGxpZnkKKyAgICB1c2UgaW4gZG91YmxlLWxpbmtlZCBsaXN0cywgZWFjaCBiaW4gaGVhZGVyIGFjdHMgYXMgYSBtYWxsb2NfY2h1bmsKKyAgICBwb2ludGluZyB0byB0aGUgcmVhbCBmaXJzdCBub2RlLCBpZiBpdCBleGlzdHMgKGVsc2UgcG9pbnRpbmcgdG8KKyAgICBpdHNlbGYpLiAgVGhpcyBhdm9pZHMgc3BlY2lhbC1jYXNpbmcgZm9yIGhlYWRlcnMuICBCdXQgdG8gYXZvaWQKKyAgICB3YXN0ZSwgd2UgYWxsb2NhdGUgb25seSB0aGUgZmQvYmsgcG9pbnRlcnMgb2YgYmlucywgYW5kIHRoZW4gdXNlCisgICAgcmVwb3NpdGlvbmluZyB0cmlja3MgdG8gdHJlYXQgdGhlc2UgYXMgdGhlIGZpZWxkcyBvZiBhIGNodW5rLgorCisgIFRyZWVCaW5zCisgICAgVHJlZWJpbnMgYXJlIHBvaW50ZXJzIHRvIHRoZSByb290cyBvZiB0cmVlcyBob2xkaW5nIGEgcmFuZ2Ugb2YKKyAgICBzaXplcy4gVGhlcmUgYXJlIDIgZXF1YWxseSBzcGFjZWQgdHJlZWJpbnMgZm9yIGVhY2ggcG93ZXIgb2YgdHdvCisgICAgZnJvbSBUUkVFX1NISUZUIHRvIFRSRUVfU0hJRlQrMTYuIFRoZSBsYXN0IGJpbiBob2xkcyBhbnl0aGluZworICAgIGxhcmdlci4KKworICBCaW4gbWFwcworICAgIFRoZXJlIGlzIG9uZSBiaXQgbWFwIGZvciBzbWFsbCBiaW5zICgic21hbGxtYXAiKSBhbmQgb25lIGZvcgorICAgIHRyZWViaW5zICgidHJlZW1hcCkuICBFYWNoIGJpbiBzZXRzIGl0cyBiaXQgd2hlbiBub24tZW1wdHksIGFuZAorICAgIGNsZWFycyB0aGUgYml0IHdoZW4gZW1wdHkuICBCaXQgb3BlcmF0aW9ucyBhcmUgdGhlbiB1c2VkIHRvIGF2b2lkCisgICAgYmluLWJ5LWJpbiBzZWFyY2hpbmcgLS0gbmVhcmx5IGFsbCAic2VhcmNoIiBpcyBkb25lIHdpdGhvdXQgZXZlcgorICAgIGxvb2tpbmcgYXQgYmlucyB0aGF0IHdvbid0IGJlIHNlbGVjdGVkLiAgVGhlIGJpdCBtYXBzCisgICAgY29uc2VydmF0aXZlbHkgdXNlIDMyIGJpdHMgcGVyIG1hcCB3b3JkLCBldmVuIGlmIG9uIDY0Yml0IHN5c3RlbS4KKyAgICBGb3IgYSBnb29kIGRlc2NyaXB0aW9uIG9mIHNvbWUgb2YgdGhlIGJpdC1iYXNlZCB0ZWNobmlxdWVzIHVzZWQKKyAgICBoZXJlLCBzZWUgSGVucnkgUy4gV2FycmVuIEpyJ3MgYm9vayAiSGFja2VyJ3MgRGVsaWdodCIgKGFuZAorICAgIHN1cHBsZW1lbnQgYXQgaHR0cDovL2hhY2tlcnNkZWxpZ2h0Lm9yZy8pLiBNYW55IG9mIHRoZXNlIGFyZQorICAgIGludGVuZGVkIHRvIHJlZHVjZSB0aGUgYnJhbmNoaW5lc3Mgb2YgcGF0aHMgdGhyb3VnaCBtYWxsb2MgZXRjLCBhcworICAgIHdlbGwgYXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbWVtb3J5IGxvY2F0aW9ucyByZWFkIG9yIHdyaXR0ZW4uCisKKyAgU2VnbWVudHMKKyAgICBBIGxpc3Qgb2Ygc2VnbWVudHMgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZAorICAgIHJlcHJlc2VudGluZyB0aGUgaW5pdGlhbCBzcGFjZS4KKworICBBZGRyZXNzIGNoZWNrIHN1cHBvcnQKKyAgICBUaGUgbGVhc3RfYWRkciBmaWVsZCBpcyB0aGUgbGVhc3QgYWRkcmVzcyBldmVyIG9idGFpbmVkIGZyb20KKyAgICBNT1JFQ09SRSBvciBNTUFQLiBBdHRlbXB0ZWQgZnJlZXMgYW5kIHJlYWxsb2NzIG9mIGFueSBhZGRyZXNzIGxlc3MKKyAgICB0aGFuIHRoaXMgYXJlIHRyYXBwZWQgKHVubGVzcyBJTlNFQ1VSRSBpcyBkZWZpbmVkKS4KKworICBNYWdpYyB0YWcKKyAgICBBIGNyb3NzLWNoZWNrIGZpZWxkIHRoYXQgc2hvdWxkIGFsd2F5cyBob2xkIHNhbWUgdmFsdWUgYXMgbXBhcmFtcy5tYWdpYy4KKworICBGbGFncworICAgIEJpdHMgcmVjb3JkaW5nIHdoZXRoZXIgdG8gdXNlIE1NQVAsIGxvY2tzLCBvciBjb250aWd1b3VzIE1PUkVDT1JFCisKKyAgU3RhdGlzdGljcworICAgIEVhY2ggc3BhY2Uga2VlcHMgdHJhY2sgb2YgY3VycmVudCBhbmQgbWF4aW11bSBzeXN0ZW0gbWVtb3J5CisgICAgb2J0YWluZWQgdmlhIE1PUkVDT1JFIG9yIE1NQVAuCisKKyAgVHJpbSBzdXBwb3J0CisgICAgRmllbGRzIGhvbGRpbmcgdGhlIGFtb3VudCBvZiB1bnVzZWQgdG9wbW9zdCBtZW1vcnkgdGhhdCBzaG91bGQgdHJpZ2dlcgorICAgIHRpbW1pbmcsIGFuZCBhIGNvdW50ZXIgdG8gZm9yY2UgcGVyaW9kaWMgc2Nhbm5pbmcgdG8gcmVsZWFzZSB1bnVzZWQKKyAgICBub24tdG9wbW9zdCBzZWdtZW50cy4KKworICBMb2NraW5nCisgICAgSWYgVVNFX0xPQ0tTIGlzIGRlZmluZWQsIHRoZSAibXV0ZXgiIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkCisgICAgYXJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHVzaW5nIHRoaXMgbXNwYWNlLgorCisgIEV4dGVuc2lvbiBzdXBwb3J0CisgICAgQSB2b2lkKiBwb2ludGVyIGFuZCBhIHNpemVfdCBmaWVsZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGhlbHAgaW1wbGVtZW50CisgICAgZXh0ZW5zaW9ucyB0byB0aGlzIG1hbGxvYy4KKyovCisKKy8qIEJpbiB0eXBlcywgd2lkdGhzIGFuZCBzaXplcyAqLworI2RlZmluZSBOU01BTExCSU5TICAgICAgICAoMzJVKQorI2RlZmluZSBOVFJFRUJJTlMgICAgICAgICAoMzJVKQorI2RlZmluZSBTTUFMTEJJTl9TSElGVCAgICAoM1UpCisjZGVmaW5lIFNNQUxMQklOX1dJRFRIICAgIChTSVpFX1RfT05FIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBUUkVFQklOX1NISUZUICAgICAoOFUpCisjZGVmaW5lIE1JTl9MQVJHRV9TSVpFICAgIChTSVpFX1RfT05FIDw8IFRSRUVCSU5fU0hJRlQpCisjZGVmaW5lIE1BWF9TTUFMTF9TSVpFICAgIChNSU5fTEFSR0VfU0laRSAtIFNJWkVfVF9PTkUpCisjZGVmaW5lIE1BWF9TTUFMTF9SRVFVRVNUIChNQVhfU01BTExfU0laRSAtIENIVU5LX0FMSUdOX01BU0sgLSBDSFVOS19PVkVSSEVBRCkKKworc3RydWN0IG1hbGxvY19zdGF0ZSB7CisgIGJpbm1hcF90ICAgc21hbGxtYXA7CisgIGJpbm1hcF90ICAgdHJlZW1hcDsKKyAgc2l6ZV90ICAgICBkdnNpemU7CisgIHNpemVfdCAgICAgdG9wc2l6ZTsKKyAgY2hhciogICAgICBsZWFzdF9hZGRyOworICBtY2h1bmtwdHIgIGR2OworICBtY2h1bmtwdHIgIHRvcDsKKyAgc2l6ZV90ICAgICB0cmltX2NoZWNrOworICBzaXplX3QgICAgIHJlbGVhc2VfY2hlY2tzOworICBzaXplX3QgICAgIG1hZ2ljOworICBtY2h1bmtwdHIgIHNtYWxsYmluc1soTlNNQUxMQklOUysxKSoyXTsKKyAgdGJpbnB0ciAgICB0cmVlYmluc1tOVFJFRUJJTlNdOworICBzaXplX3QgICAgIGZvb3RwcmludDsKKyAgc2l6ZV90ICAgICBtYXhfZm9vdHByaW50OworICBmbGFnX3QgICAgIG1mbGFnczsKKyNpZiBVU0VfTE9DS1MKKyAgTUxPQ0tfVCAgICBtdXRleDsgICAgIC8qIGxvY2F0ZSBsb2NrIGFtb25nIGZpZWxkcyB0aGF0IHJhcmVseSBjaGFuZ2UgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKyAgbXNlZ21lbnQgICBzZWc7CisgIHZvaWQqICAgICAgZXh0cDsgICAgICAvKiBVbnVzZWQgYnV0IGF2YWlsYWJsZSBmb3IgZXh0ZW5zaW9ucyAqLworICBzaXplX3QgICAgIGV4dHM7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc3RhdGUqICAgIG1zdGF0ZTsKKworLyogLS0tLS0tLS0tLS0tLSBHbG9iYWwgbWFsbG9jX3N0YXRlIGFuZCBtYWxsb2NfcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgbWFsbG9jX3BhcmFtcyBob2xkcyBnbG9iYWwgcHJvcGVydGllcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlCisgIGR5bmFtaWNhbGx5IHNldCB1c2luZyBtYWxsb3B0LiBUaGVyZSBpcyBhIHNpbmdsZSBpbnN0YW5jZSwgbXBhcmFtcywKKyAgaW5pdGlhbGl6ZWQgaW4gaW5pdF9tcGFyYW1zLiBOb3RlIHRoYXQgdGhlIG5vbi16ZXJvbmVzcyBvZiAibWFnaWMiCisgIGFsc28gc2VydmVzIGFzIGFuIGluaXRpYWxpemF0aW9uIGZsYWcuCisqLworCitzdHJ1Y3QgbWFsbG9jX3BhcmFtcyB7CisgIHZvbGF0aWxlIHNpemVfdCBtYWdpYzsKKyAgc2l6ZV90IHBhZ2Vfc2l6ZTsKKyAgc2l6ZV90IGdyYW51bGFyaXR5OworICBzaXplX3QgbW1hcF90aHJlc2hvbGQ7CisgIHNpemVfdCB0cmltX3RocmVzaG9sZDsKKyAgZmxhZ190IGRlZmF1bHRfbWZsYWdzOworfTsKKworc3RhdGljIHN0cnVjdCBtYWxsb2NfcGFyYW1zIG1wYXJhbXM7CisKKy8qIEVuc3VyZSBtcGFyYW1zIGluaXRpYWxpemVkICovCisjZGVmaW5lIGVuc3VyZV9pbml0aWFsaXphdGlvbigpICgodm9pZCkobXBhcmFtcy5tYWdpYyAhPSAwIHx8IGluaXRfbXBhcmFtcygpKSkKKworI2lmICFPTkxZX01TUEFDRVMKKworLyogVGhlIGdsb2JhbCBtYWxsb2Nfc3RhdGUgdXNlZCBmb3IgYWxsIG5vbi0ibXNwYWNlIiBjYWxscyAqLworc3RhdGljIHN0cnVjdCBtYWxsb2Nfc3RhdGUgX2dtXzsKKyNkZWZpbmUgZ20gICAgICAgICAgICAgICAgICgmX2dtXykKKyNkZWZpbmUgaXNfZ2xvYmFsKE0pICAgICAgICgoTSkgPT0gJl9nbV8pCisKKyNlbmRpZiAvKiAhT05MWV9NU1BBQ0VTICovCisKKyNkZWZpbmUgaXNfaW5pdGlhbGl6ZWQoTSkgICgoTSktPnRvcCAhPSAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzeXN0ZW0gYWxsb2Mgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBPcGVyYXRpb25zIG9uIG1mbGFncyAqLworCisjZGVmaW5lIHVzZV9sb2NrKE0pICAgICAgICAgICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9MT0NLX0JJVCkKKyNkZWZpbmUgZW5hYmxlX2xvY2soTSkgICAgICAgICgoTSktPm1mbGFncyB8PSAgVVNFX0xPQ0tfQklUKQorI2RlZmluZSBkaXNhYmxlX2xvY2soTSkgICAgICAgKChNKS0+bWZsYWdzICY9IH5VU0VfTE9DS19CSVQpCisKKyNkZWZpbmUgdXNlX21tYXAoTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX01NQVBfQklUKQorI2RlZmluZSBlbmFibGVfbW1hcChNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTU1BUF9CSVQpCisjZGVmaW5lIGRpc2FibGVfbW1hcChNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9NTUFQX0JJVCkKKworI2RlZmluZSB1c2Vfbm9uY29udGlndW91cyhNKSAgKChNKS0+bWZsYWdzICYgICBVU0VfTk9OQ09OVElHVU9VU19CSVQpCisjZGVmaW5lIGRpc2FibGVfY29udGlndW91cyhNKSAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9OT05DT05USUdVT1VTX0JJVCkKKworI2RlZmluZSBzZXRfbG9jayhNLEwpXAorICgoTSktPm1mbGFncyA9IChMKT9cCisgICgoTSktPm1mbGFncyB8IFVTRV9MT0NLX0JJVCkgOlwKKyAgKChNKS0+bWZsYWdzICYgflVTRV9MT0NLX0JJVCkpCisKKy8qIHBhZ2UtYWxpZ24gYSBzaXplICovCisjZGVmaW5lIHBhZ2VfYWxpZ24oUylcCisgKCgoUykgKyAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgJiB+KG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpCisKKy8qIGdyYW51bGFyaXR5LWFsaWduIGEgc2l6ZSAqLworI2RlZmluZSBncmFudWxhcml0eV9hbGlnbihTKVwKKyAgKCgoUykgKyAobXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKVwKKyAgICYgfihtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpCisKKworLyogRm9yIG1tYXAsIHVzZSBncmFudWxhcml0eSBhbGlnbm1lbnQgb24gd2luZG93cywgZWxzZSBwYWdlLWFsaWduICovCisjaWZkZWYgV0lOMzIKKyNkZWZpbmUgbW1hcF9hbGlnbihTKSBncmFudWxhcml0eV9hbGlnbihTKQorI2Vsc2UKKyNkZWZpbmUgbW1hcF9hbGlnbihTKSBwYWdlX2FsaWduKFMpCisjZW5kaWYKKworLyogRm9yIHN5c19hbGxvYywgZW5vdWdoIHBhZGRpbmcgdG8gZW5zdXJlIGNhbiBtYWxsb2MgcmVxdWVzdCBvbiBzdWNjZXNzICovCisjZGVmaW5lIFNZU19BTExPQ19QQURESU5HIChUT1BfRk9PVF9TSVpFICsgTUFMTE9DX0FMSUdOTUVOVCkKKworI2RlZmluZSBpc19wYWdlX2FsaWduZWQoUylcCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpID09IDApCisjZGVmaW5lIGlzX2dyYW51bGFyaXR5X2FsaWduZWQoUylcCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkgPT0gMCkKKworLyogIFRydWUgaWYgc2VnbWVudCBTIGhvbGRzIGFkZHJlc3MgQSAqLworI2RlZmluZSBzZWdtZW50X2hvbGRzKFMsIEEpXAorICAoKGNoYXIqKShBKSA+PSBTLT5iYXNlICYmIChjaGFyKikoQSkgPCBTLT5iYXNlICsgUy0+c2l6ZSkKKworLyogUmV0dXJuIHNlZ21lbnQgaG9sZGluZyBnaXZlbiBhZGRyZXNzICovCitzdGF0aWMgbXNlZ21lbnRwdHIgc2VnbWVudF9ob2xkaW5nKG1zdGF0ZSBtLCBjaGFyKiBhZGRyKSB7CisgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgZm9yICg7OykgeworICAgIGlmIChhZGRyID49IHNwLT5iYXNlICYmIGFkZHIgPCBzcC0+YmFzZSArIHNwLT5zaXplKQorICAgICAgcmV0dXJuIHNwOworICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIHNlZ21lbnQgY29udGFpbnMgYSBzZWdtZW50IGxpbmsgKi8KK3N0YXRpYyBpbnQgaGFzX3NlZ21lbnRfbGluayhtc3RhdGUgbSwgbXNlZ21lbnRwdHIgc3MpIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKChjaGFyKilzcCA+PSBzcy0+YmFzZSAmJiAoY2hhciopc3AgPCBzcy0+YmFzZSArIHNzLT5zaXplKQorICAgICAgcmV0dXJuIDE7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKworI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQorI2RlZmluZSBzaG91bGRfdHJpbShNLHMpICAoKHMpID4gKE0pLT50cmltX2NoZWNrKQorI2Vsc2UgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgwKQorI2VuZGlmIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisKKy8qCisgIFRPUF9GT09UX1NJWkUgaXMgcGFkZGluZyBhdCB0aGUgZW5kIG9mIGEgc2VnbWVudCwgaW5jbHVkaW5nIHNwYWNlCisgIHRoYXQgbWF5IGJlIG5lZWRlZCB0byBwbGFjZSBzZWdtZW50IHJlY29yZHMgYW5kIGZlbmNlcG9zdHMgd2hlbiBuZXcKKyAgbm9uY29udGlndW91cyBzZWdtZW50cyBhcmUgYWRkZWQuCisqLworI2RlZmluZSBUT1BfRk9PVF9TSVpFXAorICAoYWxpZ25fb2Zmc2V0KGNodW5rMm1lbSgwKSkrcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpK01JTl9DSFVOS19TSVpFKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEhvb2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFBSRUFDVElPTiBzaG91bGQgYmUgZGVmaW5lZCB0byByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbmQgbm9uemVybyBvbgorICBmYWlsdXJlLiBJZiB5b3UgYXJlIG5vdCB1c2luZyBsb2NraW5nLCB5b3UgY2FuIHJlZGVmaW5lIHRoZXNlIHRvIGRvCisgIGFueXRoaW5nIHlvdSBsaWtlLgorKi8KKworI2lmIFVTRV9MT0NLUworCisjZGVmaW5lIFBSRUFDVElPTihNKSAgKCh1c2VfbG9jayhNKSk/IEFDUVVJUkVfTE9DSygmKE0pLT5tdXRleCkgOiAwKQorI2RlZmluZSBQT1NUQUNUSU9OKE0pIHsgaWYgKHVzZV9sb2NrKE0pKSBSRUxFQVNFX0xPQ0soJihNKS0+bXV0ZXgpOyB9CisjZWxzZSAvKiBVU0VfTE9DS1MgKi8KKworI2lmbmRlZiBQUkVBQ1RJT04KKyNkZWZpbmUgUFJFQUNUSU9OKE0pICgwKQorI2VuZGlmICAvKiBQUkVBQ1RJT04gKi8KKworI2lmbmRlZiBQT1NUQUNUSU9OCisjZGVmaW5lIFBPU1RBQ1RJT04oTSkKKyNlbmRpZiAgLyogUE9TVEFDVElPTiAqLworCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKy8qCisgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGlzIHRyaWdnZXJlZCB1cG9uIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMuCisgIFVTQUdFX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgb24gZGV0ZWN0ZWQgYmFkIGZyZWVzIGFuZAorICByZWFsbG9jcy4gVGhlIGFyZ3VtZW50IHAgaXMgYW4gYWRkcmVzcyB0aGF0IG1pZ2h0IGhhdmUgdHJpZ2dlcmVkIHRoZQorICBmYXVsdC4gSXQgaXMgaWdub3JlZCBieSB0aGUgdHdvIHByZWRlZmluZWQgYWN0aW9ucywgYnV0IG1pZ2h0IGJlCisgIHVzZWZ1bCBpbiBjdXN0b20gYWN0aW9ucyB0aGF0IHRyeSB0byBoZWxwIGRpYWdub3NlIGVycm9ycy4KKyovCisKKyNpZiBQUk9DRUVEX09OX0VSUk9SCisKKy8qIEEgY291bnQgb2YgdGhlIG51bWJlciBvZiBjb3JydXB0aW9uIGVycm9ycyBjYXVzaW5nIHJlc2V0cyAqLworaW50IG1hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50OworCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovCitzdGF0aWMgdm9pZCByZXNldF9vbl9lcnJvcihtc3RhdGUgbSk7CisKKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgIHJlc2V0X29uX2Vycm9yKG0pCisjZGVmaW5lIFVTQUdFX0VSUk9SX0FDVElPTihtLCBwKQorCisjZWxzZSAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKyNpZm5kZWYgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04KKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgQUJPUlQKKyNlbmRpZiAvKiBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiAqLworCisjaWZuZGVmIFVTQUdFX0VSUk9SX0FDVElPTgorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSxwKSBBQk9SVAorI2VuZGlmIC8qIFVTQUdFX0VSUk9SX0FDVElPTiAqLworCisjZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgISBERUJVRworCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQorI2RlZmluZSBjaGVja19tbWFwcGVkX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApCisKKyNlbHNlIC8qIERFQlVHICovCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKSAgICAgICBkb19jaGVja19mcmVlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKSAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfdG9wX2NodW5rKE0sUCkgICAgICAgIGRvX2NoZWNrX3RvcF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKSBkb19jaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkgICAgICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKE0pCisKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQqIG1lbSwgc2l6ZV90IHMpOworc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOworc3RhdGljIHZvaWQgICBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSk7CitzdGF0aWMgaW50ICAgIGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCk7CitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSk7CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbmRleGluZyBCaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBpc19zbWFsbChzKSAgICAgICAgICgoKHMpID4+IFNNQUxMQklOX1NISUZUKSA8IE5TTUFMTEJJTlMpCisjZGVmaW5lIHNtYWxsX2luZGV4KHMpICAgICAgKChzKSAgPj4gU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIHNtYWxsX2luZGV4MnNpemUoaSkgKChpKSAgPDwgU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIE1JTl9TTUFMTF9JTkRFWCAgICAgKHNtYWxsX2luZGV4KE1JTl9DSFVOS19TSVpFKSkKKworLyogYWRkcmVzc2luZyBieSBpbmRleC4gU2VlIGFib3ZlIGFib3V0IHNtYWxsYmluIHJlcG9zaXRpb25pbmcgKi8KKyNkZWZpbmUgc21hbGxiaW5fYXQoTSwgaSkgICAoKHNiaW5wdHIpKChjaGFyKikmKChNKS0+c21hbGxiaW5zWyhpKTw8MV0pKSkKKyNkZWZpbmUgdHJlZWJpbl9hdChNLGkpICAgICAoJigoTSktPnRyZWViaW5zW2ldKSkKKworLyogYXNzaWduIHRyZWUgaW5kZXggZm9yIHNpemUgUyB0byB2YXJpYWJsZSBJLiBVc2UgeDg2IGFzbSBpZiBwb3NzaWJsZSAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSztcCisgICAgX19hc21fXygiYnNybFx0JTEsICUwXG5cdCIgOiAiPXIiIChLKSA6ICJybSIgIChYKSk7XAorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XAorICB9XAorfQorCisjZWxpZiBkZWZpbmVkIChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBLID0gX2JpdF9zY2FuX3JldmVyc2UgKFgpOyBcCisgICAgSSA9ICAoYmluZGV4X3QpKChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpKTtcCisgIH1cCit9CisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IEs7XAorICAgIF9CaXRTY2FuUmV2ZXJzZSgoRFdPUkQgKikgJkssIFgpO1wKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKworI2Vsc2UgLyogR05VQyAqLworI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBZID0gKHVuc2lnbmVkIGludClYO1wKKyAgICB1bnNpZ25lZCBpbnQgTiA9ICgoWSAtIDB4MTAwKSA+PiAxNikgJiA4O1wKKyAgICB1bnNpZ25lZCBpbnQgSyA9ICgoKFkgPDw9IE4pIC0gMHgxMDAwKSA+PiAxNikgJiA0O1wKKyAgICBOICs9IEs7XAorICAgIE4gKz0gSyA9ICgoKFkgPDw9IEspIC0gMHg0MDAwKSA+PiAxNikgJiAyO1wKKyAgICBLID0gMTQgLSBOICsgKChZIDw8PSBLKSA+PiAxNSk7XAorICAgIEkgPSAoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKTtcCisgIH1cCit9CisjZW5kaWYgLyogR05VQyAqLworCisvKiBCaXQgcmVwcmVzZW50aW5nIG1heGltdW0gcmVzb2x2ZWQgc2l6ZSBpbiBhIHRyZWViaW4gYXQgaSAqLworI2RlZmluZSBiaXRfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKGkgPT0gTlRSRUVCSU5TLTEpPyAoU0laRV9UX0JJVFNJWkUtMSkgOiAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKQorCisvKiBTaGlmdCBwbGFjaW5nIG1heGltdW0gcmVzb2x2ZWQgYml0IGluIGEgdHJlZWJpbiBhdCBpIGFzIHNpZ24gYml0ICovCisjZGVmaW5lIGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoKGkgPT0gTlRSRUVCSU5TLTEpPyAwIDogXAorICAgICgoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkgLSAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKSkpCisKKy8qIFRoZSBzaXplIG9mIHRoZSBzbWFsbGVzdCBjaHVuayBoZWxkIGluIGJpbiB3aXRoIGluZGV4IGkgKi8KKyNkZWZpbmUgbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoKFNJWkVfVF9PTkUgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUKSkgfCAgXAorICAgKCgoc2l6ZV90KSgoaSkgJiBTSVpFX1RfT05FKSkgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMSkpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGJpbiBtYXBzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGJpdCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGluZGV4ICovCisjZGVmaW5lIGlkeDJiaXQoaSkgICAgICAgICAgICAgICgoYmlubWFwX3QpKDEpIDw8IChpKSkKKworLyogTWFyay9DbGVhciBiaXRzIHdpdGggZ2l2ZW4gaW5kZXggKi8KKyNkZWZpbmUgbWFya19zbWFsbG1hcChNLGkpICAgICAgKChNKS0+c21hbGxtYXAgfD0gIGlkeDJiaXQoaSkpCisjZGVmaW5lIGNsZWFyX3NtYWxsbWFwKE0saSkgICAgICgoTSktPnNtYWxsbWFwICY9IH5pZHgyYml0KGkpKQorI2RlZmluZSBzbWFsbG1hcF9pc19tYXJrZWQoTSxpKSAoKE0pLT5zbWFsbG1hcCAmICAgaWR4MmJpdChpKSkKKworI2RlZmluZSBtYXJrX3RyZWVtYXAoTSxpKSAgICAgICAoKE0pLT50cmVlbWFwICB8PSAgaWR4MmJpdChpKSkKKyNkZWZpbmUgY2xlYXJfdHJlZW1hcChNLGkpICAgICAgKChNKS0+dHJlZW1hcCAgJj0gfmlkeDJiaXQoaSkpCisjZGVmaW5lIHRyZWVtYXBfaXNfbWFya2VkKE0saSkgICgoTSktPnRyZWVtYXAgICYgICBpZHgyYml0KGkpKQorCisvKiBpc29sYXRlIHRoZSBsZWFzdCBzZXQgYml0IG9mIGEgYml0bWFwICovCisjZGVmaW5lIGxlYXN0X2JpdCh4KSAgICAgICAgICgoeCkgJiAtKHgpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBsZWZ0X2JpdHMoeCkgICAgICAgICAoKHg8PDEpIHwgLSh4PDwxKSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2Ygb3IgZXF1YWwgdG8gbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgc2FtZV9vcl9sZWZ0X2JpdHMoeCkgKCh4KSB8IC0oeCkpCisKKy8qIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYml0LiBVc2UgeDg2IGFzbSBpZiBwb3NzaWJsZSAqLworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgX19hc21fXygiYnNmbFx0JTEsICUwXG5cdCIgOiAiPXIiIChKKSA6ICJybSIgKFgpKTtcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbGlmIGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgSiA9IF9iaXRfc2Nhbl9mb3J3YXJkIChYKTsgXAorICBJID0gKGJpbmRleF90KUo7XAorfQorCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgSjtcCisgIF9CaXRTY2FuRm9yd2FyZCgoRFdPUkQgKikgJkosIFgpO1wKKyAgSSA9IChiaW5kZXhfdClKO1wKK30KKworI2VsaWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKSBJID0gZmZzKFgpLTEKKworI2Vsc2UKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IFkgPSBYIC0gMTtcCisgIHVuc2lnbmVkIGludCBLID0gWSA+PiAoMTYtNCkgJiAxNjtcCisgIHVuc2lnbmVkIGludCBOID0gSzsgICAgICAgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICg4LTMpICYgIDg7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoNC0yKSAmICA0OyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDItMSkgJiAgMjsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICgxLTApICYgIDE7ICBZID4+PSBLO1wKKyAgSSA9IChiaW5kZXhfdCkoTiArIFkpO1wKK30KKyNlbmRpZiAvKiBHTlVDICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUnVudGltZSBDaGVjayBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRm9yIHNlY3VyaXR5LCB0aGUgbWFpbiBpbnZhcmlhbnQgaXMgdGhhdCBtYWxsb2MvZnJlZS9ldGMgbmV2ZXIKKyAgd3JpdGVzIHRvIGEgc3RhdGljIGFkZHJlc3Mgb3RoZXIgdGhhbiBtYWxsb2Nfc3RhdGUsIHVubGVzcyBzdGF0aWMKKyAgbWFsbG9jX3N0YXRlIGl0c2VsZiBoYXMgYmVlbiBjb3JydXB0ZWQsIHdoaWNoIGNhbm5vdCBvY2N1ciB2aWEKKyAgbWFsbG9jIChiZWNhdXNlIG9mIHRoZXNlIGNoZWNrcykuIEluIGVzc2VuY2UgdGhpcyBtZWFucyB0aGF0IHdlCisgIGJlbGlldmUgYWxsIHBvaW50ZXJzLCBzaXplcywgbWFwcyBldGMgaGVsZCBpbiBtYWxsb2Nfc3RhdGUsIGJ1dAorICBjaGVjayBhbGwgb2YgdGhvc2UgbGlua2VkIG9yIG9mZnNldHRlZCBmcm9tIG90aGVyIGVtYmVkZGVkIGRhdGEKKyAgc3RydWN0dXJlcy4gIFRoZXNlIGNoZWNrcyBhcmUgaW50ZXJzcGVyc2VkIHdpdGggbWFpbiBjb2RlIGluIGEgd2F5CisgIHRoYXQgdGVuZHMgdG8gbWluaW1pemUgdGhlaXIgcnVuLXRpbWUgY29zdC4KKworICBXaGVuIEZPT1RFUlMgaXMgZGVmaW5lZCwgaW4gYWRkaXRpb24gdG8gcmFuZ2UgY2hlY2tpbmcsIHdlIGFsc28KKyAgdmVyaWZ5IGZvb3RlciBmaWVsZHMgb2YgaW51c2UgY2h1bmtzLCB3aGljaCBjYW4gYmUgdXNlZCBndWFyYW50ZWUKKyAgdGhhdCB0aGUgbXN0YXRlIGNvbnRyb2xsaW5nIG1hbGxvYy9mcmVlIGlzIGludGFjdC4gIFRoaXMgaXMgYQorICBzdHJlYW1saW5lZCB2ZXJzaW9uIG9mIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYnkgV2lsbGlhbSBSb2JlcnRzb24KKyAgZXQgYWwgaW4gIlJ1bi10aW1lIERldGVjdGlvbiBvZiBIZWFwLWJhc2VkIE92ZXJmbG93cyIgTElTQScwMworICBodHRwOi8vd3d3LnVzZW5peC5vcmcvZXZlbnRzL2xpc2EwMy90ZWNoL3JvYmVydHNvbi5odG1sIFRoZSBmb290ZXIKKyAgb2YgYW4gaW51c2UgY2h1bmsgaG9sZHMgdGhlIHhvciBvZiBpdHMgbXN0YXRlIGFuZCBhIHJhbmRvbSBzZWVkLAorICB0aGF0IGlzIGNoZWNrZWQgdXBvbiBjYWxscyB0byBmcmVlKCkgYW5kIHJlYWxsb2MoKS4gIFRoaXMgaXMKKyAgKHByb2JhYmxpc3RpY2FsbHkpIHVuZ3Vlc3NhYmxlIGZyb20gb3V0c2lkZSB0aGUgcHJvZ3JhbSwgYnV0IGNhbiBiZQorICBjb21wdXRlZCBieSBhbnkgY29kZSBzdWNjZXNzZnVsbHkgbWFsbG9jJ2luZyBhbnkgY2h1bmssIHNvIGRvZXMgbm90CisgIGl0c2VsZiBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBjb2RlIHRoYXQgaGFzIGFscmVhZHkgYnJva2VuCisgIHNlY3VyaXR5IHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gIFVubGlrZSBSb2JlcnRzb24gZXQgYWwsIHdlCisgIGFsd2F5cyBkeW5hbWljYWxseSBjaGVjayBhZGRyZXNzZXMgb2YgYWxsIG9mZnNldCBjaHVua3MgKHByZXZpb3VzLAorICBuZXh0LCBldGMpLiBUaGlzIHR1cm5zIG91dCB0byBiZSBjaGVhcGVyIHRoYW4gcmVseWluZyBvbiBoYXNoZXMuCisqLworCisjaWYgIUlOU0VDVVJFCisvKiBDaGVjayBpZiBhZGRyZXNzIGEgaXMgYXQgbGVhc3QgYXMgaGlnaCBhcyBhbnkgZnJvbSBNT1JFQ09SRSBvciBNTUFQICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKChjaGFyKikoYSkgPj0gKE0pLT5sZWFzdF9hZGRyKQorLyogQ2hlY2sgaWYgYWRkcmVzcyBvZiBuZXh0IGNodW5rIG4gaXMgaGlnaGVyIHRoYW4gYmFzZSBjaHVuayBwICovCisjZGVmaW5lIG9rX25leHQocCwgbikgICAgKChjaGFyKikocCkgPCAoY2hhciopKG4pKQorLyogQ2hlY2sgaWYgcCBoYXMgaXRzIGNpbnVzZSBiaXQgb24gKi8KKyNkZWZpbmUgb2tfY2ludXNlKHApICAgICBjaW51c2UocCkKKy8qIENoZWNrIGlmIHAgaGFzIGl0cyBwaW51c2UgYml0IG9uICovCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgcGludXNlKHApCisKKyNlbHNlIC8qICFJTlNFQ1VSRSAqLworI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgxKQorI2RlZmluZSBva19uZXh0KGIsIG4pICAgICgxKQorI2RlZmluZSBva19jaW51c2UocCkgICAgICgxKQorI2RlZmluZSBva19waW51c2UocCkgICAgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisjaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQorLyogQ2hlY2sgaWYgKGFsbGVnZWQpIG1zdGF0ZSBtIGhhcyBleHBlY3RlZCBtYWdpYyBmaWVsZCAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgoTSktPm1hZ2ljID09IG1wYXJhbXMubWFnaWMpCisjZWxzZSAgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgxKQorI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKworCisvKiBJbiBnY2MsIHVzZSBfX2J1aWx0aW5fZXhwZWN0IHRvIG1pbmltaXplIGltcGFjdCBvZiBjaGVja3MgKi8KKyNpZiAhSU5TRUNVUkUKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCisjZGVmaW5lIFJUQ0hFQ0soZSkgIF9fYnVpbHRpbl9leHBlY3QoZSwgMSkKKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKGUpCisjZW5kaWYgLyogR05VQyAqLworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIFJUQ0hFQ0soZSkgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisvKiBtYWNyb3MgdG8gc2V0IHVwIGludXNlIGNodW5rcyB3aXRoIG9yIHdpdGhvdXQgZm9vdGVycyAqLworCisjaWYgIUZPT1RFUlMKKworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpCisKKy8qIFNldCBjaW51c2UgYml0IGFuZCBwaW51c2UgYml0IG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgY2ludXNlIGFuZCBwaW51c2Ugb2YgdGhpcyBjaHVuayBhbmQgcGludXNlIG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgc2l6ZSwgY2ludXNlIGFuZCBwaW51c2UgYml0IG9mIHRoaXMgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkpCisKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKworLyogU2V0IGZvb3Qgb2YgaW51c2UgY2h1bmsgdG8gYmUgeG9yIG9mIG1zdGF0ZSBhbmQgc2VlZCAqLworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpXAorICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKChzaXplX3QpKE0pIF4gbXBhcmFtcy5tYWdpYykpCisKKyNkZWZpbmUgZ2V0X21zdGF0ZV9mb3IocClcCisgICgobXN0YXRlKSgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArXAorICAgIChjaHVua3NpemUocCkpKSktPnByZXZfZm9vdCBeIG1wYXJhbXMubWFnaWMpKQorCisjZGVmaW5lIHNldF9pbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLCBcCisgIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksXAorIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICBtYXJrX2ludXNlX2Zvb3QoTSwgcCwgcykpCisKKyNlbmRpZiAvKiAhRk9PVEVSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNldHRpbmcgbXBhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIG1wYXJhbXMgKi8KK3N0YXRpYyBpbnQgaW5pdF9tcGFyYW1zKHZvaWQpIHsKKyNpZmRlZiBORUVEX0dMT0JBTF9MT0NLX0lOSVQKKyAgaWYgKG1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzIDw9IDApCisgICAgaW5pdF9tYWxsb2NfZ2xvYmFsX211dGV4KCk7CisjZW5kaWYKKworICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworICBpZiAobXBhcmFtcy5tYWdpYyA9PSAwKSB7CisgICAgc2l6ZV90IG1hZ2ljOworICAgIHNpemVfdCBwc2l6ZTsKKyAgICBzaXplX3QgZ3NpemU7CisKKyNpZm5kZWYgV0lOMzIKKyAgICBwc2l6ZSA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKKyAgICBnc2l6ZSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8gREVGQVVMVF9HUkFOVUxBUklUWSA6IHBzaXplKTsKKyNlbHNlIC8qIFdJTjMyICovCisgICAgeworICAgICAgU1lTVEVNX0lORk8gc3lzdGVtX2luZm87CisgICAgICBHZXRTeXN0ZW1JbmZvKCZzeXN0ZW1faW5mbyk7CisgICAgICBwc2l6ZSA9IHN5c3RlbV9pbmZvLmR3UGFnZVNpemU7CisgICAgICBnc2l6ZSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8KKwkgICAgICAgREVGQVVMVF9HUkFOVUxBUklUWSA6IHN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5KTsKKyAgICB9CisjZW5kaWYgLyogV0lOMzIgKi8KKworICAgIC8qIFNhbml0eS1jaGVjayBjb25maWd1cmF0aW9uOgorICAgICAgIHNpemVfdCBtdXN0IGJlIHVuc2lnbmVkIGFuZCBhcyB3aWRlIGFzIHBvaW50ZXIgdHlwZS4KKyAgICAgICBpbnRzIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcy4KKyAgICAgICBhbGlnbm1lbnQgbXVzdCBiZSBhdCBsZWFzdCA4LgorICAgICAgIEFsaWdubWVudCwgbWluIGNodW5rIHNpemUsIGFuZCBwYWdlIHNpemUgbXVzdCBhbGwgYmUgcG93ZXJzIG9mIDIuCisgICAgKi8KKyAgICBpZiAoKHNpemVvZihzaXplX3QpICE9IHNpemVvZihjaGFyKikpIHx8CisJKE1BWF9TSVpFX1QgPCBNSU5fQ0hVTktfU0laRSkgIHx8CisJKHNpemVvZihpbnQpIDwgNCkgIHx8CisJKE1BTExPQ19BTElHTk1FTlQgPCAoc2l6ZV90KThVKSB8fAorCSgoTUFMTE9DX0FMSUdOTUVOVCAmIChNQUxMT0NfQUxJR05NRU5ULVNJWkVfVF9PTkUpKSAhPSAwKSB8fAorCSgoTUNIVU5LX1NJWkUgICAgICAmIChNQ0hVTktfU0laRS1TSVpFX1RfT05FKSkgICAgICAhPSAwKSB8fAorCSgoZ3NpemUgICAgICAgICAgICAmIChnc2l6ZS1TSVpFX1RfT05FKSkgICAgICAgICAgICAhPSAwKSB8fAorCSgocHNpemUgICAgICAgICAgICAmIChwc2l6ZS1TSVpFX1RfT05FKSkgICAgICAgICAgICAhPSAwKSkKKyAgICAgIEFCT1JUOworCisgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IGdzaXplOworICAgIG1wYXJhbXMucGFnZV9zaXplID0gcHNpemU7CisgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IERFRkFVTFRfTU1BUF9USFJFU0hPTEQ7CisgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IERFRkFVTFRfVFJJTV9USFJFU0hPTEQ7CisjaWYgTU9SRUNPUkVfQ09OVElHVU9VUworICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVR8VVNFX01NQVBfQklUOworI2Vsc2UgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVHxVU0VfTk9OQ09OVElHVU9VU19CSVQ7CisjZW5kaWYgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworCisjaWYgIU9OTFlfTVNQQUNFUworICAgIC8qIFNldCB1cCBsb2NrIGZvciBtYWluIG1hbGxvYyBhcmVhICovCisgICAgZ20tPm1mbGFncyA9IG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3M7CisgICAgSU5JVElBTF9MT0NLKCZnbS0+bXV0ZXgpOworI2VuZGlmCisKKyNpZiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpCisgICAgeworI2lmIFVTRV9ERVZfUkFORE9NCisgICAgICBpbnQgZmQ7CisgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZltzaXplb2Yoc2l6ZV90KV07CisgICAgICAvKiBUcnkgdG8gdXNlIC9kZXYvdXJhbmRvbSwgZWxzZSBmYWxsIGJhY2sgb24gdXNpbmcgdGltZSAqLworICAgICAgaWYgKChmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKSkgPj0gMCAmJgorCSAgcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPT0gc2l6ZW9mKGJ1ZikpIHsKKwltYWdpYyA9ICooKHNpemVfdCAqKSBidWYpOworCWNsb3NlKGZkKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBVU0VfREVWX1JBTkRPTSAqLworI2lmZGVmIFdJTjMyCisJbWFnaWMgPSAoc2l6ZV90KShHZXRUaWNrQ291bnQoKSBeIChzaXplX3QpMHg1NTU1NTU1NVUpOworI2Vsc2UKKyAgICAgIG1hZ2ljID0gKHNpemVfdCkodGltZSgwKSBeIChzaXplX3QpMHg1NTU1NTU1NVUpOworI2VuZGlmCisgICAgICBtYWdpYyB8PSAoc2l6ZV90KThVOyAgICAvKiBlbnN1cmUgbm9uemVybyAqLworICAgICAgbWFnaWMgJj0gfihzaXplX3QpN1U7ICAgLyogaW1wcm92ZSBjaGFuY2VzIG9mIGZhdWx0IGZvciBiYWQgdmFsdWVzICovCisgICAgfQorI2Vsc2UgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworICAgIG1hZ2ljID0gKHNpemVfdCkweDU4NTg1ODU4VTsKKyNlbmRpZiAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisKKyAgICBtcGFyYW1zLm1hZ2ljID0gbWFnaWM7CisgIH0KKworICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworICByZXR1cm4gMTsKK30KKworLyogc3VwcG9ydCBmb3IgbWFsbG9wdCAqLworc3RhdGljIGludCBjaGFuZ2VfbXBhcmFtKGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICBzaXplX3QgdmFsID0gKHZhbHVlID09IC0xKT8gTUFYX1NJWkVfVCA6IChzaXplX3QpdmFsdWU7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBzd2l0Y2gocGFyYW1fbnVtYmVyKSB7CisgIGNhc2UgTV9UUklNX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLnRyaW1fdGhyZXNob2xkID0gdmFsOworICAgIHJldHVybiAxOworICBjYXNlIE1fR1JBTlVMQVJJVFk6CisgICAgaWYgKHZhbCA+PSBtcGFyYW1zLnBhZ2Vfc2l6ZSAmJiAoKHZhbCAmICh2YWwtMSkpID09IDApKSB7CisgICAgICBtcGFyYW1zLmdyYW51bGFyaXR5ID0gdmFsOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworICBjYXNlIE1fTU1BUF9USFJFU0hPTEQ6CisgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IHZhbDsKKyAgICByZXR1cm4gMTsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisjaWYgREVCVUcKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgYW55IGNodW5rLCB3aGV0aGVyIGZyZWUsIGludXNlLCBtbWFwcGVkIGV0YyAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiB0b3AgY2h1bmsgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKXApOworICBzaXplX3QgIHN6ID0gcC0+aGVhZCAmIH5JTlVTRV9CSVRTOyAvKiB0aGlyZC1sb3dlc3QgYml0IGNhbiBiZSBzZXQhICovCisgIGFzc2VydChzcCAhPSAwKTsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKKyAgYXNzZXJ0KHN6ID09IG0tPnRvcHNpemUpOworICBhc3NlcnQoc3ogPiAwKTsKKyAgYXNzZXJ0KHN6ID09ICgoc3AtPmJhc2UgKyBzcC0+c2l6ZSkgLSAoY2hhciopcCkgLSBUT1BfRk9PVF9TSVpFKTsKKyAgYXNzZXJ0KHBpbnVzZShwKSk7CisgIGFzc2VydCghcGludXNlKGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KSkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIChpbnVzZSkgbW1hcHBlZCBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7CisgIHNpemVfdCBsZW4gPSAoc3ogKyAocC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUKSArIE1NQVBfRk9PVF9QQUQpOworICBhc3NlcnQoaXNfbW1hcHBlZChwKSk7CisgIGFzc2VydCh1c2VfbW1hcChtKSk7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7CisgIGFzc2VydCghaXNfc21hbGwoc3opKTsKKyAgYXNzZXJ0KChsZW4gJiAobXBhcmFtcy5wYWdlX3NpemUtU0laRV9UX09ORSkpID09IDApOworICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3opLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKTsKKyAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6K1NJWkVfVF9TSVpFKS0+aGVhZCA9PSAwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBpbnVzZSBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydChjaW51c2UocCkpOworICBhc3NlcnQobmV4dF9waW51c2UocCkpOworICAvKiBJZiBub3QgcGludXNlIGFuZCBub3QgbW1hcHBlZCwgcHJldmlvdXMgY2h1bmsgaGFzIE9LIG9mZnNldCAqLworICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBwaW51c2UocCkgfHwgbmV4dF9jaHVuayhwcmV2X2NodW5rKHApKSA9PSBwKTsKKyAgaWYgKGlzX21tYXBwZWQocCkpCisgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBmcmVlIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHApOworICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KTsKKyAgZG9fY2hlY2tfYW55X2NodW5rKG0sIHApOworICBhc3NlcnQoIWNpbnVzZShwKSk7CisgIGFzc2VydCghbmV4dF9waW51c2UocCkpOworICBhc3NlcnQgKCFpc19tbWFwcGVkKHApKTsKKyAgaWYgKHAgIT0gbS0+ZHYgJiYgcCAhPSBtLT50b3ApIHsKKyAgICBpZiAoc3ogPj0gTUlOX0NIVU5LX1NJWkUpIHsKKyAgICAgIGFzc2VydCgoc3ogJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKTsKKyAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOworICAgICAgYXNzZXJ0KG5leHQtPnByZXZfZm9vdCA9PSBzeik7CisgICAgICBhc3NlcnQocGludXNlKHApKTsKKyAgICAgIGFzc2VydCAobmV4dCA9PSBtLT50b3AgfHwgY2ludXNlKG5leHQpKTsKKyAgICAgIGFzc2VydChwLT5mZC0+YmsgPT0gcCk7CisgICAgICBhc3NlcnQocC0+YmstPmZkID09IHApOworICAgIH0KKyAgICBlbHNlICAvKiBtYXJrZXJzIGFyZSBhbHdheXMgb2Ygc2l6ZSBTSVpFX1RfU0laRSAqLworICAgICAgYXNzZXJ0KHN6ID09IFNJWkVfVF9TSVpFKTsKKyAgfQorfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIG1hbGxvY2VkIGNodW5rcyBhdCB0aGUgcG9pbnQgdGhleSBhcmUgbWFsbG9jZWQgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgc2l6ZV90IHN6ID0gcC0+aGVhZCAmIH4oUElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBwKTsKKyAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7CisgICAgYXNzZXJ0KHN6ID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoc3ogPj0gcyk7CisgICAgLyogdW5sZXNzIG1tYXBwZWQsIHNpemUgaXMgbGVzcyB0aGFuIE1JTl9DSFVOS19TSVpFIG1vcmUgdGhhbiByZXF1ZXN0ICovCisgICAgYXNzZXJ0KGlzX21tYXBwZWQocCkgfHwgc3ogPCAocyArIE1JTl9DSFVOS19TSVpFKSk7CisgIH0KK30KKworLyogQ2hlY2sgYSB0cmVlIGFuZCBpdHMgc3VidHJlZXMuICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpIHsKKyAgdGNodW5rcHRyIGhlYWQgPSAwOworICB0Y2h1bmtwdHIgdSA9IHQ7CisgIGJpbmRleF90IHRpbmRleCA9IHQtPmluZGV4OworICBzaXplX3QgdHNpemUgPSBjaHVua3NpemUodCk7CisgIGJpbmRleF90IGlkeDsKKyAgY29tcHV0ZV90cmVlX2luZGV4KHRzaXplLCBpZHgpOworICBhc3NlcnQodGluZGV4ID09IGlkeCk7CisgIGFzc2VydCh0c2l6ZSA+PSBNSU5fTEFSR0VfU0laRSk7CisgIGFzc2VydCh0c2l6ZSA+PSBtaW5zaXplX2Zvcl90cmVlX2luZGV4KGlkeCkpOworICBhc3NlcnQoKGlkeCA9PSBOVFJFRUJJTlMtMSkgfHwgKHRzaXplIDwgbWluc2l6ZV9mb3JfdHJlZV9pbmRleCgoaWR4KzEpKSkpOworCisgIGRvIHsgLyogdHJhdmVyc2UgdGhyb3VnaCBjaGFpbiBvZiBzYW1lLXNpemVkIG5vZGVzICovCisgICAgZG9fY2hlY2tfYW55X2NodW5rKG0sICgobWNodW5rcHRyKXUpKTsKKyAgICBhc3NlcnQodS0+aW5kZXggPT0gdGluZGV4KTsKKyAgICBhc3NlcnQoY2h1bmtzaXplKHUpID09IHRzaXplKTsKKyAgICBhc3NlcnQoIWNpbnVzZSh1KSk7CisgICAgYXNzZXJ0KCFuZXh0X3BpbnVzZSh1KSk7CisgICAgYXNzZXJ0KHUtPmZkLT5iayA9PSB1KTsKKyAgICBhc3NlcnQodS0+YmstPmZkID09IHUpOworICAgIGlmICh1LT5wYXJlbnQgPT0gMCkgeworICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdID09IDApOworICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdID09IDApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGFzc2VydChoZWFkID09IDApOyAvKiBvbmx5IG9uZSBub2RlIG9uIGNoYWluIGhhcyBwYXJlbnQgKi8KKyAgICAgIGhlYWQgPSB1OworICAgICAgYXNzZXJ0KHUtPnBhcmVudCAhPSB1KTsKKyAgICAgIGFzc2VydCAodS0+cGFyZW50LT5jaGlsZFswXSA9PSB1IHx8CisJICAgICAgdS0+cGFyZW50LT5jaGlsZFsxXSA9PSB1IHx8CisJICAgICAgKigodGJpbnB0ciopKHUtPnBhcmVudCkpID09IHUpOworICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDApIHsKKwlhc3NlcnQodS0+Y2hpbGRbMF0tPnBhcmVudCA9PSB1KTsKKwlhc3NlcnQodS0+Y2hpbGRbMF0gIT0gdSk7CisJZG9fY2hlY2tfdHJlZShtLCB1LT5jaGlsZFswXSk7CisgICAgICB9CisgICAgICBpZiAodS0+Y2hpbGRbMV0gIT0gMCkgeworCWFzc2VydCh1LT5jaGlsZFsxXS0+cGFyZW50ID09IHUpOworCWFzc2VydCh1LT5jaGlsZFsxXSAhPSB1KTsKKwlkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzFdKTsKKyAgICAgIH0KKyAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwICYmIHUtPmNoaWxkWzFdICE9IDApIHsKKwlhc3NlcnQoY2h1bmtzaXplKHUtPmNoaWxkWzBdKSA8IGNodW5rc2l6ZSh1LT5jaGlsZFsxXSkpOworICAgICAgfQorICAgIH0KKyAgICB1ID0gdS0+ZmQ7CisgIH0gd2hpbGUgKHUgIT0gdCk7CisgIGFzc2VydChoZWFkICE9IDApOworfQorCisvKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSB0cmVlYmluLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKKyAgdGJpbnB0ciogdGIgPSB0cmVlYmluX2F0KG0sIGkpOworICB0Y2h1bmtwdHIgdCA9ICp0YjsKKyAgaW50IGVtcHR5ID0gKG0tPnRyZWVtYXAgJiAoMVUgPDwgaSkpID09IDA7CisgIGlmICh0ID09IDApCisgICAgYXNzZXJ0KGVtcHR5KTsKKyAgaWYgKCFlbXB0eSkKKyAgICBkb19jaGVja190cmVlKG0sIHQpOworfQorCisvKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSBzbWFsbGJpbi4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSkgeworICBzYmlucHRyIGIgPSBzbWFsbGJpbl9hdChtLCBpKTsKKyAgbWNodW5rcHRyIHAgPSBiLT5iazsKKyAgdW5zaWduZWQgaW50IGVtcHR5ID0gKG0tPnNtYWxsbWFwICYgKDFVIDw8IGkpKSA9PSAwOworICBpZiAocCA9PSBiKQorICAgIGFzc2VydChlbXB0eSk7CisgIGlmICghZW1wdHkpIHsKKyAgICBmb3IgKDsgcCAhPSBiOyBwID0gcC0+YmspIHsKKyAgICAgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgbWNodW5rcHRyIHE7CisgICAgICAvKiBlYWNoIGNodW5rIGNsYWltcyB0byBiZSBmcmVlICovCisgICAgICBkb19jaGVja19mcmVlX2NodW5rKG0sIHApOworICAgICAgLyogY2h1bmsgYmVsb25ncyBpbiBiaW4gKi8KKyAgICAgIGFzc2VydChzbWFsbF9pbmRleChzaXplKSA9PSBpKTsKKyAgICAgIGFzc2VydChwLT5iayA9PSBiIHx8IGNodW5rc2l6ZShwLT5iaykgPT0gY2h1bmtzaXplKHApKTsKKyAgICAgIC8qIGNodW5rIGlzIGZvbGxvd2VkIGJ5IGFuIGludXNlIGNodW5rICovCisgICAgICBxID0gbmV4dF9jaHVuayhwKTsKKyAgICAgIGlmIChxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKQorCWRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHEpOworICAgIH0KKyAgfQorfQorCisvKiBGaW5kIHggaW4gYSBiaW4uIFVzZWQgaW4gb3RoZXIgY2hlY2sgZnVuY3Rpb25zLiAqLworc3RhdGljIGludCBiaW5fZmluZChtc3RhdGUgbSwgbWNodW5rcHRyIHgpIHsKKyAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUoeCk7CisgIGlmIChpc19zbWFsbChzaXplKSkgeworICAgIGJpbmRleF90IHNpZHggPSBzbWFsbF9pbmRleChzaXplKTsKKyAgICBzYmlucHRyIGIgPSBzbWFsbGJpbl9hdChtLCBzaWR4KTsKKyAgICBpZiAoc21hbGxtYXBfaXNfbWFya2VkKG0sIHNpZHgpKSB7CisgICAgICBtY2h1bmtwdHIgcCA9IGI7CisgICAgICBkbyB7CisJaWYgKHAgPT0geCkKKwkgIHJldHVybiAxOworICAgICAgfSB3aGlsZSAoKHAgPSBwLT5mZCkgIT0gYik7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGJpbmRleF90IHRpZHg7CisgICAgY29tcHV0ZV90cmVlX2luZGV4KHNpemUsIHRpZHgpOworICAgIGlmICh0cmVlbWFwX2lzX21hcmtlZChtLCB0aWR4KSkgeworICAgICAgdGNodW5rcHRyIHQgPSAqdHJlZWJpbl9hdChtLCB0aWR4KTsKKyAgICAgIHNpemVfdCBzaXplYml0cyA9IHNpemUgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KHRpZHgpOworICAgICAgd2hpbGUgKHQgIT0gMCAmJiBjaHVua3NpemUodCkgIT0gc2l6ZSkgeworCXQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdOworCXNpemViaXRzIDw8PSAxOworICAgICAgfQorICAgICAgaWYgKHQgIT0gMCkgeworCXRjaHVua3B0ciB1ID0gdDsKKwlkbyB7CisJICBpZiAodSA9PSAodGNodW5rcHRyKXgpCisJICAgIHJldHVybiAxOworCX0gd2hpbGUgKCh1ID0gdS0+ZmQpICE9IHQpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogVHJhdmVyc2UgZWFjaCBjaHVuayBhbmQgY2hlY2sgaXQ7IHJldHVybiB0b3RhbCAqLworc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pIHsKKyAgc2l6ZV90IHN1bSA9IDA7CisgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgIHN1bSArPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICB3aGlsZSAocyAhPSAwKSB7CisgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgICAgbWNodW5rcHRyIGxhc3RxID0gMDsKKyAgICAgIGFzc2VydChwaW51c2UocSkpOworICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKwkgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKwlzdW0gKz0gY2h1bmtzaXplKHEpOworCWlmIChjaW51c2UocSkpIHsKKwkgIGFzc2VydCghYmluX2ZpbmQobSwgcSkpOworCSAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisJfQorCWVsc2UgeworCSAgYXNzZXJ0KHEgPT0gbS0+ZHYgfHwgYmluX2ZpbmQobSwgcSkpOworCSAgYXNzZXJ0KGxhc3RxID09IDAgfHwgY2ludXNlKGxhc3RxKSk7IC8qIE5vdCAyIGNvbnNlY3V0aXZlIGZyZWUgKi8KKwkgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisJfQorCWxhc3RxID0gcTsKKwlxID0gbmV4dF9jaHVuayhxKTsKKyAgICAgIH0KKyAgICAgIHMgPSBzLT5uZXh0OworICAgIH0KKyAgfQorICByZXR1cm4gc3VtOworfQorCisvKiBDaGVjayBhbGwgcHJvcGVydGllcyBvZiBtYWxsb2Nfc3RhdGUuICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pIHsKKyAgYmluZGV4X3QgaTsKKyAgc2l6ZV90IHRvdGFsOworICAvKiBjaGVjayBiaW5zICovCisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpCisgICAgZG9fY2hlY2tfc21hbGxiaW4obSwgaSk7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICBkb19jaGVja190cmVlYmluKG0sIGkpOworCisgIGlmIChtLT5kdnNpemUgIT0gMCkgeyAvKiBjaGVjayBkdiBjaHVuayAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBtLT5kdik7CisgICAgYXNzZXJ0KG0tPmR2c2l6ZSA9PSBjaHVua3NpemUobS0+ZHYpKTsKKyAgICBhc3NlcnQobS0+ZHZzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+ZHYpID09IDApOworICB9CisKKyAgaWYgKG0tPnRvcCAhPSAwKSB7ICAgLyogY2hlY2sgdG9wIGNodW5rICovCisgICAgZG9fY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgLyphc3NlcnQobS0+dG9wc2l6ZSA9PSBjaHVua3NpemUobS0+dG9wKSk7IHJlZHVuZGFudCAqLworICAgIGFzc2VydChtLT50b3BzaXplID4gMCk7CisgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPnRvcCkgPT0gMCk7CisgIH0KKworICB0b3RhbCA9IHRyYXZlcnNlX2FuZF9jaGVjayhtKTsKKyAgYXNzZXJ0KHRvdGFsIDw9IG0tPmZvb3RwcmludCk7CisgIGFzc2VydChtLT5mb290cHJpbnQgPD0gbS0+bWF4X2Zvb3RwcmludCk7Cit9CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhdGlzdGljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFOT19NQUxMSU5GTworc3RhdGljIHN0cnVjdCBtYWxsaW5mbyBpbnRlcm5hbF9tYWxsaW5mbyhtc3RhdGUgbSkgeworICBzdHJ1Y3QgbWFsbGluZm8gbm0gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgc2l6ZV90IG5mcmVlID0gU0laRV9UX09ORTsgLyogdG9wIGFsd2F5cyBmcmVlICovCisgICAgICBzaXplX3QgbWZyZWUgPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICAgIHNpemVfdCBzdW0gPSBtZnJlZTsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgd2hpbGUgKHMgIT0gMCkgeworCW1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisJd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKwkgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworCSAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHEpOworCSAgc3VtICs9IHN6OworCSAgaWYgKCFjaW51c2UocSkpIHsKKwkgICAgbWZyZWUgKz0gc3o7CisJICAgICsrbmZyZWU7CisJICB9CisJICBxID0gbmV4dF9jaHVuayhxKTsKKwl9CisJcyA9IHMtPm5leHQ7CisgICAgICB9CisKKyAgICAgIG5tLmFyZW5hICAgID0gc3VtOworICAgICAgbm0ub3JkYmxrcyAgPSBuZnJlZTsKKyAgICAgIG5tLmhibGtoZCAgID0gbS0+Zm9vdHByaW50IC0gc3VtOworICAgICAgbm0udXNtYmxrcyAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgbm0udW9yZGJsa3MgPSBtLT5mb290cHJpbnQgLSBtZnJlZTsKKyAgICAgIG5tLmZvcmRibGtzID0gbWZyZWU7CisgICAgICBubS5rZWVwY29zdCA9IG0tPnRvcHNpemU7CisgICAgfQorCisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorICByZXR1cm4gbm07Cit9CisjZW5kaWYgLyogIU5PX01BTExJTkZPICovCisKK3N0YXRpYyB2b2lkIGludGVybmFsX21hbGxvY19zdGF0cyhtc3RhdGUgbSkgeworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBzaXplX3QgbWF4ZnAgPSAwOworICAgIHNpemVfdCBmcCA9IDA7CisgICAgc2l6ZV90IHVzZWQgPSAwOworICAgIGNoZWNrX21hbGxvY19zdGF0ZShtKTsKKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgbWF4ZnAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgZnAgPSBtLT5mb290cHJpbnQ7CisgICAgICB1c2VkID0gZnAgLSAobS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkUpOworCisgICAgICB3aGlsZSAocyAhPSAwKSB7CisJbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKwl3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorCSAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisJICBpZiAoIWNpbnVzZShxKSkKKwkgICAgdXNlZCAtPSBjaHVua3NpemUocSk7CisJICBxID0gbmV4dF9jaHVuayhxKTsKKwl9CisJcyA9IHMtPm5leHQ7CisgICAgICB9CisgICAgfQorCisgICAgZnByaW50ZihzdGRlcnIsICJtYXggc3lzdGVtIGJ5dGVzID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKShtYXhmcCkpOworICAgIGZwcmludGYoc3RkZXJyLCAic3lzdGVtIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykoZnApKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImluIHVzZSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKHVzZWQpKTsKKworICAgIFBPU1RBQ1RJT04obSk7CisgIH0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBzbWFsbGJpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgVmFyaW91cyBmb3JtcyBvZiBsaW5raW5nIGFuZCB1bmxpbmtpbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLiAgRXZlbgorICB0aGUgb25lcyBmb3IgdHJlZXMsIHdoaWNoIGFyZSB2ZXJ5IGxvbmcgYnV0IGhhdmUgdmVyeSBzaG9ydCB0eXBpY2FsCisgIHBhdGhzLiAgVGhpcyBpcyB1Z2x5IGJ1dCByZWR1Y2VzIHJlbGlhbmNlIG9uIGlubGluaW5nIHN1cHBvcnQgb2YKKyAgY29tcGlsZXJzLgorKi8KKworLyogTGluayBhIGZyZWUgY2h1bmsgaW50byBhIHNtYWxsYmluICAqLworI2RlZmluZSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUykge1wKKyAgYmluZGV4X3QgSSAgPSBzbWFsbF9pbmRleChTKTtcCisgIG1jaHVua3B0ciBCID0gc21hbGxiaW5fYXQoTSwgSSk7XAorICBtY2h1bmtwdHIgRiA9IEI7XAorICBhc3NlcnQoUyA+PSBNSU5fQ0hVTktfU0laRSk7XAorICBpZiAoIXNtYWxsbWFwX2lzX21hcmtlZChNLCBJKSlcCisgICAgbWFya19zbWFsbG1hcChNLCBJKTtcCisgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBCLT5mZCkpKVwKKyAgICBGID0gQi0+ZmQ7XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorICBCLT5mZCA9IFA7XAorICBGLT5iayA9IFA7XAorICBQLT5mZCA9IEY7XAorICBQLT5iayA9IEI7XAorfQorCisvKiBVbmxpbmsgYSBjaHVuayBmcm9tIGEgc21hbGxiaW4gICovCisjZGVmaW5lIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKSB7XAorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKKyAgbWNodW5rcHRyIEIgPSBQLT5iaztcCisgIGJpbmRleF90IEkgPSBzbWFsbF9pbmRleChTKTtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEYgPT0gQilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKChGID09IHNtYWxsYmluX2F0KE0sSSkgfHwgb2tfYWRkcmVzcyhNLCBGKSkgJiZcCisJCSAgIChCID09IHNtYWxsYmluX2F0KE0sSSkgfHwgb2tfYWRkcmVzcyhNLCBCKSkpKSB7XAorICAgIEYtPmJrID0gQjtcCisgICAgQi0+ZmQgPSBGO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKK30KKworLyogVW5saW5rIHRoZSBmaXJzdCBjaHVuayBmcm9tIGEgc21hbGxiaW4gKi8KKyNkZWZpbmUgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKE0sIEIsIFAsIEkpIHtcCisgIG1jaHVua3B0ciBGID0gUC0+ZmQ7XAorICBhc3NlcnQoUCAhPSBCKTtcCisgIGFzc2VydChQICE9IEYpO1wKKyAgYXNzZXJ0KGNodW5rc2l6ZShQKSA9PSBzbWFsbF9pbmRleDJzaXplKEkpKTtcCisgIGlmIChCID09IEYpXAorICAgIGNsZWFyX3NtYWxsbWFwKE0sIEkpO1wKKyAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYpKSkge1wKKyAgICBCLT5mZCA9IEY7XAorICAgIEYtPmJrID0gQjtcCisgIH1cCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCit9CisKKworCisvKiBSZXBsYWNlIGR2IG5vZGUsIGJpbm5pbmcgdGhlIG9sZCBvbmUgKi8KKy8qIFVzZWQgb25seSB3aGVuIGR2c2l6ZSBrbm93biB0byBiZSBzbWFsbCAqLworI2RlZmluZSByZXBsYWNlX2R2KE0sIFAsIFMpIHtcCisgIHNpemVfdCBEVlMgPSBNLT5kdnNpemU7XAorICBpZiAoRFZTICE9IDApIHtcCisgICAgbWNodW5rcHRyIERWID0gTS0+ZHY7XAorICAgIGFzc2VydChpc19zbWFsbChEVlMpKTtcCisgICAgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIERWLCBEVlMpO1wKKyAgfVwKKyAgTS0+ZHZzaXplID0gUztcCisgIE0tPmR2ID0gUDtcCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiB0cmVlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluc2VydCBjaHVuayBpbnRvIHRyZWUgKi8KKyNkZWZpbmUgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFgsIFMpIHtcCisgIHRiaW5wdHIqIEg7XAorICBiaW5kZXhfdCBJO1wKKyAgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpO1wKKyAgSCA9IHRyZWViaW5fYXQoTSwgSSk7XAorICBYLT5pbmRleCA9IEk7XAorICBYLT5jaGlsZFswXSA9IFgtPmNoaWxkWzFdID0gMDtcCisgIGlmICghdHJlZW1hcF9pc19tYXJrZWQoTSwgSSkpIHtcCisgICAgbWFya190cmVlbWFwKE0sIEkpO1wKKyAgICAqSCA9IFg7XAorICAgIFgtPnBhcmVudCA9ICh0Y2h1bmtwdHIpSDtcCisgICAgWC0+ZmQgPSBYLT5iayA9IFg7XAorICB9XAorICBlbHNlIHtcCisgICAgdGNodW5rcHRyIFQgPSAqSDtcCisgICAgc2l6ZV90IEsgPSBTIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChJKTtcCisgICAgZm9yICg7Oykge1wKKyAgICAgIGlmIChjaHVua3NpemUoVCkgIT0gUykge1wKKwl0Y2h1bmtwdHIqIEMgPSAmKFQtPmNoaWxkWyhLID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXSk7XAorCUsgPDw9IDE7XAorCWlmICgqQyAhPSAwKVwKKwkgIFQgPSAqQztcCisJZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMpKSkge1wKKwkgICpDID0gWDtcCisJICBYLT5wYXJlbnQgPSBUO1wKKwkgIFgtPmZkID0gWC0+YmsgPSBYO1wKKwkgIGJyZWFrO1wKKwl9XAorCWVsc2Uge1wKKwkgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwkgIGJyZWFrO1wKKwl9XAorICAgICAgfVwKKyAgICAgIGVsc2Uge1wKKwl0Y2h1bmtwdHIgRiA9IFQtPmZkO1wKKwlpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFQpICYmIG9rX2FkZHJlc3MoTSwgRikpKSB7XAorCSAgVC0+ZmQgPSBGLT5iayA9IFg7XAorCSAgWC0+ZmQgPSBGO1wKKwkgIFgtPmJrID0gVDtcCisJICBYLT5wYXJlbnQgPSAwO1wKKwkgIGJyZWFrO1wKKwl9XAorCWVsc2Uge1wKKwkgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwkgIGJyZWFrO1wKKwl9XAorICAgICAgfVwKKyAgICB9XAorICB9XAorfQorCisvKgorICBVbmxpbmsgc3RlcHM6CisKKyAgMS4gSWYgeCBpcyBhIGNoYWluZWQgbm9kZSwgdW5saW5rIGl0IGZyb20gaXRzIHNhbWUtc2l6ZWQgZmQvYmsgbGlua3MKKyAgICAgYW5kIGNob29zZSBpdHMgYmsgbm9kZSBhcyBpdHMgcmVwbGFjZW1lbnQuCisgIDIuIElmIHggd2FzIHRoZSBsYXN0IG5vZGUgb2YgaXRzIHNpemUsIGJ1dCBub3QgYSBsZWFmIG5vZGUsIGl0IG11c3QKKyAgICAgYmUgcmVwbGFjZWQgd2l0aCBhIGxlYWYgbm9kZSAobm90IG1lcmVseSBvbmUgd2l0aCBhbiBvcGVuIGxlZnQgb3IKKyAgICAgcmlnaHQpLCB0byBtYWtlIHN1cmUgdGhhdCBsZWZ0cyBhbmQgcmlnaHRzIG9mIGRlc2NlbmRlbnRzCisgICAgIGNvcnJlc3BvbmQgcHJvcGVybHkgdG8gYml0IG1hc2tzLiAgV2UgdXNlIHRoZSByaWdodG1vc3QgZGVzY2VuZGVudAorICAgICBvZiB4LiAgV2UgY291bGQgdXNlIGFueSBvdGhlciBsZWFmLCBidXQgdGhpcyBpcyBlYXN5IHRvIGxvY2F0ZSBhbmQKKyAgICAgdGVuZHMgdG8gY291bnRlcmFjdCByZW1vdmFsIG9mIGxlZnRtb3N0cyBlbHNld2hlcmUsIGFuZCBzbyBrZWVwcworICAgICBwYXRocyBzaG9ydGVyIHRoYW4gbWluaW1hbGx5IGd1YXJhbnRlZWQuICBUaGlzIGRvZXNuJ3QgbG9vcCBtdWNoCisgICAgIGJlY2F1c2Ugb24gYXZlcmFnZSBhIG5vZGUgaW4gYSB0cmVlIGlzIG5lYXIgdGhlIGJvdHRvbS4KKyAgMy4gSWYgeCBpcyB0aGUgYmFzZSBvZiBhIGNoYWluIChpLmUuLCBoYXMgcGFyZW50IGxpbmtzKSByZWxpbmsKKyAgICAgeCdzIHBhcmVudCBhbmQgY2hpbGRyZW4gdG8geCdzIHJlcGxhY2VtZW50IChvciBudWxsIGlmIG5vbmUpLgorKi8KKworI2RlZmluZSB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgWCkge1wKKyAgdGNodW5rcHRyIFhQID0gWC0+cGFyZW50O1wKKyAgdGNodW5rcHRyIFI7XAorICBpZiAoWC0+YmsgIT0gWCkge1wKKyAgICB0Y2h1bmtwdHIgRiA9IFgtPmZkO1wKKyAgICBSID0gWC0+Yms7XAorICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgICAgRi0+YmsgPSBSO1wKKyAgICAgIFItPmZkID0gRjtcCisgICAgfVwKKyAgICBlbHNlIHtcCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgfVwKKyAgfVwKKyAgZWxzZSB7XAorICAgIHRjaHVua3B0ciogUlA7XAorICAgIGlmICgoKFIgPSAqKFJQID0gJihYLT5jaGlsZFsxXSkpKSAhPSAwKSB8fFwKKwkoKFIgPSAqKFJQID0gJihYLT5jaGlsZFswXSkpKSAhPSAwKSkge1wKKyAgICAgIHRjaHVua3B0ciogQ1A7XAorICAgICAgd2hpbGUgKCgqKENQID0gJihSLT5jaGlsZFsxXSkpICE9IDApIHx8XAorCSAgICAgKCooQ1AgPSAmKFItPmNoaWxkWzBdKSkgIT0gMCkpIHtcCisJUiA9ICooUlAgPSBDUCk7XAorICAgICAgfVwKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgUlApKSlcCisJKlJQID0gMDtcCisgICAgICBlbHNlIHtcCisJQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgICAgfVwKKyAgICB9XAorICB9XAorICBpZiAoWFAgIT0gMCkge1wKKyAgICB0YmlucHRyKiBIID0gdHJlZWJpbl9hdChNLCBYLT5pbmRleCk7XAorICAgIGlmIChYID09ICpIKSB7XAorICAgICAgaWYgKCgqSCA9IFIpID09IDApIFwKKwljbGVhcl90cmVlbWFwKE0sIFgtPmluZGV4KTtcCisgICAgfVwKKyAgICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgWFApKSkge1wKKyAgICAgIGlmIChYUC0+Y2hpbGRbMF0gPT0gWCkgXAorCVhQLT5jaGlsZFswXSA9IFI7XAorICAgICAgZWxzZSBcCisJWFAtPmNoaWxkWzFdID0gUjtcCisgICAgfVwKKyAgICBlbHNlXAorICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIGlmIChSICE9IDApIHtcCisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFIpKSkge1wKKwl0Y2h1bmtwdHIgQzAsIEMxO1wKKwlSLT5wYXJlbnQgPSBYUDtcCisJaWYgKChDMCA9IFgtPmNoaWxkWzBdKSAhPSAwKSB7XAorCSAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDMCkpKSB7XAorCSAgICBSLT5jaGlsZFswXSA9IEMwO1wKKwkgICAgQzAtPnBhcmVudCA9IFI7XAorCSAgfVwKKwkgIGVsc2VcCisJICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwl9XAorCWlmICgoQzEgPSBYLT5jaGlsZFsxXSkgIT0gMCkge1wKKwkgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzEpKSkge1wKKwkgICAgUi0+Y2hpbGRbMV0gPSBDMTtcCisJICAgIEMxLT5wYXJlbnQgPSBSO1wKKwkgIH1cCisJICBlbHNlXAorCSAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisJfVwKKyAgICAgIH1cCisgICAgICBlbHNlXAorCUNPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICB9XAorICB9XAorfQorCisvKiBSZWxheXMgdG8gbGFyZ2UgdnMgc21hbGwgYmluIG9wZXJhdGlvbnMgKi8KKworI2RlZmluZSBpbnNlcnRfY2h1bmsoTSwgUCwgUylcCisgIGlmIChpc19zbWFsbChTKSkgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpXAorICBlbHNlIHsgdGNodW5rcHRyIFRQID0gKHRjaHVua3B0cikoUCk7IGluc2VydF9sYXJnZV9jaHVuayhNLCBUUCwgUyk7IH0KKworI2RlZmluZSB1bmxpbmtfY2h1bmsoTSwgUCwgUylcCisgIGlmIChpc19zbWFsbChTKSkgdW5saW5rX3NtYWxsX2NodW5rKE0sIFAsIFMpXAorICBlbHNlIHsgdGNodW5rcHRyIFRQID0gKHRjaHVua3B0cikoUCk7IHVubGlua19sYXJnZV9jaHVuayhNLCBUUCk7IH0KKworCisvKiBSZWxheXMgdG8gaW50ZXJuYWwgY2FsbHMgdG8gbWFsbG9jL2ZyZWUgZnJvbSByZWFsbG9jLCBtZW1hbGlnbiBldGMgKi8KKworI2lmIE9OTFlfTVNQQUNFUworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgbXNwYWNlX21hbGxvYyhtLCBiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkgbXNwYWNlX2ZyZWUobSxtZW0pOworI2Vsc2UgLyogT05MWV9NU1BBQ0VTICovCisjaWYgTVNQQUNFUworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYilcCisgICAobSA9PSBnbSk/IGRsbWFsbG9jKGIpIDogbXNwYWNlX21hbGxvYyhtLCBiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSlcCisgICBpZiAobSA9PSBnbSkgZGxmcmVlKG1lbSk7IGVsc2UgbXNwYWNlX2ZyZWUobSxtZW0pOworI2Vsc2UgLyogTVNQQUNFUyAqLworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgZGxtYWxsb2MoYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pIGRsZnJlZShtZW0pCisjZW5kaWYgLyogTVNQQUNFUyAqLworI2VuZGlmIC8qIE9OTFlfTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRGlyZWN0LW1tYXBwaW5nIGNodW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBEaXJlY3RseSBtbWFwcGVkIGNodW5rcyBhcmUgc2V0IHVwIHdpdGggYW4gb2Zmc2V0IHRvIHRoZSBzdGFydCBvZgorICB0aGUgbW1hcHBlZCByZWdpb24gc3RvcmVkIGluIHRoZSBwcmV2X2Zvb3QgZmllbGQgb2YgdGhlIGNodW5rLiBUaGlzCisgIGFsbG93cyByZWNvbnN0cnVjdGlvbiBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnQgdG8gTVVOTUFQIHdoZW4gZnJlZWQsCisgIGFuZCBhbHNvIGFsbG93cyBhZGp1c3RtZW50IG9mIHRoZSByZXR1cm5lZCBjaHVuayB0byBtZWV0IGFsaWdubWVudAorICByZXF1aXJlbWVudHMgKGVzcGVjaWFsbHkgaW4gbWVtYWxpZ24pLiAgVGhlcmUgaXMgYWxzbyBlbm91Z2ggc3BhY2UKKyAgYWxsb2NhdGVkIHRvIGhvbGQgYSBmYWtlIG5leHQgY2h1bmsgb2Ygc2l6ZSBTSVpFX1RfU0laRSB0byBtYWludGFpbgorICB0aGUgUElOVVNFIGJpdCBzbyBmcmVlcyBjYW4gYmUgY2hlY2tlZC4KKyovCisKKy8qIE1hbGxvYyB1c2luZyBtbWFwICovCitzdGF0aWMgdm9pZCogbW1hcF9hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHNpemVfdCBtbXNpemUgPSBtbWFwX2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICBpZiAobW1zaXplID4gbmIpIHsgICAgIC8qIENoZWNrIGZvciB3cmFwIGFyb3VuZCAwICovCisgICAgY2hhciogbW0gPSAoY2hhciopKENBTExfRElSRUNUX01NQVAobW1zaXplKSk7CisgICAgaWYgKG1tICE9IENNRkFJTCkgeworICAgICAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0obW0pKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IG1tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7CisgICAgICBtY2h1bmtwdHIgcCA9IChtY2h1bmtwdHIpKG1tICsgb2Zmc2V0KTsKKyAgICAgIHAtPnByZXZfZm9vdCA9IG9mZnNldCB8IElTX01NQVBQRURfQklUOworICAgICAgKHApLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOworICAgICAgbWFya19pbnVzZV9mb290KG0sIHAsIHBzaXplKTsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0gMDsKKworICAgICAgaWYgKG1tIDwgbS0+bGVhc3RfYWRkcikKKwltLT5sZWFzdF9hZGRyID0gbW07CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKwltLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworICAgICAgYXNzZXJ0KGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSk7CisgICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIHApOworICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFJlYWxsb2MgdXNpbmcgbW1hcCAqLworc3RhdGljIG1jaHVua3B0ciBtbWFwX3Jlc2l6ZShtc3RhdGUgbSwgbWNodW5rcHRyIG9sZHAsIHNpemVfdCBuYikgeworICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKKyAgaWYgKGlzX3NtYWxsKG5iKSkgLyogQ2FuJ3Qgc2hyaW5rIG1tYXAgcmVnaW9ucyBiZWxvdyBzbWFsbCBzaXplICovCisgICAgcmV0dXJuIDA7CisgIC8qIEtlZXAgb2xkIGNodW5rIGlmIGJpZyBlbm91Z2ggYnV0IG5vdCB0b28gYmlnICovCisgIGlmIChvbGRzaXplID49IG5iICsgU0laRV9UX1NJWkUgJiYKKyAgICAgIChvbGRzaXplIC0gbmIpIDw9IChtcGFyYW1zLmdyYW51bGFyaXR5IDw8IDEpKQorICAgIHJldHVybiBvbGRwOworICBlbHNlIHsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gb2xkcC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUOworICAgIHNpemVfdCBvbGRtbXNpemUgPSBvbGRzaXplICsgb2Zmc2V0ICsgTU1BUF9GT09UX1BBRDsKKyAgICBzaXplX3QgbmV3bW1zaXplID0gbW1hcF9hbGlnbihuYiArIFNJWF9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgICBjaGFyKiBjcCA9IChjaGFyKilDQUxMX01SRU1BUCgoY2hhciopb2xkcCAtIG9mZnNldCwKKwkJCQkgIG9sZG1tc2l6ZSwgbmV3bW1zaXplLCAxKTsKKyAgICBpZiAoY3AgIT0gQ01GQUlMKSB7CisgICAgICBtY2h1bmtwdHIgbmV3cCA9IChtY2h1bmtwdHIpKGNwICsgb2Zmc2V0KTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IG5ld21tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7CisgICAgICBuZXdwLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOworICAgICAgbWFya19pbnVzZV9mb290KG0sIG5ld3AsIHBzaXplKTsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0gMDsKKworICAgICAgaWYgKGNwIDwgbS0+bGVhc3RfYWRkcikKKwltLT5sZWFzdF9hZGRyID0gY3A7CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBuZXdtbXNpemUgLSBvbGRtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKwltLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBuZXdwKTsKKyAgICAgIHJldHVybiBuZXdwOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbXNwYWNlIG1hbmFnZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5pdGlhbGl6ZSB0b3AgY2h1bmsgYW5kIGl0cyBzaXplICovCitzdGF0aWMgdm9pZCBpbml0X3RvcChtc3RhdGUgbSwgbWNodW5rcHRyIHAsIHNpemVfdCBwc2l6ZSkgeworICAvKiBFbnN1cmUgYWxpZ25tZW50ICovCisgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKHApKTsKKyAgcCA9IChtY2h1bmtwdHIpKChjaGFyKilwICsgb2Zmc2V0KTsKKyAgcHNpemUgLT0gb2Zmc2V0OworCisgIG0tPnRvcCA9IHA7CisgIG0tPnRvcHNpemUgPSBwc2l6ZTsKKyAgcC0+aGVhZCA9IHBzaXplIHwgUElOVVNFX0JJVDsKKyAgLyogc2V0IHNpemUgb2YgZmFrZSB0cmFpbGluZyBjaHVuayBob2xkaW5nIG92ZXJoZWFkIHNwYWNlIG9ubHkgb25jZSAqLworICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSktPmhlYWQgPSBUT1BfRk9PVF9TSVpFOworICBtLT50cmltX2NoZWNrID0gbXBhcmFtcy50cmltX3RocmVzaG9sZDsgLyogcmVzZXQgb24gZWFjaCB1cGRhdGUgKi8KK30KKworLyogSW5pdGlhbGl6ZSBiaW5zIGZvciBhIG5ldyBtc3RhdGUgdGhhdCBpcyBvdGhlcndpc2UgemVyb2VkIG91dCAqLworc3RhdGljIHZvaWQgaW5pdF9iaW5zKG1zdGF0ZSBtKSB7CisgIC8qIEVzdGFibGlzaCBjaXJjdWxhciBsaW5rcyBmb3Igc21hbGxiaW5zICovCisgIGJpbmRleF90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpIHsKKyAgICBzYmlucHRyIGJpbiA9IHNtYWxsYmluX2F0KG0saSk7CisgICAgYmluLT5mZCA9IGJpbi0+YmsgPSBiaW47CisgIH0KK30KKworI2lmIFBST0NFRURfT05fRVJST1IKKworLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLworc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pIHsKKyAgaW50IGk7CisgICsrbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQ7CisgIC8qIFJlaW5pdGlhbGl6ZSBmaWVsZHMgdG8gZm9yZ2V0IGFib3V0IGFsbCBtZW1vcnkgKi8KKyAgbS0+c21hbGxiaW5zID0gbS0+dHJlZWJpbnMgPSAwOworICBtLT5kdnNpemUgPSBtLT50b3BzaXplID0gMDsKKyAgbS0+c2VnLmJhc2UgPSAwOworICBtLT5zZWcuc2l6ZSA9IDA7CisgIG0tPnNlZy5uZXh0ID0gMDsKKyAgbS0+dG9wID0gbS0+ZHYgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kpCisgICAgKnRyZWViaW5fYXQobSwgaSkgPSAwOworICBpbml0X2JpbnMobSk7Cit9CisjZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisvKiBBbGxvY2F0ZSBjaHVuayBhbmQgcHJlcGVuZCByZW1haW5kZXIgd2l0aCBjaHVuayBpbiBzdWNjZXNzb3IgYmFzZS4gKi8KK3N0YXRpYyB2b2lkKiBwcmVwZW5kX2FsbG9jKG1zdGF0ZSBtLCBjaGFyKiBuZXdiYXNlLCBjaGFyKiBvbGRiYXNlLAorCQkJICAgc2l6ZV90IG5iKSB7CisgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsobmV3YmFzZSk7CisgIG1jaHVua3B0ciBvbGRmaXJzdCA9IGFsaWduX2FzX2NodW5rKG9sZGJhc2UpOworICBzaXplX3QgcHNpemUgPSAoY2hhciopb2xkZmlyc3QgLSAoY2hhciopcDsKKyAgbWNodW5rcHRyIHEgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgIHNpemVfdCBxc2l6ZSA9IHBzaXplIC0gbmI7CisgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgbmIpOworCisgIGFzc2VydCgoY2hhciopb2xkZmlyc3QgPiAoY2hhciopcSk7CisgIGFzc2VydChwaW51c2Uob2xkZmlyc3QpKTsKKyAgYXNzZXJ0KHFzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKworICAvKiBjb25zb2xpZGF0ZSByZW1haW5kZXIgd2l0aCBmaXJzdCBjaHVuayBvZiBvbGQgYmFzZSAqLworICBpZiAob2xkZmlyc3QgPT0gbS0+dG9wKSB7CisgICAgc2l6ZV90IHRzaXplID0gbS0+dG9wc2l6ZSArPSBxc2l6ZTsKKyAgICBtLT50b3AgPSBxOworICAgIHEtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgY2hlY2tfdG9wX2NodW5rKG0sIHEpOworICB9CisgIGVsc2UgaWYgKG9sZGZpcnN0ID09IG0tPmR2KSB7CisgICAgc2l6ZV90IGRzaXplID0gbS0+ZHZzaXplICs9IHFzaXplOworICAgIG0tPmR2ID0gcTsKKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocSwgZHNpemUpOworICB9CisgIGVsc2UgeworICAgIGlmICghY2ludXNlKG9sZGZpcnN0KSkgeworICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG9sZGZpcnN0KTsKKyAgICAgIHVubGlua19jaHVuayhtLCBvbGRmaXJzdCwgbnNpemUpOworICAgICAgb2xkZmlyc3QgPSBjaHVua19wbHVzX29mZnNldChvbGRmaXJzdCwgbnNpemUpOworICAgICAgcXNpemUgKz0gbnNpemU7CisgICAgfQorICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHEsIHFzaXplLCBvbGRmaXJzdCk7CisgICAgaW5zZXJ0X2NodW5rKG0sIHEsIHFzaXplKTsKKyAgICBjaGVja19mcmVlX2NodW5rKG0sIHEpOworICB9CisKKyAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7CisgIHJldHVybiBjaHVuazJtZW0ocCk7Cit9CisKKy8qIEFkZCBhIHNlZ21lbnQgdG8gaG9sZCBhIG5ldyBub25jb250aWd1b3VzIHJlZ2lvbiAqLworc3RhdGljIHZvaWQgYWRkX3NlZ21lbnQobXN0YXRlIG0sIGNoYXIqIHRiYXNlLCBzaXplX3QgdHNpemUsIGZsYWdfdCBtbWFwcGVkKSB7CisgIC8qIERldGVybWluZSBsb2NhdGlvbnMgYW5kIHNpemVzIG9mIHNlZ21lbnQsIGZlbmNlcG9zdHMsIG9sZCB0b3AgKi8KKyAgY2hhciogb2xkX3RvcCA9IChjaGFyKiltLT50b3A7CisgIG1zZWdtZW50cHRyIG9sZHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIG9sZF90b3ApOworICBjaGFyKiBvbGRfZW5kID0gb2xkc3AtPmJhc2UgKyBvbGRzcC0+c2l6ZTsKKyAgc2l6ZV90IHNzaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpOworICBjaGFyKiByYXdzcCA9IG9sZF9lbmQgLSAoc3NpemUgKyBGT1VSX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShyYXdzcCkpOworICBjaGFyKiBhc3AgPSByYXdzcCArIG9mZnNldDsKKyAgY2hhciogY3NwID0gKGFzcCA8IChvbGRfdG9wICsgTUlOX0NIVU5LX1NJWkUpKT8gb2xkX3RvcCA6IGFzcDsKKyAgbWNodW5rcHRyIHNwID0gKG1jaHVua3B0ciljc3A7CisgIG1zZWdtZW50cHRyIHNzID0gKG1zZWdtZW50cHRyKShjaHVuazJtZW0oc3ApKTsKKyAgbWNodW5rcHRyIHRuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQoc3AsIHNzaXplKTsKKyAgbWNodW5rcHRyIHAgPSB0bmV4dDsKKyAgaW50IG5mZW5jZXMgPSAwOworCisgIC8qIHJlc2V0IHRvcCB0byBuZXcgc3BhY2UgKi8KKyAgaW5pdF90b3AobSwgKG1jaHVua3B0cil0YmFzZSwgdHNpemUgLSBUT1BfRk9PVF9TSVpFKTsKKworICAvKiBTZXQgdXAgc2VnbWVudCByZWNvcmQgKi8KKyAgYXNzZXJ0KGlzX2FsaWduZWQoc3MpKTsKKyAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBzcCwgc3NpemUpOworICAqc3MgPSBtLT5zZWc7IC8qIFB1c2ggY3VycmVudCByZWNvcmQgKi8KKyAgbS0+c2VnLmJhc2UgPSB0YmFzZTsKKyAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKyAgbS0+c2VnLnNmbGFncyA9IG1tYXBwZWQ7CisgIG0tPnNlZy5uZXh0ID0gc3M7CisKKyAgLyogSW5zZXJ0IHRyYWlsaW5nIGZlbmNlcG9zdHMgKi8KKyAgZm9yICg7OykgeworICAgIG1jaHVua3B0ciBuZXh0cCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIFNJWkVfVF9TSVpFKTsKKyAgICBwLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgKytuZmVuY2VzOworICAgIGlmICgoY2hhciopKCYobmV4dHAtPmhlYWQpKSA8IG9sZF9lbmQpCisgICAgICBwID0gbmV4dHA7CisgICAgZWxzZQorICAgICAgYnJlYWs7CisgIH0KKyAgYXNzZXJ0KG5mZW5jZXMgPj0gMik7CisKKyAgLyogSW5zZXJ0IHRoZSByZXN0IG9mIG9sZCB0b3AgaW50byBhIGJpbiBhcyBhbiBvcmRpbmFyeSBmcmVlIGNodW5rICovCisgIGlmIChjc3AgIT0gb2xkX3RvcCkgeworICAgIG1jaHVua3B0ciBxID0gKG1jaHVua3B0cilvbGRfdG9wOworICAgIHNpemVfdCBwc2l6ZSA9IGNzcCAtIG9sZF90b3A7CisgICAgbWNodW5rcHRyIHRuID0gY2h1bmtfcGx1c19vZmZzZXQocSwgcHNpemUpOworICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHEsIHBzaXplLCB0bik7CisgICAgaW5zZXJ0X2NodW5rKG0sIHEsIHBzaXplKTsKKyAgfQorCisgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTeXN0ZW0gYWxsb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBHZXQgbWVtb3J5IGZyb20gc3lzdGVtIHVzaW5nIE1PUkVDT1JFIG9yIE1NQVAgKi8KK3N0YXRpYyB2b2lkKiBzeXNfYWxsb2MobXN0YXRlIG0sIHNpemVfdCBuYikgeworICBjaGFyKiB0YmFzZSA9IENNRkFJTDsKKyAgc2l6ZV90IHRzaXplID0gMDsKKyAgZmxhZ190IG1tYXBfZmxhZyA9IDA7CisKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisKKyAgLyogRGlyZWN0bHkgbWFwIGxhcmdlIGNodW5rcyAqLworICBpZiAodXNlX21tYXAobSkgJiYgbmIgPj0gbXBhcmFtcy5tbWFwX3RocmVzaG9sZCkgeworICAgIHZvaWQqIG1lbSA9IG1tYXBfYWxsb2MobSwgbmIpOworICAgIGlmIChtZW0gIT0gMCkKKyAgICAgIHJldHVybiBtZW07CisgIH0KKworICAvKgorICAgIFRyeSBnZXR0aW5nIG1lbW9yeSBpbiBhbnkgb2YgdGhyZWUgd2F5cyAoaW4gbW9zdC1wcmVmZXJyZWQgdG8KKyAgICBsZWFzdC1wcmVmZXJyZWQgb3JkZXIpOgorICAgIDEuIEEgY2FsbCB0byBNT1JFQ09SRSB0aGF0IGNhbiBub3JtYWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4KKyAgICAgICAoZGlzYWJsZWQgaWYgbm90IE1PUkVDT1JFX0NPTlRJR1VPVVMgb3Igbm90IEhBVkVfTU9SRUNPUkUgb3IKKyAgICAgICBtYWluIHNwYWNlIGlzIG1tYXBwZWQgb3IgYSBwcmV2aW91cyBjb250aWd1b3VzIGNhbGwgZmFpbGVkKQorICAgIDIuIEEgY2FsbCB0byBNTUFQIG5ldyBzcGFjZSAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU1BUCkuCisgICAgICAgTm90ZSB0aGF0IHVuZGVyIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBpZiBNT1JFQ09SRSBpcyB1bmFibGUgdG8KKyAgICAgICBmdWxmaWxsIGEgcmVxdWVzdCwgYW5kIEhBVkVfTU1BUCBpcyB0cnVlLCB0aGVuIG1tYXAgaXMKKyAgICAgICB1c2VkIGFzIGEgbm9uY29udGlndW91cyBzeXN0ZW0gYWxsb2NhdG9yLiBUaGlzIGlzIGEgdXNlZnVsIGJhY2t1cAorICAgICAgIHN0cmF0ZWd5IGZvciBzeXN0ZW1zIHdpdGggaG9sZXMgaW4gYWRkcmVzcyBzcGFjZXMgLS0gaW4gdGhpcyBjYXNlCisgICAgICAgc2JyayBjYW5ub3QgY29udGlndW91c2x5IGV4cGFuZCB0aGUgaGVhcCwgYnV0IG1tYXAgbWF5IGJlIGFibGUgdG8KKyAgICAgICBmaW5kIHNwYWNlLgorICAgIDMuIEEgY2FsbCB0byBNT1JFQ09SRSB0aGF0IGNhbm5vdCB1c3VhbGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5LgorICAgICAgIChkaXNhYmxlZCBpZiBub3QgSEFWRV9NT1JFQ09SRSkKKworICAgSW4gYWxsIGNhc2VzLCB3ZSBuZWVkIHRvIHJlcXVlc3QgZW5vdWdoIGJ5dGVzIGZyb20gc3lzdGVtIHRvIGVuc3VyZQorICAgd2UgY2FuIG1hbGxvYyBuYiBieXRlcyB1cG9uIHN1Y2Nlc3MsIHNvIHBhZCB3aXRoIGVub3VnaCBzcGFjZSBmb3IKKyAgIHRvcF9mb290LCBwbHVzIGFsaWdubWVudC1wYWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGxvc2UgYnl0ZXMgaWYKKyAgIG5vdCBvbiBib3VuZGFyeSwgYW5kIHJvdW5kIHRoaXMgdXAgdG8gYSBncmFudWxhcml0eSB1bml0LgorICAqLworCisgIGlmIChNT1JFQ09SRV9DT05USUdVT1VTICYmICF1c2Vfbm9uY29udGlndW91cyhtKSkgeworICAgIGNoYXIqIGJyID0gQ01GQUlMOworICAgIG1zZWdtZW50cHRyIHNzID0gKG0tPnRvcCA9PSAwKT8gMCA6IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopbS0+dG9wKTsKKyAgICBzaXplX3QgYXNpemUgPSAwOworICAgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisKKyAgICBpZiAoc3MgPT0gMCkgeyAgLyogRmlyc3QgdGltZSB0aHJvdWdoIG9yIHJlY292ZXJ5ICovCisgICAgICBjaGFyKiBiYXNlID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoMCk7CisgICAgICBpZiAoYmFzZSAhPSBDTUZBSUwpIHsKKwlhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcpOworCS8qIEFkanVzdCB0byBlbmQgb24gYSBwYWdlIGJvdW5kYXJ5ICovCisJaWYgKCFpc19wYWdlX2FsaWduZWQoYmFzZSkpCisJICBhc2l6ZSArPSAocGFnZV9hbGlnbigoc2l6ZV90KWJhc2UpIC0gKHNpemVfdCliYXNlKTsKKwkvKiBDYW4ndCBjYWxsIE1PUkVDT1JFIGlmIHNpemUgaXMgbmVnYXRpdmUgd2hlbiB0cmVhdGVkIGFzIHNpZ25lZCAqLworCWlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorCSAgICAoYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKSkgPT0gYmFzZSkgeworCSAgdGJhc2UgPSBiYXNlOworCSAgdHNpemUgPSBhc2l6ZTsKKwl9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogU3VidHJhY3Qgb3V0IGV4aXN0aW5nIGF2YWlsYWJsZSB0b3Agc3BhY2UgZnJvbSBNT1JFQ09SRSByZXF1ZXN0LiAqLworICAgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiAtIG0tPnRvcHNpemUgKyBTWVNfQUxMT0NfUEFERElORyk7CisgICAgICAvKiBVc2UgbWVtIGhlcmUgb25seSBpZiBpdCBkaWQgY29udGludW91c2x5IGV4dGVuZCBvbGQgc3BhY2UgKi8KKyAgICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorCSAgKGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSkpID09IHNzLT5iYXNlK3NzLT5zaXplKSB7CisJdGJhc2UgPSBicjsKKwl0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgIH0KKworICAgIGlmICh0YmFzZSA9PSBDTUZBSUwpIHsgICAgLyogQ29wZSB3aXRoIHBhcnRpYWwgZmFpbHVyZSAqLworICAgICAgaWYgKGJyICE9IENNRkFJTCkgeyAgICAvKiBUcnkgdG8gdXNlL2V4dGVuZCB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworCWlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorCSAgICBhc2l6ZSA8IG5iICsgU1lTX0FMTE9DX1BBRERJTkcpIHsKKwkgIHNpemVfdCBlc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcgLSBhc2l6ZSk7CisJICBpZiAoZXNpemUgPCBIQUxGX01BWF9TSVpFX1QpIHsKKwkgICAgY2hhciogZW5kID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoZXNpemUpOworCSAgICBpZiAoZW5kICE9IENNRkFJTCkKKwkgICAgICBhc2l6ZSArPSBlc2l6ZTsKKwkgICAgZWxzZSB7ICAgICAgICAgICAgLyogQ2FuJ3QgdXNlOyB0cnkgdG8gcmVsZWFzZSAqLworCSAgICAgICh2b2lkKSBDQUxMX01PUkVDT1JFKC1hc2l6ZSk7CisJICAgICAgYnIgPSBDTUZBSUw7CisJICAgIH0KKwkgIH0KKwl9CisgICAgICB9CisgICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFVzZSB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworCXRiYXNlID0gYnI7CisJdHNpemUgPSBhc2l6ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKwlkaXNhYmxlX2NvbnRpZ3VvdXMobSk7IC8qIERvbid0IHRyeSBjb250aWd1b3VzIHBhdGggaW4gdGhlIGZ1dHVyZSAqLworICAgIH0KKworICAgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgIH0KKworICBpZiAoSEFWRV9NTUFQICYmIHRiYXNlID09IENNRkFJTCkgeyAgLyogVHJ5IE1NQVAgKi8KKyAgICBzaXplX3QgcnNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HKTsKKyAgICBpZiAocnNpemUgPiBuYikgeyAvKiBGYWlsIGlmIHdyYXBzIGFyb3VuZCB6ZXJvICovCisgICAgICBjaGFyKiBtcCA9IChjaGFyKikoQ0FMTF9NTUFQKHJzaXplKSk7CisgICAgICBpZiAobXAgIT0gQ01GQUlMKSB7CisJdGJhc2UgPSBtcDsKKwl0c2l6ZSA9IHJzaXplOworCW1tYXBfZmxhZyA9IElTX01NQVBQRURfQklUOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChIQVZFX01PUkVDT1JFICYmIHRiYXNlID09IENNRkFJTCkgeyAvKiBUcnkgbm9uY29udGlndW91cyBNT1JFQ09SRSAqLworICAgIHNpemVfdCBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcpOworICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkgeworICAgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgICBjaGFyKiBlbmQgPSBDTUZBSUw7CisgICAgICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworICAgICAgYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKTsKKyAgICAgIGVuZCA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisgICAgICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworICAgICAgaWYgKGJyICE9IENNRkFJTCAmJiBlbmQgIT0gQ01GQUlMICYmIGJyIDwgZW5kKSB7CisJc2l6ZV90IHNzaXplID0gZW5kIC0gYnI7CisJaWYgKHNzaXplID4gbmIgKyBUT1BfRk9PVF9TSVpFKSB7CisJICB0YmFzZSA9IGJyOworCSAgdHNpemUgPSBzc2l6ZTsKKwl9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworCisgICAgaWYgKChtLT5mb290cHJpbnQgKz0gdHNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKyAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisKKyAgICBpZiAoIWlzX2luaXRpYWxpemVkKG0pKSB7IC8qIGZpcnN0LXRpbWUgaW5pdGlhbGl6YXRpb24gKi8KKyAgICAgIG0tPnNlZy5iYXNlID0gbS0+bGVhc3RfYWRkciA9IHRiYXNlOworICAgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKyAgICAgIG0tPnNlZy5zZmxhZ3MgPSBtbWFwX2ZsYWc7CisgICAgICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgICAgICBtLT5yZWxlYXNlX2NoZWNrcyA9IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEU7CisgICAgICBpbml0X2JpbnMobSk7CisjaWYgIU9OTFlfTVNQQUNFUworICAgICAgaWYgKGlzX2dsb2JhbChtKSkKKwlpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICB7CisJLyogT2Zmc2V0IHRvcCBieSBlbWJlZGRlZCBtYWxsb2Nfc3RhdGUgKi8KKwltY2h1bmtwdHIgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7CisJaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLVRPUF9GT09UX1NJWkUpOworICAgICAgfQorICAgIH0KKworICAgIGVsc2UgeworICAgICAgLyogVHJ5IHRvIG1lcmdlIHdpdGggYW4gZXhpc3Rpbmcgc2VnbWVudCAqLworICAgICAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICAgICAgLyogT25seSBjb25zaWRlciBtb3N0IHJlY2VudCBzZWdtZW50IGlmIHRyYXZlcnNhbCBzdXBwcmVzc2VkICovCisgICAgICB3aGlsZSAoc3AgIT0gMCAmJiB0YmFzZSAhPSBzcC0+YmFzZSArIHNwLT5zaXplKQorCXNwID0gKE5PX1NFR01FTlRfVFJBVkVSU0FMKSA/IDAgOiBzcC0+bmV4dDsKKyAgICAgIGlmIChzcCAhPSAwICYmCisJICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisJICAoc3AtPnNmbGFncyAmIElTX01NQVBQRURfQklUKSA9PSBtbWFwX2ZsYWcgJiYKKwkgIHNlZ21lbnRfaG9sZHMoc3AsIG0tPnRvcCkpIHsgLyogYXBwZW5kICovCisJc3AtPnNpemUgKz0gdHNpemU7CisJaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplICsgdHNpemUpOworICAgICAgfQorICAgICAgZWxzZSB7CisJaWYgKHRiYXNlIDwgbS0+bGVhc3RfYWRkcikKKwkgIG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKwlzcCA9ICZtLT5zZWc7CisJd2hpbGUgKHNwICE9IDAgJiYgc3AtPmJhc2UgIT0gdGJhc2UgKyB0c2l6ZSkKKwkgIHNwID0gKE5PX1NFR01FTlRfVFJBVkVSU0FMKSA/IDAgOiBzcC0+bmV4dDsKKwlpZiAoc3AgIT0gMCAmJgorCSAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisJICAgIChzcC0+c2ZsYWdzICYgSVNfTU1BUFBFRF9CSVQpID09IG1tYXBfZmxhZykgeworCSAgY2hhciogb2xkYmFzZSA9IHNwLT5iYXNlOworCSAgc3AtPmJhc2UgPSB0YmFzZTsKKwkgIHNwLT5zaXplICs9IHRzaXplOworCSAgcmV0dXJuIHByZXBlbmRfYWxsb2MobSwgdGJhc2UsIG9sZGJhc2UsIG5iKTsKKwl9CisJZWxzZQorCSAgYWRkX3NlZ21lbnQobSwgdGJhc2UsIHRzaXplLCBtbWFwX2ZsYWcpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8IG0tPnRvcHNpemUpIHsgLyogQWxsb2NhdGUgZnJvbSBuZXcgb3IgZXh0ZW5kZWQgdG9wIHNwYWNlICovCisgICAgICBzaXplX3QgcnNpemUgPSBtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IG0tPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorCisgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBzeXN0ZW0gZGVhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFVubWFwIGFuZCB1bmxpbmsgYW55IG1tYXBwZWQgc2VnbWVudHMgdGhhdCBkb24ndCBjb250YWluIHVzZWQgY2h1bmtzICovCitzdGF0aWMgc2l6ZV90IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG1zdGF0ZSBtKSB7CisgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgIGludCBuc2VncyA9IDA7CisgIG1zZWdtZW50cHRyIHByZWQgPSAmbS0+c2VnOworICBtc2VnbWVudHB0ciBzcCA9IHByZWQtPm5leHQ7CisgIHdoaWxlIChzcCAhPSAwKSB7CisgICAgY2hhciogYmFzZSA9IHNwLT5iYXNlOworICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgbXNlZ21lbnRwdHIgbmV4dCA9IHNwLT5uZXh0OworICAgICsrbnNlZ3M7CisgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkgJiYgIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworICAgICAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhiYXNlKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIC8qIENhbiB1bm1hcCBpZiBmaXJzdCBjaHVuayBob2xkcyBlbnRpcmUgc2VnbWVudCBhbmQgbm90IHBpbm5lZCAqLworICAgICAgaWYgKCFjaW51c2UocCkgJiYgKGNoYXIqKXAgKyBwc2l6ZSA+PSBiYXNlICsgc2l6ZSAtIFRPUF9GT09UX1NJWkUpIHsKKwl0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisJYXNzZXJ0KHNlZ21lbnRfaG9sZHMoc3AsIChjaGFyKilzcCkpOworCWlmIChwID09IG0tPmR2KSB7CisJICBtLT5kdiA9IDA7CisJICBtLT5kdnNpemUgPSAwOworCX0KKwllbHNlIHsKKwkgIHVubGlua19sYXJnZV9jaHVuayhtLCB0cCk7CisJfQorCWlmIChDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKSB7CisJICByZWxlYXNlZCArPSBzaXplOworCSAgbS0+Zm9vdHByaW50IC09IHNpemU7CisJICAvKiB1bmxpbmsgb2Jzb2xldGVkIHJlY29yZCAqLworCSAgc3AgPSBwcmVkOworCSAgc3AtPm5leHQgPSBuZXh0OworCX0KKwllbHNlIHsgLyogYmFjayBvdXQgaWYgY2Fubm90IHVubWFwICovCisJICBpbnNlcnRfbGFyZ2VfY2h1bmsobSwgdHAsIHBzaXplKTsKKwl9CisgICAgICB9CisgICAgfQorICAgIGlmIChOT19TRUdNRU5UX1RSQVZFUlNBTCkgLyogc2NhbiBvbmx5IGZpcnN0IHNlZ21lbnQgKi8KKyAgICAgIGJyZWFrOworICAgIHByZWQgPSBzcDsKKyAgICBzcCA9IG5leHQ7CisgIH0KKyAgLyogUmVzZXQgY2hlY2sgY291bnRlciAqLworICBtLT5yZWxlYXNlX2NoZWNrcyA9ICgobnNlZ3MgPiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFKT8KKwkJICAgICAgIG5zZWdzIDogTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSk7CisgIHJldHVybiByZWxlYXNlZDsKK30KKworc3RhdGljIGludCBzeXNfdHJpbShtc3RhdGUgbSwgc2l6ZV90IHBhZCkgeworICBzaXplX3QgcmVsZWFzZWQgPSAwOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaWYgKHBhZCA8IE1BWF9SRVFVRVNUICYmIGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgcGFkICs9IFRPUF9GT09UX1NJWkU7IC8qIGVuc3VyZSBlbm91Z2ggcm9vbSBmb3Igc2VnbWVudCBvdmVyaGVhZCAqLworCisgICAgaWYgKG0tPnRvcHNpemUgPiBwYWQpIHsKKyAgICAgIC8qIFNocmluayB0b3Agc3BhY2UgaW4gZ3JhbnVsYXJpdHktc2l6ZSB1bml0cywga2VlcGluZyBhdCBsZWFzdCBvbmUgKi8KKyAgICAgIHNpemVfdCB1bml0ID0gbXBhcmFtcy5ncmFudWxhcml0eTsKKyAgICAgIHNpemVfdCBleHRyYSA9ICgobS0+dG9wc2l6ZSAtIHBhZCArICh1bml0IC0gU0laRV9UX09ORSkpIC8gdW5pdCAtCisJCSAgICAgIFNJWkVfVF9PTkUpICogdW5pdDsKKyAgICAgIG1zZWdtZW50cHRyIHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKiltLT50b3ApOworCisgICAgICBpZiAoIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworCWlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApKSB7CisJICBpZiAoSEFWRV9NTUFQICYmCisJICAgICAgc3AtPnNpemUgPj0gZXh0cmEgJiYKKwkgICAgICAhaGFzX3NlZ21lbnRfbGluayhtLCBzcCkpIHsgLyogY2FuJ3Qgc2hyaW5rIGlmIHBpbm5lZCAqLworCSAgICBzaXplX3QgbmV3c2l6ZSA9IHNwLT5zaXplIC0gZXh0cmE7CisJICAgIC8qIFByZWZlciBtcmVtYXAsIGZhbGwgYmFjayB0byBtdW5tYXAgKi8KKwkgICAgaWYgKChDQUxMX01SRU1BUChzcC0+YmFzZSwgc3AtPnNpemUsIG5ld3NpemUsIDApICE9IE1GQUlMKSB8fAorCQkoQ0FMTF9NVU5NQVAoc3AtPmJhc2UgKyBuZXdzaXplLCBleHRyYSkgPT0gMCkpIHsKKwkgICAgICByZWxlYXNlZCA9IGV4dHJhOworCSAgICB9CisJICB9CisJfQorCWVsc2UgaWYgKEhBVkVfTU9SRUNPUkUpIHsKKwkgIGlmIChleHRyYSA+PSBIQUxGX01BWF9TSVpFX1QpIC8qIEF2b2lkIHdyYXBwaW5nIG5lZ2F0aXZlICovCisJICAgIGV4dHJhID0gKEhBTEZfTUFYX1NJWkVfVCkgKyBTSVpFX1RfT05FIC0gdW5pdDsKKwkgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJICB7CisJICAgIC8qIE1ha2Ugc3VyZSBlbmQgb2YgbWVtb3J5IGlzIHdoZXJlIHdlIGxhc3Qgc2V0IGl0LiAqLworCSAgICBjaGFyKiBvbGRfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworCSAgICBpZiAob2xkX2JyID09IHNwLT5iYXNlICsgc3AtPnNpemUpIHsKKwkgICAgICBjaGFyKiByZWxfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoLWV4dHJhKSk7CisJICAgICAgY2hhciogbmV3X2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKwkgICAgICBpZiAocmVsX2JyICE9IENNRkFJTCAmJiBuZXdfYnIgPCBvbGRfYnIpCisJCXJlbGVhc2VkID0gb2xkX2JyIC0gbmV3X2JyOworCSAgICB9CisJICB9CisJICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworCX0KKyAgICAgIH0KKworICAgICAgaWYgKHJlbGVhc2VkICE9IDApIHsKKwlzcC0+c2l6ZSAtPSByZWxlYXNlZDsKKwltLT5mb290cHJpbnQgLT0gcmVsZWFzZWQ7CisJaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplIC0gcmVsZWFzZWQpOworCWNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgICAgfQorICAgIH0KKworICAgIC8qIFVubWFwIGFueSB1bnVzZWQgbW1hcHBlZCBzZWdtZW50cyAqLworICAgIGlmIChIQVZFX01NQVApCisgICAgICByZWxlYXNlZCArPSByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhtKTsKKworICAgIC8qIE9uIGZhaWx1cmUsIGRpc2FibGUgYXV0b3RyaW0gdG8gYXZvaWQgcmVwZWF0ZWQgZmFpbGVkIGZ1dHVyZSBjYWxscyAqLworICAgIGlmIChyZWxlYXNlZCA9PSAwICYmIG0tPnRvcHNpemUgPiBtLT50cmltX2NoZWNrKQorICAgICAgbS0+dHJpbV9jaGVjayA9IE1BWF9TSVpFX1Q7CisgIH0KKworICByZXR1cm4gKHJlbGVhc2VkICE9IDApPyAxIDogMDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBhbGxvY2F0ZSBhIGxhcmdlIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLworc3RhdGljIHZvaWQqIHRtYWxsb2NfbGFyZ2UobXN0YXRlIG0sIHNpemVfdCBuYikgeworICB0Y2h1bmtwdHIgdiA9IDA7CisgIHNpemVfdCByc2l6ZSA9IC1uYjsgLyogVW5zaWduZWQgbmVnYXRpb24gKi8KKyAgdGNodW5rcHRyIHQ7CisgIGJpbmRleF90IGlkeDsKKyAgY29tcHV0ZV90cmVlX2luZGV4KG5iLCBpZHgpOworICBpZiAoKHQgPSAqdHJlZWJpbl9hdChtLCBpZHgpKSAhPSAwKSB7CisgICAgLyogVHJhdmVyc2UgdHJlZSBmb3IgdGhpcyBiaW4gbG9va2luZyBmb3Igbm9kZSB3aXRoIHNpemUgPT0gbmIgKi8KKyAgICBzaXplX3Qgc2l6ZWJpdHMgPSBuYiA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaWR4KTsKKyAgICB0Y2h1bmtwdHIgcnN0ID0gMDsgIC8qIFRoZSBkZWVwZXN0IHVudGFrZW4gcmlnaHQgc3VidHJlZSAqLworICAgIGZvciAoOzspIHsKKyAgICAgIHRjaHVua3B0ciBydDsKKyAgICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgICBpZiAodHJlbSA8IHJzaXplKSB7CisJdiA9IHQ7CisJaWYgKChyc2l6ZSA9IHRyZW0pID09IDApCisJICBicmVhazsKKyAgICAgIH0KKyAgICAgIHJ0ID0gdC0+Y2hpbGRbMV07CisgICAgICB0ID0gdC0+Y2hpbGRbKHNpemViaXRzID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXTsKKyAgICAgIGlmIChydCAhPSAwICYmIHJ0ICE9IHQpCisJcnN0ID0gcnQ7CisgICAgICBpZiAodCA9PSAwKSB7CisJdCA9IHJzdDsgLyogc2V0IHQgdG8gbGVhc3Qgc3VidHJlZSBob2xkaW5nIHNpemVzID4gbmIgKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIHNpemViaXRzIDw8PSAxOworICAgIH0KKyAgfQorICBpZiAodCA9PSAwICYmIHYgPT0gMCkgeyAvKiBzZXQgdCB0byByb290IG9mIG5leHQgbm9uLWVtcHR5IHRyZWViaW4gKi8KKyAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IGxlZnRfYml0cyhpZHgyYml0KGlkeCkpICYgbS0+dHJlZW1hcDsKKyAgICBpZiAobGVmdGJpdHMgIT0gMCkgeworICAgICAgYmluZGV4X3QgaTsKKyAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKyAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgICAgICB0ID0gKnRyZWViaW5fYXQobSwgaSk7CisgICAgfQorICB9CisKKyAgd2hpbGUgKHQgIT0gMCkgeyAvKiBmaW5kIHNtYWxsZXN0IG9mIHRyZWUgb3Igc3VidHJlZSAqLworICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgcnNpemUgPSB0cmVtOworICAgICAgdiA9IHQ7CisgICAgfQorICAgIHQgPSBsZWZ0bW9zdF9jaGlsZCh0KTsKKyAgfQorCisgIC8qICBJZiBkdiBpcyBhIGJldHRlciBmaXQsIHJldHVybiAwIHNvIG1hbGxvYyB3aWxsIHVzZSBpdCAqLworICBpZiAodiAhPSAwICYmIHJzaXplIDwgKHNpemVfdCkobS0+ZHZzaXplIC0gbmIpKSB7CisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsgLyogc3BsaXQgKi8KKyAgICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQodiwgbmIpOworICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6ZSArIG5iKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7CisJdW5saW5rX2xhcmdlX2NodW5rKG0sIHYpOworCWlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCSAgc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKKwllbHNlIHsKKwkgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOworCSAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwkgIGluc2VydF9jaHVuayhtLCByLCByc2l6ZSk7CisJfQorCXJldHVybiBjaHVuazJtZW0odik7CisgICAgICB9CisgICAgfQorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOworICB9CisgIHJldHVybiAwOworfQorCisvKiBhbGxvY2F0ZSBhIHNtYWxsIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLworc3RhdGljIHZvaWQqIHRtYWxsb2Nfc21hbGwobXN0YXRlIG0sIHNpemVfdCBuYikgeworICB0Y2h1bmtwdHIgdCwgdjsKKyAgc2l6ZV90IHJzaXplOworICBiaW5kZXhfdCBpOworICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChtLT50cmVlbWFwKTsKKyAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKyAgdiA9IHQgPSAqdHJlZWJpbl9hdChtLCBpKTsKKyAgcnNpemUgPSBjaHVua3NpemUodCkgLSBuYjsKKworICB3aGlsZSAoKHQgPSBsZWZ0bW9zdF9jaGlsZCh0KSkgIT0gMCkgeworICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgcnNpemUgPSB0cmVtOworICAgICAgdiA9IHQ7CisgICAgfQorICB9CisKKyAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsKKyAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOworICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7CisgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShtLCB2LCAocnNpemUgKyBuYikpOworICAgICAgZWxzZSB7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwlyZXBsYWNlX2R2KG0sIHIsIHJzaXplKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBjaHVuazJtZW0odik7CisgICAgfQorICB9CisKKyAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVhbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCogaW50ZXJuYWxfcmVhbGxvYyhtc3RhdGUgbSwgdm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKSB7CisgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgIHJldHVybiAwOworICB9CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgbWNodW5rcHRyIG9sZHAgPSBtZW0yY2h1bmsob2xkbWVtKTsKKyAgICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKKyAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZHAsIG9sZHNpemUpOworICAgIG1jaHVua3B0ciBuZXdwID0gMDsKKyAgICB2b2lkKiBleHRyYSA9IDA7CisKKyAgICAvKiBUcnkgdG8gZWl0aGVyIHNocmluayBvciBleHRlbmQgaW50byB0b3AuIEVsc2UgbWFsbG9jLWNvcHktZnJlZSAqLworCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCBvbGRwKSAmJiBva19jaW51c2Uob2xkcCkgJiYKKwkJb2tfbmV4dChvbGRwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOworICAgICAgaWYgKGlzX21tYXBwZWQob2xkcCkpCisJbmV3cCA9IG1tYXBfcmVzaXplKG0sIG9sZHAsIG5iKTsKKyAgICAgIGVsc2UgaWYgKG9sZHNpemUgPj0gbmIpIHsgLyogYWxyZWFkeSBiaWcgZW5vdWdoICovCisJc2l6ZV90IHJzaXplID0gb2xkc2l6ZSAtIG5iOworCW5ld3AgPSBvbGRwOworCWlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeworCSAgbWNodW5rcHRyIHJlbWFpbmRlciA9IGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIG5iKTsKKwkgIHNldF9pbnVzZShtLCBuZXdwLCBuYik7CisJICBzZXRfaW51c2UobSwgcmVtYWluZGVyLCByc2l6ZSk7CisJICBleHRyYSA9IGNodW5rMm1lbShyZW1haW5kZXIpOworCX0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG5leHQgPT0gbS0+dG9wICYmIG9sZHNpemUgKyBtLT50b3BzaXplID4gbmIpIHsKKwkvKiBFeHBhbmQgaW50byB0b3AgKi8KKwlzaXplX3QgbmV3c2l6ZSA9IG9sZHNpemUgKyBtLT50b3BzaXplOworCXNpemVfdCBuZXd0b3BzaXplID0gbmV3c2l6ZSAtIG5iOworCW1jaHVua3B0ciBuZXd0b3AgPSBjaHVua19wbHVzX29mZnNldChvbGRwLCBuYik7CisJc2V0X2ludXNlKG0sIG9sZHAsIG5iKTsKKwluZXd0b3AtPmhlYWQgPSBuZXd0b3BzaXplIHxQSU5VU0VfQklUOworCW0tPnRvcCA9IG5ld3RvcDsKKwltLT50b3BzaXplID0gbmV3dG9wc2l6ZTsKKwluZXdwID0gb2xkcDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQT1NUQUNUSU9OKG0pOworCisgICAgaWYgKG5ld3AgIT0gMCkgeworICAgICAgaWYgKGV4dHJhICE9IDApIHsKKwlpbnRlcm5hbF9mcmVlKG0sIGV4dHJhKTsKKyAgICAgIH0KKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOworICAgICAgcmV0dXJuIGNodW5rMm1lbShuZXdwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB2b2lkKiBuZXdtZW0gPSBpbnRlcm5hbF9tYWxsb2MobSwgYnl0ZXMpOworICAgICAgaWYgKG5ld21lbSAhPSAwKSB7CisJc2l6ZV90IG9jID0gb2xkc2l6ZSAtIG92ZXJoZWFkX2ZvcihvbGRwKTsKKwltZW1jcHkobmV3bWVtLCBvbGRtZW0sIChvYyA8IGJ5dGVzKT8gb2MgOiBieXRlcyk7CisJaW50ZXJuYWxfZnJlZShtLCBvbGRtZW0pOworICAgICAgfQorICAgICAgcmV0dXJuIG5ld21lbTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZW1hbGlnbiBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiBpbnRlcm5hbF9tZW1hbGlnbihtc3RhdGUgbSwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkgICAgLyogQ2FuIGp1c3QgdXNlIG1hbGxvYyAqLworICAgIHJldHVybiBpbnRlcm5hbF9tYWxsb2MobSwgYnl0ZXMpOworICBpZiAoYWxpZ25tZW50IDwgIE1JTl9DSFVOS19TSVpFKSAvKiBtdXN0IGJlIGF0IGxlYXN0IGEgbWluaW11bSBjaHVuayBzaXplICovCisgICAgYWxpZ25tZW50ID0gTUlOX0NIVU5LX1NJWkU7CisgIGlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudC1TSVpFX1RfT05FKSkgIT0gMCkgey8qIEVuc3VyZSBhIHBvd2VyIG9mIDIgKi8KKyAgICBzaXplX3QgYSA9IE1BTExPQ19BTElHTk1FTlQgPDwgMTsKKyAgICB3aGlsZSAoYSA8IGFsaWdubWVudCkgYSA8PD0gMTsKKyAgICBhbGlnbm1lbnQgPSBhOworICB9CisKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUIC0gYWxpZ25tZW50KSB7CisgICAgaWYgKG0gIT0gMCkgIHsgLyogVGVzdCBpc24ndCBuZWVkZWQgYnV0IGF2b2lkcyBjb21waWxlciB3YXJuaW5nICovCisgICAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgc2l6ZV90IHJlcSA9IG5iICsgYWxpZ25tZW50ICsgTUlOX0NIVU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRDsKKyAgICBjaGFyKiBtZW0gPSAoY2hhciopaW50ZXJuYWxfbWFsbG9jKG0sIHJlcSk7CisgICAgaWYgKG1lbSAhPSAwKSB7CisgICAgICB2b2lkKiBsZWFkZXIgPSAwOworICAgICAgdm9pZCogdHJhaWxlciA9IDA7CisgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworCisgICAgICBpZiAoUFJFQUNUSU9OKG0pKSByZXR1cm4gMDsKKyAgICAgIGlmICgoKChzaXplX3QpKG1lbSkpICUgYWxpZ25tZW50KSAhPSAwKSB7IC8qIG1pc2FsaWduZWQgKi8KKwkvKgorCSAgRmluZCBhbiBhbGlnbmVkIHNwb3QgaW5zaWRlIGNodW5rLiAgU2luY2Ugd2UgbmVlZCB0byBnaXZlCisJICBiYWNrIGxlYWRpbmcgc3BhY2UgaW4gYSBjaHVuayBvZiBhdCBsZWFzdCBNSU5fQ0hVTktfU0laRSwgaWYKKwkgIHRoZSBmaXJzdCBjYWxjdWxhdGlvbiBwbGFjZXMgdXMgYXQgYSBzcG90IHdpdGggbGVzcyB0aGFuCisJICBNSU5fQ0hVTktfU0laRSBsZWFkZXIsIHdlIGNhbiBtb3ZlIHRvIHRoZSBuZXh0IGFsaWduZWQgc3BvdC4KKwkgIFdlJ3ZlIGFsbG9jYXRlZCBlbm91Z2ggdG90YWwgcm9vbSBzbyB0aGF0IHRoaXMgaXMgYWx3YXlzCisJICBwb3NzaWJsZS4KKwkqLworCWNoYXIqIGJyID0gKGNoYXIqKW1lbTJjaHVuaygoc2l6ZV90KSgoKHNpemVfdCkobWVtICsKKwkJCQkJCSAgICAgICBhbGlnbm1lbnQgLQorCQkJCQkJICAgICAgIFNJWkVfVF9PTkUpKSAmCisJCQkJCSAgICAgLWFsaWdubWVudCkpOworCWNoYXIqIHBvcyA9ICgoc2l6ZV90KShiciAtIChjaGFyKikocCkpID49IE1JTl9DSFVOS19TSVpFKT8KKwkgIGJyIDogYnIrYWxpZ25tZW50OworCW1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cilwb3M7CisJc2l6ZV90IGxlYWRzaXplID0gcG9zIC0gKGNoYXIqKShwKTsKKwlzaXplX3QgbmV3c2l6ZSA9IGNodW5rc2l6ZShwKSAtIGxlYWRzaXplOworCisJaWYgKGlzX21tYXBwZWQocCkpIHsgLyogRm9yIG1tYXBwZWQgY2h1bmtzLCBqdXN0IGFkanVzdCBvZmZzZXQgKi8KKwkgIG5ld3AtPnByZXZfZm9vdCA9IHAtPnByZXZfZm9vdCArIGxlYWRzaXplOworCSAgbmV3cC0+aGVhZCA9IChuZXdzaXplfENJTlVTRV9CSVQpOworCX0KKwllbHNlIHsgLyogT3RoZXJ3aXNlLCBnaXZlIGJhY2sgbGVhZGVyLCB1c2UgdGhlIHJlc3QgKi8KKwkgIHNldF9pbnVzZShtLCBuZXdwLCBuZXdzaXplKTsKKwkgIHNldF9pbnVzZShtLCBwLCBsZWFkc2l6ZSk7CisJICBsZWFkZXIgPSBjaHVuazJtZW0ocCk7CisJfQorCXAgPSBuZXdwOworICAgICAgfQorCisgICAgICAvKiBHaXZlIGJhY2sgc3BhcmUgcm9vbSBhdCB0aGUgZW5kICovCisgICAgICBpZiAoIWlzX21tYXBwZWQocCkpIHsKKwlzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKwlpZiAoc2l6ZSA+IG5iICsgTUlOX0NIVU5LX1NJWkUpIHsKKwkgIHNpemVfdCByZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBuYjsKKwkgIG1jaHVua3B0ciByZW1haW5kZXIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJICBzZXRfaW51c2UobSwgcCwgbmIpOworCSAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUpOworCSAgdHJhaWxlciA9IGNodW5rMm1lbShyZW1haW5kZXIpOworCX0KKyAgICAgIH0KKworICAgICAgYXNzZXJ0IChjaHVua3NpemUocCkgPj0gbmIpOworICAgICAgYXNzZXJ0KCgoKHNpemVfdCkoY2h1bmsybWVtKHApKSkgJSBhbGlnbm1lbnQpID09IDApOworICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7CisgICAgICBQT1NUQUNUSU9OKG0pOworICAgICAgaWYgKGxlYWRlciAhPSAwKSB7CisJaW50ZXJuYWxfZnJlZShtLCBsZWFkZXIpOworICAgICAgfQorICAgICAgaWYgKHRyYWlsZXIgIT0gMCkgeworCWludGVybmFsX2ZyZWUobSwgdHJhaWxlcik7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbWFsbG9jL2NvYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqKiBpYWxsb2MobXN0YXRlIG0sCisJCSAgICAgc2l6ZV90IG5fZWxlbWVudHMsCisJCSAgICAgc2l6ZV90KiBzaXplcywKKwkJICAgICBpbnQgb3B0cywKKwkJICAgICB2b2lkKiBjaHVua3NbXSkgeworICAvKgorICAgIFRoaXMgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50X1ggcm91dGluZXMsIGhhbmRsaW5nCisgICAgYWxsIG9mIHRoZSBjb21iaW5hdGlvbnMgdGhhdCBjYW4gcmVzdWx0LgorCisgICAgVGhlIG9wdHMgYXJnIGhhczoKKyAgICBiaXQgMCBzZXQgaWYgYWxsIGVsZW1lbnRzIGFyZSBzYW1lIHNpemUgKHVzaW5nIHNpemVzWzBdKQorICAgIGJpdCAxIHNldCBpZiBlbGVtZW50cyBzaG91bGQgYmUgemVyb2VkCisgICovCisKKyAgc2l6ZV90ICAgIGVsZW1lbnRfc2l6ZTsgICAvKiBjaHVua3NpemUgb2YgZWFjaCBlbGVtZW50LCBpZiBhbGwgc2FtZSAqLworICBzaXplX3QgICAgY29udGVudHNfc2l6ZTsgIC8qIHRvdGFsIHNpemUgb2YgZWxlbWVudHMgKi8KKyAgc2l6ZV90ICAgIGFycmF5X3NpemU7ICAgICAvKiByZXF1ZXN0IHNpemUgb2YgcG9pbnRlciBhcnJheSAqLworICB2b2lkKiAgICAgbWVtOyAgICAgICAgICAgIC8qIG1hbGxvY2VkIGFnZ3JlZ2F0ZSBzcGFjZSAqLworICBtY2h1bmtwdHIgcDsgICAgICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgY2h1bmsgKi8KKyAgc2l6ZV90ICAgIHJlbWFpbmRlcl9zaXplOyAvKiByZW1haW5pbmcgYnl0ZXMgd2hpbGUgc3BsaXR0aW5nICovCisgIHZvaWQqKiAgICBtYXJyYXk7ICAgICAgICAgLyogZWl0aGVyICJjaHVua3MiIG9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLworICBtY2h1bmtwdHIgYXJyYXlfY2h1bms7ICAgIC8qIGNodW5rIGZvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8KKyAgZmxhZ190ICAgIHdhc19lbmFibGVkOyAgICAvKiB0byBkaXNhYmxlIG1tYXAgKi8KKyAgc2l6ZV90ICAgIHNpemU7CisgIHNpemVfdCAgICBpOworCisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICAvKiBjb21wdXRlIGFycmF5IGxlbmd0aCwgaWYgbmVlZGVkICovCisgIGlmIChjaHVua3MgIT0gMCkgeworICAgIGlmIChuX2VsZW1lbnRzID09IDApCisgICAgICByZXR1cm4gY2h1bmtzOyAvKiBub3RoaW5nIHRvIGRvICovCisgICAgbWFycmF5ID0gY2h1bmtzOworICAgIGFycmF5X3NpemUgPSAwOworICB9CisgIGVsc2UgeworICAgIC8qIGlmIGVtcHR5IHJlcSwgbXVzdCBzdGlsbCByZXR1cm4gY2h1bmsgcmVwcmVzZW50aW5nIGVtcHR5IGFycmF5ICovCisgICAgaWYgKG5fZWxlbWVudHMgPT0gMCkKKyAgICAgIHJldHVybiAodm9pZCoqKWludGVybmFsX21hbGxvYyhtLCAwKTsKKyAgICBtYXJyYXkgPSAwOworICAgIGFycmF5X3NpemUgPSByZXF1ZXN0MnNpemUobl9lbGVtZW50cyAqIChzaXplb2Yodm9pZCopKSk7CisgIH0KKworICAvKiBjb21wdXRlIHRvdGFsIGVsZW1lbnQgc2l6ZSAqLworICBpZiAob3B0cyAmIDB4MSkgeyAvKiBhbGwtc2FtZS1zaXplICovCisgICAgZWxlbWVudF9zaXplID0gcmVxdWVzdDJzaXplKCpzaXplcyk7CisgICAgY29udGVudHNfc2l6ZSA9IG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemU7CisgIH0KKyAgZWxzZSB7IC8qIGFkZCB1cCBhbGwgdGhlIHNpemVzICovCisgICAgZWxlbWVudF9zaXplID0gMDsKKyAgICBjb250ZW50c19zaXplID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpICE9IG5fZWxlbWVudHM7ICsraSkKKyAgICAgIGNvbnRlbnRzX3NpemUgKz0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgfQorCisgIHNpemUgPSBjb250ZW50c19zaXplICsgYXJyYXlfc2l6ZTsKKworICAvKgorICAgICBBbGxvY2F0ZSB0aGUgYWdncmVnYXRlIGNodW5rLiAgRmlyc3QgZGlzYWJsZSBkaXJlY3QtbW1hcHBpbmcgc28KKyAgICAgbWFsbG9jIHdvbid0IHVzZSBpdCwgc2luY2Ugd2Ugd291bGQgbm90IGJlIGFibGUgdG8gbGF0ZXIKKyAgICAgZnJlZS9yZWFsbG9jIHNwYWNlIGludGVybmFsIHRvIGEgc2VncmVnYXRlZCBtbWFwIHJlZ2lvbi4KKyAgKi8KKyAgd2FzX2VuYWJsZWQgPSB1c2VfbW1hcChtKTsKKyAgZGlzYWJsZV9tbWFwKG0pOworICBtZW0gPSBpbnRlcm5hbF9tYWxsb2MobSwgc2l6ZSAtIENIVU5LX09WRVJIRUFEKTsKKyAgaWYgKHdhc19lbmFibGVkKQorICAgIGVuYWJsZV9tbWFwKG0pOworICBpZiAobWVtID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKFBSRUFDVElPTihtKSkgcmV0dXJuIDA7CisgIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgcmVtYWluZGVyX3NpemUgPSBjaHVua3NpemUocCk7CisKKyAgYXNzZXJ0KCFpc19tbWFwcGVkKHApKTsKKworICBpZiAob3B0cyAmIDB4MikgeyAgICAgICAvKiBvcHRpb25hbGx5IGNsZWFyIHRoZSBlbGVtZW50cyAqLworICAgIG1lbXNldCgoc2l6ZV90KiltZW0sIDAsIHJlbWFpbmRlcl9zaXplIC0gU0laRV9UX1NJWkUgLSBhcnJheV9zaXplKTsKKyAgfQorCisgIC8qIElmIG5vdCBwcm92aWRlZCwgYWxsb2NhdGUgdGhlIHBvaW50ZXIgYXJyYXkgYXMgZmluYWwgcGFydCBvZiBjaHVuayAqLworICBpZiAobWFycmF5ID09IDApIHsKKyAgICBzaXplX3QgIGFycmF5X2NodW5rX3NpemU7CisgICAgYXJyYXlfY2h1bmsgPSBjaHVua19wbHVzX29mZnNldChwLCBjb250ZW50c19zaXplKTsKKyAgICBhcnJheV9jaHVua19zaXplID0gcmVtYWluZGVyX3NpemUgLSBjb250ZW50c19zaXplOworICAgIG1hcnJheSA9ICh2b2lkKiopIChjaHVuazJtZW0oYXJyYXlfY2h1bmspKTsKKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIGFycmF5X2NodW5rLCBhcnJheV9jaHVua19zaXplKTsKKyAgICByZW1haW5kZXJfc2l6ZSA9IGNvbnRlbnRzX3NpemU7CisgIH0KKworICAvKiBzcGxpdCBvdXQgZWxlbWVudHMgKi8KKyAgZm9yIChpID0gMDsgOyArK2kpIHsKKyAgICBtYXJyYXlbaV0gPSBjaHVuazJtZW0ocCk7CisgICAgaWYgKGkgIT0gbl9lbGVtZW50cy0xKSB7CisgICAgICBpZiAoZWxlbWVudF9zaXplICE9IDApCisJc2l6ZSA9IGVsZW1lbnRfc2l6ZTsKKyAgICAgIGVsc2UKKwlzaXplID0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgICAgIHJlbWFpbmRlcl9zaXplIC09IHNpemU7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHNpemUpOworICAgICAgcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHNpemUpOworICAgIH0KKyAgICBlbHNlIHsgLyogdGhlIGZpbmFsIGVsZW1lbnQgYWJzb3JicyBhbnkgb3ZlcmFsbG9jYXRpb24gc2xvcCAqLworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCByZW1haW5kZXJfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworI2lmIERFQlVHCisgIGlmIChtYXJyYXkgIT0gY2h1bmtzKSB7CisgICAgLyogZmluYWwgZWxlbWVudCBtdXN0IGhhdmUgZXhhY3RseSBleGhhdXN0ZWQgY2h1bmsgKi8KKyAgICBpZiAoZWxlbWVudF9zaXplICE9IDApIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSBlbGVtZW50X3NpemUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pKTsKKyAgICB9CisgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheSkpOworICB9CisgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQorICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXlbaV0pKTsKKworI2VuZGlmIC8qIERFQlVHICovCisKKyAgUE9TVEFDVElPTihtKTsKKyAgcmV0dXJuIG1hcnJheTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU9OTFlfTVNQQUNFUworCit2b2lkKiBkbG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgLyoKKyAgICAgQmFzaWMgYWxnb3JpdGhtOgorICAgICBJZiBhIHNtYWxsIHJlcXVlc3QgKDwgMjU2IGJ5dGVzIG1pbnVzIHBlci1jaHVuayBvdmVyaGVhZCk6CisgICAgICAgMS4gSWYgb25lIGV4aXN0cywgdXNlIGEgcmVtYWluZGVybGVzcyBjaHVuayBpbiBhc3NvY2lhdGVkIHNtYWxsYmluLgorCSAgKFJlbWFpbmRlcmxlc3MgbWVhbnMgdGhhdCB0aGVyZSBhcmUgdG9vIGZldyBleGNlc3MgYnl0ZXMgdG8KKwkgIHJlcHJlc2VudCBhcyBhIGNodW5rLikKKyAgICAgICAyLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIGR2IGNodW5rLCB3aGljaCBpcyBub3JtYWxseSB0aGUKKwkgIGNodW5rIGFkamFjZW50IHRvIHRoZSBvbmUgdXNlZCBmb3IgdGhlIG1vc3QgcmVjZW50IHNtYWxsIHJlcXVlc3QuCisgICAgICAgMy4gSWYgb25lIGV4aXN0cywgc3BsaXQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBjaHVuayBpbiBhIGJpbiwKKwkgIHNhdmluZyByZW1haW5kZXIgaW4gZHYuCisgICAgICAgNC4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuCisgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQKKyAgICAgT3RoZXJ3aXNlLCBmb3IgYSBsYXJnZSByZXF1ZXN0OgorICAgICAgIDEuIEZpbmQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBiaW5uZWQgY2h1bmsgdGhhdCBmaXRzLCBhbmQgdXNlIGl0CisJICBpZiBpdCBpcyBiZXR0ZXIgZml0dGluZyB0aGFuIGR2IGNodW5rLCBzcGxpdHRpbmcgaWYgbmVjZXNzYXJ5LgorICAgICAgIDIuIElmIGJldHRlciBmaXR0aW5nIHRoYW4gYW55IGJpbm5lZCBjaHVuaywgdXNlIHRoZSBkdiBjaHVuay4KKyAgICAgICAzLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIHRvcCBjaHVuay4KKyAgICAgICA0LiBJZiByZXF1ZXN0IHNpemUgPj0gbW1hcCB0aHJlc2hvbGQsIHRyeSB0byBkaXJlY3RseSBtbWFwIHRoaXMgY2h1bmsuCisgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQKKworICAgICBUaGUgdWdseSBnb3RvJ3MgaGVyZSBlbnN1cmUgdGhhdCBwb3N0YWN0aW9uIG9jY3VycyBhbG9uZyBhbGwgcGF0aHMuCisgICovCisKKyNpZiBVU0VfTE9DS1MKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7IC8qIGluaXRpYWxpemUgaW4gc3lzX2FsbG9jIGlmIG5vdCB1c2luZyBsb2NrcyAqLworI2VuZGlmCisKKyAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7CisgICAgdm9pZCogbWVtOworICAgIHNpemVfdCBuYjsKKyAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpIHsKKyAgICAgIGJpbmRleF90IGlkeDsKKyAgICAgIGJpbm1hcF90IHNtYWxsYml0czsKKyAgICAgIG5iID0gKGJ5dGVzIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsKKyAgICAgIHNtYWxsYml0cyA9IGdtLT5zbWFsbG1hcCA+PiBpZHg7CisKKyAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgeyAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLworCW1jaHVua3B0ciBiLCBwOworCWlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKwliID0gc21hbGxiaW5fYXQoZ20sIGlkeCk7CisJcCA9IGItPmZkOworCWFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKwl1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20sIGIsIHAsIGlkeCk7CisJc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisJbWVtID0gY2h1bmsybWVtKHApOworCWNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKwlnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gZ20tPmR2c2l6ZSkgeworCWlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLworCSAgbWNodW5rcHRyIGIsIHAsIHI7CisJICBzaXplX3QgcnNpemU7CisJICBiaW5kZXhfdCBpOworCSAgYmlubWFwX3QgbGVmdGJpdHMgPSAoc21hbGxiaXRzIDw8IGlkeCkgJiBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKTsKKwkgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKwkgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisJICBiID0gc21hbGxiaW5fYXQoZ20sIGkpOworCSAgcCA9IGItPmZkOworCSAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKKwkgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaSk7CisJICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKwkgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCisJICBpZiAoU0laRV9UX1NJWkUgIT0gNCAmJiByc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCSAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisJICBlbHNlIHsKKwkgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworCSAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCSAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCSAgICByZXBsYWNlX2R2KGdtLCByLCByc2l6ZSk7CisJICB9CisJICBtZW0gPSBjaHVuazJtZW0ocCk7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorCisJZWxzZSBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChnbSwgbmIpKSAhPSAwKSB7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkKKyAgICAgIG5iID0gTUFYX1NJWkVfVDsgLyogVG9vIGJpZyB0byBhbGxvY2F0ZS4gRm9yY2UgZmFpbHVyZSAoaW4gc3lzIGFsbG9jKSAqLworICAgIGVsc2UgeworICAgICAgbmIgPSBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShnbSwgbmIpKSAhPSAwKSB7CisJY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworCWdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPD0gZ20tPmR2c2l6ZSkgeworICAgICAgc2l6ZV90IHJzaXplID0gZ20tPmR2c2l6ZSAtIG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+ZHY7CisgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KKwltY2h1bmtwdHIgciA9IGdtLT5kdiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwlnbS0+ZHZzaXplID0gcnNpemU7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICB9CisgICAgICBlbHNlIHsgLyogZXhoYXVzdCBkdiAqLworCXNpemVfdCBkdnMgPSBnbS0+ZHZzaXplOworCWdtLT5kdnNpemUgPSAwOworCWdtLT5kdiA9IDA7CisJc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBnbS0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBnbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhnbSwgZ20tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKGdtLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGxmcmVlKHZvaWQqIG1lbSkgeworICAvKgorICAgICBDb25zb2xpZGF0ZSBmcmVlZCBjaHVua3Mgd2l0aCBwcmVjZWVkaW5nIG9yIHN1Y2NlZWRpbmcgYm9yZGVyaW5nCisgICAgIGZyZWUgY2h1bmtzLCBpZiB0aGV5IGV4aXN0LCBhbmQgdGhlbiBwbGFjZSBpbiBhIGJpbi4gIEludGVybWl4ZWQKKyAgICAgd2l0aCBzcGVjaWFsIGNhc2VzIGZvciB0b3AsIGR2LCBtbWFwcGVkIGNodW5rcywgYW5kIHVzYWdlIGVycm9ycy4KKyAgKi8KKworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKyNpZiBGT09URVJTCisgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBmbSBnbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIVBSRUFDVElPTihmbSkpIHsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2NpbnVzZShwKSkpIHsKKwlzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisJbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7CisJaWYgKCFwaW51c2UocCkpIHsKKwkgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsKKwkgIGlmICgocHJldnNpemUgJiBJU19NTUFQUEVEX0JJVCkgIT0gMCkgeworCSAgICBwcmV2c2l6ZSAmPSB+SVNfTU1BUFBFRF9CSVQ7CisJICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKwkgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQorCSAgICAgIGZtLT5mb290cHJpbnQgLT0gcHNpemU7CisJICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgIH0KKwkgIGVsc2UgeworCSAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7CisJICAgIHBzaXplICs9IHByZXZzaXplOworCSAgICBwID0gcHJldjsKKwkgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSB7IC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCisJICAgICAgaWYgKHAgIT0gZm0tPmR2KSB7CisJCXVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworCSAgICAgIH0KKwkgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpIHsKKwkJZm0tPmR2c2l6ZSA9IHBzaXplOworCQlzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisJCWdvdG8gcG9zdGFjdGlvbjsKKwkgICAgICB9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisJICB9CisJfQorCisJaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisJICBpZiAoIWNpbnVzZShuZXh0KSkgeyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLworCSAgICBpZiAobmV4dCA9PSBmbS0+dG9wKSB7CisJICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7CisJICAgICAgZm0tPnRvcCA9IHA7CisJICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKwkgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKwkJZm0tPmR2ID0gMDsKKwkJZm0tPmR2c2l6ZSA9IDA7CisJICAgICAgfQorCSAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQorCQlzeXNfdHJpbShmbSwgMCk7CisJICAgICAgZ290byBwb3N0YWN0aW9uOworCSAgICB9CisJICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KSB7CisJICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsKKwkgICAgICBmbS0+ZHYgPSBwOworCSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7CisJICAgICAgZ290byBwb3N0YWN0aW9uOworCSAgICB9CisJICAgIGVsc2UgeworCSAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKwkgICAgICBwc2l6ZSArPSBuc2l6ZTsKKwkgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsKKwkgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworCSAgICAgIGlmIChwID09IGZtLT5kdikgeworCQlmbS0+ZHZzaXplID0gcHNpemU7CisJCWdvdG8gcG9zdGFjdGlvbjsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KKwkgIGVsc2UKKwkgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworCisJICBpZiAoaXNfc21hbGwocHNpemUpKSB7CisJICAgIGluc2VydF9zbWFsbF9jaHVuayhmbSwgcCwgcHNpemUpOworCSAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKwkgIH0KKwkgIGVsc2UgeworCSAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisJICAgIGluc2VydF9sYXJnZV9jaHVuayhmbSwgdHAsIHBzaXplKTsKKwkgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisJICAgIGlmICgtLWZtLT5yZWxlYXNlX2NoZWNrcyA9PSAwKQorCSAgICAgIHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKGZtKTsKKwkgIH0KKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisgICAgICB9CisgICAgZXJyb3JhY3Rpb246CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgIHBvc3RhY3Rpb246CisgICAgICBQT1NUQUNUSU9OKGZtKTsKKyAgICB9CisgIH0KKyNpZiAhRk9PVEVSUworI3VuZGVmIGZtCisjZW5kaWYgLyogRk9PVEVSUyAqLworfQorCit2b2lkKiBkbGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICB2b2lkKiBtZW07CisgIHNpemVfdCByZXEgPSAwOworICBpZiAobl9lbGVtZW50cyAhPSAwKSB7CisgICAgcmVxID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKKyAgICBpZiAoKChuX2VsZW1lbnRzIHwgZWxlbV9zaXplKSAmIH4oc2l6ZV90KTB4ZmZmZikgJiYKKwkocmVxIC8gbl9lbGVtZW50cyAhPSBlbGVtX3NpemUpKQorICAgICAgcmVxID0gTUFYX1NJWkVfVDsgLyogZm9yY2UgZG93bnN0cmVhbSBmYWlsdXJlIG9uIG92ZXJmbG93ICovCisgIH0KKyAgbWVtID0gZGxtYWxsb2MocmVxKTsKKyAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKKyAgICBtZW1zZXQobWVtLCAwLCByZXEpOworICByZXR1cm4gbWVtOworfQorCit2b2lkKiBkbHJlYWxsb2Modm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKG9sZG1lbSA9PSAwKQorICAgIHJldHVybiBkbG1hbGxvYyhieXRlcyk7CisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCisgIGlmIChieXRlcyA9PSAwKSB7CisgICAgZGxmcmVlKG9sZG1lbSk7CisgICAgcmV0dXJuIDA7CisgIH0KKyNlbmRpZiAvKiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8KKyAgZWxzZSB7CisjaWYgISBGT09URVJTCisgICAgbXN0YXRlIG0gPSBnbTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgbSA9IGdldF9tc3RhdGVfZm9yKG1lbTJjaHVuayhvbGRtZW0pKTsKKyAgICBpZiAoIW9rX21hZ2ljKG0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgcmV0dXJuIGludGVybmFsX3JlYWxsb2MobSwgb2xkbWVtLCBieXRlcyk7CisgIH0KK30KKwordm9pZCogZGxtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKGdtLCBhbGlnbm1lbnQsIGJ5dGVzKTsKK30KKwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplLAorCQkJCSB2b2lkKiBjaHVua3NbXSkgeworICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgJnN6LCAzLCBjaHVua3MpOworfQorCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sCisJCQkJICAgdm9pZCogY2h1bmtzW10pIHsKKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Cit9CisKK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCBieXRlcykgeworICBzaXplX3QgcGFnZXN6OworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7CisgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgYnl0ZXMpOworfQorCit2b2lkKiBkbHB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc3o7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKKyAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCAoYnl0ZXMgKyBwYWdlc3ogLSBTSVpFX1RfT05FKSAmIH4ocGFnZXN6IC0gU0laRV9UX09ORSkpOworfQorCitpbnQgZGxtYWxsb2NfdHJpbShzaXplX3QgcGFkKSB7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpbnQgcmVzdWx0ID0gMDsKKyAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7CisgICAgcmVzdWx0ID0gc3lzX3RyaW0oZ20sIHBhZCk7CisgICAgUE9TVEFDVElPTihnbSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+Zm9vdHByaW50OworfQorCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+bWF4X2Zvb3RwcmludDsKK30KKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCkgeworICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8oZ20pOworfQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKK3ZvaWQgZGxtYWxsb2Nfc3RhdHMoKSB7CisgIGludGVybmFsX21hbGxvY19zdGF0cyhnbSk7Cit9CisKK2ludCBkbG1hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLworCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgaWYgKGNpbnVzZShwKSkKKyAgICAgIHJldHVybiBjaHVua3NpemUocCkgLSBvdmVyaGVhZF9mb3IocCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHVzZXIgbXNwYWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBNU1BBQ0VTCisKK3N0YXRpYyBtc3RhdGUgaW5pdF91c2VyX21zdGF0ZShjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplKSB7CisgIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIG1jaHVua3B0ciBtbjsKKyAgbWNodW5rcHRyIG1zcCA9IGFsaWduX2FzX2NodW5rKHRiYXNlKTsKKyAgbXN0YXRlIG0gPSAobXN0YXRlKShjaHVuazJtZW0obXNwKSk7CisgIG1lbXNldChtLCAwLCBtc2l6ZSk7CisgIElOSVRJQUxfTE9DSygmbS0+bXV0ZXgpOworICBtc3AtPmhlYWQgPSAobXNpemV8UElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gbS0+Zm9vdHByaW50ID0gbS0+bWF4X2Zvb3RwcmludCA9IHRzaXplOworICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgIG0tPnJlbGVhc2VfY2hlY2tzID0gTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURTsKKyAgbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKKyAgbS0+ZXh0cCA9IDA7CisgIG0tPmV4dHMgPSAwOworICBkaXNhYmxlX2NvbnRpZ3VvdXMobSk7CisgIGluaXRfYmlucyhtKTsKKyAgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7CisgIGluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgodGJhc2UgKyB0c2l6ZSkgLSAoY2hhciopbW4pIC0gVE9QX0ZPT1RfU0laRSk7CisgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICByZXR1cm4gbTsKK30KKworbXNwYWNlIGNyZWF0ZV9tc3BhY2Uoc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKSB7CisgIG1zdGF0ZSBtID0gMDsKKyAgc2l6ZV90IG1zaXplOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpZiAoY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgeworICAgIHNpemVfdCBycyA9ICgoY2FwYWNpdHkgPT0gMCk/IG1wYXJhbXMuZ3JhbnVsYXJpdHkgOgorCQkgKGNhcGFjaXR5ICsgVE9QX0ZPT1RfU0laRSArIG1zaXplKSk7CisgICAgc2l6ZV90IHRzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24ocnMpOworICAgIGNoYXIqIHRiYXNlID0gKGNoYXIqKShDQUxMX01NQVAodHNpemUpKTsKKyAgICBpZiAodGJhc2UgIT0gQ01GQUlMKSB7CisgICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSh0YmFzZSwgdHNpemUpOworICAgICAgbS0+c2VnLnNmbGFncyA9IElTX01NQVBQRURfQklUOworICAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIChtc3BhY2UpbTsKK30KKworbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkgeworICBtc3RhdGUgbSA9IDA7CisgIHNpemVfdCBtc2l6ZTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKKyAgaWYgKGNhcGFjaXR5ID4gbXNpemUgKyBUT1BfRk9PVF9TSVpFICYmCisgICAgICBjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUoKGNoYXIqKWJhc2UsIGNhcGFjaXR5KTsKKyAgICBtLT5zZWcuc2ZsYWdzID0gRVhURVJOX0JJVDsKKyAgICBzZXRfbG9jayhtLCBsb2NrZWQpOworICB9CisgIHJldHVybiAobXNwYWNlKW07Cit9CisKK2ludCBtc3BhY2VfbW1hcF9sYXJnZV9jaHVua3MobXNwYWNlIG1zcCwgaW50IGVuYWJsZSkgeworICBpbnQgcmV0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgIGlmICh1c2VfbW1hcChtcykpCisgICAgICByZXQgPSAxOworICAgIGlmIChlbmFibGUpCisgICAgICBlbmFibGVfbW1hcChtcyk7CisgICAgZWxzZQorICAgICAgZGlzYWJsZV9tbWFwKG1zKTsKKyAgICBQT1NUQUNUSU9OKG1zKTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCkgeworICBzaXplX3QgZnJlZWQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIG1zZWdtZW50cHRyIHNwID0gJm1zLT5zZWc7CisgICAgd2hpbGUgKHNwICE9IDApIHsKKyAgICAgIGNoYXIqIGJhc2UgPSBzcC0+YmFzZTsKKyAgICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgICBmbGFnX3QgZmxhZyA9IHNwLT5zZmxhZ3M7CisgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgaWYgKChmbGFnICYgSVNfTU1BUFBFRF9CSVQpICYmICEoZmxhZyAmIEVYVEVSTl9CSVQpICYmCisJICBDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKQorCWZyZWVkICs9IHNpemU7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGZyZWVkOworfQorCisvKgorICBtc3BhY2UgdmVyc2lvbnMgb2Ygcm91dGluZXMgYXJlIG5lYXItY2xvbmVzIG9mIHRoZSBnbG9iYWwKKyAgdmVyc2lvbnMuIFRoaXMgaXMgbm90IHNvIG5pY2UgYnV0IGJldHRlciB0aGFuIHRoZSBhbHRlcm5hdGl2ZXMuCisqLworCisKK3ZvaWQqIG1zcGFjZV9tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IGJ5dGVzKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKCFQUkVBQ1RJT04obXMpKSB7CisgICAgdm9pZCogbWVtOworICAgIHNpemVfdCBuYjsKKyAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpIHsKKyAgICAgIGJpbmRleF90IGlkeDsKKyAgICAgIGJpbm1hcF90IHNtYWxsYml0czsKKyAgICAgIG5iID0gKGJ5dGVzIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsKKyAgICAgIHNtYWxsYml0cyA9IG1zLT5zbWFsbG1hcCA+PiBpZHg7CisKKyAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgeyAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLworCW1jaHVua3B0ciBiLCBwOworCWlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKwliID0gc21hbGxiaW5fYXQobXMsIGlkeCk7CisJcCA9IGItPmZkOworCWFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKwl1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGlkeCk7CisJc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisJbWVtID0gY2h1bmsybWVtKHApOworCWNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKwlnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gbXMtPmR2c2l6ZSkgeworCWlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLworCSAgbWNodW5rcHRyIGIsIHAsIHI7CisJICBzaXplX3QgcnNpemU7CisJICBiaW5kZXhfdCBpOworCSAgYmlubWFwX3QgbGVmdGJpdHMgPSAoc21hbGxiaXRzIDw8IGlkeCkgJiBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKTsKKwkgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKwkgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisJICBiID0gc21hbGxiaW5fYXQobXMsIGkpOworCSAgcCA9IGItPmZkOworCSAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKKwkgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhtcywgYiwgcCwgaSk7CisJICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKwkgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCisJICBpZiAoU0laRV9UX1NJWkUgIT0gNCAmJiByc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCSAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisJICBlbHNlIHsKKwkgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworCSAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCSAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCSAgICByZXBsYWNlX2R2KG1zLCByLCByc2l6ZSk7CisJICB9CisJICBtZW0gPSBjaHVuazJtZW0ocCk7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorCisJZWxzZSBpZiAobXMtPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChtcywgbmIpKSAhPSAwKSB7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkKKyAgICAgIG5iID0gTUFYX1NJWkVfVDsgLyogVG9vIGJpZyB0byBhbGxvY2F0ZS4gRm9yY2UgZmFpbHVyZSAoaW4gc3lzIGFsbG9jKSAqLworICAgIGVsc2UgeworICAgICAgbmIgPSBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZiAobXMtPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShtcywgbmIpKSAhPSAwKSB7CisJY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworCWdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPD0gbXMtPmR2c2l6ZSkgeworICAgICAgc2l6ZV90IHJzaXplID0gbXMtPmR2c2l6ZSAtIG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+ZHY7CisgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KKwltY2h1bmtwdHIgciA9IG1zLT5kdiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwltcy0+ZHZzaXplID0gcnNpemU7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisgICAgICB9CisgICAgICBlbHNlIHsgLyogZXhoYXVzdCBkdiAqLworCXNpemVfdCBkdnMgPSBtcy0+ZHZzaXplOworCW1zLT5kdnNpemUgPSAwOworCW1zLT5kdiA9IDA7CisJc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBtcy0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBtcy0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtcywgbXMtPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKG1zLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKG1zKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworI2lmIEZPT1RFUlMKKyAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgZm0gPSAobXN0YXRlKW1zcDsKKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghUFJFQUNUSU9OKGZtKSkgeworICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHApOworICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcCkgJiYgb2tfY2ludXNlKHApKSkgeworCXNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKwltY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKwlpZiAoIXBpbnVzZShwKSkgeworCSAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290OworCSAgaWYgKChwcmV2c2l6ZSAmIElTX01NQVBQRURfQklUKSAhPSAwKSB7CisJICAgIHByZXZzaXplICY9IH5JU19NTUFQUEVEX0JJVDsKKwkgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOworCSAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApCisJICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsKKwkgICAgZ290byBwb3N0YWN0aW9uOworCSAgfQorCSAgZWxzZSB7CisJICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKKwkgICAgcHNpemUgKz0gcHJldnNpemU7CisJICAgIHAgPSBwcmV2OworCSAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpIHsgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KKwkgICAgICBpZiAocCAhPSBmbS0+ZHYpIHsKKwkJdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7CisJICAgICAgfQorCSAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworCQlmbS0+ZHZzaXplID0gcHNpemU7CisJCXNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKwkJZ290byBwb3N0YWN0aW9uOworCSAgICAgIH0KKwkgICAgfQorCSAgICBlbHNlCisJICAgICAgZ290byBlcnJvcmFjdGlvbjsKKwkgIH0KKwl9CisKKwlpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKwkgIGlmICghY2ludXNlKG5leHQpKSB7ICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovCisJICAgIGlmIChuZXh0ID09IGZtLT50b3ApIHsKKwkgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsKKwkgICAgICBmbS0+dG9wID0gcDsKKwkgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworCSAgICAgIGlmIChwID09IGZtLT5kdikgeworCQlmbS0+ZHYgPSAwOworCQlmbS0+ZHZzaXplID0gMDsKKwkgICAgICB9CisJICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpCisJCXN5c190cmltKGZtLCAwKTsKKwkgICAgICBnb3RvIHBvc3RhY3Rpb247CisJICAgIH0KKwkgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpIHsKKwkgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOworCSAgICAgIGZtLT5kdiA9IHA7CisJICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsKKwkgICAgICBnb3RvIHBvc3RhY3Rpb247CisJICAgIH0KKwkgICAgZWxzZSB7CisJICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOworCSAgICAgIHBzaXplICs9IG5zaXplOworCSAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOworCSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7CisJICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisJCWZtLT5kdnNpemUgPSBwc2l6ZTsKKwkJZ290byBwb3N0YWN0aW9uOworCSAgICAgIH0KKwkgICAgfQorCSAgfQorCSAgZWxzZQorCSAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisKKwkgIGlmIChpc19zbWFsbChwc2l6ZSkpIHsKKwkgICAgaW5zZXJ0X3NtYWxsX2NodW5rKGZtLCBwLCBwc2l6ZSk7CisJICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworCSAgfQorCSAgZWxzZSB7CisJICAgIHRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsKKwkgICAgaW5zZXJ0X2xhcmdlX2NodW5rKGZtLCB0cCwgcHNpemUpOworCSAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKwkgICAgaWYgKC0tZm0tPnJlbGVhc2VfY2hlY2tzID09IDApCisJICAgICAgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMoZm0pOworCSAgfQorCSAgZ290byBwb3N0YWN0aW9uOworCX0KKyAgICAgIH0KKyAgICBlcnJvcmFjdGlvbjoKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgcG9zdGFjdGlvbjoKKyAgICAgIFBPU1RBQ1RJT04oZm0pOworICAgIH0KKyAgfQorfQorCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgIHZvaWQqIG1lbTsKKyAgc2l6ZV90IHJlcSA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKG5fZWxlbWVudHMgIT0gMCkgeworICAgIHJlcSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7CisgICAgaWYgKCgobl9lbGVtZW50cyB8IGVsZW1fc2l6ZSkgJiB+KHNpemVfdCkweGZmZmYpICYmCisJKHJlcSAvIG5fZWxlbWVudHMgIT0gZWxlbV9zaXplKSkKKyAgICAgIHJlcSA9IE1BWF9TSVpFX1Q7IC8qIGZvcmNlIGRvd25zdHJlYW0gZmFpbHVyZSBvbiBvdmVyZmxvdyAqLworICB9CisgIG1lbSA9IGludGVybmFsX21hbGxvYyhtcywgcmVxKTsKKyAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKKyAgICBtZW1zZXQobWVtLCAwLCByZXEpOworICByZXR1cm4gbWVtOworfQorCit2b2lkKiBtc3BhY2VfcmVhbGxvYyhtc3BhY2UgbXNwLCB2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICBpZiAob2xkbWVtID09IDApCisgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2MobXNwLCBieXRlcyk7CisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCisgIGlmIChieXRlcyA9PSAwKSB7CisgICAgbXNwYWNlX2ZyZWUobXNwLCBvbGRtZW0pOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCisgIGVsc2UgeworI2lmIEZPT1RFUlMKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsob2xkbWVtKTsKKyAgICBtc3RhdGUgbXMgPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGludGVybmFsX3JlYWxsb2MobXMsIG9sZG1lbSwgYnl0ZXMpOworICB9Cit9CisKK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaW50ZXJuYWxfbWVtYWxpZ24obXMsIGFsaWdubWVudCwgYnl0ZXMpOworfQorCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKwkJCQkgc2l6ZV90IGVsZW1fc2l6ZSwgdm9pZCogY2h1bmtzW10pIHsKKyAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovCisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGlhbGxvYyhtcywgbl9lbGVtZW50cywgJnN6LCAzLCBjaHVua3MpOworfQorCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOworfQorCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCkgeworICBpbnQgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICAgIHJlc3VsdCA9IHN5c190cmltKG1zLCBwYWQpOworICAgICAgUE9TVEFDVElPTihtcyk7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXMpOworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KK30KKworc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+Zm9vdHByaW50OworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+bWF4X2Zvb3RwcmludDsKKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKG1zKTsKK30KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCitzaXplX3QgbXNwYWNlX3VzYWJsZV9zaXplKHZvaWQqIG1lbSkgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIGlmIChjaW51c2UocCkpCisgICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gb3ZlcmhlYWRfZm9yKHApOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgbXNwYWNlX21hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisjZW5kaWYgLyogTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBBbHRlcm5hdGl2ZSBNT1JFQ09SRSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBHdWlkZWxpbmVzIGZvciBjcmVhdGluZyBhIGN1c3RvbSB2ZXJzaW9uIG9mIE1PUkVDT1JFOgorCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIE1PUkVDT1JFIHNob3VsZCBhbGxvY2F0ZSBpbiBtdWx0aXBsZXMgb2YgcGFnZXNpemUuCisgICogTU9SRUNPUkUgbWF5IGFsbG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkLiAoT3IgZXZlbiBsZXNzLAorICAgICAgYnV0IHRoaXMgd2lsbCB1c3VhbGx5IHJlc3VsdCBpbiBhIG1hbGxvYyBmYWlsdXJlLikKKyAgKiBNT1JFQ09SRSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2hlbiBnaXZlbiBhcmd1bWVudCB6ZXJvLCBidXQKKyAgICAgIGluc3RlYWQgcmV0dXJuIG9uZSBwYXN0IHRoZSBlbmQgYWRkcmVzcyBvZiBtZW1vcnkgZnJvbSBwcmV2aW91cworICAgICAgbm9uemVybyBjYWxsLgorICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSB3aXRoIHBvc2l0aXZlCisgICAgICBhcmd1bWVudHMgc2hvdWxkIHJldHVybiBpbmNyZWFzaW5nIGFkZHJlc3NlcywgaW5kaWNhdGluZyB0aGF0CisgICAgICBzcGFjZSBoYXMgYmVlbiBjb250aWd1b3VzbHkgZXh0ZW5kZWQuCisgICogRXZlbiB0aG91Z2ggY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgcmV0dXJuIGNvbnRpZ3VvdXMKKyAgICAgIGFkZHJlc3NlcywgaXQgbXVzdCBiZSBPSyBmb3IgbWFsbG9jJ2VkIGNodW5rcyB0byBzcGFuIG11bHRpcGxlCisgICAgICByZWdpb25zIGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZXkgZG8gaGFwcGVuIHRvIGJlIGNvbnRpZ3VvdXMuCisgICogTU9SRUNPUkUgbmVlZCBub3QgaGFuZGxlIG5lZ2F0aXZlIGFyZ3VtZW50cyAtLSBpdCBtYXkgaW5zdGVhZAorICAgICAganVzdCByZXR1cm4gTUZBSUwgd2hlbiBnaXZlbiBuZWdhdGl2ZSBhcmd1bWVudHMuCisgICAgICBOZWdhdGl2ZSBhcmd1bWVudHMgYXJlIGFsd2F5cyBtdWx0aXBsZXMgb2YgcGFnZXNpemUuIE1PUkVDT1JFCisgICAgICBtdXN0IG5vdCBtaXNpbnRlcnByZXQgbmVnYXRpdmUgYXJncyBhcyBsYXJnZSBwb3NpdGl2ZSB1bnNpZ25lZAorICAgICAgYXJncy4gWW91IGNhbiBzdXBwcmVzcyBhbGwgc3VjaCBjYWxscyBmcm9tIGV2ZW4gb2NjdXJyaW5nIGJ5IGRlZmluaW5nCisgICAgICBNT1JFQ09SRV9DQU5OT1RfVFJJTSwKKworICBBcyBhbiBleGFtcGxlIGFsdGVybmF0aXZlIE1PUkVDT1JFLCBoZXJlIGlzIGEgY3VzdG9tIGFsbG9jYXRvcgorICBraW5kbHkgY29udHJpYnV0ZWQgZm9yIHByZS1PU1ggbWFjT1MuICBJdCB1c2VzIHZpcnR1YWxseSBidXQgbm90CisgIG5lY2Vzc2FyaWx5IHBoeXNpY2FsbHkgY29udGlndW91cyBub24tcGFnZWQgbWVtb3J5IChsb2NrZWQgaW4sCisgIHByZXNlbnQgYW5kIHdvbid0IGdldCBzd2FwcGVkIG91dCkuICBZb3UgY2FuIHVzZSBpdCBieSB1bmNvbW1lbnRpbmcKKyAgdGhpcyBzZWN0aW9uLCBhZGRpbmcgc29tZSAjaW5jbHVkZXMsIGFuZCBzZXR0aW5nIHVwIHRoZSBhcHByb3ByaWF0ZQorICBkZWZpbmVzIGFib3ZlOgorCisgICAgICAjZGVmaW5lIE1PUkVDT1JFIG9zTW9yZUNvcmUKKworICBUaGVyZSBpcyBhbHNvIGEgc2h1dGRvd24gcm91dGluZSB0aGF0IHNob3VsZCBzb21laG93IGJlIGNhbGxlZCBmb3IKKyAgY2xlYW51cCB1cG9uIHByb2dyYW0gZXhpdC4KKworICAjZGVmaW5lIE1BWF9QT09MX0VOVFJJRVMgMTAwCisgICNkZWZpbmUgTUlOSU1VTV9NT1JFQ09SRV9TSVpFICAoNjQgKiAxMDI0VSkKKyAgc3RhdGljIGludCBuZXh0X29zX3Bvb2w7CisgIHZvaWQgKm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsKKworICB2b2lkICpvc01vcmVDb3JlKGludCBzaXplKQorICB7CisgICAgdm9pZCAqcHRyID0gMDsKKyAgICBzdGF0aWMgdm9pZCAqc2Jya190b3AgPSAwOworCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgIGlmIChzaXplIDwgTUlOSU1VTV9NT1JFQ09SRV9TSVpFKQorCSBzaXplID0gTUlOSU1VTV9NT1JFQ09SRV9TSVpFOworICAgICAgaWYgKEN1cnJlbnRFeGVjdXRpb25MZXZlbCgpID09IGtUYXNrTGV2ZWwpCisJIHB0ciA9IFBvb2xBbGxvY2F0ZVJlc2lkZW50KHNpemUgKyBSTV9QQUdFX1NJWkUsIDApOworICAgICAgaWYgKHB0ciA9PSAwKQorICAgICAgeworCXJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICAgIH0KKyAgICAgIC8vIHNhdmUgcHRycyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBkdXJpbmcgY2xlYW51cAorICAgICAgb3VyX29zX3Bvb2xzW25leHRfb3NfcG9vbF0gPSBwdHI7CisgICAgICBuZXh0X29zX3Bvb2wrKzsKKyAgICAgIHB0ciA9ICh2b2lkICopICgoKChzaXplX3QpIHB0cikgKyBSTV9QQUdFX01BU0spICYgflJNX1BBR0VfTUFTSyk7CisgICAgICBzYnJrX3RvcCA9IChjaGFyICopIHB0ciArIHNpemU7CisgICAgICByZXR1cm4gcHRyOworICAgIH0KKyAgICBlbHNlIGlmIChzaXplIDwgMCkKKyAgICB7CisgICAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBzaHJpbmsgYmVoYXZpb3IKKyAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBzYnJrX3RvcDsKKyAgICB9CisgIH0KKworICAvLyBjbGVhbnVwIGFueSBhbGxvY2F0ZWQgbWVtb3J5IHBvb2xzCisgIC8vIGNhbGxlZCBhcyBsYXN0IHRoaW5nIGJlZm9yZSBzaHV0dGluZyBkb3duIGRyaXZlcgorCisgIHZvaWQgb3NDbGVhbnVwTWVtKHZvaWQpCisgIHsKKyAgICB2b2lkICoqcHRyOworCisgICAgZm9yIChwdHIgPSBvdXJfb3NfcG9vbHM7IHB0ciA8ICZvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107IHB0cisrKQorICAgICAgaWYgKCpwdHIpCisgICAgICB7CisJIFBvb2xEZWFsbG9jYXRlKCpwdHIpOworCSAqcHRyID0gMDsKKyAgICAgIH0KKyAgfQorCisqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIaXN0b3J5OgorICAgIFYyLjguNCAobm90IHlldCByZWxlYXNlZCkKKyAgICAgICogQWRkIG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rczsgdGhhbmtzIHRvIEplYW4gQnJvdXdlcnMKKyAgICAgICogRml4IGluc3VmZmljaWVudCBzeXNfYWxsb2MgcGFkZGluZyB3aGVuIHVzaW5nIDE2Ynl0ZSBhbGlnbm1lbnQKKyAgICAgICogRml4IGJhZCBlcnJvciBjaGVjayBpbiBtc3BhY2VfZm9vdHByaW50CisgICAgICAqIEFkYXB0YXRpb25zIGZvciBwdG1hbGxvYywgY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIuCisgICAgICAqIFJlZW50cmFudCBzcGluIGxvY2tzLCBjb3VydGVzeSBvZiBFYXJsIENoZXcgYW5kIG90aGVycworICAgICAgKiBXaW4zMiBpbXByb3ZlbWVudHMsIGNvdXJ0ZXN5IG9mIE5pYWxsIERvdWdsYXMgYW5kIEVhcmwgQ2hldworICAgICAgKiBBZGQgTk9fU0VHTUVOVF9UUkFWRVJTQUwgYW5kIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgb3B0aW9ucworICAgICAgKiBFeHRlbnNpb24gaG9vayBpbiBtYWxsb2Nfc3RhdGUKKyAgICAgICogVmFyaW91cyBzbWFsbCBhZGp1c3RtZW50cyB0byByZWR1Y2Ugd2FybmluZ3Mgb24gc29tZSBjb21waWxlcnMKKyAgICAgICogVmFyaW91cyBjb25maWd1cmF0aW9uIGV4dGVuc2lvbnMvY2hhbmdlcyBmb3IgbW9yZSBwbGF0Zm9ybXMuIFRoYW5rcworCSB0byBhbGwgd2hvIGNvbnRyaWJ1dGVkIHRoZXNlLgorCisgICAgVjIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MzIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZCBtYXhfZm9vdHByaW50IGZ1bmN0aW9ucworICAgICAgKiBFbnN1cmUgYWxsIGFwcHJvcHJpYXRlIGxpdGVyYWxzIGFyZSBzaXplX3QKKyAgICAgICogRml4IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHByb2JsZW0gZm9yIHNvbWUgI2RlZmluZSBzZXR0aW5ncworICAgICAgKiBBdm9pZCBjb25jYXRlbmF0aW5nIHNlZ21lbnRzIHdpdGggdGhlIG9uZSBwcm92aWRlZAorCWluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlCisgICAgICAqIFJlbmFtZSBzb21lIHZhcmlhYmxlcyB0byBhdm9pZCBjb21waWxlciBzaGFkb3dpbmcgd2FybmluZ3MKKyAgICAgICogVXNlIGV4cGxpY2l0IGxvY2sgaW5pdGlhbGl6YXRpb24uCisgICAgICAqIEJldHRlciBoYW5kbGluZyBvZiBzYnJrIGludGVyZmVyZW5jZS4KKyAgICAgICogU2ltcGxpZnkgYW5kIGZpeCBzZWdtZW50IGluc2VydGlvbiwgdHJpbW1pbmcgYW5kIG1zcGFjZV9kZXN0cm95CisgICAgICAqIFJlaW5zdGF0ZSBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgb3B0aW9uIGZyb20gMi43LngKKyAgICAgICogVGhhbmtzIGVzcGVjaWFsbHkgdG8gRGVubmlzIEZsYW5hZ2FuIGZvciBoZWxwIG9uIHRoZXNlLgorCisgICAgVjIuOC4yIFN1biBKdW4gMTIgMTY6MDE6MTAgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBtZW1hbGlnbiBicmFjZSBlcnJvci4KKworICAgIFYyLjguMSBXZWQgSnVuICA4IDE2OjExOjQ2IDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggaW1wcm9wZXIgI2VuZGlmIG5lc3RpbmcgaW4gQysrCisgICAgICAqIEFkZCBleHBsaWNpdCBjYXN0cyBuZWVkZWQgZm9yIEMrKworCisgICAgVjIuOC4wIE1vbiBNYXkgMzAgMTQ6MDk6MDIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFVzZSB0cmVlcyBmb3IgbGFyZ2UgYmlucworICAgICAgKiBTdXBwb3J0IG1zcGFjZXMKKyAgICAgICogVXNlIHNlZ21lbnRzIHRvIHVuaWZ5IHNicmstYmFzZWQgYW5kIG1tYXAtYmFzZWQgc3lzdGVtIGFsbG9jYXRpb24sCisJcmVtb3ZpbmcgbmVlZCBmb3IgZW11bGF0aW9uIG9uIG1vc3QgcGxhdGZvcm1zIHdpdGhvdXQgc2Jyay4KKyAgICAgICogRGVmYXVsdCBzYWZldHkgY2hlY2tzCisgICAgICAqIE9wdGlvbmFsIGZvb3RlciBjaGVja3MuIFRoYW5rcyB0byBXaWxsaWFtIFJvYmVydHNvbiBmb3IgdGhlIGlkZWEuCisgICAgICAqIEludGVybmFsIGNvZGUgcmVmYWN0b3JpbmcKKyAgICAgICogSW5jb3Jwb3JhdGUgc3VnZ2VzdGlvbnMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIGNoYW5nZXMuCisJVGhhbmtzIHRvIERlbm5pcyBGbGFuYWdhbiwgQ29saW4gUGx1bWIsIE5pYWxsIERvdWdsYXMsCisJQWFyb24gQmFjaG1hbm4sICBFbWVyeSBCZXJnZXIsIGFuZCBvdGhlcnMuCisgICAgICAqIFNwZWVkIHVwIG5vbi1mYXN0YmluIHByb2Nlc3NpbmcgZW5vdWdoIHRvIHJlbW92ZSBmYXN0Ymlucy4KKyAgICAgICogUmVtb3ZlIHVzZWxlc3MgY2ZyZWUoKSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBhcHBzLgorICAgICAgKiBSZW1vdmUgaW50ZXJuYWwgbWVtY3B5LCBtZW1zZXQuIENvbXBpbGVycyBoYW5kbGUgYnVpbHRpbnMgYmV0dGVyLgorICAgICAgKiBSZW1vdmUgc29tZSBvcHRpb25zIHRoYXQgbm8gb25lIGV2ZXIgdXNlZCBhbmQgcmVuYW1lIG90aGVycy4KKworICAgIFYyLjcuMiBTYXQgQXVnIDE3IDA5OjA3OjMwIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggbWFsbG9jX3N0YXRlIGJpdG1hcCBhcnJheSBtaXNkZWNsYXJhdGlvbgorCisgICAgVjIuNy4xIFRodSBKdWwgMjUgMTA6NTg6MDMgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFsbG93IHR1bmluZyBvZiBGSVJTVF9TT1JURURfQklOX1NJWkUKKyAgICAgICogVXNlIFBUUl9VSU5UIGFzIHR5cGUgZm9yIGFsbCBwdHItPmludCBjYXN0cy4gVGhhbmtzIHRvIEpvaG4gQmVsbW9udGUuCisgICAgICAqIEJldHRlciBkZXRlY3Rpb24gYW5kIHN1cHBvcnQgZm9yIG5vbi1jb250aWd1b3VzbmVzcyBvZiBNT1JFQ09SRS4KKwlUaGFua3MgdG8gQW5kcmVhcyBNdWVsbGVyLCBDb25hbCBXYWxzaCwgYW5kIFdvbGZyYW0gR2xvZ2VyCisgICAgICAqIEJ5cGFzcyBtb3N0IG9mIG1hbGxvYyBpZiBubyBmcmVlcy4gVGhhbmtzIFRvIEVtZXJ5IEJlcmdlci4KKyAgICAgICogRml4IGZyZWVpbmcgb2Ygb2xkIHRvcCBub24tY29udGlndW91cyBjaHVuayBpbSBzeXNtYWxsb2MuCisgICAgICAqIFJhaXNlZCBkZWZhdWx0IHRyaW0gYW5kIG1hcCB0aHJlc2hvbGRzIHRvIDI1NksuCisgICAgICAqIEZpeCBtbWFwLXJlbGF0ZWQgI2RlZmluZXMuIFRoYW5rcyB0byBMdWJvcyBMdW5hay4KKyAgICAgICogRml4IGNvcHkgbWFjcm9zOyBhZGRlZCBMQUNLU19GQ05UTF9ILiBUaGFua3MgdG8gTmVhbCBXYWxmaWVsZC4KKyAgICAgICogQnJhbmNoLWZyZWUgYmluIGNhbGN1bGF0aW9uCisgICAgICAqIERlZmF1bHQgdHJpbSBhbmQgbW1hcCB0aHJlc2hvbGRzIG5vdyAyNTZLLgorCisgICAgVjIuNy4wIFN1biBNYXIgMTEgMTQ6MTQ6MDYgMjAwMSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEludHJvZHVjZSBpbmRlcGVuZGVudF9jb21hbGxvYyBhbmQgaW5kZXBlbmRlbnRfY2FsbG9jLgorCVRoYW5rcyB0byBNaWNoYWVsIFBhY2hvcyBmb3IgbW90aXZhdGlvbiBhbmQgaGVscC4KKyAgICAgICogTWFrZSBvcHRpb25hbCAuaCBmaWxlIGF2YWlsYWJsZQorICAgICAgKiBBbGxvdyA+IDJHQiByZXF1ZXN0cyBvbiAzMmJpdCBzeXN0ZW1zLgorICAgICAgKiBuZXcgV0lOMzIgc2JyaywgbW1hcCwgbXVubWFwLCBsb2NrIGNvZGUgZnJvbSA8V2FsdGVyQEdlTmVTeXMtZS5kZT4uCisJVGhhbmtzIGFsc28gdG8gQW5kcmVhcyBNdWVsbGVyIDxhLm11ZWxsZXIgYXQgcGFyYWRhdGVjLmRlPiwKKwlhbmQgQW5vbnltb3VzLgorICAgICAgKiBBbGxvdyBvdmVycmlkZSBvZiBNQUxMT0NfQUxJR05NRU5UIChUaGFua3MgdG8gUnV1ZCBXYWlqIGZvcgorCWhlbHBpbmcgdGVzdCB0aGlzLikKKyAgICAgICogbWVtYWxpZ246IGNoZWNrIGFsaWdubWVudCBhcmcKKyAgICAgICogcmVhbGxvYzogZG9uJ3QgdHJ5IHRvIHNoaWZ0IGNodW5rcyBiYWNrd2FyZHMsIHNpbmNlIHRoaXMKKwlsZWFkcyB0byAgbW9yZSBmcmFnbWVudGF0aW9uIGluIHNvbWUgcHJvZ3JhbXMgYW5kIGRvZXNuJ3QKKwlzZWVtIHRvIGhlbHAgaW4gYW55IG90aGVycy4KKyAgICAgICogQ29sbGVjdCBhbGwgY2FzZXMgaW4gbWFsbG9jIHJlcXVpcmluZyBzeXN0ZW0gbWVtb3J5IGludG8gc3lzbWFsbG9jCisgICAgICAqIFVzZSBtbWFwIGFzIGJhY2t1cCB0byBzYnJrCisgICAgICAqIFBsYWNlIGFsbCBpbnRlcm5hbCBzdGF0ZSBpbiBtYWxsb2Nfc3RhdGUKKyAgICAgICogSW50cm9kdWNlIGZhc3RiaW5zIChhbHRob3VnaCBzaW1pbGFyIHRvIDIuNS4xKQorICAgICAgKiBNYW55IG1pbm9yIHR1bmluZ3MgYW5kIGNvc21ldGljIGltcHJvdmVtZW50cworICAgICAgKiBJbnRyb2R1Y2UgVVNFX1BVQkxJQ19NQUxMT0NfV1JBUFBFUlMsIFVTRV9NQUxMT0NfTE9DSworICAgICAgKiBJbnRyb2R1Y2UgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OLCBNT1JFQ09SRV9DT05USUdVT1VTCisJVGhhbmtzIHRvIFRvbnkgRS4gQmVubmV0dCA8dGJlbm5ldHRAbnZpZGlhLmNvbT4gYW5kIG90aGVycy4KKyAgICAgICogSW5jbHVkZSBlcnJuby5oIHRvIHN1cHBvcnQgZGVmYXVsdCBmYWlsdXJlIGFjdGlvbi4KKworICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5IDE5OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRpdmUgYXJndW1lbnRzCisgICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBNYXJ0aW4gQy4gRm9uZyA8bWNmb25nIGF0IHlhaG9vLmNvbT4KKwkgKiBBZGQgJ0xBQ0tTX1NZU19QQVJBTV9IJyBmb3IgdGhvc2Ugc3lzdGVtcyB3aXRob3V0ICdzeXMvcGFyYW0uaCcKKwkgIChlLmcuIFdJTjMyIHBsYXRmb3JtcykKKwkgKiBDbGVhbnVwIGhlYWRlciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCisJICogQ2xlYW51cCBjb2RlIHRvIGF2b2lkIE1pY3Jvc29mdCBWaXN1YWwgQysrIGNvbXBpbGVyIGNvbXBsYWludHMKKwkgKiBBZGQgJ1VTRV9ETF9QUkVGSVgnIHRvIHF1aWNrbHkgYWxsb3cgY28tZXhpc3RlbmNlIHdpdGggZXhpc3RpbmcKKwkgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcworCSAqIFNldCAnbWFsbG9jX2dldHBhZ2VzaXplJyBmb3IgV0lOMzIgcGxhdGZvcm1zIChuZWVkcyBtb3JlIHdvcmspCisJICogVXNlICdhc3NlcnQnIHJhdGhlciB0aGFuICdBU1NFUlQnIGluIFdJTjMyIGNvZGUgdG8gY29uZm9ybSB0bworCSAgIHVzYWdlIG9mICdhc3NlcnQnIGluIG5vbi1XSU4zMiBjb2RlCisJICogSW1wcm92ZSBXSU4zMiAnc2JyaygpJyBlbXVsYXRpb24ncyAnZmluZFJlZ2lvbigpJyByb3V0aW5lIHRvCisJICAgYXZvaWQgaW5maW5pdGUgbG9vcAorICAgICAgKiBBbHdheXMgY2FsbCAnZlJFZSgpJyByYXRoZXIgdGhhbiAnZnJlZSgpJworCisgICAgVjIuNi41IFdlZCBKdW4gMTcgMTU6NTc6MzEgMTk5OCAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeGVkIG9yZGVyaW5nIHByb2JsZW0gd2l0aCBib3VuZGFyeS1zdGFtcGluZworCisgICAgVjIuNi4zIFN1biBNYXkgMTkgMDg6MTc6NTggMTk5NiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZGVkIHB2YWxsb2MsIGFzIHJlY29tbWVuZGVkIGJ5IEguSi4gTGl1CisgICAgICAqIEFkZGVkIDY0Yml0IHBvaW50ZXIgc3VwcG9ydCBtYWlubHkgZnJvbSBXb2xmcmFtIEdsb2dlcgorICAgICAgKiBBZGRlZCBhbm9ueW1vdXNseSBkb25hdGVkIFdJTjMyIHNicmsgZW11bGF0aW9uCisgICAgICAqIE1hbGxvYywgY2FsbG9jLCBnZXRwYWdlc2l6ZTogYWRkIG9wdGltaXphdGlvbnMgZnJvbSBSYXltb25kIE5panNzZW4KKyAgICAgICogbWFsbG9jX2V4dGVuZF90b3A6IGZpeCBtYXNrIGVycm9yIHRoYXQgY2F1c2VkIHdhc3RhZ2UgYWZ0ZXIKKwlmb3JlaWduIHNicmtzCisgICAgICAqIEFkZCBsaW51eCBtcmVtYXAgc3VwcG9ydCBjb2RlIGZyb20gSEogTGl1CisKKyAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50ZWdyYXRlZCBtb3N0IGRvY3VtZW50YXRpb24gd2l0aCB0aGUgY29kZS4KKyAgICAgICogQWRkIHN1cHBvcnQgZm9yIG1tYXAsIHdpdGggaGVscCBmcm9tCisJV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKyAgICAgICogVXNlIGxhc3RfcmVtYWluZGVyIGluIG1vcmUgY2FzZXMuCisgICAgICAqIFBhY2sgYmlucyB1c2luZyBpZGVhIGZyb20gIGNvbGluQG55eDEwLmNzLmR1LmVkdQorICAgICAgKiBVc2Ugb3JkZXJlZCBiaW5zIGluc3RlYWQgb2YgYmVzdC1maXQgdGhyZXNoaG9sZAorICAgICAgKiBFbGltaW5hdGUgYmxvY2stbG9jYWwgZGVjbHMgdG8gc2ltcGxpZnkgdHJhY2luZyBhbmQgZGVidWdnaW5nLgorICAgICAgKiBTdXBwb3J0IGFub3RoZXIgY2FzZSBvZiByZWFsbG9jIHZpYSBtb3ZlIGludG8gdG9wCisgICAgICAqIEZpeCBlcnJvciBvY2N1cmluZyB3aGVuIGluaXRpYWwgc2Jya19iYXNlIG5vdCB3b3JkLWFsaWduZWQuCisgICAgICAqIFJlbHkgb24gcGFnZSBzaXplIGZvciB1bml0cyBpbnN0ZWFkIG9mIFNCUktfVU5JVCB0bworCWF2b2lkIHN1cnByaXNlcyBhYm91dCBzYnJrIGFsaWdubWVudCBjb252ZW50aW9ucy4KKyAgICAgICogQWRkIG1hbGxpbmZvLCBtYWxsb3B0LiBUaGFua3MgdG8gUmF5bW9uZCBOaWpzc2VuCisJKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9yIHRoZSBzdWdnZXN0aW9uLgorICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCisgICAgICAqIE1vcmUgcHJlY2F1dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKKwljb3VydGVzeSBvZiBXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgorICAgICAgKiBBZGRlZCBtYWNyb3MgZXRjLiwgYWxsb3dpbmcgdXNlIGluIGxpbnV4IGxpYmMgZnJvbQorCUguSi4gTHUgKGhqbEBnbnUuYWkubWl0LmVkdSkKKyAgICAgICogSW52ZXJ0ZWQgdGhpcyBoaXN0b3J5IGxpc3QKKworICAgIFYyLjYuMSBTYXQgRGVjICAyIDE0OjEwOjU3IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBSZS10dW5lZCBhbmQgZml4ZWQgdG8gYmVoYXZlIG1vcmUgbmljZWx5IHdpdGggVjIuNi4wIGNoYW5nZXMuCisgICAgICAqIFJlbW92ZWQgYWxsIHByZWFsbG9jYXRpb24gY29kZSBzaW5jZSB1bmRlciBjdXJyZW50IHNjaGVtZQorCXRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKKwl0aGUgd29yayBzYXZlZCBpbiBnb29kIGNhc2VzIGZvciBtb3N0IHRlc3QgcHJvZ3JhbXMuCisgICAgICAqIE5vIGxvbmdlciB1c2UgcmV0dXJuIGxpc3Qgb3IgdW5jb25zb2xpZGF0ZWQgYmlucyBzaW5jZQorCW5vIHNjaGVtZSB1c2luZyB0aGVtIGNvbnNpc3RlbnRseSBvdXRwZXJmb3JtcyB0aG9zZSB0aGF0IGRvbid0CisJZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KKyAgICAgICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUgd29yc3QtY2FzZXMuCisgICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCisKKyAgICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0bworCVBhdWwgV2lsc29uICh3aWxzb25AY3MudGV4YXMuZWR1KSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKyAgICBWMi41LjQgV2VkIE5vdiAgMSAwNzo1NDo1MSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkZWQgbWFsbG9jX3RyaW0sIHdpdGggaGVscCBmcm9tIFdvbGZyYW0gR2xvZ2VyCisJKHdtZ2xvQERlbnQuTUVELlVuaS1NdWVuY2hlbi5ERSkuCisKKyAgICBWMi41LjMgVHVlIEFwciAyNiAxMDoxNjowMSAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCisKKyAgICBWMi41LjIgVHVlIEFwciAgNSAxNjoyMDo0MCAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCisgICAgICAqIHJlYWxsb2M6IHRyeSB0byBleHBhbmQgaW4gYm90aCBkaXJlY3Rpb25zCisgICAgICAqIG1hbGxvYzogc3dhcCBvcmRlciBvZiBjbGVhbi1iaW4gc3RyYXRlZ3k7CisgICAgICAqIHJlYWxsb2M6IG9ubHkgY29uZGl0aW9uYWxseSBleHBhbmQgYmFja3dhcmRzCisgICAgICAqIFRyeSBub3QgdG8gc2NhdmVuZ2UgdXNlZCBiaW5zCisgICAgICAqIFVzZSBiaW4gY291bnRzIGFzIGEgZ3VpZGUgdG8gcHJlYWxsb2NhdGlvbgorICAgICAgKiBPY2Nhc2lvbmFsbHkgYmluIHJldHVybiBsaXN0IGNodW5rcyBpbiBmaXJzdCBzY2FuCisgICAgICAqIEFkZCBhIGZldyBvcHRpbWl6YXRpb25zIGZyb20gY29saW5Abnl4MTAuY3MuZHUuZWR1CisKKyAgICBWMi41LjEgU2F0IEF1ZyAxNCAxNTo0MDo0MyAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcpCisgICAgICAqIGZhc3RlciBiaW4gY29tcHV0YXRpb24gJiBzbGlnaHRseSBkaWZmZXJlbnQgYmlubmluZworICAgICAgKiBtZXJnZWQgYWxsIGNvbnNvbGlkYXRpb25zIHRvIG9uZSBwYXJ0IG9mIG1hbGxvYyBwcm9wZXIKKwkgKGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCisgICAgICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKKyAgICAgICogUHJvcGFnYXRlIGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCisgICAgICAqIEFkZCBzdHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKKwkgIGZyb20ga3B2QHJlc2VhcmNoLmF0dC5jb20KKworICAgIFYyLjUgU2F0IEF1ZyAgNyAwNzo0MTo1OSAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVkdSkKKyAgICAgICogcmVtb3ZlZCBwb3RlbnRpYWwgZm9yIG9kZCBhZGRyZXNzIGFjY2VzcyBpbiBwcmV2X2NodW5rCisgICAgICAqIHJlbW92ZWQgZGVwZW5kZW5jeSBvbiBnZXRwYWdlc2l6ZS5oCisgICAgICAqIG1pc2MgY29zbWV0aWNzIGFuZCBhIGJpdCBtb3JlIGludGVybmFsIGRvY3VtZW50YXRpb24KKyAgICAgICogYW50aWNvc21ldGljczogbWFuZ2xlZCBuYW1lcyBpbiBtYWNyb3MgdG8gZXZhZGUgZGVidWdnZXIgc3RyYW5nZW5lc3MKKyAgICAgICogdGVzdGVkIG9uIHNwYXJjLCBocC03MDAsIGRlYy1taXBzLCByczYwMDAKKwkgIHdpdGggZ2NjICYgbmF0aXZlIGNjIChocCwgZGVjIG9ubHkpIGFsbG93aW5nCisJICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMuKQorCisgICAgVHJpYWwgdmVyc2lvbiBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQorICAgICAgKiBCYXNlZCBsb29zZWx5IG9uIGxpYmcrKy0xLjJYIG1hbGxvYy4gKEl0IHJldGFpbnMgc29tZSBvZiB0aGUgb3ZlcmFsbAorCSBzdHJ1Y3R1cmUgb2Ygb2xkIHZlcnNpb24sICBidXQgbW9zdCBkZXRhaWxzIGRpZmZlci4pCisKKyovCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5jIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWExN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYwpAQCAtMCwwICsxLDk2NiBAQAorLyogQWx0ZXJuYXRpdmUgbWFsbG9jIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQKK2xvY2sgY29udGVudGlvbiBiYXNlZCBvbiBkbG1hbGxvYy4gKEMpIDIwMDUtMjAwNiBOaWFsbCBEb3VnbGFzCisKK0Jvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKK3RoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCitkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKworVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKK3RoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKK2FsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKK3dvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorKi8KKworI2lmZGVmIF9NU0NfVkVSCisvKiBFbmFibGUgZnVsbCBhbGlhc2luZyBvbiBNU1ZDICovCisvKiNwcmFnbWEgb3B0aW1pemUoImEiLCBvbikqLworI2VuZGlmCisKKy8qI2RlZmluZSBGVUxMU0FOSVRZQ0hFQ0tTKi8KKworI2luY2x1ZGUgIm5lZG1hbGxvYy5oIgorI2lmIGRlZmluZWQoV0lOMzIpCisgI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisjZGVmaW5lIE1TUEFDRVMgMQorI2RlZmluZSBPTkxZX01TUEFDRVMgMQorI2lmbmRlZiBVU0VfTE9DS1MKKyAjZGVmaW5lIFVTRV9MT0NLUyAxCisjZW5kaWYKKyNkZWZpbmUgRk9PVEVSUyAxICAgICAgICAgICAvKiBOZWVkIHRvIGVuYWJsZSBmb290ZXJzIHNvIGZyZWVzIGxvY2sgdGhlIHJpZ2h0IG1zcGFjZSAqLworI3VuZGVmIERFQlVHCQkJCS8qIGRsbWFsbG9jIHdhbnRzIERFQlVHIGVpdGhlciAwIG9yIDEgKi8KKyNpZmRlZiBfREVCVUcKKyAjZGVmaW5lIERFQlVHIDEKKyNlbHNlCisgI2RlZmluZSBERUJVRyAwCisjZW5kaWYKKyNpZmRlZiBOREVCVUcgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGFzc2VydCBjaGVja2luZyBvbiByZWxlYXNlIGJ1aWxkcyAqLworICN1bmRlZiBERUJVRworI2VuZGlmCisvKiBUaGUgZGVmYXVsdCBvZiA2NEtiIG1lYW5zIHdlIHNwZW5kIHRvbyBtdWNoIHRpbWUga2VybmVsLXNpZGUgKi8KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQorI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgxKjEwMjQqMTAyNCkKKyNlbmRpZgorLyojZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDAqLworCisKKy8qI2RlZmluZSBGT1JDRUlOTElORSovCisjaW5jbHVkZSAibWFsbG9jLmMuaCIKKyNpZmRlZiBOREVCVUcgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGFzc2VydCBjaGVja2luZyBvbiByZWxlYXNlIGJ1aWxkcyAqLworICN1bmRlZiBERUJVRworI2VuZGlmCisKKy8qIFRoZSBtYXhpbXVtIGNvbmN1cnJlbnQgdGhyZWFkcyBpbiBhIHBvb2wgcG9zc2libGUgKi8KKyNpZm5kZWYgTUFYVEhSRUFEU0lOUE9PTAorI2RlZmluZSBNQVhUSFJFQURTSU5QT09MIDE2CisjZW5kaWYKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRjYWNoZXMgd2hpY2ggY2FuIGJlIGFsbG9jYXRlZCAqLworI2lmbmRlZiBUSFJFQURDQUNIRU1BWENBQ0hFUworI2RlZmluZSBUSFJFQURDQUNIRU1BWENBQ0hFUyAyNTYKKyNlbmRpZgorLyogVGhlIG1heGltdW0gc2l6ZSB0byBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgdGhyZWFkIGNhY2hlICovCisjaWZuZGVmIFRIUkVBRENBQ0hFTUFYCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYIDgxOTIKKyNlbmRpZgorI2lmIDAKKy8qIFRoZSBudW1iZXIgb2YgY2FjaGUgZW50cmllcyBmb3IgZmluZXIgZ3JhaW5lZCBiaW5zLiBUaGlzIGlzICh0b3BiaXRwb3MoVEhSRUFEQ0FDSEVNQVgpLTQpKjIgKi8KKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVhCSU5TICgoMTMtNCkqMikKKyNlbHNlCisvKiBUaGUgbnVtYmVyIG9mIGNhY2hlIGVudHJpZXMuIFRoaXMgaXMgKHRvcGJpdHBvcyhUSFJFQURDQUNIRU1BWCktNCkgKi8KKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVhCSU5TICgxMy00KQorI2VuZGlmCisvKiBQb2ludCBhdCB3aGljaCB0aGUgZnJlZSBzcGFjZSBpbiBhIHRocmVhZCBjYWNoZSBpcyBnYXJiYWdlIGNvbGxlY3RlZCAqLworI2lmbmRlZiBUSFJFQURDQUNIRU1BWEZSRUVTUEFDRQorI2RlZmluZSBUSFJFQURDQUNIRU1BWEZSRUVTUEFDRSAoNTEyKjEwMjQpCisjZW5kaWYKKworCisjaWZkZWYgV0lOMzIKKyAjZGVmaW5lIFRMU1ZBUgkJCURXT1JECisgI2RlZmluZSBUTFNBTExPQyhrKQkoKihrKT1UbHNBbGxvYygpLCBUTFNfT1VUX09GX0lOREVYRVM9PSooaykpCisgI2RlZmluZSBUTFNGUkVFKGspCQkoIVRsc0ZyZWUoaykpCisgI2RlZmluZSBUTFNHRVQoaykJCVRsc0dldFZhbHVlKGspCisgI2RlZmluZSBUTFNTRVQoaywgYSkJKCFUbHNTZXRWYWx1ZShrLCBhKSkKKyAjaWZkZWYgREVCVUcKK3N0YXRpYyBMUFZPSUQgQ2hrZWRUbHNHZXRWYWx1ZShEV09SRCBpZHgpCit7CisJTFBWT0lEIHJldD1UbHNHZXRWYWx1ZShpZHgpOworCWFzc2VydChTX09LPT1HZXRMYXN0RXJyb3IoKSk7CisJcmV0dXJuIHJldDsKK30KKyAgI3VuZGVmIFRMU0dFVAorICAjZGVmaW5lIFRMU0dFVChrKSBDaGtlZFRsc0dldFZhbHVlKGspCisgI2VuZGlmCisjZWxzZQorICNkZWZpbmUgVExTVkFSCQkJcHRocmVhZF9rZXlfdAorICNkZWZpbmUgVExTQUxMT0MoaykJcHRocmVhZF9rZXlfY3JlYXRlKGssIDApCisgI2RlZmluZSBUTFNGUkVFKGspCQlwdGhyZWFkX2tleV9kZWxldGUoaykKKyAjZGVmaW5lIFRMU0dFVChrKQkJcHRocmVhZF9nZXRzcGVjaWZpYyhrKQorICNkZWZpbmUgVExTU0VUKGssIGEpCXB0aHJlYWRfc2V0c3BlY2lmaWMoaywgYSkKKyNlbmRpZgorCisjaWYgMAorLyogT25seSBlbmFibGUgaWYgdGVzdGluZyB3aXRoIHZhbGdyaW5kLiBDYXVzZXMgbWlzb3BlcmF0aW9uICovCisjZGVmaW5lIG1zcGFjZV9tYWxsb2MocCwgcykgbWFsbG9jKHMpCisjZGVmaW5lIG1zcGFjZV9yZWFsbG9jKHAsIG0sIHMpIHJlYWxsb2MobSwgcykKKyNkZWZpbmUgbXNwYWNlX2NhbGxvYyhwLCBuLCBzKSBjYWxsb2MobiwgcykKKyNkZWZpbmUgbXNwYWNlX2ZyZWUocCwgbSkgZnJlZShtKQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjaWYgIWRlZmluZWQoTk9fTkVEX05BTUVTUEFDRSkKK25hbWVzcGFjZSBuZWRhbGxvYyB7CisjZWxzZQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNlbmRpZgorCitzaXplX3QgbmVkYmxrc2l6ZSh2b2lkICptZW0pIFRIUk9XU1BFQworeworI2lmIDAKKwkvKiBPbmx5IGVuYWJsZSBpZiB0ZXN0aW5nIHdpdGggdmFsZ3JpbmQuIENhdXNlcyBtaXNvcGVyYXRpb24gKi8KKwlyZXR1cm4gVEhSRUFEQ0FDSEVNQVg7CisjZWxzZQorCWlmKG1lbSkKKwl7CisJCW1jaHVua3B0ciBwPW1lbTJjaHVuayhtZW0pOworCQlhc3NlcnQoY2ludXNlKHApKTsJLyogSWYgdGhpcyBmYWlscywgc29tZW9uZSB0cmllZCB0byBmcmVlIGEgYmxvY2sgdHdpY2UgKi8KKwkJaWYoY2ludXNlKHApKQorCQkJcmV0dXJuIGNodW5rc2l6ZShwKS1vdmVyaGVhZF9mb3IocCk7CisJfQorCXJldHVybiAwOworI2VuZGlmCit9CisKK3ZvaWQgbmVkc2V0dmFsdWUodm9pZCAqdikgVEhST1dTUEVDCQkJCQl7IG5lZHBzZXR2YWx1ZSgwLCB2KTsgfQordm9pZCAqIG5lZG1hbGxvYyhzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCQkJCXsgcmV0dXJuIG5lZHBtYWxsb2MoMCwgc2l6ZSk7IH0KK3ZvaWQgKiBuZWRjYWxsb2Moc2l6ZV90IG5vLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBjYWxsb2MoMCwgbm8sIHNpemUpOyB9Cit2b2lkICogbmVkcmVhbGxvYyh2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcHJlYWxsb2MoMCwgbWVtLCBzaXplKTsgfQordm9pZCAgIG5lZGZyZWUodm9pZCAqbWVtKSBUSFJPV1NQRUMJCQkJCXsgbmVkcGZyZWUoMCwgbWVtKTsgfQordm9pZCAqIG5lZG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgVEhST1dTUEVDIHsgcmV0dXJuIG5lZHBtZW1hbGlnbigwLCBhbGlnbm1lbnQsIGJ5dGVzKTsgfQorI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG5lZG1hbGxpbmZvKHZvaWQpIFRIUk9XU1BFQwkJCXsgcmV0dXJuIG5lZHBtYWxsaW5mbygwKTsgfQorI2VuZGlmCitpbnQgICAgbmVkbWFsbG9wdChpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBtYWxsb3B0KDAsIHBhcm5vLCB2YWx1ZSk7IH0KK2ludCAgICBuZWRtYWxsb2NfdHJpbShzaXplX3QgcGFkKSBUSFJPV1NQRUMJCQl7IHJldHVybiBuZWRwbWFsbG9jX3RyaW0oMCwgcGFkKTsgfQordm9pZCAgIG5lZG1hbGxvY19zdGF0cygpIFRIUk9XU1BFQwkJCQkJeyBuZWRwbWFsbG9jX3N0YXRzKDApOyB9CitzaXplX3QgbmVkbWFsbG9jX2Zvb3RwcmludCgpIFRIUk9XU1BFQwkJCQl7IHJldHVybiBuZWRwbWFsbG9jX2Zvb3RwcmludCgwKTsgfQordm9pZCAqKm5lZGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QgZWxlbXNubywgc2l6ZV90IGVsZW1zaXplLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcGluZGVwZW5kZW50X2NhbGxvYygwLCBlbGVtc25vLCBlbGVtc2l6ZSwgY2h1bmtzKTsgfQordm9pZCAqKm5lZGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBlbGVtcywgc2l6ZV90ICpzaXplcywgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBpbmRlcGVuZGVudF9jb21hbGxvYygwLCBlbGVtcywgc2l6ZXMsIGNodW5rcyk7IH0KKworc3RydWN0IHRocmVhZGNhY2hlYmxrX3Q7Cit0eXBlZGVmIHN0cnVjdCB0aHJlYWRjYWNoZWJsa190IHRocmVhZGNhY2hlYmxrOworc3RydWN0IHRocmVhZGNhY2hlYmxrX3QKK3sJLyogS2VlcCBsZXNzIHRoYW4gMTYgYnl0ZXMgb24gMzIgYml0IHN5c3RlbXMgYW5kIDMyIGJ5dGVzIG9uIDY0IGJpdCBzeXN0ZW1zICovCisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXVuc2lnbmVkIGludCBtYWdpYzsKKyNlbmRpZgorCXVuc2lnbmVkIGludCBsYXN0VXNlZCwgc2l6ZTsKKwl0aHJlYWRjYWNoZWJsayAqbmV4dCwgKnByZXY7Cit9OwordHlwZWRlZiBzdHJ1Y3QgdGhyZWFkY2FjaGVfdAoreworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl1bnNpZ25lZCBpbnQgbWFnaWMxOworI2VuZGlmCisJaW50IG15bXNwYWNlOwkJCQkJCS8qIExhc3QgbXNwYWNlIGVudHJ5IHRoaXMgdGhyZWFkIHVzZWQgKi8KKwlsb25nIHRocmVhZGlkOworCXVuc2lnbmVkIGludCBtYWxsb2NzLCBmcmVlcywgc3VjY2Vzc2VzOworCXNpemVfdCBmcmVlSW5DYWNoZTsJCQkJCS8qIEhvdyBtdWNoIGZyZWUgc3BhY2UgaXMgc3RvcmVkIGluIHRoaXMgY2FjaGUgKi8KKwl0aHJlYWRjYWNoZWJsayAqYmluc1soVEhSRUFEQ0FDSEVNQVhCSU5TKzEpKjJdOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl1bnNpZ25lZCBpbnQgbWFnaWMyOworI2VuZGlmCit9IHRocmVhZGNhY2hlOworc3RydWN0IG5lZHBvb2xfdAoreworCU1MT0NLX1QgbXV0ZXg7CisJdm9pZCAqdXNlcnZhbHVlOworCWludCB0aHJlYWRzOwkJCQkJCS8qIE1heCBlbnRyaWVzIGluIG0gdG8gdXNlICovCisJdGhyZWFkY2FjaGUgKmNhY2hlc1tUSFJFQURDQUNIRU1BWENBQ0hFU107CisJVExTVkFSIG15Y2FjaGU7CQkJCQkJLyogVGhyZWFkIGNhY2hlIGZvciB0aGlzIHRocmVhZC4gMCBmb3IgdW5zZXQsIG5lZ2F0aXZlIGZvciB1c2UgbXNwYWNlLTEgZGlyZWN0bHksIG90aGVyd2lzZSBpcyBjYWNoZS0xICovCisJbXN0YXRlIG1bTUFYVEhSRUFEU0lOUE9PTCsxXTsJCS8qIG1zcGFjZSBlbnRyaWVzIGZvciB0aGlzIHBvb2wgKi8KK307CitzdGF0aWMgbmVkcG9vbCBzeXNwb29sOworCitzdGF0aWMgRk9SQ0VJTkxJTkUgdW5zaWduZWQgaW50IHNpemUyYmluaWR4KHNpemVfdCBfc2l6ZSkgVEhST1dTUEVDCit7CS8qIDg9MTAwMAkxNj0xMDAwMAkyMD0xMDEwMAkyND0xMTAwMAkzMj0xMDAwMDAJNDg9MTEwMDAwCTQwOTY9MTAwMDAwMDAwMDAwMCAqLworCXVuc2lnbmVkIGludCB0b3BiaXQsIHNpemU9KHVuc2lnbmVkIGludCkoX3NpemU+PjQpOworCS8qIDE2PTEJCTIwPTEJMjQ9MQkzMj0xMAk0OD0xMQk2ND0xMDAJOTY9MTEwCTEyOD0xMDAwCTQwOTY9MTAwMDAwMDAwICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorCXRvcGJpdCA9IHNpemVvZihzaXplKSpfX0NIQVJfQklUX18gLSAxIC0gX19idWlsdGluX2NseihzaXplKTsKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisJeworCSAgICB1bnNpZ25lZCBsb25nIGJzclRvcEJpdDsKKworCSAgICBfQml0U2NhblJldmVyc2UoJmJzclRvcEJpdCwgc2l6ZSk7CisKKwkgICAgdG9wYml0ID0gYnNyVG9wQml0OworCX0KKyNlbHNlCisjaWYgMAorCXVuaW9uIHsKKwkJdW5zaWduZWQgYXNJbnRbMl07CisJCWRvdWJsZSBhc0RvdWJsZTsKKwl9OworCWludCBuOworCisJYXNEb3VibGUgPSAoZG91YmxlKXNpemUgKyAwLjU7CisJdG9wYml0ID0gKGFzSW50WyFGT1hfQklHRU5ESUFOXSA+PiAyMCkgLSAxMDIzOworI2Vsc2UKKwl7CisJCXVuc2lnbmVkIGludCB4PXNpemU7CisJCXggPSB4IHwgKHggPj4gMSk7CisJCXggPSB4IHwgKHggPj4gMik7CisJCXggPSB4IHwgKHggPj4gNCk7CisJCXggPSB4IHwgKHggPj4gOCk7CisJCXggPSB4IHwgKHggPj4xNik7CisJCXggPSB+eDsKKwkJeCA9IHggLSAoKHggPj4gMSkgJiAweDU1NTU1NTU1KTsKKwkJeCA9ICh4ICYgMHgzMzMzMzMzMykgKyAoKHggPj4gMikgJiAweDMzMzMzMzMzKTsKKwkJeCA9ICh4ICsgKHggPj4gNCkpICYgMHgwRjBGMEYwRjsKKwkJeCA9IHggKyAoeCA8PCA4KTsKKwkJeCA9IHggKyAoeCA8PCAxNik7CisJCXRvcGJpdD0zMSAtICh4ID4+IDI0KTsKKwl9CisjZW5kaWYKKyNlbmRpZgorCXJldHVybiB0b3BiaXQ7Cit9CisKKworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKK3N0YXRpYyB2b2lkIHRjc2FuaXR5Y2hlY2sodGhyZWFkY2FjaGVibGsgKipwdHIpIFRIUk9XU1BFQworeworCWFzc2VydCgocHRyWzBdICYmIHB0clsxXSkgfHwgKCFwdHJbMF0gJiYgIXB0clsxXSkpOworCWlmKHB0clswXSAmJiBwdHJbMV0pCisJeworCQlhc3NlcnQobmVkYmxrc2l6ZShwdHJbMF0pPj1zaXplb2YodGhyZWFkY2FjaGVibGspKTsKKwkJYXNzZXJ0KG5lZGJsa3NpemUocHRyWzFdKT49c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSk7CisJCWFzc2VydCgqKHVuc2lnbmVkIGludCAqKSAiTkVETiI9PXB0clswXS0+bWFnaWMpOworCQlhc3NlcnQoKih1bnNpZ25lZCBpbnQgKikgIk5FRE4iPT1wdHJbMV0tPm1hZ2ljKTsKKwkJYXNzZXJ0KCFwdHJbMF0tPnByZXYpOworCQlhc3NlcnQoIXB0clsxXS0+bmV4dCk7CisJCWlmKHB0clswXT09cHRyWzFdKQorCQl7CisJCQlhc3NlcnQoIXB0clswXS0+bmV4dCk7CisJCQlhc3NlcnQoIXB0clsxXS0+cHJldik7CisJCX0KKwl9Cit9CitzdGF0aWMgdm9pZCB0Y2Z1bGxzYW5pdHljaGVjayh0aHJlYWRjYWNoZSAqdGMpIFRIUk9XU1BFQworeworCXRocmVhZGNhY2hlYmxrICoqdGNicHRyPXRjLT5iaW5zOworCWludCBuOworCWZvcihuPTA7IG48PVRIUkVBRENBQ0hFTUFYQklOUzsgbisrLCB0Y2JwdHIrPTIpCisJeworCQl0aHJlYWRjYWNoZWJsayAqYiwgKm9iPTA7CisJCXRjc2FuaXR5Y2hlY2sodGNicHRyKTsKKwkJZm9yKGI9dGNicHRyWzBdOyBiOyBvYj1iLCBiPWItPm5leHQpCisJCXsKKwkJCWFzc2VydCgqKHVuc2lnbmVkIGludCAqKSAiTkVETiI9PWItPm1hZ2ljKTsKKwkJCWFzc2VydCghb2IgfHwgb2ItPm5leHQ9PWIpOworCQkJYXNzZXJ0KCFvYiB8fCBiLT5wcmV2PT1vYik7CisJCX0KKwl9Cit9CisjZW5kaWYKKworc3RhdGljIE5PSU5MSU5FIHZvaWQgUmVtb3ZlQ2FjaGVFbnRyaWVzKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgdW5zaWduZWQgaW50IGFnZSkgVEhST1dTUEVDCit7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorCWlmKHRjLT5mcmVlSW5DYWNoZSkKKwl7CisJCXRocmVhZGNhY2hlYmxrICoqdGNicHRyPXRjLT5iaW5zOworCQlpbnQgbjsKKwkJZm9yKG49MDsgbjw9VEhSRUFEQ0FDSEVNQVhCSU5TOyBuKyssIHRjYnB0cis9MikKKwkJeworCQkJdGhyZWFkY2FjaGVibGsgKip0Y2I9dGNicHRyKzE7CQkvKiBjb21lIGZyb20gb2xkZXN0IGVuZCBvZiBsaXN0ICovCisJCQkvKnRjc2FuaXR5Y2hlY2sodGNicHRyKTsqLworCQkJZm9yKDsgKnRjYiAmJiB0Yy0+ZnJlZXMtKCp0Y2IpLT5sYXN0VXNlZD49YWdlOyApCisJCQl7CisJCQkJdGhyZWFkY2FjaGVibGsgKmY9KnRjYjsKKwkJCQlzaXplX3QgYmxrc2l6ZT1mLT5zaXplOyAvKm5lZGJsa3NpemUoZik7Ki8KKwkJCQlhc3NlcnQoYmxrc2l6ZTw9bmVkYmxrc2l6ZShmKSk7CisJCQkJYXNzZXJ0KGJsa3NpemUpOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwkJCQlhc3NlcnQoKih1bnNpZ25lZCBpbnQgKikgIk5FRE4iPT0oKnRjYiktPm1hZ2ljKTsKKyNlbmRpZgorCQkJCSp0Y2I9KCp0Y2IpLT5wcmV2OworCQkJCWlmKCp0Y2IpCisJCQkJCSgqdGNiKS0+bmV4dD0wOworCQkJCWVsc2UKKwkJCQkJKnRjYnB0cj0wOworCQkJCXRjLT5mcmVlSW5DYWNoZS09Ymxrc2l6ZTsKKwkJCQlhc3NlcnQoKGxvbmcpIHRjLT5mcmVlSW5DYWNoZT49MCk7CisJCQkJbXNwYWNlX2ZyZWUoMCwgZik7CisJCQkJLyp0Y3Nhbml0eWNoZWNrKHRjYnB0cik7Ki8KKwkJCX0KKwkJfQorCX0KKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCit9CitzdGF0aWMgdm9pZCBEZXN0cm95Q2FjaGVzKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWlmKHAtPmNhY2hlcykKKwl7CisJCXRocmVhZGNhY2hlICp0YzsKKwkJaW50IG47CisJCWZvcihuPTA7IG48VEhSRUFEQ0FDSEVNQVhDQUNIRVM7IG4rKykKKwkJeworCQkJaWYoKHRjPXAtPmNhY2hlc1tuXSkpCisJCQl7CisJCQkJdGMtPmZyZWVzKys7CisJCQkJUmVtb3ZlQ2FjaGVFbnRyaWVzKHAsIHRjLCAwKTsKKwkJCQlhc3NlcnQoIXRjLT5mcmVlSW5DYWNoZSk7CisJCQkJdGMtPm15bXNwYWNlPS0xOworCQkJCXRjLT50aHJlYWRpZD0wOworCQkJCW1zcGFjZV9mcmVlKDAsIHRjKTsKKwkJCQlwLT5jYWNoZXNbbl09MDsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIE5PSU5MSU5FIHRocmVhZGNhY2hlICpBbGxvY0NhY2hlKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCXRocmVhZGNhY2hlICp0Yz0wOworCWludCBuLCBlbmQ7CisJQUNRVUlSRV9MT0NLKCZwLT5tdXRleCk7CisJZm9yKG49MDsgbjxUSFJFQURDQUNIRU1BWENBQ0hFUyAmJiBwLT5jYWNoZXNbbl07IG4rKyk7CisJaWYoVEhSRUFEQ0FDSEVNQVhDQUNIRVM9PW4pCisJewkvKiBMaXN0IGV4aGF1c3RlZCwgc28gZGlzYWJsZSBmb3IgdGhpcyB0aHJlYWQgKi8KKwkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKwl0Yz1wLT5jYWNoZXNbbl09KHRocmVhZGNhY2hlICopIG1zcGFjZV9jYWxsb2MocC0+bVswXSwgMSwgc2l6ZW9mKHRocmVhZGNhY2hlKSk7CisJaWYoIXRjKQorCXsKKwkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGMtPm1hZ2ljMT0qKHVuc2lnbmVkIGludCAqKSJORURNQUxDMSI7CisJdGMtPm1hZ2ljMj0qKHVuc2lnbmVkIGludCAqKSJORURNQUxDMiI7CisjZW5kaWYKKwl0Yy0+dGhyZWFkaWQ9KGxvbmcpKHNpemVfdClDVVJSRU5UX1RIUkVBRDsKKwlmb3IoZW5kPTA7IHAtPm1bZW5kXTsgZW5kKyspOworCXRjLT5teW1zcGFjZT10Yy0+dGhyZWFkaWQgJSBlbmQ7CisJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJaWYoVExTU0VUKHAtPm15Y2FjaGUsICh2b2lkICopKHNpemVfdCkobisxKSkpIGFib3J0KCk7CisJcmV0dXJuIHRjOworfQorCitzdGF0aWMgdm9pZCAqdGhyZWFkY2FjaGVfbWFsbG9jKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0Yywgc2l6ZV90ICpzaXplKSBUSFJPV1NQRUMKK3sKKwl2b2lkICpyZXQ9MDsKKwl1bnNpZ25lZCBpbnQgYmVzdHNpemU7CisJdW5zaWduZWQgaW50IGlkeD1zaXplMmJpbmlkeCgqc2l6ZSk7CisJc2l6ZV90IGJsa3NpemU9MDsKKwl0aHJlYWRjYWNoZWJsayAqYmxrLCAqKmJpbnNwdHI7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorCS8qIENhbGN1bGF0ZSBiZXN0IGZpdCBiaW4gc2l6ZSAqLworCWJlc3RzaXplPTE8PChpZHgrNCk7CisjaWYgMAorCS8qIEZpbmVyIGdyYWluZWQgYmluIGZpdCAqLworCWlkeDw8PTE7CisJaWYoKnNpemU+YmVzdHNpemUpCisJeworCQlpZHgrKzsKKwkJYmVzdHNpemUrPWJlc3RzaXplPj4xOworCX0KKwlpZigqc2l6ZT5iZXN0c2l6ZSkKKwl7CisJCWlkeCsrOworCQliZXN0c2l6ZT0xPDwoNCsoaWR4Pj4xKSk7CisJfQorI2Vsc2UKKwlpZigqc2l6ZT5iZXN0c2l6ZSkKKwl7CisJCWlkeCsrOworCQliZXN0c2l6ZTw8PTE7CisJfQorI2VuZGlmCisJYXNzZXJ0KGJlc3RzaXplPj0qc2l6ZSk7CisJaWYoKnNpemU8YmVzdHNpemUpICpzaXplPWJlc3RzaXplOworCWFzc2VydCgqc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpOworCWFzc2VydChpZHg8PVRIUkVBRENBQ0hFTUFYQklOUyk7CisJYmluc3B0cj0mdGMtPmJpbnNbaWR4KjJdOworCS8qIFRyeSB0byBtYXRjaCBjbG9zZSwgYnV0IG1vdmUgdXAgYSBiaW4gaWYgbmVjZXNzYXJ5ICovCisJYmxrPSpiaW5zcHRyOworCWlmKCFibGsgfHwgYmxrLT5zaXplPCpzaXplKQorCXsJLyogQnVtcCBpdCB1cCBhIGJpbiAqLworCQlpZihpZHg8VEhSRUFEQ0FDSEVNQVhCSU5TKQorCQl7CisJCQlpZHgrKzsKKwkJCWJpbnNwdHIrPTI7CisJCQlibGs9KmJpbnNwdHI7CisJCX0KKwl9CisJaWYoYmxrKQorCXsKKwkJYmxrc2l6ZT1ibGstPnNpemU7IC8qbmVkYmxrc2l6ZShibGspOyovCisJCWFzc2VydChuZWRibGtzaXplKGJsayk+PWJsa3NpemUpOworCQlhc3NlcnQoYmxrc2l6ZT49KnNpemUpOworCQlpZihibGstPm5leHQpCisJCQlibGstPm5leHQtPnByZXY9MDsKKwkJKmJpbnNwdHI9YmxrLT5uZXh0OworCQlpZighKmJpbnNwdHIpCisJCQliaW5zcHRyWzFdPTA7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCQlibGstPm1hZ2ljPTA7CisjZW5kaWYKKwkJYXNzZXJ0KGJpbnNwdHJbMF0hPWJsayAmJiBiaW5zcHRyWzFdIT1ibGspOworCQlhc3NlcnQobmVkYmxrc2l6ZShibGspPj1zaXplb2YodGhyZWFkY2FjaGVibGspICYmIG5lZGJsa3NpemUoYmxrKTw9VEhSRUFEQ0FDSEVNQVgrQ0hVTktfT1ZFUkhFQUQpOworCQkvKnByaW50ZigibWFsbG9jOiAlcCwgJXAsICVwLCAlbHVcbiIsIHAsIHRjLCBibGssIChsb25nKSBzaXplKTsqLworCQlyZXQ9KHZvaWQgKikgYmxrOworCX0KKwkrK3RjLT5tYWxsb2NzOworCWlmKHJldCkKKwl7CisJCWFzc2VydChibGtzaXplPj0qc2l6ZSk7CisJCSsrdGMtPnN1Y2Nlc3NlczsKKwkJdGMtPmZyZWVJbkNhY2hlLT1ibGtzaXplOworCQlhc3NlcnQoKGxvbmcpIHRjLT5mcmVlSW5DYWNoZT49MCk7CisJfQorI2lmIGRlZmluZWQoREVCVUcpICYmIDAKKwlpZighKHRjLT5tYWxsb2NzICYgMHhmZmYpKQorCXsKKwkJcHJpbnRmKCIqKiogdGhyZWFkY2FjaGU9JXUsIG1hbGxvY3M9JXUgKCVmKSwgZnJlZT0ldSAoJWYpLCBmcmVlSW5DYWNoZT0ldVxuIiwgKHVuc2lnbmVkIGludCkgdGMtPnRocmVhZGlkLCB0Yy0+bWFsbG9jcywKKwkJCShmbG9hdCkgdGMtPnN1Y2Nlc3Nlcy90Yy0+bWFsbG9jcywgdGMtPmZyZWVzLCAoZmxvYXQpIHRjLT5zdWNjZXNzZXMvdGMtPmZyZWVzLCAodW5zaWduZWQgaW50KSB0Yy0+ZnJlZUluQ2FjaGUpOworCX0KKyNlbmRpZgorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIE5PSU5MSU5FIHZvaWQgUmVsZWFzZUZyZWVJbkNhY2hlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50IG15bXNwYWNlKSBUSFJPV1NQRUMKK3sKKwl1bnNpZ25lZCBpbnQgYWdlPVRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFLzgxOTI7CisJLypBQ1FVSVJFX0xPQ0soJnAtPm1bbXltc3BhY2VdLT5tdXRleCk7Ki8KKwl3aGlsZShhZ2UgJiYgdGMtPmZyZWVJbkNhY2hlPj1USFJFQURDQUNIRU1BWEZSRUVTUEFDRSkKKwl7CisJCVJlbW92ZUNhY2hlRW50cmllcyhwLCB0YywgYWdlKTsKKwkJLypwcmludGYoIioqKiBSZW1vdmluZyBjYWNoZSBlbnRyaWVzIG9sZGVyIHRoYW4gJXUgKCV1KVxuIiwgYWdlLCAodW5zaWduZWQgaW50KSB0Yy0+ZnJlZUluQ2FjaGUpOyovCisJCWFnZT4+PTE7CisJfQorCS8qUkVMRUFTRV9MT0NLKCZwLT5tW215bXNwYWNlXS0+bXV0ZXgpOyovCit9CitzdGF0aWMgdm9pZCB0aHJlYWRjYWNoZV9mcmVlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50IG15bXNwYWNlLCB2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwl1bnNpZ25lZCBpbnQgYmVzdHNpemU7CisJdW5zaWduZWQgaW50IGlkeD1zaXplMmJpbmlkeChzaXplKTsKKwl0aHJlYWRjYWNoZWJsayAqKmJpbnNwdHIsICp0Y2s9KHRocmVhZGNhY2hlYmxrICopIG1lbTsKKwlhc3NlcnQoc2l6ZT49c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSAmJiBzaXplPD1USFJFQURDQUNIRU1BWCtDSFVOS19PVkVSSEVBRCk7CisjaWZkZWYgREVCVUcKKwl7CS8qIE1ha2Ugc3VyZSB0aGlzIGlzIGEgdmFsaWQgbWVtb3J5IGJsb2NrICovCisJICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworCSAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKwkgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKwkgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKyNlbmRpZgorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKwkvKiBDYWxjdWxhdGUgYmVzdCBmaXQgYmluIHNpemUgKi8KKwliZXN0c2l6ZT0xPDwoaWR4KzQpOworI2lmIDAKKwkvKiBGaW5lciBncmFpbmVkIGJpbiBmaXQgKi8KKwlpZHg8PD0xOworCWlmKHNpemU+YmVzdHNpemUpCisJeworCQl1bnNpZ25lZCBpbnQgYmlnZ2VyYmVzdHNpemU9YmVzdHNpemUrYmVzdHNpemU8PDE7CisJCWlmKHNpemU+PWJpZ2dlcmJlc3RzaXplKQorCQl7CisJCQlpZHgrKzsKKwkJCWJlc3RzaXplPWJpZ2dlcmJlc3RzaXplOworCQl9CisJfQorI2VuZGlmCisJaWYoYmVzdHNpemUhPXNpemUpCS8qIGRsbWFsbG9jIGNhbiByb3VuZCB1cCwgc28gd2Ugcm91bmQgZG93biB0byBwcmVzZXJ2ZSBpbmRleGluZyAqLworCQlzaXplPWJlc3RzaXplOworCWJpbnNwdHI9JnRjLT5iaW5zW2lkeCoyXTsKKwlhc3NlcnQoaWR4PD1USFJFQURDQUNIRU1BWEJJTlMpOworCWlmKHRjaz09KmJpbnNwdHIpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIkF0dGVtcHQgdG8gZnJlZSBhbHJlYWR5IGZyZWVkIG1lbW9yeSBibG9jayAlcCAtIGFib3J0aW5nIVxuIiwgdGNrKTsKKwkJYWJvcnQoKTsKKwl9CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjay0+bWFnaWM9Kih1bnNpZ25lZCBpbnQgKikgIk5FRE4iOworI2VuZGlmCisJdGNrLT5sYXN0VXNlZD0rK3RjLT5mcmVlczsKKwl0Y2stPnNpemU9KHVuc2lnbmVkIGludCkgc2l6ZTsKKwl0Y2stPm5leHQ9KmJpbnNwdHI7CisJdGNrLT5wcmV2PTA7CisJaWYodGNrLT5uZXh0KQorCQl0Y2stPm5leHQtPnByZXY9dGNrOworCWVsc2UKKwkJYmluc3B0clsxXT10Y2s7CisJYXNzZXJ0KCEqYmluc3B0ciB8fCAoKmJpbnNwdHIpLT5zaXplPT10Y2stPnNpemUpOworCSpiaW5zcHRyPXRjazsKKwlhc3NlcnQodGNrPT10Yy0+Ymluc1tpZHgqMl0pOworCWFzc2VydCh0Yy0+Ymluc1tpZHgqMisxXT09dGNrIHx8IGJpbnNwdHJbMF0tPm5leHQtPnByZXY9PXRjayk7CisJLypwcmludGYoImZyZWU6ICVwLCAlcCwgJXAsICVsdVxuIiwgcCwgdGMsIG1lbSwgKGxvbmcpIHNpemUpOyovCisJdGMtPmZyZWVJbkNhY2hlKz1zaXplOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKyNpZiAxCisJaWYodGMtPmZyZWVJbkNhY2hlPj1USFJFQURDQUNIRU1BWEZSRUVTUEFDRSkKKwkJUmVsZWFzZUZyZWVJbkNhY2hlKHAsIHRjLCBteW1zcGFjZSk7CisjZW5kaWYKK30KKworCisKKworc3RhdGljIE5PSU5MSU5FIGludCBJbml0UG9vbChuZWRwb29sICpwLCBzaXplX3QgY2FwYWNpdHksIGludCB0aHJlYWRzKSBUSFJPV1NQRUMKK3sJLyogdGhyZWFkcyBpcyAtMSBmb3Igc3lzdGVtIHBvb2wgKi8KKwllbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKwlBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworCWlmKHAtPnRocmVhZHMpIGdvdG8gZG9uZTsKKwlpZihJTklUSUFMX0xPQ0soJnAtPm11dGV4KSkgZ290byBlcnI7CisJaWYoVExTQUxMT0MoJnAtPm15Y2FjaGUpKSBnb3RvIGVycjsKKwlpZighKHAtPm1bMF09KG1zdGF0ZSkgY3JlYXRlX21zcGFjZShjYXBhY2l0eSwgMSkpKSBnb3RvIGVycjsKKwlwLT5tWzBdLT5leHRwPXA7CisJcC0+dGhyZWFkcz0odGhyZWFkczwxIHx8IHRocmVhZHM+TUFYVEhSRUFEU0lOUE9PTCkgPyBNQVhUSFJFQURTSU5QT09MIDogdGhyZWFkczsKK2RvbmU6CisJUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwlyZXR1cm4gMTsKK2VycjoKKwlpZih0aHJlYWRzPDApCisJCWFib3J0KCk7CQkJLyogSWYgeW91IGNhbid0IGFsbG9jYXRlIGZvciBzeXN0ZW0gcG9vbCwgd2UncmUgc2NyZXdlZCAqLworCURlc3Ryb3lDYWNoZXMocCk7CisJaWYocC0+bVswXSkKKwl7CisJCWRlc3Ryb3lfbXNwYWNlKHAtPm1bMF0pOworCQlwLT5tWzBdPTA7CisJfQorCWlmKHAtPm15Y2FjaGUpCisJeworCQlpZihUTFNGUkVFKHAtPm15Y2FjaGUpKSBhYm9ydCgpOworCQlwLT5teWNhY2hlPTA7CisJfQorCVJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgTk9JTkxJTkUgbXN0YXRlIEZpbmRNU3BhY2UobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBpbnQgKmxhc3RVc2VkLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CS8qIEdldHMgY2FsbGVkIHdoZW4gdGhyZWFkJ3MgbGFzdCB1c2VkIG1zcGFjZSBpcyBpbiB1c2UuIFRoZSBzdHJhdGVneQorCWlzIHRvIHJ1biB0aHJvdWdoIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgbXNwYWNlcyBsb29raW5nIGZvciBhbgorCXVubG9ja2VkIG9uZSBhbmQgaWYgd2UgZmFpbCwgd2UgY3JlYXRlIGEgbmV3IG9uZSBzbyBsb25nIGFzIHdlIGRvbid0CisJZXhjZWVkIHAtPnRocmVhZHMgKi8KKwlpbnQgbiwgZW5kOworCWZvcihuPWVuZD0qbGFzdFVzZWQrMTsgcC0+bVtuXTsgZW5kPSsrbikKKwl7CisJCWlmKFRSWV9MT0NLKCZwLT5tW25dLT5tdXRleCkpIGdvdG8gZm91bmQ7CisJfQorCWZvcihuPTA7IG48Kmxhc3RVc2VkICYmIHAtPm1bbl07IG4rKykKKwl7CisJCWlmKFRSWV9MT0NLKCZwLT5tW25dLT5tdXRleCkpIGdvdG8gZm91bmQ7CisJfQorCWlmKGVuZDxwLT50aHJlYWRzKQorCXsKKwkJbXN0YXRlIHRlbXA7CisJCWlmKCEodGVtcD0obXN0YXRlKSBjcmVhdGVfbXNwYWNlKHNpemUsIDEpKSkKKwkJCWdvdG8gYmFkZXhpdDsKKwkJLyogTm93IHdlJ3JlIHJlYWR5IHRvIG1vZGlmeSB0aGUgbGlzdHMsIHdlIGxvY2sgKi8KKwkJQUNRVUlSRV9MT0NLKCZwLT5tdXRleCk7CisJCXdoaWxlKHAtPm1bZW5kXSAmJiBlbmQ8cC0+dGhyZWFkcykKKwkJCWVuZCsrOworCQlpZihlbmQ+PXAtPnRocmVhZHMpCisJCXsJLyogRHJhdCwgbXVzdCBkZXN0cm95IGl0IG5vdyAqLworCQkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCQlkZXN0cm95X21zcGFjZSgobXNwYWNlKSB0ZW1wKTsKKwkJCWdvdG8gYmFkZXhpdDsKKwkJfQorCQkvKiBXZSByZWFsbHkgd2FudCB0byBtYWtlIHN1cmUgdGhpcyBnb2VzIGludG8gbWVtb3J5IG5vdyBidXQgd2UKKwkJaGF2ZSB0byBiZSBjYXJlZnVsIG9mIGJyZWFraW5nIGFsaWFzaW5nIHJ1bGVzLCBzbyB3cml0ZSBpdCB0d2ljZSAqLworCQkqKCh2b2xhdGlsZSBzdHJ1Y3QgbWFsbG9jX3N0YXRlICoqKSAmcC0+bVtlbmRdKT1wLT5tW2VuZF09dGVtcDsKKwkJQUNRVUlSRV9MT0NLKCZwLT5tW2VuZF0tPm11dGV4KTsKKwkJLypwcmludGYoIkNyZWF0ZWQgbXNwYWNlIGlkeCAlZFxuIiwgZW5kKTsqLworCQlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwkJbj1lbmQ7CisJCWdvdG8gZm91bmQ7CisJfQorCS8qIExldCBpdCBsb2NrIG9uIHRoZSBsYXN0IG9uZSBpdCB1c2VkICovCitiYWRleGl0OgorCUFDUVVJUkVfTE9DSygmcC0+bVsqbGFzdFVzZWRdLT5tdXRleCk7CisJcmV0dXJuIHAtPm1bKmxhc3RVc2VkXTsKK2ZvdW5kOgorCSpsYXN0VXNlZD1uOworCWlmKHRjKQorCQl0Yy0+bXltc3BhY2U9bjsKKwllbHNlCisJeworCQlpZihUTFNTRVQocC0+bXljYWNoZSwgKHZvaWQgKikoc2l6ZV90KSgtKG4rMSkpKSkgYWJvcnQoKTsKKwl9CisJcmV0dXJuIHAtPm1bbl07Cit9CisKK25lZHBvb2wgKm5lZGNyZWF0ZXBvb2woc2l6ZV90IGNhcGFjaXR5LCBpbnQgdGhyZWFkcykgVEhST1dTUEVDCit7CisJbmVkcG9vbCAqcmV0OworCWlmKCEocmV0PShuZWRwb29sICopIG5lZHBjYWxsb2MoMCwgMSwgc2l6ZW9mKG5lZHBvb2wpKSkpIHJldHVybiAwOworCWlmKCFJbml0UG9vbChyZXQsIGNhcGFjaXR5LCB0aHJlYWRzKSkKKwl7CisJCW5lZHBmcmVlKDAsIHJldCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCBuZWRkZXN0cm95cG9vbChuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpbnQgbjsKKwlBQ1FVSVJFX0xPQ0soJnAtPm11dGV4KTsKKwlEZXN0cm95Q2FjaGVzKHApOworCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCWRlc3Ryb3lfbXNwYWNlKHAtPm1bbl0pOworCQlwLT5tW25dPTA7CisJfQorCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCWlmKFRMU0ZSRUUocC0+bXljYWNoZSkpIGFib3J0KCk7CisJbmVkcGZyZWUoMCwgcCk7Cit9CisKK3ZvaWQgbmVkcHNldHZhbHVlKG5lZHBvb2wgKnAsIHZvaWQgKnYpIFRIUk9XU1BFQworeworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlwLT51c2VydmFsdWU9djsKK30KK3ZvaWQgKm5lZGdldHZhbHVlKG5lZHBvb2wgKipwLCB2b2lkICptZW0pIFRIUk9XU1BFQworeworCW5lZHBvb2wgKm5wPTA7CisJbWNodW5rcHRyIG1jcD1tZW0yY2h1bmsobWVtKTsKKwltc3RhdGUgZm07CisJaWYoIShpc19hbGlnbmVkKGNodW5rMm1lbShtY3ApKSkgJiYgbWNwLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSByZXR1cm4gMDsKKwlpZighY2ludXNlKG1jcCkpIHJldHVybiAwOworCWlmKCFuZXh0X3BpbnVzZShtY3ApKSByZXR1cm4gMDsKKwlpZighaXNfbW1hcHBlZChtY3ApICYmICFwaW51c2UobWNwKSkKKwl7CisJCWlmKG5leHRfY2h1bmsocHJldl9jaHVuayhtY3ApKSE9bWNwKSByZXR1cm4gMDsKKwl9CisJZm09Z2V0X21zdGF0ZV9mb3IobWNwKTsKKwlpZighb2tfbWFnaWMoZm0pKSByZXR1cm4gMDsKKwlpZighb2tfYWRkcmVzcyhmbSwgbWNwKSkgcmV0dXJuIDA7CisJaWYoIWZtLT5leHRwKSByZXR1cm4gMDsKKwlucD0obmVkcG9vbCAqKSBmbS0+ZXh0cDsKKwlpZihwKSAqcD1ucDsKKwlyZXR1cm4gbnAtPnVzZXJ2YWx1ZTsKK30KKwordm9pZCBuZWRkaXNhYmxldGhyZWFkY2FjaGUobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaW50IG15Y2FjaGU7CisJaWYoIXApCisJeworCQlwPSZzeXNwb29sOworCQlpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOworCX0KKwlteWNhY2hlPShpbnQpKHNpemVfdCkgVExTR0VUKHAtPm15Y2FjaGUpOworCWlmKCFteWNhY2hlKQorCXsJLyogU2V0IHRvIG1zcGFjZSAwICovCisJCWlmKFRMU1NFVChwLT5teWNhY2hlLCAodm9pZCAqKS0xKSkgYWJvcnQoKTsKKwl9CisJZWxzZSBpZihteWNhY2hlPjApCisJewkvKiBTZXQgdG8gbGFzdCB1c2VkIG1zcGFjZSAqLworCQl0aHJlYWRjYWNoZSAqdGM9cC0+Y2FjaGVzW215Y2FjaGUtMV07CisjaWYgZGVmaW5lZChERUJVRykKKwkJcHJpbnRmKCJUaHJlYWRjYWNoZSB1dGlsaXNhdGlvbjogJWxmJSUgaW4gY2FjaGUgd2l0aCAlbGYlJSBsb3N0IHRvIG90aGVyIHRocmVhZHNcbiIsCisJCQkxMDAuMCp0Yy0+c3VjY2Vzc2VzL3RjLT5tYWxsb2NzLCAxMDAuMCooKGRvdWJsZSkgdGMtPm1hbGxvY3MtdGMtPmZyZWVzKS90Yy0+bWFsbG9jcyk7CisjZW5kaWYKKwkJaWYoVExTU0VUKHAtPm15Y2FjaGUsICh2b2lkICopKHNpemVfdCkoLXRjLT5teW1zcGFjZSkpKSBhYm9ydCgpOworCQl0Yy0+ZnJlZXMrKzsKKwkJUmVtb3ZlQ2FjaGVFbnRyaWVzKHAsIHRjLCAwKTsKKwkJYXNzZXJ0KCF0Yy0+ZnJlZUluQ2FjaGUpOworCQl0Yy0+bXltc3BhY2U9LTE7CisJCXRjLT50aHJlYWRpZD0wOworCQltc3BhY2VfZnJlZSgwLCBwLT5jYWNoZXNbbXljYWNoZS0xXSk7CisJCXAtPmNhY2hlc1tteWNhY2hlLTFdPTA7CisJfQorfQorCisjZGVmaW5lIEdFVE1TUEFDRShtLHAsdGMsbXMscyxhY3Rpb24pICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXN0YXRlIG0gPSBHZXRNU3BhY2UoKHApLCh0YyksKG1zKSwocykpOyAgICBcCisgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUkVMRUFTRV9MT0NLKCZtLT5tdXRleCk7ICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKK3N0YXRpYyBGT1JDRUlOTElORSBtc3RhdGUgR2V0TVNwYWNlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50IG15bXNwYWNlLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CS8qIFJldHVybnMgYSBsb2NrZWQgYW5kIHJlYWR5IGZvciB1c2UgbXNwYWNlICovCisJbXN0YXRlIG09cC0+bVtteW1zcGFjZV07CisJYXNzZXJ0KG0pOworCWlmKCFUUllfTE9DSygmcC0+bVtteW1zcGFjZV0tPm11dGV4KSkgbT1GaW5kTVNwYWNlKHAsIHRjLCAmbXltc3BhY2UsIHNpemUpO1wKKwkvKmFzc2VydChJU19MT0NLRUQoJnAtPm1bbXltc3BhY2VdLT5tdXRleCkpOyovCisJcmV0dXJuIG07Cit9CitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCBHZXRUaHJlYWRDYWNoZShuZWRwb29sICoqcCwgdGhyZWFkY2FjaGUgKip0YywgaW50ICpteW1zcGFjZSwgc2l6ZV90ICpzaXplKSBUSFJPV1NQRUMKK3sKKwlpbnQgbXljYWNoZTsKKwlpZihzaXplICYmICpzaXplPHNpemVvZih0aHJlYWRjYWNoZWJsaykpICpzaXplPXNpemVvZih0aHJlYWRjYWNoZWJsayk7CisJaWYoISpwKQorCXsKKwkJKnA9JnN5c3Bvb2w7CisJCWlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7CisJfQorCW15Y2FjaGU9KGludCkoc2l6ZV90KSBUTFNHRVQoKCpwKS0+bXljYWNoZSk7CisJaWYobXljYWNoZT4wKQorCXsKKwkJKnRjPSgqcCktPmNhY2hlc1tteWNhY2hlLTFdOworCQkqbXltc3BhY2U9KCp0YyktPm15bXNwYWNlOworCX0KKwllbHNlIGlmKCFteWNhY2hlKQorCXsKKwkJKnRjPUFsbG9jQ2FjaGUoKnApOworCQlpZighKnRjKQorCQl7CS8qIERpc2FibGUgKi8KKwkJCWlmKFRMU1NFVCgoKnApLT5teWNhY2hlLCAodm9pZCAqKS0xKSkgYWJvcnQoKTsKKwkJCSpteW1zcGFjZT0wOworCQl9CisJCWVsc2UKKwkJCSpteW1zcGFjZT0oKnRjKS0+bXltc3BhY2U7CisJfQorCWVsc2UKKwl7CisJCSp0Yz0wOworCQkqbXltc3BhY2U9LW15Y2FjaGUtMTsKKwl9CisJYXNzZXJ0KCpteW1zcGFjZT49MCk7CisJYXNzZXJ0KChsb25nKShzaXplX3QpQ1VSUkVOVF9USFJFQUQ9PSgqdGMpLT50aHJlYWRpZCk7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCWlmKCp0YykKKwl7CisJCWlmKCoodW5zaWduZWQgaW50ICopIk5FRE1BTEMxIiE9KCp0YyktPm1hZ2ljMSB8fCAqKHVuc2lnbmVkIGludCAqKSJORURNQUxDMiIhPSgqdGMpLT5tYWdpYzIpCisJCXsKKwkJCWFib3J0KCk7CisJCX0KKwl9CisjZW5kaWYKK30KKwordm9pZCAqIG5lZHBtYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworeworCXZvaWQgKnJldD0wOworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmc2l6ZSk7CisjaWYgVEhSRUFEQ0FDSEVNQVgKKwlpZih0YyAmJiBzaXplPD1USFJFQURDQUNIRU1BWCkKKwl7CS8qIFVzZSB0aGUgdGhyZWFkIGNhY2hlICovCisJCXJldD10aHJlYWRjYWNoZV9tYWxsb2MocCwgdGMsICZzaXplKTsKKwl9CisjZW5kaWYKKwlpZighcmV0KQorCXsJLyogVXNlIHRoaXMgdGhyZWFkJ3MgbXNwYWNlICovCisJR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgc2l6ZSwKKwkJICByZXQ9bXNwYWNlX21hbGxvYyhtLCBzaXplKSk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICogbmVkcGNhbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgbm8sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwlzaXplX3QgcnNpemU9c2l6ZSpubzsKKwl2b2lkICpyZXQ9MDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJnJzaXplKTsKKyNpZiBUSFJFQURDQUNIRU1BWAorCWlmKHRjICYmIHJzaXplPD1USFJFQURDQUNIRU1BWCkKKwl7CS8qIFVzZSB0aGUgdGhyZWFkIGNhY2hlICovCisJCWlmKChyZXQ9dGhyZWFkY2FjaGVfbWFsbG9jKHAsIHRjLCAmcnNpemUpKSkKKwkJCW1lbXNldChyZXQsIDAsIHJzaXplKTsKKwl9CisjZW5kaWYKKwlpZighcmV0KQorCXsJLyogVXNlIHRoaXMgdGhyZWFkJ3MgbXNwYWNlICovCisJR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgcnNpemUsCisJCSAgcmV0PW1zcGFjZV9jYWxsb2MobSwgMSwgcnNpemUpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKiBuZWRwcmVhbGxvYyhuZWRwb29sICpwLCB2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwl2b2lkICpyZXQ9MDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCWlmKCFtZW0pIHJldHVybiBuZWRwbWFsbG9jKHAsIHNpemUpOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJnNpemUpOworI2lmIFRIUkVBRENBQ0hFTUFYCisJaWYodGMgJiYgc2l6ZSAmJiBzaXplPD1USFJFQURDQUNIRU1BWCkKKwl7CS8qIFVzZSB0aGUgdGhyZWFkIGNhY2hlICovCisJCXNpemVfdCBtZW1zaXplPW5lZGJsa3NpemUobWVtKTsKKwkJYXNzZXJ0KG1lbXNpemUpOworCQlpZigocmV0PXRocmVhZGNhY2hlX21hbGxvYyhwLCB0YywgJnNpemUpKSkKKwkJeworCQkJbWVtY3B5KHJldCwgbWVtLCBtZW1zaXplPHNpemUgPyBtZW1zaXplIDogc2l6ZSk7CisJCQlpZihtZW1zaXplPD1USFJFQURDQUNIRU1BWCkKKwkJCQl0aHJlYWRjYWNoZV9mcmVlKHAsIHRjLCBteW1zcGFjZSwgbWVtLCBtZW1zaXplKTsKKwkJCWVsc2UKKwkJCQltc3BhY2VfZnJlZSgwLCBtZW0pOworCQl9CisJfQorI2VuZGlmCisJaWYoIXJldCkKKwl7CS8qIFJlYWxsb2NzIGFsd2F5cyBoYXBwZW4gaW4gdGhlIG1zcGFjZSB0aGV5IGhhcHBlbmVkIGluLCBzbyBza2lwCisJCWxvY2tpbmcgdGhlIHByZWZlcnJlZCBtc3BhY2UgZm9yIHRoaXMgdGhyZWFkICovCisJCXJldD1tc3BhY2VfcmVhbGxvYygwLCBtZW0sIHNpemUpOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAgIG5lZHBmcmVlKG5lZHBvb2wgKnAsIHZvaWQgKm1lbSkgVEhST1dTUEVDCit7CS8qIEZyZWVzIGFsd2F5cyBoYXBwZW4gaW4gdGhlIG1zcGFjZSB0aGV5IGhhcHBlbmVkIGluLCBzbyBza2lwCisJbG9ja2luZyB0aGUgcHJlZmVycmVkIG1zcGFjZSBmb3IgdGhpcyB0aHJlYWQgKi8KKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCXNpemVfdCBtZW1zaXplOworCWFzc2VydChtZW0pOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgMCk7CisjaWYgVEhSRUFEQ0FDSEVNQVgKKwltZW1zaXplPW5lZGJsa3NpemUobWVtKTsKKwlhc3NlcnQobWVtc2l6ZSk7CisJaWYobWVtICYmIHRjICYmIG1lbXNpemU8PShUSFJFQURDQUNIRU1BWCtDSFVOS19PVkVSSEVBRCkpCisJCXRocmVhZGNhY2hlX2ZyZWUocCwgdGMsIG15bXNwYWNlLCBtZW0sIG1lbXNpemUpOworCWVsc2UKKyNlbmRpZgorCQltc3BhY2VfZnJlZSgwLCBtZW0pOworfQordm9pZCAqIG5lZHBtZW1hbGlnbihuZWRwb29sICpwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQworeworCXZvaWQgKnJldDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJmJ5dGVzKTsKKwl7CS8qIFVzZSB0aGlzIHRocmVhZCdzIG1zcGFjZSAqLworCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIGJ5dGVzLAorCQkgIHJldD1tc3BhY2VfbWVtYWxpZ24obSwgYWxpZ25tZW50LCBieXRlcykpOworCX0KKwlyZXR1cm4gcmV0OworfQorI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG5lZHBtYWxsaW5mbyhuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpbnQgbjsKKwlzdHJ1Y3QgbWFsbGluZm8gcmV0PXswfTsKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJc3RydWN0IG1hbGxpbmZvIHQ9bXNwYWNlX21hbGxpbmZvKHAtPm1bbl0pOworCQlyZXQuYXJlbmErPXQuYXJlbmE7CisJCXJldC5vcmRibGtzKz10Lm9yZGJsa3M7CisJCXJldC5oYmxraGQrPXQuaGJsa2hkOworCQlyZXQudXNtYmxrcys9dC51c21ibGtzOworCQlyZXQudW9yZGJsa3MrPXQudW9yZGJsa3M7CisJCXJldC5mb3JkYmxrcys9dC5mb3JkYmxrczsKKwkJcmV0LmtlZXBjb3N0Kz10LmtlZXBjb3N0OworCX0KKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCitpbnQgICAgbmVkcG1hbGxvcHQobmVkcG9vbCAqcCwgaW50IHBhcm5vLCBpbnQgdmFsdWUpIFRIUk9XU1BFQworeworCXJldHVybiBtc3BhY2VfbWFsbG9wdChwYXJubywgdmFsdWUpOworfQoraW50ICAgIG5lZHBtYWxsb2NfdHJpbShuZWRwb29sICpwLCBzaXplX3QgcGFkKSBUSFJPV1NQRUMKK3sKKwlpbnQgbiwgcmV0PTA7CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCXJldCs9bXNwYWNlX3RyaW0ocC0+bVtuXSwgcGFkKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgICBuZWRwbWFsbG9jX3N0YXRzKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWludCBuOworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQltc3BhY2VfbWFsbG9jX3N0YXRzKHAtPm1bbl0pOworCX0KK30KK3NpemVfdCBuZWRwbWFsbG9jX2Zvb3RwcmludChuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlzaXplX3QgcmV0PTA7CisJaW50IG47CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCXJldCs9bXNwYWNlX2Zvb3RwcmludChwLT5tW25dKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBlbGVtc25vLCBzaXplX3QgZWxlbXNpemUsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQworeworCXZvaWQgKipyZXQ7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZlbGVtc2l6ZSk7CisgICAgR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgZWxlbXNubyplbGVtc2l6ZSwKKwkgICAgICByZXQ9bXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtLCBlbGVtc25vLCBlbGVtc2l6ZSwgY2h1bmtzKSk7CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY29tYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMKK3sKKwl2b2lkICoqcmV0OworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisgICAgc2l6ZV90IGksICphZGp1c3RlZHNpemVzPShzaXplX3QgKikgYWxsb2NhKGVsZW1zKnNpemVvZihzaXplX3QpKTsKKyAgICBpZighYWRqdXN0ZWRzaXplcykgcmV0dXJuIDA7CisgICAgZm9yKGk9MDsgaTxlbGVtczsgaSsrKQorCWFkanVzdGVkc2l6ZXNbaV09c2l6ZXNbaV08c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSA/IHNpemVvZih0aHJlYWRjYWNoZWJsaykgOiBzaXplc1tpXTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsIDApOworCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIDAsCisJICAgICAgcmV0PW1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtLCBlbGVtcywgYWRqdXN0ZWRzaXplcywgY2h1bmtzKSk7CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIE9WRVJSSURFX1NUUkRVUAorLyoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgcHVyZWx5IHRoZXJlIHRvIG92ZXJyaWRlIHRoZSBsaWJjIHZlcnNpb24sIHRvCisgKiBhdm9pZCBhIGNyYXNoIGR1ZSB0byBhbGxvY2F0aW9uIGFuZCBmcmVlIG9uIGRpZmZlcmVudCAnaGVhcHMnLgorICovCitjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqczEpCit7CisJY2hhciAqczIgPSAwOworCWlmIChzMSkgeworCQlzMiA9IG1hbGxvYyhzdHJsZW4oczEpICsgMSk7CisJCXN0cmNweShzMiwgczEpOworCX0KKwlyZXR1cm4gczI7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmggYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjBlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5oCkBAIC0wLDAgKzEsMTgwIEBACisvKiBuZWRhbGxvYywgYW4gYWx0ZXJuYXRpdmUgbWFsbG9jIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQKK2xvY2sgY29udGVudGlvbiBiYXNlZCBvbiBkbG1hbGxvYyB2Mi44LjMuIChDKSAyMDA1IE5pYWxsIERvdWdsYXMKKworQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisqLworCisjaWZuZGVmIE5FRE1BTExPQ19ICisjZGVmaW5lIE5FRE1BTExPQ19ICisKKworLyogU2VlIG1hbGxvYy5jLmggZm9yIHdoYXQgZWFjaCBmdW5jdGlvbiBkb2VzLgorCitSRVBMQUNFX1NZU1RFTV9BTExPQ0FUT1IgY2F1c2VzIG5lZGFsbG9jJ3MgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBtYWxsb2MsCitmcmVlIGV0Yy4gaW5zdGVhZCBvZiBuZWRtYWxsb2MsIG5lZGZyZWUgZXRjLiBZb3UgbWF5IG9yIG1heSBub3Qgd2FudCB0aGlzLgorCitOT19ORURfTkFNRVNQQUNFIHByZXZlbnRzIHRoZSBmdW5jdGlvbnMgZnJvbSBiZWluZyBkZWZpbmVkIGluIHRoZSBuZWRhbGxvYworbmFtZXNwYWNlIHdoZW4gaW4gQysrICh1c2VzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIGluc3RlYWQpLgorCitFWFRTUEVDIGNhbiBiZSBkZWZpbmVkIHRvIGJlIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBvcgorX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIG9yIHdoYXRldmVyIHlvdSBsaWtlLiBJdCBkZWZhdWx0cwordG8gZXh0ZXJuLgorCitVU0VfTE9DS1MgY2FuIGJlIDIgaWYgeW91IHdhbnQgdG8gZGVmaW5lIHlvdXIgb3duIE1MT0NLX1QsIElOSVRJQUxfTE9DSywKK0FDUVVJUkVfTE9DSywgUkVMRUFTRV9MT0NLLCBUUllfTE9DSywgSVNfTE9DS0VEIGFuZCBOVUxMX0xPQ0tfSU5JVElBTElaRVIuCisKKyovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gICAvKiBmb3Igc2l6ZV90ICovCisKKyNpZm5kZWYgRVhUU1BFQworICNkZWZpbmUgRVhUU1BFQyBleHRlcm4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTE0MDAKKyAjZGVmaW5lIE1BTExPQ0FUVFIgX19kZWNsc3BlYyhyZXN0cmljdCkKKyNlbmRpZgorI2lmZGVmIF9fR05VQ19fCisgI2RlZmluZSBNQUxMT0NBVFRSIF9fYXR0cmlidXRlX18gKChtYWxsb2MpKQorI2VuZGlmCisjaWZuZGVmIE1BTExPQ0FUVFIKKyAjZGVmaW5lIE1BTExPQ0FUVFIKKyNlbmRpZgorCisjaWZkZWYgUkVQTEFDRV9TWVNURU1fQUxMT0NBVE9SCisgI2RlZmluZSBuZWRtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyAjZGVmaW5lIG5lZGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworICNkZWZpbmUgbmVkcmVhbGxvYyAgICAgICAgICAgICAgcmVhbGxvYworICNkZWZpbmUgbmVkZnJlZSAgICAgICAgICAgICAgICAgZnJlZQorICNkZWZpbmUgbmVkbWVtYWxpZ24gICAgICAgICAgICAgbWVtYWxpZ24KKyAjZGVmaW5lIG5lZG1hbGxpbmZvICAgICAgICAgICAgIG1hbGxpbmZvCisgI2RlZmluZSBuZWRtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisgI2RlZmluZSBuZWRtYWxsb2NfdHJpbSAgICAgICAgICBtYWxsb2NfdHJpbQorICNkZWZpbmUgbmVkbWFsbG9jX3N0YXRzICAgICAgICAgbWFsbG9jX3N0YXRzCisgI2RlZmluZSBuZWRtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50CisgI2RlZmluZSBuZWRpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyAjZGVmaW5lIG5lZGluZGVwZW5kZW50X2NvbWFsbG9jIGluZGVwZW5kZW50X2NvbWFsbG9jCisgI2lmZGVmIF9NU0NfVkVSCisgICNkZWZpbmUgbmVkYmxrc2l6ZSAgICAgICAgICAgICAgX21zaXplCisgI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBOT19NQUxMSU5GTworI2RlZmluZSBOT19NQUxMSU5GTyAwCisjZW5kaWYKKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorICNpZiAhZGVmaW5lZChOT19ORURfTkFNRVNQQUNFKQorbmFtZXNwYWNlIG5lZGFsbG9jIHsKKyAjZWxzZQorZXh0ZXJuICJDIiB7CisgI2VuZGlmCisgI2RlZmluZSBUSFJPV1NQRUMgdGhyb3coKQorI2Vsc2UKKyAjZGVmaW5lIFRIUk9XU1BFQworI2VuZGlmCisKKy8qIFRoZXNlIGFyZSB0aGUgZ2xvYmFsIGZ1bmN0aW9ucyAqLworCisvKiBHZXRzIHRoZSB1c2FibGUgc2l6ZSBvZiBhbiBhbGxvY2F0ZWQgYmxvY2suIE5vdGUgdGhpcyB3aWxsIGFsd2F5cyBiZSBiaWdnZXIgdGhhbiB3aGF0IHdhcworYXNrZWQgZm9yIGR1ZSB0byByb3VuZGluZyBldGMuCisqLworRVhUU1BFQyBzaXplX3QgbmVkYmxrc2l6ZSh2b2lkICptZW0pIFRIUk9XU1BFQzsKKworRVhUU1BFQyB2b2lkIG5lZHNldHZhbHVlKHZvaWQgKnYpIFRIUk9XU1BFQzsKKworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRtYWxsb2Moc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkY2FsbG9jKHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcmVhbGxvYyh2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIHZvaWQgICBuZWRmcmVlKHZvaWQgKm1lbSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQzsKKyNpZiAhTk9fTUFMTElORk8KK0VYVFNQRUMgc3RydWN0IG1hbGxpbmZvIG5lZG1hbGxpbmZvKHZvaWQpIFRIUk9XU1BFQzsKKyNlbmRpZgorRVhUU1BFQyBpbnQgICAgbmVkbWFsbG9wdChpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDOworRVhUU1BFQyBpbnQgICAgbmVkbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkbWFsbG9jX3N0YXRzKHZvaWQpIFRIUk9XU1BFQzsKK0VYVFNQRUMgc2l6ZV90IG5lZG1hbGxvY19mb290cHJpbnQodm9pZCkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QgZWxlbXMsIHNpemVfdCAqc2l6ZXMsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQzsKKworLyogVGhlc2UgYXJlIHRoZSBwb29sIGZ1bmN0aW9ucyAqLworc3RydWN0IG5lZHBvb2xfdDsKK3R5cGVkZWYgc3RydWN0IG5lZHBvb2xfdCBuZWRwb29sOworCisvKiBDcmVhdGVzIGEgbWVtb3J5IHBvb2wgZm9yIHVzZSB3aXRoIHRoZSBuZWRwKiBmdW5jdGlvbnMgYmVsb3cuCitDYXBhY2l0eSBpcyBob3cgbXVjaCB0byBhbGxvY2F0ZSBpbW1lZGlhdGVseSAoaWYgeW91IGtub3cgeW91J2xsIGJlIGFsbG9jYXRpbmcgYSBsb3QKK29mIG1lbW9yeSB2ZXJ5IHNvb24pIHdoaWNoIHlvdSBjYW4gbGVhdmUgYXQgemVyby4gVGhyZWFkcyBzcGVjaWZpZXMgaG93IG1hbnkgdGhyZWFkcword2lsbCAqbm9ybWFsbHkqIGJlIGFjY2Vzc2luZyB0aGUgcG9vbCBjb25jdXJyZW50bHkuIFNldHRpbmcgdGhpcyB0byB6ZXJvIG1lYW5zIGl0CitleHRlbmRzIG9uIGRlbWFuZCwgYnV0IGJlIGNhcmVmdWwgb2YgdGhpcyBhcyBpdCBjYW4gcmFwaWRseSBjb25zdW1lIHN5c3RlbSByZXNvdXJjZXMKK3doZXJlIGJ1cnN0cyBvZiBjb25jdXJyZW50IHRocmVhZHMgdXNlIGEgcG9vbCBhdCBvbmNlLgorKi8KK0VYVFNQRUMgTUFMTE9DQVRUUiBuZWRwb29sICpuZWRjcmVhdGVwb29sKHNpemVfdCBjYXBhY2l0eSwgaW50IHRocmVhZHMpIFRIUk9XU1BFQzsKKworLyogRGVzdHJveXMgYSBtZW1vcnkgcG9vbCBwcmV2aW91c2x5IGNyZWF0ZWQgYnkgbmVkY3JlYXRlcG9vbCgpLgorKi8KK0VYVFNQRUMgdm9pZCBuZWRkZXN0cm95cG9vbChuZWRwb29sICpwKSBUSFJPV1NQRUM7CisKKy8qIFNldHMgYSB2YWx1ZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSBwb29sLiBZb3UgY2FuIHJldHJpZXZlIHRoaXMgdmFsdWUgYnkgcGFzc2luZworYW55IG1lbW9yeSBibG9jayBhbGxvY2F0ZWQgZnJvbSB0aGF0IHBvb2wuCisqLworRVhUU1BFQyB2b2lkIG5lZHBzZXR2YWx1ZShuZWRwb29sICpwLCB2b2lkICp2KSBUSFJPV1NQRUM7CisvKiBHZXRzIGEgcHJldmlvdXNseSBzZXQgdmFsdWUgdXNpbmcgbmVkcHNldHZhbHVlKCkgb3IgemVybyBpZiBtZW1vcnkgaXMgdW5rbm93bi4KK09wdGlvbmFsbHkgY2FuIGFsc28gcmV0cmlldmUgcG9vbC4KKyovCitFWFRTUEVDIHZvaWQgKm5lZGdldHZhbHVlKG5lZHBvb2wgKipwLCB2b2lkICptZW0pIFRIUk9XU1BFQzsKKworLyogRGlzYWJsZXMgdGhlIHRocmVhZCBjYWNoZSBmb3IgdGhlIGNhbGxpbmcgdGhyZWFkLCByZXR1cm5pbmcgYW55IGV4aXN0aW5nIGNhY2hlCitkYXRhIHRvIHRoZSBjZW50cmFsIHBvb2wuCisqLworRVhUU1BFQyB2b2lkIG5lZGRpc2FibGV0aHJlYWRjYWNoZShuZWRwb29sICpwKSBUSFJPV1NQRUM7CisKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcG1hbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRwY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcHJlYWxsb2MobmVkcG9vbCAqcCwgdm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkcGZyZWUobmVkcG9vbCAqcCwgdm9pZCAqbWVtKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHBtZW1hbGlnbihuZWRwb29sICpwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQzsKKyNpZiAhTk9fTUFMTElORk8KK0VYVFNQRUMgc3RydWN0IG1hbGxpbmZvIG5lZHBtYWxsaW5mbyhuZWRwb29sICpwKSBUSFJPV1NQRUM7CisjZW5kaWYKK0VYVFNQRUMgaW50ICAgIG5lZHBtYWxsb3B0KG5lZHBvb2wgKnAsIGludCBwYXJubywgaW50IHZhbHVlKSBUSFJPV1NQRUM7CitFWFRTUEVDIGludCAgICBuZWRwbWFsbG9jX3RyaW0obmVkcG9vbCAqcCwgc2l6ZV90IHBhZCkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkcG1hbGxvY19zdGF0cyhuZWRwb29sICpwKSBUSFJPV1NQRUM7CitFWFRTUEVDIHNpemVfdCBuZWRwbWFsbG9jX2Zvb3RwcmludChuZWRwb29sICpwKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqKm5lZHBpbmRlcGVuZGVudF9jYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY29tYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUM7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKyN1bmRlZiBNQUxMT0NBVFRSCisjdW5kZWYgRVhUU1BFQworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC9vYnN0YWNrLmMgYi9jb21wYXQvb2JzdGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzZjY2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvb2JzdGFjay5jCkBAIC0wLDAgKzEsNDEzIEBACisvKiBvYnN0YWNrLmMgLSBzdWJyb3V0aW5lcyB1c2VkIGltcGxpY2l0bHkgYnkgb2JqZWN0IHN0YWNrIG1hY3JvcworICAgQ29weXJpZ2h0IChDKSAxOTg4LCAxOTg5LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk2LCAxOTk3LCAxOTk4LAorICAgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgPGdldHRleHQuaD4KKyNpbmNsdWRlICJvYnN0YWNrLmgiCisKKy8qIE5PVEUgQkVGT1JFIE1PRElGWUlORyBUSElTIEZJTEU6IFRoaXMgdmVyc2lvbiBudW1iZXIgbXVzdCBiZQorICAgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgY2FsbGVycyBjb21waWxlZCB1c2luZyBhbiBvbGQgb2JzdGFjay5oIGNhbiBubworICAgbG9uZ2VyIHByb3Blcmx5IGNhbGwgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG9ic3RhY2suYy4gICovCisjZGVmaW5lIE9CU1RBQ0tfSU5URVJGQUNFX1ZFUlNJT04gMQorCisvKiBDb21tZW50IG91dCBhbGwgdGhpcyBjb2RlIGlmIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSwgYW5kIGFyZSBub3QKKyAgIGFjdHVhbGx5IGNvbXBpbGluZyB0aGUgbGlicmFyeSBpdHNlbGYsIGFuZCB0aGUgaW5zdGFsbGVkIGxpYnJhcnkKKyAgIHN1cHBvcnRzIHRoZSBzYW1lIGxpYnJhcnkgaW50ZXJmYWNlIHdlIGRvLiAgVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEdOVQorICAgQyBMaWJyYXJ5LCBidXQgYWxzbyBpbmNsdWRlZCBpbiBtYW55IG90aGVyIEdOVSBkaXN0cmlidXRpb25zLiAgQ29tcGlsaW5nCisgICBhbmQgbGlua2luZyBpbiB0aGlzIGNvZGUgaXMgYSB3YXN0ZSB3aGVuIHVzaW5nIHRoZSBHTlUgQyBsaWJyYXJ5CisgICAoZXNwZWNpYWxseSBpZiBpdCBpcyBhIHNoYXJlZCBsaWJyYXJ5KS4gIFJhdGhlciB0aGFuIGhhdmluZyBldmVyeSBHTlUKKyAgIHByb2dyYW0gdW5kZXJzdGFuZCBgY29uZmlndXJlIC0td2l0aC1nbnUtbGliYycgYW5kIG9taXQgdGhlIG9iamVjdAorICAgZmlsZXMsIGl0IGlzIHNpbXBsZXIgdG8ganVzdCBkbyB0aGlzIGluIHRoZSBzb3VyY2UgZm9yIGVhY2ggc3VjaCBmaWxlLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CQkvKiBSYW5kb20gdGhpbmcgdG8gZ2V0IF9fR05VX0xJQlJBUllfXy4gICovCisjaWYgIWRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18gJiYgX19HTlVfTElCUkFSWV9fID4gMQorIyBpbmNsdWRlIDxnbnUtdmVyc2lvbnMuaD4KKyMgaWYgX0dOVV9PQlNUQUNLX0lOVEVSRkFDRV9WRVJTSU9OID09IE9CU1RBQ0tfSU5URVJGQUNFX1ZFUlNJT04KKyMgIGRlZmluZSBFTElERV9DT0RFCisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZuZGVmIEVMSURFX0NPREUKKworCisjIGlmIEhBVkVfSU5UVFlQRVNfSAorIyAgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9TVERJTlRfSCB8fCBkZWZpbmVkIF9MSUJDCisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKworLyogRGV0ZXJtaW5lIGRlZmF1bHQgYWxpZ25tZW50LiAgKi8KK3VuaW9uIGZvb3JvdW5kCit7CisgIHVpbnRtYXhfdCBpOworICBsb25nIGRvdWJsZSBkOworICB2b2lkICpwOworfTsKK3N0cnVjdCBmb29hbGlnbgoreworICBjaGFyIGM7CisgIHVuaW9uIGZvb3JvdW5kIHU7Cit9OworLyogSWYgbWFsbG9jIHdlcmUgcmVhbGx5IHNtYXJ0LCBpdCB3b3VsZCByb3VuZCBhZGRyZXNzZXMgdG8gREVGQVVMVF9BTElHTk1FTlQuCisgICBCdXQgaW4gZmFjdCBpdCBtaWdodCBiZSBsZXNzIHNtYXJ0IGFuZCByb3VuZCBhZGRyZXNzZXMgdG8gYXMgbXVjaCBhcworICAgREVGQVVMVF9ST1VORElORy4gIFNvIHdlIHByZXBhcmUgZm9yIGl0IHRvIGRvIHRoYXQuICAqLworZW51bQorICB7CisgICAgREVGQVVMVF9BTElHTk1FTlQgPSBvZmZzZXRvZiAoc3RydWN0IGZvb2FsaWduLCB1KSwKKyAgICBERUZBVUxUX1JPVU5ESU5HID0gc2l6ZW9mICh1bmlvbiBmb29yb3VuZCkKKyAgfTsKKworLyogV2hlbiB3ZSBjb3B5IGEgbG9uZyBibG9jayBvZiBkYXRhLCB0aGlzIGlzIHRoZSB1bml0IHRvIGRvIGl0IHdpdGguCisgICBPbiBzb21lIG1hY2hpbmVzLCBjb3B5aW5nIHN1Y2Nlc3NpdmUgaW50cyBkb2VzIG5vdCB3b3JrOworICAgaW4gc3VjaCBhIGNhc2UsIHJlZGVmaW5lIENPUFlJTkdfVU5JVCB0byBgbG9uZycgKGlmIHRoYXQgd29ya3MpCisgICBvciBgY2hhcicgYXMgYSBsYXN0IHJlc29ydC4gICovCisjIGlmbmRlZiBDT1BZSU5HX1VOSVQKKyMgIGRlZmluZSBDT1BZSU5HX1VOSVQgaW50CisjIGVuZGlmCisKKworLyogVGhlIGZ1bmN0aW9ucyBhbGxvY2F0aW5nIG1vcmUgcm9vbSBieSBjYWxsaW5nIGBvYnN0YWNrX2NodW5rX2FsbG9jJworICAganVtcCB0byB0aGUgaGFuZGxlciBwb2ludGVkIHRvIGJ5IGBvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyJy4KKyAgIFRoaXMgY2FuIGJlIHNldCB0byBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiB3aGljaCBzaG91bGQgZWl0aGVyCisgICBhYm9ydCBncmFjZWZ1bGx5IG9yIHVzZSBsb25nanVtcCAtIGJ1dCBzaG91bGRuJ3QgcmV0dXJuLiAgVGhpcworICAgdmFyaWFibGUgYnkgZGVmYXVsdCBwb2ludHMgdG8gdGhlIGludGVybmFsIGZ1bmN0aW9uCisgICBgcHJpbnRfYW5kX2Fib3J0Jy4gICovCitzdGF0aWMgdm9pZCBwcmludF9hbmRfYWJvcnQgKHZvaWQpOwordm9pZCAoKm9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIpICh2b2lkKSA9IHByaW50X2FuZF9hYm9ydDsKKworIyBpZmRlZiBfTElCQworIyAgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfM180KQorLyogQSBsb29vbmcgdGltZSBhZ28gKGJlZm9yZSAxOTk0LCBhbnl3YXk7IHdlJ3JlIG5vdCBzdXJlKSB0aGlzIGdsb2JhbCB2YXJpYWJsZQorICAgd2FzIHVzZWQgYnkgbm9uLUdOVS1DIG1hY3JvcyB0byBhdm9pZCBtdWx0aXBsZSBldmFsdWF0aW9uLiAgVGhlIEdOVSBDCisgICBsaWJyYXJ5IHN0aWxsIGV4cG9ydHMgaXQgYmVjYXVzZSBzb21lYm9keSBtaWdodCB1c2UgaXQuICAqLworc3RydWN0IG9ic3RhY2sgKl9vYnN0YWNrX2NvbXBhdDsKK2NvbXBhdF9zeW1ib2wgKGxpYmMsIF9vYnN0YWNrX2NvbXBhdCwgX29ic3RhY2ssIEdMSUJDXzJfMCk7CisjICBlbmRpZgorIyBlbmRpZgorCisvKiBEZWZpbmUgYSBtYWNybyB0aGF0IGVpdGhlciBjYWxscyBmdW5jdGlvbnMgd2l0aCB0aGUgdHJhZGl0aW9uYWwgbWFsbG9jL2ZyZWUKKyAgIGNhbGxpbmcgaW50ZXJmYWNlLCBvciBjYWxscyBmdW5jdGlvbnMgd2l0aCB0aGUgbW1hbGxvYy9tZnJlZSBpbnRlcmZhY2UKKyAgICh0aGF0IGFkZHMgYW4gZXh0cmEgZmlyc3QgYXJndW1lbnQpLCBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdXNlX2V4dHJhX2FyZy4KKyAgIEZvciBmcmVlLCBkbyBub3QgdXNlID86LCBzaW5jZSBzb21lIGNvbXBpbGVycywgbGlrZSB0aGUgTUlQUyBjb21waWxlcnMsCisgICBkbyBub3QgYWxsb3cgKGV4cHIpID8gdm9pZCA6IHZvaWQuICAqLworCisjIGRlZmluZSBDQUxMX0NIVU5LRlVOKGgsIHNpemUpIFwKKyAgKCgoaCkgLT4gdXNlX2V4dHJhX2FyZykgXAorICAgPyAoKihoKS0+Y2h1bmtmdW4pICgoaCktPmV4dHJhX2FyZywgKHNpemUpKSBcCisgICA6ICgqKHN0cnVjdCBfb2JzdGFja19jaHVuayAqKCopIChsb25nKSkgKGgpLT5jaHVua2Z1bikgKChzaXplKSkpCisKKyMgZGVmaW5lIENBTExfRlJFRUZVTihoLCBvbGRfY2h1bmspIFwKKyAgZG8geyBcCisgICAgaWYgKChoKSAtPiB1c2VfZXh0cmFfYXJnKSBcCisgICAgICAoKihoKS0+ZnJlZWZ1bikgKChoKS0+ZXh0cmFfYXJnLCAob2xkX2NodW5rKSk7IFwKKyAgICBlbHNlIFwKKyAgICAgICgqKHZvaWQgKCopICh2b2lkICopKSAoaCktPmZyZWVmdW4pICgob2xkX2NodW5rKSk7IFwKKyAgfSB3aGlsZSAoMCkKKworDAorLyogSW5pdGlhbGl6ZSBhbiBvYnN0YWNrIEggZm9yIHVzZS4gIFNwZWNpZnkgY2h1bmsgc2l6ZSBTSVpFICgwIG1lYW5zIGRlZmF1bHQpLgorICAgT2JqZWN0cyBzdGFydCBvbiBtdWx0aXBsZXMgb2YgQUxJR05NRU5UICgwIG1lYW5zIHVzZSBkZWZhdWx0KS4KKyAgIENIVU5LRlVOIGlzIHRoZSBmdW5jdGlvbiB0byB1c2UgdG8gYWxsb2NhdGUgY2h1bmtzLAorICAgYW5kIEZSRUVGVU4gdGhlIGZ1bmN0aW9uIHRvIGZyZWUgdGhlbS4KKworICAgUmV0dXJuIG5vbnplcm8gaWYgc3VjY2Vzc2Z1bCwgY2FsbHMgb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlciBpZgorICAgYWxsb2NhdGlvbiBmYWlscy4gICovCisKK2ludAorX29ic3RhY2tfYmVnaW4gKHN0cnVjdCBvYnN0YWNrICpoLAorCQlpbnQgc2l6ZSwgaW50IGFsaWdubWVudCwKKwkJdm9pZCAqKCpjaHVua2Z1bikgKGxvbmcpLAorCQl2b2lkICgqZnJlZWZ1bikgKHZvaWQgKikpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2h1bms7IC8qIHBvaW50cyB0byBuZXcgY2h1bmsgKi8KKworICBpZiAoYWxpZ25tZW50ID09IDApCisgICAgYWxpZ25tZW50ID0gREVGQVVMVF9BTElHTk1FTlQ7CisgIGlmIChzaXplID09IDApCisgICAgLyogRGVmYXVsdCBzaXplIGlzIHdoYXQgR05VIG1hbGxvYyBjYW4gZml0IGluIGEgNDA5Ni1ieXRlIGJsb2NrLiAgKi8KKyAgICB7CisgICAgICAvKiAxMiBpcyBzaXplb2YgKG1oZWFkKSBhbmQgNCBpcyBFWFRSQSBmcm9tIEdOVSBtYWxsb2MuCisJIFVzZSB0aGUgdmFsdWVzIGZvciByYW5nZSBjaGVja2luZywgYmVjYXVzZSBpZiByYW5nZSBjaGVja2luZyBpcyBvZmYsCisJIHRoZSBleHRyYSBieXRlcyB3b24ndCBiZSBtaXNzZWQgdGVycmlibHksIGJ1dCBpZiByYW5nZSBjaGVja2luZyBpcyBvbgorCSBhbmQgd2UgdXNlZCBhIGxhcmdlciByZXF1ZXN0LCBhIHdob2xlIGV4dHJhIDQwOTYgYnl0ZXMgd291bGQgYmUKKwkgYWxsb2NhdGVkLgorCisJIFRoZXNlIG51bWJlciBhcmUgaXJyZWxldmFudCB0byB0aGUgbmV3IEdOVSBtYWxsb2MuICBJIHN1c3BlY3QgaXQgaXMKKwkgbGVzcyBzZW5zaXRpdmUgdG8gdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QuICAqLworICAgICAgaW50IGV4dHJhID0gKCgoKDEyICsgREVGQVVMVF9ST1VORElORyAtIDEpICYgfihERUZBVUxUX1JPVU5ESU5HIC0gMSkpCisJCSAgICArIDQgKyBERUZBVUxUX1JPVU5ESU5HIC0gMSkKKwkJICAgJiB+KERFRkFVTFRfUk9VTkRJTkcgLSAxKSk7CisgICAgICBzaXplID0gNDA5NiAtIGV4dHJhOworICAgIH0KKworICBoLT5jaHVua2Z1biA9IChzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKiAoKikodm9pZCAqLCBsb25nKSkgY2h1bmtmdW47CisgIGgtPmZyZWVmdW4gPSAodm9pZCAoKikgKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopKSBmcmVlZnVuOworICBoLT5jaHVua19zaXplID0gc2l6ZTsKKyAgaC0+YWxpZ25tZW50X21hc2sgPSBhbGlnbm1lbnQgLSAxOworICBoLT51c2VfZXh0cmFfYXJnID0gMDsKKworICBjaHVuayA9IGgtPmNodW5rID0gQ0FMTF9DSFVOS0ZVTiAoaCwgaCAtPiBjaHVua19zaXplKTsKKyAgaWYgKCFjaHVuaykKKyAgICAoKm9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIpICgpOworICBoLT5uZXh0X2ZyZWUgPSBoLT5vYmplY3RfYmFzZSA9IF9fUFRSX0FMSUdOICgoY2hhciAqKSBjaHVuaywgY2h1bmstPmNvbnRlbnRzLAorCQkJCQkgICAgICAgYWxpZ25tZW50IC0gMSk7CisgIGgtPmNodW5rX2xpbWl0ID0gY2h1bmstPmxpbWl0CisgICAgPSAoY2hhciAqKSBjaHVuayArIGgtPmNodW5rX3NpemU7CisgIGNodW5rLT5wcmV2ID0gTlVMTDsKKyAgLyogVGhlIGluaXRpYWwgY2h1bmsgbm93IGNvbnRhaW5zIG5vIGVtcHR5IG9iamVjdC4gICovCisgIGgtPm1heWJlX2VtcHR5X29iamVjdCA9IDA7CisgIGgtPmFsbG9jX2ZhaWxlZCA9IDA7CisgIHJldHVybiAxOworfQorCitpbnQKK19vYnN0YWNrX2JlZ2luXzEgKHN0cnVjdCBvYnN0YWNrICpoLCBpbnQgc2l6ZSwgaW50IGFsaWdubWVudCwKKwkJICB2b2lkICooKmNodW5rZnVuKSAodm9pZCAqLCBsb25nKSwKKwkJICB2b2lkICgqZnJlZWZ1bikgKHZvaWQgKiwgdm9pZCAqKSwKKwkJICB2b2lkICphcmcpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2h1bms7IC8qIHBvaW50cyB0byBuZXcgY2h1bmsgKi8KKworICBpZiAoYWxpZ25tZW50ID09IDApCisgICAgYWxpZ25tZW50ID0gREVGQVVMVF9BTElHTk1FTlQ7CisgIGlmIChzaXplID09IDApCisgICAgLyogRGVmYXVsdCBzaXplIGlzIHdoYXQgR05VIG1hbGxvYyBjYW4gZml0IGluIGEgNDA5Ni1ieXRlIGJsb2NrLiAgKi8KKyAgICB7CisgICAgICAvKiAxMiBpcyBzaXplb2YgKG1oZWFkKSBhbmQgNCBpcyBFWFRSQSBmcm9tIEdOVSBtYWxsb2MuCisJIFVzZSB0aGUgdmFsdWVzIGZvciByYW5nZSBjaGVja2luZywgYmVjYXVzZSBpZiByYW5nZSBjaGVja2luZyBpcyBvZmYsCisJIHRoZSBleHRyYSBieXRlcyB3b24ndCBiZSBtaXNzZWQgdGVycmlibHksIGJ1dCBpZiByYW5nZSBjaGVja2luZyBpcyBvbgorCSBhbmQgd2UgdXNlZCBhIGxhcmdlciByZXF1ZXN0LCBhIHdob2xlIGV4dHJhIDQwOTYgYnl0ZXMgd291bGQgYmUKKwkgYWxsb2NhdGVkLgorCisJIFRoZXNlIG51bWJlciBhcmUgaXJyZWxldmFudCB0byB0aGUgbmV3IEdOVSBtYWxsb2MuICBJIHN1c3BlY3QgaXQgaXMKKwkgbGVzcyBzZW5zaXRpdmUgdG8gdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QuICAqLworICAgICAgaW50IGV4dHJhID0gKCgoKDEyICsgREVGQVVMVF9ST1VORElORyAtIDEpICYgfihERUZBVUxUX1JPVU5ESU5HIC0gMSkpCisJCSAgICArIDQgKyBERUZBVUxUX1JPVU5ESU5HIC0gMSkKKwkJICAgJiB+KERFRkFVTFRfUk9VTkRJTkcgLSAxKSk7CisgICAgICBzaXplID0gNDA5NiAtIGV4dHJhOworICAgIH0KKworICBoLT5jaHVua2Z1biA9IChzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKiAoKikodm9pZCAqLGxvbmcpKSBjaHVua2Z1bjsKKyAgaC0+ZnJlZWZ1biA9ICh2b2lkICgqKSAodm9pZCAqLCBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKikpIGZyZWVmdW47CisgIGgtPmNodW5rX3NpemUgPSBzaXplOworICBoLT5hbGlnbm1lbnRfbWFzayA9IGFsaWdubWVudCAtIDE7CisgIGgtPmV4dHJhX2FyZyA9IGFyZzsKKyAgaC0+dXNlX2V4dHJhX2FyZyA9IDE7CisKKyAgY2h1bmsgPSBoLT5jaHVuayA9IENBTExfQ0hVTktGVU4gKGgsIGggLT4gY2h1bmtfc2l6ZSk7CisgIGlmICghY2h1bmspCisgICAgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAoKTsKKyAgaC0+bmV4dF9mcmVlID0gaC0+b2JqZWN0X2Jhc2UgPSBfX1BUUl9BTElHTiAoKGNoYXIgKikgY2h1bmssIGNodW5rLT5jb250ZW50cywKKwkJCQkJICAgICAgIGFsaWdubWVudCAtIDEpOworICBoLT5jaHVua19saW1pdCA9IGNodW5rLT5saW1pdAorICAgID0gKGNoYXIgKikgY2h1bmsgKyBoLT5jaHVua19zaXplOworICBjaHVuay0+cHJldiA9IE5VTEw7CisgIC8qIFRoZSBpbml0aWFsIGNodW5rIG5vdyBjb250YWlucyBubyBlbXB0eSBvYmplY3QuICAqLworICBoLT5tYXliZV9lbXB0eV9vYmplY3QgPSAwOworICBoLT5hbGxvY19mYWlsZWQgPSAwOworICByZXR1cm4gMTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcgY3VycmVudCBjaHVuayBmb3IgdGhlIG9ic3RhY2sgKkgKKyAgIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgTEVOR1RIIGJ5dGVzIG5lZWQgdG8gYmUgYWRkZWQKKyAgIHRvIHRoZSBjdXJyZW50IG9iamVjdCwgb3IgYSBuZXcgb2JqZWN0IG9mIGxlbmd0aCBMRU5HVEggYWxsb2NhdGVkLgorICAgQ29waWVzIGFueSBwYXJ0aWFsIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9sZCBjaHVuaworICAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IG9uZS4gICovCisKK3ZvaWQKK19vYnN0YWNrX25ld2NodW5rIChzdHJ1Y3Qgb2JzdGFjayAqaCwgaW50IGxlbmd0aCkKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpvbGRfY2h1bmsgPSBoLT5jaHVuazsKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpuZXdfY2h1bms7CisgIHJlZ2lzdGVyIGxvbmcJbmV3X3NpemU7CisgIHJlZ2lzdGVyIGxvbmcgb2JqX3NpemUgPSBoLT5uZXh0X2ZyZWUgLSBoLT5vYmplY3RfYmFzZTsKKyAgcmVnaXN0ZXIgbG9uZyBpOworICBsb25nIGFscmVhZHk7CisgIGNoYXIgKm9iamVjdF9iYXNlOworCisgIC8qIENvbXB1dGUgc2l6ZSBmb3IgbmV3IGNodW5rLiAgKi8KKyAgbmV3X3NpemUgPSAob2JqX3NpemUgKyBsZW5ndGgpICsgKG9ial9zaXplID4+IDMpICsgaC0+YWxpZ25tZW50X21hc2sgKyAxMDA7CisgIGlmIChuZXdfc2l6ZSA8IGgtPmNodW5rX3NpemUpCisgICAgbmV3X3NpemUgPSBoLT5jaHVua19zaXplOworCisgIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBuZXcgY2h1bmsuICAqLworICBuZXdfY2h1bmsgPSBDQUxMX0NIVU5LRlVOIChoLCBuZXdfc2l6ZSk7CisgIGlmICghbmV3X2NodW5rKQorICAgICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKCk7CisgIGgtPmNodW5rID0gbmV3X2NodW5rOworICBuZXdfY2h1bmstPnByZXYgPSBvbGRfY2h1bms7CisgIG5ld19jaHVuay0+bGltaXQgPSBoLT5jaHVua19saW1pdCA9IChjaGFyICopIG5ld19jaHVuayArIG5ld19zaXplOworCisgIC8qIENvbXB1dGUgYW4gYWxpZ25lZCBvYmplY3RfYmFzZSBpbiB0aGUgbmV3IGNodW5rICovCisgIG9iamVjdF9iYXNlID0KKyAgICBfX1BUUl9BTElHTiAoKGNoYXIgKikgbmV3X2NodW5rLCBuZXdfY2h1bmstPmNvbnRlbnRzLCBoLT5hbGlnbm1lbnRfbWFzayk7CisKKyAgLyogTW92ZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IHRvIHRoZSBuZXcgY2h1bmsuCisgICAgIFdvcmQgYXQgYSB0aW1lIGlzIGZhc3QgYW5kIGlzIHNhZmUgaWYgdGhlIG9iamVjdAorICAgICBpcyBzdWZmaWNpZW50bHkgYWxpZ25lZC4gICovCisgIGlmIChoLT5hbGlnbm1lbnRfbWFzayArIDEgPj0gREVGQVVMVF9BTElHTk1FTlQpCisgICAgeworICAgICAgZm9yIChpID0gb2JqX3NpemUgLyBzaXplb2YgKENPUFlJTkdfVU5JVCkgLSAxOworCSAgIGkgPj0gMDsgaS0tKQorCSgoQ09QWUlOR19VTklUICopb2JqZWN0X2Jhc2UpW2ldCisJICA9ICgoQ09QWUlOR19VTklUICopaC0+b2JqZWN0X2Jhc2UpW2ldOworICAgICAgLyogV2UgdXNlZCB0byBjb3B5IHRoZSBvZGQgZmV3IHJlbWFpbmluZyBieXRlcyBhcyBvbmUgZXh0cmEgQ09QWUlOR19VTklULAorCSBidXQgdGhhdCBjYW4gY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5IG9uIGEgbWFjaGluZQorCSB3aGljaCBkb2VzIG5vdCBkbyBzdHJpY3QgYWxpZ25tZW50IGZvciBDT1BZSU5HX1VOSVRTLiAgKi8KKyAgICAgIGFscmVhZHkgPSBvYmpfc2l6ZSAvIHNpemVvZiAoQ09QWUlOR19VTklUKSAqIHNpemVvZiAoQ09QWUlOR19VTklUKTsKKyAgICB9CisgIGVsc2UKKyAgICBhbHJlYWR5ID0gMDsKKyAgLyogQ29weSByZW1haW5pbmcgYnl0ZXMgb25lIGJ5IG9uZS4gICovCisgIGZvciAoaSA9IGFscmVhZHk7IGkgPCBvYmpfc2l6ZTsgaSsrKQorICAgIG9iamVjdF9iYXNlW2ldID0gaC0+b2JqZWN0X2Jhc2VbaV07CisKKyAgLyogSWYgdGhlIG9iamVjdCBqdXN0IGNvcGllZCB3YXMgdGhlIG9ubHkgZGF0YSBpbiBPTERfQ0hVTkssCisgICAgIGZyZWUgdGhhdCBjaHVuayBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGNoYWluLgorICAgICBCdXQgbm90IGlmIHRoYXQgY2h1bmsgbWlnaHQgY29udGFpbiBhbiBlbXB0eSBvYmplY3QuICAqLworICBpZiAoISBoLT5tYXliZV9lbXB0eV9vYmplY3QKKyAgICAgICYmIChoLT5vYmplY3RfYmFzZQorCSAgPT0gX19QVFJfQUxJR04gKChjaGFyICopIG9sZF9jaHVuaywgb2xkX2NodW5rLT5jb250ZW50cywKKwkJCSAgaC0+YWxpZ25tZW50X21hc2spKSkKKyAgICB7CisgICAgICBuZXdfY2h1bmstPnByZXYgPSBvbGRfY2h1bmstPnByZXY7CisgICAgICBDQUxMX0ZSRUVGVU4gKGgsIG9sZF9jaHVuayk7CisgICAgfQorCisgIGgtPm9iamVjdF9iYXNlID0gb2JqZWN0X2Jhc2U7CisgIGgtPm5leHRfZnJlZSA9IGgtPm9iamVjdF9iYXNlICsgb2JqX3NpemU7CisgIC8qIFRoZSBuZXcgY2h1bmsgY2VydGFpbmx5IGNvbnRhaW5zIG5vIGVtcHR5IG9iamVjdCB5ZXQuICAqLworICBoLT5tYXliZV9lbXB0eV9vYmplY3QgPSAwOworfQorIyBpZmRlZiBfTElCQworbGliY19oaWRkZW5fZGVmIChfb2JzdGFja19uZXdjaHVuaykKKyMgZW5kaWYKKworLyogUmV0dXJuIG5vbnplcm8gaWYgb2JqZWN0IE9CSiBoYXMgYmVlbiBhbGxvY2F0ZWQgZnJvbSBvYnN0YWNrIEguCisgICBUaGlzIGlzIGhlcmUgZm9yIGRlYnVnZ2luZy4KKyAgIElmIHlvdSB1c2UgaXQgaW4gYSBwcm9ncmFtLCB5b3UgYXJlIHByb2JhYmx5IGxvc2luZy4gICovCisKKy8qIFN1cHByZXNzIC1XbWlzc2luZy1wcm90b3R5cGVzIHdhcm5pbmcuICBXZSBkb24ndCB3YW50IHRvIGRlY2xhcmUgdGhpcyBpbgorICAgb2JzdGFjay5oIGJlY2F1c2UgaXQgaXMganVzdCBmb3IgZGVidWdnaW5nLiAgKi8KK2ludCBfb2JzdGFja19hbGxvY2F0ZWRfcCAoc3RydWN0IG9ic3RhY2sgKmgsIHZvaWQgKm9iaik7CisKK2ludAorX29ic3RhY2tfYWxsb2NhdGVkX3AgKHN0cnVjdCBvYnN0YWNrICpoLCB2b2lkICpvYmopCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqbHA7CS8qIGJlbG93IGFkZHIgb2YgYW55IG9iamVjdHMgaW4gdGhpcyBjaHVuayAqLworICByZWdpc3RlciBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKnBscDsJLyogcG9pbnQgdG8gcHJldmlvdXMgY2h1bmsgaWYgYW55ICovCisKKyAgbHAgPSAoaCktPmNodW5rOworICAvKiBXZSB1c2UgPj0gcmF0aGVyIHRoYW4gPiBzaW5jZSB0aGUgb2JqZWN0IGNhbm5vdCBiZSBleGFjdGx5IGF0CisgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNodW5rIGJ1dCBtaWdodCBiZSBhbiBlbXB0eSBvYmplY3QgZXhhY3RseQorICAgICBhdCB0aGUgZW5kIG9mIGFuIGFkamFjZW50IGNodW5rLiAgKi8KKyAgd2hpbGUgKGxwICE9IE5VTEwgJiYgKCh2b2lkICopIGxwID49IG9iaiB8fCAodm9pZCAqKSAobHApLT5saW1pdCA8IG9iaikpCisgICAgeworICAgICAgcGxwID0gbHAtPnByZXY7CisgICAgICBscCA9IHBscDsKKyAgICB9CisgIHJldHVybiBscCAhPSBOVUxMOworfQorDAorLyogRnJlZSBvYmplY3RzIGluIG9ic3RhY2sgSCwgaW5jbHVkaW5nIE9CSiBhbmQgZXZlcnl0aGluZyBhbGxvY2F0ZQorICAgbW9yZSByZWNlbnRseSB0aGFuIE9CSi4gIElmIE9CSiBpcyB6ZXJvLCBmcmVlIGV2ZXJ5dGhpbmcgaW4gSC4gICovCisKKyMgdW5kZWYgb2JzdGFja19mcmVlCisKK3ZvaWQKK29ic3RhY2tfZnJlZSAoc3RydWN0IG9ic3RhY2sgKmgsIHZvaWQgKm9iaikKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpscDsJLyogYmVsb3cgYWRkciBvZiBhbnkgb2JqZWN0cyBpbiB0aGlzIGNodW5rICovCisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqcGxwOwkvKiBwb2ludCB0byBwcmV2aW91cyBjaHVuayBpZiBhbnkgKi8KKworICBscCA9IGgtPmNodW5rOworICAvKiBXZSB1c2UgPj0gYmVjYXVzZSB0aGVyZSBjYW5ub3QgYmUgYW4gb2JqZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjaHVuay4KKyAgICAgQnV0IHRoZXJlIGNhbiBiZSBhbiBlbXB0eSBvYmplY3QgYXQgdGhhdCBhZGRyZXNzCisgICAgIGF0IHRoZSBlbmQgb2YgYW5vdGhlciBjaHVuay4gICovCisgIHdoaWxlIChscCAhPSBOVUxMICYmICgodm9pZCAqKSBscCA+PSBvYmogfHwgKHZvaWQgKikgKGxwKS0+bGltaXQgPCBvYmopKQorICAgIHsKKyAgICAgIHBscCA9IGxwLT5wcmV2OworICAgICAgQ0FMTF9GUkVFRlVOIChoLCBscCk7CisgICAgICBscCA9IHBscDsKKyAgICAgIC8qIElmIHdlIHN3aXRjaCBjaHVua3MsIHdlIGNhbid0IHRlbGwgd2hldGhlciB0aGUgbmV3IGN1cnJlbnQKKwkgY2h1bmsgY29udGFpbnMgYW4gZW1wdHkgb2JqZWN0LCBzbyBhc3N1bWUgdGhhdCBpdCBtYXkuICAqLworICAgICAgaC0+bWF5YmVfZW1wdHlfb2JqZWN0ID0gMTsKKyAgICB9CisgIGlmIChscCkKKyAgICB7CisgICAgICBoLT5vYmplY3RfYmFzZSA9IGgtPm5leHRfZnJlZSA9IChjaGFyICopIChvYmopOworICAgICAgaC0+Y2h1bmtfbGltaXQgPSBscC0+bGltaXQ7CisgICAgICBoLT5jaHVuayA9IGxwOworICAgIH0KKyAgZWxzZSBpZiAob2JqICE9IE5VTEwpCisgICAgLyogb2JqIGlzIG5vdCBpbiBhbnkgb2YgdGhlIGNodW5rcyEgKi8KKyAgICBhYm9ydCAoKTsKK30KKworIyBpZmRlZiBfTElCQworLyogT2xkZXIgdmVyc2lvbnMgb2YgbGliYyB1c2VkIGEgZnVuY3Rpb24gX29ic3RhY2tfZnJlZSBpbnRlbmRlZCB0byBiZQorICAgY2FsbGVkIGJ5IG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8KK3N0cm9uZ19hbGlhcyAob2JzdGFja19mcmVlLCBfb2JzdGFja19mcmVlKQorIyBlbmRpZgorDAoraW50Citfb2JzdGFja19tZW1vcnlfdXNlZCAoc3RydWN0IG9ic3RhY2sgKmgpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayogbHA7CisgIHJlZ2lzdGVyIGludCBuYnl0ZXMgPSAwOworCisgIGZvciAobHAgPSBoLT5jaHVuazsgbHAgIT0gTlVMTDsgbHAgPSBscC0+cHJldikKKyAgICB7CisgICAgICBuYnl0ZXMgKz0gbHAtPmxpbWl0IC0gKGNoYXIgKikgbHA7CisgICAgfQorICByZXR1cm4gbmJ5dGVzOworfQorDAorIyBpZmRlZiBfTElCQworIyAgaW5jbHVkZSA8bGliaW8vaW9saWJpby5oPgorIyBlbmRpZgorCisjIGlmbmRlZiBfX2F0dHJpYnV0ZV9fCisvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKyMgIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpCisjICAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgIGVuZGlmCisjIGVuZGlmCisKK3N0YXRpYyB2b2lkCitwcmludF9hbmRfYWJvcnQgKHZvaWQpCit7CisgIC8qIERvbid0IGNoYW5nZSBhbnkgb2YgdGhlc2Ugc3RyaW5ncy4gIFllcywgaXQgd291bGQgYmUgcG9zc2libGUgdG8gYWRkCisgICAgIHRoZSBuZXdsaW5lIHRvIHRoZSBzdHJpbmcgYW5kIHVzZSBmcHV0cyBvciBzby4gIEJ1dCB0aGlzIG11c3Qgbm90CisgICAgIGhhcHBlbiBiZWNhdXNlIHRoZSAibWVtb3J5IGV4aGF1c3RlZCIgbWVzc2FnZSBhcHBlYXJzIGluIG90aGVyIHBsYWNlcworICAgICBsaWtlIHRoaXMgYW5kIHRoZSB0cmFuc2xhdGlvbiBzaG91bGQgYmUgcmV1c2VkIGluc3RlYWQgb2YgY3JlYXRpbmcKKyAgICAgYSB2ZXJ5IHNpbWlsYXIgc3RyaW5nIHdoaWNoIHJlcXVpcmVzIGEgc2VwYXJhdGUgdHJhbnNsYXRpb24uICAqLworIyBpZmRlZiBfTElCQworICAodm9pZCkgX19meHByaW50ZiAoTlVMTCwgIiVzXG4iLCBfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworIyBlbHNlCisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworIyBlbmRpZgorICBleGl0ICgxKTsKK30KKworI2VuZGlmCS8qICFFTElERV9DT0RFICovCmRpZmYgLS1naXQgYS9jb21wYXQvb2JzdGFjay5oIGIvY29tcGF0L29ic3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTc4YmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L29ic3RhY2suaApAQCAtMCwwICsxLDUwNiBAQAorLyogb2JzdGFjay5oIC0gb2JqZWN0IHN0YWNrIG1hY3JvcworICAgQ29weXJpZ2h0IChDKSAxOTg4LTE5OTQsMTk5Ni0xOTk5LDIwMDMsMjAwNCwyMDA1LDIwMDkKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogU3VtbWFyeToKKworQWxsIHRoZSBhcHBhcmVudCBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIGFyZSBtYWNyb3MuIFRoZSBpZGVhCitpcyB0aGF0IHlvdSB3b3VsZCB1c2UgdGhlc2UgcHJlLXRlc3RlZCBtYWNyb3MgdG8gc29sdmUgYQordmVyeSBzcGVjaWZpYyBzZXQgb2YgcHJvYmxlbXMsIGFuZCB0aGV5IHdvdWxkIHJ1biBmYXN0LgorQ2F1dGlvbjogbm8gc2lkZS1lZmZlY3RzIGluIGFyZ3VtZW50cyBwbGVhc2UhISBUaGV5IG1heSBiZQorZXZhbHVhdGVkIE1BTlkgdGltZXMhIQorCitUaGVzZSBtYWNyb3Mgb3BlcmF0ZSBhIHN0YWNrIG9mIG9iamVjdHMuICBFYWNoIG9iamVjdCBzdGFydHMgbGlmZQorc21hbGwsIGFuZCBtYXkgZ3JvdyB0byBtYXR1cml0eS4gIChDb25zaWRlciBidWlsZGluZyBhIHdvcmQgc3lsbGFibGUKK2J5IHN5bGxhYmxlLikgIEFuIG9iamVjdCBjYW4gbW92ZSB3aGlsZSBpdCBpcyBncm93aW5nLiAgT25jZSBpdCBoYXMKK2JlZW4gImZpbmlzaGVkIiBpdCBuZXZlciBjaGFuZ2VzIGFkZHJlc3MgYWdhaW4uICBTbyB0aGUgInRvcCBvZiB0aGUKK3N0YWNrIiBpcyB0eXBpY2FsbHkgYW4gaW1tYXR1cmUgZ3Jvd2luZyBvYmplY3QsIHdoaWxlIHRoZSByZXN0IG9mIHRoZQorc3RhY2sgaXMgb2YgbWF0dXJlLCBmaXhlZCBzaXplIGFuZCBmaXhlZCBhZGRyZXNzIG9iamVjdHMuCisKK1RoZXNlIHJvdXRpbmVzIGdyYWIgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSwgdXNpbmcgYSBmdW5jdGlvbiB5b3UKK3N1cHBseSwgY2FsbGVkIGBvYnN0YWNrX2NodW5rX2FsbG9jJy4gIE9uIG9jY2FzaW9uLCB0aGV5IGZyZWUgY2h1bmtzLAorYnkgY2FsbGluZyBgb2JzdGFja19jaHVua19mcmVlJy4gIFlvdSBtdXN0IGRlZmluZSB0aGVtIGFuZCBkZWNsYXJlCit0aGVtIGJlZm9yZSB1c2luZyBhbnkgb2JzdGFjayBtYWNyb3MuCisKK0VhY2ggaW5kZXBlbmRlbnQgc3RhY2sgaXMgcmVwcmVzZW50ZWQgYnkgYSBgc3RydWN0IG9ic3RhY2snLgorRWFjaCBvZiB0aGUgb2JzdGFjayBtYWNyb3MgZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3VjaCBhIHN0cnVjdHVyZQorYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorCitPbmUgbW90aXZhdGlvbiBmb3IgdGhpcyBwYWNrYWdlIGlzIHRoZSBwcm9ibGVtIG9mIGdyb3dpbmcgY2hhciBzdHJpbmdzCitpbiBzeW1ib2wgdGFibGVzLiAgVW5sZXNzIHlvdSBhcmUgImZhc2Npc3QgcGlnIHdpdGggYSByZWFkLW9ubHkgbWluZCIKKy0tR29zcGVyJ3MgaW1tb3J0YWwgcXVvdGUgZnJvbSBIQUtNRU0gaXRlbSAxNTQsIG91dCBvZiBjb250ZXh0LS15b3UKK3dvdWxkIG5vdCBsaWtlIHRvIHB1dCBhbnkgYXJiaXRyYXJ5IHVwcGVyIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgeW91cgorc3ltYm9scy4KKworSW4gcHJhY3RpY2UgdGhpcyBvZnRlbiBtZWFucyB5b3Ugd2lsbCBidWlsZCBtYW55IHNob3J0IHN5bWJvbHMgYW5kIGEKK2ZldyBsb25nIHN5bWJvbHMuICBBdCB0aGUgdGltZSB5b3UgYXJlIHJlYWRpbmcgYSBzeW1ib2wgeW91IGRvbid0IGtub3cKK2hvdyBsb25nIGl0IGlzLiAgT25lIHRyYWRpdGlvbmFsIG1ldGhvZCBpcyB0byByZWFkIGEgc3ltYm9sIGludG8gYQorYnVmZmVyLCByZWFsbG9jKClhdGluZyB0aGUgYnVmZmVyIGV2ZXJ5IHRpbWUgeW91IHRyeSB0byByZWFkIGEgc3ltYm9sCit0aGF0IGlzIGxvbmdlciB0aGFuIHRoZSBidWZmZXIuICBUaGlzIGlzIGJlYXV0LCBidXQgeW91IHN0aWxsIHdpbGwKK3dhbnQgdG8gY29weSB0aGUgc3ltYm9sIGZyb20gdGhlIGJ1ZmZlciB0byBhIG1vcmUgcGVybWFuZW50CitzeW1ib2wtdGFibGUgZW50cnkgc2F5IGFib3V0IGhhbGYgdGhlIHRpbWUuCisKK1dpdGggb2JzdGFja3MsIHlvdSBjYW4gd29yayBkaWZmZXJlbnRseS4gIFVzZSBvbmUgb2JzdGFjayBmb3IgYWxsIHN5bWJvbAorbmFtZXMuICBBcyB5b3UgcmVhZCBhIHN5bWJvbCwgZ3JvdyB0aGUgbmFtZSBpbiB0aGUgb2JzdGFjayBncmFkdWFsbHkuCitXaGVuIHRoZSBuYW1lIGlzIGNvbXBsZXRlLCBmaW5hbGl6ZSBpdC4gIFRoZW4sIGlmIHRoZSBzeW1ib2wgZXhpc3RzIGFscmVhZHksCitmcmVlIHRoZSBuZXdseSByZWFkIG5hbWUuCisKK1RoZSB3YXkgd2UgZG8gdGhpcyBpcyB0byB0YWtlIGEgbGFyZ2UgY2h1bmssIGFsbG9jYXRpbmcgbWVtb3J5IGZyb20KK2xvdyBhZGRyZXNzZXMuICBXaGVuIHlvdSB3YW50IHRvIGJ1aWxkIGEgc3ltYm9sIGluIHRoZSBjaHVuayB5b3UganVzdAorYWRkIGNoYXJzIGFib3ZlIHRoZSBjdXJyZW50ICJoaWdoIHdhdGVyIG1hcmsiIGluIHRoZSBjaHVuay4gIFdoZW4geW91CitoYXZlIGZpbmlzaGVkIGFkZGluZyBjaGFycywgYmVjYXVzZSB5b3UgZ290IHRvIHRoZSBlbmQgb2YgdGhlIHN5bWJvbCwKK3lvdSBrbm93IGhvdyBsb25nIHRoZSBjaGFycyBhcmUsIGFuZCB5b3UgY2FuIGNyZWF0ZSBhIG5ldyBvYmplY3QuCitNb3N0bHkgdGhlIGNoYXJzIHdpbGwgbm90IGJ1cnN0IG92ZXIgdGhlIGhpZ2hlc3QgYWRkcmVzcyBvZiB0aGUgY2h1bmssCitiZWNhdXNlIHlvdSB3b3VsZCB0eXBpY2FsbHkgZXhwZWN0IGEgY2h1bmsgdG8gYmUgKHNheSkgMTAwIHRpbWVzIGFzCitsb25nIGFzIGFuIGF2ZXJhZ2Ugb2JqZWN0LgorCitJbiBjYXNlIHRoYXQgaXNuJ3QgY2xlYXIsIHdoZW4gd2UgaGF2ZSBlbm91Z2ggY2hhcnMgdG8gbWFrZSB1cAordGhlIG9iamVjdCwgVEhFWSBBUkUgQUxSRUFEWSBDT05USUdVT1VTIElOIFRIRSBDSFVOSyAoZ3VhcmFudGVlZCkKK3NvIHdlIGp1c3QgcG9pbnQgdG8gaXQgd2hlcmUgaXQgbGllcy4gIE5vIG1vdmluZyBvZiBjaGFycyBpcworbmVlZGVkIGFuZCB0aGlzIGlzIHRoZSBzZWNvbmQgd2luOiBwb3RlbnRpYWxseSBsb25nIHN0cmluZ3MgbmVlZAorbmV2ZXIgYmUgZXhwbGljaXRseSBzaHVmZmxlZC4gT25jZSBhbiBvYmplY3QgaXMgZm9ybWVkLCBpdCBkb2VzIG5vdAorY2hhbmdlIGl0cyBhZGRyZXNzIGR1cmluZyBpdHMgbGlmZXRpbWUuCisKK1doZW4gdGhlIGNoYXJzIGJ1cnN0IG92ZXIgYSBjaHVuayBib3VuZGFyeSwgd2UgYWxsb2NhdGUgYSBsYXJnZXIKK2NodW5rLCBhbmQgdGhlbiBjb3B5IHRoZSBwYXJ0bHkgZm9ybWVkIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9sZAorY2h1bmsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGxhcmdlciBjaHVuay4gIFdlIHRoZW4gY2Fycnkgb24KK2FjY3JldGluZyBjaGFyYWN0ZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBhcyB3ZSBub3JtYWxseSB3b3VsZC4KKworQSBzcGVjaWFsIG1hY3JvIGlzIHByb3ZpZGVkIHRvIGFkZCBhIHNpbmdsZSBjaGFyIGF0IGEgdGltZSB0byBhCitncm93aW5nIG9iamVjdC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgcmVnaXN0ZXIgdmFyaWFibGVzLCB3aGljaAorYnJlYWsgdGhlIG9yZGluYXJ5ICdncm93dGgnIG1hY3JvLgorCitTdW1tYXJ5OgorCVdlIGFsbG9jYXRlIGxhcmdlIGNodW5rcy4KKwlXZSBjYXJ2ZSBvdXQgb25lIG9iamVjdCBhdCBhIHRpbWUgZnJvbSB0aGUgY3VycmVudCBjaHVuay4KKwlPbmNlIGNhcnZlZCwgYW4gb2JqZWN0IG5ldmVyIG1vdmVzLgorCVdlIGFyZSBmcmVlIHRvIGFwcGVuZCBkYXRhIG9mIGFueSBzaXplIHRvIHRoZSBjdXJyZW50bHkKKwkgIGdyb3dpbmcgb2JqZWN0LgorCUV4YWN0bHkgb25lIG9iamVjdCBpcyBncm93aW5nIGluIGFuIG9ic3RhY2sgYXQgYW55IG9uZSB0aW1lLgorCVlvdSBjYW4gcnVuIG9uZSBvYnN0YWNrIHBlciBjb250cm9sIGJsb2NrLgorCVlvdSBtYXkgaGF2ZSBhcyBtYW55IGNvbnRyb2wgYmxvY2tzIGFzIHlvdSBkYXJlLgorCUJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBkbyBpdCwgeW91IGNhbiBgdW53aW5kJyBhbiBvYnN0YWNrCisJICBiYWNrIHRvIGEgcHJldmlvdXMgc3RhdGUuIChZb3UgbWF5IHJlbW92ZSBvYmplY3RzIG11Y2gKKwkgIGFzIHlvdSB3b3VsZCB3aXRoIGEgc3RhY2suKQorKi8KKworCisvKiBEb24ndCBkbyB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1vcmUgdGhhbiBvbmNlLiAgKi8KKworI2lmbmRlZiBfT0JTVEFDS19ICisjZGVmaW5lIF9PQlNUQUNLX0ggMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisMCisvKiBXZSBuZWVkIHRoZSB0eXBlIG9mIGEgcG9pbnRlciBzdWJ0cmFjdGlvbi4gIElmIF9fUFRSRElGRl9UWVBFX18gaXMKKyAgIGRlZmluZWQsIGFzIHdpdGggR05VIEMsIHVzZSB0aGF0OyB0aGF0IHdheSB3ZSBkb24ndCBwb2xsdXRlIHRoZQorICAgbmFtZXNwYWNlIHdpdGggPHN0ZGRlZi5oPidzIHN5bWJvbHMuICBPdGhlcndpc2UsIGluY2x1ZGUgPHN0ZGRlZi5oPgorICAgYW5kIHVzZSBwdHJkaWZmX3QuICAqLworCisjaWZkZWYgX19QVFJESUZGX1RZUEVfXworIyBkZWZpbmUgUFRSX0lOVF9UWVBFIF9fUFRSRElGRl9UWVBFX18KKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyBkZWZpbmUgUFRSX0lOVF9UWVBFIHB0cmRpZmZfdAorI2VuZGlmCisKKy8qIElmIEIgaXMgdGhlIGJhc2Ugb2YgYW4gb2JqZWN0IGFkZHJlc3NlZCBieSBQLCByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgYWxpZ25pbmcgUCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiBBICsgMS4gIEIgYW5kIFAgbXVzdCBiZSBvZiB0eXBlCisgICBjaGFyICouICBBICsgMSBtdXN0IGJlIGEgcG93ZXIgb2YgMi4gICovCisKKyNkZWZpbmUgX19CUFRSX0FMSUdOKEIsIFAsIEEpICgoQikgKyAoKChQKSAtIChCKSArIChBKSkgJiB+KEEpKSkKKworLyogU2ltaWxpYXIgdG8gX0JQVFJfQUxJR04gKEIsIFAsIEEpLCBleGNlcHQgb3B0aW1pemUgdGhlIGNvbW1vbiBjYXNlCisgICB3aGVyZSBwb2ludGVycyBjYW4gYmUgY29udmVydGVkIHRvIGludGVnZXJzLCBhbGlnbmVkIGFzIGludGVnZXJzLAorICAgYW5kIGNvbnZlcnRlZCBiYWNrIGFnYWluLiAgSWYgUFRSX0lOVF9UWVBFIGlzIG5hcnJvd2VyIHRoYW4gYQorICAgcG9pbnRlciAoZS5nLiwgdGhlIEFTLzQwMCksIHBsYXkgaXQgc2FmZSBhbmQgY29tcHV0ZSB0aGUgYWxpZ25tZW50CisgICByZWxhdGl2ZSB0byBCLiAgT3RoZXJ3aXNlLCB1c2UgdGhlIGZhc3RlciBzdHJhdGVneSBvZiBjb21wdXRpbmcgdGhlCisgICBhbGlnbm1lbnQgcmVsYXRpdmUgdG8gMC4gICovCisKKyNkZWZpbmUgX19QVFJfQUxJR04oQiwgUCwgQSkJCQkJCQkgICAgXAorICBfX0JQVFJfQUxJR04gKHNpemVvZiAoUFRSX0lOVF9UWVBFKSA8IHNpemVvZiAodm9pZCAqKSA/IChCKSA6IChjaGFyICopIDAsIFwKKwkJUCwgQSkKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdHJ1Y3QgX29ic3RhY2tfY2h1bmsJCS8qIExpdmVzIGF0IGZyb250IG9mIGVhY2ggY2h1bmsuICovCit7CisgIGNoYXIgICpsaW1pdDsJCQkvKiAxIHBhc3QgZW5kIG9mIHRoaXMgY2h1bmsgKi8KKyAgc3RydWN0IF9vYnN0YWNrX2NodW5rICpwcmV2OwkvKiBhZGRyZXNzIG9mIHByaW9yIGNodW5rIG9yIE5VTEwgKi8KKyAgY2hhcgljb250ZW50c1s0XTsJCS8qIG9iamVjdHMgYmVnaW4gaGVyZSAqLworfTsKKworc3RydWN0IG9ic3RhY2sJCS8qIGNvbnRyb2wgY3VycmVudCBvYmplY3QgaW4gY3VycmVudCBjaHVuayAqLworeworICBsb25nCWNodW5rX3NpemU7CQkvKiBwcmVmZXJyZWQgc2l6ZSB0byBhbGxvY2F0ZSBjaHVua3MgaW4gKi8KKyAgc3RydWN0IF9vYnN0YWNrX2NodW5rICpjaHVuazsJLyogYWRkcmVzcyBvZiBjdXJyZW50IHN0cnVjdCBvYnN0YWNrX2NodW5rICovCisgIGNoYXIJKm9iamVjdF9iYXNlOwkJLyogYWRkcmVzcyBvZiBvYmplY3Qgd2UgYXJlIGJ1aWxkaW5nICovCisgIGNoYXIJKm5leHRfZnJlZTsJCS8qIHdoZXJlIHRvIGFkZCBuZXh0IGNoYXIgdG8gY3VycmVudCBvYmplY3QgKi8KKyAgY2hhcgkqY2h1bmtfbGltaXQ7CQkvKiBhZGRyZXNzIG9mIGNoYXIgYWZ0ZXIgY3VycmVudCBjaHVuayAqLworICB1bmlvbgorICB7CisgICAgUFRSX0lOVF9UWVBFIHRlbXBpbnQ7CisgICAgdm9pZCAqdGVtcHB0cjsKKyAgfSB0ZW1wOwkJCS8qIFRlbXBvcmFyeSBmb3Igc29tZSBtYWNyb3MuICAqLworICBpbnQgICBhbGlnbm1lbnRfbWFzazsJCS8qIE1hc2sgb2YgYWxpZ25tZW50IGZvciBlYWNoIG9iamVjdC4gKi8KKyAgLyogVGhlc2UgcHJvdG90eXBlcyB2YXJ5IGJhc2VkIG9uIGB1c2VfZXh0cmFfYXJnJywgYW5kIHdlIHVzZQorICAgICBjYXN0cyB0byB0aGUgcHJvdG90eXBlbGVzcyBmdW5jdGlvbiB0eXBlIGluIGFsbCBhc3NpZ25tZW50cywKKyAgICAgYnV0IGhhdmluZyBwcm90b3R5cGVzIGhlcmUgcXVpZXRzIC1Xc3RyaWN0LXByb3RvdHlwZXMuICAqLworICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKigqY2h1bmtmdW4pICh2b2lkICosIGxvbmcpOworICB2b2lkICgqZnJlZWZ1bikgKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopOworICB2b2lkICpleHRyYV9hcmc7CQkvKiBmaXJzdCBhcmcgZm9yIGNodW5rIGFsbG9jL2RlYWxsb2MgZnVuY3MgKi8KKyAgdW5zaWduZWQgdXNlX2V4dHJhX2FyZzoxOwkvKiBjaHVuayBhbGxvYy9kZWFsbG9jIGZ1bmNzIHRha2UgZXh0cmEgYXJnICovCisgIHVuc2lnbmVkIG1heWJlX2VtcHR5X29iamVjdDoxOy8qIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgY3VycmVudAorCQkJCSAgIGNodW5rIGNvbnRhaW5zIGEgemVyby1sZW5ndGggb2JqZWN0LiAgVGhpcworCQkJCSAgIHByZXZlbnRzIGZyZWVpbmcgdGhlIGNodW5rIGlmIHdlIGFsbG9jYXRlCisJCQkJICAgYSBiaWdnZXIgY2h1bmsgdG8gcmVwbGFjZSBpdC4gKi8KKyAgdW5zaWduZWQgYWxsb2NfZmFpbGVkOjE7CS8qIE5vIGxvbmdlciB1c2VkLCBhcyB3ZSBub3cgY2FsbCB0aGUgZmFpbGVkCisJCQkJICAgaGFuZGxlciBvbiBlcnJvciwgYnV0IHJldGFpbmVkIGZvciBiaW5hcnkKKwkJCQkgICBjb21wYXRpYmlsaXR5LiAgKi8KK307CisKKy8qIERlY2xhcmUgdGhlIGV4dGVybmFsIGZ1bmN0aW9ucyB3ZSB1c2U7IHRoZXkgYXJlIGluIG9ic3RhY2suYy4gICovCisKK2V4dGVybiB2b2lkIF9vYnN0YWNrX25ld2NodW5rIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQpOworZXh0ZXJuIGludCBfb2JzdGFja19iZWdpbiAoc3RydWN0IG9ic3RhY2sgKiwgaW50LCBpbnQsCisJCQkgICAgdm9pZCAqKCopIChsb25nKSwgdm9pZCAoKikgKHZvaWQgKikpOworZXh0ZXJuIGludCBfb2JzdGFja19iZWdpbl8xIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQsIGludCwKKwkJCSAgICAgdm9pZCAqKCopICh2b2lkICosIGxvbmcpLAorCQkJICAgICB2b2lkICgqKSAodm9pZCAqLCB2b2lkICopLCB2b2lkICopOworZXh0ZXJuIGludCBfb2JzdGFja19tZW1vcnlfdXNlZCAoc3RydWN0IG9ic3RhY2sgKik7CisKK3ZvaWQgb2JzdGFja19mcmVlIChzdHJ1Y3Qgb2JzdGFjayAqLCB2b2lkICopOworCisMCisvKiBFcnJvciBoYW5kbGVyIGNhbGxlZCB3aGVuIGBvYnN0YWNrX2NodW5rX2FsbG9jJyBmYWlsZWQgdG8gYWxsb2NhdGUKKyAgIG1vcmUgbWVtb3J5LiAgVGhpcyBjYW4gYmUgc2V0IHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIHdoaWNoCisgICBzaG91bGQgZWl0aGVyIGFib3J0IGdyYWNlZnVsbHkgb3IgdXNlIGxvbmdqdW1wIC0gYnV0IHNob3VsZG4ndAorICAgcmV0dXJuLiAgVGhlIGRlZmF1bHQgYWN0aW9uIGlzIHRvIHByaW50IGEgbWVzc2FnZSBhbmQgYWJvcnQuICAqLworZXh0ZXJuIHZvaWQgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAodm9pZCk7CisMCisvKiBQb2ludGVyIHRvIGJlZ2lubmluZyBvZiBvYmplY3QgYmVpbmcgYWxsb2NhdGVkIG9yIHRvIGJlIGFsbG9jYXRlZCBuZXh0LgorICAgTm90ZSB0aGF0IHRoaXMgbWlnaHQgbm90IGJlIHRoZSBmaW5hbCBhZGRyZXNzIG9mIHRoZSBvYmplY3QKKyAgIGJlY2F1c2UgYSBuZXcgY2h1bmsgbWlnaHQgYmUgbmVlZGVkIHRvIGhvbGQgdGhlIGZpbmFsIHNpemUuICAqLworCisjZGVmaW5lIG9ic3RhY2tfYmFzZShoKSAoKHZvaWQgKikgKGgpLT5vYmplY3RfYmFzZSkKKworLyogU2l6ZSBmb3IgYWxsb2NhdGluZyBvcmRpbmFyeSBjaHVua3MuICAqLworCisjZGVmaW5lIG9ic3RhY2tfY2h1bmtfc2l6ZShoKSAoKGgpLT5jaHVua19zaXplKQorCisvKiBQb2ludGVyIHRvIG5leHQgYnl0ZSBub3QgeWV0IGFsbG9jYXRlZCBpbiBjdXJyZW50IGNodW5rLiAgKi8KKworI2RlZmluZSBvYnN0YWNrX25leHRfZnJlZShoKQkoKGgpLT5uZXh0X2ZyZWUpCisKKy8qIE1hc2sgc3BlY2lmeWluZyBsb3cgYml0cyB0aGF0IHNob3VsZCBiZSBjbGVhciBpbiBhZGRyZXNzIG9mIGFuIG9iamVjdC4gICovCisKKyNkZWZpbmUgb2JzdGFja19hbGlnbm1lbnRfbWFzayhoKSAoKGgpLT5hbGlnbm1lbnRfbWFzaykKKworLyogVG8gcHJldmVudCBwcm90b3R5cGUgd2FybmluZ3MgcHJvdmlkZSBjb21wbGV0ZSBhcmd1bWVudCBsaXN0LiAgKi8KKyNkZWZpbmUgb2JzdGFja19pbml0KGgpCQkJCQkJXAorICBfb2JzdGFja19iZWdpbiAoKGgpLCAwLCAwLAkJCQkJXAorCQkgICh2b2lkICooKikgKGxvbmcpKSBvYnN0YWNrX2NodW5rX2FsbG9jLAlcCisJCSAgKHZvaWQgKCopICh2b2lkICopKSBvYnN0YWNrX2NodW5rX2ZyZWUpCisKKyNkZWZpbmUgb2JzdGFja19iZWdpbihoLCBzaXplKQkJCQkJXAorICBfb2JzdGFja19iZWdpbiAoKGgpLCAoc2l6ZSksIDAsCQkJCVwKKwkJICAodm9pZCAqKCopIChsb25nKSkgb2JzdGFja19jaHVua19hbGxvYywJXAorCQkgICh2b2lkICgqKSAodm9pZCAqKSkgb2JzdGFja19jaHVua19mcmVlKQorCisjZGVmaW5lIG9ic3RhY2tfc3BlY2lmeV9hbGxvY2F0aW9uKGgsIHNpemUsIGFsaWdubWVudCwgY2h1bmtmdW4sIGZyZWVmdW4pICBcCisgIF9vYnN0YWNrX2JlZ2luICgoaCksIChzaXplKSwgKGFsaWdubWVudCksCQkJCSAgIFwKKwkJICAodm9pZCAqKCopIChsb25nKSkgKGNodW5rZnVuKSwJCQkgICBcCisJCSAgKHZvaWQgKCopICh2b2lkICopKSAoZnJlZWZ1bikpCisKKyNkZWZpbmUgb2JzdGFja19zcGVjaWZ5X2FsbG9jYXRpb25fd2l0aF9hcmcoaCwgc2l6ZSwgYWxpZ25tZW50LCBjaHVua2Z1biwgZnJlZWZ1biwgYXJnKSBcCisgIF9vYnN0YWNrX2JlZ2luXzEgKChoKSwgKHNpemUpLCAoYWxpZ25tZW50KSwJCQkJXAorCQkgICAgKHZvaWQgKigqKSAodm9pZCAqLCBsb25nKSkgKGNodW5rZnVuKSwJCVwKKwkJICAgICh2b2lkICgqKSAodm9pZCAqLCB2b2lkICopKSAoZnJlZWZ1biksIChhcmcpKQorCisjZGVmaW5lIG9ic3RhY2tfY2h1bmtmdW4oaCwgbmV3Y2h1bmtmdW4pIFwKKyAgKChoKSAtPiBjaHVua2Z1biA9IChzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKigqKSh2b2lkICosIGxvbmcpKSAobmV3Y2h1bmtmdW4pKQorCisjZGVmaW5lIG9ic3RhY2tfZnJlZWZ1bihoLCBuZXdmcmVlZnVuKSBcCisgICgoaCkgLT4gZnJlZWZ1biA9ICh2b2lkICgqKSh2b2lkICosIHN0cnVjdCBfb2JzdGFja19jaHVuayAqKSkgKG5ld2ZyZWVmdW4pKQorCisjZGVmaW5lIG9ic3RhY2tfMWdyb3dfZmFzdChoLGFjaGFyKSAoKigoaCktPm5leHRfZnJlZSkrKyA9IChhY2hhcikpCisKKyNkZWZpbmUgb2JzdGFja19ibGFua19mYXN0KGgsbikgKChoKS0+bmV4dF9mcmVlICs9IChuKSkKKworI2RlZmluZSBvYnN0YWNrX21lbW9yeV91c2VkKGgpIF9vYnN0YWNrX21lbW9yeV91c2VkIChoKQorDAorI2lmIGRlZmluZWQgX19HTlVDX18gJiYgZGVmaW5lZCBfX1NURENfXyAmJiBfX1NURENfXworLyogTmV4dFN0ZXAgMi4wIGNjIGlzIHJlYWxseSBnY2MgMS45MyBidXQgaXQgZGVmaW5lcyBfX0dOVUNfXyA9IDIgYW5kCisgICBkb2VzIG5vdCBpbXBsZW1lbnQgX19leHRlbnNpb25fXy4gIEJ1dCB0aGF0IGNvbXBpbGVyIGRvZXNuJ3QgZGVmaW5lCisgICBfX0dOVUNfTUlOT1JfXy4gICovCisjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19OZVhUX18gJiYgIV9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9fZXh0ZW5zaW9uX18KKyMgZW5kaWYKKworLyogRm9yIEdOVSBDLCBpZiBub3QgLXRyYWRpdGlvbmFsLAorICAgd2UgY2FuIGRlZmluZSB0aGVzZSBtYWNyb3MgdG8gY29tcHV0ZSBhbGwgYXJncyBvbmx5IG9uY2UKKyAgIHdpdGhvdXQgdXNpbmcgYSBnbG9iYWwgdmFyaWFibGUuCisgICBBbHNvLCB3ZSBjYW4gYXZvaWQgdXNpbmcgdGhlIGB0ZW1wJyBzbG90LCB0byBtYWtlIGZhc3RlciBjb2RlLiAgKi8KKworIyBkZWZpbmUgb2JzdGFja19vYmplY3Rfc2l6ZShPQlNUQUNLKQkJCQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisgICh7IHN0cnVjdCBvYnN0YWNrIGNvbnN0ICpfX28gPSAoT0JTVEFDSyk7CQkJCVwKKyAgICAgKHVuc2lnbmVkKSAoX19vLT5uZXh0X2ZyZWUgLSBfX28tPm9iamVjdF9iYXNlKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19yb29tKE9CU1RBQ0spCQkJCQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisgICh7IHN0cnVjdCBvYnN0YWNrIGNvbnN0ICpfX28gPSAoT0JTVEFDSyk7CQkJCVwKKyAgICAgKHVuc2lnbmVkKSAoX19vLT5jaHVua19saW1pdCAtIF9fby0+bmV4dF9mcmVlKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19tYWtlX3Jvb20oT0JTVEFDSyxsZW5ndGgpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCisgICBpZiAoX19vLT5jaHVua19saW1pdCAtIF9fby0+bmV4dF9mcmVlIDwgX19sZW4pCQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbik7CQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja19lbXB0eV9wKE9CU1RBQ0spCQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgKHsgc3RydWN0IG9ic3RhY2sgY29uc3QgKl9fbyA9IChPQlNUQUNLKTsJCQkJXAorICAgICAoX19vLT5jaHVuay0+cHJldiA9PSAwCQkJCQkJXAorICAgICAgJiYgX19vLT5uZXh0X2ZyZWUgPT0gX19QVFJfQUxJR04gKChjaGFyICopIF9fby0+Y2h1bmssCQlcCisJCQkJCV9fby0+Y2h1bmstPmNvbnRlbnRzLAkJXAorCQkJCQlfX28tPmFsaWdubWVudF9tYXNrKSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdyhPQlNUQUNLLHdoZXJlLGxlbmd0aCkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGludCBfX2xlbiA9IChsZW5ndGgpOwkJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIF9fbGVuID4gX19vLT5jaHVua19saW1pdCkJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuKTsJCQkJCVwKKyAgIG1lbWNweSAoX19vLT5uZXh0X2ZyZWUsIHdoZXJlLCBfX2xlbik7CQkJCVwKKyAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOwkJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3cwKE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgX19sZW4gKyAxID4gX19vLT5jaHVua19saW1pdCkJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuICsgMSk7CQkJCVwKKyAgIG1lbWNweSAoX19vLT5uZXh0X2ZyZWUsIHdoZXJlLCBfX2xlbik7CQkJCVwKKyAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOwkJCQkJCVwKKyAgICooX19vLT5uZXh0X2ZyZWUpKysgPSAwOwkJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrXzFncm93KE9CU1RBQ0ssZGF0dW0pCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgMSA+IF9fby0+Y2h1bmtfbGltaXQpCQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgMSk7CQkJCQlcCisgICBvYnN0YWNrXzFncm93X2Zhc3QgKF9fbywgZGF0dW0pOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKy8qIFRoZXNlIGFzc3VtZSB0aGF0IHRoZSBvYnN0YWNrIGFsaWdubWVudCBpcyBnb29kIGVub3VnaCBmb3IgcG9pbnRlcnMKKyAgIG9yIGludHMsIGFuZCB0aGF0IHRoZSBkYXRhIGFkZGVkIHNvIGZhciB0byB0aGUgY3VycmVudCBvYmplY3QKKyAgIHNoYXJlcyB0aGF0IG11Y2ggYWxpZ25tZW50LiAgKi8KKworIyBkZWZpbmUgb2JzdGFja19wdHJfZ3JvdyhPQlNUQUNLLGRhdHVtKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgc2l6ZW9mICh2b2lkICopID4gX19vLT5jaHVua19saW1pdCkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgc2l6ZW9mICh2b2lkICopKTsJCQkJXAorICAgb2JzdGFja19wdHJfZ3Jvd19mYXN0IChfX28sIGRhdHVtKTsgfSkJCQkJXAorCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93KE9CU1RBQ0ssZGF0dW0pCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBzaXplb2YgKGludCkgPiBfX28tPmNodW5rX2xpbWl0KQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBzaXplb2YgKGludCkpOwkJCQlcCisgICBvYnN0YWNrX2ludF9ncm93X2Zhc3QgKF9fbywgZGF0dW0pOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93X2Zhc3QoT0JTVEFDSyxhcHRyKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKKyAgICooY29uc3Qgdm9pZCAqKikgX19vMS0+bmV4dF9mcmVlID0gKGFwdHIpOwkJCQlcCisgICBfX28xLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChjb25zdCB2b2lkICopOwkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja19pbnRfZ3Jvd19mYXN0KE9CU1RBQ0ssYWludCkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbzEgPSAoT0JTVEFDSyk7CQkJCQlcCisgICAqKGludCAqKSBfX28xLT5uZXh0X2ZyZWUgPSAoYWludCk7CQkJCQlcCisgICBfX28xLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChpbnQpOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfYmxhbmsoT0JTVEFDSyxsZW5ndGgpCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+Y2h1bmtfbGltaXQgLSBfX28tPm5leHRfZnJlZSA8IF9fbGVuKQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOwkJCQkJXAorICAgb2JzdGFja19ibGFua19mYXN0IChfX28sIF9fbGVuKTsJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2FsbG9jKE9CU1RBQ0ssbGVuZ3RoKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9faCA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIG9ic3RhY2tfYmxhbmsgKF9faCwgKGxlbmd0aCkpOwkJCQkJXAorICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weShPQlNUQUNLLHdoZXJlLGxlbmd0aCkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9faCA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIG9ic3RhY2tfZ3JvdyAoX19oLCAod2hlcmUpLCAobGVuZ3RoKSk7CQkJCVwKKyAgIG9ic3RhY2tfZmluaXNoIChfX2gpOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2NvcHkwKE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAorICAgb2JzdGFja19ncm93MCAoX19oLCAod2hlcmUpLCAobGVuZ3RoKSk7CQkJCVwKKyAgIG9ic3RhY2tfZmluaXNoIChfX2gpOyB9KQorCisvKiBUaGUgbG9jYWwgdmFyaWFibGUgaXMgbmFtZWQgX19vMSB0byBhdm9pZCBhIG5hbWUgY29uZmxpY3QKKyAgIHdoZW4gb2JzdGFja19ibGFuayBpcyBjYWxsZWQuICAqLworIyBkZWZpbmUgb2JzdGFja19maW5pc2goT0JTVEFDSykJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28xID0gKE9CU1RBQ0spOwkJCQkJXAorICAgdm9pZCAqX192YWx1ZSA9ICh2b2lkICopIF9fbzEtPm9iamVjdF9iYXNlOwkJCQlcCisgICBpZiAoX19vMS0+bmV4dF9mcmVlID09IF9fdmFsdWUpCQkJCQlcCisgICAgIF9fbzEtPm1heWJlX2VtcHR5X29iamVjdCA9IDE7CQkJCQlcCisgICBfX28xLT5uZXh0X2ZyZWUJCQkJCQkJXAorICAgICA9IF9fUFRSX0FMSUdOIChfX28xLT5vYmplY3RfYmFzZSwgX19vMS0+bmV4dF9mcmVlLAkJCVwKKwkJICAgIF9fbzEtPmFsaWdubWVudF9tYXNrKTsJCQkJXAorICAgaWYgKF9fbzEtPm5leHRfZnJlZSAtIChjaGFyICopX19vMS0+Y2h1bmsJCQkJXAorICAgICAgID4gX19vMS0+Y2h1bmtfbGltaXQgLSAoY2hhciAqKV9fbzEtPmNodW5rKQkJCVwKKyAgICAgX19vMS0+bmV4dF9mcmVlID0gX19vMS0+Y2h1bmtfbGltaXQ7CQkJCVwKKyAgIF9fbzEtPm9iamVjdF9iYXNlID0gX19vMS0+bmV4dF9mcmVlOwkJCQkJXAorICAgX192YWx1ZTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19mcmVlKE9CU1RBQ0ssIE9CSikJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICB2b2lkICpfX29iaiA9IChPQkopOwkJCQkJCQlcCisgICBpZiAoX19vYmogPiAodm9pZCAqKV9fby0+Y2h1bmsgJiYgX19vYmogPCAodm9pZCAqKV9fby0+Y2h1bmtfbGltaXQpICBcCisgICAgIF9fby0+bmV4dF9mcmVlID0gX19vLT5vYmplY3RfYmFzZSA9IChjaGFyICopX19vYmo7CQkJXAorICAgZWxzZSAob2JzdGFja19mcmVlKSAoX19vLCBfX29iaik7IH0pCisMCisjZWxzZSAvKiBub3QgX19HTlVDX18gb3Igbm90IF9fU1REQ19fICovCisKKyMgZGVmaW5lIG9ic3RhY2tfb2JqZWN0X3NpemUoaCkgXAorICh1bnNpZ25lZCkgKChoKS0+bmV4dF9mcmVlIC0gKGgpLT5vYmplY3RfYmFzZSkKKworIyBkZWZpbmUgb2JzdGFja19yb29tKGgpCQlcCisgKHVuc2lnbmVkKSAoKGgpLT5jaHVua19saW1pdCAtIChoKS0+bmV4dF9mcmVlKQorCisjIGRlZmluZSBvYnN0YWNrX2VtcHR5X3AoaCkgXAorICgoaCktPmNodW5rLT5wcmV2ID09IDAJCQkJCQkJXAorICAmJiAoaCktPm5leHRfZnJlZSA9PSBfX1BUUl9BTElHTiAoKGNoYXIgKikgKGgpLT5jaHVuaywJCVwKKwkJCQkgICAgKGgpLT5jaHVuay0+Y29udGVudHMsCQlcCisJCQkJICAgIChoKS0+YWxpZ25tZW50X21hc2spKQorCisvKiBOb3RlIHRoYXQgdGhlIGNhbGwgdG8gX29ic3RhY2tfbmV3Y2h1bmsgaXMgZW5jbG9zZWQgaW4gKC4uLiwgMCkKKyAgIHNvIHRoYXQgd2UgY2FuIGF2b2lkIGhhdmluZyB2b2lkIGV4cHJlc3Npb25zCisgICBpbiB0aGUgYXJtcyBvZiB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KKyAgIENhc3RpbmcgdGhlIHRoaXJkIG9wZXJhbmQgdG8gdm9pZCB3YXMgdHJpZWQgYmVmb3JlLAorICAgYnV0IHNvbWUgY29tcGlsZXJzIHdvbid0IGFjY2VwdCBpdC4gICovCisKKyMgZGVmaW5lIG9ic3RhY2tfbWFrZV9yb29tKGgsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAudGVtcGludCA9IChsZW5ndGgpLAkJCQkJCVwKKyAgKCgoaCktPm5leHRfZnJlZSArIChoKS0+dGVtcC50ZW1waW50ID4gKGgpLT5jaHVua19saW1pdCkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50KSwgMCkgOiAwKSkKKworIyBkZWZpbmUgb2JzdGFja19ncm93KGgsd2hlcmUsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAudGVtcGludCA9IChsZW5ndGgpLAkJCQkJCVwKKyAgKCgoaCktPm5leHRfZnJlZSArIChoKS0+dGVtcC50ZW1waW50ID4gKGgpLT5jaHVua19saW1pdCkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50KSwgMCkgOiAwKSwJCVwKKyAgbWVtY3B5ICgoaCktPm5leHRfZnJlZSwgd2hlcmUsIChoKS0+dGVtcC50ZW1waW50KSwJCQlcCisgIChoKS0+bmV4dF9mcmVlICs9IChoKS0+dGVtcC50ZW1waW50KQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3cwKGgsd2hlcmUsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAudGVtcGludCA9IChsZW5ndGgpLAkJCQkJCVwKKyAgKCgoaCktPm5leHRfZnJlZSArIChoKS0+dGVtcC50ZW1waW50ICsgMSA+IChoKS0+Y2h1bmtfbGltaXQpCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAoaCktPnRlbXAudGVtcGludCArIDEpLCAwKSA6IDApLAkJXAorICBtZW1jcHkgKChoKS0+bmV4dF9mcmVlLCB3aGVyZSwgKGgpLT50ZW1wLnRlbXBpbnQpLAkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wLnRlbXBpbnQsCQkJCQlcCisgICooKGgpLT5uZXh0X2ZyZWUpKysgPSAwKQorCisjIGRlZmluZSBvYnN0YWNrXzFncm93KGgsZGF0dW0pCQkJCQkJXAorKCAoKChoKS0+bmV4dF9mcmVlICsgMSA+IChoKS0+Y2h1bmtfbGltaXQpCQkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIDEpLCAwKSA6IDApLAkJCQlcCisgIG9ic3RhY2tfMWdyb3dfZmFzdCAoaCwgZGF0dW0pKQorCisjIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93KGgsZGF0dW0pCQkJCQlcCisoICgoKGgpLT5uZXh0X2ZyZWUgKyBzaXplb2YgKGNoYXIgKikgPiAoaCktPmNodW5rX2xpbWl0KQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgc2l6ZW9mIChjaGFyICopKSwgMCkgOiAwKSwJCVwKKyAgb2JzdGFja19wdHJfZ3Jvd19mYXN0IChoLCBkYXR1bSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3coaCxkYXR1bSkJCQkJCVwKKyggKCgoaCktPm5leHRfZnJlZSArIHNpemVvZiAoaW50KSA+IChoKS0+Y2h1bmtfbGltaXQpCQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgc2l6ZW9mIChpbnQpKSwgMCkgOiAwKSwJCQlcCisgIG9ic3RhY2tfaW50X2dyb3dfZmFzdCAoaCwgZGF0dW0pKQorCisjIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93X2Zhc3QoaCxhcHRyKQkJCQkJXAorICAoKChjb25zdCB2b2lkICoqKSAoKGgpLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mICh2b2lkICopKSlbLTFdID0gKGFwdHIpKQorCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93X2Zhc3QoaCxhaW50KQkJCQkJXAorICAoKChpbnQgKikgKChoKS0+bmV4dF9mcmVlICs9IHNpemVvZiAoaW50KSkpWy0xXSA9IChhaW50KSkKKworIyBkZWZpbmUgb2JzdGFja19ibGFuayhoLGxlbmd0aCkJCQkJCVwKKyggKGgpLT50ZW1wLnRlbXBpbnQgPSAobGVuZ3RoKSwJCQkJCQlcCisgICgoKGgpLT5jaHVua19saW1pdCAtIChoKS0+bmV4dF9mcmVlIDwgKGgpLT50ZW1wLnRlbXBpbnQpCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAoaCktPnRlbXAudGVtcGludCksIDApIDogMCksCQlcCisgIG9ic3RhY2tfYmxhbmtfZmFzdCAoaCwgKGgpLT50ZW1wLnRlbXBpbnQpKQorCisjIGRlZmluZSBvYnN0YWNrX2FsbG9jKGgsbGVuZ3RoKQkJCQkJXAorIChvYnN0YWNrX2JsYW5rICgoaCksIChsZW5ndGgpKSwgb2JzdGFja19maW5pc2ggKChoKSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weShoLHdoZXJlLGxlbmd0aCkJCQkJCVwKKyAob2JzdGFja19ncm93ICgoaCksICh3aGVyZSksIChsZW5ndGgpKSwgb2JzdGFja19maW5pc2ggKChoKSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weTAoaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisgKG9ic3RhY2tfZ3JvdzAgKChoKSwgKHdoZXJlKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKKworIyBkZWZpbmUgb2JzdGFja19maW5pc2goaCkJCQkJCQlcCisoICgoaCktPm5leHRfZnJlZSA9PSAoaCktPm9iamVjdF9iYXNlCQkJCQlcCisgICA/ICgoKGgpLT5tYXliZV9lbXB0eV9vYmplY3QgPSAxKSwgMCkJCQkJCVwKKyAgIDogMCksCQkJCQkJCQlcCisgIChoKS0+dGVtcC50ZW1wcHRyID0gKGgpLT5vYmplY3RfYmFzZSwJCQkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUJCQkJCQkJXAorICAgID0gX19QVFJfQUxJR04gKChoKS0+b2JqZWN0X2Jhc2UsIChoKS0+bmV4dF9mcmVlLAkJCVwKKwkJICAgKGgpLT5hbGlnbm1lbnRfbWFzayksCQkJCVwKKyAgKCgoaCktPm5leHRfZnJlZSAtIChjaGFyICopIChoKS0+Y2h1bmsJCQkJXAorICAgID4gKGgpLT5jaHVua19saW1pdCAtIChjaGFyICopIChoKS0+Y2h1bmspCQkJCVwKKyAgID8gKChoKS0+bmV4dF9mcmVlID0gKGgpLT5jaHVua19saW1pdCkgOiAwKSwJCQkJXAorICAoaCktPm9iamVjdF9iYXNlID0gKGgpLT5uZXh0X2ZyZWUsCQkJCQlcCisgIChoKS0+dGVtcC50ZW1wcHRyKQorCisjIGRlZmluZSBvYnN0YWNrX2ZyZWUoaCxvYmopCQkJCQkJXAorKCAoaCktPnRlbXAudGVtcGludCA9IChjaGFyICopIChvYmopIC0gKGNoYXIgKikgKGgpLT5jaHVuaywJCVwKKyAgKCgoKGgpLT50ZW1wLnRlbXBpbnQgPiAwCQkJCQkJXAorICAgICYmIChoKS0+dGVtcC50ZW1waW50IDwgKGgpLT5jaHVua19saW1pdCAtIChjaGFyICopIChoKS0+Y2h1bmspKQlcCisgICA/IChpbnQpICgoaCktPm5leHRfZnJlZSA9IChoKS0+b2JqZWN0X2Jhc2UJCQkJXAorCSAgICA9IChoKS0+dGVtcC50ZW1waW50ICsgKGNoYXIgKikgKGgpLT5jaHVuaykJCQlcCisgICA6ICgoKG9ic3RhY2tfZnJlZSkgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQgKyAoY2hhciAqKSAoaCktPmNodW5rKSwgMCksIDApKSkKKworI2VuZGlmIC8qIG5vdCBfX0dOVUNfXyBvciBub3QgX19TVERDX18gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CS8qIEMrKyAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBvYnN0YWNrLmggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9wb2xsL3BvbGwuYyBiL2NvbXBhdC9wb2xsL3BvbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDIyNmVjCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3BvbGwvcG9sbC5jCkBAIC0wLDAgKzEsNjE0IEBACisvKiBFbXVsYXRpb24gZm9yIHBvbGwoMikKKyAgIENvbnRyaWJ1dGVkIGJ5IFBhb2xvIEJvbnppbmkuCisKKyAgIENvcHlyaWdodCAyMDAxLTIwMDMsIDIwMDYtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZ251bGliLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogVGVsbCBnY2Mgbm90IHRvIHdhcm4gYWJvdXQgdGhlIChuZmQgPCAwKSB0ZXN0cywgYmVsb3cuICAqLworI2lmIChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pIHx8IDQgPCBfX0dOVUNfXworIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd0eXBlLWxpbWl0cyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSU4zMikKKyMgaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDxwb2xsLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworIyBkZWZpbmUgV0lOMzJfTkFUSVZFCisjIGlmIGRlZmluZWQgKF9NU0NfVkVSKQorIyAgZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDIKKyMgZW5kaWYKKyMgaW5jbHVkZSA8d2luc29jazIuaD4KKyMgaW5jbHVkZSA8d2luZG93cy5oPgorIyBpbmNsdWRlIDxpby5oPgorIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxjb25pby5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorIyBpZm5kZWYgTk9fU1lTX1NFTEVDVF9ICisjICBpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfRklMSU9fSAorIyBpbmNsdWRlIDxzeXMvZmlsaW8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8dGltZS5oPgorCisjaWZuZGVmIElORlRJTQorIyBkZWZpbmUgSU5GVElNICgtMSkKKyNlbmRpZgorCisvKiBCZU9TIGRvZXMgbm90IGhhdmUgTVNHX1BFRUsuICAqLworI2lmbmRlZiBNU0dfUEVFSworIyBkZWZpbmUgTVNHX1BFRUsgMAorI2VuZGlmCisKKyNpZmRlZiBXSU4zMl9OQVRJVkUKKworI2RlZmluZSBJc0NvbnNvbGVIYW5kbGUoaCkgKCgobG9uZykgKGgpICYgMykgPT0gMykKKworc3RhdGljIEJPT0wKK0lzU29ja2V0SGFuZGxlIChIQU5ETEUgaCkKK3sKKyAgV1NBTkVUV09SS0VWRU5UUyBldjsKKworICBpZiAoSXNDb25zb2xlSGFuZGxlIChoKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogVW5kZXIgV2luZSwgaXQgc2VlbXMgdGhhdCBnZXRzb2Nrb3B0IHJldHVybnMgMCBmb3IgcGlwZXMgdG9vLgorICAgICBXU0FFbnVtTmV0d29ya0V2ZW50cyBpbnN0ZWFkIGRpc3Rpbmd1aXNoZXMgdGhlIHR3byBjb3JyZWN0bHkuICAqLworICBldi5sTmV0d29ya0V2ZW50cyA9IDB4REVBREJFRUY7CisgIFdTQUVudW1OZXR3b3JrRXZlbnRzICgoU09DS0VUKSBoLCBOVUxMLCAmZXYpOworICByZXR1cm4gZXYubE5ldHdvcmtFdmVudHMgIT0gMHhERUFEQkVFRjsKK30KKworLyogRGVjbGFyZSBkYXRhIHN0cnVjdHVyZXMgZm9yIG50ZGxsIGZ1bmN0aW9ucy4gICovCit0eXBlZGVmIHN0cnVjdCBfRklMRV9QSVBFX0xPQ0FMX0lORk9STUFUSU9OIHsKKyAgVUxPTkcgTmFtZWRQaXBlVHlwZTsKKyAgVUxPTkcgTmFtZWRQaXBlQ29uZmlndXJhdGlvbjsKKyAgVUxPTkcgTWF4aW11bUluc3RhbmNlczsKKyAgVUxPTkcgQ3VycmVudEluc3RhbmNlczsKKyAgVUxPTkcgSW5ib3VuZFF1b3RhOworICBVTE9ORyBSZWFkRGF0YUF2YWlsYWJsZTsKKyAgVUxPTkcgT3V0Ym91bmRRdW90YTsKKyAgVUxPTkcgV3JpdGVRdW90YUF2YWlsYWJsZTsKKyAgVUxPTkcgTmFtZWRQaXBlU3RhdGU7CisgIFVMT05HIE5hbWVkUGlwZUVuZDsKK30gRklMRV9QSVBFX0xPQ0FMX0lORk9STUFUSU9OLCAqUEZJTEVfUElQRV9MT0NBTF9JTkZPUk1BVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QgX0lPX1NUQVRVU19CTE9DSworeworICB1bmlvbiB7CisgICAgRFdPUkQgU3RhdHVzOworICAgIFBWT0lEIFBvaW50ZXI7CisgIH0gdTsKKyAgVUxPTkdfUFRSIEluZm9ybWF0aW9uOworfSBJT19TVEFUVVNfQkxPQ0ssICpQSU9fU1RBVFVTX0JMT0NLOworCit0eXBlZGVmIGVudW0gX0ZJTEVfSU5GT1JNQVRJT05fQ0xBU1MgeworICBGaWxlUGlwZUxvY2FsSW5mb3JtYXRpb24gPSAyNAorfSBGSUxFX0lORk9STUFUSU9OX0NMQVNTLCAqUEZJTEVfSU5GT1JNQVRJT05fQ0xBU1M7CisKK3R5cGVkZWYgRFdPUkQgKFdJTkFQSSAqUE50UXVlcnlJbmZvcm1hdGlvbkZpbGUpCisJIChIQU5ETEUsIElPX1NUQVRVU19CTE9DSyAqLCBWT0lEICosIFVMT05HLCBGSUxFX0lORk9STUFUSU9OX0NMQVNTKTsKKworIyBpZm5kZWYgUElQRV9CVUYKKyMgIGRlZmluZSBQSVBFX0JVRiAgICAgIDUxMgorIyBlbmRpZgorCisvKiBDb21wdXRlIHJldmVudHMgdmFsdWVzIGZvciBmaWxlIGhhbmRsZSBILiAgSWYgc29tZSBldmVudHMgY2Fubm90IGhhcHBlbgorICAgZm9yIHRoZSBoYW5kbGUsIGVsaW1pbmF0ZSB0aGVtIGZyb20gKlBfU09VR0hULiAgKi8KKworc3RhdGljIGludAord2luMzJfY29tcHV0ZV9yZXZlbnRzIChIQU5ETEUgaCwgaW50ICpwX3NvdWdodCkKK3sKKyAgaW50IGksIHJldCwgaGFwcGVuZWQ7CisgIElOUFVUX1JFQ09SRCAqaXJidWZmZXI7CisgIERXT1JEIGF2YWlsLCBuYnVmZmVyOworICBCT09MIGJSZXQ7CisgIElPX1NUQVRVU19CTE9DSyBpb3NiOworICBGSUxFX1BJUEVfTE9DQUxfSU5GT1JNQVRJT04gZnBsaTsKKyAgc3RhdGljIFBOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlIE50UXVlcnlJbmZvcm1hdGlvbkZpbGU7CisgIHN0YXRpYyBCT09MIG9uY2Vfb25seTsKKworICBzd2l0Y2ggKEdldEZpbGVUeXBlIChoKSkKKyAgICB7CisgICAgY2FzZSBGSUxFX1RZUEVfUElQRToKKyAgICAgIGlmICghb25jZV9vbmx5KQorCXsKKwkgIE50UXVlcnlJbmZvcm1hdGlvbkZpbGUgPSAoUE50UXVlcnlJbmZvcm1hdGlvbkZpbGUpCisJICAgIEdldFByb2NBZGRyZXNzIChHZXRNb2R1bGVIYW5kbGUgKCJudGRsbC5kbGwiKSwKKwkJCSAgICAiTnRRdWVyeUluZm9ybWF0aW9uRmlsZSIpOworCSAgb25jZV9vbmx5ID0gVFJVRTsKKwl9CisKKyAgICAgIGhhcHBlbmVkID0gMDsKKyAgICAgIGlmIChQZWVrTmFtZWRQaXBlIChoLCBOVUxMLCAwLCBOVUxMLCAmYXZhaWwsIE5VTEwpICE9IDApCisJeworCSAgaWYgKGF2YWlsKQorCSAgICBoYXBwZW5lZCB8PSAqcF9zb3VnaHQgJiAoUE9MTElOIHwgUE9MTFJETk9STSk7CisJfQorICAgICAgZWxzZSBpZiAoR2V0TGFzdEVycm9yICgpID09IEVSUk9SX0JST0tFTl9QSVBFKQorCWhhcHBlbmVkIHw9IFBPTExIVVA7CisKKyAgICAgIGVsc2UKKwl7CisJICAvKiBJdCB3YXMgdGhlIHdyaXRlLWVuZCBvZiB0aGUgcGlwZS4gIENoZWNrIGlmIGl0IGlzIHdyaXRhYmxlLgorCSAgICAgSWYgTnRRdWVyeUluZm9ybWF0aW9uRmlsZSBmYWlscywgb3B0aW1pc3RpY2FsbHkgYXNzdW1lIHRoZSBwaXBlIGlzCisJICAgICB3cml0YWJsZS4gIFRoaXMgY291bGQgaGFwcGVuIG9uIFdpbjl4LCB3aGVyZSBOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlCisJICAgICBpcyBub3QgYXZhaWxhYmxlLCBvciBpZiB3ZSBpbmhlcml0IGEgcGlwZSB0aGF0IGRvZXNuJ3QgcGVybWl0CisJICAgICBGSUxFX1JFQURfQVRUUklCVVRFUyBhY2Nlc3Mgb24gdGhlIHdyaXRlIGVuZCAoSSB0aGluayB0aGlzIHNob3VsZAorCSAgICAgbm90IGhhcHBlbiBzaW5jZSBXaW5YUCBTUDI7IFdJTkUgc2VlbXMgZmluZSB0b28pLiAgT3RoZXJ3aXNlLAorCSAgICAgZW5zdXJlIHRoYXQgZW5vdWdoIHNwYWNlIGlzIGF2YWlsYWJsZSBmb3IgYXRvbWljIHdyaXRlcy4gICovCisJICBtZW1zZXQgKCZpb3NiLCAwLCBzaXplb2YgKGlvc2IpKTsKKwkgIG1lbXNldCAoJmZwbGksIDAsIHNpemVvZiAoZnBsaSkpOworCisJICBpZiAoIU50UXVlcnlJbmZvcm1hdGlvbkZpbGUKKwkgICAgICB8fCBOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlIChoLCAmaW9zYiwgJmZwbGksIHNpemVvZiAoZnBsaSksCisJCQkJCSBGaWxlUGlwZUxvY2FsSW5mb3JtYXRpb24pCisJICAgICAgfHwgZnBsaS5Xcml0ZVF1b3RhQXZhaWxhYmxlID49IFBJUEVfQlVGCisJICAgICAgfHwgKGZwbGkuT3V0Ym91bmRRdW90YSA8IFBJUEVfQlVGICYmCisJCSAgZnBsaS5Xcml0ZVF1b3RhQXZhaWxhYmxlID09IGZwbGkuT3V0Ym91bmRRdW90YSkpCisJICAgIGhhcHBlbmVkIHw9ICpwX3NvdWdodCAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQpOworCX0KKyAgICAgIHJldHVybiBoYXBwZW5lZDsKKworICAgIGNhc2UgRklMRV9UWVBFX0NIQVI6CisgICAgICByZXQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChoLCAwKTsKKyAgICAgIGlmICghSXNDb25zb2xlSGFuZGxlIChoKSkKKwlyZXR1cm4gcmV0ID09IFdBSVRfT0JKRUNUXzAgPyAqcF9zb3VnaHQgJiB+KFBPTExQUkkgfCBQT0xMUkRCQU5EKSA6IDA7CisKKyAgICAgIG5idWZmZXIgPSBhdmFpbCA9IDA7CisgICAgICBiUmV0ID0gR2V0TnVtYmVyT2ZDb25zb2xlSW5wdXRFdmVudHMgKGgsICZuYnVmZmVyKTsKKyAgICAgIGlmIChiUmV0KQorCXsKKwkgIC8qIElucHV0IGJ1ZmZlci4gICovCisJICAqcF9zb3VnaHQgJj0gUE9MTElOIHwgUE9MTFJETk9STTsKKwkgIGlmIChuYnVmZmVyID09IDApCisJICAgIHJldHVybiBQT0xMSFVQOworCSAgaWYgKCEqcF9zb3VnaHQpCisJICAgIHJldHVybiAwOworCisJICBpcmJ1ZmZlciA9IChJTlBVVF9SRUNPUkQgKikgYWxsb2NhIChuYnVmZmVyICogc2l6ZW9mIChJTlBVVF9SRUNPUkQpKTsKKwkgIGJSZXQgPSBQZWVrQ29uc29sZUlucHV0IChoLCBpcmJ1ZmZlciwgbmJ1ZmZlciwgJmF2YWlsKTsKKwkgIGlmICghYlJldCB8fCBhdmFpbCA9PSAwKQorCSAgICByZXR1cm4gUE9MTEhVUDsKKworCSAgZm9yIChpID0gMDsgaSA8IGF2YWlsOyBpKyspCisJICAgIGlmIChpcmJ1ZmZlcltpXS5FdmVudFR5cGUgPT0gS0VZX0VWRU5UKQorCSAgICAgIHJldHVybiAqcF9zb3VnaHQ7CisJICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogU2NyZWVuIGJ1ZmZlci4gICovCisJICAqcF9zb3VnaHQgJj0gUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EOworCSAgcmV0dXJuICpwX3NvdWdodDsKKwl9CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0ID0gV2FpdEZvclNpbmdsZU9iamVjdCAoaCwgMCk7CisgICAgICBpZiAocmV0ID09IFdBSVRfT0JKRUNUXzApCisJcmV0dXJuICpwX3NvdWdodCAmIH4oUE9MTFBSSSB8IFBPTExSREJBTkQpOworCisgICAgICByZXR1cm4gKnBfc291Z2h0ICYgKFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCk7CisgICAgfQorfQorCisvKiBDb252ZXJ0IGZkX3NldHMgcmV0dXJuZWQgYnkgc2VsZWN0IGludG8gcmV2ZW50cyB2YWx1ZXMuICAqLworCitzdGF0aWMgaW50Cit3aW4zMl9jb21wdXRlX3JldmVudHNfc29ja2V0IChTT0NLRVQgaCwgaW50IHNvdWdodCwgbG9uZyBsTmV0d29ya0V2ZW50cykKK3sKKyAgaW50IGhhcHBlbmVkID0gMDsKKworICBpZiAoKGxOZXR3b3JrRXZlbnRzICYgKEZEX1JFQUQgfCBGRF9BQ0NFUFQgfCBGRF9DTE9TRSkpID09IEZEX0FDQ0VQVCkKKyAgICBoYXBwZW5lZCB8PSAoUE9MTElOIHwgUE9MTFJETk9STSkgJiBzb3VnaHQ7CisKKyAgZWxzZSBpZiAobE5ldHdvcmtFdmVudHMgJiAoRkRfUkVBRCB8IEZEX0FDQ0VQVCB8IEZEX0NMT1NFKSkKKyAgICB7CisgICAgICBpbnQgciwgZXJyb3I7CisKKyAgICAgIGNoYXIgZGF0YVs2NF07CisgICAgICBXU0FTZXRMYXN0RXJyb3IgKDApOworICAgICAgciA9IHJlY3YgKGgsIGRhdGEsIHNpemVvZiAoZGF0YSksIE1TR19QRUVLKTsKKyAgICAgIGVycm9yID0gV1NBR2V0TGFzdEVycm9yICgpOworICAgICAgV1NBU2V0TGFzdEVycm9yICgwKTsKKworICAgICAgaWYgKHIgPiAwIHx8IGVycm9yID09IFdTQUVOT1RDT05OKQorCWhhcHBlbmVkIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKSAmIHNvdWdodDsKKworICAgICAgLyogRGlzdGluZ3Vpc2ggaHVuZy11cCBzb2NrZXRzIGZyb20gb3RoZXIgZXJyb3JzLiAgKi8KKyAgICAgIGVsc2UgaWYgKHIgPT0gMCB8fCBlcnJvciA9PSBXU0FFU0hVVERPV04gfHwgZXJyb3IgPT0gV1NBRUNPTk5SRVNFVAorCSAgICAgICB8fCBlcnJvciA9PSBXU0FFQ09OTkFCT1JURUQgfHwgZXJyb3IgPT0gV1NBRU5FVFJFU0VUKQorCWhhcHBlbmVkIHw9IFBPTExIVVA7CisKKyAgICAgIGVsc2UKKwloYXBwZW5lZCB8PSBQT0xMRVJSOworICAgIH0KKworICBpZiAobE5ldHdvcmtFdmVudHMgJiAoRkRfV1JJVEUgfCBGRF9DT05ORUNUKSkKKyAgICBoYXBwZW5lZCB8PSAoUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSAmIHNvdWdodDsKKworICBpZiAobE5ldHdvcmtFdmVudHMgJiBGRF9PT0IpCisgICAgaGFwcGVuZWQgfD0gKFBPTExQUkkgfCBQT0xMUkRCQU5EKSAmIHNvdWdodDsKKworICByZXR1cm4gaGFwcGVuZWQ7Cit9CisKKyNlbHNlIC8qICFNaW5HVyAqLworCisvKiBDb252ZXJ0IHNlbGVjdCgyKSByZXR1cm5lZCBmZF9zZXRzIGludG8gcG9sbCgyKSByZXZlbnRzIHZhbHVlcy4gICovCitzdGF0aWMgaW50Citjb21wdXRlX3JldmVudHMgKGludCBmZCwgaW50IHNvdWdodCwgZmRfc2V0ICpyZmRzLCBmZF9zZXQgKndmZHMsIGZkX3NldCAqZWZkcykKK3sKKyAgaW50IGhhcHBlbmVkID0gMDsKKyAgaWYgKEZEX0lTU0VUIChmZCwgcmZkcykpCisgICAgeworICAgICAgaW50IHI7CisgICAgICBpbnQgc29ja2V0X2Vycm5vOworCisjIGlmIGRlZmluZWQgX19NQUNIX18gJiYgZGVmaW5lZCBfX0FQUExFX18KKyAgICAgIC8qIFRoZXJlIGlzIGEgYnVnIGluIE1hYyBPUyBYIHRoYXQgY2F1c2VzIGl0IHRvIGlnbm9yZSBNU0dfUEVFSworCSBmb3Igc29tZSBraW5kcyBvZiBkZXNjcmlwdG9ycy4gIERldGVjdCBpZiB0aGlzIGRlc2NyaXB0b3IgaXMgYQorCSBjb25uZWN0ZWQgc29ja2V0LCBhIHNlcnZlciBzb2NrZXQsIG9yIHNvbWV0aGluZyBlbHNlIHVzaW5nIGEKKwkgMC1ieXRlIHJlY3YsIGFuZCB1c2UgaW9jdGwoMikgdG8gZGV0ZWN0IFBPTExIVVAuICAqLworICAgICAgciA9IHJlY3YgKGZkLCBOVUxMLCAwLCBNU0dfUEVFSyk7CisgICAgICBzb2NrZXRfZXJybm8gPSAociA8IDApID8gZXJybm8gOiAwOworICAgICAgaWYgKHIgPT0gMCB8fCBzb2NrZXRfZXJybm8gPT0gRU5PVFNPQ0spCisJaW9jdGwgKGZkLCBGSU9OUkVBRCwgJnIpOworIyBlbHNlCisgICAgICBjaGFyIGRhdGFbNjRdOworICAgICAgciA9IHJlY3YgKGZkLCBkYXRhLCBzaXplb2YgKGRhdGEpLCBNU0dfUEVFSyk7CisgICAgICBzb2NrZXRfZXJybm8gPSAociA8IDApID8gZXJybm8gOiAwOworIyBlbmRpZgorICAgICAgaWYgKHIgPT0gMCkKKwloYXBwZW5lZCB8PSBQT0xMSFVQOworCisgICAgICAvKiBJZiB0aGUgZXZlbnQgaGFwcGVuZWQgb24gYW4gdW5jb25uZWN0ZWQgc2VydmVyIHNvY2tldCwKKwkgdGhhdCdzIGZpbmUuICovCisgICAgICBlbHNlIGlmIChyID4gMCB8fCAoIC8qIChyID09IC0xKSAmJiAqLyBzb2NrZXRfZXJybm8gPT0gRU5PVENPTk4pKQorCWhhcHBlbmVkIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKSAmIHNvdWdodDsKKworICAgICAgLyogRGlzdGluZ3Vpc2ggaHVuZy11cCBzb2NrZXRzIGZyb20gb3RoZXIgZXJyb3JzLiAgKi8KKyAgICAgIGVsc2UgaWYgKHNvY2tldF9lcnJubyA9PSBFU0hVVERPV04gfHwgc29ja2V0X2Vycm5vID09IEVDT05OUkVTRVQKKwkgICAgICAgfHwgc29ja2V0X2Vycm5vID09IEVDT05OQUJPUlRFRCB8fCBzb2NrZXRfZXJybm8gPT0gRU5FVFJFU0VUKQorCWhhcHBlbmVkIHw9IFBPTExIVVA7CisKKyAgICAgIC8qIHNvbWUgc3lzdGVtcyBjYW4ndCB1c2UgcmVjdigpIG9uIG5vbi1zb2NrZXQsIGluY2x1ZGluZyBIUCBOb25TdG9wICovCisgICAgICBlbHNlIGlmICgvKiAociA9PSAtMSkgJiYgKi8gc29ja2V0X2Vycm5vID09IEVOT1RTT0NLKQorCWhhcHBlbmVkIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKSAmIHNvdWdodDsKKworICAgICAgZWxzZQorCWhhcHBlbmVkIHw9IFBPTExFUlI7CisgICAgfQorCisgIGlmIChGRF9JU1NFVCAoZmQsIHdmZHMpKQorICAgIGhhcHBlbmVkIHw9IChQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQpICYgc291Z2h0OworCisgIGlmIChGRF9JU1NFVCAoZmQsIGVmZHMpKQorICAgIGhhcHBlbmVkIHw9IChQT0xMUFJJIHwgUE9MTFJEQkFORCkgJiBzb3VnaHQ7CisKKyAgcmV0dXJuIGhhcHBlbmVkOworfQorI2VuZGlmIC8qICFNaW5HVyAqLworCitpbnQKK3BvbGwgKHN0cnVjdCBwb2xsZmQgKnBmZCwgbmZkc190IG5mZCwgaW50IHRpbWVvdXQpCit7CisjaWZuZGVmIFdJTjMyX05BVElWRQorICBmZF9zZXQgcmZkcywgd2ZkcywgZWZkczsKKyAgc3RydWN0IHRpbWV2YWwgdHY7CisgIHN0cnVjdCB0aW1ldmFsICpwdHY7CisgIGludCBtYXhmZCwgcmM7CisgIG5mZHNfdCBpOworCisjIGlmZGVmIF9TQ19PUEVOX01BWAorICBzdGF0aWMgaW50IHNjX29wZW5fbWF4ID0gLTE7CisKKyAgaWYgKG5mZCA8IDAKKyAgICAgIHx8IChuZmQgPiBzY19vcGVuX21heAorCSAgJiYgKHNjX29wZW5fbWF4ICE9IC0xCisJICAgICAgfHwgbmZkID4gKHNjX29wZW5fbWF4ID0gc3lzY29uZiAoX1NDX09QRU5fTUFYKSkpKSkKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisjIGVsc2UgLyogIV9TQ19PUEVOX01BWCAqLworIyAgaWZkZWYgT1BFTl9NQVgKKyAgaWYgKG5mZCA8IDAgfHwgbmZkID4gT1BFTl9NQVgpCisgICAgeworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorIyAgZW5kaWYgLyogT1BFTl9NQVggLS0gZWxzZSwgbm8gY2hlY2sgaXMgbmVlZGVkICovCisjIGVuZGlmIC8qICFfU0NfT1BFTl9NQVggKi8KKworICAvKiBFRkFVTFQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQsIGJ1dCBsZXQncyBkbyBpdCBpbiB0aGUKKyAgICAgc2ltcGxlc3QgY2FzZS4gKi8KKyAgaWYgKCFwZmQgJiYgbmZkKQorICAgIHsKKyAgICAgIGVycm5vID0gRUZBVUxUOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAvKiBjb252ZXJ0IHRpbWVvdXQgbnVtYmVyIGludG8gYSB0aW1ldmFsIHN0cnVjdHVyZSAqLworICBpZiAodGltZW91dCA9PSAwKQorICAgIHsKKyAgICAgIHB0diA9ICZ0djsKKyAgICAgIHB0di0+dHZfc2VjID0gMDsKKyAgICAgIHB0di0+dHZfdXNlYyA9IDA7CisgICAgfQorICBlbHNlIGlmICh0aW1lb3V0ID4gMCkKKyAgICB7CisgICAgICBwdHYgPSAmdHY7CisgICAgICBwdHYtPnR2X3NlYyA9IHRpbWVvdXQgLyAxMDAwOworICAgICAgcHR2LT50dl91c2VjID0gKHRpbWVvdXQgJSAxMDAwKSAqIDEwMDA7CisgICAgfQorICBlbHNlIGlmICh0aW1lb3V0ID09IElORlRJTSkKKyAgICAvKiB3YWl0IGZvcmV2ZXIgKi8KKyAgICBwdHYgPSBOVUxMOworICBlbHNlCisgICAgeworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIC8qIGNyZWF0ZSBmZCBzZXRzIGFuZCBkZXRlcm1pbmUgbWF4IGZkICovCisgIG1heGZkID0gLTE7CisgIEZEX1pFUk8gKCZyZmRzKTsKKyAgRkRfWkVSTyAoJndmZHMpOworICBGRF9aRVJPICgmZWZkcyk7CisgIGZvciAoaSA9IDA7IGkgPCBuZmQ7IGkrKykKKyAgICB7CisgICAgICBpZiAocGZkW2ldLmZkIDwgMCkKKwljb250aW51ZTsKKworICAgICAgaWYgKHBmZFtpXS5ldmVudHMgJiAoUE9MTElOIHwgUE9MTFJETk9STSkpCisJRkRfU0VUIChwZmRbaV0uZmQsICZyZmRzKTsKKworICAgICAgLyogc2VlIHNlbGVjdCgyKTogInRoZSBvbmx5IGV4Y2VwdGlvbmFsIGNvbmRpdGlvbiBkZXRlY3RhYmxlCisJIGlzIG91dC1vZi1iYW5kIGRhdGEgcmVjZWl2ZWQgb24gYSBzb2NrZXQiLCBoZW5jZSB3ZSBwdXNoCisJIFBPTExXUkJBTkQgZXZlbnRzIG9udG8gd2ZkcyBpbnN0ZWFkIG9mIGVmZHMuICovCisgICAgICBpZiAocGZkW2ldLmV2ZW50cyAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQpKQorCUZEX1NFVCAocGZkW2ldLmZkLCAmd2Zkcyk7CisgICAgICBpZiAocGZkW2ldLmV2ZW50cyAmIChQT0xMUFJJIHwgUE9MTFJEQkFORCkpCisJRkRfU0VUIChwZmRbaV0uZmQsICZlZmRzKTsKKyAgICAgIGlmIChwZmRbaV0uZmQgPj0gbWF4ZmQKKwkgICYmIChwZmRbaV0uZXZlbnRzICYgKFBPTExJTiB8IFBPTExPVVQgfCBQT0xMUFJJCisJCQkgICAgICAgfCBQT0xMUkROT1JNIHwgUE9MTFJEQkFORAorCQkJICAgICAgIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQpKSkKKwl7CisJICBtYXhmZCA9IHBmZFtpXS5mZDsKKwkgIGlmIChtYXhmZCA+IEZEX1NFVFNJWkUpCisJICAgIHsKKwkgICAgICBlcnJubyA9IEVPVkVSRkxPVzsKKwkgICAgICByZXR1cm4gLTE7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qIGV4YW1pbmUgZmQgc2V0cyAqLworICByYyA9IHNlbGVjdCAobWF4ZmQgKyAxLCAmcmZkcywgJndmZHMsICZlZmRzLCBwdHYpOworICBpZiAocmMgPCAwKQorICAgIHJldHVybiByYzsKKworICAvKiBlc3RhYmxpc2ggcmVzdWx0cyAqLworICByYyA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBuZmQ7IGkrKykKKyAgICBpZiAocGZkW2ldLmZkIDwgMCkKKyAgICAgIHBmZFtpXS5yZXZlbnRzID0gMDsKKyAgICBlbHNlCisgICAgICB7CisJaW50IGhhcHBlbmVkID0gY29tcHV0ZV9yZXZlbnRzIChwZmRbaV0uZmQsIHBmZFtpXS5ldmVudHMsCisJCQkJCSZyZmRzLCAmd2ZkcywgJmVmZHMpOworCWlmIChoYXBwZW5lZCkKKwkgIHsKKwkgICAgcGZkW2ldLnJldmVudHMgPSBoYXBwZW5lZDsKKwkgICAgcmMrKzsKKwkgIH0KKyAgICAgIH0KKworICByZXR1cm4gcmM7CisjZWxzZQorICBzdGF0aWMgc3RydWN0IHRpbWV2YWwgdHYwOworICBzdGF0aWMgSEFORExFIGhFdmVudDsKKyAgV1NBTkVUV09SS0VWRU5UUyBldjsKKyAgSEFORExFIGgsIGhhbmRsZV9hcnJheVtGRF9TRVRTSVpFICsgMl07CisgIERXT1JEIHJldCwgd2FpdF90aW1lb3V0LCBuaGFuZGxlczsKKyAgZmRfc2V0IHJmZHMsIHdmZHMsIHhmZHM7CisgIEJPT0wgcG9sbF9hZ2FpbjsKKyAgTVNHIG1zZzsKKyAgaW50IHJjID0gMDsKKyAgbmZkc190IGk7CisKKyAgaWYgKG5mZCA8IDAgfHwgdGltZW91dCA8IC0xKQorICAgIHsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAoIWhFdmVudCkKKyAgICBoRXZlbnQgPSBDcmVhdGVFdmVudCAoTlVMTCwgRkFMU0UsIEZBTFNFLCBOVUxMKTsKKworcmVzdGFydDoKKyAgaGFuZGxlX2FycmF5WzBdID0gaEV2ZW50OworICBuaGFuZGxlcyA9IDE7CisgIEZEX1pFUk8gKCZyZmRzKTsKKyAgRkRfWkVSTyAoJndmZHMpOworICBGRF9aRVJPICgmeGZkcyk7CisKKyAgLyogQ2xhc3NpZnkgc29ja2V0IGhhbmRsZXMgYW5kIGNyZWF0ZSBmZCBzZXRzLiAqLworICBmb3IgKGkgPSAwOyBpIDwgbmZkOyBpKyspCisgICAgeworICAgICAgaW50IHNvdWdodCA9IHBmZFtpXS5ldmVudHM7CisgICAgICBwZmRbaV0ucmV2ZW50cyA9IDA7CisgICAgICBpZiAocGZkW2ldLmZkIDwgMCkKKwljb250aW51ZTsKKyAgICAgIGlmICghKHNvdWdodCAmIChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5ECisJCSAgICAgIHwgUE9MTFBSSSB8IFBPTExSREJBTkQpKSkKKwljb250aW51ZTsKKworICAgICAgaCA9IChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlIChwZmRbaV0uZmQpOworICAgICAgYXNzZXJ0IChoICE9IE5VTEwpOworICAgICAgaWYgKElzU29ja2V0SGFuZGxlIChoKSkKKwl7CisJICBpbnQgcmVxdWVzdGVkID0gRkRfQ0xPU0U7CisKKwkgIC8qIHNlZSBhYm92ZTsgc29ja2V0IGhhbmRsZXMgYXJlIG1hcHBlZCBvbnRvIHNlbGVjdC4gICovCisJICBpZiAoc291Z2h0ICYgKFBPTExJTiB8IFBPTExSRE5PUk0pKQorCSAgICB7CisJICAgICAgcmVxdWVzdGVkIHw9IEZEX1JFQUQgfCBGRF9BQ0NFUFQ7CisJICAgICAgRkRfU0VUICgoU09DS0VUKSBoLCAmcmZkcyk7CisJICAgIH0KKwkgIGlmIChzb3VnaHQgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSkKKwkgICAgeworCSAgICAgIHJlcXVlc3RlZCB8PSBGRF9XUklURSB8IEZEX0NPTk5FQ1Q7CisJICAgICAgRkRfU0VUICgoU09DS0VUKSBoLCAmd2Zkcyk7CisJICAgIH0KKwkgIGlmIChzb3VnaHQgJiAoUE9MTFBSSSB8IFBPTExSREJBTkQpKQorCSAgICB7CisJICAgICAgcmVxdWVzdGVkIHw9IEZEX09PQjsKKwkgICAgICBGRF9TRVQgKChTT0NLRVQpIGgsICZ4ZmRzKTsKKwkgICAgfQorCisJICBpZiAocmVxdWVzdGVkKQorCSAgICBXU0FFdmVudFNlbGVjdCAoKFNPQ0tFVCkgaCwgaEV2ZW50LCByZXF1ZXN0ZWQpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBQb2xsIG5vdy4gIElmIHdlIGdldCBhbiBldmVudCwgZG8gbm90IHBvbGwgYWdhaW4uICBBbHNvLAorCSAgICAgc2NyZWVuIGJ1ZmZlciBoYW5kbGVzIGFyZSB3YWl0YWJsZSwgYW5kIHRoZXknbGwgYmxvY2sgdW50aWwKKwkgICAgIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZS4gIHdpbjMyX2NvbXB1dGVfcmV2ZW50cyBlbGltaW5hdGVzCisJICAgICBiaXRzIGZvciB0aGUgIndyb25nIiBkaXJlY3Rpb24uICovCisJICBwZmRbaV0ucmV2ZW50cyA9IHdpbjMyX2NvbXB1dGVfcmV2ZW50cyAoaCwgJnNvdWdodCk7CisJICBpZiAoc291Z2h0KQorCSAgICBoYW5kbGVfYXJyYXlbbmhhbmRsZXMrK10gPSBoOworCSAgaWYgKHBmZFtpXS5yZXZlbnRzKQorCSAgICB0aW1lb3V0ID0gMDsKKwl9CisgICAgfQorCisgIGlmIChzZWxlY3QgKDAsICZyZmRzLCAmd2ZkcywgJnhmZHMsICZ0djApID4gMCkKKyAgICB7CisgICAgICAvKiBEbyBNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3RzIGFueXdheSB0byBkaXNwYXRjaCBtZXNzYWdlcywgYnV0CisJIG5vIG5lZWQgdG8gY2FsbCBzZWxlY3QgYWdhaW4uICAqLworICAgICAgcG9sbF9hZ2FpbiA9IEZBTFNFOworICAgICAgd2FpdF90aW1lb3V0ID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwb2xsX2FnYWluID0gVFJVRTsKKyAgICAgIGlmICh0aW1lb3V0ID09IElORlRJTSkKKwl3YWl0X3RpbWVvdXQgPSBJTkZJTklURTsKKyAgICAgIGVsc2UKKwl3YWl0X3RpbWVvdXQgPSB0aW1lb3V0OworICAgIH0KKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHJldCA9IE1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdHMgKG5oYW5kbGVzLCBoYW5kbGVfYXJyYXksIEZBTFNFLAorCQkJCSAgICAgICB3YWl0X3RpbWVvdXQsIFFTX0FMTElOUFVUKTsKKworICAgICAgaWYgKHJldCA9PSBXQUlUX09CSkVDVF8wICsgbmhhbmRsZXMpCisJeworCSAgLyogbmV3IGlucHV0IG9mIHNvbWUgb3RoZXIga2luZCAqLworCSAgQk9PTCBiUmV0OworCSAgd2hpbGUgKChiUmV0ID0gUGVla01lc3NhZ2UgKCZtc2csIE5VTEwsIDAsIDAsIFBNX1JFTU9WRSkpICE9IDApCisJICAgIHsKKwkgICAgICBUcmFuc2xhdGVNZXNzYWdlICgmbXNnKTsKKwkgICAgICBEaXNwYXRjaE1lc3NhZ2UgKCZtc2cpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCWJyZWFrOworICAgIH0KKworICBpZiAocG9sbF9hZ2FpbikKKyAgICBzZWxlY3QgKDAsICZyZmRzLCAmd2ZkcywgJnhmZHMsICZ0djApOworCisgIC8qIFBsYWNlIGEgc2VudGluZWwgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuICAqLworICBoYW5kbGVfYXJyYXlbbmhhbmRsZXNdID0gTlVMTDsKKyAgbmhhbmRsZXMgPSAxOworICBmb3IgKGkgPSAwOyBpIDwgbmZkOyBpKyspCisgICAgeworICAgICAgaW50IGhhcHBlbmVkOworCisgICAgICBpZiAocGZkW2ldLmZkIDwgMCkKKwljb250aW51ZTsKKyAgICAgIGlmICghKHBmZFtpXS5ldmVudHMgJiAoUE9MTElOIHwgUE9MTFJETk9STSB8CisJCQkgICAgIFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCkpKQorCWNvbnRpbnVlOworCisgICAgICBoID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUgKHBmZFtpXS5mZCk7CisgICAgICBpZiAoaCAhPSBoYW5kbGVfYXJyYXlbbmhhbmRsZXNdKQorCXsKKwkgIC8qIEl0J3MgYSBzb2NrZXQuICAqLworCSAgV1NBRW51bU5ldHdvcmtFdmVudHMgKChTT0NLRVQpIGgsIE5VTEwsICZldik7CisJICBXU0FFdmVudFNlbGVjdCAoKFNPQ0tFVCkgaCwgMCwgMCk7CisKKwkgIC8qIElmIHdlJ3JlIGx1Y2t5LCBXU0FFbnVtTmV0d29ya0V2ZW50cyBhbHJlYWR5IHByb3ZpZGVkIGEgd2F5CisJICAgICB0byBkaXN0aW5ndWlzaCBGRF9SRUFEIGFuZCBGRF9BQ0NFUFQ7IHRoaXMgc2F2ZXMgYSByZWN2IGxhdGVyLiAgKi8KKwkgIGlmIChGRF9JU1NFVCAoKFNPQ0tFVCkgaCwgJnJmZHMpCisJICAgICAgJiYgIShldi5sTmV0d29ya0V2ZW50cyAmIChGRF9SRUFEIHwgRkRfQUNDRVBUKSkpCisJICAgIGV2LmxOZXR3b3JrRXZlbnRzIHw9IEZEX1JFQUQgfCBGRF9BQ0NFUFQ7CisJICBpZiAoRkRfSVNTRVQgKChTT0NLRVQpIGgsICZ3ZmRzKSkKKwkgICAgZXYubE5ldHdvcmtFdmVudHMgfD0gRkRfV1JJVEUgfCBGRF9DT05ORUNUOworCSAgaWYgKEZEX0lTU0VUICgoU09DS0VUKSBoLCAmeGZkcykpCisJICAgIGV2LmxOZXR3b3JrRXZlbnRzIHw9IEZEX09PQjsKKworCSAgaGFwcGVuZWQgPSB3aW4zMl9jb21wdXRlX3JldmVudHNfc29ja2V0ICgoU09DS0VUKSBoLCBwZmRbaV0uZXZlbnRzLAorCQkJCQkJICAgZXYubE5ldHdvcmtFdmVudHMpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBOb3QgYSBzb2NrZXQuICAqLworCSAgaW50IHNvdWdodCA9IHBmZFtpXS5ldmVudHM7CisJICBoYXBwZW5lZCA9IHdpbjMyX2NvbXB1dGVfcmV2ZW50cyAoaCwgJnNvdWdodCk7CisJICBuaGFuZGxlcysrOworCX0KKworICAgICAgIGlmICgocGZkW2ldLnJldmVudHMgfD0gaGFwcGVuZWQpICE9IDApCisJcmMrKzsKKyAgICB9CisKKyAgaWYgKCFyYyAmJiB0aW1lb3V0ID09IElORlRJTSkKKyAgICB7CisgICAgICBTd2l0Y2hUb1RocmVhZCgpOworICAgICAgZ290byByZXN0YXJ0OworICAgIH0KKworICByZXR1cm4gcmM7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9wb2xsL3BvbGwuaCBiL2NvbXBhdC9wb2xsL3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2FhNTlkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3BvbGwvcG9sbC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIEhlYWRlciBmb3IgcG9sbCgyKSBlbXVsYXRpb24KKyAgIENvbnRyaWJ1dGVkIGJ5IFBhb2xvIEJvbnppbmkuCisKKyAgIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA3LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBnbnVsaWIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaWZuZGVmIF9HTF9QT0xMX0gKKyNkZWZpbmUgX0dMX1BPTExfSAorCisvKiBmYWtlIGEgcG9sbCgyKSBlbnZpcm9ubWVudCAqLworI2RlZmluZSBQT0xMSU4gICAgICAweDAwMDEgICAgICAvKiBhbnkgcmVhZGFibGUgZGF0YSBhdmFpbGFibGUgICAqLworI2RlZmluZSBQT0xMUFJJICAgICAweDAwMDIgICAgICAvKiBPT0IvVXJnZW50IHJlYWRhYmxlIGRhdGEgICAgICAqLworI2RlZmluZSBQT0xMT1VUICAgICAweDAwMDQgICAgICAvKiBmaWxlIGRlc2NyaXB0b3IgaXMgd3JpdGVhYmxlICAqLworI2RlZmluZSBQT0xMRVJSICAgICAweDAwMDggICAgICAvKiBzb21lIHBvbGwgZXJyb3Igb2NjdXJyZWQgICAgICAqLworI2RlZmluZSBQT0xMSFVQICAgICAweDAwMTAgICAgICAvKiBmaWxlIGRlc2NyaXB0b3Igd2FzICJodW5nIHVwIiAqLworI2RlZmluZSBQT0xMTlZBTCAgICAweDAwMjAgICAgICAvKiByZXF1ZXN0ZWQgZXZlbnRzICJpbnZhbGlkIiAgICAqLworI2RlZmluZSBQT0xMUkROT1JNICAweDAwNDAKKyNkZWZpbmUgUE9MTFJEQkFORCAgMHgwMDgwCisjZGVmaW5lIFBPTExXUk5PUk0gIDB4MDEwMAorI2RlZmluZSBQT0xMV1JCQU5EICAweDAyMDAKKworc3RydWN0IHBvbGxmZAoreworICBpbnQgZmQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiB3aGljaCBmaWxlIGRlc2NyaXB0b3IgdG8gcG9sbCAqLworICBzaG9ydCBldmVudHM7ICAgICAgICAgICAgICAgICAvKiBldmVudHMgd2UgYXJlIGludGVyZXN0ZWQgaW4gICAqLworICBzaG9ydCByZXZlbnRzOyAgICAgICAgICAgICAgICAvKiBldmVudHMgZm91bmQgb24gcmV0dXJuICAgICAgICAqLworfTsKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG5mZHNfdDsKKworZXh0ZXJuIGludCBwb2xsIChzdHJ1Y3QgcG9sbGZkICpwZmQsIG5mZHNfdCBuZmQsIGludCB0aW1lb3V0KTsKKworLyogRGVmaW5lIElORlRJTSBvbmx5IGlmIGRvaW5nIHNvIGNvbmZvcm1zIHRvIFBPU0lYLiAgKi8KKyNpZiAhZGVmaW5lZCAoX1BPU0lYX0NfU09VUkNFKSAmJiAhZGVmaW5lZCAoX1hPUEVOX1NPVVJDRSkKKyNkZWZpbmUgSU5GVElNICgtMSkKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMX1BPTExfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3ByZWFkLmMgYi9jb21wYXQvcHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzhjYWM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ByZWFkLmMKQEAgLTAsMCArMSwxOCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitzc2l6ZV90IGdpdF9wcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBvZmZfdCBvZmZzZXQpCit7CisgICAgICAgIG9mZl90IGN1cnJlbnRfb2Zmc2V0OworICAgICAgICBzc2l6ZV90IHJjOworCisgICAgICAgIGN1cnJlbnRfb2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKKworICAgICAgICBpZiAobHNlZWsoZmQsIG9mZnNldCwgU0VFS19TRVQpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgcmMgPSByZWFkX2luX2Z1bGwoZmQsIGJ1ZiwgY291bnQpOworCisgICAgICAgIGlmIChjdXJyZW50X29mZnNldCAhPSBsc2VlayhmZCwgY3VycmVudF9vZmZzZXQsIFNFRUtfU0VUKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9wcmVjb21wb3NlX3V0ZjguYyBiL2NvbXBhdC9wcmVjb21wb3NlX3V0ZjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2Y1OTU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29udmVydHMgZmlsZW5hbWVzIGZyb20gZGVjb21wb3NlZCB1bmljb2RlIGludG8gcHJlY29tcG9zZWQgdW5pY29kZS4KKyAqIFVzZWQgb24gTWFjT1MgWC4KKyAqLworCisjZGVmaW5lIFBSRUNPTVBPU0VfVU5JQ09ERV9DCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJwcmVjb21wb3NlX3V0ZjguaCIKKwordHlwZWRlZiBjaGFyICppY29udl9pYnA7CitzdGF0aWMgY29uc3QgY2hhciAqcmVwb19lbmNvZGluZyA9ICJVVEYtOCI7CitzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9lbmNvZGluZyA9ICJVVEYtOC1NQUMiOworCitzdGF0aWMgc2l6ZV90IGhhc19ub25fYXNjaWkoY29uc3QgY2hhciAqcywgc2l6ZV90IG1heGxlbiwgc2l6ZV90ICpzdHJsZW5fYykKK3sKKwljb25zdCB1aW50OF90ICpwdHIgPSAoY29uc3QgdWludDhfdCAqKXM7CisJc2l6ZV90IHN0cmxlbl9jaGFycyA9IDA7CisJc2l6ZV90IHJldCA9IDA7CisKKwlpZiAoIXB0ciB8fCAhKnB0cikKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKnB0ciAmJiBtYXhsZW4pIHsKKwkJaWYgKCpwdHIgJiAweDgwKQorCQkJcmV0Kys7CisJCXN0cmxlbl9jaGFycysrOworCQlwdHIrKzsKKwkJbWF4bGVuLS07CisJfQorCWlmIChzdHJsZW5fYykKKwkJKnN0cmxlbl9jID0gc3RybGVuX2NoYXJzOworCisJcmV0dXJuIHJldDsKK30KKworCit2b2lkIHByb2JlX3V0ZjhfcGF0aG5hbWVfY29tcG9zaXRpb24oY2hhciAqcGF0aCwgaW50IGxlbikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqYXVtbF9uZmMgPSAiXHhjM1x4YTQiOworCXN0YXRpYyBjb25zdCBjaGFyICphdW1sX25mZCA9ICJceDYxXHhjY1x4ODgiOworCWludCBvdXRwdXRfZmQ7CisJaWYgKHByZWNvbXBvc2VkX3VuaWNvZGUgIT0gLTEpCisJCXJldHVybjsgLyogV2UgZm91bmQgaXQgZGVmaW5lZCBpbiB0aGUgZ2xvYmFsIGNvbmZpZywgcmVzcGVjdCBpdCAqLworCXN0cmNweShwYXRoICsgbGVuLCBhdW1sX25mYyk7CisJb3V0cHV0X2ZkID0gb3BlbihwYXRoLCBPX0NSRUFUfE9fRVhDTHxPX1JEV1IsIDA2MDApOworCWlmIChvdXRwdXRfZmQgPj0gMCkgeworCQljbG9zZShvdXRwdXRfZmQpOworCQlzdHJjcHkocGF0aCArIGxlbiwgYXVtbF9uZmQpOworCQkvKiBJbmRpY2F0ZSB0byB0aGUgdXNlciwgdGhhdCB3ZSBjYW4gY29uZmlndXJlIGl0IHRvIHRydWUgKi8KKwkJaWYgKCFhY2Nlc3MocGF0aCwgUl9PSykpCisJCQlnaXRfY29uZmlnX3NldCgiY29yZS5wcmVjb21wb3NldW5pY29kZSIsICJmYWxzZSIpOworCQkvKiBUbyBiZSBiYWNrd2FyZCBjb21wYXRpYmxlLCBzZXQgcHJlY29tcG9zZWRfdW5pY29kZSB0byAwICovCisJCXByZWNvbXBvc2VkX3VuaWNvZGUgPSAwOworCQlzdHJjcHkocGF0aCArIGxlbiwgYXVtbF9uZmMpOworCQlpZiAodW5saW5rKHBhdGgpKQorCQkJZGllX2Vycm5vKF8oImZhaWxlZCB0byB1bmxpbmsgJyVzJyIpLCBwYXRoKTsKKwl9Cit9CisKKwordm9pZCBwcmVjb21wb3NlX2FyZ3YoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpID0gMDsKKwljb25zdCBjaGFyICpvbGRhcmc7CisJY2hhciAqbmV3YXJnOworCWljb252X3QgaWNfcHJlY29tcG9zZTsKKworCWlmIChwcmVjb21wb3NlZF91bmljb2RlICE9IDEpCisJCXJldHVybjsKKworCWljX3ByZWNvbXBvc2UgPSBpY29udl9vcGVuKHJlcG9fZW5jb2RpbmcsIHBhdGhfZW5jb2RpbmcpOworCWlmIChpY19wcmVjb21wb3NlID09IChpY29udl90KSAtMSkKKwkJcmV0dXJuOworCisJd2hpbGUgKGkgPCBhcmdjKSB7CisJCXNpemVfdCBuYW1lbGVuOworCQlvbGRhcmcgPSBhcmd2W2ldOworCQlpZiAoaGFzX25vbl9hc2NpaShvbGRhcmcsIChzaXplX3QpLTEsICZuYW1lbGVuKSkgeworCQkJbmV3YXJnID0gcmVlbmNvZGVfc3RyaW5nX2ljb252KG9sZGFyZywgbmFtZWxlbiwgaWNfcHJlY29tcG9zZSk7CisJCQlpZiAobmV3YXJnKQorCQkJCWFyZ3ZbaV0gPSBuZXdhcmc7CisJCX0KKwkJaSsrOworCX0KKwlpY29udl9jbG9zZShpY19wcmVjb21wb3NlKTsKK30KKworCitQUkVDX0RJUiAqcHJlY29tcG9zZV91dGY4X29wZW5kaXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwlQUkVDX0RJUiAqcHJlY19kaXIgPSB4bWFsbG9jKHNpemVvZihQUkVDX0RJUikpOworCXByZWNfZGlyLT5kaXJlbnRfbmZjID0geG1hbGxvYyhzaXplb2YoZGlyZW50X3ByZWNfcHN4KSk7CisJcHJlY19kaXItPmRpcmVudF9uZmMtPm1heF9uYW1lX2xlbiA9IHNpemVvZihwcmVjX2Rpci0+ZGlyZW50X25mYy0+ZF9uYW1lKTsKKworCXByZWNfZGlyLT5kaXJwID0gb3BlbmRpcihkaXJuYW1lKTsKKwlpZiAoIXByZWNfZGlyLT5kaXJwKSB7CisJCWZyZWUocHJlY19kaXItPmRpcmVudF9uZmMpOworCQlmcmVlKHByZWNfZGlyKTsKKwkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIHsKKwkJaW50IHJldF9lcnJubyA9IGVycm5vOworCQlwcmVjX2Rpci0+aWNfcHJlY29tcG9zZSA9IGljb252X29wZW4ocmVwb19lbmNvZGluZywgcGF0aF9lbmNvZGluZyk7CisJCS8qIGlmIGljb252X29wZW4oKSBmYWlscywgZGllKCkgaW4gcmVhZGRpcigpIGlmIG5lZWRlZCAqLworCQllcnJubyA9IHJldF9lcnJubzsKKwl9CisKKwlyZXR1cm4gcHJlY19kaXI7Cit9CisKK3N0cnVjdCBkaXJlbnRfcHJlY19wc3ggKnByZWNvbXBvc2VfdXRmOF9yZWFkZGlyKFBSRUNfRElSICpwcmVjX2RpcikKK3sKKwlzdHJ1Y3QgZGlyZW50ICpyZXM7CisJcmVzID0gcmVhZGRpcihwcmVjX2Rpci0+ZGlycCk7CisJaWYgKHJlcykgeworCQlzaXplX3QgbmFtZWxlbnogPSBzdHJsZW4ocmVzLT5kX25hbWUpICsgMTsgLyogXDAgKi8KKwkJc2l6ZV90IG5ld19tYXhsZW4gPSBuYW1lbGVuejsKKworCQlpbnQgcmV0X2Vycm5vID0gZXJybm87CisKKwkJaWYgKG5ld19tYXhsZW4gPiBwcmVjX2Rpci0+ZGlyZW50X25mYy0+bWF4X25hbWVfbGVuKSB7CisJCQlzaXplX3QgbmV3X2xlbiA9IHNpemVvZihkaXJlbnRfcHJlY19wc3gpICsgbmV3X21heGxlbiAtCisJCQkJc2l6ZW9mKHByZWNfZGlyLT5kaXJlbnRfbmZjLT5kX25hbWUpOworCisJCQlwcmVjX2Rpci0+ZGlyZW50X25mYyA9IHhyZWFsbG9jKHByZWNfZGlyLT5kaXJlbnRfbmZjLCBuZXdfbGVuKTsKKwkJCXByZWNfZGlyLT5kaXJlbnRfbmZjLT5tYXhfbmFtZV9sZW4gPSBuZXdfbWF4bGVuOworCQl9CisKKwkJcHJlY19kaXItPmRpcmVudF9uZmMtPmRfaW5vICA9IHJlcy0+ZF9pbm87CisJCXByZWNfZGlyLT5kaXJlbnRfbmZjLT5kX3R5cGUgPSByZXMtPmRfdHlwZTsKKworCQlpZiAoKHByZWNvbXBvc2VkX3VuaWNvZGUgPT0gMSkgJiYgaGFzX25vbl9hc2NpaShyZXMtPmRfbmFtZSwgKHNpemVfdCktMSwgTlVMTCkpIHsKKwkJCWlmIChwcmVjX2Rpci0+aWNfcHJlY29tcG9zZSA9PSAoaWNvbnZfdCktMSkgeworCQkJCWRpZSgiaWNvbnZfb3BlbiglcywlcykgZmFpbGVkLCBidXQgbmVlZGVkOlxuIgorCQkJCQkJIiAgICBwcmVjb21wb3NlZCB1bmljb2RlIGlzIG5vdCBzdXBwb3J0ZWQuXG4iCisJCQkJCQkiICAgIElmIHlvdSB3bmF0IHRvIHVzZSBkZWNvbXBvc2VkIHVuaWNvZGUsIHJ1blxuIgorCQkJCQkJIiAgICBcImdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZSBmYWxzZVwiXG4iLAorCQkJCQkJcmVwb19lbmNvZGluZywgcGF0aF9lbmNvZGluZyk7CisJCQl9IGVsc2UgeworCQkJCWljb252X2licAljcCA9IChpY29udl9pYnApcmVzLT5kX25hbWU7CisJCQkJc2l6ZV90IGlubGVmdCA9IG5hbWVsZW56OworCQkJCWNoYXIgKm91dHBvcyA9ICZwcmVjX2Rpci0+ZGlyZW50X25mYy0+ZF9uYW1lWzBdOworCQkJCXNpemVfdCBvdXRzeiA9IHByZWNfZGlyLT5kaXJlbnRfbmZjLT5tYXhfbmFtZV9sZW47CisJCQkJc2l6ZV90IGNudDsKKwkJCQllcnJubyA9IDA7CisJCQkJY250ID0gaWNvbnYocHJlY19kaXItPmljX3ByZWNvbXBvc2UsICZjcCwgJmlubGVmdCwgJm91dHBvcywgJm91dHN6KTsKKwkJCQlpZiAoZXJybm8gfHwgaW5sZWZ0KSB7CisJCQkJCS8qCisJCQkJCSAqIGljb252KCkgZmFpbGVkIGFuZCBlcnJubyBjb3VsZCBiZSBFMkJJRywgRUlMU0VRLCBFSU5WQUwsIEVCQURGCisJCQkJCSAqIE1hY09TIFggYXZvaWRzIGlsbGVnYWwgYnl0ZSBzZXF1ZW1jZXMuCisJCQkJCSAqIElmIHRoZXkgb2NjdXIgb24gYSBtb3VudGVkIGRyaXZlIChlLmcuIE5GUykgaXQgaXMgbm90IHdvcnRoIHRvCisJCQkJCSAqIGRpZSgpIGZvciB0aGF0LCBidXQgcmF0aGVyIGxldCB0aGUgdXNlciBzZWUgdGhlIG9yaWdpbmFsIG5hbWUKKwkJCQkJKi8KKwkJCQkJbmFtZWxlbnogPSAwOyAvKiB0cmlnZ2VyIHN0cmxjcHkgKi8KKwkJCQl9CisJCQl9CisJCX0gZWxzZQorCQkJbmFtZWxlbnogPSAwOworCisJCWlmICghbmFtZWxlbnopCisJCQlzdHJsY3B5KHByZWNfZGlyLT5kaXJlbnRfbmZjLT5kX25hbWUsIHJlcy0+ZF9uYW1lLAorCQkJCQkJCXByZWNfZGlyLT5kaXJlbnRfbmZjLT5tYXhfbmFtZV9sZW4pOworCisJCWVycm5vID0gcmV0X2Vycm5vOworCQlyZXR1cm4gcHJlY19kaXItPmRpcmVudF9uZmM7CisJfQorCXJldHVybiBOVUxMOworfQorCisKK2ludCBwcmVjb21wb3NlX3V0ZjhfY2xvc2VkaXIoUFJFQ19ESVIgKnByZWNfZGlyKQoreworCWludCByZXRfdmFsdWU7CisJaW50IHJldF9lcnJubzsKKwlyZXRfdmFsdWUgPSBjbG9zZWRpcihwcmVjX2Rpci0+ZGlycCk7CisJcmV0X2Vycm5vID0gZXJybm87CisJaWYgKHByZWNfZGlyLT5pY19wcmVjb21wb3NlICE9IChpY29udl90KS0xKQorCQlpY29udl9jbG9zZShwcmVjX2Rpci0+aWNfcHJlY29tcG9zZSk7CisJZnJlZShwcmVjX2Rpci0+ZGlyZW50X25mYyk7CisJZnJlZShwcmVjX2Rpcik7CisJZXJybm8gPSByZXRfZXJybm87CisJcmV0dXJuIHJldF92YWx1ZTsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9wcmVjb21wb3NlX3V0ZjguaCBiL2NvbXBhdC9wcmVjb21wb3NlX3V0ZjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjczNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5oCkBAIC0wLDAgKzEsNDUgQEAKKyNpZm5kZWYgUFJFQ09NUE9TRV9VTklDT0RFX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGljb252Lmg+CisKKwordHlwZWRlZiBzdHJ1Y3QgZGlyZW50X3ByZWNfcHN4IHsKKwlpbm9fdCBkX2lubzsgICAgICAgICAgICAvKiBQb3NpeCAqLworCXNpemVfdCBtYXhfbmFtZV9sZW47ICAgIC8qIFNlZSBiZWxvdyAqLworCXVuc2lnbmVkIGNoYXIgZF90eXBlOyAgIC8qIGF2YWlsYWJsZSBvbiBhbGwgc3lzdGVtcyBnaXQgcnVucyBvbiAqLworCisJLyoKKwkgKiBTZWUgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvZGlyZW50LmguaHRtbAorCSAqIE5BTUVfTUFYICsgMSBzaG91bGQgYmUgZW5vdWdoLCBidXQgc29tZSBzeXN0ZW1zIGhhdmUKKwkgKiBOQU1FX01BWD0yNTUgYW5kIHN0cmxlbihkX25hbWUpIG1heSByZXR1cm4gNTA4IG9yIDUxMAorCSAqIFNvbHV0aW9uOiBhbGxvY2F0ZSBtb3JlIHdoZW4gbmVlZGVkLCBzZWUgcHJlY29tcG9zZV91dGY4X3JlYWRkaXIoKQorCSAqLworCWNoYXIgICBkX25hbWVbTkFNRV9NQVgrMV07Cit9IGRpcmVudF9wcmVjX3BzeDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJaWNvbnZfdCBpY19wcmVjb21wb3NlOworCURJUiAqZGlycDsKKwlzdHJ1Y3QgZGlyZW50X3ByZWNfcHN4ICpkaXJlbnRfbmZjOworfSBQUkVDX0RJUjsKKwordm9pZCBwcmVjb21wb3NlX2FyZ3YoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK3ZvaWQgcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbihjaGFyICosIGludCk7CisKK1BSRUNfRElSICpwcmVjb21wb3NlX3V0Zjhfb3BlbmRpcihjb25zdCBjaGFyICpkaXJuYW1lKTsKK3N0cnVjdCBkaXJlbnRfcHJlY19wc3ggKnByZWNvbXBvc2VfdXRmOF9yZWFkZGlyKFBSRUNfRElSICpkaXJwKTsKK2ludCBwcmVjb21wb3NlX3V0ZjhfY2xvc2VkaXIoUFJFQ19ESVIgKmRpcnApOworCisjaWZuZGVmIFBSRUNPTVBPU0VfVU5JQ09ERV9DCisjZGVmaW5lIGRpcmVudCBkaXJlbnRfcHJlY19wc3gKKyNkZWZpbmUgb3BlbmRpcihuKSBwcmVjb21wb3NlX3V0Zjhfb3BlbmRpcihuKQorI2RlZmluZSByZWFkZGlyKGQpIHByZWNvbXBvc2VfdXRmOF9yZWFkZGlyKGQpCisjZGVmaW5lIGNsb3NlZGlyKGQpIHByZWNvbXBvc2VfdXRmOF9jbG9zZWRpcihkKQorI2RlZmluZSBESVIgUFJFQ19ESVIKKyNlbmRpZiAvKiBQUkVDT01QT1NFX1VOSUNPREVfQyAqLworCisjZGVmaW5lICBQUkVDT01QT1NFX1VOSUNPREVfSAorI2VuZGlmIC8qIFBSRUNPTVBPU0VfVU5JQ09ERV9IICovCmRpZmYgLS1naXQgYS9jb21wYXQvcXNvcnQuYyBiL2NvbXBhdC9xc29ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NzRkNTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcXNvcnQuYwpAQCAtMCwwICsxLDYyIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKy8qCisgKiBBIG1lcmdlIHNvcnQgaW1wbGVtZW50YXRpb24sIHNpbXBsaWZpZWQgZnJvbSB0aGUgcXNvcnQgaW1wbGVtZW50YXRpb24KKyAqIGJ5IE1pa2UgSGFlcnRlbCwgd2hpY2ggaXMgYSBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICovCisKK3N0YXRpYyB2b2lkIG1zb3J0X3dpdGhfdG1wKHZvaWQgKmIsIHNpemVfdCBuLCBzaXplX3QgcywKKwkJCSAgIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopLAorCQkJICAgY2hhciAqdCkKK3sKKwljaGFyICp0bXA7CisJY2hhciAqYjEsICpiMjsKKwlzaXplX3QgbjEsIG4yOworCisJaWYgKG4gPD0gMSkKKwkJcmV0dXJuOworCisJbjEgPSBuIC8gMjsKKwluMiA9IG4gLSBuMTsKKwliMSA9IGI7CisJYjIgPSAoY2hhciAqKWIgKyAobjEgKiBzKTsKKworCW1zb3J0X3dpdGhfdG1wKGIxLCBuMSwgcywgY21wLCB0KTsKKwltc29ydF93aXRoX3RtcChiMiwgbjIsIHMsIGNtcCwgdCk7CisKKwl0bXAgPSB0OworCisJd2hpbGUgKG4xID4gMCAmJiBuMiA+IDApIHsKKwkJaWYgKGNtcChiMSwgYjIpIDw9IDApIHsKKwkJCW1lbWNweSh0bXAsIGIxLCBzKTsKKwkJCXRtcCArPSBzOworCQkJYjEgKz0gczsKKwkJCS0tbjE7CisJCX0gZWxzZSB7CisJCQltZW1jcHkodG1wLCBiMiwgcyk7CisJCQl0bXAgKz0gczsKKwkJCWIyICs9IHM7CisJCQktLW4yOworCQl9CisJfQorCWlmIChuMSA+IDApCisJCW1lbWNweSh0bXAsIGIxLCBuMSAqIHMpOworCW1lbWNweShiLCB0LCAobiAtIG4yKSAqIHMpOworfQorCit2b2lkIGdpdF9xc29ydCh2b2lkICpiLCBzaXplX3Qgbiwgc2l6ZV90IHMsCisJICAgICAgIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCWNvbnN0IHNpemVfdCBzaXplID0gbiAqIHM7CisJY2hhciBidWZbMTAyNF07CisKKwlpZiAoc2l6ZSA8IHNpemVvZihidWYpKSB7CisJCS8qIFRoZSB0ZW1wb3JhcnkgYXJyYXkgZml0cyBvbiB0aGUgc21hbGwgb24tc3RhY2sgYnVmZmVyLiAqLworCQltc29ydF93aXRoX3RtcChiLCBuLCBzLCBjbXAsIGJ1Zik7CisJfSBlbHNlIHsKKwkJLyogSXQncyBzb21ld2hhdCBsYXJnZSwgc28gbWFsbG9jIGl0LiAgKi8KKwkJY2hhciAqdG1wID0geG1hbGxvYyhzaXplKTsKKwkJbXNvcnRfd2l0aF90bXAoYiwgbiwgcywgY21wLCB0bXApOworCQlmcmVlKHRtcCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYyBiL2NvbXBhdC9yZWdleC9yZWdjb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM5NmVkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9yZWdleC9yZWdjb21wLmMKQEAgLTAsMCArMSwzODg0IEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDcsMjAwOSwyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBJc2FtdSBIYXNlZ2F3YSA8aXNhbXVAeWFtYXRvLmlibS5jb20+LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICAgMDIxMTAtMTMwMSBVU0EuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdCByZV9jb21waWxlX2ludGVybmFsIChyZWdleF90ICpwcmVnLCBjb25zdCBjaGFyICogcGF0dGVybiwKKwkJCQkJICBzaXplX3QgbGVuZ3RoLCByZWdfc3ludGF4X3Qgc3ludGF4KTsKK3N0YXRpYyB2b2lkIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLAorCQkJCSAgICAgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKwkJCQkgICAgIGNoYXIgKmZhc3RtYXApOworc3RhdGljIHJlZ19lcnJjb2RlX3QgaW5pdF9kZmEgKHJlX2RmYV90ICpkZmEsIHNpemVfdCBwYXRfbGVuKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHZvaWQgZnJlZV9jaGFyc2V0IChyZV9jaGFyc2V0X3QgKmNzZXQpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgdm9pZCBmcmVlX3dvcmthcmVhX2NvbXBpbGUgKHJlZ2V4X3QgKnByZWcpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY3JlYXRlX2luaXRpYWxfc3RhdGUgKHJlX2RmYV90ICpkZmEpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgdm9pZCBvcHRpbWl6ZV91dGY4IChyZV9kZmFfdCAqZGZhKTsKKyNlbmRpZgorc3RhdGljIHJlZ19lcnJjb2RlX3QgYW5hbHl6ZSAocmVnZXhfdCAqcHJlZyk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBwcmVvcmRlciAoYmluX3RyZWVfdCAqcm9vdCwKKwkJCSAgICAgICByZWdfZXJyY29kZV90IChmbiAodm9pZCAqLCBiaW5fdHJlZV90ICopKSwKKwkJCSAgICAgICB2b2lkICpleHRyYSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBwb3N0b3JkZXIgKGJpbl90cmVlX3QgKnJvb3QsCisJCQkJcmVnX2VycmNvZGVfdCAoZm4gKHZvaWQgKiwgYmluX3RyZWVfdCAqKSksCisJCQkJdm9pZCAqZXh0cmEpOworc3RhdGljIHJlZ19lcnJjb2RlX3Qgb3B0aW1pemVfc3ViZXhwcyAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgbG93ZXJfc3ViZXhwcyAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworc3RhdGljIGJpbl90cmVlX3QgKmxvd2VyX3N1YmV4cCAocmVnX2VycmNvZGVfdCAqZXJyLCByZWdleF90ICpwcmVnLAorCQkJCSBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNhbGNfZmlyc3QgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNhbGNfbmV4dCAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgbGlua19uZmFfbm9kZXMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyBpbnQgZHVwbGljYXRlX25vZGUgKHJlX2RmYV90ICpkZmEsIGludCBvcmdfaWR4LCB1bnNpZ25lZCBpbnQgY29uc3RyYWludCk7CitzdGF0aWMgaW50IHNlYXJjaF9kdXBsaWNhdGVkX25vZGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBvcmdfbm9kZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY29uc3RyYWludCk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjYWxjX2VjbG9zdXJlIChyZV9kZmFfdCAqZGZhKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNhbGNfZWNsb3N1cmVfaXRlciAocmVfbm9kZV9zZXQgKm5ld19zZXQsIHJlX2RmYV90ICpkZmEsCisJCQkJCSBpbnQgbm9kZSwgaW50IHJvb3QpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2FsY19pbnZlY2xvc3VyZSAocmVfZGZhX3QgKmRmYSk7CitzdGF0aWMgaW50IGZldGNoX251bWJlciAocmVfc3RyaW5nX3QgKmlucHV0LCByZV90b2tlbl90ICp0b2tlbiwKKwkJCSByZWdfc3ludGF4X3Qgc3ludGF4KTsKK3N0YXRpYyBpbnQgcGVla190b2tlbiAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwKKwkJCXJlZ19zeW50YXhfdCBzeW50YXgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLAorCQkJICByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX3JlZ19leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsCisJCQkJICByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkgIGludCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX2JyYW5jaCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywKKwkJCQkgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJIGludCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX2V4cHJlc3Npb24gKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsCisJCQkJICAgICByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkgICAgIGludCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX3N1Yl9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsCisJCQkJICByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkgIGludCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX2R1cF9vcCAoYmluX3RyZWVfdCAqZHVwX2VsZW0sIHJlX3N0cmluZ190ICpyZWdleHAsCisJCQkJIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorCQkJCSByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKnBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLAorCQkJCSAgICAgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LAorCQkJCSAgICAgIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBwYXJzZV9icmFja2V0X2VsZW1lbnQgKGJyYWNrZXRfZWxlbV90ICplbGVtLAorCQkJCQkgICAgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKwkJCQkJICAgIHJlX3Rva2VuX3QgKnRva2VuLCBpbnQgdG9rZW5fbGVuLAorCQkJCQkgICAgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICAgIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJCSAgICBpbnQgYWNjZXB0X2h5cGhlbik7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBwYXJzZV9icmFja2V0X3N5bWJvbCAoYnJhY2tldF9lbGVtX3QgKmVsZW0sCisJCQkJCSAgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKwkJCQkJICByZV90b2tlbl90ICp0b2tlbik7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsCisJCQkJCXJlX2NoYXJzZXRfdCAqbWJjc2V0LAorCQkJCQlpbnQgKmVxdWl2X2NsYXNzX2FsbG9jLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxkX2NoYXJjbGFzcyAoUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisJCQkJICAgICAgYml0c2V0X3Qgc2Jjc2V0LAorCQkJCSAgICAgIHJlX2NoYXJzZXRfdCAqbWJjc2V0LAorCQkJCSAgICAgIGludCAqY2hhcl9jbGFzc19hbGxvYywKKwkJCQkgICAgICBjb25zdCBjaGFyICpjbGFzc19uYW1lLAorCQkJCSAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpOworI2Vsc2UgIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QgYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorCQkJCSAgICAgIGJpdHNldF90IHNiY3NldCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpjbGFzc19uYW1lLAorCQkJCSAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworc3RhdGljIGJpbl90cmVlX3QgKmJ1aWxkX2NoYXJjbGFzc19vcCAocmVfZGZhX3QgKmRmYSwKKwkJCQkgICAgICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmNsYXNzX25hbWUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmV4dHJhLAorCQkJCSAgICAgICBpbnQgbm9uX21hdGNoLCByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIGJpbl90cmVlX3QgKmNyZWF0ZV90cmVlIChyZV9kZmFfdCAqZGZhLAorCQkJCWJpbl90cmVlX3QgKmxlZnQsIGJpbl90cmVlX3QgKnJpZ2h0LAorCQkJCXJlX3Rva2VuX3R5cGVfdCB0eXBlKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpjcmVhdGVfdG9rZW5fdHJlZSAocmVfZGZhX3QgKmRmYSwKKwkJCQkgICAgICBiaW5fdHJlZV90ICpsZWZ0LCBiaW5fdHJlZV90ICpyaWdodCwKKwkJCQkgICAgICBjb25zdCByZV90b2tlbl90ICp0b2tlbik7CitzdGF0aWMgYmluX3RyZWVfdCAqZHVwbGljYXRlX3RyZWUgKGNvbnN0IGJpbl90cmVlX3QgKnNyYywgcmVfZGZhX3QgKmRmYSk7CitzdGF0aWMgdm9pZCBmcmVlX3Rva2VuIChyZV90b2tlbl90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGZyZWVfdHJlZSAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgbWFya19vcHRfc3ViZXhwICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CisMCisvKiBUaGlzIHRhYmxlIGdpdmVzIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGVhY2ggb2YgdGhlIGVycm9yIGNvZGVzIGxpc3RlZAorICAgaW4gcmVnZXguaC4gIE9idmlvdXNseSB0aGUgb3JkZXIgaGVyZSBoYXMgdG8gYmUgc2FtZSBhcyB0aGVyZS4KKyAgIFBPU0lYIGRvZXNuJ3QgcmVxdWlyZSB0aGF0IHdlIGRvIGFueXRoaW5nIGZvciBSRUdfTk9FUlJPUiwKKyAgIGJ1dCB3aHkgbm90IGJlIG5pY2U/ICAqLworCitjb25zdCBjaGFyIF9fcmVfZXJyb3JfbXNnaWRbXSBhdHRyaWJ1dGVfaGlkZGVuID0KKyAgeworI2RlZmluZSBSRUdfTk9FUlJPUl9JRFgJMAorICAgIGdldHRleHRfbm9vcCAoIlN1Y2Nlc3MiKQkvKiBSRUdfTk9FUlJPUiAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX05PTUFUQ0hfSURYIChSRUdfTk9FUlJPUl9JRFggKyBzaXplb2YgIlN1Y2Nlc3MiKQorICAgIGdldHRleHRfbm9vcCAoIk5vIG1hdGNoIikJLyogUkVHX05PTUFUQ0ggKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19CQURQQVRfSURYCShSRUdfTk9NQVRDSF9JRFggKyBzaXplb2YgIk5vIG1hdGNoIikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIpIC8qIFJFR19CQURQQVQgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FQ09MTEFURV9JRFggKFJFR19CQURQQVRfSURYICsgc2l6ZW9mICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIikgLyogUkVHX0VDT0xMQVRFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRUNUWVBFX0lEWAkoUkVHX0VDT0xMQVRFX0lEWCArIHNpemVvZiAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIikgLyogUkVHX0VDVFlQRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VFU0NBUEVfSURYCShSRUdfRUNUWVBFX0lEWCArIHNpemVvZiAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIpCisgICAgZ2V0dGV4dF9ub29wICgiVHJhaWxpbmcgYmFja3NsYXNoIikgLyogUkVHX0VFU0NBUEUgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FU1VCUkVHX0lEWAkoUkVHX0VFU0NBUEVfSURYICsgc2l6ZW9mICJUcmFpbGluZyBiYWNrc2xhc2giKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgYmFjayByZWZlcmVuY2UiKSAvKiBSRUdfRVNVQlJFRyAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VCUkFDS19JRFgJKFJFR19FU1VCUkVHX0lEWCArIHNpemVvZiAiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIpCisgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkIFsgb3IgW14iKQkvKiBSRUdfRUJSQUNLICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRVBBUkVOX0lEWAkoUkVHX0VCUkFDS19JRFggKyBzaXplb2YgIlVubWF0Y2hlZCBbIG9yIFteIikKKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgKCBvciBcXCgiKSAvKiBSRUdfRVBBUkVOICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRUJSQUNFX0lEWAkoUkVHX0VQQVJFTl9JRFggKyBzaXplb2YgIlVubWF0Y2hlZCAoIG9yIFxcKCIpCisgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkIFxceyIpIC8qIFJFR19FQlJBQ0UgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19CQURCUl9JRFgJKFJFR19FQlJBQ0VfSURYICsgc2l6ZW9mICJVbm1hdGNoZWQgXFx7IikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IikgLyogUkVHX0JBREJSICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRVJBTkdFX0lEWAkoUkVHX0JBREJSX0lEWCArIHNpemVvZiAiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCByYW5nZSBlbmQiKQkvKiBSRUdfRVJBTkdFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRVNQQUNFX0lEWAkoUkVHX0VSQU5HRV9JRFggKyBzaXplb2YgIkludmFsaWQgcmFuZ2UgZW5kIikKKyAgICBnZXR0ZXh0X25vb3AgKCJNZW1vcnkgZXhoYXVzdGVkIikgLyogUkVHX0VTUEFDRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0JBRFJQVF9JRFgJKFJFR19FU1BBQ0VfSURYICsgc2l6ZW9mICJNZW1vcnkgZXhoYXVzdGVkIikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iKSAvKiBSRUdfQkFEUlBUICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRUVORF9JRFgJKFJFR19CQURSUFRfSURYICsgc2l6ZW9mICJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iKQorICAgIGdldHRleHRfbm9vcCAoIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIikgLyogUkVHX0VFTkQgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FU0laRV9JRFgJKFJFR19FRU5EX0lEWCArIHNpemVvZiAiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iKQorICAgIGdldHRleHRfbm9vcCAoIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIikgLyogUkVHX0VTSVpFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRVJQQVJFTl9JRFgJKFJFR19FU0laRV9JRFggKyBzaXplb2YgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gYmlnIikKKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgKSBvciBcXCkiKSAvKiBSRUdfRVJQQVJFTiAqLworICB9OworCitjb25zdCBzaXplX3QgX19yZV9lcnJvcl9tc2dpZF9pZHhbXSBhdHRyaWJ1dGVfaGlkZGVuID0KKyAgeworICAgIFJFR19OT0VSUk9SX0lEWCwKKyAgICBSRUdfTk9NQVRDSF9JRFgsCisgICAgUkVHX0JBRFBBVF9JRFgsCisgICAgUkVHX0VDT0xMQVRFX0lEWCwKKyAgICBSRUdfRUNUWVBFX0lEWCwKKyAgICBSRUdfRUVTQ0FQRV9JRFgsCisgICAgUkVHX0VTVUJSRUdfSURYLAorICAgIFJFR19FQlJBQ0tfSURYLAorICAgIFJFR19FUEFSRU5fSURYLAorICAgIFJFR19FQlJBQ0VfSURYLAorICAgIFJFR19CQURCUl9JRFgsCisgICAgUkVHX0VSQU5HRV9JRFgsCisgICAgUkVHX0VTUEFDRV9JRFgsCisgICAgUkVHX0JBRFJQVF9JRFgsCisgICAgUkVHX0VFTkRfSURYLAorICAgIFJFR19FU0laRV9JRFgsCisgICAgUkVHX0VSUEFSRU5fSURYCisgIH07CisMCisvKiBFbnRyeSBwb2ludHMgZm9yIEdOVSBjb2RlLiAgKi8KKworCisjaWZkZWYgWk9TX1VTUworCisvKiBGb3IgWk9TIFVTUyB3ZSBtdXN0IGRlZmluZSBidG93YyAqLworCit3Y2hhcl90IAorYnRvd2MgKGludCBjKQoreworICAgd2NoYXJfdCB3dG1wWzJdOworICAgY2hhciB0bXBbMl07CisKKyAgIHRtcFswXSA9IGM7CisgICB0bXBbMV0gPSAwOworCisgICBtYnRvd2MgKHd0bXAsIHRtcCwgMSk7CisgICByZXR1cm4gd3RtcFswXTsKK30KKyNlbmRpZgorCisvKiByZV9jb21waWxlX3BhdHRlcm4gaXMgdGhlIEdOVSByZWd1bGFyIGV4cHJlc3Npb24gY29tcGlsZXI6IGl0CisgICBjb21waWxlcyBQQVRURVJOIChvZiBsZW5ndGggTEVOR1RIKSBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIEJVRlAuCisgICBSZXR1cm5zIDAgaWYgdGhlIHBhdHRlcm4gd2FzIHZhbGlkLCBvdGhlcndpc2UgYW4gZXJyb3Igc3RyaW5nLgorCisgICBBc3N1bWVzIHRoZSBgYWxsb2NhdGVkJyAoYW5kIHBlcmhhcHMgYGJ1ZmZlcicpIGFuZCBgdHJhbnNsYXRlJyBmaWVsZHMKKyAgIGFyZSBzZXQgaW4gQlVGUCBvbiBlbnRyeS4gICovCisKK2NvbnN0IGNoYXIgKgorcmVfY29tcGlsZV9wYXR0ZXJuIChjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkgICAgc2l6ZV90IGxlbmd0aCwKKwkJICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisKKyAgLyogQW5kIEdOVSBjb2RlIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdG8gZ2V0IHJlZ2lzdGVyIGluZm9ybWF0aW9uCisgICAgIGJ5IHBhc3NpbmcgbnVsbCBmb3IgdGhlIFJFR1MgYXJndW1lbnQgdG8gcmVfbWF0Y2gsIGV0Yy4sIG5vdCBieQorICAgICBzZXR0aW5nIG5vX3N1YiwgdW5sZXNzIFJFX05PX1NVQiBpcyBzZXQuICAqLworICBidWZwLT5ub19zdWIgPSAhIShyZV9zeW50YXhfb3B0aW9ucyAmIFJFX05PX1NVQik7CisKKyAgLyogTWF0Y2ggYW5jaG9ycyBhdCBuZXdsaW5lLiAgKi8KKyAgYnVmcC0+bmV3bGluZV9hbmNob3IgPSAxOworCisgIHJldCA9IHJlX2NvbXBpbGVfaW50ZXJuYWwgKGJ1ZnAsIHBhdHRlcm4sIGxlbmd0aCwgcmVfc3ludGF4X29wdGlvbnMpOworCisgIGlmICghcmV0KQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gZ2V0dGV4dCAoX19yZV9lcnJvcl9tc2dpZCArIF9fcmVfZXJyb3JfbXNnaWRfaWR4WyhpbnQpIHJldF0pOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX2NvbXBpbGVfcGF0dGVybiwgcmVfY29tcGlsZV9wYXR0ZXJuKQorI2VuZGlmCisKKy8qIFNldCBieSBgcmVfc2V0X3N5bnRheCcgdG8gdGhlIGN1cnJlbnQgcmVnZXhwIHN5bnRheCB0byByZWNvZ25pemUuICBDYW4KKyAgIGFsc28gYmUgYXNzaWduZWQgdG8gYXJiaXRyYXJpbHk6IGVhY2ggcGF0dGVybiBidWZmZXIgc3RvcmVzIGl0cyBvd24KKyAgIHN5bnRheCwgc28gaXQgY2FuIGJlIGNoYW5nZWQgYmV0d2VlbiByZWdleCBjb21waWxhdGlvbnMuICAqLworLyogVGhpcyBoYXMgbm8gaW5pdGlhbGl6ZXIgYmVjYXVzZSBpbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gRW1hY3MKKyAgIGJlY29tZSByZWFkLW9ubHkgYWZ0ZXIgZHVtcGluZy4gICovCityZWdfc3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CisKKworLyogU3BlY2lmeSB0aGUgcHJlY2lzZSBzeW50YXggb2YgcmVnZXhwcyBmb3IgY29tcGlsYXRpb24uICBUaGlzIHByb3ZpZGVzCisgICBmb3IgY29tcGF0aWJpbGl0eSBmb3IgdmFyaW91cyB1dGlsaXRpZXMgd2hpY2ggaGlzdG9yaWNhbGx5IGhhdmUKKyAgIGRpZmZlcmVudCwgaW5jb21wYXRpYmxlIHN5bnRheGVzLgorCisgICBUaGUgYXJndW1lbnQgU1lOVEFYIGlzIGEgYml0IG1hc2sgY29tcHJpc2VkIG9mIHRoZSB2YXJpb3VzIGJpdHMKKyAgIGRlZmluZWQgaW4gcmVnZXguaC4gIFdlIHJldHVybiB0aGUgb2xkIHN5bnRheC4gICovCisKK3JlZ19zeW50YXhfdAorcmVfc2V0X3N5bnRheCAocmVnX3N5bnRheF90IHN5bnRheCkKK3sKKyAgcmVnX3N5bnRheF90IHJldCA9IHJlX3N5bnRheF9vcHRpb25zOworCisgIHJlX3N5bnRheF9vcHRpb25zID0gc3ludGF4OworICByZXR1cm4gcmV0OworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX3NldF9zeW50YXgsIHJlX3NldF9zeW50YXgpCisjZW5kaWYKKworaW50CityZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBidWZwLT5idWZmZXI7CisgIGNoYXIgKmZhc3RtYXAgPSBidWZwLT5mYXN0bWFwOworCisgIG1lbXNldCAoZmFzdG1hcCwgJ1wwJywgc2l6ZW9mIChjaGFyKSAqIFNCQ19NQVgpOworICByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAoYnVmcCwgZGZhLT5pbml0X3N0YXRlLCBmYXN0bWFwKTsKKyAgaWYgKGRmYS0+aW5pdF9zdGF0ZSAhPSBkZmEtPmluaXRfc3RhdGVfd29yZCkKKyAgICByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAoYnVmcCwgZGZhLT5pbml0X3N0YXRlX3dvcmQsIGZhc3RtYXApOworICBpZiAoZGZhLT5pbml0X3N0YXRlICE9IGRmYS0+aW5pdF9zdGF0ZV9ubCkKKyAgICByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAoYnVmcCwgZGZhLT5pbml0X3N0YXRlX25sLCBmYXN0bWFwKTsKKyAgaWYgKGRmYS0+aW5pdF9zdGF0ZSAhPSBkZmEtPmluaXRfc3RhdGVfYmVnYnVmKQorICAgIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChidWZwLCBkZmEtPmluaXRfc3RhdGVfYmVnYnVmLCBmYXN0bWFwKTsKKyAgYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSA9IDE7CisgIHJldHVybiAwOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX2NvbXBpbGVfZmFzdG1hcCwgcmVfY29tcGlsZV9mYXN0bWFwKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkKK3JlX3NldF9mYXN0bWFwIChjaGFyICpmYXN0bWFwLCBpbnQgaWNhc2UsIGludCBjaCkKK3sKKyAgZmFzdG1hcFtjaF0gPSAxOworICBpZiAoaWNhc2UpCisgICAgZmFzdG1hcFt0b2xvd2VyIChjaCldID0gMTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciByZV9jb21waWxlX2Zhc3RtYXAuCisgICBDb21waWxlIGZhc3RtYXAgZm9yIHRoZSBpbml0aWFsX3N0YXRlIElOSVRfU1RBVEUuICAqLworCitzdGF0aWMgdm9pZAorcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisJCQkgY2hhciAqZmFzdG1hcCkKK3sKKyAgdm9sYXRpbGUgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBidWZwLT5idWZmZXI7CisgIGludCBub2RlX2NudDsKKyAgaW50IGljYXNlID0gKGRmYS0+bWJfY3VyX21heCA9PSAxICYmIChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkpOworICBmb3IgKG5vZGVfY250ID0gMDsgbm9kZV9jbnQgPCBpbml0X3N0YXRlLT5ub2Rlcy5uZWxlbTsgKytub2RlX2NudCkKKyAgICB7CisgICAgICBpbnQgbm9kZSA9IGluaXRfc3RhdGUtPm5vZGVzLmVsZW1zW25vZGVfY250XTsKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworCisgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIpCisJeworCSAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCBkZmEtPm5vZGVzW25vZGVdLm9wci5jKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgaWYgKChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkgJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHJlX21hbGxvYyAodW5zaWduZWQgY2hhciwgZGZhLT5tYl9jdXJfbWF4KSwgKnA7CisJICAgICAgd2NoYXJfdCB3YzsKKwkgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisKKwkgICAgICBwID0gYnVmOworCSAgICAgICpwKysgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5jOworCSAgICAgIHdoaWxlICgrK25vZGUgPCBkZmEtPm5vZGVzX2xlbgorCQkgICAgICYmCWRmYS0+bm9kZXNbbm9kZV0udHlwZSA9PSBDSEFSQUNURVIKKwkJICAgICAmJiBkZmEtPm5vZGVzW25vZGVdLm1iX3BhcnRpYWwpCisJCSpwKysgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5jOworCSAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKHN0YXRlKSk7CisJICAgICAgaWYgKF9fbWJydG93YyAoJndjLCAoY29uc3QgY2hhciAqKSBidWYsIHAgLSBidWYsCisJCQkgICAgICZzdGF0ZSkgPT0gcCAtIGJ1ZgorCQkgICYmIChfX3djcnRvbWIgKChjaGFyICopIGJ1ZiwgdG93bG93ZXIgKHdjKSwgJnN0YXRlKQorCQkgICAgICAhPSAoc2l6ZV90KSAtMSkpCisJCXJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCAwLCBidWZbMF0pOworCSAgICAgIHJlX2ZyZWUgKGJ1Zik7CisJICAgIH0KKyNlbmRpZgorCX0KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gU0lNUExFX0JSQUNLRVQpCisJeworCSAgaW50IGksIGNoOworCSAgZm9yIChpID0gMCwgY2ggPSAwOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisJICAgIHsKKwkgICAgICBpbnQgajsKKwkgICAgICBiaXRzZXRfd29yZF90IHcgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5zYmNzZXRbaV07CisJICAgICAgZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEX0JJVFM7ICsraiwgKytjaCkKKwkJaWYgKHcgJiAoKGJpdHNldF93b3JkX3QpIDEgPDwgaikpCisJCSAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCBjaCk7CisJICAgIH0KKwl9CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ09NUExFWF9CUkFDS0VUKQorCXsKKwkgIHJlX2NoYXJzZXRfdCAqY3NldCA9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLm1iY3NldDsKKwkgIGludCBpOworCisjIGlmZGVmIF9MSUJDCisJICAvKiBTZWUgaWYgd2UgaGF2ZSB0byB0cnkgYWxsIGJ5dGVzIHdoaWNoIHN0YXJ0IG11bHRpcGxlIGNvbGxhdGlvbgorCSAgICAgZWxlbWVudHMuCisJICAgICBlLmcuIEluIGRhX0RLLCB3ZSB3YW50IHRvIGNhdGNoICdhJyBzaW5jZSAiYWEiIGlzIGEgdmFsaWQKKwkJICBjb2xsYXRpb24gZWxlbWVudCwgYW5kIGRvbid0IGNhdGNoICdiJyBzaW5jZSAnYicgaXMKKwkJICB0aGUgb25seSBjb2xsYXRpb24gZWxlbWVudCB3aGljaCBzdGFydHMgZnJvbSAnYicgKGFuZAorCQkgIGl0IGlzIGNhdWdodCBieSBTSU1QTEVfQlJBQ0tFVCkuICAqLworCSAgICAgIGlmIChfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpICE9IDAKKwkJICAmJiAoY3NldC0+bmNvbGxfc3ltcyB8fCBjc2V0LT5ucmFuZ2VzKSkKKwkJeworCQkgIGNvbnN0IGludDMyX3QgKnRhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKwkJICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRU1CKTsKKwkJICBmb3IgKGkgPSAwOyBpIDwgU0JDX01BWDsgKytpKQorCQkgICAgaWYgKHRhYmxlW2ldIDwgMCkKKwkJICAgICAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCBpKTsKKwkJfQorIyBlbmRpZiAvKiBfTElCQyAqLworCisJICAvKiBTZWUgaWYgd2UgaGF2ZSB0byBzdGFydCB0aGUgbWF0Y2ggYXQgYWxsIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLAorCSAgICAgaS5lLiB3aGVyZSB3ZSB3b3VsZCBub3QgZmluZCBhbiBpbnZhbGlkIHNlcXVlbmNlLiAgVGhpcyBvbmx5CisJICAgICBhcHBsaWVzIHRvIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0czsgZm9yIHNpbmdsZSBieXRlIGNoYXJhY3RlcgorCSAgICAgc2V0cywgdGhlIFNJTVBMRV9CUkFDS0VUIGFnYWluIHN1ZmZpY2VzLiAgKi8KKwkgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxCisJICAgICAgJiYgKGNzZXQtPm5jaGFyX2NsYXNzZXMgfHwgY3NldC0+bm9uX21hdGNoIHx8IGNzZXQtPm5yYW5nZXMKKyMgaWZkZWYgX0xJQkMKKwkJICB8fCBjc2V0LT5uZXF1aXZfY2xhc3NlcworIyBlbmRpZiAvKiBfTElCQyAqLworCQkgKSkKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IDA7CisJICAgICAgZG8KKwkJeworCQkgIG1ic3RhdGVfdCBtYnM7CisJCSAgbWVtc2V0ICgmbWJzLCAwLCBzaXplb2YgKG1icykpOworCQkgIGlmIChfX21icnRvd2MgKE5VTEwsIChjaGFyICopICZjLCAxLCAmbWJzKSA9PSAoc2l6ZV90KSAtMikKKwkJICAgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBmYWxzZSwgKGludCkgYyk7CisJCX0KKwkgICAgICB3aGlsZSAoKytjICE9IDApOworCSAgICB9CisKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIC4uLiBFbHNlIGNhdGNoIGFsbCBieXRlcyB3aGljaCBjYW4gc3RhcnQgdGhlIG1iY2hhcnMuICAqLworCSAgICAgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5ubWJjaGFyczsgKytpKQorCQl7CisJCSAgY2hhciBidWZbMjU2XTsKKwkJICBtYnN0YXRlX3Qgc3RhdGU7CisJCSAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAoc3RhdGUpKTsKKwkJICBpZiAoX193Y3J0b21iIChidWYsIGNzZXQtPm1iY2hhcnNbaV0sICZzdGF0ZSkgIT0gKHNpemVfdCkgLTEpCisJCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsICoodW5zaWduZWQgY2hhciAqKSBidWYpOworCQkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisJCSAgICB7CisJCSAgICAgIGlmIChfX3djcnRvbWIgKGJ1ZiwgdG93bG93ZXIgKGNzZXQtPm1iY2hhcnNbaV0pLCAmc3RhdGUpCisJCQkgICE9IChzaXplX3QpIC0xKQorCQkJcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGZhbHNlLCAqKHVuc2lnbmVkIGNoYXIgKikgYnVmKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICBlbHNlIGlmICh0eXBlID09IE9QX1BFUklPRAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgICAgIHx8IHR5cGUgPT0gT1BfVVRGOF9QRVJJT0QKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCSAgICAgICB8fCB0eXBlID09IEVORF9PRl9SRSkKKwl7CisJICBtZW1zZXQgKGZhc3RtYXAsICdcMScsIHNpemVvZiAoY2hhcikgKiBTQkNfTUFYKTsKKwkgIGlmICh0eXBlID09IEVORF9PRl9SRSkKKwkgICAgYnVmcC0+Y2FuX2JlX251bGwgPSAxOworCSAgcmV0dXJuOworCX0KKyAgICB9Cit9CisMCisvKiBFbnRyeSBwb2ludCBmb3IgUE9TSVggY29kZS4gICovCisvKiByZWdjb21wIHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFzIGEgc3RyaW5nIGFuZCBjb21waWxlcyBpdC4KKworICAgUFJFRyBpcyBhIHJlZ2V4X3QgKi4gIFdlIGRvIG5vdCBleHBlY3QgYW55IGZpZWxkcyB0byBiZSBpbml0aWFsaXplZCwKKyAgIHNpbmNlIFBPU0lYIHNheXMgd2Ugc2hvdWxkbid0LiAgVGh1cywgd2Ugc2V0CisKKyAgICAgYGJ1ZmZlcicgdG8gdGhlIGNvbXBpbGVkIHBhdHRlcm47CisgICAgIGB1c2VkJyB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuOworICAgICBgc3ludGF4JyB0byBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgaWYgdGhlCisgICAgICAgUkVHX0VYVEVOREVEIGJpdCBpbiBDRkxBR1MgaXMgc2V0OyBvdGhlcndpc2UsIHRvCisgICAgICAgUkVfU1lOVEFYX1BPU0lYX0JBU0lDOworICAgICBgbmV3bGluZV9hbmNob3InIHRvIFJFR19ORVdMSU5FIGJlaW5nIHNldCBpbiBDRkxBR1M7CisgICAgIGBmYXN0bWFwJyB0byBhbiBhbGxvY2F0ZWQgc3BhY2UgZm9yIHRoZSBmYXN0bWFwOworICAgICBgZmFzdG1hcF9hY2N1cmF0ZScgdG8gemVybzsKKyAgICAgYHJlX25zdWInIHRvIHRoZSBudW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgaW4gUEFUVEVSTi4KKworICAgUEFUVEVSTiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgcGF0dGVybiBzdHJpbmcuCisKKyAgIENGTEFHUyBpcyBhIHNlcmllcyBvZiBiaXRzIHdoaWNoIGFmZmVjdCBjb21waWxhdGlvbi4KKworICAgICBJZiBSRUdfRVhURU5ERUQgaXMgc2V0LCB3ZSB1c2UgUE9TSVggZXh0ZW5kZWQgc3ludGF4OyBvdGhlcndpc2UsIHdlCisgICAgIHVzZSBQT1NJWCBiYXNpYyBzeW50YXguCisKKyAgICAgSWYgUkVHX05FV0xJTkUgaXMgc2V0LCB0aGVuIC4gYW5kIFteLi4uXSBkb24ndCBtYXRjaCBuZXdsaW5lLgorICAgICBBbHNvLCByZWdleGVjIHdpbGwgdHJ5IGEgbWF0Y2ggYmVnaW5uaW5nIGFmdGVyIGV2ZXJ5IG5ld2xpbmUuCisKKyAgICAgSWYgUkVHX0lDQVNFIGlzIHNldCwgdGhlbiB3ZSBjb25zaWRlcnMgdXBwZXItIGFuZCBsb3dlcmNhc2UKKyAgICAgdmVyc2lvbnMgb2YgbGV0dGVycyB0byBiZSBlcXVpdmFsZW50IHdoZW4gbWF0Y2hpbmcuCisKKyAgICAgSWYgUkVHX05PU1VCIGlzIHNldCwgdGhlbiB3aGVuIFBSRUcgaXMgcGFzc2VkIHRvIHJlZ2V4ZWMsIHRoYXQKKyAgICAgcm91dGluZSB3aWxsIHJlcG9ydCBvbmx5IHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgYW5kIG5vdGhpbmcgYWJvdXQgdGhlCisgICAgIHJlZ2lzdGVycy4KKworICAgSXQgcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBub256ZXJvIGlmIGl0IGRvZXNuJ3QuICAoU2VlIHJlZ2V4LmggZm9yCisgICB0aGUgcmV0dXJuIGNvZGVzIGFuZCB0aGVpciBtZWFuaW5ncy4pICAqLworCitpbnQKK3JlZ2NvbXAgKHJlZ2V4X3QgKl9fcmVzdHJpY3QgcHJlZywKKwkgY29uc3QgY2hhciAqX19yZXN0cmljdCBwYXR0ZXJuLAorCSBpbnQgY2ZsYWdzKQoreworICByZWdfZXJyY29kZV90IHJldDsKKyAgcmVnX3N5bnRheF90IHN5bnRheCA9ICgoY2ZsYWdzICYgUkVHX0VYVEVOREVEKSA/IFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRAorCQkJIDogUkVfU1lOVEFYX1BPU0lYX0JBU0lDKTsKKworICBwcmVnLT5idWZmZXIgPSBOVUxMOworICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworICBwcmVnLT51c2VkID0gMDsKKworICAvKiBUcnkgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBmYXN0bWFwLiAgKi8KKyAgcHJlZy0+ZmFzdG1hcCA9IHJlX21hbGxvYyAoY2hhciwgU0JDX01BWCk7CisgIGlmIChCRSAocHJlZy0+ZmFzdG1hcCA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKworICBzeW50YXggfD0gKGNmbGFncyAmIFJFR19JQ0FTRSkgPyBSRV9JQ0FTRSA6IDA7CisKKyAgLyogSWYgUkVHX05FV0xJTkUgaXMgc2V0LCBuZXdsaW5lcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseS4gICovCisgIGlmIChjZmxhZ3MgJiBSRUdfTkVXTElORSkKKyAgICB7IC8qIFJFR19ORVdMSU5FIGltcGxpZXMgbmVpdGhlciAuIG5vciBbXi4uLl0gbWF0Y2ggbmV3bGluZS4gICovCisgICAgICBzeW50YXggJj0gflJFX0RPVF9ORVdMSU5FOworICAgICAgc3ludGF4IHw9IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORTsKKyAgICAgIC8qIEl0IGFsc28gY2hhbmdlcyB0aGUgbWF0Y2hpbmcgYmVoYXZpb3IuICAqLworICAgICAgcHJlZy0+bmV3bGluZV9hbmNob3IgPSAxOworICAgIH0KKyAgZWxzZQorICAgIHByZWctPm5ld2xpbmVfYW5jaG9yID0gMDsKKyAgcHJlZy0+bm9fc3ViID0gISEoY2ZsYWdzICYgUkVHX05PU1VCKTsKKyAgcHJlZy0+dHJhbnNsYXRlID0gTlVMTDsKKworICByZXQgPSByZV9jb21waWxlX2ludGVybmFsIChwcmVnLCBwYXR0ZXJuLCBzdHJsZW4gKHBhdHRlcm4pLCBzeW50YXgpOworCisgIC8qIFBPU0lYIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiB1bm1hdGNoZWQgb3Blbi1ncm91cCBhbmQgYW4KKyAgICAgdW5tYXRjaGVkIGNsb3NlLWdyb3VwOiBib3RoIGFyZSBSRUdfRVBBUkVOLiAgKi8KKyAgaWYgKHJldCA9PSBSRUdfRVJQQVJFTikKKyAgICByZXQgPSBSRUdfRVBBUkVOOworCisgIC8qIFdlIGhhdmUgYWxyZWFkeSBjaGVja2VkIHByZWctPmZhc3RtYXAgIT0gTlVMTC4gICovCisgIGlmIChCRSAocmV0ID09IFJFR19OT0VSUk9SLCAxKSkKKyAgICAvKiBDb21wdXRlIHRoZSBmYXN0bWFwIG5vdywgc2luY2UgcmVnZXhlYyBjYW5ub3QgbW9kaWZ5IHRoZSBwYXR0ZXJuCisgICAgICAgYnVmZmVyLiAgVGhpcyBmdW5jdGlvbiBuZXZlciBmYWlscyBpbiB0aGlzIGltcGxlbWVudGF0aW9uLiAgKi8KKyAgICAodm9pZCkgcmVfY29tcGlsZV9mYXN0bWFwIChwcmVnKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFNvbWUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29tcGlsaW5nIHRoZSBleHByZXNzaW9uLiAgKi8KKyAgICAgIHJlX2ZyZWUgKHByZWctPmZhc3RtYXApOworICAgICAgcHJlZy0+ZmFzdG1hcCA9IE5VTEw7CisgICAgfQorCisgIHJldHVybiAoaW50KSByZXQ7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVnY29tcCwgcmVnY29tcCkKKyNlbmRpZgorCisvKiBSZXR1cm5zIGEgbWVzc2FnZSBjb3JyZXNwb25kaW5nIHRvIGFuIGVycm9yIGNvZGUsIEVSUkNPREUsIHJldHVybmVkCisgICBmcm9tIGVpdGhlciByZWdjb21wIG9yIHJlZ2V4ZWMuICAgV2UgZG9uJ3QgdXNlIFBSRUcgaGVyZS4gICovCisKK3NpemVfdAorcmVnZXJyb3IoaW50IGVycmNvZGUsIGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgcHJlZywKKwkgY2hhciAqX19yZXN0cmljdCBlcnJidWYsIHNpemVfdCBlcnJidWZfc2l6ZSkKK3sKKyAgY29uc3QgY2hhciAqbXNnOworICBzaXplX3QgbXNnX3NpemU7CisKKyAgaWYgKEJFIChlcnJjb2RlIDwgMAorCSAgfHwgZXJyY29kZSA+PSAoaW50KSAoc2l6ZW9mIChfX3JlX2Vycm9yX21zZ2lkX2lkeCkKKwkJCSAgICAgICAvIHNpemVvZiAoX19yZV9lcnJvcl9tc2dpZF9pZHhbMF0pKSwgMCkpCisgICAgLyogT25seSBlcnJvciBjb2RlcyByZXR1cm5lZCBieSB0aGUgcmVzdCBvZiB0aGUgY29kZSBzaG91bGQgYmUgcGFzc2VkCisgICAgICAgdG8gdGhpcyByb3V0aW5lLiAgSWYgd2UgYXJlIGdpdmVuIGFueXRoaW5nIGVsc2UsIG9yIGlmIG90aGVyIHJlZ2V4CisgICAgICAgY29kZSBnZW5lcmF0ZXMgYW4gaW52YWxpZCBlcnJvciBjb2RlLCB0aGVuIHRoZSBwcm9ncmFtIGhhcyBhIGJ1Zy4KKyAgICAgICBEdW1wIGNvcmUgc28gd2UgY2FuIGZpeCBpdC4gICovCisgICAgYWJvcnQgKCk7CisKKyAgbXNnID0gZ2V0dGV4dCAoX19yZV9lcnJvcl9tc2dpZCArIF9fcmVfZXJyb3JfbXNnaWRfaWR4W2VycmNvZGVdKTsKKworICBtc2dfc2l6ZSA9IHN0cmxlbiAobXNnKSArIDE7IC8qIEluY2x1ZGVzIHRoZSBudWxsLiAgKi8KKworICBpZiAoQkUgKGVycmJ1Zl9zaXplICE9IDAsIDEpKQorICAgIHsKKyAgICAgIGlmIChCRSAobXNnX3NpemUgPiBlcnJidWZfc2l6ZSwgMCkpCisJeworCSAgbWVtY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKTsKKwkgIGVycmJ1ZltlcnJidWZfc2l6ZSAtIDFdID0gMDsKKwl9CisgICAgICBlbHNlCisJbWVtY3B5IChlcnJidWYsIG1zZywgbXNnX3NpemUpOworICAgIH0KKworICByZXR1cm4gbXNnX3NpemU7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVnZXJyb3IsIHJlZ2Vycm9yKQorI2VuZGlmCisKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBUaGlzIHN0YXRpYyBhcnJheSBpcyB1c2VkIGZvciB0aGUgbWFwIHRvIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMgd2hlbgorICAgVVRGLTggaXMgdXNlZC4gIE90aGVyd2lzZSB3ZSB3b3VsZCBhbGxvY2F0ZSBtZW1vcnkganVzdCB0byBpbml0aWFsaXplCisgICBpdCB0aGUgc2FtZSBhbGwgdGhlIHRpbWUuICBVVEYtOCBpcyB0aGUgcHJlZmVycmVkIGVuY29kaW5nIHNvIHRoaXMgaXMKKyAgIGEgd29ydGh3aGlsZSBvcHRpbWl6YXRpb24uICAqLworI2lmIF9fR05VQ19fID49IDMKK3N0YXRpYyBjb25zdCBiaXRzZXRfdCB1dGY4X3NiX21hcCA9IHsKKyAgLyogU2V0IHRoZSBmaXJzdCAxMjggYml0cy4gICovCisgIFswIC4uLiAweDgwIC8gQklUU0VUX1dPUkRfQklUUyAtIDFdID0gQklUU0VUX1dPUkRfTUFYCit9OworI2Vsc2UgLyogISAoX19HTlVDX18gPj0gMykgKi8KK3N0YXRpYyBiaXRzZXRfdCB1dGY4X3NiX21hcDsKKyNlbmRpZiAvKiBfX0dOVUNfXyA+PSAzICovCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworCitzdGF0aWMgdm9pZAorZnJlZV9kZmFfY29udGVudCAocmVfZGZhX3QgKmRmYSkKK3sKKyAgaW50IGksIGo7CisKKyAgaWYgKGRmYS0+bm9kZXMpCisgICAgZm9yIChpID0gMDsgaSA8IGRmYS0+bm9kZXNfbGVuOyArK2kpCisgICAgICBmcmVlX3Rva2VuIChkZmEtPm5vZGVzICsgaSk7CisgIHJlX2ZyZWUgKGRmYS0+bmV4dHMpOworICBmb3IgKGkgPSAwOyBpIDwgZGZhLT5ub2Rlc19sZW47ICsraSkKKyAgICB7CisgICAgICBpZiAoZGZhLT5lY2xvc3VyZXMgIT0gTlVMTCkKKwlyZV9ub2RlX3NldF9mcmVlIChkZmEtPmVjbG9zdXJlcyArIGkpOworICAgICAgaWYgKGRmYS0+aW52ZWNsb3N1cmVzICE9IE5VTEwpCisJcmVfbm9kZV9zZXRfZnJlZSAoZGZhLT5pbnZlY2xvc3VyZXMgKyBpKTsKKyAgICAgIGlmIChkZmEtPmVkZXN0cyAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKGRmYS0+ZWRlc3RzICsgaSk7CisgICAgfQorICByZV9mcmVlIChkZmEtPmVkZXN0cyk7CisgIHJlX2ZyZWUgKGRmYS0+ZWNsb3N1cmVzKTsKKyAgcmVfZnJlZSAoZGZhLT5pbnZlY2xvc3VyZXMpOworICByZV9mcmVlIChkZmEtPm5vZGVzKTsKKworICBpZiAoZGZhLT5zdGF0ZV90YWJsZSkKKyAgICBmb3IgKGkgPSAwOyBpIDw9IGRmYS0+c3RhdGVfaGFzaF9tYXNrOyArK2kpCisgICAgICB7CisJc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5ICplbnRyeSA9IGRmYS0+c3RhdGVfdGFibGUgKyBpOworCWZvciAoaiA9IDA7IGogPCBlbnRyeS0+bnVtOyArK2opCisJICB7CisJICAgIHJlX2RmYXN0YXRlX3QgKnN0YXRlID0gZW50cnktPmFycmF5W2pdOworCSAgICBmcmVlX3N0YXRlIChzdGF0ZSk7CisJICB9CisJcmVfZnJlZSAoZW50cnktPmFycmF5KTsKKyAgICAgIH0KKyAgcmVfZnJlZSAoZGZhLT5zdGF0ZV90YWJsZSk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKGRmYS0+c2JfY2hhciAhPSB1dGY4X3NiX21hcCkKKyAgICByZV9mcmVlIChkZmEtPnNiX2NoYXIpOworI2VuZGlmCisgIHJlX2ZyZWUgKGRmYS0+c3ViZXhwX21hcCk7CisjaWZkZWYgREVCVUcKKyAgcmVfZnJlZSAoZGZhLT5yZV9zdHIpOworI2VuZGlmCisKKyAgcmVfZnJlZSAoZGZhKTsKK30KKworCisvKiBGcmVlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzcGFjZSB1c2VkIGJ5IFBSRUcuICAqLworCit2b2lkCityZWdmcmVlIChyZWdleF90ICpwcmVnKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgaWYgKEJFIChkZmEgIT0gTlVMTCwgMSkpCisgICAgZnJlZV9kZmFfY29udGVudCAoZGZhKTsKKyAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKyAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKworICByZV9mcmVlIChwcmVnLT5mYXN0bWFwKTsKKyAgcHJlZy0+ZmFzdG1hcCA9IE5VTEw7CisKKyAgcmVfZnJlZSAocHJlZy0+dHJhbnNsYXRlKTsKKyAgcHJlZy0+dHJhbnNsYXRlID0gTlVMTDsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZWdmcmVlLCByZWdmcmVlKQorI2VuZGlmCisMCisvKiBFbnRyeSBwb2ludHMgY29tcGF0aWJsZSB3aXRoIDQuMiBCU0QgcmVnZXggbGlicmFyeS4gIFdlIGRvbid0IGRlZmluZQorICAgdGhlbSB1bmxlc3Mgc3BlY2lmaWNhbGx5IHJlcXVlc3RlZC4gICovCisKKyNpZiBkZWZpbmVkIF9SRUdFWF9SRV9DT01QIHx8IGRlZmluZWQgX0xJQkMKKworLyogQlNEIGhhcyBvbmUgYW5kIG9ubHkgb25lIHBhdHRlcm4gYnVmZmVyLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgcmVfY29tcF9idWY7CisKK2NoYXIgKgorIyBpZmRlZiBfTElCQworLyogTWFrZSB0aGVzZSBkZWZpbml0aW9ucyB3ZWFrIGluIGxpYmMsIHNvIFBPU0lYIHByb2dyYW1zIGNhbiByZWRlZmluZQorICAgdGhlc2UgbmFtZXMgaWYgdGhleSBkb24ndCB1c2Ugb3VyIGZ1bmN0aW9ucywgYW5kIHN0aWxsIHVzZQorICAgcmVnY29tcC9yZWdleGVjIGFib3ZlIHdpdGhvdXQgbGluayBlcnJvcnMuICAqLword2Vha19mdW5jdGlvbgorIyBlbmRpZgorcmVfY29tcCAocykKKyAgICAgY29uc3QgY2hhciAqczsKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIGNoYXIgKmZhc3RtYXA7CisKKyAgaWYgKCFzKQorICAgIHsKKyAgICAgIGlmICghcmVfY29tcF9idWYuYnVmZmVyKQorCXJldHVybiBnZXR0ZXh0ICgiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgaWYgKHJlX2NvbXBfYnVmLmJ1ZmZlcikKKyAgICB7CisgICAgICBmYXN0bWFwID0gcmVfY29tcF9idWYuZmFzdG1hcDsKKyAgICAgIHJlX2NvbXBfYnVmLmZhc3RtYXAgPSBOVUxMOworICAgICAgX19yZWdmcmVlICgmcmVfY29tcF9idWYpOworICAgICAgbWVtc2V0ICgmcmVfY29tcF9idWYsICdcMCcsIHNpemVvZiAocmVfY29tcF9idWYpKTsKKyAgICAgIHJlX2NvbXBfYnVmLmZhc3RtYXAgPSBmYXN0bWFwOworICAgIH0KKworICBpZiAocmVfY29tcF9idWYuZmFzdG1hcCA9PSBOVUxMKQorICAgIHsKKyAgICAgIHJlX2NvbXBfYnVmLmZhc3RtYXAgPSAoY2hhciAqKSBtYWxsb2MgKFNCQ19NQVgpOworICAgICAgaWYgKHJlX2NvbXBfYnVmLmZhc3RtYXAgPT0gTlVMTCkKKwlyZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAoX19yZV9lcnJvcl9tc2dpZAorCQkJCSArIF9fcmVfZXJyb3JfbXNnaWRfaWR4WyhpbnQpIFJFR19FU1BBQ0VdKTsKKyAgICB9CisKKyAgLyogU2luY2UgYHJlX2V4ZWMnIGFsd2F5cyBwYXNzZXMgTlVMTCBmb3IgdGhlIGByZWdzJyBhcmd1bWVudCwgd2UKKyAgICAgZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZlciBmaWVsZHMgd2hpY2ggYWZmZWN0IGl0LiAgKi8KKworICAvKiBNYXRjaCBhbmNob3JzIGF0IG5ld2xpbmVzLiAgKi8KKyAgcmVfY29tcF9idWYubmV3bGluZV9hbmNob3IgPSAxOworCisgIHJldCA9IHJlX2NvbXBpbGVfaW50ZXJuYWwgKCZyZV9jb21wX2J1Ziwgcywgc3RybGVuIChzKSwgcmVfc3ludGF4X29wdGlvbnMpOworCisgIGlmICghcmV0KQorICAgIHJldHVybiBOVUxMOworCisgIC8qIFllcywgd2UncmUgZGlzY2FyZGluZyBgY29uc3QnIGhlcmUgaWYgIUhBVkVfTElCSU5UTC4gICovCisgIHJldHVybiAoY2hhciAqKSBnZXR0ZXh0IChfX3JlX2Vycm9yX21zZ2lkICsgX19yZV9lcnJvcl9tc2dpZF9pZHhbKGludCkgcmV0XSk7Cit9CisKKyNpZmRlZiBfTElCQworbGliY19mcmVlcmVzX2ZuIChmcmVlX21lbSkKK3sKKyAgX19yZWdmcmVlICgmcmVfY29tcF9idWYpOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfUkVHRVhfUkVfQ09NUCAqLworDAorLyogSW50ZXJuYWwgZW50cnkgcG9pbnQuCisgICBDb21waWxlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gUEFUVEVSTiwgd2hvc2UgbGVuZ3RoIGlzIExFTkdUSC4KKyAgIFNZTlRBWCBpbmRpY2F0ZSByZWd1bGFyIGV4cHJlc3Npb24ncyBzeW50YXguICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcmVfY29tcGlsZV9pbnRlcm5hbCAocmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqIHBhdHRlcm4sIHNpemVfdCBsZW5ndGgsCisJCSAgICAgcmVnX3N5bnRheF90IHN5bnRheCkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKyAgcmVfZGZhX3QgKmRmYTsKKyAgcmVfc3RyaW5nX3QgcmVnZXhwOworCisgIC8qIEluaXRpYWxpemUgdGhlIHBhdHRlcm4gYnVmZmVyLiAgKi8KKyAgcHJlZy0+ZmFzdG1hcF9hY2N1cmF0ZSA9IDA7CisgIHByZWctPnN5bnRheCA9IHN5bnRheDsKKyAgcHJlZy0+bm90X2JvbCA9IHByZWctPm5vdF9lb2wgPSAwOworICBwcmVnLT51c2VkID0gMDsKKyAgcHJlZy0+cmVfbnN1YiA9IDA7CisgIHByZWctPmNhbl9iZV9udWxsID0gMDsKKyAgcHJlZy0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1VOQUxMT0NBVEVEOworCisgIC8qIEluaXRpYWxpemUgdGhlIGRmYS4gICovCisgIGRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGlmIChCRSAocHJlZy0+YWxsb2NhdGVkIDwgc2l6ZW9mIChyZV9kZmFfdCksIDApKQorICAgIHsKKyAgICAgIC8qIElmIHplcm8gYWxsb2NhdGVkLCBidXQgYnVmZmVyIGlzIG5vbi1udWxsLCB0cnkgdG8gcmVhbGxvYworCSBlbm91Z2ggc3BhY2UuICBUaGlzIGxvc2VzIGlmIGJ1ZmZlcidzIGFkZHJlc3MgaXMgYm9ndXMsIGJ1dAorCSB0aGF0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuICBJZiAtPmJ1ZmZlciBpcyBOVUxMIHRoaXMKKwkgaXMgYSBzaW1wbGUgYWxsb2NhdGlvbi4gICovCisgICAgICBkZmEgPSByZV9yZWFsbG9jIChwcmVnLT5idWZmZXIsIHJlX2RmYV90LCAxKTsKKyAgICAgIGlmIChkZmEgPT0gTlVMTCkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHByZWctPmFsbG9jYXRlZCA9IHNpemVvZiAocmVfZGZhX3QpOworICAgICAgcHJlZy0+YnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgZGZhOworICAgIH0KKyAgcHJlZy0+dXNlZCA9IHNpemVvZiAocmVfZGZhX3QpOworCisgIGVyciA9IGluaXRfZGZhIChkZmEsIGxlbmd0aCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICBmcmVlX2RmYV9jb250ZW50IChkZmEpOworICAgICAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKyAgICAgIHByZWctPmFsbG9jYXRlZCA9IDA7CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKyNpZmRlZiBERUJVRworICAvKiBOb3RlOiBsZW5ndGgrMSB3aWxsIG5vdCBvdmVyZmxvdyBzaW5jZSBpdCBpcyBjaGVja2VkIGluIGluaXRfZGZhLiAgKi8KKyAgZGZhLT5yZV9zdHIgPSByZV9tYWxsb2MgKGNoYXIsIGxlbmd0aCArIDEpOworICBzdHJuY3B5IChkZmEtPnJlX3N0ciwgcGF0dGVybiwgbGVuZ3RoICsgMSk7CisjZW5kaWYKKworICBfX2xpYmNfbG9ja19pbml0IChkZmEtPmxvY2spOworCisgIGVyciA9IHJlX3N0cmluZ19jb25zdHJ1Y3QgKCZyZWdleHAsIHBhdHRlcm4sIGxlbmd0aCwgcHJlZy0+dHJhbnNsYXRlLAorCQkJICAgICBzeW50YXggJiBSRV9JQ0FTRSwgZGZhKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICByZV9jb21waWxlX2ludGVybmFsX2ZyZWVfcmV0dXJuOgorICAgICAgZnJlZV93b3JrYXJlYV9jb21waWxlIChwcmVnKTsKKyAgICAgIHJlX3N0cmluZ19kZXN0cnVjdCAoJnJlZ2V4cCk7CisgICAgICBmcmVlX2RmYV9jb250ZW50IChkZmEpOworICAgICAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKyAgICAgIHByZWctPmFsbG9jYXRlZCA9IDA7CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAvKiBQYXJzZSB0aGUgcmVndWxhciBleHByZXNzaW9uLCBhbmQgYnVpbGQgYSBzdHJ1Y3R1cmUgdHJlZS4gICovCisgIHByZWctPnJlX25zdWIgPSAwOworICBkZmEtPnN0cl90cmVlID0gcGFyc2UgKCZyZWdleHAsIHByZWcsIHN5bnRheCwgJmVycik7CisgIGlmIChCRSAoZGZhLT5zdHJfdHJlZSA9PSBOVUxMLCAwKSkKKyAgICBnb3RvIHJlX2NvbXBpbGVfaW50ZXJuYWxfZnJlZV9yZXR1cm47CisKKyAgLyogQW5hbHl6ZSB0aGUgdHJlZSBhbmQgY3JlYXRlIHRoZSBuZmEuICAqLworICBlcnIgPSBhbmFseXplIChwcmVnKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIGdvdG8gcmVfY29tcGlsZV9pbnRlcm5hbF9mcmVlX3JldHVybjsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIElmIHBvc3NpYmxlLCBkbyBzZWFyY2hpbmcgaW4gc2luZ2xlIGJ5dGUgZW5jb2RpbmcgdG8gc3BlZWQgdGhpbmdzIHVwLiAgKi8KKyAgaWYgKGRmYS0+aXNfdXRmOCAmJiAhKHN5bnRheCAmIFJFX0lDQVNFKSAmJiBwcmVnLT50cmFuc2xhdGUgPT0gTlVMTCkKKyAgICBvcHRpbWl6ZV91dGY4IChkZmEpOworI2VuZGlmCisKKyAgLyogVGhlbiBjcmVhdGUgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGRmYS4gICovCisgIGVyciA9IGNyZWF0ZV9pbml0aWFsX3N0YXRlIChkZmEpOworCisgIC8qIFJlbGVhc2Ugd29yayBhcmVhcy4gICovCisgIGZyZWVfd29ya2FyZWFfY29tcGlsZSAocHJlZyk7CisgIHJlX3N0cmluZ19kZXN0cnVjdCAoJnJlZ2V4cCk7CisKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICAgIGZyZWVfZGZhX2NvbnRlbnQgKGRmYSk7CisgICAgICBwcmVnLT5idWZmZXIgPSBOVUxMOworICAgICAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworLyogSW5pdGlhbGl6ZSBERkEuICBXZSB1c2UgdGhlIGxlbmd0aCBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uIFBBVF9MRU4KKyAgIGFzIHRoZSBpbml0aWFsIGxlbmd0aCBvZiBzb21lIGFycmF5cy4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90Citpbml0X2RmYSAocmVfZGZhX3QgKmRmYSwgc2l6ZV90IHBhdF9sZW4pCit7CisgIHVuc2lnbmVkIGludCB0YWJsZV9zaXplOworI2lmbmRlZiBfTElCQworICBjaGFyICpjb2Rlc2V0X25hbWU7CisjZW5kaWYKKworICBtZW1zZXQgKGRmYSwgJ1wwJywgc2l6ZW9mIChyZV9kZmFfdCkpOworCisgIC8qIEZvcmNlIGFsbG9jYXRpb24gb2Ygc3RyX3RyZWVfc3RvcmFnZSB0aGUgZmlyc3QgdGltZS4gICovCisgIGRmYS0+c3RyX3RyZWVfc3RvcmFnZV9pZHggPSBCSU5fVFJFRV9TVE9SQUdFX1NJWkU7CisKKyAgLyogQXZvaWQgb3ZlcmZsb3dzLiAgKi8KKyAgaWYgKHBhdF9sZW4gPT0gU0laRV9NQVgpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgZGZhLT5ub2Rlc19hbGxvYyA9IHBhdF9sZW4gKyAxOworICBkZmEtPm5vZGVzID0gcmVfbWFsbG9jIChyZV90b2tlbl90LCBkZmEtPm5vZGVzX2FsbG9jKTsKKworICAvKiAgdGFibGVfc2l6ZSA9IDIgXiBjZWlsKGxvZyBwYXRfbGVuKSAqLworICBmb3IgKHRhYmxlX3NpemUgPSAxOyA7IHRhYmxlX3NpemUgPDw9IDEpCisgICAgaWYgKHRhYmxlX3NpemUgPiBwYXRfbGVuKQorICAgICAgYnJlYWs7CisKKyAgZGZhLT5zdGF0ZV90YWJsZSA9IGNhbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkpLCB0YWJsZV9zaXplKTsKKyAgZGZhLT5zdGF0ZV9oYXNoX21hc2sgPSB0YWJsZV9zaXplIC0gMTsKKworICBkZmEtPm1iX2N1cl9tYXggPSBNQl9DVVJfTUFYOworI2lmZGVmIF9MSUJDCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPT0gNgorICAgICAgJiYgc3RyY21wIChfTkxfQ1VSUkVOVCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9DT0RFU0VUX05BTUUpLCAiVVRGLTgiKSA9PSAwKQorICAgIGRmYS0+aXNfdXRmOCA9IDE7CisgIGRmYS0+bWFwX25vdGFzY2lpID0gKF9OTF9DVVJSRU5UX1dPUkQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfTUFQX1RPX05PTkFTQ0lJKQorCQkgICAgICAgIT0gMCk7CisjZWxzZQorIyBpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAgY29kZXNldF9uYW1lID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworIyBlbHNlCisgIGNvZGVzZXRfbmFtZSA9IGdldGVudiAoIkxDX0FMTCIpOworICBpZiAoY29kZXNldF9uYW1lID09IE5VTEwgfHwgY29kZXNldF9uYW1lWzBdID09ICdcMCcpCisgICAgY29kZXNldF9uYW1lID0gZ2V0ZW52ICgiTENfQ1RZUEUiKTsKKyAgaWYgKGNvZGVzZXRfbmFtZSA9PSBOVUxMIHx8IGNvZGVzZXRfbmFtZVswXSA9PSAnXDAnKQorICAgIGNvZGVzZXRfbmFtZSA9IGdldGVudiAoIkxBTkciKTsKKyAgaWYgKGNvZGVzZXRfbmFtZSA9PSBOVUxMKQorICAgIGNvZGVzZXRfbmFtZSA9ICIiOworICBlbHNlIGlmIChzdHJjaHIgKGNvZGVzZXRfbmFtZSwgJy4nKSAhPSAgTlVMTCkKKyAgICBjb2Rlc2V0X25hbWUgPSBzdHJjaHIgKGNvZGVzZXRfbmFtZSwgJy4nKSArIDE7CisjIGVuZGlmCisKKyAgLyogc3RyY2FzZWNtcCBpc24ndCBhIHN0YW5kYXJkIGludGVyZmFjZS4gYnJ1dGUgZm9yY2UgY2hlY2sgKi8KKyNpZiAwCisgIGlmIChzdHJjYXNlY21wIChjb2Rlc2V0X25hbWUsICJVVEYtOCIpID09IDAKKyAgICAgIHx8IHN0cmNhc2VjbXAgKGNvZGVzZXRfbmFtZSwgIlVURjgiKSA9PSAwKQorICAgIGRmYS0+aXNfdXRmOCA9IDE7CisjZWxzZQorICBpZiAoICAgKGNvZGVzZXRfbmFtZVswXSA9PSAnVScgfHwgY29kZXNldF9uYW1lWzBdID09ICd1JykKKyAgICAgICYmIChjb2Rlc2V0X25hbWVbMV0gPT0gJ1QnIHx8IGNvZGVzZXRfbmFtZVsxXSA9PSAndCcpCisgICAgICAmJiAoY29kZXNldF9uYW1lWzJdID09ICdGJyB8fCBjb2Rlc2V0X25hbWVbMl0gPT0gJ2YnKQorICAgICAgJiYgKGNvZGVzZXRfbmFtZVszXSA9PSAnLScKKyAgICAgICAgICA/IGNvZGVzZXRfbmFtZVs0XSA9PSAnOCcgJiYgY29kZXNldF9uYW1lWzVdID09ICdcMCcKKyAgICAgICAgICA6IGNvZGVzZXRfbmFtZVszXSA9PSAnOCcgJiYgY29kZXNldF9uYW1lWzRdID09ICdcMCcpKQorICAgIGRmYS0+aXNfdXRmOCA9IDE7CisjZW5kaWYKKworICAvKiBXZSBjaGVjayBleGhhdXN0aXZlbHkgaW4gdGhlIGxvb3AgYmVsb3cgaWYgdGhpcyBjaGFyc2V0IGlzIGEKKyAgICAgc3VwZXJzZXQgb2YgQVNDSUkuICAqLworICBkZmEtPm1hcF9ub3Rhc2NpaSA9IDA7CisjZW5kaWYKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIGlmIChkZmEtPmlzX3V0ZjgpCisgICAgICAgIHsKKyNpZiAhZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCAzCisJICBzdGF0aWMgc2hvcnQgdXRmOF9zYl9tYXBfaW5pdGVkID0gMDsKKworCSAgaWYgKCEgdXRmOF9zYl9tYXBfaW5pdGVkKQorCSAgICB7CisJCWludCBpOworCisJICAJdXRmOF9zYl9tYXBfaW5pdGVkID0gMDsKKwkJZm9yIChpID0gMDsgaSA8PSAweDgwIC8gQklUU0VUX1dPUkRfQklUUyAtIDE7IGkrKykKKwkJICB1dGY4X3NiX21hcFtpXSA9IEJJVFNFVF9XT1JEX01BWDsKKwkgICAgfQorI2VuZGlmCisJICBkZmEtPnNiX2NoYXIgPSAocmVfYml0c2V0X3B0cl90KSB1dGY4X3NiX21hcDsKKwl9CisgICAgICBlbHNlCisJeworCSAgaW50IGksIGosIGNoOworCisJICBkZmEtPnNiX2NoYXIgPSAocmVfYml0c2V0X3B0cl90KSBjYWxsb2MgKHNpemVvZiAoYml0c2V0X3QpLCAxKTsKKwkgIGlmIChCRSAoZGZhLT5zYl9jaGFyID09IE5VTEwsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKworCSAgLyogU2V0IHRoZSBiaXRzIGNvcnJlc3BvbmRpbmcgdG8gc2luZ2xlIGJ5dGUgY2hhcnMuICAqLworCSAgZm9yIChpID0gMCwgY2ggPSAwOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisJICAgIGZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRF9CSVRTOyArK2osICsrY2gpCisJICAgICAgeworCQl3aW50X3Qgd2NoID0gX19idG93YyAoY2gpOworCQlpZiAod2NoICE9IFdFT0YpCisJCSAgZGZhLT5zYl9jaGFyW2ldIHw9IChiaXRzZXRfd29yZF90KSAxIDw8IGo7CisjIGlmbmRlZiBfTElCQworCQlpZiAoaXNhc2NpaSAoY2gpICYmIHdjaCAhPSBjaCkKKwkJICBkZmEtPm1hcF9ub3Rhc2NpaSA9IDE7CisjIGVuZGlmCisJICAgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICBpZiAoQkUgKGRmYS0+bm9kZXMgPT0gTlVMTCB8fCBkZmEtPnN0YXRlX3RhYmxlID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEluaXRpYWxpemUgV09SRF9DSEFSIHRhYmxlLCB3aGljaCBpbmRpY2F0ZSB3aGljaCBjaGFyYWN0ZXIgaXMKKyAgICJ3b3JkIi4gIEluIHRoaXMgY2FzZSAid29yZCIgbWVhbnMgdGhhdCBpdCBpcyB0aGUgd29yZCBjb25zdHJ1Y3Rpb24KKyAgIGNoYXJhY3RlciB1c2VkIGJ5IHNvbWUgb3BlcmF0b3JzIGxpa2UgIlw8IiwgIlw+IiwgZXRjLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitpbml0X3dvcmRfY2hhciAocmVfZGZhX3QgKmRmYSkKK3sKKyAgaW50IGksIGosIGNoOworICBkZmEtPndvcmRfb3BzX3VzZWQgPSAxOworICBmb3IgKGkgPSAwLCBjaCA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKyAgICBmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRfQklUUzsgKytqLCArK2NoKQorICAgICAgaWYgKGlzYWxudW0gKGNoKSB8fCBjaCA9PSAnXycpCisJZGZhLT53b3JkX2NoYXJbaV0gfD0gKGJpdHNldF93b3JkX3QpIDEgPDwgajsKK30KKworLyogRnJlZSB0aGUgd29yayBhcmVhIHdoaWNoIGFyZSBvbmx5IHVzZWQgd2hpbGUgY29tcGlsaW5nLiAgKi8KKworc3RhdGljIHZvaWQKK2ZyZWVfd29ya2FyZWFfY29tcGlsZSAocmVnZXhfdCAqcHJlZykKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3N0b3JhZ2VfdCAqc3RvcmFnZSwgKm5leHQ7CisgIGZvciAoc3RvcmFnZSA9IGRmYS0+c3RyX3RyZWVfc3RvcmFnZTsgc3RvcmFnZTsgc3RvcmFnZSA9IG5leHQpCisgICAgeworICAgICAgbmV4dCA9IHN0b3JhZ2UtPm5leHQ7CisgICAgICByZV9mcmVlIChzdG9yYWdlKTsKKyAgICB9CisgIGRmYS0+c3RyX3RyZWVfc3RvcmFnZSA9IE5VTEw7CisgIGRmYS0+c3RyX3RyZWVfc3RvcmFnZV9pZHggPSBCSU5fVFJFRV9TVE9SQUdFX1NJWkU7CisgIGRmYS0+c3RyX3RyZWUgPSBOVUxMOworICByZV9mcmVlIChkZmEtPm9yZ19pbmRpY2VzKTsKKyAgZGZhLT5vcmdfaW5kaWNlcyA9IE5VTEw7Cit9CisKKy8qIENyZWF0ZSBpbml0aWFsIHN0YXRlcyBmb3IgYWxsIGNvbnRleHRzLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NyZWF0ZV9pbml0aWFsX3N0YXRlIChyZV9kZmFfdCAqZGZhKQoreworICBpbnQgZmlyc3QsIGk7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICByZV9ub2RlX3NldCBpbml0X25vZGVzOworCisgIC8qIEluaXRpYWwgc3RhdGVzIGhhdmUgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiB0aGUgbm9kZSB3aGljaCBpcworICAgICB0aGUgZmlyc3Qgbm9kZSBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uLiAgKi8KKyAgZmlyc3QgPSBkZmEtPnN0cl90cmVlLT5maXJzdC0+bm9kZV9pZHg7CisgIGRmYS0+aW5pdF9ub2RlID0gZmlyc3Q7CisgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJmluaXRfbm9kZXMsIGRmYS0+ZWNsb3N1cmVzICsgZmlyc3QpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKworICAvKiBUaGUgYmFjay1yZWZlcmVuY2VzIHdoaWNoIGFyZSBpbiBpbml0aWFsIHN0YXRlcyBjYW4gZXBzaWxvbiB0cmFuc2l0LAorICAgICBzaW5jZSBpbiB0aGlzIGNhc2UgYWxsIG9mIHRoZSBzdWJleHByZXNzaW9ucyBjYW4gYmUgbnVsbC4KKyAgICAgVGhlbiB3ZSBhZGQgZXBzaWxvbiBjbG9zdXJlcyBvZiB0aGUgbm9kZXMgd2hpY2ggYXJlIHRoZSBuZXh0IG5vZGVzIG9mCisgICAgIHRoZSBiYWNrLXJlZmVyZW5jZXMuICAqLworICBpZiAoZGZhLT5uYmFja3JlZiA+IDApCisgICAgZm9yIChpID0gMDsgaSA8IGluaXRfbm9kZXMubmVsZW07ICsraSkKKyAgICAgIHsKKwlpbnQgbm9kZV9pZHggPSBpbml0X25vZGVzLmVsZW1zW2ldOworCXJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tub2RlX2lkeF0udHlwZTsKKworCWludCBjbGV4cF9pZHg7CisJaWYgKHR5cGUgIT0gT1BfQkFDS19SRUYpCisJICBjb250aW51ZTsKKwlmb3IgKGNsZXhwX2lkeCA9IDA7IGNsZXhwX2lkeCA8IGluaXRfbm9kZXMubmVsZW07ICsrY2xleHBfaWR4KQorCSAgeworCSAgICByZV90b2tlbl90ICpjbGV4cF9ub2RlOworCSAgICBjbGV4cF9ub2RlID0gZGZhLT5ub2RlcyArIGluaXRfbm9kZXMuZWxlbXNbY2xleHBfaWR4XTsKKwkgICAgaWYgKGNsZXhwX25vZGUtPnR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQCisJCSYmIGNsZXhwX25vZGUtPm9wci5pZHggPT0gZGZhLT5ub2Rlc1tub2RlX2lkeF0ub3ByLmlkeCkKKwkgICAgICBicmVhazsKKwkgIH0KKwlpZiAoY2xleHBfaWR4ID09IGluaXRfbm9kZXMubmVsZW0pCisJICBjb250aW51ZTsKKworCWlmICh0eXBlID09IE9QX0JBQ0tfUkVGKQorCSAgeworCSAgICBpbnQgZGVzdF9pZHggPSBkZmEtPmVkZXN0c1tub2RlX2lkeF0uZWxlbXNbMF07CisJICAgIGlmICghcmVfbm9kZV9zZXRfY29udGFpbnMgKCZpbml0X25vZGVzLCBkZXN0X2lkeCkpCisJICAgICAgeworCQlyZWdfZXJyY29kZV90IGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmaW5pdF9ub2RlcywKKwkJCQkJCSAgICAgICBkZmEtPmVjbG9zdXJlcworCQkJCQkJICAgICAgICsgZGVzdF9pZHgpOworCQlpZiAoZXJyICE9IFJFR19OT0VSUk9SKQorCQkgIHJldHVybiBlcnI7CisJCWkgPSAwOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAvKiBJdCBtdXN0IGJlIHRoZSBmaXJzdCB0aW1lIHRvIGludm9rZSBhY3F1aXJlX3N0YXRlLiAgKi8KKyAgZGZhLT5pbml0X3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZpbml0X25vZGVzLCAwKTsKKyAgLyogV2UgZG9uJ3QgY2hlY2sgRVJSIGhlcmUsIHNpbmNlIHRoZSBpbml0aWFsIHN0YXRlIG11c3Qgbm90IGJlIE5VTEwuICAqLworICBpZiAoQkUgKGRmYS0+aW5pdF9zdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gZXJyOworICBpZiAoZGZhLT5pbml0X3N0YXRlLT5oYXNfY29uc3RyYWludCkKKyAgICB7CisgICAgICBkZmEtPmluaXRfc3RhdGVfd29yZCA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmaW5pdF9ub2RlcywKKwkJCQkJCSAgICAgICBDT05URVhUX1dPUkQpOworICAgICAgZGZhLT5pbml0X3N0YXRlX25sID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZpbml0X25vZGVzLAorCQkJCQkJICAgICBDT05URVhUX05FV0xJTkUpOworICAgICAgZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZiA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLAorCQkJCQkJCSAmaW5pdF9ub2RlcywKKwkJCQkJCQkgQ09OVEVYVF9ORVdMSU5FCisJCQkJCQkJIHwgQ09OVEVYVF9CRUdCVUYpOworICAgICAgaWYgKEJFIChkZmEtPmluaXRfc3RhdGVfd29yZCA9PSBOVUxMIHx8IGRmYS0+aW5pdF9zdGF0ZV9ubCA9PSBOVUxMCisJICAgICAgfHwgZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZiA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKyAgZWxzZQorICAgIGRmYS0+aW5pdF9zdGF0ZV93b3JkID0gZGZhLT5pbml0X3N0YXRlX25sCisgICAgICA9IGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYgPSBkZmEtPmluaXRfc3RhdGU7CisKKyAgcmVfbm9kZV9zZXRfZnJlZSAoJmluaXRfbm9kZXMpOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisMCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy8qIElmIGl0IGlzIHBvc3NpYmxlIHRvIGRvIHNlYXJjaGluZyBpbiBzaW5nbGUgYnl0ZSBlbmNvZGluZyBpbnN0ZWFkIG9mIFVURi04CisgICB0byBzcGVlZCB0aGluZ3MgdXAsIHNldCBkZmEtPm1iX2N1cl9tYXggdG8gMSwgY2xlYXIgaXNfdXRmOCBhbmQgY2hhbmdlCisgICBERkEgbm9kZXMgd2hlcmUgbmVlZGVkLiAgKi8KKworc3RhdGljIHZvaWQKK29wdGltaXplX3V0ZjggKHJlX2RmYV90ICpkZmEpCit7CisgIGludCBub2RlLCBpLCBtYl9jaGFycyA9IDAsIGhhc19wZXJpb2QgPSAwOworCisgIGZvciAobm9kZSA9IDA7IG5vZGUgPCBkZmEtPm5vZGVzX2xlbjsgKytub2RlKQorICAgIHN3aXRjaCAoZGZhLT5ub2Rlc1tub2RlXS50eXBlKQorICAgICAgeworICAgICAgY2FzZSBDSEFSQUNURVI6CisJaWYgKGRmYS0+bm9kZXNbbm9kZV0ub3ByLmMgPj0gMHg4MCkKKwkgIG1iX2NoYXJzID0gMTsKKwlicmVhazsKKyAgICAgIGNhc2UgQU5DSE9SOgorCXN3aXRjaCAoZGZhLT5ub2Rlc1tub2RlXS5vcHIuY3R4X3R5cGUpCisJICB7CisJICBjYXNlIExJTkVfRklSU1Q6CisJICBjYXNlIExJTkVfTEFTVDoKKwkgIGNhc2UgQlVGX0ZJUlNUOgorCSAgY2FzZSBCVUZfTEFTVDoKKwkgICAgYnJlYWs7CisJICBkZWZhdWx0OgorCSAgICAvKiBXb3JkIGFuY2hvcnMgZXRjLiBjYW5ub3QgYmUgaGFuZGxlZC4gIEl0J3Mgb2theSB0byB0ZXN0CisJICAgICAgIG9wci5jdHhfdHlwZSBzaW5jZSBjb25zdHJhaW50cyAoZm9yIGFsbCBERkEgbm9kZXMpIGFyZQorCSAgICAgICBjcmVhdGVkIGJ5IE9SaW5nIG9uZSBvciBtb3JlIG9wci5jdHhfdHlwZSB2YWx1ZXMuICAqLworCSAgICByZXR1cm47CisJICB9CisJYnJlYWs7CisgICAgICBjYXNlIE9QX1BFUklPRDoKKwloYXNfcGVyaW9kID0gMTsKKwlicmVhazsKKyAgICAgIGNhc2UgT1BfQkFDS19SRUY6CisgICAgICBjYXNlIE9QX0FMVDoKKyAgICAgIGNhc2UgRU5EX09GX1JFOgorICAgICAgY2FzZSBPUF9EVVBfQVNURVJJU0s6CisgICAgICBjYXNlIE9QX09QRU5fU1VCRVhQOgorICAgICAgY2FzZSBPUF9DTE9TRV9TVUJFWFA6CisJYnJlYWs7CisgICAgICBjYXNlIENPTVBMRVhfQlJBQ0tFVDoKKwlyZXR1cm47CisgICAgICBjYXNlIFNJTVBMRV9CUkFDS0VUOgorCS8qIEp1c3QgZG91YmxlIGNoZWNrLiAgVGhlIG5vbi1BU0NJSSByYW5nZSBzdGFydHMgYXQgMHg4MC4gICovCisJYXNzZXJ0ICgweDgwICUgQklUU0VUX1dPUkRfQklUUyA9PSAwKTsKKwlmb3IgKGkgPSAweDgwIC8gQklUU0VUX1dPUkRfQklUUzsgaSA8IEJJVFNFVF9XT1JEUzsgKytpKQorCSAgaWYgKGRmYS0+bm9kZXNbbm9kZV0ub3ByLnNiY3NldFtpXSkKKwkgICAgcmV0dXJuOworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwlhYm9ydCAoKTsKKyAgICAgIH0KKworICBpZiAobWJfY2hhcnMgfHwgaGFzX3BlcmlvZCkKKyAgICBmb3IgKG5vZGUgPSAwOyBub2RlIDwgZGZhLT5ub2Rlc19sZW47ICsrbm9kZSkKKyAgICAgIHsKKwlpZiAoZGZhLT5ub2Rlc1tub2RlXS50eXBlID09IENIQVJBQ1RFUgorCSAgICAmJiBkZmEtPm5vZGVzW25vZGVdLm9wci5jID49IDB4ODApCisJICBkZmEtPm5vZGVzW25vZGVdLm1iX3BhcnRpYWwgPSAwOworCWVsc2UgaWYgKGRmYS0+bm9kZXNbbm9kZV0udHlwZSA9PSBPUF9QRVJJT0QpCisJICBkZmEtPm5vZGVzW25vZGVdLnR5cGUgPSBPUF9VVEY4X1BFUklPRDsKKyAgICAgIH0KKworICAvKiBUaGUgc2VhcmNoIGNhbiBiZSBpbiBzaW5nbGUgYnl0ZSBsb2NhbGUuICAqLworICBkZmEtPm1iX2N1cl9tYXggPSAxOworICBkZmEtPmlzX3V0ZjggPSAwOworICBkZmEtPmhhc19tYl9ub2RlID0gZGZhLT5uYmFja3JlZiA+IDAgfHwgaGFzX3BlcmlvZDsKK30KKyNlbmRpZgorDAorLyogQW5hbHl6ZSB0aGUgc3RydWN0dXJlIHRyZWUsIGFuZCBjYWxjdWxhdGUgImZpcnN0IiwgIm5leHQiLCAiZWRlc3QiLAorICAgImVjbG9zdXJlIiwgYW5kICJpbnZlY2xvc3VyZSIuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorYW5hbHl6ZSAocmVnZXhfdCAqcHJlZykKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworCisgIC8qIEFsbG9jYXRlIGFycmF5cy4gICovCisgIGRmYS0+bmV4dHMgPSByZV9tYWxsb2MgKGludCwgZGZhLT5ub2Rlc19hbGxvYyk7CisgIGRmYS0+b3JnX2luZGljZXMgPSByZV9tYWxsb2MgKGludCwgZGZhLT5ub2Rlc19hbGxvYyk7CisgIGRmYS0+ZWRlc3RzID0gcmVfbWFsbG9jIChyZV9ub2RlX3NldCwgZGZhLT5ub2Rlc19hbGxvYyk7CisgIGRmYS0+ZWNsb3N1cmVzID0gcmVfbWFsbG9jIChyZV9ub2RlX3NldCwgZGZhLT5ub2Rlc19hbGxvYyk7CisgIGlmIChCRSAoZGZhLT5uZXh0cyA9PSBOVUxMIHx8IGRmYS0+b3JnX2luZGljZXMgPT0gTlVMTCB8fCBkZmEtPmVkZXN0cyA9PSBOVUxMCisJICB8fCBkZmEtPmVjbG9zdXJlcyA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKworICBkZmEtPnN1YmV4cF9tYXAgPSByZV9tYWxsb2MgKGludCwgcHJlZy0+cmVfbnN1Yik7CisgIGlmIChkZmEtPnN1YmV4cF9tYXAgIT0gTlVMTCkKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVnLT5yZV9uc3ViOyBpKyspCisJZGZhLT5zdWJleHBfbWFwW2ldID0gaTsKKyAgICAgIHByZW9yZGVyIChkZmEtPnN0cl90cmVlLCBvcHRpbWl6ZV9zdWJleHBzLCBkZmEpOworICAgICAgZm9yIChpID0gMDsgaSA8IHByZWctPnJlX25zdWI7IGkrKykKKwlpZiAoZGZhLT5zdWJleHBfbWFwW2ldICE9IGkpCisJICBicmVhazsKKyAgICAgIGlmIChpID09IHByZWctPnJlX25zdWIpCisJeworCSAgZnJlZSAoZGZhLT5zdWJleHBfbWFwKTsKKwkgIGRmYS0+c3ViZXhwX21hcCA9IE5VTEw7CisJfQorICAgIH0KKworICByZXQgPSBwb3N0b3JkZXIgKGRmYS0+c3RyX3RyZWUsIGxvd2VyX3N1YmV4cHMsIHByZWcpOworICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIHJldDsKKyAgcmV0ID0gcG9zdG9yZGVyIChkZmEtPnN0cl90cmVlLCBjYWxjX2ZpcnN0LCBkZmEpOworICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIHJldDsKKyAgcHJlb3JkZXIgKGRmYS0+c3RyX3RyZWUsIGNhbGNfbmV4dCwgZGZhKTsKKyAgcmV0ID0gcHJlb3JkZXIgKGRmYS0+c3RyX3RyZWUsIGxpbmtfbmZhX25vZGVzLCBkZmEpOworICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIHJldDsKKyAgcmV0ID0gY2FsY19lY2xvc3VyZSAoZGZhKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisKKyAgLyogV2Ugb25seSBuZWVkIHRoaXMgZHVyaW5nIHRoZSBwcnVuZV9pbXBvc3NpYmxlX25vZGVzIHBhc3MgaW4gcmVnZXhlYy5jOworICAgICBza2lwIGl0IGlmIHBfaV9uIHdpbGwgbm90IHJ1biwgYXMgY2FsY19pbnZlY2xvc3VyZSBjYW4gYmUgcXVhZHJhdGljLiAgKi8KKyAgaWYgKCghcHJlZy0+bm9fc3ViICYmIHByZWctPnJlX25zdWIgPiAwICYmIGRmYS0+aGFzX3BsdXJhbF9tYXRjaCkKKyAgICAgIHx8IGRmYS0+bmJhY2tyZWYpCisgICAgeworICAgICAgZGZhLT5pbnZlY2xvc3VyZXMgPSByZV9tYWxsb2MgKHJlX25vZGVfc2V0LCBkZmEtPm5vZGVzX2xlbik7CisgICAgICBpZiAoQkUgKGRmYS0+aW52ZWNsb3N1cmVzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgcmV0ID0gY2FsY19pbnZlY2xvc3VyZSAoZGZhKTsKKyAgICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogT3VyIHBhcnNlIHRyZWVzIGFyZSB2ZXJ5IHVuYmFsYW5jZWQsIHNvIHdlIGNhbm5vdCB1c2UgYSBzdGFjayB0bworICAgaW1wbGVtZW50IHBhcnNlIHRyZWUgdmlzaXRzLiAgSW5zdGVhZCwgd2UgdXNlIHBhcmVudCBwb2ludGVycyBhbmQKKyAgIHNvbWUgaGFpcnkgY29kZSBpbiB0aGVzZSB0d28gZnVuY3Rpb25zLiAgKi8KK3N0YXRpYyByZWdfZXJyY29kZV90Citwb3N0b3JkZXIgKGJpbl90cmVlX3QgKnJvb3QsIHJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJpbl90cmVlX3QgKikpLAorCSAgIHZvaWQgKmV4dHJhKQoreworICBiaW5fdHJlZV90ICpub2RlLCAqcHJldjsKKworICBmb3IgKG5vZGUgPSByb290OyA7ICkKKyAgICB7CisgICAgICAvKiBEZXNjZW5kIGRvd24gdGhlIHRyZWUsIHByZWZlcmFibHkgdG8gdGhlIGxlZnQgKG9yIHRvIHRoZSByaWdodAorCSBpZiB0aGF0J3MgdGhlIG9ubHkgY2hpbGQpLiAgKi8KKyAgICAgIHdoaWxlIChub2RlLT5sZWZ0IHx8IG5vZGUtPnJpZ2h0KQorCWlmIChub2RlLT5sZWZ0KQorCSAgbm9kZSA9IG5vZGUtPmxlZnQ7CisJZWxzZQorCSAgbm9kZSA9IG5vZGUtPnJpZ2h0OworCisgICAgICBkbworCXsKKwkgIHJlZ19lcnJjb2RlX3QgZXJyID0gZm4gKGV4dHJhLCBub2RlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwkgIGlmIChub2RlLT5wYXJlbnQgPT0gTlVMTCkKKwkgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCSAgcHJldiA9IG5vZGU7CisJICBub2RlID0gbm9kZS0+cGFyZW50OworCX0KKyAgICAgIC8qIEdvIHVwIHdoaWxlIHdlIGhhdmUgYSBub2RlIHRoYXQgaXMgcmVhY2hlZCBmcm9tIHRoZSByaWdodC4gICovCisgICAgICB3aGlsZSAobm9kZS0+cmlnaHQgPT0gcHJldiB8fCBub2RlLT5yaWdodCA9PSBOVUxMKTsKKyAgICAgIG5vZGUgPSBub2RlLT5yaWdodDsKKyAgICB9Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitwcmVvcmRlciAoYmluX3RyZWVfdCAqcm9vdCwgcmVnX2VycmNvZGVfdCAoZm4gKHZvaWQgKiwgYmluX3RyZWVfdCAqKSksCisJICB2b2lkICpleHRyYSkKK3sKKyAgYmluX3RyZWVfdCAqbm9kZTsKKworICBmb3IgKG5vZGUgPSByb290OyA7ICkKKyAgICB7CisgICAgICByZWdfZXJyY29kZV90IGVyciA9IGZuIChleHRyYSwgbm9kZSk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKworICAgICAgLyogR28gdG8gdGhlIGxlZnQgbm9kZSwgb3IgdXAgYW5kIHRvIHRoZSByaWdodC4gICovCisgICAgICBpZiAobm9kZS0+bGVmdCkKKwlub2RlID0gbm9kZS0+bGVmdDsKKyAgICAgIGVsc2UKKwl7CisJICBiaW5fdHJlZV90ICpwcmV2ID0gTlVMTDsKKwkgIHdoaWxlIChub2RlLT5yaWdodCA9PSBwcmV2IHx8IG5vZGUtPnJpZ2h0ID09IE5VTEwpCisJICAgIHsKKwkgICAgICBwcmV2ID0gbm9kZTsKKwkgICAgICBub2RlID0gbm9kZS0+cGFyZW50OworCSAgICAgIGlmICghbm9kZSkKKwkJcmV0dXJuIFJFR19OT0VSUk9SOworCSAgICB9CisJICBub2RlID0gbm9kZS0+cmlnaHQ7CisJfQorICAgIH0KK30KKworLyogT3B0aW1pemF0aW9uIHBhc3M6IGlmIGEgU1VCRVhQIGlzIGVudGlyZWx5IGNvbnRhaW5lZCwgc3RyaXAgaXQgYW5kIHRlbGwKKyAgIHJlX3NlYXJjaF9pbnRlcm5hbCB0byBtYXAgdGhlIGlubmVyIG9uZSdzIG9wci5pZHggdG8gdGhpcyBvbmUncy4gIEFkanVzdAorICAgYmFja3JlZmVyZW5jZXMgYXMgd2VsbC4gIFJlcXVpcmVzIGEgcHJlb3JkZXIgdmlzaXQuICAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QKK29wdGltaXplX3N1YmV4cHMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGV4dHJhOworCisgIGlmIChub2RlLT50b2tlbi50eXBlID09IE9QX0JBQ0tfUkVGICYmIGRmYS0+c3ViZXhwX21hcCkKKyAgICB7CisgICAgICBpbnQgaWR4ID0gbm9kZS0+dG9rZW4ub3ByLmlkeDsKKyAgICAgIG5vZGUtPnRva2VuLm9wci5pZHggPSBkZmEtPnN1YmV4cF9tYXBbaWR4XTsKKyAgICAgIGRmYS0+dXNlZF9ia3JlZl9tYXAgfD0gMSA8PCBub2RlLT50b2tlbi5vcHIuaWR4OworICAgIH0KKworICBlbHNlIGlmIChub2RlLT50b2tlbi50eXBlID09IFNVQkVYUAorCSAgICYmIG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+dG9rZW4udHlwZSA9PSBTVUJFWFApCisgICAgeworICAgICAgaW50IG90aGVyX2lkeCA9IG5vZGUtPmxlZnQtPnRva2VuLm9wci5pZHg7CisKKyAgICAgIG5vZGUtPmxlZnQgPSBub2RlLT5sZWZ0LT5sZWZ0OworICAgICAgaWYgKG5vZGUtPmxlZnQpCisJbm9kZS0+bGVmdC0+cGFyZW50ID0gbm9kZTsKKworICAgICAgZGZhLT5zdWJleHBfbWFwW290aGVyX2lkeF0gPSBkZmEtPnN1YmV4cF9tYXBbbm9kZS0+dG9rZW4ub3ByLmlkeF07CisgICAgICBpZiAob3RoZXJfaWR4IDwgQklUU0VUX1dPUkRfQklUUykKKwkgIGRmYS0+dXNlZF9ia3JlZl9tYXAgJj0gfigoYml0c2V0X3dvcmRfdCkgMSA8PCBvdGhlcl9pZHgpOworICAgIH0KKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIExvd2VyaW5nIHBhc3M6IFR1cm4gZWFjaCBTVUJFWFAgbm9kZSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBjb25jYXRlbmF0aW9uCisgICBvZiBPUF9PUEVOX1NVQkVYUCwgdGhlIGJvZHkgb2YgdGhlIFNVQkVYUCAoaWYgYW55KSBhbmQgT1BfQ0xPU0VfU1VCRVhQLiAgKi8KK3N0YXRpYyByZWdfZXJyY29kZV90Citsb3dlcl9zdWJleHBzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgcmVnZXhfdCAqcHJlZyA9IChyZWdleF90ICopIGV4dHJhOworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworCisgIGlmIChub2RlLT5sZWZ0ICYmIG5vZGUtPmxlZnQtPnRva2VuLnR5cGUgPT0gU1VCRVhQKQorICAgIHsKKyAgICAgIG5vZGUtPmxlZnQgPSBsb3dlcl9zdWJleHAgKCZlcnIsIHByZWcsIG5vZGUtPmxlZnQpOworICAgICAgaWYgKG5vZGUtPmxlZnQpCisJbm9kZS0+bGVmdC0+cGFyZW50ID0gbm9kZTsKKyAgICB9CisgIGlmIChub2RlLT5yaWdodCAmJiBub2RlLT5yaWdodC0+dG9rZW4udHlwZSA9PSBTVUJFWFApCisgICAgeworICAgICAgbm9kZS0+cmlnaHQgPSBsb3dlcl9zdWJleHAgKCZlcnIsIHByZWcsIG5vZGUtPnJpZ2h0KTsKKyAgICAgIGlmIChub2RlLT5yaWdodCkKKwlub2RlLT5yaWdodC0+cGFyZW50ID0gbm9kZTsKKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGJpbl90cmVlX3QgKgorbG93ZXJfc3ViZXhwIChyZWdfZXJyY29kZV90ICplcnIsIHJlZ2V4X3QgKnByZWcsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV90ICpib2R5ID0gbm9kZS0+bGVmdDsKKyAgYmluX3RyZWVfdCAqb3AsICpjbHMsICp0cmVlMSwgKnRyZWU7CisKKyAgaWYgKHByZWctPm5vX3N1YgorICAgICAgLyogV2UgZG8gbm90IG9wdGltaXplIGVtcHR5IHN1YmV4cHJlc3Npb25zLCBiZWNhdXNlIG90aGVyd2lzZSB3ZSBtYXkKKwkgaGF2ZSBiYWQgQ09OQ0FUIG5vZGVzIHdpdGggTlVMTCBjaGlsZHJlbi4gIFRoaXMgaXMgb2J2aW91c2x5IG5vdAorCSB2ZXJ5IGNvbW1vbiwgc28gd2UgZG8gbm90IGxvc2UgbXVjaC4gIEFuIGV4YW1wbGUgdGhhdCB0cmlnZ2VycworCSB0aGlzIGNhc2UgaXMgdGhlIHNlZCAic2NyaXB0IiAvXChcKS94LiAgKi8KKyAgICAgICYmIG5vZGUtPmxlZnQgIT0gTlVMTAorICAgICAgJiYgKG5vZGUtPnRva2VuLm9wci5pZHggPj0gQklUU0VUX1dPUkRfQklUUworCSAgfHwgIShkZmEtPnVzZWRfYmtyZWZfbWFwCisJICAgICAgICYgKChiaXRzZXRfd29yZF90KSAxIDw8IG5vZGUtPnRva2VuLm9wci5pZHgpKSkpCisgICAgcmV0dXJuIG5vZGUtPmxlZnQ7CisKKyAgLyogQ29udmVydCB0aGUgU1VCRVhQIG5vZGUgdG8gdGhlIGNvbmNhdGVuYXRpb24gb2YgYW4KKyAgICAgT1BfT1BFTl9TVUJFWFAsIHRoZSBjb250ZW50cywgYW5kIGFuIE9QX0NMT1NFX1NVQkVYUC4gICovCisgIG9wID0gY3JlYXRlX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgT1BfT1BFTl9TVUJFWFApOworICBjbHMgPSBjcmVhdGVfdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCBPUF9DTE9TRV9TVUJFWFApOworICB0cmVlMSA9IGJvZHkgPyBjcmVhdGVfdHJlZSAoZGZhLCBib2R5LCBjbHMsIENPTkNBVCkgOiBjbHM7CisgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCBvcCwgdHJlZTEsIENPTkNBVCk7CisgIGlmIChCRSAodHJlZSA9PSBOVUxMIHx8IHRyZWUxID09IE5VTEwgfHwgb3AgPT0gTlVMTCB8fCBjbHMgPT0gTlVMTCwgMCkpCisgICAgeworICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgb3AtPnRva2VuLm9wci5pZHggPSBjbHMtPnRva2VuLm9wci5pZHggPSBub2RlLT50b2tlbi5vcHIuaWR4OworICBvcC0+dG9rZW4ub3B0X3N1YmV4cCA9IGNscy0+dG9rZW4ub3B0X3N1YmV4cCA9IG5vZGUtPnRva2VuLm9wdF9zdWJleHA7CisgIHJldHVybiB0cmVlOworfQorCisvKiBQYXNzIDEgaW4gYnVpbGRpbmcgdGhlIE5GQTogY29tcHV0ZSBGSVJTVCBhbmQgY3JlYXRlIHVubGlua2VkIGF1dG9tYXRvbgorICAgbm9kZXMuICBSZXF1aXJlcyBhIHBvc3RvcmRlciB2aXNpdC4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19maXJzdCAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgZXh0cmE7CisgIGlmIChub2RlLT50b2tlbi50eXBlID09IENPTkNBVCkKKyAgICB7CisgICAgICBub2RlLT5maXJzdCA9IG5vZGUtPmxlZnQtPmZpcnN0OworICAgICAgbm9kZS0+bm9kZV9pZHggPSBub2RlLT5sZWZ0LT5ub2RlX2lkeDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBub2RlLT5maXJzdCA9IG5vZGU7CisgICAgICBub2RlLT5ub2RlX2lkeCA9IHJlX2RmYV9hZGRfbm9kZSAoZGZhLCBub2RlLT50b2tlbik7CisgICAgICBpZiAoQkUgKG5vZGUtPm5vZGVfaWR4ID09IC0xLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIGlmIChub2RlLT50b2tlbi50eXBlID09IEFOQ0hPUikKKwlkZmEtPm5vZGVzW25vZGUtPm5vZGVfaWR4XS5jb25zdHJhaW50ID0gbm9kZS0+dG9rZW4ub3ByLmN0eF90eXBlOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBQYXNzIDI6IGNvbXB1dGUgTkVYVCBvbiB0aGUgdHJlZS4gIFByZW9yZGVyIHZpc2l0LiAgKi8KK3N0YXRpYyByZWdfZXJyY29kZV90CitjYWxjX25leHQgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICBzd2l0Y2ggKG5vZGUtPnRva2VuLnR5cGUpCisgICAgeworICAgIGNhc2UgT1BfRFVQX0FTVEVSSVNLOgorICAgICAgbm9kZS0+bGVmdC0+bmV4dCA9IG5vZGU7CisgICAgICBicmVhazsKKyAgICBjYXNlIENPTkNBVDoKKyAgICAgIG5vZGUtPmxlZnQtPm5leHQgPSBub2RlLT5yaWdodC0+Zmlyc3Q7CisgICAgICBub2RlLT5yaWdodC0+bmV4dCA9IG5vZGUtPm5leHQ7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgaWYgKG5vZGUtPmxlZnQpCisJbm9kZS0+bGVmdC0+bmV4dCA9IG5vZGUtPm5leHQ7CisgICAgICBpZiAobm9kZS0+cmlnaHQpCisJbm9kZS0+cmlnaHQtPm5leHQgPSBub2RlLT5uZXh0OworICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFBhc3MgMzogbGluayBhbGwgREZBIG5vZGVzIHRvIHRoZWlyIE5FWFQgbm9kZSAoYW55IG9yZGVyIHdpbGwgZG8pLiAgKi8KK3N0YXRpYyByZWdfZXJyY29kZV90CitsaW5rX25mYV9ub2RlcyAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgZXh0cmE7CisgIGludCBpZHggPSBub2RlLT5ub2RlX2lkeDsKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKworICBzd2l0Y2ggKG5vZGUtPnRva2VuLnR5cGUpCisgICAgeworICAgIGNhc2UgQ09OQ0FUOgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVORF9PRl9SRToKKyAgICAgIGFzc2VydCAobm9kZS0+bmV4dCA9PSBOVUxMKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9EVVBfQVNURVJJU0s6CisgICAgY2FzZSBPUF9BTFQ6CisgICAgICB7CisJaW50IGxlZnQsIHJpZ2h0OworCWRmYS0+aGFzX3BsdXJhbF9tYXRjaCA9IDE7CisJaWYgKG5vZGUtPmxlZnQgIT0gTlVMTCkKKwkgIGxlZnQgPSBub2RlLT5sZWZ0LT5maXJzdC0+bm9kZV9pZHg7CisJZWxzZQorCSAgbGVmdCA9IG5vZGUtPm5leHQtPm5vZGVfaWR4OworCWlmIChub2RlLT5yaWdodCAhPSBOVUxMKQorCSAgcmlnaHQgPSBub2RlLT5yaWdodC0+Zmlyc3QtPm5vZGVfaWR4OworCWVsc2UKKwkgIHJpZ2h0ID0gbm9kZS0+bmV4dC0+bm9kZV9pZHg7CisJYXNzZXJ0IChsZWZ0ID4gLTEpOworCWFzc2VydCAocmlnaHQgPiAtMSk7CisJZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8yIChkZmEtPmVkZXN0cyArIGlkeCwgbGVmdCwgcmlnaHQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEFOQ0hPUjoKKyAgICBjYXNlIE9QX09QRU5fU1VCRVhQOgorICAgIGNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xIChkZmEtPmVkZXN0cyArIGlkeCwgbm9kZS0+bmV4dC0+bm9kZV9pZHgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0JBQ0tfUkVGOgorICAgICAgZGZhLT5uZXh0c1tpZHhdID0gbm9kZS0+bmV4dC0+bm9kZV9pZHg7CisgICAgICBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBPUF9CQUNLX1JFRikKKwllcnIgPSByZV9ub2RlX3NldF9pbml0XzEgKGRmYS0+ZWRlc3RzICsgaWR4LCBkZmEtPm5leHRzW2lkeF0pOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYXNzZXJ0ICghSVNfRVBTSUxPTl9OT0RFIChub2RlLT50b2tlbi50eXBlKSk7CisgICAgICBkZmEtPm5leHRzW2lkeF0gPSBub2RlLT5uZXh0LT5ub2RlX2lkeDsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gZXJyOworfQorCisvKiBEdXBsaWNhdGUgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiB0aGUgbm9kZSBST09UX05PREUuCisgICBOb3RlIHRoYXQgZHVwbGljYXRlZCBub2RlcyBoYXZlIGNvbnN0cmFpbnQgSU5JVF9DT05TVFJBSU5UIGluIGFkZGl0aW9uCisgICB0byB0aGVpciBvd24gY29uc3RyYWludC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZHVwbGljYXRlX25vZGVfY2xvc3VyZSAocmVfZGZhX3QgKmRmYSwgaW50IHRvcF9vcmdfbm9kZSwgaW50IHRvcF9jbG9uZV9ub2RlLAorCQkJaW50IHJvb3Rfbm9kZSwgdW5zaWduZWQgaW50IGluaXRfY29uc3RyYWludCkKK3sKKyAgaW50IG9yZ19ub2RlLCBjbG9uZV9ub2RlLCByZXQ7CisgIHVuc2lnbmVkIGludCBjb25zdHJhaW50ID0gaW5pdF9jb25zdHJhaW50OworICBmb3IgKG9yZ19ub2RlID0gdG9wX29yZ19ub2RlLCBjbG9uZV9ub2RlID0gdG9wX2Nsb25lX25vZGU7OykKKyAgICB7CisgICAgICBpbnQgb3JnX2Rlc3QsIGNsb25lX2Rlc3Q7CisgICAgICBpZiAoZGZhLT5ub2Rlc1tvcmdfbm9kZV0udHlwZSA9PSBPUF9CQUNLX1JFRikKKwl7CisJICAvKiBJZiB0aGUgYmFjayByZWZlcmVuY2UgZXBzaWxvbi10cmFuc2l0LCBpdHMgZGVzdGluYXRpb24gbXVzdAorCSAgICAgYWxzbyBoYXZlIHRoZSBjb25zdHJhaW50LiAgVGhlbiBkdXBsaWNhdGUgdGhlIGVwc2lsb24gY2xvc3VyZQorCSAgICAgb2YgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBiYWNrIHJlZmVyZW5jZSwgYW5kIHN0b3JlIGl0IGluCisJICAgICBlZGVzdHMgb2YgdGhlIGJhY2sgcmVmZXJlbmNlLiAgKi8KKwkgIG9yZ19kZXN0ID0gZGZhLT5uZXh0c1tvcmdfbm9kZV07CisJICByZV9ub2RlX3NldF9lbXB0eSAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlKTsKKwkgIGNsb25lX2Rlc3QgPSBkdXBsaWNhdGVfbm9kZSAoZGZhLCBvcmdfZGVzdCwgY29uc3RyYWludCk7CisJICBpZiAoQkUgKGNsb25lX2Rlc3QgPT0gLTEsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIGRmYS0+bmV4dHNbY2xvbmVfbm9kZV0gPSBkZmEtPm5leHRzW29yZ19ub2RlXTsKKwkgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlLCBjbG9uZV9kZXN0KTsKKwkgIGlmIChCRSAocmV0IDwgMCwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIGVsc2UgaWYgKGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5uZWxlbSA9PSAwKQorCXsKKwkgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgY2FuJ3QgZXBzaWxvbi10cmFuc2l0LCBkb24ndCBkdXBsaWNhdGUgdGhlCisJICAgICBkZXN0aW5hdGlvbiBhbmQgc3RvcmUgdGhlIG9yaWdpbmFsIGRlc3RpbmF0aW9uIGFzIHRoZQorCSAgICAgZGVzdGluYXRpb24gb2YgdGhlIG5vZGUuICAqLworCSAgZGZhLT5uZXh0c1tjbG9uZV9ub2RlXSA9IGRmYS0+bmV4dHNbb3JnX25vZGVdOworCSAgYnJlYWs7CisJfQorICAgICAgZWxzZSBpZiAoZGZhLT5lZGVzdHNbb3JnX25vZGVdLm5lbGVtID09IDEpCisJeworCSAgLyogSW4gY2FzZSBvZiB0aGUgbm9kZSBjYW4gZXBzaWxvbi10cmFuc2l0LCBhbmQgaXQgaGFzIG9ubHkgb25lCisJICAgICBkZXN0aW5hdGlvbi4gICovCisJICBvcmdfZGVzdCA9IGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5lbGVtc1swXTsKKwkgIHJlX25vZGVfc2V0X2VtcHR5IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUpOworCSAgLyogSWYgdGhlIG5vZGUgaXMgcm9vdF9ub2RlIGl0c2VsZiwgaXQgbWVhbnMgdGhlIGVwc2lsb24gY2xzb3VyZQorCSAgICAgaGFzIGEgbG9vcC4gICBUaGVuIHRpZSBpdCB0byB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJvb3Rfbm9kZS4gICovCisJICBpZiAob3JnX25vZGUgPT0gcm9vdF9ub2RlICYmIGNsb25lX25vZGUgIT0gb3JnX25vZGUpCisJICAgIHsKKwkgICAgICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSwgb3JnX2Rlc3QpOworCSAgICAgIGlmIChCRSAocmV0IDwgMCwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAvKiBJbiBjYXNlIG9mIHRoZSBub2RlIGhhcyBhbm90aGVyIGNvbnN0cmFpbnQsIGFkZCBpdC4gICovCisJICBjb25zdHJhaW50IHw9IGRmYS0+bm9kZXNbb3JnX25vZGVdLmNvbnN0cmFpbnQ7CisJICBjbG9uZV9kZXN0ID0gZHVwbGljYXRlX25vZGUgKGRmYSwgb3JnX2Rlc3QsIGNvbnN0cmFpbnQpOworCSAgaWYgKEJFIChjbG9uZV9kZXN0ID09IC0xLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSwgY2xvbmVfZGVzdCk7CisJICBpZiAoQkUgKHJldCA8IDAsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgICBlbHNlIC8qIGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5uZWxlbSA9PSAyICovCisJeworCSAgLyogSW4gY2FzZSBvZiB0aGUgbm9kZSBjYW4gZXBzaWxvbi10cmFuc2l0LCBhbmQgaXQgaGFzIHR3bworCSAgICAgZGVzdGluYXRpb25zLiBJbiB0aGUgYmluX3RyZWVfdCBhbmQgREZBLCB0aGF0J3MgJ3wnIGFuZCAnKicuICAgKi8KKwkgIG9yZ19kZXN0ID0gZGZhLT5lZGVzdHNbb3JnX25vZGVdLmVsZW1zWzBdOworCSAgcmVfbm9kZV9zZXRfZW1wdHkgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSk7CisJICAvKiBTZWFyY2ggZm9yIGEgZHVwbGljYXRlZCBub2RlIHdoaWNoIHNhdGlzZmllcyB0aGUgY29uc3RyYWludC4gICovCisJICBjbG9uZV9kZXN0ID0gc2VhcmNoX2R1cGxpY2F0ZWRfbm9kZSAoZGZhLCBvcmdfZGVzdCwgY29uc3RyYWludCk7CisJICBpZiAoY2xvbmVfZGVzdCA9PSAtMSkKKwkgICAgeworCSAgICAgIC8qIFRoZXJlIGlzIG5vIHN1Y2ggZHVwbGljYXRlZCBub2RlLCBjcmVhdGUgYSBuZXcgb25lLiAgKi8KKwkgICAgICByZWdfZXJyY29kZV90IGVycjsKKwkgICAgICBjbG9uZV9kZXN0ID0gZHVwbGljYXRlX25vZGUgKGRmYSwgb3JnX2Rlc3QsIGNvbnN0cmFpbnQpOworCSAgICAgIGlmIChCRSAoY2xvbmVfZGVzdCA9PSAtMSwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICAgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlLCBjbG9uZV9kZXN0KTsKKwkgICAgICBpZiAoQkUgKHJldCA8IDAsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICBlcnIgPSBkdXBsaWNhdGVfbm9kZV9jbG9zdXJlIChkZmEsIG9yZ19kZXN0LCBjbG9uZV9kZXN0LAorCQkJCQkgICAgcm9vdF9ub2RlLCBjb25zdHJhaW50KTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIFRoZXJlIGlzIGEgZHVwbGljYXRlZCBub2RlIHdoaWNoIHNhdGlzZmllcyB0aGUgY29uc3RyYWludCwKKwkJIHVzZSBpdCB0byBhdm9pZCBpbmZpbml0ZSBsb29wLiAgKi8KKwkgICAgICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSwgY2xvbmVfZGVzdCk7CisJICAgICAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKworCSAgb3JnX2Rlc3QgPSBkZmEtPmVkZXN0c1tvcmdfbm9kZV0uZWxlbXNbMV07CisJICBjbG9uZV9kZXN0ID0gZHVwbGljYXRlX25vZGUgKGRmYSwgb3JnX2Rlc3QsIGNvbnN0cmFpbnQpOworCSAgaWYgKEJFIChjbG9uZV9kZXN0ID09IC0xLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSwgY2xvbmVfZGVzdCk7CisJICBpZiAoQkUgKHJldCA8IDAsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgICBvcmdfbm9kZSA9IG9yZ19kZXN0OworICAgICAgY2xvbmVfbm9kZSA9IGNsb25lX2Rlc3Q7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFNlYXJjaCBmb3IgYSBub2RlIHdoaWNoIGlzIGR1cGxpY2F0ZWQgZnJvbSB0aGUgbm9kZSBPUkdfTk9ERSwgYW5kCisgICBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnQgQ09OU1RSQUlOVC4gICovCisKK3N0YXRpYyBpbnQKK3NlYXJjaF9kdXBsaWNhdGVkX25vZGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBvcmdfbm9kZSwKKwkJCXVuc2lnbmVkIGludCBjb25zdHJhaW50KQoreworICBpbnQgaWR4OworICBmb3IgKGlkeCA9IGRmYS0+bm9kZXNfbGVuIC0gMTsgZGZhLT5ub2Rlc1tpZHhdLmR1cGxpY2F0ZWQgJiYgaWR4ID4gMDsgLS1pZHgpCisgICAgeworICAgICAgaWYgKG9yZ19ub2RlID09IGRmYS0+b3JnX2luZGljZXNbaWR4XQorCSAgJiYgY29uc3RyYWludCA9PSBkZmEtPm5vZGVzW2lkeF0uY29uc3RyYWludCkKKwlyZXR1cm4gaWR4OyAvKiBGb3VuZC4gICovCisgICAgfQorICByZXR1cm4gLTE7IC8qIE5vdCBmb3VuZC4gICovCit9CisKKy8qIER1cGxpY2F0ZSB0aGUgbm9kZSB3aG9zZSBpbmRleCBpcyBPUkdfSURYIGFuZCBzZXQgdGhlIGNvbnN0cmFpbnQgQ09OU1RSQUlOVC4KKyAgIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIG5ldyBub2RlLCBvciAtMSBpZiBpbnN1ZmZpY2llbnQgc3RvcmFnZSBpcworICAgYXZhaWxhYmxlLiAgKi8KKworc3RhdGljIGludAorZHVwbGljYXRlX25vZGUgKHJlX2RmYV90ICpkZmEsIGludCBvcmdfaWR4LCB1bnNpZ25lZCBpbnQgY29uc3RyYWludCkKK3sKKyAgaW50IGR1cF9pZHggPSByZV9kZmFfYWRkX25vZGUgKGRmYSwgZGZhLT5ub2Rlc1tvcmdfaWR4XSk7CisgIGlmIChCRSAoZHVwX2lkeCAhPSAtMSwgMSkpCisgICAgeworICAgICAgZGZhLT5ub2Rlc1tkdXBfaWR4XS5jb25zdHJhaW50ID0gY29uc3RyYWludDsKKyAgICAgIGRmYS0+bm9kZXNbZHVwX2lkeF0uY29uc3RyYWludCB8PSBkZmEtPm5vZGVzW29yZ19pZHhdLmNvbnN0cmFpbnQ7CisgICAgICBkZmEtPm5vZGVzW2R1cF9pZHhdLmR1cGxpY2F0ZWQgPSAxOworCisgICAgICAvKiBTdG9yZSB0aGUgaW5kZXggb2YgdGhlIG9yaWdpbmFsIG5vZGUuICAqLworICAgICAgZGZhLT5vcmdfaW5kaWNlc1tkdXBfaWR4XSA9IG9yZ19pZHg7CisgICAgfQorICByZXR1cm4gZHVwX2lkeDsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NhbGNfaW52ZWNsb3N1cmUgKHJlX2RmYV90ICpkZmEpCit7CisgIGludCBzcmMsIGlkeCwgcmV0OworICBmb3IgKGlkeCA9IDA7IGlkeCA8IGRmYS0+bm9kZXNfbGVuOyArK2lkeCkKKyAgICByZV9ub2RlX3NldF9pbml0X2VtcHR5IChkZmEtPmludmVjbG9zdXJlcyArIGlkeCk7CisKKyAgZm9yIChzcmMgPSAwOyBzcmMgPCBkZmEtPm5vZGVzX2xlbjsgKytzcmMpCisgICAgeworICAgICAgaW50ICplbGVtcyA9IGRmYS0+ZWNsb3N1cmVzW3NyY10uZWxlbXM7CisgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGRmYS0+ZWNsb3N1cmVzW3NyY10ubmVsZW07ICsraWR4KQorCXsKKwkgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydF9sYXN0IChkZmEtPmludmVjbG9zdXJlcyArIGVsZW1zW2lkeF0sIHNyYyk7CisJICBpZiAoQkUgKHJldCA9PSAtMSwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBDYWxjdWxhdGUgImVjbG9zdXJlIiBmb3IgYWxsIHRoZSBub2RlIGluIERGQS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitjYWxjX2VjbG9zdXJlIChyZV9kZmFfdCAqZGZhKQoreworICBpbnQgbm9kZV9pZHgsIGluY29tcGxldGU7CisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChkZmEtPm5vZGVzX2xlbiA+IDApOworI2VuZGlmCisgIGluY29tcGxldGUgPSAwOworICAvKiBGb3IgZWFjaCBub2RlcywgY2FsY3VsYXRlIGVwc2lsb24gY2xvc3VyZS4gICovCisgIGZvciAobm9kZV9pZHggPSAwOyA7ICsrbm9kZV9pZHgpCisgICAgeworICAgICAgcmVnX2VycmNvZGVfdCBlcnI7CisgICAgICByZV9ub2RlX3NldCBlY2xvc3VyZV9lbGVtOworICAgICAgaWYgKG5vZGVfaWR4ID09IGRmYS0+bm9kZXNfbGVuKQorCXsKKwkgIGlmICghaW5jb21wbGV0ZSkKKwkgICAgYnJlYWs7CisJICBpbmNvbXBsZXRlID0gMDsKKwkgIG5vZGVfaWR4ID0gMDsKKwl9CisKKyNpZmRlZiBERUJVRworICAgICAgYXNzZXJ0IChkZmEtPmVjbG9zdXJlc1tub2RlX2lkeF0ubmVsZW0gIT0gLTEpOworI2VuZGlmCisKKyAgICAgIC8qIElmIHdlIGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkLCBza2lwIGl0LiAgKi8KKyAgICAgIGlmIChkZmEtPmVjbG9zdXJlc1tub2RlX2lkeF0ubmVsZW0gIT0gMCkKKwljb250aW51ZTsKKyAgICAgIC8qIENhbGN1bGF0ZSBlcHNpbG9uIGNsb3N1cmUgb2YgYG5vZGVfaWR4Jy4gICovCisgICAgICBlcnIgPSBjYWxjX2VjbG9zdXJlX2l0ZXIgKCZlY2xvc3VyZV9lbGVtLCBkZmEsIG5vZGVfaWR4LCAxKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworCisgICAgICBpZiAoZGZhLT5lY2xvc3VyZXNbbm9kZV9pZHhdLm5lbGVtID09IDApCisJeworCSAgaW5jb21wbGV0ZSA9IDE7CisJICByZV9ub2RlX3NldF9mcmVlICgmZWNsb3N1cmVfZWxlbSk7CisJfQorICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBDYWxjdWxhdGUgZXBzaWxvbiBjbG9zdXJlIG9mIE5PREUuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19lY2xvc3VyZV9pdGVyIChyZV9ub2RlX3NldCAqbmV3X3NldCwgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGUsIGludCByb290KQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGk7CisgIHJlX25vZGVfc2V0IGVjbG9zdXJlOworICBpbnQgcmV0OworICBpbnQgaW5jb21wbGV0ZSA9IDA7CisgIGVyciA9IHJlX25vZGVfc2V0X2FsbG9jICgmZWNsb3N1cmUsIGRmYS0+ZWRlc3RzW25vZGVdLm5lbGVtICsgMSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworCisgIC8qIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIGNhbGN1bGF0aW5nIHRoaXMgbm9kZSBub3cuCisgICAgIFdlIHJlZmVyZW5jZSB0aGlzIHZhbHVlIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuICAqLworICBkZmEtPmVjbG9zdXJlc1tub2RlXS5uZWxlbSA9IC0xOworCisgIC8qIElmIHRoZSBjdXJyZW50IG5vZGUgaGFzIGNvbnN0cmFpbnRzLCBkdXBsaWNhdGUgYWxsIG5vZGVzCisgICAgIHNpbmNlIHRoZXkgbXVzdCBpbmhlcml0IHRoZSBjb25zdHJhaW50cy4gICovCisgIGlmIChkZmEtPm5vZGVzW25vZGVdLmNvbnN0cmFpbnQKKyAgICAgICYmIGRmYS0+ZWRlc3RzW25vZGVdLm5lbGVtCisgICAgICAmJiAhZGZhLT5ub2Rlc1tkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1swXV0uZHVwbGljYXRlZCkKKyAgICB7CisgICAgICBlcnIgPSBkdXBsaWNhdGVfbm9kZV9jbG9zdXJlIChkZmEsIG5vZGUsIG5vZGUsIG5vZGUsCisJCQkJICAgIGRmYS0+bm9kZXNbbm9kZV0uY29uc3RyYWludCk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisKKyAgLyogRXhwYW5kIGVhY2ggZXBzaWxvbiBkZXN0aW5hdGlvbiBub2Rlcy4gICovCisgIGlmIChJU19FUFNJTE9OX05PREUoZGZhLT5ub2Rlc1tub2RlXS50eXBlKSkKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGZhLT5lZGVzdHNbbm9kZV0ubmVsZW07ICsraSkKKyAgICAgIHsKKwlyZV9ub2RlX3NldCBlY2xvc3VyZV9lbGVtOworCWludCBlZGVzdCA9IGRmYS0+ZWRlc3RzW25vZGVdLmVsZW1zW2ldOworCS8qIElmIGNhbGN1bGF0aW5nIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgYGVkZXN0JyBpcyBpbiBwcm9ncmVzcywKKwkgICByZXR1cm4gaW50ZXJtZWRpYXRlIHJlc3VsdC4gICovCisJaWYgKGRmYS0+ZWNsb3N1cmVzW2VkZXN0XS5uZWxlbSA9PSAtMSkKKwkgIHsKKwkgICAgaW5jb21wbGV0ZSA9IDE7CisJICAgIGNvbnRpbnVlOworCSAgfQorCS8qIElmIHdlIGhhdmVuJ3QgY2FsY3VsYXRlZCB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBlZGVzdCcgeWV0LAorCSAgIGNhbGN1bGF0ZSBub3cuIE90aGVyd2lzZSB1c2UgY2FsY3VsYXRlZCBlcHNpbG9uIGNsb3N1cmUuICAqLworCWlmIChkZmEtPmVjbG9zdXJlc1tlZGVzdF0ubmVsZW0gPT0gMCkKKwkgIHsKKwkgICAgZXJyID0gY2FsY19lY2xvc3VyZV9pdGVyICgmZWNsb3N1cmVfZWxlbSwgZGZhLCBlZGVzdCwgMCk7CisJICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgICByZXR1cm4gZXJyOworCSAgfQorCWVsc2UKKwkgIGVjbG9zdXJlX2VsZW0gPSBkZmEtPmVjbG9zdXJlc1tlZGVzdF07CisJLyogTWVyZ2UgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiBgZWRlc3QnLiAgKi8KKwllcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJmVjbG9zdXJlLCAmZWNsb3N1cmVfZWxlbSk7CisJaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgcmV0dXJuIGVycjsKKwkvKiBJZiB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBlZGVzdCcgaXMgaW5jb21wbGV0ZSwKKwkgICB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIHRoaXMgbm9kZSBpcyBhbHNvIGluY29tcGxldGUuICAqLworCWlmIChkZmEtPmVjbG9zdXJlc1tlZGVzdF0ubmVsZW0gPT0gMCkKKwkgIHsKKwkgICAgaW5jb21wbGV0ZSA9IDE7CisJICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZlY2xvc3VyZV9lbGVtKTsKKwkgIH0KKyAgICAgIH0KKworICAvKiBBbiBlcHNpbG9uIGNsb3N1cmUgaW5jbHVkZXMgaXRzZWxmLiAgKi8KKyAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0ICgmZWNsb3N1cmUsIG5vZGUpOworICBpZiAoQkUgKHJldCA8IDAsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICBpZiAoaW5jb21wbGV0ZSAmJiAhcm9vdCkKKyAgICBkZmEtPmVjbG9zdXJlc1tub2RlXS5uZWxlbSA9IDA7CisgIGVsc2UKKyAgICBkZmEtPmVjbG9zdXJlc1tub2RlXSA9IGVjbG9zdXJlOworICAqbmV3X3NldCA9IGVjbG9zdXJlOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisMCisvKiBGdW5jdGlvbnMgZm9yIHRva2VuIHdoaWNoIGFyZSB1c2VkIGluIHRoZSBwYXJzZXIuICAqLworCisvKiBGZXRjaCBhIHRva2VuIGZyb20gSU5QVVQuCisgICBXZSBtdXN0IG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBpbnNpZGUgYnJhY2tldCBleHByZXNzaW9ucy4gICovCisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorZmV0Y2hfdG9rZW4gKHJlX3Rva2VuX3QgKnJlc3VsdCwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQoreworICByZV9zdHJpbmdfc2tpcF9ieXRlcyAoaW5wdXQsIHBlZWtfdG9rZW4gKHJlc3VsdCwgaW5wdXQsIHN5bnRheCkpOworfQorCisvKiBQZWVrIGEgdG9rZW4gZnJvbSBJTlBVVCwgYW5kIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSB0b2tlbi4KKyAgIFdlIG11c3Qgbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGluc2lkZSBicmFja2V0IGV4cHJlc3Npb25zLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3BlZWtfdG9rZW4gKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHVuc2lnbmVkIGNoYXIgYzsKKworICBpZiAocmVfc3RyaW5nX2VvaSAoaW5wdXQpKQorICAgIHsKKyAgICAgIHRva2VuLT50eXBlID0gRU5EX09GX1JFOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGMgPSByZV9zdHJpbmdfcGVla19ieXRlIChpbnB1dCwgMCk7CisgIHRva2VuLT5vcHIuYyA9IGM7CisKKyAgdG9rZW4tPndvcmRfY2hhciA9IDA7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgdG9rZW4tPm1iX3BhcnRpYWwgPSAwOworICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxICYmCisgICAgICAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKSkKKyAgICB7CisgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAgICAgIHRva2VuLT5tYl9wYXJ0aWFsID0gMTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyNlbmRpZgorICBpZiAoYyA9PSAnXFwnKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CisgICAgICBpZiAocmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSArIDEgPj0gcmVfc3RyaW5nX2xlbmd0aCAoaW5wdXQpKQorCXsKKwkgIHRva2VuLT50eXBlID0gQkFDS19TTEFTSDsKKwkgIHJldHVybiAxOworCX0KKworICAgICAgYzIgPSByZV9zdHJpbmdfcGVla19ieXRlX2Nhc2UgKGlucHV0LCAxKTsKKyAgICAgIHRva2VuLT5vcHIuYyA9IGMyOworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisJeworCSAgd2ludF90IHdjID0gcmVfc3RyaW5nX3djaGFyX2F0IChpbnB1dCwKKwkJCQkJICByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSk7CisJICB0b2tlbi0+d29yZF9jaGFyID0gSVNfV0lERV9XT1JEX0NIQVIgKHdjKSAhPSAwOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZgorCXRva2VuLT53b3JkX2NoYXIgPSBJU19XT1JEX0NIQVIgKGMyKSAhPSAwOworCisgICAgICBzd2l0Y2ggKGMyKQorCXsKKwljYXNlICd8JzoKKwkgIGlmICghKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSAmJiAhKHN5bnRheCAmIFJFX05PX0JLX1ZCQVIpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX0FMVDsKKwkgIGJyZWFrOworCWNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKKwljYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0JLX1JFRlMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBPUF9CQUNLX1JFRjsKKwkgICAgICB0b2tlbi0+b3ByLmlkeCA9IGMyIC0gJzEnOworCSAgICB9CisJICBicmVhazsKKwljYXNlICc8JzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IFdPUkRfRklSU1Q7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgJz4nOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gV09SRF9MQVNUOworCSAgICB9CisJICBicmVhazsKKwljYXNlICdiJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IFdPUkRfREVMSU07CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgJ0InOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gTk9UX1dPUkRfREVMSU07CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgJ3cnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHRva2VuLT50eXBlID0gT1BfV09SRDsKKwkgIGJyZWFrOworCWNhc2UgJ1cnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHRva2VuLT50eXBlID0gT1BfTk9UV09SRDsKKwkgIGJyZWFrOworCWNhc2UgJ3MnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHRva2VuLT50eXBlID0gT1BfU1BBQ0U7CisJICBicmVhazsKKwljYXNlICdTJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX05PVFNQQUNFOworCSAgYnJlYWs7CisJY2FzZSAnYCc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBCVUZfRklSU1Q7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgJ1wnJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IEJVRl9MQVNUOworCSAgICB9CisJICBicmVhazsKKwljYXNlICcoJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykpCisJICAgIHRva2VuLT50eXBlID0gT1BfT1BFTl9TVUJFWFA7CisJICBicmVhazsKKwljYXNlICcpJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykpCisJICAgIHRva2VuLT50eXBlID0gT1BfQ0xPU0VfU1VCRVhQOworCSAgYnJlYWs7CisJY2FzZSAnKyc6CisJICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX0RVUF9QTFVTOworCSAgYnJlYWs7CisJY2FzZSAnPyc6CisJICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX0RVUF9RVUVTVElPTjsKKwkgIGJyZWFrOworCWNhc2UgJ3snOgorCSAgaWYgKChzeW50YXggJiBSRV9JTlRFUlZBTFMpICYmICghKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX09QRU5fRFVQX05VTTsKKwkgIGJyZWFrOworCWNhc2UgJ30nOgorCSAgaWYgKChzeW50YXggJiBSRV9JTlRFUlZBTFMpICYmICghKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX0NMT1NFX0RVUF9OVU07CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorICAgICAgcmV0dXJuIDI7CisgICAgfQorCisgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgd2ludF90IHdjID0gcmVfc3RyaW5nX3djaGFyX2F0IChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSk7CisgICAgICB0b2tlbi0+d29yZF9jaGFyID0gSVNfV0lERV9XT1JEX0NIQVIgKHdjKSAhPSAwOworICAgIH0KKyAgZWxzZQorI2VuZGlmCisgICAgdG9rZW4tPndvcmRfY2hhciA9IElTX1dPUkRfQ0hBUiAodG9rZW4tPm9wci5jKTsKKworICBzd2l0Y2ggKGMpCisgICAgeworICAgIGNhc2UgJ1xuJzoKKyAgICAgIGlmIChzeW50YXggJiBSRV9ORVdMSU5FX0FMVCkKKwl0b2tlbi0+dHlwZSA9IE9QX0FMVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3wnOgorICAgICAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmIChzeW50YXggJiBSRV9OT19CS19WQkFSKSkKKwl0b2tlbi0+dHlwZSA9IE9QX0FMVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJyonOgorICAgICAgdG9rZW4tPnR5cGUgPSBPUF9EVVBfQVNURVJJU0s7CisgICAgICBicmVhazsKKyAgICBjYXNlICcrJzoKKyAgICAgIGlmICghKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSAmJiAhKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pKQorCXRva2VuLT50eXBlID0gT1BfRFVQX1BMVVM7CisgICAgICBicmVhazsKKyAgICBjYXNlICc/JzoKKyAgICAgIGlmICghKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSAmJiAhKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pKQorCXRva2VuLT50eXBlID0gT1BfRFVQX1FVRVNUSU9OOworICAgICAgYnJlYWs7CisgICAgY2FzZSAneyc6CisgICAgICBpZiAoKHN5bnRheCAmIFJFX0lOVEVSVkFMUykgJiYgKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykpCisJdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0RVUF9OVU07CisgICAgICBicmVhazsKKyAgICBjYXNlICd9JzoKKyAgICAgIGlmICgoc3ludGF4ICYgUkVfSU5URVJWQUxTKSAmJiAoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkKKwl0b2tlbi0+dHlwZSA9IE9QX0NMT1NFX0RVUF9OVU07CisgICAgICBicmVhazsKKyAgICBjYXNlICcoJzoKKyAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpCisJdG9rZW4tPnR5cGUgPSBPUF9PUEVOX1NVQkVYUDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJyknOgorICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykKKwl0b2tlbi0+dHlwZSA9IE9QX0NMT1NFX1NVQkVYUDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1snOgorICAgICAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0JSQUNLRVQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICcuJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfUEVSSU9EOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnXic6CisgICAgICBpZiAoIShzeW50YXggJiAoUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTIHwgUkVfQ0FSRVRfQU5DSE9SU19IRVJFKSkgJiYKKwkgIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgIT0gMCkKKwl7CisJICBjaGFyIHByZXYgPSByZV9zdHJpbmdfcGVla19ieXRlIChpbnB1dCwgLTEpOworCSAgaWYgKCEoc3ludGF4ICYgUkVfTkVXTElORV9BTFQpIHx8IHByZXYgIT0gJ1xuJykKKwkgICAgYnJlYWs7CisJfQorICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gTElORV9GSVJTVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJyQnOgorICAgICAgaWYgKCEoc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTKSAmJgorCSAgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSArIDEgIT0gcmVfc3RyaW5nX2xlbmd0aCAoaW5wdXQpKQorCXsKKwkgIHJlX3Rva2VuX3QgbmV4dDsKKwkgIHJlX3N0cmluZ19za2lwX2J5dGVzIChpbnB1dCwgMSk7CisJICBwZWVrX3Rva2VuICgmbmV4dCwgaW5wdXQsIHN5bnRheCk7CisJICByZV9zdHJpbmdfc2tpcF9ieXRlcyAoaW5wdXQsIC0xKTsKKwkgIGlmIChuZXh0LnR5cGUgIT0gT1BfQUxUICYmIG5leHQudHlwZSAhPSBPUF9DTE9TRV9TVUJFWFApCisJICAgIGJyZWFrOworCX0KKyAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IExJTkVfTEFTVDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiAxOworfQorCisvKiBQZWVrIGEgdG9rZW4gZnJvbSBJTlBVVCwgYW5kIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSB0b2tlbi4KKyAgIFdlIG11c3Qgbm90IHVzZSB0aGlzIGZ1bmN0aW9uIG91dCBvZiBicmFja2V0IGV4cHJlc3Npb25zLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3BlZWtfdG9rZW5fYnJhY2tldCAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKK3sKKyAgdW5zaWduZWQgY2hhciBjOworICBpZiAocmVfc3RyaW5nX2VvaSAoaW5wdXQpKQorICAgIHsKKyAgICAgIHRva2VuLT50eXBlID0gRU5EX09GX1JFOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBjID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIDApOworICB0b2tlbi0+b3ByLmMgPSBjOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSAmJgorICAgICAgIXJlX3N0cmluZ19maXJzdF9ieXRlIChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSkpCisgICAgeworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICBpZiAoYyA9PSAnXFwnICYmIChzeW50YXggJiBSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTKQorICAgICAgJiYgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSArIDEgPCByZV9zdHJpbmdfbGVuZ3RoIChpbnB1dCkpCisgICAgeworICAgICAgLyogSW4gdGhpcyBjYXNlLCAnXCcgZXNjYXBlIGEgY2hhcmFjdGVyLiAgKi8KKyAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CisgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAoaW5wdXQsIDEpOworICAgICAgYzIgPSByZV9zdHJpbmdfcGVla19ieXRlIChpbnB1dCwgMCk7CisgICAgICB0b2tlbi0+b3ByLmMgPSBjMjsKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBpZiAoYyA9PSAnWycpIC8qICdbJyBpcyBhIHNwZWNpYWwgY2hhciBpbiBhIGJyYWNrZXQgZXhwcy4gICovCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciBjMjsKKyAgICAgIGludCB0b2tlbl9sZW47CisgICAgICBpZiAocmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSArIDEgPCByZV9zdHJpbmdfbGVuZ3RoIChpbnB1dCkpCisJYzIgPSByZV9zdHJpbmdfcGVla19ieXRlIChpbnB1dCwgMSk7CisgICAgICBlbHNlCisJYzIgPSAwOworICAgICAgdG9rZW4tPm9wci5jID0gYzI7CisgICAgICB0b2tlbl9sZW4gPSAyOworICAgICAgc3dpdGNoIChjMikKKwl7CisJY2FzZSAnLic6CisJICB0b2tlbi0+dHlwZSA9IE9QX09QRU5fQ09MTF9FTEVNOworCSAgYnJlYWs7CisJY2FzZSAnPSc6CisJICB0b2tlbi0+dHlwZSA9IE9QX09QRU5fRVFVSVZfQ0xBU1M7CisJICBicmVhazsKKwljYXNlICc6JzoKKwkgIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IE9QX09QRU5fQ0hBUl9DTEFTUzsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgLyogZWxzZSBmYWxsIHRocm91Z2guICAqLworCWRlZmF1bHQ6CisJICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKwkgIHRva2VuLT5vcHIuYyA9IGM7CisJICB0b2tlbl9sZW4gPSAxOworCSAgYnJlYWs7CisJfQorICAgICAgcmV0dXJuIHRva2VuX2xlbjsKKyAgICB9CisgIHN3aXRjaCAoYykKKyAgICB7CisgICAgY2FzZSAnLSc6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX0NIQVJTRVRfUkFOR0U7CisgICAgICBicmVhazsKKyAgICBjYXNlICddJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfQ0xPU0VfQlJBQ0tFVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ14nOgorICAgICAgdG9rZW4tPnR5cGUgPSBPUF9OT05fTUFUQ0hfTElTVDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAgICB9CisgIHJldHVybiAxOworfQorDAorLyogRnVuY3Rpb25zIGZvciBwYXJzZXIuICAqLworCisvKiBFbnRyeSBwb2ludCBvZiB0aGUgcGFyc2VyLgorICAgUGFyc2UgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBSRUdFWFAgYW5kIHJldHVybiB0aGUgc3RydWN0dXJlIHRyZWUuCisgICBJZiBhbiBlcnJvciBpcyBvY2N1cmVkLCBFUlIgaXMgc2V0IGJ5IGVycm9yIGNvZGUsIGFuZCByZXR1cm4gTlVMTC4KKyAgIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbiA8cmVnX2V4cD46CisJICAgQ0FUCisJICAgLyBcCisJICAvICAgXAorICAgPHJlZ19leHA+ICBFT1IKKworICAgQ0FUIG1lYW5zIGNvbmNhdGVuYXRpb24uCisgICBFT1IgbWVhbnMgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbi4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZWdfc3ludGF4X3Qgc3ludGF4LAorICAgICAgIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWUsICplb3IsICpyb290OworICByZV90b2tlbl90IGN1cnJlbnRfdG9rZW47CisgIGRmYS0+c3ludGF4ID0gc3ludGF4OworICBmZXRjaF90b2tlbiAoJmN1cnJlbnRfdG9rZW4sIHJlZ2V4cCwgc3ludGF4IHwgUkVfQ0FSRVRfQU5DSE9SU19IRVJFKTsKKyAgdHJlZSA9IHBhcnNlX3JlZ19leHAgKHJlZ2V4cCwgcHJlZywgJmN1cnJlbnRfdG9rZW4sIHN5bnRheCwgMCwgZXJyKTsKKyAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIHRyZWUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGVvciA9IGNyZWF0ZV90cmVlIChkZmEsIE5VTEwsIE5VTEwsIEVORF9PRl9SRSk7CisgIGlmICh0cmVlICE9IE5VTEwpCisgICAgcm9vdCA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGVvciwgQ09OQ0FUKTsKKyAgZWxzZQorICAgIHJvb3QgPSBlb3I7CisgIGlmIChCRSAoZW9yID09IE5VTEwgfHwgcm9vdCA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJuIHJvb3Q7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgPGJyYW5jaDE+fDxicmFuY2gyPjoKKwkgICBBTFQKKwkgICAvIFwKKwkgIC8gICBcCisgICA8YnJhbmNoMT4gPGJyYW5jaDI+CisKKyAgIEFMVCBtZWFucyBhbHRlcm5hdGl2ZSwgd2hpY2ggcmVwcmVzZW50cyB0aGUgb3BlcmF0b3IgYHwnLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfcmVnX2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIGludCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV90ICp0cmVlLCAqYnJhbmNoID0gTlVMTDsKKyAgdHJlZSA9IHBhcnNlX2JyYW5jaCAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKworICB3aGlsZSAodG9rZW4tPnR5cGUgPT0gT1BfQUxUKQorICAgIHsKKyAgICAgIGZldGNoX3Rva2VuICh0b2tlbiwgcmVnZXhwLCBzeW50YXggfCBSRV9DQVJFVF9BTkNIT1JTX0hFUkUpOworICAgICAgaWYgKHRva2VuLT50eXBlICE9IE9QX0FMVCAmJiB0b2tlbi0+dHlwZSAhPSBFTkRfT0ZfUkUKKwkgICYmIChuZXN0ID09IDAgfHwgdG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKSkKKwl7CisJICBicmFuY2ggPSBwYXJzZV9icmFuY2ggKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCwgZXJyKTsKKwkgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiBicmFuY2ggPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBOVUxMOworCX0KKyAgICAgIGVsc2UKKwlicmFuY2ggPSBOVUxMOworICAgICAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGJyYW5jaCwgT1BfQUxUKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisgIHJldHVybiB0cmVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkIHRoZSBmb2xsb3dpbmcgdHJlZSwgZnJvbSByZWd1bGFyIGV4cHJlc3Npb24KKyAgIDxleHAxPjxleHAyPjoKKwlDQVQKKwkvIFwKKyAgICAgICAvICAgXAorICAgPGV4cDE+IDxleHAyPgorCisgICBDQVQgbWVhbnMgY29uY2F0ZW5hdGlvbi4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX2JyYW5jaCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgYmluX3RyZWVfdCAqdHJlZSwgKmV4cDsKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIHRyZWUgPSBwYXJzZV9leHByZXNzaW9uIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworCisgIHdoaWxlICh0b2tlbi0+dHlwZSAhPSBPUF9BTFQgJiYgdG9rZW4tPnR5cGUgIT0gRU5EX09GX1JFCisJICYmIChuZXN0ID09IDAgfHwgdG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKSkKKyAgICB7CisgICAgICBleHAgPSBwYXJzZV9leHByZXNzaW9uIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgZXhwID09IE5VTEwsIDApKQorCXsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIGlmICh0cmVlICE9IE5VTEwgJiYgZXhwICE9IE5VTEwpCisJeworCSAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGV4cCwgQ09OQ0FUKTsKKwkgIGlmICh0cmVlID09IE5VTEwpCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHRyZWUgPT0gTlVMTCkKKwl0cmVlID0gZXhwOworICAgICAgLyogT3RoZXJ3aXNlIGV4cCA9PSBOVUxMLCB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBuZXcgdHJlZS4gICovCisgICAgfQorICByZXR1cm4gdHJlZTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBidWlsZCB0aGUgZm9sbG93aW5nIHRyZWUsIGZyb20gcmVndWxhciBleHByZXNzaW9uIGEqOgorCSAqCisJIHwKKwkgYQorKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfZXhwcmVzc2lvbiAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJCSAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWU7CisgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgIGNhc2UgQ0hBUkFDVEVSOgorICAgICAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJeworCSAgd2hpbGUgKCFyZV9zdHJpbmdfZW9pIChyZWdleHApCisJCSAmJiAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCkpKQorCSAgICB7CisJICAgICAgYmluX3RyZWVfdCAqbWJjX3JlbWFpbjsKKwkgICAgICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKwkgICAgICBtYmNfcmVtYWluID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4pOworCSAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBtYmNfcmVtYWluLCBDT05DQVQpOworCSAgICAgIGlmIChCRSAobWJjX3JlbWFpbiA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJCXsKKwkJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkJICByZXR1cm4gTlVMTDsKKwkJfQorCSAgICB9CisJfQorI2VuZGlmCisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fU1VCRVhQOgorICAgICAgdHJlZSA9IHBhcnNlX3N1Yl9leHAgKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCArIDEsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfT1BFTl9CUkFDS0VUOgorICAgICAgdHJlZSA9IHBhcnNlX2JyYWNrZXRfZXhwIChyZWdleHAsIGRmYSwgdG9rZW4sIHN5bnRheCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9CQUNLX1JFRjoKKyAgICAgIGlmICghQkUgKGRmYS0+Y29tcGxldGVkX2JrcmVmX21hcCAmICgxIDw8IHRva2VuLT5vcHIuaWR4KSwgMSkpCisJeworCSAgKmVyciA9IFJFR19FU1VCUkVHOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZGZhLT51c2VkX2JrcmVmX21hcCB8PSAxIDw8IHRva2VuLT5vcHIuaWR4OworICAgICAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgICsrZGZhLT5uYmFja3JlZjsKKyAgICAgIGRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9PUEVOX0RVUF9OVU06CisgICAgICBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKwl7CisJICAqZXJyID0gUkVHX0JBRFJQVDsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBPUF9EVVBfQVNURVJJU0s6CisgICAgY2FzZSBPUF9EVVBfUExVUzoKKyAgICBjYXNlIE9QX0RVUF9RVUVTVElPTjoKKyAgICAgIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOVkFMSURfT1BTKQorCXsKKwkgICplcnIgPSBSRUdfQkFEUlBUOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9PUFMpCisJeworCSAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisJICByZXR1cm4gcGFyc2VfZXhwcmVzc2lvbiAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworCX0KKyAgICAgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICAqLworICAgIGNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorICAgICAgaWYgKCh0b2tlbi0+dHlwZSA9PSBPUF9DTE9TRV9TVUJFWFApICYmCisJICAhKHN5bnRheCAmIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpKQorCXsKKwkgICplcnIgPSBSRUdfRVJQQVJFTjsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICAqLworICAgIGNhc2UgT1BfQ0xPU0VfRFVQX05VTToKKyAgICAgIC8qIFdlIHRyZWF0IGl0IGFzIGEgbm9ybWFsIGNoYXJhY3Rlci4gICovCisKKyAgICAgIC8qIFRoZW4gd2UgY2FuIHRoZXNlIGNoYXJhY3RlcnMgYXMgbm9ybWFsIGNoYXJhY3RlcnMuICAqLworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgICAvKiBtYl9wYXJ0aWFsIGFuZCB3b3JkX2NoYXIgYml0cyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYWxyZWFkeQorCSBieSBwZWVrX3Rva2VuLiAgKi8KKyAgICAgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBicmVhazsKKyAgICBjYXNlIEFOQ0hPUjoKKyAgICAgIGlmICgodG9rZW4tPm9wci5jdHhfdHlwZQorCSAgICYgKFdPUkRfREVMSU0gfCBOT1RfV09SRF9ERUxJTSB8IFdPUkRfRklSU1QgfCBXT1JEX0xBU1QpKQorCSAgJiYgZGZhLT53b3JkX29wc191c2VkID09IDApCisJaW5pdF93b3JkX2NoYXIgKGRmYSk7CisgICAgICBpZiAodG9rZW4tPm9wci5jdHhfdHlwZSA9PSBXT1JEX0RFTElNCisJICB8fCB0b2tlbi0+b3ByLmN0eF90eXBlID09IE5PVF9XT1JEX0RFTElNKQorCXsKKwkgIGJpbl90cmVlX3QgKnRyZWVfZmlyc3QsICp0cmVlX2xhc3Q7CisJICBpZiAodG9rZW4tPm9wci5jdHhfdHlwZSA9PSBXT1JEX0RFTElNKQorCSAgICB7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IFdPUkRfRklSU1Q7CisJICAgICAgdHJlZV9maXJzdCA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gV09SRF9MQVNUOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gSU5TSURFX1dPUkQ7CisJICAgICAgdHJlZV9maXJzdCA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gSU5TSURFX05PVFdPUkQ7CisJICAgIH0KKwkgIHRyZWVfbGFzdCA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlX2ZpcnN0LCB0cmVlX2xhc3QsIE9QX0FMVCk7CisJICBpZiAoQkUgKHRyZWVfZmlyc3QgPT0gTlVMTCB8fCB0cmVlX2xhc3QgPT0gTlVMTCB8fCB0cmVlID09IE5VTEwsIDApKQorCSAgICB7CisJICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwkgICAgeworCSAgICAgICplcnIgPSBSRUdfRVNQQUNFOworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgICAgLyogV2UgbXVzdCByZXR1cm4gaGVyZSwgc2luY2UgQU5DSE9ScyBjYW4ndCBiZSBmb2xsb3dlZAorCSBieSByZXBldGl0aW9uIG9wZXJhdG9ycy4KKwkgZWcuIFJFIl4qIiBpcyBpbnZhbGlkIG9yICI8QU5DSE9SKF4pPjxDSEFSKCopPiIsCisJICAgICBpdCBtdXN0IG5vdCBiZSAiPEFOQ0hPUiheKT48UkVQRUFUKCopPiIuICAqLworICAgICAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisgICAgICByZXR1cm4gdHJlZTsKKyAgICBjYXNlIE9QX1BFUklPRDoKKyAgICAgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwlkZmEtPmhhc19tYl9ub2RlID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfV09SRDoKKyAgICBjYXNlIE9QX05PVFdPUkQ6CisgICAgICB0cmVlID0gYnVpbGRfY2hhcmNsYXNzX29wIChkZmEsIHJlZ2V4cC0+dHJhbnMsCisJCQkJICJhbG51bSIsCisJCQkJICJfIiwKKwkJCQkgdG9rZW4tPnR5cGUgPT0gT1BfTk9UV09SRCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9TUEFDRToKKyAgICBjYXNlIE9QX05PVFNQQUNFOgorICAgICAgdHJlZSA9IGJ1aWxkX2NoYXJjbGFzc19vcCAoZGZhLCByZWdleHAtPnRyYW5zLAorCQkJCSAic3BhY2UiLAorCQkJCSAiIiwKKwkJCQkgdG9rZW4tPnR5cGUgPT0gT1BfTk9UU1BBQ0UsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfQUxUOgorICAgIGNhc2UgRU5EX09GX1JFOgorICAgICAgcmV0dXJuIE5VTEw7CisgICAgY2FzZSBCQUNLX1NMQVNIOgorICAgICAgKmVyciA9IFJFR19FRVNDQVBFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIE11c3Qgbm90IGhhcHBlbj8gICovCisjaWZkZWYgREVCVUcKKyAgICAgIGFzc2VydCAoMCk7CisjZW5kaWYKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyAgd2hpbGUgKHRva2VuLT50eXBlID09IE9QX0RVUF9BU1RFUklTSyB8fCB0b2tlbi0+dHlwZSA9PSBPUF9EVVBfUExVUworCSB8fCB0b2tlbi0+dHlwZSA9PSBPUF9EVVBfUVVFU1RJT04gfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9EVVBfTlVNKQorICAgIHsKKyAgICAgIHRyZWUgPSBwYXJzZV9kdXBfb3AgKHRyZWUsIHJlZ2V4cCwgZGZhLCB0b2tlbiwgc3ludGF4LCBlcnIpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIHRyZWUgPT0gTlVMTCwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgICAvKiBJbiBCUkUgY29uc2VjdXRpdmUgZHVwbGljYXRpb25zIGFyZSBub3QgYWxsb3dlZC4gICovCisgICAgICBpZiAoKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5WQUxJRF9EVVApCisJICAmJiAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX0FTVEVSSVNLCisJICAgICAgfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9EVVBfTlVNKSkKKwl7CisJICAqZXJyID0gUkVHX0JBRFJQVDsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisKKyAgcmV0dXJuIHRyZWU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKDxyZWdfZXhwPik6CisJIFNVQkVYUAorCSAgICB8CisJPHJlZ19leHA+CisqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitwYXJzZV9zdWJfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZV90b2tlbl90ICp0b2tlbiwKKwkgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWU7CisgIHNpemVfdCBjdXJfbnN1YjsKKyAgY3VyX25zdWIgPSBwcmVnLT5yZV9uc3ViKys7CisKKyAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCB8IFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSk7CisKKyAgLyogVGhlIHN1YmV4cHJlc3Npb24gbWF5IGJlIGEgbnVsbCBzdHJpbmcuICAqLworICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQKQorICAgIHRyZWUgPSBOVUxMOworICBlbHNlCisgICAgeworICAgICAgdHJlZSA9IHBhcnNlX3JlZ19leHAgKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciA9PSBSRUdfTk9FUlJPUiAmJiB0b2tlbi0+dHlwZSAhPSBPUF9DTE9TRV9TVUJFWFAsIDApKQorCSplcnIgPSBSRUdfRVBBUkVOOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaWYgKGN1cl9uc3ViIDw9ICc5JyAtICcxJykKKyAgICBkZmEtPmNvbXBsZXRlZF9ia3JlZl9tYXAgfD0gMSA8PCBjdXJfbnN1YjsKKworICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgTlVMTCwgU1VCRVhQKTsKKyAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfRVNQQUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB0cmVlLT50b2tlbi5vcHIuaWR4ID0gY3VyX25zdWI7CisgIHJldHVybiB0cmVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHBhcnNlIHJlcGV0aXRpb24gb3BlcmF0b3JzIGxpa2UgIioiLCAiKyIsICJ7MSwzfSIgZXRjLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfZHVwX29wIChiaW5fdHJlZV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLAorCSAgICAgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIGJpbl90cmVlX3QgKnRyZWUgPSBOVUxMLCAqb2xkX3RyZWUgPSBOVUxMOworICBpbnQgaSwgc3RhcnQsIGVuZCwgc3RhcnRfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCk7CisjaWZuZGVmIFJFX1RPS0VOX0lOSVRfQlVHCisgIHJlX3Rva2VuX3Qgc3RhcnRfdG9rZW4gPSAqdG9rZW47CisjZWxzZQorICByZV90b2tlbl90IHN0YXJ0X3Rva2VuOworCisgIG1lbWNweSAoKHZvaWQgKikgJnN0YXJ0X3Rva2VuLCAodm9pZCAqKSB0b2tlbiwgc2l6ZW9mIHN0YXJ0X3Rva2VuKTsKKyNlbmRpZgorCisgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0RVUF9OVU0pCisgICAgeworICAgICAgZW5kID0gMDsKKyAgICAgIHN0YXJ0ID0gZmV0Y2hfbnVtYmVyIChyZWdleHAsIHRva2VuLCBzeW50YXgpOworICAgICAgaWYgKHN0YXJ0ID09IC0xKQorCXsKKwkgIGlmICh0b2tlbi0+dHlwZSA9PSBDSEFSQUNURVIgJiYgdG9rZW4tPm9wci5jID09ICcsJykKKwkgICAgc3RhcnQgPSAwOyAvKiBXZSB0cmVhdCAieyxtfSIgYXMgInswLG19Ii4gICovCisJICBlbHNlCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0JBREJSOyAvKiA8cmU+e30gaXMgaW52YWxpZC4gICovCisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgICBpZiAoQkUgKHN0YXJ0ICE9IC0yLCAxKSkKKwl7CisJICAvKiBXZSB0cmVhdCAie259IiBhcyAie24sbn0iLiAgKi8KKwkgIGVuZCA9ICgodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfRFVQX05VTSkgPyBzdGFydAorCQkgOiAoKHRva2VuLT50eXBlID09IENIQVJBQ1RFUiAmJiB0b2tlbi0+b3ByLmMgPT0gJywnKQorCQkgICAgPyBmZXRjaF9udW1iZXIgKHJlZ2V4cCwgdG9rZW4sIHN5bnRheCkgOiAtMikpOworCX0KKyAgICAgIGlmIChCRSAoc3RhcnQgPT0gLTIgfHwgZW5kID09IC0yLCAwKSkKKwl7CisJICAvKiBJbnZhbGlkIHNlcXVlbmNlLiAgKi8KKwkgIGlmIChCRSAoIShzeW50YXggJiBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCksIDApKQorCSAgICB7CisJICAgICAgaWYgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSkKKwkJKmVyciA9IFJFR19FQlJBQ0U7CisJICAgICAgZWxzZQorCQkqZXJyID0gUkVHX0JBREJSOworCisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKworCSAgLyogSWYgdGhlIHN5bnRheCBiaXQgaXMgc2V0LCByb2xsYmFjay4gICovCisJICByZV9zdHJpbmdfc2V0X2luZGV4IChyZWdleHAsIHN0YXJ0X2lkeCk7CisJICAqdG9rZW4gPSBzdGFydF90b2tlbjsKKwkgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworCSAgLyogbWJfcGFydGlhbCBhbmQgd29yZF9jaGFyIGJpdHMgc2hvdWxkIGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkKKwkgICAgIHBlZWtfdG9rZW4uICAqLworCSAgcmV0dXJuIGVsZW07CisJfQorCisgICAgICBpZiAoQkUgKChlbmQgIT0gLTEgJiYgc3RhcnQgPiBlbmQpIHx8IHRva2VuLT50eXBlICE9IE9QX0NMT1NFX0RVUF9OVU0sIDApKQorCXsKKwkgIC8qIEZpcnN0IG51bWJlciBncmVhdGVyIHRoYW4gc2Vjb25kLiAgKi8KKwkgICplcnIgPSBSRUdfQkFEQlI7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3RhcnQgPSAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX1BMVVMpID8gMSA6IDA7CisgICAgICBlbmQgPSAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX1FVRVNUSU9OKSA/IDEgOiAtMTsKKyAgICB9CisKKyAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyAgaWYgKEJFIChlbGVtID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworICBpZiAoQkUgKHN0YXJ0ID09IDAgJiYgZW5kID09IDAsIDApKQorICAgIHsKKyAgICAgIHBvc3RvcmRlciAoZWxlbSwgZnJlZV90cmVlLCBOVUxMKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAvKiBFeHRyYWN0ICI8cmU+e24sbX0iIHRvICI8cmU+PHJlPi4uLjxyZT48cmU+ezAsPG0tbj59Ii4gICovCisgIGlmIChCRSAoc3RhcnQgPiAwLCAwKSkKKyAgICB7CisgICAgICB0cmVlID0gZWxlbTsKKyAgICAgIGZvciAoaSA9IDI7IGkgPD0gc3RhcnQ7ICsraSkKKwl7CisJICBlbGVtID0gZHVwbGljYXRlX3RyZWUgKGVsZW0sIGRmYSk7CisJICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgZWxlbSwgQ09OQ0FUKTsKKwkgIGlmIChCRSAoZWxlbSA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJICAgIGdvdG8gcGFyc2VfZHVwX29wX2VzcGFjZTsKKwl9CisKKyAgICAgIGlmIChzdGFydCA9PSBlbmQpCisJcmV0dXJuIHRyZWU7CisKKyAgICAgIC8qIER1cGxpY2F0ZSBFTEVNIGJlZm9yZSBpdCBpcyBtYXJrZWQgb3B0aW9uYWwuICAqLworICAgICAgZWxlbSA9IGR1cGxpY2F0ZV90cmVlIChlbGVtLCBkZmEpOworICAgICAgb2xkX3RyZWUgPSB0cmVlOworICAgIH0KKyAgZWxzZQorICAgIG9sZF90cmVlID0gTlVMTDsKKworICBpZiAoZWxlbS0+dG9rZW4udHlwZSA9PSBTVUJFWFApCisgICAgcG9zdG9yZGVyIChlbGVtLCBtYXJrX29wdF9zdWJleHAsICh2b2lkICopIChsb25nKSBlbGVtLT50b2tlbi5vcHIuaWR4KTsKKworICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgZWxlbSwgTlVMTCwgKGVuZCA9PSAtMSA/IE9QX0RVUF9BU1RFUklTSyA6IE9QX0FMVCkpOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisgICAgZ290byBwYXJzZV9kdXBfb3BfZXNwYWNlOworCisgIC8qIFRoaXMgbG9vcCBpcyBhY3R1YWxseSBleGVjdXRlZCBvbmx5IHdoZW4gZW5kICE9IC0xLAorICAgICB0byByZXdyaXRlIDxyZT57MCxufSBhcyAoPHJlPig8cmU+Li4uPHJlPj8pPyk/Li4uICBXZSBoYXZlCisgICAgIGFscmVhZHkgY3JlYXRlZCB0aGUgc3RhcnQrMS10aCBjb3B5LiAgKi8KKyAgZm9yIChpID0gc3RhcnQgKyAyOyBpIDw9IGVuZDsgKytpKQorICAgIHsKKyAgICAgIGVsZW0gPSBkdXBsaWNhdGVfdHJlZSAoZWxlbSwgZGZhKTsKKyAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBlbGVtLCBDT05DQVQpOworICAgICAgaWYgKEJFIChlbGVtID09IE5VTEwgfHwgdHJlZSA9PSBOVUxMLCAwKSkKKwlnb3RvIHBhcnNlX2R1cF9vcF9lc3BhY2U7CisKKyAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBOVUxMLCBPUF9BTFQpOworICAgICAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorCWdvdG8gcGFyc2VfZHVwX29wX2VzcGFjZTsKKyAgICB9CisKKyAgaWYgKG9sZF90cmVlKQorICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCBvbGRfdHJlZSwgdHJlZSwgQ09OQ0FUKTsKKworICByZXR1cm4gdHJlZTsKKworIHBhcnNlX2R1cF9vcF9lc3BhY2U6CisgICplcnIgPSBSRUdfRVNQQUNFOworICByZXR1cm4gTlVMTDsKK30KKworLyogU2l6ZSBvZiB0aGUgbmFtZXMgZm9yIGNvbGxhdGluZyBzeW1ib2wvZXF1aXZhbGVuY2VfY2xhc3MvY2hhcmFjdGVyX2NsYXNzLgorICAgSSdtIG5vdCBzdXJlLCBidXQgbWF5YmUgZW5vdWdoLiAgKi8KKyNkZWZpbmUgQlJBQ0tFVF9OQU1FX0JVRl9TSVpFIDMyCisKKyNpZm5kZWYgX0xJQkMKKyAgLyogTG9jYWwgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIG9ubHkgdXNlZCBpbiBjYXNlIG9mIE5PVCBfTElCQy4KKyAgICAgQnVpbGQgdGhlIHJhbmdlIGV4cHJlc3Npb24gd2hpY2ggc3RhcnRzIGZyb20gU1RBUlRfRUxFTSwgYW5kIGVuZHMKKyAgICAgYXQgRU5EX0VMRU0uICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBSQU5HRV9BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5yYW5nZV9zdGFydHMsIGFuZAorICAgICBtYmNzZXQtPnJhbmdlX2VuZHMsIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5zZSB3ZSBtYXkKKyAgICAgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCisjIGlmZGVmIFJFX0VOQUJMRV9JMThOCitidWlsZF9yYW5nZV9leHAgKGJpdHNldF90IHNiY3NldCwgcmVfY2hhcnNldF90ICptYmNzZXQsIGludCAqcmFuZ2VfYWxsb2MsCisJCSBicmFja2V0X2VsZW1fdCAqc3RhcnRfZWxlbSwgYnJhY2tldF9lbGVtX3QgKmVuZF9lbGVtKQorIyBlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworYnVpbGRfcmFuZ2VfZXhwIChiaXRzZXRfdCBzYmNzZXQsIGJyYWNrZXRfZWxlbV90ICpzdGFydF9lbGVtLAorCQkgYnJhY2tldF9lbGVtX3QgKmVuZF9lbGVtKQorIyBlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3sKKyAgdW5zaWduZWQgaW50IHN0YXJ0X2NoLCBlbmRfY2g7CisgIC8qIEVxdWl2YWxlbmNlIENsYXNzZXMgYW5kIENoYXJhY3RlciBDbGFzc2VzIGNhbid0IGJlIGEgcmFuZ2Ugc3RhcnQvZW5kLiAgKi8KKyAgaWYgKEJFIChzdGFydF9lbGVtLT50eXBlID09IEVRVUlWX0NMQVNTIHx8IHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUworCSAgfHwgZW5kX2VsZW0tPnR5cGUgPT0gRVFVSVZfQ0xBU1MgfHwgZW5kX2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUywKKwkgIDApKQorICAgIHJldHVybiBSRUdfRVJBTkdFOworCisgIC8qIFdlIGNhbiBoYW5kbGUgbm8gbXVsdGkgY2hhcmFjdGVyIGNvbGxhdGluZyBlbGVtZW50cyB3aXRob3V0IGxpYmMKKyAgICAgc3VwcG9ydC4gICovCisgIGlmIChCRSAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0KKwkgICAmJiBzdHJsZW4gKChjaGFyICopIHN0YXJ0X2VsZW0tPm9wci5uYW1lKSA+IDEpCisJICB8fCAoZW5kX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0KKwkgICAgICAmJiBzdHJsZW4gKChjaGFyICopIGVuZF9lbGVtLT5vcHIubmFtZSkgPiAxKSwgMCkpCisgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKworIyBpZmRlZiBSRV9FTkFCTEVfSTE4TgorICB7CisgICAgd2NoYXJfdCB3YzsKKyAgICB3aW50X3Qgc3RhcnRfd2M7CisgICAgd2ludF90IGVuZF93YzsKKyAgICB3Y2hhcl90IGNtcF9idWZbNl0gPSB7TCdcMCcsIEwnXDAnLCBMJ1wwJywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CisKKyAgICBzdGFydF9jaCA9ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSKSA/IHN0YXJ0X2VsZW0tPm9wci5jaAorCQk6ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkgPyBzdGFydF9lbGVtLT5vcHIubmFtZVswXQorCQkgICA6IDApKTsKKyAgICBlbmRfY2ggPSAoKGVuZF9lbGVtLT50eXBlID09IFNCX0NIQVIpID8gZW5kX2VsZW0tPm9wci5jaAorCSAgICAgIDogKChlbmRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkgPyBlbmRfZWxlbS0+b3ByLm5hbWVbMF0KKwkJIDogMCkpOworI2lmZGVmIEdBV0sKKyAgICAvKgorICAgICAqIEZlZG9yYSBDb3JlIDIsIG1heWJlIG90aGVycywgaGF2ZSBicm9rZW4gYGJ0b3djJyB0aGF0IHJldHVybnMgLTEKKyAgICAgKiBmb3IgYW55IHZhbHVlID4gMTI3LiBTaWdoLiBOb3RlIHRoYXQgYHN0YXJ0X2NoJyBhbmQgYGVuZF9jaCcgYXJlCisgICAgICogdW5zaWduZWQsIHNvIHdlIGRvbid0IGhhdmUgc2lnbiBleHRlbnNpb24gcHJvYmxlbXMuCisgICAgICovCisgICAgc3RhcnRfd2MgPSAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gU0JfQ0hBUiB8fCBzdGFydF9lbGVtLT50eXBlID09IENPTExfU1lNKQorCQk/IHN0YXJ0X2NoIDogc3RhcnRfZWxlbS0+b3ByLndjaCk7CisgICAgZW5kX3djID0gKChlbmRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSIHx8IGVuZF9lbGVtLT50eXBlID09IENPTExfU1lNKQorCSAgICAgID8gZW5kX2NoIDogZW5kX2VsZW0tPm9wci53Y2gpOworI2Vsc2UKKyAgICBzdGFydF93YyA9ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSIHx8IHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pCisJCT8gX19idG93YyAoc3RhcnRfY2gpIDogc3RhcnRfZWxlbS0+b3ByLndjaCk7CisgICAgZW5kX3djID0gKChlbmRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSIHx8IGVuZF9lbGVtLT50eXBlID09IENPTExfU1lNKQorCSAgICAgID8gX19idG93YyAoZW5kX2NoKSA6IGVuZF9lbGVtLT5vcHIud2NoKTsKKyNlbmRpZgorICAgIGlmIChzdGFydF93YyA9PSBXRU9GIHx8IGVuZF93YyA9PSBXRU9GKQorICAgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKyAgICBjbXBfYnVmWzBdID0gc3RhcnRfd2M7CisgICAgY21wX2J1Zls0XSA9IGVuZF93YzsKKyAgICBpZiAod2NzY29sbCAoY21wX2J1ZiwgY21wX2J1ZiArIDQpID4gMCkKKyAgICAgIHJldHVybiBSRUdfRVJBTkdFOworCisgICAgLyogR290IHZhbGlkIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZXMsIGFkZCB0aGVtIGFzIGEgbmV3IGVudHJ5LgorICAgICAgIEhvd2V2ZXIsIGZvciAhX0xJQkMgd2UgaGF2ZSBubyBjb2xsYXRpb24gZWxlbWVudHM6IGlmIHRoZQorICAgICAgIGNoYXJhY3RlciBzZXQgaXMgc2luZ2xlIGJ5dGUsIHRoZSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgc2V0CisgICAgICAgdGhhdCB3ZSBidWlsZCBiZWxvdyBzdWZmaWNlcy4gIHBhcnNlX2JyYWNrZXRfZXhwIHBhc3NlcworICAgICAgIG5vIE1CQ1NFVCBpZiBkZmEtPm1iX2N1cl9tYXggPT0gMS4gICovCisgICAgaWYgKG1iY3NldCkKKyAgICAgIHsKKwkvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisJaWYgKEJFICgqcmFuZ2VfYWxsb2MgPT0gbWJjc2V0LT5ucmFuZ2VzLCAwKSkKKwkgIHsKKwkgICAgLyogVGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSwgbmVlZCByZWFsbG9jLiAgKi8KKwkgICAgd2NoYXJfdCAqbmV3X2FycmF5X3N0YXJ0LCAqbmV3X2FycmF5X2VuZDsKKwkgICAgaW50IG5ld19ucmFuZ2VzOworCisJICAgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5ucmFuZ2VzIGlzIDAuICAqLworCSAgICBuZXdfbnJhbmdlcyA9IDIgKiBtYmNzZXQtPm5yYW5nZXMgKyAxOworCSAgICAvKiBVc2UgcmVhbGxvYyBzaW5jZSBtYmNzZXQtPnJhbmdlX3N0YXJ0cyBhbmQgbWJjc2V0LT5yYW5nZV9lbmRzCisJICAgICAgIGFyZSBOVUxMIGlmICpyYW5nZV9hbGxvYyA9PSAwLiAgKi8KKwkgICAgbmV3X2FycmF5X3N0YXJ0ID0gcmVfcmVhbGxvYyAobWJjc2V0LT5yYW5nZV9zdGFydHMsIHdjaGFyX3QsCisJCQkJCSAgbmV3X25yYW5nZXMpOworCSAgICBuZXdfYXJyYXlfZW5kID0gcmVfcmVhbGxvYyAobWJjc2V0LT5yYW5nZV9lbmRzLCB3Y2hhcl90LAorCQkJCQluZXdfbnJhbmdlcyk7CisKKwkgICAgaWYgKEJFIChuZXdfYXJyYXlfc3RhcnQgPT0gTlVMTCB8fCBuZXdfYXJyYXlfZW5kID09IE5VTEwsIDApKQorCSAgICAgIHJldHVybiBSRUdfRVNQQUNFOworCisJICAgIG1iY3NldC0+cmFuZ2Vfc3RhcnRzID0gbmV3X2FycmF5X3N0YXJ0OworCSAgICBtYmNzZXQtPnJhbmdlX2VuZHMgPSBuZXdfYXJyYXlfZW5kOworCSAgICAqcmFuZ2VfYWxsb2MgPSBuZXdfbnJhbmdlczsKKwkgIH0KKworCW1iY3NldC0+cmFuZ2Vfc3RhcnRzW21iY3NldC0+bnJhbmdlc10gPSBzdGFydF93YzsKKwltYmNzZXQtPnJhbmdlX2VuZHNbbWJjc2V0LT5ucmFuZ2VzKytdID0gZW5kX3djOworICAgICAgfQorCisgICAgLyogQnVpbGQgdGhlIHRhYmxlIGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KKyAgICBmb3IgKHdjID0gMDsgd2MgPCBTQkNfTUFYOyArK3djKQorICAgICAgeworCWNtcF9idWZbMl0gPSB3YzsKKwlpZiAod2NzY29sbCAoY21wX2J1ZiwgY21wX2J1ZiArIDIpIDw9IDAKKwkgICAgJiYgd2NzY29sbCAoY21wX2J1ZiArIDIsIGNtcF9idWYgKyA0KSA8PSAwKQorCSAgYml0c2V0X3NldCAoc2Jjc2V0LCB3Yyk7CisgICAgICB9CisgIH0KKyMgZWxzZSAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgeworICAgIHVuc2lnbmVkIGludCBjaDsKKyAgICBzdGFydF9jaCA9ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSICkgPyBzdGFydF9lbGVtLT5vcHIuY2gKKwkJOiAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pID8gc3RhcnRfZWxlbS0+b3ByLm5hbWVbMF0KKwkJICAgOiAwKSk7CisgICAgZW5kX2NoID0gKChlbmRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSICkgPyBlbmRfZWxlbS0+b3ByLmNoCisJICAgICAgOiAoKGVuZF9lbGVtLT50eXBlID09IENPTExfU1lNKSA/IGVuZF9lbGVtLT5vcHIubmFtZVswXQorCQkgOiAwKSk7CisgICAgaWYgKHN0YXJ0X2NoID4gZW5kX2NoKQorICAgICAgcmV0dXJuIFJFR19FUkFOR0U7CisgICAgLyogQnVpbGQgdGhlIHRhYmxlIGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KKyAgICBmb3IgKGNoID0gMDsgY2ggPCBTQkNfTUFYOyArK2NoKQorICAgICAgaWYgKHN0YXJ0X2NoIDw9IGNoICAmJiBjaCA8PSBlbmRfY2gpCisJYml0c2V0X3NldCAoc2Jjc2V0LCBjaCk7CisgIH0KKyMgZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKyNlbmRpZiAvKiBub3QgX0xJQkMgKi8KKworI2lmbmRlZiBfTElCQworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCBvbmx5IHVzZWQgaW4gY2FzZSBvZiBOT1QgX0xJQkMuLgorICAgQnVpbGQgdGhlIGNvbGxhdGluZyBlbGVtZW50IHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IE5BTUUuCisgICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgQ09MTF9TWU1fQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+Y29sbF9zeW0sIGlzIGEKKyAgIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5IHVwZGF0ZSBpdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorIyBpZmRlZiBSRV9FTkFCTEVfSTE4TgorYnVpbGRfY29sbGF0aW5nX3N5bWJvbCAoYml0c2V0X3Qgc2Jjc2V0LCByZV9jaGFyc2V0X3QgKm1iY3NldCwKKwkJCWludCAqY29sbF9zeW1fYWxsb2MsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisjIGVsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCitidWlsZF9jb2xsYXRpbmdfc3ltYm9sIChiaXRzZXRfdCBzYmNzZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisjIGVuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworeworICBzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4gKChjb25zdCBjaGFyICopIG5hbWUpOworICBpZiAoQkUgKG5hbWVfbGVuICE9IDEsIDApKQorICAgIHJldHVybiBSRUdfRUNPTExBVEU7CisgIGVsc2UKKyAgICB7CisgICAgICBiaXRzZXRfc2V0IChzYmNzZXQsIG5hbWVbMF0pOworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KK30KKyNlbmRpZiAvKiBub3QgX0xJQkMgKi8KKworLyogVGhpcyBmdW5jdGlvbiBwYXJzZSBicmFja2V0IGV4cHJlc3Npb24gbGlrZSAiW2FiY10iLCAiW2EtY10iLAorICAgIltbLmEtYS5dXSIgZXRjLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorCQkgICByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpCit7CisjaWZkZWYgX0xJQkMKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqY29sbHNlcW1iOworICBjb25zdCBjaGFyICpjb2xsc2Vxd2M7CisgIHVpbnQzMl90IG5ydWxlczsKKyAgaW50MzJfdCB0YWJsZV9zaXplOworICBjb25zdCBpbnQzMl90ICpzeW1iX3RhYmxlOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYTsKKworICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9uZW1lbnQuCisgICAgIFNlZWsgdGhlIGNvbGxhdGluZyBzeW1ib2wgZW50cnkgY29ycmVzcG9uZGluZ3MgdG8gTkFNRS4KKyAgICAgUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc3ltYm9sIGluIHRoZSBTWU1CX1RBQkxFLiAgKi8KKworICBhdXRvIGlubGluZSBpbnQzMl90CisgIF9fYXR0cmlidXRlICgoYWx3YXlzX2lubGluZSkpCisgIHNlZWtfY29sbGF0aW5nX3N5bWJvbF9lbnRyeSAobmFtZSwgbmFtZV9sZW4pCisJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWU7CisJIHNpemVfdCBuYW1lX2xlbjsKKyAgICB7CisgICAgICBpbnQzMl90IGhhc2ggPSBlbGVtX2hhc2ggKChjb25zdCBjaGFyICopIG5hbWUsIG5hbWVfbGVuKTsKKyAgICAgIGludDMyX3QgZWxlbSA9IGhhc2ggJSB0YWJsZV9zaXplOworICAgICAgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApCisJeworCSAgaW50MzJfdCBzZWNvbmQgPSBoYXNoICUgKHRhYmxlX3NpemUgLSAyKSArIDE7CisKKwkgIGRvCisJICAgIHsKKwkgICAgICAvKiBGaXJzdCBjb21wYXJlIHRoZSBoYXNoaW5nIHZhbHVlLiAgKi8KKwkgICAgICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gaGFzaAorCQkgIC8qIENvbXBhcmUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZS4gICovCisJCSAgJiYgbmFtZV9sZW4gPT0gZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdXQorCQkgIC8qIENvbXBhcmUgdGhlIG5hbWUuICAqLworCQkgICYmIG1lbWNtcCAobmFtZSwgJmV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXSArIDFdLAorCQkJICAgICBuYW1lX2xlbikgPT0gMCkKKwkJeworCQkgIC8qIFllcCwgdGhpcyBpcyB0aGUgZW50cnkuICAqLworCQkgIGJyZWFrOworCQl9CisKKwkgICAgICAvKiBOZXh0IGVudHJ5LiAgKi8KKwkgICAgICBlbGVtICs9IHNlY29uZDsKKwkgICAgfQorCSAgd2hpbGUgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApOworCX0KKyAgICAgIHJldHVybiBlbGVtOworICAgIH0KKworICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9ubWVudC4KKyAgICAgTG9vayB1cCB0aGUgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlIG9mIEJSX0VMRU0uCisgICAgIFJldHVybiB0aGUgdmFsdWUgaWYgc3VjY2VlZGVkLCBVSU5UX01BWCBvdGhlcndpc2UuICAqLworCisgIGF1dG8gaW5saW5lIHVuc2lnbmVkIGludAorICBfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorICBsb29rdXBfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChicl9lbGVtKQorCSBicmFja2V0X2VsZW1fdCAqYnJfZWxlbTsKKyAgICB7CisgICAgICBpZiAoYnJfZWxlbS0+dHlwZSA9PSBTQl9DSEFSKQorCXsKKwkgIC8qCisJICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorCSAgKi8KKwkgIGlmIChucnVsZXMgPT0gMCkKKwkgICAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIuY2hdOworCSAgZWxzZQorCSAgICB7CisJICAgICAgd2ludF90IHdjID0gX19idG93YyAoYnJfZWxlbS0+b3ByLmNoKTsKKwkgICAgICByZXR1cm4gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCB3Yyk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChicl9lbGVtLT50eXBlID09IE1CX0NIQVIpCisJeworCSAgaWYgKG5ydWxlcyAhPSAwKQorCSAgICByZXR1cm4gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCBicl9lbGVtLT5vcHIud2NoKTsKKwl9CisgICAgICBlbHNlIGlmIChicl9lbGVtLT50eXBlID09IENPTExfU1lNKQorCXsKKwkgIHNpemVfdCBzeW1fbmFtZV9sZW4gPSBzdHJsZW4gKChjaGFyICopIGJyX2VsZW0tPm9wci5uYW1lKTsKKwkgIGlmIChucnVsZXMgIT0gMCkKKwkgICAgeworCSAgICAgIGludDMyX3QgZWxlbSwgaWR4OworCSAgICAgIGVsZW0gPSBzZWVrX2NvbGxhdGluZ19zeW1ib2xfZW50cnkgKGJyX2VsZW0tPm9wci5uYW1lLAorCQkJCQkJICBzeW1fbmFtZV9sZW4pOworCSAgICAgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorCQl7CisJCSAgLyogV2UgZm91bmQgdGhlIGVudHJ5LiAgKi8KKwkJICBpZHggPSBzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV07CisJCSAgLyogU2tpcCB0aGUgbmFtZSBvZiBjb2xsYXRpbmcgZWxlbWVudCBuYW1lLiAgKi8KKwkJICBpZHggKz0gMSArIGV4dHJhW2lkeF07CisJCSAgLyogU2tpcCB0aGUgYnl0ZSBzZXF1ZW5jZSBvZiB0aGUgY29sbGF0aW5nIGVsZW1lbnQuICAqLworCQkgIGlkeCArPSAxICsgZXh0cmFbaWR4XTsKKwkJICAvKiBBZGp1c3QgZm9yIHRoZSBhbGlnbm1lbnQuICAqLworCQkgIGlkeCA9IChpZHggKyAzKSAmIH4zOworCQkgIC8qIFNraXAgdGhlIG11bHRpYnl0ZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUuICAqLworCQkgIGlkeCArPSBzaXplb2YgKHVuc2lnbmVkIGludCk7CisJCSAgLyogU2tpcCB0aGUgd2lkZSBjaGFyIHNlcXVlbmNlIG9mIHRoZSBjb2xsYXRpbmcgZWxlbWVudC4gICovCisJCSAgaWR4ICs9IHNpemVvZiAodW5zaWduZWQgaW50KSAqCisJCSAgICAoMSArICoodW5zaWduZWQgaW50ICopIChleHRyYSArIGlkeCkpOworCQkgIC8qIFJldHVybiB0aGUgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlLiAgKi8KKwkJICByZXR1cm4gKih1bnNpZ25lZCBpbnQgKikgKGV4dHJhICsgaWR4KTsKKwkJfQorCSAgICAgIGVsc2UgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IDAgJiYgc3ltX25hbWVfbGVuID09IDEpCisJCXsKKwkJICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIuICBNYXRjaCBpdCBhcyBhIHNpbmdsZSBieXRlCisJCSAgICAgY2hhcmFjdGVyLiAgKi8KKwkJICByZXR1cm4gY29sbHNlcW1iW2JyX2VsZW0tPm9wci5uYW1lWzBdXTsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChzeW1fbmFtZV9sZW4gPT0gMSkKKwkgICAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIubmFtZVswXV07CisJfQorICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgIH0KKworICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9uZW1lbnQuCisgICAgIEJ1aWxkIHRoZSByYW5nZSBleHByZXNzaW9uIHdoaWNoIHN0YXJ0cyBmcm9tIFNUQVJUX0VMRU0sIGFuZCBlbmRzCisgICAgIGF0IEVORF9FTEVNLiAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KKyAgICAgUkFOR0VfQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+cmFuZ2Vfc3RhcnRzLCBhbmQKKyAgICAgbWJjc2V0LT5yYW5nZV9lbmRzLCBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luc2Ugd2UgbWF5CisgICAgIHVwZGF0ZSBpdC4gICovCisKKyAgYXV0byBpbmxpbmUgcmVnX2VycmNvZGVfdAorICBfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorICBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwgbWJjc2V0LCByYW5nZV9hbGxvYywgc3RhcnRfZWxlbSwgZW5kX2VsZW0pCisJIHJlX2NoYXJzZXRfdCAqbWJjc2V0OworCSBpbnQgKnJhbmdlX2FsbG9jOworCSBiaXRzZXRfdCBzYmNzZXQ7CisJIGJyYWNrZXRfZWxlbV90ICpzdGFydF9lbGVtLCAqZW5kX2VsZW07CisgICAgeworICAgICAgdW5zaWduZWQgaW50IGNoOworICAgICAgdWludDMyX3Qgc3RhcnRfY29sbHNlcTsKKyAgICAgIHVpbnQzMl90IGVuZF9jb2xsc2VxOworCisgICAgICAvKiBFcXVpdmFsZW5jZSBDbGFzc2VzIGFuZCBDaGFyYWN0ZXIgQ2xhc3NlcyBjYW4ndCBiZSBhIHJhbmdlCisJIHN0YXJ0L2VuZC4gICovCisgICAgICBpZiAoQkUgKHN0YXJ0X2VsZW0tPnR5cGUgPT0gRVFVSVZfQ0xBU1MgfHwgc3RhcnRfZWxlbS0+dHlwZSA9PSBDSEFSX0NMQVNTCisJICAgICAgfHwgZW5kX2VsZW0tPnR5cGUgPT0gRVFVSVZfQ0xBU1MgfHwgZW5kX2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUywKKwkgICAgICAwKSkKKwlyZXR1cm4gUkVHX0VSQU5HRTsKKworICAgICAgc3RhcnRfY29sbHNlcSA9IGxvb2t1cF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKHN0YXJ0X2VsZW0pOworICAgICAgZW5kX2NvbGxzZXEgPSBsb29rdXBfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChlbmRfZWxlbSk7CisgICAgICAvKiBDaGVjayBzdGFydC9lbmQgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlcy4gICovCisgICAgICBpZiAoQkUgKHN0YXJ0X2NvbGxzZXEgPT0gVUlOVF9NQVggfHwgZW5kX2NvbGxzZXEgPT0gVUlOVF9NQVgsIDApKQorCXJldHVybiBSRUdfRUNPTExBVEU7CisgICAgICBpZiAoQkUgKChzeW50YXggJiBSRV9OT19FTVBUWV9SQU5HRVMpICYmIHN0YXJ0X2NvbGxzZXEgPiBlbmRfY29sbHNlcSwgMCkpCisJcmV0dXJuIFJFR19FUkFOR0U7CisKKyAgICAgIC8qIEdvdCB2YWxpZCBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWVzLCBhZGQgdGhlbSBhcyBhIG5ldyBlbnRyeS4KKwkgSG93ZXZlciwgaWYgd2UgaGF2ZSBubyBjb2xsYXRpb24gZWxlbWVudHMsIGFuZCB0aGUgY2hhcmFjdGVyIHNldAorCSBpcyBzaW5nbGUgYnl0ZSwgdGhlIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzZXQgdGhhdCB3ZQorCSBidWlsZCBiZWxvdyBzdWZmaWNlcy4gKi8KKyAgICAgIGlmIChucnVsZXMgPiAwIHx8IGRmYS0+bWJfY3VyX21heCA+IDEpCisJeworCSAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworCSAgaWYgKEJFICgqcmFuZ2VfYWxsb2MgPT0gbWJjc2V0LT5ucmFuZ2VzLCAwKSkKKwkgICAgeworCSAgICAgIC8qIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UsIG5lZWQgcmVhbGxvYy4gICovCisJICAgICAgdWludDMyX3QgKm5ld19hcnJheV9zdGFydDsKKwkgICAgICB1aW50MzJfdCAqbmV3X2FycmF5X2VuZDsKKwkgICAgICBpbnQgbmV3X25yYW5nZXM7CisKKwkgICAgICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bnJhbmdlcyBpcyAwLiAgKi8KKwkgICAgICBuZXdfbnJhbmdlcyA9IDIgKiBtYmNzZXQtPm5yYW5nZXMgKyAxOworCSAgICAgIG5ld19hcnJheV9zdGFydCA9IHJlX3JlYWxsb2MgKG1iY3NldC0+cmFuZ2Vfc3RhcnRzLCB1aW50MzJfdCwKKwkJCQkJICAgIG5ld19ucmFuZ2VzKTsKKwkgICAgICBuZXdfYXJyYXlfZW5kID0gcmVfcmVhbGxvYyAobWJjc2V0LT5yYW5nZV9lbmRzLCB1aW50MzJfdCwKKwkJCQkJICBuZXdfbnJhbmdlcyk7CisKKwkgICAgICBpZiAoQkUgKG5ld19hcnJheV9zdGFydCA9PSBOVUxMIHx8IG5ld19hcnJheV9lbmQgPT0gTlVMTCwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCisJICAgICAgbWJjc2V0LT5yYW5nZV9zdGFydHMgPSBuZXdfYXJyYXlfc3RhcnQ7CisJICAgICAgbWJjc2V0LT5yYW5nZV9lbmRzID0gbmV3X2FycmF5X2VuZDsKKwkgICAgICAqcmFuZ2VfYWxsb2MgPSBuZXdfbnJhbmdlczsKKwkgICAgfQorCisJICBtYmNzZXQtPnJhbmdlX3N0YXJ0c1ttYmNzZXQtPm5yYW5nZXNdID0gc3RhcnRfY29sbHNlcTsKKwkgIG1iY3NldC0+cmFuZ2VfZW5kc1ttYmNzZXQtPm5yYW5nZXMrK10gPSBlbmRfY29sbHNlcTsKKwl9CisKKyAgICAgIC8qIEJ1aWxkIHRoZSB0YWJsZSBmb3Igc2luZ2xlIGJ5dGUgY2hhcmFjdGVycy4gICovCisgICAgICBmb3IgKGNoID0gMDsgY2ggPCBTQkNfTUFYOyBjaCsrKQorCXsKKwkgIHVpbnQzMl90IGNoX2NvbGxzZXE7CisJICAvKgorCSAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKwkgICovCisJICBpZiAobnJ1bGVzID09IDApCisJICAgIGNoX2NvbGxzZXEgPSBjb2xsc2VxbWJbY2hdOworCSAgZWxzZQorCSAgICBjaF9jb2xsc2VxID0gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCBfX2J0b3djIChjaCkpOworCSAgaWYgKHN0YXJ0X2NvbGxzZXEgPD0gY2hfY29sbHNlcSAmJiBjaF9jb2xsc2VxIDw9IGVuZF9jb2xsc2VxKQorCSAgICBiaXRzZXRfc2V0IChzYmNzZXQsIGNoKTsKKwl9CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorCisgIC8qIExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCB1c2VkIGluIF9MSUJDIGVudmlyb25lbWVudC4KKyAgICAgQnVpbGQgdGhlIGNvbGxhdGluZyBlbGVtZW50IHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IE5BTUUuCisgICAgIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBTQkNTRVQuCisgICAgIENPTExfU1lNX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNzZXQtPmNvbGxfc3ltLCBpcyBhCisgICAgIHBvaW50ZXIgYXJndW1lbnQgc2luc2Ugd2UgbWF5IHVwZGF0ZSBpdC4gICovCisKKyAgYXV0byBpbmxpbmUgcmVnX2VycmNvZGVfdAorICBfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorICBidWlsZF9jb2xsYXRpbmdfc3ltYm9sIChzYmNzZXQsIG1iY3NldCwgY29sbF9zeW1fYWxsb2MsIG5hbWUpCisJIHJlX2NoYXJzZXRfdCAqbWJjc2V0OworCSBpbnQgKmNvbGxfc3ltX2FsbG9jOworCSBiaXRzZXRfdCBzYmNzZXQ7CisJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWU7CisgICAgeworICAgICAgaW50MzJfdCBlbGVtLCBpZHg7CisgICAgICBzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4gKChjb25zdCBjaGFyICopIG5hbWUpOworICAgICAgaWYgKG5ydWxlcyAhPSAwKQorCXsKKwkgIGVsZW0gPSBzZWVrX2NvbGxhdGluZ19zeW1ib2xfZW50cnkgKG5hbWUsIG5hbWVfbGVuKTsKKwkgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorCSAgICB7CisJICAgICAgLyogV2UgZm91bmQgdGhlIGVudHJ5LiAgKi8KKwkgICAgICBpZHggPSBzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV07CisJICAgICAgLyogU2tpcCB0aGUgbmFtZSBvZiBjb2xsYXRpbmcgZWxlbWVudCBuYW1lLiAgKi8KKwkgICAgICBpZHggKz0gMSArIGV4dHJhW2lkeF07CisJICAgIH0KKwkgIGVsc2UgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IDAgJiYgbmFtZV9sZW4gPT0gMSkKKwkgICAgeworCSAgICAgIC8qIE5vIHZhbGlkIGNoYXJhY3RlciwgdHJlYXQgaXQgYXMgYSBub3JtYWwKKwkJIGNoYXJhY3Rlci4gICovCisJICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBuYW1lWzBdKTsKKwkgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKworCSAgLyogR290IHZhbGlkIGNvbGxhdGlvbiBzZXF1ZW5jZSwgYWRkIGl0IGFzIGEgbmV3IGVudHJ5LiAgKi8KKwkgIC8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KKwkgIGlmIChCRSAoKmNvbGxfc3ltX2FsbG9jID09IG1iY3NldC0+bmNvbGxfc3ltcywgMCkpCisJICAgIHsKKwkgICAgICAvKiBOb3QgZW5vdWdoLCByZWFsbG9jIGl0LiAgKi8KKwkgICAgICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bmNvbGxfc3ltcyBpcyAwLiAgKi8KKwkgICAgICBpbnQgbmV3X2NvbGxfc3ltX2FsbG9jID0gMiAqIG1iY3NldC0+bmNvbGxfc3ltcyArIDE7CisJICAgICAgLyogVXNlIHJlYWxsb2Mgc2luY2UgbWJjc2V0LT5jb2xsX3N5bXMgaXMgTlVMTAorCQkgaWYgKmFsbG9jID09IDAuICAqLworCSAgICAgIGludDMyX3QgKm5ld19jb2xsX3N5bXMgPSByZV9yZWFsbG9jIChtYmNzZXQtPmNvbGxfc3ltcywgaW50MzJfdCwKKwkJCQkJCSAgIG5ld19jb2xsX3N5bV9hbGxvYyk7CisJICAgICAgaWYgKEJFIChuZXdfY29sbF9zeW1zID09IE5VTEwsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICBtYmNzZXQtPmNvbGxfc3ltcyA9IG5ld19jb2xsX3N5bXM7CisJICAgICAgKmNvbGxfc3ltX2FsbG9jID0gbmV3X2NvbGxfc3ltX2FsbG9jOworCSAgICB9CisJICBtYmNzZXQtPmNvbGxfc3ltc1ttYmNzZXQtPm5jb2xsX3N5bXMrK10gPSBpZHg7CisJICByZXR1cm4gUkVHX05PRVJST1I7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChCRSAobmFtZV9sZW4gIT0gMSwgMCkpCisJICAgIHJldHVybiBSRUdfRUNPTExBVEU7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBiaXRzZXRfc2V0IChzYmNzZXQsIG5hbWVbMF0pOworCSAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICByZV90b2tlbl90IGJyX3Rva2VuOworICByZV9iaXRzZXRfcHRyX3Qgc2Jjc2V0OworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHJlX2NoYXJzZXRfdCAqbWJjc2V0OworICBpbnQgY29sbF9zeW1fYWxsb2MgPSAwLCByYW5nZV9hbGxvYyA9IDAsIG1iY2hhcl9hbGxvYyA9IDA7CisgIGludCBlcXVpdl9jbGFzc19hbGxvYyA9IDAsIGNoYXJfY2xhc3NfYWxsb2MgPSAwOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICBpbnQgbm9uX21hdGNoID0gMDsKKyAgYmluX3RyZWVfdCAqd29ya190cmVlOworICBpbnQgdG9rZW5fbGVuOworICBpbnQgZmlyc3Rfcm91bmQgPSAxOworI2lmZGVmIF9MSUJDCisgIGNvbGxzZXFtYiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CisgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgIGlmIChucnVsZXMpCisgICAgeworICAgICAgLyoKKyAgICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKyAgICAgICovCisgICAgICBjb2xsc2Vxd2MgPSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUVdDKTsKKyAgICAgIHRhYmxlX3NpemUgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CKTsKKyAgICAgIHN5bWJfdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKwkJCQkJCSAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CKTsKKyAgICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCQkgICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworICAgIH0KKyNlbmRpZgorICBzYmNzZXQgPSAocmVfYml0c2V0X3B0cl90KSBjYWxsb2MgKHNpemVvZiAoYml0c2V0X3QpLCAxKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBtYmNzZXQgPSAocmVfY2hhcnNldF90ICopIGNhbGxvYyAoc2l6ZW9mIChyZV9jaGFyc2V0X3QpLCAxKTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChCRSAoc2Jjc2V0ID09IE5VTEwgfHwgbWJjc2V0ID09IE5VTEwsIDApKQorI2Vsc2UKKyAgaWYgKEJFIChzYmNzZXQgPT0gTlVMTCwgMCkpCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gRU5EX09GX1JFLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX0JBRFBBVDsKKyAgICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisgICAgfQorICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfTk9OX01BVENIX0xJU1QpCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBtYmNzZXQtPm5vbl9tYXRjaCA9IDE7CisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgICAgICBub25fbWF0Y2ggPSAxOworICAgICAgaWYgKHN5bnRheCAmIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSkKKwliaXRzZXRfc2V0IChzYmNzZXQsICdcbicpOworICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCBhIHRva2VuLiAgKi8KKyAgICAgIHRva2VuX2xlbiA9IHBlZWtfdG9rZW5fYnJhY2tldCAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKyAgICAgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gRU5EX09GX1JFLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0JBRFBBVDsKKwkgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJfQorICAgIH0KKworICAvKiBXZSB0cmVhdCB0aGUgZmlyc3QgJ10nIGFzIGEgbm9ybWFsIGNoYXJhY3Rlci4gICovCisgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9DTE9TRV9CUkFDS0VUKQorICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGJyYWNrZXRfZWxlbV90IHN0YXJ0X2VsZW0sIGVuZF9lbGVtOworICAgICAgdW5zaWduZWQgY2hhciBzdGFydF9uYW1lX2J1ZltCUkFDS0VUX05BTUVfQlVGX1NJWkVdOworICAgICAgdW5zaWduZWQgY2hhciBlbmRfbmFtZV9idWZbQlJBQ0tFVF9OQU1FX0JVRl9TSVpFXTsKKyAgICAgIHJlZ19lcnJjb2RlX3QgcmV0OworICAgICAgaW50IHRva2VuX2xlbjIgPSAwLCBpc19yYW5nZV9leHAgPSAwOworICAgICAgcmVfdG9rZW5fdCB0b2tlbjI7CisKKyAgICAgIHN0YXJ0X2VsZW0ub3ByLm5hbWUgPSBzdGFydF9uYW1lX2J1ZjsKKyAgICAgIHJldCA9IHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoJnN0YXJ0X2VsZW0sIHJlZ2V4cCwgdG9rZW4sIHRva2VuX2xlbiwgZGZhLAorCQkJCSAgIHN5bnRheCwgZmlyc3Rfcm91bmQpOworICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCXsKKwkgICplcnIgPSByZXQ7CisJICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCX0KKyAgICAgIGZpcnN0X3JvdW5kID0gMDsKKworICAgICAgLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXh0IHRva2VuLiAgV2UgbmVlZCBpdCBpbiBhbnkgY2FzZS4gICovCisgICAgICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyAgICAgIC8qIERvIG5vdCBjaGVjayBmb3IgcmFuZ2VzIGlmIHdlIGtub3cgdGhleSBhcmUgbm90IGFsbG93ZWQuICAqLworICAgICAgaWYgKHN0YXJ0X2VsZW0udHlwZSAhPSBDSEFSX0NMQVNTICYmIHN0YXJ0X2VsZW0udHlwZSAhPSBFUVVJVl9DTEFTUykKKwl7CisJICBpZiAoQkUgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSwgMCkpCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0VCUkFDSzsKKwkgICAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCSAgICB9CisJICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0hBUlNFVF9SQU5HRSkKKwkgICAgeworCSAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIHRva2VuX2xlbik7IC8qIFNraXAgJy0nLiAgKi8KKwkgICAgICB0b2tlbl9sZW4yID0gcGVla190b2tlbl9icmFja2V0ICgmdG9rZW4yLCByZWdleHAsIHN5bnRheCk7CisJICAgICAgaWYgKEJFICh0b2tlbjIudHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorCQl7CisJCSAgKmVyciA9IFJFR19FQlJBQ0s7CisJCSAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkJfQorCSAgICAgIGlmICh0b2tlbjIudHlwZSA9PSBPUF9DTE9TRV9CUkFDS0VUKQorCQl7CisJCSAgLyogV2UgdHJlYXQgdGhlIGxhc3QgJy0nIGFzIGEgbm9ybWFsIGNoYXJhY3Rlci4gICovCisJCSAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgLXRva2VuX2xlbik7CisJCSAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisJCX0KKwkgICAgICBlbHNlCisJCWlzX3JhbmdlX2V4cCA9IDE7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChpc19yYW5nZV9leHAgPT0gMSkKKwl7CisJICBlbmRfZWxlbS5vcHIubmFtZSA9IGVuZF9uYW1lX2J1ZjsKKwkgIHJldCA9IHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoJmVuZF9lbGVtLCByZWdleHAsICZ0b2tlbjIsIHRva2VuX2xlbjIsCisJCQkJICAgICAgIGRmYSwgc3ludGF4LCAxKTsKKwkgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgICplcnIgPSByZXQ7CisJICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgfQorCisJICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyNpZmRlZiBfTElCQworCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LCBtYmNzZXQsICZyYW5nZV9hbGxvYywKKwkJCQkgICZzdGFydF9lbGVtLCAmZW5kX2VsZW0pOworI2Vsc2UKKyMgaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICplcnIgPSBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwKKwkJCQkgIGRmYS0+bWJfY3VyX21heCA+IDEgPyBtYmNzZXQgOiBOVUxMLAorCQkJCSAgJnJhbmdlX2FsbG9jLCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyMgZWxzZQorCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyMgZW5kaWYKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCSAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwl9CisgICAgICBlbHNlCisJeworCSAgc3dpdGNoIChzdGFydF9lbGVtLnR5cGUpCisJICAgIHsKKwkgICAgY2FzZSBTQl9DSEFSOgorCSAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgc3RhcnRfZWxlbS5vcHIuY2gpOworCSAgICAgIGJyZWFrOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgIGNhc2UgTUJfQ0hBUjoKKwkgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgKi8KKwkgICAgICBpZiAoQkUgKG1iY2hhcl9hbGxvYyA9PSBtYmNzZXQtPm5tYmNoYXJzLCAwKSkKKwkJeworCQkgIHdjaGFyX3QgKm5ld19tYmNoYXJzOworCQkgIC8qIE5vdCBlbm91Z2gsIHJlYWxsb2MgaXQuICAqLworCQkgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5ubWJjaGFycyBpcyAwLiAgKi8KKwkJICBtYmNoYXJfYWxsb2MgPSAyICogbWJjc2V0LT5ubWJjaGFycyArIDE7CisJCSAgLyogVXNlIHJlYWxsb2Mgc2luY2UgYXJyYXkgaXMgTlVMTCBpZiAqYWxsb2MgPT0gMC4gICovCisJCSAgbmV3X21iY2hhcnMgPSByZV9yZWFsbG9jIChtYmNzZXQtPm1iY2hhcnMsIHdjaGFyX3QsCisJCQkJCSAgICBtYmNoYXJfYWxsb2MpOworCQkgIGlmIChCRSAobmV3X21iY2hhcnMgPT0gTlVMTCwgMCkpCisJCSAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKwkJICBtYmNzZXQtPm1iY2hhcnMgPSBuZXdfbWJjaGFyczsKKwkJfQorCSAgICAgIG1iY3NldC0+bWJjaGFyc1ttYmNzZXQtPm5tYmNoYXJzKytdID0gc3RhcnRfZWxlbS5vcHIud2NoOworCSAgICAgIGJyZWFrOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICAgIGNhc2UgRVFVSVZfQ0xBU1M6CisJICAgICAgKmVyciA9IGJ1aWxkX2VxdWl2X2NsYXNzIChzYmNzZXQsCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkJCQkJbWJjc2V0LCAmZXF1aXZfY2xhc3NfYWxsb2MsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkJCQkJc3RhcnRfZWxlbS5vcHIubmFtZSk7CisJICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBDT0xMX1NZTToKKwkgICAgICAqZXJyID0gYnVpbGRfY29sbGF0aW5nX3N5bWJvbCAoc2Jjc2V0LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJCQkJCSAgICAgbWJjc2V0LCAmY29sbF9zeW1fYWxsb2MsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkJCQkJICAgICBzdGFydF9lbGVtLm9wci5uYW1lKTsKKwkgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIENIQVJfQ0xBU1M6CisJICAgICAgKmVyciA9IGJ1aWxkX2NoYXJjbGFzcyAocmVnZXhwLT50cmFucywgc2Jjc2V0LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJCQkJICAgICAgbWJjc2V0LCAmY2hhcl9jbGFzc19hbGxvYywKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCQkJCSAgICAgIChjb25zdCBjaGFyICopIHN0YXJ0X2VsZW0ub3ByLm5hbWUsIHN5bnRheCk7CisJICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgICBhc3NlcnQgKDApOworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgaWYgKEJFICh0b2tlbi0+dHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorCXsKKwkgICplcnIgPSBSRUdfRUJSQUNLOworCSAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwl9CisgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfQlJBQ0tFVCkKKwlicmVhazsKKyAgICB9CisKKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCBhIHRva2VuLiAgKi8KKworICAvKiBJZiBpdCBpcyBub24tbWF0Y2hpbmcgbGlzdC4gICovCisgIGlmIChub25fbWF0Y2gpCisgICAgYml0c2V0X25vdCAoc2Jjc2V0KTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIEVuc3VyZSBvbmx5IHNpbmdsZSBieXRlIGNoYXJhY3RlcnMgYXJlIHNldC4gICovCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorICAgIGJpdHNldF9tYXNrIChzYmNzZXQsIGRmYS0+c2JfY2hhcik7CisKKyAgaWYgKG1iY3NldC0+bm1iY2hhcnMgfHwgbWJjc2V0LT5uY29sbF9zeW1zIHx8IG1iY3NldC0+bmVxdWl2X2NsYXNzZXMKKyAgICAgIHx8IG1iY3NldC0+bnJhbmdlcyB8fCAoZGZhLT5tYl9jdXJfbWF4ID4gMSAmJiAobWJjc2V0LT5uY2hhcl9jbGFzc2VzCisJCQkJCQkgICAgIHx8IG1iY3NldC0+bm9uX21hdGNoKSkpCisgICAgeworICAgICAgYmluX3RyZWVfdCAqbWJjX3RyZWU7CisgICAgICBpbnQgc2JjX2lkeDsKKyAgICAgIC8qIEJ1aWxkIGEgdHJlZSBmb3IgY29tcGxleCBicmFja2V0LiAgKi8KKyAgICAgIGRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgYnJfdG9rZW4udHlwZSA9IENPTVBMRVhfQlJBQ0tFVDsKKyAgICAgIGJyX3Rva2VuLm9wci5tYmNzZXQgPSBtYmNzZXQ7CisgICAgICBtYmNfdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7CisgICAgICBpZiAoQkUgKG1iY190cmVlID09IE5VTEwsIDApKQorCWdvdG8gcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOworICAgICAgZm9yIChzYmNfaWR4ID0gMDsgc2JjX2lkeCA8IEJJVFNFVF9XT1JEUzsgKytzYmNfaWR4KQorCWlmIChzYmNzZXRbc2JjX2lkeF0pCisJICBicmVhazsKKyAgICAgIC8qIElmIHRoZXJlIGFyZSBubyBiaXRzIHNldCBpbiBzYmNzZXQsIHRoZXJlIGlzIG5vIHBvaW50CisJIG9mIGhhdmluZyBib3RoIFNJTVBMRV9CUkFDS0VUIGFuZCBDT01QTEVYX0JSQUNLRVQuICAqLworICAgICAgaWYgKHNiY19pZHggPCBCSVRTRVRfV09SRFMpCisJeworCSAgLyogQnVpbGQgYSB0cmVlIGZvciBzaW1wbGUgYnJhY2tldC4gICovCisJICBicl90b2tlbi50eXBlID0gU0lNUExFX0JSQUNLRVQ7CisJICBicl90b2tlbi5vcHIuc2Jjc2V0ID0gc2Jjc2V0OworCSAgd29ya190cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJmJyX3Rva2VuKTsKKwkgIGlmIChCRSAod29ya190cmVlID09IE5VTEwsIDApKQorCSAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKworCSAgLyogVGhlbiBqb2luIHRoZW0gYnkgQUxUIG5vZGUuICAqLworCSAgd29ya190cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgd29ya190cmVlLCBtYmNfdHJlZSwgT1BfQUxUKTsKKwkgIGlmIChCRSAod29ya190cmVlID09IE5VTEwsIDApKQorCSAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKwl9CisgICAgICBlbHNlCisJeworCSAgcmVfZnJlZSAoc2Jjc2V0KTsKKwkgIHdvcmtfdHJlZSA9IG1iY190cmVlOworCX0KKyAgICB9CisgIGVsc2UKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGZyZWVfY2hhcnNldCAobWJjc2V0KTsKKyNlbmRpZgorICAgICAgLyogQnVpbGQgYSB0cmVlIGZvciBzaW1wbGUgYnJhY2tldC4gICovCisgICAgICBicl90b2tlbi50eXBlID0gU0lNUExFX0JSQUNLRVQ7CisgICAgICBicl90b2tlbi5vcHIuc2Jjc2V0ID0gc2Jjc2V0OworICAgICAgd29ya190cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJmJyX3Rva2VuKTsKKyAgICAgIGlmIChCRSAod29ya190cmVlID09IE5VTEwsIDApKQorCWdvdG8gcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOworICAgIH0KKyAgcmV0dXJuIHdvcmtfdHJlZTsKKworIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZToKKyAgKmVyciA9IFJFR19FU1BBQ0U7CisgcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm46CisgIHJlX2ZyZWUgKHNiY3NldCk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgIHJldHVybiBOVUxMOworfQorCisvKiBQYXJzZSBhbiBlbGVtZW50IGluIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcGFyc2VfYnJhY2tldF9lbGVtZW50IChicmFja2V0X2VsZW1fdCAqZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKwkJICAgICAgIHJlX3Rva2VuX3QgKnRva2VuLCBpbnQgdG9rZW5fbGVuLCByZV9kZmFfdCAqZGZhLAorCQkgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IGFjY2VwdF9oeXBoZW4pCit7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaW50IGN1cl9jaGFyX3NpemU7CisgIGN1cl9jaGFyX3NpemUgPSByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChyZWdleHAsIHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApKTsKKyAgaWYgKGN1cl9jaGFyX3NpemUgPiAxKQorICAgIHsKKyAgICAgIGVsZW0tPnR5cGUgPSBNQl9DSEFSOworICAgICAgZWxlbS0+b3ByLndjaCA9IHJlX3N0cmluZ193Y2hhcl9hdCAocmVnZXhwLCByZV9zdHJpbmdfY3VyX2lkeCAocmVnZXhwKSk7CisgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCBjdXJfY2hhcl9zaXplKTsKKyAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCBhIHRva2VuLiAgKi8KKyAgaWYgKHRva2VuLT50eXBlID09IE9QX09QRU5fQ09MTF9FTEVNIHx8IHRva2VuLT50eXBlID09IE9QX09QRU5fQ0hBUl9DTEFTUworICAgICAgfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9FUVVJVl9DTEFTUykKKyAgICByZXR1cm4gcGFyc2VfYnJhY2tldF9zeW1ib2wgKGVsZW0sIHJlZ2V4cCwgdG9rZW4pOworICBpZiAoQkUgKHRva2VuLT50eXBlID09IE9QX0NIQVJTRVRfUkFOR0UsIDApICYmICFhY2NlcHRfaHlwaGVuKQorICAgIHsKKyAgICAgIC8qIEEgJy0nIG11c3Qgb25seSBhcHBlYXIgYXMgYW55dGhpbmcgYnV0IGEgcmFuZ2UgaW5kaWNhdG9yIGJlZm9yZQorCSB0aGUgY2xvc2luZyBicmFja2V0LiAgRXZlcnl0aGluZyBlbHNlIGlzIGFuIGVycm9yLiAgKi8KKyAgICAgIHJlX3Rva2VuX3QgdG9rZW4yOworICAgICAgKHZvaWQpIHBlZWtfdG9rZW5fYnJhY2tldCAoJnRva2VuMiwgcmVnZXhwLCBzeW50YXgpOworICAgICAgaWYgKHRva2VuMi50eXBlICE9IE9QX0NMT1NFX0JSQUNLRVQpCisJLyogVGhlIGFjdHVhbCBlcnJvciB2YWx1ZSBpcyBub3Qgc3RhbmRhcmRpemVkIHNpbmNlIHRoaXMgd2hvbGUKKwkgICBjYXNlIGlzIHVuZGVmaW5lZC4gIEJ1dCBFUkFOR0UgbWFrZXMgZ29vZCBzZW5zZS4gICovCisJcmV0dXJuIFJFR19FUkFOR0U7CisgICAgfQorICBlbGVtLT50eXBlID0gU0JfQ0hBUjsKKyAgZWxlbS0+b3ByLmNoID0gdG9rZW4tPm9wci5jOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFBhcnNlIGEgYnJhY2tldCBzeW1ib2wgaW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gIEJyYWNrZXQgc3ltYm9scyBhcmUKKyAgIHN1Y2ggYXMgWzo8Y2hhcmFjdGVyX2NsYXNzPjpdLCBbLjxjb2xsYXRpbmdfZWxlbWVudD4uXSwgYW5kCisgICBbPTxlcXVpdmFsZW50X2NsYXNzPj1dLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3BhcnNlX2JyYWNrZXRfc3ltYm9sIChicmFja2V0X2VsZW1fdCAqZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKwkJICAgICAgcmVfdG9rZW5fdCAqdG9rZW4pCit7CisgIHVuc2lnbmVkIGNoYXIgY2gsIGRlbGltID0gdG9rZW4tPm9wci5jOworICBpbnQgaSA9IDA7CisgIGlmIChyZV9zdHJpbmdfZW9pKHJlZ2V4cCkpCisgICAgcmV0dXJuIFJFR19FQlJBQ0s7CisgIGZvciAoOzsgKytpKQorICAgIHsKKyAgICAgIGlmIChpID49IEJSQUNLRVRfTkFNRV9CVUZfU0laRSkKKwlyZXR1cm4gUkVHX0VCUkFDSzsKKyAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0NIQVJfQ0xBU1MpCisJY2ggPSByZV9zdHJpbmdfZmV0Y2hfYnl0ZV9jYXNlIChyZWdleHApOworICAgICAgZWxzZQorCWNoID0gcmVfc3RyaW5nX2ZldGNoX2J5dGUgKHJlZ2V4cCk7CisgICAgICBpZiAocmVfc3RyaW5nX2VvaShyZWdleHApKQorCXJldHVybiBSRUdfRUJSQUNLOworICAgICAgaWYgKGNoID09IGRlbGltICYmIHJlX3N0cmluZ19wZWVrX2J5dGUgKHJlZ2V4cCwgMCkgPT0gJ10nKQorCWJyZWFrOworICAgICAgZWxlbS0+b3ByLm5hbWVbaV0gPSBjaDsKKyAgICB9CisgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIDEpOworICBlbGVtLT5vcHIubmFtZVtpXSA9ICdcMCc7CisgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgIGNhc2UgT1BfT1BFTl9DT0xMX0VMRU06CisgICAgICBlbGVtLT50eXBlID0gQ09MTF9TWU07CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fRVFVSVZfQ0xBU1M6CisgICAgICBlbGVtLT50eXBlID0gRVFVSVZfQ0xBU1M7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fQ0hBUl9DTEFTUzoKKyAgICAgIGVsZW0tPnR5cGUgPSBDSEFSX0NMQVNTOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisgIC8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAuCisgICAgIEJ1aWxkIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyB3aGljaCBpcyByZXByZXNlbnRlZCBieSBOQU1FLgorICAgICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBFUVVJVl9DTEFTU19BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5lcXVpdl9jbGFzc2VzLAorICAgICBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luc2Ugd2UgbWF5IHVwZGF0ZSBpdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK2J1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIHJlX2NoYXJzZXRfdCAqbWJjc2V0LAorCQkgICBpbnQgKmVxdWl2X2NsYXNzX2FsbG9jLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorI2Vsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCitidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworeworI2lmZGVmIF9MSUJDCisgIHVpbnQzMl90IG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgIGlmIChucnVsZXMgIT0gMCkKKyAgICB7CisgICAgICBjb25zdCBpbnQzMl90ICp0YWJsZSwgKmluZGlyZWN0OworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhLCAqY3A7CisgICAgICB1bnNpZ25lZCBjaGFyIGNoYXJfYnVmWzJdOworICAgICAgaW50MzJfdCBpZHgxLCBpZHgyOworICAgICAgdW5zaWduZWQgaW50IGNoOworICAgICAgc2l6ZV90IGxlbjsKKyAgICAgIC8qIFRoaXMgI2luY2x1ZGUgZGVmaW5lcyBhIGxvY2FsIGZ1bmN0aW9uISAgKi8KKyMgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorICAgICAgLyogQ2FsY3VsYXRlIHRoZSBpbmRleCBmb3IgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworICAgICAgY3AgPSBuYW1lOworICAgICAgdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisgICAgICB3ZWlnaHRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCSAgICAgICBfTkxfQ09MTEFURV9XRUlHSFRNQik7CisgICAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJICAgX05MX0NPTExBVEVfRVhUUkFNQik7CisgICAgICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisgICAgICBpZHgxID0gZmluZGlkeCAoJmNwKTsKKyAgICAgIGlmIChCRSAoaWR4MSA9PSAwIHx8IGNwIDwgbmFtZSArIHN0cmxlbiAoKGNvbnN0IGNoYXIgKikgbmFtZSksIDApKQorCS8qIFRoaXMgaXNuJ3QgYSB2YWxpZCBjaGFyYWN0ZXIuICAqLworCXJldHVybiBSRUdfRUNPTExBVEU7CisKKyAgICAgIC8qIEJ1aWxkIHNpbmdsZSBieXRlIG1hdGNpbmcgdGFibGUgZm9yIHRoaXMgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworICAgICAgY2hhcl9idWZbMV0gPSAodW5zaWduZWQgY2hhcikgJ1wwJzsKKyAgICAgIGxlbiA9IHdlaWdodHNbaWR4MSAmIDB4ZmZmZmZmXTsKKyAgICAgIGZvciAoY2ggPSAwOyBjaCA8IFNCQ19NQVg7ICsrY2gpCisJeworCSAgY2hhcl9idWZbMF0gPSBjaDsKKwkgIGNwID0gY2hhcl9idWY7CisJICBpZHgyID0gZmluZGlkeCAoJmNwKTsKKy8qCisJICBpZHgyID0gdGFibGVbY2hdOworKi8KKwkgIGlmIChpZHgyID09IDApCisJICAgIC8qIFRoaXMgaXNuJ3QgYSB2YWxpZCBjaGFyYWN0ZXIuICAqLworCSAgICBjb250aW51ZTsKKwkgIC8qIENvbXBhcmUgb25seSBpZiB0aGUgbGVuZ3RoIG1hdGNoZXMgYW5kIHRoZSBjb2xsYXRpb24gcnVsZQorCSAgICAgaW5kZXggaXMgdGhlIHNhbWUuICAqLworCSAgaWYgKGxlbiA9PSB3ZWlnaHRzW2lkeDIgJiAweGZmZmZmZl0gJiYgKGlkeDEgPj4gMjQpID09IChpZHgyID4+IDI0KSkKKwkgICAgeworCSAgICAgIGludCBjbnQgPSAwOworCisJICAgICAgd2hpbGUgKGNudCA8PSBsZW4gJiYKKwkJICAgICB3ZWlnaHRzWyhpZHgxICYgMHhmZmZmZmYpICsgMSArIGNudF0KKwkJICAgICA9PSB3ZWlnaHRzWyhpZHgyICYgMHhmZmZmZmYpICsgMSArIGNudF0pCisJCSsrY250OworCisJICAgICAgaWYgKGNudCA+IGxlbikKKwkJYml0c2V0X3NldCAoc2Jjc2V0LCBjaCk7CisJICAgIH0KKwl9CisgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgKi8KKyAgICAgIGlmIChCRSAoKmVxdWl2X2NsYXNzX2FsbG9jID09IG1iY3NldC0+bmVxdWl2X2NsYXNzZXMsIDApKQorCXsKKwkgIC8qIE5vdCBlbm91Z2gsIHJlYWxsb2MgaXQuICAqLworCSAgLyogKzEgaW4gY2FzZSBvZiBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzIGlzIDAuICAqLworCSAgaW50IG5ld19lcXVpdl9jbGFzc19hbGxvYyA9IDIgKiBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzICsgMTsKKwkgIC8qIFVzZSByZWFsbG9jIHNpbmNlIHRoZSBhcnJheSBpcyBOVUxMIGlmICphbGxvYyA9PSAwLiAgKi8KKwkgIGludDMyX3QgKm5ld19lcXVpdl9jbGFzc2VzID0gcmVfcmVhbGxvYyAobWJjc2V0LT5lcXVpdl9jbGFzc2VzLAorCQkJCQkJICAgaW50MzJfdCwKKwkJCQkJCSAgIG5ld19lcXVpdl9jbGFzc19hbGxvYyk7CisJICBpZiAoQkUgKG5ld19lcXVpdl9jbGFzc2VzID09IE5VTEwsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIG1iY3NldC0+ZXF1aXZfY2xhc3NlcyA9IG5ld19lcXVpdl9jbGFzc2VzOworCSAgKmVxdWl2X2NsYXNzX2FsbG9jID0gbmV3X2VxdWl2X2NsYXNzX2FsbG9jOworCX0KKyAgICAgIG1iY3NldC0+ZXF1aXZfY2xhc3Nlc1ttYmNzZXQtPm5lcXVpdl9jbGFzc2VzKytdID0gaWR4MTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZiAvKiBfTElCQyAqLworICAgIHsKKyAgICAgIGlmIChCRSAoc3RybGVuICgoY29uc3QgY2hhciAqKSBuYW1lKSAhPSAxLCAwKSkKKwlyZXR1cm4gUkVHX0VDT0xMQVRFOworICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCAqbmFtZSk7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKyAgLyogSGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cC4KKyAgICAgQnVpbGQgdGhlIGNoYXJhY3RlciBjbGFzcyB3aGljaCBpcyByZXByZXNlbnRlZCBieSBOQU1FLgorICAgICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBDSEFSX0NMQVNTX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNzZXQtPmNoYXJfY2xhc3NlcywKKyAgICAgaXMgYSBwb2ludGVyIGFyZ3VtZW50IHNpbnNlIHdlIG1heSB1cGRhdGUgaXQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCitidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBiaXRzZXRfdCBzYmNzZXQsCisJCSByZV9jaGFyc2V0X3QgKm1iY3NldCwgaW50ICpjaGFyX2NsYXNzX2FsbG9jLAorCQkgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwgcmVnX3N5bnRheF90IHN5bnRheCkKKyNlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgYml0c2V0X3Qgc2Jjc2V0LAorCQkgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwgcmVnX3N5bnRheF90IHN5bnRheCkKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3sKKyAgaW50IGk7CisKKyAgLyogSW4gY2FzZSBvZiBSRUdfSUNBU0UgInVwcGVyIiBhbmQgImxvd2VyIiBtYXRjaCB0aGUgYm90aCBvZgorICAgICB1cHBlciBhbmQgbG93ZXIgY2FzZXMuICAqLworICBpZiAoKHN5bnRheCAmIFJFX0lDQVNFKQorICAgICAgJiYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInVwcGVyIikgPT0gMCB8fCBzdHJjbXAgKGNsYXNzX25hbWUsICJsb3dlciIpID09IDApKQorICAgIGNsYXNzX25hbWUgPSAiYWxwaGEiOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworICBpZiAoQkUgKCpjaGFyX2NsYXNzX2FsbG9jID09IG1iY3NldC0+bmNoYXJfY2xhc3NlcywgMCkpCisgICAgeworICAgICAgLyogTm90IGVub3VnaCwgcmVhbGxvYyBpdC4gICovCisgICAgICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bmNoYXJfY2xhc3NlcyBpcyAwLiAgKi8KKyAgICAgIGludCBuZXdfY2hhcl9jbGFzc19hbGxvYyA9IDIgKiBtYmNzZXQtPm5jaGFyX2NsYXNzZXMgKyAxOworICAgICAgLyogVXNlIHJlYWxsb2Mgc2luY2UgYXJyYXkgaXMgTlVMTCBpZiAqYWxsb2MgPT0gMC4gICovCisgICAgICB3Y3R5cGVfdCAqbmV3X2NoYXJfY2xhc3NlcyA9IHJlX3JlYWxsb2MgKG1iY3NldC0+Y2hhcl9jbGFzc2VzLCB3Y3R5cGVfdCwKKwkJCQkJICAgICAgIG5ld19jaGFyX2NsYXNzX2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2NoYXJfY2xhc3NlcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIG1iY3NldC0+Y2hhcl9jbGFzc2VzID0gbmV3X2NoYXJfY2xhc3NlczsKKyAgICAgICpjaGFyX2NsYXNzX2FsbG9jID0gbmV3X2NoYXJfY2xhc3NfYWxsb2M7CisgICAgfQorICBtYmNzZXQtPmNoYXJfY2xhc3Nlc1ttYmNzZXQtPm5jaGFyX2NsYXNzZXMrK10gPSBfX3djdHlwZSAoY2xhc3NfbmFtZSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworI2RlZmluZSBCVUlMRF9DSEFSQ0xBU1NfTE9PUChjdHlwZV9mdW5jKQlcCisgIGRvIHsJCQkJCQlcCisgICAgaWYgKEJFICh0cmFucyAhPSBOVUxMLCAwKSkJCQlcCisgICAgICB7CQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBTQkNfTUFYOyArK2kpCQlcCisgIAkgIGlmIChjdHlwZV9mdW5jIChpKSkJCQlcCisJICAgIGJpdHNldF9zZXQgKHNiY3NldCwgdHJhbnNbaV0pOwlcCisgICAgICB9CQkJCQkJXAorICAgIGVsc2UJCQkJCVwKKyAgICAgIHsJCQkJCQlcCisJZm9yIChpID0gMDsgaSA8IFNCQ19NQVg7ICsraSkJCVwKKyAgCSAgaWYgKGN0eXBlX2Z1bmMgKGkpKQkJCVwKKwkgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBpKTsJCVwKKyAgICAgIH0JCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyAgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImFsbnVtIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNhbG51bSk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImNudHJsIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNjbnRybCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImxvd2VyIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNsb3dlcik7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInNwYWNlIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNzcGFjZSk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImFscGhhIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNhbHBoYSk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImRpZ2l0IikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNkaWdpdCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInByaW50IikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNwcmludCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInVwcGVyIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXN1cHBlcik7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImJsYW5rIikgPT0gMCkKKyNpZm5kZWYgR0FXSworICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2JsYW5rKTsKKyNlbHNlCisgICAgLyogc2VlIGNvbW1lbnRzIGFib3ZlICovCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzX2JsYW5rKTsKKyNlbmRpZgorICBlbHNlIGlmIChzdHJjbXAgKGNsYXNzX25hbWUsICJncmFwaCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzZ3JhcGgpOworICBlbHNlIGlmIChzdHJjbXAgKGNsYXNzX25hbWUsICJwdW5jdCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzcHVuY3QpOworICBlbHNlIGlmIChzdHJjbXAgKGNsYXNzX25hbWUsICJ4ZGlnaXQiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc3hkaWdpdCk7CisgIGVsc2UKKyAgICByZXR1cm4gUkVHX0VDVFlQRTsKKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2J1aWxkX2NoYXJjbGFzc19vcCAocmVfZGZhX3QgKmRmYSwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisJCSAgICBjb25zdCBjaGFyICpjbGFzc19uYW1lLAorCQkgICAgY29uc3QgY2hhciAqZXh0cmEsIGludCBub25fbWF0Y2gsCisJCSAgICByZWdfZXJyY29kZV90ICplcnIpCit7CisgIHJlX2JpdHNldF9wdHJfdCBzYmNzZXQ7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgcmVfY2hhcnNldF90ICptYmNzZXQ7CisgIGludCBhbGxvYyA9IDA7CisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIHJlZ19lcnJjb2RlX3QgcmV0OworICByZV90b2tlbl90IGJyX3Rva2VuOworICBiaW5fdHJlZV90ICp0cmVlOworCisgIHNiY3NldCA9IChyZV9iaXRzZXRfcHRyX3QpIGNhbGxvYyAoc2l6ZW9mIChiaXRzZXRfdCksIDEpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIG1iY3NldCA9IChyZV9jaGFyc2V0X3QgKikgY2FsbG9jIChzaXplb2YgKHJlX2NoYXJzZXRfdCksIDEpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoQkUgKHNiY3NldCA9PSBOVUxMIHx8IG1iY3NldCA9PSBOVUxMLCAwKSkKKyNlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICBpZiAoQkUgKHNiY3NldCA9PSBOVUxMLCAwKSkKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBpZiAobm9uX21hdGNoKQorICAgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgbWJjc2V0LT5ub25fbWF0Y2ggPSAxOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICAgIH0KKworICAvKiBXZSBkb24ndCBjYXJlIHRoZSBzeW50YXggaW4gdGhpcyBjYXNlLiAgKi8KKyAgcmV0ID0gYnVpbGRfY2hhcmNsYXNzICh0cmFucywgc2Jjc2V0LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJCQkgbWJjc2V0LCAmYWxsb2MsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkJCSBjbGFzc19uYW1lLCAwKTsKKworICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgcmVfZnJlZSAoc2Jjc2V0KTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICAqZXJyID0gcmV0OworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAvKiBcdyBtYXRjaCAnXycgYWxzby4gICovCisgIGZvciAoOyAqZXh0cmE7IGV4dHJhKyspCisgICAgYml0c2V0X3NldCAoc2Jjc2V0LCAqZXh0cmEpOworCisgIC8qIElmIGl0IGlzIG5vbi1tYXRjaGluZyBsaXN0LiAgKi8KKyAgaWYgKG5vbl9tYXRjaCkKKyAgICBiaXRzZXRfbm90IChzYmNzZXQpOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogRW5zdXJlIG9ubHkgc2luZ2xlIGJ5dGUgY2hhcmFjdGVycyBhcmUgc2V0LiAgKi8KKyAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisgICAgYml0c2V0X21hc2sgKHNiY3NldCwgZGZhLT5zYl9jaGFyKTsKKyNlbmRpZgorCisgIC8qIEJ1aWxkIGEgdHJlZSBmb3Igc2ltcGxlIGJyYWNrZXQuICAqLworICBicl90b2tlbi50eXBlID0gU0lNUExFX0JSQUNLRVQ7CisgIGJyX3Rva2VuLm9wci5zYmNzZXQgPSBzYmNzZXQ7CisgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmYnJfdG9rZW4pOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisgICAgZ290byBidWlsZF93b3JkX29wX2VzcGFjZTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIGJpbl90cmVlX3QgKm1iY190cmVlOworICAgICAgLyogQnVpbGQgYSB0cmVlIGZvciBjb21wbGV4IGJyYWNrZXQuICAqLworICAgICAgYnJfdG9rZW4udHlwZSA9IENPTVBMRVhfQlJBQ0tFVDsKKyAgICAgIGJyX3Rva2VuLm9wci5tYmNzZXQgPSBtYmNzZXQ7CisgICAgICBkZmEtPmhhc19tYl9ub2RlID0gMTsKKyAgICAgIG1iY190cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJmJyX3Rva2VuKTsKKyAgICAgIGlmIChCRSAobWJjX3RyZWUgPT0gTlVMTCwgMCkpCisJZ290byBidWlsZF93b3JkX29wX2VzcGFjZTsKKyAgICAgIC8qIFRoZW4gam9pbiB0aGVtIGJ5IEFMVCBub2RlLiAgKi8KKyAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBtYmNfdHJlZSwgT1BfQUxUKTsKKyAgICAgIGlmIChCRSAobWJjX3RyZWUgIT0gTlVMTCwgMSkpCisJcmV0dXJuIHRyZWU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworICAgICAgcmV0dXJuIHRyZWU7CisgICAgfQorI2Vsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIHJldHVybiB0cmVlOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworCisgYnVpbGRfd29yZF9vcF9lc3BhY2U6CisgIHJlX2ZyZWUgKHNiY3NldCk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICplcnIgPSBSRUdfRVNQQUNFOworICByZXR1cm4gTlVMTDsKK30KKworLyogVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGV4cHJlc3Npb25zIGxpa2UgImF7MSwzfSIuCisgICBGZXRjaCBhIG51bWJlciBmcm9tIGBpbnB1dCcsIGFuZCByZXR1cm4gdGhlIG51bWJlci4KKyAgIFJldHVybiAtMSwgaWYgdGhlIG51bWJlciBmaWVsZCBpcyBlbXB0eSBsaWtlICJ7LDF9Ii4KKyAgIFJldHVybiAtMiwgSWYgYW4gZXJyb3IgaXMgb2NjdXJlZC4gICovCisKK3N0YXRpYyBpbnQKK2ZldGNoX251bWJlciAocmVfc3RyaW5nX3QgKmlucHV0LCByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCkKK3sKKyAgaW50IG51bSA9IC0xOworICB1bnNpZ25lZCBjaGFyIGM7CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGZldGNoX3Rva2VuICh0b2tlbiwgaW5wdXQsIHN5bnRheCk7CisgICAgICBjID0gdG9rZW4tPm9wci5jOworICAgICAgaWYgKEJFICh0b2tlbi0+dHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorCXJldHVybiAtMjsKKyAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9DTE9TRV9EVVBfTlVNIHx8IGMgPT0gJywnKQorCWJyZWFrOworICAgICAgbnVtID0gKCh0b2tlbi0+dHlwZSAhPSBDSEFSQUNURVIgfHwgYyA8ICcwJyB8fCAnOScgPCBjIHx8IG51bSA9PSAtMikKKwkgICAgID8gLTIgOiAoKG51bSA9PSAtMSkgPyBjIC0gJzAnIDogbnVtICogMTAgKyBjIC0gJzAnKSk7CisgICAgICBudW0gPSAobnVtID4gUkVfRFVQX01BWCkgPyAtMiA6IG51bTsKKyAgICB9CisgIHJldHVybiBudW07Cit9CisMCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyB2b2lkCitmcmVlX2NoYXJzZXQgKHJlX2NoYXJzZXRfdCAqY3NldCkKK3sKKyAgcmVfZnJlZSAoY3NldC0+bWJjaGFycyk7CisjIGlmZGVmIF9MSUJDCisgIHJlX2ZyZWUgKGNzZXQtPmNvbGxfc3ltcyk7CisgIHJlX2ZyZWUgKGNzZXQtPmVxdWl2X2NsYXNzZXMpOworICByZV9mcmVlIChjc2V0LT5yYW5nZV9zdGFydHMpOworICByZV9mcmVlIChjc2V0LT5yYW5nZV9lbmRzKTsKKyMgZW5kaWYKKyAgcmVfZnJlZSAoY3NldC0+Y2hhcl9jbGFzc2VzKTsKKyAgcmVfZnJlZSAoY3NldCk7Cit9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwwKKy8qIEZ1bmN0aW9ucyBmb3IgYmluYXJ5IHRyZWUgb3BlcmF0aW9uLiAgKi8KKworLyogQ3JlYXRlIGEgdHJlZSBub2RlLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorY3JlYXRlX3RyZWUgKHJlX2RmYV90ICpkZmEsIGJpbl90cmVlX3QgKmxlZnQsIGJpbl90cmVlX3QgKnJpZ2h0LAorCSAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUpCit7CisgIHJlX3Rva2VuX3QgdDsKKyAgdC50eXBlID0gdHlwZTsKKyAgcmV0dXJuIGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIGxlZnQsIHJpZ2h0LCAmdCk7Cit9CisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2NyZWF0ZV90b2tlbl90cmVlIChyZV9kZmFfdCAqZGZhLCBiaW5fdHJlZV90ICpsZWZ0LCBiaW5fdHJlZV90ICpyaWdodCwKKwkJICAgY29uc3QgcmVfdG9rZW5fdCAqdG9rZW4pCit7CisgIGJpbl90cmVlX3QgKnRyZWU7CisgIGlmIChCRSAoZGZhLT5zdHJfdHJlZV9zdG9yYWdlX2lkeCA9PSBCSU5fVFJFRV9TVE9SQUdFX1NJWkUsIDApKQorICAgIHsKKyAgICAgIGJpbl90cmVlX3N0b3JhZ2VfdCAqc3RvcmFnZSA9IHJlX21hbGxvYyAoYmluX3RyZWVfc3RvcmFnZV90LCAxKTsKKworICAgICAgaWYgKHN0b3JhZ2UgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIHN0b3JhZ2UtPm5leHQgPSBkZmEtPnN0cl90cmVlX3N0b3JhZ2U7CisgICAgICBkZmEtPnN0cl90cmVlX3N0b3JhZ2UgPSBzdG9yYWdlOworICAgICAgZGZhLT5zdHJfdHJlZV9zdG9yYWdlX2lkeCA9IDA7CisgICAgfQorICB0cmVlID0gJmRmYS0+c3RyX3RyZWVfc3RvcmFnZS0+ZGF0YVtkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4KytdOworCisgIHRyZWUtPnBhcmVudCA9IE5VTEw7CisgIHRyZWUtPmxlZnQgPSBsZWZ0OworICB0cmVlLT5yaWdodCA9IHJpZ2h0OworICB0cmVlLT50b2tlbiA9ICp0b2tlbjsKKyAgdHJlZS0+dG9rZW4uZHVwbGljYXRlZCA9IDA7CisgIHRyZWUtPnRva2VuLm9wdF9zdWJleHAgPSAwOworICB0cmVlLT5maXJzdCA9IE5VTEw7CisgIHRyZWUtPm5leHQgPSBOVUxMOworICB0cmVlLT5ub2RlX2lkeCA9IC0xOworCisgIGlmIChsZWZ0ICE9IE5VTEwpCisgICAgbGVmdC0+cGFyZW50ID0gdHJlZTsKKyAgaWYgKHJpZ2h0ICE9IE5VTEwpCisgICAgcmlnaHQtPnBhcmVudCA9IHRyZWU7CisgIHJldHVybiB0cmVlOworfQorCisvKiBNYXJrIHRoZSB0cmVlIFNSQyBhcyBhbiBvcHRpb25hbCBzdWJleHByZXNzaW9uLgorICAgVG8gYmUgY2FsbGVkIGZyb20gcHJlb3JkZXIgb3IgcG9zdG9yZGVyLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK21hcmtfb3B0X3N1YmV4cCAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIGludCBpZHggPSAoaW50KSAobG9uZykgZXh0cmE7CisgIGlmIChub2RlLT50b2tlbi50eXBlID09IFNVQkVYUCAmJiBub2RlLT50b2tlbi5vcHIuaWR4ID09IGlkeCkKKyAgICBub2RlLT50b2tlbi5vcHRfc3ViZXhwID0gMTsKKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEZyZWUgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaW5zaWRlIE5PREUuICovCisKK3N0YXRpYyB2b2lkCitmcmVlX3Rva2VuIChyZV90b2tlbl90ICpub2RlKQoreworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChub2RlLT50eXBlID09IENPTVBMRVhfQlJBQ0tFVCAmJiBub2RlLT5kdXBsaWNhdGVkID09IDApCisgICAgZnJlZV9jaGFyc2V0IChub2RlLT5vcHIubWJjc2V0KTsKKyAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgaWYgKG5vZGUtPnR5cGUgPT0gU0lNUExFX0JSQUNLRVQgJiYgbm9kZS0+ZHVwbGljYXRlZCA9PSAwKQorICAgICAgcmVfZnJlZSAobm9kZS0+b3ByLnNiY3NldCk7Cit9CisKKy8qIFdvcmtlciBmdW5jdGlvbiBmb3IgdHJlZSB3YWxraW5nLiAgRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpbnNpZGUgTk9ERQorICAgYW5kIGl0cyBjaGlsZHJlbi4gKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ZyZWVfdHJlZSAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIGZyZWVfdG9rZW4gKCZub2RlLT50b2tlbik7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworCisvKiBEdXBsaWNhdGUgdGhlIG5vZGUgU1JDLCBhbmQgcmV0dXJuIG5ldyBub2RlLiAgVGhpcyBpcyBhIHByZW9yZGVyCisgICB2aXNpdCBzaW1pbGFyIHRvIHRoZSBvbmUgaW1wbGVtZW50ZWQgYnkgdGhlIGdlbmVyaWMgdmlzaXRvciwgYnV0CisgICB3ZSBuZWVkIG1vcmUgaW5mcmFzdHJ1Y3R1cmUgdG8gbWFpbnRhaW4gdHdvIHBhcmFsbGVsIHRyZWVzIC0tLSBzbywKKyAgIGl0J3MgZWFzaWVyIHRvIGR1cGxpY2F0ZS4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2R1cGxpY2F0ZV90cmVlIChjb25zdCBiaW5fdHJlZV90ICpyb290LCByZV9kZmFfdCAqZGZhKQoreworICBjb25zdCBiaW5fdHJlZV90ICpub2RlOworICBiaW5fdHJlZV90ICpkdXBfcm9vdDsKKyAgYmluX3RyZWVfdCAqKnBfbmV3ID0gJmR1cF9yb290LCAqZHVwX25vZGUgPSByb290LT5wYXJlbnQ7CisKKyAgZm9yIChub2RlID0gcm9vdDsgOyApCisgICAgeworICAgICAgLyogQ3JlYXRlIGEgbmV3IHRyZWUgYW5kIGxpbmsgaXQgYmFjayB0byB0aGUgY3VycmVudCBwYXJlbnQuICAqLworICAgICAgKnBfbmV3ID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJm5vZGUtPnRva2VuKTsKKyAgICAgIGlmICgqcF9uZXcgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyAgICAgICgqcF9uZXcpLT5wYXJlbnQgPSBkdXBfbm9kZTsKKyAgICAgICgqcF9uZXcpLT50b2tlbi5kdXBsaWNhdGVkID0gMTsKKyAgICAgIGR1cF9ub2RlID0gKnBfbmV3OworCisgICAgICAvKiBHbyB0byB0aGUgbGVmdCBub2RlLCBvciB1cCBhbmQgdG8gdGhlIHJpZ2h0LiAgKi8KKyAgICAgIGlmIChub2RlLT5sZWZ0KQorCXsKKwkgIG5vZGUgPSBub2RlLT5sZWZ0OworCSAgcF9uZXcgPSAmZHVwX25vZGUtPmxlZnQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbnN0IGJpbl90cmVlX3QgKnByZXYgPSBOVUxMOworCSAgd2hpbGUgKG5vZGUtPnJpZ2h0ID09IHByZXYgfHwgbm9kZS0+cmlnaHQgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIHByZXYgPSBub2RlOworCSAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnQ7CisJICAgICAgZHVwX25vZGUgPSBkdXBfbm9kZS0+cGFyZW50OworCSAgICAgIGlmICghbm9kZSkKKwkJcmV0dXJuIGR1cF9yb290OworCSAgICB9CisJICBub2RlID0gbm9kZS0+cmlnaHQ7CisJICBwX25ldyA9ICZkdXBfbm9kZS0+cmlnaHQ7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleC5jIGIvY29tcGF0L3JlZ2V4L3JlZ2V4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkOGRmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9yZWdleC9yZWdleC5jCkBAIC0wLDAgKzEsODcgQEAKKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgICAwMjExMC0xMzAxIFVTQS4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworLyogTWFrZSBzdXJlIG5vb25lIGNvbXBpbGVzIHRoaXMgY29kZSB3aXRoIGEgQysrIGNvbXBpbGVyLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworIyBlcnJvciAiVGhpcyBpcyBDIGNvZGUsIHVzZSBhIEMgY29tcGlsZXIiCisjZW5kaWYKKworI2lmZGVmIF9MSUJDCisvKiBXZSBoYXZlIHRvIGtlZXAgdGhlIG5hbWVzcGFjZSBjbGVhbi4gICovCisjIGRlZmluZSByZWdmcmVlKHByZWcpIF9fcmVnZnJlZSAocHJlZykKKyMgZGVmaW5lIHJlZ2V4ZWMocHIsIHN0LCBubSwgcG0sIGVmKSBfX3JlZ2V4ZWMgKHByLCBzdCwgbm0sIHBtLCBlZikKKyMgZGVmaW5lIHJlZ2NvbXAocHJlZywgcGF0dGVybiwgY2ZsYWdzKSBfX3JlZ2NvbXAgKHByZWcsIHBhdHRlcm4sIGNmbGFncykKKyMgZGVmaW5lIHJlZ2Vycm9yKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpIFwKKwlfX3JlZ2Vycm9yKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpCisjIGRlZmluZSByZV9zZXRfcmVnaXN0ZXJzKGJ1LCByZSwgbnUsIHN0LCBlbikgXAorCV9fcmVfc2V0X3JlZ2lzdGVycyAoYnUsIHJlLCBudSwgc3QsIGVuKQorIyBkZWZpbmUgcmVfbWF0Y2hfMihidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHBvcywgcmVncywgc3RvcCkgXAorCV9fcmVfbWF0Y2hfMiAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBwb3MsIHJlZ3MsIHN0b3ApCisjIGRlZmluZSByZV9tYXRjaChidWZwLCBzdHJpbmcsIHNpemUsIHBvcywgcmVncykgXAorCV9fcmVfbWF0Y2ggKGJ1ZnAsIHN0cmluZywgc2l6ZSwgcG9zLCByZWdzKQorIyBkZWZpbmUgcmVfc2VhcmNoKGJ1ZnAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLCByZWdzKSBcCisJX19yZV9zZWFyY2ggKGJ1ZnAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLCByZWdzKQorIyBkZWZpbmUgcmVfY29tcGlsZV9wYXR0ZXJuKHBhdHRlcm4sIGxlbmd0aCwgYnVmcCkgXAorCV9fcmVfY29tcGlsZV9wYXR0ZXJuIChwYXR0ZXJuLCBsZW5ndGgsIGJ1ZnApCisjIGRlZmluZSByZV9zZXRfc3ludGF4KHN5bnRheCkgX19yZV9zZXRfc3ludGF4IChzeW50YXgpCisjIGRlZmluZSByZV9zZWFyY2hfMihidWZwLCBzdDEsIHMxLCBzdDIsIHMyLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MsIHN0b3ApIFwKKwlfX3JlX3NlYXJjaF8yIChidWZwLCBzdDEsIHMxLCBzdDIsIHMyLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MsIHN0b3ApCisjIGRlZmluZSByZV9jb21waWxlX2Zhc3RtYXAoYnVmcCkgX19yZV9jb21waWxlX2Zhc3RtYXAgKGJ1ZnApCisKKyMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX01TQ19WRVIpCisjaW5jbHVkZSA8c3RkaW8uaD4gLyogZm9yIHNpemVfdCAqLworI2VuZGlmCisKKy8qIE9uIHNvbWUgc3lzdGVtcywgbGltaXRzLmggc2V0cyBSRV9EVVBfTUFYIHRvIGEgbG93ZXIgdmFsdWUgdGhhbgorICAgR05VIHJlZ2V4IGFsbG93cy4gIEluY2x1ZGUgaXQgYmVmb3JlIDxyZWdleC5oPiwgd2hpY2ggY29ycmVjdGx5CisgICAjdW5kZWZzIFJFX0RVUF9NQVggYW5kIHNldHMgaXQgdG8gdGhlIHJpZ2h0IHZhbHVlLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmZGVmIEdBV0sKKyN1bmRlZiBhbGxvY2EKKyNkZWZpbmUgYWxsb2NhIGFsbG9jYV9pc19iYWRfeW91X3Nob3VsZF9uZXZlcl91c2VfaXQKKyNlbmRpZgorI2luY2x1ZGUgPHJlZ2V4Lmg+CisjaW5jbHVkZSAicmVnZXhfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgInJlZ2V4X2ludGVybmFsLmMiCisjaWZkZWYgR0FXSworI2RlZmluZSBib29sIGludAorI2RlZmluZSB0cnVlICgxKQorI2RlZmluZSBmYWxzZSAoMCkKKyNlbmRpZgorI2luY2x1ZGUgInJlZ2NvbXAuYyIKKyNpbmNsdWRlICJyZWdleGVjLmMiCisKKy8qIEJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgKi8KKyNpZiBfTElCQworIyBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKyMgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfMykKK2xpbmtfd2FybmluZyAocmVfbWF4X2ZhaWx1cmVzLCAidGhlICdyZV9tYXhfZmFpbHVyZXMnIHZhcmlhYmxlIGlzIG9ic29sZXRlIGFuZCB3aWxsIGdvIGF3YXkuIikKK2ludCByZV9tYXhfZmFpbHVyZXMgPSAyMDAwOworIyBlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvcmVnZXgvcmVnZXguaCBiL2NvbXBhdC9yZWdleC9yZWdleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzk2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcmVnZXgvcmVnZXguaApAQCAtMCwwICsxLDU4MiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIERlZmluaXRpb25zIGZvciBkYXRhIHN0cnVjdHVyZXMgYW5kIHJvdXRpbmVzIGZvciB0aGUgcmVndWxhcgorICAgZXhwcmVzc2lvbiBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTg1LDE5ODktOTMsMTk5NS05OCwyMDAwLDIwMDEsMjAwMiwyMDAzLDIwMDUsMjAwNiwyMDA4CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICAgMDIxMTAtMTMwMSBVU0EuICAqLworCisjaWZuZGVmIF9SRUdFWF9ICisjZGVmaW5lIF9SRUdFWF9IIDEKKworI2lmZGVmIEhBVkVfU1REREVGX0gKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgX0xJQkMKKyNkZWZpbmUgX19VU0VfR05VCTEKKyNlbmRpZgorCisvKiBBbGxvdyB0aGUgdXNlIGluIEMrKyBjb2RlLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyB0d28gdHlwZXMgaGF2ZSB0byBiZSBzaWduZWQgYW5kIHVuc2lnbmVkIGludGVnZXIgdHlwZQorICAgd2lkZSBlbm91Z2ggdG8gaG9sZCBhIHZhbHVlIG9mIGEgcG9pbnRlci4gIEZvciBtb3N0IEFOU0kgY29tcGlsZXJzCisgICBwdHJkaWZmX3QgYW5kIHNpemVfdCBzaG91bGQgYmUgbGlrZWx5IE9LLiAgU3RpbGwgc2l6ZSBvZiB0aGVzZSB0d28KKyAgIHR5cGVzIGlzIDIgZm9yIE1pY3Jvc29mdCBDLiAgVWdoLi4uICovCit0eXBlZGVmIGxvbmcgaW50IHNfcmVnX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGFjdGl2ZV9yZWdfdDsKKworLyogVGhlIGZvbGxvd2luZyBiaXRzIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVnZXhwIHN5bnRheCB3ZQorICAgcmVjb2duaXplLiAgVGhlIHNldC9ub3Qtc2V0IG1lYW5pbmdzIGFyZSBjaG9zZW4gc28gdGhhdCBFbWFjcyBzeW50YXgKKyAgIHJlbWFpbnMgdGhlIHZhbHVlIDAuICBUaGUgYml0cyBhcmUgZ2l2ZW4gaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBhbmQKKyAgIHRoZSBkZWZpbml0aW9ucyBzaGlmdGVkIGJ5IG9uZSBmcm9tIHRoZSBwcmV2aW91cyBiaXQ7IHRodXMsIHdoZW4gd2UKKyAgIGFkZCBvciByZW1vdmUgYSBiaXQsIG9ubHkgb25lIG90aGVyIGRlZmluaXRpb24gbmVlZCBjaGFuZ2UuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCByZWdfc3ludGF4X3Q7CisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZW4gXCBpbnNpZGUgYSBicmFja2V0IGV4cHJlc3Npb24gaXMgbGl0ZXJhbC4KKyAgIElmIHNldCwgdGhlbiBzdWNoIGEgXCBxdW90ZXMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIuICAqLworIyBkZWZpbmUgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUyAoKHVuc2lnbmVkIGxvbmcgaW50KSAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuICsgYW5kID8gYXJlIG9wZXJhdG9ycywgYW5kIFwrIGFuZCBcPyBhcmUKKyAgICAgbGl0ZXJhbHMuCisgICBJZiBzZXQsIHRoZW4gXCsgYW5kIFw/IGFyZSBvcGVyYXRvcnMgYW5kICsgYW5kID8gYXJlIGxpdGVyYWxzLiAgKi8KKyMgZGVmaW5lIFJFX0JLX1BMVVNfUU0gKFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGNoYXJhY3RlciBjbGFzc2VzIGFyZSBzdXBwb3J0ZWQuICBUaGV5IGFyZToKKyAgICAgWzphbHBoYTpdLCBbOnVwcGVyOl0sIFs6bG93ZXI6XSwgIFs6ZGlnaXQ6XSwgWzphbG51bTpdLCBbOnhkaWdpdDpdLAorICAgICBbOnNwYWNlOl0sIFs6cHJpbnQ6XSwgWzpwdW5jdDpdLCBbOmdyYXBoOl0sIGFuZCBbOmNudHJsOl0uCisgICBJZiBub3Qgc2V0LCB0aGVuIGNoYXJhY3RlciBjbGFzc2VzIGFyZSBub3Qgc3VwcG9ydGVkLiAgKi8KKyMgZGVmaW5lIFJFX0NIQVJfQ0xBU1NFUyAoUkVfQktfUExVU19RTSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gXiBhbmQgJCBhcmUgYWx3YXlzIGFuY2hvcnMgKG91dHNpZGUgYnJhY2tldAorICAgICBleHByZXNzaW9ucywgb2YgY291cnNlKS4KKyAgIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZW4gaXQgZGVwZW5kczoKKyAgICAgICAgXiAgaXMgYW4gYW5jaG9yIGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSByZWd1bGFyCisgICAgICAgICAgIGV4cHJlc3Npb24gb3IgYWZ0ZXIgYW4gb3Blbi1ncm91cCBvciBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvcjsKKyAgICAgICAgJCAgaXMgYW4gYW5jaG9yIGlmIGl0IGlzIGF0IHRoZSBlbmQgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24sIG9yCisgICAgICAgICAgIGJlZm9yZSBhIGNsb3NlLWdyb3VwIG9yIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLgorCisgICBUaGlzIGJpdCBjb3VsZCBiZSAocmUpY29tYmluZWQgd2l0aCBSRV9DT05URVhUX0lOREVQX09QUywgYmVjYXVzZQorICAgUE9TSVggZHJhZnQgMTEuMiBzYXlzIHRoYXQgKiBldGMuIGluIGxlYWRpbmcgcG9zaXRpb25zIGlzIHVuZGVmaW5lZC4KKyAgIFdlIGFscmVhZHkgaW1wbGVtZW50ZWQgYSBwcmV2aW91cyBkcmFmdCB3aGljaCBtYWRlIHRob3NlIGNvbnN0cnVjdHMKKyAgIGludmFsaWQsIHRob3VnaCwgc28gd2UgaGF2ZW4ndCBjaGFuZ2VkIHRoZSBjb2RlIGJhY2suICAqLworIyBkZWZpbmUgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTIChSRV9DSEFSX0NMQVNTRVMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHNwZWNpYWwgY2hhcmFjdGVycyBhcmUgYWx3YXlzIHNwZWNpYWwKKyAgICAgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IGFyZSBpbiB0aGUgcGF0dGVybi4KKyAgIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBzcGVjaWFsIG9ubHkgaW4KKyAgICAgc29tZSBjb250ZXh0czsgb3RoZXJ3aXNlIHRoZXkgYXJlIG9yZGluYXJ5LiAgU3BlY2lmaWNhbGx5LAorICAgICAqICsgPyBhbmQgaW50ZXJ2YWxzIGFyZSBvbmx5IHNwZWNpYWwgd2hlbiBub3QgYWZ0ZXIgdGhlIGJlZ2lubmluZywKKyAgICAgb3Blbi1ncm91cCwgb3IgYWx0ZXJuYXRpb24gb3BlcmF0b3IuICAqLworIyBkZWZpbmUgUkVfQ09OVEVYVF9JTkRFUF9PUFMgKFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gKiwgKywgPywgYW5kIHsgY2Fubm90IGJlIGZpcnN0IGluIGFuIHJlIG9yCisgICAgIGltbWVkaWF0ZWx5IGFmdGVyIGFuIGFsdGVybmF0aW9uIG9yIGJlZ2luLWdyb3VwIG9wZXJhdG9yLiAgKi8KKyMgZGVmaW5lIFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgKFJFX0NPTlRFWFRfSU5ERVBfT1BTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiAuIG1hdGNoZXMgbmV3bGluZS4KKyAgIElmIG5vdCBzZXQsIHRoZW4gaXQgZG9lc24ndC4gICovCisjIGRlZmluZSBSRV9ET1RfTkVXTElORSAoUkVfQ09OVEVYVF9JTlZBTElEX09QUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gLiBkb2Vzbid0IG1hdGNoIE5VTC4KKyAgIElmIG5vdCBzZXQsIHRoZW4gaXQgZG9lcy4gICovCisjIGRlZmluZSBSRV9ET1RfTk9UX05VTEwgKFJFX0RPVF9ORVdMSU5FIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgbm9ubWF0Y2hpbmcgbGlzdHMgW14uLi5dIGRvIG5vdCBtYXRjaCBuZXdsaW5lLgorICAgSWYgbm90IHNldCwgdGhleSBkby4gICovCisjIGRlZmluZSBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgKFJFX0RPVF9OT1RfTlVMTCA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGVpdGhlciBcey4uLlx9IG9yIHsuLi59IGRlZmluZXMgYW4KKyAgICAgaW50ZXJ2YWwsIGRlcGVuZGluZyBvbiBSRV9OT19CS19CUkFDRVMuCisgICBJZiBub3Qgc2V0LCBceywgXH0sIHssIGFuZCB9IGFyZSBsaXRlcmFscy4gICovCisjIGRlZmluZSBSRV9JTlRFUlZBTFMgKFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsICssID8gYW5kIHwgYXJlbid0IHJlY29nbml6ZWQgYXMgb3BlcmF0b3JzLgorICAgSWYgbm90IHNldCwgdGhleSBhcmUuICAqLworIyBkZWZpbmUgUkVfTElNSVRFRF9PUFMgKFJFX0lOVEVSVkFMUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIG5ld2xpbmUgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IuCisgICBJZiBub3Qgc2V0LCBuZXdsaW5lIGlzIGxpdGVyYWwuICAqLworIyBkZWZpbmUgUkVfTkVXTElORV9BTFQgKFJFX0xJTUlURURfT1BTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBgey4uLn0nIGRlZmluZXMgYW4gaW50ZXJ2YWwsIGFuZCBceyBhbmQgXH0KKyAgICAgYXJlIGxpdGVyYWxzLgorICBJZiBub3Qgc2V0LCB0aGVuIGBcey4uLlx9JyBkZWZpbmVzIGFuIGludGVydmFsLiAgKi8KKyMgZGVmaW5lIFJFX05PX0JLX0JSQUNFUyAoUkVfTkVXTElORV9BTFQgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCAoLi4uKSBkZWZpbmVzIGEgZ3JvdXAsIGFuZCBcKCBhbmQgXCkgYXJlIGxpdGVyYWxzLgorICAgSWYgbm90IHNldCwgXCguLi5cKSBkZWZpbmVzIGEgZ3JvdXAsIGFuZCAoIGFuZCApIGFyZSBsaXRlcmFscy4gICovCisjIGRlZmluZSBSRV9OT19CS19QQVJFTlMgKFJFX05PX0JLX0JSQUNFUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gXDxkaWdpdD4gbWF0Y2hlcyA8ZGlnaXQ+LgorICAgSWYgbm90IHNldCwgdGhlbiBcPGRpZ2l0PiBpcyBhIGJhY2stcmVmZXJlbmNlLiAgKi8KKyMgZGVmaW5lIFJFX05PX0JLX1JFRlMgKFJFX05PX0JLX1BBUkVOUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gfCBpcyBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvciwgYW5kIFx8IGlzIGxpdGVyYWwuCisgICBJZiBub3Qgc2V0LCB0aGVuIFx8IGlzIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLCBhbmQgfCBpcyBsaXRlcmFsLiAgKi8KKyMgZGVmaW5lIFJFX05PX0JLX1ZCQVIgKFJFX05PX0JLX1JFRlMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGFuIGVuZGluZyByYW5nZSBwb2ludCBjb2xsYXRpbmcgaGlnaGVyCisgICAgIHRoYW4gdGhlIHN0YXJ0aW5nIHJhbmdlIHBvaW50LCBhcyBpbiBbei1hXSwgaXMgaW52YWxpZC4KKyAgIElmIG5vdCBzZXQsIHRoZW4gd2hlbiBlbmRpbmcgcmFuZ2UgcG9pbnQgY29sbGF0ZXMgaGlnaGVyIHRoYW4gdGhlCisgICAgIHN0YXJ0aW5nIHJhbmdlIHBvaW50LCB0aGUgcmFuZ2UgaXMgaWdub3JlZC4gICovCisjIGRlZmluZSBSRV9OT19FTVBUWV9SQU5HRVMgKFJFX05PX0JLX1ZCQVIgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGFuIHVubWF0Y2hlZCApIGlzIG9yZGluYXJ5LgorICAgSWYgbm90IHNldCwgdGhlbiBhbiB1bm1hdGNoZWQgKSBpcyBpbnZhbGlkLiAgKi8KKyMgZGVmaW5lIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQgKFJFX05PX0VNUFRZX1JBTkdFUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHN1Y2NlZWQgYXMgc29vbiBhcyB3ZSBtYXRjaCB0aGUgd2hvbGUgcGF0dGVybiwKKyAgIHdpdGhvdXQgZnVydGhlciBiYWNrdHJhY2tpbmcuICAqLworIyBkZWZpbmUgUkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HIChSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgZG8gbm90IHByb2Nlc3MgdGhlIEdOVSByZWdleCBvcGVyYXRvcnMuCisgICBJZiBub3Qgc2V0LCB0aGVuIHRoZSBHTlUgcmVnZXggb3BlcmF0b3JzIGFyZSByZWNvZ25pemVkLiAqLworIyBkZWZpbmUgUkVfTk9fR05VX09QUyAoUkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgYSBzeW50YWN0aWNhbGx5IGludmFsaWQgaW50ZXJ2YWwgaXMgdHJlYXRlZCBhcworICAgYSBzdHJpbmcgb2Ygb3JkaW5hcnkgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlLCB0aGUgRVJFICdhezEnIGlzCisgICB0cmVhdGVkIGFzICdhXHsxJy4gICovCisjIGRlZmluZSBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCAoUkVfTk9fR05VX09QUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gaWdub3JlIGNhc2Ugd2hlbiBtYXRjaGluZy4KKyAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZpY2FudC4gICovCisjIGRlZmluZSBSRV9JQ0FTRSAoUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgPDwgMSkKKworLyogVGhpcyBiaXQgaXMgdXNlZCBpbnRlcm5hbGx5IGxpa2UgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTIGJ1dCBvbmx5CisgICBmb3IgXiwgYmVjYXVzZSBpdCBpcyBkaWZmaWN1bHQgdG8gc2NhbiB0aGUgcmVnZXggYmFja3dhcmRzIHRvIGZpbmQKKyAgIHdoZXRoZXIgXiBzaG91bGQgYmUgc3BlY2lhbC4gICovCisjIGRlZmluZSBSRV9DQVJFVF9BTkNIT1JTX0hFUkUgKFJFX0lDQVNFIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBceyBjYW5ub3QgYmUgZmlyc3QgaW4gYW4gYnJlIG9yCisgICBpbW1lZGlhdGVseSBhZnRlciBhbiBhbHRlcm5hdGlvbiBvciBiZWdpbi1ncm91cCBvcGVyYXRvci4gICovCisjIGRlZmluZSBSRV9DT05URVhUX0lOVkFMSURfRFVQIChSRV9DQVJFVF9BTkNIT1JTX0hFUkUgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIG5vX3N1YiB3aWxsIGJlIHNldCB0byAxIGR1cmluZworICAgcmVfY29tcGlsZV9wYXR0ZXJuLiAgKi8KKyNkZWZpbmUgUkVfTk9fU1VCIChSRV9DT05URVhUX0lOVkFMSURfRFVQIDw8IDEpCisjZW5kaWYKKworLyogVGhpcyBnbG9iYWwgdmFyaWFibGUgZGVmaW5lcyB0aGUgcGFydGljdWxhciByZWdleHAgc3ludGF4IHRvIHVzZSAoZm9yCisgICBzb21lIGludGVyZmFjZXMpLiAgV2hlbiBhIHJlZ2V4cCBpcyBjb21waWxlZCwgdGhlIHN5bnRheCB1c2VkIGlzCisgICBzdG9yZWQgaW4gdGhlIHBhdHRlcm4gYnVmZmVyLCBzbyBjaGFuZ2luZyB0aGlzIGRvZXMgbm90IGFmZmVjdAorICAgYWxyZWFkeS1jb21waWxlZCByZWdleHBzLiAgKi8KK2V4dGVybiByZWdfc3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CisMCisjaWZkZWYgX19VU0VfR05VCisvKiBEZWZpbmUgY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSBiaXRzIGZvciB0aGUgc3RhbmRhcmQgcG9zc2liaWxpdGllcy4KKyAgIChUaGUgW1tbIGNvbW1lbnRzIGRlbGltaXQgd2hhdCBnZXRzIHB1dCBpbnRvIHRoZSBUZXhpbmZvIGZpbGUsIHNvCisgICBkb24ndCBkZWxldGUgdGhlbSEpICAqLworLyogW1tbYmVnaW4gc3ludGF4ZXNdXV0gKi8KKyNkZWZpbmUgUkVfU1lOVEFYX0VNQUNTIDAKKworI2RlZmluZSBSRV9TWU5UQVhfQVdLCQkJCQkJCVwKKyAgKFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgICB8IFJFX0RPVF9OT1RfTlVMTAkJCVwKKyAgIHwgUkVfTk9fQktfUEFSRU5TICAgICAgICAgICAgICB8IFJFX05PX0JLX1JFRlMJCQlcCisgICB8IFJFX05PX0JLX1ZCQVIgICAgICAgICAgICAgICAgfCBSRV9OT19FTVBUWV9SQU5HRVMJCQlcCisgICB8IFJFX0RPVF9ORVdMSU5FCQkgIHwgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCQlcCisgICB8IFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQgfCBSRV9OT19HTlVfT1BTKQorCisjZGVmaW5lIFJFX1NZTlRBWF9HTlVfQVdLCQkJCQkJXAorICAoKFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRCB8IFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMJCVwKKyAgIHwgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpCQkJCQkJXAorICAgJiB+KFJFX0RPVF9OT1RfTlVMTCB8IFJFX0NPTlRFWFRfSU5ERVBfT1BTCQkJCVwKKyAgICAgICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgKSkKKworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfQVdLCQkJCQkJXAorICAoUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIHwgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUwkJXAorICAgfCBSRV9JTlRFUlZBTFMJICAgIHwgUkVfTk9fR05VX09QUwkJCQlcCisgICB8IFJFX0lOVkFMSURfSU5URVJWQUxfT1JEKQorCisjZGVmaW5lIFJFX1NZTlRBWF9HUkVQCQkJCQkJCVwKKyAgKFJFX0JLX1BMVVNfUU0gICAgICAgICAgICAgIHwgUkVfQ0hBUl9DTEFTU0VTCQkJCVwKKyAgIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FIHwgUkVfSU5URVJWQUxTCQkJCVwKKyAgIHwgUkVfTkVXTElORV9BTFQpCisKKyNkZWZpbmUgUkVfU1lOVEFYX0VHUkVQCQkJCQkJCVwKKyAgKFJFX0NIQVJfQ0xBU1NFUyAgICAgICAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCisgICB8IFJFX0NPTlRFWFRfSU5ERVBfT1BTIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FCQkJXAorICAgfCBSRV9ORVdMSU5FX0FMVCAgICAgICB8IFJFX05PX0JLX1BBUkVOUwkJCQlcCisgICB8IFJFX05PX0JLX1ZCQVIpCisKKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0VHUkVQCQkJCQkJXAorICAoUkVfU1lOVEFYX0VHUkVQIHwgUkVfSU5URVJWQUxTIHwgUkVfTk9fQktfQlJBQ0VTCQkJXAorICAgfCBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCkKKworLyogUDEwMDMuMi9EMTEuMiwgc2VjdGlvbiA0LjIwLjcuMSwgbGluZXMgNTA3OGZmLiAgKi8KKyNkZWZpbmUgUkVfU1lOVEFYX0VEIFJFX1NZTlRBWF9QT1NJWF9CQVNJQworCisjZGVmaW5lIFJFX1NZTlRBWF9TRUQgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCisKKy8qIFN5bnRheCBiaXRzIGNvbW1vbiB0byBib3RoIGJhc2ljIGFuZCBleHRlbmRlZCBQT1NJWCByZWdleCBzeW50YXguICAqLworI2RlZmluZSBfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTgkJCQkJCVwKKyAgKFJFX0NIQVJfQ0xBU1NFUyB8IFJFX0RPVF9ORVdMSU5FICAgICAgfCBSRV9ET1RfTk9UX05VTEwJCVwKKyAgIHwgUkVfSU5URVJWQUxTICB8IFJFX05PX0VNUFRZX1JBTkdFUykKKworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfQkFTSUMJCQkJCQlcCisgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiB8IFJFX0JLX1BMVVNfUU0gfCBSRV9DT05URVhUX0lOVkFMSURfRFVQKQorCisvKiBEaWZmZXJzIGZyb20gLi4uX1BPU0lYX0JBU0lDIG9ubHkgaW4gdGhhdCBSRV9CS19QTFVTX1FNIGJlY29tZXMKKyAgIFJFX0xJTUlURURfT1BTLCBpLmUuLCBcPyBcKyBcfCBhcmUgbm90IHJlY29nbml6ZWQuICBBY3R1YWxseSwgdGhpcworICAgaXNuJ3QgbWluaW1hbCwgc2luY2Ugb3RoZXIgb3BlcmF0b3JzLCBzdWNoIGFzIFxgLCBhcmVuJ3QgZGlzYWJsZWQuICAqLworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfTUlOSU1BTF9CQVNJQwkJCQkJXAorICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9MSU1JVEVEX09QUykKKworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQJCQkJCVwKKyAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OICB8IFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUwkJCVwKKyAgIHwgUkVfQ09OVEVYVF9JTkRFUF9PUFMgICB8IFJFX05PX0JLX0JSQUNFUwkJCQlcCisgICB8IFJFX05PX0JLX1BBUkVOUyAgICAgICAgfCBSRV9OT19CS19WQkFSCQkJCVwKKyAgIHwgUkVfQ09OVEVYVF9JTlZBTElEX09QUyB8IFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCisKKy8qIERpZmZlcnMgZnJvbSAuLi5fUE9TSVhfRVhURU5ERUQgaW4gdGhhdCBSRV9DT05URVhUX0lOREVQX09QUyBpcworICAgcmVtb3ZlZCBhbmQgUkVfTk9fQktfUkVGUyBpcyBhZGRlZC4gICovCisjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9NSU5JTUFMX0VYVEVOREVECQkJCVwKKyAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OICB8IFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUwkJCVwKKyAgIHwgUkVfQ09OVEVYVF9JTlZBTElEX09QUyB8IFJFX05PX0JLX0JSQUNFUwkJCQlcCisgICB8IFJFX05PX0JLX1BBUkVOUyAgICAgICAgfCBSRV9OT19CS19SRUZTCQkJCVwKKyAgIHwgUkVfTk9fQktfVkJBUgkgICAgfCBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQorLyogW1tbZW5kIHN5bnRheGVzXV1dICovCisMCisvKiBNYXhpbXVtIG51bWJlciBvZiBkdXBsaWNhdGVzIGFuIGludGVydmFsIGNhbiBhbGxvdy4gIFNvbWUgc3lzdGVtcworICAgKGVycm9uZW91c2x5KSBkZWZpbmUgdGhpcyBpbiBvdGhlciBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSB3YW50IG91cgorICAgdmFsdWUsIHNvIHJlbW92ZSBhbnkgcHJldmlvdXMgZGVmaW5lLiAgKi8KKyMgaWZkZWYgUkVfRFVQX01BWAorIyAgdW5kZWYgUkVfRFVQX01BWAorIyBlbmRpZgorLyogSWYgc2l6ZW9mKGludCkgPT0gMiwgdGhlbiAoKDEgPDwgMTUpIC0gMSkgb3ZlcmZsb3dzLiAgKi8KKyMgZGVmaW5lIFJFX0RVUF9NQVggKDB4N2ZmZikKKyNlbmRpZgorCisKKy8qIFBPU0lYIGBjZmxhZ3MnIGJpdHMgKGkuZS4sIGluZm9ybWF0aW9uIGZvciBgcmVnY29tcCcpLiAgKi8KKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHVzZSBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LgorICAgSWYgbm90IHNldCwgdGhlbiB1c2UgYmFzaWMgcmVndWxhciBleHByZXNzaW9uIHN5bnRheC4gICovCisjZGVmaW5lIFJFR19FWFRFTkRFRCAxCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorICAgSWYgbm90IHNldCwgdGhlbiBjYXNlIGlzIHNpZ25pZmljYW50LiAgKi8KKyNkZWZpbmUgUkVHX0lDQVNFIChSRUdfRVhURU5ERUQgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGFuY2hvcnMgZG8gbm90IG1hdGNoIGF0IG5ld2xpbmUKKyAgICAgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLgorICAgSWYgbm90IHNldCwgdGhlbiBhbmNob3JzIGRvIG1hdGNoIGF0IG5ld2xpbmVzLiAgKi8KKyNkZWZpbmUgUkVHX05FV0xJTkUgKFJFR19JQ0FTRSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gcmVwb3J0IG9ubHkgc3VjY2VzcyBvciBmYWlsIGluIHJlZ2V4ZWMuCisgICBJZiBub3Qgc2V0LCB0aGVuIHJldHVybnMgZGlmZmVyIGJldHdlZW4gbm90IG1hdGNoaW5nIGFuZCBlcnJvcnMuICAqLworI2RlZmluZSBSRUdfTk9TVUIgKFJFR19ORVdMSU5FIDw8IDEpCisKKworLyogUE9TSVggYGVmbGFncycgYml0cyAoaS5lLiwgaW5mb3JtYXRpb24gZm9yIHJlZ2V4ZWMpLiAgKi8KKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHRoZSBiZWdpbm5pbmctb2YtbGluZSBvcGVyYXRvciBkb2Vzbid0IG1hdGNoCisgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyAocHJlc3VtYWJseSBiZWNhdXNlIGl0J3Mgbm90IHRoZQorICAgICBiZWdpbm5pbmcgb2YgYSBsaW5lKS4KKyAgIElmIG5vdCBzZXQsIHRoZW4gdGhlIGJlZ2lubmluZy1vZi1saW5lIG9wZXJhdG9yIGRvZXMgbWF0Y2ggdGhlCisgICAgIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLiAgKi8KKyNkZWZpbmUgUkVHX05PVEJPTCAxCisKKy8qIExpa2UgUkVHX05PVEJPTCwgZXhjZXB0IGZvciB0aGUgZW5kLW9mLWxpbmUuICAqLworI2RlZmluZSBSRUdfTk9URU9MICgxIDw8IDEpCisKKy8qIFVzZSBQTUFUQ0hbMF0gdG8gZGVsaW1pdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc2VhcmNoIGluIHRoZQorICAgYnVmZmVyLiAgKi8KKyNkZWZpbmUgUkVHX1NUQVJURU5EICgxIDw8IDIpCisKKworLyogSWYgYW55IGVycm9yIGNvZGVzIGFyZSByZW1vdmVkLCBjaGFuZ2VkLCBvciBhZGRlZCwgdXBkYXRlIHRoZQorICAgYHJlX2Vycm9yX21zZycgdGFibGUgaW4gcmVnZXguYy4gICovCit0eXBlZGVmIGVudW0KK3sKKyNpZiBkZWZpbmVkIF9YT1BFTl9TT1VSQ0UgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTjJLCisgIFJFR19FTk9TWVMgPSAtMSwJLyogVGhpcyB3aWxsIG5ldmVyIGhhcHBlbiBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbi4gICovCisjZW5kaWYKKworICBSRUdfTk9FUlJPUiA9IDAsCS8qIFN1Y2Nlc3MuICAqLworICBSRUdfTk9NQVRDSCwJCS8qIERpZG4ndCBmaW5kIGEgbWF0Y2ggKGZvciByZWdleGVjKS4gICovCisKKyAgLyogUE9TSVggcmVnY29tcCByZXR1cm4gZXJyb3IgY29kZXMuICAoSW4gdGhlIG9yZGVyIGxpc3RlZCBpbiB0aGUKKyAgICAgc3RhbmRhcmQuKSAgKi8KKyAgUkVHX0JBRFBBVCwJCS8qIEludmFsaWQgcGF0dGVybi4gICovCisgIFJFR19FQ09MTEFURSwJCS8qIEluYWxpZCBjb2xsYXRpbmcgZWxlbWVudC4gICovCisgIFJFR19FQ1RZUEUsCQkvKiBJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lLiAgKi8KKyAgUkVHX0VFU0NBUEUsCQkvKiBUcmFpbGluZyBiYWNrc2xhc2guICAqLworICBSRUdfRVNVQlJFRywJCS8qIEludmFsaWQgYmFjayByZWZlcmVuY2UuICAqLworICBSRUdfRUJSQUNLLAkJLyogVW5tYXRjaGVkIGxlZnQgYnJhY2tldC4gICovCisgIFJFR19FUEFSRU4sCQkvKiBQYXJlbnRoZXNpcyBpbWJhbGFuY2UuICAqLworICBSRUdfRUJSQUNFLAkJLyogVW5tYXRjaGVkIFx7LiAgKi8KKyAgUkVHX0JBREJSLAkJLyogSW52YWxpZCBjb250ZW50cyBvZiBce1x9LiAgKi8KKyAgUkVHX0VSQU5HRSwJCS8qIEludmFsaWQgcmFuZ2UgZW5kLiAgKi8KKyAgUkVHX0VTUEFDRSwJCS8qIFJhbiBvdXQgb2YgbWVtb3J5LiAgKi8KKyAgUkVHX0JBRFJQVCwJCS8qIE5vIHByZWNlZGluZyByZSBmb3IgcmVwZXRpdGlvbiBvcC4gICovCisKKyAgLyogRXJyb3IgY29kZXMgd2UndmUgYWRkZWQuICAqLworICBSRUdfRUVORCwJCS8qIFByZW1hdHVyZSBlbmQuICAqLworICBSRUdfRVNJWkUsCQkvKiBDb21waWxlZCBwYXR0ZXJuIGJpZ2dlciB0aGFuIDJeMTYgYnl0ZXMuICAqLworICBSRUdfRVJQQVJFTgkJLyogVW5tYXRjaGVkICkgb3IgXCk7IG5vdCByZXR1cm5lZCBmcm9tIHJlZ2NvbXAuICAqLworfSByZWdfZXJyY29kZV90OworDAorLyogVGhpcyBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgY29tcGlsZWQgcGF0dGVybi4gIEJlZm9yZSBjYWxsaW5nCisgICB0aGUgcGF0dGVybiBjb21waWxlciwgdGhlIGZpZWxkcyBgYnVmZmVyJywgYGFsbG9jYXRlZCcsIGBmYXN0bWFwJywKKyAgIGB0cmFuc2xhdGUnLCBhbmQgYG5vX3N1YicgY2FuIGJlIHNldC4gIEFmdGVyIHRoZSBwYXR0ZXJuIGhhcyBiZWVuCisgICBjb21waWxlZCwgdGhlIGByZV9uc3ViJyBmaWVsZCBpcyBhdmFpbGFibGUuICBBbGwgb3RoZXIgZmllbGRzIGFyZQorICAgcHJpdmF0ZSB0byB0aGUgcmVnZXggcm91dGluZXMuICAqLworCisjaWZuZGVmIFJFX1RSQU5TTEFURV9UWVBFCisjIGRlZmluZSBfX1JFX1RSQU5TTEFURV9UWVBFIHVuc2lnbmVkIGNoYXIgKgorIyBpZmRlZiBfX1VTRV9HTlUKKyMgIGRlZmluZSBSRV9UUkFOU0xBVEVfVFlQRSBfX1JFX1RSQU5TTEFURV9UWVBFCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgX19SRVBCX1BSRUZJWChuYW1lKSBuYW1lCisjZWxzZQorIyBkZWZpbmUgX19SRVBCX1BSRUZJWChuYW1lKSBfXyMjbmFtZQorI2VuZGlmCisKK3N0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlcgoreworICAvKiBTcGFjZSB0aGF0IGhvbGRzIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgSXQgaXMgZGVjbGFyZWQgYXMKKyAgICAgYHVuc2lnbmVkIGNoYXIgKicgYmVjYXVzZSBpdHMgZWxlbWVudHMgYXJlIHNvbWV0aW1lcyB1c2VkIGFzCisgICAgIGFycmF5IGluZGV4ZXMuICAqLworICB1bnNpZ25lZCBjaGFyICpfX1JFUEJfUFJFRklYKGJ1ZmZlcik7CisKKyAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHdoaWNoIGBidWZmZXInIHBvaW50cy4gICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fUkVQQl9QUkVGSVgoYWxsb2NhdGVkKTsKKworICAvKiBOdW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgdXNlZCBpbiBgYnVmZmVyJy4gICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fUkVQQl9QUkVGSVgodXNlZCk7CisKKyAgLyogU3ludGF4IHNldHRpbmcgd2l0aCB3aGljaCB0aGUgcGF0dGVybiB3YXMgY29tcGlsZWQuICAqLworICByZWdfc3ludGF4X3QgX19SRVBCX1BSRUZJWChzeW50YXgpOworCisgIC8qIFBvaW50ZXIgdG8gYSBmYXN0bWFwLCBpZiBhbnksIG90aGVyd2lzZSB6ZXJvLiAgcmVfc2VhcmNoIHVzZXMgdGhlCisgICAgIGZhc3RtYXAsIGlmIHRoZXJlIGlzIG9uZSwgdG8gc2tpcCBvdmVyIGltcG9zc2libGUgc3RhcnRpbmcgcG9pbnRzCisgICAgIGZvciBtYXRjaGVzLiAgKi8KKyAgY2hhciAqX19SRVBCX1BSRUZJWChmYXN0bWFwKTsKKworICAvKiBFaXRoZXIgYSB0cmFuc2xhdGUgdGFibGUgdG8gYXBwbHkgdG8gYWxsIGNoYXJhY3RlcnMgYmVmb3JlCisgICAgIGNvbXBhcmluZyB0aGVtLCBvciB6ZXJvIGZvciBubyB0cmFuc2xhdGlvbi4gIFRoZSB0cmFuc2xhdGlvbiBpcworICAgICBhcHBsaWVkIHRvIGEgcGF0dGVybiB3aGVuIGl0IGlzIGNvbXBpbGVkIGFuZCB0byBhIHN0cmluZyB3aGVuIGl0CisgICAgIGlzIG1hdGNoZWQuICAqLworICBfX1JFX1RSQU5TTEFURV9UWVBFIF9fUkVQQl9QUkVGSVgodHJhbnNsYXRlKTsKKworICAvKiBOdW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgZm91bmQgYnkgdGhlIGNvbXBpbGVyLiAgKi8KKyAgc2l6ZV90IHJlX25zdWI7CisKKyAgLyogWmVybyBpZiB0aGlzIHBhdHRlcm4gY2Fubm90IG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcsIG9uZSBlbHNlLgorICAgICBXZWxsLCBpbiB0cnV0aCBpdCdzIHVzZWQgb25seSBpbiBgcmVfc2VhcmNoXzInLCB0byBzZWUgd2hldGhlciBvcgorICAgICBub3Qgd2Ugc2hvdWxkIHVzZSB0aGUgZmFzdG1hcCwgc28gd2UgZG9uJ3Qgc2V0IHRoaXMgYWJzb2x1dGVseQorICAgICBwZXJmZWN0bHk7IHNlZSBgcmVfY29tcGlsZV9mYXN0bWFwJyAodGhlIGBkdXBsaWNhdGUnIGNhc2UpLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChjYW5fYmVfbnVsbCkgOiAxOworCisgIC8qIElmIFJFR1NfVU5BTExPQ0FURUQsIGFsbG9jYXRlIHNwYWNlIGluIHRoZSBgcmVncycgc3RydWN0dXJlCisgICAgIGZvciBgbWF4IChSRV9OUkVHUywgcmVfbnN1YiArIDEpJyBncm91cHMuCisgICAgIElmIFJFR1NfUkVBTExPQ0FURSwgcmVhbGxvY2F0ZSBzcGFjZSBpZiBuZWNlc3NhcnkuCisgICAgIElmIFJFR1NfRklYRUQsIHVzZSB3aGF0J3MgdGhlcmUuICAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgUkVHU19VTkFMTE9DQVRFRCAwCisjIGRlZmluZSBSRUdTX1JFQUxMT0NBVEUgMQorIyBkZWZpbmUgUkVHU19GSVhFRCAyCisjZW5kaWYKKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChyZWdzX2FsbG9jYXRlZCkgOiAyOworCisgIC8qIFNldCB0byB6ZXJvIHdoZW4gYHJlZ2V4X2NvbXBpbGUnIGNvbXBpbGVzIGEgcGF0dGVybjsgc2V0IHRvIG9uZQorICAgICBieSBgcmVfY29tcGlsZV9mYXN0bWFwJyBpZiBpdCB1cGRhdGVzIHRoZSBmYXN0bWFwLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChmYXN0bWFwX2FjY3VyYXRlKSA6IDE7CisKKyAgLyogSWYgc2V0LCBgcmVfbWF0Y2hfMicgZG9lcyBub3QgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0CisgICAgIHN1YmV4cHJlc3Npb25zLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChub19zdWIpIDogMTsKKworICAvKiBJZiBzZXQsIGEgYmVnaW5uaW5nLW9mLWxpbmUgYW5jaG9yIGRvZXNuJ3QgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc3RyaW5nLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChub3RfYm9sKSA6IDE7CisKKyAgLyogU2ltaWxhcmx5IGZvciBhbiBlbmQtb2YtbGluZSBhbmNob3IuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKG5vdF9lb2wpIDogMTsKKworICAvKiBJZiB0cnVlLCBhbiBhbmNob3IgYXQgYSBuZXdsaW5lIG1hdGNoZXMuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKG5ld2xpbmVfYW5jaG9yKSA6IDE7Cit9OworCit0eXBlZGVmIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciByZWdleF90OworDAorLyogVHlwZSBmb3IgYnl0ZSBvZmZzZXRzIHdpdGhpbiB0aGUgc3RyaW5nLiAgUE9TSVggbWFuZGF0ZXMgdGhpcy4gICovCit0eXBlZGVmIGludCByZWdvZmZfdDsKKworCisjaWZkZWYgX19VU0VfR05VCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2Ugc3RvcmUgcmVnaXN0ZXIgbWF0Y2ggZGF0YSBpbi4gIFNlZQorICAgcmVnZXgudGV4aW5mbyBmb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHdoYXQgcmVnaXN0ZXJzIG1hdGNoLiAgKi8KK3N0cnVjdCByZV9yZWdpc3RlcnMKK3sKKyAgdW5zaWduZWQgbnVtX3JlZ3M7CisgIHJlZ29mZl90ICpzdGFydDsKKyAgcmVnb2ZmX3QgKmVuZDsKK307CisKKworLyogSWYgYHJlZ3NfYWxsb2NhdGVkJyBpcyBSRUdTX1VOQUxMT0NBVEVEIGluIHRoZSBwYXR0ZXJuIGJ1ZmZlciwKKyAgIGByZV9tYXRjaF8yJyByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGF0IGxlYXN0IHRoaXMgbWFueSByZWdpc3RlcnMKKyAgIHRoZSBmaXJzdCB0aW1lIGEgYHJlZ3MnIHN0cnVjdHVyZSBpcyBwYXNzZWQuICAqLworIyBpZm5kZWYgUkVfTlJFR1MKKyMgIGRlZmluZSBSRV9OUkVHUyAzMAorIyBlbmRpZgorI2VuZGlmCisKKworLyogUE9TSVggc3BlY2lmaWNhdGlvbiBmb3IgcmVnaXN0ZXJzLiAgQXNpZGUgZnJvbSB0aGUgZGlmZmVyZW50IG5hbWVzIHRoYW4KKyAgIGByZV9yZWdpc3RlcnMnLCBQT1NJWCB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdHVyZXMsIGluc3RlYWQgb2YgYQorICAgc3RydWN0dXJlIG9mIGFycmF5cy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICByZWdvZmZfdCBybV9zbzsgIC8qIEJ5dGUgb2Zmc2V0IGZyb20gc3RyaW5nJ3Mgc3RhcnQgdG8gc3Vic3RyaW5nJ3Mgc3RhcnQuICAqLworICByZWdvZmZfdCBybV9lbzsgIC8qIEJ5dGUgb2Zmc2V0IGZyb20gc3RyaW5nJ3Mgc3RhcnQgdG8gc3Vic3RyaW5nJ3MgZW5kLiAgKi8KK30gcmVnbWF0Y2hfdDsKKwwKKy8qIERlY2xhcmF0aW9ucyBmb3Igcm91dGluZXMuICAqLworCisjaWZkZWYgX19VU0VfR05VCisvKiBTZXRzIHRoZSBjdXJyZW50IGRlZmF1bHQgc3ludGF4IHRvIFNZTlRBWCwgYW5kIHJldHVybiB0aGUgb2xkIHN5bnRheC4KKyAgIFlvdSBjYW4gYWxzbyBzaW1wbHkgYXNzaWduIHRvIHRoZSBgcmVfc3ludGF4X29wdGlvbnMnIHZhcmlhYmxlLiAgKi8KK2V4dGVybiByZWdfc3ludGF4X3QgcmVfc2V0X3N5bnRheCAocmVnX3N5bnRheF90IF9fc3ludGF4KTsKKworLyogQ29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9uIFBBVFRFUk4sIHdpdGggbGVuZ3RoIExFTkdUSAorICAgYW5kIHN5bnRheCBnaXZlbiBieSB0aGUgZ2xvYmFsIGByZV9zeW50YXhfb3B0aW9ucycsIGludG8gdGhlIGJ1ZmZlcgorICAgQlVGRkVSLiAgUmV0dXJuIE5VTEwgaWYgc3VjY2Vzc2Z1bCwgYW5kIGFuIGVycm9yIHN0cmluZyBpZiBub3QuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKnJlX2NvbXBpbGVfcGF0dGVybiAoY29uc3QgY2hhciAqX19wYXR0ZXJuLCBzaXplX3QgX19sZW5ndGgsCisJCQkJICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIpOworCisKKy8qIENvbXBpbGUgYSBmYXN0bWFwIGZvciB0aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZGRVI7IHVzZWQgdG8KKyAgIGFjY2VsZXJhdGUgc2VhcmNoZXMuICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsIGFuZCAtMiBpZiB3YXMgYW4KKyAgIGludGVybmFsIGVycm9yLiAgKi8KK2V4dGVybiBpbnQgcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyKTsKKworCisvKiBTZWFyY2ggaW4gdGhlIHN0cmluZyBTVFJJTkcgKHdpdGggbGVuZ3RoIExFTkdUSCkgZm9yIHRoZSBwYXR0ZXJuCisgICBjb21waWxlZCBpbnRvIEJVRkZFUi4gIFN0YXJ0IHNlYXJjaGluZyBhdCBwb3NpdGlvbiBTVEFSVCwgZm9yIFJBTkdFCisgICBjaGFyYWN0ZXJzLiAgUmV0dXJuIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbWF0Y2gsIC0xIGZvciBubworICAgbWF0Y2gsIG9yIC0yIGZvciBhbiBpbnRlcm5hbCBlcnJvci4gIEFsc28gcmV0dXJuIHJlZ2lzdGVyCisgICBpbmZvcm1hdGlvbiBpbiBSRUdTIChpZiBSRUdTIGFuZCBCVUZGRVItPm5vX3N1YiBhcmUgbm9uemVybykuICAqLworZXh0ZXJuIGludCByZV9zZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsIGNvbnN0IGNoYXIgKl9fY3N0cmluZywKKwkJICAgICAgaW50IF9fbGVuZ3RoLCBpbnQgX19zdGFydCwgaW50IF9fcmFuZ2UsCisJCSAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncyk7CisKKworLyogTGlrZSBgcmVfc2VhcmNoJywgYnV0IHNlYXJjaCBpbiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZAorICAgU1RSSU5HMi4gIEFsc28sIHN0b3Agc2VhcmNoaW5nIGF0IGluZGV4IFNUQVJUICsgU1RPUC4gICovCitleHRlcm4gaW50IHJlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJY29uc3QgY2hhciAqX19zdHJpbmcxLCBpbnQgX19sZW5ndGgxLAorCQkJY29uc3QgY2hhciAqX19zdHJpbmcyLCBpbnQgX19sZW5ndGgyLCBpbnQgX19zdGFydCwKKwkJCWludCBfX3JhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MsIGludCBfX3N0b3ApOworCisKKy8qIExpa2UgYHJlX3NlYXJjaCcsIGJ1dCByZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyBpbiBTVFJJTkcgdGhlIHJlZ2V4cAorICAgaW4gQlVGRkVSIG1hdGNoZWQsIHN0YXJ0aW5nIGF0IHBvc2l0aW9uIFNUQVJULiAgKi8KK2V4dGVybiBpbnQgcmVfbWF0Y2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsIGNvbnN0IGNoYXIgKl9fY3N0cmluZywKKwkJICAgICBpbnQgX19sZW5ndGgsIGludCBfX3N0YXJ0LCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MpOworCisKKy8qIFJlbGF0ZXMgdG8gYHJlX21hdGNoJyBhcyBgcmVfc2VhcmNoXzInIHJlbGF0ZXMgdG8gYHJlX3NlYXJjaCcuICAqLworZXh0ZXJuIGludCByZV9tYXRjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkgICAgICAgY29uc3QgY2hhciAqX19zdHJpbmcxLCBpbnQgX19sZW5ndGgxLAorCQkgICAgICAgY29uc3QgY2hhciAqX19zdHJpbmcyLCBpbnQgX19sZW5ndGgyLCBpbnQgX19zdGFydCwKKwkJICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncywgaW50IF9fc3RvcCk7CisKKworLyogU2V0IFJFR1MgdG8gaG9sZCBOVU1fUkVHUyByZWdpc3RlcnMsIHN0b3JpbmcgdGhlbSBpbiBTVEFSVFMgYW5kCisgICBFTkRTLiAgU3Vic2VxdWVudCBtYXRjaGVzIHVzaW5nIEJVRkZFUiBhbmQgUkVHUyB3aWxsIHVzZSB0aGlzIG1lbW9yeQorICAgZm9yIHJlY29yZGluZyByZWdpc3RlciBpbmZvcm1hdGlvbi4gIFNUQVJUUyBhbmQgRU5EUyBtdXN0IGJlCisgICBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MsIGFuZCBtdXN0IGVhY2ggYmUgYXQgbGVhc3QgYE5VTV9SRUdTICogc2l6ZW9mCisgICAocmVnb2ZmX3QpJyBieXRlcyBsb25nLgorCisgICBJZiBOVU1fUkVHUyA9PSAwLCB0aGVuIHN1YnNlcXVlbnQgbWF0Y2hlcyBzaG91bGQgYWxsb2NhdGUgdGhlaXIgb3duCisgICByZWdpc3RlciBkYXRhLgorCisgICBVbmxlc3MgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBmaXJzdCBzZWFyY2ggb3IgbWF0Y2ggdXNpbmcKKyAgIFBBVFRFUk5fQlVGRkVSIHdpbGwgYWxsb2NhdGUgaXRzIG93biByZWdpc3RlciBkYXRhLCB3aXRob3V0CisgICBmcmVlaW5nIHRoZSBvbGQgZGF0YS4gICovCitleHRlcm4gdm9pZCByZV9zZXRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqX19yZWdzLAorCQkJICAgICAgdW5zaWduZWQgaW50IF9fbnVtX3JlZ3MsCisJCQkgICAgICByZWdvZmZfdCAqX19zdGFydHMsIHJlZ29mZl90ICpfX2VuZHMpOworI2VuZGlmCS8qIFVzZSBHTlUgKi8KKworI2lmIGRlZmluZWQgX1JFR0VYX1JFX0NPTVAgfHwgKGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBfX1VTRV9CU0QpCisjIGlmbmRlZiBfQ1JBWQorLyogNC4yIGJzZCBjb21wYXRpYmlsaXR5LiAgKi8KK2V4dGVybiBjaGFyICpyZV9jb21wIChjb25zdCBjaGFyICopOworZXh0ZXJuIGludCByZV9leGVjIChjb25zdCBjaGFyICopOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEdDQyAyLjk1IGFuZCBsYXRlciBoYXZlICJfX3Jlc3RyaWN0IjsgQzk5IGNvbXBpbGVycyBoYXZlCisgICAicmVzdHJpY3QiLCBhbmQgImNvbmZpZ3VyZSIgbWF5IGhhdmUgZGVmaW5lZCAicmVzdHJpY3QiLiAgKi8KKyNpZm5kZWYgX19yZXN0cmljdAorIyBpZiAhICgyIDwgX19HTlVDX18gfHwgKDIgPT0gX19HTlVDX18gJiYgOTUgPD0gX19HTlVDX01JTk9SX18pKQorIyAgaWYgZGVmaW5lZCByZXN0cmljdCB8fCAxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18KKyMgICBkZWZpbmUgX19yZXN0cmljdCByZXN0cmljdAorIyAgZWxzZQorIyAgIGRlZmluZSBfX3Jlc3RyaWN0CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisvKiBnY2MgMy4xIGFuZCB1cCBzdXBwb3J0IHRoZSBbcmVzdHJpY3RdIHN5bnRheC4gICovCisjaWZuZGVmIF9fcmVzdHJpY3RfYXJyCisjIGlmIChfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMSkpIFwKKyAgICAgJiYgIWRlZmluZWQgX19HTlVHX18KKyMgIGRlZmluZSBfX3Jlc3RyaWN0X2FyciBfX3Jlc3RyaWN0CisjIGVsc2UKKyMgIGRlZmluZSBfX3Jlc3RyaWN0X2FycgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFBPU0lYIGNvbXBhdGliaWxpdHkuICAqLworZXh0ZXJuIGludCByZWdjb21wIChyZWdleF90ICpfX3Jlc3RyaWN0IF9fcHJlZywKKwkJICAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXR0ZXJuLAorCQkgICAgaW50IF9fY2ZsYWdzKTsKKworZXh0ZXJuIGludCByZWdleGVjIChjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IF9fcHJlZywKKwkJICAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jc3RyaW5nLCBzaXplX3QgX19ubWF0Y2gsCisJCSAgICByZWdtYXRjaF90IF9fcG1hdGNoW19fcmVzdHJpY3RfYXJyXSwKKwkJICAgIGludCBfX2VmbGFncyk7CisKK2V4dGVybiBzaXplX3QgcmVnZXJyb3IgKGludCBfX2VycmNvZGUsIGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgX19wcmVnLAorCQkJY2hhciAqX19yZXN0cmljdCBfX2VycmJ1Ziwgc2l6ZV90IF9fZXJyYnVmX3NpemUpOworCitleHRlcm4gdm9pZCByZWdmcmVlIChyZWdleF90ICpfX3ByZWcpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCS8qIEMrKyAqLworCisjZW5kaWYgLyogcmVnZXguaCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmMgYi9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTM4NTRjCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmMKQEAgLTAsMCArMSwxNzQ0IEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgICAwMjExMC0xMzAxIFVTQS4gICovCisKK3N0YXRpYyB2b2lkIHJlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisJCQkJCXJlX3N0cmluZ190ICpwc3RyLAorCQkJCQlSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgaW50IGljYXNlLAorCQkJCQljb25zdCByZV9kZmFfdCAqZGZhKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICpjcmVhdGVfY2lfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkJCQkgIHVuc2lnbmVkIGludCBoYXNoKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICpjcmVhdGVfY2RfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkJCQkgIHVuc2lnbmVkIGludCBjb250ZXh0LAorCQkJCQkgIHVuc2lnbmVkIGludCBoYXNoKSBpbnRlcm5hbF9mdW5jdGlvbjsKKworI2lmZGVmIEdBV0sKKyN1bmRlZiBNQVgJLyogc2FmZXR5ICovCitzdGF0aWMgaW50CitNQVgoc2l6ZV90IGEsIHNpemVfdCBiKQoreworCXJldHVybiAoYSA+IGIgPyBhIDogYik7Cit9CisjZW5kaWYKKwwKKy8qIEZ1bmN0aW9ucyBmb3Igc3RyaW5nIG9wZXJhdGlvbi4gICovCisKKy8qIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGUgdGhlIGJ1ZmZlcnMuICBJdCBpcyBuZWNlc3NhcnkgdG8gY2FsbAorICAgcmVfc3RyaW5nX3JlY29uc3RydWN0IGJlZm9yZSB1c2luZyB0aGUgb2JqZWN0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfYWxsb2NhdGUgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIGludCBpbml0X2xlbiwKKwkJICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBpbnQgaWNhc2UsIGNvbnN0IHJlX2RmYV90ICpkZmEpCit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICBpbnQgaW5pdF9idWZfbGVuOworCisgIC8qIEVuc3VyZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGZpdHMgaW50byB0aGUgYnVmZmVycy4gICovCisgIGlmIChpbml0X2xlbiA8IGRmYS0+bWJfY3VyX21heCkKKyAgICBpbml0X2xlbiA9IGRmYS0+bWJfY3VyX21heDsKKyAgaW5pdF9idWZfbGVuID0gKGxlbiArIDEgPCBpbml0X2xlbikgPyBsZW4gKyAxOiBpbml0X2xlbjsKKyAgcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKHN0ciwgbGVuLCBwc3RyLCB0cmFucywgaWNhc2UsIGRmYSk7CisKKyAgcmV0ID0gcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocHN0ciwgaW5pdF9idWZfbGVuKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisKKyAgcHN0ci0+d29yZF9jaGFyID0gZGZhLT53b3JkX2NoYXI7CisgIHBzdHItPndvcmRfb3BzX3VzZWQgPSBkZmEtPndvcmRfb3BzX3VzZWQ7CisgIHBzdHItPm1icyA9IHBzdHItPm1ic19hbGxvY2F0ZWQgPyBwc3RyLT5tYnMgOiAodW5zaWduZWQgY2hhciAqKSBzdHI7CisgIHBzdHItPnZhbGlkX2xlbiA9IChwc3RyLT5tYnNfYWxsb2NhdGVkIHx8IGRmYS0+bWJfY3VyX21heCA+IDEpID8gMCA6IGxlbjsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlIHRoZSBidWZmZXJzLCBhbmQgaW5pdGlhbGl6ZSB0aGVtLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorCQkgICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBpbnQgaWNhc2UsIGNvbnN0IHJlX2RmYV90ICpkZmEpCit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICBtZW1zZXQgKHBzdHIsICdcMCcsIHNpemVvZiAocmVfc3RyaW5nX3QpKTsKKyAgcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKHN0ciwgbGVuLCBwc3RyLCB0cmFucywgaWNhc2UsIGRmYSk7CisKKyAgaWYgKGxlbiA+IDApCisgICAgeworICAgICAgcmV0ID0gcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocHN0ciwgbGVuICsgMSk7CisgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIHJldDsKKyAgICB9CisgIHBzdHItPm1icyA9IHBzdHItPm1ic19hbGxvY2F0ZWQgPyBwc3RyLT5tYnMgOiAodW5zaWduZWQgY2hhciAqKSBzdHI7CisKKyAgaWYgKGljYXNlKQorICAgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJeworCSAgd2hpbGUgKDEpCisJICAgIHsKKwkgICAgICByZXQgPSBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChwc3RyKTsKKwkgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiByZXQ7CisJICAgICAgaWYgKHBzdHItPnZhbGlkX3Jhd19sZW4gPj0gbGVuKQorCQlicmVhazsKKwkgICAgICBpZiAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT52YWxpZF9sZW4gKyBkZmEtPm1iX2N1cl9tYXgpCisJCWJyZWFrOworCSAgICAgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIHBzdHItPmJ1ZnNfbGVuICogMik7CisJICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCQlyZXR1cm4gcmV0OworCSAgICB9CisJfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCWJ1aWxkX3VwcGVyX2J1ZmZlciAocHN0cik7CisgICAgfQorICBlbHNlCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwlidWlsZF93Y3NfYnVmZmVyIChwc3RyKTsKKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KKwl7CisJICBpZiAodHJhbnMgIT0gTlVMTCkKKwkgICAgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHBzdHIpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgcHN0ci0+dmFsaWRfbGVuID0gcHN0ci0+YnVmc19sZW47CisJICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHBzdHItPmJ1ZnNfbGVuOworCSAgICB9CisJfQorICAgIH0KKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIHJlX3N0cmluZ19hbGxvY2F0ZSwgYW5kIHJlX3N0cmluZ19jb25zdHJ1Y3QuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgbmV3X2J1Zl9sZW4pCit7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIHdpbnRfdCAqbmV3X3djczsKKworICAgICAgLyogQXZvaWQgb3ZlcmZsb3cgaW4gcmVhbGxvYy4gICovCisgICAgICBjb25zdCBzaXplX3QgbWF4X29iamVjdF9zaXplID0gTUFYIChzaXplb2YgKHdpbnRfdCksIHNpemVvZiAoaW50KSk7CisgICAgICBpZiAoQkUgKFNJWkVfTUFYIC8gbWF4X29iamVjdF9zaXplIDwgbmV3X2J1Zl9sZW4sIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworCisgICAgICBuZXdfd2NzID0gcmVfcmVhbGxvYyAocHN0ci0+d2NzLCB3aW50X3QsIG5ld19idWZfbGVuKTsKKyAgICAgIGlmIChCRSAobmV3X3djcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHBzdHItPndjcyA9IG5ld193Y3M7CisgICAgICBpZiAocHN0ci0+b2Zmc2V0cyAhPSBOVUxMKQorCXsKKwkgIGludCAqbmV3X29mZnNldHMgPSByZV9yZWFsbG9jIChwc3RyLT5vZmZzZXRzLCBpbnQsIG5ld19idWZfbGVuKTsKKwkgIGlmIChCRSAobmV3X29mZnNldHMgPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgcHN0ci0+b2Zmc2V0cyA9IG5ld19vZmZzZXRzOworCX0KKyAgICB9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisgIGlmIChwc3RyLT5tYnNfYWxsb2NhdGVkKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKm5ld19tYnMgPSByZV9yZWFsbG9jIChwc3RyLT5tYnMsIHVuc2lnbmVkIGNoYXIsCisJCQkJCSAgIG5ld19idWZfbGVuKTsKKyAgICAgIGlmIChCRSAobmV3X21icyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHBzdHItPm1icyA9IG5ld19tYnM7CisgICAgfQorICBwc3RyLT5idWZzX2xlbiA9IG5ld19idWZfbGVuOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCByZV9zdHJpbmdfdCAqcHN0ciwKKwkJCSAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgaW50IGljYXNlLAorCQkJICAgIGNvbnN0IHJlX2RmYV90ICpkZmEpCit7CisgIHBzdHItPnJhd19tYnMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHI7CisgIHBzdHItPmxlbiA9IGxlbjsKKyAgcHN0ci0+cmF3X2xlbiA9IGxlbjsKKyAgcHN0ci0+dHJhbnMgPSB0cmFuczsKKyAgcHN0ci0+aWNhc2UgPSBpY2FzZSA/IDEgOiAwOworICBwc3RyLT5tYnNfYWxsb2NhdGVkID0gKHRyYW5zICE9IE5VTEwgfHwgaWNhc2UpOworICBwc3RyLT5tYl9jdXJfbWF4ID0gZGZhLT5tYl9jdXJfbWF4OworICBwc3RyLT5pc191dGY4ID0gZGZhLT5pc191dGY4OworICBwc3RyLT5tYXBfbm90YXNjaWkgPSBkZmEtPm1hcF9ub3Rhc2NpaTsKKyAgcHN0ci0+c3RvcCA9IHBzdHItPmxlbjsKKyAgcHN0ci0+cmF3X3N0b3AgPSBwc3RyLT5zdG9wOworfQorCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKworLyogQnVpbGQgd2lkZSBjaGFyYWN0ZXIgYnVmZmVyIFBTVFItPldDUy4KKyAgIElmIHRoZSBieXRlIHNlcXVlbmNlIG9mIHRoZSBzdHJpbmcgYXJlOgorICAgICA8bWIxPigwKSwgPG1iMT4oMSksIDxtYjI+KDApLCA8bWIyPigxKSwgPHNiMz4KKyAgIFRoZW4gd2lkZSBjaGFyYWN0ZXIgYnVmZmVyIHdpbGwgYmU6CisgICAgIDx3YzE+ICAgLCBXRU9GICAgICwgPHdjMj4gICAsIFdFT0YgICAgLCA8d2MzPgorICAgV2UgdXNlIFdFT0YgZm9yIHBhZGRpbmcsIHRoZXkgaW5kaWNhdGUgdGhhdCB0aGUgcG9zaXRpb24gaXNuJ3QKKyAgIGEgZmlyc3QgYnl0ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCisKKyAgIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgUFNUUi0+VkFMSURfTEVOIGVsZW1lbnRzIGFyZSBhbHJlYWR5CisgICBidWlsdCBhbmQgc3RhcnRzIGZyb20gUFNUUi0+VkFMSURfTEVOLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF93Y3NfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyNpZmRlZiBfTElCQworICB1bnNpZ25lZCBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKyAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHBzdHItPm1iX2N1cl9tYXgpOworI2Vsc2UKKyAgdW5zaWduZWQgY2hhciBidWZbNjRdOworI2VuZGlmCisgIG1ic3RhdGVfdCBwcmV2X3N0OworICBpbnQgYnl0ZV9pZHgsIGVuZF9pZHgsIHJlbWFpbl9sZW47CisgIHNpemVfdCBtYmNsZW47CisKKyAgLyogQnVpbGQgdGhlIGJ1ZmZlcnMgZnJvbSBwc3RyLT52YWxpZF9sZW4gdG8gZWl0aGVyIHBzdHItPmxlbiBvcgorICAgICBwc3RyLT5idWZzX2xlbi4gICovCisgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisgIGZvciAoYnl0ZV9pZHggPSBwc3RyLT52YWxpZF9sZW47IGJ5dGVfaWR4IDwgZW5kX2lkeDspCisgICAgeworICAgICAgd2NoYXJfdCB3YzsKKyAgICAgIGNvbnN0IGNoYXIgKnA7CisKKyAgICAgIHJlbWFpbl9sZW4gPSBlbmRfaWR4IC0gYnl0ZV9pZHg7CisgICAgICBwcmV2X3N0ID0gcHN0ci0+Y3VyX3N0YXRlOworICAgICAgLyogQXBwbHkgdGhlIHRyYW5zbGF0aW9uIGlmIHdlIG5lZWQuICAqLworICAgICAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwl7CisJICBpbnQgaSwgY2g7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBwc3RyLT5tYl9jdXJfbWF4ICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisJICAgIHsKKwkgICAgICBjaCA9IHBzdHItPnJhd19tYnMgW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHggKyBpXTsKKwkgICAgICBidWZbaV0gPSBwc3RyLT5tYnNbYnl0ZV9pZHggKyBpXSA9IHBzdHItPnRyYW5zW2NoXTsKKwkgICAgfQorCSAgcCA9IChjb25zdCBjaGFyICopIGJ1ZjsKKwl9CisgICAgICBlbHNlCisJcCA9IChjb25zdCBjaGFyICopIHBzdHItPnJhd19tYnMgKyBwc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4OworICAgICAgbWJjbGVuID0gX19tYnJ0b3djICgmd2MsIHAsIHJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworICAgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTIsIDApKQorCXsKKwkgIC8qIFRoZSBidWZmZXIgZG9lc24ndCBoYXZlIGVub3VnaCBzcGFjZSwgZmluaXNoIHRvIGJ1aWxkLiAgKi8KKwkgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJICBicmVhazsKKwl9CisgICAgICBlbHNlIGlmIChCRSAobWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAwLCAwKSkKKwl7CisJICAvKiBXZSB0cmVhdCB0aGVzZSBjYXNlcyBhcyBhIHNpbmdsZWJ5dGUgY2hhcmFjdGVyLiAgKi8KKwkgIG1iY2xlbiA9IDE7CisJICB3YyA9ICh3Y2hhcl90KSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHhdOworCSAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwkgICAgd2MgPSBwc3RyLT50cmFuc1t3Y107CisJICBwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCX0KKworICAgICAgLyogV3JpdGUgd2lkZSBjaGFyYWN0ZXIgYW5kIHBhZGRpbmcuICAqLworICAgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gd2M7CisgICAgICAvKiBXcml0ZSBwYWRkaW5ncy4gICovCisgICAgICBmb3IgKHJlbWFpbl9sZW4gPSBieXRlX2lkeCArIG1iY2xlbiAtIDE7IGJ5dGVfaWR4IDwgcmVtYWluX2xlbiA7KQorCXBzdHItPndjc1tieXRlX2lkeCsrXSA9IFdFT0Y7CisgICAgfQorICBwc3RyLT52YWxpZF9sZW4gPSBieXRlX2lkeDsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IGJ5dGVfaWR4OworfQorCisvKiBCdWlsZCB3aWRlIGNoYXJhY3RlciBidWZmZXIgUFNUUi0+V0NTIGxpa2UgYnVpbGRfd2NzX2J1ZmZlciwKKyAgIGJ1dCBmb3IgUkVHX0lDQVNFLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyAgbWJzdGF0ZV90IHByZXZfc3Q7CisgIGludCBzcmNfaWR4LCBieXRlX2lkeCwgZW5kX2lkeCwgcmVtYWluX2xlbjsKKyAgc2l6ZV90IG1iY2xlbjsKKyNpZmRlZiBfTElCQworICBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKyAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHBzdHItPm1iX2N1cl9tYXgpOworI2Vsc2UKKyAgY2hhciBidWZbNjRdOworI2VuZGlmCisKKyAgYnl0ZV9pZHggPSBwc3RyLT52YWxpZF9sZW47CisgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisKKyAgLyogVGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb24gYXNzdW1lcyB0aGF0IEFTQ0lJIGNoYXJhY3RlcnMgY2FuIGJlCisgICAgIG1hcHBlZCB0byB3aWRlIGNoYXJhY3RlcnMgd2l0aCBhIHNpbXBsZSBjYXN0LiAgKi8KKyAgaWYgKCEgcHN0ci0+bWFwX25vdGFzY2lpICYmIHBzdHItPnRyYW5zID09IE5VTEwgJiYgIXBzdHItPm9mZnNldHNfbmVlZGVkKQorICAgIHsKKyAgICAgIHdoaWxlIChieXRlX2lkeCA8IGVuZF9pZHgpCisJeworCSAgd2NoYXJfdCB3YzsKKworCSAgaWYgKGlzYXNjaWkgKHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeF0pCisJICAgICAgJiYgbWJzaW5pdCAoJnBzdHItPmN1cl9zdGF0ZSkpCisJICAgIHsKKwkgICAgICAvKiBJbiBjYXNlIG9mIGEgc2luZ2xlYnl0ZSBjaGFyYWN0ZXIuICAqLworCSAgICAgIHBzdHItPm1ic1tieXRlX2lkeF0KKwkJPSB0b3VwcGVyIChwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHhdKTsKKwkgICAgICAvKiBUaGUgbmV4dCBzdGVwIHVzZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB3Y2hhcl90IGlzIGVuY29kZWQKKwkJIEFTQ0lJLXNhZmU6IGFsbCBBU0NJSSB2YWx1ZXMgY2FuIGJlIGNvbnZlcnRlZCBsaWtlIHRoaXMuICAqLworCSAgICAgIHBzdHItPndjc1tieXRlX2lkeF0gPSAod2NoYXJfdCkgcHN0ci0+bWJzW2J5dGVfaWR4XTsKKwkgICAgICArK2J5dGVfaWR4OworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisKKwkgIHJlbWFpbl9sZW4gPSBlbmRfaWR4IC0gYnl0ZV9pZHg7CisJICBwcmV2X3N0ID0gcHN0ci0+Y3VyX3N0YXRlOworCSAgbWJjbGVuID0gX19tYnJ0b3djICgmd2MsCisJCQkgICAgICAoKGNvbnN0IGNoYXIgKikgcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4CisJCQkgICAgICAgKyBieXRlX2lkeCksIHJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworCSAgaWYgKEJFIChtYmNsZW4gKyAyID4gMiwgMSkpCisJICAgIHsKKwkgICAgICB3Y2hhcl90IHdjdSA9IHdjOworCSAgICAgIGlmIChpc3dsb3dlciAod2MpKQorCQl7CisJCSAgc2l6ZV90IG1iY2RsZW47CisKKwkJICB3Y3UgPSB0b3d1cHBlciAod2MpOworCQkgIG1iY2RsZW4gPSB3Y3J0b21iIChidWYsIHdjdSwgJnByZXZfc3QpOworCQkgIGlmIChCRSAobWJjbGVuID09IG1iY2RsZW4sIDEpKQorCQkgICAgbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lkeCwgYnVmLCBtYmNsZW4pOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgc3JjX2lkeCA9IGJ5dGVfaWR4OworCQkgICAgICBnb3RvIG9mZnNldHNfbmVlZGVkOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQltZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LAorCQkJcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHgsIG1iY2xlbik7CisJICAgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gd2N1OworCSAgICAgIC8qIFdyaXRlIHBhZGRpbmdzLiAgKi8KKwkgICAgICBmb3IgKHJlbWFpbl9sZW4gPSBieXRlX2lkeCArIG1iY2xlbiAtIDE7IGJ5dGVfaWR4IDwgcmVtYWluX2xlbiA7KQorCQlwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSBXRU9GOworCSAgICB9CisJICBlbHNlIGlmIChtYmNsZW4gPT0gKHNpemVfdCkgLTEgfHwgbWJjbGVuID09IDApCisJICAgIHsKKwkgICAgICAvKiBJdCBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciBvciAnXDAnLiAgSnVzdCB1c2UgdGhlIGJ5dGUuICAqLworCSAgICAgIGludCBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeF07CisJICAgICAgcHN0ci0+bWJzW2J5dGVfaWR4XSA9IGNoOworCSAgICAgIC8qIEFuZCBhbHNvIGNhc3QgaXQgdG8gd2lkZSBjaGFyLiAgKi8KKwkgICAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSAod2NoYXJfdCkgY2g7CisJICAgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTEsIDApKQorCQlwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBUaGUgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UsIGZpbmlzaCB0byBidWlsZC4gICovCisJICAgICAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIHBzdHItPnZhbGlkX2xlbiA9IGJ5dGVfaWR4OworICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IGJ5dGVfaWR4OworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKyAgZWxzZQorICAgIGZvciAoc3JjX2lkeCA9IHBzdHItPnZhbGlkX3Jhd19sZW47IGJ5dGVfaWR4IDwgZW5kX2lkeDspCisgICAgICB7CisJd2NoYXJfdCB3YzsKKwljb25zdCBjaGFyICpwOworICAgICAgb2Zmc2V0c19uZWVkZWQ6CisJcmVtYWluX2xlbiA9IGVuZF9pZHggLSBieXRlX2lkeDsKKwlwcmV2X3N0ID0gcHN0ci0+Y3VyX3N0YXRlOworCWlmIChCRSAocHN0ci0+dHJhbnMgIT0gTlVMTCwgMCkpCisJICB7CisJICAgIGludCBpLCBjaDsKKworCSAgICBmb3IgKGkgPSAwOyBpIDwgcHN0ci0+bWJfY3VyX21heCAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorCSAgICAgIHsKKwkJY2ggPSBwc3RyLT5yYXdfbWJzIFtwc3RyLT5yYXdfbWJzX2lkeCArIHNyY19pZHggKyBpXTsKKwkJYnVmW2ldID0gcHN0ci0+dHJhbnNbY2hdOworCSAgICAgIH0KKwkgICAgcCA9IChjb25zdCBjaGFyICopIGJ1ZjsKKwkgIH0KKwllbHNlCisJICBwID0gKGNvbnN0IGNoYXIgKikgcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4ICsgc3JjX2lkeDsKKwltYmNsZW4gPSBfX21icnRvd2MgKCZ3YywgcCwgcmVtYWluX2xlbiwgJnBzdHItPmN1cl9zdGF0ZSk7CisJaWYgKEJFIChtYmNsZW4gKyAyID4gMiwgMSkpCisJICB7CisJICAgIHdjaGFyX3Qgd2N1ID0gd2M7CisJICAgIGlmIChpc3dsb3dlciAod2MpKQorCSAgICAgIHsKKwkJc2l6ZV90IG1iY2RsZW47CisKKwkJd2N1ID0gdG93dXBwZXIgKHdjKTsKKwkJbWJjZGxlbiA9IHdjcnRvbWIgKChjaGFyICopIGJ1Ziwgd2N1LCAmcHJldl9zdCk7CisJCWlmIChCRSAobWJjbGVuID09IG1iY2RsZW4sIDEpKQorCQkgIG1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsIGJ1ZiwgbWJjbGVuKTsKKwkJZWxzZSBpZiAobWJjZGxlbiAhPSAoc2l6ZV90KSAtMSkKKwkJICB7CisJCSAgICBzaXplX3QgaTsKKworCQkgICAgaWYgKGJ5dGVfaWR4ICsgbWJjZGxlbiA+IHBzdHItPmJ1ZnNfbGVuKQorCQkgICAgICB7CisJCQlwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCQkJYnJlYWs7CisJCSAgICAgIH0KKworCQkgICAgaWYgKHBzdHItPm9mZnNldHMgPT0gTlVMTCkKKwkJICAgICAgeworCQkJcHN0ci0+b2Zmc2V0cyA9IHJlX21hbGxvYyAoaW50LCBwc3RyLT5idWZzX2xlbik7CisKKwkJCWlmIChwc3RyLT5vZmZzZXRzID09IE5VTEwpCisJCQkgIHJldHVybiBSRUdfRVNQQUNFOworCQkgICAgICB9CisJCSAgICBpZiAoIXBzdHItPm9mZnNldHNfbmVlZGVkKQorCQkgICAgICB7CisJCQlmb3IgKGkgPSAwOyBpIDwgKHNpemVfdCkgYnl0ZV9pZHg7ICsraSkKKwkJCSAgcHN0ci0+b2Zmc2V0c1tpXSA9IGk7CisJCQlwc3RyLT5vZmZzZXRzX25lZWRlZCA9IDE7CisJCSAgICAgIH0KKworCQkgICAgbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lkeCwgYnVmLCBtYmNkbGVuKTsKKwkJICAgIHBzdHItPndjc1tieXRlX2lkeF0gPSB3Y3U7CisJCSAgICBwc3RyLT5vZmZzZXRzW2J5dGVfaWR4XSA9IHNyY19pZHg7CisJCSAgICBmb3IgKGkgPSAxOyBpIDwgbWJjZGxlbjsgKytpKQorCQkgICAgICB7CisJCQlwc3RyLT5vZmZzZXRzW2J5dGVfaWR4ICsgaV0KKwkJCSAgPSBzcmNfaWR4ICsgKGkgPCBtYmNsZW4gPyBpIDogbWJjbGVuIC0gMSk7CisJCQlwc3RyLT53Y3NbYnl0ZV9pZHggKyBpXSA9IFdFT0Y7CisJCSAgICAgIH0KKwkJICAgIHBzdHItPmxlbiArPSBtYmNkbGVuIC0gbWJjbGVuOworCQkgICAgaWYgKHBzdHItPnJhd19zdG9wID4gc3JjX2lkeCkKKwkJICAgICAgcHN0ci0+c3RvcCArPSBtYmNkbGVuIC0gbWJjbGVuOworCQkgICAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHItPmxlbikKKwkJCSAgICAgID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisJCSAgICBieXRlX2lkeCArPSBtYmNkbGVuOworCQkgICAgc3JjX2lkeCArPSBtYmNsZW47CisJCSAgICBjb250aW51ZTsKKwkJICB9CisJCWVsc2UKKwkJICBtZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LCBwLCBtYmNsZW4pOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIG1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsIHAsIG1iY2xlbik7CisKKwkgICAgaWYgKEJFIChwc3RyLT5vZmZzZXRzX25lZWRlZCAhPSAwLCAwKSkKKwkgICAgICB7CisJCXNpemVfdCBpOworCQlmb3IgKGkgPSAwOyBpIDwgbWJjbGVuOyArK2kpCisJCSAgcHN0ci0+b2Zmc2V0c1tieXRlX2lkeCArIGldID0gc3JjX2lkeCArIGk7CisJICAgICAgfQorCSAgICBzcmNfaWR4ICs9IG1iY2xlbjsKKworCSAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSB3Y3U7CisJICAgIC8qIFdyaXRlIHBhZGRpbmdzLiAgKi8KKwkgICAgZm9yIChyZW1haW5fbGVuID0gYnl0ZV9pZHggKyBtYmNsZW4gLSAxOyBieXRlX2lkeCA8IHJlbWFpbl9sZW4gOykKKwkgICAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSBXRU9GOworCSAgfQorCWVsc2UgaWYgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gMCkKKwkgIHsKKwkgICAgLyogSXQgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgb3IgJ1wwJy4gIEp1c3QgdXNlIHRoZSBieXRlLiAgKi8KKwkgICAgaW50IGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIHNyY19pZHhdOworCisJICAgIGlmIChCRSAocHN0ci0+dHJhbnMgIT0gTlVMTCwgMCkpCisJICAgICAgY2ggPSBwc3RyLT50cmFucyBbY2hdOworCSAgICBwc3RyLT5tYnNbYnl0ZV9pZHhdID0gY2g7CisKKwkgICAgaWYgKEJFIChwc3RyLT5vZmZzZXRzX25lZWRlZCAhPSAwLCAwKSkKKwkgICAgICBwc3RyLT5vZmZzZXRzW2J5dGVfaWR4XSA9IHNyY19pZHg7CisJICAgICsrc3JjX2lkeDsKKworCSAgICAvKiBBbmQgYWxzbyBjYXN0IGl0IHRvIHdpZGUgY2hhci4gICovCisJICAgIHBzdHItPndjc1tieXRlX2lkeCsrXSA9ICh3Y2hhcl90KSBjaDsKKwkgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTEsIDApKQorCSAgICAgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJICB9CisJZWxzZQorCSAgeworCSAgICAvKiBUaGUgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UsIGZpbmlzaCB0byBidWlsZC4gICovCisJICAgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJICAgIGJyZWFrOworCSAgfQorICAgICAgfQorICBwc3RyLT52YWxpZF9sZW4gPSBieXRlX2lkeDsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHNyY19pZHg7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogU2tpcCBjaGFyYWN0ZXJzIHVudGlsIHRoZSBpbmRleCBiZWNvbWVzIGdyZWF0ZXIgdGhhbiBORVdfUkFXX0lEWC4KKyAgIFJldHVybiB0aGUgaW5kZXguICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX3NraXBfY2hhcnMgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgbmV3X3Jhd19pZHgsIHdpbnRfdCAqbGFzdF93YykKK3sKKyAgbWJzdGF0ZV90IHByZXZfc3Q7CisgIGludCByYXdidWZfaWR4OworICBzaXplX3QgbWJjbGVuOworICB3aW50X3Qgd2MgPSBXRU9GOworCisgIC8qIFNraXAgdGhlIGNoYXJhY3RlcnMgd2hpY2ggYXJlIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2suICAqLworICBmb3IgKHJhd2J1Zl9pZHggPSBwc3RyLT5yYXdfbWJzX2lkeCArIHBzdHItPnZhbGlkX3Jhd19sZW47CisgICAgICAgcmF3YnVmX2lkeCA8IG5ld19yYXdfaWR4OykKKyAgICB7CisgICAgICB3Y2hhcl90IHdjMjsKKyAgICAgIGludCByZW1haW5fbGVuID0gcHN0ci0+bGVuIC0gcmF3YnVmX2lkeDsKKyAgICAgIHByZXZfc3QgPSBwc3RyLT5jdXJfc3RhdGU7CisgICAgICBtYmNsZW4gPSBfX21icnRvd2MgKCZ3YzIsIChjb25zdCBjaGFyICopIHBzdHItPnJhd19tYnMgKyByYXdidWZfaWR4LAorCQkJICByZW1haW5fbGVuLCAmcHN0ci0+Y3VyX3N0YXRlKTsKKyAgICAgIGlmIChCRSAobWJjbGVuID09IChzaXplX3QpIC0yIHx8IG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gMCwgMCkpCisJeworCSAgLyogV2UgdHJlYXQgdGhlc2UgY2FzZXMgYXMgYSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIuICAqLworCSAgaWYgKG1iY2xlbiA9PSAwIHx8IHJlbWFpbl9sZW4gPT0gMCkKKwkgICAgd2MgPSBMJ1wwJzsKKwkgIGVsc2UKKwkgICAgd2MgPSAqKHVuc2lnbmVkIGNoYXIgKikgKHBzdHItPnJhd19tYnMgKyByYXdidWZfaWR4KTsKKwkgIG1iY2xlbiA9IDE7CisJICBwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCX0KKyAgICAgIGVsc2UKKwl3YyA9ICh3aW50X3QpIHdjMjsKKyAgICAgIC8qIFRoZW4gcHJvY2VlZCB0aGUgbmV4dCBjaGFyYWN0ZXIuICAqLworICAgICAgcmF3YnVmX2lkeCArPSBtYmNsZW47CisgICAgfQorICAqbGFzdF93YyA9ICh3aW50X3QpIHdjOworICByZXR1cm4gcmF3YnVmX2lkeDsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KKworLyogQnVpbGQgdGhlIGJ1ZmZlciBQU1RSLT5NQlMsIGFuZCBhcHBseSB0aGUgdHJhbnNsYXRpb24gaWYgd2UgbmVlZC4KKyAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBjYXNlIG9mIFJFR19JQ0FTRS4gICovCisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorYnVpbGRfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyAgaW50IGNoYXJfaWR4LCBlbmRfaWR4OworICBlbmRfaWR4ID0gKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+bGVuKSA/IHBzdHItPmxlbiA6IHBzdHItPmJ1ZnNfbGVuOworCisgIGZvciAoY2hhcl9pZHggPSBwc3RyLT52YWxpZF9sZW47IGNoYXJfaWR4IDwgZW5kX2lkeDsgKytjaGFyX2lkeCkKKyAgICB7CisgICAgICBpbnQgY2ggPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgY2hhcl9pZHhdOworICAgICAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwljaCA9IHBzdHItPnRyYW5zW2NoXTsKKyAgICAgIGlmIChpc2xvd2VyIChjaCkpCisJcHN0ci0+bWJzW2NoYXJfaWR4XSA9IHRvdXBwZXIgKGNoKTsKKyAgICAgIGVsc2UKKwlwc3RyLT5tYnNbY2hhcl9pZHhdID0gY2g7CisgICAgfQorICBwc3RyLT52YWxpZF9sZW4gPSBjaGFyX2lkeDsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IGNoYXJfaWR4OworfQorCisvKiBBcHBseSBUUkFOUyB0byB0aGUgYnVmZmVyIGluIFBTVFIuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyAgaW50IGJ1Zl9pZHgsIGVuZF9pZHg7CisgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisKKyAgZm9yIChidWZfaWR4ID0gcHN0ci0+dmFsaWRfbGVuOyBidWZfaWR4IDwgZW5kX2lkeDsgKytidWZfaWR4KQorICAgIHsKKyAgICAgIGludCBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBidWZfaWR4XTsKKyAgICAgIHBzdHItPm1ic1tidWZfaWR4XSA9IHBzdHItPnRyYW5zW2NoXTsKKyAgICB9CisKKyAgcHN0ci0+dmFsaWRfbGVuID0gYnVmX2lkeDsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IGJ1Zl9pZHg7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmUtY29uc3RydWN0IHRoZSBidWZmZXJzLgorICAgQ29uY3JldGVseSwgY29udmVydCB0byB3aWRlIGNoYXJhY3RlciBpbiBjYXNlIG9mIHBzdHItPm1iX2N1cl9tYXggPiAxLAorICAgY29udmVydCB0byB1cHBlciBjYXNlIGluIGNhc2Ugb2YgUkVHX0lDQVNFLCBhcHBseSB0cmFuc2xhdGlvbi4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKK3sKKyAgaW50IG9mZnNldCA9IGlkeCAtIHBzdHItPnJhd19tYnNfaWR4OworICBpZiAoQkUgKG9mZnNldCA8IDAsIDApKQorICAgIHsKKyAgICAgIC8qIFJlc2V0IGJ1ZmZlci4gICovCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKwltZW1zZXQgKCZwc3RyLT5jdXJfc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW47CisgICAgICBwc3RyLT5zdG9wID0gcHN0ci0+cmF3X3N0b3A7CisgICAgICBwc3RyLT52YWxpZF9sZW4gPSAwOworICAgICAgcHN0ci0+cmF3X21ic19pZHggPSAwOworICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IDA7CisgICAgICBwc3RyLT5vZmZzZXRzX25lZWRlZCA9IDA7CisgICAgICBwc3RyLT50aXBfY29udGV4dCA9ICgoZWZsYWdzICYgUkVHX05PVEJPTCkgPyBDT05URVhUX0JFR0JVRgorCQkJICAgOiBDT05URVhUX05FV0xJTkUgfCBDT05URVhUX0JFR0JVRik7CisgICAgICBpZiAoIXBzdHItPm1ic19hbGxvY2F0ZWQpCisJcHN0ci0+bWJzID0gKHVuc2lnbmVkIGNoYXIgKikgcHN0ci0+cmF3X21iczsKKyAgICAgIG9mZnNldCA9IGlkeDsKKyAgICB9CisKKyAgaWYgKEJFIChvZmZzZXQgIT0gMCwgMSkpCisgICAgeworICAgICAgLyogU2hvdWxkIHRoZSBhbHJlYWR5IGNoZWNrZWQgY2hhcmFjdGVycyBiZSBrZXB0PyAgKi8KKyAgICAgIGlmIChCRSAob2Zmc2V0IDwgcHN0ci0+dmFsaWRfcmF3X2xlbiwgMSkpCisJeworCSAgLyogWWVzLCBtb3ZlIHRoZW0gdG8gdGhlIGZyb250IG9mIHRoZSBidWZmZXIuICAqLworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICBpZiAoQkUgKHBzdHItPm9mZnNldHNfbmVlZGVkLCAwKSkKKwkgICAgeworCSAgICAgIGludCBsb3cgPSAwLCBoaWdoID0gcHN0ci0+dmFsaWRfbGVuLCBtaWQ7CisJICAgICAgZG8KKwkJeworCQkgIG1pZCA9IChoaWdoICsgbG93KSAvIDI7CisJCSAgaWYgKHBzdHItPm9mZnNldHNbbWlkXSA+IG9mZnNldCkKKwkJICAgIGhpZ2ggPSBtaWQ7CisJCSAgZWxzZSBpZiAocHN0ci0+b2Zmc2V0c1ttaWRdIDwgb2Zmc2V0KQorCQkgICAgbG93ID0gbWlkICsgMTsKKwkJICBlbHNlCisJCSAgICBicmVhazsKKwkJfQorCSAgICAgIHdoaWxlIChsb3cgPCBoaWdoKTsKKwkgICAgICBpZiAocHN0ci0+b2Zmc2V0c1ttaWRdIDwgb2Zmc2V0KQorCQkrK21pZDsKKwkgICAgICBwc3RyLT50aXBfY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0IChwc3RyLCBtaWQgLSAxLAorCQkJCQkJCWVmbGFncyk7CisJICAgICAgLyogVGhpcyBjYW4gYmUgcXVpdGUgY29tcGxpY2F0ZWQsIHNvIGhhbmRsZSBzcGVjaWFsbHkKKwkJIG9ubHkgdGhlIGNvbW1vbiBhbmQgZWFzeSBjYXNlIHdoZXJlIHRoZSBjaGFyYWN0ZXIgd2l0aAorCQkgZGlmZmVyZW50IGxlbmd0aCByZXByZXNlbnRhdGlvbiBvZiBsb3dlciBhbmQgdXBwZXIKKwkJIGNhc2UgaXMgcHJlc2VudCBhdCBvciBhZnRlciBvZmZzZXQuICAqLworCSAgICAgIGlmIChwc3RyLT52YWxpZF9sZW4gPiBvZmZzZXQKKwkJICAmJiBtaWQgPT0gb2Zmc2V0ICYmIHBzdHItPm9mZnNldHNbbWlkXSA9PSBvZmZzZXQpCisJCXsKKwkJICBtZW1tb3ZlIChwc3RyLT53Y3MsIHBzdHItPndjcyArIG9mZnNldCwKKwkJCSAgIChwc3RyLT52YWxpZF9sZW4gLSBvZmZzZXQpICogc2l6ZW9mICh3aW50X3QpKTsKKwkJICBtZW1tb3ZlIChwc3RyLT5tYnMsIHBzdHItPm1icyArIG9mZnNldCwgcHN0ci0+dmFsaWRfbGVuIC0gb2Zmc2V0KTsKKwkJICBwc3RyLT52YWxpZF9sZW4gLT0gb2Zmc2V0OworCQkgIHBzdHItPnZhbGlkX3Jhd19sZW4gLT0gb2Zmc2V0OworCQkgIGZvciAobG93ID0gMDsgbG93IDwgcHN0ci0+dmFsaWRfbGVuOyBsb3crKykKKwkJICAgIHBzdHItPm9mZnNldHNbbG93XSA9IHBzdHItPm9mZnNldHNbbG93ICsgb2Zmc2V0XSAtIG9mZnNldDsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8qIE90aGVyd2lzZSwganVzdCBmaW5kIG91dCBob3cgbG9uZyB0aGUgcGFydGlhbCBtdWx0aWJ5dGUKKwkJICAgICBjaGFyYWN0ZXIgYXQgb2Zmc2V0IGlzIGFuZCBmaWxsIGl0IHdpdGggV0VPRi8yNTUuICAqLworCQkgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW4gLSBpZHggKyBvZmZzZXQ7CisJCSAgcHN0ci0+c3RvcCA9IHBzdHItPnJhd19zdG9wIC0gaWR4ICsgb2Zmc2V0OworCQkgIHBzdHItPm9mZnNldHNfbmVlZGVkID0gMDsKKwkJICB3aGlsZSAobWlkID4gMCAmJiBwc3RyLT5vZmZzZXRzW21pZCAtIDFdID09IG9mZnNldCkKKwkJICAgIC0tbWlkOworCQkgIHdoaWxlIChtaWQgPCBwc3RyLT52YWxpZF9sZW4pCisJCSAgICBpZiAocHN0ci0+d2NzW21pZF0gIT0gV0VPRikKKwkJICAgICAgYnJlYWs7CisJCSAgICBlbHNlCisJCSAgICAgICsrbWlkOworCQkgIGlmIChtaWQgPT0gcHN0ci0+dmFsaWRfbGVuKQorCQkgICAgcHN0ci0+dmFsaWRfbGVuID0gMDsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIHBzdHItPnZhbGlkX2xlbiA9IHBzdHItPm9mZnNldHNbbWlkXSAtIG9mZnNldDsKKwkJICAgICAgaWYgKHBzdHItPnZhbGlkX2xlbikKKwkJCXsKKwkJCSAgZm9yIChsb3cgPSAwOyBsb3cgPCBwc3RyLT52YWxpZF9sZW47ICsrbG93KQorCQkJICAgIHBzdHItPndjc1tsb3ddID0gV0VPRjsKKwkJCSAgbWVtc2V0IChwc3RyLT5tYnMsIDI1NSwgcHN0ci0+dmFsaWRfbGVuKTsKKwkJCX0KKwkJICAgIH0KKwkJICBwc3RyLT52YWxpZF9yYXdfbGVuID0gcHN0ci0+dmFsaWRfbGVuOworCQl9CisJICAgIH0KKwkgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAocHN0ciwgb2Zmc2V0IC0gMSwKKwkJCQkJCQllZmxhZ3MpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorCQltZW1tb3ZlIChwc3RyLT53Y3MsIHBzdHItPndjcyArIG9mZnNldCwKKwkJCSAocHN0ci0+dmFsaWRfbGVuIC0gb2Zmc2V0KSAqIHNpemVvZiAod2ludF90KSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkgICAgICBpZiAoQkUgKHBzdHItPm1ic19hbGxvY2F0ZWQsIDApKQorCQltZW1tb3ZlIChwc3RyLT5tYnMsIHBzdHItPm1icyArIG9mZnNldCwKKwkJCSBwc3RyLT52YWxpZF9sZW4gLSBvZmZzZXQpOworCSAgICAgIHBzdHItPnZhbGlkX2xlbiAtPSBvZmZzZXQ7CisJICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiAtPSBvZmZzZXQ7CisjaWYgREVCVUcKKwkgICAgICBhc3NlcnQgKHBzdHItPnZhbGlkX2xlbiA+IDApOworI2VuZGlmCisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAvKiBObywgc2tpcCBhbGwgY2hhcmFjdGVycyB1bnRpbCBJRFguICAqLworCSAgaW50IHByZXZfdmFsaWRfbGVuID0gcHN0ci0+dmFsaWRfbGVuOworCisJICBpZiAoQkUgKHBzdHItPm9mZnNldHNfbmVlZGVkLCAwKSkKKwkgICAgeworCSAgICAgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW4gLSBpZHggKyBvZmZzZXQ7CisJICAgICAgcHN0ci0+c3RvcCA9IHBzdHItPnJhd19zdG9wIC0gaWR4ICsgb2Zmc2V0OworCSAgICAgIHBzdHItPm9mZnNldHNfbmVlZGVkID0gMDsKKwkgICAgfQorI2VuZGlmCisJICBwc3RyLT52YWxpZF9sZW4gPSAwOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJICAgIHsKKwkgICAgICBpbnQgd2NzX2lkeDsKKwkgICAgICB3aW50X3Qgd2MgPSBXRU9GOworCisJICAgICAgaWYgKHBzdHItPmlzX3V0ZjgpCisJCXsKKwkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYXcsICpwLCAqZW5kOworCisJCSAgLyogU3BlY2lhbCBjYXNlIFVURi04LiAgTXVsdGktYnl0ZSBjaGFycyBzdGFydCB3aXRoIGFueQorCQkgICAgIGJ5dGUgb3RoZXIgdGhhbiAweDgwIC0gMHhiZi4gICovCisJCSAgcmF3ID0gcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4OworCQkgIGVuZCA9IHJhdyArIChvZmZzZXQgLSBwc3RyLT5tYl9jdXJfbWF4KTsKKwkJICBpZiAoZW5kIDwgcHN0ci0+cmF3X21icykKKwkJICAgIGVuZCA9IHBzdHItPnJhd19tYnM7CisJCSAgcCA9IHJhdyArIG9mZnNldCAtIDE7CisjaWZkZWYgX0xJQkMKKwkJICAvKiBXZSBrbm93IHRoZSB3Y2hhcl90IGVuY29kaW5nIGlzIFVDUzQsIHNvIGZvciB0aGUgc2ltcGxlCisJCSAgICAgY2FzZSwgQVNDSUkgY2hhcmFjdGVycywgc2tpcCB0aGUgY29udmVyc2lvbiBzdGVwLiAgKi8KKwkJICBpZiAoaXNhc2NpaSAoKnApICYmIEJFIChwc3RyLT50cmFucyA9PSBOVUxMLCAxKSkKKwkJICAgIHsKKwkJICAgICAgbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworCQkgICAgICAvKiBwc3RyLT52YWxpZF9sZW4gPSAwOyAqLworCQkgICAgICB3YyA9ICh3Y2hhcl90KSAqcDsKKwkJICAgIH0KKwkJICBlbHNlCisjZW5kaWYKKwkJICAgIGZvciAoOyBwID49IGVuZDsgLS1wKQorCQkgICAgICBpZiAoKCpwICYgMHhjMCkgIT0gMHg4MCkKKwkJCXsKKwkJCSAgbWJzdGF0ZV90IGN1cl9zdGF0ZTsKKwkJCSAgd2NoYXJfdCB3YzI7CisJCQkgIGludCBtbGVuID0gcmF3ICsgcHN0ci0+bGVuIC0gcDsKKwkJCSAgdW5zaWduZWQgY2hhciBidWZbNl07CisJCQkgIHNpemVfdCBtYmNsZW47CisKKwkJCSAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwkJCSAgICB7CisJCQkgICAgICBpbnQgaSA9IG1sZW4gPCA2ID8gbWxlbiA6IDY7CisJCQkgICAgICB3aGlsZSAoLS1pID49IDApCisJCQkJYnVmW2ldID0gcHN0ci0+dHJhbnNbcFtpXV07CisJCQkgICAgfQorCQkJICAvKiBYWFggRG9uJ3QgdXNlIG1icnRvd2MsIHdlIGtub3cgd2hpY2ggY29udmVyc2lvbgorCQkJICAgICB0byB1c2UgKFVURi04IC0+IFVDUzQpLiAgKi8KKwkJCSAgbWVtc2V0ICgmY3VyX3N0YXRlLCAwLCBzaXplb2YgKGN1cl9zdGF0ZSkpOworCQkJICBtYmNsZW4gPSBfX21icnRvd2MgKCZ3YzIsIChjb25zdCBjaGFyICopIHAsIG1sZW4sCisJCQkJCSAgICAgICZjdXJfc3RhdGUpOworCQkJICBpZiAocmF3ICsgb2Zmc2V0IC0gcCA8PSBtYmNsZW4KKwkJCSAgICAgICYmIG1iY2xlbiA8IChzaXplX3QpIC0yKQorCQkJICAgIHsKKwkJCSAgICAgIG1lbXNldCAoJnBzdHItPmN1cl9zdGF0ZSwgJ1wwJywKKwkJCQkgICAgICBzaXplb2YgKG1ic3RhdGVfdCkpOworCQkJICAgICAgcHN0ci0+dmFsaWRfbGVuID0gbWJjbGVuIC0gKHJhdyArIG9mZnNldCAtIHApOworCQkJICAgICAgd2MgPSB3YzI7CisJCQkgICAgfQorCQkJICBicmVhazsKKwkJCX0KKwkJfQorCisJICAgICAgaWYgKHdjID09IFdFT0YpCisJCXBzdHItPnZhbGlkX2xlbiA9IHJlX3N0cmluZ19za2lwX2NoYXJzIChwc3RyLCBpZHgsICZ3YykgLSBpZHg7CisJICAgICAgaWYgKHdjID09IFdFT0YpCisJCXBzdHItPnRpcF9jb250ZXh0CisJCSAgPSByZV9zdHJpbmdfY29udGV4dF9hdCAocHN0ciwgcHJldl92YWxpZF9sZW4gLSAxLCBlZmxhZ3MpOworCSAgICAgIGVsc2UKKwkJcHN0ci0+dGlwX2NvbnRleHQgPSAoKEJFIChwc3RyLT53b3JkX29wc191c2VkICE9IDAsIDApCisJCQkJICAgICAgJiYgSVNfV0lERV9XT1JEX0NIQVIgKHdjKSkKKwkJCQkgICAgID8gQ09OVEVYVF9XT1JECisJCQkJICAgICA6ICgoSVNfV0lERV9ORVdMSU5FICh3YykKKwkJCQkJICYmIHBzdHItPm5ld2xpbmVfYW5jaG9yKQorCQkJCQk/IENPTlRFWFRfTkVXTElORSA6IDApKTsKKwkgICAgICBpZiAoQkUgKHBzdHItPnZhbGlkX2xlbiwgMCkpCisJCXsKKwkJICBmb3IgKHdjc19pZHggPSAwOyB3Y3NfaWR4IDwgcHN0ci0+dmFsaWRfbGVuOyArK3djc19pZHgpCisJCSAgICBwc3RyLT53Y3Nbd2NzX2lkeF0gPSBXRU9GOworCQkgIGlmIChwc3RyLT5tYnNfYWxsb2NhdGVkKQorCQkgICAgbWVtc2V0IChwc3RyLT5tYnMsIDI1NSwgcHN0ci0+dmFsaWRfbGVuKTsKKwkJfQorCSAgICAgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBwc3RyLT52YWxpZF9sZW47CisJICAgIH0KKwkgIGVsc2UKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCSAgICB7CisJICAgICAgaW50IGMgPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgb2Zmc2V0IC0gMV07CisJICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IDA7CisJICAgICAgaWYgKHBzdHItPnRyYW5zKQorCQljID0gcHN0ci0+dHJhbnNbY107CisJICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSAoYml0c2V0X2NvbnRhaW4gKHBzdHItPndvcmRfY2hhciwgYykKKwkJCQkgICA/IENPTlRFWFRfV09SRAorCQkJCSAgIDogKChJU19ORVdMSU5FIChjKSAmJiBwc3RyLT5uZXdsaW5lX2FuY2hvcikKKwkJCQkgICAgICA/IENPTlRFWFRfTkVXTElORSA6IDApKTsKKwkgICAgfQorCX0KKyAgICAgIGlmICghQkUgKHBzdHItPm1ic19hbGxvY2F0ZWQsIDApKQorCXBzdHItPm1icyArPSBvZmZzZXQ7CisgICAgfQorICBwc3RyLT5yYXdfbWJzX2lkeCA9IGlkeDsKKyAgcHN0ci0+bGVuIC09IG9mZnNldDsKKyAgcHN0ci0+c3RvcCAtPSBvZmZzZXQ7CisKKyAgLyogVGhlbiBidWlsZCB0aGUgYnVmZmVycy4gICovCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIGlmIChwc3RyLT5pY2FzZSkKKwl7CisJICByZWdfZXJyY29kZV90IHJldCA9IGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHBzdHIpOworCSAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gcmV0OworCX0KKyAgICAgIGVsc2UKKwlidWlsZF93Y3NfYnVmZmVyIChwc3RyKTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgIGlmIChCRSAocHN0ci0+bWJzX2FsbG9jYXRlZCwgMCkpCisgICAgICB7CisJaWYgKHBzdHItPmljYXNlKQorCSAgYnVpbGRfdXBwZXJfYnVmZmVyIChwc3RyKTsKKwllbHNlIGlmIChwc3RyLT50cmFucyAhPSBOVUxMKQorCSAgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHBzdHIpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHBzdHItPnZhbGlkX2xlbiA9IHBzdHItPmxlbjsKKworICBwc3RyLT5jdXJfaWR4ID0gMDsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhcgoraW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSkKK3JlX3N0cmluZ19wZWVrX2J5dGVfY2FzZSAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCit7CisgIGludCBjaCwgb2ZmOworCisgIC8qIEhhbmRsZSB0aGUgY29tbW9uIChlYXNpZXN0KSBjYXNlcyBmaXJzdC4gICovCisgIGlmIChCRSAoIXBzdHItPm1ic19hbGxvY2F0ZWQsIDEpKQorICAgIHJldHVybiByZV9zdHJpbmdfcGVla19ieXRlIChwc3RyLCBpZHgpOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxCisgICAgICAmJiAhIHJlX3N0cmluZ19pc19zaW5nbGVfYnl0ZV9jaGFyIChwc3RyLCBwc3RyLT5jdXJfaWR4ICsgaWR4KSkKKyAgICByZXR1cm4gcmVfc3RyaW5nX3BlZWtfYnl0ZSAocHN0ciwgaWR4KTsKKyNlbmRpZgorCisgIG9mZiA9IHBzdHItPmN1cl9pZHggKyBpZHg7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm9mZnNldHNfbmVlZGVkKQorICAgIG9mZiA9IHBzdHItPm9mZnNldHNbb2ZmXTsKKyNlbmRpZgorCisgIGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIG9mZl07CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBFbnN1cmUgdGhhdCBlLmcuIGZvciB0cl9UUi5VVEYtOCBCQUNLU0xBU0ggRE9UTEVTUyBTTUFMTCBMRVRURVIgSQorICAgICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgQ0FQSVRBTCBMRVRURVIgSSBpbnN0ZWFkIG9mIGZpcnN0IGJ5dGUgb2YKKyAgICAgRE9UTEVTUyBTTUFMTCBMRVRURVIgSS4gIFRoZSBsYXR0ZXIgd291bGQgY29uZnVzZSB0aGUgcGFyc2VyLAorICAgICBzaW5jZSBwZWVrX2J5dGVfY2FzZSBkb2Vzbid0IGFkdmFuY2UgY3VyX2lkeCBpbiBhbnkgd2F5LiAgKi8KKyAgaWYgKHBzdHItPm9mZnNldHNfbmVlZGVkICYmICFpc2FzY2lpIChjaCkpCisgICAgcmV0dXJuIHJlX3N0cmluZ19wZWVrX2J5dGUgKHBzdHIsIGlkeCk7CisjZW5kaWYKKworICByZXR1cm4gY2g7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX2ZldGNoX2J5dGVfY2FzZSAocmVfc3RyaW5nX3QgKnBzdHIpCit7CisgIGlmIChCRSAoIXBzdHItPm1ic19hbGxvY2F0ZWQsIDEpKQorICAgIHJldHVybiByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAocHN0cik7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAocHN0ci0+b2Zmc2V0c19uZWVkZWQpCisgICAgeworICAgICAgaW50IG9mZiwgY2g7CisKKyAgICAgIC8qIEZvciB0cl9UUi5VVEYtOCBbWzppc2xvd2VyOl1dIHRoZXJlIGlzCisJIFtbOiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIGxvd2VyOl1dIGluIG1icy4gIFNraXAKKwkgaW4gdGhhdCBjYXNlIHRoZSB3aG9sZSBtdWx0aS1ieXRlIGNoYXJhY3RlciBhbmQgcmV0dXJuCisJIHRoZSBvcmlnaW5hbCBsZXR0ZXIuICBPbiB0aGUgb3RoZXIgc2lkZSwgd2l0aAorCSBbWzogRE9UTEVTUyBTTUFMTCBMRVRURVIgSSByZXR1cm4gW1s6SSwgYXMgZG9pbmcKKwkgYW55dGhpbmcgZWxzZSB3b3VsZCBjb21wbGljYXRlIHRoaW5ncyB0b28gbXVjaC4gICovCisKKyAgICAgIGlmICghcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKHBzdHIsIHBzdHItPmN1cl9pZHgpKQorCXJldHVybiByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAocHN0cik7CisKKyAgICAgIG9mZiA9IHBzdHItPm9mZnNldHNbcHN0ci0+Y3VyX2lkeF07CisgICAgICBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBvZmZdOworCisgICAgICBpZiAoISBpc2FzY2lpIChjaCkpCisJcmV0dXJuIHJlX3N0cmluZ19mZXRjaF9ieXRlIChwc3RyKTsKKworICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHBzdHIsCisJCQkgICAgcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAocHN0ciwgcHN0ci0+Y3VyX2lkeCkpOworICAgICAgcmV0dXJuIGNoOworICAgIH0KKyNlbmRpZgorCisgIHJldHVybiBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgcHN0ci0+Y3VyX2lkeCsrXTsKK30KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfZGVzdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyKQoreworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHJlX2ZyZWUgKHBzdHItPndjcyk7CisgIHJlX2ZyZWUgKHBzdHItPm9mZnNldHMpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworICBpZiAocHN0ci0+bWJzX2FsbG9jYXRlZCkKKyAgICByZV9mcmVlIChwc3RyLT5tYnMpOworfQorCisvKiBSZXR1cm4gdGhlIGNvbnRleHQgYXQgSURYIGluIElOUFVULiAgKi8KKworc3RhdGljIHVuc2lnbmVkIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19jb250ZXh0X2F0IChjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIGludCBpZHgsIGludCBlZmxhZ3MpCit7CisgIGludCBjOworICBpZiAoQkUgKGlkeCA8IDAsIDApKQorICAgIC8qIEluIHRoaXMgY2FzZSwgd2UgdXNlIHRoZSB2YWx1ZSBzdG9yZWQgaW4gaW5wdXQtPnRpcF9jb250ZXh0LAorICAgICAgIHNpbmNlIHdlIGNhbid0IGtub3cgdGhlIGNoYXJhY3RlciBpbiBpbnB1dC0+bWJzWy0xXSBoZXJlLiAgKi8KKyAgICByZXR1cm4gaW5wdXQtPnRpcF9jb250ZXh0OworICBpZiAoQkUgKGlkeCA9PSBpbnB1dC0+bGVuLCAwKSkKKyAgICByZXR1cm4gKChlZmxhZ3MgJiBSRUdfTk9URU9MKSA/IENPTlRFWFRfRU5EQlVGCisJICAgIDogQ09OVEVYVF9ORVdMSU5FIHwgQ09OVEVYVF9FTkRCVUYpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgd2ludF90IHdjOworICAgICAgaW50IHdjX2lkeCA9IGlkeDsKKyAgICAgIHdoaWxlKGlucHV0LT53Y3Nbd2NfaWR4XSA9PSBXRU9GKQorCXsKKyNpZmRlZiBERUJVRworCSAgLyogSXQgbXVzdCBub3QgaGFwcGVuLiAgKi8KKwkgIGFzc2VydCAod2NfaWR4ID49IDApOworI2VuZGlmCisJICAtLXdjX2lkeDsKKwkgIGlmICh3Y19pZHggPCAwKQorCSAgICByZXR1cm4gaW5wdXQtPnRpcF9jb250ZXh0OworCX0KKyAgICAgIHdjID0gaW5wdXQtPndjc1t3Y19pZHhdOworICAgICAgaWYgKEJFIChpbnB1dC0+d29yZF9vcHNfdXNlZCAhPSAwLCAwKSAmJiBJU19XSURFX1dPUkRfQ0hBUiAod2MpKQorCXJldHVybiBDT05URVhUX1dPUkQ7CisgICAgICByZXR1cm4gKElTX1dJREVfTkVXTElORSAod2MpICYmIGlucHV0LT5uZXdsaW5lX2FuY2hvcgorCSAgICAgID8gQ09OVEVYVF9ORVdMSU5FIDogMCk7CisgICAgfQorICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICBjID0gcmVfc3RyaW5nX2J5dGVfYXQgKGlucHV0LCBpZHgpOworICAgICAgaWYgKGJpdHNldF9jb250YWluIChpbnB1dC0+d29yZF9jaGFyLCBjKSkKKwlyZXR1cm4gQ09OVEVYVF9XT1JEOworICAgICAgcmV0dXJuIElTX05FV0xJTkUgKGMpICYmIGlucHV0LT5uZXdsaW5lX2FuY2hvciA/IENPTlRFWFRfTkVXTElORSA6IDA7CisgICAgfQorfQorDAorLyogRnVuY3Rpb25zIGZvciBzZXQgb3BlcmF0aW9uLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9hbGxvYyAocmVfbm9kZV9zZXQgKnNldCwgaW50IHNpemUpCit7CisgIC8qCisgICAqIEFEUjogdmFsZ3JpbmQgc2F5cyBzaXplIGNhbiBiZSAwLCB3aGljaCB0aGVuIGRvZXNuJ3QKKyAgICogZnJlZSB0aGUgYmxvY2sgb2Ygc2l6ZSAwLiAgSGFydW1waC4gVGhpcyBzZWVtcworICAgKiB0byB3b3JrIG9rLCB0aG91Z2guCisgICAqLworICBpZiAoc2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICBtZW1zZXQoc2V0LCAwLCBzaXplb2YoKnNldCkpOworICAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9CisgIHNldC0+YWxsb2MgPSBzaXplOworICBzZXQtPm5lbGVtID0gMDsKKyAgc2V0LT5lbGVtcyA9IHJlX21hbGxvYyAoaW50LCBzaXplKTsKKyAgaWYgKEJFIChzZXQtPmVsZW1zID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfaW5pdF8xIChyZV9ub2RlX3NldCAqc2V0LCBpbnQgZWxlbSkKK3sKKyAgc2V0LT5hbGxvYyA9IDE7CisgIHNldC0+bmVsZW0gPSAxOworICBzZXQtPmVsZW1zID0gcmVfbWFsbG9jIChpbnQsIDEpOworICBpZiAoQkUgKHNldC0+ZWxlbXMgPT0gTlVMTCwgMCkpCisgICAgeworICAgICAgc2V0LT5hbGxvYyA9IHNldC0+bmVsZW0gPSAwOworICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgfQorICBzZXQtPmVsZW1zWzBdID0gZWxlbTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2luaXRfMiAocmVfbm9kZV9zZXQgKnNldCwgaW50IGVsZW0xLCBpbnQgZWxlbTIpCit7CisgIHNldC0+YWxsb2MgPSAyOworICBzZXQtPmVsZW1zID0gcmVfbWFsbG9jIChpbnQsIDIpOworICBpZiAoQkUgKHNldC0+ZWxlbXMgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIGlmIChlbGVtMSA9PSBlbGVtMikKKyAgICB7CisgICAgICBzZXQtPm5lbGVtID0gMTsKKyAgICAgIHNldC0+ZWxlbXNbMF0gPSBlbGVtMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzZXQtPm5lbGVtID0gMjsKKyAgICAgIGlmIChlbGVtMSA8IGVsZW0yKQorCXsKKwkgIHNldC0+ZWxlbXNbMF0gPSBlbGVtMTsKKwkgIHNldC0+ZWxlbXNbMV0gPSBlbGVtMjsKKwl9CisgICAgICBlbHNlCisJeworCSAgc2V0LT5lbGVtc1swXSA9IGVsZW0yOworCSAgc2V0LT5lbGVtc1sxXSA9IGVsZW0xOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbml0X2NvcHkgKHJlX25vZGVfc2V0ICpkZXN0LCBjb25zdCByZV9ub2RlX3NldCAqc3JjKQoreworICBkZXN0LT5uZWxlbSA9IHNyYy0+bmVsZW07CisgIGlmIChzcmMtPm5lbGVtID4gMCkKKyAgICB7CisgICAgICBkZXN0LT5hbGxvYyA9IGRlc3QtPm5lbGVtOworICAgICAgZGVzdC0+ZWxlbXMgPSByZV9tYWxsb2MgKGludCwgZGVzdC0+YWxsb2MpOworICAgICAgaWYgKEJFIChkZXN0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKwl7CisJICBkZXN0LT5hbGxvYyA9IGRlc3QtPm5lbGVtID0gMDsKKwkgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMsIHNyYy0+ZWxlbXMsIHNyYy0+bmVsZW0gKiBzaXplb2YgKGludCkpOworICAgIH0KKyAgZWxzZQorICAgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRlc3QpOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIENhbGN1bGF0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBzZXRzIFNSQzEgYW5kIFNSQzIuIEFuZCBtZXJnZSBpdCB0bworICAgREVTVC4gUmV0dXJuIHZhbHVlIGluZGljYXRlIHRoZSBlcnJvciBjb2RlIG9yIFJFR19OT0VSUk9SIGlmIHN1Y2NlZWRlZC4KKyAgIE5vdGU6IFdlIGFzc3VtZSBkZXN0LT5lbGVtcyBpcyBOVUxMLCB3aGVuIGRlc3QtPmFsbG9jIGlzIDAuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2FkZF9pbnRlcnNlY3QgKHJlX25vZGVfc2V0ICpkZXN0LCBjb25zdCByZV9ub2RlX3NldCAqc3JjMSwKKwkJCSAgIGNvbnN0IHJlX25vZGVfc2V0ICpzcmMyKQoreworICBpbnQgaTEsIGkyLCBpcywgaWQsIGRlbHRhLCBzYmFzZTsKKyAgaWYgKHNyYzEtPm5lbGVtID09IDAgfHwgc3JjMi0+bmVsZW0gPT0gMCkKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisKKyAgLyogV2UgbmVlZCBkZXN0LT5uZWxlbSArIDIgKiBlbGVtc19pbl9pbnRlcnNlY3Rpb247IHRoaXMgaXMgYQorICAgICBjb25zZXJ2YXRpdmUgZXN0aW1hdGUuICAqLworICBpZiAoc3JjMS0+bmVsZW0gKyBzcmMyLT5uZWxlbSArIGRlc3QtPm5lbGVtID4gZGVzdC0+YWxsb2MpCisgICAgeworICAgICAgaW50IG5ld19hbGxvYyA9IHNyYzEtPm5lbGVtICsgc3JjMi0+bmVsZW0gKyBkZXN0LT5hbGxvYzsKKyAgICAgIGludCAqbmV3X2VsZW1zID0gcmVfcmVhbGxvYyAoZGVzdC0+ZWxlbXMsIGludCwgbmV3X2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2VsZW1zID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgZGVzdC0+ZWxlbXMgPSBuZXdfZWxlbXM7CisgICAgICBkZXN0LT5hbGxvYyA9IG5ld19hbGxvYzsKKyAgICB9CisKKyAgLyogRmluZCB0aGUgaXRlbXMgaW4gdGhlIGludGVyc2VjdGlvbiBvZiBTUkMxIGFuZCBTUkMyLCBhbmQgY29weQorICAgICBpbnRvIHRoZSB0b3Agb2YgREVTVCB0aG9zZSB0aGF0IGFyZSBub3QgYWxyZWFkeSBpbiBERVNUIGl0c2VsZi4gICovCisgIHNiYXNlID0gZGVzdC0+bmVsZW0gKyBzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtOworICBpMSA9IHNyYzEtPm5lbGVtIC0gMTsKKyAgaTIgPSBzcmMyLT5uZWxlbSAtIDE7CisgIGlkID0gZGVzdC0+bmVsZW0gLSAxOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGlmIChzcmMxLT5lbGVtc1tpMV0gPT0gc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIC8qIFRyeSB0byBmaW5kIHRoZSBpdGVtIGluIERFU1QuICBNYXliZSB3ZSBjb3VsZCBiaW5hcnkgc2VhcmNoPyAgKi8KKwkgIHdoaWxlIChpZCA+PSAwICYmIGRlc3QtPmVsZW1zW2lkXSA+IHNyYzEtPmVsZW1zW2kxXSkKKwkgICAgLS1pZDsKKworCSAgaWYgKGlkIDwgMCB8fCBkZXN0LT5lbGVtc1tpZF0gIT0gc3JjMS0+ZWxlbXNbaTFdKQorCSAgICBkZXN0LT5lbGVtc1stLXNiYXNlXSA9IHNyYzEtPmVsZW1zW2kxXTsKKworCSAgaWYgKC0taTEgPCAwIHx8IC0taTIgPCAwKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIC8qIExvd2VyIHRoZSBoaWdoZXN0IG9mIHRoZSB0d28gaXRlbXMuICAqLworICAgICAgZWxzZSBpZiAoc3JjMS0+ZWxlbXNbaTFdIDwgc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIGlmICgtLWkyIDwgMCkKKwkgICAgYnJlYWs7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmICgtLWkxIDwgMCkKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICBpZCA9IGRlc3QtPm5lbGVtIC0gMTsKKyAgaXMgPSBkZXN0LT5uZWxlbSArIHNyYzEtPm5lbGVtICsgc3JjMi0+bmVsZW0gLSAxOworICBkZWx0YSA9IGlzIC0gc2Jhc2UgKyAxOworCisgIC8qIE5vdyBjb3B5LiAgV2hlbiBERUxUQSBiZWNvbWVzIHplcm8sIHRoZSByZW1haW5pbmcKKyAgICAgREVTVCBlbGVtZW50cyBhcmUgYWxyZWFkeSBpbiBwbGFjZTsgdGhpcyBpcyBtb3JlIG9yCisgICAgIGxlc3MgdGhlIHNhbWUgbG9vcCB0aGF0IGlzIGluIHJlX25vZGVfc2V0X21lcmdlLiAgKi8KKyAgZGVzdC0+bmVsZW0gKz0gZGVsdGE7CisgIGlmIChkZWx0YSA+IDAgJiYgaWQgPj0gMCkKKyAgICBmb3IgKDs7KQorICAgICAgeworCWlmIChkZXN0LT5lbGVtc1tpc10gPiBkZXN0LT5lbGVtc1tpZF0pCisJICB7CisJICAgIC8qIENvcHkgZnJvbSB0aGUgdG9wLiAgKi8KKwkgICAgZGVzdC0+ZWxlbXNbaWQgKyBkZWx0YS0tXSA9IGRlc3QtPmVsZW1zW2lzLS1dOworCSAgICBpZiAoZGVsdGEgPT0gMCkKKwkgICAgICBicmVhazsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8qIFNsaWRlIGZyb20gdGhlIGJvdHRvbS4gICovCisJICAgIGRlc3QtPmVsZW1zW2lkICsgZGVsdGFdID0gZGVzdC0+ZWxlbXNbaWRdOworCSAgICBpZiAoLS1pZCA8IDApCisJICAgICAgYnJlYWs7CisJICB9CisgICAgICB9CisKKyAgLyogQ29weSByZW1haW5pbmcgU1JDIGVsZW1lbnRzLiAgKi8KKyAgbWVtY3B5IChkZXN0LT5lbGVtcywgZGVzdC0+ZWxlbXMgKyBzYmFzZSwgZGVsdGEgKiBzaXplb2YgKGludCkpOworCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIHRoZSB1bmlvbiBzZXQgb2YgdGhlIHNldHMgU1JDMSBhbmQgU1JDMi4gQW5kIHN0b3JlIGl0IHRvCisgICBERVNULiBSZXR1cm4gdmFsdWUgaW5kaWNhdGUgdGhlIGVycm9yIGNvZGUgb3IgUkVHX05PRVJST1IgaWYgc3VjY2VlZGVkLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbml0X3VuaW9uIChyZV9ub2RlX3NldCAqZGVzdCwgY29uc3QgcmVfbm9kZV9zZXQgKnNyYzEsCisJCQljb25zdCByZV9ub2RlX3NldCAqc3JjMikKK3sKKyAgaW50IGkxLCBpMiwgaWQ7CisgIGlmIChzcmMxICE9IE5VTEwgJiYgc3JjMS0+bmVsZW0gPiAwICYmIHNyYzIgIT0gTlVMTCAmJiBzcmMyLT5uZWxlbSA+IDApCisgICAgeworICAgICAgZGVzdC0+YWxsb2MgPSBzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtOworICAgICAgZGVzdC0+ZWxlbXMgPSByZV9tYWxsb2MgKGludCwgZGVzdC0+YWxsb2MpOworICAgICAgaWYgKEJFIChkZXN0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoc3JjMSAhPSBOVUxMICYmIHNyYzEtPm5lbGVtID4gMCkKKwlyZXR1cm4gcmVfbm9kZV9zZXRfaW5pdF9jb3B5IChkZXN0LCBzcmMxKTsKKyAgICAgIGVsc2UgaWYgKHNyYzIgIT0gTlVMTCAmJiBzcmMyLT5uZWxlbSA+IDApCisJcmV0dXJuIHJlX25vZGVfc2V0X2luaXRfY29weSAoZGVzdCwgc3JjMik7CisgICAgICBlbHNlCisJcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGVzdCk7CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorICBmb3IgKGkxID0gaTIgPSBpZCA9IDAgOyBpMSA8IHNyYzEtPm5lbGVtICYmIGkyIDwgc3JjMi0+bmVsZW0gOykKKyAgICB7CisgICAgICBpZiAoc3JjMS0+ZWxlbXNbaTFdID4gc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIGRlc3QtPmVsZW1zW2lkKytdID0gc3JjMi0+ZWxlbXNbaTIrK107CisJICBjb250aW51ZTsKKwl9CisgICAgICBpZiAoc3JjMS0+ZWxlbXNbaTFdID09IHNyYzItPmVsZW1zW2kyXSkKKwkrK2kyOworICAgICAgZGVzdC0+ZWxlbXNbaWQrK10gPSBzcmMxLT5lbGVtc1tpMSsrXTsKKyAgICB9CisgIGlmIChpMSA8IHNyYzEtPm5lbGVtKQorICAgIHsKKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMgKyBpZCwgc3JjMS0+ZWxlbXMgKyBpMSwKKwkgICAgIChzcmMxLT5uZWxlbSAtIGkxKSAqIHNpemVvZiAoaW50KSk7CisgICAgICBpZCArPSBzcmMxLT5uZWxlbSAtIGkxOworICAgIH0KKyAgZWxzZSBpZiAoaTIgPCBzcmMyLT5uZWxlbSkKKyAgICB7CisgICAgICBtZW1jcHkgKGRlc3QtPmVsZW1zICsgaWQsIHNyYzItPmVsZW1zICsgaTIsCisJICAgICAoc3JjMi0+bmVsZW0gLSBpMikgKiBzaXplb2YgKGludCkpOworICAgICAgaWQgKz0gc3JjMi0+bmVsZW0gLSBpMjsKKyAgICB9CisgIGRlc3QtPm5lbGVtID0gaWQ7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIHRoZSB1bmlvbiBzZXQgb2YgdGhlIHNldHMgREVTVCBhbmQgU1JDLiBBbmQgc3RvcmUgaXQgdG8KKyAgIERFU1QuIFJldHVybiB2YWx1ZSBpbmRpY2F0ZSB0aGUgZXJyb3IgY29kZSBvciBSRUdfTk9FUlJPUiBpZiBzdWNjZWVkZWQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X21lcmdlIChyZV9ub2RlX3NldCAqZGVzdCwgY29uc3QgcmVfbm9kZV9zZXQgKnNyYykKK3sKKyAgaW50IGlzLCBpZCwgc2Jhc2UsIGRlbHRhOworICBpZiAoc3JjID09IE5VTEwgfHwgc3JjLT5uZWxlbSA9PSAwKQorICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgaWYgKGRlc3QtPmFsbG9jIDwgMiAqIHNyYy0+bmVsZW0gKyBkZXN0LT5uZWxlbSkKKyAgICB7CisgICAgICBpbnQgbmV3X2FsbG9jID0gMiAqIChzcmMtPm5lbGVtICsgZGVzdC0+YWxsb2MpOworICAgICAgaW50ICpuZXdfYnVmZmVyID0gcmVfcmVhbGxvYyAoZGVzdC0+ZWxlbXMsIGludCwgbmV3X2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2J1ZmZlciA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIGRlc3QtPmVsZW1zID0gbmV3X2J1ZmZlcjsKKyAgICAgIGRlc3QtPmFsbG9jID0gbmV3X2FsbG9jOworICAgIH0KKworICBpZiAoQkUgKGRlc3QtPm5lbGVtID09IDAsIDApKQorICAgIHsKKyAgICAgIGRlc3QtPm5lbGVtID0gc3JjLT5uZWxlbTsKKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMsIHNyYy0+ZWxlbXMsIHNyYy0+bmVsZW0gKiBzaXplb2YgKGludCkpOworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKworICAvKiBDb3B5IGludG8gdGhlIHRvcCBvZiBERVNUIHRoZSBpdGVtcyBvZiBTUkMgdGhhdCBhcmUgbm90CisgICAgIGZvdW5kIGluIERFU1QuICBNYXliZSB3ZSBjb3VsZCBiaW5hcnkgc2VhcmNoIGluIERFU1Q/ICAqLworICBmb3IgKHNiYXNlID0gZGVzdC0+bmVsZW0gKyAyICogc3JjLT5uZWxlbSwKKyAgICAgICBpcyA9IHNyYy0+bmVsZW0gLSAxLCBpZCA9IGRlc3QtPm5lbGVtIC0gMTsgaXMgPj0gMCAmJiBpZCA+PSAwOyApCisgICAgeworICAgICAgaWYgKGRlc3QtPmVsZW1zW2lkXSA9PSBzcmMtPmVsZW1zW2lzXSkKKwlpcy0tLCBpZC0tOworICAgICAgZWxzZSBpZiAoZGVzdC0+ZWxlbXNbaWRdIDwgc3JjLT5lbGVtc1tpc10pCisJZGVzdC0+ZWxlbXNbLS1zYmFzZV0gPSBzcmMtPmVsZW1zW2lzLS1dOworICAgICAgZWxzZSAvKiBpZiAoZGVzdC0+ZWxlbXNbaWRdID4gc3JjLT5lbGVtc1tpc10pICovCisJLS1pZDsKKyAgICB9CisKKyAgaWYgKGlzID49IDApCisgICAgeworICAgICAgLyogSWYgREVTVCBpcyBleGhhdXN0ZWQsIHRoZSByZW1haW5pbmcgaXRlbXMgb2YgU1JDIG11c3QgYmUgdW5pcXVlLiAgKi8KKyAgICAgIHNiYXNlIC09IGlzICsgMTsKKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMgKyBzYmFzZSwgc3JjLT5lbGVtcywgKGlzICsgMSkgKiBzaXplb2YgKGludCkpOworICAgIH0KKworICBpZCA9IGRlc3QtPm5lbGVtIC0gMTsKKyAgaXMgPSBkZXN0LT5uZWxlbSArIDIgKiBzcmMtPm5lbGVtIC0gMTsKKyAgZGVsdGEgPSBpcyAtIHNiYXNlICsgMTsKKyAgaWYgKGRlbHRhID09IDApCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgIC8qIE5vdyBjb3B5LiAgV2hlbiBERUxUQSBiZWNvbWVzIHplcm8sIHRoZSByZW1haW5pbmcKKyAgICAgREVTVCBlbGVtZW50cyBhcmUgYWxyZWFkeSBpbiBwbGFjZS4gICovCisgIGRlc3QtPm5lbGVtICs9IGRlbHRhOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGlmIChkZXN0LT5lbGVtc1tpc10gPiBkZXN0LT5lbGVtc1tpZF0pCisJeworCSAgLyogQ29weSBmcm9tIHRoZSB0b3AuICAqLworCSAgZGVzdC0+ZWxlbXNbaWQgKyBkZWx0YS0tXSA9IGRlc3QtPmVsZW1zW2lzLS1dOworCSAgaWYgKGRlbHRhID09IDApCisJICAgIGJyZWFrOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBTbGlkZSBmcm9tIHRoZSBib3R0b20uICAqLworCSAgZGVzdC0+ZWxlbXNbaWQgKyBkZWx0YV0gPSBkZXN0LT5lbGVtc1tpZF07CisJICBpZiAoLS1pZCA8IDApCisJICAgIHsKKwkgICAgICAvKiBDb3B5IHJlbWFpbmluZyBTUkMgZWxlbWVudHMuICAqLworCSAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMsIGRlc3QtPmVsZW1zICsgc2Jhc2UsCisJCSAgICAgIGRlbHRhICogc2l6ZW9mIChpbnQpKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBJbnNlcnQgdGhlIG5ldyBlbGVtZW50IEVMRU0gdG8gdGhlIHJlX25vZGVfc2V0KiBTRVQuCisgICBTRVQgc2hvdWxkIG5vdCBhbHJlYWR5IGhhdmUgRUxFTS4KKyAgIHJldHVybiAtMSBpZiBhbiBlcnJvciBpcyBvY2N1cmVkLCByZXR1cm4gMSBvdGhlcndpc2UuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfaW5zZXJ0IChyZV9ub2RlX3NldCAqc2V0LCBpbnQgZWxlbSkKK3sKKyAgaW50IGlkeDsKKyAgLyogSW4gY2FzZSB0aGUgc2V0IGlzIGVtcHR5LiAgKi8KKyAgaWYgKHNldC0+YWxsb2MgPT0gMCkKKyAgICB7CisgICAgICBpZiAoQkUgKHJlX25vZGVfc2V0X2luaXRfMSAoc2V0LCBlbGVtKSA9PSBSRUdfTk9FUlJPUiwgMSkpCisJcmV0dXJuIDE7CisgICAgICBlbHNlCisJcmV0dXJuIC0xOworICAgIH0KKworICBpZiAoQkUgKHNldC0+bmVsZW0sIDApID09IDApCisgICAgeworICAgICAgLyogV2UgYWxyZWFkeSBndWFyYW50ZWVkIGFib3ZlIHRoYXQgc2V0LT5hbGxvYyAhPSAwLiAgKi8KKyAgICAgIHNldC0+ZWxlbXNbMF0gPSBlbGVtOworICAgICAgKytzZXQtPm5lbGVtOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIFJlYWxsb2MgaWYgd2UgbmVlZC4gICovCisgIGlmIChzZXQtPmFsbG9jID09IHNldC0+bmVsZW0pCisgICAgeworICAgICAgaW50ICpuZXdfZWxlbXM7CisgICAgICBzZXQtPmFsbG9jID0gc2V0LT5hbGxvYyAqIDI7CisgICAgICBuZXdfZWxlbXMgPSByZV9yZWFsbG9jIChzZXQtPmVsZW1zLCBpbnQsIHNldC0+YWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfZWxlbXMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIC0xOworICAgICAgc2V0LT5lbGVtcyA9IG5ld19lbGVtczsKKyAgICB9CisKKyAgLyogTW92ZSB0aGUgZWxlbWVudHMgd2hpY2ggZm9sbG93cyB0aGUgbmV3IGVsZW1lbnQuICBUZXN0IHRoZQorICAgICBmaXJzdCBlbGVtZW50IHNlcGFyYXRlbHkgdG8gc2tpcCBhIGNoZWNrIGluIHRoZSBpbm5lciBsb29wLiAgKi8KKyAgaWYgKGVsZW0gPCBzZXQtPmVsZW1zWzBdKQorICAgIHsKKyAgICAgIGlkeCA9IDA7CisgICAgICBmb3IgKGlkeCA9IHNldC0+bmVsZW07IGlkeCA+IDA7IGlkeC0tKQorCXNldC0+ZWxlbXNbaWR4XSA9IHNldC0+ZWxlbXNbaWR4IC0gMV07CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZm9yIChpZHggPSBzZXQtPm5lbGVtOyBzZXQtPmVsZW1zW2lkeCAtIDFdID4gZWxlbTsgaWR4LS0pCisJc2V0LT5lbGVtc1tpZHhdID0gc2V0LT5lbGVtc1tpZHggLSAxXTsKKyAgICB9CisKKyAgLyogSW5zZXJ0IHRoZSBuZXcgZWxlbWVudC4gICovCisgIHNldC0+ZWxlbXNbaWR4XSA9IGVsZW07CisgICsrc2V0LT5uZWxlbTsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEluc2VydCB0aGUgbmV3IGVsZW1lbnQgRUxFTSB0byB0aGUgcmVfbm9kZV9zZXQqIFNFVC4KKyAgIFNFVCBzaG91bGQgbm90IGFscmVhZHkgaGF2ZSBhbnkgZWxlbWVudCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRUxFTS4KKyAgIFJldHVybiAtMSBpZiBhbiBlcnJvciBpcyBvY2N1cmVkLCByZXR1cm4gMSBvdGhlcndpc2UuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfaW5zZXJ0X2xhc3QgKHJlX25vZGVfc2V0ICpzZXQsIGludCBlbGVtKQoreworICAvKiBSZWFsbG9jIGlmIHdlIG5lZWQuICAqLworICBpZiAoc2V0LT5hbGxvYyA9PSBzZXQtPm5lbGVtKQorICAgIHsKKyAgICAgIGludCAqbmV3X2VsZW1zOworICAgICAgc2V0LT5hbGxvYyA9IChzZXQtPmFsbG9jICsgMSkgKiAyOworICAgICAgbmV3X2VsZW1zID0gcmVfcmVhbGxvYyAoc2V0LT5lbGVtcywgaW50LCBzZXQtPmFsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2VsZW1zID09IE5VTEwsIDApKQorCXJldHVybiAtMTsKKyAgICAgIHNldC0+ZWxlbXMgPSBuZXdfZWxlbXM7CisgICAgfQorCisgIC8qIEluc2VydCB0aGUgbmV3IGVsZW1lbnQuICAqLworICBzZXQtPmVsZW1zW3NldC0+bmVsZW0rK10gPSBlbGVtOworICByZXR1cm4gMTsKK30KKworLyogQ29tcGFyZSB0d28gbm9kZSBzZXRzIFNFVDEgYW5kIFNFVDIuCisgICByZXR1cm4gMSBpZiBTRVQxIGFuZCBTRVQyIGFyZSBlcXVpdmFsZW50LCByZXR1cm4gMCBvdGhlcndpc2UuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfbm9kZV9zZXRfY29tcGFyZSAoY29uc3QgcmVfbm9kZV9zZXQgKnNldDEsIGNvbnN0IHJlX25vZGVfc2V0ICpzZXQyKQoreworICBpbnQgaTsKKyAgaWYgKHNldDEgPT0gTlVMTCB8fCBzZXQyID09IE5VTEwgfHwgc2V0MS0+bmVsZW0gIT0gc2V0Mi0+bmVsZW0pCisgICAgcmV0dXJuIDA7CisgIGZvciAoaSA9IHNldDEtPm5lbGVtIDsgLS1pID49IDAgOyApCisgICAgaWYgKHNldDEtPmVsZW1zW2ldICE9IHNldDItPmVsZW1zW2ldKQorICAgICAgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCisvKiBSZXR1cm4gKGlkeCArIDEpIGlmIFNFVCBjb250YWlucyB0aGUgZWxlbWVudCBFTEVNLCByZXR1cm4gMCBvdGhlcndpc2UuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfbm9kZV9zZXRfY29udGFpbnMgKGNvbnN0IHJlX25vZGVfc2V0ICpzZXQsIGludCBlbGVtKQoreworICB1bnNpZ25lZCBpbnQgaWR4LCByaWdodCwgbWlkOworICBpZiAoc2V0LT5uZWxlbSA8PSAwKQorICAgIHJldHVybiAwOworCisgIC8qIEJpbmFyeSBzZWFyY2ggdGhlIGVsZW1lbnQuICAqLworICBpZHggPSAwOworICByaWdodCA9IHNldC0+bmVsZW0gLSAxOworICB3aGlsZSAoaWR4IDwgcmlnaHQpCisgICAgeworICAgICAgbWlkID0gKGlkeCArIHJpZ2h0KSAvIDI7CisgICAgICBpZiAoc2V0LT5lbGVtc1ttaWRdIDwgZWxlbSkKKwlpZHggPSBtaWQgKyAxOworICAgICAgZWxzZQorCXJpZ2h0ID0gbWlkOworICAgIH0KKyAgcmV0dXJuIHNldC0+ZWxlbXNbaWR4XSA9PSBlbGVtID8gaWR4ICsgMSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfcmVtb3ZlX2F0IChyZV9ub2RlX3NldCAqc2V0LCBpbnQgaWR4KQoreworICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc2V0LT5uZWxlbSkKKyAgICByZXR1cm47CisgIC0tc2V0LT5uZWxlbTsKKyAgZm9yICg7IGlkeCA8IHNldC0+bmVsZW07IGlkeCsrKQorICAgIHNldC0+ZWxlbXNbaWR4XSA9IHNldC0+ZWxlbXNbaWR4ICsgMV07Cit9CisMCisKKy8qIEFkZCB0aGUgdG9rZW4gVE9LRU4gdG8gZGZhLT5ub2RlcywgYW5kIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHRva2VuLgorICAgT3IgcmV0dXJuIC0xLCBpZiBhbiBlcnJvciB3aWxsIGJlIG9jY3VyZWQuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfZGZhX2FkZF9ub2RlIChyZV9kZmFfdCAqZGZhLCByZV90b2tlbl90IHRva2VuKQoreworICBpZiAoQkUgKGRmYS0+bm9kZXNfbGVuID49IGRmYS0+bm9kZXNfYWxsb2MsIDApKQorICAgIHsKKyAgICAgIHNpemVfdCBuZXdfbm9kZXNfYWxsb2MgPSBkZmEtPm5vZGVzX2FsbG9jICogMjsKKyAgICAgIGludCAqbmV3X25leHRzLCAqbmV3X2luZGljZXM7CisgICAgICByZV9ub2RlX3NldCAqbmV3X2VkZXN0cywgKm5ld19lY2xvc3VyZXM7CisgICAgICByZV90b2tlbl90ICpuZXdfbm9kZXM7CisKKyAgICAgIC8qIEF2b2lkIG92ZXJmbG93cyBpbiByZWFsbG9jLiAgKi8KKyAgICAgIGNvbnN0IHNpemVfdCBtYXhfb2JqZWN0X3NpemUgPSBNQVggKHNpemVvZiAocmVfdG9rZW5fdCksCisJCQkJCSAgTUFYIChzaXplb2YgKHJlX25vZGVfc2V0KSwKKwkJCQkJICAgICAgIHNpemVvZiAoaW50KSkpOworICAgICAgaWYgKEJFIChTSVpFX01BWCAvIG1heF9vYmplY3Rfc2l6ZSA8IG5ld19ub2Rlc19hbGxvYywgMCkpCisJcmV0dXJuIC0xOworCisgICAgICBuZXdfbm9kZXMgPSByZV9yZWFsbG9jIChkZmEtPm5vZGVzLCByZV90b2tlbl90LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfbm9kZXMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIC0xOworICAgICAgZGZhLT5ub2RlcyA9IG5ld19ub2RlczsKKyAgICAgIG5ld19uZXh0cyA9IHJlX3JlYWxsb2MgKGRmYS0+bmV4dHMsIGludCwgbmV3X25vZGVzX2FsbG9jKTsKKyAgICAgIG5ld19pbmRpY2VzID0gcmVfcmVhbGxvYyAoZGZhLT5vcmdfaW5kaWNlcywgaW50LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgbmV3X2VkZXN0cyA9IHJlX3JlYWxsb2MgKGRmYS0+ZWRlc3RzLCByZV9ub2RlX3NldCwgbmV3X25vZGVzX2FsbG9jKTsKKyAgICAgIG5ld19lY2xvc3VyZXMgPSByZV9yZWFsbG9jIChkZmEtPmVjbG9zdXJlcywgcmVfbm9kZV9zZXQsIG5ld19ub2Rlc19hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19uZXh0cyA9PSBOVUxMIHx8IG5ld19pbmRpY2VzID09IE5VTEwKKwkgICAgICB8fCBuZXdfZWRlc3RzID09IE5VTEwgfHwgbmV3X2VjbG9zdXJlcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gLTE7CisgICAgICBkZmEtPm5leHRzID0gbmV3X25leHRzOworICAgICAgZGZhLT5vcmdfaW5kaWNlcyA9IG5ld19pbmRpY2VzOworICAgICAgZGZhLT5lZGVzdHMgPSBuZXdfZWRlc3RzOworICAgICAgZGZhLT5lY2xvc3VyZXMgPSBuZXdfZWNsb3N1cmVzOworICAgICAgZGZhLT5ub2Rlc19hbGxvYyA9IG5ld19ub2Rlc19hbGxvYzsKKyAgICB9CisgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dID0gdG9rZW47CisgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dLmNvbnN0cmFpbnQgPSAwOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dLmFjY2VwdF9tYiA9CisgICAgKHRva2VuLnR5cGUgPT0gT1BfUEVSSU9EICYmIGRmYS0+bWJfY3VyX21heCA+IDEpIHx8IHRva2VuLnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUOworI2VuZGlmCisgIGRmYS0+bmV4dHNbZGZhLT5ub2Rlc19sZW5dID0gLTE7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRmYS0+ZWRlc3RzICsgZGZhLT5ub2Rlc19sZW4pOworICByZV9ub2RlX3NldF9pbml0X2VtcHR5IChkZmEtPmVjbG9zdXJlcyArIGRmYS0+bm9kZXNfbGVuKTsKKyAgcmV0dXJuIGRmYS0+bm9kZXNfbGVuKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2FsY19zdGF0ZV9oYXNoIChjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsIHVuc2lnbmVkIGludCBjb250ZXh0KQoreworICB1bnNpZ25lZCBpbnQgaGFzaCA9IG5vZGVzLT5uZWxlbSArIGNvbnRleHQ7CisgIGludCBpOworICBmb3IgKGkgPSAwIDsgaSA8IG5vZGVzLT5uZWxlbSA7IGkrKykKKyAgICBoYXNoICs9IG5vZGVzLT5lbGVtc1tpXTsKKyAgcmV0dXJuIGhhc2g7Cit9CisKKy8qIFNlYXJjaCBmb3IgdGhlIHN0YXRlIHdob3NlIG5vZGVfc2V0IGlzIGVxdWl2YWxlbnQgdG8gTk9ERVMuCisgICBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXRlLCBpZiB3ZSBmb3VuZCBpdCBpbiB0aGUgREZBLgorICAgT3RoZXJ3aXNlIGNyZWF0ZSB0aGUgbmV3IG9uZSBhbmQgcmV0dXJuIGl0LiAgSW4gY2FzZSBvZiBhbiBlcnJvcgorICAgcmV0dXJuIE5VTEwgYW5kIHNldCB0aGUgZXJyb3IgY29kZSBpbiBFUlIuCisgICBOb3RlOiAtIFdlIGFzc3VtZSBOVUxMIGFzIHRoZSBpbnZhbGlkIHN0YXRlLCB0aGVuIGl0IGlzIHBvc3NpYmxlIHRoYXQKKwkgICByZXR1cm4gdmFsdWUgaXMgTlVMTCBhbmQgRVJSIGlzIFJFR19OT0VSUk9SLgorCSAtIFdlIG5ldmVyIHJldHVybiBub24tTlVMTCB2YWx1ZSBpbiBjYXNlIG9mIGFueSBlcnJvcnMsIGl0IGlzIGZvcgorCSAgIG9wdGltaXphdGlvbi4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCityZV9hY3F1aXJlX3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsIGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzKQoreworICB1bnNpZ25lZCBpbnQgaGFzaDsKKyAgcmVfZGZhc3RhdGVfdCAqbmV3X3N0YXRlOworICBzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkgKnNwb3Q7CisgIGludCBpOworICBpZiAoQkUgKG5vZGVzLT5uZWxlbSA9PSAwLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX05PRVJST1I7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGhhc2ggPSBjYWxjX3N0YXRlX2hhc2ggKG5vZGVzLCAwKTsKKyAgc3BvdCA9IGRmYS0+c3RhdGVfdGFibGUgKyAoaGFzaCAmIGRmYS0+c3RhdGVfaGFzaF9tYXNrKTsKKworICBmb3IgKGkgPSAwIDsgaSA8IHNwb3QtPm51bSA7IGkrKykKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSA9IHNwb3QtPmFycmF5W2ldOworICAgICAgaWYgKGhhc2ggIT0gc3RhdGUtPmhhc2gpCisJY29udGludWU7CisgICAgICBpZiAocmVfbm9kZV9zZXRfY29tcGFyZSAoJnN0YXRlLT5ub2Rlcywgbm9kZXMpKQorCXJldHVybiBzdGF0ZTsKKyAgICB9CisKKyAgLyogVGhlcmUgYXJlIG5vIGFwcHJvcHJpYXRlIHN0YXRlIGluIHRoZSBkZmEsIGNyZWF0ZSB0aGUgbmV3IG9uZS4gICovCisgIG5ld19zdGF0ZSA9IGNyZWF0ZV9jaV9uZXdzdGF0ZSAoZGZhLCBub2RlcywgaGFzaCk7CisgIGlmIChCRSAobmV3X3N0YXRlID09IE5VTEwsIDApKQorICAgICplcnIgPSBSRUdfRVNQQUNFOworCisgIHJldHVybiBuZXdfc3RhdGU7Cit9CisKKy8qIFNlYXJjaCBmb3IgdGhlIHN0YXRlIHdob3NlIG5vZGVfc2V0IGlzIGVxdWl2YWxlbnQgdG8gTk9ERVMgYW5kCisgICB3aG9zZSBjb250ZXh0IGlzIGVxdWl2YWxlbnQgdG8gQ09OVEVYVC4KKyAgIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgc3RhdGUsIGlmIHdlIGZvdW5kIGl0IGluIHRoZSBERkEuCisgICBPdGhlcndpc2UgY3JlYXRlIHRoZSBuZXcgb25lIGFuZCByZXR1cm4gaXQuICBJbiBjYXNlIG9mIGFuIGVycm9yCisgICByZXR1cm4gTlVMTCBhbmQgc2V0IHRoZSBlcnJvciBjb2RlIGluIEVSUi4KKyAgIE5vdGU6IC0gV2UgYXNzdW1lIE5VTEwgYXMgdGhlIGludmFsaWQgc3RhdGUsIHRoZW4gaXQgaXMgcG9zc2libGUgdGhhdAorCSAgIHJldHVybiB2YWx1ZSBpcyBOVUxMIGFuZCBFUlIgaXMgUkVHX05PRVJST1IuCisJIC0gV2UgbmV2ZXIgcmV0dXJuIG5vbi1OVUxMIHZhbHVlIGluIGNhc2Ugb2YgYW55IGVycm9ycywgaXQgaXMgZm9yCisJICAgb3B0aW1pemF0aW9uLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAocmVnX2VycmNvZGVfdCAqZXJyLCBjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsIHVuc2lnbmVkIGludCBjb250ZXh0KQoreworICB1bnNpZ25lZCBpbnQgaGFzaDsKKyAgcmVfZGZhc3RhdGVfdCAqbmV3X3N0YXRlOworICBzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkgKnNwb3Q7CisgIGludCBpOworICBpZiAobm9kZXMtPm5lbGVtID09IDApCisgICAgeworICAgICAgKmVyciA9IFJFR19OT0VSUk9SOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBoYXNoID0gY2FsY19zdGF0ZV9oYXNoIChub2RlcywgY29udGV4dCk7CisgIHNwb3QgPSBkZmEtPnN0YXRlX3RhYmxlICsgKGhhc2ggJiBkZmEtPnN0YXRlX2hhc2hfbWFzayk7CisKKyAgZm9yIChpID0gMCA7IGkgPCBzcG90LT5udW0gOyBpKyspCisgICAgeworICAgICAgcmVfZGZhc3RhdGVfdCAqc3RhdGUgPSBzcG90LT5hcnJheVtpXTsKKyAgICAgIGlmIChzdGF0ZS0+aGFzaCA9PSBoYXNoCisJICAmJiBzdGF0ZS0+Y29udGV4dCA9PSBjb250ZXh0CisJICAmJiByZV9ub2RlX3NldF9jb21wYXJlIChzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsIG5vZGVzKSkKKwlyZXR1cm4gc3RhdGU7CisgICAgfQorICAvKiBUaGVyZSBhcmUgbm8gYXBwcm9wcmlhdGUgc3RhdGUgaW4gYGRmYScsIGNyZWF0ZSB0aGUgbmV3IG9uZS4gICovCisgIG5ld19zdGF0ZSA9IGNyZWF0ZV9jZF9uZXdzdGF0ZSAoZGZhLCBub2RlcywgY29udGV4dCwgaGFzaCk7CisgIGlmIChCRSAobmV3X3N0YXRlID09IE5VTEwsIDApKQorICAgICplcnIgPSBSRUdfRVNQQUNFOworCisgIHJldHVybiBuZXdfc3RhdGU7Cit9CisKKy8qIEZpbmlzaCBpbml0aWFsaXphdGlvbiBvZiB0aGUgbmV3IHN0YXRlIE5FV1NUQVRFLCBhbmQgdXNpbmcgaXRzIGhhc2ggdmFsdWUKKyAgIEhBU0ggcHV0IGluIHRoZSBhcHByb3ByaWF0ZSBidWNrZXQgb2YgREZBJ3Mgc3RhdGUgdGFibGUuICBSZXR1cm4gdmFsdWUKKyAgIGluZGljYXRlcyB0aGUgZXJyb3IgY29kZSBpZiBmYWlsZWQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcmVnaXN0ZXJfc3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX2RmYXN0YXRlX3QgKm5ld3N0YXRlLAorCQl1bnNpZ25lZCBpbnQgaGFzaCkKK3sKKyAgc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5ICpzcG90OworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGk7CisKKyAgbmV3c3RhdGUtPmhhc2ggPSBoYXNoOworICBlcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJm5ld3N0YXRlLT5ub25fZXBzX25vZGVzLCBuZXdzdGF0ZS0+bm9kZXMubmVsZW0pOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIGZvciAoaSA9IDA7IGkgPCBuZXdzdGF0ZS0+bm9kZXMubmVsZW07IGkrKykKKyAgICB7CisgICAgICBpbnQgZWxlbSA9IG5ld3N0YXRlLT5ub2Rlcy5lbGVtc1tpXTsKKyAgICAgIGlmICghSVNfRVBTSUxPTl9OT0RFIChkZmEtPm5vZGVzW2VsZW1dLnR5cGUpKQorCWlmIChyZV9ub2RlX3NldF9pbnNlcnRfbGFzdCAoJm5ld3N0YXRlLT5ub25fZXBzX25vZGVzLCBlbGVtKSA8IDApCisJICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisKKyAgc3BvdCA9IGRmYS0+c3RhdGVfdGFibGUgKyAoaGFzaCAmIGRmYS0+c3RhdGVfaGFzaF9tYXNrKTsKKyAgaWYgKEJFIChzcG90LT5hbGxvYyA8PSBzcG90LT5udW0sIDApKQorICAgIHsKKyAgICAgIGludCBuZXdfYWxsb2MgPSAyICogc3BvdC0+bnVtICsgMjsKKyAgICAgIHJlX2RmYXN0YXRlX3QgKipuZXdfYXJyYXkgPSByZV9yZWFsbG9jIChzcG90LT5hcnJheSwgcmVfZGZhc3RhdGVfdCAqLAorCQkJCQkgICAgICBuZXdfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBzcG90LT5hcnJheSA9IG5ld19hcnJheTsKKyAgICAgIHNwb3QtPmFsbG9jID0gbmV3X2FsbG9jOworICAgIH0KKyAgc3BvdC0+YXJyYXlbc3BvdC0+bnVtKytdID0gbmV3c3RhdGU7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfc3RhdGUgKHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICByZV9ub2RlX3NldF9mcmVlICgmc3RhdGUtPm5vbl9lcHNfbm9kZXMpOworICByZV9ub2RlX3NldF9mcmVlICgmc3RhdGUtPmludmVjbG9zdXJlKTsKKyAgaWYgKHN0YXRlLT5lbnRyYW5jZV9ub2RlcyAhPSAmc3RhdGUtPm5vZGVzKQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKHN0YXRlLT5lbnRyYW5jZV9ub2Rlcyk7CisgICAgICByZV9mcmVlIChzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMpOworICAgIH0KKyAgcmVfbm9kZV9zZXRfZnJlZSAoJnN0YXRlLT5ub2Rlcyk7CisgIHJlX2ZyZWUgKHN0YXRlLT53b3JkX3RydGFibGUpOworICByZV9mcmVlIChzdGF0ZS0+dHJ0YWJsZSk7CisgIHJlX2ZyZWUgKHN0YXRlKTsKK30KKworLyogQ3JlYXRlIHRoZSBuZXcgc3RhdGUgd2hpY2ggaXMgaW5kZXBlbmQgb2YgY29udGV4dHMuCisgICBSZXR1cm4gdGhlIG5ldyBzdGF0ZSBpZiBzdWNjZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCitjcmVhdGVfY2lfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywKKwkJICAgIHVuc2lnbmVkIGludCBoYXNoKQoreworICBpbnQgaTsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIHJlX2RmYXN0YXRlX3QgKm5ld3N0YXRlOworCisgIG5ld3N0YXRlID0gKHJlX2RmYXN0YXRlX3QgKikgY2FsbG9jIChzaXplb2YgKHJlX2RmYXN0YXRlX3QpLCAxKTsKKyAgaWYgKEJFIChuZXdzdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmbmV3c3RhdGUtPm5vZGVzLCBub2Rlcyk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICByZV9mcmVlIChuZXdzdGF0ZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgbmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID0gJm5ld3N0YXRlLT5ub2RlczsKKyAgZm9yIChpID0gMCA7IGkgPCBub2Rlcy0+bmVsZW0gOyBpKyspCisgICAgeworICAgICAgcmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBub2Rlcy0+ZWxlbXNbaV07CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IG5vZGUtPnR5cGU7CisgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIgJiYgIW5vZGUtPmNvbnN0cmFpbnQpCisJY29udGludWU7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIG5ld3N0YXRlLT5hY2NlcHRfbWIgfD0gbm9kZS0+YWNjZXB0X21iOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyAgICAgIC8qIElmIHRoZSBzdGF0ZSBoYXMgdGhlIGhhbHQgbm9kZSwgdGhlIHN0YXRlIGlzIGEgaGFsdCBzdGF0ZS4gICovCisgICAgICBpZiAodHlwZSA9PSBFTkRfT0ZfUkUpCisJbmV3c3RhdGUtPmhhbHQgPSAxOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9CQUNLX1JFRikKKwluZXdzdGF0ZS0+aGFzX2JhY2tyZWYgPSAxOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBBTkNIT1IgfHwgbm9kZS0+Y29uc3RyYWludCkKKwluZXdzdGF0ZS0+aGFzX2NvbnN0cmFpbnQgPSAxOworICAgIH0KKyAgZXJyID0gcmVnaXN0ZXJfc3RhdGUgKGRmYSwgbmV3c3RhdGUsIGhhc2gpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgZnJlZV9zdGF0ZSAobmV3c3RhdGUpOworICAgICAgbmV3c3RhdGUgPSBOVUxMOworICAgIH0KKyAgcmV0dXJuIG5ld3N0YXRlOworfQorCisvKiBDcmVhdGUgdGhlIG5ldyBzdGF0ZSB3aGljaCBpcyBkZXBlbmQgb24gdGhlIGNvbnRleHQgQ09OVEVYVC4KKyAgIFJldHVybiB0aGUgbmV3IHN0YXRlIGlmIHN1Y2NlZWRlZCwgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK2NyZWF0ZV9jZF9uZXdzdGF0ZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkgICAgdW5zaWduZWQgaW50IGNvbnRleHQsIHVuc2lnbmVkIGludCBoYXNoKQoreworICBpbnQgaSwgbmN0eF9ub2RlcyA9IDA7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICByZV9kZmFzdGF0ZV90ICpuZXdzdGF0ZTsKKworICBuZXdzdGF0ZSA9IChyZV9kZmFzdGF0ZV90ICopIGNhbGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90KSwgMSk7CisgIGlmIChCRSAobmV3c3RhdGUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJm5ld3N0YXRlLT5ub2Rlcywgbm9kZXMpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgcmVfZnJlZSAobmV3c3RhdGUpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIG5ld3N0YXRlLT5jb250ZXh0ID0gY29udGV4dDsKKyAgbmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID0gJm5ld3N0YXRlLT5ub2RlczsKKworICBmb3IgKGkgPSAwIDsgaSA8IG5vZGVzLT5uZWxlbSA7IGkrKykKKyAgICB7CisgICAgICByZV90b2tlbl90ICpub2RlID0gZGZhLT5ub2RlcyArIG5vZGVzLT5lbGVtc1tpXTsKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gbm9kZS0+dHlwZTsKKyAgICAgIHVuc2lnbmVkIGludCBjb25zdHJhaW50ID0gbm9kZS0+Y29uc3RyYWludDsKKworICAgICAgaWYgKHR5cGUgPT0gQ0hBUkFDVEVSICYmICFjb25zdHJhaW50KQorCWNvbnRpbnVlOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBuZXdzdGF0ZS0+YWNjZXB0X21iIHw9IG5vZGUtPmFjY2VwdF9tYjsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgICAgICAvKiBJZiB0aGUgc3RhdGUgaGFzIHRoZSBoYWx0IG5vZGUsIHRoZSBzdGF0ZSBpcyBhIGhhbHQgc3RhdGUuICAqLworICAgICAgaWYgKHR5cGUgPT0gRU5EX09GX1JFKQorCW5ld3N0YXRlLT5oYWx0ID0gMTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfQkFDS19SRUYpCisJbmV3c3RhdGUtPmhhc19iYWNrcmVmID0gMTsKKworICAgICAgaWYgKGNvbnN0cmFpbnQpCisJeworCSAgaWYgKG5ld3N0YXRlLT5lbnRyYW5jZV9ub2RlcyA9PSAmbmV3c3RhdGUtPm5vZGVzKQorCSAgICB7CisJICAgICAgbmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID0gcmVfbWFsbG9jIChyZV9ub2RlX3NldCwgMSk7CisJICAgICAgaWYgKEJFIChuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgPT0gTlVMTCwgMCkpCisJCXsKKwkJICBmcmVlX3N0YXRlIChuZXdzdGF0ZSk7CisJCSAgcmV0dXJuIE5VTEw7CisJCX0KKwkgICAgICBpZiAocmVfbm9kZV9zZXRfaW5pdF9jb3B5IChuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsIG5vZGVzKQorCQkgICE9IFJFR19OT0VSUk9SKQorCQlyZXR1cm4gTlVMTDsKKwkgICAgICBuY3R4X25vZGVzID0gMDsKKwkgICAgICBuZXdzdGF0ZS0+aGFzX2NvbnN0cmFpbnQgPSAxOworCSAgICB9CisKKwkgIGlmIChOT1RfU0FUSVNGWV9QUkVWX0NPTlNUUkFJTlQgKGNvbnN0cmFpbnQsY29udGV4dCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9yZW1vdmVfYXQgKCZuZXdzdGF0ZS0+bm9kZXMsIGkgLSBuY3R4X25vZGVzKTsKKwkgICAgICArK25jdHhfbm9kZXM7CisJICAgIH0KKwl9CisgICAgfQorICBlcnIgPSByZWdpc3Rlcl9zdGF0ZSAoZGZhLCBuZXdzdGF0ZSwgaGFzaCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICBmcmVlX3N0YXRlIChuZXdzdGF0ZSk7CisgICAgICBuZXdzdGF0ZSA9IE5VTEw7CisgICAgfQorICByZXR1cm4gIG5ld3N0YXRlOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmggYi9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg0ZDdmCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmgKQEAgLTAsMCArMSw4MTAgQEAKKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSwgMjAwNywgMjAwOCwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3IFVTQS4gICovCisKKyNpZm5kZWYgX1JFR0VYX0lOVEVSTkFMX0gKKyNkZWZpbmUgX1JFR0VYX0lOVEVSTkFMX0ggMQorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZCBIQVZFX0xBTkdJTkZPX0ggfHwgZGVmaW5lZCBIQVZFX0xBTkdJTkZPX0NPREVTRVQgfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxsYW5naW5mby5oPgorI2VuZGlmCisjaWYgZGVmaW5lZCBIQVZFX0xPQ0FMRV9IIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkIEhBVkVfV0NIQVJfSCB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPHdjaGFyLmg+CisjZW5kaWYgLyogSEFWRV9XQ0hBUl9IIHx8IF9MSUJDICovCisjaWYgZGVmaW5lZCBIQVZFX1dDVFlQRV9IIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisjZW5kaWYgLyogSEFWRV9XQ1RZUEVfSCB8fCBfTElCQyAqLworI2lmIGRlZmluZWQgSEFWRV9TVERCT09MX0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxzdGRib29sLmg+CisjZW5kaWYgLyogSEFWRV9TVERCT09MX0ggfHwgX0xJQkMgKi8KKyNpZiAhZGVmaW5lZChaT1NfVVNTKQorI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSCB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmIC8qIEhBVkVfU1RESU5UX0ggfHwgX0xJQkMgKi8KKyNlbmRpZiAvKiAhWk9TX1VTUyAqLworI2lmIGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyNlbHNlCisjIGRlZmluZSBfX2xpYmNfbG9ja19kZWZpbmUoQ0xBU1MsTkFNRSkKKyMgZGVmaW5lIF9fbGliY19sb2NrX2luaXQoTkFNRSkgZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSBkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgR0FXSworLyogSW4gY2FzZSB0aGF0IHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGlzYmxhbmsoKS4gICovCisjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9JU0JMQU5LICYmICFkZWZpbmVkIGlzYmxhbmsKKyMgZGVmaW5lIGlzYmxhbmsoY2gpICgoY2gpID09ICcgJyB8fCAoY2gpID09ICdcdCcpCisjZW5kaWYKKyNlbHNlIC8qIEdBV0sgKi8KKy8qCisgKiBUaGlzIGlzIGEgZnJlYWtpbmcgbWVzcy4gT24gZ2xpYmMgc3lzdGVtcyB5b3UgaGF2ZSB0byBkZWZpbmUKKyAqIGEgbWFnaWMgY29uc3RhbnQgdG8gZ2V0IGlzYmxhbmsoKSBvdXQgb2YgPGN0eXBlLmg+LCBzaW5jZSBpdCdzCisgKiBhIEM5OSBmdW5jdGlvbi4gIFRvIGhlY2sgd2l0aCBhbGwgdGhhdCBhbmQgYm9ycm93IGEgcGFnZSBmcm9tCisgKiBkZmEuYydzIGJvb2suCisgKi8KKworc3RhdGljIGludAoraXNfYmxhbmsgKGludCBjKQoreworICAgcmV0dXJuIChjID09ICcgJyB8fCBjID09ICdcdCcpOworfQorI2VuZGlmIC8qIEdBV0sgKi8KKworI2lmZGVmIF9MSUJDCisjIGlmbmRlZiBfUkVfREVGSU5FX0xPQ0FMRV9GVU5DVElPTlMKKyMgIGRlZmluZSBfUkVfREVGSU5FX0xPQ0FMRV9GVU5DVElPTlMgMQorIyAgIGluY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisjICAgaW5jbHVkZSA8bG9jYWxlL2VsZW0taGFzaC5oPgorIyAgIGluY2x1ZGUgPGxvY2FsZS9jb2xsLWxvb2t1cC5oPgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMgaXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMuICAqLworI2lmIChIQVZFX0xJQklOVExfSCAmJiBFTkFCTEVfTkxTKSB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgaWZkZWYgX0xJQkMKKyMgIHVuZGVmIGdldHRleHQKKyMgIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSBcCisgIElOVFVTRShfX2RjZ2V0dGV4dCkgKF9saWJjX2ludGxfZG9tYWlubmFtZSwgbXNnaWQsIExDX01FU1NBR0VTKQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyNlbmRpZgorCisjaWZuZGVmIGdldHRleHRfbm9vcAorLyogVGhpcyBkZWZpbmUgaXMgc28geGdldHRleHQgY2FuIGZpbmQgdGhlIGludGVybmF0aW9uYWxpemFibGUKKyAgIHN0cmluZ3MuICAqLworIyBkZWZpbmUgZ2V0dGV4dF9ub29wKFN0cmluZykgU3RyaW5nCisjZW5kaWYKKworLyogRm9yIGxvc2VyIHN5c3RlbXMgd2l0aG91dCB0aGUgZGVmaW5pdGlvbi4gICovCisjaWZuZGVmIFNJWkVfTUFYCisjIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCisjZW5kaWYKKworI2lmbmRlZiBOT19NQlNVUFBPUlQKKyNpbmNsdWRlICJtYnN1cHBvcnQuaCIgLyogZ2F3ayAqLworI2VuZGlmCisjaWZuZGVmIE1CX0NVUl9NQVgKKyNkZWZpbmUgTUJfQ1VSX01BWCAxCisjZW5kaWYKKworI2lmIChkZWZpbmVkIE1CU19TVVBQT1JUKSB8fCBfTElCQworIyBkZWZpbmUgUkVfRU5BQkxFX0kxOE4KKyNlbmRpZgorCisjaWYgX19HTlVDX18gPj0gMworIyBkZWZpbmUgQkUoZXhwciwgdmFsKSBfX2J1aWx0aW5fZXhwZWN0IChleHByLCB2YWwpCisjZWxzZQorIyBkZWZpbmUgQkUoZXhwciwgdmFsKSAoZXhwcikKKyMgaWZkZWYgaW5saW5lCisjIHVuZGVmIGlubGluZQorIyBlbmRpZgorIyBkZWZpbmUgaW5saW5lCisjZW5kaWYKKworLyogTnVtYmVyIG9mIHNpbmdsZSBieXRlIGNoYXJhY3Rlci4gICovCisjZGVmaW5lIFNCQ19NQVggMjU2CisKKyNkZWZpbmUgQ09MTF9FTEVNX0xFTl9NQVggOAorCisvKiBUaGUgY2hhcmFjdGVyIHdoaWNoIHJlcHJlc2VudHMgbmV3bGluZS4gICovCisjZGVmaW5lIE5FV0xJTkVfQ0hBUiAnXG4nCisjZGVmaW5lIFdJREVfTkVXTElORV9DSEFSIEwnXG4nCisKKy8qIFJlbmFtZSB0byBzdGFuZGFyZCBBUEkgZm9yIHVzaW5nIG91dCBvZiBnbGliYy4gICovCisjaWZuZGVmIF9MSUJDCisjIGlmZGVmIF9fd2N0eXBlCisjIHVuZGVmIF9fd2N0eXBlCisjIGVuZGlmCisjIGRlZmluZSBfX3djdHlwZSB3Y3R5cGUKKyMgaWZkZWYgX19pc3djdHlwZQorIyB1bmRlZiBfX2lzd2N0eXBlCisjIGVuZGlmCisjIGRlZmluZSBfX2lzd2N0eXBlIGlzd2N0eXBlCisjIGRlZmluZSBfX2J0b3djIGJ0b3djCisjIGRlZmluZSBfX21icnRvd2MgbWJydG93YworI3VuZGVmIF9fbWVtcGNweQkvKiBHQVdLICovCisjIGRlZmluZSBfX21lbXBjcHkgbWVtcGNweQorIyBkZWZpbmUgX193Y3J0b21iIHdjcnRvbWIKKyMgZGVmaW5lIF9fcmVnZnJlZSByZWdmcmVlCisjIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCisjZW5kaWYgLyogbm90IF9MSUJDICovCisKKyNpZmRlZiBfX0dOVUNfXworIyBkZWZpbmUgX19hdHRyaWJ1dGUoYXJnKSBfX2F0dHJpYnV0ZV9fIChhcmcpCisjZWxzZQorIyBkZWZpbmUgX19hdHRyaWJ1dGUoYXJnKQorI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyIF9fcmVfZXJyb3JfbXNnaWRbXSBhdHRyaWJ1dGVfaGlkZGVuOworZXh0ZXJuIGNvbnN0IHNpemVfdCBfX3JlX2Vycm9yX21zZ2lkX2lkeFtdIGF0dHJpYnV0ZV9oaWRkZW47CisKKy8qIEFuIGludGVnZXIgdXNlZCB0byByZXByZXNlbnQgYSBzZXQgb2YgYml0cy4gIEl0IG11c3QgYmUgdW5zaWduZWQsCisgICBhbmQgbXVzdCBiZSBhdCBsZWFzdCBhcyB3aWRlIGFzIHVuc2lnbmVkIGludC4gICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGJpdHNldF93b3JkX3Q7CisvKiBBbGwgYml0cyBzZXQgaW4gYSBiaXRzZXRfd29yZF90LiAgKi8KKyNkZWZpbmUgQklUU0VUX1dPUkRfTUFYIFVMT05HX01BWAorLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBiaXRzZXRfd29yZF90LiAgKi8KKyNkZWZpbmUgQklUU0VUX1dPUkRfQklUUyAoc2l6ZW9mIChiaXRzZXRfd29yZF90KSAqIENIQVJfQklUKQorLyogTnVtYmVyIG9mIGJpdHNldF93b3JkX3QgaW4gYSBiaXRfc2V0LiAgKi8KKyNkZWZpbmUgQklUU0VUX1dPUkRTIChTQkNfTUFYIC8gQklUU0VUX1dPUkRfQklUUykKK3R5cGVkZWYgYml0c2V0X3dvcmRfdCBiaXRzZXRfdFtCSVRTRVRfV09SRFNdOwordHlwZWRlZiBiaXRzZXRfd29yZF90ICpyZV9iaXRzZXRfcHRyX3Q7Cit0eXBlZGVmIGNvbnN0IGJpdHNldF93b3JkX3QgKnJlX2NvbnN0X2JpdHNldF9wdHJfdDsKKworI2RlZmluZSBiaXRzZXRfc2V0KHNldCxpKSBcCisgIChzZXRbaSAvIEJJVFNFVF9XT1JEX0JJVFNdIHw9IChiaXRzZXRfd29yZF90KSAxIDw8IGkgJSBCSVRTRVRfV09SRF9CSVRTKQorI2RlZmluZSBiaXRzZXRfY2xlYXIoc2V0LGkpIFwKKyAgKHNldFtpIC8gQklUU0VUX1dPUkRfQklUU10gJj0gfigoYml0c2V0X3dvcmRfdCkgMSA8PCBpICUgQklUU0VUX1dPUkRfQklUUykpCisjZGVmaW5lIGJpdHNldF9jb250YWluKHNldCxpKSBcCisgIChzZXRbaSAvIEJJVFNFVF9XT1JEX0JJVFNdICYgKChiaXRzZXRfd29yZF90KSAxIDw8IGkgJSBCSVRTRVRfV09SRF9CSVRTKSkKKyNkZWZpbmUgYml0c2V0X2VtcHR5KHNldCkgbWVtc2V0IChzZXQsICdcMCcsIHNpemVvZiAoYml0c2V0X3QpKQorI2RlZmluZSBiaXRzZXRfc2V0X2FsbChzZXQpIG1lbXNldCAoc2V0LCAnXHhmZicsIHNpemVvZiAoYml0c2V0X3QpKQorI2RlZmluZSBiaXRzZXRfY29weShkZXN0LHNyYykgbWVtY3B5IChkZXN0LCBzcmMsIHNpemVvZiAoYml0c2V0X3QpKQorCisjZGVmaW5lIFBSRVZfV09SRF9DT05TVFJBSU5UIDB4MDAwMQorI2RlZmluZSBQUkVWX05PVFdPUkRfQ09OU1RSQUlOVCAweDAwMDIKKyNkZWZpbmUgTkVYVF9XT1JEX0NPTlNUUkFJTlQgMHgwMDA0CisjZGVmaW5lIE5FWFRfTk9UV09SRF9DT05TVFJBSU5UIDB4MDAwOAorI2RlZmluZSBQUkVWX05FV0xJTkVfQ09OU1RSQUlOVCAweDAwMTAKKyNkZWZpbmUgTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQgMHgwMDIwCisjZGVmaW5lIFBSRVZfQkVHQlVGX0NPTlNUUkFJTlQgMHgwMDQwCisjZGVmaW5lIE5FWFRfRU5EQlVGX0NPTlNUUkFJTlQgMHgwMDgwCisjZGVmaW5lIFdPUkRfREVMSU1fQ09OU1RSQUlOVCAweDAxMDAKKyNkZWZpbmUgTk9UX1dPUkRfREVMSU1fQ09OU1RSQUlOVCAweDAyMDAKKwordHlwZWRlZiBlbnVtCit7CisgIElOU0lERV9XT1JEID0gUFJFVl9XT1JEX0NPTlNUUkFJTlQgfCBORVhUX1dPUkRfQ09OU1RSQUlOVCwKKyAgV09SRF9GSVJTVCA9IFBSRVZfTk9UV09SRF9DT05TVFJBSU5UIHwgTkVYVF9XT1JEX0NPTlNUUkFJTlQsCisgIFdPUkRfTEFTVCA9IFBSRVZfV09SRF9DT05TVFJBSU5UIHwgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQsCisgIElOU0lERV9OT1RXT1JEID0gUFJFVl9OT1RXT1JEX0NPTlNUUkFJTlQgfCBORVhUX05PVFdPUkRfQ09OU1RSQUlOVCwKKyAgTElORV9GSVJTVCA9IFBSRVZfTkVXTElORV9DT05TVFJBSU5ULAorICBMSU5FX0xBU1QgPSBORVhUX05FV0xJTkVfQ09OU1RSQUlOVCwKKyAgQlVGX0ZJUlNUID0gUFJFVl9CRUdCVUZfQ09OU1RSQUlOVCwKKyAgQlVGX0xBU1QgPSBORVhUX0VOREJVRl9DT05TVFJBSU5ULAorICBXT1JEX0RFTElNID0gV09SRF9ERUxJTV9DT05TVFJBSU5ULAorICBOT1RfV09SRF9ERUxJTSA9IE5PVF9XT1JEX0RFTElNX0NPTlNUUkFJTlQKK30gcmVfY29udGV4dF90eXBlOworCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgYWxsb2M7CisgIGludCBuZWxlbTsKKyAgaW50ICplbGVtczsKK30gcmVfbm9kZV9zZXQ7CisKK3R5cGVkZWYgZW51bQoreworICBOT05fVFlQRSA9IDAsCisKKyAgLyogTm9kZSB0eXBlLCBUaGVzZSBhcmUgdXNlZCBieSB0b2tlbiwgbm9kZSwgdHJlZS4gICovCisgIENIQVJBQ1RFUiA9IDEsCisgIEVORF9PRl9SRSA9IDIsCisgIFNJTVBMRV9CUkFDS0VUID0gMywKKyAgT1BfQkFDS19SRUYgPSA0LAorICBPUF9QRVJJT0QgPSA1LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIENPTVBMRVhfQlJBQ0tFVCA9IDYsCisgIE9QX1VURjhfUEVSSU9EID0gNywKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgIC8qIFdlIGRlZmluZSBFUFNJTE9OX0JJVCBhcyBhIG1hY3JvIHNvIHRoYXQgT1BfT1BFTl9TVUJFWFAgaXMgdXNlZAorICAgICB3aGVuIHRoZSBkZWJ1Z2dlciBzaG93cyB2YWx1ZXMgb2YgdGhpcyBlbnVtIHR5cGUuICAqLworI2RlZmluZSBFUFNJTE9OX0JJVCA4CisgIE9QX09QRU5fU1VCRVhQID0gRVBTSUxPTl9CSVQgfCAwLAorICBPUF9DTE9TRV9TVUJFWFAgPSBFUFNJTE9OX0JJVCB8IDEsCisgIE9QX0FMVCA9IEVQU0lMT05fQklUIHwgMiwKKyAgT1BfRFVQX0FTVEVSSVNLID0gRVBTSUxPTl9CSVQgfCAzLAorICBBTkNIT1IgPSBFUFNJTE9OX0JJVCB8IDQsCisKKyAgLyogVHJlZSB0eXBlLCB0aGVzZSBhcmUgdXNlZCBvbmx5IGJ5IHRyZWUuICovCisgIENPTkNBVCA9IDE2LAorICBTVUJFWFAgPSAxNywKKworICAvKiBUb2tlbiB0eXBlLCB0aGVzZSBhcmUgdXNlZCBvbmx5IGJ5IHRva2VuLiAgKi8KKyAgT1BfRFVQX1BMVVMgPSAxOCwKKyAgT1BfRFVQX1FVRVNUSU9OLAorICBPUF9PUEVOX0JSQUNLRVQsCisgIE9QX0NMT1NFX0JSQUNLRVQsCisgIE9QX0NIQVJTRVRfUkFOR0UsCisgIE9QX09QRU5fRFVQX05VTSwKKyAgT1BfQ0xPU0VfRFVQX05VTSwKKyAgT1BfTk9OX01BVENIX0xJU1QsCisgIE9QX09QRU5fQ09MTF9FTEVNLAorICBPUF9DTE9TRV9DT0xMX0VMRU0sCisgIE9QX09QRU5fRVFVSVZfQ0xBU1MsCisgIE9QX0NMT1NFX0VRVUlWX0NMQVNTLAorICBPUF9PUEVOX0NIQVJfQ0xBU1MsCisgIE9QX0NMT1NFX0NIQVJfQ0xBU1MsCisgIE9QX1dPUkQsCisgIE9QX05PVFdPUkQsCisgIE9QX1NQQUNFLAorICBPUF9OT1RTUEFDRSwKKyAgQkFDS19TTEFTSAorCit9IHJlX3Rva2VuX3R5cGVfdDsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBNdWx0aWJ5dGUgY2hhcmFjdGVycy4gICovCisgIHdjaGFyX3QgKm1iY2hhcnM7CisKKyAgLyogQ29sbGF0aW5nIHN5bWJvbHMuICAqLworIyBpZmRlZiBfTElCQworICBpbnQzMl90ICpjb2xsX3N5bXM7CisjIGVuZGlmCisKKyAgLyogRXF1aXZhbGVuY2UgY2xhc3Nlcy4gKi8KKyMgaWZkZWYgX0xJQkMKKyAgaW50MzJfdCAqZXF1aXZfY2xhc3NlczsKKyMgZW5kaWYKKworICAvKiBSYW5nZSBleHByZXNzaW9ucy4gKi8KKyMgaWZkZWYgX0xJQkMKKyAgdWludDMyX3QgKnJhbmdlX3N0YXJ0czsKKyAgdWludDMyX3QgKnJhbmdlX2VuZHM7CisjIGVsc2UgLyogbm90IF9MSUJDICovCisgIHdjaGFyX3QgKnJhbmdlX3N0YXJ0czsKKyAgd2NoYXJfdCAqcmFuZ2VfZW5kczsKKyMgZW5kaWYgLyogbm90IF9MSUJDICovCisKKyAgLyogQ2hhcmFjdGVyIGNsYXNzZXMuICovCisgIHdjdHlwZV90ICpjaGFyX2NsYXNzZXM7CisKKyAgLyogSWYgdGhpcyBjaGFyYWN0ZXIgc2V0IGlzIHRoZSBub24tbWF0Y2hpbmcgbGlzdC4gICovCisgIHVuc2lnbmVkIGludCBub25fbWF0Y2ggOiAxOworCisgIC8qICMgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworICBpbnQgbm1iY2hhcnM7CisKKyAgLyogIyBvZiBjb2xsYXRpbmcgc3ltYm9scy4gICovCisgIGludCBuY29sbF9zeW1zOworCisgIC8qICMgb2YgZXF1aXZhbGVuY2UgY2xhc3Nlcy4gKi8KKyAgaW50IG5lcXVpdl9jbGFzc2VzOworCisgIC8qICMgb2YgcmFuZ2UgZXhwcmVzc2lvbnMuICovCisgIGludCBucmFuZ2VzOworCisgIC8qICMgb2YgY2hhcmFjdGVyIGNsYXNzZXMuICovCisgIGludCBuY2hhcl9jbGFzc2VzOworfSByZV9jaGFyc2V0X3Q7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdW5pb24KKyAgeworICAgIHVuc2lnbmVkIGNoYXIgYzsJCS8qIGZvciBDSEFSQUNURVIgKi8KKyAgICByZV9iaXRzZXRfcHRyX3Qgc2Jjc2V0OwkvKiBmb3IgU0lNUExFX0JSQUNLRVQgKi8KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgIHJlX2NoYXJzZXRfdCAqbWJjc2V0OwkvKiBmb3IgQ09NUExFWF9CUkFDS0VUICovCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICBpbnQgaWR4OwkJCS8qIGZvciBCQUNLX1JFRiAqLworICAgIHJlX2NvbnRleHRfdHlwZSBjdHhfdHlwZTsJLyogZm9yIEFOQ0hPUiAqLworICB9IG9wcjsKKyNpZiBfX0dOVUNfXyA+PSAyCisgIHJlX3Rva2VuX3R5cGVfdCB0eXBlIDogODsKKyNlbHNlCisgIHJlX3Rva2VuX3R5cGVfdCB0eXBlOworI2VuZGlmCisgIHVuc2lnbmVkIGludCBjb25zdHJhaW50IDogMTA7CS8qIGNvbnRleHQgY29uc3RyYWludCAqLworICB1bnNpZ25lZCBpbnQgZHVwbGljYXRlZCA6IDE7CisgIHVuc2lnbmVkIGludCBvcHRfc3ViZXhwIDogMTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICB1bnNpZ25lZCBpbnQgYWNjZXB0X21iIDogMTsKKyAgLyogVGhlc2UgMiBiaXRzIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSB1bmlvbiBpZiBuZWVkZWQgKGUuZy4gaWYgcnVubmluZyBvdXQKKyAgICAgb2YgYml0czsgbW92ZSBvcHIuYyB0byBvcHIuYy5jIGFuZCBtb3ZlIHRoZSBmbGFncyB0byBvcHIuYy5mbGFncykuICAqLworICB1bnNpZ25lZCBpbnQgbWJfcGFydGlhbCA6IDE7CisjZW5kaWYKKyAgdW5zaWduZWQgaW50IHdvcmRfY2hhciA6IDE7Cit9IHJlX3Rva2VuX3Q7CisKKyNkZWZpbmUgSVNfRVBTSUxPTl9OT0RFKHR5cGUpICgodHlwZSkgJiBFUFNJTE9OX0JJVCkKKworc3RydWN0IHJlX3N0cmluZ190Cit7CisgIC8qIEluZGljYXRlIHRoZSByYXcgYnVmZmVyIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBzdHJpbmcgcGFzc2VkIGFzIGFuCisgICAgIGFyZ3VtZW50IG9mIHJlZ2V4ZWMoKSwgcmVfc2VhcmNoKCksIGV0Yy4uICAqLworICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYXdfbWJzOworICAvKiBTdG9yZSB0aGUgbXVsdGlieXRlIHN0cmluZy4gIEluIGNhc2Ugb2YgImNhc2UgaW5zZW5zaXRpdmUgbW9kZSIgbGlrZQorICAgICBSRUdfSUNBU0UsIHVwcGVyIGNhc2VzIG9mIHRoZSBzdHJpbmcgYXJlIHN0b3JlZCwgb3RoZXJ3aXNlIE1CUyBwb2ludHMKKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGF0IFJBV19NQlMgcG9pbnRzLiAgKi8KKyAgdW5zaWduZWQgY2hhciAqbWJzOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIFN0b3JlIHRoZSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgd2hpY2ggaXMgY29ycmVzcG9uZGluZyB0byBNQlMuICAqLworICB3aW50X3QgKndjczsKKyAgaW50ICpvZmZzZXRzOworICBtYnN0YXRlX3QgY3VyX3N0YXRlOworI2VuZGlmCisgIC8qIEluZGV4IGluIFJBV19NQlMuICBFYWNoIGNoYXJhY3RlciBtYnNbaV0gY29ycmVzcG9uZHMgdG8KKyAgICAgcmF3X21ic1tyYXdfbWJzX2lkeCArIGldLiAgKi8KKyAgaW50IHJhd19tYnNfaWR4OworICAvKiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWxpZCBjaGFyYWN0ZXJzIGluIHRoZSBidWZmZXJzLiAgKi8KKyAgaW50IHZhbGlkX2xlbjsKKyAgLyogVGhlIGNvcnJlc3BvbmRpbmcgbnVtYmVyIG9mIGJ5dGVzIGluIHJhd19tYnMgYXJyYXkuICAqLworICBpbnQgdmFsaWRfcmF3X2xlbjsKKyAgLyogVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVycyBNQlMgYW5kIFdDUy4gICovCisgIGludCBidWZzX2xlbjsKKyAgLyogVGhlIGluZGV4IGluIE1CUywgd2hpY2ggaXMgdXBkYXRlZCBieSByZV9zdHJpbmdfZmV0Y2hfYnl0ZS4gICovCisgIGludCBjdXJfaWR4OworICAvKiBsZW5ndGggb2YgUkFXX01CUyBhcnJheS4gICovCisgIGludCByYXdfbGVuOworICAvKiBUaGlzIGlzIFJBV19MRU4gLSBSQVdfTUJTX0lEWCArIFZBTElEX0xFTiAtIFZBTElEX1JBV19MRU4uICAqLworICBpbnQgbGVuOworICAvKiBFbmQgb2YgdGhlIGJ1ZmZlciBtYXkgYmUgc2hvcnRlciB0aGFuIGl0cyBsZW5ndGggaW4gdGhlIGNhc2VzIHN1Y2gKKyAgICAgYXMgcmVfbWF0Y2hfMiwgcmVfc2VhcmNoXzIuICBUaGVuLCB3ZSB1c2UgU1RPUCBmb3IgZW5kIG9mIHRoZSBidWZmZXIKKyAgICAgaW5zdGVhZCBvZiBMRU4uICAqLworICBpbnQgcmF3X3N0b3A7CisgIC8qIFRoaXMgaXMgUkFXX1NUT1AgLSBSQVdfTUJTX0lEWCBhZGp1c3RlZCB0aHJvdWdoIE9GRlNFVFMuICAqLworICBpbnQgc3RvcDsKKworICAvKiBUaGUgY29udGV4dCBvZiBtYnNbMF0uICBXZSBzdG9yZSB0aGUgY29udGV4dCBpbmRlcGVuZGVudGx5LCBzaW5jZQorICAgICB0aGUgY29udGV4dCBvZiBtYnNbMF0gbWF5IGJlIGRpZmZlcmVudCBmcm9tIHJhd19tYnNbMF0sIHdoaWNoIGlzCisgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0IHN0cmluZy4gICovCisgIHVuc2lnbmVkIGludCB0aXBfY29udGV4dDsKKyAgLyogVGhlIHRyYW5zbGF0aW9uIHBhc3NlZCBhcyBhIHBhcnQgb2YgYW4gYXJndW1lbnQgb2YgcmVfY29tcGlsZV9wYXR0ZXJuLiAgKi8KKyAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnM7CisgIC8qIENvcHkgb2YgcmVfZGZhX3QncyB3b3JkX2NoYXIuICAqLworICByZV9jb25zdF9iaXRzZXRfcHRyX3Qgd29yZF9jaGFyOworICAvKiAxIGlmIFJFR19JQ0FTRS4gICovCisgIHVuc2lnbmVkIGNoYXIgaWNhc2U7CisgIHVuc2lnbmVkIGNoYXIgaXNfdXRmODsKKyAgdW5zaWduZWQgY2hhciBtYXBfbm90YXNjaWk7CisgIHVuc2lnbmVkIGNoYXIgbWJzX2FsbG9jYXRlZDsKKyAgdW5zaWduZWQgY2hhciBvZmZzZXRzX25lZWRlZDsKKyAgdW5zaWduZWQgY2hhciBuZXdsaW5lX2FuY2hvcjsKKyAgdW5zaWduZWQgY2hhciB3b3JkX29wc191c2VkOworICBpbnQgbWJfY3VyX21heDsKK307Cit0eXBlZGVmIHN0cnVjdCByZV9zdHJpbmdfdCByZV9zdHJpbmdfdDsKKworCitzdHJ1Y3QgcmVfZGZhX3Q7Cit0eXBlZGVmIHN0cnVjdCByZV9kZmFfdCByZV9kZmFfdDsKKworI2lmbmRlZiBfTElCQworIyBpZmRlZiBfX2kzODZfXworIyAgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uICAgX19hdHRyaWJ1dGUgKChyZWdwYXJtICgzKSwgc3RkY2FsbCkpCisjIGVsc2UKKyMgIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTk9UX0lOX2xpYmMKK3N0YXRpYyByZWdfZXJyY29kZV90IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHJlX3N0cmluZ190ICpwc3RyLAorCQkJCQkJaW50IG5ld19idWZfbGVuKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyMgaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyB2b2lkIGJ1aWxkX3djc19idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorICBpbnRlcm5hbF9mdW5jdGlvbjsKKyMgZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyB2b2lkIGJ1aWxkX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVfc3RyaW5nX2NvbnRleHRfYXQgKGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgaW50IGlkeCwKKwkJCQkJICBpbnQgZWZsYWdzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKTsKKyNlbmRpZgorI2RlZmluZSByZV9zdHJpbmdfcGVla19ieXRlKHBzdHIsIG9mZnNldCkgXAorICAoKHBzdHIpLT5tYnNbKHBzdHIpLT5jdXJfaWR4ICsgb2Zmc2V0XSkKKyNkZWZpbmUgcmVfc3RyaW5nX2ZldGNoX2J5dGUocHN0cikgXAorICAoKHBzdHIpLT5tYnNbKHBzdHIpLT5jdXJfaWR4KytdKQorI2RlZmluZSByZV9zdHJpbmdfZmlyc3RfYnl0ZShwc3RyLCBpZHgpIFwKKyAgKChpZHgpID09IChwc3RyKS0+dmFsaWRfbGVuIHx8IChwc3RyKS0+d2NzW2lkeF0gIT0gV0VPRikKKyNkZWZpbmUgcmVfc3RyaW5nX2lzX3NpbmdsZV9ieXRlX2NoYXIocHN0ciwgaWR4KSBcCisgICgocHN0ciktPndjc1tpZHhdICE9IFdFT0YgJiYgKChwc3RyKS0+dmFsaWRfbGVuID09IChpZHgpICsgMSBcCisJCQkJfHwgKHBzdHIpLT53Y3NbKGlkeCkgKyAxXSAhPSBXRU9GKSkKKyNkZWZpbmUgcmVfc3RyaW5nX2VvaShwc3RyKSAoKHBzdHIpLT5zdG9wIDw9IChwc3RyKS0+Y3VyX2lkeCkKKyNkZWZpbmUgcmVfc3RyaW5nX2N1cl9pZHgocHN0cikgKChwc3RyKS0+Y3VyX2lkeCkKKyNkZWZpbmUgcmVfc3RyaW5nX2dldF9idWZmZXIocHN0cikgKChwc3RyKS0+bWJzKQorI2RlZmluZSByZV9zdHJpbmdfbGVuZ3RoKHBzdHIpICgocHN0ciktPmxlbikKKyNkZWZpbmUgcmVfc3RyaW5nX2J5dGVfYXQocHN0cixpZHgpICgocHN0ciktPm1ic1tpZHhdKQorI2RlZmluZSByZV9zdHJpbmdfc2tpcF9ieXRlcyhwc3RyLGlkeCkgKChwc3RyKS0+Y3VyX2lkeCArPSAoaWR4KSkKKyNkZWZpbmUgcmVfc3RyaW5nX3NldF9pbmRleChwc3RyLGlkeCkgKChwc3RyKS0+Y3VyX2lkeCA9IChpZHgpKQorCisjaWZuZGVmIF9MSUJDCisjIGlmIEhBVkVfQUxMT0NBCisjICBpZiAoX01TQ19WRVIpCisjICAgaW5jbHVkZSA8bWFsbG9jLmg+CisjICAgZGVmaW5lIF9fbGliY191c2VfYWxsb2NhKG4pIDAKKyMgIGVsc2UKKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKy8qIFRoZSBPUyB1c3VhbGx5IGd1YXJhbnRlZXMgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKKyAgIGFsbG9jYXRlIGFueXRoaW5nIGxhcmdlciB0aGFuIDQwOTYgYnl0ZXMuICBBbHNvIGNhcmUgZm9yIHRoZSBwb3NzaWJpbGl0eQorICAgb2YgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCisjICBkZWZpbmUgX19saWJjX3VzZV9hbGxvY2EobikgKChuKSA8IDQwMzIpCisjICBlbmRpZgorIyBlbHNlCisvKiBhbGxvY2EgaXMgaW1wbGVtZW50ZWQgd2l0aCBtYWxsb2MsIHNvIGp1c3QgdXNlIG1hbGxvYy4gICovCisjICBkZWZpbmUgX19saWJjX3VzZV9hbGxvY2EobikgMAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgcmVfbWFsbG9jKHQsbikgKCh0ICopIG1hbGxvYyAoKG4pICogc2l6ZW9mICh0KSkpCisvKiBTdW5PUyA0LjEueCByZWFsbG9jIGRvZXNuJ3QgYWNjZXB0IG51bGwgcG9pbnRlcnM6IHByZS1TdGFuZGFyZCBDLiBTaWdoLiAqLworI2RlZmluZSByZV9yZWFsbG9jKHAsdCxuKSAoKHAgIT0gTlVMTCkgPyAodCAqKSByZWFsbG9jIChwLChuKSpzaXplb2YodCkpIDogKHQgKikgY2FsbG9jKG4sc2l6ZW9mKHQpKSkKKyNkZWZpbmUgcmVfZnJlZShwKSBmcmVlIChwKQorCitzdHJ1Y3QgYmluX3RyZWVfdAoreworICBzdHJ1Y3QgYmluX3RyZWVfdCAqcGFyZW50OworICBzdHJ1Y3QgYmluX3RyZWVfdCAqbGVmdDsKKyAgc3RydWN0IGJpbl90cmVlX3QgKnJpZ2h0OworICBzdHJ1Y3QgYmluX3RyZWVfdCAqZmlyc3Q7CisgIHN0cnVjdCBiaW5fdHJlZV90ICpuZXh0OworCisgIHJlX3Rva2VuX3QgdG9rZW47CisKKyAgLyogYG5vZGVfaWR4JyBpcyB0aGUgaW5kZXggaW4gZGZhLT5ub2RlcywgaWYgYHR5cGUnID09IDAuCisgICAgIE90aGVyd2lzZSBgdHlwZScgaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhpcyBub2RlLiAgKi8KKyAgaW50IG5vZGVfaWR4OworfTsKK3R5cGVkZWYgc3RydWN0IGJpbl90cmVlX3QgYmluX3RyZWVfdDsKKworI2RlZmluZSBCSU5fVFJFRV9TVE9SQUdFX1NJWkUgXAorICAoKDEwMjQgLSBzaXplb2YgKHZvaWQgKikpIC8gc2l6ZW9mIChiaW5fdHJlZV90KSkKKworc3RydWN0IGJpbl90cmVlX3N0b3JhZ2VfdAoreworICBzdHJ1Y3QgYmluX3RyZWVfc3RvcmFnZV90ICpuZXh0OworICBiaW5fdHJlZV90IGRhdGFbQklOX1RSRUVfU1RPUkFHRV9TSVpFXTsKK307Cit0eXBlZGVmIHN0cnVjdCBiaW5fdHJlZV9zdG9yYWdlX3QgYmluX3RyZWVfc3RvcmFnZV90OworCisjZGVmaW5lIENPTlRFWFRfV09SRCAxCisjZGVmaW5lIENPTlRFWFRfTkVXTElORSAoQ09OVEVYVF9XT1JEIDw8IDEpCisjZGVmaW5lIENPTlRFWFRfQkVHQlVGIChDT05URVhUX05FV0xJTkUgPDwgMSkKKyNkZWZpbmUgQ09OVEVYVF9FTkRCVUYgKENPTlRFWFRfQkVHQlVGIDw8IDEpCisKKyNkZWZpbmUgSVNfV09SRF9DT05URVhUKGMpICgoYykgJiBDT05URVhUX1dPUkQpCisjZGVmaW5lIElTX05FV0xJTkVfQ09OVEVYVChjKSAoKGMpICYgQ09OVEVYVF9ORVdMSU5FKQorI2RlZmluZSBJU19CRUdCVUZfQ09OVEVYVChjKSAoKGMpICYgQ09OVEVYVF9CRUdCVUYpCisjZGVmaW5lIElTX0VOREJVRl9DT05URVhUKGMpICgoYykgJiBDT05URVhUX0VOREJVRikKKyNkZWZpbmUgSVNfT1JESU5BUllfQ09OVEVYVChjKSAoKGMpID09IDApCisKKyNkZWZpbmUgSVNfV09SRF9DSEFSKGNoKSAoaXNhbG51bSAoY2gpIHx8IChjaCkgPT0gJ18nKQorI2RlZmluZSBJU19ORVdMSU5FKGNoKSAoKGNoKSA9PSBORVdMSU5FX0NIQVIpCisjZGVmaW5lIElTX1dJREVfV09SRF9DSEFSKGNoKSAoaXN3YWxudW0gKGNoKSB8fCAoY2gpID09IEwnXycpCisjZGVmaW5lIElTX1dJREVfTkVXTElORShjaCkgKChjaCkgPT0gV0lERV9ORVdMSU5FX0NIQVIpCisKKyNkZWZpbmUgTk9UX1NBVElTRllfUFJFVl9DT05TVFJBSU5UKGNvbnN0cmFpbnQsY29udGV4dCkgXAorICgoKChjb25zdHJhaW50KSAmIFBSRVZfV09SRF9DT05TVFJBSU5UKSAmJiAhSVNfV09SRF9DT05URVhUIChjb250ZXh0KSkgXAorICB8fCAoKGNvbnN0cmFpbnQgJiBQUkVWX05PVFdPUkRfQ09OU1RSQUlOVCkgJiYgSVNfV09SRF9DT05URVhUIChjb250ZXh0KSkgXAorICB8fCAoKGNvbnN0cmFpbnQgJiBQUkVWX05FV0xJTkVfQ09OU1RSQUlOVCkgJiYgIUlTX05FV0xJTkVfQ09OVEVYVCAoY29udGV4dCkpXAorICB8fCAoKGNvbnN0cmFpbnQgJiBQUkVWX0JFR0JVRl9DT05TVFJBSU5UKSAmJiAhSVNfQkVHQlVGX0NPTlRFWFQgKGNvbnRleHQpKSkKKworI2RlZmluZSBOT1RfU0FUSVNGWV9ORVhUX0NPTlNUUkFJTlQoY29uc3RyYWludCxjb250ZXh0KSBcCisgKCgoKGNvbnN0cmFpbnQpICYgTkVYVF9XT1JEX0NPTlNUUkFJTlQpICYmICFJU19XT1JEX0NPTlRFWFQgKGNvbnRleHQpKSBcCisgIHx8ICgoKGNvbnN0cmFpbnQpICYgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQpICYmIElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKCgoY29uc3RyYWludCkgJiBORVhUX05FV0xJTkVfQ09OU1RSQUlOVCkgJiYgIUlTX05FV0xJTkVfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKCgoY29uc3RyYWludCkgJiBORVhUX0VOREJVRl9DT05TVFJBSU5UKSAmJiAhSVNfRU5EQlVGX0NPTlRFWFQgKGNvbnRleHQpKSkKKworc3RydWN0IHJlX2RmYXN0YXRlX3QKK3sKKyAgdW5zaWduZWQgaW50IGhhc2g7CisgIHJlX25vZGVfc2V0IG5vZGVzOworICByZV9ub2RlX3NldCBub25fZXBzX25vZGVzOworICByZV9ub2RlX3NldCBpbnZlY2xvc3VyZTsKKyAgcmVfbm9kZV9zZXQgKmVudHJhbmNlX25vZGVzOworICBzdHJ1Y3QgcmVfZGZhc3RhdGVfdCAqKnRydGFibGUsICoqd29yZF90cnRhYmxlOworICB1bnNpZ25lZCBpbnQgY29udGV4dCA6IDQ7CisgIHVuc2lnbmVkIGludCBoYWx0IDogMTsKKyAgLyogSWYgdGhpcyBzdGF0ZSBjYW4gYWNjZXB0IGBtdWx0aSBieXRlJy4KKyAgICAgTm90ZSB0aGF0IHdlIHJlZmVyIHRvIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLCBhbmQgbXVsdGkgY2hhcmFjdGVyCisgICAgIGNvbGxhdGluZyBlbGVtZW50cyBhcyBgbXVsdGkgYnl0ZScuICAqLworICB1bnNpZ25lZCBpbnQgYWNjZXB0X21iIDogMTsKKyAgLyogSWYgdGhpcyBzdGF0ZSBoYXMgYmFja3JlZmVyZW5jZSBub2RlKHMpLiAgKi8KKyAgdW5zaWduZWQgaW50IGhhc19iYWNrcmVmIDogMTsKKyAgdW5zaWduZWQgaW50IGhhc19jb25zdHJhaW50IDogMTsKK307Cit0eXBlZGVmIHN0cnVjdCByZV9kZmFzdGF0ZV90IHJlX2RmYXN0YXRlX3Q7CisKK3N0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeQoreworICBpbnQgbnVtOworICBpbnQgYWxsb2M7CisgIHJlX2RmYXN0YXRlX3QgKiphcnJheTsKK307CisKKy8qIEFycmF5IHR5cGUgdXNlZCBpbiByZV9zdWJfbWF0Y2hfbGFzdF90IGFuZCByZV9zdWJfbWF0Y2hfdG9wX3QuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgbmV4dF9pZHg7CisgIGludCBhbGxvYzsKKyAgcmVfZGZhc3RhdGVfdCAqKmFycmF5OworfSBzdGF0ZV9hcnJheV90OworCisvKiBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSBOT0RFIHdob3NlIHR5cGUgaXMgT1BfQ0xPU0VfU1VCRVhQLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IG5vZGU7CisgIGludCBzdHJfaWR4OyAvKiBUaGUgcG9zaXRpb24gTk9ERSBtYXRjaCBhdC4gICovCisgIHN0YXRlX2FycmF5X3QgcGF0aDsKK30gcmVfc3ViX21hdGNoX2xhc3RfdDsKKworLyogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGUgTk9ERSB3aG9zZSB0eXBlIGlzIE9QX09QRU5fU1VCRVhQLgorICAgQW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBub2RlLCB3aG9zZSB0eXBlIGlzIE9QX0NMT1NFX1NVQkVYUCwKKyAgIGNvcnJlc3BvbmRpbmcgdG8gTk9ERSBpcyBzdG9yZWQgaW4gTEFTVFMuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgc3RyX2lkeDsKKyAgaW50IG5vZGU7CisgIHN0YXRlX2FycmF5X3QgKnBhdGg7CisgIGludCBhbGFzdHM7IC8qIEFsbG9jYXRpb24gc2l6ZSBvZiBMQVNUUy4gICovCisgIGludCBubGFzdHM7IC8qIFRoZSBudW1iZXIgb2YgTEFTVFMuICAqLworICByZV9zdWJfbWF0Y2hfbGFzdF90ICoqbGFzdHM7Cit9IHJlX3N1Yl9tYXRjaF90b3BfdDsKKworc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkKK3sKKyAgaW50IG5vZGU7CisgIGludCBzdHJfaWR4OworICBpbnQgc3ViZXhwX2Zyb207CisgIGludCBzdWJleHBfdG87CisgIGNoYXIgbW9yZTsKKyAgY2hhciB1bnVzZWQ7CisgIHVuc2lnbmVkIHNob3J0IGludCBlcHNfcmVhY2hhYmxlX3N1YmV4cHNfbWFwOworfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyogVGhlIHN0cmluZyBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgaW5wdXQgc3RyaW5nLiAgKi8KKyAgcmVfc3RyaW5nX3QgaW5wdXQ7CisjaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYTsKKyNlbHNlCisgIGNvbnN0IHJlX2RmYV90ICpkZmE7CisjZW5kaWYKKyAgLyogRUZMQUdTIG9mIHRoZSBhcmd1bWVudCBvZiByZWdleGVjLiAgKi8KKyAgaW50IGVmbGFnczsKKyAgLyogV2hlcmUgdGhlIG1hdGNoaW5nIGVuZHMuICAqLworICBpbnQgbWF0Y2hfbGFzdDsKKyAgaW50IGxhc3Rfbm9kZTsKKyAgLyogVGhlIHN0YXRlIGxvZyB1c2VkIGJ5IHRoZSBtYXRjaGVyLiAgKi8KKyAgcmVfZGZhc3RhdGVfdCAqKnN0YXRlX2xvZzsKKyAgaW50IHN0YXRlX2xvZ190b3A7CisgIC8qIEJhY2sgcmVmZXJlbmNlIGNhY2hlLiAgKi8KKyAgaW50IG5ia3JlZl9lbnRzOworICBpbnQgYWJrcmVmX2VudHM7CisgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpia3JlZl9lbnRzOworICBpbnQgbWF4X21iX2VsZW1fbGVuOworICBpbnQgbnN1Yl90b3BzOworICBpbnQgYXN1Yl90b3BzOworICByZV9zdWJfbWF0Y2hfdG9wX3QgKipzdWJfdG9wczsKK30gcmVfbWF0Y2hfY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdAoreworICByZV9kZmFzdGF0ZV90ICoqc2lmdGVkX3N0YXRlczsKKyAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3RhdGVzOworICBpbnQgbGFzdF9ub2RlOworICBpbnQgbGFzdF9zdHJfaWR4OworICByZV9ub2RlX3NldCBsaW1pdHM7Cit9IHJlX3NpZnRfY29udGV4dF90OworCitzdHJ1Y3QgcmVfZmFpbF9zdGFja19lbnRfdAoreworICBpbnQgaWR4OworICBpbnQgbm9kZTsKKyAgcmVnbWF0Y2hfdCAqcmVnczsKKyAgcmVfbm9kZV9zZXQgZXBzX3ZpYV9ub2RlczsKK307CisKK3N0cnVjdCByZV9mYWlsX3N0YWNrX3QKK3sKKyAgaW50IG51bTsKKyAgaW50IGFsbG9jOworICBzdHJ1Y3QgcmVfZmFpbF9zdGFja19lbnRfdCAqc3RhY2s7Cit9OworCitzdHJ1Y3QgcmVfZGZhX3QKK3sKKyAgcmVfdG9rZW5fdCAqbm9kZXM7CisgIHNpemVfdCBub2Rlc19hbGxvYzsKKyAgc2l6ZV90IG5vZGVzX2xlbjsKKyAgaW50ICpuZXh0czsKKyAgaW50ICpvcmdfaW5kaWNlczsKKyAgcmVfbm9kZV9zZXQgKmVkZXN0czsKKyAgcmVfbm9kZV9zZXQgKmVjbG9zdXJlczsKKyAgcmVfbm9kZV9zZXQgKmludmVjbG9zdXJlczsKKyAgc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5ICpzdGF0ZV90YWJsZTsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZTsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZV93b3JkOworICByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlX25sOworICByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlX2JlZ2J1ZjsKKyAgYmluX3RyZWVfdCAqc3RyX3RyZWU7CisgIGJpbl90cmVlX3N0b3JhZ2VfdCAqc3RyX3RyZWVfc3RvcmFnZTsKKyAgcmVfYml0c2V0X3B0cl90IHNiX2NoYXI7CisgIGludCBzdHJfdHJlZV9zdG9yYWdlX2lkeDsKKworICAvKiBudW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgYHJlX25zdWInIGlzIGluIHJlZ2V4X3QuICAqLworICB1bnNpZ25lZCBpbnQgc3RhdGVfaGFzaF9tYXNrOworICBpbnQgaW5pdF9ub2RlOworICBpbnQgbmJhY2tyZWY7IC8qIFRoZSBudW1iZXIgb2YgYmFja3JlZmVyZW5jZSBpbiB0aGlzIGRmYS4gICovCisKKyAgLyogQml0bWFwIGV4cHJlc3Npbmcgd2hpY2ggYmFja3JlZmVyZW5jZSBpcyB1c2VkLiAgKi8KKyAgYml0c2V0X3dvcmRfdCB1c2VkX2JrcmVmX21hcDsKKyAgYml0c2V0X3dvcmRfdCBjb21wbGV0ZWRfYmtyZWZfbWFwOworCisgIHVuc2lnbmVkIGludCBoYXNfcGx1cmFsX21hdGNoIDogMTsKKyAgLyogSWYgdGhpcyBkZmEgaGFzICJtdWx0aWJ5dGUgbm9kZSIsIHdoaWNoIGlzIGEgYmFja3JlZmVyZW5jZSBvcgorICAgICBhIG5vZGUgd2hpY2ggY2FuIGFjY2VwdCBtdWx0aWJ5dGUgY2hhcmFjdGVyIG9yIG11bHRpIGNoYXJhY3RlcgorICAgICBjb2xsYXRpbmcgZWxlbWVudC4gICovCisgIHVuc2lnbmVkIGludCBoYXNfbWJfbm9kZSA6IDE7CisgIHVuc2lnbmVkIGludCBpc191dGY4IDogMTsKKyAgdW5zaWduZWQgaW50IG1hcF9ub3Rhc2NpaSA6IDE7CisgIHVuc2lnbmVkIGludCB3b3JkX29wc191c2VkIDogMTsKKyAgaW50IG1iX2N1cl9tYXg7CisgIGJpdHNldF90IHdvcmRfY2hhcjsKKyAgcmVnX3N5bnRheF90IHN5bnRheDsKKyAgaW50ICpzdWJleHBfbWFwOworI2lmZGVmIERFQlVHCisgIGNoYXIqIHJlX3N0cjsKKyNlbmRpZgorI2lmIGRlZmluZWQgX0xJQkMKKyAgX19saWJjX2xvY2tfZGVmaW5lICgsIGxvY2spCisjZW5kaWYKK307CisKKyNkZWZpbmUgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eShzZXQpIG1lbXNldCAoc2V0LCAnXDAnLCBzaXplb2YgKHJlX25vZGVfc2V0KSkKKyNkZWZpbmUgcmVfbm9kZV9zZXRfcmVtb3ZlKHNldCxpZCkgXAorICAocmVfbm9kZV9zZXRfcmVtb3ZlX2F0IChzZXQsIHJlX25vZGVfc2V0X2NvbnRhaW5zIChzZXQsIGlkKSAtIDEpKQorI2RlZmluZSByZV9ub2RlX3NldF9lbXB0eShwKSAoKHApLT5uZWxlbSA9IDApCisjZGVmaW5lIHJlX25vZGVfc2V0X2ZyZWUoc2V0KSByZV9mcmVlICgoc2V0KS0+ZWxlbXMpCisMCisKK3R5cGVkZWYgZW51bQoreworICBTQl9DSEFSLAorICBNQl9DSEFSLAorICBFUVVJVl9DTEFTUywKKyAgQ09MTF9TWU0sCisgIENIQVJfQ0xBU1MKK30gYnJhY2tldF9lbGVtX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGJyYWNrZXRfZWxlbV90eXBlIHR5cGU7CisgIHVuaW9uCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNoOworICAgIHVuc2lnbmVkIGNoYXIgKm5hbWU7CisgICAgd2NoYXJfdCB3Y2g7CisgIH0gb3ByOworfSBicmFja2V0X2VsZW1fdDsKKworCisvKiBJbmxpbmUgZnVuY3Rpb25zIGZvciBiaXRzZXQgb3BlcmF0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0c2V0X25vdCAoYml0c2V0X3Qgc2V0KQoreworICBpbnQgYml0c2V0X2k7CisgIGZvciAoYml0c2V0X2kgPSAwOyBiaXRzZXRfaSA8IEJJVFNFVF9XT1JEUzsgKytiaXRzZXRfaSkKKyAgICBzZXRbYml0c2V0X2ldID0gfnNldFtiaXRzZXRfaV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0c2V0X21lcmdlIChiaXRzZXRfdCBkZXN0LCBjb25zdCBiaXRzZXRfdCBzcmMpCit7CisgIGludCBiaXRzZXRfaTsKKyAgZm9yIChiaXRzZXRfaSA9IDA7IGJpdHNldF9pIDwgQklUU0VUX1dPUkRTOyArK2JpdHNldF9pKQorICAgIGRlc3RbYml0c2V0X2ldIHw9IHNyY1tiaXRzZXRfaV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0c2V0X21hc2sgKGJpdHNldF90IGRlc3QsIGNvbnN0IGJpdHNldF90IHNyYykKK3sKKyAgaW50IGJpdHNldF9pOworICBmb3IgKGJpdHNldF9pID0gMDsgYml0c2V0X2kgPCBCSVRTRVRfV09SRFM7ICsrYml0c2V0X2kpCisgICAgZGVzdFtiaXRzZXRfaV0gJj0gc3JjW2JpdHNldF9pXTsKK30KKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBJbmxpbmUgZnVuY3Rpb25zIGZvciByZV9zdHJpbmcuICAqLworc3RhdGljIGlubGluZSBpbnQKK2ludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlICgocHVyZSkpCityZV9zdHJpbmdfY2hhcl9zaXplX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKK3sKKyAgaW50IGJ5dGVfaWR4OworICBpZiAocHN0ci0+bWJfY3VyX21heCA9PSAxKQorICAgIHJldHVybiAxOworICBmb3IgKGJ5dGVfaWR4ID0gMTsgaWR4ICsgYnl0ZV9pZHggPCBwc3RyLT52YWxpZF9sZW47ICsrYnl0ZV9pZHgpCisgICAgaWYgKHBzdHItPndjc1tpZHggKyBieXRlX2lkeF0gIT0gV0VPRikKKyAgICAgIGJyZWFrOworICByZXR1cm4gYnl0ZV9pZHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgd2ludF90CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX3djaGFyX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKK3sKKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPT0gMSkKKyAgICByZXR1cm4gKHdpbnRfdCkgcHN0ci0+bWJzW2lkeF07CisgIHJldHVybiAod2ludF90KSBwc3RyLT53Y3NbaWR4XTsKK30KKworIyBpZm5kZWYgTk9UX0lOX2xpYmMKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlICgocHVyZSkpCityZV9zdHJpbmdfZWxlbV9zaXplX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKK3sKKyMgIGlmZGVmIF9MSUJDCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsICpleHRyYTsKKyAgY29uc3QgaW50MzJfdCAqdGFibGUsICppbmRpcmVjdDsKKyAgaW50MzJfdCB0bXA7CisjICAgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorICB1aW50X2Zhc3QzMl90IG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisKKyAgaWYgKG5ydWxlcyAhPSAwKQorICAgIHsKKyAgICAgIHRhYmxlID0gKGNvbnN0IGludDMyX3QgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1RBQkxFTUIpOworICAgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9FWFRSQU1CKTsKKyAgICAgIGluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCQlfTkxfQ09MTEFURV9JTkRJUkVDVE1CKTsKKyAgICAgIHAgPSBwc3RyLT5tYnMgKyBpZHg7CisgICAgICB0bXAgPSBmaW5kaWR4ICgmcCk7CisgICAgICByZXR1cm4gcCAtIHBzdHItPm1icyAtIGlkeDsKKyAgICB9CisgIGVsc2UKKyMgIGVuZGlmIC8qIF9MSUJDICovCisgICAgcmV0dXJuIDE7Cit9CisjIGVuZGlmCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworI2VuZGlmIC8qICBfUkVHRVhfSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4ZWMuYyBiL2NvbXBhdC9yZWdleC9yZWdleGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5NDk2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9yZWdleC9yZWdleGVjLmMKQEAgLTAsMCArMSw0MzY5IEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUsIDIwMDcsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgICAwMjExMC0xMzAxIFVTQS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90IG1hdGNoX2N0eF9pbml0IChyZV9tYXRjaF9jb250ZXh0X3QgKmNhY2hlLCBpbnQgZWZsYWdzLAorCQkJCSAgICAgaW50IG4pIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgbWF0Y2hfY3R4X2NsZWFuIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgbWF0Y2hfY3R4X2ZyZWUgKHJlX21hdGNoX2NvbnRleHRfdCAqY2FjaGUpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgbWF0Y2hfY3R4X2FkZF9lbnRyeSAocmVfbWF0Y2hfY29udGV4dF90ICpjYWNoZSwgaW50IG5vZGUsCisJCQkJCSAgaW50IHN0cl9pZHgsIGludCBmcm9tLCBpbnQgdG8pCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBzdHJfaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IG1hdGNoX2N0eF9hZGRfc3VidG9wIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBub2RlLAorCQkJCQkgICBpbnQgc3RyX2lkeCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVfc3ViX21hdGNoX2xhc3RfdCAqIG1hdGNoX2N0eF9hZGRfc3VibGFzdCAocmVfc3ViX21hdGNoX3RvcF90ICpzdWJ0b3AsCisJCQkJCQkgICBpbnQgbm9kZSwgaW50IHN0cl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgc2lmdF9jdHhfaW5pdCAocmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsIHJlX2RmYXN0YXRlX3QgKipzaWZ0ZWRfc3RzLAorCQkJICAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3RzLCBpbnQgbGFzdF9ub2RlLAorCQkJICAgaW50IGxhc3Rfc3RyX2lkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCByZV9zZWFyY2hfaW50ZXJuYWwgKGNvbnN0IHJlZ2V4X3QgKnByZWcsCisJCQkJCSBjb25zdCBjaGFyICpzdHJpbmcsIGludCBsZW5ndGgsCisJCQkJCSBpbnQgc3RhcnQsIGludCByYW5nZSwgaW50IHN0b3AsCisJCQkJCSBzaXplX3Qgbm1hdGNoLCByZWdtYXRjaF90IHBtYXRjaFtdLAorCQkJCQkgaW50IGVmbGFncyk7CitzdGF0aWMgaW50IHJlX3NlYXJjaF8yX3N0dWIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IGxlbmd0aDEsCisJCQkgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBsZW5ndGgyLAorCQkJICAgICBpbnQgc3RhcnQsIGludCByYW5nZSwgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKwkJCSAgICAgaW50IHN0b3AsIGludCByZXRfbGVuKTsKK3N0YXRpYyBpbnQgcmVfc2VhcmNoX3N0dWIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkJCSAgIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbmd0aCwgaW50IHN0YXJ0LAorCQkJICAgaW50IHJhbmdlLCBpbnQgc3RvcCwgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKwkJCSAgIGludCByZXRfbGVuKTsKK3N0YXRpYyB1bnNpZ25lZCByZV9jb3B5X3JlZ3MgKHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkJCSAgICAgIGludCBucmVncywgaW50IHJlZ3NfYWxsb2NhdGVkKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHBydW5lX2ltcG9zc2libGVfbm9kZXMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCk7CitzdGF0aWMgaW50IGNoZWNrX21hdGNoaW5nIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBmbF9sb25nZXN0X21hdGNoLAorCQkJICAgaW50ICpwX21hdGNoX2ZpcnN0KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwgaW50IGlkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdm9pZCB1cGRhdGVfcmVncyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVnbWF0Y2hfdCAqcG1hdGNoLAorCQkJIHJlZ21hdGNoX3QgKnByZXZfaWR4X21hdGNoLCBpbnQgY3VyX25vZGUsCisJCQkgaW50IGN1cl9pZHgsIGludCBubWF0Y2gpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcHVzaF9mYWlsX3N0YWNrIChzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcywKKwkJCQkgICAgICBpbnQgc3RyX2lkeCwgaW50IGRlc3Rfbm9kZSwgaW50IG5yZWdzLAorCQkJCSAgICAgIHJlZ21hdGNoX3QgKnJlZ3MsCisJCQkJICAgICAgcmVfbm9kZV9zZXQgKmVwc192aWFfbm9kZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3Qgc2V0X3JlZ3MgKGNvbnN0IHJlZ2V4X3QgKnByZWcsCisJCQkgICAgICAgY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJICAgICAgIHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkJCSAgICAgICBpbnQgZmxfYmFja3RyYWNrKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGZyZWVfZmFpbF9zdGFja19yZXR1cm4gKHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgaW50IHNpZnRfc3RhdGVzX2l0ZXJfbWIgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQlyZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJCQlpbnQgbm9kZV9pZHgsIGludCBzdHJfaWR4LCBpbnQgbWF4X3N0cl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgcmVnX2VycmNvZGVfdCBzaWZ0X3N0YXRlc19iYWNrd2FyZCAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgICByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9zaWZ0ZWRfc3RhdGVzIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSAgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsIGludCBzdHJfaWR4LAorCQkJCQkgIHJlX25vZGVfc2V0ICpjdXJfZGVzdCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCB1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgICAgICByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJCQkJICAgICAgaW50IHN0cl9pZHgsCisJCQkJCSAgICAgIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGFkZF9lcHNpbG9uX3NyY19ub2RlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICAgIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzLAorCQkJCQkgICAgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBjaGVja19kc3RfbGltaXRzIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkgICAgIHJlX25vZGVfc2V0ICpsaW1pdHMsCisJCQkgICAgIGludCBkc3Rfbm9kZSwgaW50IGRzdF9pZHgsIGludCBzcmNfbm9kZSwKKwkJCSAgICAgaW50IHNyY19pZHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJaW50IGJvdW5kYXJpZXMsIGludCBzdWJleHBfaWR4LAorCQkJCQlpbnQgZnJvbV9ub2RlLCBpbnQgYmtyZWZfaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3BvcyAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSAgICAgIGludCBsaW1pdCwgaW50IHN1YmV4cF9pZHgsCisJCQkJICAgICAgaW50IG5vZGUsIGludCBzdHJfaWR4LAorCQkJCSAgICAgIGludCBia3JlZl9pZHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfc3ViZXhwX2xpbWl0cyAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJCQkJICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcywKKwkJCQkJICByZV9ub2RlX3NldCAqbGltaXRzLAorCQkJCQkgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpia3JlZl9lbnRzLAorCQkJCQkgIGludCBzdHJfaWR4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IHNpZnRfc3RhdGVzX2JrcmVmIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCXJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkJCQlpbnQgc3RyX2lkeCwgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgbWVyZ2Vfc3RhdGVfYXJyYXkgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCXJlX2RmYXN0YXRlX3QgKipkc3QsCisJCQkJCXJlX2RmYXN0YXRlX3QgKipzcmMsIGludCBudW0pCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlX2RmYXN0YXRlX3QgKmZpbmRfcmVjb3Zlcl9zdGF0ZSAocmVnX2VycmNvZGVfdCAqZXJyLAorCQkJCQkgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICp0cmFuc2l0X3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsCisJCQkJICAgICByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqbWVyZ2Vfc3RhdGVfd2l0aF9sb2cgKHJlZ19lcnJjb2RlX3QgKmVyciwKKwkJCQkJICAgIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJICAgIHJlX2RmYXN0YXRlX3QgKm5leHRfc3RhdGUpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfc3ViZXhwX21hdGNoaW5nX3RvcCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkJcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJCQkJCWludCBzdHJfaWR4KSBpbnRlcm5hbF9mdW5jdGlvbjsKKyNpZiAwCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqdHJhbnNpdF9zdGF0ZV9zYiAocmVnX2VycmNvZGVfdCAqZXJyLAorCQkJCQlyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCXJlX2RmYXN0YXRlX3QgKnBzdGF0ZSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjZW5kaWYKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHJlZ19lcnJjb2RlX3QgdHJhbnNpdF9zdGF0ZV9tYiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSAgICAgICByZV9kZmFzdGF0ZV90ICpwc3RhdGUpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgcmVnX2VycmNvZGVfdCB0cmFuc2l0X3N0YXRlX2JrcmVmIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGdldF9zdWJleHAgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgaW50IGJrcmVmX25vZGUsIGludCBia3JlZl9zdHJfaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGdldF9zdWJleHBfc3ViIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICBjb25zdCByZV9zdWJfbWF0Y2hfdG9wX3QgKnN1Yl90b3AsCisJCQkJICAgICByZV9zdWJfbWF0Y2hfbGFzdF90ICpzdWJfbGFzdCwKKwkJCQkgICAgIGludCBia3JlZl9ub2RlLCBpbnQgYmtyZWZfc3RyKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgZmluZF9zdWJleHBfbm9kZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkJICAgICBpbnQgc3ViZXhwX2lkeCwgaW50IHR5cGUpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfYXJyaXZhbCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSAgICBzdGF0ZV9hcnJheV90ICpwYXRoLCBpbnQgdG9wX25vZGUsCisJCQkJICAgIGludCB0b3Bfc3RyLCBpbnQgbGFzdF9ub2RlLCBpbnQgbGFzdF9zdHIsCisJCQkJICAgIGludCB0eXBlKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX2Fycml2YWxfYWRkX25leHRfbm9kZXMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJCSAgIGludCBzdHJfaWR4LAorCQkJCQkJICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJCQkJCSAgIHJlX25vZGVfc2V0ICpuZXh0X25vZGVzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbCAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICAgICAgIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCQkJCSAgICAgICBpbnQgZXhfc3ViZXhwLCBpbnQgdHlwZSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2xfc3ViIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkJICAgcmVfbm9kZV9zZXQgKmRzdF9ub2RlcywKKwkJCQkJCSAgIGludCB0YXJnZXQsIGludCBleF9zdWJleHAsCisJCQkJCQkgICBpbnQgdHlwZSkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBleHBhbmRfYmtyZWZfY2FjaGUgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsIGludCBjdXJfc3RyLAorCQkJCQkgaW50IHN1YmV4cF9udW0sIGludCB0eXBlKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgYnVpbGRfdHJ0YWJsZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCSAgcmVfZGZhc3RhdGVfdCAqc3RhdGUpIGludGVybmFsX2Z1bmN0aW9uOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgaW50IGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisJCQkJICAgIGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgaW50IGlkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjIGlmZGVmIF9MSUJDCitzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsCisJCQkJCQkgICBzaXplX3QgbmFtZV9sZW4pCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworIyBlbmRpZiAvKiBfTElCQyAqLworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgaW50IGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCSAgICAgICBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKwkJCQkgICAgICAgcmVfbm9kZV9zZXQgKnN0YXRlc19ub2RlLAorCQkJCSAgICAgICBiaXRzZXRfdCAqc3RhdGVzX2NoKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgY2hlY2tfbm9kZV9hY2NlcHQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUsIGludCBpZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZXh0ZW5kX2J1ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisMCisvKiBFbnRyeSBwb2ludCBmb3IgUE9TSVggY29kZS4gICovCisKKy8qIHJlZ2V4ZWMgc2VhcmNoZXMgZm9yIGEgZ2l2ZW4gcGF0dGVybiwgc3BlY2lmaWVkIGJ5IFBSRUcsIGluIHRoZQorICAgc3RyaW5nIFNUUklORy4KKworICAgSWYgTk1BVENIIGlzIHplcm8gb3IgUkVHX05PU1VCIHdhcyBzZXQgaW4gdGhlIGNmbGFncyBhcmd1bWVudCB0bworICAgYHJlZ2NvbXAnLCB3ZSBpZ25vcmUgUE1BVENILiAgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgUE1BVENIIGhhcyBhdAorICAgbGVhc3QgTk1BVENIIGVsZW1lbnRzLCBhbmQgd2Ugc2V0IHRoZW0gdG8gdGhlIG9mZnNldHMgb2YgdGhlCisgICBjb3JyZXNwb25kaW5nIG1hdGNoZWQgc3Vic3RyaW5ncy4KKworICAgRUZMQUdTIHNwZWNpZmllcyBgZXhlY3V0aW9uIGZsYWdzJyB3aGljaCBhZmZlY3QgbWF0Y2hpbmc6IGlmCisgICBSRUdfTk9UQk9MIGlzIHNldCwgdGhlbiBeIGRvZXMgbm90IG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICBzdHJpbmc7IGlmIFJFR19OT1RFT0wgaXMgc2V0LCB0aGVuICQgZG9lcyBub3QgbWF0Y2ggYXQgdGhlIGVuZC4KKworICAgV2UgcmV0dXJuIDAgaWYgd2UgZmluZCBhIG1hdGNoIGFuZCBSRUdfTk9NQVRDSCBpZiBub3QuICAqLworCitpbnQKK3JlZ2V4ZWMgKAorCWNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgcHJlZywKKwljb25zdCBjaGFyICpfX3Jlc3RyaWN0IHN0cmluZywKKwlzaXplX3Qgbm1hdGNoLAorCXJlZ21hdGNoX3QgcG1hdGNoW10sCisJaW50IGVmbGFncykKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBzdGFydCwgbGVuZ3RoOworCisgIGlmIChlZmxhZ3MgJiB+KFJFR19OT1RCT0wgfCBSRUdfTk9URU9MIHwgUkVHX1NUQVJURU5EKSkKKyAgICByZXR1cm4gUkVHX0JBRFBBVDsKKworICBpZiAoZWZsYWdzICYgUkVHX1NUQVJURU5EKQorICAgIHsKKyAgICAgIHN0YXJ0ID0gcG1hdGNoWzBdLnJtX3NvOworICAgICAgbGVuZ3RoID0gcG1hdGNoWzBdLnJtX2VvOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHN0YXJ0ID0gMDsKKyAgICAgIGxlbmd0aCA9IHN0cmxlbiAoc3RyaW5nKTsKKyAgICB9CisKKyAgX19saWJjX2xvY2tfbG9jayAoZGZhLT5sb2NrKTsKKyAgaWYgKHByZWctPm5vX3N1YikKKyAgICBlcnIgPSByZV9zZWFyY2hfaW50ZXJuYWwgKHByZWcsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgbGVuZ3RoIC0gc3RhcnQsCisJCQkgICAgICBsZW5ndGgsIDAsIE5VTEwsIGVmbGFncyk7CisgIGVsc2UKKyAgICBlcnIgPSByZV9zZWFyY2hfaW50ZXJuYWwgKHByZWcsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgbGVuZ3RoIC0gc3RhcnQsCisJCQkgICAgICBsZW5ndGgsIG5tYXRjaCwgcG1hdGNoLCBlZmxhZ3MpOworICBfX2xpYmNfbG9ja191bmxvY2sgKGRmYS0+bG9jayk7CisgIHJldHVybiBlcnIgIT0gUkVHX05PRVJST1I7Cit9CisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KK3ZlcnNpb25lZF9zeW1ib2wgKGxpYmMsIF9fcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8zXzQpOworCisjIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzNfNCkKK19fdHlwZW9mX18gKF9fcmVnZXhlYykgX19jb21wYXRfcmVnZXhlYzsKKworaW50CithdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorX19jb21wYXRfcmVnZXhlYyAoY29uc3QgcmVnZXhfdCAqX19yZXN0cmljdCBwcmVnLAorCQkgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qgc3RyaW5nLCBzaXplX3Qgbm1hdGNoLAorCQkgIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpCit7CisgIHJldHVybiByZWdleGVjIChwcmVnLCBzdHJpbmcsIG5tYXRjaCwgcG1hdGNoLAorCQkgIGVmbGFncyAmIChSRUdfTk9UQk9MIHwgUkVHX05PVEVPTCkpOworfQorY29tcGF0X3N5bWJvbCAobGliYywgX19jb21wYXRfcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8wKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBFbnRyeSBwb2ludHMgZm9yIEdOVSBjb2RlLiAgKi8KKworLyogcmVfbWF0Y2gsIHJlX3NlYXJjaCwgcmVfbWF0Y2hfMiwgcmVfc2VhcmNoXzIKKworICAgVGhlIGZvcm1lciB0d28gZnVuY3Rpb25zIG9wZXJhdGUgb24gU1RSSU5HIHdpdGggbGVuZ3RoIExFTkdUSCwKKyAgIHdoaWxlIHRoZSBsYXRlciB0d28gb3BlcmF0ZSBvbiBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIKKyAgIHdpdGggbGVuZ3RocyBMRU5HVEgxIGFuZCBMRU5HVEgyLCByZXNwZWN0aXZlbHkuCisKKyAgIHJlX21hdGNoKCkgbWF0Y2hlcyB0aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZQIGFnYWluc3QgdGhlIHN0cmluZywKKyAgIHN0YXJ0aW5nIGF0IGluZGV4IFNUQVJULgorCisgICByZV9zZWFyY2goKSBmaXJzdCB0cmllcyBtYXRjaGluZyBhdCBpbmRleCBTVEFSVCwgdGhlbiBpdCB0cmllcyB0byBtYXRjaAorICAgc3RhcnRpbmcgZnJvbSBpbmRleCBTVEFSVCArIDEsIGFuZCBzbyBvbi4gIFRoZSBsYXN0IHN0YXJ0IHBvc2l0aW9uIHRyaWVkCisgICBpcyBTVEFSVCArIFJBTkdFLiAgKFRodXMgUkFOR0UgPSAwIGZvcmNlcyByZV9zZWFyY2ggdG8gb3BlcmF0ZSB0aGUgc2FtZQorICAgd2F5IGFzIHJlX21hdGNoKCkuKQorCisgICBUaGUgcGFyYW1ldGVyIFNUT1Agb2YgcmVfe21hdGNoLHNlYXJjaH1fMiBzcGVjaWZpZXMgdGhhdCBubyBtYXRjaCBleGNlZWRpbmcKKyAgIHRoZSBmaXJzdCBTVE9QIGNoYXJhY3RlcnMgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3Mgc2hvdWxkIGJlCisgICBjb25jZXJuZWQuCisKKyAgIElmIFJFR1MgaXMgbm90IE5VTEwsIGFuZCBCVUZQLT5ub19zdWIgaXMgbm90IHNldCwgdGhlIG9mZnNldHMgb2YgdGhlIG1hdGNoCisgICBhbmQgYWxsIGdyb3VwcyBpcyBzdHJvZWQgaW4gUkVHUy4gIChGb3IgdGhlICJfMiIgdmFyaWFudHMsIHRoZSBvZmZzZXRzIGFyZQorICAgY29tcHV0ZWQgcmVsYXRpdmUgdG8gdGhlIGNvbmNhdGVuYXRpb24sIG5vdCByZWxhdGl2ZSB0byB0aGUgaW5kaXZpZHVhbAorICAgc3RyaW5ncy4pCisKKyAgIE9uIHN1Y2Nlc3MsIHJlX21hdGNoKiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoLCByZV9zZWFyY2gqCisgICByZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2guICBSZXR1cm4gdmFsdWUgLTEgbWVhbnMgbm8KKyAgIG1hdGNoIHdhcyBmb3VuZCBhbmQgLTIgaW5kaWNhdGVzIGFuIGludGVybmFsIGVycm9yLiAgKi8KKworaW50CityZV9tYXRjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCSAgY29uc3QgY2hhciAqc3RyaW5nLAorCSAgaW50IGxlbmd0aCwKKwkgIGludCBzdGFydCwKKwkgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MpCit7CisgIHJldHVybiByZV9zZWFyY2hfc3R1YiAoYnVmcCwgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCAwLCBsZW5ndGgsIHJlZ3MsIDEpOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX21hdGNoLCByZV9tYXRjaCkKKyNlbmRpZgorCitpbnQKK3JlX3NlYXJjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCSAgIGNvbnN0IGNoYXIgKnN0cmluZywKKwkgICBpbnQgbGVuZ3RoLCBpbnQgc3RhcnQsIGludCByYW5nZSwKKwkgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzKQoreworICByZXR1cm4gcmVfc2VhcmNoX3N0dWIgKGJ1ZnAsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgcmFuZ2UsIGxlbmd0aCwgcmVncywgMCk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfc2VhcmNoLCByZV9zZWFyY2gpCisjZW5kaWYKKworaW50CityZV9tYXRjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBsZW5ndGgxLAorCSAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgbGVuZ3RoMiwgaW50IHN0YXJ0LAorCSAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCkKK3sKKyAgcmV0dXJuIHJlX3NlYXJjaF8yX3N0dWIgKGJ1ZnAsIHN0cmluZzEsIGxlbmd0aDEsIHN0cmluZzIsIGxlbmd0aDIsCisJCQkgICBzdGFydCwgMCwgcmVncywgc3RvcCwgMSk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfbWF0Y2hfMiwgcmVfbWF0Y2hfMikKKyNlbmRpZgorCitpbnQKK3JlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgbGVuZ3RoMSwKKwkgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBsZW5ndGgyLCBpbnQgc3RhcnQsCisJICAgICBpbnQgcmFuZ2UsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsICBpbnQgc3RvcCkKK3sKKyAgcmV0dXJuIHJlX3NlYXJjaF8yX3N0dWIgKGJ1ZnAsIHN0cmluZzEsIGxlbmd0aDEsIHN0cmluZzIsIGxlbmd0aDIsCisJCQkgICBzdGFydCwgcmFuZ2UsIHJlZ3MsIHN0b3AsIDApOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX3NlYXJjaF8yLCByZV9zZWFyY2hfMikKKyNlbmRpZgorCitzdGF0aWMgaW50CityZV9zZWFyY2hfMl9zdHViIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJCSAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IGxlbmd0aDEsCisJCSAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IGxlbmd0aDIsIGludCBzdGFydCwKKwkJICBpbnQgcmFuZ2UsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCSAgaW50IHN0b3AsIGludCByZXRfbGVuKQoreworICBjb25zdCBjaGFyICpzdHI7CisgIGludCBydmFsOworICBpbnQgbGVuID0gbGVuZ3RoMSArIGxlbmd0aDI7CisgIGludCBmcmVlX3N0ciA9IDA7CisKKyAgaWYgKEJFIChsZW5ndGgxIDwgMCB8fCBsZW5ndGgyIDwgMCB8fCBzdG9wIDwgMCwgMCkpCisgICAgcmV0dXJuIC0yOworCisgIC8qIENvbmNhdGVuYXRlIHRoZSBzdHJpbmdzLiAgKi8KKyAgaWYgKGxlbmd0aDIgPiAwKQorICAgIGlmIChsZW5ndGgxID4gMCkKKyAgICAgIHsKKwljaGFyICpzID0gcmVfbWFsbG9jIChjaGFyLCBsZW4pOworCisJaWYgKEJFIChzID09IE5VTEwsIDApKQorCSAgcmV0dXJuIC0yOworCW1lbWNweSAocywgc3RyaW5nMSwgbGVuZ3RoMSk7CisJbWVtY3B5IChzICsgbGVuZ3RoMSwgc3RyaW5nMiwgbGVuZ3RoMik7CisJc3RyID0gczsKKwlmcmVlX3N0ciA9IDE7CisgICAgICB9CisgICAgZWxzZQorICAgICAgc3RyID0gc3RyaW5nMjsKKyAgZWxzZQorICAgIHN0ciA9IHN0cmluZzE7CisKKyAgcnZhbCA9IHJlX3NlYXJjaF9zdHViIChidWZwLCBzdHIsIGxlbiwgc3RhcnQsIHJhbmdlLCBzdG9wLCByZWdzLCByZXRfbGVuKTsKKyAgaWYgKGZyZWVfc3RyKQorICAgIHJlX2ZyZWUgKChjaGFyICopIHN0cik7CisgIHJldHVybiBydmFsOworfQorCisvKiBUaGUgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhvc2Ugb2YgcmVfc2VhcmNoLgorICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzOgorICAgSWYgUkVUX0xFTiBpcyBub256ZXJvIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoIGlzIHJldHVybmVkIChyZV9tYXRjaCBzdHlsZSk7CisgICBvdGhlcndpc2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYXRjaCBpcyByZXR1cm5lZC4gICovCisKK3N0YXRpYyBpbnQKK3JlX3NlYXJjaF9zdHViIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJCWNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbmd0aCwgaW50IHN0YXJ0LAorCQlpbnQgcmFuZ2UsIGludCBzdG9wLAorCQlzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgcmV0X2xlbikKK3sKKyAgcmVnX2VycmNvZGVfdCByZXN1bHQ7CisgIHJlZ21hdGNoX3QgKnBtYXRjaDsKKyAgaW50IG5yZWdzLCBydmFsOworICBpbnQgZWZsYWdzID0gMDsKKworICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlLiAgKi8KKyAgaWYgKEJFIChzdGFydCA8IDAgfHwgc3RhcnQgPiBsZW5ndGgsIDApKQorICAgIHJldHVybiAtMTsKKyAgaWYgKEJFIChzdGFydCArIHJhbmdlID4gbGVuZ3RoLCAwKSkKKyAgICByYW5nZSA9IGxlbmd0aCAtIHN0YXJ0OworICBlbHNlIGlmIChCRSAoc3RhcnQgKyByYW5nZSA8IDAsIDApKQorICAgIHJhbmdlID0gLXN0YXJ0OworCisgIF9fbGliY19sb2NrX2xvY2sgKGRmYS0+bG9jayk7CisKKyAgZWZsYWdzIHw9IChidWZwLT5ub3RfYm9sKSA/IFJFR19OT1RCT0wgOiAwOworICBlZmxhZ3MgfD0gKGJ1ZnAtPm5vdF9lb2wpID8gUkVHX05PVEVPTCA6IDA7CisKKyAgLyogQ29tcGlsZSBmYXN0bWFwIGlmIHdlIGhhdmVuJ3QgeWV0LiAgKi8KKyAgaWYgKHJhbmdlID4gMCAmJiBidWZwLT5mYXN0bWFwICE9IE5VTEwgJiYgIWJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUpCisgICAgcmVfY29tcGlsZV9mYXN0bWFwIChidWZwKTsKKworICBpZiAoQkUgKGJ1ZnAtPm5vX3N1YiwgMCkpCisgICAgcmVncyA9IE5VTEw7CisKKyAgLyogV2UgbmVlZCBhdCBsZWFzdCAxIHJlZ2lzdGVyLiAgKi8KKyAgaWYgKHJlZ3MgPT0gTlVMTCkKKyAgICBucmVncyA9IDE7CisgIGVsc2UgaWYgKEJFIChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX0ZJWEVEICYmCisJICAgICAgIHJlZ3MtPm51bV9yZWdzIDwgYnVmcC0+cmVfbnN1YiArIDEsIDApKQorICAgIHsKKyAgICAgIG5yZWdzID0gcmVncy0+bnVtX3JlZ3M7CisgICAgICBpZiAoQkUgKG5yZWdzIDwgMSwgMCkpCisJeworCSAgLyogTm90aGluZyBjYW4gYmUgY29waWVkIHRvIHJlZ3MuICAqLworCSAgcmVncyA9IE5VTEw7CisJICBucmVncyA9IDE7CisJfQorICAgIH0KKyAgZWxzZQorICAgIG5yZWdzID0gYnVmcC0+cmVfbnN1YiArIDE7CisgIHBtYXRjaCA9IHJlX21hbGxvYyAocmVnbWF0Y2hfdCwgbnJlZ3MpOworICBpZiAoQkUgKHBtYXRjaCA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICBydmFsID0gLTI7CisgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgcmVzdWx0ID0gcmVfc2VhcmNoX2ludGVybmFsIChidWZwLCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIHJhbmdlLCBzdG9wLAorCQkJICAgICAgIG5yZWdzLCBwbWF0Y2gsIGVmbGFncyk7CisKKyAgcnZhbCA9IDA7CisKKyAgLyogSSBob3BlIHdlIG5lZWRuJ3QgZmlsbCB0aGVyIHJlZ3Mgd2l0aCAtMSdzIHdoZW4gbm8gbWF0Y2ggd2FzIGZvdW5kLiAgKi8KKyAgaWYgKHJlc3VsdCAhPSBSRUdfTk9FUlJPUikKKyAgICBydmFsID0gLTE7CisgIGVsc2UgaWYgKHJlZ3MgIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBJZiBjYWxsZXIgd2FudHMgcmVnaXN0ZXIgY29udGVudHMgZGF0YSBiYWNrLCBjb3B5IHRoZW0uICAqLworICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSByZV9jb3B5X3JlZ3MgKHJlZ3MsIHBtYXRjaCwgbnJlZ3MsCisJCQkJCSAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkKTsKKyAgICAgIGlmIChCRSAoYnVmcC0+cmVnc19hbGxvY2F0ZWQgPT0gUkVHU19VTkFMTE9DQVRFRCwgMCkpCisJcnZhbCA9IC0yOworICAgIH0KKworICBpZiAoQkUgKHJ2YWwgPT0gMCwgMSkpCisgICAgeworICAgICAgaWYgKHJldF9sZW4pCisJeworCSAgYXNzZXJ0IChwbWF0Y2hbMF0ucm1fc28gPT0gc3RhcnQpOworCSAgcnZhbCA9IHBtYXRjaFswXS5ybV9lbyAtIHN0YXJ0OworCX0KKyAgICAgIGVsc2UKKwlydmFsID0gcG1hdGNoWzBdLnJtX3NvOworICAgIH0KKyAgcmVfZnJlZSAocG1hdGNoKTsKKyBvdXQ6CisgIF9fbGliY19sb2NrX3VubG9jayAoZGZhLT5sb2NrKTsKKyAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZAorcmVfY29weV9yZWdzIChzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorCSAgICAgIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkgICAgICBpbnQgbnJlZ3MsIGludCByZWdzX2FsbG9jYXRlZCkKK3sKKyAgaW50IHJ2YWwgPSBSRUdTX1JFQUxMT0NBVEU7CisgIGludCBpOworICBpbnQgbmVlZF9yZWdzID0gbnJlZ3MgKyAxOworICAvKiBXZSBuZWVkIG9uZSBleHRyYSBlbGVtZW50IGJleW9uZCBgbnVtX3JlZ3MnIGZvciB0aGUgYC0xJyBtYXJrZXIgR05VIGNvZGUKKyAgICAgdXNlcy4gICovCisKKyAgLyogSGF2ZSB0aGUgcmVnaXN0ZXIgZGF0YSBhcnJheXMgYmVlbiBhbGxvY2F0ZWQ/ICAqLworICBpZiAocmVnc19hbGxvY2F0ZWQgPT0gUkVHU19VTkFMTE9DQVRFRCkKKyAgICB7IC8qIE5vLiAgU28gYWxsb2NhdGUgdGhlbSB3aXRoIG1hbGxvYy4gICovCisgICAgICByZWdzLT5zdGFydCA9IHJlX21hbGxvYyAocmVnb2ZmX3QsIG5lZWRfcmVncyk7CisgICAgICBpZiAoQkUgKHJlZ3MtPnN0YXJ0ID09IE5VTEwsIDApKQorCXJldHVybiBSRUdTX1VOQUxMT0NBVEVEOworICAgICAgcmVncy0+ZW5kID0gcmVfbWFsbG9jIChyZWdvZmZfdCwgbmVlZF9yZWdzKTsKKyAgICAgIGlmIChCRSAocmVncy0+ZW5kID09IE5VTEwsIDApKQorCXsKKwkgIHJlX2ZyZWUgKHJlZ3MtPnN0YXJ0KTsKKwkgIHJldHVybiBSRUdTX1VOQUxMT0NBVEVEOworCX0KKyAgICAgIHJlZ3MtPm51bV9yZWdzID0gbmVlZF9yZWdzOworICAgIH0KKyAgZWxzZSBpZiAocmVnc19hbGxvY2F0ZWQgPT0gUkVHU19SRUFMTE9DQVRFKQorICAgIHsgLyogWWVzLiAgSWYgd2UgbmVlZCBtb3JlIGVsZW1lbnRzIHRoYW4gd2VyZSBhbHJlYWR5CisJIGFsbG9jYXRlZCwgcmVhbGxvY2F0ZSB0aGVtLiAgSWYgd2UgbmVlZCBmZXdlciwganVzdAorCSBsZWF2ZSBpdCBhbG9uZS4gICovCisgICAgICBpZiAoQkUgKG5lZWRfcmVncyA+IHJlZ3MtPm51bV9yZWdzLCAwKSkKKwl7CisJICByZWdvZmZfdCAqbmV3X3N0YXJ0ID0gcmVfcmVhbGxvYyAocmVncy0+c3RhcnQsIHJlZ29mZl90LCBuZWVkX3JlZ3MpOworCSAgcmVnb2ZmX3QgKm5ld19lbmQ7CisJICBpZiAoQkUgKG5ld19zdGFydCA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIFJFR1NfVU5BTExPQ0FURUQ7CisJICBuZXdfZW5kID0gcmVfcmVhbGxvYyAocmVncy0+ZW5kLCByZWdvZmZfdCwgbmVlZF9yZWdzKTsKKwkgIGlmIChCRSAobmV3X2VuZCA9PSBOVUxMLCAwKSkKKwkgICAgeworCSAgICAgIHJlX2ZyZWUgKG5ld19zdGFydCk7CisJICAgICAgcmV0dXJuIFJFR1NfVU5BTExPQ0FURUQ7CisJICAgIH0KKwkgIHJlZ3MtPnN0YXJ0ID0gbmV3X3N0YXJ0OworCSAgcmVncy0+ZW5kID0gbmV3X2VuZDsKKwkgIHJlZ3MtPm51bV9yZWdzID0gbmVlZF9yZWdzOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBhc3NlcnQgKHJlZ3NfYWxsb2NhdGVkID09IFJFR1NfRklYRUQpOworICAgICAgLyogVGhpcyBmdW5jdGlvbiBtYXkgbm90IGJlIGNhbGxlZCB3aXRoIFJFR1NfRklYRUQgYW5kIG5yZWdzIHRvbyBiaWcuICAqLworICAgICAgYXNzZXJ0IChyZWdzLT5udW1fcmVncyA+PSBucmVncyk7CisgICAgICBydmFsID0gUkVHU19GSVhFRDsKKyAgICB9CisKKyAgLyogQ29weSB0aGUgcmVncy4gICovCisgIGZvciAoaSA9IDA7IGkgPCBucmVnczsgKytpKQorICAgIHsKKyAgICAgIHJlZ3MtPnN0YXJ0W2ldID0gcG1hdGNoW2ldLnJtX3NvOworICAgICAgcmVncy0+ZW5kW2ldID0gcG1hdGNoW2ldLnJtX2VvOworICAgIH0KKyAgZm9yICggOyBpIDwgcmVncy0+bnVtX3JlZ3M7ICsraSkKKyAgICByZWdzLT5zdGFydFtpXSA9IHJlZ3MtPmVuZFtpXSA9IC0xOworCisgIHJldHVybiBydmFsOworfQorCisvKiBTZXQgUkVHUyB0byBob2xkIE5VTV9SRUdTIHJlZ2lzdGVycywgc3RvcmluZyB0aGVtIGluIFNUQVJUUyBhbmQKKyAgIEVORFMuICBTdWJzZXF1ZW50IG1hdGNoZXMgdXNpbmcgUEFUVEVSTl9CVUZGRVIgYW5kIFJFR1Mgd2lsbCB1c2UKKyAgIHRoaXMgbWVtb3J5IGZvciByZWNvcmRpbmcgcmVnaXN0ZXIgaW5mb3JtYXRpb24uICBTVEFSVFMgYW5kIEVORFMKKyAgIG11c3QgYmUgYWxsb2NhdGVkIHVzaW5nIHRoZSBtYWxsb2MgbGlicmFyeSByb3V0aW5lLCBhbmQgbXVzdCBlYWNoCisgICBiZSBhdCBsZWFzdCBOVU1fUkVHUyAqIHNpemVvZiAocmVnb2ZmX3QpIGJ5dGVzIGxvbmcuCisKKyAgIElmIE5VTV9SRUdTID09IDAsIHRoZW4gc3Vic2VxdWVudCBtYXRjaGVzIHNob3VsZCBhbGxvY2F0ZSB0aGVpciBvd24KKyAgIHJlZ2lzdGVyIGRhdGEuCisKKyAgIFVubGVzcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIGZpcnN0IHNlYXJjaCBvciBtYXRjaCB1c2luZworICAgUEFUVEVSTl9CVUZGRVIgd2lsbCBhbGxvY2F0ZSBpdHMgb3duIHJlZ2lzdGVyIGRhdGEsIHdpdGhvdXQKKyAgIGZyZWVpbmcgdGhlIG9sZCBkYXRhLiAgKi8KKwordm9pZAorcmVfc2V0X3JlZ2lzdGVycyAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCQkgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCSAgdW5zaWduZWQgbnVtX3JlZ3MsCisJCSAgcmVnb2ZmX3QgKnN0YXJ0cywKKwkJICByZWdvZmZfdCAqZW5kcykKK3sKKyAgaWYgKG51bV9yZWdzKQorICAgIHsKKyAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19SRUFMTE9DQVRFOworICAgICAgcmVncy0+bnVtX3JlZ3MgPSBudW1fcmVnczsKKyAgICAgIHJlZ3MtPnN0YXJ0ID0gc3RhcnRzOworICAgICAgcmVncy0+ZW5kID0gZW5kczsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfVU5BTExPQ0FURUQ7CisgICAgICByZWdzLT5udW1fcmVncyA9IDA7CisgICAgICByZWdzLT5zdGFydCA9IHJlZ3MtPmVuZCA9IChyZWdvZmZfdCAqKSAwOworICAgIH0KK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9zZXRfcmVnaXN0ZXJzLCByZV9zZXRfcmVnaXN0ZXJzKQorI2VuZGlmCisMCisvKiBFbnRyeSBwb2ludHMgY29tcGF0aWJsZSB3aXRoIDQuMiBCU0QgcmVnZXggbGlicmFyeS4gIFdlIGRvbid0IGRlZmluZQorICAgdGhlbSB1bmxlc3Mgc3BlY2lmaWNhbGx5IHJlcXVlc3RlZC4gICovCisKKyNpZiBkZWZpbmVkIF9SRUdFWF9SRV9DT01QIHx8IGRlZmluZWQgX0xJQkMKK2ludAorIyBpZmRlZiBfTElCQword2Vha19mdW5jdGlvbgorIyBlbmRpZgorcmVfZXhlYyAocykKKyAgICAgY29uc3QgY2hhciAqczsKK3sKKyAgcmV0dXJuIDAgPT0gcmVnZXhlYyAoJnJlX2NvbXBfYnVmLCBzLCAwLCBOVUxMLCAwKTsKK30KKyNlbmRpZiAvKiBfUkVHRVhfUkVfQ09NUCAqLworDAorLyogSW50ZXJuYWwgZW50cnkgcG9pbnQuICAqLworCisvKiBTZWFyY2hlcyBmb3IgYSBjb21waWxlZCBwYXR0ZXJuIFBSRUcgaW4gdGhlIHN0cmluZyBTVFJJTkcsIHdob3NlCisgICBsZW5ndGggaXMgTEVOR1RILiAgTk1BVENILCBQTUFUQ0gsIGFuZCBFRkxBR1MgaGF2ZSB0aGUgc2FtZQorICAgbWluZ2luZ3Mgd2l0aCByZWdleGVjLiAgU1RBUlQsIGFuZCBSQU5HRSBoYXZlIHRoZSBzYW1lIG1lYW5pbmdzCisgICB3aXRoIHJlX3NlYXJjaC4KKyAgIFJldHVybiBSRUdfTk9FUlJPUiBpZiB3ZSBmaW5kIGEgbWF0Y2gsIGFuZCBSRUdfTk9NQVRDSCBpZiBub3QsCisgICBvdGhlcndpc2UgcmV0dXJuIHRoZSBlcnJvciBjb2RlLgorICAgTm90ZTogV2UgYXNzdW1lIGZyb250IGVuZCBmdW5jdGlvbnMgYWxyZWFkeSBjaGVjayByYW5nZXMuCisgICAoU1RBUlQgKyBSQU5HRSA+PSAwICYmIFNUQVJUICsgUkFOR0UgPD0gTEVOR1RIKSAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3JlX3NlYXJjaF9pbnRlcm5hbCAoY29uc3QgcmVnZXhfdCAqcHJlZywKKwkJICAgIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJICAgIGludCBsZW5ndGgsIGludCBzdGFydCwgaW50IHJhbmdlLCBpbnQgc3RvcCwKKwkJICAgIHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgcG1hdGNoW10sCisJCSAgICBpbnQgZWZsYWdzKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgY29uc3QgcmVfZGZhX3QgKmRmYSA9IChjb25zdCByZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGludCBsZWZ0X2xpbSwgcmlnaHRfbGltLCBpbmNyOworICBpbnQgZmxfbG9uZ2VzdF9tYXRjaCwgbWF0Y2hfZmlyc3QsIG1hdGNoX2tpbmQsIG1hdGNoX2xhc3QgPSAtMTsKKyAgaW50IGV4dHJhX25tYXRjaDsKKyAgaW50IHNiLCBjaDsKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorICByZV9tYXRjaF9jb250ZXh0X3QgbWN0eCA9IHsgLmRmYSA9IGRmYSB9OworI2Vsc2UKKyAgcmVfbWF0Y2hfY29udGV4dF90IG1jdHg7CisjZW5kaWYKKyAgY2hhciAqZmFzdG1hcCA9IChwcmVnLT5mYXN0bWFwICE9IE5VTEwgJiYgcHJlZy0+ZmFzdG1hcF9hY2N1cmF0ZQorCQkgICAmJiByYW5nZSAmJiAhcHJlZy0+Y2FuX2JlX251bGwpID8gcHJlZy0+ZmFzdG1hcCA6IE5VTEw7CisgIFJFX1RSQU5TTEFURV9UWVBFIHQgPSBwcmVnLT50cmFuc2xhdGU7CisKKyNpZiAhKGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpKQorICBtZW1zZXQgKCZtY3R4LCAnXDAnLCBzaXplb2YgKHJlX21hdGNoX2NvbnRleHRfdCkpOworICBtY3R4LmRmYSA9IGRmYTsKKyNlbmRpZgorCisgIGV4dHJhX25tYXRjaCA9IChubWF0Y2ggPiBwcmVnLT5yZV9uc3ViKSA/IG5tYXRjaCAtIChwcmVnLT5yZV9uc3ViICsgMSkgOiAwOworICBubWF0Y2ggLT0gZXh0cmFfbm1hdGNoOworCisgIC8qIENoZWNrIGlmIHRoZSBERkEgaGF2ZW4ndCBiZWVuIGNvbXBpbGVkLiAgKi8KKyAgaWYgKEJFIChwcmVnLT51c2VkID09IDAgfHwgZGZhLT5pbml0X3N0YXRlID09IE5VTEwKKwkgIHx8IGRmYS0+aW5pdF9zdGF0ZV93b3JkID09IE5VTEwgfHwgZGZhLT5pbml0X3N0YXRlX25sID09IE5VTEwKKwkgIHx8IGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19OT01BVENIOworCisjaWZkZWYgREVCVUcKKyAgLyogV2UgYXNzdW1lIGZyb250LWVuZCBmdW5jdGlvbnMgYWxyZWFkeSBjaGVjayB0aGVtLiAgKi8KKyAgYXNzZXJ0IChzdGFydCArIHJhbmdlID49IDAgJiYgc3RhcnQgKyByYW5nZSA8PSBsZW5ndGgpOworI2VuZGlmCisKKyAgLyogSWYgaW5pdGlhbCBzdGF0ZXMgd2l0aCBub24tYmVnYnVmIGNvbnRleHRzIGhhdmUgbm8gZWxlbWVudHMsCisgICAgIHRoZSByZWdleCBtdXN0IGJlIGFuY2hvcmVkLiAgSWYgcHJlZy0+bmV3bGluZV9hbmNob3IgaXMgc2V0LAorICAgICB3ZSdsbCBuZXZlciB1c2UgaW5pdF9zdGF0ZV9ubCwgc28gZG8gbm90IGNoZWNrIGl0LiAgKi8KKyAgaWYgKGRmYS0+aW5pdF9zdGF0ZS0+bm9kZXMubmVsZW0gPT0gMAorICAgICAgJiYgZGZhLT5pbml0X3N0YXRlX3dvcmQtPm5vZGVzLm5lbGVtID09IDAKKyAgICAgICYmIChkZmEtPmluaXRfc3RhdGVfbmwtPm5vZGVzLm5lbGVtID09IDAKKwkgIHx8ICFwcmVnLT5uZXdsaW5lX2FuY2hvcikpCisgICAgeworICAgICAgaWYgKHN0YXJ0ICE9IDAgJiYgc3RhcnQgKyByYW5nZSAhPSAwKQorCXJldHVybiBSRUdfTk9NQVRDSDsKKyAgICAgIHN0YXJ0ID0gcmFuZ2UgPSAwOworICAgIH0KKworICAvKiBXZSBtdXN0IGNoZWNrIHRoZSBsb25nZXN0IG1hdGNoaW5nLCBpZiBubWF0Y2ggPiAwLiAgKi8KKyAgZmxfbG9uZ2VzdF9tYXRjaCA9IChubWF0Y2ggIT0gMCB8fCBkZmEtPm5iYWNrcmVmKTsKKworICBlcnIgPSByZV9zdHJpbmdfYWxsb2NhdGUgKCZtY3R4LmlucHV0LCBzdHJpbmcsIGxlbmd0aCwgZGZhLT5ub2Rlc19sZW4gKyAxLAorCQkJICAgIHByZWctPnRyYW5zbGF0ZSwgcHJlZy0+c3ludGF4ICYgUkVfSUNBU0UsIGRmYSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIGZyZWVfcmV0dXJuOworICBtY3R4LmlucHV0LnN0b3AgPSBzdG9wOworICBtY3R4LmlucHV0LnJhd19zdG9wID0gc3RvcDsKKyAgbWN0eC5pbnB1dC5uZXdsaW5lX2FuY2hvciA9IHByZWctPm5ld2xpbmVfYW5jaG9yOworCisgIGVyciA9IG1hdGNoX2N0eF9pbml0ICgmbWN0eCwgZWZsYWdzLCBkZmEtPm5iYWNrcmVmICogMik7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIGZyZWVfcmV0dXJuOworCisgIC8qIFdlIHdpbGwgbG9nIGFsbCB0aGUgREZBIHN0YXRlcyB0aHJvdWdoIHdoaWNoIHRoZSBkZmEgcGFzcywKKyAgICAgaWYgbm1hdGNoID4gMSwgb3IgdGhpcyBkZmEgaGFzICJtdWx0aWJ5dGUgbm9kZSIsIHdoaWNoIGlzIGEKKyAgICAgYmFjay1yZWZlcmVuY2Ugb3IgYSBub2RlIHdoaWNoIGNhbiBhY2NlcHQgbXVsdGlieXRlIGNoYXJhY3RlciBvcgorICAgICBtdWx0aSBjaGFyYWN0ZXIgY29sbGF0aW5nIGVsZW1lbnQuICAqLworICBpZiAobm1hdGNoID4gMSB8fCBkZmEtPmhhc19tYl9ub2RlKQorICAgIHsKKyAgICAgIC8qIEF2b2lkIG92ZXJmbG93LiAgKi8KKyAgICAgIGlmIChCRSAoU0laRV9NQVggLyBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgPD0gbWN0eC5pbnB1dC5idWZzX2xlbiwgMCkpCisJeworCSAgZXJyID0gUkVHX0VTUEFDRTsKKwkgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorCisgICAgICBtY3R4LnN0YXRlX2xvZyA9IHJlX21hbGxvYyAocmVfZGZhc3RhdGVfdCAqLCBtY3R4LmlucHV0LmJ1ZnNfbGVuICsgMSk7CisgICAgICBpZiAoQkUgKG1jdHguc3RhdGVfbG9nID09IE5VTEwsIDApKQorCXsKKwkgIGVyciA9IFJFR19FU1BBQ0U7CisJICBnb3RvIGZyZWVfcmV0dXJuOworCX0KKyAgICB9CisgIGVsc2UKKyAgICBtY3R4LnN0YXRlX2xvZyA9IE5VTEw7CisKKyAgbWF0Y2hfZmlyc3QgPSBzdGFydDsKKyAgbWN0eC5pbnB1dC50aXBfY29udGV4dCA9IChlZmxhZ3MgJiBSRUdfTk9UQk9MKSA/IENPTlRFWFRfQkVHQlVGCisJCQkgICA6IENPTlRFWFRfTkVXTElORSB8IENPTlRFWFRfQkVHQlVGOworCisgIC8qIENoZWNrIGluY3JlbWVudGFsbHkgd2hldGhlciBvZiBub3QgdGhlIGlucHV0IHN0cmluZyBtYXRjaC4gICovCisgIGluY3IgPSAocmFuZ2UgPCAwKSA/IC0xIDogMTsKKyAgbGVmdF9saW0gPSAocmFuZ2UgPCAwKSA/IHN0YXJ0ICsgcmFuZ2UgOiBzdGFydDsKKyAgcmlnaHRfbGltID0gKHJhbmdlIDwgMCkgPyBzdGFydCA6IHN0YXJ0ICsgcmFuZ2U7CisgIHNiID0gZGZhLT5tYl9jdXJfbWF4ID09IDE7CisgIG1hdGNoX2tpbmQgPQorICAgIChmYXN0bWFwCisgICAgID8gKChzYiB8fCAhKHByZWctPnN5bnRheCAmIFJFX0lDQVNFIHx8IHQpID8gNCA6IDApCisJfCAocmFuZ2UgPj0gMCA/IDIgOiAwKQorCXwgKHQgIT0gTlVMTCA/IDEgOiAwKSkKKyAgICAgOiA4KTsKKworICBmb3IgKDs7IG1hdGNoX2ZpcnN0ICs9IGluY3IpCisgICAgeworICAgICAgZXJyID0gUkVHX05PTUFUQ0g7CisgICAgICBpZiAobWF0Y2hfZmlyc3QgPCBsZWZ0X2xpbSB8fCByaWdodF9saW0gPCBtYXRjaF9maXJzdCkKKwlnb3RvIGZyZWVfcmV0dXJuOworCisgICAgICAvKiBBZHZhbmNlIGFzIHJhcGlkbHkgYXMgcG9zc2libGUgdGhyb3VnaCB0aGUgc3RyaW5nLCB1bnRpbCB3ZQorCSBmaW5kIGEgcGxhdXNpYmxlIHBsYWNlIHRvIHN0YXJ0IG1hdGNoaW5nLiAgVGhpcyBtYXkgYmUgZG9uZQorCSB3aXRoIHZhcnlpbmcgZWZmaWNpZW5jeSwgc28gdGhlcmUgYXJlIHZhcmlvdXMgcG9zc2liaWxpdGllczoKKwkgb25seSB0aGUgbW9zdCBjb21tb24gb2YgdGhlbSBhcmUgc3BlY2lhbGl6ZWQsIGluIG9yZGVyIHRvCisJIHNhdmUgb24gY29kZSBzaXplLiAgV2UgdXNlIGEgc3dpdGNoIHN0YXRlbWVudCBmb3Igc3BlZWQuICAqLworICAgICAgc3dpdGNoIChtYXRjaF9raW5kKQorCXsKKwljYXNlIDg6CisJICAvKiBObyBmYXN0bWFwLiAgKi8KKwkgIGJyZWFrOworCisJY2FzZSA3OgorCSAgLyogRmFzdG1hcCB3aXRoIHNpbmdsZS1ieXRlIHRyYW5zbGF0aW9uLCBtYXRjaCBmb3J3YXJkLiAgKi8KKwkgIHdoaWxlIChCRSAobWF0Y2hfZmlyc3QgPCByaWdodF9saW0sIDEpCisJCSAmJiAhZmFzdG1hcFt0Wyh1bnNpZ25lZCBjaGFyKSBzdHJpbmdbbWF0Y2hfZmlyc3RdXV0pCisJICAgICsrbWF0Y2hfZmlyc3Q7CisJICBnb3RvIGZvcndhcmRfbWF0Y2hfZm91bmRfc3RhcnRfb3JfcmVhY2hlZF9lbmQ7CisKKwljYXNlIDY6CisJICAvKiBGYXN0bWFwIHdpdGhvdXQgdHJhbnNsYXRpb24sIG1hdGNoIGZvcndhcmQuICAqLworCSAgd2hpbGUgKEJFIChtYXRjaF9maXJzdCA8IHJpZ2h0X2xpbSwgMSkKKwkJICYmICFmYXN0bWFwWyh1bnNpZ25lZCBjaGFyKSBzdHJpbmdbbWF0Y2hfZmlyc3RdXSkKKwkgICAgKyttYXRjaF9maXJzdDsKKworCWZvcndhcmRfbWF0Y2hfZm91bmRfc3RhcnRfb3JfcmVhY2hlZF9lbmQ6CisJICBpZiAoQkUgKG1hdGNoX2ZpcnN0ID09IHJpZ2h0X2xpbSwgMCkpCisJICAgIHsKKwkgICAgICBjaCA9IG1hdGNoX2ZpcnN0ID49IGxlbmd0aAorCQkgICAgICAgPyAwIDogKHVuc2lnbmVkIGNoYXIpIHN0cmluZ1ttYXRjaF9maXJzdF07CisJICAgICAgaWYgKCFmYXN0bWFwW3QgPyB0W2NoXSA6IGNoXSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIDQ6CisJY2FzZSA1OgorCSAgLyogRmFzdG1hcCB3aXRob3V0IG11bHRpLWJ5dGUgdHJhbnNsYXRpb24sIG1hdGNoIGJhY2t3YXJkcy4gICovCisJICB3aGlsZSAobWF0Y2hfZmlyc3QgPj0gbGVmdF9saW0pCisJICAgIHsKKwkgICAgICBjaCA9IG1hdGNoX2ZpcnN0ID49IGxlbmd0aAorCQkgICAgICAgPyAwIDogKHVuc2lnbmVkIGNoYXIpIHN0cmluZ1ttYXRjaF9maXJzdF07CisJICAgICAgaWYgKGZhc3RtYXBbdCA/IHRbY2hdIDogY2hdKQorCQlicmVhazsKKwkgICAgICAtLW1hdGNoX2ZpcnN0OworCSAgICB9CisJICBpZiAobWF0Y2hfZmlyc3QgPCBsZWZ0X2xpbSkKKwkgICAgZ290byBmcmVlX3JldHVybjsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIC8qIEluIHRoaXMgY2FzZSwgd2UgY2FuJ3QgZGV0ZXJtaW5lIGVhc2lseSB0aGUgY3VycmVudCBieXRlLAorCSAgICAgc2luY2UgaXQgbWlnaHQgYmUgYSBjb21wb25lbnQgYnl0ZSBvZiBhIG11bHRpYnl0ZQorCSAgICAgY2hhcmFjdGVyLiAgVGhlbiB3ZSB1c2UgdGhlIGNvbnN0cnVjdGVkIGJ1ZmZlciBpbnN0ZWFkLiAgKi8KKwkgIGZvciAoOzspCisJICAgIHsKKwkgICAgICAvKiBJZiBNQVRDSF9GSVJTVCBpcyBvdXQgb2YgdGhlIHZhbGlkIHJhbmdlLCByZWNvbnN0cnVjdCB0aGUKKwkJIGJ1ZmZlcnMuICAqLworCSAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSBtYXRjaF9maXJzdCAtIG1jdHguaW5wdXQucmF3X21ic19pZHg7CisJICAgICAgaWYgKEJFIChvZmZzZXQgPj0gKHVuc2lnbmVkIGludCkgbWN0eC5pbnB1dC52YWxpZF9yYXdfbGVuLCAwKSkKKwkJeworCQkgIGVyciA9IHJlX3N0cmluZ19yZWNvbnN0cnVjdCAoJm1jdHguaW5wdXQsIG1hdGNoX2ZpcnN0LAorCQkJCQkgICAgICAgZWZsYWdzKTsKKwkJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCisJCSAgb2Zmc2V0ID0gbWF0Y2hfZmlyc3QgLSBtY3R4LmlucHV0LnJhd19tYnNfaWR4OworCQl9CisJICAgICAgLyogSWYgTUFUQ0hfRklSU1QgaXMgb3V0IG9mIHRoZSBidWZmZXIsIGxlYXZlIGl0IGFzICdcMCcuCisJCSBOb3RlIHRoYXQgTUFUQ0hfRklSU1QgbXVzdCBub3QgYmUgc21hbGxlciB0aGFuIDAuICAqLworCSAgICAgIGNoID0gKG1hdGNoX2ZpcnN0ID49IGxlbmd0aAorCQkgICAgPyAwIDogcmVfc3RyaW5nX2J5dGVfYXQgKCZtY3R4LmlucHV0LCBvZmZzZXQpKTsKKwkgICAgICBpZiAoZmFzdG1hcFtjaF0pCisJCWJyZWFrOworCSAgICAgIG1hdGNoX2ZpcnN0ICs9IGluY3I7CisJICAgICAgaWYgKG1hdGNoX2ZpcnN0IDwgbGVmdF9saW0gfHwgbWF0Y2hfZmlyc3QgPiByaWdodF9saW0pCisJCXsKKwkJICBlcnIgPSBSRUdfTk9NQVRDSDsKKwkJICBnb3RvIGZyZWVfcmV0dXJuOworCQl9CisJICAgIH0KKwkgIGJyZWFrOworCX0KKworICAgICAgLyogUmVjb25zdHJ1Y3QgdGhlIGJ1ZmZlcnMgc28gdGhhdCB0aGUgbWF0Y2hlciBjYW4gYXNzdW1lIHRoYXQKKwkgdGhlIG1hdGNoaW5nIHN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4gICovCisgICAgICBlcnIgPSByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKCZtY3R4LmlucHV0LCBtYXRjaF9maXJzdCwgZWZsYWdzKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIGZyZWVfcmV0dXJuOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgLyogRG9uJ3QgY29uc2lkZXIgdGhpcyBjaGFyIGFzIGEgcG9zc2libGUgbWF0Y2ggc3RhcnQgaWYgaXQgcGFydCwKKwl5ZXQgaXNuJ3QgdGhlIGhlYWQsIG9mIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisgICAgICBpZiAoIXNiICYmICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAoJm1jdHguaW5wdXQsIDApKQorCWNvbnRpbnVlOworI2VuZGlmCisKKyAgICAgIC8qIEl0IHNlZW1zIHRvIGJlIGFwcHJvcHJpYXRlIG9uZSwgdGhlbiB1c2UgdGhlIG1hdGNoZXIuICAqLworICAgICAgLyogV2UgYXNzdW1lIHRoYXQgdGhlIG1hdGNoaW5nIHN0YXJ0cyBmcm9tIDAuICAqLworICAgICAgbWN0eC5zdGF0ZV9sb2dfdG9wID0gbWN0eC5uYmtyZWZfZW50cyA9IG1jdHgubWF4X21iX2VsZW1fbGVuID0gMDsKKyAgICAgIG1hdGNoX2xhc3QgPSBjaGVja19tYXRjaGluZyAoJm1jdHgsIGZsX2xvbmdlc3RfbWF0Y2gsCisJCQkJICAgcmFuZ2UgPj0gMCA/ICZtYXRjaF9maXJzdCA6IE5VTEwpOworICAgICAgaWYgKG1hdGNoX2xhc3QgIT0gLTEpCisJeworCSAgaWYgKEJFIChtYXRjaF9sYXN0ID09IC0yLCAwKSkKKwkgICAgeworCSAgICAgIGVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbWN0eC5tYXRjaF9sYXN0ID0gbWF0Y2hfbGFzdDsKKwkgICAgICBpZiAoKCFwcmVnLT5ub19zdWIgJiYgbm1hdGNoID4gMSkgfHwgZGZhLT5uYmFja3JlZikKKwkJeworCQkgIHJlX2RmYXN0YXRlX3QgKnBzdGF0ZSA9IG1jdHguc3RhdGVfbG9nW21hdGNoX2xhc3RdOworCQkgIG1jdHgubGFzdF9ub2RlID0gY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0ICgmbWN0eCwgcHN0YXRlLAorCQkJCQkJCSAgICAgbWF0Y2hfbGFzdCk7CisJCX0KKwkgICAgICBpZiAoKCFwcmVnLT5ub19zdWIgJiYgbm1hdGNoID4gMSAmJiBkZmEtPmhhc19wbHVyYWxfbWF0Y2gpCisJCSAgfHwgZGZhLT5uYmFja3JlZikKKwkJeworCQkgIGVyciA9IHBydW5lX2ltcG9zc2libGVfbm9kZXMgKCZtY3R4KTsKKwkJICBpZiAoZXJyID09IFJFR19OT0VSUk9SKQorCQkgICAgYnJlYWs7CisJCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PTUFUQ0gsIDApKQorCQkgICAgZ290byBmcmVlX3JldHVybjsKKwkJICBtYXRjaF9sYXN0ID0gLTE7CisJCX0KKwkgICAgICBlbHNlCisJCWJyZWFrOyAvKiBXZSBmb3VuZCBhIG1hdGNoLiAgKi8KKwkgICAgfQorCX0KKworICAgICAgbWF0Y2hfY3R4X2NsZWFuICgmbWN0eCk7CisgICAgfQorCisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChtYXRjaF9sYXN0ICE9IC0xKTsKKyAgYXNzZXJ0IChlcnIgPT0gUkVHX05PRVJST1IpOworI2VuZGlmCisKKyAgLyogU2V0IHBtYXRjaFtdIGlmIHdlIG5lZWQuICAqLworICBpZiAobm1hdGNoID4gMCkKKyAgICB7CisgICAgICBpbnQgcmVnX2lkeDsKKworICAgICAgLyogSW5pdGlhbGl6ZSByZWdpc3RlcnMuICAqLworICAgICAgZm9yIChyZWdfaWR4ID0gMTsgcmVnX2lkeCA8IG5tYXRjaDsgKytyZWdfaWR4KQorCXBtYXRjaFtyZWdfaWR4XS5ybV9zbyA9IHBtYXRjaFtyZWdfaWR4XS5ybV9lbyA9IC0xOworCisgICAgICAvKiBTZXQgdGhlIHBvaW50cyB3aGVyZSBtYXRjaGluZyBzdGFydC9lbmQuICAqLworICAgICAgcG1hdGNoWzBdLnJtX3NvID0gMDsKKyAgICAgIHBtYXRjaFswXS5ybV9lbyA9IG1jdHgubWF0Y2hfbGFzdDsKKworICAgICAgaWYgKCFwcmVnLT5ub19zdWIgJiYgbm1hdGNoID4gMSkKKwl7CisJICBlcnIgPSBzZXRfcmVncyAocHJlZywgJm1jdHgsIG5tYXRjaCwgcG1hdGNoLAorCQkJICBkZmEtPmhhc19wbHVyYWxfbWF0Y2ggJiYgZGZhLT5uYmFja3JlZiA+IDApOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCX0KKworICAgICAgLyogQXQgbGFzdCwgYWRkIHRoZSBvZmZzZXQgdG8gdGhlIGVhY2ggcmVnaXN0ZXJzLCBzaW5jZSB3ZSBzbGlkZWQKKwkgdGhlIGJ1ZmZlcnMgc28gdGhhdCB3ZSBjb3VsZCBhc3N1bWUgdGhhdCB0aGUgbWF0Y2hpbmcgc3RhcnRzCisJIGZyb20gMC4gICovCisgICAgICBmb3IgKHJlZ19pZHggPSAwOyByZWdfaWR4IDwgbm1hdGNoOyArK3JlZ19pZHgpCisJaWYgKHBtYXRjaFtyZWdfaWR4XS5ybV9zbyAhPSAtMSkKKwkgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgICBpZiAoQkUgKG1jdHguaW5wdXQub2Zmc2V0c19uZWVkZWQgIT0gMCwgMCkpCisJICAgICAgeworCQlwbWF0Y2hbcmVnX2lkeF0ucm1fc28gPQorCQkgIChwbWF0Y2hbcmVnX2lkeF0ucm1fc28gPT0gbWN0eC5pbnB1dC52YWxpZF9sZW4KKwkJICAgPyBtY3R4LmlucHV0LnZhbGlkX3Jhd19sZW4KKwkJICAgOiBtY3R4LmlucHV0Lm9mZnNldHNbcG1hdGNoW3JlZ19pZHhdLnJtX3NvXSk7CisJCXBtYXRjaFtyZWdfaWR4XS5ybV9lbyA9CisJCSAgKHBtYXRjaFtyZWdfaWR4XS5ybV9lbyA9PSBtY3R4LmlucHV0LnZhbGlkX2xlbgorCQkgICA/IG1jdHguaW5wdXQudmFsaWRfcmF3X2xlbgorCQkgICA6IG1jdHguaW5wdXQub2Zmc2V0c1twbWF0Y2hbcmVnX2lkeF0ucm1fZW9dKTsKKwkgICAgICB9CisjZWxzZQorCSAgICBhc3NlcnQgKG1jdHguaW5wdXQub2Zmc2V0c19uZWVkZWQgPT0gMCk7CisjZW5kaWYKKwkgICAgcG1hdGNoW3JlZ19pZHhdLnJtX3NvICs9IG1hdGNoX2ZpcnN0OworCSAgICBwbWF0Y2hbcmVnX2lkeF0ucm1fZW8gKz0gbWF0Y2hfZmlyc3Q7CisJICB9CisgICAgICBmb3IgKHJlZ19pZHggPSAwOyByZWdfaWR4IDwgZXh0cmFfbm1hdGNoOyArK3JlZ19pZHgpCisJeworCSAgcG1hdGNoW25tYXRjaCArIHJlZ19pZHhdLnJtX3NvID0gLTE7CisJICBwbWF0Y2hbbm1hdGNoICsgcmVnX2lkeF0ucm1fZW8gPSAtMTsKKwl9CisKKyAgICAgIGlmIChkZmEtPnN1YmV4cF9tYXApCisJZm9yIChyZWdfaWR4ID0gMDsgcmVnX2lkeCArIDEgPCBubWF0Y2g7IHJlZ19pZHgrKykKKwkgIGlmIChkZmEtPnN1YmV4cF9tYXBbcmVnX2lkeF0gIT0gcmVnX2lkeCkKKwkgICAgeworCSAgICAgIHBtYXRjaFtyZWdfaWR4ICsgMV0ucm1fc28KKwkJPSBwbWF0Y2hbZGZhLT5zdWJleHBfbWFwW3JlZ19pZHhdICsgMV0ucm1fc287CisJICAgICAgcG1hdGNoW3JlZ19pZHggKyAxXS5ybV9lbworCQk9IHBtYXRjaFtkZmEtPnN1YmV4cF9tYXBbcmVnX2lkeF0gKyAxXS5ybV9lbzsKKwkgICAgfQorICAgIH0KKworIGZyZWVfcmV0dXJuOgorICByZV9mcmVlIChtY3R4LnN0YXRlX2xvZyk7CisgIGlmIChkZmEtPm5iYWNrcmVmKQorICAgIG1hdGNoX2N0eF9mcmVlICgmbWN0eCk7CisgIHJlX3N0cmluZ19kZXN0cnVjdCAoJm1jdHguaW5wdXQpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcHJ1bmVfaW1wb3NzaWJsZV9ub2RlcyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpbnQgaGFsdF9ub2RlLCBtYXRjaF9sYXN0OworICByZWdfZXJyY29kZV90IHJldDsKKyAgcmVfZGZhc3RhdGVfdCAqKnNpZnRlZF9zdGF0ZXM7CisgIHJlX2RmYXN0YXRlX3QgKipsaW1fc3RhdGVzID0gTlVMTDsKKyAgcmVfc2lmdF9jb250ZXh0X3Qgc2N0eDsKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMKTsKKyNlbmRpZgorICBtYXRjaF9sYXN0ID0gbWN0eC0+bWF0Y2hfbGFzdDsKKyAgaGFsdF9ub2RlID0gbWN0eC0+bGFzdF9ub2RlOworCisgIC8qIEF2b2lkIG92ZXJmbG93LiAgKi8KKyAgaWYgKEJFIChTSVpFX01BWCAvIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSA8PSBtYXRjaF9sYXN0LCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKworICBzaWZ0ZWRfc3RhdGVzID0gcmVfbWFsbG9jIChyZV9kZmFzdGF0ZV90ICosIG1hdGNoX2xhc3QgKyAxKTsKKyAgaWYgKEJFIChzaWZ0ZWRfc3RhdGVzID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgIHJldCA9IFJFR19FU1BBQ0U7CisgICAgICBnb3RvIGZyZWVfcmV0dXJuOworICAgIH0KKyAgaWYgKGRmYS0+bmJhY2tyZWYpCisgICAgeworICAgICAgbGltX3N0YXRlcyA9IHJlX21hbGxvYyAocmVfZGZhc3RhdGVfdCAqLCBtYXRjaF9sYXN0ICsgMSk7CisgICAgICBpZiAoQkUgKGxpbV9zdGF0ZXMgPT0gTlVMTCwgMCkpCisJeworCSAgcmV0ID0gUkVHX0VTUEFDRTsKKwkgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorICAgICAgd2hpbGUgKDEpCisJeworCSAgbWVtc2V0IChsaW1fc3RhdGVzLCAnXDAnLAorCQkgIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSAqIChtYXRjaF9sYXN0ICsgMSkpOworCSAgc2lmdF9jdHhfaW5pdCAoJnNjdHgsIHNpZnRlZF9zdGF0ZXMsIGxpbV9zdGF0ZXMsIGhhbHRfbm9kZSwKKwkJCSBtYXRjaF9sYXN0KTsKKwkgIHJldCA9IHNpZnRfc3RhdGVzX2JhY2t3YXJkIChtY3R4LCAmc2N0eCk7CisJICByZV9ub2RlX3NldF9mcmVlICgmc2N0eC5saW1pdHMpOworCSAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICAgIGdvdG8gZnJlZV9yZXR1cm47CisJICBpZiAoc2lmdGVkX3N0YXRlc1swXSAhPSBOVUxMIHx8IGxpbV9zdGF0ZXNbMF0gIT0gTlVMTCkKKwkgICAgYnJlYWs7CisJICBkbworCSAgICB7CisJICAgICAgLS1tYXRjaF9sYXN0OworCSAgICAgIGlmIChtYXRjaF9sYXN0IDwgMCkKKwkJeworCQkgIHJldCA9IFJFR19OT01BVENIOworCQkgIGdvdG8gZnJlZV9yZXR1cm47CisJCX0KKwkgICAgfSB3aGlsZSAobWN0eC0+c3RhdGVfbG9nW21hdGNoX2xhc3RdID09IE5VTEwKKwkJICAgICB8fCAhbWN0eC0+c3RhdGVfbG9nW21hdGNoX2xhc3RdLT5oYWx0KTsKKwkgIGhhbHRfbm9kZSA9IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAobWN0eCwKKwkJCQkJCW1jdHgtPnN0YXRlX2xvZ1ttYXRjaF9sYXN0XSwKKwkJCQkJCW1hdGNoX2xhc3QpOworCX0KKyAgICAgIHJldCA9IG1lcmdlX3N0YXRlX2FycmF5IChkZmEsIHNpZnRlZF9zdGF0ZXMsIGxpbV9zdGF0ZXMsCisJCQkgICAgICAgbWF0Y2hfbGFzdCArIDEpOworICAgICAgcmVfZnJlZSAobGltX3N0YXRlcyk7CisgICAgICBsaW1fc3RhdGVzID0gTlVMTDsKKyAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIGZyZWVfcmV0dXJuOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHNpZnRfY3R4X2luaXQgKCZzY3R4LCBzaWZ0ZWRfc3RhdGVzLCBsaW1fc3RhdGVzLCBoYWx0X25vZGUsIG1hdGNoX2xhc3QpOworICAgICAgcmV0ID0gc2lmdF9zdGF0ZXNfYmFja3dhcmQgKG1jdHgsICZzY3R4KTsKKyAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZzY3R4LmxpbWl0cyk7CisgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKyAgICAgIGlmIChzaWZ0ZWRfc3RhdGVzWzBdID09IE5VTEwpCisJeworCSAgcmV0ID0gUkVHX05PTUFUQ0g7CisJICBnb3RvIGZyZWVfcmV0dXJuOworCX0KKyAgICB9CisgIHJlX2ZyZWUgKG1jdHgtPnN0YXRlX2xvZyk7CisgIG1jdHgtPnN0YXRlX2xvZyA9IHNpZnRlZF9zdGF0ZXM7CisgIHNpZnRlZF9zdGF0ZXMgPSBOVUxMOworICBtY3R4LT5sYXN0X25vZGUgPSBoYWx0X25vZGU7CisgIG1jdHgtPm1hdGNoX2xhc3QgPSBtYXRjaF9sYXN0OworICByZXQgPSBSRUdfTk9FUlJPUjsKKyBmcmVlX3JldHVybjoKKyAgcmVfZnJlZSAoc2lmdGVkX3N0YXRlcyk7CisgIHJlX2ZyZWUgKGxpbV9zdGF0ZXMpOworICByZXR1cm4gcmV0OworfQorCisvKiBBY3F1aXJlIGFuIGluaXRpYWwgc3RhdGUgYW5kIHJldHVybiBpdC4KKyAgIFdlIG11c3Qgc2VsZWN0IGFwcHJvcHJpYXRlIGluaXRpYWwgc3RhdGUgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LAorICAgc2luY2UgaW5pdGlhbCBzdGF0ZXMgbWF5IGhhdmUgY29uc3RyYWludHMgbGlrZSAiXDwiLCAiXiIsIGV0Yy4uICAqLworCitzdGF0aWMgaW5saW5lIHJlX2RmYXN0YXRlX3QgKgorX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkgaW50ZXJuYWxfZnVuY3Rpb24KK2FjcXVpcmVfaW5pdF9zdGF0ZV9jb250ZXh0IChyZWdfZXJyY29kZV90ICplcnIsIGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgICBpbnQgaWR4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpZiAoZGZhLT5pbml0X3N0YXRlLT5oYXNfY29uc3RyYWludCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBpZHggLSAxLCBtY3R4LT5lZmxhZ3MpOworICAgICAgaWYgKElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZV93b3JkOworICAgICAgZWxzZSBpZiAoSVNfT1JESU5BUllfQ09OVEVYVCAoY29udGV4dCkpCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZTsKKyAgICAgIGVsc2UgaWYgKElTX0JFR0JVRl9DT05URVhUIChjb250ZXh0KSAmJiBJU19ORVdMSU5FX0NPTlRFWFQgKGNvbnRleHQpKQorCXJldHVybiBkZmEtPmluaXRfc3RhdGVfYmVnYnVmOworICAgICAgZWxzZSBpZiAoSVNfTkVXTElORV9DT05URVhUIChjb250ZXh0KSkKKwlyZXR1cm4gZGZhLT5pbml0X3N0YXRlX25sOworICAgICAgZWxzZSBpZiAoSVNfQkVHQlVGX0NPTlRFWFQgKGNvbnRleHQpKQorCXsKKwkgIC8qIEl0IGlzIHJlbGF0aXZlbHkgcmFyZSBjYXNlLCB0aGVuIGNhbGN1bGF0ZSBvbiBkZW1hbmQuICAqLworCSAgcmV0dXJuIHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoZXJyLCBkZmEsCisJCQkJCSAgIGRmYS0+aW5pdF9zdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsCisJCQkJCSAgIGNvbnRleHQpOworCX0KKyAgICAgIGVsc2UKKwkvKiBNdXN0IG5vdCBoYXBwZW4/ICAqLworCXJldHVybiBkZmEtPmluaXRfc3RhdGU7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZTsKK30KKworLyogQ2hlY2sgd2hldGhlciB0aGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGlucHV0IHN0cmluZyBJTlBVVCBvciBub3QsCisgICBhbmQgcmV0dXJuIHRoZSBpbmRleCB3aGVyZSB0aGUgbWF0Y2hpbmcgZW5kLCByZXR1cm4gLTEgaWYgbm90IG1hdGNoLAorICAgb3IgcmV0dXJuIC0yIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisgICBGTF9MT05HRVNUX01BVENIIG1lYW5zIHdlIHdhbnQgdGhlIFBPU0lYIGxvbmdlc3QgbWF0Y2hpbmcuCisgICBJZiBQX01BVENIX0ZJUlNUIGlzIG5vdCBOVUxMLCBhbmQgdGhlIG1hdGNoIGZhaWxzLCBpdCBpcyBzZXQgdG8gdGhlCisgICBuZXh0IHBsYWNlIHdoZXJlIHdlIG1heSB3YW50IHRvIHRyeSBtYXRjaGluZy4KKyAgIE5vdGUgdGhhdCB0aGUgbWF0Y2hlciBhc3N1bWUgdGhhdCB0aGUgbWFjaGluZyBzdGFydHMgZnJvbSB0aGUgY3VycmVudAorICAgaW5kZXggb2YgdGhlIGJ1ZmZlci4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19tYXRjaGluZyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgZmxfbG9uZ2VzdF9tYXRjaCwKKwkJaW50ICpwX21hdGNoX2ZpcnN0KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IG1hdGNoID0gMDsKKyAgaW50IG1hdGNoX2xhc3QgPSAtMTsKKyAgaW50IGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisgIHJlX2RmYXN0YXRlX3QgKmN1cl9zdGF0ZTsKKyAgaW50IGF0X2luaXRfc3RhdGUgPSBwX21hdGNoX2ZpcnN0ICE9IE5VTEw7CisgIGludCBuZXh0X3N0YXJ0X2lkeCA9IGN1cl9zdHJfaWR4OworCisgIGVyciA9IFJFR19OT0VSUk9SOworICBjdXJfc3RhdGUgPSBhY3F1aXJlX2luaXRfc3RhdGVfY29udGV4dCAoJmVyciwgbWN0eCwgY3VyX3N0cl9pZHgpOworICAvKiBBbiBpbml0aWFsIHN0YXRlIG11c3Qgbm90IGJlIE5VTEwgKGludmFsaWQpLiAgKi8KKyAgaWYgKEJFIChjdXJfc3RhdGUgPT0gTlVMTCwgMCkpCisgICAgeworICAgICAgYXNzZXJ0IChlcnIgPT0gUkVHX0VTUEFDRSk7CisgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgIGlmIChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCkKKyAgICB7CisgICAgICBtY3R4LT5zdGF0ZV9sb2dbY3VyX3N0cl9pZHhdID0gY3VyX3N0YXRlOworCisgICAgICAvKiBDaGVjayBPUF9PUEVOX1NVQkVYUCBpbiB0aGUgaW5pdGlhbCBzdGF0ZSBpbiBjYXNlIHRoYXQgd2UgdXNlIHRoZW0KKwkgbGF0ZXIuICBFLmcuIFByb2Nlc3NpbmcgYmFjayByZWZlcmVuY2VzLiAgKi8KKyAgICAgIGlmIChCRSAoZGZhLT5uYmFja3JlZiwgMCkpCisJeworCSAgYXRfaW5pdF9zdGF0ZSA9IDA7CisJICBlcnIgPSBjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChtY3R4LCAmY3VyX3N0YXRlLT5ub2RlcywgMCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisKKwkgIGlmIChjdXJfc3RhdGUtPmhhc19iYWNrcmVmKQorCSAgICB7CisJICAgICAgZXJyID0gdHJhbnNpdF9zdGF0ZV9ia3JlZiAobWN0eCwgJmN1cl9zdGF0ZS0+bm9kZXMpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLyogSWYgdGhlIFJFIGFjY2VwdHMgTlVMTCBzdHJpbmcuICAqLworICBpZiAoQkUgKGN1cl9zdGF0ZS0+aGFsdCwgMCkpCisgICAgeworICAgICAgaWYgKCFjdXJfc3RhdGUtPmhhc19jb25zdHJhaW50CisJICB8fCBjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKG1jdHgsIGN1cl9zdGF0ZSwgY3VyX3N0cl9pZHgpKQorCXsKKwkgIGlmICghZmxfbG9uZ2VzdF9tYXRjaCkKKwkgICAgcmV0dXJuIGN1cl9zdHJfaWR4OworCSAgZWxzZQorCSAgICB7CisJICAgICAgbWF0Y2hfbGFzdCA9IGN1cl9zdHJfaWR4OworCSAgICAgIG1hdGNoID0gMTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgd2hpbGUgKCFyZV9zdHJpbmdfZW9pICgmbWN0eC0+aW5wdXQpKQorICAgIHsKKyAgICAgIHJlX2RmYXN0YXRlX3QgKm9sZF9zdGF0ZSA9IGN1cl9zdGF0ZTsKKyAgICAgIGludCBuZXh0X2NoYXJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCkgKyAxOworCisgICAgICBpZiAoQkUgKG5leHRfY2hhcl9pZHggPj0gbWN0eC0+aW5wdXQuYnVmc19sZW4sIDApCisJICB8fCAoQkUgKG5leHRfY2hhcl9pZHggPj0gbWN0eC0+aW5wdXQudmFsaWRfbGVuLCAwKQorCSAgICAgICYmIG1jdHgtPmlucHV0LnZhbGlkX2xlbiA8IG1jdHgtPmlucHV0LmxlbikpCisJeworCSAgZXJyID0gZXh0ZW5kX2J1ZmZlcnMgKG1jdHgpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgYXNzZXJ0IChlcnIgPT0gUkVHX0VTUEFDRSk7CisJICAgICAgcmV0dXJuIC0yOworCSAgICB9CisJfQorCisgICAgICBjdXJfc3RhdGUgPSB0cmFuc2l0X3N0YXRlICgmZXJyLCBtY3R4LCBjdXJfc3RhdGUpOworICAgICAgaWYgKG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMKQorCWN1cl9zdGF0ZSA9IG1lcmdlX3N0YXRlX3dpdGhfbG9nICgmZXJyLCBtY3R4LCBjdXJfc3RhdGUpOworCisgICAgICBpZiAoY3VyX3N0YXRlID09IE5VTEwpCisJeworCSAgLyogUmVhY2hlZCB0aGUgaW52YWxpZCBzdGF0ZSBvciBhbiBlcnJvci4gIFRyeSB0byByZWNvdmVyIGEgdmFsaWQKKwkgICAgIHN0YXRlIHVzaW5nIHRoZSBzdGF0ZSBsb2csIGlmIGF2YWlsYWJsZSBhbmQgaWYgd2UgaGF2ZSBub3QKKwkgICAgIGFscmVhZHkgZm91bmQgYSB2YWxpZCAoZXZlbiBpZiBub3QgdGhlIGxvbmdlc3QpIG1hdGNoLiAgKi8KKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIC0yOworCisJICBpZiAobWN0eC0+c3RhdGVfbG9nID09IE5VTEwKKwkgICAgICB8fCAobWF0Y2ggJiYgIWZsX2xvbmdlc3RfbWF0Y2gpCisJICAgICAgfHwgKGN1cl9zdGF0ZSA9IGZpbmRfcmVjb3Zlcl9zdGF0ZSAoJmVyciwgbWN0eCkpID09IE5VTEwpCisJICAgIGJyZWFrOworCX0KKworICAgICAgaWYgKEJFIChhdF9pbml0X3N0YXRlLCAwKSkKKwl7CisJICBpZiAob2xkX3N0YXRlID09IGN1cl9zdGF0ZSkKKwkgICAgbmV4dF9zdGFydF9pZHggPSBuZXh0X2NoYXJfaWR4OworCSAgZWxzZQorCSAgICBhdF9pbml0X3N0YXRlID0gMDsKKwl9CisKKyAgICAgIGlmIChjdXJfc3RhdGUtPmhhbHQpCisJeworCSAgLyogUmVhY2hlZCBhIGhhbHQgc3RhdGUuCisJICAgICBDaGVjayB0aGUgaGFsdCBzdGF0ZSBjYW4gc2F0aXNmeSB0aGUgY3VycmVudCBjb250ZXh0LiAgKi8KKwkgIGlmICghY3VyX3N0YXRlLT5oYXNfY29uc3RyYWludAorCSAgICAgIHx8IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAobWN0eCwgY3VyX3N0YXRlLAorCQkJCQkgICByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSkpCisJICAgIHsKKwkgICAgICAvKiBXZSBmb3VuZCBhbiBhcHByb3ByaWF0ZSBoYWx0IHN0YXRlLiAgKi8KKwkgICAgICBtYXRjaF9sYXN0ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisJICAgICAgbWF0Y2ggPSAxOworCisJICAgICAgLyogV2UgZm91bmQgYSBtYXRjaCwgZG8gbm90IG1vZGlmeSBtYXRjaF9maXJzdCBiZWxvdy4gICovCisJICAgICAgcF9tYXRjaF9maXJzdCA9IE5VTEw7CisJICAgICAgaWYgKCFmbF9sb25nZXN0X21hdGNoKQorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYgKHBfbWF0Y2hfZmlyc3QpCisgICAgKnBfbWF0Y2hfZmlyc3QgKz0gbmV4dF9zdGFydF9pZHg7CisKKyAgcmV0dXJuIG1hdGNoX2xhc3Q7Cit9CisKKy8qIENoZWNrIE5PREUgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGV4dC4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19oYWx0X25vZGVfY29udGV4dCAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGUsIHVuc2lnbmVkIGludCBjb250ZXh0KQoreworICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKyAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQgPSBkZmEtPm5vZGVzW25vZGVdLmNvbnN0cmFpbnQ7CisgIGlmICh0eXBlICE9IEVORF9PRl9SRSkKKyAgICByZXR1cm4gMDsKKyAgaWYgKCFjb25zdHJhaW50KQorICAgIHJldHVybiAxOworICBpZiAoTk9UX1NBVElTRllfTkVYVF9DT05TVFJBSU5UIChjb25zdHJhaW50LCBjb250ZXh0KSkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIENoZWNrIHRoZSBoYWx0IHN0YXRlIFNUQVRFIG1hdGNoIHRoZSBjdXJyZW50IGNvbnRleHQuCisgICBSZXR1cm4gMCBpZiBub3QgbWF0Y2gsIGlmIHRoZSBub2RlLCBTVEFURSBoYXMsIGlzIGEgaGFsdCBub2RlIGFuZAorICAgbWF0Y2ggdGhlIGNvbnRleHQsIHJldHVybiB0aGUgbm9kZS4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsIGludCBpZHgpCit7CisgIGludCBpOworICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKHN0YXRlLT5oYWx0KTsKKyNlbmRpZgorICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgaWR4LCBtY3R4LT5lZmxhZ3MpOworICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm5vZGVzLm5lbGVtOyArK2kpCisgICAgaWYgKGNoZWNrX2hhbHRfbm9kZV9jb250ZXh0IChtY3R4LT5kZmEsIHN0YXRlLT5ub2Rlcy5lbGVtc1tpXSwgY29udGV4dCkpCisgICAgICByZXR1cm4gc3RhdGUtPm5vZGVzLmVsZW1zW2ldOworICByZXR1cm4gMDsKK30KKworLyogQ29tcHV0ZSB0aGUgbmV4dCBub2RlIHRvIHdoaWNoICJORkEiIHRyYW5zaXQgZnJvbSBOT0RFKCJORkEiIGlzIGEgTkZBCisgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBERkEpLgorICAgUmV0dXJuIHRoZSBkZXN0aW5hdGlvbiBub2RlLCBhbmQgdXBkYXRlIEVQU19WSUFfTk9ERVMsIHJldHVybiAtMSBpbiBjYXNlCisgICBvZiBlcnJvcnMuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcHJvY2VlZF9uZXh0X25vZGUgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG5yZWdzLCByZWdtYXRjaF90ICpyZWdzLAorCQkgICBpbnQgKnBpZHgsIGludCBub2RlLCByZV9ub2RlX3NldCAqZXBzX3ZpYV9ub2RlcywKKwkJICAgc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCBpLCBlcnI7CisgIGlmIChJU19FUFNJTE9OX05PREUgKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkpCisgICAgeworICAgICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcyA9ICZtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdLT5ub2RlczsKKyAgICAgIHJlX25vZGVfc2V0ICplZGVzdHMgPSAmZGZhLT5lZGVzdHNbbm9kZV07CisgICAgICBpbnQgZGVzdF9ub2RlOworICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChlcHNfdmlhX25vZGVzLCBub2RlKTsKKyAgICAgIGlmIChCRSAoZXJyIDwgMCwgMCkpCisJcmV0dXJuIC0yOworICAgICAgLyogUGljayB1cCBhIHZhbGlkIGRlc3RpbmF0aW9uLCBvciByZXR1cm4gLTEgaWYgbm9uZSBpcyBmb3VuZC4gICovCisgICAgICBmb3IgKGRlc3Rfbm9kZSA9IC0xLCBpID0gMDsgaSA8IGVkZXN0cy0+bmVsZW07ICsraSkKKwl7CisJICBpbnQgY2FuZGlkYXRlID0gZWRlc3RzLT5lbGVtc1tpXTsKKwkgIGlmICghcmVfbm9kZV9zZXRfY29udGFpbnMgKGN1cl9ub2RlcywgY2FuZGlkYXRlKSkKKwkgICAgY29udGludWU7CisJICBpZiAoZGVzdF9ub2RlID09IC0xKQorCSAgICBkZXN0X25vZGUgPSBjYW5kaWRhdGU7CisKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIEluIG9yZGVyIHRvIGF2b2lkIGluZmluaXRlIGxvb3AgbGlrZSAiKGEqKSoiLCByZXR1cm4gdGhlIHNlY29uZAorCQkgZXBzaWxvbi10cmFuc2l0aW9uIGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBjb25zaWRlcmVkLiAgKi8KKwkgICAgICBpZiAocmVfbm9kZV9zZXRfY29udGFpbnMgKGVwc192aWFfbm9kZXMsIGRlc3Rfbm9kZSkpCisJCXJldHVybiBjYW5kaWRhdGU7CisKKwkgICAgICAvKiBPdGhlcndpc2UsIHB1c2ggdGhlIHNlY29uZCBlcHNpbG9uLXRyYW5zaXRpb24gb24gdGhlIGZhaWwgc3RhY2suICAqLworCSAgICAgIGVsc2UgaWYgKGZzICE9IE5VTEwKKwkJICAgICAgICYmIHB1c2hfZmFpbF9zdGFjayAoZnMsICpwaWR4LCBjYW5kaWRhdGUsIG5yZWdzLCByZWdzLAorCQkJCQkgICBlcHNfdmlhX25vZGVzKSkKKwkJcmV0dXJuIC0yOworCisJICAgICAgLyogV2Uga25vdyB3ZSBhcmUgZ29pbmcgdG8gZXhpdC4gICovCisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gZGVzdF9ub2RlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBuYWNjZXB0ZWQgPSAwOworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+bm9kZXNbbm9kZV0uYWNjZXB0X21iKQorCW5hY2NlcHRlZCA9IGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChkZmEsIG5vZGUsICZtY3R4LT5pbnB1dCwgKnBpZHgpOworICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICBpZiAodHlwZSA9PSBPUF9CQUNLX1JFRikKKwl7CisJICBpbnQgc3ViZXhwX2lkeCA9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCArIDE7CisJICBuYWNjZXB0ZWQgPSByZWdzW3N1YmV4cF9pZHhdLnJtX2VvIC0gcmVnc1tzdWJleHBfaWR4XS5ybV9zbzsKKwkgIGlmIChmcyAhPSBOVUxMKQorCSAgICB7CisJICAgICAgaWYgKHJlZ3Nbc3ViZXhwX2lkeF0ucm1fc28gPT0gLTEgfHwgcmVnc1tzdWJleHBfaWR4XS5ybV9lbyA9PSAtMSkKKwkJcmV0dXJuIC0xOworCSAgICAgIGVsc2UgaWYgKG5hY2NlcHRlZCkKKwkJeworCQkgIGNoYXIgKmJ1ZiA9IChjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworCQkgIGlmIChtZW1jbXAgKGJ1ZiArIHJlZ3Nbc3ViZXhwX2lkeF0ucm1fc28sIGJ1ZiArICpwaWR4LAorCQkJICAgICAgbmFjY2VwdGVkKSAhPSAwKQorCQkgICAgcmV0dXJuIC0xOworCQl9CisJICAgIH0KKworCSAgaWYgKG5hY2NlcHRlZCA9PSAwKQorCSAgICB7CisJICAgICAgaW50IGRlc3Rfbm9kZTsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbnNlcnQgKGVwc192aWFfbm9kZXMsIG5vZGUpOworCSAgICAgIGlmIChCRSAoZXJyIDwgMCwgMCkpCisJCXJldHVybiAtMjsKKwkgICAgICBkZXN0X25vZGUgPSBkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1swXTsKKwkgICAgICBpZiAocmVfbm9kZV9zZXRfY29udGFpbnMgKCZtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdLT5ub2RlcywKKwkJCQkJZGVzdF9ub2RlKSkKKwkJcmV0dXJuIGRlc3Rfbm9kZTsKKwkgICAgfQorCX0KKworICAgICAgaWYgKG5hY2NlcHRlZCAhPSAwCisJICB8fCBjaGVja19ub2RlX2FjY2VwdCAobWN0eCwgZGZhLT5ub2RlcyArIG5vZGUsICpwaWR4KSkKKwl7CisJICBpbnQgZGVzdF9ub2RlID0gZGZhLT5uZXh0c1tub2RlXTsKKwkgICpwaWR4ID0gKG5hY2NlcHRlZCA9PSAwKSA/ICpwaWR4ICsgMSA6ICpwaWR4ICsgbmFjY2VwdGVkOworCSAgaWYgKGZzICYmICgqcGlkeCA+IG1jdHgtPm1hdGNoX2xhc3QgfHwgbWN0eC0+c3RhdGVfbG9nWypwaWR4XSA9PSBOVUxMCisJCSAgICAgfHwgIXJlX25vZGVfc2V0X2NvbnRhaW5zICgmbWN0eC0+c3RhdGVfbG9nWypwaWR4XS0+bm9kZXMsCisJCQkJCSAgICAgICBkZXN0X25vZGUpKSkKKwkgICAgcmV0dXJuIC0xOworCSAgcmVfbm9kZV9zZXRfZW1wdHkgKGVwc192aWFfbm9kZXMpOworCSAgcmV0dXJuIGRlc3Rfbm9kZTsKKwl9CisgICAgfQorICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcHVzaF9mYWlsX3N0YWNrIChzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcywgaW50IHN0cl9pZHgsIGludCBkZXN0X25vZGUsCisJCSBpbnQgbnJlZ3MsIHJlZ21hdGNoX3QgKnJlZ3MsIHJlX25vZGVfc2V0ICplcHNfdmlhX25vZGVzKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IG51bSA9IGZzLT5udW0rKzsKKyAgaWYgKGZzLT5udW0gPT0gZnMtPmFsbG9jKQorICAgIHsKKyAgICAgIHN0cnVjdCByZV9mYWlsX3N0YWNrX2VudF90ICpuZXdfYXJyYXk7CisgICAgICBuZXdfYXJyYXkgPSByZWFsbG9jIChmcy0+c3RhY2ssIChzaXplb2YgKHN0cnVjdCByZV9mYWlsX3N0YWNrX2VudF90KQorCQkJCSAgICAgICAqIGZzLT5hbGxvYyAqIDIpKTsKKyAgICAgIGlmIChuZXdfYXJyYXkgPT0gTlVMTCkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIGZzLT5hbGxvYyAqPSAyOworICAgICAgZnMtPnN0YWNrID0gbmV3X2FycmF5OworICAgIH0KKyAgZnMtPnN0YWNrW251bV0uaWR4ID0gc3RyX2lkeDsKKyAgZnMtPnN0YWNrW251bV0ubm9kZSA9IGRlc3Rfbm9kZTsKKyAgZnMtPnN0YWNrW251bV0ucmVncyA9IHJlX21hbGxvYyAocmVnbWF0Y2hfdCwgbnJlZ3MpOworICBpZiAoZnMtPnN0YWNrW251bV0ucmVncyA9PSBOVUxMKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICBtZW1jcHkgKGZzLT5zdGFja1tudW1dLnJlZ3MsIHJlZ3MsIHNpemVvZiAocmVnbWF0Y2hfdCkgKiBucmVncyk7CisgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJmZzLT5zdGFja1tudW1dLmVwc192aWFfbm9kZXMsIGVwc192aWFfbm9kZXMpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcG9wX2ZhaWxfc3RhY2sgKHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzLCBpbnQgKnBpZHgsIGludCBucmVncywKKwkJcmVnbWF0Y2hfdCAqcmVncywgcmVfbm9kZV9zZXQgKmVwc192aWFfbm9kZXMpCit7CisgIGludCBudW0gPSAtLWZzLT5udW07CisgIGFzc2VydCAobnVtID49IDApOworICAqcGlkeCA9IGZzLT5zdGFja1tudW1dLmlkeDsKKyAgbWVtY3B5IChyZWdzLCBmcy0+c3RhY2tbbnVtXS5yZWdzLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbnJlZ3MpOworICByZV9ub2RlX3NldF9mcmVlIChlcHNfdmlhX25vZGVzKTsKKyAgcmVfZnJlZSAoZnMtPnN0YWNrW251bV0ucmVncyk7CisgICplcHNfdmlhX25vZGVzID0gZnMtPnN0YWNrW251bV0uZXBzX3ZpYV9ub2RlczsKKyAgcmV0dXJuIGZzLT5zdGFja1tudW1dLm5vZGU7Cit9CisKKy8qIFNldCB0aGUgcG9zaXRpb25zIHdoZXJlIHRoZSBzdWJleHByZXNzaW9ucyBhcmUgc3RhcnRzL2VuZHMgdG8gcmVnaXN0ZXJzCisgICBQTUFUQ0guCisgICBOb3RlOiBXZSBhc3N1bWUgdGhhdCBwbWF0Y2hbMF0gaXMgYWxyZWFkeSBzZXQsIGFuZAorICAgcG1hdGNoW2ldLnJtX3NvID09IHBtYXRjaFtpXS5ybV9lbyA9PSAtMSBmb3IgMCA8IGkgPCBubWF0Y2guICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3NldF9yZWdzIChjb25zdCByZWdleF90ICpwcmVnLCBjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHNpemVfdCBubWF0Y2gsCisJICByZWdtYXRjaF90ICpwbWF0Y2gsIGludCBmbF9iYWNrdHJhY2spCit7CisgIGNvbnN0IHJlX2RmYV90ICpkZmEgPSAoY29uc3QgcmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBpbnQgaWR4LCBjdXJfbm9kZTsKKyAgcmVfbm9kZV9zZXQgZXBzX3ZpYV9ub2RlczsKKyAgc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnM7CisgIHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgZnNfYm9keSA9IHsgMCwgMiwgTlVMTCB9OworICByZWdtYXRjaF90ICpwcmV2X2lkeF9tYXRjaDsKKyAgaW50IHByZXZfaWR4X21hdGNoX21hbGxvY2VkID0gMDsKKworI2lmZGVmIERFQlVHCisgIGFzc2VydCAobm1hdGNoID4gMSk7CisgIGFzc2VydCAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwpOworI2VuZGlmCisgIGlmIChmbF9iYWNrdHJhY2spCisgICAgeworICAgICAgZnMgPSAmZnNfYm9keTsKKyAgICAgIGZzLT5zdGFjayA9IHJlX21hbGxvYyAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QsIGZzLT5hbGxvYyk7CisgICAgICBpZiAoZnMtPnN0YWNrID09IE5VTEwpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgfQorICBlbHNlCisgICAgZnMgPSBOVUxMOworCisgIGN1cl9ub2RlID0gZGZhLT5pbml0X25vZGU7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZlcHNfdmlhX25vZGVzKTsKKworI2lmZGVmIEhBVkVfQUxMT0NBCisgIGlmIChfX2xpYmNfdXNlX2FsbG9jYSAobm1hdGNoICogc2l6ZW9mIChyZWdtYXRjaF90KSkpCisgICAgcHJldl9pZHhfbWF0Y2ggPSAocmVnbWF0Y2hfdCAqKSBhbGxvY2EgKG5tYXRjaCAqIHNpemVvZiAocmVnbWF0Y2hfdCkpOworICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICBwcmV2X2lkeF9tYXRjaCA9IHJlX21hbGxvYyAocmVnbWF0Y2hfdCwgbm1hdGNoKTsKKyAgICAgIGlmIChwcmV2X2lkeF9tYXRjaCA9PSBOVUxMKQorCXsKKwkgIGZyZWVfZmFpbF9zdGFja19yZXR1cm4gKGZzKTsKKwkgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIHByZXZfaWR4X21hdGNoX21hbGxvY2VkID0gMTsKKyAgICB9CisgIG1lbWNweSAocHJldl9pZHhfbWF0Y2gsIHBtYXRjaCwgc2l6ZW9mIChyZWdtYXRjaF90KSAqIG5tYXRjaCk7CisKKyAgZm9yIChpZHggPSBwbWF0Y2hbMF0ucm1fc287IGlkeCA8PSBwbWF0Y2hbMF0ucm1fZW8gOykKKyAgICB7CisgICAgICB1cGRhdGVfcmVncyAoZGZhLCBwbWF0Y2gsIHByZXZfaWR4X21hdGNoLCBjdXJfbm9kZSwgaWR4LCBubWF0Y2gpOworCisgICAgICBpZiAoaWR4ID09IHBtYXRjaFswXS5ybV9lbyAmJiBjdXJfbm9kZSA9PSBtY3R4LT5sYXN0X25vZGUpCisJeworCSAgaW50IHJlZ19pZHg7CisJICBpZiAoZnMpCisJICAgIHsKKwkgICAgICBmb3IgKHJlZ19pZHggPSAwOyByZWdfaWR4IDwgbm1hdGNoOyArK3JlZ19pZHgpCisJCWlmIChwbWF0Y2hbcmVnX2lkeF0ucm1fc28gPiAtMSAmJiBwbWF0Y2hbcmVnX2lkeF0ucm1fZW8gPT0gLTEpCisJCSAgYnJlYWs7CisJICAgICAgaWYgKHJlZ19pZHggPT0gbm1hdGNoKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmVwc192aWFfbm9kZXMpOworCQkgIGlmIChwcmV2X2lkeF9tYXRjaF9tYWxsb2NlZCkKKwkJICAgIHJlX2ZyZWUgKHByZXZfaWR4X21hdGNoKTsKKwkJICByZXR1cm4gZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoZnMpOworCQl9CisJICAgICAgY3VyX25vZGUgPSBwb3BfZmFpbF9zdGFjayAoZnMsICZpZHgsIG5tYXRjaCwgcG1hdGNoLAorCQkJCQkgJmVwc192aWFfbm9kZXMpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmZXBzX3ZpYV9ub2Rlcyk7CisJICAgICAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorCQlyZV9mcmVlIChwcmV2X2lkeF9tYXRjaCk7CisJICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCSAgICB9CisJfQorCisgICAgICAvKiBQcm9jZWVkIHRvIG5leHQgbm9kZS4gICovCisgICAgICBjdXJfbm9kZSA9IHByb2NlZWRfbmV4dF9ub2RlIChtY3R4LCBubWF0Y2gsIHBtYXRjaCwgJmlkeCwgY3VyX25vZGUsCisJCQkJICAgICZlcHNfdmlhX25vZGVzLCBmcyk7CisKKyAgICAgIGlmIChCRSAoY3VyX25vZGUgPCAwLCAwKSkKKwl7CisJICBpZiAoQkUgKGN1cl9ub2RlID09IC0yLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZlcHNfdmlhX25vZGVzKTsKKwkgICAgICBpZiAocHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQpCisJCXJlX2ZyZWUgKHByZXZfaWR4X21hdGNoKTsKKwkgICAgICBmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChmcyk7CisJICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwkgIGlmIChmcykKKwkgICAgY3VyX25vZGUgPSBwb3BfZmFpbF9zdGFjayAoZnMsICZpZHgsIG5tYXRjaCwgcG1hdGNoLAorCQkJCSAgICAgICAmZXBzX3ZpYV9ub2Rlcyk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmZXBzX3ZpYV9ub2Rlcyk7CisJICAgICAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorCQlyZV9mcmVlIChwcmV2X2lkeF9tYXRjaCk7CisJICAgICAgcmV0dXJuIFJFR19OT01BVENIOworCSAgICB9CisJfQorICAgIH0KKyAgcmVfbm9kZV9zZXRfZnJlZSAoJmVwc192aWFfbm9kZXMpOworICBpZiAocHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQpCisgICAgcmVfZnJlZSAocHJldl9pZHhfbWF0Y2gpOworICByZXR1cm4gZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoZnMpOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2ZyZWVfZmFpbF9zdGFja19yZXR1cm4gKHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzKQoreworICBpZiAoZnMpCisgICAgeworICAgICAgaW50IGZzX2lkeDsKKyAgICAgIGZvciAoZnNfaWR4ID0gMDsgZnNfaWR4IDwgZnMtPm51bTsgKytmc19pZHgpCisJeworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmZzLT5zdGFja1tmc19pZHhdLmVwc192aWFfbm9kZXMpOworCSAgcmVfZnJlZSAoZnMtPnN0YWNrW2ZzX2lkeF0ucmVncyk7CisJfQorICAgICAgcmVfZnJlZSAoZnMtPnN0YWNrKTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCit1cGRhdGVfcmVncyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVnbWF0Y2hfdCAqcG1hdGNoLAorCSAgICAgcmVnbWF0Y2hfdCAqcHJldl9pZHhfbWF0Y2gsIGludCBjdXJfbm9kZSwgaW50IGN1cl9pZHgsIGludCBubWF0Y2gpCit7CisgIGludCB0eXBlID0gZGZhLT5ub2Rlc1tjdXJfbm9kZV0udHlwZTsKKyAgaWYgKHR5cGUgPT0gT1BfT1BFTl9TVUJFWFApCisgICAgeworICAgICAgaW50IHJlZ19udW0gPSBkZmEtPm5vZGVzW2N1cl9ub2RlXS5vcHIuaWR4ICsgMTsKKworICAgICAgLyogV2UgYXJlIGF0IHRoZSBmaXJzdCBub2RlIG9mIHRoaXMgc3ViIGV4cHJlc3Npb24uICAqLworICAgICAgaWYgKHJlZ19udW0gPCBubWF0Y2gpCisJeworCSAgcG1hdGNoW3JlZ19udW1dLnJtX3NvID0gY3VyX2lkeDsKKwkgIHBtYXRjaFtyZWdfbnVtXS5ybV9lbyA9IC0xOworCX0KKyAgICB9CisgIGVsc2UgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQKQorICAgIHsKKyAgICAgIGludCByZWdfbnVtID0gZGZhLT5ub2Rlc1tjdXJfbm9kZV0ub3ByLmlkeCArIDE7CisgICAgICBpZiAocmVnX251bSA8IG5tYXRjaCkKKwl7CisJICAvKiBXZSBhcmUgYXQgdGhlIGxhc3Qgbm9kZSBvZiB0aGlzIHN1YiBleHByZXNzaW9uLiAgKi8KKwkgIGlmIChwbWF0Y2hbcmVnX251bV0ucm1fc28gPCBjdXJfaWR4KQorCSAgICB7CisJICAgICAgcG1hdGNoW3JlZ19udW1dLnJtX2VvID0gY3VyX2lkeDsKKwkgICAgICAvKiBUaGlzIGlzIGEgbm9uLWVtcHR5IG1hdGNoIG9yIHdlIGFyZSBub3QgaW5zaWRlIGFuIG9wdGlvbmFsCisJCSBzdWJleHByZXNzaW9uLiAgQWNjZXB0IHRoaXMgcmlnaHQgYXdheS4gICovCisJICAgICAgbWVtY3B5IChwcmV2X2lkeF9tYXRjaCwgcG1hdGNoLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbm1hdGNoKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKGRmYS0+bm9kZXNbY3VyX25vZGVdLm9wdF9zdWJleHAKKwkJICAmJiBwcmV2X2lkeF9tYXRjaFtyZWdfbnVtXS5ybV9zbyAhPSAtMSkKKwkJLyogV2UgdHJhbnNpdGVkIHRocm91Z2ggYW4gZW1wdHkgbWF0Y2ggZm9yIGFuIG9wdGlvbmFsCisJCSAgIHN1YmV4cHJlc3Npb24sIGxpa2UgKGE/KSosIGFuZCB0aGlzIGlzIG5vdCB0aGUgc3ViZXhwJ3MKKwkJICAgZmlyc3QgbWF0Y2guICBDb3B5IGJhY2sgdGhlIG9sZCBjb250ZW50IG9mIHRoZSByZWdpc3RlcnMKKwkJICAgc28gdGhhdCBtYXRjaGVzIG9mIGFuIGlubmVyIHN1YmV4cHJlc3Npb24gYXJlIHVuZG9uZSBhcworCQkgICB3ZWxsLCBsaWtlIGluICgoYT8pKSouICAqLworCQltZW1jcHkgKHBtYXRjaCwgcHJldl9pZHhfbWF0Y2gsIHNpemVvZiAocmVnbWF0Y2hfdCkgKiBubWF0Y2gpOworCSAgICAgIGVsc2UKKwkJLyogV2UgY29tcGxldGVkIGEgc3ViZXhwcmVzc2lvbiwgYnV0IGl0IG1heSBiZSBwYXJ0IG9mCisJCSAgIGFuIG9wdGlvbmFsIG9uZSwgc28gZG8gbm90IHVwZGF0ZSBQUkVWX0lEWF9NQVRDSC4gICovCisJCXBtYXRjaFtyZWdfbnVtXS5ybV9lbyA9IGN1cl9pZHg7CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgU1RBVEVfTE9HIGZyb20gdGhlIFNDVFgtPmxhc3Rfc3RyX2lkeCB0byAwCisgICBhbmQgc2lmdCB0aGUgbm9kZXMgaW4gZWFjaCBzdGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXMuCisgICBVcGRhdGVkIHN0YXRlX2xvZyB3aWxsIGJlIHdyb3RlIHRvIFNUQVRFX0xPRy4KKworICAgUnVsZXM6IFdlIHRocm93IGF3YXkgdGhlIE5vZGUgYGEnIGluIHRoZSBTVEFURV9MT0dbU1RSX0lEWF0gaWYuLi4KKyAgICAgMS4gV2hlbiBTVFJfSURYID09IE1BVENIX0xBU1QodGhlIGxhc3QgaW5kZXggaW4gdGhlIHN0YXRlX2xvZyk6CisJSWYgYGEnIGlzbid0IHRoZSBMQVNUX05PREUgYW5kIGBhJyBjYW4ndCBlcHNpbG9uIHRyYW5zaXQgdG8KKwl0aGUgTEFTVF9OT0RFLCB3ZSB0aHJvdyBhd2F5IHRoZSBub2RlIGBhJy4KKyAgICAgMi4gV2hlbiAwIDw9IFNUUl9JRFggPCBNQVRDSF9MQVNUIGFuZCBgYScgYWNjZXB0cworCXN0cmluZyBgcycgYW5kIHRyYW5zaXQgdG8gYGInOgorCWkuIElmICdiJyBpc24ndCBpbiB0aGUgU1RBVEVfTE9HW1NUUl9JRFgrc3RybGVuKCdzJyldLCB3ZSB0aHJvdworCSAgIGF3YXkgdGhlIG5vZGUgYGEnLgorCWlpLiBJZiAnYicgaXMgaW4gdGhlIFNUQVRFX0xPR1tTVFJfSURYK3N0cmxlbigncycpXSBidXQgJ2InIGlzCisJICAgIHRocm93biBhd2F5LCB3ZSB0aHJvdyBhd2F5IHRoZSBub2RlIGBhJy4KKyAgICAgMy4gV2hlbiAwIDw9IFNUUl9JRFggPCBNQVRDSF9MQVNUIGFuZCAnYScgZXBzaWxvbiB0cmFuc2l0IHRvICdiJzoKKwlpLiBJZiAnYicgaXNuJ3QgaW4gdGhlIFNUQVRFX0xPR1tTVFJfSURYXSwgd2UgdGhyb3cgYXdheSB0aGUKKwkgICBub2RlIGBhJy4KKwlpaS4gSWYgJ2InIGlzIGluIHRoZSBTVEFURV9MT0dbU1RSX0lEWF0gYnV0ICdiJyBpcyB0aHJvd24gYXdheSwKKwkgICAgd2UgdGhyb3cgYXdheSB0aGUgbm9kZSBgYScuICAqLworCisjZGVmaW5lIFNUQVRFX05PREVfQ09OVEFJTlMoc3RhdGUsbm9kZSkgXAorICAoKHN0YXRlKSAhPSBOVUxMICYmIHJlX25vZGVfc2V0X2NvbnRhaW5zICgmKHN0YXRlKS0+bm9kZXMsIG5vZGUpKQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3NpZnRfc3RhdGVzX2JhY2t3YXJkIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX3NpZnRfY29udGV4dF90ICpzY3R4KQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IG51bGxfY250ID0gMDsKKyAgaW50IHN0cl9pZHggPSBzY3R4LT5sYXN0X3N0cl9pZHg7CisgIHJlX25vZGVfc2V0IGN1cl9kZXN0OworCisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCAmJiBtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0gIT0gTlVMTCk7CisjZW5kaWYKKworICAvKiBCdWlsZCBzaWZ0ZWQgc3RhdGVfbG9nW3N0cl9pZHhdLiAgSXQgaGFzIHRoZSBub2RlcyB3aGljaCBjYW4gZXBzaWxvbgorICAgICB0cmFuc2l0IHRvIHRoZSBsYXN0X25vZGUgYW5kIHRoZSBsYXN0X25vZGUgaXRzZWxmLiAgKi8KKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgmY3VyX2Rlc3QsIHNjdHgtPmxhc3Rfbm9kZSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworICBlcnIgPSB1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSAobWN0eCwgc2N0eCwgc3RyX2lkeCwgJmN1cl9kZXN0KTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIGdvdG8gZnJlZV9yZXR1cm47CisKKyAgLyogVGhlbiBjaGVjayBlYWNoIHN0YXRlcyBpbiB0aGUgc3RhdGVfbG9nLiAgKi8KKyAgd2hpbGUgKHN0cl9pZHggPiAwKQorICAgIHsKKyAgICAgIC8qIFVwZGF0ZSBjb3VudGVycy4gICovCisgICAgICBudWxsX2NudCA9IChzY3R4LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID09IE5VTEwpID8gbnVsbF9jbnQgKyAxIDogMDsKKyAgICAgIGlmIChudWxsX2NudCA+IG1jdHgtPm1heF9tYl9lbGVtX2xlbikKKwl7CisJICBtZW1zZXQgKHNjdHgtPnNpZnRlZF9zdGF0ZXMsICdcMCcsCisJCSAgc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopICogc3RyX2lkeCk7CisJICByZV9ub2RlX3NldF9mcmVlICgmY3VyX2Rlc3QpOworCSAgcmV0dXJuIFJFR19OT0VSUk9SOworCX0KKyAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmY3VyX2Rlc3QpOworICAgICAgLS1zdHJfaWR4OworCisgICAgICBpZiAobWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdKQorCXsKKwkgIGVyciA9IGJ1aWxkX3NpZnRlZF9zdGF0ZXMgKG1jdHgsIHNjdHgsIHN0cl9pZHgsICZjdXJfZGVzdCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorCisgICAgICAvKiBBZGQgYWxsIHRoZSBub2RlcyB3aGljaCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKwkgLSBJdCBjYW4gZXBzaWxvbiB0cmFuc2l0IHRvIGEgbm9kZSBpbiBDVVJfREVTVC4KKwkgLSBJdCBpcyBpbiBDVVJfU1JDLgorCSBBbmQgdXBkYXRlIHN0YXRlX2xvZy4gICovCisgICAgICBlcnIgPSB1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSAobWN0eCwgc2N0eCwgc3RyX2lkeCwgJmN1cl9kZXN0KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIGZyZWVfcmV0dXJuOworICAgIH0KKyAgZXJyID0gUkVHX05PRVJST1I7CisgZnJlZV9yZXR1cm46CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZjdXJfZGVzdCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorYnVpbGRfc2lmdGVkX3N0YXRlcyAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJICAgICBpbnQgc3RyX2lkeCwgcmVfbm9kZV9zZXQgKmN1cl9kZXN0KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBjb25zdCByZV9ub2RlX3NldCAqY3VyX3NyYyA9ICZtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0tPm5vbl9lcHNfbm9kZXM7CisgIGludCBpOworCisgIC8qIFRoZW4gYnVpbGQgdGhlIG5leHQgc2lmdGVkIHN0YXRlLgorICAgICBXZSBidWlsZCB0aGUgbmV4dCBzaWZ0ZWQgc3RhdGUgb24gYGN1cl9kZXN0JywgYW5kIHVwZGF0ZQorICAgICBgc2lmdGVkX3N0YXRlc1tzdHJfaWR4XScgd2l0aCBgY3VyX2Rlc3QnLgorICAgICBOb3RlOgorICAgICBgY3VyX2Rlc3QnIGlzIHRoZSBzaWZ0ZWQgc3RhdGUgZnJvbSBgc3RhdGVfbG9nW3N0cl9pZHggKyAxXScuCisgICAgIGBjdXJfc3JjJyBwb2ludHMgdGhlIG5vZGVfc2V0IG9mIHRoZSBvbGQgYHN0YXRlX2xvZ1tzdHJfaWR4XScKKyAgICAgKHdpdGggdGhlIGVwc2lsb24gbm9kZXMgcHJlLWZpbHRlcmVkIG91dCkuICAqLworICBmb3IgKGkgPSAwOyBpIDwgY3VyX3NyYy0+bmVsZW07IGkrKykKKyAgICB7CisgICAgICBpbnQgcHJldl9ub2RlID0gY3VyX3NyYy0+ZWxlbXNbaV07CisgICAgICBpbnQgbmFjY2VwdGVkID0gMDsKKyAgICAgIGludCByZXQ7CisKKyNpZmRlZiBERUJVRworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW3ByZXZfbm9kZV0udHlwZTsKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9ERSAodHlwZSkpOworI2VuZGlmCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIC8qIElmIHRoZSBub2RlIG1heSBhY2NlcHQgYG11bHRpIGJ5dGUnLiAgKi8KKyAgICAgIGlmIChkZmEtPm5vZGVzW3ByZXZfbm9kZV0uYWNjZXB0X21iKQorCW5hY2NlcHRlZCA9IHNpZnRfc3RhdGVzX2l0ZXJfbWIgKG1jdHgsIHNjdHgsIHByZXZfbm9kZSwKKwkJCQkJIHN0cl9pZHgsIHNjdHgtPmxhc3Rfc3RyX2lkeCk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAgICAgLyogV2UgZG9uJ3QgY2hlY2sgYmFja3JlZmVyZW5jZXMgaGVyZS4KKwkgU2VlIHVwZGF0ZV9jdXJfc2lmdGVkX3N0YXRlKCkuICAqLworICAgICAgaWYgKCFuYWNjZXB0ZWQKKwkgICYmIGNoZWNrX25vZGVfYWNjZXB0IChtY3R4LCBkZmEtPm5vZGVzICsgcHJldl9ub2RlLCBzdHJfaWR4KQorCSAgJiYgU1RBVEVfTk9ERV9DT05UQUlOUyAoc2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4ICsgMV0sCisJCQkJICBkZmEtPm5leHRzW3ByZXZfbm9kZV0pKQorCW5hY2NlcHRlZCA9IDE7CisKKyAgICAgIGlmIChuYWNjZXB0ZWQgPT0gMCkKKwljb250aW51ZTsKKworICAgICAgaWYgKHNjdHgtPmxpbWl0cy5uZWxlbSkKKwl7CisJICBpbnQgdG9faWR4ID0gc3RyX2lkeCArIG5hY2NlcHRlZDsKKwkgIGlmIChjaGVja19kc3RfbGltaXRzIChtY3R4LCAmc2N0eC0+bGltaXRzLAorCQkJCWRmYS0+bmV4dHNbcHJldl9ub2RlXSwgdG9faWR4LAorCQkJCXByZXZfbm9kZSwgc3RyX2lkeCkpCisJICAgIGNvbnRpbnVlOworCX0KKyAgICAgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoY3VyX2Rlc3QsIHByZXZfbm9kZSk7CisgICAgICBpZiAoQkUgKHJldCA9PSAtMSwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucy4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2xlYW5fc3RhdGVfbG9nX2lmX25lZWRlZCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbmV4dF9zdGF0ZV9sb2dfaWR4KQoreworICBpbnQgdG9wID0gbWN0eC0+c3RhdGVfbG9nX3RvcDsKKworICBpZiAobmV4dF9zdGF0ZV9sb2dfaWR4ID49IG1jdHgtPmlucHV0LmJ1ZnNfbGVuCisgICAgICB8fCAobmV4dF9zdGF0ZV9sb2dfaWR4ID49IG1jdHgtPmlucHV0LnZhbGlkX2xlbgorCSAgJiYgbWN0eC0+aW5wdXQudmFsaWRfbGVuIDwgbWN0eC0+aW5wdXQubGVuKSkKKyAgICB7CisgICAgICByZWdfZXJyY29kZV90IGVycjsKKyAgICAgIGVyciA9IGV4dGVuZF9idWZmZXJzIChtY3R4KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKworICBpZiAodG9wIDwgbmV4dF9zdGF0ZV9sb2dfaWR4KQorICAgIHsKKyAgICAgIG1lbXNldCAobWN0eC0+c3RhdGVfbG9nICsgdG9wICsgMSwgJ1wwJywKKwkgICAgICBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgKiAobmV4dF9zdGF0ZV9sb2dfaWR4IC0gdG9wKSk7CisgICAgICBtY3R4LT5zdGF0ZV9sb2dfdG9wID0gbmV4dF9zdGF0ZV9sb2dfaWR4OworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK21lcmdlX3N0YXRlX2FycmF5IChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9kZmFzdGF0ZV90ICoqZHN0LAorCQkgICByZV9kZmFzdGF0ZV90ICoqc3JjLCBpbnQgbnVtKQoreworICBpbnQgc3RfaWR4OworICByZWdfZXJyY29kZV90IGVycjsKKyAgZm9yIChzdF9pZHggPSAwOyBzdF9pZHggPCBudW07ICsrc3RfaWR4KQorICAgIHsKKyAgICAgIGlmIChkc3Rbc3RfaWR4XSA9PSBOVUxMKQorCWRzdFtzdF9pZHhdID0gc3JjW3N0X2lkeF07CisgICAgICBlbHNlIGlmIChzcmNbc3RfaWR4XSAhPSBOVUxMKQorCXsKKwkgIHJlX25vZGVfc2V0IG1lcmdlZF9zZXQ7CisJICBlcnIgPSByZV9ub2RlX3NldF9pbml0X3VuaW9uICgmbWVyZ2VkX3NldCwgJmRzdFtzdF9pZHhdLT5ub2RlcywKKwkJCQkJJnNyY1tzdF9pZHhdLT5ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJICBkc3Rbc3RfaWR4XSA9IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIsIGRmYSwgJm1lcmdlZF9zZXQpOworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJm1lcmdlZF9zZXQpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCit1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LCBpbnQgc3RyX2lkeCwKKwkJCSByZV9ub2RlX3NldCAqZGVzdF9ub2RlcykKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKyAgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXM7CisgIGNhbmRpZGF0ZXMgPSAoKG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XSA9PSBOVUxMKSA/IE5VTEwKKwkJOiAmbWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdLT5ub2Rlcyk7CisKKyAgaWYgKGRlc3Rfbm9kZXMtPm5lbGVtID09IDApCisgICAgc2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4XSA9IE5VTEw7CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoY2FuZGlkYXRlcykKKwl7CisJICAvKiBBdCBmaXJzdCwgYWRkIHRoZSBub2RlcyB3aGljaCBjYW4gZXBzaWxvbiB0cmFuc2l0IHRvIGEgbm9kZSBpbgorCSAgICAgREVTVF9OT0RFLiAgKi8KKwkgIGVyciA9IGFkZF9lcHNpbG9uX3NyY19ub2RlcyAoZGZhLCBkZXN0X25vZGVzLCBjYW5kaWRhdGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKworCSAgLyogVGhlbiwgY2hlY2sgdGhlIGxpbWl0YXRpb25zIGluIHRoZSBjdXJyZW50IHNpZnRfY29udGV4dC4gICovCisJICBpZiAoc2N0eC0+bGltaXRzLm5lbGVtKQorCSAgICB7CisJICAgICAgZXJyID0gY2hlY2tfc3ViZXhwX2xpbWl0cyAoZGZhLCBkZXN0X25vZGVzLCBjYW5kaWRhdGVzLCAmc2N0eC0+bGltaXRzLAorCQkJCQkgbWN0eC0+YmtyZWZfZW50cywgc3RyX2lkeCk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlyZXR1cm4gZXJyOworCSAgICB9CisJfQorCisgICAgICBzY3R4LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZhLCBkZXN0X25vZGVzKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKworICBpZiAoY2FuZGlkYXRlcyAmJiBtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0tPmhhc19iYWNrcmVmKQorICAgIHsKKyAgICAgIGVyciA9IHNpZnRfc3RhdGVzX2JrcmVmIChtY3R4LCBzY3R4LCBzdHJfaWR4LCBjYW5kaWRhdGVzKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2FkZF9lcHNpbG9uX3NyY19ub2RlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMsCisJCSAgICAgICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcykKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKyAgaW50IGk7CisKKyAgcmVfZGZhc3RhdGVfdCAqc3RhdGUgPSByZV9hY3F1aXJlX3N0YXRlICgmZXJyLCBkZmEsIGRlc3Rfbm9kZXMpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKworICBpZiAoIXN0YXRlLT5pbnZlY2xvc3VyZS5hbGxvYykKKyAgICB7CisgICAgICBlcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJnN0YXRlLT5pbnZlY2xvc3VyZSwgZGVzdF9ub2Rlcy0+bmVsZW0pOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgZm9yIChpID0gMDsgaSA8IGRlc3Rfbm9kZXMtPm5lbGVtOyBpKyspCisJeworCSAgZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZzdGF0ZS0+aW52ZWNsb3N1cmUsCisJCQkJICAgZGZhLT5pbnZlY2xvc3VyZXMgKyBkZXN0X25vZGVzLT5lbGVtc1tpXSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICB9CisgIHJldHVybiByZV9ub2RlX3NldF9hZGRfaW50ZXJzZWN0IChkZXN0X25vZGVzLCBjYW5kaWRhdGVzLAorCQkJCSAgICAmc3RhdGUtPmludmVjbG9zdXJlKTsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitzdWJfZXBzaWxvbl9zcmNfbm9kZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlLCByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJICAgICAgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQoreworICAgIGludCBlY2xfaWR4OworICAgIHJlZ19lcnJjb2RlX3QgZXJyOworICAgIHJlX25vZGVfc2V0ICppbnZfZWNsb3N1cmUgPSBkZmEtPmludmVjbG9zdXJlcyArIG5vZGU7CisgICAgcmVfbm9kZV9zZXQgZXhjZXB0X25vZGVzOworICAgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZleGNlcHRfbm9kZXMpOworICAgIGZvciAoZWNsX2lkeCA9IDA7IGVjbF9pZHggPCBpbnZfZWNsb3N1cmUtPm5lbGVtOyArK2VjbF9pZHgpCisgICAgICB7CisJaW50IGN1cl9ub2RlID0gaW52X2VjbG9zdXJlLT5lbGVtc1tlY2xfaWR4XTsKKwlpZiAoY3VyX25vZGUgPT0gbm9kZSkKKwkgIGNvbnRpbnVlOworCWlmIChJU19FUFNJTE9OX05PREUgKGRmYS0+bm9kZXNbY3VyX25vZGVdLnR5cGUpKQorCSAgeworCSAgICBpbnQgZWRzdDEgPSBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMF07CisJICAgIGludCBlZHN0MiA9ICgoZGZhLT5lZGVzdHNbY3VyX25vZGVdLm5lbGVtID4gMSkKKwkJCSA/IGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5lbGVtc1sxXSA6IC0xKTsKKwkgICAgaWYgKCghcmVfbm9kZV9zZXRfY29udGFpbnMgKGludl9lY2xvc3VyZSwgZWRzdDEpCisJCSAmJiByZV9ub2RlX3NldF9jb250YWlucyAoZGVzdF9ub2RlcywgZWRzdDEpKQorCQl8fCAoZWRzdDIgPiAwCisJCSAgICAmJiAhcmVfbm9kZV9zZXRfY29udGFpbnMgKGludl9lY2xvc3VyZSwgZWRzdDIpCisJCSAgICAmJiByZV9ub2RlX3NldF9jb250YWlucyAoZGVzdF9ub2RlcywgZWRzdDIpKSkKKwkgICAgICB7CisJCWVyciA9IHJlX25vZGVfc2V0X2FkZF9pbnRlcnNlY3QgKCZleGNlcHRfbm9kZXMsIGNhbmRpZGF0ZXMsCisJCQkJCQkgZGZhLT5pbnZlY2xvc3VyZXMgKyBjdXJfbm9kZSk7CisJCWlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICB7CisJCSAgICByZV9ub2RlX3NldF9mcmVlICgmZXhjZXB0X25vZGVzKTsKKwkJICAgIHJldHVybiBlcnI7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKyAgICBmb3IgKGVjbF9pZHggPSAwOyBlY2xfaWR4IDwgaW52X2VjbG9zdXJlLT5uZWxlbTsgKytlY2xfaWR4KQorICAgICAgeworCWludCBjdXJfbm9kZSA9IGludl9lY2xvc3VyZS0+ZWxlbXNbZWNsX2lkeF07CisJaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoJmV4Y2VwdF9ub2RlcywgY3VyX25vZGUpKQorCSAgeworCSAgICBpbnQgaWR4ID0gcmVfbm9kZV9zZXRfY29udGFpbnMgKGRlc3Rfbm9kZXMsIGN1cl9ub2RlKSAtIDE7CisJICAgIHJlX25vZGVfc2V0X3JlbW92ZV9hdCAoZGVzdF9ub2RlcywgaWR4KTsKKwkgIH0KKyAgICAgIH0KKyAgICByZV9ub2RlX3NldF9mcmVlICgmZXhjZXB0X25vZGVzKTsKKyAgICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19kc3RfbGltaXRzIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX25vZGVfc2V0ICpsaW1pdHMsCisJCSAgaW50IGRzdF9ub2RlLCBpbnQgZHN0X2lkeCwgaW50IHNyY19ub2RlLCBpbnQgc3JjX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IGxpbV9pZHgsIHNyY19wb3MsIGRzdF9wb3M7CisKKyAgaW50IGRzdF9ia3JlZl9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBkc3RfaWR4KTsKKyAgaW50IHNyY19ia3JlZl9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBzcmNfaWR4KTsKKyAgZm9yIChsaW1faWR4ID0gMDsgbGltX2lkeCA8IGxpbWl0cy0+bmVsZW07ICsrbGltX2lkeCkKKyAgICB7CisgICAgICBpbnQgc3ViZXhwX2lkeDsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnQ7CisgICAgICBlbnQgPSBtY3R4LT5ia3JlZl9lbnRzICsgbGltaXRzLT5lbGVtc1tsaW1faWR4XTsKKyAgICAgIHN1YmV4cF9pZHggPSBkZmEtPm5vZGVzW2VudC0+bm9kZV0ub3ByLmlkeDsKKworICAgICAgZHN0X3BvcyA9IGNoZWNrX2RzdF9saW1pdHNfY2FsY19wb3MgKG1jdHgsIGxpbWl0cy0+ZWxlbXNbbGltX2lkeF0sCisJCQkJCSAgIHN1YmV4cF9pZHgsIGRzdF9ub2RlLCBkc3RfaWR4LAorCQkJCQkgICBkc3RfYmtyZWZfaWR4KTsKKyAgICAgIHNyY19wb3MgPSBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zIChtY3R4LCBsaW1pdHMtPmVsZW1zW2xpbV9pZHhdLAorCQkJCQkgICBzdWJleHBfaWR4LCBzcmNfbm9kZSwgc3JjX2lkeCwKKwkJCQkJICAgc3JjX2JrcmVmX2lkeCk7CisKKyAgICAgIC8qIEluIGNhc2Ugb2Y6CisJIDxzcmM+IDxkc3Q+ICggPHN1YmV4cD4gKQorCSAoIDxzdWJleHA+ICkgPHNyYz4gPGRzdD4KKwkgKCA8c3ViZXhwMT4gPHNyYz4gPHN1YmV4cDI+IDxkc3Q+IDxzdWJleHAzPiApICAqLworICAgICAgaWYgKHNyY19wb3MgPT0gZHN0X3BvcykKKwljb250aW51ZTsgLyogVGhpcyBpcyB1bnJlbGF0ZWQgbGltaXRhdGlvbi4gICovCisgICAgICBlbHNlCisJcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2RzdF9saW1pdHNfY2FsY19wb3NfMSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgYm91bmRhcmllcywKKwkJCSAgICAgaW50IHN1YmV4cF9pZHgsIGludCBmcm9tX25vZGUsIGludCBia3JlZl9pZHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGNvbnN0IHJlX25vZGVfc2V0ICplY2xvc3VyZXMgPSBkZmEtPmVjbG9zdXJlcyArIGZyb21fbm9kZTsKKyAgaW50IG5vZGVfaWR4OworCisgIC8qIEVsc2UsIHdlIGFyZSBvbiB0aGUgYm91bmRhcnk6IGV4YW1pbmUgdGhlIG5vZGVzIG9uIHRoZSBlcHNpbG9uCisgICAgIGNsb3N1cmUuICAqLworICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBlY2xvc3VyZXMtPm5lbGVtOyArK25vZGVfaWR4KQorICAgIHsKKyAgICAgIGludCBub2RlID0gZWNsb3N1cmVzLT5lbGVtc1tub2RlX2lkeF07CisgICAgICBzd2l0Y2ggKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkKKwl7CisJY2FzZSBPUF9CQUNLX1JFRjoKKwkgIGlmIChia3JlZl9pZHggIT0gLTEpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50ID0gbWN0eC0+YmtyZWZfZW50cyArIGJrcmVmX2lkeDsKKwkgICAgICBkbworCQl7CisJCSAgaW50IGRzdCwgY3BvczsKKworCQkgIGlmIChlbnQtPm5vZGUgIT0gbm9kZSkKKwkJICAgIGNvbnRpbnVlOworCisJCSAgaWYgKHN1YmV4cF9pZHggPCBCSVRTRVRfV09SRF9CSVRTCisJCSAgICAgICYmICEoZW50LT5lcHNfcmVhY2hhYmxlX3N1YmV4cHNfbWFwCisJCQkgICAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBzdWJleHBfaWR4KSkpCisJCSAgICBjb250aW51ZTsKKworCQkgIC8qIFJlY3Vyc2UgdHJ5aW5nIHRvIHJlYWNoIHRoZSBPUF9PUEVOX1NVQkVYUCBhbmQKKwkJICAgICBPUF9DTE9TRV9TVUJFWFAgY2FzZXMgYmVsb3cuICBCdXQsIGlmIHRoZQorCQkgICAgIGRlc3RpbmF0aW9uIG5vZGUgaXMgdGhlIHNhbWUgbm9kZSBhcyB0aGUgc291cmNlCisJCSAgICAgbm9kZSwgZG9uJ3QgcmVjdXJzZSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGFuCisJCSAgICAgaW5maW5pdGUgbG9vcDogYSByZWdleCB0aGF0IGV4aGliaXRzIHRoaXMgYmVoYXZpb3IKKwkJICAgICBpcyAoKVwxKlwxKiAgKi8KKwkJICBkc3QgPSBkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1swXTsKKwkJICBpZiAoZHN0ID09IGZyb21fbm9kZSkKKwkJICAgIHsKKwkJICAgICAgaWYgKGJvdW5kYXJpZXMgJiAxKQorCQkJcmV0dXJuIC0xOworCQkgICAgICBlbHNlIC8qIGlmIChib3VuZGFyaWVzICYgMikgKi8KKwkJCXJldHVybiAwOworCQkgICAgfQorCisJCSAgY3BvcyA9CisJCSAgICBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgKG1jdHgsIGJvdW5kYXJpZXMsIHN1YmV4cF9pZHgsCisJCQkJCQkgZHN0LCBia3JlZl9pZHgpOworCQkgIGlmIChjcG9zID09IC0xIC8qICYmIChib3VuZGFyaWVzICYgMSkgKi8pCisJCSAgICByZXR1cm4gLTE7CisJCSAgaWYgKGNwb3MgPT0gMCAmJiAoYm91bmRhcmllcyAmIDIpKQorCQkgICAgcmV0dXJuIDA7CisKKwkJICBpZiAoc3ViZXhwX2lkeCA8IEJJVFNFVF9XT1JEX0JJVFMpCisJCSAgICBlbnQtPmVwc19yZWFjaGFibGVfc3ViZXhwc19tYXAKKwkJICAgICAgJj0gfigoYml0c2V0X3dvcmRfdCkgMSA8PCBzdWJleHBfaWR4KTsKKwkJfQorCSAgICAgIHdoaWxlIChlbnQrKy0+bW9yZSk7CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBPUF9PUEVOX1NVQkVYUDoKKwkgIGlmICgoYm91bmRhcmllcyAmIDEpICYmIHN1YmV4cF9pZHggPT0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4KQorCSAgICByZXR1cm4gLTE7CisJICBicmVhazsKKworCWNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorCSAgaWYgKChib3VuZGFyaWVzICYgMikgJiYgc3ViZXhwX2lkeCA9PSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJICAgIHJldHVybiAwOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBicmVhazsKKwl9CisgICAgfQorCisgIHJldHVybiAoYm91bmRhcmllcyAmIDIpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBsaW1pdCwKKwkJCSAgIGludCBzdWJleHBfaWR4LCBpbnQgZnJvbV9ub2RlLCBpbnQgc3RyX2lkeCwKKwkJCSAgIGludCBia3JlZl9pZHgpCit7CisgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpsaW0gPSBtY3R4LT5ia3JlZl9lbnRzICsgbGltaXQ7CisgIGludCBib3VuZGFyaWVzOworCisgIC8qIElmIHdlIGFyZSBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgc3ViZXhwcmVzc2lvbiwgcmV0dXJuIC0xIG9yIDEuICAqLworICBpZiAoc3RyX2lkeCA8IGxpbS0+c3ViZXhwX2Zyb20pCisgICAgcmV0dXJuIC0xOworCisgIGlmIChsaW0tPnN1YmV4cF90byA8IHN0cl9pZHgpCisgICAgcmV0dXJuIDE7CisKKyAgLyogSWYgd2UgYXJlIHdpdGhpbiB0aGUgc3ViZXhwcmVzc2lvbiwgcmV0dXJuIDAuICAqLworICBib3VuZGFyaWVzID0gKHN0cl9pZHggPT0gbGltLT5zdWJleHBfZnJvbSk7CisgIGJvdW5kYXJpZXMgfD0gKHN0cl9pZHggPT0gbGltLT5zdWJleHBfdG8pIDw8IDE7CisgIGlmIChib3VuZGFyaWVzID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgLyogRWxzZSwgZXhhbWluZSBlcHNpbG9uIGNsb3N1cmUuICAqLworICByZXR1cm4gY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIChtY3R4LCBib3VuZGFyaWVzLCBzdWJleHBfaWR4LAorCQkJCSAgICAgIGZyb21fbm9kZSwgYmtyZWZfaWR4KTsKK30KKworLyogQ2hlY2sgdGhlIGxpbWl0YXRpb25zIG9mIHN1YiBleHByZXNzaW9ucyBMSU1JVFMsIGFuZCByZW1vdmUgdGhlIG5vZGVzCisgICB3aGljaCBhcmUgYWdhaW5zdCBsaW1pdGF0aW9ucyBmcm9tIERFU1RfTk9ERVMuICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfc3ViZXhwX2xpbWl0cyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMsCisJCSAgICAgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMsIHJlX25vZGVfc2V0ICpsaW1pdHMsCisJCSAgICAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmJrcmVmX2VudHMsIGludCBzdHJfaWR4KQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IG5vZGVfaWR4LCBsaW1faWR4OworCisgIGZvciAobGltX2lkeCA9IDA7IGxpbV9pZHggPCBsaW1pdHMtPm5lbGVtOyArK2xpbV9pZHgpCisgICAgeworICAgICAgaW50IHN1YmV4cF9pZHg7CisgICAgICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50OworICAgICAgZW50ID0gYmtyZWZfZW50cyArIGxpbWl0cy0+ZWxlbXNbbGltX2lkeF07CisKKyAgICAgIGlmIChzdHJfaWR4IDw9IGVudC0+c3ViZXhwX2Zyb20gfHwgZW50LT5zdHJfaWR4IDwgc3RyX2lkeCkKKwljb250aW51ZTsgLyogVGhpcyBpcyB1bnJlbGF0ZWQgbGltaXRhdGlvbi4gICovCisKKyAgICAgIHN1YmV4cF9pZHggPSBkZmEtPm5vZGVzW2VudC0+bm9kZV0ub3ByLmlkeDsKKyAgICAgIGlmIChlbnQtPnN1YmV4cF90byA9PSBzdHJfaWR4KQorCXsKKwkgIGludCBvcHNfbm9kZSA9IC0xOworCSAgaW50IGNsc19ub2RlID0gLTE7CisJICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBkZXN0X25vZGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKwkgICAgeworCSAgICAgIGludCBub2RlID0gZGVzdF9ub2Rlcy0+ZWxlbXNbbm9kZV9pZHhdOworCSAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworCSAgICAgIGlmICh0eXBlID09IE9QX09QRU5fU1VCRVhQCisJCSAgJiYgc3ViZXhwX2lkeCA9PSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJCW9wc19ub2RlID0gbm9kZTsKKwkgICAgICBlbHNlIGlmICh0eXBlID09IE9QX0NMT1NFX1NVQkVYUAorCQkgICAgICAgJiYgc3ViZXhwX2lkeCA9PSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJCWNsc19ub2RlID0gbm9kZTsKKwkgICAgfQorCisJICAvKiBDaGVjayB0aGUgbGltaXRhdGlvbiBvZiB0aGUgb3BlbiBzdWJleHByZXNzaW9uLiAgKi8KKwkgIC8qIE5vdGUgdGhhdCAoZW50LT5zdWJleHBfdG8gPSBzdHJfaWR4ICE9IGVudC0+c3ViZXhwX2Zyb20pLiAgKi8KKwkgIGlmIChvcHNfbm9kZSA+PSAwKQorCSAgICB7CisJICAgICAgZXJyID0gc3ViX2Vwc2lsb25fc3JjX25vZGVzIChkZmEsIG9wc19ub2RlLCBkZXN0X25vZGVzLAorCQkJCQkgICBjYW5kaWRhdGVzKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKworCSAgLyogQ2hlY2sgdGhlIGxpbWl0YXRpb24gb2YgdGhlIGNsb3NlIHN1YmV4cHJlc3Npb24uICAqLworCSAgaWYgKGNsc19ub2RlID49IDApCisJICAgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGRlc3Rfbm9kZXMtPm5lbGVtOyArK25vZGVfaWR4KQorCSAgICAgIHsKKwkJaW50IG5vZGUgPSBkZXN0X25vZGVzLT5lbGVtc1tub2RlX2lkeF07CisJCWlmICghcmVfbm9kZV9zZXRfY29udGFpbnMgKGRmYS0+aW52ZWNsb3N1cmVzICsgbm9kZSwKKwkJCQkJICAgY2xzX25vZGUpCisJCSAgICAmJiAhcmVfbm9kZV9zZXRfY29udGFpbnMgKGRmYS0+ZWNsb3N1cmVzICsgbm9kZSwKKwkJCQkJICAgICAgY2xzX25vZGUpKQorCQkgIHsKKwkJICAgIC8qIEl0IGlzIGFnYWluc3QgdGhpcyBsaW1pdGF0aW9uLgorCQkgICAgICAgUmVtb3ZlIGl0IGZvcm0gdGhlIGN1cnJlbnQgc2lmdGVkIHN0YXRlLiAgKi8KKwkJICAgIGVyciA9IHN1Yl9lcHNpbG9uX3NyY19ub2RlcyAoZGZhLCBub2RlLCBkZXN0X25vZGVzLAorCQkJCQkJIGNhbmRpZGF0ZXMpOworCQkgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgICAgICByZXR1cm4gZXJyOworCQkgICAgLS1ub2RlX2lkeDsKKwkJICB9CisJICAgICAgfQorCX0KKyAgICAgIGVsc2UgLyogKGVudC0+c3ViZXhwX3RvICE9IHN0cl9pZHgpICAqLworCXsKKwkgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGRlc3Rfbm9kZXMtPm5lbGVtOyArK25vZGVfaWR4KQorCSAgICB7CisJICAgICAgaW50IG5vZGUgPSBkZXN0X25vZGVzLT5lbGVtc1tub2RlX2lkeF07CisJICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisJICAgICAgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQIHx8IHR5cGUgPT0gT1BfT1BFTl9TVUJFWFApCisJCXsKKwkJICBpZiAoc3ViZXhwX2lkeCAhPSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJCSAgICBjb250aW51ZTsKKwkJICAvKiBJdCBpcyBhZ2FpbnN0IHRoaXMgbGltaXRhdGlvbi4KKwkJICAgICBSZW1vdmUgaXQgZm9ybSB0aGUgY3VycmVudCBzaWZ0ZWQgc3RhdGUuICAqLworCQkgIGVyciA9IHN1Yl9lcHNpbG9uX3NyY19ub2RlcyAoZGZhLCBub2RlLCBkZXN0X25vZGVzLAorCQkJCQkgICAgICAgY2FuZGlkYXRlcyk7CisJCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgICAgcmV0dXJuIGVycjsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3NpZnRfc3RhdGVzX2JrcmVmIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkgICBpbnQgc3RyX2lkeCwgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgbm9kZV9pZHgsIG5vZGU7CisgIHJlX3NpZnRfY29udGV4dF90IGxvY2FsX3NjdHg7CisgIGludCBmaXJzdF9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBzdHJfaWR4KTsKKworICBpZiAoZmlyc3RfaWR4ID09IC0xKQorICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKworICBsb2NhbF9zY3R4LnNpZnRlZF9zdGF0ZXMgPSBOVUxMOyAvKiBNYXJrIHRoYXQgaXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQuICAqLworCisgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGNhbmRpZGF0ZXMtPm5lbGVtOyArK25vZGVfaWR4KQorICAgIHsKKyAgICAgIGludCBlbmFibGVkX2lkeDsKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlOworICAgICAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmVudHJ5OworICAgICAgbm9kZSA9IGNhbmRpZGF0ZXMtPmVsZW1zW25vZGVfaWR4XTsKKyAgICAgIHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisgICAgICAvKiBBdm9pZCBpbmZpbml0ZSBsb29wIGZvciB0aGUgUkVzIGxpa2UgIigpXDErIi4gICovCisgICAgICBpZiAobm9kZSA9PSBzY3R4LT5sYXN0X25vZGUgJiYgc3RyX2lkeCA9PSBzY3R4LT5sYXN0X3N0cl9pZHgpCisJY29udGludWU7CisgICAgICBpZiAodHlwZSAhPSBPUF9CQUNLX1JFRikKKwljb250aW51ZTsKKworICAgICAgZW50cnkgPSBtY3R4LT5ia3JlZl9lbnRzICsgZmlyc3RfaWR4OworICAgICAgZW5hYmxlZF9pZHggPSBmaXJzdF9pZHg7CisgICAgICBkbworCXsKKwkgIGludCBzdWJleHBfbGVuOworCSAgaW50IHRvX2lkeDsKKwkgIGludCBkc3Rfbm9kZTsKKwkgIGludCByZXQ7CisJICByZV9kZmFzdGF0ZV90ICpjdXJfc3RhdGU7CisKKwkgIGlmIChlbnRyeS0+bm9kZSAhPSBub2RlKQorCSAgICBjb250aW51ZTsKKwkgIHN1YmV4cF9sZW4gPSBlbnRyeS0+c3ViZXhwX3RvIC0gZW50cnktPnN1YmV4cF9mcm9tOworCSAgdG9faWR4ID0gc3RyX2lkeCArIHN1YmV4cF9sZW47CisJICBkc3Rfbm9kZSA9IChzdWJleHBfbGVuID8gZGZhLT5uZXh0c1tub2RlXQorCQkgICAgICA6IGRmYS0+ZWRlc3RzW25vZGVdLmVsZW1zWzBdKTsKKworCSAgaWYgKHRvX2lkeCA+IHNjdHgtPmxhc3Rfc3RyX2lkeAorCSAgICAgIHx8IHNjdHgtPnNpZnRlZF9zdGF0ZXNbdG9faWR4XSA9PSBOVUxMCisJICAgICAgfHwgIVNUQVRFX05PREVfQ09OVEFJTlMgKHNjdHgtPnNpZnRlZF9zdGF0ZXNbdG9faWR4XSwgZHN0X25vZGUpCisJICAgICAgfHwgY2hlY2tfZHN0X2xpbWl0cyAobWN0eCwgJnNjdHgtPmxpbWl0cywgbm9kZSwKKwkJCQkgICBzdHJfaWR4LCBkc3Rfbm9kZSwgdG9faWR4KSkKKwkgICAgY29udGludWU7CisKKwkgIGlmIChsb2NhbF9zY3R4LnNpZnRlZF9zdGF0ZXMgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIGxvY2FsX3NjdHggPSAqc2N0eDsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZsb2NhbF9zY3R4LmxpbWl0cywgJnNjdHgtPmxpbWl0cyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBsb2NhbF9zY3R4Lmxhc3Rfbm9kZSA9IG5vZGU7CisJICBsb2NhbF9zY3R4Lmxhc3Rfc3RyX2lkeCA9IHN0cl9pZHg7CisJICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZsb2NhbF9zY3R4LmxpbWl0cywgZW5hYmxlZF9pZHgpOworCSAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkgICAgeworCSAgICAgIGVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgY3VyX3N0YXRlID0gbG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdOworCSAgZXJyID0gc2lmdF9zdGF0ZXNfYmFja3dhcmQgKG1jdHgsICZsb2NhbF9zY3R4KTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBmcmVlX3JldHVybjsKKwkgIGlmIChzY3R4LT5saW1pdGVkX3N0YXRlcyAhPSBOVUxMKQorCSAgICB7CisJICAgICAgZXJyID0gbWVyZ2Vfc3RhdGVfYXJyYXkgKGRmYSwgc2N0eC0+bGltaXRlZF9zdGF0ZXMsCisJCQkJICAgICAgIGxvY2FsX3NjdHguc2lmdGVkX3N0YXRlcywKKwkJCQkgICAgICAgc3RyX2lkeCArIDEpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgbG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID0gY3VyX3N0YXRlOworCSAgcmVfbm9kZV9zZXRfcmVtb3ZlICgmbG9jYWxfc2N0eC5saW1pdHMsIGVuYWJsZWRfaWR4KTsKKworCSAgLyogbWN0eC0+YmtyZWZfZW50cyBtYXkgaGF2ZSBjaGFuZ2VkLCByZWxvYWQgdGhlIHBvaW50ZXIuICAqLworCSAgZW50cnkgPSBtY3R4LT5ia3JlZl9lbnRzICsgZW5hYmxlZF9pZHg7CisJfQorICAgICAgd2hpbGUgKGVuYWJsZWRfaWR4KyssIGVudHJ5KystPm1vcmUpOworICAgIH0KKyAgZXJyID0gUkVHX05PRVJST1I7CisgZnJlZV9yZXR1cm46CisgIGlmIChsb2NhbF9zY3R4LnNpZnRlZF9zdGF0ZXMgIT0gTlVMTCkKKyAgICB7CisgICAgICByZV9ub2RlX3NldF9mcmVlICgmbG9jYWxfc2N0eC5saW1pdHMpOworICAgIH0KKworICByZXR1cm4gZXJyOworfQorCisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3NpZnRfc3RhdGVzX2l0ZXJfbWIgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsCisJCSAgICAgaW50IG5vZGVfaWR4LCBpbnQgc3RyX2lkeCwgaW50IG1heF9zdHJfaWR4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpbnQgbmFjY2VwdGVkOworICAvKiBDaGVjayB0aGUgbm9kZSBjYW4gYWNjZXB0IGBtdWx0aSBieXRlJy4gICovCisgIG5hY2NlcHRlZCA9IGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChkZmEsIG5vZGVfaWR4LCAmbWN0eC0+aW5wdXQsIHN0cl9pZHgpOworICBpZiAobmFjY2VwdGVkID4gMCAmJiBzdHJfaWR4ICsgbmFjY2VwdGVkIDw9IG1heF9zdHJfaWR4ICYmCisgICAgICAhU1RBVEVfTk9ERV9DT05UQUlOUyAoc2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4ICsgbmFjY2VwdGVkXSwKKwkJCSAgICBkZmEtPm5leHRzW25vZGVfaWR4XSkpCisgICAgLyogVGhlIG5vZGUgY2FuJ3QgYWNjZXB0IHRoZSBgbXVsdGkgYnl0ZScsIG9yIHRoZQorICAgICAgIGRlc3RpbmF0aW9uIHdhcyBhbHJlYWR5IHRocm93biBhd2F5LCB0aGVuIHRoZSBub2RlCisgICAgICAgY291bGQndCBhY2NlcHQgdGhlIGN1cnJlbnQgaW5wdXQgYG11bHRpIGJ5dGUnLiAgICovCisgICAgbmFjY2VwdGVkID0gMDsKKyAgLyogT3RoZXJ3aXNlLCBpdCBpcyBzdXJlIHRoYXQgdGhlIG5vZGUgY291bGQgYWNjZXB0CisgICAgIGBuYWNjZXB0ZWQnIGJ5dGVzIGlucHV0LiAgKi8KKyAgcmV0dXJuIG5hY2NlcHRlZDsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisMCisvKiBGdW5jdGlvbnMgZm9yIHN0YXRlIHRyYW5zaXRpb24uICAqLworCisvKiBSZXR1cm4gdGhlIG5leHQgc3RhdGUgdG8gd2hpY2ggdGhlIGN1cnJlbnQgc3RhdGUgU1RBVEUgd2lsbCB0cmFuc2l0IGJ5CisgICBhY2NlcHRpbmcgdGhlIGN1cnJlbnQgaW5wdXQgYnl0ZSwgYW5kIHVwZGF0ZSBTVEFURV9MT0cgaWYgbmVjZXNzYXJ5LgorICAgSWYgU1RBVEUgY2FuIGFjY2VwdCBhIG11bHRpYnl0ZSBjaGFyL2NvbGxhdGluZyBlbGVtZW50L2JhY2sgcmVmZXJlbmNlCisgICB1cGRhdGUgdGhlIGRlc3RpbmF0aW9uIG9mIFNUQVRFX0xPRy4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCit0cmFuc2l0X3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkgICAgICAgcmVfZGZhc3RhdGVfdCAqc3RhdGUpCit7CisgIHJlX2RmYXN0YXRlX3QgKip0cnRhYmxlOworICB1bnNpZ25lZCBjaGFyIGNoOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogSWYgdGhlIGN1cnJlbnQgc3RhdGUgY2FuIGFjY2VwdCBtdWx0aWJ5dGUuICAqLworICBpZiAoQkUgKHN0YXRlLT5hY2NlcHRfbWIsIDApKQorICAgIHsKKyAgICAgICplcnIgPSB0cmFuc2l0X3N0YXRlX21iIChtY3R4LCBzdGF0ZSk7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgIC8qIFRoZW4gZGVjaWRlIHRoZSBuZXh0IHN0YXRlIHdpdGggdGhlIHNpbmdsZSBieXRlLiAgKi8KKyNpZiAwCisgIGlmICgwKQorICAgIC8qIGRvbid0IHVzZSB0cmFuc2l0aW9uIHRhYmxlICAqLworICAgIHJldHVybiB0cmFuc2l0X3N0YXRlX3NiIChlcnIsIG1jdHgsIHN0YXRlKTsKKyNlbmRpZgorCisgIC8qIFVzZSB0cmFuc2l0aW9uIHRhYmxlICAqLworICBjaCA9IHJlX3N0cmluZ19mZXRjaF9ieXRlICgmbWN0eC0+aW5wdXQpOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHRydGFibGUgPSBzdGF0ZS0+dHJ0YWJsZTsKKyAgICAgIGlmIChCRSAodHJ0YWJsZSAhPSBOVUxMLCAxKSkKKwlyZXR1cm4gdHJ0YWJsZVtjaF07CisKKyAgICAgIHRydGFibGUgPSBzdGF0ZS0+d29yZF90cnRhYmxlOworICAgICAgaWYgKEJFICh0cnRhYmxlICE9IE5VTEwsIDEpKQorCXsKKwkgIHVuc2lnbmVkIGludCBjb250ZXh0OworCSAgY29udGV4dAorCSAgICA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsCisJCQkJICAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpIC0gMSwKKwkJCQkgICAgbWN0eC0+ZWZsYWdzKTsKKwkgIGlmIChJU19XT1JEX0NPTlRFWFQgKGNvbnRleHQpKQorCSAgICByZXR1cm4gdHJ0YWJsZVtjaCArIFNCQ19NQVhdOworCSAgZWxzZQorCSAgICByZXR1cm4gdHJ0YWJsZVtjaF07CisJfQorCisgICAgICBpZiAoIWJ1aWxkX3RydGFibGUgKG1jdHgtPmRmYSwgc3RhdGUpKQorCXsKKwkgICplcnIgPSBSRUdfRVNQQUNFOworCSAgcmV0dXJuIE5VTEw7CisJfQorCisgICAgICAvKiBSZXRyeSwgd2Ugbm93IGhhdmUgYSB0cmFuc2l0aW9uIHRhYmxlLiAgKi8KKyAgICB9Cit9CisKKy8qIFVwZGF0ZSB0aGUgc3RhdGVfbG9nIGlmIHdlIG5lZWQgKi8KK3JlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK21lcmdlX3N0YXRlX3dpdGhfbG9nIChyZWdfZXJyY29kZV90ICplcnIsIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJICAgICAgcmVfZGZhc3RhdGVfdCAqbmV4dF9zdGF0ZSkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IGN1cl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KTsKKworICBpZiAoY3VyX2lkeCA+IG1jdHgtPnN0YXRlX2xvZ190b3ApCisgICAgeworICAgICAgbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID0gbmV4dF9zdGF0ZTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ190b3AgPSBjdXJfaWR4OworICAgIH0KKyAgZWxzZSBpZiAobWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID09IDApCisgICAgeworICAgICAgbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID0gbmV4dF9zdGF0ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICpwc3RhdGU7CisgICAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyAgICAgIHJlX25vZGVfc2V0IG5leHRfbm9kZXMsICpsb2dfbm9kZXMsICp0YWJsZV9ub2RlcyA9IE5VTEw7CisgICAgICAvKiBJZiAoc3RhdGVfbG9nW2N1cl9pZHhdICE9IDApLCBpdCBpbXBsaWVzIHRoYXQgY3VyX2lkeCBpcworCSB0aGUgZGVzdGluYXRpb24gb2YgYSBtdWx0aWJ5dGUgY2hhci9jb2xsYXRpbmcgZWxlbWVudC8KKwkgYmFjayByZWZlcmVuY2UuICBUaGVuIHRoZSBuZXh0IHN0YXRlIGlzIHRoZSB1bmlvbiBzZXQgb2YKKwkgdGhlc2UgZGVzdGluYXRpb25zIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUgdHJhbnNpdGlvbiB0YWJsZS4gICovCisgICAgICBwc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbY3VyX2lkeF07CisgICAgICBsb2dfbm9kZXMgPSBwc3RhdGUtPmVudHJhbmNlX25vZGVzOworICAgICAgaWYgKG5leHRfc3RhdGUgIT0gTlVMTCkKKwl7CisJICB0YWJsZV9ub2RlcyA9IG5leHRfc3RhdGUtPmVudHJhbmNlX25vZGVzOworCSAgKmVyciA9IHJlX25vZGVfc2V0X2luaXRfdW5pb24gKCZuZXh0X25vZGVzLCB0YWJsZV9ub2RlcywKKwkJCQkJICAgICBsb2dfbm9kZXMpOworCSAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZQorCW5leHRfbm9kZXMgPSAqbG9nX25vZGVzOworICAgICAgLyogTm90ZTogV2UgYWxyZWFkeSBhZGQgdGhlIG5vZGVzIG9mIHRoZSBpbml0aWFsIHN0YXRlLAorCSB0aGVuIHdlIGRvbid0IG5lZWQgdG8gYWRkIHRoZW0gaGVyZS4gICovCisKKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LAorCQkJCSAgICAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpIC0gMSwKKwkJCQkgICAgICBtY3R4LT5lZmxhZ3MpOworICAgICAgbmV4dF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XQorCT0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0IChlcnIsIGRmYSwgJm5leHRfbm9kZXMsIGNvbnRleHQpOworICAgICAgLyogV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBlcnJvcnMgaGVyZSwgc2luY2UgdGhlIHJldHVybiB2YWx1ZSBvZgorCSB0aGlzIGZ1bmN0aW9uIGlzIG5leHRfc3RhdGUgYW5kIEVSUiBpcyBhbHJlYWR5IHNldC4gICovCisKKyAgICAgIGlmICh0YWJsZV9ub2RlcyAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKyAgICB9CisKKyAgaWYgKEJFIChkZmEtPm5iYWNrcmVmLCAwKSAmJiBuZXh0X3N0YXRlICE9IE5VTEwpCisgICAgeworICAgICAgLyogQ2hlY2sgT1BfT1BFTl9TVUJFWFAgaW4gdGhlIGN1cnJlbnQgc3RhdGUgaW4gY2FzZSB0aGF0IHdlIHVzZSB0aGVtCisJIGxhdGVyLiAgV2UgbXVzdCBjaGVjayB0aGVtIGhlcmUsIHNpbmNlIHRoZSBiYWNrIHJlZmVyZW5jZXMgaW4gdGhlCisJIG5leHQgc3RhdGUgbWlnaHQgdXNlIHRoZW0uICAqLworICAgICAgKmVyciA9IGNoZWNrX3N1YmV4cF9tYXRjaGluZ190b3AgKG1jdHgsICZuZXh0X3N0YXRlLT5ub2RlcywKKwkJCQkJY3VyX2lkeCk7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBOVUxMOworCisgICAgICAvKiBJZiB0aGUgbmV4dCBzdGF0ZSBoYXMgYmFjayByZWZlcmVuY2VzLiAgKi8KKyAgICAgIGlmIChuZXh0X3N0YXRlLT5oYXNfYmFja3JlZikKKwl7CisJICAqZXJyID0gdHJhbnNpdF9zdGF0ZV9ia3JlZiAobWN0eCwgJm5leHRfc3RhdGUtPm5vZGVzKTsKKwkgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBOVUxMOworCSAgbmV4dF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XTsKKwl9CisgICAgfQorCisgIHJldHVybiBuZXh0X3N0YXRlOworfQorCisvKiBTa2lwIGJ5dGVzIGluIHRoZSBpbnB1dCB0aGF0IGNvcnJlc3BvbmQgdG8gcGFydCBvZiBhCisgICBtdWx0aS1ieXRlIG1hdGNoLCB0aGVuIGxvb2sgaW4gdGhlIGxvZyBmb3IgYSBzdGF0ZQorICAgZnJvbSB3aGljaCB0byByZXN0YXJ0IG1hdGNoaW5nLiAgKi8KK3JlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK2ZpbmRfcmVjb3Zlcl9zdGF0ZSAocmVnX2VycmNvZGVfdCAqZXJyLCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpCit7CisgIHJlX2RmYXN0YXRlX3QgKmN1cl9zdGF0ZTsKKyAgZG8KKyAgICB7CisgICAgICBpbnQgbWF4ID0gbWN0eC0+c3RhdGVfbG9nX3RvcDsKKyAgICAgIGludCBjdXJfc3RyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpOworCisgICAgICBkbworCXsKKwkgIGlmICgrK2N1cl9zdHJfaWR4ID4gbWF4KQorCSAgICByZXR1cm4gTlVMTDsKKwkgIHJlX3N0cmluZ19za2lwX2J5dGVzICgmbWN0eC0+aW5wdXQsIDEpOworCX0KKyAgICAgIHdoaWxlIChtY3R4LT5zdGF0ZV9sb2dbY3VyX3N0cl9pZHhdID09IE5VTEwpOworCisgICAgICBjdXJfc3RhdGUgPSBtZXJnZV9zdGF0ZV93aXRoX2xvZyAoZXJyLCBtY3R4LCBOVUxMKTsKKyAgICB9CisgIHdoaWxlICgqZXJyID09IFJFR19OT0VSUk9SICYmIGN1cl9zdGF0ZSA9PSBOVUxMKTsKKyAgcmV0dXJuIGN1cl9zdGF0ZTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgdHJhbnNpdF9zdGF0ZS4gICovCisKKy8qIEZyb20gdGhlIG5vZGUgc2V0IENVUl9OT0RFUywgcGljayB1cCB0aGUgbm9kZXMgd2hvc2UgdHlwZXMgYXJlCisgICBPUF9PUEVOX1NVQkVYUCBhbmQgd2hpY2ggaGF2ZSBjb3JyZXNwb25kaW5nIGJhY2sgcmVmZXJlbmNlcyBpbiB0aGUgcmVndWxhcgorICAgZXhwcmVzc2lvbi4gQW5kIHJlZ2lzdGVyIHRoZW0gdG8gdXNlIHRoZW0gbGF0ZXIgZm9yIGV2YWx1YXRpbmcgdGhlCisgICBjb3JyZXNwb2RpbmcgYmFjayByZWZlcmVuY2VzLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCQkgICBpbnQgc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IG5vZGVfaWR4OworICByZWdfZXJyY29kZV90IGVycjsKKworICAvKiBUT0RPOiBUaGlzIGlzbid0IGVmZmljaWVudC4KKwkgICBCZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUgbm9kZXMgd2hvc2UgdHlwZXMgYXJlCisJICAgT1BfT1BFTl9TVUJFWFAgYW5kIHdob3NlIGluZGV4IGlzIFNVQkVYUF9JRFgsIHdlIG11c3QgY2hlY2sgYWxsCisJICAgbm9kZXMuCisJICAgRS5nLiBSRTogKGEpezJ9ICAqLworICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBjdXJfbm9kZXMtPm5lbGVtOyArK25vZGVfaWR4KQorICAgIHsKKyAgICAgIGludCBub2RlID0gY3VyX25vZGVzLT5lbGVtc1tub2RlX2lkeF07CisgICAgICBpZiAoZGZhLT5ub2Rlc1tub2RlXS50eXBlID09IE9QX09QRU5fU1VCRVhQCisJICAmJiBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHggPCBCSVRTRVRfV09SRF9CSVRTCisJICAmJiAoZGZhLT51c2VkX2JrcmVmX21hcAorCSAgICAgICYgKChiaXRzZXRfd29yZF90KSAxIDw8IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkpKQorCXsKKwkgIGVyciA9IG1hdGNoX2N0eF9hZGRfc3VidG9wIChtY3R4LCBub2RlLCBzdHJfaWR4KTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKyNpZiAwCisvKiBSZXR1cm4gdGhlIG5leHQgc3RhdGUgdG8gd2hpY2ggdGhlIGN1cnJlbnQgc3RhdGUgU1RBVEUgd2lsbCB0cmFuc2l0IGJ5CisgICBhY2NlcHRpbmcgdGhlIGN1cnJlbnQgaW5wdXQgYnl0ZS4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK3RyYW5zaXRfc3RhdGVfc2IgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkgIHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZV9ub2RlX3NldCBuZXh0X25vZGVzOworICByZV9kZmFzdGF0ZV90ICpuZXh0X3N0YXRlOworICBpbnQgbm9kZV9jbnQsIGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisgIHVuc2lnbmVkIGludCBjb250ZXh0OworCisgICplcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJm5leHRfbm9kZXMsIHN0YXRlLT5ub2Rlcy5uZWxlbSArIDEpOworICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBOVUxMOworICBmb3IgKG5vZGVfY250ID0gMDsgbm9kZV9jbnQgPCBzdGF0ZS0+bm9kZXMubmVsZW07ICsrbm9kZV9jbnQpCisgICAgeworICAgICAgaW50IGN1cl9ub2RlID0gc3RhdGUtPm5vZGVzLmVsZW1zW25vZGVfY250XTsKKyAgICAgIGlmIChjaGVja19ub2RlX2FjY2VwdCAobWN0eCwgZGZhLT5ub2RlcyArIGN1cl9ub2RlLCBjdXJfc3RyX2lkeCkpCisJeworCSAgKmVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmbmV4dF9ub2RlcywKKwkJCQkgICAgZGZhLT5lY2xvc3VyZXMgKyBkZmEtPm5leHRzW2N1cl9ub2RlXSk7CisJICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgIH0KKyAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGN1cl9zdHJfaWR4LCBtY3R4LT5lZmxhZ3MpOworICBuZXh0X3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0IChlcnIsIGRmYSwgJm5leHRfbm9kZXMsIGNvbnRleHQpOworICAvKiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGVycm9ycyBoZXJlLCBzaW5jZSB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAgIHRoaXMgZnVuY3Rpb24gaXMgbmV4dF9zdGF0ZSBhbmQgRVJSIGlzIGFscmVhZHkgc2V0LiAgKi8KKworICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisgIHJlX3N0cmluZ19za2lwX2J5dGVzICgmbWN0eC0+aW5wdXQsIDEpOworICByZXR1cm4gbmV4dF9zdGF0ZTsKK30KKyNlbmRpZgorCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgordHJhbnNpdF9zdGF0ZV9tYiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9kZmFzdGF0ZV90ICpwc3RhdGUpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgcHN0YXRlLT5ub2Rlcy5uZWxlbTsgKytpKQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0IGRlc3Rfbm9kZXMsICpuZXdfbm9kZXM7CisgICAgICBpbnQgY3VyX25vZGVfaWR4ID0gcHN0YXRlLT5ub2Rlcy5lbGVtc1tpXTsKKyAgICAgIGludCBuYWNjZXB0ZWQsIGRlc3RfaWR4OworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisgICAgICByZV9kZmFzdGF0ZV90ICpkZXN0X3N0YXRlOworCisgICAgICBpZiAoIWRmYS0+bm9kZXNbY3VyX25vZGVfaWR4XS5hY2NlcHRfbWIpCisJY29udGludWU7CisKKyAgICAgIGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlX2lkeF0uY29uc3RyYWludCkKKwl7CisJICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwKKwkJCQkJICByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSwKKwkJCQkJICBtY3R4LT5lZmxhZ3MpOworCSAgaWYgKE5PVF9TQVRJU0ZZX05FWFRfQ09OU1RSQUlOVCAoZGZhLT5ub2Rlc1tjdXJfbm9kZV9pZHhdLmNvbnN0cmFpbnQsCisJCQkJCSAgIGNvbnRleHQpKQorCSAgICBjb250aW51ZTsKKwl9CisKKyAgICAgIC8qIEhvdyBtYW55IGJ5dGVzIHRoZSBub2RlIGNhbiBhY2NlcHQ/ICAqLworICAgICAgbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRmYSwgY3VyX25vZGVfaWR4LCAmbWN0eC0+aW5wdXQsCisJCQkJCSAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpKTsKKyAgICAgIGlmIChuYWNjZXB0ZWQgPT0gMCkKKwljb250aW51ZTsKKworICAgICAgLyogVGhlIG5vZGUgY2FuIGFjY2VwdHMgYG5hY2NlcHRlZCcgYnl0ZXMuICAqLworICAgICAgZGVzdF9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSArIG5hY2NlcHRlZDsKKyAgICAgIG1jdHgtPm1heF9tYl9lbGVtX2xlbiA9ICgobWN0eC0+bWF4X21iX2VsZW1fbGVuIDwgbmFjY2VwdGVkKSA/IG5hY2NlcHRlZAorCQkJICAgICAgIDogbWN0eC0+bWF4X21iX2VsZW1fbGVuKTsKKyAgICAgIGVyciA9IGNsZWFuX3N0YXRlX2xvZ19pZl9uZWVkZWQgKG1jdHgsIGRlc3RfaWR4KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworI2lmZGVmIERFQlVHCisgICAgICBhc3NlcnQgKGRmYS0+bmV4dHNbY3VyX25vZGVfaWR4XSAhPSAtMSk7CisjZW5kaWYKKyAgICAgIG5ld19ub2RlcyA9IGRmYS0+ZWNsb3N1cmVzICsgZGZhLT5uZXh0c1tjdXJfbm9kZV9pZHhdOworCisgICAgICBkZXN0X3N0YXRlID0gbWN0eC0+c3RhdGVfbG9nW2Rlc3RfaWR4XTsKKyAgICAgIGlmIChkZXN0X3N0YXRlID09IE5VTEwpCisJZGVzdF9ub2RlcyA9ICpuZXdfbm9kZXM7CisgICAgICBlbHNlCisJeworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF91bmlvbiAoJmRlc3Rfbm9kZXMsCisJCQkJCWRlc3Rfc3RhdGUtPmVudHJhbmNlX25vZGVzLCBuZXdfbm9kZXMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCX0KKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBkZXN0X2lkeCAtIDEsCisJCQkJICAgICAgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tkZXN0X2lkeF0KKwk9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZGVzdF9ub2RlcywgY29udGV4dCk7CisgICAgICBpZiAoZGVzdF9zdGF0ZSAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKCZkZXN0X25vZGVzKTsKKyAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW2Rlc3RfaWR4XSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3RyYW5zaXRfc3RhdGVfYmtyZWYgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGk7CisgIGludCBjdXJfc3RyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpOworCisgIGZvciAoaSA9IDA7IGkgPCBub2Rlcy0+bmVsZW07ICsraSkKKyAgICB7CisgICAgICBpbnQgZGVzdF9zdHJfaWR4LCBwcmV2X25lbGVtLCBia2NfaWR4OworICAgICAgaW50IG5vZGVfaWR4ID0gbm9kZXMtPmVsZW1zW2ldOworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisgICAgICBjb25zdCByZV90b2tlbl90ICpub2RlID0gZGZhLT5ub2RlcyArIG5vZGVfaWR4OworICAgICAgcmVfbm9kZV9zZXQgKm5ld19kZXN0X25vZGVzOworCisgICAgICAvKiBDaGVjayB3aGV0aGVyIGBub2RlJyBpcyBhIGJhY2tyZWZlcmVuY2Ugb3Igbm90LiAgKi8KKyAgICAgIGlmIChub2RlLT50eXBlICE9IE9QX0JBQ0tfUkVGKQorCWNvbnRpbnVlOworCisgICAgICBpZiAobm9kZS0+Y29uc3RyYWludCkKKwl7CisJICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgY3VyX3N0cl9pZHgsCisJCQkJCSAgbWN0eC0+ZWZsYWdzKTsKKwkgIGlmIChOT1RfU0FUSVNGWV9ORVhUX0NPTlNUUkFJTlQgKG5vZGUtPmNvbnN0cmFpbnQsIGNvbnRleHQpKQorCSAgICBjb250aW51ZTsKKwl9CisKKyAgICAgIC8qIGBub2RlJyBpcyBhIGJhY2tyZWZlcmVuY2UuCisJIENoZWNrIHRoZSBzdWJzdHJpbmcgd2hpY2ggdGhlIHN1YnN0cmluZyBtYXRjaGVkLiAgKi8KKyAgICAgIGJrY19pZHggPSBtY3R4LT5uYmtyZWZfZW50czsKKyAgICAgIGVyciA9IGdldF9zdWJleHAgKG1jdHgsIG5vZGVfaWR4LCBjdXJfc3RyX2lkeCk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKworICAgICAgLyogQW5kIGFkZCB0aGUgZXBzaWxvbiBjbG9zdXJlcyAod2hpY2ggaXMgYG5ld19kZXN0X25vZGVzJykgb2YKKwkgdGhlIGJhY2tyZWZlcmVuY2UgdG8gYXBwcm9wcmlhdGUgc3RhdGVfbG9nLiAgKi8KKyNpZmRlZiBERUJVRworICAgICAgYXNzZXJ0IChkZmEtPm5leHRzW25vZGVfaWR4XSAhPSAtMSk7CisjZW5kaWYKKyAgICAgIGZvciAoOyBia2NfaWR4IDwgbWN0eC0+bmJrcmVmX2VudHM7ICsrYmtjX2lkeCkKKwl7CisJICBpbnQgc3ViZXhwX2xlbjsKKwkgIHJlX2RmYXN0YXRlX3QgKmRlc3Rfc3RhdGU7CisJICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqYmtyZWZfZW50OworCSAgYmtyZWZfZW50ID0gbWN0eC0+YmtyZWZfZW50cyArIGJrY19pZHg7CisJICBpZiAoYmtyZWZfZW50LT5ub2RlICE9IG5vZGVfaWR4IHx8IGJrcmVmX2VudC0+c3RyX2lkeCAhPSBjdXJfc3RyX2lkeCkKKwkgICAgY29udGludWU7CisJICBzdWJleHBfbGVuID0gYmtyZWZfZW50LT5zdWJleHBfdG8gLSBia3JlZl9lbnQtPnN1YmV4cF9mcm9tOworCSAgbmV3X2Rlc3Rfbm9kZXMgPSAoc3ViZXhwX2xlbiA9PSAwCisJCQkgICAgPyBkZmEtPmVjbG9zdXJlcyArIGRmYS0+ZWRlc3RzW25vZGVfaWR4XS5lbGVtc1swXQorCQkJICAgIDogZGZhLT5lY2xvc3VyZXMgKyBkZmEtPm5leHRzW25vZGVfaWR4XSk7CisJICBkZXN0X3N0cl9pZHggPSAoY3VyX3N0cl9pZHggKyBia3JlZl9lbnQtPnN1YmV4cF90bworCQkJICAtIGJrcmVmX2VudC0+c3ViZXhwX2Zyb20pOworCSAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGRlc3Rfc3RyX2lkeCAtIDEsCisJCQkJCSAgbWN0eC0+ZWZsYWdzKTsKKwkgIGRlc3Rfc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XTsKKwkgIHByZXZfbmVsZW0gPSAoKG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0gPT0gTlVMTCkgPyAwCisJCQk6IG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0tPm5vZGVzLm5lbGVtKTsKKwkgIC8qIEFkZCBgbmV3X2Rlc3Rfbm9kZScgdG8gc3RhdGVfbG9nLiAgKi8KKwkgIGlmIChkZXN0X3N0YXRlID09IE5VTEwpCisJICAgIHsKKwkgICAgICBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XQorCQk9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCBuZXdfZGVzdF9ub2RlcywKKwkJCQkJICAgIGNvbnRleHQpOworCSAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW2Rlc3Rfc3RyX2lkeF0gPT0gTlVMTAorCQkgICAgICAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldCBkZXN0X25vZGVzOworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfdW5pb24gKCZkZXN0X25vZGVzLAorCQkJCQkgICAgZGVzdF9zdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsCisJCQkJCSAgICBuZXdfZGVzdF9ub2Rlcyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmRlc3Rfbm9kZXMpOworCQkgIGdvdG8gZnJlZV9yZXR1cm47CisJCX0KKwkgICAgICBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XQorCQk9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZGVzdF9ub2RlcywgY29udGV4dCk7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmRlc3Rfbm9kZXMpOworCSAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW2Rlc3Rfc3RyX2lkeF0gPT0gTlVMTAorCQkgICAgICAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICAvKiBXZSBuZWVkIHRvIGNoZWNrIHJlY3Vyc2l2ZWx5IGlmIHRoZSBiYWNrcmVmZXJlbmNlIGNhbiBlcHNpbG9uCisJICAgICB0cmFuc2l0LiAgKi8KKwkgIGlmIChzdWJleHBfbGVuID09IDAKKwkgICAgICAmJiBtY3R4LT5zdGF0ZV9sb2dbY3VyX3N0cl9pZHhdLT5ub2Rlcy5uZWxlbSA+IHByZXZfbmVsZW0pCisJICAgIHsKKwkgICAgICBlcnIgPSBjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChtY3R4LCBuZXdfZGVzdF9ub2RlcywKKwkJCQkJICAgICAgIGN1cl9zdHJfaWR4KTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJICAgICAgZXJyID0gdHJhbnNpdF9zdGF0ZV9ia3JlZiAobWN0eCwgbmV3X2Rlc3Rfbm9kZXMpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCX0KKyAgICB9CisgIGVyciA9IFJFR19OT0VSUk9SOworIGZyZWVfcmV0dXJuOgorICByZXR1cm4gZXJyOworfQorCisvKiBFbnVtZXJhdGUgYWxsIHRoZSBjYW5kaWRhdGVzIHdoaWNoIHRoZSBiYWNrcmVmZXJlbmNlIEJLUkVGX05PREUgY2FuIG1hdGNoCisgICBhdCBCS1JFRl9TVFJfSURYLCBhbmQgcmVnaXN0ZXIgdGhlbSBieSBtYXRjaF9jdHhfYWRkX2VudHJ5KCkuCisgICBOb3RlIHRoYXQgd2UgbWlnaHQgY29sbGVjdCBpbmFwcHJvcHJpYXRlIGNhbmRpZGF0ZXMgaGVyZS4KKyAgIEhvd2V2ZXIsIHRoZSBjb3N0IG9mIGNoZWNraW5nIHRoZW0gc3RyaWN0bHkgaGVyZSBpcyB0b28gaGlnaCwgdGhlbiB3ZQorICAgZGVsYXkgdGhlc2UgY2hlY2tpbmcgZm9yIHBydW5lX2ltcG9zc2libGVfbm9kZXMoKS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZ2V0X3N1YmV4cCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgYmtyZWZfbm9kZSwgaW50IGJrcmVmX3N0cl9pZHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCBzdWJleHBfbnVtLCBzdWJfdG9wX2lkeDsKKyAgY29uc3QgY2hhciAqYnVmID0gKGNvbnN0IGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKCZtY3R4LT5pbnB1dCk7CisgIC8qIFJldHVybiBpZiB3ZSBoYXZlIGFscmVhZHkgY2hlY2tlZCBCS1JFRl9OT0RFIGF0IEJLUkVGX1NUUl9JRFguICAqLworICBpbnQgY2FjaGVfaWR4ID0gc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAobWN0eCwgYmtyZWZfc3RyX2lkeCk7CisgIGlmIChjYWNoZV9pZHggIT0gLTEpCisgICAgeworICAgICAgY29uc3Qgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmVudHJ5CisJPSBtY3R4LT5ia3JlZl9lbnRzICsgY2FjaGVfaWR4OworICAgICAgZG8KKwlpZiAoZW50cnktPm5vZGUgPT0gYmtyZWZfbm9kZSkKKwkgIHJldHVybiBSRUdfTk9FUlJPUjsgLyogV2UgYWxyZWFkeSBjaGVja2VkIGl0LiAgKi8KKyAgICAgIHdoaWxlIChlbnRyeSsrLT5tb3JlKTsKKyAgICB9CisKKyAgc3ViZXhwX251bSA9IGRmYS0+bm9kZXNbYmtyZWZfbm9kZV0ub3ByLmlkeDsKKworICAvKiBGb3IgZWFjaCBzdWIgZXhwcmVzc2lvbiAgKi8KKyAgZm9yIChzdWJfdG9wX2lkeCA9IDA7IHN1Yl90b3BfaWR4IDwgbWN0eC0+bnN1Yl90b3BzOyArK3N1Yl90b3BfaWR4KQorICAgIHsKKyAgICAgIHJlZ19lcnJjb2RlX3QgZXJyOworICAgICAgcmVfc3ViX21hdGNoX3RvcF90ICpzdWJfdG9wID0gbWN0eC0+c3ViX3RvcHNbc3ViX3RvcF9pZHhdOworICAgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqc3ViX2xhc3Q7CisgICAgICBpbnQgc3ViX2xhc3RfaWR4LCBzbF9zdHIsIGJrcmVmX3N0cl9vZmY7CisKKyAgICAgIGlmIChkZmEtPm5vZGVzW3N1Yl90b3AtPm5vZGVdLm9wci5pZHggIT0gc3ViZXhwX251bSkKKwljb250aW51ZTsgLyogSXQgaXNuJ3QgcmVsYXRlZC4gICovCisKKyAgICAgIHNsX3N0ciA9IHN1Yl90b3AtPnN0cl9pZHg7CisgICAgICBia3JlZl9zdHJfb2ZmID0gYmtyZWZfc3RyX2lkeDsKKyAgICAgIC8qIEF0IGZpcnN0LCBjaGVjayB0aGUgbGFzdCBub2RlIG9mIHN1YiBleHByZXNzaW9ucyB3ZSBhbHJlYWR5CisJIGV2YWx1YXRlZC4gICovCisgICAgICBmb3IgKHN1Yl9sYXN0X2lkeCA9IDA7IHN1Yl9sYXN0X2lkeCA8IHN1Yl90b3AtPm5sYXN0czsgKytzdWJfbGFzdF9pZHgpCisJeworCSAgaW50IHNsX3N0cl9kaWZmOworCSAgc3ViX2xhc3QgPSBzdWJfdG9wLT5sYXN0c1tzdWJfbGFzdF9pZHhdOworCSAgc2xfc3RyX2RpZmYgPSBzdWJfbGFzdC0+c3RyX2lkeCAtIHNsX3N0cjsKKwkgIC8qIFRoZSBtYXRjaGVkIHN0cmluZyBieSB0aGUgc3ViIGV4cHJlc3Npb24gbWF0Y2ggd2l0aCB0aGUgc3Vic3RyaW5nCisJICAgICBhdCB0aGUgYmFjayByZWZlcmVuY2U/ICAqLworCSAgaWYgKHNsX3N0cl9kaWZmID4gMCkKKwkgICAgeworCSAgICAgIGlmIChCRSAoYmtyZWZfc3RyX29mZiArIHNsX3N0cl9kaWZmID4gbWN0eC0+aW5wdXQudmFsaWRfbGVuLCAwKSkKKwkJeworCQkgIC8qIE5vdCBlbm91Z2ggY2hhcnMgZm9yIGEgc3VjY2Vzc2Z1bCBtYXRjaC4gICovCisJCSAgaWYgKGJrcmVmX3N0cl9vZmYgKyBzbF9zdHJfZGlmZiA+IG1jdHgtPmlucHV0LmxlbikKKwkJICAgIGJyZWFrOworCisJCSAgZXJyID0gY2xlYW5fc3RhdGVfbG9nX2lmX25lZWRlZCAobWN0eCwKKwkJCQkJCSAgIGJrcmVmX3N0cl9vZmYKKwkJCQkJCSAgICsgc2xfc3RyX2RpZmYpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHJldHVybiBlcnI7CisJCSAgYnVmID0gKGNvbnN0IGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKCZtY3R4LT5pbnB1dCk7CisJCX0KKwkgICAgICBpZiAobWVtY21wIChidWYgKyBia3JlZl9zdHJfb2ZmLCBidWYgKyBzbF9zdHIsIHNsX3N0cl9kaWZmKSAhPSAwKQorCQkvKiBXZSBkb24ndCBuZWVkIHRvIHNlYXJjaCB0aGlzIHN1YiBleHByZXNzaW9uIGFueSBtb3JlLiAgKi8KKwkJYnJlYWs7CisJICAgIH0KKwkgIGJrcmVmX3N0cl9vZmYgKz0gc2xfc3RyX2RpZmY7CisJICBzbF9zdHIgKz0gc2xfc3RyX2RpZmY7CisJICBlcnIgPSBnZXRfc3ViZXhwX3N1YiAobWN0eCwgc3ViX3RvcCwgc3ViX2xhc3QsIGJrcmVmX25vZGUsCisJCQkJYmtyZWZfc3RyX2lkeCk7CisKKwkgIC8qIFJlbG9hZCBidWYsIHNpbmNlIHRoZSBwcmVjZWRpbmcgY2FsbCBtaWdodCBoYXZlIHJlYWxsb2NhdGVkCisJICAgICB0aGUgYnVmZmVyLiAgKi8KKwkgIGJ1ZiA9IChjb25zdCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworCisJICBpZiAoZXJyID09IFJFR19OT01BVENIKQorCSAgICBjb250aW51ZTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisKKyAgICAgIGlmIChzdWJfbGFzdF9pZHggPCBzdWJfdG9wLT5ubGFzdHMpCisJY29udGludWU7CisgICAgICBpZiAoc3ViX2xhc3RfaWR4ID4gMCkKKwkrK3NsX3N0cjsKKyAgICAgIC8qIFRoZW4sIHNlYXJjaCBmb3IgdGhlIG90aGVyIGxhc3Qgbm9kZXMgb2YgdGhlIHN1YiBleHByZXNzaW9uLiAgKi8KKyAgICAgIGZvciAoOyBzbF9zdHIgPD0gYmtyZWZfc3RyX2lkeDsgKytzbF9zdHIpCisJeworCSAgaW50IGNsc19ub2RlLCBzbF9zdHJfb2ZmOworCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzOworCSAgc2xfc3RyX29mZiA9IHNsX3N0ciAtIHN1Yl90b3AtPnN0cl9pZHg7CisJICAvKiBUaGUgbWF0Y2hlZCBzdHJpbmcgYnkgdGhlIHN1YiBleHByZXNzaW9uIG1hdGNoIHdpdGggdGhlIHN1YnN0cmluZworCSAgICAgYXQgdGhlIGJhY2sgcmVmZXJlbmNlPyAgKi8KKwkgIGlmIChzbF9zdHJfb2ZmID4gMCkKKwkgICAgeworCSAgICAgIGlmIChCRSAoYmtyZWZfc3RyX29mZiA+PSBtY3R4LT5pbnB1dC52YWxpZF9sZW4sIDApKQorCQl7CisJCSAgLyogSWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LCB3ZSBjYW5ub3QgbWF0Y2guICAqLworCQkgIGlmIChia3JlZl9zdHJfb2ZmID49IG1jdHgtPmlucHV0LmxlbikKKwkJICAgIGJyZWFrOworCisJCSAgZXJyID0gZXh0ZW5kX2J1ZmZlcnMgKG1jdHgpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHJldHVybiBlcnI7CisKKwkJICBidWYgPSAoY29uc3QgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoJm1jdHgtPmlucHV0KTsKKwkJfQorCSAgICAgIGlmIChidWYgW2JrcmVmX3N0cl9vZmYrK10gIT0gYnVmW3NsX3N0ciAtIDFdKQorCQlicmVhazsgLyogV2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggdGhpcyBzdWIgZXhwcmVzc2lvbgorCQkJICBhbnkgbW9yZS4gICovCisJICAgIH0KKwkgIGlmIChtY3R4LT5zdGF0ZV9sb2dbc2xfc3RyXSA9PSBOVUxMKQorCSAgICBjb250aW51ZTsKKwkgIC8qIERvZXMgdGhpcyBzdGF0ZSBoYXZlIGEgJyknIG9mIHRoZSBzdWIgZXhwcmVzc2lvbj8gICovCisJICBub2RlcyA9ICZtY3R4LT5zdGF0ZV9sb2dbc2xfc3RyXS0+bm9kZXM7CisJICBjbHNfbm9kZSA9IGZpbmRfc3ViZXhwX25vZGUgKGRmYSwgbm9kZXMsIHN1YmV4cF9udW0sCisJCQkJICAgICAgIE9QX0NMT1NFX1NVQkVYUCk7CisJICBpZiAoY2xzX25vZGUgPT0gLTEpCisJICAgIGNvbnRpbnVlOyAvKiBOby4gICovCisJICBpZiAoc3ViX3RvcC0+cGF0aCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgc3ViX3RvcC0+cGF0aCA9IGNhbGxvYyAoc2l6ZW9mIChzdGF0ZV9hcnJheV90KSwKKwkJCQkgICAgICBzbF9zdHIgLSBzdWJfdG9wLT5zdHJfaWR4ICsgMSk7CisJICAgICAgaWYgKHN1Yl90b3AtPnBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwkgIC8qIENhbiB0aGUgT1BfT1BFTl9TVUJFWFAgbm9kZSBhcnJpdmUgdGhlIE9QX0NMT1NFX1NVQkVYUCBub2RlCisJICAgICBpbiB0aGUgY3VycmVudCBjb250ZXh0PyAgKi8KKwkgIGVyciA9IGNoZWNrX2Fycml2YWwgKG1jdHgsIHN1Yl90b3AtPnBhdGgsIHN1Yl90b3AtPm5vZGUsCisJCQkgICAgICAgc3ViX3RvcC0+c3RyX2lkeCwgY2xzX25vZGUsIHNsX3N0ciwKKwkJCSAgICAgICBPUF9DTE9TRV9TVUJFWFApOworCSAgaWYgKGVyciA9PSBSRUdfTk9NQVRDSCkKKwkgICAgICBjb250aW51ZTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgICByZXR1cm4gZXJyOworCSAgc3ViX2xhc3QgPSBtYXRjaF9jdHhfYWRkX3N1Ymxhc3QgKHN1Yl90b3AsIGNsc19ub2RlLCBzbF9zdHIpOworCSAgaWYgKEJFIChzdWJfbGFzdCA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICBlcnIgPSBnZXRfc3ViZXhwX3N1YiAobWN0eCwgc3ViX3RvcCwgc3ViX2xhc3QsIGJrcmVmX25vZGUsCisJCQkJYmtyZWZfc3RyX2lkeCk7CisJICBpZiAoZXJyID09IFJFR19OT01BVENIKQorCSAgICBjb250aW51ZTsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGdldF9zdWJleHAoKS4gICovCisKKy8qIENoZWNrIFNVQl9MQVNUIGNhbiBhcnJpdmUgdG8gdGhlIGJhY2sgcmVmZXJlbmNlIEJLUkVGX05PREUgYXQgQktSRUZfU1RSLgorICAgSWYgaXQgY2FuIGFycml2ZSwgcmVnaXN0ZXIgdGhlIHN1YiBleHByZXNzaW9uIGV4cHJlc3NlZCB3aXRoIFNVQl9UT1AKKyAgIGFuZCBTVUJfTEFTVC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZ2V0X3N1YmV4cF9zdWIgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgY29uc3QgcmVfc3ViX21hdGNoX3RvcF90ICpzdWJfdG9wLAorCQlyZV9zdWJfbWF0Y2hfbGFzdF90ICpzdWJfbGFzdCwgaW50IGJrcmVmX25vZGUsIGludCBia3JlZl9zdHIpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgdG9faWR4OworICAvKiBDYW4gdGhlIHN1YmV4cHJlc3Npb24gYXJyaXZlIHRoZSBiYWNrIHJlZmVyZW5jZT8gICovCisgIGVyciA9IGNoZWNrX2Fycml2YWwgKG1jdHgsICZzdWJfbGFzdC0+cGF0aCwgc3ViX2xhc3QtPm5vZGUsCisJCSAgICAgICBzdWJfbGFzdC0+c3RyX2lkeCwgYmtyZWZfbm9kZSwgYmtyZWZfc3RyLAorCQkgICAgICAgT1BfT1BFTl9TVUJFWFApOworICBpZiAoZXJyICE9IFJFR19OT0VSUk9SKQorICAgIHJldHVybiBlcnI7CisgIGVyciA9IG1hdGNoX2N0eF9hZGRfZW50cnkgKG1jdHgsIGJrcmVmX25vZGUsIGJrcmVmX3N0ciwgc3ViX3RvcC0+c3RyX2lkeCwKKwkJCSAgICAgc3ViX2xhc3QtPnN0cl9pZHgpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgdG9faWR4ID0gYmtyZWZfc3RyICsgc3ViX2xhc3QtPnN0cl9pZHggLSBzdWJfdG9wLT5zdHJfaWR4OworICByZXR1cm4gY2xlYW5fc3RhdGVfbG9nX2lmX25lZWRlZCAobWN0eCwgdG9faWR4KTsKK30KKworLyogRmluZCB0aGUgZmlyc3Qgbm9kZSB3aGljaCBpcyAnKCcgb3IgJyknIGFuZCB3aG9zZSBpbmRleCBpcyBTVUJFWFBfSURYLgorICAgU2VhcmNoICcoJyBpZiBGTF9PUEVOLCBvciBzZWFyY2ggJyknIG90aGVyd2lzZS4KKyAgIFRPRE86IFRoaXMgZnVuY3Rpb24gaXNuJ3QgZWZmaWNpZW50Li4uCisJIEJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBub2RlcyB3aG9zZSB0eXBlcyBhcmUKKwkgT1BfT1BFTl9TVUJFWFAgYW5kIHdob3NlIGluZGV4IGlzIFNVQkVYUF9JRFgsIHdlIG11c3QgY2hlY2sgYWxsCisJIG5vZGVzLgorCSBFLmcuIFJFOiAoYSl7Mn0gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitmaW5kX3N1YmV4cF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsCisJCSAgaW50IHN1YmV4cF9pZHgsIGludCB0eXBlKQoreworICBpbnQgY2xzX2lkeDsKKyAgZm9yIChjbHNfaWR4ID0gMDsgY2xzX2lkeCA8IG5vZGVzLT5uZWxlbTsgKytjbHNfaWR4KQorICAgIHsKKyAgICAgIGludCBjbHNfbm9kZSA9IG5vZGVzLT5lbGVtc1tjbHNfaWR4XTsKKyAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUgPSBkZmEtPm5vZGVzICsgY2xzX25vZGU7CisgICAgICBpZiAobm9kZS0+dHlwZSA9PSB0eXBlCisJICAmJiBub2RlLT5vcHIuaWR4ID09IHN1YmV4cF9pZHgpCisJcmV0dXJuIGNsc19ub2RlOworICAgIH0KKyAgcmV0dXJuIC0xOworfQorCisvKiBDaGVjayB3aGV0aGVyIHRoZSBub2RlIFRPUF9OT0RFIGF0IFRPUF9TVFIgY2FuIGFycml2ZSB0byB0aGUgbm9kZQorICAgTEFTVF9OT0RFIGF0IExBU1RfU1RSLiAgV2UgcmVjb3JkIHRoZSBwYXRoIG9udG8gUEFUSCBzaW5jZSBpdCB3aWxsIGJlCisgICBoZWF2aWx5IHJldXNlZC4KKyAgIFJldHVybiBSRUdfTk9FUlJPUiBpZiBpdCBjYW4gYXJyaXZlLCBvciBSRUdfTk9NQVRDSCBvdGhlcndpc2UuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2Fycml2YWwgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgc3RhdGVfYXJyYXlfdCAqcGF0aCwgaW50IHRvcF9ub2RlLAorCSAgICAgICBpbnQgdG9wX3N0ciwgaW50IGxhc3Rfbm9kZSwgaW50IGxhc3Rfc3RyLCBpbnQgdHlwZSkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKyAgaW50IHN1YmV4cF9udW0sIGJhY2t1cF9jdXJfaWR4LCBzdHJfaWR4LCBudWxsX2NudDsKKyAgcmVfZGZhc3RhdGVfdCAqY3VyX3N0YXRlID0gTlVMTDsKKyAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywgbmV4dF9ub2RlczsKKyAgcmVfZGZhc3RhdGVfdCAqKmJhY2t1cF9zdGF0ZV9sb2c7CisgIHVuc2lnbmVkIGludCBjb250ZXh0OworCisgIHN1YmV4cF9udW0gPSBkZmEtPm5vZGVzW3RvcF9ub2RlXS5vcHIuaWR4OworICAvKiBFeHRlbmQgdGhlIGJ1ZmZlciBpZiB3ZSBuZWVkLiAgKi8KKyAgaWYgKEJFIChwYXRoLT5hbGxvYyA8IGxhc3Rfc3RyICsgbWN0eC0+bWF4X21iX2VsZW1fbGVuICsgMSwgMCkpCisgICAgeworICAgICAgcmVfZGZhc3RhdGVfdCAqKm5ld19hcnJheTsKKyAgICAgIGludCBvbGRfYWxsb2MgPSBwYXRoLT5hbGxvYzsKKyAgICAgIHBhdGgtPmFsbG9jICs9IGxhc3Rfc3RyICsgbWN0eC0+bWF4X21iX2VsZW1fbGVuICsgMTsKKyAgICAgIG5ld19hcnJheSA9IHJlX3JlYWxsb2MgKHBhdGgtPmFycmF5LCByZV9kZmFzdGF0ZV90ICosIHBhdGgtPmFsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2FycmF5ID09IE5VTEwsIDApKQorCXsKKwkgIHBhdGgtPmFsbG9jID0gb2xkX2FsbG9jOworCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgcGF0aC0+YXJyYXkgPSBuZXdfYXJyYXk7CisgICAgICBtZW1zZXQgKG5ld19hcnJheSArIG9sZF9hbGxvYywgJ1wwJywKKwkgICAgICBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgKiAocGF0aC0+YWxsb2MgLSBvbGRfYWxsb2MpKTsKKyAgICB9CisKKyAgc3RyX2lkeCA9IHBhdGgtPm5leHRfaWR4ID8gcGF0aC0+bmV4dF9pZHggOiB0b3Bfc3RyOworCisgIC8qIFRlbXBvcmFyeSBtb2RpZnkgTUNUWC4gICovCisgIGJhY2t1cF9zdGF0ZV9sb2cgPSBtY3R4LT5zdGF0ZV9sb2c7CisgIGJhY2t1cF9jdXJfaWR4ID0gbWN0eC0+aW5wdXQuY3VyX2lkeDsKKyAgbWN0eC0+c3RhdGVfbG9nID0gcGF0aC0+YXJyYXk7CisgIG1jdHgtPmlucHV0LmN1cl9pZHggPSBzdHJfaWR4OworCisgIC8qIFNldHVwIGluaXRpYWwgbm9kZSBzZXQuICAqLworICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgc3RyX2lkeCAtIDEsIG1jdHgtPmVmbGFncyk7CisgIGlmIChzdHJfaWR4ID09IHRvcF9zdHIpCisgICAgeworICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgmbmV4dF9ub2RlcywgdG9wX25vZGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgICBlcnIgPSBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2wgKGRmYSwgJm5leHRfbm9kZXMsIHN1YmV4cF9udW0sIHR5cGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgIHJldHVybiBlcnI7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGN1cl9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XTsKKyAgICAgIGlmIChjdXJfc3RhdGUgJiYgY3VyX3N0YXRlLT5oYXNfYmFja3JlZikKKwl7CisJICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZuZXh0X25vZGVzLCAmY3VyX3N0YXRlLT5ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgICAgZWxzZQorCXJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZuZXh0X25vZGVzKTsKKyAgICB9CisgIGlmIChzdHJfaWR4ID09IHRvcF9zdHIgfHwgKGN1cl9zdGF0ZSAmJiBjdXJfc3RhdGUtPmhhc19iYWNrcmVmKSkKKyAgICB7CisgICAgICBpZiAobmV4dF9ub2Rlcy5uZWxlbSkKKwl7CisJICBlcnIgPSBleHBhbmRfYmtyZWZfY2FjaGUgKG1jdHgsICZuZXh0X25vZGVzLCBzdHJfaWR4LAorCQkJCSAgICBzdWJleHBfbnVtLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgY3VyX3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZuZXh0X25vZGVzLCBjb250ZXh0KTsKKyAgICAgIGlmIChCRSAoY3VyX3N0YXRlID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwl7CisJICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICByZXR1cm4gZXJyOworCX0KKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XSA9IGN1cl9zdGF0ZTsKKyAgICB9CisKKyAgZm9yIChudWxsX2NudCA9IDA7IHN0cl9pZHggPCBsYXN0X3N0ciAmJiBudWxsX2NudCA8PSBtY3R4LT5tYXhfbWJfZWxlbV9sZW47KQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmbmV4dF9ub2Rlcyk7CisgICAgICBpZiAobWN0eC0+c3RhdGVfbG9nW3N0cl9pZHggKyAxXSkKKwl7CisJICBlcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJm5leHRfbm9kZXMsCisJCQkJICAgJm1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4ICsgMV0tPm5vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgaWYgKGN1cl9zdGF0ZSkKKwl7CisJICBlcnIgPSBjaGVja19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChtY3R4LCBzdHJfaWR4LAorCQkJCQkgICAgICAmY3VyX3N0YXRlLT5ub25fZXBzX25vZGVzLAorCQkJCQkgICAgICAmbmV4dF9ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICAgICsrc3RyX2lkeDsKKyAgICAgIGlmIChuZXh0X25vZGVzLm5lbGVtKQorCXsKKwkgIGVyciA9IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbCAoZGZhLCAmbmV4dF9ub2Rlcywgc3ViZXhwX251bSwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCSAgZXJyID0gZXhwYW5kX2JrcmVmX2NhY2hlIChtY3R4LCAmbmV4dF9ub2Rlcywgc3RyX2lkeCwKKwkJCQkgICAgc3ViZXhwX251bSwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBzdHJfaWR4IC0gMSwgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIGN1cl9zdGF0ZSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmbmV4dF9ub2RlcywgY29udGV4dCk7CisgICAgICBpZiAoQkUgKGN1cl9zdGF0ZSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJeworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgcmV0dXJuIGVycjsKKwl9CisgICAgICBtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0gPSBjdXJfc3RhdGU7CisgICAgICBudWxsX2NudCA9IGN1cl9zdGF0ZSA9PSBOVUxMID8gbnVsbF9jbnQgKyAxIDogMDsKKyAgICB9CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKyAgY3VyX25vZGVzID0gKG1jdHgtPnN0YXRlX2xvZ1tsYXN0X3N0cl0gPT0gTlVMTCA/IE5VTEwKKwkgICAgICAgOiAmbWN0eC0+c3RhdGVfbG9nW2xhc3Rfc3RyXS0+bm9kZXMpOworICBwYXRoLT5uZXh0X2lkeCA9IHN0cl9pZHg7CisKKyAgLyogRml4IE1DVFguICAqLworICBtY3R4LT5zdGF0ZV9sb2cgPSBiYWNrdXBfc3RhdGVfbG9nOworICBtY3R4LT5pbnB1dC5jdXJfaWR4ID0gYmFja3VwX2N1cl9pZHg7CisKKyAgLyogVGhlbiBjaGVjayB0aGUgY3VycmVudCBub2RlIHNldCBoYXMgdGhlIG5vZGUgTEFTVF9OT0RFLiAgKi8KKyAgaWYgKGN1cl9ub2RlcyAhPSBOVUxMICYmIHJlX25vZGVfc2V0X2NvbnRhaW5zIChjdXJfbm9kZXMsIGxhc3Rfbm9kZSkpCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgIHJldHVybiBSRUdfTk9NQVRDSDsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgY2hlY2tfYXJyaXZhbC4gICovCisKKy8qIENhbGN1bGF0ZSB0aGUgZGVzdGluYXRpb24gbm9kZXMgb2YgQ1VSX05PREVTIGF0IFNUUl9JRFgsIGFuZCBhcHBlbmQgdGhlbQorICAgdG8gTkVYVF9OT0RFUy4KKyAgIFRPRE86IFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB0aGUgZnVuY3Rpb25zIHRyYW5zaXRfc3RhdGUqKCksCisJIGhvd2V2ZXIgdGhpcyBmdW5jdGlvbiBoYXMgbWFueSBhZGRpdGlvbmFsIHdvcmtzLgorCSBDYW4ndCB3ZSB1bmlmeSB0aGVtPyAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBzdHJfaWR4LAorCQkJICAgICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywgcmVfbm9kZV9zZXQgKm5leHRfbm9kZXMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCByZXN1bHQ7CisgIGludCBjdXJfaWR4OworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisjZW5kaWYKKyAgcmVfbm9kZV9zZXQgdW5pb25fc2V0OworICByZV9ub2RlX3NldF9pbml0X2VtcHR5ICgmdW5pb25fc2V0KTsKKyAgZm9yIChjdXJfaWR4ID0gMDsgY3VyX2lkeCA8IGN1cl9ub2Rlcy0+bmVsZW07ICsrY3VyX2lkeCkKKyAgICB7CisgICAgICBpbnQgbmFjY2VwdGVkID0gMDsKKyAgICAgIGludCBjdXJfbm9kZSA9IGN1cl9ub2Rlcy0+ZWxlbXNbY3VyX2lkeF07CisjaWZkZWYgREVCVUcKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tjdXJfbm9kZV0udHlwZTsKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9ERSAodHlwZSkpOworI2VuZGlmCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIC8qIElmIHRoZSBub2RlIG1heSBhY2NlcHQgYG11bHRpIGJ5dGUnLiAgKi8KKyAgICAgIGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlXS5hY2NlcHRfbWIpCisJeworCSAgbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRmYSwgY3VyX25vZGUsICZtY3R4LT5pbnB1dCwKKwkJCQkJICAgICAgIHN0cl9pZHgpOworCSAgaWYgKG5hY2NlcHRlZCA+IDEpCisJICAgIHsKKwkgICAgICByZV9kZmFzdGF0ZV90ICpkZXN0X3N0YXRlOworCSAgICAgIGludCBuZXh0X25vZGUgPSBkZmEtPm5leHRzW2N1cl9ub2RlXTsKKwkgICAgICBpbnQgbmV4dF9pZHggPSBzdHJfaWR4ICsgbmFjY2VwdGVkOworCSAgICAgIGRlc3Rfc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbbmV4dF9pZHhdOworCSAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmdW5pb25fc2V0KTsKKwkgICAgICBpZiAoZGVzdF9zdGF0ZSkKKwkJeworCQkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmdW5pb25fc2V0LCAmZGVzdF9zdGF0ZS0+bm9kZXMpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHsKKwkJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJCSAgICAgIHJldHVybiBlcnI7CisJCSAgICB9CisJCX0KKwkgICAgICByZXN1bHQgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZ1bmlvbl9zZXQsIG5leHRfbm9kZSk7CisJICAgICAgaWYgKEJFIChyZXN1bHQgPCAwLCAwKSkKKwkJeworCQkgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCQkgIHJldHVybiBSRUdfRVNQQUNFOworCQl9CisJICAgICAgbWN0eC0+c3RhdGVfbG9nW25leHRfaWR4XSA9IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIsIGRmYSwKKwkJCQkJCQkgICAgJnVuaW9uX3NldCk7CisJICAgICAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbbmV4dF9pZHhdID09IE5VTEwKKwkJICAgICAgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJeworCQkgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCQkgIHJldHVybiBlcnI7CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgaWYgKG5hY2NlcHRlZAorCSAgfHwgY2hlY2tfbm9kZV9hY2NlcHQgKG1jdHgsIGRmYS0+bm9kZXMgKyBjdXJfbm9kZSwgc3RyX2lkeCkpCisJeworCSAgcmVzdWx0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChuZXh0X25vZGVzLCBkZmEtPm5leHRzW2N1cl9ub2RlXSk7CisJICBpZiAoQkUgKHJlc3VsdCA8IDAsIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwl9CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBGb3IgYWxsIHRoZSBub2RlcyBpbiBDVVJfTk9ERVMsIGFkZCB0aGUgZXBzaWxvbiBjbG9zdXJlcyBvZiB0aGVtIHRvCisgICBDVVJfTk9ERVMsIGhvd2V2ZXIgZXhjbHVkZSB0aGUgbm9kZXMgd2hpY2ggYXJlOgorICAgIC0gaW5zaWRlIHRoZSBzdWIgZXhwcmVzc2lvbiB3aG9zZSBudW1iZXIgaXMgRVhfU1VCRVhQLCBpZiBGTF9PUEVOLgorICAgIC0gb3V0IG9mIHRoZSBzdWIgZXhwcmVzc2lvbiB3aG9zZSBudW1iZXIgaXMgRVhfU1VCRVhQLCBpZiAhRkxfT1BFTi4KKyovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqY3VyX25vZGVzLAorCQkJICBpbnQgZXhfc3ViZXhwLCBpbnQgdHlwZSkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBpZHgsIG91dHNpZGVfbm9kZTsKKyAgcmVfbm9kZV9zZXQgbmV3X25vZGVzOworI2lmZGVmIERFQlVHCisgIGFzc2VydCAoY3VyX25vZGVzLT5uZWxlbSk7CisjZW5kaWYKKyAgZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZuZXdfbm9kZXMsIGN1cl9ub2Rlcy0+bmVsZW0pOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgc2V0IE5FV19OT0RFUyB3aXRoIHRoZSBub2RlcyB3aGljaCBhcmUgZXBzaWxvbgorICAgICBjbG9zdXJlcyBvZiB0aGUgbm9kZSBpbiBDVVJfTk9ERVMuICAqLworCisgIGZvciAoaWR4ID0gMDsgaWR4IDwgY3VyX25vZGVzLT5uZWxlbTsgKytpZHgpCisgICAgeworICAgICAgaW50IGN1cl9ub2RlID0gY3VyX25vZGVzLT5lbGVtc1tpZHhdOworICAgICAgY29uc3QgcmVfbm9kZV9zZXQgKmVjbG9zdXJlID0gZGZhLT5lY2xvc3VyZXMgKyBjdXJfbm9kZTsKKyAgICAgIG91dHNpZGVfbm9kZSA9IGZpbmRfc3ViZXhwX25vZGUgKGRmYSwgZWNsb3N1cmUsIGV4X3N1YmV4cCwgdHlwZSk7CisgICAgICBpZiAob3V0c2lkZV9ub2RlID09IC0xKQorCXsKKwkgIC8qIFRoZXJlIGFyZSBubyBwcm9ibGVtYXRpYyBub2RlcywganVzdCBtZXJnZSB0aGVtLiAgKi8KKwkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmbmV3X25vZGVzLCBlY2xvc3VyZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV3X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFRoZXJlIGFyZSBwcm9ibGVtYXRpYyBub2RlcywgcmUtY2FsY3VsYXRlIGluY3JlbWVudGFsbHkuICAqLworCSAgZXJyID0gY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsX3N1YiAoZGZhLCAmbmV3X25vZGVzLCBjdXJfbm9kZSwKKwkJCQkJICAgICAgZXhfc3ViZXhwLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXdfbm9kZXMpOworCSAgICAgIHJldHVybiBlcnI7CisJICAgIH0KKwl9CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlIChjdXJfbm9kZXMpOworICAqY3VyX25vZGVzID0gbmV3X25vZGVzOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsLgorICAgQ2hlY2sgaW5jcmVtZW50YWxseSB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIFRBUkdFVCwgYW5kIGlmIGl0IGlzbid0CisgICBwcm9ibGVtYXRpYyBhcHBlbmQgaXQgdG8gRFNUX05PREVTLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19hcnJpdmFsX2V4cGFuZF9lY2xfc3ViIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqZHN0X25vZGVzLAorCQkJICAgICAgaW50IHRhcmdldCwgaW50IGV4X3N1YmV4cCwgaW50IHR5cGUpCit7CisgIGludCBjdXJfbm9kZTsKKyAgZm9yIChjdXJfbm9kZSA9IHRhcmdldDsgIXJlX25vZGVfc2V0X2NvbnRhaW5zIChkc3Rfbm9kZXMsIGN1cl9ub2RlKTspCisgICAgeworICAgICAgaW50IGVycjsKKworICAgICAgaWYgKGRmYS0+bm9kZXNbY3VyX25vZGVdLnR5cGUgPT0gdHlwZQorCSAgJiYgZGZhLT5ub2Rlc1tjdXJfbm9kZV0ub3ByLmlkeCA9PSBleF9zdWJleHApCisJeworCSAgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQKQorCSAgICB7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkc3Rfbm9kZXMsIGN1cl9ub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciA9PSAtMSwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICB9CisJICBicmVhazsKKwl9CisgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRzdF9ub2RlcywgY3VyX25vZGUpOworICAgICAgaWYgKEJFIChlcnIgPT0gLTEsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgaWYgKGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5uZWxlbSA9PSAwKQorCWJyZWFrOworICAgICAgaWYgKGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5uZWxlbSA9PSAyKQorCXsKKwkgIGVyciA9IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbF9zdWIgKGRmYSwgZHN0X25vZGVzLAorCQkJCQkgICAgICBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMV0sCisJCQkJCSAgICAgIGV4X3N1YmV4cCwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgICAgY3VyX25vZGUgPSBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMF07CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKworLyogRm9yIGFsbCB0aGUgYmFjayByZWZlcmVuY2VzIGluIHRoZSBjdXJyZW50IHN0YXRlLCBjYWxjdWxhdGUgdGhlCisgICBkZXN0aW5hdGlvbiBvZiB0aGUgYmFjayByZWZlcmVuY2VzIGJ5IHRoZSBhcHByb3ByaWF0ZSBlbnRyeQorICAgaW4gTUNUWC0+QktSRUZfRU5UUy4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZXhwYW5kX2JrcmVmX2NhY2hlIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCSAgICBpbnQgY3VyX3N0ciwgaW50IHN1YmV4cF9udW0sIGludCB0eXBlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGNhY2hlX2lkeF9zdGFydCA9IHNlYXJjaF9jdXJfYmtyZWZfZW50cnkgKG1jdHgsIGN1cl9zdHIpOworICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50OworCisgIGlmIChjYWNoZV9pZHhfc3RhcnQgPT0gLTEpCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgcmVzdGFydDoKKyAgZW50ID0gbWN0eC0+YmtyZWZfZW50cyArIGNhY2hlX2lkeF9zdGFydDsKKyAgZG8KKyAgICB7CisgICAgICBpbnQgdG9faWR4LCBuZXh0X25vZGU7CisKKyAgICAgIC8qIElzIHRoaXMgZW50cnkgRU5UIGlzIGFwcHJvcHJpYXRlPyAgKi8KKyAgICAgIGlmICghcmVfbm9kZV9zZXRfY29udGFpbnMgKGN1cl9ub2RlcywgZW50LT5ub2RlKSkKKwljb250aW51ZTsgLyogTm8uICAqLworCisgICAgICB0b19pZHggPSBjdXJfc3RyICsgZW50LT5zdWJleHBfdG8gLSBlbnQtPnN1YmV4cF9mcm9tOworICAgICAgLyogQ2FsY3VsYXRlIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYmFjayByZWZlcmVuY2UsIGFuZCBhcHBlbmQgaXQKKwkgdG8gTUNUWC0+U1RBVEVfTE9HLiAgKi8KKyAgICAgIGlmICh0b19pZHggPT0gY3VyX3N0cikKKwl7CisJICAvKiBUaGUgYmFja3JlZmVyZW5jZSBkaWQgZXBzaWxvbiB0cmFuc2l0LCB3ZSBtdXN0IHJlLWNoZWNrIGFsbCB0aGUKKwkgICAgIG5vZGUgaW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLworCSAgcmVfbm9kZV9zZXQgbmV3X2Rlc3RzOworCSAgcmVnX2VycmNvZGVfdCBlcnIyLCBlcnIzOworCSAgbmV4dF9ub2RlID0gZGZhLT5lZGVzdHNbZW50LT5ub2RlXS5lbGVtc1swXTsKKwkgIGlmIChyZV9ub2RlX3NldF9jb250YWlucyAoY3VyX25vZGVzLCBuZXh0X25vZGUpKQorCSAgICBjb250aW51ZTsKKwkgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoJm5ld19kZXN0cywgbmV4dF9ub2RlKTsKKwkgIGVycjIgPSBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2wgKGRmYSwgJm5ld19kZXN0cywgc3ViZXhwX251bSwgdHlwZSk7CisJICBlcnIzID0gcmVfbm9kZV9zZXRfbWVyZ2UgKGN1cl9ub2RlcywgJm5ld19kZXN0cyk7CisJICByZV9ub2RlX3NldF9mcmVlICgmbmV3X2Rlc3RzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SIHx8IGVycjIgIT0gUkVHX05PRVJST1IKKwkJICB8fCBlcnIzICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIGVyciA9IChlcnIgIT0gUkVHX05PRVJST1IgPyBlcnIKKwkJICAgICA6IChlcnIyICE9IFJFR19OT0VSUk9SID8gZXJyMiA6IGVycjMpKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJICAvKiBUT0RPOiBJdCBpcyBzdGlsbCBpbmVmZmljaWVudC4uLiAgKi8KKwkgIGdvdG8gcmVzdGFydDsKKwl9CisgICAgICBlbHNlCisJeworCSAgcmVfbm9kZV9zZXQgdW5pb25fc2V0OworCSAgbmV4dF9ub2RlID0gZGZhLT5uZXh0c1tlbnQtPm5vZGVdOworCSAgaWYgKG1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdKQorCSAgICB7CisJICAgICAgaW50IHJldDsKKwkgICAgICBpZiAocmVfbm9kZV9zZXRfY29udGFpbnMgKCZtY3R4LT5zdGF0ZV9sb2dbdG9faWR4XS0+bm9kZXMsCisJCQkJCW5leHRfbm9kZSkpCisJCWNvbnRpbnVlOworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJnVuaW9uX3NldCwKKwkJCQkJICAgJm1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdLT5ub2Rlcyk7CisJICAgICAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0ICgmdW5pb25fc2V0LCBuZXh0X25vZGUpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SIHx8IHJldCA8IDAsIDApKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJCSAgZXJyID0gZXJyICE9IFJFR19OT0VSUk9SID8gZXJyIDogUkVHX0VTUEFDRTsKKwkJICByZXR1cm4gZXJyOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoJnVuaW9uX3NldCwgbmV4dF9ub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKwkgIG1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZhLCAmdW5pb25fc2V0KTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCSAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbdG9faWR4XSA9PSBOVUxMCisJCSAgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgfQorICB3aGlsZSAoZW50KystPm1vcmUpOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEJ1aWxkIHRyYW5zaXRpb24gdGFibGUgZm9yIHRoZSBzdGF0ZS4KKyAgIFJldHVybiAxIGlmIHN1Y2NlZWRlZCwgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2J1aWxkX3RydGFibGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGksIGosIGNoLCBuZWVkX3dvcmRfdHJ0YWJsZSA9IDA7CisgIGJpdHNldF93b3JkX3QgZWxlbSwgbWFzazsKKyAgYm9vbCBkZXN0c19ub2RlX21hbGxvY2VkID0gZmFsc2U7CisgIGJvb2wgZGVzdF9zdGF0ZXNfbWFsbG9jZWQgPSBmYWxzZTsKKyAgaW50IG5kZXN0czsgLyogTnVtYmVyIG9mIHRoZSBkZXN0aW5hdGlvbiBzdGF0ZXMgZnJvbSBgc3RhdGUnLiAgKi8KKyAgcmVfZGZhc3RhdGVfdCAqKnRydGFibGU7CisgIHJlX2RmYXN0YXRlX3QgKipkZXN0X3N0YXRlcyA9IE5VTEwsICoqZGVzdF9zdGF0ZXNfd29yZCwgKipkZXN0X3N0YXRlc19ubDsKKyAgcmVfbm9kZV9zZXQgZm9sbG93cywgKmRlc3RzX25vZGU7CisgIGJpdHNldF90ICpkZXN0c19jaDsKKyAgYml0c2V0X3QgYWNjZXB0YWJsZTsKKworICBzdHJ1Y3QgZGVzdHNfYWxsb2MKKyAgeworICAgIHJlX25vZGVfc2V0IGRlc3RzX25vZGVbU0JDX01BWF07CisgICAgYml0c2V0X3QgZGVzdHNfY2hbU0JDX01BWF07CisgIH0gKmRlc3RzX2FsbG9jOworCisgIC8qIFdlIGJ1aWxkIERGQSBzdGF0ZXMgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGRlc3RpbmF0aW9uIG5vZGVzCisgICAgIGZyb20gYHN0YXRlJy4gIGBkZXN0c19ub2RlW2ldJyByZXByZXNlbnRzIHRoZSBub2RlcyB3aGljaCBpLXRoCisgICAgIGRlc3RpbmF0aW9uIHN0YXRlIGNvbnRhaW5zLCBhbmQgYGRlc3RzX2NoW2ldJyByZXByZXNlbnRzIHRoZQorICAgICBjaGFyYWN0ZXJzIHdoaWNoIGktdGggZGVzdGluYXRpb24gc3RhdGUgYWNjZXB0cy4gICovCisjaWZkZWYgSEFWRV9BTExPQ0EKKyAgaWYgKF9fbGliY191c2VfYWxsb2NhIChzaXplb2YgKHN0cnVjdCBkZXN0c19hbGxvYykpKQorICAgIGRlc3RzX2FsbG9jID0gKHN0cnVjdCBkZXN0c19hbGxvYyAqKSBhbGxvY2EgKHNpemVvZiAoc3RydWN0IGRlc3RzX2FsbG9jKSk7CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGRlc3RzX2FsbG9jID0gcmVfbWFsbG9jIChzdHJ1Y3QgZGVzdHNfYWxsb2MsIDEpOworICAgICAgaWYgKEJFIChkZXN0c19hbGxvYyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gMDsKKyAgICAgIGRlc3RzX25vZGVfbWFsbG9jZWQgPSB0cnVlOworICAgIH0KKyAgZGVzdHNfbm9kZSA9IGRlc3RzX2FsbG9jLT5kZXN0c19ub2RlOworICBkZXN0c19jaCA9IGRlc3RzX2FsbG9jLT5kZXN0c19jaDsKKworICAvKiBJbml0aWFsaXplIHRyYW5zaXRvbiB0YWJsZS4gICovCisgIHN0YXRlLT53b3JkX3RydGFibGUgPSBzdGF0ZS0+dHJ0YWJsZSA9IE5VTEw7CisKKyAgLyogQXQgZmlyc3QsIGdyb3VwIGFsbCBub2RlcyBiZWxvbmdpbmcgdG8gYHN0YXRlJyBpbnRvIHNldmVyYWwKKyAgICAgZGVzdGluYXRpb25zLiAgKi8KKyAgbmRlc3RzID0gZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGRmYSwgc3RhdGUsIGRlc3RzX25vZGUsIGRlc3RzX2NoKTsKKyAgaWYgKEJFIChuZGVzdHMgPD0gMCwgMCkpCisgICAgeworICAgICAgaWYgKGRlc3RzX25vZGVfbWFsbG9jZWQpCisJZnJlZSAoZGVzdHNfYWxsb2MpOworICAgICAgLyogUmV0dXJuIDAgaW4gY2FzZSBvZiBhbiBlcnJvciwgMSBvdGhlcndpc2UuICAqLworICAgICAgaWYgKG5kZXN0cyA9PSAwKQorCXsKKwkgIHN0YXRlLT50cnRhYmxlID0gKHJlX2RmYXN0YXRlX3QgKiopCisJICAgIGNhbGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopLCBTQkNfTUFYKTsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBlcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJmZvbGxvd3MsIG5kZXN0cyArIDEpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgZ290byBvdXRfZnJlZTsKKworICAvKiBBdm9pZCBhcml0aG1ldGljIG92ZXJmbG93IGluIHNpemUgY2FsY3VsYXRpb24uICAqLworICBpZiAoQkUgKCgoKFNJWkVfTUFYIC0gKHNpemVvZiAocmVfbm9kZV9zZXQpICsgc2l6ZW9mIChiaXRzZXRfdCkpICogU0JDX01BWCkKKwkgICAgLyAoMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSkpCisJICAgPCBuZGVzdHMpLAorCSAgMCkpCisgICAgZ290byBvdXRfZnJlZTsKKworI2lmZGVmIEhBVkVfQUxMT0NBCisgIGlmIChfX2xpYmNfdXNlX2FsbG9jYSAoKHNpemVvZiAocmVfbm9kZV9zZXQpICsgc2l6ZW9mIChiaXRzZXRfdCkpICogU0JDX01BWAorCQkJICsgbmRlc3RzICogMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSkpCisgICAgZGVzdF9zdGF0ZXMgPSAocmVfZGZhc3RhdGVfdCAqKikKKyAgICAgIGFsbG9jYSAobmRlc3RzICogMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSk7CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGRlc3Rfc3RhdGVzID0gKHJlX2RmYXN0YXRlX3QgKiopCisJbWFsbG9jIChuZGVzdHMgKiAzICogc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopKTsKKyAgICAgIGlmIChCRSAoZGVzdF9zdGF0ZXMgPT0gTlVMTCwgMCkpCisJeworb3V0X2ZyZWU6CisJICBpZiAoZGVzdF9zdGF0ZXNfbWFsbG9jZWQpCisJICAgIGZyZWUgKGRlc3Rfc3RhdGVzKTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZmb2xsb3dzKTsKKwkgIGZvciAoaSA9IDA7IGkgPCBuZGVzdHM7ICsraSkKKwkgICAgcmVfbm9kZV9zZXRfZnJlZSAoZGVzdHNfbm9kZSArIGkpOworCSAgaWYgKGRlc3RzX25vZGVfbWFsbG9jZWQpCisJICAgIGZyZWUgKGRlc3RzX2FsbG9jKTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIGRlc3Rfc3RhdGVzX21hbGxvY2VkID0gdHJ1ZTsKKyAgICB9CisgIGRlc3Rfc3RhdGVzX3dvcmQgPSBkZXN0X3N0YXRlcyArIG5kZXN0czsKKyAgZGVzdF9zdGF0ZXNfbmwgPSBkZXN0X3N0YXRlc193b3JkICsgbmRlc3RzOworICBiaXRzZXRfZW1wdHkgKGFjY2VwdGFibGUpOworCisgIC8qIFRoZW4gYnVpbGQgdGhlIHN0YXRlcyBmb3IgYWxsIGRlc3RpbmF0aW9ucy4gICovCisgIGZvciAoaSA9IDA7IGkgPCBuZGVzdHM7ICsraSkKKyAgICB7CisgICAgICBpbnQgbmV4dF9ub2RlOworICAgICAgcmVfbm9kZV9zZXRfZW1wdHkgKCZmb2xsb3dzKTsKKyAgICAgIC8qIE1lcmdlIHRoZSBmb2xsb3dzIG9mIHRoaXMgZGVzdGluYXRpb24gc3RhdGVzLiAgKi8KKyAgICAgIGZvciAoaiA9IDA7IGogPCBkZXN0c19ub2RlW2ldLm5lbGVtOyArK2opCisJeworCSAgbmV4dF9ub2RlID0gZGZhLT5uZXh0c1tkZXN0c19ub2RlW2ldLmVsZW1zW2pdXTsKKwkgIGlmIChuZXh0X25vZGUgIT0gLTEpCisJICAgIHsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJmZvbGxvd3MsIGRmYS0+ZWNsb3N1cmVzICsgbmV4dF9ub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gb3V0X2ZyZWU7CisJICAgIH0KKwl9CisgICAgICBkZXN0X3N0YXRlc1tpXSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZm9sbG93cywgMCk7CisgICAgICBpZiAoQkUgKGRlc3Rfc3RhdGVzW2ldID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIG91dF9mcmVlOworICAgICAgLyogSWYgdGhlIG5ldyBzdGF0ZSBoYXMgY29udGV4dCBjb25zdHJhaW50LAorCSBidWlsZCBhcHByb3ByaWF0ZSBzdGF0ZXMgZm9yIHRoZXNlIGNvbnRleHRzLiAgKi8KKyAgICAgIGlmIChkZXN0X3N0YXRlc1tpXS0+aGFzX2NvbnN0cmFpbnQpCisJeworCSAgZGVzdF9zdGF0ZXNfd29yZFtpXSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZm9sbG93cywKKwkJCQkJCQkgIENPTlRFWFRfV09SRCk7CisJICBpZiAoQkUgKGRlc3Rfc3RhdGVzX3dvcmRbaV0gPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIG91dF9mcmVlOworCisJICBpZiAoZGVzdF9zdGF0ZXNbaV0gIT0gZGVzdF9zdGF0ZXNfd29yZFtpXSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorCSAgICBuZWVkX3dvcmRfdHJ0YWJsZSA9IDE7CisKKwkgIGRlc3Rfc3RhdGVzX25sW2ldID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZmb2xsb3dzLAorCQkJCQkJCUNPTlRFWFRfTkVXTElORSk7CisJICBpZiAoQkUgKGRlc3Rfc3RhdGVzX25sW2ldID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBvdXRfZnJlZTsKKyAJfQorICAgICAgZWxzZQorCXsKKwkgIGRlc3Rfc3RhdGVzX3dvcmRbaV0gPSBkZXN0X3N0YXRlc1tpXTsKKwkgIGRlc3Rfc3RhdGVzX25sW2ldID0gZGVzdF9zdGF0ZXNbaV07CisJfQorICAgICAgYml0c2V0X21lcmdlIChhY2NlcHRhYmxlLCBkZXN0c19jaFtpXSk7CisgICAgfQorCisgIGlmICghQkUgKG5lZWRfd29yZF90cnRhYmxlLCAwKSkKKyAgICB7CisgICAgICAvKiBXZSBkb24ndCBjYXJlIGFib3V0IHdoZXRoZXIgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgYSB3b3JkCisJIGNoYXJhY3Rlciwgb3Igd2UgYXJlIGluIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHNldCBzbyB3ZSBjYW4KKwkgZGlzY2VybiBieSBsb29raW5nIGF0IHRoZSBjaGFyYWN0ZXIgY29kZTogYWxsb2NhdGUgYQorCSAyNTYtZW50cnkgdHJhbnNpdGlvbiB0YWJsZS4gICovCisgICAgICB0cnRhYmxlID0gc3RhdGUtPnRydGFibGUgPQorCShyZV9kZmFzdGF0ZV90ICoqKSBjYWxsb2MgKHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSwgU0JDX01BWCk7CisgICAgICBpZiAoQkUgKHRydGFibGUgPT0gTlVMTCwgMCkpCisJZ290byBvdXRfZnJlZTsKKworICAgICAgLyogRm9yIGFsbCBjaGFyYWN0ZXJzIGNoLi4uOiAgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwlmb3IgKGNoID0gaSAqIEJJVFNFVF9XT1JEX0JJVFMsIGVsZW0gPSBhY2NlcHRhYmxlW2ldLCBtYXNrID0gMTsKKwkgICAgIGVsZW07CisJICAgICBtYXNrIDw8PSAxLCBlbGVtID4+PSAxLCArK2NoKQorCSAgaWYgKEJFIChlbGVtICYgMSwgMCkpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGRlc3RpbmF0aW9uIHdoaWNoIGFjY2VwdHMKKwkJIGNoYXJhY3RlciBjaC4gIFNlZSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcy4gICovCisJICAgICAgZm9yIChqID0gMDsgKGRlc3RzX2NoW2pdW2ldICYgbWFzaykgPT0gMDsgKytqKQorCQk7CisKKwkgICAgICAvKiBqLXRoIGRlc3RpbmF0aW9uIGFjY2VwdHMgdGhlIHdvcmQgY2hhcmFjdGVyIGNoLiAgKi8KKwkgICAgICBpZiAoZGZhLT53b3JkX2NoYXJbaV0gJiBtYXNrKQorCQl0cnRhYmxlW2NoXSA9IGRlc3Rfc3RhdGVzX3dvcmRbal07CisJICAgICAgZWxzZQorCQl0cnRhYmxlW2NoXSA9IGRlc3Rfc3RhdGVzW2pdOworCSAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogV2UgY2FyZSBhYm91dCB3aGV0aGVyIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIGEgd29yZAorCSBjaGFyYWN0ZXIsIGFuZCB3ZSBhcmUgaW4gYSBtdWx0aS1ieXRlIGNoYXJhY3RlciBzZXQ6IGRpc2Nlcm4KKwkgYnkgbG9va2luZyBhdCB0aGUgY2hhcmFjdGVyIGNvZGU6IGJ1aWxkIHR3byAyNTYtZW50cnkKKwkgdHJhbnNpdGlvbiB0YWJsZXMsIG9uZSBzdGFydGluZyBhdCB0cnRhYmxlWzBdIGFuZCBvbmUKKwkgc3RhcnRpbmcgYXQgdHJ0YWJsZVtTQkNfTUFYXS4gICovCisgICAgICB0cnRhYmxlID0gc3RhdGUtPndvcmRfdHJ0YWJsZSA9CisJKHJlX2RmYXN0YXRlX3QgKiopIGNhbGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopLCAyICogU0JDX01BWCk7CisgICAgICBpZiAoQkUgKHRydGFibGUgPT0gTlVMTCwgMCkpCisJZ290byBvdXRfZnJlZTsKKworICAgICAgLyogRm9yIGFsbCBjaGFyYWN0ZXJzIGNoLi4uOiAgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwlmb3IgKGNoID0gaSAqIEJJVFNFVF9XT1JEX0JJVFMsIGVsZW0gPSBhY2NlcHRhYmxlW2ldLCBtYXNrID0gMTsKKwkgICAgIGVsZW07CisJICAgICBtYXNrIDw8PSAxLCBlbGVtID4+PSAxLCArK2NoKQorCSAgaWYgKEJFIChlbGVtICYgMSwgMCkpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGRlc3RpbmF0aW9uIHdoaWNoIGFjY2VwdHMKKwkJIGNoYXJhY3RlciBjaC4gIFNlZSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcy4gICovCisJICAgICAgZm9yIChqID0gMDsgKGRlc3RzX2NoW2pdW2ldICYgbWFzaykgPT0gMDsgKytqKQorCQk7CisKKwkgICAgICAvKiBqLXRoIGRlc3RpbmF0aW9uIGFjY2VwdHMgdGhlIHdvcmQgY2hhcmFjdGVyIGNoLiAgKi8KKwkgICAgICB0cnRhYmxlW2NoXSA9IGRlc3Rfc3RhdGVzW2pdOworCSAgICAgIHRydGFibGVbY2ggKyBTQkNfTUFYXSA9IGRlc3Rfc3RhdGVzX3dvcmRbal07CisJICAgIH0KKyAgICB9CisKKyAgLyogbmV3IGxpbmUgKi8KKyAgaWYgKGJpdHNldF9jb250YWluIChhY2NlcHRhYmxlLCBORVdMSU5FX0NIQVIpKQorICAgIHsKKyAgICAgIC8qIFRoZSBjdXJyZW50IHN0YXRlIGFjY2VwdHMgbmV3bGluZSBjaGFyYWN0ZXIuICAqLworICAgICAgZm9yIChqID0gMDsgaiA8IG5kZXN0czsgKytqKQorCWlmIChiaXRzZXRfY29udGFpbiAoZGVzdHNfY2hbal0sIE5FV0xJTkVfQ0hBUikpCisJICB7CisJICAgIC8qIGstdGggZGVzdGluYXRpb24gYWNjZXB0cyBuZXdsaW5lIGNoYXJhY3Rlci4gICovCisJICAgIHRydGFibGVbTkVXTElORV9DSEFSXSA9IGRlc3Rfc3RhdGVzX25sW2pdOworCSAgICBpZiAobmVlZF93b3JkX3RydGFibGUpCisJICAgICAgdHJ0YWJsZVtORVdMSU5FX0NIQVIgKyBTQkNfTUFYXSA9IGRlc3Rfc3RhdGVzX25sW2pdOworCSAgICAvKiBUaGVyZSBtdXN0IGJlIG9ubHkgb25lIGRlc3RpbmF0aW9uIHdoaWNoIGFjY2VwdHMKKwkgICAgICAgbmV3bGluZS4gIFNlZSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcy4gICovCisJICAgIGJyZWFrOworCSAgfQorICAgIH0KKworICBpZiAoZGVzdF9zdGF0ZXNfbWFsbG9jZWQpCisgICAgZnJlZSAoZGVzdF9zdGF0ZXMpOworCisgIHJlX25vZGVfc2V0X2ZyZWUgKCZmb2xsb3dzKTsKKyAgZm9yIChpID0gMDsgaSA8IG5kZXN0czsgKytpKQorICAgIHJlX25vZGVfc2V0X2ZyZWUgKGRlc3RzX25vZGUgKyBpKTsKKworICBpZiAoZGVzdHNfbm9kZV9tYWxsb2NlZCkKKyAgICBmcmVlIChkZXN0c19hbGxvYyk7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEdyb3VwIGFsbCBub2RlcyBiZWxvbmdpbmcgdG8gU1RBVEUgaW50byBzZXZlcmFsIGRlc3RpbmF0aW9ucy4KKyAgIFRoZW4gZm9yIGFsbCBkZXN0aW5hdGlvbnMsIHNldCB0aGUgbm9kZXMgYmVsb25naW5nIHRvIHRoZSBkZXN0aW5hdGlvbgorICAgdG8gREVTVFNfTk9ERVtpXSBhbmQgc2V0IHRoZSBjaGFyYWN0ZXJzIGFjY2VwdGVkIGJ5IHRoZSBkZXN0aW5hdGlvbgorICAgdG8gREVTVF9DSFtpXS4gIFRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZSBudW1iZXIgb2YgZGVzdGluYXRpb25zLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2dyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKwkJCSAgICByZV9ub2RlX3NldCAqZGVzdHNfbm9kZSwgYml0c2V0X3QgKmRlc3RzX2NoKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IHJlc3VsdDsKKyAgaW50IGksIGosIGs7CisgIGludCBuZGVzdHM7IC8qIE51bWJlciBvZiB0aGUgZGVzdGluYXRpb25zIGZyb20gYHN0YXRlJy4gICovCisgIGJpdHNldF90IGFjY2VwdHM7IC8qIENoYXJhY3RlcnMgYSBub2RlIGNhbiBhY2NlcHQuICAqLworICBjb25zdCByZV9ub2RlX3NldCAqY3VyX25vZGVzID0gJnN0YXRlLT5ub2RlczsKKyAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKyAgbmRlc3RzID0gMDsKKworICAvKiBGb3IgYWxsIHRoZSBub2RlcyBiZWxvbmdpbmcgdG8gYHN0YXRlJywgICovCisgIGZvciAoaSA9IDA7IGkgPCBjdXJfbm9kZXMtPm5lbGVtOyArK2kpCisgICAgeworICAgICAgcmVfdG9rZW5fdCAqbm9kZSA9ICZkZmEtPm5vZGVzW2N1cl9ub2Rlcy0+ZWxlbXNbaV1dOworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBub2RlLT50eXBlOworICAgICAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQgPSBub2RlLT5jb25zdHJhaW50OworCisgICAgICAvKiBFbnVtZXJhdGUgYWxsIHNpbmdsZSBieXRlIGNoYXJhY3RlciB0aGlzIG5vZGUgY2FuIGFjY2VwdC4gICovCisgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIpCisJYml0c2V0X3NldCAoYWNjZXB0cywgbm9kZS0+b3ByLmMpOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBTSU1QTEVfQlJBQ0tFVCkKKwl7CisJICBiaXRzZXRfbWVyZ2UgKGFjY2VwdHMsIG5vZGUtPm9wci5zYmNzZXQpOworCX0KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfUEVSSU9EKQorCXsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJICAgIGJpdHNldF9tZXJnZSAoYWNjZXB0cywgZGZhLT5zYl9jaGFyKTsKKwkgIGVsc2UKKyNlbmRpZgorCSAgICBiaXRzZXRfc2V0X2FsbCAoYWNjZXB0cyk7CisJICBpZiAoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXG4nKTsKKwkgIGlmIChkZmEtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXDAnKTsKKwl9CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfVVRGOF9QRVJJT0QpCisJeworCSAgbWVtc2V0IChhY2NlcHRzLCAnXHhmZicsIHNpemVvZiAoYml0c2V0X3QpIC8gMik7CisJICBpZiAoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXG4nKTsKKwkgIGlmIChkZmEtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXDAnKTsKKwl9CisjZW5kaWYKKyAgICAgIGVsc2UKKwljb250aW51ZTsKKworICAgICAgLyogQ2hlY2sgdGhlIGBhY2NlcHRzJyBhbmQgc2lmdCB0aGUgY2hhcmFjdGVycyB3aGljaCBhcmUgbm90CisJIG1hdGNoIGl0IHRoZSBjb250ZXh0LiAgKi8KKyAgICAgIGlmIChjb25zdHJhaW50KQorCXsKKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBib29sIGFjY2VwdHNfbmV3bGluZSA9IGJpdHNldF9jb250YWluIChhY2NlcHRzLCBORVdMSU5FX0NIQVIpOworCSAgICAgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisJICAgICAgaWYgKGFjY2VwdHNfbmV3bGluZSkKKwkJYml0c2V0X3NldCAoYWNjZXB0cywgTkVXTElORV9DSEFSKTsKKwkgICAgICBlbHNlCisJCWNvbnRpbnVlOworCSAgICB9CisJICBpZiAoY29uc3RyYWludCAmIE5FWFRfRU5EQlVGX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisKKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9XT1JEX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfd29yZF90IGFueV9zZXQgPSAwOworCSAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiAhbm9kZS0+d29yZF9jaGFyKQorCQl7CisJCSAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKwkJICBjb250aW51ZTsKKwkJfQorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKwkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IChkZmEtPndvcmRfY2hhcltqXSB8IH5kZmEtPnNiX2NoYXJbal0pKTsKKwkgICAgICBlbHNlCisjZW5kaWYKKwkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gZGZhLT53b3JkX2NoYXJbal0pOworCSAgICAgIGlmICghYW55X3NldCkKKwkJY29udGludWU7CisJICAgIH0KKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfd29yZF90IGFueV9zZXQgPSAwOworCSAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiBub2RlLT53b3JkX2NoYXIpCisJCXsKKwkJICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCQkgIGNvbnRpbnVlOworCQl9CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gfihkZmEtPndvcmRfY2hhcltqXSAmIGRmYS0+c2JfY2hhcltqXSkpOworCSAgICAgIGVsc2UKKyNlbmRpZgorCQlmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRTOyArK2opCisJCSAgYW55X3NldCB8PSAoYWNjZXB0c1tqXSAmPSB+ZGZhLT53b3JkX2NoYXJbal0pOworCSAgICAgIGlmICghYW55X3NldCkKKwkJY29udGludWU7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFRoZW4gZGl2aWRlIGBhY2NlcHRzJyBpbnRvIERGQSBzdGF0ZXMsIG9yIGNyZWF0ZSBhIG5ldworCSBzdGF0ZS4gIEFib3ZlLCB3ZSBtYWtlIHN1cmUgdGhhdCBhY2NlcHRzIGlzIG5vdCBlbXB0eS4gICovCisgICAgICBmb3IgKGogPSAwOyBqIDwgbmRlc3RzOyArK2opCisJeworCSAgYml0c2V0X3QgaW50ZXJzZWM7IC8qIEludGVyc2VjdGlvbiBzZXRzLCBzZWUgYmVsb3cuICAqLworCSAgYml0c2V0X3QgcmVtYWluczsKKwkgIC8qIEZsYWdzLCBzZWUgYmVsb3cuICAqLworCSAgYml0c2V0X3dvcmRfdCBoYXNfaW50ZXJzZWMsIG5vdF9zdWJzZXQsIG5vdF9jb25zdW1lZDsKKworCSAgLyogT3B0aW1pemF0aW9uLCBza2lwIGlmIHRoaXMgc3RhdGUgZG9lc24ndCBhY2NlcHQgdGhlIGNoYXJhY3Rlci4gICovCisJICBpZiAodHlwZSA9PSBDSEFSQUNURVIgJiYgIWJpdHNldF9jb250YWluIChkZXN0c19jaFtqXSwgbm9kZS0+b3ByLmMpKQorCSAgICBjb250aW51ZTsKKworCSAgLyogRW51bWVyYXRlIHRoZSBpbnRlcnNlY3Rpb24gc2V0IG9mIHRoaXMgc3RhdGUgYW5kIGBhY2NlcHRzJy4gICovCisJICBoYXNfaW50ZXJzZWMgPSAwOworCSAgZm9yIChrID0gMDsgayA8IEJJVFNFVF9XT1JEUzsgKytrKQorCSAgICBoYXNfaW50ZXJzZWMgfD0gaW50ZXJzZWNba10gPSBhY2NlcHRzW2tdICYgZGVzdHNfY2hbal1ba107CisJICAvKiBBbmQgc2tpcCBpZiB0aGUgaW50ZXJzZWN0aW9uIHNldCBpcyBlbXB0eS4gICovCisJICBpZiAoIWhhc19pbnRlcnNlYykKKwkgICAgY29udGludWU7CisKKwkgIC8qIFRoZW4gY2hlY2sgaWYgdGhpcyBzdGF0ZSBpcyBhIHN1YnNldCBvZiBgYWNjZXB0cycuICAqLworCSAgbm90X3N1YnNldCA9IG5vdF9jb25zdW1lZCA9IDA7CisJICBmb3IgKGsgPSAwOyBrIDwgQklUU0VUX1dPUkRTOyArK2spCisJICAgIHsKKwkgICAgICBub3Rfc3Vic2V0IHw9IHJlbWFpbnNba10gPSB+YWNjZXB0c1trXSAmIGRlc3RzX2NoW2pdW2tdOworCSAgICAgIG5vdF9jb25zdW1lZCB8PSBhY2NlcHRzW2tdID0gYWNjZXB0c1trXSAmIH5kZXN0c19jaFtqXVtrXTsKKwkgICAgfQorCisJICAvKiBJZiB0aGlzIHN0YXRlIGlzbid0IGEgc3Vic2V0IG9mIGBhY2NlcHRzJywgY3JlYXRlIGEKKwkgICAgIG5ldyBncm91cCBzdGF0ZSwgd2hpY2ggaGFzIHRoZSBgcmVtYWlucycuICovCisJICBpZiAobm90X3N1YnNldCkKKwkgICAgeworCSAgICAgIGJpdHNldF9jb3B5IChkZXN0c19jaFtuZGVzdHNdLCByZW1haW5zKTsKKwkgICAgICBiaXRzZXRfY29weSAoZGVzdHNfY2hbal0sIGludGVyc2VjKTsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKGRlc3RzX25vZGUgKyBuZGVzdHMsICZkZXN0c19ub2RlW2pdKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZXJyb3JfcmV0dXJuOworCSAgICAgICsrbmRlc3RzOworCSAgICB9CisKKwkgIC8qIFB1dCB0aGUgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgZ3JvdXAuICovCisJICByZXN1bHQgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZkZXN0c19ub2RlW2pdLCBjdXJfbm9kZXMtPmVsZW1zW2ldKTsKKwkgIGlmIChCRSAocmVzdWx0IDwgMCwgMCkpCisJICAgIGdvdG8gZXJyb3JfcmV0dXJuOworCisJICAvKiBJZiBhbGwgY2hhcmFjdGVycyBhcmUgY29uc3VtZWQsIGdvIHRvIG5leHQgbm9kZS4gKi8KKwkgIGlmICghbm90X2NvbnN1bWVkKQorCSAgICBicmVhazsKKwl9CisgICAgICAvKiBTb21lIGNoYXJhY3RlcnMgcmVtYWluLCBjcmVhdGUgYSBuZXcgZ3JvdXAuICovCisgICAgICBpZiAoaiA9PSBuZGVzdHMpCisJeworCSAgYml0c2V0X2NvcHkgKGRlc3RzX2NoW25kZXN0c10sIGFjY2VwdHMpOworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xIChkZXN0c19ub2RlICsgbmRlc3RzLCBjdXJfbm9kZXMtPmVsZW1zW2ldKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBlcnJvcl9yZXR1cm47CisJICArK25kZXN0czsKKwkgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisJfQorICAgIH0KKyAgcmV0dXJuIG5kZXN0czsKKyBlcnJvcl9yZXR1cm46CisgIGZvciAoaiA9IDA7IGogPCBuZGVzdHM7ICsraikKKyAgICByZV9ub2RlX3NldF9mcmVlIChkZXN0c19ub2RlICsgaik7CisgIHJldHVybiAtMTsKK30KKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBDaGVjayBob3cgbWFueSBieXRlcyB0aGUgbm9kZSBgZGZhLT5ub2Rlc1tub2RlX2lkeF0nIGFjY2VwdHMuCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgYnl0ZXMgdGhlIG5vZGUgYWNjZXB0cy4KKyAgIFNUUl9JRFggaXMgdGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGlucHV0IHN0cmluZy4KKworICAgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBub2RlcyB3aGljaCBjYW4gYWNjZXB0IG9uZSBjaGFyYWN0ZXIsIG9yCisgICBvbmUgY29sbGF0aW5nIGVsZW1lbnQgbGlrZSAnLicsICdbYS16XScsIG9wcG9zaXRlIHRvIHRoZSBvdGhlciBub2RlcworICAgY2FuIG9ubHkgYWNjZXB0IG9uZSBieXRlLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisJCQkgY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBpbnQgc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBub2RlX2lkeDsKKyAgaW50IGNoYXJfbGVuLCBlbGVtX2xlbjsKKyAgaW50IGk7CisgIHdpbnRfdCB3YzsKKworICBpZiAoQkUgKG5vZGUtPnR5cGUgPT0gT1BfVVRGOF9QRVJJT0QsIDApKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCksIGQ7CisgICAgICBpZiAoQkUgKGMgPCAweGMyLCAxKSkKKwlyZXR1cm4gMDsKKworICAgICAgaWYgKHN0cl9pZHggKyAyID4gaW5wdXQtPmxlbikKKwlyZXR1cm4gMDsKKworICAgICAgZCA9IHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCArIDEpOworICAgICAgaWYgKGMgPCAweGUwKQorCXJldHVybiAoZCA8IDB4ODAgfHwgZCA+IDB4YmYpID8gMCA6IDI7CisgICAgICBlbHNlIGlmIChjIDwgMHhmMCkKKwl7CisJICBjaGFyX2xlbiA9IDM7CisJICBpZiAoYyA9PSAweGUwICYmIGQgPCAweGEwKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChjIDwgMHhmOCkKKwl7CisJICBjaGFyX2xlbiA9IDQ7CisJICBpZiAoYyA9PSAweGYwICYmIGQgPCAweDkwKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChjIDwgMHhmYykKKwl7CisJICBjaGFyX2xlbiA9IDU7CisJICBpZiAoYyA9PSAweGY4ICYmIGQgPCAweDg4KQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChjIDwgMHhmZSkKKwl7CisJICBjaGFyX2xlbiA9IDY7CisJICBpZiAoYyA9PSAweGZjICYmIGQgPCAweDg0KQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlCisJcmV0dXJuIDA7CisKKyAgICAgIGlmIChzdHJfaWR4ICsgY2hhcl9sZW4gPiBpbnB1dC0+bGVuKQorCXJldHVybiAwOworCisgICAgICBmb3IgKGkgPSAxOyBpIDwgY2hhcl9sZW47ICsraSkKKwl7CisJICBkID0gcmVfc3RyaW5nX2J5dGVfYXQgKGlucHV0LCBzdHJfaWR4ICsgaSk7CisJICBpZiAoZCA8IDB4ODAgfHwgZCA+IDB4YmYpCisJICAgIHJldHVybiAwOworCX0KKyAgICAgIHJldHVybiBjaGFyX2xlbjsKKyAgICB9CisKKyAgY2hhcl9sZW4gPSByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChpbnB1dCwgc3RyX2lkeCk7CisgIGlmIChub2RlLT50eXBlID09IE9QX1BFUklPRCkKKyAgICB7CisgICAgICBpZiAoY2hhcl9sZW4gPD0gMSkKKwlyZXR1cm4gMDsKKyAgICAgIC8qIEZJWE1FOiBJIGRvbid0IHRoaW5rIHRoaXMgaWYgaXMgbmVlZGVkLCBhcyBib3RoICdcbicKKwkgYW5kICdcMCcgYXJlIGNoYXJfbGVuID09IDEuICAqLworICAgICAgLyogJy4nIGFjY2VwdHMgYW55IG9uZSBjaGFyYWN0ZXIgZXhjZXB0IHRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzLiAgKi8KKyAgICAgIGlmICgoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSAmJgorCSAgIHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCkgPT0gJ1xuJykgfHwKKwkgICgoZGZhLT5zeW50YXggJiBSRV9ET1RfTk9UX05VTEwpICYmCisJICAgcmVfc3RyaW5nX2J5dGVfYXQgKGlucHV0LCBzdHJfaWR4KSA9PSAnXDAnKSkKKwlyZXR1cm4gMDsKKyAgICAgIHJldHVybiBjaGFyX2xlbjsKKyAgICB9CisKKyAgZWxlbV9sZW4gPSByZV9zdHJpbmdfZWxlbV9zaXplX2F0IChpbnB1dCwgc3RyX2lkeCk7CisgIHdjID0gX19idG93YygqKGlucHV0LT5tYnMrc3RyX2lkeCkpOworICBpZiAoKChlbGVtX2xlbiA8PSAxICYmIGNoYXJfbGVuIDw9IDEpIHx8IGNoYXJfbGVuID09IDApICYmICh3YyAhPSBXRU9GICYmIHdjIDwgU0JDX01BWCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKG5vZGUtPnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUKQorICAgIHsKKyAgICAgIGNvbnN0IHJlX2NoYXJzZXRfdCAqY3NldCA9IG5vZGUtPm9wci5tYmNzZXQ7CisjIGlmZGVmIF9MSUJDCisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwaW4KKwk9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoaW5wdXQpICsgc3RyX2lkeCk7CisgICAgICBpbnQgajsKKyAgICAgIHVpbnQzMl90IG5ydWxlczsKKyMgZW5kaWYgLyogX0xJQkMgKi8KKyAgICAgIGludCBtYXRjaF9sZW4gPSAwOworICAgICAgd2NoYXJfdCB3YyA9ICgoY3NldC0+bnJhbmdlcyB8fCBjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5tYmNoYXJzKQorCQkgICAgPyByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LCBzdHJfaWR4KSA6IDApOworCisgICAgICAvKiBtYXRjaCB3aXRoIG11bHRpYnl0ZSBjaGFyYWN0ZXI/ICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5tYmNoYXJzOyArK2kpCisJaWYgKHdjID09IGNzZXQtPm1iY2hhcnNbaV0pCisJICB7CisJICAgIG1hdGNoX2xlbiA9IGNoYXJfbGVuOworCSAgICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworCSAgfQorICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyYWN0ZXJfY2xhc3M/ICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5jaGFyX2NsYXNzZXM7ICsraSkKKwl7CisJICB3Y3R5cGVfdCB3dCA9IGNzZXQtPmNoYXJfY2xhc3Nlc1tpXTsKKwkgIGlmIChfX2lzd2N0eXBlICh3Yywgd3QpKQorCSAgICB7CisJICAgICAgbWF0Y2hfbGVuID0gY2hhcl9sZW47CisJICAgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkgICAgfQorCX0KKworIyBpZmRlZiBfTElCQworICAgICAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgICAgIGlmIChucnVsZXMgIT0gMCkKKwl7CisJICB1bnNpZ25lZCBpbnQgaW5fY29sbHNlcSA9IDA7CisJICBjb25zdCBpbnQzMl90ICp0YWJsZSwgKmluZGlyZWN0OworCSAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhOworCSAgY29uc3QgY2hhciAqY29sbHNlcXdjOworCSAgLyogVGhpcyAjaW5jbHVkZSBkZWZpbmVzIGEgbG9jYWwgZnVuY3Rpb24hICAqLworIyAgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorCisJICAvKiBtYXRjaCB3aXRoIGNvbGxhdGluZ19zeW1ib2w/ICAqLworCSAgaWYgKGNzZXQtPm5jb2xsX3N5bXMpCisJICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKwkgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5uY29sbF9zeW1zOyArK2kpCisJICAgIHsKKwkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsX3N5bSA9IGV4dHJhICsgY3NldC0+Y29sbF9zeW1zW2ldOworCSAgICAgIC8qIENvbXBhcmUgdGhlIGxlbmd0aCBvZiBpbnB1dCBjb2xsYXRpbmcgZWxlbWVudCBhbmQKKwkJIHRoZSBsZW5ndGggb2YgY3VycmVudCBjb2xsYXRpbmcgZWxlbWVudC4gICovCisJICAgICAgaWYgKCpjb2xsX3N5bSAhPSBlbGVtX2xlbikKKwkJY29udGludWU7CisJICAgICAgLyogQ29tcGFyZSBlYWNoIGJ5dGVzLiAgKi8KKwkgICAgICBmb3IgKGogPSAwOyBqIDwgKmNvbGxfc3ltOyBqKyspCisJCWlmIChwaW5bal0gIT0gY29sbF9zeW1bMSArIGpdKQorCQkgIGJyZWFrOworCSAgICAgIGlmIChqID09ICpjb2xsX3N5bSkKKwkJeworCQkgIC8qIE1hdGNoIGlmIGV2ZXJ5IGJ5dGVzIGlzIGVxdWFsLiAgKi8KKwkJICBtYXRjaF9sZW4gPSBqOworCQkgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJCX0KKwkgICAgfQorCisJICBpZiAoY3NldC0+bnJhbmdlcykKKwkgICAgeworCSAgICAgIGlmIChlbGVtX2xlbiA8PSBjaGFyX2xlbikKKwkJeworCQkgIGNvbGxzZXF3YyA9IF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRV0MpOworCQkgIGluX2NvbGxzZXEgPSBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIHdjKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJaW5fY29sbHNlcSA9IGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChwaW4sIGVsZW1fbGVuKTsKKwkgICAgfQorCSAgLyogbWF0Y2ggd2l0aCByYW5nZSBleHByZXNzaW9uPyAgKi8KKwkgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5ucmFuZ2VzOyArK2kpCisJICAgIGlmIChjc2V0LT5yYW5nZV9zdGFydHNbaV0gPD0gaW5fY29sbHNlcQorCQkmJiBpbl9jb2xsc2VxIDw9IGNzZXQtPnJhbmdlX2VuZHNbaV0pCisJICAgICAgeworCQltYXRjaF9sZW4gPSBlbGVtX2xlbjsKKwkJZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkgICAgICB9CisKKwkgIC8qIG1hdGNoIHdpdGggZXF1aXZhbGVuY2VfY2xhc3M/ICAqLworCSAgaWYgKGNzZXQtPm5lcXVpdl9jbGFzc2VzKQorCSAgICB7CisJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSBwaW47CisJICAgICAgdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisJICAgICAgd2VpZ2h0cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisJCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9XRUlHSFRNQik7CisJICAgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFNQik7CisJICAgICAgaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisJICAgICAgaW50MzJfdCBpZHggPSBmaW5kaWR4ICgmY3ApOworCSAgICAgIGlmIChpZHggPiAwKQorCQlmb3IgKGkgPSAwOyBpIDwgY3NldC0+bmVxdWl2X2NsYXNzZXM7ICsraSkKKwkJICB7CisJCSAgICBpbnQzMl90IGVxdWl2X2NsYXNzX2lkeCA9IGNzZXQtPmVxdWl2X2NsYXNzZXNbaV07CisJCSAgICBzaXplX3Qgd2VpZ2h0X2xlbiA9IHdlaWdodHNbaWR4ICYgMHhmZmZmZmZdOworCQkgICAgaWYgKHdlaWdodF9sZW4gPT0gd2VpZ2h0c1tlcXVpdl9jbGFzc19pZHggJiAweGZmZmZmZl0KKwkJCSYmIChpZHggPj4gMjQpID09IChlcXVpdl9jbGFzc19pZHggPj4gMjQpKQorCQkgICAgICB7CisJCQlpbnQgY250ID0gMDsKKworCQkJaWR4ICY9IDB4ZmZmZmZmOworCQkJZXF1aXZfY2xhc3NfaWR4ICY9IDB4ZmZmZmZmOworCisJCQl3aGlsZSAoY250IDw9IHdlaWdodF9sZW4KKwkJCSAgICAgICAmJiAod2VpZ2h0c1tlcXVpdl9jbGFzc19pZHggKyAxICsgY250XQorCQkJCSAgID09IHdlaWdodHNbaWR4ICsgMSArIGNudF0pKQorCQkJICArK2NudDsKKwkJCWlmIChjbnQgPiB3ZWlnaHRfbGVuKQorCQkJICB7CisJCQkgICAgbWF0Y2hfbGVuID0gZWxlbV9sZW47CisJCQkgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkJCSAgfQorCQkgICAgICB9CisJCSAgfQorCSAgICB9CisJfQorICAgICAgZWxzZQorIyBlbmRpZiAvKiBfTElCQyAqLworCXsKKwkgIC8qIG1hdGNoIHdpdGggcmFuZ2UgZXhwcmVzc2lvbj8gICovCisjaWYgX19HTlVDX18gPj0gMgorCSAgd2NoYXJfdCBjbXBfYnVmW10gPSB7TCdcMCcsIEwnXDAnLCB3YywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CisjZWxzZQorCSAgd2NoYXJfdCBjbXBfYnVmW10gPSB7TCdcMCcsIEwnXDAnLCBMJ1wwJywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CisJICBjbXBfYnVmWzJdID0gd2M7CisjZW5kaWYKKwkgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5ucmFuZ2VzOyArK2kpCisJICAgIHsKKwkgICAgICBjbXBfYnVmWzBdID0gY3NldC0+cmFuZ2Vfc3RhcnRzW2ldOworCSAgICAgIGNtcF9idWZbNF0gPSBjc2V0LT5yYW5nZV9lbmRzW2ldOworCSAgICAgIGlmICh3Y3Njb2xsIChjbXBfYnVmLCBjbXBfYnVmICsgMikgPD0gMAorCQkgICYmIHdjc2NvbGwgKGNtcF9idWYgKyAyLCBjbXBfYnVmICsgNCkgPD0gMCkKKwkJeworCQkgIG1hdGNoX2xlbiA9IGNoYXJfbGVuOworCQkgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJCX0KKwkgICAgfQorCX0KKyAgICBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDoKKyAgICAgIGlmICghY3NldC0+bm9uX21hdGNoKQorCXJldHVybiBtYXRjaF9sZW47CisgICAgICBlbHNlCisJeworCSAgaWYgKG1hdGNoX2xlbiA+IDApCisJICAgIHJldHVybiAwOworCSAgZWxzZQorCSAgICByZXR1cm4gKGVsZW1fbGVuID4gY2hhcl9sZW4pID8gZWxlbV9sZW4gOiBjaGFyX2xlbjsKKwl9CisgICAgfQorICByZXR1cm4gMDsKK30KKworIyBpZmRlZiBfTElCQworc3RhdGljIHVuc2lnbmVkIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2ZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsIHNpemVfdCBtYnNfbGVuKQoreworICB1aW50MzJfdCBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICBpZiAobnJ1bGVzID09IDApCisgICAgeworICAgICAgaWYgKG1ic19sZW4gPT0gMSkKKwl7CisJICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIuICBNYXRjaCBpdCBhcyBhIHNpbmdsZSBieXRlIGNoYXJhY3Rlci4gICovCisJICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsc2VxID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwkgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CisJICByZXR1cm4gY29sbHNlcVttYnNbMF1dOworCX0KKyAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQzMl90IGlkeDsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKyAgICAgIGludDMyX3QgZXh0cmFzaXplID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CICsgMSkgLSBleHRyYTsKKworICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBleHRyYXNpemU7KQorCXsKKwkgIGludCBtYnNfY250LCBmb3VuZCA9IDA7CisJICBpbnQzMl90IGVsZW1fbWJzX2xlbjsKKwkgIC8qIFNraXAgdGhlIG5hbWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gICovCisJICBpZHggPSBpZHggKyBleHRyYVtpZHhdICsgMTsKKwkgIGVsZW1fbWJzX2xlbiA9IGV4dHJhW2lkeCsrXTsKKwkgIGlmIChtYnNfbGVuID09IGVsZW1fbWJzX2xlbikKKwkgICAgeworCSAgICAgIGZvciAobWJzX2NudCA9IDA7IG1ic19jbnQgPCBlbGVtX21ic19sZW47ICsrbWJzX2NudCkKKwkJaWYgKGV4dHJhW2lkeCArIG1ic19jbnRdICE9IG1ic1ttYnNfY250XSkKKwkJICBicmVhazsKKwkgICAgICBpZiAobWJzX2NudCA9PSBlbGVtX21ic19sZW4pCisJCS8qIEZvdW5kIHRoZSBlbnRyeS4gICovCisJCWZvdW5kID0gMTsKKwkgICAgfQorCSAgLyogU2tpcCB0aGUgYnl0ZSBzZXF1ZW5jZSBvZiB0aGUgY29sbGF0aW5nIGVsZW1lbnQuICAqLworCSAgaWR4ICs9IGVsZW1fbWJzX2xlbjsKKwkgIC8qIEFkanVzdCBmb3IgdGhlIGFsaWdubWVudC4gICovCisJICBpZHggPSAoaWR4ICsgMykgJiB+MzsKKwkgIC8qIFNraXAgdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZS4gICovCisJICBpZHggKz0gc2l6ZW9mICh1aW50MzJfdCk7CisJICAvKiBTa2lwIHRoZSB3aWRlIGNoYXIgc2VxdWVuY2Ugb2YgdGhlIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKwkgIGlkeCA9IGlkeCArIHNpemVvZiAodWludDMyX3QpICogKGV4dHJhW2lkeF0gKyAxKTsKKwkgIC8qIElmIHdlIGZvdW5kIHRoZSBlbnRyeSwgcmV0dXJuIHRoZSBzZXF1ZW5jZSB2YWx1ZS4gICovCisJICBpZiAoZm91bmQpCisJICAgIHJldHVybiAqKHVpbnQzMl90ICopIChleHRyYSArIGlkeCk7CisJICAvKiBTa2lwIHRoZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUuICAqLworCSAgaWR4ICs9IHNpemVvZiAodWludDMyX3QpOworCX0KKyAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICB9Cit9CisjIGVuZGlmIC8qIF9MSUJDICovCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworLyogQ2hlY2sgd2hldGhlciB0aGUgbm9kZSBhY2NlcHRzIHRoZSBieXRlIHdoaWNoIGlzIElEWC10aAorICAgYnl0ZSBvZiB0aGUgSU5QVVQuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfbm9kZV9hY2NlcHQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSwKKwkJICAgaW50IGlkeCkKK3sKKyAgdW5zaWduZWQgY2hhciBjaDsKKyAgY2ggPSByZV9zdHJpbmdfYnl0ZV9hdCAoJm1jdHgtPmlucHV0LCBpZHgpOworICBzd2l0Y2ggKG5vZGUtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ0hBUkFDVEVSOgorICAgICAgaWYgKG5vZGUtPm9wci5jICE9IGNoKQorCXJldHVybiAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNJTVBMRV9CUkFDS0VUOgorICAgICAgaWYgKCFiaXRzZXRfY29udGFpbiAobm9kZS0+b3ByLnNiY3NldCwgY2gpKQorCXJldHVybiAwOworICAgICAgYnJlYWs7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgIGNhc2UgT1BfVVRGOF9QRVJJT0Q6CisgICAgICBpZiAoY2ggPj0gMHg4MCkKKwlyZXR1cm4gMDsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisjZW5kaWYKKyAgICBjYXNlIE9QX1BFUklPRDoKKyAgICAgIGlmICgoY2ggPT0gJ1xuJyAmJiAhKG1jdHgtPmRmYS0+c3ludGF4ICYgUkVfRE9UX05FV0xJTkUpKQorCSAgfHwgKGNoID09ICdcMCcgJiYgKG1jdHgtPmRmYS0+c3ludGF4ICYgUkVfRE9UX05PVF9OVUxMKSkpCisJcmV0dXJuIDA7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgaWYgKG5vZGUtPmNvbnN0cmFpbnQpCisgICAgeworICAgICAgLyogVGhlIG5vZGUgaGFzIGNvbnN0cmFpbnRzLiAgQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBjb250ZXh0CisJIHNhdGlzZmllcyB0aGUgY29uc3RyYWludHMuICAqLworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBpZHgsCisJCQkJCQkgICBtY3R4LT5lZmxhZ3MpOworICAgICAgaWYgKE5PVF9TQVRJU0ZZX05FWFRfQ09OU1RSQUlOVCAobm9kZS0+Y29uc3RyYWludCwgY29udGV4dCkpCisJcmV0dXJuIDA7CisgICAgfQorCisgIHJldHVybiAxOworfQorCisvKiBFeHRlbmQgdGhlIGJ1ZmZlcnMsIGlmIHRoZSBidWZmZXJzIGhhdmUgcnVuIG91dC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZXh0ZW5kX2J1ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIHJlX3N0cmluZ190ICpwc3RyID0gJm1jdHgtPmlucHV0OworCisgIC8qIEF2b2lkIG92ZXJmbG93LiAgKi8KKyAgaWYgKEJFIChJTlRfTUFYIC8gMiAvIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSA8PSBwc3RyLT5idWZzX2xlbiwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgLyogRG91YmxlIHRoZSBsZW5ndGhlcyBvZiB0aGUgYnVmZmVycy4gICovCisgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIHBzdHItPmJ1ZnNfbGVuICogMik7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworCisgIGlmIChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBBbmQgZG91YmxlIHRoZSBsZW5ndGggb2Ygc3RhdGVfbG9nLiAgKi8KKyAgICAgIC8qIFhYWCBXZSBoYXZlIG5vIGluZGljYXRpb24gb2YgdGhlIHNpemUgb2YgdGhpcyBidWZmZXIuICBJZiB0aGlzCisJIGFsbG9jYXRpb24gZmFpbCB3ZSBoYXZlIG5vIGluZGljYXRpb24gdGhhdCB0aGUgc3RhdGVfbG9nIGFycmF5CisJIGRvZXMgbm90IGhhdmUgdGhlIHJpZ2h0IHNpemUuICAqLworICAgICAgcmVfZGZhc3RhdGVfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKG1jdHgtPnN0YXRlX2xvZywgcmVfZGZhc3RhdGVfdCAqLAorCQkJCQkgICAgICBwc3RyLT5idWZzX2xlbiArIDEpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBtY3R4LT5zdGF0ZV9sb2cgPSBuZXdfYXJyYXk7CisgICAgfQorCisgIC8qIFRoZW4gcmVjb25zdHJ1Y3QgdGhlIGJ1ZmZlcnMuICAqLworICBpZiAocHN0ci0+aWNhc2UpCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJeworCSAgcmV0ID0gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocHN0cik7CisJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiByZXQ7CisJfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCWJ1aWxkX3VwcGVyX2J1ZmZlciAocHN0cik7CisgICAgfQorICBlbHNlCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJYnVpbGRfd2NzX2J1ZmZlciAocHN0cik7CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisJeworCSAgaWYgKHBzdHItPnRyYW5zICE9IE5VTEwpCisJICAgIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChwc3RyKTsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKwwKKy8qIEZ1bmN0aW9ucyBmb3IgbWF0Y2hpbmcgY29udGV4dC4gICovCisKKy8qIEluaXRpYWxpemUgTUNUWC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2luaXQgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IGVmbGFncywgaW50IG4pCit7CisgIG1jdHgtPmVmbGFncyA9IGVmbGFnczsKKyAgbWN0eC0+bWF0Y2hfbGFzdCA9IC0xOworICBpZiAobiA+IDApCisgICAgeworICAgICAgbWN0eC0+YmtyZWZfZW50cyA9IHJlX21hbGxvYyAoc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnksIG4pOworICAgICAgbWN0eC0+c3ViX3RvcHMgPSByZV9tYWxsb2MgKHJlX3N1Yl9tYXRjaF90b3BfdCAqLCBuKTsKKyAgICAgIGlmIChCRSAobWN0eC0+YmtyZWZfZW50cyA9PSBOVUxMIHx8IG1jdHgtPnN1Yl90b3BzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKyAgLyogQWxyZWFkeSB6ZXJvLWVkIGJ5IHRoZSBjYWxsZXIuCisgICAgIGVsc2UKKyAgICAgICBtY3R4LT5ia3JlZl9lbnRzID0gTlVMTDsKKyAgICAgbWN0eC0+bmJrcmVmX2VudHMgPSAwOworICAgICBtY3R4LT5uc3ViX3RvcHMgPSAwOyAgKi8KKyAgbWN0eC0+YWJrcmVmX2VudHMgPSBuOworICBtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPSAxOworICBtY3R4LT5hc3ViX3RvcHMgPSBuOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIENsZWFuIHRoZSBlbnRyaWVzIHdoaWNoIGRlcGVuZCBvbiB0aGUgY3VycmVudCBpbnB1dCBpbiBNQ1RYLgorICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGludm9rZWQgd2hlbiB0aGUgbWF0Y2hlciBjaGFuZ2VzIHRoZSBzdGFydCBpbmRleAorICAgb2YgdGhlIGlucHV0LCBvciBjaGFuZ2VzIHRoZSBpbnB1dCBzdHJpbmcuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK21hdGNoX2N0eF9jbGVhbiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICBpbnQgc3RfaWR4OworICBmb3IgKHN0X2lkeCA9IDA7IHN0X2lkeCA8IG1jdHgtPm5zdWJfdG9wczsgKytzdF9pZHgpCisgICAgeworICAgICAgaW50IHNsX2lkeDsKKyAgICAgIHJlX3N1Yl9tYXRjaF90b3BfdCAqdG9wID0gbWN0eC0+c3ViX3RvcHNbc3RfaWR4XTsKKyAgICAgIGZvciAoc2xfaWR4ID0gMDsgc2xfaWR4IDwgdG9wLT5ubGFzdHM7ICsrc2xfaWR4KQorCXsKKwkgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKmxhc3QgPSB0b3AtPmxhc3RzW3NsX2lkeF07CisJICByZV9mcmVlIChsYXN0LT5wYXRoLmFycmF5KTsKKwkgIHJlX2ZyZWUgKGxhc3QpOworCX0KKyAgICAgIHJlX2ZyZWUgKHRvcC0+bGFzdHMpOworICAgICAgaWYgKHRvcC0+cGF0aCkKKwl7CisJICByZV9mcmVlICh0b3AtPnBhdGgtPmFycmF5KTsKKwkgIHJlX2ZyZWUgKHRvcC0+cGF0aCk7CisJfQorICAgICAgZnJlZSAodG9wKTsKKyAgICB9CisKKyAgbWN0eC0+bnN1Yl90b3BzID0gMDsKKyAgbWN0eC0+bmJrcmVmX2VudHMgPSAwOworfQorCisvKiBGcmVlIGFsbCB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBNQ1RYLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfZnJlZSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICAvKiBGaXJzdCwgZnJlZSBhbGwgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggTUNUWC0+U1VCX1RPUFMuICAqLworICBtYXRjaF9jdHhfY2xlYW4gKG1jdHgpOworICByZV9mcmVlIChtY3R4LT5zdWJfdG9wcyk7CisgIHJlX2ZyZWUgKG1jdHgtPmJrcmVmX2VudHMpOworfQorCisvKiBBZGQgYSBuZXcgYmFja3JlZmVyZW5jZSBlbnRyeSB0byBNQ1RYLgorICAgTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGF0IGNhbGxlciBuZXZlciBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkdXBsaWNhdGUKKyAgIGVudHJ5LCBhbmQgY2FsbCB3aXRoIFNUUl9JRFggd2hpY2ggaXNuJ3Qgc21hbGxlciB0aGFuIGFueSBleGlzdGluZyBlbnRyeS4KKyovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2FkZF9lbnRyeSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbm9kZSwgaW50IHN0cl9pZHgsIGludCBmcm9tLAorCQkgICAgIGludCB0bykKK3sKKyAgaWYgKG1jdHgtPm5ia3JlZl9lbnRzID49IG1jdHgtPmFia3JlZl9lbnRzKQorICAgIHsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5KiBuZXdfZW50cnk7CisgICAgICBuZXdfZW50cnkgPSByZV9yZWFsbG9jIChtY3R4LT5ia3JlZl9lbnRzLCBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSwKKwkJCSAgICAgIG1jdHgtPmFia3JlZl9lbnRzICogMik7CisgICAgICBpZiAoQkUgKG5ld19lbnRyeSA9PSBOVUxMLCAwKSkKKwl7CisJICByZV9mcmVlIChtY3R4LT5ia3JlZl9lbnRzKTsKKwkgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIG1jdHgtPmJrcmVmX2VudHMgPSBuZXdfZW50cnk7CisgICAgICBtZW1zZXQgKG1jdHgtPmJrcmVmX2VudHMgKyBtY3R4LT5uYmtyZWZfZW50cywgJ1wwJywKKwkgICAgICBzaXplb2YgKHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5KSAqIG1jdHgtPmFia3JlZl9lbnRzKTsKKyAgICAgIG1jdHgtPmFia3JlZl9lbnRzICo9IDI7CisgICAgfQorICBpZiAobWN0eC0+bmJrcmVmX2VudHMgPiAwCisgICAgICAmJiBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzIC0gMV0uc3RyX2lkeCA9PSBzdHJfaWR4KQorICAgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHMgLSAxXS5tb3JlID0gMTsKKworICBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzXS5ub2RlID0gbm9kZTsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uc3RyX2lkeCA9IHN0cl9pZHg7CisgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHNdLnN1YmV4cF9mcm9tID0gZnJvbTsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uc3ViZXhwX3RvID0gdG87CisKKyAgLyogVGhpcyBpcyBhIGNhY2hlIHRoYXQgc2F2ZXMgbmVnYXRpdmUgcmVzdWx0cyBvZiBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zLgorICAgICBJZiBiaXQgTiBpcyBjbGVhciwgbWVhbnMgdGhhdCB0aGlzIGVudHJ5IHdvbid0IGVwc2lsb24tdHJhbnNpdGlvbiB0bworICAgICBhbiBPUF9PUEVOX1NVQkVYUCBvciBPUF9DTE9TRV9TVUJFWFAgZm9yIHRoZSBOKzEtdGggc3ViZXhwcmVzc2lvbi4gIElmCisgICAgIGl0IGlzIHNldCwgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIHdpbGwgcmVjdXJzZSBhbmQgdHJ5IHRvIGZpbmQgb25lCisgICAgIHN1Y2ggbm9kZS4KKworICAgICBBIGJhY2tyZWZlcmVuY2UgZG9lcyBub3QgZXBzaWxvbi10cmFuc2l0aW9uIHVubGVzcyBpdCBpcyBlbXB0eSwgc28gc2V0CisgICAgIHRvIGFsbCB6ZXJvcyBpZiBGUk9NICE9IFRPLiAgKi8KKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uZXBzX3JlYWNoYWJsZV9zdWJleHBzX21hcAorICAgID0gKGZyb20gPT0gdG8gPyB+MCA6IDApOworCisgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHMrK10ubW9yZSA9IDA7CisgIGlmIChtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPCB0byAtIGZyb20pCisgICAgbWN0eC0+bWF4X21iX2VsZW1fbGVuID0gdG8gLSBmcm9tOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFNlYXJjaCBmb3IgdGhlIGZpcnN0IGVudHJ5IHdoaWNoIGhhcyB0aGUgc2FtZSBzdHJfaWR4LCBvciAtMSBpZiBub25lIGlzCisgICBmb3VuZC4gIE5vdGUgdGhhdCBNQ1RYLT5CS1JFRl9FTlRTIGlzIGFscmVhZHkgc29ydGVkIGJ5IE1DVFgtPlNUUl9JRFguICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgc3RyX2lkeCkKK3sKKyAgaW50IGxlZnQsIHJpZ2h0LCBtaWQsIGxhc3Q7CisgIGxhc3QgPSByaWdodCA9IG1jdHgtPm5ia3JlZl9lbnRzOworICBmb3IgKGxlZnQgPSAwOyBsZWZ0IDwgcmlnaHQ7KQorICAgIHsKKyAgICAgIG1pZCA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKKyAgICAgIGlmIChtY3R4LT5ia3JlZl9lbnRzW21pZF0uc3RyX2lkeCA8IHN0cl9pZHgpCisJbGVmdCA9IG1pZCArIDE7CisgICAgICBlbHNlCisJcmlnaHQgPSBtaWQ7CisgICAgfQorICBpZiAobGVmdCA8IGxhc3QgJiYgbWN0eC0+YmtyZWZfZW50c1tsZWZ0XS5zdHJfaWR4ID09IHN0cl9pZHgpCisgICAgcmV0dXJuIGxlZnQ7CisgIGVsc2UKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIFJlZ2lzdGVyIHRoZSBub2RlIE5PREUsIHdob3NlIHR5cGUgaXMgT1BfT1BFTl9TVUJFWFAsIGFuZCB3aGljaCBtYXRjaGVzCisgICBhdCBTVFJfSURYLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfYWRkX3N1YnRvcCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbm9kZSwgaW50IHN0cl9pZHgpCit7CisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChtY3R4LT5zdWJfdG9wcyAhPSBOVUxMKTsKKyAgYXNzZXJ0IChtY3R4LT5hc3ViX3RvcHMgPiAwKTsKKyNlbmRpZgorICBpZiAoQkUgKG1jdHgtPm5zdWJfdG9wcyA9PSBtY3R4LT5hc3ViX3RvcHMsIDApKQorICAgIHsKKyAgICAgIGludCBuZXdfYXN1Yl90b3BzID0gbWN0eC0+YXN1Yl90b3BzICogMjsKKyAgICAgIHJlX3N1Yl9tYXRjaF90b3BfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKG1jdHgtPnN1Yl90b3BzLAorCQkJCQkJICAgcmVfc3ViX21hdGNoX3RvcF90ICosCisJCQkJCQkgICBuZXdfYXN1Yl90b3BzKTsKKyAgICAgIGlmIChCRSAobmV3X2FycmF5ID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgbWN0eC0+c3ViX3RvcHMgPSBuZXdfYXJyYXk7CisgICAgICBtY3R4LT5hc3ViX3RvcHMgPSBuZXdfYXN1Yl90b3BzOworICAgIH0KKyAgbWN0eC0+c3ViX3RvcHNbbWN0eC0+bnN1Yl90b3BzXSA9IGNhbGxvYyAoMSwgc2l6ZW9mIChyZV9zdWJfbWF0Y2hfdG9wX3QpKTsKKyAgaWYgKEJFIChtY3R4LT5zdWJfdG9wc1ttY3R4LT5uc3ViX3RvcHNdID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICBtY3R4LT5zdWJfdG9wc1ttY3R4LT5uc3ViX3RvcHNdLT5ub2RlID0gbm9kZTsKKyAgbWN0eC0+c3ViX3RvcHNbbWN0eC0+bnN1Yl90b3BzKytdLT5zdHJfaWR4ID0gc3RyX2lkeDsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBSZWdpc3RlciB0aGUgbm9kZSBOT0RFLCB3aG9zZSB0eXBlIGlzIE9QX0NMT1NFX1NVQkVYUCwgYW5kIHdoaWNoIG1hdGNoZXMKKyAgIGF0IFNUUl9JRFgsIHdob3NlIGNvcnJlc3BvbmRpbmcgT1BfT1BFTl9TVUJFWFAgaXMgU1VCX1RPUC4gICovCisKK3N0YXRpYyByZV9zdWJfbWF0Y2hfbGFzdF90ICoKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfYWRkX3N1Ymxhc3QgKHJlX3N1Yl9tYXRjaF90b3BfdCAqc3VidG9wLCBpbnQgbm9kZSwgaW50IHN0cl9pZHgpCit7CisgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKm5ld19lbnRyeTsKKyAgaWYgKEJFIChzdWJ0b3AtPm5sYXN0cyA9PSBzdWJ0b3AtPmFsYXN0cywgMCkpCisgICAgeworICAgICAgaW50IG5ld19hbGFzdHMgPSAyICogc3VidG9wLT5hbGFzdHMgKyAxOworICAgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKHN1YnRvcC0+bGFzdHMsCisJCQkJCQkgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqLAorCQkJCQkJICAgIG5ld19hbGFzdHMpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgICBzdWJ0b3AtPmxhc3RzID0gbmV3X2FycmF5OworICAgICAgc3VidG9wLT5hbGFzdHMgPSBuZXdfYWxhc3RzOworICAgIH0KKyAgbmV3X2VudHJ5ID0gY2FsbG9jICgxLCBzaXplb2YgKHJlX3N1Yl9tYXRjaF9sYXN0X3QpKTsKKyAgaWYgKEJFIChuZXdfZW50cnkgIT0gTlVMTCwgMSkpCisgICAgeworICAgICAgc3VidG9wLT5sYXN0c1tzdWJ0b3AtPm5sYXN0c10gPSBuZXdfZW50cnk7CisgICAgICBuZXdfZW50cnktPm5vZGUgPSBub2RlOworICAgICAgbmV3X2VudHJ5LT5zdHJfaWR4ID0gc3RyX2lkeDsKKyAgICAgICsrc3VidG9wLT5ubGFzdHM7CisgICAgfQorICByZXR1cm4gbmV3X2VudHJ5OworfQorCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3NpZnRfY3R4X2luaXQgKHJlX3NpZnRfY29udGV4dF90ICpzY3R4LCByZV9kZmFzdGF0ZV90ICoqc2lmdGVkX3N0cywKKwkgICAgICAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3RzLCBpbnQgbGFzdF9ub2RlLCBpbnQgbGFzdF9zdHJfaWR4KQoreworICBzY3R4LT5zaWZ0ZWRfc3RhdGVzID0gc2lmdGVkX3N0czsKKyAgc2N0eC0+bGltaXRlZF9zdGF0ZXMgPSBsaW1pdGVkX3N0czsKKyAgc2N0eC0+bGFzdF9ub2RlID0gbGFzdF9ub2RlOworICBzY3R4LT5sYXN0X3N0cl9pZHggPSBsYXN0X3N0cl9pZHg7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZzY3R4LT5saW1pdHMpOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3NldGVudi5jIGIvY29tcGF0L3NldGVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTQzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc2V0ZW52LmMKQEAgLTAsMCArMSw0MCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitpbnQgZ2l0c2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgcmVwbGFjZSkKK3sKKwlpbnQgb3V0OworCXNpemVfdCBuYW1lbGVuLCB2YWx1ZWxlbjsKKwljaGFyICplbnZzdHI7CisKKwlpZiAoIW5hbWUgfHwgc3RyY2hyKG5hbWUsICc9JykgfHwgIXZhbHVlKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghcmVwbGFjZSkgeworCQljaGFyICpvbGR2YWwgPSBOVUxMOworCQlvbGR2YWwgPSBnZXRlbnYobmFtZSk7CisJCWlmIChvbGR2YWwpIHJldHVybiAwOworCX0KKworCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJdmFsdWVsZW4gPSBzdHJsZW4odmFsdWUpOworCWVudnN0ciA9IG1hbGxvYygobmFtZWxlbiArIHZhbHVlbGVuICsgMikpOworCWlmICghZW52c3RyKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gLTE7CisJfQorCisJbWVtY3B5KGVudnN0ciwgbmFtZSwgbmFtZWxlbik7CisJZW52c3RyW25hbWVsZW5dID0gJz0nOworCW1lbWNweShlbnZzdHIgKyBuYW1lbGVuICsgMSwgdmFsdWUsIHZhbHVlbGVuKTsKKwllbnZzdHJbbmFtZWxlbiArIHZhbHVlbGVuICsgMV0gPSAwOworCisJb3V0ID0gcHV0ZW52KGVudnN0cik7CisJLyogcHV0ZW52KDMpIG1ha2VzIHRoZSBhcmd1bWVudCBzdHJpbmcgcGFydCBvZiB0aGUgZW52aXJvbm1lbnQsCisJICogYW5kIGNoYW5naW5nIHRoYXQgc3RyaW5nIG1vZGlmaWVzIHRoZSBlbnZpcm9ubWVudCAtLS0gd2hpY2gKKwkgKiBtZWFucyB3ZSBkbyBub3Qgb3duIHRoYXQgc3RvcmFnZSBhbnltb3JlLiAgRG8gbm90IGZyZWUKKwkgKiBlbnZzdHIuCisJICovCisKKwlyZXR1cm4gb3V0OworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3NucHJpbnRmLmMgYi9jb21wYXQvc25wcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmVhMWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3NucHJpbnRmLmMKQEAgLTAsMCArMSw2OSBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisvKgorICogVGhlIHNpemUgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgYXZhaWxhYmxlIHNwYWNlLCBpLmUuIGluY2x1ZGVzCisgKiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGU7IGJ1dCBXaW5kb3dzJ3MgdnNucHJpbnRmIHVzZXMgdGhlIGVudGlyZQorICogYnVmZmVyIGFuZCBhdm9pZHMgdGhlIHRyYWlsaW5nIE5VTCwgc2hvdWxkIHRoZSBidWZmZXIgYmUgZXhhY3RseQorICogYmlnIGVub3VnaCBmb3IgdGhlIHJlc3VsdC4gRGVmaW5pbmcgU05QUklOVEZfU0laRV9DT1JSIHRvIDEgd2lsbAorICogdGhlcmVmb3JlIHJlbW92ZSAxIGJ5dGUgZnJvbSB0aGUgcmVwb3J0ZWQgYnVmZmVyIHNpemUsIHNvIHdlCisgKiBhbHdheXMgaGF2ZSByb29tIGZvciBhIHRyYWlsaW5nIE5VTCBieXRlLgorICovCisjaWZuZGVmIFNOUFJJTlRGX1NJWkVfQ09SUgorI2lmIGRlZmluZWQoV0lOMzIpICYmICghZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCA0KQorI2RlZmluZSBTTlBSSU5URl9TSVpFX0NPUlIgMQorI2Vsc2UKKyNkZWZpbmUgU05QUklOVEZfU0laRV9DT1JSIDAKKyNlbmRpZgorI2VuZGlmCisKKyN1bmRlZiB2c25wcmludGYKK2ludCBnaXRfdnNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IG1heHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkKK3sKKwl2YV9saXN0IGNwOworCWNoYXIgKnM7CisJaW50IHJldCA9IC0xOworCisJaWYgKG1heHNpemUgPiAwKSB7CisJCXZhX2NvcHkoY3AsIGFwKTsKKwkJcmV0ID0gdnNucHJpbnRmKHN0ciwgbWF4c2l6ZS1TTlBSSU5URl9TSVpFX0NPUlIsIGZvcm1hdCwgY3ApOworCQl2YV9lbmQoY3ApOworCQlpZiAocmV0ID09IG1heHNpemUtMSkKKwkJCXJldCA9IC0xOworCQkvKiBXaW5kb3dzIGRvZXMgbm90IE5VTC10ZXJtaW5hdGUgaWYgcmVzdWx0IGZpbGxzIGJ1ZmZlciAqLworCQlzdHJbbWF4c2l6ZS0xXSA9IDA7CisJfQorCWlmIChyZXQgIT0gLTEpCisJCXJldHVybiByZXQ7CisKKwlzID0gTlVMTDsKKwlpZiAobWF4c2l6ZSA8IDEyOCkKKwkJbWF4c2l6ZSA9IDEyODsKKworCXdoaWxlIChyZXQgPT0gLTEpIHsKKwkJbWF4c2l6ZSAqPSA0OworCQlzdHIgPSByZWFsbG9jKHMsIG1heHNpemUpOworCQlpZiAoISBzdHIpCisJCQlicmVhazsKKwkJcyA9IHN0cjsKKwkJdmFfY29weShjcCwgYXApOworCQlyZXQgPSB2c25wcmludGYoc3RyLCBtYXhzaXplLVNOUFJJTlRGX1NJWkVfQ09SUiwgZm9ybWF0LCBjcCk7CisJCXZhX2VuZChjcCk7CisJCWlmIChyZXQgPT0gbWF4c2l6ZS0xKQorCQkJcmV0ID0gLTE7CisJfQorCWZyZWUocyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGdpdF9zbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByZXQ7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwlyZXQgPSBnaXRfdnNucHJpbnRmKHN0ciwgbWF4c2l6ZSwgZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2NvbXBhdC9zdHJjYXNlc3RyLmMgYi9jb21wYXQvc3RyY2FzZXN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ODk2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc3RyY2FzZXN0ci5jCkBAIC0wLDAgKzEsMjIgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworY2hhciAqZ2l0c3RyY2FzZXN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQoreworCWludCBubGVuID0gc3RybGVuKG5lZWRsZSk7CisJaW50IGhsZW4gPSBzdHJsZW4oaGF5c3RhY2spIC0gbmxlbiArIDE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGxlbjsgaSsrKSB7CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgbmxlbjsgaisrKSB7CisJCQl1bnNpZ25lZCBjaGFyIGMxID0gaGF5c3RhY2tbaStqXTsKKwkJCXVuc2lnbmVkIGNoYXIgYzIgPSBuZWVkbGVbal07CisJCQlpZiAodG91cHBlcihjMSkgIT0gdG91cHBlcihjMikpCisJCQkJZ290byBuZXh0OworCQl9CisJCXJldHVybiAoY2hhciAqKSBoYXlzdGFjayArIGk7CisJbmV4dDoKKwkJOworCX0KKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9zdHJsY3B5LmMgYi9jb21wYXQvc3RybGNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMjRjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc3RybGNweS5jCkBAIC0wLDAgKzEsMTMgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworc2l6ZV90IGdpdHN0cmxjcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgcmV0ID0gc3RybGVuKHNyYyk7CisKKwlpZiAoc2l6ZSkgeworCQlzaXplX3QgbGVuID0gKHJldCA+PSBzaXplKSA/IHNpemUgLSAxIDogcmV0OworCQltZW1jcHkoZGVzdCwgc3JjLCBsZW4pOworCQlkZXN0W2xlbl0gPSAnXDAnOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3N0cnRvaW1heC5jIGIvY29tcGF0L3N0cnRvaW1heC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDllZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc3RydG9pbWF4LmMKQEAgLTAsMCArMSwxMCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitpbnRtYXhfdCBnaXRzdHJ0b2ltYXggKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworI2lmIGRlZmluZWQoTk9fU1RSVE9VTEwpCisJcmV0dXJuIHN0cnRvbChucHRyLCBlbmRwdHIsIGJhc2UpOworI2Vsc2UKKwlyZXR1cm4gc3RydG9sbChucHRyLCBlbmRwdHIsIGJhc2UpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9jb21wYXQvc3RydG9rX3IuYyBiL2NvbXBhdC9zdHJ0b2tfci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNWQ1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc3RydG9rX3IuYwpAQCAtMCwwICsxLDYxIEBACisvKiBSZWVudHJhbnQgc3RyaW5nIHRva2VuaXplci4gIEdlbmVyaWMgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5MSwxOTk2LTE5OTksMjAwMSwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKy8qIFBhcnNlIFMgaW50byB0b2tlbnMgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgaW4gREVMSU0uCisgICBJZiBTIGlzIE5VTEwsIHRoZSBzYXZlZCBwb2ludGVyIGluIFNBVkVfUFRSIGlzIHVzZWQgYXMKKyAgIHRoZSBuZXh0IHN0YXJ0aW5nIHBvaW50LiAgRm9yIGV4YW1wbGU6CisJY2hhciBzW10gPSAiLWFiYy09LWRlZiI7CisJY2hhciAqc3A7CisJeCA9IHN0cnRva19yKHMsICItIiwgJnNwKTsJLy8geCA9ICJhYmMiLCBzcCA9ICI9LWRlZiIKKwl4ID0gc3RydG9rX3IoTlVMTCwgIi09IiwgJnNwKTsJLy8geCA9ICJkZWYiLCBzcCA9IE5VTEwKKwl4ID0gc3RydG9rX3IoTlVMTCwgIj0iLCAmc3ApOwkvLyB4ID0gTlVMTAorCQkvLyBzID0gImFiY1wwLWRlZlwwIgorKi8KK2NoYXIgKgorZ2l0c3RydG9rX3IgKGNoYXIgKnMsIGNvbnN0IGNoYXIgKmRlbGltLCBjaGFyICoqc2F2ZV9wdHIpCit7CisgIGNoYXIgKnRva2VuOworCisgIGlmIChzID09IE5VTEwpCisgICAgcyA9ICpzYXZlX3B0cjsKKworICAvKiBTY2FuIGxlYWRpbmcgZGVsaW1pdGVycy4gICovCisgIHMgKz0gc3Ryc3BuIChzLCBkZWxpbSk7CisgIGlmICgqcyA9PSAnXDAnKQorICAgIHsKKyAgICAgICpzYXZlX3B0ciA9IHM7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSB0b2tlbi4gICovCisgIHRva2VuID0gczsKKyAgcyA9IHN0cnBicmsgKHRva2VuLCBkZWxpbSk7CisgIGlmIChzID09IE5VTEwpCisgICAgLyogVGhpcyB0b2tlbiBmaW5pc2hlcyB0aGUgc3RyaW5nLiAgKi8KKyAgICAqc2F2ZV9wdHIgPSB0b2tlbiArIHN0cmxlbiAodG9rZW4pOworICBlbHNlCisgICAgeworICAgICAgLyogVGVybWluYXRlIHRoZSB0b2tlbiBhbmQgbWFrZSAqU0FWRV9QVFIgcG9pbnQgcGFzdCBpdC4gICovCisgICAgICAqcyA9ICdcMCc7CisgICAgICAqc2F2ZV9wdHIgPSBzICsgMTsKKyAgICB9CisgIHJldHVybiB0b2tlbjsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9zdHJ0b3VtYXguYyBiL2NvbXBhdC9zdHJ0b3VtYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQxMzUzCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3N0cnRvdW1heC5jCkBAIC0wLDAgKzEsMTAgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKwordWludG1heF90IGdpdHN0cnRvdW1heCAoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisjaWYgZGVmaW5lZChOT19TVFJUT1VMTCkKKwlyZXR1cm4gc3RydG91bChucHRyLCBlbmRwdHIsIGJhc2UpOworI2Vsc2UKKwlyZXR1cm4gc3RydG91bGwobnB0ciwgZW5kcHRyLCBiYXNlKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3Rlcm1pbmFsLmMgYi9jb21wYXQvdGVybWluYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmIwMzhkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3Rlcm1pbmFsLmMKQEAgLTAsMCArMSw4MiBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImNvbXBhdC90ZXJtaW5hbC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKyNpZmRlZiBIQVZFX0RFVl9UVFkKKworc3RhdGljIGludCB0ZXJtX2ZkID0gLTE7CitzdGF0aWMgc3RydWN0IHRlcm1pb3Mgb2xkX3Rlcm07CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfdGVybSh2b2lkKQoreworCWlmICh0ZXJtX2ZkIDwgMCkKKwkJcmV0dXJuOworCisJdGNzZXRhdHRyKHRlcm1fZmQsIFRDU0FGTFVTSCwgJm9sZF90ZXJtKTsKKwl0ZXJtX2ZkID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfdGVybV9vbl9zaWduYWwoaW50IHNpZykKK3sKKwlyZXN0b3JlX3Rlcm0oKTsKKwlzaWdjaGFpbl9wb3Aoc2lnKTsKKwlyYWlzZShzaWcpOworfQorCitjaGFyICpnaXRfdGVybWluYWxfcHJvbXB0KGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGVjaG8pCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHI7CisJRklMRSAqZmg7CisKKwlmaCA9IGZvcGVuKCIvZGV2L3R0eSIsICJ3KyIpOworCWlmICghZmgpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFlY2hvKSB7CisJCXN0cnVjdCB0ZXJtaW9zIHQ7CisKKwkJaWYgKHRjZ2V0YXR0cihmaWxlbm8oZmgpLCAmdCkgPCAwKSB7CisJCQlmY2xvc2UoZmgpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlvbGRfdGVybSA9IHQ7CisJCXRlcm1fZmQgPSBmaWxlbm8oZmgpOworCQlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZXN0b3JlX3Rlcm1fb25fc2lnbmFsKTsKKworCQl0LmNfbGZsYWcgJj0gfkVDSE87CisJCWlmICh0Y3NldGF0dHIoZmlsZW5vKGZoKSwgVENTQUZMVVNILCAmdCkgPCAwKSB7CisJCQl0ZXJtX2ZkID0gLTE7CisJCQlmY2xvc2UoZmgpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlmcHV0cyhwcm9tcHQsIGZoKTsKKwlmZmx1c2goZmgpOworCisJciA9IHN0cmJ1Zl9nZXRsaW5lKCZidWYsIGZoLCAnXG4nKTsKKwlpZiAoIWVjaG8pIHsKKwkJZnNlZWsoZmgsIFNFRUtfQ1VSLCAwKTsKKwkJcHV0YygnXG4nLCBmaCk7CisJCWZmbHVzaChmaCk7CisJfQorCisJcmVzdG9yZV90ZXJtKCk7CisJZmNsb3NlKGZoKTsKKworCWlmIChyID09IEVPRikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGJ1Zi5idWY7Cit9CisKKyNlbHNlCisKK2NoYXIgKmdpdF90ZXJtaW5hbF9wcm9tcHQoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgZWNobykKK3sKKwlyZXR1cm4gZ2V0cGFzcyhwcm9tcHQpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC90ZXJtaW5hbC5oIGIvY29tcGF0L3Rlcm1pbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkYjdjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC90ZXJtaW5hbC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBDT01QQVRfVEVSTUlOQUxfSAorI2RlZmluZSBDT01QQVRfVEVSTUlOQUxfSAorCitjaGFyICpnaXRfdGVybWluYWxfcHJvbXB0KGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGVjaG8pOworCisjZW5kaWYgLyogQ09NUEFUX1RFUk1JTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC91bnNldGVudi5jIGIvY29tcGF0L3Vuc2V0ZW52LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyOWY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC91bnNldGVudi5jCkBAIC0wLDAgKzEsMjUgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKwordm9pZCBnaXR1bnNldGVudiAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICAgZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworICAgICBpbnQgc3JjLCBkc3Q7CisgICAgIHNpemVfdCBubWxuOworCisgICAgIG5tbG4gPSBzdHJsZW4obmFtZSk7CisKKyAgICAgZm9yIChzcmMgPSBkc3QgPSAwOyBlbnZpcm9uW3NyY107ICsrc3JjKSB7CisJICBzaXplX3QgZW5sbjsKKwkgIGVubG4gPSBzdHJsZW4oZW52aXJvbltzcmNdKTsKKwkgIGlmIChlbmxuID4gbm1sbikgeworICAgICAgICAgICAgICAgLyogbWlnaHQgbWF0Y2gsIGFuZCBjYW4gdGVzdCBmb3IgJz0nIHNhZmVseSAqLworCSAgICAgICBpZiAoMCA9PSBzdHJuY21wIChlbnZpcm9uW3NyY10sIG5hbWUsIG5tbG4pCisJCSAgICYmICc9JyA9PSBlbnZpcm9uW3NyY11bbm1sbl0pCisJCSAgICAvKiBtYXRjaGVzLCBzbyBza2lwICovCisJCSAgICBjb250aW51ZTsKKwkgIH0KKwkgIGVudmlyb25bZHN0XSA9IGVudmlyb25bc3JjXTsKKwkgICsrZHN0OworICAgICB9CisgICAgIGVudmlyb25bZHN0XSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9SRUFETUUgYi9jb21wYXQvdmNidWlsZC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4YTY1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL1JFQURNRQpAQCAtMCwwICsxLDUwIEBACitUaGUgU3RlcHMgb2YgQnVpbGQgR2l0IHdpdGggVlMyMDA4CisKKzEuIFlvdSBuZWVkIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgd2hpY2ggY29udGFpbnMgdGhlIEdpdCBkZXBlbmRlbmNpZXMKKyAgIHRvIGJlIGFibGUgdG8gY29tcGlsZSwgbGluayBhbmQgcnVuIEdpdCB3aXRoIE1TVkMuCisKKyAgIFlvdSBjYW4gZWl0aGVyIHVzZSB0aGUgYmluYXJ5IHJlcG9zaXRvcnk6CisKKyAgICAgICBXV1c6IGh0dHA6Ly9yZXBvLm9yLmN6L3cvbXN2Y2dpdC5naXQKKyAgICAgICBHaXQ6IGdpdCBjbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L21zdmNnaXQuZ2l0CisgICAgICAgWmlwOiBodHRwOi8vcmVwby5vci5jei93L21zdmNnaXQuZ2l0P2E9c25hcHNob3Q7aD1tYXN0ZXI7c2Y9emlwCisKKyAgIGFuZCBjYWxsIHRoZSBzZXR1cF8zMmJpdF9lbnYuY21kIGJhdGNoIHNjcmlwdCBiZWZvcmUgY29tcGlsaW5nIEdpdCwKKyAgIChzZWUgcmVwby9wYWNrYWdlIFJFQURNRSBmb3IgZGV0YWlscyksIG9yIHRoZSBzb3VyY2UgcmVwb3NpdG9yeToKKworICAgICAgIFdXVzogaHR0cDovL3JlcG8ub3IuY3ovdy9naXRidWlsZC5naXQKKyAgICAgICBHaXQ6IGdpdCBjbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L2dpdGJ1aWxkLmdpdAorICAgICAgIFppcDogKE5vbmUsIGFzIGl0J3MgYSBwcm9qZWN0IHdpdGggc3VibW9kdWxlcykKKworICAgYW5kIGJ1aWxkIHRoZSBzdXBwb3J0IGxpYnMgYXMgaW5zdHJ1Y3RlZCBpbiB0aGF0IHJlcG8vcGFja2FnZS4KKworMi4gRW5zdXJlIHlvdSBoYXZlIHRoZSBtc3lzZ2l0IGVudmlyb25tZW50IGluIHlvdXIgcGF0aCwgc28geW91IGhhdmUKKyAgIEdOVSBNYWtlLCBiYXNoIGFuZCBwZXJsIGF2YWlsYWJsZS4KKworICAgICAgIFdXVzogaHR0cDovL3JlcG8ub3IuY3ovdy9tc3lzZ2l0LmdpdAorICAgICAgIEdpdDogZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovbXN5c2dpdC5naXQKKyAgICAgICBaaXA6IGh0dHA6Ly9yZXBvLm9yLmN6L3cvbXN5c2dpdC5naXQ/YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj16aXAKKworICAgVGhpcyBlbnZpcm9ubWVudCBpcyBhbHNvIG5lZWRlZCB3aGVuIHlvdSB1c2UgdGhlIHJlc3VsdGluZworICAgZXhlY3V0YWJsZXMsIHNpbmNlIEdpdCBtaWdodCBuZWVkIHRvIHJ1biBzY3JpcHRzIHdoaWNoIGFyZSBwYXJ0IG9mCisgICB0aGUgZ2l0IG9wZXJhdGlvbnMuCisKKzMuIEluc2lkZSBHaXQncyBkaXJlY3RvcnkgcnVuIHRoZSBjb21tYW5kOgorICAgICAgIG1ha2UgY29tbW9uLWNtZHMuaAorICAgdG8gZ2VuZXJhdGUgdGhlIGNvbW1vbi1jbWRzLmggZmlsZSBuZWVkZWQgdG8gY29tcGlsZSBnaXQuCisKKzQuIFRoZW4gZWl0aGVyIGJ1aWxkIEdpdCB3aXRoIHRoZSBHTlUgTWFrZSBNYWtlZmlsZSBpbiB0aGUgR2l0IHByb2plY3RzCisgICByb290CisgICAgICAgbWFrZSBNU1ZDPTEKKyAgIG9yIGdlbmVyYXRlIFZpc3VhbCBTdHVkaW8gc29sdXRpb24vcHJvamVjdHMgKC5zbG4vLnZjcHJvaikgd2l0aCB0aGUKKyAgIGNvbW1hbmQKKyAgICAgICBwZXJsIGNvbnRyaWIvYnVpbGRzeXN0ZW1zL2dlbmVyYXRlIC1nIFZjcHJvagorICAgYW5kIG9wZW4gYW5kIGJ1aWxkIHRoZSBzb2x1dGlvbiB3aXRoIHRoZSBJREUKKyAgICAgICBkZXZlbnYgZ2l0LnNsbiAvdXNlZW52CisgICBvciBidWlsZCB3aXRoIHRoZSBJREUgYnVpbGQgZW5naW5lIGRpcmVjdGx5IGZyb20gdGhlIGNvbW1hbmQgbGluZQorICAgICAgIGRldmVudiBnaXQuc2xuIC91c2VlbnYgL2J1aWxkICJSZWxlYXNlfFdpbjMyIgorICAgVGhlIC91c2VlbnYgb3B0aW9uIGlzIHJlcXVpcmVkLCBzbyBWaXN1YWwgU3R1ZGlvIHBpY2tzIHVwIHRoZQorICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgc3VwcG9ydCBsaWJyYXJpZXMgcmVxdWlyZWQgdG8gYnVpbGQKKyAgIEdpdCwgd2hpY2ggeW91IHNldCB1cCBpbiBzdGVwIDEuCisKK0RvbmUhCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL2FsbG9jYS5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9hbGxvY2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGQ3OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9hbGxvY2EuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bWFsbG9jLmg+CmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9wYXJhbS5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg1NTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvcGFyYW0uaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9wb2xsLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NTUyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3BvbGwuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy90aW1lLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NTUyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3RpbWUuaApAQCAtMCwwICsxIEBACisvKiBJbnRlbnRpb25hbGx5IGVtcHR5IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyBnaXQgd2l0aCBNU1ZDICovCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy91dGltZS5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODI1ODljCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvdXRpbWUuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmCV9VVElNRV9IXworI2RlZmluZQlfVVRJTUVfSF8KKy8qCisgKiBVVElNRS5ICisgKiBUaGlzIGZpbGUgaGFzIG5vIGNvcHlyaWdodCBhc3NpZ25lZCBhbmQgaXMgcGxhY2VkIGluIHRoZSBQdWJsaWMgRG9tYWluLgorICogVGhpcyBmaWxlIGlzIGEgcGFydCBvZiB0aGUgbWluZ3ctcnVudGltZSBwYWNrYWdlLgorICoKKyAqIFRoZSBtaW5ndy1ydW50aW1lIHBhY2thZ2UgYW5kIGl0cyBjb2RlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyAqIHdpbGwgYmUgdXNlZnVsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWS4gIEFMTCBXQVJSQU5USUVTLCBFWFBSRVNTRUQgT1IKKyAqIElNUExJRUQgQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgVGhpcyBpbmNsdWRlcyBidXQgaXMgbm90IGxpbWl0ZWQgdG8KKyAqIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqIFlvdSBhcmUgZnJlZSB0byB1c2UgdGhpcyBwYWNrYWdlIGFuZCBpdHMgY29kZSB3aXRob3V0IGxpbWl0YXRpb24uCisgKi8KKworLyoKKyAqIFN0cnVjdHVyZSB1c2VkIGJ5IF91dGltZSBmdW5jdGlvbi4KKyAqLworc3RydWN0IF91dGltYnVmCit7CisJdGltZV90CWFjdGltZTsJCS8qIEFjY2VzcyB0aW1lICovCisJdGltZV90CW1vZHRpbWU7CS8qIE1vZGlmaWNhdGlvbiB0aW1lICovCit9OworCisjaWZuZGVmCV9OT19PTEROQU1FUworLyogTk9URTogTXVzdCBiZSB0aGUgc2FtZSBhcyBfdXRpbWJ1ZiBhYm92ZS4gKi8KK3N0cnVjdCB1dGltYnVmCit7CisJdGltZV90CWFjdGltZTsKKwl0aW1lX3QJbW9kdGltZTsKK307CisjZW5kaWYJLyogTm90IF9OT19PTEROQU1FUyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvdW5pc3RkLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNGZjZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3VuaXN0ZC5oCkBAIC0wLDAgKzEsOTYgQEAKKyNpZm5kZWYgX1VOSVNURF8KKyNkZWZpbmUgX1VOSVNURF8KKworLyogV2luMzIgZGVmaW5lIGZvciBwb3J0aW5nIGdpdCovCisKKyNpZm5kZWYgX01PREVfVF8KKyNkZWZpbmUJX01PREVfVF8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX21vZGVfdDsKKworI2lmbmRlZglfTk9fT0xETkFNRVMKK3R5cGVkZWYgX21vZGVfdAltb2RlX3Q7CisjZW5kaWYKKyNlbmRpZgkvKiBOb3QgX01PREVfVF8gKi8KKworI2lmbmRlZiBfU1NJWkVfVF8KKyNkZWZpbmUgX1NTSVpFX1RfCit0eXBlZGVmIGxvbmcgX3NzaXplX3Q7CisKKyNpZm5kZWYJX09GRl9UXworI2RlZmluZQlfT0ZGX1RfCit0eXBlZGVmIGxvbmcgX29mZl90OworCisjaWZuZGVmCV9OT19PTEROQU1FUwordHlwZWRlZiBfb2ZmX3QJb2ZmX3Q7CisjZW5kaWYKKyNlbmRpZgkvKiBOb3QgX09GRl9UXyAqLworCisKKyNpZm5kZWYJX05PX09MRE5BTUVTCit0eXBlZGVmIF9zc2l6ZV90IHNzaXplX3Q7CisjZW5kaWYKKyNlbmRpZiAvKiBOb3QgX1NTSVpFX1RfICovCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgdWludDhfdDsKK3R5cGVkZWYgc2hvcnQgIGludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKK3R5cGVkZWYgaW50ICBpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCAgIHVpbnQzMl90OwordHlwZWRlZiBsb25nIGxvbmcgIGludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVpbnQ2NF90OworCit0eXBlZGVmIGxvbmcgbG9uZyAgaW50bWF4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50bWF4X3Q7CisKK3R5cGVkZWYgaW50NjRfdCBvZmY2NF90OworCisjZGVmaW5lIElOVE1BWF9NSU4gIF9JNjRfTUlOCisjZGVmaW5lIElOVE1BWF9NQVggIF9JNjRfTUFYCisjZGVmaW5lIFVJTlRNQVhfTUFYIF9VSTY0X01BWAorCisjZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2RlZmluZSBTVERFUlJfRklMRU5PIDIKKworLyogU29tZSBkZWZpbmVzIGZvciBfYWNjZXNzIG5BY2Nlc3NNb2RlIChNUyBkb2Vzbid0IGRlZmluZSB0aGVtLCBidXQKKyAqIGl0IGRvZXNuJ3Qgc2VlbSB0byBodXJ0IHRvIGFkZCB0aGVtKS4gKi8KKyNkZWZpbmUJRl9PSwkwCS8qIENoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSAqLworLyogV2VsbCBtYXliZSBpdCBkb2VzIGh1cnQuICBPbiBuZXdlciB2ZXJzaW9ucyBvZiBNU1ZDUlQsIGFuIGFjY2VzcyBtb2RlCisgICBvZiAxIGNhdXNlcyBpbnZhbGlkIHBhcmFtZXRlciBlcnJvci4gKi8KKyNkZWZpbmUJWF9PSwkwCS8qIE1TIGFjY2VzcygpIGRvZXNuJ3QgY2hlY2sgZm9yIGV4ZWN1dGUgcGVybWlzc2lvbi4gKi8KKyNkZWZpbmUJV19PSwkyCS8qIENoZWNrIGZvciB3cml0ZSBwZXJtaXNzaW9uICovCisjZGVmaW5lCVJfT0sJNAkvKiBDaGVjayBmb3IgcmVhZCBwZXJtaXNzaW9uICovCisKKyNkZWZpbmUJX1NfSUZJRk8JMHgxMDAwCS8qIEZJRk8gKi8KKyNkZWZpbmUJX1NfSUZDSFIJMHgyMDAwCS8qIENoYXJhY3RlciAqLworI2RlZmluZQlfU19JRkJMSwkweDMwMDAJLyogQmxvY2s6IElzIHRoaXMgZXZlciBzZXQgdW5kZXIgdzMyPyAqLworI2RlZmluZQlfU19JRkRJUgkweDQwMDAJLyogRGlyZWN0b3J5ICovCisjZGVmaW5lCV9TX0lGUkVHCTB4ODAwMAkvKiBSZWd1bGFyICovCisKKyNkZWZpbmUJX1NfSUZNVAkJMHhGMDAwCS8qIEZpbGUgdHlwZSBtYXNrICovCisKKyNkZWZpbmUJX1NfSVhVU1IJX1NfSUVYRUMKKyNkZWZpbmUJX1NfSVdVU1IJX1NfSVdSSVRFCisjZGVmaW5lCV9TX0lSVVNSCV9TX0lSRUFECisjZGVmaW5lCV9TX0lTRElSKG0pCSgoKG0pICYgX1NfSUZNVCkgPT0gX1NfSUZESVIpCisKKyNkZWZpbmUJU19JRklGTwkJX1NfSUZJRk8KKyNkZWZpbmUJU19JRkNIUgkJX1NfSUZDSFIKKyNkZWZpbmUJU19JRkJMSwkJX1NfSUZCTEsKKyNkZWZpbmUJU19JRkRJUgkJX1NfSUZESVIKKyNkZWZpbmUJU19JRlJFRwkJX1NfSUZSRUcKKyNkZWZpbmUJU19JRk1UCQlfU19JRk1UCisjZGVmaW5lCVNfSUVYRUMJCV9TX0lFWEVDCisjZGVmaW5lCVNfSVdSSVRFCV9TX0lXUklURQorI2RlZmluZQlTX0lSRUFECQlfU19JUkVBRAorI2RlZmluZQlTX0lSV1hVCQlfU19JUldYVQorI2RlZmluZQlTX0lYVVNSCQlfU19JWFVTUgorI2RlZmluZQlTX0lXVVNSCQlfU19JV1VTUgorI2RlZmluZQlTX0lSVVNSCQlfU19JUlVTUgorCisKKyNkZWZpbmUJU19JU0RJUihtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRkRJUikKKyNkZWZpbmUJU19JU1JFRyhtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKyNkZWZpbmUJU19JU0ZJRk8obSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZJRk8pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91dGltZS5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODVmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3V0aW1lLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHN5cy91dGltZS5oPgpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9jbGluay5wbCBiL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM3NDc3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwKQEAgLTAsMCArMSw1MiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbXBpbGVzIG9yIGxpbmtzIGZpbGVzCisjCisjIFRoaXMgaXMgYSB3cmFwcGVyIHRvIGZhY2lsaXRhdGUgdGhlIGNvbXBpbGF0aW9uIG9mIEdpdCB3aXRoIE1TVkMKKyMgdXNpbmcgR05VIE1ha2UgYXMgdGhlIGJ1aWxkIHN5c3RlbS4gU28sIGluc3RlYWQgb2YgbWFuaXB1bGF0aW5nIHRoZQorIyBNYWtlZmlsZSBpbnRvIHNvbWV0aGluZyBuYXN0eSwganVzdCB0byBzdXBwb3J0IG5vbi1zcGFjZSBhcmd1bWVudHMKKyMgZXRjLCB3ZSB1c2UgdGhpcyB3cmFwcGVyIHRvIGZpeCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IE1hcml1cyBTdG9ybS1PbHNlbiA8bXN0b3Jtb0BnbWFpbC5jb20+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit1c2Ugc3RyaWN0OworbXkgQGFyZ3MgPSAoKTsKK215IEBjZmxhZ3MgPSAoKTsKK215ICRpc19saW5raW5nID0gMDsKK3doaWxlIChAQVJHVikgeworCW15ICRhcmcgPSBzaGlmdCBAQVJHVjsKKwlpZiAoIiRhcmciID1+IC9eLVtESU1HT10vKSB7CisJCXB1c2goQGNmbGFncywgJGFyZyk7CisJfSBlbHNpZiAoIiRhcmciIGVxICItbyIpIHsKKwkJbXkgJGZpbGVfb3V0ID0gc2hpZnQgQEFSR1Y7CisJCWlmICgiJGZpbGVfb3V0IiA9fiAvZXhlJC8pIHsKKwkJCSRpc19saW5raW5nID0gMTsKKwkJCXB1c2goQGFyZ3MsICItT1VUOiRmaWxlX291dCIpOworCQl9IGVsc2UgeworCQkJcHVzaChAYXJncywgIi1GbyRmaWxlX291dCIpOworCQl9CisJfSBlbHNpZiAoIiRhcmciIGVxICItbHoiKSB7CisJCXB1c2goQGFyZ3MsICJ6bGliLmxpYiIpOworCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWxpY29udiIpIHsKKwkJcHVzaChAYXJncywgImljb252LmxpYiIpOworCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWxjcnlwdG8iKSB7CisJCXB1c2goQGFyZ3MsICJsaWJlYXkzMi5saWIiKTsKKwl9IGVsc2lmICgiJGFyZyIgZXEgIi1sc3NsIikgeworCQlwdXNoKEBhcmdzLCAic3NsZWF5MzIubGliIik7CisJfSBlbHNpZiAoIiRhcmciID1+IC9eLUwvICYmICIkYXJnIiBuZSAiLUxUQ0ciKSB7CisJCSRhcmcgPX4gcy9eLUwvLUxJQlBBVEg6LzsKKwkJcHVzaChAYXJncywgJGFyZyk7CisJfSBlbHNpZiAoIiRhcmciID1+IC9eLVIvKSB7CisJCSMgZWF0CisJfSBlbHNlIHsKKwkJcHVzaChAYXJncywgJGFyZyk7CisJfQorfQoraWYgKCRpc19saW5raW5nKSB7CisJdW5zaGlmdChAYXJncywgImxpbmsuZXhlIik7Cit9IGVsc2UgeworCXVuc2hpZnQoQGFyZ3MsICJjbC5leGUiKTsKKwlwdXNoKEBhcmdzLCBAY2ZsYWdzKTsKK30KKyNwcmludGYoIioqKiogQGFyZ3NcbiIpOworZXhpdCAoc3lzdGVtKEBhcmdzKSAhPSAwKTsKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvbGliLnBsIGIvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9saWIucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNTRlNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvbGliLnBsCkBAIC0wLDAgKzEsMjYgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJpZmllcyBmaWxlcyBvbiBXaW5kb3dzCisjCisjIFRoaXMgaXMgYSB3cmFwcGVyIHRvIGZhY2lsaXRhdGUgdGhlIGNvbXBpbGF0aW9uIG9mIEdpdCB3aXRoIE1TVkMKKyMgdXNpbmcgR05VIE1ha2UgYXMgdGhlIGJ1aWxkIHN5c3RlbS4gU28sIGluc3RlYWQgb2YgbWFuaXB1bGF0aW5nIHRoZQorIyBNYWtlZmlsZSBpbnRvIHNvbWV0aGluZyBuYXN0eSwganVzdCB0byBzdXBwb3J0IG5vbi1zcGFjZSBhcmd1bWVudHMKKyMgZXRjLCB3ZSB1c2UgdGhpcyB3cmFwcGVyIHRvIGZpeCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IE1hcml1cyBTdG9ybS1PbHNlbiA8bXN0b3Jtb0BnbWFpbC5jb20+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit1c2Ugc3RyaWN0OworbXkgQGFyZ3MgPSAoKTsKK3doaWxlIChAQVJHVikgeworCW15ICRhcmcgPSBzaGlmdCBAQVJHVjsKKwlpZiAoIiRhcmciIGVxICJyY3MiKSB7CisJCSMgQ29uc3VtZSB0aGUgcmNzIG9wdGlvbgorCX0gZWxzaWYgKCIkYXJnIiA9fiAvXC5hJC8pIHsKKwkJcHVzaChAYXJncywgIi1PVVQ6JGFyZyIpOworCX0gZWxzZSB7CisJCXB1c2goQGFyZ3MsICRhcmcpOworCX0KK30KK3Vuc2hpZnQoQGFyZ3MsICJsaWIuZXhlIik7CisjIHByaW50ZigiKioqKiBAYXJnc1xuIik7CitleGl0IChzeXN0ZW0oQGFyZ3MpICE9IDApOwpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyLmggYi9jb21wYXQvd2luMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2U5MTA0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBXSU4zMl9ICisjZGVmaW5lIFdJTjMyX0gKKworLyogY29tbW9uIFdpbjMyIGZ1bmN0aW9ucyBmb3IgTWluR1cgYW5kIEN5Z3dpbiAqLworI2lmbmRlZiBXSU4zMiAgICAgICAgIC8qIE5vdCBkZWZpbmVkIGJ5IEN5Z3dpbiAqLworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBmaWxlX2F0dHJfdG9fc3RfbW9kZSAoRFdPUkQgYXR0cikKK3sKKwlpbnQgZk1vZGUgPSBTX0lSRUFEOworCWlmIChhdHRyICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorCQlmTW9kZSB8PSBTX0lGRElSOworCWVsc2UKKwkJZk1vZGUgfD0gU19JRlJFRzsKKwlpZiAoIShhdHRyICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKQorCQlmTW9kZSB8PSBTX0lXUklURTsKKwlyZXR1cm4gZk1vZGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9maWxlX2F0dHIoY29uc3QgY2hhciAqZm5hbWUsIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgKmZkYXRhKQoreworCWlmIChHZXRGaWxlQXR0cmlidXRlc0V4QShmbmFtZSwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCBmZGF0YSkpCisJCXJldHVybiAwOworCisJc3dpdGNoIChHZXRMYXN0RXJyb3IoKSkgeworCWNhc2UgRVJST1JfQUNDRVNTX0RFTklFRDoKKwljYXNlIEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OOgorCWNhc2UgRVJST1JfTE9DS19WSU9MQVRJT046CisJY2FzZSBFUlJPUl9TSEFSSU5HX0JVRkZFUl9FWENFRURFRDoKKwkJcmV0dXJuIEVBQ0NFUzsKKwljYXNlIEVSUk9SX0JVRkZFUl9PVkVSRkxPVzoKKwkJcmV0dXJuIEVOQU1FVE9PTE9ORzsKKwljYXNlIEVSUk9SX05PVF9FTk9VR0hfTUVNT1JZOgorCQlyZXR1cm4gRU5PTUVNOworCWRlZmF1bHQ6CisJCXJldHVybiBFTk9FTlQ7CisJfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC93aW4zMi9kaXJlbnQuYyBiL2NvbXBhdC93aW4zMi9kaXJlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTBkZWJlCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL2RpcmVudC5jCkBAIC0wLDAgKzEsMTA4IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZGlyZW50LmgiCisKK3N0cnVjdCBESVIgeworCXN0cnVjdCBkaXJlbnQgZGRfZGlyOyAvKiBpbmNsdWRlcyBkX3R5cGUgKi8KKwlIQU5ETEUgZGRfaGFuZGxlOyAgICAgLyogRmluZEZpcnN0RmlsZSBoYW5kbGUgKi8KKwlpbnQgZGRfc3RhdDsgICAgICAgICAgLyogMC1iYXNlZCBpbmRleCAqLworCWNoYXIgZGRfbmFtZVsxXTsgICAgICAvKiBleHRlbmQgc3RydWN0ICovCit9OworCitESVIgKm9wZW5kaXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlEV09SRCBhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzQShuYW1lKTsKKwlpbnQgbGVuOworCURJUiAqcDsKKworCS8qIGNoZWNrIGZvciB2YWxpZCBwYXRoICovCisJaWYgKGF0dHJzID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CisJCWVycm5vID0gRU5PRU5UOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBjaGVjayBpZiBpdCdzIGEgZGlyZWN0b3J5ICovCisJaWYgKCEoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKSB7CisJCWVycm5vID0gRU5PVERJUjsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogY2hlY2sgdGhhdCB0aGUgcGF0dGVybiB3b24ndCBiZSB0b28gbG9uZyBmb3IgRmluZEZpcnN0RmlsZUEgKi8KKwlsZW4gPSBzdHJsZW4obmFtZSk7CisJaWYgKGlzX2Rpcl9zZXAobmFtZVtsZW4gLSAxXSkpCisJCWxlbi0tOworCWlmIChsZW4gKyAyID49IE1BWF9QQVRIKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwID0gbWFsbG9jKHNpemVvZihESVIpICsgbGVuICsgMik7CisJaWYgKCFwKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChwLCAwLCBzaXplb2YoRElSKSArIGxlbiArIDIpOworCXN0cmNweShwLT5kZF9uYW1lLCBuYW1lKTsKKwlwLT5kZF9uYW1lW2xlbl0gPSAnLyc7CisJcC0+ZGRfbmFtZVtsZW4rMV0gPSAnKic7CisKKwlwLT5kZF9oYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKwlyZXR1cm4gcDsKK30KKworc3RydWN0IGRpcmVudCAqcmVhZGRpcihESVIgKmRpcikKK3sKKwlXSU4zMl9GSU5EX0RBVEFBIGJ1ZjsKKwlIQU5ETEUgaGFuZGxlOworCisJaWYgKCFkaXIgfHwgIWRpci0+ZGRfaGFuZGxlKSB7CisJCWVycm5vID0gRUJBREY7IC8qIE5vIHNldF9lcnJubyBmb3IgbWluZ3cgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGRpci0+ZGRfaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFICYmIGRpci0+ZGRfc3RhdCA9PSAwKSB7CisJCURXT1JEIGxhc3RlcnI7CisJCWhhbmRsZSA9IEZpbmRGaXJzdEZpbGVBKGRpci0+ZGRfbmFtZSwgJmJ1Zik7CisJCWxhc3RlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKwkJZGlyLT5kZF9oYW5kbGUgPSBoYW5kbGU7CisJCWlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgJiYgKGxhc3RlcnIgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykpIHsKKwkJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChsYXN0ZXJyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIGlmIChkaXItPmRkX2hhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgaWYgKCFGaW5kTmV4dEZpbGVBKGRpci0+ZGRfaGFuZGxlLCAmYnVmKSkgeworCQlEV09SRCBsYXN0ZXJyID0gR2V0TGFzdEVycm9yKCk7CisJCUZpbmRDbG9zZShkaXItPmRkX2hhbmRsZSk7CisJCWRpci0+ZGRfaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisJCS8qIFBPU0lYIHNheXMgeW91IHNob3VsZG4ndCBzZXQgZXJybm8gd2hlbiByZWFkZGlyIGNhbid0CisJCSAgIGZpbmQgYW55IG1vcmUgZmlsZXM7IHNvLCBpZiBhbm90aGVyIGVycm9yIHdlIGxlYXZlIGl0IHNldC4gKi8KKwkJaWYgKGxhc3RlcnIgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykKKwkJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChsYXN0ZXJyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogV2UgZ2V0IGhlcmUgaWYgYGJ1ZicgY29udGFpbnMgdmFsaWQgZGF0YS4gICovCisJc3RyY3B5KGRpci0+ZGRfZGlyLmRfbmFtZSwgYnVmLmNGaWxlTmFtZSk7CisJKytkaXItPmRkX3N0YXQ7CisKKwkvKiBTZXQgZmlsZSB0eXBlLCBiYXNlZCBvbiBXSU4zMl9GSU5EX0RBVEEgKi8KKwlkaXItPmRkX2Rpci5kX3R5cGUgPSAwOworCWlmIChidWYuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKwkJZGlyLT5kZF9kaXIuZF90eXBlIHw9IERUX0RJUjsKKwllbHNlCisJCWRpci0+ZGRfZGlyLmRfdHlwZSB8PSBEVF9SRUc7CisKKwlyZXR1cm4gJmRpci0+ZGRfZGlyOworfQorCitpbnQgY2xvc2VkaXIoRElSICpkaXIpCit7CisJaWYgKCFkaXIpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChkaXItPmRkX2hhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJRmluZENsb3NlKGRpci0+ZGRfaGFuZGxlKTsKKwlmcmVlKGRpcik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvZGlyZW50LmggYi9jb21wYXQvd2luMzIvZGlyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3YTI1YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi9kaXJlbnQuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIERJUkVOVF9ICisjZGVmaW5lIERJUkVOVF9ICisKK3R5cGVkZWYgc3RydWN0IERJUiBESVI7CisKKyNkZWZpbmUgRFRfVU5LTk9XTiAwCisjZGVmaW5lIERUX0RJUiAgICAgMQorI2RlZmluZSBEVF9SRUcgICAgIDIKKyNkZWZpbmUgRFRfTE5LICAgICAzCisKK3N0cnVjdCBkaXJlbnQgeworCWxvbmcgZF9pbm87ICAgICAgICAgICAgICAgICAgICAgIC8qIEFsd2F5cyB6ZXJvLiAqLworCWNoYXIgZF9uYW1lW0ZJTEVOQU1FX01BWF07ICAgICAgIC8qIEZpbGUgbmFtZS4gKi8KKwl1bmlvbiB7CisJCXVuc2lnbmVkIHNob3J0IGRfcmVjbGVuOyAvKiBBbHdheXMgemVyby4gKi8KKwkJdW5zaWduZWQgY2hhciAgZF90eXBlOyAgIC8qIFJlaW1wbGVtZW50YXRpb24gYWRkcyB0aGlzICovCisJfTsKK307CisKK0RJUiAqb3BlbmRpcihjb25zdCBjaGFyICpkaXJuYW1lKTsKK3N0cnVjdCBkaXJlbnQgKnJlYWRkaXIoRElSICpkaXIpOworaW50IGNsb3NlZGlyKERJUiAqZGlyKTsKKworI2VuZGlmIC8qIERJUkVOVF9IICovCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvcHRocmVhZC5jIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTBlODc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuYwpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbmRyemVqIEsuIEhhY3pld3NraSA8YWhhY3pld3NraUBnbWFpbC5jb20+CisgKgorICogRElTQ0xBSU1FUjogVGhlIGltcGxlbWVudGF0aW9uIGlzIEdpdC1zcGVjaWZpYywgaXQgaXMgc3Vic2V0IG9mIG9yaWdpbmFsCisgKiBQdGhyZWFkcyBBUEksIHdpdGhvdXQgbG90cyBvZiBvdGhlciBmZWF0dXJlcyB0aGF0IEdpdCBkb2Vzbid0IHVzZS4KKyAqIEdpdCBhbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgcGFzc2VkIGFyZ3VtZW50cyBhcmUgdmFsaWQsIHNvIHRoZXJlJ3MKKyAqIG5vIG5lZWQgZm9yIGRvdWJsZS1jaGVja2luZy4KKyAqLworCisjaW5jbHVkZSAiLi4vLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAicHRocmVhZC5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworc3RhdGljIHVuc2lnbmVkIF9fc3RkY2FsbCB3aW4zMl9zdGFydF9yb3V0aW5lKHZvaWQgKmFyZykKK3sKKwlwdGhyZWFkX3QgKnRocmVhZCA9IGFyZzsKKwl0aHJlYWQtPnRpZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOworCXRocmVhZC0+YXJnID0gdGhyZWFkLT5zdGFydF9yb3V0aW5lKHRocmVhZC0+YXJnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqdGhyZWFkLCBjb25zdCB2b2lkICp1bnVzZWQsCisJCSAgIHZvaWQgKigqc3RhcnRfcm91dGluZSkodm9pZCopLCB2b2lkICphcmcpCit7CisJdGhyZWFkLT5hcmcgPSBhcmc7CisJdGhyZWFkLT5zdGFydF9yb3V0aW5lID0gc3RhcnRfcm91dGluZTsKKwl0aHJlYWQtPmhhbmRsZSA9IChIQU5ETEUpCisJCV9iZWdpbnRocmVhZGV4KE5VTEwsIDAsIHdpbjMyX3N0YXJ0X3JvdXRpbmUsIHRocmVhZCwgMCwgTlVMTCk7CisKKwlpZiAoIXRocmVhZC0+aGFuZGxlKQorCQlyZXR1cm4gZXJybm87CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworaW50IHdpbjMyX3B0aHJlYWRfam9pbihwdGhyZWFkX3QgKnRocmVhZCwgdm9pZCAqKnZhbHVlX3B0cikKK3sKKwlEV09SRCByZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KHRocmVhZC0+aGFuZGxlLCBJTkZJTklURSk7CisJc3dpdGNoIChyZXN1bHQpIHsKKwkJY2FzZSBXQUlUX09CSkVDVF8wOgorCQkJaWYgKHZhbHVlX3B0cikKKwkJCQkqdmFsdWVfcHRyID0gdGhyZWFkLT5hcmc7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSBXQUlUX0FCQU5ET05FRDoKKwkJCXJldHVybiBFSU5WQUw7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJfQorfQorCitwdGhyZWFkX3QgcHRocmVhZF9zZWxmKHZvaWQpCit7CisJcHRocmVhZF90IHQgPSB7IDAgfTsKKwl0LnRpZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOworCXJldHVybiB0OworfQorCitpbnQgcHRocmVhZF9jb25kX2luaXQocHRocmVhZF9jb25kX3QgKmNvbmQsIGNvbnN0IHZvaWQgKnVudXNlZCkKK3sKKwljb25kLT53YWl0ZXJzID0gMDsKKwljb25kLT53YXNfYnJvYWRjYXN0ID0gMDsKKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZjb25kLT53YWl0ZXJzX2xvY2spOworCisJY29uZC0+c2VtYSA9IENyZWF0ZVNlbWFwaG9yZShOVUxMLCAwLCBMT05HX01BWCwgTlVMTCk7CisJaWYgKCFjb25kLT5zZW1hKQorCQlkaWUoIkNyZWF0ZVNlbWFwaG9yZSgpIGZhaWxlZCIpOworCisJY29uZC0+Y29udGludWVfYnJvYWRjYXN0ID0gQ3JlYXRlRXZlbnQoTlVMTCwJLyogc2VjdXJpdHkgKi8KKwkJCQlGQUxTRSwJCQkvKiBhdXRvLXJlc2V0ICovCisJCQkJRkFMU0UsCQkJLyogbm90IHNpZ25hbGVkICovCisJCQkJTlVMTCk7CQkJLyogbmFtZSAqLworCWlmICghY29uZC0+Y29udGludWVfYnJvYWRjYXN0KQorCQlkaWUoIkNyZWF0ZUV2ZW50KCkgZmFpbGVkIik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfY29uZF9kZXN0cm95KHB0aHJlYWRfY29uZF90ICpjb25kKQoreworCUNsb3NlSGFuZGxlKGNvbmQtPnNlbWEpOworCUNsb3NlSGFuZGxlKGNvbmQtPmNvbnRpbnVlX2Jyb2FkY2FzdCk7CisJRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZjb25kLT53YWl0ZXJzX2xvY2spOworCXJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKmNvbmQsIENSSVRJQ0FMX1NFQ1RJT04gKm11dGV4KQoreworCWludCBsYXN0X3dhaXRlcjsKKworCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZjb25kLT53YWl0ZXJzX2xvY2spOworCWNvbmQtPndhaXRlcnMrKzsKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKworCS8qCisJICogVW5sb2NrIGV4dGVybmFsIG11dGV4IGFuZCB3YWl0IGZvciBzaWduYWwuCisJICogTk9URTogd2UndmUgaGVsZCBtdXRleCBsb2NrZWQgbG9uZyBlbm91Z2ggdG8gaW5jcmVtZW50CisJICogd2FpdGVycyBjb3VudCBhYm92ZSwgc28gdGhlcmUncyBubyBwcm9ibGVtIHdpdGgKKwkgKiBsZWF2aW5nIG11dGV4IHVubG9ja2VkIGJlZm9yZSB3ZSB3YWl0IG9uIHNlbWFwaG9yZS4KKwkgKi8KKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbihtdXRleCk7CisKKwkvKiBsZXQncyB3YWl0IC0gaWdub3JlIHJldHVybiB2YWx1ZSAqLworCVdhaXRGb3JTaW5nbGVPYmplY3QoY29uZC0+c2VtYSwgSU5GSU5JVEUpOworCisJLyoKKwkgKiBEZWNyZWFzZSB3YWl0ZXJzIGNvdW50LiBJZiB3ZSBhcmUgdGhlIGxhc3Qgd2FpdGVyLCB0aGVuIHdlIG11c3QKKwkgKiBub3RpZnkgdGhlIGJyb2FkY2FzdGluZyB0aHJlYWQgdGhhdCBpdCBjYW4gY29udGludWUuCisJICogQnV0IGlmIHdlIGNvbnRpbnVlZCBkdWUgdG8gY29uZF9zaWduYWwsIHdlIGRvIG5vdCBoYXZlIHRvIGRvIHRoYXQKKwkgKiBiZWNhdXNlIHRoZSBzaWduYWxpbmcgdGhyZWFkIGtub3dzIHRoYXQgb25seSBvbmUgd2FpdGVyIGNvbnRpbnVlZC4KKwkgKi8KKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKwljb25kLT53YWl0ZXJzLS07CisJbGFzdF93YWl0ZXIgPSBjb25kLT53YXNfYnJvYWRjYXN0ICYmIGNvbmQtPndhaXRlcnMgPT0gMDsKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKworCWlmIChsYXN0X3dhaXRlcikgeworCQkvKgorCQkgKiBjb25kX2Jyb2FkY2FzdCB3YXMgaXNzdWVkIHdoaWxlIG11dGV4IHdhcyBoZWxkLiBUaGlzIG1lYW5zCisJCSAqIHRoYXQgYWxsIG90aGVyIHdhaXRlcnMgaGF2ZSBjb250aW51ZWQsIGJ1dCBhcmUgY29udGVuZGluZworCQkgKiBmb3IgdGhlIG11dGV4IGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIHRoZQorCQkgKiBicm9hZGNhc3RpbmcgdGhyZWFkIGRpZCBub3QgbGVhdmUgY29uZF9icm9hZGNhc3QsIHlldC4KKwkJICogKFRoaXMgaXMgc28gdGhhdCBpdCBjYW4gYmUgc3VyZSB0aGF0IGVhY2ggd2FpdGVyIGhhcworCQkgKiBjb25zdW1lZCBleGFjdGx5IG9uZSBzbGljZSBvZiB0aGUgc2VtYXBob3IuKQorCQkgKiBUaGUgbGFzdCB3YWl0ZXIgbXVzdCB0ZWxsIHRoZSBicm9hZGNhc3RpbmcgdGhyZWFkIHRoYXQgaXQKKwkJICogY2FuIGdvIG9uLgorCQkgKi8KKwkJU2V0RXZlbnQoY29uZC0+Y29udGludWVfYnJvYWRjYXN0KTsKKwkJLyoKKwkJICogTm93IHdlIGdvIG9uIHRvIGNvbnRlbmQgd2l0aCBhbGwgb3RoZXIgd2FpdGVycyBmb3IKKwkJICogdGhlIG11dGV4LiBBdWYgaW4gZGVuIEthbXBmIQorCQkgKi8KKwl9CisJLyogbG9jayBleHRlcm5hbCBtdXRleCBhZ2FpbiAqLworCUVudGVyQ3JpdGljYWxTZWN0aW9uKG11dGV4KTsKKworCXJldHVybiAwOworfQorCisvKgorICogSU1QT1JUQU5UOiBUaGlzIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIHRoYXQgcHRocmVhZF9jb25kX3NpZ25hbAorICogaXMgY2FsbGVkIHdoaWxlIHRoZSBtdXRleCBpcyBoZWxkIHRoYXQgaXMgdXNlZCBpbiB0aGUgY29ycmVzcG9uZGluZworICogcHRocmVhZF9jb25kX3dhaXQgY2FsbHMhCisgKi8KK2ludCBwdGhyZWFkX2NvbmRfc2lnbmFsKHB0aHJlYWRfY29uZF90ICpjb25kKQoreworCWludCBoYXZlX3dhaXRlcnM7CisKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKwloYXZlX3dhaXRlcnMgPSBjb25kLT53YWl0ZXJzID4gMDsKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKworCS8qCisJICogU2lnbmFsIG9ubHkgd2hlbiB0aGVyZSBhcmUgd2FpdGVycworCSAqLworCWlmIChoYXZlX3dhaXRlcnMpCisJCXJldHVybiBSZWxlYXNlU2VtYXBob3JlKGNvbmQtPnNlbWEsIDEsIE5VTEwpID8KKwkJCTAgOiBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogRE9VQkxZIElNUE9SVEFOVDogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aGF0IHB0aHJlYWRfY29uZF9icm9hZGNhc3QKKyAqIGlzIGNhbGxlZCB3aGlsZSB0aGUgbXV0ZXggaXMgaGVsZCB0aGF0IGlzIHVzZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcKKyAqIHB0aHJlYWRfY29uZF93YWl0IGNhbGxzIQorICovCitpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdChwdGhyZWFkX2NvbmRfdCAqY29uZCkKK3sKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKworCWlmICgoY29uZC0+d2FzX2Jyb2FkY2FzdCA9IGNvbmQtPndhaXRlcnMgPiAwKSkgeworCQkvKiB3YWtlIHVwIGFsbCB3YWl0ZXJzICovCisJCVJlbGVhc2VTZW1hcGhvcmUoY29uZC0+c2VtYSwgY29uZC0+d2FpdGVycywgTlVMTCk7CisJCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZjb25kLT53YWl0ZXJzX2xvY2spOworCQkvKgorCQkgKiBBdCB0aGlzIHBvaW50IGFsbCB3YWl0ZXJzIGNvbnRpbnVlLiBFYWNoIG9uZSB0YWtlcyBpdHMKKwkJICogc2xpY2Ugb2YgdGhlIHNlbWFwaG9yLiBOb3cgaXQncyBvdXIgdHVybiB0byB3YWl0OiBTaW5jZQorCQkgKiB0aGUgZXh0ZXJuYWwgbXV0ZXggaXMgaGVsZCwgbm8gdGhyZWFkIGNhbiBsZWF2ZSBjb25kX3dhaXQsCisJCSAqIHlldC4gRm9yIHRoaXMgcmVhc29uLCB3ZSBjYW4gYmUgc3VyZSB0aGF0IG5vIHRocmVhZCBnZXRzCisJCSAqIGEgY2hhbmNlIHRvIGVhdCAqbW9yZSogdGhhbiBvbmUgc2xpY2UuIE9UT0gsIGl0IG1lYW5zCisJCSAqIHRoYXQgdGhlIGxhc3Qgd2FpdGVyIG11c3Qgc2VuZCB1cyBhIHdha2UtdXAuCisJCSAqLworCQlXYWl0Rm9yU2luZ2xlT2JqZWN0KGNvbmQtPmNvbnRpbnVlX2Jyb2FkY2FzdCwgSU5GSU5JVEUpOworCQkvKgorCQkgKiBTaW5jZSB0aGUgZXh0ZXJuYWwgbXV0ZXggaXMgaGVsZCwgbm8gdGhyZWFkIGNhbiBlbnRlcgorCQkgKiBjb25kX3dhaXQsIGFuZCwgaGVuY2UsIGl0IGlzIHNhZmUgdG8gcmVzZXQgdGhpcyBmbGFnCisJCSAqIHdpdGhvdXQgY29uZC0+d2FpdGVyc19sb2NrIGhlbGQuCisJCSAqLworCQljb25kLT53YXNfYnJvYWRjYXN0ID0gMDsKKwl9IGVsc2UgeworCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvcHRocmVhZC5oIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWQxODczCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIEhlYWRlciB1c2VkIHRvIGFkYXB0IHB0aHJlYWQtYmFzZWQgUE9TSVggY29kZSB0byBXaW5kb3dzIEFQSSB0aHJlYWRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbmRyemVqIEsuIEhhY3pld3NraSA8YWhhY3pld3NraUBnbWFpbC5jb20+CisgKi8KKworI2lmbmRlZiBQVEhSRUFEX0gKKyNkZWZpbmUgUFRIUkVBRF9ICisKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLyoKKyAqIERlZmluZXMgdGhhdCBhZGFwdCBXaW5kb3dzIEFQSSB0aHJlYWRzIHRvIHB0aHJlYWRzIEFQSQorICovCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfdCBDUklUSUNBTF9TRUNUSU9OCisKKyNkZWZpbmUgcHRocmVhZF9tdXRleF9pbml0KGEsYikgKEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oKGEpKSwgMCkKKyNkZWZpbmUgcHRocmVhZF9tdXRleF9kZXN0cm95KGEpIERlbGV0ZUNyaXRpY2FsU2VjdGlvbigoYSkpCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfbG9jayBFbnRlckNyaXRpY2FsU2VjdGlvbgorI2RlZmluZSBwdGhyZWFkX211dGV4X3VubG9jayBMZWF2ZUNyaXRpY2FsU2VjdGlvbgorCit0eXBlZGVmIGludCBwdGhyZWFkX211dGV4YXR0cl90OworI2RlZmluZSBwdGhyZWFkX211dGV4YXR0cl9pbml0KGEpICgqKGEpID0gMCkKKyNkZWZpbmUgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveShhKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZShhLCB0KSAwCisjZGVmaW5lIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFIDAKKworLyoKKyAqIEltcGxlbWVudCBzaW1wbGUgY29uZGl0aW9uIHZhcmlhYmxlIGZvciBXaW5kb3dzIHRocmVhZHMsIGJhc2VkIG9uIEFDRQorICogaW1wbGVtZW50YXRpb24uCisgKgorICogU2VlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uOiBodHRwOi8vYml0Lmx5LzF2a0RqbworICogQUNFIGhvbWVwYWdlOiBodHRwOi8vd3d3LmNzZS53dXN0bC5lZHUvfnNjaG1pZHQvQUNFLmh0bWwKKyAqIFNlZSBhbHNvOiBodHRwOi8vd3d3LmNzZS53dXN0bC5lZHUvfnNjaG1pZHQvd2luMzItY3YtMS5odG1sCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlMT05HIHdhaXRlcnM7CisJaW50IHdhc19icm9hZGNhc3Q7CisJQ1JJVElDQUxfU0VDVElPTiB3YWl0ZXJzX2xvY2s7CisJSEFORExFIHNlbWE7CisJSEFORExFIGNvbnRpbnVlX2Jyb2FkY2FzdDsKK30gcHRocmVhZF9jb25kX3Q7CisKK2V4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQocHRocmVhZF9jb25kX3QgKmNvbmQsIGNvbnN0IHZvaWQgKnVudXNlZCk7CitleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95KHB0aHJlYWRfY29uZF90ICpjb25kKTsKK2V4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKmNvbmQsIENSSVRJQ0FMX1NFQ1RJT04gKm11dGV4KTsKK2V4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqY29uZCk7CitleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QocHRocmVhZF9jb25kX3QgKmNvbmQpOworCisvKgorICogU2ltcGxlIHRocmVhZCBjcmVhdGlvbiBpbXBsZW1lbnRhdGlvbiB1c2luZyBwdGhyZWFkIEFQSQorICovCit0eXBlZGVmIHN0cnVjdCB7CisJSEFORExFIGhhbmRsZTsKKwl2b2lkICooKnN0YXJ0X3JvdXRpbmUpKHZvaWQqKTsKKwl2b2lkICphcmc7CisJRFdPUkQgdGlkOworfSBwdGhyZWFkX3Q7CisKK2V4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICp0aHJlYWQsIGNvbnN0IHZvaWQgKnVudXNlZCwKKwkJCSAgdm9pZCAqKCpzdGFydF9yb3V0aW5lKSh2b2lkKiksIHZvaWQgKmFyZyk7CisKKy8qCisgKiBUbyBhdm9pZCB0aGUgbmVlZCBvZiBjb3B5aW5nIGEgc3RydWN0LCB3ZSB1c2Ugc21hbGwgbWFjcm8gd3JhcHBlciB0byBwYXNzCisgKiBwb2ludGVyIHRvIHdpbjMyX3B0aHJlYWRfam9pbiBpbnN0ZWFkLgorICovCisjZGVmaW5lIHB0aHJlYWRfam9pbihhLCBiKSB3aW4zMl9wdGhyZWFkX2pvaW4oJihhKSwgKGIpKQorCitleHRlcm4gaW50IHdpbjMyX3B0aHJlYWRfam9pbihwdGhyZWFkX3QgKnRocmVhZCwgdm9pZCAqKnZhbHVlX3B0cik7CisKKyNkZWZpbmUgcHRocmVhZF9lcXVhbCh0MSwgdDIpICgodDEpLnRpZCA9PSAodDIpLnRpZCkKK2V4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmKHZvaWQpOworCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2V4aXQodm9pZCAqcmV0KQoreworCUV4aXRUaHJlYWQoKERXT1JEKXJldCk7Cit9CisKK3R5cGVkZWYgRFdPUkQgcHRocmVhZF9rZXlfdDsKK3N0YXRpYyBpbmxpbmUgaW50IHB0aHJlYWRfa2V5X2NyZWF0ZShwdGhyZWFkX2tleV90ICprZXlwLCB2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCAqdmFsdWUpKQoreworCXJldHVybiAoKmtleXAgPSBUbHNBbGxvYygpKSA9PSBUTFNfT1VUX09GX0lOREVYRVMgPyBFQUdBSU4gOiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlfdCBrZXkpCit7CisJcmV0dXJuIFRsc0ZyZWUoa2V5KSA/IDAgOiBFSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnZhbHVlKQoreworCXJldHVybiBUbHNTZXRWYWx1ZShrZXksICh2b2lkICopdmFsdWUpID8gMCA6IEVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljKHB0aHJlYWRfa2V5X3Qga2V5KQoreworCXJldHVybiBUbHNHZXRWYWx1ZShrZXkpOworfQorCisjZW5kaWYgLyogUFRIUkVBRF9IICovCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvc3lzbG9nLmMgYi9jb21wYXQvd2luMzIvc3lzbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxNWU0MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi9zeXNsb2cuYwpAQCAtMCwwICsxLDc4IEBACisjaW5jbHVkZSAiLi4vLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK3N0YXRpYyBIQU5ETEUgbXNfZXZlbnRsb2c7CisKK3ZvaWQgb3BlbmxvZyhjb25zdCBjaGFyICppZGVudCwgaW50IGxvZ29wdCwgaW50IGZhY2lsaXR5KQoreworCWlmIChtc19ldmVudGxvZykKKwkJcmV0dXJuOworCisJbXNfZXZlbnRsb2cgPSBSZWdpc3RlckV2ZW50U291cmNlQShOVUxMLCBpZGVudCk7CisKKwlpZiAoIW1zX2V2ZW50bG9nKQorCQl3YXJuaW5nKCJSZWdpc3RlckV2ZW50U291cmNlKCkgZmFpbGVkOiAlbHUiLCBHZXRMYXN0RXJyb3IoKSk7Cit9CisKK3ZvaWQgc3lzbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJV09SRCBsb2d0eXBlOworCWNoYXIgKnN0ciwgKnBvczsKKwlpbnQgc3RyX2xlbjsKKwl2YV9saXN0IGFwOworCisJaWYgKCFtc19ldmVudGxvZykKKwkJcmV0dXJuOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyX2xlbiA9IHZzbnByaW50ZihOVUxMLCAwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJaWYgKHN0cl9sZW4gPCAwKSB7CisJCXdhcm5pbmcoInZzbnByaW50ZiBmYWlsZWQ6ICclcyciLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm47CisJfQorCisJc3RyID0gbWFsbG9jKHN0cl9sZW4gKyAxKTsKKwlpZiAoIXN0cikgeworCQl3YXJuaW5nKCJtYWxsb2MgZmFpbGVkOiAnJXMnIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihzdHIsIHN0cl9sZW4gKyAxLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJd2hpbGUgKChwb3MgPSBzdHJzdHIoc3RyLCAiJTEiKSkgIT0gTlVMTCkgeworCQlzdHIgPSByZWFsbG9jKHN0ciwgKytzdHJfbGVuICsgMSk7CisJCWlmICghc3RyKSB7CisJCQl3YXJuaW5nKCJyZWFsbG9jIGZhaWxlZDogJyVzJyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm47CisJCX0KKwkJbWVtbW92ZShwb3MgKyAyLCBwb3MgKyAxLCBzdHJsZW4ocG9zKSk7CisJCXBvc1sxXSA9ICcgJzsKKwl9CisKKwlzd2l0Y2ggKHByaW9yaXR5KSB7CisJY2FzZSBMT0dfRU1FUkc6CisJY2FzZSBMT0dfQUxFUlQ6CisJY2FzZSBMT0dfQ1JJVDoKKwljYXNlIExPR19FUlI6CisJCWxvZ3R5cGUgPSBFVkVOVExPR19FUlJPUl9UWVBFOworCQlicmVhazsKKworCWNhc2UgTE9HX1dBUk5JTkc6CisJCWxvZ3R5cGUgPSBFVkVOVExPR19XQVJOSU5HX1RZUEU7CisJCWJyZWFrOworCisJY2FzZSBMT0dfTk9USUNFOgorCWNhc2UgTE9HX0lORk86CisJY2FzZSBMT0dfREVCVUc6CisJZGVmYXVsdDoKKwkJbG9ndHlwZSA9IEVWRU5UTE9HX0lORk9STUFUSU9OX1RZUEU7CisJCWJyZWFrOworCX0KKworCVJlcG9ydEV2ZW50QShtc19ldmVudGxvZywgbG9ndHlwZSwgMCwgMCwgTlVMTCwgMSwgMCwKKwkgICAgKGNvbnN0IGNoYXIgKiopJnN0ciwgTlVMTCk7CisJZnJlZShzdHIpOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3N5c2xvZy5oIGIvY29tcGF0L3dpbjMyL3N5c2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZGFhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvc3lzbG9nLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBTWVNMT0dfSAorI2RlZmluZSBTWVNMT0dfSAorCisjZGVmaW5lIExPR19QSUQgICAgIDB4MDEKKworI2RlZmluZSBMT0dfRU1FUkcgICAwCisjZGVmaW5lIExPR19BTEVSVCAgIDEKKyNkZWZpbmUgTE9HX0NSSVQgICAgMgorI2RlZmluZSBMT0dfRVJSICAgICAzCisjZGVmaW5lIExPR19XQVJOSU5HIDQKKyNkZWZpbmUgTE9HX05PVElDRSAgNQorI2RlZmluZSBMT0dfSU5GTyAgICA2CisjZGVmaW5lIExPR19ERUJVRyAgIDcKKworI2RlZmluZSBMT0dfREFFTU9OICAoMzw8MykKKwordm9pZCBvcGVubG9nKGNvbnN0IGNoYXIgKmlkZW50LCBpbnQgbG9nb3B0LCBpbnQgZmFjaWxpdHkpOwordm9pZCBzeXNsb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNlbmRpZiAvKiBTWVNMT0dfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMybW1hcC5jIGIvY29tcGF0L3dpbjMybW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZDJlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzJtbWFwLmMKQEAgLTAsMCArMSw0MSBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCit2b2lkICpnaXRfbW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisJSEFORExFIGhtYXA7CisJdm9pZCAqdGVtcDsKKwlvZmZfdCBsZW47CisJc3RydWN0IHN0YXQgc3Q7CisJdWludDY0X3QgbyA9IG9mZnNldDsKKwl1aW50MzJfdCBsID0gbyAmIDB4RkZGRkZGRkY7CisJdWludDMyX3QgaCA9IChvID4+IDMyKSAmIDB4RkZGRkZGRkY7CisKKwlpZiAoIWZzdGF0KGZkLCAmc3QpKQorCQlsZW4gPSBzdC5zdF9zaXplOworCWVsc2UKKwkJZGllKCJtbWFwOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGZpbGVzaXplIik7CisKKwlpZiAoKGxlbmd0aCArIG9mZnNldCkgPiBsZW4pCisJCWxlbmd0aCA9IHhzaXplX3QobGVuIC0gb2Zmc2V0KTsKKworCWlmICghKGZsYWdzICYgTUFQX1BSSVZBVEUpKQorCQlkaWUoIkludmFsaWQgdXNhZ2Ugb2YgbW1hcCB3aGVuIGJ1aWx0IHdpdGggVVNFX1dJTjMyX01NQVAiKTsKKworCWhtYXAgPSBDcmVhdGVGaWxlTWFwcGluZygoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKSwgMCwgUEFHRV9XUklURUNPUFksCisJCTAsIDAsIDApOworCisJaWYgKCFobWFwKQorCQlyZXR1cm4gTUFQX0ZBSUxFRDsKKworCXRlbXAgPSBNYXBWaWV3T2ZGaWxlRXgoaG1hcCwgRklMRV9NQVBfQ09QWSwgaCwgbCwgbGVuZ3RoLCBzdGFydCk7CisKKwlpZiAoIUNsb3NlSGFuZGxlKGhtYXApKQorCQl3YXJuaW5nKCJ1bmFibGUgdG8gY2xvc2UgZmlsZSBtYXBwaW5nIGhhbmRsZSIpOworCisJcmV0dXJuIHRlbXAgPyB0ZW1wIDogTUFQX0ZBSUxFRDsKK30KKworaW50IGdpdF9tdW5tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpCit7CisJcmV0dXJuICFVbm1hcFZpZXdPZkZpbGUoc3RhcnQpOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbmFuc2kuYyBiL2NvbXBhdC93aW5hbnNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkY2UyMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW5hbnNpLmMKQEAgLTAsMCArMSwzNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBQZXRlciBIYXJyaXMgPGdpdEBwZXRlci5pcy1hLWdlZWsub3JnPgorICovCisKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworLyoKKyBGdW5jdGlvbnMgdG8gYmUgd3JhcHBlZDoKKyovCisjdW5kZWYgcHJpbnRmCisjdW5kZWYgZnByaW50ZgorI3VuZGVmIGZwdXRzCisvKiBUT0RPOiB3cml0ZSAqLworCisvKgorIEFOU0kgY29kZXMgdXNlZCBieSBnaXQ6IG0sIEsKKworIFRoaXMgZmlsZSBpcyBnaXQtc3BlY2lmaWMuIFRoZXJlZm9yZSwgdGhpcyBmaWxlIGRvZXMgbm90IGF0dGVtcHQKKyB0byBpbXBsZW1lbnQgYW55IGNvZGVzIHRoYXQgYXJlIG5vdCB1c2VkIGJ5IGdpdC4KKyovCisKK3N0YXRpYyBIQU5ETEUgY29uc29sZTsKK3N0YXRpYyBXT1JEIHBsYWluX2F0dHI7CitzdGF0aWMgV09SRCBhdHRyOworc3RhdGljIGludCBuZWdhdGl2ZTsKKworc3RhdGljIHZvaWQgaW5pdCh2b2lkKQoreworCUNPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIHNiaTsKKworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCWlmIChpbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJY29uc29sZSA9IEdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSk7CisJaWYgKGNvbnNvbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCWNvbnNvbGUgPSBOVUxMOworCisJaWYgKCFjb25zb2xlKQorCQlyZXR1cm47CisKKwlHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhjb25zb2xlLCAmc2JpKTsKKwlhdHRyID0gcGxhaW5fYXR0ciA9IHNiaS53QXR0cmlidXRlczsKKwluZWdhdGl2ZSA9IDA7CisKKwlpbml0aWFsaXplZCA9IDE7Cit9CisKKworI2RlZmluZSBGT1JFR1JPVU5EX0FMTCAoRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9CTFVFKQorI2RlZmluZSBCQUNLR1JPVU5EX0FMTCAoQkFDS0dST1VORF9SRUQgfCBCQUNLR1JPVU5EX0dSRUVOIHwgQkFDS0dST1VORF9CTFVFKQorCitzdGF0aWMgdm9pZCBzZXRfY29uc29sZV9hdHRyKHZvaWQpCit7CisJV09SRCBhdHRyaWJ1dGVzID0gYXR0cjsKKwlpZiAobmVnYXRpdmUpIHsKKwkJYXR0cmlidXRlcyAmPSB+Rk9SRUdST1VORF9BTEw7CisJCWF0dHJpYnV0ZXMgJj0gfkJBQ0tHUk9VTkRfQUxMOworCisJCS8qIFRoaXMgY291bGQgcHJvYmFibHkgdXNlIGEgYml0bWFzaworCQkgICBpbnN0ZWFkIG9mIGEgc2VyaWVzIG9mIGlmcyAqLworCQlpZiAoYXR0ciAmIEZPUkVHUk9VTkRfUkVEKQorCQkJYXR0cmlidXRlcyB8PSBCQUNLR1JPVU5EX1JFRDsKKwkJaWYgKGF0dHIgJiBGT1JFR1JPVU5EX0dSRUVOKQorCQkJYXR0cmlidXRlcyB8PSBCQUNLR1JPVU5EX0dSRUVOOworCQlpZiAoYXR0ciAmIEZPUkVHUk9VTkRfQkxVRSkKKwkJCWF0dHJpYnV0ZXMgfD0gQkFDS0dST1VORF9CTFVFOworCisJCWlmIChhdHRyICYgQkFDS0dST1VORF9SRUQpCisJCQlhdHRyaWJ1dGVzIHw9IEZPUkVHUk9VTkRfUkVEOworCQlpZiAoYXR0ciAmIEJBQ0tHUk9VTkRfR1JFRU4pCisJCQlhdHRyaWJ1dGVzIHw9IEZPUkVHUk9VTkRfR1JFRU47CisJCWlmIChhdHRyICYgQkFDS0dST1VORF9CTFVFKQorCQkJYXR0cmlidXRlcyB8PSBGT1JFR1JPVU5EX0JMVUU7CisJfQorCVNldENvbnNvbGVUZXh0QXR0cmlidXRlKGNvbnNvbGUsIGF0dHJpYnV0ZXMpOworfQorCitzdGF0aWMgdm9pZCBlcmFzZV9pbl9saW5lKHZvaWQpCit7CisJQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gc2JpOworCURXT1JEIGR1bW15OyAvKiBOZWVkZWQgZm9yIFdpbmRvd3MgNyAob3IgVmlzdGEpIHJlZ3Jlc3Npb24gKi8KKworCWlmICghY29uc29sZSkKKwkJcmV0dXJuOworCisJR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8oY29uc29sZSwgJnNiaSk7CisJRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBKGNvbnNvbGUsICcgJywKKwkJc2JpLmR3U2l6ZS5YIC0gc2JpLmR3Q3Vyc29yUG9zaXRpb24uWCwgc2JpLmR3Q3Vyc29yUG9zaXRpb24sCisJCSZkdW1teSk7Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKnNldF9hdHRyKGNvbnN0IGNoYXIgKnN0cikKK3sKKwljb25zdCBjaGFyICpmdW5jOworCXNpemVfdCBsZW4gPSBzdHJzcG4oc3RyLCAiMDEyMzQ1Njc4OTsiKTsKKwlmdW5jID0gc3RyICsgbGVuOworCisJc3dpdGNoICgqZnVuYykgeworCWNhc2UgJ20nOgorCQlkbyB7CisJCQlsb25nIHZhbCA9IHN0cnRvbChzdHIsIChjaGFyICoqKSZzdHIsIDEwKTsKKwkJCXN3aXRjaCAodmFsKSB7CisJCQljYXNlIDA6IC8qIHJlc2V0ICovCisJCQkJYXR0ciA9IHBsYWluX2F0dHI7CisJCQkJbmVnYXRpdmUgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSAxOiAvKiBib2xkICovCisJCQkJYXR0ciB8PSBGT1JFR1JPVU5EX0lOVEVOU0lUWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjogIC8qIGZhaW50ICovCisJCQljYXNlIDIyOiAvKiBub3JtYWwgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0lOVEVOU0lUWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzogIC8qIGl0YWxpYyAqLworCQkJCS8qIFVuc3VwcG9ydGVkICovCisJCQkJYnJlYWs7CisJCQljYXNlIDQ6ICAvKiB1bmRlcmxpbmUgKi8KKwkJCWNhc2UgMjE6IC8qIGRvdWJsZSB1bmRlcmxpbmUgKi8KKwkJCQkvKiBXaWtpcGVkaWEgc2F5cyB0aGlzIGZsYWcgZG9lcyBub3RoaW5nICovCisJCQkJLyogRnVydGhlcm1vcmUsIG1pbmd3IGRvZXNuJ3QgZGVmaW5lIHRoaXMgZmxhZworCQkJCWF0dHIgfD0gQ09NTU9OX0xWQl9VTkRFUlNDT1JFOyAqLworCQkJCWJyZWFrOworCQkJY2FzZSAyNDogLyogbm8gdW5kZXJsaW5lICovCisJCQkJLyogYXR0ciAmPSB+Q09NTU9OX0xWQl9VTkRFUlNDT1JFOyAqLworCQkJCWJyZWFrOworCQkJY2FzZSA1OiAgLyogc2xvdyBibGluayAqLworCQkJY2FzZSA2OiAgLyogZmFzdCBibGluayAqLworCQkJCS8qIFdlIGRvbid0IGhhdmUgYmxpbmssIGJ1dCB3ZSBkbyBoYXZlCisJCQkJICAgYmFja2dyb3VuZCBpbnRlbnNpdHkgKi8KKwkJCQlhdHRyIHw9IEJBQ0tHUk9VTkRfSU5URU5TSVRZOworCQkJCWJyZWFrOworCQkJY2FzZSAyNTogLyogbm8gYmxpbmsgKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0lOVEVOU0lUWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNzogIC8qIG5lZ2F0aXZlICovCisJCQkJbmVnYXRpdmUgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAyNzogLyogcG9zaXRpdmUgKi8KKwkJCQluZWdhdGl2ZSA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDg6ICAvKiBjb25jZWFsICovCisJCQljYXNlIDI4OiAvKiByZXZlYWwgKi8KKwkJCQkvKiBVbnN1cHBvcnRlZCAqLworCQkJCWJyZWFrOworCQkJY2FzZSAzMDogLyogQmxhY2sgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzE6IC8qIFJlZCAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9SRUQ7CisJCQkJYnJlYWs7CisJCQljYXNlIDMyOiAvKiBHcmVlbiAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9HUkVFTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzM6IC8qIFllbGxvdyAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOOworCQkJCWJyZWFrOworCQkJY2FzZSAzNDogLyogQmx1ZSAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9CTFVFOworCQkJCWJyZWFrOworCQkJY2FzZSAzNTogLyogTWFnZW50YSAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDM2OiAvKiBDeWFuICovCisJCQkJYXR0ciAmPSB+Rk9SRUdST1VORF9BTEw7CisJCQkJYXR0ciB8PSBGT1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9CTFVFOworCQkJCWJyZWFrOworCQkJY2FzZSAzNzogLyogV2hpdGUgKi8KKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfUkVEIHwKKwkJCQkJRk9SRUdST1VORF9HUkVFTiB8CisJCQkJCUZPUkVHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzg6IC8qIFVua25vd24gKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMzk6IC8qIHJlc2V0ICovCisJCQkJYXR0ciAmPSB+Rk9SRUdST1VORF9BTEw7CisJCQkJYXR0ciB8PSAocGxhaW5fYXR0ciAmIEZPUkVHUk9VTkRfQUxMKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDA6IC8qIEJsYWNrICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYnJlYWs7CisJCQljYXNlIDQxOiAvKiBSZWQgKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEJBQ0tHUk9VTkRfUkVEOworCQkJCWJyZWFrOworCQkJY2FzZSA0MjogLyogR3JlZW4gKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEJBQ0tHUk9VTkRfR1JFRU47CisJCQkJYnJlYWs7CisJCQljYXNlIDQzOiAvKiBZZWxsb3cgKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEJBQ0tHUk9VTkRfUkVEIHwgQkFDS0dST1VORF9HUkVFTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDQ6IC8qIEJsdWUgKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEJBQ0tHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDU6IC8qIE1hZ2VudGEgKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEJBQ0tHUk9VTkRfUkVEIHwgQkFDS0dST1VORF9CTFVFOworCQkJCWJyZWFrOworCQkJY2FzZSA0NjogLyogQ3lhbiAqLworCQkJCWF0dHIgJj0gfkJBQ0tHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gQkFDS0dST1VORF9HUkVFTiB8IEJBQ0tHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDc6IC8qIFdoaXRlICovCisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX1JFRCB8CisJCQkJCUJBQ0tHUk9VTkRfR1JFRU4gfAorCQkJCQlCQUNLR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ4OiAvKiBVbmtub3duICovCisJCQkJYnJlYWs7CisJCQljYXNlIDQ5OiAvKiByZXNldCAqLworCQkJCWF0dHIgJj0gfkJBQ0tHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gKHBsYWluX2F0dHIgJiBCQUNLR1JPVU5EX0FMTCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIFVuc3VwcG9ydGVkIGNvZGUgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCXN0cisrOworCQl9IHdoaWxlICgqKHN0ci0xKSA9PSAnOycpOworCisJCXNldF9jb25zb2xlX2F0dHIoKTsKKwkJYnJlYWs7CisJY2FzZSAnSyc6CisJCWVyYXNlX2luX2xpbmUoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVW5zdXBwb3J0ZWQgY29kZSAqLworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZnVuYyArIDE7Cit9CisKK3N0YXRpYyBpbnQgYW5zaV9lbXVsYXRlKGNvbnN0IGNoYXIgKnN0ciwgRklMRSAqc3RyZWFtKQoreworCWludCBydiA9IDA7CisJY29uc3QgY2hhciAqcG9zID0gc3RyOworCisJd2hpbGUgKCpwb3MpIHsKKwkJcG9zID0gc3Ryc3RyKHN0ciwgIlwwMzNbIik7CisJCWlmIChwb3MpIHsKKwkJCXNpemVfdCBsZW4gPSBwb3MgLSBzdHI7CisKKwkJCWlmIChsZW4pIHsKKwkJCQlzaXplX3Qgb3V0X2xlbiA9IGZ3cml0ZShzdHIsIDEsIGxlbiwgc3RyZWFtKTsKKwkJCQlydiArPSBvdXRfbGVuOworCQkJCWlmIChvdXRfbGVuIDwgbGVuKQorCQkJCQlyZXR1cm4gcnY7CisJCQl9CisKKwkJCXN0ciA9IHBvcyArIDI7CisJCQlydiArPSAyOworCisJCQlmZmx1c2goc3RyZWFtKTsKKworCQkJcG9zID0gc2V0X2F0dHIoc3RyKTsKKwkJCXJ2ICs9IHBvcyAtIHN0cjsKKwkJCXN0ciA9IHBvczsKKwkJfSBlbHNlIHsKKwkJCXJ2ICs9IHN0cmxlbihzdHIpOworCQkJZnB1dHMoc3RyLCBzdHJlYW0pOworCQkJcmV0dXJuIHJ2OworCQl9CisJfQorCXJldHVybiBydjsKK30KKworaW50IHdpbmFuc2lfZnB1dHMoY29uc3QgY2hhciAqc3RyLCBGSUxFICpzdHJlYW0pCit7CisJaW50IHJ2OworCisJaWYgKCFpc2F0dHkoZmlsZW5vKHN0cmVhbSkpKQorCQlyZXR1cm4gZnB1dHMoc3RyLCBzdHJlYW0pOworCisJaW5pdCgpOworCisJaWYgKCFjb25zb2xlKQorCQlyZXR1cm4gZnB1dHMoc3RyLCBzdHJlYW0pOworCisJcnYgPSBhbnNpX2VtdWxhdGUoc3RyLCBzdHJlYW0pOworCisJaWYgKHJ2ID49IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIEVPRjsKK30KKworc3RhdGljIGludCB3aW5hbnNpX3ZmcHJpbnRmKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGxpc3QpCit7CisJaW50IGxlbiwgcnY7CisJY2hhciBzbWFsbF9idWZbMjU2XTsKKwljaGFyICpidWYgPSBzbWFsbF9idWY7CisJdmFfbGlzdCBjcDsKKworCWlmICghaXNhdHR5KGZpbGVubyhzdHJlYW0pKSkKKwkJZ290byBhYm9ydDsKKworCWluaXQoKTsKKworCWlmICghY29uc29sZSkKKwkJZ290byBhYm9ydDsKKworCXZhX2NvcHkoY3AsIGxpc3QpOworCWxlbiA9IHZzbnByaW50ZihzbWFsbF9idWYsIHNpemVvZihzbWFsbF9idWYpLCBmb3JtYXQsIGNwKTsKKwl2YV9lbmQoY3ApOworCisJaWYgKGxlbiA+IHNpemVvZihzbWFsbF9idWYpIC0gMSkgeworCQlidWYgPSBtYWxsb2MobGVuICsgMSk7CisJCWlmICghYnVmKQorCQkJZ290byBhYm9ydDsKKworCQlsZW4gPSB2c25wcmludGYoYnVmLCBsZW4gKyAxLCBmb3JtYXQsIGxpc3QpOworCX0KKworCXJ2ID0gYW5zaV9lbXVsYXRlKGJ1Ziwgc3RyZWFtKTsKKworCWlmIChidWYgIT0gc21hbGxfYnVmKQorCQlmcmVlKGJ1Zik7CisJcmV0dXJuIHJ2OworCithYm9ydDoKKwlydiA9IHZmcHJpbnRmKHN0cmVhbSwgZm9ybWF0LCBsaXN0KTsKKwlyZXR1cm4gcnY7Cit9CisKK2ludCB3aW5hbnNpX2ZwcmludGYoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGxpc3Q7CisJaW50IHJ2OworCisJdmFfc3RhcnQobGlzdCwgZm9ybWF0KTsKKwlydiA9IHdpbmFuc2lfdmZwcmludGYoc3RyZWFtLCBmb3JtYXQsIGxpc3QpOworCXZhX2VuZChsaXN0KTsKKworCXJldHVybiBydjsKK30KKworaW50IHdpbmFuc2lfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgbGlzdDsKKwlpbnQgcnY7CisKKwl2YV9zdGFydChsaXN0LCBmb3JtYXQpOworCXJ2ID0gd2luYW5zaV92ZnByaW50ZihzdGRvdXQsIGZvcm1hdCwgbGlzdCk7CisJdmFfZW5kKGxpc3QpOworCisJcmV0dXJuIHJ2OworfQpkaWZmIC0tZ2l0IGEvY29uZmlnLmMgYi9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGU0N2UyCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnLmMKQEAgLTAsMCArMSwxNjY2IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICogQ29weXJpZ2h0IChDKSBKb2hhbm5lcyBTY2hpbmRlbGluLCAyMDA1CisgKgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisKKyNkZWZpbmUgTUFYTkFNRSAoMjU2KQorCit0eXBlZGVmIHN0cnVjdCBjb25maWdfZmlsZSB7CisJc3RydWN0IGNvbmZpZ19maWxlICpwcmV2OworCUZJTEUgKmY7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbGluZW5yOworCWludCBlb2Y7CisJc3RydWN0IHN0cmJ1ZiB2YWx1ZTsKKwljaGFyIHZhcltNQVhOQU1FXTsKK30gY29uZmlnX2ZpbGU7CisKK3N0YXRpYyBjb25maWdfZmlsZSAqY2Y7CisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc2lvbl9zZWVuOworCisjZGVmaW5lIE1BWF9JTkNMVURFX0RFUFRIIDEwCitzdGF0aWMgY29uc3QgY2hhciBpbmNsdWRlX2RlcHRoX2FkdmljZVtdID0KKyJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGggKCVkKSB3aGlsZSBpbmNsdWRpbmdcbiIKKyIJJXNcbiIKKyJmcm9tXG4iCisiCSVzXG4iCisiRG8geW91IGhhdmUgY2lyY3VsYXIgaW5jbHVkZXM/IjsKK3N0YXRpYyBpbnQgaGFuZGxlX3BhdGhfaW5jbHVkZShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSAqaW5jKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqZXhwYW5kZWQgPSBleHBhbmRfdXNlcl9wYXRoKHBhdGgpOworCisJaWYgKCFleHBhbmRlZCkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgZXhwYW5kIGluY2x1ZGUgcGF0aCAnJXMnIiwgcGF0aCk7CisJcGF0aCA9IGV4cGFuZGVkOworCisJLyoKKwkgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCBhcy1pcywgYnV0IGludGVycHJldCByZWxhdGl2ZSBwYXRocworCSAqIGJhc2VkIG9uIHRoZSBpbmNsdWRpbmcgY29uZmlnIGZpbGUuCisJICovCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKSB7CisJCWNoYXIgKnNsYXNoOworCisJCWlmICghY2YgfHwgIWNmLT5uYW1lKQorCQkJcmV0dXJuIGVycm9yKCJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZXMgbXVzdCBjb21lIGZyb20gZmlsZXMiKTsKKworCQlzbGFzaCA9IGZpbmRfbGFzdF9kaXJfc2VwKGNmLT5uYW1lKTsKKwkJaWYgKHNsYXNoKQorCQkJc3RyYnVmX2FkZCgmYnVmLCBjZi0+bmFtZSwgc2xhc2ggLSBjZi0+bmFtZSArIDEpOworCQlzdHJidWZfYWRkc3RyKCZidWYsIHBhdGgpOworCQlwYXRoID0gYnVmLmJ1ZjsKKwl9CisKKwlpZiAoIWFjY2Vzc19vcl93YXJuKHBhdGgsIFJfT0spKSB7CisJCWlmICgrK2luYy0+ZGVwdGggPiBNQVhfSU5DTFVERV9ERVBUSCkKKwkJCWRpZShpbmNsdWRlX2RlcHRoX2FkdmljZSwgTUFYX0lOQ0xVREVfREVQVEgsIHBhdGgsCisJCQkgICAgY2YgJiYgY2YtPm5hbWUgPyBjZi0+bmFtZSA6ICJ0aGUgY29tbWFuZCBsaW5lIik7CisJCXJldCA9IGdpdF9jb25maWdfZnJvbV9maWxlKGdpdF9jb25maWdfaW5jbHVkZSwgcGF0aCwgaW5jKTsKKwkJaW5jLT5kZXB0aC0tOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlmcmVlKGV4cGFuZGVkKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ2l0X2NvbmZpZ19pbmNsdWRlKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgKmluYyA9IGRhdGE7CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBQYXNzIGFsb25nIGFsbCB2YWx1ZXMsIGluY2x1ZGluZyAiaW5jbHVkZSIgZGlyZWN0aXZlczsgdGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIHF1ZXJ5IGluZm9ybWF0aW9uIG9uIHRoZSBpbmNsdWRlcyB0aGVtc2VsdmVzLgorCSAqLworCXJldCA9IGluYy0+Zm4odmFyLCB2YWx1ZSwgaW5jLT5kYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXR5cGUgPSBza2lwX3ByZWZpeCh2YXIsICJpbmNsdWRlLiIpOworCWlmICghdHlwZSkKKwkJcmV0dXJuIHJldDsKKworCWlmICghc3RyY21wKHR5cGUsICJwYXRoIikpCisJCXJldCA9IGhhbmRsZV9wYXRoX2luY2x1ZGUodmFsdWUsIGluYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbG93ZXJjYXNlKGNoYXIgKnApCit7CisJZm9yICg7ICpwOyBwKyspCisJCSpwID0gdG9sb3dlcigqcCk7Cit9CisKK3ZvaWQgZ2l0X2NvbmZpZ19wdXNoX3BhcmFtZXRlcihjb25zdCBjaGFyICp0ZXh0KQoreworCXN0cnVjdCBzdHJidWYgZW52ID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqb2xkID0gZ2V0ZW52KENPTkZJR19EQVRBX0VOVklST05NRU5UKTsKKwlpZiAob2xkKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmVudiwgb2xkKTsKKwkJc3RyYnVmX2FkZGNoKCZlbnYsICcgJyk7CisJfQorCXNxX3F1b3RlX2J1ZigmZW52LCB0ZXh0KTsKKwlzZXRlbnYoQ09ORklHX0RBVEFfRU5WSVJPTk1FTlQsIGVudi5idWYsIDEpOworCXN0cmJ1Zl9yZWxlYXNlKCZlbnYpOworfQorCitpbnQgZ2l0X2NvbmZpZ19wYXJzZV9wYXJhbWV0ZXIoY29uc3QgY2hhciAqdGV4dCwKKwkJCSAgICAgICBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICoqcGFpcjsKKwlwYWlyID0gc3RyYnVmX3NwbGl0X3N0cih0ZXh0LCAnPScsIDIpOworCWlmICghcGFpclswXSkKKwkJcmV0dXJuIGVycm9yKCJib2d1cyBjb25maWcgcGFyYW1ldGVyOiAlcyIsIHRleHQpOworCWlmIChwYWlyWzBdLT5sZW4gJiYgcGFpclswXS0+YnVmW3BhaXJbMF0tPmxlbiAtIDFdID09ICc9JykKKwkJc3RyYnVmX3NldGxlbihwYWlyWzBdLCBwYWlyWzBdLT5sZW4gLSAxKTsKKwlzdHJidWZfdHJpbShwYWlyWzBdKTsKKwlpZiAoIXBhaXJbMF0tPmxlbikgeworCQlzdHJidWZfbGlzdF9mcmVlKHBhaXIpOworCQlyZXR1cm4gZXJyb3IoImJvZ3VzIGNvbmZpZyBwYXJhbWV0ZXI6ICVzIiwgdGV4dCk7CisJfQorCWxvd2VyY2FzZShwYWlyWzBdLT5idWYpOworCWlmIChmbihwYWlyWzBdLT5idWYsIHBhaXJbMV0gPyBwYWlyWzFdLT5idWYgOiBOVUxMLCBkYXRhKSA8IDApIHsKKwkJc3RyYnVmX2xpc3RfZnJlZShwYWlyKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfbGlzdF9mcmVlKHBhaXIpOworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbmZpZ19mcm9tX3BhcmFtZXRlcnMoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCit7CisJY29uc3QgY2hhciAqZW52ID0gZ2V0ZW52KENPTkZJR19EQVRBX0VOVklST05NRU5UKTsKKwljaGFyICplbnZ3OworCWNvbnN0IGNoYXIgKiphcmd2ID0gTlVMTDsKKwlpbnQgbnIgPSAwLCBhbGxvYyA9IDA7CisJaW50IGk7CisKKwlpZiAoIWVudikKKwkJcmV0dXJuIDA7CisJLyogc3FfZGVxdW90ZSB3aWxsIHdyaXRlIG92ZXIgaXQgKi8KKwllbnZ3ID0geHN0cmR1cChlbnYpOworCisJaWYgKHNxX2RlcXVvdGVfdG9fYXJndihlbnZ3LCAmYXJndiwgJm5yLCAmYWxsb2MpIDwgMCkgeworCQlmcmVlKGVudncpOworCQlyZXR1cm4gZXJyb3IoImJvZ3VzIGZvcm1hdCBpbiAiIENPTkZJR19EQVRBX0VOVklST05NRU5UKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlpZiAoZ2l0X2NvbmZpZ19wYXJzZV9wYXJhbWV0ZXIoYXJndltpXSwgZm4sIGRhdGEpIDwgMCkgeworCQkJZnJlZShhcmd2KTsKKwkJCWZyZWUoZW52dyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlmcmVlKGFyZ3YpOworCWZyZWUoZW52dyk7CisJcmV0dXJuIG5yID4gMDsKK30KKworc3RhdGljIGludCBnZXRfbmV4dF9jaGFyKHZvaWQpCit7CisJaW50IGM7CisJRklMRSAqZjsKKworCWMgPSAnXG4nOworCWlmIChjZiAmJiAoKGYgPSBjZi0+ZikgIT0gTlVMTCkpIHsKKwkJYyA9IGZnZXRjKGYpOworCQlpZiAoYyA9PSAnXHInKSB7CisJCQkvKiBET1MgbGlrZSBzeXN0ZW1zICovCisJCQljID0gZmdldGMoZik7CisJCQlpZiAoYyAhPSAnXG4nKSB7CisJCQkJdW5nZXRjKGMsIGYpOworCQkJCWMgPSAnXHInOworCQkJfQorCQl9CisJCWlmIChjID09ICdcbicpCisJCQljZi0+bGluZW5yKys7CisJCWlmIChjID09IEVPRikgeworCQkJY2YtPmVvZiA9IDE7CisJCQljID0gJ1xuJzsKKwkJfQorCX0KKwlyZXR1cm4gYzsKK30KKworc3RhdGljIGNoYXIgKnBhcnNlX3ZhbHVlKHZvaWQpCit7CisJaW50IHF1b3RlID0gMCwgY29tbWVudCA9IDAsIHNwYWNlID0gMDsKKworCXN0cmJ1Zl9yZXNldCgmY2YtPnZhbHVlKTsKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAoYyA9PSAnXG4nKSB7CisJCQlpZiAocXVvdGUpIHsKKwkJCQljZi0+bGluZW5yLS07CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlyZXR1cm4gY2YtPnZhbHVlLmJ1ZjsKKwkJfQorCQlpZiAoY29tbWVudCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNzcGFjZShjKSAmJiAhcXVvdGUpIHsKKwkJCWlmIChjZi0+dmFsdWUubGVuKQorCQkJCXNwYWNlKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXF1b3RlKSB7CisJCQlpZiAoYyA9PSAnOycgfHwgYyA9PSAnIycpIHsKKwkJCQljb21tZW50ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlmb3IgKDsgc3BhY2U7IHNwYWNlLS0pCisJCQlzdHJidWZfYWRkY2goJmNmLT52YWx1ZSwgJyAnKTsKKwkJaWYgKGMgPT0gJ1xcJykgeworCQkJYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnXG4nOgorCQkJCWNvbnRpbnVlOworCQkJY2FzZSAndCc6CisJCQkJYyA9ICdcdCc7CisJCQkJYnJlYWs7CisJCQljYXNlICdiJzoKKwkJCQljID0gJ1xiJzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCWMgPSAnXG4nOworCQkJCWJyZWFrOworCQkJLyogU29tZSBjaGFyYWN0ZXJzIGVzY2FwZSBhcyB0aGVtc2VsdmVzICovCisJCQljYXNlICdcXCc6IGNhc2UgJyInOgorCQkJCWJyZWFrOworCQkJLyogUmVqZWN0IHVua25vd24gZXNjYXBlIHNlcXVlbmNlcyAqLworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCXN0cmJ1Zl9hZGRjaCgmY2YtPnZhbHVlLCBjKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09ICciJykgeworCQkJcXVvdGUgPSAxLXF1b3RlOworCQkJY29udGludWU7CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZjZi0+dmFsdWUsIGMpOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgaXNrZXljaGFyKGludCBjKQoreworCXJldHVybiBpc2FsbnVtKGMpIHx8IGMgPT0gJy0nOworfQorCitzdGF0aWMgaW50IGdldF92YWx1ZShjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSwgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgYzsKKwljaGFyICp2YWx1ZTsKKworCS8qIEdldCB0aGUgZnVsbCBuYW1lICovCisJZm9yICg7OykgeworCQljID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAoY2YtPmVvZikKKwkJCWJyZWFrOworCQlpZiAoIWlza2V5Y2hhcihjKSkKKwkJCWJyZWFrOworCQluYW1lW2xlbisrXSA9IHRvbG93ZXIoYyk7CisJCWlmIChsZW4gPj0gTUFYTkFNRSkKKwkJCXJldHVybiAtMTsKKwl9CisJbmFtZVtsZW5dID0gMDsKKwl3aGlsZSAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorCQljID0gZ2V0X25leHRfY2hhcigpOworCisJdmFsdWUgPSBOVUxMOworCWlmIChjICE9ICdcbicpIHsKKwkJaWYgKGMgIT0gJz0nKQorCQkJcmV0dXJuIC0xOworCQl2YWx1ZSA9IHBhcnNlX3ZhbHVlKCk7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBmbihuYW1lLCB2YWx1ZSwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2V4dGVuZGVkX2Jhc2VfdmFyKGNoYXIgKm5hbWUsIGludCBiYXNlbGVuLCBpbnQgYykKK3sKKwlkbyB7CisJCWlmIChjID09ICdcbicpCisJCQlnb3RvIGVycm9yX2luY29tcGxldGVfbGluZTsKKwkJYyA9IGdldF9uZXh0X2NoYXIoKTsKKwl9IHdoaWxlIChpc3NwYWNlKGMpKTsKKworCS8qIFdlIHJlcXVpcmUgdGhlIGZvcm1hdCB0byBiZSAnW2Jhc2UgImV4dGVuc2lvbiJdJyAqLworCWlmIChjICE9ICciJykKKwkJcmV0dXJuIC0xOworCW5hbWVbYmFzZWxlbisrXSA9ICcuJzsKKworCWZvciAoOzspIHsKKwkJaW50IGMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCWlmIChjID09ICdcbicpCisJCQlnb3RvIGVycm9yX2luY29tcGxldGVfbGluZTsKKwkJaWYgKGMgPT0gJyInKQorCQkJYnJlYWs7CisJCWlmIChjID09ICdcXCcpIHsKKwkJCWMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCQlpZiAoYyA9PSAnXG4nKQorCQkJCWdvdG8gZXJyb3JfaW5jb21wbGV0ZV9saW5lOworCQl9CisJCW5hbWVbYmFzZWxlbisrXSA9IGM7CisJCWlmIChiYXNlbGVuID4gTUFYTkFNRSAvIDIpCisJCQlyZXR1cm4gLTE7CisJfQorCisJLyogRmluYWwgJ10nICovCisJaWYgKGdldF9uZXh0X2NoYXIoKSAhPSAnXScpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gYmFzZWxlbjsKK2Vycm9yX2luY29tcGxldGVfbGluZToKKwljZi0+bGluZW5yLS07CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9iYXNlX3ZhcihjaGFyICpuYW1lKQoreworCWludCBiYXNlbGVuID0gMDsKKworCWZvciAoOzspIHsKKwkJaW50IGMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCWlmIChjZi0+ZW9mKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYyA9PSAnXScpCisJCQlyZXR1cm4gYmFzZWxlbjsKKwkJaWYgKGlzc3BhY2UoYykpCisJCQlyZXR1cm4gZ2V0X2V4dGVuZGVkX2Jhc2VfdmFyKG5hbWUsIGJhc2VsZW4sIGMpOworCQlpZiAoIWlza2V5Y2hhcihjKSAmJiBjICE9ICcuJykKKwkJCXJldHVybiAtMTsKKwkJaWYgKGJhc2VsZW4gPiBNQVhOQU1FIC8gMikKKwkJCXJldHVybiAtMTsKKwkJbmFtZVtiYXNlbGVuKytdID0gdG9sb3dlcihjKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3BhcnNlX2ZpbGUoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCit7CisJaW50IGNvbW1lbnQgPSAwOworCWludCBiYXNlbGVuID0gMDsKKwljaGFyICp2YXIgPSBjZi0+dmFyOworCisJLyogVStGRUZGIEJ5dGUgT3JkZXIgTWFyayBpbiBVVEY4ICovCisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnV0ZjhfYm9tID0gKHVuc2lnbmVkIGNoYXIgKikgIlx4ZWZceGJiXHhiZiI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYm9tcHRyID0gdXRmOF9ib207CisKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAoYm9tcHRyICYmICpib21wdHIpIHsKKwkJCS8qIFdlIGFyZSBhdCB0aGUgZmlsZSBiZWdpbm5pbmc7IHNraXAgVVRGOC1lbmNvZGVkIEJPTQorCQkJICogaWYgcHJlc2VudC4gU2FuZSBlZGl0b3JzIHdvbid0IHB1dCB0aGlzIGluIG9uIHRoZWlyCisJCQkgKiBvd24sIGJ1dCBlLmcuIFdpbmRvd3MgTm90ZXBhZCB3aWxsIGRvIGl0IGhhcHBpbHkuICovCisJCQlpZiAoKHVuc2lnbmVkIGNoYXIpIGMgPT0gKmJvbXB0cikgeworCQkJCWJvbXB0cisrOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQkvKiBEbyBub3QgdG9sZXJhdGUgcGFydGlhbCBCT00uICovCisJCQkJaWYgKGJvbXB0ciAhPSB1dGY4X2JvbSkKKwkJCQkJYnJlYWs7CisJCQkJLyogTm8gQk9NIGF0IGZpbGUgYmVnaW5uaW5nLiBDb29sLiAqLworCQkJCWJvbXB0ciA9IE5VTEw7CisJCQl9CisJCX0KKwkJaWYgKGMgPT0gJ1xuJykgeworCQkJaWYgKGNmLT5lb2YpCisJCQkJcmV0dXJuIDA7CisJCQljb21tZW50ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjb21tZW50IHx8IGlzc3BhY2UoYykpCisJCQljb250aW51ZTsKKwkJaWYgKGMgPT0gJyMnIHx8IGMgPT0gJzsnKSB7CisJCQljb21tZW50ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09ICdbJykgeworCQkJYmFzZWxlbiA9IGdldF9iYXNlX3Zhcih2YXIpOworCQkJaWYgKGJhc2VsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCXZhcltiYXNlbGVuKytdID0gJy4nOworCQkJdmFyW2Jhc2VsZW5dID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghaXNhbHBoYShjKSkKKwkJCWJyZWFrOworCQl2YXJbYmFzZWxlbl0gPSB0b2xvd2VyKGMpOworCQlpZiAoZ2V0X3ZhbHVlKGZuLCBkYXRhLCB2YXIsIGJhc2VsZW4rMSkgPCAwKQorCQkJYnJlYWs7CisJfQorCWRpZSgiYmFkIGNvbmZpZyBmaWxlIGxpbmUgJWQgaW4gJXMiLCBjZi0+bGluZW5yLCBjZi0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfdW5pdF9mYWN0b3IoY29uc3QgY2hhciAqZW5kLCB1aW50bWF4X3QgKnZhbCkKK3sKKwlpZiAoISplbmQpCisJCXJldHVybiAxOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGVuZCwgImsiKSkgeworCQkqdmFsICo9IDEwMjQ7CisJCXJldHVybiAxOworCX0KKwllbHNlIGlmICghc3RyY2FzZWNtcChlbmQsICJtIikpIHsKKwkJKnZhbCAqPSAxMDI0ICogMTAyNDsKKwkJcmV0dXJuIDE7CisJfQorCWVsc2UgaWYgKCFzdHJjYXNlY21wKGVuZCwgImciKSkgeworCQkqdmFsICo9IDEwMjQgKiAxMDI0ICogMTAyNDsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9wYXJzZV9sb25nKGNvbnN0IGNoYXIgKnZhbHVlLCBsb25nICpyZXQpCit7CisJaWYgKHZhbHVlICYmICp2YWx1ZSkgeworCQljaGFyICplbmQ7CisJCWludG1heF90IHZhbDsKKwkJdWludG1heF90IHV2YWw7CisJCXVpbnRtYXhfdCBmYWN0b3IgPSAxOworCisJCWVycm5vID0gMDsKKwkJdmFsID0gc3RydG9pbWF4KHZhbHVlLCAmZW5kLCAwKTsKKwkJaWYgKGVycm5vID09IEVSQU5HRSkKKwkJCXJldHVybiAwOworCQlpZiAoIXBhcnNlX3VuaXRfZmFjdG9yKGVuZCwgJmZhY3RvcikpCisJCQlyZXR1cm4gMDsKKwkJdXZhbCA9IGFicyh2YWwpOworCQl1dmFsICo9IGZhY3RvcjsKKwkJaWYgKCh1dmFsID4gbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShsb25nKSkgfHwKKwkJICAgIChhYnModmFsKSA+IHV2YWwpKQorCQkJcmV0dXJuIDA7CisJCXZhbCAqPSBmYWN0b3I7CisJCSpyZXQgPSB2YWw7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9wYXJzZV91bG9uZyhjb25zdCBjaGFyICp2YWx1ZSwgdW5zaWduZWQgbG9uZyAqcmV0KQoreworCWlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKwkJY2hhciAqZW5kOworCQl1aW50bWF4X3QgdmFsOworCQl1aW50bWF4X3Qgb2xkdmFsOworCisJCWVycm5vID0gMDsKKwkJdmFsID0gc3RydG91bWF4KHZhbHVlLCAmZW5kLCAwKTsKKwkJaWYgKGVycm5vID09IEVSQU5HRSkKKwkJCXJldHVybiAwOworCQlvbGR2YWwgPSB2YWw7CisJCWlmICghcGFyc2VfdW5pdF9mYWN0b3IoZW5kLCAmdmFsKSkKKwkJCXJldHVybiAwOworCQlpZiAoKHZhbCA+IG1heGltdW1fdW5zaWduZWRfdmFsdWVfb2ZfdHlwZShsb25nKSkgfHwKKwkJICAgIChvbGR2YWwgPiB2YWwpKQorCQkJcmV0dXJuIDA7CisJCSpyZXQgPSB2YWw7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGllX2JhZF9jb25maWcoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoY2YgJiYgY2YtPm5hbWUpCisJCWRpZSgiYmFkIGNvbmZpZyB2YWx1ZSBmb3IgJyVzJyBpbiAlcyIsIG5hbWUsIGNmLT5uYW1lKTsKKwlkaWUoImJhZCBjb25maWcgdmFsdWUgZm9yICclcyciLCBuYW1lKTsKK30KKworaW50IGdpdF9jb25maWdfaW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWxvbmcgcmV0ID0gMDsKKwlpZiAoIWdpdF9wYXJzZV9sb25nKHZhbHVlLCAmcmV0KSkKKwkJZGllX2JhZF9jb25maWcobmFtZSk7CisJcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgbG9uZyBnaXRfY29uZmlnX3Vsb25nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCWlmICghZ2l0X3BhcnNlX3Vsb25nKHZhbHVlLCAmcmV0KSkKKwkJZGllX2JhZF9jb25maWcobmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnaXRfY29uZmlnX21heWJlX2Jvb2xfdGV4dChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gMTsKKwlpZiAoISp2YWx1ZSkKKwkJcmV0dXJuIDA7CisJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAidHJ1ZSIpCisJICAgIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAieWVzIikKKwkgICAgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJvbiIpKQorCQlyZXR1cm4gMTsKKwlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJmYWxzZSIpCisJICAgIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAibm8iKQorCSAgICB8fCAhc3RyY2FzZWNtcCh2YWx1ZSwgIm9mZiIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBnaXRfY29uZmlnX21heWJlX2Jvb2woY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJbG9uZyB2ID0gZ2l0X2NvbmZpZ19tYXliZV9ib29sX3RleHQobmFtZSwgdmFsdWUpOworCWlmICgwIDw9IHYpCisJCXJldHVybiB2OworCWlmIChnaXRfcGFyc2VfbG9uZyh2YWx1ZSwgJnYpKQorCQlyZXR1cm4gISF2OworCXJldHVybiAtMTsKK30KKworaW50IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIGludCAqaXNfYm9vbCkKK3sKKwlpbnQgdiA9IGdpdF9jb25maWdfbWF5YmVfYm9vbF90ZXh0KG5hbWUsIHZhbHVlKTsKKwlpZiAoMCA8PSB2KSB7CisJCSppc19ib29sID0gMTsKKwkJcmV0dXJuIHY7CisJfQorCSppc19ib29sID0gMDsKKwlyZXR1cm4gZ2l0X2NvbmZpZ19pbnQobmFtZSwgdmFsdWUpOworfQorCitpbnQgZ2l0X2NvbmZpZ19ib29sKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBkaXNjYXJkOworCXJldHVybiAhIWdpdF9jb25maWdfYm9vbF9vcl9pbnQobmFtZSwgdmFsdWUsICZkaXNjYXJkKTsKK30KKworaW50IGdpdF9jb25maWdfc3RyaW5nKGNvbnN0IGNoYXIgKipkZXN0LCBjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCSpkZXN0ID0geHN0cmR1cCh2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29uZmlnX3BhdGhuYW1lKGNvbnN0IGNoYXIgKipkZXN0LCBjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCSpkZXN0ID0gZXhwYW5kX3VzZXJfcGF0aCh2YWx1ZSk7CisJaWYgKCEqZGVzdCkKKwkJZGllKCJGYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIiwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9kZWZhdWx0X2NvcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJLyogVGhpcyBuZWVkcyBhIGJldHRlciBuYW1lICovCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5maWxlbW9kZSIpKSB7CisJCXRydXN0X2V4ZWN1dGFibGVfYml0ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS50cnVzdGN0aW1lIikpIHsKKwkJdHJ1c3RfY3RpbWUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucXVvdGVwYXRoIikpIHsKKwkJcXVvdGVfcGF0aF9mdWxseSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5zeW1saW5rcyIpKSB7CisJCWhhc19zeW1saW5rcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5pZ25vcmVjYXNlIikpIHsKKwkJaWdub3JlX2Nhc2UgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuYXR0cmlidXRlc2ZpbGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJmdpdF9hdHRyaWJ1dGVzX2ZpbGUsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5iYXJlIikpIHsKKwkJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5pZ25vcmVzdGF0IikpIHsKKwkJYXNzdW1lX3VuY2hhbmdlZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5wcmVmZXJzeW1saW5rcmVmcyIpKSB7CisJCXByZWZlcl9zeW1saW5rX3JlZnMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUubG9nYWxscmVmdXBkYXRlcyIpKSB7CisJCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUud2FybmFtYmlndW91c3JlZnMiKSkgeworCQl3YXJuX2FtYmlndW91c19yZWZzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmFiYnJldiIpKSB7CisJCWludCBhYmJyZXYgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJaWYgKGFiYnJldiA8IG1pbmltdW1fYWJicmV2IHx8IGFiYnJldiA+IDQwKQorCQkJcmV0dXJuIC0xOworCQlkZWZhdWx0X2FiYnJldiA9IGFiYnJldjsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5sb29zZWNvbXByZXNzaW9uIikpIHsKKwkJaW50IGxldmVsID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWlmIChsZXZlbCA9PSAtMSkKKwkJCWxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCQllbHNlIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBaX0JFU1RfQ09NUFJFU1NJT04pCisJCQlkaWUoImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIiwgbGV2ZWwpOworCQl6bGliX2NvbXByZXNzaW9uX2xldmVsID0gbGV2ZWw7CisJCXpsaWJfY29tcHJlc3Npb25fc2VlbiA9IDE7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuY29tcHJlc3Npb24iKSkgeworCQlpbnQgbGV2ZWwgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJaWYgKGxldmVsID09IC0xKQorCQkJbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisJCWVsc2UgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IFpfQkVTVF9DT01QUkVTU0lPTikKKwkJCWRpZSgiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiLCBsZXZlbCk7CisJCWNvcmVfY29tcHJlc3Npb25fbGV2ZWwgPSBsZXZlbDsKKwkJY29yZV9jb21wcmVzc2lvbl9zZWVuID0gMTsKKwkJaWYgKCF6bGliX2NvbXByZXNzaW9uX3NlZW4pCisJCQl6bGliX2NvbXByZXNzaW9uX2xldmVsID0gbGV2ZWw7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucGFja2VkZ2l0d2luZG93c2l6ZSIpKSB7CisJCWludCBwZ3N6X3gyID0gZ2V0cGFnZXNpemUoKSAqIDI7CisJCXBhY2tlZF9naXRfd2luZG93X3NpemUgPSBnaXRfY29uZmlnX3Vsb25nKHZhciwgdmFsdWUpOworCisJCS8qIFRoaXMgdmFsdWUgbXVzdCBiZSBtdWx0aXBsZSBvZiAocGFnZXNpemUgKiAyKSAqLworCQlwYWNrZWRfZ2l0X3dpbmRvd19zaXplIC89IHBnc3pfeDI7CisJCWlmIChwYWNrZWRfZ2l0X3dpbmRvd19zaXplIDwgMSkKKwkJCXBhY2tlZF9naXRfd2luZG93X3NpemUgPSAxOworCQlwYWNrZWRfZ2l0X3dpbmRvd19zaXplICo9IHBnc3pfeDI7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuYmlnZmlsZXRocmVzaG9sZCIpKSB7CisJCWJpZ19maWxlX3RocmVzaG9sZCA9IGdpdF9jb25maWdfdWxvbmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucGFja2VkZ2l0bGltaXQiKSkgeworCQlwYWNrZWRfZ2l0X2xpbWl0ID0gZ2l0X2NvbmZpZ191bG9uZyh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5kZWx0YWJhc2VjYWNoZWxpbWl0IikpIHsKKwkJZGVsdGFfYmFzZV9jYWNoZV9saW1pdCA9IGdpdF9jb25maWdfdWxvbmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUubG9ncGFja2FjY2VzcyIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmxvZ19wYWNrX2FjY2VzcywgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmF1dG9jcmxmIikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiaW5wdXQiKSkgeworCQkJaWYgKGNvcmVfZW9sID09IEVPTF9DUkxGKQorCQkJCXJldHVybiBlcnJvcigiY29yZS5hdXRvY3JsZj1pbnB1dCBjb25mbGljdHMgd2l0aCBjb3JlLmVvbD1jcmxmIik7CisJCQlhdXRvX2NybGYgPSBBVVRPX0NSTEZfSU5QVVQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlhdXRvX2NybGYgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuc2FmZWNybGYiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJ3YXJuIikpIHsKKwkJCXNhZmVfY3JsZiA9IFNBRkVfQ1JMRl9XQVJOOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc2FmZV9jcmxmID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmVvbCIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImxmIikpCisJCQljb3JlX2VvbCA9IEVPTF9MRjsKKwkJZWxzZSBpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJjcmxmIikpCisJCQljb3JlX2VvbCA9IEVPTF9DUkxGOworCQllbHNlIGlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgIm5hdGl2ZSIpKQorCQkJY29yZV9lb2wgPSBFT0xfTkFUSVZFOworCQllbHNlCisJCQljb3JlX2VvbCA9IEVPTF9VTlNFVDsKKwkJaWYgKGNvcmVfZW9sID09IEVPTF9DUkxGICYmIGF1dG9fY3JsZiA9PSBBVVRPX0NSTEZfSU5QVVQpCisJCQlyZXR1cm4gZXJyb3IoImNvcmUuYXV0b2NybGY9aW5wdXQgY29uZmxpY3RzIHdpdGggY29yZS5lb2w9Y3JsZiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLm5vdGVzcmVmIikpIHsKKwkJbm90ZXNfcmVmX25hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5wYWdlciIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnBhZ2VyX3Byb2dyYW0sIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5lZGl0b3IiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZlZGl0b3JfcHJvZ3JhbSwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmFza3Bhc3MiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZhc2twYXNzX3Byb2dyYW0sIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5leGNsdWRlc2ZpbGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJmV4Y2x1ZGVzX2ZpbGUsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS53aGl0ZXNwYWNlIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQl3aGl0ZXNwYWNlX3J1bGVfY2ZnID0gcGFyc2Vfd2hpdGVzcGFjZV9ydWxlKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5mc3luY29iamVjdGZpbGVzIikpIHsKKwkJZnN5bmNfb2JqZWN0X2ZpbGVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnByZWxvYWRpbmRleCIpKSB7CisJCWNvcmVfcHJlbG9hZF9pbmRleCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5jcmVhdGVvYmplY3QiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInJlbmFtZSIpKQorCQkJb2JqZWN0X2NyZWF0aW9uX21vZGUgPSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibGluayIpKQorCQkJb2JqZWN0X2NyZWF0aW9uX21vZGUgPSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19IQVJETElOS1M7CisJCWVsc2UKKwkJCWRpZSgiSW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIiwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnNwYXJzZWNoZWNrb3V0IikpIHsKKwkJY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucHJlY29tcG9zZXVuaWNvZGUiKSkgeworCQlwcmVjb21wb3NlZF91bmljb2RlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2RlZmF1bHRfaTE4bl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJpMThuLmNvbW1pdGVuY29kaW5nIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X2NvbW1pdF9lbmNvZGluZywgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJpMThuLmxvZ291dHB1dGVuY29kaW5nIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcsIHZhciwgdmFsdWUpOworCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9kZWZhdWx0X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJicmFuY2guYXV0b3NldHVwbWVyZ2UiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJhbHdheXMiKSkgeworCQkJZ2l0X2JyYW5jaF90cmFjayA9IEJSQU5DSF9UUkFDS19BTFdBWVM7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlnaXRfYnJhbmNoX3RyYWNrID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIm5ldmVyIikpCisJCQlhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9ORVZFUjsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImxvY2FsIikpCisJCQlhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9MT0NBTDsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInJlbW90ZSIpKQorCQkJYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfUkVNT1RFOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiYWx3YXlzIikpCisJCQlhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9BTFdBWVM7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcigiTWFsZm9ybWVkIHZhbHVlIGZvciAlcyIsIHZhcik7CisJCXJldHVybiAwOworCX0KKworCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfZGVmYXVsdF9wdXNoX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKHZhciwgInB1c2guZGVmYXVsdCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIm5vdGhpbmciKSkKKwkJCXB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9OT1RISU5HOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibWF0Y2hpbmciKSkKKwkJCXB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9NQVRDSElORzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInNpbXBsZSIpKQorCQkJcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX1NJTVBMRTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInVwc3RyZWFtIikpCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfVVBTVFJFQU07CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJ0cmFja2luZyIpKSAvKiBkZXByZWNhdGVkICovCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfVVBTVFJFQU07CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJjdXJyZW50IikpCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfQ1VSUkVOVDsKKwkJZWxzZSB7CisJCQllcnJvcigiTWFsZm9ybWVkIHZhbHVlIGZvciAlczogJXMiLCB2YXIsIHZhbHVlKTsKKwkJCXJldHVybiBlcnJvcigiTXVzdCBiZSBvbmUgb2Ygbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgIgorCQkJCSAgICAgInVwc3RyZWFtIG9yIGN1cnJlbnQuIik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9kZWZhdWx0X21haWxtYXBfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFyLCAibWFpbG1hcC5maWxlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X21haWxtYXBfZmlsZSwgdmFyLCB2YWx1ZSk7CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZHVtbXkpCit7CisJaWYgKCFwcmVmaXhjbXAodmFyLCAiY29yZS4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvcmVfY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKCFwcmVmaXhjbXAodmFyLCAidXNlci4iKSkKKwkJcmV0dXJuIGdpdF9pZGVudF9jb25maWcodmFyLCB2YWx1ZSwgZHVtbXkpOworCisJaWYgKCFwcmVmaXhjbXAodmFyLCAiaTE4bi4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2kxOG5fY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKCFwcmVmaXhjbXAodmFyLCAiYnJhbmNoLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfYnJhbmNoX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmICghcHJlZml4Y21wKHZhciwgInB1c2guIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9wdXNoX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmICghcHJlZml4Y21wKHZhciwgIm1haWxtYXAuIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9tYWlsbWFwX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmICghcHJlZml4Y21wKHZhciwgImFkdmljZS4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2FkdmljZV9jb25maWcodmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJwYWdlci5jb2xvciIpIHx8ICFzdHJjbXAodmFyLCAiY29sb3IucGFnZXIiKSkgeworCQlwYWdlcl91c2VfY29sb3IgPSBnaXRfY29uZmlnX2Jvb2wodmFyLHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAicGFjay5wYWNrc2l6ZWxpbWl0IikpIHsKKwkJcGFja19zaXplX2xpbWl0X2NmZyA9IGdpdF9jb25maWdfdWxvbmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29uZmlnX2Zyb21fZmlsZShjb25maWdfZm5fdCBmbiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKwlGSUxFICpmID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisKKwlyZXQgPSAtMTsKKwlpZiAoZikgeworCQljb25maWdfZmlsZSB0b3A7CisKKwkJLyogcHVzaCBjb25maWctZmlsZSBwYXJzaW5nIHN0YXRlIHN0YWNrICovCisJCXRvcC5wcmV2ID0gY2Y7CisJCXRvcC5mID0gZjsKKwkJdG9wLm5hbWUgPSBmaWxlbmFtZTsKKwkJdG9wLmxpbmVuciA9IDE7CisJCXRvcC5lb2YgPSAwOworCQlzdHJidWZfaW5pdCgmdG9wLnZhbHVlLCAxMDI0KTsKKwkJY2YgPSAmdG9wOworCisJCXJldCA9IGdpdF9wYXJzZV9maWxlKGZuLCBkYXRhKTsKKworCQkvKiBwb3AgY29uZmlnLWZpbGUgcGFyc2luZyBzdGF0ZSBzdGFjayAqLworCQlzdHJidWZfcmVsZWFzZSgmdG9wLnZhbHVlKTsKKwkJY2YgPSB0b3AucHJldjsKKworCQlmY2xvc2UoZik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNoYXIgKmdpdF9ldGNfZ2l0Y29uZmlnKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnN5c3RlbV93aWRlOworCWlmICghc3lzdGVtX3dpZGUpCisJCXN5c3RlbV93aWRlID0gc3lzdGVtX3BhdGgoRVRDX0dJVENPTkZJRyk7CisJcmV0dXJuIHN5c3RlbV93aWRlOworfQorCitpbnQgZ2l0X2Vudl9ib29sKGNvbnN0IGNoYXIgKmssIGludCBkZWYpCit7CisJY29uc3QgY2hhciAqdiA9IGdldGVudihrKTsKKwlyZXR1cm4gdiA/IGdpdF9jb25maWdfYm9vbChrLCB2KSA6IGRlZjsKK30KKworaW50IGdpdF9jb25maWdfc3lzdGVtKHZvaWQpCit7CisJcmV0dXJuICFnaXRfZW52X2Jvb2woIkdJVF9DT05GSUdfTk9TWVNURU0iLCAwKTsKK30KKworaW50IGdpdF9jb25maWdfZWFybHkoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKnJlcG9fY29uZmlnKQoreworCWludCByZXQgPSAwLCBmb3VuZCA9IDA7CisJY2hhciAqeGRnX2NvbmZpZyA9IE5VTEw7CisJY2hhciAqdXNlcl9jb25maWcgPSBOVUxMOworCisJaG9tZV9jb25maWdfcGF0aHMoJnVzZXJfY29uZmlnLCAmeGRnX2NvbmZpZywgImNvbmZpZyIpOworCisJaWYgKGdpdF9jb25maWdfc3lzdGVtKCkgJiYgIWFjY2Vzc19vcl93YXJuKGdpdF9ldGNfZ2l0Y29uZmlnKCksIFJfT0spKSB7CisJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgZ2l0X2V0Y19naXRjb25maWcoKSwKKwkJCQkJICAgIGRhdGEpOworCQlmb3VuZCArPSAxOworCX0KKworCWlmICh4ZGdfY29uZmlnICYmICFhY2Nlc3Nfb3Jfd2Fybih4ZGdfY29uZmlnLCBSX09LKSkgeworCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHhkZ19jb25maWcsIGRhdGEpOworCQlmb3VuZCArPSAxOworCX0KKworCWlmICh1c2VyX2NvbmZpZyAmJiAhYWNjZXNzX29yX3dhcm4odXNlcl9jb25maWcsIFJfT0spKSB7CisJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgdXNlcl9jb25maWcsIGRhdGEpOworCQlmb3VuZCArPSAxOworCX0KKworCWlmIChyZXBvX2NvbmZpZyAmJiAhYWNjZXNzX29yX3dhcm4ocmVwb19jb25maWcsIFJfT0spKSB7CisJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgcmVwb19jb25maWcsIGRhdGEpOworCQlmb3VuZCArPSAxOworCX0KKworCXN3aXRjaCAoZ2l0X2NvbmZpZ19mcm9tX3BhcmFtZXRlcnMoZm4sIGRhdGEpKSB7CisJY2FzZSAtMTogLyogZXJyb3IgKi8KKwkJZGllKCJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIpOworCQlicmVhazsKKwljYXNlIDA6IC8qIGZvdW5kIG5vdGhpbmcgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDogLyogZm91bmQgYXQgbGVhc3Qgb25lIGl0ZW0gKi8KKwkJZm91bmQrKzsKKwkJYnJlYWs7CisJfQorCisJZnJlZSh4ZGdfY29uZmlnKTsKKwlmcmVlKHVzZXJfY29uZmlnKTsKKwlyZXR1cm4gcmV0ID09IDAgPyBmb3VuZCA6IHJldDsKK30KKworaW50IGdpdF9jb25maWdfd2l0aF9vcHRpb25zKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhLAorCQkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgcmVzcGVjdF9pbmNsdWRlcykKK3sKKwljaGFyICpyZXBvX2NvbmZpZyA9IE5VTEw7CisJaW50IHJldDsKKwlzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSBpbmMgPSBDT05GSUdfSU5DTFVERV9JTklUOworCisJaWYgKHJlc3BlY3RfaW5jbHVkZXMpIHsKKwkJaW5jLmZuID0gZm47CisJCWluYy5kYXRhID0gZGF0YTsKKwkJZm4gPSBnaXRfY29uZmlnX2luY2x1ZGU7CisJCWRhdGEgPSAmaW5jOworCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBhIHNwZWNpZmljIGZpbGVuYW1lLCB1c2UgaXQuIE90aGVyd2lzZSwgZm9sbG93IHRoZQorCSAqIHJlZ3VsYXIgbG9va3VwIHNlcXVlbmNlLgorCSAqLworCWlmIChmaWxlbmFtZSkKKwkJcmV0dXJuIGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBmaWxlbmFtZSwgZGF0YSk7CisKKwlyZXBvX2NvbmZpZyA9IGdpdF9wYXRoZHVwKCJjb25maWciKTsKKwlyZXQgPSBnaXRfY29uZmlnX2Vhcmx5KGZuLCBkYXRhLCByZXBvX2NvbmZpZyk7CisJaWYgKHJlcG9fY29uZmlnKQorCQlmcmVlKHJlcG9fY29uZmlnKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ193aXRoX29wdGlvbnMoZm4sIGRhdGEsIE5VTEwsIDEpOworfQorCisvKgorICogRmluZCBhbGwgdGhlIHN0dWZmIGZvciBnaXRfY29uZmlnX3NldCgpIGJlbG93LgorICovCisKKyNkZWZpbmUgTUFYX01BVENIRVMgNTEyCisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCBiYXNlbGVuOworCWNoYXIgKmtleTsKKwlpbnQgZG9fbm90X21hdGNoOworCXJlZ2V4X3QgKnZhbHVlX3JlZ2V4OworCWludCBtdWx0aV9yZXBsYWNlOworCXNpemVfdCBvZmZzZXRbTUFYX01BVENIRVNdOworCWVudW0geyBTVEFSVCwgU0VDVElPTl9TRUVOLCBTRUNUSU9OX0VORF9TRUVOLCBLRVlfU0VFTiB9IHN0YXRlOworCWludCBzZWVuOworfSBzdG9yZTsKKworc3RhdGljIGludCBtYXRjaGVzKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJcmV0dXJuICFzdHJjbXAoa2V5LCBzdG9yZS5rZXkpICYmCisJCShzdG9yZS52YWx1ZV9yZWdleCA9PSBOVUxMIHx8CisJCSAoc3RvcmUuZG9fbm90X21hdGNoIF4KKwkJICAhcmVnZXhlYyhzdG9yZS52YWx1ZV9yZWdleCwgdmFsdWUsIDAsIE5VTEwsIDApKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RvcmVfYXV4KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWNvbnN0IGNoYXIgKmVwOworCXNpemVfdCBzZWN0aW9uX2xlbjsKKwlGSUxFICpmID0gY2YtPmY7CisKKwlzd2l0Y2ggKHN0b3JlLnN0YXRlKSB7CisJY2FzZSBLRVlfU0VFTjoKKwkJaWYgKG1hdGNoZXMoa2V5LCB2YWx1ZSkpIHsKKwkJCWlmIChzdG9yZS5zZWVuID09IDEgJiYgc3RvcmUubXVsdGlfcmVwbGFjZSA9PSAwKSB7CisJCQkJd2FybmluZygiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIsIGtleSk7CisJCQl9IGVsc2UgaWYgKHN0b3JlLnNlZW4gPj0gTUFYX01BVENIRVMpIHsKKwkJCQllcnJvcigidG9vIG1hbnkgbWF0Y2hlcyBmb3IgJXMiLCBrZXkpOworCQkJCXJldHVybiAxOworCQkJfQorCisJCQlzdG9yZS5vZmZzZXRbc3RvcmUuc2Vlbl0gPSBmdGVsbChmKTsKKwkJCXN0b3JlLnNlZW4rKzsKKwkJfQorCQlicmVhazsKKwljYXNlIFNFQ1RJT05fU0VFTjoKKwkJLyoKKwkJICogV2hhdCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgaW4gc3RvcmUua2V5IChib3RoCisJCSAqIHNlY3Rpb24gYW5kIHZhciksIGFuZCBpdHMgc2VjdGlvbiBwYXJ0IGlzIGJhc2VsZW4KKwkJICogbG9uZy4gIFdlIGZvdW5kIGtleSAoYWdhaW4sIGJvdGggc2VjdGlvbiBhbmQgdmFyKS4KKwkJICogV2Ugd291bGQgd2FudCB0byBrbm93IGlmIHRoaXMga2V5IGlzIGluIHRoZSBzYW1lCisJCSAqIHNlY3Rpb24gYXMgd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IuICBXZSBhbHJlYWR5CisJCSAqIGtub3cgd2UgYXJlIGluIHRoZSBzYW1lIHNlY3Rpb24gYXMgd2hhdCBzaG91bGQKKwkJICogaG9sZCBzdG9yZS5rZXkuCisJCSAqLworCQllcCA9IHN0cnJjaHIoa2V5LCAnLicpOworCQlzZWN0aW9uX2xlbiA9IGVwIC0ga2V5OworCisJCWlmICgoc2VjdGlvbl9sZW4gIT0gc3RvcmUuYmFzZWxlbikgfHwKKwkJICAgIG1lbWNtcChrZXksIHN0b3JlLmtleSwgc2VjdGlvbl9sZW4rMSkpIHsKKwkJCXN0b3JlLnN0YXRlID0gU0VDVElPTl9FTkRfU0VFTjsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRG8gbm90IGluY3JlbWVudCBtYXRjaGVzOiB0aGlzIGlzIG5vIG1hdGNoLCBidXQgd2UKKwkJICoganVzdCBtYWRlIHN1cmUgd2UgYXJlIGluIHRoZSBkZXNpcmVkIHNlY3Rpb24uCisJCSAqLworCQlzdG9yZS5vZmZzZXRbc3RvcmUuc2Vlbl0gPSBmdGVsbChmKTsKKwkJLyogZmFsbHRocnUgKi8KKwljYXNlIFNFQ1RJT05fRU5EX1NFRU46CisJY2FzZSBTVEFSVDoKKwkJaWYgKG1hdGNoZXMoa2V5LCB2YWx1ZSkpIHsKKwkJCXN0b3JlLm9mZnNldFtzdG9yZS5zZWVuXSA9IGZ0ZWxsKGYpOworCQkJc3RvcmUuc3RhdGUgPSBLRVlfU0VFTjsKKwkJCXN0b3JlLnNlZW4rKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdHJyY2hyKGtleSwgJy4nKSAtIGtleSA9PSBzdG9yZS5iYXNlbGVuICYmCisJCQkgICAgICAhc3RybmNtcChrZXksIHN0b3JlLmtleSwgc3RvcmUuYmFzZWxlbikpIHsKKwkJCQkJc3RvcmUuc3RhdGUgPSBTRUNUSU9OX1NFRU47CisJCQkJCXN0b3JlLm9mZnNldFtzdG9yZS5zZWVuXSA9IGZ0ZWxsKGYpOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWVycm9yKCJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIsIGZpbGVuYW1lKTsKKworCS8qIFNhbWUgZXJyb3IgY29kZSBhcyAiZmFpbGVkIHRvIHJlbmFtZSIuICovCisJcmV0dXJuIDQ7Cit9CisKK3N0YXRpYyBpbnQgc3RvcmVfd3JpdGVfc2VjdGlvbihpbnQgZmQsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwljb25zdCBjaGFyICpkb3Q7CisJaW50IGksIHN1Y2Nlc3M7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZG90ID0gbWVtY2hyKGtleSwgJy4nLCBzdG9yZS5iYXNlbGVuKTsKKwlpZiAoZG90KSB7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIlslLipzIFwiIiwgKGludCkoZG90IC0ga2V5KSwga2V5KTsKKwkJZm9yIChpID0gZG90IC0ga2V5ICsgMTsgaSA8IHN0b3JlLmJhc2VsZW47IGkrKykgeworCQkJaWYgKGtleVtpXSA9PSAnIicgfHwga2V5W2ldID09ICdcXCcpCisJCQkJc3RyYnVmX2FkZGNoKCZzYiwgJ1xcJyk7CisJCQlzdHJidWZfYWRkY2goJnNiLCBrZXlbaV0pOworCQl9CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiXCJdXG4iKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZigmc2IsICJbJS4qc11cbiIsIHN0b3JlLmJhc2VsZW4sIGtleSk7CisJfQorCisJc3VjY2VzcyA9IHdyaXRlX2luX2Z1bGwoZmQsIHNiLmJ1Ziwgc2IubGVuKSA9PSBzYi5sZW47CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCXJldHVybiBzdWNjZXNzOworfQorCitzdGF0aWMgaW50IHN0b3JlX3dyaXRlX3BhaXIoaW50IGZkLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBpLCBzdWNjZXNzOworCWludCBsZW5ndGggPSBzdHJsZW4oa2V5ICsgc3RvcmUuYmFzZWxlbiArIDEpOworCWNvbnN0IGNoYXIgKnF1b3RlID0gIiI7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJLyoKKwkgKiBDaGVjayB0byBzZWUgaWYgdGhlIHZhbHVlIG5lZWRzIHRvIGJlIHN1cnJvdW5kZWQgd2l0aCBhIGRxIHBhaXIuCisJICogTm90ZSB0aGF0IHByb2JsZW1hdGljIGNoYXJhY3RlcnMgYXJlIGFsd2F5cyBiYWNrc2xhc2gtcXVvdGVkOyB0aGlzCisJICogY2hlY2sgaXMgYWJvdXQgbm90IGxvc2luZyBsZWFkaW5nIG9yIHRyYWlsaW5nIFNQIGFuZCBzdHJpbmdzIHRoYXQKKwkgKiBmb2xsb3cgYmVnaW5uaW5nLW9mLWNvbW1lbnQgY2hhcmFjdGVycyAoaS5lLiAnOycgYW5kICcjJykgYnkgdGhlCisJICogY29uZmlndXJhdGlvbiBwYXJzZXIuCisJICovCisJaWYgKHZhbHVlWzBdID09ICcgJykKKwkJcXVvdGUgPSAiXCIiOworCWZvciAoaSA9IDA7IHZhbHVlW2ldOyBpKyspCisJCWlmICh2YWx1ZVtpXSA9PSAnOycgfHwgdmFsdWVbaV0gPT0gJyMnKQorCQkJcXVvdGUgPSAiXCIiOworCWlmIChpICYmIHZhbHVlW2kgLSAxXSA9PSAnICcpCisJCXF1b3RlID0gIlwiIjsKKworCXN0cmJ1Zl9hZGRmKCZzYiwgIlx0JS4qcyA9ICVzIiwKKwkJICAgIGxlbmd0aCwga2V5ICsgc3RvcmUuYmFzZWxlbiArIDEsIHF1b3RlKTsKKworCWZvciAoaSA9IDA7IHZhbHVlW2ldOyBpKyspCisJCXN3aXRjaCAodmFsdWVbaV0pIHsKKwkJY2FzZSAnXG4nOgorCQkJc3RyYnVmX2FkZHN0cigmc2IsICJcXG4iKTsKKwkJCWJyZWFrOworCQljYXNlICdcdCc6CisJCQlzdHJidWZfYWRkc3RyKCZzYiwgIlxcdCIpOworCQkJYnJlYWs7CisJCWNhc2UgJyInOgorCQljYXNlICdcXCc6CisJCQlzdHJidWZfYWRkY2goJnNiLCAnXFwnKTsKKwkJZGVmYXVsdDoKKwkJCXN0cmJ1Zl9hZGRjaCgmc2IsIHZhbHVlW2ldKTsKKwkJCWJyZWFrOworCQl9CisJc3RyYnVmX2FkZGYoJnNiLCAiJXNcbiIsIHF1b3RlKTsKKworCXN1Y2Nlc3MgPSB3cml0ZV9pbl9mdWxsKGZkLCBzYi5idWYsIHNiLmxlbikgPT0gc2IubGVuOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIHNzaXplX3QgZmluZF9iZWdpbm5pbmdfb2ZfbGluZShjb25zdCBjaGFyICpjb250ZW50cywgc2l6ZV90IHNpemUsCisJc2l6ZV90IG9mZnNldF8sIGludCAqZm91bmRfYnJhY2tldCkKK3sKKwlzaXplX3QgZXF1YWxfb2Zmc2V0ID0gc2l6ZSwgYnJhY2tldF9vZmZzZXQgPSBzaXplOworCXNzaXplX3Qgb2Zmc2V0OworCitjb250bGluZToKKwlmb3IgKG9mZnNldCA9IG9mZnNldF8tMjsgb2Zmc2V0ID4gMAorCQkJJiYgY29udGVudHNbb2Zmc2V0XSAhPSAnXG4nOyBvZmZzZXQtLSkKKwkJc3dpdGNoIChjb250ZW50c1tvZmZzZXRdKSB7CisJCQljYXNlICc9JzogZXF1YWxfb2Zmc2V0ID0gb2Zmc2V0OyBicmVhazsKKwkJCWNhc2UgJ10nOiBicmFja2V0X29mZnNldCA9IG9mZnNldDsgYnJlYWs7CisJCX0KKwlpZiAob2Zmc2V0ID4gMCAmJiBjb250ZW50c1tvZmZzZXQtMV0gPT0gJ1xcJykgeworCQlvZmZzZXRfID0gb2Zmc2V0OworCQlnb3RvIGNvbnRsaW5lOworCX0KKwlpZiAoYnJhY2tldF9vZmZzZXQgPCBlcXVhbF9vZmZzZXQpIHsKKwkJKmZvdW5kX2JyYWNrZXQgPSAxOworCQlvZmZzZXQgPSBicmFja2V0X29mZnNldCsxOworCX0gZWxzZQorCQlvZmZzZXQrKzsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK2ludCBnaXRfY29uZmlnX3NldF9pbl9maWxlKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSwKKwkJCWNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoY29uZmlnX2ZpbGVuYW1lLCBrZXksIHZhbHVlLCBOVUxMLCAwKTsKK30KKworaW50IGdpdF9jb25maWdfc2V0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGtleSwgdmFsdWUsIE5VTEwsIDApOworfQorCisvKgorICogQXV4aWxpYXJ5IGZ1bmN0aW9uIHRvIHNhbml0eS1jaGVjayBhbmQgc3BsaXQgdGhlIGtleSBpbnRvIHRoZSBzZWN0aW9uCisgKiBpZGVudGlmaWVyIGFuZCB2YXJpYWJsZSBuYW1lLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSB3aGVuIHRoZXJlIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIGluIHRoZSBrZXkgYW5kCisgKiAtMiBpZiB0aGVyZSBpcyBubyBzZWN0aW9uIG5hbWUgaW4gdGhlIGtleS4KKyAqCisgKiBzdG9yZV9rZXkgLSBwb2ludGVyIHRvIGNoYXIqIHdoaWNoIHdpbGwgaG9sZCBhIGNvcHkgb2YgdGhlIGtleSB3aXRoCisgKiAgICAgICAgICAgICBsb3dlcmNhc2Ugc2VjdGlvbiBhbmQgdmFyaWFibGUgbmFtZQorICogYmFzZWxlbiAtIHBvaW50ZXIgdG8gaW50IHdoaWNoIHdpbGwgaG9sZCB0aGUgbGVuZ3RoIG9mIHRoZQorICogICAgICAgICAgIHNlY3Rpb24gKyBzdWJzZWN0aW9uIHBhcnQsIGNhbiBiZSBOVUxMCisgKi8KK2ludCBnaXRfY29uZmlnX3BhcnNlX2tleShjb25zdCBjaGFyICprZXksIGNoYXIgKipzdG9yZV9rZXksIGludCAqYmFzZWxlbl8pCit7CisJaW50IGksIGRvdCwgYmFzZWxlbjsKKwljb25zdCBjaGFyICpsYXN0X2RvdCA9IHN0cnJjaHIoa2V5LCAnLicpOworCisJLyoKKwkgKiBTaW5jZSAia2V5IiBhY3R1YWxseSBjb250YWlucyB0aGUgc2VjdGlvbiBuYW1lIGFuZCB0aGUgcmVhbAorCSAqIGtleSBuYW1lIHNlcGFyYXRlZCBieSBhIGRvdCwgd2UgaGF2ZSB0byBrbm93IHdoZXJlIHRoZSBkb3QgaXMuCisJICovCisKKwlpZiAobGFzdF9kb3QgPT0gTlVMTCB8fCBsYXN0X2RvdCA9PSBrZXkpIHsKKwkJZXJyb3IoImtleSBkb2VzIG5vdCBjb250YWluIGEgc2VjdGlvbjogJXMiLCBrZXkpOworCQlyZXR1cm4gLUNPTkZJR19OT19TRUNUSU9OX09SX05BTUU7CisJfQorCisJaWYgKCFsYXN0X2RvdFsxXSkgeworCQllcnJvcigia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiLCBrZXkpOworCQlyZXR1cm4gLUNPTkZJR19OT19TRUNUSU9OX09SX05BTUU7CisJfQorCisJYmFzZWxlbiA9IGxhc3RfZG90IC0ga2V5OworCWlmIChiYXNlbGVuXykKKwkJKmJhc2VsZW5fID0gYmFzZWxlbjsKKworCS8qCisJICogVmFsaWRhdGUgdGhlIGtleSBhbmQgd2hpbGUgYXQgaXQsIGxvd2VyIGNhc2UgaXQgZm9yIG1hdGNoaW5nLgorCSAqLworCSpzdG9yZV9rZXkgPSB4bWFsbG9jKHN0cmxlbihrZXkpICsgMSk7CisKKwlkb3QgPSAwOworCWZvciAoaSA9IDA7IGtleVtpXTsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IGtleVtpXTsKKwkJaWYgKGMgPT0gJy4nKQorCQkJZG90ID0gMTsKKwkJLyogTGVhdmUgdGhlIGV4dGVuZGVkIGJhc2VuYW1lIHVudG91Y2hlZC4uICovCisJCWlmICghZG90IHx8IGkgPiBiYXNlbGVuKSB7CisJCQlpZiAoIWlza2V5Y2hhcihjKSB8fAorCQkJICAgIChpID09IGJhc2VsZW4gKyAxICYmICFpc2FscGhhKGMpKSkgeworCQkJCWVycm9yKCJpbnZhbGlkIGtleTogJXMiLCBrZXkpOworCQkJCWdvdG8gb3V0X2ZyZWVfcmV0XzE7CisJCQl9CisJCQljID0gdG9sb3dlcihjKTsKKwkJfSBlbHNlIGlmIChjID09ICdcbicpIHsKKwkJCWVycm9yKCJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIiwga2V5KTsKKwkJCWdvdG8gb3V0X2ZyZWVfcmV0XzE7CisJCX0KKwkJKCpzdG9yZV9rZXkpW2ldID0gYzsKKwl9CisJKCpzdG9yZV9rZXkpW2ldID0gMDsKKworCXJldHVybiAwOworCitvdXRfZnJlZV9yZXRfMToKKwlmcmVlKCpzdG9yZV9rZXkpOworCXJldHVybiAtQ09ORklHX0lOVkFMSURfS0VZOworfQorCisvKgorICogSWYgdmFsdWU9PU5VTEwsIHVuc2V0IGluIChyZW1vdmUgZnJvbSkgY29uZmlnLAorICogaWYgdmFsdWVfcmVnZXghPU5VTEwsIGRpc3JlZ2FyZCBrZXkvdmFsdWUgcGFpcnMgd2hlcmUgdmFsdWUgZG9lcyBub3QgbWF0Y2guCisgKiBpZiBtdWx0aV9yZXBsYWNlPT0wLCBub3RoaW5nLCBvciBvbmx5IG9uZSBtYXRjaGluZyBrZXkvdmFsdWUgaXMgcmVwbGFjZWQsCisgKiAgICAgZWxzZSBhbGwgbWF0Y2hpbmcga2V5L3ZhbHVlcyAocmVnYXJkbGVzcyBob3cgbWFueSkgYXJlIHJlbW92ZWQsCisgKiAgICAgYmVmb3JlIHRoZSBuZXcgcGFpciBpcyB3cml0dGVuLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGlzOgorICoKKyAqIC0gaXQgbG9ja3MgdGhlIGNvbmZpZyBmaWxlIGJ5IGNyZWF0aW5nICIuZ2l0L2NvbmZpZy5sb2NrIgorICoKKyAqIC0gaXQgdGhlbiBwYXJzZXMgdGhlIGNvbmZpZyB1c2luZyBzdG9yZV9hdXgoKSBhcyB2YWxpZGF0b3IgdG8gZmluZAorICogICB0aGUgcG9zaXRpb24gb24gdGhlIGtleS92YWx1ZSBwYWlyIHRvIHJlcGxhY2UuIElmIGl0IGlzIHRvIGJlIHVuc2V0LAorICogICBpdCBtdXN0IGJlIGZvdW5kIGV4YWN0bHkgb25jZS4KKyAqCisgKiAtIHRoZSBjb25maWcgZmlsZSBpcyBtbWFwKCllZCBhbmQgdGhlIHBhcnQgYmVmb3JlIHRoZSBtYXRjaCAoaWYgYW55KSBpcworICogICB3cml0dGVuIHRvIHRoZSBsb2NrIGZpbGUsIHRoZW4gdGhlIGNoYW5nZWQgcGFydCBhbmQgdGhlIHJlc3QuCisgKgorICogLSB0aGUgY29uZmlnIGZpbGUgaXMgcmVtb3ZlZCBhbmQgdGhlIGxvY2sgZmlsZSByZW5hbWUoKWQgdG8gaXQuCisgKgorICovCitpbnQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZShjb25zdCBjaGFyICpjb25maWdfZmlsZW5hbWUsCisJCQkJY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCQljb25zdCBjaGFyICp2YWx1ZV9yZWdleCwgaW50IG11bHRpX3JlcGxhY2UpCit7CisJaW50IGZkID0gLTEsIGluX2ZkOworCWludCByZXQ7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9jayA9IE5VTEw7CisJY2hhciAqZmlsZW5hbWVfYnVmID0gTlVMTDsKKworCS8qIHBhcnNlLWtleSByZXR1cm5zIG5lZ2F0aXZlOyBmbGlwIHRoZSBzaWduIHRvIGZlZWQgZXhpdCgzKSAqLworCXJldCA9IDAgLSBnaXRfY29uZmlnX3BhcnNlX2tleShrZXksICZzdG9yZS5rZXksICZzdG9yZS5iYXNlbGVuKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCisJc3RvcmUubXVsdGlfcmVwbGFjZSA9IG11bHRpX3JlcGxhY2U7CisKKwlpZiAoIWNvbmZpZ19maWxlbmFtZSkKKwkJY29uZmlnX2ZpbGVuYW1lID0gZmlsZW5hbWVfYnVmID0gZ2l0X3BhdGhkdXAoImNvbmZpZyIpOworCisJLyoKKwkgKiBUaGUgbG9jayBzZXJ2ZXMgYSBwdXJwb3NlIGluIGFkZGl0aW9uIHRvIGxvY2tpbmc6IHRoZSBuZXcKKwkgKiBjb250ZW50cyBvZiAuZ2l0L2NvbmZpZyB3aWxsIGJlIHdyaXR0ZW4gaW50byBpdC4KKwkgKi8KKwlsb2NrID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSksIDEpOworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsb2NrLCBjb25maWdfZmlsZW5hbWUsIDApOworCWlmIChmZCA8IDApIHsKKwkJZXJyb3IoImNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlICVzOiAlcyIsIGNvbmZpZ19maWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZnJlZShzdG9yZS5rZXkpOworCQlyZXQgPSBDT05GSUdfTk9fTE9DSzsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwkvKgorCSAqIElmIC5naXQvY29uZmlnIGRvZXMgbm90IGV4aXN0IHlldCwgd3JpdGUgYSBtaW5pbWFsIHZlcnNpb24uCisJICovCisJaW5fZmQgPSBvcGVuKGNvbmZpZ19maWxlbmFtZSwgT19SRE9OTFkpOworCWlmICggaW5fZmQgPCAwICkgeworCQlmcmVlKHN0b3JlLmtleSk7CisKKwkJaWYgKCBFTk9FTlQgIT0gZXJybm8gKSB7CisJCQllcnJvcigib3BlbmluZyAlczogJXMiLCBjb25maWdfZmlsZW5hbWUsCisJCQkgICAgICBzdHJlcnJvcihlcnJubykpOworCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfRklMRTsgLyogc2FtZSBhcyAiaW52YWxpZCBjb25maWcgZmlsZSIgKi8KKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKwkJLyogaWYgbm90aGluZyB0byB1bnNldCwgZXJyb3Igb3V0ICovCisJCWlmICh2YWx1ZSA9PSBOVUxMKSB7CisJCQlyZXQgPSBDT05GSUdfTk9USElOR19TRVQ7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJc3RvcmUua2V5ID0gKGNoYXIgKilrZXk7CisJCWlmICghc3RvcmVfd3JpdGVfc2VjdGlvbihmZCwga2V5KSB8fAorCQkgICAgIXN0b3JlX3dyaXRlX3BhaXIoZmQsIGtleSwgdmFsdWUpKQorCQkJZ290byB3cml0ZV9lcnJfb3V0OworCX0gZWxzZSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQljaGFyICpjb250ZW50czsKKwkJc2l6ZV90IGNvbnRlbnRzX3N6LCBjb3B5X2JlZ2luLCBjb3B5X2VuZDsKKwkJaW50IGksIG5ld19saW5lID0gMDsKKworCQlpZiAodmFsdWVfcmVnZXggPT0gTlVMTCkKKwkJCXN0b3JlLnZhbHVlX3JlZ2V4ID0gTlVMTDsKKwkJZWxzZSB7CisJCQlpZiAodmFsdWVfcmVnZXhbMF0gPT0gJyEnKSB7CisJCQkJc3RvcmUuZG9fbm90X21hdGNoID0gMTsKKwkJCQl2YWx1ZV9yZWdleCsrOworCQkJfSBlbHNlCisJCQkJc3RvcmUuZG9fbm90X21hdGNoID0gMDsKKworCQkJc3RvcmUudmFsdWVfcmVnZXggPSAocmVnZXhfdCopeG1hbGxvYyhzaXplb2YocmVnZXhfdCkpOworCQkJaWYgKHJlZ2NvbXAoc3RvcmUudmFsdWVfcmVnZXgsIHZhbHVlX3JlZ2V4LAorCQkJCQlSRUdfRVhURU5ERUQpKSB7CisJCQkJZXJyb3IoImludmFsaWQgcGF0dGVybjogJXMiLCB2YWx1ZV9yZWdleCk7CisJCQkJZnJlZShzdG9yZS52YWx1ZV9yZWdleCk7CisJCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfUEFUVEVSTjsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQorCQl9CisKKwkJc3RvcmUub2Zmc2V0WzBdID0gMDsKKwkJc3RvcmUuc3RhdGUgPSBTVEFSVDsKKwkJc3RvcmUuc2VlbiA9IDA7CisKKwkJLyoKKwkJICogQWZ0ZXIgdGhpcywgc3RvcmUub2Zmc2V0IHdpbGwgY29udGFpbiB0aGUgKmVuZCogb2Zmc2V0CisJCSAqIG9mIHRoZSBsYXN0IG1hdGNoLCBvciByZW1haW4gYXQgMCBpZiBubyBtYXRjaCB3YXMgZm91bmQuCisJCSAqIEFzIGEgc2lkZSBlZmZlY3QsIHdlIG1ha2Ugc3VyZSB0byB0cmFuc2Zvcm0gb25seSBhIHZhbGlkCisJCSAqIGV4aXN0aW5nIGNvbmZpZyBmaWxlLgorCQkgKi8KKwkJaWYgKGdpdF9jb25maWdfZnJvbV9maWxlKHN0b3JlX2F1eCwgY29uZmlnX2ZpbGVuYW1lLCBOVUxMKSkgeworCQkJZXJyb3IoImludmFsaWQgY29uZmlnIGZpbGUgJXMiLCBjb25maWdfZmlsZW5hbWUpOworCQkJZnJlZShzdG9yZS5rZXkpOworCQkJaWYgKHN0b3JlLnZhbHVlX3JlZ2V4ICE9IE5VTEwpIHsKKwkJCQlyZWdmcmVlKHN0b3JlLnZhbHVlX3JlZ2V4KTsKKwkJCQlmcmVlKHN0b3JlLnZhbHVlX3JlZ2V4KTsKKwkJCX0KKwkJCXJldCA9IENPTkZJR19JTlZBTElEX0ZJTEU7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJZnJlZShzdG9yZS5rZXkpOworCQlpZiAoc3RvcmUudmFsdWVfcmVnZXggIT0gTlVMTCkgeworCQkJcmVnZnJlZShzdG9yZS52YWx1ZV9yZWdleCk7CisJCQlmcmVlKHN0b3JlLnZhbHVlX3JlZ2V4KTsKKwkJfQorCisJCS8qIGlmIG5vdGhpbmcgdG8gdW5zZXQsIG9yIHRvbyBtYW55IG1hdGNoZXMsIGVycm9yIG91dCAqLworCQlpZiAoKHN0b3JlLnNlZW4gPT0gMCAmJiB2YWx1ZSA9PSBOVUxMKSB8fAorCQkJCShzdG9yZS5zZWVuID4gMSAmJiBtdWx0aV9yZXBsYWNlID09IDApKSB7CisJCQlyZXQgPSBDT05GSUdfTk9USElOR19TRVQ7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJZnN0YXQoaW5fZmQsICZzdCk7CisJCWNvbnRlbnRzX3N6ID0geHNpemVfdChzdC5zdF9zaXplKTsKKwkJY29udGVudHMgPSB4bW1hcChOVUxMLCBjb250ZW50c19zeiwgUFJPVF9SRUFELAorCQkJTUFQX1BSSVZBVEUsIGluX2ZkLCAwKTsKKwkJY2xvc2UoaW5fZmQpOworCisJCWlmIChzdG9yZS5zZWVuID09IDApCisJCQlzdG9yZS5zZWVuID0gMTsKKworCQlmb3IgKGkgPSAwLCBjb3B5X2JlZ2luID0gMDsgaSA8IHN0b3JlLnNlZW47IGkrKykgeworCQkJaWYgKHN0b3JlLm9mZnNldFtpXSA9PSAwKSB7CisJCQkJc3RvcmUub2Zmc2V0W2ldID0gY29weV9lbmQgPSBjb250ZW50c19zejsKKwkJCX0gZWxzZSBpZiAoc3RvcmUuc3RhdGUgIT0gS0VZX1NFRU4pIHsKKwkJCQljb3B5X2VuZCA9IHN0b3JlLm9mZnNldFtpXTsKKwkJCX0gZWxzZQorCQkJCWNvcHlfZW5kID0gZmluZF9iZWdpbm5pbmdfb2ZfbGluZSgKKwkJCQkJY29udGVudHMsIGNvbnRlbnRzX3N6LAorCQkJCQlzdG9yZS5vZmZzZXRbaV0tMiwgJm5ld19saW5lKTsKKworCQkJaWYgKGNvcHlfZW5kID4gMCAmJiBjb250ZW50c1tjb3B5X2VuZC0xXSAhPSAnXG4nKQorCQkJCW5ld19saW5lID0gMTsKKworCQkJLyogd3JpdGUgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGNvbmZpZyAqLworCQkJaWYgKGNvcHlfZW5kID4gY29weV9iZWdpbikgeworCQkJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBjb250ZW50cyArIGNvcHlfYmVnaW4sCisJCQkJCQkgIGNvcHlfZW5kIC0gY29weV9iZWdpbikgPAorCQkJCSAgICBjb3B5X2VuZCAtIGNvcHlfYmVnaW4pCisJCQkJCWdvdG8gd3JpdGVfZXJyX291dDsKKwkJCQlpZiAobmV3X2xpbmUgJiYKKwkJCQkgICAgd3JpdGVfc3RyX2luX2Z1bGwoZmQsICJcbiIpICE9IDEpCisJCQkJCWdvdG8gd3JpdGVfZXJyX291dDsKKwkJCX0KKwkJCWNvcHlfYmVnaW4gPSBzdG9yZS5vZmZzZXRbaV07CisJCX0KKworCQkvKiB3cml0ZSB0aGUgcGFpciAodmFsdWUgPT0gTlVMTCBtZWFucyB1bnNldCkgKi8KKwkJaWYgKHZhbHVlICE9IE5VTEwpIHsKKwkJCWlmIChzdG9yZS5zdGF0ZSA9PSBTVEFSVCkgeworCQkJCWlmICghc3RvcmVfd3JpdGVfc2VjdGlvbihmZCwga2V5KSkKKwkJCQkJZ290byB3cml0ZV9lcnJfb3V0OworCQkJfQorCQkJaWYgKCFzdG9yZV93cml0ZV9wYWlyKGZkLCBrZXksIHZhbHVlKSkKKwkJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CisJCX0KKworCQkvKiB3cml0ZSB0aGUgcmVzdCBvZiB0aGUgY29uZmlnICovCisJCWlmIChjb3B5X2JlZ2luIDwgY29udGVudHNfc3opCisJCQlpZiAod3JpdGVfaW5fZnVsbChmZCwgY29udGVudHMgKyBjb3B5X2JlZ2luLAorCQkJCQkgIGNvbnRlbnRzX3N6IC0gY29weV9iZWdpbikgPAorCQkJICAgIGNvbnRlbnRzX3N6IC0gY29weV9iZWdpbikKKwkJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CisKKwkJbXVubWFwKGNvbnRlbnRzLCBjb250ZW50c19zeik7CisJfQorCisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUobG9jaykgPCAwKSB7CisJCWVycm9yKCJjb3VsZCBub3QgY29tbWl0IGNvbmZpZyBmaWxlICVzIiwgY29uZmlnX2ZpbGVuYW1lKTsKKwkJcmV0ID0gQ09ORklHX05PX1dSSVRFOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCS8qCisJICogbG9jayBpcyBjb21taXR0ZWQsIHNvIGRvbid0IHRyeSB0byByb2xsIGl0IGJhY2sgYmVsb3cuCisJICogTk9URTogU2luY2UgbG9ja2ZpbGUuYyBrZWVwcyBhIGxpbmtlZCBsaXN0IG9mIGFsbCBjcmVhdGVkCisJICogbG9ja19maWxlIHN0cnVjdHVyZXMsIGl0IGlzbid0IHNhZmUgdG8gZnJlZShsb2NrKS4gIEl0J3MKKwkgKiBiZXR0ZXIgdG8ganVzdCBsZWF2ZSBpdCBoYW5naW5nIGFyb3VuZC4KKwkgKi8KKwlsb2NrID0gTlVMTDsKKwlyZXQgPSAwOworCitvdXRfZnJlZToKKwlpZiAobG9jaykKKwkJcm9sbGJhY2tfbG9ja19maWxlKGxvY2spOworCWZyZWUoZmlsZW5hbWVfYnVmKTsKKwlyZXR1cm4gcmV0OworCit3cml0ZV9lcnJfb3V0OgorCXJldCA9IHdyaXRlX2Vycm9yKGxvY2stPmZpbGVuYW1lKTsKKwlnb3RvIG91dF9mcmVlOworCit9CisKK2ludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJY29uc3QgY2hhciAqdmFsdWVfcmVnZXgsIGludCBtdWx0aV9yZXBsYWNlKQoreworCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKE5VTEwsIGtleSwgdmFsdWUsIHZhbHVlX3JlZ2V4LAorCQkJCQkgICAgICAgbXVsdGlfcmVwbGFjZSk7Cit9CisKK3N0YXRpYyBpbnQgc2VjdGlvbl9uYW1lX21hdGNoIChjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGkgPSAwLCBqID0gMCwgZG90ID0gMDsKKwlpZiAoYnVmW2ldICE9ICdbJykKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMTsgYnVmW2ldICYmIGJ1ZltpXSAhPSAnXSc7IGkrKykgeworCQlpZiAoIWRvdCAmJiBpc3NwYWNlKGJ1ZltpXSkpIHsKKwkJCWRvdCA9IDE7CisJCQlpZiAobmFtZVtqKytdICE9ICcuJykKKwkJCQlicmVhazsKKwkJCWZvciAoaSsrOyBpc3NwYWNlKGJ1ZltpXSk7IGkrKykKKwkJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwkJCWlmIChidWZbaV0gIT0gJyInKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGJ1ZltpXSA9PSAnXFwnICYmIGRvdCkKKwkJCWkrKzsKKwkJZWxzZSBpZiAoYnVmW2ldID09ICciJyAmJiBkb3QpIHsKKwkJCWZvciAoaSsrOyBpc3NwYWNlKGJ1ZltpXSk7IGkrKykKKwkJCQk7IC8qIGRvX25vdGhpbmcgKi8KKwkJCWJyZWFrOworCQl9CisJCWlmIChidWZbaV0gIT0gbmFtZVtqKytdKQorCQkJYnJlYWs7CisJfQorCWlmIChidWZbaV0gPT0gJ10nICYmIG5hbWVbal0gPT0gMCkgeworCQkvKgorCQkgKiBXZSBtYXRjaCwgbm93IGp1c3QgZmluZCB0aGUgcmlnaHQgbGVuZ3RoIG9mZnNldCBieQorCQkgKiBnb2JibGluZyB1cCBhbnkgd2hpdGVzcGFjZSBhZnRlciBpdCwgYXMgd2VsbAorCQkgKi8KKwkJaSsrOworCQlmb3IgKDsgYnVmW2ldICYmIGlzc3BhY2UoYnVmW2ldKTsgaSsrKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCXJldHVybiBpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZWN0aW9uX25hbWVfaXNfb2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwkvKiBFbXB0eSBzZWN0aW9uIG5hbWVzIGFyZSBib2d1cy4gKi8KKwlpZiAoISpuYW1lKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQmVmb3JlIGEgZG90LCB3ZSBtdXN0IGJlIGFscGhhbnVtZXJpYyBvciBkYXNoLiBBZnRlciB0aGUgZmlyc3QgZG90LAorCSAqIGFueXRoaW5nIGdvZXMsIHNvIHdlIGNhbiBzdG9wIGNoZWNraW5nLgorCSAqLworCWZvciAoOyAqbmFtZSAmJiAqbmFtZSAhPSAnLic7IG5hbWUrKykKKwkJaWYgKCpuYW1lICE9ICctJyAmJiAhaXNhbG51bSgqbmFtZSkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogaWYgbmV3X25hbWUgPT0gTlVMTCwgdGhlIHNlY3Rpb24gaXMgcmVtb3ZlZCBpbnN0ZWFkICovCitpbnQgZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbl9pbl9maWxlKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpvbGRfbmFtZSwgY29uc3QgY2hhciAqbmV3X25hbWUpCit7CisJaW50IHJldCA9IDAsIHJlbW92ZSA9IDA7CisJY2hhciAqZmlsZW5hbWVfYnVmID0gTlVMTDsKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrOworCWludCBvdXRfZmQ7CisJY2hhciBidWZbMTAyNF07CisJRklMRSAqY29uZmlnX2ZpbGU7CisKKwlpZiAobmV3X25hbWUgJiYgIXNlY3Rpb25fbmFtZV9pc19vayhuZXdfbmFtZSkpIHsKKwkJcmV0ID0gZXJyb3IoImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIsIG5ld19uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFjb25maWdfZmlsZW5hbWUpCisJCWNvbmZpZ19maWxlbmFtZSA9IGZpbGVuYW1lX2J1ZiA9IGdpdF9wYXRoZHVwKCJjb25maWciKTsKKworCWxvY2sgPSB4Y2FsbG9jKHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSwgMSk7CisJb3V0X2ZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsb2NrLCBjb25maWdfZmlsZW5hbWUsIDApOworCWlmIChvdXRfZmQgPCAwKSB7CisJCXJldCA9IGVycm9yKCJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIsIGNvbmZpZ19maWxlbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghKGNvbmZpZ19maWxlID0gZm9wZW4oY29uZmlnX2ZpbGVuYW1lLCAicmIiKSkpIHsKKwkJLyogbm8gY29uZmlnIGZpbGUgbWVhbnMgbm90aGluZyB0byByZW5hbWUsIG5vIGVycm9yICovCisJCWdvdG8gdW5sb2NrX2FuZF9vdXQ7CisJfQorCisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGNvbmZpZ19maWxlKSkgeworCQlpbnQgaTsKKwkJaW50IGxlbmd0aDsKKwkJY2hhciAqb3V0cHV0ID0gYnVmOworCQlmb3IgKGkgPSAwOyBidWZbaV0gJiYgaXNzcGFjZShidWZbaV0pOyBpKyspCisJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwkJaWYgKGJ1ZltpXSA9PSAnWycpIHsKKwkJCS8qIGl0J3MgYSBzZWN0aW9uICovCisJCQlpbnQgb2Zmc2V0ID0gc2VjdGlvbl9uYW1lX21hdGNoKCZidWZbaV0sIG9sZF9uYW1lKTsKKwkJCWlmIChvZmZzZXQgPiAwKSB7CisJCQkJcmV0Kys7CisJCQkJaWYgKG5ld19uYW1lID09IE5VTEwpIHsKKwkJCQkJcmVtb3ZlID0gMTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXN0b3JlLmJhc2VsZW4gPSBzdHJsZW4obmV3X25hbWUpOworCQkJCWlmICghc3RvcmVfd3JpdGVfc2VjdGlvbihvdXRfZmQsIG5ld19uYW1lKSkgeworCQkJCQlyZXQgPSB3cml0ZV9lcnJvcihsb2NrLT5maWxlbmFtZSk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQkvKgorCQkJCSAqIFdlIHdyb3RlIG91dCB0aGUgbmV3IHNlY3Rpb24sIHdpdGgKKwkJCQkgKiBhIG5ld2xpbmUsIG5vdyBza2lwIHRoZSBvbGQKKwkJCQkgKiBzZWN0aW9uJ3MgbGVuZ3RoCisJCQkJICovCisJCQkJb3V0cHV0ICs9IG9mZnNldCArIGk7CisJCQkJaWYgKHN0cmxlbihvdXRwdXQpID4gMCkgeworCQkJCQkvKgorCQkJCQkgKiBNb3JlIGNvbnRlbnQgbWVhbnMgdGhlcmUncworCQkJCQkgKiBhIGRlY2xhcmF0aW9uIHRvIHB1dCBvbiB0aGUKKwkJCQkJICogbmV4dCBsaW5lOyBpbmRlbnQgd2l0aCBhCisJCQkJCSAqIHRhYgorCQkJCQkgKi8KKwkJCQkJb3V0cHV0IC09IDE7CisJCQkJCW91dHB1dFswXSA9ICdcdCc7CisJCQkJfQorCQkJfQorCQkJcmVtb3ZlID0gMDsKKwkJfQorCQlpZiAocmVtb3ZlKQorCQkJY29udGludWU7CisJCWxlbmd0aCA9IHN0cmxlbihvdXRwdXQpOworCQlpZiAod3JpdGVfaW5fZnVsbChvdXRfZmQsIG91dHB1dCwgbGVuZ3RoKSAhPSBsZW5ndGgpIHsKKwkJCXJldCA9IHdyaXRlX2Vycm9yKGxvY2stPmZpbGVuYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWZjbG9zZShjb25maWdfZmlsZSk7Cit1bmxvY2tfYW5kX291dDoKKwlpZiAoY29tbWl0X2xvY2tfZmlsZShsb2NrKSA8IDApCisJCXJldCA9IGVycm9yKCJjb3VsZCBub3QgY29tbWl0IGNvbmZpZyBmaWxlICVzIiwgY29uZmlnX2ZpbGVuYW1lKTsKK291dDoKKwlmcmVlKGZpbGVuYW1lX2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oY29uc3QgY2hhciAqb2xkX25hbWUsIGNvbnN0IGNoYXIgKm5ld19uYW1lKQoreworCXJldHVybiBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoTlVMTCwgb2xkX25hbWUsIG5ld19uYW1lKTsKK30KKworLyoKKyAqIENhbGwgdGhpcyB0byByZXBvcnQgZXJyb3IgZm9yIHlvdXIgdmFyaWFibGUgdGhhdCBzaG91bGQgbm90CisgKiBnZXQgYSBib29sZWFuIHZhbHVlIChpLmUuICJbbXldIHZhciIgbWVhbnMgInRydWUiKS4KKyAqLworaW50IGNvbmZpZ19lcnJvcl9ub25ib29sKGNvbnN0IGNoYXIgKnZhcikKK3sKKwlyZXR1cm4gZXJyb3IoIk1pc3NpbmcgdmFsdWUgZm9yICclcyciLCB2YXIpOworfQpkaWZmIC0tZ2l0IGEvY29uZmlnLm1hay5pbiBiL2NvbmZpZy5tYWsuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkNDgzOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5tYWsuaW4KQEAgLTAsMCArMSwyNyBAQAorIyBnaXQgTWFrZWZpbGUgY29uZmlndXJhdGlvbiwgaW5jbHVkZWQgaW4gbWFpbiBNYWtlZmlsZQorIyBAY29uZmlndXJlX2lucHV0QAorCitDQyA9IEBDQ0AKK0NGTEFHUyA9IEBDRkxBR1NACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0xERkxBR1MgPSBATERGTEFHU0AKK0FSID0gQEFSQAorVEFSID0gQFRBUkAKK0RJRkYgPSBARElGRkAKKyNJTlNUQUxMID0gQElOU1RBTExACQkjIG5lZWRzIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBzb3VyY2VzCisKK3ByZWZpeCA9IEBwcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2JpbmRpciA9IEBiaW5kaXJACitnaXRleGVjZGlyID0gQGxpYmV4ZWNkaXJAL2dpdC1jb3JlCitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK3RlbXBsYXRlX2RpciA9IEBkYXRhZGlyQC9naXQtY29yZS90ZW1wbGF0ZXMKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKKworbWFuZGlyPUBtYW5kaXJACisKK3NyY2RpciA9IEBzcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACisKK2V4cG9ydCBleGVjX3ByZWZpeCBtYW5kaXIKK2V4cG9ydCBzcmNkaXIgVlBBVEgKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODU4ODhjCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmFjCkBAIC0wLDAgKzEsMTA2NiBAQAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorCisjIyBEZWZpbml0aW9ucyBvZiBwcml2YXRlIG1hY3Jvcy4KKworIyBHSVRfQ09ORl9TVUJTVChWQUwsIFZBUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhdXNlIHRoZSBsaW5lICJWQVI9VkFMIiB0byBiZSBldmVudHVhbGx5IGFwcGVuZGVkIHRvICR7Y29uZmlnX2ZpbGV9LgorQUNfREVGVU4oW0dJVF9DT05GX1NVQlNUXSwKK1tBQ19SRVFVSVJFKFtHSVRfQ09ORl9TVUJTVF9JTklUXSkKK2NvbmZpZ19hcHBlbmRlZF9kZWZzPSIkY29uZmlnX2FwcGVuZGVkX2RlZnMke25ld2xpbmV9ZG5sCiskMT1tNF9pZihbJCNdLFsxXSxbJHskMX1dLFskMl0pIl0pCisKKyMgR0lUX0NPTkZfU1VCU1RfSU5JVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXBhcmUgc2hlbGwgdmFyaWFibGVzIGFuZCBhdXRvY29uZiBtYWNoaW5lIHJlcXVpcmVkIGJ5IGxhdGVyIGNhbGxzCisjIHRvIEdJVF9DT05GX1NVQlNULgorQUNfREVGVU4oW0dJVF9DT05GX1NVQlNUX0lOSVRdLAorICAgIFtjb25maWdfYXBwZW5kZWRfZGVmcz07IG5ld2xpbmU9JworJworICAgIEFDX0NPTkZJR19DT01NQU5EUyhbJGNvbmZpZ19maWxlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgW2VjaG8gIiRjb25maWdfYXBwZW5kZWRfZGVmcyIgPj4gIiRjb25maWdfZmlsZSJdLAorICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnX2ZpbGU9JGNvbmZpZ19maWxlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfYXBwZW5kZWRfZGVmcz0iJGNvbmZpZ19hcHBlbmRlZF9kZWZzIl0pXSkKKworIyBHSVRfQVJHX1NFVF9QQVRIKFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvdmlkZSAtLXdpdGgtUFJPR1JBTT1QQVRIIG9wdGlvbiB0byBzZXQgUEFUSCB0byBQUk9HUkFNCisjIE9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBhbGxvd3Mgc2V0dGluZyBOT19QUk9HUkFNPVllc1BsZWFzZSBpZgorIyAtLXdpdGhvdXQtUFJPR1JBTSB2ZXJzaW9uIHVzZWQuCitBQ19ERUZVTihbR0lUX0FSR19TRVRfUEFUSF0sCisgICAgW0FDX0FSR19XSVRIKFskMV0sCisgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLSQxPVBBVEhdLAorICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3ZpZGUgUEFUSCB0byAkMV0pXSwKKyAgICAgICAgW0dJVF9DT05GX0FQUEVORF9QQVRIKFskMV0sIFskMl0pXSwKKyAgICAgICAgW10pXSkKKworIyBHSVRfQ09ORl9BUFBFTkRfUEFUSChQUk9HUkFNKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJzZSAtLXdpdGgtUFJPR1JBTT1QQVRIIG9wdGlvbiB0byBzZXQgUFJPR1JBTV9QQVRIPVBBVEgKKyMgVXNlZCBieSBHSVRfQVJHX1NFVF9QQVRIKFBST0dSQU0pCisjIE9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBhbGxvd3Mgc2V0dGluZyBOT19QUk9HUkFNPVllc1BsZWFzZSBpZgorIyAtLXdpdGhvdXQtUFJPR1JBTSBpcyB1c2VkLgorQUNfREVGVU4oW0dJVF9DT05GX0FQUEVORF9QQVRIXSwKKyAgICBbbTRfcHVzaGRlZihbR0lUX1VDX1BST0dSQU1dLCBtNF90b3VwcGVyKFskMV0pKWRubAorICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkMiI7IHRoZW4KKwkJR0lUX1VDX1BST0dSQU1bXV9QQVRIPSR3aXRodmFsCisJCUFDX01TR19OT1RJQ0UoW0Rpc2FibGluZyB1c2Ugb2YgR0lUX1VDX1BST0dSQU1dKQorCQlHSVRfQ09ORl9TVUJTVChbTk9fXUdJVF9VQ19QUk9HUkFNLCBbWWVzUGxlYXNlXSkKKwkJR0lUX0NPTkZfU1VCU1QoR0lUX1VDX1BST0dSQU1bXV9QQVRILCBbXSkKKwllbHNlCisJCUFDX01TR19FUlJPUihbWW91IGNhbm5vdCB1c2UgZ2l0IHdpdGhvdXQgJDFdKQorCWZpCisgICAgZWxzZQorCWlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCisJCUFDX01TR19XQVJOKFtZb3Ugc2hvdWxkIHByb3ZpZGUgcGF0aCBmb3IgLS13aXRoLSQxPVBBVEhdKQorCWVsc2UKKwkJR0lUX1VDX1BST0dSQU1bXV9QQVRIPSR3aXRodmFsCisJCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgR0lUX1VDX1BST0dSQU1bXV9QQVRIIHRvICR3aXRodmFsXSkKKwkJR0lUX0NPTkZfU1VCU1QoR0lUX1VDX1BST0dSQU1bXV9QQVRILCBbJHdpdGh2YWxdKQorCWZpCisgICAgZmkKKyAgICBtNF9wb3BkZWYoW0dJVF9VQ19QUk9HUkFNXSldKQorCisjIEdJVF9QQVJTRV9XSVRIKFBBQ0tBR0UpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvciB1c2UgaW4gQUNfQVJHX1dJVEggYWN0aW9uLWlmLWZvdW5kLCBmb3IgcGFja2FnZXMgZGVmYXVsdCBPTi4KKyMgKiBTZXQgTk9fUEFDS0FHRT1ZZXNQbGVhc2UgZm9yIC0td2l0aG91dC1QQUNLQUdFCisjICogU2V0IFBBQ0tBR0VESVI9UEFUSCBmb3IgLS13aXRoLVBBQ0tBR0U9UEFUSAorIyAqIFVuc2V0IE5PX1BBQ0tBR0UgZm9yIC0td2l0aC1QQUNLQUdFIHdpdGhvdXQgQVJHCitBQ19ERUZVTihbR0lUX1BBUlNFX1dJVEhdLAorICAgIFttNF9wdXNoZGVmKFtHSVRfVUNfUEFDS0FHRV0sIG00X3RvdXBwZXIoWyQxXSkpZG5sCisgICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorCU5PX1tdR0lUX1VDX1BBQ0tBR0U9WWVzUGxlYXNlCisgICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgorCU5PX1tdR0lUX1VDX1BBQ0tBR0U9CisgICAgZWxzZQorCU5PX1tdR0lUX1VDX1BBQ0tBR0U9CisJR0lUX1VDX1BBQ0tBR0VbXURJUj0kd2l0aHZhbAorCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgR0lUX1VDX1BBQ0tBR0VbXURJUiB0byAkd2l0aHZhbF0pCisJR0lUX0NPTkZfU1VCU1QoR0lUX1VDX1BBQ0tBR0VbRElSXSwgWyR3aXRodmFsXSkKKyAgICBmaQorICAgIG00X3BvcGRlZihbR0lUX1VDX1BBQ0tBR0VdKV0pCisKKyMgR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSKFdJVEhOQU1FLCBWQVIsIEhFTFBfVEVYVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IFZBUiB0byB0aGUgdmFsdWUgc3BlY2llZCBieSAtLXdpdGgtV0lUSE5BTUUuCisjIE5vIHZlcmlmaWNhdGlvbiBvZiBhcmd1bWVudHMgaXMgcGVyZm9ybWVkLCBidXQgd2FybmluZ3MgYXJlIGlzc3VlZAorIyBpZiBlaXRoZXIgJ3llcycgb3IgJ25vJyBpcyBzcGVjaWZpZWQuCisjIEhFTFBfVEVYVCBpcyBwcmVzZW50ZWQgd2hlbiAtLWhlbHAgaXMgY2FsbGVkLgorIyBUaGlzIGlzIGEgZGlyZWN0IHdheSB0byBhbGxvdyBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUgTWFrZWZpbGUuCitBQ19ERUZVTihbR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSXSwKK1tBQ19BUkdfV0lUSChbJDFdLAorIFtBU19IRUxQX1NUUklORyhbLS13aXRoLSQxPVZBTFVFXSwgJDMpXSwKKyBpZiB0ZXN0IC1uICIkd2l0aHZhbCI7IHRoZW4KKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0gInllcyIgLW8gIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbWW91IGxpa2VseSBkbyBub3Qgd2FudCBlaXRoZXIgJ3llcycgb3IgJ25vJyBhc10KKwkJICAgICBbYSB2YWx1ZSBmb3IgJDEgKCQyKS4gIE1heWJlIHlvdSBkby4uLj9dKQorICBmaQorICBBQ19NU0dfTk9USUNFKFtTZXR0aW5nICQyIHRvICR3aXRodmFsXSkKKyAgR0lUX0NPTkZfU1VCU1QoWyQyXSwgWyR3aXRodmFsXSkKKyBmaSldKSMgR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSCisKKyMKKyMgR0lUX0NIRUNLX0ZVTkMoRlVOQ1RJT04sIElGVFJVRSwgSUZGQUxTRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2ltaWxhciB0byBBQ19DSEVDS19GVU5DLCBidXQgb24gc3lzdGVtcyB0aGF0IGRvIG5vdCBnZW5lcmF0ZQorIyB3YXJuaW5ncyBmb3IgbWlzc2luZyBwcm90b3R5cGVzIChlLmcuIEZyZWVCU0Qgd2hlbiBjb21waWxpbmcgd2l0aG91dAorIyAtV2FsbCksIGl0IGRvZXMgbm90IHdvcmsuICBCeSBsb29raW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9uIGluCisjIGxpYnJhcmllcywgdGhpcyBwcm9ibGVtIGNhbiBiZSB3b3JrZWQgYXJvdW5kLgorQUNfREVGVU4oW0dJVF9DSEVDS19GVU5DXSxbQUNfQ0hFQ0tfRlVOQyhbJDFdLFsKKyAgQUNfU0VBUkNIX0xJQlMoWyQxXSwsCisgIFskMl0sWyQzXSkKK10sWyQzXSldKQorCisjCisjIEdJVF9TVEFTSF9GTEFHUyhCQVNFUEFUSF9WQVIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbG93IGZvciBlYXN5IHN0YXNoaW5nIG9mIExERkxBR1MgYW5kIENQUEZMQUdTIGJlZm9yZSBydW5uaW5nCisjIHRlc3RzIHRoYXQgbWF5IHdhbnQgdG8gdGFrZSB1c2VyIHNldHRpbmdzIGludG8gYWNjb3VudC4KK0FDX0RFRlVOKFtHSVRfU1RBU0hfRkxBR1NdLFsKK2lmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgb2xkX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICBvbGRfTERGTEFHUz0iJExERkxBR1MiCisgICBDUFBGTEFHUz0iLUkkMS9pbmNsdWRlICRDUFBGTEFHUyIKKyAgIExERkxBR1M9Ii1MJDEvJGxpYiAkTERGTEFHUyIKK2ZpCitdKQorCitkbmwKK2RubCBHSVRfVU5TVEFTSF9GTEFHUyhCQVNFUEFUSF9WQVIpCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBSZXN0b3JlIHRoZSBzdGFzaGVkICpGTEFHUyB2YWx1ZXMuCitBQ19ERUZVTihbR0lUX1VOU1RBU0hfRkxBR1NdLFsKK2lmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgQ1BQRkxBR1M9IiRvbGRfQ1BQRkxBR1MiCisgICBMREZMQUdTPSIkb2xkX0xERkxBR1MiCitmaQorXSkKKworIyMgQ29uZmlndXJlIGJvZHkgc3RhcnRzIGhlcmUuCisKK0FDX1BSRVJFUSgyLjU5KQorQUNfSU5JVChbZ2l0XSwgW0BAR0lUX1ZFUlNJT05AQF0sIFtnaXRAdmdlci5rZXJuZWwub3JnXSkKKworQUNfQ09ORklHX1NSQ0RJUihbZ2l0LmNdKQorCitjb25maWdfZmlsZT1jb25maWcubWFrLmF1dG9nZW4KK2NvbmZpZ19pbj1jb25maWcubWFrLmluCisKK0dJVF9DT05GX1NVQlNUKFtBVVRPQ09ORklHVVJFRF0sIFtZZXNQbGVhc2VdKQorCisjIERpcmVjdG9yaWVzIGhvbGRpbmcgInNhbmVyIiB2ZXJzaW9ucyBvZiBjb21tb24gb3IgUE9TSVggYmluYXJpZXMuCitBQ19BUkdfV0lUSChbc2FuZS10b29sLXBhdGhdLAorICBbQVNfSEVMUF9TVFJJTkcoCisgICAgWy0td2l0aC1zYW5lLXRvb2wtcGF0aD1ESVItMVtbOkRJUi0yLi4uOkRJUi1uXV1dLAorICAgIFtEaXJlY3RvcmllcyB0byBwcmVwZW5kIHRvIFBBVEggaW4gYnVpbGQgc3lzdGVtIGFuZCBnZW5lcmF0ZWQgc2NyaXB0c10pXSwKKyAgW2lmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKyAgICB3aXRodmFsPScnCisgIGVsc2UKKyAgICBBQ19NU0dfTk9USUNFKFtTZXR0aW5nIFNBTkVfVE9PTF9QQVRIIHRvICckd2l0aHZhbCddKQorICBmaQorICBHSVRfQ09ORl9TVUJTVChbU0FORV9UT09MX1BBVEhdLCBbJHdpdGh2YWxdKV0sCisgIFsjIElmIHRoZSAiLS13aXRoLXNhbmUtdG9vbC1wYXRoIiBvcHRpb24gd2FzIG5vdCBnaXZlbiwgZG9uJ3QgdG91Y2gKKyAgICMgU0FORV9UT09MX1BBVEggaGVyZSwgYnV0IGxldCBkZWZhdWx0cyBpbiBNYWtlZmlsZSB0YWtlIGNhcmUgb2YgaXQuCisgICAjIFRoaXMgc2hvdWxkIG1pbmltaXplIHNwdXJpb3VzIGRpZmZlcmVuY2VzIGluIHRoZSBiZWhhdmlvdXIgb2YgdGhlCisgICAjIEdpdCBidWlsZCBzeXN0ZW0gd2hlbiBjb25maWd1cmUgaXMgdXNlZCB3LnIudC4gd2hlbiBpdCBpcyBub3QuCisgICA6XSkKKworIyMgU2l0ZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gcHJvZ3JhbXMgKGJlZm9yZSB0ZXN0cykKKyMjIC0td2l0aC1QQUNLQUdFWz1BUkddIGFuZCAtLXdpdGhvdXQtUEFDS0FHRQorIworIyBTZXQgbGliIHRvIGFsdGVybmF0aXZlIG5hbWUgb2YgbGliIGRpcmVjdG9yeSAoZS5nLiBsaWI2NCkKK0FDX0FSR19XSVRIKFtsaWJdLAorIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYj1BUkddLAorICAgICAgICAgICAgICAgICBbQVJHIHNwZWNpZmllcyBhbHRlcm5hdGl2ZSBuYW1lIGZvciBsaWIgZGlyZWN0b3J5XSldLAorIFtpZiB0ZXN0ICIkd2l0aHZhbCIgPSAibm8iIHx8IHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCisJQUNfTVNHX1dBUk4oW1lvdSBzaG91bGQgcHJvdmlkZSBuYW1lIGZvciAtLXdpdGgtbGliPUFSR10pCisgIGVsc2UKKwlsaWI9JHdpdGh2YWwKKwlBQ19NU0dfTk9USUNFKFtTZXR0aW5nIGxpYiB0byAnJGxpYiddKQorCUdJVF9DT05GX1NVQlNUKFtsaWJdKQorICBmaV0pCisKK2lmIHRlc3QgLXogIiRsaWIiOyB0aGVuCisgICBBQ19NU0dfTk9USUNFKFtTZXR0aW5nIGxpYiB0byAnbGliJyAodGhlIGRlZmF1bHQpXSkKKyAgIGxpYj1saWIKK2ZpCisKK0FDX0FSR19FTkFCTEUoW3B0aHJlYWRzXSwKKyBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXB0aHJlYWRzPUZMQUdTXSwKKyAgW0ZMQUdTIGlzIHRoZSB2YWx1ZSB0byBwYXNzIHRvIHRoZSBjb21waWxlciB0byBlbmFibGUgUE9TSVggVGhyZWFkcy5dCisgIFtUaGUgZGVmYXVsdCBpZiBGTEFHUyBpcyBub3Qgc3BlY2lmaWVkIGlzIHRvIHRyeSBmaXJzdCAtcHRocmVhZF0KKyAgW2FuZCB0aGVuIC1scHRocmVhZC5dCisgIFstLXdpdGhvdXQtcHRocmVhZHMgd2lsbCBkaXNhYmxlIHRocmVhZGluZy5dKV0sCitbCitpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgPSAieHllcyI7IHRoZW4KKyAgIEFDX01TR19OT1RJQ0UoW1dpbGwgdHJ5IC1wdGhyZWFkIHRoZW4gLWxwdGhyZWFkIHRvIGVuYWJsZSBQT1NJWCBUaHJlYWRzXSkKK2VsaWYgdGVzdCAieCRlbmFibGV2YWwiICE9ICJ4bm8iOyB0aGVuCisgICBQVEhSRUFEX0NGTEFHUz0kZW5hYmxldmFsCisgICBBQ19NU0dfTk9USUNFKFtTZXR0aW5nICckUFRIUkVBRF9DRkxBR1MnIGFzIHRoZSBGTEFHUyB0byBlbmFibGUgUE9TSVggVGhyZWFkc10pCitlbHNlCisgICBBQ19NU0dfTk9USUNFKFtQT1NJWCBUaHJlYWRzIHdpbGwgYmUgZGlzYWJsZWQuXSkKKyAgIE5PX1BUSFJFQURTPVllc1BsZWFzZQorICAgVVNFUl9OT1BUSFJFQUQ9MQorZmldLAorWworICAgQUNfTVNHX05PVElDRShbV2lsbCB0cnkgLXB0aHJlYWQgdGhlbiAtbHB0aHJlYWQgdG8gZW5hYmxlIFBPU0lYIFRocmVhZHMuXSkKK10pCisKKyMgRGVmaW5lIG9wdGlvbiB0byBlbmFibGUgSmF2YVNjcmlwdCBtaW5pZmljYXRpb24KK0FDX0FSR19FTkFCTEUoW2pzbWluXSwKK1tBU19IRUxQX1NUUklORyhbLS1lbmFibGUtanNtaW49UEFUSF0sCisgIFtQQVRIIGlzIHRoZSBuYW1lIG9mIGEgSmF2YVNjcmlwdCBtaW5pZmllciBvciB0aGUgYWJzb2x1dGUgcGF0aCB0byBvbmUuXSldLAorWworICBKU01JTj0kZW5hYmxldmFsOworICBBQ19NU0dfTk9USUNFKFtTZXR0aW5nIEpTTUlOIHRvICckSlNNSU4nIHRvIGVuYWJsZSBKYXZhU2NyaXB0IG1pbmlmeWluZ10pCisgIEdJVF9DT05GX1NVQlNUKFtKU01JTl0pCitdKQorCisjIERlZmluZSBvcHRpb24gdG8gZW5hYmxlIENTUyBtaW5pZmljYXRpb24KK0FDX0FSR19FTkFCTEUoW2Nzc21pbl0sCitbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNzc21pbj1QQVRIXSwKKyAgW1BBVEggaXMgdGhlIG5hbWUgb2YgYSBDU1MgbWluaWZpZXIgb3IgdGhlIGFic29sdXRlIHBhdGggdG8gb25lLl0pXSwKK1sKKyAgQ1NTTUlOPSRlbmFibGV2YWw7CisgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgQ1NTTUlOIHRvICckQ1NTTUlOJyB0byBlbmFibGUgQ1NTIG1pbmlmeWluZ10pCisgIEdJVF9DT05GX1NVQlNUKFtDU1NNSU5dKQorXSkKKworIyMgU2l0ZSBjb25maWd1cmF0aW9uIChvdmVycmlkZSBhdXRvZGV0ZWN0aW9uKQorIyMgLS13aXRoLVBBQ0tBR0VbPUFSR10gYW5kIC0td2l0aG91dC1QQUNLQUdFCitBQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIHNpdGUgY29uZmlndXJhdGlvbl0pCisjCisjIERlZmluZSBOT19TVk5fVEVTVFMgaWYgeW91IHdhbnQgdG8gc2tpcCB0aW1lLWNvbnN1bWluZyBTVk4gaW50ZXJvcGVyYWJpbGl0eQorIyB0ZXN0cy4gIFRoZXNlIHRlc3RzIHRha2UgdXAgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGhlIHRvdGFsIHRlc3QgdGltZQorIyBidXQgYXJlIG5vdCBuZWVkZWQgdW5sZXNzIHlvdSBwbGFuIHRvIHRhbGsgdG8gU1ZOIHJlcG9zLgorIworIyBEZWZpbmUgUFBDX1NIQTEgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBydW5uaW5nIG1ha2UgdG8gbWFrZSB1c2Ugb2YKKyMgYSBidW5kbGVkIFNIQTEgcm91dGluZSBvcHRpbWl6ZWQgZm9yIFBvd2VyUEMuCisjCisjIERlZmluZSBOT19PUEVOU1NMIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdSBkbyBub3QgaGF2ZSBPcGVuU1NMLgorIyBUaGlzIGFsc28gaW1wbGllcyBCTEtfU0hBMS4KKyMKKyMgRGVmaW5lIE9QRU5TU0xESVI9L2Zvby9iYXIgaWYgeW91ciBvcGVuc3NsIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcmUgaW4KKyMgL2Zvby9iYXIvaW5jbHVkZSBhbmQgL2Zvby9iYXIvbGliIGRpcmVjdG9yaWVzLgorQUNfQVJHX1dJVEgob3BlbnNzbCwKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtb3BlbnNzbF0sW3VzZSBPcGVuU1NMIGxpYnJhcnkgKGRlZmF1bHQgaXMgWUVTKV0pCitBU19IRUxQX1NUUklORyhbXSwgICAgICAgICAgICAgIFtBUkcgY2FuIGJlIHByZWZpeCBmb3Igb3BlbnNzbCBsaWJyYXJ5IGFuZCBoZWFkZXJzXSksCitHSVRfUEFSU0VfV0lUSChbb3BlbnNzbF0pKQorCisjIERlZmluZSBVU0VfTElCUENSRSBpZiB5b3UgaGF2ZSBhbmQgd2FudCB0byB1c2UgbGlicGNyZS4gZ2l0LWdyZXAgd2lsbCBiZQorIyBhYmxlIHRvIHVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucy4KKyMKKyMgRGVmaW5lIExJQlBDUkVESVI9L2Zvby9iYXIgaWYgeW91ciBsaWJwY3JlIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcmUgaW4KKyMgL2Zvby9iYXIvaW5jbHVkZSBhbmQgL2Zvby9iYXIvbGliIGRpcmVjdG9yaWVzLgorIworQUNfQVJHX1dJVEgobGlicGNyZSwKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGlicGNyZV0sW3N1cHBvcnQgUGVybC1jb21wYXRpYmxlIHJlZ2V4ZXMgKGRlZmF1bHQgaXMgTk8pXSkKK0FTX0hFTFBfU1RSSU5HKFtdLCAgICAgICAgICAgW0FSRyBjYW4gYmUgYWxzbyBwcmVmaXggZm9yIGxpYnBjcmUgbGlicmFyeSBhbmQgaGVhZGVyc10pLAorICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKwlVU0VfTElCUENSRT0KKyAgICBlbGlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCisJVVNFX0xJQlBDUkU9WWVzUGxlYXNlCisgICAgZWxzZQorCVVTRV9MSUJQQ1JFPVllc1BsZWFzZQorCUxJQlBDUkVESVI9JHdpdGh2YWwKKwlBQ19NU0dfTk9USUNFKFtTZXR0aW5nIExJQlBDUkVESVIgdG8gJExJQlBDUkVESVJdKQorICAgICAgICBkbmwgVVNFX0xJQlBDUkUgY2FuIHN0aWxsIGJlIG1vZGlmaWVkIGJlbG93LCBzbyBkb24ndCBzdWJzdGl0dXRlCisgICAgICAgIGRubCBpdCB5ZXQuCisJR0lUX0NPTkZfU1VCU1QoW0xJQlBDUkVESVJdKQorICAgIGZpKQorIworIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdWxsIGFuZAorIyBnaXQtaHR0cC1wdXNoIGFyZSBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHVzZSBodHRwOi8vIGFuZCBodHRwczovLworIyB0cmFuc3BvcnRzLgorIworIyBEZWZpbmUgQ1VSTERJUj0vZm9vL2JhciBpZiB5b3VyIGN1cmwgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgorIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCitBQ19BUkdfV0lUSChjdXJsLAorQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1jdXJsXSxbc3VwcG9ydCBodHRwKHMpOi8vIHRyYW5zcG9ydHMgKGRlZmF1bHQgaXMgWUVTKV0pCitBU19IRUxQX1NUUklORyhbXSwgICAgICAgICAgIFtBUkcgY2FuIGJlIGFsc28gcHJlZml4IGZvciBjdXJsIGxpYnJhcnkgYW5kIGhlYWRlcnNdKSwKK0dJVF9QQVJTRV9XSVRIKGN1cmwpKQorIworIyBEZWZpbmUgTk9fRVhQQVQgaWYgeW91IGRvIG5vdCBoYXZlIGV4cGF0IGluc3RhbGxlZC4gIGdpdC1odHRwLXB1c2ggaXMKKyMgbm90IGJ1aWx0LCBhbmQgeW91IGNhbm5vdCBwdXNoIHVzaW5nIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHRyYW5zcG9ydHMuCisjCisjIERlZmluZSBFWFBBVERJUj0vZm9vL2JhciBpZiB5b3VyIGV4cGF0IGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcmUgaW4KKyMgL2Zvby9iYXIvaW5jbHVkZSBhbmQgL2Zvby9iYXIvbGliIGRpcmVjdG9yaWVzLgorQUNfQVJHX1dJVEgoZXhwYXQsCitBU19IRUxQX1NUUklORyhbLS13aXRoLWV4cGF0XSwKK1tzdXBwb3J0IGdpdC1wdXNoIHVzaW5nIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHRyYW5zcG9ydHMgdmlhIFdlYkRBViAoZGVmYXVsdCBpcyBZRVMpXSkKK0FTX0hFTFBfU1RSSU5HKFtdLCAgICAgICAgICAgIFtBUkcgY2FuIGJlIGFsc28gcHJlZml4IGZvciBleHBhdCBsaWJyYXJ5IGFuZCBoZWFkZXJzXSksCitHSVRfUEFSU0VfV0lUSChleHBhdCkpCisjCisjIERlZmluZSBOT19GSU5LIGlmIHlvdSBhcmUgYnVpbGRpbmcgb24gRGFyd2luL01hYyBPUyBYLCBoYXZlIEZpbmsKKyMgaW5zdGFsbGVkIGluIC9zdywgYnV0IGRvbid0IHdhbnQgR0lUIHRvIGxpbmsgYWdhaW5zdCBhbnkgbGlicmFyaWVzCisjIGluc3RhbGxlZCB0aGVyZS4gIElmIGRlZmluZWQgeW91IG1heSBzcGVjaWZ5IHlvdXIgb3duIChvciBGaW5rJ3MpCisjIGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMgYnkgZGVmaW5pbmcgQ0ZMQUdTCisjIGFuZCBMREZMQUdTIGFwcHJvcHJpYXRlbHkuCisjCisjIERlZmluZSBOT19EQVJXSU5fUE9SVFMgaWYgeW91IGFyZSBidWlsZGluZyBvbiBEYXJ3aW4vTWFjIE9TIFgsCisjIGhhdmUgRGFyd2luUG9ydHMgaW5zdGFsbGVkIGluIC9vcHQvbG9jYWwsIGJ1dCBkb24ndCB3YW50IEdJVCB0bworIyBsaW5rIGFnYWluc3QgYW55IGxpYnJhcmllcyBpbnN0YWxsZWQgdGhlcmUuICBJZiBkZWZpbmVkIHlvdSBtYXkKKyMgc3BlY2lmeSB5b3VyIG93biAob3IgRGFyd2luUG9ydCdzKSBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZAorIyBsaWJyYXJ5IGRpcmVjdG9yaWVzIGJ5IGRlZmluaW5nIENGTEFHUyBhbmQgTERGTEFHUyBhcHByb3ByaWF0ZWx5LgorIworIyBEZWZpbmUgTk9fTU1BUCBpZiB5b3Ugd2FudCB0byBhdm9pZCBtbWFwLgorIworIyBEZWZpbmUgTk9fSUNPTlYgaWYgeW91ciBsaWJjIGRvZXMgbm90IHByb3Blcmx5IHN1cHBvcnQgaWNvbnYuCitBQ19BUkdfV0lUSChpY29udiwKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtaWNvbnZdLAorW2lmIHlvdXIgYXJjaGl0ZWN0dXJlIGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCBpY29udl0pCitBU19IRUxQX1NUUklORyhbLS13aXRoLWljb252PVBBVEhdLAorW1BBVEggaXMgcHJlZml4IGZvciBsaWJpY29udiBsaWJyYXJ5IGFuZCBoZWFkZXJzXSkKK0FTX0hFTFBfU1RSSU5HKFtdLAorW3VzZWQgb25seSBpZiB5b3UgbmVlZCBsaW5raW5nIHdpdGggbGliaWNvbnZdKSwKK0dJVF9QQVJTRV9XSVRIKGljb252KSkKKworIyMgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSBhbmQgLS1kaXNhYmxlLUZFQVRVUkUKKyMKKyMgRGVmaW5lIFVTRV9OU0VDIGJlbG93IGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMKKyMgYW5kIGN0aW1lcy4gTm90ZSB0aGF0IHlvdSBuZWVkIHJlY2VudCBnbGliYyAoYXQgbGVhc3QgMi4yLjQpIGZvciB0aGlzLCBhbmQKKyMgaXQgd2lsbCBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5CisjIHJhbmRvbWx5IGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kCisjIHRpbWVzIChteSBleHQzIGRvZXNuJ3QpLgorIworIyBEZWZpbmUgVVNFX1NUREVWIGJlbG93IGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRldmljZQorIyBjaGFuZ2UgYmVpbmcgY29uc2lkZXJlZCBhbiBpbm9kZSBjaGFuZ2UgZnJvbSB0aGUgdXBkYXRlLWluZGV4IHBlcnNwZWN0aXZlLgorCisjCisjIEFsbG93IHVzZXIgdG8gc2V0IEVUQ19HSVRDT05GSUcgdmFyaWFibGUKK0dJVF9QQVJTRV9XSVRIX1NFVF9NQUtFX1ZBUihnaXRjb25maWcsIEVUQ19HSVRDT05GSUcsCisJCQlVc2UgVkFMVUUgaW5zdGVhZCBvZiAvZXRjL2dpdGNvbmZpZyBhcyB0aGUKKwkJCWdsb2JhbCBnaXQgY29uZmlndXJhdGlvbiBmaWxlLgorCQkJSWYgVkFMVUUgaXMgbm90IGZ1bGx5IHF1YWxpZmllZCBpdCB3aWxsIGJlIGludGVycHJldGVkCisJCQlhcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGNvbXB1dGVkIHByZWZpeCBhdCBydW50aW1lLikKKworIworIyBBbGxvdyB1c2VyIHRvIHNldCBFVENfR0lUQVRUUklCVVRFUyB2YXJpYWJsZQorR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSKGdpdGF0dHJpYnV0ZXMsIEVUQ19HSVRBVFRSSUJVVEVTLAorCQkJVXNlIFZBTFVFIGluc3RlYWQgb2YgL2V0Yy9naXRhdHRyaWJ1dGVzIGFzIHRoZQorCQkJZ2xvYmFsIGdpdCBhdHRyaWJ1dGVzIGZpbGUuCisJCQlJZiBWQUxVRSBpcyBub3QgZnVsbHkgcXVhbGlmaWVkIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQKKwkJCWFzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgY29tcHV0ZWQgcHJlZml4IGF0IHJ1bnRpbWUuKQorCisjCisjIEFsbG93IHVzZXIgdG8gc2V0IHRoZSBkZWZhdWx0IHBhZ2VyCitHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIocGFnZXIsIERFRkFVTFRfUEFHRVIsCisJCQlVc2UgVkFMVUUgYXMgdGhlIGZhbGwtYmFjayBwYWdlciBpbnN0ZWFkIG9mICdsZXNzJy4KKwkJCVRoaXMgaXMgdXNlZCBieSB0aGluZ3MgbGlrZSAnZ2l0IGxvZycgd2hlbiB0aGUgdXNlcgorCQkJZG9lcyBub3Qgc3BlY2lmeSBhIHBhZ2VyIHRvIHVzZSB0aHJvdWdoIGFsdGVybmF0ZQorCQkJbWV0aG9kcy4gZWc6IC91c3IvYmluL3BhZ2VyKQorIworIyBBbGxvdyB1c2VyIHRvIHNldCB0aGUgZGVmYXVsdCBlZGl0b3IKK0dJVF9QQVJTRV9XSVRIX1NFVF9NQUtFX1ZBUihlZGl0b3IsIERFRkFVTFRfRURJVE9SLAorCQkJVXNlIFZBTFVFIGFzIHRoZSBmYWxsLWJhY2sgZWRpdG9yIGluc3RlYWQgb2YgJ3ZpJy4KKwkJCVRoaXMgaXMgdXNlZCBieSB0aGluZ3MgbGlrZSAnZ2l0IGNvbW1pdCcgd2hlbiB0aGUgdXNlcgorCQkJZG9lcyBub3Qgc3BlY2lmeSBhIHByZWZlcnJlZCBlZGl0b3IgdGhyb3VnaCBvdGhlcgorCQkJbWV0aG9kcy4gZWc6IC91c3IvYmluL2VkaXRvcikKKworIworIyBEZWZpbmUgU0hFTExfUEFUSCB0byBwcm92aWRlIHBhdGggdG8gc2hlbGwuCitHSVRfQVJHX1NFVF9QQVRIKHNoZWxsKQorIworIyBEZWZpbmUgUEVSTF9QQVRIIHRvIHByb3ZpZGUgcGF0aCB0byBQZXJsLgorR0lUX0FSR19TRVRfUEFUSChwZXJsKQorIworIyBEZWZpbmUgUFlUSE9OX1BBVEggdG8gcHJvdmlkZSBwYXRoIHRvIFB5dGhvbi4KK0dJVF9BUkdfU0VUX1BBVEgocHl0aG9uLCBhbGxvdy13aXRob3V0KQorIworIyBEZWZpbmUgWkxJQl9QQVRIIHRvIHByb3ZpZGUgcGF0aCB0byB6bGliLgorR0lUX0FSR19TRVRfUEFUSCh6bGliKQorIworIyBEZWNsYXJlIHRoZSB3aXRoLXRjbHRrL3dpdGhvdXQtdGNsdGsgb3B0aW9ucy4KK0FDX0FSR19XSVRIKHRjbHRrLAorQVNfSEVMUF9TVFJJTkcoWy0td2l0aC10Y2x0a10sW3VzZSBUY2wvVGsgR1VJIChkZWZhdWx0IGlzIFlFUyldKQorQVNfSEVMUF9TVFJJTkcoW10sW0FSRyBpcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBUY2wvVGsgaW50ZXJwcmV0ZXIuXSkKK0FTX0hFTFBfU1RSSU5HKFtdLFtCYXJlIC0td2l0aC10Y2x0ayB3aWxsIG1ha2UgdGhlIEdVSSBwYXJ0IG9ubHkgaWZdKQorQVNfSEVMUF9TVFJJTkcoW10sW1RjbC9UayBpbnRlcnByZXRlciB3aWxsIGJlIGZvdW5kIGluIGEgc3lzdGVtLl0pLAorR0lUX1BBUlNFX1dJVEgodGNsdGspKQorIworCisKKyMjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCitBQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIHByb2dyYW1zXSkKKyMKK0FDX1BST0dfQ0MoW2NjIGdjY10pCitBQ19DX0lOTElORQorY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKyAgaW5saW5lIHwgeWVzIHwgbm8pIElOTElORT0nJzs7CisgICopICAgICAgICAgICAgICAgICBJTkxJTkU9JGFjX2N2X2NfaW5saW5lIDs7Citlc2FjCitHSVRfQ09ORl9TVUJTVChbSU5MSU5FXSkKKworIyB3aGljaCBzd2l0Y2ggdG8gcGFzcyBydW50aW1lIHBhdGggdG8gZHluYW1pYyBsaWJyYXJpZXMgdG8gdGhlIGxpbmtlcgorQUNfQ0FDSEVfQ0hFQ0soW2lmIGxpbmtlciBzdXBwb3J0cyAtUl0sIGdpdF9jdl9sZF9kYXNociwgWworICAgU0FWRV9MREZMQUdTPSIke0xERkxBR1N9IgorICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IC1SIC8iCisgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbXSldLCBbZ2l0X2N2X2xkX2Rhc2hyPXllc10sIFtnaXRfY3ZfbGRfZGFzaHI9bm9dKQorICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IgorXSkKK2lmIHRlc3QgIiRnaXRfY3ZfbGRfZGFzaHIiID0gInllcyI7IHRoZW4KKyAgIENDX0xEX0RZTlBBVEg9LVIKK2Vsc2UKKyAgIEFDX0NBQ0hFX0NIRUNLKFtpZiBsaW5rZXIgc3VwcG9ydHMgLVdsLC1ycGF0aCxdLCBnaXRfY3ZfbGRfd2xfcnBhdGgsIFsKKyAgICAgIFNBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKyAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSAtV2wsLXJwYXRoLC8iCisgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbXSldLCBbZ2l0X2N2X2xkX3dsX3JwYXRoPXllc10sIFtnaXRfY3ZfbGRfd2xfcnBhdGg9bm9dKQorICAgICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IgorICAgXSkKKyAgIGlmIHRlc3QgIiRnaXRfY3ZfbGRfd2xfcnBhdGgiID0gInllcyI7IHRoZW4KKyAgICAgIENDX0xEX0RZTlBBVEg9LVdsLC1ycGF0aCwKKyAgIGVsc2UKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFtpZiBsaW5rZXIgc3VwcG9ydHMgLXJwYXRoXSwgZ2l0X2N2X2xkX3JwYXRoLCBbCisgICAgICAgICBTQVZFX0xERkxBR1M9IiR7TERGTEFHU30iCisgICAgICAgICBMREZMQUdTPSIke1NBVkVfTERGTEFHU30gLXJwYXRoIC8iCisgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbXSldLCBbZ2l0X2N2X2xkX3JwYXRoPXllc10sIFtnaXRfY3ZfbGRfcnBhdGg9bm9dKQorICAgICAgICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IgorICAgICAgXSkKKyAgICAgIGlmIHRlc3QgIiRnaXRfY3ZfbGRfcnBhdGgiID0gInllcyI7IHRoZW4KKyAgICAgICAgIENDX0xEX0RZTlBBVEg9LXJwYXRoCisgICAgICBlbHNlCisgICAgICAgICBDQ19MRF9EWU5QQVRIPQorICAgICAgICAgQUNfTVNHX1dBUk4oW2xpbmtlciBkb2VzIG5vdCBzdXBwb3J0IHJ1bnRpbWUgcGF0aCB0byBkeW5hbWljIGxpYnJhcmllc10pCisgICAgICBmaQorICAgZmkKK2ZpCitHSVRfQ09ORl9TVUJTVChbQ0NfTERfRFlOUEFUSF0pCisjQUNfUFJPR19JTlNUQUxMCQkjIG5lZWRzIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBzb3VyY2VzCitBQ19DSEVDS19UT09MUyhBUiwgW2dhciBhcl0sIDopCitBQ19DSEVDS19QUk9HUyhUQVIsIFtndGFyIHRhcl0pCitBQ19DSEVDS19QUk9HUyhESUZGLCBbZ251ZGlmZiBnZGlmZiBkaWZmXSkKKyMgVENMVEtfUEFUSCB3aWxsIGJlIHNldCB0byBzb21lIHZhbHVlIGlmIHdlIHdhbnQgVGNsL1RrCisjIG9yIHdpbGwgYmUgZW1wdHkgb3RoZXJ3aXNlLgoraWYgdGVzdCAtbiAiJE5PX1RDTFRLIjsgdGhlbgorICBUQ0xUS19QQVRIPQorZWxzZQorICBpZiB0ZXN0ICIkd2l0aF90Y2x0ayIgPSAiIjsgdGhlbgorICAjIE5vIFRjbC9UayBzd2l0Y2hlcyBnaXZlbi4gRG8gbm90IGNoZWNrIGZvciBUY2wvVGssIHVzZSBiYXJlICd3aXNoJy4KKyAgICBUQ0xUS19QQVRIPXdpc2gKKyAgZWxpZiB0ZXN0ICIkd2l0aF90Y2x0ayIgPSAieWVzIjsgdGhlbgorICAjIFRjbC9UayBjaGVjayByZXF1ZXN0ZWQuCisgICAgQUNfQ0hFQ0tfUFJPR1MoVENMVEtfUEFUSCwgW3dpc2hdLCApCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtVc2luZyBUY2wvVGsgaW50ZXJwcmV0ZXIgJHdpdGhfdGNsdGtdKQorICAgIFRDTFRLX1BBVEg9IiR3aXRoX3RjbHRrIgorICBmaQorZmkKK0dJVF9DT05GX1NVQlNUKFtUQ0xUS19QQVRIXSkKK0FDX0NIRUNLX1BST0dTKEFTQ0lJRE9DLCBbYXNjaWlkb2NdKQoraWYgdGVzdCAtbiAiJEFTQ0lJRE9DIjsgdGhlbgorCUFDX01TR19DSEVDS0lORyhbZm9yIGFzY2lpZG9jIHZlcnNpb25dKQorCWFzY2lpZG9jX3ZlcnNpb249YCRBU0NJSURPQyAtLXZlcnNpb24gMj4vZGV2L251bGxgCisJY2FzZSAiJHthc2NpaWRvY192ZXJzaW9ufSIgaW4KKwlhc2NpaWRvYycgJzgqKQorCQlBQ19NU0dfUkVTVUxUKFske2FzY2lpZG9jX3ZlcnNpb259XSkKKwkJOzsKKwkqKQorCQlBQ19NU0dfUkVTVUxUKFske2FzY2lpZG9jX3ZlcnNpb259ICh1bmtub3duKV0pCisJCTs7CisJZXNhYworZmkKKworCisjIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgbGlicmFyaWVzXSkKKyMKKyMgRGVmaW5lIE5PX09QRU5TU0wgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91IGRvIG5vdCBoYXZlIE9wZW5TU0wuCisjIERlZmluZSBORUVEU19TU0xfV0lUSF9DUllQVE8gaWYgeW91IG5lZWQgLWxjcnlwdG8gd2l0aCAtbHNzbCAoRGFyd2luKS4KKworR0lUX1NUQVNIX0ZMQUdTKCRPUEVOU1NMRElSKQorCitBQ19DSEVDS19MSUIoW2NyeXB0b10sIFtTSEExX0luaXRdLAorW05FRURTX1NTTF9XSVRIX0NSWVBUTz1dLAorW0FDX0NIRUNLX0xJQihbc3NsXSwgW1NIQTFfSW5pdF0sCisgW05FRURTX1NTTF9XSVRIX0NSWVBUTz1ZZXNQbGVhc2UgTk9fT1BFTlNTTD1dLAorIFtORUVEU19TU0xfV0lUSF9DUllQVE89ICAgICAgICAgIE5PX09QRU5TU0w9WWVzUGxlYXNlXSldKQorCitHSVRfVU5TVEFTSF9GTEFHUygkT1BFTlNTTERJUikKKworR0lUX0NPTkZfU1VCU1QoW05FRURTX1NTTF9XSVRIX0NSWVBUT10pCitHSVRfQ09ORl9TVUJTVChbTk9fT1BFTlNTTF0pCisKKyMKKyMgRGVmaW5lIFVTRV9MSUJQQ1JFIGlmIHlvdSBoYXZlIGFuZCB3YW50IHRvIHVzZSBsaWJwY3JlLiBnaXQtZ3JlcCB3aWxsIGJlCisjIGFibGUgdG8gdXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zLgorIworCitpZiB0ZXN0IC1uICIkVVNFX0xJQlBDUkUiOyB0aGVuCisKK0dJVF9TVEFTSF9GTEFHUygkTElCUENSRURJUikKKworQUNfQ0hFQ0tfTElCKFtwY3JlXSwgW3BjcmVfdmVyc2lvbl0sCitbVVNFX0xJQlBDUkU9WWVzUGxlYXNlXSwKK1tVU0VfTElCUENSRT1dKQorCitHSVRfVU5TVEFTSF9GTEFHUygkTElCUENSRURJUikKKworR0lUX0NPTkZfU1VCU1QoW1VTRV9MSUJQQ1JFXSkKKworZmkKKworIworIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgbGliY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdWxsIGFuZAorIyBnaXQtaHR0cC1wdXNoIGFyZSBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHVzZSBodHRwOi8vIGFuZCBodHRwczovLworIyB0cmFuc3BvcnRzLgorCitHSVRfU1RBU0hfRkxBR1MoJENVUkxESVIpCisKK0FDX0NIRUNLX0xJQihbY3VybF0sIFtjdXJsX2dsb2JhbF9pbml0XSwKK1tOT19DVVJMPV0sCitbTk9fQ1VSTD1ZZXNQbGVhc2VdKQorCitHSVRfVU5TVEFTSF9GTEFHUygkQ1VSTERJUikKKworR0lUX0NPTkZfU1VCU1QoW05PX0NVUkxdKQorCisjCisjIERlZmluZSBOT19FWFBBVCBpZiB5b3UgZG8gbm90IGhhdmUgZXhwYXQgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtcHVzaCBpcworIyBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHB1c2ggdXNpbmcgaHR0cDovLyBhbmQgaHR0cHM6Ly8gdHJhbnNwb3J0cy4KKworR0lUX1NUQVNIX0ZMQUdTKCRFWFBBVERJUikKKworQUNfQ0hFQ0tfTElCKFtleHBhdF0sIFtYTUxfUGFyc2VyQ3JlYXRlXSwKK1tOT19FWFBBVD1dLAorW05PX0VYUEFUPVllc1BsZWFzZV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRFWFBBVERJUikKKworR0lUX0NPTkZfU1VCU1QoW05PX0VYUEFUXSkKKworIworIyBEZWZpbmUgTkVFRFNfTElCSUNPTlYgaWYgbGlua2luZyB3aXRoIGxpYmMgaXMgbm90IGVub3VnaCAoRGFyd2luIGFuZAorIyBzb21lIFNvbGFyaXMgaW5zdGFsbGF0aW9ucykuCisjIERlZmluZSBOT19JQ09OViBpZiBuZWl0aGVyIGxpYmMgbm9yIGxpYmljb252IHN1cHBvcnQgaWNvbnYuCisKK2lmIHRlc3QgLXogIiROT19JQ09OViI7IHRoZW4KKworR0lUX1NUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKworQUNfREVGVU4oW0lDT05WVEVTVF9TUkNdLAorW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPGljb252Lmg+XSwKKyBbaWNvbnZfb3BlbigiIiwgIiIpO10pXSkKKworaWYgdGVzdCAtbiAiJElDT05WRElSIjsgdGhlbgorICAgbGliX29yZGVyPSItbGljb252IC1sYyIKK2Vsc2UKKyAgIGxpYl9vcmRlcj0iLWxjIC1saWNvbnYiCitmaQorCitOT19JQ09OVj1ZZXNQbGVhc2UKKworZm9yIGwgaW4gJGxpYl9vcmRlcjsgZG8KKyAgICBpZiB0ZXN0ICIkbCIgPSAiLWxpY29udiI7IHRoZW4KKyAgICAgICBORUVEU19MSUJJQ09OVj1ZZXNQbGVhc2UKKyAgICBlbHNlCisgICAgICAgTkVFRFNfTElCSUNPTlY9CisgICAgZmkKKworICAgIG9sZF9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkTElCUyAkbCIKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpY29udiBpbiAkbF0pCisgICAgQUNfTElOS19JRkVMU0UoW0lDT05WVEVTVF9TUkNdLAorCVtBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCU5PX0lDT05WPQorCWJyZWFrXSwKKwlbQUNfTVNHX1JFU1VMVChbbm9dKV0pCisgICAgTElCUz0iJG9sZF9MSUJTIgorZG9uZQorCisjaW4gY2FzZSBvZiBicmVhaworTElCUz0iJG9sZF9MSUJTIgorCitHSVRfVU5TVEFTSF9GTEFHUygkSUNPTlZESVIpCisKK0dJVF9DT05GX1NVQlNUKFtORUVEU19MSUJJQ09OVl0pCitHSVRfQ09ORl9TVUJTVChbTk9fSUNPTlZdKQorCitpZiB0ZXN0IC1uICIkTk9fSUNPTlYiOyB0aGVuCisgICAgTkVFRFNfTElCSUNPTlY9CitmaQorCitmaQorCisjCisjIERlZmluZSBOT19ERUZMQVRFX0JPVU5EIGlmIGRlZmxhdGVCb3VuZCBpcyBtaXNzaW5nIGZyb20gemxpYi4KKworR0lUX1NUQVNIX0ZMQUdTKCRaTElCX1BBVEgpCisKK0FDX0RFRlVOKFtaTElCVEVTVF9TUkNdLCBbCitBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDx6bGliLmg+XSwKKyBbZGVmbGF0ZUJvdW5kKDAsIDApO10pXSkKK0FDX01TR19DSEVDS0lORyhbZm9yIGRlZmxhdGVCb3VuZCBpbiAtbHpdKQorb2xkX0xJQlM9IiRMSUJTIgorTElCUz0iJExJQlMgLWx6IgorQUNfTElOS19JRkVMU0UoW1pMSUJURVNUX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pXSwKKwlbQUNfTVNHX1JFU1VMVChbbm9dKQorCU5PX0RFRkxBVEVfQk9VTkQ9eWVzXSkKK0xJQlM9IiRvbGRfTElCUyIKKworR0lUX1VOU1RBU0hfRkxBR1MoJFpMSUJfUEFUSCkKKworR0lUX0NPTkZfU1VCU1QoW05PX0RFRkxBVEVfQk9VTkRdKQorCisjCisjIERlZmluZSBORUVEU19TT0NLRVQgaWYgbGlua2luZyB3aXRoIGxpYmMgaXMgbm90IGVub3VnaCAoU3VuT1MsCisjIFBhdHJpY2sgTWF1cml0eikuCitBQ19DSEVDS19MSUIoW2NdLCBbc29ja2V0XSwKK1tORUVEU19TT0NLRVQ9XSwKK1tORUVEU19TT0NLRVQ9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtORUVEU19TT0NLRVRdKQordGVzdCAtbiAiJE5FRURTX1NPQ0tFVCIgJiYgTElCUz0iJExJQlMgLWxzb2NrZXQiCisKKyMKKyMgVGhlIG5leHQgZmV3IHRlc3RzIHdpbGwgZGVmaW5lIE5FRURTX1JFU09MViBpZiBsaW5raW5nIHdpdGgKKyMgbGlicmVzb2x2IHByb3ZpZGVzIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyB3ZSB3b3VsZCBub3JtYWxseSBnZXQKKyMgZnJvbSBsaWJjLgorTkVFRFNfUkVTT0xWPQorIworIyBEZWZpbmUgTk9fSU5FVF9OVE9QIGlmIGxpbmtpbmcgd2l0aCAtbHJlc29sdiBpcyBub3QgZW5vdWdoLgorIyBTb2xhcmlzIDIuNyBpbiBwYXJ0aWN1bGFyIGhvcyBpbmV0X250b3AgaW4gLWxyZXNvbHYuCitOT19JTkVUX05UT1A9CitBQ19DSEVDS19GVU5DKFtpbmV0X250b3BdLAorICAgIFtdLAorICAgIFtBQ19DSEVDS19MSUIoW3Jlc29sdl0sIFtpbmV0X250b3BdLAorCVtORUVEU19SRVNPTFY9WWVzUGxlYXNlXSwKKwlbTk9fSU5FVF9OVE9QPVllc1BsZWFzZV0pCitdKQorR0lUX0NPTkZfU1VCU1QoW05PX0lORVRfTlRPUF0pCisjCisjIERlZmluZSBOT19JTkVUX1BUT04gaWYgbGlua2luZyB3aXRoIC1scmVzb2x2IGlzIG5vdCBlbm91Z2guCisjIFNvbGFyaXMgMi43IGluIHBhcnRpY3VsYXIgaG9zIGluZXRfcHRvbiBpbiAtbHJlc29sdi4KK05PX0lORVRfUFRPTj0KK0FDX0NIRUNLX0ZVTkMoW2luZXRfcHRvbl0sCisgICAgW10sCisgICAgW0FDX0NIRUNLX0xJQihbcmVzb2x2XSwgW2luZXRfcHRvbl0sCisJW05FRURTX1JFU09MVj1ZZXNQbGVhc2VdLAorCVtOT19JTkVUX1BUT049WWVzUGxlYXNlXSkKK10pCitHSVRfQ09ORl9TVUJTVChbTk9fSU5FVF9QVE9OXSkKKyMKKyMgRGVmaW5lIE5PX0hTVFJFUlJPUiBpZiBsaW5raW5nIHdpdGggLWxyZXNvbHYgaXMgbm90IGVub3VnaC4KKyMgU29sYXJpcyAyLjYgaW4gcGFydGljdWxhciBoYXMgbm8gaHN0cmVycm9yLCBldmVuIGluIC1scmVzb2x2LgorTk9fSFNUUkVSUk9SPQorQUNfQ0hFQ0tfRlVOQyhbaHN0cmVycm9yXSwKKyAgICBbXSwKKyAgICBbQUNfQ0hFQ0tfTElCKFtyZXNvbHZdLCBbaHN0cmVycm9yXSwKKwlbTkVFRFNfUkVTT0xWPVllc1BsZWFzZV0sCisJW05PX0hTVFJFUlJPUj1ZZXNQbGVhc2VdKQorXSkKK0dJVF9DT05GX1NVQlNUKFtOT19IU1RSRVJST1JdKQorCitkbmwgVGhpcyBtdXN0IGdvIGFmdGVyIGFsbCB0aGUgcG9zc2libGUgcGxhY2VzIGZvciBpdHMgaW5pdGlhbGl6YXRpb24sCitkbmwgaW4gdGhlIEFDX0NIRUNLX0ZVTkMgaW52b2NhdGlvbnMgYWJvdmUuCitHSVRfQ09ORl9TVUJTVChbTkVFRFNfUkVTT0xWXSkKKyMKKyMgSWYgYW55IG9mIHRoZSBhYm92ZSB0ZXN0cyBkZXRlcm1pbmVkIHRoYXQgLWxyZXNvbHYgaXMgbmVlZGVkIGF0CisjIGJ1aWxkLXRpbWUsIGFsc28gc2V0IGl0IGhlcmUgZm9yIHJlbWFpbmluZyBjb25maWd1cmUtdGltZSBjaGVja3MuCit0ZXN0IC1uICIkTkVFRFNfUkVTT0xWIiAmJiBMSUJTPSIkTElCUyAtbHJlc29sdiIKKworQUNfQ0hFQ0tfTElCKFtjXSwgW2Jhc2VuYW1lXSwKK1tORUVEU19MSUJHRU49XSwKK1tORUVEU19MSUJHRU49WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtORUVEU19MSUJHRU5dKQordGVzdCAtbiAiJE5FRURTX0xJQkdFTiIgJiYgTElCUz0iJExJQlMgLWxnZW4iCisKK0FDX0NIRUNLX0xJQihbY10sIFtnZXR0ZXh0XSwKK1tMSUJDX0NPTlRBSU5TX0xJQklOVEw9WWVzUGxlYXNlXSwKK1tMSUJDX0NPTlRBSU5TX0xJQklOVEw9XSkKK0dJVF9DT05GX1NVQlNUKFtMSUJDX0NPTlRBSU5TX0xJQklOVExdKQorCisjCisjIERlZmluZSBOT19HRVRURVhUIGlmIHlvdSBkb24ndCB3YW50IEdpdCBvdXRwdXQgdG8gYmUgdHJhbnNsYXRlZC4KKyMgQSB0cmFuc2xhdGVkIEdpdCByZXF1aXJlcyBHTlUgbGliaW50bCBvciBhbm90aGVyIGdldHRleHQgaW1wbGVtZW50YXRpb24KK0FDX0NIRUNLX0hFQURFUihbbGliaW50bC5oXSwKK1tOT19HRVRURVhUPV0sCitbTk9fR0VUVEVYVD1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX0dFVFRFWFRdKQorCitpZiB0ZXN0IC16ICIkTk9fR0VUVEVYVCI7IHRoZW4KKyAgICB0ZXN0IC1uICIkTElCQ19DT05UQUlOU19MSUJJTlRMIiB8fCBMSUJTPSIkTElCUyAtbGludGwiCitmaQorCisjIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgaGVhZGVyIGZpbGVzXSkKKyMKKyMgRGVmaW5lIE5PX1NZU19TRUxFQ1RfSCBpZiB5b3UgZG9uJ3QgaGF2ZSBzeXMvc2VsZWN0LmguCitBQ19DSEVDS19IRUFERVIoW3N5cy9zZWxlY3QuaF0sCitbTk9fU1lTX1NFTEVDVF9IPV0sCitbTk9fU1lTX1NFTEVDVF9IPVVuZm9ydHVuYXRlbHlZZXNdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NZU19TRUxFQ1RfSF0pCisjCisjIERlZmluZSBOT19TWVNfUE9MTF9IIGlmIHlvdSBkb24ndCBoYXZlIHN5cy9wb2xsLmgKK0FDX0NIRUNLX0hFQURFUihbc3lzL3BvbGwuaF0sCitbTk9fU1lTX1BPTExfSD1dLAorW05PX1NZU19QT0xMX0g9VW5mb3J0dW5hdGVseVllc10pCitHSVRfQ09ORl9TVUJTVChbTk9fU1lTX1BPTExfSF0pCisjCisjIERlZmluZSBOT19JTlRUWVBFU19IIGlmIHlvdSBkb24ndCBoYXZlIGludHR5cGVzLmgKK0FDX0NIRUNLX0hFQURFUihbaW50dHlwZXMuaF0sCitbTk9fSU5UVFlQRVNfSD1dLAorW05PX0lOVFRZUEVTX0g9VW5mb3J0dW5hdGVseVllc10pCitHSVRfQ09ORl9TVUJTVChbTk9fSU5UVFlQRVNfSF0pCisjCisjIERlZmluZSBPTERfSUNPTlYgaWYgeW91ciBsaWJyYXJ5IGhhcyBhbiBvbGQgaWNvbnYoKSwgd2hlcmUgdGhlIHNlY29uZAorIyAoaW5wdXQgYnVmZmVyIHBvaW50ZXIpIHBhcmFtZXRlciBpcyBkZWNsYXJlZCB3aXRoIHR5cGUgKGNvbnN0IGNoYXIgKiopLgorQUNfREVGVU4oW09MRElDT05WVEVTVF9TUkNdLCBbCitBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxpY29udi5oPgorCitleHRlcm4gc2l6ZV90IGljb252KGljb252X3QgY2QsCisJCSAgICBjaGFyICoqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsCisJCSAgICBjaGFyICoqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7CitdXSwgW10pXSkKKworR0lUX1NUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKworQUNfTVNHX0NIRUNLSU5HKFtmb3Igb2xkIGljb252KCldKQorQUNfQ09NUElMRV9JRkVMU0UoW09MRElDT05WVEVTVF9TUkNdLAorCVtBQ19NU0dfUkVTVUxUKFtub10pXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwlPTERfSUNPTlY9VW5mb3J0dW5hdGVseVllc10pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKworR0lUX0NPTkZfU1VCU1QoW09MRF9JQ09OVl0pCisKKyMjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCitBQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzXSkKKyMKK1RZUEVfU09DS0xFTl9UCitjYXNlICRhY19jdl90eXBlX3NvY2tsZW5fdCBpbgorICB5ZXMpCVNPQ0tMRU5fVD0nJzs7CisgICopICAJU09DS0xFTl9UPSRnaXRfY3Zfc29ja2xlbl90X2VxdWl2OzsKK2VzYWMKK0dJVF9DT05GX1NVQlNUKFtTT0NLTEVOX1RdKQorCisjIERlZmluZSBOT19EX0lOT19JTl9ESVJFTlQgaWYgeW91IGRvbid0IGhhdmUgZF9pbm8gaW4geW91ciBzdHJ1Y3QgZGlyZW50LgorQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBkaXJlbnQuZF9pbm8sCitbTk9fRF9JTk9fSU5fRElSRU5UPV0sCitbTk9fRF9JTk9fSU5fRElSRU5UPVllc1BsZWFzZV0sCitbI2luY2x1ZGUgPGRpcmVudC5oPl0pCitHSVRfQ09ORl9TVUJTVChbTk9fRF9JTk9fSU5fRElSRU5UXSkKKyMKKyMgRGVmaW5lIE5PX0RfVFlQRV9JTl9ESVJFTlQgaWYgeW91ciBwbGF0Zm9ybSBkZWZpbmVzIERUX1VOS05PV04gYnV0IGxhY2tzCisjIGRfdHlwZSBpbiBzdHJ1Y3QgZGlyZW50IChsYXRlc3QgQ3lnd2luIC0tIHdpbGwgYmUgZml4ZWQgc29vbmlzaCkuCitBQ19DSEVDS19NRU1CRVIoc3RydWN0IGRpcmVudC5kX3R5cGUsCitbTk9fRF9UWVBFX0lOX0RJUkVOVD1dLAorW05PX0RfVFlQRV9JTl9ESVJFTlQ9WWVzUGxlYXNlXSwKK1sjaW5jbHVkZSA8ZGlyZW50Lmg+XSkKK0dJVF9DT05GX1NVQlNUKFtOT19EX1RZUEVfSU5fRElSRU5UXSkKKyMKKyMgRGVmaW5lIE5PX1NPQ0tBRERSX1NUT1JBR0UgaWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIHN0cnVjdAorIyBzb2NrYWRkcl9zdG9yYWdlLgorQUNfQ0hFQ0tfVFlQRShzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSwKK1tOT19TT0NLQUREUl9TVE9SQUdFPV0sCitbTk9fU09DS0FERFJfU1RPUkFHRT1ZZXNQbGVhc2VdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CitdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NPQ0tBRERSX1NUT1JBR0VdKQorIworIyBEZWZpbmUgTk9fSVBWNiBpZiB5b3UgbGFjayBJUHY2IHN1cHBvcnQgYW5kIGdldGFkZHJpbmZvKCkuCitBQ19DSEVDS19UWVBFKFtzdHJ1Y3QgYWRkcmluZm9dLFsKKyBHSVRfQ0hFQ0tfRlVOQyhbZ2V0YWRkcmluZm9dLAorICBbTk9fSVBWNj1dLAorICBbTk9fSVBWNj1ZZXNQbGVhc2VdKQorXSxbTk9fSVBWNj1ZZXNQbGVhc2VdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KK10pCitHSVRfQ09ORl9TVUJTVChbTk9fSVBWNl0pCisjCisjIERlZmluZSBOT19SRUdFWCBpZiB5b3UgaGF2ZSBubyBvciBpbmZlcmlvciByZWdleCBzdXBwb3J0IGluIHlvdXIgQyBsaWJyYXJ5LgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIHBsYXRmb3JtIHJlZ2V4IGNhbiBoYW5kbGUgbnVsbCBieXRlc10sCisgW2FjX2N2X2NfZXhjZWxsZW50X3JlZ2V4XSwgWworQUNfRUdSRVBfQ1BQKHlpcHBlZXllc3dlaGF2ZWl0LAorCUFDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVAorI2luY2x1ZGUgPHJlZ2V4Lmg+CitdLAorWyNpZmRlZiBSRUdfU1RBUlRFTkQKK3lpcHBlZXllc3dlaGF2ZWl0CisjZW5kaWYKK10pLAorCVthY19jdl9jX2V4Y2VsbGVudF9yZWdleD15ZXNdLAorCVthY19jdl9jX2V4Y2VsbGVudF9yZWdleD1ub10pCitdKQoraWYgdGVzdCAkYWNfY3ZfY19leGNlbGxlbnRfcmVnZXggPSB5ZXM7IHRoZW4KKwlOT19SRUdFWD0KK2Vsc2UKKwlOT19SRUdFWD1ZZXNQbGVhc2UKK2ZpCitHSVRfQ09ORl9TVUJTVChbTk9fUkVHRVhdKQorIworIyBEZWZpbmUgRlJFQURfUkVBRFNfRElSRUNUT1JJRVMgaWYgeW91ciBhcmUgb24gYSBzeXN0ZW0gd2hpY2ggc3VjY2VlZHMKKyMgd2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgZnJvbSBhbiBmb3BlbidlZCBkaXJlY3RvcnkuCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzeXN0ZW0gc3VjY2VlZHMgdG8gcmVhZCBmb3BlbidlZCBkaXJlY3RvcnldLAorIFthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllc10sCitbCitBQ19SVU5fSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oW0FDX0lOQ0xVREVTX0RFRkFVTFRdLAorCQlbW2NoYXIgYzsKKwkJRklMRSAqZiA9IGZvcGVuKCIuIiwgInIiKTsKKwkJcmV0dXJuIGYgJiYgZnJlYWQoJmMsIDEsIDEsIGYpXV0pXSwKKwlbYWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9bm9dLAorCVthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz15ZXNdKQorXSkKK2lmIHRlc3QgJGFjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzID0geWVzOyB0aGVuCisJRlJFQURfUkVBRFNfRElSRUNUT1JJRVM9VW5mb3J0dW5hdGVseVllcworZWxzZQorCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTPQorZmkKK0dJVF9DT05GX1NVQlNUKFtGUkVBRF9SRUFEU19ESVJFQ1RPUklFU10pCisjCisjIERlZmluZSBTTlBSSU5URl9SRVRVUk5TX0JPR1VTIGlmIHlvdXIgYXJlIG9uIGEgc3lzdGVtIHdoaWNoIHNucHJpbnRmKCkKKyMgb3IgdnNucHJpbnRmKCkgcmV0dXJuIC0xIGluc3RlYWQgb2YgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd291bGQKKyMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdGhlIGZpbmFsIHN0cmluZyBpZiBlbm91Z2ggc3BhY2UgaGFkIGJlZW4gYXZhaWxhYmxlLgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc25wcmludGYoKSBhbmQvb3IgdnNucHJpbnRmKCkgcmV0dXJuIGJvZ3VzIHZhbHVlXSwKKyBbYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1c10sCitbCitBQ19SVU5fSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oW0FDX0lOQ0xVREVTX0RFRkFVTFQKKwkJI2luY2x1ZGUgInN0ZGFyZy5oIgorCisJCWludCB0ZXN0X3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKwkJeworCQkgIGludCByZXQ7CisJCSAgdmFfbGlzdCBhcDsKKwkJICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKwkJICByZXQgPSB2c25wcmludGYoc3RyLCBtYXhzaXplLCBmb3JtYXQsIGFwKTsKKwkJICB2YV9lbmQoYXApOworCQkgIHJldHVybiByZXQ7CisJCX1dLAorCQlbW2NoYXIgYnVmWzZdOworCQkgIGlmICh0ZXN0X3ZzbnByaW50ZihidWYsIDMsICIlcyIsICIxMjM0NSIpICE9IDUKKwkJICAgICAgfHwgc3RyY21wKGJ1ZiwgIjEyIikpIHJldHVybiAxOworCQkgIGlmIChzbnByaW50ZihidWYsIDMsICIlcyIsICIxMjM0NSIpICE9IDUKKwkJICAgICAgfHwgc3RyY21wKGJ1ZiwgIjEyIikpIHJldHVybiAxXV0pXSwKKwlbYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1cz1ub10sCisJW2FjX2N2X3NucHJpbnRmX3JldHVybnNfYm9ndXM9eWVzXSkKK10pCitpZiB0ZXN0ICRhY19jdl9zbnByaW50Zl9yZXR1cm5zX2JvZ3VzID0geWVzOyB0aGVuCisJU05QUklOVEZfUkVUVVJOU19CT0dVUz1VbmZvcnR1bmF0ZWx5WWVzCitlbHNlCisJU05QUklOVEZfUkVUVVJOU19CT0dVUz0KK2ZpCitHSVRfQ09ORl9TVUJTVChbU05QUklOVEZfUkVUVVJOU19CT0dVU10pCisKKworIyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KKyMjIChpbiBkZWZhdWx0IEMgbGlicmFyeSBhbmQgbGlicmFyaWVzIGNoZWNrZWQgYnkgQUNfQ0hFQ0tfTElCKQorQUNfTVNHX05PVElDRShbQ0hFQ0tTIGZvciBsaWJyYXJ5IGZ1bmN0aW9uc10pCisjCisjIERlZmluZSBOT19MSUJHRU5fSCBpZiB5b3UgZG9uJ3QgaGF2ZSBsaWJnZW4uaC4KK0FDX0NIRUNLX0hFQURFUihbbGliZ2VuLmhdLAorW05PX0xJQkdFTl9IPV0sCitbTk9fTElCR0VOX0g9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19MSUJHRU5fSF0pCisjCisjIERlZmluZSBIQVZFX1BBVEhTX0ggaWYgeW91IGhhdmUgcGF0aHMuaC4KK0FDX0NIRUNLX0hFQURFUihbcGF0aHMuaF0sCitbSEFWRV9QQVRIU19IPVllc1BsZWFzZV0sCitbSEFWRV9QQVRIU19IPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9QQVRIU19IXSkKKyMKKyMgRGVmaW5lIEhBVkVfTElCQ0hBUlNFVF9IIGlmIGhhdmUgbGliY2hhcnNldC5oCitBQ19DSEVDS19IRUFERVIoW2xpYmNoYXJzZXQuaF0sCitbSEFWRV9MSUJDSEFSU0VUX0g9WWVzUGxlYXNlXSwKK1tIQVZFX0xJQkNIQVJTRVRfSD1dKQorR0lUX0NPTkZfU1VCU1QoW0hBVkVfTElCQ0hBUlNFVF9IXSkKKyMgRGVmaW5lIENIQVJTRVRfTElCIGlmIGxpYmljb252IGRvZXMgbm90IGV4cG9ydCB0aGUgbG9jYWxlX2NoYXJzZXQgc3ltYm9sCisjIGFuZCBsaWJjaGFyc2V0IGRvZXMKK0NIQVJTRVRfTElCPQorQUNfQ0hFQ0tfTElCKFtpY29udl0sIFtsb2NhbGVfY2hhcnNldF0sCisgICAgICAgW10sCisgICAgICAgW0FDX0NIRUNLX0xJQihbY2hhcnNldF0sIFtsb2NhbGVfY2hhcnNldF0sCisgICAgICAgICAgICAgICAgICAgICBbQ0hBUlNFVF9MSUI9LWxjaGFyc2V0XSldKQorR0lUX0NPTkZfU1VCU1QoW0NIQVJTRVRfTElCXSkKKyMKKyMgRGVmaW5lIE5PX1NUUkNBU0VTVFIgaWYgeW91IGRvbid0IGhhdmUgc3RyY2FzZXN0ci4KK0dJVF9DSEVDS19GVU5DKHN0cmNhc2VzdHIsCitbTk9fU1RSQ0FTRVNUUj1dLAorW05PX1NUUkNBU0VTVFI9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19TVFJDQVNFU1RSXSkKKyMKKyMgRGVmaW5lIE5PX1NUUlRPS19SIGlmIHlvdSBkb24ndCBoYXZlIHN0cnRva19yCitHSVRfQ0hFQ0tfRlVOQyhzdHJ0b2tfciwKK1tOT19TVFJUT0tfUj1dLAorW05PX1NUUlRPS19SPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fU1RSVE9LX1JdKQorIworIyBEZWZpbmUgTk9fRk5NQVRDSCBpZiB5b3UgZG9uJ3QgaGF2ZSBmbm1hdGNoCitHSVRfQ0hFQ0tfRlVOQyhmbm1hdGNoLAorW05PX0ZOTUFUQ0g9XSwKK1tOT19GTk1BVENIPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fRk5NQVRDSF0pCisjCisjIERlZmluZSBOT19GTk1BVENIX0NBU0VGT0xEIGlmIHlvdXIgZm5tYXRjaCBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdGhlCisjIEZOTV9DQVNFRk9MRCBHTlUgZXh0ZW5zaW9uLgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGZubWF0Y2ggZnVuY3Rpb24gc3VwcG9ydHMgdGhlIEZOTUFUQ0hfQ0FTRUZPTEQgR05VIGV4dGVuc2lvbl0sCisgW2FjX2N2X2NfZXhjZWxsZW50X2ZubWF0Y2hdLCBbCitBQ19FR1JFUF9DUFAoeWlwcGVleWVzd2VoYXZlaXQsCisJQUNfTEFOR19QUk9HUkFNKFsKKyNpbmNsdWRlIDxmbm1hdGNoLmg+CitdLAorWyNpZmRlZiBGTk1fQ0FTRUZPTEQKK3lpcHBlZXllc3dlaGF2ZWl0CisjZW5kaWYKK10pLAorCVthY19jdl9jX2V4Y2VsbGVudF9mbm1hdGNoPXllc10sCisJW2FjX2N2X2NfZXhjZWxsZW50X2ZubWF0Y2g9bm9dKQorXSkKK2lmIHRlc3QgJGFjX2N2X2NfZXhjZWxsZW50X2ZubWF0Y2ggPSB5ZXM7IHRoZW4KKwlOT19GTk1BVENIX0NBU0VGT0xEPQorZWxzZQorCU5PX0ZOTUFUQ0hfQ0FTRUZPTEQ9WWVzUGxlYXNlCitmaQorR0lUX0NPTkZfU1VCU1QoW05PX0ZOTUFUQ0hfQ0FTRUZPTERdKQorIworIyBEZWZpbmUgTk9fTUVNTUVNIGlmIHlvdSBkb24ndCBoYXZlIG1lbW1lbS4KK0dJVF9DSEVDS19GVU5DKG1lbW1lbSwKK1tOT19NRU1NRU09XSwKK1tOT19NRU1NRU09WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19NRU1NRU1dKQorIworIyBEZWZpbmUgTk9fU1RSTENQWSBpZiB5b3UgZG9uJ3QgaGF2ZSBzdHJsY3B5LgorR0lUX0NIRUNLX0ZVTkMoc3RybGNweSwKK1tOT19TVFJMQ1BZPV0sCitbTk9fU1RSTENQWT1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NUUkxDUFldKQorIworIyBEZWZpbmUgTk9fVUlOVE1BWF9UIGlmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSB1aW50bWF4X3QKK0FDX0NIRUNLX1RZUEUodWludG1heF90LAorW05PX1VJTlRNQVhfVD1dLAorW05PX1VJTlRNQVhfVD1ZZXNQbGVhc2VdLFsKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorXSkKK0dJVF9DT05GX1NVQlNUKFtOT19VSU5UTUFYX1RdKQorIworIyBEZWZpbmUgTk9fU1RSVE9VTUFYIGlmIHlvdSBkb24ndCBoYXZlIHN0cnRvdW1heCBpbiB0aGUgQyBsaWJyYXJ5LgorR0lUX0NIRUNLX0ZVTkMoc3RydG91bWF4LAorW05PX1NUUlRPVU1BWD1dLAorW05PX1NUUlRPVU1BWD1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NUUlRPVU1BWF0pCisjCisjIERlZmluZSBOT19TRVRFTlYgaWYgeW91IGRvbid0IGhhdmUgc2V0ZW52IGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhzZXRlbnYsCitbTk9fU0VURU5WPV0sCitbTk9fU0VURU5WPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fU0VURU5WXSkKKyMKKyMgRGVmaW5lIE5PX1VOU0VURU5WIGlmIHlvdSBkb24ndCBoYXZlIHVuc2V0ZW52IGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyh1bnNldGVudiwKK1tOT19VTlNFVEVOVj1dLAorW05PX1VOU0VURU5WPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fVU5TRVRFTlZdKQorIworIyBEZWZpbmUgTk9fTUtEVEVNUCBpZiB5b3UgZG9uJ3QgaGF2ZSBta2R0ZW1wIGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhta2R0ZW1wLAorW05PX01LRFRFTVA9XSwKK1tOT19NS0RURU1QPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fTUtEVEVNUF0pCisjCisjIERlZmluZSBOT19NS1NURU1QUyBpZiB5b3UgZG9uJ3QgaGF2ZSBta3N0ZW1wcyBpbiB0aGUgQyBsaWJyYXJ5LgorR0lUX0NIRUNLX0ZVTkMobWtzdGVtcHMsCitbTk9fTUtTVEVNUFM9XSwKK1tOT19NS1NURU1QUz1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX01LU1RFTVBTXSkKKyMKKyMgRGVmaW5lIE5PX0lOSVRHUk9VUFMgaWYgeW91IGRvbid0IGhhdmUgaW5pdGdyb3VwcyBpbiB0aGUgQyBsaWJyYXJ5LgorR0lUX0NIRUNLX0ZVTkMoaW5pdGdyb3VwcywKK1tOT19JTklUR1JPVVBTPV0sCitbTk9fSU5JVEdST1VQUz1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX0lOSVRHUk9VUFNdKQorIworIworIyBEZWZpbmUgTk9fTU1BUCBpZiB5b3Ugd2FudCB0byBhdm9pZCBtbWFwLgorIworIyBEZWZpbmUgTk9fSUNPTlYgaWYgeW91ciBsaWJjIGRvZXMgbm90IHByb3Blcmx5IHN1cHBvcnQgaWNvbnYuCisKKworIyMgT3RoZXIgY2hlY2tzLgorIyBEZWZpbmUgVVNFX1BJQyBpZiB5b3UgbmVlZCB0aGUgbWFpbiBnaXQgb2JqZWN0cyB0byBiZSBidWlsdCB3aXRoIC1mUElDCisjIGluIG9yZGVyIHRvIGJ1aWxkIGFuZCBsaW5rIHBlcmwvR2l0LnNvLiAgeDg2LTY0IHNlZW1zIHRvIG5lZWQgdGhpcy4KKyMKKyMgRGVmaW5lIE5PX1NZTUxJTktfSEVBRCBpZiB5b3UgbmV2ZXIgd2FudCAuZ2l0L0hFQUQgdG8gYmUgYSBzeW1ib2xpYyBsaW5rLgorIyBFbmFibGUgaXQgb24gV2luZG93cy4gIEJ5IGRlZmF1bHQsIHN5bXJlZnMgYXJlIHN0aWxsIHVzZWQuCisjCisjIERlZmluZSBOT19QVEhSRUFEUyBpZiB3ZSBkbyBub3QgaGF2ZSBwdGhyZWFkcy4KKyMKKyMgRGVmaW5lIFBUSFJFQURfTElCUyB0byB0aGUgbGlua2VyIGZsYWcgdXNlZCBmb3IgUHRocmVhZCBzdXBwb3J0LgorQUNfREVGVU4oW1BUSFJFQURURVNUX1NSQ10sIFsKK0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK11dLCBbWworCXB0aHJlYWRfbXV0ZXhfdCB0ZXN0X211dGV4OworCXB0aHJlYWRfa2V5X3QgdGVzdF9rZXk7CisJaW50IHJldGNvZGUgPSAwOworCXJldGNvZGUgfD0gcHRocmVhZF9rZXlfY3JlYXRlKCZ0ZXN0X2tleSwgKHZvaWQgKikwKTsKKwlyZXRjb2RlIHw9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmdGVzdF9tdXRleCwodm9pZCAqKTApOworCXJldGNvZGUgfD0gcHRocmVhZF9tdXRleF9sb2NrKCZ0ZXN0X211dGV4KTsKKwlyZXRjb2RlIHw9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0ZXN0X211dGV4KTsKKwlyZXR1cm4gcmV0Y29kZTsKK11dKV0pCisKK2RubCBBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitkbmwgICBbWyNpbmNsdWRlIDxwdGhyZWFkLmg+XV0sCitkbmwgICBbW3B0aHJlYWRfbXV0ZXhfdCB0ZXN0X211dGV4O11dCitkbmwgKV0pCisKK05PX1BUSFJFQURTPVVuZm9ydHVuYXRlbHlZZXMKK1BUSFJFQURfTElCUz0KKworaWYgdGVzdCAtbiAiJFVTRVJfTk9QVEhSRUFEIjsgdGhlbgorICAgQUNfTVNHX05PVElDRShbU2tpcHBpbmcgUE9TSVggVGhyZWFkcyBhdCB1c2VyIHJlcXVlc3QuXSkKKyMgaGFuZGxlIHRoZXNlIHNlcGFyYXRlbHkgc2luY2UgUFRIUkVBRF9DRkxBR1MgY291bGQgYmUgJy1scHRocmVhZHMKKyMgLURfUkVFTlRSQU5UJyBvciBzb21lIHN1Y2guCitlbGlmIHRlc3QgLXogIiRQVEhSRUFEX0NGTEFHUyI7IHRoZW4KKyAgdGhyZWFkc19mb3VuZD1ubworICBmb3Igb3B0IGluIC1tdCAtcHRocmVhZCAtbHB0aHJlYWQ7IGRvCisgICAgIG9sZF9DRkxBR1M9IiRDRkxBR1MiCisgICAgIENGTEFHUz0iJG9wdCAkQ0ZMQUdTIgorICAgICBBQ19NU0dfQ0hFQ0tJTkcoW0NoZWNraW5nIGZvciBQT1NJWCBUaHJlYWRzIHdpdGggJyRvcHQnXSkKKyAgICAgQUNfTElOS19JRkVMU0UoW1BUSFJFQURURVNUX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJCU5PX1BUSFJFQURTPQorCQlQVEhSRUFEX0xJQlM9IiRvcHQiCisJCVBUSFJFQURfQ0ZMQUdTPSIkb3B0IgorCQl0aHJlYWRzX2ZvdW5kPXllcworCQlicmVhaworCV0sCisJW0FDX01TR19SRVNVTFQoW25vXSldKQorICAgICAgQ0ZMQUdTPSIkb2xkX0NGTEFHUyIKKyAgZG9uZQorICBpZiB0ZXN0ICR0aHJlYWRzX2ZvdW5kICE9IHllczsgdGhlbgorICAgIEFDX0NIRUNLX0xJQihbcHRocmVhZF0sIFtwdGhyZWFkX2NyZWF0ZV0sCisJW1BUSFJFQURfTElCUz0iLWxwdGhyZWFkIl0sCisJW05PX1BUSFJFQURTPVVuZm9ydHVuYXRlbHlZZXNdKQorICBmaQorZWxzZQorICBvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRQVEhSRUFEX0NGTEFHUyAkQ0ZMQUdTIgorICBBQ19NU0dfQ0hFQ0tJTkcoW0NoZWNraW5nIGZvciBQT1NJWCBUaHJlYWRzIHdpdGggJyRQVEhSRUFEX0NGTEFHUyddKQorICBBQ19MSU5LX0lGRUxTRShbUFRIUkVBRFRFU1RfU1JDXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkJTk9fUFRIUkVBRFM9CisJCVBUSFJFQURfTElCUz0iJFBUSFJFQURfQ0ZMQUdTIgorCV0sCisJW0FDX01TR19SRVNVTFQoW25vXSldKQorCisgIENGTEFHUz0iJG9sZF9DRkxBR1MiCitmaQorCitDRkxBR1M9IiRvbGRfQ0ZMQUdTIgorCitHSVRfQ09ORl9TVUJTVChbUFRIUkVBRF9DRkxBR1NdKQorR0lUX0NPTkZfU1VCU1QoW1BUSFJFQURfTElCU10pCitHSVRfQ09ORl9TVUJTVChbTk9fUFRIUkVBRFNdKQorCisjIyBPdXRwdXQgZmlsZXMKK0FDX0NPTkZJR19GSUxFUyhbIiR7Y29uZmlnX2ZpbGV9IjoiJHtjb25maWdfaW59Il0pCitBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL2Nvbm5lY3QuYyBiL2Nvbm5lY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWU1NmJhCi0tLSAvZGV2L251bGwKKysrIGIvY29ubmVjdC5jCkBAIC0wLDAgKzEsNjcyIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAidXJsLmgiCisKK3N0YXRpYyBjaGFyICpzZXJ2ZXJfY2FwYWJpbGl0aWVzOworCitzdGF0aWMgaW50IGNoZWNrX3JlZihjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaWYgKCFmbGFncykKKwkJcmV0dXJuIDE7CisKKwlpZiAobGVuIDwgNSB8fCBtZW1jbXAobmFtZSwgInJlZnMvIiwgNSkpCisJCXJldHVybiAwOworCisJLyogU2tpcCB0aGUgInJlZnMvIiBwYXJ0ICovCisJbmFtZSArPSA1OworCWxlbiAtPSA1OworCisJLyogUkVGX05PUk1BTCBtZWFucyB0aGF0IHdlIGRvbid0IHdhbnQgdGhlIG1hZ2ljIGZha2UgdGFnIHJlZnMgKi8KKwlpZiAoKGZsYWdzICYgUkVGX05PUk1BTCkgJiYgY2hlY2tfcmVmbmFtZV9mb3JtYXQobmFtZSwgMCkpCisJCXJldHVybiAwOworCisJLyogUkVGX0hFQURTIG1lYW5zIHRoYXQgd2Ugd2FudCByZWd1bGFyIGJyYW5jaCBoZWFkcyAqLworCWlmICgoZmxhZ3MgJiBSRUZfSEVBRFMpICYmICFtZW1jbXAobmFtZSwgImhlYWRzLyIsIDYpKQorCQlyZXR1cm4gMTsKKworCS8qIFJFRl9UQUdTIG1lYW5zIHRoYXQgd2Ugd2FudCB0YWdzICovCisJaWYgKChmbGFncyAmIFJFRl9UQUdTKSAmJiAhbWVtY21wKG5hbWUsICJ0YWdzLyIsIDUpKQorCQlyZXR1cm4gMTsKKworCS8qIEFsbCB0eXBlIGJpdHMgY2xlYXIgbWVhbnMgdGhhdCB3ZSBhcmUgb2sgd2l0aCBhbnl0aGluZyAqLworCXJldHVybiAhKGZsYWdzICYgflJFRl9OT1JNQUwpOworfQorCitpbnQgY2hlY2tfcmVmX3R5cGUoY29uc3Qgc3RydWN0IHJlZiAqcmVmLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGNoZWNrX3JlZihyZWYtPm5hbWUsIHN0cmxlbihyZWYtPm5hbWUpLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9leHRyYV9oYXZlKHN0cnVjdCBleHRyYV9oYXZlX29iamVjdHMgKmV4dHJhLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCUFMTE9DX0dST1coZXh0cmEtPmFycmF5LCBleHRyYS0+bnIgKyAxLCBleHRyYS0+YWxsb2MpOworCWhhc2hjcHkoJihleHRyYS0+YXJyYXlbZXh0cmEtPm5yXVswXSksIHNoYTEpOworCWV4dHJhLT5ucisrOworfQorCitzdGF0aWMgdm9pZCBkaWVfaW5pdGlhbF9jb250YWN0KGludCBnb3RfYXRfbGVhc3Rfb25lX2hlYWQpCit7CisJaWYgKGdvdF9hdF9sZWFzdF9vbmVfaGVhZCkKKwkJZGllKCJUaGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0Iik7CisJZWxzZQorCQlkaWUoIkNvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuXG5cbiIKKwkJICAgICJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKwkJICAgICJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIpOworfQorCisvKgorICogUmVhZCBhbGwgdGhlIHJlZnMgZnJvbSB0aGUgb3RoZXIgZW5kCisgKi8KK3N0cnVjdCByZWYgKipnZXRfcmVtb3RlX2hlYWRzKGludCBpbiwgc3RydWN0IHJlZiAqKmxpc3QsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgICAgICBzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzICpleHRyYV9oYXZlKQoreworCWludCBnb3RfYXRfbGVhc3Rfb25lX2hlYWQgPSAwOworCisJKmxpc3QgPSBOVUxMOworCWZvciAoOzspIHsKKwkJc3RydWN0IHJlZiAqcmVmOworCQl1bnNpZ25lZCBjaGFyIG9sZF9zaGExWzIwXTsKKwkJc3RhdGljIGNoYXIgYnVmZmVyWzEwMDBdOworCQljaGFyICpuYW1lOworCQlpbnQgbGVuLCBuYW1lX2xlbjsKKworCQlsZW4gPSBwYWNrZXRfcmVhZChpbiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJCWlmIChsZW4gPCAwKQorCQkJZGllX2luaXRpYWxfY29udGFjdChnb3RfYXRfbGVhc3Rfb25lX2hlYWQpOworCisJCWlmICghbGVuKQorCQkJYnJlYWs7CisJCWlmIChidWZmZXJbbGVuLTFdID09ICdcbicpCisJCQlidWZmZXJbLS1sZW5dID0gMDsKKworCQlpZiAobGVuID4gNCAmJiAhcHJlZml4Y21wKGJ1ZmZlciwgIkVSUiAiKSkKKwkJCWRpZSgicmVtb3RlIGVycm9yOiAlcyIsIGJ1ZmZlciArIDQpOworCisJCWlmIChsZW4gPCA0MiB8fCBnZXRfc2hhMV9oZXgoYnVmZmVyLCBvbGRfc2hhMSkgfHwgYnVmZmVyWzQwXSAhPSAnICcpCisJCQlkaWUoInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIsIGJ1ZmZlcik7CisJCW5hbWUgPSBidWZmZXIgKyA0MTsKKworCQluYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwkJaWYgKGxlbiAhPSBuYW1lX2xlbiArIDQxKSB7CisJCQlmcmVlKHNlcnZlcl9jYXBhYmlsaXRpZXMpOworCQkJc2VydmVyX2NhcGFiaWxpdGllcyA9IHhzdHJkdXAobmFtZSArIG5hbWVfbGVuICsgMSk7CisJCX0KKworCQlpZiAoZXh0cmFfaGF2ZSAmJgorCQkgICAgbmFtZV9sZW4gPT0gNSAmJiAhbWVtY21wKCIuaGF2ZSIsIG5hbWUsIDUpKSB7CisJCQlhZGRfZXh0cmFfaGF2ZShleHRyYV9oYXZlLCBvbGRfc2hhMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghY2hlY2tfcmVmKG5hbWUsIG5hbWVfbGVuLCBmbGFncykpCisJCQljb250aW51ZTsKKwkJcmVmID0gYWxsb2NfcmVmKGJ1ZmZlciArIDQxKTsKKwkJaGFzaGNweShyZWYtPm9sZF9zaGExLCBvbGRfc2hhMSk7CisJCSpsaXN0ID0gcmVmOworCQlsaXN0ID0gJnJlZi0+bmV4dDsKKwkJZ290X2F0X2xlYXN0X29uZV9oZWFkID0gMTsKKwl9CisJcmV0dXJuIGxpc3Q7Cit9CisKK2NvbnN0IGNoYXIgKnBhcnNlX2ZlYXR1cmVfdmFsdWUoY29uc3QgY2hhciAqZmVhdHVyZV9saXN0LCBjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgKmxlbnApCit7CisJaW50IGxlbjsKKworCWlmICghZmVhdHVyZV9saXN0KQorCQlyZXR1cm4gTlVMTDsKKworCWxlbiA9IHN0cmxlbihmZWF0dXJlKTsKKwl3aGlsZSAoKmZlYXR1cmVfbGlzdCkgeworCQljb25zdCBjaGFyICpmb3VuZCA9IHN0cnN0cihmZWF0dXJlX2xpc3QsIGZlYXR1cmUpOworCQlpZiAoIWZvdW5kKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChmZWF0dXJlX2xpc3QgPT0gZm91bmQgfHwgaXNzcGFjZShmb3VuZFstMV0pKSB7CisJCQljb25zdCBjaGFyICp2YWx1ZSA9IGZvdW5kICsgbGVuOworCQkJLyogZmVhdHVyZSB3aXRoIG5vIHZhbHVlIChlLmcuLCAidGhpbi1wYWNrIikgKi8KKwkJCWlmICghKnZhbHVlIHx8IGlzc3BhY2UoKnZhbHVlKSkgeworCQkJCWlmIChsZW5wKQorCQkJCQkqbGVucCA9IDA7CisJCQkJcmV0dXJuIHZhbHVlOworCQkJfQorCQkJLyogZmVhdHVyZSB3aXRoIGEgdmFsdWUgKGUuZy4sICJhZ2VudD1naXQvMS4yLjMiKSAqLworCQkJZWxzZSBpZiAoKnZhbHVlID09ICc9JykgeworCQkJCXZhbHVlKys7CisJCQkJaWYgKGxlbnApCisJCQkJCSpsZW5wID0gc3RyY3Nwbih2YWx1ZSwgIiBcdFxuIik7CisJCQkJcmV0dXJuIHZhbHVlOworCQkJfQorCQkJLyoKKwkJCSAqIG90aGVyd2lzZSB3ZSBtYXRjaGVkIGEgc3Vic3RyaW5nIG9mIGFub3RoZXIgZmVhdHVyZTsKKwkJCSAqIGtlZXAgbG9va2luZworCQkJICovCisJCX0KKwkJZmVhdHVyZV9saXN0ID0gZm91bmQgKyAxOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChjb25zdCBjaGFyICpmZWF0dXJlX2xpc3QsIGNvbnN0IGNoYXIgKmZlYXR1cmUpCit7CisJcmV0dXJuICEhcGFyc2VfZmVhdHVyZV92YWx1ZShmZWF0dXJlX2xpc3QsIGZlYXR1cmUsIE5VTEwpOworfQorCitjb25zdCBjaGFyICpzZXJ2ZXJfZmVhdHVyZV92YWx1ZShjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgKmxlbikKK3sKKwlyZXR1cm4gcGFyc2VfZmVhdHVyZV92YWx1ZShzZXJ2ZXJfY2FwYWJpbGl0aWVzLCBmZWF0dXJlLCBsZW4pOworfQorCitpbnQgc2VydmVyX3N1cHBvcnRzKGNvbnN0IGNoYXIgKmZlYXR1cmUpCit7CisJcmV0dXJuICEhc2VydmVyX2ZlYXR1cmVfdmFsdWUoZmVhdHVyZSwgTlVMTCk7Cit9CisKK2VudW0gcHJvdG9jb2wgeworCVBST1RPX0xPQ0FMID0gMSwKKwlQUk9UT19TU0gsCisJUFJPVE9fR0lUCit9OworCitzdGF0aWMgZW51bSBwcm90b2NvbCBnZXRfcHJvdG9jb2woY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAic3NoIikpCisJCXJldHVybiBQUk9UT19TU0g7CisJaWYgKCFzdHJjbXAobmFtZSwgImdpdCIpKQorCQlyZXR1cm4gUFJPVE9fR0lUOworCWlmICghc3RyY21wKG5hbWUsICJnaXQrc3NoIikpCisJCXJldHVybiBQUk9UT19TU0g7CisJaWYgKCFzdHJjbXAobmFtZSwgInNzaCtnaXQiKSkKKwkJcmV0dXJuIFBST1RPX1NTSDsKKwlpZiAoIXN0cmNtcChuYW1lLCAiZmlsZSIpKQorCQlyZXR1cm4gUFJPVE9fTE9DQUw7CisJZGllKCJJIGRvbid0IGhhbmRsZSBwcm90b2NvbCAnJXMnIiwgbmFtZSk7Cit9CisKKyNkZWZpbmUgU1RSXyhzKQkjIHMKKyNkZWZpbmUgU1RSKHMpCVNUUl8ocykKKworc3RhdGljIHZvaWQgZ2V0X2hvc3RfYW5kX3BvcnQoY2hhciAqKmhvc3QsIGNvbnN0IGNoYXIgKipwb3J0KQoreworCWNoYXIgKmNvbG9uLCAqZW5kOworCisJaWYgKCpob3N0WzBdID09ICdbJykgeworCQllbmQgPSBzdHJjaHIoKmhvc3QgKyAxLCAnXScpOworCQlpZiAoZW5kKSB7CisJCQkqZW5kID0gMDsKKwkJCWVuZCsrOworCQkJKCpob3N0KSsrOworCQl9IGVsc2UKKwkJCWVuZCA9ICpob3N0OworCX0gZWxzZQorCQllbmQgPSAqaG9zdDsKKwljb2xvbiA9IHN0cmNocihlbmQsICc6Jyk7CisKKwlpZiAoY29sb24pIHsKKwkJKmNvbG9uID0gMDsKKwkJKnBvcnQgPSBjb2xvbiArIDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBlbmFibGVfa2VlcGFsaXZlKGludCBzb2NrZmQpCit7CisJaW50IGthID0gMTsKKworCWlmIChzZXRzb2Nrb3B0KHNvY2tmZCwgU09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLCAma2EsIHNpemVvZihrYSkpIDwgMCkKKwkJZnByaW50ZihzdGRlcnIsICJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQ6ICVzXG4iLAorCQkJc3RyZXJyb3IoZXJybm8pKTsKK30KKworI2lmbmRlZiBOT19JUFY2CisKK3N0YXRpYyBjb25zdCBjaGFyICphaV9uYW1lKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqYWkpCit7CisJc3RhdGljIGNoYXIgYWRkcltOSV9NQVhIT1NUXTsKKwlpZiAoZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLCBhZGRyLCBzaXplb2YoYWRkciksIE5VTEwsIDAsCisJCQlOSV9OVU1FUklDSE9TVCkgIT0gMCkKKwkJc3RyY3B5KGFkZHIsICIodW5rbm93bikiKTsKKworCXJldHVybiBhZGRyOworfQorCisvKgorICogUmV0dXJucyBhIGNvbm5lY3RlZCBzb2NrZXQoKSBmZCwgb3IgZWxzZSBkaWUoKXMuCisgKi8KK3N0YXRpYyBpbnQgZ2l0X3RjcF9jb25uZWN0X3NvY2soY2hhciAqaG9zdCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgZXJyb3JfbWVzc2FnZSA9IFNUUkJVRl9JTklUOworCWludCBzb2NrZmQgPSAtMTsKKwljb25zdCBjaGFyICpwb3J0ID0gU1RSKERFRkFVTFRfR0lUX1BPUlQpOworCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpMCwgKmFpOworCWludCBnYWk7CisJaW50IGNudCA9IDA7CisKKwlnZXRfaG9zdF9hbmRfcG9ydCgmaG9zdCwgJnBvcnQpOworCWlmICghKnBvcnQpCisJCXBvcnQgPSAiPG5vbmU+IjsKKworCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKworCWlmIChmbGFncyAmIENPTk5FQ1RfVkVSQk9TRSkKKwkJZnByaW50ZihzdGRlcnIsICJMb29raW5nIHVwICVzIC4uLiAiLCBob3N0KTsKKworCWdhaSA9IGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsICZoaW50cywgJmFpKTsKKwlpZiAoZ2FpKQorCQlkaWUoIlVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIiwgaG9zdCwgcG9ydCwgZ2FpX3N0cmVycm9yKGdhaSkpOworCisJaWYgKGZsYWdzICYgQ09OTkVDVF9WRVJCT1NFKQorCQlmcHJpbnRmKHN0ZGVyciwgImRvbmUuXG5Db25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIiwgaG9zdCwgcG9ydCk7CisKKwlmb3IgKGFpMCA9IGFpOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCwgY250KyspIHsKKwkJc29ja2ZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksCisJCQkJYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworCQlpZiAoKHNvY2tmZCA8IDApIHx8CisJCSAgICAoY29ubmVjdChzb2NrZmQsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSkgeworCQkJc3RyYnVmX2FkZGYoJmVycm9yX21lc3NhZ2UsICIlc1slZDogJXNdOiBlcnJubz0lc1xuIiwKKwkJCQkgICAgaG9zdCwgY250LCBhaV9uYW1lKGFpKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWlmICgwIDw9IHNvY2tmZCkKKwkJCQljbG9zZShzb2NrZmQpOworCQkJc29ja2ZkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzICIsIGFpX25hbWUoYWkpKTsKKwkJYnJlYWs7CisJfQorCisJZnJlZWFkZHJpbmZvKGFpMCk7CisKKwlpZiAoc29ja2ZkIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gY29ubmVjdCB0byAlczpcbiVzIiwgaG9zdCwgZXJyb3JfbWVzc2FnZS5idWYpOworCisJZW5hYmxlX2tlZXBhbGl2ZShzb2NrZmQpOworCisJaWYgKGZsYWdzICYgQ09OTkVDVF9WRVJCT1NFKQorCQlmcHJpbnRmKHN0ZGVyciwgImRvbmUuXG4iKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZlcnJvcl9tZXNzYWdlKTsKKworCXJldHVybiBzb2NrZmQ7Cit9CisKKyNlbHNlIC8qIE5PX0lQVjYgKi8KKworLyoKKyAqIFJldHVybnMgYSBjb25uZWN0ZWQgc29ja2V0KCkgZmQsIG9yIGVsc2UgZGllKClzLgorICovCitzdGF0aWMgaW50IGdpdF90Y3BfY29ubmVjdF9zb2NrKGNoYXIgKmhvc3QsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVycm9yX21lc3NhZ2UgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc29ja2ZkID0gLTE7CisJY29uc3QgY2hhciAqcG9ydCA9IFNUUihERUZBVUxUX0dJVF9QT1JUKTsKKwljaGFyICplcDsKKwlzdHJ1Y3QgaG9zdGVudCAqaGU7CisJc3RydWN0IHNvY2thZGRyX2luIHNhOworCWNoYXIgKiphcDsKKwl1bnNpZ25lZCBpbnQgbnBvcnQ7CisJaW50IGNudDsKKworCWdldF9ob3N0X2FuZF9wb3J0KCZob3N0LCAmcG9ydCk7CisKKwlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCWZwcmludGYoc3RkZXJyLCAiTG9va2luZyB1cCAlcyAuLi4gIiwgaG9zdCk7CisKKwloZSA9IGdldGhvc3RieW5hbWUoaG9zdCk7CisJaWYgKCFoZSkKKwkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgaHN0cmVycm9yKGhfZXJybm8pKTsKKwlucG9ydCA9IHN0cnRvdWwocG9ydCwgJmVwLCAxMCk7CisJaWYgKCBlcCA9PSBwb3J0IHx8ICplcCApIHsKKwkJLyogTm90IG51bWVyaWMgKi8KKwkJc3RydWN0IHNlcnZlbnQgKnNlID0gZ2V0c2VydmJ5bmFtZShwb3J0LCJ0Y3AiKTsKKwkJaWYgKCAhc2UgKQorCQkJZGllKCJVbmtub3duIHBvcnQgJXMiLCBwb3J0KTsKKwkJbnBvcnQgPSBzZS0+c19wb3J0OworCX0KKworCWlmIChmbGFncyAmIENPTk5FQ1RfVkVSQk9TRSkKKwkJZnByaW50ZihzdGRlcnIsICJkb25lLlxuQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIsIGhvc3QsIHBvcnQpOworCisJZm9yIChjbnQgPSAwLCBhcCA9IGhlLT5oX2FkZHJfbGlzdDsgKmFwOyBhcCsrLCBjbnQrKykgeworCQltZW1zZXQoJnNhLCAwLCBzaXplb2Ygc2EpOworCQlzYS5zaW5fZmFtaWx5ID0gaGUtPmhfYWRkcnR5cGU7CisJCXNhLnNpbl9wb3J0ID0gaHRvbnMobnBvcnQpOworCQltZW1jcHkoJnNhLnNpbl9hZGRyLCAqYXAsIGhlLT5oX2xlbmd0aCk7CisKKwkJc29ja2ZkID0gc29ja2V0KGhlLT5oX2FkZHJ0eXBlLCBTT0NLX1NUUkVBTSwgMCk7CisJCWlmICgoc29ja2ZkIDwgMCkgfHwKKwkJICAgIGNvbm5lY3Qoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyICopJnNhLCBzaXplb2Ygc2EpIDwgMCkgeworCQkJc3RyYnVmX2FkZGYoJmVycm9yX21lc3NhZ2UsICIlc1slZDogJXNdOiBlcnJubz0lc1xuIiwKKwkJCQlob3N0LAorCQkJCWNudCwKKwkJCQlpbmV0X250b2EoKihzdHJ1Y3QgaW5fYWRkciAqKSZzYS5zaW5fYWRkciksCisJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCWlmICgwIDw9IHNvY2tmZCkKKwkJCQljbG9zZShzb2NrZmQpOworCQkJc29ja2ZkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzICIsCisJCQkJaW5ldF9udG9hKCooc3RydWN0IGluX2FkZHIgKikmc2Euc2luX2FkZHIpKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNvY2tmZCA8IDApCisJCWRpZSgidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4lcyIsIGhvc3QsIGVycm9yX21lc3NhZ2UuYnVmKTsKKworCWVuYWJsZV9rZWVwYWxpdmUoc29ja2ZkKTsKKworCWlmIChmbGFncyAmIENPTk5FQ1RfVkVSQk9TRSkKKwkJZnByaW50ZihzdGRlcnIsICJkb25lLlxuIik7CisKKwlyZXR1cm4gc29ja2ZkOworfQorCisjZW5kaWYgLyogTk9fSVBWNiAqLworCisKK3N0YXRpYyB2b2lkIGdpdF90Y3BfY29ubmVjdChpbnQgZmRbMl0sIGNoYXIgKmhvc3QsIGludCBmbGFncykKK3sKKwlpbnQgc29ja2ZkID0gZ2l0X3RjcF9jb25uZWN0X3NvY2soaG9zdCwgZmxhZ3MpOworCisJZmRbMF0gPSBzb2NrZmQ7CisJZmRbMV0gPSBkdXAoc29ja2ZkKTsKK30KKworCitzdGF0aWMgY2hhciAqZ2l0X3Byb3h5X2NvbW1hbmQ7CisKK3N0YXRpYyBpbnQgZ2l0X3Byb3h5X2NvbW1hbmRfb3B0aW9ucyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQl2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmdpdHByb3h5IikpIHsKKwkJY29uc3QgY2hhciAqZm9yX3BvczsKKwkJaW50IG1hdGNobGVuID0gLTE7CisJCWludCBob3N0bGVuOworCQljb25zdCBjaGFyICpyaG9zdF9uYW1lID0gY2I7CisJCWludCByaG9zdF9sZW4gPSBzdHJsZW4ocmhvc3RfbmFtZSk7CisKKwkJaWYgKGdpdF9wcm94eV9jb21tYW5kKQorCQkJcmV0dXJuIDA7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJLyogW2NvcmVdCisJCSAqIDsjIG1hdGNoZXMgd3d3Lmtlcm5lbC5vcmcgYXMgd2VsbAorCQkgKiBnaXRwcm94eSA9IG5ldGNhdHRlci0xIGZvciBrZXJuZWwub3JnCisJCSAqIGdpdHByb3h5ID0gbmV0Y2F0dGVyLTIgZm9yIHNhbXBsZS54egorCQkgKiBnaXRwcm94eSA9IG5ldGNhdHRlci1kZWZhdWx0CisJCSAqLworCQlmb3JfcG9zID0gc3Ryc3RyKHZhbHVlLCAiIGZvciAiKTsKKwkJaWYgKCFmb3JfcG9zKQorCQkJLyogbWF0Y2hlcyBldmVyeWJvZHkgKi8KKwkJCW1hdGNobGVuID0gc3RybGVuKHZhbHVlKTsKKwkJZWxzZSB7CisJCQlob3N0bGVuID0gc3RybGVuKGZvcl9wb3MgKyA1KTsKKwkJCWlmIChyaG9zdF9sZW4gPCBob3N0bGVuKQorCQkJCW1hdGNobGVuID0gLTE7CisJCQllbHNlIGlmICghc3RybmNtcChmb3JfcG9zICsgNSwKKwkJCQkJICByaG9zdF9uYW1lICsgcmhvc3RfbGVuIC0gaG9zdGxlbiwKKwkJCQkJICBob3N0bGVuKSAmJgorCQkJCSAoKHJob3N0X2xlbiA9PSBob3N0bGVuKSB8fAorCQkJCSAgcmhvc3RfbmFtZVtyaG9zdF9sZW4gLSBob3N0bGVuIC0xXSA9PSAnLicpKQorCQkJCW1hdGNobGVuID0gZm9yX3BvcyAtIHZhbHVlOworCQkJZWxzZQorCQkJCW1hdGNobGVuID0gLTE7CisJCX0KKwkJaWYgKDAgPD0gbWF0Y2hsZW4pIHsKKwkJCS8qIGNvcmUuZ2l0cHJveHkgPSBub25lIGZvciBrZXJuZWwub3JnICovCisJCQlpZiAobWF0Y2hsZW4gPT0gNCAmJgorCQkJICAgICFtZW1jbXAodmFsdWUsICJub25lIiwgNCkpCisJCQkJbWF0Y2hsZW4gPSAwOworCQkJZ2l0X3Byb3h5X2NvbW1hbmQgPSB4bWVtZHVweih2YWx1ZSwgbWF0Y2hsZW4pOworCQl9CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IGdpdF91c2VfcHJveHkoY29uc3QgY2hhciAqaG9zdCkKK3sKKwlnaXRfcHJveHlfY29tbWFuZCA9IGdldGVudigiR0lUX1BST1hZX0NPTU1BTkQiKTsKKwlnaXRfY29uZmlnKGdpdF9wcm94eV9jb21tYW5kX29wdGlvbnMsICh2b2lkKilob3N0KTsKKwlyZXR1cm4gKGdpdF9wcm94eV9jb21tYW5kICYmICpnaXRfcHJveHlfY29tbWFuZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2l0X3Byb3h5X2Nvbm5lY3QoaW50IGZkWzJdLCBjaGFyICpob3N0KQoreworCWNvbnN0IGNoYXIgKnBvcnQgPSBTVFIoREVGQVVMVF9HSVRfUE9SVCk7CisJY29uc3QgY2hhciAqKmFyZ3Y7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnByb3h5OworCisJZ2V0X2hvc3RfYW5kX3BvcnQoJmhvc3QsICZwb3J0KTsKKworCWFyZ3YgPSB4bWFsbG9jKHNpemVvZigqYXJndikgKiA0KTsKKwlhcmd2WzBdID0gZ2l0X3Byb3h5X2NvbW1hbmQ7CisJYXJndlsxXSA9IGhvc3Q7CisJYXJndlsyXSA9IHBvcnQ7CisJYXJndlszXSA9IE5VTEw7CisJcHJveHkgPSB4Y2FsbG9jKDEsIHNpemVvZigqcHJveHkpKTsKKwlwcm94eS0+YXJndiA9IGFyZ3Y7CisJcHJveHktPmluID0gLTE7CisJcHJveHktPm91dCA9IC0xOworCWlmIChzdGFydF9jb21tYW5kKHByb3h5KSkKKwkJZGllKCJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiLCBhcmd2WzBdKTsKKwlmZFswXSA9IHByb3h5LT5vdXQ7IC8qIHJlYWQgZnJvbSBwcm94eSBzdGRvdXQgKi8KKwlmZFsxXSA9IHByb3h5LT5pbjsgIC8qIHdyaXRlIHRvIHByb3h5IHN0ZGluICovCisJcmV0dXJuIHByb3h5OworfQorCisjZGVmaW5lIE1BWF9DTURfTEVOIDEwMjQKKworc3RhdGljIGNoYXIgKmdldF9wb3J0KGNoYXIgKmhvc3QpCit7CisJY2hhciAqZW5kOworCWNoYXIgKnAgPSBzdHJjaHIoaG9zdCwgJzonKTsKKworCWlmIChwKSB7CisJCWxvbmcgcG9ydCA9IHN0cnRvbChwICsgMSwgJmVuZCwgMTApOworCQlpZiAoZW5kICE9IHAgKyAxICYmICplbmQgPT0gJ1wwJyAmJiAwIDw9IHBvcnQgJiYgcG9ydCA8IDY1NTM2KSB7CisJCQkqcCA9ICdcMCc7CisJCQlyZXR1cm4gcCsxOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBub19mb3JrOworCisvKgorICogVGhpcyByZXR1cm5zIGEgZHVtbXkgY2hpbGRfcHJvY2VzcyBpZiB0aGUgdHJhbnNwb3J0IHByb3RvY29sIGRvZXMgbm90CisgKiBuZWVkIGZvcmsoMiksIG9yIGEgc3RydWN0IGNoaWxkX3Byb2Nlc3Mgb2JqZWN0IGlmIGl0IGRvZXMuICBPbmNlIGRvbmUsCisgKiBmaW5pc2ggdGhlIGNvbm5lY3Rpb24gd2l0aCBmaW5pc2hfY29ubmVjdCgpIHdpdGggdGhlIHZhbHVlIHJldHVybmVkIGZyb20KKyAqIHRoaXMgZnVuY3Rpb24gKGl0IGlzIHNhZmUgdG8gY2FsbCBmaW5pc2hfY29ubmVjdCgpIHdpdGggTlVMTCB0byBzdXBwb3J0CisgKiB0aGUgZm9ybWVyIGNhc2UpLgorICoKKyAqIElmIGl0IHJldHVybnMsIHRoZSBjb25uZWN0IGlzIHN1Y2Nlc3NmdWw7IGl0IGp1c3QgZGllcyBvbiBlcnJvcnMgKHRoaXMKKyAqIHdpbGwgaG9wZWZ1bGx5IGJlIGNoYW5nZWQgaW4gYSBsaWJpZmljYXRpb24gZWZmb3J0LCB0byByZXR1cm4gTlVMTCB3aGVuCisgKiB0aGUgY29ubmVjdGlvbiBmYWlsZWQpLgorICovCitzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2l0X2Nvbm5lY3QoaW50IGZkWzJdLCBjb25zdCBjaGFyICp1cmxfb3JpZywKKwkJCQkgIGNvbnN0IGNoYXIgKnByb2csIGludCBmbGFncykKK3sKKwljaGFyICp1cmw7CisJY2hhciAqaG9zdCwgKnBhdGg7CisJY2hhciAqZW5kOworCWludCBjOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uID0gJm5vX2Zvcms7CisJZW51bSBwcm90b2NvbCBwcm90b2NvbCA9IFBST1RPX0xPQ0FMOworCWludCBmcmVlX3BhdGggPSAwOworCWNoYXIgKnBvcnQgPSBOVUxMOworCWNvbnN0IGNoYXIgKiphcmc7CisJc3RydWN0IHN0cmJ1ZiBjbWQ7CisKKwkvKiBXaXRob3V0IHRoaXMgd2UgY2Fubm90IHJlbHkgb24gd2FpdHBpZCgpIHRvIHRlbGwKKwkgKiB3aGF0IGhhcHBlbmVkIHRvIG91ciBjaGlsZHJlbi4KKwkgKi8KKwlzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7CisKKwlpZiAoaXNfdXJsKHVybF9vcmlnKSkKKwkJdXJsID0gdXJsX2RlY29kZSh1cmxfb3JpZyk7CisJZWxzZQorCQl1cmwgPSB4c3RyZHVwKHVybF9vcmlnKTsKKworCWhvc3QgPSBzdHJzdHIodXJsLCAiOi8vIik7CisJaWYgKGhvc3QpIHsKKwkJKmhvc3QgPSAnXDAnOworCQlwcm90b2NvbCA9IGdldF9wcm90b2NvbCh1cmwpOworCQlob3N0ICs9IDM7CisJCWMgPSAnLyc7CisJfSBlbHNlIHsKKwkJaG9zdCA9IHVybDsKKwkJYyA9ICc6JzsKKwl9CisKKwkvKgorCSAqIERvbid0IGRvIGRlc3RydWN0aXZlIHRyYW5zZm9ybXMgd2l0aCBnaXQ6Ly8gYXMgdGhhdAorCSAqIHByb3RvY29sIGNvZGUgZG9lcyAnW10nIHVud3JhcHBpbmcgb2YgaXRzIG93bi4KKwkgKi8KKwlpZiAoaG9zdFswXSA9PSAnWycpIHsKKwkJZW5kID0gc3RyY2hyKGhvc3QgKyAxLCAnXScpOworCQlpZiAoZW5kKSB7CisJCQlpZiAocHJvdG9jb2wgIT0gUFJPVE9fR0lUKSB7CisJCQkJKmVuZCA9IDA7CisJCQkJaG9zdCsrOworCQkJfQorCQkJZW5kKys7CisJCX0gZWxzZQorCQkJZW5kID0gaG9zdDsKKwl9IGVsc2UKKwkJZW5kID0gaG9zdDsKKworCXBhdGggPSBzdHJjaHIoZW5kLCBjKTsKKwlpZiAocGF0aCAmJiAhaGFzX2Rvc19kcml2ZV9wcmVmaXgoZW5kKSkgeworCQlpZiAoYyA9PSAnOicpIHsKKwkJCXByb3RvY29sID0gUFJPVE9fU1NIOworCQkJKnBhdGgrKyA9ICdcMCc7CisJCX0KKwl9IGVsc2UKKwkJcGF0aCA9IGVuZDsKKworCWlmICghcGF0aCB8fCAhKnBhdGgpCisJCWRpZSgiTm8gcGF0aCBzcGVjaWZpZWQuIFNlZSAnbWFuIGdpdC1wdWxsJyBmb3IgdmFsaWQgdXJsIHN5bnRheCIpOworCisJLyoKKwkgKiBudWxsLXRlcm1pbmF0ZSBob3N0bmFtZSBhbmQgcG9pbnQgcGF0aCB0byB+IGZvciBVUkwncyBsaWtlIHRoaXM6CisJICogICAgc3NoOi8vaG9zdC54ei9+dXNlci9yZXBvCisJICovCisJaWYgKHByb3RvY29sICE9IFBST1RPX0xPQ0FMICYmIGhvc3QgIT0gdXJsKSB7CisJCWNoYXIgKnB0ciA9IHBhdGg7CisJCWlmIChwYXRoWzFdID09ICd+JykKKwkJCXBhdGgrKzsKKwkJZWxzZSB7CisJCQlwYXRoID0geHN0cmR1cChwdHIpOworCQkJZnJlZV9wYXRoID0gMTsKKwkJfQorCisJCSpwdHIgPSAnXDAnOworCX0KKworCS8qCisJICogQWRkIHN1cHBvcnQgZm9yIHNzaCBwb3J0OiBzc2g6Ly9ob3N0Lnh5Ojxwb3J0Pi8uLi4KKwkgKi8KKwlpZiAocHJvdG9jb2wgPT0gUFJPVE9fU1NIICYmIGhvc3QgIT0gdXJsKQorCQlwb3J0ID0gZ2V0X3BvcnQoZW5kKTsKKworCWlmIChwcm90b2NvbCA9PSBQUk9UT19HSVQpIHsKKwkJLyogVGhlc2UgdW5kZXJseWluZyBjb25uZWN0aW9uIGNvbW1hbmRzIGRpZSgpIGlmIHRoZXkKKwkJICogY2Fubm90IGNvbm5lY3QuCisJCSAqLworCQljaGFyICp0YXJnZXRfaG9zdCA9IHhzdHJkdXAoaG9zdCk7CisJCWlmIChnaXRfdXNlX3Byb3h5KGhvc3QpKQorCQkJY29ubiA9IGdpdF9wcm94eV9jb25uZWN0KGZkLCBob3N0KTsKKwkJZWxzZQorCQkJZ2l0X3RjcF9jb25uZWN0KGZkLCBob3N0LCBmbGFncyk7CisJCS8qCisJCSAqIFNlcGFyYXRlIG9yaWdpbmFsIHByb3RvY29sIGNvbXBvbmVudHMgcHJvZyBhbmQgcGF0aAorCQkgKiBmcm9tIGV4dGVuZGVkIGhvc3QgaGVhZGVyIHdpdGggYSBOVUwgYnl0ZS4KKwkJICoKKwkJICogTm90ZTogRG8gbm90IGFkZCBhbnkgb3RoZXIgaGVhZGVycyBoZXJlISAgRG9pbmcgc28KKwkJICogd2lsbCBjYXVzZSBvbGRlciBnaXQtZGFlbW9uIHNlcnZlcnMgdG8gY3Jhc2guCisJCSAqLworCQlwYWNrZXRfd3JpdGUoZmRbMV0sCisJCQkgICAgICIlcyAlcyVjaG9zdD0lcyVjIiwKKwkJCSAgICAgcHJvZywgcGF0aCwgMCwKKwkJCSAgICAgdGFyZ2V0X2hvc3QsIDApOworCQlmcmVlKHRhcmdldF9ob3N0KTsKKwkJZnJlZSh1cmwpOworCQlpZiAoZnJlZV9wYXRoKQorCQkJZnJlZShwYXRoKTsKKwkJcmV0dXJuIGNvbm47CisJfQorCisJY29ubiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpjb25uKSk7CisKKwlzdHJidWZfaW5pdCgmY21kLCBNQVhfQ01EX0xFTik7CisJc3RyYnVmX2FkZHN0cigmY21kLCBwcm9nKTsKKwlzdHJidWZfYWRkY2goJmNtZCwgJyAnKTsKKwlzcV9xdW90ZV9idWYoJmNtZCwgcGF0aCk7CisJaWYgKGNtZC5sZW4gPj0gTUFYX0NNRF9MRU4pCisJCWRpZSgiY29tbWFuZCBsaW5lIHRvbyBsb25nIik7CisKKwljb25uLT5pbiA9IGNvbm4tPm91dCA9IC0xOworCWNvbm4tPmFyZ3YgPSBhcmcgPSB4Y2FsbG9jKDcsIHNpemVvZigqYXJnKSk7CisJaWYgKHByb3RvY29sID09IFBST1RPX1NTSCkgeworCQljb25zdCBjaGFyICpzc2ggPSBnZXRlbnYoIkdJVF9TU0giKTsKKwkJaW50IHB1dHR5ID0gc3NoICYmIHN0cmNhc2VzdHIoc3NoLCAicGxpbmsiKTsKKwkJaWYgKCFzc2gpIHNzaCA9ICJzc2giOworCisJCSphcmcrKyA9IHNzaDsKKwkJaWYgKHB1dHR5ICYmICFzdHJjYXNlc3RyKHNzaCwgInRvcnRvaXNlcGxpbmsiKSkKKwkJCSphcmcrKyA9ICItYmF0Y2giOworCQlpZiAocG9ydCkgeworCQkJLyogUCBpcyBmb3IgUHVUVFksIHAgaXMgZm9yIE9wZW5TU0ggKi8KKwkJCSphcmcrKyA9IHB1dHR5ID8gIi1QIiA6ICItcCI7CisJCQkqYXJnKysgPSBwb3J0OworCQl9CisJCSphcmcrKyA9IGhvc3Q7CisJfQorCWVsc2UgeworCQkvKiByZW1vdmUgcmVwby1sb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQgKi8KKwkJY29ubi0+ZW52ID0gbG9jYWxfcmVwb19lbnY7CisJCWNvbm4tPnVzZV9zaGVsbCA9IDE7CisJfQorCSphcmcrKyA9IGNtZC5idWY7CisJKmFyZyA9IE5VTEw7CisKKwlpZiAoc3RhcnRfY29tbWFuZChjb25uKSkKKwkJZGllKCJ1bmFibGUgdG8gZm9yayIpOworCisJZmRbMF0gPSBjb25uLT5vdXQ7IC8qIHJlYWQgZnJvbSBjaGlsZCdzIHN0ZG91dCAqLworCWZkWzFdID0gY29ubi0+aW47ICAvKiB3cml0ZSB0byBjaGlsZCdzIHN0ZGluICovCisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJZnJlZSh1cmwpOworCWlmIChmcmVlX3BhdGgpCisJCWZyZWUocGF0aCk7CisJcmV0dXJuIGNvbm47Cit9CisKK2ludCBnaXRfY29ubmVjdGlvbl9pc19zb2NrZXQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4pCit7CisJcmV0dXJuIGNvbm4gPT0gJm5vX2Zvcms7Cit9CisKK2ludCBmaW5pc2hfY29ubmVjdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubikKK3sKKwlpbnQgY29kZTsKKwlpZiAoIWNvbm4gfHwgZ2l0X2Nvbm5lY3Rpb25faXNfc29ja2V0KGNvbm4pKQorCQlyZXR1cm4gMDsKKworCWNvZGUgPSBmaW5pc2hfY29tbWFuZChjb25uKTsKKwlmcmVlKGNvbm4tPmFyZ3YpOworCWZyZWUoY29ubik7CisJcmV0dXJuIGNvZGU7Cit9CmRpZmYgLS1naXQgYS9jb25uZWN0ZWQuYyBiL2Nvbm5lY3RlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODljMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25uZWN0ZWQuYwpAQCAtMCwwICsxLDYyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAiY29ubmVjdGVkLmgiCisKKy8qCisgKiBJZiB3ZSBmZWVkIGFsbCB0aGUgY29tbWl0cyB3ZSB3YW50IHRvIHZlcmlmeSB0byB0aGlzIGNvbW1hbmQKKyAqCisgKiAgJCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tc3RkaW4gLS1ub3QgLS1hbGwKKyAqCisgKiBhbmQgaWYgaXQgZG9lcyBub3QgZXJyb3Igb3V0LCB0aGF0IG1lYW5zIGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20KKyAqIHRoZXNlIGNvbW1pdHMgbG9jYWxseSBleGlzdHMgYW5kIGlzIGNvbm5lY3RlZCB0byBvdXIgZXhpc3RpbmcgcmVmcy4KKyAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgX25vdF8gdmFsaWRhdGUgdGhlIGluZGl2aWR1YWwgb2JqZWN0cy4KKyAqCisgKiBSZXR1cm5zIDAgaWYgZXZlcnl0aGluZyBpcyBjb25uZWN0ZWQsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqLworaW50IGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkKHNoYTFfaXRlcmF0ZV9mbiBmbiwgaW50IHF1aWV0LCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHJldl9saXN0OworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsicmV2LWxpc3QiLCAiLS1vYmplY3RzIiwKKwkJCSAgICAgICItLXN0ZGluIiwgIi0tbm90IiwgIi0tYWxsIiwgTlVMTCwgTlVMTH07CisJY2hhciBjb21taXRbNDFdOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IGVyciA9IDA7CisKKwlpZiAoZm4oY2JfZGF0YSwgc2hhMSkpCisJCXJldHVybiBlcnI7CisKKwlpZiAocXVpZXQpCisJCWFyZ3ZbNV0gPSAiLS1xdWlldCI7CisKKwltZW1zZXQoJnJldl9saXN0LCAwLCBzaXplb2YocmV2X2xpc3QpKTsKKwlyZXZfbGlzdC5hcmd2ID0gYXJndjsKKwlyZXZfbGlzdC5naXRfY21kID0gMTsKKwlyZXZfbGlzdC5pbiA9IC0xOworCXJldl9saXN0Lm5vX3N0ZG91dCA9IDE7CisJcmV2X2xpc3Qubm9fc3RkZXJyID0gcXVpZXQ7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJnJldl9saXN0KSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciKSk7CisKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJY29tbWl0WzQwXSA9ICdcbic7CisJZG8geworCQltZW1jcHkoY29tbWl0LCBzaGExX3RvX2hleChzaGExKSwgNDApOworCQlpZiAod3JpdGVfaW5fZnVsbChyZXZfbGlzdC5pbiwgY29tbWl0LCA0MSkgPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRVBJUEUgJiYgZXJybm8gIT0gRUlOVkFMKQorCQkJCWVycm9yKF8oImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiKSwKKwkJCQkgICAgICBzdHJlcnJvcihlcnJubykpOworCQkJZXJyID0gLTE7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKCFmbihjYl9kYXRhLCBzaGExKSk7CisKKwlpZiAoY2xvc2UocmV2X2xpc3QuaW4pKSB7CisJCWVycm9yKF8oImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluOiAlcyIpLCBzdHJlcnJvcihlcnJubykpOworCQllcnIgPSAtMTsKKwl9CisKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKCZyZXZfbGlzdCkgfHwgZXJyOworfQpkaWZmIC0tZ2l0IGEvY29ubmVjdGVkLmggYi9jb25uZWN0ZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQ1ODVhCi0tLSAvZGV2L251bGwKKysrIGIvY29ubmVjdGVkLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBDT05ORUNURURfSAorI2RlZmluZSBDT05ORUNURURfSAorCisvKgorICogVGFrZSBjYWxsYmFjayBkYXRhLCBhbmQgcmV0dXJuIG5leHQgb2JqZWN0IG5hbWUgaW4gdGhlIGJ1ZmZlci4KKyAqIFdoZW4gY2FsbGVkIGFmdGVyIHJldHVybmluZyB0aGUgbmFtZSBmb3IgdGhlIGxhc3Qgb2JqZWN0LCByZXR1cm4gLTEKKyAqIHRvIHNpZ25hbCBFT0YsIG90aGVyd2lzZSByZXR1cm4gMC4KKyAqLwordHlwZWRlZiBpbnQgKCpzaGExX2l0ZXJhdGVfZm4pKHZvaWQgKiwgdW5zaWduZWQgY2hhciBbMjBdKTsKKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IG91ciBvYmplY3Qgc3RvcmUgaGFzIGFsbCB0aGUgY29tbWl0cyBuZWNlc3NhcnkgdG8KKyAqIGNvbm5lY3QgdGhlIGFuY2VzdHJ5IGNoYWluIHRvIHNvbWUgb2Ygb3VyIGV4aXN0aW5nIHJlZnMsIGFuZCBhbGwKKyAqIHRoZSB0cmVlcyBhbmQgYmxvYnMgdGhhdCB0aGVzZSBjb21taXRzIHVzZS4KKyAqCisgKiBSZXR1cm4gMCBpZiBPaywgbm9uIHplcm8gb3RoZXJ3aXNlIChpLmUuIHNvbWUgbWlzc2luZyBvYmplY3RzKQorICovCitleHRlcm4gaW50IGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkKHNoYTFfaXRlcmF0ZV9mbiwgaW50IHF1aWV0LCB2b2lkICpjYl9kYXRhKTsKKworI2VuZGlmIC8qIENPTk5FQ1RFRF9IICovCmRpZmYgLS1naXQgYS9jb250cmliL1JFQURNRSBiL2NvbnRyaWIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZjI5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1JFQURNRQpAQCAtMCwwICsxLDQzIEBACitDb250cmlidXRlZCBTb2Z0d2FyZQorCitBbHRob3VnaCB0aGVzZSBwaWVjZXMgYXJlIGF2YWlsYWJsZSBhcyBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBnaXQKK3NvdXJjZSB0cmVlLCB0aGV5IGFyZSBpbiBzb21ld2hhdCBkaWZmZXJlbnQgc3RhdHVzLiAgVGhlCitpbnRlbnRpb24gaXMgdG8ga2VlcCBpbnRlcmVzdGluZyB0b29scyBhcm91bmQgZ2l0IGhlcmUsIG1heWJlCitldmVuIGV4cGVyaW1lbnRhbCBvbmVzLCB0byBnaXZlIHVzZXJzIGFuIGVhc2llciBhY2Nlc3MgdG8gdGhlbSwKK2FuZCB0byBnaXZlIHRvb2xzIHdpZGVyIGV4cG9zdXJlLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGltcHJvdmVkCitmYXN0ZXIuCisKK0kgYW0gbm90IGV4cGVjdGluZyB0byB0b3VjaCB0aGVzZSBteXNlbGYgdGhhdCBtdWNoLiAgQXMgZmFyIGFzCitteSBkYXktdG8tZGF5IG9wZXJhdGlvbiBpcyBjb25jZXJuZWQsIHRoZXNlIHN1YmRpcmVjdG9yaWVzIGFyZQorb3duZWQgYnkgdGhlaXIgcmVzcGVjdGl2ZSBwcmltYXJ5IGF1dGhvcnMuICBJIGFtIHdpbGxpbmcgdG8gaGVscAoraWYgdXNlcnMgb2YgdGhlc2UgY29tcG9uZW50cyBhbmQgdGhlIGNvbnRyaWIvIHN1YnRyZWUgIm93bmVycyIKK2hhdmUgdGVjaG5pY2FsL2Rlc2lnbiBpc3N1ZXMgdG8gcmVzb2x2ZSwgYnV0IHRoZSBpbml0aWF0aXZlIHRvCitmaXggYW5kL29yIGVuaGFuY2UgdGhpbmdzIF9tdXN0XyBiZSBvbiB0aGUgc2lkZSBvZiB0aGUgc3VidHJlZQorb3duZXJzLiAgSU9XLCBJIHdvbid0IGJlIGFjdGl2ZWx5IGxvb2tpbmcgZm9yIGJ1Z3MgYW5kIHJvb21zIGZvcgorZW5oYW5jZW1lbnRzIGluIHRoZW0gYXMgdGhlIGdpdCBtYWludGFpbmVyIC0tIEkgbWF5IG9ubHkgZG8gc28KK2p1c3QgYXMgb25lIG9mIHRoZSB1c2VycyB3aGVuIEkgd2FudCB0byBzY3JhdGNoIG15IG93biBpdGNoLiAgSWYKK3lvdSBoYXZlIHBhdGNoZXMgdG8gdGhpbmdzIGluIGNvbnRyaWIvIGFyZWEsIHRoZSBwYXRjaCBzaG91bGQgYmUKK2ZpcnN0IHNlbnQgdG8gdGhlIHByaW1hcnkgYXV0aG9yLCBhbmQgdGhlbiB0aGUgcHJpbWFyeSBhdXRob3IKK3Nob3VsZCBhY2sgYW5kIGZvcndhcmQgaXQgdG8gbWUgKGdpdCBwdWxsIHJlcXVlc3QgaXMgbmljZXIpLgorVGhpcyBpcyB0aGUgc2FtZSB3YXkgYXMgaG93IEkgaGF2ZSBiZWVuIHRyZWF0aW5nIGdpdGssIGFuZCB0byBhCitsZXNzZXIgZGVncmVlIHZhcmlvdXMgZm9yZWlnbiBTQ00gaW50ZXJmYWNlcywgc28geW91IGtub3cgdGhlCitkcmlsbC4KKworSSBleHBlY3QgdGhhdCB0aGluZ3MgdGhhdCBzdGFydCB0aGVpciBsaWZlIGluIHRoZSBjb250cmliLyBhcmVhCit0byBncmFkdWF0ZSBvdXQgb2YgY29udHJpYi8gb25jZSB0aGV5IG1hdHVyZSwgZWl0aGVyIGJ5IGJlY29taW5nCitwcm9qZWN0cyBvbiB0aGVpciBvd24sIG9yIG1vdmluZyB0byB0aGUgdG9wbGV2ZWwgZGlyZWN0b3J5LiAgT24KK3RoZSBvdGhlciBoYW5kLCBJIGV4cGVjdCBJJ2xsIGJlIHByb3Bvc2luZyByZW1vdmFsIG9mIGRpc3VzZWQKK2FuZCBpbmFjdGl2ZSBvbmVzIGZyb20gdGltZSB0byB0aW1lLgorCitJZiB5b3UgaGF2ZSBuZXcgdGhpbmdzIHRvIGFkZCB0byB0aGlzIGFyZWEsIHBsZWFzZSBmaXJzdCBwcm9wb3NlCitpdCBvbiB0aGUgZ2l0IG1haWxpbmcgbGlzdCwgYW5kIGFmdGVyIGEgbGlzdCBkaXNjdXNzaW9uIHByb3ZlcwordGhlcmUgYXJlIHNvbWUgZ2VuZXJhbCBpbnRlcmVzdHMgKGl0IGRvZXMgbm90IGhhdmUgdG8gYmUgYQorbGlzdC13aWRlIGNvbnNlbnN1cyBmb3IgYSB0b29sIHRhcmdldGVkIHRvIGEgcmVsYXRpdmVseSBuYXJyb3cKK2F1ZGllbmNlIC0tIGZvciBleGFtcGxlIEkgZG8gbm90IHdvcmsgd2l0aCBwcm9qZWN0cyB3aG9zZQordXBzdHJlYW0gaXMgc3ZuLCBzbyBJIGhhdmUgbm8gdXNlIGZvciBnaXQtc3ZuIG15c2VsZiwgYnV0IGl0IGlzCitvZiBnZW5lcmFsIGludGVyZXN0IGZvciBwZW9wbGUgd2hvIG5lZWQgdG8gaW50ZXJvcGVyYXRlIHdpdGggU1ZOCityZXBvc2l0b3JpZXMgaW4gYSB3YXkgZ2l0LXN2biB3b3JrcyBiZXR0ZXIgdGhhbiBnaXQtc3ZuaW1wb3J0KSwKK3N1Ym1pdCBhIHBhdGNoIHRvIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeSBvZiBjb250cmliLyBhbmQgcHV0IHlvdXIKK3N0dWZmIHRoZXJlLgorCistamMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxhbWV2aWV3L1JFQURNRSBiL2NvbnRyaWIvYmxhbWV2aWV3L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWRhNWNlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ibGFtZXZpZXcvUkVBRE1FCkBAIC0wLDAgKzEsOSBAQAorVGhpcyBpcyBhIHNhbXBsZSBwcm9ncmFtIHRvIHVzZSAnZ2l0LWJsYW1lIC0taW5jcmVtZW50YWwnLCBiYXNlZAorb24gdGhpcyBtZXNzYWdlLgorCitGcm9tOiBKZWZmIEtpbmcgPHBlZmZAcGVmZi5uZXQ+CitTdWJqZWN0OiBSZTogTW9yZSBwcmVjaXNlIHRhZyBmb2xsb3dpbmcKK1RvOiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CitDYzogZ2l0QHZnZXIua2VybmVsLm9yZworRGF0ZTogU2F0LCAyNyBKYW4gMjAwNyAxODo1MjozOCAtMDUwMAorTWVzc2FnZS1JRDogPDIwMDcwMTI3MjM1MjM4LkdBMjg3MDZAY29yZWR1bXAuaW50cmEucGVmZi5uZXQ+CmRpZmYgLS1naXQgYS9jb250cmliL2JsYW1ldmlldy9ibGFtZXZpZXcucGVybCBiL2NvbnRyaWIvYmxhbWV2aWV3L2JsYW1ldmlldy5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFkZWMwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2JsYW1ldmlldy9ibGFtZXZpZXcucGVybApAQCAtMCwwICsxLDE1NSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBHdGsyIC1pbml0OwordXNlIEd0azI6OlNpbXBsZUxpc3Q7CisKK215ICRoYXNoOworbXkgJGZuOworaWYgKCBAQVJHViA9PSAxICkgeworCSRoYXNoID0gIkhFQUQiOworCSRmbiA9IHNoaWZ0OworfSBlbHNpZiAoIEBBUkdWID09IDIgKSB7CisJJGhhc2ggPSBzaGlmdDsKKwkkZm4gPSBzaGlmdDsKK30gZWxzZSB7CisJZGllICJVc2FnZSBibGFtZXZpZXcgWzxyZXY+XSA8ZmlsZW5hbWU+IjsKK30KKworR3RrMjo6UmMtPnBhcnNlX3N0cmluZyg8PCdFT1MnKTsKK3N0eWxlICJ0cmVldmlld19zdHlsZSIKK3sKKyAgR3RrVHJlZVZpZXc6OnZlcnRpY2FsLXNlcGFyYXRvciA9IDAKK30KK2NsYXNzICJHdGtUcmVlVmlldyIgc3R5bGUgInRyZWV2aWV3X3N0eWxlIgorRU9TCisKK215ICR3aW5kb3cgPSBHdGsyOjpXaW5kb3ctPm5ldygndG9wbGV2ZWwnKTsKKyR3aW5kb3ctPnNpZ25hbF9jb25uZWN0KGRlc3Ryb3kgPT4gc3ViIHsgR3RrMi0+bWFpbl9xdWl0IH0pOworbXkgJHZwYW4gPSBHdGsyOjpWUGFuZWQtPm5ldygpOworJHdpbmRvdy0+YWRkKCR2cGFuKTsKK215ICRzY3JvbGxlZF93aW5kb3cgPSBHdGsyOjpTY3JvbGxlZFdpbmRvdy0+bmV3OworJHZwYW4tPnBhY2sxKCRzY3JvbGxlZF93aW5kb3csIDEsIDEpOworbXkgJGZpbGV2aWV3ID0gR3RrMjo6U2ltcGxlTGlzdC0+bmV3KAorICAgICdDb21taXQnID0+ICd0ZXh0JywKKyAgICAnRmlsZUxpbmUnID0+ICd0ZXh0JywKKyAgICAnRGF0YScgPT4gJ3RleHQnCispOworJHNjcm9sbGVkX3dpbmRvdy0+YWRkKCRmaWxldmlldyk7CiskZmlsZXZpZXctPmdldF9jb2x1bW4oMCktPnNldF9zcGFjaW5nKDApOworJGZpbGV2aWV3LT5zZXRfc2l6ZV9yZXF1ZXN0KDEwMjQsIDc2OCk7CiskZmlsZXZpZXctPnNldF9ydWxlc19oaW50KDEpOworJGZpbGV2aWV3LT5zaWduYWxfY29ubmVjdCAocm93X2FjdGl2YXRlZCA9PiBzdWIgeworCQlteSAoJHNsLCAkcGF0aCwgJGNvbHVtbikgPSBAXzsKKwkJbXkgJHJvd19yZWYgPSAkc2wtPmdldF9yb3dfZGF0YV9mcm9tX3BhdGggKCRwYXRoKTsKKwkJc3lzdGVtKCJibGFtZXZpZXcgQCRyb3dfcmVmWzBdfjEgJGZuICYiKTsKKwkJfSk7CisKK215ICRjb21taXR3aW5kb3cgPSBHdGsyOjpTY3JvbGxlZFdpbmRvdy0+bmV3KCk7CiskY29tbWl0d2luZG93LT5zZXRfcG9saWN5ICgnR1RLX1BPTElDWV9BVVRPTUFUSUMnLCdHVEtfUE9MSUNZX0FVVE9NQVRJQycpOworJHZwYW4tPnBhY2syKCRjb21taXR3aW5kb3csIDEsIDEpOworbXkgJGNvbW1pdF90ZXh0ID0gR3RrMjo6VGV4dFZpZXctPm5ldygpOworbXkgJGNvbW1pdF9idWZmZXIgPSBHdGsyOjpUZXh0QnVmZmVyLT5uZXcoKTsKKyRjb21taXRfdGV4dC0+c2V0X2J1ZmZlcigkY29tbWl0X2J1ZmZlcik7CiskY29tbWl0d2luZG93LT5hZGQoJGNvbW1pdF90ZXh0KTsKKworJGZpbGV2aWV3LT5zaWduYWxfY29ubmVjdCAoY3Vyc29yX2NoYW5nZWQgPT4gc3ViIHsKKwkJbXkgKCRzbCkgPSBAXzsKKwkJbXkgKCRwYXRoLCAkZm9jdXNfY29sdW1uKSA9ICRzbC0+Z2V0X2N1cnNvcigpOworCQlteSAkcm93X3JlZiA9ICRzbC0+Z2V0X3Jvd19kYXRhX2Zyb21fcGF0aCAoJHBhdGgpOworCQlteSAkY19maDsKKwkJb3BlbigkY19maCwgICctfCcsICJnaXQgY2F0LWZpbGUgY29tbWl0IEAkcm93X3JlZlswXSIpCisJCQkJCW9yIGRpZSAidW5hYmxlIHRvIGZpbmQgY29tbWl0IEAkcm93X3JlZlswXSI7CisJCW15IEBidWZmZXIgPSA8JGNfZmg+OworCQkkY29tbWl0X2J1ZmZlci0+c2V0X3RleHQoIkBidWZmZXIiKTsKKwkJY2xvc2UoJGNfZmgpOworCQl9KTsKKworbXkgJGZoOworb3BlbigkZmgsICctfCcsICJnaXQgY2F0LWZpbGUgYmxvYiAkaGFzaDokZm4iKQorICBvciBkaWUgInVuYWJsZSB0byBvcGVuICRmbjogJCEiOworCit3aGlsZSg8JGZoPikgeworICBjaG9tcDsKKyAgJGZpbGV2aWV3LT57ZGF0YX0tPlskLl0gPSBbJ0hFQUQnLCAiJGZuOiQuIiwgJF9dOworfQorCitteSAkYmxhbWU7CitvcGVuKCRibGFtZSwgJy18JywgcXcoZ2l0IGJsYW1lIC0taW5jcmVtZW50YWwgLS0pLCAkZm4sICRoYXNoKQorICAgIG9yIGRpZSAiY2Fubm90IHN0YXJ0IGdpdC1ibGFtZSAkZm4iOworCitHbGliOjpJTy0+YWRkX3dhdGNoKGZpbGVubygkYmxhbWUpLCAnaW4nLCBcJnJlYWRfYmxhbWVfbGluZSk7CisKKyR3aW5kb3ctPnNob3dfYWxsOworR3RrMi0+bWFpbjsKK2V4aXQgMDsKKworbXkgJWNvbW1pdGluZm8gPSAoKTsKKworc3ViIGZsdXNoX2JsYW1lX2xpbmUgeworCW15ICgkYXR0cikgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkYXR0cjsKKworCW15ICgkY29tbWl0LCAkc19sbm8sICRsbm8sICRjbnQpID0KKwkgICAgQHskYXR0cn17cXcoQ09NTUlUIFNfTE5PIExOTyBDTlQpfTsKKworCW15ICgkZmlsZW5hbWUsICRhdXRob3IsICRhdXRob3JfdGltZSwgJGF1dGhvcl90eikgPQorCSAgICBAeyRjb21taXRpbmZveyRjb21taXR9fXtxdyhGSUxFTkFNRSBBVVRIT1IgQVVUSE9SLVRJTUUgQVVUSE9SLVRaKX07CisJbXkgJGluZm8gPSAkYXV0aG9yIC4gJyAnIC4gZm9ybWF0X3RpbWUoJGF1dGhvcl90aW1lLCAkYXV0aG9yX3R6KTsKKworCWZvcihteSAkaSA9IDA7ICRpIDwgJGNudDsgJGkrKykgeworCQlAeyRmaWxldmlldy0+e2RhdGF9LT5bJGxubyskaS0xXX1bMCwxLDJdID0KKwkJKHN1YnN0cigkY29tbWl0LCAwLCA4KSwgJGZpbGVuYW1lIC4gJzonIC4gKCRzX2xubyskaSkpOworCX0KK30KKworbXkgJGJ1ZjsKK215ICRjdXJyZW50Oworc3ViIHJlYWRfYmxhbWVfbGluZSB7CisKKwlteSAkciA9IHN5c3JlYWQoJGJsYW1lLCAkYnVmLCAxMDI0LCBsZW5ndGgoJGJ1ZikpOworCWRpZSAiSS9PIGVycm9yIiB1bmxlc3MgZGVmaW5lZCAkcjsKKworCWlmICgkciA9PSAwKSB7CisJCWZsdXNoX2JsYW1lX2xpbmUoJGN1cnJlbnQpOworCQkkY3VycmVudCA9IHVuZGVmOworCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAoJGJ1ZiA9fiBzLyhbXlxuXSopXG4vLykgeworCQlteSAkbGluZSA9ICQxOworCisJCWlmICgoJGNvbW1pdCwgJHNfbG5vLCAkbG5vLCAkY250KSA9CisJCSAgICAoJGxpbmUgPX4gL14oWzAtOWEtZl17NDB9KSAoXGQrKSAoXGQrKSAoXGQrKSQvKSkgeworCQkJZmx1c2hfYmxhbWVfbGluZSgkY3VycmVudCk7CisJCQkkY3VycmVudCA9ICt7CisJCQkJQ09NTUlUID0+ICQxLAorCQkJCVNfTE5PID0+ICQyLAorCQkJCUxOTyA9PiAkMywKKwkJCQlDTlQgPT4gJDQsCisJCQl9OworCQkJbmV4dDsKKwkJfQorCisJCSMgZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlcworCQlpZiAoJGxpbmUgPX4gL14oYXV0aG9yfGF1dGhvci1tYWlsfGF1dGhvci10aW1lfGF1dGhvci10enxjb21taXR0ZXJ8Y29tbWl0dGVyLW1haWx8Y29tbWl0dGVyLXRpbWV8Y29tbWl0dGVyLXR6fHN1bW1hcnl8ZmlsZW5hbWUpICguKikkLykgeworCQkJbXkgJGNvbW1pdCA9ICRjdXJyZW50LT57Q09NTUlUfTsKKwkJCSRjb21taXRpbmZveyRjb21taXR9e3VjKCQxKX0gPSAkMjsKKwkJCW5leHQ7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N1YiBmb3JtYXRfdGltZSB7CisgIG15ICR0aW1lID0gc2hpZnQ7CisgIG15ICR0eiA9IHNoaWZ0OworCisgIG15ICRtaW51dGVzID0gJHR6IDwgMCA/IDAtJHR6IDogJHR6OworICAkbWludXRlcyA9ICgkbWludXRlcyAvIDEwMCkqNjAgKyAoJG1pbnV0ZXMgJSAxMDApOworICAkbWludXRlcyA9ICR0eiA8IDAgPyAwLSRtaW51dGVzIDogJG1pbnV0ZXM7CisgICR0aW1lICs9ICRtaW51dGVzICogNjA7CisgIG15IEB0ID0gZ210aW1lKCR0aW1lKTsKKyAgcmV0dXJuIHNwcmludGYoJyUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkICVzJywKKwkJICR0WzVdICsgMTkwMCwgQHRbNCwzLDIsMSwwXSwgJHR6KTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMucG0gYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOGVmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzLnBtCkBAIC0wLDAgKzEsNDIgQEAKK3BhY2thZ2UgR2VuZXJhdG9yczsKK3JlcXVpcmUgRXhwb3J0ZXI7CisKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CitubyBzdHJpY3QgJ3JlZnMnOwordXNlIHZhcnMgcXcoJFZFUlNJT04gQEFWQUlMQUJMRSk7CisKK291ciAkVkVSU0lPTiA9ICcxLjAwJzsKK291cihASVNBLCBARVhQT1JULCBARVhQT1JUX09LLCBAQVZBSUxBQkxFKTsKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKK0JFR0lOIHsKKyAgICBsb2NhbCgqRCk7CisgICAgbXkgJG1lID0gJElOQ3siR2VuZXJhdG9ycy5wbSJ9OworICAgIGRpZSAiQ291bGRuJ3QgZmluZCBteXNlbGYgaW4gXEBJTkMsIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGxvYWQgdGhlIGdlbmVyYXRvcnMhIiBpZiAoIiRtZSIgZXEgIiIpOworICAgICRtZSA9IGRpcm5hbWUoJG1lKTsKKyAgICBpZiAob3BlbmRpcihELCIkbWUvR2VuZXJhdG9ycyIpKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJGdlbiAocmVhZGRpcihEKSkgeworICAgICAgICAgICAgbmV4dCBpZiAoJGdlbiAgPX4gL15cLlwuPyQvKTsKKyAgICAgICAgICAgIHJlcXVpcmUgIiR7bWV9L0dlbmVyYXRvcnMvJGdlbiI7CisgICAgICAgICAgICAkZ2VuID1+IHMsXC5wbSwsOworICAgICAgICAgICAgcHVzaChAQVZBSUxBQkxFLCAkZ2VuKTsKKyAgICAgICAgfQorICAgICAgICBjbG9zZWRpcihEKTsKKyAgICAgICAgbXkgJGdlbnMgPSBqb2luKCcsICcsIEBBVkFJTEFCTEUpOworICAgIH0KKworICAgIHB1c2ggQEVYUE9SVF9PSywgcXcoYXZhaWxhYmxlKTsKK30KKworc3ViIGF2YWlsYWJsZSB7CisgICAgcmV0dXJuIEBBVkFJTEFCTEU7Cit9CisKK3N1YiBnZW5lcmF0ZSB7CisgICAgbXkgKCRnZW4sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcmV0dXJuIGV2YWwoIkdlbmVyYXRvcnM6OiR7Z2VufTo6Z2VuZXJhdGUoXCRnaXRfZGlyLCBcJG91dF9kaXIsIFwkcmVsX2RpciwgXCVidWlsZF9zdHJ1Y3R1cmUpIikgaWYgZ3JlcCgvXiRnZW4kLywgQEFWQUlMQUJMRSk7CisgICAgZGllICJHZW5lcmF0b3IgXCIke2dlbn1cIiBpcyBub3QgYXZhaWxhYmxlIVxuQXZhaWxhYmxlIGdlbmVyYXRvcnMgYXJlOiBAQVZBSUxBQkxFXG4iOworfQorCisxOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9RTWFrZS5wbSBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvUU1ha2UucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzYjY1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvUU1ha2UucG0KQEAgLTAsMCArMSwxODkgQEAKK3BhY2thZ2UgR2VuZXJhdG9yczo6UU1ha2U7CityZXF1aXJlIEV4cG9ydGVyOworCit1c2Ugc3RyaWN0OwordXNlIHZhcnMgcXcoJFZFUlNJT04pOworCitvdXIgJFZFUlNJT04gPSAnMS4wMCc7CitvdXIoQElTQSwgQEVYUE9SVCwgQEVYUE9SVF9PSywgQEFWQUlMQUJMRSk7CitASVNBID0gcXcoRXhwb3J0ZXIpOworCitCRUdJTiB7CisgICAgcHVzaCBARVhQT1JUX09LLCBxdyhnZW5lcmF0ZSk7Cit9CisKK3N1YiBnZW5lcmF0ZSB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisKKyAgICBteSBAbGlicyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fTsKKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBjcmVhdGVMaWJQcm9qZWN0KCRfLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKTsKKyAgICB9CisKKyAgICBteSBAYXBwcyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fTsKKyAgICBmb3JlYWNoIChAYXBwcykgeworICAgICAgICBjcmVhdGVBcHBQcm9qZWN0KCRfLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKTsKKyAgICB9CisKKyAgICBjcmVhdGVHbHVlUHJvamVjdCgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKTsKKyAgICByZXR1cm4gMDsKK30KKworc3ViIGNyZWF0ZUxpYlByb2plY3QgeworICAgIG15ICgkbGlibmFtZSwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBwcmludCAiR2VuZXJhdGUgJGxpYm5hbWUgbGliIHByb2plY3RcbiI7CisgICAgJHJlbF9kaXIgPSAiLi4vJHJlbF9kaXIiOworCisgICAgbXkgJHNvdXJjZXMgPSBqb2luKCIgXFxcblx0Iiwgc29ydChtYXAoIiRyZWxfZGlyLyRfIiwgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fU09VUkNFUyJ9fSkpKTsKKyAgICBteSAkZGVmaW5lcyA9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KG1hcCgiJHJlbF9kaXIvJF8iLCBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9JTkNMVURFUyJ9fSkpKTsKKyAgICBteSAkY2ZsYWdzICA9IGpvaW4oIiAiLCBzb3J0KEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0NGTEFHUyJ9fSkpOworCisgICAgbXkgJGNmbGFnc19kZWJ1ZyA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1NVC8tTVRkLzsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU8uLy87CisKKyAgICBteSAkY2ZsYWdzX3JlbGVhc2UgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfcmVsZWFzZSA9fiBzLy1NVGQvLU1ULzsKKworICAgIG15IEB0bXAgID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fTEZMQUdTIn19OworICAgIG15IEB0bXAyID0gKCk7CisgICAgZm9yZWFjaCAoQHRtcCkgeworICAgICAgICBpZiAoL14tTFRDRy8pIHsKKyAgICAgICAgfSBlbHNpZiAoL14tTC8pIHsKKyAgICAgICAgICAgICRfID1+IHMvXi1MLy1MSUJQQVRIOiRyZWxfZGlyXC8vOworICAgICAgICB9CisgICAgICAgIHB1c2goQHRtcDIsICRfKTsKKyAgICB9CisgICAgbXkgJGxmbGFncyA9IGpvaW4oIiAiLCBzb3J0KEB0bXApKTsKKworICAgIG15ICR0YXJnZXQgPSAkbGlibmFtZTsKKyAgICAkdGFyZ2V0ID1+IHMvXC8vXy9nOworICAgICRkZWZpbmVzID1+IHMvLUQvL2c7CisgICAgJGRlZmluZXMgPX4gcy8iL1xcXFwiL2c7CisgICAgJGluY2x1ZGVzID1+IHMvLUkvL2c7CisgICAgbWtkaXIgIiR0YXJnZXQiIHx8IGRpZSAiQ291bGQgbm90IGNyZWF0ZSB0aGUgZGlyZWN0b3J5ICR0YXJnZXQgZm9yIGxpYiBwcm9qZWN0IVxuIjsKKyAgICBvcGVuIEYsICI+JHRhcmdldC8kdGFyZ2V0LnBybyIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkdGFyZ2V0LyR0YXJnZXQucHJvIGZvciB3cml0aW5nIVxuIjsKKyAgICBwcmludCBGIDw8ICJFT00iOworVEVNUExBVEUgPSBsaWIKK1RBUkdFVCA9ICR0YXJnZXQKK0RFU1RESVIgPSAkcmVsX2RpcgorCitDT05GSUcgLT0gcXQKK0NPTkZJRyArPSBzdGF0aWMKKworUU1BS0VfQ0ZMQUdTID0KK1FNQUtFX0NGTEFHU19SRUxFQVNFID0gJGNmbGFnc19yZWxlYXNlCitRTUFLRV9DRkxBR1NfREVCVUcgPSAkY2ZsYWdzX2RlYnVnCitRTUFLRV9MSUJGTEFHUyA9ICRsZmxhZ3MKKworREVGSU5FUyArPSBcXAorICAgICAgICAkZGVmaW5lcworCitJTkNMVURFUEFUSCArPSBcXAorICAgICAgICAkaW5jbHVkZXMKKworU09VUkNFUyArPSBcXAorICAgICAgICAkc291cmNlcworRU9NCisgICAgY2xvc2UgRjsKK30KKworc3ViIGNyZWF0ZUFwcFByb2plY3QgeworICAgIG15ICgkYXBwbmFtZSwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBwcmludCAiR2VuZXJhdGUgJGFwcG5hbWUgYXBwIHByb2plY3RcbiI7CisgICAgJHJlbF9kaXIgPSAiLi4vJHJlbF9kaXIiOworCisgICAgbXkgJHNvdXJjZXMgPSBqb2luKCIgXFxcblx0Iiwgc29ydChtYXAoIiRyZWxfZGlyLyRfIiwgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fU09VUkNFUyJ9fSkpKTsKKyAgICBteSAkZGVmaW5lcyA9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KG1hcCgiJHJlbF9kaXIvJF8iLCBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9JTkNMVURFUyJ9fSkpKTsKKyAgICBteSAkY2ZsYWdzICA9IGpvaW4oIiAiLCBzb3J0KEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0NGTEFHUyJ9fSkpOworCisgICAgbXkgJGNmbGFnc19kZWJ1ZyA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1NVC8tTVRkLzsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU8uLy87CisKKyAgICBteSAkY2ZsYWdzX3JlbGVhc2UgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfcmVsZWFzZSA9fiBzLy1NVGQvLU1ULzsKKworICAgIG15ICRsaWJzOworICAgIGZvcmVhY2ggKHNvcnQoQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fTElCUyJ9fSkpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9fL2c7CisgICAgICAgICRsaWJzIC49ICIgJF8iOworICAgIH0KKyAgICBteSBAdG1wICA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0xGTEFHUyJ9fTsKKyAgICBteSBAdG1wMiA9ICgpOworICAgIGZvcmVhY2ggKEB0bXApIHsKKyAgICAgICAgIyBuZXh0IGlmICgkXyBlcSAiLU5PREVGQVVMVExJQjpNU1ZDUlQubGliIik7CisgICAgICAgIGlmICgvXi1MVENHLykgeworICAgICAgICB9IGVsc2lmICgvXi1MLykgeworICAgICAgICAgICAgJF8gPX4gcy9eLUwvLUxJQlBBVEg6JHJlbF9kaXJcLy87CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAdG1wMiwgJF8pOworICAgIH0KKyAgICBteSAkbGZsYWdzID0gam9pbigiICIsIHNvcnQoQHRtcCkpOworCisgICAgbXkgJHRhcmdldCA9ICRhcHBuYW1lOworICAgICR0YXJnZXQgPX4gcy9cLmV4ZS8vOworICAgICR0YXJnZXQgPX4gcy9cLy9fL2c7CisgICAgJGRlZmluZXMgPX4gcy8tRC8vZzsKKyAgICAkZGVmaW5lcyA9fiBzLyIvXFxcXCIvZzsKKyAgICAkaW5jbHVkZXMgPX4gcy8tSS8vZzsKKyAgICBta2RpciAiJHRhcmdldCIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgJHRhcmdldCBmb3IgYXBwIHByb2plY3QhXG4iOworICAgIG9wZW4gRiwgIj4kdGFyZ2V0LyR0YXJnZXQucHJvIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICR0YXJnZXQvJHRhcmdldC5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIHByaW50IEYgPDwgIkVPTSI7CitURU1QTEFURSA9IGFwcAorVEFSR0VUID0gJHRhcmdldAorREVTVERJUiA9ICRyZWxfZGlyCisKK0NPTkZJRyAtPSBxdCBlbWJlZF9tYW5pZmVzdF9leGUKK0NPTkZJRyArPSBjb25zb2xlCisKK1FNQUtFX0NGTEFHUyA9CitRTUFLRV9DRkxBR1NfUkVMRUFTRSA9ICRjZmxhZ3NfcmVsZWFzZQorUU1BS0VfQ0ZMQUdTX0RFQlVHID0gJGNmbGFnc19kZWJ1ZworUU1BS0VfTEZMQUdTID0gJGxmbGFncworTElCUyAgID0gJGxpYnMKKworREVGSU5FUyArPSBcXAorICAgICAgICAkZGVmaW5lcworCitJTkNMVURFUEFUSCArPSBcXAorICAgICAgICAkaW5jbHVkZXMKKword2luMzI6UU1BS0VfTEZMQUdTICs9IC1MSUJQQVRIOiRyZWxfZGlyCitlbHNlOiBRTUFLRV9MRkxBR1MgKz0gLUwkcmVsX2RpcgorCitTT1VSQ0VTICs9IFxcCisgICAgICAgICRzb3VyY2VzCitFT00KKyAgICBjbG9zZSBGOworfQorCitzdWIgY3JlYXRlR2x1ZVByb2plY3QgeworICAgIG15ICgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIG15ICRsaWJzID0gam9pbigiIFxcIFxuIiwgbWFwKCJcdCRffCRfLnBybyIsIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fSkpOworICAgIG15ICRhcHBzID0gam9pbigiIFxcIFxuIiwgbWFwKCJcdCRffCRfLnBybyIsIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fSkpOworICAgICRsaWJzID1+IHMvXC5hLy9nOworICAgICRsaWJzID1+IHMvXC8vXy9nOworICAgICRsaWJzID1+IHMvXHwvXC8vZzsKKyAgICAkYXBwcyA9fiBzL1wuZXhlLy9nOworICAgICRhcHBzID1+IHMvXC8vXy9nOworICAgICRhcHBzID1+IHMvXHwvXC8vZzsKKworICAgIG15ICRmaWxlbmFtZSA9ICRvdXRfZGlyOworICAgICRmaWxlbmFtZSA9fiBzLy4qXC8oW15cL10rKSQvJDEvOworICAgICRmaWxlbmFtZSA9fiBzL1wvJC8vOworICAgIHByaW50ICJHZW5lcmF0ZSBnbHVlIHByb2plY3QgJGZpbGVuYW1lLnByb1xuIjsKKyAgICBvcGVuIEYsICI+JGZpbGVuYW1lLnBybyIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkZmlsZW5hbWUucHJvIGZvciB3cml0aW5nIVxuIjsKKyAgICBwcmludCBGIDw8ICJFT00iOworVEVNUExBVEUgPSBzdWJkaXJzCitDT05GSUcgKz0gb3JkZXJlZAorU1VCRElSUyArPSBcXAorJGxpYnMgXFwKKyRhcHBzCitFT00KKyAgICBjbG9zZSBGOworfQorCisxOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9WY3Byb2oucG0gYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1ZjcHJvai5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmE3NGFkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9WY3Byb2oucG0KQEAgLTAsMCArMSw2MjYgQEAKK3BhY2thZ2UgR2VuZXJhdG9yczo6VmNwcm9qOworcmVxdWlyZSBFeHBvcnRlcjsKKwordXNlIHN0cmljdDsKK3VzZSB2YXJzIHF3KCRWRVJTSU9OKTsKKworb3VyICRWRVJTSU9OID0gJzEuMDAnOworb3VyKEBJU0EsIEBFWFBPUlQsIEBFWFBPUlRfT0ssIEBBVkFJTEFCTEUpOworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQkVHSU4geworICAgIHB1c2ggQEVYUE9SVF9PSywgcXcoZ2VuZXJhdGUpOworfQorCitteSAkZ3VpZF9pbmRleCA9IDA7CitteSBAR1VJRFMgPSAoCisgICAgIntFMDdCOTk4OS0yQkY3LTRGMjEtODkxOC1CRTIyQkE0NjdBQzN9IiwKKyAgICAiezI3OEZGQjUxLTAyOTYtNEE0NC1BODFBLTIyQjg3QjdDMzU5Mn0iLAorICAgICJ7NzM0NkEyQzQtRjBGRC00NDRGLTlFQkUtMUFGMjNCMkI1NjUwfSIsCisgICAgIns2N0Y0MjFBQy1FQjM0LTRENDktODIwQi0zMTk2ODA3QjQyM0Z9IiwKKyAgICAiezM4NURDRkUxLUNDOEMtNDIxMS1BNDUxLTgwRkNGQzMxQ0E1MX0iLAorICAgICJ7OTdDQzQ2QzUtRDJDQy00RDI2LUI2MzQtRTc1NzkyQjc5OTE2fSIsCisgICAgIntDN0NFMjFGRS02RUY4LTQwMTItQTVDNy1BMjJCQ0VERkJBMTF9IiwKKyAgICAiezUxNTc1MTM0LTNGREYtNDJEMS1CQUJELTNGQjEyNjY5QzZDOX0iLAorICAgICJ7MEFFMTk1RTQtOTgyMy00Qjg3LThFNkYtMjBDNTYxNEFGMkZGfSIsCisgICAgIns0QjkxODI1NS02N0NBLTQzQkItQTQ2Qy0yNjcwNEI2NjZFNkJ9IiwKKyAgICAiezE4Q0NGRUVGLUM4RUUtNENDMS1BMjY1LTI2Rjk1QzlGNDY0OX0iLAorICAgICJ7NUQ1RDkwRkEtMDFCNy00OTczLUFGRTUtQ0E4OEM1M0FDMTk3fSIsCisgICAgInsxRjA1NDMyMC0wMzZELTQ5RTEtQjM4NC1GQjVERjBCQzhBQzB9IiwKKyAgICAiezdDRUQ2NUVFLUYyRDktNDE3MS04MjVCLUM3RDU2MUZFNTc4Nn0iLAorICAgICJ7OEQzNDE2NzktMEYwNy00NjY0LTlBNTYtM0JBMERFODhCOUJDfSIsCisgICAgIntDMTg5RkVEQy0yOTU3LTRCRDctOUZBNC03NjIyMjQxRUExNDV9IiwKKyAgICAiezY2ODQ0MjAzLTFCOUYtNEM1My05Mjc0LTE2NEZGRjk1Qjg0N30iLAorICAgICJ7RTRGRUExNDUtREVDQy00NDBELUFFRUEtNTk4Q0YzODFGRDQzfSIsCisgICAgIns3MzMwMEE4RS1DOEFDLTQxQjAtQjU1NS00RjU5NkI2ODFCQTd9IiwKKyAgICAiezg3M0ZERUIxLUQwMUQtNDBCRi1BMUJGLThCQkM1OEVDMEY1MX0iLAorICAgICJ7NzkyMkM4QkUtNzZDNS00QUM2LThCRjctODg1QzBGOTNCNzgyfSIsCisgICAgIntFMjQ1RDM3MC0zMDhCLTRBNDktQkZDMS0xRTUyNzgyNzk3NUZ9IiwKKyAgICAie0Y2RkE5NTdCLTY2RkMtNEVENy1CMjYwLUU1OUJCRTRGRTgxM30iLAorICAgICJ7RTYwNTUwNzAtMDE5OC00MzFBLUJDNDktOERCNkNFRTc3MEFFfSIsCisgICAgIns1NDE1OTIzNC1DM0VCLTQzREEtOTA2Qi1DRTVEQTVDNzQ2NTR9IiwKKyAgICAiezU5NENGQzM1LTBCNjAtNDZGNi1COEVGLTk5ODNBQ0MxMTg3RH0iLAorICAgICJ7RDkzRkNBQjctMUYwMS00OEQyLUI4MzItRjc2MUI4MzIzMUE1fSIsCisgICAgIntEQkE1RTZBQy1FN0JFLTQyRDMtODcwMy00RTc4NzE0MTUyNkV9IiwKKyAgICAiezYxNzE5NTNGLUREMjYtNDRDNy1BM0JFLUNDNDVGODZGQzExRn0iLAorICAgICJ7OUUxOUREQkUtRjVFNC00QTI2LUEyRkUtMDYxNkUwNDg3OUI4fSIsCisgICAgIntBRTgxQTYxNS05OUUzLTQ4ODUtOUNFMC1EOUNBQTE5M0U4Njd9IiwKKyAgICAie0ZCRjQwNjdFLTE4NTUtNEY2Qy04QkNELTRENjJFODAxQTA0RH0iLAorICAgICJ7MTcwMDc5NDgtNjU5My00QUVCLTgxMDYtRjc4ODRCNEYyQzE5fSIsCisgICAgInsxOTlENEM4RC04NjM5LTREQTYtODJFRi0wODY2OEMzNURFRTB9IiwKKyAgICAie0UwODVFNTBFLUMxNDAtNENGMy1CRTRCLTA5NEIxNEYwRERENn0iLAorICAgICJ7MDA3ODUyNjgtQTlDQy00RTQwLUFDMjktQkFDMDAxOTE1OUNFfSIsCisgICAgIns0QzA2RjU2QS1EQ0RCLTQ2QTYtQjY3Qy0wMjMzOTkzNUNGMTJ9IiwKKyAgICAiezNBNjJEM0ZELTUxOUUtNEVDOS04MTcxLUQyQzFCRkVBMDIyRn0iLAorICAgICJ7M0E2MkQzRkQtNTE5RS00RUM5LTgxNzEtRDJDMUJGRUEwMjJGfSIsCisgICAgIns5MzkyRUI1OC1EN0JBLTQxMEItQjFGMC1CMkZBQTZCQzg5QTd9IiwKKyAgICAiezJBQ0FCMkQ1LUUwQ0UtNDAyNy1CQ0EwLUQ3OEIyRDdBNkM2Nn0iLAorICAgICJ7ODZFMjE2QzMtNDNDRS00ODFBLUJDQjItQkU1RTYyODUwNjM1fSIsCisgICAgIntGQjYzMTI5MS03OTIzLTRCOTEtOUE1Ny03QjE4RkRCQjdBNDJ9IiwKKyAgICAiezBBMTc2RUM5LUU5MzQtNDVCOC1CODdGLTE2QzdGNEM4MDAzOX0iLAorICAgICJ7REY1NUNBODAtNDZFOC00QzUzLUI2NUItNDk5MEEyM0RENDQ0fSIsCisgICAgInszQTBGOTg5NS01NUQyLTQ3MTAtQkU1RS1BRDc0OThCNUJGNDR9IiwKKyAgICAiezI5NEJEQzVBLUY0NDgtNDhCNi04MTEwLUREMEE4MTgyMEY4Q30iLAorICAgICJ7NEI5RjY2RTktRkFDOS00N0FCLUIxRUYtQzE2NzU2RkJGRDA2fSIsCisgICAgIns3MkVBNDlDNi0yODA2LTQ4QkQtQjgxQi1ENDkwNTEwMkUxOUN9IiwKKyAgICAiezU3MjhFQjdFLTg5MjktNDg2Qy04Q0Q1LTMyMzhEMDYwRTc2OH0iCispOworCitzdWIgZ2VuZXJhdGUgeworICAgIG15ICgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIG15IEBsaWJzID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19OworICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgIGNyZWF0ZUxpYlByb2plY3QoJF8sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsIFwlYnVpbGRfc3RydWN0dXJlKTsKKyAgICB9CisKKyAgICBteSBAYXBwcyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fTsKKyAgICBmb3JlYWNoIChAYXBwcykgeworICAgICAgICBjcmVhdGVBcHBQcm9qZWN0KCRfLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCBcJWJ1aWxkX3N0cnVjdHVyZSk7CisgICAgfQorCisgICAgY3JlYXRlR2x1ZVByb2plY3QoJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBjcmVhdGVMaWJQcm9qZWN0IHsKKyAgICBteSAoJGxpYm5hbWUsICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICRidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcHJpbnQgIkdlbmVyYXRlICRsaWJuYW1lIHZjcHJvaiBsaWIgcHJvamVjdFxuIjsKKyAgICAkcmVsX2RpciA9ICIuLlxcJHJlbF9kaXIiOworICAgICRyZWxfZGlyID1+IHMvXC8vXFwvZzsKKworICAgIG15ICR0YXJnZXQgPSAkbGlibmFtZTsKKyAgICAkdGFyZ2V0ID1+IHMvXC8vXy9nOworICAgICR0YXJnZXQgPX4gcy9cLmEvLzsKKworICAgIG15ICR1dWlkID0gJEdVSURTWyRndWlkX2luZGV4XTsKKyAgICAkJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke3RhcmdldH1fR1VJRCJ9ID0gJHV1aWQ7CisgICAgJGd1aWRfaW5kZXggKz0gMTsKKworICAgIG15IEBzcmNzID0gc29ydChtYXAoIiRyZWxfZGlyXFwkXyIsIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9TT1VSQ0VTIn19KSk7CisgICAgbXkgQHNvdXJjZXM7CisgICAgZm9yZWFjaCAoQHNyY3MpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9cXC9nOworICAgICAgICBwdXNoKEBzb3VyY2VzLCAkXyk7CisgICAgfQorICAgIG15ICRkZWZpbmVzID0gam9pbigiLCIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIjsiLCBzb3J0KG1hcCgiJnF1b3Q7JHJlbF9kaXJcXCRfJnF1b3Q7IiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0lOQ0xVREVTIn19KSkpOworICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0NGTEFHUyJ9fSkpOworICAgICRjZmxhZ3MgPX4gcy9cIi8mcXVvdDsvZzsKKworICAgIG15ICRjZmxhZ3NfZGVidWcgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTVQvLU1UZC87CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1PLi8vOworCisgICAgbXkgJGNmbGFnc19yZWxlYXNlID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX3JlbGVhc2UgPX4gcy8tTVRkLy1NVC87CisKKyAgICBteSBAdG1wICA9IEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9MRkxBR1MifX07CisgICAgbXkgQHRtcDIgPSAoKTsKKyAgICBmb3JlYWNoIChAdG1wKSB7CisgICAgICAgIGlmICgvXi1MVENHLykgeworICAgICAgICB9IGVsc2lmICgvXi1MLykgeworICAgICAgICAgICAgJF8gPX4gcy9eLUwvLUxJQlBBVEg6JHJlbF9kaXJcLy87CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAdG1wMiwgJF8pOworICAgIH0KKyAgICBteSAkbGZsYWdzID0gam9pbigiICIsIHNvcnQoQHRtcCkpOworCisgICAgJGRlZmluZXMgPX4gcy8tRC8vZzsKKyAgICAkZGVmaW5lcyA9fiBzL1wiL1xcJnF1b3Q7L2c7CisgICAgJGRlZmluZXMgPX4gcy9cJy8vZzsKKyAgICAkaW5jbHVkZXMgPX4gcy8tSS8vZzsKKyAgICBta2RpciAiJHRhcmdldCIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgJHRhcmdldCBmb3IgbGliIHByb2plY3QhXG4iOworICAgIG9wZW4gRiwgIj4kdGFyZ2V0LyR0YXJnZXQudmNwcm9qIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICR0YXJnZXQvJHRhcmdldC5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIGJpbm1vZGUgRiwgIjpjcmxmIjsKKyAgICBwcmludCBGIDw8ICJFT00iOworPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZyA9ICJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOSwwMCIKKwlOYW1lPSIkdGFyZ2V0IgorCVByb2plY3RHVUlEPSIkdXVpZCI+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiRyZWxfZGlyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlwkKFByb2plY3REaXIpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRjZmxhZ3NfZGVidWciCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiRpbmNsdWRlcyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzIsX0RFQlVHLCRkZWZpbmVzIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSJcJChJbnREaXIpXFxcJChUYXJnZXROYW1lKS5wZGIiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkcmVsX2RpciIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJcJChQcm9qZWN0RGlyKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIkY2ZsYWdzX3JlbGVhc2UiCisJCQkJT3B0aW1pemF0aW9uPSIyIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkaW5jbHVkZXMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyLE5ERUJVRywkZGVmaW5lcyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMCIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iXCQoSW50RGlyKVxcXCQoVGFyZ2V0TmFtZSkucGRiIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPgorRU9NCisgICAgZm9yZWFjaChAc291cmNlcykgeworICAgICAgICBwcmludCBGIDw8ICJFT00iOworCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiRfIi8+CitFT00KKyAgICB9CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwkJPC9GaWx0ZXI+CisJPC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CitFT00KKyAgICBjbG9zZSBGOworfQorCitzdWIgY3JlYXRlQXBwUHJvamVjdCB7CisgICAgbXkgKCRhcHBuYW1lLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAkYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSAkYXBwbmFtZSB2Y3Byb2ogYXBwIHByb2plY3RcbiI7CisgICAgJHJlbF9kaXIgPSAiLi5cXCRyZWxfZGlyIjsKKyAgICAkcmVsX2RpciA9fiBzL1wvL1xcL2c7CisKKyAgICBteSAkdGFyZ2V0ID0gJGFwcG5hbWU7CisgICAgJHRhcmdldCA9fiBzL1wvL18vZzsKKyAgICAkdGFyZ2V0ID1+IHMvXC5leGUvLzsKKworICAgIG15ICR1dWlkID0gJEdVSURTWyRndWlkX2luZGV4XTsKKyAgICAkJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke3RhcmdldH1fR1VJRCJ9ID0gJHV1aWQ7CisgICAgJGd1aWRfaW5kZXggKz0gMTsKKworICAgIG15IEBzcmNzID0gc29ydChtYXAoIiRyZWxfZGlyXFwkXyIsIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9TT1VSQ0VTIn19KSk7CisgICAgbXkgQHNvdXJjZXM7CisgICAgZm9yZWFjaCAoQHNyY3MpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9cXC9nOworICAgICAgICBwdXNoKEBzb3VyY2VzLCAkXyk7CisgICAgfQorICAgIG15ICRkZWZpbmVzID0gam9pbigiLCIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIjsiLCBzb3J0KG1hcCgiJnF1b3Q7JHJlbF9kaXJcXCRfJnF1b3Q7IiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0lOQ0xVREVTIn19KSkpOworICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0NGTEFHUyJ9fSkpOworICAgICRjZmxhZ3MgPX4gcy9cIi8mcXVvdDsvZzsKKworICAgIG15ICRjZmxhZ3NfZGVidWcgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTVQvLU1UZC87CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1PLi8vOworCisgICAgbXkgJGNmbGFnc19yZWxlYXNlID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX3JlbGVhc2UgPX4gcy8tTVRkLy1NVC87CisKKyAgICBteSAkbGliczsKKyAgICBmb3JlYWNoIChzb3J0KEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9MSUJTIn19KSkgeworICAgICAgICAkXyA9fiBzL1wvL18vZzsKKyAgICAgICAgJGxpYnMgLj0gIiAkXyI7CisgICAgfQorICAgIG15IEB0bXAgID0gQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0xGTEFHUyJ9fTsKKyAgICBteSBAdG1wMiA9ICgpOworICAgIGZvcmVhY2ggKEB0bXApIHsKKyAgICAgICAgaWYgKC9eLUxUQ0cvKSB7CisgICAgICAgIH0gZWxzaWYgKC9eLUwvKSB7CisgICAgICAgICAgICAkXyA9fiBzL14tTC8tTElCUEFUSDokcmVsX2RpclwvLzsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEB0bXAyLCAkXyk7CisgICAgfQorICAgIG15ICRsZmxhZ3MgPSBqb2luKCIgIiwgc29ydChAdG1wKSkgLiAiIC1MSUJQQVRIOiRyZWxfZGlyIjsKKworICAgICRkZWZpbmVzID1+IHMvLUQvL2c7CisgICAgJGRlZmluZXMgPX4gcy9cIi9cXCZxdW90Oy9nOworICAgICRkZWZpbmVzID1+IHMvXCcvL2c7CisgICAgJGRlZmluZXMgPX4gcy9cXFxcL1xcL2c7CisgICAgJGluY2x1ZGVzID1+IHMvLUkvL2c7CisgICAgbWtkaXIgIiR0YXJnZXQiIHx8IGRpZSAiQ291bGQgbm90IGNyZWF0ZSB0aGUgZGlyZWN0b3J5ICR0YXJnZXQgZm9yIGxpYiBwcm9qZWN0IVxuIjsKKyAgICBvcGVuIEYsICI+JHRhcmdldC8kdGFyZ2V0LnZjcHJvaiIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkdGFyZ2V0LyR0YXJnZXQucHJvIGZvciB3cml0aW5nIVxuIjsKKyAgICBiaW5tb2RlIEYsICI6Y3JsZiI7CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2RpbmcgPSAiV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvamVjdAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjksMDAiCisJTmFtZT0iJHRhcmdldCIKKwlQcm9qZWN0R1VJRD0iJHV1aWQiPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkcmVsX2RpciIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJcJChQcm9qZWN0RGlyKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIkY2ZsYWdzX2RlYnVnIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkaW5jbHVkZXMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyLF9ERUJVRywkZGVmaW5lcyIKKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iXCQoSW50RGlyKVxcXCQoVGFyZ2V0TmFtZSkucGRiIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiRsaWJzIgorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIkbGZsYWdzIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJU3ViU3lzdGVtPSIxIgorCQkJCVRhcmdldE1hY2hpbmU9IjEiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiRyZWxfZGlyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlwkKFByb2plY3REaXIpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRjZmxhZ3NfcmVsZWFzZSIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiRpbmNsdWRlcyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzIsTkRFQlVHLCRkZWZpbmVzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSJcJChJbnREaXIpXFxcJChUYXJnZXROYW1lKS5wZGIiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJGxpYnMiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRsZmxhZ3MiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPgorRU9NCisgICAgZm9yZWFjaChAc291cmNlcykgeworICAgICAgICBwcmludCBGIDw8ICJFT00iOworCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiRfIi8+CitFT00KKyAgICB9CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwkJPC9GaWx0ZXI+CisJPC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CitFT00KKyAgICBjbG9zZSBGOworfQorCitzdWIgY3JlYXRlR2x1ZVByb2plY3QgeworICAgIG15ICgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSBzb2x1dGlvbnMgZmlsZVxuIjsKKyAgICAkcmVsX2RpciA9ICIuLlxcJHJlbF9kaXIiOworICAgICRyZWxfZGlyID1+IHMvXC8vXFwvZzsKKyAgICBteSAkU0xOX0hFQUQgPSAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTAuMDBcbiMgVmlzdWFsIFN0dWRpbyAyMDA4XG4iOworICAgIG15ICRTTE5fUFJFICA9ICJQcm9qZWN0KFwiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn1cIikgPSAiOworICAgIG15ICRTTE5fUE9TVCA9ICJcbkVuZFByb2plY3RcbiI7CisKKyAgICBteSBAbGlicyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fTsKKyAgICBteSBAdG1wOworICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgICRfID1+IHMvXC8vXy9nOworICAgICAgICAkXyA9fiBzL1wuYS8vOworICAgICAgICBwdXNoKEB0bXAsICRfKTsKKyAgICB9CisgICAgQGxpYnMgPSBAdG1wOworCisgICAgbXkgQGFwcHMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX07CisgICAgQHRtcCA9ICgpOworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgICRfID1+IHMvXC8vXy9nOworICAgICAgICAkXyA9fiBzL1wuZXhlLy87CisgICAgICAgIHB1c2goQHRtcCwgJF8pOworICAgIH0KKyAgICBAYXBwcyA9IEB0bXA7CisKKyAgICBvcGVuIEYsICI+Z2l0LnNsbiIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiBnaXQuc2xuIGZvciB3cml0aW5nIVxuIjsKKyAgICBiaW5tb2RlIEYsICI6Y3JsZiI7CisgICAgcHJpbnQgRiAiJFNMTl9IRUFEIjsKKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBteSAkbGlibmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9HVUlEIn07CisgICAgICAgIHByaW50IEYgIiRTTE5fUFJFIjsKKyAgICAgICAgcHJpbnQgRiAiXCIke2xpYm5hbWV9XCIsIFwiJHtsaWJuYW1lfVxcJHtsaWJuYW1lfS52Y3Byb2pcIiwgXCIke3V1aWR9XCIiOworICAgICAgICBwcmludCBGICIkU0xOX1BPU1QiOworICAgIH0KKyAgICBteSAkdXVpZF9saWJnaXQgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTX2xpYmdpdF9HVUlEIn07CisgICAgbXkgJHV1aWRfeGRpZmZfbGliID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU194ZGlmZl9saWJfR1VJRCJ9OworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIG15ICRhcHBuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QUkUiOworICAgICAgICBwcmludCBGICJcIiR7YXBwbmFtZX1cIiwgXCIke2FwcG5hbWV9XFwke2FwcG5hbWV9LnZjcHJvalwiLCBcIiR7dXVpZH1cIlxuIjsKKyAgICAgICAgcHJpbnQgRiAiCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3RcbiI7CisgICAgICAgIHByaW50IEYgIgkJJHt1dWlkX2xpYmdpdH0gPSAke3V1aWRfbGliZ2l0fVxuIjsKKyAgICAgICAgcHJpbnQgRiAiCQkke3V1aWRfeGRpZmZfbGlifSA9ICR7dXVpZF94ZGlmZl9saWJ9XG4iOworICAgICAgICBwcmludCBGICIJRW5kUHJvamVjdFNlY3Rpb24iOworICAgICAgICBwcmludCBGICIkU0xOX1BPU1QiOworICAgIH0KKworICAgIHByaW50IEYgPDwgIkVPTSI7CitHbG9iYWwKKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbgorCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyCisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorRU9NCisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgorRU9NCisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgbXkgJGxpYm5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fR1VJRCJ9OworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyXG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgfQorICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIG15ICRhcHBuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyXG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyXG4iOworICAgIH0KKworICAgIHByaW50IEYgPDwgIkVPTSI7CisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCitFT00KKyAgICBjbG9zZSBGOworfQorCisxOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvZW5naW5lLnBsIGIvY29udHJpYi9idWlsZHN5c3RlbXMvZW5naW5lLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZGE3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9lbmdpbmUucGwKQEAgLTAsMCArMSwzNTkgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEbyBub3QgY2FsbCB0aGlzIHNjcmlwdCBkaXJlY3RseSEKKyMKKyMgVGhlIGdlbmVyYXRlIHNjcmlwdCBlbnN1cmVzIHRoYXQgQElOQyBpcyBjb3JyZWN0IGJlZm9yZSB0aGUgZW5naW5lCisjIGlzIGV4ZWN1dGVkLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyaXVzIFN0b3JtLU9sc2VuIDxtc3Rvcm1vQGdtYWlsLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBDd2Q7Cit1c2UgR2VuZXJhdG9yczsKKworbXkgKCVidWlsZF9zdHJ1Y3R1cmUsICVjb21waWxlX29wdGlvbnMsIEBtYWtlZHJ5KTsKK215ICRvdXRfZGlyID0gZ2V0Y3dkKCk7CitteSAkZ2l0X2RpciA9ICRvdXRfZGlyOworJGdpdF9kaXIgPX4gcz1cXD0vPWc7CiskZ2l0X2RpciA9IGRpcm5hbWUoJGdpdF9kaXIpIHdoaWxlICghLWUgIiRnaXRfZGlyL2dpdC5jIiAmJiAiJGdpdF9kaXIiIG5lICIiKTsKK2RpZSAiQ291bGRuJ3QgZmluZCBHaXQgcmVwbyIgaWYgKCIkZ2l0X2RpciIgZXEgIiIpOworCitteSBAZ2VucyA9IEdlbmVyYXRvcnM6OmF2YWlsYWJsZSgpOworbXkgJGdlbiA9ICJWY3Byb2oiOworCitzdWIgc2hvd1VzYWdlCit7CisgICAgbXkgJGdlbmxpc3QgPSBqb2luKCcsICcsIEBnZW5zKTsKKyAgICBwcmludCA8PCAiRU9NIjsKK2dlbmVyYXRlIHVzYWdlOgorICAtZyA8R0VORVJBVE9SPiAgLS1nZW4gPEdFTkVSQVRPUj4gU3BlY2lmeSB0aGUgYnVpbGRzeXN0ZW0gZ2VuZXJhdG9yICAgIChkZWZhdWx0OiAkZ2VuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlOiAkZ2VubGlzdAorICAtbyA8UEFUSD4gICAgICAgLS1vdXQgPFBBVEg+ICAgICAgU3BlY2lmeSBvdXRwdXQgZGlyZWN0b3J5IGdlbmVyYXRpb24gIChkZWZhdWx0OiAuKQorICAtaSA8RklMRT4gICAgICAgLS1pbiA8RklMRT4gICAgICAgU3BlY2lmeSBpbnB1dCBmaWxlLCBpbnN0ZWFkIG9mIHJ1bm5pbmcgR05VIE1ha2UKKyAgLWgsLT8gICAgICAgICAgIC0taGVscCAgICAgICAgICAgIFRoaXMgaGVscAorRU9NCisgICAgZXhpdCAwOworfQorCisjIFBhcnNlIGNvbW1hbmQtbGluZSBvcHRpb25zCit3aGlsZSAoQEFSR1YpIHsKKyAgICBteSAkYXJnID0gc2hpZnQgQEFSR1Y7CisgICAgaWYgKCIkYXJnIiBlcSAiLWgiIHx8ICIkYXJnIiBlcSAiLS1oZWxwIiB8fCAiJGFyZyIgZXEgIi0/IikgeworCXNob3dVc2FnZSgpOworCWV4aXQoMCk7CisgICAgfSBlbHNpZigiJGFyZyIgZXEgIi0tb3V0IiB8fCAiJGFyZyIgZXEgIi1vIikgeworCSRvdXRfZGlyID0gc2hpZnQgQEFSR1Y7CisgICAgfSBlbHNpZigiJGFyZyIgZXEgIi0tZ2VuIiB8fCAiJGFyZyIgZXEgIi1nIikgeworCSRnZW4gPSBzaGlmdCBAQVJHVjsKKyAgICB9IGVsc2lmKCIkYXJnIiBlcSAiLS1pbiIgfHwgIiRhcmciIGVxICItaSIpIHsKKwlteSAkaW5maWxlID0gc2hpZnQgQEFSR1Y7CisgICAgICAgIG9wZW4oRiwgIjwkaW5maWxlIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGluZmlsZSI7CisgICAgICAgIEBtYWtlZHJ5ID0gPEY+OworICAgICAgICBjbG9zZShGKTsKKyAgICB9Cit9CisKKyMgTk9UIHVzaW5nIEZpbGU6OlNwZWMtPnJlbDJhYnMoJHBhdGgsICRiYXNlKSBoZXJlLCBhcworIyBpdCBmYWlscyBiYWRseSBmb3IgbWUgaW4gdGhlIG1zeXNnaXQgZW52aXJvbm1lbnQKKyRnaXRfZGlyID0gRmlsZTo6U3BlYy0+cmVsMmFicygkZ2l0X2Rpcik7Ciskb3V0X2RpciA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJG91dF9kaXIpOworbXkgJHJlbF9kaXIgPSBtYWtlT3V0UmVsMkdpdCgkZ2l0X2RpciwgJG91dF9kaXIpOworCisjIFByaW50IHNvbWUgaW5mb3JtYXRpb24gc28gdGhlIHVzZXIgZmVlbHMgaW5mb3JtZWQKK3ByaW50IDw8ICJFT00iOworLS0tLS0KK0dlbmVyYXRvcjogJGdlbgorR2l0IGRpcjogICAkZ2l0X2RpcgorT3V0IGRpcjogICAkb3V0X2RpcgorLS0tLS0KK1J1bm5pbmcgR05VIE1ha2UgdG8gZmlndXJlIG91dCBidWlsZCBzdHJ1Y3R1cmUuLi4KK0VPTQorCisjIFBpcGUgYSBtYWtlIC0tZHJ5LXJ1biBpbnRvIGEgdmFyaWFibGUsIGlmIG5vdCBhbHJlYWR5IGxvYWRlZCBmcm9tIGZpbGUKK0BtYWtlZHJ5ID0gYGNkICRnaXRfZGlyICYmIG1ha2UgLW4gTVNWQz0xIFY9MSAyPi9kZXYvbnVsbGAgaWYgIUBtYWtlZHJ5OworCisjIFBhcnNlIHRoZSBtYWtlIG91dHB1dCBpbnRvIHVzYWJsZSBpbmZvCitwYXJzZU1ha2VPdXRwdXQoKTsKKworIyBGaW5hbGx5LCBhc2sgdGhlIGdlbmVyYXRvciB0byBzdGFydCBnZW5lcmF0aW5nLi4KK0dlbmVyYXRvcnM6OmdlbmVyYXRlKCRnZW4sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworCisjIG1haW4gZmxvdyBlbmRzIGhlcmUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyMgMSkgcGF0aDogL2Zvby9iYXIvYmF6ICAgICAgICAyKSBwYXRoOiAvZm9vL2Jhci9iYXogICAzKSBwYXRoOiAvZm9vL2Jhci9iYXoKKyMgICAgYmFzZTogL2Zvby9iYXIvYmF6L3RlbXAgICAgICBiYXNlOiAvZm9vL2JhciAgICAgICAgICBiYXNlOiAvdG1wCisjICAgIHJlbDogIC4uICAgICAgICAgICAgICAgICAgICAgcmVsOiAgYmF6ICAgICAgICAgICAgICAgcmVsOiAgLi4vZm9vL2Jhci9iYXoKK3N1YiBtYWtlT3V0UmVsMkdpdAoreworICAgIG15ICgkcGF0aCwgJGJhc2UpID0gQF87CisgICAgbXkgJHJlbDsKKyAgICBpZiAoIiRwYXRoIiBlcSAiJGJhc2UiKSB7CisgICAgICAgIHJldHVybiAiLiI7CisgICAgfSBlbHNpZiAoJGJhc2UgPX4gL14kcGF0aC8pIHsKKyAgICAgICAgIyBjYXNlIDEKKyAgICAgICAgbXkgJHRtcCA9ICRiYXNlOworICAgICAgICAkdG1wID1+IHMvXiRwYXRoLy87CisgICAgICAgIGZvcmVhY2ggKHNwbGl0KCcvJywgJHRtcCkpIHsKKyAgICAgICAgICAgICRyZWwgLj0gIi4uLyIgaWYgKCIkXyIgbmUgIiIpOworICAgICAgICB9CisgICAgfSBlbHNpZiAoJHBhdGggPX4gL14kYmFzZS8pIHsKKyAgICAgICAgIyBjYXNlIDIKKyAgICAgICAgJHJlbCA9ICRwYXRoOworICAgICAgICAkcmVsID1+IHMvXiRiYXNlLy87CisgICAgICAgICRyZWwgPSAiLi8kcmVsIjsKKyAgICB9IGVsc2UgeworICAgICAgICBteSAkdG1wID0gJGJhc2U7CisgICAgICAgIGZvcmVhY2ggKHNwbGl0KCcvJywgJHRtcCkpIHsKKyAgICAgICAgICAgICRyZWwgLj0gIi4uLyIgaWYgKCIkXyIgbmUgIiIpOworICAgICAgICB9CisgICAgICAgICRyZWwgLj0gJHBhdGg7CisgICAgfQorICAgICRyZWwgPX4gcy9cL1wvL1wvL2c7ICMgc2ltcGxpZnkKKyAgICAkcmVsID1+IHMvXC8kLy87ICAgICAjIGRvbid0IGVuZCB3aXRoIC8KKyAgICByZXR1cm4gJHJlbDsKK30KKworc3ViIHBhcnNlTWFrZU91dHB1dAoreworICAgIHByaW50ICJQYXJzaW5nIEdOVSBNYWtlIG91dHB1dCB0byBmaWd1cmUgb3V0IGJ1aWxkIHN0cnVjdHVyZS4uLlxuIjsKKyAgICBteSAkbGluZSA9IDA7CisgICAgd2hpbGUgKG15ICR0ZXh0ID0gc2hpZnQgQG1ha2VkcnkpIHsKKyAgICAgICAgbXkgJGF0ZV9uZXh0OworICAgICAgICBkbyB7CisgICAgICAgICAgICAkYXRlX25leHQgPSAwOworICAgICAgICAgICAgJGxpbmUrKzsKKyAgICAgICAgICAgIGNob21wICR0ZXh0OworICAgICAgICAgICAgY2hvcCAkdGV4dCBpZiAoJHRleHQgPX4gL1xyJC8pOworICAgICAgICAgICAgaWYgKCR0ZXh0ID1+IC9cXCQvKSB7CisgICAgICAgICAgICAgICAgJHRleHQgPX4gcy9cXCQvLzsKKyAgICAgICAgICAgICAgICAkdGV4dCAuPSBzaGlmdCBAbWFrZWRyeTsKKyAgICAgICAgICAgICAgICAkYXRlX25leHQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKCRhdGVfbmV4dCk7CisKKyAgICAgICAgaWYgKCR0ZXh0ID1+IC9edGVzdCAvKSB7CisgICAgICAgICAgICAjIG9wdGlvbnMgdG8gdGVzdCAoZWcgLW8pIG1heSBiZSBtaXN0YWtlbiBmb3IgbGlua2VyIG9wdGlvbnMKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBpZigkdGV4dCA9fiAvIC1jIC8pIHsKKyAgICAgICAgICAgICMgY29tcGlsYXRpb24KKyAgICAgICAgICAgIGhhbmRsZUNvbXBpbGVMaW5lKCR0ZXh0LCAkbGluZSk7CisKKyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gLyAtbyAvKSB7CisgICAgICAgICAgICAjIGxpbmtpbmcgZXhlY3V0YWJsZQorICAgICAgICAgICAgaGFuZGxlTGlua0xpbmUoJHRleHQsICRsaW5lKTsKKworICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXC5vIC8gJiYgJHRleHQgPX4gL1wuYSAvKSB7CisgICAgICAgICAgICAjIGxpYmlmeWluZworICAgICAgICAgICAgaGFuZGxlTGliTGluZSgkdGV4dCwgJGxpbmUpOworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15jcCAvKSB7CisjICAgICAgICAgICAgIyBjb3B5IGZpbGUgYXJvdW5kCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXnJtIC1mIC8pIHsKKyMgICAgICAgICAgICAjIHNoZWxsIGNvbW1hbmQKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ebWFrZVsgXFtdLykgeworIyAgICAgICAgICAgICMgbWFrZSBvdXRwdXQKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eZWNobyAvKSB7CisjICAgICAgICAgICAgIyBlY2hvIHRvIGZpbGUKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eaWYgLykgeworIyAgICAgICAgICAgICMgc2hlbGwgY29uZGl0aW9uYWwKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edGNsc2ggLykgeworIyAgICAgICAgICAgICMgdHJhbnNsYXRpb24gc3R1ZmYKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edW1hc2sgLykgeworIyAgICAgICAgICAgICMgaGFuZGxpbmcgYm9pbGVycGxhdGVzCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXCRcKFw6XCkvKSB7CisjICAgICAgICAgICAgIyBpZ25vcmUKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eRkxBR1M9LykgeworIyAgICAgICAgICAgICMgZmxhZ3MgY2hlY2sgZm9yIGRlcGVuZGVuY2llcworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL14nXC91c3JcL2JpblwvcGVybCcgLU1FcnJvciAtZS8pIHsKKyMgICAgICAgICAgICAjIHBlcmwgY29tbWFuZHMgZm9yIGNvcHlpbmcgZmlsZXMKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9nZW5lcmF0ZS1jbWRsaXN0XC5zaC8pIHsKKyMgICAgICAgICAgICAjIGNvbW1hbmQgZm9yIGdlbmVyYXRpbmcgbGlzdCBvZiBjb21tYW5kcworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL25ldyBsb2NhdGlvbnMgb3IgVGNsLykgeworIyAgICAgICAgICAgICMgY29tbWFuZCBmb3IgZGV0ZWN0aW5nIFRjbC9UayBjaGFuZ2VzCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvbWtkaXIgLXAvKSB7CisjICAgICAgICAgICAgIyBjb21tYW5kIGNyZWF0aW5nIHBhdGgKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC86IG5vIGN1c3RvbSB0ZW1wbGF0ZXMgeWV0LykgeworIyAgICAgICAgICAgICMgd2hhdGV2ZXIKKyMKKyMgICAgICAgIH0gZWxzZSB7CisjICAgICAgICAgICAgcHJpbnQgIlVuaGFuZGxlZCAobGluZTogJGxpbmUpOiAkdGV4dFxuIjsKKyAgICAgICAgfQorICAgIH0KKworIyAgICB1c2UgRGF0YTo6RHVtcGVyOworIyAgICBwcmludCAiUGFyc2VkIGJ1aWxkIHN0cnVjdHVyZTpcbiI7CisjICAgIHByaW50IER1bXBlciglYnVpbGRfc3RydWN0dXJlKTsKK30KKworIyB2YXJpYWJsZXMgZm9yIHRoZSBjb21waWxhdGlvbiBwYXJ0IG9mIGVhY2ggc3RlcAorbXkgKEBkZWZpbmVzLCBAaW5jcGF0aHMsIEBjZmxhZ3MsIEBzb3VyY2VzKTsKKworc3ViIGNsZWFyQ29tcGlsZVN0ZXAKK3sKKyAgICBAZGVmaW5lcyA9ICgpOworICAgIEBpbmNwYXRocyA9ICgpOworICAgIEBjZmxhZ3MgPSAoKTsKKyAgICBAc291cmNlcyA9ICgpOworfQorCitzdWIgcmVtb3ZlRHVwbGljYXRlcworeworICAgIG15ICglZHVwSGFzaCwgJGVudHJ5KTsKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGRlZmluZXM7CisgICAgQGRlZmluZXMgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBpbmNwYXRoczsKKyAgICBAaW5jcGF0aHMgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBjZmxhZ3M7CisgICAgQGNmbGFncyA9IGtleXMgJWR1cEhhc2g7Cit9CisKK3N1YiBoYW5kbGVDb21waWxlTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSBAcGFydHMgPSBzcGxpdCgnICcsICRsaW5lKTsKKyAgICBteSAkc291cmNlZmlsZTsKKyAgICBzaGlmdChAcGFydHMpOyAjIGlnbm9yZSBjbWQKKyAgICB3aGlsZSAobXkgJHBhcnQgPSBzaGlmdCBAcGFydHMpIHsKKyAgICAgICAgaWYgKCIkcGFydCIgZXEgIi1vIikgeworICAgICAgICAgICAgIyBpZ25vcmUgb2JqZWN0IGZpbGUKKyAgICAgICAgICAgIHNoaWZ0IEBwYXJ0czsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWMiKSB7CisgICAgICAgICAgICAjIGlnbm9yZSBjb21waWxlIGZsYWcKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWMiKSB7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLj8tSS8pIHsKKyAgICAgICAgICAgIHB1c2goQGluY3BhdGhzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLj8tRC8pIHsKKyAgICAgICAgICAgIHB1c2goQGRlZmluZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14tLykgeworICAgICAgICAgICAgcHVzaChAY2ZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihjfGNjfGNwcCkkLykgeworICAgICAgICAgICAgJHNvdXJjZWZpbGUgPSAkcGFydDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiVW5oYW5kbGVkIGNvbXBpbGVyIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorICAgIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9DRkxBR1MifX0gPSBAY2ZsYWdzOworICAgIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0lOQ1BBVEhTIn19ID0gQGluY3BhdGhzOworICAgIGNsZWFyQ29tcGlsZVN0ZXAoKTsKK30KKworc3ViIGhhbmRsZUxpYkxpbmUKK3sKKyAgICBteSAoJGxpbmUsICRsaW5lbm8pID0gQF87CisgICAgbXkgKEBvYmpmaWxlcywgQGxmbGFncywgJGxpYm91dCwgJHBhcnQpOworICAgICMga2lsbCBjbWQgYW5kIHJtICdwcmVmaXgnCisgICAgJGxpbmUgPX4gcy9ecm0gLWYgLiogJiYgLiogcmNzIC8vOworICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIHdoaWxlICgkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoJHBhcnQgPX4gL14tLykgeworICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihvfG9iaikkLykgeworICAgICAgICAgICAgcHVzaChAb2JqZmlsZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGF8bGliKSQvKSB7CisgICAgICAgICAgICAkbGlib3V0ID0gJHBhcnQ7CisgICAgICAgICAgICAkbGlib3V0ID1+IHMvXC5hJC8vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgbGliIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorIyAgICBwcmludCAiTGliT3V0OiAnJGxpYm91dCdcbkxGbGFnczogQGxmbGFnc1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CisjICAgIGV4aXQoMSk7CisgICAgZm9yZWFjaCAoQG9iamZpbGVzKSB7CisgICAgICAgIG15ICRzb3VyY2VmaWxlID0gJF87CisgICAgICAgICRzb3VyY2VmaWxlID1+IHMvXC5vLy5jLzsKKyAgICAgICAgcHVzaChAc291cmNlcywgJHNvdXJjZWZpbGUpOworICAgICAgICBwdXNoKEBjZmxhZ3MsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9DRkxBR1MifX0pOworICAgICAgICBwdXNoKEBkZWZpbmVzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fREVGSU5FUyJ9fSk7CisgICAgICAgIHB1c2goQGluY3BhdGhzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fSU5DUEFUSFMifX0pOworICAgIH0KKyAgICByZW1vdmVEdXBsaWNhdGVzKCk7CisKKyAgICBwdXNoKEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fSwgJGxpYm91dCk7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fSJ9fSA9ICgiX0RFRklORVMiLCAiX0lOQ0xVREVTIiwgIl9DRkxBR1MiLCAiX1NPVVJDRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9PQkpFQ1RTIik7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9JTkNMVURFUyJ9fSA9IEBpbmNwYXRoczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0NGTEFHUyJ9fSA9IEBjZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9MRkxBR1MifX0gPSBAbGZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fU09VUkNFUyJ9fSA9IEBzb3VyY2VzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fT0JKRUNUUyJ9fSA9IEBvYmpmaWxlczsKKyAgICBjbGVhckNvbXBpbGVTdGVwKCk7Cit9CisKK3N1YiBoYW5kbGVMaW5rTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSAoQG9iamZpbGVzLCBAbGZsYWdzLCBAbGlicywgJGFwcG91dCwgJHBhcnQpOworICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIHNoaWZ0KEBwYXJ0cyk7ICMgaWdub3JlIGNtZAorICAgIHdoaWxlICgkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoJHBhcnQgPX4gL14tSUdOT1JFLykgeworICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLVtHUklNRE9dLykgeworICAgICAgICAgICAgIyBlYXQgY29tcGlsZXIgZmxhZ3MKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLW8iKSB7CisgICAgICAgICAgICAkYXBwb3V0ID0gc2hpZnQgQHBhcnRzOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbHoiKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAiemxpYi5saWIiKTsKKwl9IGVsc2lmICgiJHBhcnQiIGVxICItbGNyeXB0byIpIHsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICJsaWJlYXkzMi5saWIiKTsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWxzc2wiKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAic3NsZWF5MzIubGliIik7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLS8pIHsKKyAgICAgICAgICAgIHB1c2goQGxmbGFncywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oYXxsaWIpJC8pIHsKKyAgICAgICAgICAgICRwYXJ0ID1+IHMvXC5hJC8ubGliLzsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKG98b2JqKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBvYmpmaWxlcywgJHBhcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgbGliIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorIyAgICBwcmludCAiQXBwT3V0OiAnJGFwcG91dCdcbkxGbGFnczogQGxmbGFnc1xuTGlicyAgOiBAbGlic1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CisjICAgIGV4aXQoMSk7CisgICAgZm9yZWFjaCAoQG9iamZpbGVzKSB7CisgICAgICAgIG15ICRzb3VyY2VmaWxlID0gJF87CisgICAgICAgICRzb3VyY2VmaWxlID1+IHMvXC5vLy5jLzsKKyAgICAgICAgcHVzaChAc291cmNlcywgJHNvdXJjZWZpbGUpOworICAgICAgICBwdXNoKEBjZmxhZ3MsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9DRkxBR1MifX0pOworICAgICAgICBwdXNoKEBkZWZpbmVzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fREVGSU5FUyJ9fSk7CisgICAgICAgIHB1c2goQGluY3BhdGhzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fSU5DUEFUSFMifX0pOworICAgIH0KKyAgICByZW1vdmVEdXBsaWNhdGVzKCk7CisKKyAgICByZW1vdmVEdXBsaWNhdGVzKCk7CisgICAgcHVzaChAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX0sICRhcHBvdXQpOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH0ifX0gPSAoIl9ERUZJTkVTIiwgIl9JTkNMVURFUyIsICJfQ0ZMQUdTIiwgIl9MRkxBR1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9TT1VSQ0VTIiwgIl9PQkpFQ1RTIiwgIl9MSUJTIik7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9JTkNMVURFUyJ9fSA9IEBpbmNwYXRoczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0NGTEFHUyJ9fSA9IEBjZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9MRkxBR1MifX0gPSBAbGZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fU09VUkNFUyJ9fSA9IEBzb3VyY2VzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fT0JKRUNUUyJ9fSA9IEBvYmpmaWxlczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0xJQlMifX0gPSBAbGliczsKKyAgICBjbGVhckNvbXBpbGVTdGVwKCk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9nZW5lcmF0ZSBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2dlbmVyYXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMTBmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9nZW5lcmF0ZQpAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR2VuZXJhdGUgYnVpbGRzeXN0ZW0gZmlsZXMKKyMKKyMgVGhpcyBzY3JpcHQgZ2VuZXJhdGUgYnVpbGRzeXN0ZW0gZmlsZXMgYmFzZWQgb24gdGhlIG91dHB1dCBvZiBhCisjIEdOVSBNYWtlIC0tZHJ5LXJ1biwgZW5hYmxpbmcgV2luZG93cyB1c2VycyB0byBkZXZlbG9wIEdpdCB3aXRoIHRoZWlyCisjIHRydXN0ZWQgSURFIHdpdGggbmF0aXZlIHByb2plY3RzLgorIworIyBOb3RlOgorIyBJdCBpcyBub3QgbWVhbnQgYXMgKnRoZSogd2F5IG9mIGJ1aWxkaW5nIEdpdCB3aXRoIE1TVkMsIGJ1dCBtZXJlbHkgYQorIyBjb252ZW5pZW5jZS4gVGhlIGNvcnJlY3Qgd2F5IG9mIGJ1aWxkaW5nIEdpdCB3aXRoIE1TVkMgaXMgdG8gdXNlIHRoZQorIyBHTlUgTWFrZSB0b29sIHRvIGJ1aWxkIHdpdGggdGhlIG1haW50YWluZWQgTWFrZWZpbGUgaW4gdGhlIHJvb3Qgb2YKKyMgdGhlIHByb2plY3QuIElmIHlvdSBoYXZlIHRoZSBtc3lzZ2l0IGVudmlyb25tZW50IGluc3RhbGxlZCBhbmQKKyMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudCBjb25zb2xlLCB0b2dldGhlciB3aXRoIHRoZSBWaXN1YWwgU3R1ZGlvCisjIGVudmlyb25tZW50IHlvdSB3aXNoIHRvIGJ1aWxkIGZvciwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJ1biB0aGUKKyMgY29tbWFuZDoKKyMgICAgIG1ha2UgTVNWQz0xCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBNYXJpdXMgU3Rvcm0tT2xzZW4gPG1zdG9ybW9AZ21haWwuY29tPgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBDd2Q7CisKK215ICRnaXRfZGlyID0gZ2V0Y3dkKCk7CiskZ2l0X2RpciA9fiBzPVxcPS89ZzsKKyRnaXRfZGlyID0gZGlybmFtZSgkZ2l0X2Rpcikgd2hpbGUgKCEtZSAiJGdpdF9kaXIvZ2l0LmMiICYmICIkZ2l0X2RpciIgbmUgIiIpOworZGllICJDb3VsZG4ndCBmaW5kIEdpdCByZXBvIiBpZiAoIiRnaXRfZGlyIiBlcSAiIik7CitleGVjIGpvaW4oIiAiLCAoIlBFUkw1TElCPSR7Z2l0X2Rpcn0vY29udHJpYi9idWlsZHN5c3RlbXMgJHtnaXRfZGlyfS9jb250cmliL2J1aWxkc3lzdGVtcy9lbmdpbmUucGwiLCBAQVJHVikpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvcGFyc2UucGwgYi9jb250cmliL2J1aWxkc3lzdGVtcy9wYXJzZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTY1NmVjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9idWlsZHN5c3RlbXMvcGFyc2UucGwKQEAgLTAsMCArMSwyMjggQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEbyBub3QgY2FsbCB0aGlzIHNjcmlwdCBkaXJlY3RseSEKKyMKKyMgVGhlIGdlbmVyYXRlIHNjcmlwdCBlbnN1cmVzIHRoYXQgQElOQyBpcyBjb3JyZWN0IGJlZm9yZSB0aGUgZW5naW5lCisjIGlzIGV4ZWN1dGVkLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyaXVzIFN0b3JtLU9sc2VuIDxtc3Rvcm1vQGdtYWlsLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgQ3dkOworCitteSAkZmlsZSA9ICRBUkdWWzBdOworZGllICJObyBmaWxlIHByb3ZpZGVkISIgaWYgIWRlZmluZWQgJGZpbGU7CisKK215ICgkY2ZsYWdzLCAkdGFyZ2V0LCAkdHlwZSwgJGxpbmUpOworCitvcGVuKEYsICI8JGZpbGUiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkZmlsZSI7CitteSBAZGF0YSA9IDxGPjsKK2Nsb3NlKEYpOworCit3aGlsZSAobXkgJHRleHQgPSBzaGlmdCBAZGF0YSkgeworICAgIG15ICRhdGVfbmV4dDsKKyAgICBkbyB7CisgICAgICAgICRhdGVfbmV4dCA9IDA7CisgICAgICAgICRsaW5lKys7CisgICAgICAgIGNob21wICR0ZXh0OworICAgICAgICBjaG9wICR0ZXh0IGlmICgkdGV4dCA9fiAvXHIkLyk7CisgICAgICAgIGlmICgkdGV4dCA9fiAvXFwkLykgeworICAgICAgICAgICAgJHRleHQgPX4gcy9cXCQvLzsKKyAgICAgICAgICAgICR0ZXh0IC49IHNoaWZ0IEBkYXRhOworICAgICAgICAgICAgJGF0ZV9uZXh0ID0gMTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUoJGF0ZV9uZXh0KTsKKworICAgIGlmKCR0ZXh0ID1+IC8gLWMgLykgeworICAgICAgICAjIGNvbXBpbGF0aW9uCisgICAgICAgIGhhbmRsZUNvbXBpbGVMaW5lKCR0ZXh0LCAkbGluZSk7CisKKyAgICB9IGVsc2lmICgkdGV4dCA9fiAvIC1vIC8pIHsKKyAgICAgICAgIyBsaW5raW5nIGV4ZWN1dGFibGUKKyAgICAgICAgaGFuZGxlTGlua0xpbmUoJHRleHQsICRsaW5lKTsKKworICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9cLm8gLyAmJiAkdGV4dCA9fiAvXC5hIC8pIHsKKyAgICAgICAgIyBsaWJpZnlpbmcKKyAgICAgICAgaGFuZGxlTGliTGluZSgkdGV4dCwgJGxpbmUpOworCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eY3AgLykgeworIyAgICAgICAgIyBjb3B5IGZpbGUgYXJvdW5kCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ecm0gLWYgLykgeworIyAgICAgICAgIyBzaGVsbCBjb21tYW5kCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ebWFrZVsgXFtdLykgeworIyAgICAgICAgIyBtYWtlIG91dHB1dAorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXmVjaG8gLykgeworIyAgICAgICAgIyBlY2hvIHRvIGZpbGUKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15pZiAvKSB7CisjICAgICAgICAjIHNoZWxsIGNvbmRpdGlvbmFsCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edGNsc2ggLykgeworIyAgICAgICAgIyB0cmFuc2xhdGlvbiBzdHVmZgorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXnVtYXNrIC8pIHsKKyMgICAgICAgICMgaGFuZGxpbmcgYm9pbGVycGxhdGVzCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9cJFwoXDpcKS8pIHsKKyMgICAgICAgICMgaWdub3JlCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eRkxBR1M9LykgeworIyAgICAgICAgIyBmbGFncyBjaGVjayBmb3IgZGVwZW5kZW5jaWVzCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eJ1wvdXNyXC9iaW5cL3BlcmwnIC1NRXJyb3IgLWUvKSB7CisjICAgICAgICAjIHBlcmwgY29tbWFuZHMgZm9yIGNvcHlpbmcgZmlsZXMKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL2dlbmVyYXRlLWNtZGxpc3RcLnNoLykgeworIyAgICAgICAgIyBjb21tYW5kIGZvciBnZW5lcmF0aW5nIGxpc3Qgb2YgY29tbWFuZHMKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL150ZXN0IC8gJiYgJHRleHQgPX4gL3x8IHJtIC1mIC8pIHsKKyMgICAgICAgICMgY29tbWFuZHMgcmVtb3ZpbmcgZXhlY3V0YWJsZXMsIGlmIHRoZXkgZXhpc3QKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL25ldyBsb2NhdGlvbnMgb3IgVGNsLykgeworIyAgICAgICAgIyBjb21tYW5kIGZvciBkZXRlY3RpbmcgVGNsL1RrIGNoYW5nZXMKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL21rZGlyIC1wLykgeworIyAgICAgICAgIyBjb21tYW5kIGNyZWF0aW5nIHBhdGgKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gLzogbm8gY3VzdG9tIHRlbXBsYXRlcyB5ZXQvKSB7CisjICAgICAgICAjIHdoYXRldmVyCisKKyAgICB9IGVsc2UgeworIyAgICAgICAgcHJpbnQgIlVuaGFuZGxlZCAobGluZTogJGxpbmUpOiAkdGV4dFxuIjsKKyAgICB9Cit9CitjbG9zZShGKTsKKworIyB1c2UgRGF0YTo6RHVtcGVyOworIyBwcmludCAiUGFyc2VkIGJ1aWxkIHN0cnVjdHVyZTpcbiI7CisjIHByaW50IER1bXBlciglYnVpbGRfc3RydWN0dXJlKTsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZ1bmN0aW9ucyB1bmRlciBoZXJlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK215ICglYnVpbGRfc3RydWN0dXJlLCBAZGVmaW5lcywgQGluY3BhdGhzLCBAY2ZsYWdzLCBAc291cmNlcyk7CisKK3N1YiBjbGVhckNvbXBpbGVTdGVwCit7CisgICAgQGRlZmluZXMgPSAoKTsKKyAgICBAaW5jcGF0aHMgPSAoKTsKKyAgICBAY2ZsYWdzID0gKCk7CisgICAgQHNvdXJjZXMgPSAoKTsKK30KKworc3ViIHJlbW92ZUR1cGxpY2F0ZXMKK3sKKyAgICBteSAoJWR1cEhhc2gsICRlbnRyeSk7CisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBkZWZpbmVzOworICAgIEBkZWZpbmVzID0ga2V5cyAlZHVwSGFzaDsKKworICAgICVkdXBIYXNoID0gbWFwIHsgJF8sIDEgfSBAaW5jcGF0aHM7CisgICAgQGluY3BhdGhzID0ga2V5cyAlZHVwSGFzaDsKKworICAgICVkdXBIYXNoID0gbWFwIHsgJF8sIDEgfSBAY2ZsYWdzOworICAgIEBjZmxhZ3MgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBzb3VyY2VzOworICAgIEBzb3VyY2VzID0ga2V5cyAlZHVwSGFzaDsKK30KKworc3ViIGhhbmRsZUNvbXBpbGVMaW5lCit7CisgICAgbXkgKCRsaW5lLCAkbGluZW5vKSA9IEBfOworICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIHNoaWZ0KEBwYXJ0cyk7ICMgaWdub3JlIGNtZAorICAgIHdoaWxlIChteSAkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoIiRwYXJ0IiBlcSAiLW8iKSB7CisgICAgICAgICAgICAjIGlnbm9yZSBvYmplY3QgZmlsZQorICAgICAgICAgICAgc2hpZnQgQHBhcnRzOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItYyIpIHsKKyAgICAgICAgICAgICMgaWdub3JlIGNvbXBpbGUgZmxhZworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItYyIpIHsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14uPy1JLykgeworICAgICAgICAgICAgcHVzaChAaW5jcGF0aHMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14uPy1ELykgeworICAgICAgICAgICAgcHVzaChAZGVmaW5lcywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi0vKSB7CisgICAgICAgICAgICBwdXNoKEBjZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGN8Y2N8Y3BwKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBzb3VyY2VzLCAkcGFydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkaWUgIlVuaGFuZGxlZCBjb21waWxlciBvcHRpb24gQCBsaW5lICRsaW5lbm86ICRwYXJ0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICAjcHJpbnQgIlNvdXJjZXM6IEBzb3VyY2VzXG5DRmxhZ3M6IEBjZmxhZ3NcbkRlZmluZTogQGRlZmluZXNcbkluY3BhdDogQGluY3BhdGhzXG4iOworICAgICNleGl0KDEpOworfQorCitzdWIgaGFuZGxlTGliTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSAoQG9iamZpbGVzLCBAbGZsYWdzLCAkbGlib3V0LCAkcGFydCk7CisgICAgIyBraWxsIGNtZCBhbmQgcm0gJ3ByZWZpeCcKKyAgICAkbGluZSA9fiBzL15ybSAtZiAuKiAmJiAuKiByY3MgLy87CisgICAgbXkgQHBhcnRzID0gc3BsaXQoJyAnLCAkbGluZSk7CisgICAgd2hpbGUgKCRwYXJ0ID0gc2hpZnQgQHBhcnRzKSB7CisgICAgICAgIGlmICgkcGFydCA9fiAvXi0vKSB7CisgICAgICAgICAgICBwdXNoKEBsZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKG98b2JqKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBvYmpmaWxlcywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oYXxsaWIpJC8pIHsKKyAgICAgICAgICAgICRsaWJvdXQgPSAkcGFydDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiVW5oYW5kbGVkIGxpYiBvcHRpb24gQCBsaW5lICRsaW5lbm86ICRwYXJ0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICAjcHJpbnQgIkxpYk91dDogJyRsaWJvdXQnXG5MRmxhZ3M6IEBsZmxhZ3Ncbk9maWxlczogQG9iamZpbGVzXG4iOworICAgICNleGl0KDEpOworICAgIHJlbW92ZUR1cGxpY2F0ZXMoKTsKKyAgICBwdXNoKEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fSwgJGxpYm91dCk7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fSJ9fSA9ICgiX0RFRklORVMiLCAiX0lOQ0xVREVTIiwgIl9DRkxBR1MiLCAiX1NPVVJDRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9PQkpFQ1RTIik7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9JTkNMVURFUyJ9fSA9IEBpbmNwYXRoczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0NGTEFHUyJ9fSA9IEBjZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9TT1VSQ0VTIn19ID0gQHNvdXJjZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9PQkpFQ1RTIn19ID0gQG9iamZpbGVzOworICAgIGNsZWFyQ29tcGlsZVN0ZXAoKTsKK30KKworc3ViIGhhbmRsZUxpbmtMaW5lCit7CisgICAgbXkgKCRsaW5lLCAkbGluZW5vKSA9IEBfOworICAgIG15IChAb2JqZmlsZXMsIEBsZmxhZ3MsIEBsaWJzLCAkYXBwb3V0LCAkcGFydCk7CisgICAgbXkgQHBhcnRzID0gc3BsaXQoJyAnLCAkbGluZSk7CisgICAgc2hpZnQoQHBhcnRzKTsgIyBpZ25vcmUgY21kCisgICAgd2hpbGUgKCRwYXJ0ID0gc2hpZnQgQHBhcnRzKSB7CisgICAgICAgIGlmICgkcGFydCA9fiAvXi1bR1JJRE9dLykgeworICAgICAgICAgICAgIyBlYXQgY29tcGlsZXIgZmxhZ3MKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLW8iKSB7CisgICAgICAgICAgICAkYXBwb3V0ID0gc2hpZnQgQHBhcnRzOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi0vKSB7CisgICAgICAgICAgICBwdXNoKEBsZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGF8bGliKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihvfG9iaikkLykgeworICAgICAgICAgICAgcHVzaChAb2JqZmlsZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiVW5oYW5kbGVkIGxpYiBvcHRpb24gQCBsaW5lICRsaW5lbm86ICRwYXJ0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICAjcHJpbnQgIkFwcE91dDogJyRhcHBvdXQnXG5MRmxhZ3M6IEBsZmxhZ3NcbkxpYnMgIDogQGxpYnNcbk9maWxlczogQG9iamZpbGVzXG4iOworICAgICNleGl0KDEpOworICAgIHJlbW92ZUR1cGxpY2F0ZXMoKTsKKyAgICBwdXNoKEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fSwgJGFwcG91dCk7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fSJ9fSA9ICgiX0RFRklORVMiLCAiX0lOQ0xVREVTIiwgIl9DRkxBR1MiLCAiX0xGTEFHUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1NPVVJDRVMiLCAiX09CSkVDVFMiLCAiX0xJQlMiKTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0RFRklORVMifX0gPSBAZGVmaW5lczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0lOQ0xVREVTIn19ID0gQGluY3BhdGhzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fQ0ZMQUdTIn19ID0gQGNmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0xGTEFHUyJ9fSA9IEBsZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9TT1VSQ0VTIn19ID0gQHNvdXJjZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9PQkpFQ1RTIn19ID0gQG9iamZpbGVzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fTElCUyJ9fSA9IEBsaWJzOworICAgIGNsZWFyQ29tcGlsZVN0ZXAoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY2lhYm90L0lOU1RBTEwgYi9jb250cmliL2NpYWJvdC9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjI5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NpYWJvdC9JTlNUQUxMCkBAIC0wLDAgKzEsNTQgQEAKKz0gSW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyA9CisKK1R3byBzY3JpcHRzIGFyZSBpbmNsdWRlZC4gIFRoZSBQeXRob24gb25lIChjaWFib3QucHkpIGlzIGZhc3RlciBhbmQKK21vcmUgY2FwYWJsZTsgdGhlIHNoZWxsIG9uZSAoY2lhYm90LnNoKSBpcyBhIGZhbGxiYWNrIGluIGNhc2UgUHl0aG9uCitnaXZlcyB5b3VyIGdpdCBob3N0aW5nIHNpdGUgaW5kaWdlc3Rpb24uIChJIGtub3cgb2Ygbm8gc3VjaCBzaXRlcy4pCisKK0l0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gbW9kaWZ5IHRoZSBzY3JpcHQgaW4gb3JkZXIgdG8gcHV0IGl0CitpbiBwbGFjZTsgaW4gZmFjdCwgdGhpcyBpcyBub3cgZGlzY291cmFnZWQuIEl0IGlzIGVudGlyZWx5Citjb25maWd1cmFibGUgd2l0aCB0aGUgZm9sbG93aW5nIGdpdCBjb25maWcgdmFyaWFibGVzOgorCitjaWFib3QucHJvamVjdCA9IG5hbWUgb2YgdGhlIHByb2plY3QKK2NpYWJvdC5yZXBvID0gbmFtZSBvZiB0aGUgcHJvamVjdCByZXBvIGZvciBnaXR3ZWIvY2dpdCBwdXJwb3NlcworY2lhYm90LnhtbHJwYyAgPSBpZiB0cnVlLCBzaGlwIG5vdGlmaWNhdGlvbnMgdmlhIFhNTC1SUEMKK2NpYWJvdC5yZXZmb3JtYXQgPSBmb3JtYXQgaW4gd2hpY2ggdGhlIHJldmlzaW9uIGlzIHNob3duCisKK1RoZSByZXZmb3JtYXQgdmFyaWFibGUgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXMKK3JhdyAtPiBmdWxsIGhleCBJRCBvZiBjb21taXQKK3Nob3J0IC0+IGZpcnN0IDEyIGNoYXJzIG9mIGhleCBJRAorZGVzY3JpYmUgLT4gZGVzY3JpYmUgcmVsYXRpdmUgdG8gbGFzdCB0YWcsIGZhbGxpbmcgYmFjayB0byBzaG9ydAorCitjaWFib3QucHJvamVjdCBkZWZhdWx0cyB0byB0aGUgZGlyZWN0b3J5IG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgdG9wbGV2ZWwuCitjaWFib3QucmVwbyBkZWZhdWx0cyB0byBjaWFib3QucHJvamVjdCBsb3dlcmNhc2VkLgorY2lhYm90LnhtbHJwYyBkZWZhdWx0cyB0byBUcnVlCitjaWFib3QucmV2Zm9ybWF0IGRlZmF1bHRzIHRvICdkZXNjcmliZScuCisKK1RoaXMgbWVhbnMgdGhhdCBpbiB0aGUgbm9ybWFsIGNhc2UgeW91IG5lZWQgbm90IGRvIGFueSBjb25maWd1cmF0aW9uIGF0IGFsbCwKK2hvd2V2ZXIgc2V0dGluZyBjaWFib3QucHJvamVjdCB3aWxsIGFsbG93IHRoZSBob29rIHRvIHJ1biBzbGlnaHRseSBmYXN0ZXIuCisKK09uY2UgeW91J3ZlIHNldCB0aGVzZSB2YXJpYWJsZXMsIHRyeSB5b3VyIHNjcmlwdCB3aXRoIC1uIHRvIHNlZSB0aGUKK25vdGlmaWNhdGlvbiBtZXNzYWdlIGR1bXBlZCB0byBzdGRvdXQgYW5kIHZlcmlmeSB0aGF0IGl0IGxvb2tzIHNhbmUuCisKK1RvIGxpdmUtdGVzdCB0aGVzZSBzY3JpcHRzLCB5b3VyIHByb2plY3QgbmVlZHMgdG8gaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgd2l0aAordGhlIENJQSBzaXRlLiAgSGVyZSBhcmUgdGhlIHN0ZXBzOgorCisxLiBPcGVuIGFuIElSQyB3aW5kb3cgb24gaXJjOi8vZnJlZW5vZGUvY29tbWl0cyBvciB5b3VyIHJlZ2lzdGVyZWQKKyAgIHByb2plY3QgSVJDIGNoYW5uZWwuCisKKzIuIFJ1biBjaWFib3QucHkgYW5kL29yIGNpYWJvdC5zaCBmcm9tIGFueSBkaXJlY3RvcnkgdW5kZXIgZ2l0CisgICBjb250cm9sLgorCitZb3Ugc2hvdWxkIHNlZSBhIG5vdGlmaWNhdGlvbiBvbiB0aGUgY2hhbm5lbCBmb3IgeW91ciBtb3N0IHJlY2VudCBjb21taXQuCisKK0FmdGVyIHZlcmlmeWluZyBjb3JyZWN0IGZ1bmN0aW9uLCBpbnN0YWxsIG9uZSBvZiB0aGVzZSBzY3JpcHRzIGVpdGhlcgoraW4gYSBwb3N0LWNvbW1pdCBob29rIG9yIGluIGFuIHVwZGF0ZSBob29rLgorCitJbiBwb3N0LWNvbW1pdCwgcnVuIGl0IHdpdGhvdXQgYXJndW1lbnRzLiBJdCB3aWxsIHF1ZXJ5IGZvcgorY3VycmVudCBIRUFEIGFuZCB0aGUgbGF0ZXN0IGNvbW1pdCBJRCB0byBnZXQgdGhlIGluZm9ybWF0aW9uIGl0CituZWVkcy4KKworSW4gdXBkYXRlLCBjYWxsIGl0IHdpdGggYSByZWZuYW1lIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiBjb21taXRzOgorWW91IHdhbnQgdG8gcmV2ZXJzZSB0aGUgb3JkZXIgZ2l0IHJldi1saXN0IGVtaXRzIGJlY2F1c2UgaXQgbGlzdHMKK2Zyb20gbW9zdCByZWNlbnQgdG8gb2xkZXN0LgorCisvcGF0aC90by9jaWFib3QucHkgJHtyZWZuYW1lfSAkKGdpdCByZXYtbGlzdCAke29sZGhlYWR9Li4ke25ld2hlYWR9IHwgdGFjKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jaWFib3QvUkVBRE1FIGIvY29udHJpYi9jaWFib3QvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZmUxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NpYWJvdC9SRUFETUUKQEAgLTAsMCArMSwxMSBAQAorVGhlc2UgYXJlIGhvb2sgc2NyaXB0cyBmb3IgdGhlIENJQSBub3RpZmljYXRpb24gc2VydmljZSBhdCA8aHR0cDovL2NpYS52Yy8+CisKK1RoZXkgYXJlIG1haW50YWluZWQgYnkgRXJpYyBTLiBSYXltb25kIDxlc3JAdGh5cnN1cy5jb20+LiAgVGhlcmUgaXMgYW4KK3Vwc3RyZWFtIHJlc291cmNlIHBhZ2UgZm9yIHRoZW0gYXQgPGh0dHA6Ly93d3cuY2F0Yi5vcmcvZXNyL2NpYWJvdC8+LAorYnV0IHRoZXkgYXJlIHVubGlrZWx5IHRvIGNoYW5nZSByYXBpZGx5LgorCitZb3UgcHJvYmFibHkgd2FudCB0aGUgUHl0aG9uIHZlcnNpb247IGl0J3MgZmFzdGVyLCBtb3JlIGNhcGFibGUsIGFuZAorYmV0dGVyIGRvY3VtZW50ZWQuICBUaGUgc2hlbGwgdmVyc2lvbiBpcyBtYWludGFpbmVkIG9ubHkgYXMgYSBmYWxsYmFjaworZm9yIHVzZSBvbiBob3N0aW5nIHNpdGVzIHRoYXQgZG9uJ3QgcGVybWl0IFB5dGhvbiBob29rIHNjcmlwdHMuCisKK1NlZSB0aGUgZmlsZSBJTlNUQUxMIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9jaWFib3QvY2lhYm90LnB5IGIvY29udHJpYi9jaWFib3QvY2lhYm90LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJkMjQzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NpYWJvdC9jaWFib3QucHkKQEAgLTAsMCArMSwyNDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTAgRXJpYyBTLiBSYXltb25kIDxlc3JAdGh5cnN1cy5jb20+CisjIERpc3RyaWJ1dGVkIHVuZGVyIEJTRCB0ZXJtcy4KKyMKKyMgVGhpcyBzY3JpcHQgY29udGFpbnMgcG9yY2VsYWluIGFuZCBwb3JjZWxhaW4gYnlwcm9kdWN0cy4KKyMgSXQncyBQeXRob24gYmVjYXVzZSB0aGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcmllcyBhdm9pZCBwb3J0YWJpbGl0eS9zZWN1cml0eQorIyBpc3N1ZXMgcmFpc2VkIGJ5IGNhbGxvdXRzIGluIHRoZSBhbmNlc3RyYWwgUGVybCBhbmQgc2ggc2NyaXB0cy4gIEl0IHNob3VsZAorIyBiZSBjb21wYXRpYmxlIGJhY2sgdG8gUHl0aG9uIDIuMS41CisjCisjIHVzYWdlOiBjaWFib3QucHkgWy1WXSBbLW5dIFstcCBwcm9qZWN0bmFtZV0gIFtyZWZuYW1lIFtjb21taXRzLi4uXV0KKyMKKyMgVGhpcyBzY3JpcHQgaXMgbWVhbnQgdG8gYmUgcnVuIGVpdGhlciBpbiBhIHBvc3QtY29tbWl0IGhvb2sgb3IgaW4gYW4KKyMgdXBkYXRlIGhvb2suIFRyeSBpdCB3aXRoIC1uIHRvIHNlZSB0aGUgbm90aWZpY2F0aW9uIG1haWwgZHVtcGVkIHRvCisjIHN0ZG91dCBhbmQgdmVyaWZ5IHRoYXQgaXQgbG9va3Mgc2FuZS4gV2l0aCAtViBpdCBkdW1wcyBpdHMgdmVyc2lvbgorIyBhbmQgZXhpdHMuCisjCisjIEluIHBvc3QtY29tbWl0LCBydW4gaXQgd2l0aG91dCBhcmd1bWVudHMuIEl0IHdpbGwgcXVlcnkgZm9yCisjIGN1cnJlbnQgSEVBRCBhbmQgdGhlIGxhdGVzdCBjb21taXQgSUQgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBpdAorIyBuZWVkcy4KKyMKKyMgSW4gdXBkYXRlLCBjYWxsIGl0IHdpdGggYSByZWZuYW1lIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiBjb21taXRzOgorIyBZb3Ugd2FudCB0byByZXZlcnNlIHRoZSBvcmRlciBnaXQgcmV2LWxpc3QgZW1pdHMgYmVjYXVzZSBpdCBsaXN0cworIyBmcm9tIG1vc3QgcmVjZW50IHRvIG9sZGVzdC4KKyMKKyMgL3BhdGgvdG8vY2lhYm90LnB5ICR7cmVmbmFtZX0gJChnaXQgcmV2LWxpc3QgJHtvbGRoZWFkfS4uJHtuZXdoZWFkfSB8IHRhYykKKyMKKyMgQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYWZmZWN0aW5nIHRoaXMgc2NyaXB0OgorIworIyBjaWFib3QucHJvamVjdCA9IG5hbWUgb2YgdGhlIHByb2plY3QKKyMgY2lhYm90LnJlcG8gPSBuYW1lIG9mIHRoZSBwcm9qZWN0IHJlcG8gZm9yIGdpdHdlYi9jZ2l0IHB1cnBvc2VzCisjIGNpYWJvdC54bWxycGMgID0gaWYgdHJ1ZSAoZGVmYXVsdCksIHNoaXAgbm90aWZpY2F0aW9ucyB2aWEgWE1MLVJQQworIyBjaWFib3QucmV2Zm9ybWF0ID0gZm9ybWF0IGluIHdoaWNoIHRoZSByZXZpc2lvbiBpcyBzaG93bgorIworIyBjaWFib3QucHJvamVjdCBkZWZhdWx0cyB0byB0aGUgZGlyZWN0b3J5IG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgdG9wbGV2ZWwuCisjIGNpYWJvdC5yZXBvIGRlZmF1bHRzIHRvIGNpYWJvdC5wcm9qZWN0IGxvd2VyY2FzZWQuCisjCisjIFRoaXMgbWVhbnMgdGhhdCBpbiB0aGUgbm9ybWFsIGNhc2UgeW91IG5lZWQgbm90IGRvIGFueSBjb25maWd1cmF0aW9uIGF0IGFsbCwKKyMgYnV0IHNldHRpbmcgdGhlIHByb2plY3QgbmFtZSB3aWxsIHNwZWVkIGl0IHVwIHNsaWdodGx5LgorIworIyBUaGUgcmV2Zm9ybWF0IHZhcmlhYmxlIG1heSBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzCisjIHJhdyAtPiBmdWxsIGhleCBJRCBvZiBjb21taXQKKyMgc2hvcnQgLT4gZmlyc3QgMTIgY2hhcnMgb2YgaGV4IElECisjIGRlc2NyaWJlID0gLT4gZGVzY3JpYmUgcmVsYXRpdmUgdG8gbGFzdCB0YWcsIGZhbGxpbmcgYmFjayB0byBzaG9ydAorIyBUaGUgZGVmYXVsdCBpcyAnZGVzY3JpYmUnLgorIworIyBOb3RlOiB0aGUgQ0lBIHByb2plY3Qgbm93IHNheXMgb25seSBYTUwtUlBDIGlzIHJlbGlhYmxlLCBzbworIyB3ZSBkZWZhdWx0IHRvIHRoYXQuCisjCisKK2ltcG9ydCBvcywgc3lzLCBjb21tYW5kcywgc29ja2V0LCB1cmxsaWIKK2Zyb20geG1sLnNheC5zYXh1dGlscyBpbXBvcnQgZXNjYXBlCisKKyMgQ2hhbmdlc2V0IFVSTCBwcmVmaXggZm9yIHlvdXIgcmVwbzogd2hlbiB0aGUgY29tbWl0IElEIGlzIGFwcGVuZGVkCisjIHRvIHRoaXMsIGl0IHNob3VsZCBwb2ludCBhdCBhIENHSSB0aGF0IHdpbGwgZGlzcGxheSB0aGUgY29tbWl0CisjIHRocm91Z2ggZ2l0d2ViIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBUaGUgZGVmYXVsdHMgd2lsbCBwcm9iYWJseQorIyB3b3JrIGlmIHlvdSBoYXZlIGEgdHlwaWNhbCBnaXR3ZWIvY2dpdCBzZXR1cC4KKyMKKyN1cmxwcmVmaXg9Imh0dHA6Ly8lKGhvc3Qpcy9jZ2ktYmluL2dpdHdlYi5jZ2k/cD0lKHJlcG8pczthPWNvbW1pdDtoPSIKK3VybHByZWZpeD0iaHR0cDovLyUoaG9zdClzL2NnaS1iaW4vY2dpdC5jZ2kvJShyZXBvKXMvY29tbWl0Lz9pZD0iCisKKyMgVGhlIHNlcnZpY2UgdXNlZCB0byB0dXJuIHlvdXIgZ2l0d2ViYmlzaCBVUkwgaW50byBhIHRpbnl1cmwgc28gaXQKKyMgd2lsbCB0YWtlIHVwIGxlc3Mgc3BhY2Ugb24gdGhlIElSQyBub3RpZmljYXRpb24gbGluZS4KK3RpbnlpZmllciA9ICJodHRwOi8vdGlueXVybC5jb20vYXBpLWNyZWF0ZS5waHA/dXJsPSIKKworIyBUaGUgdGVtcGxhdGUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgWE1MIG1lc3NhZ2VzIHRvIENJQS4gIFlvdSBjYW4gbWFrZQorIyB2aXNpYmxlIGNoYW5nZXMgdG8gdGhlIElSQy1ib3Qgbm90aWZpY2F0aW9uIGxpbmVzIGJ5IGhhY2tpbmcgdGhpcy4KKyMgVGhlIGRlZmF1bHQgd2lsbCBwcm9kdWNlIGEgbm90ZmljYXRpb24gbGluZSB0aGF0IGxvb2tzIGxpa2UgdGhpczoKKyMKKyMgJHtwcm9qZWN0fTogJHthdXRob3J9ICR7cmVwb306JHticmFuY2h9ICogJHtyZXZ9ICR7ZmlsZXN9OiAke2xvZ21zZ30gJHt1cmx9CisjCisjIEJ5IG9taXR0aW5nICRmaWxlcyB5b3UgY2FuIGNvbGxhcHNlIHRoZSBmaWxlcyBwYXJ0IHRvIGEgc2luZ2xlIHNsYXNoLgoreG1sID0gJycnXAorPG1lc3NhZ2U+CisgIDxnZW5lcmF0b3I+CisgICAgPG5hbWU+Q0lBIFB5dGhvbiBjbGllbnQgZm9yIEdpdDwvbmFtZT4KKyAgICA8dmVyc2lvbj4lKHZlcnNpb24pczwvdmVyc2lvbj4KKyAgICA8dXJsPiUoZ2VuZXJhdG9yKXM8L3VybD4KKyAgPC9nZW5lcmF0b3I+CisgIDxzb3VyY2U+CisgICAgPHByb2plY3Q+JShwcm9qZWN0KXM8L3Byb2plY3Q+CisgICAgPGJyYW5jaD4lKHJlcG8pczolKGJyYW5jaClzPC9icmFuY2g+CisgIDwvc291cmNlPgorICA8dGltZXN0YW1wPiUodHMpczwvdGltZXN0YW1wPgorICA8Ym9keT4KKyAgICA8Y29tbWl0PgorICAgICAgPGF1dGhvcj4lKGF1dGhvcilzPC9hdXRob3I+CisgICAgICA8cmV2aXNpb24+JShyZXYpczwvcmV2aXNpb24+CisgICAgICA8ZmlsZXM+CisgICAgICAgICUoZmlsZXMpcworICAgICAgPC9maWxlcz4KKyAgICAgIDxsb2c+JShsb2dtc2cpcyAlKHVybClzPC9sb2c+CisgICAgICA8dXJsPiUodXJsKXM8L3VybD4KKyAgICA8L2NvbW1pdD4KKyAgPC9ib2R5PgorPC9tZXNzYWdlPgorJycnCisKKyMKKyMgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cyBiZWxvdyB0aGlzIGxpbmU6CisjCisKKyMgV2hlcmUgdG8gc2hpcCBlLW1haWwgbm90aWZpY2F0aW9ucy4KK3RvYWRkciA9ICJjaWFAY2lhLnZjIgorCisjIElkZW50aWZ5IHRoZSBnZW5lcmF0b3Igc2NyaXB0LgorIyBTaG91bGQgb25seSBjaGFuZ2Ugd2hlbiB0aGUgc2NyaXB0IGl0c2VsZiBnZXRzIGEgbmV3IGhvbWUgYW5kIG1haW50YWluZXIuCitnZW5lcmF0b3IgPSAiaHR0cDovL3d3dy5jYXRiLm9yZy9+ZXNyL2NpYWJvdC5weSIKK3ZlcnNpb24gPSAiMy42IgorCitkZWYgZG8oY29tbWFuZCk6CisgICAgcmV0dXJuIGNvbW1hbmRzLmdldHN0YXR1c291dHB1dChjb21tYW5kKVsxXQorCitkZWYgcmVwb3J0KHJlZm5hbWUsIG1lcmdlZCwgeG1scnBjPVRydWUpOgorICAgICJHZW5lcmF0ZSBhIGNvbW1pdCBub3RpZmljYXRpb24gdG8gYmUgcmVwb3J0ZWQgdG8gQ0lBIgorCisgICAgIyBUcnkgdG8gdGlueWZ5IGEgcmVmZXJlbmNlIHRvIGEgd2ViIHZpZXcgZm9yIHRoaXMgY29tbWl0LgorICAgIHRyeToKKyAgICAgICAgdXJsID0gb3Blbih1cmxsaWIudXJscmV0cmlldmUodGlueWlmaWVyICsgdXJscHJlZml4ICsgbWVyZ2VkKVswXSkucmVhZCgpCisgICAgZXhjZXB0OgorICAgICAgICB1cmwgPSB1cmxwcmVmaXggKyBtZXJnZWQKKworICAgIGJyYW5jaCA9IG9zLnBhdGguYmFzZW5hbWUocmVmbmFtZSkKKworICAgICMgQ29tcHV0ZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgcmV2aXNpb24KKyAgICBpZiByZXZmb3JtYXQgPT0gJ3Jhdyc6CisgICAgICAgIHJldiA9IG1lcmdlZAorICAgIGVsaWYgcmV2Zm9ybWF0ID09ICdzaG9ydCc6CisgICAgICAgIHJldiA9ICcnCisgICAgZWxzZTogIyByZXZmb3JtYXQgPT0gJ2Rlc2NyaWJlJworICAgICAgICByZXYgPSBkbygiZ2l0IGRlc2NyaWJlICVzIDI+L2Rldi9udWxsIiAlIG1lcmdlZCkKKyAgICBpZiBub3QgcmV2OgorICAgICAgICByZXYgPSBtZXJnZWRbOjEyXQorCisgICAgIyBFeHRyYWN0IHRoZSBtZXRhLWluZm9ybWF0aW9uIGZvciB0aGUgY29tbWl0CisgICAgZmlsZXM9ZG8oImdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgJyIrIG1lcmdlZCArIicgfCBzZWQgLWUgJzFkJyAtZSAncy0uKi08ZmlsZT4mPC9maWxlPi0nIikKKyAgICBtZXRhaW5mbyA9IGRvKCJnaXQgbG9nIC0xICctLXByZXR0eT1mb3JtYXQ6JWFuIDwlYWU+JW4lYXQlbiVzJyAiICsgbWVyZ2VkKQorICAgIChhdXRob3IsIHRzLCBsb2dtc2cpID0gbWV0YWluZm8uc3BsaXQoIlxuIikKKyAgICBsb2dtc2cgPSBlc2NhcGUobG9nbXNnKQorCisgICAgIyBUaGlzIGRpc2NhcmRzIHRoZSBwYXJ0IG9mIHRoZSBhdXRob3IncyBhZGRyZXNzIGFmdGVyIEAuCisgICAgIyBNaWdodCBiZSBiZSBuaWNlIHRvIHNoaXAgdGhlIGZ1bGwgZW1haWwgYWRkcmVzcywgaWYgbm90CisgICAgIyBmb3Igc3BhbW1lcnMnIGFkZHJlc3MgaGFydmVzdGVycyAtIGdldHRpbmcgdGhpcyB3cm9uZworICAgICMgd291bGQgbWFrZSB0aGUgZnJlZW5vZGUgI2NvbW1pdHMgY2hhbm5lbCBpbnRvIGhhcnZlc3RlciBoZWF2ZW4uCisgICAgYXV0aG9yID0gZXNjYXBlKGF1dGhvci5yZXBsYWNlKCI8IiwgIiIpLnNwbGl0KCJAIilbMF0uc3BsaXQoKVstMV0pCisKKyAgICAjIFRoaXMgaWdub3JlcyB0aGUgdGltZXpvbmUuICBOb3QgY2xlYXIgd2hhdCB0byBkbyB3aXRoIGl0Li4uCisgICAgdHMgPSB0cy5zdHJpcCgpLnNwbGl0KClbMF0KKworICAgIGNvbnRleHQgPSBsb2NhbHMoKQorICAgIGNvbnRleHQudXBkYXRlKGdsb2JhbHMoKSkKKworICAgIG91dCA9IHhtbCAlIGNvbnRleHQKKyAgICBtYWlsID0gJycnXAorTWVzc2FnZS1JRDogPCUobWVyZ2VkKXMuJShhdXRob3Ipc0AlKHByb2plY3Qpcz4KK0Zyb206ICUoZnJvbWFkZHIpcworVG86ICUodG9hZGRyKXMKK0NvbnRlbnQtdHlwZTogdGV4dC94bWwKK1N1YmplY3Q6IERlbGl2ZXJYTUwKKworJShvdXQpcycnJyAlIGxvY2FscygpCisKKyAgICBpZiB4bWxycGM6CisgICAgICAgIHJldHVybiBvdXQKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gbWFpbAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGltcG9ydCBnZXRvcHQKKworICAgICMgR2V0IGFsbCBjb25maWcgdmFyaWFibGVzCisgICAgcmV2Zm9ybWF0ID0gZG8oImdpdCBjb25maWcgLS1nZXQgY2lhYm90LnJldmZvcm1hdCIpCisgICAgcHJvamVjdCA9IGRvKCJnaXQgY29uZmlnIC0tZ2V0IGNpYWJvdC5wcm9qZWN0IikKKyAgICByZXBvID0gZG8oImdpdCBjb25maWcgLS1nZXQgY2lhYm90LnJlcG8iKQorICAgIHhtbHJwYyA9IGRvKCJnaXQgY29uZmlnIC0tZ2V0IGNpYWJvdC54bWxycGMiKQorICAgIHhtbHJwYyA9IG5vdCAoeG1scnBjIGFuZCB4bWxycGMgPT0gImZhbHNlIikKKworICAgIGhvc3QgPSBzb2NrZXQuZ2V0ZnFkbigpCisgICAgZnJvbWFkZHIgPSAiQ0lBQk9ULU5PUkVQTFlAIiArIGhvc3QKKworICAgIHRyeToKKyAgICAgICAgKG9wdGlvbnMsIGFyZ3VtZW50cykgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgIm5wOnhWIikKKyAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yLCBtc2c6CisgICAgICAgIHByaW50ICJjaWFib3QucHk6ICIgKyBzdHIobXNnKQorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0LCAxCisKKyAgICBub3RpZnkgPSBUcnVlCisgICAgZm9yIChzd2l0Y2gsIHZhbCkgaW4gb3B0aW9uczoKKyAgICAgICAgaWYgc3dpdGNoID09ICctcCc6CisgICAgICAgICAgICBwcm9qZWN0ID0gdmFsCisgICAgICAgIGVsaWYgc3dpdGNoID09ICctbic6CisgICAgICAgICAgICBub3RpZnkgPSBGYWxzZQorICAgICAgICBlbGlmIHN3aXRjaCA9PSAnLXgnOgorICAgICAgICAgICAgeG1scnBjID0gVHJ1ZQorICAgICAgICBlbGlmIHN3aXRjaCA9PSAnLVYnOgorICAgICAgICAgICAgcHJpbnQgImNpYWJvdC5weTogdmVyc2lvbiIsIHZlcnNpb24KKyAgICAgICAgICAgIHN5cy5leGl0KDApCisKKyAgICAjIFRoZSBwcm9qZWN0IHZhcmlhYmxlIGRlZmF1bHRzIHRvIHRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IHRvcGxldmVsLgorICAgIGlmIG5vdCBwcm9qZWN0OgorICAgICAgICBoZXJlID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihoZXJlLCAiLmdpdCIpKToKKyAgICAgICAgICAgICAgICBwcm9qZWN0ID0gb3MucGF0aC5iYXNlbmFtZShoZXJlKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGhlcmUgPT0gJy8nOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImNpYWJvdC5weTogbm8gLmdpdCBiZWxvdyByb290IVxuIikKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgaGVyZSA9IG9zLnBhdGguZGlybmFtZShoZXJlKQorCisgICAgaWYgbm90IHJlcG86CisgICAgICAgIHJlcG8gPSBwcm9qZWN0Lmxvd2VyKCkKKworICAgIHVybHByZWZpeCA9IHVybHByZWZpeCAlIGdsb2JhbHMoKQorCisgICAgIyBUaGUgc2NyaXB0IHdhbnRzIGEgcmVmZXJlbmNlIHRvIGhlYWQgZm9sbG93ZWQgYnkgdGhlIGxpc3Qgb2YKKyAgICAjIGNvbW1pdCBJRCB0byByZXBvcnQgYWJvdXQuCisgICAgaWYgbGVuKGFyZ3VtZW50cykgPT0gMDoKKyAgICAgICAgcmVmbmFtZSA9IGRvKCJnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwiKQorICAgICAgICBtZXJnZXMgPSBbZG8oImdpdCByZXYtcGFyc2UgSEVBRCIpXQorICAgIGVsc2U6CisgICAgICAgIHJlZm5hbWUgPSBhcmd1bWVudHNbMF0KKyAgICAgICAgbWVyZ2VzID0gYXJndW1lbnRzWzE6XQorCisgICAgaWYgbm90aWZ5OgorICAgICAgICBpZiB4bWxycGM6CisgICAgICAgICAgICBpbXBvcnQgeG1scnBjbGliCisgICAgICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyKCdodHRwOi8vY2lhLnZjL1JQQzInKTsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGltcG9ydCBzbXRwbGliCisgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFAoJ2xvY2FsaG9zdCcpCisKKyAgICBmb3IgbWVyZ2VkIGluIG1lcmdlczoKKyAgICAgICAgbWVzc2FnZSA9IHJlcG9ydChyZWZuYW1lLCBtZXJnZWQsIHhtbHJwYykKKyAgICAgICAgaWYgbm90IG5vdGlmeToKKyAgICAgICAgICAgIHByaW50IG1lc3NhZ2UKKyAgICAgICAgZWxpZiB4bWxycGM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBSUEMgc2VydmVyIGlzIGZsYWt5LCB0aGlzIGNhbiBmYWlsIGR1ZSB0byB0aW1lb3V0LgorICAgICAgICAgICAgICAgIHNlcnZlci5odWIuZGVsaXZlcihtZXNzYWdlKQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZXJ2ZXIuc2VuZG1haWwoZnJvbWFkZHIsIFt0b2FkZHJdLCBtZXNzYWdlKQorCisgICAgaWYgbm90aWZ5OgorICAgICAgICBpZiBub3QgeG1scnBjOgorICAgICAgICAgICAgc2VydmVyLnF1aXQoKQorCisjRW5kCmRpZmYgLS1naXQgYS9jb250cmliL2NpYWJvdC9jaWFib3Quc2ggYi9jb250cmliL2NpYWJvdC9jaWFib3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2ZiYmM1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY2lhYm90L2NpYWJvdC5zaApAQCAtMCwwICsxLDIzMyBAQAorIyEvYmluL3NoCisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEZlcm5hbmRvIEouIFBlcmVkYSA8ZmVyZHlAZ2VudG9vLm9yZz4KKyMgQ29weXJpZ2h0IChjKSAyMDA4IE5hdGFuYWVsIENvcGEgPG5hdGFuYWVsLmNvcGFAZ21haWwuY29tPgorIyBDb3B5cmlnaHQgKGMpIDIwMTAgRXJpYyBTLiBSYXltb25kIDxlc3JAdGh5cnN1cy5jb20+CisjIEFzc2lzdGFuY2UgYW5kIHJldmlldyBieSBQZXRyIEJhdWRpcywgYXV0aG9yIG9mIGNpYWJvdC5wbCwKKyMgaXMgZ3JhdGVmdWxseSBhY2tub3dsZWRnZWQuCisjCisjIFRoaXMgaXMgYSB2ZXJzaW9uIDMueCBvZiBjaWFib3Quc2g7IHVzZSAtViB0byBmaW5kIHRoZSBleGFjdAorIyB2ZXJzaW9uLiAgVmVyc2lvbnMgMSBhbmQgMiB3ZXJlIHNoaXBwZWQgaW4gMjAwNiBhbmQgMjAwOCBhbmQgYXJlIG5vdAorIyB2ZXJzaW9uLXN0YW1wZWQuICBUaGUgdmVyc2lvbiAyIG1haW50YWluZXIgaGFzIHBhc3NlZCB0aGUgYmF0b24uCisjCisjIE5vdGU6IFRoaXMgc2NyaXB0IHNob3VsZCBiZSBjb25zaWRlcmVkIG9ic29sZXRlLgorIyBUaGVyZSBpcyBhIGZhc3RlciwgYmV0dGVyLWRvY3VtZW50ZWQgcmV3cml0ZSBpbiBQeXRob246IGZpbmQgaXQgYXMgY2lhYm90LnB5CisjIFVzZSB0aGlzIG9ubHkgaWYgeW91ciBob3N0aW5nIHNpdGUgZm9yYmlkcyBQeXRob24gaG9va3MuCisjIEl0IHJlcXVpcmVzOiBnaXQoMSksIGhvc3RuYW1lKDEpLCBjdXQoMSksIHNlbmRtYWlsKDEpLCBhbmQgd2dldCgxKS4KKyMKKyMgT3JpZ2luYWxseSBiYXNlZCBvbiBHaXQgY2lhYm90LnBsIGJ5IFBldHIgQmF1ZGlzLgorIyBUaGlzIHNjcmlwdCBjb250YWlucyBwb3JjZWxhaW4gYW5kIHBvcmNlbGFpbiBieXByb2R1Y3RzLgorIworIyB1c2FnZTogY2lhYm90LnNoIFstVl0gWy1uXSBbLXAgcHJvamVjdG5hbWVdIFtyZWZuYW1lIGNvbW1pdF0KKyMKKyMgVGhpcyBzY3JpcHQgaXMgbWVhbnQgdG8gYmUgcnVuIGVpdGhlciBpbiBhIHBvc3QtY29tbWl0IGhvb2sgb3IgaW4gYW4KKyMgdXBkYXRlIGhvb2suIFRyeSBpdCB3aXRoIC1uIHRvIHNlZSB0aGUgbm90aWZpY2F0aW9uIG1haWwgZHVtcGVkIHRvCisjIHN0ZG91dCBhbmQgdmVyaWZ5IHRoYXQgaXQgbG9va3Mgc2FuZS4gV2l0aCAtViBpdCBkdW1wcyBpdHMgdmVyc2lvbgorIyBhbmQgZXhpdHMuCisjCisjIEluIHBvc3QtY29tbWl0LCBydW4gaXQgd2l0aG91dCBhcmd1bWVudHMuIEl0IHdpbGwgcXVlcnkgZm9yCisjIGN1cnJlbnQgSEVBRCBhbmQgdGhlIGxhdGVzdCBjb21taXQgSUQgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBpdAorIyBuZWVkcy4KKyMKKyMgSW4gdXBkYXRlLCB5b3UgaGF2ZSB0byBjYWxsIGl0IG9uY2UgcGVyIG1lcmdlZCBjb21taXQ6CisjCisjICAgICAgIHJlZm5hbWU9JDEKKyMgICAgICAgb2xkaGVhZD0kMgorIyAgICAgICBuZXdoZWFkPSQzCisjICAgICAgIGZvciBtZXJnZWQgaW4gJChnaXQgcmV2LWxpc3QgJHtvbGRoZWFkfS4uJHtuZXdoZWFkfSB8IHRhYykgOyBkbworIyAgICAgICAgICAgICAgIC9wYXRoL3RvL2NpYWJvdC5zaCAke3JlZm5hbWV9ICR7bWVyZ2VkfQorIyAgICAgICBkb25lCisjCisjIFRoZSByZWFzb24gZm9yIHRoZSB0YWMgY2FsbCBpcyB0aGF0IGdpdCByZXYtbGlzdCBlbWl0cyBjb21taXRzIGZyb20KKyMgbW9zdCByZWNlbnQgdG8gbGVhc3QgLSBiZXR0ZXIgdG8gc2hpcCBub3RpZmFjdGlvbnMgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0LgorIworIyBDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhZmZlY3RpbmcgdGhpcyBzY3JpcHQ6CisjCisjIGNpYWJvdC5wcm9qZWN0ID0gbmFtZSBvZiB0aGUgcHJvamVjdAorIyBjaWFib3QucmVwbyA9IG5hbWUgb2YgdGhlIHByb2plY3QgcmVwbyBmb3IgZ2l0d2ViL2NnaXQgcHVycG9zZXMKKyMgY2lhYm90LnJldmZvcm1hdCA9IGZvcm1hdCBpbiB3aGljaCB0aGUgcmV2aXNpb24gaXMgc2hvd24KKyMKKyMgY2lhYm90LnByb2plY3QgZGVmYXVsdHMgdG8gdGhlIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IHRvcGxldmVsLgorIyBjaWFib3QucmVwbyBkZWZhdWx0cyB0byBjaWFib3QucHJvamVjdCBsb3dlcmNhc2VkLgorIworIyBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIG5vcm1hbCBjYXNlIHlvdSBuZWVkIG5vdCBkbyBhbnkgY29uZmlndXJhdGlvbiBhdCBhbGwsCisjIGJ1dCBzZXR0aW5nIHRoZSBwcm9qZWN0IG5hbWUgd2lsbCBzcGVlZCBpdCB1cCBzbGlnaHRseS4KKyMKKyMgVGhlIHJldmZvcm1hdCB2YXJpYWJsZSBtYXkgaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlcworIyByYXcgLT4gZnVsbCBoZXggSUQgb2YgY29tbWl0CisjIHNob3J0IC0+IGZpcnN0IDEyIGNoYXJzIG9mIGhleCBJRAorIyBkZXNjcmliZSA9IC0+IGRlc2NyaWJlIHJlbGF0aXZlIHRvIGxhc3QgdGFnLCBmYWxsaW5nIGJhY2sgdG8gc2hvcnQKKyMgVGhlIGRlZmF1bHQgaXMgJ2Rlc2NyaWJlJy4KKyMKKyMgTm90ZTogdGhlIHNoZWxsIGFuY2VzdG9ycyBvZiB0aGlzIHNjcmlwdCB1c2VkIG1haWwsIG5vdCBYTUwtUlBDLCBpbgorIyBvcmRlciB0byBhdm9pZCBzdGFsbGluZyB1bnRpbCB0aW1lb3V0IHdoZW4gdGhlIENJQSBYTUwtUlBDIHNlcnZlciBpcworIyBkb3duLiBJdCBpcyB1bmtub3duIHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBhbiBpc3N1ZSBpbiAyMDEwLCBidXQKKyMgWE1MLVJQQyB3b3VsZCBiZSBhbm5veWluZyB0byBkbyBmcm9tIHNoIGluIGFueSBjYXNlLiAoWE1MLVJQQyBkb2VzCisjIGhhdmUgdGhlIGFkdmFudGFnZSB0aGF0IGl0IGd1YXJhbnRlZXMgbm90aWZpY2F0aW9uIG9mIG11bHRpcGxlIGNvbW1pdHMKKyMgc2hwcGVkIGZyb20gYW4gdXBkYXRlIGluIHRoZWlyIGFjdHVhbCBvcmRlci4pCisjCisKKyMgVGhlIHByb2plY3QgYXMga25vd24gdG8gQ0lBLiBZb3UgY2FuIHNldCB0aGlzIHdpdGggYSAtcCBvcHRpb24sCisjIG9yIGxldCBpdCBkZWZhdWx0IHRvIHRoZSBkaXJlY3RvcnkgbmFtZSBvZiB0aGUgcmVwbyB0b3BsZXZlbC4KK3Byb2plY3Q9JChnaXQgY29uZmlnIC0tZ2V0IGNpYWJvdC5wcm9qZWN0KQorCitpZiBbIC16ICRwcm9qZWN0IF0KK3RoZW4KKyAgICBoZXJlPWBwd2RgOworICAgIHdoaWxlIDo7IGRvCisJaWYgWyAtZCAkaGVyZS8uZ2l0IF0KKwl0aGVuCisJICAgIHByb2plY3Q9YGJhc2VuYW1lICRoZXJlYAorCSAgICBicmVhaworCWVsaWYgWyAkaGVyZSA9ICcvJyBdCisJdGhlbgorCSAgICBlY2hvICJjaWFib3Quc2g6IG5vIC5naXQgYmVsb3cgcm9vdCEiCisJICAgIGV4aXQgMQorCWZpCisJaGVyZT1gZGlybmFtZSAkaGVyZWAKKyAgICBkb25lCitmaQorCisjIE5hbWUgb2YgdGhlIHJlcG8gZm9yIGdpdHdlYi9jZ2l0IHB1cnBvc2VzCityZXBvPSQoZ2l0IGNvbmZpZyAtLWdldCBjaWFib3QucmVwbykKK1sgLXogJHJlcG9dICYmIHJlcG89JChlY2hvICIke3Byb2plY3R9IiB8IHRyICdbQS1aXScgJ1thLXpdJykKKworIyBXaGF0IHJldmlzaW9uIGZvcm1hdCBkbyB3ZSB3YW50IGluIHRoZSBzdW1tYXJ5PworcmV2Zm9ybWF0PSQoZ2l0IGNvbmZpZyAtLWdldCBjaWFib3QucmV2Zm9ybWF0KQorCisjIEZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSBvZiB0aGUgcmVwbyBob3N0LiAgWW91IGNhbiBoYXJkd2lyZSB0aGlzCisjIHRvIG1ha2UgdGhlIHNjcmlwdCBmYXN0ZXIuIFRoZSAtZiBvcHRpb24gd29ya3MgdW5kZXIgTGludXggYW5kIEZyZWVCU0QsCisjIGJ1dCBub3QgT3BlbkJTRCBhbmQgTmV0QlNELiBCdXQgdW5kZXIgT3BlbkJTRCBhbmQgTmV0QlNELAorIyBob3N0bmFtZSB3aXRob3V0IG9wdGlvbnMgZ2l2ZXMgdGhlIEZRRE4uCitpZiBob3N0bmFtZSAtZiA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKyAgICBob3N0bmFtZT1gaG9zdG5hbWUgLWZgCitlbHNlCisgICAgaG9zdG5hbWU9YGhvc3RuYW1lYAorZmkKKworIyBDaGFuZ2VzZXQgVVJMIHByZWZpeCBmb3IgeW91ciByZXBvOiB3aGVuIHRoZSBjb21taXQgSUQgaXMgYXBwZW5kZWQKKyMgdG8gdGhpcywgaXQgc2hvdWxkIHBvaW50IGF0IGEgQ0dJIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBjb21taXQKKyMgdGhyb3VnaCBnaXR3ZWIgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoZSBkZWZhdWx0cyB3aWxsIHByb2JhYmx5CisjIHdvcmsgaWYgeW91IGhhdmUgYSB0eXBpY2FsIGdpdHdlYi9jZ2l0IHNldHVwLgorI3VybHByZWZpeD0iaHR0cDovLyR7aG9zdH0vY2dpLWJpbi9naXR3ZWIuY2dpP3A9JHtyZXBvfTthPWNvbW1pdDtoPSIKK3VybHByZWZpeD0iaHR0cDovLyR7aG9zdH0vY2dpLWJpbi9jZ2l0LmNnaS8ke3JlcG99L2NvbW1pdC8/aWQ9IgorCisjCisjIFlvdSBwcm9iYWJseSB3aWxsIG5vdCBuZWVkIHRvIGNoYW5nZSB0aGUgZm9sbG93aW5nOgorIworCisjIElkZW50aWZ5IHRoZSBzY3JpcHQuIFRoZSAnZ2VuZXJhdG9yJyB2YXJpYWJsZSBzaG91bGQgY2hhbmdlIG9ubHkKKyMgd2hlbiB0aGUgc2NyaXB0IGl0c2VsZiBnZXRzIGEgbmV3IGhvbWUgYW5kIG1haW50YWluZXIuCitnZW5lcmF0b3I9Imh0dHA6Ly93d3cuY2F0Yi5vcmcvfmVzci9jaWFib3QvY2lhYm90LnNoIgordmVyc2lvbj0zLjUKKworIyBBZGRyZXNzZXMgZm9yIHRoZSBlLW1haWwKK2Zyb209IkNJQUJPVC1OT1JFUExZQCR7aG9zdG5hbWV9IgordG89ImNpYUBjaWEudmMiCisKKyMgU01UUCBjbGllbnQgdG8gdXNlIC0gbWF5IG5lZWQgdG8gZWRpdCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUgZm9yIHlvdXIgc3lzdGVtCitzZW5kbWFpbD0ic2VuZG1haWwgLXQgLWYgJHtmcm9tfSIKKworIworIyBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzIGJlbG93IHRoaXMgbGluZToKKyMKKworIyBTaG91bGQgaW5jbHVkZSBhbGwgcGxhY2VzIHNlbmRtYWlsIGlzIGxpa2VseSB0byBsdXJrLgorUEFUSD0iJFBBVEg6L3Vzci9zYmluLyIKKworbW9kZT1tYWlsaXQKK3doaWxlIGdldG9wdHMgcG5WIG9wdAorZG8KKyAgICBjYXNlICRvcHQgaW4KKwlwKSBwcm9qZWN0PSQyOyBzaGlmdCA7IHNoaWZ0IDs7CisJbikgbW9kZT1kdW1waXQ7IHNoaWZ0IDs7CisJVikgZWNobyAiY2lhYm90LnNoOiB2ZXJzaW9uICR2ZXJzaW9uIjsgZXhpdCAwOyBzaGlmdCA7OworICAgIGVzYWMKK2RvbmUKKworIyBDb3VnaCBhbmQgZGllIGlmIHVzZXIgaGFzIG5vdCBzcGVjaWZpZWQgYSBwcm9qZWN0CitpZiBbIC16ICIkcHJvamVjdCIgXQordGhlbgorICAgIGVjaG8gImNpYWJvdC5zaDogbm8gcHJvamVjdCBzcGVjaWZpZWQsIGJhaWxpbmcgb3V0LiIgPiYyCisgICAgZXhpdCAxCitmaQorCitpZiBbICQjIC1lcSAwIF0gOyB0aGVuCisJcmVmbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCkKKwltZXJnZWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpCitlbHNlCisJcmVmbmFtZT0kMQorCW1lcmdlZD0kMgorZmkKKworIyBUaGlzIHRyaWVzIHRvIHR1cm4geW91ciBnaXR3ZWJiaXNoIFVSTCBpbnRvIGEgdGlueXVybCBzbyBpdCB3aWxsIHRha2UgdXAKKyMgbGVzcyBzcGFjZSBvbiB0aGUgSVJDIG5vdGlmaWNhdGlvbiBsaW5lLiBTb21lIHJlcG8gc2l0ZXMgKEknbSBsb29raW5nIGF0CisjIHlvdSwgYmVybGlvcy5kZSEpIGZvcmJpZCB3Z2V0IGNhbGxzIGZvciBzZWN1cml0eSByZWFzb25zLiAgT24gdGhlc2UsCisjIHRoZSBjb2RlIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBmdWxsIHVuLXRpbnlmaWVkIFVSTC4KK2xvbmd1cmw9JHt1cmxwcmVmaXh9JHttZXJnZWR9Cit1cmw9JCh3Z2V0IC1PIC0gLXEgaHR0cDovL3Rpbnl1cmwuY29tL2FwaS1jcmVhdGUucGhwP3VybD0ke2xvbmd1cmx9IDI+L2Rldi9udWxsKQoraWYgWyAteiAiJHVybCIgXTsgdGhlbgorCXVybD0iJHtsb25ndXJsfSIKK2ZpCisKK3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL2hlYWRzL30KKworY2FzZSAkcmV2Zm9ybWF0IGluCityYXcpIHJldj0kbWVyZ2VkIDs7CitzaG9ydCkgcmV2PScnIDs7CisqKSByZXY9JChnaXQgZGVzY3JpYmUgJHttZXJnZWR9IDI+L2Rldi9udWxsKSA7OworZXNhYworWyAteiAke3Jldn0gXSAmJiByZXY9JChlY2hvICIkbWVyZ2VkIiB8IGN1dCAtYyAxLTEyKQorCisjIFdlIGRpc2NhcmQgdGhlIHBhcnQgb2YgdGhlIGF1dGhvcidzIGFkZHJlc3MgYWZ0ZXIgQC4KKyMgTWlnaHQgYmUgbmljZSB0byBzaGlwIHRoZSBmdWxsIGVtYWlsIGFkZHJlc3MsIGlmIG5vdAorIyBmb3Igc3BhbW1lcnMnIGFkZHJlc3MgaGFydmVzdGVycyAtIGdldHRpbmcgdGhpcyB3cm9uZworIyB3b3VsZCBtYWtlIHRoZSBmcmVlbm9kZSAjY29tbWl0cyBjaGFubmVsIGludG8gaGFydmVzdGVyIGhlYXZlbi4KK2F1dGhvcj0kKGdpdCBsb2cgLTEgJy0tcHJldHR5PWZvcm1hdDolYW4gPCVhZT4nICRtZXJnZWQpCithdXRob3I9JChlY2hvICIkYXV0aG9yIiB8IHNlZCAtbiAtZSAnL14uKjxcKFteQF0qXCkuKiQvcy0tXDEtcCcpCisKK2xvZ21lc3NhZ2U9JChnaXQgbG9nIC0xICctLXByZXR0eT1mb3JtYXQ6JXMnICRtZXJnZWQpCit0cz0kKGdpdCBsb2cgLTEgJy0tcHJldHR5PWZvcm1hdDolYXQnICRtZXJnZWQpCitmaWxlcz0kKGdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgJHttZXJnZWR9IHwgc2VkIC1lICcxZCcgLWUgJ3MtLiotPGZpbGU+JjwvZmlsZT4tJykKKworb3V0PSIKKzxtZXNzYWdlPgorICA8Z2VuZXJhdG9yPgorICAgIDxuYW1lPkNJQSBTaGVsbCBjbGllbnQgZm9yIEdpdDwvbmFtZT4KKyAgICA8dmVyc2lvbj4ke3ZlcnNpb259PC92ZXJzaW9uPgorICAgIDx1cmw+JHtnZW5lcmF0b3J9PC91cmw+CisgIDwvZ2VuZXJhdG9yPgorICA8c291cmNlPgorICAgIDxwcm9qZWN0PiR7cHJvamVjdH08L3Byb2plY3Q+CisgICAgPGJyYW5jaD4kcmVwbzoke3JlZm5hbWV9PC9icmFuY2g+CisgIDwvc291cmNlPgorICA8dGltZXN0YW1wPiR7dHN9PC90aW1lc3RhbXA+CisgIDxib2R5PgorICAgIDxjb21taXQ+CisgICAgICA8YXV0aG9yPiR7YXV0aG9yfTwvYXV0aG9yPgorICAgICAgPHJldmlzaW9uPiR7cmV2fTwvcmV2aXNpb24+CisgICAgICA8ZmlsZXM+CisJJHtmaWxlc30KKyAgICAgIDwvZmlsZXM+CisgICAgICA8bG9nPiR7bG9nbWVzc2FnZX0gJHt1cmx9PC9sb2c+CisgICAgICA8dXJsPiR7dXJsfTwvdXJsPgorICAgIDwvY29tbWl0PgorICA8L2JvZHk+Cis8L21lc3NhZ2U+IgorCitpZiBbICIkbW9kZSIgPSAiZHVtcGl0IiBdCit0aGVuCisgICAgc2VuZG1haWw9Y2F0CitmaQorCiske3NlbmRtYWlsfSA8PCBFT00KK01lc3NhZ2UtSUQ6IDwke21lcmdlZH0uJHthdXRob3J9QCR7cHJvamVjdH0+CitGcm9tOiAke2Zyb219CitUbzogJHt0b30KK0NvbnRlbnQtdHlwZTogdGV4dC94bWwKK1N1YmplY3Q6IERlbGl2ZXJYTUwKKyR7b3V0fQorRU9NCisKKyMgdmltOiBzZXQgdHc9NzAgOgpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTgwMGUwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKQEAgLTAsMCArMSwyNDgzIEBACisjIWJhc2gKKyMKKyMgYmFzaC96c2ggY29tcGxldGlvbiBzdXBwb3J0IGZvciBjb3JlIEdpdC4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPgorIyBDb25jZXB0dWFsbHkgYmFzZWQgb24gZ2l0Y29tcGxldGlvbiAoaHR0cDovL2dpdHdlYi5oYXdhZ2Eub3JnLnVrLykuCisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLjAuCisjCisjIFRoZSBjb250YWluZWQgY29tcGxldGlvbiByb3V0aW5lcyBwcm92aWRlIHN1cHBvcnQgZm9yIGNvbXBsZXRpbmc6CisjCisjICAgICopIGxvY2FsIGFuZCByZW1vdGUgYnJhbmNoIG5hbWVzCisjICAgICopIGxvY2FsIGFuZCByZW1vdGUgdGFnIG5hbWVzCisjICAgICopIC5naXQvcmVtb3RlcyBmaWxlIG5hbWVzCisjICAgICopIGdpdCAnc3ViY29tbWFuZHMnCisjICAgICopIHRyZWUgcGF0aHMgd2l0aGluICdyZWY6cGF0aC90by9maWxlJyBleHByZXNzaW9ucworIyAgICAqKSBjb21tb24gLS1sb25nLW9wdGlvbnMKKyMKKyMgVG8gdXNlIHRoZXNlIHJvdXRpbmVzOgorIworIyAgICAxKSBDb3B5IHRoaXMgZmlsZSB0byBzb21ld2hlcmUgKGUuZy4gfi8uZ2l0LWNvbXBsZXRpb24uc2gpLgorIyAgICAyKSBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgLmJhc2hyYy8uenNocmM6CisjICAgICAgICBzb3VyY2Ugfi8uZ2l0LWNvbXBsZXRpb24uc2gKKyMgICAgMykgQ29uc2lkZXIgY2hhbmdpbmcgeW91ciBQUzEgdG8gYWxzbyBzaG93IHRoZSBjdXJyZW50IGJyYW5jaCwKKyMgICAgICAgc2VlIGdpdC1wcm9tcHQuc2ggZm9yIGRldGFpbHMuCisKK2lmIFtbIC1uICR7WlNIX1ZFUlNJT04tfSBdXTsgdGhlbgorCWF1dG9sb2FkIC1VICtYIGJhc2hjb21waW5pdCAmJiBiYXNoY29tcGluaXQKK2ZpCisKK2Nhc2UgIiRDT01QX1dPUkRCUkVBS1MiIGluCisqOiopIDogZ3JlYXQgOzsKKyopICAgQ09NUF9XT1JEQlJFQUtTPSIkQ09NUF9XT1JEQlJFQUtTOiIKK2VzYWMKKworIyBfX2dpdGRpciBhY2NlcHRzIDAgb3IgMSBhcmd1bWVudHMgKGkuZS4sIGxvY2F0aW9uKQorIyByZXR1cm5zIGxvY2F0aW9uIG9mIC5naXQgcmVwbworX19naXRkaXIgKCkKK3sKKwkjIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgZHVwbGljYXRlZCBpbiBnaXQtcHJvbXB0LnNoCisJIyBXaGVuIHVwZGF0aW5nIGl0LCBtYWtlIHN1cmUgeW91IHVwZGF0ZSB0aGUgb3RoZXIgb25lIHRvIG1hdGNoLgorCWlmIFsgLXogIiR7MS19IiBdOyB0aGVuCisJCWlmIFsgLW4gIiR7X19naXRfZGlyLX0iIF07IHRoZW4KKwkJCWVjaG8gIiRfX2dpdF9kaXIiCisJCWVsaWYgWyAtbiAiJHtHSVRfRElSLX0iIF07IHRoZW4KKwkJCXRlc3QgLWQgIiR7R0lUX0RJUi19IiB8fCByZXR1cm4gMQorCQkJZWNobyAiJEdJVF9ESVIiCisJCWVsaWYgWyAtZCAuZ2l0IF07IHRoZW4KKwkJCWVjaG8gLmdpdAorCQllbHNlCisJCQlnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbAorCQlmaQorCWVsaWYgWyAtZCAiJDEvLmdpdCIgXTsgdGhlbgorCQllY2hvICIkMS8uZ2l0IgorCWVsc2UKKwkJZWNobyAiJDEiCisJZmkKK30KKworX19naXRjb21wXzEgKCkKK3sKKwlsb2NhbCBjIElGUz0kJyBcdFxuJworCWZvciBjIGluICQxOyBkbworCQljPSIkYyQyIgorCQljYXNlICRjIGluCisJCS0tKj0qfCouKSA7OworCQkqKSBjPSIkYyAiIDs7CisJCWVzYWMKKwkJcHJpbnRmICclc1xuJyAiJGMiCisJZG9uZQorfQorCisjIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgYmFzZWQgb24gY29kZSBmcm9tOgorIworIyAgIGJhc2hfY29tcGxldGlvbiAtIHByb2dyYW1tYWJsZSBjb21wbGV0aW9uIGZ1bmN0aW9ucyBmb3IgYmFzaCAzLjIrCisjCisjICAgQ29weXJpZ2h0IMKpIDIwMDYtMjAwOCwgSWFuIE1hY2RvbmFsZCA8aWFuQGNhbGliYW4ub3JnPgorIyAgICAgICAgICAgICDCqSAyMDA5LTIwMTAsIEJhc2ggQ29tcGxldGlvbiBNYWludGFpbmVycworIyAgICAgICAgICAgICAgICAgICAgIDxiYXNoLWNvbXBsZXRpb24tZGV2ZWxAbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmc+CisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyAgIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNvZnR3YXJlIGNhbiBiZSBvYnRhaW5lZCBoZXJlOgorIworIyAgIGh0dHA6Ly9iYXNoLWNvbXBsZXRpb24uYWxpb3RoLmRlYmlhbi5vcmcvCisjCisjICAgUkVMRUFTRTogMi54CisKKyMgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgYSB0b2tlbml6ZWQgbGlzdCBvZiB3b3JkcworIyBvbiB0aGUgY29tbWFuZCBsaW5lOgorIworIwlfX2dpdF9yZWFzc2VtYmxlX2NvbXBfd29yZHNfYnlfcmVmICc9OicKKyMJaWYgdGVzdCAiJHt3b3Jkc19bY3dvcmRfLTFdfSIgPSAtdworIwl0aGVuCisjCQkuLi4KKyMJZmkKKyMKKyMgVGhlIGFyZ3VtZW50IHNob3VsZCBiZSBhIGNvbGxlY3Rpb24gb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBsaXN0IG9mCisjIHdvcmQgY29tcGxldGlvbiBzZXBhcmF0b3JzIChDT01QX1dPUkRCUkVBS1MpIHRvIHRyZWF0IGFzIG9yZGluYXJ5CisjIGNoYXJhY3RlcnMuCisjCisjIFRoaXMgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGdvaW5nIGJhY2sgaW4gdGltZSBhbmQgc2V0dGluZworIyBDT01QX1dPUkRCUkVBS1MgdG8gZXhjbHVkZSB0aG9zZSBjaGFyYWN0ZXJzLiAgVGhlIGludGVudCBpcyB0bworIyBtYWtlIG9wdGlvbiB0eXBlcyBsaWtlIC0tZGF0ZT08dHlwZT4gYW5kIDxyZXY+OjxwYXRoPiBlYXN5IHRvCisjIHJlY29nbml6ZSBieSB0cmVhdGluZyBlYWNoIHNoZWxsIHdvcmQgYXMgYSBzaW5nbGUgdG9rZW4uCisjCisjIEl0IGlzIGJlc3Qgbm90IHRvIHNldCBDT01QX1dPUkRCUkVBS1MgZGlyZWN0bHkgYmVjYXVzZSB0aGUgdmFsdWUgaXMKKyMgc2hhcmVkIHdpdGggb3RoZXIgY29tcGxldGlvbiBzY3JpcHRzLiAgQnkgdGhlIHRpbWUgdGhlIGNvbXBsZXRpb24KKyMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQsIENPTVBfV09SRFMgaGFzIGFscmVhZHkgYmVlbiBwb3B1bGF0ZWQgc28gbG9jYWwKKyMgY2hhbmdlcyB0byBDT01QX1dPUkRCUkVBS1MgaGF2ZSBubyBlZmZlY3QuCisjCisjIE91dHB1dDogd29yZHNfLCBjd29yZF8sIGN1cl8uCisKK19fZ2l0X3JlYXNzZW1ibGVfY29tcF93b3Jkc19ieV9yZWYoKQoreworCWxvY2FsIGV4Y2x1ZGUgaSBqIGZpcnN0CisJIyBXaGljaCB3b3JkIHNlcGFyYXRvcnMgdG8gZXhjbHVkZT8KKwlleGNsdWRlPSIkezEvL1teJENPTVBfV09SREJSRUFLU119IgorCWN3b3JkXz0kQ09NUF9DV09SRAorCWlmIFsgLXogIiRleGNsdWRlIiBdOyB0aGVuCisJCXdvcmRzXz0oIiR7Q09NUF9XT1JEU1tAXX0iKQorCQlyZXR1cm4KKwlmaQorCSMgTGlzdCBvZiB3b3JkIGNvbXBsZXRpb24gc2VwYXJhdG9ycyBoYXMgc2hydW5rOworCSMgcmUtYXNzZW1ibGUgd29yZHMgdG8gY29tcGxldGUuCisJZm9yICgoaT0wLCBqPTA7IGkgPCAkeyNDT01QX1dPUkRTW0BdfTsgaSsrLCBqKyspKTsgZG8KKwkJIyBBcHBlbmQgZWFjaCBub25lbXB0eSB3b3JkIGNvbnNpc3Rpbmcgb2YganVzdAorCQkjIHdvcmQgc2VwYXJhdG9yIGNoYXJhY3RlcnMgdG8gdGhlIGN1cnJlbnQgd29yZC4KKwkJZmlyc3Q9dAorCQl3aGlsZQorCQkJWyAkaSAtZ3QgMCBdICYmCisJCQlbIC1uICIke0NPTVBfV09SRFNbJGldfSIgXSAmJgorCQkJIyB3b3JkIGNvbnNpc3RzIG9mIGV4Y2x1ZGVkIHdvcmQgc2VwYXJhdG9ycworCQkJWyAiJHtDT01QX1dPUkRTWyRpXS8vW14kZXhjbHVkZV19IiA9ICIke0NPTVBfV09SRFNbJGldfSIgXQorCQlkbworCQkJIyBBdHRhY2ggdG8gdGhlIHByZXZpb3VzIHRva2VuLAorCQkJIyB1bmxlc3MgdGhlIHByZXZpb3VzIHRva2VuIGlzIHRoZSBjb21tYW5kIG5hbWUuCisJCQlpZiBbICRqIC1nZSAyIF0gJiYgWyAtbiAiJGZpcnN0IiBdOyB0aGVuCisJCQkJKChqLS0pKQorCQkJZmkKKwkJCWZpcnN0PQorCQkJd29yZHNfWyRqXT0ke3dvcmRzX1tqXX0ke0NPTVBfV09SRFNbaV19CisJCQlpZiBbICRpID0gJENPTVBfQ1dPUkQgXTsgdGhlbgorCQkJCWN3b3JkXz0kagorCQkJZmkKKwkJCWlmICgoJGkgPCAkeyNDT01QX1dPUkRTW0BdfSAtIDEpKTsgdGhlbgorCQkJCSgoaSsrKSkKKwkJCWVsc2UKKwkJCQkjIERvbmUuCisJCQkJcmV0dXJuCisJCQlmaQorCQlkb25lCisJCXdvcmRzX1skal09JHt3b3Jkc19bal19JHtDT01QX1dPUkRTW2ldfQorCQlpZiBbICRpID0gJENPTVBfQ1dPUkQgXTsgdGhlbgorCQkJY3dvcmRfPSRqCisJCWZpCisJZG9uZQorfQorCitpZiAhIHR5cGUgX2dldF9jb21wX3dvcmRzX2J5X3JlZiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KK2lmIFtbIC16ICR7WlNIX1ZFUlNJT046K3NldH0gXV07IHRoZW4KK19nZXRfY29tcF93b3Jkc19ieV9yZWYgKCkKK3sKKwlsb2NhbCBleGNsdWRlIGN1cl8gd29yZHNfIGN3b3JkXworCWlmIFsgIiQxIiA9ICItbiIgXTsgdGhlbgorCQlleGNsdWRlPSQyCisJCXNoaWZ0IDIKKwlmaQorCV9fZ2l0X3JlYXNzZW1ibGVfY29tcF93b3Jkc19ieV9yZWYgIiRleGNsdWRlIgorCWN1cl89JHt3b3Jkc19bY3dvcmRfXX0KKwl3aGlsZSBbICQjIC1ndCAwIF07IGRvCisJCWNhc2UgIiQxIiBpbgorCQljdXIpCisJCQljdXI9JGN1cl8KKwkJCTs7CisJCXByZXYpCisJCQlwcmV2PSR7d29yZHNfWyRjd29yZF8tMV19CisJCQk7OworCQl3b3JkcykKKwkJCXdvcmRzPSgiJHt3b3Jkc19bQF19IikKKwkJCTs7CisJCWN3b3JkKQorCQkJY3dvcmQ9JGN3b3JkXworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKK30KK2Vsc2UKK19nZXRfY29tcF93b3Jkc19ieV9yZWYgKCkKK3sKKwl3aGlsZSBbICQjIC1ndCAwIF07IGRvCisJCWNhc2UgIiQxIiBpbgorCQljdXIpCisJCQljdXI9JHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfQorCQkJOzsKKwkJcHJldikKKwkJCXByZXY9JHtDT01QX1dPUkRTW0NPTVBfQ1dPUkQtMV19CisJCQk7OworCQl3b3JkcykKKwkJCXdvcmRzPSgiJHtDT01QX1dPUkRTW0BdfSIpCisJCQk7OworCQljd29yZCkKKwkJCWN3b3JkPSRDT01QX0NXT1JECisJCQk7OworCQktbikKKwkJCSMgYXNzdW1lIENPTVBfV09SREJSRUFLUyBpcyBhbHJlYWR5IHNldCBzYW5lbHkKKwkJCXNoaWZ0CisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorfQorZmkKK2ZpCisKKyMgR2VuZXJhdGVzIGNvbXBsZXRpb24gcmVwbHkgd2l0aCBjb21wZ2VuLCBhcHBlbmRpbmcgYSBzcGFjZSB0byBwb3NzaWJsZQorIyBjb21wbGV0aW9uIHdvcmRzLCBpZiBuZWNlc3NhcnkuCisjIEl0IGFjY2VwdHMgMSB0byA0IGFyZ3VtZW50czoKKyMgMTogTGlzdCBvZiBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmRzLgorIyAyOiBBIHByZWZpeCB0byBiZSBhZGRlZCB0byBlYWNoIHBvc3NpYmxlIGNvbXBsZXRpb24gd29yZCAob3B0aW9uYWwpLgorIyAzOiBHZW5lcmF0ZSBwb3NzaWJsZSBjb21wbGV0aW9uIG1hdGNoZXMgZm9yIHRoaXMgd29yZCAob3B0aW9uYWwpLgorIyA0OiBBIHN1ZmZpeCB0byBiZSBhcHBlbmRlZCB0byBlYWNoIHBvc3NpYmxlIGNvbXBsZXRpb24gd29yZCAob3B0aW9uYWwpLgorX19naXRjb21wICgpCit7CisJbG9jYWwgY3VyXz0iJHszLSRjdXJ9IgorCisJY2FzZSAiJGN1cl8iIGluCisJLS0qPSkKKwkJQ09NUFJFUExZPSgpCisJCTs7CisJKikKKwkJbG9jYWwgSUZTPSQnXG4nCisJCUNPTVBSRVBMWT0oJChjb21wZ2VuIC1QICIkezItfSIgXAorCQkJLVcgIiQoX19naXRjb21wXzEgIiR7MS19IiAiJHs0LX0iKSIgXAorCQkJLS0gIiRjdXJfIikpCisJCTs7CisJZXNhYworfQorCisjIEdlbmVyYXRlcyBjb21wbGV0aW9uIHJlcGx5IHdpdGggY29tcGdlbiBmcm9tIG5ld2xpbmUtc2VwYXJhdGVkIHBvc3NpYmxlCisjIGNvbXBsZXRpb24gd29yZHMgYnkgYXBwZW5kaW5nIGEgc3BhY2UgdG8gYWxsIG9mIHRoZW0uCisjIEl0IGFjY2VwdHMgMSB0byA0IGFyZ3VtZW50czoKKyMgMTogTGlzdCBvZiBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmRzLCBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgbmV3bGluZS4KKyMgMjogQSBwcmVmaXggdG8gYmUgYWRkZWQgdG8gZWFjaCBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmQgKG9wdGlvbmFsKS4KKyMgMzogR2VuZXJhdGUgcG9zc2libGUgY29tcGxldGlvbiBtYXRjaGVzIGZvciB0aGlzIHdvcmQgKG9wdGlvbmFsKS4KKyMgNDogQSBzdWZmaXggdG8gYmUgYXBwZW5kZWQgdG8gZWFjaCBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmQgaW5zdGVhZCBvZgorIyAgICB0aGUgZGVmYXVsdCBzcGFjZSAob3B0aW9uYWwpLiAgSWYgc3BlY2lmaWVkIGJ1dCBlbXB0eSwgbm90aGluZyBpcworIyAgICBhcHBlbmRlZC4KK19fZ2l0Y29tcF9ubCAoKQoreworCWxvY2FsIElGUz0kJ1xuJworCUNPTVBSRVBMWT0oJChjb21wZ2VuIC1QICIkezItfSIgLVMgIiR7NC0gfSIgLVcgIiQxIiAtLSAiJHszLSRjdXJ9IikpCit9CisKK19fZ2l0X2hlYWRzICgpCit7CisJbG9jYWwgZGlyPSIkKF9fZ2l0ZGlyKSIKKwlpZiBbIC1kICIkZGlyIiBdOyB0aGVuCisJCWdpdCAtLWdpdC1kaXI9IiRkaXIiIGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShyZWZuYW1lOnNob3J0KScgXAorCQkJcmVmcy9oZWFkcworCQlyZXR1cm4KKwlmaQorfQorCitfX2dpdF90YWdzICgpCit7CisJbG9jYWwgZGlyPSIkKF9fZ2l0ZGlyKSIKKwlpZiBbIC1kICIkZGlyIiBdOyB0aGVuCisJCWdpdCAtLWdpdC1kaXI9IiRkaXIiIGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShyZWZuYW1lOnNob3J0KScgXAorCQkJcmVmcy90YWdzCisJCXJldHVybgorCWZpCit9CisKKyMgX19naXRfcmVmcyBhY2NlcHRzIDAsIDEgKHRvIHBhc3MgdG8gX19naXRkaXIpLCBvciAyIGFyZ3VtZW50cworIyBwcmVzZW5jZSBvZiAybmQgYXJndW1lbnQgbWVhbnMgdXNlIHRoZSBndWVzcyBoZXVyaXN0aWMgZW1wbG95ZWQKKyMgYnkgY2hlY2tvdXQgZm9yIHRyYWNraW5nIGJyYW5jaGVzCitfX2dpdF9yZWZzICgpCit7CisJbG9jYWwgaSBoYXNoIGRpcj0iJChfX2dpdGRpciAiJHsxLX0iKSIgdHJhY2s9IiR7Mi19IgorCWxvY2FsIGZvcm1hdCByZWZzCisJaWYgWyAtZCAiJGRpciIgXTsgdGhlbgorCQljYXNlICIkY3VyIiBpbgorCQlyZWZzfHJlZnMvKikKKwkJCWZvcm1hdD0icmVmbmFtZSIKKwkJCXJlZnM9IiR7Y3VyJS8qfSIKKwkJCXRyYWNrPSIiCisJCQk7OworCQkqKQorCQkJZm9yIGkgaW4gSEVBRCBGRVRDSF9IRUFEIE9SSUdfSEVBRCBNRVJHRV9IRUFEOyBkbworCQkJCWlmIFsgLWUgIiRkaXIvJGkiIF07IHRoZW4gZWNobyAkaTsgZmkKKwkJCWRvbmUKKwkJCWZvcm1hdD0icmVmbmFtZTpzaG9ydCIKKwkJCXJlZnM9InJlZnMvdGFncyByZWZzL2hlYWRzIHJlZnMvcmVtb3RlcyIKKwkJCTs7CisJCWVzYWMKKwkJZ2l0IC0tZ2l0LWRpcj0iJGRpciIgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKCRmb3JtYXQpIiBcCisJCQkkcmVmcworCQlpZiBbIC1uICIkdHJhY2siIF07IHRoZW4KKwkJCSMgZW1wbG95IHRoZSBoZXVyaXN0aWMgdXNlZCBieSBnaXQgY2hlY2tvdXQKKwkJCSMgVHJ5IHRvIGZpbmQgYSByZW1vdGUgYnJhbmNoIHRoYXQgbWF0Y2hlcyB0aGUgY29tcGxldGlvbiB3b3JkCisJCQkjIGJ1dCBvbmx5IG91dHB1dCBpZiB0aGUgYnJhbmNoIG5hbWUgaXMgdW5pcXVlCisJCQlsb2NhbCByZWYgZW50cnkKKwkJCWdpdCAtLWdpdC1kaXI9IiRkaXIiIGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSJyZWY9JShyZWZuYW1lOnNob3J0KSIgXAorCQkJCSJyZWZzL3JlbW90ZXMvIiB8IFwKKwkJCXdoaWxlIHJlYWQgLXIgZW50cnk7IGRvCisJCQkJZXZhbCAiJGVudHJ5IgorCQkJCXJlZj0iJHtyZWYjKi99IgorCQkJCWlmIFtbICIkcmVmIiA9PSAiJGN1ciIqIF1dOyB0aGVuCisJCQkJCWVjaG8gIiRyZWYiCisJCQkJZmkKKwkJCWRvbmUgfCB1bmlxIC11CisJCWZpCisJCXJldHVybgorCWZpCisJY2FzZSAiJGN1ciIgaW4KKwlyZWZzfHJlZnMvKikKKwkJZ2l0IGxzLXJlbW90ZSAiJGRpciIgIiRjdXIqIiAyPi9kZXYvbnVsbCB8IFwKKwkJd2hpbGUgcmVhZCAtciBoYXNoIGk7IGRvCisJCQljYXNlICIkaSIgaW4KKwkJCSpee30pIDs7CisJCQkqKSBlY2hvICIkaSIgOzsKKwkJCWVzYWMKKwkJZG9uZQorCQk7OworCSopCisJCWdpdCBscy1yZW1vdGUgIiRkaXIiIEhFQUQgT1JJR19IRUFEICdyZWZzL3RhZ3MvKicgJ3JlZnMvaGVhZHMvKicgJ3JlZnMvcmVtb3Rlcy8qJyAyPi9kZXYvbnVsbCB8IFwKKwkJd2hpbGUgcmVhZCAtciBoYXNoIGk7IGRvCisJCQljYXNlICIkaSIgaW4KKwkJCSpee30pIDs7CisJCQlyZWZzLyopIGVjaG8gIiR7aSNyZWZzLyovfSIgOzsKKwkJCSopIGVjaG8gIiRpIiA7OworCQkJZXNhYworCQlkb25lCisJCTs7CisJZXNhYworfQorCisjIF9fZ2l0X3JlZnMyIHJlcXVpcmVzIDEgYXJndW1lbnQgKHRvIHBhc3MgdG8gX19naXRfcmVmcykKK19fZ2l0X3JlZnMyICgpCit7CisJbG9jYWwgaQorCWZvciBpIGluICQoX19naXRfcmVmcyAiJDEiKTsgZG8KKwkJZWNobyAiJGk6JGkiCisJZG9uZQorfQorCisjIF9fZ2l0X3JlZnNfcmVtb3RlcyByZXF1aXJlcyAxIGFyZ3VtZW50ICh0byBwYXNzIHRvIGxzLXJlbW90ZSkKK19fZ2l0X3JlZnNfcmVtb3RlcyAoKQoreworCWxvY2FsIGkgaGFzaAorCWdpdCBscy1yZW1vdGUgIiQxIiAncmVmcy9oZWFkcy8qJyAyPi9kZXYvbnVsbCB8IFwKKwl3aGlsZSByZWFkIC1yIGhhc2ggaTsgZG8KKwkJZWNobyAiJGk6cmVmcy9yZW1vdGVzLyQxLyR7aSNyZWZzL2hlYWRzL30iCisJZG9uZQorfQorCitfX2dpdF9yZW1vdGVzICgpCit7CisJbG9jYWwgaSBJRlM9JCdcbicgZD0iJChfX2dpdGRpcikiCisJdGVzdCAtZCAiJGQvcmVtb3RlcyIgJiYgbHMgLTEgIiRkL3JlbW90ZXMiCisJZm9yIGkgaW4gJChnaXQgLS1naXQtZGlyPSIkZCIgY29uZmlnIC0tZ2V0LXJlZ2V4cCAncmVtb3RlXC4uKlwudXJsJyAyPi9kZXYvbnVsbCk7IGRvCisJCWk9IiR7aSNyZW1vdGUufSIKKwkJZWNobyAiJHtpLy51cmwqL30iCisJZG9uZQorfQorCitfX2dpdF9saXN0X21lcmdlX3N0cmF0ZWdpZXMgKCkKK3sKKwlnaXQgbWVyZ2UgLXMgaGVscCAyPiYxIHwKKwlzZWQgLW4gLWUgJy9bQWFddmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IC8sL14kL3sKKwkJcy9cLiQvLworCQlzLy4qOi8vCisJCXMvXlsgCV0qLy8KKwkJcy9bIAldKiQvLworCQlwCisJfScKK30KKworX19naXRfbWVyZ2Vfc3RyYXRlZ2llcz0KKyMgJ2dpdCBtZXJnZSAtcyBoZWxwJyAoYW5kIHRodXMgZGV0ZWN0aW9uIG9mIHRoZSBtZXJnZSBzdHJhdGVneQorIyBsaXN0KSBmYWlscywgdW5mb3J0dW5hdGVseSwgaWYgcnVuIG91dHNpZGUgb2YgYW55IGdpdCB3b3JraW5nCisjIHRyZWUuICBfX2dpdF9tZXJnZV9zdHJhdGVnaWVzIGlzIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nIGluCisjIHRoYXQgY2FzZSwgYW5kIHRoZSBkZXRlY3Rpb24gd2lsbCBiZSByZXBlYXRlZCB0aGUgbmV4dCB0aW1lIGl0CisjIGlzIG5lZWRlZC4KK19fZ2l0X2NvbXB1dGVfbWVyZ2Vfc3RyYXRlZ2llcyAoKQoreworCXRlc3QgLW4gIiRfX2dpdF9tZXJnZV9zdHJhdGVnaWVzIiB8fAorCV9fZ2l0X21lcmdlX3N0cmF0ZWdpZXM9JChfX2dpdF9saXN0X21lcmdlX3N0cmF0ZWdpZXMpCit9CisKK19fZ2l0X2NvbXBsZXRlX3Jldmxpc3RfZmlsZSAoKQoreworCWxvY2FsIHBmeCBscyByZWYgY3VyXz0iJGN1ciIKKwljYXNlICIkY3VyXyIgaW4KKwkqLi4/KjoqKQorCQlyZXR1cm4KKwkJOzsKKwk/KjoqKQorCQlyZWY9IiR7Y3VyXyUlOip9IgorCQljdXJfPSIke2N1cl8jKjp9IgorCQljYXNlICIkY3VyXyIgaW4KKwkJPyovKikKKwkJCXBmeD0iJHtjdXJfJS8qfSIKKwkJCWN1cl89IiR7Y3VyXyMjKi99IgorCQkJbHM9IiRyZWY6JHBmeCIKKwkJCXBmeD0iJHBmeC8iCisJCQk7OworCQkqKQorCQkJbHM9IiRyZWYiCisJCQk7OworCQllc2FjCisKKwkJY2FzZSAiJENPTVBfV09SREJSRUFLUyIgaW4KKwkJKjoqKSA6IGdyZWF0IDs7CisJCSopICAgcGZ4PSIkcmVmOiRwZngiIDs7CisJCWVzYWMKKworCQlfX2dpdGNvbXBfbmwgIiQoZ2l0IC0tZ2l0LWRpcj0iJChfX2dpdGRpcikiIGxzLXRyZWUgIiRscyIgXAorCQkJCXwgc2VkICcvXjEwMC4uLiBibG9iIC97CisJCQkJICAgICAgICAgICBzLF4uKgksLAorCQkJCSAgICAgICAgICAgcywkLCAsCisJCQkJICAgICAgIH0KKwkJCQkgICAgICAgL14xMjAwMDAgYmxvYiAveworCQkJCSAgICAgICAgICAgcyxeLioJLCwKKwkJCQkgICAgICAgICAgIHMsJCwgLAorCQkJCSAgICAgICB9CisJCQkJICAgICAgIC9eMDQwMDAwIHRyZWUgL3sKKwkJCQkgICAgICAgICAgIHMsXi4qCSwsCisJCQkJICAgICAgICAgICBzLCQsLywKKwkJCQkgICAgICAgfQorCQkJCSAgICAgICBzL14uKgkvLycpIiBcCisJCQkiJHBmeCIgIiRjdXJfIiAiIgorCQk7OworCSouLi4qKQorCQlwZng9IiR7Y3VyXyUuLi4qfS4uLiIKKwkJY3VyXz0iJHtjdXJfIyouLi59IgorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiICIkcGZ4IiAiJGN1cl8iCisJCTs7CisJKi4uKikKKwkJcGZ4PSIke2N1cl8lLi4qfS4uIgorCQljdXJfPSIke2N1cl8jKi4ufSIKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIiAiJHBmeCIgIiRjdXJfIgorCQk7OworCSopCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKKwkJOzsKKwllc2FjCit9CisKKworX19naXRfY29tcGxldGVfZmlsZSAoKQoreworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3RfZmlsZQorfQorCitfX2dpdF9jb21wbGV0ZV9yZXZsaXN0ICgpCit7CisJX19naXRfY29tcGxldGVfcmV2bGlzdF9maWxlCit9CisKK19fZ2l0X2NvbXBsZXRlX3JlbW90ZV9vcl9yZWZzcGVjICgpCit7CisJbG9jYWwgY3VyXz0iJGN1ciIgY21kPSIke3dvcmRzWzFdfSIKKwlsb2NhbCBpIGM9MiByZW1vdGU9IiIgcGZ4PSIiIGxocz0xIG5vX2NvbXBsZXRlX3JlZnNwZWM9MAorCWlmIFsgIiRjbWQiID0gInJlbW90ZSIgXTsgdGhlbgorCQkoKGMrKykpCisJZmkKKwl3aGlsZSBbICRjIC1sdCAkY3dvcmQgXTsgZG8KKwkJaT0iJHt3b3Jkc1tjXX0iCisJCWNhc2UgIiRpIiBpbgorCQktLW1pcnJvcikgWyAiJGNtZCIgPSAicHVzaCIgXSAmJiBub19jb21wbGV0ZV9yZWZzcGVjPTEgOzsKKwkJLS1hbGwpCisJCQljYXNlICIkY21kIiBpbgorCQkJcHVzaCkgbm9fY29tcGxldGVfcmVmc3BlYz0xIDs7CisJCQlmZXRjaCkKKwkJCQlDT01QUkVQTFk9KCkKKwkJCQlyZXR1cm4KKwkJCQk7OworCQkJKikgOzsKKwkJCWVzYWMKKwkJCTs7CisJCS0qKSA7OworCQkqKSByZW1vdGU9IiRpIjsgYnJlYWsgOzsKKwkJZXNhYworCQkoKGMrKykpCisJZG9uZQorCWlmIFsgLXogIiRyZW1vdGUiIF07IHRoZW4KKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIgorCQlyZXR1cm4KKwlmaQorCWlmIFsgJG5vX2NvbXBsZXRlX3JlZnNwZWMgPSAxIF07IHRoZW4KKwkJQ09NUFJFUExZPSgpCisJCXJldHVybgorCWZpCisJWyAiJHJlbW90ZSIgPSAiLiIgXSAmJiByZW1vdGU9CisJY2FzZSAiJGN1cl8iIGluCisJKjoqKQorCQljYXNlICIkQ09NUF9XT1JEQlJFQUtTIiBpbgorCQkqOiopIDogZ3JlYXQgOzsKKwkJKikgICBwZng9IiR7Y3VyXyUlOip9OiIgOzsKKwkJZXNhYworCQljdXJfPSIke2N1cl8jKjp9IgorCQlsaHM9MAorCQk7OworCSsqKQorCQlwZng9IisiCisJCWN1cl89IiR7Y3VyXyMrfSIKKwkJOzsKKwllc2FjCisJY2FzZSAiJGNtZCIgaW4KKwlmZXRjaCkKKwkJaWYgWyAkbGhzID0gMSBdOyB0aGVuCisJCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmczIgIiRyZW1vdGUiKSIgIiRwZngiICIkY3VyXyIKKwkJZWxzZQorCQkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIiAiJHBmeCIgIiRjdXJfIgorCQlmaQorCQk7OworCXB1bGx8cmVtb3RlKQorCQlpZiBbICRsaHMgPSAxIF07IHRoZW4KKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzICIkcmVtb3RlIikiICIkcGZ4IiAiJGN1cl8iCisJCWVsc2UKKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIgIiRwZngiICIkY3VyXyIKKwkJZmkKKwkJOzsKKwlwdXNoKQorCQlpZiBbICRsaHMgPSAxIF07IHRoZW4KKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIgIiRwZngiICIkY3VyXyIKKwkJZWxzZQorCQkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMgIiRyZW1vdGUiKSIgIiRwZngiICIkY3VyXyIKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKK19fZ2l0X2NvbXBsZXRlX3N0cmF0ZWd5ICgpCit7CisJX19naXRfY29tcHV0ZV9tZXJnZV9zdHJhdGVnaWVzCisJY2FzZSAiJHByZXYiIGluCisJLXN8LS1zdHJhdGVneSkKKwkJX19naXRjb21wICIkX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyIKKwkJcmV0dXJuIDAKKwllc2FjCisJY2FzZSAiJGN1ciIgaW4KKwktLXN0cmF0ZWd5PSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMiICIiICIke2N1ciMjLS1zdHJhdGVneT19IgorCQlyZXR1cm4gMAorCQk7OworCWVzYWMKKwlyZXR1cm4gMQorfQorCitfX2dpdF9saXN0X2FsbF9jb21tYW5kcyAoKQoreworCWxvY2FsIGkgSUZTPSIgIiQnXG4nCisJZm9yIGkgaW4gJChnaXQgaGVscCAtYXxlZ3JlcCAnXiAgW2EtekEtWjAtOV0nKQorCWRvCisJCWNhc2UgJGkgaW4KKwkJKi0tKikgICAgICAgICAgICAgOiBoZWxwZXIgcGF0dGVybjs7CisJCSopIGVjaG8gJGk7OworCQllc2FjCisJZG9uZQorfQorCitfX2dpdF9hbGxfY29tbWFuZHM9CitfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcyAoKQoreworCXRlc3QgLW4gIiRfX2dpdF9hbGxfY29tbWFuZHMiIHx8CisJX19naXRfYWxsX2NvbW1hbmRzPSQoX19naXRfbGlzdF9hbGxfY29tbWFuZHMpCit9CisKK19fZ2l0X2xpc3RfcG9yY2VsYWluX2NvbW1hbmRzICgpCit7CisJbG9jYWwgaSBJRlM9IiAiJCdcbicKKwlfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcworCWZvciBpIGluICJoZWxwIiAkX19naXRfYWxsX2NvbW1hbmRzCisJZG8KKwkJY2FzZSAkaSBpbgorCQkqLS0qKSAgICAgICAgICAgICA6IGhlbHBlciBwYXR0ZXJuOzsKKwkJYXBwbHltYm94KSAgICAgICAgOiBhc2sgZ2l0dHVzOzsKKwkJYXBwbHlwYXRjaCkgICAgICAgOiBhc2sgZ2l0dHVzOzsKKwkJYXJjaGltcG9ydCkgICAgICAgOiBpbXBvcnQ7OworCQljYXQtZmlsZSkgICAgICAgICA6IHBsdW1iaW5nOzsKKwkJY2hlY2stYXR0cikgICAgICAgOiBwbHVtYmluZzs7CisJCWNoZWNrLXJlZi1mb3JtYXQpIDogcGx1bWJpbmc7OworCQljaGVja291dC1pbmRleCkgICA6IHBsdW1iaW5nOzsKKwkJY29tbWl0LXRyZWUpICAgICAgOiBwbHVtYmluZzs7CisJCWNvdW50LW9iamVjdHMpICAgIDogaW5mcmVxdWVudDs7CisJCWNyZWRlbnRpYWwtY2FjaGUpIDogY3JlZGVudGlhbHMgaGVscGVyOzsKKwkJY3JlZGVudGlhbC1zdG9yZSkgOiBjcmVkZW50aWFscyBoZWxwZXI7OworCQljdnNleHBvcnRjb21taXQpICA6IGV4cG9ydDs7CisJCWN2c2ltcG9ydCkgICAgICAgIDogaW1wb3J0OzsKKwkJY3Zzc2VydmVyKSAgICAgICAgOiBkYWVtb247OworCQlkYWVtb24pICAgICAgICAgICA6IGRhZW1vbjs7CisJCWRpZmYtZmlsZXMpICAgICAgIDogcGx1bWJpbmc7OworCQlkaWZmLWluZGV4KSAgICAgICA6IHBsdW1iaW5nOzsKKwkJZGlmZi10cmVlKSAgICAgICAgOiBwbHVtYmluZzs7CisJCWZhc3QtaW1wb3J0KSAgICAgIDogaW1wb3J0OzsKKwkJZmFzdC1leHBvcnQpICAgICAgOiBleHBvcnQ7OworCQlmc2NrLW9iamVjdHMpICAgICA6IHBsdW1iaW5nOzsKKwkJZmV0Y2gtcGFjaykgICAgICAgOiBwbHVtYmluZzs7CisJCWZtdC1tZXJnZS1tc2cpICAgIDogcGx1bWJpbmc7OworCQlmb3ItZWFjaC1yZWYpICAgICA6IHBsdW1iaW5nOzsKKwkJaGFzaC1vYmplY3QpICAgICAgOiBwbHVtYmluZzs7CisJCWh0dHAtKikgICAgICAgICAgIDogdHJhbnNwb3J0OzsKKwkJaW5kZXgtcGFjaykgICAgICAgOiBwbHVtYmluZzs7CisJCWluaXQtZGIpICAgICAgICAgIDogZGVwcmVjYXRlZDs7CisJCWxvY2FsLWZldGNoKSAgICAgIDogcGx1bWJpbmc7OworCQlsb3N0LWZvdW5kKSAgICAgICA6IGluZnJlcXVlbnQ7OworCQlscy1maWxlcykgICAgICAgICA6IHBsdW1iaW5nOzsKKwkJbHMtcmVtb3RlKSAgICAgICAgOiBwbHVtYmluZzs7CisJCWxzLXRyZWUpICAgICAgICAgIDogcGx1bWJpbmc7OworCQltYWlsaW5mbykgICAgICAgICA6IHBsdW1iaW5nOzsKKwkJbWFpbHNwbGl0KSAgICAgICAgOiBwbHVtYmluZzs7CisJCW1lcmdlLSopICAgICAgICAgIDogcGx1bWJpbmc7OworCQlta3RyZWUpICAgICAgICAgICA6IHBsdW1iaW5nOzsKKwkJbWt0YWcpICAgICAgICAgICAgOiBwbHVtYmluZzs7CisJCXBhY2stb2JqZWN0cykgICAgIDogcGx1bWJpbmc7OworCQlwYWNrLXJlZHVuZGFudCkgICA6IHBsdW1iaW5nOzsKKwkJcGFjay1yZWZzKSAgICAgICAgOiBwbHVtYmluZzs7CisJCXBhcnNlLXJlbW90ZSkgICAgIDogcGx1bWJpbmc7OworCQlwYXRjaC1pZCkgICAgICAgICA6IHBsdW1iaW5nOzsKKwkJcGVlay1yZW1vdGUpICAgICAgOiBwbHVtYmluZzs7CisJCXBydW5lKSAgICAgICAgICAgIDogcGx1bWJpbmc7OworCQlwcnVuZS1wYWNrZWQpICAgICA6IHBsdW1iaW5nOzsKKwkJcXVpbHRpbXBvcnQpICAgICAgOiBpbXBvcnQ7OworCQlyZWFkLXRyZWUpICAgICAgICA6IHBsdW1iaW5nOzsKKwkJcmVjZWl2ZS1wYWNrKSAgICAgOiBwbHVtYmluZzs7CisJCXJlbW90ZS0qKSAgICAgICAgIDogdHJhbnNwb3J0OzsKKwkJcmVwby1jb25maWcpICAgICAgOiBkZXByZWNhdGVkOzsKKwkJcmVyZXJlKSAgICAgICAgICAgOiBwbHVtYmluZzs7CisJCXJldi1saXN0KSAgICAgICAgIDogcGx1bWJpbmc7OworCQlyZXYtcGFyc2UpICAgICAgICA6IHBsdW1iaW5nOzsKKwkJcnVuc3RhdHVzKSAgICAgICAgOiBwbHVtYmluZzs7CisJCXNoLXNldHVwKSAgICAgICAgIDogaW50ZXJuYWw7OworCQlzaGVsbCkgICAgICAgICAgICA6IGRhZW1vbjs7CisJCXNob3ctcmVmKSAgICAgICAgIDogcGx1bWJpbmc7OworCQlzZW5kLXBhY2spICAgICAgICA6IHBsdW1iaW5nOzsKKwkJc2hvdy1pbmRleCkgICAgICAgOiBwbHVtYmluZzs7CisJCXNzaC0qKSAgICAgICAgICAgIDogdHJhbnNwb3J0OzsKKwkJc3RyaXBzcGFjZSkgICAgICAgOiBwbHVtYmluZzs7CisJCXN5bWJvbGljLXJlZikgICAgIDogcGx1bWJpbmc7OworCQl0YXItdHJlZSkgICAgICAgICA6IGRlcHJlY2F0ZWQ7OworCQl1bnBhY2stZmlsZSkgICAgICA6IHBsdW1iaW5nOzsKKwkJdW5wYWNrLW9iamVjdHMpICAgOiBwbHVtYmluZzs7CisJCXVwZGF0ZS1pbmRleCkgICAgIDogcGx1bWJpbmc7OworCQl1cGRhdGUtcmVmKSAgICAgICA6IHBsdW1iaW5nOzsKKwkJdXBkYXRlLXNlcnZlci1pbmZvKSA6IGRhZW1vbjs7CisJCXVwbG9hZC1hcmNoaXZlKSAgIDogcGx1bWJpbmc7OworCQl1cGxvYWQtcGFjaykgICAgICA6IHBsdW1iaW5nOzsKKwkJd3JpdGUtdHJlZSkgICAgICAgOiBwbHVtYmluZzs7CisJCXZhcikgICAgICAgICAgICAgIDogaW5mcmVxdWVudDs7CisJCXZlcmlmeS1wYWNrKSAgICAgIDogaW5mcmVxdWVudDs7CisJCXZlcmlmeS10YWcpICAgICAgIDogcGx1bWJpbmc7OworCQkqKSBlY2hvICRpOzsKKwkJZXNhYworCWRvbmUKK30KKworX19naXRfcG9yY2VsYWluX2NvbW1hbmRzPQorX19naXRfY29tcHV0ZV9wb3JjZWxhaW5fY29tbWFuZHMgKCkKK3sKKwlfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcworCXRlc3QgLW4gIiRfX2dpdF9wb3JjZWxhaW5fY29tbWFuZHMiIHx8CisJX19naXRfcG9yY2VsYWluX2NvbW1hbmRzPSQoX19naXRfbGlzdF9wb3JjZWxhaW5fY29tbWFuZHMpCit9CisKK19fZ2l0X3ByZXR0eV9hbGlhc2VzICgpCit7CisJbG9jYWwgaSBJRlM9JCdcbicKKwlmb3IgaSBpbiAkKGdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBjb25maWcgLS1nZXQtcmVnZXhwICJwcmV0dHlcLi4qIiAyPi9kZXYvbnVsbCk7IGRvCisJCWNhc2UgIiRpIiBpbgorCQlwcmV0dHkuKikKKwkJCWk9IiR7aSNwcmV0dHkufSIKKwkJCWVjaG8gIiR7aS8gKi99IgorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworX19naXRfYWxpYXNlcyAoKQoreworCWxvY2FsIGkgSUZTPSQnXG4nCisJZm9yIGkgaW4gJChnaXQgLS1naXQtZGlyPSIkKF9fZ2l0ZGlyKSIgY29uZmlnIC0tZ2V0LXJlZ2V4cCAiYWxpYXNcLi4qIiAyPi9kZXYvbnVsbCk7IGRvCisJCWNhc2UgIiRpIiBpbgorCQlhbGlhcy4qKQorCQkJaT0iJHtpI2FsaWFzLn0iCisJCQllY2hvICIke2kvICovfSIKKwkJCTs7CisJCWVzYWMKKwlkb25lCit9CisKKyMgX19naXRfYWxpYXNlZF9jb21tYW5kIHJlcXVpcmVzIDEgYXJndW1lbnQKK19fZ2l0X2FsaWFzZWRfY29tbWFuZCAoKQoreworCWxvY2FsIHdvcmQgY21kbGluZT0kKGdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBcCisJCWNvbmZpZyAtLWdldCAiYWxpYXMuJDEiKQorCWZvciB3b3JkIGluICRjbWRsaW5lOyBkbworCQljYXNlICIkd29yZCIgaW4KKwkJXCFnaXRrfGdpdGspCisJCQllY2hvICJnaXRrIgorCQkJcmV0dXJuCisJCQk7OworCQlcISopCTogc2hlbGwgY29tbWFuZCBhbGlhcyA7OworCQktKikJOiBvcHRpb24gOzsKKwkJKj0qKQk6IHNldHRpbmcgZW52IDs7CisJCWdpdCkJOiBnaXQgaXRzZWxmIDs7CisJCSopCisJCQllY2hvICIkd29yZCIKKwkJCXJldHVybgorCQllc2FjCisJZG9uZQorfQorCisjIF9fZ2l0X2ZpbmRfb25fY21kbGluZSByZXF1aXJlcyAxIGFyZ3VtZW50CitfX2dpdF9maW5kX29uX2NtZGxpbmUgKCkKK3sKKwlsb2NhbCB3b3JkIHN1YmNvbW1hbmQgYz0xCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCXdvcmQ9IiR7d29yZHNbY119IgorCQlmb3Igc3ViY29tbWFuZCBpbiAkMTsgZG8KKwkJCWlmIFsgIiRzdWJjb21tYW5kIiA9ICIkd29yZCIgXTsgdGhlbgorCQkJCWVjaG8gIiRzdWJjb21tYW5kIgorCQkJCXJldHVybgorCQkJZmkKKwkJZG9uZQorCQkoKGMrKykpCisJZG9uZQorfQorCitfX2dpdF9oYXNfZG91YmxlZGFzaCAoKQoreworCWxvY2FsIGM9MQorCXdoaWxlIFsgJGMgLWx0ICRjd29yZCBdOyBkbworCQlpZiBbICItLSIgPSAiJHt3b3Jkc1tjXX0iIF07IHRoZW4KKwkJCXJldHVybiAwCisJCWZpCisJCSgoYysrKSkKKwlkb25lCisJcmV0dXJuIDEKK30KKworX19naXRfd2hpdGVzcGFjZWxpc3Q9Im5vd2FybiB3YXJuIGVycm9yIGVycm9yLWFsbCBmaXgiCisKK19naXRfYW0gKCkKK3sKKwlsb2NhbCBkaXI9IiQoX19naXRkaXIpIgorCWlmIFsgLWQgIiRkaXIiL3JlYmFzZS1hcHBseSBdOyB0aGVuCisJCV9fZ2l0Y29tcCAiLS1za2lwIC0tY29udGludWUgLS1yZXNvbHZlZCAtLWFib3J0IgorCQlyZXR1cm4KKwlmaQorCWNhc2UgIiRjdXIiIGluCisJLS13aGl0ZXNwYWNlPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3doaXRlc3BhY2VsaXN0IiAiIiAiJHtjdXIjIy0td2hpdGVzcGFjZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLTN3YXkgLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSAtLWlnbm9yZS1kYXRlCisJCQktLWlnbm9yZS13aGl0ZXNwYWNlIC0taWdub3JlLXNwYWNlLWNoYW5nZQorCQkJLS1pbnRlcmFjdGl2ZSAtLWtlZXAgLS1uby11dGY4IC0tc2lnbm9mZiAtLXV0ZjgKKwkJCS0td2hpdGVzcGFjZT0gLS1zY2lzc29ycworCQkJIgorCQlyZXR1cm4KKwllc2FjCisJQ09NUFJFUExZPSgpCit9CisKK19naXRfYXBwbHkgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0td2hpdGVzcGFjZT0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF93aGl0ZXNwYWNlbGlzdCIgIiIgIiR7Y3VyIyMtLXdoaXRlc3BhY2U9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1zdGF0IC0tbnVtc3RhdCAtLXN1bW1hcnkgLS1jaGVjayAtLWluZGV4CisJCQktLWNhY2hlZCAtLWluZGV4LWluZm8gLS1yZXZlcnNlIC0tcmVqZWN0IC0tdW5pZGlmZi16ZXJvCisJCQktLWFwcGx5IC0tbm8tYWRkIC0tZXhjbHVkZT0KKwkJCS0taWdub3JlLXdoaXRlc3BhY2UgLS1pZ25vcmUtc3BhY2UtY2hhbmdlCisJCQktLXdoaXRlc3BhY2U9IC0taW5hY2N1cmF0ZS1lb2YgLS12ZXJib3NlCisJCQkiCisJCXJldHVybgorCWVzYWMKKwlDT01QUkVQTFk9KCkKK30KKworX2dpdF9hZGQgKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1pbnRlcmFjdGl2ZSAtLXJlZnJlc2ggLS1wYXRjaCAtLXVwZGF0ZSAtLWRyeS1ydW4KKwkJCS0taWdub3JlLWVycm9ycyAtLWludGVudC10by1hZGQKKwkJCSIKKwkJcmV0dXJuCisJZXNhYworCUNPTVBSRVBMWT0oKQorfQorCitfZ2l0X2FyY2hpdmUgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tZm9ybWF0PSopCisJCV9fZ2l0Y29tcCAiJChnaXQgYXJjaGl2ZSAtLWxpc3QpIiAiIiAiJHtjdXIjIy0tZm9ybWF0PX0iCisJCXJldHVybgorCQk7OworCS0tcmVtb3RlPSopCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZW1vdGVzKSIgIiIgIiR7Y3VyIyMtLXJlbW90ZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWZvcm1hdD0gLS1saXN0IC0tdmVyYm9zZQorCQkJLS1wcmVmaXg9IC0tcmVtb3RlPSAtLWV4ZWM9CisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9maWxlCit9CisKK19naXRfYmlzZWN0ICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwlsb2NhbCBzdWJjb21tYW5kcz0ic3RhcnQgYmFkIGdvb2Qgc2tpcCByZXNldCB2aXN1YWxpemUgcmVwbGF5IGxvZyBydW4iCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgorCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCisJCWlmIFsgLWYgIiQoX19naXRkaXIpIi9CSVNFQ1RfU1RBUlQgXTsgdGhlbgorCQkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCWVsc2UKKwkJCV9fZ2l0Y29tcCAicmVwbGF5IHN0YXJ0IgorCQlmaQorCQlyZXR1cm4KKwlmaQorCisJY2FzZSAiJHN1YmNvbW1hbmQiIGluCisJYmFkfGdvb2R8cmVzZXR8c2tpcHxzdGFydCkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorCQk7OworCSopCisJCUNPTVBSRVBMWT0oKQorCQk7OworCWVzYWMKK30KKworX2dpdF9icmFuY2ggKCkKK3sKKwlsb2NhbCBpIGM9MSBvbmx5X2xvY2FsX3JlZj0ibiIgaGFzX3I9Im4iCisKKwl3aGlsZSBbICRjIC1sdCAkY3dvcmQgXTsgZG8KKwkJaT0iJHt3b3Jkc1tjXX0iCisJCWNhc2UgIiRpIiBpbgorCQktZHwtbSkJb25seV9sb2NhbF9yZWY9InkiIDs7CisJCS1yKQloYXNfcj0ieSIgOzsKKwkJZXNhYworCQkoKGMrKykpCisJZG9uZQorCisJY2FzZSAiJGN1ciIgaW4KKwktLXNldC11cHN0cmVhbS10bz0qKQorCQlfX2dpdGNvbXAgIiQoX19naXRfcmVmcykiICIiICIke2N1ciMjLS1zZXQtdXBzdHJlYW0tdG89fSIKKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWNvbG9yIC0tbm8tY29sb3IgLS12ZXJib3NlIC0tYWJicmV2PSAtLW5vLWFiYnJldgorCQkJLS10cmFjayAtLW5vLXRyYWNrIC0tY29udGFpbnMgLS1tZXJnZWQgLS1uby1tZXJnZWQKKwkJCS0tc2V0LXVwc3RyZWFtLXRvPSAtLWVkaXQtZGVzY3JpcHRpb24gLS1saXN0CisJCQktLXVuc2V0LXVwc3RyZWFtCisJCQkiCisJCTs7CisJKikKKwkJaWYgWyAkb25seV9sb2NhbF9yZWYgPSAieSIgLWEgJGhhc19yID0gIm4iIF07IHRoZW4KKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9oZWFkcykiCisJCWVsc2UKKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKK19naXRfYnVuZGxlICgpCit7CisJbG9jYWwgY21kPSIke3dvcmRzWzJdfSIKKwljYXNlICIkY3dvcmQiIGluCisJMikKKwkJX19naXRjb21wICJjcmVhdGUgbGlzdC1oZWFkcyB2ZXJpZnkgdW5idW5kbGUiCisJCTs7CisJMykKKwkJIyBsb29raW5nIGZvciBhIGZpbGUKKwkJOzsKKwkqKQorCQljYXNlICIkY21kIiBpbgorCQkJY3JlYXRlKQorCQkJCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwllc2FjCit9CisKK19naXRfY2hlY2tvdXQgKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS1jb25mbGljdD0qKQorCQlfX2dpdGNvbXAgImRpZmYzIG1lcmdlIiAiIiAiJHtjdXIjIy0tY29uZmxpY3Q9fSIKKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLXF1aWV0IC0tb3VycyAtLXRoZWlycyAtLXRyYWNrIC0tbm8tdHJhY2sgLS1tZXJnZQorCQkJLS1jb25mbGljdD0gLS1vcnBoYW4gLS1wYXRjaAorCQkJIgorCQk7OworCSopCisJCSMgY2hlY2sgaWYgLS10cmFjaywgLS1uby10cmFjaywgb3IgLS1uby1ndWVzcyB3YXMgc3BlY2lmaWVkCisJCSMgaWYgc28sIGRpc2FibGUgRFdJTSBtb2RlCisJCWxvY2FsIGZsYWdzPSItLXRyYWNrIC0tbm8tdHJhY2sgLS1uby1ndWVzcyIgdHJhY2s9MQorCQlpZiBbIC1uICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJGZsYWdzIikiIF07IHRoZW4KKwkJCXRyYWNrPScnCisJCWZpCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzICcnICR0cmFjaykiCisJCTs7CisJZXNhYworfQorCitfZ2l0X2NoZXJyeSAoKQoreworCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzKSIKK30KKworX2dpdF9jaGVycnlfcGljayAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIi0tZWRpdCAtLW5vLWNvbW1pdCIKKwkJOzsKKwkqKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiCisJCTs7CisJZXNhYworfQorCitfZ2l0X2NsZWFuICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICItLWRyeS1ydW4gLS1xdWlldCIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCUNPTVBSRVBMWT0oKQorfQorCitfZ2l0X2Nsb25lICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWxvY2FsCisJCQktLW5vLWhhcmRsaW5rcworCQkJLS1zaGFyZWQKKwkJCS0tcmVmZXJlbmNlCisJCQktLXF1aWV0CisJCQktLW5vLWNoZWNrb3V0CisJCQktLWJhcmUKKwkJCS0tbWlycm9yCisJCQktLW9yaWdpbgorCQkJLS11cGxvYWQtcGFjaworCQkJLS10ZW1wbGF0ZT0KKwkJCS0tZGVwdGgKKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCUNPTVBSRVBMWT0oKQorfQorCitfZ2l0X2NvbW1pdCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLWNsZWFudXA9KikKKwkJX19naXRjb21wICJkZWZhdWx0IHN0cmlwIHZlcmJhdGltIHdoaXRlc3BhY2UKKwkJCSIgIiIgIiR7Y3VyIyMtLWNsZWFudXA9fSIKKwkJcmV0dXJuCisJCTs7CisJLS1yZXVzZS1tZXNzYWdlPSp8LS1yZWVkaXQtbWVzc2FnZT0qfFwKKwktLWZpeHVwPSp8LS1zcXVhc2g9KikKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIiAiIiAiJHtjdXIjKj19IgorCQlyZXR1cm4KKwkJOzsKKwktLXVudHJhY2tlZC1maWxlcz0qKQorCQlfX2dpdGNvbXAgImFsbCBubyBub3JtYWwiICIiICIke2N1ciMjLS11bnRyYWNrZWQtZmlsZXM9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1hbGwgLS1hdXRob3I9IC0tc2lnbm9mZiAtLXZlcmlmeSAtLW5vLXZlcmlmeQorCQkJLS1lZGl0IC0tbm8tZWRpdAorCQkJLS1hbWVuZCAtLWluY2x1ZGUgLS1vbmx5IC0taW50ZXJhY3RpdmUKKwkJCS0tZHJ5LXJ1biAtLXJldXNlLW1lc3NhZ2U9IC0tcmVlZGl0LW1lc3NhZ2U9CisJCQktLXJlc2V0LWF1dGhvciAtLWZpbGU9IC0tbWVzc2FnZT0gLS10ZW1wbGF0ZT0KKwkJCS0tY2xlYW51cD0gLS11bnRyYWNrZWQtZmlsZXMgLS11bnRyYWNrZWQtZmlsZXM9CisJCQktLXZlcmJvc2UgLS1xdWlldCAtLWZpeHVwPSAtLXNxdWFzaD0KKwkJCSIKKwkJcmV0dXJuCisJZXNhYworCUNPTVBSRVBMWT0oKQorfQorCitfZ2l0X2Rlc2NyaWJlICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWFsbCAtLXRhZ3MgLS1jb250YWlucyAtLWFiYnJldj0gLS1jYW5kaWRhdGVzPQorCQkJLS1leGFjdC1tYXRjaCAtLWRlYnVnIC0tbG9uZyAtLW1hdGNoIC0tYWx3YXlzCisJCQkiCisJCXJldHVybgorCWVzYWMKKwlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiCit9CisKK19fZ2l0X2RpZmZfY29tbW9uX29wdGlvbnM9Ii0tc3RhdCAtLW51bXN0YXQgLS1zaG9ydHN0YXQgLS1zdW1tYXJ5CisJCQktLXBhdGNoLXdpdGgtc3RhdCAtLW5hbWUtb25seSAtLW5hbWUtc3RhdHVzIC0tY29sb3IKKwkJCS0tbm8tY29sb3IgLS1jb2xvci13b3JkcyAtLW5vLXJlbmFtZXMgLS1jaGVjaworCQkJLS1mdWxsLWluZGV4IC0tYmluYXJ5IC0tYWJicmV2IC0tZGlmZi1maWx0ZXI9CisJCQktLWZpbmQtY29waWVzLWhhcmRlcgorCQkJLS10ZXh0IC0taWdub3JlLXNwYWNlLWF0LWVvbCAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UKKwkJCS0taWdub3JlLWFsbC1zcGFjZSAtLWV4aXQtY29kZSAtLXF1aWV0IC0tZXh0LWRpZmYKKwkJCS0tbm8tZXh0LWRpZmYKKwkJCS0tbm8tcHJlZml4IC0tc3JjLXByZWZpeD0gLS1kc3QtcHJlZml4PQorCQkJLS1pbnRlci1odW5rLWNvbnRleHQ9CisJCQktLXBhdGllbmNlCisJCQktLXJhdworCQkJLS1kaXJzdGF0IC0tZGlyc3RhdD0gLS1kaXJzdGF0LWJ5LWZpbGUKKwkJCS0tZGlyc3RhdC1ieS1maWxlPSAtLWN1bXVsYXRpdmUKKyIKKworX2dpdF9kaWZmICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICItLWNhY2hlZCAtLXN0YWdlZCAtLXBpY2theGUtYWxsIC0tcGlja2F4ZS1yZWdleAorCQkJLS1iYXNlIC0tb3VycyAtLXRoZWlycyAtLW5vLWluZGV4CisJCQkkX19naXRfZGlmZl9jb21tb25fb3B0aW9ucworCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdF9maWxlCit9CisKK19fZ2l0X21lcmdldG9vbHNfY29tbW9uPSJkaWZmdXNlIGVjbWVyZ2UgZW1lcmdlIGtkaWZmMyBtZWxkIG9wZW5kaWZmCisJCQl0a2RpZmYgdmltZGlmZiBndmltZGlmZiB4eGRpZmYgYXJheGlzIHA0bWVyZ2UgYmMzIGNvZGVjb21wYXJlCisiCisKK19naXRfZGlmZnRvb2wgKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS10b29sPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X21lcmdldG9vbHNfY29tbW9uIGtvbXBhcmUiICIiICIke2N1ciMjLS10b29sPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wICItLWNhY2hlZCAtLXN0YWdlZCAtLXBpY2theGUtYWxsIC0tcGlja2F4ZS1yZWdleAorCQkJLS1iYXNlIC0tb3VycyAtLXRoZWlycworCQkJLS1uby1yZW5hbWVzIC0tZGlmZi1maWx0ZXI9IC0tZmluZC1jb3BpZXMtaGFyZGVyCisJCQktLXJlbGF0aXZlIC0taWdub3JlLXN1Ym1vZHVsZXMKKwkJCS0tdG9vbD0iCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9maWxlCit9CisKK19fZ2l0X2ZldGNoX29wdGlvbnM9IgorCS0tcXVpZXQgLS12ZXJib3NlIC0tYXBwZW5kIC0tdXBsb2FkLXBhY2sgLS1mb3JjZSAtLWtlZXAgLS1kZXB0aD0KKwktLXRhZ3MgLS1uby10YWdzIC0tYWxsIC0tcHJ1bmUgLS1kcnktcnVuCisiCisKK19naXRfZmV0Y2ggKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICIkX19naXRfZmV0Y2hfb3B0aW9ucyIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3JlbW90ZV9vcl9yZWZzcGVjCit9CisKK19naXRfZm9ybWF0X3BhdGNoICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLXRocmVhZD0qKQorCQlfX2dpdGNvbXAgIgorCQkJZGVlcCBzaGFsbG93CisJCQkiICIiICIke2N1ciMjLS10aHJlYWQ9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1zdGRvdXQgLS1hdHRhY2ggLS1uby1hdHRhY2ggLS10aHJlYWQgLS10aHJlYWQ9CisJCQktLW91dHB1dC1kaXJlY3RvcnkKKwkJCS0tbnVtYmVyZWQgLS1zdGFydC1udW1iZXIKKwkJCS0tbnVtYmVyZWQtZmlsZXMKKwkJCS0ta2VlcC1zdWJqZWN0CisJCQktLXNpZ25vZmYgLS1zaWduYXR1cmUgLS1uby1zaWduYXR1cmUKKwkJCS0taW4tcmVwbHktdG89IC0tY2M9CisJCQktLWZ1bGwtaW5kZXggLS1iaW5hcnkKKwkJCS0tbm90IC0tYWxsCisJCQktLWNvdmVyLWxldHRlcgorCQkJLS1uby1wcmVmaXggLS1zcmMtcHJlZml4PSAtLWRzdC1wcmVmaXg9CisJCQktLWlubGluZSAtLXN1ZmZpeD0gLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0KKwkJCS0tc3ViamVjdC1wcmVmaXg9CisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK19naXRfZnNjayAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS10YWdzIC0tcm9vdCAtLXVucmVhY2hhYmxlIC0tY2FjaGUgLS1uby1yZWZsb2dzIC0tZnVsbAorCQkJLS1zdHJpY3QgLS12ZXJib3NlIC0tbG9zdC1mb3VuZAorCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJQ09NUFJFUExZPSgpCit9CisKK19naXRfZ2MgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICItLXBydW5lIC0tYWdncmVzc2l2ZSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCUNPTVBSRVBMWT0oKQorfQorCitfZ2l0X2dpdGsgKCkKK3sKKwlfZ2l0aworfQorCitfX2dpdF9tYXRjaF9jdGFnKCkgeworCWF3ayAiL14kezEvLy8vXFwvfS8geyBwcmludCBcJDEgfSIgIiQyIgorfQorCitfZ2l0X2dyZXAgKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1jYWNoZWQKKwkJCS0tdGV4dCAtLWlnbm9yZS1jYXNlIC0td29yZC1yZWdleHAgLS1pbnZlcnQtbWF0Y2gKKwkJCS0tZnVsbC1uYW1lIC0tbGluZS1udW1iZXIKKwkJCS0tZXh0ZW5kZWQtcmVnZXhwIC0tYmFzaWMtcmVnZXhwIC0tZml4ZWQtc3RyaW5ncworCQkJLS1wZXJsLXJlZ2V4cAorCQkJLS1maWxlcy13aXRoLW1hdGNoZXMgLS1uYW1lLW9ubHkKKwkJCS0tZmlsZXMtd2l0aG91dC1tYXRjaAorCQkJLS1tYXgtZGVwdGgKKwkJCS0tY291bnQKKwkJCS0tYW5kIC0tb3IgLS1ub3QgLS1hbGwtbWF0Y2gKKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCisJY2FzZSAiJGN3b3JkLCRwcmV2IiBpbgorCTIsKnwqLC0qKQorCQlpZiB0ZXN0IC1yIHRhZ3M7IHRoZW4KKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9tYXRjaF9jdGFnICIkY3VyIiB0YWdzKSIKKwkJCXJldHVybgorCQlmaQorCQk7OworCWVzYWMKKworCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKK30KKworX2dpdF9oZWxwICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiLS1hbGwgLS1pbmZvIC0tbWFuIC0td2ViIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcHV0ZV9hbGxfY29tbWFuZHMKKwlfX2dpdGNvbXAgIiRfX2dpdF9hbGxfY29tbWFuZHMgJChfX2dpdF9hbGlhc2VzKQorCQlhdHRyaWJ1dGVzIGNsaSBjb3JlLXR1dG9yaWFsIGN2cy1taWdyYXRpb24KKwkJZGlmZmNvcmUgZ2l0ayBnbG9zc2FyeSBob29rcyBpZ25vcmUgbW9kdWxlcworCQluYW1lc3BhY2VzIHJlcG9zaXRvcnktbGF5b3V0IHR1dG9yaWFsIHR1dG9yaWFsLTIKKwkJd29ya2Zsb3dzCisJCSIKK30KKworX2dpdF9pbml0ICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLXNoYXJlZD0qKQorCQlfX2dpdGNvbXAgIgorCQkJZmFsc2UgdHJ1ZSB1bWFzayBncm91cCBhbGwgd29ybGQgZXZlcnlib2R5CisJCQkiICIiICIke2N1ciMjLS1zaGFyZWQ9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIi0tcXVpZXQgLS1iYXJlIC0tdGVtcGxhdGU9IC0tc2hhcmVkIC0tc2hhcmVkPSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCUNPTVBSRVBMWT0oKQorfQorCitfZ2l0X2xzX2ZpbGVzICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICItLWNhY2hlZCAtLWRlbGV0ZWQgLS1tb2RpZmllZCAtLW90aGVycyAtLWlnbm9yZWQKKwkJCS0tc3RhZ2UgLS1kaXJlY3RvcnkgLS1uby1lbXB0eS1kaXJlY3RvcnkgLS11bm1lcmdlZAorCQkJLS1raWxsZWQgLS1leGNsdWRlPSAtLWV4Y2x1ZGUtZnJvbT0KKwkJCS0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PSAtLWV4Y2x1ZGUtc3RhbmRhcmQKKwkJCS0tZXJyb3ItdW5tYXRjaCAtLXdpdGgtdHJlZT0gLS1mdWxsLW5hbWUKKwkJCS0tYWJicmV2IC0taWdub3JlZCAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeQorCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJQ09NUFJFUExZPSgpCit9CisKK19naXRfbHNfcmVtb3RlICgpCit7CisJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIgorfQorCitfZ2l0X2xzX3RyZWUgKCkKK3sKKwlfX2dpdF9jb21wbGV0ZV9maWxlCit9CisKKyMgT3B0aW9ucyB0aGF0IGdvIHdlbGwgZm9yIGxvZywgc2hvcnRsb2cgYW5kIGdpdGsKK19fZ2l0X2xvZ19jb21tb25fb3B0aW9ucz0iCisJLS1ub3QgLS1hbGwKKwktLWJyYW5jaGVzIC0tdGFncyAtLXJlbW90ZXMKKwktLWZpcnN0LXBhcmVudCAtLW1lcmdlcyAtLW5vLW1lcmdlcworCS0tbWF4LWNvdW50PQorCS0tbWF4LWFnZT0gLS1zaW5jZT0gLS1hZnRlcj0KKwktLW1pbi1hZ2U9IC0tdW50aWw9IC0tYmVmb3JlPQorCS0tbWluLXBhcmVudHM9IC0tbWF4LXBhcmVudHM9CisJLS1uby1taW4tcGFyZW50cyAtLW5vLW1heC1wYXJlbnRzCisiCisjIE9wdGlvbnMgdGhhdCBnbyB3ZWxsIGZvciBsb2cgYW5kIGdpdGsgKG5vdCBzaG9ydGxvZykKK19fZ2l0X2xvZ19naXRrX29wdGlvbnM9IgorCS0tZGVuc2UgLS1zcGFyc2UgLS1mdWxsLWhpc3RvcnkKKwktLXNpbXBsaWZ5LW1lcmdlcyAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24KKwktLWxlZnQtcmlnaHQgLS1ub3RlcyAtLW5vLW5vdGVzCisiCisjIE9wdGlvbnMgdGhhdCBnbyB3ZWxsIGZvciBsb2cgYW5kIHNob3J0bG9nIChub3QgZ2l0aykKK19fZ2l0X2xvZ19zaG9ydGxvZ19vcHRpb25zPSIKKwktLWF1dGhvcj0gLS1jb21taXR0ZXI9IC0tZ3JlcD0KKwktLWFsbC1tYXRjaAorIgorCitfX2dpdF9sb2dfcHJldHR5X2Zvcm1hdHM9Im9uZWxpbmUgc2hvcnQgbWVkaXVtIGZ1bGwgZnVsbGVyIGVtYWlsIHJhdyBmb3JtYXQ6IgorX19naXRfbG9nX2RhdGVfZm9ybWF0cz0icmVsYXRpdmUgaXNvODYwMSByZmMyODIyIHNob3J0IGxvY2FsIGRlZmF1bHQgcmF3IgorCitfZ2l0X2xvZyAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJbG9jYWwgZz0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbCkiCisJbG9jYWwgbWVyZ2U9IiIKKwlpZiBbIC1mICIkZy9NRVJHRV9IRUFEIiBdOyB0aGVuCisJCW1lcmdlPSItLW1lcmdlIgorCWZpCisJY2FzZSAiJGN1ciIgaW4KKwktLXByZXR0eT0qfC0tZm9ybWF0PSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2xvZ19wcmV0dHlfZm9ybWF0cyAkKF9fZ2l0X3ByZXR0eV9hbGlhc2VzKQorCQkJIiAiIiAiJHtjdXIjKj19IgorCQlyZXR1cm4KKwkJOzsKKwktLWRhdGU9KikKKwkJX19naXRjb21wICIkX19naXRfbG9nX2RhdGVfZm9ybWF0cyIgIiIgIiR7Y3VyIyMtLWRhdGU9fSIKKwkJcmV0dXJuCisJCTs7CisJLS1kZWNvcmF0ZT0qKQorCQlfX2dpdGNvbXAgImxvbmcgc2hvcnQiICIiICIke2N1ciMjLS1kZWNvcmF0ZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQkkX19naXRfbG9nX2NvbW1vbl9vcHRpb25zCisJCQkkX19naXRfbG9nX3Nob3J0bG9nX29wdGlvbnMKKwkJCSRfX2dpdF9sb2dfZ2l0a19vcHRpb25zCisJCQktLXJvb3QgLS10b3BvLW9yZGVyIC0tZGF0ZS1vcmRlciAtLXJldmVyc2UKKwkJCS0tZm9sbG93IC0tZnVsbC1kaWZmCisJCQktLWFiYnJldi1jb21taXQgLS1hYmJyZXY9CisJCQktLXJlbGF0aXZlLWRhdGUgLS1kYXRlPQorCQkJLS1wcmV0dHk9IC0tZm9ybWF0PSAtLW9uZWxpbmUKKwkJCS0tY2hlcnJ5LXBpY2sKKwkJCS0tZ3JhcGgKKwkJCS0tZGVjb3JhdGUgLS1kZWNvcmF0ZT0KKwkJCS0td2Fsay1yZWZsb2dzCisJCQktLXBhcmVudHMgLS1jaGlsZHJlbgorCQkJJG1lcmdlCisJCQkkX19naXRfZGlmZl9jb21tb25fb3B0aW9ucworCQkJLS1waWNrYXhlLWFsbCAtLXBpY2theGUtcmVnZXgKKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKK30KKworX19naXRfbWVyZ2Vfb3B0aW9ucz0iCisJLS1uby1jb21taXQgLS1uby1zdGF0IC0tbG9nIC0tbm8tbG9nIC0tc3F1YXNoIC0tc3RyYXRlZ3kKKwktLWNvbW1pdCAtLXN0YXQgLS1uby1zcXVhc2ggLS1mZiAtLW5vLWZmIC0tZmYtb25seSAtLWVkaXQgLS1uby1lZGl0CisiCisKK19naXRfbWVyZ2UgKCkKK3sKKwlfX2dpdF9jb21wbGV0ZV9zdHJhdGVneSAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZV9vcHRpb25zIgorCQlyZXR1cm4KKwllc2FjCisJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorfQorCitfZ2l0X21lcmdldG9vbCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS10b29sPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X21lcmdldG9vbHNfY29tbW9uIHRvcnRvaXNlbWVyZ2UiICIiICIke2N1ciMjLS10b29sPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wICItLXRvb2w9IgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJQ09NUFJFUExZPSgpCit9CisKK19naXRfbWVyZ2VfYmFzZSAoKQoreworCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKK30KKworX2dpdF9tdiAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIi0tZHJ5LXJ1biIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCUNPTVBSRVBMWT0oKQorfQorCitfZ2l0X25hbWVfcmV2ICgpCit7CisJX19naXRjb21wICItLXRhZ3MgLS1hbGwgLS1zdGRpbiIKK30KKworX2dpdF9ub3RlcyAoKQoreworCWxvY2FsIHN1YmNvbW1hbmRzPSdhZGQgYXBwZW5kIGNvcHkgZWRpdCBsaXN0IHBydW5lIHJlbW92ZSBzaG93JworCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKworCWNhc2UgIiRzdWJjb21tYW5kLCRjdXIiIGluCisJLC0tKikKKwkJX19naXRjb21wICctLXJlZicKKwkJOzsKKwksKikKKwkJY2FzZSAiJHByZXYiIGluCisJCS0tcmVmKQorCQkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorCQkJOzsKKwkJKikKKwkJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIC0tcmVmIgorCQkJOzsKKwkJZXNhYworCQk7OworCWFkZCwtLXJldXNlLW1lc3NhZ2U9KnxhcHBlbmQsLS1yZXVzZS1tZXNzYWdlPSp8XAorCWFkZCwtLXJlZWRpdC1tZXNzYWdlPSp8YXBwZW5kLC0tcmVlZGl0LW1lc3NhZ2U9KikKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIiAiIiAiJHtjdXIjKj19IgorCQk7OworCWFkZCwtLSp8YXBwZW5kLC0tKikKKwkJX19naXRjb21wICctLWZpbGU9IC0tbWVzc2FnZT0gLS1yZWVkaXQtbWVzc2FnZT0KKwkJCQktLXJldXNlLW1lc3NhZ2U9JworCQk7OworCWNvcHksLS0qKQorCQlfX2dpdGNvbXAgJy0tc3RkaW4nCisJCTs7CisJcHJ1bmUsLS0qKQorCQlfX2dpdGNvbXAgJy0tZHJ5LXJ1biAtLXZlcmJvc2UnCisJCTs7CisJcHJ1bmUsKikKKwkJOzsKKwkqKQorCQljYXNlICIkcHJldiIgaW4KKwkJLW18LUYpCisJCQk7OworCQkqKQorCQkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKK30KKworX2dpdF9wdWxsICgpCit7CisJX19naXRfY29tcGxldGVfc3RyYXRlZ3kgJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICIKKwkJCS0tcmViYXNlIC0tbm8tcmViYXNlCisJCQkkX19naXRfbWVyZ2Vfb3B0aW9ucworCQkJJF9fZ2l0X2ZldGNoX29wdGlvbnMKKwkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMKK30KKworX2dpdF9wdXNoICgpCit7CisJY2FzZSAiJHByZXYiIGluCisJLS1yZXBvKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiCisJCXJldHVybgorCWVzYWMKKwljYXNlICIkY3VyIiBpbgorCS0tcmVwbz0qKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiICIiICIke2N1ciMjLS1yZXBvPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wICIKKwkJCS0tYWxsIC0tbWlycm9yIC0tdGFncyAtLWRyeS1ydW4gLS1mb3JjZSAtLXZlcmJvc2UKKwkJCS0tcmVjZWl2ZS1wYWNrPSAtLXJlcG89IC0tc2V0LXVwc3RyZWFtCisJCSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3JlbW90ZV9vcl9yZWZzcGVjCit9CisKK19naXRfcmViYXNlICgpCit7CisJbG9jYWwgZGlyPSIkKF9fZ2l0ZGlyKSIKKwlpZiBbIC1kICIkZGlyIi9yZWJhc2UtYXBwbHkgXSB8fCBbIC1kICIkZGlyIi9yZWJhc2UtbWVyZ2UgXTsgdGhlbgorCQlfX2dpdGNvbXAgIi0tY29udGludWUgLS1za2lwIC0tYWJvcnQiCisJCXJldHVybgorCWZpCisJX19naXRfY29tcGxldGVfc3RyYXRlZ3kgJiYgcmV0dXJuCisJY2FzZSAiJGN1ciIgaW4KKwktLXdoaXRlc3BhY2U9KikKKwkJX19naXRjb21wICIkX19naXRfd2hpdGVzcGFjZWxpc3QiICIiICIke2N1ciMjLS13aGl0ZXNwYWNlPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wICIKKwkJCS0tb250byAtLW1lcmdlIC0tc3RyYXRlZ3kgLS1pbnRlcmFjdGl2ZQorCQkJLS1wcmVzZXJ2ZS1tZXJnZXMgLS1zdGF0IC0tbm8tc3RhdAorCQkJLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSAtLWlnbm9yZS1kYXRlCisJCQktLWlnbm9yZS13aGl0ZXNwYWNlIC0td2hpdGVzcGFjZT0KKwkJCS0tYXV0b3NxdWFzaAorCQkJIgorCisJCXJldHVybgorCWVzYWMKKwlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiCit9CisKK19naXRfcmVmbG9nICgpCit7CisJbG9jYWwgc3ViY29tbWFuZHM9InNob3cgZGVsZXRlIGV4cGlyZSIKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiCisKKwlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKKwllbHNlCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKKwlmaQorfQorCitfX2dpdF9zZW5kX2VtYWlsX2NvbmZpcm1fb3B0aW9ucz0iYWx3YXlzIG5ldmVyIGF1dG8gY2MgY29tcG9zZSIKK19fZ2l0X3NlbmRfZW1haWxfc3VwcHJlc3NjY19vcHRpb25zPSJhdXRob3Igc2VsZiBjYyBib2R5Y2Mgc29iIGNjY21kIGJvZHkgYWxsIgorCitfZ2l0X3NlbmRfZW1haWwgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tY29uZmlybT0qKQorCQlfX2dpdGNvbXAgIgorCQkJJF9fZ2l0X3NlbmRfZW1haWxfY29uZmlybV9vcHRpb25zCisJCQkiICIiICIke2N1ciMjLS1jb25maXJtPX0iCisJCXJldHVybgorCQk7OworCS0tc3VwcHJlc3MtY2M9KikKKwkJX19naXRjb21wICIKKwkJCSRfX2dpdF9zZW5kX2VtYWlsX3N1cHByZXNzY2Nfb3B0aW9ucworCQkJIiAiIiAiJHtjdXIjIy0tc3VwcHJlc3MtY2M9fSIKKworCQlyZXR1cm4KKwkJOzsKKwktLXNtdHAtZW5jcnlwdGlvbj0qKQorCQlfX2dpdGNvbXAgInNzbCB0bHMiICIiICIke2N1ciMjLS1zbXRwLWVuY3J5cHRpb249fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIi0tYW5ub3RhdGUgLS1iY2MgLS1jYyAtLWNjLWNtZCAtLWNoYWluLXJlcGx5LXRvCisJCQktLWNvbXBvc2UgLS1jb25maXJtPSAtLWRyeS1ydW4gLS1lbnZlbG9wZS1zZW5kZXIKKwkJCS0tZnJvbSAtLWlkZW50aXR5CisJCQktLWluLXJlcGx5LXRvIC0tbm8tY2hhaW4tcmVwbHktdG8gLS1uby1zaWduZWQtb2ZmLWJ5LWNjCisJCQktLW5vLXN1cHByZXNzLWZyb20gLS1uby10aHJlYWQgLS1xdWlldAorCQkJLS1zaWduZWQtb2ZmLWJ5LWNjIC0tc210cC1wYXNzIC0tc210cC1zZXJ2ZXIKKwkJCS0tc210cC1zZXJ2ZXItcG9ydCAtLXNtdHAtZW5jcnlwdGlvbj0gLS1zbXRwLXVzZXIKKwkJCS0tc3ViamVjdCAtLXN1cHByZXNzLWNjPSAtLXN1cHByZXNzLWZyb20gLS10aHJlYWQgLS10bworCQkJLS12YWxpZGF0ZSAtLW5vLXZhbGlkYXRlIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJQ09NUFJFUExZPSgpCit9CisKK19naXRfc3RhZ2UgKCkKK3sKKwlfZ2l0X2FkZAorfQorCitfX2dpdF9jb25maWdfZ2V0X3NldF92YXJpYWJsZXMgKCkKK3sKKwlsb2NhbCBwcmV2d29yZCB3b3JkIGNvbmZpZ19maWxlPSBjPSRjd29yZAorCXdoaWxlIFsgJGMgLWd0IDEgXTsgZG8KKwkJd29yZD0iJHt3b3Jkc1tjXX0iCisJCWNhc2UgIiR3b3JkIiBpbgorCQktLWdsb2JhbHwtLXN5c3RlbXwtLWZpbGU9KikKKwkJCWNvbmZpZ19maWxlPSIkd29yZCIKKwkJCWJyZWFrCisJCQk7OworCQktZnwtLWZpbGUpCisJCQljb25maWdfZmlsZT0iJHdvcmQgJHByZXZ3b3JkIgorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJcHJldndvcmQ9JHdvcmQKKwkJYz0kKCgtLWMpKQorCWRvbmUKKworCWdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBjb25maWcgJGNvbmZpZ19maWxlIC0tbGlzdCAyPi9kZXYvbnVsbCB8CisJd2hpbGUgcmVhZCAtciBsaW5lCisJZG8KKwkJY2FzZSAiJGxpbmUiIGluCisJCSouKj0qKQorCQkJZWNobyAiJHtsaW5lLz0qL30iCisJCQk7OworCQllc2FjCisJZG9uZQorfQorCitfZ2l0X2NvbmZpZyAoKQoreworCWNhc2UgIiRwcmV2IiBpbgorCWJyYW5jaC4qLnJlbW90ZSkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIgorCQlyZXR1cm4KKwkJOzsKKwlicmFuY2guKi5tZXJnZSkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorCQlyZXR1cm4KKwkJOzsKKwlyZW1vdGUuKi5mZXRjaCkKKwkJbG9jYWwgcmVtb3RlPSIke3ByZXYjcmVtb3RlLn0iCisJCXJlbW90ZT0iJHtyZW1vdGUlLmZldGNofSIKKwkJaWYgWyAteiAiJGN1ciIgXTsgdGhlbgorCQkJQ09NUFJFUExZPSgicmVmcy9oZWFkcy8iKQorCQkJcmV0dXJuCisJCWZpCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzX3JlbW90ZXMgIiRyZW1vdGUiKSIKKwkJcmV0dXJuCisJCTs7CisJcmVtb3RlLioucHVzaCkKKwkJbG9jYWwgcmVtb3RlPSIke3ByZXYjcmVtb3RlLn0iCisJCXJlbW90ZT0iJHtyZW1vdGUlLnB1c2h9IgorCQlfX2dpdGNvbXBfbmwgIiQoZ2l0IC0tZ2l0LWRpcj0iJChfX2dpdGRpcikiIFwKKwkJCWZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShyZWZuYW1lKTolKHJlZm5hbWUpJyBcCisJCQlyZWZzL2hlYWRzKSIKKwkJcmV0dXJuCisJCTs7CisJcHVsbC50d29oZWFkfHB1bGwub2N0b3B1cykKKwkJX19naXRfY29tcHV0ZV9tZXJnZV9zdHJhdGVnaWVzCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMiCisJCXJldHVybgorCQk7OworCWNvbG9yLmJyYW5jaHxjb2xvci5kaWZmfGNvbG9yLmludGVyYWN0aXZlfFwKKwljb2xvci5zaG93YnJhbmNofGNvbG9yLnN0YXR1c3xjb2xvci51aSkKKwkJX19naXRjb21wICJhbHdheXMgbmV2ZXIgYXV0byIKKwkJcmV0dXJuCisJCTs7CisJY29sb3IucGFnZXIpCisJCV9fZ2l0Y29tcCAiZmFsc2UgdHJ1ZSIKKwkJcmV0dXJuCisJCTs7CisJY29sb3IuKi4qKQorCQlfX2dpdGNvbXAgIgorCQkJbm9ybWFsIGJsYWNrIHJlZCBncmVlbiB5ZWxsb3cgYmx1ZSBtYWdlbnRhIGN5YW4gd2hpdGUKKwkJCWJvbGQgZGltIHVsIGJsaW5rIHJldmVyc2UKKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJaGVscC5mb3JtYXQpCisJCV9fZ2l0Y29tcCAibWFuIGluZm8gd2ViIGh0bWwiCisJCXJldHVybgorCQk7OworCWxvZy5kYXRlKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9sb2dfZGF0ZV9mb3JtYXRzIgorCQlyZXR1cm4KKwkJOzsKKwlzZW5kZW1haWwuYWxpYXNlc2ZpbGV0eXBlKQorCQlfX2dpdGNvbXAgIm11dHQgbWFpbHJjIHBpbmUgZWxtIGdudXMiCisJCXJldHVybgorCQk7OworCXNlbmRlbWFpbC5jb25maXJtKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9zZW5kX2VtYWlsX2NvbmZpcm1fb3B0aW9ucyIKKwkJcmV0dXJuCisJCTs7CisJc2VuZGVtYWlsLnN1cHByZXNzY2MpCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3NlbmRfZW1haWxfc3VwcHJlc3NjY19vcHRpb25zIgorCQlyZXR1cm4KKwkJOzsKKwktLWdldHwtLWdldC1hbGx8LS11bnNldHwtLXVuc2V0LWFsbCkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X2NvbmZpZ19nZXRfc2V0X3ZhcmlhYmxlcykiCisJCXJldHVybgorCQk7OworCSouKikKKwkJQ09NUFJFUExZPSgpCisJCXJldHVybgorCQk7OworCWVzYWMKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICIKKwkJCS0tZ2xvYmFsIC0tc3lzdGVtIC0tZmlsZT0KKwkJCS0tbGlzdCAtLXJlcGxhY2UtYWxsCisJCQktLWdldCAtLWdldC1hbGwgLS1nZXQtcmVnZXhwCisJCQktLWFkZCAtLXVuc2V0IC0tdW5zZXQtYWxsCisJCQktLXJlbW92ZS1zZWN0aW9uIC0tcmVuYW1lLXNlY3Rpb24KKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJYnJhbmNoLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIiBjdXJfPSIke2N1ciMjKi59IgorCQlfX2dpdGNvbXAgInJlbW90ZSBtZXJnZSBtZXJnZW9wdGlvbnMgcmViYXNlIiAiJHBmeCIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlicmFuY2guKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIiBjdXJfPSIke2N1ciMqLn0iCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9oZWFkcykiICIkcGZ4IiAiJGN1cl8iICIuIgorCQlyZXR1cm4KKwkJOzsKKwlndWl0b29sLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIiBjdXJfPSIke2N1ciMjKi59IgorCQlfX2dpdGNvbXAgIgorCQkJYXJncHJvbXB0IGNtZCBjb25maXJtIG5lZWRzZmlsZSBub2NvbnNvbGUgbm9yZXNjYW4KKwkJCXByb21wdCByZXZwcm9tcHQgcmV2dW5tZXJnZWQgdGl0bGUKKwkJCSIgIiRwZngiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJZGlmZnRvb2wuKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyJS4qfS4iIGN1cl89IiR7Y3VyIyMqLn0iCisJCV9fZ2l0Y29tcCAiY21kIHBhdGgiICIkcGZ4IiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCW1hbi4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIgY3VyXz0iJHtjdXIjIyoufSIKKwkJX19naXRjb21wICJjbWQgcGF0aCIgIiRwZngiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJbWVyZ2V0b29sLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIiBjdXJfPSIke2N1ciMjKi59IgorCQlfX2dpdGNvbXAgImNtZCBwYXRoIHRydXN0RXhpdENvZGUiICIkcGZ4IiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCXBhZ2VyLiopCisJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIgY3VyXz0iJHtjdXIjKi59IgorCQlfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcworCQlfX2dpdGNvbXBfbmwgIiRfX2dpdF9hbGxfY29tbWFuZHMiICIkcGZ4IiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCXJlbW90ZS4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIgY3VyXz0iJHtjdXIjIyoufSIKKwkJX19naXRjb21wICIKKwkJCXVybCBwcm94eSBmZXRjaCBwdXNoIG1pcnJvciBza2lwRGVmYXVsdFVwZGF0ZQorCQkJcmVjZWl2ZXBhY2sgdXBsb2FkcGFjayB0YWdvcHQgcHVzaHVybAorCQkJIiAiJHBmeCIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlyZW1vdGUuKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIiBjdXJfPSIke2N1ciMqLn0iCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZW1vdGVzKSIgIiRwZngiICIkY3VyXyIgIi4iCisJCXJldHVybgorCQk7OworCXVybC4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIgY3VyXz0iJHtjdXIjIyoufSIKKwkJX19naXRjb21wICJpbnN0ZWFkT2YgcHVzaEluc3RlYWRPZiIgIiRwZngiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0Y29tcCAiCisJCWFkZC5pZ25vcmVFcnJvcnMKKwkJYWR2aWNlLmNvbW1pdEJlZm9yZU1lcmdlCisJCWFkdmljZS5kZXRhY2hlZEhlYWQKKwkJYWR2aWNlLmltcGxpY2l0SWRlbnRpdHkKKwkJYWR2aWNlLnB1c2hOb25GYXN0Rm9yd2FyZAorCQlhZHZpY2UucmVzb2x2ZUNvbmZsaWN0CisJCWFkdmljZS5zdGF0dXNIaW50cworCQlhbGlhcy4KKwkJYW0ua2VlcGNyCisJCWFwcGx5Lmlnbm9yZXdoaXRlc3BhY2UKKwkJYXBwbHkud2hpdGVzcGFjZQorCQlicmFuY2guYXV0b3NldHVwbWVyZ2UKKwkJYnJhbmNoLmF1dG9zZXR1cHJlYmFzZQorCQlicm93c2VyLgorCQljbGVhbi5yZXF1aXJlRm9yY2UKKwkJY29sb3IuYnJhbmNoCisJCWNvbG9yLmJyYW5jaC5jdXJyZW50CisJCWNvbG9yLmJyYW5jaC5sb2NhbAorCQljb2xvci5icmFuY2gucGxhaW4KKwkJY29sb3IuYnJhbmNoLnJlbW90ZQorCQljb2xvci5kZWNvcmF0ZS5IRUFECisJCWNvbG9yLmRlY29yYXRlLmJyYW5jaAorCQljb2xvci5kZWNvcmF0ZS5yZW1vdGVCcmFuY2gKKwkJY29sb3IuZGVjb3JhdGUuc3Rhc2gKKwkJY29sb3IuZGVjb3JhdGUudGFnCisJCWNvbG9yLmRpZmYKKwkJY29sb3IuZGlmZi5jb21taXQKKwkJY29sb3IuZGlmZi5mcmFnCisJCWNvbG9yLmRpZmYuZnVuYworCQljb2xvci5kaWZmLm1ldGEKKwkJY29sb3IuZGlmZi5uZXcKKwkJY29sb3IuZGlmZi5vbGQKKwkJY29sb3IuZGlmZi5wbGFpbgorCQljb2xvci5kaWZmLndoaXRlc3BhY2UKKwkJY29sb3IuZ3JlcAorCQljb2xvci5ncmVwLmNvbnRleHQKKwkJY29sb3IuZ3JlcC5maWxlbmFtZQorCQljb2xvci5ncmVwLmZ1bmN0aW9uCisJCWNvbG9yLmdyZXAubGluZW51bWJlcgorCQljb2xvci5ncmVwLm1hdGNoCisJCWNvbG9yLmdyZXAuc2VsZWN0ZWQKKwkJY29sb3IuZ3JlcC5zZXBhcmF0b3IKKwkJY29sb3IuaW50ZXJhY3RpdmUKKwkJY29sb3IuaW50ZXJhY3RpdmUuZXJyb3IKKwkJY29sb3IuaW50ZXJhY3RpdmUuaGVhZGVyCisJCWNvbG9yLmludGVyYWN0aXZlLmhlbHAKKwkJY29sb3IuaW50ZXJhY3RpdmUucHJvbXB0CisJCWNvbG9yLnBhZ2VyCisJCWNvbG9yLnNob3dicmFuY2gKKwkJY29sb3Iuc3RhdHVzCisJCWNvbG9yLnN0YXR1cy5hZGRlZAorCQljb2xvci5zdGF0dXMuY2hhbmdlZAorCQljb2xvci5zdGF0dXMuaGVhZGVyCisJCWNvbG9yLnN0YXR1cy5ub2JyYW5jaAorCQljb2xvci5zdGF0dXMudW50cmFja2VkCisJCWNvbG9yLnN0YXR1cy51cGRhdGVkCisJCWNvbG9yLnVpCisJCWNvbW1pdC5zdGF0dXMKKwkJY29tbWl0LnRlbXBsYXRlCisJCWNvcmUuYWJicmV2CisJCWNvcmUuYXNrcGFzcworCQljb3JlLmF0dHJpYnV0ZXNmaWxlCisJCWNvcmUuYXV0b2NybGYKKwkJY29yZS5iYXJlCisJCWNvcmUuYmlnRmlsZVRocmVzaG9sZAorCQljb3JlLmNvbXByZXNzaW9uCisJCWNvcmUuY3JlYXRlT2JqZWN0CisJCWNvcmUuZGVsdGFCYXNlQ2FjaGVMaW1pdAorCQljb3JlLmVkaXRvcgorCQljb3JlLmVvbAorCQljb3JlLmV4Y2x1ZGVzZmlsZQorCQljb3JlLmZpbGVNb2RlCisJCWNvcmUuZnN5bmNvYmplY3RmaWxlcworCQljb3JlLmdpdFByb3h5CisJCWNvcmUuaWdub3JlQ3lnd2luRlNUcmlja3MKKwkJY29yZS5pZ25vcmVTdGF0CisJCWNvcmUuaWdub3JlY2FzZQorCQljb3JlLmxvZ0FsbFJlZlVwZGF0ZXMKKwkJY29yZS5sb29zZWNvbXByZXNzaW9uCisJCWNvcmUubm90ZXNSZWYKKwkJY29yZS5wYWNrZWRHaXRMaW1pdAorCQljb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUKKwkJY29yZS5wYWdlcgorCQljb3JlLnByZWZlclN5bWxpbmtSZWZzCisJCWNvcmUucHJlbG9hZGluZGV4CisJCWNvcmUucXVvdGVwYXRoCisJCWNvcmUucmVwb3NpdG9yeUZvcm1hdFZlcnNpb24KKwkJY29yZS5zYWZlY3JsZgorCQljb3JlLnNoYXJlZFJlcG9zaXRvcnkKKwkJY29yZS5zcGFyc2VDaGVja291dAorCQljb3JlLnN5bWxpbmtzCisJCWNvcmUudHJ1c3RjdGltZQorCQljb3JlLndhcm5BbWJpZ3VvdXNSZWZzCisJCWNvcmUud2hpdGVzcGFjZQorCQljb3JlLndvcmt0cmVlCisJCWRpZmYuYXV0b3JlZnJlc2hpbmRleAorCQlkaWZmLnN0YXRHcmFwaFdpZHRoCisJCWRpZmYuZXh0ZXJuYWwKKwkJZGlmZi5pZ25vcmVTdWJtb2R1bGVzCisJCWRpZmYubW5lbW9uaWNwcmVmaXgKKwkJZGlmZi5ub3ByZWZpeAorCQlkaWZmLnJlbmFtZUxpbWl0CisJCWRpZmYucmVuYW1lcworCQlkaWZmLnN1cHByZXNzQmxhbmtFbXB0eQorCQlkaWZmLnRvb2wKKwkJZGlmZi53b3JkUmVnZXgKKwkJZGlmZnRvb2wuCisJCWRpZmZ0b29sLnByb21wdAorCQlmZXRjaC5yZWN1cnNlU3VibW9kdWxlcworCQlmZXRjaC51bnBhY2tMaW1pdAorCQlmb3JtYXQuYXR0YWNoCisJCWZvcm1hdC5jYworCQlmb3JtYXQuaGVhZGVycworCQlmb3JtYXQubnVtYmVyZWQKKwkJZm9ybWF0LnByZXR0eQorCQlmb3JtYXQuc2lnbmF0dXJlCisJCWZvcm1hdC5zaWdub2ZmCisJCWZvcm1hdC5zdWJqZWN0cHJlZml4CisJCWZvcm1hdC5zdWZmaXgKKwkJZm9ybWF0LnRocmVhZAorCQlmb3JtYXQudG8KKwkJZ2MuCisJCWdjLmFnZ3Jlc3NpdmVXaW5kb3cKKwkJZ2MuYXV0bworCQlnYy5hdXRvcGFja2xpbWl0CisJCWdjLnBhY2tyZWZzCisJCWdjLnBydW5lZXhwaXJlCisJCWdjLnJlZmxvZ2V4cGlyZQorCQlnYy5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZQorCQlnYy5yZXJlcmVyZXNvbHZlZAorCQlnYy5yZXJlcmV1bnJlc29sdmVkCisJCWdpdGN2cy5hbGxiaW5hcnkKKwkJZ2l0Y3ZzLmNvbW1pdG1zZ2Fubm90YXRpb24KKwkJZ2l0Y3ZzLmRiVGFibGVOYW1lUHJlZml4CisJCWdpdGN2cy5kYmRyaXZlcgorCQlnaXRjdnMuZGJuYW1lCisJCWdpdGN2cy5kYnBhc3MKKwkJZ2l0Y3ZzLmRidXNlcgorCQlnaXRjdnMuZW5hYmxlZAorCQlnaXRjdnMubG9nZmlsZQorCQlnaXRjdnMudXNlY3JsZmF0dHIKKwkJZ3VpdG9vbC4KKwkJZ3VpLmJsYW1laGlzdG9yeWN0eAorCQlndWkuY29tbWl0bXNnd2lkdGgKKwkJZ3VpLmNvcHlibGFtZXRocmVzaG9sZAorCQlndWkuZGlmZmNvbnRleHQKKwkJZ3VpLmVuY29kaW5nCisJCWd1aS5mYXN0Y29weWJsYW1lCisJCWd1aS5tYXRjaHRyYWNraW5nYnJhbmNoCisJCWd1aS5uZXdicmFuY2h0ZW1wbGF0ZQorCQlndWkucHJ1bmVkdXJpbmdmZXRjaAorCQlndWkuc3BlbGxpbmdkaWN0aW9uYXJ5CisJCWd1aS50cnVzdG10aW1lCisJCWhlbHAuYXV0b2NvcnJlY3QKKwkJaGVscC5icm93c2VyCisJCWhlbHAuZm9ybWF0CisJCWh0dHAubG93U3BlZWRMaW1pdAorCQlodHRwLmxvd1NwZWVkVGltZQorCQlodHRwLm1heFJlcXVlc3RzCisJCWh0dHAubWluU2Vzc2lvbnMKKwkJaHR0cC5ub0VQU1YKKwkJaHR0cC5wb3N0QnVmZmVyCisJCWh0dHAucHJveHkKKwkJaHR0cC5zc2xDQUluZm8KKwkJaHR0cC5zc2xDQVBhdGgKKwkJaHR0cC5zc2xDZXJ0CisJCWh0dHAuc3NsQ2VydFBhc3N3b3JkUHJvdGVjdGVkCisJCWh0dHAuc3NsS2V5CisJCWh0dHAuc3NsVmVyaWZ5CisJCWh0dHAudXNlcmFnZW50CisJCWkxOG4uY29tbWl0RW5jb2RpbmcKKwkJaTE4bi5sb2dPdXRwdXRFbmNvZGluZworCQlpbWFwLmF1dGhNZXRob2QKKwkJaW1hcC5mb2xkZXIKKwkJaW1hcC5ob3N0CisJCWltYXAucGFzcworCQlpbWFwLnBvcnQKKwkJaW1hcC5wcmVmb3JtYXR0ZWRIVE1MCisJCWltYXAuc3NsdmVyaWZ5CisJCWltYXAudHVubmVsCisJCWltYXAudXNlcgorCQlpbml0LnRlbXBsYXRlZGlyCisJCWluc3Rhd2ViLmJyb3dzZXIKKwkJaW5zdGF3ZWIuaHR0cGQKKwkJaW5zdGF3ZWIubG9jYWwKKwkJaW5zdGF3ZWIubW9kdWxlcGF0aAorCQlpbnN0YXdlYi5wb3J0CisJCWludGVyYWN0aXZlLnNpbmdsZWtleQorCQlsb2cuZGF0ZQorCQlsb2cuZGVjb3JhdGUKKwkJbG9nLnNob3dyb290CisJCW1haWxtYXAuZmlsZQorCQltYW4uCisJCW1hbi52aWV3ZXIKKwkJbWVyZ2UuCisJCW1lcmdlLmNvbmZsaWN0c3R5bGUKKwkJbWVyZ2UubG9nCisJCW1lcmdlLnJlbmFtZUxpbWl0CisJCW1lcmdlLnJlbm9ybWFsaXplCisJCW1lcmdlLnN0YXQKKwkJbWVyZ2UudG9vbAorCQltZXJnZS52ZXJib3NpdHkKKwkJbWVyZ2V0b29sLgorCQltZXJnZXRvb2wua2VlcEJhY2t1cAorCQltZXJnZXRvb2wua2VlcFRlbXBvcmFyaWVzCisJCW1lcmdldG9vbC5wcm9tcHQKKwkJbm90ZXMuZGlzcGxheVJlZgorCQlub3Rlcy5yZXdyaXRlLgorCQlub3Rlcy5yZXdyaXRlLmFtZW5kCisJCW5vdGVzLnJld3JpdGUucmViYXNlCisJCW5vdGVzLnJld3JpdGVNb2RlCisJCW5vdGVzLnJld3JpdGVSZWYKKwkJcGFjay5jb21wcmVzc2lvbgorCQlwYWNrLmRlbHRhQ2FjaGVMaW1pdAorCQlwYWNrLmRlbHRhQ2FjaGVTaXplCisJCXBhY2suZGVwdGgKKwkJcGFjay5pbmRleFZlcnNpb24KKwkJcGFjay5wYWNrU2l6ZUxpbWl0CisJCXBhY2sudGhyZWFkcworCQlwYWNrLndpbmRvdworCQlwYWNrLndpbmRvd01lbW9yeQorCQlwYWdlci4KKwkJcHJldHR5LgorCQlwdWxsLm9jdG9wdXMKKwkJcHVsbC50d29oZWFkCisJCXB1c2guZGVmYXVsdAorCQlyZWJhc2UuYXV0b3NxdWFzaAorCQlyZWJhc2Uuc3RhdAorCQlyZWNlaXZlLmF1dG9nYworCQlyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoCisJCXJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQKKwkJcmVjZWl2ZS5kZW55RGVsZXRlcworCQlyZWNlaXZlLmRlbnlOb25GYXN0Rm9yd2FyZHMKKwkJcmVjZWl2ZS5mc2NrT2JqZWN0cworCQlyZWNlaXZlLnVucGFja0xpbWl0CisJCXJlY2VpdmUudXBkYXRlc2VydmVyaW5mbworCQlyZW1vdGVzLgorCQlyZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0CisJCXJlcmVyZS5hdXRvdXBkYXRlCisJCXJlcmVyZS5lbmFibGVkCisJCXNlbmRlbWFpbC4KKwkJc2VuZGVtYWlsLmFsaWFzZXNmaWxlCisJCXNlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlCisJCXNlbmRlbWFpbC5iY2MKKwkJc2VuZGVtYWlsLmNjCisJCXNlbmRlbWFpbC5jY2NtZAorCQlzZW5kZW1haWwuY2hhaW5yZXBseXRvCisJCXNlbmRlbWFpbC5jb25maXJtCisJCXNlbmRlbWFpbC5lbnZlbG9wZXNlbmRlcgorCQlzZW5kZW1haWwuZnJvbQorCQlzZW5kZW1haWwuaWRlbnRpdHkKKwkJc2VuZGVtYWlsLm11bHRpZWRpdAorCQlzZW5kZW1haWwuc2lnbmVkb2ZmYnljYworCQlzZW5kZW1haWwuc210cGRvbWFpbgorCQlzZW5kZW1haWwuc210cGVuY3J5cHRpb24KKwkJc2VuZGVtYWlsLnNtdHBwYXNzCisJCXNlbmRlbWFpbC5zbXRwc2VydmVyCisJCXNlbmRlbWFpbC5zbXRwc2VydmVyb3B0aW9uCisJCXNlbmRlbWFpbC5zbXRwc2VydmVycG9ydAorCQlzZW5kZW1haWwuc210cHVzZXIKKwkJc2VuZGVtYWlsLnN1cHByZXNzY2MKKwkJc2VuZGVtYWlsLnN1cHByZXNzZnJvbQorCQlzZW5kZW1haWwudGhyZWFkCisJCXNlbmRlbWFpbC50bworCQlzZW5kZW1haWwudmFsaWRhdGUKKwkJc2hvd2JyYW5jaC5kZWZhdWx0CisJCXN0YXR1cy5yZWxhdGl2ZVBhdGhzCisJCXN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMKKwkJc3RhdHVzLnN1Ym1vZHVsZXN1bW1hcnkKKwkJc3VibW9kdWxlLgorCQl0YXIudW1hc2sKKwkJdHJhbnNmZXIudW5wYWNrTGltaXQKKwkJdXJsLgorCQl1c2VyLmVtYWlsCisJCXVzZXIubmFtZQorCQl1c2VyLnNpZ25pbmdrZXkKKwkJd2ViLmJyb3dzZXIKKwkJYnJhbmNoLiByZW1vdGUuCisJIgorfQorCitfZ2l0X3JlbW90ZSAoKQoreworCWxvY2FsIHN1YmNvbW1hbmRzPSJhZGQgcmVuYW1lIHJlbW92ZSBzZXQtaGVhZCBzZXQtYnJhbmNoZXMgc2V0LXVybCBzaG93IHBydW5lIHVwZGF0ZSIKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiCisJaWYgWyAteiAiJHN1YmNvbW1hbmQiIF07IHRoZW4KKwkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCXJldHVybgorCWZpCisKKwljYXNlICIkc3ViY29tbWFuZCIgaW4KKwlyZW5hbWV8cmVtb3ZlfHNldC11cmx8c2hvd3xwcnVuZSkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIgorCQk7OworCXNldC1oZWFkfHNldC1icmFuY2hlcykKKwkJX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMKKwkJOzsKKwl1cGRhdGUpCisJCWxvY2FsIGkgYz0nJyBJRlM9JCdcbicKKwkJZm9yIGkgaW4gJChnaXQgLS1naXQtZGlyPSIkKF9fZ2l0ZGlyKSIgY29uZmlnIC0tZ2V0LXJlZ2V4cCAicmVtb3Rlc1wuLioiIDI+L2Rldi9udWxsKTsgZG8KKwkJCWk9IiR7aSNyZW1vdGVzLn0iCisJCQljPSIkYyAke2kvICovfSIKKwkJZG9uZQorCQlfX2dpdGNvbXAgIiRjIgorCQk7OworCSopCisJCUNPTVBSRVBMWT0oKQorCQk7OworCWVzYWMKK30KKworX2dpdF9yZXBsYWNlICgpCit7CisJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorfQorCitfZ2l0X3Jlc2V0ICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICItLW1lcmdlIC0tbWl4ZWQgLS1oYXJkIC0tc29mdCAtLXBhdGNoIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorfQorCitfZ2l0X3JldmVydCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIi0tZWRpdCAtLW1haW5saW5lIC0tbm8tZWRpdCAtLW5vLWNvbW1pdCAtLXNpZ25vZmYiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiCit9CisKK19naXRfcm0gKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIi0tY2FjaGVkIC0tZHJ5LXJ1biAtLWlnbm9yZS11bm1hdGNoIC0tcXVpZXQiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlDT01QUkVQTFk9KCkKK30KKworX2dpdF9zaG9ydGxvZyAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQkkX19naXRfbG9nX2NvbW1vbl9vcHRpb25zCisJCQkkX19naXRfbG9nX3Nob3J0bG9nX29wdGlvbnMKKwkJCS0tbnVtYmVyZWQgLS1zdW1tYXJ5CisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK19naXRfc2hvdyAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLXByZXR0eT0qfC0tZm9ybWF0PSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2xvZ19wcmV0dHlfZm9ybWF0cyAkKF9fZ2l0X3ByZXR0eV9hbGlhc2VzKQorCQkJIiAiIiAiJHtjdXIjKj19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiLS1wcmV0dHk9IC0tZm9ybWF0PSAtLWFiYnJldi1jb21taXQgLS1vbmVsaW5lCisJCQkkX19naXRfZGlmZl9jb21tb25fb3B0aW9ucworCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfZmlsZQorfQorCitfZ2l0X3Nob3dfYnJhbmNoICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWFsbCAtLXJlbW90ZXMgLS10b3BvLW9yZGVyIC0tY3VycmVudCAtLW1vcmU9CisJCQktLWxpc3QgLS1pbmRlcGVuZGVudCAtLW1lcmdlLWJhc2UgLS1uby1uYW1lCisJCQktLWNvbG9yIC0tbm8tY29sb3IKKwkJCS0tc2hhMS1uYW1lIC0tc3BhcnNlIC0tdG9waWNzIC0tcmVmbG9nCisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK19naXRfc3Rhc2ggKCkKK3sKKwlsb2NhbCBzYXZlX29wdHM9Jy0ta2VlcC1pbmRleCAtLW5vLWtlZXAtaW5kZXggLS1xdWlldCAtLXBhdGNoJworCWxvY2FsIHN1YmNvbW1hbmRzPSdzYXZlIGxpc3Qgc2hvdyBhcHBseSBjbGVhciBkcm9wIHBvcCBjcmVhdGUgYnJhbmNoJworCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKwlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQljYXNlICIkY3VyIiBpbgorCQktLSopCisJCQlfX2dpdGNvbXAgIiRzYXZlX29wdHMiCisJCQk7OworCQkqKQorCQkJaWYgWyAteiAiJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzYXZlX29wdHMiKSIgXTsgdGhlbgorCQkJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgorCQkJZWxzZQorCQkJCUNPTVBSRVBMWT0oKQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwllbHNlCisJCWNhc2UgIiRzdWJjb21tYW5kLCRjdXIiIGluCisJCXNhdmUsLS0qKQorCQkJX19naXRjb21wICIkc2F2ZV9vcHRzIgorCQkJOzsKKwkJYXBwbHksLS0qfHBvcCwtLSopCisJCQlfX2dpdGNvbXAgIi0taW5kZXggLS1xdWlldCIKKwkJCTs7CisJCXNob3csLS0qfGRyb3AsLS0qfGJyYW5jaCwtLSopCisJCQlDT01QUkVQTFk9KCkKKwkJCTs7CisJCXNob3csKnxhcHBseSwqfGRyb3AsKnxwb3AsKnxicmFuY2gsKikKKwkJCV9fZ2l0Y29tcF9ubCAiJChnaXQgLS1naXQtZGlyPSIkKF9fZ2l0ZGlyKSIgc3Rhc2ggbGlzdCBcCisJCQkJCXwgc2VkIC1uIC1lICdzLzouKi8vcCcpIgorCQkJOzsKKwkJKikKKwkJCUNPTVBSRVBMWT0oKQorCQkJOzsKKwkJZXNhYworCWZpCit9CisKK19naXRfc3VibW9kdWxlICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwlsb2NhbCBzdWJjb21tYW5kcz0iYWRkIHN0YXR1cyBpbml0IHVwZGF0ZSBzdW1tYXJ5IGZvcmVhY2ggc3luYyIKKwlpZiBbIC16ICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiIF07IHRoZW4KKwkJY2FzZSAiJGN1ciIgaW4KKwkJLS0qKQorCQkJX19naXRjb21wICItLXF1aWV0IC0tY2FjaGVkIgorCQkJOzsKKwkJKikKKwkJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgorCQkJOzsKKwkJZXNhYworCQlyZXR1cm4KKwlmaQorfQorCitfZ2l0X3N2biAoKQoreworCWxvY2FsIHN1YmNvbW1hbmRzPSIKKwkJaW5pdCBmZXRjaCBjbG9uZSByZWJhc2UgZGNvbW1pdCBsb2cgZmluZC1yZXYKKwkJc2V0LXRyZWUgY29tbWl0LWRpZmYgaW5mbyBjcmVhdGUtaWdub3JlIHByb3BnZXQKKwkJcHJvcGxpc3Qgc2hvdy1pZ25vcmUgc2hvdy1leHRlcm5hbHMgYnJhbmNoIHRhZyBibGFtZQorCQltaWdyYXRlIG1rZGlycyByZXNldCBnYworCQkiCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgorCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCisJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgorCWVsc2UKKwkJbG9jYWwgcmVtb3RlX29wdHM9Ii0tdXNlcm5hbWU9IC0tY29uZmlnLWRpcj0gLS1uby1hdXRoLWNhY2hlIgorCQlsb2NhbCBmY19vcHRzPSIKKwkJCS0tZm9sbG93LXBhcmVudCAtLWF1dGhvcnMtZmlsZT0gLS1yZXBhY2s9CisJCQktLW5vLW1ldGFkYXRhIC0tdXNlLXN2bS1wcm9wcyAtLXVzZS1zdm5zeW5jLXByb3BzCisJCQktLWxvZy13aW5kb3ctc2l6ZT0gLS1uby1jaGVja291dCAtLXF1aWV0CisJCQktLXJlcGFjay1mbGFncyAtLXVzZS1sb2ctYXV0aG9yIC0tbG9jYWx0aW1lCisJCQktLWlnbm9yZS1wYXRocz0gJHJlbW90ZV9vcHRzCisJCQkiCisJCWxvY2FsIGluaXRfb3B0cz0iCisJCQktLXRlbXBsYXRlPSAtLXNoYXJlZD0gLS10cnVuaz0gLS10YWdzPQorCQkJLS1icmFuY2hlcz0gLS1zdGRsYXlvdXQgLS1taW5pbWl6ZS11cmwKKwkJCS0tbm8tbWV0YWRhdGEgLS11c2Utc3ZtLXByb3BzIC0tdXNlLXN2bnN5bmMtcHJvcHMKKwkJCS0tcmV3cml0ZS1yb290PSAtLXByZWZpeD0gLS11c2UtbG9nLWF1dGhvcgorCQkJLS1hZGQtYXV0aG9yLWZyb20gJHJlbW90ZV9vcHRzCisJCQkiCisJCWxvY2FsIGNtdF9vcHRzPSIKKwkJCS0tZWRpdCAtLXJtZGlyIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tY29weS1zaW1pbGFyaXR5PQorCQkJIgorCisJCWNhc2UgIiRzdWJjb21tYW5kLCRjdXIiIGluCisJCWZldGNoLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1yZXZpc2lvbj0gLS1mZXRjaC1hbGwgJGZjX29wdHMiCisJCQk7OworCQljbG9uZSwtLSopCisJCQlfX2dpdGNvbXAgIi0tcmV2aXNpb249ICRmY19vcHRzICRpbml0X29wdHMiCisJCQk7OworCQlpbml0LC0tKikKKwkJCV9fZ2l0Y29tcCAiJGluaXRfb3B0cyIKKwkJCTs7CisJCWRjb21taXQsLS0qKQorCQkJX19naXRjb21wICIKKwkJCQktLW1lcmdlIC0tc3RyYXRlZ3k9IC0tdmVyYm9zZSAtLWRyeS1ydW4KKwkJCQktLWZldGNoLWFsbCAtLW5vLXJlYmFzZSAtLWNvbW1pdC11cmwKKwkJCQktLXJldmlzaW9uIC0taW50ZXJhY3RpdmUgJGNtdF9vcHRzICRmY19vcHRzCisJCQkJIgorCQkJOzsKKwkJc2V0LXRyZWUsLS0qKQorCQkJX19naXRjb21wICItLXN0ZGluICRjbXRfb3B0cyAkZmNfb3B0cyIKKwkJCTs7CisJCWNyZWF0ZS1pZ25vcmUsLS0qfHByb3BnZXQsLS0qfHByb3BsaXN0LC0tKnxzaG93LWlnbm9yZSwtLSp8XAorCQlzaG93LWV4dGVybmFscywtLSp8bWtkaXJzLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1yZXZpc2lvbj0iCisJCQk7OworCQlsb2csLS0qKQorCQkJX19naXRjb21wICIKKwkJCQktLWxpbWl0PSAtLXJldmlzaW9uPSAtLXZlcmJvc2UgLS1pbmNyZW1lbnRhbAorCQkJCS0tb25lbGluZSAtLXNob3ctY29tbWl0IC0tbm9uLXJlY3Vyc2l2ZQorCQkJCS0tYXV0aG9ycy1maWxlPSAtLWNvbG9yCisJCQkJIgorCQkJOzsKKwkJcmViYXNlLC0tKikKKwkJCV9fZ2l0Y29tcCAiCisJCQkJLS1tZXJnZSAtLXZlcmJvc2UgLS1zdHJhdGVneT0gLS1sb2NhbAorCQkJCS0tZmV0Y2gtYWxsIC0tZHJ5LXJ1biAkZmNfb3B0cworCQkJCSIKKwkJCTs7CisJCWNvbW1pdC1kaWZmLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1tZXNzYWdlPSAtLWZpbGU9IC0tcmV2aXNpb249ICRjbXRfb3B0cyIKKwkJCTs7CisJCWluZm8sLS0qKQorCQkJX19naXRjb21wICItLXVybCIKKwkJCTs7CisJCWJyYW5jaCwtLSopCisJCQlfX2dpdGNvbXAgIi0tZHJ5LXJ1biAtLW1lc3NhZ2UgLS10YWciCisJCQk7OworCQl0YWcsLS0qKQorCQkJX19naXRjb21wICItLWRyeS1ydW4gLS1tZXNzYWdlIgorCQkJOzsKKwkJYmxhbWUsLS0qKQorCQkJX19naXRjb21wICItLWdpdC1mb3JtYXQiCisJCQk7OworCQltaWdyYXRlLC0tKikKKwkJCV9fZ2l0Y29tcCAiCisJCQkJLS1jb25maWctZGlyPSAtLWlnbm9yZS1wYXRocz0gLS1taW5pbWl6ZQorCQkJCS0tbm8tYXV0aC1jYWNoZSAtLXVzZXJuYW1lPQorCQkJCSIKKwkJCTs7CisJCXJlc2V0LC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1yZXZpc2lvbj0gLS1wYXJlbnQiCisJCQk7OworCQkqKQorCQkJQ09NUFJFUExZPSgpCisJCQk7OworCQllc2FjCisJZmkKK30KKworX2dpdF90YWcgKCkKK3sKKwlsb2NhbCBpIGM9MSBmPTAKKwl3aGlsZSBbICRjIC1sdCAkY3dvcmQgXTsgZG8KKwkJaT0iJHt3b3Jkc1tjXX0iCisJCWNhc2UgIiRpIiBpbgorCQktZHwtdikKKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF90YWdzKSIKKwkJCXJldHVybgorCQkJOzsKKwkJLWYpCisJCQlmPTEKKwkJCTs7CisJCWVzYWMKKwkJKChjKyspKQorCWRvbmUKKworCWNhc2UgIiRwcmV2IiBpbgorCS1tfC1GKQorCQlDT01QUkVQTFk9KCkKKwkJOzsKKwktKnx0YWcpCisJCWlmIFsgJGYgPSAxIF07IHRoZW4KKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF90YWdzKSIKKwkJZWxzZQorCQkJQ09NUFJFUExZPSgpCisJCWZpCisJCTs7CisJKikKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorCQk7OworCWVzYWMKK30KKworX2dpdF93aGF0Y2hhbmdlZCAoKQoreworCV9naXRfbG9nCit9CisKK19fZ2l0X21haW4gKCkKK3sKKwlsb2NhbCBpIGM9MSBjb21tYW5kIF9fZ2l0X2RpcgorCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCWk9IiR7d29yZHNbY119IgorCQljYXNlICIkaSIgaW4KKwkJLS1naXQtZGlyPSopIF9fZ2l0X2Rpcj0iJHtpIy0tZ2l0LWRpcj19IiA7OworCQktLWJhcmUpICAgICAgX19naXRfZGlyPSIuIiA7OworCQktLWhlbHApIGNvbW1hbmQ9ImhlbHAiOyBicmVhayA7OworCQktYykgYz0kKCgrK2MpKSA7OworCQktKikgOzsKKwkJKikgY29tbWFuZD0iJGkiOyBicmVhayA7OworCQllc2FjCisJCSgoYysrKSkKKwlkb25lCisKKwlpZiBbIC16ICIkY29tbWFuZCIgXTsgdGhlbgorCQljYXNlICIkY3VyIiBpbgorCQktLSopICAgX19naXRjb21wICIKKwkJCS0tcGFnaW5hdGUKKwkJCS0tbm8tcGFnZXIKKwkJCS0tZ2l0LWRpcj0KKwkJCS0tYmFyZQorCQkJLS12ZXJzaW9uCisJCQktLWV4ZWMtcGF0aAorCQkJLS1leGVjLXBhdGg9CisJCQktLWh0bWwtcGF0aAorCQkJLS1pbmZvLXBhdGgKKwkJCS0td29yay10cmVlPQorCQkJLS1uYW1lc3BhY2U9CisJCQktLW5vLXJlcGxhY2Utb2JqZWN0cworCQkJLS1oZWxwCisJCQkiCisJCQk7OworCQkqKSAgICAgX19naXRfY29tcHV0ZV9wb3JjZWxhaW5fY29tbWFuZHMKKwkJICAgICAgIF9fZ2l0Y29tcCAiJF9fZ2l0X3BvcmNlbGFpbl9jb21tYW5kcyAkKF9fZ2l0X2FsaWFzZXMpIiA7OworCQllc2FjCisJCXJldHVybgorCWZpCisKKwlsb2NhbCBjb21wbGV0aW9uX2Z1bmM9Il9naXRfJHtjb21tYW5kLy8tL199IgorCWRlY2xhcmUgLWYgJGNvbXBsZXRpb25fZnVuYyA+L2Rldi9udWxsICYmICRjb21wbGV0aW9uX2Z1bmMgJiYgcmV0dXJuCisKKwlsb2NhbCBleHBhbnNpb249JChfX2dpdF9hbGlhc2VkX2NvbW1hbmQgIiRjb21tYW5kIikKKwlpZiBbIC1uICIkZXhwYW5zaW9uIiBdOyB0aGVuCisJCWNvbXBsZXRpb25fZnVuYz0iX2dpdF8ke2V4cGFuc2lvbi8vLS9ffSIKKwkJZGVjbGFyZSAtZiAkY29tcGxldGlvbl9mdW5jID4vZGV2L251bGwgJiYgJGNvbXBsZXRpb25fZnVuYworCWZpCit9CisKK19fZ2l0a19tYWluICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwlsb2NhbCBnPSIkKF9fZ2l0ZGlyKSIKKwlsb2NhbCBtZXJnZT0iIgorCWlmIFsgLWYgIiRnL01FUkdFX0hFQUQiIF07IHRoZW4KKwkJbWVyZ2U9Ii0tbWVyZ2UiCisJZmkKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICIKKwkJCSRfX2dpdF9sb2dfY29tbW9uX29wdGlvbnMKKwkJCSRfX2dpdF9sb2dfZ2l0a19vcHRpb25zCisJCQkkbWVyZ2UKKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKK30KKworX19naXRfZnVuY193cmFwICgpCit7CisJaWYgW1sgLW4gJHtaU0hfVkVSU0lPTi19IF1dOyB0aGVuCisJCWVtdWxhdGUgLUwgYmFzaAorCQlzZXRvcHQgS1NIX1RZUEVTRVQKKworCQkjIHdvcmthcm91bmQgenNoJ3MgYnVnIHRoYXQgbGVhdmVzICd3b3JkcycgYXMgYSBzcGVjaWFsCisJCSMgdmFyaWFibGUgaW4gdmVyc2lvbnMgPCA0LjMuMTIKKwkJdHlwZXNldCAtaCB3b3JkcworCisJCSMgd29ya2Fyb3VuZCB6c2gncyBidWcgdGhhdCBxdW90ZXMgc3BhY2VzIGluIHRoZSBDT01QUkVQTFkKKwkJIyBhcnJheSBpZiBJRlMgZG9lc24ndCBjb250YWluIHNwYWNlcy4KKwkJdHlwZXNldCAtaCBJRlMKKwlmaQorCWxvY2FsIGN1ciB3b3JkcyBjd29yZCBwcmV2CisJX2dldF9jb21wX3dvcmRzX2J5X3JlZiAtbiA9OiBjdXIgd29yZHMgY3dvcmQgcHJldgorCSQxCit9CisKKyMgU2V0dXAgY29tcGxldGlvbiBmb3IgY2VydGFpbiBmdW5jdGlvbnMgZGVmaW5lZCBhYm92ZSBieSBzZXR0aW5nIGNvbW1vbgorIyB2YXJpYWJsZXMgYW5kIHdvcmthcm91bmRzLgorIyBUaGlzIGlzIE5PVCBhIHB1YmxpYyBmdW5jdGlvbjsgdXNlIGF0IHlvdXIgb3duIHJpc2suCitfX2dpdF9jb21wbGV0ZSAoKQoreworCWxvY2FsIHdyYXBwZXI9Il9fZ2l0X3dyYXAkezJ9IgorCWV2YWwgIiR3cmFwcGVyICgpIHsgX19naXRfZnVuY193cmFwICQyIDsgfSIKKwljb21wbGV0ZSAtbyBiYXNoZGVmYXVsdCAtbyBkZWZhdWx0IC1vIG5vc3BhY2UgLUYgJHdyYXBwZXIgJDEgMj4vZGV2L251bGwgXAorCQl8fCBjb21wbGV0ZSAtbyBkZWZhdWx0IC1vIG5vc3BhY2UgLUYgJHdyYXBwZXIgJDEKK30KKworIyB3cmFwcGVyIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorX2dpdCAoKQoreworCV9fZ2l0X3dyYXBfX2dpdF9tYWluCit9CisKKyMgd3JhcHBlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK19naXRrICgpCit7CisJX19naXRfd3JhcF9fZ2l0a19tYWluCit9CisKK19fZ2l0X2NvbXBsZXRlIGdpdCBfX2dpdF9tYWluCitfX2dpdF9jb21wbGV0ZSBnaXRrIF9fZ2l0a19tYWluCisKKyMgVGhlIGZvbGxvd2luZyBhcmUgbmVjZXNzYXJ5IG9ubHkgZm9yIEN5Z3dpbiwgYW5kIG9ubHkgYXJlIG5lZWRlZAorIyB3aGVuIHRoZSB1c2VyIGhhcyB0YWItY29tcGxldGVkIHRoZSBleGVjdXRhYmxlIG5hbWUgYW5kIGNvbnNlcXVlbnRseQorIyBpbmNsdWRlZCB0aGUgJy5leGUnIHN1ZmZpeC4KKyMKK2lmIFsgQ3lnd2luID0gIiQodW5hbWUgLW8gMj4vZGV2L251bGwpIiBdOyB0aGVuCitfX2dpdF9jb21wbGV0ZSBnaXQuZXhlIF9fZ2l0X21haW4KK2ZpCmRpZmYgLS1naXQgYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LXByb21wdC5zaCBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMjA0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LXByb21wdC5zaApAQCAtMCwwICsxLDI5MCBAQAorIyBiYXNoL3pzaCBnaXQgcHJvbXB0IHN1cHBvcnQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPgorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4wLgorIworIyBUaGlzIHNjcmlwdCBhbGxvd3MgeW91IHRvIHNlZSB0aGUgY3VycmVudCBicmFuY2ggaW4geW91ciBwcm9tcHQuCisjCisjIFRvIGVuYWJsZToKKyMKKyMgICAgMSkgQ29weSB0aGlzIGZpbGUgdG8gc29tZXdoZXJlIChlLmcuIH4vLmdpdC1wcm9tcHQuc2gpLgorIyAgICAyKSBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgLmJhc2hyYy8uenNocmM6CisjICAgICAgICBzb3VyY2Ugfi8uZ2l0LXByb21wdC5zaAorIyAgICAzKSBDaGFuZ2UgeW91ciBQUzEgdG8gYWxzbyBzaG93IHRoZSBjdXJyZW50IGJyYW5jaDoKKyMgICAgICAgICBCYXNoOiBQUzE9J1tcdUBcaCBcVyQoX19naXRfcHMxICIgKCVzKSIpXVwkICcKKyMgICAgICAgICBaU0g6ICBQUzE9J1slbkAlbSAlYyQoX19naXRfcHMxICIgKCVzKSIpXVwkICcKKyMKKyMgVGhlIGFyZ3VtZW50IHRvIF9fZ2l0X3BzMSB3aWxsIGJlIGRpc3BsYXllZCBvbmx5IGlmIHlvdSBhcmUgY3VycmVudGx5CisjIGluIGEgZ2l0IHJlcG9zaXRvcnkuICBUaGUgJXMgdG9rZW4gd2lsbCBiZSB0aGUgbmFtZSBvZiB0aGUgY3VycmVudAorIyBicmFuY2guCisjCisjIEluIGFkZGl0aW9uLCBpZiB5b3Ugc2V0IEdJVF9QUzFfU0hPV0RJUlRZU1RBVEUgdG8gYSBub25lbXB0eSB2YWx1ZSwKKyMgdW5zdGFnZWQgKCopIGFuZCBzdGFnZWQgKCspIGNoYW5nZXMgd2lsbCBiZSBzaG93biBuZXh0IHRvIHRoZSBicmFuY2gKKyMgbmFtZS4gIFlvdSBjYW4gY29uZmlndXJlIHRoaXMgcGVyLXJlcG9zaXRvcnkgd2l0aCB0aGUKKyMgYmFzaC5zaG93RGlydHlTdGF0ZSB2YXJpYWJsZSwgd2hpY2ggZGVmYXVsdHMgdG8gdHJ1ZSBvbmNlCisjIEdJVF9QUzFfU0hPV0RJUlRZU1RBVEUgaXMgZW5hYmxlZC4KKyMKKyMgWW91IGNhbiBhbHNvIHNlZSBpZiBjdXJyZW50bHkgc29tZXRoaW5nIGlzIHN0YXNoZWQsIGJ5IHNldHRpbmcKKyMgR0lUX1BTMV9TSE9XU1RBU0hTVEFURSB0byBhIG5vbmVtcHR5IHZhbHVlLiBJZiBzb21ldGhpbmcgaXMgc3Rhc2hlZCwKKyMgdGhlbiBhICckJyB3aWxsIGJlIHNob3duIG5leHQgdG8gdGhlIGJyYW5jaCBuYW1lLgorIworIyBJZiB5b3Ugd291bGQgbGlrZSB0byBzZWUgaWYgdGhlcmUncmUgdW50cmFja2VkIGZpbGVzLCB0aGVuIHlvdSBjYW4gc2V0CisjIEdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTIHRvIGEgbm9uZW1wdHkgdmFsdWUuIElmIHRoZXJlJ3JlIHVudHJhY2tlZAorIyBmaWxlcywgdGhlbiBhICclJyB3aWxsIGJlIHNob3duIG5leHQgdG8gdGhlIGJyYW5jaCBuYW1lLgorIworIyBJZiB5b3Ugd291bGQgbGlrZSB0byBzZWUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBIRUFEIGFuZCBpdHMgdXBzdHJlYW0sCisjIHNldCBHSVRfUFMxX1NIT1dVUFNUUkVBTT0iYXV0byIuICBBICI8IiBpbmRpY2F0ZXMgeW91IGFyZSBiZWhpbmQsICI+IgorIyBpbmRpY2F0ZXMgeW91IGFyZSBhaGVhZCwgIjw+IiBpbmRpY2F0ZXMgeW91IGhhdmUgZGl2ZXJnZWQgYW5kICI9IgorIyBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlLiBZb3UgY2FuIGZ1cnRoZXIgY29udHJvbAorIyBiZWhhdmlvdXIgYnkgc2V0dGluZyBHSVRfUFMxX1NIT1dVUFNUUkVBTSB0byBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0CisjIG9mIHZhbHVlczoKKyMKKyMgICAgIHZlcmJvc2UgICAgICAgc2hvdyBudW1iZXIgb2YgY29tbWl0cyBhaGVhZC9iZWhpbmQgKCsvLSkgdXBzdHJlYW0KKyMgICAgIGxlZ2FjeSAgICAgICAgZG9uJ3QgdXNlIHRoZSAnLS1jb3VudCcgb3B0aW9uIGF2YWlsYWJsZSBpbiByZWNlbnQKKyMgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgb2YgZ2l0LXJldi1saXN0CisjICAgICBnaXQgICAgICAgICAgIGFsd2F5cyBjb21wYXJlIEhFQUQgdG8gQHt1cHN0cmVhbX0KKyMgICAgIHN2biAgICAgICAgICAgYWx3YXlzIGNvbXBhcmUgSEVBRCB0byB5b3VyIFNWTiB1cHN0cmVhbQorIworIyBCeSBkZWZhdWx0LCBfX2dpdF9wczEgd2lsbCBjb21wYXJlIEhFQUQgdG8geW91ciBTVk4gdXBzdHJlYW0gaWYgaXQgY2FuCisjIGZpbmQgb25lLCBvciBAe3Vwc3RyZWFtfSBvdGhlcndpc2UuICBPbmNlIHlvdSBoYXZlIHNldAorIyBHSVRfUFMxX1NIT1dVUFNUUkVBTSwgeW91IGNhbiBvdmVycmlkZSBpdCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIGJ5CisjIHNldHRpbmcgdGhlIGJhc2guc2hvd1Vwc3RyZWFtIGNvbmZpZyB2YXJpYWJsZS4KKworIyBfX2dpdGRpciBhY2NlcHRzIDAgb3IgMSBhcmd1bWVudHMgKGkuZS4sIGxvY2F0aW9uKQorIyByZXR1cm5zIGxvY2F0aW9uIG9mIC5naXQgcmVwbworX19naXRkaXIgKCkKK3sKKwkjIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgZHVwbGljYXRlZCBpbiBnaXQtY29tcGxldGlvbi5iYXNoCisJIyBXaGVuIHVwZGF0aW5nIGl0LCBtYWtlIHN1cmUgeW91IHVwZGF0ZSB0aGUgb3RoZXIgb25lIHRvIG1hdGNoLgorCWlmIFsgLXogIiR7MS19IiBdOyB0aGVuCisJCWlmIFsgLW4gIiR7X19naXRfZGlyLX0iIF07IHRoZW4KKwkJCWVjaG8gIiRfX2dpdF9kaXIiCisJCWVsaWYgWyAtbiAiJHtHSVRfRElSLX0iIF07IHRoZW4KKwkJCXRlc3QgLWQgIiR7R0lUX0RJUi19IiB8fCByZXR1cm4gMQorCQkJZWNobyAiJEdJVF9ESVIiCisJCWVsaWYgWyAtZCAuZ2l0IF07IHRoZW4KKwkJCWVjaG8gLmdpdAorCQllbHNlCisJCQlnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbAorCQlmaQorCWVsaWYgWyAtZCAiJDEvLmdpdCIgXTsgdGhlbgorCQllY2hvICIkMS8uZ2l0IgorCWVsc2UKKwkJZWNobyAiJDEiCisJZmkKK30KKworIyBzdG9yZXMgdGhlIGRpdmVyZ2VuY2UgZnJvbSB1cHN0cmVhbSBpbiAkcAorIyB1c2VkIGJ5IEdJVF9QUzFfU0hPV1VQU1RSRUFNCitfX2dpdF9wczFfc2hvd191cHN0cmVhbSAoKQoreworCWxvY2FsIGtleSB2YWx1ZQorCWxvY2FsIHN2bl9yZW1vdGUgc3ZuX3VybF9wYXR0ZXJuIGNvdW50IG4KKwlsb2NhbCB1cHN0cmVhbT1naXQgbGVnYWN5PSIiIHZlcmJvc2U9IiIKKworCXN2bl9yZW1vdGU9KCkKKwkjIGdldCBzb21lIGNvbmZpZyBvcHRpb25zIGZyb20gZ2l0LWNvbmZpZworCWxvY2FsIG91dHB1dD0iJChnaXQgY29uZmlnIC16IC0tZ2V0LXJlZ2V4cCAnXihzdm4tcmVtb3RlXC4uKlwudXJsfGJhc2hcLnNob3d1cHN0cmVhbSkkJyAyPi9kZXYvbnVsbCB8IHRyICdcMFxuJyAnXG4gJykiCisJd2hpbGUgcmVhZCAtciBrZXkgdmFsdWU7IGRvCisJCWNhc2UgIiRrZXkiIGluCisJCWJhc2guc2hvd3Vwc3RyZWFtKQorCQkJR0lUX1BTMV9TSE9XVVBTVFJFQU09IiR2YWx1ZSIKKwkJCWlmIFtbIC16ICIke0dJVF9QUzFfU0hPV1VQU1RSRUFNfSIgXV07IHRoZW4KKwkJCQlwPSIiCisJCQkJcmV0dXJuCisJCQlmaQorCQkJOzsKKwkJc3ZuLXJlbW90ZS4qLnVybCkKKwkJCXN2bl9yZW1vdGVbICQoKCR7I3N2bl9yZW1vdGVbQF19ICsgMSkpIF09IiR2YWx1ZSIKKwkJCXN2bl91cmxfcGF0dGVybis9IlxcfCR2YWx1ZSIKKwkJCXVwc3RyZWFtPXN2bitnaXQgIyBkZWZhdWx0IHVwc3RyZWFtIGlzIFNWTiBpZiBhdmFpbGFibGUsIGVsc2UgZ2l0CisJCQk7OworCQllc2FjCisJZG9uZSA8PDwgIiRvdXRwdXQiCisKKwkjIHBhcnNlIGNvbmZpZ3VyYXRpb24gdmFsdWVzCisJZm9yIG9wdGlvbiBpbiAke0dJVF9QUzFfU0hPV1VQU1RSRUFNfTsgZG8KKwkJY2FzZSAiJG9wdGlvbiIgaW4KKwkJZ2l0fHN2bikgdXBzdHJlYW09IiRvcHRpb24iIDs7CisJCXZlcmJvc2UpIHZlcmJvc2U9MSA7OworCQlsZWdhY3kpICBsZWdhY3k9MSAgOzsKKwkJZXNhYworCWRvbmUKKworCSMgRmluZCBvdXIgdXBzdHJlYW0KKwljYXNlICIkdXBzdHJlYW0iIGluCisJZ2l0KSAgICB1cHN0cmVhbT0iQHt1cHN0cmVhbX0iIDs7CisJc3ZuKikKKwkJIyBnZXQgdGhlIHVwc3RyZWFtIGZyb20gdGhlICJnaXQtc3ZuLWlkOiAuLi4iIGluIGEgY29tbWl0IG1lc3NhZ2UKKwkJIyAoZ2l0LXN2biB1c2VzIGVzc2VudGlhbGx5IHRoZSBzYW1lIHByb2NlZHVyZSBpbnRlcm5hbGx5KQorCQlsb2NhbCBzdm5fdXBzdHJlYW09KCQoZ2l0IGxvZyAtLWZpcnN0LXBhcmVudCAtMSBcCisJCQkJCS0tZ3JlcD0iXmdpdC1zdm4taWQ6IFwoJHtzdm5fdXJsX3BhdHRlcm4jPz99XCkiIDI+L2Rldi9udWxsKSkKKwkJaWYgW1sgMCAtbmUgJHsjc3ZuX3Vwc3RyZWFtW0BdfSBdXTsgdGhlbgorCQkJc3ZuX3Vwc3RyZWFtPSR7c3ZuX3Vwc3RyZWFtWyAkeyNzdm5fdXBzdHJlYW1bQF19IC0gMiBdfQorCQkJc3ZuX3Vwc3RyZWFtPSR7c3ZuX3Vwc3RyZWFtJUAqfQorCQkJbG9jYWwgbl9zdG9wPSIkeyNzdm5fcmVtb3RlW0BdfSIKKwkJCWZvciAoKG49MTsgbiA8PSBuX3N0b3A7IG4rKykpOyBkbworCQkJCXN2bl91cHN0cmVhbT0ke3N2bl91cHN0cmVhbSMke3N2bl9yZW1vdGVbJG5dfX0KKwkJCWRvbmUKKworCQkJaWYgW1sgLXogIiRzdm5fdXBzdHJlYW0iIF1dOyB0aGVuCisJCQkJIyBkZWZhdWx0IGJyYW5jaCBuYW1lIGZvciBjaGVja291dHMgd2l0aCBubyBsYXlvdXQ6CisJCQkJdXBzdHJlYW09JHtHSVRfU1ZOX0lEOi1naXQtc3ZufQorCQkJZWxzZQorCQkJCXVwc3RyZWFtPSR7c3ZuX3Vwc3RyZWFtIy99CisJCQlmaQorCQllbGlmIFtbICJzdm4rZ2l0IiA9ICIkdXBzdHJlYW0iIF1dOyB0aGVuCisJCQl1cHN0cmVhbT0iQHt1cHN0cmVhbX0iCisJCWZpCisJCTs7CisJZXNhYworCisJIyBGaW5kIGhvdyBtYW55IGNvbW1pdHMgd2UgYXJlIGFoZWFkL2JlaGluZCBvdXIgdXBzdHJlYW0KKwlpZiBbWyAteiAiJGxlZ2FjeSIgXV07IHRoZW4KKwkJY291bnQ9IiQoZ2l0IHJldi1saXN0IC0tY291bnQgLS1sZWZ0LXJpZ2h0IFwKKwkJCQkiJHVwc3RyZWFtIi4uLkhFQUQgMj4vZGV2L251bGwpIgorCWVsc2UKKwkJIyBwcm9kdWNlIGVxdWl2YWxlbnQgb3V0cHV0IHRvIC0tY291bnQgZm9yIG9sZGVyIHZlcnNpb25zIG9mIGdpdAorCQlsb2NhbCBjb21taXRzCisJCWlmIGNvbW1pdHM9IiQoZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCAiJHVwc3RyZWFtIi4uLkhFQUQgMj4vZGV2L251bGwpIgorCQl0aGVuCisJCQlsb2NhbCBjb21taXQgYmVoaW5kPTAgYWhlYWQ9MAorCQkJZm9yIGNvbW1pdCBpbiAkY29tbWl0cworCQkJZG8KKwkJCQljYXNlICIkY29tbWl0IiBpbgorCQkJCSI8IiopICgoYmVoaW5kKyspKSA7OworCQkJCSopICAgICgoYWhlYWQrKykpICA7OworCQkJCWVzYWMKKwkJCWRvbmUKKwkJCWNvdW50PSIkYmVoaW5kCSRhaGVhZCIKKwkJZWxzZQorCQkJY291bnQ9IiIKKwkJZmkKKwlmaQorCisJIyBjYWxjdWxhdGUgdGhlIHJlc3VsdAorCWlmIFtbIC16ICIkdmVyYm9zZSIgXV07IHRoZW4KKwkJY2FzZSAiJGNvdW50IiBpbgorCQkiIikgIyBubyB1cHN0cmVhbQorCQkJcD0iIiA7OworCQkiMAkwIikgIyBlcXVhbCB0byB1cHN0cmVhbQorCQkJcD0iPSIgOzsKKwkJIjAJIiopICMgYWhlYWQgb2YgdXBzdHJlYW0KKwkJCXA9Ij4iIDs7CisJCSoiCTAiKSAjIGJlaGluZCB1cHN0cmVhbQorCQkJcD0iPCIgOzsKKwkJKikJICAgICMgZGl2ZXJnZWQgZnJvbSB1cHN0cmVhbQorCQkJcD0iPD4iIDs7CisJCWVzYWMKKwllbHNlCisJCWNhc2UgIiRjb3VudCIgaW4KKwkJIiIpICMgbm8gdXBzdHJlYW0KKwkJCXA9IiIgOzsKKwkJIjAJMCIpICMgZXF1YWwgdG8gdXBzdHJlYW0KKwkJCXA9IiB1PSIgOzsKKwkJIjAJIiopICMgYWhlYWQgb2YgdXBzdHJlYW0KKwkJCXA9IiB1KyR7Y291bnQjMAl9IiA7OworCQkqIgkwIikgIyBiZWhpbmQgdXBzdHJlYW0KKwkJCXA9IiB1LSR7Y291bnQlCTB9IiA7OworCQkqKQkgICAgIyBkaXZlcmdlZCBmcm9tIHVwc3RyZWFtCisJCQlwPSIgdSske2NvdW50IyoJfS0ke2NvdW50JQkqfSIgOzsKKwkJZXNhYworCWZpCisKK30KKworCisjIF9fZ2l0X3BzMSBhY2NlcHRzIDAgb3IgMSBhcmd1bWVudHMgKGkuZS4sIGZvcm1hdCBzdHJpbmcpCisjIHJldHVybnMgdGV4dCB0byBhZGQgdG8gYmFzaCBQUzEgcHJvbXB0IChpbmNsdWRlcyBicmFuY2ggbmFtZSkKK19fZ2l0X3BzMSAoKQoreworCWxvY2FsIGc9IiQoX19naXRkaXIpIgorCWlmIFsgLW4gIiRnIiBdOyB0aGVuCisJCWxvY2FsIHI9IiIKKwkJbG9jYWwgYj0iIgorCQlpZiBbIC1mICIkZy9yZWJhc2UtbWVyZ2UvaW50ZXJhY3RpdmUiIF07IHRoZW4KKwkJCXI9InxSRUJBU0UtaSIKKwkJCWI9IiQoY2F0ICIkZy9yZWJhc2UtbWVyZ2UvaGVhZC1uYW1lIikiCisJCWVsaWYgWyAtZCAiJGcvcmViYXNlLW1lcmdlIiBdOyB0aGVuCisJCQlyPSJ8UkVCQVNFLW0iCisJCQliPSIkKGNhdCAiJGcvcmViYXNlLW1lcmdlL2hlYWQtbmFtZSIpIgorCQllbHNlCisJCQlpZiBbIC1kICIkZy9yZWJhc2UtYXBwbHkiIF07IHRoZW4KKwkJCQlpZiBbIC1mICIkZy9yZWJhc2UtYXBwbHkvcmViYXNpbmciIF07IHRoZW4KKwkJCQkJcj0ifFJFQkFTRSIKKwkJCQllbGlmIFsgLWYgIiRnL3JlYmFzZS1hcHBseS9hcHBseWluZyIgXTsgdGhlbgorCQkJCQlyPSJ8QU0iCisJCQkJZWxzZQorCQkJCQlyPSJ8QU0vUkVCQVNFIgorCQkJCWZpCisJCQllbGlmIFsgLWYgIiRnL01FUkdFX0hFQUQiIF07IHRoZW4KKwkJCQlyPSJ8TUVSR0lORyIKKwkJCWVsaWYgWyAtZiAiJGcvQ0hFUlJZX1BJQ0tfSEVBRCIgXTsgdGhlbgorCQkJCXI9InxDSEVSUlktUElDS0lORyIKKwkJCWVsaWYgWyAtZiAiJGcvQklTRUNUX0xPRyIgXTsgdGhlbgorCQkJCXI9InxCSVNFQ1RJTkciCisJCQlmaQorCisJCQliPSIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCkiIHx8IHsKKworCQkJCWI9IiQoCisJCQkJY2FzZSAiJHtHSVRfUFMxX0RFU0NSSUJFX1NUWUxFLX0iIGluCisJCQkJKGNvbnRhaW5zKQorCQkJCQlnaXQgZGVzY3JpYmUgLS1jb250YWlucyBIRUFEIDs7CisJCQkJKGJyYW5jaCkKKwkJCQkJZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMgLS1hbGwgSEVBRCA7OworCQkJCShkZXNjcmliZSkKKwkJCQkJZ2l0IGRlc2NyaWJlIEhFQUQgOzsKKwkJCQkoKiB8IGRlZmF1bHQpCisJCQkJCWdpdCBkZXNjcmliZSAtLXRhZ3MgLS1leGFjdC1tYXRjaCBIRUFEIDs7CisJCQkJZXNhYyAyPi9kZXYvbnVsbCkiIHx8CisKKwkJCQliPSIkKGN1dCAtYzEtNyAiJGcvSEVBRCIgMj4vZGV2L251bGwpLi4uIiB8fAorCQkJCWI9InVua25vd24iCisJCQkJYj0iKCRiKSIKKwkJCX0KKwkJZmkKKworCQlsb2NhbCB3PSIiCisJCWxvY2FsIGk9IiIKKwkJbG9jYWwgcz0iIgorCQlsb2NhbCB1PSIiCisJCWxvY2FsIGM9IiIKKwkJbG9jYWwgcD0iIgorCisJCWlmIFsgInRydWUiID0gIiQoZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS1naXQtZGlyIDI+L2Rldi9udWxsKSIgXTsgdGhlbgorCQkJaWYgWyAidHJ1ZSIgPSAiJChnaXQgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5IDI+L2Rldi9udWxsKSIgXTsgdGhlbgorCQkJCWM9IkJBUkU6IgorCQkJZWxzZQorCQkJCWI9IkdJVF9ESVIhIgorCQkJZmkKKwkJZWxpZiBbICJ0cnVlIiA9ICIkKGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlIDI+L2Rldi9udWxsKSIgXTsgdGhlbgorCQkJaWYgWyAtbiAiJHtHSVRfUFMxX1NIT1dESVJUWVNUQVRFLX0iIF07IHRoZW4KKwkJCQlpZiBbICIkKGdpdCBjb25maWcgLS1ib29sIGJhc2guc2hvd0RpcnR5U3RhdGUpIiAhPSAiZmFsc2UiIF07IHRoZW4KKwkJCQkJZ2l0IGRpZmYgLS1uby1leHQtZGlmZiAtLXF1aWV0IC0tZXhpdC1jb2RlIHx8IHc9IioiCisJCQkJCWlmIGdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSBIRUFEID4vZGV2L251bGw7IHRoZW4KKwkJCQkJCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgSEVBRCAtLSB8fCBpPSIrIgorCQkJCQllbHNlCisJCQkJCQlpPSIjIgorCQkJCQlmaQorCQkJCWZpCisJCQlmaQorCQkJaWYgWyAtbiAiJHtHSVRfUFMxX1NIT1dTVEFTSFNUQVRFLX0iIF07IHRoZW4KKwkJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvc3Rhc2ggPi9kZXYvbnVsbCAyPiYxICYmIHM9IiQiCisJCQlmaQorCisJCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTLX0iIF07IHRoZW4KKwkJCQlpZiBbIC1uICIkKGdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUtc3RhbmRhcmQpIiBdOyB0aGVuCisJCQkJCXU9IiUiCisJCQkJZmkKKwkJCWZpCisKKwkJCWlmIFsgLW4gIiR7R0lUX1BTMV9TSE9XVVBTVFJFQU0tfSIgXTsgdGhlbgorCQkJCV9fZ2l0X3BzMV9zaG93X3Vwc3RyZWFtCisJCQlmaQorCQlmaQorCisJCWxvY2FsIGY9IiR3JGkkcyR1IgorCQlwcmludGYgLS0gIiR7MTotICglcyl9IiAiJGMke2IjI3JlZnMvaGVhZHMvfSR7ZjorICRmfSRyJHAiCisJZmkKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29udGludW91cy9jaWRhZW1vbiBiL2NvbnRyaWIvY29udGludW91cy9jaWRhZW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDA5YTE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb250aW51b3VzL2NpZGFlbW9uCkBAIC0wLDAgKzEsNTAzIEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgQSBkYWVtb24gdGhhdCB3YWl0cyBmb3IgdXBkYXRlIGV2ZW50cyBzZW50IGJ5IGl0cyBjb21wYW5pb24KKyMgcG9zdC1yZWNlaXZlLWNpbm90aWZ5IGhvb2ssIGNoZWNrcyBvdXQgYSBuZXcgY29weSBvZiBzb3VyY2UsCisjIGNvbXBpbGVzIGl0LCBhbmQgZW1haWxzIHRoZSBndWlsdHkgcGFydGllcyBpZiB0aGUgY29tcGlsZQorIyAoYW5kIG9wdGlvbmFsbHkgdGVzdCBzdWl0ZSkgZmFpbHMuCisjCisjIFRvIHVzZSB0aGlzIGRhZW1vbiwgY29uZmlndXJlIGl0IGFuZCBydW4gaXQuICBJdCB3aWxsIGRpc2Nvbm5lY3QKKyMgZnJvbSB5b3VyIHRlcm1pbmFsIGFuZCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQuICBUaGUgZGFlbW9uIG11c3QKKyMgaGF2ZSBsb2NhbCBmaWxlc3lzdGVtIGFjY2VzcyB0byB0aGUgc291cmNlIHJlcG9zaXRvcmllcywgYXMgaXQKKyMgdXNlcyBvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyB0byBhdm9pZCBjb3B5aW5nIG9iamVjdHMuCisjCisjIEFkZCBpdHMgY29tcGFuaW9uIHBvc3QtcmVjZWl2ZS1jaW5vdGlmeSBob29rIGFzIHRoZSBwb3N0LXJlY2VpdmUKKyMgaG9vayB0byBlYWNoIHJlcG9zaXRvcnkgdGhhdCB0aGUgZGFlbW9uIHNob3VsZCBtb25pdG9yLiAgWWVzLCBhCisjIHNpbmdsZSBkYWVtb24gY2FuIG1vbml0b3IgbW9yZSB0aGFuIG9uZSByZXBvc2l0b3J5LgorIworIyBUbyB1c2UgbXVsdGlwbGUgZGFlbW9ucyBvbiB0aGUgc2FtZSBzeXN0ZW0sIGdpdmUgdGhlbSBlYWNoIGEKKyMgdW5pcXVlIHF1ZXVlIGZpbGUgYW5kIHRtcGRpci4KKyMKKyMgR2xvYmFsIENvbmZpZworIyAtLS0tLS0tLS0tLS0tCisjIFJlYWRzIGZyb20gYSBHaXQgc3R5bGUgY29uZmlndXJhdGlvbiBmaWxlLiAgVGhpcyB3aWxsIGJlCisjIH4vLmdpdGNvbmZpZyBieSBkZWZhdWx0IGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nCisjIHRoZSBHSVRfQ09ORklHX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUgYmVmb3JlIHN0YXJ0aW5nLgorIworIyBjaWRhZW1vbi5zbXRwSG9zdAorIyAgIEhvc3RuYW1lIG9mIHRoZSBTTVRQIHNlcnZlciB0aGUgZGFlbW9uIHdpbGwgc2VuZCBlbWFpbAorIyAgIHRocm91Z2guICBEZWZhdWx0cyB0byAnbG9jYWxob3N0Jy4KKyMKKyMgY2lkYWVtb24uc210cFVzZXIKKyMgICBVc2VybmFtZSB0byBhdXRoZW50aWNhdGUgdG8gdGhlIFNNVFAgc2VydmVyIGFzLiAgVGhpcworIyAgIHZhcmlhYmxlIGlzIG9wdGlvbmFsOyBpZiBpdCBpcyBub3Qgc3VwcGxpZWQgdGhlbiBubworIyAgIGF1dGhlbnRpY2F0aW9uIHdpbGwgYmUgcGVyZm9ybWVkLgorIworIyBjaWRhZW1vbi5zbXRwUGFzc3dvcmQKKyMgICBQYXNzd29yZCB0byBhdXRoZW50aWNhdGUgdG8gdGhlIFNNVFAgc2VydmVyIGFzLiAgVGhpcworIyAgIHZhcmlhYmxlIGlzIG9wdGlvbmFsLiAgSWYgbm90IHN1cHBsaWVkIGJ1dCBzbXRwVXNlciB3YXMsCisjICAgdGhlIGRhZW1vbiBwcm9tcHRzIGZvciB0aGUgcGFzc3dvcmQgYmVmb3JlIGZvcmtpbmcgaW50bworIyAgIHRoZSBiYWNrZ3JvdW5kLgorIworIyBjaWRhZW1vbi5zbXRwQXV0aAorIyAgIFR5cGUgb2YgYXV0aGVudGljYXRpb24gdG8gcGVyZm9ybSB3aXRoIHRoZSBTTVRQIHNlcnZlci4KKyMgICBJZiBzZXQgdG8gJ2xvZ2luJyBhbmQgc210cFVzZXIgd2FzIGRlZmluZWQsIHRoaXMgd2lsbAorIyAgIHVzZSB0aGUgQVVUSCBMT0dJTiBjb21tYW5kLCB3aGljaCBpcyBzdWl0YWJsZSBmb3IgdXNlCisjICAgd2l0aCBhdCBsZWFzdCBvbmUgdmVyc2lvbiBvZiBNaWNyb3NvZnQgRXhjaGFuZ2UgU2VydmVyLgorIyAgIElmIG5vdCBzZXQgdGhlIGRhZW1vbiB3aWxsIHVzZSB3aGF0ZXZlciBhdXRoIG1ldGhvZHMKKyMgICBhcmUgc3VwcG9ydGVkIGJ5IHlvdXIgdmVyc2lvbiBvZiBOZXQ6OlNNVFAuCisjCisjIGNpZGFlbW9uLmVtYWlsCisjICAgRW1haWwgYWRkcmVzcyB0aGF0IGRhZW1vbiBnZW5lcmF0ZWQgZW1haWxzIHdpbGwgYmUgc2VudAorIyAgIGZyb20uICBUaGlzIHNob3VsZCBiZSBhIHVzZWZ1bCBlbWFpbCBhZGRyZXNzIHdpdGhpbiB5b3VyCisjICAgb3JnYW5pemF0aW9uLiAgUmVxdWlyZWQuCisjCisjIGNpZGFlbW9uLm5hbWUKKyMgICBIdW1hbiBmcmllbmRseSBuYW1lIHRoYXQgdGhlIGRhZW1vbiB3aWxsIHNlbmQgZW1haWxzIGFzLgorIyAgIERlZmF1bHRzIHRvICdjaWRhZW1vbicuCisjCisjIGNpZGFlbW9uLnNjYW5EZWxheQorIyAgIE51bWJlciBvZiBzZWNvbmRzIHRvIHNsZWVwIGJldHdlZW4gcG9sbHMgb2YgdGhlIHF1ZXVlIGZpbGUuCisjICAgRGVmYXVsdHMgdG8gNjAuCisjCisjIGNpZGFlbW9uLnJlY2VudENhY2hlCisjICAgTnVtYmVyIG9mIHJlY2VudCBjb21taXQgU0hBLTFzIHBlciByZXBvc2l0b3J5IHRvIGNhY2hlIGFuZAorIyAgIHNraXAgYnVpbGRpbmcgaWYgdGhleSBhcHBlYXIgYWdhaW4uICBUaGlzIGlzIHVzZWZ1bCB0byBhdm9pZAorIyAgIHJlYnVpbGRpbmcgdGhlIHNhbWUgY29tbWl0IG11bHRpcGxlIHRpbWVzIGp1c3QgYmVjYXVzZSBpdCB3YXMKKyMgICBwdXNoZWQgaW50byBtb3JlIHRoYW4gb25lIGJyYW5jaC4gIERlZmF1bHRzIHRvIDEwMC4KKyMKKyMgY2lkYWVtb24udG1wZGlyCisjICAgU2NyYXRjaCBkaXJlY3RvcnkgdG8gY3JlYXRlIHRoZSBidWlsZHMgd2l0aGluLiAgVGhlIGRhZW1vbgorIyAgIG1ha2VzIGEgbmV3IHN1YmRpcmVjdG9yeSBmb3IgZWFjaCBidWlsZCwgdGhlbiBkZWxldGVzIGl0IHdoZW4KKyMgICB0aGUgYnVpbGQgaGFzIGZpbmlzaGVkLiAgVGhlIHBpZCBmaWxlIGlzIGFsc28gcGxhY2VkIGhlcmUuCisjICAgRGVmYXVsdHMgdG8gJy90bXAnLgorIworIyBjaWRhZW1vbi5xdWV1ZQorIyAgIFBhdGggdG8gdGhlIHF1ZXVlIGZpbGUgdGhhdCB0aGUgcG9zdC1yZWNlaXZlLWNpbm90aWZ5IGhvb2sKKyMgICBhcHBlbmRzIGV2ZW50cyB0by4gIFRoaXMgZmlsZSBpcyBwb2xsZWQgYnkgdGhlIGRhZW1vbi4gIEl0CisjICAgbXVzdCBub3QgYmUgb24gYW4gTkZTIG1vdW50ICh1c2VzIGZsb2NrKS4gIFJlcXVpcmVkLgorIworIyBjaWRhZW1vbi5ub2NjCisjICAgUGVybCByZWdleCBwYXR0ZXJucyB0byBtYXRjaCBhZ2FpbnN0IGF1dGhvciBhbmQgY29tbWl0dGVyCisjICAgbGluZXMuICBJZiBhIHBhdHRlcm4gbWF0Y2hlcywgdGhhdCBhdXRob3Igb3IgY29tbWl0dGVyIHdpbGwKKyMgICBub3QgYmUgbm90aWZpZWQgb2YgYSBidWlsZCBmYWlsdXJlLgorIworIyBQZXIgUmVwb3NpdG9yeSBDb25maWcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWFkIGZyb20gdGhlIHNvdXJjZSByZXBvc2l0b3J5J3MgY29uZmlnIGZpbGUuCisjCisjIGJ1aWxkZXIuY29tbWFuZAorIyAgIFNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSB0aGUgYnVpbGQuICBUaGlzIGNvbW1hbmQgbXVzdAorIyAgIHJldHVybiAwIG9uICJzdWNjZXNzIiBhbmQgbm9uLXplcm8gb24gZmFpbHVyZS4gIElmIHlvdQorIyAgIGFsc28gd2FudCB0byBydW4gYSB0ZXN0IHN1aXRlLCBtYWtlIHN1cmUgeW91ciBjb21tYW5kCisjICAgZG9lcyB0aGF0IHRvby4gIFJlcXVpcmVkLgorIworIyBidWlsZGVyLnF1ZXVlCisjICAgUXVldWUgZmlsZSB0byBub3RpZnkgdGhlIGNpZGFlbW9uIHRocm91Z2guICBTaG91bGQgbWF0Y2gKKyMgICBjaWRhZW1vbi5xdWV1ZS4gIElmIG5vdCBzZXQgdGhlIGhvb2sgd2lsbCBub3Qgbm90aWZ5IHRoZQorIyAgIGNpZGFlbW9uLgorIworIyBidWlsZGVyLnNraXAKKyMgICBQZXJsIHJlZ2V4IHBhdHRlcm5zIG9mIHJlZnMgdGhhdCBzaG91bGQgbm90IGJlIHNlbnQgdG8KKyMgICBjaWRhZW1vbi4gIFVwZGF0ZXMgb2YgdGhlc2UgcmVmcyB3aWxsIGJlIGlnbm9yZWQuCisjCisjIGJ1aWxkZXIubmV3QnJhbmNoQmFzZQorIyAgIEdsb2IgcGF0dGVybnMgb2YgcmVmcyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGZvcm0gdGhlCisjICAgJ29sZCcgcmV2aW9ucyBvZiBhIG5ld2x5IGNyZWF0ZWQgcmVmLiAgVGhpcyBzaG91bGQgc2V0CisjICAgdG8gYmUgZ2xvYnMgdGhhdCBtYXRjaCB5b3VyICdtYWlubGluZScgYnJhbmNoZXMuICBUaGlzCisjICAgd2F5IGEgYnVpbGQgZmFpbHVyZSBvZiBhIGJyYW5kIG5ldyB0b3BpYyBicmFuY2ggZG9lcyBub3QKKyMgICBhdHRlbXB0IHRvIGVtYWlsIGV2ZXJ5b25lIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGltZTsKKyMgICBpbnN0ZWFkIGl0IG9ubHkgZW1haWxzIHRob3NlIGF1dGhvcnMgb2YgY29tbWl0cyBub3QgaW4KKyMgICB0aGVzZSAnbWFpbmxpbmUnIGJyYW5jaGVzLgorCitsb2NhbCAkRU5We1BBVEh9ID0gam9pbiAnOicsIHF3KAorCS9vcHQvZ2l0L2JpbgorCS91c3IvYmluCisJL2JpbgorCSk7CisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRmluZEJpbiBxdygkUmVhbEJpbik7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBsaWIgRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkUmVhbEJpbiwgJy4uJywgJ3Blcmw1Jyk7Cit1c2UgU3RvcmFibGUgcXcocmV0cmlldmUgbnN0b3JlKTsKK3VzZSBGY250bCAnOmZsb2NrJzsKK3VzZSBQT1NJWCBxdyhzdHJmdGltZSk7Cit1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9fYXV0b19hYmJyZXYgYXV0b19oZWxwKTsKKworc3ViIGdpdF9jb25maWcgKCQ7JCkKK3sKKwlteSAkdmFyID0gc2hpZnQ7CisJbXkgJHJlcXVpcmVkID0gc2hpZnQgfHwgMDsKKwlsb2NhbCAqR0lUOworCW9wZW4gR0lULCAnLXwnLCdnaXQnLCdjb25maWcnLCctLWdldCcsJHZhcjsKKwlteSAkciA9IDxHSVQ+OworCWNob3AgJHIgaWYgJHI7CisJY2xvc2UgR0lUOworCWRpZSAiZXJyb3I6ICR2YXIgbm90IHNldC5cbiIgaWYgKCRyZXF1aXJlZCAmJiAhJHIpOworCXJldHVybiAkcjsKK30KKworcGFja2FnZSBFWENIQU5HRV9ORVRfU01UUDsKKworIyBNaWNyb3NvZnQgRXhjaGFuZ2UgU2VydmVyIHJlcXVpcmVzIGFuICdBVVRIIExPR0lOJworIyBzdHlsZSBvZiBhdXRoZW50aWNhdGlvbi4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20KKyMgdGhlIGRlZmF1bHQgc3VwcG9ydGVkIGJ5IE5ldDo6U01UUCBzbyB3ZSBzdWJjbGFzcworIyBhbmQgb3ZlcnJpZGUgdGhlIGF1dGggbWV0aG9kIHRvIHN1cHBvcnQgdGhhdC4KKwordXNlIE5ldDo6U01UUDsKK3VzZSBOZXQ6OkNtZDsKK3VzZSBNSU1FOjpCYXNlNjQgcXcoZW5jb2RlX2Jhc2U2NCk7CitvdXIgQElTQSA9IHF3KE5ldDo6U01UUCk7CitvdXIgJGF1dGhfdHlwZSA9IDo6Z2l0X2NvbmZpZyAnY2lkYWVtb24uc210cEF1dGgnOworCitzdWIgbmV3Cit7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlteSAkdHlwZSA9IHJlZigkc2VsZikgfHwgJHNlbGY7CisJJHR5cGUtPlNVUEVSOjpuZXcoQF8pOworfQorCitzdWIgYXV0aAoreworCW15ICRzZWxmID0gc2hpZnQ7CisJcmV0dXJuICRzZWxmLT5TVVBFUjo6YXV0aChAXykgdW5sZXNzICRhdXRoX3R5cGUgZXEgJ2xvZ2luJzsKKworCW15ICR1c2VyID0gZW5jb2RlX2Jhc2U2NCBzaGlmdCwgJyc7CisJbXkgJHBhc3MgPSBlbmNvZGVfYmFzZTY0IHNoaWZ0LCAnJzsKKwlyZXR1cm4gMCB1bmxlc3MgQ01EX01PUkUgPT0gJHNlbGYtPmNvbW1hbmQoIkFVVEggTE9HSU4iKS0+cmVzcG9uc2U7CisJcmV0dXJuIDAgdW5sZXNzIENNRF9NT1JFID09ICRzZWxmLT5jb21tYW5kKCR1c2VyKS0+cmVzcG9uc2U7CisJQ01EX09LID09ICRzZWxmLT5jb21tYW5kKCRwYXNzKS0+cmVzcG9uc2U7Cit9CisKK3BhY2thZ2UgbWFpbjsKKworbXkgKCRkZWJ1Z19mbGFnLCAlcmVjZW50KTsKKworbXkgJGV4X2hvc3QgPSBnaXRfY29uZmlnKCdjaWRhZW1vbi5zbXRwSG9zdCcpIHx8ICdsb2NhbGhvc3QnOworbXkgJGV4X3VzZXIgPSBnaXRfY29uZmlnKCdjaWRhZW1vbi5zbXRwVXNlcicpOworbXkgJGV4X3Bhc3MgPSBnaXRfY29uZmlnKCdjaWRhZW1vbi5zbXRwUGFzc3dvcmQnKTsKKworbXkgJGV4X2Zyb21fYWRkciA9IGdpdF9jb25maWcoJ2NpZGFlbW9uLmVtYWlsJywgMSk7CitteSAkZXhfZnJvbV9uYW1lID0gZ2l0X2NvbmZpZygnY2lkYWVtb24ubmFtZScpIHx8ICdjaWRhZW1vbic7CisKK215ICRzY2FuX2RlbGF5ID0gZ2l0X2NvbmZpZygnY2lkYWVtb24uc2NhbkRlbGF5JykgfHwgNjA7CitteSAkcmVjZW50X3NpemUgPSBnaXRfY29uZmlnKCdjaWRhZW1vbi5yZWNlbnRDYWNoZScpIHx8IDEwMDsKK215ICR0bXBkaXIgPSBnaXRfY29uZmlnKCdjaWRhZW1vbi50bXBkaXInKSB8fCAnL3RtcCc7CitteSAkcXVldWVfbmFtZSA9IGdpdF9jb25maWcoJ2NpZGFlbW9uLnF1ZXVlJywgMSk7CitteSAkcXVldWVfbG9jayA9ICIkcXVldWVfbmFtZS5sb2NrIjsKKworbXkgQG5vY2NfbGlzdDsKK29wZW4gR0lULCdnaXQgY29uZmlnIC0tZ2V0LWFsbCBjaWRhZW1vbi5ub2NjfCc7Cit3aGlsZSAoPEdJVD4pIHsKKwljaG9wOworCXB1c2ggQG5vY2NfbGlzdCwgJF87Cit9CitjbG9zZSBHSVQ7CisKK3N1YiBub2NjX2F1dGhvciAoJCkKK3sKKwlsb2NhbCAkXyA9IHNoaWZ0OworCWZvcmVhY2ggbXkgJHBhdCAoQG5vY2NfbGlzdCkgeworCQlyZXR1cm4gMSBpZiAvJHBhdC87CisJfQorCTA7Cit9CisKK3N1YiBpbnB1dF9lY2hvICgkKQoreworCW15ICRwcm9tcHQgPSBzaGlmdDsKKworCWxvY2FsICR8ID0gMTsKKwlwcmludCAkcHJvbXB0OworCW15ICRpbnB1dCA9IDxTVERJTj47CisJY2hvcCAkaW5wdXQ7CisJcmV0dXJuICRpbnB1dDsKK30KKworc3ViIGlucHV0X25vZWNobyAoJCkKK3sKKwlteSAkcHJvbXB0ID0gc2hpZnQ7CisKKwlteSAkZW5kID0gc3ViIHtzeXN0ZW0oJ3N0dHknLCdlY2hvJyk7cHJpbnQgIlxuIjtleGl0fTsKKwlsb2NhbCAkU0lHe1RFUk19ID0gJGVuZDsKKwlsb2NhbCAkU0lHe0lOVH0gPSAkZW5kOworCXN5c3RlbSgnc3R0eScsJy1lY2hvJyk7CisKKwlsb2NhbCAkfCA9IDE7CisJcHJpbnQgJHByb21wdDsKKwlteSAkaW5wdXQgPSA8U1RESU4+OworCXN5c3RlbSgnc3R0eScsJ2VjaG8nKTsKKwlwcmludCAiXG4iOworCWNob3AgJGlucHV0OworCXJldHVybiAkaW5wdXQ7Cit9CisKK3N1YiByZmMyODIyX2RhdGUgKCkKK3sKKwkgc3RyZnRpbWUoIiVhLCAlZCAlYiAlWSAlSDolTTolUyAlWiIsIGxvY2FsdGltZSk7Cit9CisKK3N1YiBzZW5kX2VtYWlsICgkJCQpCit7CisJbXkgKCRzdWJqLCAkYm9keSwgJHRvKSA9IEBfOworCW15ICRub3cgPSByZmMyODIyX2RhdGU7CisJbXkgJHRvX3N0ciA9ICcnOworCW15IEByY3B0X3RvOworCWZvcmVhY2ggKEAkdG8pIHsKKwkJbXkgJHMgPSAkXzsKKwkJJHMgPX4gcy9eLyIvOworCQkkcyA9fiBzLyhccys8KS8iJDEvOworCQkkdG9fc3RyIC49ICcsICcgaWYgJHRvX3N0cjsKKwkJJHRvX3N0ciAuPSAkczsKKwkJcHVzaCBAcmNwdF90bywgJDEgaWYgJHMgPX4gLzwoLiopPi87CisJfQorCWRpZSAiTm9ib2R5IHRvIHNlbmQgdG8uXG4iIHVubGVzcyBAcmNwdF90bzsKKwlteSAkbXNnID0gPDxFT0Y7CitGcm9tOiAiJGV4X2Zyb21fbmFtZSIgPCRleF9mcm9tX2FkZHI+CitUbzogJHRvX3N0cgorRGF0ZTogJG5vdworU3ViamVjdDogJHN1YmoKKworJGJvZHkKK0VPRgorCisJbXkgJHNtdHAgPSBFWENIQU5HRV9ORVRfU01UUC0+bmV3KEhvc3QgPT4gJGV4X2hvc3QpCisJCW9yIGRpZSAiQ2Fubm90IGNvbm5lY3QgdG8gJGV4X2hvc3Q6ICQhXG4iOworCWlmICgkZXhfdXNlciAmJiAkZXhfcGFzcykgeworCQkkc210cC0+YXV0aCgkZXhfdXNlciwkZXhfcGFzcykKKwkJCW9yIGRpZSAiJGV4X2hvc3QgcmVqZWN0ZWQgJGV4X3VzZXJcbiI7CisJfQorCSRzbXRwLT5tYWlsKCRleF9mcm9tX2FkZHIpCisJCW9yIGRpZSAiJGV4X2hvc3QgcmVqZWN0ZWQgJGV4X2Zyb21fYWRkclxuIjsKKwlzY2FsYXIoJHNtdHAtPnJlY2lwaWVudChAcmNwdF90bywgeyBTa2lwQmFkID0+IDEgfSkpCisJCW9yIGRpZSAiJGV4X2hvc3QgZGlkIG5vdCBhY2NlcHQgYW55IGFkZHJlc3Nlcy5cbiI7CisJJHNtdHAtPmRhdGEoJG1zZykKKwkJb3IgZGllICIkZXhfaG9zdCByZWplY3RlZCBtZXNzYWdlIGRhdGFcbiI7CisJJHNtdHAtPnF1aXQ7Cit9CisKK3N1YiBwb3BfcXVldWUgKCkKK3sKKwlvcGVuIExPQ0ssICI+JHF1ZXVlX2xvY2siIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkcXVldWVfbG9jazogJCEiOworCWZsb2NrIExPQ0ssIExPQ0tfRVg7CisKKwlteSAkcXVldWUgPSAtZiAkcXVldWVfbmFtZSA/IHJldHJpZXZlICRxdWV1ZV9uYW1lIDogW107CisJbXkgJGVudCA9IHNoaWZ0IEAkcXVldWU7CisJbnN0b3JlICRxdWV1ZSwgJHF1ZXVlX25hbWU7CisKKwlmbG9jayBMT0NLLCBMT0NLX1VOOworCWNsb3NlIExPQ0s7CisJJGVudDsKK30KKworc3ViIGdpdF9leGVjIChAKQoreworCXN5c3RlbSgnZ2l0JyxAXykgPT0gMCBvciBkaWUgIkNhbm5vdCBnaXQgIiAuIGpvaW4oJyAnLCBAXykgLiAiXG4iOworfQorCitzdWIgZ2l0X3ZhbCAoQCkKK3sKKwlvcGVuKEMsICctfCcsJ2dpdCcsQF8pOworCW15ICRyID0gPEM+OworCWNob3AgJHIgaWYgJHI7CisJY2xvc2UgQzsKKwkkcjsKK30KKworc3ViIGRvX2J1aWxkICgkJCkKK3sKKwlteSAoJGdpdF9kaXIsICRuZXcpID0gQF87CisKKwlteSAkdG1wID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdG1wZGlyLCAiYnVpbGRlciQkIik7CisJc3lzdGVtKCdybScsJy1yZicsJHRtcCkgPT0gMCBvciBkaWUgIkNhbm5vdCBjbGVhciAkdG1wXG4iOworCWRpZSAiQ2Fubm90IGNsZWFyICR0bXAuXG4iIGlmIC1lICR0bXA7CisKKwlteSAkcmVzdWx0ID0gMTsKKwlldmFsIHsKKwkJbXkgJGNvbW1hbmQ7CisJCXsKKwkJCWxvY2FsICRFTlZ7R0lUX0RJUn0gPSAkZ2l0X2RpcjsKKwkJCSRjb21tYW5kID0gZ2l0X3ZhbCAnY29uZmlnJywnYnVpbGRlci5jb21tYW5kJzsKKwkJfQorCQlkaWUgIk5vIGJ1aWxkZXIuY29tbWFuZCBmb3IgJGdpdF9kaXIuXG4iIHVubGVzcyAkY29tbWFuZDsKKworCQlnaXRfZXhlYyAnY2xvbmUnLCctbicsJy1sJywnLXMnLCRnaXRfZGlyLCR0bXA7CisJCWNobW9kIDA3MDAsICR0bXAgb3IgZGllICJDYW5ub3QgbG9jayAkdG1wXG4iOworCQljaGRpciAkdG1wIG9yIGRpZSAiQ2Fubm90IGVudGVyICR0bXBcbiI7CisKKwkJZ2l0X2V4ZWMgJ3VwZGF0ZS1yZWYnLCdIRUFEJywkbmV3OworCQlnaXRfZXhlYyAncmVhZC10cmVlJywnLW0nLCctdScsJ0hFQUQnLCdIRUFEJzsKKwkJc3lzdGVtICRjb21tYW5kOworCQlpZiAoJD8gPT0gLTEpIHsKKwkJCXByaW50IFNUREVSUiAiZmFpbGVkIHRvIGV4ZWN1dGUgJyRjb21tYW5kJzogJCFcbiI7CisJCQkkcmVzdWx0ID0gMTsKKwkJfSBlbHNpZiAoJD8gJiAxMjcpIHsKKwkJCW15ICRzaWcgPSAkPyAmIDEyNzsKKwkJCXByaW50IFNUREVSUiAiJyRjb21tYW5kJyBkaWVkIGZyb20gc2lnbmFsICRzaWdcbiI7CisJCQkkcmVzdWx0ID0gMTsKKwkJfSBlbHNlIHsKKwkJCW15ICRyID0gJD8gPj4gODsKKwkJCXByaW50IFNUREVSUiAiJyRjb21tYW5kJyBleGl0ZWQgd2l0aCAkclxuIiBpZiAkcjsKKwkJCSRyZXN1bHQgPSAkcjsKKwkJfQorCX07CisJaWYgKCRAKSB7CisJCSRyZXN1bHQgPSAyOworCQlwcmludCBTVERFUlIgIiRAXG4iOworCX0KKworCWNoZGlyICcvJzsKKwlzeXN0ZW0oJ3JtJywnLXJmJywkdG1wKTsKKwlybWRpciAkdG1wOworCSRyZXN1bHQ7Cit9CisKK3N1YiBidWlsZF9mYWlsZWQgKCQkJCQkKQoreworCW15ICgkZ2l0X2RpciwgJHJlZiwgJG9sZCwgJG5ldywgJG1zZykgPSBAXzsKKworCSRnaXRfZGlyID1+IG0sLyhbXi9dKykkLDsKKwlteSAkcmVwb19uYW1lID0gJDE7CisJJHJlZiA9fiBzLF5yZWZzLyhoZWFkc3x0YWdzKS8sLDsKKworCW15ICVhdXRob3JzOworCW15ICRzaG9ydGxvZzsKKwlteSAkcmV2c3RyOworCXsKKwkJbG9jYWwgJEVOVntHSVRfRElSfSA9ICRnaXRfZGlyOworCQlteSBAcmV2cyA9ICgkbmV3KTsKKwkJcHVzaCBAcmV2cywgJy0tbm90JywgQCRvbGQgaWYgQCRvbGQ7CisJCW9wZW4gTE9HLCctfCcsJ2dpdCcsJ3Jldi1saXN0JywnLS1wcmV0dHk9cmF3JyxAcmV2czsKKwkJd2hpbGUgKDxMT0c+KSB7CisJCQlpZiAocy9eKGF1dGhvcnxjb21taXR0ZXIpIC8vKSB7CisJCQkJY2hvbXA7CisJCQkJcy8+LiokLz4vOworCQkJCSRhdXRob3JzeyRffSA9IDEgdW5sZXNzIG5vY2NfYXV0aG9yICRfOworCQkJfQorCQl9CisJCWNsb3NlIExPRzsKKwkJb3BlbiBMT0csJy18JywnZ2l0Jywnc2hvcnRsb2cnLEByZXZzOworCQkkc2hvcnRsb2cgLj0gJF8gd2hpbGUgPExPRz47CisJCWNsb3NlIExPRzsKKwkJJHJldnN0ciA9IGpvaW4oJyAnLCBAcmV2cyk7CisJfQorCisJbXkgQHRvID0gc29ydCBrZXlzICVhdXRob3JzOworCXVubGVzcyAoQHRvKSB7CisJCXByaW50IFNUREVSUiAiZXJyb3I6IE5vIGF1dGhvcnMgaW4gJHJldnN0clxuIjsKKwkJcmV0dXJuOworCX0KKworCW15ICRzdWJqZWN0ID0gIlskcmVwb19uYW1lXSAkcmVmIDogQnVpbGQgRmFpbGVkIjsKKwlteSAkYm9keSA9IDw8RU9GOworUHJvamVjdDogJGdpdF9kaXIKK0JyYW5jaDogICRyZWYKK0NvbW1pdHM6ICRyZXZzdHIKKworJHNob3J0bG9nCitCdWlsZCBPdXRwdXQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJG1zZworRU9GCisJc2VuZF9lbWFpbCgkc3ViamVjdCwgJGJvZHksIFxAdG8pOworfQorCitzdWIgcnVuX2J1aWxkICgkJCQkKQoreworCW15ICgkZ2l0X2RpciwgJHJlZiwgJG9sZCwgJG5ldykgPSBAXzsKKworCWlmICgkZGVidWdfZmxhZykgeworCQlteSBAcmV2cyA9ICgkbmV3KTsKKwkJcHVzaCBAcmV2cywgJy0tbm90JywgQCRvbGQgaWYgQCRvbGQ7CisJCXByaW50ICJCVUlMRElORyAkZ2l0X2RpclxuIjsKKwkJcHJpbnQgIiAgQlJBTkNIOiAkcmVmXG4iOworCQlwcmludCAiICBDT01NSVRTOiAiLCBqb2luKCcgJywgQHJldnMpLCAiXG4iOworCX0KKworCWxvY2FsKCpSLCAqVyk7CisJcGlwZSBSLCBXIG9yIGRpZSAiY2Fubm90IHBpcGUgYnVpbGRlcjogJCEiOworCisJbXkgJGJ1aWxkZXIgPSBmb3JrKCk7CisJaWYgKCFkZWZpbmVkICRidWlsZGVyKSB7CisJCWRpZSAiY2Fubm90IGZvcmsgYnVpbGRlcjogJCEiOworCX0gZWxzaWYgKDAgPT0gJGJ1aWxkZXIpIHsKKwkJY2xvc2UgUjsKKwkJY2xvc2UgU1RESU47b3BlbihTVERJTiwgJy9kZXYvbnVsbCcpOworCQlvcGVuKFNURE9VVCwgJz4mVycpOworCQlvcGVuKFNUREVSUiwgJz4mVycpOworCQlleGl0IGRvX2J1aWxkICRnaXRfZGlyLCAkbmV3OworCX0gZWxzZSB7CisJCWNsb3NlIFc7CisJCW15ICRvdXQgPSAnJzsKKwkJJG91dCAuPSAkXyB3aGlsZSA8Uj47CisJCWNsb3NlIFI7CisJCXdhaXRwaWQgJGJ1aWxkZXIsIDA7CisJCWJ1aWxkX2ZhaWxlZCAkZ2l0X2RpciwgJHJlZiwgJG9sZCwgJG5ldywgJG91dCBpZiAkPzsKKwl9CisKKwlwcmludCAiRE9ORVxuXG4iIGlmICRkZWJ1Z19mbGFnOworfQorCitzdWIgZGFlbW9uX2xvb3AgKCkKK3sKKwlteSAkcnVuID0gMTsKKwlteSAkc3RvcF9zdWIgPSBzdWIgeyRydW4gPSAwfTsKKwkkU0lHe0hVUH0gPSAkc3RvcF9zdWI7CisJJFNJR3tJTlR9ID0gJHN0b3Bfc3ViOworCSRTSUd7VEVSTX0gPSAkc3RvcF9zdWI7CisKKwlta2RpciAkdG1wZGlyLCAwNzU1OworCW15ICRwaWRmaWxlID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdG1wZGlyLCAiY2lkYWVtb24ucGlkIik7CisJb3BlbihPLCAiPiRwaWRmaWxlIik7IHByaW50IE8gIiQkXG4iOyBjbG9zZSBPOworCisJd2hpbGUgKCRydW4pIHsKKwkJbXkgJGVudCA9IHBvcF9xdWV1ZTsKKwkJaWYgKCRlbnQpIHsKKwkJCW15ICgkZ2l0X2RpciwgJHJlZiwgJG9sZCwgJG5ldykgPSBAJGVudDsKKworCQkJJGVudCA9ICRyZWNlbnR7JGdpdF9kaXJ9OworCQkJJHJlY2VudHskZ2l0X2Rpcn0gPSAkZW50ID0gW1tdLCB7fV0gdW5sZXNzICRlbnQ7CisJCQlteSAoJHJlY19hcnIsICRyZWNfaGFzaCkgPSBAJGVudDsKKwkJCW5leHQgaWYgJHJlY19oYXNoLT57JG5ld30rKzsKKwkJCXdoaWxlIChAJHJlY19hcnIgPj0gJHJlY2VudF9zaXplKSB7CisJCQkJbXkgJHRvX2tpbGwgPSBzaGlmdCBAJHJlY19hcnI7CisJCQkJZGVsZXRlICRyZWNfaGFzaC0+eyR0b19raWxsfTsKKwkJCX0KKwkJCXB1c2ggQCRyZWNfYXJyLCAkbmV3OworCisJCQlydW5fYnVpbGQgJGdpdF9kaXIsICRyZWYsICRvbGQsICRuZXc7CisJCX0gZWxzZSB7CisJCQlzbGVlcCAkc2Nhbl9kZWxheTsKKwkJfQorCX0KKworCXVubGluayAkcGlkZmlsZTsKK30KKworJGRlYnVnX2ZsYWcgPSAwOworR2V0T3B0aW9ucygKKwknZGVidWd8ZCcgPT4gXCRkZWJ1Z19mbGFnLAorCSdzbXRwLXVzZXI9cycgPT4gXCRleF91c2VyLAorKSBvciBkaWUgInVzYWdlOiAkMCBbLS1kZWJ1Z10gWy0tc210cC11c2VyPXVzZXJdXG4iOworCiskZXhfcGFzcyA9IGlucHV0X25vZWNobygiJGV4X3VzZXIgU01UUCBwYXNzd29yZDogIikKKwlpZiAoJGV4X3VzZXIgJiYgISRleF9wYXNzKTsKKworaWYgKCRkZWJ1Z19mbGFnKSB7CisJZGFlbW9uX2xvb3A7CisJZXhpdCAwOworfQorCitteSAkZGFlbW9uID0gZm9yaygpOworaWYgKCFkZWZpbmVkICRkYWVtb24pIHsKKwlkaWUgImNhbm5vdCBmb3JrIGRhZW1vbjogJCEiOworfSBlbHNpZiAoMCA9PSAkZGFlbW9uKSB7CisJY2xvc2UgU1RESU47b3BlbihTVERJTiwgJy9kZXYvbnVsbCcpOworCWNsb3NlIFNURE9VVDtvcGVuKFNURE9VVCwgJz4vZGV2L251bGwnKTsKKwljbG9zZSBTVERFUlI7b3BlbihTVERFUlIsICc+L2Rldi9udWxsJyk7CisJZGFlbW9uX2xvb3A7CisJZXhpdCAwOworfSBlbHNlIHsKKwlwcmludCAiRGFlbW9uICRkYWVtb24gcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZC5cbiI7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NvbnRpbnVvdXMvcG9zdC1yZWNlaXZlLWNpbm90aWZ5IGIvY29udHJpYi9jb250aW51b3VzL3Bvc3QtcmVjZWl2ZS1jaW5vdGlmeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGY1YTYwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb250aW51b3VzL3Bvc3QtcmVjZWl2ZS1jaW5vdGlmeQpAQCAtMCwwICsxLDEwNCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIEEgaG9vayB0aGF0IG5vdGlmaWVzIGl0cyBjb21wYW5pb24gY2lkYWVtb24gdGhyb3VnaCBhIHNpbXBsZQorIyBxdWV1ZSBmaWxlIHRoYXQgYSByZWYgaGFzIGJlZW4gdXBkYXRlZCB2aWEgYSBwdXNoIChhY3R1YWxseQorIyBieSBhIHJlY2VpdmUtcGFjayBydW5uaW5nIG9uIHRoZSBzZXJ2ZXIpLgorIworIyBTZWUgY2lkYWVtb24gZm9yIHBlci1yZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZGV0YWlscy4KKyMKKyMgVG8gdXNlIHRoaXMgaG9vaywgYWRkIGl0IGFzIHRoZSBwb3N0LXJlY2VpdmUgaG9vaywgbWFrZSBpdAorIyBleGVjdXRhYmxlLCBhbmQgc2V0IGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisjCisKK2xvY2FsICRFTlZ7UEFUSH0gPSAnL29wdC9naXQvYmluJzsKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBGaWxlOjpTcGVjOwordXNlIFN0b3JhYmxlIHF3KHJldHJpZXZlIG5zdG9yZSk7Cit1c2UgRmNudGwgJzpmbG9jayc7CisKK215ICRnaXRfZGlyID0gRmlsZTo6U3BlYy0+cmVsMmFicygkRU5We0dJVF9ESVJ9KTsKK215ICRxdWV1ZV9uYW1lID0gYGdpdCBjb25maWcgLS1nZXQgYnVpbGRlci5xdWV1ZWA7Y2hvcCAkcXVldWVfbmFtZTsKKyRxdWV1ZV9uYW1lID1+IG0sXihbXlxzXSspJCw7ICRxdWV1ZV9uYW1lID0gJDE7ICMgdW50YWludAordW5sZXNzICgkcXVldWVfbmFtZSkgeworCTEgd2hpbGUgPFNURElOPjsKKwlwcmludCBTVERFUlIgIlxuZXJyb3I6IGJ1aWxkZXIucXVldWUgbm90IHNldC4gIE5vdCBlbnF1ZWluZy5cblxuIjsKKwlleGl0OworfQorbXkgJHF1ZXVlX2xvY2sgPSAiJHF1ZXVlX25hbWUubG9jayI7CisKK215IEBza2lwOworb3BlbiBTLCAiZ2l0IGNvbmZpZyAtLWdldC1hbGwgYnVpbGRlci5za2lwfCI7Cit3aGlsZSAoPFM+KSB7CisJY2hvcDsKKwlwdXNoIEBza2lwLCAkXzsKK30KK2Nsb3NlIFM7CisKK215IEBuZXdfYnJhbmNoX2Jhc2U7CitvcGVuIFMsICJnaXQgY29uZmlnIC0tZ2V0LWFsbCBidWlsZGVyLm5ld0JyYW5jaEJhc2V8IjsKK3doaWxlICg8Uz4pIHsKKwljaG9wOworCXB1c2ggQG5ld19icmFuY2hfYmFzZSwgJF87Cit9CitjbG9zZSBTOworCitzdWIgc2tpcCAoJCkKK3sKKwlsb2NhbCAkXyA9IHNoaWZ0OworCWZvcmVhY2ggbXkgJHAgKEBza2lwKSB7CisJCXJldHVybiAxIGlmIC9eJHAvOworCX0KKwkwOworfQorCitvcGVuIExPQ0ssICI+JHF1ZXVlX2xvY2siIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkcXVldWVfbG9jazogJCEiOworZmxvY2sgTE9DSywgTE9DS19FWDsKKworbXkgJHF1ZXVlID0gLWYgJHF1ZXVlX25hbWUgPyByZXRyaWV2ZSAkcXVldWVfbmFtZSA6IFtdOworbXkgJWV4aXN0aW5nOworZm9yZWFjaCBteSAkciAoQCRxdWV1ZSkgeworCW15ICgkZ2QsICRyZWYpID0gQCRyOworCSRleGlzdGluZ3skZ2R9eyRyZWZ9ID0gJHI7Cit9CisKK215IEBuZXdfYnJhbmNoX2NvbW1pdHM7CitteSAkbG9hZGVkX25ld19icmFuY2hfY29tbWl0cyA9IDA7CisKK3doaWxlICg8U1RESU4+KSB7CisJY2hvcDsKKwlteSAoJG9sZCwgJG5ldywgJHJlZikgPSBzcGxpdCAvIC8sICRfLCAzOworCisJbmV4dCBpZiAkb2xkIGVxICRuZXc7CisJbmV4dCBpZiAkbmV3ID1+IC9eMHs0MH0kLzsKKwluZXh0IGlmIHNraXAgJHJlZjsKKworCW15ICRyID0gJGV4aXN0aW5neyRnaXRfZGlyfXskcmVmfTsKKwlpZiAoJHIpIHsKKwkJJHItPlszXSA9ICRuZXc7CisJfSBlbHNlIHsKKwkJaWYgKCRvbGQgPX4gL14wezQwfSQvKSB7CisJCQlpZiAoISRsb2FkZWRfbmV3X2JyYW5jaF9jb21taXRzICYmIEBuZXdfYnJhbmNoX2Jhc2UpIHsKKwkJCQlvcGVuIE0sJy18JywnZ2l0Jywnc2hvdy1yZWYnLEBuZXdfYnJhbmNoX2Jhc2U7CisJCQkJd2hpbGUgKDxNPikgeworCQkJCQkoJF8pID0gc3BsaXQgLyAvLCAkXzsKKwkJCQkJcHVzaCBAbmV3X2JyYW5jaF9jb21taXRzLCAkXzsKKwkJCQl9CisJCQkJY2xvc2UgTTsKKwkJCQkkbG9hZGVkX25ld19icmFuY2hfY29tbWl0cyA9IDE7CisJCQl9CisJCQkkb2xkID0gW0BuZXdfYnJhbmNoX2NvbW1pdHNdOworCQl9IGVsc2UgeworCQkJJG9sZCA9IFskb2xkXTsKKwkJfQorCisJCSRyID0gWyRnaXRfZGlyLCAkcmVmLCAkb2xkLCAkbmV3XTsKKwkJJGV4aXN0aW5neyRnaXRfZGlyfXskcmVmfSA9ICRyOworCQlwdXNoIEAkcXVldWUsICRyOworCX0KK30KK25zdG9yZSAkcXVldWUsICRxdWV1ZV9uYW1lOworCitmbG9jayBMT0NLLCBMT0NLX1VOOworY2xvc2UgTE9DSzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29udmVydC1vYmplY3RzL2NvbnZlcnQtb2JqZWN0cy5jIGIvY29udHJpYi9jb252ZXJ0LW9iamVjdHMvY29udmVydC1vYmplY3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiNTdiZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29udmVydC1vYmplY3RzL2NvbnZlcnQtb2JqZWN0cy5jCkBAIC0wLDAgKzEsMzI5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorCitzdHJ1Y3QgZW50cnkgeworCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCXVuc2lnbmVkIGNoYXIgbmV3X3NoYTFbMjBdOworCWludCBjb252ZXJ0ZWQ7Cit9OworCisjZGVmaW5lIE1BWE9CSkVDVFMgKDEwMDAwMDApCisKK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKmNvbnZlcnRbTUFYT0JKRUNUU107CitzdGF0aWMgaW50IG5yX2NvbnZlcnQ7CisKK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKiBjb252ZXJ0X2VudHJ5KHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitzdGF0aWMgc3RydWN0IGVudHJ5ICppbnNlcnRfbmV3KHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBwb3MpCit7CisJc3RydWN0IGVudHJ5ICpuZXcgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZW50cnkpKTsKKwloYXNoY3B5KG5ldy0+b2xkX3NoYTEsIHNoYTEpOworCW1lbW1vdmUoY29udmVydCArIHBvcyArIDEsIGNvbnZlcnQgKyBwb3MsIChucl9jb252ZXJ0IC0gcG9zKSAqIHNpemVvZihzdHJ1Y3QgZW50cnkgKikpOworCWNvbnZlcnRbcG9zXSA9IG5ldzsKKwlucl9jb252ZXJ0Kys7CisJaWYgKG5yX2NvbnZlcnQgPT0gTUFYT0JKRUNUUykKKwkJZGllKCJ5b3UncmUga2lkZGluZyBtZSAtIGhpdCBtYXhpbXVtIG9iamVjdCBsaW1pdCIpOworCXJldHVybiBuZXc7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKmxvb2t1cF9lbnRyeSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBsb3cgPSAwLCBoaWdoID0gbnJfY29udmVydDsKKworCXdoaWxlIChsb3cgPCBoaWdoKSB7CisJCWludCBuZXh0ID0gKGxvdyArIGhpZ2gpIC8gMjsKKwkJc3RydWN0IGVudHJ5ICpuID0gY29udmVydFtuZXh0XTsKKwkJaW50IGNtcCA9IGhhc2hjbXAoc2hhMSwgbi0+b2xkX3NoYTEpOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBuOworCQlpZiAoY21wIDwgMCkgeworCQkJaGlnaCA9IG5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlsb3cgPSBuZXh0KzE7CisJfQorCXJldHVybiBpbnNlcnRfbmV3KHNoYTEsIGxvdyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfYmluYXJ5X3NoYTEodm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBlbnRyeSAqZW50cnkgPSBjb252ZXJ0X2VudHJ5KGJ1ZmZlcik7CisJaGFzaGNweShidWZmZXIsIGVudHJ5LT5uZXdfc2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfYXNjaWlfc2hhMSh2b2lkICpidWZmZXIpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgZW50cnkgKmVudHJ5OworCisJaWYgKGdldF9zaGExX2hleChidWZmZXIsIHNoYTEpKQorCQlkaWUoImV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIiwgKGNoYXIgKikgYnVmZmVyKTsKKwllbnRyeSA9IGNvbnZlcnRfZW50cnkoc2hhMSk7CisJbWVtY3B5KGJ1ZmZlciwgc2hhMV90b19oZXgoZW50cnktPm5ld19zaGExKSwgNDApOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnZlcnRfbW9kZSh1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgbmV3bW9kZTsKKworCW5ld21vZGUgPSBtb2RlICYgU19JRk1UOworCWlmIChTX0lTUkVHKG1vZGUpKQorCQluZXdtb2RlIHw9IChtb2RlICYgMDEwMCkgPyAwNzU1IDogMDY0NDsKKwlyZXR1cm4gbmV3bW9kZTsKK30KKworc3RhdGljIGludCB3cml0ZV9zdWJkaXJlY3Rvcnkodm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwljaGFyICpuZXcgPSB4bWFsbG9jKHNpemUpOworCXVuc2lnbmVkIGxvbmcgbmV3bGVuID0gMDsKKwl1bnNpZ25lZCBsb25nIHVzZWQ7CisKKwl1c2VkID0gMDsKKwl3aGlsZSAoc2l6ZSkgeworCQlpbnQgbGVuID0gMjEgKyBzdHJsZW4oYnVmZmVyKTsKKwkJY2hhciAqcGF0aCA9IHN0cmNocihidWZmZXIsICcgJyk7CisJCXVuc2lnbmVkIGNoYXIgKnNoYTE7CisJCXVuc2lnbmVkIGludCBtb2RlOworCQljaGFyICpzbGFzaCwgKm9yaWdwYXRoOworCisJCWlmICghcGF0aCB8fCBzdHJ0b3VsX3VpKGJ1ZmZlciwgOCwgJm1vZGUpKQorCQkJZGllKCJiYWQgdHJlZSBjb252ZXJzaW9uIik7CisJCW1vZGUgPSBjb252ZXJ0X21vZGUobW9kZSk7CisJCXBhdGgrKzsKKwkJaWYgKG1lbWNtcChwYXRoLCBiYXNlLCBiYXNlbGVuKSkKKwkJCWJyZWFrOworCQlvcmlncGF0aCA9IHBhdGg7CisJCXBhdGggKz0gYmFzZWxlbjsKKwkJc2xhc2ggPSBzdHJjaHIocGF0aCwgJy8nKTsKKwkJaWYgKCFzbGFzaCkgeworCQkJbmV3bGVuICs9IHNwcmludGYobmV3ICsgbmV3bGVuLCAiJW8gJXMiLCBtb2RlLCBwYXRoKTsKKwkJCW5ld1tuZXdsZW4rK10gPSAnXDAnOworCQkJaGFzaGNweSgodW5zaWduZWQgY2hhciAqKW5ldyArIG5ld2xlbiwgKHVuc2lnbmVkIGNoYXIgKikgYnVmZmVyICsgbGVuIC0gMjApOworCQkJbmV3bGVuICs9IDIwOworCisJCQl1c2VkICs9IGxlbjsKKwkJCXNpemUgLT0gbGVuOworCQkJYnVmZmVyID0gKGNoYXIgKikgYnVmZmVyICsgbGVuOworCQkJY29udGludWU7CisJCX0KKworCQluZXdsZW4gKz0gc3ByaW50ZihuZXcgKyBuZXdsZW4sICIlbyAlLipzIiwgU19JRkRJUiwgKGludCkoc2xhc2ggLSBwYXRoKSwgcGF0aCk7CisJCW5ld1tuZXdsZW4rK10gPSAwOworCQlzaGExID0gKHVuc2lnbmVkIGNoYXIgKikobmV3ICsgbmV3bGVuKTsKKwkJbmV3bGVuICs9IDIwOworCisJCWxlbiA9IHdyaXRlX3N1YmRpcmVjdG9yeShidWZmZXIsIHNpemUsIG9yaWdwYXRoLCBzbGFzaC1vcmlncGF0aCsxLCBzaGExKTsKKworCQl1c2VkICs9IGxlbjsKKwkJc2l6ZSAtPSBsZW47CisJCWJ1ZmZlciA9IChjaGFyICopIGJ1ZmZlciArIGxlbjsKKwl9CisKKwl3cml0ZV9zaGExX2ZpbGUobmV3LCBuZXdsZW4sIHRyZWVfdHlwZSwgcmVzdWx0X3NoYTEpOworCWZyZWUobmV3KTsKKwlyZXR1cm4gdXNlZDsKK30KKworc3RhdGljIHZvaWQgY29udmVydF90cmVlKHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwl2b2lkICpvcmlnX2J1ZmZlciA9IGJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIG9yaWdfc2l6ZSA9IHNpemU7CisKKwl3aGlsZSAoc2l6ZSkgeworCQlzaXplX3QgbGVuID0gMStzdHJsZW4oYnVmZmVyKTsKKworCQljb252ZXJ0X2JpbmFyeV9zaGExKChjaGFyICopIGJ1ZmZlciArIGxlbik7CisKKwkJbGVuICs9IDIwOworCQlpZiAobGVuID4gc2l6ZSkKKwkJCWRpZSgiY29ycnVwdCB0cmVlIG9iamVjdCIpOworCQlzaXplIC09IGxlbjsKKwkJYnVmZmVyID0gKGNoYXIgKikgYnVmZmVyICsgbGVuOworCX0KKworCXdyaXRlX3N1YmRpcmVjdG9yeShvcmlnX2J1ZmZlciwgb3JpZ19zaXplLCAiIiwgMCwgcmVzdWx0X3NoYTEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYXJzZV9vbGRzdHlsZV9kYXRlKGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwljaGFyIGMsICpwOworCWNoYXIgYnVmZmVyWzEwMF07CisJc3RydWN0IHRtIHRtOworCWNvbnN0IGNoYXIgKmZvcm1hdHNbXSA9IHsKKwkJIiVjIiwKKwkJIiVhICViICVkICVUIiwKKwkJIiVaIiwKKwkJIiVZIiwKKwkJIiAlWSIsCisJCU5VTEwKKwl9OworCS8qIFdlIG9ubHkgZXZlciBkaWQgdHdvIHRpbWV6b25lcyBpbiB0aGUgYmFkIG9sZCBmb3JtYXQgLi4gKi8KKwljb25zdCBjaGFyICp0aW1lem9uZXNbXSA9IHsKKwkJIlBEVCIsICJQU1QiLCAiQ0VTVCIsIE5VTEwKKwl9OworCWNvbnN0IGNoYXIgKipmbXQgPSBmb3JtYXRzOworCisJcCA9IGJ1ZmZlcjsKKwl3aGlsZSAoaXNzcGFjZShjID0gKmJ1ZikpCisJCWJ1ZisrOworCXdoaWxlICgoYyA9ICpidWYrKykgIT0gJ1xuJykKKwkJKnArKyA9IGM7CisJKnArKyA9IDA7CisJYnVmID0gYnVmZmVyOworCW1lbXNldCgmdG0sIDAsIHNpemVvZih0bSkpOworCWRvIHsKKwkJY29uc3QgY2hhciAqbmV4dCA9IHN0cnB0aW1lKGJ1ZiwgKmZtdCwgJnRtKTsKKwkJaWYgKG5leHQpIHsKKwkJCWlmICghKm5leHQpCisJCQkJcmV0dXJuIG1rdGltZSgmdG0pOworCQkJYnVmID0gbmV4dDsKKwkJfSBlbHNlIHsKKwkJCWNvbnN0IGNoYXIgKipwID0gdGltZXpvbmVzOworCQkJd2hpbGUgKGlzc3BhY2UoKmJ1ZikpCisJCQkJYnVmKys7CisJCQl3aGlsZSAoKnApIHsKKwkJCQlpZiAoIW1lbWNtcChidWYsICpwLCBzdHJsZW4oKnApKSkgeworCQkJCQlidWYgKz0gc3RybGVuKCpwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXArKzsKKwkJCX0KKwkJfQorCQlmbXQrKzsKKwl9IHdoaWxlICgqYnVmICYmICpmbXQpOworCXByaW50ZigibGVmdDogJXNcbiIsIGJ1Zik7CisJcmV0dXJuIG1rdGltZSgmdG0pOworfQorCitzdGF0aWMgaW50IGNvbnZlcnRfZGF0ZV9saW5lKGNoYXIgKmRzdCwgdm9pZCAqKmJ1ZiwgdW5zaWduZWQgbG9uZyAqc3ApCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gKnNwOworCWNoYXIgKmxpbmUgPSAqYnVmOworCWNoYXIgKm5leHQgPSBzdHJjaHIobGluZSwgJ1xuJyk7CisJY2hhciAqZGF0ZSA9IHN0cmNocihsaW5lLCAnPicpOworCWludCBsZW47CisKKwlpZiAoIW5leHQgfHwgIWRhdGUpCisJCWRpZSgibWlzc2luZyBvciBiYWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lICVzIiwgbGluZSk7CisJbmV4dCsrOyBkYXRlICs9IDI7CisKKwkqYnVmID0gbmV4dDsKKwkqc3AgPSBzaXplIC0gKG5leHQgLSBsaW5lKTsKKworCWxlbiA9IGRhdGUgLSBsaW5lOworCW1lbWNweShkc3QsIGxpbmUsIGxlbik7CisJZHN0ICs9IGxlbjsKKworCS8qIElzIGl0IGFscmVhZHkgaW4gbmV3IGZvcm1hdD8gKi8KKwlpZiAoaXNkaWdpdCgqZGF0ZSkpIHsKKwkJaW50IGRhdGVsZW4gPSBuZXh0IC0gZGF0ZTsKKwkJbWVtY3B5KGRzdCwgZGF0ZSwgZGF0ZWxlbik7CisJCXJldHVybiBsZW4gKyBkYXRlbGVuOworCX0KKworCS8qCisJICogSGFja3kgaGFja3k6IG9uZSBvZiB0aGUgc3BhcnNlIG9sZC1zdHlsZSBjb21taXRzIGRvZXMgbm90IGhhdmUKKwkgKiBhbnkgZGF0ZSBhdCBhbGwsIGJ1dCB3ZSBjYW4gZmFrZSBpdCBieSB1c2luZyB0aGUgY29tbWl0dGVyIGRhdGUuCisJICovCisJaWYgKCpkYXRlID09ICdcbicgJiYgc3RyY2hyKG5leHQsICc+JykpCisJCWRhdGUgPSBzdHJjaHIobmV4dCwgJz4nKSsyOworCisJcmV0dXJuIGxlbiArIHNwcmludGYoZHN0LCAiJWx1IC0wNzAwXG4iLCBwYXJzZV9vbGRzdHlsZV9kYXRlKGRhdGUpKTsKK30KKworc3RhdGljIHZvaWQgY29udmVydF9kYXRlKHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwljaGFyICpuZXcgPSB4bWFsbG9jKHNpemUgKyAxMDApOworCXVuc2lnbmVkIGxvbmcgbmV3bGVuID0gMDsKKworCS8qICJ0cmVlIDxzaGExPlxuIiAqLworCW1lbWNweShuZXcgKyBuZXdsZW4sIGJ1ZmZlciwgNDYpOworCW5ld2xlbiArPSA0NjsKKwlidWZmZXIgPSAoY2hhciAqKSBidWZmZXIgKyA0NjsKKwlzaXplIC09IDQ2OworCisJLyogInBhcmVudCA8c2hhMT5cbiIgKi8KKwl3aGlsZSAoIW1lbWNtcChidWZmZXIsICJwYXJlbnQgIiwgNykpIHsKKwkJbWVtY3B5KG5ldyArIG5ld2xlbiwgYnVmZmVyLCA0OCk7CisJCW5ld2xlbiArPSA0ODsKKwkJYnVmZmVyID0gKGNoYXIgKikgYnVmZmVyICsgNDg7CisJCXNpemUgLT0gNDg7CisJfQorCisJLyogImF1dGhvciB4eXogPHh5ej4gZGF0ZSIgKi8KKwluZXdsZW4gKz0gY29udmVydF9kYXRlX2xpbmUobmV3ICsgbmV3bGVuLCAmYnVmZmVyLCAmc2l6ZSk7CisJLyogImNvbW1pdHRlciB4eXogPHh5ej4gZGF0ZSIgKi8KKwluZXdsZW4gKz0gY29udmVydF9kYXRlX2xpbmUobmV3ICsgbmV3bGVuLCAmYnVmZmVyLCAmc2l6ZSk7CisKKwkvKiBSZXN0ICovCisJbWVtY3B5KG5ldyArIG5ld2xlbiwgYnVmZmVyLCBzaXplKTsKKwluZXdsZW4gKz0gc2l6ZTsKKworCXdyaXRlX3NoYTFfZmlsZShuZXcsIG5ld2xlbiwgY29tbWl0X3R5cGUsIHJlc3VsdF9zaGExKTsKKwlmcmVlKG5ldyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfY29tbWl0KHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwl2b2lkICpvcmlnX2J1ZmZlciA9IGJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIG9yaWdfc2l6ZSA9IHNpemU7CisKKwlpZiAobWVtY21wKGJ1ZmZlciwgInRyZWUgIiwgNSkpCisJCWRpZSgiQmFkIGNvbW1pdCAnJXMnIiwgKGNoYXIgKikgYnVmZmVyKTsKKwljb252ZXJ0X2FzY2lpX3NoYTEoKGNoYXIgKikgYnVmZmVyICsgNSk7CisJYnVmZmVyID0gKGNoYXIgKikgYnVmZmVyICsgNDY7ICAgIC8qICJ0cmVlICIgKyAiaGV4IHNoYTEiICsgIlxuIiAqLworCXdoaWxlICghbWVtY21wKGJ1ZmZlciwgInBhcmVudCAiLCA3KSkgeworCQljb252ZXJ0X2FzY2lpX3NoYTEoKGNoYXIgKikgYnVmZmVyICsgNyk7CisJCWJ1ZmZlciA9IChjaGFyICopIGJ1ZmZlciArIDQ4OworCX0KKwljb252ZXJ0X2RhdGUob3JpZ19idWZmZXIsIG9yaWdfc2l6ZSwgcmVzdWx0X3NoYTEpOworfQorCitzdGF0aWMgc3RydWN0IGVudHJ5ICogY29udmVydF9lbnRyeSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBlbnRyeSAqZW50cnkgPSBsb29rdXBfZW50cnkoc2hhMSk7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXZvaWQgKmJ1ZmZlciwgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJaWYgKGVudHJ5LT5jb252ZXJ0ZWQpCisJCXJldHVybiBlbnRyeTsKKwlkYXRhID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWRhdGEpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgb2JqZWN0ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJYnVmZmVyID0geG1hbGxvYyhzaXplKTsKKwltZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKworCWlmICh0eXBlID09IE9CSl9CTE9CKSB7CisJCXdyaXRlX3NoYTFfZmlsZShidWZmZXIsIHNpemUsIGJsb2JfdHlwZSwgZW50cnktPm5ld19zaGExKTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gT0JKX1RSRUUpCisJCWNvbnZlcnRfdHJlZShidWZmZXIsIHNpemUsIGVudHJ5LT5uZXdfc2hhMSk7CisJZWxzZSBpZiAodHlwZSA9PSBPQkpfQ09NTUlUKQorCQljb252ZXJ0X2NvbW1pdChidWZmZXIsIHNpemUsIGVudHJ5LT5uZXdfc2hhMSk7CisJZWxzZQorCQlkaWUoInVua25vd24gb2JqZWN0IHR5cGUgJWQgaW4gJXMiLCB0eXBlLCBzaGExX3RvX2hleChzaGExKSk7CisJZW50cnktPmNvbnZlcnRlZCA9IDE7CisJZnJlZShidWZmZXIpOworCWZyZWUoZGF0YSk7CisJcmV0dXJuIGVudHJ5OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgZW50cnkgKmVudHJ5OworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2UoImdpdC1jb252ZXJ0LW9iamVjdHMgPHNoYTE+Iik7CisJaWYgKGdldF9zaGExKGFyZ3ZbMV0sIHNoYTEpKQorCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJndlsxXSk7CisKKwllbnRyeSA9IGNvbnZlcnRfZW50cnkoc2hhMSk7CisJcHJpbnRmKCJuZXcgc2hhMTogJXNcbiIsIHNoYTFfdG9faGV4KGVudHJ5LT5uZXdfc2hhMSkpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb252ZXJ0LW9iamVjdHMvZ2l0LWNvbnZlcnQtb2JqZWN0cy50eHQgYi9jb250cmliL2NvbnZlcnQtb2JqZWN0cy9naXQtY29udmVydC1vYmplY3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTY1ZDgzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb252ZXJ0LW9iamVjdHMvZ2l0LWNvbnZlcnQtb2JqZWN0cy50eHQKQEAgLTAsMCArMSwyOSBAQAorZ2l0LWNvbnZlcnQtb2JqZWN0cygxKQorPT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY29udmVydC1vYmplY3RzIC0gQ29udmVydHMgb2xkLXN0eWxlIGdpdCByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0LWNvbnZlcnQtb2JqZWN0cycKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDb252ZXJ0cyBvbGQtc3R5bGUgZ2l0IHJlcG9zaXRvcnkgdG8gdGhlIGxhdGVzdCBmb3JtYXQKKworCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IERhdmlkIEdyZWF2ZXMsIEp1bmlvIEMgSGFtYW5vIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nLy5naXRpZ25vcmUgYi9jb250cmliL2NyZWRlbnRpYWwvZ25vbWUta2V5cmluZy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZDhmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvZ25vbWUta2V5cmluZy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK2dpdC1jcmVkZW50aWFsLWdub21lLWtleXJpbmcKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL01ha2VmaWxlIGIvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1NjFkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsMjQgQEAKK01BSU46PWdpdC1jcmVkZW50aWFsLWdub21lLWtleXJpbmcKK2FsbDo6ICQoTUFJTikKKworQ0MgPSBnY2MKK1JNID0gcm0gLWYKK0NGTEFHUyA9IC1nIC1PMiAtV2FsbAorCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworSU5DUzo9JChzaGVsbCBwa2ctY29uZmlnIC0tY2ZsYWdzIGdub21lLWtleXJpbmctMSkKK0xJQlM6PSQoc2hlbGwgcGtnLWNvbmZpZyAtLWxpYnMgZ25vbWUta2V5cmluZy0xKQorCitTUkNTOj0kKE1BSU4pLmMKK09CSlM6PSQoU1JDUzouYz0ubykKKworJS5vOiAlLmMKKwkkKENDKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChJTkNTKSAtbyAkQCAtYyAkPAorCiskKE1BSU4pOiAkKE9CSlMpCisJJChDQykgLW8gJEAgJChMREZMQUdTKSAkXiAkKExJQlMpCisKK2NsZWFuOgorCUAkKFJNKSAkKE1BSU4pICQoT0JKUykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL2dpdC1jcmVkZW50aWFsLWdub21lLWtleXJpbmcuYyBiL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL2dpdC1jcmVkZW50aWFsLWdub21lLWtleXJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWY2MWM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvZ2l0LWNyZWRlbnRpYWwtZ25vbWUta2V5cmluZy5jCkBAIC0wLDAgKzEsNDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEpvaG4gU3pha21laXN0ZXIgPGpvaG5Ac3pha21laXN0ZXIubmV0PgorICogICAgICAgICAgICAgICAyMDEyIFBoaWxpcHAgQS4gSGFydG1hbm4gPHBhaEBxby5jeD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKgorICogQ3JlZGl0czoKKyAqIC0gR05PTUUgS2V5cmluZyBBUEkgaGFuZGxpbmcgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEpvaG4gU3pha21laXN0ZXIKKyAqIC0gcG9ydGVkIHRvIGNyZWRlbnRpYWwgaGVscGVyIEFQSSBieSBQaGlsaXBwIEEuIEhhcnRtYW5uCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxnbm9tZS1rZXlyaW5nLmg+CisKKy8qCisgKiBUaGlzIGNyZWRlbnRpYWwgc3RydWN0IGFuZCBBUEkgaXMgc2ltcGxpZmllZCBmcm9tIGdpdCdzIGNyZWRlbnRpYWwue2gsY30KKyAqLworc3RydWN0IGNyZWRlbnRpYWwKK3sKKwljaGFyICAgICAgICAgICpwcm90b2NvbDsKKwljaGFyICAgICAgICAgICpob3N0OworCXVuc2lnbmVkIHNob3J0IHBvcnQ7CisJY2hhciAgICAgICAgICAqcGF0aDsKKwljaGFyICAgICAgICAgICp1c2VybmFtZTsKKwljaGFyICAgICAgICAgICpwYXNzd29yZDsKK307CisKKyNkZWZpbmUgQ1JFREVOVElBTF9JTklUIFwKKyAgeyBOVUxMLE5VTEwsMCxOVUxMLE5VTEwsTlVMTCB9CisKK3ZvaWQgY3JlZGVudGlhbF9pbml0KHN0cnVjdCBjcmVkZW50aWFsICpjKTsKK3ZvaWQgY3JlZGVudGlhbF9jbGVhcihzdHJ1Y3QgY3JlZGVudGlhbCAqYyk7CitpbnQgIGNyZWRlbnRpYWxfcmVhZChzdHJ1Y3QgY3JlZGVudGlhbCAqYyk7Cit2b2lkIGNyZWRlbnRpYWxfd3JpdGUoY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKmMpOworCit0eXBlZGVmIGludCAoKmNyZWRlbnRpYWxfb3BfY2IpKHN0cnVjdCBjcmVkZW50aWFsKik7CisKK3N0cnVjdCBjcmVkZW50aWFsX29wZXJhdGlvbgoreworCWNoYXIgICAgICAgICAgICAgKm5hbWU7CisJY3JlZGVudGlhbF9vcF9jYiBvcDsKK307CisKKyNkZWZpbmUgQ1JFREVOVElBTF9PUF9FTkQgXAorICB7IE5VTEwsTlVMTCB9CisKKy8qCisgKiBUYWJsZSB3aXRoIG9wZXJhdGlvbiBjYWxsYmFja3MgaXMgZGVmaW5lZCBpbiBjb25jcmV0ZQorICogY3JlZGVudGlhbCBoZWxwZXIgaW1wbGVtZW50YXRpb24gYW5kIGNvbnRhaW5zIGVudHJpZXMKKyAqIGxpa2UgeyAiZ2V0IiwgZnVuY3Rpb25fdG9fZ2V0X2NyZWRlbnRpYWwgfSB0ZXJtaW5hdGVkCisgKiBieSBDUkVERU5USUFMX09QX0VORC4KKyAqLworc3RydWN0IGNyZWRlbnRpYWxfb3BlcmF0aW9uIGNvbnN0IGNyZWRlbnRpYWxfaGVscGVyX29wc1tdOworCisvKiAtLS0tLS0tLS0tLS0tLS0tIGNvbW1vbiBoZWxwZXIgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Bhc3N3b3JkKGNoYXIgKnBhc3N3b3JkKQoreworCWNoYXIgKmMgPSBwYXNzd29yZDsKKwlpZiAoIXBhc3N3b3JkKQorCQlyZXR1cm47CisKKwl3aGlsZSAoKmMpICpjKysgPSAnXDAnOworCWZyZWUocGFzc3dvcmQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2FybmluZyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiAiKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iICk7CisJdmFfZW5kKGFwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVycm9yKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiAiKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iICk7CisJdmFfZW5kKGFwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpZShjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsZm10KTsKKwllcnJvcihmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpZV9lcnJubyhpbnQgZXJyKQoreworCWVycm9yKCIlcyIsIHN0cmVycm9yKGVycikpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIGlubGluZSBjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKwljaGFyICpyZXQgPSBzdHJkdXAoc3RyKTsKKwlpZiAoIXJldCkKKwkJZGllX2Vycm5vKGVycm5vKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIEdOT01FIEtleXJpbmcgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGNyZWF0ZSBhIHNwZWNpYWwga2V5cmluZyBvcHRpb24gc3RyaW5nLCBpZiBwYXRoIGlzIGdpdmVuICovCitzdGF0aWMgY2hhcioga2V5cmluZ19vYmplY3Qoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJY2hhciogb2JqZWN0ID0gTlVMTDsKKworCWlmICghYy0+cGF0aCkKKwkJcmV0dXJuIG9iamVjdDsKKworCW9iamVjdCA9IChjaGFyKikgbWFsbG9jKHN0cmxlbihjLT5ob3N0KStzdHJsZW4oYy0+cGF0aCkrOCk7CisJaWYoIW9iamVjdCkKKwkJZGllX2Vycm5vKGVycm5vKTsKKworCWlmKGMtPnBvcnQpCisJCXNwcmludGYob2JqZWN0LCIlczolaGQvJXMiLGMtPmhvc3QsYy0+cG9ydCxjLT5wYXRoKTsKKwllbHNlCisJCXNwcmludGYob2JqZWN0LCIlcy8lcyIsYy0+aG9zdCxjLT5wYXRoKTsKKworCXJldHVybiBvYmplY3Q7Cit9CisKK2ludCBrZXlyaW5nX2dldChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwljaGFyKiBvYmplY3QgPSBOVUxMOworCUdMaXN0ICplbnRyaWVzOworCUdub21lS2V5cmluZ05ldHdvcmtQYXNzd29yZERhdGEgKnBhc3N3b3JkX2RhdGE7CisJR25vbWVLZXlyaW5nUmVzdWx0IHJlc3VsdDsKKworCWlmICghYy0+cHJvdG9jb2wgfHwgIShjLT5ob3N0IHx8IGMtPnBhdGgpKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJb2JqZWN0ID0ga2V5cmluZ19vYmplY3QoYyk7CisKKwlyZXN1bHQgPSBnbm9tZV9rZXlyaW5nX2ZpbmRfbmV0d29ya19wYXNzd29yZF9zeW5jKAorCQkJCWMtPnVzZXJuYW1lLAorCQkJCU5VTEwgLyogZG9tYWluICovLAorCQkJCWMtPmhvc3QsCisJCQkJb2JqZWN0LAorCQkJCWMtPnByb3RvY29sLAorCQkJCU5VTEwgLyogYXV0aHR5cGUgKi8sCisJCQkJYy0+cG9ydCwKKwkJCQkmZW50cmllcyk7CisKKwlmcmVlKG9iamVjdCk7CisKKwlpZiAocmVzdWx0ID09IEdOT01FX0tFWVJJTkdfUkVTVUxUX05PX01BVENIKQorCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCisJaWYgKHJlc3VsdCA9PSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9DQU5DRUxMRUQpCisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisKKwlpZiAocmVzdWx0ICE9IEdOT01FX0tFWVJJTkdfUkVTVUxUX09LKSB7CisJCWVycm9yKCIlcyIsZ25vbWVfa2V5cmluZ19yZXN1bHRfdG9fbWVzc2FnZShyZXN1bHQpKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwkvKiBwaWNrIHRoZSBmaXJzdCBvbmUgZnJvbSB0aGUgbGlzdCAqLworCXBhc3N3b3JkX2RhdGEgPSAoR25vbWVLZXlyaW5nTmV0d29ya1Bhc3N3b3JkRGF0YSAqKSBlbnRyaWVzLT5kYXRhOworCisJZnJlZV9wYXNzd29yZChjLT5wYXNzd29yZCk7CisJYy0+cGFzc3dvcmQgPSB4c3RyZHVwKHBhc3N3b3JkX2RhdGEtPnBhc3N3b3JkKTsKKworCWlmICghYy0+dXNlcm5hbWUpCisJCWMtPnVzZXJuYW1lID0geHN0cmR1cChwYXNzd29yZF9kYXRhLT51c2VyKTsKKworCWdub21lX2tleXJpbmdfbmV0d29ya19wYXNzd29yZF9saXN0X2ZyZWUoZW50cmllcyk7CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCisKK2ludCBrZXlyaW5nX3N0b3JlKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWd1aW50MzIgaXRlbV9pZDsKKwljaGFyICAqb2JqZWN0ID0gTlVMTDsKKworCS8qCisJICogU2FuaXR5IGNoZWNrIHRoYXQgd2hhdCB3ZSBhcmUgc3RvcmluZyBpcyBhY3R1YWxseSBzZW5zaWJsZS4KKwkgKiBJbiBwYXJ0aWN1bGFyLCB3ZSBjYW4ndCBtYWtlIGEgVVJMIHdpdGhvdXQgYSBwcm90b2NvbCBmaWVsZC4KKwkgKiBXaXRob3V0IGVpdGhlciBhIGhvc3Qgb3IgcGF0aG5hbWUgKGRlcGVuZGluZyBvbiB0aGUgc2NoZW1lKSwKKwkgKiB3ZSBoYXZlIG5vIHByaW1hcnkga2V5LiBBbmQgd2l0aG91dCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwKKwkgKiB3ZSBhcmUgbm90IGFjdHVhbGx5IHN0b3JpbmcgYSBjcmVkZW50aWFsLgorCSAqLworCWlmICghYy0+cHJvdG9jb2wgfHwgIShjLT5ob3N0IHx8IGMtPnBhdGgpIHx8CisJICAgICFjLT51c2VybmFtZSB8fCAhYy0+cGFzc3dvcmQpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwlvYmplY3QgPSBrZXlyaW5nX29iamVjdChjKTsKKworCWdub21lX2tleXJpbmdfc2V0X25ldHdvcmtfcGFzc3dvcmRfc3luYygKKwkJCQlHTk9NRV9LRVlSSU5HX0RFRkFVTFQsCisJCQkJYy0+dXNlcm5hbWUsCisJCQkJTlVMTCAvKiBkb21haW4gKi8sCisJCQkJYy0+aG9zdCwKKwkJCQlvYmplY3QsCisJCQkJYy0+cHJvdG9jb2wsCisJCQkJTlVMTCAvKiBhdXRodHlwZSAqLywKKwkJCQljLT5wb3J0LAorCQkJCWMtPnBhc3N3b3JkLAorCQkJCSZpdGVtX2lkKTsKKworCWZyZWUob2JqZWN0KTsKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitpbnQga2V5cmluZ19lcmFzZShzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwljaGFyICAqb2JqZWN0ID0gTlVMTDsKKwlHTGlzdCAqZW50cmllczsKKwlHbm9tZUtleXJpbmdOZXR3b3JrUGFzc3dvcmREYXRhICpwYXNzd29yZF9kYXRhOworCUdub21lS2V5cmluZ1Jlc3VsdCByZXN1bHQ7CisKKwkvKgorCSAqIFNhbml0eSBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZXRoaW5nIHRvIG1hdGNoCisJICogYWdhaW5zdC4gVGhlIGlucHV0IHdlIGdldCBpcyBhIHJlc3RyaWN0aXZlIHBhdHRlcm4sCisJICogc28gdGVjaG5pY2FsbHkgYSBibGFuayBjcmVkZW50aWFsIG1lYW5zICJlcmFzZSBldmVyeXRoaW5nIi4KKwkgKiBCdXQgaXQgaXMgdG9vIGVhc3kgdG8gYWNjaWRlbnRhbGx5IHNlbmQgdGhpcywgc2luY2UgaXQgaXMgZXF1aXZhbGVudAorCSAqIHRvIGVtcHR5IGlucHV0LiBTbyBleHBsaWNpdGx5IGRpc2FsbG93IGl0LCBhbmQgcmVxdWlyZSB0aGF0IHRoZQorCSAqIHBhdHRlcm4gaGF2ZSBzb21lIGFjdHVhbCBjb250ZW50IHRvIG1hdGNoLgorCSAqLworCWlmICghYy0+cHJvdG9jb2wgJiYgIWMtPmhvc3QgJiYgIWMtPnBhdGggJiYgIWMtPnVzZXJuYW1lKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJb2JqZWN0ID0ga2V5cmluZ19vYmplY3QoYyk7CisKKwlyZXN1bHQgPSBnbm9tZV9rZXlyaW5nX2ZpbmRfbmV0d29ya19wYXNzd29yZF9zeW5jKAorCQkJCWMtPnVzZXJuYW1lLAorCQkJCU5VTEwgLyogZG9tYWluICovLAorCQkJCWMtPmhvc3QsCisJCQkJb2JqZWN0LAorCQkJCWMtPnByb3RvY29sLAorCQkJCU5VTEwgLyogYXV0aHR5cGUgKi8sCisJCQkJYy0+cG9ydCwKKwkJCQkmZW50cmllcyk7CisKKwlmcmVlKG9iamVjdCk7CisKKwlpZiAocmVzdWx0ID09IEdOT01FX0tFWVJJTkdfUkVTVUxUX05PX01BVENIKQorCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCisJaWYgKHJlc3VsdCA9PSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9DQU5DRUxMRUQpCisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisKKwlpZiAocmVzdWx0ICE9IEdOT01FX0tFWVJJTkdfUkVTVUxUX09LKQorCXsKKwkJZXJyb3IoIiVzIixnbm9tZV9rZXlyaW5nX3Jlc3VsdF90b19tZXNzYWdlKHJlc3VsdCkpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCS8qIHBpY2sgdGhlIGZpcnN0IG9uZSBmcm9tIHRoZSBsaXN0IChkZWxldGUgYWxsIG1hdGNoZXM/KSAqLworCXBhc3N3b3JkX2RhdGEgPSAoR25vbWVLZXlyaW5nTmV0d29ya1Bhc3N3b3JkRGF0YSAqKSBlbnRyaWVzLT5kYXRhOworCisJcmVzdWx0ID0gZ25vbWVfa2V5cmluZ19pdGVtX2RlbGV0ZV9zeW5jKAorCQlwYXNzd29yZF9kYXRhLT5rZXlyaW5nLCBwYXNzd29yZF9kYXRhLT5pdGVtX2lkKTsKKworCWdub21lX2tleXJpbmdfbmV0d29ya19wYXNzd29yZF9saXN0X2ZyZWUoZW50cmllcyk7CisKKwlpZiAocmVzdWx0ICE9IEdOT01FX0tFWVJJTkdfUkVTVUxUX09LKQorCXsKKwkJZXJyb3IoIiVzIixnbm9tZV9rZXlyaW5nX3Jlc3VsdF90b19tZXNzYWdlKHJlc3VsdCkpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBUYWJsZSB3aXRoIGhlbHBlciBvcGVyYXRpb24gY2FsbGJhY2tzLCB1c2VkIGJ5IGdlbmVyaWMKKyAqIGNyZWRlbnRpYWwgaGVscGVyIG1haW4gZnVuY3Rpb24uCisgKi8KK3N0cnVjdCBjcmVkZW50aWFsX29wZXJhdGlvbiBjb25zdCBjcmVkZW50aWFsX2hlbHBlcl9vcHNbXSA9Cit7CisJeyAiZ2V0IiwgICBrZXlyaW5nX2dldCAgIH0sCisJeyAic3RvcmUiLCBrZXlyaW5nX3N0b3JlIH0sCisJeyAiZXJhc2UiLCBrZXlyaW5nX2VyYXNlIH0sCisJQ1JFREVOVElBTF9PUF9FTkQKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBjcmVkZW50aWFsIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBjcmVkZW50aWFsX2luaXQoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworfQorCit2b2lkIGNyZWRlbnRpYWxfY2xlYXIoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJZnJlZShjLT5wcm90b2NvbCk7CisJZnJlZShjLT5ob3N0KTsKKwlmcmVlKGMtPnBhdGgpOworCWZyZWUoYy0+dXNlcm5hbWUpOworCWZyZWVfcGFzc3dvcmQoYy0+cGFzc3dvcmQpOworCisJY3JlZGVudGlhbF9pbml0KGMpOworfQorCitpbnQgY3JlZGVudGlhbF9yZWFkKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWNoYXIgICAgYnVmWzEwMjRdOworCXNzaXplX3QgbGluZV9sZW4gPSAwOworCWNoYXIgICAqa2V5ICAgICAgPSBidWY7CisJY2hhciAgICp2YWx1ZTsKKworCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbikpCisJeworCQlsaW5lX2xlbiA9IHN0cmxlbihidWYpOworCisJCWlmKGJ1ZltsaW5lX2xlbi0xXT09J1xuJykKKwkJCWJ1ZlstLWxpbmVfbGVuXT0nXDAnOworCisJCWlmKCFsaW5lX2xlbikKKwkJCWJyZWFrOworCisJCXZhbHVlID0gc3RyY2hyKGJ1ZiwnPScpOworCQlpZighdmFsdWUpIHsKKwkJCXdhcm5pbmcoImludmFsaWQgY3JlZGVudGlhbCBsaW5lOiAlcyIsIGtleSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJKnZhbHVlKysgPSAnXDAnOworCisJCWlmICghc3RyY21wKGtleSwgInByb3RvY29sIikpIHsKKwkJCWZyZWUoYy0+cHJvdG9jb2wpOworCQkJYy0+cHJvdG9jb2wgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgImhvc3QiKSkgeworCQkJZnJlZShjLT5ob3N0KTsKKwkJCWMtPmhvc3QgPSB4c3RyZHVwKHZhbHVlKTsKKwkJCXZhbHVlID0gc3RycmNocihjLT5ob3N0LCc6Jyk7CisJCQlpZiAodmFsdWUpIHsKKwkJCQkqdmFsdWUrKyA9ICdcMCc7CisJCQkJYy0+cG9ydCA9IGF0b2kodmFsdWUpOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAicGF0aCIpKSB7CisJCQlmcmVlKGMtPnBhdGgpOworCQkJYy0+cGF0aCA9IHhzdHJkdXAodmFsdWUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAidXNlcm5hbWUiKSkgeworCQkJZnJlZShjLT51c2VybmFtZSk7CisJCQljLT51c2VybmFtZSA9IHhzdHJkdXAodmFsdWUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAicGFzc3dvcmQiKSkgeworCQkJZnJlZV9wYXNzd29yZChjLT5wYXNzd29yZCk7CisJCQljLT5wYXNzd29yZCA9IHhzdHJkdXAodmFsdWUpOworCQkJd2hpbGUgKCp2YWx1ZSkgKnZhbHVlKysgPSAnXDAnOworCQl9CisJCS8qCisJCSAqIElnbm9yZSBvdGhlciBsaW5lczsgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZXkgbWVhbiwgYnV0CisJCSAqIHRoaXMgZnV0dXJlLXByb29mcyB1cyB3aGVuIGxhdGVyIHZlcnNpb25zIG9mIGdpdCBkbworCQkgKiBsZWFybiBuZXcgbGluZXMsIGFuZCB0aGUgaGVscGVycyBhcmUgdXBkYXRlZCB0byBtYXRjaC4KKwkJICovCisJfQorCXJldHVybiAwOworfQorCit2b2lkIGNyZWRlbnRpYWxfd3JpdGVfaXRlbShGSUxFICpmcCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm47CisJZnByaW50ZihmcCwgIiVzPSVzXG4iLCBrZXksIHZhbHVlKTsKK30KKwordm9pZCBjcmVkZW50aWFsX3dyaXRlKGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCS8qIG9ubHkgd3JpdGUgdXNlcm5hbWUvcGFzc3dvcmQsIGlmIHNldCAqLworCWNyZWRlbnRpYWxfd3JpdGVfaXRlbShzdGRvdXQsICJ1c2VybmFtZSIsIGMtPnVzZXJuYW1lKTsKKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oc3Rkb3V0LCAicGFzc3dvcmQiLCBjLT5wYXNzd29yZCk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNyZWRlbnRpYWxfb3BlcmF0aW9uIGNvbnN0ICp0cnlfb3AgPSBjcmVkZW50aWFsX2hlbHBlcl9vcHM7CisJY29uc3QgY2hhciAqYmFzZW5hbWUgPSBzdHJyY2hyKG5hbWUsJy8nKTsKKworCWJhc2VuYW1lID0gKGJhc2VuYW1lKSA/IGJhc2VuYW1lICsgMSA6IG5hbWU7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgPCIsIGJhc2VuYW1lKTsKKwl3aGlsZSh0cnlfb3AtPm5hbWUpIHsKKwkJZnByaW50ZihzdGRlcnIsIiVzIiwodHJ5X29wKyspLT5uYW1lKTsKKwkJaWYodHJ5X29wLT5uYW1lKQorCQkJZnByaW50ZihzdGRlcnIsIiVzIiwifCIpOworCX0KKwlmcHJpbnRmKHN0ZGVyciwiJXMiLCI+XG4iKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgcmV0ID0gRVhJVF9TVUNDRVNTOworCisJc3RydWN0IGNyZWRlbnRpYWxfb3BlcmF0aW9uIGNvbnN0ICp0cnlfb3AgPSBjcmVkZW50aWFsX2hlbHBlcl9vcHM7CisJc3RydWN0IGNyZWRlbnRpYWwgICAgICAgICAgICAgICAgICBjcmVkICAgPSBDUkVERU5USUFMX0lOSVQ7CisKKwlpZiAoIWFyZ3ZbMV0pIHsKKwkJdXNhZ2UoYXJndlswXSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGxvb2t1cCBvcGVyYXRpb24gY2FsbGJhY2sgKi8KKwl3aGlsZSh0cnlfb3AtPm5hbWUgJiYgc3RyY21wKGFyZ3ZbMV0sIHRyeV9vcC0+bmFtZSkpCisJCXRyeV9vcCsrOworCisJLyogdW5zdXBwb3J0ZWQgb3BlcmF0aW9uIGdpdmVuIC0tIGlnbm9yZSBzaWxlbnRseSAqLworCWlmKCF0cnlfb3AtPm5hbWUgfHwgIXRyeV9vcC0+b3ApCisJCWdvdG8gb3V0OworCisJcmV0ID0gY3JlZGVudGlhbF9yZWFkKCZjcmVkKTsKKwlpZihyZXQpCisJCWdvdG8gb3V0OworCisJLyogcGVyZm9ybSBjcmVkZW50aWFsIG9wZXJhdGlvbiAqLworCXJldCA9ICgqdHJ5X29wLT5vcCkoJmNyZWQpOworCisJY3JlZGVudGlhbF93cml0ZSgmY3JlZCk7CisKK291dDoKKwljcmVkZW50aWFsX2NsZWFyKCZjcmVkKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluLy5naXRpZ25vcmUgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzViNzAyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9vc3hrZXljaGFpbi9NYWtlZmlsZSBiL2NvbnRyaWIvY3JlZGVudGlhbC9vc3hrZXljaGFpbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjNhMDhhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL01ha2VmaWxlCkBAIC0wLDAgKzEsMTcgQEAKK2FsbDo6IGdpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluCisKK0NDID0gZ2NjCitSTSA9IHJtIC1mCitDRkxBR1MgPSAtZyAtTzIgLVdhbGwKKworLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrCisKK2dpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluOiBnaXQtY3JlZGVudGlhbC1vc3hrZXljaGFpbi5vCisJJChDQykgJChDRkxBR1MpIC1vICRAICQ8ICQoTERGTEFHUykgLVdsLC1mcmFtZXdvcmsgLVdsLFNlY3VyaXR5CisKK2dpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLm86IGdpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLmMKKwkkKENDKSAtYyAkKENGTEFHUykgJDwKKworY2xlYW46CisJJChSTSkgZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4gZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4ubwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL2dpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLmMgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmVlZDEyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL2dpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLmMKQEAgLTAsMCArMSwxNzMgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPFNlY3VyaXR5L1NlY3VyaXR5Lmg+CisKK3N0YXRpYyBTZWNQcm90b2NvbFR5cGUgcHJvdG9jb2w7CitzdGF0aWMgY2hhciAqaG9zdDsKK3N0YXRpYyBjaGFyICpwYXRoOworc3RhdGljIGNoYXIgKnVzZXJuYW1lOworc3RhdGljIGNoYXIgKnBhc3N3b3JkOworc3RhdGljIFVJbnQxNiBwb3J0OworCitzdGF0aWMgdm9pZCBkaWUoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJY2hhciBtc2dbNDA5Nl07CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCXZzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCBlcnIsIHBhcmFtcyk7CisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCAqeHN0cmR1cChjb25zdCBjaGFyICpzMSkKK3sKKwl2b2lkICpyZXQgPSBzdHJkdXAoczEpOworCWlmICghcmV0KQorCQlkaWUoIk91dCBvZiBtZW1vcnkiKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIEtFWUNIQUlOX0lURU0oeCkgKHggPyBzdHJsZW4oeCkgOiAwKSwgeAorI2RlZmluZSBLRVlDSEFJTl9BUkdTIFwKKwlOVUxMLCAvKiBkZWZhdWx0IGtleWNoYWluICovIFwKKwlLRVlDSEFJTl9JVEVNKGhvc3QpLCBcCisJMCwgTlVMTCwgLyogYWNjb3VudCBkb21haW4gKi8gXAorCUtFWUNIQUlOX0lURU0odXNlcm5hbWUpLCBcCisJS0VZQ0hBSU5fSVRFTShwYXRoKSwgXAorCXBvcnQsIFwKKwlwcm90b2NvbCwgXAorCWtTZWNBdXRoZW50aWNhdGlvblR5cGVEZWZhdWx0CisKK3N0YXRpYyB2b2lkIHdyaXRlX2l0ZW0oY29uc3QgY2hhciAqd2hhdCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXByaW50ZigiJXM9Iiwgd2hhdCk7CisJZndyaXRlKGJ1ZiwgMSwgbGVuLCBzdGRvdXQpOworCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfdXNlcm5hbWVfaW5faXRlbShTZWNLZXljaGFpbkl0ZW1SZWYgaXRlbSkKK3sKKwlTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QgbGlzdDsKKwlTZWNLZXljaGFpbkF0dHJpYnV0ZSBhdHRyOworCisJbGlzdC5jb3VudCA9IDE7CisJbGlzdC5hdHRyID0gJmF0dHI7CisJYXR0ci50YWcgPSBrU2VjQWNjb3VudEl0ZW1BdHRyOworCisJaWYgKFNlY0tleWNoYWluSXRlbUNvcHlDb250ZW50KGl0ZW0sIE5VTEwsICZsaXN0LCBOVUxMLCBOVUxMKSkKKwkJcmV0dXJuOworCisJd3JpdGVfaXRlbSgidXNlcm5hbWUiLCBhdHRyLmRhdGEsIGF0dHIubGVuZ3RoKTsKKwlTZWNLZXljaGFpbkl0ZW1GcmVlQ29udGVudCgmbGlzdCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfaW50ZXJuZXRfcGFzc3dvcmQodm9pZCkKK3sKKwl2b2lkICpidWY7CisJVUludDMyIGxlbjsKKwlTZWNLZXljaGFpbkl0ZW1SZWYgaXRlbTsKKworCWlmIChTZWNLZXljaGFpbkZpbmRJbnRlcm5ldFBhc3N3b3JkKEtFWUNIQUlOX0FSR1MsICZsZW4sICZidWYsICZpdGVtKSkKKwkJcmV0dXJuOworCisJd3JpdGVfaXRlbSgicGFzc3dvcmQiLCBidWYsIGxlbik7CisJaWYgKCF1c2VybmFtZSkKKwkJZmluZF91c2VybmFtZV9pbl9pdGVtKGl0ZW0pOworCisJU2VjS2V5Y2hhaW5JdGVtRnJlZUNvbnRlbnQoTlVMTCwgYnVmKTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlX2ludGVybmV0X3Bhc3N3b3JkKHZvaWQpCit7CisJU2VjS2V5Y2hhaW5JdGVtUmVmIGl0ZW07CisKKwkvKgorCSAqIFJlcXVpcmUgYXQgbGVhc3QgYSBwcm90b2NvbCBhbmQgaG9zdCBmb3IgcmVtb3ZhbCwgd2hpY2ggaXMgd2hhdCBnaXQKKwkgKiB3aWxsIGdpdmUgdXM7IGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBtb3JlIGZhbmN5LCB1c2UgdGhlCisJICogS2V5Y2hhaW4gbWFuYWdlci4KKwkgKi8KKwlpZiAoIXByb3RvY29sIHx8ICFob3N0KQorCQlyZXR1cm47CisKKwlpZiAoU2VjS2V5Y2hhaW5GaW5kSW50ZXJuZXRQYXNzd29yZChLRVlDSEFJTl9BUkdTLCAwLCBOVUxMLCAmaXRlbSkpCisJCXJldHVybjsKKworCVNlY0tleWNoYWluSXRlbURlbGV0ZShpdGVtKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2ludGVybmV0X3Bhc3N3b3JkKHZvaWQpCit7CisJLyogT25seSBzdG9yZSBjb21wbGV0ZSBjcmVkZW50aWFscyAqLworCWlmICghcHJvdG9jb2wgfHwgIWhvc3QgfHwgIXVzZXJuYW1lIHx8ICFwYXNzd29yZCkKKwkJcmV0dXJuOworCisJaWYgKFNlY0tleWNoYWluQWRkSW50ZXJuZXRQYXNzd29yZCgKKwkgICAgICBLRVlDSEFJTl9BUkdTLAorCSAgICAgIEtFWUNIQUlOX0lURU0ocGFzc3dvcmQpLAorCSAgICAgIE5VTEwpKQorCQlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfY3JlZGVudGlhbCh2b2lkKQoreworCWNoYXIgYnVmWzEwMjRdOworCisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkgeworCQljaGFyICp2OworCisJCWlmICghc3RyY21wKGJ1ZiwgIlxuIikpCisJCQlicmVhazsKKwkJYnVmW3N0cmxlbihidWYpLTFdID0gJ1wwJzsKKworCQl2ID0gc3RyY2hyKGJ1ZiwgJz0nKTsKKwkJaWYgKCF2KQorCQkJZGllKCJiYWQgaW5wdXQ6ICVzIiwgYnVmKTsKKwkJKnYrKyA9ICdcMCc7CisKKwkJaWYgKCFzdHJjbXAoYnVmLCAicHJvdG9jb2wiKSkgeworCQkJaWYgKCFzdHJjbXAodiwgImh0dHBzIikpCisJCQkJcHJvdG9jb2wgPSBrU2VjUHJvdG9jb2xUeXBlSFRUUFM7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJodHRwIikpCisJCQkJcHJvdG9jb2wgPSBrU2VjUHJvdG9jb2xUeXBlSFRUUDsKKwkJCWVsc2UgLyogd2UgZG9uJ3QgeWV0IGhhbmRsZSBvdGhlciBwcm90b2NvbHMgKi8KKwkJCQlleGl0KDApOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiaG9zdCIpKSB7CisJCQljaGFyICpjb2xvbiA9IHN0cmNocih2LCAnOicpOworCQkJaWYgKGNvbG9uKSB7CisJCQkJKmNvbG9uKysgPSAnXDAnOworCQkJCXBvcnQgPSBhdG9pKGNvbG9uKTsKKwkJCX0KKwkJCWhvc3QgPSB4c3RyZHVwKHYpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAicGF0aCIpKQorCQkJcGF0aCA9IHhzdHJkdXAodik7CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAidXNlcm5hbWUiKSkKKwkJCXVzZXJuYW1lID0geHN0cmR1cCh2KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJwYXNzd29yZCIpKQorCQkJcGFzc3dvcmQgPSB4c3RyZHVwKHYpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0KKwkJIlVzYWdlOiBnaXQgY3JlZGVudGlhbC1vc3hrZXljaGFpbiA8Z2V0fHN0b3JlfGVyYXNlPiI7CisKKwlpZiAoIWFyZ3ZbMV0pCisJCWRpZSh1c2FnZSk7CisKKwlyZWFkX2NyZWRlbnRpYWwoKTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJnZXQiKSkKKwkJZmluZF9pbnRlcm5ldF9wYXNzd29yZCgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInN0b3JlIikpCisJCWFkZF9pbnRlcm5ldF9wYXNzd29yZCgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImVyYXNlIikpCisJCWRlbGV0ZV9pbnRlcm5ldF9wYXNzd29yZCgpOworCS8qIG90aGVyd2lzZSwgaWdub3JlIHVua25vd24gYWN0aW9uICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC93aW5jcmVkL01ha2VmaWxlIGIvY29udHJpYi9jcmVkZW50aWFsL3dpbmNyZWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkNDVjYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC93aW5jcmVkL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKK2FsbDogZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5leGUKKworQ0MgPSBnY2MKK1JNID0gcm0gLWYKK0NGTEFHUyA9IC1PMiAtV2FsbAorCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5leGUgOiBnaXQtY3JlZGVudGlhbC13aW5jcmVkLmMKKwkkKExJTksuYykgJF4gJChMT0FETElCRVMpICQoTERMSUJTKSAtbyAkQAorCitjbGVhbjoKKwkkKFJNKSBnaXQtY3JlZGVudGlhbC13aW5jcmVkLmV4ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL3dpbmNyZWQvZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5jIGIvY29udHJpYi9jcmVkZW50aWFsL3dpbmNyZWQvZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWVjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvd2luY3JlZC9naXQtY3JlZGVudGlhbC13aW5jcmVkLmMKQEAgLTAsMCArMSwzNTcgQEAKKy8qCisgKiBBIGdpdCBjcmVkZW50aWFsIGhlbHBlciB0aGF0IGludGVyZmFjZSB3aXRoIFdpbmRvd3MnIENyZWRlbnRpYWwgTWFuYWdlcgorICoKKyAqLworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLyogY29tbW9uIGhlbHBlcnMgKi8KKworc3RhdGljIHZvaWQgZGllKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCWNoYXIgbXNnWzQwOTZdOworCXZhX2xpc3QgcGFyYW1zOworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwl2c25wcmludGYobXNnLCBzaXplb2YobXNnKSwgZXJyLCBwYXJhbXMpOworCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CisJdmFfZW5kKHBhcmFtcyk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgKnhtYWxsb2Moc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcmV0ID0gbWFsbG9jKHNpemUpOworCWlmICghcmV0ICYmICFzaXplKQorCQlyZXQgPSBtYWxsb2MoMSk7CisJaWYgKCFyZXQpCisJCSBkaWUoIk91dCBvZiBtZW1vcnkiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqeHN0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisJY2hhciAqcmV0ID0gc3RyZHVwKHN0cik7CisJaWYgKCFyZXQpCisJCWRpZSgiT3V0IG9mIG1lbW9yeSIpOworCXJldHVybiByZXQ7Cit9CisKKy8qIE1pbkdXIGRvZXNuJ3QgaGF2ZSB3aW5jcmVkLmgsIHNvIHdlIG5lZWQgdG8gZGVmaW5lIHN0dWZmICovCisKK3R5cGVkZWYgc3RydWN0IF9DUkVERU5USUFMX0FUVFJJQlVURVcgeworCUxQV1NUUiBLZXl3b3JkOworCURXT1JEICBGbGFnczsKKwlEV09SRCAgVmFsdWVTaXplOworCUxQQllURSBWYWx1ZTsKK30gQ1JFREVOVElBTF9BVFRSSUJVVEVXLCAqUENSRURFTlRJQUxfQVRUUklCVVRFVzsKKwordHlwZWRlZiBzdHJ1Y3QgX0NSRURFTlRJQUxXIHsKKwlEV09SRCAgICAgICAgICAgICAgICAgIEZsYWdzOworCURXT1JEICAgICAgICAgICAgICAgICAgVHlwZTsKKwlMUFdTVFIgICAgICAgICAgICAgICAgIFRhcmdldE5hbWU7CisJTFBXU1RSICAgICAgICAgICAgICAgICBDb21tZW50OworCUZJTEVUSU1FICAgICAgICAgICAgICAgTGFzdFdyaXR0ZW47CisJRFdPUkQgICAgICAgICAgICAgICAgICBDcmVkZW50aWFsQmxvYlNpemU7CisJTFBCWVRFICAgICAgICAgICAgICAgICBDcmVkZW50aWFsQmxvYjsKKwlEV09SRCAgICAgICAgICAgICAgICAgIFBlcnNpc3Q7CisJRFdPUkQgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVDb3VudDsKKwlQQ1JFREVOVElBTF9BVFRSSUJVVEVXIEF0dHJpYnV0ZXM7CisJTFBXU1RSICAgICAgICAgICAgICAgICBUYXJnZXRBbGlhczsKKwlMUFdTVFIgICAgICAgICAgICAgICAgIFVzZXJOYW1lOworfSBDUkVERU5USUFMVywgKlBDUkVERU5USUFMVzsKKworI2RlZmluZSBDUkVEX1RZUEVfR0VORVJJQyAxCisjZGVmaW5lIENSRURfUEVSU0lTVF9MT0NBTF9NQUNISU5FIDIKKyNkZWZpbmUgQ1JFRF9NQVhfQVRUUklCVVRFUyA2NAorCit0eXBlZGVmIEJPT0wgKFdJTkFQSSAqQ3JlZFdyaXRlV1QpKFBDUkVERU5USUFMVywgRFdPUkQpOwordHlwZWRlZiBCT09MIChXSU5BUEkgKkNyZWRVblBhY2tBdXRoZW50aWNhdGlvbkJ1ZmZlcldUKShEV09SRCwgUFZPSUQsIERXT1JELAorICAgIExQV1NUUiwgRFdPUkQgKiwgTFBXU1RSLCBEV09SRCAqLCBMUFdTVFIsIERXT1JEICopOwordHlwZWRlZiBCT09MIChXSU5BUEkgKkNyZWRFbnVtZXJhdGVXVCkoTFBDV1NUUiwgRFdPUkQsIERXT1JEICosCisgICAgUENSRURFTlRJQUxXICoqKTsKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICpDcmVkUGFja0F1dGhlbnRpY2F0aW9uQnVmZmVyV1QpKERXT1JELCBMUFdTVFIsIExQV1NUUiwKKyAgICBQQllURSwgRFdPUkQgKik7Cit0eXBlZGVmIFZPSUQgKFdJTkFQSSAqQ3JlZEZyZWVUKShQVk9JRCk7Cit0eXBlZGVmIEJPT0wgKFdJTkFQSSAqQ3JlZERlbGV0ZVdUKShMUENXU1RSLCBEV09SRCwgRFdPUkQpOworCitzdGF0aWMgSE1PRFVMRSBhZHZhcGksIGNyZWR1aTsKK3N0YXRpYyBDcmVkV3JpdGVXVCBDcmVkV3JpdGVXOworc3RhdGljIENyZWRVblBhY2tBdXRoZW50aWNhdGlvbkJ1ZmZlcldUIENyZWRVblBhY2tBdXRoZW50aWNhdGlvbkJ1ZmZlclc7CitzdGF0aWMgQ3JlZEVudW1lcmF0ZVdUIENyZWRFbnVtZXJhdGVXOworc3RhdGljIENyZWRQYWNrQXV0aGVudGljYXRpb25CdWZmZXJXVCBDcmVkUGFja0F1dGhlbnRpY2F0aW9uQnVmZmVyVzsKK3N0YXRpYyBDcmVkRnJlZVQgQ3JlZEZyZWU7CitzdGF0aWMgQ3JlZERlbGV0ZVdUIENyZWREZWxldGVXOworCitzdGF0aWMgdm9pZCBsb2FkX2NyZWRfZnVuY3Modm9pZCkKK3sKKwkvKiBsb2FkIERMTHMgKi8KKwlhZHZhcGkgPSBMb2FkTGlicmFyeSgiYWR2YXBpMzIuZGxsIik7CisJY3JlZHVpID0gTG9hZExpYnJhcnkoImNyZWR1aS5kbGwiKTsKKwlpZiAoIWFkdmFwaSB8fCAhY3JlZHVpKQorCQlkaWUoImZhaWxlZCB0byBsb2FkIERMTHMiKTsKKworCS8qIGdldCBmdW5jdGlvbiBwb2ludGVycyAqLworCUNyZWRXcml0ZVcgPSAoQ3JlZFdyaXRlV1QpR2V0UHJvY0FkZHJlc3MoYWR2YXBpLCAiQ3JlZFdyaXRlVyIpOworCUNyZWRVblBhY2tBdXRoZW50aWNhdGlvbkJ1ZmZlclcgPSAoQ3JlZFVuUGFja0F1dGhlbnRpY2F0aW9uQnVmZmVyV1QpCisJICAgIEdldFByb2NBZGRyZXNzKGNyZWR1aSwgIkNyZWRVblBhY2tBdXRoZW50aWNhdGlvbkJ1ZmZlclciKTsKKwlDcmVkRW51bWVyYXRlVyA9IChDcmVkRW51bWVyYXRlV1QpR2V0UHJvY0FkZHJlc3MoYWR2YXBpLAorCSAgICAiQ3JlZEVudW1lcmF0ZVciKTsKKwlDcmVkUGFja0F1dGhlbnRpY2F0aW9uQnVmZmVyVyA9IChDcmVkUGFja0F1dGhlbnRpY2F0aW9uQnVmZmVyV1QpCisJICAgIEdldFByb2NBZGRyZXNzKGNyZWR1aSwgIkNyZWRQYWNrQXV0aGVudGljYXRpb25CdWZmZXJXIik7CisJQ3JlZEZyZWUgPSAoQ3JlZEZyZWVUKUdldFByb2NBZGRyZXNzKGFkdmFwaSwgIkNyZWRGcmVlIik7CisJQ3JlZERlbGV0ZVcgPSAoQ3JlZERlbGV0ZVdUKUdldFByb2NBZGRyZXNzKGFkdmFwaSwgIkNyZWREZWxldGVXIik7CisJaWYgKCFDcmVkV3JpdGVXIHx8ICFDcmVkVW5QYWNrQXV0aGVudGljYXRpb25CdWZmZXJXIHx8CisJICAgICFDcmVkRW51bWVyYXRlVyB8fCAhQ3JlZFBhY2tBdXRoZW50aWNhdGlvbkJ1ZmZlclcgfHwgIUNyZWRGcmVlIHx8CisJICAgICFDcmVkRGVsZXRlVykKKwkJZGllKCJmYWlsZWQgdG8gbG9hZCBmdW5jdGlvbnMiKTsKK30KKworc3RhdGljIGNoYXIgdGFyZ2V0X2J1ZlsxMDI0XTsKK3N0YXRpYyBjaGFyICpwcm90b2NvbCwgKmhvc3QsICpwYXRoLCAqdXNlcm5hbWU7CitzdGF0aWMgV0NIQVIgKnd1c2VybmFtZSwgKnBhc3N3b3JkLCAqdGFyZ2V0OworCitzdGF0aWMgdm9pZCB3cml0ZV9pdGVtKGNvbnN0IGNoYXIgKndoYXQsIFdDSEFSICp3YnVmKQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgbGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCB3YnVmLCAtMSwgTlVMTCwgMCwgTlVMTCwKKwkgICAgRkFMU0UpOworCWJ1ZiA9IHhtYWxsb2MobGVuKTsKKworCWlmICghV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCB3YnVmLCAtMSwgYnVmLCBsZW4sIE5VTEwsIEZBTFNFKSkKKwkJZGllKCJXaWRlQ2hhclRvTXVsdGlCeXRlIGZhaWxlZCEiKTsKKworCXByaW50ZigiJXM9Iiwgd2hhdCk7CisJZndyaXRlKGJ1ZiwgMSwgbGVuIC0gMSwgc3Rkb3V0KTsKKwlwdXRjaGFyKCdcbicpOworCWZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCBtYXRjaF9hdHRyKGNvbnN0IENSRURFTlRJQUxXICpjcmVkLCBjb25zdCBXQ0hBUiAqa2V5d29yZCwKKyAgICBjb25zdCBjaGFyICp3YW50KQoreworCWludCBpOworCWlmICghd2FudCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3JlZC0+QXR0cmlidXRlQ291bnQ7ICsraSkKKwkJaWYgKCF3Y3NjbXAoY3JlZC0+QXR0cmlidXRlc1tpXS5LZXl3b3JkLCBrZXl3b3JkKSkKKwkJCXJldHVybiAhc3RyY21wKChjb25zdCBjaGFyICopY3JlZC0+QXR0cmlidXRlc1tpXS5WYWx1ZSwKKwkJCSAgICB3YW50KTsKKworCXJldHVybiAwOyAvKiBub3QgZm91bmQgKi8KK30KKworc3RhdGljIGludCBtYXRjaF9jcmVkKGNvbnN0IENSRURFTlRJQUxXICpjcmVkKQoreworCXJldHVybiAoIXd1c2VybmFtZSB8fCAhd2NzY21wKHd1c2VybmFtZSwgY3JlZC0+VXNlck5hbWUpKSAmJgorCSAgICBtYXRjaF9hdHRyKGNyZWQsIEwiZ2l0X3Byb3RvY29sIiwgcHJvdG9jb2wpICYmCisJICAgIG1hdGNoX2F0dHIoY3JlZCwgTCJnaXRfaG9zdCIsIGhvc3QpICYmCisJICAgIG1hdGNoX2F0dHIoY3JlZCwgTCJnaXRfcGF0aCIsIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCBnZXRfY3JlZGVudGlhbCh2b2lkKQoreworCVdDSEFSICp1c2VyX2J1ZiwgKnBhc3NfYnVmOworCURXT1JEIHVzZXJfYnVmX3NpemUgPSAwLCBwYXNzX2J1Zl9zaXplID0gMDsKKwlDUkVERU5USUFMVyAqKmNyZWRzLCAqY3JlZCA9IE5VTEw7CisJRFdPUkQgbnVtX2NyZWRzOworCWludCBpOworCisJaWYgKCFDcmVkRW51bWVyYXRlVyhMImdpdDoqIiwgMCwgJm51bV9jcmVkcywgJmNyZWRzKSkKKwkJcmV0dXJuOworCisJLyogc2VhcmNoIGZvciB0aGUgZmlyc3QgY3JlZGVudGlhbCB0aGF0IG1hdGNoZXMgdXNlcm5hbWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NyZWRzOyArK2kpCisJCWlmIChtYXRjaF9jcmVkKGNyZWRzW2ldKSkgeworCQkJY3JlZCA9IGNyZWRzW2ldOworCQkJYnJlYWs7CisJCX0KKwlpZiAoIWNyZWQpCisJCXJldHVybjsKKworCUNyZWRVblBhY2tBdXRoZW50aWNhdGlvbkJ1ZmZlclcoMCwgY3JlZC0+Q3JlZGVudGlhbEJsb2IsCisJICAgIGNyZWQtPkNyZWRlbnRpYWxCbG9iU2l6ZSwgTlVMTCwgJnVzZXJfYnVmX3NpemUsIE5VTEwsIE5VTEwsCisJICAgIE5VTEwsICZwYXNzX2J1Zl9zaXplKTsKKworCXVzZXJfYnVmID0geG1hbGxvYyh1c2VyX2J1Zl9zaXplICogc2l6ZW9mKFdDSEFSKSk7CisJcGFzc19idWYgPSB4bWFsbG9jKHBhc3NfYnVmX3NpemUgKiBzaXplb2YoV0NIQVIpKTsKKworCWlmICghQ3JlZFVuUGFja0F1dGhlbnRpY2F0aW9uQnVmZmVyVygwLCBjcmVkLT5DcmVkZW50aWFsQmxvYiwKKwkgICAgY3JlZC0+Q3JlZGVudGlhbEJsb2JTaXplLCB1c2VyX2J1ZiwgJnVzZXJfYnVmX3NpemUsIE5VTEwsIE5VTEwsCisJICAgIHBhc3NfYnVmLCAmcGFzc19idWZfc2l6ZSkpCisJCWRpZSgiQ3JlZFVuUGFja0F1dGhlbnRpY2F0aW9uQnVmZmVyIGZhaWxlZCIpOworCisJQ3JlZEZyZWUoY3JlZHMpOworCisJLyogemVyby10ZXJtaW5hdGUgKHNpemVzIGluY2x1ZGUgemVyby10ZXJtaW5hdGlvbikgKi8KKwl1c2VyX2J1Zlt1c2VyX2J1Zl9zaXplIC0gMV0gPSBMJ1wwJzsKKwlwYXNzX2J1ZltwYXNzX2J1Zl9zaXplIC0gMV0gPSBMJ1wwJzsKKworCXdyaXRlX2l0ZW0oInVzZXJuYW1lIiwgdXNlcl9idWYpOworCXdyaXRlX2l0ZW0oInBhc3N3b3JkIiwgcGFzc19idWYpOworCisJZnJlZSh1c2VyX2J1Zik7CisJZnJlZShwYXNzX2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2F0dHIoQ1JFREVOVElBTF9BVFRSSUJVVEVXICphdHRyLCBjb25zdCBXQ0hBUiAqa2V5d29yZCwKKyAgICBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlhdHRyLT5LZXl3b3JkID0gKExQV1NUUilrZXl3b3JkOworCWF0dHItPkZsYWdzID0gMDsKKwlhdHRyLT5WYWx1ZVNpemUgPSBzdHJsZW4odmFsdWUpICsgMTsgLyogc3RvcmUgemVyby10ZXJtaW5hdGlvbiAqLworCWF0dHItPlZhbHVlID0gKExQQllURSl2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgc3RvcmVfY3JlZGVudGlhbCh2b2lkKQoreworCUNSRURFTlRJQUxXIGNyZWQ7CisJQllURSAqYXV0aF9idWY7CisJRFdPUkQgYXV0aF9idWZfc2l6ZSA9IDA7CisJQ1JFREVOVElBTF9BVFRSSUJVVEVXIGF0dHJzW0NSRURfTUFYX0FUVFJJQlVURVNdOworCisJaWYgKCF3dXNlcm5hbWUgfHwgIXBhc3N3b3JkKQorCQlyZXR1cm47CisKKwkvKiBxdWVyeSBidWZmZXIgc2l6ZSAqLworCUNyZWRQYWNrQXV0aGVudGljYXRpb25CdWZmZXJXKDAsIHd1c2VybmFtZSwgcGFzc3dvcmQsCisJICAgIE5VTEwsICZhdXRoX2J1Zl9zaXplKTsKKworCWF1dGhfYnVmID0geG1hbGxvYyhhdXRoX2J1Zl9zaXplKTsKKworCWlmICghQ3JlZFBhY2tBdXRoZW50aWNhdGlvbkJ1ZmZlclcoMCwgd3VzZXJuYW1lLCBwYXNzd29yZCwKKwkgICAgYXV0aF9idWYsICZhdXRoX2J1Zl9zaXplKSkKKwkJZGllKCJDcmVkUGFja0F1dGhlbnRpY2F0aW9uQnVmZmVyIGZhaWxlZCIpOworCisJY3JlZC5GbGFncyA9IDA7CisJY3JlZC5UeXBlID0gQ1JFRF9UWVBFX0dFTkVSSUM7CisJY3JlZC5UYXJnZXROYW1lID0gdGFyZ2V0OworCWNyZWQuQ29tbWVudCA9IEwic2F2ZWQgYnkgZ2l0LWNyZWRlbnRpYWwtd2luY3JlZCI7CisJY3JlZC5DcmVkZW50aWFsQmxvYlNpemUgPSBhdXRoX2J1Zl9zaXplOworCWNyZWQuQ3JlZGVudGlhbEJsb2IgPSBhdXRoX2J1ZjsKKwljcmVkLlBlcnNpc3QgPSBDUkVEX1BFUlNJU1RfTE9DQUxfTUFDSElORTsKKwljcmVkLkF0dHJpYnV0ZUNvdW50ID0gMTsKKwljcmVkLkF0dHJpYnV0ZXMgPSBhdHRyczsKKwljcmVkLlRhcmdldEFsaWFzID0gTlVMTDsKKwljcmVkLlVzZXJOYW1lID0gd3VzZXJuYW1lOworCisJd3JpdGVfYXR0cihhdHRycywgTCJnaXRfcHJvdG9jb2wiLCBwcm90b2NvbCk7CisKKwlpZiAoaG9zdCkgeworCQl3cml0ZV9hdHRyKGF0dHJzICsgY3JlZC5BdHRyaWJ1dGVDb3VudCwgTCJnaXRfaG9zdCIsIGhvc3QpOworCQljcmVkLkF0dHJpYnV0ZUNvdW50Kys7CisJfQorCisJaWYgKHBhdGgpIHsKKwkJd3JpdGVfYXR0cihhdHRycyArIGNyZWQuQXR0cmlidXRlQ291bnQsIEwiZ2l0X3BhdGgiLCBwYXRoKTsKKwkJY3JlZC5BdHRyaWJ1dGVDb3VudCsrOworCX0KKworCWlmICghQ3JlZFdyaXRlVygmY3JlZCwgMCkpCisJCWRpZSgiQ3JlZFdyaXRlIGZhaWxlZCIpOworfQorCitzdGF0aWMgdm9pZCBlcmFzZV9jcmVkZW50aWFsKHZvaWQpCit7CisJQ1JFREVOVElBTFcgKipjcmVkczsKKwlEV09SRCBudW1fY3JlZHM7CisJaW50IGk7CisKKwlpZiAoIUNyZWRFbnVtZXJhdGVXKEwiZ2l0OioiLCAwLCAmbnVtX2NyZWRzLCAmY3JlZHMpKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NyZWRzOyArK2kpIHsKKwkJaWYgKG1hdGNoX2NyZWQoY3JlZHNbaV0pKQorCQkJQ3JlZERlbGV0ZVcoY3JlZHNbaV0tPlRhcmdldE5hbWUsIGNyZWRzW2ldLT5UeXBlLCAwKTsKKwl9CisKKwlDcmVkRnJlZShjcmVkcyk7Cit9CisKK3N0YXRpYyBXQ0hBUiAqdXRmOF90b191dGYxNl9kdXAoY29uc3QgY2hhciAqc3RyKQoreworCWludCB3bGVuID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBzdHIsIC0xLCBOVUxMLCAwKTsKKwlXQ0hBUiAqd3N0ciA9IHhtYWxsb2Moc2l6ZW9mKFdDSEFSKSAqIHdsZW4pOworCU11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfVVRGOCwgMCwgc3RyLCAtMSwgd3N0ciwgd2xlbik7CisJcmV0dXJuIHdzdHI7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfY3JlZGVudGlhbCh2b2lkKQoreworCWNoYXIgYnVmWzEwMjRdOworCisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkgeworCQljaGFyICp2OworCisJCWlmICghc3RyY21wKGJ1ZiwgIlxuIikpCisJCQlicmVhazsKKwkJYnVmW3N0cmxlbihidWYpLTFdID0gJ1wwJzsKKworCQl2ID0gc3RyY2hyKGJ1ZiwgJz0nKTsKKwkJaWYgKCF2KQorCQkJZGllKCJiYWQgaW5wdXQ6ICVzIiwgYnVmKTsKKwkJKnYrKyA9ICdcMCc7CisKKwkJaWYgKCFzdHJjbXAoYnVmLCAicHJvdG9jb2wiKSkKKwkJCXByb3RvY29sID0geHN0cmR1cCh2KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJob3N0IikpCisJCQlob3N0ID0geHN0cmR1cCh2KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJwYXRoIikpCisJCQlwYXRoID0geHN0cmR1cCh2KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJ1c2VybmFtZSIpKSB7CisJCQl1c2VybmFtZSA9IHhzdHJkdXAodik7CisJCQl3dXNlcm5hbWUgPSB1dGY4X3RvX3V0ZjE2X2R1cCh2KTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgInBhc3N3b3JkIikpCisJCQlwYXNzd29yZCA9IHV0ZjhfdG9fdXRmMTZfZHVwKHYpOworCQllbHNlCisJCQlkaWUoInVucmVjb2duaXplZCBpbnB1dCIpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9CisJICAgICJVc2FnZTogZ2l0IGNyZWRlbnRpYWwtd2luY3JlZCA8Z2V0fHN0b3JlfGVyYXNlPlxuIjsKKworCWlmICghYXJndlsxXSkKKwkJZGllKHVzYWdlKTsKKworCS8qIGdpdCB1c2UgYmluYXJ5IHBpcGVzIHRvIGF2b2lkIENSTEYtaXNzdWVzICovCisJX3NldG1vZGUoX2ZpbGVubyhzdGRpbiksIF9PX0JJTkFSWSk7CisJX3NldG1vZGUoX2ZpbGVubyhzdGRvdXQpLCBfT19CSU5BUlkpOworCisJcmVhZF9jcmVkZW50aWFsKCk7CisKKwlsb2FkX2NyZWRfZnVuY3MoKTsKKworCWlmICghcHJvdG9jb2wgfHwgIShob3N0IHx8IHBhdGgpKQorCQlyZXR1cm4gMDsKKworCS8qIHByZXBhcmUgJ3RhcmdldCcsIHRoZSB1bmlxdWUga2V5IGZvciB0aGUgY3JlZGVudGlhbCAqLworCXN0cm5jYXQodGFyZ2V0X2J1ZiwgImdpdDoiLCBzaXplb2YodGFyZ2V0X2J1ZikpOworCXN0cm5jYXQodGFyZ2V0X2J1ZiwgcHJvdG9jb2wsIHNpemVvZih0YXJnZXRfYnVmKSk7CisJc3RybmNhdCh0YXJnZXRfYnVmLCAiOi8vIiwgc2l6ZW9mKHRhcmdldF9idWYpKTsKKwlpZiAodXNlcm5hbWUpIHsKKwkJc3RybmNhdCh0YXJnZXRfYnVmLCB1c2VybmFtZSwgc2l6ZW9mKHRhcmdldF9idWYpKTsKKwkJc3RybmNhdCh0YXJnZXRfYnVmLCAiQCIsIHNpemVvZih0YXJnZXRfYnVmKSk7CisJfQorCWlmIChob3N0KQorCQlzdHJuY2F0KHRhcmdldF9idWYsIGhvc3QsIHNpemVvZih0YXJnZXRfYnVmKSk7CisJaWYgKHBhdGgpIHsKKwkJc3RybmNhdCh0YXJnZXRfYnVmLCAiLyIsIHNpemVvZih0YXJnZXRfYnVmKSk7CisJCXN0cm5jYXQodGFyZ2V0X2J1ZiwgcGF0aCwgc2l6ZW9mKHRhcmdldF9idWYpKTsKKwl9CisKKwl0YXJnZXQgPSB1dGY4X3RvX3V0ZjE2X2R1cCh0YXJnZXRfYnVmKTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJnZXQiKSkKKwkJZ2V0X2NyZWRlbnRpYWwoKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJzdG9yZSIpKQorCQlzdG9yZV9jcmVkZW50aWFsKCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZXJhc2UiKSkKKwkJZXJhc2VfY3JlZGVudGlhbCgpOworCS8qIG90aGVyd2lzZSwgaWdub3JlIHVua25vd24gYWN0aW9uICovCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2RpZmYtaGlnaGxpZ2h0L1JFQURNRSBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMmUwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L1JFQURNRQpAQCAtMCwwICsxLDE1MiBAQAorZGlmZi1oaWdobGlnaHQKKz09PT09PT09PT09PT09CisKK0xpbmUgb3JpZW50ZWQgZGlmZnMgYXJlIGdyZWF0IGZvciByZXZpZXdpbmcgY29kZSwgYmVjYXVzZSBmb3IgbW9zdAoraHVua3MsIHlvdSB3YW50IHRvIHNlZSB0aGUgb2xkIGFuZCB0aGUgbmV3IHNlZ21lbnRzIG9mIGNvZGUgbmV4dCB0byBlYWNoCitvdGhlci4gU29tZXRpbWVzLCB0aG91Z2gsIHdoZW4gYW4gb2xkIGxpbmUgYW5kIGEgbmV3IGxpbmUgYXJlIHZlcnkKK3NpbWlsYXIsIGl0J3MgaGFyZCB0byBpbW1lZGlhdGVseSBzZWUgdGhlIGRpZmZlcmVuY2UuCisKK1lvdSBjYW4gdXNlICItLWNvbG9yLXdvcmRzIiB0byBoaWdobGlnaHQgb25seSB0aGUgY2hhbmdlZCBwb3J0aW9ucyBvZgorbGluZXMuIEhvd2V2ZXIsIHRoaXMgY2FuIG9mdGVuIGJlIGhhcmQgdG8gcmVhZCBmb3IgY29kZSwgYXMgaXQgbG9zZXMKK3RoZSBsaW5lIHN0cnVjdHVyZSwgYW5kIHlvdSBlbmQgdXAgd2l0aCBvZGRseSBmb3JtYXR0ZWQgYml0cy4KKworSW5zdGVhZCwgdGhpcyBzY3JpcHQgcG9zdC1wcm9jZXNzZXMgdGhlIGxpbmUtb3JpZW50ZWQgZGlmZiwgZmluZHMgcGFpcnMKK29mIGxpbmVzLCBhbmQgaGlnaGxpZ2h0cyB0aGUgZGlmZmVyaW5nIHNlZ21lbnRzLiAgSXQncyBjdXJyZW50bHkgdmVyeQorc2ltcGxlIGFuZCBzdHVwaWQgYWJvdXQgZG9pbmcgdGhlc2UgdGFza3MuIEluIHBhcnRpY3VsYXI6CisKKyAgMS4gSXQgd2lsbCBvbmx5IGhpZ2hsaWdodCBodW5rcyBpbiB3aGljaCB0aGUgbnVtYmVyIG9mIHJlbW92ZWQgYW5kCisgICAgIGFkZGVkIGxpbmVzIGlzIHRoZSBzYW1lLCBhbmQgaXQgd2lsbCBwYWlyIGxpbmVzIHdpdGhpbiB0aGUgaHVuayBieQorICAgICBwb3NpdGlvbiAoc28gdGhlIGZpcnN0IHJlbW92ZWQgbGluZSBpcyBjb21wYXJlZCB0byB0aGUgZmlyc3QgYWRkZWQKKyAgICAgbGluZSwgYW5kIHNvIGZvcnRoKS4gVGhpcyBpcyBzaW1wbGUgYW5kIHRlbmRzIHRvIHdvcmsgd2VsbCBpbgorICAgICBwcmFjdGljZS4gTW9yZSBjb21wbGV4IGNoYW5nZXMgZG9uJ3QgaGlnaGxpZ2h0IHdlbGwsIHNvIHdlIHRlbmQgdG8KKyAgICAgZXhjbHVkZSB0aGVtIGR1ZSB0byB0aGUgInNhbWUgbnVtYmVyIG9mIHJlbW92ZWQgYW5kIGFkZGVkIGxpbmVzIgorICAgICByZXN0cmljdGlvbi4gT3IgZXZlbiBpZiB3ZSBkbyB0cnkgdG8gaGlnaGxpZ2h0IHRoZW0sIHRoZXkgZW5kIHVwCisgICAgIG5vdCBoaWdobGlnaHRpbmcgYmVjYXVzZSBvZiBvdXIgImRvbid0IGhpZ2hsaWdodCBpZiB0aGUgd2hvbGUgbGluZQorICAgICB3b3VsZCBiZSBoaWdobGlnaHRlZCIgcnVsZS4KKworICAyLiBJdCB3aWxsIGZpbmQgdGhlIGNvbW1vbiBwcmVmaXggYW5kIHN1ZmZpeCBvZiB0d28gbGluZXMsIGFuZAorICAgICBjb25zaWRlciBldmVyeXRoaW5nIGluIHRoZSBtaWRkbGUgdG8gYmUgImRpZmZlcmVudCIuIEl0IGNvdWxkCisgICAgIGluc3RlYWQgZG8gYSByZWFsIGRpZmYgb2YgdGhlIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGUgdHdvIGxpbmVzIGFuZAorICAgICBmaW5kIGNvbW1vbiBzdWJzZXF1ZW5jZXMuIEhvd2V2ZXIsIHRoZSBwb2ludCBvZiB0aGUgaGlnaGxpZ2h0IGlzIHRvCisgICAgIGNhbGwgYXR0ZW50aW9uIHRvIGEgY2VydGFpbiBhcmVhLiBFdmVuIGlmIHNvbWUgc21hbGwgc3Vic2V0IG9mIHRoZQorICAgICBoaWdobGlnaHRlZCBhcmVhIGFjdHVhbGx5IGRpZG4ndCBjaGFuZ2UsIHRoYXQncyBPSy4gSW4gcHJhY3RpY2UgaXQKKyAgICAgZW5kcyB1cCBiZWluZyBtb3JlIHJlYWRhYmxlIHRvIGp1c3QgaGF2ZSBhIHNpbmdsZSBibG9iIG9uIHRoZSBsaW5lCisgICAgIHNob3dpbmcgdGhlIGludGVyZXN0aW5nIGJpdC4KKworVGhlIGdvYWwgb2YgdGhlIHNjcmlwdCBpcyB0aGVyZWZvcmUgbm90IHRvIGJlIGV4YWN0IGFib3V0IGhpZ2hsaWdodGluZworY2hhbmdlcywgYnV0IHRvIGNhbGwgYXR0ZW50aW9uIHRvIGFyZWFzIG9mIGludGVyZXN0IHdpdGhvdXQgYmVpbmcKK3Zpc3VhbGx5IGRpc3RyYWN0aW5nLiAgTm9uLWRpZmYgbGluZXMgYW5kIGV4aXN0aW5nIGRpZmYgY29sb3JhdGlvbiBpcworcHJlc2VydmVkOyB0aGUgaW50ZW50IGlzIHRoYXQgdGhlIG91dHB1dCBzaG91bGQgbG9vayBleGFjdGx5IHRoZSBzYW1lIGFzCit0aGUgaW5wdXQsIGV4Y2VwdCBmb3IgdGhlIG9jY2FzaW9uYWwgaGlnaGxpZ2h0LgorCitVc2UKKy0tLQorCitZb3UgY2FuIHRyeSBvdXQgdGhlIGRpZmYtaGlnaGxpZ2h0IHByb2dyYW0gd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgbG9nIC1wIC0tY29sb3IgfCAvcGF0aC90by9kaWZmLWhpZ2hsaWdodAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIHVzZSBpdCBhbGwgdGhlIHRpbWUsIGRyb3AgaXQgaW4geW91ciAkUEFUSCBhbmQgcHV0IHRoZQorZm9sbG93aW5nIGluIHlvdXIgZ2l0IGNvbmZpZ3VyYXRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW3BhZ2VyXQorCWxvZyA9IGRpZmYtaGlnaGxpZ2h0IHwgbGVzcworCXNob3cgPSBkaWZmLWhpZ2hsaWdodCB8IGxlc3MKKwlkaWZmID0gZGlmZi1oaWdobGlnaHQgfCBsZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnVncworLS0tLQorCitCZWNhdXNlIGRpZmYtaGlnaGxpZ2h0IHJlbGllcyBvbiBoZXVyaXN0aWNzIHRvIGd1ZXNzIHdoaWNoIHBhcnRzIG9mCitjaGFuZ2VzIGFyZSBpbXBvcnRhbnQsIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHRoZSBoaWdobGlnaHRpbmcgaXMKK21vcmUgZGlzdHJhY3RpbmcgdGhhbiB1c2VmdWwuIEZvcnR1bmF0ZWx5LCB0aGVzZSBjYXNlcyBhcmUgcmFyZSBpbgorcHJhY3RpY2UsIGFuZCB3aGVuIHRoZXkgZG8gb2NjdXIsIHRoZSB3b3JzdCBjYXNlIGlzIHNpbXBseSBhIGxpdHRsZQorZXh0cmEgaGlnaGxpZ2h0aW5nLiBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHNvbWUgY2FzZXMga25vd24gdG8gYmUKK3N1Yi1vcHRpbWFsLCBpbiBjYXNlIHNvbWVib2R5IGZlZWxzIGxpa2Ugd29ya2luZyBvbiBpbXByb3ZpbmcgdGhlCitoZXVyaXN0aWNzLgorCisxLiBUd28gY2hhbmdlcyBvbiB0aGUgc2FtZSBsaW5lIGdldCBoaWdobGlnaHRlZCBpbiBhIGJsb2IuIEZvciBleGFtcGxlLAorICAgaGlnaGxpZ2h0aW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZm9vKGJ1Ziwgc2l6ZSk7CisrZm9vKG9iai0+YnVmLCBvYmotPnNpemUpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB5aWVsZHMgKHdoZXJlIHRoZSBpbnNpZGUgb2YgIit7fSIgd291bGQgYmUgaGlnaGxpZ2h0ZWQpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZm9vKGJ1Ziwgc2l6ZSk7CisrZm9vKCt7b2JqLT5idWYsIG9iai0+fXNpemUpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aGVyZWFzIGEgbW9yZSBzZW1hbnRpY2FsbHkgbWVhbmluZ2Z1bCBvdXRwdXQgd291bGQgYmU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1mb28oYnVmLCBzaXplKTsKKytmb28oK3tvYmotPn1idWYsICt7b2JqLT59c2l6ZSk7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIE5vdGUgdGhhdCBkb2luZyB0aGlzIHJpZ2h0IHdvdWxkIHByb2JhYmx5IGludm9sdmUgYSBzZXQgb2YKKyAgIGNvbnRlbnQtc3BlY2lmaWMgYm91bmRhcnkgcGF0dGVybnMsIHNpbWlsYXIgdG8gd29yZC1kaWZmLiBPdGhlcndpc2UKKyAgIHlvdSBnZXQganVuayBsaWtlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLXRoaXMgbGluZSBoYXMgc29tZSAte2l9bnQte2VyZX1zdGkte25nfSB0ZXh0IG9uIGl0CisrdGhpcyBsaW5lIGhhcyBzb21lICt7ZmF9bnQre2F9c3RpK3tjfSB0ZXh0IG9uIGl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aGljaCBpcyBsZXNzIHJlYWRhYmxlIHRoYW4gdGhlIGN1cnJlbnQgb3V0cHV0LgorCisyLiBUaGUgbXVsdGktbGluZSBtYXRjaGluZyBhc3N1bWVzIHRoYXQgbGluZXMgaW4gdGhlIHByZS0gYW5kIHBvc3QtaW1hZ2UKKyAgIG1hdGNoIGJ5IHBvc2l0aW9uLiBUaGlzIGlzIG9mdGVuIHRoZSBjYXNlLCBidXQgY2FuIGJlIGZvb2xlZCB3aGVuIGEKKyAgIGxpbmUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0b3AgYW5kIGEgbmV3IG9uZSBhZGRlZCBhdCB0aGUgYm90dG9tIChvcgorICAgdmljZSB2ZXJzYSkuIFVubGVzcyB0aGUgbGluZXMgaW4gdGhlIG1pZGRsZSBhcmUgYWxzbyBjaGFuZ2VkLCBkaWZmcworICAgd2lsbCBzaG93IHRoaXMgYXMgdHdvIGh1bmtzLCBhbmQgaXQgd2lsbCBub3QgZ2V0IGhpZ2hsaWdodGVkIGF0IGFsbAorICAgKHdoaWNoIGlzIGdvb2QpLiBCdXQgaWYgdGhlIGxpbmVzIGluIHRoZSBtaWRkbGUgYXJlIGNoYW5nZWQsIHRoZQorICAgaGlnaGxpZ2h0aW5nIGNhbiBiZSBtaXNsZWFkaW5nLiBIZXJlJ3MgYSBwYXRob2xvZ2ljYWwgY2FzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1vbmUKKy10d28KKy10aHJlZQorLWZvdXIKKyt0d28gMgorK3RocmVlIDMKKytmb3VyIDQKKytmaXZlIDUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHdoaWNoIGdldHMgaGlnaGxpZ2h0ZWQgYXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistb25lCistdC17d299CistdGhyZWUKKy1mLXtvdXJ9CisrdHdvIDIKKyt0K3tocmVlIDN9CisrZm91ciA0CisrZit7aXZlIDV9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBiZWNhdXNlIGl0IG1hdGNoZXMgInR3byIgdG8gInRocmVlIDMiLCBhbmQgc28gZm9ydGguIEl0IHdvdWxkIGJlCisgICBuaWNlciBhczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1vbmUKKy10d28KKy10aHJlZQorLWZvdXIKKyt0d28gK3syfQorK3RocmVlICt7M30KKytmb3VyICt7NH0KKytmaXZlIDUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHdoaWNoIHdvdWxkIHByb2JhYmx5IGludm9sdmUgcHJlLW1hdGNoaW5nIHRoZSBsaW5lcyBpbnRvIHBhaXJzCisgICBhY2NvcmRpbmcgdG8gc29tZSBoZXVyaXN0aWMuCmRpZmYgLS1naXQgYS9jb250cmliL2RpZmYtaGlnaGxpZ2h0L2RpZmYtaGlnaGxpZ2h0IGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9kaWZmLWhpZ2hsaWdodApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNDQwNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9kaWZmLWhpZ2hsaWdodApAQCAtMCwwICsxLDE3MyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBzdHJpY3Q7CisKKyMgSGlnaGxpZ2h0IGJ5IHJldmVyc2luZyBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kLiBZb3UgY291bGQgZG8KKyMgb3RoZXIgdGhpbmdzIGxpa2UgYm9sZCBvciB1bmRlcmxpbmUgaWYgeW91IHByZWZlci4KK215ICRISUdITElHSFQgICA9ICJceDFiWzdtIjsKK215ICRVTkhJR0hMSUdIVCA9ICJceDFiWzI3bSI7CitteSAkQ09MT1IgPSBxci9ceDFiXFtbMC05O10qbS87CitteSAkQk9SSU5HID0gcXIvJENPTE9SfFxzLzsKKworbXkgQHJlbW92ZWQ7CitteSBAYWRkZWQ7CitteSAkaW5faHVuazsKKword2hpbGUgKDw+KSB7CisJaWYgKCEkaW5faHVuaykgeworCQlwcmludDsKKwkJJGluX2h1bmsgPSAvXiRDT0xPUipcQC87CisJfQorCWVsc2lmICgvXiRDT0xPUiotLykgeworCQlwdXNoIEByZW1vdmVkLCAkXzsKKwl9CisJZWxzaWYgKC9eJENPTE9SKlwrLykgeworCQlwdXNoIEBhZGRlZCwgJF87CisJfQorCWVsc2UgeworCQlzaG93X2h1bmsoXEByZW1vdmVkLCBcQGFkZGVkKTsKKwkJQHJlbW92ZWQgPSAoKTsKKwkJQGFkZGVkID0gKCk7CisKKwkJcHJpbnQ7CisJCSRpbl9odW5rID0gL14kQ09MT1IqW1xAIF0vOworCX0KKworCSMgTW9zdCBvZiB0aGUgdGltZSB0aGVyZSBpcyBlbm91Z2ggb3V0cHV0IHRvIGtlZXAgdGhpbmdzIHN0cmVhbWluZywKKwkjIGJ1dCBmb3Igc29tZXRoaW5nIGxpa2UgImdpdCBsb2cgLVNmb28iLCB5b3UgY2FuIGdldCBvbmUgZWFybHkKKwkjIGNvbW1pdCBhbmQgdGhlbiBtYW55IHNlY29uZHMgb2Ygbm90aGluZy4gV2Ugd2FudCB0byBzaG93CisJIyB0aGF0IG9uZSBjb21taXQgYXMgc29vbiBhcyBwb3NzaWJsZS4KKwkjCisJIyBTaW5jZSB3ZSBjYW4gcmVjZWl2ZSBhcmJpdHJhcnkgaW5wdXQsIHRoZXJlJ3Mgbm8gb3B0aW1hbAorCSMgcGxhY2UgdG8gZmx1c2guIEZsdXNoaW5nIG9uIGEgYmxhbmsgbGluZSBpcyBhIGhldXJpc3RpYyB0aGF0CisJIyBoYXBwZW5zIHRvIG1hdGNoIGdpdC1sb2cgb3V0cHV0LgorCWlmICghbGVuZ3RoKSB7CisJCWxvY2FsICR8ID0gMTsKKwl9Cit9CisKKyMgRmx1c2ggYW55IHF1ZXVlZCBodW5rICh0aGlzIGNhbiBoYXBwZW4gd2hlbiB0aGVyZSBpcyBubyB0cmFpbGluZyBjb250ZXh0IGluCisjIHRoZSBmaW5hbCBkaWZmIG9mIHRoZSBpbnB1dCkuCitzaG93X2h1bmsoXEByZW1vdmVkLCBcQGFkZGVkKTsKKworZXhpdCAwOworCitzdWIgc2hvd19odW5rIHsKKwlteSAoJGEsICRiKSA9IEBfOworCisJIyBJZiBvbmUgc2lkZSBpcyBlbXB0eSwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbXBhcmUgb3IgaGlnaGxpZ2h0LgorCWlmICghQCRhIHx8ICFAJGIpIHsKKwkJcHJpbnQgQCRhLCBAJGI7CisJCXJldHVybjsKKwl9CisKKwkjIElmIHdlIGhhdmUgbWlzbWF0Y2hlZCBudW1iZXJzIG9mIGxpbmVzIG9uIGVhY2ggc2lkZSwgd2UgY291bGQgdHJ5IHRvCisJIyBiZSBjbGV2ZXIgYW5kIG1hdGNoIHVwIHNpbWlsYXIgbGluZXMuIEJ1dCBmb3Igbm93IHdlIGFyZSBzaW1wbGUgYW5kCisJIyBzdHVwaWQsIGFuZCBvbmx5IGhhbmRsZSBtdWx0aS1saW5lIGh1bmtzIHRoYXQgcmVtb3ZlIGFuZCBhZGQgdGhlIHNhbWUKKwkjIG51bWJlciBvZiBsaW5lcy4KKwlpZiAoQCRhICE9IEAkYikgeworCQlwcmludCBAJGEsIEAkYjsKKwkJcmV0dXJuOworCX0KKworCW15IEBxdWV1ZTsKKwlmb3IgKG15ICRpID0gMDsgJGkgPCBAJGE7ICRpKyspIHsKKwkJbXkgKCRybSwgJGFkZCkgPSBoaWdobGlnaHRfcGFpcigkYS0+WyRpXSwgJGItPlskaV0pOworCQlwcmludCAkcm07CisJCXB1c2ggQHF1ZXVlLCAkYWRkOworCX0KKwlwcmludCBAcXVldWU7Cit9CisKK3N1YiBoaWdobGlnaHRfcGFpciB7CisJbXkgQGEgPSBzcGxpdF9saW5lKHNoaWZ0KTsKKwlteSBAYiA9IHNwbGl0X2xpbmUoc2hpZnQpOworCisJIyBGaW5kIGNvbW1vbiBwcmVmaXgsIHRha2luZyBjYXJlIHRvIHNraXAgYW55IGFuc2kKKwkjIGNvbG9yIGNvZGVzLgorCW15ICRzZWVuX3BsdXNtaW51czsKKwlteSAoJHBhLCAkcGIpID0gKDAsIDApOworCXdoaWxlICgkcGEgPCBAYSAmJiAkcGIgPCBAYikgeworCQlpZiAoJGFbJHBhXSA9fiAvJENPTE9SLykgeworCQkJJHBhKys7CisJCX0KKwkJZWxzaWYgKCRiWyRwYl0gPX4gLyRDT0xPUi8pIHsKKwkJCSRwYisrOworCQl9CisJCWVsc2lmICgkYVskcGFdIGVxICRiWyRwYl0pIHsKKwkJCSRwYSsrOworCQkJJHBiKys7CisJCX0KKwkJZWxzaWYgKCEkc2Vlbl9wbHVzbWludXMgJiYgJGFbJHBhXSBlcSAnLScgJiYgJGJbJHBiXSBlcSAnKycpIHsKKwkJCSRzZWVuX3BsdXNtaW51cyA9IDE7CisJCQkkcGErKzsKKwkJCSRwYisrOworCQl9CisJCWVsc2UgeworCQkJbGFzdDsKKwkJfQorCX0KKworCSMgRmluZCBjb21tb24gc3VmZml4LCBpZ25vcmluZyBjb2xvcnMuCisJbXkgKCRzYSwgJHNiKSA9ICgkI2EsICQjYik7CisJd2hpbGUgKCRzYSA+PSAkcGEgJiYgJHNiID49ICRwYikgeworCQlpZiAoJGFbJHNhXSA9fiAvJENPTE9SLykgeworCQkJJHNhLS07CisJCX0KKwkJZWxzaWYgKCRiWyRzYl0gPX4gLyRDT0xPUi8pIHsKKwkJCSRzYi0tOworCQl9CisJCWVsc2lmICgkYVskc2FdIGVxICRiWyRzYl0pIHsKKwkJCSRzYS0tOworCQkJJHNiLS07CisJCX0KKwkJZWxzZSB7CisJCQlsYXN0OworCQl9CisJfQorCisJaWYgKGlzX3BhaXJfaW50ZXJlc3RpbmcoXEBhLCAkcGEsICRzYSwgXEBiLCAkcGIsICRzYikpIHsKKwkJcmV0dXJuIGhpZ2hsaWdodF9saW5lKFxAYSwgJHBhLCAkc2EpLAorCQkgICAgICAgaGlnaGxpZ2h0X2xpbmUoXEBiLCAkcGIsICRzYik7CisJfQorCWVsc2UgeworCQlyZXR1cm4gam9pbignJywgQGEpLAorCQkgICAgICAgam9pbignJywgQGIpOworCX0KK30KKworc3ViIHNwbGl0X2xpbmUgeworCWxvY2FsICRfID0gc2hpZnQ7CisJcmV0dXJuIG1hcCB7IC8kQ09MT1IvID8gJF8gOiAoc3BsaXQgLy8pIH0KKwkgICAgICAgc3BsaXQgLygkQ09MT1IqKS87Cit9CisKK3N1YiBoaWdobGlnaHRfbGluZSB7CisJbXkgKCRsaW5lLCAkcHJlZml4LCAkc3VmZml4KSA9IEBfOworCisJcmV0dXJuIGpvaW4oJycsCisJCUB7JGxpbmV9WzAuLigkcHJlZml4LTEpXSwKKwkJJEhJR0hMSUdIVCwKKwkJQHskbGluZX1bJHByZWZpeC4uJHN1ZmZpeF0sCisJCSRVTkhJR0hMSUdIVCwKKwkJQHskbGluZX1bKCRzdWZmaXgrMSkuLiQjJGxpbmVdCisJKTsKK30KKworIyBQYWlycyBhcmUgaW50ZXJlc3RpbmcgdG8gaGlnaGxpZ2h0IG9ubHkgaWYgd2UgYXJlIGdvaW5nIHRvIGVuZCB1cAorIyBoaWdobGlnaHRpbmcgYSBzdWJzZXQgKGkuZS4sIG5vdCB0aGUgd2hvbGUgbGluZSkuIE90aGVyd2lzZSwgdGhlIGhpZ2hsaWdodGluZworIyBpcyBqdXN0IHVzZWxlc3Mgbm9pc2UuIFdlIGNhbiBkZXRlY3QgdGhpcyBieSBmaW5kaW5nIGVpdGhlciBhIG1hdGNoaW5nIHByZWZpeAorIyBvciBzdWZmaXggKGRpc3JlZ2FyZGluZyBib3JpbmcgYml0cyBsaWtlIHdoaXRlc3BhY2UgYW5kIGNvbG9yaXphdGlvbikuCitzdWIgaXNfcGFpcl9pbnRlcmVzdGluZyB7CisJbXkgKCRhLCAkcGEsICRzYSwgJGIsICRwYiwgJHNiKSA9IEBfOworCW15ICRwcmVmaXhfYSA9IGpvaW4oJycsIEAkYVswLi4oJHBhLTEpXSk7CisJbXkgJHByZWZpeF9iID0gam9pbignJywgQCRiWzAuLigkcGItMSldKTsKKwlteSAkc3VmZml4X2EgPSBqb2luKCcnLCBAJGFbKCRzYSsxKS4uJCMkYV0pOworCW15ICRzdWZmaXhfYiA9IGpvaW4oJycsIEAkYlsoJHNiKzEpLi4kIyRiXSk7CisKKwlyZXR1cm4gJHByZWZpeF9hICF+IC9eJENPTE9SKi0kQk9SSU5HKiQvIHx8CisJICAgICAgICRwcmVmaXhfYiAhfiAvXiRDT0xPUipcKyRCT1JJTkcqJC8gfHwKKwkgICAgICAgJHN1ZmZpeF9hICF+IC9eJEJPUklORyokLyB8fAorCSAgICAgICAkc3VmZml4X2IgIX4gL14kQk9SSU5HKiQvOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9kaWZmYWxsL1JFQURNRSBiL2NvbnRyaWIvZGlmZmFsbC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3ZjE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZGlmZmFsbC9SRUFETUUKQEAgLTAsMCArMSwzMSBAQAorVGhlIGdpdC1kaWZmYWxsIHNjcmlwdCBwcm92aWRlcyBhIGRpcmVjdG9yeSBiYXNlZCBkaWZmIG1lY2hhbmlzbQorZm9yIGdpdC4KKworVG8gZGV0ZXJtaW5lIHdoYXQgZGlmZiB2aWV3ZXIgaXMgdXNlZCwgdGhlIHNjcmlwdCByZXF1aXJlcyBlaXRoZXIKK3RoZSAnZGlmZi50b29sJyBvciAnbWVyZ2UudG9vbCcgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYmUgc2V0LgorCitUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggbW9zdCBjb21tb24gZm9ybXMgdXNlZCB0byBzcGVjaWZ5IGEKK3JhbmdlIG9mIHJldmlzaW9ucyB0byBkaWZmOgorCisgIDEuIGdpdCBkaWZmYWxsOiBzaG93cyBkaWZmIGJldHdlZW4gd29ya2luZyB0cmVlIGFuZCBzdGFnZWQgY2hhbmdlcworICAyLiBnaXQgZGlmZmFsbCAtLWNhY2hlZCBbPGNvbW1pdD5dOiBzaG93cyBkaWZmIGJldHdlZW4gc3RhZ2VkCisgICAgIGNoYW5nZXMgYW5kIEhFQUQgKG9yIG90aGVyIG5hbWVkIGNvbW1pdCkKKyAgMy4gZ2l0IGRpZmZhbGwgPGNvbW1pdD46IHNob3dzIGRpZmYgYmV0d2VlbiB3b3JraW5nIHRyZWUgYW5kIG5hbWVkCisgICAgIGNvbW1pdAorICA0LiBnaXQgZGlmZmFsbCA8Y29tbWl0PiA8Y29tbWl0Pjogc2hvdyBkaWZmIGJldHdlZW4gdHdvIG5hbWVkIGNvbW1pdHMKKyAgNS4gZ2l0IGRpZmZhbGwgPGNvbW1pdD4uLjxjb21taXQ+OiBzYW1lIGFzIGFib3ZlCisgIDYuIGdpdCBkaWZmYWxsIDxjb21taXQ+Li4uPGNvbW1pdD46IHNob3cgdGhlIGNoYW5nZXMgb24gdGhlIGJyYW5jaAorICAgICBjb250YWluaW5nIGFuZCB1cCB0byB0aGUgc2Vjb25kLCBzdGFydGluZyBhdCBhIGNvbW1vbiBhbmNlc3RvcgorICAgICBvZiBib3RoIDxjb21taXQ+CisKK05vdGU6IGFsbCBmb3JtcyB0YWtlIGFuIG9wdGlvbmFsIHBhdGggbGltaXRlciBbLS0gPHBhdGg+Kl0KKworVGhlICctLWV4dGNtZD08Y29tbWFuZD4nIG9wdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIGN1c3RvbQorY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcy4gIFdoZW4gZ2l2ZW4sIGNvbmZpZ3VyZWQgZGVmYXVsdHMgYXJlCitpZ25vcmVkIGFuZCB0aGUgc2NyaXB0IHJ1bnMgJGNvbW1hbmQgJExPQ0FMICRSRU1PVEUuICBBZGRpdGlvbmFsbHksCiskQkFTRSBpcyBzZXQgaW4gdGhlIGVudmlyb25tZW50LgorCitUaGlzIHNjcmlwdCBpcyBiYXNlZCBvbiBhbiBleGFtcGxlIHByb3ZpZGVkIGJ5IFRob21hcyBSYXN0IG9uIHRoZQorR2l0IGxpc3QgWzFdOgorCitbMV0gaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzEyNDgwNwpkaWZmIC0tZ2l0IGEvY29udHJpYi9kaWZmYWxsL2dpdC1kaWZmYWxsIGIvY29udHJpYi9kaWZmYWxsL2dpdC1kaWZmYWxsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0ZjJiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2RpZmZhbGwvZ2l0LWRpZmZhbGwKQEAgLTAsMCArMSwyNTcgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgMjAxMCAtIDIwMTIsIFRpbSBIZW5pZ2FuIDx0aW0uaGVuaWdhbkBnbWFpbC5jb20+CisjCisjIFBlcmZvcm0gYSBkaXJlY3RvcnkgZGlmZiBiZXR3ZWVuIGNvbW1pdHMgaW4gdGhlIHJlcG9zaXRvcnkgdXNpbmcKKyMgdGhlIGV4dGVybmFsIGRpZmYgb3IgbWVyZ2UgdG9vbCBzcGVjaWZpZWQgaW4gdGhlIHVzZXIncyBjb25maWcuCisKK1VTQUdFPSdbLS1jYWNoZWRdIFstLWNvcHktYmFja10gWy14fC0tZXh0Y21kPTxjb21tYW5kPl0gPGNvbW1pdD57MCwyfSBbLS0gPHBhdGg+Kl0KKworICAgIC0tY2FjaGVkICAgICBDb21wYXJlIHRvIHRoZSBpbmRleCByYXRoZXIgdGhhbiB0aGUgd29ya2luZyB0cmVlLgorCisgICAgLS1jb3B5LWJhY2sgIENvcHkgZmlsZXMgYmFjayB0byB0aGUgd29ya2luZyB0cmVlIHdoZW4gdGhlIGRpZmYKKyAgICAgICAgICAgICAgICAgdG9vbCBleGl0cyAoaW4gY2FzZSB0aGV5IHdlcmUgbW9kaWZpZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgIHVzZXIpLiAgVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBpZiB0aGUgZGlmZgorICAgICAgICAgICAgICAgICBjb21wYXJlZCB3aXRoIHRoZSB3b3JraW5nIHRyZWUuCisKKyAgICAteD08Y29tbWFuZD4KKyAgICAtLWV4dGNtZD08Y29tbWFuZD4gIFNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcy4KKyAgICAgICAgICAgICAgICAgZ2l0LWRpZmZhbGwgaWdub3JlcyB0aGUgY29uZmlndXJlZCBkZWZhdWx0cyBhbmQKKyAgICAgICAgICAgICAgICAgcnVucyAkY29tbWFuZCAkTE9DQUwgJFJFTU9URSB3aGVuIHRoaXMgb3B0aW9uIGlzCisgICAgICAgICAgICAgICAgIHNwZWNpZmllZC4gQWRkaXRpb25hbGx5LCAkQkFTRSBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorJworCitTVUJESVJFQ1RPUllfT0s9MQorLiAiJChnaXQgLS1leGVjLXBhdGgpL2dpdC1zaC1zZXR1cCIKKworVE9PTF9NT0RFPWRpZmYKKy4gIiQoZ2l0IC0tZXhlYy1wYXRoKS9naXQtbWVyZ2V0b29sLS1saWIiCisKK21lcmdlX3Rvb2w9IiQoZ2V0X21lcmdlX3Rvb2wpIgoraWYgdGVzdCAteiAiJG1lcmdlX3Rvb2wiCit0aGVuCisJZWNobyAiRXJyb3I6IEVpdGhlciB0aGUgJ2RpZmYudG9vbCcgb3IgJ21lcmdlLnRvb2wnIG9wdGlvbiBtdXN0IGJlIHNldC4iCisJdXNhZ2UKK2ZpCisKK3N0YXJ0X2Rpcj0kKHB3ZCkKKworIyBBbGwgdGhlIGZpbGUgcGF0aHMgcmV0dXJuZWQgYnkgdGhlIGRpZmYgY29tbWFuZCBhcmUgcmVsYXRpdmUgdG8gdGhlIHJvb3QKKyMgb2YgdGhlIHdvcmtpbmcgY29weS4gU28gaWYgdGhlIHNjcmlwdCBpcyBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSwgaXQKKyMgbXVzdCBzd2l0Y2ggdG8gdGhlIHJvb3Qgb2Ygd29ya2luZyBjb3B5IGJlZm9yZSB0cnlpbmcgdG8gdXNlIHRob3NlIHBhdGhzLgorY2R1cD0kKGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXApICYmCitjZCAiJGNkdXAiIHx8IHsKKwllY2hvID4mMiAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKKwlleGl0IDEKK30KKworIyBzZXQgdXAgdGVtcCBkaXIKK3RtcD0kKHBlcmwgLWUgJ3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBkaXIpOworCSR0PXRlbXBkaXIoIi90bXAvZ2l0LWRpZmZhbGwuWFhYWFgiKSBvciBleGl0KDEpOworCXByaW50ICR0JykgfHwgZXhpdCAxCit0cmFwICdybSAtcmYgIiR0bXAiJyBFWElUCisKK2xlZnQ9CityaWdodD0KK3BhdGhzPQorZGFzaGRhc2hfc2Vlbj0KK2NvbXBhcmVfc3RhZ2VkPQorbWVyZ2VfYmFzZT0KK2xlZnRfZGlyPQorcmlnaHRfZGlyPQorZGlmZl90b29sPQorY29weV9iYWNrPQorCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQorCQl1c2FnZQorCQk7OworCS0tY2FjaGVkKQorCQljb21wYXJlX3N0YWdlZD0xCisJCTs7CisJLS1jb3B5LWJhY2spCisJCWNvcHlfYmFjaz0xCisJCTs7CisJLXh8LS1lfC0tZXh8LS1leHR8LS1leHRjfC0tZXh0Y218LS1leHRjbWQpCisJCWlmIHRlc3QgJCMgPSAxCisJCXRoZW4KKwkJCWVjaG8gWW91IG11c3Qgc3BlY2lmeSB0aGUgdG9vbCBmb3IgdXNlIHdpdGggLS1leHRjbWQKKwkJCXVzYWdlCisJCWVsc2UKKwkJCWRpZmZfdG9vbD0kMgorCQkJc2hpZnQKKwkJZmkKKwkJOzsKKwktLSkKKwkJZGFzaGRhc2hfc2Vlbj0xCisJCTs7CisJLSopCisJCWVjaG8gSW52YWxpZCBvcHRpb246ICIkMSIKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQkjIGNvdWxkIGJlIGNvbW1pdCwgY29tbWl0IHJhbmdlIG9yIHBhdGggbGltaXRlcgorCQljYXNlICIkMSIgaW4KKwkJKi4uLiopCisJCQlsZWZ0PSR7MSUuLi4qfQorCQkJcmlnaHQ9JHsxIyouLi59CisJCQltZXJnZV9iYXNlPTEKKwkJCTs7CisJCSouLiopCisJCQlsZWZ0PSR7MSUuLip9CisJCQlyaWdodD0kezEjKi4ufQorCQkJOzsKKwkJKikKKwkJCWlmIHRlc3QgLW4gIiRkYXNoZGFzaF9zZWVuIgorCQkJdGhlbgorCQkJCXBhdGhzPSIkcGF0aHMkMSAiCisJCQllbGlmIHRlc3QgLXogIiRsZWZ0IgorCQkJdGhlbgorCQkJCWxlZnQ9JDEKKwkJCWVsaWYgdGVzdCAteiAiJHJpZ2h0IgorCQkJdGhlbgorCQkJCXJpZ2h0PSQxCisJCQllbHNlCisJCQkJcGF0aHM9IiRwYXRocyQxICIKKwkJCWZpCisJCQk7OworCQllc2FjCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKKyMgRGV0ZXJtaW5lIHRoZSBzZXQgb2YgZmlsZXMgd2hpY2ggY2hhbmdlZAoraWYgdGVzdCAtbiAiJGxlZnQiICYmIHRlc3QgLW4gIiRyaWdodCIKK3RoZW4KKwlsZWZ0X2Rpcj0iY210LSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRsZWZ0KSIKKwlyaWdodF9kaXI9ImNtdC0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkcmlnaHQpIgorCisJaWYgdGVzdCAtbiAiJGNvbXBhcmVfc3RhZ2VkIgorCXRoZW4KKwkJdXNhZ2UKKwllbGlmIHRlc3QgLW4gIiRtZXJnZV9iYXNlIgorCXRoZW4KKwkJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgIiRsZWZ0Ii4uLiIkcmlnaHQiIC0tICRwYXRocyA+IiR0bXAvZmlsZWxpc3QiCisJZWxzZQorCQlnaXQgZGlmZiAtLW5hbWUtb25seSAiJGxlZnQiICIkcmlnaHQiIC0tICRwYXRocyA+IiR0bXAvZmlsZWxpc3QiCisJZmkKK2VsaWYgdGVzdCAtbiAiJGxlZnQiCit0aGVuCisJbGVmdF9kaXI9ImNtdC0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkbGVmdCkiCisKKwlpZiB0ZXN0IC1uICIkY29tcGFyZV9zdGFnZWQiCisJdGhlbgorCQlyaWdodF9kaXI9InN0YWdlZCIKKwkJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgLS1jYWNoZWQgIiRsZWZ0IiAtLSAkcGF0aHMgPiIkdG1wL2ZpbGVsaXN0IgorCWVsc2UKKwkJcmlnaHRfZGlyPSJ3b3JraW5nX3RyZWUiCisJCWdpdCBkaWZmIC0tbmFtZS1vbmx5ICIkbGVmdCIgLS0gJHBhdGhzID4iJHRtcC9maWxlbGlzdCIKKwlmaQorZWxzZQorCWxlZnRfZGlyPSJIRUFEIgorCisJaWYgdGVzdCAtbiAiJGNvbXBhcmVfc3RhZ2VkIgorCXRoZW4KKwkJcmlnaHRfZGlyPSJzdGFnZWQiCisJCWdpdCBkaWZmIC0tbmFtZS1vbmx5IC0tY2FjaGVkIC0tICRwYXRocyA+IiR0bXAvZmlsZWxpc3QiCisJZWxzZQorCQlyaWdodF9kaXI9IndvcmtpbmdfdHJlZSIKKwkJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgLS0gJHBhdGhzID4iJHRtcC9maWxlbGlzdCIKKwlmaQorZmkKKworIyBFeGl0IGltbWVkaWF0ZWx5IGlmIHRoZXJlIGFyZSBubyBkaWZmcworaWYgdGVzdCAhIC1zICIkdG1wL2ZpbGVsaXN0IgordGhlbgorCWV4aXQgMAorZmkKKworaWYgdGVzdCAtbiAiJGNvcHlfYmFjayIgJiYgdGVzdCAiJHJpZ2h0X2RpciIgIT0gIndvcmtpbmdfdHJlZSIKK3RoZW4KKwllY2hvICItLWNvcHktYmFjayBpcyBvbmx5IHZhbGlkIHdoZW4gZGlmZiBpbmNsdWRlcyB0aGUgd29ya2luZyB0cmVlLiIKKwlleGl0IDEKK2ZpCisKKyMgQ3JlYXRlIHRoZSBuYW1lZCB0bXAgZGlyZWN0b3JpZXMgdGhhdCB3aWxsIGhvbGQgdGhlIGZpbGVzIHRvIGJlIGNvbXBhcmVkCitta2RpciAtcCAiJHRtcC8kbGVmdF9kaXIiICIkdG1wLyRyaWdodF9kaXIiCisKKyMgUG9wdWxhdGUgdGhlIHRtcC9yaWdodF9kaXIgZGlyZWN0b3J5IHdpdGggdGhlIGZpbGVzIHRvIGJlIGNvbXBhcmVkCit3aGlsZSByZWFkIG5hbWUKK2RvCisJaWYgdGVzdCAtbiAiJHJpZ2h0IgorCXRoZW4KKwkJbHNfbGlzdD0kKGdpdCBscy10cmVlICRyaWdodCAiJG5hbWUiKQorCQlpZiB0ZXN0IC1uICIkbHNfbGlzdCIKKwkJdGhlbgorCQkJbWtkaXIgLXAgIiR0bXAvJHJpZ2h0X2Rpci8kKGRpcm5hbWUgIiRuYW1lIikiCisJCQlnaXQgc2hvdyAiJHJpZ2h0IjoiJG5hbWUiID4iJHRtcC8kcmlnaHRfZGlyLyRuYW1lIiB8fCB0cnVlCisJCWZpCisJZWxpZiB0ZXN0IC1uICIkY29tcGFyZV9zdGFnZWQiCisJdGhlbgorCQlsc19saXN0PSQoZ2l0IGxzLWZpbGVzIC0tICIkbmFtZSIpCisJCWlmIHRlc3QgLW4gIiRsc19saXN0IgorCQl0aGVuCisJCQlta2RpciAtcCAiJHRtcC8kcmlnaHRfZGlyLyQoZGlybmFtZSAiJG5hbWUiKSIKKwkJCWdpdCBzaG93IDoiJG5hbWUiID4iJHRtcC8kcmlnaHRfZGlyLyRuYW1lIgorCQlmaQorCWVsc2UKKwkJaWYgdGVzdCAtZSAiJG5hbWUiCisJCXRoZW4KKwkJCW1rZGlyIC1wICIkdG1wLyRyaWdodF9kaXIvJChkaXJuYW1lICIkbmFtZSIpIgorCQkJY3AgIiRuYW1lIiAiJHRtcC8kcmlnaHRfZGlyLyRuYW1lIgorCQlmaQorCWZpCitkb25lIDwgIiR0bXAvZmlsZWxpc3QiCisKKyMgUG9wdWxhdGUgdGhlIHRtcC9sZWZ0X2RpciBkaXJlY3Rvcnkgd2l0aCB0aGUgZmlsZXMgdG8gYmUgY29tcGFyZWQKK3doaWxlIHJlYWQgbmFtZQorZG8KKwlpZiB0ZXN0IC1uICIkbGVmdCIKKwl0aGVuCisJCWxzX2xpc3Q9JChnaXQgbHMtdHJlZSAkbGVmdCAiJG5hbWUiKQorCQlpZiB0ZXN0IC1uICIkbHNfbGlzdCIKKwkJdGhlbgorCQkJbWtkaXIgLXAgIiR0bXAvJGxlZnRfZGlyLyQoZGlybmFtZSAiJG5hbWUiKSIKKwkJCWdpdCBzaG93ICIkbGVmdCI6IiRuYW1lIiA+IiR0bXAvJGxlZnRfZGlyLyRuYW1lIiB8fCB0cnVlCisJCWZpCisJZWxzZQorCQlpZiB0ZXN0IC1uICIkY29tcGFyZV9zdGFnZWQiCisJCXRoZW4KKwkJCWxzX2xpc3Q9JChnaXQgbHMtdHJlZSBIRUFEICIkbmFtZSIpCisJCQlpZiB0ZXN0IC1uICIkbHNfbGlzdCIKKwkJCXRoZW4KKwkJCQlta2RpciAtcCAiJHRtcC8kbGVmdF9kaXIvJChkaXJuYW1lICIkbmFtZSIpIgorCQkJCWdpdCBzaG93IEhFQUQ6IiRuYW1lIiA+IiR0bXAvJGxlZnRfZGlyLyRuYW1lIgorCQkJZmkKKwkJZWxzZQorCQkJbWtkaXIgLXAgIiR0bXAvJGxlZnRfZGlyLyQoZGlybmFtZSAiJG5hbWUiKSIKKwkJCWdpdCBzaG93IDoiJG5hbWUiID4iJHRtcC8kbGVmdF9kaXIvJG5hbWUiCisJCWZpCisJZmkKK2RvbmUgPCAiJHRtcC9maWxlbGlzdCIKKworTE9DQUw9IiR0bXAvJGxlZnRfZGlyIgorUkVNT1RFPSIkdG1wLyRyaWdodF9kaXIiCisKK2lmIHRlc3QgLW4gIiRkaWZmX3Rvb2wiCit0aGVuCisJZXhwb3J0IEJBU0UKKwlldmFsICRkaWZmX3Rvb2wgJyIkTE9DQUwiJyAnIiRSRU1PVEUiJworZWxzZQorCXJ1bl9tZXJnZV90b29sICIkbWVyZ2VfdG9vbCIgZmFsc2UKK2ZpCisKKyMgQ29weSBmaWxlcyBiYWNrIHRvIHRoZSB3b3JraW5nIGRpciwgaWYgcmVxdWVzdGVkCitpZiB0ZXN0IC1uICIkY29weV9iYWNrIiAmJiB0ZXN0ICIkcmlnaHRfZGlyIiA9ICJ3b3JraW5nX3RyZWUiCit0aGVuCisJY2QgIiRzdGFydF9kaXIiCisJZ2l0X3RvcF9kaXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkKKwlmaW5kICIkdG1wLyRyaWdodF9kaXIiIC10eXBlIGYgfAorCXdoaWxlIHJlYWQgZmlsZQorCWRvCisJCWNwICIkZmlsZSIgIiRnaXRfdG9wX2Rpci8ke2ZpbGUjJHRtcC8kcmlnaHRfZGlyL30iCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZW1hY3MvLmdpdGlnbm9yZSBiL2NvbnRyaWIvZW1hY3MvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTMxZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKKyouZWxjCmRpZmYgLS1naXQgYS9jb250cmliL2VtYWNzL01ha2VmaWxlIGIvY29udHJpYi9lbWFjcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQ5MzEyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy9NYWtlZmlsZQpAQCAtMCwwICsxLDIxIEBACisjIyBCdWlsZCBhbmQgaW5zdGFsbCBzdHVmZgorCitFTUFDUyA9IGVtYWNzCisKK0VMQyA9IGdpdC5lbGMgZ2l0LWJsYW1lLmVsYworSU5TVEFMTCA/PSBpbnN0YWxsCitJTlNUQUxMX0VMQyA9ICQoSU5TVEFMTCkgLW0gNjQ0CitwcmVmaXggPz0gJChIT01FKQorZW1hY3NkaXIgPSAkKHByZWZpeCkvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwCitSTSA/PSBybSAtZgorCithbGw6ICQoRUxDKQorCitpbnN0YWxsOiBhbGwKKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKGVtYWNzZGlyKQorCSQoSU5TVEFMTF9FTEMpICQoRUxDOi5lbGM9LmVsKSAkKEVMQykgJChERVNURElSKSQoZW1hY3NkaXIpCisKKyUuZWxjOiAlLmVsCisJJChFTUFDUykgLWJhdGNoIC1mIGJhdGNoLWJ5dGUtY29tcGlsZSAkPAorCitjbGVhbjo7ICQoUk0pICQoRUxDKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9lbWFjcy9SRUFETUUgYi9jb250cmliL2VtYWNzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjM2OGJkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy9SRUFETUUKQEAgLTAsMCArMSwzOSBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdmFyaW91cyBtb2R1bGVzIGZvciBFbWFjcyBzdXBwb3J0LgorCitUbyBtYWtlIHRoZSBtb2R1bGVzIGF2YWlsYWJsZSB0byBFbWFjcywgeW91IHNob3VsZCBhZGQgdGhpcyBkaXJlY3RvcnkKK3RvIHlvdXIgbG9hZC1wYXRoLCBhbmQgdGhlbiByZXF1aXJlIHRoZSBtb2R1bGVzIHlvdSB3YW50LiBUaGlzIGNhbiBiZQorZG9uZSBieSBhZGRpbmcgdG8geW91ciAuZW1hY3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAoYWRkLXRvLWxpc3QgJ2xvYWQtcGF0aCAiLi4uL2dpdC9jb250cmliL2VtYWNzIikKKyAgKHJlcXVpcmUgJ2dpdCkKKyAgKHJlcXVpcmUgJ2dpdC1ibGFtZSkKKworCitUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGF2YWlsYWJsZToKKworKiBnaXQuZWw6CisKKyAgU3RhdHVzIG1hbmFnZXIgdGhhdCBkaXNwbGF5cyB0aGUgc3RhdGUgb2YgYWxsIHRoZSBmaWxlcyBvZiB0aGUKKyAgcHJvamVjdCwgYW5kIHByb3ZpZGVzIGVhc3kgYWNjZXNzIHRvIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBnaXQKKyAgY29tbWFuZHMuIFRoZSB1c2VyIGludGVyZmFjZSBpcyBhcyBmYXIgYXMgcG9zc2libGUgY29tcGF0aWJsZSB3aXRoCisgIHRoZSBwY2wtY3ZzIG1vZGUuIEl0IGNhbiBiZSBzdGFydGVkIHdpdGggYE0teCBnaXQtc3RhdHVzJy4KKworKiBnaXQtYmxhbWUuZWw6CisKKyAgRW1hY3MgaW1wbGVtZW50YXRpb24gb2YgaW5jcmVtZW50YWwgZ2l0LWJsYW1lLiAgV2hlbiB5b3UgdHVybiBpdCBvbgorICB3aGlsZSB2aWV3aW5nIGEgZmlsZSwgdGhlIGVkaXRvciBidWZmZXIgd2lsbCBiZSB1cGRhdGVkIGJ5IHNldHRpbmcKKyAgdGhlIGJhY2tncm91bmQgb2YgaW5kaXZpZHVhbCBsaW5lcyB0byBhIGNvbG9yIHRoYXQgcmVmbGVjdHMgd2hpY2gKKyAgY29tbWl0IGl0IGNvbWVzIGZyb20uICBBbmQgd2hlbiB5b3UgbW92ZSBhcm91bmQgdGhlIGJ1ZmZlciwgYQorICBvbmUtbGluZSBzdW1tYXJ5IHdpbGwgYmUgc2hvd24gaW4gdGhlIGVjaG8gYXJlYS4KKworKiB2Yy1naXQuZWw6CisKKyAgVGhpcyBmaWxlIHVzZWQgdG8gY29udGFpbiB0aGUgVkMtbW9kZSBiYWNrZW5kIGZvciBnaXQsIGJ1dCBpdCBpcyBubworICBsb25nZXIgZGlzdHJpYnV0ZWQgd2l0aCBnaXQuIEl0IGlzIG5vdyBtYWludGFpbmVkIGFzIHBhcnQgb2YgRW1hY3MKKyAgYW5kIGluY2x1ZGVkIGluIHN0YW5kYXJkIEVtYWNzIGRpc3RyaWJ1dGlvbnMgc3RhcnRpbmcgZnJvbSB2ZXJzaW9uCisgIDIyLjIuCisKKyAgSWYgeW91IGhhdmUgYW4gZWFybGllciBFbWFjcyB2ZXJzaW9uLCB1cGdyYWRpbmcgdG8gRW1hY3MgMjIgaXMKKyAgcmVjb21tZW5kZWQsIHNpbmNlIHRoZSBWQyBtb2RlIGluIG9sZGVyIEVtYWNzIGlzIG5vdCBnZW5lcmljIGVub3VnaAorICB0byBiZSBhYmxlIHRvIHN1cHBvcnQgZ2l0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIsIGFuZCBubyBhdHRlbXB0IGhhcworICBiZWVuIG1hZGUgdG8gYmFja3BvcnQgdmMtZ2l0LmVsLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9lbWFjcy9naXQtYmxhbWUuZWwgYi9jb250cmliL2VtYWNzL2dpdC1ibGFtZS5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjcxZjZjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy9naXQtYmxhbWUuZWwKQEAgLTAsMCArMSw0ODQgQEAKKzs7OyBnaXQtYmxhbWUuZWwgLS0tIE1pbm9yIG1vZGUgZm9yIGluY3JlbWVudGFsIGJsYW1lIGZvciBHaXQgIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorOzsKKzs7IENvcHlyaWdodCAoQykgMjAwNyAgRGF2aWQgS8OlZ2VkYWwKKzs7Cis7OyBBdXRob3JzOiAgICBEYXZpZCBLw6VnZWRhbCA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgorOzsgQ3JlYXRlZDogICAgMzEgSmFuIDIwMDcKKzs7IE1lc3NhZ2UtSUQ6IDw4N2lyZW4ydnF4LmZzZkBtb3JwaGV1cy5sb2NhbD4KKzs7IExpY2Vuc2U6ICAgIEdQTAorOzsgS2V5d29yZHM6ICAgZ2l0LCB2ZXJzaW9uIGNvbnRyb2wsIHJlbGVhc2UgbWFuYWdlbWVudAorOzsKKzs7IENvbXBhdGliaWxpdHk6IEVtYWNzMjEsIEVtYWNzMjIgYW5kIEVtYWNzQ1ZTCis7OyAgICAgICAgICAgICAgICBHaXQgMS41IGFuZCB1cAorCis7OyBUaGlzIGZpbGUgaXMgKk5PVCogcGFydCBvZiBHTlUgRW1hY3MuCis7OyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgR05VIEVtYWNzLgorCis7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7OyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOzsgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzs7IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCis7OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCis7OyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCis7OyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCis7OyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKzs7IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKzs7IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCis7OyBNQSAwMjExMS0xMzA3IFVTQQorCis7OyBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKworCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OworOzs7IENvbW1lbnRhcnk6Cis7OworOzsgSGVyZSBpcyBhbiBFbWFjcyBpbXBsZW1lbnRhdGlvbiBvZiBpbmNyZW1lbnRhbCBnaXQtYmxhbWUuICBXaGVuIHlvdQorOzsgdHVybiBpdCBvbiB3aGlsZSB2aWV3aW5nIGEgZmlsZSwgdGhlIGVkaXRvciBidWZmZXIgd2lsbCBiZSB1cGRhdGVkIGJ5Cis7OyBzZXR0aW5nIHRoZSBiYWNrZ3JvdW5kIG9mIGluZGl2aWR1YWwgbGluZXMgdG8gYSBjb2xvciB0aGF0IHJlZmxlY3RzCis7OyB3aGljaCBjb21taXQgaXQgY29tZXMgZnJvbS4gIEFuZCB3aGVuIHlvdSBtb3ZlIGFyb3VuZCB0aGUgYnVmZmVyLCBhCis7OyBvbmUtbGluZSBzdW1tYXJ5IHdpbGwgYmUgc2hvd24gaW4gdGhlIGVjaG8gYXJlYS4KKworOzs7IEluc3RhbGxhdGlvbjoKKzs7Cis7OyBUbyB1c2UgdGhpcyBwYWNrYWdlLCBwdXQgaXQgc29tZXdoZXJlIGluIGBsb2FkLXBhdGgnIChvciBhZGQKKzs7IGRpcmVjdG9yeSB3aXRoIGdpdC1ibGFtZS5lbCB0byBgbG9hZC1wYXRoJyksIGFuZCBhZGQgdGhlIGZvbGxvd2luZworOzsgbGluZSB0byB5b3VyIC5lbWFjczoKKzs7Cis7OyAgICAocmVxdWlyZSAnZ2l0LWJsYW1lKQorOzsKKzs7IElmIHlvdSBkbyBub3Qgd2FudCB0byBsb2FkIHRoaXMgcGFja2FnZSBiZWZvcmUgaXQgaXMgbmVjZXNzYXJ5LCB5b3UKKzs7IGNhbiBtYWtlIHVzZSBvZiB0aGUgYGF1dG9sb2FkJyBmZWF0dXJlLCBlLmcuIGJ5IGFkZGluZyB0byB5b3VyIC5lbWFjcworOzsgdGhlIGZvbGxvd2luZyBsaW5lcworOzsKKzs7ICAgIChhdXRvbG9hZCAnZ2l0LWJsYW1lLW1vZGUgImdpdC1ibGFtZSIKKzs7ICAgICAgICAgICAgICAiTWlub3IgbW9kZSBmb3IgaW5jcmVtZW50YWwgYmxhbWUgZm9yIEdpdC4iIHQpCis7OworOzsgVGhlbiBmaXJzdCB1c2Ugb2YgYE0teCBnaXQtYmxhbWUtbW9kZScgd291bGQgbG9hZCB0aGUgcGFja2FnZS4KKworOzs7IENvbXBhdGliaWxpdHk6Cis7OworOzsgSXQgcmVxdWlyZXMgR05VIEVtYWNzIDIxIG9yIGxhdGVyIGFuZCBHaXQgMS41LjAgYW5kIHVwCis7OworOzsgSWYgeW91J2FyZSB1c2luZyBFbWFjcyAyMCwgdHJ5IGNoYW5naW5nIHRoaXM6Cis7OworOzsgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZsICdmYWNlIChsaXN0IDpiYWNrZ3JvdW5kCis7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkciAoYXNzcSAnY29sb3IgKGNkZGRkciBpbmZvKSkpKSkKKzs7Cis7OyB0bworOzsKKzs7ICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92bCAnZmFjZSAoY29ucyAnYmFja2dyb3VuZC1jb2xvcgorOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIgKGFzc3EgJ2NvbG9yIChjZGRkZHIgaW5mbykpKSkpCisKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworOzsKKzs7OyBDb2RlOgorCisoZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVpcmUgJ2NsKSkJCQkgICAgICA7IHRvIHVzZSBgcHVzaCcsIGBwb3AnCisocmVxdWlyZSAnZm9ybWF0LXNwZWMpCisKKyhkZWZmYWNlIGdpdC1ibGFtZS1wcmVmaXgtZmFjZQorICAnKCgoKGJhY2tncm91bmQgZGFyaykpICg6Zm9yZWdyb3VuZCAiZ3JheSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOmJhY2tncm91bmQgImJsYWNrIikpCisgICAgKCgoYmFja2dyb3VuZCBsaWdodCkpICg6Zm9yZWdyb3VuZCAiZ3JheSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpiYWNrZ3JvdW5kICJ3aGl0ZSIpKQorICAgICh0ICg6d2VpZ2h0IGJvbGQpKSkKKyAgIlRoZSBmYWNlIHVzZWQgZm9yIHRoZSBoYXNoIHByZWZpeC4iCisgIDpncm91cCAnZ2l0LWJsYW1lKQorCisoZGVmZ3JvdXAgZ2l0LWJsYW1lIG5pbAorICAiQSBtaW5vciBtb2RlIHNob3dpbmcgR2l0IGJsYW1lIGluZm9ybWF0aW9uLiIKKyAgOmdyb3VwICdnaXQKKyAgOmxpbmsgJyhmdW5jdGlvbi1saW5rIGdpdC1ibGFtZS1tb2RlKSkKKworCisoZGVmY3VzdG9tIGdpdC1ibGFtZS11c2UtY29sb3JzIHQKKyAgIlVzZSBjb2xvcnMgdG8gaW5kaWNhdGUgY29tbWl0cyBpbiBgZ2l0LWJsYW1lLW1vZGUnLiIKKyAgOnR5cGUgJ2Jvb2xlYW4KKyAgOmdyb3VwICdnaXQtYmxhbWUpCisKKyhkZWZjdXN0b20gZ2l0LWJsYW1lLXByZWZpeC1mb3JtYXQKKyAgIiVoICUyMEE6IgorICAiVGhlIGZvcm1hdCBvZiB0aGUgcHJlZml4IGFkZGVkIHRvIGVhY2ggbGluZSBpbiBgZ2l0LWJsYW1lJworbW9kZS4gVGhlIGZvcm1hdCBpcyBwYXNzZWQgdG8gYGZvcm1hdC1zcGVjJyB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGtleXM6CisKKyAgJWggLSB0aGUgYWJicmV2aWF0ZWQgaGFzaAorICAlSCAtIHRoZSBmdWxsIGhhc2gKKyAgJWEgLSB0aGUgYXV0aG9yIG5hbWUKKyAgJUEgLSB0aGUgYXV0aG9yIGVtYWlsCisgICVjIC0gdGhlIGNvbW1pdHRlciBuYW1lCisgICVDIC0gdGhlIGNvbW1pdHRlciBlbWFpbAorICAlcyAtIHRoZSBjb21taXQgc3VtbWFyeQorIgorICA6Z3JvdXAgJ2dpdC1ibGFtZSkKKworKGRlZmN1c3RvbSBnaXQtYmxhbWUtbW91c2VvdmVyLWZvcm1hdAorICAiJWggJWEgJUE6ICVzIgorICAiVGhlIGZvcm1hdCBvZiB0aGUgZGVzY3JpcHRpb24gc2hvd24gd2hlbiBwb2ludGluZyBhdCBhIGxpbmUgaW4KK2BnaXQtYmxhbWUnIG1vZGUuIFRoZSBmb3JtYXQgc3RyaW5nIGlzIHBhc3NlZCB0byBgZm9ybWF0LXNwZWMnCit3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGtleXM6CisKKyAgJWggLSB0aGUgYWJicmV2aWF0ZWQgaGFzaAorICAlSCAtIHRoZSBmdWxsIGhhc2gKKyAgJWEgLSB0aGUgYXV0aG9yIG5hbWUKKyAgJUEgLSB0aGUgYXV0aG9yIGVtYWlsCisgICVjIC0gdGhlIGNvbW1pdHRlciBuYW1lCisgICVDIC0gdGhlIGNvbW1pdHRlciBlbWFpbAorICAlcyAtIHRoZSBjb21taXQgc3VtbWFyeQorIgorICA6Z3JvdXAgJ2dpdC1ibGFtZSkKKworCisoZGVmdW4gZ2l0LWJsYW1lLWNvbG9yLXNjYWxlICgmcmVzdCBlbGVtZW50cykKKyAgIkdpdmVuIGEgbGlzdCwgcmV0dXJucyBhIGxpc3Qgb2YgdHJpcGxlcyBmb3JtZWQgd2l0aCBlYWNoCitlbGVtZW50cyBvZiB0aGUgbGlzdC4KKworYSBiID0+IGJiYiBiYmEgYmFiIGJhYSBhYmIgYWJhIGFhYSBhYWIiCisgIChsZXQgKHJlc3VsdCkKKyAgICAoZG9saXN0IChhIGVsZW1lbnRzKQorICAgICAgKGRvbGlzdCAoYiBlbGVtZW50cykKKyAgICAgICAgKGRvbGlzdCAoYyBlbGVtZW50cykKKyAgICAgICAgICAoc2V0cSByZXN1bHQgKGNvbnMgKGZvcm1hdCAiIyVzJXMlcyIgYSBiIGMpIHJlc3VsdCkpKSkpCisgICAgcmVzdWx0KSkKKworOzsgKGdpdC1ibGFtZS1jb2xvci1zY2FsZSAiMGMiICIwNCIgIjI0IiAiMWMiICIyYyIgIjM0IiAiMTQiICIzYyIpID0+Cis7OyAoIiMzYzNjM2MiICIjM2MzYzE0IiAiIzNjM2MzNCIgIiMzYzNjMmMiICIjM2MzYzFjIiAiIzNjM2MyNCIKKzs7ICIjM2MzYzA0IiAiIzNjM2MwYyIgIiMzYzE0M2MiICIjM2MxNDE0IiAiIzNjMTQzNCIgIiMzYzE0MmMiIC4uLikKKworKGRlZm1hY3JvIGdpdC1ibGFtZS1yYW5kb20tcG9wIChsKQorICAiU2VsZWN0IGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBMIGFuZCByZXR1cm5zIGl0LiBBbHNvIHJlbW92ZQorc2VsZWN0ZWQgZWxlbWVudCBmcm9tIGwuIgorICA7OyBvbmx5IHdvcmtzIG9uIGxpc3RzIHdpdGggdW5pcXVlIGVsZW1lbnRzCisgIGAobGV0ICgoZSAoZWx0ICxsIChyYW5kb20gKGxlbmd0aCAsbCkpKSkpCisgICAgIChzZXRxICxsIChyZW1vdmUgZSAsbCkpCisgICAgIGUpKQorCisoZGVmdmFyIGdpdC1ibGFtZS1sb2ctb25lbGluZS1mb3JtYXQKKyAgImZvcm1hdDpbJWNyXSAlY246ICVzIgorICAiKkZvcm1hdHRpbmcgb3B0aW9uIHVzZWQgZm9yIGRlc2NyaWJpbmcgY3VycmVudCBsaW5lIGluIHRoZSBtaW5pYnVmZmVyLgorCitUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHBhc3MgdG8gZ2l0IGxvZyAtLXByZXR0eT0gY29tbWFuZC1saW5lIG9wdGlvbiwKK2FuZCBkZXNjcmliZSB3aGljaCBjb21taXQgdGhlIGN1cnJlbnQgbGluZSB3YXMgbWFkZS4iKQorCisoZGVmdmFyIGdpdC1ibGFtZS1kYXJrLWNvbG9ycworICAoZ2l0LWJsYW1lLWNvbG9yLXNjYWxlICIwYyIgIjA0IiAiMjQiICIxYyIgIjJjIiAiMzQiICIxNCIgIjNjIikKKyAgIipMaXN0IG9mIGNvbG9ycyAoZm9ybWF0ICNSR0IpIHRvIHVzZSBpbiBhIGRhcmsgZW52aXJvbm1lbnQuCisKK1RvIGNoZWNrIG91dCB0aGUgbGlzdCwgZXZhbHVhdGUgKGxpc3QtY29sb3JzLWRpc3BsYXkgZ2l0LWJsYW1lLWRhcmstY29sb3JzKS4iKQorCisoZGVmdmFyIGdpdC1ibGFtZS1saWdodC1jb2xvcnMKKyAgKGdpdC1ibGFtZS1jb2xvci1zY2FsZSAiYzQiICJkNCIgImNjIiAiZGMiICJmNCIgImU0IiAiZmMiICJlYyIpCisgICIqTGlzdCBvZiBjb2xvcnMgKGZvcm1hdCAjUkdCKSB0byB1c2UgaW4gYSBsaWdodCBlbnZpcm9ubWVudC4KKworVG8gY2hlY2sgb3V0IHRoZSBsaXN0LCBldmFsdWF0ZSAobGlzdC1jb2xvcnMtZGlzcGxheSBnaXQtYmxhbWUtbGlnaHQtY29sb3JzKS4iKQorCisoZGVmdmFyIGdpdC1ibGFtZS1jb2xvcnMgJygpCisgICJDb2xvcnMgdXNlZCBieSBnaXQtYmxhbWUuIFRoZSBsaXN0IGlzIGJ1aWx0IG9uY2Ugd2hlbiBhY3RpdmF0aW5nIGdpdC1ibGFtZQorbWlub3IgbW9kZS4iKQorCisoZGVmdmFyIGdpdC1ibGFtZS1hbmNpZW50LWNvbG9yICJkYXJrIGdyZWVuIgorICAiKkNvbG9yIHRvIGJlIHVzZWQgZm9yIGFuY2llbnQgY29tbWl0LiIpCisKKyhkZWZ2YXIgZ2l0LWJsYW1lLWF1dG91cGRhdGUgdAorICAiKkF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSBibGFtZSBkaXNwbGF5IHdoaWxlIGVkaXRpbmciKQorCisoZGVmdmFyIGdpdC1ibGFtZS1wcm9jIG5pbAorICAiVGhlIHJ1bm5pbmcgZ2l0LWJsYW1lIHByb2Nlc3MiKQorKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdnaXQtYmxhbWUtcHJvYykKKworKGRlZnZhciBnaXQtYmxhbWUtb3ZlcmxheXMgbmlsCisgICJUaGUgZ2l0LWJsYW1lIG92ZXJsYXlzIHVzZWQgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiIpCisobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2dpdC1ibGFtZS1vdmVybGF5cykKKworKGRlZnZhciBnaXQtYmxhbWUtY2FjaGUgbmlsCisgICJBIGNhY2hlIG9mIGdpdC1ibGFtZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyIikKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnZ2l0LWJsYW1lLWNhY2hlKQorCisoZGVmdmFyIGdpdC1ibGFtZS1pZGxlLXRpbWVyIG5pbAorICAiQW4gaWRsZSB0aW1lciB0aGF0IHVwZGF0ZXMgdGhlIGJsYW1lIikKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnZ2l0LWJsYW1lLWNhY2hlKQorCisoZGVmdmFyIGdpdC1ibGFtZS11cGRhdGUtcXVldWUgbmlsCisgICJBIHF1ZXVlIG9mIHVwZGF0ZSByZXF1ZXN0cyIpCisobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2dpdC1ibGFtZS11cGRhdGUtcXVldWUpCisKKzs7IEZJWE1FOiBkb2NzdHJpbmdzCisoZGVmdmFyIGdpdC1ibGFtZS1maWxlIG5pbCkKKyhkZWZ2YXIgZ2l0LWJsYW1lLWN1cnJlbnQgbmlsKQorCisoZGVmdmFyIGdpdC1ibGFtZS1tb2RlIG5pbCkKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnZ2l0LWJsYW1lLW1vZGUpCisKKyhkZWZ2YXIgZ2l0LWJsYW1lLW1vZGUtbGluZS1zdHJpbmcgIiBibGFtZSIKKyAgIlN0cmluZyB0byBkaXNwbGF5IG9uIHRoZSBtb2RlIGxpbmUgd2hlbiBnaXQtYmxhbWUgaXMgYWN0aXZlLiIpCisKKyhvciAoYXNzcSAnZ2l0LWJsYW1lLW1vZGUgbWlub3ItbW9kZS1hbGlzdCkKKyAgICAoc2V0cSBtaW5vci1tb2RlLWFsaXN0CisJICAoY29ucyAnKGdpdC1ibGFtZS1tb2RlIGdpdC1ibGFtZS1tb2RlLWxpbmUtc3RyaW5nKSBtaW5vci1tb2RlLWFsaXN0KSkpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gZ2l0LWJsYW1lLW1vZGUgKCZvcHRpb25hbCBhcmcpCisgICJUb2dnbGUgbWlub3IgbW9kZSBmb3IgZGlzcGxheWluZyBHaXQgYmxhbWUKKworV2l0aCBwcmVmaXggQVJHLCB0dXJuIHRoZSBtb2RlIG9uIGlmIEFSRyBpcyBwb3NpdGl2ZS4iCisgIChpbnRlcmFjdGl2ZSAiUCIpCisgIChjb25kCisgICAoKG51bGwgYXJnKQorICAgIChpZiBnaXQtYmxhbWUtbW9kZSAoZ2l0LWJsYW1lLW1vZGUtb2ZmKSAoZ2l0LWJsYW1lLW1vZGUtb24pKSkKKyAgICgoPiAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSAwKSAoZ2l0LWJsYW1lLW1vZGUtb24pKQorICAgKHQgKGdpdC1ibGFtZS1tb2RlLW9mZikpKSkKKworKGRlZnVuIGdpdC1ibGFtZS1tb2RlLW9uICgpCisgICJUdXJuIG9uIGdpdC1ibGFtZSBtb2RlLgorCitTZWUgYWxzbyBmdW5jdGlvbiBgZ2l0LWJsYW1lLW1vZGUnLiIKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2dpdC1ibGFtZS1jb2xvcnMpCisgIChpZiBnaXQtYmxhbWUtYXV0b3VwZGF0ZQorICAgICAgKGFkZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zICdnaXQtYmxhbWUtYWZ0ZXItY2hhbmdlIG5pbCB0KQorICAgIChyZW1vdmUtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyAnZ2l0LWJsYW1lLWFmdGVyLWNoYW5nZSB0KSkKKyAgKGdpdC1ibGFtZS1jbGVhbnVwKQorICAobGV0ICgoYmdtb2RlIChjZHIgKGFzc29jICdiYWNrZ3JvdW5kLW1vZGUgKGZyYW1lLXBhcmFtZXRlcnMpKSkpKQorICAgIChpZiAoZXEgYmdtb2RlICdkYXJrKQorCShzZXRxIGdpdC1ibGFtZS1jb2xvcnMgZ2l0LWJsYW1lLWRhcmstY29sb3JzKQorICAgICAgKHNldHEgZ2l0LWJsYW1lLWNvbG9ycyBnaXQtYmxhbWUtbGlnaHQtY29sb3JzKSkpCisgIChzZXRxIGdpdC1ibGFtZS1jYWNoZSAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0ICdlcXVhbCkpCisgIChzZXRxIGdpdC1ibGFtZS1tb2RlIHQpCisgIChnaXQtYmxhbWUtcnVuKSkKKworKGRlZnVuIGdpdC1ibGFtZS1tb2RlLW9mZiAoKQorICAiVHVybiBvZmYgZ2l0LWJsYW1lIG1vZGUuCisKK1NlZSBhbHNvIGZ1bmN0aW9uIGBnaXQtYmxhbWUtbW9kZScuIgorICAoZ2l0LWJsYW1lLWNsZWFudXApCisgIChpZiBnaXQtYmxhbWUtaWRsZS10aW1lciAoY2FuY2VsLXRpbWVyIGdpdC1ibGFtZS1pZGxlLXRpbWVyKSkKKyAgKHNldHEgZ2l0LWJsYW1lLW1vZGUgbmlsKSkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biBnaXQtcmVibGFtZSAoKQorICAiUmVjYWxjdWxhdGUgYWxsIGJsYW1lIGluZm9ybWF0aW9uIGluIHRoZSBjdXJyZW50IGJ1ZmZlciIKKyAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1ibGFtZS1tb2RlCisgICAgKGVycm9yICJHaXQtYmxhbWUgaXMgbm90IGFjdGl2ZSIpKQorCisgIChnaXQtYmxhbWUtY2xlYW51cCkKKyAgKGdpdC1ibGFtZS1ydW4pKQorCisoZGVmdW4gZ2l0LWJsYW1lLXJ1biAoJm9wdGlvbmFsIHN0YXJ0bGluZSBlbmRsaW5lKQorICAoaWYgZ2l0LWJsYW1lLXByb2MKKyAgICAgIDs7IFNob3VsZCBtYXliZSBxdWV1ZSB1cCBhIG5ldyBydW4gaGVyZQorICAgICAgKG1lc3NhZ2UgIkFscmVhZHkgcnVubmluZyBnaXQgYmxhbWUiKQorICAgIChsZXQgKChkaXNwbGF5LWJ1ZiAoY3VycmVudC1idWZmZXIpKQorICAgICAgICAgIChibGFtZS1idWYgKGdldC1idWZmZXItY3JlYXRlCisgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCAiIGdpdCBibGFtZSBmb3IgIiAoYnVmZmVyLW5hbWUpKSkpCisgICAgICAgICAgKGFyZ3MgJygiLS1pbmNyZW1lbnRhbCIgIi0tY29udGVudHMiICItIikpKQorICAgICAgKGlmIHN0YXJ0bGluZQorICAgICAgICAgIChzZXRxIGFyZ3MgKGFwcGVuZCBhcmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICItTCIgKGZvcm1hdCAiJWQsJWQiIHN0YXJ0bGluZSBlbmRsaW5lKSkpKSkKKyAgICAgIChzZXRxIGFyZ3MgKGFwcGVuZCBhcmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkgYnVmZmVyLWZpbGUtbmFtZSkpKSkKKyAgICAgIChzZXRxIGdpdC1ibGFtZS1wcm9jCisgICAgICAgICAgICAoYXBwbHkgJ3N0YXJ0LXByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAiZ2l0LWJsYW1lIiBibGFtZS1idWYKKyAgICAgICAgICAgICAgICAgICAiZ2l0IiAiYmxhbWUiCisgICAgICAgICAgICAgICAgICAgYXJncykpCisgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBibGFtZS1idWYKKyAgICAgICAgKGVyYXNlLWJ1ZmZlcikKKyAgICAgICAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2dpdC1ibGFtZS1maWxlKQorICAgICAgICAobWFrZS1sb2NhbC12YXJpYWJsZSAnZ2l0LWJsYW1lLWN1cnJlbnQpCisgICAgICAgIChzZXRxIGdpdC1ibGFtZS1maWxlIGRpc3BsYXktYnVmKQorICAgICAgICAoc2V0cSBnaXQtYmxhbWUtY3VycmVudCBuaWwpKQorICAgICAgKHNldC1wcm9jZXNzLWZpbHRlciBnaXQtYmxhbWUtcHJvYyAnZ2l0LWJsYW1lLWZpbHRlcikKKyAgICAgIChzZXQtcHJvY2Vzcy1zZW50aW5lbCBnaXQtYmxhbWUtcHJvYyAnZ2l0LWJsYW1lLXNlbnRpbmVsKQorICAgICAgKHByb2Nlc3Mtc2VuZC1yZWdpb24gZ2l0LWJsYW1lLXByb2MgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCisgICAgICAocHJvY2Vzcy1zZW5kLWVvZiBnaXQtYmxhbWUtcHJvYykpKSkKKworKGRlZnVuIHJlbW92ZS1naXQtYmxhbWUtdGV4dC1wcm9wZXJ0aWVzIChzdGFydCBlbmQpCisgIChsZXQgKChtb2RpZmllZCAoYnVmZmVyLW1vZGlmaWVkLXApKQorICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCisgICAgKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgc3RhcnQgZW5kICcocG9pbnQtZW50ZXJlZCBuaWwpKQorICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbW9kaWZpZWQpKSkKKworKGRlZnVuIGdpdC1ibGFtZS1jbGVhbnVwICgpCisgICJSZW1vdmUgYWxsIGJsYW1lIHByb3BlcnRpZXMiCisgICAgKG1hcGMgJ2RlbGV0ZS1vdmVybGF5IGdpdC1ibGFtZS1vdmVybGF5cykKKyAgICAoc2V0cSBnaXQtYmxhbWUtb3ZlcmxheXMgbmlsKQorICAgIChyZW1vdmUtZ2l0LWJsYW1lLXRleHQtcHJvcGVydGllcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpCisKKyhkZWZ1biBnaXQtYmxhbWUtdXBkYXRlLXJlZ2lvbiAoc3RhcnQgZW5kKQorICAiUmVydW4gYmxhbWUgdG8gZ2V0IHVwZGF0ZXMgYmV0d2VlbiBTVEFSVCBhbmQgRU5EIgorICAobGV0ICgob3ZlcmxheXMgKG92ZXJsYXlzLWluIHN0YXJ0IGVuZCkpKQorICAgICh3aGlsZSBvdmVybGF5cworICAgICAgKGxldCAoKG92ZXJsYXkgKHBvcCBvdmVybGF5cykpKQorICAgICAgICAoaWYgKDwgKG92ZXJsYXktc3RhcnQgb3ZlcmxheSkgc3RhcnQpCisgICAgICAgICAgICAoc2V0cSBzdGFydCAob3ZlcmxheS1zdGFydCBvdmVybGF5KSkpCisgICAgICAgIChpZiAoPiAob3ZlcmxheS1lbmQgb3ZlcmxheSkgZW5kKQorICAgICAgICAgICAgKHNldHEgZW5kIChvdmVybGF5LWVuZCBvdmVybGF5KSkpCisgICAgICAgIChzZXRxIGdpdC1ibGFtZS1vdmVybGF5cyAoZGVsZXRlIG92ZXJsYXkgZ2l0LWJsYW1lLW92ZXJsYXlzKSkKKyAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG92ZXJsYXkpKSkpCisgIChyZW1vdmUtZ2l0LWJsYW1lLXRleHQtcHJvcGVydGllcyBzdGFydCBlbmQpCisgIDs7IFdlIGNhbiBiZSBzdXJlIHRoYXQgc3RhcnQgYW5kIGVuZCBhcmUgYXQgbGluZSBicmVha3MKKyAgKGdpdC1ibGFtZS1ydW4gKDErIChjb3VudC1saW5lcyAocG9pbnQtbWluKSBzdGFydCkpCisgICAgICAgICAgICAgICAgIChjb3VudC1saW5lcyAocG9pbnQtbWluKSBlbmQpKSkKKworKGRlZnVuIGdpdC1ibGFtZS1zZW50aW5lbCAocHJvYyBzdGF0dXMpCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChwcm9jZXNzLWJ1ZmZlciBwcm9jKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGdpdC1ibGFtZS1maWxlCisgICAgICAoc2V0cSBnaXQtYmxhbWUtcHJvYyBuaWwpCisgICAgICAoaWYgZ2l0LWJsYW1lLXVwZGF0ZS1xdWV1ZQorICAgICAgICAgIChnaXQtYmxhbWUtZGVsYXllZC11cGRhdGUpKSkpCisgIDs7KGtpbGwtYnVmZmVyIChwcm9jZXNzLWJ1ZmZlciBwcm9jKSkKKyAgOzsobWVzc2FnZSAiZ2l0IGJsYW1lIGZpbmlzaGVkIikKKyAgKQorCisoZGVmdmFyIGluLWJsYW1lLWZpbHRlciBuaWwpCisKKyhkZWZ1biBnaXQtYmxhbWUtZmlsdGVyIChwcm9jIHN0cikKKyAgKHdpdGgtY3VycmVudC1idWZmZXIgKHByb2Nlc3MtYnVmZmVyIHByb2MpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoZ290by1jaGFyIChwcm9jZXNzLW1hcmsgcHJvYykpCisgICAgICAoaW5zZXJ0LWJlZm9yZS1tYXJrZXJzIHN0cikKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAodW5sZXNzIGluLWJsYW1lLWZpbHRlcgorICAgICAgICAobGV0ICgobW9yZSB0KQorICAgICAgICAgICAgICAoaW4tYmxhbWUtZmlsdGVyIHQpKQorICAgICAgICAgICh3aGlsZSBtb3JlCisgICAgICAgICAgICAoc2V0cSBtb3JlIChnaXQtYmxhbWUtcGFyc2UpKSkpKSkpKQorCisoZGVmdW4gZ2l0LWJsYW1lLXBhcnNlICgpCisgIChjb25kICgobG9va2luZy1hdCAiXFwoWzAtOWEtZl1cXHs0MFxcfVxcKSBcXChbMC05XStcXCkgXFwoWzAtOV0rXFwpIFxcKFswLTldK1xcKVxuIikKKyAgICAgICAgIChsZXQgKChoYXNoIChtYXRjaC1zdHJpbmcgMSkpCisgICAgICAgICAgICAgICAoc3JjLWxpbmUgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAyKSkpCisgICAgICAgICAgICAgICAocmVzLWxpbmUgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAzKSkpCisgICAgICAgICAgICAgICAobnVtLWxpbmVzIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgNCkpKSkKKyAgICAgICAgICAgKGRlbGV0ZS1yZWdpb24gKHBvaW50KSAobWF0Y2gtZW5kIDApKQorICAgICAgICAgICAoc2V0cSBnaXQtYmxhbWUtY3VycmVudCAobGlzdCAoZ2l0LWJsYW1lLW5ldy1jb21taXQgaGFzaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLWxpbmUgcmVzLWxpbmUgbnVtLWxpbmVzKSkpCisgICAgICAgICB0KQorICAgICAgICAoKGxvb2tpbmctYXQgIlxcKFthLXotXStcXCkgXFwoLitcXClcbiIpCisgICAgICAgICAobGV0ICgoa2V5IChtYXRjaC1zdHJpbmcgMSkpCisgICAgICAgICAgICAgICAodmFsdWUgKG1hdGNoLXN0cmluZyAyKSkpCisgICAgICAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKG1hdGNoLWVuZCAwKSkKKyAgICAgICAgICAgKGdpdC1ibGFtZS1hZGQtaW5mbyAoY2FyIGdpdC1ibGFtZS1jdXJyZW50KSBrZXkgdmFsdWUpCisgICAgICAgICAgICh3aGVuIChzdHJpbmc9IGtleSAiZmlsZW5hbWUiKQorICAgICAgICAgICAgIChnaXQtYmxhbWUtY3JlYXRlLW92ZXJsYXkgKGNhciBnaXQtYmxhbWUtY3VycmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWRkciBnaXQtYmxhbWUtY3VycmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWRkZHIgZ2l0LWJsYW1lLWN1cnJlbnQpKQorICAgICAgICAgICAgIChzZXRxIGdpdC1ibGFtZS1jdXJyZW50IG5pbCkpKQorICAgICAgICAgdCkKKyAgICAgICAgKHQKKyAgICAgICAgIG5pbCkpKQorCisoZGVmdW4gZ2l0LWJsYW1lLW5ldy1jb21taXQgKGhhc2gpCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGdpdC1ibGFtZS1maWxlCisgICAgKG9yIChnZXRoYXNoIGhhc2ggZ2l0LWJsYW1lLWNhY2hlKQorICAgICAgICA7OyBBc3NpZ24gYSByYW5kb20gY29sb3IgdG8gZWFjaCBuZXcgY29tbWl0IGluZm8KKyAgICAgICAgOzsgVGFrZSBjYXJlIG5vdCB0byBzZWxlY3QgdGhlIHNhbWUgY29sb3IgbXVsdGlwbGUgdGltZXMKKyAgICAgICAgKGxldCogKChjb2xvciAoaWYgZ2l0LWJsYW1lLWNvbG9ycworICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2l0LWJsYW1lLXJhbmRvbS1wb3AgZ2l0LWJsYW1lLWNvbG9ycykKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpdC1ibGFtZS1hbmNpZW50LWNvbG9yKSkKKyAgICAgICAgICAgICAgIChpbmZvIGAoLGhhc2ggKGNvbG9yIC4gLGNvbG9yKSkpKQorICAgICAgICAgIChwdXRoYXNoIGhhc2ggaW5mbyBnaXQtYmxhbWUtY2FjaGUpCisgICAgICAgICAgaW5mbykpKSkKKworKGRlZnVuIGdpdC1ibGFtZS1jcmVhdGUtb3ZlcmxheSAoaW5mbyBzdGFydC1saW5lIG51bS1saW5lcykKKyAgKHdpdGgtY3VycmVudC1idWZmZXIgZ2l0LWJsYW1lLWZpbGUKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgIChsZXQgKChpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcyB0KQorICAgICAgICAgICAgKGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzIHQpKQorICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAoZm9yd2FyZC1saW5lICgxLSBzdGFydC1saW5lKSkKKyAgICAgICAgKGxldCogKChzdGFydCAocG9pbnQpKQorICAgICAgICAgICAgICAgKGVuZCAocHJvZ24gKGZvcndhcmQtbGluZSBudW0tbGluZXMpIChwb2ludCkpKQorICAgICAgICAgICAgICAgKG92bCAobWFrZS1vdmVybGF5IHN0YXJ0IGVuZCkpCisgICAgICAgICAgICAgICAoaGFzaCAoY2FyIGluZm8pKQorICAgICAgICAgICAgICAgKHNwZWMgYCgoP2ggLiAsKHN1YnN0cmluZyBoYXNoIDAgNikpCisgICAgICAgICAgICAgICAgICAgICAgICg/SCAuICxoYXNoKQorICAgICAgICAgICAgICAgICAgICAgICAoP2EgLiAsKGdpdC1ibGFtZS1nZXQtaW5mbyBpbmZvICdhdXRob3IpKQorICAgICAgICAgICAgICAgICAgICAgICAoP0EgLiAsKGdpdC1ibGFtZS1nZXQtaW5mbyBpbmZvICdhdXRob3ItbWFpbCkpCisgICAgICAgICAgICAgICAgICAgICAgICg/YyAuICwoZ2l0LWJsYW1lLWdldC1pbmZvIGluZm8gJ2NvbW1pdHRlcikpCisgICAgICAgICAgICAgICAgICAgICAgICg/QyAuICwoZ2l0LWJsYW1lLWdldC1pbmZvIGluZm8gJ2NvbW1pdHRlci1tYWlsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKD9zIC4gLChnaXQtYmxhbWUtZ2V0LWluZm8gaW5mbyAnc3VtbWFyeSkpKSkpCisgICAgICAgICAgKHB1c2ggb3ZsIGdpdC1ibGFtZS1vdmVybGF5cykKKyAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZsICdnaXQtYmxhbWUgaW5mbykKKyAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZsICdoZWxwLWVjaG8KKyAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdC1zcGVjIGdpdC1ibGFtZS1tb3VzZW92ZXItZm9ybWF0IHNwZWMpKQorICAgICAgICAgIChpZiBnaXQtYmxhbWUtdXNlLWNvbG9ycworICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZsICdmYWNlIChsaXN0IDpiYWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkciAoYXNzcSAnY29sb3IgKGNkciBpbmZvKSkpKSkpCisgICAgICAgICAgKG92ZXJsYXktcHV0IG92bCAnbGluZS1wcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKGZvcm1hdC1zcGVjIGdpdC1ibGFtZS1wcmVmaXgtZm9ybWF0IHNwZWMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWNlICdnaXQtYmxhbWUtcHJlZml4LWZhY2UpKSkpKSkpCisKKyhkZWZ1biBnaXQtYmxhbWUtYWRkLWluZm8gKGluZm8ga2V5IHZhbHVlKQorICAobmNvbmMgaW5mbyAobGlzdCAoY29ucyAoaW50ZXJuIGtleSkgdmFsdWUpKSkpCisKKyhkZWZ1biBnaXQtYmxhbWUtZ2V0LWluZm8gKGluZm8ga2V5KQorICAoY2RyIChhc3NxIGtleSAoY2RyIGluZm8pKSkpCisKKyhkZWZ1biBnaXQtYmxhbWUtY3VycmVudC1jb21taXQgKCkKKyAgKGxldCAoKGluZm8gKGdldC1jaGFyLXByb3BlcnR5IChwb2ludCkgJ2dpdC1ibGFtZSkpKQorICAgIChpZiBpbmZvCisgICAgICAgIChjYXIgaW5mbykKKyAgICAgIChlcnJvciAiTm8gY29tbWl0IGluZm8iKSkpKQorCisoZGVmdW4gZ2l0LWRlc2NyaWJlLWNvbW1pdCAoaGFzaCkKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAoY2FsbC1wcm9jZXNzICJnaXQiIG5pbCB0IG5pbAorICAgICAgICAgICAgICAgICAgImxvZyIgIi0xIgorCQkgIChjb25jYXQgIi0tcHJldHR5PSIgZ2l0LWJsYW1lLWxvZy1vbmVsaW5lLWZvcm1hdCkKKyAgICAgICAgICAgICAgICAgIGhhc2gpCisgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikgKHBvaW50LW1heCkpKSkKKworKGRlZnZhciBnaXQtYmxhbWUtbGFzdC1pZGVudGlmaWNhdGlvbiBuaWwpCisobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2dpdC1ibGFtZS1sYXN0LWlkZW50aWZpY2F0aW9uKQorKGRlZnVuIGdpdC1ibGFtZS1pZGVudGlmeSAoJm9wdGlvbmFsIGhhc2gpCisgIChpbnRlcmFjdGl2ZSkKKyAgKGxldCAoKGluZm8gKGdldGhhc2ggKG9yIGhhc2ggKGdpdC1ibGFtZS1jdXJyZW50LWNvbW1pdCkpIGdpdC1ibGFtZS1jYWNoZSkpKQorICAgICh3aGVuIChhbmQgaW5mbyAobm90IChlcSBpbmZvIGdpdC1ibGFtZS1sYXN0LWlkZW50aWZpY2F0aW9uKSkpCisgICAgICAobWVzc2FnZSAiJXMiIChudGggNCBpbmZvKSkKKyAgICAgIChzZXRxIGdpdC1ibGFtZS1sYXN0LWlkZW50aWZpY2F0aW9uIGluZm8pKSkpCisKKzs7IChkZWZ1biBnaXQtYmxhbWUtYWZ0ZXItc2F2ZSAoKQorOzsgICAod2hlbiBnaXQtYmxhbWUtbW9kZQorOzsgICAgIChnaXQtYmxhbWUtY2xlYW51cCkKKzs7ICAgICAoZ2l0LWJsYW1lLXJ1bikpKQorOzsgKGFkZC1ob29rICdhZnRlci1zYXZlLWhvb2sgJ2dpdC1ibGFtZS1hZnRlci1zYXZlKQorCisoZGVmdW4gZ2l0LWJsYW1lLWFmdGVyLWNoYW5nZSAoc3RhcnQgZW5kIGxlbmd0aCkKKyAgKHdoZW4gZ2l0LWJsYW1lLW1vZGUKKyAgICAoZ2l0LWJsYW1lLWVucS11cGRhdGUgc3RhcnQgZW5kKSkpCisKKyhkZWZ2YXIgZ2l0LWJsYW1lLWxhc3QtdXBkYXRlIG5pbCkKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnZ2l0LWJsYW1lLWxhc3QtdXBkYXRlKQorKGRlZnVuIGdpdC1ibGFtZS1lbnEtdXBkYXRlIChzdGFydCBlbmQpCisgICJNYXJrIHRoZSByZWdpb24gYmV0d2VlbiBTVEFSVCBhbmQgRU5EIGFzIG5lZWRpbmcgYmxhbWUgdXBkYXRlIgorICA7OyBUcnkgdG8gYmUgc21hcnQgYW5kIGF2b2lkIG11bHRpcGxlIGNhbGxvdXRzIGZvciBzZXF1ZW50aWFsCisgIDs7IGVkaXRpbmcKKyAgKGNvbmQgKChhbmQgZ2l0LWJsYW1lLWxhc3QtdXBkYXRlCisgICAgICAgICAgICAgICg9IHN0YXJ0IChjZHIgZ2l0LWJsYW1lLWxhc3QtdXBkYXRlKSkpCisgICAgICAgICAoc2V0Y2RyIGdpdC1ibGFtZS1sYXN0LXVwZGF0ZSBlbmQpKQorICAgICAgICAoKGFuZCBnaXQtYmxhbWUtbGFzdC11cGRhdGUKKyAgICAgICAgICAgICAgKD0gZW5kIChjYXIgZ2l0LWJsYW1lLWxhc3QtdXBkYXRlKSkpCisgICAgICAgICAoc2V0Y2FyIGdpdC1ibGFtZS1sYXN0LXVwZGF0ZSBzdGFydCkpCisgICAgICAgICh0CisgICAgICAgICAoc2V0cSBnaXQtYmxhbWUtbGFzdC11cGRhdGUgKGNvbnMgc3RhcnQgZW5kKSkKKyAgICAgICAgIChzZXRxIGdpdC1ibGFtZS11cGRhdGUtcXVldWUgKG5jb25jIGdpdC1ibGFtZS11cGRhdGUtcXVldWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IGdpdC1ibGFtZS1sYXN0LXVwZGF0ZSkpKSkpCisgICh1bmxlc3MgKG9yIGdpdC1ibGFtZS1wcm9jIGdpdC1ibGFtZS1pZGxlLXRpbWVyKQorICAgIChzZXRxIGdpdC1ibGFtZS1pZGxlLXRpbWVyCisgICAgICAgICAgKHJ1bi13aXRoLWlkbGUtdGltZXIgMC41IG5pbCAnZ2l0LWJsYW1lLWRlbGF5ZWQtdXBkYXRlKSkpKQorCisoZGVmdW4gZ2l0LWJsYW1lLWRlbGF5ZWQtdXBkYXRlICgpCisgIChzZXRxIGdpdC1ibGFtZS1pZGxlLXRpbWVyIG5pbCkKKyAgKGlmIGdpdC1ibGFtZS11cGRhdGUtcXVldWUKKyAgICAgIChsZXQgKChmaXJzdCAocG9wIGdpdC1ibGFtZS11cGRhdGUtcXVldWUpKQorICAgICAgICAgICAgKGluaGliaXQtcG9pbnQtbW90aW9uLWhvb2tzIHQpKQorICAgICAgICAoZ2l0LWJsYW1lLXVwZGF0ZS1yZWdpb24gKGNhciBmaXJzdCkgKGNkciBmaXJzdCkpKSkpCisKKyhwcm92aWRlICdnaXQtYmxhbWUpCisKKzs7OyBnaXQtYmxhbWUuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9jb250cmliL2VtYWNzL2dpdC5lbCBiL2NvbnRyaWIvZW1hY3MvZ2l0LmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1Yzk1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2VtYWNzL2dpdC5lbApAQCAtMCwwICsxLDE3MDUgQEAKKzs7OyBnaXQuZWwgLS0tIEEgdXNlciBpbnRlcmZhY2UgZm9yIGdpdAorCis7OyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQWxleGFuZHJlIEp1bGxpYXJkIDxqdWxsaWFyZEB3aW5laHEub3JnPgorCis7OyBWZXJzaW9uOiAxLjAKKworOzsgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOzsgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKzs7IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCis7OyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7Cis7OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCis7OyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCis7OyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCis7OyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzsKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworOzsgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorOzsgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKzs7IE1BIDAyMTExLTEzMDcgVVNBCisKKzs7OyBDb21tZW50YXJ5OgorCis7OyBUaGlzIGZpbGUgY29udGFpbnMgYW4gaW50ZXJmYWNlIGZvciB0aGUgZ2l0IHZlcnNpb24gY29udHJvbAorOzsgc3lzdGVtLiBJdCBwcm92aWRlcyBlYXN5IGFjY2VzcyB0byB0aGUgbW9zdCBmcmVxdWVudGx5IHVzZWQgZ2l0Cis7OyBjb21tYW5kcy4gVGhlIHVzZXIgaW50ZXJmYWNlIGlzIGFzIGZhciBhcyBwb3NzaWJsZSBpZGVudGljYWwgdG8KKzs7IHRoYXQgb2YgdGhlIFBDTC1DVlMgbW9kZS4KKzs7Cis7OyBUbyBpbnN0YWxsOiBwdXQgdGhpcyBmaWxlIG9uIHRoZSBsb2FkLXBhdGggYW5kIHBsYWNlIHRoZSBmb2xsb3dpbmcKKzs7IGluIHlvdXIgLmVtYWNzIGZpbGU6Cis7OworOzsgICAgKHJlcXVpcmUgJ2dpdCkKKzs7Cis7OyBUbyBzdGFydDogYE0teCBnaXQtc3RhdHVzJworOzsKKzs7IFRPRE8KKzs7ICAtIGRpZmYgYWdhaW5zdCBvdGhlciBicmFuY2gKKzs7ICAtIHJlbmFtaW5nIGZpbGVzIGZyb20gdGhlIHN0YXR1cyBidWZmZXIKKzs7ICAtIGNyZWF0aW5nIHRhZ3MKKzs7ICAtIGZldGNoL3B1bGwKKzs7ICAtIHJldmxpc3QgYnJvd3NlcgorOzsgIC0gZ2l0LXNob3ctYnJhbmNoIGJyb3dzZXIKKzs7CisKKzs7OyBDb21wYXRpYmlsaXR5OgorOzsKKzs7IFRoaXMgZmlsZSB3b3JrcyBvbiBHTlUgRW1hY3MgMjEgb3IgbGF0ZXIuIEl0IG1heSB3b3JrIG9uIG9sZGVyCis7OyB2ZXJzaW9ucyBidXQgdGhpcyBpcyBub3QgZ3VhcmFudGVlZC4KKzs7Cis7OyBJdCBtYXkgd29yayBvbiBYRW1hY3MgMjEsIHByb3ZpZGVkIHRoYXQgeW91IGZpcnN0IGluc3RhbGwgdGhlIGV3b2MKKzs7IGFuZCBsb2ctZWRpdCBwYWNrYWdlcy4KKzs7CisKKyhldmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wpKQorKHJlcXVpcmUgJ2V3b2MpCisocmVxdWlyZSAnbG9nLWVkaXQpCisocmVxdWlyZSAnZWFzeW1lbnUpCisKKworOzs7OyBDdXN0b21pemF0aW9ucworOzs7OyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKGRlZmdyb3VwIGdpdCBuaWwKKyAgIkEgdXNlciBpbnRlcmZhY2UgZm9yIHRoZSBnaXQgdmVyc2lvbmluZyBzeXN0ZW0uIgorICA6Z3JvdXAgJ3Rvb2xzKQorCisoZGVmY3VzdG9tIGdpdC1jb21taXR0ZXItbmFtZSBuaWwKKyAgIlVzZXIgbmFtZSB0byB1c2UgZm9yIGNvbW1pdHMuCitUaGUgZGVmYXVsdCBpcyB0byBmYWxsIGJhY2sgdG8gdGhlIHJlcG9zaXRvcnkgY29uZmlnLAordGhlbiB0byBgYWRkLWxvZy1mdWxsLW5hbWUnIGFuZCB0aGVuIHRvIGB1c2VyLWZ1bGwtbmFtZScuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiRGVmYXVsdCIgbmlsKQorICAgICAgICAgICAgICAgICAoc3RyaW5nIDp0YWcgIk5hbWUiKSkpCisKKyhkZWZjdXN0b20gZ2l0LWNvbW1pdHRlci1lbWFpbCBuaWwKKyAgIkVtYWlsIGFkZHJlc3MgdG8gdXNlIGZvciBjb21taXRzLgorVGhlIGRlZmF1bHQgaXMgdG8gZmFsbCBiYWNrIHRvIHRoZSBnaXQgcmVwb3NpdG9yeSBjb25maWcsCit0aGVuIHRvIGBhZGQtbG9nLW1haWxpbmctYWRkcmVzcycgYW5kIHRoZW4gdG8gYHVzZXItbWFpbC1hZGRyZXNzJy4iCisgIDpncm91cCAnZ2l0CisgIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJEZWZhdWx0IiBuaWwpCisgICAgICAgICAgICAgICAgIChzdHJpbmcgOnRhZyAiRW1haWwiKSkpCisKKyhkZWZjdXN0b20gZ2l0LWNvbW1pdHMtY29kaW5nLXN5c3RlbSBuaWwKKyAgIkRlZmF1bHQgY29kaW5nIHN5c3RlbSBmb3IgdGhlIGxvZyBtZXNzYWdlIG9mIGdpdCBjb21taXRzLiIKKyAgOmdyb3VwICdnaXQKKyAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIkZyb20gcmVwb3NpdG9yeSBjb25maWciIG5pbCkKKyAgICAgICAgICAgICAgICAgKGNvZGluZy1zeXN0ZW0pKSkKKworKGRlZmN1c3RvbSBnaXQtYXBwZW5kLXNpZ25lZC1vZmYtYnkgbmlsCisgICJXaGV0aGVyIHRvIGFwcGVuZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UgYmVmb3JlIGVkaXRpbmcuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnYm9vbGVhbikKKworKGRlZmN1c3RvbSBnaXQtcmV1c2Utc3RhdHVzLWJ1ZmZlciB0CisgICJXaGV0aGVyIGBnaXQtc3RhdHVzJyBzaG91bGQgdHJ5IHRvIHJldXNlIGFuIGV4aXN0aW5nIGJ1ZmZlcgoraWYgdGhlcmUgaXMgYWxyZWFkeSBvbmUgdGhhdCBkaXNwbGF5cyB0aGUgc2FtZSBkaXJlY3RvcnkuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnYm9vbGVhbikKKworKGRlZmN1c3RvbSBnaXQtcGVyLWRpci1pZ25vcmUtZmlsZSAiLmdpdGlnbm9yZSIKKyAgIk5hbWUgb2YgdGhlIHBlci1kaXJlY3RvcnkgaWdub3JlIGZpbGUuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnc3RyaW5nKQorCisoZGVmY3VzdG9tIGdpdC1zaG93LXVwdG9kYXRlIG5pbAorICAiV2hldGhlciB0byBkaXNwbGF5IHVwLXRvLWRhdGUgZmlsZXMuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnYm9vbGVhbikKKworKGRlZmN1c3RvbSBnaXQtc2hvdy1pZ25vcmVkIG5pbAorICAiV2hldGhlciB0byBkaXNwbGF5IGlnbm9yZWQgZmlsZXMuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnYm9vbGVhbikKKworKGRlZmN1c3RvbSBnaXQtc2hvdy11bmtub3duIHQKKyAgIldoZXRoZXIgdG8gZGlzcGxheSB1bmtub3duIGZpbGVzLiIKKyAgOmdyb3VwICdnaXQKKyAgOnR5cGUgJ2Jvb2xlYW4pCisKKworKGRlZmZhY2UgZ2l0LXN0YXR1cy1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkgKDpmb3JlZ3JvdW5kICJwdXJwbGUiKSkKKyAgICAoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgZGFyaykpICg6Zm9yZWdyb3VuZCAic2FsbW9uIikpKQorICAiR2l0IG1vZGUgZmFjZSB1c2VkIHRvIGhpZ2hsaWdodCBhZGRlZCBhbmQgbW9kaWZpZWQgZmlsZXMuIgorICA6Z3JvdXAgJ2dpdCkKKworKGRlZmZhY2UgZ2l0LXVubWVyZ2VkLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgbGlnaHQpKSAoOmZvcmVncm91bmQgInJlZCIgOmJvbGQgdCkpCisgICAgKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGRhcmspKSAoOmZvcmVncm91bmQgInJlZCIgOmJvbGQgdCkpKQorICAiR2l0IG1vZGUgZmFjZSB1c2VkIHRvIGhpZ2hsaWdodCB1bm1lcmdlZCBmaWxlcy4iCisgIDpncm91cCAnZ2l0KQorCisoZGVmZmFjZSBnaXQtdW5rbm93bi1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkgKDpmb3JlZ3JvdW5kICJnb2xkZW5yb2QiIDpib2xkIHQpKQorICAgICgoKGNsYXNzIGNvbG9yKSAoYmFja2dyb3VuZCBkYXJrKSkgKDpmb3JlZ3JvdW5kICJnb2xkZW5yb2QiIDpib2xkIHQpKSkKKyAgIkdpdCBtb2RlIGZhY2UgdXNlZCB0byBoaWdobGlnaHQgdW5rbm93biBmaWxlcy4iCisgIDpncm91cCAnZ2l0KQorCisoZGVmZmFjZSBnaXQtdXB0b2RhdGUtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAoYmFja2dyb3VuZCBsaWdodCkpICg6Zm9yZWdyb3VuZCAiZ3JleTYwIikpCisgICAgKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGRhcmspKSAoOmZvcmVncm91bmQgImdyZXk0MCIpKSkKKyAgIkdpdCBtb2RlIGZhY2UgdXNlZCB0byBoaWdobGlnaHQgdXAtdG8tZGF0ZSBmaWxlcy4iCisgIDpncm91cCAnZ2l0KQorCisoZGVmZmFjZSBnaXQtaWdub3JlZC1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkgKDpmb3JlZ3JvdW5kICJncmV5NjAiKSkKKyAgICAoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgZGFyaykpICg6Zm9yZWdyb3VuZCAiZ3JleTQwIikpKQorICAiR2l0IG1vZGUgZmFjZSB1c2VkIHRvIGhpZ2hsaWdodCBpZ25vcmVkIGZpbGVzLiIKKyAgOmdyb3VwICdnaXQpCisKKyhkZWZmYWNlIGdpdC1tYXJrLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgbGlnaHQpKSAoOmZvcmVncm91bmQgInJlZCIgOmJvbGQgdCkpCisgICAgKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGRhcmspKSAoOmZvcmVncm91bmQgInRvbWF0byIgOmJvbGQgdCkpKQorICAiR2l0IG1vZGUgZmFjZSB1c2VkIGZvciB0aGUgZmlsZSBtYXJrcy4iCisgIDpncm91cCAnZ2l0KQorCisoZGVmZmFjZSBnaXQtaGVhZGVyLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgbGlnaHQpKSAoOmZvcmVncm91bmQgImJsdWUiKSkKKyAgICAoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgZGFyaykpICg6Zm9yZWdyb3VuZCAiYmx1ZSIpKSkKKyAgIkdpdCBtb2RlIGZhY2UgdXNlZCBmb3IgY29tbWl0IGhlYWRlcnMuIgorICA6Z3JvdXAgJ2dpdCkKKworKGRlZmZhY2UgZ2l0LXNlcGFyYXRvci1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkgKDpmb3JlZ3JvdW5kICJicm93biIpKQorICAgICgoKGNsYXNzIGNvbG9yKSAoYmFja2dyb3VuZCBkYXJrKSkgKDpmb3JlZ3JvdW5kICJicm93biIpKSkKKyAgIkdpdCBtb2RlIGZhY2UgdXNlZCBmb3IgY29tbWl0IHNlcGFyYXRvci4iCisgIDpncm91cCAnZ2l0KQorCisoZGVmZmFjZSBnaXQtcGVybWlzc2lvbi1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkgKDpmb3JlZ3JvdW5kICJncmVlbiIgOmJvbGQgdCkpCisgICAgKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGRhcmspKSAoOmZvcmVncm91bmQgImdyZWVuIiA6Ym9sZCB0KSkpCisgICJHaXQgbW9kZSBmYWNlIHVzZWQgZm9yIHBlcm1pc3Npb24gY2hhbmdlcy4iCisgIDpncm91cCAnZ2l0KQorCisKKzs7OzsgVXRpbGl0aWVzCis7Ozs7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoZGVmY29uc3QgZ2l0LWxvZy1tc2ctc2VwYXJhdG9yICItLS0gbG9nIG1lc3NhZ2UgZm9sbG93cyB0aGlzIGxpbmUgLS0tIikKKworKGRlZnZhciBnaXQtbG9nLWVkaXQtZm9udC1sb2NrLWtleXdvcmRzCisgIGAoKCJeXFwoQXV0aG9yOlxcfERhdGU6XFx8TWVyZ2U6XFx8U2lnbmVkLW9mZi1ieTpcXClcXCguKlxcKSQiCisgICAgICgxIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpCisgICAgICgyIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpKQorICAgICgsKGNvbmNhdCAiXlxcKCIgKHJlZ2V4cC1xdW90ZSBnaXQtbG9nLW1zZy1zZXBhcmF0b3IpICJcXCkkIikKKyAgICAgKDEgZm9udC1sb2NrLWNvbW1lbnQtZmFjZSkpKSkKKworKGRlZnVuIGdpdC1nZXQtZW52LXN0cmluZ3MgKGVudikKKyAgIkJ1aWxkIGEgbGlzdCBvZiBOQU1FPVZBTFVFIHN0cmluZ3MgZnJvbSBhIGxpc3Qgb2YgZW52aXJvbm1lbnQgc3RyaW5ncy4iCisgIChtYXBjYXIgKGxhbWJkYSAoZW50cnkpIChjb25jYXQgKGNhciBlbnRyeSkgIj0iIChjZHIgZW50cnkpKSkgZW52KSkKKworKGRlZnVuIGdpdC1jYWxsLXByb2Nlc3MgKGJ1ZmZlciAmcmVzdCBhcmdzKQorICAiV3JhcHBlciBmb3IgY2FsbC1wcm9jZXNzIHRoYXQgc2V0cyBlbnZpcm9ubWVudCBzdHJpbmdzLiIKKyAgKGFwcGx5ICMnY2FsbC1wcm9jZXNzICJnaXQiIG5pbCBidWZmZXIgbmlsIGFyZ3MpKQorCisoZGVmdW4gZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICgmcmVzdCBhcmdzKQorICAiV3JhcHBlciBmb3IgY2FsbC1wcm9jZXNzIHRoYXQgZGlzcGxheXMgZXJyb3IgbWVzc2FnZXMuIgorICAobGV0KiAoKGRpciBkZWZhdWx0LWRpcmVjdG9yeSkKKyAgICAgICAgIChidWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqR2l0IENvbW1hbmQgT3V0cHV0KiIpKQorICAgICAgICAgKG9rICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgorICAgICAgICAgICAgICAgKGxldCAoKGRlZmF1bHQtZGlyZWN0b3J5IGRpcikKKyAgICAgICAgICAgICAgICAgICAgIChidWZmZXItcmVhZC1vbmx5IG5pbCkpCisgICAgICAgICAgICAgICAgIChlcmFzZS1idWZmZXIpCisgICAgICAgICAgICAgICAgIChlcSAwIChhcHBseSAjJ2dpdC1jYWxsLXByb2Nlc3MgKGxpc3QgYnVmZmVyIHQpIGFyZ3MpKSkpKSkKKyAgICAodW5sZXNzIG9rIChkaXNwbGF5LW1lc3NhZ2Utb3ItYnVmZmVyIGJ1ZmZlcikpCisgICAgb2spKQorCisoZGVmdW4gZ2l0LWNhbGwtcHJvY2Vzcy1zdHJpbmcgKCZyZXN0IGFyZ3MpCisgICJXcmFwcGVyIGZvciBjYWxsLXByb2Nlc3MgdGhhdCByZXR1cm5zIHRoZSBwcm9jZXNzIG91dHB1dCBhcyBhIHN0cmluZywKK29yIG5pbCBpZiB0aGUgZ2l0IGNvbW1hbmQgZmFpbGVkLiIKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAoYW5kIChlcSAwIChhcHBseSAjJ2dpdC1jYWxsLXByb2Nlc3MgdCBhcmdzKSkKKyAgICAgICAgIChidWZmZXItc3RyaW5nKSkpKQorCisoZGVmdW4gZ2l0LWNhbGwtcHJvY2Vzcy1zdHJpbmctZGlzcGxheS1lcnJvciAoJnJlc3QgYXJncykKKyAgIldyYXBwZXIgZm9yIGNhbGwtcHJvY2VzcyB0aGF0IGRpc3BsYXlzIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMKK3RoZSBwcm9jZXNzIG91dHB1dCBhcyBhIHN0cmluZywgb3IgbmlsIGlmIHRoZSBnaXQgY29tbWFuZCBmYWlsZWQuIgorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChpZiAoZXEgMCAoYXBwbHkgIydnaXQtY2FsbC1wcm9jZXNzIChsaXN0IHQgdCkgYXJncykpCisgICAgICAgIChidWZmZXItc3RyaW5nKQorICAgICAgKGRpc3BsYXktbWVzc2FnZS1vci1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKKyAgICAgIG5pbCkpKQorCisoZGVmdW4gZ2l0LXJ1bi1wcm9jZXNzLXJlZ2lvbiAoYnVmZmVyIHN0YXJ0IGVuZCBwcm9ncmFtIGFyZ3MpCisgICJSdW4gYSBnaXQgcHJvY2VzcyB3aXRoIGEgYnVmZmVyIHJlZ2lvbiBhcyBpbnB1dC4iCisgIChsZXQgKChvdXRwdXQtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpCisgICAgICAgIChkaXIgZGVmYXVsdC1kaXJlY3RvcnkpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgorICAgICAgKGNkIGRpcikKKyAgICAgIChhcHBseSAjJ2NhbGwtcHJvY2Vzcy1yZWdpb24gc3RhcnQgZW5kIHByb2dyYW0KKyAgICAgICAgICAgICBuaWwgKGxpc3Qgb3V0cHV0LWJ1ZmZlciB0KSBuaWwgYXJncykpKSkKKworKGRlZnVuIGdpdC1ydW4tY29tbWFuZC1idWZmZXIgKGJ1ZmZlci1uYW1lICZyZXN0IGFyZ3MpCisgICJSdW4gYSBnaXQgY29tbWFuZCwgc2VuZGluZyB0aGUgb3V0cHV0IHRvIGEgYnVmZmVyIG5hbWVkIEJVRkZFUi1OQU1FLiIKKyAgKGxldCAoKGRpciBkZWZhdWx0LWRpcmVjdG9yeSkKKyAgICAgICAgKGJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgYnVmZmVyLW5hbWUpKSkKKyAgICAobWVzc2FnZSAiUnVubmluZyBnaXQgJXMuLi4iIChjYXIgYXJncykpCisgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCisgICAgICAobGV0ICgoZGVmYXVsdC1kaXJlY3RvcnkgZGlyKQorICAgICAgICAgICAgKGJ1ZmZlci1yZWFkLW9ubHkgbmlsKSkKKyAgICAgICAgKGVyYXNlLWJ1ZmZlcikKKyAgICAgICAgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2VzcyBidWZmZXIgYXJncykpKQorICAgIChtZXNzYWdlICJSdW5uaW5nIGdpdCAlcy4uLmRvbmUiIChjYXIgYXJncykpCisgICAgYnVmZmVyKSkKKworKGRlZnVuIGdpdC1ydW4tY29tbWFuZC1yZWdpb24gKGJ1ZmZlciBzdGFydCBlbmQgZW52ICZyZXN0IGFyZ3MpCisgICJSdW4gYSBnaXQgY29tbWFuZCB3aXRoIHNwZWNpZmllZCBidWZmZXIgcmVnaW9uIGFzIGlucHV0LiIKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAoaWYgKGVxIDAgKGlmIGVudgorICAgICAgICAgICAgICAgICAgKGdpdC1ydW4tcHJvY2Vzcy1yZWdpb24KKyAgICAgICAgICAgICAgICAgICBidWZmZXIgc3RhcnQgZW5kICJlbnYiCisgICAgICAgICAgICAgICAgICAgKGFwcGVuZCAoZ2l0LWdldC1lbnYtc3RyaW5ncyBlbnYpIChsaXN0ICJnaXQiKSBhcmdzKSkKKyAgICAgICAgICAgICAgICAoZ2l0LXJ1bi1wcm9jZXNzLXJlZ2lvbiBidWZmZXIgc3RhcnQgZW5kICJnaXQiIGFyZ3MpKSkKKyAgICAgICAgKGJ1ZmZlci1zdHJpbmcpCisgICAgICAoZGlzcGxheS1tZXNzYWdlLW9yLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQorICAgICAgbmlsKSkpCisKKyhkZWZ1biBnaXQtcnVuLWhvb2sgKGhvb2sgZW52ICZyZXN0IGFyZ3MpCisgICJSdW4gYSBnaXQgaG9vayBhbmQgZGlzcGxheSBpdHMgb3V0cHV0IGlmIGFueS4iCisgIChsZXQgKChkaXIgZGVmYXVsdC1kaXJlY3RvcnkpCisgICAgICAgIChob29rLW5hbWUgKGV4cGFuZC1maWxlLW5hbWUgKGNvbmNhdCAiLmdpdC9ob29rcy8iIGhvb2spKSkpCisgICAgKG9yIChub3QgKGZpbGUtZXhlY3V0YWJsZS1wIGhvb2stbmFtZSkpCisgICAgICAgIChsZXQgKHN0YXR1cyAoYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKkdpdCBIb29rIE91dHB1dCoiKSkpCisgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCisgICAgICAgICAgICAoZXJhc2UtYnVmZmVyKQorICAgICAgICAgICAgKGNkIGRpcikKKyAgICAgICAgICAgIChzZXRxIHN0YXR1cworICAgICAgICAgICAgICAgICAgKGlmIGVudgorICAgICAgICAgICAgICAgICAgICAgIChhcHBseSAjJ2NhbGwtcHJvY2VzcyAiZW52IiBuaWwgKGxpc3QgYnVmZmVyIHQpIG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIChnaXQtZ2V0LWVudi1zdHJpbmdzIGVudikgKGxpc3QgaG9vay1uYW1lKSBhcmdzKSkKKyAgICAgICAgICAgICAgICAgICAgKGFwcGx5ICMnY2FsbC1wcm9jZXNzIGhvb2stbmFtZSBuaWwgKGxpc3QgYnVmZmVyIHQpIG5pbCBhcmdzKSkpKQorICAgICAgICAgIChkaXNwbGF5LW1lc3NhZ2Utb3ItYnVmZmVyIGJ1ZmZlcikKKyAgICAgICAgICAoZXEgMCBzdGF0dXMpKSkpKQorCisoZGVmdW4gZ2l0LWdldC1zdHJpbmctc2hhMSAoc3RyaW5nKQorICAiUmVhZCBhIFNIQTEgZnJvbSB0aGUgc3BlY2lmaWVkIHN0cmluZy4iCisgIChhbmQgc3RyaW5nCisgICAgICAgKHN0cmluZy1tYXRjaCAiWzAtOWEtZl1cXHs0MFxcfSIgc3RyaW5nKQorICAgICAgIChtYXRjaC1zdHJpbmcgMCBzdHJpbmcpKSkKKworKGRlZnVuIGdpdC1nZXQtY29tbWl0dGVyLW5hbWUgKCkKKyAgIlJldHVybiB0aGUgbmFtZSB0byB1c2UgYXMgR0lUX0NPTU1JVFRFUl9OQU1FLiIKKyAgOyBjb3BpZWQgZnJvbSBsb2ctZWRpdAorICAob3IgZ2l0LWNvbW1pdHRlci1uYW1lCisgICAgICAoZ2l0LWNvbmZpZyAidXNlci5uYW1lIikKKyAgICAgIChhbmQgKGJvdW5kcCAnYWRkLWxvZy1mdWxsLW5hbWUpIGFkZC1sb2ctZnVsbC1uYW1lKQorICAgICAgKGFuZCAoZmJvdW5kcCAndXNlci1mdWxsLW5hbWUpICh1c2VyLWZ1bGwtbmFtZSkpCisgICAgICAoYW5kIChib3VuZHAgJ3VzZXItZnVsbC1uYW1lKSB1c2VyLWZ1bGwtbmFtZSkpKQorCisoZGVmdW4gZ2l0LWdldC1jb21taXR0ZXItZW1haWwgKCkKKyAgIlJldHVybiB0aGUgZW1haWwgYWRkcmVzcyB0byB1c2UgYXMgR0lUX0NPTU1JVFRFUl9FTUFJTC4iCisgIDsgY29waWVkIGZyb20gbG9nLWVkaXQKKyAgKG9yIGdpdC1jb21taXR0ZXItZW1haWwKKyAgICAgIChnaXQtY29uZmlnICJ1c2VyLmVtYWlsIikKKyAgICAgIChhbmQgKGJvdW5kcCAnYWRkLWxvZy1tYWlsaW5nLWFkZHJlc3MpIGFkZC1sb2ctbWFpbGluZy1hZGRyZXNzKQorICAgICAgKGFuZCAoZmJvdW5kcCAndXNlci1tYWlsLWFkZHJlc3MpICh1c2VyLW1haWwtYWRkcmVzcykpCisgICAgICAoYW5kIChib3VuZHAgJ3VzZXItbWFpbC1hZGRyZXNzKSB1c2VyLW1haWwtYWRkcmVzcykpKQorCisoZGVmdW4gZ2l0LWdldC1jb21taXRzLWNvZGluZy1zeXN0ZW0gKCkKKyAgIlJldHVybiB0aGUgY29kaW5nIHN5c3RlbSB0byB1c2UgZm9yIGNvbW1pdHMuIgorICAobGV0ICgocmVwby1jb25maWcgKGdpdC1jb25maWcgImkxOG4uY29tbWl0ZW5jb2RpbmciKSkpCisgICAgKG9yIGdpdC1jb21taXRzLWNvZGluZy1zeXN0ZW0KKyAgICAgICAgKGFuZCByZXBvLWNvbmZpZworICAgICAgICAgICAgIChmYm91bmRwICdsb2NhbGUtY2hhcnNldC10by1jb2Rpbmctc3lzdGVtKQorICAgICAgICAgICAgIChsb2NhbGUtY2hhcnNldC10by1jb2Rpbmctc3lzdGVtIHJlcG8tY29uZmlnKSkKKyAgICAgICd1dGYtOCkpKQorCisoZGVmdW4gZ2l0LWdldC1sb2dvdXRwdXQtY29kaW5nLXN5c3RlbSAoKQorICAiUmV0dXJuIHRoZSBjb2Rpbmcgc3lzdGVtIHVzZWQgZm9yIGdpdC1sb2cgb3V0cHV0LiIKKyAgKGxldCAoKHJlcG8tY29uZmlnIChvciAoZ2l0LWNvbmZpZyAiaTE4bi5sb2dvdXRwdXRlbmNvZGluZyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGdpdC1jb25maWcgImkxOG4uY29tbWl0ZW5jb2RpbmciKSkpKQorICAgIChvciBnaXQtY29tbWl0cy1jb2Rpbmctc3lzdGVtCisgICAgICAgIChhbmQgcmVwby1jb25maWcKKyAgICAgICAgICAgICAoZmJvdW5kcCAnbG9jYWxlLWNoYXJzZXQtdG8tY29kaW5nLXN5c3RlbSkKKyAgICAgICAgICAgICAobG9jYWxlLWNoYXJzZXQtdG8tY29kaW5nLXN5c3RlbSByZXBvLWNvbmZpZykpCisgICAgICAndXRmLTgpKSkKKworKGRlZnVuIGdpdC1lc2NhcGUtZmlsZS1uYW1lIChuYW1lKQorICAiRXNjYXBlIGEgZmlsZSBuYW1lIGlmIG5lY2Vzc2FyeS4iCisgIChpZiAoc3RyaW5nLW1hdGNoICJbXG5cdFwiXFxdIiBuYW1lKQorICAgICAgKGNvbmNhdCAiXCIiCisgICAgICAgICAgICAgIChtYXBjb25jYXQgKGxhbWJkYSAoYykKKyAgICAgICAgICAgICAgICAgICAoY2FzZSBjCisgICAgICAgICAgICAgICAgICAgICAoP1xuICJcXG4iKQorICAgICAgICAgICAgICAgICAgICAgKD9cdCAiXFx0IikKKyAgICAgICAgICAgICAgICAgICAgICg/XFwgIlxcXFwiKQorICAgICAgICAgICAgICAgICAgICAgKD9cIiAiXFxcIiIpCisgICAgICAgICAgICAgICAgICAgICAodCAoY2hhci10by1zdHJpbmcgYykpKSkKKyAgICAgICAgICAgICAgICAgbmFtZSAiIikKKyAgICAgICAgICAgICAgIlwiIikKKyAgICBuYW1lKSkKKworKGRlZnVuIGdpdC1zdWNjZXNzLW1lc3NhZ2UgKHRleHQgZmlsZXMpCisgICJQcmludCBhIHN1Y2Nlc3MgbWVzc2FnZSBhZnRlciBoYXZpbmcgaGFuZGxlZCBGSUxFUy4iCisgIChsZXQgKChuIChsZW5ndGggZmlsZXMpKSkKKyAgICAoaWYgKGVxdWFsIG4gMSkKKyAgICAgICAgKG1lc3NhZ2UgIiVzICVzIiB0ZXh0IChjYXIgZmlsZXMpKQorICAgICAgKG1lc3NhZ2UgIiVzICVkIGZpbGVzIiB0ZXh0IG4pKSkpCisKKyhkZWZ1biBnaXQtZ2V0LXRvcC1kaXIgKGRpcikKKyAgIlJldHJpZXZlIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIGEgZ2l0IHRyZWUuIgorICAobGV0ICgoY2R1cCAod2l0aC1vdXRwdXQtdG8tc3RyaW5nCisgICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgc3RhbmRhcmQtb3V0cHV0CisgICAgICAgICAgICAgICAgICAoY2QgZGlyKQorICAgICAgICAgICAgICAgICAgKHVubGVzcyAoZXEgMCAoZ2l0LWNhbGwtcHJvY2VzcyB0ICJyZXYtcGFyc2UiICItLXNob3ctY2R1cCIpKQorICAgICAgICAgICAgICAgICAgICAoZXJyb3IgImNhbm5vdCBmaW5kIHRvcC1sZXZlbCBnaXQgdHJlZSBmb3IgJXMuIiBkaXIpKSkpKSkKKyAgICAoZXhwYW5kLWZpbGUtbmFtZSAoY29uY2F0IChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IGRpcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXIgKHNwbGl0LXN0cmluZyBjZHVwICJcbiIpKSkpKSkKKworO3N0b2xlbiBmcm9tIHBjbC1jdnMKKyhkZWZ1biBnaXQtYXBwZW5kLXRvLWlnbm9yZSAoZmlsZSkKKyAgIkFkZCBhIGZpbGUgbmFtZSB0byB0aGUgaWdub3JlIGZpbGUgaW4gaXRzIGRpcmVjdG9yeS4iCisgIChsZXQqICgoZnVsbG5hbWUgKGV4cGFuZC1maWxlLW5hbWUgZmlsZSkpCisgICAgICAgICAoZGlyIChmaWxlLW5hbWUtZGlyZWN0b3J5IGZ1bGxuYW1lKSkKKyAgICAgICAgIChuYW1lIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGZ1bGxuYW1lKSkKKyAgICAgICAgIChpZ25vcmUtbmFtZSAoZXhwYW5kLWZpbGUtbmFtZSBnaXQtcGVyLWRpci1pZ25vcmUtZmlsZSBkaXIpKQorICAgICAgICAgKGNyZWF0ZWQgKG5vdCAoZmlsZS1leGlzdHMtcCBpZ25vcmUtbmFtZSkpKSkKKyAgKHNhdmUtd2luZG93LWV4Y3Vyc2lvbgorICAgIChzZXQtYnVmZmVyIChmaW5kLWZpbGUtbm9zZWxlY3QgaWdub3JlLW5hbWUpKQorICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpCisgICAgKHVubGVzcyAoemVyb3AgKGN1cnJlbnQtY29sdW1uKSkgKGluc2VydCAiXG4iKSkKKyAgICAoaW5zZXJ0ICIvIiBuYW1lICJcbiIpCisgICAgKHNvcnQtbGluZXMgbmlsIChwb2ludC1taW4pIChwb2ludC1tYXgpKQorICAgIChzYXZlLWJ1ZmZlcikpCisgICh3aGVuIGNyZWF0ZWQKKyAgICAoZ2l0LWNhbGwtcHJvY2VzcyBuaWwgInVwZGF0ZS1pbmRleCIgIi0tYWRkIiAiLS0iIChmaWxlLXJlbGF0aXZlLW5hbWUgaWdub3JlLW5hbWUpKSkKKyAgKGdpdC11cGRhdGUtc3RhdHVzLWZpbGVzIChsaXN0IChmaWxlLXJlbGF0aXZlLW5hbWUgaWdub3JlLW5hbWUpKSkpKQorCis7IHByb3BlcnRpemUgZGVmaW5pdGlvbiBmb3IgWEVtYWNzLCBzdG9sZW4gZnJvbSBlcmMtY29tcGF0CisoZXZhbC13aGVuLWNvbXBpbGUKKyAgKHVubGVzcyAoZmJvdW5kcCAncHJvcGVydGl6ZSkKKyAgICAoZGVmdW4gcHJvcGVydGl6ZSAoc3RyaW5nICZyZXN0IHByb3BzKQorICAgICAgKGxldCAoKHN0cmluZyAoY29weS1zZXF1ZW5jZSBzdHJpbmcpKSkKKyAgICAgICAgKHdoaWxlIHByb3BzCisgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IDAgKGxlbmd0aCBzdHJpbmcpIChudGggMCBwcm9wcykgKG50aCAxIHByb3BzKSBzdHJpbmcpCisgICAgICAgICAgKHNldHEgcHJvcHMgKGNkZHIgcHJvcHMpKSkKKyAgICAgICAgc3RyaW5nKSkpKQorCis7Ozs7IFdyYXBwZXJzIGZvciBiYXNpYyBnaXQgY29tbWFuZHMKKzs7OzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhkZWZ1biBnaXQtcmV2LXBhcnNlIChyZXYpCisgICJQYXJzZSBhIHJldmlzaW9uIG5hbWUgYW5kIHJldHVybiBpdHMgU0hBMS4iCisgIChnaXQtZ2V0LXN0cmluZy1zaGExCisgICAoZ2l0LWNhbGwtcHJvY2Vzcy1zdHJpbmcgInJldi1wYXJzZSIgcmV2KSkpCisKKyhkZWZ1biBnaXQtY29uZmlnIChrZXkpCisgICJSZXRyaWV2ZSB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byBLRVkgaW4gdGhlIGdpdCByZXBvc2l0b3J5IGNvbmZpZyBmaWxlLiIKKyAgKGxldCAoKHN0ciAoZ2l0LWNhbGwtcHJvY2Vzcy1zdHJpbmcgImNvbmZpZyIga2V5KSkpCisgICAgKGFuZCBzdHIgKGNhciAoc3BsaXQtc3RyaW5nIHN0ciAiXG4iKSkpKSkKKworKGRlZnVuIGdpdC1zeW1ib2xpYy1yZWYgKHJlZikKKyAgIldyYXBwZXIgZm9yIHRoZSBnaXQtc3ltYm9saWMtcmVmIGNvbW1hbmQuIgorICAobGV0ICgoc3RyIChnaXQtY2FsbC1wcm9jZXNzLXN0cmluZyAic3ltYm9saWMtcmVmIiByZWYpKSkKKyAgICAoYW5kIHN0ciAoY2FyIChzcGxpdC1zdHJpbmcgc3RyICJcbiIpKSkpKQorCisoZGVmdW4gZ2l0LXVwZGF0ZS1yZWYgKHJlZiBuZXd2YWwgJm9wdGlvbmFsIG9sZHZhbCByZWFzb24pCisgICJVcGRhdGUgYSByZWZlcmVuY2UgYnkgY2FsbGluZyBnaXQtdXBkYXRlLXJlZi4iCisgIChsZXQgKChhcmdzIChhbmQgb2xkdmFsIChsaXN0IG9sZHZhbCkpKSkKKyAgICAod2hlbiBuZXd2YWwgKHB1c2ggbmV3dmFsIGFyZ3MpKQorICAgIChwdXNoIHJlZiBhcmdzKQorICAgICh3aGVuIHJlYXNvbgorICAgICAocHVzaCByZWFzb24gYXJncykKKyAgICAgKHB1c2ggIi1tIiBhcmdzKSkKKyAgICAodW5sZXNzIG5ld3ZhbCAocHVzaCAiLWQiIGFyZ3MpKQorICAgIChhcHBseSAnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtcmVmIiBhcmdzKSkpCisKKyhkZWZ1biBnaXQtZm9yLWVhY2gtcmVmICgmcmVzdCBzcGVjcykKKyAgIlJldHVybiBhIGxpc3Qgb2YgcmVmcyB1c2luZyBnaXQtZm9yLWVhY2gtcmVmLgorRWFjaCBlbnRyeSBpcyBhIGNvbnMgb2YgKFNIT1JULU5BTUUgLiBGVUxMLU5BTUUpLiIKKyAgKGxldCAocmVmcykKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2VzcyB0ICJmb3ItZWFjaC1yZWYiICItLWZvcm1hdD0lKHJlZm5hbWUpIiBzcGVjcykKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJeW14vXG5dKy9bXi9cbl0rL1xcKC4rXFwpJCIgbmlsIHQpCisJKHB1c2ggKGNvbnMgKG1hdGNoLXN0cmluZyAxKSAobWF0Y2gtc3RyaW5nIDApKSByZWZzKSkpCisgICAgKG5yZXZlcnNlIHJlZnMpKSkKKworKGRlZnVuIGdpdC1yZWFkLXRyZWUgKHRyZWUgJm9wdGlvbmFsIGluZGV4LWZpbGUpCisgICJSZWFkIGEgdHJlZSBpbnRvIHRoZSBpbmRleCBmaWxlLiIKKyAgKGxldCAoKHByb2Nlc3MtZW52aXJvbm1lbnQKKyAgICAgICAgIChhcHBlbmQgKGFuZCBpbmRleC1maWxlIChsaXN0IChjb25jYXQgIkdJVF9JTkRFWF9GSUxFPSIgaW5kZXgtZmlsZSkpKSBwcm9jZXNzLWVudmlyb25tZW50KSkpCisgICAgKGFwcGx5ICdnaXQtY2FsbC1wcm9jZXNzLWRpc3BsYXktZXJyb3IgInJlYWQtdHJlZSIgKGlmIHRyZWUgKGxpc3QgdHJlZSkpKSkpCisKKyhkZWZ1biBnaXQtd3JpdGUtdHJlZSAoJm9wdGlvbmFsIGluZGV4LWZpbGUpCisgICJDYWxsIGdpdC13cml0ZS10cmVlIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyB0cmVlIFNIQTEgYXMgYSBzdHJpbmcuIgorICAobGV0ICgocHJvY2Vzcy1lbnZpcm9ubWVudAorICAgICAgICAgKGFwcGVuZCAoYW5kIGluZGV4LWZpbGUgKGxpc3QgKGNvbmNhdCAiR0lUX0lOREVYX0ZJTEU9IiBpbmRleC1maWxlKSkpIHByb2Nlc3MtZW52aXJvbm1lbnQpKSkKKyAgICAoZ2l0LWdldC1zdHJpbmctc2hhMQorICAgICAoZ2l0LWNhbGwtcHJvY2Vzcy1zdHJpbmctZGlzcGxheS1lcnJvciAid3JpdGUtdHJlZSIpKSkpCisKKyhkZWZ1biBnaXQtY29tbWl0LXRyZWUgKGJ1ZmZlciB0cmVlIHBhcmVudCkKKyAgIkNyZWF0ZSBhIGNvbW1pdCBhbmQgcG9zc2libHkgdXBkYXRlIEhFQUQuCitDcmVhdGUgYSBjb21taXQgd2l0aCB0aGUgbWVzc2FnZSBpbiBCVUZGRVIgdXNpbmcgdGhlIHRyZWUgd2l0aCBoYXNoIFRSRUUuCitVc2UgUEFSRU5UIGFzIHRoZSBwYXJlbnQgb2YgdGhlIG5ldyBjb21taXQuIElmIFBBUkVOVCBpcyB0aGUgY3VycmVudCBcIkhFQURcIiwKK3VwZGF0ZSB0aGUgXCJIRUFEXCIgcmVmZXJlbmNlIHRvIHRoZSBuZXcgY29tbWl0LiIKKyAgKGxldCAoKGF1dGhvci1uYW1lIChnaXQtZ2V0LWNvbW1pdHRlci1uYW1lKSkKKyAgICAgICAgKGF1dGhvci1lbWFpbCAoZ2l0LWdldC1jb21taXR0ZXItZW1haWwpKQorICAgICAgICAoc3ViamVjdCAiY29tbWl0IChpbml0aWFsKTogIikKKyAgICAgICAgYXV0aG9yLWRhdGUgbG9nLXN0YXJ0IGxvZy1lbmQgYXJncyBjb2Rpbmctc3lzdGVtLWZvci13cml0ZSkKKyAgICAod2hlbiBwYXJlbnQKKyAgICAgIChzZXRxIHN1YmplY3QgImNvbW1pdDogIikKKyAgICAgIChwdXNoICItcCIgYXJncykKKyAgICAgIChwdXNoIHBhcmVudCBhcmdzKSkKKyAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAoaWYKKyAgICAgICAgICAoc2V0cSBsb2ctc3RhcnQgKHJlLXNlYXJjaC1mb3J3YXJkIChjb25jYXQgIl4iIChyZWdleHAtcXVvdGUgZ2l0LWxvZy1tc2ctc2VwYXJhdG9yKSAiXG4iKSBuaWwgdCkpCisgICAgICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KKyAgICAgICAgICAgIChuYXJyb3ctdG8tcmVnaW9uIChwb2ludC1taW4pIGxvZy1zdGFydCkKKyAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5BdXRob3I6ICtcXCguKj9cXCkgKjxcXCguKlxcKT4gKiQiIG5pbCB0KQorICAgICAgICAgICAgICAoc2V0cSBhdXRob3ItbmFtZSAobWF0Y2gtc3RyaW5nIDEpCisgICAgICAgICAgICAgICAgICAgIGF1dGhvci1lbWFpbCAobWF0Y2gtc3RyaW5nIDIpKSkKKyAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5EYXRlOiArXFwoLipcXCkkIiBuaWwgdCkKKyAgICAgICAgICAgICAgKHNldHEgYXV0aG9yLWRhdGUgKG1hdGNoLXN0cmluZyAxKSkpCisgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkICJeTWVyZ2U6ICtcXCguKlxcKSIgbmlsIHQpCisgICAgICAgICAgICAgIChzZXRxIHN1YmplY3QgImNvbW1pdCAobWVyZ2UpOiAiKQorICAgICAgICAgICAgICAoZG9saXN0IChwYXJlbnQgKHNwbGl0LXN0cmluZyAobWF0Y2gtc3RyaW5nIDEpICIgKyIgdCkpCisgICAgICAgICAgICAgICAgKHB1c2ggIi1wIiBhcmdzKQorICAgICAgICAgICAgICAgIChwdXNoIHBhcmVudCBhcmdzKSkpKQorICAgICAgICAoc2V0cSBsb2ctc3RhcnQgKHBvaW50LW1pbikpKQorICAgICAgKHNldHEgbG9nLWVuZCAocG9pbnQtbWF4KSkKKyAgICAgIChnb3RvLWNoYXIgbG9nLXN0YXJ0KQorICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkICIuKiQiIG5pbCB0KQorICAgICAgICAoc2V0cSBzdWJqZWN0IChjb25jYXQgc3ViamVjdCAobWF0Y2gtc3RyaW5nIDApKSkpCisgICAgICAoc2V0cSBjb2Rpbmctc3lzdGVtLWZvci13cml0ZSBidWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtKSkKKyAgICAobGV0ICgoY29tbWl0CisgICAgICAgICAgIChnaXQtZ2V0LXN0cmluZy1zaGExCisgICAgICAgICAgICAobGV0ICgoZW52IGAoKCJHSVRfQVVUSE9SX05BTUUiIC4gLGF1dGhvci1uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICgiR0lUX0FVVEhPUl9FTUFJTCIgLiAsYXV0aG9yLWVtYWlsKQorICAgICAgICAgICAgICAgICAgICAgICAgICgiR0lUX0NPTU1JVFRFUl9OQU1FIiAuICwoZ2l0LWdldC1jb21taXR0ZXItbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJHSVRfQ09NTUlUVEVSX0VNQUlMIiAuICwoZ2l0LWdldC1jb21taXR0ZXItZW1haWwpKSkpKQorICAgICAgICAgICAgICAod2hlbiBhdXRob3ItZGF0ZSAocHVzaCBgKCJHSVRfQVVUSE9SX0RBVEUiIC4gLGF1dGhvci1kYXRlKSBlbnYpKQorICAgICAgICAgICAgICAoYXBwbHkgIydnaXQtcnVuLWNvbW1hbmQtcmVnaW9uCisgICAgICAgICAgICAgICAgICAgICBidWZmZXIgbG9nLXN0YXJ0IGxvZy1lbmQgZW52CisgICAgICAgICAgICAgICAgICAgICAiY29tbWl0LXRyZWUiIHRyZWUgKG5yZXZlcnNlIGFyZ3MpKSkpKSkKKyAgICAgICh3aGVuIGNvbW1pdCAoZ2l0LXVwZGF0ZS1yZWYgIkhFQUQiIGNvbW1pdCBwYXJlbnQgc3ViamVjdCkpCisgICAgICBjb21taXQpKSkKKworKGRlZnVuIGdpdC1lbXB0eS1kYi1wICgpCisgICJDaGVjayBpZiB0aGUgZ2l0IGRiIGlzIGVtcHR5IChubyBjb21taXQgZG9uZSB5ZXQpLiIKKyAgKG5vdCAoZXEgMCAoZ2l0LWNhbGwtcHJvY2VzcyBuaWwgInJldi1wYXJzZSIgIi0tdmVyaWZ5IiAiSEVBRCIpKSkpCisKKyhkZWZ1biBnaXQtZ2V0LW1lcmdlLWhlYWRzICgpCisgICJSZXRyaWV2ZSB0aGUgbWVyZ2UgaGVhZHMgZnJvbSB0aGUgTUVSR0VfSEVBRCBmaWxlIGlmIHByZXNlbnQuIgorICAobGV0IChoZWFkcykKKyAgICAod2hlbiAoZmlsZS1yZWFkYWJsZS1wICIuZ2l0L01FUkdFX0hFQUQiKQorICAgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgICAgKGluc2VydC1maWxlLWNvbnRlbnRzICIuZ2l0L01FUkdFX0hFQUQiIG5pbCBuaWwgbmlsIHQpCisgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgIlswLTlhLWZdXFx7NDBcXH0iIG5pbCB0KQorICAgICAgICAgIChwdXNoIChtYXRjaC1zdHJpbmcgMCkgaGVhZHMpKSkpCisgICAgKG5yZXZlcnNlIGhlYWRzKSkpCisKKyhkZWZ1biBnaXQtZ2V0LWNvbW1pdC1kZXNjcmlwdGlvbiAoY29tbWl0KQorICAiR2V0IGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgQ09NTUlULiIKKyAgKGxldCAoKGNvZGluZy1zeXN0ZW0tZm9yLXJlYWQgKGdpdC1nZXQtbG9nb3V0cHV0LWNvZGluZy1zeXN0ZW0pKSkKKyAgICAobGV0ICgoZGVzY3IgKGdpdC1jYWxsLXByb2Nlc3Mtc3RyaW5nICJsb2ciICItLW1heC1jb3VudD0xIiAiLS1wcmV0dHk9b25lbGluZSIgY29tbWl0KSkpCisgICAgICAoaWYgKGFuZCBkZXNjciAoc3RyaW5nLW1hdGNoICJcXGBcXChbMC05YS1mXVxcezQwXFx9XFwpICpcXCguKlxcKSQiIGRlc2NyKSkKKyAgICAgICAgICAoY29uY2F0IChzdWJzdHJpbmcgKG1hdGNoLXN0cmluZyAxIGRlc2NyKSAwIDEwKSAiIC0gIiAobWF0Y2gtc3RyaW5nIDIgZGVzY3IpKQorICAgICAgICBkZXNjcikpKSkKKworOzs7OyBGaWxlIGluZm8gc3RydWN0dXJlCis7Ozs7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7IGZpbGVpbmZvIHN0cnVjdHVyZSBzdG9sZW4gZnJvbSBwY2wtY3ZzCisoZGVmc3RydWN0IChnaXQtZmlsZWluZm8KKyAgICAgICAgICAgICg6Y29waWVyIG5pbCkKKyAgICAgICAgICAgICg6Y29uc3RydWN0b3IgZ2l0LWNyZWF0ZS1maWxlaW5mbyAoc3RhdGUgbmFtZSAmb3B0aW9uYWwgb2xkLXBlcm0gbmV3LXBlcm0gcmVuYW1lLXN0YXRlIG9yaWctbmFtZSBtYXJrZWQpKQorICAgICAgICAgICAgKDpjb25jLW5hbWUgZ2l0LWZpbGVpbmZvLT4pKQorICBtYXJrZWQgICAgICAgICAgICAgIDs7IHQvbmlsCisgIHN0YXRlICAgICAgICAgICAgICAgOzsgY3VycmVudCBzdGF0ZQorICBuYW1lICAgICAgICAgICAgICAgIDs7IGZpbGUgbmFtZQorICBvbGQtcGVybSBuZXctcGVybSAgIDs7IHBlcm1pc3Npb24gZmxhZ3MKKyAgcmVuYW1lLXN0YXRlICAgICAgICA7OyByZW5hbWUgb3IgY29weSBzdGF0ZQorICBvcmlnLW5hbWUgICAgICAgICAgIDs7IG9yaWdpbmFsIG5hbWUgZm9yIHJlbmFtZXMgb3IgY29waWVzCisgIG5lZWRzLXVwZGF0ZSAgICAgICAgOzsgd2hldGhlciBmaWxlIG5lZWRzIHRvIGJlIHVwZGF0ZWQKKyAgbmVlZHMtcmVmcmVzaCkgICAgICA7OyB3aGV0aGVyIGZpbGUgbmVlZHMgdG8gYmUgcmVmcmVzaGVkCisKKyhkZWZ2YXIgZ2l0LXN0YXR1cyBuaWwpCisKKyhkZWZ1biBnaXQtc2V0LWZpbGVpbmZvLXN0YXRlIChpbmZvIHN0YXRlKQorICAiU2V0IHRoZSBzdGF0ZSBvZiBhIGZpbGUgaW5mby4iCisgICh1bmxlc3MgKGVxIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pIHN0YXRlKQorICAgIChzZXRmIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pIHN0YXRlCisJICAoZ2l0LWZpbGVpbmZvLT5uZXctcGVybSBpbmZvKSAoZ2l0LWZpbGVpbmZvLT5vbGQtcGVybSBpbmZvKQorICAgICAgICAgIChnaXQtZmlsZWluZm8tPnJlbmFtZS1zdGF0ZSBpbmZvKSBuaWwKKyAgICAgICAgICAoZ2l0LWZpbGVpbmZvLT5vcmlnLW5hbWUgaW5mbykgbmlsCisgICAgICAgICAgKGdpdC1maWxlaW5mby0+bmVlZHMtdXBkYXRlIGluZm8pIG5pbAorICAgICAgICAgIChnaXQtZmlsZWluZm8tPm5lZWRzLXJlZnJlc2ggaW5mbykgdCkpKQorCisoZGVmdW4gZ2l0LXN0YXR1cy1maWxlbmFtZXMtbWFwIChzdGF0dXMgZnVuYyBmaWxlcyAmcmVzdCBhcmdzKQorICAiQXBwbHkgRlVOQyB0byB0aGUgc3RhdHVzIGZpbGVzIG5hbWVzIGluIHRoZSBGSUxFUyBsaXN0LgorVGhlIGxpc3QgbXVzdCBiZSBzb3J0ZWQuIgorICAod2hlbiBmaWxlcworICAgIChsZXQgKChmaWxlIChwb3AgZmlsZXMpKQorICAgICAgICAgIChub2RlIChld29jLW50aCBzdGF0dXMgMCkpKQorICAgICAgKHdoaWxlIChhbmQgZmlsZSBub2RlKQorICAgICAgICAobGV0KiAoKGluZm8gKGV3b2MtZGF0YSBub2RlKSkKKyAgICAgICAgICAgICAgIChuYW1lIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbykpKQorICAgICAgICAgIChpZiAoc3RyaW5nLWxlc3NwIG5hbWUgZmlsZSkKKyAgICAgICAgICAgICAgKHNldHEgbm9kZSAoZXdvYy1uZXh0IHN0YXR1cyBub2RlKSkKKyAgICAgICAgICAgIChpZiAoc3RyaW5nLWVxdWFsIG5hbWUgZmlsZSkKKyAgICAgICAgICAgICAgICAoYXBwbHkgZnVuYyBpbmZvIGFyZ3MpKQorICAgICAgICAgICAgKHNldHEgZmlsZSAocG9wIGZpbGVzKSkpKSkpKSkKKworKGRlZnVuIGdpdC1zZXQtZmlsZW5hbWVzLXN0YXRlIChzdGF0dXMgZmlsZXMgc3RhdGUpCisgICJTZXQgdGhlIHN0YXRlIG9mIGEgbGlzdCBvZiBuYW1lZCBmaWxlcy4gVGhlIGxpc3QgbXVzdCBiZSBzb3J0ZWQiCisgICh3aGVuIGZpbGVzCisgICAgKGdpdC1zdGF0dXMtZmlsZW5hbWVzLW1hcCBzdGF0dXMgIydnaXQtc2V0LWZpbGVpbmZvLXN0YXRlIGZpbGVzIHN0YXRlKQorICAgICh1bmxlc3Mgc3RhdGUgIDs7IGRlbGV0ZSBmaWxlcyB3aG9zZSBzdGF0ZSBoYXMgYmVlbiBzZXQgdG8gbmlsCisgICAgICAoZXdvYy1maWx0ZXIgc3RhdHVzIChsYW1iZGEgKGluZm8pIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pKSkpKSkKKworKGRlZnVuIGdpdC1zdGF0ZS1jb2RlIChjb2RlKQorICAiQ29udmVydCBmcm9tIGEgc3RyaW5nIHRvIGEgYWRkZWQvZGVsZXRlZC9tb2RpZmllZCBzdGF0ZS4iCisgIChjYXNlIChzdHJpbmctdG8tY2hhciBjb2RlKQorICAgICg/TSAnbW9kaWZpZWQpCisgICAgKD8/ICd1bmtub3duKQorICAgICg/QSAnYWRkZWQpCisgICAgKD9EICdkZWxldGVkKQorICAgICg/VSAndW5tZXJnZWQpCisgICAgKD9UICdtb2RpZmllZCkKKyAgICAodCBuaWwpKSkKKworKGRlZnVuIGdpdC1zdGF0dXMtY29kZS1hcy1zdHJpbmcgKGNvZGUpCisgICJGb3JtYXQgYSBnaXQgc3RhdHVzIGNvZGUgYXMgc3RyaW5nLiIKKyAgKGNhc2UgY29kZQorICAgICgnbW9kaWZpZWQgKHByb3BlcnRpemUgIk1vZGlmaWVkIiAnZmFjZSAnZ2l0LXN0YXR1cy1mYWNlKSkKKyAgICAoJ3Vua25vd24gIChwcm9wZXJ0aXplICJVbmtub3duICIgJ2ZhY2UgJ2dpdC11bmtub3duLWZhY2UpKQorICAgICgnYWRkZWQgICAgKHByb3BlcnRpemUgIkFkZGVkICAgIiAnZmFjZSAnZ2l0LXN0YXR1cy1mYWNlKSkKKyAgICAoJ2RlbGV0ZWQgIChwcm9wZXJ0aXplICJEZWxldGVkICIgJ2ZhY2UgJ2dpdC1zdGF0dXMtZmFjZSkpCisgICAgKCd1bm1lcmdlZCAocHJvcGVydGl6ZSAiVW5tZXJnZWQiICdmYWNlICdnaXQtdW5tZXJnZWQtZmFjZSkpCisgICAgKCd1cHRvZGF0ZSAocHJvcGVydGl6ZSAiVXB0b2RhdGUiICdmYWNlICdnaXQtdXB0b2RhdGUtZmFjZSkpCisgICAgKCdpZ25vcmVkICAocHJvcGVydGl6ZSAiSWdub3JlZCAiICdmYWNlICdnaXQtaWdub3JlZC1mYWNlKSkKKyAgICAodCAiPyAgICAgICAiKSkpCisKKyhkZWZ1biBnaXQtZmlsZS10eXBlLWFzLXN0cmluZyAob2xkLXBlcm0gbmV3LXBlcm0pCisgICJSZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZmlsZSB0eXBlIGJhc2VkIG9uIGl0cyBwZXJtaXNzaW9ucy4iCisgIChsZXQqICgob2xkLXR5cGUgKGxzaCAob3Igb2xkLXBlcm0gMCkgLTkpKQorCSAobmV3LXR5cGUgKGxzaCAob3IgbmV3LXBlcm0gMCkgLTkpKQorCSAoc3RyIChjYXNlIG5ldy10eXBlCisJCSg2NCAgOzsgZmlsZQorCQkgKGNhc2Ugb2xkLXR5cGUKKwkJICAgKDY0IG5pbCkKKwkJICAgKDgwICIgICAodHlwZSBjaGFuZ2Ugc3ltbGluayAtPiBmaWxlKSIpCisJCSAgICgxMTIgIiAgICh0eXBlIGNoYW5nZSBzdWJwcm9qZWN0IC0+IGZpbGUpIikpKQorCQkgKDgwICA7OyBzeW1saW5rCisJCSAgKGNhc2Ugb2xkLXR5cGUKKwkJICAgICg2NCAiICAgKHR5cGUgY2hhbmdlIGZpbGUgLT4gc3ltbGluaykiKQorCQkgICAgKDExMiAiICAgKHR5cGUgY2hhbmdlIHN1YnByb2plY3QgLT4gc3ltbGluaykiKQorCQkgICAgKHQgIiAgIChzeW1saW5rKSIpKSkKKwkJICAoMTEyICA7OyBzdWJwcm9qZWN0CisJCSAgIChjYXNlIG9sZC10eXBlCisJCSAgICAgKDY0ICIgICAodHlwZSBjaGFuZ2UgZmlsZSAtPiBzdWJwcm9qZWN0KSIpCisJCSAgICAgKDgwICIgICAodHlwZSBjaGFuZ2Ugc3ltbGluayAtPiBzdWJwcm9qZWN0KSIpCisJCSAgICAgKHQgIiAgIChzdWJwcm9qZWN0KSIpKSkKKyAgICAgICAgICAgICAgICAgICg3MiBuaWwpICA7OyBkaXJlY3RvcnkgKGludGVybmFsLCBub3QgYSByZWFsIGdpdCBzdGF0ZSkKKwkJICAoMCAgOzsgZGVsZXRlZCBvciB1bmtub3duCisJCSAgIChjYXNlIG9sZC10eXBlCisJCSAgICAgKDgwICIgICAoc3ltbGluaykiKQorCQkgICAgICgxMTIgIiAgIChzdWJwcm9qZWN0KSIpKSkKKwkJICAodCAoZm9ybWF0ICIgICAodW5rbm93biB0eXBlICVvKSIgbmV3LXR5cGUpKSkpKQorICAgIChjb25kIChzdHIgKHByb3BlcnRpemUgc3RyICdmYWNlICdnaXQtc3RhdHVzLWZhY2UpKQorICAgICAgICAgICgoZXEgbmV3LXR5cGUgNzIpICIvIikKKyAgICAgICAgICAodCAiIikpKSkKKworKGRlZnVuIGdpdC1yZW5hbWUtYXMtc3RyaW5nIChpbmZvKQorICAiUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNvcHkgb3IgcmVuYW1lIGFzc29jaWF0ZWQgd2l0aCBJTkZPLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgbm9uZS4iCisgIChsZXQgKChzdGF0ZSAoZ2l0LWZpbGVpbmZvLT5yZW5hbWUtc3RhdGUgaW5mbykpKQorICAgIChpZiBzdGF0ZQorICAgICAgICAocHJvcGVydGl6ZQorICAgICAgICAgKGNvbmNhdCAiICAgKCIKKyAgICAgICAgICAgICAgICAgKGlmIChlcSBzdGF0ZSAnY29weSkgImNvcGllZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAoaWYgKGVxIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pICdhZGRlZCkgInJlbmFtZWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAicmVuYW1lZCB0byAiKSkKKyAgICAgICAgICAgICAgICAgKGdpdC1lc2NhcGUtZmlsZS1uYW1lIChnaXQtZmlsZWluZm8tPm9yaWctbmFtZSBpbmZvKSkKKyAgICAgICAgICAgICAgICAgIikiKSAnZmFjZSAnZ2l0LXN0YXR1cy1mYWNlKQorICAgICAgIiIpKSkKKworKGRlZnVuIGdpdC1wZXJtaXNzaW9ucy1hcy1zdHJpbmcgKG9sZC1wZXJtIG5ldy1wZXJtKQorICAiRm9ybWF0IGEgcGVybWlzc2lvbiBjaGFuZ2UgYXMgc3RyaW5nLiIKKyAgKHByb3BlcnRpemUKKyAgIChpZiAob3IgKG5vdCBvbGQtcGVybSkKKyAgICAgICAgICAgKG5vdCBuZXctcGVybSkKKyAgICAgICAgICAgKGVxIDAgKGxvZ2FuZCA/XDExMSAobG9neG9yIG9sZC1wZXJtIG5ldy1wZXJtKSkpKQorICAgICAgICIgICIKKyAgICAgKGlmIChlcSAwIChsb2dhbmQgP1wxMTEgb2xkLXBlcm0pKSAiK3giICIteCIpKQorICAnZmFjZSAnZ2l0LXBlcm1pc3Npb24tZmFjZSkpCisKKyhkZWZ1biBnaXQtZmlsZWluZm8tcHJldHR5cHJpbnQgKGluZm8pCisgICJQcmV0dHktcHJpbnRlciBmb3IgdGhlIGdpdC1maWxlaW5mbyBzdHJ1Y3R1cmUuIgorICAobGV0ICgob2xkLXBlcm0gKGdpdC1maWxlaW5mby0+b2xkLXBlcm0gaW5mbykpCisJKG5ldy1wZXJtIChnaXQtZmlsZWluZm8tPm5ldy1wZXJtIGluZm8pKSkKKyAgICAoaW5zZXJ0IChjb25jYXQgIiAgICIgKGlmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSAocHJvcGVydGl6ZSAiKiIgJ2ZhY2UgJ2dpdC1tYXJrLWZhY2UpICIgIikKKwkJICAgICIgIiAoZ2l0LXN0YXR1cy1jb2RlLWFzLXN0cmluZyAoZ2l0LWZpbGVpbmZvLT5zdGF0ZSBpbmZvKSkKKwkJICAgICIgIiAoZ2l0LXBlcm1pc3Npb25zLWFzLXN0cmluZyBvbGQtcGVybSBuZXctcGVybSkKKwkJICAgICIgICIgKGdpdC1lc2NhcGUtZmlsZS1uYW1lIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbykpCisJCSAgICAoZ2l0LWZpbGUtdHlwZS1hcy1zdHJpbmcgb2xkLXBlcm0gbmV3LXBlcm0pCisJCSAgICAoZ2l0LXJlbmFtZS1hcy1zdHJpbmcgaW5mbykpKSkpCisKKyhkZWZ1biBnaXQtdXBkYXRlLW5vZGUtZmlsZWluZm8gKG5vZGUgaW5mbykKKyAgIlVwZGF0ZSB0aGUgZmlsZWluZm8gb2YgdGhlIHNwZWNpZmllZCBub2RlLiBUaGUgbmFtZXMgYXJlIGFzc3VtZWQgdG8gbWF0Y2ggYWxyZWFkeS4iCisgIChsZXQgKChkYXRhIChld29jLWRhdGEgbm9kZSkpKQorICAgIChzZXRmCisgICAgIDs7IHByZXNlcnZlIHRoZSBtYXJrZWQgZmxhZworICAgICAoZ2l0LWZpbGVpbmZvLT5tYXJrZWQgaW5mbykgKGdpdC1maWxlaW5mby0+bWFya2VkIGRhdGEpCisgICAgIChnaXQtZmlsZWluZm8tPm5lZWRzLXVwZGF0ZSBkYXRhKSBuaWwpCisgICAgKHdoZW4gKG5vdCAoZXF1YWwgaW5mbyBkYXRhKSkKKyAgICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm5lZWRzLXJlZnJlc2ggaW5mbykgdAorICAgICAgICAgICAgKGV3b2MtZGF0YSBub2RlKSBpbmZvKSkpKQorCisoZGVmdW4gZ2l0LWluc2VydC1pbmZvLWxpc3QgKHN0YXR1cyBpbmZvbGlzdCBmaWxlcykKKyAgIkluc2VydCBhIHNvcnRlZCBsaXN0IG9mIGZpbGUgaW5mb3MgaW4gdGhlIHN0YXR1cyBidWZmZXIsIHJlcGxhY2luZyBleGlzdGluZyBvbmVzIGlmIGFueS4iCisgIChsZXQqICgoaW5mbyAocG9wIGluZm9saXN0KSkKKyAgICAgICAgIChub2RlIChld29jLW50aCBzdGF0dXMgMCkpCisgICAgICAgICAobmFtZSAoYW5kIGluZm8gKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkpCisgICAgICAgICByZW1haW5pbmcpCisgICAgKHdoaWxlIGluZm8KKyAgICAgIChsZXQgKChub2RlbmFtZSAoYW5kIG5vZGUgKGdpdC1maWxlaW5mby0+bmFtZSAoZXdvYy1kYXRhIG5vZGUpKSkpKQorICAgICAgICAod2hpbGUgKGFuZCBmaWxlcyAoc3RyaW5nLWxlc3NwIChjYXIgZmlsZXMpIG5hbWUpKQorICAgICAgICAgIChwdXNoIChwb3AgZmlsZXMpIHJlbWFpbmluZykpCisgICAgICAgICh3aGVuIChhbmQgZmlsZXMgKHN0cmluZy1lcXVhbCAoY2FyIGZpbGVzKSBuYW1lKSkKKyAgICAgICAgICAoc2V0cSBmaWxlcyAoY2RyIGZpbGVzKSkpCisgICAgICAgIChjb25kICgobm90IG5vZGVuYW1lKQorICAgICAgICAgICAgICAgKHNldHEgbm9kZSAoZXdvYy1lbnRlci1sYXN0IHN0YXR1cyBpbmZvKSkKKyAgICAgICAgICAgICAgIChzZXRxIGluZm8gKHBvcCBpbmZvbGlzdCkpCisgICAgICAgICAgICAgICAoc2V0cSBuYW1lIChhbmQgaW5mbyAoZ2l0LWZpbGVpbmZvLT5uYW1lIGluZm8pKSkpCisgICAgICAgICAgICAgICgoc3RyaW5nLWxlc3NwIG5vZGVuYW1lIG5hbWUpCisgICAgICAgICAgICAgICAoc2V0cSBub2RlIChld29jLW5leHQgc3RhdHVzIG5vZGUpKSkKKyAgICAgICAgICAgICAgKChzdHJpbmctZXF1YWwgbm9kZW5hbWUgbmFtZSkKKyAgICAgICAgICAgICAgIDs7IHByZXNlcnZlIHRoZSBtYXJrZWQgZmxhZworICAgICAgICAgICAgICAgKGdpdC11cGRhdGUtbm9kZS1maWxlaW5mbyBub2RlIGluZm8pCisgICAgICAgICAgICAgICAoc2V0cSBpbmZvIChwb3AgaW5mb2xpc3QpKQorICAgICAgICAgICAgICAgKHNldHEgbmFtZSAoYW5kIGluZm8gKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkpKQorICAgICAgICAgICAgICAodAorICAgICAgICAgICAgICAgKHNldHEgbm9kZSAoZXdvYy1lbnRlci1iZWZvcmUgc3RhdHVzIG5vZGUgaW5mbykpCisgICAgICAgICAgICAgICAoc2V0cSBpbmZvIChwb3AgaW5mb2xpc3QpKQorICAgICAgICAgICAgICAgKHNldHEgbmFtZSAoYW5kIGluZm8gKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkpKSkpKQorICAgIChuY29uYyAobnJldmVyc2UgcmVtYWluaW5nKSBmaWxlcykpKQorCisoZGVmdW4gZ2l0LXJ1bi1kaWZmLWluZGV4IChzdGF0dXMgZmlsZXMpCisgICJSdW4gZ2l0LWRpZmYtaW5kZXggb24gRklMRVMgYW5kIHBhcnNlIHRoZSByZXN1bHRzIGludG8gU1RBVFVTLgorUmV0dXJuIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZW4ndCBiZWVuIGhhbmRsZWQuIgorICAobGV0IChpbmZvbGlzdCkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2VzcyB0ICJkaWZmLWluZGV4IiAiLXoiICItTSIgIkhFQUQiICItLSIgZmlsZXMpCisgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZAorCSAgICAgICI6XFwoWzAtN11cXHs2XFx9XFwpIFxcKFswLTddXFx7NlxcfVxcKSBbMC05YS1mXVxcezQwXFx9IFswLTlhLWZdXFx7NDBcXH0gXFwoXFwoW0FETVVUXVxcKVwwXFwoW15cMF0rXFwpXFx8XFwoW0NSXVxcKVswLTldKlwwXFwoW15cMF0rXFwpXDBcXChbXlwwXStcXClcXClcMCIKKyAgICAgICAgICAgICAgbmlsIHQgMSkKKyAgICAgICAgKGxldCAoKG9sZC1wZXJtIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMSkgOCkpCisgICAgICAgICAgICAgIChuZXctcGVybSAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDIpIDgpKQorICAgICAgICAgICAgICAoc3RhdGUgKG9yIChtYXRjaC1zdHJpbmcgNCkgKG1hdGNoLXN0cmluZyA2KSkpCisgICAgICAgICAgICAgIChuYW1lIChvciAobWF0Y2gtc3RyaW5nIDUpIChtYXRjaC1zdHJpbmcgNykpKQorICAgICAgICAgICAgICAobmV3LW5hbWUgKG1hdGNoLXN0cmluZyA4KSkpCisgICAgICAgICAgKGlmIG5ldy1uYW1lICA7IGNvcHkgb3IgcmVuYW1lCisgICAgICAgICAgICAgIChpZiAoZXEgP0MgKHN0cmluZy10by1jaGFyIHN0YXRlKSkKKyAgICAgICAgICAgICAgICAgIChwdXNoIChnaXQtY3JlYXRlLWZpbGVpbmZvICdhZGRlZCBuZXctbmFtZSBvbGQtcGVybSBuZXctcGVybSAnY29weSBuYW1lKSBpbmZvbGlzdCkKKyAgICAgICAgICAgICAgICAocHVzaCAoZ2l0LWNyZWF0ZS1maWxlaW5mbyAnZGVsZXRlZCBuYW1lIDAgMCAncmVuYW1lIG5ldy1uYW1lKSBpbmZvbGlzdCkKKyAgICAgICAgICAgICAgICAocHVzaCAoZ2l0LWNyZWF0ZS1maWxlaW5mbyAnYWRkZWQgbmV3LW5hbWUgb2xkLXBlcm0gbmV3LXBlcm0gJ3JlbmFtZSBuYW1lKSBpbmZvbGlzdCkpCisgICAgICAgICAgICAocHVzaCAoZ2l0LWNyZWF0ZS1maWxlaW5mbyAoZ2l0LXN0YXRlLWNvZGUgc3RhdGUpIG5hbWUgb2xkLXBlcm0gbmV3LXBlcm0pIGluZm9saXN0KSkpKSkKKyAgICAoc2V0cSBpbmZvbGlzdCAoc29ydCAobnJldmVyc2UgaW5mb2xpc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoaW5mbzEgaW5mbzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWxlc3NwIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbzIpKSkpKQorICAgIChnaXQtaW5zZXJ0LWluZm8tbGlzdCBzdGF0dXMgaW5mb2xpc3QgZmlsZXMpKSkKKworKGRlZnVuIGdpdC1maW5kLXN0YXR1cy1maWxlIChzdGF0dXMgZmlsZSkKKyAgIkZpbmQgYSBnaXZlbiBmaWxlIGluIHRoZSBzdGF0dXMgZXdvYyBhbmQgcmV0dXJuIGl0cyBub2RlLiIKKyAgKGxldCAoKG5vZGUgKGV3b2MtbnRoIHN0YXR1cyAwKSkpCisgICAgKHdoaWxlIChhbmQgbm9kZSAobm90IChzdHJpbmc9IGZpbGUgKGdpdC1maWxlaW5mby0+bmFtZSAoZXdvYy1kYXRhIG5vZGUpKSkpKQorICAgICAgKHNldHEgbm9kZSAoZXdvYy1uZXh0IHN0YXR1cyBub2RlKSkpCisgICAgbm9kZSkpCisKKyhkZWZ1biBnaXQtcnVuLWxzLWZpbGVzIChzdGF0dXMgZmlsZXMgZGVmYXVsdC1zdGF0ZSAmcmVzdCBvcHRpb25zKQorICAiUnVuIGdpdC1scy1maWxlcyBvbiBGSUxFUyBhbmQgcGFyc2UgdGhlIHJlc3VsdHMgaW50byBTVEFUVVMuCitSZXR1cm4gdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlbid0IGJlZW4gaGFuZGxlZC4iCisgIChsZXQgKGluZm9saXN0KQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAoYXBwbHkgIydnaXQtY2FsbC1wcm9jZXNzIHQgImxzLWZpbGVzIiAiLXoiIChhcHBlbmQgb3B0aW9ucyAobGlzdCAiLS0iKSBmaWxlcykpCisgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiXFwoW15cMF0qP1xcKVxcKC8/XFwpXDAiIG5pbCB0IDEpCisgICAgICAgIChsZXQgKChuYW1lIChtYXRjaC1zdHJpbmcgMSkpKQorICAgICAgICAgIChwdXNoIChnaXQtY3JlYXRlLWZpbGVpbmZvIGRlZmF1bHQtc3RhdGUgbmFtZSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChzdHJpbmctZXF1YWwgIi8iIChtYXRjaC1zdHJpbmcgMikpIChsc2ggP1wxMTAgOSkgMCkpCisgICAgICAgICAgICAgICAgaW5mb2xpc3QpKSkpCisgICAgKHNldHEgaW5mb2xpc3QgKG5yZXZlcnNlIGluZm9saXN0KSkgIDs7IGFzc3VtZSBpdCBpcyBzb3J0ZWQgYWxyZWFkeQorICAgIChnaXQtaW5zZXJ0LWluZm8tbGlzdCBzdGF0dXMgaW5mb2xpc3QgZmlsZXMpKSkKKworKGRlZnVuIGdpdC1ydW4tbHMtZmlsZXMtY2FjaGVkIChzdGF0dXMgZmlsZXMgZGVmYXVsdC1zdGF0ZSkKKyAgIlJ1biBnaXQtbHMtZmlsZXMgLWMgb24gRklMRVMgYW5kIHBhcnNlIHRoZSByZXN1bHRzIGludG8gU1RBVFVTLgorUmV0dXJuIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZW4ndCBiZWVuIGhhbmRsZWQuIgorICAobGV0IChpbmZvbGlzdCkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2VzcyB0ICJscy1maWxlcyIgIi16IiAiLXMiICItYyIgIi0tIiBmaWxlcykKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJcXChbMC03XVxcezZcXH1cXCkgWzAtOWEtZl1cXHs0MFxcfSAwXHRcXChbXlwwXStcXClcMCIgbmlsIHQpCisJKGxldCogKChuZXctcGVybSAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDEpIDgpKQorCSAgICAgICAob2xkLXBlcm0gKGlmIChlcSBkZWZhdWx0LXN0YXRlICdhZGRlZCkgMCBuZXctcGVybSkpCisJICAgICAgIChuYW1lIChtYXRjaC1zdHJpbmcgMikpKQorCSAgKHB1c2ggKGdpdC1jcmVhdGUtZmlsZWluZm8gZGVmYXVsdC1zdGF0ZSBuYW1lIG9sZC1wZXJtIG5ldy1wZXJtKSBpbmZvbGlzdCkpKSkKKyAgICAoc2V0cSBpbmZvbGlzdCAobnJldmVyc2UgaW5mb2xpc3QpKSAgOzsgYXNzdW1lIGl0IGlzIHNvcnRlZCBhbHJlYWR5CisgICAgKGdpdC1pbnNlcnQtaW5mby1saXN0IHN0YXR1cyBpbmZvbGlzdCBmaWxlcykpKQorCisoZGVmdW4gZ2l0LXJ1bi1scy11bm1lcmdlZCAoc3RhdHVzIGZpbGVzKQorICAiUnVuIGdpdC1scy1maWxlcyAtdSBvbiBGSUxFUyBhbmQgcGFyc2UgdGhlIHJlc3VsdHMgaW50byBTVEFUVVMuIgorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChhcHBseSAjJ2dpdC1jYWxsLXByb2Nlc3MgdCAibHMtZmlsZXMiICIteiIgIi11IiAiLS0iIGZpbGVzKQorICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgKGxldCAodW5tZXJnZWQtZmlsZXMpCisgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJbMC03XVxcezZcXH0gWzAtOWEtZl1cXHs0MFxcfSBbMTIzXVx0XFwoW15cMF0rXFwpXDAiIG5pbCB0KQorICAgICAgICAocHVzaCAobWF0Y2gtc3RyaW5nIDEpIHVubWVyZ2VkLWZpbGVzKSkKKyAgICAgIChzZXRxIHVubWVyZ2VkLWZpbGVzIChucmV2ZXJzZSB1bm1lcmdlZC1maWxlcykpICA7OyBhc3N1bWUgaXQgaXMgc29ydGVkIGFscmVhZHkKKyAgICAgIChnaXQtc2V0LWZpbGVuYW1lcy1zdGF0ZSBzdGF0dXMgdW5tZXJnZWQtZmlsZXMgJ3VubWVyZ2VkKSkpKQorCisoZGVmdW4gZ2l0LWdldC1leGNsdWRlLWZpbGVzICgpCisgICJHZXQgdGhlIGxpc3Qgb2YgZXhjbHVkZSBmaWxlcyB0byBwYXNzIHRvIGdpdC1scy1maWxlcy4iCisgIChsZXQgKGZpbGVzCisgICAgICAgIChjb25maWcgKGdpdC1jb25maWcgImNvcmUuZXhjbHVkZXNmaWxlIikpKQorICAgICh3aGVuIChmaWxlLXJlYWRhYmxlLXAgIi5naXQvaW5mby9leGNsdWRlIikKKyAgICAgIChwdXNoICIuZ2l0L2luZm8vZXhjbHVkZSIgZmlsZXMpKQorICAgICh3aGVuIChhbmQgY29uZmlnIChmaWxlLXJlYWRhYmxlLXAgY29uZmlnKSkKKyAgICAgIChwdXNoIGNvbmZpZyBmaWxlcykpCisgICAgZmlsZXMpKQorCisoZGVmdW4gZ2l0LXJ1bi1scy1maWxlcy13aXRoLWV4Y2x1ZGVzIChzdGF0dXMgZmlsZXMgZGVmYXVsdC1zdGF0ZSAmcmVzdCBvcHRpb25zKQorICAiUnVuIGdpdC1scy1maWxlcyBvbiBGSUxFUyB3aXRoIGFwcHJvcHJpYXRlIC0tZXhjbHVkZS1mcm9tIG9wdGlvbnMuIgorICAobGV0ICgoZXhjbHVkZS1maWxlcyAoZ2l0LWdldC1leGNsdWRlLWZpbGVzKSkpCisgICAgKGFwcGx5ICMnZ2l0LXJ1bi1scy1maWxlcyBzdGF0dXMgZmlsZXMgZGVmYXVsdC1zdGF0ZSAiLS1kaXJlY3RvcnkiICItLW5vLWVtcHR5LWRpcmVjdG9yeSIKKyAgICAgICAgICAgKGNvbmNhdCAiLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9IiBnaXQtcGVyLWRpci1pZ25vcmUtZmlsZSkKKyAgICAgICAgICAgKGFwcGVuZCBvcHRpb25zIChtYXBjYXIgKGxhbWJkYSAoZikgKGNvbmNhdCAiLS1leGNsdWRlLWZyb209IiBmKSkgZXhjbHVkZS1maWxlcykpKSkpCisKKyhkZWZ1biBnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyAoJm9wdGlvbmFsIGZpbGVzIG1hcmstZmlsZXMpCisgICJVcGRhdGUgdGhlIHN0YXR1cyBvZiBGSUxFUyBmcm9tIHRoZSBpbmRleC4KK1RoZSBGSUxFUyBsaXN0IG11c3QgYmUgc29ydGVkLiIKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICA7OyBzZXQgdGhlIG5lZWRzLXVwZGF0ZSBmbGFnIG9uIGV4aXN0aW5nIGZpbGVzCisgIChpZiBmaWxlcworICAgICAgKGdpdC1zdGF0dXMtZmlsZW5hbWVzLW1hcAorICAgICAgIGdpdC1zdGF0dXMgKGxhbWJkYSAoaW5mbykgKHNldGYgKGdpdC1maWxlaW5mby0+bmVlZHMtdXBkYXRlIGluZm8pIHQpKSBmaWxlcykKKyAgICAoZXdvYy1tYXAgKGxhbWJkYSAoaW5mbykgKHNldGYgKGdpdC1maWxlaW5mby0+bmVlZHMtdXBkYXRlIGluZm8pIHQpIG5pbCkgZ2l0LXN0YXR1cykKKyAgICAoZ2l0LWNhbGwtcHJvY2VzcyBuaWwgInVwZGF0ZS1pbmRleCIgIi0tcmVmcmVzaCIpCisgICAgKHdoZW4gZ2l0LXNob3ctdXB0b2RhdGUKKyAgICAgIChnaXQtcnVuLWxzLWZpbGVzLWNhY2hlZCBnaXQtc3RhdHVzIG5pbCAndXB0b2RhdGUpKSkKKyAgKGxldCAoKHJlbWFpbmluZy1maWxlcworICAgICAgICAgIChpZiAoZ2l0LWVtcHR5LWRiLXApIDsgd2UgbmVlZCBzb21lIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFuIGVtcHR5IGRiCisJICAgICAgKGdpdC1ydW4tbHMtZmlsZXMtY2FjaGVkIGdpdC1zdGF0dXMgZmlsZXMgJ2FkZGVkKQorICAgICAgICAgICAgKGdpdC1ydW4tZGlmZi1pbmRleCBnaXQtc3RhdHVzIGZpbGVzKSkpKQorICAgIChnaXQtcnVuLWxzLXVubWVyZ2VkIGdpdC1zdGF0dXMgZmlsZXMpCisgICAgKHdoZW4gKG9yIHJlbWFpbmluZy1maWxlcyAoYW5kIGdpdC1zaG93LXVua25vd24gKG5vdCBmaWxlcykpKQorICAgICAgKHNldHEgcmVtYWluaW5nLWZpbGVzIChnaXQtcnVuLWxzLWZpbGVzLXdpdGgtZXhjbHVkZXMgZ2l0LXN0YXR1cyByZW1haW5pbmctZmlsZXMgJ3Vua25vd24gIi1vIikpKQorICAgICh3aGVuIChvciByZW1haW5pbmctZmlsZXMgKGFuZCBnaXQtc2hvdy1pZ25vcmVkIChub3QgZmlsZXMpKSkKKyAgICAgIChzZXRxIHJlbWFpbmluZy1maWxlcyAoZ2l0LXJ1bi1scy1maWxlcy13aXRoLWV4Y2x1ZGVzIGdpdC1zdGF0dXMgcmVtYWluaW5nLWZpbGVzICdpZ25vcmVkICItbyIgIi1pIikpKQorICAgICh1bmxlc3MgZmlsZXMKKyAgICAgIChzZXRxIHJlbWFpbmluZy1maWxlcyAoZ2l0LWdldC1maWxlbmFtZXMgKGV3b2MtY29sbGVjdCBnaXQtc3RhdHVzICMnZ2l0LWZpbGVpbmZvLT5uZWVkcy11cGRhdGUpKSkpCisgICAgKHdoZW4gcmVtYWluaW5nLWZpbGVzCisgICAgICAoc2V0cSByZW1haW5pbmctZmlsZXMgKGdpdC1ydW4tbHMtZmlsZXMtY2FjaGVkIGdpdC1zdGF0dXMgcmVtYWluaW5nLWZpbGVzICd1cHRvZGF0ZSkpKQorICAgIChnaXQtc2V0LWZpbGVuYW1lcy1zdGF0ZSBnaXQtc3RhdHVzIHJlbWFpbmluZy1maWxlcyBuaWwpCisgICAgKHdoZW4gbWFyay1maWxlcyAoZ2l0LW1hcmstZmlsZXMgZ2l0LXN0YXR1cyBmaWxlcykpCisgICAgKGdpdC1yZWZyZXNoLWZpbGVzKQorICAgIChnaXQtcmVmcmVzaC1ld29jLWhmIGdpdC1zdGF0dXMpKSkKKworKGRlZnVuIGdpdC1tYXJrLWZpbGVzIChzdGF0dXMgZmlsZXMpCisgICJNYXJrIGFsbCB0aGUgc3BlY2lmaWVkIEZJTEVTLCBhbmQgdW5tYXJrIHRoZSBvdGhlcnMuIgorICAobGV0ICgoZmlsZSAoYW5kIGZpbGVzIChwb3AgZmlsZXMpKSkKKyAgICAgICAgKG5vZGUgKGV3b2MtbnRoIHN0YXR1cyAwKSkpCisgICAgKHdoaWxlIG5vZGUKKyAgICAgIChsZXQgKChpbmZvIChld29jLWRhdGEgbm9kZSkpKQorICAgICAgICAoaWYgKGFuZCBmaWxlIChzdHJpbmctZXF1YWwgKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSBmaWxlKSkKKyAgICAgICAgICAgIChwcm9nbgorICAgICAgICAgICAgICAodW5sZXNzIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKQorICAgICAgICAgICAgICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSB0KQorICAgICAgICAgICAgICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm5lZWRzLXJlZnJlc2ggaW5mbykgdCkpCisgICAgICAgICAgICAgIChzZXRxIGZpbGUgKHBvcCBmaWxlcykpCisgICAgICAgICAgICAgIChzZXRxIG5vZGUgKGV3b2MtbmV4dCBzdGF0dXMgbm9kZSkpKQorICAgICAgICAgICh3aGVuIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKQorICAgICAgICAgICAgKHNldGYgKGdpdC1maWxlaW5mby0+bWFya2VkIGluZm8pIG5pbCkKKyAgICAgICAgICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm5lZWRzLXJlZnJlc2ggaW5mbykgdCkpCisgICAgICAgICAgKGlmIChhbmQgZmlsZSAoc3RyaW5nLWxlc3NwIGZpbGUgKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkpCisgICAgICAgICAgICAgIChzZXRxIGZpbGUgKHBvcCBmaWxlcykpCisgICAgICAgICAgICAoc2V0cSBub2RlIChld29jLW5leHQgc3RhdHVzIG5vZGUpKSkpKSkpKQorCisoZGVmdW4gZ2l0LW1hcmtlZC1maWxlcyAoKQorICAiUmV0dXJuIGEgbGlzdCBvZiBhbGwgbWFya2VkIGZpbGVzLCBvciBpZiBub25lIGEgbGlzdCBjb250YWluaW5nIGp1c3QgdGhlIGZpbGUgYXQgY3Vyc29yIHBvc2l0aW9uLiIKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAob3IgKGV3b2MtY29sbGVjdCBnaXQtc3RhdHVzIChsYW1iZGEgKGluZm8pIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSkpCisgICAgICAobGlzdCAoZXdvYy1kYXRhIChld29jLWxvY2F0ZSBnaXQtc3RhdHVzKSkpKSkKKworKGRlZnVuIGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgKCZyZXN0IHN0YXRlcykKKyAgIlJldHVybiBhIHNvcnRlZCBsaXN0IG9mIG1hcmtlZCBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgc3BlY2lmaWVkIHN0YXRlcy4iCisgIChsZXQgKChmaWxlcyAoZ2l0LW1hcmtlZC1maWxlcykpCisgICAgICAgIHJlc3VsdCkKKyAgICAoZG9saXN0IChpbmZvIGZpbGVzKQorICAgICAgKHdoZW4gKG1lbXEgKGdpdC1maWxlaW5mby0+c3RhdGUgaW5mbykgc3RhdGVzKQorICAgICAgICAocHVzaCBpbmZvIHJlc3VsdCkpKQorICAgIChucmV2ZXJzZSByZXN1bHQpKSkKKworKGRlZnVuIGdpdC1yZWZyZXNoLWZpbGVzICgpCisgICJSZWZyZXNoIGFsbCBmaWxlcyB0aGF0IG5lZWQgaXQgYW5kIGNsZWFyIHRoZSBuZWVkcy1yZWZyZXNoIGZsYWcuIgorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChld29jLW1hcAorICAgKGxhbWJkYSAoaW5mbykKKyAgICAgKGxldCAoKHJlZnJlc2ggKGdpdC1maWxlaW5mby0+bmVlZHMtcmVmcmVzaCBpbmZvKSkpCisgICAgICAgKHNldGYgKGdpdC1maWxlaW5mby0+bmVlZHMtcmVmcmVzaCBpbmZvKSBuaWwpCisgICAgICAgcmVmcmVzaCkpCisgICBnaXQtc3RhdHVzKQorICA7IG1vdmUgYmFjayB0byBnb2FsIGNvbHVtbgorICAod2hlbiBnb2FsLWNvbHVtbiAobW92ZS10by1jb2x1bW4gZ29hbC1jb2x1bW4pKSkKKworKGRlZnVuIGdpdC1yZWZyZXNoLWV3b2MtaGYgKHN0YXR1cykKKyAgIlJlZnJlc2ggdGhlIGV3b2MgaGVhZGVyIGFuZCBmb290ZXIuIgorICAobGV0ICgoYnJhbmNoIChnaXQtc3ltYm9saWMtcmVmICJIRUFEIikpCisgICAgICAgIChoZWFkIChpZiAoZ2l0LWVtcHR5LWRiLXApICJOb3RoaW5nIGNvbW1pdHRlZCB5ZXQiCisgICAgICAgICAgICAgICAgKGdpdC1nZXQtY29tbWl0LWRlc2NyaXB0aW9uICJIRUFEIikpKQorICAgICAgICAobWVyZ2UtaGVhZHMgKGdpdC1nZXQtbWVyZ2UtaGVhZHMpKSkKKyAgICAoZXdvYy1zZXQtaGYgc3RhdHVzCisgICAgICAgICAgICAgICAgIChmb3JtYXQgIkRpcmVjdG9yeTogICVzXG5CcmFuY2g6ICAgICAlc1xuSGVhZDogICAgICAgJXMlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIGJyYW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN0cmluZy1tYXRjaCAiXnJlZnMvaGVhZHMvIiBicmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Vic3RyaW5nIGJyYW5jaCAobWF0Y2gtZW5kIDApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJub25lIChkZXRhY2hlZCBIRUFEKSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBtZXJnZS1oZWFkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0ICJcbk1lcmdpbmc6ICAgICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwY29uY2F0IChsYW1iZGEgKHN0cikgKGdpdC1nZXQtY29tbWl0LWRlc2NyaXB0aW9uIHN0cikpIG1lcmdlLWhlYWRzICJcbiAgICAgICAgICAgICIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpKQorICAgICAgICAgICAgICAgICAoaWYgKGV3b2MtbnRoIHN0YXR1cyAwKSAiIiAiICAgIE5vIGNoYW5nZXMuIikpKSkKKworKGRlZnVuIGdpdC1nZXQtZmlsZW5hbWVzIChmaWxlcykKKyAgKG1hcGNhciAobGFtYmRhIChpbmZvKSAoZ2l0LWZpbGVpbmZvLT5uYW1lIGluZm8pKSBmaWxlcykpCisKKyhkZWZ1biBnaXQtdXBkYXRlLWluZGV4IChpbmRleC1maWxlIGZpbGVzKQorICAiUnVuIGdpdC11cGRhdGUtaW5kZXggb24gYSBsaXN0IG9mIGZpbGVzLiIKKyAgKGxldCAoKHByb2Nlc3MtZW52aXJvbm1lbnQgKGFwcGVuZCAoYW5kIGluZGV4LWZpbGUgKGxpc3QgKGNvbmNhdCAiR0lUX0lOREVYX0ZJTEU9IiBpbmRleC1maWxlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy1lbnZpcm9ubWVudCkpCisgICAgICAgIGFkZGVkIGRlbGV0ZWQgbW9kaWZpZWQpCisgICAgKGRvbGlzdCAoaW5mbyBmaWxlcykKKyAgICAgIChjYXNlIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pCisgICAgICAgICgnYWRkZWQgKHB1c2ggaW5mbyBhZGRlZCkpCisgICAgICAgICgnZGVsZXRlZCAocHVzaCBpbmZvIGRlbGV0ZWQpKQorICAgICAgICAoJ21vZGlmaWVkIChwdXNoIGluZm8gbW9kaWZpZWQpKSkpCisgICAgKGFuZAorICAgICAob3IgKG5vdCBhZGRlZCkgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtaW5kZXgiICItLWFkZCIgIi0tIiAoZ2l0LWdldC1maWxlbmFtZXMgYWRkZWQpKSkKKyAgICAgKG9yIChub3QgZGVsZXRlZCkgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtaW5kZXgiICItLXJlbW92ZSIgIi0tIiAoZ2l0LWdldC1maWxlbmFtZXMgZGVsZXRlZCkpKQorICAgICAob3IgKG5vdCBtb2RpZmllZCkgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtaW5kZXgiICItLSIgKGdpdC1nZXQtZmlsZW5hbWVzIG1vZGlmaWVkKSkpKSkpCisKKyhkZWZ1biBnaXQtcnVuLXByZS1jb21taXQtaG9vayAoKQorICAiUnVuIHRoZSBwcmUtY29tbWl0IGhvb2sgaWYgYW55LiIKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0ICgoZmlsZXMgKGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgJ2FkZGVkICdkZWxldGVkICdtb2RpZmllZCkpKQorICAgIChvciAobm90IGZpbGVzKQorICAgICAgICAobm90IChmaWxlLWV4ZWN1dGFibGUtcCAiLmdpdC9ob29rcy9wcmUtY29tbWl0IikpCisgICAgICAgIChsZXQgKChpbmRleC1maWxlIChtYWtlLXRlbXAtZmlsZSAiZ2l0aWR4IikpKQorICAgICAgICAgICh1bndpbmQtcHJvdGVjdAorICAgICAgICAgICAgKGxldCAoKGhlYWQtdHJlZSAodW5sZXNzIChnaXQtZW1wdHktZGItcCkgKGdpdC1yZXYtcGFyc2UgIkhFQURee3RyZWV9IikpKSkKKyAgICAgICAgICAgICAgKGdpdC1yZWFkLXRyZWUgaGVhZC10cmVlIGluZGV4LWZpbGUpCisgICAgICAgICAgICAgIChnaXQtdXBkYXRlLWluZGV4IGluZGV4LWZpbGUgZmlsZXMpCisgICAgICAgICAgICAgIChnaXQtcnVuLWhvb2sgInByZS1jb21taXQiIGAoKCJHSVRfSU5ERVhfRklMRSIgLiAsaW5kZXgtZmlsZSkpKSkKKyAgICAgICAgICAoZGVsZXRlLWZpbGUgaW5kZXgtZmlsZSkpKSkpKQorCisoZGVmdW4gZ2l0LWRvLWNvbW1pdCAoKQorICAiUGVyZm9ybSB0aGUgYWN0dWFsIGNvbW1pdCB1c2luZyB0aGUgY3VycmVudCBidWZmZXIgYXMgbG9nIG1lc3NhZ2UuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQgKChidWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKKyAgICAgICAgKGluZGV4LWZpbGUgKG1ha2UtdGVtcC1maWxlICJnaXRpZHgiKSkpCisgICAgKHdpdGgtY3VycmVudC1idWZmZXIgbG9nLWVkaXQtcGFyZW50LWJ1ZmZlcgorICAgICAgKGlmIChnaXQtbWFya2VkLWZpbGVzLXN0YXRlICd1bm1lcmdlZCkKKyAgICAgICAgICAobWVzc2FnZSAiWW91IGNhbm5vdCBjb21taXQgdW5tZXJnZWQgZmlsZXMsIHJlc29sdmUgdGhlbSBmaXJzdC4iKQorICAgICAgICAodW53aW5kLXByb3RlY3QKKyAgICAgICAgICAgIChsZXQgKChmaWxlcyAoZ2l0LW1hcmtlZC1maWxlcy1zdGF0ZSAnYWRkZWQgJ2RlbGV0ZWQgJ21vZGlmaWVkKSkKKyAgICAgICAgICAgICAgICAgIGhlYWQgdHJlZSBoZWFkLXRyZWUpCisgICAgICAgICAgICAgICh1bmxlc3MgKGdpdC1lbXB0eS1kYi1wKQorICAgICAgICAgICAgICAgIChzZXRxIGhlYWQgKGdpdC1yZXYtcGFyc2UgIkhFQUQiKQorICAgICAgICAgICAgICAgICAgICAgIGhlYWQtdHJlZSAoZ2l0LXJldi1wYXJzZSAiSEVBRF57dHJlZX0iKSkpCisgICAgICAgICAgICAgIChtZXNzYWdlICJSdW5uaW5nIGdpdCBjb21taXQuLi4iKQorICAgICAgICAgICAgICAod2hlbgorICAgICAgICAgICAgICAgICAgKGFuZAorICAgICAgICAgICAgICAgICAgIChnaXQtcmVhZC10cmVlIGhlYWQtdHJlZSBpbmRleC1maWxlKQorICAgICAgICAgICAgICAgICAgIChnaXQtdXBkYXRlLWluZGV4IG5pbCBmaWxlcykgICAgICAgICA7dXBkYXRlIGJvdGggdGhlIGRlZmF1bHQgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAoZ2l0LXVwZGF0ZS1pbmRleCBpbmRleC1maWxlIGZpbGVzKSAgO2FuZCB0aGUgdGVtcG9yYXJ5IG9uZQorICAgICAgICAgICAgICAgICAgIChzZXRxIHRyZWUgKGdpdC13cml0ZS10cmVlIGluZGV4LWZpbGUpKSkKKyAgICAgICAgICAgICAgICAoaWYgKG9yIChub3QgKHN0cmluZy1lcXVhbCB0cmVlIGhlYWQtdHJlZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAoeWVzLW9yLW5vLXAgIlRoZSB0cmVlIHdhcyBub3QgbW9kaWZpZWQsIGRvIHlvdSByZWFsbHkgd2FudCB0byBwZXJmb3JtIGFuIGVtcHR5IGNvbW1pdD8gIikpCisgICAgICAgICAgICAgICAgICAgIChsZXQgKChjb21taXQgKGdpdC1jb21taXQtdHJlZSBidWZmZXIgdHJlZSBoZWFkKSkpCisgICAgICAgICAgICAgICAgICAgICAgKHdoZW4gY29tbWl0CisgICAgICAgICAgICAgICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsIChkZWxldGUtZmlsZSAiLmdpdC9NRVJHRV9IRUFEIikgKGVycm9yIG5pbCkpCisgICAgICAgICAgICAgICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsIChkZWxldGUtZmlsZSAiLmdpdC9NRVJHRV9NU0ciKSAoZXJyb3IgbmlsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlciAoZXJhc2UtYnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyAoZ2l0LWdldC1maWxlbmFtZXMgZmlsZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgKGdpdC1jYWxsLXByb2Nlc3MgbmlsICJyZXJlcmUiKQorICAgICAgICAgICAgICAgICAgICAgICAgKGdpdC1jYWxsLXByb2Nlc3MgbmlsICJnYyIgIi0tYXV0byIpCisgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZSAiQ29tbWl0dGVkICVzLiIgY29tbWl0KQorICAgICAgICAgICAgICAgICAgICAgICAgKGdpdC1ydW4taG9vayAicG9zdC1jb21taXQiIG5pbCkpKQorICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UgIkNvbW1pdCBhYm9ydGVkLiIpKSkpCisgICAgICAgICAgKGRlbGV0ZS1maWxlIGluZGV4LWZpbGUpKSkpKSkKKworCis7Ozs7IEludGVyYWN0aXZlIGZ1bmN0aW9ucworOzs7OyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKGRlZnVuIGdpdC1tYXJrLWZpbGUgKCkKKyAgIk1hcmsgdGhlIGZpbGUgdGhhdCB0aGUgY3Vyc29yIGlzIG9uIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IG9uZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0KiAoKHBvcyAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpCisgICAgICAgICAoaW5mbyAoZXdvYy1kYXRhIHBvcykpKQorICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSB0KQorICAgIChld29jLWludmFsaWRhdGUgZ2l0LXN0YXR1cyBwb3MpCisgICAgKGV3b2MtZ290by1uZXh0IGdpdC1zdGF0dXMgMSkpKQorCisoZGVmdW4gZ2l0LXVubWFyay1maWxlICgpCisgICJVbm1hcmsgdGhlIGZpbGUgdGhhdCB0aGUgY3Vyc29yIGlzIG9uIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IG9uZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0KiAoKHBvcyAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpCisgICAgICAgICAoaW5mbyAoZXdvYy1kYXRhIHBvcykpKQorICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSBuaWwpCisgICAgKGV3b2MtaW52YWxpZGF0ZSBnaXQtc3RhdHVzIHBvcykKKyAgICAoZXdvYy1nb3RvLW5leHQgZ2l0LXN0YXR1cyAxKSkpCisKKyhkZWZ1biBnaXQtdW5tYXJrLWZpbGUtdXAgKCkKKyAgIlVubWFyayB0aGUgZmlsZSB0aGF0IHRoZSBjdXJzb3IgaXMgb24gYW5kIG1vdmUgdG8gdGhlIHByZXZpb3VzIG9uZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0KiAoKHBvcyAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpCisgICAgICAgICAoaW5mbyAoZXdvYy1kYXRhIHBvcykpKQorICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSBuaWwpCisgICAgKGV3b2MtaW52YWxpZGF0ZSBnaXQtc3RhdHVzIHBvcykKKyAgICAoZXdvYy1nb3RvLXByZXYgZ2l0LXN0YXR1cyAxKSkpCisKKyhkZWZ1biBnaXQtbWFyay1hbGwgKCkKKyAgIk1hcmsgYWxsIGZpbGVzLiIKKyAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChld29jLW1hcCAobGFtYmRhIChpbmZvKSAodW5sZXNzIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoZ2l0LWZpbGVpbmZvLT5tYXJrZWQgaW5mbykgdCkpKSBnaXQtc3RhdHVzKQorICA7IG1vdmUgYmFjayB0byBnb2FsIGNvbHVtbiBhZnRlciBpbnZhbGlkYXRlCisgICh3aGVuIGdvYWwtY29sdW1uIChtb3ZlLXRvLWNvbHVtbiBnb2FsLWNvbHVtbikpKQorCisoZGVmdW4gZ2l0LXVubWFyay1hbGwgKCkKKyAgIlVubWFyayBhbGwgZmlsZXMuIgorICAoaW50ZXJhY3RpdmUpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGV3b2MtbWFwIChsYW1iZGEgKGluZm8pICh3aGVuIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoZ2l0LWZpbGVpbmZvLT5tYXJrZWQgaW5mbykgbmlsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0KSkgZ2l0LXN0YXR1cykKKyAgOyBtb3ZlIGJhY2sgdG8gZ29hbCBjb2x1bW4gYWZ0ZXIgaW52YWxpZGF0ZQorICAod2hlbiBnb2FsLWNvbHVtbiAobW92ZS10by1jb2x1bW4gZ29hbC1jb2x1bW4pKSkKKworKGRlZnVuIGdpdC10b2dnbGUtYWxsLW1hcmtzICgpCisgICJUb2dnbGUgYWxsIGZpbGUgbWFya3MuIgorICAoaW50ZXJhY3RpdmUpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGV3b2MtbWFwIChsYW1iZGEgKGluZm8pIChzZXRmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSAobm90IChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSkpIHQpIGdpdC1zdGF0dXMpCisgIDsgbW92ZSBiYWNrIHRvIGdvYWwgY29sdW1uIGFmdGVyIGludmFsaWRhdGUKKyAgKHdoZW4gZ29hbC1jb2x1bW4gKG1vdmUtdG8tY29sdW1uIGdvYWwtY29sdW1uKSkpCisKKyhkZWZ1biBnaXQtbmV4dC1maWxlICgmb3B0aW9uYWwgbikKKyAgIk1vdmUgdGhlIHNlbGVjdGlvbiBkb3duIE4gZmlsZXMuIgorICAoaW50ZXJhY3RpdmUgInAiKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChld29jLWdvdG8tbmV4dCBnaXQtc3RhdHVzIG4pKQorCisoZGVmdW4gZ2l0LXByZXYtZmlsZSAoJm9wdGlvbmFsIG4pCisgICJNb3ZlIHRoZSBzZWxlY3Rpb24gdXAgTiBmaWxlcy4iCisgIChpbnRlcmFjdGl2ZSAicCIpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGV3b2MtZ290by1wcmV2IGdpdC1zdGF0dXMgbikpCisKKyhkZWZ1biBnaXQtbmV4dC11bm1lcmdlZC1maWxlICgmb3B0aW9uYWwgbikKKyAgIk1vdmUgdGhlIHNlbGVjdGlvbiBkb3duIE4gdW5tZXJnZWQgZmlsZXMuIgorICAoaW50ZXJhY3RpdmUgInAiKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChsZXQqICgobGFzdCAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpCisgICAgICAgICAobm9kZSAoZXdvYy1uZXh0IGdpdC1zdGF0dXMgbGFzdCkpKQorICAgICh3aGlsZSAoYW5kIG5vZGUgKD4gbiAwKSkKKyAgICAgICh3aGVuIChlcSAndW5tZXJnZWQgKGdpdC1maWxlaW5mby0+c3RhdGUgKGV3b2MtZGF0YSBub2RlKSkpCisgICAgICAgIChzZXRxIG4gKDEtIG4pKQorICAgICAgICAoc2V0cSBsYXN0IG5vZGUpKQorICAgICAgKHNldHEgbm9kZSAoZXdvYy1uZXh0IGdpdC1zdGF0dXMgbm9kZSkpKQorICAgIChld29jLWdvdG8tbm9kZSBnaXQtc3RhdHVzIGxhc3QpKSkKKworKGRlZnVuIGdpdC1wcmV2LXVubWVyZ2VkLWZpbGUgKCZvcHRpb25hbCBuKQorICAiTW92ZSB0aGUgc2VsZWN0aW9uIHVwIE4gdW5tZXJnZWQgZmlsZXMuIgorICAoaW50ZXJhY3RpdmUgInAiKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChsZXQqICgobGFzdCAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpCisgICAgICAgICAobm9kZSAoZXdvYy1wcmV2IGdpdC1zdGF0dXMgbGFzdCkpKQorICAgICh3aGlsZSAoYW5kIG5vZGUgKD4gbiAwKSkKKyAgICAgICh3aGVuIChlcSAndW5tZXJnZWQgKGdpdC1maWxlaW5mby0+c3RhdGUgKGV3b2MtZGF0YSBub2RlKSkpCisgICAgICAgIChzZXRxIG4gKDEtIG4pKQorICAgICAgICAoc2V0cSBsYXN0IG5vZGUpKQorICAgICAgKHNldHEgbm9kZSAoZXdvYy1wcmV2IGdpdC1zdGF0dXMgbm9kZSkpKQorICAgIChld29jLWdvdG8tbm9kZSBnaXQtc3RhdHVzIGxhc3QpKSkKKworKGRlZnVuIGdpdC1pbnNlcnQtZmlsZSAoZmlsZSkKKyAgIkluc2VydCBmaWxlKHMpIGludG8gdGhlIGdpdC1zdGF0dXMgYnVmZmVyLiIKKyAgKGludGVyYWN0aXZlICJmSW5zZXJ0IGZpbGU6ICIpCisgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyAobGlzdCAoZmlsZS1yZWxhdGl2ZS1uYW1lIGZpbGUpKSkpCisKKyhkZWZ1biBnaXQtYWRkLWZpbGUgKCkKKyAgIkFkZCBtYXJrZWQgZmlsZShzKSB0byB0aGUgaW5kZXggY2FjaGUuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQgKChmaWxlcyAoZ2l0LWdldC1maWxlbmFtZXMgKGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgJ3Vua25vd24gJ2lnbm9yZWQgJ3VubWVyZ2VkKSkpKQorICAgIDs7IEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZGlyZWN0b3JpZXMKKyAgICAodW5sZXNzIGZpbGVzCisgICAgICAocHVzaCAoZmlsZS1yZWxhdGl2ZS1uYW1lIChyZWFkLWZpbGUtbmFtZSAiRmlsZSB0byBhZGQ6ICIgbmlsIG5pbCB0KSkgZmlsZXMpKQorICAgICh3aGVuIChhcHBseSAnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtaW5kZXgiICItLWFkZCIgIi0tIiBmaWxlcykKKyAgICAgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyBmaWxlcykKKyAgICAgIChnaXQtc3VjY2Vzcy1tZXNzYWdlICJBZGRlZCIgZmlsZXMpKSkpCisKKyhkZWZ1biBnaXQtaWdub3JlLWZpbGUgKCkKKyAgIkFkZCBtYXJrZWQgZmlsZShzKSB0byB0aGUgaWdub3JlIGxpc3QuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQgKChmaWxlcyAoZ2l0LWdldC1maWxlbmFtZXMgKGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgJ3Vua25vd24pKSkpCisgICAgKHVubGVzcyBmaWxlcworICAgICAgKHB1c2ggKGZpbGUtcmVsYXRpdmUtbmFtZSAocmVhZC1maWxlLW5hbWUgIkZpbGUgdG8gaWdub3JlOiAiIG5pbCBuaWwgdCkpIGZpbGVzKSkKKyAgICAoZG9saXN0IChmIGZpbGVzKSAoZ2l0LWFwcGVuZC10by1pZ25vcmUgZikpCisgICAgKGdpdC11cGRhdGUtc3RhdHVzLWZpbGVzIGZpbGVzKQorICAgIChnaXQtc3VjY2Vzcy1tZXNzYWdlICJJZ25vcmVkIiBmaWxlcykpKQorCisoZGVmdW4gZ2l0LXJlbW92ZS1maWxlICgpCisgICJSZW1vdmUgdGhlIG1hcmtlZCBmaWxlKHMpLiIKKyAgKGludGVyYWN0aXZlKQorICAobGV0ICgoZmlsZXMgKGdpdC1nZXQtZmlsZW5hbWVzIChnaXQtbWFya2VkLWZpbGVzLXN0YXRlICdhZGRlZCAnbW9kaWZpZWQgJ3Vua25vd24gJ3VwdG9kYXRlICdpZ25vcmVkKSkpKQorICAgICh1bmxlc3MgZmlsZXMKKyAgICAgIChwdXNoIChmaWxlLXJlbGF0aXZlLW5hbWUgKHJlYWQtZmlsZS1uYW1lICJGaWxlIHRvIHJlbW92ZTogIiBuaWwgbmlsIHQpKSBmaWxlcykpCisgICAgKGlmICh5ZXMtb3Itbm8tcAorICAgICAgICAgKGlmIChjZHIgZmlsZXMpCisgICAgICAgICAgICAgKGZvcm1hdCAiUmVtb3ZlICVkIGZpbGVzPyAiIChsZW5ndGggZmlsZXMpKQorICAgICAgICAgICAoZm9ybWF0ICJSZW1vdmUgJXM/ICIgKGNhciBmaWxlcykpKSkKKyAgICAgICAgKHByb2duCisgICAgICAgICAgKGRvbGlzdCAobmFtZSBmaWxlcykKKyAgICAgICAgICAgIChpZ25vcmUtZXJyb3JzCisgICAgICAgICAgICAgIChpZiAoZmlsZS1kaXJlY3RvcnktcCBuYW1lKQorICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1kaXJlY3RvcnkgbmFtZSkKKyAgICAgICAgICAgICAgICAoZGVsZXRlLWZpbGUgbmFtZSkpKSkKKyAgICAgICAgICAod2hlbiAoYXBwbHkgJ2dpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAidXBkYXRlLWluZGV4IiAiLS1yZW1vdmUiICItLSIgZmlsZXMpCisgICAgICAgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMgZmlsZXMpCisgICAgICAgICAgICAoZ2l0LXN1Y2Nlc3MtbWVzc2FnZSAiUmVtb3ZlZCIgZmlsZXMpKSkKKyAgICAgIChtZXNzYWdlICJBYm9ydGluZyIpKSkpCisKKyhkZWZ1biBnaXQtcmV2ZXJ0LWZpbGUgKCkKKyAgIlJldmVydCBjaGFuZ2VzIHRvIHRoZSBtYXJrZWQgZmlsZShzKS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGxldCAoKGZpbGVzIChnaXQtbWFya2VkLWZpbGVzLXN0YXRlICdhZGRlZCAnZGVsZXRlZCAnbW9kaWZpZWQgJ3VubWVyZ2VkKSkKKyAgICAgICAgYWRkZWQgbW9kaWZpZWQpCisgICAgKHdoZW4gKGFuZCBmaWxlcworICAgICAgICAgICAgICAgKHllcy1vci1uby1wCisgICAgICAgICAgICAgICAgKGlmIChjZHIgZmlsZXMpCisgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgIlJldmVydCAlZCBmaWxlcz8gIiAobGVuZ3RoIGZpbGVzKSkKKyAgICAgICAgICAgICAgICAgIChmb3JtYXQgIlJldmVydCAlcz8gIiAoZ2l0LWZpbGVpbmZvLT5uYW1lIChjYXIgZmlsZXMpKSkpKSkKKyAgICAgIChkb2xpc3QgKGluZm8gZmlsZXMpCisgICAgICAgIChjYXNlIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pCisgICAgICAgICAgKCdhZGRlZCAocHVzaCAoZ2l0LWZpbGVpbmZvLT5uYW1lIGluZm8pIGFkZGVkKSkKKyAgICAgICAgICAoJ2RlbGV0ZWQgKHB1c2ggKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSBtb2RpZmllZCkpCisgICAgICAgICAgKCd1bm1lcmdlZCAocHVzaCAoZ2l0LWZpbGVpbmZvLT5uYW1lIGluZm8pIG1vZGlmaWVkKSkKKyAgICAgICAgICAoJ21vZGlmaWVkIChwdXNoIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbykgbW9kaWZpZWQpKSkpCisgICAgICA7OyBjaGVjayBpZiBhIGJ1ZmZlciBjb250YWlucyBvbmUgb2YgdGhlIGZpbGVzIGFuZCBpc24ndCBzYXZlZAorICAgICAgKGRvbGlzdCAoZmlsZSBtb2RpZmllZCkKKyAgICAgICAgKGxldCAoKGJ1ZmZlciAoZ2V0LWZpbGUtYnVmZmVyIGZpbGUpKSkKKyAgICAgICAgICAod2hlbiAoYW5kIGJ1ZmZlciAoYnVmZmVyLW1vZGlmaWVkLXAgYnVmZmVyKSkKKyAgICAgICAgICAgIChlcnJvciAiQnVmZmVyICVzIGlzIG1vZGlmaWVkLiBQbGVhc2Uga2lsbCBvciBzYXZlIG1vZGlmaWVkIGJ1ZmZlcnMgYmVmb3JlIHJldmVydGluZy4iIChidWZmZXItbmFtZSBidWZmZXIpKSkpKQorICAgICAgKGxldCAoKG9rIChhbmQKKyAgICAgICAgICAgICAgICAgKG9yIChub3QgYWRkZWQpCisgICAgICAgICAgICAgICAgICAgICAoYXBwbHkgJ2dpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAidXBkYXRlLWluZGV4IiAiLS1mb3JjZS1yZW1vdmUiICItLSIgYWRkZWQpKQorICAgICAgICAgICAgICAgICAob3IgKG5vdCBtb2RpZmllZCkKKyAgICAgICAgICAgICAgICAgICAgIChhcHBseSAnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJjaGVja291dCIgIkhFQUQiIG1vZGlmaWVkKSkpKQorICAgICAgICAgICAgKG5hbWVzIChnaXQtZ2V0LWZpbGVuYW1lcyBmaWxlcykpKQorICAgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMgbmFtZXMpCisgICAgICAgICh3aGVuIG9rCisgICAgICAgICAgKGRvbGlzdCAoZmlsZSBtb2RpZmllZCkKKyAgICAgICAgICAgIChsZXQgKChidWZmZXIgKGdldC1maWxlLWJ1ZmZlciBmaWxlKSkpCisgICAgICAgICAgICAgICh3aGVuIGJ1ZmZlciAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIgKHJldmVydC1idWZmZXIgdCB0IHQpKSkpKQorICAgICAgICAgIChnaXQtc3VjY2Vzcy1tZXNzYWdlICJSZXZlcnRlZCIgbmFtZXMpKSkpKSkKKworKGRlZnVuIGdpdC1yZW1vdmUtaGFuZGxlZCAoKQorICAiUmVtb3ZlIGhhbmRsZWQgZmlsZXMgZnJvbSB0aGUgc3RhdHVzIGxpc3QuIgorICAoaW50ZXJhY3RpdmUpCisgIChld29jLWZpbHRlciBnaXQtc3RhdHVzCisgICAgICAgICAgICAgICAobGFtYmRhIChpbmZvKQorICAgICAgICAgICAgICAgICAoY2FzZSAoZ2l0LWZpbGVpbmZvLT5zdGF0ZSBpbmZvKQorICAgICAgICAgICAgICAgICAgICgnaWdub3JlZCBnaXQtc2hvdy1pZ25vcmVkKQorICAgICAgICAgICAgICAgICAgICgndXB0b2RhdGUgZ2l0LXNob3ctdXB0b2RhdGUpCisgICAgICAgICAgICAgICAgICAgKCd1bmtub3duIGdpdC1zaG93LXVua25vd24pCisgICAgICAgICAgICAgICAgICAgKHQgdCkpKSkKKyAgKHVubGVzcyAoZXdvYy1udGggZ2l0LXN0YXR1cyAwKSAgOyByZWZyZXNoIGhlYWRlciBpZiBsaXN0IGlzIGVtcHR5CisgICAgKGdpdC1yZWZyZXNoLWV3b2MtaGYgZ2l0LXN0YXR1cykpKQorCisoZGVmdW4gZ2l0LXRvZ2dsZS1zaG93LXVwdG9kYXRlICgpCisgICJUb29nbGUgdGhlIG9wdGlvbiBmb3Igc2hvd2luZyB1cC10by1kYXRlIGZpbGVzLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKHNldHEgZ2l0LXNob3ctdXB0b2RhdGUgKG5vdCBnaXQtc2hvdy11cHRvZGF0ZSkpCisgICAgICAoZ2l0LXJlZnJlc2gtc3RhdHVzKQorICAgIChnaXQtcmVtb3ZlLWhhbmRsZWQpKSkKKworKGRlZnVuIGdpdC10b2dnbGUtc2hvdy1pZ25vcmVkICgpCisgICJUb29nbGUgdGhlIG9wdGlvbiBmb3Igc2hvd2luZyBpZ25vcmVkIGZpbGVzLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKHNldHEgZ2l0LXNob3ctaWdub3JlZCAobm90IGdpdC1zaG93LWlnbm9yZWQpKQorICAgICAgKHByb2duCisgICAgICAgIChtZXNzYWdlICJJbnNlcnRpbmcgaWdub3JlZCBmaWxlcy4uLiIpCisgICAgICAgIChnaXQtcnVuLWxzLWZpbGVzLXdpdGgtZXhjbHVkZXMgZ2l0LXN0YXR1cyBuaWwgJ2lnbm9yZWQgIi1vIiAiLWkiKQorICAgICAgICAoZ2l0LXJlZnJlc2gtZmlsZXMpCisgICAgICAgIChnaXQtcmVmcmVzaC1ld29jLWhmIGdpdC1zdGF0dXMpCisgICAgICAgIChtZXNzYWdlICJJbnNlcnRpbmcgaWdub3JlZCBmaWxlcy4uLmRvbmUiKSkKKyAgICAoZ2l0LXJlbW92ZS1oYW5kbGVkKSkpCisKKyhkZWZ1biBnaXQtdG9nZ2xlLXNob3ctdW5rbm93biAoKQorICAiVG9vZ2xlIHRoZSBvcHRpb24gZm9yIHNob3dpbmcgdW5rbm93biBmaWxlcy4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGlmIChzZXRxIGdpdC1zaG93LXVua25vd24gKG5vdCBnaXQtc2hvdy11bmtub3duKSkKKyAgICAgIChwcm9nbgorICAgICAgICAobWVzc2FnZSAiSW5zZXJ0aW5nIHVua25vd24gZmlsZXMuLi4iKQorICAgICAgICAoZ2l0LXJ1bi1scy1maWxlcy13aXRoLWV4Y2x1ZGVzIGdpdC1zdGF0dXMgbmlsICd1bmtub3duICItbyIpCisgICAgICAgIChnaXQtcmVmcmVzaC1maWxlcykKKyAgICAgICAgKGdpdC1yZWZyZXNoLWV3b2MtaGYgZ2l0LXN0YXR1cykKKyAgICAgICAgKG1lc3NhZ2UgIkluc2VydGluZyB1bmtub3duIGZpbGVzLi4uZG9uZSIpKQorICAgIChnaXQtcmVtb3ZlLWhhbmRsZWQpKSkKKworKGRlZnVuIGdpdC1leHBhbmQtZGlyZWN0b3J5IChpbmZvKQorICAiRXhwYW5kIHRoZSBkaXJlY3RvcnkgcmVwcmVzZW50ZWQgYnkgSU5GTyB0byBsaXN0IGl0cyBmaWxlcy4iCisgICh3aGVuIChlcSAobHNoIChnaXQtZmlsZWluZm8tPm5ldy1wZXJtIGluZm8pIC05KSA/XDExMCkKKyAgICAobGV0ICgoZGlyIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbykpKQorICAgICAgKGdpdC1zZXQtZmlsZW5hbWVzLXN0YXRlIGdpdC1zdGF0dXMgKGxpc3QgZGlyKSBuaWwpCisgICAgICAoZ2l0LXJ1bi1scy1maWxlcy13aXRoLWV4Y2x1ZGVzIGdpdC1zdGF0dXMgKGxpc3QgKGNvbmNhdCBkaXIgIi8iKSkgJ3Vua25vd24gIi1vIikKKyAgICAgIChnaXQtcmVmcmVzaC1maWxlcykKKyAgICAgIChnaXQtcmVmcmVzaC1ld29jLWhmIGdpdC1zdGF0dXMpCisgICAgICB0KSkpCisKKyhkZWZ1biBnaXQtc2V0dXAtZGlmZi1idWZmZXIgKGJ1ZmZlcikKKyAgIlNldHVwIGEgYnVmZmVyIGZvciBkaXNwbGF5aW5nIGEgZGlmZi4iCisgIChsZXQgKChkaXIgZGVmYXVsdC1kaXJlY3RvcnkpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgorICAgICAgKGRpZmYtbW9kZSkKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAoc2V0cSBkZWZhdWx0LWRpcmVjdG9yeSBkaXIpCisgICAgICAoc2V0cSBidWZmZXItcmVhZC1vbmx5IHQpKSkKKyAgKGRpc3BsYXktYnVmZmVyIGJ1ZmZlcikKKyAgOyBzaHJpbmsgd2luZG93IG9ubHkgaWYgaXQgZGlzcGxheXMgdGhlIHN0YXR1cyBidWZmZXIKKyAgKHdoZW4gKGVxICh3aW5kb3ctYnVmZmVyKSAoY3VycmVudC1idWZmZXIpKQorICAgIChzaHJpbmstd2luZG93LWlmLWxhcmdlci10aGFuLWJ1ZmZlcikpKQorCisoZGVmdW4gZ2l0LWRpZmYtZmlsZSAoKQorICAiRGlmZiB0aGUgbWFya2VkIGZpbGUocykgYWdhaW5zdCBIRUFELiIKKyAgKGludGVyYWN0aXZlKQorICAobGV0ICgoZmlsZXMgKGdpdC1tYXJrZWQtZmlsZXMpKSkKKyAgICAoZ2l0LXNldHVwLWRpZmYtYnVmZmVyCisgICAgIChhcHBseSAjJ2dpdC1ydW4tY29tbWFuZC1idWZmZXIgIipnaXQtZGlmZioiICJkaWZmLWluZGV4IiAiLXAiICItTSIgIkhFQUQiICItLSIgKGdpdC1nZXQtZmlsZW5hbWVzIGZpbGVzKSkpKSkKKworKGRlZnVuIGdpdC1kaWZmLWZpbGUtbWVyZ2UtaGVhZCAoYXJnKQorICAiRGlmZiB0aGUgbWFya2VkIGZpbGUocykgYWdhaW5zdCB0aGUgZmlyc3QgbWVyZ2UgaGVhZCAob3IgdGhlIG50aCBvbmUgd2l0aCBhIG51bWVyaWMgcHJlZml4KS4iCisgIChpbnRlcmFjdGl2ZSAicCIpCisgIChsZXQgKChmaWxlcyAoZ2l0LW1hcmtlZC1maWxlcykpCisgICAgICAgIChtZXJnZS1oZWFkcyAoZ2l0LWdldC1tZXJnZS1oZWFkcykpKQorICAgICh1bmxlc3MgbWVyZ2UtaGVhZHMgKGVycm9yICJObyBtZXJnZSBpbiBwcm9ncmVzcyIpKQorICAgIChnaXQtc2V0dXAtZGlmZi1idWZmZXIKKyAgICAgKGFwcGx5ICMnZ2l0LXJ1bi1jb21tYW5kLWJ1ZmZlciAiKmdpdC1kaWZmKiIgImRpZmYtaW5kZXgiICItcCIgIi1NIgorICAgICAgICAgICAgKG9yIChudGggKDEtIGFyZykgbWVyZ2UtaGVhZHMpICJIRUFEIikgIi0tIiAoZ2l0LWdldC1maWxlbmFtZXMgZmlsZXMpKSkpKQorCisoZGVmdW4gZ2l0LWRpZmYtdW5tZXJnZWQtZmlsZSAoc3RhZ2UpCisgICJEaWZmIHRoZSBtYXJrZWQgdW5tZXJnZWQgZmlsZShzKSBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgc3RhZ2UuIgorICAobGV0ICgoZmlsZXMgKGdpdC1tYXJrZWQtZmlsZXMpKSkKKyAgICAoZ2l0LXNldHVwLWRpZmYtYnVmZmVyCisgICAgIChhcHBseSAjJ2dpdC1ydW4tY29tbWFuZC1idWZmZXIgIipnaXQtZGlmZioiICJkaWZmLWZpbGVzIiAiLXAiIHN0YWdlICItLSIgKGdpdC1nZXQtZmlsZW5hbWVzIGZpbGVzKSkpKSkKKworKGRlZnVuIGdpdC1kaWZmLWZpbGUtYmFzZSAoKQorICAiRGlmZiB0aGUgbWFya2VkIHVubWVyZ2VkIGZpbGUocykgYWdhaW5zdCB0aGUgY29tbW9uIGJhc2UgZmlsZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGdpdC1kaWZmLXVubWVyZ2VkLWZpbGUgIi0xIikpCisKKyhkZWZ1biBnaXQtZGlmZi1maWxlLW1pbmUgKCkKKyAgIkRpZmYgdGhlIG1hcmtlZCB1bm1lcmdlZCBmaWxlKHMpIGFnYWluc3QgbXkgcHJlLW1lcmdlIHZlcnNpb24uIgorICAoaW50ZXJhY3RpdmUpCisgIChnaXQtZGlmZi11bm1lcmdlZC1maWxlICItMiIpKQorCisoZGVmdW4gZ2l0LWRpZmYtZmlsZS1vdGhlciAoKQorICAiRGlmZiB0aGUgbWFya2VkIHVubWVyZ2VkIGZpbGUocykgYWdhaW5zdCB0aGUgb3RoZXIncyBwcmUtbWVyZ2UgdmVyc2lvbi4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGdpdC1kaWZmLXVubWVyZ2VkLWZpbGUgIi0zIikpCisKKyhkZWZ1biBnaXQtZGlmZi1maWxlLWNvbWJpbmVkICgpCisgICJEbyBhIGNvbWJpbmVkIGRpZmYgb2YgdGhlIG1hcmtlZCB1bm1lcmdlZCBmaWxlKHMpLiIKKyAgKGludGVyYWN0aXZlKQorICAoZ2l0LWRpZmYtdW5tZXJnZWQtZmlsZSAiLWMiKSkKKworKGRlZnVuIGdpdC1kaWZmLWZpbGUtaWRpZmYgKCkKKyAgIlBlcmZvcm0gYW4gaW50ZXJhY3RpdmUgZGlmZiBvbiB0aGUgY3VycmVudCBmaWxlLiIKKyAgKGludGVyYWN0aXZlKQorICAobGV0ICgoZmlsZXMgKGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgJ2FkZGVkICdkZWxldGVkICdtb2RpZmllZCkpKQorICAgICh1bmxlc3MgKGVxIDEgKGxlbmd0aCBmaWxlcykpCisgICAgICAoZXJyb3IgIkNhbm5vdCBwZXJmb3JtIGFuIGludGVyYWN0aXZlIGRpZmYgb24gbXVsdGlwbGUgZmlsZXMuIikpCisgICAgKGxldCogKChmaWxlbmFtZSAoY2FyIChnaXQtZ2V0LWZpbGVuYW1lcyBmaWxlcykpKQorICAgICAgICAgICAoYnVmZjEgKGZpbmQtZmlsZS1ub3NlbGVjdCBmaWxlbmFtZSkpCisgICAgICAgICAgIChidWZmMiAoZ2l0LXJ1bi1jb21tYW5kLWJ1ZmZlciAoY29uY2F0IGZpbGVuYW1lICIufkhFQUR+IikgImNhdC1maWxlIiAiYmxvYiIgKGNvbmNhdCAiSEVBRDoiIGZpbGVuYW1lKSkpKQorICAgICAgKGVkaWZmLWJ1ZmZlcnMgYnVmZjEgYnVmZjIpKSkpCisKKyhkZWZ1biBnaXQtbG9nLWZpbGUgKCkKKyAgIkRpc3BsYXkgYSBsb2cgb2YgY2hhbmdlcyB0byB0aGUgbWFya2VkIGZpbGUocykuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQqICgoZmlsZXMgKGdpdC1tYXJrZWQtZmlsZXMpKQorICAgICAgICAgKGNvZGluZy1zeXN0ZW0tZm9yLXJlYWQgZ2l0LWNvbW1pdHMtY29kaW5nLXN5c3RlbSkKKyAgICAgICAgIChidWZmZXIgKGFwcGx5ICMnZ2l0LXJ1bi1jb21tYW5kLWJ1ZmZlciAiKmdpdC1sb2cqIiAicmV2LWxpc3QiICItLXByZXR0eSIgIkhFQUQiICItLSIgKGdpdC1nZXQtZmlsZW5hbWVzIGZpbGVzKSkpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgorICAgICAgOyAoZ2l0LWxvZy1tb2RlKSAgRklYTUU6IGltcGxlbWVudCBsb2cgbW9kZQorICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgIChzZXRxIGJ1ZmZlci1yZWFkLW9ubHkgdCkpCisgICAgKGRpc3BsYXktYnVmZmVyIGJ1ZmZlcikpKQorCisoZGVmdW4gZ2l0LWxvZy1lZGl0LWZpbGVzICgpCisgICJSZXR1cm4gYSBsaXN0IG9mIG1hcmtlZCBmaWxlcyBmb3IgdXNlIGluIHRoZSBsb2ctZWRpdCBidWZmZXIuIgorICAod2l0aC1jdXJyZW50LWJ1ZmZlciBsb2ctZWRpdC1wYXJlbnQtYnVmZmVyCisgICAgKGdpdC1nZXQtZmlsZW5hbWVzIChnaXQtbWFya2VkLWZpbGVzLXN0YXRlICdhZGRlZCAnZGVsZXRlZCAnbW9kaWZpZWQpKSkpCisKKyhkZWZ1biBnaXQtbG9nLWVkaXQtZGlmZiAoKQorICAiUnVuIGEgZGlmZiBvZiB0aGUgY3VycmVudCBmaWxlcyBiZWluZyBjb21taXR0ZWQgZnJvbSBhIGxvZy1lZGl0IGJ1ZmZlci4iCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGxvZy1lZGl0LXBhcmVudC1idWZmZXIKKyAgICAoZ2l0LWRpZmYtZmlsZSkpKQorCisoZGVmdW4gZ2l0LWFwcGVuZC1zaWduLW9mZiAobmFtZSBlbWFpbCkKKyAgIkFwcGVuZCBhIFNpZ25lZC1vZmYtYnkgZW50cnkgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLCBhdm9pZGluZyBkdXBsaWNhdGVzLiIKKyAgKGxldCAoKHNpZ24tb2ZmIChmb3JtYXQgIlNpZ25lZC1vZmYtYnk6ICVzIDwlcz4iIG5hbWUgZW1haWwpKQorICAgICAgICAoY2FzZS1mb2xkLXNlYXJjaCB0KSkKKyAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICh1bmxlc3MgKHJlLXNlYXJjaC1mb3J3YXJkIChjb25jYXQgIl4iIChyZWdleHAtcXVvdGUgc2lnbi1vZmYpKSBuaWwgdCkKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAodW5sZXNzIChyZS1zZWFyY2gtZm9yd2FyZCAiXlNpZ25lZC1vZmYtYnk6ICIgbmlsIHQpCisgICAgICAgIChzZXRxIHNpZ24tb2ZmIChjb25jYXQgIlxuIiBzaWduLW9mZikpKQorICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkKKyAgICAgIChpbnNlcnQgc2lnbi1vZmYgIlxuIikpKSkKKworKGRlZnVuIGdpdC1zZXR1cC1sb2ctYnVmZmVyIChidWZmZXIgJm9wdGlvbmFsIG1lcmdlLWhlYWRzIGF1dGhvci1uYW1lIGF1dGhvci1lbWFpbCBzdWJqZWN0IGRhdGUgbXNnKQorICAiU2V0dXAgdGhlIGxvZyBidWZmZXIgZm9yIGEgY29tbWl0LiIKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0ICgoZGlyIGRlZmF1bHQtZGlyZWN0b3J5KQorICAgICAgICAoY29tbWl0dGVyLW5hbWUgKGdpdC1nZXQtY29tbWl0dGVyLW5hbWUpKQorICAgICAgICAoY29tbWl0dGVyLWVtYWlsIChnaXQtZ2V0LWNvbW1pdHRlci1lbWFpbCkpCisgICAgICAgIChzaWduLW9mZiBnaXQtYXBwZW5kLXNpZ25lZC1vZmYtYnkpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgorICAgICAgKGNkIGRpcikKKyAgICAgIChlcmFzZS1idWZmZXIpCisgICAgICAoaW5zZXJ0CisgICAgICAgKHByb3BlcnRpemUKKyAgICAgICAgKGZvcm1hdCAiQXV0aG9yOiAlcyA8JXM+XG4lcyVzIgorICAgICAgICAgICAgICAgIChvciBhdXRob3ItbmFtZSBjb21taXR0ZXItbmFtZSkKKyAgICAgICAgICAgICAgICAob3IgYXV0aG9yLWVtYWlsIGNvbW1pdHRlci1lbWFpbCkKKyAgICAgICAgICAgICAgICAoaWYgZGF0ZSAoZm9ybWF0ICJEYXRlOiAlc1xuIiBkYXRlKSAiIikKKyAgICAgICAgICAgICAgICAoaWYgbWVyZ2UtaGVhZHMKKyAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiTWVyZ2U6ICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNvbmNhdCAnaWRlbnRpdHkgbWVyZ2UtaGVhZHMgIiAiKSkKKyAgICAgICAgICAgICAgICAgICIiKSkKKyAgICAgICAgJ2ZhY2UgJ2dpdC1oZWFkZXItZmFjZSkKKyAgICAgICAocHJvcGVydGl6ZSBnaXQtbG9nLW1zZy1zZXBhcmF0b3IgJ2ZhY2UgJ2dpdC1zZXBhcmF0b3ItZmFjZSkKKyAgICAgICAiXG4iKQorICAgICAgKHdoZW4gc3ViamVjdCAoaW5zZXJ0IHN1YmplY3QgIlxuXG4iKSkKKyAgICAgIChjb25kIChtc2cgKGluc2VydCBtc2cgIlxuIikpCisgICAgICAgICAgICAoKGZpbGUtcmVhZGFibGUtcCAiLmdpdC9yZWJhc2UtYXBwbHkvbXNnIikKKyAgICAgICAgICAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMgIi5naXQvcmViYXNlLWFwcGx5L21zZyIpKQorICAgICAgICAgICAgKChmaWxlLXJlYWRhYmxlLXAgIi5naXQvTUVSR0VfTVNHIikKKyAgICAgICAgICAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMgIi5naXQvTUVSR0VfTVNHIikpKQorICAgICAgOyBkZWxldGUgZW1wdHkgbGluZXMgYXQgZW5kCisgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkICJcbitcXCciIG5pbCB0KQorICAgICAgICAocmVwbGFjZS1tYXRjaCAiXG4iIHQgdCkpCisgICAgICAod2hlbiBzaWduLW9mZiAoZ2l0LWFwcGVuZC1zaWduLW9mZiBjb21taXR0ZXItbmFtZSBjb21taXR0ZXItZW1haWwpKSkKKyAgICBidWZmZXIpKQorCisoZGVmaW5lLWRlcml2ZWQtbW9kZSBnaXQtbG9nLWVkaXQtbW9kZSBsb2ctZWRpdC1tb2RlICJHaXQtTG9nLUVkaXQiCisgICJNYWpvciBtb2RlIGZvciBlZGl0aW5nIGdpdCBsb2cgbWVzc2FnZXMuCisKK1NldCB1cCBnaXQtc3BlY2lmaWMgYGZvbnQtbG9jay1rZXl3b3JkcycgZm9yIGBsb2ctZWRpdC1tb2RlJy4iCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZvbnQtbG9jay1kZWZhdWx0cykKKyAgICAgICAnKGdpdC1sb2ctZWRpdC1mb250LWxvY2sta2V5d29yZHMgdCB0KSkpCisKKyhkZWZ1biBnaXQtY29tbWl0LWZpbGUgKCkKKyAgIkNvbW1pdCB0aGUgbWFya2VkIGZpbGUocyksIGFza2luZyBmb3IgYSBjb21taXQgbWVzc2FnZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAod2hlbiAoZ2l0LXJ1bi1wcmUtY29tbWl0LWhvb2spCisgICAgKGxldCAoKGJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIipnaXQtY29tbWl0KiIpKQorICAgICAgICAgIChjb2Rpbmctc3lzdGVtIChnaXQtZ2V0LWNvbW1pdHMtY29kaW5nLXN5c3RlbSkpCisgICAgICAgICAgYXV0aG9yLW5hbWUgYXV0aG9yLWVtYWlsIHN1YmplY3QgZGF0ZSkKKyAgICAgICh3aGVuIChlcSAwIChidWZmZXItc2l6ZSBidWZmZXIpKQorICAgICAgICAod2hlbiAoZmlsZS1yZWFkYWJsZS1wICIuZ2l0L3JlYmFzZS1hcHBseS9pbmZvIikKKyAgICAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAgICAgKGluc2VydC1maWxlLWNvbnRlbnRzICIuZ2l0L3JlYmFzZS1hcHBseS9pbmZvIikKKyAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5BdXRob3I6IFxcKC4qXFwpXG5FbWFpbDogXFwoLipcXCkkIiBuaWwgdCkKKyAgICAgICAgICAgICAgKHNldHEgYXV0aG9yLW5hbWUgKG1hdGNoLXN0cmluZyAxKSkKKyAgICAgICAgICAgICAgKHNldHEgYXV0aG9yLWVtYWlsIChtYXRjaC1zdHJpbmcgMikpKQorICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgICAgICAgICh3aGVuIChyZS1zZWFyY2gtZm9yd2FyZCAiXlN1YmplY3Q6IFxcKC4qXFwpJCIgbmlsIHQpCisgICAgICAgICAgICAgIChzZXRxIHN1YmplY3QgKG1hdGNoLXN0cmluZyAxKSkpCisgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkICJeRGF0ZTogXFwoLipcXCkkIiBuaWwgdCkKKyAgICAgICAgICAgICAgKHNldHEgZGF0ZSAobWF0Y2gtc3RyaW5nIDEpKSkpKQorICAgICAgICAoZ2l0LXNldHVwLWxvZy1idWZmZXIgYnVmZmVyIChnaXQtZ2V0LW1lcmdlLWhlYWRzKSBhdXRob3ItbmFtZSBhdXRob3ItZW1haWwgc3ViamVjdCBkYXRlKSkKKyAgICAgIChpZiAoYm91bmRwICdsb2ctZWRpdC1kaWZmLWZ1bmN0aW9uKQorCSAgKGxvZy1lZGl0ICdnaXQtZG8tY29tbWl0IG5pbCAnKChsb2ctZWRpdC1saXN0ZnVuIC4gZ2l0LWxvZy1lZGl0LWZpbGVzKQorCQkJCQkgKGxvZy1lZGl0LWRpZmYtZnVuY3Rpb24gLiBnaXQtbG9nLWVkaXQtZGlmZikpIGJ1ZmZlciAnZ2l0LWxvZy1lZGl0LW1vZGUpCisJKGxvZy1lZGl0ICdnaXQtZG8tY29tbWl0IG5pbCAnZ2l0LWxvZy1lZGl0LWZpbGVzIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgJ2dpdC1sb2ctZWRpdC1tb2RlKSkKKyAgICAgIChzZXRxIHBhcmFncmFwaC1zZXBhcmF0ZSAoY29uY2F0IChyZWdleHAtcXVvdGUgZ2l0LWxvZy1tc2ctc2VwYXJhdG9yKSAiJFxcfEF1dGhvcjogXFx8RGF0ZTogXFx8TWVyZ2U6IFxcfFNpZ25lZC1vZmYtYnk6IFxcfFxmXFx8WyAJXSokIikpCisgICAgICAoc2V0cSBidWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtIGNvZGluZy1zeXN0ZW0pCisgICAgICAocmUtc2VhcmNoLWZvcndhcmQgKHJlZ2V4cC1xdW90ZSAoY29uY2F0IGdpdC1sb2ctbXNnLXNlcGFyYXRvciAiXG4iKSkgbmlsIHQpKSkpCisKKyhkZWZ1biBnaXQtc2V0dXAtY29tbWl0LWJ1ZmZlciAoY29tbWl0KQorICAiU2V0dXAgdGhlIGNvbW1pdCBidWZmZXIgd2l0aCB0aGUgY29udGVudHMgb2YgQ09NTUlULiIKKyAgKGxldCAocGFyZW50cyBhdXRob3ItbmFtZSBhdXRob3ItZW1haWwgc3ViamVjdCBkYXRlIG1zZykKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGxldCAoKGNvZGluZy1zeXN0ZW0gKGdpdC1nZXQtbG9nb3V0cHV0LWNvZGluZy1zeXN0ZW0pKSkKKyAgICAgICAgKGdpdC1jYWxsLXByb2Nlc3MgdCAibG9nIiAiLTEiICItLXByZXR0eT1tZWRpdW0iICItLWFiYnJldj00MCIgY29tbWl0KQorICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5NZXJnZTogKlxcKC4qXFwpJCIgbmlsIHQpCisgICAgICAgICAgKHNldHEgcGFyZW50cyAoY2RyIChzcGxpdC1zdHJpbmcgKG1hdGNoLXN0cmluZyAxKSAiICsiKSkpKQorICAgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5BdXRob3I6ICpcXCguKlxcKSA8XFwoLipcXCk+JCIgbmlsIHQpCisgICAgICAgICAgKHNldHEgYXV0aG9yLW5hbWUgKG1hdGNoLXN0cmluZyAxKSkKKyAgICAgICAgICAoc2V0cSBhdXRob3ItZW1haWwgKG1hdGNoLXN0cmluZyAyKSkpCisgICAgICAgICh3aGVuIChyZS1zZWFyY2gtZm9yd2FyZCAiXkRhdGU6ICpcXCguKlxcKSQiIG5pbCB0KQorICAgICAgICAgIChzZXRxIGRhdGUgKG1hdGNoLXN0cmluZyAxKSkpCisgICAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgIl4gICAgXFwoLipcXCkkIiBuaWwgdCkKKyAgICAgICAgICAocHVzaCAobWF0Y2gtc3RyaW5nIDEpIG1zZykpCisgICAgICAgIChzZXRxIG1zZyAobnJldmVyc2UgbXNnKSkKKyAgICAgICAgKHNldHEgc3ViamVjdCAocG9wIG1zZykpCisgICAgICAgICh3aGlsZSAoYW5kIG1zZyAoemVyb3AgKGxlbmd0aCAoY2FyIG1zZykpKSAocG9wIG1zZykpKSkpCisgICAgKGdpdC1zZXR1cC1sb2ctYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKmdpdC1jb21taXQqIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cyBhdXRob3ItbmFtZSBhdXRob3ItZW1haWwgc3ViamVjdCBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXBjb25jYXQgIydpZGVudGl0eSBtc2cgIlxuIikpKSkKKworKGRlZnVuIGdpdC1nZXQtY29tbWl0LWZpbGVzIChjb21taXQpCisgICJSZXRyaWV2ZSBhIHNvcnRlZCBsaXN0IG9mIGZpbGVzIG1vZGlmaWVkIGJ5IENPTU1JVC4iCisgIChsZXQgKGZpbGVzKQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAoZ2l0LWNhbGwtcHJvY2VzcyB0ICJkaWZmLXRyZWUiICItbSIgIi1yIiAiLXoiICItLW5hbWUtb25seSIgIi0tbm8tY29tbWl0LWlkIiAiLS1yb290IiBjb21taXQpCisgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiXFwoW15cMF0qXFwpXDAiIG5pbCB0IDEpCisgICAgICAgIChwdXNoIChtYXRjaC1zdHJpbmcgMSkgZmlsZXMpKSkKKyAgICAoc29ydCBmaWxlcyAjJ3N0cmluZy1sZXNzcCkpKQorCisoZGVmdW4gZ2l0LXJlYWQtY29tbWl0LW5hbWUgKHByb21wdCAmb3B0aW9uYWwgZGVmYXVsdCkKKyAgIkFzayBmb3IgYSBjb21taXQgbmFtZSwgd2l0aCBjb21wbGV0aW9uIGZvciBsb2NhbCBicmFuY2gsIHJlbW90ZSBicmFuY2ggYW5kIHRhZy4iCisgIChjb21wbGV0aW5nLXJlYWQgcHJvbXB0CisgICAgICAgICAgICAgICAgICAgKGxpc3QqICJIRUFEIiAiT1JJR19IRUFEIiAiRkVUQ0hfSEVBRCIgKG1hcGNhciAjJ2NhciAoZ2l0LWZvci1lYWNoLXJlZikpKQorCQkgICBuaWwgbmlsIG5pbCBuaWwgZGVmYXVsdCkpCisKKyhkZWZ1biBnaXQtY2hlY2tvdXQgKGJyYW5jaCAmb3B0aW9uYWwgbWVyZ2UpCisgICJDaGVja291dCBhIGJyYW5jaCwgdGFnLCBvciBhbnkgY29tbWl0LgorVXNlIGEgcHJlZml4IGFyZyBpZiBnaXQgc2hvdWxkIG1lcmdlIHdoaWxlIGNoZWNraW5nIG91dC4iCisgIChpbnRlcmFjdGl2ZQorICAgKGxpc3QgKGdpdC1yZWFkLWNvbW1pdC1uYW1lICJDaGVja291dDogIikKKyAgICAgICAgIGN1cnJlbnQtcHJlZml4LWFyZykpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGxldCAoKGFyZ3MgKGxpc3QgYnJhbmNoICItLSIpKSkKKyAgICAod2hlbiBtZXJnZSAocHVzaCAiLW0iIGFyZ3MpKQorICAgICh3aGVuIChhcHBseSAjJ2dpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAiY2hlY2tvdXQiIGFyZ3MpCisgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMpKSkpCisKKyhkZWZ1biBnaXQtYnJhbmNoIChicmFuY2gpCisgICJDcmVhdGUgYSBicmFuY2ggZnJvbSB0aGUgY3VycmVudCBIRUFEIGFuZCBzd2l0Y2ggdG8gaXQuIgorICAoaW50ZXJhY3RpdmUgKGxpc3QgKGdpdC1yZWFkLWNvbW1pdC1uYW1lICJCcmFuY2g6ICIpKSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAoaWYgKGdpdC1yZXYtcGFyc2UgKGNvbmNhdCAicmVmcy9oZWFkcy8iIGJyYW5jaCkpCisgICAgICAoaWYgKHllcy1vci1uby1wIChmb3JtYXQgIkJyYW5jaCAlcyBhbHJlYWR5IGV4aXN0cywgcmVwbGFjZSBpdD8gIiBicmFuY2gpKQorICAgICAgICAgIChhbmQgKGdpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAiYnJhbmNoIiAiLWYiIGJyYW5jaCkKKyAgICAgICAgICAgICAgIChnaXQtY2FsbC1wcm9jZXNzLWRpc3BsYXktZXJyb3IgImNoZWNrb3V0IiBicmFuY2gpKQorICAgICAgICAobWVzc2FnZSAiQ2FuY2VsZWQuIikpCisgICAgKGdpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAiY2hlY2tvdXQiICItYiIgYnJhbmNoKSkKKyAgICAoZ2l0LXJlZnJlc2gtZXdvYy1oZiBnaXQtc3RhdHVzKSkKKworKGRlZnVuIGdpdC1hbWVuZC1jb21taXQgKCkKKyAgIlVuZG8gdGhlIGxhc3QgY29tbWl0IG9uIEhFQUQsIGFuZCBzZXQgdGhpbmdzIHVwIHRvIGNvbW1pdCBhbgorYW1lbmRlZCB2ZXJzaW9uIG9mIGl0LiIKKyAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgICh3aGVuIChnaXQtZW1wdHktZGItcCkgKGVycm9yICJObyBjb21taXQgdG8gYW1lbmQuIikpCisgIChsZXQqICgoY29tbWl0IChnaXQtcmV2LXBhcnNlICJIRUFEIikpCisgICAgICAgICAoZmlsZXMgKGdpdC1nZXQtY29tbWl0LWZpbGVzIGNvbW1pdCkpKQorICAgICh3aGVuIChpZiAoZ2l0LXJldi1wYXJzZSAiSEVBRF4iKQorICAgICAgICAgICAgICAoZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJyZXNldCIgIi0tc29mdCIgIkhFQUReIikKKyAgICAgICAgICAgIChhbmQgKGdpdC11cGRhdGUtcmVmICJPUklHX0hFQUQiIGNvbW1pdCkKKyAgICAgICAgICAgICAgICAgKGdpdC11cGRhdGUtcmVmICJIRUFEIiBuaWwgY29tbWl0KSkpCisgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMgZmlsZXMgdCkKKyAgICAgIChnaXQtc2V0dXAtY29tbWl0LWJ1ZmZlciBjb21taXQpCisgICAgICAoZ2l0LWNvbW1pdC1maWxlKSkpKQorCisoZGVmdW4gZ2l0LWNoZXJyeS1waWNrLWNvbW1pdCAoYXJnKQorICAiQ2hlcnJ5LXBpY2sgYSBjb21taXQuIgorICAoaW50ZXJhY3RpdmUgKGxpc3QgKGdpdC1yZWFkLWNvbW1pdC1uYW1lICJDaGVycnktcGljayBjb21taXQ6ICIpKSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0ICgoY29tbWl0IChnaXQtcmV2LXBhcnNlIChjb25jYXQgYXJnICJeMCIpKSkpCisgICAgKHVubGVzcyBjb21taXQgKGVycm9yICJOb3QgYSB2YWxpZCBjb21taXQgJyVzJy4iIGFyZykpCisgICAgKHdoZW4gKGdpdC1yZXYtcGFyc2UgKGNvbmNhdCBjb21taXQgIl4yIikpCisgICAgICAoZXJyb3IgIkNhbm5vdCBjaGVycnktcGljayBhIG1lcmdlIGNvbW1pdC4iKSkKKyAgICAobGV0ICgoZmlsZXMgKGdpdC1nZXQtY29tbWl0LWZpbGVzIGNvbW1pdCkpCisgICAgICAgICAgKG9rIChnaXQtY2FsbC1wcm9jZXNzLWRpc3BsYXktZXJyb3IgImNoZXJyeS1waWNrIiAiLW4iIGNvbW1pdCkpKQorICAgICAgKGdpdC11cGRhdGUtc3RhdHVzLWZpbGVzIGZpbGVzIG9rKQorICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdpdC1zZXR1cC1jb21taXQtYnVmZmVyIGNvbW1pdCkKKyAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZCAiXlxuKlNpZ25lZC1vZmYtYnk6IiBuaWwgdCAxKQorICAgICAgICAgICAgKGdvdG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKQorICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpKQorICAgICAgICAoaW5zZXJ0ICIoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAiIGNvbW1pdCAiKVxuIikpCisgICAgICAod2hlbiBvayAoZ2l0LWNvbW1pdC1maWxlKSkpKSkKKworKGRlZnVuIGdpdC1yZXZlcnQtY29tbWl0IChhcmcpCisgICJSZXZlcnQgYSBjb21taXQuIgorICAoaW50ZXJhY3RpdmUgKGxpc3QgKGdpdC1yZWFkLWNvbW1pdC1uYW1lICJSZXZlcnQgY29tbWl0OiAiKSkpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGxldCAoKGNvbW1pdCAoZ2l0LXJldi1wYXJzZSAoY29uY2F0IGFyZyAiXjAiKSkpKQorICAgICh1bmxlc3MgY29tbWl0IChlcnJvciAiTm90IGEgdmFsaWQgY29tbWl0ICclcycuIiBhcmcpKQorICAgICh3aGVuIChnaXQtcmV2LXBhcnNlIChjb25jYXQgY29tbWl0ICJeMiIpKQorICAgICAgKGVycm9yICJDYW5ub3QgcmV2ZXJ0IGEgbWVyZ2UgY29tbWl0LiIpKQorICAgIChsZXQgKChmaWxlcyAoZ2l0LWdldC1jb21taXQtZmlsZXMgY29tbWl0KSkKKyAgICAgICAgICAoc3ViamVjdCAoZ2l0LWdldC1jb21taXQtZGVzY3JpcHRpb24gY29tbWl0KSkKKyAgICAgICAgICAob2sgKGdpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAicmV2ZXJ0IiAiLW4iIGNvbW1pdCkpKQorICAgICAgKGdpdC11cGRhdGUtc3RhdHVzLWZpbGVzIGZpbGVzIG9rKQorICAgICAgKHdoZW4gKHN0cmluZy1tYXRjaCAiXlswLTlhLWZdKyAtIFxcKC4qXFwpJCIgc3ViamVjdCkKKyAgICAgICAgKHNldHEgc3ViamVjdCAobWF0Y2gtc3RyaW5nIDEgc3ViamVjdCkpKQorICAgICAgKGdpdC1zZXR1cC1sb2ctYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKmdpdC1jb21taXQqIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2l0LWdldC1tZXJnZS1oZWFkcykgbmlsIG5pbCAoZm9ybWF0ICJSZXZlcnQgXCIlc1wiIiBzdWJqZWN0KSBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJUaGlzIHJldmVydHMgY29tbWl0ICVzLlxuIiBjb21taXQpKQorICAgICAgKHdoZW4gb2sgKGdpdC1jb21taXQtZmlsZSkpKSkpCisKKyhkZWZ1biBnaXQtZmluZC1maWxlICgpCisgICJWaXNpdCB0aGUgY3VycmVudCBmaWxlIGluIGl0cyBvd24gYnVmZmVyLiIKKyAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChsZXQgKChpbmZvIChld29jLWRhdGEgKGV3b2MtbG9jYXRlIGdpdC1zdGF0dXMpKSkpCisgICAgKHVubGVzcyAoZ2l0LWV4cGFuZC1kaXJlY3RvcnkgaW5mbykKKyAgICAgIChmaW5kLWZpbGUgKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkKKyAgICAgICh3aGVuIChlcSAndW5tZXJnZWQgKGdpdC1maWxlaW5mby0+c3RhdGUgaW5mbykpCisgICAgICAgIChzbWVyZ2UtbW9kZSAxKSkpKSkKKworKGRlZnVuIGdpdC1maW5kLWZpbGUtb3RoZXItd2luZG93ICgpCisgICJWaXNpdCB0aGUgY3VycmVudCBmaWxlIGluIGl0cyBvd24gYnVmZmVyIGluIGFub3RoZXIgd2luZG93LiIKKyAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChsZXQgKChpbmZvIChld29jLWRhdGEgKGV3b2MtbG9jYXRlIGdpdC1zdGF0dXMpKSkpCisgICAgKGZpbmQtZmlsZS1vdGhlci13aW5kb3cgKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkKKyAgICAod2hlbiAoZXEgJ3VubWVyZ2VkIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pKQorICAgICAgKHNtZXJnZS1tb2RlKSkpKQorCisoZGVmdW4gZ2l0LWZpbmQtZmlsZS1pbWVyZ2UgKCkKKyAgIlZpc2l0IHRoZSBjdXJyZW50IGZpbGUgaW4gaW50ZXJhY3RpdmUgbWVyZ2UgbW9kZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0ICgoaW5mbyAoZXdvYy1kYXRhIChld29jLWxvY2F0ZSBnaXQtc3RhdHVzKSkpKQorICAgIChmaW5kLWZpbGUgKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkKKyAgICAoc21lcmdlLWVkaWZmKSkpCisKKyhkZWZ1biBnaXQtdmlldy1maWxlICgpCisgICJWaWV3IHRoZSBjdXJyZW50IGZpbGUgaW4gaXRzIG93biBidWZmZXIuIgorICAoaW50ZXJhY3RpdmUpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGxldCAoKGluZm8gKGV3b2MtZGF0YSAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpKSkKKyAgICAodmlldy1maWxlIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbykpKSkKKworKGRlZnVuIGdpdC1yZWZyZXNoLXN0YXR1cyAoKQorICAiUmVmcmVzaCB0aGUgZ2l0IHN0YXR1cyBidWZmZXIuIgorICAoaW50ZXJhY3RpdmUpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKG1lc3NhZ2UgIlJlZnJlc2hpbmcgZ2l0IHN0YXR1cy4uLiIpCisgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcykKKyAgKG1lc3NhZ2UgIlJlZnJlc2hpbmcgZ2l0IHN0YXR1cy4uLmRvbmUiKSkKKworKGRlZnVuIGdpdC1zdGF0dXMtcXVpdCAoKQorICAiUXVpdCBnaXQtc3RhdHVzIG1vZGUuIgorICAoaW50ZXJhY3RpdmUpCisgIChidXJ5LWJ1ZmZlcikpCisKKzs7OzsgTWFqb3IgTW9kZQorOzs7OyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKGRlZnZhciBnaXQtc3RhdHVzLW1vZGUtaG9vayBuaWwKKyAgIlJ1biBhZnRlciBgZ2l0LXN0YXR1cy1tb2RlJyBpcyBzZXR1cC4iKQorCisoZGVmdmFyIGdpdC1zdGF0dXMtbW9kZS1tYXAgbmlsCisgICJLZXltYXAgZm9yIGdpdCBtYWpvciBtb2RlLiIpCisKKyhkZWZ2YXIgZ2l0LXN0YXR1cyBuaWwKKyAgIkxpc3Qgb2YgYWxsIGZpbGVzIG1hbmFnZWQgYnkgdGhlIGdpdC1zdGF0dXMgbW9kZS4iKQorCisodW5sZXNzIGdpdC1zdGF0dXMtbW9kZS1tYXAKKyAgKGxldCAoKG1hcCAobWFrZS1rZXltYXApKQorICAgICAgICAoY29tbWl0LW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkKKyAgICAgICAgKGRpZmYtbWFwIChtYWtlLXNwYXJzZS1rZXltYXApKQorICAgICAgICAodG9nZ2xlLW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCisgICAgKHN1cHByZXNzLWtleW1hcCBtYXApCisgICAgKGRlZmluZS1rZXkgbWFwICI/IiAgICdnaXQtaGVscCkKKyAgICAoZGVmaW5lLWtleSBtYXAgImgiICAgJ2dpdC1oZWxwKQorICAgIChkZWZpbmUta2V5IG1hcCAiICIgICAnZ2l0LW5leHQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgImEiICAgJ2dpdC1hZGQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgImMiICAgJ2dpdC1jb21taXQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgIlxDLWMiIGNvbW1pdC1tYXApCisgICAgKGRlZmluZS1rZXkgbWFwICJkIiAgICBkaWZmLW1hcCkKKyAgICAoZGVmaW5lLWtleSBtYXAgIj0iICAgJ2dpdC1kaWZmLWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJmIiAgICdnaXQtZmluZC1maWxlKQorICAgIChkZWZpbmUta2V5IG1hcCAiXHIiICAnZ2l0LWZpbmQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgImciICAgJ2dpdC1yZWZyZXNoLXN0YXR1cykKKyAgICAoZGVmaW5lLWtleSBtYXAgImkiICAgJ2dpdC1pZ25vcmUtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgIkkiICAgJ2dpdC1pbnNlcnQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgImwiICAgJ2dpdC1sb2ctZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgIm0iICAgJ2dpdC1tYXJrLWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJNIiAgICdnaXQtbWFyay1hbGwpCisgICAgKGRlZmluZS1rZXkgbWFwICJuIiAgICdnaXQtbmV4dC1maWxlKQorICAgIChkZWZpbmUta2V5IG1hcCAiTiIgICAnZ2l0LW5leHQtdW5tZXJnZWQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgIm8iICAgJ2dpdC1maW5kLWZpbGUtb3RoZXItd2luZG93KQorICAgIChkZWZpbmUta2V5IG1hcCAicCIgICAnZ2l0LXByZXYtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgIlAiICAgJ2dpdC1wcmV2LXVubWVyZ2VkLWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJxIiAgICdnaXQtc3RhdHVzLXF1aXQpCisgICAgKGRlZmluZS1rZXkgbWFwICJyIiAgICdnaXQtcmVtb3ZlLWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJ0IiAgICB0b2dnbGUtbWFwKQorICAgIChkZWZpbmUta2V5IG1hcCAiVCIgICAnZ2l0LXRvZ2dsZS1hbGwtbWFya3MpCisgICAgKGRlZmluZS1rZXkgbWFwICJ1IiAgICdnaXQtdW5tYXJrLWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJVIiAgICdnaXQtcmV2ZXJ0LWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJ2IiAgICdnaXQtdmlldy1maWxlKQorICAgIChkZWZpbmUta2V5IG1hcCAieCIgICAnZ2l0LXJlbW92ZS1oYW5kbGVkKQorICAgIChkZWZpbmUta2V5IG1hcCAiXEMtPyIgJ2dpdC11bm1hcmstZmlsZS11cCkKKyAgICAoZGVmaW5lLWtleSBtYXAgIlxNLVxDLT8iICdnaXQtdW5tYXJrLWFsbCkKKyAgICA7IHRoZSBjb21taXQgc3VibWFwCisgICAgKGRlZmluZS1rZXkgY29tbWl0LW1hcCAiXEMtYSIgJ2dpdC1hbWVuZC1jb21taXQpCisgICAgKGRlZmluZS1rZXkgY29tbWl0LW1hcCAiXEMtYiIgJ2dpdC1icmFuY2gpCisgICAgKGRlZmluZS1rZXkgY29tbWl0LW1hcCAiXEMtbyIgJ2dpdC1jaGVja291dCkKKyAgICAoZGVmaW5lLWtleSBjb21taXQtbWFwICJcQy1wIiAnZ2l0LWNoZXJyeS1waWNrLWNvbW1pdCkKKyAgICAoZGVmaW5lLWtleSBjb21taXQtbWFwICJcQy12IiAnZ2l0LXJldmVydC1jb21taXQpCisgICAgOyB0aGUgZGlmZiBzdWJtYXAKKyAgICAoZGVmaW5lLWtleSBkaWZmLW1hcCAiYiIgJ2dpdC1kaWZmLWZpbGUtYmFzZSkKKyAgICAoZGVmaW5lLWtleSBkaWZmLW1hcCAiYyIgJ2dpdC1kaWZmLWZpbGUtY29tYmluZWQpCisgICAgKGRlZmluZS1rZXkgZGlmZi1tYXAgIj0iICdnaXQtZGlmZi1maWxlKQorICAgIChkZWZpbmUta2V5IGRpZmYtbWFwICJlIiAnZ2l0LWRpZmYtZmlsZS1pZGlmZikKKyAgICAoZGVmaW5lLWtleSBkaWZmLW1hcCAiRSIgJ2dpdC1maW5kLWZpbGUtaW1lcmdlKQorICAgIChkZWZpbmUta2V5IGRpZmYtbWFwICJoIiAnZ2l0LWRpZmYtZmlsZS1tZXJnZS1oZWFkKQorICAgIChkZWZpbmUta2V5IGRpZmYtbWFwICJtIiAnZ2l0LWRpZmYtZmlsZS1taW5lKQorICAgIChkZWZpbmUta2V5IGRpZmYtbWFwICJvIiAnZ2l0LWRpZmYtZmlsZS1vdGhlcikKKyAgICA7IHRoZSB0b2dnbGUgc3VibWFwCisgICAgKGRlZmluZS1rZXkgdG9nZ2xlLW1hcCAidSIgJ2dpdC10b2dnbGUtc2hvdy11cHRvZGF0ZSkKKyAgICAoZGVmaW5lLWtleSB0b2dnbGUtbWFwICJpIiAnZ2l0LXRvZ2dsZS1zaG93LWlnbm9yZWQpCisgICAgKGRlZmluZS1rZXkgdG9nZ2xlLW1hcCAiayIgJ2dpdC10b2dnbGUtc2hvdy11bmtub3duKQorICAgIChkZWZpbmUta2V5IHRvZ2dsZS1tYXAgIm0iICdnaXQtdG9nZ2xlLWFsbC1tYXJrcykKKyAgICAoc2V0cSBnaXQtc3RhdHVzLW1vZGUtbWFwIG1hcCkpCisgIChlYXN5LW1lbnUtZGVmaW5lIGdpdC1tZW51IGdpdC1zdGF0dXMtbW9kZS1tYXAKKyAgICAiR2l0IE1lbnUiCisgICAgYCgiR2l0IgorICAgICAgWyJSZWZyZXNoIiBnaXQtcmVmcmVzaC1zdGF0dXMgdF0KKyAgICAgIFsiQ29tbWl0IiBnaXQtY29tbWl0LWZpbGUgdF0KKyAgICAgIFsiQ2hlY2tvdXQuLi4iIGdpdC1jaGVja291dCB0XQorICAgICAgWyJOZXcgQnJhbmNoLi4uIiBnaXQtYnJhbmNoIHRdCisgICAgICBbIkNoZXJyeS1waWNrIENvbW1pdC4uLiIgZ2l0LWNoZXJyeS1waWNrLWNvbW1pdCB0XQorICAgICAgWyJSZXZlcnQgQ29tbWl0Li4uIiBnaXQtcmV2ZXJ0LWNvbW1pdCB0XQorICAgICAgKCJNZXJnZSIKKwlbIk5leHQgVW5tZXJnZWQgRmlsZSIgZ2l0LW5leHQtdW5tZXJnZWQtZmlsZSB0XQorCVsiUHJldiBVbm1lcmdlZCBGaWxlIiBnaXQtcHJldi11bm1lcmdlZC1maWxlIHRdCisJWyJJbnRlcmFjdGl2ZSBNZXJnZSBGaWxlIiBnaXQtZmluZC1maWxlLWltZXJnZSB0XQorCVsiRGlmZiBBZ2FpbnN0IENvbW1vbiBCYXNlIEZpbGUiIGdpdC1kaWZmLWZpbGUtYmFzZSB0XQorCVsiRGlmZiBDb21iaW5lZCIgZ2l0LWRpZmYtZmlsZS1jb21iaW5lZCB0XQorCVsiRGlmZiBBZ2FpbnN0IE1lcmdlIEhlYWQiIGdpdC1kaWZmLWZpbGUtbWVyZ2UtaGVhZCB0XQorCVsiRGlmZiBBZ2FpbnN0IE1pbmUiIGdpdC1kaWZmLWZpbGUtbWluZSB0XQorCVsiRGlmZiBBZ2FpbnN0IE90aGVyIiBnaXQtZGlmZi1maWxlLW90aGVyIHRdKQorICAgICAgIi0tLS0tLS0tIgorICAgICAgWyJBZGQgRmlsZSIgZ2l0LWFkZC1maWxlIHRdCisgICAgICBbIlJldmVydCBGaWxlIiBnaXQtcmV2ZXJ0LWZpbGUgdF0KKyAgICAgIFsiSWdub3JlIEZpbGUiIGdpdC1pZ25vcmUtZmlsZSB0XQorICAgICAgWyJSZW1vdmUgRmlsZSIgZ2l0LXJlbW92ZS1maWxlIHRdCisgICAgICBbIkluc2VydCBGaWxlIiBnaXQtaW5zZXJ0LWZpbGUgdF0KKyAgICAgICItLS0tLS0tLSIKKyAgICAgIFsiRmluZCBGaWxlIiBnaXQtZmluZC1maWxlIHRdCisgICAgICBbIlZpZXcgRmlsZSIgZ2l0LXZpZXctZmlsZSB0XQorICAgICAgWyJEaWZmIEZpbGUiIGdpdC1kaWZmLWZpbGUgdF0KKyAgICAgIFsiSW50ZXJhY3RpdmUgRGlmZiBGaWxlIiBnaXQtZGlmZi1maWxlLWlkaWZmIHRdCisgICAgICBbIkxvZyIgZ2l0LWxvZy1maWxlIHRdCisgICAgICAiLS0tLS0tLS0iCisgICAgICBbIk1hcmsiIGdpdC1tYXJrLWZpbGUgdF0KKyAgICAgIFsiTWFyayBBbGwiIGdpdC1tYXJrLWFsbCB0XQorICAgICAgWyJVbm1hcmsiIGdpdC11bm1hcmstZmlsZSB0XQorICAgICAgWyJVbm1hcmsgQWxsIiBnaXQtdW5tYXJrLWFsbCB0XQorICAgICAgWyJUb2dnbGUgQWxsIE1hcmtzIiBnaXQtdG9nZ2xlLWFsbC1tYXJrcyB0XQorICAgICAgWyJIaWRlIEhhbmRsZWQgRmlsZXMiIGdpdC1yZW1vdmUtaGFuZGxlZCB0XQorICAgICAgIi0tLS0tLS0tIgorICAgICAgWyJTaG93IFVwdG9kYXRlIEZpbGVzIiBnaXQtdG9nZ2xlLXNob3ctdXB0b2RhdGUgOnN0eWxlIHRvZ2dsZSA6c2VsZWN0ZWQgZ2l0LXNob3ctdXB0b2RhdGVdCisgICAgICBbIlNob3cgSWdub3JlZCBGaWxlcyIgZ2l0LXRvZ2dsZS1zaG93LWlnbm9yZWQgOnN0eWxlIHRvZ2dsZSA6c2VsZWN0ZWQgZ2l0LXNob3ctaWdub3JlZF0KKyAgICAgIFsiU2hvdyBVbmtub3duIEZpbGVzIiBnaXQtdG9nZ2xlLXNob3ctdW5rbm93biA6c3R5bGUgdG9nZ2xlIDpzZWxlY3RlZCBnaXQtc2hvdy11bmtub3duXQorICAgICAgIi0tLS0tLS0tIgorICAgICAgWyJRdWl0IiBnaXQtc3RhdHVzLXF1aXQgdF0pKSkKKworCis7OyBnaXQgbW9kZSBzaG91bGQgb25seSBydW4gaW4gdGhlICpnaXQgc3RhdHVzKiBidWZmZXIKKyhwdXQgJ2dpdC1zdGF0dXMtbW9kZSAnbW9kZS1jbGFzcyAnc3BlY2lhbCkKKworKGRlZnVuIGdpdC1zdGF0dXMtbW9kZSAoKQorICAiTWFqb3IgbW9kZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBHaXQuCitDb21tYW5kczoKK1xce2dpdC1zdGF0dXMtbW9kZS1tYXB9IgorICAoa2lsbC1hbGwtbG9jYWwtdmFyaWFibGVzKQorICAoYnVmZmVyLWRpc2FibGUtdW5kbykKKyAgKHNldHEgbW9kZS1uYW1lICJnaXQgc3RhdHVzIgorICAgICAgICBtYWpvci1tb2RlICdnaXQtc3RhdHVzLW1vZGUKKyAgICAgICAgZ29hbC1jb2x1bW4gMTcKKyAgICAgICAgYnVmZmVyLXJlYWQtb25seSB0KQorICAodXNlLWxvY2FsLW1hcCBnaXQtc3RhdHVzLW1vZGUtbWFwKQorICAobGV0ICgoYnVmZmVyLXJlYWQtb25seSBuaWwpKQorICAgIChlcmFzZS1idWZmZXIpCisgIChsZXQgKChzdGF0dXMgKGV3b2MtY3JlYXRlICdnaXQtZmlsZWluZm8tcHJldHR5cHJpbnQgIiIgIiIpKSkKKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdnaXQtc3RhdHVzKSBzdGF0dXMpKQorICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdsaXN0LWJ1ZmZlcnMtZGlyZWN0b3J5KSBkZWZhdWx0LWRpcmVjdG9yeSkKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2dpdC1zaG93LXVwdG9kYXRlKQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAnZ2l0LXNob3ctaWdub3JlZCkKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2dpdC1zaG93LXVua25vd24pCisgIChydW4taG9va3MgJ2dpdC1zdGF0dXMtbW9kZS1ob29rKSkpCisKKyhkZWZ1biBnaXQtZmluZC1zdGF0dXMtYnVmZmVyIChkaXIpCisgICJGaW5kIHRoZSBnaXQgc3RhdHVzIGJ1ZmZlciBoYW5kbGluZyBhIHNwZWNpZmllZCBkaXJlY3RvcnkuIgorICAobGV0ICgobGlzdCAoYnVmZmVyLWxpc3QpKQorICAgICAgICAoZnVsbGRpciAoZXhwYW5kLWZpbGUtbmFtZSBkaXIpKQorICAgICAgICBmb3VuZCkKKyAgICAod2hpbGUgKGFuZCBsaXN0IChub3QgZm91bmQpKQorICAgICAgKGxldCAoKGJ1ZmZlciAoY2FyIGxpc3QpKSkKKyAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCisgICAgICAgICAgKHdoZW4gKGFuZCBsaXN0LWJ1ZmZlcnMtZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWVxdWFsIGZ1bGxkaXIgKGV4cGFuZC1maWxlLW5hbWUgbGlzdC1idWZmZXJzLWRpcmVjdG9yeSkpCisJCSAgICAgKGVxIG1ham9yLW1vZGUgJ2dpdC1zdGF0dXMtbW9kZSkpCisgICAgICAgICAgICAoc2V0cSBmb3VuZCBidWZmZXIpKSkpCisgICAgICAoc2V0cSBsaXN0IChjZHIgbGlzdCkpKQorICAgIGZvdW5kKSkKKworKGRlZnVuIGdpdC1zdGF0dXMgKGRpcikKKyAgIkVudHJ5IHBvaW50IGludG8gZ2l0LXN0YXR1cyBtb2RlLiIKKyAgKGludGVyYWN0aXZlICJEU2VsZWN0IGRpcmVjdG9yeTogIikKKyAgKHNldHEgZGlyIChnaXQtZ2V0LXRvcC1kaXIgZGlyKSkKKyAgKGlmIChmaWxlLWRpcmVjdG9yeS1wIChjb25jYXQgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkgZGlyKSAiLmdpdCIpKQorICAgICAgKGxldCAoKGJ1ZmZlciAob3IgKGFuZCBnaXQtcmV1c2Utc3RhdHVzLWJ1ZmZlciAoZ2l0LWZpbmQtc3RhdHVzLWJ1ZmZlciBkaXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0ZS1maWxlLWJ1ZmZlciAoZXhwYW5kLWZpbGUtbmFtZSAiKmdpdC1zdGF0dXMqIiBkaXIpKSkpKQorICAgICAgICAoc3dpdGNoLXRvLWJ1ZmZlciBidWZmZXIpCisgICAgICAgIChjZCBkaXIpCisgICAgICAgIChnaXQtc3RhdHVzLW1vZGUpCisgICAgICAgIChnaXQtcmVmcmVzaC1zdGF0dXMpCisgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgIChhZGQtaG9vayAnYWZ0ZXItc2F2ZS1ob29rICdnaXQtdXBkYXRlLXNhdmVkLWZpbGUpKQorICAgIChtZXNzYWdlICIlcyBpcyBub3QgYSBnaXQgd29ya2luZyB0cmVlLiIgZGlyKSkpCisKKyhkZWZ1biBnaXQtdXBkYXRlLXNhdmVkLWZpbGUgKCkKKyAgIlVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBnaXQtc3RhdHVzIGJ1ZmZlciB3aGVuIGEgZmlsZSBpcyBzYXZlZC4KK01lYW50IHRvIGJlIHVzZWQgaW4gYGFmdGVyLXNhdmUtaG9vaycuIgorICAobGV0KiAoKGZpbGUgKGV4cGFuZC1maWxlLW5hbWUgYnVmZmVyLWZpbGUtbmFtZSkpCisgICAgICAgICAoZGlyIChjb25kaXRpb24tY2FzZSBuaWwgKGdpdC1nZXQtdG9wLWRpciAoZmlsZS1uYW1lLWRpcmVjdG9yeSBmaWxlKSkgKGVycm9yIG5pbCkpKQorICAgICAgICAgKGJ1ZmZlciAoYW5kIGRpciAoZ2l0LWZpbmQtc3RhdHVzLWJ1ZmZlciBkaXIpKSkpCisgICAgKHdoZW4gYnVmZmVyCisgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKKyAgICAgICAgKGxldCAoKGZpbGVuYW1lIChmaWxlLXJlbGF0aXZlLW5hbWUgZmlsZSBkaXIpKSkKKyAgICAgICAgICA7IHNraXAgZmlsZXMgbG9jYXRlZCBpbnNpZGUgdGhlIC5naXQgZGlyZWN0b3J5CisgICAgICAgICAgKHVubGVzcyAoc3RyaW5nLW1hdGNoICJeXFwuZ2l0LyIgZmlsZW5hbWUpCisgICAgICAgICAgICAoZ2l0LWNhbGwtcHJvY2VzcyBuaWwgImFkZCIgIi0tcmVmcmVzaCIgIi0tIiBmaWxlbmFtZSkKKyAgICAgICAgICAgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyAobGlzdCBmaWxlbmFtZSkpKSkpKSkpCisKKyhkZWZ1biBnaXQtaGVscCAoKQorICAiRGlzcGxheSBoZWxwIGZvciBHaXQgbW9kZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGRlc2NyaWJlLWZ1bmN0aW9uICdnaXQtc3RhdHVzLW1vZGUpKQorCisocHJvdmlkZSAnZ2l0KQorOzs7IGdpdC5lbCBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvUkVBRE1FIGIvY29udHJpYi9leGFtcGxlcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk0NmYzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvUkVBRE1FCkBAIC0wLDAgKzEsMyBAQAorVGhlc2UgYXJlIG9yaWdpbmFsIHNjcmlwdGVkIGltcGxlbWVudGF0aW9ucywga2VwdCBwcmltYXJpbHkgZm9yIHRoZWlyCityZWZlcmVuY2UgdmFsdWUgdG8gYW55IGFzcGlyaW5nIHBsdW1iaW5nIHVzZXJzIHdobyB3YW50IHRvIGxlYXJuIGhvdworcGllY2VzIGNhbiBiZSBmaXQgdG9nZXRoZXIuCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYyBiL2NvbnRyaWIvZXhhbXBsZXMvYnVpbHRpbi1mZXRjaC0tdG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYzhjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYwpAQCAtMCwwICsxLDU3NCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorCitzdGF0aWMgY2hhciAqZ2V0X3N0ZGluKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMTAyNCkgPCAwKSB7CisJCWRpZV9lcnJubygiZXJyb3IgcmVhZGluZyBzdGFuZGFyZCBpbnB1dCIpOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19uZXcoZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExX25ldykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiAgJXM6ICVzXG4iLCB0eXBlbmFtZSh0eXBlKSwKKwkJZmluZF91bmlxdWVfYWJicmV2KHNoYTFfbmV3LCBERUZBVUxUX0FCQlJFVikpOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9yZWZfZW52KGNvbnN0IGNoYXIgKmFjdGlvbiwKKwkJICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqb2xkdmFsKQoreworCWNoYXIgbXNnWzEwMjRdOworCWNvbnN0IGNoYXIgKnJsYSA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKworCWlmICghcmxhKQorCQlybGEgPSAiKHJlZmxvZyB1cGRhdGUpIjsKKwlpZiAoc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIiVzOiAlcyIsIHJsYSwgYWN0aW9uKSA+PSBzaXplb2YobXNnKSkKKwkJd2FybmluZygicmVmbG9nIG1lc3NhZ2UgdG9vIGxvbmc6ICUuKnMuLi4iLCA1MCwgbXNnKTsKKwlyZXR1cm4gdXBkYXRlX3JlZihtc2csIHJlZm5hbWUsIHNoYTEsIG9sZHZhbCwgMCwgUVVJRVRfT05fRVJSKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfbG9jYWxfcmVmKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgY29uc3QgY2hhciAqbmV3X2hlYWQsCisJCQkgICAgY29uc3QgY2hhciAqbm90ZSwKKwkJCSAgICBpbnQgdmVyYm9zZSwgaW50IGZvcmNlKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMV9vbGRbMjBdLCBzaGExX25ld1syMF07CisJY2hhciBvbGRoWzQxXSwgbmV3aFs0MV07CisJc3RydWN0IGNvbW1pdCAqY3VycmVudCwgKnVwZGF0ZWQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJaWYgKGdldF9zaGExX2hleChuZXdfaGVhZCwgc2hhMV9uZXcpKQorCQlkaWUoIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIsIG5ld19oZWFkKTsKKworCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTFfbmV3LCBOVUxMKTsKKwlpZiAodHlwZSA8IDApCisJCWRpZSgib2JqZWN0ICVzIG5vdCBmb3VuZCIsIG5ld19oZWFkKTsKKworCWlmICghKm5hbWUpIHsKKwkJLyogTm90IHN0b3JpbmcgKi8KKwkJaWYgKHZlcmJvc2UpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiKiBmZXRjaGVkICVzXG4iLCBub3RlKTsKKwkJCXNob3dfbmV3KHR5cGUsIHNoYTFfbmV3KTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ2V0X3NoYTEobmFtZSwgc2hhMV9vbGQpKSB7CisJCWNvbnN0IGNoYXIgKm1zZzsKKwlqdXN0X3N0b3JlOgorCQkvKiBuZXcgcmVmICovCisJCWlmICghc3RybmNtcChuYW1lLCAicmVmcy90YWdzLyIsIDEwKSkKKwkJCW1zZyA9ICJzdG9yaW5nIHRhZyI7CisJCWVsc2UKKwkJCW1zZyA9ICJzdG9yaW5nIGhlYWQiOworCQlmcHJpbnRmKHN0ZGVyciwgIiogJXM6IHN0b3JpbmcgJXNcbiIsCisJCQluYW1lLCBub3RlKTsKKwkJc2hvd19uZXcodHlwZSwgc2hhMV9uZXcpOworCQlyZXR1cm4gdXBkYXRlX3JlZl9lbnYobXNnLCBuYW1lLCBzaGExX25ldywgTlVMTCk7CisJfQorCisJaWYgKCFoYXNoY21wKHNoYTFfb2xkLCBzaGExX25ldykpIHsKKwkJaWYgKHZlcmJvc2UpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiKiAlczogc2FtZSBhcyAlc1xuIiwgbmFtZSwgbm90ZSk7CisJCQlzaG93X25ldyh0eXBlLCBzaGExX25ldyk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJuY21wKG5hbWUsICJyZWZzL3RhZ3MvIiwgMTApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiKiAlczogdXBkYXRpbmcgd2l0aCAlc1xuIiwgbmFtZSwgbm90ZSk7CisJCXNob3dfbmV3KHR5cGUsIHNoYTFfbmV3KTsKKwkJcmV0dXJuIHVwZGF0ZV9yZWZfZW52KCJ1cGRhdGluZyB0YWciLCBuYW1lLCBzaGExX25ldywgTlVMTCk7CisJfQorCisJY3VycmVudCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTFfb2xkKTsKKwl1cGRhdGVkID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMV9uZXcpOworCWlmICghY3VycmVudCB8fCAhdXBkYXRlZCkKKwkJZ290byBqdXN0X3N0b3JlOworCisJc3RyY3B5KG9sZGgsIGZpbmRfdW5pcXVlX2FiYnJldihjdXJyZW50LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKKwlzdHJjcHkobmV3aCwgZmluZF91bmlxdWVfYWJicmV2KHNoYTFfbmV3LCBERUZBVUxUX0FCQlJFVikpOworCisJaWYgKGluX21lcmdlX2Jhc2VzKGN1cnJlbnQsIHVwZGF0ZWQpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiKiAlczogZmFzdC1mb3J3YXJkIHRvICVzXG4iLAorCQkJbmFtZSwgbm90ZSk7CisJCWZwcmludGYoc3RkZXJyLCAiICBvbGQuLm5ldzogJXMuLiVzXG4iLCBvbGRoLCBuZXdoKTsKKwkJcmV0dXJuIHVwZGF0ZV9yZWZfZW52KCJmYXN0LWZvcndhcmQiLCBuYW1lLCBzaGExX25ldywgc2hhMV9vbGQpOworCX0KKwlpZiAoIWZvcmNlKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIiogJXM6IG5vdCB1cGRhdGluZyB0byBub24tZmFzdC1mb3J3YXJkICVzXG4iLAorCQkJbmFtZSwgbm90ZSk7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIiAgb2xkLi4ubmV3OiAlcy4uLiVzXG4iLCBvbGRoLCBuZXdoKTsKKwkJcmV0dXJuIDE7CisJfQorCWZwcmludGYoc3RkZXJyLAorCQkiKiAlczogZm9yY2luZyB1cGRhdGUgdG8gbm9uLWZhc3QtZm9yd2FyZCAlc1xuIiwKKwkJbmFtZSwgbm90ZSk7CisJZnByaW50ZihzdGRlcnIsICIgIG9sZC4uLm5ldzogJXMuLi4lc1xuIiwgb2xkaCwgbmV3aCk7CisJcmV0dXJuIHVwZGF0ZV9yZWZfZW52KCJmb3JjZWQtdXBkYXRlIiwgbmFtZSwgc2hhMV9uZXcsIHNoYTFfb2xkKTsKK30KKworc3RhdGljIGludCBhcHBlbmRfZmV0Y2hfaGVhZChGSUxFICpmcCwKKwkJCSAgICAgY29uc3QgY2hhciAqaGVhZCwgY29uc3QgY2hhciAqcmVtb3RlLAorCQkJICAgICBjb25zdCBjaGFyICpyZW1vdGVfbmFtZSwgY29uc3QgY2hhciAqcmVtb3RlX25pY2ssCisJCQkgICAgIGNvbnN0IGNoYXIgKmxvY2FsX25hbWUsIGludCBub3RfZm9yX21lcmdlLAorCQkJICAgICBpbnQgdmVyYm9zZSwgaW50IGZvcmNlKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgcmVtb3RlX2xlbiwgaSwgbm90ZV9sZW47CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIG5vdGVbMTAyNF07CisJY29uc3QgY2hhciAqd2hhdCwgKmtpbmQ7CisKKwlpZiAoZ2V0X3NoYTEoaGVhZCwgc2hhMSkpCisJCXJldHVybiBlcnJvcigiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIiwgaGVhZCk7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTEsIDEpOworCWlmICghY29tbWl0KQorCQlub3RfZm9yX21lcmdlID0gMTsKKworCWlmICghc3RyY21wKHJlbW90ZV9uYW1lLCAiSEVBRCIpKSB7CisJCWtpbmQgPSAiIjsKKwkJd2hhdCA9ICIiOworCX0KKwllbHNlIGlmICghc3RybmNtcChyZW1vdGVfbmFtZSwgInJlZnMvaGVhZHMvIiwgMTEpKSB7CisJCWtpbmQgPSAiYnJhbmNoIjsKKwkJd2hhdCA9IHJlbW90ZV9uYW1lICsgMTE7CisJfQorCWVsc2UgaWYgKCFzdHJuY21wKHJlbW90ZV9uYW1lLCAicmVmcy90YWdzLyIsIDEwKSkgeworCQlraW5kID0gInRhZyI7CisJCXdoYXQgPSByZW1vdGVfbmFtZSArIDEwOworCX0KKwllbHNlIGlmICghc3RybmNtcChyZW1vdGVfbmFtZSwgInJlZnMvcmVtb3Rlcy8iLCAxMykpIHsKKwkJa2luZCA9ICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoIjsKKwkJd2hhdCA9IHJlbW90ZV9uYW1lICsgMTM7CisJfQorCWVsc2UgeworCQlraW5kID0gIiI7CisJCXdoYXQgPSByZW1vdGVfbmFtZTsKKwl9CisKKwlyZW1vdGVfbGVuID0gc3RybGVuKHJlbW90ZSk7CisJZm9yIChpID0gcmVtb3RlX2xlbiAtIDE7IHJlbW90ZVtpXSA9PSAnLycgJiYgMCA8PSBpOyBpLS0pCisJCTsKKwlyZW1vdGVfbGVuID0gaSArIDE7CisJaWYgKDQgPCBpICYmICFzdHJuY21wKCIuZ2l0IiwgcmVtb3RlICsgaSAtIDMsIDQpKQorCQlyZW1vdGVfbGVuID0gaSAtIDM7CisKKwlub3RlX2xlbiA9IDA7CisJaWYgKCp3aGF0KSB7CisJCWlmICgqa2luZCkKKwkJCW5vdGVfbGVuICs9IHNwcmludGYobm90ZSArIG5vdGVfbGVuLCAiJXMgIiwga2luZCk7CisJCW5vdGVfbGVuICs9IHNwcmludGYobm90ZSArIG5vdGVfbGVuLCAiJyVzJyBvZiAiLCB3aGF0KTsKKwl9CisJbm90ZV9sZW4gKz0gc3ByaW50Zihub3RlICsgbm90ZV9sZW4sICIlLipzIiwgcmVtb3RlX2xlbiwgcmVtb3RlKTsKKwlmcHJpbnRmKGZwLCAiJXNcdCVzXHQlc1xuIiwKKwkJc2hhMV90b19oZXgoY29tbWl0ID8gY29tbWl0LT5vYmplY3Quc2hhMSA6IHNoYTEpLAorCQlub3RfZm9yX21lcmdlID8gIm5vdC1mb3ItbWVyZ2UiIDogIiIsCisJCW5vdGUpOworCXJldHVybiB1cGRhdGVfbG9jYWxfcmVmKGxvY2FsX25hbWUsIGhlYWQsIG5vdGUsIHZlcmJvc2UsIGZvcmNlKTsKK30KKworc3RhdGljIGNoYXIgKmtlZXA7CitzdGF0aWMgdm9pZCByZW1vdmVfa2VlcCh2b2lkKQoreworCWlmIChrZWVwICYmICprZWVwKQorCQl1bmxpbmsoa2VlcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9rZWVwX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJcmVtb3ZlX2tlZXAoKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfbG9jYWxfbmFtZShjb25zdCBjaGFyICpyZW1vdGVfbmFtZSwgY29uc3QgY2hhciAqcmVmcywKKwkJCSAgICAgaW50ICpmb3JjZV9wLCBpbnQgKm5vdF9mb3JfbWVyZ2VfcCkKK3sKKwljb25zdCBjaGFyICpyZWYgPSByZWZzOworCWludCBsZW4gPSBzdHJsZW4ocmVtb3RlX25hbWUpOworCisJd2hpbGUgKHJlZikgeworCQljb25zdCBjaGFyICpuZXh0OworCQlpbnQgc2luZ2xlX2ZvcmNlLCBub3RfZm9yX21lcmdlOworCisJCXdoaWxlICgqcmVmID09ICdcbicpCisJCQlyZWYrKzsKKwkJaWYgKCEqcmVmKQorCQkJYnJlYWs7CisJCW5leHQgPSBzdHJjaHIocmVmLCAnXG4nKTsKKworCQlzaW5nbGVfZm9yY2UgPSBub3RfZm9yX21lcmdlID0gMDsKKwkJaWYgKCpyZWYgPT0gJysnKSB7CisJCQlzaW5nbGVfZm9yY2UgPSAxOworCQkJcmVmKys7CisJCX0KKwkJaWYgKCpyZWYgPT0gJy4nKSB7CisJCQlub3RfZm9yX21lcmdlID0gMTsKKwkJCXJlZisrOworCQkJaWYgKCpyZWYgPT0gJysnKSB7CisJCQkJc2luZ2xlX2ZvcmNlID0gMTsKKwkJCQlyZWYrKzsKKwkJCX0KKwkJfQorCQlpZiAoIXN0cm5jbXAocmVtb3RlX25hbWUsIHJlZiwgbGVuKSAmJiByZWZbbGVuXSA9PSAnOicpIHsKKwkJCWNvbnN0IGNoYXIgKmxvY2FsX3BhcnQgPSByZWYgKyBsZW4gKyAxOworCQkJaW50IHJldGxlbjsKKworCQkJaWYgKCFuZXh0KQorCQkJCXJldGxlbiA9IHN0cmxlbihsb2NhbF9wYXJ0KTsKKwkJCWVsc2UKKwkJCQlyZXRsZW4gPSBuZXh0IC0gbG9jYWxfcGFydDsKKwkJCSpmb3JjZV9wID0gc2luZ2xlX2ZvcmNlOworCQkJKm5vdF9mb3JfbWVyZ2VfcCA9IG5vdF9mb3JfbWVyZ2U7CisJCQlyZXR1cm4geG1lbWR1cHoobG9jYWxfcGFydCwgcmV0bGVuKTsKKwkJfQorCQlyZWYgPSBuZXh0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBmZXRjaF9uYXRpdmVfc3RvcmUoRklMRSAqZnAsCisJCQkgICAgICBjb25zdCBjaGFyICpyZW1vdGUsCisJCQkgICAgICBjb25zdCBjaGFyICpyZW1vdGVfbmljaywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnJlZnMsCisJCQkgICAgICBpbnQgdmVyYm9zZSwgaW50IGZvcmNlKQoreworCWNoYXIgYnVmZmVyWzEwMjRdOworCWludCBlcnIgPSAwOworCisJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVtb3ZlX2tlZXBfb25fc2lnbmFsKTsKKwlhdGV4aXQocmVtb3ZlX2tlZXApOworCisJd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKSkgeworCQlpbnQgbGVuOworCQljaGFyICpjcDsKKwkJY2hhciAqbG9jYWxfbmFtZTsKKwkJaW50IHNpbmdsZV9mb3JjZSwgbm90X2Zvcl9tZXJnZTsKKworCQlmb3IgKGNwID0gYnVmZmVyOyAqY3AgJiYgIWlzc3BhY2UoKmNwKTsgY3ArKykKKwkJCTsKKwkJaWYgKCpjcCkKKwkJCSpjcCsrID0gMDsKKwkJbGVuID0gc3RybGVuKGNwKTsKKwkJaWYgKGxlbiAmJiBjcFtsZW4tMV0gPT0gJ1xuJykKKwkJCWNwWy0tbGVuXSA9IDA7CisJCWlmICghc3RyY21wKGJ1ZmZlciwgImZhaWxlZCIpKQorCQkJZGllKCJGZXRjaCBmYWlsdXJlOiAlcyIsIHJlbW90ZSk7CisJCWlmICghc3RyY21wKGJ1ZmZlciwgInBhY2siKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXN0cmNtcChidWZmZXIsICJrZWVwIikpIHsKKwkJCWNoYXIgKm9kID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwkJCWludCBsZW4gPSBzdHJsZW4ob2QpICsgc3RybGVuKGNwKSArIDUwOworCQkJa2VlcCA9IHhtYWxsb2MobGVuKTsKKwkJCXNwcmludGYoa2VlcCwgIiVzL3BhY2svcGFjay0lcy5rZWVwIiwgb2QsIGNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbG9jYWxfbmFtZSA9IGZpbmRfbG9jYWxfbmFtZShjcCwgcmVmcywKKwkJCQkJICAgICAmc2luZ2xlX2ZvcmNlLCAmbm90X2Zvcl9tZXJnZSk7CisJCWlmICghbG9jYWxfbmFtZSkKKwkJCWNvbnRpbnVlOworCQllcnIgfD0gYXBwZW5kX2ZldGNoX2hlYWQoZnAsCisJCQkJCSBidWZmZXIsIHJlbW90ZSwgY3AsIHJlbW90ZV9uaWNrLAorCQkJCQkgbG9jYWxfbmFtZSwgbm90X2Zvcl9tZXJnZSwKKwkJCQkJIHZlcmJvc2UsIGZvcmNlIHx8IHNpbmdsZV9mb3JjZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcmVmbGlzdChjb25zdCBjaGFyICpyZWZsaXN0KQoreworCWNvbnN0IGNoYXIgKnJlZjsKKworCXByaW50ZigicmVmcz0nIik7CisJZm9yIChyZWYgPSByZWZsaXN0OyByZWY7ICkgeworCQljb25zdCBjaGFyICpuZXh0OworCQl3aGlsZSAoKnJlZiAmJiBpc3NwYWNlKCpyZWYpKQorCQkJcmVmKys7CisJCWlmICghKnJlZikKKwkJCWJyZWFrOworCQlmb3IgKG5leHQgPSByZWY7ICpuZXh0ICYmICFpc3NwYWNlKCpuZXh0KTsgbmV4dCsrKQorCQkJOworCQlwcmludGYoIlxuJS4qcyIsIChpbnQpKG5leHQgLSByZWYpLCByZWYpOworCQlyZWYgPSBuZXh0OworCX0KKwlwcmludGYoIidcbiIpOworCisJcHJpbnRmKCJycmVmPSciKTsKKwlmb3IgKHJlZiA9IHJlZmxpc3Q7IHJlZjsgKSB7CisJCWNvbnN0IGNoYXIgKm5leHQsICpjb2xvbjsKKwkJd2hpbGUgKCpyZWYgJiYgaXNzcGFjZSgqcmVmKSkKKwkJCXJlZisrOworCQlpZiAoISpyZWYpCisJCQlicmVhazsKKwkJZm9yIChuZXh0ID0gcmVmOyAqbmV4dCAmJiAhaXNzcGFjZSgqbmV4dCk7IG5leHQrKykKKwkJCTsKKwkJaWYgKCpyZWYgPT0gJy4nKQorCQkJcmVmKys7CisJCWlmICgqcmVmID09ICcrJykKKwkJCXJlZisrOworCQljb2xvbiA9IHN0cmNocihyZWYsICc6Jyk7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXByaW50ZigiJS4qcyIsIChpbnQpKChjb2xvbiA/IGNvbG9uIDogbmV4dCkgLSByZWYpLCByZWYpOworCQlyZWYgPSBuZXh0OworCX0KKwlwcmludGYoIidcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4cGFuZF9yZWZzX3dpbGRjYXJkKGNvbnN0IGNoYXIgKmxzX3JlbW90ZV9yZXN1bHQsIGludCBudW1yZWZzLAorCQkJCWNvbnN0IGNoYXIgKipyZWZzKQoreworCWludCBpLCBtYXRjaGxlbiwgcmVwbGFjZWxlbjsKKwlpbnQgZm91bmRfb25lID0gMDsKKwljb25zdCBjaGFyICpyZW1vdGUgPSAqcmVmcysrOworCW51bXJlZnMtLTsKKworCWlmIChudW1yZWZzID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJOb3RoaW5nIHNwZWNpZmllZCBmb3IgZmV0Y2hpbmcgd2l0aCByZW1vdGUuJXMuZmV0Y2hcbiIsCisJCQlyZW1vdGUpOworCQlwcmludGYoImVtcHR5XG4iKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtcmVmczsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnJlZiA9IHJlZnNbaV07CisJCWNvbnN0IGNoYXIgKmxyZWYgPSByZWY7CisJCWNvbnN0IGNoYXIgKmNvbG9uOworCQljb25zdCBjaGFyICp0YWlsOworCQljb25zdCBjaGFyICpsczsKKwkJY29uc3QgY2hhciAqbmV4dDsKKworCQlpZiAoKmxyZWYgPT0gJysnKQorCQkJbHJlZisrOworCQljb2xvbiA9IHN0cmNocihscmVmLCAnOicpOworCQl0YWlsID0gbHJlZiArIHN0cmxlbihscmVmKTsKKwkJaWYgKCEoY29sb24gJiYKKwkJICAgICAgMiA8IGNvbG9uIC0gbHJlZiAmJgorCQkgICAgICBjb2xvblstMV0gPT0gJyonICYmCisJCSAgICAgIGNvbG9uWy0yXSA9PSAnLycgJiYKKwkJICAgICAgMiA8IHRhaWwgLSAoY29sb24gKyAxKSAmJgorCQkgICAgICB0YWlsWy0xXSA9PSAnKicgJiYKKwkJICAgICAgdGFpbFstMl0gPT0gJy8nKSkgeworCQkJLyogbm90IGEgZ2xvYiAqLworCQkJaWYgKCFmb3VuZF9vbmUrKykKKwkJCQlwcmludGYoImV4cGxpY2l0XG4iKTsKKwkJCXByaW50ZigiJXNcbiIsIHJlZik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGdsb2IgKi8KKwkJaWYgKCFmb3VuZF9vbmUrKykKKwkJCXByaW50ZigiZ2xvYlxuIik7CisKKwkJLyogbHJlZiB0byBjb2xvbi0yIGlzIHJlbW90ZSBoaWVyYXJjaHkgbmFtZTsKKwkJICogY29sb24rMSB0byB0YWlsLTIgaXMgbG9jYWwuCisJCSAqLworCQltYXRjaGxlbiA9IChjb2xvbi0xKSAtIGxyZWY7CisJCXJlcGxhY2VsZW4gPSAodGFpbC0xKSAtIChjb2xvbisxKTsKKwkJZm9yIChscyA9IGxzX3JlbW90ZV9yZXN1bHQ7IGxzOyBscyA9IG5leHQpIHsKKwkJCWNvbnN0IGNoYXIgKmVvbDsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCQlpbnQgbmFtZWxlbjsKKworCQkJd2hpbGUgKCpscyAmJiBpc3NwYWNlKCpscykpCisJCQkJbHMrKzsKKwkJCW5leHQgPSBzdHJjaHIobHMsICdcbicpOworCQkJZW9sID0gIW5leHQgPyAobHMgKyBzdHJsZW4obHMpKSA6IG5leHQ7CisJCQlpZiAoIW1lbWNtcCgiXnt9IiwgZW9sLTMsIDMpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGVvbCAtIGxzIDwgNDApCisJCQkJY29udGludWU7CisJCQlpZiAoZ2V0X3NoYTFfaGV4KGxzLCBzaGExKSkKKwkJCQljb250aW51ZTsKKwkJCWxzICs9IDQwOworCQkJd2hpbGUgKGxzIDwgZW9sICYmIGlzc3BhY2UoKmxzKSkKKwkJCQlscysrOworCQkJLyogbHMgdG8gbmV4dCAob3IgZW9sKSBpcyB0aGUgbmFtZS4KKwkJCSAqIGlzIGl0IGlkZW50aWNhbCB0byBscmVmIHRvIGNvbG9uLTI/CisJCQkgKi8KKwkJCWlmICgoZW9sIC0gbHMpIDw9IG1hdGNobGVuIHx8CisJCQkgICAgc3RybmNtcChscywgbHJlZiwgbWF0Y2hsZW4pKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBZZXMsIGl0IGlzIGEgbWF0Y2ggKi8KKwkJCW5hbWVsZW4gPSBlb2wgLSBsczsKKwkJCWlmIChscmVmICE9IHJlZikKKwkJCQlwdXRjaGFyKCcrJyk7CisJCQlwcmludGYoIiUuKnM6JS4qcyUuKnNcbiIsCisJCQkgICAgICAgbmFtZWxlbiwgbHMsCisJCQkgICAgICAgcmVwbGFjZWxlbiwgY29sb24gKyAxLAorCQkJICAgICAgIG5hbWVsZW4gLSBtYXRjaGxlbiwgbHMgKyBtYXRjaGxlbik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGlja19ycmVmKGludCBzaGExX29ubHksIGNvbnN0IGNoYXIgKnJyZWYsIGNvbnN0IGNoYXIgKmxzX3JlbW90ZV9yZXN1bHQpCit7CisJaW50IGVyciA9IDA7CisJaW50IGxycl9jb3VudCA9IGxycl9jb3VudCwgaSwgcGFzczsKKwljb25zdCBjaGFyICpjcDsKKwlzdHJ1Y3QgbHJyIHsKKwkJY29uc3QgY2hhciAqbGluZTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJaW50IG5hbWVsZW47CisJCWludCBzaG93bjsKKwl9ICpscnJfbGlzdCA9IGxycl9saXN0OworCisJZm9yIChwYXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykgeworCQkvKiBwYXNzIDAgY291bnRzIGFuZCBhbGxvY2F0ZXMsIHBhc3MgMSBmaWxscy4uLiAqLworCQljcCA9IGxzX3JlbW90ZV9yZXN1bHQ7CisJCWkgPSAwOworCQl3aGlsZSAoMSkgeworCQkJY29uc3QgY2hhciAqbnA7CisJCQl3aGlsZSAoKmNwICYmIGlzc3BhY2UoKmNwKSkKKwkJCQljcCsrOworCQkJaWYgKCEqY3ApCisJCQkJYnJlYWs7CisJCQlucCA9IHN0cmNocm51bChjcCwgJ1xuJyk7CisJCQlpZiAocGFzcykgeworCQkJCWxycl9saXN0W2ldLmxpbmUgPSBjcDsKKwkJCQlscnJfbGlzdFtpXS5uYW1lID0gY3AgKyA0MTsKKwkJCQlscnJfbGlzdFtpXS5uYW1lbGVuID0gbnAgLSAoY3AgKyA0MSk7CisJCQl9CisJCQlpKys7CisJCQljcCA9IG5wOworCQl9CisJCWlmICghcGFzcykgeworCQkJbHJyX2NvdW50ID0gaTsKKwkJCWxycl9saXN0ID0geGNhbGxvYyhscnJfY291bnQsIHNpemVvZigqbHJyX2xpc3QpKTsKKwkJfQorCX0KKworCXdoaWxlICgxKSB7CisJCWNvbnN0IGNoYXIgKm5leHQ7CisJCWludCBycmVmbGVuOworCQlpbnQgaTsKKworCQl3aGlsZSAoKnJyZWYgJiYgaXNzcGFjZSgqcnJlZikpCisJCQlycmVmKys7CisJCWlmICghKnJyZWYpCisJCQlicmVhazsKKwkJbmV4dCA9IHN0cmNocm51bChycmVmLCAnXG4nKTsKKwkJcnJlZmxlbiA9IG5leHQgLSBycmVmOworCisJCWZvciAoaSA9IDA7IGkgPCBscnJfY291bnQ7IGkrKykgeworCQkJc3RydWN0IGxyciAqbHJyID0gJihscnJfbGlzdFtpXSk7CisKKwkJCWlmIChycmVmbGVuID09IGxyci0+bmFtZWxlbiAmJgorCQkJICAgICFtZW1jbXAobHJyLT5uYW1lLCBycmVmLCBycmVmbGVuKSkgeworCQkJCWlmICghbHJyLT5zaG93bikKKwkJCQkJcHJpbnRmKCIlLipzXG4iLAorCQkJCQkgICAgICAgc2hhMV9vbmx5ID8gNDAgOiBscnItPm5hbWVsZW4gKyA0MSwKKwkJCQkJICAgICAgIGxyci0+bGluZSk7CisJCQkJbHJyLT5zaG93biA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGxycl9jb3VudCA8PSBpKSB7CisJCQllcnJvcigicGljay1ycmVmOiAlLipzIG5vdCBmb3VuZCIsIHJyZWZsZW4sIHJyZWYpOworCQkJZXJyID0gMTsKKwkJfQorCQlycmVmID0gbmV4dDsKKwl9CisJZnJlZShscnJfbGlzdCk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGNtZF9mZXRjaF9fdG9vbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgdmVyYm9zZSA9IDA7CisJaW50IGZvcmNlID0gMDsKKwlpbnQgc29wdCA9IDA7CisKKwl3aGlsZSAoMSA8IGFyZ2MpIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndlsxXTsKKwkJaWYgKCFzdHJjbXAoIi12IiwgYXJnKSkKKwkJCXZlcmJvc2UgPSAxOworCQllbHNlIGlmICghc3RyY21wKCItZiIsIGFyZykpCisJCQlmb3JjZSA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoIi1zIiwgYXJnKSkKKwkJCXNvcHQgPSAxOworCQllbHNlCisJCQlicmVhazsKKwkJYXJnYy0tOworCQlhcmd2Kys7CisJfQorCisJaWYgKGFyZ2MgPD0gMSkKKwkJcmV0dXJuIGVycm9yKCJNaXNzaW5nIHN1YmNvbW1hbmQiKTsKKworCWlmICghc3RyY21wKCJhcHBlbmQtZmV0Y2gtaGVhZCIsIGFyZ3ZbMV0pKSB7CisJCWludCByZXN1bHQ7CisJCUZJTEUgKmZwOworCQljaGFyICpmaWxlbmFtZTsKKworCQlpZiAoYXJnYyAhPSA4KQorCQkJcmV0dXJuIGVycm9yKCJhcHBlbmQtZmV0Y2gtaGVhZCB0YWtlcyA2IGFyZ3MiKTsKKwkJZmlsZW5hbWUgPSBnaXRfcGF0aCgiRkVUQ0hfSEVBRCIpOworCQlmcCA9IGZvcGVuKGZpbGVuYW1lLCAiYSIpOworCQlpZiAoIWZwKQorCQkJcmV0dXJuIGVycm9yKCJjYW5ub3Qgb3BlbiAlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmVzdWx0ID0gYXBwZW5kX2ZldGNoX2hlYWQoZnAsIGFyZ3ZbMl0sIGFyZ3ZbM10sCisJCQkJCSAgIGFyZ3ZbNF0sIGFyZ3ZbNV0sCisJCQkJCSAgIGFyZ3ZbNl0sICEhYXJndls3XVswXSwKKwkJCQkJICAgdmVyYm9zZSwgZm9yY2UpOworCQlmY2xvc2UoZnApOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlpZiAoIXN0cmNtcCgibmF0aXZlLXN0b3JlIiwgYXJndlsxXSkpIHsKKwkJaW50IHJlc3VsdDsKKwkJRklMRSAqZnA7CisJCWNoYXIgKmZpbGVuYW1lOworCisJCWlmIChhcmdjICE9IDUpCisJCQlyZXR1cm4gZXJyb3IoImZldGNoLW5hdGl2ZS1zdG9yZSB0YWtlcyAzIGFyZ3MiKTsKKwkJZmlsZW5hbWUgPSBnaXRfcGF0aCgiRkVUQ0hfSEVBRCIpOworCQlmcCA9IGZvcGVuKGZpbGVuYW1lLCAiYSIpOworCQlpZiAoIWZwKQorCQkJcmV0dXJuIGVycm9yKCJjYW5ub3Qgb3BlbiAlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmVzdWx0ID0gZmV0Y2hfbmF0aXZlX3N0b3JlKGZwLCBhcmd2WzJdLCBhcmd2WzNdLCBhcmd2WzRdLAorCQkJCQkgICAgdmVyYm9zZSwgZm9yY2UpOworCQlmY2xvc2UoZnApOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlpZiAoIXN0cmNtcCgicGFyc2UtcmVmbGlzdCIsIGFyZ3ZbMV0pKSB7CisJCWNvbnN0IGNoYXIgKnJlZmxpc3Q7CisJCWlmIChhcmdjICE9IDMpCisJCQlyZXR1cm4gZXJyb3IoInBhcnNlLXJlZmxpc3QgdGFrZXMgMSBhcmciKTsKKwkJcmVmbGlzdCA9IGFyZ3ZbMl07CisJCWlmICghc3RyY21wKHJlZmxpc3QsICItIikpCisJCQlyZWZsaXN0ID0gZ2V0X3N0ZGluKCk7CisJCXJldHVybiBwYXJzZV9yZWZsaXN0KHJlZmxpc3QpOworCX0KKwlpZiAoIXN0cmNtcCgicGljay1ycmVmIiwgYXJndlsxXSkpIHsKKwkJY29uc3QgY2hhciAqbHNfcmVtb3RlX3Jlc3VsdDsKKwkJaWYgKGFyZ2MgIT0gNCkKKwkJCXJldHVybiBlcnJvcigicGljay1ycmVmIHRha2VzIDIgYXJncyIpOworCQlsc19yZW1vdGVfcmVzdWx0ID0gYXJndlszXTsKKwkJaWYgKCFzdHJjbXAobHNfcmVtb3RlX3Jlc3VsdCwgIi0iKSkKKwkJCWxzX3JlbW90ZV9yZXN1bHQgPSBnZXRfc3RkaW4oKTsKKwkJcmV0dXJuIHBpY2tfcnJlZihzb3B0LCBhcmd2WzJdLCBsc19yZW1vdGVfcmVzdWx0KTsKKwl9CisJaWYgKCFzdHJjbXAoImV4cGFuZC1yZWZzLXdpbGRjYXJkIiwgYXJndlsxXSkpIHsKKwkJY29uc3QgY2hhciAqcmVmbGlzdDsKKwkJaWYgKGFyZ2MgPCA0KQorCQkJcmV0dXJuIGVycm9yKCJleHBhbmQtcmVmcy13aWxkY2FyZCB0YWtlcyBhdCBsZWFzdCAyIGFyZ3MiKTsKKwkJcmVmbGlzdCA9IGFyZ3ZbMl07CisJCWlmICghc3RyY21wKHJlZmxpc3QsICItIikpCisJCQlyZWZsaXN0ID0gZ2V0X3N0ZGluKCk7CisJCXJldHVybiBleHBhbmRfcmVmc193aWxkY2FyZChyZWZsaXN0LCBhcmdjIC0gMywgYXJndiArIDMpOworCX0KKworCXJldHVybiBlcnJvcigiVW5rbm93biBzdWJjb21tYW5kOiAlcyIsIGFyZ3ZbMV0pOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtY2hlY2tvdXQuc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1jaGVja291dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYTc2ODlhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtY2hlY2tvdXQuc2gKQEAgLTAsMCArMSwzMDIgQEAKKyMhL2Jpbi9zaAorCitPUFRJT05TX0tFRVBEQVNIREFTSD10CitPUFRJT05TX1NQRUM9IlwKK2dpdC1jaGVja291dCBbb3B0aW9uc10gWzxicmFuY2g+XSBbPHBhdGhzPi4uLl0KKy0tCitiPSAgICAgICAgICBjcmVhdGUgYSBuZXcgYnJhbmNoIHN0YXJ0ZWQgYXQgPGJyYW5jaD4KK2wgICAgICAgICAgIGNyZWF0ZSB0aGUgbmV3IGJyYW5jaCdzIHJlZmxvZwordHJhY2sgICAgICAgYXJyYW5nZSB0aGF0IHRoZSBuZXcgYnJhbmNoIHRyYWNrcyB0aGUgcmVtb3RlIGJyYW5jaAorZiAgICAgICAgICAgcHJvY2VlZCBldmVuIGlmIHRoZSBpbmRleCBvciB3b3JraW5nIHRyZWUgaXMgbm90IEhFQUQKK20gICAgICAgICAgIG1lcmdlIGxvY2FsIG1vZGlmaWNhdGlvbnMgaW50byB0aGUgbmV3IGJyYW5jaAorcSxxdWlldCAgICAgYmUgcXVpZXQKKyIKK1NVQkRJUkVDVE9SWV9PSz1Tb21ldGltZXMKKy4gZ2l0LXNoLXNldHVwCityZXF1aXJlX3dvcmtfdHJlZQorCitvbGRfbmFtZT1IRUFECitvbGQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRvbGRfbmFtZSAyPi9kZXYvbnVsbCkKK29sZGJyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgJG9sZF9uYW1lIDI+L2Rldi9udWxsKQorbmV3PQorbmV3X25hbWU9Citmb3JjZT0KK2JyYW5jaD0KK3RyYWNrPQorbmV3YnJhbmNoPQorbmV3YnJhbmNoX2xvZz0KK21lcmdlPQorcXVpZXQ9Cit2PS12CitMRj0nCisnCisKK3doaWxlIHRlc3QgJCMgIT0gMDsgZG8KKwljYXNlICIkMSIgaW4KKwktYikKKwkJc2hpZnQKKwkJbmV3YnJhbmNoPSIkMSIKKwkJWyAteiAiJG5ld2JyYW5jaCIgXSAmJgorCQkJZGllICJnaXQgY2hlY2tvdXQ6IC1iIG5lZWRzIGEgYnJhbmNoIG5hbWUiCisJCWdpdCBzaG93LXJlZiAtLXZlcmlmeSAtLXF1aWV0IC0tICJyZWZzL2hlYWRzLyRuZXdicmFuY2giICYmCisJCQlkaWUgImdpdCBjaGVja291dDogYnJhbmNoICRuZXdicmFuY2ggYWxyZWFkeSBleGlzdHMiCisJCWdpdCBjaGVjay1yZWYtZm9ybWF0ICJoZWFkcy8kbmV3YnJhbmNoIiB8fAorCQkJZGllICJnaXQgY2hlY2tvdXQ6IHdlIGRvIG5vdCBsaWtlICckbmV3YnJhbmNoJyBhcyBhIGJyYW5jaCBuYW1lLiIKKwkJOzsKKwktbCkKKwkJbmV3YnJhbmNoX2xvZz0tbAorCQk7OworCS0tdHJhY2t8LS1uby10cmFjaykKKwkJdHJhY2s9IiQxIgorCQk7OworCS1mKQorCQlmb3JjZT0xCisJCTs7CisJLW0pCisJCW1lcmdlPTEKKwkJOzsKKwktcXwtLXF1aWV0KQorCQlxdWlldD0xCisJCXY9CisJCTs7CisJLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJKikKKwkJdXNhZ2UKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworYXJnPSIkMSIKK3Jldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRhcmciIDI+L2Rldi9udWxsKQoraWYgcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHJldl4wIiAyPi9kZXYvbnVsbCkKK3RoZW4KKwlbIC16ICIkcmV2IiBdICYmIGRpZSAidW5rbm93biBmbGFnICRhcmciCisJbmV3X25hbWU9IiRhcmciCisJaWYgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0tcXVpZXQgLS0gInJlZnMvaGVhZHMvJGFyZyIKKwl0aGVuCisJCXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgInJlZnMvaGVhZHMvJGFyZ14wIikKKwkJYnJhbmNoPSIkYXJnIgorCWZpCisJbmV3PSIkcmV2IgorCXNoaWZ0CitlbGlmIHJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRyZXZee3RyZWV9IiAyPi9kZXYvbnVsbCkKK3RoZW4KKwkjIGNoZWNraW5nIG91dCBzZWxlY3RlZCBwYXRocyBmcm9tIGEgdHJlZS1pc2guCisJbmV3PSIkcmV2IgorCW5ld19uYW1lPSIkcmV2Xnt0cmVlfSIKKwlzaGlmdAorZmkKK1sgIiQxIiA9ICItLSIgXSAmJiBzaGlmdAorCitjYXNlICIkbmV3YnJhbmNoLCR0cmFjayIgaW4KKywtLSopCisJZGllICJnaXQgY2hlY2tvdXQ6IC0tdHJhY2sgYW5kIC0tbm8tdHJhY2sgcmVxdWlyZSAtYiIKK2VzYWMKKworY2FzZSAiJGZvcmNlJG1lcmdlIiBpbgorMTEpCisJZGllICJnaXQgY2hlY2tvdXQ6IC1mIGFuZCAtbSBhcmUgaW5jb21wYXRpYmxlIgorZXNhYworCisjIFRoZSBiZWhhdmlvdXIgb2YgdGhlIGNvbW1hbmQgd2l0aCBhbmQgd2l0aG91dCBleHBsaWNpdCBwYXRoCisjIHBhcmFtZXRlcnMgaXMgcXVpdGUgZGlmZmVyZW50LgorIworIyBXaXRob3V0IHBhdGhzLCB3ZSBhcmUgY2hlY2tpbmcgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHdvcmsgdHJlZSwKKyMgcG9zc2libHkgc3dpdGNoaW5nIGJyYW5jaGVzLiAgVGhpcyBpcyB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3VyLgorIworIyBXaXRoIHBhdGhzLCB3ZSBhcmUgX25ldmVyXyBzd2l0Y2hpbmcgYnJhbmNoLCBidXQgY2hlY2tpbmcgb3V0CisjIHRoZSBuYW1lZCBwYXRocyBmcm9tIGVpdGhlciBpbmRleCAod2hlbiBubyByZXYgaXMgZ2l2ZW4pLAorIyBvciB0aGUgbmFtZWQgdHJlZS1pc2ggKHdoZW4gcmV2IGlzIGdpdmVuKS4KKworaWYgdGVzdCAiJCMiIC1nZSAxCit0aGVuCisJaGludD0KKwlpZiB0ZXN0ICIkIyIgLWVxIDEKKwl0aGVuCisJCWhpbnQ9IgorRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyRAJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iCisJZmkKKwlpZiB0ZXN0ICcnICE9ICIkbmV3YnJhbmNoJGZvcmNlJG1lcmdlIgorCXRoZW4KKwkJZGllICJnaXQgY2hlY2tvdXQ6IHVwZGF0aW5nIHBhdGhzIGlzIGluY29tcGF0aWJsZSB3aXRoIHN3aXRjaGluZyBicmFuY2hlcy9mb3JjaW5nJGhpbnQiCisJZmkKKwlpZiB0ZXN0ICcnICE9ICIkbmV3IgorCXRoZW4KKwkJIyBmcm9tIGEgc3BlY2lmaWMgdHJlZS1pc2g7IG5vdGUgdGhhdCB0aGlzIGlzIGZvcgorCQkjIHJlc2N1aW5nIHBhdGhzIGFuZCBpcyBuZXZlciBtZWFudCB0byByZW1vdmUgd2hhdAorCQkjIGlzIG5vdCBpbiB0aGUgbmFtZWQgdHJlZS1pc2guCisJCWdpdCBscy10cmVlIC0tZnVsbC1uYW1lIC1yICIkbmV3IiAiJEAiIHwKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gfHwgZXhpdCAkPworCWZpCisKKwkjIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBhYm91dCBleGlzdGluZyBwYXRocy4KKwlnaXQgbHMtZmlsZXMgLS1mdWxsLW5hbWUgLS1lcnJvci11bm1hdGNoIC0tICIkQCIgPi9kZXYvbnVsbCB8fCBleGl0CisJZ2l0IGxzLWZpbGVzIC0tZnVsbC1uYW1lIC0tICIkQCIgfAorCQkoY2RfdG9fdG9wbGV2ZWwgJiYgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IC0tc3RkaW4pCisKKwkjIFJ1biBhIHBvc3QtY2hlY2tvdXQgaG9vayAtLSB0aGUgSEVBRCBkb2VzIG5vdCBjaGFuZ2Ugc28gdGhlCisJIyBjdXJyZW50IEhFQUQgaXMgcGFzc2VkIGluIGZvciBib3RoIGFyZ3MKKwlpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcG9zdC1jaGVja291dDsgdGhlbgorCSAgICAiJEdJVF9ESVIiL2hvb2tzL3Bvc3QtY2hlY2tvdXQgJG9sZCAkb2xkIDAKKwlmaQorCisJZXhpdCAkPworZWxzZQorCSMgTWFrZSBzdXJlIHdlIGRpZCBub3QgZmFsbCBiYWNrIG9uICRhcmdee3RyZWV9IGNvZGVwYXRoCisJIyBzaW5jZSB3ZSBhcmUgbm90IGNoZWNraW5nIG91dCBmcm9tIGFuIGFyYml0cmFyeSB0cmVlLWlzaCwKKwkjIGJ1dCBzd2l0Y2hpbmcgYnJhbmNoZXMuCisJaWYgdGVzdCAnJyAhPSAiJG5ldyIKKwl0aGVuCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRuZXdee2NvbW1pdH0iID4vZGV2L251bGwgMj4mMSB8fAorCQlkaWUgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdC4iCisJZmkKK2ZpCisKKyMgV2UgYXJlIHN3aXRjaGluZyBicmFuY2hlcyBhbmQgY2hlY2tpbmcgb3V0IHRyZWVzLCBzbworIyB3ZSAqTkVFRCogdG8gYmUgYXQgdGhlIHRvcGxldmVsLgorY2RfdG9fdG9wbGV2ZWwKKworWyAteiAiJG5ldyIgXSAmJiBuZXc9JG9sZCAmJiBuZXdfbmFtZT0iJG9sZF9uYW1lIgorCisjIElmIHdlIGRvbid0IGhhdmUgYW4gZXhpc3RpbmcgYnJhbmNoIHRoYXQgd2UncmUgc3dpdGNoaW5nIHRvLAorIyBhbmQgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBicmFuY2ggbmFtZSBmb3IgdGhlIHRhcmdldCB3ZQorIyBhcmUgc3dpdGNoaW5nIHRvLCB0aGVuIHdlIGFyZSBkZXRhY2hpbmcgb3VyIEhFQUQgZnJvbSBhbnkKKyMgYnJhbmNoLiAgSG93ZXZlciwgaWYgImdpdCBjaGVja291dCBIRUFEIiBkZXRhY2hlcyB0aGUgSEVBRAorIyBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCwgZXZlbiB0aG91Z2ggdGhhdCBtYXkgYmUgbG9naWNhbGx5CisjIGNvcnJlY3QsIGl0IGZlZWxzIHNvbWV3aGF0IGZ1bm55LiAgTW9yZSBpbXBvcnRhbnRseSwgd2UgZG8gbm90CisjIHdhbnQgImdpdCBjaGVja291dCIgbm9yICJnaXQgY2hlY2tvdXQgLWYiIHRvIGRldGFjaCBIRUFELgorCitkZXRhY2hlZD0KK2RldGFjaF93YXJuPQorCitkZXNjcmliZV9kZXRhY2hlZF9oZWFkICgpIHsKKwl0ZXN0IC1uICIkcXVpZXQiIHx8IHsKKwkJcHJpbnRmID4mMiAiJDEgIgorCQlHSVRfUEFHRVI9IGdpdCBsb2cgPiYyIC0xIC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0ICIkMiIgLS0KKwl9Cit9CisKK2lmIHRlc3QgLXogIiRicmFuY2gkbmV3YnJhbmNoIiAmJiB0ZXN0ICIkbmV3X25hbWUiICE9ICIkb2xkX25hbWUiCit0aGVuCisJZGV0YWNoZWQ9IiRuZXciCisJaWYgdGVzdCAtbiAiJG9sZGJyYW5jaCIgJiYgdGVzdCAteiAiJHF1aWV0IgorCXRoZW4KKwkJZGV0YWNoX3dhcm49Ik5vdGU6IG1vdmluZyB0byBcIiRuZXdfbmFtZVwiIHdoaWNoIGlzbid0IGEgbG9jYWwgYnJhbmNoCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGZyb20gdGhpcyBjaGVja291dCwgeW91IG1heSBkbyBzbworKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZToKKyAgZ2l0IGNoZWNrb3V0IC1iIDxuZXdfYnJhbmNoX25hbWU+IgorCWZpCitlbGlmIHRlc3QgLXogIiRvbGRicmFuY2giICYmIHRlc3QgIiRuZXciICE9ICIkb2xkIgordGhlbgorCWRlc2NyaWJlX2RldGFjaGVkX2hlYWQgJ1ByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzJyAiJG9sZCIKK2ZpCisKK2lmIFsgIlgkb2xkIiA9IFggXQordGhlbgorCWlmIHRlc3QgLXogIiRxdWlldCIKKwl0aGVuCisJCWVjaG8gPiYyICJ3YXJuaW5nOiBZb3UgYXBwZWFyIHRvIGJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuLiIKKwkJZWNobyA+JjIgIndhcm5pbmc6IEZvcmNpbmcgY2hlY2tvdXQgb2YgJG5ld19uYW1lLiIKKwlmaQorCWZvcmNlPTEKK2ZpCisKK2lmIFsgIiRmb3JjZSIgXQordGhlbgorICAgIGdpdCByZWFkLXRyZWUgJHYgLS1yZXNldCAtdSAkbmV3CitlbHNlCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggPi9kZXYvbnVsbAorICAgIGdpdCByZWFkLXRyZWUgJHYgLW0gLXUgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSAkb2xkICRuZXcgfHwgKAorCWNhc2UgIiRtZXJnZSwkdiIgaW4KKwksKikKKwkJZXhpdCAxIDs7CisJMSwpCisJCTs7ICMgcXVpZXQKKwkqKQorCQllY2hvID4mMiAiRmFsbGluZyBiYWNrIHRvIDMtd2F5IG1lcmdlLi4uIiA7OworCWVzYWMKKworCSMgTWF0Y2ggdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBkbyBhIHRocmVlLXdheS4KKwlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSB8IGdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1zdGRpbiAmJgorCXdvcms9YGdpdCB3cml0ZS10cmVlYCAmJgorCWdpdCByZWFkLXRyZWUgJHYgLS1yZXNldCAtdSAkbmV3IHx8IGV4aXQKKworCWV2YWwgR0lUSEVBRF8kbmV3PScke25ld19uYW1lOi0ke2JyYW5jaDotJG5ld319JyAmJgorCWV2YWwgR0lUSEVBRF8kd29yaz1sb2NhbCAmJgorCWV4cG9ydCBHSVRIRUFEXyRuZXcgR0lUSEVBRF8kd29yayAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgJG9sZCAtLSAkbmV3ICR3b3JrCisKKwkjIERvIG5vdCByZWdpc3RlciB0aGUgY2xlYW5seSBtZXJnZWQgcGF0aHMgaW4gdGhlIGluZGV4IHlldC4KKwkjIHRoaXMgaXMgbm90IGEgcmVhbCBtZXJnZSBiZWZvcmUgY29tbWl0dGluZywgYnV0IGp1c3QgY2FycnlpbmcKKwkjIHRoZSB3b3JraW5nIHRyZWUgY2hhbmdlcyBhbG9uZy4KKwl1bm1lcmdlZD1gZ2l0IGxzLWZpbGVzIC11YAorCWdpdCByZWFkLXRyZWUgJHYgLS1yZXNldCAkbmV3CisJY2FzZSAiJHVubWVyZ2VkIiBpbgorCScnKQk7OworCSopCisJCSgKKwkJCXo0MD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisJCQllY2hvICIkdW5tZXJnZWQiIHwKKwkJCXNlZCAtZSAncy9eWzAtN10qIFswLTlhLWZdKiAvJyIwICR6NDAgLyIKKwkJCWVjaG8gIiR1bm1lcmdlZCIKKwkJKSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvCisJCTs7CisJZXNhYworCWV4aXQgMAorICAgICkKKyAgICBzYXZlZF9lcnI9JD8KKyAgICBpZiB0ZXN0ICIkc2F2ZWRfZXJyIiA9IDAgJiYgdGVzdCAteiAiJHF1aWV0IgorICAgIHRoZW4KKwlnaXQgZGlmZi1pbmRleCAtLW5hbWUtc3RhdHVzICIkbmV3IgorICAgIGZpCisgICAgKGV4aXQgJHNhdmVkX2VycikKK2ZpCisKKyMKKyMgU3dpdGNoIHRoZSBIRUFEIHBvaW50ZXIgdG8gdGhlIG5ldyBicmFuY2ggaWYgd2UKKyMgY2hlY2tlZCBvdXQgYSBicmFuY2ggaGVhZCwgYW5kIHJlbW92ZSBhbnkgcG90ZW50aWFsCisjIG9sZCBNRVJHRV9IRUFEJ3MgKHN1YnNlcXVlbnQgY29tbWl0cyB3aWxsIGNsZWFybHkgbm90CisjIGJlIGJhc2VkIG9uIHRoZW0sIHNpbmNlIHdlIHJlLXNldCB0aGUgaW5kZXgpCisjCitpZiBbICIkPyIgLWVxIDAgXTsgdGhlbgorCWlmIFsgIiRuZXdicmFuY2giIF07IHRoZW4KKwkJZ2l0IGJyYW5jaCAkdHJhY2sgJG5ld2JyYW5jaF9sb2cgIiRuZXdicmFuY2giICIkbmV3X25hbWUiIHx8IGV4aXQKKwkJYnJhbmNoPSIkbmV3YnJhbmNoIgorCWZpCisJaWYgdGVzdCAtbiAiJGJyYW5jaCIKKwl0aGVuCisJCW9sZF9icmFuY2hfbmFtZT1gZXhwciAieiRvbGRicmFuY2giIDogJ3pyZWZzL2hlYWRzL1woLipcKSdgCisJCUdJVF9ESVI9IiRHSVRfRElSIiBnaXQgc3ltYm9saWMtcmVmIC1tICJjaGVja291dDogbW92aW5nIGZyb20gJHtvbGRfYnJhbmNoX25hbWU6LSRvbGR9IHRvICRicmFuY2giIEhFQUQgInJlZnMvaGVhZHMvJGJyYW5jaCIKKwkJaWYgdGVzdCAtbiAiJHF1aWV0IgorCQl0aGVuCisJCQl0cnVlCSMgbm90aGluZworCQllbGlmIHRlc3QgInJlZnMvaGVhZHMvJGJyYW5jaCIgPSAiJG9sZGJyYW5jaCIKKwkJdGhlbgorCQkJZWNobyA+JjIgIkFscmVhZHkgb24gYnJhbmNoIFwiJGJyYW5jaFwiIgorCQllbHNlCisJCQllY2hvID4mMiAiU3dpdGNoZWQgdG8ke25ld2JyYW5jaDorIGEgbmV3fSBicmFuY2ggXCIkYnJhbmNoXCIiCisJCWZpCisJZWxpZiB0ZXN0IC1uICIkZGV0YWNoZWQiCisJdGhlbgorCQlvbGRfYnJhbmNoX25hbWU9YGV4cHIgInokb2xkYnJhbmNoIiA6ICd6cmVmcy9oZWFkcy9cKC4qXCknYAorCQlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1tICJjaGVja291dDogbW92aW5nIGZyb20gJHtvbGRfYnJhbmNoX25hbWU6LSRvbGR9IHRvICRhcmciIEhFQUQgIiRkZXRhY2hlZCIgfHwKKwkJCWRpZSAiQ2Fubm90IGRldGFjaCBIRUFEIgorCQlpZiB0ZXN0IC1uICIkZGV0YWNoX3dhcm4iCisJCXRoZW4KKwkJCWVjaG8gPiYyICIkZGV0YWNoX3dhcm4iCisJCWZpCisJCWRlc2NyaWJlX2RldGFjaGVkX2hlYWQgJ0hFQUQgaXMgbm93IGF0JyBIRUFECisJZmkKKwlybSAtZiAiJEdJVF9ESVIvTUVSR0VfSEVBRCIKK2Vsc2UKKwlleGl0IDEKK2ZpCisKKyMgUnVuIGEgcG9zdC1jaGVja291dCBob29rCitpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcG9zdC1jaGVja291dDsgdGhlbgorCSIkR0lUX0RJUiIvaG9va3MvcG9zdC1jaGVja291dCAkb2xkICRuZXcgMQorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWNsZWFuLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtY2xlYW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDFjOTVlOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWNsZWFuLnNoCkBAIC0wLDAgKzEsMTE4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDYgUGF2ZWwgUm9za2luCisjCisKK09QVElPTlNfS0VFUERBU0hEQVNIPQorT1BUSU9OU19TUEVDPSJcCitnaXQtY2xlYW4gW29wdGlvbnNdIDxwYXRocz4uLi4KKworQ2xlYW4gdW50cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5CisKK1doZW4gb3B0aW9uYWwgPHBhdGhzPi4uLiBhcmd1bWVudHMgYXJlIGdpdmVuLCB0aGUgcGF0aHMKK2FmZmVjdGVkIGFyZSBmdXJ0aGVyIGxpbWl0ZWQgdG8gdGhvc2UgdGhhdCBtYXRjaCB0aGVtLgorLS0KK2QgcmVtb3ZlIGRpcmVjdG9yaWVzIGFzIHdlbGwKK2Ygb3ZlcnJpZGUgY2xlYW4ucmVxdWlyZUZvcmNlIGFuZCBjbGVhbiBhbnl3YXkKK24gZG9uJ3QgcmVtb3ZlIGFueXRoaW5nLCBqdXN0IHNob3cgd2hhdCB3b3VsZCBiZSBkb25lCitxIGJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMKK3ggcmVtb3ZlIGlnbm9yZWQgZmlsZXMgYXMgd2VsbAorWCByZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorCitTVUJESVJFQ1RPUllfT0s9WWVzCisuIGdpdC1zaC1zZXR1cAorcmVxdWlyZV93b3JrX3RyZWUKKworaWdub3JlZD0KK2lnbm9yZWRvbmx5PQorY2xlYW5kaXI9CitybWY9InJtIC1mIC0tIgorcm1yZj0icm0gLXJmIC0tIgorcm1fcmVmdXNlPSJlY2hvIE5vdCByZW1vdmluZyIKK2VjaG8xPSJlY2hvIgorCitkaXNhYmxlZD0kKGdpdCBjb25maWcgLS1ib29sIGNsZWFuLnJlcXVpcmVGb3JjZSkKKword2hpbGUgdGVzdCAkIyAhPSAwCitkbworCWNhc2UgIiQxIiBpbgorCS1kKQorCQljbGVhbmRpcj0xCisJCTs7CisJLWYpCisJCWRpc2FibGVkPWZhbHNlCisJCTs7CisJLW4pCisJCWRpc2FibGVkPWZhbHNlCisJCXJtZj0iZWNobyBXb3VsZCByZW1vdmUiCisJCXJtcmY9ImVjaG8gV291bGQgcmVtb3ZlIgorCQlybV9yZWZ1c2U9ImVjaG8gV291bGQgbm90IHJlbW92ZSIKKwkJZWNobzE9IjoiCisJCTs7CisJLXEpCisJCWVjaG8xPSI6IgorCQk7OworCS14KQorCQlpZ25vcmVkPTEKKwkJOzsKKwktWCkKKwkJaWdub3JlZG9ubHk9MQorCQk7OworCS0tKQorCQlzaGlmdAorCQlicmVhaworCQk7OworCSopCisJCXVzYWdlICMgc2hvdWxkIG5vdCBoYXBwZW4KKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworIyByZXF1aXJlRm9yY2UgdXNlZCB0byBkZWZhdWx0IHRvIGZhbHNlIGJ1dCBub3cgaXQgZGVmYXVsdHMgdG8gdHJ1ZS4KKyMgSU9XLCBsYWNrIG9mIGV4cGxpY2l0ICJjbGVhbi5yZXF1aXJlRm9yY2UgPSBmYWxzZSIgaXMgdGFrZW4gYXMKKyMgImNsZWFuLnJlcXVpcmVGb3JjZSA9IHRydWUiLgorY2FzZSAiJGRpc2FibGVkIiBpbgorIiIpCisJZGllICJjbGVhbi5yZXF1aXJlRm9yY2Ugbm90IHNldCBhbmQgLW4gb3IgLWYgbm90IGdpdmVuOyByZWZ1c2luZyB0byBjbGVhbiIKKwk7OworInRydWUiKQorCWRpZSAiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCBhbmQgLW4gb3IgLWYgbm90IGdpdmVuOyByZWZ1c2luZyB0byBjbGVhbiIKKwk7OworZXNhYworCitpZiBbICIkaWdub3JlZCwkaWdub3JlZG9ubHkiID0gIjEsMSIgXTsgdGhlbgorCWRpZSAiLXggYW5kIC1YIGNhbm5vdCBiZSBzZXQgdG9nZXRoZXIiCitmaQorCitpZiBbIC16ICIkaWdub3JlZCIgXTsgdGhlbgorCWV4Y2w9Ii0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PS5naXRpZ25vcmUiCisJZXhjbF9pbmZvPSBleGNsdWRlc19maWxlPQorCWlmIFsgLWYgIiRHSVRfRElSL2luZm8vZXhjbHVkZSIgXTsgdGhlbgorCQlleGNsX2luZm89Ii0tZXhjbHVkZS1mcm9tPSRHSVRfRElSL2luZm8vZXhjbHVkZSIKKwlmaQorCWlmIGNmZ19leGNsPSQoZ2l0IGNvbmZpZyBjb3JlLmV4Y2x1ZGVzZmlsZSkgJiYgdGVzdCAtZiAiJGNmZ19leGNsIgorCXRoZW4KKwkJZXhjbHVkZXNfZmlsZT0iLS1leGNsdWRlLWZyb209JGNmZ19leGNsIgorCWZpCisJaWYgWyAiJGlnbm9yZWRvbmx5IiBdOyB0aGVuCisJCWV4Y2w9IiRleGNsIC0taWdub3JlZCIKKwlmaQorZmkKKworZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5IFwKKwkkZXhjbCAke2V4Y2xfaW5mbzorIiRleGNsX2luZm8ifSAke2V4Y2x1ZGVzX2ZpbGU6KyIkZXhjbHVkZXNfZmlsZSJ9IFwKKwktLSAiJEAiIHwKK3doaWxlIHJlYWQgLXIgZmlsZTsgZG8KKwlpZiBbIC1kICIkZmlsZSIgLWEgISAtTCAiJGZpbGUiIF07IHRoZW4KKwkJaWYgWyAteiAiJGNsZWFuZGlyIiBdOyB0aGVuCisJCQkkcm1fcmVmdXNlICIkZmlsZSIKKwkJCWNvbnRpbnVlCisJCWZpCisJCSRlY2hvMSAiUmVtb3ZpbmcgJGZpbGUiCisJCSRybXJmICIkZmlsZSIKKwllbHNlCisJCSRlY2hvMSAiUmVtb3ZpbmcgJGZpbGUiCisJCSRybWYgIiRmaWxlIgorCWZpCitkb25lCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1jbG9uZS5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0NzIyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1jbG9uZS5zaApAQCAtMCwwICsxLDUyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSwgTGludXMgVG9ydmFsZHMKKyMgQ29weXJpZ2h0IChjKSAyMDA1LCBKdW5pbyBDIEhhbWFubworIworIyBDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIGRpZmZlcmVudCBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCB5ZXQgZXhpc3QuCisKKyMgU2VlIGdpdC1zaC1zZXR1cCB3aHkuCit1bnNldCBDRFBBVEgKKworT1BUSU9OU19TUEVDPSJcCitnaXQtY2xvbmUgW29wdGlvbnNdIFstLV0gPHJlcG8+IFs8ZGlyPl0KKy0tCituLG5vLWNoZWNrb3V0ICAgICAgICBkb24ndCBjcmVhdGUgYSBjaGVja291dAorYmFyZSAgICAgICAgICAgICAgICAgY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5CituYWtlZCAgICAgICAgICAgICAgICBjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkKK2wsbG9jYWwgICAgICAgICAgICAgIHRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5Cituby1oYXJkbGlua3MgICAgICAgICBkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weQorcyxzaGFyZWQgICAgICAgICAgICAgc2V0dXAgYXMgYSBzaGFyZWQgcmVwb3NpdG9yeQordGVtcGxhdGU9ICAgICAgICAgICAgcGF0aCB0byB0aGUgdGVtcGxhdGUgZGlyZWN0b3J5CitxLHF1aWV0ICAgICAgICAgICAgICBiZSBxdWlldAorcmVmZXJlbmNlPSAgICAgICAgICAgcmVmZXJlbmNlIHJlcG9zaXRvcnkKK28sb3JpZ2luPSAgICAgICAgICAgIHVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbQordSx1cGxvYWQtcGFjaz0gICAgICAgcGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZQorZGVwdGg9ICAgICAgICAgICAgICAgY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoCisKK3VzZS1zZXBhcmF0ZS1yZW1vdGUgIGNvbXBhdGliaWxpdHksIGRvIG5vdCB1c2UKK25vLXNlcGFyYXRlLXJlbW90ZSAgIGNvbXBhdGliaWxpdHksIGRvIG5vdCB1c2UiCisKK2RpZSgpIHsKKwllY2hvID4mMiAiJEAiCisJZXhpdCAxCit9CisKK3VzYWdlKCkgeworCWV4ZWMgIiQwIiAtaAorfQorCitldmFsICIkKGVjaG8gIiRPUFRJT05TX1NQRUMiIHwgZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tICIkQCIgfHwgZWNobyBleGl0ICQ/KSIKKworZ2V0X3JlcG9fYmFzZSgpIHsKKwkoCisJCWNkICJgL2Jpbi9wd2RgIiAmJgorCQljZCAiJDEiIHx8IGNkICIkMS5naXQiICYmCisJCXsKKwkJCWNkIC5naXQKKwkJCXB3ZAorCQl9CisJKSAyPi9kZXYvbnVsbAorfQorCitpZiBbIC1uICIkR0lUX1NTTF9OT19WRVJJRlkiIC1vIFwKKwkiYGdpdCBjb25maWcgLS1ib29sIGh0dHAuc3NsVmVyaWZ5YCIgPSBmYWxzZSBdOyB0aGVuCisgICAgY3VybF9leHRyYV9hcmdzPSItayIKK2ZpCisKK2h0dHBfZmV0Y2ggKCkgeworCSMgJDEgPSBSZW1vdGUsICQyID0gTG9jYWwKKwljdXJsIC1uc2ZMICRjdXJsX2V4dHJhX2FyZ3MgIiQxIiA+IiQyIgorCWN1cmxfZXhpdF9zdGF0dXM9JD8KKwljYXNlICRjdXJsX2V4aXRfc3RhdHVzIGluCisJMTI2fDEyNykgZXhpdCA7OworCSopCSByZXR1cm4gJGN1cmxfZXhpdF9zdGF0dXMgOzsKKwllc2FjCit9CisKK2Nsb25lX2R1bWJfaHR0cCAoKSB7CisJIyAkMSAtIHJlbW90ZSwgJDIgLSBsb2NhbAorCWNkICIkMiIgJiYKKwljbG9uZV90bXA9IiRHSVRfRElSL2Nsb25lLXRtcCIgJiYKKwlta2RpciAtcCAiJGNsb25lX3RtcCIgfHwgZXhpdCAxCisJaWYgWyAtbiAiJEdJVF9DVVJMX0ZUUF9OT19FUFNWIiAtbyBcCisJCSJgZ2l0IGNvbmZpZyAtLWJvb2wgaHR0cC5ub0VQU1ZgIiA9IHRydWUgXTsgdGhlbgorCQljdXJsX2V4dHJhX2FyZ3M9IiR7Y3VybF9leHRyYV9hcmdzfSAtLWRpc2FibGUtZXBzdiIKKwlmaQorCWh0dHBfZmV0Y2ggIiQxL2luZm8vcmVmcyIgIiRjbG9uZV90bXAvcmVmcyIgfHwKKwkJZGllICJDYW5ub3QgZ2V0IHJlbW90ZSByZXBvc2l0b3J5IGluZm9ybWF0aW9uLgorUGVyaGFwcyBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIG5lZWRzIHRvIGJlIHJ1biB0aGVyZT8iCisJdGVzdCAieiRxdWlldCIgPSB6ICYmIHY9LXYgfHwgdj0KKwl3aGlsZSByZWFkIHNoYTEgcmVmbmFtZQorCWRvCisJCW5hbWU9YGV4cHIgInokcmVmbmFtZSIgOiAnenJlZnMvXCguKlwpJ2AgJiYKKwkJY2FzZSAiJG5hbWUiIGluCisJCSpeKikJY29udGludWU7OworCQllc2FjCisJCWNhc2UgIiRiYXJlLCRuYW1lIiBpbgorCQl5ZXMsKiB8ICxoZWFkcy8qIHwgLHRhZ3MvKikgOzsKKwkJKikJY29udGludWUgOzsKKwkJZXNhYworCQlpZiB0ZXN0IC1uICIkdXNlX3NlcGFyYXRlX3JlbW90ZSIgJiYKKwkJICAgYnJhbmNoX25hbWU9YGV4cHIgInokbmFtZSIgOiAnemhlYWRzL1woLipcKSdgCisJCXRoZW4KKwkJCXRuYW1lPSJyZW1vdGVzLyRvcmlnaW4vJGJyYW5jaF9uYW1lIgorCQllbHNlCisJCQl0bmFtZT0kbmFtZQorCQlmaQorCQlnaXQtaHR0cC1mZXRjaCAkdiAtYSAtdyAiJHRuYW1lIiAiJHNoYTEiICIkMSIgfHwgZXhpdCAxCisJZG9uZSA8IiRjbG9uZV90bXAvcmVmcyIKKwlybSAtZnIgIiRjbG9uZV90bXAiCisJaHR0cF9mZXRjaCAiJDEvSEVBRCIgIiRHSVRfRElSL1JFTU9URV9IRUFEIiB8fAorCXJtIC1mICIkR0lUX0RJUi9SRU1PVEVfSEVBRCIKKwlpZiB0ZXN0IC1mICIkR0lUX0RJUi9SRU1PVEVfSEVBRCI7IHRoZW4KKwkJaGVhZF9zaGExPWBjYXQgIiRHSVRfRElSL1JFTU9URV9IRUFEImAKKwkJY2FzZSAiJGhlYWRfc2hhMSIgaW4KKwkJJ3JlZjogcmVmcy8nKikKKwkJCTs7CisJCSopCisJCQlnaXQtaHR0cC1mZXRjaCAkdiAtYSAiJGhlYWRfc2hhMSIgIiQxIiB8fAorCQkJcm0gLWYgIiRHSVRfRElSL1JFTU9URV9IRUFEIgorCQkJOzsKKwkJZXNhYworCWZpCit9CisKK3F1aWV0PQorbG9jYWw9bm8KK3VzZV9sb2NhbF9oYXJkbGluaz15ZXMKK2xvY2FsX3NoYXJlZD1ubwordW5zZXQgdGVtcGxhdGUKK25vX2NoZWNrb3V0PQordXBsb2FkX3BhY2s9CitiYXJlPQorcmVmZXJlbmNlPQorb3JpZ2luPQorb3JpZ2luX292ZXJyaWRlPQordXNlX3NlcGFyYXRlX3JlbW90ZT10CitkZXB0aD0KK25vX3Byb2dyZXNzPQorbG9jYWxfZXhwbGljaXRseV9hc2tlZF9mb3I9Cit0ZXN0IC10IDEgfHwgbm9fcHJvZ3Jlc3M9LS1uby1wcm9ncmVzcworCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLW58LS1uby1jaGVja291dCkKKwkJbm9fY2hlY2tvdXQ9eWVzIDs7CisJLS1uYWtlZHwtLWJhcmUpCisJCWJhcmU9eWVzIDs7CisJLWx8LS1sb2NhbCkKKwkJbG9jYWxfZXhwbGljaXRseV9hc2tlZF9mb3I9eWVzCisJCXVzZV9sb2NhbF9oYXJkbGluaz15ZXMKKwkJOzsKKwktLW5vLWhhcmRsaW5rcykKKwkJdXNlX2xvY2FsX2hhcmRsaW5rPW5vIDs7CisJLXN8LS1zaGFyZWQpCisJCWxvY2FsX3NoYXJlZD15ZXMgOzsKKwktLXRlbXBsYXRlKQorCQlzaGlmdDsgdGVtcGxhdGU9Ii0tdGVtcGxhdGU9JDEiIDs7CisJLXF8LS1xdWlldCkKKwkJcXVpZXQ9LXEgOzsKKwktLXVzZS1zZXBhcmF0ZS1yZW1vdGV8LS1uby1zZXBhcmF0ZS1yZW1vdGUpCisJCWRpZSAiY2xvbmVzIGFyZSBhbHdheXMgbWFkZSB3aXRoIHNlcGFyYXRlLXJlbW90ZSBsYXlvdXQiIDs7CisJLS1yZWZlcmVuY2UpCisJCXNoaWZ0OyByZWZlcmVuY2U9IiQxIiA7OworCS1vfC0tb3JpZ2luKQorCQlzaGlmdDsKKwkJY2FzZSAiJDEiIGluCisJCScnKQorCQkgICAgdXNhZ2UgOzsKKwkJKi8qKQorCQkgICAgZGllICInJDEnIGlzIG5vdCBzdWl0YWJsZSBmb3IgYW4gb3JpZ2luIG5hbWUiCisJCWVzYWMKKwkJZ2l0IGNoZWNrLXJlZi1mb3JtYXQgImhlYWRzLyQxIiB8fAorCQkgICAgZGllICInJDEnIGlzIG5vdCBzdWl0YWJsZSBmb3IgYSBicmFuY2ggbmFtZSIKKwkJdGVzdCAteiAiJG9yaWdpbl9vdmVycmlkZSIgfHwKKwkJICAgIGRpZSAiRG8gbm90IGdpdmUgbW9yZSB0aGFuIG9uZSAtLW9yaWdpbiBvcHRpb25zLiIKKwkJb3JpZ2luX292ZXJyaWRlPXllcworCQlvcmlnaW49IiQxIgorCQk7OworCS11fC0tdXBsb2FkLXBhY2spCisJCXNoaWZ0CisJCXVwbG9hZF9wYWNrPSItLXVwbG9hZC1wYWNrPSQxIiA7OworCS0tZGVwdGgpCisJCXNoaWZ0CisJCWRlcHRoPSItLWRlcHRoPSQxIiA7OworCS0tKQorCQlzaGlmdAorCQlicmVhayA7OworCSopCisJCXVzYWdlIDs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK3JlcG89IiQxIgordGVzdCAtbiAiJHJlcG8iIHx8CisgICAgZGllICd5b3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4nCisKKyMgLS1iYXJlIGltcGxpZXMgLS1uby1jaGVja291dCBhbmQgLS1uby1zZXBhcmF0ZS1yZW1vdGUKK2lmIHRlc3QgeWVzID0gIiRiYXJlIgordGhlbgorCWlmIHRlc3QgeWVzID0gIiRvcmlnaW5fb3ZlcnJpZGUiCisJdGhlbgorCQlkaWUgJy0tYmFyZSBhbmQgLS1vcmlnaW4gJG9yaWdpbiBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuJworCWZpCisJbm9fY2hlY2tvdXQ9eWVzCisJdXNlX3NlcGFyYXRlX3JlbW90ZT0KK2ZpCisKK2lmIHRlc3QgLXogIiRvcmlnaW4iCit0aGVuCisJb3JpZ2luPW9yaWdpbgorZmkKKworIyBUdXJuIHRoZSBzb3VyY2UgaW50byBhbiBhYnNvbHV0ZSBwYXRoIGlmCisjIGl0IGlzIGxvY2FsCitpZiBiYXNlPSQoZ2V0X3JlcG9fYmFzZSAiJHJlcG8iKTsgdGhlbgorCXJlcG89IiRiYXNlIgorCWlmIHRlc3QgLXogIiRkZXB0aCIKKwl0aGVuCisJCWxvY2FsPXllcworCWZpCitlbGlmIHRlc3QgLWYgIiRyZXBvIgordGhlbgorCWNhc2UgIiRyZXBvIiBpbiAvKikgOzsgKikgcmVwbz0iJFBXRC8kcmVwbyIgOzsgZXNhYworZmkKKworIyBEZWNpZGUgdGhlIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSBuZXcgcmVwb3NpdG9yeQoraWYgdGVzdCAtbiAiJDIiCit0aGVuCisJZGlyPSIkMiIKKwl0ZXN0ICQjID0gMiB8fCBkaWUgImV4Y2VzcyBwYXJhbWV0ZXIgdG8gZ2l0LWNsb25lIgorZWxzZQorCSMgRGVyaXZlIG9uZSBmcm9tIHRoZSByZXBvc2l0b3J5IG5hbWUKKwkjIFRyeSB1c2luZyAiaHVtYW5pc2giIHBhcnQgb2Ygc291cmNlIHJlcG8gaWYgdXNlciBkaWRuJ3Qgc3BlY2lmeSBvbmUKKwlpZiB0ZXN0IC1mICIkcmVwbyIKKwl0aGVuCisJCSMgQ2xvbmluZyBmcm9tIGEgYnVuZGxlCisJCWRpcj0kKGVjaG8gIiRyZXBvIiB8IHNlZCAtZSAnc3wvKlwuYnVuZGxlJHx8JyAtZSAnc3wuKi98fGcnKQorCWVsc2UKKwkJZGlyPSQoZWNobyAiJHJlcG8iIHwKKwkJCXNlZCAtZSAnc3wvJHx8JyAtZSAnc3w6Ki8qXC5naXQkfHwnIC1lICdzfC4qWy86XXx8ZycpCisJZmkKK2ZpCisKK1sgLWUgIiRkaXIiIF0gJiYgZGllICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgJyRkaXInIGFscmVhZHkgZXhpc3RzLiIKK1sgeWVzID0gIiRiYXJlIiBdICYmIHVuc2V0IEdJVF9XT1JLX1RSRUUKK1sgLW4gIiRHSVRfV09SS19UUkVFIiBdICYmIFsgLWUgIiRHSVRfV09SS19UUkVFIiBdICYmCitkaWUgIndvcmtpbmcgdHJlZSAnJEdJVF9XT1JLX1RSRUUnIGFscmVhZHkgZXhpc3RzLiIKK0Q9CitXPQorY2xlYW51cCgpIHsKKwl0ZXN0IC16ICIkRCIgJiYgcm0gLXJmICIkZGlyIgorCXRlc3QgLXogIiRXIiAmJiB0ZXN0IC1uICIkR0lUX1dPUktfVFJFRSIgJiYgcm0gLXJmICIkR0lUX1dPUktfVFJFRSIKKwljZCAuLgorCXRlc3QgLW4gIiREIiAmJiBybSAtcmYgIiREIgorCXRlc3QgLW4gIiRXIiAmJiBybSAtcmYgIiRXIgorCWV4aXQgJGVycgorfQordHJhcCAnZXJyPSQ/OyBjbGVhbnVwJyAwCitta2RpciAtcCAiJGRpciIgJiYgRD0kKGNkICIkZGlyIiAmJiBwd2QpIHx8IHVzYWdlCit0ZXN0IC1uICIkR0lUX1dPUktfVFJFRSIgJiYgbWtkaXIgLXAgIiRHSVRfV09SS19UUkVFIiAmJgorVz0kKGNkICIkR0lUX1dPUktfVFJFRSIgJiYgcHdkKSAmJiBHSVRfV09SS19UUkVFPSIkVyIgJiYgZXhwb3J0IEdJVF9XT1JLX1RSRUUKK2lmIHRlc3QgeWVzID0gIiRiYXJlIiB8fCB0ZXN0IC1uICIkR0lUX1dPUktfVFJFRSI7IHRoZW4KKwlHSVRfRElSPSIkRCIKK2Vsc2UKKwlHSVRfRElSPSIkRC8uZ2l0IgorZmkgJiYKK2V4cG9ydCBHSVRfRElSICYmCitHSVRfQ09ORklHPSIkR0lUX0RJUi9jb25maWciIGdpdC1pbml0ICRxdWlldCAke3RlbXBsYXRlKyIkdGVtcGxhdGUifSB8fCB1c2FnZQorCitpZiB0ZXN0IC1uICIkYmFyZSIKK3RoZW4KKwlHSVRfQ09ORklHPSIkR0lUX0RJUi9jb25maWciIGdpdCBjb25maWcgY29yZS5iYXJlIHRydWUKK2ZpCisKK2lmIHRlc3QgLW4gIiRyZWZlcmVuY2UiCit0aGVuCisJcmVmX2dpdD0KKwlpZiB0ZXN0IC1kICIkcmVmZXJlbmNlIgorCXRoZW4KKwkJaWYgdGVzdCAtZCAiJHJlZmVyZW5jZS8uZ2l0L29iamVjdHMiCisJCXRoZW4KKwkJCXJlZl9naXQ9IiRyZWZlcmVuY2UvLmdpdCIKKwkJZWxpZiB0ZXN0IC1kICIkcmVmZXJlbmNlL29iamVjdHMiCisJCXRoZW4KKwkJCXJlZl9naXQ9IiRyZWZlcmVuY2UiCisJCWZpCisJZmkKKwlpZiB0ZXN0IC1uICIkcmVmX2dpdCIKKwl0aGVuCisJCXJlZl9naXQ9JChjZCAiJHJlZl9naXQiICYmIHB3ZCkKKwkJZWNobyAiJHJlZl9naXQvb2JqZWN0cyIgPiIkR0lUX0RJUi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKwkJKAorCQkJR0lUX0RJUj0iJHJlZl9naXQiIGdpdCBmb3ItZWFjaC1yZWYgXAorCQkJCS0tZm9ybWF0PSclKG9iamVjdG5hbWUpICUoKm9iamVjdG5hbWUpJworCQkpIHwKKwkJd2hpbGUgcmVhZCBhIGIKKwkJZG8KKwkJCXRlc3QgLXogIiRhIiB8fAorCQkJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvcmVmZXJlbmNlLXRtcC8kYSIgIiRhIgorCQkJdGVzdCAteiAiJGIiIHx8CisJCQlnaXQgdXBkYXRlLXJlZiAicmVmcy9yZWZlcmVuY2UtdG1wLyRiIiAiJGIiCisJCWRvbmUKKwllbHNlCisJCWRpZSAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyRyZWZlcmVuY2UnIGlzIG5vdCBhIGxvY2FsIGRpcmVjdG9yeS4iCisJZmkKK2ZpCisKK3JtIC1mICIkR0lUX0RJUi9DTE9ORV9IRUFEIgorCisjIFdlIGRvIGxvY2FsIG1hZ2ljIG9ubHkgd2hlbiB0aGUgdXNlciB0ZWxscyB1cyB0by4KK2Nhc2UgIiRsb2NhbCIgaW4KK3llcykKKwkoIGNkICIkcmVwby9vYmplY3RzIiApIHx8CisJCWRpZSAiY2Fubm90IGNoZGlyIHRvIGxvY2FsICckcmVwby9vYmplY3RzJy4iCisKKwlpZiB0ZXN0ICIkbG9jYWxfc2hhcmVkIiA9IHllcworCXRoZW4KKwkJbWtkaXIgLXAgIiRHSVRfRElSL29iamVjdHMvaW5mbyIKKwkJZWNobyAiJHJlcG8vb2JqZWN0cyIgPj4iJEdJVF9ESVIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCisJZWxzZQorCQljcGlvX3F1aWV0X2ZsYWc9IiIKKwkJY3BpbyAtLWhlbHAgMj4mMSB8IGdyZXAgLS0gLS1xdWlldCA+L2Rldi9udWxsICYmIFwKKwkJCWNwaW9fcXVpZXRfZmxhZz0tLXF1aWV0CisJCWw9ICYmCisJCWlmIHRlc3QgIiR1c2VfbG9jYWxfaGFyZGxpbmsiID0geWVzCisJCXRoZW4KKwkJCSMgU2VlIGlmIHdlIGNhbiBoYXJkbGluayBhbmQgZHJvcCAibCIgaWYgbm90LgorCQkJc2FtcGxlX2ZpbGU9JChjZCAiJHJlcG8iICYmIFwKKwkJCQkgICAgICBmaW5kIG9iamVjdHMgLXR5cGUgZiAtcHJpbnQgfCBzZWQgLWUgMXEpCisJCQkjIG9iamVjdHMgZGlyZWN0b3J5IHNob3VsZCBub3QgYmUgZW1wdHkgYmVjYXVzZQorCQkJIyB3ZSBhcmUgY2xvbmluZyEKKwkJCXRlc3QgLWYgIiRyZXBvLyRzYW1wbGVfZmlsZSIgfHwKKwkJCQlkaWUgImZhdGFsOiBjYW5ub3QgY2xvbmUgZW1wdHkgcmVwb3NpdG9yeSIKKwkJCWlmIGxuICIkcmVwby8kc2FtcGxlX2ZpbGUiICIkR0lUX0RJUi9vYmplY3RzL3NhbXBsZSIgMj4vZGV2L251bGwKKwkJCXRoZW4KKwkJCQlybSAtZiAiJEdJVF9ESVIvb2JqZWN0cy9zYW1wbGUiCisJCQkJbD1sCisJCQllbGlmIHRlc3QgLW4gIiRsb2NhbF9leHBsaWNpdGx5X2Fza2VkX2ZvciIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiV2FybmluZzogLWwgYXNrZWQgYnV0IGNhbm5vdCBoYXJkbGluayB0byAkcmVwbyIKKwkJCWZpCisJCWZpICYmCisJCWNkICIkcmVwbyIgJiYKKwkJIyBDcmVhdGUgZGlycyB1c2luZyB1bWFzayBhbmQgcGVybWlzc2lvbnMgYW5kIGRlc3RpbmF0aW9uCisJCWZpbmQgb2JqZWN0cyAtdHlwZSBkIC1wcmludCB8IChjZCAiJEdJVF9ESVIiICYmIHhhcmdzIG1rZGlyIC1wKSAmJgorCQkjIENvcHkgZXhpc3RpbmcgMDQ0NCBwZXJtaXNzaW9ucyBvbiBjb250ZW50CisJCWZpbmQgb2JqZWN0cyAhIC10eXBlIGQgLXByaW50IHwgY3BpbyAkY3Bpb19xdWlldF9mbGFnIC1wdW1kJGwgIiRHSVRfRElSLyIgfHwgXAorCQkJZXhpdCAxCisJZmkKKwlnaXQtbHMtcmVtb3RlICIkcmVwbyIgPiIkR0lUX0RJUi9DTE9ORV9IRUFEIiB8fCBleGl0IDEKKwk7OworKikKKwljYXNlICIkcmVwbyIgaW4KKwlyc3luYzovLyopCisJCWNhc2UgIiRkZXB0aCIgaW4KKwkJIiIpIDs7CisJCSopIGRpZSAic2hhbGxvdyBvdmVyIHJzeW5jIG5vdCBzdXBwb3J0ZWQiIDs7CisJCWVzYWMKKwkJcnN5bmMgJHF1aWV0IC1hdiAtLWlnbm9yZS1leGlzdGluZyAgXAorCQkJLS1leGNsdWRlIGluZm8gIiRyZXBvL29iamVjdHMvIiAiJEdJVF9ESVIvb2JqZWN0cy8iIHx8CisJCWV4aXQKKwkJIyBMb29rIGF0IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzIGZvciByc3luYyAtLSBodHRwIHdpbGwKKwkJIyBzdXBwb3J0IGl0IG5hdGl2ZWx5IGFuZCBnaXQgbmF0aXZlIG9uZXMgd2lsbCBkbyBpdCBvbiB0aGUKKwkJIyByZW1vdGUgZW5kLiAgTm90IGhhdmluZyB0aGF0IGZpbGUgaXMgbm90IGEgY3JpbWUuCisJCXJzeW5jIC1xICIkcmVwby9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIgXAorCQkJIiRHSVRfRElSL1RNUF9BTFQiIDI+L2Rldi9udWxsIHx8CisJCQlybSAtZiAiJEdJVF9ESVIvVE1QX0FMVCIKKwkJaWYgdGVzdCAtZiAiJEdJVF9ESVIvVE1QX0FMVCIKKwkJdGhlbgorCQkgICAgKCBjZCAiJEQiICYmCisJCSAgICAgIC4gZ2l0LXBhcnNlLXJlbW90ZSAmJgorCQkgICAgICByZXNvbHZlX2FsdGVybmF0ZXMgIiRyZXBvIiA8IiRHSVRfRElSL1RNUF9BTFQiICkgfAorCQkgICAgd2hpbGUgcmVhZCBhbHQKKwkJICAgIGRvCisJCQljYXNlICIkYWx0IiBpbiAnYmFkIGFsdGVybmF0ZTogJyopIGRpZSAiJGFsdCI7OyBlc2FjCisJCQljYXNlICIkcXVpZXQiIGluCisJCQknJykJZWNobyA+JjIgIkdldHRpbmcgYWx0ZXJuYXRlOiAkYWx0IiA7OworCQkJZXNhYworCQkJcnN5bmMgJHF1aWV0IC1hdiAtLWlnbm9yZS1leGlzdGluZyAgXAorCQkJICAgIC0tZXhjbHVkZSBpbmZvICIkYWx0IiAiJEdJVF9ESVIvb2JqZWN0cyIgfHwgZXhpdAorCQkgICAgZG9uZQorCQkgICAgcm0gLWYgIiRHSVRfRElSL1RNUF9BTFQiCisJCWZpCisJCWdpdC1scy1yZW1vdGUgIiRyZXBvIiA+IiRHSVRfRElSL0NMT05FX0hFQUQiIHx8IGV4aXQgMQorCQk7OworCWh0dHBzOi8vKnxodHRwOi8vKnxmdHA6Ly8qKQorCQljYXNlICIkZGVwdGgiIGluCisJCSIiKSA7OworCQkqKSBkaWUgInNoYWxsb3cgb3ZlciBodHRwIG9yIGZ0cCBub3Qgc3VwcG9ydGVkIiA7OworCQllc2FjCisJCWlmIHRlc3QgLXogIkBATk9fQ1VSTEBAIgorCQl0aGVuCisJCQljbG9uZV9kdW1iX2h0dHAgIiRyZXBvIiAiJEQiCisJCWVsc2UKKwkJCWRpZSAiaHR0cCB0cmFuc3BvcnQgbm90IHN1cHBvcnRlZCwgcmVidWlsZCBHaXQgd2l0aCBjdXJsIHN1cHBvcnQiCisJCWZpCisJCTs7CisJKikKKwkJaWYgWyAtZiAiJHJlcG8iIF0gOyB0aGVuCisJCQlnaXQgYnVuZGxlIHVuYnVuZGxlICIkcmVwbyIgPiAiJEdJVF9ESVIvQ0xPTkVfSEVBRCIgfHwKKwkJCWRpZSAidW5idW5kbGUgZnJvbSAnJHJlcG8nIGZhaWxlZC4iCisJCWVsc2UKKwkJCWNhc2UgIiR1cGxvYWRfcGFjayIgaW4KKwkJCScnKSBnaXQtZmV0Y2gtcGFjayAtLWFsbCAtayAkcXVpZXQgJGRlcHRoICRub19wcm9ncmVzcyAiJHJlcG8iOzsKKwkJCSopIGdpdC1mZXRjaC1wYWNrIC0tYWxsIC1rIFwKKwkJCQkkcXVpZXQgIiR1cGxvYWRfcGFjayIgJGRlcHRoICRub19wcm9ncmVzcyAiJHJlcG8iIDs7CisJCQllc2FjID4iJEdJVF9ESVIvQ0xPTkVfSEVBRCIgfHwKKwkJCWRpZSAiZmV0Y2gtcGFjayBmcm9tICckcmVwbycgZmFpbGVkLiIKKwkJZmkKKwkJOzsKKwllc2FjCisJOzsKK2VzYWMKK3Rlc3QgLWQgIiRHSVRfRElSL3JlZnMvcmVmZXJlbmNlLXRtcCIgJiYgcm0gLWZyICIkR0lUX0RJUi9yZWZzL3JlZmVyZW5jZS10bXAiCisKK2lmIHRlc3QgLWYgIiRHSVRfRElSL0NMT05FX0hFQUQiCit0aGVuCisJIyBSZWFkIGdpdC1mZXRjaC1wYWNrIC1rIG91dHB1dCBhbmQgc3RvcmUgdGhlIHJlbW90ZSBicmFuY2hlcy4KKwlpZiBbIC1uICIkdXNlX3NlcGFyYXRlX3JlbW90ZSIgXQorCXRoZW4KKwkJYnJhbmNoX3RvcD0icmVtb3Rlcy8kb3JpZ2luIgorCWVsc2UKKwkJYnJhbmNoX3RvcD0iaGVhZHMiCisJZmkKKwl0YWdfdG9wPSJ0YWdzIgorCXdoaWxlIHJlYWQgc2hhMSBuYW1lCisJZG8KKwkJY2FzZSAiJG5hbWUiIGluCisJCSonXnt9JykKKwkJCWNvbnRpbnVlIDs7CisJCUhFQUQpCisJCQlkZXN0bmFtZT0iUkVNT1RFX0hFQUQiIDs7CisJCXJlZnMvaGVhZHMvKikKKwkJCWRlc3RuYW1lPSJyZWZzLyRicmFuY2hfdG9wLyR7bmFtZSNyZWZzL2hlYWRzL30iIDs7CisJCXJlZnMvdGFncy8qKQorCQkJZGVzdG5hbWU9InJlZnMvJHRhZ190b3AvJHtuYW1lI3JlZnMvdGFncy99IiA7OworCQkqKQorCQkJY29udGludWUgOzsKKwkJZXNhYworCQlnaXQgdXBkYXRlLXJlZiAtbSAiY2xvbmU6IGZyb20gJHJlcG8iICIkZGVzdG5hbWUiICIkc2hhMSIgIiIKKwlkb25lIDwgIiRHSVRfRElSL0NMT05FX0hFQUQiCitmaQorCitpZiB0ZXN0IC1uICIkVyI7IHRoZW4KKwljZCAiJFciIHx8IGV4aXQKK2Vsc2UKKwljZCAiJEQiIHx8IGV4aXQKK2ZpCisKK2lmIHRlc3QgLXogIiRiYXJlIgordGhlbgorCSMgYSBub24tYmFyZSByZXBvc2l0b3J5IGlzIGFsd2F5cyBpbiBzZXBhcmF0ZS1yZW1vdGUgbGF5b3V0CisJcmVtb3RlX3RvcD0icmVmcy9yZW1vdGVzLyRvcmlnaW4iCisJaGVhZF9zaGExPQorCXRlc3QgISAtciAiJEdJVF9ESVIvUkVNT1RFX0hFQUQiIHx8IGhlYWRfc2hhMT1gY2F0ICIkR0lUX0RJUi9SRU1PVEVfSEVBRCJgCisJY2FzZSAiJGhlYWRfc2hhMSIgaW4KKwkncmVmOiByZWZzLycqKQorCQkjIFVoLW9oLCB0aGUgcmVtb3RlIHRvbGQgdXMgKGh0dHAgdHJhbnNwb3J0IGRvbmUgYWdhaW5zdAorCQkjIG5ldyBzdHlsZSByZXBvc2l0b3J5IHdpdGggYSBzeW1yZWYgSEVBRCkuCisJCSMgSWRlYWxseSB3ZSBzaG91bGQgc2tpcCB0aGUgZ3Vlc3N3b3JrIGJ1dCBmb3Igbm93CisJCSMgb3B0IGZvciBtaW5pbXVtIGNoYW5nZS4KKwkJaGVhZF9zaGExPWBleHByICJ6JGhlYWRfc2hhMSIgOiAnenJlZjogcmVmcy9oZWFkcy9cKC4qXCknYAorCQloZWFkX3NoYTE9YGNhdCAiJEdJVF9ESVIvJHJlbW90ZV90b3AvJGhlYWRfc2hhMSJgCisJCTs7CisJZXNhYworCisJIyBUaGUgbmFtZSB1bmRlciAkcmVtb3RlX3RvcCB0aGUgcmVtb3RlIEhFQUQgc2VlbXMgdG8gcG9pbnQgYXQuCisJaGVhZF9wb2ludHNfYXQ9JCgKKwkJKAorCQkJdGVzdCAtZiAiJEdJVF9ESVIvJHJlbW90ZV90b3AvbWFzdGVyIiAmJiBlY2hvICJtYXN0ZXIiCisJCQljZCAiJEdJVF9ESVIvJHJlbW90ZV90b3AiICYmCisJCQlmaW5kIC4gLXR5cGUgZiAtcHJpbnQgfCBzZWQgLWUgJ3MvXlwuXC8vLycKKwkJKSB8ICgKKwkJZG9uZT1mCisJCXdoaWxlIHJlYWQgbmFtZQorCQlkbworCQkJdGVzdCB0ID0gJGRvbmUgJiYgY29udGludWUKKwkJCWJyYW5jaF90aXA9YGNhdCAiJEdJVF9ESVIvJHJlbW90ZV90b3AvJG5hbWUiYAorCQkJaWYgdGVzdCAiJGhlYWRfc2hhMSIgPSAiJGJyYW5jaF90aXAiCisJCQl0aGVuCisJCQkJZWNobyAiJG5hbWUiCisJCQkJZG9uZT10CisJCQlmaQorCQlkb25lCisJCSkKKwkpCisKKwkjIFVwc3RyZWFtIFVSTAorCWdpdCBjb25maWcgcmVtb3RlLiIkb3JpZ2luIi51cmwgIiRyZXBvIiAmJgorCisJIyBTZXQgdXAgdGhlIG1hcHBpbmdzIHRvIHRyYWNrIHRoZSByZW1vdGUgYnJhbmNoZXMuCisJZ2l0IGNvbmZpZyByZW1vdGUuIiRvcmlnaW4iLmZldGNoIFwKKwkJIityZWZzL2hlYWRzLyo6JHJlbW90ZV90b3AvKiIgJ14kJyAmJgorCisJIyBXcml0ZSBvdXQgcmVtb3RlLiRvcmlnaW4gY29uZmlnLCBhbmQgdXBkYXRlIG91ciAiJGhlYWRfcG9pbnRzX2F0Ii4KKwljYXNlICIkaGVhZF9wb2ludHNfYXQiIGluCisJPyopCisJCSMgTG9jYWwgZGVmYXVsdCBicmFuY2gKKwkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEICJyZWZzL2hlYWRzLyRoZWFkX3BvaW50c19hdCIgJiYKKworCQkjIFRyYWNraW5nIGJyYW5jaCBmb3IgdGhlIHByaW1hcnkgYnJhbmNoIGF0IHRoZSByZW1vdGUuCisJCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRoZWFkX3NoYTEiICYmCisKKwkJcm0gLWYgInJlZnMvcmVtb3Rlcy8kb3JpZ2luL0hFQUQiCisJCWdpdCBzeW1ib2xpYy1yZWYgInJlZnMvcmVtb3Rlcy8kb3JpZ2luL0hFQUQiIFwKKwkJCSJyZWZzL3JlbW90ZXMvJG9yaWdpbi8kaGVhZF9wb2ludHNfYXQiICYmCisKKwkJZ2l0IGNvbmZpZyBicmFuY2guIiRoZWFkX3BvaW50c19hdCIucmVtb3RlICIkb3JpZ2luIiAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC4iJGhlYWRfcG9pbnRzX2F0Ii5tZXJnZSAicmVmcy9oZWFkcy8kaGVhZF9wb2ludHNfYXQiCisJCTs7CisJJycpCisJCWlmIHRlc3QgLXogIiRoZWFkX3NoYTEiCisJCXRoZW4KKwkJCSMgU291cmNlIGhhZCBub25leGlzdGVudCByZWYgaW4gSEVBRAorCQkJZWNobyA+JjIgIldhcm5pbmc6IFJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC4iCisJCQlub19jaGVja291dD10CisJCWVsc2UKKwkJCSMgU291cmNlIGhhZCBkZXRhY2hlZCBIRUFEIHBvaW50aW5nIG5vd2hlcmUKKwkJCWdpdCB1cGRhdGUtcmVmIC0tbm8tZGVyZWYgSEVBRCAiJGhlYWRfc2hhMSIgJiYKKwkJCXJtIC1mICJyZWZzL3JlbW90ZXMvJG9yaWdpbi9IRUFEIgorCQlmaQorCQk7OworCWVzYWMKKworCWNhc2UgIiRub19jaGVja291dCIgaW4KKwknJykKKwkJdGVzdCAieiRxdWlldCIgPSB6IC1hICJ6JG5vX3Byb2dyZXNzIiA9IHogJiYgdj0tdiB8fCB2PQorCQlnaXQgcmVhZC10cmVlIC1tIC11ICR2IEhFQUQgSEVBRAorCWVzYWMKK2ZpCitybSAtZiAiJEdJVF9ESVIvQ0xPTkVfSEVBRCIgIiRHSVRfRElSL1JFTU9URV9IRUFEIgorCit0cmFwIC0gMApkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtY29tbWl0LnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzZmZiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1jb21taXQuc2gKQEAgLTAsMCArMSw2MzkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgTGludXMgVG9ydmFsZHMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisKK1VTQUdFPSdbLWEgfCAtLWludGVyYWN0aXZlXSBbLXNdIFstdl0gWy0tbm8tdmVyaWZ5XSBbLW0gPG1lc3NhZ2U+IHwgLUYgPGxvZ2ZpbGU+IHwgKC1DfC1jKSA8Y29tbWl0PiB8IC0tYW1lbmRdIFstdV0gWy1lXSBbLS1hdXRob3IgPGF1dGhvcj5dIFstLXRlbXBsYXRlIDxmaWxlPl0gW1staSB8IC1vXSA8cGF0aD4uLi5dJworU1VCRElSRUNUT1JZX09LPVllcworT1BUSU9OU19TUEVDPQorLiBnaXQtc2gtc2V0dXAKK3JlcXVpcmVfd29ya190cmVlCisKK2dpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsIDI+JjEgfHwgaW5pdGlhbF9jb21taXQ9dAorCitjYXNlICIkMCIgaW4KKypzdGF0dXMpCisJc3RhdHVzX29ubHk9dAorCTs7CisqY29tbWl0KQorCXN0YXR1c19vbmx5PQorCTs7Citlc2FjCisKK3JlZnVzZV9wYXJ0aWFsICgpIHsKKwllY2hvID4mMiAiJDEiCisJZWNobyA+JjIgIllvdSBtaWdodCBoYXZlIG1lYW50IHRvIHNheSAnZ2l0IGNvbW1pdCAtaSBwYXRocy4uLicsIHBlcmhhcHM/IgorCWV4aXQgMQorfQorCitUTVBfSU5ERVg9CitUSElTX0lOREVYPSIke0dJVF9JTkRFWF9GSUxFOi0kR0lUX0RJUi9pbmRleH0iCitORVhUX0lOREVYPSIkR0lUX0RJUi9uZXh0LWluZGV4JCQiCitybSAtZiAiJE5FWFRfSU5ERVgiCitzYXZlX2luZGV4ICgpIHsKKwljcCAtcCAiJFRISVNfSU5ERVgiICIkTkVYVF9JTkRFWCIKK30KKworcnVuX3N0YXR1cyAoKSB7CisJIyBJZiBUTVBfSU5ERVggaXMgZGVmaW5lZCwgdGhhdCBtZWFucyB3ZSBhcmUgZG9pbmcKKwkjICItLW9ubHkiIHBhcnRpYWwgY29tbWl0LCBhbmQgdGhhdCBpbmRleCBmaWxlIGlzIHVzZWQKKwkjIHRvIGJ1aWxkIHRoZSB0cmVlIGZvciB0aGUgY29tbWl0LiAgT3RoZXJ3aXNlLCBpZgorCSMgTkVYVF9JTkRFWCBleGlzdHMsIHRoYXQgaXMgdGhlIGluZGV4IGZpbGUgdXNlZCB0bworCSMgbWFrZSB0aGUgY29tbWl0LiAgT3RoZXJ3aXNlIHdlIGFyZSB1c2luZyBhcy1pcyBjb21taXQKKwkjIHNvIHRoZSByZWd1bGFyIGluZGV4IGZpbGUgaXMgd2hhdCB3ZSB1c2UgdG8gY29tcGFyZS4KKwlpZiB0ZXN0ICcnICE9ICIkVE1QX0lOREVYIgorCXRoZW4KKwkJR0lUX0lOREVYX0ZJTEU9IiRUTVBfSU5ERVgiCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRQorCWVsaWYgdGVzdCAtZiAiJE5FWFRfSU5ERVgiCisJdGhlbgorCQlHSVRfSU5ERVhfRklMRT0iJE5FWFRfSU5ERVgiCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRQorCWZpCisKKwlpZiB0ZXN0ICIkc3RhdHVzX29ubHkiID0gInQiIC1vICIkdXNlX3N0YXR1c19jb2xvciIgPSAidCI7IHRoZW4KKwkJY29sb3I9CisJZWxzZQorCQljb2xvcj0tLW5vY29sb3IKKwlmaQorCWdpdCBydW5zdGF0dXMgJHtjb2xvcn0gXAorCQkke3ZlcmJvc2U6Ky0tdmVyYm9zZX0gXAorCQkke2FtZW5kOistLWFtZW5kfSBcCisJCSR7dW50cmFja2VkX2ZpbGVzOistLXVudHJhY2tlZH0KK30KKwordHJhcCAnCisJdGVzdCAteiAiJFRNUF9JTkRFWCIgfHwgeworCQl0ZXN0IC1mICIkVE1QX0lOREVYIiAmJiBybSAtZiAiJFRNUF9JTkRFWCIKKwl9CisJcm0gLWYgIiRORVhUX0lOREVYIgorJyAwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29tbWFuZCBsaW5lIGFyZ3VtZW50IHBhcnNpbmcgYW5kIHNhbml0eSBjaGVja2luZworCithbGw9CithbHNvPQorYWxsb3dfZW1wdHk9ZgoraW50ZXJhY3RpdmU9Citvbmx5PQorbG9nZmlsZT0KK3VzZV9jb21taXQ9CithbWVuZD0KK2VkaXRfZmxhZz0KK25vX2VkaXQ9Citsb2dfZ2l2ZW49Citsb2dfbWVzc2FnZT0KK3ZlcmlmeT10CitxdWlldD0KK3ZlcmJvc2U9CitzaWdub2ZmPQorZm9yY2VfYXV0aG9yPQorb25seV9pbmNsdWRlX2Fzc3VtZWQ9Cit1bnRyYWNrZWRfZmlsZXM9Cit0ZW1wbGF0ZWZpbGU9ImBnaXQgY29uZmlnIGNvbW1pdC50ZW1wbGF0ZWAiCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLUZ8LS1GfC1mfC0tZnwtLWZpfC0tZmlsfC0tZmlsZSkKKwkJY2FzZSAiJCMiIGluIDEpIHVzYWdlIDs7IGVzYWMKKwkJc2hpZnQKKwkJbm9fZWRpdD10CisJCWxvZ19naXZlbj10JGxvZ19naXZlbgorCQlsb2dmaWxlPSIkMSIKKwkJOzsKKwktRip8LWYqKQorCQlub19lZGl0PXQKKwkJbG9nX2dpdmVuPXQkbG9nX2dpdmVuCisJCWxvZ2ZpbGU9IiR7MSMtW0ZmXX0iCisJCTs7CisJLS1GPSp8LS1mPSp8LS1maT0qfC0tZmlsPSp8LS1maWxlPSopCisJCW5vX2VkaXQ9dAorCQlsb2dfZ2l2ZW49dCRsb2dfZ2l2ZW4KKwkJbG9nZmlsZT0iJHsxIyo9fSIKKwkJOzsKKwktYXwtLWF8LS1hbHwtLWFsbCkKKwkJYWxsPXQKKwkJOzsKKwktLWFsbG98LS1hbGxvd3wtLWFsbG93LXwtLWFsbG93LWV8LS1hbGxvdy1lbXwtLWFsbG93LWVtcHxcCisJLS1hbGxvdy1lbXB0fC0tYWxsb3ctZW1wdHkpCisJCWFsbG93X2VtcHR5PXQKKwkJOzsKKwktLWF1PSp8LS1hdXQ9KnwtLWF1dGg9KnwtLWF1dGhvPSp8LS1hdXRob3I9KikKKwkJZm9yY2VfYXV0aG9yPSIkezEjKj19IgorCQk7OworCS0tYXV8LS1hdXR8LS1hdXRofC0tYXV0aG98LS1hdXRob3IpCisJCWNhc2UgIiQjIiBpbiAxKSB1c2FnZSA7OyBlc2FjCisJCXNoaWZ0CisJCWZvcmNlX2F1dGhvcj0iJDEiCisJCTs7CisJLWV8LS1lfC0tZWR8LS1lZGl8LS1lZGl0KQorCQllZGl0X2ZsYWc9dAorCQk7OworCS1pfC0taXwtLWlufC0taW5jfC0taW5jbHwtLWluY2x1fC0taW5jbHVkfC0taW5jbHVkZSkKKwkJYWxzbz10CisJCTs7CisJLS1pbnR8LS1pbnRlfC0taW50ZXJ8LS1pbnRlcmF8LS1pbnRlcmFjfC0taW50ZXJhY3R8LS1pbnRlcmFjdGl8XAorCS0taW50ZXJhY3RpdnwtLWludGVyYWN0aXZlKQorCQlpbnRlcmFjdGl2ZT10CisJCTs7CisJLW98LS1vfC0tb258LS1vbmx8LS1vbmx5KQorCQlvbmx5PXQKKwkJOzsKKwktbXwtLW18LS1tZXwtLW1lc3wtLW1lc3N8LS1tZXNzYXwtLW1lc3NhZ3wtLW1lc3NhZ2UpCisJCWNhc2UgIiQjIiBpbiAxKSB1c2FnZSA7OyBlc2FjCisJCXNoaWZ0CisJCWxvZ19naXZlbj1tJGxvZ19naXZlbgorCQlsb2dfbWVzc2FnZT0iJHtsb2dfbWVzc2FnZTorJHtsb2dfbWVzc2FnZX0KKworfSQxIgorCQlub19lZGl0PXQKKwkJOzsKKwktbSopCisJCWxvZ19naXZlbj1tJGxvZ19naXZlbgorCQlsb2dfbWVzc2FnZT0iJHtsb2dfbWVzc2FnZTorJHtsb2dfbWVzc2FnZX0KKworfSR7MSMtbX0iCisJCW5vX2VkaXQ9dAorCQk7OworCS0tbT0qfC0tbWU9KnwtLW1lcz0qfC0tbWVzcz0qfC0tbWVzc2E9KnwtLW1lc3NhZz0qfC0tbWVzc2FnZT0qKQorCQlsb2dfZ2l2ZW49bSRsb2dfZ2l2ZW4KKwkJbG9nX21lc3NhZ2U9IiR7bG9nX21lc3NhZ2U6KyR7bG9nX21lc3NhZ2V9CisKK30kezEjKj19IgorCQlub19lZGl0PXQKKwkJOzsKKwktbnwtLW58LS1ub3wtLW5vLXwtLW5vLXZ8LS1uby12ZXwtLW5vLXZlcnwtLW5vLXZlcml8LS1uby12ZXJpZnxcCisJLS1uby12ZXJpZnkpCisJCXZlcmlmeT0KKwkJOzsKKwktLWF8LS1hbXwtLWFtZXwtLWFtZW58LS1hbWVuZCkKKwkJYW1lbmQ9dAorCQl1c2VfY29tbWl0PUhFQUQKKwkJOzsKKwktYykKKwkJY2FzZSAiJCMiIGluIDEpIHVzYWdlIDs7IGVzYWMKKwkJc2hpZnQKKwkJbG9nX2dpdmVuPXQkbG9nX2dpdmVuCisJCXVzZV9jb21taXQ9IiQxIgorCQlub19lZGl0PQorCQk7OworCS0tcmVlPSp8LS1yZWVkPSp8LS1yZWVkaT0qfC0tcmVlZGl0PSp8LS1yZWVkaXQtPSp8LS1yZWVkaXQtbT0qfFwKKwktLXJlZWRpdC1tZT0qfC0tcmVlZGl0LW1lcz0qfC0tcmVlZGl0LW1lc3M9KnwtLXJlZWRpdC1tZXNzYT0qfFwKKwktLXJlZWRpdC1tZXNzYWc9KnwtLXJlZWRpdC1tZXNzYWdlPSopCisJCWxvZ19naXZlbj10JGxvZ19naXZlbgorCQl1c2VfY29tbWl0PSIkezEjKj19IgorCQlub19lZGl0PQorCQk7OworCS0tcmVlfC0tcmVlZHwtLXJlZWRpfC0tcmVlZGl0fC0tcmVlZGl0LXwtLXJlZWRpdC1tfC0tcmVlZGl0LW1lfFwKKwktLXJlZWRpdC1tZXN8LS1yZWVkaXQtbWVzc3wtLXJlZWRpdC1tZXNzYXwtLXJlZWRpdC1tZXNzYWd8XAorCS0tcmVlZGl0LW1lc3NhZ2UpCisJCWNhc2UgIiQjIiBpbiAxKSB1c2FnZSA7OyBlc2FjCisJCXNoaWZ0CisJCWxvZ19naXZlbj10JGxvZ19naXZlbgorCQl1c2VfY29tbWl0PSIkMSIKKwkJbm9fZWRpdD0KKwkJOzsKKwktQykKKwkJY2FzZSAiJCMiIGluIDEpIHVzYWdlIDs7IGVzYWMKKwkJc2hpZnQKKwkJbG9nX2dpdmVuPXQkbG9nX2dpdmVuCisJCXVzZV9jb21taXQ9IiQxIgorCQlub19lZGl0PXQKKwkJOzsKKwktLXJldT0qfC0tcmV1cz0qfC0tcmV1c2U9KnwtLXJldXNlLT0qfC0tcmV1c2UtbT0qfC0tcmV1c2UtbWU9KnxcCisJLS1yZXVzZS1tZXM9KnwtLXJldXNlLW1lc3M9KnwtLXJldXNlLW1lc3NhPSp8LS1yZXVzZS1tZXNzYWc9KnxcCisJLS1yZXVzZS1tZXNzYWdlPSopCisJCWxvZ19naXZlbj10JGxvZ19naXZlbgorCQl1c2VfY29tbWl0PSIkezEjKj19IgorCQlub19lZGl0PXQKKwkJOzsKKwktLXJldXwtLXJldXN8LS1yZXVzZXwtLXJldXNlLXwtLXJldXNlLW18LS1yZXVzZS1tZXwtLXJldXNlLW1lc3xcCisJLS1yZXVzZS1tZXNzfC0tcmV1c2UtbWVzc2F8LS1yZXVzZS1tZXNzYWd8LS1yZXVzZS1tZXNzYWdlKQorCQljYXNlICIkIyIgaW4gMSkgdXNhZ2UgOzsgZXNhYworCQlzaGlmdAorCQlsb2dfZ2l2ZW49dCRsb2dfZ2l2ZW4KKwkJdXNlX2NvbW1pdD0iJDEiCisJCW5vX2VkaXQ9dAorCQk7OworCS1zfC0tc3wtLXNpfC0tc2lnfC0tc2lnbnwtLXNpZ25vfC0tc2lnbm9mfC0tc2lnbm9mZikKKwkJc2lnbm9mZj10CisJCTs7CisJLXR8LS10fC0tdGV8LS10ZW18LS10ZW1wfC0tdGVtcGx8LS10ZW1wbGF8LS10ZW1wbGF0fC0tdGVtcGxhdGUpCisJCWNhc2UgIiQjIiBpbiAxKSB1c2FnZSA7OyBlc2FjCisJCXNoaWZ0CisJCXRlbXBsYXRlZmlsZT0iJDEiCisJCW5vX2VkaXQ9CisJCTs7CisJLXF8LS1xfC0tcXV8LS1xdWl8LS1xdWllfC0tcXVpZXQpCisJCXF1aWV0PXQKKwkJOzsKKwktdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcmJ8LS12ZXJib3wtLXZlcmJvc3wtLXZlcmJvc2UpCisJCXZlcmJvc2U9dAorCQk7OworCS11fC0tdXwtLXVufC0tdW50fC0tdW50cnwtLXVudHJhfC0tdW50cmFjfC0tdW50cmFja3wtLXVudHJhY2tlfFwKKwktLXVudHJhY2tlZHwtLXVudHJhY2tlZC18LS11bnRyYWNrZWQtZnwtLXVudHJhY2tlZC1maXwtLXVudHJhY2tlZC1maWx8XAorCS0tdW50cmFja2VkLWZpbGV8LS11bnRyYWNrZWQtZmlsZXMpCisJCXVudHJhY2tlZF9maWxlcz10CisJCTs7CisJLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJLSopCisJCXVzYWdlCisJCTs7CisJKikKKwkJYnJlYWsKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKK2Nhc2UgIiRlZGl0X2ZsYWciIGluIHQpIG5vX2VkaXQ9IDs7IGVzYWMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTYW5pdHkgY2hlY2sgb3B0aW9ucworCitjYXNlICIkYW1lbmQsJGluaXRpYWxfY29tbWl0IiBpbgordCx0KQorCWRpZSAiWW91IGRvIG5vdCBoYXZlIGFueXRoaW5nIHRvIGFtZW5kLiIgOzsKK3QsKQorCWlmIFsgLWYgIiRHSVRfRElSL01FUkdFX0hFQUQiIF07IHRoZW4KKwkJZGllICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorCWZpIDs7Citlc2FjCisKK2Nhc2UgIiRsb2dfZ2l2ZW4iIGluCit0dCopCisJZGllICJPbmx5IG9uZSBvZiAtYy8tQy8tRiBjYW4gYmUgdXNlZC4iIDs7CisqdG0qfCptdCopCisJZGllICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIiA7OworZXNhYworCitjYXNlICIkIywkYWxzbywkb25seSwkYW1lbmQiIGluCisqLHQsdCwqKQorCWRpZSAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seSBjYW4gYmUgdXNlZC4iIDs7CiswLHQsLCogfCAwLCx0LCkKKwlkaWUgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIgOzsKKzAsLHQsdCkKKwlvbmx5X2luY2x1ZGVfYXNzdW1lZD0iIyBDbGV2ZXIuLi4gYW1lbmRpbmcgdGhlIGxhc3Qgb25lIHdpdGggZGlydHkgaW5kZXguIiA7OworMCwsLCopCisJOzsKKyosLCwqKQorCW9ubHlfaW5jbHVkZV9hc3N1bWVkPSIjIEV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG5vciAtbzsgYXNzdW1pbmcgLS1vbmx5IHBhdGhzLi4uIgorCWFsc289CisJOzsKK2VzYWMKK3Vuc2V0IG9ubHkKK2Nhc2UgIiRhbGwsJGludGVyYWN0aXZlLCRhbHNvLCQjIiBpbgorKnQsKnQsKikKKwlkaWUgIkNhbm5vdCB1c2UgLWEsIC0taW50ZXJhY3RpdmUgb3IgLWkgYXQgdGhlIHNhbWUgdGltZS4iIDs7Cit0LCwsWzEtOV0qKQorCWRpZSAiUGF0aHMgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIgOzsKKyx0LCxbMS05XSopCisJZGllICJQYXRocyB3aXRoIC0taW50ZXJhY3RpdmUgZG9lcyBub3QgbWFrZSBzZW5zZS4iIDs7CissLHQsMCkKKwlkaWUgIk5vIHBhdGhzIHdpdGggLWkgZG9lcyBub3QgbWFrZSBzZW5zZS4iIDs7Citlc2FjCisKK2lmIHRlc3QgISAteiAiJHRlbXBsYXRlZmlsZSIgLWEgLXogIiRsb2dfZ2l2ZW4iCit0aGVuCisJaWYgdGVzdCAhIC1mICIkdGVtcGxhdGVmaWxlIgorCXRoZW4KKwkJZGllICJDb21taXQgdGVtcGxhdGUgZmlsZSBkb2VzIG5vdCBleGlzdC4iCisJZmkKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUHJlcGFyZSBpbmRleCB0byBoYXZlIGEgdHJlZSB0byBiZSBjb21taXR0ZWQKKworY2FzZSAiJGFsbCwkYWxzbyIgaW4KK3QsKQorCWlmIHRlc3QgISAtZiAiJFRISVNfSU5ERVgiCisJdGhlbgorCQlkaWUgJ25vdGhpbmcgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQgZmlsZTEgZmlsZTIiIHRvIGluY2x1ZGUgZm9yIGNvbW1pdCknCisJZmkKKwlzYXZlX2luZGV4ICYmCisJKAorCQljZF90b190b3BsZXZlbCAmJgorCQlHSVRfSU5ERVhfRklMRT0iJE5FWFRfSU5ERVgiICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSAteiB8CisJCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLXogLS1zdGRpbgorCSkgfHwgZXhpdAorCTs7CissdCkKKwlzYXZlX2luZGV4ICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAtLSAiJEAiID4vZGV2L251bGwgfHwgZXhpdAorCisJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLXogLS0gIiRAIiAgfAorCSgKKwkJY2RfdG9fdG9wbGV2ZWwgJiYKKwkJR0lUX0lOREVYX0ZJTEU9IiRORVhUX0lOREVYIiAmJgorCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAteiAtLXN0ZGluCisJKSB8fCBleGl0CisJOzsKKywpCisJaWYgdGVzdCAiJGludGVyYWN0aXZlIiA9IHQ7IHRoZW4KKwkJZ2l0IGFkZCAtLWludGVyYWN0aXZlIHx8IGV4aXQKKwlmaQorCWNhc2UgIiQjIiBpbgorCTApCisJCTs7ICMgY29tbWl0IGFzLWlzCisJKikKKwkJaWYgdGVzdCAtZiAiJEdJVF9ESVIvTUVSR0VfSEVBRCIKKwkJdGhlbgorCQkJcmVmdXNlX3BhcnRpYWwgIkNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKKwkJZmkKKworCQlUTVBfSU5ERVg9IiRHSVRfRElSL3RtcC1pbmRleCQkIgorCQlXPQorCQl0ZXN0IC16ICIkaW5pdGlhbF9jb21taXQiICYmIFc9LS13aXRoLXRyZWU9SEVBRAorCQljb21taXRfb25seT1gZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAkVyAtLSAiJEAiYCB8fCBleGl0CisKKwkJIyBCdWlsZCBhIHRlbXBvcmFyeSBpbmRleCBhbmQgdXBkYXRlIHRoZSByZWFsIGluZGV4CisJCSMgdGhlIHNhbWUgd2F5LgorCQlpZiB0ZXN0IC16ICIkaW5pdGlhbF9jb21taXQiCisJCXRoZW4KKwkJCUdJVF9JTkRFWF9GSUxFPSIkVEhJU19JTkRFWCIgXAorCQkJZ2l0IHJlYWQtdHJlZSAtLWluZGV4LW91dHB1dD0iJFRNUF9JTkRFWCIgLWkgLW0gSEVBRAorCQllbHNlCisJCQlybSAtZiAiJFRNUF9JTkRFWCIKKwkJZmkgfHwgZXhpdAorCisJCXByaW50ZiAnJXNcbicgIiRjb21taXRfb25seSIgfAorCQlHSVRfSU5ERVhfRklMRT0iJFRNUF9JTkRFWCIgXAorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIC0tc3RkaW4gJiYKKworCQlzYXZlX2luZGV4ICYmCisJCXByaW50ZiAnJXNcbicgIiRjb21taXRfb25seSIgfAorCQkoCisJCQlHSVRfSU5ERVhfRklMRT0iJE5FWFRfSU5ERVgiCisJCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgLS1zdGRpbgorCQkpIHx8IGV4aXQKKwkJOzsKKwllc2FjCisJOzsKK2VzYWMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJZiB3ZSBkbyBhcy1pcyBjb21taXQsIHRoZSBpbmRleCBmaWxlIHdpbGwgYmUgVEhJU19JTkRFWCwKKyMgb3RoZXJ3aXNlIE5FWFRfSU5ERVggYWZ0ZXIgd2UgbWFrZSB0aGlzIGNvbW1pdC4gIFdlIGxlYXZlCisjIHRoZSBpbmRleCBhcyBpcyBpZiB3ZSBhYm9ydC4KKworaWYgdGVzdCAtZiAiJE5FWFRfSU5ERVgiCit0aGVuCisJVVNFX0lOREVYPSIkTkVYVF9JTkRFWCIKK2Vsc2UKKwlVU0VfSU5ERVg9IiRUSElTX0lOREVYIgorZmkKKworY2FzZSAiJHN0YXR1c19vbmx5IiBpbgordCkKKwkjIFRoaXMgd2lsbCBzaWxlbnRseSBmYWlsIGluIGEgcmVhZC1vbmx5IHJlcG9zaXRvcnksIHdoaWNoIGlzCisJIyB3aGF0IHdlIHdhbnQuCisJR0lUX0lOREVYX0ZJTEU9IiRVU0VfSU5ERVgiIGdpdCB1cGRhdGUtaW5kZXggLXEgLS11bm1lcmdlZCAtLXJlZnJlc2gKKwlydW5fc3RhdHVzCisJZXhpdCAkPworCTs7CisnJykKKwlHSVRfSU5ERVhfRklMRT0iJFVTRV9JTkRFWCIgZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2ggfHwgZXhpdAorCTs7Citlc2FjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR3JhYiBjb21taXQgbWVzc2FnZSwgd3JpdGUgb3V0IHRyZWUgYW5kIG1ha2UgY29tbWl0LgorCitpZiB0ZXN0IHQgPSAiJHZlcmlmeSIgJiYgdGVzdCAteCAiJEdJVF9ESVIiL2hvb2tzL3ByZS1jb21taXQKK3RoZW4KKyAgICBHSVRfSU5ERVhfRklMRT0iJHtUTVBfSU5ERVg6LSR7VVNFX0lOREVYfX0iICIkR0lUX0RJUiIvaG9va3MvcHJlLWNvbW1pdCBcCisgICAgfHwgZXhpdAorZmkKKworaWYgdGVzdCAiJGxvZ19tZXNzYWdlIiAhPSAnJwordGhlbgorCXByaW50ZiAnJXNcbicgIiRsb2dfbWVzc2FnZSIKK2VsaWYgdGVzdCAiJGxvZ2ZpbGUiICE9ICIiCit0aGVuCisJaWYgdGVzdCAiJGxvZ2ZpbGUiID0gLQorCXRoZW4KKwkJdGVzdCAtdCAwICYmCisJCWVjaG8gPiYyICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KSIKKwkJY2F0CisJZWxzZQorCQljYXQgPCIkbG9nZmlsZSIKKwlmaQorZWxpZiB0ZXN0ICIkdXNlX2NvbW1pdCIgIT0gIiIKK3RoZW4KKwllbmNvZGluZz0kKGdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyB8fCBlY2hvIFVURi04KQorCWdpdCBzaG93IC1zIC0tcHJldHR5PXJhdyAtLWVuY29kaW5nPSIkZW5jb2RpbmciICIkdXNlX2NvbW1pdCIgfAorCXNlZCAtZSAnMSwvXiQvZCcgLWUgJ3MvXiAgICAvLycKK2VsaWYgdGVzdCAtZiAiJEdJVF9ESVIvTUVSR0VfTVNHIgordGhlbgorCWNhdCAiJEdJVF9ESVIvTUVSR0VfTVNHIgorZWxpZiB0ZXN0IC1mICIkR0lUX0RJUi9TUVVBU0hfTVNHIgordGhlbgorCWNhdCAiJEdJVF9ESVIvU1FVQVNIX01TRyIKK2VsaWYgdGVzdCAiJHRlbXBsYXRlZmlsZSIgIT0gIiIKK3RoZW4KKwljYXQgIiR0ZW1wbGF0ZWZpbGUiCitmaSB8IGdpdCBzdHJpcHNwYWNlID4iJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHCisKK2Nhc2UgIiRzaWdub2ZmIiBpbgordCkKKwlzaWduPSQoZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwgc2VkIC1lICcKKwkJcy8+LiovPi8KKwkJcy9eL1NpZ25lZC1vZmYtYnk6IC8KKwkJJykKKwlibGFua19iZWZvcmVfc2lnbm9mZj0KKwl0YWlsIC1uIDEgIiRHSVRfRElSIi9DT01NSVRfRURJVE1TRyB8CisJZ3JlcCAnU2lnbmVkLW9mZi1ieTonID4vZGV2L251bGwgfHwgYmxhbmtfYmVmb3JlX3NpZ25vZmY9JworJworCXRhaWwgLW4gMSAiJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHIHwKKwlncmVwICIkc2lnbiIkID4vZGV2L251bGwgfHwKKwlwcmludGYgJyVzJXNcbicgIiRibGFua19iZWZvcmVfc2lnbm9mZiIgIiRzaWduIiBcCisJCT4+IiRHSVRfRElSIi9DT01NSVRfRURJVE1TRworCTs7Citlc2FjCisKK2lmIHRlc3QgLWYgIiRHSVRfRElSL01FUkdFX0hFQUQiICYmIHRlc3QgLXogIiRub19lZGl0IjsgdGhlbgorCWVjaG8gIiMiCisJZWNobyAiIyBJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIE1FUkdFLiIKKwllY2hvICIjIElmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGUiCisJcHJpbnRmICclc1xuJyAiIwkkR0lUX0RJUi9NRVJHRV9IRUFEIgorCWVjaG8gIiMgYW5kIHRyeSBhZ2FpbiIKKwllY2hvICIjIgorZmkgPj4iJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHCisKKyMgQXV0aG9yCitpZiB0ZXN0ICcnICE9ICIkdXNlX2NvbW1pdCIKK3RoZW4KKwlldmFsICIkKGdldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQgIiR1c2VfY29tbWl0IikiCisJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMIEdJVF9BVVRIT1JfREFURQorZmkKK2lmIHRlc3QgJycgIT0gIiRmb3JjZV9hdXRob3IiCit0aGVuCisJR0lUX0FVVEhPUl9OQU1FPWBleHByICJ6JGZvcmNlX2F1dGhvciIgOiAnelwoLipbXiBdXCkgKjwuKidgICYmCisJR0lUX0FVVEhPUl9FTUFJTD1gZXhwciAieiRmb3JjZV9hdXRob3IiIDogJy4qXCg8LipcKSdgICYmCisJdGVzdCAnJyAhPSAiJEdJVF9BVVRIT1JfTkFNRSIgJiYKKwl0ZXN0ICcnICE9ICIkR0lUX0FVVEhPUl9FTUFJTCIgfHwKKwlkaWUgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCisJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMCitmaQorCitQQVJFTlRTPSItcCBIRUFEIgoraWYgdGVzdCAteiAiJGluaXRpYWxfY29tbWl0IgordGhlbgorCXJsb2dhPSdjb21taXQnCisJaWYgWyAtZiAiJEdJVF9ESVIvTUVSR0VfSEVBRCIgXTsgdGhlbgorCQlybG9nYT0nY29tbWl0IChtZXJnZSknCisJCVBBUkVOVFM9Ii1wIEhFQUQgImBzZWQgLWUgJ3MvXi8tcCAvJyAiJEdJVF9ESVIvTUVSR0VfSEVBRCJgCisJZWxpZiB0ZXN0IC1uICIkYW1lbmQiOyB0aGVuCisJCXJsb2dhPSdjb21taXQgKGFtZW5kKScKKwkJUEFSRU5UUz0kKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8CisJCQlzZWQgLW4gLWUgJy9eJC9xJyAtZSAncy9ecGFyZW50IC8tcCAvcCcpCisJZmkKKwljdXJyZW50PSIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiCitlbHNlCisJaWYgWyAteiAiJChnaXQgbHMtZmlsZXMpIiBdOyB0aGVuCisJCWVjaG8gPiYyICdub3RoaW5nIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIGZpbGUxIGZpbGUyIiB0byBpbmNsdWRlIGZvciBjb21taXQpJworCQlleGl0IDEKKwlmaQorCVBBUkVOVFM9IiIKKwlybG9nYT0nY29tbWl0IChpbml0aWFsKScKKwljdXJyZW50PScnCitmaQorc2V0X3JlZmxvZ19hY3Rpb24gIiRybG9nYSIKKworaWYgdGVzdCAteiAiJG5vX2VkaXQiCit0aGVuCisJeworCQllY2hvICIiCisJCWVjaG8gIiMgUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiIKKwkJZWNobyAiIyAoQ29tbWVudCBsaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIG5vdCBiZSBpbmNsdWRlZCkiCisJCXRlc3QgLXogIiRvbmx5X2luY2x1ZGVfYXNzdW1lZCIgfHwgZWNobyAiJG9ubHlfaW5jbHVkZV9hc3N1bWVkIgorCQlydW5fc3RhdHVzCisJfSA+PiIkR0lUX0RJUiIvQ09NTUlUX0VESVRNU0cKK2Vsc2UKKwkjIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gY29tbWl0CisJcnVuX3N0YXR1cyA+L2Rldi9udWxsCitmaQorY2FzZSAiJGFsbG93X2VtcHR5LCQ/LCRQQVJFTlRTIiBpbgordCwqIHwgPywwLCogfCA/LCosLXAnICc/Ki1wJyAnPyopCisJIyBhbiBleHBsaWNpdCAtLWFsbG93LWVtcHR5LCBvciBhIG1lcmdlIGNvbW1pdCBjYW4gcmVjb3JkIHRoZQorCSMgc2FtZSB0cmVlIGFzIGl0cyBwYXJlbnQuICBPdGhlcndpc2UgaGF2aW5nIGNvbW1pdGFibGUgcGF0aHMKKwkjIGlzIHJlcXVpcmVkLgorCTs7CisqKQorCXJtIC1mICIkR0lUX0RJUi9DT01NSVRfRURJVE1TRyIgIiRHSVRfRElSL1NRVUFTSF9NU0ciCisJdXNlX3N0YXR1c19jb2xvcj10CisJcnVuX3N0YXR1cworCWV4aXQgMQorZXNhYworCitjYXNlICIkbm9fZWRpdCIgaW4KKycnKQorCWdpdCB2YXIgR0lUX0FVVEhPUl9JREVOVCA+IC9kZXYvbnVsbCAgfHwgZGllCisJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID4gL2Rldi9udWxsICB8fCBkaWUKKwlnaXRfZWRpdG9yICIkR0lUX0RJUi9DT01NSVRfRURJVE1TRyIKKwk7OworZXNhYworCitjYXNlICIkdmVyaWZ5IiBpbgordCkKKwlpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvY29tbWl0LW1zZworCXRoZW4KKwkJIiRHSVRfRElSIi9ob29rcy9jb21taXQtbXNnICIkR0lUX0RJUiIvQ09NTUlUX0VESVRNU0cgfHwgZXhpdAorCWZpCitlc2FjCisKK2lmIHRlc3QgLXogIiRub19lZGl0IgordGhlbgorICAgIHNlZCAtZSAnCisgICAgICAgIC9eZGlmZiAtLWdpdCBhXC8uKi97CisJICAgIHMvLy8KKwkgICAgcQorCX0KKwkvXiMvZAorICAgICcgIiRHSVRfRElSIi9DT01NSVRfRURJVE1TRworZWxzZQorICAgIGNhdCAiJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHCitmaSB8CitnaXQgc3RyaXBzcGFjZSA+IiRHSVRfRElSIi9DT01NSVRfTVNHCisKKyMgVGVzdCB3aGV0aGVyIHRoZSBjb21taXQgbWVzc2FnZSBoYXMgYW55IGNvbnRlbnQgd2UgZGlkbid0IHN1cHBseS4KK2hhdmVfY29tbWl0bXNnPQorZ3JlcCAtdiAtaSAnXlNpZ25lZC1vZmYtYnknICIkR0lUX0RJUiIvQ09NTUlUX01TRyB8CisJZ2l0IHN0cmlwc3BhY2UgPiAiJEdJVF9ESVIiL0NPTU1JVF9CQVJFTVNHCisKKyMgSXMgdGhlIGNvbW1pdCBtZXNzYWdlIHRvdGFsbHkgZW1wdHk/CitpZiB0ZXN0IC1zICIkR0lUX0RJUiIvQ09NTUlUX0JBUkVNU0cKK3RoZW4KKwlpZiB0ZXN0ICIkdGVtcGxhdGVmaWxlIiAhPSAiIgorCXRoZW4KKwkJIyBUZXN0IHdoZXRoZXIgdGhpcyBpcyBqdXN0IHRoZSB1bmFsdGVyZWQgdGVtcGxhdGUuCisJCWlmIGNudD1gc2VkIC1lICcvXiMvZCcgPCAiJHRlbXBsYXRlZmlsZSIgfAorCQkJZ2l0IHN0cmlwc3BhY2UgfAorCQkJZGlmZiAiJEdJVF9ESVIiL0NPTU1JVF9CQVJFTVNHIC0gfAorCQkJd2MgLWxgICYmCisJCSAgIHRlc3QgMCAtbHQgJGNudAorCQl0aGVuCisJCQloYXZlX2NvbW1pdG1zZz10CisJCWZpCisJZWxzZQorCQkjIE5vIHRlbXBsYXRlLCBzbyB0aGUgY29udGVudCBpbiB0aGUgY29tbWl0IG1lc3NhZ2UgbXVzdAorCQkjIGhhdmUgY29tZSBmcm9tIHRoZSB1c2VyLgorCQloYXZlX2NvbW1pdG1zZz10CisJZmkKK2ZpCisKK3JtIC1mICIkR0lUX0RJUiIvQ09NTUlUX0JBUkVNU0cKKworaWYgdGVzdCAiJGhhdmVfY29tbWl0bXNnIiA9ICJ0IgordGhlbgorCWlmIHRlc3QgLXogIiRUTVBfSU5ERVgiCisJdGhlbgorCQl0cmVlPSQoR0lUX0lOREVYX0ZJTEU9IiRVU0VfSU5ERVgiIGdpdCB3cml0ZS10cmVlKQorCWVsc2UKKwkJdHJlZT0kKEdJVF9JTkRFWF9GSUxFPSIkVE1QX0lOREVYIiBnaXQgd3JpdGUtdHJlZSkgJiYKKwkJcm0gLWYgIiRUTVBfSU5ERVgiCisJZmkgJiYKKwljb21taXQ9JChnaXQgY29tbWl0LXRyZWUgJHRyZWUgJFBBUkVOVFMgPCIkR0lUX0RJUi9DT01NSVRfTVNHIikgJiYKKwlybG9nbT0kKHNlZCAtZSAxcSAiJEdJVF9ESVIiL0NPTU1JVF9NU0cpICYmCisJZ2l0IHVwZGF0ZS1yZWYgLW0gIiRHSVRfUkVGTE9HX0FDVElPTjogJHJsb2dtIiBIRUFEICRjb21taXQgIiRjdXJyZW50IiAmJgorCXJtIC1mIC0tICIkR0lUX0RJUi9NRVJHRV9IRUFEIiAiJEdJVF9ESVIvTUVSR0VfTVNHIiAmJgorCWlmIHRlc3QgLWYgIiRORVhUX0lOREVYIgorCXRoZW4KKwkJbXYgIiRORVhUX0lOREVYIiAiJFRISVNfSU5ERVgiCisJZWxzZQorCQk6IDsjIGhhcHB5CisJZmkKK2Vsc2UKKwllY2hvID4mMiAiKiBubyBjb21taXQgbWVzc2FnZT8gIGFib3J0aW5nIGNvbW1pdC4iCisJZmFsc2UKK2ZpCityZXQ9IiQ/Igorcm0gLWYgIiRHSVRfRElSL0NPTU1JVF9NU0ciICIkR0lUX0RJUi9DT01NSVRfRURJVE1TRyIgIiRHSVRfRElSL1NRVUFTSF9NU0ciCisKK2NkX3RvX3RvcGxldmVsCisKK2dpdCByZXJlcmUKKworaWYgdGVzdCAiJHJldCIgPSAwCit0aGVuCisJZ2l0IGdjIC0tYXV0bworCWlmIHRlc3QgLXggIiRHSVRfRElSIi9ob29rcy9wb3N0LWNvbW1pdAorCXRoZW4KKwkJIiRHSVRfRElSIi9ob29rcy9wb3N0LWNvbW1pdAorCWZpCisJaWYgdGVzdCAteiAiJHF1aWV0IgorCXRoZW4KKwkJY29tbWl0PWBnaXQgZGlmZi10cmVlIC0tYWx3YXlzIC0tc2hvcnRzdGF0IC0tcHJldHR5PSJmb3JtYXQ6JWg6ICVzIlwKKwkJICAgICAgIC0tYWJicmV2IC0tc3VtbWFyeSAtLXJvb3QgSEVBRCAtLWAKKwkJZWNobyAiQ3JlYXRlZCR7aW5pdGlhbF9jb21taXQ6KyBpbml0aWFsfSBjb21taXQgJGNvbW1pdCIKKwlmaQorZmkKKworZXhpdCAiJHJldCIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWZldGNoLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtZmV0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTMxNDI3MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWZldGNoLnNoCkBAIC0wLDAgKzEsMzc5IEBACisjIS9iaW4vc2gKKyMKKworVVNBR0U9JzxmZXRjaC1vcHRpb25zPiA8cmVwb3NpdG9yeT4gPHJlZnNwZWM+Li4uJworU1VCRElSRUNUT1JZX09LPVllcworLiBnaXQtc2gtc2V0dXAKK3NldF9yZWZsb2dfYWN0aW9uICJmZXRjaCAkKiIKK2NkX3RvX3RvcGxldmVsIDsjIHByb2JhYmx5IHVubmVjZXNzYXJ5Li4uCisKKy4gZ2l0LXBhcnNlLXJlbW90ZQorX3g0MD0nWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXScKK194NDA9IiRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAiCisKK0xGPScKKycKK0lGUz0iJExGIgorCitub190YWdzPQordGFncz0KK2FwcGVuZD0KK2ZvcmNlPQordmVyYm9zZT0KK3VwZGF0ZV9oZWFkX29rPQorZXhlYz0KK2tlZXA9CitzaGFsbG93X2RlcHRoPQorbm9fcHJvZ3Jlc3M9Cit0ZXN0IC10IDEgfHwgbm9fcHJvZ3Jlc3M9LS1uby1wcm9ncmVzcworcXVpZXQ9Cit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLWF8LS1hfC0tYXB8LS1hcHB8LS1hcHBlfC0tYXBwZW58LS1hcHBlbmQpCisJCWFwcGVuZD10CisJCTs7CisJLS11cGx8LS11cGxvfC0tdXBsb2F8LS11cGxvYWR8LS11cGxvYWQtfC0tdXBsb2FkLXB8XAorCS0tdXBsb2FkLXBhfC0tdXBsb2FkLXBhY3wtLXVwbG9hZC1wYWNrKQorCQlzaGlmdAorCQlleGVjPSItLXVwbG9hZC1wYWNrPSQxIgorCQk7OworCS0tdXBsPSp8LS11cGxvPSp8LS11cGxvYT0qfC0tdXBsb2FkPSp8XAorCS0tdXBsb2FkLT0qfC0tdXBsb2FkLXA9KnwtLXVwbG9hZC1wYT0qfC0tdXBsb2FkLXBhYz0qfC0tdXBsb2FkLXBhY2s9KikKKwkJZXhlYz0tLXVwbG9hZC1wYWNrPSQoZXhwciAieiQxIiA6ICd6LVtePV0qPVwoLipcKScpCisJCXNoaWZ0CisJCTs7CisJLWZ8LS1mfC0tZm98LS1mb3J8LS1mb3JjfC0tZm9yY2UpCisJCWZvcmNlPXQKKwkJOzsKKwktdHwtLXR8LS10YXwtLXRhZ3wtLXRhZ3MpCisJCXRhZ3M9dAorCQk7OworCS1ufC0tbnwtLW5vfC0tbm8tfC0tbm8tdHwtLW5vLXRhfC0tbm8tdGFnfC0tbm8tdGFncykKKwkJbm9fdGFncz10CisJCTs7CisJLXV8LS11fC0tdXB8LS11cGR8LS11cGRhfC0tdXBkYXR8LS11cGRhdGV8LS11cGRhdGUtfC0tdXBkYXRlLWh8XAorCS0tdXBkYXRlLWhlfC0tdXBkYXRlLWhlYXwtLXVwZGF0ZS1oZWFkfC0tdXBkYXRlLWhlYWQtfFwKKwktLXVwZGF0ZS1oZWFkLW98LS11cGRhdGUtaGVhZC1vaykKKwkJdXBkYXRlX2hlYWRfb2s9dAorCQk7OworCS1xfC0tcXwtLXF1fC0tcXVpfC0tcXVpZXwtLXF1aWV0KQorCQlxdWlldD0tLXF1aWV0CisJCTs7CisJLXZ8LS12ZXJib3NlKQorCQl2ZXJib3NlPSIkdmVyYm9zZSJZZXMKKwkJOzsKKwkta3wtLWt8LS1rZXwtLWtlZXwtLWtlZXApCisJCWtlZXA9Jy1rIC1rJworCQk7OworCS0tZGVwdGg9KikKKwkJc2hhbGxvd19kZXB0aD0iLS1kZXB0aD1gZXhwciAieiQxIiA6ICd6LVtePV0qPVwoLipcKSdgIgorCQk7OworCS0tZGVwdGgpCisJCXNoaWZ0CisJCXNoYWxsb3dfZGVwdGg9Ii0tZGVwdGg9JDEiCisJCTs7CisJLSopCisJCXVzYWdlCisJCTs7CisJKikKKwkJYnJlYWsKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworY2FzZSAiJCMiIGluCiswKQorCW9yaWdpbj0kKGdldF9kZWZhdWx0X3JlbW90ZSkKKwl0ZXN0IC1uICIkKGdldF9yZW1vdGVfdXJsICR7b3JpZ2lufSkiIHx8CisJCWRpZSAiV2hlcmUgZG8geW91IHdhbnQgdG8gZmV0Y2ggZnJvbSB0b2RheT8iCisJc2V0IHggJG9yaWdpbiA7IHNoaWZ0IDs7Citlc2FjCisKK2lmIHRlc3QgLXogIiRleGVjIgordGhlbgorCSMgTm8gY29tbWFuZCBsaW5lIG92ZXJyaWRlIGFuZCB3ZSBoYXZlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSByZW1vdGUuCisJZXhlYz0iLS11cGxvYWQtcGFjaz0kKGdldF91cGxvYWRwYWNrICQxKSIKK2ZpCisKK3JlbW90ZV9uaWNrPSIkMSIKK3JlbW90ZT0kKGdldF9yZW1vdGVfdXJsICIkQCIpCityZWZzPQorcnJlZj0KK3JzeW5jX3NsdXJwZWRfb2JqZWN0cz0KKworaWYgdGVzdCAiIiA9ICIkYXBwZW5kIgordGhlbgorCTogPiIkR0lUX0RJUi9GRVRDSF9IRUFEIgorZmkKKworIyBHbG9iYWwgdGhhdCBpcyByZXVzZWQgbGF0ZXIKK2xzX3JlbW90ZV9yZXN1bHQ9JChnaXQgbHMtcmVtb3RlICRleGVjICIkcmVtb3RlIikgfHwKKwlkaWUgIkNhbm5vdCBnZXQgdGhlIHJlcG9zaXRvcnkgc3RhdGUgZnJvbSAkcmVtb3RlIgorCithcHBlbmRfZmV0Y2hfaGVhZCAoKSB7CisJZmxhZ3M9CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGZsYWdzPSIkZmxhZ3MkTEYtdiIKKwl0ZXN0IC1uICIkZm9yY2Ukc2luZ2xlX2ZvcmNlIiAmJiBmbGFncz0iJGZsYWdzJExGLWYiCisJR0lUX1JFRkxPR19BQ1RJT049IiRHSVRfUkVGTE9HX0FDVElPTiIgXAorCQlnaXQgZmV0Y2gtLXRvb2wgJGZsYWdzIGFwcGVuZC1mZXRjaC1oZWFkICIkQCIKK30KKworIyB1cGRhdGluZyB0aGUgY3VycmVudCBIRUFEIHdpdGggZ2l0LWZldGNoIGluIGEgYmFyZQorIyByZXBvc2l0b3J5IGlzIGFsd2F5cyBmaW5lLgoraWYgdGVzdCAteiAiJHVwZGF0ZV9oZWFkX29rIiAmJiB0ZXN0ICQoaXNfYmFyZV9yZXBvc2l0b3J5KSA9IGZhbHNlCit0aGVuCisJb3JpZ19oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIDI+L2Rldi9udWxsKQorZmkKKworIyBBbGxvdyAtLXRhZ3MvLS1ub3RhZ3MgZnJvbSByZW1vdGUuJDEudGFnb3B0CitjYXNlICIkdGFncyRub190YWdzIiBpbgorJycpCisJY2FzZSAiJChnaXQgY29uZmlnIC0tZ2V0ICJyZW1vdGUuJDEudGFnb3B0IikiIGluCisJLS10YWdzKQorCQl0YWdzPXQgOzsKKwktLW5vLXRhZ3MpCisJCW5vX3RhZ3M9dCA7OworCWVzYWMKK2VzYWMKKworIyBJZiAtLXRhZ3MgKGFuZCBsYXRlciAtLWhlYWRzIG9yIC0tYWxsKSBpcyBzcGVjaWZpZWQsIHRoZW4gd2UgYXJlCisjIG5vdCB0YWxraW5nIGFib3V0IGRlZmF1bHRzIHN0b3JlZCBpbiBQdWxsOiBsaW5lIG9mIHJlbW90ZXMgb3IKKyMgYnJhbmNoZXMgZmlsZSwgYW5kIGp1c3QgZmV0Y2ggdGhvc2UgYW5kIHJlZnNwZWNzIGV4cGxpY2l0bHkgZ2l2ZW4uCisjIE90aGVyd2lzZSB3ZSBkbyB3aGF0IHdlIGFsd2F5cyBkaWQuCisKK3JlZmxpc3Q9JChnZXRfcmVtb3RlX3JlZnNfZm9yX2ZldGNoICIkQCIpCitpZiB0ZXN0ICIkdGFncyIKK3RoZW4KKwl0YWdsaXN0PWBJRlM9JwknICYmCisJCSAgZWNobyAiJGxzX3JlbW90ZV9yZXN1bHQiIHwKKwkJICBnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nPXJlZnMvdGFncy8gfAorCSAgICAgICAgICB3aGlsZSByZWFkIHNoYTEgbmFtZQorCQkgIGRvCisJCQllY2hvICIuJHtuYW1lfToke25hbWV9IgorCQkgIGRvbmVgIHx8IGV4aXQKKwlpZiB0ZXN0ICIkIyIgLWd0IDEKKwl0aGVuCisJCSMgcmVtb3RlIFVSTCBwbHVzIGV4cGxpY2l0IHJlZnNwZWNzOyB3ZSBuZWVkIHRvIG1lcmdlIHRoZW0uCisJCXJlZmxpc3Q9IiRyZWZsaXN0JExGJHRhZ2xpc3QiCisJZWxzZQorCQkjIE5vIGV4cGxpY2l0IHJlZnNwZWNzOyBmZXRjaCB0YWdzIG9ubHkuCisJCXJlZmxpc3Q9JHRhZ2xpc3QKKwlmaQorZmkKKworZmV0Y2hfYWxsX2F0X29uY2UgKCkgeworCisgIGV2YWw9JChlY2hvICIkMSIgfCBnaXQgZmV0Y2gtLXRvb2wgcGFyc2UtcmVmbGlzdCAiLSIpCisgIGV2YWwgIiRldmFsIgorCisgICAgKCA6IHN1YnNoZWxsIGJlY2F1c2Ugd2UgbXVjayB3aXRoIElGUworICAgICAgSUZTPSIgCSRMRiIKKyAgICAgICgKKwlpZiB0ZXN0ICIkcmVtb3RlIiA9IC4gOyB0aGVuCisJICAgIGdpdCBzaG93LXJlZiAkcnJlZiB8fCBlY2hvIGZhaWxlZCAiJHJlbW90ZSIKKwllbGlmIHRlc3QgLWYgIiRyZW1vdGUiIDsgdGhlbgorCSAgICB0ZXN0IC1uICIkc2hhbGxvd19kZXB0aCIgJiYKKwkJZGllICJzaGFsbG93IGNsb25lIHdpdGggYnVuZGxlIGlzIG5vdCBzdXBwb3J0ZWQiCisJICAgIGdpdCBidW5kbGUgdW5idW5kbGUgIiRyZW1vdGUiICRycmVmIHx8CisJICAgIGVjaG8gZmFpbGVkICIkcmVtb3RlIgorCWVsc2UKKwkJaWYJdGVzdCAtZCAiJHJlbW90ZSIgJiYKKworCQkJIyBUaGUgcmVtb3RlIG1pZ2h0IGJlIG91ciBhbHRlcm5hdGUuICBXaXRoCisJCQkjIHRoaXMgb3B0aW1pemF0aW9uIHdlIHdpbGwgYnlwYXNzIGZldGNoLXBhY2sKKwkJCSMgYWx0b2dldGhlciwgd2hpY2ggbWVhbnMgd2UgY2Fubm90IGJlIGRvaW5nCisJCQkjIHRoZSBzaGFsbG93IHN0dWZmIGF0IGFsbC4KKwkJCXRlc3QgISAtZiAiJEdJVF9ESVIvc2hhbGxvdyIgJiYKKwkJCXRlc3QgLXogIiRzaGFsbG93X2RlcHRoIiAmJgorCisJCQkjIFNlZSBpZiBhbGwgb2Ygd2hhdCB3ZSBhcmUgZ29pbmcgdG8gZmV0Y2ggYXJlCisJCQkjIGNvbm5lY3RlZCB0byBvdXIgcmVwb3NpdG9yeSdzIHRpcHMsIGluIHdoaWNoCisJCQkjIGNhc2Ugd2UgZG8gbm90IGhhdmUgdG8gZG8gYW55IGZldGNoLgorCQkJdGhlaXJzPSQoZWNobyAiJGxzX3JlbW90ZV9yZXN1bHQiIHwgXAorCQkJCWdpdCBmZXRjaC0tdG9vbCAtcyBwaWNrLXJyZWYgIiRycmVmIiAiLSIpICYmCisKKwkJCSMgVGhpcyB3aWxsIGJhcmYgd2hlbiAkdGhlaXJzIHJlYWNoIGFuIG9iamVjdCB0aGF0CisJCQkjIHdlIGRvIG5vdCBoYXZlIGluIG91ciByZXBvc2l0b3J5LiAgT3RoZXJ3aXNlLAorCQkJIyB3ZSBhbHJlYWR5IGhhdmUgZXZlcnl0aGluZyB0aGUgZmV0Y2ggd291bGQgYnJpbmcgaW4uCisJCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzICR0aGVpcnMgLS1ub3QgLS1hbGwgXAorCQkJCT4vZGV2L251bGwgMj4vZGV2L251bGwKKwkJdGhlbgorCQkJZWNobyAiJGxzX3JlbW90ZV9yZXN1bHQiIHwgXAorCQkJCWdpdCBmZXRjaC0tdG9vbCBwaWNrLXJyZWYgIiRycmVmIiAiLSIKKwkJZWxzZQorCQkJZmxhZ3M9CisJCQljYXNlICR2ZXJib3NlIGluCisJCQlZZXNZZXMqKQorCQkJICAgIGZsYWdzPSItdiIKKwkJCSAgICA7OworCQkJZXNhYworCQkJZ2l0LWZldGNoLXBhY2sgLS10aGluICRleGVjICRrZWVwICRzaGFsbG93X2RlcHRoIFwKKwkJCQkkcXVpZXQgJG5vX3Byb2dyZXNzICRmbGFncyAiJHJlbW90ZSIgJHJyZWYgfHwKKwkJCWVjaG8gZmFpbGVkICIkcmVtb3RlIgorCQlmaQorCWZpCisgICAgICApIHwKKyAgICAgICgKKwlmbGFncz0KKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZmxhZ3M9IiRmbGFncyAtdiIKKwl0ZXN0IC1uICIkZm9yY2UiICYmIGZsYWdzPSIkZmxhZ3MgLWYiCisJR0lUX1JFRkxPR19BQ1RJT049IiRHSVRfUkVGTE9HX0FDVElPTiIgXAorCQlnaXQgZmV0Y2gtLXRvb2wgJGZsYWdzIG5hdGl2ZS1zdG9yZSBcCisJCQkiJHJlbW90ZSIgIiRyZW1vdGVfbmljayIgIiRyZWZzIgorICAgICAgKQorICAgICkgfHwgZXhpdAorCit9CisKK2ZldGNoX3Blcl9yZWYgKCkgeworICByZWZsaXN0PSIkMSIKKyAgcmVmcz0KKyAgcnJlZj0KKworICBmb3IgcmVmIGluICRyZWZsaXN0CisgIGRvCisgICAgICByZWZzPSIkcmVmcyRMRiRyZWYiCisKKyAgICAgICMgVGhlc2UgYXJlIHJlbGF0aXZlIHBhdGggZnJvbSAkR0lUX0RJUiwgdHlwaWNhbGx5IHN0YXJ0aW5nIGF0IHJlZnMvCisgICAgICAjIGJ1dCBtYXkgYmUgSEVBRAorICAgICAgaWYgZXhwciAieiRyZWYiIDogJ3pcLicgPi9kZXYvbnVsbAorICAgICAgdGhlbgorCSAgbm90X2Zvcl9tZXJnZT10CisJICByZWY9JChleHByICJ6JHJlZiIgOiAnelwuXCguKlwpJykKKyAgICAgIGVsc2UKKwkgIG5vdF9mb3JfbWVyZ2U9CisgICAgICBmaQorICAgICAgaWYgZXhwciAieiRyZWYiIDogJ3orJyA+L2Rldi9udWxsCisgICAgICB0aGVuCisJICBzaW5nbGVfZm9yY2U9dAorCSAgcmVmPSQoZXhwciAieiRyZWYiIDogJ3orXCguKlwpJykKKyAgICAgIGVsc2UKKwkgIHNpbmdsZV9mb3JjZT0KKyAgICAgIGZpCisgICAgICByZW1vdGVfbmFtZT0kKGV4cHIgInokcmVmIiA6ICd6XChbXjpdKlwpOicpCisgICAgICBsb2NhbF9uYW1lPSQoZXhwciAieiRyZWYiIDogJ3pbXjpdKjpcKC4qXCknKQorCisgICAgICBycmVmPSIkcnJlZiRMRiRyZW1vdGVfbmFtZSIKKworICAgICAgIyBUaGVyZSBhcmUgdHJhbnNwb3J0cyB0aGF0IGNhbiBmZXRjaCBvbmx5IG9uZSBoZWFkIGF0IGEgdGltZS4uLgorICAgICAgY2FzZSAiJHJlbW90ZSIgaW4KKyAgICAgIGh0dHA6Ly8qIHwgaHR0cHM6Ly8qIHwgZnRwOi8vKikKKwkgIHRlc3QgLW4gIiRzaGFsbG93X2RlcHRoIiAmJgorCQlkaWUgInNoYWxsb3cgY2xvbmUgd2l0aCBodHRwIG5vdCBzdXBwb3J0ZWQiCisJICBwcm90bz1gZXhwciAiJHJlbW90ZSIgOiAnXChbXjpdKlwpOidgCisJICBpZiBbIC1uICIkR0lUX1NTTF9OT19WRVJJRlkiIF07IHRoZW4KKwkgICAgICBjdXJsX2V4dHJhX2FyZ3M9Ii1rIgorCSAgZmkKKwkgIGlmIFsgLW4gIiRHSVRfQ1VSTF9GVFBfTk9fRVBTViIgLW8gXAorCQkiYGdpdCBjb25maWcgLS1ib29sIGh0dHAubm9FUFNWYCIgPSB0cnVlIF07IHRoZW4KKwkgICAgICBub2Vwc3Zfb3B0PSItLWRpc2FibGUtZXBzdiIKKwkgIGZpCisKKwkgICMgRmluZCAkcmVtb3RlX25hbWUgZnJvbSBscy1yZW1vdGUgb3V0cHV0LgorCSAgaGVhZD0kKGVjaG8gIiRsc19yZW1vdGVfcmVzdWx0IiB8IFwKKwkJZ2l0IGZldGNoLS10b29sIC1zIHBpY2stcnJlZiAiJHJlbW90ZV9uYW1lIiAiLSIpCisJICBleHByICJ6JGhlYWQiIDogInokX3g0MFwkIiA+L2Rldi9udWxsIHx8CisJCWRpZSAiTm8gc3VjaCByZWYgJHJlbW90ZV9uYW1lIGF0ICRyZW1vdGUiCisJICBlY2hvID4mMiAiRmV0Y2hpbmcgJHJlbW90ZV9uYW1lIGZyb20gJHJlbW90ZSB1c2luZyAkcHJvdG8iCisJICBjYXNlICIkcXVpZXQiIGluICcnKSB2PS12IDs7ICopIHY9IDs7IGVzYWMKKwkgIGdpdC1odHRwLWZldGNoICR2IC1hICIkaGVhZCIgIiRyZW1vdGUiIHx8IGV4aXQKKwkgIDs7CisgICAgICByc3luYzovLyopCisJICB0ZXN0IC1uICIkc2hhbGxvd19kZXB0aCIgJiYKKwkJZGllICJzaGFsbG93IGNsb25lIHdpdGggcnN5bmMgbm90IHN1cHBvcnRlZCIKKwkgIFRNUF9IRUFEPSIkR0lUX0RJUi9UTVBfSEVBRCIKKwkgIHJzeW5jIC1MIC1xICIkcmVtb3RlLyRyZW1vdGVfbmFtZSIgIiRUTVBfSEVBRCIgfHwgZXhpdCAxCisJICBoZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBUTVBfSEVBRCkKKwkgIHJtIC1mICIkVE1QX0hFQUQiCisJICBjYXNlICIkcXVpZXQiIGluICcnKSB2PS12IDs7ICopIHY9IDs7IGVzYWMKKwkgIHRlc3QgIiRyc3luY19zbHVycGVkX29iamVjdHMiIHx8IHsKKwkgICAgICByc3luYyAtYSAkdiAtLWlnbm9yZS1leGlzdGluZyAtLWV4Y2x1ZGUgaW5mbyBcCisJCSAgIiRyZW1vdGUvb2JqZWN0cy8iICIkR0lUX09CSkVDVF9ESVJFQ1RPUlkvIiB8fCBleGl0CisKKwkgICAgICAjIExvb2sgYXQgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgZm9yIHJzeW5jIC0tIGh0dHAgd2lsbAorCSAgICAgICMgc3VwcG9ydCBpdCBuYXRpdmVseSBhbmQgZ2l0IG5hdGl2ZSBvbmVzIHdpbGwgZG8gaXQgb24KKwkgICAgICAjIHRoZSByZW1vdGUgZW5kLiAgTm90IGhhdmluZyB0aGF0IGZpbGUgaXMgbm90IGEgY3JpbWUuCisJICAgICAgcnN5bmMgLXEgIiRyZW1vdGUvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiIFwKKwkJICAiJEdJVF9ESVIvVE1QX0FMVCIgMj4vZGV2L251bGwgfHwKKwkJICBybSAtZiAiJEdJVF9ESVIvVE1QX0FMVCIKKwkgICAgICBpZiB0ZXN0IC1mICIkR0lUX0RJUi9UTVBfQUxUIgorCSAgICAgIHRoZW4KKwkJICByZXNvbHZlX2FsdGVybmF0ZXMgIiRyZW1vdGUiIDwiJEdJVF9ESVIvVE1QX0FMVCIgfAorCQkgIHdoaWxlIHJlYWQgYWx0CisJCSAgZG8KKwkJICAgICAgY2FzZSAiJGFsdCIgaW4gJ2JhZCBhbHRlcm5hdGU6ICcqKSBkaWUgIiRhbHQiOzsgZXNhYworCQkgICAgICBlY2hvID4mMiAiR2V0dGluZyBhbHRlcm5hdGU6ICRhbHQiCisJCSAgICAgIHJzeW5jIC1hdiAtLWlnbm9yZS1leGlzdGluZyAtLWV4Y2x1ZGUgaW5mbyBcCisJCSAgICAgICIkYWx0IiAiJEdJVF9PQkpFQ1RfRElSRUNUT1JZLyIgfHwgZXhpdAorCQkgIGRvbmUKKwkJICBybSAtZiAiJEdJVF9ESVIvVE1QX0FMVCIKKwkgICAgICBmaQorCSAgICAgIHJzeW5jX3NsdXJwZWRfb2JqZWN0cz10CisJICB9CisJICA7OworICAgICAgZXNhYworCisgICAgICBhcHBlbmRfZmV0Y2hfaGVhZCAiJGhlYWQiICIkcmVtb3RlIiBcCisJICAiJHJlbW90ZV9uYW1lIiAiJHJlbW90ZV9uaWNrIiAiJGxvY2FsX25hbWUiICIkbm90X2Zvcl9tZXJnZSIgfHwgZXhpdAorCisgIGRvbmUKKworfQorCitmZXRjaF9tYWluICgpIHsKKwljYXNlICIkcmVtb3RlIiBpbgorCWh0dHA6Ly8qIHwgaHR0cHM6Ly8qIHwgZnRwOi8vKiB8IHJzeW5jOi8vKiApCisJCWZldGNoX3Blcl9yZWYgIiRAIgorCQk7OworCSopCisJCWZldGNoX2FsbF9hdF9vbmNlICIkQCIKKwkJOzsKKwllc2FjCit9CisKK2ZldGNoX21haW4gIiRyZWZsaXN0IiB8fCBleGl0CisKKyMgYXV0b21hdGVkIHRhZyBmb2xsb3dpbmcKK2Nhc2UgIiRub190YWdzJHRhZ3MiIGluCisnJykKKwljYXNlICIkcmVmbGlzdCIgaW4KKwkqOnJlZnMvKikKKwkJIyBlZmZlY3RpdmUgb25seSB3aGVuIHdlIGFyZSBmb2xsb3dpbmcgcmVtb3RlIGJyYW5jaAorCQkjIHVzaW5nIGxvY2FsIHRyYWNraW5nIGJyYW5jaC4KKwkJdGFnbGlzdD0kKElGUz0nCScgJiYKKwkJZWNobyAiJGxzX3JlbW90ZV9yZXN1bHQiIHwKKwkJZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZz1yZWZzL3RhZ3MvIHwKKwkJd2hpbGUgcmVhZCBzaGExIG5hbWUKKwkJZG8KKwkJCWdpdCBjYXQtZmlsZSAtdCAiJHNoYTEiID4vZGV2L251bGwgMj4mMSB8fCBjb250aW51ZQorCQkJZWNobyA+JjIgIkF1dG8tZm9sbG93aW5nICRuYW1lIgorCQkJZWNobyAiLiR7bmFtZX06JHtuYW1lfSIKKwkJZG9uZSkKKwllc2FjCisJY2FzZSAiJHRhZ2xpc3QiIGluCisJJycpIDs7CisJPyopCisJCSMgZG8gbm90IGRlZXBlbiBhIHNoYWxsb3cgdHJlZSB3aGVuIGZvbGxvd2luZyB0YWdzCisJCXNoYWxsb3dfZGVwdGg9CisJCWZldGNoX21haW4gIiR0YWdsaXN0IiB8fCBleGl0IDs7CisJZXNhYworZXNhYworCisjIElmIHRoZSBvcmlnaW5hbCBoZWFkIHdhcyBlbXB0eSAoaS5lLiBubyAibWFzdGVyIiB5ZXQpLCBvcgorIyBpZiB3ZSB3ZXJlIHRvbGQgbm90IHRvIHdvcnJ5LCB3ZSBkbyBub3QgaGF2ZSB0byBjaGVjay4KK2Nhc2UgIiRvcmlnX2hlYWQiIGluCisnJykKKwk7OworPyopCisJY3Vycl9oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIDI+L2Rldi9udWxsKQorCWlmIHRlc3QgIiRjdXJyX2hlYWQiICE9ICIkb3JpZ19oZWFkIgorCXRoZW4KKwkgICAgZ2l0IHVwZGF0ZS1yZWYgXAorCQkJLW0gIiRHSVRfUkVGTE9HX0FDVElPTjogVW5kb2luZyBpbmNvcnJlY3RseSBmZXRjaGVkIEhFQUQuIiBcCisJCQlIRUFEICIkb3JpZ19oZWFkIgorCQlkaWUgIkNhbm5vdCBmZXRjaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4iCisJZmkKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtZ2Muc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1nYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNTk3ZTlmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtZ2Muc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiwgU2hhd24gTy4gUGVhcmNlCisjCisjIENsZWFudXAgdW5yZWFjaGFibGUgZmlsZXMgYW5kIG9wdGltaXplIHRoZSByZXBvc2l0b3J5LgorCitVU0FHRT0nWy0tcHJ1bmVdJworU1VCRElSRUNUT1JZX09LPVllcworLiBnaXQtc2gtc2V0dXAKKworbm9fcHJ1bmU9Ogord2hpbGUgdGVzdCAkIyAhPSAwCitkbworCWNhc2UgIiQxIiBpbgorCS0tcHJ1bmUpCisJCW5vX3BydW5lPQorCQk7OworCS0tKQorCQl1c2FnZQorCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCitjYXNlICIkKGdpdCBjb25maWcgLS1nZXQgZ2MucGFja3JlZnMpIiBpbgorbm90YmFyZXwiIikKKwl0ZXN0ICQoaXNfYmFyZV9yZXBvc2l0b3J5KSA9IHRydWUgfHwgcGFja19yZWZzPXRydWU7OworKikKKwlwYWNrX3JlZnM9JChnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBnYy5wYWNrcmVmcykKK2VzYWMKKwordGVzdCAidHJ1ZSIgIT0gIiRwYWNrX3JlZnMiIHx8CitnaXQgcGFjay1yZWZzIC0tcHJ1bmUgJiYKK2dpdCByZWZsb2cgZXhwaXJlIC0tYWxsICYmCitnaXQtcmVwYWNrIC1hIC1kIC1sICYmCiskbm9fcHJ1bmUgZ2l0IHBydW5lICYmCitnaXQgcmVyZXJlIGdjIHx8IGV4aXQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWxzLXJlbW90ZS5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWxzLXJlbW90ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZWM3MGJiCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtbHMtcmVtb3RlLnNoCkBAIC0wLDAgKzEsMTQyIEBACisjIS9iaW4vc2gKKyMKKwordXNhZ2UgKCkgeworICAgIGVjaG8gPiYyICJ1c2FnZTogJDAgWy0taGVhZHNdIFstLXRhZ3NdIFstdXwtLXVwbG9hZC1wYWNrIDx1cGxvYWQtcGFjaz5dIgorICAgIGVjaG8gPiYyICIgICAgICAgICAgPHJlcG9zaXRvcnk+IDxyZWZzPi4uLiIKKyAgICBleGl0IDE7Cit9CisKK2RpZSAoKSB7CisgICAgZWNobyA+JjIgIiQqIgorICAgIGV4aXQgMQorfQorCitleGVjPQord2hpbGUgdGVzdCAkIyAhPSAwCitkbworICBjYXNlICIkMSIgaW4KKyAgLWh8LS1ofC0taGV8LS1oZWF8LS1oZWFkfC0taGVhZHMpCisgIGhlYWRzPWhlYWRzOyBzaGlmdCA7OworICAtdHwtLXR8LS10YXwtLXRhZ3wtLXRhZ3MpCisgIHRhZ3M9dGFnczsgc2hpZnQgOzsKKyAgLXV8LS11fC0tdXB8LS11cGx8LS11cGxvYXwtLXVwbG9hZHwtLXVwbG9hZC18LS11cGxvYWQtcHwtLXVwbG9hZC1wYXxcCisgIC0tdXBsb2FkLXBhY3wtLXVwbG9hZC1wYWNrKQorCXNoaWZ0CisJZXhlYz0iLS11cGxvYWQtcGFjaz0kMSIKKwlzaGlmdDs7CisgIC11PSp8LS11PSp8LS11cD0qfC0tdXBsPSp8LS11cGxvPSp8LS11cGxvYT0qfC0tdXBsb2FkPSp8XAorICAtLXVwbG9hZC09KnwtLXVwbG9hZC1wPSp8LS11cGxvYWQtcGE9KnwtLXVwbG9hZC1wYWM9KnwtLXVwbG9hZC1wYWNrPSopCisJZXhlYz0tLXVwbG9hZC1wYWNrPSQoZXhwciAieiQxIiA6ICd6LVtePV0qPVwoLipcKScpCisJc2hpZnQ7OworICAtLSkKKyAgc2hpZnQ7IGJyZWFrIDs7CisgIC0qKQorICB1c2FnZSA7OworICAqKQorICBicmVhayA7OworICBlc2FjCitkb25lCisKK2Nhc2UgIiQjIiBpbiAwKSB1c2FnZSA7OyBlc2FjCisKK2Nhc2UgIiwkaGVhZHMsJHRhZ3MsIiBpbgorLCwsKSBoZWFkcz1oZWFkcyB0YWdzPXRhZ3Mgb3RoZXI9b3RoZXIgOzsKK2VzYWMKKworLiBnaXQtcGFyc2UtcmVtb3RlCitwZWVrX3JlcG89IiQoZ2V0X3JlbW90ZV91cmwgIiRAIikiCitzaGlmdAorCit0bXA9LmxzLXJlbW90ZS0kJAordHJhcCAicm0gLWZyICR0bXAtKiIgMCAxIDIgMyAxNQordG1wZGlyPSR0bXAtZAorCitjYXNlICIkcGVla19yZXBvIiBpbgoraHR0cDovLyogfCBodHRwczovLyogfCBmdHA6Ly8qICkKKwlpZiBbIC1uICIkR0lUX1NTTF9OT19WRVJJRlkiIC1vIFwKKwkJImBnaXQgY29uZmlnIC0tYm9vbCBodHRwLnNzbFZlcmlmeWAiID0gZmFsc2UgXTsgdGhlbgorCQljdXJsX2V4dHJhX2FyZ3M9Ii1rIgorCWZpCisJaWYgWyAtbiAiJEdJVF9DVVJMX0ZUUF9OT19FUFNWIiAtbyBcCisJCSJgZ2l0IGNvbmZpZyAtLWJvb2wgaHR0cC5ub0VQU1ZgIiA9IHRydWUgXTsgdGhlbgorCQljdXJsX2V4dHJhX2FyZ3M9IiR7Y3VybF9leHRyYV9hcmdzfSAtLWRpc2FibGUtZXBzdiIKKwlmaQorCWN1cmwgLW5zZiAkY3VybF9leHRyYV9hcmdzIC0taGVhZGVyICJQcmFnbWE6IG5vLWNhY2hlIiAiJHBlZWtfcmVwby9pbmZvL3JlZnMiIHx8CisJCWVjaG8gImZhaWxlZAlzbHVycGluZyIKKwk7OworCityc3luYzovLyogKQorCW1rZGlyICR0bXBkaXIgJiYKKwlyc3luYyAtcmxxICIkcGVla19yZXBvL0hFQUQiICR0bXBkaXIgJiYKKwlyc3luYyAtcnEgIiRwZWVrX3JlcG8vcmVmcyIgJHRtcGRpciB8fCB7CisJCWVjaG8gImZhaWxlZAlzbHVycGluZyIKKwkJZXhpdAorCX0KKwloZWFkPSQoY2F0ICIkdG1wZGlyL0hFQUQiKSAmJgorCWNhc2UgIiRoZWFkIiBpbgorCXJlZjonICcqKQorCQloZWFkPSQoZXhwciAieiRoZWFkIiA6ICd6cmVmOiBcKC4qXCknKSAmJgorCQloZWFkPSQoY2F0ICIkdG1wZGlyLyRoZWFkIikgfHwgZXhpdAorCWVzYWMgJiYKKwllY2hvICIkaGVhZAlIRUFEIgorCShjZCAkdG1wZGlyICYmIGZpbmQgcmVmcyAtdHlwZSBmKSB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJdHIgLWQgJ1wwMTInIDwiJHRtcGRpci8kcGF0aCIKKwkJZWNobyAiCSRwYXRoIgorCWRvbmUgJiYKKwlybSAtZnIgJHRtcGRpcgorCTs7CisKKyogKQorCWlmIHRlc3QgLWYgIiRwZWVrX3JlcG8iIDsgdGhlbgorCQlnaXQgYnVuZGxlIGxpc3QtaGVhZHMgIiRwZWVrX3JlcG8iIHx8CisJCWVjaG8gImZhaWxlZAlzbHVycGluZyIKKwllbHNlCisJCWdpdC1wZWVrLXJlbW90ZSAkZXhlYyAiJHBlZWtfcmVwbyIgfHwKKwkJZWNobyAiZmFpbGVkCXNsdXJwaW5nIgorCWZpCisJOzsKK2VzYWMgfAorc29ydCAtdCAnCScgLWsgMiB8Cit3aGlsZSByZWFkIHNoYTEgcGF0aAorZG8KKwljYXNlICIkc2hhMSIgaW4KKwlmYWlsZWQpCisJCWV4aXQgMSA7OworCWVzYWMKKwljYXNlICIkcGF0aCIgaW4KKwlyZWZzL2hlYWRzLyopCisJCWdyb3VwPWhlYWRzIDs7CisJcmVmcy90YWdzLyopCisJCWdyb3VwPXRhZ3MgOzsKKwkqKQorCQlncm91cD1vdGhlciA7OworCWVzYWMKKwljYXNlICIsJGhlYWRzLCR0YWdzLCRvdGhlciwiIGluCisJKiwkZ3JvdXAsKikKKwkJOzsKKwkqKQorCQljb250aW51ZTs7CisJZXNhYworCWNhc2UgIiQjIiBpbgorCTApCisJCW1hdGNoPXllcyA7OworCSopCisJCW1hdGNoPW5vCisJCWZvciBwYXQKKwkJZG8KKwkJCWNhc2UgIi8kcGF0aCIgaW4KKwkJCSovJHBhdCApCisJCQkJbWF0Y2g9eWVzCisJCQkJYnJlYWsgOzsKKwkJCWVzYWMKKwkJZG9uZQorCWVzYWMKKwljYXNlICIkbWF0Y2giIGluCisJbm8pCisJCWNvbnRpbnVlIDs7CisJZXNhYworCWVjaG8gIiRzaGExCSRwYXRoIgorZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtbWVyZ2Utb3Vycy5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW1lcmdlLW91cnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjlkYmE0YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW1lcmdlLW91cnMuc2gKQEAgLTAsMCArMSwxNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworIyBQcmV0ZW5kIHdlIHJlc29sdmVkIHRoZSBoZWFkcywgYnV0IGRlY2xhcmUgb3VyIHRyZWUgdHJ1bXBzIGV2ZXJ5Ym9keSBlbHNlLgorIworCisjIFdlIG5lZWQgdG8gZXhpdCB3aXRoIDIgaWYgdGhlIGluZGV4IGRvZXMgbm90IG1hdGNoIG91ciBIRUFEIHRyZWUsCisjIGJlY2F1c2UgdGhlIGN1cnJlbnQgaW5kZXggaXMgd2hhdCB3ZSB3aWxsIGJlIGNvbW1pdHRpbmcgYXMgdGhlCisjIG1lcmdlIHJlc3VsdC4KKworZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tIHx8IGV4aXQgMgorCitleGl0IDAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW1lcmdlLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2I5MjJjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW1lcmdlLnNoCkBAIC0wLDAgKzEsNjIwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK09QVElPTlNfS0VFUERBU0hEQVNIPQorT1BUSU9OU19TUEVDPSJcCitnaXQgbWVyZ2UgW29wdGlvbnNdIDxyZW1vdGU+Li4uCitnaXQgbWVyZ2UgW29wdGlvbnNdIDxtc2c+IEhFQUQgPHJlbW90ZT4KKy0tCitzdGF0ICAgICAgICAgICAgICAgICBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UKK24gICAgICAgICAgICAgICAgICAgIGRvbid0IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZQorc3VtbWFyeSAgICAgICAgICAgICAgKHN5bm9ueW0gdG8gLS1zdGF0KQorbG9nICAgICAgICAgICAgICAgICAgYWRkIGxpc3Qgb2Ygb25lLWxpbmUgbG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlCitzcXVhc2ggICAgICAgICAgICAgICBjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZQorY29tbWl0ICAgICAgICAgICAgICAgcGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpCitmZiAgICAgICAgICAgICAgICAgICBhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpCitmZi1vbmx5ICAgICAgICAgICAgICBhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlCityZXJlcmUtYXV0b3VwZGF0ZSAgICB1cGRhdGUgaW5kZXggd2l0aCBhbnkgcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24KK3Msc3RyYXRlZ3k9ICAgICAgICAgIG1lcmdlIHN0cmF0ZWd5IHRvIHVzZQorWD0gICAgICAgICAgICAgICAgICAgb3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneQorbSxtZXNzYWdlPSAgICAgICAgICAgbWVzc2FnZSB0byBiZSB1c2VkIGZvciB0aGUgbWVyZ2UgY29tbWl0IChpZiBhbnkpCisiCisKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKKy4gZ2l0LXNoLXNldHVwCityZXF1aXJlX3dvcmtfdHJlZQorY2RfdG9fdG9wbGV2ZWwKKwordGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiB8fAorCWRpZSAiTWVyZ2UgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorCishIHRlc3QgLWUgIiRHSVRfRElSL01FUkdFX0hFQUQiIHx8CisJZGllICdZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4nCisKK0xGPScKKycKKworYWxsX3N0cmF0ZWdpZXM9J3JlY3VyIHJlY3Vyc2l2ZSBvY3RvcHVzIHJlc29sdmUgc3R1cGlkIG91cnMgc3VidHJlZScKK2FsbF9zdHJhdGVnaWVzPSIkYWxsX3N0cmF0ZWdpZXMgcmVjdXJzaXZlLW91cnMgcmVjdXJzaXZlLXRoZWlycyIKK25vdF9zdHJhdGVnaWVzPSdiYXNlIGZpbGUgaW5kZXggdHJlZScKK2RlZmF1bHRfdHdvaGVhZF9zdHJhdGVnaWVzPSdyZWN1cnNpdmUnCitkZWZhdWx0X29jdG9wdXNfc3RyYXRlZ2llcz0nb2N0b3B1cycKK25vX2Zhc3RfZm9yd2FyZF9zdHJhdGVnaWVzPSdzdWJ0cmVlIG91cnMnCitub190cml2aWFsX3N0cmF0ZWdpZXM9J3JlY3Vyc2l2ZSByZWN1ciBzdWJ0cmVlIG91cnMgcmVjdXJzaXZlLW91cnMgcmVjdXJzaXZlLXRoZWlycycKK3VzZV9zdHJhdGVnaWVzPQoreG9wdD0KKworYWxsb3dfZmFzdF9mb3J3YXJkPXQKK2Zhc3RfZm9yd2FyZF9vbmx5PQorYWxsb3dfdHJpdmlhbF9tZXJnZT10CitzcXVhc2g9IG5vX2NvbW1pdD0gbG9nX2FyZz0gcnJfYXJnPQorCitkcm9wc2F2ZSgpIHsKKwlybSAtZiAtLSAiJEdJVF9ESVIvTUVSR0VfSEVBRCIgIiRHSVRfRElSL01FUkdFX01TRyIgXAorCQkgIiRHSVRfRElSL01FUkdFX1NUQVNIIiAiJEdJVF9ESVIvTUVSR0VfTU9ERSIgfHwgZXhpdCAxCit9CisKK3NhdmVzdGF0ZSgpIHsKKwkjIFN0YXNoIGF3YXkgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMuCisJZ2l0IHN0YXNoIGNyZWF0ZSA+IiRHSVRfRElSL01FUkdFX1NUQVNIIgorfQorCityZXN0b3Jlc3RhdGUoKSB7CisgICAgICAgIGlmIHRlc3QgLWYgIiRHSVRfRElSL01FUkdFX1NUQVNIIgorCXRoZW4KKwkJZ2l0IHJlc2V0IC0taGFyZCAkaGVhZCA+L2Rldi9udWxsCisJCWdpdCBzdGFzaCBhcHBseSAkKGNhdCAiJEdJVF9ESVIvTUVSR0VfU1RBU0giKQorCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCA+L2Rldi9udWxsCisJZmkKK30KKworZmluaXNoX3VwX3RvX2RhdGUgKCkgeworCWNhc2UgIiRzcXVhc2giIGluCisJdCkKKwkJZWNobyAiJDEgKG5vdGhpbmcgdG8gc3F1YXNoKSIgOzsKKwknJykKKwkJZWNobyAiJDEiIDs7CisJZXNhYworCWRyb3BzYXZlCit9CisKK3NxdWFzaF9tZXNzYWdlICgpIHsKKwllY2hvIFNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOgorCWVjaG8KKwlnaXQgbG9nIC0tbm8tbWVyZ2VzIC0tcHJldHR5PW1lZGl1bSBeIiRoZWFkIiAkcmVtb3RlaGVhZHMKK30KKworZmluaXNoICgpIHsKKwlpZiB0ZXN0ICcnID0gIiQyIgorCXRoZW4KKwkJcmxvZ209IiRHSVRfUkVGTE9HX0FDVElPTiIKKwllbHNlCisJCWVjaG8gIiQyIgorCQlybG9nbT0iJEdJVF9SRUZMT0dfQUNUSU9OOiAkMiIKKwlmaQorCWNhc2UgIiRzcXVhc2giIGluCisJdCkKKwkJZWNobyAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRCIKKwkJc3F1YXNoX21lc3NhZ2UgPiIkR0lUX0RJUi9TUVVBU0hfTVNHIgorCQk7OworCScnKQorCQljYXNlICIkbWVyZ2VfbXNnIiBpbgorCQknJykKKwkJCWVjaG8gIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQUQiCisJCQk7OworCQkqKQorCQkJZ2l0IHVwZGF0ZS1yZWYgLW0gIiRybG9nbSIgSEVBRCAiJDEiICIkaGVhZCIgfHwgZXhpdCAxCisJCQlnaXQgZ2MgLS1hdXRvCisJCQk7OworCQllc2FjCisJCTs7CisJZXNhYworCWNhc2UgIiQxIiBpbgorCScnKQorCQk7OworCT8qKQorCQlpZiB0ZXN0ICIkc2hvd19kaWZmc3RhdCIgPSB0CisJCXRoZW4KKwkJCSMgV2Ugd2FudCBjb2xvciAoaWYgc2V0KSwgYnV0IG5vIHBhZ2VyCisJCQlHSVRfUEFHRVI9JycgZ2l0IGRpZmYgLS1zdGF0IC0tc3VtbWFyeSAtTSAiJGhlYWQiICIkMSIKKwkJZmkKKwkJOzsKKwllc2FjCisKKwkjIFJ1biBhIHBvc3QtbWVyZ2UgaG9vaworICAgICAgICBpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcG9zdC1tZXJnZQorICAgICAgICB0aGVuCisJICAgIGNhc2UgIiRzcXVhc2giIGluCisJICAgIHQpCisgICAgICAgICAgICAgICAgIiRHSVRfRElSIi9ob29rcy9wb3N0LW1lcmdlIDEKKwkJOzsKKwkgICAgJycpCisgICAgICAgICAgICAgICAgIiRHSVRfRElSIi9ob29rcy9wb3N0LW1lcmdlIDAKKwkJOzsKKwkgICAgZXNhYworICAgICAgICBmaQorfQorCittZXJnZV9uYW1lICgpIHsKKwlyZW1vdGU9IiQxIgorCXJoPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHJlbW90ZV4wIiAyPi9kZXYvbnVsbCkgfHwgcmV0dXJuCisJaWYgdHJ1bmFtZT0kKGV4cHIgIiRyZW1vdGUiIDogJ1woLipcKX5bMC05XSokJykgJiYKKwkJZ2l0IHNob3ctcmVmIC1xIC0tdmVyaWZ5ICJyZWZzL2hlYWRzLyR0cnVuYW1lIiAyPi9kZXYvbnVsbAorCXRoZW4KKwkJZWNobyAiJHJoCQlicmFuY2ggJyR0cnVuYW1lJyAoZWFybHkgcGFydCkgb2YgLiIKKwkJcmV0dXJuCisJZmkKKwlpZiBmb3VuZF9yZWY9JChnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIC0tdmVyaWZ5IFwKKwkJCQkJCQkiJHJlbW90ZSIgMj4vZGV2L251bGwpCisJdGhlbgorCQlleHBhbmRlZD0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoICIkcmVtb3RlIikgfHwKKwkJCWV4aXQKKwkJaWYgdGVzdCAiJHtmb3VuZF9yZWYjcmVmcy9oZWFkcy99IiAhPSAiJGZvdW5kX3JlZiIKKwkJdGhlbgorCQkJZWNobyAiJHJoCQlicmFuY2ggJyRleHBhbmRlZCcgb2YgLiIKKwkJCXJldHVybgorCQllbGlmIHRlc3QgIiR7Zm91bmRfcmVmI3JlZnMvcmVtb3Rlcy99IiAhPSAiJGZvdW5kX3JlZiIKKwkJdGhlbgorCQkJZWNobyAiJHJoCQlyZW1vdGUgYnJhbmNoICckZXhwYW5kZWQnIG9mIC4iCisJCQlyZXR1cm4KKwkJZmkKKwlmaQorCWlmIHRlc3QgIiRyZW1vdGUiID0gIkZFVENIX0hFQUQiIC1hIC1yICIkR0lUX0RJUi9GRVRDSF9IRUFEIgorCXRoZW4KKwkJc2VkIC1lICdzLwlub3QtZm9yLW1lcmdlCS8JCS8nIC1lIDFxIFwKKwkJCSIkR0lUX0RJUi9GRVRDSF9IRUFEIgorCQlyZXR1cm4KKwlmaQorCWVjaG8gIiRyaAkJY29tbWl0ICckcmVtb3RlJyIKK30KKworcGFyc2VfY29uZmlnICgpIHsKKwl3aGlsZSB0ZXN0ICQjICE9IDA7IGRvCisJCWNhc2UgIiQxIiBpbgorCQktbnwtLW5vLXN0YXR8LS1uby1zdW1tYXJ5KQorCQkJc2hvd19kaWZmc3RhdD1mYWxzZSA7OworCQktLXN0YXR8LS1zdW1tYXJ5KQorCQkJc2hvd19kaWZmc3RhdD10IDs7CisJCS0tbG9nfC0tbm8tbG9nKQorCQkJbG9nX2FyZz0kMSA7OworCQktLXNxdWFzaCkKKwkJCXRlc3QgIiRhbGxvd19mYXN0X2ZvcndhcmQiID0gdCB8fAorCQkJCWRpZSAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCisJCQlzcXVhc2g9dCBub19jb21taXQ9dCA7OworCQktLW5vLXNxdWFzaCkKKwkJCXNxdWFzaD0gbm9fY29tbWl0PSA7OworCQktLWNvbW1pdCkKKwkJCW5vX2NvbW1pdD0gOzsKKwkJLS1uby1jb21taXQpCisJCQlub19jb21taXQ9dCA7OworCQktLWZmKQorCQkJYWxsb3dfZmFzdF9mb3J3YXJkPXQgOzsKKwkJLS1uby1mZikKKwkJCXRlc3QgIiRzcXVhc2giICE9IHQgfHwKKwkJCQlkaWUgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorCQkJdGVzdCAiJGZhc3RfZm9yd2FyZF9vbmx5IiAhPSB0IHx8CisJCQkJZGllICJZb3UgY2Fubm90IGNvbWJpbmUgLS1mZi1vbmx5IHdpdGggLS1uby1mZi4iCisJCQlhbGxvd19mYXN0X2ZvcndhcmQ9ZiA7OworCQktLWZmLW9ubHkpCisJCQl0ZXN0ICIkYWxsb3dfZmFzdF9mb3J3YXJkIiAhPSBmIHx8CisJCQkJZGllICJZb3UgY2Fubm90IGNvbWJpbmUgLS1mZi1vbmx5IHdpdGggLS1uby1mZi4iCisJCQlmYXN0X2ZvcndhcmRfb25seT10IDs7CisJCS0tcmVyZXJlLWF1dG91cGRhdGV8LS1uby1yZXJlcmUtYXV0b3VwZGF0ZSkKKwkJCXJyX2FyZz0kMSA7OworCQktc3wtLXN0cmF0ZWd5KQorCQkJc2hpZnQKKwkJCWNhc2UgIiAkYWxsX3N0cmF0ZWdpZXMgIiBpbgorCQkJKiIgJDEgIiopCisJCQkJdXNlX3N0cmF0ZWdpZXM9IiR1c2Vfc3RyYXRlZ2llcyQxICIKKwkJCQk7OworCQkJKikKKwkJCQljYXNlICIgJG5vdF9zdHJhdGVnaWVzICIgaW4KKwkJCQkqIiAkMSAiKikKKwkJCQkJZmFsc2UKKwkJCQllc2FjICYmCisJCQkJdHlwZSAiZ2l0LW1lcmdlLSQxIiA+L2Rldi9udWxsIDI+JjEgfHwKKwkJCQkJZGllICJhdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6ICRhbGxfc3RyYXRlZ2llcyIKKwkJCQl1c2Vfc3RyYXRlZ2llcz0iJHVzZV9zdHJhdGVnaWVzJDEgIgorCQkJCTs7CisJCQllc2FjCisJCQk7OworCQktWCkKKwkJCXNoaWZ0CisJCQl4b3B0PSIke3hvcHQ6KyR4b3B0IH0kKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiLS0kMSIpIgorCQkJOzsKKwkJLW18LS1tZXNzYWdlKQorCQkJc2hpZnQKKwkJCW1lcmdlX21zZz0iJDEiCisJCQloYXZlX21lc3NhZ2U9dAorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsgOzsKKwkJKikJdXNhZ2UgOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKwlhcmdzX2xlZnQ9JCMKK30KKwordGVzdCAkIyAhPSAwIHx8IHVzYWdlCisKK2hhdmVfbWVzc2FnZT0KKworaWYgYnJhbmNoPSQoZ2l0LXN5bWJvbGljLXJlZiAtcSBIRUFEKQordGhlbgorCW1lcmdlb3B0cz0kKGdpdCBjb25maWcgImJyYW5jaC4ke2JyYW5jaCNyZWZzL2hlYWRzL30ubWVyZ2VvcHRpb25zIikKKwlpZiB0ZXN0IC1uICIkbWVyZ2VvcHRzIgorCXRoZW4KKwkJcGFyc2VfY29uZmlnICRtZXJnZW9wdHMgLS0KKwlmaQorZmkKKworcGFyc2VfY29uZmlnICIkQCIKK3doaWxlIHRlc3QgJGFyZ3NfbGVmdCAtbHQgJCM7IGRvIHNoaWZ0OyBkb25lCisKK2lmIHRlc3QgLXogIiRzaG93X2RpZmZzdGF0IjsgdGhlbgorICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2UuZGlmZnN0YXQpIiA9IGZhbHNlICYmIHNob3dfZGlmZnN0YXQ9ZmFsc2UKKyAgICB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIG1lcmdlLnN0YXQpIiA9IGZhbHNlICYmIHNob3dfZGlmZnN0YXQ9ZmFsc2UKKyAgICB0ZXN0IC16ICIkc2hvd19kaWZmc3RhdCIgJiYgc2hvd19kaWZmc3RhdD10CitmaQorCisjIFRoaXMgY291bGQgYmUgdHJhZGl0aW9uYWwgIm1lcmdlIDxtc2c+IEhFQUQgPGNvbW1pdD4uLi4iICBhbmQgdGhlCisjIHdheSB3ZSBjYW4gdGVsbCBpdCBpcyB0byBzZWUgaWYgdGhlIHNlY29uZCB0b2tlbiBpcyBIRUFELCBidXQgc29tZQorIyBwZW9wbGUgbWlnaHQgaGF2ZSBtaXN1c2VkIHRoZSBpbnRlcmZhY2UgYW5kIHVzZWQgYSBjb21taXR0aXNoIHRoYXQKKyMgaXMgdGhlIHNhbWUgYXMgSEVBRCB0aGVyZSBpbnN0ZWFkLiAgVHJhZGl0aW9uYWwgZm9ybWF0IG5ldmVyIHdvdWxkCisjIGhhdmUgIi1tIiBzbyBpdCBpcyBhbiBhZGRpdGlvbmFsIHNhZmV0eSBtZWFzdXJlIHRvIGNoZWNrIGZvciBpdC4KKworaWYgdGVzdCAteiAiJGhhdmVfbWVzc2FnZSIgJiYKKwlzZWNvbmRfdG9rZW49JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMl4wIiAyPi9kZXYvbnVsbCkgJiYKKwloZWFkX2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIkhFQUQiIDI+L2Rldi9udWxsKSAmJgorCXRlc3QgIiRzZWNvbmRfdG9rZW4iID0gIiRoZWFkX2NvbW1pdCIKK3RoZW4KKwltZXJnZV9tc2c9IiQxIgorCXNoaWZ0CisJaGVhZF9hcmc9IiQxIgorCXNoaWZ0CitlbGlmICEgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4vZGV2L251bGwgMj4mMQordGhlbgorCSMgSWYgdGhlIG1lcmdlZCBoZWFkIGlzIGEgdmFsaWQgb25lIHRoZXJlIGlzIG5vIHJlYXNvbiB0bworCSMgZm9yYmlkICJnaXQgbWVyZ2UiIGludG8gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4uICBXZSBkbworCSMgdGhlIHNhbWUgZm9yICJnaXQgcHVsbCIuCisJaWYgdGVzdCAxIC1uZSAkIworCXRoZW4KKwkJZWNobyA+JjIgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCisJCWV4aXQgMQorCWZpCisKKwl0ZXN0ICIkc3F1YXNoIiAhPSB0IHx8CisJCWRpZSAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCisJdGVzdCAiJGFsbG93X2Zhc3RfZm9yd2FyZCIgPSB0IHx8CisJCWRpZSAiTm9uLWZhc3QtZm9yd2FyZCBpbnRvIGFuIGVtcHR5IGhlYWQgZG9lcyBub3QgbWFrZSBzZW5zZSIKKwlyaD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxXjAiKSB8fAorCQlkaWUgIiQxIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCisKKwlnaXQgdXBkYXRlLXJlZiAtbSAiaW5pdGlhbCBwdWxsIiBIRUFEICIkcmgiICIiICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQKKwlleGl0CisKK2Vsc2UKKwkjIFdlIGFyZSBpbnZva2VkIGRpcmVjdGx5IGFzIHRoZSBmaXJzdC1jbGFzcyBVSS4KKwloZWFkX2FyZz1IRUFECisKKwkjIEFsbCB0aGUgcmVzdCBhcmUgdGhlIGNvbW1pdHMgYmVpbmcgbWVyZ2VkOyBwcmVwYXJlCisJIyB0aGUgc3RhbmRhcmQgbWVyZ2Ugc3VtbWFyeSBtZXNzYWdlIHRvIGJlIGFwcGVuZGVkIHRvCisJIyB0aGUgZ2l2ZW4gbWVzc2FnZS4gIElmIHJlbW90ZSBpcyBpbnZhbGlkIHdlIHdpbGwgZGllCisJIyBsYXRlciBpbiB0aGUgY29tbW9uIGNvZGVwYXRoIHNvIHdlIGRpc2NhcmQgdGhlIGVycm9yCisJIyBpbiB0aGlzIGxvb3AuCisJbWVyZ2VfbXNnPSIkKAorCQlmb3IgcmVtb3RlCisJCWRvCisJCQltZXJnZV9uYW1lICIkcmVtb3RlIgorCQlkb25lIHwKKwkJaWYgdGVzdCAiJGhhdmVfbWVzc2FnZSIgPSB0CisJCXRoZW4KKwkJCWdpdCBmbXQtbWVyZ2UtbXNnIC1tICIkbWVyZ2VfbXNnIiAkbG9nX2FyZworCQllbHNlCisJCQlnaXQgZm10LW1lcmdlLW1zZyAkbG9nX2FyZworCQlmaQorCSkiCitmaQoraGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRoZWFkX2FyZyJeMCkgfHwgdXNhZ2UKKworIyBBbGwgdGhlIHJlc3QgYXJlIHJlbW90ZSBoZWFkcwordGVzdCAiJCMiID0gMCAmJiB1c2FnZSA7IyB3ZSBuZWVkIGF0IGxlYXN0IG9uZSByZW1vdGUgaGVhZC4KK3NldF9yZWZsb2dfYWN0aW9uICJtZXJnZSAkKiIKKworcmVtb3RlaGVhZHM9Citmb3IgcmVtb3RlCitkbworCXJlbW90ZWhlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkcmVtb3RlIl4wIDI+L2Rldi9udWxsKSB8fAorCSAgICBkaWUgIiRyZW1vdGUgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKKwlyZW1vdGVoZWFkcz0iJHtyZW1vdGVoZWFkc30kcmVtb3RlaGVhZCAiCisJZXZhbCBHSVRIRUFEXyRyZW1vdGVoZWFkPSciJHJlbW90ZSInCisJZXhwb3J0IEdJVEhFQURfJHJlbW90ZWhlYWQKK2RvbmUKK3NldCB4ICRyZW1vdGVoZWFkcyA7IHNoaWZ0CisKK2Nhc2UgIiR1c2Vfc3RyYXRlZ2llcyIgaW4KKycnKQorCWNhc2UgIiQjIiBpbgorCTEpCisJCXZhcj0iYGdpdCBjb25maWcgLS1nZXQgcHVsbC50d29oZWFkYCIKKwkJaWYgdGVzdCAtbiAiJHZhciIKKwkJdGhlbgorCQkJdXNlX3N0cmF0ZWdpZXM9IiR2YXIiCisJCWVsc2UKKwkJCXVzZV9zdHJhdGVnaWVzPSIkZGVmYXVsdF90d29oZWFkX3N0cmF0ZWdpZXMiCisJCWZpIDs7CisJKikKKwkJdmFyPSJgZ2l0IGNvbmZpZyAtLWdldCBwdWxsLm9jdG9wdXNgIgorCQlpZiB0ZXN0IC1uICIkdmFyIgorCQl0aGVuCisJCQl1c2Vfc3RyYXRlZ2llcz0iJHZhciIKKwkJZWxzZQorCQkJdXNlX3N0cmF0ZWdpZXM9IiRkZWZhdWx0X29jdG9wdXNfc3RyYXRlZ2llcyIKKwkJZmkgOzsKKwllc2FjCisJOzsKK2VzYWMKKworZm9yIHMgaW4gJHVzZV9zdHJhdGVnaWVzCitkbworCWZvciBzcyBpbiAkbm9fZmFzdF9mb3J3YXJkX3N0cmF0ZWdpZXMKKwlkbworCQljYXNlICIgJHMgIiBpbgorCQkqIiAkc3MgIiopCisJCQlhbGxvd19mYXN0X2ZvcndhcmQ9ZgorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwlkb25lCisJZm9yIHNzIGluICRub190cml2aWFsX3N0cmF0ZWdpZXMKKwlkbworCQljYXNlICIgJHMgIiBpbgorCQkqIiAkc3MgIiopCisJCQlhbGxvd190cml2aWFsX21lcmdlPWYKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJZG9uZQorZG9uZQorCitjYXNlICIkIyIgaW4KKzEpCisJY29tbW9uPSQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgJGhlYWQgIiRAIikKKwk7OworKikKKwljb21tb249JChnaXQgbWVyZ2UtYmFzZSAtLWFsbCAtLW9jdG9wdXMgJGhlYWQgIiRAIikKKwk7OworZXNhYworZWNobyAiJGhlYWQiID4iJEdJVF9ESVIvT1JJR19IRUFEIgorCitjYXNlICIkYWxsb3dfZmFzdF9mb3J3YXJkLCQjLCRjb21tb24sJG5vX2NvbW1pdCIgaW4KKz8sKiwnJywqKQorCSMgTm8gY29tbW9uIGFuY2VzdG9ycyBmb3VuZC4gV2UgbmVlZCBhIHJlYWwgbWVyZ2UuCisJOzsKKz8sMSwiJDEiLCopCisJIyBJZiBoZWFkIGNhbiByZWFjaCBhbGwgdGhlIG1lcmdlIHRoZW4gd2UgYXJlIHVwIHRvIGRhdGUuCisJIyBidXQgZmlyc3QgdGhlIG1vc3QgY29tbW9uIGNhc2Ugb2YgbWVyZ2luZyBvbmUgcmVtb3RlLgorCWZpbmlzaF91cF90b19kYXRlICJBbHJlYWR5IHVwLXRvLWRhdGUuIgorCWV4aXQgMAorCTs7Cit0LDEsIiRoZWFkIiwqKQorCSMgQWdhaW4gdGhlIG1vc3QgY29tbW9uIGNhc2Ugb2YgbWVyZ2luZyBvbmUgcmVtb3RlLgorCWVjaG8gIlVwZGF0aW5nICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRoZWFkKS4uJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJDEpIgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIDI+L2Rldi9udWxsCisJbXNnPSJGYXN0LWZvcndhcmQiCisJaWYgdGVzdCAtbiAiJGhhdmVfbWVzc2FnZSIKKwl0aGVuCisJCW1zZz0iJG1zZyAobm8gY29tbWl0IGNyZWF0ZWQ7IC1tIG9wdGlvbiBpZ25vcmVkKSIKKwlmaQorCW5ld19oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDFeMCIpICYmCisJZ2l0IHJlYWQtdHJlZSAtdiAtbSAtdSAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlICRoZWFkICIkbmV3X2hlYWQiICYmCisJZmluaXNoICIkbmV3X2hlYWQiICIkbXNnIiB8fCBleGl0CisJZHJvcHNhdmUKKwlleGl0IDAKKwk7OworPywxLD8qIiRMRiI/KiwqKQorCSMgV2UgYXJlIG5vdCBkb2luZyBvY3RvcHVzIGFuZCBub3QgZmFzdC1mb3J3YXJkLiAgTmVlZCBhCisJIyByZWFsIG1lcmdlLgorCTs7Cis/LDEsKiwpCisJIyBXZSBhcmUgbm90IGRvaW5nIG9jdG9wdXMsIG5vdCBmYXN0LWZvcndhcmQsIGFuZCBoYXZlIG9ubHkKKwkjIG9uZSBjb21tb24uCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggMj4vZGV2L251bGwKKwljYXNlICIkYWxsb3dfdHJpdmlhbF9tZXJnZSwkZmFzdF9mb3J3YXJkX29ubHkiIGluCisJdCwpCisJCSMgU2VlIGlmIGl0IGlzIHJlYWxseSB0cml2aWFsLgorCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPi9kZXYvbnVsbCB8fCBleGl0CisJCWVjaG8gIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLiIKKwkJaWYgZ2l0IHJlYWQtdHJlZSAtLXRyaXZpYWwgLW0gLXUgLXYgJGNvbW1vbiAkaGVhZCAiJDEiICYmCisJCSAgIHJlc3VsdF90cmVlPSQoZ2l0IHdyaXRlLXRyZWUpCisJCXRoZW4KKwkJCWVjaG8gIldvbmRlcmZ1bC4iCisJCQlyZXN1bHRfY29tbWl0PSQoCisJCQkJcHJpbnRmICclc1xuJyAiJG1lcmdlX21zZyIgfAorCQkJCWdpdCBjb21taXQtdHJlZSAkcmVzdWx0X3RyZWUgLXAgSEVBRCAtcCAiJDEiCisJCQkpIHx8IGV4aXQKKwkJCWZpbmlzaCAiJHJlc3VsdF9jb21taXQiICJJbi1pbmRleCBtZXJnZSIKKwkJCWRyb3BzYXZlCisJCQlleGl0IDAKKwkJZmkKKwkJZWNobyAiTm9wZS4iCisJZXNhYworCTs7CisqKQorCSMgQW4gb2N0b3B1cy4gIElmIHdlIGNhbiByZWFjaCBhbGwgdGhlIHJlbW90ZSB3ZSBhcmUgdXAgdG8gZGF0ZS4KKwl1cF90b19kYXRlPXQKKwlmb3IgcmVtb3RlCisJZG8KKwkJY29tbW9uX29uZT0kKGdpdCBtZXJnZS1iYXNlIC0tYWxsICRoZWFkICRyZW1vdGUpCisJCWlmIHRlc3QgIiRjb21tb25fb25lIiAhPSAiJHJlbW90ZSIKKwkJdGhlbgorCQkJdXBfdG9fZGF0ZT1mCisJCQlicmVhaworCQlmaQorCWRvbmUKKwlpZiB0ZXN0ICIkdXBfdG9fZGF0ZSIgPSB0CisJdGhlbgorCQlmaW5pc2hfdXBfdG9fZGF0ZSAiQWxyZWFkeSB1cC10by1kYXRlLiBZZWVhaCEiCisJCWV4aXQgMAorCWZpCisJOzsKK2VzYWMKKworaWYgdGVzdCAiJGZhc3RfZm9yd2FyZF9vbmx5IiA9IHQKK3RoZW4KKwlkaWUgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK2ZpCisKKyMgV2UgYXJlIGdvaW5nIHRvIG1ha2UgYSBuZXcgY29tbWl0LgorZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID4vZGV2L251bGwgfHwgZXhpdAorCisjIEF0IHRoaXMgcG9pbnQsIHdlIG5lZWQgYSByZWFsIG1lcmdlLiAgTm8gbWF0dGVyIHdoYXQgc3RyYXRlZ3kKKyMgd2UgdXNlLCBpdCB3b3VsZCBvcGVyYXRlIG9uIHRoZSBpbmRleCwgcG9zc2libHkgYWZmZWN0aW5nIHRoZQorIyB3b3JraW5nIHRyZWUsIGFuZCB3aGVuIHJlc29sdmVkIGNsZWFubHksIGhhdmUgdGhlIGRlc2lyZWQgdHJlZQorIyBpbiB0aGUgaW5kZXggLS0gdGhpcyBtZWFucyB0aGF0IHRoZSBpbmRleCBtdXN0IGJlIGluIHN5bmMgd2l0aAorIyB0aGUgJGhlYWQgY29tbWl0LiAgVGhlIHN0cmF0ZWdpZXMgYXJlIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGlzLgorCitjYXNlICIkdXNlX3N0cmF0ZWdpZXMiIGluCis/KicgJz8qKQorICAgICMgU3Rhc2ggYXdheSB0aGUgbG9jYWwgY2hhbmdlcyBzbyB0aGF0IHdlIGNhbiB0cnkgbW9yZSB0aGFuIG9uZS4KKyAgICBzYXZlc3RhdGUKKyAgICBzaW5nbGVfc3RyYXRlZ3k9bm8KKyAgICA7OworKikKKyAgICBybSAtZiAiJEdJVF9ESVIvTUVSR0VfU1RBU0giCisgICAgc2luZ2xlX3N0cmF0ZWd5PXllcworICAgIDs7Citlc2FjCisKK3Jlc3VsdF90cmVlPSBiZXN0X2NudD0tMSBiZXN0X3N0cmF0ZWd5PSB3dF9zdHJhdGVneT0KK21lcmdlX3dhc19vaz0KK2ZvciBzdHJhdGVneSBpbiAkdXNlX3N0cmF0ZWdpZXMKK2RvCisgICAgdGVzdCAiJHd0X3N0cmF0ZWd5IiA9ICcnIHx8IHsKKwllY2hvICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi4iCisJcmVzdG9yZXN0YXRlCisgICAgfQorICAgIGNhc2UgIiRzaW5nbGVfc3RyYXRlZ3kiIGluCisgICAgbm8pCisJZWNobyAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICRzdHJhdGVneS4uLiIKKwk7OworICAgIGVzYWMKKworICAgICMgUmVtZW1iZXIgd2hpY2ggc3RyYXRlZ3kgbGVmdCB0aGUgc3RhdGUgaW4gdGhlIHdvcmtpbmcgdHJlZQorICAgIHd0X3N0cmF0ZWd5PSRzdHJhdGVneQorCisgICAgZXZhbCAnZ2l0LW1lcmdlLSRzdHJhdGVneSAnIiR4b3B0IicgJGNvbW1vbiAtLSAiJGhlYWRfYXJnIiAiJEAiJworICAgIGV4aXQ9JD8KKyAgICBpZiB0ZXN0ICIkbm9fY29tbWl0IiA9IHQgJiYgdGVzdCAiJGV4aXQiID0gMAorICAgIHRoZW4KKyAgICAgICAgbWVyZ2Vfd2FzX29rPXQKKwlleGl0PTEgOyMgcHJldGVuZCBpdCBsZWZ0IGNvbmZsaWN0cy4KKyAgICBmaQorCisgICAgdGVzdCAiJGV4aXQiID0gMCB8fCB7CisKKwkjIFRoZSBiYWNrZW5kIGV4aXRzIHdpdGggMSB3aGVuIGNvbmZsaWN0cyBhcmUgbGVmdCB0byBiZSByZXNvbHZlZCwKKwkjIHdpdGggMiB3aGVuIGl0IGRvZXMgbm90IGhhbmRsZSB0aGUgZ2l2ZW4gbWVyZ2UgYXQgYWxsLgorCisJaWYgdGVzdCAiJGV4aXQiIC1lcSAxCisJdGhlbgorCSAgICBjbnQ9YHsKKwkJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkKKwkJZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQKKwkgICAgfSB8IHdjIC1sYAorCSAgICBpZiB0ZXN0ICRiZXN0X2NudCAtbGUgMCAtbyAkY250IC1sZSAkYmVzdF9jbnQKKwkgICAgdGhlbgorCQliZXN0X3N0cmF0ZWd5PSRzdHJhdGVneQorCQliZXN0X2NudD0kY250CisJICAgIGZpCisJZmkKKwljb250aW51ZQorICAgIH0KKworICAgICMgQXV0b21lcmdlIHN1Y2NlZWRlZC4KKyAgICByZXN1bHRfdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJiBicmVhaworZG9uZQorCisjIElmIHdlIGhhdmUgYSByZXN1bHRpbmcgdHJlZSwgdGhhdCBtZWFucyB0aGUgc3RyYXRlZ3kgbW9kdWxlCisjIGF1dG8gcmVzb2x2ZWQgdGhlIG1lcmdlIGNsZWFubHkuCitpZiB0ZXN0ICcnICE9ICIkcmVzdWx0X3RyZWUiCit0aGVuCisgICAgaWYgdGVzdCAiJGFsbG93X2Zhc3RfZm9yd2FyZCIgPSAidCIKKyAgICB0aGVuCisJcGFyZW50cz0kKGdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgIiRoZWFkIiAiJEAiKQorICAgIGVsc2UKKwlwYXJlbnRzPSQoZ2l0IHJldi1wYXJzZSAiJGhlYWQiICIkQCIpCisgICAgZmkKKyAgICBwYXJlbnRzPSQoZWNobyAiJHBhcmVudHMiIHwgc2VkIC1lICdzL14vLXAgLycpCisgICAgcmVzdWx0X2NvbW1pdD0kKHByaW50ZiAnJXNcbicgIiRtZXJnZV9tc2ciIHwgZ2l0IGNvbW1pdC10cmVlICRyZXN1bHRfdHJlZSAkcGFyZW50cykgfHwgZXhpdAorICAgIGZpbmlzaCAiJHJlc3VsdF9jb21taXQiICJNZXJnZSBtYWRlIGJ5ICR3dF9zdHJhdGVneS4iCisgICAgZHJvcHNhdmUKKyAgICBleGl0IDAKK2ZpCisKKyMgUGljayB0aGUgcmVzdWx0IGZyb20gdGhlIGJlc3Qgc3RyYXRlZ3kgYW5kIGhhdmUgdGhlIHVzZXIgZml4IGl0IHVwLgorY2FzZSAiJGJlc3Rfc3RyYXRlZ3kiIGluCisnJykKKwlyZXN0b3Jlc3RhdGUKKwljYXNlICIkdXNlX3N0cmF0ZWdpZXMiIGluCisJPyonICc/KikKKwkJZWNobyA+JjIgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLiIKKwkJOzsKKwkqKQorCQllY2hvID4mMiAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAkdXNlX3N0cmF0ZWdpZXMgZmFpbGVkLiIKKwkJOzsKKwllc2FjCisJZXhpdCAyCisJOzsKKyIkd3Rfc3RyYXRlZ3kiKQorCSMgV2UgYWxyZWFkeSBoYXZlIGl0cyByZXN1bHQgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKwk7OworKikKKwllY2hvICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi4iCisJcmVzdG9yZXN0YXRlCisJZWNobyAiVXNpbmcgdGhlICRiZXN0X3N0cmF0ZWd5IHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuIgorCWdpdC1tZXJnZS0kYmVzdF9zdHJhdGVneSAkY29tbW9uIC0tICIkaGVhZF9hcmciICIkQCIKKwk7OworZXNhYworCitpZiB0ZXN0ICIkc3F1YXNoIiA9IHQKK3RoZW4KKwlmaW5pc2gKK2Vsc2UKKwlmb3IgcmVtb3RlCisJZG8KKwkJZWNobyAkcmVtb3RlCisJZG9uZSA+IiRHSVRfRElSL01FUkdFX0hFQUQiCisJcHJpbnRmICclc1xuJyAiJG1lcmdlX21zZyIgPiIkR0lUX0RJUi9NRVJHRV9NU0ciIHx8CisJCWRpZSAiQ291bGQgbm90IHdyaXRlIHRvICRHSVRfRElSL01FUkdFX01TRyIKKwlpZiB0ZXN0ICIkYWxsb3dfZmFzdF9mb3J3YXJkIiAhPSB0CisJdGhlbgorCQlwcmludGYgIiVzIiBuby1mZgorCWVsc2UKKwkJOgorCWZpID4iJEdJVF9ESVIvTUVSR0VfTU9ERSIgfHwKKwkJZGllICJDb3VsZCBub3Qgd3JpdGUgdG8gJEdJVF9ESVIvTUVSR0VfTU9ERSIKK2ZpCisKK2lmIHRlc3QgIiRtZXJnZV93YXNfb2siID0gdAordGhlbgorCWVjaG8gPiYyIFwKKwkiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWQiCisJZXhpdCAwCitlbHNlCisJeworCSAgICBlY2hvICcKK0NvbmZsaWN0czoKKycKKwkJZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQgfAorCQlzZWQgLWUgJ3MvXlteCV0qCS8JLycgfAorCQl1bmlxCisJfSA+PiIkR0lUX0RJUi9NRVJHRV9NU0ciCisJZ2l0IHJlcmVyZSAkcnJfYXJnCisJZGllICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LiIKK2ZpCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1ub3Rlcy5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW5vdGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2NDJlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1ub3Rlcy5zaApAQCAtMCwwICsxLDEyMSBAQAorIyEvYmluL3NoCisKK1VTQUdFPSIoZWRpdCBbLUYgPGZpbGU+IHwgLW0gPG1zZz5dIHwgc2hvdykgW2NvbW1pdF0iCisuIGdpdC1zaC1zZXR1cAorCit0ZXN0IC16ICIkMSIgJiYgdXNhZ2UKK0FDVElPTj0iJDEiOyBzaGlmdAorCit0ZXN0IC16ICIkR0lUX05PVEVTX1JFRiIgJiYgR0lUX05PVEVTX1JFRj0iJChnaXQgY29uZmlnIGNvcmUubm90ZXNyZWYpIgordGVzdCAteiAiJEdJVF9OT1RFU19SRUYiICYmIEdJVF9OT1RFU19SRUY9InJlZnMvbm90ZXMvY29tbWl0cyIKKworTUVTU0FHRT0KK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktbSkKKwkJdGVzdCAiJEFDVElPTiIgPSAiZWRpdCIgfHwgdXNhZ2UKKwkJc2hpZnQKKwkJaWYgdGVzdCAiJCMiID0gIjAiOyB0aGVuCisJCQlkaWUgImVycm9yOiBvcHRpb24gLW0gbmVlZHMgYW4gYXJndW1lbnQiCisJCWVsc2UKKwkJCWlmIFsgLXogIiRNRVNTQUdFIiBdOyB0aGVuCisJCQkJTUVTU0FHRT0iJDEiCisJCQllbHNlCisJCQkJTUVTU0FHRT0iJE1FU1NBR0UKKworJDEiCisJCQlmaQorCQkJc2hpZnQKKwkJZmkKKwkJOzsKKwktRikKKwkJdGVzdCAiJEFDVElPTiIgPSAiZWRpdCIgfHwgdXNhZ2UKKwkJc2hpZnQKKwkJaWYgdGVzdCAiJCMiID0gIjAiOyB0aGVuCisJCQlkaWUgImVycm9yOiBvcHRpb24gLUYgbmVlZHMgYW4gYXJndW1lbnQiCisJCWVsc2UKKwkJCWlmIFsgLXogIiRNRVNTQUdFIiBdOyB0aGVuCisJCQkJTUVTU0FHRT0iJChjYXQgIiQxIikiCisJCQllbHNlCisJCQkJTUVTU0FHRT0iJE1FU1NBR0UKKworJChjYXQgIiQxIikiCisJCQlmaQorCQkJc2hpZnQKKwkJZmkKKwkJOzsKKwktKikKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKK2RvbmUKKworQ09NTUlUPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgSEVBRCAiJEAiKSB8fAorZGllICJJbnZhbGlkIGNvbW1pdDogJEAiCisKK2Nhc2UgIiRBQ1RJT04iIGluCitlZGl0KQorCWlmIFsgIiR7R0lUX05PVEVTX1JFRiNyZWZzL25vdGVzL30iID0gIiRHSVRfTk9URVNfUkVGIiBdOyB0aGVuCisJCWRpZSAiUmVmdXNpbmcgdG8gZWRpdCBub3RlcyBpbiAkR0lUX05PVEVTX1JFRiAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCisJZmkKKworCU1TR19GSUxFPSIkR0lUX0RJUi9uZXctbm90ZXMtJENPTU1JVCIKKwlHSVRfSU5ERVhfRklMRT0iJE1TR19GSUxFLmlkeCIKKwlleHBvcnQgR0lUX0lOREVYX0ZJTEUKKworCXRyYXAgJworCQl0ZXN0IC1mICIkTVNHX0ZJTEUiICYmIHJtICIkTVNHX0ZJTEUiCisJCXRlc3QgLWYgIiRHSVRfSU5ERVhfRklMRSIgJiYgcm0gIiRHSVRfSU5ERVhfRklMRSIKKwknIDAKKworCUNVUlJFTlRfSEVBRD0kKGdpdCBzaG93LXJlZiAiJEdJVF9OT1RFU19SRUYiIHwgY3V0IC1mIDEgLWQgJyAnKQorCWlmIFsgLXogIiRDVVJSRU5UX0hFQUQiIF07IHRoZW4KKwkJUEFSRU5UPQorCWVsc2UKKwkJUEFSRU5UPSItcCAkQ1VSUkVOVF9IRUFEIgorCQlnaXQgcmVhZC10cmVlICIkR0lUX05PVEVTX1JFRiIgfHwgZGllICJDb3VsZCBub3QgcmVhZCBpbmRleCIKKwlmaQorCisJaWYgWyAteiAiJE1FU1NBR0UiIF07IHRoZW4KKwkJR0lUX05PVEVTX1JFRj0gZ2l0IGxvZyAtMSAkQ09NTUlUIHwgc2VkICJzL14vIy8iID4gIiRNU0dfRklMRSIKKwkJaWYgWyAhIC16ICIkQ1VSUkVOVF9IRUFEIiBdOyB0aGVuCisJCQlnaXQgY2F0LWZpbGUgYmxvYiA6JENPTU1JVCA+PiAiJE1TR19GSUxFIiAyPiAvZGV2L251bGwKKwkJZmkKKwkJY29yZV9lZGl0b3I9IiQoZ2l0IGNvbmZpZyBjb3JlLmVkaXRvcikiCisJCSR7R0lUX0VESVRPUjotJHtjb3JlX2VkaXRvcjotJHtWSVNVQUw6LSR7RURJVE9SOi12aX19fX0gIiRNU0dfRklMRSIKKwllbHNlCisJCWVjaG8gIiRNRVNTQUdFIiA+ICIkTVNHX0ZJTEUiCisJZmkKKworCWdyZXAgLXYgXiMgPCAiJE1TR19GSUxFIiB8IGdpdCBzdHJpcHNwYWNlID4gIiRNU0dfRklMRSIucHJvY2Vzc2VkCisJbXYgIiRNU0dfRklMRSIucHJvY2Vzc2VkICIkTVNHX0ZJTEUiCisJaWYgWyAtcyAiJE1TR19GSUxFIiBdOyB0aGVuCisJCUJMT0I9JChnaXQgaGFzaC1vYmplY3QgLXcgIiRNU0dfRklMRSIpIHx8CisJCQlkaWUgIkNvdWxkIG5vdCB3cml0ZSBpbnRvIG9iamVjdCBkYXRhYmFzZSIKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAwNjQ0ICRCTE9CICRDT01NSVQgfHwKKwkJCWRpZSAiQ291bGQgbm90IHdyaXRlIGluZGV4IgorCWVsc2UKKwkJdGVzdCAteiAiJENVUlJFTlRfSEVBRCIgJiYKKwkJCWRpZSAiV2lsbCBub3QgaW5pdGlhbGlzZSB3aXRoIGVtcHR5IHRyZWUiCisJCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgJENPTU1JVCB8fAorCQkJZGllICJDb3VsZCBub3QgdXBkYXRlIGluZGV4IgorCWZpCisKKwlUUkVFPSQoZ2l0IHdyaXRlLXRyZWUpIHx8IGRpZSAiQ291bGQgbm90IHdyaXRlIHRyZWUiCisJTkVXX0hFQUQ9JChlY2hvIEFubm90YXRlICRDT01NSVQgfCBnaXQgY29tbWl0LXRyZWUgJFRSRUUgJFBBUkVOVCkgfHwKKwkJZGllICJDb3VsZCBub3QgYW5ub3RhdGUiCisJZ2l0IHVwZGF0ZS1yZWYgLW0gIkFubm90YXRlICRDT01NSVQiIFwKKwkJIiRHSVRfTk9URVNfUkVGIiAkTkVXX0hFQUQgJENVUlJFTlRfSEVBRAorOzsKK3Nob3cpCisJZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJEdJVF9OT1RFU19SRUYiOiRDT01NSVQgPiAvZGV2L251bGwgfHwKKwkJZGllICJObyBub3RlIGZvciBjb21taXQgJENPTU1JVC4iCisJZ2l0IHNob3cgIiRHSVRfTk9URVNfUkVGIjokQ09NTUlUCis7OworKikKKwl1c2FnZQorZXNhYwpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtcmVtb3RlLnBlcmwgYi9jb250cmliL2V4YW1wbGVzL2dpdC1yZW1vdGUucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTc5NTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtcmVtb3RlLnBlcmwKQEAgLTAsMCArMSw0NzQgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworCit1c2Ugc3RyaWN0OwordXNlIEdpdDsKK215ICRnaXQgPSBHaXQtPnJlcG9zaXRvcnkoKTsKKworc3ViIGFkZF9yZW1vdGVfY29uZmlnIHsKKwlteSAoJGhhc2gsICRuYW1lLCAkd2hhdCwgJHZhbHVlKSA9IEBfOworCWlmICgkd2hhdCBlcSAndXJsJykgeworCQkjIEhhdmluZyBtb3JlIHRoYW4gb25lIGlzIE9rIC0tIGl0IGlzIHVzZWQgZm9yIHB1c2guCisJCWlmICghIGV4aXN0cyAkaGFzaC0+eydVUkwnfSkgeworCQkJJGhhc2gtPnskbmFtZX17J1VSTCd9ID0gJHZhbHVlOworCQl9CisJfQorCWVsc2lmICgkd2hhdCBlcSAnZmV0Y2gnKSB7CisJCSRoYXNoLT57JG5hbWV9eydGRVRDSCd9IHx8PSBbXTsKKwkJcHVzaCBAeyRoYXNoLT57JG5hbWV9eydGRVRDSCd9fSwgJHZhbHVlOworCX0KKwllbHNpZiAoJHdoYXQgZXEgJ3B1c2gnKSB7CisJCSRoYXNoLT57JG5hbWV9eydQVVNIJ30gfHw9IFtdOworCQlwdXNoIEB7JGhhc2gtPnskbmFtZX17J1BVU0gnfX0sICR2YWx1ZTsKKwl9CisJaWYgKCFleGlzdHMgJGhhc2gtPnskbmFtZX17J1NPVVJDRSd9KSB7CisJCSRoYXNoLT57JG5hbWV9eydTT1VSQ0UnfSA9ICdjb25maWcnOworCX0KK30KKworc3ViIGFkZF9yZW1vdGVfcmVtb3RlcyB7CisJbXkgKCRoYXNoLCAkZmlsZSwgJG5hbWUpID0gQF87CisKKwlpZiAoZXhpc3RzICRoYXNoLT57JG5hbWV9KSB7CisJCSRoYXNoLT57JG5hbWV9eydXQVJOSU5HJ30gPSAnaWdub3JlZCBkdWUgdG8gY29uZmlnJzsKKwkJcmV0dXJuOworCX0KKworCW15ICRmaDsKKwlpZiAoIW9wZW4oJGZoLCAnPCcsICRmaWxlKSkgeworCQlwcmludCBTVERFUlIgIldhcm5pbmc6IGNhbm5vdCBvcGVuICRmaWxlXG4iOworCQlyZXR1cm47CisJfQorCW15ICRpdCA9IHsgJ1NPVVJDRScgPT4gJ3JlbW90ZXMnIH07CisJJGhhc2gtPnskbmFtZX0gPSAkaXQ7CisJd2hpbGUgKDwkZmg+KSB7CisJCWNob21wOworCQlpZiAoL15VUkw6XHMqKC4qKSQvKSB7CisJCQkjIEhhdmluZyBtb3JlIHRoYW4gb25lIGlzIE9rIC0tIGl0IGlzIHVzZWQgZm9yIHB1c2guCisJCQlpZiAoISBleGlzdHMgJGl0LT57J1VSTCd9KSB7CisJCQkJJGl0LT57J1VSTCd9ID0gJDE7CisJCQl9CisJCX0KKwkJZWxzaWYgKC9eUHVzaDpccyooLiopJC8pIHsKKwkJCSRpdC0+eydQVVNIJ30gfHw9IFtdOworCQkJcHVzaCBAeyRpdC0+eydQVVNIJ319LCAkMTsKKwkJfQorCQllbHNpZiAoL15QdWxsOlxzKiguKikkLykgeworCQkJJGl0LT57J0ZFVENIJ30gfHw9IFtdOworCQkJcHVzaCBAeyRpdC0+eydGRVRDSCd9fSwgJDE7CisJCX0KKwkJZWxzaWYgKC9eXCMvKSB7CisJCQk7ICMgaWdub3JlCisJCX0KKwkJZWxzZSB7CisJCQlwcmludCBTVERFUlIgIldhcm5pbmc6IGZ1bm55IGxpbmUgaW4gJGZpbGU6ICRfXG4iOworCQl9CisJfQorCWNsb3NlKCRmaCk7Cit9CisKK3N1YiBsaXN0X3JlbW90ZSB7CisJbXkgKCRnaXQpID0gQF87CisJbXkgJXNlZW4gPSAoKTsKKwlteSBAcmVtb3RlcyA9IGV2YWwgeworCQkkZ2l0LT5jb21tYW5kKHF3KGNvbmZpZyAtLWdldC1yZWdleHApLCAnXnJlbW90ZVwuJyk7CisJfTsKKwlmb3IgKEByZW1vdGVzKSB7CisJCWlmICgvXnJlbW90ZVwuKFxTKz8pXC4oW14uXHNdKylccysoLiopJC8pIHsKKwkJCWFkZF9yZW1vdGVfY29uZmlnKFwlc2VlbiwgJDEsICQyLCAkMyk7CisJCX0KKwl9CisKKwlteSAkZGlyID0gJGdpdC0+cmVwb19wYXRoKCkgLiAiL3JlbW90ZXMiOworCWlmIChvcGVuZGlyKG15ICRkaCwgJGRpcikpIHsKKwkJbG9jYWwgJF87CisJCXdoaWxlICgkXyA9IHJlYWRkaXIoJGRoKSkgeworCQkJY2hvbXA7CisJCQluZXh0IGlmICghIC1mICIkZGlyLyRfIiB8fCAhIC1yIF8pOworCQkJYWRkX3JlbW90ZV9yZW1vdGVzKFwlc2VlbiwgIiRkaXIvJF8iLCAkXyk7CisJCX0KKwl9CisKKwlyZXR1cm4gXCVzZWVuOworfQorCitzdWIgYWRkX2JyYW5jaF9jb25maWcgeworCW15ICgkaGFzaCwgJG5hbWUsICR3aGF0LCAkdmFsdWUpID0gQF87CisJaWYgKCR3aGF0IGVxICdyZW1vdGUnKSB7CisJCWlmIChleGlzdHMgJGhhc2gtPnskbmFtZX17J1JFTU9URSd9KSB7CisJCQlwcmludCBTVERFUlIgIldhcm5pbmc6IG1vcmUgdGhhbiBvbmUgYnJhbmNoLiRuYW1lLnJlbW90ZVxuIjsKKwkJfQorCQkkaGFzaC0+eyRuYW1lfXsnUkVNT1RFJ30gPSAkdmFsdWU7CisJfQorCWVsc2lmICgkd2hhdCBlcSAnbWVyZ2UnKSB7CisJCSRoYXNoLT57JG5hbWV9eydNRVJHRSd9IHx8PSBbXTsKKwkJcHVzaCBAeyRoYXNoLT57JG5hbWV9eydNRVJHRSd9fSwgJHZhbHVlOworCX0KK30KKworc3ViIGxpc3RfYnJhbmNoIHsKKwlteSAoJGdpdCkgPSBAXzsKKwlteSAlc2VlbiA9ICgpOworCW15IEBicmFuY2hlcyA9IGV2YWwgeworCQkkZ2l0LT5jb21tYW5kKHF3KGNvbmZpZyAtLWdldC1yZWdleHApLCAnXmJyYW5jaFwuJyk7CisJfTsKKwlmb3IgKEBicmFuY2hlcykgeworCQlpZiAoL15icmFuY2hcLihbXi5dKilcLihcUyopXHMrKC4qKSQvKSB7CisJCQlhZGRfYnJhbmNoX2NvbmZpZyhcJXNlZW4sICQxLCAkMiwgJDMpOworCQl9CisJfQorCisJcmV0dXJuIFwlc2VlbjsKK30KKworbXkgJHJlbW90ZSA9IGxpc3RfcmVtb3RlKCRnaXQpOworbXkgJGJyYW5jaCA9IGxpc3RfYnJhbmNoKCRnaXQpOworCitzdWIgdXBkYXRlX2xzX3JlbW90ZSB7CisJbXkgKCRoYXJkZXIsICRpbmZvKSA9IEBfOworCisJcmV0dXJuIGlmICgoJGhhcmRlciA9PSAwKSB8fAorCQkgICAoKCRoYXJkZXIgPT0gMSkgJiYgZXhpc3RzICRpbmZvLT57J0xTX1JFTU9URSd9KSk7CisKKwlteSBAcmVmID0gbWFwIHsgc3xyZWZzL2hlYWRzL3x8OyAkXzsgfSBrZXlzICV7JGdpdC0+cmVtb3RlX3JlZnMoJGluZm8tPnsnVVJMJ30sIFsgJ2hlYWRzJyBdKX07CisJJGluZm8tPnsnTFNfUkVNT1RFJ30gPSBcQHJlZjsKK30KKworc3ViIGxpc3Rfd2lsZGNhcmRfbWFwcGluZyB7CisJbXkgKCRmb3JjZWQsICRvdXJzLCAkbHMpID0gQF87CisJbXkgJXJlZnM7CisJZm9yIChAJGxzKSB7CisJCSRyZWZzeyRffSA9IDAxOyAjIGJpdCAjMCB0byBzYXkgInRoZXkgaGF2ZSIKKwl9CisJZm9yICgkZ2l0LT5jb21tYW5kKCdmb3ItZWFjaC1yZWYnLCAicmVmcy9yZW1vdGVzLyRvdXJzIikpIHsKKwkJY2hvbXA7CisJCW5leHQgdW5sZXNzIChzfF5bMC05YS1mXXs0MH1cc1thLXpdK1xzcmVmcy9yZW1vdGVzLyRvdXJzL3x8KTsKKwkJbmV4dCBpZiAoJF8gZXEgJ0hFQUQnKTsKKwkJJHJlZnN7JF99IHx8PSAwOworCQkkcmVmc3skX30gfD0gMDI7ICMgYml0ICMxIHRvIHNheSAid2UgaGF2ZSIKKwl9CisJbXkgKEBuZXcsIEBzdGFsZSwgQHRyYWNrZWQpOworCWZvciAoc29ydCBrZXlzICVyZWZzKSB7CisJCW15ICRoYXZlID0gJHJlZnN7JF99OworCQlpZiAoJGhhdmUgPT0gMSkgeworCQkJcHVzaCBAbmV3LCAkXzsKKwkJfQorCQllbHNpZiAoJGhhdmUgPT0gMikgeworCQkJcHVzaCBAc3RhbGUsICRfOworCQl9CisJCWVsc2lmICgkaGF2ZSA9PSAzKSB7CisJCQlwdXNoIEB0cmFja2VkLCAkXzsKKwkJfQorCX0KKwlyZXR1cm4gXEBuZXcsIFxAc3RhbGUsIFxAdHJhY2tlZDsKK30KKworc3ViIGxpc3RfbWFwcGluZyB7CisJbXkgKCRuYW1lLCAkaW5mbykgPSBAXzsKKwlteSAkZmV0Y2ggPSAkaW5mby0+eydGRVRDSCd9OworCW15ICRscyA9ICRpbmZvLT57J0xTX1JFTU9URSd9OworCW15IChAbmV3LCBAc3RhbGUsIEB0cmFja2VkKTsKKworCWZvciAoQCRmZXRjaCkgeworCQluZXh0IHVubGVzcyAoLyhcKyk/KFteOl0rKTooLiopLyk7CisJCW15ICgkZm9yY2VkLCAkdGhlaXJzLCAkb3VycykgPSAoJDEsICQyLCAkMyk7CisJCWlmICgkdGhlaXJzIGVxICdyZWZzL2hlYWRzLyonICYmCisJCSAgICAkb3VycyA9fiAvXnJlZnNcL3JlbW90ZXNcLyguKilcL1wqJC8pIHsKKwkJCSMgd2lsZGNhcmQgbWFwcGluZworCQkJbXkgKCR3X25ldywgJHdfc3RhbGUsICR3X3RyYWNrZWQpCisJCQkJPSBsaXN0X3dpbGRjYXJkX21hcHBpbmcoJGZvcmNlZCwgJDEsICRscyk7CisJCQlwdXNoIEBuZXcsIEAkd19uZXc7CisJCQlwdXNoIEBzdGFsZSwgQCR3X3N0YWxlOworCQkJcHVzaCBAdHJhY2tlZCwgQCR3X3RyYWNrZWQ7CisJCX0KKwkJZWxzaWYgKCR0aGVpcnMgPX4gL1wqLyB8fCAkb3VycyA9fiAvXCovKSB7CisJCQlwcmludCBTVERFUlIgIldhcm5pbmc6IHVucmVjb2duaXplZCBtYXBwaW5nIGluIHJlbW90ZXMuJG5hbWUuZmV0Y2g6ICRfXG4iOworCQl9CisJCWVsc2lmICgkdGhlaXJzID1+IHN8XnJlZnMvaGVhZHMvfHwpIHsKKwkJCWlmICghZ3JlcCB7ICRfIGVxICR0aGVpcnMgfSBAJGxzKSB7CisJCQkJcHVzaCBAc3RhbGUsICR0aGVpcnM7CisJCQl9CisJCQllbHNpZiAoJG91cnMgbmUgJycpIHsKKwkJCQlwdXNoIEB0cmFja2VkLCAkdGhlaXJzOworCQkJfQorCQl9CisJfQorCXJldHVybiBcQG5ldywgXEBzdGFsZSwgXEB0cmFja2VkOworfQorCitzdWIgc2hvd19tYXBwaW5nIHsKKwlteSAoJG5hbWUsICRpbmZvKSA9IEBfOworCW15ICgkbmV3LCAkc3RhbGUsICR0cmFja2VkKSA9IGxpc3RfbWFwcGluZygkbmFtZSwgJGluZm8pOworCWlmIChAJG5ldykgeworCQlwcmludCAiICBOZXcgcmVtb3RlIGJyYW5jaGVzIChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8kbmFtZSlcbiI7CisJCXByaW50ICIgICAgQCRuZXdcbiI7CisJfQorCWlmIChAJHN0YWxlKSB7CisJCXByaW50ICIgIFN0YWxlIHRyYWNraW5nIGJyYW5jaGVzIGluIHJlbW90ZXMvJG5hbWUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScpXG4iOworCQlwcmludCAiICAgIEAkc3RhbGVcbiI7CisJfQorCWlmIChAJHRyYWNrZWQpIHsKKwkJcHJpbnQgIiAgVHJhY2tlZCByZW1vdGUgYnJhbmNoZXNcbiI7CisJCXByaW50ICIgICAgQCR0cmFja2VkXG4iOworCX0KK30KKworc3ViIHBydW5lX3JlbW90ZSB7CisJbXkgKCRuYW1lLCAkbHNfcmVtb3RlKSA9IEBfOworCWlmICghZXhpc3RzICRyZW1vdGUtPnskbmFtZX0pIHsKKwkJcHJpbnQgU1RERVJSICJObyBzdWNoIHJlbW90ZSAkbmFtZVxuIjsKKwkJcmV0dXJuIDE7CisJfQorCW15ICRpbmZvID0gJHJlbW90ZS0+eyRuYW1lfTsKKwl1cGRhdGVfbHNfcmVtb3RlKCRsc19yZW1vdGUsICRpbmZvKTsKKworCW15ICgkbmV3LCAkc3RhbGUsICR0cmFja2VkKSA9IGxpc3RfbWFwcGluZygkbmFtZSwgJGluZm8pOworCW15ICRwcmVmaXggPSAicmVmcy9yZW1vdGVzLyRuYW1lIjsKKwlmb3JlYWNoIG15ICR0b19wcnVuZSAoQCRzdGFsZSkgeworCQlteSBAdiA9ICRnaXQtPmNvbW1hbmQocXcocmV2LXBhcnNlIC0tdmVyaWZ5KSwgIiRwcmVmaXgvJHRvX3BydW5lIik7CisJCSRnaXQtPmNvbW1hbmQocXcodXBkYXRlLXJlZiAtZCksICIkcHJlZml4LyR0b19wcnVuZSIsICR2WzBdKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N1YiBzaG93X3JlbW90ZSB7CisJbXkgKCRuYW1lLCAkbHNfcmVtb3RlKSA9IEBfOworCWlmICghZXhpc3RzICRyZW1vdGUtPnskbmFtZX0pIHsKKwkJcHJpbnQgU1RERVJSICJObyBzdWNoIHJlbW90ZSAkbmFtZVxuIjsKKwkJcmV0dXJuIDE7CisJfQorCW15ICRpbmZvID0gJHJlbW90ZS0+eyRuYW1lfTsKKwl1cGRhdGVfbHNfcmVtb3RlKCRsc19yZW1vdGUsICRpbmZvKTsKKworCXByaW50ICIqIHJlbW90ZSAkbmFtZVxuIjsKKwlwcmludCAiICBVUkw6ICRpbmZvLT57J1VSTCd9XG4iOworCWZvciBteSAkYnJhbmNobmFtZSAoc29ydCBrZXlzICUkYnJhbmNoKSB7CisJCW5leHQgdW5sZXNzIChkZWZpbmVkICRicmFuY2gtPnskYnJhbmNobmFtZX17J1JFTU9URSd9ICYmCisJCQkgICAgICRicmFuY2gtPnskYnJhbmNobmFtZX17J1JFTU9URSd9IGVxICRuYW1lKTsKKwkJbXkgQG1lcmdlZCA9IG1hcCB7CisJCQlzfF5yZWZzL2hlYWRzL3x8OworCQkJJF87CisJCX0gc3BsaXQoJyAnLCJAeyRicmFuY2gtPnskYnJhbmNobmFtZX17J01FUkdFJ319Iik7CisJCW5leHQgdW5sZXNzIChAbWVyZ2VkKTsKKwkJcHJpbnQgIiAgUmVtb3RlIGJyYW5jaChlcykgbWVyZ2VkIHdpdGggJ2dpdCBwdWxsJyB3aGlsZSBvbiBicmFuY2ggJGJyYW5jaG5hbWVcbiI7CisJCXByaW50ICIgICAgQG1lcmdlZFxuIjsKKwl9CisJaWYgKCRpbmZvLT57J0xTX1JFTU9URSd9KSB7CisJCXNob3dfbWFwcGluZygkbmFtZSwgJGluZm8pOworCX0KKwlpZiAoJGluZm8tPnsnUFVTSCd9KSB7CisJCW15IEBwdXNoZWQgPSBtYXAgeworCQkJc3xecmVmcy9oZWFkcy98fDsKKwkJCXN8XlwrcmVmcy9oZWFkcy98K3w7CisJCQlzfDpyZWZzL2hlYWRzL3w6fDsKKwkJCSRfOworCQl9IEB7JGluZm8tPnsnUFVTSCd9fTsKKwkJcHJpbnQgIiAgTG9jYWwgYnJhbmNoKGVzKSBwdXNoZWQgd2l0aCAnZ2l0IHB1c2gnXG4iOworCQlwcmludCAiICAgIEBwdXNoZWRcbiI7CisJfQorCXJldHVybiAwOworfQorCitzdWIgYWRkX3JlbW90ZSB7CisJbXkgKCRuYW1lLCAkdXJsLCAkb3B0cykgPSBAXzsKKwlpZiAoZXhpc3RzICRyZW1vdGUtPnskbmFtZX0pIHsKKwkJcHJpbnQgU1RERVJSICJyZW1vdGUgJG5hbWUgYWxyZWFkeSBleGlzdHMuXG4iOworCQlleGl0KDEpOworCX0KKwkkZ2l0LT5jb21tYW5kKCdjb25maWcnLCAicmVtb3RlLiRuYW1lLnVybCIsICR1cmwpOworCW15ICR0cmFjayA9ICRvcHRzLT57J3RyYWNrJ30gfHwgWyIqIl07CisKKwlmb3IgKEAkdHJhY2spIHsKKwkJJGdpdC0+Y29tbWFuZCgnY29uZmlnJywgJy0tYWRkJywgInJlbW90ZS4kbmFtZS5mZXRjaCIsCisJCQkJJG9wdHMtPnsnbWlycm9yJ30gPworCQkJCSIrcmVmcy8kXzpyZWZzLyRfIiA6CisJCQkJIityZWZzL2hlYWRzLyRfOnJlZnMvcmVtb3Rlcy8kbmFtZS8kXyIpOworCX0KKwlpZiAoJG9wdHMtPnsnZmV0Y2gnfSkgeworCQkkZ2l0LT5jb21tYW5kKCdmZXRjaCcsICRuYW1lKTsKKwl9CisJaWYgKGV4aXN0cyAkb3B0cy0+eydtYXN0ZXInfSkgeworCQkkZ2l0LT5jb21tYW5kKCdzeW1ib2xpYy1yZWYnLCAicmVmcy9yZW1vdGVzLyRuYW1lL0hFQUQiLAorCQkJICAgICAgInJlZnMvcmVtb3Rlcy8kbmFtZS8kb3B0cy0+eydtYXN0ZXInfSIpOworCX0KK30KKworc3ViIHVwZGF0ZV9yZW1vdGUgeworCW15ICgkbmFtZSkgPSBAXzsKKwlteSBAcmVtb3RlczsKKworICAgICAgICBteSAkY29uZiA9ICRnaXQtPmNvbmZpZygicmVtb3Rlcy4iIC4gJG5hbWUpOworCWlmIChkZWZpbmVkKCRjb25mKSkgeworCQlAcmVtb3RlcyA9IHNwbGl0KCcgJywgJGNvbmYpOworCX0gZWxzaWYgKCRuYW1lIGVxICdkZWZhdWx0JykgeworCQlAcmVtb3RlcyA9ICgpOworCQlmb3IgKHNvcnQga2V5cyAlJHJlbW90ZSkgeworCQkJbXkgJGRvX2ZldGNoID0gJGdpdC0+Y29uZmlnX2Jvb2woInJlbW90ZS4iIC4gJF8gLgorCQkJCQkJICAgICIuc2tpcERlZmF1bHRVcGRhdGUiKTsKKwkJCXVubGVzcyAoJGRvX2ZldGNoKSB7CisJCQkJcHVzaCBAcmVtb3RlcywgJF87CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlwcmludCBTVERFUlIgIlJlbW90ZSBncm91cCAkbmFtZSBkb2VzIG5vdCBleGlzdC5cbiI7CisJCWV4aXQoMSk7CisJfQorCWZvciAoQHJlbW90ZXMpIHsKKwkJcHJpbnQgIlVwZGF0aW5nICRfXG4iOworCQkkZ2l0LT5jb21tYW5kKCdmZXRjaCcsICIkXyIpOworCX0KK30KKworc3ViIHJtX3JlbW90ZSB7CisJbXkgKCRuYW1lKSA9IEBfOworCWlmICghZXhpc3RzICRyZW1vdGUtPnskbmFtZX0pIHsKKwkJcHJpbnQgU1RERVJSICJObyBzdWNoIHJlbW90ZSAkbmFtZVxuIjsKKwkJcmV0dXJuIDE7CisJfQorCisJJGdpdC0+Y29tbWFuZCgnY29uZmlnJywgJy0tcmVtb3ZlLXNlY3Rpb24nLCAicmVtb3RlLiRuYW1lIik7CisKKwlldmFsIHsKKwkgICAgbXkgQHRyYWNrZXJzID0gJGdpdC0+Y29tbWFuZCgnY29uZmlnJywgJy0tZ2V0LXJlZ2V4cCcsCisJCQknYnJhbmNoLioucmVtb3RlJywgJG5hbWUpOworCQlmb3IgKEB0cmFja2VycykgeworCQkJL15icmFuY2hcLiguKik/XC5yZW1vdGUvOworCQkJJGdpdC0+Y29uZmlnKCctLXVuc2V0JywgImJyYW5jaC4kMS5yZW1vdGUiKTsKKwkJCSRnaXQtPmNvbmZpZygnLS11bnNldCcsICJicmFuY2guJDEubWVyZ2UiKTsKKwkJfQorCX07CisKKwlteSBAcmVmcyA9ICRnaXQtPmNvbW1hbmQoJ2Zvci1lYWNoLXJlZicsCisJCSctLWZvcm1hdD0lKHJlZm5hbWUpICUob2JqZWN0bmFtZSknLCAicmVmcy9yZW1vdGVzLyRuYW1lIik7CisJZm9yIChAcmVmcykgeworCQlteSAoJHJlZiwgJG9iamVjdCkgPSBzcGxpdDsKKwkJJGdpdC0+Y29tbWFuZChxdyh1cGRhdGUtcmVmIC1kKSwgJHJlZiwgJG9iamVjdCk7CisJfQorCXJldHVybiAwOworfQorCitzdWIgYWRkX3VzYWdlIHsKKwlwcmludCBTVERFUlIgIlVzYWdlOiBnaXQgcmVtb3RlIGFkZCBbLWZdIFstdCB0cmFja10qIFstbSBtYXN0ZXJdIDxuYW1lPiA8dXJsPlxuIjsKKwlleGl0KDEpOworfQorCitteSAkVkVSQk9TRSA9IDA7CitAQVJHViA9IGdyZXAgeworCWlmICgkXyBlcSAnLXYnIG9yICRfIGVxICctLXZlcmJvc2UnKSB7CisJCSRWRVJCT1NFPTE7CisJCTAKKwl9IGVsc2UgeworCQkxCisJfQorfSBAQVJHVjsKKworaWYgKCFAQVJHVikgeworCWZvciAoc29ydCBrZXlzICUkcmVtb3RlKSB7CisJCXByaW50ICIkXyI7CisJCXByaW50ICJcdCRyZW1vdGUtPnskX30tPntVUkx9IiBpZiAkVkVSQk9TRTsKKwkJcHJpbnQgIlxuIjsKKwl9Cit9CitlbHNpZiAoJEFSR1ZbMF0gZXEgJ3Nob3cnKSB7CisJbXkgJGxzX3JlbW90ZSA9IDE7CisJbXkgJGk7CisJZm9yICgkaSA9IDE7ICRpIDwgQEFSR1Y7ICRpKyspIHsKKwkJaWYgKCRBUkdWWyRpXSBlcSAnLW4nKSB7CisJCQkkbHNfcmVtb3RlID0gMDsKKwkJfQorCQllbHNlIHsKKwkJCWxhc3Q7CisJCX0KKwl9CisJaWYgKCRpID49IEBBUkdWKSB7CisJCXByaW50IFNUREVSUiAiVXNhZ2U6IGdpdCByZW1vdGUgc2hvdyA8cmVtb3RlPlxuIjsKKwkJZXhpdCgxKTsKKwl9CisJbXkgJHN0YXR1cyA9IDA7CisJZm9yICg7ICRpIDwgQEFSR1Y7ICRpKyspIHsKKwkJJHN0YXR1cyB8PSBzaG93X3JlbW90ZSgkQVJHVlskaV0sICRsc19yZW1vdGUpOworCX0KKwlleGl0KCRzdGF0dXMpOworfQorZWxzaWYgKCRBUkdWWzBdIGVxICd1cGRhdGUnKSB7CisJaWYgKEBBUkdWIDw9IDEpIHsKKwkJdXBkYXRlX3JlbW90ZSgiZGVmYXVsdCIpOworCQlleGl0KDEpOworCX0KKwlmb3IgKG15ICRpID0gMTsgJGkgPCBAQVJHVjsgJGkrKykgeworCQl1cGRhdGVfcmVtb3RlKCRBUkdWWyRpXSk7CisJfQorfQorZWxzaWYgKCRBUkdWWzBdIGVxICdwcnVuZScpIHsKKwlteSAkbHNfcmVtb3RlID0gMTsKKwlteSAkaTsKKwlmb3IgKCRpID0gMTsgJGkgPCBAQVJHVjsgJGkrKykgeworCQlpZiAoJEFSR1ZbJGldIGVxICctbicpIHsKKwkJCSRsc19yZW1vdGUgPSAwOworCQl9CisJCWVsc2UgeworCQkJbGFzdDsKKwkJfQorCX0KKwlpZiAoJGkgPj0gQEFSR1YpIHsKKwkJcHJpbnQgU1RERVJSICJVc2FnZTogZ2l0IHJlbW90ZSBwcnVuZSA8cmVtb3RlPlxuIjsKKwkJZXhpdCgxKTsKKwl9CisJbXkgJHN0YXR1cyA9IDA7CisJZm9yICg7ICRpIDwgQEFSR1Y7ICRpKyspIHsKKwkJJHN0YXR1cyB8PSBwcnVuZV9yZW1vdGUoJEFSR1ZbJGldLCAkbHNfcmVtb3RlKTsKKwl9CisgICAgICAgIGV4aXQoJHN0YXR1cyk7Cit9CitlbHNpZiAoJEFSR1ZbMF0gZXEgJ2FkZCcpIHsKKwlteSAlb3B0cyA9ICgpOworCXdoaWxlICgxIDwgQEFSR1YgJiYgJEFSR1ZbMV0gPX4gL14tLykgeworCQlteSAkb3B0ID0gJEFSR1ZbMV07CisJCXNoaWZ0IEBBUkdWOworCQlpZiAoJG9wdCBlcSAnLWYnIHx8ICRvcHQgZXEgJy0tZmV0Y2gnKSB7CisJCQkkb3B0c3snZmV0Y2gnfSA9IDE7CisJCQluZXh0OworCQl9CisJCWlmICgkb3B0IGVxICctdCcgfHwgJG9wdCBlcSAnLS10cmFjaycpIHsKKwkJCWlmIChAQVJHViA8IDEpIHsKKwkJCQlhZGRfdXNhZ2UoKTsKKwkJCX0KKwkJCSRvcHRzeyd0cmFjayd9IHx8PSBbXTsKKwkJCXB1c2ggQHskb3B0c3sndHJhY2snfX0sICRBUkdWWzFdOworCQkJc2hpZnQgQEFSR1Y7CisJCQluZXh0OworCQl9CisJCWlmICgkb3B0IGVxICctbScgfHwgJG9wdCBlcSAnLS1tYXN0ZXInKSB7CisJCQlpZiAoKEBBUkdWIDwgMSkgfHwgZXhpc3RzICRvcHRzeydtYXN0ZXInfSkgeworCQkJCWFkZF91c2FnZSgpOworCQkJfQorCQkJJG9wdHN7J21hc3Rlcid9ID0gJEFSR1ZbMV07CisJCQlzaGlmdCBAQVJHVjsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRvcHQgZXEgJy0tbWlycm9yJykgeworCQkJJG9wdHN7J21pcnJvcid9ID0gMTsKKwkJCW5leHQ7CisJCX0KKwkJYWRkX3VzYWdlKCk7CisJfQorCWlmIChAQVJHViAhPSAzKSB7CisJCWFkZF91c2FnZSgpOworCX0KKwlhZGRfcmVtb3RlKCRBUkdWWzFdLCAkQVJHVlsyXSwgXCVvcHRzKTsKK30KK2Vsc2lmICgkQVJHVlswXSBlcSAncm0nKSB7CisJaWYgKEBBUkdWIDw9IDEpIHsKKwkJcHJpbnQgU1RERVJSICJVc2FnZTogZ2l0IHJlbW90ZSBybSA8cmVtb3RlPlxuIjsKKwkJZXhpdCgxKTsKKwl9CisJZXhpdChybV9yZW1vdGUoJEFSR1ZbMV0pKTsKK30KK2Vsc2UgeworCXByaW50IFNUREVSUiAiVXNhZ2U6IGdpdCByZW1vdGVcbiI7CisJcHJpbnQgU1RERVJSICIgICAgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iOworCXByaW50IFNUREVSUiAiICAgICAgIGdpdCByZW1vdGUgcm0gPG5hbWU+XG4iOworCXByaW50IFNUREVSUiAiICAgICAgIGdpdCByZW1vdGUgc2hvdyA8bmFtZT5cbiI7CisJcHJpbnQgU1RERVJSICIgICAgICAgZ2l0IHJlbW90ZSBwcnVuZSA8bmFtZT5cbiI7CisJcHJpbnQgU1RERVJSICIgICAgICAgZ2l0IHJlbW90ZSB1cGRhdGUgW2dyb3VwXVxuIjsKKwlleGl0KDEpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtcmVyZXJlLnBlcmwgYi9jb250cmliL2V4YW1wbGVzL2dpdC1yZXJlcmUucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjY5MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtcmVyZXJlLnBlcmwKQEAgLTAsMCArMSwyODQgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBSRXVzZSBSRWNvcmRlZCBSRXNvbHZlLiAgVGhpcyB0b29sIHJlY29yZHMgYSBjb25mbGljdGVkIGF1dG9tZXJnZQorIyByZXN1bHQgYW5kIGl0cyBoYW5kIHJlc29sdXRpb24sIGFuZCBoZWxwcyB0byByZXNvbHZlIGZ1dHVyZQorIyBhdXRvbWVyZ2UgdGhhdCByZXN1bHRzIGluIHRoZSBzYW1lIGNvbmZsaWN0LgorIworIyBUbyBlbmFibGUgdGhpcyBmZWF0dXJlLCBjcmVhdGUgYSBkaXJlY3RvcnkgJ3JyLWNhY2hlJyB1bmRlciB5b3VyCisjIC5naXQvIGRpcmVjdG9yeS4KKwordXNlIERpZ2VzdDsKK3VzZSBGaWxlOjpQYXRoOwordXNlIEZpbGU6OkNvcHk7CisKK215ICRnaXRfZGlyID0gJDo6RU5We0dJVF9ESVJ9IHx8ICIuZ2l0IjsKK215ICRycl9kaXIgPSAiJGdpdF9kaXIvcnItY2FjaGUiOworbXkgJG1lcmdlX3JyID0gIiRnaXRfZGlyL3JyLWNhY2hlL01FUkdFX1JSIjsKKworbXkgJW1lcmdlX3JyID0gKCk7CisKK3N1YiByZWFkX3JyIHsKKwlpZiAoIS1mICRtZXJnZV9ycikgeworCQklbWVyZ2VfcnIgPSAoKTsKKwkJcmV0dXJuOworCX0KKwlteSAkaW47CisJbG9jYWwgJC8gPSAiXDAiOworCW9wZW4gJGluLCAiPCRtZXJnZV9yciIgb3IgZGllICIkITogJG1lcmdlX3JyIjsKKwl3aGlsZSAoPCRpbj4pIHsKKwkJY2hvbXA7CisJCW15ICgkbmFtZSwgJHBhdGgpID0gL14oWzAtOWEtZl17NDB9KVx0KC4qKSQvczsKKwkJJG1lcmdlX3JyeyRwYXRofSA9ICRuYW1lOworCX0KKwljbG9zZSAkaW47Cit9CisKK3N1YiB3cml0ZV9yciB7CisJbXkgJG91dDsKKwlvcGVuICRvdXQsICI+JG1lcmdlX3JyIiBvciBkaWUgIiQhOiAkbWVyZ2VfcnIiOworCWZvciBteSAkcGF0aCAoc29ydCBrZXlzICVtZXJnZV9ycikgeworCQlteSAkbmFtZSA9ICRtZXJnZV9ycnskcGF0aH07CisJCXByaW50ICRvdXQgIiRuYW1lXHQkcGF0aFwwIjsKKwl9CisJY2xvc2UgJG91dDsKK30KKworc3ViIGNvbXB1dGVfY29uZmxpY3RfbmFtZSB7CisJbXkgKCRwYXRoKSA9IEBfOworCW15IEBzaWRlID0gKCk7CisJbXkgJGluOworCW9wZW4gJGluLCAiPCRwYXRoIiAgb3IgZGllICIkITogJHBhdGgiOworCisJbXkgJHNoYTEgPSBEaWdlc3QtPm5ldygiU0hBLTEiKTsKKwlteSAkaHVuayA9IDA7CisJd2hpbGUgKDwkaW4+KSB7CisJCWlmICgvXjw8PDw8PDwgLiovKSB7CisJCQkkaHVuaysrOworCQkJQHNpZGUgPSAoW10sIHVuZGVmKTsKKwkJfQorCQllbHNpZiAoL149PT09PT09JC8pIHsKKwkJCSRzaWRlWzFdID0gW107CisJCX0KKwkJZWxzaWYgKC9ePj4+Pj4+PiAuKi8pIHsKKwkJCW15ICgkb25lLCAkdHdvKTsKKwkJCSRvbmUgPSBqb2luKCcnLCBAeyRzaWRlWzBdfSk7CisJCQkkdHdvID0gam9pbignJywgQHskc2lkZVsxXX0pOworCQkJaWYgKCR0d28gbGUgJG9uZSkgeworCQkJCSgkb25lLCAkdHdvKSA9ICgkdHdvLCAkb25lKTsKKwkJCX0KKwkJCSRzaGExLT5hZGQoJG9uZSk7CisJCQkkc2hhMS0+YWRkKCJcMCIpOworCQkJJHNoYTEtPmFkZCgkdHdvKTsKKwkJCSRzaGExLT5hZGQoIlwwIik7CisJCQlAc2lkZSA9ICgpOworCQl9CisJCWVsc2lmIChAc2lkZSA9PSAwKSB7CisJCQluZXh0OworCQl9CisJCWVsc2lmIChkZWZpbmVkICRzaWRlWzFdKSB7CisJCQlwdXNoIEB7JHNpZGVbMV19LCAkXzsKKwkJfQorCQllbHNlIHsKKwkJCXB1c2ggQHskc2lkZVswXX0sICRfOworCQl9CisJfQorCWNsb3NlICRpbjsKKwlyZXR1cm4gKCRzaGExLT5oZXhkaWdlc3QsICRodW5rKTsKK30KKworc3ViIHJlY29yZF9wcmVpbWFnZSB7CisJbXkgKCRwYXRoLCAkbmFtZSkgPSBAXzsKKwlteSBAc2lkZSA9ICgpOworCW15ICgkaW4sICRvdXQpOworCW9wZW4gJGluLCAiPCRwYXRoIiAgb3IgZGllICIkITogJHBhdGgiOworCW9wZW4gJG91dCwgIj4kbmFtZSIgb3IgZGllICIkITogJG5hbWUiOworCisJd2hpbGUgKDwkaW4+KSB7CisJCWlmICgvXjw8PDw8PDwgLiovKSB7CisJCQlAc2lkZSA9IChbXSwgdW5kZWYpOworCQl9CisJCWVsc2lmICgvXj09PT09PT0kLykgeworCQkJJHNpZGVbMV0gPSBbXTsKKwkJfQorCQllbHNpZiAoL14+Pj4+Pj4+IC4qLykgeworCQkJbXkgKCRvbmUsICR0d28pOworCQkJJG9uZSA9IGpvaW4oJycsIEB7JHNpZGVbMF19KTsKKwkJCSR0d28gPSBqb2luKCcnLCBAeyRzaWRlWzFdfSk7CisJCQlpZiAoJHR3byBsZSAkb25lKSB7CisJCQkJKCRvbmUsICR0d28pID0gKCR0d28sICRvbmUpOworCQkJfQorCQkJcHJpbnQgJG91dCAiPDw8PDw8PFxuIjsKKwkJCXByaW50ICRvdXQgJG9uZTsKKwkJCXByaW50ICRvdXQgIj09PT09PT1cbiI7CisJCQlwcmludCAkb3V0ICR0d287CisJCQlwcmludCAkb3V0ICI+Pj4+Pj4+XG4iOworCQkJQHNpZGUgPSAoKTsKKwkJfQorCQllbHNpZiAoQHNpZGUgPT0gMCkgeworCQkJcHJpbnQgJG91dCAkXzsKKwkJfQorCQllbHNpZiAoZGVmaW5lZCAkc2lkZVsxXSkgeworCQkJcHVzaCBAeyRzaWRlWzFdfSwgJF87CisJCX0KKwkJZWxzZSB7CisJCQlwdXNoIEB7JHNpZGVbMF19LCAkXzsKKwkJfQorCX0KKwljbG9zZSAkb3V0OworCWNsb3NlICRpbjsKK30KKworc3ViIGZpbmRfY29uZmxpY3QgeworCW15ICRpbjsKKwlsb2NhbCAkLyA9ICJcMCI7CisJbXkgJHBpZCA9IG9wZW4oJGluLCAnLXwnKTsKKwlkaWUgIiQhIiB1bmxlc3MgZGVmaW5lZCAkcGlkOworCWlmICghJHBpZCkgeworCQlleGVjKHF3KGdpdCBscy1maWxlcyAteiAtdSkpIG9yIGRpZSAiJCE6IGxzLWZpbGVzIjsKKwl9CisJbXkgJXBhdGggPSAoKTsKKwlteSBAcGF0aCA9ICgpOworCXdoaWxlICg8JGluPikgeworCQljaG9tcDsKKwkJbXkgKCRtb2RlLCAkc2hhMSwgJHN0YWdlLCAkcGF0aCkgPQorCQkgICAgL14oWzAtN10rKSAoWzAtOWEtZl17NDB9KSAoWzEyM10pXHQoLiopJC9zOworCQkkcGF0aHskcGF0aH0gfD0gKDEgPDwgJHN0YWdlKTsKKwl9CisJY2xvc2UgJGluOworCXdoaWxlIChteSAoJHBhdGgsICRzdGF0dXMpID0gZWFjaCAlcGF0aCkgeworCQlpZiAoJHN0YXR1cyA9PSAxNCkgeyBwdXNoIEBwYXRoLCAkcGF0aDsgfQorCX0KKwlyZXR1cm4gQHBhdGg7Cit9CisKK3N1YiBtZXJnZSB7CisJbXkgKCRuYW1lLCAkcGF0aCkgPSBAXzsKKwlyZWNvcmRfcHJlaW1hZ2UoJHBhdGgsICIkcnJfZGlyLyRuYW1lL3RoaXNpbWFnZSIpOworCXVubGVzcyAoc3lzdGVtKCdnaXQnLCAnbWVyZ2UtZmlsZScsIG1hcCB7ICIkcnJfZGlyLyRuYW1lLyR7X31pbWFnZSIgfQorCQkgICAgICAgcXcodGhpcyBwcmUgcG9zdCkpKSB7CisJCW15ICRpbjsKKwkJb3BlbiAkaW4sICI8JHJyX2Rpci8kbmFtZS90aGlzaW1hZ2UiIG9yCisJCSAgICBkaWUgIiQhOiAkbmFtZS90aGlzaW1hZ2UiOworCQlteSAkb3V0OworCQlvcGVuICRvdXQsICI+JHBhdGgiIG9yIGRpZSAiJCE6ICRwYXRoIjsKKwkJd2hpbGUgKDwkaW4+KSB7IHByaW50ICRvdXQgJF87IH0KKwkJY2xvc2UgJGluOworCQljbG9zZSAkb3V0OworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N1YiBnYXJiYWdlX2NvbGxlY3RfcmVyZXJlIHsKKwkjIFdlIHNob3VsZCBhbGxvdyBzcGVjaWZ5aW5nIHRoZXNlIGZyb20gdGhlIGNvbW1hbmQgbGluZSBhbmQKKwkjIHRoYXQgaXMgd2h5IHRoZSBjYWxsZXIgZ2l2ZXMgQEFSR1YgdG8gdXMsIGJ1dCBJIGFtIGxhenkuCisKKwlteSAkY3V0b2ZmX25vcmVzb2x2ZSA9IDE1OyAjIHR3byB3ZWVrcworCW15ICRjdXRvZmZfcmVzb2x2ZSA9IDYwOyAjIHR3byBtb250aHMKKwlteSBAdG9fcmVtb3ZlOworCXdoaWxlICg8JHJyX2Rpci8qL3ByZWltYWdlPikgeworCQlteSAoJGRpcikgPSAvXiguKilcL3ByZWltYWdlJC87CisJCW15ICRjdXRvZmYgPSAoKC1mICIkZGlyL3Bvc3RpbWFnZSIpCisJCQkgICAgICA/ICRjdXRvZmZfcmVzb2x2ZQorCQkJICAgICAgOiAkY3V0b2ZmX25vcmVzb2x2ZSk7CisJCW15ICRhZ2UgPSAtTSAiJF8iOworCQlpZiAoJGN1dG9mZiA8PSAkYWdlKSB7CisJCQlwdXNoIEB0b19yZW1vdmUsICRkaXI7CisJCX0KKwl9CisJaWYgKEB0b19yZW1vdmUpIHsKKwkJcm10cmVlKFxAdG9fcmVtb3ZlKTsKKwl9Cit9CisKKy1kICIkcnJfZGlyIiB8fCBleGl0KDApOworCityZWFkX3JyKCk7CisKK2lmIChAQVJHVikgeworCW15ICRhcmcgPSBzaGlmdCBAQVJHVjsKKwlpZiAoJGFyZyBlcSAnY2xlYXInKSB7CisJCWZvciBteSAkcGF0aCAoa2V5cyAlbWVyZ2VfcnIpIHsKKwkJCW15ICRuYW1lID0gJG1lcmdlX3JyeyRwYXRofTsKKwkJCWlmICgtZCAiJHJyX2Rpci8kbmFtZSIgJiYKKwkJCSAgICAhIC1mICIkcnJfZGlyLyRuYW1lL3Bvc3RpbWFnZSIpIHsKKwkJCQlybXRyZWUoWyIkcnJfZGlyLyRuYW1lIl0pOworCQkJfQorCQl9CisJCXVubGluayAkbWVyZ2VfcnI7CisJfQorCWVsc2lmICgkYXJnIGVxICdzdGF0dXMnKSB7CisJCWZvciBteSAkcGF0aCAoa2V5cyAlbWVyZ2VfcnIpIHsKKwkJCXByaW50ICRwYXRoLCAiXG4iOworCQl9CisJfQorCWVsc2lmICgkYXJnIGVxICdkaWZmJykgeworCQlmb3IgbXkgJHBhdGggKGtleXMgJW1lcmdlX3JyKSB7CisJCQlteSAkbmFtZSA9ICRtZXJnZV9ycnskcGF0aH07CisJCQlzeXN0ZW0oJ2RpZmYnLCAoKEBBUkdWID09IDApID8gKCctdScpIDogQEFSR1YpLAorCQkJCSctTCcsICJhLyRwYXRoIiwgJy1MJywgImIvJHBhdGgiLAorCQkJCSIkcnJfZGlyLyRuYW1lL3ByZWltYWdlIiwgJHBhdGgpOworCQl9CisJfQorCWVsc2lmICgkYXJnIGVxICdnYycpIHsKKwkJZ2FyYmFnZV9jb2xsZWN0X3JlcmVyZShAQVJHVik7CisJfQorCWVsc2UgeworCQlkaWUgIiQwIHVua25vd24gY29tbWFuZDogJGFyZ1xuIjsKKwl9CisJZXhpdCAwOworfQorCitteSAlY29uZmxpY3QgPSBtYXAgeyAkXyA9PiAxIH0gZmluZF9jb25mbGljdCgpOworCisjIE1FUkdFX1JSIHJlY29yZHMgcGF0aHMgd2l0aCBjb25mbGljdHMgaW1tZWRpYXRlbHkgYWZ0ZXIgbWVyZ2UKKyMgZmFpbGVkLiAgU29tZSBvZiB0aGUgY29uZmxpY3RlZCBwYXRocyBtaWdodCBoYXZlIGJlZW4gaGFuZCByZXNvbHZlZAorIyBpbiB0aGUgd29ya2luZyB0cmVlIHNpbmNlIHRoZW4sIGJ1dCB0aGUgaW5pdGlhbCBydW4gd291bGQgY2F0Y2ggYWxsCisjIGFuZCByZWdpc3RlciB0aGVpciBwcmVpbWFnZXMuCisKK2ZvciBteSAkcGF0aCAoa2V5cyAlY29uZmxpY3QpIHsKKwkjIFRoaXMgcGF0aCBoYXMgY29uZmxpY3QuICBJZiBpdCBpcyBub3QgcmVjb3JkZWQgeWV0LAorCSMgcmVjb3JkIHRoZSBwcmUtaW1hZ2UuCisJaWYgKCFleGlzdHMgJG1lcmdlX3JyeyRwYXRofSkgeworCQlteSAoJG5hbWUsICRodW5rKSA9IGNvbXB1dGVfY29uZmxpY3RfbmFtZSgkcGF0aCk7CisJCW5leHQgdW5sZXNzICgkaHVuayk7CisJCSRtZXJnZV9ycnskcGF0aH0gPSAkbmFtZTsKKwkJaWYgKCEgLWQgIiRycl9kaXIvJG5hbWUiKSB7CisJCQlta3BhdGgoIiRycl9kaXIvJG5hbWUiLCAwLCAwNzc3KTsKKwkJCXByaW50IFNUREVSUiAiUmVjb3JkZWQgcHJlaW1hZ2UgZm9yICckcGF0aCdcbiI7CisJCQlyZWNvcmRfcHJlaW1hZ2UoJHBhdGgsICIkcnJfZGlyLyRuYW1lL3ByZWltYWdlIik7CisJCX0KKwl9Cit9CisKKyMgTm93IHNvbWUgb2YgdGhlIHBhdGhzIHRoYXQgaGFkIGNvbmZsaWN0cyBlYXJsaWVyIG1pZ2h0IGhhdmUgYmVlbgorIyBoYW5kIHJlc29sdmVkLiAgT3RoZXJzIG1heSBiZSBzaW1pbGFyIHRvIGEgY29uZmxpY3QgYWxyZWFkeSB0aGF0CisjIHdhcyByZXNvbHZlZCBiZWZvcmUuCisKK2ZvciBteSAkcGF0aCAoa2V5cyAlbWVyZ2VfcnIpIHsKKwlteSAkbmFtZSA9ICRtZXJnZV9ycnskcGF0aH07CisKKwkjIFdlIGNvdWxkIHJlc29sdmUgdGhpcyBhdXRvbWF0aWNhbGx5IGlmIHdlIGhhdmUgaW1hZ2VzLgorCWlmICgtZiAiJHJyX2Rpci8kbmFtZS9wcmVpbWFnZSIgJiYKKwkgICAgLWYgIiRycl9kaXIvJG5hbWUvcG9zdGltYWdlIikgeworCQlpZiAobWVyZ2UoJG5hbWUsICRwYXRoKSkgeworCQkJcHJpbnQgU1RERVJSICJSZXNvbHZlZCAnJHBhdGgnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uXG4iOworCQkJIyBUaGVuIHdlIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgcGF0aAorCQkJIyBhbnltb3JlLgorCQkJZGVsZXRlICRtZXJnZV9ycnskcGF0aH07CisJCQluZXh0OworCQl9CisJfQorCisJIyBMZXQncyBzZWUgaWYgd2UgaGF2ZSByZXNvbHZlZCBpdC4KKwkodW5kZWYsIG15ICRodW5rKSA9IGNvbXB1dGVfY29uZmxpY3RfbmFtZSgkcGF0aCk7CisJbmV4dCBpZiAoJGh1bmspOworCisJcHJpbnQgU1RERVJSICJSZWNvcmRlZCByZXNvbHV0aW9uIGZvciAnJHBhdGgnLlxuIjsKKwljb3B5KCRwYXRoLCAiJHJyX2Rpci8kbmFtZS9wb3N0aW1hZ2UiKTsKKwkjIEFuZCB3ZSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHBhdGggYW55bW9yZS4KKwlkZWxldGUgJG1lcmdlX3JyeyRwYXRofTsKK30KKworIyBXcml0ZSBvdXQgdGhlIHJlc3QuCit3cml0ZV9ycigpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtcmVzZXQuc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1yZXNldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYWZlYjUyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtcmVzZXQuc2gKQEAgLTAsMCArMSwxMDYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgTGludXMgVG9ydmFsZHMgYW5kIEp1bmlvIEMgSGFtYW5vCisjCitVU0FHRT0nWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmRdICBbPGNvbW1pdC1pc2g+XSBbIFstLV0gPHBhdGhzPi4uLl0nCitTVUJESVJFQ1RPUllfT0s9WWVzCisuIGdpdC1zaC1zZXR1cAorc2V0X3JlZmxvZ19hY3Rpb24gInJlc2V0ICQqIgorcmVxdWlyZV93b3JrX3RyZWUKKwordXBkYXRlPSByZXNldF90eXBlPS0tbWl4ZWQKK3Vuc2V0IHJldgorCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCkKKwkJcmVzZXRfdHlwZT0iJDEiCisJCTs7CisJLS0pCisJCWJyZWFrCisJCTs7CisJLSopCisJCXVzYWdlCisJCTs7CisJKikKKwkJcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiKSB8fCBleGl0CisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKKzogJHtyZXY9SEVBRH0KK3Jldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJHJldl4wKSB8fCBleGl0CisKKyMgU2tpcCAtLSBpbiAiZ2l0IHJlc2V0IEhFQUQgLS0gZm9vIiBhbmQgImdpdCByZXNldCAtLSBmb28iLgorY2FzZSAiJDEiIGluIC0tKSBzaGlmdCA7OyBlc2FjCisKKyMgZ2l0IHJlc2V0IC0tbWl4ZWQgdHJlZSBbLS1dIHBhdGhzLi4uIGNhbiBiZSB1c2VkIHRvCisjIGxvYWQgY2hvc2VuIHBhdGhzIGZyb20gdGhlIHRyZWUgaW50byB0aGUgaW5kZXggd2l0aG91dAorIyBhZmZlY3RpbmcgdGhlIHdvcmtpbmcgdHJlZSBub3IgSEVBRC4KK2lmIHRlc3QgJCMgIT0gMAordGhlbgorCXRlc3QgIiRyZXNldF90eXBlIiA9ICItLW1peGVkIiB8fAorCQlkaWUgIkNhbm5vdCBkbyBwYXJ0aWFsICRyZXNldF90eXBlIHJlc2V0LiIKKworCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICRyZXYgLS0gIiRAIiB8CisJc2VkIC1lICdzL146XChbMC03XVswLTddKlwpIFswLTddWzAtN10qIFwoWzAtOWEtZl1bMC05YS1mXSpcKSBbMC05YS1mXVswLTlhLWZdKiBbQS1aXQlcKC4qXCkkL1wxIFwyCVwzLycgfAorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgLS1pbmRleC1pbmZvIHx8IGV4aXQKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorCWV4aXQKK2ZpCisKK2NkX3RvX3RvcGxldmVsCisKK2lmIHRlc3QgIiRyZXNldF90eXBlIiA9ICItLWhhcmQiCit0aGVuCisJdXBkYXRlPS11CitmaQorCisjIFNvZnQgcmVzZXQgZG9lcyBub3QgdG91Y2ggdGhlIGluZGV4IGZpbGUgbm9yIHRoZSB3b3JraW5nIHRyZWUKKyMgYXQgYWxsLCBidXQgcmVxdWlyZXMgdGhlbSBpbiBhIGdvb2Qgb3JkZXIuICBPdGhlciByZXNldHMgcmVzZXQKKyMgdGhlIGluZGV4IGZpbGUgdG8gdGhlIHRyZWUgb2JqZWN0IHdlIGFyZSBzd2l0Y2hpbmcgdG8uCitpZiB0ZXN0ICIkcmVzZXRfdHlwZSIgPSAiLS1zb2Z0IgordGhlbgorCWlmIHRlc3QgLWYgIiRHSVRfRElSL01FUkdFX0hFQUQiIHx8CisJICAgdGVzdCAiIiAhPSAiJChnaXQgbHMtZmlsZXMgLS11bm1lcmdlZCkiCisJdGhlbgorCQlkaWUgIkNhbm5vdCBkbyBhIHNvZnQgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKKwlmaQorZWxzZQorCWdpdCByZWFkLXRyZWUgLXYgLS1yZXNldCAkdXBkYXRlICIkcmV2IiB8fCBleGl0CitmaQorCisjIEFueSByZXNldHMgdXBkYXRlIEhFQUQgdG8gdGhlIGhlYWQgYmVpbmcgc3dpdGNoZWQgdG8uCitpZiBvcmlnPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIDI+L2Rldi9udWxsKQordGhlbgorCWVjaG8gIiRvcmlnIiA+IiRHSVRfRElSL09SSUdfSEVBRCIKK2Vsc2UKKwlybSAtZiAiJEdJVF9ESVIvT1JJR19IRUFEIgorZmkKK2dpdCB1cGRhdGUtcmVmIC1tICIkR0lUX1JFRkxPR19BQ1RJT04iIEhFQUQgIiRyZXYiCit1cGRhdGVfcmVmX3N0YXR1cz0kPworCitjYXNlICIkcmVzZXRfdHlwZSIgaW4KKy0taGFyZCApCisJdGVzdCAkdXBkYXRlX3JlZl9zdGF0dXMgPSAwICYmIHsKKwkJcHJpbnRmICJIRUFEIGlzIG5vdyBhdCAiCisJCUdJVF9QQUdFUj0gZ2l0IGxvZyAtLW1heC1jb3VudD0xIC0tcHJldHR5PW9uZWxpbmUgXAorCQkJLS1hYmJyZXYtY29tbWl0IEhFQUQKKwl9CisJOzsKKy0tc29mdCApCisJOzsgIyBOb3RoaW5nIGVsc2UgdG8gZG8KKy0tbWl4ZWQgKQorCSMgUmVwb3J0IHdoYXQgaGFzIG5vdCBiZWVuIHVwZGF0ZWQuCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKwk7OworZXNhYworCitybSAtZiAiJEdJVF9ESVIvTUVSR0VfSEVBRCIgIiRHSVRfRElSL3JyLWNhY2hlL01FUkdFX1JSIiBcCisJIiRHSVRfRElSL1NRVUFTSF9NU0ciICIkR0lUX0RJUi9NRVJHRV9NU0ciCisKK2V4aXQgJHVwZGF0ZV9yZWZfc3RhdHVzCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1yZXNvbHZlLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtcmVzb2x2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Zjk4MTQyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtcmVzb2x2ZS5zaApAQCAtMCwwICsxLDExMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBMaW51cyBUb3J2YWxkcworIworIyBSZXNvbHZlIHR3byB0cmVlcy4KKyMKKworZWNobyAnV0FSTklORzogVGhpcyBjb21tYW5kIGlzIERFUFJFQ0FURUQgYW5kIHdpbGwgYmUgcmVtb3ZlZCB2ZXJ5IHNvb24uJyA+JjIKK2VjaG8gJ1dBUk5JTkc6IFBsZWFzZSB1c2UgZ2l0LW1lcmdlIG9yIGdpdC1wdWxsIGluc3RlYWQuJyA+JjIKK3NsZWVwIDIKKworVVNBR0U9JzxoZWFkPiA8cmVtb3RlPiA8bWVyZ2UtbWVzc2FnZT4nCisuIGdpdC1zaC1zZXR1cAorCitkcm9waGVhZHMoKSB7CisJcm0gLWYgLS0gIiRHSVRfRElSL01FUkdFX0hFQUQiIFwKKwkJIiRHSVRfRElSL0xBU1RfTUVSR0UiIHx8IGV4aXQgMQorfQorCitoZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiXjApICYmCittZXJnZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQyIl4wKSAmJgorbWVyZ2VfbmFtZT0iJDIiICYmCittZXJnZV9tc2c9IiQzIiB8fCB1c2FnZQorCisjCisjIFRoZSByZW1vdGUgbmFtZSBpcyBqdXN0IHVzZWQgZm9yIHRoZSBtZXNzYWdlLAorIyBidXQgd2UgZG8gd2FudCBpdC4KKyMKK2lmIFsgLXogIiRoZWFkIiAtbyAteiAiJG1lcmdlIiAtbyAteiAiJG1lcmdlX21zZyIgXTsgdGhlbgorCXVzYWdlCitmaQorCitkcm9waGVhZHMKK2VjaG8gJGhlYWQgPiAiJEdJVF9ESVIiL09SSUdfSEVBRAorZWNobyAkbWVyZ2UgPiAiJEdJVF9ESVIiL0xBU1RfTUVSR0UKKworY29tbW9uPSQoZ2l0IG1lcmdlLWJhc2UgJGhlYWQgJG1lcmdlKQoraWYgWyAteiAiJGNvbW1vbiIgXTsgdGhlbgorCWRpZSAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCBiZXR3ZWVuIiAkbWVyZ2UgJGhlYWQKK2ZpCisKK2Nhc2UgIiRjb21tb24iIGluCisiJG1lcmdlIikKKwllY2hvICJBbHJlYWR5IHVwLXRvLWRhdGUuIFllZWFoISIKKwlkcm9waGVhZHMKKwlleGl0IDAKKwk7OworIiRoZWFkIikKKwllY2hvICJVcGRhdGluZyAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkaGVhZCkuLiQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRtZXJnZSkiCisJZ2l0IHJlYWQtdHJlZSAtdSAtbSAkaGVhZCAkbWVyZ2UgfHwgZXhpdCAxCisJZ2l0IHVwZGF0ZS1yZWYgLW0gInJlc29sdmUgJG1lcmdlX25hbWU6IEZhc3QtZm9yd2FyZCIgXAorCQlIRUFEICIkbWVyZ2UiICIkaGVhZCIKKwlnaXQgZGlmZi10cmVlIC1wICRoZWFkICRtZXJnZSB8IGdpdCBhcHBseSAtLXN0YXQKKwlkcm9waGVhZHMKKwlleGl0IDAKKwk7OworZXNhYworCisjIFdlIGFyZSBnb2luZyB0byBtYWtlIGEgbmV3IGNvbW1pdC4KK2dpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+L2Rldi9udWxsIHx8IGV4aXQKKworIyBGaW5kIGFuIG9wdGltdW0gbWVyZ2UgYmFzZSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBjYW5kaWRhdGVzLgorTEY9JworJworY29tbW9uPSQoZ2l0IG1lcmdlLWJhc2UgLWEgJGhlYWQgJG1lcmdlKQorY2FzZSAiJGNvbW1vbiIgaW4KKz8qIiRMRiI/KikKKwllY2hvICJUcnlpbmcgdG8gZmluZCB0aGUgb3B0aW11bSBtZXJnZSBiYXNlLiIKKwlHPS50bXAtaW5kZXgkJAorCWJlc3Q9CisJYmVzdF9jbnQ9LTEKKwlmb3IgYyBpbiAkY29tbW9uCisJZG8KKwkJcm0gLWYgJEcKKwkJR0lUX0lOREVYX0ZJTEU9JEcgZ2l0IHJlYWQtdHJlZSAtbSAkYyAkaGVhZCAkbWVyZ2UgXAorCQkJMj4vZGV2L251bGwgfHwgY29udGludWUKKwkJIyBDb3VudCB0aGUgcGF0aHMgdGhhdCBhcmUgdW5tZXJnZWQuCisJCWNudD1gR0lUX0lOREVYX0ZJTEU9JEcgZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQgfCB3YyAtbGAKKwkJaWYgdGVzdCAkYmVzdF9jbnQgLWxlIDAgLW8gJGNudCAtbGUgJGJlc3RfY250CisJCXRoZW4KKwkJCWJlc3Q9JGMKKwkJCWJlc3RfY250PSRjbnQKKwkJCWlmIHRlc3QgIiRiZXN0X2NudCIgLWVxIDAKKwkJCXRoZW4KKwkJCQkjIENhbm5vdCBkbyBhbnkgYmV0dGVyIHRoYW4gYWxsIHRyaXZpYWwgbWVyZ2UuCisJCQkJYnJlYWsKKwkJCWZpCisJCWZpCisJZG9uZQorCXJtIC1mICRHCisJY29tbW9uPSIkYmVzdCIKK2VzYWMKKworZWNobyAiVHJ5aW5nIHRvIG1lcmdlICRtZXJnZSBpbnRvICRoZWFkIHVzaW5nICRjb21tb24uIgorZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggMj4vZGV2L251bGwKK2dpdCByZWFkLXRyZWUgLXUgLW0gJGNvbW1vbiAkaGVhZCAkbWVyZ2UgfHwgZXhpdCAxCityZXN1bHRfdHJlZT0kKGdpdCB3cml0ZS10cmVlICAyPiAvZGV2L251bGwpCitpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwllY2hvICJTaW1wbGUgbWVyZ2UgZmFpbGVkLCB0cnlpbmcgQXV0b21hdGljIG1lcmdlIgorCWdpdC1tZXJnZS1pbmRleCAtbyBnaXQtbWVyZ2Utb25lLWZpbGUgLWEKKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJZWNobyAkbWVyZ2UgPiAiJEdJVF9ESVIiL01FUkdFX0hFQUQKKwkJZGllICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkLCBmaXggdXAgYnkgaGFuZCIKKwlmaQorCXJlc3VsdF90cmVlPSQoZ2l0IHdyaXRlLXRyZWUpIHx8IGV4aXQgMQorZmkKK3Jlc3VsdF9jb21taXQ9JChlY2hvICIkbWVyZ2VfbXNnIiB8IGdpdCBjb21taXQtdHJlZSAkcmVzdWx0X3RyZWUgLXAgJGhlYWQgLXAgJG1lcmdlKQorZWNobyAiQ29tbWl0dGVkIG1lcmdlICRyZXN1bHRfY29tbWl0IgorZ2l0IHVwZGF0ZS1yZWYgLW0gInJlc29sdmUgJG1lcmdlX25hbWU6IEluLWluZGV4IG1lcmdlIiBcCisJSEVBRCAiJHJlc3VsdF9jb21taXQiICIkaGVhZCIKK2dpdCBkaWZmLXRyZWUgLXAgJGhlYWQgJHJlc3VsdF9jb21taXQgfCBnaXQgYXBwbHkgLS1zdGF0Citkcm9waGVhZHMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJldmVydC5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJldmVydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YmYxNTVjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtcmV2ZXJ0LnNoCkBAIC0wLDAgKzEsMjA3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IExpbnVzIFRvcnZhbGRzCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCitjYXNlICIkMCIgaW4KKyotcmV2ZXJ0KiApCisJdGVzdCAtdCAwICYmIGVkaXQ9LWUKKwlyZXBsYXk9CisJbWU9cmV2ZXJ0CisJVVNBR0U9J1stLWVkaXQgfCAtLW5vLWVkaXRdIFstbl0gPGNvbW1pdC1pc2g+JyA7OworKi1jaGVycnktcGljayogKQorCXJlcGxheT10CisJZWRpdD0KKwltZT1jaGVycnktcGljaworCVVTQUdFPSdbLS1lZGl0XSBbLW5dIFstcl0gWy14XSA8Y29tbWl0LWlzaD4nICA7OworKiApCisJZWNobyA+JjIgIldoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKKwlleGl0IDEgOzsKK2VzYWMKKworU1VCRElSRUNUT1JZX09LPVllcyA7IyB3ZSB3aWxsIGNkIHVwCisuIGdpdC1zaC1zZXR1cAorcmVxdWlyZV93b3JrX3RyZWUKK2NkX3RvX3RvcGxldmVsCisKK25vX2NvbW1pdD0KK3hvcHQ9Cit3aGlsZSBjYXNlICIkIyIgaW4gMCkgYnJlYWsgOzsgZXNhYworZG8KKwljYXNlICIkMSIgaW4KKwktbnwtLW58LS1ub3wtLW5vLXwtLW5vLWN8LS1uby1jb3wtLW5vLWNvbXwtLW5vLWNvbW18XAorCSAgICAtLW5vLWNvbW1pfC0tbm8tY29tbWl0KQorCQlub19jb21taXQ9dAorCQk7OworCS1lfC0tZXwtLWVkfC0tZWRpfC0tZWRpdCkKKwkJZWRpdD0tZQorCQk7OworCS0tbnwtLW5vfC0tbm8tfC0tbm8tZXwtLW5vLWVkfC0tbm8tZWRpfC0tbm8tZWRpdCkKKwkJZWRpdD0KKwkJOzsKKwktcikKKwkJOiBuby1vcCA7OworCS14fC0taS1yZWFsbHktd2FudC10by1leHBvc2UtbXktcHJpdmF0ZS1jb21taXQtb2JqZWN0LW5hbWUpCisJCXJlcGxheT0KKwkJOzsKKwktWD8qKQorCQl4b3B0PSIkeG9wdCQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICItLSR7MSMtWH0iKSIKKwkJOzsKKwktLXN0cmF0ZWd5LW9wdGlvbj0qKQorCQl4b3B0PSIkeG9wdCQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICItLSR7MSMtLXN0cmF0ZWd5LW9wdGlvbj19IikiCisJCTs7CisJLVh8LS1zdHJhdGVneS1vcHRpb24pCisJCXNoaWZ0CisJCXhvcHQ9IiR4b3B0JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIi0tJDEiKSIKKwkJOzsKKwktKikKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCitzZXRfcmVmbG9nX2FjdGlvbiAiJG1lIgorCit0ZXN0ICIkbWUsJHJlcGxheSIgPSAicmV2ZXJ0LHQiICYmIHVzYWdlCisKK2Nhc2UgIiRub19jb21taXQiIGluCit0KQorCSMgV2UgZG8gbm90IGludGVuZCB0byBjb21taXQgaW1tZWRpYXRlbHkuICBXZSBqdXN0IHdhbnQgdG8KKwkjIG1lcmdlIHRoZSBkaWZmZXJlbmNlcyBpbi4KKwloZWFkPSQoZ2l0LXdyaXRlLXRyZWUpIHx8CisJCWRpZSAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKKwk7OworKikKKwloZWFkPSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSB8fAorCQlkaWUgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQiCisJZmlsZXM9JChnaXQtZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtb25seSAkaGVhZCkgfHwgZXhpdAorCWlmIFsgIiRmaWxlcyIgXTsgdGhlbgorCQlkaWUgIkRpcnR5IGluZGV4OiBjYW5ub3QgJG1lIChkaXJ0eTogJGZpbGVzKSIKKwlmaQorCTs7Citlc2FjCisKK3Jldj0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRAIikgJiYKK2NvbW1pdD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRyZXZeMCIpIHx8CisJZGllICJOb3QgYSBzaW5nbGUgY29tbWl0ICRAIgorcHJldj0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRjb21taXReMSIgMj4vZGV2L251bGwpIHx8CisJZGllICJDYW5ub3QgcnVuICRtZSBhIHJvb3QgY29tbWl0IgorZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJGNvbW1pdF4yIiA+L2Rldi9udWxsIDI+JjEgJiYKKwlkaWUgIkNhbm5vdCBydW4gJG1lIGEgbXVsdGktcGFyZW50IGNvbW1pdC4iCisKK2VuY29kaW5nPSQoZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIHx8IGVjaG8gVVRGLTgpCisKKyMgImNvbW1pdCIgaXMgYW4gZXhpc3RpbmcgY29tbWl0LiAgV2Ugd291bGQgd2FudCB0byBhcHBseQorIyB0aGUgZGlmZmVyZW5jZSBpdCBpbnRyb2R1Y2VzIHNpbmNlIGl0cyBmaXJzdCBwYXJlbnQgInByZXYiCisjIG9uIHRvcCBvZiB0aGUgY3VycmVudCBIRUFEIGlmIHdlIGFyZSBjaGVycnktcGljay4gIE9yIHRoZQorIyByZXZlcnNlIG9mIGl0IGlmIHdlIGFyZSByZXZlcnQuCisKK2Nhc2UgIiRtZSIgaW4KK3JldmVydCkKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1vbmVsaW5lIC0tZW5jb2Rpbmc9IiRlbmNvZGluZyIgJGNvbW1pdCB8CisJc2VkIC1lICcKKwkJcy9eW14gXSogL1JldmVydCAiLworCQlzLyQvIi8KKwknCisJZWNobworCWVjaG8gIlRoaXMgcmV2ZXJ0cyBjb21taXQgJGNvbW1pdC4iCisJdGVzdCAiJHJldiIgPSAiJGNvbW1pdCIgfHwKKwllY2hvICIob3JpZ2luYWwgJ2dpdCByZXZlcnQnIGFyZ3VtZW50czogJEApIgorCWJhc2U9JGNvbW1pdCBuZXh0PSRwcmV2CisJOzsKKworY2hlcnJ5LXBpY2spCisJcGlja19hdXRob3Jfc2NyaXB0PScKKwkvXmF1dGhvciAveworCQlzLydcJycvJ1wnJ1xcJ1wnXCcnL2cKKwkJaAorCQlzL15hdXRob3IgXChbXjxdKlwpIDxbXj5dKj4gLiokL1wxLworCQlzLydcJycvJ1wnJ1wnXCdcJycvZworCQlzLy4qL0dJVF9BVVRIT1JfTkFNRT0nXCcnJidcJycvcAorCisJCWcKKwkJcy9eYXV0aG9yIFtePF0qIDxcKFtePl0qXCk+IC4qJC9cMS8KKwkJcy8nXCcnLydcJydcJ1wnXCcnL2cKKwkJcy8uKi9HSVRfQVVUSE9SX0VNQUlMPSdcJycmJ1wnJy9wCisKKwkJZworCQlzL15hdXRob3IgW148XSogPFtePl0qPiBcKC4qXCkkL1wxLworCQlzLydcJycvJ1wnJ1wnXCdcJycvZworCQlzLy4qL0dJVF9BVVRIT1JfREFURT0nXCcnJidcJycvcAorCisJCXEKKwl9JworCisJbG9nbXNnPWBnaXQgc2hvdyAtcyAtLXByZXR0eT1yYXcgLS1lbmNvZGluZz0iJGVuY29kaW5nIiAiJGNvbW1pdCJgCisJc2V0X2F1dGhvcl9lbnY9YGVjaG8gIiRsb2dtc2ciIHwKKwlMQU5HPUMgTENfQUxMPUMgc2VkIC1uZSAiJHBpY2tfYXV0aG9yX3NjcmlwdCJgCisJZXZhbCAiJHNldF9hdXRob3JfZW52IgorCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUKKwlleHBvcnQgR0lUX0FVVEhPUl9FTUFJTAorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUKKworCWVjaG8gIiRsb2dtc2ciIHwKKwlzZWQgLWUgJzEsL14kL2QnIC1lICdzL14gICAgLy8nCisJY2FzZSAiJHJlcGxheSIgaW4KKwknJykKKwkJZWNobyAiKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJGNvbW1pdCkiCisJCXRlc3QgIiRyZXYiID0gIiRjb21taXQiIHx8CisJCWVjaG8gIihvcmlnaW5hbCAnZ2l0IGNoZXJyeS1waWNrJyBhcmd1bWVudHM6ICRAKSIKKwkJOzsKKwllc2FjCisJYmFzZT0kcHJldiBuZXh0PSRjb21taXQKKwk7OworCitlc2FjID4ubXNnCisKK2V2YWwgR0lUSEVBRF8kaGVhZD1IRUFECitldmFsIEdJVEhFQURfJG5leHQ9J2BnaXQgc2hvdyAtcyBcCisJLS1wcmV0dHk9b25lbGluZSAtLWVuY29kaW5nPSIkZW5jb2RpbmciICIkY29tbWl0IiB8CisJc2VkIC1lICJzL15bXiBdKiAvLyJgJworZXhwb3J0IEdJVEhFQURfJGhlYWQgR0lUSEVBRF8kbmV4dAorCisjIFRoaXMgdGhyZWUgd2F5IG1lcmdlIGlzIGFuIGludGVyZXN0aW5nIG9uZS4gIFdlIGFyZSBhdAorIyAkaGVhZCwgYW5kIHdvdWxkIHdhbnQgdG8gYXBwbHkgdGhlIGNoYW5nZSBiZXR3ZWVuICRjb21taXQKKyMgYW5kICRwcmV2IG9uIHRvcCBvZiB1cyAod2hlbiByZXZlcnRpbmcpLCBvciB0aGUgY2hhbmdlIGJldHdlZW4KKyMgJHByZXYgYW5kICRjb21taXQgb24gdG9wIG9mIHVzICh3aGVuIGNoZXJyeS1waWNraW5nIG9yIHJlcGxheWluZykuCisKK2V2YWwgImdpdCBtZXJnZS1yZWN1cnNpdmUgJHhvcHQgJGJhc2UgLS0gJGhlYWQgJG5leHQiICYmCityZXN1bHQ9JChnaXQtd3JpdGUtdHJlZSAyPi9kZXYvbnVsbCkgfHwgeworCW12IC1mIC5tc2cgIiRHSVRfRElSL01FUkdFX01TRyIKKwl7CisJICAgIGVjaG8gJworQ29uZmxpY3RzOgorJworCQlnaXQgbHMtZmlsZXMgLS11bm1lcmdlZCB8CisJCXNlZCAtZSAncy9eW14JXSoJLwkvJyB8CisJCXVuaXEKKwl9ID4+IiRHSVRfRElSL01FUkdFX01TRyIKKwllY2hvID4mMiAiQXV0b21hdGljICRtZSBmYWlsZWQuICBBZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywiCisJZWNobyA+JjIgIm1hcmsgdGhlIGNvcnJlY3RlZCBwYXRocyB3aXRoICdnaXQtYWRkIDxwYXRocz4nIgorCWVjaG8gPiYyICJhbmQgY29tbWl0IHRoZSByZXN1bHQuIgorCWNhc2UgIiRtZSIgaW4KKwljaGVycnktcGljaykKKwkJZWNobyA+JjIgIllvdSBtYXkgY2hvb3NlIHRvIHVzZSB0aGUgZm9sbG93aW5nIHdoZW4gbWFraW5nIgorCQllY2hvID4mMiAidGhlIGNvbW1pdDoiCisJCWVjaG8gPiYyICIkc2V0X2F1dGhvcl9lbnYiCisJZXNhYworCWV4aXQgMQorfQorCisjIElmIHdlIGFyZSBjaGVycnktcGljaywgYW5kIGlmIHRoZSBtZXJnZSBkaWQgbm90IHJlc3VsdCBpbgorIyBoYW5kLWVkaXRpbmcsIHdlIHdpbGwgaGl0IHRoaXMgY29tbWl0IGFuZCBpbmhlcml0IHRoZSBvcmlnaW5hbAorIyBhdXRob3IgZGF0ZSBhbmQgbmFtZS4KKyMgSWYgd2UgYXJlIHJldmVydCwgb3IgaWYgb3VyIGNoZXJyeS1waWNrIHJlc3VsdHMgaW4gYSBoYW5kIG1lcmdlLAorIyB3ZSBoYWQgYmV0dGVyIHNheSB0aGF0IHRoZSBjdXJyZW50IHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIHRoYXQuCisKK2Nhc2UgIiRub19jb21taXQiIGluCisnJykKKwlnaXQtY29tbWl0IC1uIC1GIC5tc2cgJGVkaXQKKwlybSAtZiAubXNnCisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXN2bmltcG9ydC5wZXJsIGIvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjA5ZmY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXN2bmltcG9ydC5wZXJsCkBAIC0wLDAgKzEsOTc2IEBACisjIS91c3IvYmluL3BlcmwKKworIyBUaGlzIHRvb2wgaXMgY29weXJpZ2h0IChjKSAyMDA1LCBNYXR0aGlhcyBVcmxpY2hzLgorIyBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR251IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisjCisjIFRoZSBiYXNpYyBpZGVhIGlzIHRvIHB1bGwgYW5kIGFuYWx5emUgU1ZOIGNoYW5nZXMuCisjCisjIENoZWNraW5nIG91dCB0aGUgZmlsZXMgaXMgZG9uZSBieSBhIHNpbmdsZSBsb25nLXJ1bm5pbmcgU1ZOIGNvbm5lY3Rpb24uCisjCisjIFRoZSBoZWFkIHJldmlzaW9uIGlzIG9uIGJyYW5jaCAib3JpZ2luIiBieSBkZWZhdWx0LgorIyBZb3UgY2FuIGNoYW5nZSB0aGF0IHdpdGggdGhlICctbycgb3B0aW9uLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdldG9wdDo6U3RkOwordXNlIEZpbGU6OkNvcHk7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBmaWxlKTsKK3VzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7Cit1c2UgVGltZTo6TG9jYWw7Cit1c2UgSU86OlBpcGU7Cit1c2UgUE9TSVggcXcoc3RyZnRpbWUgZHVwMik7Cit1c2UgSVBDOjpPcGVuMjsKK3VzZSBTVk46OkNvcmU7Cit1c2UgU1ZOOjpSYTsKKworZGllICJOZWVkIFNWTjpDb3JlIDEuMi4xIG9yIGJldHRlciIgaWYgJFNWTjo6Q29yZTo6VkVSU0lPTiBsdCAiMS4yLjEiOworCiskU0lHeydQSVBFJ309IklHTk9SRSI7CiskRU5WeydUWid9PSJVVEMiOworCitvdXIoJG9wdF9oLCRvcHRfbywkb3B0X3YsJG9wdF91LCRvcHRfQywkb3B0X2ksJG9wdF9tLCRvcHRfTSwkb3B0X3QsJG9wdF9ULAorICAgICRvcHRfYiwkb3B0X3IsJG9wdF9JLCRvcHRfQSwkb3B0X3MsJG9wdF9sLCRvcHRfZCwkb3B0X0QsJG9wdF9TLCRvcHRfRiwKKyAgICAkb3B0X1AsJG9wdF9SKTsKKworc3ViIHVzYWdlKCkgeworCXByaW50IFNUREVSUiA8PEVORDsKK1VzYWdlOiAke1xiYXNlbmFtZSAkMH0gICAgICMgZmV0Y2gvdXBkYXRlIEdJVCBmcm9tIFNWTgorICAgICAgIFstbyBicmFuY2gtZm9yLUhFQURdIFstaF0gWy12XSBbLWwgbWF4X3Jldl0gWy1SIHJlcGFja19lYWNoX3JldnNdCisgICAgICAgWy1DIEdJVF9yZXBvc2l0b3J5XSBbLXQgdGFnbmFtZV0gWy1UIHRydW5rbmFtZV0gWy1iIGJyYW5jaG5hbWVdCisgICAgICAgWy1kfC1EXSBbLWldIFstdV0gWy1yXSBbLUkgaWdub3JlZmlsZW5hbWVdIFstcyBzdGFydF9jaGddCisgICAgICAgWy1tXSBbLU0gcmVnZXhdIFstQSBhdXRob3JfZmlsZV0gWy1TXSBbLUZdIFstUCBwcm9qZWN0X25hbWVdIFtTVk5fVVJMXQorRU5ECisJZXhpdCgxKTsKK30KKworZ2V0b3B0cygiQTpiOkM6ZERGaGlJOmw6bU06bzpyczp0OlQ6U1A6Ujp1diIpIG9yIHVzYWdlKCk7Cit1c2FnZSBpZiAkb3B0X2g7CisKK215ICR0YWdfbmFtZSA9ICRvcHRfdCB8fCAidGFncyI7CitteSAkdHJ1bmtfbmFtZSA9IGRlZmluZWQgJG9wdF9UID8gJG9wdF9UIDogInRydW5rIjsKK215ICRicmFuY2hfbmFtZSA9ICRvcHRfYiB8fCAiYnJhbmNoZXMiOworbXkgJHByb2plY3RfbmFtZSA9ICRvcHRfUCB8fCAiIjsKKyRwcm9qZWN0X25hbWUgPSAiLyIgLiAkcHJvamVjdF9uYW1lIGlmICgkcHJvamVjdF9uYW1lKTsKK215ICRyZXBhY2tfYWZ0ZXIgPSAkb3B0X1IgfHwgMTAwMDsKK215ICRyb290X3Bvb2wgPSBTVk46OlBvb2wtPm5ld19kZWZhdWx0OworCitAQVJHViA9PSAxIG9yIEBBUkdWID09IDIgb3IgdXNhZ2UoKTsKKworJG9wdF9vIHx8PSAib3JpZ2luIjsKKyRvcHRfcyB8fD0gMTsKK215ICRnaXRfdHJlZSA9ICRvcHRfQzsKKyRnaXRfdHJlZSB8fD0gIi4iOworCitteSAkc3ZuX3VybCA9ICRBUkdWWzBdOworbXkgJHN2bl9kaXIgPSAkQVJHVlsxXTsKKworb3VyIEBtZXJnZXJ4ID0gKCk7CitpZiAoJG9wdF9tKSB7CisJbXkgJGJyYW5jaF9lc2MgPSBxdW90ZW1ldGEgKCRicmFuY2hfbmFtZSk7CisJbXkgJHRydW5rX2VzYyAgPSBxdW90ZW1ldGEgKCR0cnVua19uYW1lKTsKKwlAbWVyZ2VyeCA9CisJKAorCQlxciFcYig/Om1lcmcoPzplZD98aW5nKSlcYi4qP1xiKCg/Oig/PD0kYnJhbmNoX2VzYy8pW1x3XC5cLV0rKXwoPzokdHJ1bmtfZXNjKSlcYiFpLAorCQlxciFcYig/OmZyb218b2YpXFcrKCg/Oig/PD0kYnJhbmNoX2VzYy8pW1x3XC5cLV0rKXwoPzokdHJ1bmtfZXNjKSlcYiFpLAorCQlxciFcYig/OmZyb218b2YpXFcrKD86dGhlICk/KFtcd1wuXC1dKylbLVxzXWJyYW5jaFxiIWkKKwkpOworfQoraWYgKCRvcHRfTSkgeworCXVuc2hpZnQgKEBtZXJnZXJ4LCBxci8kb3B0X00vKTsKK30KKworIyBBYnNvbHV0aXplIGZpbGVuYW1lIG5vdywgc2luY2Ugd2Ugd2lsbCBoYXZlIGNoZGlyJ2VkIGJ5IHRoZSB0aW1lIHdlCisjIGdldCBhcm91bmQgdG8gb3BlbmluZyBpdC4KKyRvcHRfQSA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJG9wdF9BKSBpZiAkb3B0X0E7CisKK291ciAldXNlcnMgPSAoKTsKK291ciAkdXNlcnNfZmlsZSA9IHVuZGVmOworc3ViIHJlYWRfdXNlcnMoJCkgeworCSR1c2Vyc19maWxlID0gRmlsZTo6U3BlYy0+cmVsMmFicyhAXyk7CisJZGllICJDYW5ub3Qgb3BlbiAkdXNlcnNfZmlsZVxuIiB1bmxlc3MgLWYgJHVzZXJzX2ZpbGU7CisJb3BlbihteSAkYXV0aG9ycywkdXNlcnNfZmlsZSk7CisJd2hpbGUoPCRhdXRob3JzPikgeworCQljaG9tcDsKKwkJbmV4dCB1bmxlc3MgL14oXFMrPylccyo9XHMqKC4rPylccyo8KC4rKT5ccyokLzsKKwkJKG15ICR1c2VyLG15ICRuYW1lLG15ICRlbWFpbCkgPSAoJDEsJDIsJDMpOworCQkkdXNlcnN7JHVzZXJ9ID0gWyRuYW1lLCRlbWFpbF07CisJfQorCWNsb3NlKCRhdXRob3JzKTsKK30KKworc2VsZWN0KFNUREVSUik7ICR8PTE7IHNlbGVjdChTVERPVVQpOworCisKK3BhY2thZ2UgU1ZOY29ubjsKKyMgQmFzaWMgU1ZOIGNvbm5lY3Rpb24uCisjIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBjb25uZWN0aW5nIGFuZCBkb3dubG9hZGluZywgc28gLi4uCisKK3VzZSBGaWxlOjpTcGVjOwordXNlIEZpbGU6OlRlbXAgcXcodGVtcGZpbGUpOwordXNlIFBPU0lYIHF3KHN0cmZ0aW1lIGR1cDIpOwordXNlIEZjbnRsIHF3KFNFRUtfU0VUKTsKKworc3ViIG5ldyB7CisJbXkoJHdoYXQsJHJlcG8pID0gQF87CisJJHdoYXQ9cmVmKCR3aGF0KSBpZiByZWYoJHdoYXQpOworCisJbXkgJHNlbGYgPSB7fTsKKwkkc2VsZi0+eydidWZmZXInfSA9ICIiOworCWJsZXNzKCRzZWxmLCR3aGF0KTsKKworCSRyZXBvID1+IHMjLyskIyM7CisJJHNlbGYtPnsnZnVsbHJlcCd9ID0gJHJlcG87CisJJHNlbGYtPmNvbm4oKTsKKworCXJldHVybiAkc2VsZjsKK30KKworc3ViIGNvbm4geworCW15ICRzZWxmID0gc2hpZnQ7CisJbXkgJHJlcG8gPSAkc2VsZi0+eydmdWxscmVwJ307CisJbXkgJGF1dGggPSBTVk46OkNvcmU6OmF1dGhfb3BlbiAoW1NWTjo6Q2xpZW50OjpnZXRfc2ltcGxlX3Byb3ZpZGVyLAorCQkJICBTVk46OkNsaWVudDo6Z2V0X3NzbF9zZXJ2ZXJfdHJ1c3RfZmlsZV9wcm92aWRlciwKKwkJCSAgU1ZOOjpDbGllbnQ6OmdldF91c2VybmFtZV9wcm92aWRlcl0pOworCW15ICRzID0gU1ZOOjpSYS0+bmV3KHVybCA9PiAkcmVwbywgYXV0aCA9PiAkYXV0aCwgcG9vbCA9PiAkcm9vdF9wb29sKTsKKwlkaWUgIlNWTiBjb25uZWN0aW9uIHRvICRyZXBvOiAkIVxuIiB1bmxlc3MgZGVmaW5lZCAkczsKKwkkc2VsZi0+eydzdm4nfSA9ICRzOworCSRzZWxmLT57J3JlcG8nfSA9ICRyZXBvOworCSRzZWxmLT57J21heHJldid9ID0gJHMtPmdldF9sYXRlc3RfcmV2bnVtKCk7Cit9CisKK3N1YiBmaWxlIHsKKwlteSgkc2VsZiwkcGF0aCwkcmV2KSA9IEBfOworCisJbXkgKCRmaCwgJG5hbWUpID0gdGVtcGZpbGUoJ2dpdHN2bi5YWFhYWFgnLAorCQkgICAgRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpLCBVTkxJTksgPT4gMSk7CisKKwlwcmludCAiLi4uICRyZXYgJHBhdGggLi4uXG4iIGlmICRvcHRfdjsKKwlteSAodW5kZWYsICRwcm9wZXJ0aWVzKTsKKwkkcGF0aCA9fiBzI14vKiMjOworCW15ICRzdWJwb29sID0gU1ZOOjpQb29sOjpuZXdfZGVmYXVsdF9zdWI7CisJZXZhbCB7ICh1bmRlZiwgJHByb3BlcnRpZXMpCisJCSAgID0gJHNlbGYtPnsnc3ZuJ30tPmdldF9maWxlKCRwYXRoLCRyZXYsJGZoKTsgfTsKKwlpZigkQCkgeworCQlyZXR1cm4gdW5kZWYgaWYgJEAgPX4gL0F0dGVtcHRlZCB0byBnZXQgY2hlY2tzdW0vOworCQlkaWUgJEA7CisJfQorCW15ICRtb2RlOworCWlmIChleGlzdHMgJHByb3BlcnRpZXMtPnsnc3ZuOmV4ZWN1dGFibGUnfSkgeworCQkkbW9kZSA9ICcxMDA3NTUnOworCX0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllcy0+eydzdm46c3BlY2lhbCd9KSB7CisJCW15ICgkc3BlY2lhbF9jb250ZW50LCAkZmlsZXNpemUpOworCQkkZmlsZXNpemUgPSB0ZWxsICRmaDsKKwkJc2VlayAkZmgsIDAsIFNFRUtfU0VUOworCQlyZWFkICRmaCwgJHNwZWNpYWxfY29udGVudCwgJGZpbGVzaXplOworCQlpZiAoJHNwZWNpYWxfY29udGVudCA9fiBzL15saW5rIC8vKSB7CisJCQkkbW9kZSA9ICcxMjAwMDAnOworCQkJc2VlayAkZmgsIDAsIFNFRUtfU0VUOworCQkJdHJ1bmNhdGUgJGZoLCAwOworCQkJcHJpbnQgJGZoICRzcGVjaWFsX2NvbnRlbnQ7CisJCX0gZWxzZSB7CisJCQlkaWUgInVuZXhwZWN0ZWQgc3ZuOnNwZWNpYWwgZmlsZSBlbmNvdW50ZXJlZCI7CisJCX0KKwl9IGVsc2UgeworCQkkbW9kZSA9ICcxMDA2NDQnOworCX0KKwljbG9zZSAoJGZoKTsKKworCXJldHVybiAoJG5hbWUsICRtb2RlKTsKK30KKworc3ViIGlnbm9yZSB7CisJbXkoJHNlbGYsJHBhdGgsJHJldikgPSBAXzsKKworCXByaW50ICIuLi4gJHJldiAkcGF0aCAuLi5cbiIgaWYgJG9wdF92OworCSRwYXRoID1+IHMjXi8qIyM7CisJbXkgJHN1YnBvb2wgPSBTVk46OlBvb2w6Om5ld19kZWZhdWx0X3N1YjsKKwlteSAodW5kZWYsdW5kZWYsJHByb3BlcnRpZXMpCisJICAgID0gJHNlbGYtPnsnc3ZuJ30tPmdldF9kaXIoJHBhdGgsJHJldix1bmRlZik7CisJaWYgKGV4aXN0cyAkcHJvcGVydGllcy0+eydzdm46aWdub3JlJ30pIHsKKwkJbXkgKCRmaCwgJG5hbWUpID0gdGVtcGZpbGUoJ2dpdHN2bi5YWFhYWFgnLAorCQkJCQkgICBESVIgPT4gRmlsZTo6U3BlYy0+dG1wZGlyKCksCisJCQkJCSAgIFVOTElOSyA9PiAxKTsKKwkJcHJpbnQgJGZoICRwcm9wZXJ0aWVzLT57J3N2bjppZ25vcmUnfTsKKwkJY2xvc2UoJGZoKTsKKwkJcmV0dXJuICRuYW1lOworCX0gZWxzZSB7CisJCXJldHVybiB1bmRlZjsKKwl9Cit9CisKK3N1YiBkaXJfbGlzdCB7CisJbXkoJHNlbGYsJHBhdGgsJHJldikgPSBAXzsKKwkkcGF0aCA9fiBzI14vKiMjOworCW15ICRzdWJwb29sID0gU1ZOOjpQb29sOjpuZXdfZGVmYXVsdF9zdWI7CisJbXkgKCRkaXJlbnRzLHVuZGVmLCRwcm9wZXJ0aWVzKQorCSAgICA9ICRzZWxmLT57J3N2bid9LT5nZXRfZGlyKCRwYXRoLCRyZXYsdW5kZWYpOworCXJldHVybiAkZGlyZW50czsKK30KKworcGFja2FnZSBtYWluOwordXNlIFVSSTsKKworb3VyICRzdm4gPSAkc3ZuX3VybDsKKyRzdm4gLj0gIi8kc3ZuX2RpciIgaWYgZGVmaW5lZCAkc3ZuX2RpcjsKK215ICRzdm4yID0gU1ZOY29ubi0+bmV3KCRzdm4pOworJHN2biA9IFNWTmNvbm4tPm5ldygkc3ZuKTsKKworbXkgJGx3cF91YTsKK2lmKCRvcHRfZCBvciAkb3B0X0QpIHsKKwkkc3ZuX3VybCA9IFVSSS0+bmV3KCRzdm5fdXJsKS0+Y2Fub25pY2FsOworCWlmKCRvcHRfRCkgeworCQkkc3ZuX2RpciA9fiBzIy8qJCMvIzsKKwl9IGVsc2UgeworCQkkc3ZuX2RpciA9ICIiOworCX0KKwlpZiAoJHN2bl91cmwtPnNjaGVtZSBlcSAiaHR0cCIpIHsKKwkJdXNlIExXUDo6VXNlckFnZW50OworCQkkbHdwX3VhID0gTFdQOjpVc2VyQWdlbnQtPm5ldyhrZWVwX2FsaXZlID0+IDEsIHJlcXVlc3RzX3JlZGlyZWN0YWJsZSA9PiBbXSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSICJXYXJuaW5nOiBub3QgSFRUUDsgdHVybmluZyBvZmYgZGlyZWN0IGZpbGUgYWNjZXNzXG4iOworCQkkb3B0X2Q9MDsKKwl9Cit9CisKK3N1YiBwZGF0ZSgkKSB7CisJbXkoJGQpID0gQF87CisJJGQgPX4gbSMoXGRcZFxkXGQpLShcZFxkKS0oXGRcZClUKFxkXGQpOihcZFxkKTooXGRcZCkjCisJCW9yIGRpZSAiVW5wYXJzZWFibGUgZGF0ZTogJGRcbiI7CisJbXkgJHk9JDE7ICR5LT0xOTAwIGlmICR5PjE5MDA7CisJcmV0dXJuIHRpbWVnbSgkNnx8MCwkNSwkNCwkMywkMi0xLCR5KTsKK30KKworc3ViIGdldHdkKCkgeworCW15ICRwd2QgPSBgcHdkYDsKKwljaG9tcCAkcHdkOworCXJldHVybiAkcHdkOworfQorCisKK3N1YiBnZXRfaGVhZHJlZigkJCkgeworICAgIG15ICRuYW1lICAgID0gc2hpZnQ7CisgICAgbXkgJGdpdF9kaXIgPSBzaGlmdDsKKyAgICBteSAkc2hhOworCisgICAgaWYgKG9wZW4oQywiJGdpdF9kaXIvcmVmcy9oZWFkcy8kbmFtZSIpKSB7CisJY2hvbXAoJHNoYSA9IDxDPik7CisJY2xvc2UoQyk7CisJbGVuZ3RoKCRzaGEpID09IDQwCisJICAgIG9yIGRpZSAiQ2Fubm90IGdldCBoZWFkIGlkIGZvciAkbmFtZSAoJHNoYSk6ICQhXG4iOworICAgIH0KKyAgICByZXR1cm4gJHNoYTsKK30KKworCistZCAkZ2l0X3RyZWUKKwlvciBta2RpcigkZ2l0X3RyZWUsMDc3NykKKwlvciBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgJGdpdF90cmVlOiAkISI7CitjaGRpcigkZ2l0X3RyZWUpOworCitteSAkb3JpZ19icmFuY2ggPSAiIjsKK215ICRmb3J3YXJkX21hc3RlciA9IDA7CitteSAlYnJhbmNoZXM7CisKK215ICRnaXRfZGlyID0gJEVOVnsiR0lUX0RJUiJ9IHx8ICIuZ2l0IjsKKyRnaXRfZGlyID0gZ2V0d2QoKS4iLyIuJGdpdF9kaXIgdW5sZXNzICRnaXRfZGlyID1+IG0jXi8jOworJEVOVnsiR0lUX0RJUiJ9ID0gJGdpdF9kaXI7CitteSAkb3JpZ19naXRfaW5kZXg7Ciskb3JpZ19naXRfaW5kZXggPSAkRU5We0dJVF9JTkRFWF9GSUxFfSBpZiBleGlzdHMgJEVOVntHSVRfSU5ERVhfRklMRX07CitteSAoJGdpdF9paCwgJGdpdF9pbmRleCkgPSB0ZW1wZmlsZSgnZ2l0WFhYWFhYJywgU1VGRklYID0+ICcuaWR4JywKKwkJCQkgICAgRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpKTsKK2Nsb3NlICgkZ2l0X2loKTsKKyRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJGdpdF9pbmRleDsKK215ICRtYXhudW0gPSAwOworbXkgJGxhc3RfcmV2ID0gIiI7CitteSAkbGFzdF9icmFuY2g7CitteSAkY3VycmVudF9yZXYgPSAkb3B0X3MgfHwgMTsKK3VubGVzcygtZCAkZ2l0X2RpcikgeworCXN5c3RlbSgiZ2l0IGluaXQiKTsKKwlkaWUgIkNhbm5vdCBpbml0IHRoZSBHSVQgZGIgYXQgJGdpdF90cmVlOiAkP1xuIiBpZiAkPzsKKwlzeXN0ZW0oImdpdCByZWFkLXRyZWUgLS1lbXB0eSIpOworCWRpZSAiQ2Fubm90IGluaXQgYW4gZW1wdHkgdHJlZTogJD9cbiIgaWYgJD87CisKKwkkbGFzdF9icmFuY2ggPSAkb3B0X287CisJJG9yaWdfYnJhbmNoID0gIiI7Cit9IGVsc2UgeworCS1mICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRvcHRfbyIKKwkJb3IgZGllICJCcmFuY2ggJyRvcHRfbycgZG9lcyBub3QgZXhpc3QuXG4iLgorCQkgICAgICAgIkVpdGhlciB1c2UgdGhlIGNvcnJlY3QgJy1vIGJyYW5jaCcgb3B0aW9uLFxuIi4KKwkJICAgICAgICJvciBpbXBvcnQgdG8gYSBuZXcgcmVwb3NpdG9yeS5cbiI7CisKKwktZiAiJGdpdF9kaXIvc3ZuMmdpdCIKKwkJb3IgZGllICInJGdpdF9kaXIvc3ZuMmdpdCcgZG9lcyBub3QgZXhpc3QuXG4iLgorCQkgICAgICAgIllvdSBuZWVkIHRoYXQgZmlsZSBmb3IgaW5jcmVtZW50YWwgaW1wb3J0cy5cbiI7CisJb3BlbihGLCAiZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHwiKSBvcgorCQlkaWUgIkNhbm5vdCBydW4gZ2l0LXN5bWJvbGljLXJlZjogJCFcbiI7CisJY2hvbXAgKCRsYXN0X2JyYW5jaCA9IDxGPik7CisJJGxhc3RfYnJhbmNoID0gYmFzZW5hbWUoJGxhc3RfYnJhbmNoKTsKKwljbG9zZShGKTsKKwl1bmxlc3MoJGxhc3RfYnJhbmNoKSB7CisJCXdhcm4gIkNhbm5vdCByZWFkIHRoZSBsYXN0IGJyYW5jaCBuYW1lOiAkISAtLSBhc3N1bWluZyAnbWFzdGVyJ1xuIjsKKwkJJGxhc3RfYnJhbmNoID0gIm1hc3RlciI7CisJfQorCSRvcmlnX2JyYW5jaCA9ICRsYXN0X2JyYW5jaDsKKwkkbGFzdF9yZXYgPSBnZXRfaGVhZHJlZigkb3JpZ19icmFuY2gsICRnaXRfZGlyKTsKKwlpZiAoLWYgIiRnaXRfZGlyL1NWTjJHSVRfSEVBRCIpIHsKKwkJZGllIDw8RU9NOworU1ZOMkdJVF9IRUFEIGV4aXN0cy4KK01ha2Ugc3VyZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGNvcnJlc3BvbmRzIHRvIEhFQUQgYW5kIHJlbW92ZSBTVk4yR0lUX0hFQUQuCitZb3UgbWF5IG5lZWQgdG8gcnVuCisKKyAgICBnaXQtcmVhZC10cmVlIC1tIC11IFNWTjJHSVRfSEVBRCBIRUFECitFT00KKwl9CisJc3lzdGVtKCdjcCcsICIkZ2l0X2Rpci9IRUFEIiwgIiRnaXRfZGlyL1NWTjJHSVRfSEVBRCIpOworCisJJGZvcndhcmRfbWFzdGVyID0KKwkgICAgJG9wdF9vIG5lICdtYXN0ZXInICYmIC1mICIkZ2l0X2Rpci9yZWZzL2hlYWRzL21hc3RlciIgJiYKKwkgICAgc3lzdGVtKCdjbXAnLCAnLXMnLCAiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiLAorCQkJCSIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRvcHRfbyIpID09IDA7CisKKwkjIHBvcHVsYXRlIGluZGV4CisJc3lzdGVtKCdnaXQnLCAncmVhZC10cmVlJywgJGxhc3RfcmV2KTsKKwlkaWUgInJlYWQtdHJlZSBmYWlsZWQ6ICQ/XG4iIGlmICQ/OworCisJIyBHZXQgdGhlIGxhc3QgaW1wb3J0IHRpbWVzdGFtcHMKKwlvcGVuIG15ICRCLCI8IiwgIiRnaXRfZGlyL3N2bjJnaXQiOworCXdoaWxlKDwkQj4pIHsKKwkJY2hvbXA7CisJCW15KCRudW0sJGJyYW5jaCwkcmVmKSA9IHNwbGl0OworCQkkYnJhbmNoZXN7JGJyYW5jaH17JG51bX0gPSAkcmVmOworCQkkYnJhbmNoZXN7JGJyYW5jaH17IkxBU1QifSA9ICRyZWY7CisJCSRjdXJyZW50X3JldiA9ICRudW0rMSBpZiAkY3VycmVudF9yZXYgPD0gJG51bTsKKwl9CisJY2xvc2UoJEIpOworfQorLWQgJGdpdF9kaXIKKwlvciBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgZ2l0IHN1YmRpciAoJGdpdF9kaXIpLlxuIjsKKworbXkgJGRlZmF1bHRfYXV0aG9ycyA9ICIkZ2l0X2Rpci9zdm4tYXV0aG9ycyI7CitpZiAoJG9wdF9BKSB7CisJcmVhZF91c2Vycygkb3B0X0EpOworCWNvcHkoJG9wdF9BLCRkZWZhdWx0X2F1dGhvcnMpIG9yIGRpZSAiQ29weSBmYWlsZWQ6ICQhIjsKK30gZWxzZSB7CisJcmVhZF91c2VycygkZGVmYXVsdF9hdXRob3JzKSBpZiAtZiAkZGVmYXVsdF9hdXRob3JzOworfQorCitvcGVuIEJSQU5DSEVTLCI+PiIsICIkZ2l0X2Rpci9zdm4yZ2l0IjsKKworc3ViIG5vZGVfa2luZCgkJCkgeworCW15ICgkc3ZucGF0aCwgJHJldmlzaW9uKSA9IEBfOworCSRzdm5wYXRoID1+IHMjXi8qIyM7CisJbXkgJHN1YnBvb2wgPSBTVk46OlBvb2w6Om5ld19kZWZhdWx0X3N1YjsKKwlteSAka2luZCA9ICRzdm4tPnsnc3ZuJ30tPmNoZWNrX3BhdGgoJHN2bnBhdGgsJHJldmlzaW9uKTsKKwlyZXR1cm4gJGtpbmQ7Cit9CisKK3N1YiBnZXRfZmlsZSgkJCQpIHsKKwlteSgkc3ZucGF0aCwkcmV2LCRwYXRoKSA9IEBfOworCisJIyBub3cgZ2V0IGl0CisJbXkgKCRuYW1lLCRtb2RlKTsKKwlpZigkb3B0X2QpIHsKKwkJbXkoJHJlcSwkcmVzKTsKKworCQkjIC9zdm4vIXN2bi9iYy8yL2RqYW5nby90cnVuay9kamFuZ28tZG9jcy9idWlsZC5weQorCQlteSAkdXJsPSRzdm5fdXJsLT5jbG9uZSgpOworCQkkdXJsLT5wYXRoKCR1cmwtPnBhdGguIi8hc3ZuL2JjLyRyZXYvJHN2bl9kaXIkc3ZucGF0aCIpOworCQlwcmludCAiLi4uICRwYXRoLi4uXG4iIGlmICRvcHRfdjsKKwkJJHJlcSA9IEhUVFA6OlJlcXVlc3QtPm5ldyhHRVQgPT4gJHVybCk7CisJCSRyZXMgPSAkbHdwX3VhLT5yZXF1ZXN0KCRyZXEpOworCQlpZiAoJHJlcy0+aXNfc3VjY2VzcykgeworCQkJbXkgJGZoOworCQkJKCRmaCwgJG5hbWUpID0gdGVtcGZpbGUoJ2dpdHN2bi5YWFhYWFgnLAorCQkJRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpLCBVTkxJTksgPT4gMSk7CisJCQlwcmludCAkZmggJHJlcy0+Y29udGVudDsKKwkJCWNsb3NlKCRmaCkgb3IgZGllICJDb3VsZCBub3Qgd3JpdGUgJG5hbWU6ICQhXG4iOworCQl9IGVsc2UgeworCQkJcmV0dXJuIHVuZGVmIGlmICRyZXMtPmNvZGUgPT0gMzAxOyAjIGRpcmVjdG9yeT8KKwkJCWRpZSAkcmVzLT5zdGF0dXNfbGluZS4iIGF0ICR1cmxcbiI7CisJCX0KKwkJJG1vZGUgPSAnMDY0NCc7ICMgY2FuJ3Qgb2J0YWluIG1vZGUgdmlhIGRpcmVjdCBodHRwIHJlcXVlc3Q/CisJfSBlbHNlIHsKKwkJKCRuYW1lLCRtb2RlKSA9ICRzdm4tPmZpbGUoIiRzdm5wYXRoIiwkcmV2KTsKKwkJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRuYW1lOworCX0KKworCW15ICRwaWQgPSBvcGVuKG15ICRGLCAnLXwnKTsKKwlkaWUgJCEgdW5sZXNzIGRlZmluZWQgJHBpZDsKKwlpZiAoISRwaWQpIHsKKwkgICAgZXhlYygiZ2l0IiwgImhhc2gtb2JqZWN0IiwgIi13IiwgJG5hbWUpCisJCW9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBvYmplY3Q6ICQhXG4iOworCX0KKwlteSAkc2hhID0gPCRGPjsKKwljaG9tcCAkc2hhOworCWNsb3NlICRGOworCXVubGluayAkbmFtZTsKKwlyZXR1cm4gWyRtb2RlLCAkc2hhLCAkcGF0aF07Cit9CisKK3N1YiBnZXRfaWdub3JlKCQkJCQkKSB7CisJbXkoJG5ldywkb2xkLCRyZXYsJHBhdGgsJHN2bnBhdGgpID0gQF87CisKKwlyZXR1cm4gdW5sZXNzICRvcHRfSTsKKwlteSAkbmFtZSA9ICRzdm4tPmlnbm9yZSgiJHN2bnBhdGgiLCRyZXYpOworCWlmICgkcGF0aCBlcSAnLycpIHsKKwkJJHBhdGggPSAkb3B0X0k7CisJfSBlbHNlIHsKKwkJJHBhdGggPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRwYXRoLCRvcHRfSSk7CisJfQorCWlmIChkZWZpbmVkICRuYW1lKSB7CisJCW15ICRwaWQgPSBvcGVuKG15ICRGLCAnLXwnKTsKKwkJZGllICQhIHVubGVzcyBkZWZpbmVkICRwaWQ7CisJCWlmICghJHBpZCkgeworCQkJZXhlYygiZ2l0IiwgImhhc2gtb2JqZWN0IiwgIi13IiwgJG5hbWUpCisJCQkgICAgb3IgZGllICJDYW5ub3QgY3JlYXRlIG9iamVjdDogJCFcbiI7CisJCX0KKwkJbXkgJHNoYSA9IDwkRj47CisJCWNob21wICRzaGE7CisJCWNsb3NlICRGOworCQl1bmxpbmsgJG5hbWU7CisJCXB1c2goQCRuZXcsWycwNjQ0Jywkc2hhLCRwYXRoXSk7CisJfSBlbHNpZiAoZGVmaW5lZCAkb2xkKSB7CisJCXB1c2goQCRvbGQsJHBhdGgpOworCX0KK30KKworc3ViIHByb2plY3RfcGF0aCgkJCkKK3sKKwlteSAoJHBhdGgsICRwcm9qZWN0KSA9IEBfOworCisJJHBhdGggPSAiLyIuJHBhdGggdW5sZXNzICgkcGF0aCA9fiBtI15cLyMpIDsKKwlyZXR1cm4gJDEgaWYgKCRwYXRoID1+IG0jXiRwcm9qZWN0XC8oLiopJCMpOworCisJJHBhdGggPX4gcyNcLiNcXFwuI2c7CisJJHBhdGggPX4gcyNcKyNcXFwrI2c7CisJcmV0dXJuICIvIiBpZiAoJHByb2plY3QgPX4gbSNeJHBhdGguKiQjKTsKKworCXJldHVybiB1bmRlZjsKK30KKworc3ViIHNwbGl0X3BhdGgoJCQpIHsKKwlteSgkcmV2LCRwYXRoKSA9IEBfOworCW15ICRicmFuY2g7CisKKwlpZigkcGF0aCA9fiBzI14vXFEkdGFnX25hbWVcRS8oW14vXSspLz8jIykgeworCQkkYnJhbmNoID0gIi8kMSI7CisJfSBlbHNpZigkcGF0aCA9fiBzI14vXFEkdHJ1bmtfbmFtZVxFLz8jIykgeworCQkkYnJhbmNoID0gIi8iOworCX0gZWxzaWYoJHBhdGggPX4gcyNeL1xRJGJyYW5jaF9uYW1lXEUvKFteL10rKS8/IyMpIHsKKwkJJGJyYW5jaCA9ICQxOworCX0gZWxzZSB7CisJCW15ICVub19lcnJvciA9ICgKKwkJCSIvIiA9PiAxLAorCQkJIi8kdGFnX25hbWUiID0+IDEsCisJCQkiLyRicmFuY2hfbmFtZSIgPT4gMQorCQkpOworCQlwcmludCBTVERFUlIgIiRyZXY6IFVucmVjb2duaXplZCBwYXRoOiAkcGF0aFxuIiB1bmxlc3MgKGRlZmluZWQgJG5vX2Vycm9yeyRwYXRofSk7CisJCXJldHVybiAoKQorCX0KKwlpZiAoJHBhdGggZXEgIiIpIHsKKwkJJHBhdGggPSAiLyI7CisJfSBlbHNpZiAoJHByb2plY3RfbmFtZSkgeworCQkkcGF0aCA9IHByb2plY3RfcGF0aCgkcGF0aCwgJHByb2plY3RfbmFtZSk7CisJfQorCXJldHVybiAoJGJyYW5jaCwkcGF0aCk7Cit9CisKK3N1YiBicmFuY2hfcmV2KCQkKSB7CisKKwlteSAoJHNyY2JyYW5jaCwkdXB0b3JldikgPSBAXzsKKworCW15ICRiYnJhbmNoZXMgPSAkYnJhbmNoZXN7JHNyY2JyYW5jaH07CisJbXkgQHJldnMgPSByZXZlcnNlIHNvcnQgeyAoJGEgZXEgJ0xBU1QnID8gMCA6ICRhKSA8PT4gKCRiIGVxICdMQVNUJyA/IDAgOiAkYikgfSBrZXlzICUkYmJyYW5jaGVzOworCW15ICR0aGVyZXY7CisJZm9yZWFjaCBteSAkYXJldihAcmV2cykgeworCQluZXh0IGlmICAoJGFyZXYgZXEgJ0xBU1QnKTsKKwkJaWYgKCRhcmV2IDw9ICR1cHRvcmV2KSB7CisJCQkkdGhlcmV2ID0gJGFyZXY7CisJCQlsYXN0OworCQl9CisJfQorCXJldHVybiAkdGhlcmV2OworfQorCitzdWIgZXhwYW5kX3N2bmRpcigkJCQpOworCitzdWIgZXhwYW5kX3N2bmRpcigkJCQpCit7CisJbXkgKCRzdm5wYXRoLCAkcmV2LCAkcGF0aCkgPSBAXzsKKwlteSBAbGlzdDsKKwlnZXRfaWdub3JlKFxAbGlzdCwgdW5kZWYsICRyZXYsICRwYXRoLCAkc3ZucGF0aCk7CisJbXkgJGRpcmVudHMgPSAkc3ZuLT5kaXJfbGlzdCgkc3ZucGF0aCwgJHJldik7CisJZm9yZWFjaCBteSAkcChrZXlzICUkZGlyZW50cykgeworCQlteSAka2luZCA9IG5vZGVfa2luZCgkc3ZucGF0aC4nLycuJHAsICRyZXYpOworCQlpZiAoJGtpbmQgZXEgJFNWTjo6Tm9kZTo6ZmlsZSkgeworCQkJbXkgJGYgPSBnZXRfZmlsZSgkc3ZucGF0aC4nLycuJHAsICRyZXYsICRwYXRoLicvJy4kcCk7CisJCQlwdXNoKEBsaXN0LCAkZikgaWYgJGY7CisJCX0gZWxzaWYgKCRraW5kIGVxICRTVk46Ok5vZGU6OmRpcikgeworCQkJcHVzaChAbGlzdCwKKwkJCSAgICAgZXhwYW5kX3N2bmRpcigkc3ZucGF0aC4nLycuJHAsICRyZXYsICRwYXRoLicvJy4kcCkpOworCQl9CisJfQorCXJldHVybiBAbGlzdDsKK30KKworc3ViIGNvcHlfcGF0aCgkJCQkJCQkJCkgeworCSMgU29tZWJvZHkgY29waWVkIGEgd2hvbGUgc3ViZGlyZWN0b3J5LgorCSMgV2UgbmVlZCB0byBmaW5kIHRoZSBpbmRleCBlbnRyaWVzIGZyb20gdGhlIG9sZCB2ZXJzaW9uIHdoaWNoIHRoZQorCSMgU1ZOIGxvZyBlbnRyeSBwb2ludHMgdG8sIGFuZCBhZGQgdGhlbSB0byB0aGUgbmV3IHBsYWNlLgorCisJbXkoJG5ld3JldiwkbmV3YnJhbmNoLCRwYXRoLCRvbGRwYXRoLCRyZXYsJG5vZGVfa2luZCwkbmV3LCRwYXJlbnRzKSA9IEBfOworCisJbXkoJHNyY2JyYW5jaCwkc3JjcGF0aCkgPSBzcGxpdF9wYXRoKCRyZXYsJG9sZHBhdGgpOworCXVubGVzcyhkZWZpbmVkICRzcmNicmFuY2ggJiYgZGVmaW5lZCAkc3JjcGF0aCkgeworCQlwcmludCAiUGF0aCBub3QgZm91bmQgd2hlbiBjb3B5aW5nIGZyb20gJG9sZHBhdGggQCAkcmV2LlxuIi4KKwkJCSJXaWxsIHRyeSB0byBjb3B5IGZyb20gb3JpZ2luYWwgU1ZOIGxvY2F0aW9uLi4uXG4iCisJCQlpZiAkb3B0X3Y7CisJCXB1c2ggKEAkbmV3LCBleHBhbmRfc3ZuZGlyKCRvbGRwYXRoLCAkcmV2LCAkcGF0aCkpOworCQlyZXR1cm47CisJfQorCW15ICR0aGVyZXYgPSBicmFuY2hfcmV2KCRzcmNicmFuY2gsICRyZXYpOworCW15ICRnaXRyZXYgPSAkYnJhbmNoZXN7JHNyY2JyYW5jaH17JHRoZXJldn07CisJdW5sZXNzKCRnaXRyZXYpIHsKKwkJcHJpbnQgU1RERVJSICIkbmV3cmV2OiRuZXdicmFuY2g6IGNvdWxkIG5vdCBmaW5kICRvbGRwYXRoIFxAICRyZXZcbiI7CisJCXJldHVybjsKKwl9CisJaWYgKCRzcmNicmFuY2ggbmUgJG5ld2JyYW5jaCkgeworCQlwdXNoKEAkcGFyZW50cywgJGJyYW5jaGVzeyRzcmNicmFuY2h9eydMQVNUJ30pOworCX0KKwlwcmludCAiJG5ld3JldjokbmV3YnJhbmNoOiRwYXRoOiBjb3B5aW5nIGZyb20gJHNyY2JyYW5jaDokc3JjcGF0aCBAICRyZXZcbiIgaWYgJG9wdF92OworCWlmICgkbm9kZV9raW5kIGVxICRTVk46Ok5vZGU6OmRpcikgeworCQkkc3JjcGF0aCA9fiBzIy8qJCMvIzsKKwl9CisKKwlteSAkcGlkID0gb3BlbiBteSAkZiwnLXwnOworCWRpZSAkISB1bmxlc3MgZGVmaW5lZCAkcGlkOworCWlmICghJHBpZCkgeworCQlleGVjKCJnaXQiLCJscy10cmVlIiwiLXIiLCIteiIsJGdpdHJldiwkc3JjcGF0aCkKKwkJCW9yIGRpZSAkITsKKwl9CisJbG9jYWwgJC8gPSAiXDAiOworCXdoaWxlKDwkZj4pIHsKKwkJY2hvbXA7CisJCW15KCRtLCRwKSA9IHNwbGl0KC9cdC8sJF8sMik7CisJCW15KCRtb2RlLCR0eXBlLCRzaGExKSA9IHNwbGl0KC8gLywkbSk7CisJCW5leHQgaWYgJHR5cGUgbmUgImJsb2IiOworCQlpZiAoJG5vZGVfa2luZCBlcSAkU1ZOOjpOb2RlOjpkaXIpIHsKKwkJCSRwID0gJHBhdGggLiBzdWJzdHIoJHAsbGVuZ3RoKCRzcmNwYXRoKS0xKTsKKwkJfSBlbHNlIHsKKwkJCSRwID0gJHBhdGg7CisJCX0KKwkJcHVzaChAJG5ldyxbJG1vZGUsJHNoYTEsJHBdKTsKKwl9CisJY2xvc2UoJGYpIG9yCisJCXByaW50IFNUREVSUiAiJG5ld3JldjokbmV3YnJhbmNoOiBjb3VsZCBub3QgbGlzdCBmaWxlcyBpbiAkb2xkcGF0aCBcQCAkcmV2XG4iOworfQorCitzdWIgY29tbWl0IHsKKwlteSgkYnJhbmNoLCAkY2hhbmdlZF9wYXRocywgJHJldmlzaW9uLCAkYXV0aG9yLCAkZGF0ZSwgJG1lc3NhZ2UpID0gQF87CisJbXkoJGNvbW1pdHRlcl9uYW1lLCRjb21taXR0ZXJfZW1haWwsJGRlc3QpOworCW15KCRhdXRob3JfbmFtZSwkYXV0aG9yX2VtYWlsKTsKKwlteShAb2xkLEBuZXcsQHBhcmVudHMpOworCisJaWYgKG5vdCBkZWZpbmVkICRhdXRob3Igb3IgJGF1dGhvciBlcSAiIikgeworCQkkY29tbWl0dGVyX25hbWUgPSAkY29tbWl0dGVyX2VtYWlsID0gInVua25vd24iOworCX0gZWxzaWYgKGRlZmluZWQgJHVzZXJzX2ZpbGUpIHsKKwkJZGllICJVc2VyICRhdXRob3IgaXMgbm90IGxpc3RlZCBpbiAkdXNlcnNfZmlsZVxuIgorCQkgICAgdW5sZXNzIGV4aXN0cyAkdXNlcnN7JGF1dGhvcn07CisJCSgkY29tbWl0dGVyX25hbWUsJGNvbW1pdHRlcl9lbWFpbCkgPSBAeyR1c2Vyc3skYXV0aG9yfX07CisJfSBlbHNpZiAoJGF1dGhvciA9fiAvXiguKj8pXHMrPCguKik+JC8pIHsKKwkJKCRjb21taXR0ZXJfbmFtZSwgJGNvbW1pdHRlcl9lbWFpbCkgPSAoJDEsICQyKTsKKwl9IGVsc2UgeworCQkkYXV0aG9yID1+IHMvXjwoLiopPiQvJDEvOworCQkkY29tbWl0dGVyX25hbWUgPSAkY29tbWl0dGVyX2VtYWlsID0gJGF1dGhvcjsKKwl9CisKKwlpZiAoJG9wdF9GICYmICRtZXNzYWdlID1+IC9Gcm9tOlxzKyguKj8pXHMrPCguKik+XHMqXG4vKSB7CisJCSgkYXV0aG9yX25hbWUsICRhdXRob3JfZW1haWwpID0gKCQxLCAkMik7CisJCXByaW50ICJBdXRob3IgZnJvbSBGcm9tOiAkMSA8JDI+XG4iIGlmICgkb3B0X3YpOzsKKwl9IGVsc2lmICgkb3B0X1MgJiYgJG1lc3NhZ2UgPX4gL1NpZ25lZC1vZmYtYnk6XHMrKC4qPylccys8KC4qKT5ccypcbi8pIHsKKwkJKCRhdXRob3JfbmFtZSwgJGF1dGhvcl9lbWFpbCkgPSAoJDEsICQyKTsKKwkJcHJpbnQgIkF1dGhvciBmcm9tIFNpZ25lZC1vZmYtYnk6ICQxIDwkMj5cbiIgaWYgKCRvcHRfdik7OworCX0gZWxzZSB7CisJCSRhdXRob3JfbmFtZSA9ICRjb21taXR0ZXJfbmFtZTsKKwkJJGF1dGhvcl9lbWFpbCA9ICRjb21taXR0ZXJfZW1haWw7CisJfQorCisJJGRhdGUgPSBwZGF0ZSgkZGF0ZSk7CisKKwlteSAkdGFnOworCW15ICRwYXJlbnQ7CisJaWYoJGJyYW5jaCBlcSAiLyIpIHsgIyB0cnVuaworCQkkcGFyZW50ID0gJG9wdF9vOworCX0gZWxzaWYoJGJyYW5jaCA9fiBtI14vKC4rKSMpIHsgIyB0YWcKKwkJJHRhZyA9IDE7CisJCSRwYXJlbnQgPSAkMTsKKwl9IGVsc2UgeyAjICJub3JtYWwiIGJyYW5jaAorCQkjIG5vdGhpbmcgdG8gZG8KKwkJJHBhcmVudCA9ICRicmFuY2g7CisJfQorCSRkZXN0ID0gJHBhcmVudDsKKworCW15ICRwcmV2ID0gJGNoYW5nZWRfcGF0aHMtPnsiLyJ9OworCWlmKCRwcmV2IGFuZCAkcHJldi0+WzBdIGVxICJBIikgeworCQlkZWxldGUgJGNoYW5nZWRfcGF0aHMtPnsiLyJ9OworCQlteSAkb2xkcGF0aCA9ICRwcmV2LT5bMV07CisJCW15ICRyZXY7CisJCWlmKGRlZmluZWQgJG9sZHBhdGgpIHsKKwkJCW15ICRwOworCQkJKCRwYXJlbnQsJHApID0gc3BsaXRfcGF0aCgkcmV2aXNpb24sJG9sZHBhdGgpOworCQkJaWYoZGVmaW5lZCAkcGFyZW50KSB7CisJCQkJaWYoJHBhcmVudCBlcSAiLyIpIHsKKwkJCQkJJHBhcmVudCA9ICRvcHRfbzsKKwkJCQl9IGVsc2UgeworCQkJCQkkcGFyZW50ID1+IHMjXi8jIzsgIyBpZiBpdCdzIGEgdGFnCisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJJHBhcmVudCA9IHVuZGVmOworCQl9CisJfQorCisJbXkgJHJldjsKKwlpZigkcmV2aXNpb24gPiAkb3B0X3MgYW5kIGRlZmluZWQgJHBhcmVudCkgeworCQlvcGVuKEgsJy18JywiZ2l0IiwicmV2LXBhcnNlIiwiLS12ZXJpZnkiLCRwYXJlbnQpOworCQkkcmV2ID0gPEg+OworCQljbG9zZShIKSBvciBkbyB7CisJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogY2Fubm90IGZpbmQgY29tbWl0ICckcGFyZW50JyFcbiI7CisJCQlyZXR1cm47CisJCX07CisJCWNob3AgJHJldjsKKwkJaWYobGVuZ3RoKCRyZXYpICE9IDQwKSB7CisJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogY2Fubm90IGZpbmQgY29tbWl0ICckcGFyZW50JyFcbiI7CisJCQlyZXR1cm47CisJCX0KKwkJJHJldiA9ICRicmFuY2hlc3soJHBhcmVudCBlcSAkb3B0X28pID8gIi8iIDogJHBhcmVudH17IkxBU1QifTsKKwkJaWYoJHJldmlzaW9uICE9ICRvcHRfcyBhbmQgbm90ICRyZXYpIHsKKwkJCXByaW50IFNUREVSUiAiJHJldmlzaW9uOiBkbyBub3Qga25vdyBhbmNlc3RvciBmb3IgJyRwYXJlbnQnIVxuIjsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCSRyZXYgPSB1bmRlZjsKKwl9CisKKyMJaWYoJHByZXYgYW5kICRwcmV2LT5bMF0gZXEgIkEiKSB7CisjCQlpZihub3QgJHRhZykgeworIwkJCXVubGVzcyhvcGVuKEgsIj4gJGdpdF9kaXIvcmVmcy9oZWFkcy8kYnJhbmNoIikpIHsKKyMJCQkJcHJpbnQgU1RERVJSICIkcmV2aXNpb246IENvdWxkIG5vdCBjcmVhdGUgYnJhbmNoICRicmFuY2g6ICQhXG4iOworIwkJCQkkc3RhdGU9MTE7CisjCQkJCW5leHQ7CisjCQkJfQorIwkJCXByaW50IEggIiRyZXZcbiIKKyMJCQkJb3IgZGllICJDb3VsZCBub3Qgd3JpdGUgYnJhbmNoICRicmFuY2g6ICQhIjsKKyMJCQljbG9zZShIKQorIwkJCQlvciBkaWUgIkNvdWxkIG5vdCB3cml0ZSBicmFuY2ggJGJyYW5jaDogJCEiOworIwkJfQorIwl9CisJaWYobm90IGRlZmluZWQgJHJldikgeworCQl1bmxpbmsoJGdpdF9pbmRleCk7CisJfSBlbHNpZiAoJHJldiBuZSAkbGFzdF9yZXYpIHsKKwkJcHJpbnQgIlN3aXRjaGluZyBmcm9tICRsYXN0X3JldiB0byAkcmV2ICgkYnJhbmNoKVxuIiBpZiAkb3B0X3Y7CisJCXN5c3RlbSgiZ2l0IiwgInJlYWQtdHJlZSIsICRyZXYpOworCQlkaWUgInJlYWQtdHJlZSBmYWlsZWQgZm9yICRyZXY6ICQ/XG4iIGlmICQ/OworCQkkbGFzdF9yZXYgPSAkcmV2OworCX0KKworCXB1c2ggKEBwYXJlbnRzLCAkcmV2KSBpZiBkZWZpbmVkICRyZXY7CisKKwlteSAkY2lkOworCWlmKCR0YWcgYW5kIG5vdCAlJGNoYW5nZWRfcGF0aHMpIHsKKwkJJGNpZCA9ICRyZXY7CisJfSBlbHNlIHsKKwkJbXkgQHBhdGhzID0gc29ydCBrZXlzICUkY2hhbmdlZF9wYXRoczsKKwkJZm9yZWFjaCBteSAkcGF0aChAcGF0aHMpIHsKKwkJCW15ICRhY3Rpb24gPSAkY2hhbmdlZF9wYXRocy0+eyRwYXRofTsKKworCQkJaWYgKCRhY3Rpb24tPlswXSBlcSAiUiIpIHsKKwkJCQkjIHJlZmVyIHRvIGEgZmlsZS90cmVlIGluIGFuIGVhcmxpZXIgY29tbWl0CisJCQkJcHVzaChAb2xkLCRwYXRoKTsgIyByZW1vdmUgYW55IG9sZCBzdHVmZgorCQkJfQorCQkJaWYoKCRhY3Rpb24tPlswXSBlcSAiQSIpIHx8ICgkYWN0aW9uLT5bMF0gZXEgIlIiKSkgeworCQkJCW15ICRub2RlX2tpbmQgPSBub2RlX2tpbmQoJGFjdGlvbi0+WzNdLCAkcmV2aXNpb24pOworCQkJCWlmICgkbm9kZV9raW5kIGVxICRTVk46Ok5vZGU6OmZpbGUpIHsKKwkJCQkJbXkgJGYgPSBnZXRfZmlsZSgkYWN0aW9uLT5bM10sCisJCQkJCQkJICRyZXZpc2lvbiwgJHBhdGgpOworCQkJCQlpZiAoJGYpIHsKKwkJCQkJCXB1c2goQG5ldywkZikgaWYgJGY7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlteSAkb3BhdGggPSAkYWN0aW9uLT5bM107CisJCQkJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogJGJyYW5jaDogY291bGQgbm90IGZldGNoICckb3BhdGgnXG4iOworCQkJCQl9CisJCQkJfSBlbHNpZiAoJG5vZGVfa2luZCBlcSAkU1ZOOjpOb2RlOjpkaXIpIHsKKwkJCQkJaWYoJGFjdGlvbi0+WzFdKSB7CisJCQkJCQljb3B5X3BhdGgoJHJldmlzaW9uLCAkYnJhbmNoLAorCQkJCQkJCSAgJHBhdGgsICRhY3Rpb24tPlsxXSwKKwkJCQkJCQkgICRhY3Rpb24tPlsyXSwgJG5vZGVfa2luZCwKKwkJCQkJCQkgIFxAbmV3LCBcQHBhcmVudHMpOworCQkJCQl9IGVsc2UgeworCQkJCQkJZ2V0X2lnbm9yZShcQG5ldywgXEBvbGQsICRyZXZpc2lvbiwKKwkJCQkJCQkgICAkcGF0aCwgJGFjdGlvbi0+WzNdKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzaWYgKCRhY3Rpb24tPlswXSBlcSAiRCIpIHsKKwkJCQlwdXNoKEBvbGQsJHBhdGgpOworCQkJfSBlbHNpZiAoJGFjdGlvbi0+WzBdIGVxICJNIikgeworCQkJCW15ICRub2RlX2tpbmQgPSBub2RlX2tpbmQoJGFjdGlvbi0+WzNdLCAkcmV2aXNpb24pOworCQkJCWlmICgkbm9kZV9raW5kIGVxICRTVk46Ok5vZGU6OmZpbGUpIHsKKwkJCQkJbXkgJGYgPSBnZXRfZmlsZSgkYWN0aW9uLT5bM10sCisJCQkJCQkJICRyZXZpc2lvbiwgJHBhdGgpOworCQkJCQlwdXNoKEBuZXcsJGYpIGlmICRmOworCQkJCX0gZWxzaWYgKCRub2RlX2tpbmQgZXEgJFNWTjo6Tm9kZTo6ZGlyKSB7CisJCQkJCWdldF9pZ25vcmUoXEBuZXcsIFxAb2xkLCAkcmV2aXNpb24sCisJCQkJCQkgICAkcGF0aCwgJGFjdGlvbi0+WzNdKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRpZSAiJHJldmlzaW9uOiB1bmtub3duIGFjdGlvbiAnIi4kYWN0aW9uLT5bMF0uIicgZm9yICRwYXRoXG4iOworCQkJfQorCQl9CisKKwkJd2hpbGUoQG9sZCkgeworCQkJbXkgQG8xOworCQkJaWYoQG9sZCA+IDU1KSB7CisJCQkJQG8xID0gc3BsaWNlKEBvbGQsMCw1MCk7CisJCQl9IGVsc2UgeworCQkJCUBvMSA9IEBvbGQ7CisJCQkJQG9sZCA9ICgpOworCQkJfQorCQkJbXkgJHBpZCA9IG9wZW4gbXkgJEYsICItfCI7CisJCQlkaWUgIiQhIiB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQkJaWYgKCEkcGlkKSB7CisJCQkJZXhlYygiZ2l0IiwgImxzLWZpbGVzIiwgIi16IiwgQG8xKSBvciBkaWUgJCE7CisJCQl9CisJCQlAbzEgPSAoKTsKKwkJCWxvY2FsICQvID0gIlwwIjsKKwkJCXdoaWxlKDwkRj4pIHsKKwkJCQljaG9tcDsKKwkJCQlwdXNoKEBvMSwkXyk7CisJCQl9CisJCQljbG9zZSgkRik7CisKKwkJCXdoaWxlKEBvMSkgeworCQkJCW15IEBvMjsKKwkJCQlpZihAbzEgPiA1NSkgeworCQkJCQlAbzIgPSBzcGxpY2UoQG8xLDAsNTApOworCQkJCX0gZWxzZSB7CisJCQkJCUBvMiA9IEBvMTsKKwkJCQkJQG8xID0gKCk7CisJCQkJfQorCQkJCXN5c3RlbSgiZ2l0IiwidXBkYXRlLWluZGV4IiwiLS1mb3JjZS1yZW1vdmUiLCItLSIsQG8yKTsKKwkJCQlkaWUgIkNhbm5vdCByZW1vdmUgZmlsZXM6ICQ/XG4iIGlmICQ/OworCQkJfQorCQl9CisJCXdoaWxlKEBuZXcpIHsKKwkJCW15IEBuMjsKKwkJCWlmKEBuZXcgPiAxMikgeworCQkJCUBuMiA9IHNwbGljZShAbmV3LDAsMTApOworCQkJfSBlbHNlIHsKKwkJCQlAbjIgPSBAbmV3OworCQkJCUBuZXcgPSAoKTsKKwkJCX0KKwkJCXN5c3RlbSgiZ2l0IiwidXBkYXRlLWluZGV4IiwiLS1hZGQiLAorCQkJCShtYXAgeyAoJy0tY2FjaGVpbmZvJywgQCRfKSB9IEBuMikpOworCQkJZGllICJDYW5ub3QgYWRkIGZpbGVzOiAkP1xuIiBpZiAkPzsKKwkJfQorCisJCW15ICRwaWQgPSBvcGVuKEMsIi18Iik7CisJCWRpZSAiQ2Fubm90IGZvcms6ICQhIiB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQl1bmxlc3MoJHBpZCkgeworCQkJZXhlYygiZ2l0Iiwid3JpdGUtdHJlZSIpOworCQkJZGllICJDYW5ub3QgZXhlYyBnaXQtd3JpdGUtdHJlZTogJCFcbiI7CisJCX0KKwkJY2hvbXAobXkgJHRyZWUgPSA8Qz4pOworCQlsZW5ndGgoJHRyZWUpID09IDQwCisJCQlvciBkaWUgIkNhbm5vdCBnZXQgdHJlZSBpZCAoJHRyZWUpOiAkIVxuIjsKKwkJY2xvc2UoQykKKwkJCW9yIGRpZSAiRXJyb3IgcnVubmluZyBnaXQtd3JpdGUtdHJlZTogJD9cbiI7CisJCXByaW50ICJUcmVlIElEICR0cmVlXG4iIGlmICRvcHRfdjsKKworCQlteSAkcHIgPSBJTzo6UGlwZS0+bmV3KCkgb3IgZGllICJDYW5ub3Qgb3BlbiBwaXBlOiAkIVxuIjsKKwkJbXkgJHB3ID0gSU86OlBpcGUtPm5ldygpIG9yIGRpZSAiQ2Fubm90IG9wZW4gcGlwZTogJCFcbiI7CisJCSRwaWQgPSBmb3JrKCk7CisJCWRpZSAiRm9yazogJCFcbiIgdW5sZXNzIGRlZmluZWQgJHBpZDsKKwkJdW5sZXNzKCRwaWQpIHsKKwkJCSRwci0+d3JpdGVyKCk7CisJCQkkcHctPnJlYWRlcigpOworCQkJb3BlbihPVVQsIj4mU1RET1VUIik7CisJCQlkdXAyKCRwdy0+ZmlsZW5vKCksMCk7CisJCQlkdXAyKCRwci0+ZmlsZW5vKCksMSk7CisJCQkkcHItPmNsb3NlKCk7CisJCQkkcHctPmNsb3NlKCk7CisKKwkJCW15IEBwYXIgPSAoKTsKKworCQkJIyBsb29zZSBkZXRlY3Rpb24gb2YgbWVyZ2VzCisJCQkjIGJhc2VkIG9uIHRoZSBjb21taXQgbXNnCisJCQlmb3JlYWNoIG15ICRyeCAoQG1lcmdlcngpIHsKKwkJCQlpZiAoJG1lc3NhZ2UgPX4gJHJ4KSB7CisJCQkJCW15ICRtcGFyZW50ID0gJDE7CisJCQkJCWlmICgkbXBhcmVudCBlcSAnSEVBRCcpIHsgJG1wYXJlbnQgPSAkb3B0X28gfTsKKwkJCQkJaWYgKCAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kbXBhcmVudCIpIHsKKwkJCQkJCSRtcGFyZW50ID0gZ2V0X2hlYWRyZWYoJG1wYXJlbnQsICRnaXRfZGlyKTsKKwkJCQkJCXB1c2ggKEBwYXJlbnRzLCAkbXBhcmVudCk7CisJCQkJCQlwcmludCBPVVQgIk1lcmdlIHBhcmVudCBicmFuY2g6ICRtcGFyZW50XG4iIGlmICRvcHRfdjsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCW15ICVzZWVuX3BhcmVudHMgPSAoKTsKKwkJCW15IEB1bmlxdWVfcGFyZW50cyA9IGdyZXAgeyAhICRzZWVuX3BhcmVudHN7JF99ICsrIH0gQHBhcmVudHM7CisJCQlmb3JlYWNoIG15ICRicGFyZW50IChAdW5pcXVlX3BhcmVudHMpIHsKKwkJCQlwdXNoIEBwYXIsICctcCcsICRicGFyZW50OworCQkJCXByaW50IE9VVCAiTWVyZ2UgcGFyZW50IGJyYW5jaDogJGJwYXJlbnRcbiIgaWYgJG9wdF92OworCQkJfQorCisJCQlleGVjKCJlbnYiLAorCQkJCSJHSVRfQVVUSE9SX05BTUU9JGF1dGhvcl9uYW1lIiwKKwkJCQkiR0lUX0FVVEhPUl9FTUFJTD0kYXV0aG9yX2VtYWlsIiwKKwkJCQkiR0lUX0FVVEhPUl9EQVRFPSIuc3RyZnRpbWUoIiswMDAwICVZLSVtLSVkICVIOiVNOiVTIixnbXRpbWUoJGRhdGUpKSwKKwkJCQkiR0lUX0NPTU1JVFRFUl9OQU1FPSRjb21taXR0ZXJfbmFtZSIsCisJCQkJIkdJVF9DT01NSVRURVJfRU1BSUw9JGNvbW1pdHRlcl9lbWFpbCIsCisJCQkJIkdJVF9DT01NSVRURVJfREFURT0iLnN0cmZ0aW1lKCIrMDAwMCAlWS0lbS0lZCAlSDolTTolUyIsZ210aW1lKCRkYXRlKSksCisJCQkJImdpdCIsICJjb21taXQtdHJlZSIsICR0cmVlLEBwYXIpOworCQkJZGllICJDYW5ub3QgZXhlYyBnaXQtY29tbWl0LXRyZWU6ICQhXG4iOworCQl9CisJCSRwdy0+d3JpdGVyKCk7CisJCSRwci0+cmVhZGVyKCk7CisKKwkJJG1lc3NhZ2UgPX4gcy9bXHNcbl0rXHovLzsKKwkJJG1lc3NhZ2UgPSAiciRyZXZpc2lvbjogJG1lc3NhZ2UiIGlmICRvcHRfcjsKKworCQlwcmludCAkcHcgIiRtZXNzYWdlXG4iCisJCQlvciBkaWUgIkVycm9yIHdyaXRpbmcgdG8gZ2l0LWNvbW1pdC10cmVlOiAkIVxuIjsKKwkJJHB3LT5jbG9zZSgpOworCisJCXByaW50ICJDb21taXR0ZWQgY2hhbmdlICRyZXZpc2lvbjokYnJhbmNoICIuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIixnbXRpbWUoJGRhdGUpKS4iKVxuIiBpZiAkb3B0X3Y7CisJCWNob21wKCRjaWQgPSA8JHByPik7CisJCWxlbmd0aCgkY2lkKSA9PSA0MAorCQkJb3IgZGllICJDYW5ub3QgZ2V0IGNvbW1pdCBpZCAoJGNpZCk6ICQhXG4iOworCQlwcmludCAiQ29tbWl0IElEICRjaWRcbiIgaWYgJG9wdF92OworCQkkcHItPmNsb3NlKCk7CisKKwkJd2FpdHBpZCgkcGlkLDApOworCQlkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0LWNvbW1pdC10cmVlOiAkP1xuIiBpZiAkPzsKKwl9CisKKwlpZiAobm90IGRlZmluZWQgJGNpZCkgeworCQkkY2lkID0gJGJyYW5jaGVzeyIvIn17IkxBU1QifTsKKwl9CisKKwlpZihub3QgZGVmaW5lZCAkZGVzdCkgeworCQlwcmludCAiLi4uIG5vIGtub3duIHBhcmVudFxuIiBpZiAkb3B0X3Y7CisJfSBlbHNpZihub3QgJHRhZykgeworCQlwcmludCAiV3JpdGluZyB0byByZWZzL2hlYWRzLyRkZXN0XG4iIGlmICRvcHRfdjsKKwkJb3BlbihDLCI+JGdpdF9kaXIvcmVmcy9oZWFkcy8kZGVzdCIpIGFuZAorCQlwcmludCBDICgiJGNpZFxuIikgYW5kCisJCWNsb3NlKEMpCisJCQlvciBkaWUgIkNhbm5vdCB3cml0ZSBicmFuY2ggJGRlc3QgZm9yIHVwZGF0ZTogJCFcbiI7CisJfQorCisJaWYgKCR0YWcpIHsKKwkJJGxhc3RfcmV2ID0gIi0iIGlmICUkY2hhbmdlZF9wYXRoczsKKwkJIyB0aGUgdGFnIHdhcyAnY29tcGxleCcsIGkuZS4gZGlkIG5vdCByZWZlciB0byBhICJyZWFsIiByZXZpc2lvbgorCisJCSRkZXN0ID1+IHRyL18vXC4vIGlmICRvcHRfdTsKKworCQlzeXN0ZW0oJ2dpdCcsICd0YWcnLCAnLWYnLCAkZGVzdCwgJGNpZCkgPT0gMAorCQkJb3IgZGllICJDYW5ub3QgY3JlYXRlIHRhZyAkZGVzdDogJCFcbiI7CisKKwkJcHJpbnQgIkNyZWF0ZWQgdGFnICckZGVzdCcgb24gJyRicmFuY2gnXG4iIGlmICRvcHRfdjsKKwl9CisJJGJyYW5jaGVzeyRicmFuY2h9eyJMQVNUIn0gPSAkY2lkOworCSRicmFuY2hlc3skYnJhbmNofXskcmV2aXNpb259ID0gJGNpZDsKKwkkbGFzdF9yZXYgPSAkY2lkOworCXByaW50IEJSQU5DSEVTICIkcmV2aXNpb24gJGJyYW5jaCAkY2lkXG4iOworCXByaW50ICJET05FOiAkcmV2aXNpb24gJGRlc3QgJGNpZFxuIiBpZiAkb3B0X3Y7Cit9CisKK3N1YiBjb21taXRfYWxsIHsKKwkjIFJlY3Vyc2l2ZSB1c2Ugb2YgdGhlIFNWTiBjb25uZWN0aW9uIGRvZXMgbm90IHdvcmsKKwlsb2NhbCAkc3ZuID0gJHN2bjI7CisKKwlteSAoJGNoYW5nZWRfcGF0aHMsICRyZXZpc2lvbiwgJGF1dGhvciwgJGRhdGUsICRtZXNzYWdlKSA9IEBfOworCW15ICVwOworCXdoaWxlKG15KCRwYXRoLCRhY3Rpb24pID0gZWFjaCAlJGNoYW5nZWRfcGF0aHMpIHsKKwkJJHB7JHBhdGh9ID0gWyAkYWN0aW9uLT5hY3Rpb24sJGFjdGlvbi0+Y29weWZyb21fcGF0aCwgJGFjdGlvbi0+Y29weWZyb21fcmV2LCAkcGF0aCBdOworCX0KKwkkY2hhbmdlZF9wYXRocyA9IFwlcDsKKworCW15ICVkb25lOworCW15IEBjb2w7CisJbXkgJHByZWY7CisJbXkgJGJyYW5jaDsKKworCXdoaWxlKG15KCRwYXRoLCRhY3Rpb24pID0gZWFjaCAlJGNoYW5nZWRfcGF0aHMpIHsKKwkJKCRicmFuY2gsJHBhdGgpID0gc3BsaXRfcGF0aCgkcmV2aXNpb24sJHBhdGgpOworCQluZXh0IGlmIG5vdCBkZWZpbmVkICRicmFuY2g7CisJCW5leHQgaWYgbm90IGRlZmluZWQgJHBhdGg7CisJCSRkb25leyRicmFuY2h9eyRwYXRofSA9ICRhY3Rpb247CisJfQorCXdoaWxlKCgkYnJhbmNoLCRjaGFuZ2VkX3BhdGhzKSA9IGVhY2ggJWRvbmUpIHsKKwkJY29tbWl0KCRicmFuY2gsICRjaGFuZ2VkX3BhdGhzLCAkcmV2aXNpb24sICRhdXRob3IsICRkYXRlLCAkbWVzc2FnZSk7CisJfQorfQorCiskb3B0X2wgPSAkc3ZuLT57J21heHJldid9IGlmIG5vdCBkZWZpbmVkICRvcHRfbCBvciAkb3B0X2wgPiAkc3ZuLT57J21heHJldid9OworCitpZiAoJG9wdF9sIDwgJGN1cnJlbnRfcmV2KSB7CisgICAgcHJpbnQgIlVwIHRvIGRhdGU6IG5vIG5ldyByZXZpc2lvbnMgdG8gZmV0Y2ghXG4iIGlmICRvcHRfdjsKKyAgICB1bmxpbmsoIiRnaXRfZGlyL1NWTjJHSVRfSEVBRCIpOworICAgIGV4aXQ7Cit9CisKK3ByaW50ICJQcm9jZXNzaW5nIGZyb20gJGN1cnJlbnRfcmV2IHRvICRvcHRfbCAuLi5cbiIgaWYgJG9wdF92OworCitteSAkZnJvbV9yZXY7CitteSAkdG9fcmV2ID0gJGN1cnJlbnRfcmV2IC0gMTsKKworbXkgJHN1YnBvb2wgPSBTVk46OlBvb2w6Om5ld19kZWZhdWx0X3N1YjsKK3doaWxlICgkdG9fcmV2IDwgJG9wdF9sKSB7CisJJHN1YnBvb2wtPmNsZWFyOworCSRmcm9tX3JldiA9ICR0b19yZXYgKyAxOworCSR0b19yZXYgPSAkZnJvbV9yZXYgKyAkcmVwYWNrX2FmdGVyOworCSR0b19yZXYgPSAkb3B0X2wgaWYgJG9wdF9sIDwgJHRvX3JldjsKKwlwcmludCAiRmV0Y2hpbmcgZnJvbSAkZnJvbV9yZXYgdG8gJHRvX3JldiAuLi5cbiIgaWYgJG9wdF92OworCSRzdm4tPnsnc3ZuJ30tPmdldF9sb2coIiIsJGZyb21fcmV2LCR0b19yZXYsMCwxLDEsXCZjb21taXRfYWxsKTsKKwlteSAkcGlkID0gZm9yaygpOworCWRpZSAiRm9yazogJCFcbiIgdW5sZXNzIGRlZmluZWQgJHBpZDsKKwl1bmxlc3MoJHBpZCkgeworCQlleGVjKCJnaXQiLCAicmVwYWNrIiwgIi1kIikKKwkJCW9yIGRpZSAiQ2Fubm90IHJlcGFjazogJCFcbiI7CisJfQorCXdhaXRwaWQoJHBpZCwgMCk7Cit9CisKKwordW5saW5rKCRnaXRfaW5kZXgpOworCitpZiAoZGVmaW5lZCAkb3JpZ19naXRfaW5kZXgpIHsKKwkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRvcmlnX2dpdF9pbmRleDsKK30gZWxzZSB7CisJZGVsZXRlICRFTlZ7R0lUX0lOREVYX0ZJTEV9OworfQorCisjIE5vdyBzd2l0Y2ggYmFjayB0byB0aGUgYnJhbmNoIHdlIHdlcmUgaW4gYmVmb3JlIGFsbCBvZiB0aGlzIGhhcHBlbmVkCitpZigkb3JpZ19icmFuY2gpIHsKKwlwcmludCAiRE9ORVxuIiBpZiAkb3B0X3YgYW5kIChub3QgZGVmaW5lZCAkb3B0X2wgb3IgJG9wdF9sID4gMCk7CisJc3lzdGVtKCJjcCIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG9wdF9vIiwiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiKQorCQlpZiAkZm9yd2FyZF9tYXN0ZXI7CisJdW5sZXNzICgkb3B0X2kpIHsKKwkJc3lzdGVtKCdnaXQnLCAncmVhZC10cmVlJywgJy1tJywgJy11JywgJ1NWTjJHSVRfSEVBRCcsICdIRUFEJyk7CisJCWRpZSAicmVhZC10cmVlIGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorfSBlbHNlIHsKKwkkb3JpZ19icmFuY2ggPSAibWFzdGVyIjsKKwlwcmludCAiRE9ORTsgY3JlYXRpbmcgJG9yaWdfYnJhbmNoIGJyYW5jaFxuIiBpZiAkb3B0X3YgYW5kIChub3QgZGVmaW5lZCAkb3B0X2wgb3IgJG9wdF9sID4gMCk7CisJc3lzdGVtKCJjcCIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG9wdF9vIiwiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiKQorCQl1bmxlc3MgLWYgIiRnaXRfZGlyL3JlZnMvaGVhZHMvbWFzdGVyIjsKKwlzeXN0ZW0oJ2dpdCcsICd1cGRhdGUtcmVmJywgJ0hFQUQnLCAiJG9yaWdfYnJhbmNoIik7CisJdW5sZXNzICgkb3B0X2kpIHsKKwkJc3lzdGVtKCdnaXQgY2hlY2tvdXQnKTsKKwkJZGllICJjaGVja291dCBmYWlsZWQ6ICQ/XG4iIGlmICQ/OworCX0KK30KK3VubGluaygiJGdpdF9kaXIvU1ZOMkdJVF9IRUFEIik7CitjbG9zZShCUkFOQ0hFUyk7CmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1zdm5pbXBvcnQudHh0IGIvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmI4NzFlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnR4dApAQCAtMCwwICsxLDE3OSBAQAorZ2l0LXN2bmltcG9ydCgxKQorPT09PT09PT09PT09PT09PQordjAuMSwgSnVseSAyMDA1CisKK05BTUUKKy0tLS0KK2dpdC1zdm5pbXBvcnQgLSBJbXBvcnQgYSBTVk4gcmVwb3NpdG9yeSBpbnRvIGdpdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdC1zdm5pbXBvcnQnIFsgLW8gPGJyYW5jaC1mb3ItSEVBRD4gXSBbIC1oIF0gWyAtdiBdIFsgLWQgfCAtRCBdCisJCVsgLUMgPEdJVF9yZXBvc2l0b3J5PiBdIFsgLWkgXSBbIC11IF0gWy1sIGxpbWl0X3Jldl0KKwkJWyAtYiBicmFuY2hfc3ViZGlyIF0gWyAtVCB0cnVua19zdWJkaXIgXSBbIC10IHRhZ19zdWJkaXIgXQorCQlbIC1zIHN0YXJ0X2NoZyBdIFsgLW0gXSBbIC1yIF0gWyAtTSByZWdleCBdCisJCVsgLUkgPGlnbm9yZWZpbGVfbmFtZT4gXSBbIC1BIDxhdXRob3JfZmlsZT4gXQorCQlbIC1SIDxyZXBhY2tfZWFjaF9yZXZzPl0gWyAtUCA8cGF0aF9mcm9tX3RydW5rPiBdCisJCTxTVk5fcmVwb3NpdG9yeV9VUkw+IFsgPHBhdGg+IF0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ltcG9ydHMgYSBTVk4gcmVwb3NpdG9yeSBpbnRvIGdpdC4gSXQgd2lsbCBlaXRoZXIgY3JlYXRlIGEgbmV3CityZXBvc2l0b3J5LCBvciBpbmNyZW1lbnRhbGx5IGltcG9ydCBpbnRvIGFuIGV4aXN0aW5nIG9uZS4KKworU1ZOIGFjY2VzcyBpcyBkb25lIGJ5IHRoZSBTVk46OlBlcmwgbW9kdWxlLgorCitnaXQtc3ZuaW1wb3J0IGFzc3VtZXMgdGhhdCBTVk4gcmVwb3NpdG9yaWVzIGFyZSBvcmdhbml6ZWQgaW50byBvbmUKKyJ0cnVuayIgZGlyZWN0b3J5IHdoZXJlIHRoZSBtYWluIGRldmVsb3BtZW50IGhhcHBlbnMsICJicmFuY2hlcy9GT08iCitkaXJlY3RvcmllcyBmb3IgYnJhbmNoZXMsIGFuZCAiL3RhZ3MvRk9PIiBkaXJlY3RvcmllcyBmb3IgdGFncy4KK090aGVyIHN1YmRpcmVjdG9yaWVzIGFyZSBpZ25vcmVkLgorCitnaXQtc3ZuaW1wb3J0IGNyZWF0ZXMgYSBmaWxlICIuZ2l0L3N2bjJnaXQiLCB3aGljaCBpcyByZXF1aXJlZCBmb3IKK2luY3JlbWVudGFsIFNWTiBpbXBvcnRzLgorCitPUFRJT05TCistLS0tLS0tCistQyA8dGFyZ2V0LWRpcj46OgorICAgICAgICBUaGUgR0lUIHJlcG9zaXRvcnkgdG8gaW1wb3J0IHRvLiAgSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0CisgICAgICAgIGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworLXMgPHN0YXJ0X3Jldj46OgorICAgICAgICBTdGFydCBpbXBvcnRpbmcgYXQgdGhpcyBTVk4gY2hhbmdlIG51bWJlci4gVGhlICBkZWZhdWx0IGlzIDEuCisrCitXaGVuIGltcG9ydGluZyBpbmNyZW1lbnRhbGx5LCB5b3UgbWlnaHQgbmVlZCB0byBlZGl0IHRoZSAuZ2l0L3N2bjJnaXQgZmlsZS4KKworLWk6OgorCUltcG9ydC1vbmx5OiBkb24ndCBwZXJmb3JtIGEgY2hlY2tvdXQgYWZ0ZXIgaW1wb3J0aW5nLiAgVGhpcyBvcHRpb24KKwllbnN1cmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggcmVtYWluIHVudG91Y2hlZCBhbmQgd2lsbAorCW5vdCBjcmVhdGUgdGhlbSBpZiB0aGV5IGRvIG5vdCBleGlzdC4KKworLVQgPHRydW5rX3N1YmRpcj46OgorCU5hbWUgdGhlIFNWTiB0cnVuay4gRGVmYXVsdCAidHJ1bmsiLgorCistdCA8dGFnX3N1YmRpcj46OgorCU5hbWUgdGhlIFNWTiBzdWJkaXJlY3RvcnkgZm9yIHRhZ3MuIERlZmF1bHQgInRhZ3MiLgorCistYiA8YnJhbmNoX3N1YmRpcj46OgorCU5hbWUgdGhlIFNWTiBzdWJkaXJlY3RvcnkgZm9yIGJyYW5jaGVzLiBEZWZhdWx0ICJicmFuY2hlcyIuCisKKy1vIDxicmFuY2gtZm9yLUhFQUQ+OjoKKwlUaGUgJ3RydW5rJyBicmFuY2ggZnJvbSBTVk4gaXMgaW1wb3J0ZWQgdG8gdGhlICdvcmlnaW4nIGJyYW5jaCB3aXRoaW4KKwl0aGUgZ2l0IHJlcG9zaXRvcnkuIFVzZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBpbXBvcnQgaW50byBhCisJZGlmZmVyZW50IGJyYW5jaC4KKworLXI6OgorCVByZXBlbmQgJ3JYOiAnIHRvIGNvbW1pdCBtZXNzYWdlcywgd2hlcmUgWCBpcyB0aGUgaW1wb3J0ZWQKKwlzdWJ2ZXJzaW9uIHJldmlzaW9uLgorCistdTo6CisJUmVwbGFjZSB1bmRlcnNjb3JlcyBpbiB0YWcgbmFtZXMgd2l0aCBwZXJpb2RzLgorCistSSA8aWdub3JlZmlsZV9uYW1lPjo6CisJSW1wb3J0IHRoZSBzdm46aWdub3JlIGRpcmVjdG9yeSBwcm9wZXJ0eSB0byBmaWxlcyB3aXRoIHRoaXMKKwluYW1lIGluIGVhY2ggZGlyZWN0b3J5LiAoVGhlIFN1YnZlcnNpb24gYW5kIEdJVCBpZ25vcmUKKwlzeW50YXhlcyBhcmUgc2ltaWxhciBlbm91Z2ggdGhhdCB1c2luZyB0aGUgU3VidmVyc2lvbiBwYXR0ZXJucworCWRpcmVjdGx5IHdpdGggIi1JIC5naXRpZ25vcmUiIHdpbGwgYWxtb3N0IGFsd2F5cyBqdXN0IHdvcmsuKQorCistQSA8YXV0aG9yX2ZpbGU+OjoKKwlSZWFkIGEgZmlsZSB3aXRoIGxpbmVzIG9uIHRoZSBmb3JtCisrCistLS0tLS0KKwl1c2VybmFtZSA9IFVzZXIncyBGdWxsIE5hbWUgPGVtYWlsQGFkZHIuZXM+CisKKy0tLS0tLQorKworYW5kIHVzZSAiVXNlcidzIEZ1bGwgTmFtZSA8ZW1haWxAYWRkci5lcz4iIGFzIHRoZSBHSVQKK2F1dGhvciBhbmQgY29tbWl0dGVyIGZvciBTdWJ2ZXJzaW9uIGNvbW1pdHMgbWFkZSBieQorInVzZXJuYW1lIi4gSWYgZW5jb3VudGVyaW5nIGEgY29tbWl0IG1hZGUgYnkgYSB1c2VyIG5vdCBpbiB0aGUKK2xpc3QsIGFib3J0LgorKworRm9yIGNvbnZlbmllbmNlLCB0aGlzIGRhdGEgaXMgc2F2ZWQgdG8gJEdJVF9ESVIvc3ZuLWF1dGhvcnMKK2VhY2ggdGltZSB0aGUgLUEgb3B0aW9uIGlzIHByb3ZpZGVkLCBhbmQgcmVhZCBmcm9tIHRoYXQgc2FtZQorZmlsZSBlYWNoIHRpbWUgZ2l0LXN2bmltcG9ydCBpcyBydW4gd2l0aCBhbiBleGlzdGluZyBHSVQKK3JlcG9zaXRvcnkgd2l0aG91dCAtQS4KKworLW06OgorCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgb3B0aW9uCisJd2lsbCBlbmFibGUgZGVmYXVsdCByZWdleGVzIHRoYXQgdHJ5IHRvIGNhcHR1cmUgdGhlIG5hbWUgc291cmNlCisJYnJhbmNoIG5hbWUgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UuCisKKy1NIDxyZWdleD46OgorCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCBhIGN1c3RvbQorCXJlZ2V4LiBJdCBjYW4gYmUgdXNlZCB3aXRoIC1tIHRvIGFsc28gc2VlIHRoZSBkZWZhdWx0IHJlZ2V4ZXMuCisJWW91IG11c3QgZXNjYXBlIGZvcndhcmQgc2xhc2hlcy4KKworLWwgPG1heF9yZXY+OjoKKwlTcGVjaWZ5IGEgbWF4aW11bSByZXZpc2lvbiBudW1iZXIgdG8gcHVsbC4KKysKK0Zvcm1lcmx5LCB0aGlzIG9wdGlvbiBjb250cm9sbGVkIGhvdyBtYW55IHJldmlzaW9ucyB0byBwdWxsLAorZHVlIHRvIFNWTiBtZW1vcnkgbGVha3MuIChUaGVzZSBoYXZlIGJlZW4gd29ya2VkIGFyb3VuZC4pCisKKy1SIDxyZXBhY2tfZWFjaF9yZXZzPjo6CisJU3BlY2lmeSBob3cgb2Z0ZW4gZ2l0IHJlcG9zaXRvcnkgc2hvdWxkIGJlIHJlcGFja2VkLgorKworVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwMC4gZ2l0LXN2bmltcG9ydCB3aWxsIGRvIGltcG9ydHMgaW4gY2h1bmtzIG9mIDEwMDAKK3JldmlzaW9ucywgYWZ0ZXIgZWFjaCBjaHVuayB0aGUgZ2l0IHJlcG9zaXRvcnkgd2lsbCBiZSByZXBhY2tlZC4gVG8gZGlzYWJsZQordGhpcyBiZWhhdmlvciBzcGVjaWZ5IHNvbWUgbGFyZ2UgdmFsdWUgaGVyZSB3aGljaCBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZgorcmV2aXNpb25zIHRvIGltcG9ydC4KKworLVAgPHBhdGhfZnJvbV90cnVuaz46OgorCVBhcnRpYWwgaW1wb3J0IG9mIHRoZSBTVk4gdHJlZS4KKysKK0J5IGRlZmF1bHQsIHRoZSB3aG9sZSB0cmVlIG9uIHRoZSBTVk4gdHJ1bmsgKC90cnVuaykgaXMgaW1wb3J0ZWQuCisnLVAgbXkvcHJvaicgd2lsbCBpbXBvcnQgc3RhcnRpbmcgb25seSBmcm9tICcvdHJ1bmsvbXkvcHJvaicuCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBpbXBvcnQgb25lIHByb2plY3QgZnJvbSBhCitzdm4gcmVwbyB3aGljaCBob3N0cyBtdWx0aXBsZSBwcm9qZWN0cyB1bmRlciB0aGUgc2FtZSB0cnVuay4KKworLXY6OgorCVZlcmJvc2l0eTogbGV0ICdzdm5pbXBvcnQnIHJlcG9ydCB3aGF0IGl0IGlzIGRvaW5nLgorCistZDo6CisJVXNlIGRpcmVjdCBIVFRQIHJlcXVlc3RzIGlmIHBvc3NpYmxlLiBUaGUgIjxwYXRoPiIgYXJndW1lbnQgaXMgdXNlZAorCW9ubHkgZm9yIHJldHJpZXZpbmcgdGhlIFNWTiBsb2dzOyB0aGUgcGF0aCB0byB0aGUgY29udGVudHMgaXMKKwlpbmNsdWRlZCBpbiB0aGUgU1ZOIGxvZy4KKworLUQ6OgorCVVzZSBkaXJlY3QgSFRUUCByZXF1ZXN0cyBpZiBwb3NzaWJsZS4gVGhlICI8cGF0aD4iIGFyZ3VtZW50IGlzIHVzZWQKKwlmb3IgcmV0cmlldmluZyB0aGUgbG9ncywgYXMgd2VsbCBhcyBmb3IgdGhlIGNvbnRlbnRzLgorKworVGhlcmUncyBubyBzYWZlIHdheSB0byBhdXRvbWF0aWNhbGx5IGZpbmQgb3V0IHdoaWNoIG9mIHRoZXNlIG9wdGlvbnMgdG8KK3VzZSwgc28geW91IG5lZWQgdG8gdHJ5IGJvdGguIFVzdWFsbHksIHRoZSBvbmUgdGhhdCdzIHdyb25nIHdpbGwgZGllCit3aXRoIGEgNDB4IGVycm9yIHByZXR0eSBxdWlja2x5LgorCis8U1ZOX3JlcG9zaXRvcnlfVVJMPjo6CisJVGhlIFVSTCBvZiB0aGUgU1ZOIG1vZHVsZSB5b3Ugd2FudCB0byBpbXBvcnQuIEZvciBsb2NhbAorCXJlcG9zaXRvcmllcywgdXNlICJmaWxlOi8vL2Fic29sdXRlL3BhdGgiLgorKworSWYgeW91J3JlIHVzaW5nIHRoZSAiLWQiIG9yICItRCIgb3B0aW9uLCB0aGlzIGlzIHRoZSBVUkwgb2YgdGhlIFNWTgorcmVwb3NpdG9yeSBpdHNlbGY7IGl0IHVzdWFsbHkgZW5kcyBpbiAiL3N2biIuCisKKzxwYXRoPjo6CisJVGhlIHBhdGggdG8gdGhlIG1vZHVsZSB5b3Ugd2FudCB0byBjaGVjayBvdXQuCisKKy1oOjoKKwlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCisKK09VVFBVVAorLS0tLS0tCitJZiAnLXYnIGlzIHNwZWNpZmllZCwgdGhlIHNjcmlwdCByZXBvcnRzIHdoYXQgaXQgaXMgZG9pbmcuCisKK090aGVyd2lzZSwgc3VjY2VzcyBpcyBpbmRpY2F0ZWQgdGhlIFVuaXggd2F5LCBpLmUuIGJ5IHNpbXBseSBleGl0aW5nIHdpdGgKK2EgemVybyBleGl0IHN0YXR1cy4KKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgTWF0dGhpYXMgVXJsaWNocyA8c211cmZAc211cmYubm9yaXMuZGU+LCB3aXRoIGhlbHAgZnJvbQordmFyaW91cyBwYXJ0aWNpcGFudHMgb2YgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKworQmFzZWQgb24gYSBjdnMyZ2l0IHNjcmlwdCBieSB0aGUgc2FtZSBhdXRob3IuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IE1hdHRoaWFzIFVybGljaHMgPHNtdXJmQHNtdXJmLm5vcmlzLmRlPi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC10YWcuc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC10YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmMxNWJjOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXRhZy5zaApAQCAtMCwwICsxLDIwNSBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwNSBMaW51cyBUb3J2YWxkcworCitVU0FHRT0nWy1uIFs8bnVtPl1dIC1sIFs8cGF0dGVybj5dIHwgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mIHwgLWQgfCAtdl0gWy1tIDxtc2c+XSA8dGFnbmFtZT4gWzxoZWFkPl0nCitTVUJESVJFQ1RPUllfT0s9J1llcycKKy4gZ2l0LXNoLXNldHVwCisKK21lc3NhZ2VfZ2l2ZW49Cithbm5vdGF0ZT0KK3NpZ25lZD0KK2ZvcmNlPQorbWVzc2FnZT0KK3VzZXJuYW1lPQorbGlzdD0KK3ZlcmlmeT0KK0xJTkVTPTAKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKyAgICBjYXNlICIkMSIgaW4KKyAgICAtYSkKKwlhbm5vdGF0ZT0xCisJc2hpZnQKKwk7OworICAgIC1zKQorCWFubm90YXRlPTEKKwlzaWduZWQ9MQorCXNoaWZ0CisJOzsKKyAgICAtZikKKwlmb3JjZT0xCisJc2hpZnQKKwk7OworICAgIC1uKQorICAgICAgICBjYXNlICIkIywkMiIgaW4KKwkxLCogfCAqLC0qKQorCQlMSU5FUz0xIAkjIG5vIGFyZ3VtZW50CisJCTs7CisJKikJc2hpZnQKKwkJTElORVM9JChleHByICIkMSIgOiAnXChbMC05XSpcKScpCisJCVsgLXogIiRMSU5FUyIgXSAmJiBMSU5FUz0xICMgMSBsaW5lIGlzIGRlZmF1bHQgd2hlbiAtbiBpcyB1c2VkCisJCTs7CisJZXNhYworCXNoaWZ0CisJOzsKKyAgICAtbCkKKwlsaXN0PTEKKwlzaGlmdAorCWNhc2UgJCMgaW4KKwkwKQlQQVRURVJOPQorCQk7OworCSopCisJCVBBVFRFUk49IiQxIgkjIHNlbGVjdCB0YWdzIGJ5IHNoZWxsIHBhdHRlcm4sIG5vdCByZQorCQlzaGlmdAorCQk7OworCWVzYWMKKwlnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgLS10YWdzIHwgc29ydCB8CisJICAgIHdoaWxlIHJlYWQgVEFHCisJICAgIGRvCisJICAgICAgICBjYXNlICIkVEFHIiBpbgorCQkqJFBBVFRFUk4qKSA7OworCQkqKQkgICAgY29udGludWUgOzsKKwkJZXNhYworCQlbICIkTElORVMiIC1sZSAwIF0gJiYgeyBlY2hvICIkVEFHIjsgY29udGludWUgO30KKwkJT0JKVFlQRT0kKGdpdCBjYXQtZmlsZSAtdCAiJFRBRyIpCisJCWNhc2UgJE9CSlRZUEUgaW4KKwkJdGFnKQorCQkJQU5OT1RBVElPTj0kKGdpdCBjYXQtZmlsZSB0YWcgIiRUQUciIHwKKwkJCQlzZWQgLWUgJzEsL14kL2QnIHwKKwkJCQlzZWQgLW4gLWUgIgorCQkJCQkvXi0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXCQvcQorCQkJCQkyLFwkcy9eLyAgICAvCisJCQkJCXAKKwkJCQkJJHtMSU5FU31xCisJCQkJIikKKwkJCXByaW50ZiAiJS0xNXMgJXNcbiIgIiRUQUciICIkQU5OT1RBVElPTiIKKwkJCTs7CisJCSopICAgICAgZWNobyAiJFRBRyIKKwkJCTs7CisJCWVzYWMKKwkgICAgZG9uZQorCTs7CisgICAgLW0pCisJYW5ub3RhdGU9MQorCXNoaWZ0CisJbWVzc2FnZT0iJDEiCisJaWYgdGVzdCAiJCMiID0gIjAiOyB0aGVuCisJICAgIGRpZSAiZXJyb3I6IG9wdGlvbiAtbSBuZWVkcyBhbiBhcmd1bWVudCIKKwllbHNlCisJICAgIG1lc3NhZ2U9IiQxIgorCSAgICBtZXNzYWdlX2dpdmVuPTEKKwkgICAgc2hpZnQKKwlmaQorCTs7CisgICAgLUYpCisJYW5ub3RhdGU9MQorCXNoaWZ0CisJaWYgdGVzdCAiJCMiID0gIjAiOyB0aGVuCisJICAgIGRpZSAiZXJyb3I6IG9wdGlvbiAtRiBuZWVkcyBhbiBhcmd1bWVudCIKKwllbHNlCisJICAgIG1lc3NhZ2U9IiQoY2F0ICIkMSIpIgorCSAgICBtZXNzYWdlX2dpdmVuPTEKKwkgICAgc2hpZnQKKwlmaQorCTs7CisgICAgLXUpCisJYW5ub3RhdGU9MQorCXNpZ25lZD0xCisJc2hpZnQKKwlpZiB0ZXN0ICIkIyIgPSAiMCI7IHRoZW4KKwkgICAgZGllICJlcnJvcjogb3B0aW9uIC11IG5lZWRzIGFuIGFyZ3VtZW50IgorCWVsc2UKKwkgICAgdXNlcm5hbWU9IiQxIgorCSAgICBzaGlmdAorCWZpCisJOzsKKyAgICAtZCkKKwlzaGlmdAorCWhhZF9lcnJvcj0wCisJZm9yIHRhZworCWRvCisJCWN1cj0kKGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtLWhhc2ggLS0gInJlZnMvdGFncy8kdGFnIikgfHwgeworCQkJZWNobyA+JjIgIlNlcmlvdXNseSwgd2hhdCB0YWcgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKKwkJCWhhZF9lcnJvcj0xCisJCQljb250aW51ZQorCQl9CisJCWdpdCB1cGRhdGUtcmVmIC1tICd0YWc6IGRlbGV0ZScgLWQgInJlZnMvdGFncy8kdGFnIiAiJGN1ciIgfHwgeworCQkJaGFkX2Vycm9yPTEKKwkJCWNvbnRpbnVlCisJCX0KKwkJZWNobyAiRGVsZXRlZCB0YWcgJHRhZy4iCisJZG9uZQorCWV4aXQgJGhhZF9lcnJvcgorCTs7CisgICAgLXYpCisJc2hpZnQKKwl0YWdfbmFtZT0iJDEiCisJdGFnPSQoZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0taGFzaCAtLSAicmVmcy90YWdzLyR0YWdfbmFtZSIpIHx8CisJCWRpZSAiU2VyaW91c2x5LCB3aGF0IHRhZyBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorCWdpdC12ZXJpZnktdGFnIC12ICIkdGFnIgorCWV4aXQgJD8KKwk7OworICAgIC0qKQorICAgICAgICB1c2FnZQorCTs7CisgICAgKikKKwlicmVhaworCTs7CisgICAgZXNhYworZG9uZQorCitbIC1uICIkbGlzdCIgXSAmJiBleGl0IDAKKworbmFtZT0iJDEiCitbICIkbmFtZSIgXSB8fCB1c2FnZQorcHJldj0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitpZiBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLS1xdWlldCAtLSAicmVmcy90YWdzLyRuYW1lIgordGhlbgorICAgIHRlc3QgLW4gIiRmb3JjZSIgfHwgZGllICJ0YWcgJyRuYW1lJyBhbHJlYWR5IGV4aXN0cyIKKyAgICBwcmV2PWBnaXQgcmV2LXBhcnNlICJyZWZzL3RhZ3MvJG5hbWUiYAorZmkKK3NoaWZ0CitnaXQgY2hlY2stcmVmLWZvcm1hdCAidGFncy8kbmFtZSIgfHwKKwlkaWUgIndlIGRvIG5vdCBsaWtlICckbmFtZScgYXMgYSB0YWcgbmFtZS4iCisKK29iamVjdD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IEhFQUQgIiRAIikgfHwgZXhpdCAxCit0eXBlPSQoZ2l0IGNhdC1maWxlIC10ICRvYmplY3QpIHx8IGV4aXQgMQordGFnZ2VyPSQoZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UKSB8fCBleGl0IDEKKwordGVzdCAtbiAiJHVzZXJuYW1lIiB8fAorCXVzZXJuYW1lPSQoZ2l0IGNvbmZpZyB1c2VyLnNpZ25pbmdrZXkpIHx8CisJdXNlcm5hbWU9JChleHByICJ6JHRhZ2dlciIgOiAnelwoLio+XCknKQorCit0cmFwICdybSAtZiAiJEdJVF9ESVIiL1RBR19UTVAqICIkR0lUX0RJUiIvVEFHX0ZJTkFMTVNHICIkR0lUX0RJUiIvVEFHX0VESVRNU0cnIDAKKworaWYgWyAiJGFubm90YXRlIiBdOyB0aGVuCisgICAgaWYgWyAteiAiJG1lc3NhZ2VfZ2l2ZW4iIF07IHRoZW4KKyAgICAgICAgKCBlY2hvICIjIgorICAgICAgICAgIGVjaG8gIiMgV3JpdGUgYSB0YWcgbWVzc2FnZSIKKyAgICAgICAgICBlY2hvICIjIiApID4gIiRHSVRfRElSIi9UQUdfRURJVE1TRworICAgICAgICBnaXRfZWRpdG9yICIkR0lUX0RJUiIvVEFHX0VESVRNU0cgfHwgZXhpdAorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmICclc1xuJyAiJG1lc3NhZ2UiID4iJEdJVF9ESVIiL1RBR19FRElUTVNHCisgICAgZmkKKworICAgIGdyZXAgLXYgJ14jJyA8IiRHSVRfRElSIi9UQUdfRURJVE1TRyB8CisgICAgZ2l0IHN0cmlwc3BhY2UgPiIkR0lUX0RJUiIvVEFHX0ZJTkFMTVNHCisKKyAgICBbIC1zICIkR0lUX0RJUiIvVEFHX0ZJTkFMTVNHIC1vIC1uICIkbWVzc2FnZV9naXZlbiIgXSB8fCB7CisJZWNobyA+JjIgIk5vIHRhZyBtZXNzYWdlPyIKKwlleGl0IDEKKyAgICB9CisKKyAgICAoIHByaW50ZiAnb2JqZWN0ICVzXG50eXBlICVzXG50YWcgJXNcbnRhZ2dlciAlc1xuXG4nIFwKKwkiJG9iamVjdCIgIiR0eXBlIiAiJG5hbWUiICIkdGFnZ2VyIjsKKyAgICAgIGNhdCAiJEdJVF9ESVIiL1RBR19GSU5BTE1TRyApID4iJEdJVF9ESVIiL1RBR19UTVAKKyAgICBybSAtZiAiJEdJVF9ESVIiL1RBR19UTVAuYXNjICIkR0lUX0RJUiIvVEFHX0ZJTkFMTVNHCisgICAgaWYgWyAiJHNpZ25lZCIgXTsgdGhlbgorCWdwZyAtYnNhIC11ICIkdXNlcm5hbWUiICIkR0lUX0RJUiIvVEFHX1RNUCAmJgorCWNhdCAiJEdJVF9ESVIiL1RBR19UTVAuYXNjID4+IiRHSVRfRElSIi9UQUdfVE1QIHx8CisJZGllICJmYWlsZWQgdG8gc2lnbiB0aGUgdGFnIHdpdGggR1BHLiIKKyAgICBmaQorICAgIG9iamVjdD0kKGdpdC1ta3RhZyA8ICIkR0lUX0RJUiIvVEFHX1RNUCkKK2ZpCisKK2dpdCB1cGRhdGUtcmVmICJyZWZzL3RhZ3MvJG5hbWUiICIkb2JqZWN0IiAiJHByZXYiCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC12ZXJpZnktdGFnLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtdmVyaWZ5LXRhZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOTAyYTVjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtdmVyaWZ5LXRhZy5zaApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKworVVNBR0U9Jzx0YWc+JworU1VCRElSRUNUT1JZX09LPSdZZXMnCisuIGdpdC1zaC1zZXR1cAorCit2ZXJib3NlPQord2hpbGUgdGVzdCAkIyAhPSAwCitkbworCWNhc2UgIiQxIiBpbgorCS12fC0tdnwtLXZlfC0tdmVyfC0tdmVyYnwtLXZlcmJvfC0tdmVyYm9zfC0tdmVyYm9zZSkKKwkJdmVyYm9zZT10IDs7CisJKikKKwkJYnJlYWsgOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworaWYgWyAiJCMiICE9ICIxIiBdCit0aGVuCisJdXNhZ2UKK2ZpCisKK3R5cGU9IiQoZ2l0IGNhdC1maWxlIC10ICIkMSIgMj4vZGV2L251bGwpIiB8fAorCWRpZSAiJDE6IG5vIHN1Y2ggb2JqZWN0LiIKKwordGVzdCAiJHR5cGUiID0gdGFnIHx8CisJZGllICIkMTogY2Fubm90IHZlcmlmeSBhIG5vbi10YWcgb2JqZWN0IG9mIHR5cGUgJHR5cGUuIgorCitjYXNlICIkdmVyYm9zZSIgaW4KK3QpCisJZ2l0IGNhdC1maWxlIC1wICIkMSIgfAorCXNlZCAtbiAtZSAnL14tLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLS9xJyAtZSBwCisJOzsKK2VzYWMKKwordHJhcCAncm0gLWYgIiRHSVRfRElSLy50bXAtdnRhZyInIDAKKworZ2l0IGNhdC1maWxlIHRhZyAiJDEiID4iJEdJVF9ESVIvLnRtcC12dGFnIiB8fCBleGl0IDEKK3NlZCAtbiAtZSAnCisJL14tLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLSQvcQorCXAKKycgPCIkR0lUX0RJUi8udG1wLXZ0YWciIHwKK2dwZyAtLXZlcmlmeSAiJEdJVF9ESVIvLnRtcC12dGFnIiAtIHx8IGV4aXQgMQorcm0gLWYgIiRHSVRfRElSLy50bXAtdnRhZyIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LWltcG9ydC5wZXJsIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjlmZWY2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LWltcG9ydC5wZXJsCkBAIC0wLDAgKzEsNjQgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBQZXJmb3JtcyBhbiBpbml0aWFsIGltcG9ydCBvZiBhIGRpcmVjdG9yeS4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudAorIyBvZiBkb2luZyAnZ2l0IGluaXQ7IGdpdCBhZGQgLjsgZ2l0IGNvbW1pdCcuIEl0J3MgYSBsaXR0bGUgc2xvd2VyLAorIyBidXQgaXMgbWVhbnQgdG8gYmUgYSBzaW1wbGUgZmFzdC1pbXBvcnQgZXhhbXBsZS4KKwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpGaW5kOworCitteSAkVVNBR0UgPSAnVXNhZ2U6IGdpdC1pbXBvcnQgYnJhbmNoIGltcG9ydC1tZXNzYWdlJzsKK215ICRicmFuY2ggPSBzaGlmdCBvciBkaWUgIiRVU0FHRVxuIjsKK215ICRtZXNzYWdlID0gc2hpZnQgb3IgZGllICIkVVNBR0VcbiI7CisKK2Nob21wKG15ICR1c2VybmFtZSA9IGBnaXQgY29uZmlnIHVzZXIubmFtZWApOworY2hvbXAobXkgJGVtYWlsID0gYGdpdCBjb25maWcgdXNlci5lbWFpbGApOworZGllICdZb3UgbmVlZCB0byBzZXQgdXNlciBuYW1lIGFuZCBlbWFpbCcKKyAgdW5sZXNzICR1c2VybmFtZSAmJiAkZW1haWw7CisKK3N5c3RlbSgnZ2l0IGluaXQnKTsKK29wZW4obXkgJGZpLCAnfC0nLCBxdyhnaXQgZmFzdC1pbXBvcnQgLS1kYXRlLWZvcm1hdD1ub3cpKQorICBvciBkaWUgInVuYWJsZSB0byBzcGF3biBmYXN0LWltcG9ydDogJCEiOworCitwcmludCAkZmkgPDxFT0Y7Citjb21taXQgcmVmcy9oZWFkcy8kYnJhbmNoCitjb21taXR0ZXIgJHVzZXJuYW1lIDwkZW1haWw+IG5vdworZGF0YSA8PE1TR0VPRgorJG1lc3NhZ2UKK01TR0VPRgorCitFT0YKKworZmluZCgKKyAgc3ViIHsKKyAgICBpZigkRmlsZTo6RmluZDo6bmFtZSBlcSAnLi8uZ2l0JykgeworICAgICAgJEZpbGU6OkZpbmQ6OnBydW5lID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmV0dXJuIHVubGVzcyAtZiAkXzsKKworICAgIG15ICRmbiA9ICRGaWxlOjpGaW5kOjpuYW1lOworICAgICRmbiA9fiBzI14uXC8jIzsKKworICAgIG9wZW4obXkgJGluLCAnPCcsICRfKQorICAgICAgb3IgZGllICJ1bmFibGUgdG8gb3BlbiAkZm46ICQhIjsKKyAgICBteSBAc3QgPSBzdGF0KCRpbikKKyAgICAgIG9yIGRpZSAidW5hYmxlIHRvIHN0YXQgJGZuOiAkISI7CisgICAgbXkgJGxlbiA9ICRzdFs3XTsKKworICAgIHByaW50ICRmaSAiTSA2NDQgaW5saW5lICRmblxuIjsKKyAgICBwcmludCAkZmkgImRhdGEgJGxlblxuIjsKKyAgICB3aGlsZSgkbGVuID4gMCkgeworICAgICAgbXkgJHIgPSByZWFkKCRpbiwgbXkgJGJ1ZiwgJGxlbiA8IDQwOTYgPyAkbGVuIDogNDA5Nik7CisgICAgICBkZWZpbmVkKCRyKSBvciBkaWUgInJlYWQgZXJyb3IgZnJvbSAkZm46ICQhIjsKKyAgICAgICRyID4gMCBvciBkaWUgInByZW1hdHVyZSBFT0YgZnJvbSAkZm46ICQhIjsKKyAgICAgIHByaW50ICRmaSAkYnVmOworICAgICAgJGxlbiAtPSAkcjsKKyAgICB9CisgICAgcHJpbnQgJGZpICJcbiI7CisKKyAgfSwgJy4nCispOworCitjbG9zZSgkZmkpOworZXhpdCAkPzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LWltcG9ydC5zaCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LWltcG9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wY2E3NzE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorIworIyBQZXJmb3JtcyBhbiBpbml0aWFsIGltcG9ydCBvZiBhIGRpcmVjdG9yeS4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudAorIyBvZiBkb2luZyAnZ2l0IGluaXQ7IGdpdCBhZGQgLjsgZ2l0IGNvbW1pdCcuIEl0J3MgYSBsb3Qgc2xvd2VyLAorIyBidXQgaXMgbWVhbnQgdG8gYmUgYSBzaW1wbGUgZmFzdC1pbXBvcnQgZXhhbXBsZS4KKworaWYgWyAteiAiJDEiIC1vIC16ICIkMiIgXTsgdGhlbgorCWVjaG8gIlVzYWdlOiBnaXQtaW1wb3J0IGJyYW5jaCBpbXBvcnQtbWVzc2FnZSIKKwlleGl0IDEKK2ZpCisKK1VTRVJOQU1FPSIkKGdpdCBjb25maWcgdXNlci5uYW1lKSIKK0VNQUlMPSIkKGdpdCBjb25maWcgdXNlci5lbWFpbCkiCisKK2lmIFsgLXogIiRVU0VSTkFNRSIgLW8gLXogIiRFTUFJTCIgXTsgdGhlbgorCWVjaG8gIllvdSBuZWVkIHRvIHNldCB1c2VyIG5hbWUgYW5kIGVtYWlsIgorCWV4aXQgMQorZmkKKworZ2l0IGluaXQKKworKAorCWNhdCA8PEVPRgorY29tbWl0IHJlZnMvaGVhZHMvJDEKK2NvbW1pdHRlciAkVVNFUk5BTUUgPCRFTUFJTD4gbm93CitkYXRhIDw8TVNHRU9GCiskMgorTVNHRU9GCisKK0VPRgorCWZpbmQgKiAtdHlwZSBmfHdoaWxlIHJlYWQgaTtkbworCQllY2hvICJNIDEwMDY0NCBpbmxpbmUgJGkiCisJCWVjaG8gZGF0YSAkKHN0YXQgLWMgJyVzJyAiJGkiKQorCQljYXQgIiRpIgorCQllY2hvCisJZG9uZQorCWVjaG8KKykgfCBnaXQgZmFzdC1pbXBvcnQgLS1kYXRlLWZvcm1hdD1ub3cKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LXA0LlJFQURNRSBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LXA0LlJFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWM1ZWNmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtcDQuUkVBRE1FCkBAIC0wLDAgKzEsMTIgQEAKK1RoZSBnaXQtcDQgc2NyaXB0IG1vdmVkIHRvIHRoZSB0b3AtbGV2ZWwgb2YgdGhlIGdpdCBzb3VyY2UgZGlyZWN0b3J5LgorCitJbnZva2UgaXQgYXMgYW55IG90aGVyIGdpdCBjb21tYW5kLCBsaWtlICJnaXQgcDQgY2xvbmUiLCBmb3IgaW5zdGFuY2UuCisKK05vdGUgdGhhdCB0aGUgdG9wLWxldmVsIGdpdC1wNC5weSBzY3JpcHQgaXMgbm93IHRoZSBzb3VyY2UuICBJdCBpcworYnVpbHQgdXNpbmcgbWFrZSB0byBnaXQtcDQsIHdoaWNoIHdpbGwgYmUgaW5zdGFsbGVkLgorCitXaW5kb3dzIHVzZXJzIGNhbiBjb3B5IHRoZSBnaXQtcDQucHkgc291cmNlIHNjcmlwdCBkaXJlY3RseSwgcG9zc2libHkKK2ludm9raW5nIGl0IHRocm91Z2ggYSBiYXRjaCBmaWxlIGNhbGxlZCAiZ2l0LXA0LmJhdCIgaW4gdGhlIHNhbWUgZm9sZGVyLgorSXQgc2hvdWxkIGNvbnRhaW4ganVzdCBvbmUgbGluZToKKworICAgIEBweXRob24gIiV+ZDAlfnAwZ2l0LXA0LnB5IiAlKgpkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtZGlyZWN0b3JpZXMucGVybCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LWRpcmVjdG9yaWVzLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2YzYWZhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LWRpcmVjdG9yaWVzLnBlcmwKQEAgLTAsMCArMSw0MTcgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBDb3B5cmlnaHQgMjAwOC0yMDA5IFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9cG9kCisKKz1oZWFkMSBOQU1FCisKK2ltcG9ydC1kaXJlY3RvcmllcyAtIEltcG9ydCBiaXRzIGFuZCBwaWVjZXMgdG8gR2l0LgorCis9aGVhZDEgU1lOT1BTSVMKKworQjxpbXBvcnQtZGlyZWN0b3JpZXMucGVybD4gRjxjb25maWdmaWxlPiBGPG91dHB1dGZpbGU+CisKKz1oZWFkMSBERVNDUklQVElPTgorCitTY3JpcHQgdG8gaW1wb3J0IGFyYml0cmFyeSBwcm9qZWN0cyB2ZXJzaW9uIGNvbnRyb2xsZWQgYnkgdGhlICJjb3B5IHRoZQorc291cmNlIGRpcmVjdG9yeSB0byBhIG5ldyBsb2NhdGlvbiBhbmQgZWRpdCBpdCB0aGVyZSItdmVyc2lvbiBjb250cm9sbGVkCitwcm9qZWN0cyBpbnRvIHZlcnNpb24gY29udHJvbC4gSGFuZGxlcyBwcm9qZWN0cyB3aXRoIGFyYml0cmFyeSBicmFuY2hpbmcKK2FuZCB2ZXJzaW9uIHRyZWVzLCB0YWtpbmcgYSBmaWxlIGRlc2NyaWJpbmcgdGhlIGlucHV0cyBhbmQgZ2VuZXJhdGluZyBhCitmaWxlIGNvbXBhdGlibGUgd2l0aCB0aGUgTDxnaXQtZmFzdC1pbXBvcnQoMSk+IGZvcm1hdC4KKworPWhlYWQxIENPTkZJR1VSQVRJT04gRklMRQorCis9aGVhZDIgRm9ybWF0CisKK1RoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgYmFzZWQgb24gdGhlIHN0YW5kYXJkIEk8LmluaT4gZm9ybWF0LgorCisgOyBDb21tZW50cyBzdGFydCB3aXRoIHNlbWktY29sb25zCisgW3NlY3Rpb25dCisga2V5PXZhbHVlCisKK1BsZWFzZSBzZWUgYmVsb3cgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorCis9aGVhZDIgR2xvYmFsIGNvbmZpZ3VyYXRpb24KKworR2xvYmFsIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBpbiB0aGUgQjxbY29uZmlnXT4gc2VjdGlvbiwgd2hpY2ggc2hvdWxkIGJlCit0aGUgZmlyc3Qgc2VjdGlvbiBpbiB0aGUgZmlsZS4gQ29uZmlndXJhdGlvbiBjYW4gYmUgY2hhbmdlZCBieQorcmVwZWF0aW5nIGNvbmZpZ3VyYXRpb24gc2VjdGlvbnMgbGF0ZXIgb24uCisKKyBbY29uZmlnXQorIDsgY29uZmlndXJlIGNvbnZlcnNpb24gb2YgQ1JMRnMuICJjb252ZXJ0IiBtZWFucyB0aGF0IGFsbCBDUkxGcworIDsgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIExGcyAoc3VpdGFibGUgZm9yIHRoZSBjb3JlLmF1dG9jcmxmCisgOyBzZXR0aW5nIHNldCB0byB0cnVlIGluIEdpdCkuICJub25lIiBtZWFucyB0aGF0IGFsbCBkYXRhIGlzCisgOyB0cmVhdGVkIGFzIGJpbmFyeS4KKyBjcmxmPWNvbnZlcnQKKworPWhlYWQyIFJldmlzaW9uIGNvbmZpZ3VyYXRpb24KKworRWFjaCByZXZpc2lvbiB0aGF0IGlzIHRvIGJlIGltcG9ydGVkIGlzIGRlc2NyaWJlZCBpbiB0aHJlZQorc2VjdGlvbnMuIFJldmlzaW9ucyBzaG91bGQgYmUgZGVmaW5lZCBpbiB0b3BvbG9naWNhbCBvcmRlciwgc28KK3RoYXQgYSByZXZpc2lvbidzIHBhcmVudCBoYXMgYWx3YXlzIGJlZW4gZGVmaW5lZCB3aGVuIGEgbmV3IHJldmlzaW9uCitpcyBpbnRyb2R1Y2VkLiBBbGwgdGhlIHNlY3Rpb25zIGZvciBvbmUgcmV2aXNpb24gbXVzdCBiZSBkZWZpbmVkCitiZWZvcmUgZGVmaW5pbmcgdGhlIG5leHQgcmV2aXNpb24uCisKK0VhY2ggcmV2aXNpb24gaXMgYXNzaWduZWQgYSB1bmlxdWUgbnVtZXJpY2FsIGlkZW50aWZpZXIuIFRoZQorbnVtYmVycyBkbyBub3QgbmVlZCB0byBiZSBjb25zZWN1dGl2ZSwgbm9yIG1vbm90b25pY2FsbHkKK2luY3JlYXNpbmcuCisKK0ZvciBpbnN0YW5jZSwgaWYgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgY29udGFpbnMgb25seSB0aGUgdHdvCityZXZpc2lvbnMgNDcxMSBhbmQgNDIsIHdoZXJlIDQ3MTEgaXMgdGhlIGluaXRpYWwgY29tbWl0LCB0aGUKK29ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCA0NzExIGlzIGNvbXBsZXRlbHkgZGVmaW5lZCBiZWZvcmUgNDIuCisKKz1wb2QKKworPWhlYWQzIFJldmlzaW9uIGRlc2NyaXB0aW9uIHNlY3Rpb24KKworQSBzZWN0aW9uIHdob3NlIHNlY3Rpb24gbmFtZSBpcyBqdXN0IGFuIGludGVnZXIgZ2l2ZXMgbWV0YS1kYXRhCithYm91dCB0aGUgcmV2aXNpb24uCisKKyBbM10KKyA7IGF1dGhvciBzZXRzIHRoZSBhdXRob3Igb2YgdGhlIHJldmlzaW9ucworIGF1dGhvcj1QZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4KKyA7IGJyYW5jaCBzZXRzIHRoZSBicmFuY2ggdGhhdCB0aGUgcmV2aXNpb24gc2hvdWxkIGJlIGNvbW1pdHRlZCB0bworIGJyYW5jaD1tYXN0ZXIKKyA7IHBhcmVudCBkZXNjcmliZXMgdGhlIHJldmlzaW9uIHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzIGNvbW1pdAorIDsgKG9wdGlvbmFsKQorIHBhcmVudD0xCisgOyBtZXJnZXMgZGVzY3JpYmVzIGEgcmV2aXNpb24gdGhhdCBpcyBtZXJnZWQgaW50byB0aGlzIGNvbW1pdAorIDsgKG9wdGlvbmFsOyBjYW4gYmUgcmVwZWF0ZWQpCisgbWVyZ2VzPTIKKyA7IHNlbGVjdHMgb25lIGZpbGUgdG8gdGFrZSB0aGUgdGltZXN0YW1wIGZyb20KKyA7IChvcHRpb25hbDsgaWYgdW5zcGVjaWZpZWQsIHRoZSBtb3N0IHJlY2VudCBmaWxlIGZyb20gdGhlIC5maWxlcworIDsgIHNlY3Rpb24gaXMgdXNlZCkKKyB0aW1lc3RhbXA9My9zb3VyY2UuYworCis9aGVhZDMgUmV2aXNpb24gY29udGVudHMgc2VjdGlvbgorCitBIHNlY3Rpb24gd2hvc2Ugc2VjdGlvbiBuYW1lIGlzIGFuIGludGVnZXIgZm9sbG93ZWQgYnkgQjwuZmlsZXM+CitkZXNjcmliZSBhbGwgdGhlIGZpbGVzIGluY2x1ZGVkIGluIHRoaXMgcmV2aXNpb24uIElmIGEgZmlsZSB0aGF0Cit3YXMgYXZhaWxhYmxlIHByZXZpb3VzbHkgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMgcmV2aXNpb24sIGl0IHdpbGwKK2JlIHJlbW92ZWQuCisKK0lmIGFuIG9uLWRpc2sgcmV2aXNpb24gaXMgaW5jb21wbGV0ZSwgeW91IGNhbiBwb2ludCB0byBmaWxlcyBmcm9tCithIHByZXZpb3VzIHJldmlzaW9uLiBUaGVyZSBhcmUgbm8gcmVzdHJpY3Rpb24gYXMgdG8gd2hlcmUgdGhlIHNvdXJjZQorZmlsZXMgYXJlIGxvY2F0ZWQsIG5vciB0byB0aGUgbmFtZXMgb2YgdGhlbS4KKworIFszLmZpbGVzXQorIDsgdGhlIGtleSBpcyB0aGUgcGF0aCBpbnNpZGUgdGhlIHJlcG9zaXRvcnksIHRoZSB2YWx1ZSBpcyB0aGUgcGF0aAorIDsgYXMgc2VlbiBmcm9tIHRoZSBpbXBvcnRlciBzY3JpcHQuCisgc291cmNlLmM9dmVyLTMuMDAvc291cmNlLmMKKyBzb3VyY2UuaD12ZXItMi45OS9zb3VyY2UuaAorIHJlYWRtZS50eHQ9dmVyLTMuMDAvaW50cm9kdWN0aW9uIHRvIHRoZSBwcm9qZWN0LnR4dAorCitGaWxlIG5hbWVzIGFyZSB0cmVhdGVkIGFzIGJ5dGUgc3RyaW5ncyAoYnV0IHBsZWFzZSBzZWUgYmVsb3cgb24KK3F1b3RpbmcgcnVsZXMpLCBhbmQgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluCit0aGUgZW5jb2RpbmcgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIHJlcG9zaXRvcnkuCisKKz1oZWFkMyBSZXZpc2lvbiBjb21taXQgbWVzc2FnZSBzZWN0aW9uCisKK0Egc2VjdGlvbiB3aG9zZSBzZWN0aW9uIG5hbWUgaXMgYW4gaW50ZWdlciBmb2xsb3dlZCBieSBCPC5tZXNzYWdlPgorZ2l2ZXMgdGhlIGNvbW1pdCBtZXNzYWdlLiBUaGlzIHNlY3Rpb24gaXMgcmVhZCB2ZXJiYXRpbSwgdXAgdW50aWwKK3RoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgc2VjdGlvbi4gQXMgc3VjaCwgYSBjb21taXQgbWVzc2FnZSBtYXkgbm90Citjb250YWluIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIGFuIG9wZW5pbmcgc3F1YXJlIGJyYWNrZXQgKCJbIikgYW5kCitlbmRzIHdpdGggYSBjbG9zaW5nIHNxdWFyZSBicmFja2V0ICgiXSIpLCB1bmxlc3MgdGhleSBhcmUgc3Vycm91bmRlZAorYnkgd2hpdGVzcGFjZSBvciBvdGhlciBjaGFyYWN0ZXJzLgorCisgWzMubWVzc2FnZV0KKyBJbXBsZW1lbnQgZm9vYmFyLgorIDsgdHJhaWxpbmcgYmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuCisKKz1jdXQKKworIyBHbG9iYWxzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIGludGVnZXI7CitteSAkY3JsZm1vZGUgPSAwOworbXkgQHJldnM7CitteSAoJXJldm1hcCwgJW1lc3NhZ2UsICVmaWxlcywgJWF1dGhvciwgJWJyYW5jaCwgJXBhcmVudCwgJW1lcmdlcywgJXRpbWUsICV0aW1lc291cmNlKTsKK215ICRzZWN0aW9udHlwZSA9IDA7CitteSAkcmV2ID0gMDsKK215ICRtYXJrID0gMTsKKworIyBDaGVjayBjb21tYW5kIGxpbmUKK2lmICgkI0FSR1YgPCAxIHx8ICRBUkdWWzBdID1+IC9eLS0/aC8pCit7CisgICAgZXhlYygncGVybGRvYycsICQwKTsKKyAgICBleGl0IDE7Cit9CisKKyMgT3BlbiBjb25maWd1cmF0aW9uCitteSAkY29uZmlnID0gJEFSR1ZbMF07CitvcGVuIENGRywgJzwnLCAkY29uZmlnIG9yIGRpZSAiQ2Fubm90IG9wZW4gY29uZmlndXJhdGlvbiBmaWxlIFwiJGNvbmZpZ1wiOiAiOworCisjIE9wZW4gb3V0cHV0CitteSAkb3V0cHV0ID0gJEFSR1ZbMV07CitvcGVuIE9VVCwgJz4nLCAkb3V0cHV0IG9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBvdXRwdXQgZmlsZSBcIiRvdXRwdXRcIjogIjsKK2Jpbm1vZGUgT1VUOworCitMSU5FOiB3aGlsZSAobXkgJGxpbmUgPSA8Q0ZHPikKK3sKKwkkbGluZSA9fiBzL1xyP1xuJC8vOworCW5leHQgTElORSBpZiAkc2VjdGlvbnR5cGUgIT0gNCAmJiAkbGluZSBlcSAnJzsKKwluZXh0IExJTkUgaWYgJGxpbmUgPX4gL147LzsKKwlteSAkb2xkc2VjdGlvbnR5cGUgPSAkc2VjdGlvbnR5cGU7CisJbXkgJG9sZHJldiA9ICRyZXY7CisKKwkjIFNlY3Rpb25zCisJaWYgKCRsaW5lID1+IG0iXlxbKGNvbmZpZ3woXGQrKSh8XC5maWxlc3xcLm1lc3NhZ2UpKVxdJCIpCisJeworCQlpZiAoJDEgZXEgJ2NvbmZpZycpCisJCXsKKwkJCSRzZWN0aW9udHlwZSA9IDE7CisJCX0KKwkJZWxzaWYgKCQzIGVxICcnKQorCQl7CisJCQkkc2VjdGlvbnR5cGUgPSAyOworCQkJJHJldiA9ICQyOworCQkJIyBDcmVhdGUgYSBuZXcgcmV2aXNpb24KKwkJCWRpZSAiRHVwbGljYXRlIHJldjogJGxpbmVcbiAiIGlmIGRlZmluZWQgJHJldm1hcHskcmV2fTsKKwkJCXByaW50ICJSZWFkaW5nIHJldmlzaW9uICRyZXZcbiI7CisJCQlwdXNoIEByZXZzLCAkcmV2OworCQkJJHJldm1hcHskcmV2fSA9ICRtYXJrICsrOworCQkJJHRpbWV7JHJldm1hcHskcmV2fX0gPSAwOworCQl9CisJCWVsc2lmICgkMyBlcSAnLmZpbGVzJykKKwkJeworCQkJJHNlY3Rpb250eXBlID0gMzsKKwkJCSRyZXYgPSAkMjsKKwkJCWRpZSAiUmV2aXNpb24gbWlzbWF0Y2g6ICRsaW5lXG4gIiB1bmxlc3MgJHJldiA9PSAkb2xkcmV2OworCQl9CisJCWVsc2lmICgkMyBlcSAnLm1lc3NhZ2UnKQorCQl7CisJCQkkc2VjdGlvbnR5cGUgPSA0OworCQkJJHJldiA9ICQyOworCQkJZGllICJSZXZpc2lvbiBtaXNtYXRjaDogJGxpbmVcbiAiIHVubGVzcyAkcmV2ID09ICRvbGRyZXY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlkaWUgIkludGVybmFsIHBhcnNlIGVycm9yOiAkbGluZVxuICI7CisJCX0KKwkJbmV4dCBMSU5FOworCX0KKworCSMgUGFyc2UgZGF0YQorCWlmICgkc2VjdGlvbnR5cGUgIT0gNCkKKwl7CisJCSMgS2V5IGFuZCB2YWx1ZQorCQlpZiAoJGxpbmUgPX4gbSJeXHMqKFteXHNdLio9LipbXlxzXSlccyokIikKKwkJeworCQkJbXkgKCRrZXksICR2YWx1ZSkgPSAmcGFyc2VrZXl2YWx1ZXBhaXIoJDEpOworCQkJIyBHbG9iYWwgY29uZmlndXJhdGlvbgorCQkJaWYgKDEgPT0gJHNlY3Rpb250eXBlKQorCQkJeworCQkJCWlmICgka2V5IGVxICdjcmxmJykKKwkJCQl7CisJCQkJCSRjcmxmbW9kZSA9IDEsIG5leHQgTElORSBpZiAkdmFsdWUgZXEgJ2NvbnZlcnQnOworCQkJCQkkY3JsZm1vZGUgPSAwLCBuZXh0IExJTkUgaWYgJHZhbHVlIGVxICdub25lJzsKKwkJCQl9CisJCQkJZGllICJVbmtub3duIGNvbmZpZ3VyYXRpb24gb3B0aW9uOiAkbGluZVxuICI7CisJCQl9CisJCQkjIFJldmlzaW9uIHNwZWNpZmljYXRpb24KKwkJCWlmICgyID09ICRzZWN0aW9udHlwZSkKKwkJCXsKKwkJCQlteSAkY3VycmVudCA9ICRyZXZtYXB7JHJldn07CisJCQkJJGF1dGhvcnskY3VycmVudH0gPSAkdmFsdWUsIG5leHQgTElORSBpZiAka2V5IGVxICdhdXRob3InOworCQkJCSRicmFuY2h7JGN1cnJlbnR9ID0gJHZhbHVlLCBuZXh0IExJTkUgaWYgJGtleSBlcSAnYnJhbmNoJzsKKwkJCQkkcGFyZW50eyRjdXJyZW50fSA9ICR2YWx1ZSwgbmV4dCBMSU5FIGlmICRrZXkgZXEgJ3BhcmVudCc7CisJCQkJJHRpbWVzb3VyY2V7JGN1cnJlbnR9ID0gJHZhbHVlLCBuZXh0IExJTkUgaWYgJGtleSBlcSAndGltZXN0YW1wJzsKKwkJCQlwdXNoKEB7JG1lcmdlc3skY3VycmVudH19LCAkdmFsdWUpLCBuZXh0IExJTkUgaWYgJGtleSBlcSAnbWVyZ2VzJzsKKwkJCQlkaWUgIlVua25vd24gcmV2aXNpb24gb3B0aW9uOiAkbGluZVxuICI7CisJCQl9CisJCQkjIEZpbGVzcGVjcworCQkJaWYgKDMgPT0gJHNlY3Rpb250eXBlKQorCQkJeworCQkJCSMgQWRkIHRoZSBmaWxlIGFuZCBjcmVhdGUgYSBtYXJrZXIKKwkJCQlkaWUgIkZpbGUgbm90IGZvdW5kOiAkbGluZVxuICIgdW5sZXNzIC1mICR2YWx1ZTsKKwkJCQlteSAkY3VycmVudCA9ICRyZXZtYXB7JHJldn07CisJCQkJJHskZmlsZXN7JGN1cnJlbnR9fXska2V5fSA9ICRtYXJrOworCQkJCW15ICR0aW1lID0gJmZpbGVibG9iKCR2YWx1ZSwgJGNybGZtb2RlLCAkbWFyayArKyk7CisKKwkJCQkjIFVwZGF0ZSByZXZpc2lvbiB0aW1lc3RhbXAgaWYgbW9yZSByZWNlbnQgdGhhbiBvdGhlcgorCQkJCSMgZmlsZXMgc2Vlbiwgb3IgaWYgdGhpcyBpcyB0aGUgZmlsZSB3ZSBoYXZlIHNlbGVjdGVkCisJCQkJIyB0byB0YWtlIHRoZSB0aW1lIHN0YW1wIGZyb20gdXNpbmcgdGhlICJ0aW1lc3RhbXAiCisJCQkJIyBkaXJlY3RpdmUuCisJCQkJaWYgKChkZWZpbmVkICR0aW1lc291cmNleyRjdXJyZW50fSAmJiAkdGltZXNvdXJjZXskY3VycmVudH0gZXEgJHZhbHVlKQorCQkJCSAgICB8fCAkdGltZSA+ICR0aW1leyRjdXJyZW50fSkKKwkJCQl7CisJCQkJCSR0aW1leyRjdXJyZW50fSA9ICR0aW1lOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWRpZSAiUGFyc2UgZXJyb3I6ICRsaW5lXG4gIjsKKwkJfQorCX0KKwllbHNlCisJeworCQkjIENvbW1pdCBtZXNzYWdlCisJCW15ICRjdXJyZW50ID0gJHJldm1hcHskcmV2fTsKKwkJaWYgKGRlZmluZWQgJG1lc3NhZ2V7JGN1cnJlbnR9KQorCQl7CisJCQkkbWVzc2FnZXskY3VycmVudH0gLj0gIlxuIjsKKwkJfQorCQkkbWVzc2FnZXskY3VycmVudH0gLj0gJGxpbmU7CisJfQorfQorY2xvc2UgQ0ZHOworCisjIFN0YXJ0IHNwZXdpbmcgb3V0IGRhdGEgZm9yIGdpdC1mYXN0LWltcG9ydAorZm9yZWFjaCBteSAkY29tbWl0IChAcmV2cykKK3sKKwkjIFByb2dyZXNzCisJcHJpbnQgT1VUICJwcm9ncmVzcyBDcmVhdGluZyByZXZpc2lvbiAkY29tbWl0XG4iOworCisJIyBDcmVhdGUgY29tbWl0IGhlYWRlcgorCW15ICRtYXJrID0gJHJldm1hcHskY29tbWl0fTsKKworCSMgQnJhbmNoIGFuZCBjb21taXQgaWQKKwlwcmludCBPVVQgImNvbW1pdCByZWZzL2hlYWRzLyIsICRicmFuY2h7JG1hcmt9LCAiXG5tYXJrIDoiLCAkbWFyaywgIlxuIjsKKworCSMgQXV0aG9yIGFuZCB0aW1lc3RhbXAKKwlkaWUgIk5vIHRpbWVzdGFtcCBkZWZpbmVkIGZvciAkY29tbWl0IChubyBmaWxlcz8pXG4iIHVubGVzcyBkZWZpbmVkICR0aW1leyRtYXJrfTsKKwlwcmludCBPVVQgImNvbW1pdHRlciAiLCAkYXV0aG9yeyRtYXJrfSwgIiAiLCAkdGltZXskbWFya30sICIgKzAxMDBcbiI7CisKKwkjIENvbW1pdCBtZXNzYWdlCisJZGllICJObyBtZXNzYWdlIGRlZmluZWQgZm9yICRjb21taXRcbiIgdW5sZXNzIGRlZmluZWQgJG1lc3NhZ2V7JG1hcmt9OworCW15ICRtZXNzYWdlID0gJG1lc3NhZ2V7JG1hcmt9OworCSRtZXNzYWdlID1+IHMvXG4kLy87ICMgS2lsbCB0cmFpbGluZyBlbXB0eSBsaW5lCisJcHJpbnQgT1VUICJkYXRhICIsIGxlbmd0aCgkbWVzc2FnZSksICJcbiIsICRtZXNzYWdlLCAiXG4iOworCisJIyBQYXJlbnQgYW5kIGFueSBtZXJnZXMKKwlwcmludCBPVVQgImZyb20gOiIsICRyZXZtYXB7JHBhcmVudHskbWFya319LCAiXG4iIGlmIGRlZmluZWQgJHBhcmVudHskbWFya307CisJaWYgKGRlZmluZWQgJG1lcmdlc3skbWFya30pCisJeworCQlmb3JlYWNoIG15ICRtZXJnZSAoQHskbWVyZ2VzeyRtYXJrfX0pCisJCXsKKwkJCXByaW50IE9VVCAibWVyZ2UgOiIsICRyZXZtYXB7JG1lcmdlfSwgIlxuIjsKKwkJfQorCX0KKworCSMgT3V0cHV0IGZpbGUgbWFya3MKKwlwcmludCBPVVQgImRlbGV0ZWFsbFxuIjsgIyBzdGFydCBmcm9tIHNjcmF0Y2gKKwlmb3JlYWNoIG15ICRmaWxlIChzb3J0IGtleXMgJXskZmlsZXN7JG1hcmt9fSkKKwl7CisJCXByaW50IE9VVCAiTSA2NDQgOiIsICR7JGZpbGVzeyRtYXJrfX17JGZpbGV9LCAiICRmaWxlXG4iOworCX0KKwlwcmludCBPVVQgIlxuIjsKK30KKworIyBDcmVhdGUgb25lIGZpbGUgYmxvYgorc3ViIGZpbGVibG9iCit7CisJbXkgKCRmaWxlbmFtZSwgJGNybGZtb2RlLCAkbWFyaykgPSBAXzsKKworCSMgSW1wb3J0IHRoZSBmaWxlCisJcHJpbnQgT1VUICJwcm9ncmVzcyBJbXBvcnRpbmcgJGZpbGVuYW1lXG5ibG9iXG5tYXJrIDokbWFya1xuIjsKKwlvcGVuIEZJTEUsICc8JywgJGZpbGVuYW1lIG9yIGRpZSAiQ2Fubm90IHJlYWQgJGZpbGVuYW1lXG4gIjsKKwliaW5tb2RlIEZJTEU7CisJbXkgKCRzaXplLCAkbXRpbWUpID0gKHN0YXQoRklMRSkpWzcsOV07CisJbXkgJGZpbGU7CisJcmVhZCBGSUxFLCAkZmlsZSwgJHNpemU7CisJY2xvc2UgRklMRTsKKwkkZmlsZSA9fiBzL1xyXG4vXG4vZyBpZiAkY3JsZm1vZGU7CisJcHJpbnQgT1VUICJkYXRhICIsIGxlbmd0aCgkZmlsZSksICJcbiIsICRmaWxlLCAiXG4iOworCisJcmV0dXJuICRtdGltZTsKK30KKworIyBQYXJzZSBhIGtleT12YWx1ZSBwYWlyCitzdWIgcGFyc2VrZXl2YWx1ZXBhaXIKK3sKKz1wb2QKKworPWhlYWQyIEVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycworCitLZXkgYW5kIHZhbHVlIHN0cmluZ3MgbWF5IGJlIGVuY2xvc2VkIGluIHF1b3RlcywgaW4gd2hpY2ggY2FzZQord2hpdGVzcGFjZSBpbnNpZGUgdGhlIHF1b3RlcyBpcyBwcmVzZXJ2ZWQuIEFkZGl0aW9uYWxseSwgYW4gZXF1YWwKK3NpZ24gbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBrZXkgYnkgcHJlY2VkaW5nIGl0IHdpdGggYSBiYWNrc2xhc2guCitGb3IgZXhhbXBsZToKKworICJrZXkxICI9dmFsdWUxCisga2V5Mj0iIHZhbHVlMiIKKyBrZXlcPTM9dmFsdWUzCisga2V5ND12YWx1ZT00CisgImtleTUiIj12YWx1ZTUKKworSGVyZSB0aGUgZmlyc3Qga2V5IGlzICJrZXkxICIgKG5vdGUgdGhlIHRyYWlsaW5nIHdoaXRlLXNwYWNlKSBhbmQgdGhlCitzZWNvbmQgdmFsdWUgaXMgIiB2YWx1ZTIiIChub3RlIHRoZSBsZWFkaW5nIHdoaXRlLXNwYWNlKS4gVGhlIHRoaXJkCitrZXkgY29udGFpbnMgYW4gZXF1YWwgc2lnbiAia2V5PTMiIGFuZCBzbyBkb2VzIHRoZSBmb3VydGggdmFsdWUsIHdoaWNoCitkb2VzIG5vdCBuZWVkIHRvIGJlIGVzY2FwZWQuIFRoZSBmaWZ0aCBrZXkgY29udGFpbnMgYSB0cmFpbGluZyBxdW90ZSwKK3doaWNoIGRvZXMgbm90IG5lZWQgdG8gYmUgZXNjYXBlZCBzaW5jZSBpdCBpcyBpbnNpZGUgYSBzdXJyb3VuZGluZworcXVvdGUuCisKKz1jdXQKKwlteSAkcGFpciA9IHNoaWZ0OworCisJIyBTZXBhcmF0ZSBrZXkgYW5kIHZhbHVlIGJ5IHRoZSBmaXJzdCBub24tcXVvdGVkIGVxdWFsIHNpZ24KKwlteSAoJGtleSwgJHZhbHVlKTsKKwlpZiAoJHBhaXIgPX4gL14oLipbXlxcXSk9KC4qKSQvKQorCXsKKwkJKCRrZXksICR2YWx1ZSkgPSAoJDEsICQyKQorCX0KKwllbHNlCisJeworCQlkaWUgIlBhcnNlIGVycm9yOiAkcGFpclxuICI7CisJfQorCisJIyBVbnF1b3RlIGFuZCB1bmVzY2FwZSB0aGUga2V5IGFuZCB2YWx1ZSBzZXBhcmF0ZWx5CisJcmV0dXJuICgmdW5lc2NhcGUoJGtleSksICZ1bmVzY2FwZSgkdmFsdWUpKTsKK30KKworIyBVbnF1b3RlIGFuZCB1bmVzY2FwZQorc3ViIHVuZXNjYXBlCit7CisJbXkgJHN0cmluZyA9IHNoaWZ0OworCisJIyBGaXJzdCByZW1vdmUgZW5jbG9zaW5nIHF1b3Rlcy4gQmFja3NsYXNoIGJlZm9yZSB0aGUgdHJhaWxpbmcKKwkjIHF1b3RlIGxlYXZlcyBib3RoLgorCWlmICgkc3RyaW5nID1+IC9eIiguKlteXFxdKSIkLykKKwl7CisJCSRzdHJpbmcgPSAkMTsKKwl9CisKKwkjIFNlY29uZCByZW1vdmUgYW55IGJhY2tzbGFzaGVzIGluc2lkZSB0aGUgdW5xdW90ZWQgc3RyaW5nLgorCSMgRm9yIGxhdGVyOiBIYW5kbGUgc3BlY2lhbCBzZXF1ZW5jZXMgbGlrZSBcdCA/CisJJHN0cmluZyA9fiBzL1xcKC4pLyQxL2c7CisKKwlyZXR1cm4gJHN0cmluZzsKK30KKworX19FTkRfXworCis9cG9kCisKKz1oZWFkMSBFWEFNUExFUworCitCPGltcG9ydC1kaXJlY3Rvcmllcy5wZXJsPiBGPHByb2plY3QuaW1wb3J0PgorCis9aGVhZDEgQVVUSE9SCisKK0NvcHlyaWdodCAyMDA4LTIwMDkgUGV0ZXIgS3JlZnRpbmcgRTxsdD5wZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKz1jdXQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NTQzOGUxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsCkBAIC0wLDAgKzEsMTg5IEBACisjIS91c3IvYmluL3BlcmwKKworIyMgdGFyIGFyY2hpdmUgZnJvbnRlbmQgZm9yIGdpdC1mYXN0LWltcG9ydAorIyMKKyMjIEZvciBleGFtcGxlOgorIyMKKyMjICBta2RpciBwcm9qZWN0OyBjZCBwcm9qZWN0OyBnaXQgaW5pdAorIyMgIHBlcmwgaW1wb3J0LXRhcnMucGVybCAqLnRhci5iejIKKyMjICBnaXQgd2hhdGNoYW5nZWQgaW1wb3J0LXRhcnMKKyMjCisjIyBVc2UgLS1tZXRhaW5mbyB0byBzcGVjaWZ5IHRoZSBleHRlbnNpb24gZm9yIGEgbWV0YSBkYXRhIGZpbGUsIHdoZXJlCisjIyBpbXBvcnQtdGFycyBjYW4gcmVhZCB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIG9wdGlvbmFsbHkgYXV0aG9yIGFuZAorIyMgY29tbWl0dGVyIGluZm9ybWF0aW9uLgorIyMKKyMjICBlY2hvICdUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZScgPiBteWZpbGUudGFyLmJ6Mi5tc2cKKyMjICBwZXJsIGltcG9ydC10YXJzLnBlcmwgLS1tZXRhaW5mbz1tc2cgbXlmaWxlLnRhci5iejIKKwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKK215ICRtZXRhZXh0ID0gJyc7CisKK2RpZSAidXNhZ2U6IGltcG9ydC10YXJzIFstLW1ldGFpbmZvPWV4dGVuc2lvbl0gKi50YXIue2d6LGJ6Mixsem1hLHh6LFp9XG4iCisJdW5sZXNzIEdldE9wdGlvbnMoJ21ldGFpbmZvPXMnID0+IFwkbWV0YWV4dCkgJiYgQEFSR1Y7CisKK215ICRicmFuY2hfbmFtZSA9ICdpbXBvcnQtdGFycyc7CitteSAkYnJhbmNoX3JlZiA9ICJyZWZzL2hlYWRzLyRicmFuY2hfbmFtZSI7CitteSAkYXV0aG9yX25hbWUgPSAkRU5WeydHSVRfQVVUSE9SX05BTUUnfSB8fCAnVCBBciBDcmVhdG9yJzsKK215ICRhdXRob3JfZW1haWwgPSAkRU5WeydHSVRfQVVUSE9SX0VNQUlMJ30gfHwgJ3RhckBleGFtcGxlLmNvbSc7CitteSAkY29tbWl0dGVyX25hbWUgPSAkRU5WeydHSVRfQ09NTUlUVEVSX05BTUUnfSB8fCBgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWVgOworbXkgJGNvbW1pdHRlcl9lbWFpbCA9ICRFTlZ7J0dJVF9DT01NSVRURVJfRU1BSUwnfSB8fCBgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLmVtYWlsYDsKKworY2hvbXAoJGNvbW1pdHRlcl9uYW1lLCAkY29tbWl0dGVyX2VtYWlsKTsKKworb3BlbihGSSwgJ3wtJywgJ2dpdCcsICdmYXN0LWltcG9ydCcsICctLXF1aWV0JykKKwlvciBkaWUgIlVuYWJsZSB0byBzdGFydCBnaXQgZmFzdC1pbXBvcnQ6ICQhXG4iOworZm9yZWFjaCBteSAkdGFyX2ZpbGUgKEBBUkdWKQoreworCW15ICRjb21taXRfdGltZSA9IHRpbWU7CisJJHRhcl9maWxlID1+IG0sKFteL10rKSQsOworCW15ICR0YXJfbmFtZSA9ICQxOworCisJaWYgKCR0YXJfbmFtZSA9fiBzL1wuKHRhclwuZ3p8dGd6KSQvLykgeworCQlvcGVuKEksICctfCcsICdndW56aXAnLCAnLWMnLCAkdGFyX2ZpbGUpCisJCQlvciBkaWUgIlVuYWJsZSB0byBndW56aXAgLWMgJHRhcl9maWxlOiAkIVxuIjsKKwl9IGVsc2lmICgkdGFyX25hbWUgPX4gcy9cLih0YXJcLmJ6Mnx0YnoyKSQvLykgeworCQlvcGVuKEksICctfCcsICdidW56aXAyJywgJy1jJywgJHRhcl9maWxlKQorCQkJb3IgZGllICJVbmFibGUgdG8gYnVuemlwMiAtYyAkdGFyX2ZpbGU6ICQhXG4iOworCX0gZWxzaWYgKCR0YXJfbmFtZSA9fiBzL1wudGFyXC5aJC8vKSB7CisJCW9wZW4oSSwgJy18JywgJ3VuY29tcHJlc3MnLCAnLWMnLCAkdGFyX2ZpbGUpCisJCQlvciBkaWUgIlVuYWJsZSB0byB1bmNvbXByZXNzIC1jICR0YXJfZmlsZTogJCFcbiI7CisJfSBlbHNpZiAoJHRhcl9uYW1lID1+IHMvXC4odGFyXC4obHptYXx4eil8KHRsenx0eHopKSQvLykgeworCQlvcGVuKEksICctfCcsICd4eicsICctZGMnLCAkdGFyX2ZpbGUpCisJCQlvciBkaWUgIlVuYWJsZSB0byB4eiAtZGMgJHRhcl9maWxlOiAkIVxuIjsKKwl9IGVsc2lmICgkdGFyX25hbWUgPX4gcy9cLnRhciQvLykgeworCQlvcGVuKEksICR0YXJfZmlsZSkgb3IgZGllICJVbmFibGUgdG8gb3BlbiAkdGFyX2ZpbGU6ICQhXG4iOworCX0gZWxzZSB7CisJCWRpZSAiVW5yZWNvZ25pemVkIGNvbXByZXNzaW9uIGZvcm1hdDogJHRhcl9maWxlXG4iOworCX0KKworCW15ICRhdXRob3JfdGltZSA9IDA7CisJbXkgJG5leHRfbWFyayA9IDE7CisJbXkgJGhhdmVfdG9wX2RpciA9IDE7CisJbXkgKCR0b3BfZGlyLCAlZmlsZXMpOworCisJd2hpbGUgKHJlYWQoSSwgJF8sIDUxMikgPT0gNTEyKSB7CisJCW15ICgkbmFtZSwgJG1vZGUsICR1aWQsICRnaWQsICRzaXplLCAkbXRpbWUsCisJCQkkY2hrc3VtLCAkdHlwZWZsYWcsICRsaW5rbmFtZSwgJG1hZ2ljLAorCQkJJHZlcnNpb24sICR1bmFtZSwgJGduYW1lLCAkZGV2bWFqb3IsICRkZXZtaW5vciwKKwkJCSRwcmVmaXgpID0gdW5wYWNrICdaMTAwIFo4IFo4IFo4IFoxMiBaMTIKKwkJCVo4IFoxIFoxMDAgWjYKKwkJCVoyIFozMiBaMzIgWjggWjggWionLCAkXzsKKwkJbGFzdCB1bmxlc3MgbGVuZ3RoKCRuYW1lKTsKKwkJaWYgKCRuYW1lIGVxICcuLy4vQExvbmdMaW5rJykgeworCQkJIyBHTlUgdGFyIGV4dGVuc2lvbgorCQkJaWYgKHJlYWQoSSwgJF8sIDUxMikgIT0gNTEyKSB7CisJCQkJZGllICgnU2hvcnQgYXJjaGl2ZScpOworCQkJfQorCQkJJG5hbWUgPSB1bnBhY2sgJ1oyNTcnLCAkXzsKKwkJCW5leHQgdW5sZXNzICRuYW1lOworCisJCQlteSAkZHVtbXk7CisJCQlpZiAocmVhZChJLCAkXywgNTEyKSAhPSA1MTIpIHsKKwkJCQlkaWUgKCdTaG9ydCBhcmNoaXZlJyk7CisJCQl9CisJCQkoJGR1bW15LCAkbW9kZSwgJHVpZCwgJGdpZCwgJHNpemUsICRtdGltZSwKKwkJCSRjaGtzdW0sICR0eXBlZmxhZywgJGxpbmtuYW1lLCAkbWFnaWMsCisJCQkkdmVyc2lvbiwgJHVuYW1lLCAkZ25hbWUsICRkZXZtYWpvciwgJGRldm1pbm9yLAorCQkJJHByZWZpeCkgPSB1bnBhY2sgJ1oxMDAgWjggWjggWjggWjEyIFoxMgorCQkJWjggWjEgWjEwMCBaNgorCQkJWjIgWjMyIFozMiBaOCBaOCBaKicsICRfOworCQl9CisJCW5leHQgaWYgJG5hbWUgPX4gbXsvXHp9OworCQkkbW9kZSA9IG9jdCAkbW9kZTsKKwkJJHNpemUgPSBvY3QgJHNpemU7CisJCSRtdGltZSA9IG9jdCAkbXRpbWU7CisJCW5leHQgaWYgJHR5cGVmbGFnID09IDU7ICMgZGlyZWN0b3J5CisKKwkJcHJpbnQgRkkgImJsb2JcbiIsICJtYXJrIDokbmV4dF9tYXJrXG4iOworCQlpZiAoJHR5cGVmbGFnID09IDIpIHsgIyBzeW1ib2xpYyBsaW5rCisJCQlwcmludCBGSSAiZGF0YSAiLCBsZW5ndGgoJGxpbmtuYW1lKSwgIlxuIiwgJGxpbmtuYW1lOworCQkJJG1vZGUgPSAwMTIwMDAwOworCQl9IGVsc2UgeworCQkJcHJpbnQgRkkgImRhdGEgJHNpemVcbiI7CisJCQl3aGlsZSAoJHNpemUgPiAwICYmIHJlYWQoSSwgJF8sIDUxMikgPT0gNTEyKSB7CisJCQkJcHJpbnQgRkkgc3Vic3RyKCRfLCAwLCAkc2l6ZSk7CisJCQkJJHNpemUgLT0gNTEyOworCQkJfQorCQl9CisJCXByaW50IEZJICJcbiI7CisKKwkJbXkgJHBhdGg7CisJCWlmICgkcHJlZml4KSB7CisJCQkkcGF0aCA9ICIkcHJlZml4LyRuYW1lIjsKKwkJfSBlbHNlIHsKKwkJCSRwYXRoID0gIiRuYW1lIjsKKwkJfQorCQkkZmlsZXN7JHBhdGh9ID0gWyRuZXh0X21hcmsrKywgJG1vZGVdOworCisJCSRhdXRob3JfdGltZSA9ICRtdGltZSBpZiAkbXRpbWUgPiAkYXV0aG9yX3RpbWU7CisJCSRwYXRoID1+IG0sXihbXi9dKykvLDsKKwkJJHRvcF9kaXIgPSAkMSB1bmxlc3MgJHRvcF9kaXI7CisJCSRoYXZlX3RvcF9kaXIgPSAwIGlmICR0b3BfZGlyIG5lICQxOworCX0KKworCW15ICRjb21taXRfbXNnID0gIkltcG9ydGVkIGZyb20gJHRhcl9maWxlLiI7CisJbXkgJHRoaXNfY29tbWl0dGVyX25hbWUgPSAkY29tbWl0dGVyX25hbWU7CisJbXkgJHRoaXNfY29tbWl0dGVyX2VtYWlsID0gJGNvbW1pdHRlcl9lbWFpbDsKKwlteSAkdGhpc19hdXRob3JfbmFtZSA9ICRhdXRob3JfbmFtZTsKKwlteSAkdGhpc19hdXRob3JfZW1haWwgPSAkYXV0aG9yX2VtYWlsOworCWlmICgkbWV0YWV4dCBuZSAnJykgeworCQkjIE9wdGlvbmFsbHkgcmVhZCBhIGNvbW1pdCBtZXNzYWdlIGZyb20gPGZpbGVuYW1lLnRhcj4ubXNnCisJCSMgQWRkIGEgbGluZSBvbiB0aGUgZm9ybSAiQ29tbWl0dGVyOiBuYW1lIDxlLW1haWw+IiB0byBvdmVycmlkZQorCQkjIHRoZSBjb21taXR0ZXIgYW5kICJBdXRob3I6IG5hbWUgPGUtbWFpbD4iIHRvIG92ZXJyaWRlIHRoZQorCQkjIGF1dGhvciBmb3IgdGhpcyB0YXIgYmFsbC4KKwkJaWYgKG9wZW4gTVNHLCAnPCcsICIke3Rhcl9maWxlfS4ke21ldGFleHR9IikgeworCQkJbXkgJGhlYWRlcl9kb25lID0gMDsKKwkJCSRjb21taXRfbXNnID0gJyc7CisJCQl3aGlsZSAoPE1TRz4pIHsKKwkJCQlpZiAoISRoZWFkZXJfZG9uZSAmJiAvXkNvbW1pdHRlcjpccysoW148Pl0qKVxzKzwoLiopPlxzKiQvaSkgeworCQkJCQkkdGhpc19jb21taXR0ZXJfbmFtZSA9ICQxOworCQkJCQkkdGhpc19jb21taXR0ZXJfZW1haWwgPSAkMjsKKwkJCQl9IGVsc2lmICghJGhlYWRlcl9kb25lICYmIC9eQXV0aG9yOlxzKyhbXjw+XSopXHMrPCguKik+XHMqJC9pKSB7CisJCQkJCSR0aGlzX2F1dGhvcl9uYW1lID0gJDE7CisJCQkJCSR0aGlzX2F1dGhvcl9lbWFpbCA9ICQyOworCQkJCX0gZWxzaWYgKCEkaGVhZGVyX2RvbmUgJiYgL14kLykgeyAjIGVtcHR5IGxpbmUgZW5kcyBoZWFkZXIuCisJCQkJCSRoZWFkZXJfZG9uZSA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJJGNvbW1pdF9tc2cgLj0gJF87CisJCQkJCSRoZWFkZXJfZG9uZSA9IDE7CisJCQkJfQorCQkJfQorCQkJY2xvc2UgTVNHOworCQl9CisJfQorCisJcHJpbnQgRkkgPDxFT0Y7Citjb21taXQgJGJyYW5jaF9yZWYKK2F1dGhvciAkdGhpc19hdXRob3JfbmFtZSA8JHRoaXNfYXV0aG9yX2VtYWlsPiAkYXV0aG9yX3RpbWUgKzAwMDAKK2NvbW1pdHRlciAkdGhpc19jb21taXR0ZXJfbmFtZSA8JHRoaXNfY29tbWl0dGVyX2VtYWlsPiAkY29tbWl0X3RpbWUgKzAwMDAKK2RhdGEgPDxFTkRfT0ZfQ09NTUlUX01FU1NBR0UKKyRjb21taXRfbXNnCitFTkRfT0ZfQ09NTUlUX01FU1NBR0UKKworZGVsZXRlYWxsCitFT0YKKworCWZvcmVhY2ggbXkgJHBhdGggKGtleXMgJWZpbGVzKQorCXsKKwkJbXkgKCRtYXJrLCAkbW9kZSkgPSBAeyRmaWxlc3skcGF0aH19OworCQkkcGF0aCA9fiBzLF4oW14vXSspLywsIGlmICRoYXZlX3RvcF9kaXI7CisJCSRtb2RlID0gJG1vZGUgJiAwMTExID8gMDc1NSA6IDA2NDQgdW5sZXNzICRtb2RlID09IDAxMjAwMDA7CisJCXByaW50ZiBGSSAiTSAlbyA6JWkgJXNcbiIsICRtb2RlLCAkbWFyaywgJHBhdGg7CisJfQorCXByaW50IEZJICJcbiI7CisKKwlwcmludCBGSSA8PEVPRjsKK3RhZyAkdGFyX25hbWUKK2Zyb20gJGJyYW5jaF9yZWYKK3RhZ2dlciAkYXV0aG9yX25hbWUgPCRhdXRob3JfZW1haWw+ICRhdXRob3JfdGltZSArMDAwMAorZGF0YSA8PEVORF9PRl9UQUdfTUVTU0FHRQorUGFja2FnZSAkdGFyX25hbWUKK0VORF9PRl9UQUdfTUVTU0FHRQorCitFT0YKKworCWNsb3NlIEk7Cit9CitjbG9zZSBGSTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXppcHMucHkgYi9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC16aXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyZjVlZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC16aXBzLnB5CkBAIC0wLDAgKzEsNzMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIyB6aXAgYXJjaGl2ZSBmcm9udGVuZCBmb3IgZ2l0LWZhc3QtaW1wb3J0CisjIworIyMgRm9yIGV4YW1wbGU6CisjIworIyMgIG1rZGlyIHByb2plY3Q7IGNkIHByb2plY3Q7IGdpdCBpbml0CisjIyAgcHl0aG9uIGltcG9ydC16aXBzLnB5ICouemlwCisjIyAgZ2l0IGxvZyAtLXN0YXQgaW1wb3J0LXppcHMKKworZnJvbSBvcyBpbXBvcnQgcG9wZW4sIHBhdGgKK2Zyb20gc3lzIGltcG9ydCBhcmd2LCBleGl0Citmcm9tIHRpbWUgaW1wb3J0IG1rdGltZQorZnJvbSB6aXBmaWxlIGltcG9ydCBaaXBGaWxlCisKK2lmIGxlbihhcmd2KSA8IDI6CisJcHJpbnQgJ1VzYWdlOicsIGFyZ3ZbMF0sICc8emlwZmlsZT4uLi4nCisJZXhpdCgxKQorCiticmFuY2hfcmVmID0gJ3JlZnMvaGVhZHMvaW1wb3J0LXppcHMnCitjb21taXR0ZXJfbmFtZSA9ICdaIElwIENyZWF0b3InCitjb21taXR0ZXJfZW1haWwgPSAnemlwQGV4YW1wbGUuY29tJworCitmYXN0X2ltcG9ydCA9IHBvcGVuKCdnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCcsICd3JykKK2RlZiBwcmludGxpbmVzKGxpc3QpOgorCWZvciBzdHIgaW4gbGlzdDoKKwkJZmFzdF9pbXBvcnQud3JpdGUoc3RyICsgIlxuIikKKworZm9yIHppcGZpbGUgaW4gYXJndlsxOl06CisJY29tbWl0X3RpbWUgPSAwCisJbmV4dF9tYXJrID0gMQorCWNvbW1vbl9wcmVmaXggPSBOb25lCisJbWFyayA9IGRpY3QoKQorCisJemlwID0gWmlwRmlsZSh6aXBmaWxlLCAncicpCisJZm9yIG5hbWUgaW4gemlwLm5hbWVsaXN0KCk6CisJCWlmIG5hbWUuZW5kc3dpdGgoJy8nKToKKwkJCWNvbnRpbnVlCisJCWluZm8gPSB6aXAuZ2V0aW5mbyhuYW1lKQorCisJCWlmIGNvbW1pdF90aW1lIDwgaW5mby5kYXRlX3RpbWU6CisJCQljb21taXRfdGltZSA9IGluZm8uZGF0ZV90aW1lCisJCWlmIGNvbW1vbl9wcmVmaXggPT0gTm9uZToKKwkJCWNvbW1vbl9wcmVmaXggPSBuYW1lWzpuYW1lLnJmaW5kKCcvJykgKyAxXQorCQllbHNlOgorCQkJd2hpbGUgbm90IG5hbWUuc3RhcnRzd2l0aChjb21tb25fcHJlZml4KToKKwkJCQlsYXN0X3NsYXNoID0gY29tbW9uX3ByZWZpeFs6LTFdLnJmaW5kKCcvJykgKyAxCisJCQkJY29tbW9uX3ByZWZpeCA9IGNvbW1vbl9wcmVmaXhbOmxhc3Rfc2xhc2hdCisKKwkJbWFya1tuYW1lXSA9ICc6JyArIHN0cihuZXh0X21hcmspCisJCW5leHRfbWFyayArPSAxCisKKwkJcHJpbnRsaW5lcygoJ2Jsb2InLCAnbWFyayAnICsgbWFya1tuYW1lXSwgXAorCQkJCQknZGF0YSAnICsgc3RyKGluZm8uZmlsZV9zaXplKSkpCisJCWZhc3RfaW1wb3J0LndyaXRlKHppcC5yZWFkKG5hbWUpICsgIlxuIikKKworCWNvbW1pdHRlciA9IGNvbW1pdHRlcl9uYW1lICsgJyA8JyArIGNvbW1pdHRlcl9lbWFpbCArICc+ICVkICswMDAwJyAlIFwKKwkJbWt0aW1lKGNvbW1pdF90aW1lICsgKDAsIDAsIDApKQorCisJcHJpbnRsaW5lcygoJ2NvbW1pdCAnICsgYnJhbmNoX3JlZiwgJ2NvbW1pdHRlciAnICsgY29tbWl0dGVyLCBcCisJCSdkYXRhIDw8RU9NJywgJ0ltcG9ydGVkIGZyb20gJyArIHppcGZpbGUgKyAnLicsICdFT00nLCBcCisJCScnLCAnZGVsZXRlYWxsJykpCisKKwlmb3IgbmFtZSBpbiBtYXJrLmtleXMoKToKKwkJZmFzdF9pbXBvcnQud3JpdGUoJ00gMTAwNjQ0ICcgKyBtYXJrW25hbWVdICsgJyAnICsKKwkJCW5hbWVbbGVuKGNvbW1vbl9wcmVmaXgpOl0gKyAiXG4iKQorCisJcHJpbnRsaW5lcygoJycsICAndGFnICcgKyBwYXRoLmJhc2VuYW1lKHppcGZpbGUpLCBcCisJCSdmcm9tICcgKyBicmFuY2hfcmVmLCAndGFnZ2VyICcgKyBjb21taXR0ZXIsIFwKKwkJJ2RhdGEgPDxFT00nLCAnUGFja2FnZSAnICsgemlwZmlsZSwgJ0VPTScsICcnKSkKKworaWYgZmFzdF9pbXBvcnQuY2xvc2UoKToKKwlleGl0KDEpCmRpZmYgLS1naXQgYS9jb250cmliL2dpdC1qdW1wL1JFQURNRSBiL2NvbnRyaWIvZ2l0LWp1bXAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZWJjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdC1qdW1wL1JFQURNRQpAQCAtMCwwICsxLDkyIEBACitnaXQtanVtcAorPT09PT09PT0KKworR2l0LWp1bXAgaXMgYSBzY3JpcHQgZm9yIGhlbHBpbmcgeW91IGp1bXAgdG8gImludGVyZXN0aW5nIiBwYXJ0cyBvZiB5b3VyCitwcm9qZWN0IGluIHlvdXIgZWRpdG9yLiBJdCB3b3JrcyBieSBvdXRwdXR0aW5nIGEgc2V0IG9mIGludGVyZXN0aW5nCitzcG90cyBpbiB0aGUgInF1aWNrZml4IiBmb3JtYXQsIHdoaWNoIGVkaXRvcnMgbGlrZSB2aW0gY2FuIHVzZSBhcyBhCitxdWV1ZSBvZiBwbGFjZXMgdG8gdmlzaXQgKHRoaXMgZmVhdHVyZSBpcyB1c3VhbGx5IHVzZWQgdG8ganVtcCB0byBlcnJvcnMKK3Byb2R1Y2VkIGJ5IGEgY29tcGlsZXIpLiBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBkaWZmIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkaWZmIC0tZ2l0IGEvZm9vLmMgYi9mb28uYworaW5kZXggYTY1NTU0MC4uNWE1OTA0NCAxMDA2NDQKKy0tLSBhL2Zvby5jCisrKysgYi9mb28uYworQEAgLTEsMyArMSwzIEBACisgaW50IG1haW4odm9pZCkgeworLSAgcHJpbnRmKCJoZWxsbyB3b3JkIVxuIik7CisrICBwcmludGYoImhlbGxvIHdvcmxkIVxuIik7CisgfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2l0LWp1bXAgd2lsbCBmZWVkIHRoaXMgdG8gdGhlIGVkaXRvcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Zvby5jOjI6IHByaW50ZigiaGVsbG8gd29yZCFcbiIpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT2J2aW91c2x5IHRoaXMgdHJpdmlhbCBjYXNlIGlzbid0IHRoYXQgaW50ZXJlc3Rpbmc7IHlvdSBjb3VsZCBqdXN0IG9wZW4KK2Bmb28uY2AgeW91cnNlbGYuIEJ1dCB3aGVuIHlvdSBoYXZlIG1hbnkgY2hhbmdlcyBzY2F0dGVyZWQgYWNyb3NzIGEKK3Byb2plY3QsIHlvdSBjYW4gdXNlIHRoZSBlZGl0b3IncyBzdXBwb3J0IHRvICJqdW1wIiBmcm9tIHBvaW50IHRvIHBvaW50LgorCitHaXQtanVtcCBjYW4gZ2VuZXJhdGUgdGhyZWUgdHlwZXMgb2YgaW50ZXJlc3RpbmcgbGlzdHM6CisKKyAgMS4gVGhlIGJlZ2lubmluZyBvZiBhbnkgZGlmZiBodW5rcy4KKworICAyLiBUaGUgYmVnaW5uaW5nIG9mIGFueSBtZXJnZSBjb25mbGljdCBtYXJrZXJzLgorCisgIDMuIEFueSBncmVwIG1hdGNoZXMuCisKKworVXNpbmcgZ2l0LWp1bXAKKy0tLS0tLS0tLS0tLS0tCisKK1RvIHVzZSBpdCwganVzdCBkcm9wIGdpdC1qdW1wIGluIHlvdXIgUEFUSCwgYW5kIHRoZW4gaW52b2tlIGl0IGxpa2UKK3RoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGp1bXAgdG8gY2hhbmdlcyBub3QgeWV0IHN0YWdlZCBmb3IgY29tbWl0CitnaXQganVtcCBkaWZmCisKKyMganVtcCB0byBjaGFuZ2VzIHRoYXQgYXJlIHN0YWdlZCBmb3IgY29tbWl0OyB5b3UgY2FuIGdpdmUKKyMgYXJiaXRyYXJ5IGRpZmYgb3B0aW9ucworZ2l0IGp1bXAgZGlmZiAtLWNhY2hlZAorCisjIGp1bXAgdG8gbWVyZ2UgY29uZmxpY3RzCitnaXQganVtcCBtZXJnZQorCisjIGp1bXAgdG8gYWxsIGluc3RhbmNlcyBvZiBmb29fYmFyCitnaXQganVtcCBncmVwIGZvb19iYXIKKworIyBzYW1lIGFzIGFib3ZlLCBidXQgY2FzZS1pbnNlbnNpdGl2ZTsgeW91IGNhbiBnaXZlCisjIGFyYml0cmFyeSBncmVwIG9wdGlvbnMKK2dpdCBqdW1wIGdyZXAgLWkgZm9vX2JhcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitSZWxhdGVkIFByb2dyYW1zCistLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWNjb21wbGlzaCBzb21lIG9mIHRoZSBzYW1lIHRoaW5ncyB3aXRoIGluZGl2aWR1YWwgdG9vbHMuIEZvcgorZXhhbXBsZSwgeW91IGNhbiB1c2UgYGdpdCBtZXJnZXRvb2xgIHRvIHN0YXJ0IHZpbWRpZmYgb24gZWFjaCB1bm1lcmdlZAorZmlsZS4gYGdpdCBqdW1wIG1lcmdlYCBpcyBmb3IgdGhlIHZpbS13aWVsZGluZyBsdWRkaXRlIHdobyBqdXN0IHdhbnRzIHRvCitqdW1wIHN0cmFpZ2h0IHRvIHRoZSBjb25mbGljdCB0ZXh0IHdpdGggbm8gZmFuZmFyZS4KKworQXMgb2YgZ2l0IHYxLjcuMiwgYGdpdCBncmVwYCBrbm93cyB0aGUgYC0tb3Blbi1maWxlcy1pbi1wYWdlcmAgb3B0aW9uLAord2hpY2ggZG9lcyBzb21ldGhpbmcgc2ltaWxhciB0byBgZ2l0IGp1bXAgZ3JlcGAuIEhvd2V2ZXIsIGl0IGlzIGxpbWl0ZWQKK3RvIHBvc2l0aW9uaW5nIHRoZSBjdXJzb3IgdG8gdGhlIGNvcnJlY3QgbGluZSBpbiBvbmx5IHRoZSBmaXJzdCBmaWxlLAorbGVhdmluZyB5b3UgdG8gbG9jYXRlIHN1YnNlcXVlbnQgaGl0cyBpbiB0aGF0IGZpbGUgb3Igb3RoZXIgZmlsZXMgdXNpbmcKK3RoZSBlZGl0b3Igb3IgcGFnZXIuIEJ5IGNvbnRyYXN0LCBnaXQtanVtcCBwcm92aWRlcyB0aGUgZWRpdG9yIHdpdGggYQorY29tcGxldGUgbGlzdCBvZiBmaWxlcyBhbmQgbGluZSBudW1iZXJzIGZvciBlYWNoIG1hdGNoLgorCisKK0xpbWl0YXRpb25zCistLS0tLS0tLS0tLQorCitUaGlzIHNjcmlwdHMgd2FzIHdyaXR0ZW4gYW5kIHRlc3RlZCB3aXRoIHZpbS4gR2l2ZW4gdGhhdCB0aGUgcXVpY2tmaXgKK2Zvcm1hdCBpcyB0aGUgc2FtZSBhcyB3aGF0IGdjYyBwcm9kdWNlcywgSSBleHBlY3QgZW1hY3MgdXNlcnMgaGF2ZSBhCitzaW1pbGFyIGZlYXR1cmUgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBsaXN0LCBidXQgSSBrbm93IG5vdGhpbmcgYWJvdXQKK2hvdyB0byBhY3RpdmF0ZSBpdC4KKworVGhlIHNoZWxsIHNuaXBwZXRzIHRvIGdlbmVyYXRlIHRoZSBxdWlja2ZpeCBsaW5lcyB3aWxsIGFsbW9zdCBjZXJ0YWlubHkKK2Nob2tlIG9uIGZpbGVuYW1lcyB3aXRoIGV4b3RpYyBjaGFyYWN0ZXJzIChsaWtlIG5ld2xpbmVzKS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0LWp1bXAvZ2l0LWp1bXAgYi9jb250cmliL2dpdC1qdW1wL2dpdC1qdW1wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjOTBjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdC1qdW1wL2dpdC1qdW1wCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorCit1c2FnZSgpIHsKKwljYXQgPDxcRU9GCit1c2FnZTogZ2l0IGp1bXAgPG1vZGU+IFs8YXJncz5dCisKK0p1bXAgdG8gaW50ZXJlc3RpbmcgZWxlbWVudHMgaW4gYW4gZWRpdG9yLgorVGhlIDxtb2RlPiBwYXJhbWV0ZXIgaXMgb25lIG9mOgorCitkaWZmOiBlbGVtZW50cyBhcmUgZGlmZiBodW5rcy4gQXJndW1lbnRzIGFyZSBnaXZlbiB0byBkaWZmLgorCittZXJnZTogZWxlbWVudHMgYXJlIG1lcmdlIGNvbmZsaWN0cy4gQXJndW1lbnRzIGFyZSBpZ25vcmVkLgorCitncmVwOiBlbGVtZW50cyBhcmUgZ3JlcCBoaXRzLiBBcmd1bWVudHMgYXJlIGdpdmVuIHRvIGdyZXAuCitFT0YKK30KKworb3Blbl9lZGl0b3IoKSB7CisJZWRpdG9yPWBnaXQgdmFyIEdJVF9FRElUT1JgCisJZXZhbCAiJGVkaXRvciAtcSBcJDEiCit9CisKK21vZGVfZGlmZigpIHsKKwlnaXQgZGlmZiAtLW5vLXByZWZpeCAtLXJlbGF0aXZlICIkQCIgfAorCXBlcmwgLW5lICcKKwlpZiAobXteXCtcK1wrICguKil9KSB7ICRmaWxlID0gJDE7IG5leHQgfQorCWRlZmluZWQoJGZpbGUpIG9yIG5leHQ7CisJaWYgKG0vXkBAIC4qXCsoXGQrKS8pIHsgJGxpbmUgPSAkMTsgbmV4dCB9CisJZGVmaW5lZCgkbGluZSkgb3IgbmV4dDsKKwlpZiAoL14gLykgeyAkbGluZSsrOyBuZXh0IH0KKwlpZiAoL15bLStdXHMqKC4qKS8pIHsKKwkJcHJpbnQgIiRmaWxlOiRsaW5lOiAkMVxuIjsKKwkJJGxpbmUgPSB1bmRlZjsKKwl9CisJJworfQorCittb2RlX21lcmdlKCkgeworCWdpdCBscy1maWxlcyAtdSB8CisJcGVybCAtcGUgJ3MvXi4qP1x0Ly8nIHwKKwlzb3J0IC11IHwKKwl3aGlsZSBJRlM9IHJlYWQgZm47IGRvCisJCWdyZXAgLUhuICdePDw8PDw8PCcgIiRmbiIKKwlkb25lCit9CisKKyMgR3JlcCAtbiBnZW5lcmF0ZXMgbmljZSBxdWlja2ZpeC1sb29raW5nIGxpbmVzIGJ5IGl0c2VsZiwKKyMgYnV0IGxldCdzIGNsZWFuIHVwIGV4dHJhIHdoaXRlc3BhY2UsIHNvIHRoZXkgbG9vayBiZXR0ZXIgaWYgdGhlCisjIGVkaXRvciBzaG93cyB0aGVtIHRvIHVzIGluIHRoZSBzdGF0dXMgYmFyLgorbW9kZV9ncmVwKCkgeworCWdpdCBncmVwIC1uICIkQCIgfAorCXBlcmwgLXBlICcKKwlzL1sgXHRdKy8gL2c7CisJcy9eICovLzsKKwknCit9CisKK2lmIHRlc3QgJCMgLWx0IDE7IHRoZW4KKwl1c2FnZSA+JjIKKwlleGl0IDEKK2ZpCittb2RlPSQxOyBzaGlmdAorCit0cmFwICdybSAtZiAiJHRtcCInIDAgMSAyIDMgMTUKK3RtcD1gbWt0ZW1wIC10IGdpdC1qdW1wLlhYWFhYWGAgfHwgZXhpdCAxCit0eXBlICJtb2RlXyRtb2RlIiA+L2Rldi9udWxsIDI+JjEgfHwgeyB1c2FnZSA+JjI7IGV4aXQgMTsgfQorIm1vZGVfJG1vZGUiICIkQCIgPiIkdG1wIgordGVzdCAtcyAiJHRtcCIgfHwgZXhpdCAwCitvcGVuX2VkaXRvciAiJHRtcCIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0LXJlc3VycmVjdC5zaCBiL2NvbnRyaWIvZ2l0LXJlc3VycmVjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNGVkNGMzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9naXQtcmVzdXJyZWN0LnNoCkBAIC0wLDAgKzEsMTgxIEBACisjIS9iaW4vc2gKKworVVNBR0U9IlstYV0gWy1yXSBbLW1dIFstdF0gWy1uXSBbLWIgPG5ld25hbWU+XSA8bmFtZT4iCitMT05HX1VTQUdFPSJnaXQtcmVzdXJyZWN0IGF0dGVtcHRzIHRvIGZpbmQgdHJhY2VzIG9mIGEgYnJhbmNoIHRpcAorY2FsbGVkIDxuYW1lPiwgYW5kIHRyaWVzIHRvIHJlc3VycmVjdCBpdC4gIEN1cnJlbnRseSwgdGhlIHJlZmxvZyBpcworc2VhcmNoZWQgZm9yIGNoZWNrb3V0IG1lc3NhZ2VzLCBhbmQgd2l0aCAtciBhbHNvIG1lcmdlIG1lc3NhZ2VzLiAgV2l0aAorLW0gYW5kIC10LCB0aGUgaGlzdG9yeSBvZiBhbGwgcmVmcyBpcyBzY2FubmVkIGZvciBNZXJnZSA8bmFtZT4gaW50bworb3RoZXIvTWVyZ2UgPG90aGVyPiBpbnRvIDxuYW1lPiAocmVzcGVjdGl2ZWx5KSBjb21taXQgc3ViamVjdHMsIHdoaWNoCitpcyByYXRoZXIgc2xvdyBidXQgYWxsb3dzIHlvdSB0byByZXN1cnJlY3Qgb3RoZXIgcGVvcGxlJ3MgdG9waWMKK2JyYW5jaGVzLiIKKworT1BUSU9OU19LRUVQREFTSERBU0g9CitPUFRJT05TX1NQRUM9IlwKK2dpdCByZXN1cnJlY3QgJFVTQUdFCistLQorYixicmFuY2g9ICAgICAgICAgICAgc2F2ZSBicmFuY2ggYXMgPG5ld25hbWU+IGluc3RlYWQgb2YgPG5hbWU+CithLGFsbCAgICAgICAgICAgICAgICBzYW1lIGFzIC1sIC1yIC1tIC10CitrLGtlZXAtZ29pbmcgICAgICAgICBmdWxsIHJldi1saXN0IHNjYW4gKGluc3RlYWQgb2YgZmlyc3QgbWF0Y2gpCitsLHJlZmxvZyAgICAgICAgICAgICBzY2FuIHJlZmxvZyBmb3IgY2hlY2tvdXRzIChlbmFibGVkIGJ5IGRlZmF1bHQpCityLHJlZmxvZy1tZXJnZXMgICAgICBzY2FuIGZvciBtZXJnZXMgcmVjb3JkZWQgaW4gcmVmbG9nCittLG1lcmdlcyAgICAgICAgICAgICBzY2FuIGZvciBtZXJnZXMgaW50byBvdGhlciBicmFuY2hlcyAoc2xvdykKK3QsbWVyZ2UtdGFyZ2V0cyAgICAgIHNjYW4gZm9yIG1lcmdlcyBvZiBvdGhlciBicmFuY2hlcyBpbnRvIDxuYW1lPgorbixkcnktcnVuICAgICAgICAgICAgZG9uJ3QgcmVjcmVhdGUgdGhlIGJyYW5jaCIKKworLiBnaXQtc2gtc2V0dXAKKworc2VhcmNoX3JlZmxvZyAoKSB7CisgICAgICAgIHNlZCAtbmUgJ3N+XlwoW14gXSpcKSAuKlx0Y2hlY2tvdXQ6IG1vdmluZyBmcm9tICciJDEiJyAuKn5cMX5wJyBcCisgICAgICAgICAgICAgICAgPCAiJEdJVF9ESVIiL2xvZ3MvSEVBRAorfQorCitzZWFyY2hfcmVmbG9nX21lcmdlcyAoKSB7CisJZ2l0IHJldi1wYXJzZSAkKAorCQlzZWQgLW5lICdzfl5bXiBdKiBcKFteIF0qXCkgLipcdG1lcmdlICciJDEiJzouKn5cMV4yfnAnIFwKKwkJCTwgIiRHSVRfRElSIi9sb2dzL0hFQUQKKwkpCit9CisKK194NDA9IlswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0iCitfeDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgorCitzZWFyY2hfbWVyZ2VzICgpIHsKKyAgICAgICAgZ2l0IHJldi1saXN0IC0tYWxsIC0tZ3JlcD0iTWVyZ2UgYnJhbmNoICckMSciIFwKKyAgICAgICAgICAgICAgICAtLXByZXR0eT10Zm9ybWF0OiIlUCAlcyIgfAorICAgICAgICBzZWQgLW5lICIvXiRfeDQwIFwoJF94NDBcKSBNZXJnZSAuKi8ge3MvL1wxL3A7JGVhcmx5X2V4aXR9IgorfQorCitzZWFyY2hfbWVyZ2VfdGFyZ2V0cyAoKSB7CisJZ2l0IHJldi1saXN0IC0tYWxsIC0tZ3JlcD0iTWVyZ2UgYnJhbmNoICdbXiddKicgaW50byAkYnJhbmNoXCQiIFwKKwkJLS1wcmV0dHk9dGZvcm1hdDoiJUggJXMiIC0tYWxsIHwKKwlzZWQgLW5lICIvXlwoJF94NDBcKSBNZXJnZSAuKi8ge3MvL1wxL3A7JGVhcmx5X2V4aXR9ICIKK30KKworZHJ5X3J1bj0KK2Vhcmx5X2V4aXQ9cQorc2Nhbl9yZWZsb2c9dAorc2Nhbl9yZWZsb2dfbWVyZ2VzPQorc2Nhbl9tZXJnZXM9CitzY2FuX21lcmdlX3RhcmdldHM9CituZXdfbmFtZT0KKword2hpbGUgdGVzdCAiJCMiICE9IDA7IGRvCisJY2FzZSAiJDEiIGluCisJICAgIC1ifC0tYnJhbmNoKQorCQlzaGlmdAorCQluZXdfbmFtZT0iJDEiCisJCTs7CisJICAgIC1ufC0tZHJ5LXJ1bikKKwkJZHJ5X3J1bj10CisJCTs7CisJICAgIC0tbm8tZHJ5LXJ1bikKKwkJZHJ5X3J1bj0KKwkJOzsKKwkgICAgLWt8LS1rZWVwLWdvaW5nKQorCQllYXJseV9leGl0PQorCQk7OworCSAgICAtLW5vLWtlZXAtZ29pbmcpCisJCWVhcmx5X2V4aXQ9cQorCQk7OworCSAgICAtbXwtLW1lcmdlcykKKwkJc2Nhbl9tZXJnZXM9dAorCQk7OworCSAgICAtLW5vLW1lcmdlcykKKwkJc2Nhbl9tZXJnZXM9CisJCTs7CisJICAgIC1sfC0tcmVmbG9nKQorCQlzY2FuX3JlZmxvZz10CisJCTs7CisJICAgIC0tbm8tcmVmbG9nKQorCQlzY2FuX3JlZmxvZz0KKwkJOzsKKwkgICAgLXJ8LS1yZWZsb2dfbWVyZ2VzKQorCQlzY2FuX3JlZmxvZ19tZXJnZXM9dAorCQk7OworCSAgICAtLW5vLXJlZmxvZ19tZXJnZXMpCisJCXNjYW5fcmVmbG9nX21lcmdlcz0KKwkJOzsKKwkgICAgLXR8LS1tZXJnZS10YXJnZXRzKQorCQlzY2FuX21lcmdlX3RhcmdldHM9dAorCQk7OworCSAgICAtLW5vLW1lcmdlLXRhcmdldHMpCisJCXNjYW5fbWVyZ2VfdGFyZ2V0cz0KKwkJOzsKKwkgICAgLWF8LS1hbGwpCisJCXNjYW5fcmVmbG9nPXQKKwkJc2Nhbl9yZWZsb2dfbWVyZ2VzPXQKKwkJc2Nhbl9tZXJnZXM9dAorCQlzY2FuX21lcmdlX3RhcmdldHM9dAorCQk7OworCSAgICAtLSkKKwkJc2hpZnQKKwkJYnJlYWsKKwkJOzsKKwkgICAgKikKKwkJdXNhZ2UKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKwordGVzdCAiJCMiID0gMSB8fCB1c2FnZQorCithbGxfc3RyYXRlZ2llcz0iJHNjYW5fcmVmbG9nJHNjYW5fcmVmbG9nX21lcmdlcyRzY2FuX21lcmdlcyRzY2FuX21lcmdlX3RhcmdldHMiCitpZiB0ZXN0IC16ICIkYWxsX3N0cmF0ZWdpZXMiOyB0aGVuCisJZGllICJtdXN0IGVuYWJsZSBhdCBsZWFzdCBvbmUgb2YgLWxybXQiCitmaQorCiticmFuY2g9IiQxIgordGVzdCAteiAiJG5ld19uYW1lIiAmJiBuZXdfbmFtZT0iJGJyYW5jaCIKKworaWYgdGVzdCAhIC16ICIkc2Nhbl9yZWZsb2ciOyB0aGVuCisJaWYgdGVzdCAtciAiJEdJVF9ESVIiL2xvZ3MvSEVBRDsgdGhlbgorCQljYW5kaWRhdGVzPSIkKHNlYXJjaF9yZWZsb2cgJGJyYW5jaCkiCisJZWxzZQorCQlkaWUgJ3JlZmxvZyBzY2FubmluZyByZXF1ZXN0ZWQsIGJ1dCcgXAorCQkJJyRHSVRfRElSL2xvZ3MvSEVBRCBub3QgcmVhZGFibGUnCisJZmkKK2ZpCitpZiB0ZXN0ICEgLXogIiRzY2FuX3JlZmxvZ19tZXJnZXMiOyB0aGVuCisJaWYgdGVzdCAtciAiJEdJVF9ESVIiL2xvZ3MvSEVBRDsgdGhlbgorCQljYW5kaWRhdGVzPSIkY2FuZGlkYXRlcyAkKHNlYXJjaF9yZWZsb2dfbWVyZ2VzICRicmFuY2gpIgorCWVsc2UKKwkJZGllICdyZWZsb2cgc2Nhbm5pbmcgcmVxdWVzdGVkLCBidXQnIFwKKwkJCSckR0lUX0RJUi9sb2dzL0hFQUQgbm90IHJlYWRhYmxlJworCWZpCitmaQoraWYgdGVzdCAhIC16ICIkc2Nhbl9tZXJnZXMiOyB0aGVuCisJY2FuZGlkYXRlcz0iJGNhbmRpZGF0ZXMgJChzZWFyY2hfbWVyZ2VzICRicmFuY2gpIgorZmkKK2lmIHRlc3QgISAteiAiJHNjYW5fbWVyZ2VfdGFyZ2V0cyI7IHRoZW4KKwljYW5kaWRhdGVzPSIkY2FuZGlkYXRlcyAkKHNlYXJjaF9tZXJnZV90YXJnZXRzICRicmFuY2gpIgorZmkKKworY2FuZGlkYXRlcz0iJChnaXQgcmV2LXBhcnNlICRjYW5kaWRhdGVzIHwgc29ydCAtdSkiCisKK2lmIHRlc3QgLXogIiRjYW5kaWRhdGVzIjsgdGhlbgorCWhpbnQ9CisJdGVzdCAieiRhbGxfc3RyYXRlZ2llcyIgIT0gInp0dHR0IiBcCisJCSYmIGhpbnQ9IiAobWF5YmUgdHJ5IGFnYWluIHdpdGggLWEpIgorCWRpZSAibm8gY2FuZGlkYXRlcyBmb3IgJGJyYW5jaCBmb3VuZCRoaW50IgorZmkKKworZWNobyAiKiogQ2FuZGlkYXRlcyBmb3IgJGJyYW5jaCAqKiIKK2ZvciBjbXQgaW4gJGNhbmRpZGF0ZXM7IGRvCisJZ2l0IC0tbm8tcGFnZXIgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVjdDolaCBbJWNyXSAlcyIgLS1hYmJyZXYtY29tbWl0IC0xICRjbXQKK2RvbmUgXAorfCBzb3J0IC1uIHwgY3V0IC1kOiAtZjItCisKK25ld2VzdD0iJChnaXQgcmV2LWxpc3QgLTEgJGNhbmRpZGF0ZXMpIgoraWYgdGVzdCAhIC16ICIkZHJ5X3J1biI7IHRoZW4KKwlwcmludGYgIioqIE1vc3QgcmVjZW50OiAiCisJZ2l0IC0tbm8tcGFnZXIgbG9nIC0xIC0tcHJldHR5PXRmb3JtYXQ6IiVoICVzIiAkbmV3ZXN0CitlbGlmICEgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICRuZXdfbmFtZSA+L2Rldi9udWxsOyB0aGVuCisJcHJpbnRmICIqKiBSZXN0b3JpbmcgJG5ld19uYW1lIHRvICIKKwlnaXQgLS1uby1wYWdlciBsb2cgLTEgLS1wcmV0dHk9dGZvcm1hdDoiJWggJXMiICRuZXdlc3QKKwlnaXQgYnJhbmNoICRuZXdfbmFtZSAkbmV3ZXN0CitlbHNlCisJcHJpbnRmICJNb3N0IHJlY2VudDogIgorCWdpdCAtLW5vLXBhZ2VyIGxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiIlaCAlcyIgJG5ld2VzdAorCWVjaG8gIioqICRuZXdfbmFtZSBhbHJlYWR5IGV4aXN0cywgZG9pbmcgbm90aGluZyIKK2ZpCmRpZmYgLS1naXQgYS9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9SRUFETUUgYi9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4NDYzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL1JFQURNRQpAQCAtMCwwICsxLDE4IEBACitTYW1wbGUgcHJvZ3JhbXMgY2FsbGFibGUgdGhyb3VnaCBnaXQtc2hlbGwuICBQbGFjZSBhIGRpcmVjdG9yeSBuYW1lZAorJ2dpdC1zaGVsbC1jb21tYW5kcycgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IG9mIGEgdXNlciB3aG9zZSBzaGVsbCBpcworZ2l0LXNoZWxsLiAgVGhlbiBhbnlvbmUgbG9nZ2luZyBpbiBhcyB0aGF0IHVzZXIgd2lsbCBiZSBhYmxlIHRvIHJ1bgorZXhlY3V0YWJsZXMgaW4gdGhlICdnaXQtc2hlbGwtY29tbWFuZHMnIGRpcmVjdG9yeS4KKworUHJvdmlkZWQgY29tbWFuZHM6CisKK2hlbHA6IFByaW50cyBvdXQgdGhlIG5hbWVzIG9mIGF2YWlsYWJsZSBjb21tYW5kcy4gIFdoZW4gcnVuCitpbnRlcmFjdGl2ZWx5LCBnaXQtc2hlbGwgd2lsbCBhdXRvbWF0aWNhbGx5IHJ1biAnaGVscCcgb24gc3RhcnR1cCwKK3Byb3ZpZGVkIGl0IGV4aXN0cy4KKworbGlzdDogRGlzcGxheXMgYW55IGJhcmUgcmVwb3NpdG9yeSB3aG9zZSBuYW1lIGVuZHMgd2l0aCAiLmdpdCIgdW5kZXIKK3VzZXIncyBob21lIGRpcmVjdG9yeS4gIE5vIG90aGVyIGdpdCByZXBvc2l0b3JpZXMgYXJlIHZpc2libGUsCithbHRob3VnaCB0aGV5IG1pZ2h0IGJlIGNsb25hYmxlIHRocm91Z2ggZ2l0LXNoZWxsLiAgJ2xpc3QnIGlzIGRlc2lnbmVkCit0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGdpdCB0aGF0IG11c3QgYmUgbWFkZSBpbiBmaW5kaW5nCithdmFpbGFibGUgcmVwb3NpdG9yaWVzOyBpZiB5b3VyIHNldHVwIGhhcyBhZGRpdGlvbmFsIHJlcG9zaXRvcmllcyB0aGF0CitzaG91bGQgYmUgdXNlci1kaXNjb3ZlcmFibGUsIHlvdSBtYXkgd2lzaCB0byBtb2RpZnkgJ2xpc3QnCithY2NvcmRpbmdseS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL2hlbHAgYi9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9oZWxwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzNTc3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9oZWxwCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCitpZiB0dHkgLXMKK3RoZW4KKwllY2hvICJSdW4gJ2hlbHAnIGZvciBoZWxwLCBvciAnZXhpdCcgdG8gbGVhdmUuICBBdmFpbGFibGUgY29tbWFuZHM6IgorZWxzZQorCWVjaG8gIlJ1biAnaGVscCcgZm9yIGhlbHAuICBBdmFpbGFibGUgY29tbWFuZHM6IgorZmkKKworY2QgIiQoZGlybmFtZSAiJDAiKSIKKworZm9yIGNtZCBpbiAqCitkbworCWNhc2UgIiRjbWQiIGluCisJaGVscCkgOzsKKwkqKSBbIC1mICIkY21kIiBdICYmIFsgLXggIiRjbWQiIF0gJiYgZWNobyAiJGNtZCIgOzsKKwllc2FjCitkb25lCmRpZmYgLS1naXQgYS9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9saXN0IGIvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvbGlzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Zjg5OTM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvbGlzdApAQCAtMCwwICsxLDEwIEBACisjIS9iaW4vc2gKKworcHJpbnRfaWZfYmFyZV9yZXBvPScKKwlpZiAiJChnaXQgLS1naXQtZGlyPSIkMSIgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5KSIgPSB0cnVlCisJdGhlbgorCQlwcmludGYgIiVzXG4iICIkezEjLi99IgorCWZpCisnCisKK2ZpbmQgLXR5cGUgZCAtbmFtZSAiKi5naXQiIC1leGVjIHNoIC1jICIkcHJpbnRfaWZfYmFyZV9yZXBvIiAtLSBce30gXDsgLXBydW5lIDI+L2Rldi9udWxsCmRpZmYgLS1naXQgYS9jb250cmliL2dpdHZpZXcvZ2l0dmlldyBiL2NvbnRyaWIvZ2l0dmlldy9naXR2aWV3Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjOTlkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdHZpZXcvZ2l0dmlldwpAQCAtMCwwICsxLDEzMDUgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisiIiIgZ2l0dmlldworR1VJIGJyb3dzZXIgZm9yIGdpdCByZXBvc2l0b3J5CitUaGlzIHByb2dyYW0gaXMgYmFzZWQgb24gYnpyayBieSBTY290dCBKYW1lcyBSZW1uYW50IDxzY290dEB1YnVudHUuY29tPgorIiIiCitfX2NvcHlyaWdodF9fID0gIkNvcHlyaWdodCAoQykgMjAwNiBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiIKK19fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0IChDKSAyMDA3IEFuZWVzaCBLdW1hciBLLlYgPGFuZWVzaC5rdW1hckBnbWFpbC5jb20iCitfX2F1dGhvcl9fICAgID0gIkFuZWVzaCBLdW1hciBLLlYgPGFuZWVzaC5rdW1hckBnbWFpbC5jb20+IgorCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGd0aworaW1wb3J0IHB5Z3RrCitpbXBvcnQgcGFuZ28KK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgY2Fpcm8KK2ltcG9ydCBtYXRoCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgZmNudGwKKworaGF2ZV9ndGtzb3VyY2V2aWV3MiA9IEZhbHNlCitoYXZlX2d0a3NvdXJjZXZpZXcgPSBGYWxzZQordHJ5OgorICAgIGltcG9ydCBndGtzb3VyY2V2aWV3MgorICAgIGhhdmVfZ3Rrc291cmNldmlldzIgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgZ3Rrc291cmNldmlldworICAgICAgICBoYXZlX2d0a3NvdXJjZXZpZXcgPSBUcnVlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwcmludCAiUnVubmluZyB3aXRob3V0IGd0a3NvdXJjZXZpZXcyIG9yIGd0a3NvdXJjZXZpZXcgbW9kdWxlIgorCityZV9pZGVudCA9IHJlLmNvbXBpbGUoJyhhdXRob3J8Y29tbWl0dGVyKSAoP1A8aWRlbnQ+LiopICg/UDxlcG9jaD5cZCspICg/UDx0ej5bKy1dXGR7NH0pJykKKworZGVmIGxpc3RfdG9fc3RyaW5nKGFyZ3MsIHNraXApOgorCWNvdW50ID0gbGVuKGFyZ3MpCisJaSA9IHNraXAKKwlzdHJfYXJnPSIgIgorCXdoaWxlIChpIDwgY291bnQgKToKKwkJc3RyX2FyZyA9IHN0cl9hcmcgKyBhcmdzW2ldCisJCXN0cl9hcmcgPSBzdHJfYXJnICsgIiAiCisJCWkgPSBpKzEKKworCXJldHVybiBzdHJfYXJnCisKK2RlZiBzaG93X2RhdGUoZXBvY2gsIHR6KToKKwlzZWNzID0gZmxvYXQoZXBvY2gpCisJdHpzZWNzID0gZmxvYXQodHpbMTozXSkgKiAzNjAwCisJdHpzZWNzICs9IGZsb2F0KHR6WzM6NV0pICogNjAKKwlpZiAodHpbMF0gPT0gIisiKToKKwkJc2VjcyArPSB0enNlY3MKKwllbHNlOgorCQlzZWNzIC09IHR6c2VjcworCisJcmV0dXJuIHRpbWUuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIiwgdGltZS5nbXRpbWUoc2VjcykpCisKK2RlZiBnZXRfc291cmNlX2J1ZmZlcl9hbmRfdmlldygpOgorCWlmIGhhdmVfZ3Rrc291cmNldmlldzI6CisJCWJ1ZmZlciA9IGd0a3NvdXJjZXZpZXcyLkJ1ZmZlcigpCisJCXNsbSA9IGd0a3NvdXJjZXZpZXcyLkxhbmd1YWdlTWFuYWdlcigpCisJCWdzbCA9IHNsbS5nZXRfbGFuZ3VhZ2UoImRpZmYiKQorCQlidWZmZXIuc2V0X2hpZ2hsaWdodF9zeW50YXgoVHJ1ZSkKKwkJYnVmZmVyLnNldF9sYW5ndWFnZShnc2wpCisJCXZpZXcgPSBndGtzb3VyY2V2aWV3Mi5WaWV3KGJ1ZmZlcikKKwllbGlmIGhhdmVfZ3Rrc291cmNldmlldzoKKwkJYnVmZmVyID0gZ3Rrc291cmNldmlldy5Tb3VyY2VCdWZmZXIoKQorCQlzbG0gPSBndGtzb3VyY2V2aWV3LlNvdXJjZUxhbmd1YWdlc01hbmFnZXIoKQorCQlnc2wgPSBzbG0uZ2V0X2xhbmd1YWdlX2Zyb21fbWltZV90eXBlKCJ0ZXh0L3gtcGF0Y2giKQorCQlidWZmZXIuc2V0X2hpZ2hsaWdodChUcnVlKQorCQlidWZmZXIuc2V0X2xhbmd1YWdlKGdzbCkKKwkJdmlldyA9IGd0a3NvdXJjZXZpZXcuU291cmNlVmlldyhidWZmZXIpCisJZWxzZToKKwkJYnVmZmVyID0gZ3RrLlRleHRCdWZmZXIoKQorCQl2aWV3ID0gZ3RrLlRleHRWaWV3KGJ1ZmZlcikKKwlyZXR1cm4gKGJ1ZmZlciwgdmlldykKKworCitjbGFzcyBDZWxsUmVuZGVyZXJHcmFwaChndGsuR2VuZXJpY0NlbGxSZW5kZXJlcik6CisJIiIiQ2VsbCByZW5kZXJlciBmb3IgZGlyZWN0ZWQgZ3JhcGguCisKKwlUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBjdXN0b20gR3RrQ2VsbFJlbmRlcmVyIHRoYXQKKwlkcmF3cyBwYXJ0IG9mIHRoZSBkaXJlY3RlZCBncmFwaCBiYXNlZCBvbiB0aGUgbGluZXMgc3VnZ2VzdGVkIGJ5IHRoZSBjb2RlCisJaW4gZ3JhcGgucHkuCisKKwlCZWNhdXNlIHdlJ3JlIHNoaW55LCB3ZSB1c2UgQ2Fpcm8gdG8gZG8gdGhpcywgYW5kIGJlY2F1c2Ugd2UncmUgbmF1Z2h0eQorCXdlIGNoZWF0IGFuZCBkcmF3IG92ZXIgdGhlIGJpdHMgb2YgdGhlIFRyZWVWaWV3Q29sdW1uIHRoYXQgYXJlIHN1cHBvc2VkIHRvCisJanVzdCBiZSBmb3IgdGhlIGJhY2tncm91bmQuCisKKwlQcm9wZXJ0aWVzOgorCW5vZGUgICAgICAgICAgICAgIChjb2x1bW4sIGNvbG91ciwgWyBuYW1lcyBdKSB0dXBsZSB0byBkcmF3IHJldmlzaW9uIG5vZGUsCisJaW5fbGluZXMgICAgICAgICAgKHN0YXJ0LCBlbmQsIGNvbG91cikgdHVwbGUgbGlzdCB0byBkcmF3IGlud2FyZCBsaW5lcywKKwlvdXRfbGluZXMgICAgICAgICAoc3RhcnQsIGVuZCwgY29sb3VyKSB0dXBsZSBsaXN0IHRvIGRyYXcgb3V0d2FyZCBsaW5lcy4KKwkiIiIKKworCV9fZ3Byb3BlcnRpZXNfXyA9IHsKKwkibm9kZSI6ICAgICAgICAgKCBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsICJub2RlIiwKKwkJCSAgInJldmlzaW9uIG5vZGUgaW5zdHJ1Y3Rpb24iLAorCQkJICBnb2JqZWN0LlBBUkFNX1dSSVRBQkxFCisJCQkpLAorCSJpbi1saW5lcyI6ICAgICAoIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwgImluLWxpbmVzIiwKKwkJCSAgImluc3RydWN0aW9ucyB0byBkcmF3IGxpbmVzIGludG8gdGhlIGNlbGwiLAorCQkJICBnb2JqZWN0LlBBUkFNX1dSSVRBQkxFCisJCQkpLAorCSJvdXQtbGluZXMiOiAgICAoIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwgIm91dC1saW5lcyIsCisJCQkgICJpbnN0cnVjdGlvbnMgdG8gZHJhdyBsaW5lcyBvdXQgb2YgdGhlIGNlbGwiLAorCQkJICBnb2JqZWN0LlBBUkFNX1dSSVRBQkxFCisJCQkpLAorCX0KKworCWRlZiBkb19zZXRfcHJvcGVydHkoc2VsZiwgcHJvcGVydHksIHZhbHVlKToKKwkJIiIiU2V0IHByb3BlcnRpZXMgZnJvbSBHT2JqZWN0IHByb3BlcnRpZXMuIiIiCisJCWlmIHByb3BlcnR5Lm5hbWUgPT0gIm5vZGUiOgorCQkJc2VsZi5ub2RlID0gdmFsdWUKKwkJZWxpZiBwcm9wZXJ0eS5uYW1lID09ICJpbi1saW5lcyI6CisJCQlzZWxmLmluX2xpbmVzID0gdmFsdWUKKwkJZWxpZiBwcm9wZXJ0eS5uYW1lID09ICJvdXQtbGluZXMiOgorCQkJc2VsZi5vdXRfbGluZXMgPSB2YWx1ZQorCQllbHNlOgorCQkJcmFpc2UgQXR0cmlidXRlRXJyb3IsICJubyBzdWNoIHByb3BlcnR5OiAnJXMnIiAlIHByb3BlcnR5Lm5hbWUKKworCWRlZiBib3hfc2l6ZShzZWxmLCB3aWRnZXQpOgorCQkiIiJDYWxjdWxhdGUgYm94IHNpemUgYmFzZWQgb24gd2lkZ2V0J3MgZm9udC4KKworCQlDYWNoZSB0aGlzIGFzIGl0J3MgcHJvYmFibHkgZXhwZW5zaXZlIHRvIGdldC4gIEl0IGVuc3VyZXMgdGhhdCB3ZQorCQlkcmF3IHRoZSBncmFwaCBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgdGV4dC4KKwkJIiIiCisJCXRyeToKKwkJCXJldHVybiBzZWxmLl9ib3hfc2l6ZQorCQlleGNlcHQgQXR0cmlidXRlRXJyb3I6CisJCQlwYW5nb19jdHggPSB3aWRnZXQuZ2V0X3BhbmdvX2NvbnRleHQoKQorCQkJZm9udF9kZXNjID0gd2lkZ2V0LmdldF9zdHlsZSgpLmZvbnRfZGVzYworCQkJbWV0cmljcyA9IHBhbmdvX2N0eC5nZXRfbWV0cmljcyhmb250X2Rlc2MpCisKKwkJCWFzY2VudCA9IHBhbmdvLlBJWEVMUyhtZXRyaWNzLmdldF9hc2NlbnQoKSkKKwkJCWRlc2NlbnQgPSBwYW5nby5QSVhFTFMobWV0cmljcy5nZXRfZGVzY2VudCgpKQorCisJCQlzZWxmLl9ib3hfc2l6ZSA9IGFzY2VudCArIGRlc2NlbnQgKyA2CisJCQlyZXR1cm4gc2VsZi5fYm94X3NpemUKKworCWRlZiBzZXRfY29sb3VyKHNlbGYsIGN0eCwgY29sb3VyLCBiZywgZmcpOgorCQkiIiJTZXQgdGhlIGNvbnRleHQgc291cmNlIGNvbG91ci4KKworCQlQaWNrcyBhIGRpc3RpbmN0IGNvbG91ciBiYXNlZCBvbiBhbiBpbnRlcm5hbCB3aGVlbDsgdGhlIGJnCisJCXBhcmFtZXRlciBwcm92aWRlcyB0aGUgdmFsdWUgdGhhdCBzaG91bGQgYmUgYXNzaWduZWQgdG8gdGhlICd6ZXJvJworCQljb2xvdXJzIGFuZCB0aGUgZmcgcGFyYW1ldGVyIHByb3ZpZGVzIHRoZSBtdWx0aXBsaWVyIHRoYXQgc2hvdWxkIGJlCisJCWFwcGxpZWQgdG8gdGhlIGZvcmVncm91bmQgY29sb3Vycy4KKwkJIiIiCisJCWNvbG91cnMgPSBbCisJCSAgICAoIDEuMCwgMC4wLCAwLjAgKSwKKwkJICAgICggMS4wLCAxLjAsIDAuMCApLAorCQkgICAgKCAwLjAsIDEuMCwgMC4wICksCisJCSAgICAoIDAuMCwgMS4wLCAxLjAgKSwKKwkJICAgICggMC4wLCAwLjAsIDEuMCApLAorCQkgICAgKCAxLjAsIDAuMCwgMS4wICksCisJCSAgICBdCisKKwkJY29sb3VyICU9IGxlbihjb2xvdXJzKQorCQlyZWQgICA9IChjb2xvdXJzW2NvbG91cl1bMF0gKiBmZykgb3IgYmcKKwkJZ3JlZW4gPSAoY29sb3Vyc1tjb2xvdXJdWzFdICogZmcpIG9yIGJnCisJCWJsdWUgID0gKGNvbG91cnNbY29sb3VyXVsyXSAqIGZnKSBvciBiZworCisJCWN0eC5zZXRfc291cmNlX3JnYihyZWQsIGdyZWVuLCBibHVlKQorCisJZGVmIG9uX2dldF9zaXplKHNlbGYsIHdpZGdldCwgY2VsbF9hcmVhKToKKwkJIiIiUmV0dXJuIHRoZSBzaXplIHdlIG5lZWQgZm9yIHRoaXMgY2VsbC4KKworCQlFYWNoIGNlbGwgaXMgZHJhd24gaW5kaXZpZHVhbGx5IGFuZCBpcyBvbmx5IGFzIHdpZGUgYXMgaXQgbmVlZHMKKwkJdG8gYmUsIHdlIGxldCB0aGUgVHJlZVZpZXdDb2x1bW4gdGFrZSBjYXJlIG9mIG1ha2luZyB0aGVtIGFsbAorCQlsaW5lIHVwLgorCQkiIiIKKwkJYm94X3NpemUgPSBzZWxmLmJveF9zaXplKHdpZGdldCkKKworCQljb2xzID0gc2VsZi5ub2RlWzBdCisJCWZvciBzdGFydCwgZW5kLCBjb2xvdXIgaW4gc2VsZi5pbl9saW5lcyArIHNlbGYub3V0X2xpbmVzOgorCQkJY29scyA9IGludChtYXgoY29scywgc3RhcnQsIGVuZCkpCisKKwkJKGNvbHVtbiwgY29sb3VyLCBuYW1lcykgPSBzZWxmLm5vZGUKKwkJbmFtZXNfbGVuID0gMAorCQlpZiAobGVuKG5hbWVzKSAhPSAwKToKKwkJCWZvciBpdGVtIGluIG5hbWVzOgorCQkJCW5hbWVzX2xlbiArPSBsZW4oaXRlbSkKKworCQl3aWR0aCA9IGJveF9zaXplICogKGNvbHMgKyAxICkgKyBuYW1lc19sZW4KKwkJaGVpZ2h0ID0gYm94X3NpemUKKworCQkjIEZJWE1FIEkgaGF2ZSBubyBpZGVhIGhvdyB0byB1c2UgY2VsbF9hcmVhIHByb3Blcmx5CisJCXJldHVybiAoMCwgMCwgd2lkdGgsIGhlaWdodCkKKworCWRlZiBvbl9yZW5kZXIoc2VsZiwgd2luZG93LCB3aWRnZXQsIGJnX2FyZWEsIGNlbGxfYXJlYSwgZXhwX2FyZWEsIGZsYWdzKToKKwkJIiIiUmVuZGVyIGFuIGluZGl2aWR1YWwgY2VsbC4KKworCQlEcmF3cyB0aGUgY2VsbCBjb250ZW50cyB1c2luZyBjYWlybywgdGFraW5nIGNhcmUgdG8gY2xpcCB3aGF0IHdlCisJCWRvIHRvIHdpdGhpbiB0aGUgYmFja2dyb3VuZCBhcmVhIHNvIHdlIGRvbid0IGRyYXcgb3ZlciBvdGhlciBjZWxscy4KKwkJTm90ZSB0aGF0IHdlJ3JlIGEgYml0IG5hdWdodHkgdGhlcmUgYW5kIHNob3VsZCByZWFsbHkgYmUgZHJhd2luZworCQlpbiB0aGUgY2VsbF9hcmVhIChvciBldmVuIHRoZSBleHBvc2VkIGFyZWEpLCBidXQgd2UgZXhwbGljaXRseSBkb24ndAorCQl3YW50IGFueSBndXR0ZXIuCisKKwkJV2UgdHJ5IGFuZCBiZSBhIGxpdHRsZSBjbGV2ZXIsIGlmIHRoZSBsaW5lIHdlIG5lZWQgdG8gZHJhdyBpcyBnb2luZworCQl0byBjcm9zcyBvdGhlciBjb2x1bW5zIHdlIGFjdHVhbGx5IGRyYXcgaXQgYXMgaW4gdGhlIC4tLS0nIHN0eWxlCisJCWluc3RlYWQgb2YgYSBwdXJlIGRpYWdvbmFsIC4uLiB0aGlzIHJlZHVjZXMgY29uZnVzaW9uIGJ5IGFuCisJCWluY3JlZGlibGUgYW1vdW50LgorCQkiIiIKKwkJY3R4ID0gd2luZG93LmNhaXJvX2NyZWF0ZSgpCisJCWN0eC5yZWN0YW5nbGUoYmdfYXJlYS54LCBiZ19hcmVhLnksIGJnX2FyZWEud2lkdGgsIGJnX2FyZWEuaGVpZ2h0KQorCQljdHguY2xpcCgpCisKKwkJYm94X3NpemUgPSBzZWxmLmJveF9zaXplKHdpZGdldCkKKworCQljdHguc2V0X2xpbmVfd2lkdGgoYm94X3NpemUgLyA4KQorCQljdHguc2V0X2xpbmVfY2FwKGNhaXJvLkxJTkVfQ0FQX1NRVUFSRSkKKworCQkjIERyYXcgbGluZXMgaW50byB0aGUgY2VsbAorCQlmb3Igc3RhcnQsIGVuZCwgY29sb3VyIGluIHNlbGYuaW5fbGluZXM6CisJCQljdHgubW92ZV90byhjZWxsX2FyZWEueCArIGJveF9zaXplICogc3RhcnQgKyBib3hfc2l6ZSAvIDIsCisJCQkJCWJnX2FyZWEueSAtIGJnX2FyZWEuaGVpZ2h0IC8gMikKKworCQkJaWYgc3RhcnQgLSBlbmQgPiAxOgorCQkJCWN0eC5saW5lX3RvKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBzdGFydCwgYmdfYXJlYS55KQorCQkJCWN0eC5saW5lX3RvKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBlbmQgKyBib3hfc2l6ZSwgYmdfYXJlYS55KQorCQkJZWxpZiBzdGFydCAtIGVuZCA8IC0xOgorCQkJCWN0eC5saW5lX3RvKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBzdGFydCArIGJveF9zaXplLAorCQkJCQkJYmdfYXJlYS55KQorCQkJCWN0eC5saW5lX3RvKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBlbmQsIGJnX2FyZWEueSkKKworCQkJY3R4LmxpbmVfdG8oY2VsbF9hcmVhLnggKyBib3hfc2l6ZSAqIGVuZCArIGJveF9zaXplIC8gMiwKKwkJCQkJYmdfYXJlYS55ICsgYmdfYXJlYS5oZWlnaHQgLyAyKQorCisJCQlzZWxmLnNldF9jb2xvdXIoY3R4LCBjb2xvdXIsIDAuMCwgMC42NSkKKwkJCWN0eC5zdHJva2UoKQorCisJCSMgRHJhdyBsaW5lcyBvdXQgb2YgdGhlIGNlbGwKKwkJZm9yIHN0YXJ0LCBlbmQsIGNvbG91ciBpbiBzZWxmLm91dF9saW5lczoKKwkJCWN0eC5tb3ZlX3RvKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBzdGFydCArIGJveF9zaXplIC8gMiwKKwkJCQkJYmdfYXJlYS55ICsgYmdfYXJlYS5oZWlnaHQgLyAyKQorCisJCQlpZiBzdGFydCAtIGVuZCA+IDE6CisJCQkJY3R4LmxpbmVfdG8oY2VsbF9hcmVhLnggKyBib3hfc2l6ZSAqIHN0YXJ0LAorCQkJCQkJYmdfYXJlYS55ICsgYmdfYXJlYS5oZWlnaHQpCisJCQkJY3R4LmxpbmVfdG8oY2VsbF9hcmVhLnggKyBib3hfc2l6ZSAqIGVuZCArIGJveF9zaXplLAorCQkJCQkJYmdfYXJlYS55ICsgYmdfYXJlYS5oZWlnaHQpCisJCQllbGlmIHN0YXJ0IC0gZW5kIDwgLTE6CisJCQkJY3R4LmxpbmVfdG8oY2VsbF9hcmVhLnggKyBib3hfc2l6ZSAqIHN0YXJ0ICsgYm94X3NpemUsCisJCQkJCQliZ19hcmVhLnkgKyBiZ19hcmVhLmhlaWdodCkKKwkJCQljdHgubGluZV90byhjZWxsX2FyZWEueCArIGJveF9zaXplICogZW5kLAorCQkJCQkJYmdfYXJlYS55ICsgYmdfYXJlYS5oZWlnaHQpCisKKwkJCWN0eC5saW5lX3RvKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBlbmQgKyBib3hfc2l6ZSAvIDIsCisJCQkJCWJnX2FyZWEueSArIGJnX2FyZWEuaGVpZ2h0IC8gMiArIGJnX2FyZWEuaGVpZ2h0KQorCisJCQlzZWxmLnNldF9jb2xvdXIoY3R4LCBjb2xvdXIsIDAuMCwgMC42NSkKKwkJCWN0eC5zdHJva2UoKQorCisJCSMgRHJhdyB0aGUgcmV2aXNpb24gbm9kZSBpbiB0aGUgcmlnaHQgY29sdW1uCisJCShjb2x1bW4sIGNvbG91ciwgbmFtZXMpID0gc2VsZi5ub2RlCisJCWN0eC5hcmMoY2VsbF9hcmVhLnggKyBib3hfc2l6ZSAqIGNvbHVtbiArIGJveF9zaXplIC8gMiwKKwkJCQljZWxsX2FyZWEueSArIGNlbGxfYXJlYS5oZWlnaHQgLyAyLAorCQkJCWJveF9zaXplIC8gNCwgMCwgMiAqIG1hdGgucGkpCisKKworCQlzZWxmLnNldF9jb2xvdXIoY3R4LCBjb2xvdXIsIDAuMCwgMC41KQorCQljdHguc3Ryb2tlX3ByZXNlcnZlKCkKKworCQlzZWxmLnNldF9jb2xvdXIoY3R4LCBjb2xvdXIsIDAuNSwgMS4wKQorCQljdHguZmlsbF9wcmVzZXJ2ZSgpCisKKwkJaWYgKGxlbihuYW1lcykgIT0gMCk6CisJCQluYW1lID0gIiAiCisJCQlmb3IgaXRlbSBpbiBuYW1lczoKKwkJCQluYW1lID0gbmFtZSArIGl0ZW0gKyAiICIKKworCQkJY3R4LnNldF9mb250X3NpemUoMTMpCisJCQlpZiAoZmxhZ3MgJiAxKToKKwkJCQlzZWxmLnNldF9jb2xvdXIoY3R4LCBjb2xvdXIsIDAuNSwgMS4wKQorCQkJZWxzZToKKwkJCQlzZWxmLnNldF9jb2xvdXIoY3R4LCBjb2xvdXIsIDAuMCwgMC41KQorCQkJY3R4LnNob3dfdGV4dChuYW1lKQorCitjbGFzcyBDb21taXQob2JqZWN0KToKKwkiIiIgVGhpcyByZXByZXNlbnQgYSBjb21taXQgb2JqZWN0IG9idGFpbmVkIGFmdGVyIHBhcnNpbmcgdGhlIGdpdC1yZXYtbGlzdAorCW91dHB1dCAiIiIKKworCV9fc2xvdHNfXyA9IFsnY2hpbGRyZW5fc2hhMScsICdtZXNzYWdlJywgJ2F1dGhvcicsICdkYXRlJywgJ2NvbW1pdHRlcicsCisJCQkJICdjb21taXRfZGF0ZScsICdjb21taXRfc2hhMScsICdwYXJlbnRfc2hhMSddCisKKwljaGlsZHJlbl9zaGExID0ge30KKworCWRlZiBfX2luaXRfXyhzZWxmLCBjb21taXRfbGluZXMpOgorCQlzZWxmLm1lc3NhZ2UJCT0gIiIKKwkJc2VsZi5hdXRob3IJCT0gIiIKKwkJc2VsZi5kYXRlCQk9ICIiCisJCXNlbGYuY29tbWl0dGVyCQk9ICIiCisJCXNlbGYuY29tbWl0X2RhdGUJPSAiIgorCQlzZWxmLmNvbW1pdF9zaGExCT0gIiIKKwkJc2VsZi5wYXJlbnRfc2hhMQk9IFsgXQorCQlzZWxmLnBhcnNlX2NvbW1pdChjb21taXRfbGluZXMpCisKKworCWRlZiBwYXJzZV9jb21taXQoc2VsZiwgY29tbWl0X2xpbmVzKToKKworCQkjIEZpcnN0IGxpbmUgaXMgdGhlIHNoYTEgbGluZXMKKwkJbGluZSA9IHN0cmluZy5zdHJpcChjb21taXRfbGluZXNbMF0pCisJCXNoYTEgPSByZS5zcGxpdCgiICIsIGxpbmUpCisJCXNlbGYuY29tbWl0X3NoYTEgPSBzaGExWzBdCisJCXNlbGYucGFyZW50X3NoYTEgPSBzaGExWzE6XQorCisJCSNidWlsZCB0aGUgY2hpbGQgbGlzdAorCQlmb3IgcGFyZW50X2lkIGluIHNlbGYucGFyZW50X3NoYTE6CisJCQl0cnk6CisJCQkJQ29tbWl0LmNoaWxkcmVuX3NoYTFbcGFyZW50X2lkXS5hcHBlbmQoc2VsZi5jb21taXRfc2hhMSkKKwkJCWV4Y2VwdCBLZXlFcnJvcjoKKwkJCQlDb21taXQuY2hpbGRyZW5fc2hhMVtwYXJlbnRfaWRdID0gW3NlbGYuY29tbWl0X3NoYTFdCisKKwkJIyBJRiB3ZSBkb24ndCBoYXZlIHBhcmVudAorCQlpZiAobGVuKHNlbGYucGFyZW50X3NoYTEpID09IDApOgorCQkJc2VsZi5wYXJlbnRfc2hhMSA9IFswXQorCisJCWZvciBsaW5lIGluIGNvbW1pdF9saW5lc1sxOl06CisJCQltID0gcmUubWF0Y2goIl4gIiwgbGluZSkKKwkJCWlmIChtICE9IE5vbmUpOgorCQkJCSMgRmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgdXNlZCBmb3Igc2hvcnQgbG9nCisJCQkJaWYgc2VsZi5tZXNzYWdlID09ICIiOgorCQkJCQlzZWxmLm1lc3NhZ2UgPSBzdHJpbmcuc3RyaXAobGluZSkKKwkJCQljb250aW51ZQorCisJCQltID0gcmUubWF0Y2goInRyZWUiLCBsaW5lKQorCQkJaWYgKG0gIT0gTm9uZSk6CisJCQkJY29udGludWUKKworCQkJbSA9IHJlLm1hdGNoKCJwYXJlbnQiLCBsaW5lKQorCQkJaWYgKG0gIT0gTm9uZSk6CisJCQkJY29udGludWUKKworCQkJbSA9IHJlX2lkZW50Lm1hdGNoKGxpbmUpCisJCQlpZiAobSAhPSBOb25lKToKKwkJCQlkYXRlID0gc2hvd19kYXRlKG0uZ3JvdXAoJ2Vwb2NoJyksIG0uZ3JvdXAoJ3R6JykpCisJCQkJaWYgbS5ncm91cCgxKSA9PSAiYXV0aG9yIjoKKwkJCQkJc2VsZi5hdXRob3IgPSBtLmdyb3VwKCdpZGVudCcpCisJCQkJCXNlbGYuZGF0ZSA9IGRhdGUKKwkJCQllbGlmIG0uZ3JvdXAoMSkgPT0gImNvbW1pdHRlciI6CisJCQkJCXNlbGYuY29tbWl0dGVyID0gbS5ncm91cCgnaWRlbnQnKQorCQkJCQlzZWxmLmNvbW1pdF9kYXRlID0gZGF0ZQorCisJCQkJY29udGludWUKKworCWRlZiBnZXRfbWVzc2FnZShzZWxmLCB3aXRoX2RpZmY9MCk6CisJCWlmICh3aXRoX2RpZmYgPT0gMSk6CisJCQltZXNzYWdlID0gc2VsZi5kaWZmX3RyZWUoKQorCQllbHNlOgorCQkJZnAgPSBvcy5wb3BlbigiZ2l0IGNhdC1maWxlIGNvbW1pdCAiICsgc2VsZi5jb21taXRfc2hhMSkKKwkJCW1lc3NhZ2UgPSBmcC5yZWFkKCkKKwkJCWZwLmNsb3NlKCkKKworCQlyZXR1cm4gbWVzc2FnZQorCisJZGVmIGRpZmZfdHJlZShzZWxmKToKKwkJZnAgPSBvcy5wb3BlbigiZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLWNjICAtdiAtcCAtLWFsd2F5cyAiICsgIHNlbGYuY29tbWl0X3NoYTEpCisJCWRpZmYgPSBmcC5yZWFkKCkKKwkJZnAuY2xvc2UoKQorCQlyZXR1cm4gZGlmZgorCitjbGFzcyBBbm5vdGF0ZVdpbmRvdyhvYmplY3QpOgorCSIiIkFubm90YXRlIHdpbmRvdy4KKwlUaGlzIG9iamVjdCByZXByZXNlbnRzIGFuZCBtYW5hZ2VzIGEgc2luZ2xlIHdpbmRvdyBjb250YWluaW5nIHRoZQorCWFubm90YXRlIGluZm9ybWF0aW9uIG9mIHRoZSBmaWxlCisJIiIiCisKKwlkZWYgX19pbml0X18oc2VsZik6CisJCXNlbGYud2luZG93ID0gZ3RrLldpbmRvdyhndGsuV0lORE9XX1RPUExFVkVMKQorCQlzZWxmLndpbmRvdy5zZXRfYm9yZGVyX3dpZHRoKDApCisJCXNlbGYud2luZG93LnNldF90aXRsZSgiR2l0IHJlcG9zaXRvcnkgYnJvd3NlciBhbm5vdGF0aW9uIHdpbmRvdyIpCisJCXNlbGYucHJldl9yZWFkID0gIiIKKworCQkjIFVzZSB0d28gdGhpcmRzIG9mIHRoZSBzY3JlZW4gYnkgZGVmYXVsdAorCQlzY3JlZW4gPSBzZWxmLndpbmRvdy5nZXRfc2NyZWVuKCkKKwkJbW9uaXRvciA9IHNjcmVlbi5nZXRfbW9uaXRvcl9nZW9tZXRyeSgwKQorCQl3aWR0aCA9IGludChtb25pdG9yLndpZHRoICogMC42NikKKwkJaGVpZ2h0ID0gaW50KG1vbml0b3IuaGVpZ2h0ICogMC42NikKKwkJc2VsZi53aW5kb3cuc2V0X2RlZmF1bHRfc2l6ZSh3aWR0aCwgaGVpZ2h0KQorCisJZGVmIGFkZF9maWxlX2RhdGEoc2VsZiwgZmlsZW5hbWUsIGNvbW1pdF9zaGExLCBsaW5lX251bSk6CisJCWZwID0gb3MucG9wZW4oImdpdCBjYXQtZmlsZSBibG9iICIgKyBjb21taXRfc2hhMSArIjoiK2ZpbGVuYW1lKQorCQlpID0gMTsKKwkJZm9yIGxpbmUgaW4gZnAucmVhZGxpbmVzKCk6CisJCQlsaW5lID0gc3RyaW5nLnJzdHJpcChsaW5lKQorCQkJc2VsZi5tb2RlbC5hcHBlbmQoTm9uZSwgWyJIRUFEIiwgZmlsZW5hbWUsIGxpbmUsIGldKQorCQkJaSA9IGkrMQorCQlmcC5jbG9zZSgpCisKKwkJIyBub3cgc2V0IHRoZSBjdXJzb3IgcG9zaXRpb24KKwkJc2VsZi50cmVldmlldy5zZXRfY3Vyc29yKGxpbmVfbnVtLTEpCisJCXNlbGYudHJlZXZpZXcuZ3JhYl9mb2N1cygpCisKKwlkZWYgX3RyZWV2aWV3X2N1cnNvcl9jYihzZWxmLCAqYXJncyk6CisJCSIiIkNhbGxiYWNrIGZvciB3aGVuIHRoZSB0cmVldmlldyBjdXJzb3IgY2hhbmdlcy4iIiIKKwkJKHBhdGgsIGNvbCkgPSBzZWxmLnRyZWV2aWV3LmdldF9jdXJzb3IoKQorCQljb21taXRfc2hhMSA9IHNlbGYubW9kZWxbcGF0aF1bMF0KKwkJY29tbWl0X21zZyA9ICIiCisJCWZwID0gb3MucG9wZW4oImdpdCBjYXQtZmlsZSBjb21taXQgIiArIGNvbW1pdF9zaGExKQorCQlmb3IgbGluZSBpbiBmcC5yZWFkbGluZXMoKToKKwkJCWNvbW1pdF9tc2cgPSAgY29tbWl0X21zZyArIGxpbmUKKwkJZnAuY2xvc2UoKQorCisJCXNlbGYuY29tbWl0X2J1ZmZlci5zZXRfdGV4dChjb21taXRfbXNnKQorCisJZGVmIF90cmVldmlld19yb3dfYWN0aXZhdGVkKHNlbGYsICphcmdzKToKKwkJIiIiQ2FsbGJhY2sgZm9yIHdoZW4gdGhlIHRyZWV2aWV3IHJvdyBnZXRzIHNlbGVjdGVkLiIiIgorCQkocGF0aCwgY29sKSA9IHNlbGYudHJlZXZpZXcuZ2V0X2N1cnNvcigpCisJCWNvbW1pdF9zaGExID0gc2VsZi5tb2RlbFtwYXRoXVswXQorCQlmaWxlbmFtZSAgICA9IHNlbGYubW9kZWxbcGF0aF1bMV0KKwkJbGluZV9udW0gICAgPSBzZWxmLm1vZGVsW3BhdGhdWzNdCisKKwkJd2luZG93ID0gQW5ub3RhdGVXaW5kb3coKTsKKwkJZnAgPSBvcy5wb3BlbigiZ2l0IHJldi1wYXJzZSAiKyBjb21taXRfc2hhMSArICJ+MSIpCisJCWNvbW1pdF9zaGExID0gc3RyaW5nLnN0cmlwKGZwLnJlYWRsaW5lKCkpCisJCWZwLmNsb3NlKCkKKwkJd2luZG93LmFubm90YXRlKGZpbGVuYW1lLCBjb21taXRfc2hhMSwgbGluZV9udW0pCisKKwlkZWYgZGF0YV9yZWFkeShzZWxmLCBzb3VyY2UsIGNvbmRpdGlvbik6CisJCXdoaWxlICgxKToKKwkJCXRyeSA6CisJCQkJIyBBIHNpbXBsZSByZWFkbGluZSBkb2Vzbid0IHdvcmsKKwkJCQkjIGEgcmVhZGxpbmUgYnVnID8/CisJCQkJYnVmZmVyID0gc291cmNlLnJlYWQoMTAwKQorCisJCQlleGNlcHQ6CisJCQkJIyByZXNvdXJjZSB0ZW1wb3Jhcnkgbm90IGF2YWlsYWJsZQorCQkJCXJldHVybiBUcnVlCisKKwkJCWlmIChsZW4oYnVmZmVyKSA9PSAwKToKKwkJCQlnb2JqZWN0LnNvdXJjZV9yZW1vdmUoc2VsZi5pb193YXRjaF90YWcpCisJCQkJc291cmNlLmNsb3NlKCkKKwkJCQlyZXR1cm4gRmFsc2UKKworCQkJaWYgKHNlbGYucHJldl9yZWFkICE9ICIiKToKKwkJCQlidWZmZXIgPSBzZWxmLnByZXZfcmVhZCArIGJ1ZmZlcgorCQkJCXNlbGYucHJldl9yZWFkID0gIiIKKworCQkJaWYgKGJ1ZmZlcltsZW4oYnVmZmVyKSAtMV0gIT0gJ1xuJyk6CisJCQkJdHJ5OgorCQkJCQluZXdsaW5lX2luZGV4ID0gYnVmZmVyLnJpbmRleCgiXG4iKQorCQkJCWV4Y2VwdCBWYWx1ZUVycm9yOgorCQkJCQluZXdsaW5lX2luZGV4ID0gMAorCisJCQkJc2VsZi5wcmV2X3JlYWQgPSBidWZmZXJbbmV3bGluZV9pbmRleDoobGVuKGJ1ZmZlcikpXQorCQkJCWJ1ZmZlciA9IGJ1ZmZlclswOm5ld2xpbmVfaW5kZXhdCisKKwkJCWZvciBidWZmIGluIGJ1ZmZlci5zcGxpdCgiXG4iKToKKwkJCQlhbm5vdGF0ZV9saW5lID0gcmUuY29tcGlsZSgnXihbMC05YS1mXXs0MH0pICguKykgKC4rKSAoLispJCcpCisJCQkJbSA9IGFubm90YXRlX2xpbmUubWF0Y2goYnVmZikKKwkJCQlpZiBub3QgbToKKwkJCQkJYW5ub3RhdGVfbGluZSA9IHJlLmNvbXBpbGUoJ14oZmlsZW5hbWUpICguKykkJykKKwkJCQkJbSA9IGFubm90YXRlX2xpbmUubWF0Y2goYnVmZikKKwkJCQkJaWYgbm90IG06CisJCQkJCQljb250aW51ZQorCQkJCQlmaWxlbmFtZSA9IG0uZ3JvdXAoMikKKwkJCQllbHNlOgorCQkJCQlzZWxmLmNvbW1pdF9zaGExID0gbS5ncm91cCgxKQorCQkJCQlzZWxmLnNvdXJjZV9saW5lID0gaW50KG0uZ3JvdXAoMikpCisJCQkJCXNlbGYucmVzdWx0X2xpbmUgPSBpbnQobS5ncm91cCgzKSkKKwkJCQkJc2VsZi5jb3VudAkgICAgPSBpbnQobS5ncm91cCg0KSkKKwkJCQkJI3NldCB0aGUgZGV0YWlscyBvbmx5IHdoZW4gd2UgaGF2ZSB0aGUgZmlsZSBuYW1lCisJCQkJCWNvbnRpbnVlCisKKwkJCQl3aGlsZSAoc2VsZi5jb3VudCA+IDApOgorCQkJCQkjIHNldCBhdCByZXN1bHRfbGluZSArIGNvdW50LTEgdGhlIHNoYTEgYXMgY29tbWl0X3NoYTEKKwkJCQkJc2VsZi5jb3VudCA9IHNlbGYuY291bnQgLSAxCisJCQkJCWl0ZXIgPSBzZWxmLm1vZGVsLml0ZXJfbnRoX2NoaWxkKE5vbmUsIHNlbGYucmVzdWx0X2xpbmUgKyBzZWxmLmNvdW50LTEpCisJCQkJCXNlbGYubW9kZWwuc2V0KGl0ZXIsIDAsIHNlbGYuY29tbWl0X3NoYTEsIDEsIGZpbGVuYW1lLCAzLCBzZWxmLnNvdXJjZV9saW5lKQorCisKKwlkZWYgYW5ub3RhdGUoc2VsZiwgZmlsZW5hbWUsIGNvbW1pdF9zaGExLCBsaW5lX251bSk6CisJCSMgdmVyaWZ5IHRoZSBjb21taXRfc2hhMSBzcGVjaWZpZWQgaGFzIHRoaXMgZmlsZW5hbWUKKworCQlmcCA9IG9zLnBvcGVuKCJnaXQgbHMtdHJlZSAiKyBjb21taXRfc2hhMSArICIgLS0gIiArIGZpbGVuYW1lKQorCQlsaW5lID0gc3RyaW5nLnN0cmlwKGZwLnJlYWRsaW5lKCkpCisJCWlmIGxpbmUgPT0gJyc6CisJCQkjIHBvcCB1cCB0aGUgbWVzc2FnZSB0aGUgZmlsZSBpcyBub3QgdGhlcmUgYXMgYSBwYXJ0IG9mIHRoZSBjb21taXQKKwkJCWZwLmNsb3NlKCkKKwkJCWRpYWxvZyA9IGd0ay5NZXNzYWdlRGlhbG9nKHBhcmVudD1Ob25lLCBmbGFncz0wLAorCQkJCQl0eXBlPWd0ay5NRVNTQUdFX1dBUk5JTkcsIGJ1dHRvbnM9Z3RrLkJVVFRPTlNfQ0xPU0UsCisJCQkJCW1lc3NhZ2VfZm9ybWF0PU5vbmUpCisJCQlkaWFsb2cuc2V0X21hcmt1cCgiVGhlIGZpbGUgJXMgaXMgbm90IHByZXNlbnQgaW4gdGhlIHBhcmVudCBjb21taXQgJXMiICUgKGZpbGVuYW1lLCBjb21taXRfc2hhMSkpCisJCQlkaWFsb2cucnVuKCkKKwkJCWRpYWxvZy5kZXN0cm95KCkKKwkJCXJldHVybgorCisJCWZwLmNsb3NlKCkKKworCQl2cGFuID0gZ3RrLlZQYW5lZCgpOworCQlzZWxmLndpbmRvdy5hZGQodnBhbik7CisJCXZwYW4uc2hvdygpCisKKwkJc2Nyb2xsd2luID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKwkJc2Nyb2xsd2luLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorCQlzY3JvbGx3aW4uc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisJCXZwYW4ucGFjazEoc2Nyb2xsd2luLCBUcnVlLCBUcnVlKTsKKwkJc2Nyb2xsd2luLnNob3coKQorCisJCXNlbGYubW9kZWwgPSBndGsuVHJlZVN0b3JlKHN0ciwgc3RyLCBzdHIsIGludCkKKwkJc2VsZi50cmVldmlldyA9IGd0ay5UcmVlVmlldyhzZWxmLm1vZGVsKQorCQlzZWxmLnRyZWV2aWV3LnNldF9ydWxlc19oaW50KFRydWUpCisJCXNlbGYudHJlZXZpZXcuc2V0X3NlYXJjaF9jb2x1bW4oMCkKKwkJc2VsZi50cmVldmlldy5jb25uZWN0KCJjdXJzb3ItY2hhbmdlZCIsIHNlbGYuX3RyZWV2aWV3X2N1cnNvcl9jYikKKwkJc2VsZi50cmVldmlldy5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5fdHJlZXZpZXdfcm93X2FjdGl2YXRlZCkKKwkJc2Nyb2xsd2luLmFkZChzZWxmLnRyZWV2aWV3KQorCQlzZWxmLnRyZWV2aWV3LnNob3coKQorCisJCWNlbGwgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisJCWNlbGwuc2V0X3Byb3BlcnR5KCJ3aWR0aC1jaGFycyIsIDEwKQorCQljZWxsLnNldF9wcm9wZXJ0eSgiZWxsaXBzaXplIiwgcGFuZ28uRUxMSVBTSVpFX0VORCkKKwkJY29sdW1uID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCJDb21taXQiKQorCQljb2x1bW4uc2V0X3Jlc2l6YWJsZShUcnVlKQorCQljb2x1bW4ucGFja19zdGFydChjZWxsLCBleHBhbmQ9VHJ1ZSkKKwkJY29sdW1uLmFkZF9hdHRyaWJ1dGUoY2VsbCwgInRleHQiLCAwKQorCQlzZWxmLnRyZWV2aWV3LmFwcGVuZF9jb2x1bW4oY29sdW1uKQorCisJCWNlbGwgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisJCWNlbGwuc2V0X3Byb3BlcnR5KCJ3aWR0aC1jaGFycyIsIDIwKQorCQljZWxsLnNldF9wcm9wZXJ0eSgiZWxsaXBzaXplIiwgcGFuZ28uRUxMSVBTSVpFX0VORCkKKwkJY29sdW1uID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCJGaWxlIE5hbWUiKQorCQljb2x1bW4uc2V0X3Jlc2l6YWJsZShUcnVlKQorCQljb2x1bW4ucGFja19zdGFydChjZWxsLCBleHBhbmQ9VHJ1ZSkKKwkJY29sdW1uLmFkZF9hdHRyaWJ1dGUoY2VsbCwgInRleHQiLCAxKQorCQlzZWxmLnRyZWV2aWV3LmFwcGVuZF9jb2x1bW4oY29sdW1uKQorCisJCWNlbGwgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisJCWNlbGwuc2V0X3Byb3BlcnR5KCJ3aWR0aC1jaGFycyIsIDIwKQorCQljZWxsLnNldF9wcm9wZXJ0eSgiZWxsaXBzaXplIiwgcGFuZ28uRUxMSVBTSVpFX0VORCkKKwkJY29sdW1uID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCJEYXRhIikKKwkJY29sdW1uLnNldF9yZXNpemFibGUoVHJ1ZSkKKwkJY29sdW1uLnBhY2tfc3RhcnQoY2VsbCwgZXhwYW5kPVRydWUpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJ0ZXh0IiwgMikKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQkjIFRoZSBjb21taXQgbWVzc2FnZSB3aW5kb3cKKwkJc2Nyb2xsd2luID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKwkJc2Nyb2xsd2luLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorCQlzY3JvbGx3aW4uc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisJCXZwYW4ucGFjazIoc2Nyb2xsd2luLCBUcnVlLCBUcnVlKTsKKwkJc2Nyb2xsd2luLnNob3coKQorCisJCWNvbW1pdF90ZXh0ID0gZ3RrLlRleHRWaWV3KCkKKwkJc2VsZi5jb21taXRfYnVmZmVyID0gZ3RrLlRleHRCdWZmZXIoKQorCQljb21taXRfdGV4dC5zZXRfYnVmZmVyKHNlbGYuY29tbWl0X2J1ZmZlcikKKwkJc2Nyb2xsd2luLmFkZChjb21taXRfdGV4dCkKKwkJY29tbWl0X3RleHQuc2hvdygpCisKKwkJc2VsZi53aW5kb3cuc2hvdygpCisKKwkJc2VsZi5hZGRfZmlsZV9kYXRhKGZpbGVuYW1lLCBjb21taXRfc2hhMSwgbGluZV9udW0pCisKKwkJZnAgPSBvcy5wb3BlbigiZ2l0IGJsYW1lIC0taW5jcmVtZW50YWwgLUMgLUMgLS0gIiArIGZpbGVuYW1lICsgIiAiICsgY29tbWl0X3NoYTEpCisJCWZsYWdzID0gZmNudGwuZmNudGwoZnAuZmlsZW5vKCksIGZjbnRsLkZfR0VURkwpCisJCWZjbnRsLmZjbnRsKGZwLmZpbGVubygpLCBmY250bC5GX1NFVEZMLCBmbGFncyB8IG9zLk9fTk9OQkxPQ0spCisJCXNlbGYuaW9fd2F0Y2hfdGFnID0gZ29iamVjdC5pb19hZGRfd2F0Y2goZnAsIGdvYmplY3QuSU9fSU4sIHNlbGYuZGF0YV9yZWFkeSkKKworCitjbGFzcyBEaWZmV2luZG93KG9iamVjdCk6CisJIiIiRGlmZiB3aW5kb3cuCisJVGhpcyBvYmplY3QgcmVwcmVzZW50cyBhbmQgbWFuYWdlcyBhIHNpbmdsZSB3aW5kb3cgY29udGFpbmluZyB0aGUKKwlkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byByZXZpc2lvbnMgb24gYSBicmFuY2guCisJIiIiCisKKwlkZWYgX19pbml0X18oc2VsZik6CisJCXNlbGYud2luZG93ID0gZ3RrLldpbmRvdyhndGsuV0lORE9XX1RPUExFVkVMKQorCQlzZWxmLndpbmRvdy5zZXRfYm9yZGVyX3dpZHRoKDApCisJCXNlbGYud2luZG93LnNldF90aXRsZSgiR2l0IHJlcG9zaXRvcnkgYnJvd3NlciBkaWZmIHdpbmRvdyIpCisKKwkJIyBVc2UgdHdvIHRoaXJkcyBvZiB0aGUgc2NyZWVuIGJ5IGRlZmF1bHQKKwkJc2NyZWVuID0gc2VsZi53aW5kb3cuZ2V0X3NjcmVlbigpCisJCW1vbml0b3IgPSBzY3JlZW4uZ2V0X21vbml0b3JfZ2VvbWV0cnkoMCkKKwkJd2lkdGggPSBpbnQobW9uaXRvci53aWR0aCAqIDAuNjYpCisJCWhlaWdodCA9IGludChtb25pdG9yLmhlaWdodCAqIDAuNjYpCisJCXNlbGYud2luZG93LnNldF9kZWZhdWx0X3NpemUod2lkdGgsIGhlaWdodCkKKworCisJCXNlbGYuY29uc3RydWN0KCkKKworCWRlZiBjb25zdHJ1Y3Qoc2VsZik6CisJCSIiIkNvbnN0cnVjdCB0aGUgd2luZG93IGNvbnRlbnRzLiIiIgorCQl2Ym94ID0gZ3RrLlZCb3goKQorCQlzZWxmLndpbmRvdy5hZGQodmJveCkKKwkJdmJveC5zaG93KCkKKworCQltZW51X2JhciA9IGd0ay5NZW51QmFyKCkKKwkJc2F2ZV9tZW51ID0gZ3RrLkltYWdlTWVudUl0ZW0oZ3RrLlNUT0NLX1NBVkUpCisJCXNhdmVfbWVudS5jb25uZWN0KCJhY3RpdmF0ZSIsIHNlbGYuc2F2ZV9tZW51X3Jlc3BvbnNlLCAic2F2ZSIpCisJCXNhdmVfbWVudS5zaG93KCkKKwkJbWVudV9iYXIuYXBwZW5kKHNhdmVfbWVudSkKKwkJdmJveC5wYWNrX3N0YXJ0KG1lbnVfYmFyLCBleHBhbmQ9RmFsc2UsIGZpbGw9VHJ1ZSkKKwkJbWVudV9iYXIuc2hvdygpCisKKwkJaHBhbiA9IGd0ay5IUGFuZWQoKQorCisJCXNjcm9sbHdpbiA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisJCXNjcm9sbHdpbi5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKwkJc2Nyb2xsd2luLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorCQlocGFuLnBhY2sxKHNjcm9sbHdpbiwgVHJ1ZSwgVHJ1ZSkKKwkJc2Nyb2xsd2luLnNob3coKQorCisJCShzZWxmLmJ1ZmZlciwgc291cmNldmlldykgPSBnZXRfc291cmNlX2J1ZmZlcl9hbmRfdmlldygpCisKKwkJc291cmNldmlldy5zZXRfZWRpdGFibGUoRmFsc2UpCisJCXNvdXJjZXZpZXcubW9kaWZ5X2ZvbnQocGFuZ28uRm9udERlc2NyaXB0aW9uKCJNb25vc3BhY2UiKSkKKwkJc2Nyb2xsd2luLmFkZChzb3VyY2V2aWV3KQorCQlzb3VyY2V2aWV3LnNob3coKQorCisJCSMgVGhlIGZpbGUgaGllcmFyY2h5OiBhIHNjcm9sbGFibGUgdHJlZXZpZXcKKwkJc2Nyb2xsd2luID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKwkJc2Nyb2xsd2luLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorCQlzY3JvbGx3aW4uc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisJCXNjcm9sbHdpbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwLCAtMSkKKwkJaHBhbi5wYWNrMihzY3JvbGx3aW4sIFRydWUsIFRydWUpCisJCXNjcm9sbHdpbi5zaG93KCkKKworCQlzZWxmLm1vZGVsID0gZ3RrLlRyZWVTdG9yZShzdHIsIHN0ciwgc3RyKQorCQlzZWxmLnRyZWV2aWV3ID0gZ3RrLlRyZWVWaWV3KHNlbGYubW9kZWwpCisJCXNlbGYudHJlZXZpZXcuc2V0X3NlYXJjaF9jb2x1bW4oMSkKKwkJc2VsZi50cmVldmlldy5jb25uZWN0KCJjdXJzb3ItY2hhbmdlZCIsIHNlbGYuX3RyZWV2aWV3X2NsaWNrZWQpCisJCXNjcm9sbHdpbi5hZGQoc2VsZi50cmVldmlldykKKwkJc2VsZi50cmVldmlldy5zaG93KCkKKworCQljZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorCQljZWxsLnNldF9wcm9wZXJ0eSgid2lkdGgtY2hhcnMiLCAyMCkKKwkJY29sdW1uID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCJTZWxlY3QgdG8gYW5ub3RhdGUiKQorCQljb2x1bW4ucGFja19zdGFydChjZWxsLCBleHBhbmQ9VHJ1ZSkKKwkJY29sdW1uLmFkZF9hdHRyaWJ1dGUoY2VsbCwgInRleHQiLCAwKQorCQlzZWxmLnRyZWV2aWV3LmFwcGVuZF9jb2x1bW4oY29sdW1uKQorCisJCXZib3gucGFja19zdGFydChocGFuLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCQlocGFuLnNob3coKQorCisJZGVmIF90cmVldmlld19jbGlja2VkKHNlbGYsICphcmdzKToKKwkJIiIiQ2FsbGJhY2sgZm9yIHdoZW4gdGhlIHRyZWV2aWV3IGN1cnNvciBjaGFuZ2VzLiIiIgorCQkocGF0aCwgY29sKSA9IHNlbGYudHJlZXZpZXcuZ2V0X2N1cnNvcigpCisJCXNwZWNpZmljX2ZpbGUgPSBzZWxmLm1vZGVsW3BhdGhdWzFdCisJCWNvbW1pdF9zaGExID0gIHNlbGYubW9kZWxbcGF0aF1bMl0KKwkJaWYgc3BlY2lmaWNfZmlsZSA9PSAgTm9uZSA6CisJCQlyZXR1cm4KKwkJZWxpZiBzcGVjaWZpY19maWxlID09ICAiIiA6CisJCQlzcGVjaWZpY19maWxlID0gIE5vbmUKKworCQl3aW5kb3cgPSBBbm5vdGF0ZVdpbmRvdygpOworCQl3aW5kb3cuYW5ub3RhdGUoc3BlY2lmaWNfZmlsZSwgY29tbWl0X3NoYTEsIDEpCisKKworCWRlZiBjb21taXRfZmlsZXMoc2VsZiwgY29tbWl0X3NoYTEsIHBhcmVudF9zaGExKToKKwkJc2VsZi5tb2RlbC5jbGVhcigpCisJCWFkZCAgPSBzZWxmLm1vZGVsLmFwcGVuZChOb25lLCBbICJBZGRlZCIsIE5vbmUsIE5vbmVdKQorCQlkZWxlID0gc2VsZi5tb2RlbC5hcHBlbmQoTm9uZSwgWyAiRGVsZXRlZCIsIE5vbmUsIE5vbmVdKQorCQltb2QgID0gc2VsZi5tb2RlbC5hcHBlbmQoTm9uZSwgWyAiTW9kaWZpZWQiLCBOb25lLCBOb25lXSkKKwkJZGlmZl90cmVlID0gcmUuY29tcGlsZSgnXig6Lns2fSkgKC57Nn0pICguezQwfSkgKC57NDB9KSAoQXxEfE0pXHMoLispJCcpCisJCWZwID0gb3MucG9wZW4oImdpdCBkaWZmLXRyZWUgLXIgLS1uby1jb21taXQtaWQgIiArIHBhcmVudF9zaGExICsgIiAiICsgY29tbWl0X3NoYTEpCisJCXdoaWxlIDE6CisJCQlsaW5lID0gc3RyaW5nLnN0cmlwKGZwLnJlYWRsaW5lKCkpCisJCQlpZiBsaW5lID09ICcnOgorCQkJCWJyZWFrCisJCQltID0gZGlmZl90cmVlLm1hdGNoKGxpbmUpCisJCQlpZiBub3QgbToKKwkJCQljb250aW51ZQorCisJCQlhdHRyID0gbS5ncm91cCg1KQorCQkJZmlsZW5hbWUgPSBtLmdyb3VwKDYpCisJCQlpZiBhdHRyID09ICJBIjoKKwkJCQlzZWxmLm1vZGVsLmFwcGVuZChhZGQsICBbZmlsZW5hbWUsIGZpbGVuYW1lLCBjb21taXRfc2hhMV0pCisJCQllbGlmIGF0dHIgPT0gIkQiOgorCQkJCXNlbGYubW9kZWwuYXBwZW5kKGRlbGUsIFtmaWxlbmFtZSwgZmlsZW5hbWUsIGNvbW1pdF9zaGExXSkKKwkJCWVsaWYgYXR0ciA9PSAiTSI6CisJCQkJc2VsZi5tb2RlbC5hcHBlbmQobW9kLCAgW2ZpbGVuYW1lLCBmaWxlbmFtZSwgY29tbWl0X3NoYTFdKQorCQlmcC5jbG9zZSgpCisKKwkJc2VsZi50cmVldmlldy5leHBhbmRfYWxsKCkKKworCWRlZiBzZXRfZGlmZihzZWxmLCBjb21taXRfc2hhMSwgcGFyZW50X3NoYTEsIGVuY29kaW5nKToKKwkJIiIiU2V0IHRoZSBkaWZmZXJlbmNlcyBzaG93ZWQgYnkgdGhpcyB3aW5kb3cuCisJCUNvbXBhcmVzIHRoZSB0d28gdHJlZXMgYW5kIHBvcHVsYXRlcyB0aGUgd2luZG93IHdpdGggdGhlCisJCWRpZmZlcmVuY2VzLgorCQkiIiIKKwkJIyBEaWZmIHdpdGggdGhlIGZpcnN0IGNvbW1pdCBvciB0aGUgbGFzdCBjb21taXQgc2hvd3Mgbm90aGluZworCQlpZiAoY29tbWl0X3NoYTEgPT0gMCBvciBwYXJlbnRfc2hhMSA9PSAwICk6CisJCQlyZXR1cm4KKworCQlmcCA9IG9zLnBvcGVuKCJnaXQgZGlmZi10cmVlIC1wICIgKyBwYXJlbnRfc2hhMSArICIgIiArIGNvbW1pdF9zaGExKQorCQlzZWxmLmJ1ZmZlci5zZXRfdGV4dCh1bmljb2RlKGZwLnJlYWQoKSwgZW5jb2RpbmcpLmVuY29kZSgndXRmLTgnKSkKKwkJZnAuY2xvc2UoKQorCQlzZWxmLmNvbW1pdF9maWxlcyhjb21taXRfc2hhMSwgcGFyZW50X3NoYTEpCisJCXNlbGYud2luZG93LnNob3coKQorCisJZGVmIHNhdmVfbWVudV9yZXNwb25zZShzZWxmLCB3aWRnZXQsIHN0cmluZyk6CisJCWRpYWxvZyA9IGd0ay5GaWxlQ2hvb3NlckRpYWxvZygiU2F2ZS4uIiwgTm9uZSwgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwKKwkJCQkoZ3RrLlNUT0NLX0NBTkNFTCwgZ3RrLlJFU1BPTlNFX0NBTkNFTCwKKwkJCQkJZ3RrLlNUT0NLX1NBVkUsIGd0ay5SRVNQT05TRV9PSykpCisJCWRpYWxvZy5zZXRfZGVmYXVsdF9yZXNwb25zZShndGsuUkVTUE9OU0VfT0spCisJCXJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisJCWlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9PSzoKKwkJCXBhdGNoX2J1ZmZlciA9IHNlbGYuYnVmZmVyLmdldF90ZXh0KHNlbGYuYnVmZmVyLmdldF9zdGFydF9pdGVyKCksCisJCQkJCXNlbGYuYnVmZmVyLmdldF9lbmRfaXRlcigpKQorCQkJZnAgPSBvcGVuKGRpYWxvZy5nZXRfZmlsZW5hbWUoKSwgInciKQorCQkJZnAud3JpdGUocGF0Y2hfYnVmZmVyKQorCQkJZnAuY2xvc2UoKQorCQlkaWFsb2cuZGVzdHJveSgpCisKK2NsYXNzIEdpdFZpZXcob2JqZWN0KToKKwkiIiIgVGhpcyBpcyB0aGUgbWFpbiBjbGFzcworCSIiIgorCXZlcnNpb24gPSAiMC45IgorCisJZGVmIF9faW5pdF9fKHNlbGYsIHdpdGhfZGlmZj0wKToKKwkJc2VsZi53aXRoX2RpZmYgPSB3aXRoX2RpZmYKKwkJc2VsZi53aW5kb3cgPQlndGsuV2luZG93KGd0ay5XSU5ET1dfVE9QTEVWRUwpCisJCXNlbGYud2luZG93LnNldF9ib3JkZXJfd2lkdGgoMCkKKwkJc2VsZi53aW5kb3cuc2V0X3RpdGxlKCJHaXQgcmVwb3NpdG9yeSBicm93c2VyIikKKworCQlzZWxmLmdldF9lbmNvZGluZygpCisJCXNlbGYuZ2V0X2J0X3NoYTEoKQorCisJCSMgVXNlIHRocmVlLXF1YXJ0ZXJzIG9mIHRoZSBzY3JlZW4gYnkgZGVmYXVsdAorCQlzY3JlZW4gPSBzZWxmLndpbmRvdy5nZXRfc2NyZWVuKCkKKwkJbW9uaXRvciA9IHNjcmVlbi5nZXRfbW9uaXRvcl9nZW9tZXRyeSgwKQorCQl3aWR0aCA9IGludChtb25pdG9yLndpZHRoICogMC43NSkKKwkJaGVpZ2h0ID0gaW50KG1vbml0b3IuaGVpZ2h0ICogMC43NSkKKwkJc2VsZi53aW5kb3cuc2V0X2RlZmF1bHRfc2l6ZSh3aWR0aCwgaGVpZ2h0KQorCisJCSMgRklYTUUgQW5keUZpdHohCisJCWljb24gPSBzZWxmLndpbmRvdy5yZW5kZXJfaWNvbihndGsuU1RPQ0tfSU5ERVgsIGd0ay5JQ09OX1NJWkVfQlVUVE9OKQorCQlzZWxmLndpbmRvdy5zZXRfaWNvbihpY29uKQorCisJCXNlbGYuYWNjZWxfZ3JvdXAgPSBndGsuQWNjZWxHcm91cCgpCisJCXNlbGYud2luZG93LmFkZF9hY2NlbF9ncm91cChzZWxmLmFjY2VsX2dyb3VwKQorCQlzZWxmLmFjY2VsX2dyb3VwLmNvbm5lY3RfZ3JvdXAoMHhmZmMyLCAwLCBndGsuQUNDRUxfTE9DS0VELCBzZWxmLnJlZnJlc2gpOworCQlzZWxmLmFjY2VsX2dyb3VwLmNvbm5lY3RfZ3JvdXAoMHhmZmMxLCAwLCBndGsuQUNDRUxfTE9DS0VELCBzZWxmLm1heGltaXplKTsKKwkJc2VsZi5hY2NlbF9ncm91cC5jb25uZWN0X2dyb3VwKDB4ZmZjOCwgMCwgZ3RrLkFDQ0VMX0xPQ0tFRCwgc2VsZi5mdWxsc2NyZWVuKTsKKwkJc2VsZi5hY2NlbF9ncm91cC5jb25uZWN0X2dyb3VwKDB4ZmZjOSwgMCwgZ3RrLkFDQ0VMX0xPQ0tFRCwgc2VsZi51bmZ1bGxzY3JlZW4pOworCisJCXNlbGYud2luZG93LmFkZChzZWxmLmNvbnN0cnVjdCgpKQorCisJZGVmIHJlZnJlc2goc2VsZiwgd2lkZ2V0LCBldmVudD1Ob25lLCAqYXJndW1lbnRzLCAqKmtleXdvcmRzKToKKwkJc2VsZi5nZXRfZW5jb2RpbmcoKQorCQlzZWxmLmdldF9idF9zaGExKCkKKwkJQ29tbWl0LmNoaWxkcmVuX3NoYTEgPSB7fQorCQlzZWxmLnNldF9icmFuY2goc3lzLmFyZ3Zbd2l0aG91dF9kaWZmOl0pCisJCXNlbGYud2luZG93LnNob3coKQorCQlyZXR1cm4gVHJ1ZQorCisJZGVmIG1heGltaXplKHNlbGYsIHdpZGdldCwgZXZlbnQ9Tm9uZSwgKmFyZ3VtZW50cywgKiprZXl3b3Jkcyk6CisJCXNlbGYud2luZG93Lm1heGltaXplKCkKKwkJcmV0dXJuIFRydWUKKworCWRlZiBmdWxsc2NyZWVuKHNlbGYsIHdpZGdldCwgZXZlbnQ9Tm9uZSwgKmFyZ3VtZW50cywgKiprZXl3b3Jkcyk6CisJCXNlbGYud2luZG93LmZ1bGxzY3JlZW4oKQorCQlyZXR1cm4gVHJ1ZQorCisJZGVmIHVuZnVsbHNjcmVlbihzZWxmLCB3aWRnZXQsIGV2ZW50PU5vbmUsICphcmd1bWVudHMsICoqa2V5d29yZHMpOgorCQlzZWxmLndpbmRvdy51bmZ1bGxzY3JlZW4oKQorCQlyZXR1cm4gVHJ1ZQorCisJZGVmIGdldF9idF9zaGExKHNlbGYpOgorCQkiIiIgVXBkYXRlIHRoZSBidF9zaGExIGRpY3Rpb25hcnkgd2l0aCB0aGUKKwkJcmVzcGVjdGl2ZSBzaGExIGRldGFpbHMgIiIiCisKKwkJc2VsZi5idF9zaGExID0geyB9CisJCWxzX3JlbW90ZSA9IHJlLmNvbXBpbGUoJ14oLns0MH0pXHRyZWZzLyhbXl5dKykoPzpcXF4oLi4pKT8kJyk7CisJCWZwID0gb3MucG9wZW4oJ2dpdCBscy1yZW1vdGUgIiR7R0lUX0RJUi0uZ2l0fSInKQorCQl3aGlsZSAxOgorCQkJbGluZSA9IHN0cmluZy5zdHJpcChmcC5yZWFkbGluZSgpKQorCQkJaWYgbGluZSA9PSAnJzoKKwkJCQlicmVhaworCQkJbSA9IGxzX3JlbW90ZS5tYXRjaChsaW5lKQorCQkJaWYgbm90IG06CisJCQkJY29udGludWUKKwkJCShzaGExLCBuYW1lKSA9IChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpKQorCQkJaWYgbm90IHNlbGYuYnRfc2hhMS5oYXNfa2V5KHNoYTEpOgorCQkJCXNlbGYuYnRfc2hhMVtzaGExXSA9IFtdCisJCQlzZWxmLmJ0X3NoYTFbc2hhMV0uYXBwZW5kKG5hbWUpCisJCWZwLmNsb3NlKCkKKworCWRlZiBnZXRfZW5jb2Rpbmcoc2VsZik6CisJCWZwID0gb3MucG9wZW4oImdpdCBjb25maWcgLS1nZXQgaTE4bi5jb21taXRlbmNvZGluZyIpCisJCXNlbGYuZW5jb2Rpbmc9c3RyaW5nLnN0cmlwKGZwLnJlYWRsaW5lKCkpCisJCWZwLmNsb3NlKCkKKwkJaWYgKHNlbGYuZW5jb2RpbmcgPT0gIiIpOgorCQkJc2VsZi5lbmNvZGluZyA9ICJ1dGYtOCIKKworCisJZGVmIGNvbnN0cnVjdChzZWxmKToKKwkJIiIiQ29uc3RydWN0IHRoZSB3aW5kb3cgY29udGVudHMuIiIiCisJCXZib3ggPSBndGsuVkJveCgpCisJCXBhbmVkID0gZ3RrLlZQYW5lZCgpCisJCXBhbmVkLnBhY2sxKHNlbGYuY29uc3RydWN0X3RvcCgpLCByZXNpemU9RmFsc2UsIHNocmluaz1UcnVlKQorCQlwYW5lZC5wYWNrMihzZWxmLmNvbnN0cnVjdF9ib3R0b20oKSwgcmVzaXplPUZhbHNlLCBzaHJpbms9VHJ1ZSkKKwkJbWVudV9iYXIgPSBndGsuTWVudUJhcigpCisJCW1lbnVfYmFyLnNldF9wYWNrX2RpcmVjdGlvbihndGsuUEFDS19ESVJFQ1RJT05fUlRMKQorCQloZWxwX21lbnUgPSBndGsuTWVudUl0ZW0oIkhlbHAiKQorCQltZW51ID0gZ3RrLk1lbnUoKQorCQlhYm91dF9tZW51ID0gZ3RrLk1lbnVJdGVtKCJBYm91dCIpCisJCW1lbnUuYXBwZW5kKGFib3V0X21lbnUpCisJCWFib3V0X21lbnUuY29ubmVjdCgiYWN0aXZhdGUiLCBzZWxmLmFib3V0X21lbnVfcmVzcG9uc2UsICJhYm91dCIpCisJCWFib3V0X21lbnUuc2hvdygpCisJCWhlbHBfbWVudS5zZXRfc3VibWVudShtZW51KQorCQloZWxwX21lbnUuc2hvdygpCisJCW1lbnVfYmFyLmFwcGVuZChoZWxwX21lbnUpCisJCW1lbnVfYmFyLnNob3coKQorCQl2Ym94LnBhY2tfc3RhcnQobWVudV9iYXIsIGV4cGFuZD1GYWxzZSwgZmlsbD1UcnVlKQorCQl2Ym94LnBhY2tfc3RhcnQocGFuZWQsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisJCXBhbmVkLnNob3coKQorCQl2Ym94LnNob3coKQorCQlyZXR1cm4gdmJveAorCisKKwlkZWYgY29uc3RydWN0X3RvcChzZWxmKToKKwkJIiIiQ29uc3RydWN0IHRoZSB0b3AtaGFsZiBvZiB0aGUgd2luZG93LiIiIgorCQl2Ym94ID0gZ3RrLlZCb3goc3BhY2luZz02KQorCQl2Ym94LnNldF9ib3JkZXJfd2lkdGgoMTIpCisJCXZib3guc2hvdygpCisKKworCQlzY3JvbGx3aW4gPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorCQlzY3JvbGx3aW4uc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisJCXNjcm9sbHdpbi5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKwkJdmJveC5wYWNrX3N0YXJ0KHNjcm9sbHdpbiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKwkJc2Nyb2xsd2luLnNob3coKQorCisJCXNlbGYudHJlZXZpZXcgPSBndGsuVHJlZVZpZXcoKQorCQlzZWxmLnRyZWV2aWV3LnNldF9ydWxlc19oaW50KFRydWUpCisJCXNlbGYudHJlZXZpZXcuc2V0X3NlYXJjaF9jb2x1bW4oNCkKKwkJc2VsZi50cmVldmlldy5jb25uZWN0KCJjdXJzb3ItY2hhbmdlZCIsIHNlbGYuX3RyZWV2aWV3X2N1cnNvcl9jYikKKwkJc2Nyb2xsd2luLmFkZChzZWxmLnRyZWV2aWV3KQorCQlzZWxmLnRyZWV2aWV3LnNob3coKQorCisJCWNlbGwgPSBDZWxsUmVuZGVyZXJHcmFwaCgpCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigpCisJCWNvbHVtbi5zZXRfcmVzaXphYmxlKFRydWUpCisJCWNvbHVtbi5wYWNrX3N0YXJ0KGNlbGwsIGV4cGFuZD1UcnVlKQorCQljb2x1bW4uYWRkX2F0dHJpYnV0ZShjZWxsLCAibm9kZSIsIDEpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJpbi1saW5lcyIsIDIpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJvdXQtbGluZXMiLCAzKQorCQlzZWxmLnRyZWV2aWV3LmFwcGVuZF9jb2x1bW4oY29sdW1uKQorCisJCWNlbGwgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisJCWNlbGwuc2V0X3Byb3BlcnR5KCJ3aWR0aC1jaGFycyIsIDY1KQorCQljZWxsLnNldF9wcm9wZXJ0eSgiZWxsaXBzaXplIiwgcGFuZ28uRUxMSVBTSVpFX0VORCkKKwkJY29sdW1uID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCJNZXNzYWdlIikKKwkJY29sdW1uLnNldF9yZXNpemFibGUoVHJ1ZSkKKwkJY29sdW1uLnBhY2tfc3RhcnQoY2VsbCwgZXhwYW5kPVRydWUpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJ0ZXh0IiwgNCkKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQljZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorCQljZWxsLnNldF9wcm9wZXJ0eSgid2lkdGgtY2hhcnMiLCA0MCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoImVsbGlwc2l6ZSIsIHBhbmdvLkVMTElQU0laRV9FTkQpCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiQXV0aG9yIikKKwkJY29sdW1uLnNldF9yZXNpemFibGUoVHJ1ZSkKKwkJY29sdW1uLnBhY2tfc3RhcnQoY2VsbCwgZXhwYW5kPVRydWUpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJ0ZXh0IiwgNSkKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQljZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorCQljZWxsLnNldF9wcm9wZXJ0eSgiZWxsaXBzaXplIiwgcGFuZ28uRUxMSVBTSVpFX0VORCkKKwkJY29sdW1uID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCJEYXRlIikKKwkJY29sdW1uLnNldF9yZXNpemFibGUoVHJ1ZSkKKwkJY29sdW1uLnBhY2tfc3RhcnQoY2VsbCwgZXhwYW5kPVRydWUpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJ0ZXh0IiwgNikKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQlyZXR1cm4gdmJveAorCisJZGVmIGFib3V0X21lbnVfcmVzcG9uc2Uoc2VsZiwgd2lkZ2V0LCBzdHJpbmcpOgorCQlkaWFsb2cgPSBndGsuQWJvdXREaWFsb2coKQorCQlkaWFsb2cuc2V0X25hbWUoIkdpdHZpZXciKQorCQlkaWFsb2cuc2V0X3ZlcnNpb24oR2l0Vmlldy52ZXJzaW9uKQorCQlkaWFsb2cuc2V0X2F1dGhvcnMoWyJBbmVlc2ggS3VtYXIgSy5WIDxhbmVlc2gua3VtYXJAZ21haWwuY29tPiJdKQorCQlkaWFsb2cuc2V0X3dlYnNpdGUoImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC8iKQorCQlkaWFsb2cuc2V0X2NvcHlyaWdodCgiVXNlIGFuZCBkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiKQorCQlkaWFsb2cuc2V0X3dyYXBfbGljZW5zZShUcnVlKQorCQlkaWFsb2cucnVuKCkKKwkJZGlhbG9nLmRlc3Ryb3koKQorCisKKwlkZWYgY29uc3RydWN0X2JvdHRvbShzZWxmKToKKwkJIiIiQ29uc3RydWN0IHRoZSBib3R0b20gaGFsZiBvZiB0aGUgd2luZG93LiIiIgorCQl2Ym94ID0gZ3RrLlZCb3goRmFsc2UsIHNwYWNpbmc9NikKKwkJdmJveC5zZXRfYm9yZGVyX3dpZHRoKDEyKQorCQkod2lkdGgsIGhlaWdodCkgPSBzZWxmLndpbmRvdy5nZXRfc2l6ZSgpCisJCXZib3guc2V0X3NpemVfcmVxdWVzdCh3aWR0aCwgaW50KGhlaWdodCAvIDIuNSkpCisJCXZib3guc2hvdygpCisKKwkJc2VsZi50YWJsZSA9IGd0ay5UYWJsZShyb3dzPTQsIGNvbHVtbnM9NCkKKwkJc2VsZi50YWJsZS5zZXRfcm93X3NwYWNpbmdzKDYpCisJCXNlbGYudGFibGUuc2V0X2NvbF9zcGFjaW5ncyg2KQorCQl2Ym94LnBhY2tfc3RhcnQoc2VsZi50YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUpCisJCXNlbGYudGFibGUuc2hvdygpCisKKwkJYWxpZ24gPSBndGsuQWxpZ25tZW50KDAuMCwgMC41KQorCQlsYWJlbCA9IGd0ay5MYWJlbCgpCisJCWxhYmVsLnNldF9tYXJrdXAoIjxiPlJldmlzaW9uOjwvYj4iKQorCQlhbGlnbi5hZGQobGFiZWwpCisJCXNlbGYudGFibGUuYXR0YWNoKGFsaWduLCAwLCAxLCAwLCAxLCBndGsuRklMTCwgZ3RrLkZJTEwpCisJCWxhYmVsLnNob3coKQorCQlhbGlnbi5zaG93KCkKKworCQlhbGlnbiA9IGd0ay5BbGlnbm1lbnQoMC4wLCAwLjUpCisJCXNlbGYucmV2aWRfbGFiZWwgPSBndGsuTGFiZWwoKQorCQlzZWxmLnJldmlkX2xhYmVsLnNldF9zZWxlY3RhYmxlKFRydWUpCisJCWFsaWduLmFkZChzZWxmLnJldmlkX2xhYmVsKQorCQlzZWxmLnRhYmxlLmF0dGFjaChhbGlnbiwgMSwgMiwgMCwgMSwgZ3RrLkVYUEFORCB8IGd0ay5GSUxMLCBndGsuRklMTCkKKwkJc2VsZi5yZXZpZF9sYWJlbC5zaG93KCkKKwkJYWxpZ24uc2hvdygpCisKKwkJYWxpZ24gPSBndGsuQWxpZ25tZW50KDAuMCwgMC41KQorCQlsYWJlbCA9IGd0ay5MYWJlbCgpCisJCWxhYmVsLnNldF9tYXJrdXAoIjxiPkNvbW1pdHRlcjo8L2I+IikKKwkJYWxpZ24uYWRkKGxhYmVsKQorCQlzZWxmLnRhYmxlLmF0dGFjaChhbGlnbiwgMCwgMSwgMSwgMiwgZ3RrLkZJTEwsIGd0ay5GSUxMKQorCQlsYWJlbC5zaG93KCkKKwkJYWxpZ24uc2hvdygpCisKKwkJYWxpZ24gPSBndGsuQWxpZ25tZW50KDAuMCwgMC41KQorCQlzZWxmLmNvbW1pdHRlcl9sYWJlbCA9IGd0ay5MYWJlbCgpCisJCXNlbGYuY29tbWl0dGVyX2xhYmVsLnNldF9zZWxlY3RhYmxlKFRydWUpCisJCWFsaWduLmFkZChzZWxmLmNvbW1pdHRlcl9sYWJlbCkKKwkJc2VsZi50YWJsZS5hdHRhY2goYWxpZ24sIDEsIDIsIDEsIDIsIGd0ay5FWFBBTkQgfCBndGsuRklMTCwgZ3RrLkZJTEwpCisJCXNlbGYuY29tbWl0dGVyX2xhYmVsLnNob3coKQorCQlhbGlnbi5zaG93KCkKKworCQlhbGlnbiA9IGd0ay5BbGlnbm1lbnQoMC4wLCAwLjUpCisJCWxhYmVsID0gZ3RrLkxhYmVsKCkKKwkJbGFiZWwuc2V0X21hcmt1cCgiPGI+VGltZXN0YW1wOjwvYj4iKQorCQlhbGlnbi5hZGQobGFiZWwpCisJCXNlbGYudGFibGUuYXR0YWNoKGFsaWduLCAwLCAxLCAyLCAzLCBndGsuRklMTCwgZ3RrLkZJTEwpCisJCWxhYmVsLnNob3coKQorCQlhbGlnbi5zaG93KCkKKworCQlhbGlnbiA9IGd0ay5BbGlnbm1lbnQoMC4wLCAwLjUpCisJCXNlbGYudGltZXN0YW1wX2xhYmVsID0gZ3RrLkxhYmVsKCkKKwkJc2VsZi50aW1lc3RhbXBfbGFiZWwuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKwkJYWxpZ24uYWRkKHNlbGYudGltZXN0YW1wX2xhYmVsKQorCQlzZWxmLnRhYmxlLmF0dGFjaChhbGlnbiwgMSwgMiwgMiwgMywgZ3RrLkVYUEFORCB8IGd0ay5GSUxMLCBndGsuRklMTCkKKwkJc2VsZi50aW1lc3RhbXBfbGFiZWwuc2hvdygpCisJCWFsaWduLnNob3coKQorCisJCWFsaWduID0gZ3RrLkFsaWdubWVudCgwLjAsIDAuNSkKKwkJbGFiZWwgPSBndGsuTGFiZWwoKQorCQlsYWJlbC5zZXRfbWFya3VwKCI8Yj5QYXJlbnRzOjwvYj4iKQorCQlhbGlnbi5hZGQobGFiZWwpCisJCXNlbGYudGFibGUuYXR0YWNoKGFsaWduLCAwLCAxLCAzLCA0LCBndGsuRklMTCwgZ3RrLkZJTEwpCisJCWxhYmVsLnNob3coKQorCQlhbGlnbi5zaG93KCkKKwkJc2VsZi5wYXJlbnRzX3dpZGdldHMgPSBbXQorCisJCWFsaWduID0gZ3RrLkFsaWdubWVudCgwLjAsIDAuNSkKKwkJbGFiZWwgPSBndGsuTGFiZWwoKQorCQlsYWJlbC5zZXRfbWFya3VwKCI8Yj5DaGlsZHJlbjo8L2I+IikKKwkJYWxpZ24uYWRkKGxhYmVsKQorCQlzZWxmLnRhYmxlLmF0dGFjaChhbGlnbiwgMiwgMywgMywgNCwgZ3RrLkZJTEwsIGd0ay5GSUxMKQorCQlsYWJlbC5zaG93KCkKKwkJYWxpZ24uc2hvdygpCisJCXNlbGYuY2hpbGRyZW5fd2lkZ2V0cyA9IFtdCisKKwkJc2Nyb2xsd2luID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKwkJc2Nyb2xsd2luLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorCQlzY3JvbGx3aW4uc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisJCXZib3gucGFja19zdGFydChzY3JvbGx3aW4sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisJCXNjcm9sbHdpbi5zaG93KCkKKworCQkoc2VsZi5tZXNzYWdlX2J1ZmZlciwgc291cmNldmlldykgPSBnZXRfc291cmNlX2J1ZmZlcl9hbmRfdmlldygpCisKKwkJc291cmNldmlldy5zZXRfZWRpdGFibGUoRmFsc2UpCisJCXNvdXJjZXZpZXcubW9kaWZ5X2ZvbnQocGFuZ28uRm9udERlc2NyaXB0aW9uKCJNb25vc3BhY2UiKSkKKwkJc2Nyb2xsd2luLmFkZChzb3VyY2V2aWV3KQorCQlzb3VyY2V2aWV3LnNob3coKQorCisJCXJldHVybiB2Ym94CisKKwlkZWYgX3RyZWV2aWV3X2N1cnNvcl9jYihzZWxmLCAqYXJncyk6CisJCSIiIkNhbGxiYWNrIGZvciB3aGVuIHRoZSB0cmVldmlldyBjdXJzb3IgY2hhbmdlcy4iIiIKKwkJKHBhdGgsIGNvbCkgPSBzZWxmLnRyZWV2aWV3LmdldF9jdXJzb3IoKQorCQljb21taXQgPSBzZWxmLm1vZGVsW3BhdGhdWzBdCisKKwkJaWYgY29tbWl0LmNvbW1pdHRlciBpcyBub3QgTm9uZToKKwkJCWNvbW1pdHRlciA9IGNvbW1pdC5jb21taXR0ZXIKKwkJCXRpbWVzdGFtcCA9IGNvbW1pdC5jb21taXRfZGF0ZQorCQkJbWVzc2FnZSAgID0gIGNvbW1pdC5nZXRfbWVzc2FnZShzZWxmLndpdGhfZGlmZikKKwkJCXJldmlkX2xhYmVsID0gY29tbWl0LmNvbW1pdF9zaGExCisJCWVsc2U6CisJCQljb21taXR0ZXIgPSAiIgorCQkJdGltZXN0YW1wID0gIiIKKwkJCW1lc3NhZ2UgPSAiIgorCQkJcmV2aWRfbGFiZWwgPSAiIgorCisJCXNlbGYucmV2aWRfbGFiZWwuc2V0X3RleHQocmV2aWRfbGFiZWwpCisJCXNlbGYuY29tbWl0dGVyX2xhYmVsLnNldF90ZXh0KGNvbW1pdHRlcikKKwkJc2VsZi50aW1lc3RhbXBfbGFiZWwuc2V0X3RleHQodGltZXN0YW1wKQorCQlzZWxmLm1lc3NhZ2VfYnVmZmVyLnNldF90ZXh0KHVuaWNvZGUobWVzc2FnZSwgc2VsZi5lbmNvZGluZykuZW5jb2RlKCd1dGYtOCcpKQorCisJCWZvciB3aWRnZXQgaW4gc2VsZi5wYXJlbnRzX3dpZGdldHM6CisJCQlzZWxmLnRhYmxlLnJlbW92ZSh3aWRnZXQpCisKKwkJc2VsZi5wYXJlbnRzX3dpZGdldHMgPSBbXQorCQlzZWxmLnRhYmxlLnJlc2l6ZSg0ICsgbGVuKGNvbW1pdC5wYXJlbnRfc2hhMSkgLSAxLCA0KQorCQlmb3IgaWR4LCBwYXJlbnRfaWQgaW4gZW51bWVyYXRlKGNvbW1pdC5wYXJlbnRfc2hhMSk6CisJCQlzZWxmLnRhYmxlLnNldF9yb3dfc3BhY2luZyhpZHggKyAzLCAwKQorCisJCQlhbGlnbiA9IGd0ay5BbGlnbm1lbnQoMC4wLCAwLjApCisJCQlzZWxmLnBhcmVudHNfd2lkZ2V0cy5hcHBlbmQoYWxpZ24pCisJCQlzZWxmLnRhYmxlLmF0dGFjaChhbGlnbiwgMSwgMiwgaWR4ICsgMywgaWR4ICsgNCwKKwkJCQkJZ3RrLkVYUEFORCB8IGd0ay5GSUxMLCBndGsuRklMTCkKKwkJCWFsaWduLnNob3coKQorCisJCQloYm94ID0gZ3RrLkhCb3goRmFsc2UsIDApCisJCQlhbGlnbi5hZGQoaGJveCkKKwkJCWhib3guc2hvdygpCisKKwkJCWxhYmVsID0gZ3RrLkxhYmVsKHBhcmVudF9pZCkKKwkJCWxhYmVsLnNldF9zZWxlY3RhYmxlKFRydWUpCisJCQloYm94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1UcnVlKQorCQkJbGFiZWwuc2hvdygpCisKKwkJCWltYWdlID0gZ3RrLkltYWdlKCkKKwkJCWltYWdlLnNldF9mcm9tX3N0b2NrKGd0ay5TVE9DS19KVU1QX1RPLCBndGsuSUNPTl9TSVpFX01FTlUpCisJCQlpbWFnZS5zaG93KCkKKworCQkJYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisJCQlidXR0b24uYWRkKGltYWdlKQorCQkJYnV0dG9uLnNldF9yZWxpZWYoZ3RrLlJFTElFRl9OT05FKQorCQkJYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLl9nb19jbGlja2VkX2NiLCBwYXJlbnRfaWQpCisJCQloYm94LnBhY2tfc3RhcnQoYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9VHJ1ZSkKKwkJCWJ1dHRvbi5zaG93KCkKKworCQkJaW1hZ2UgPSBndGsuSW1hZ2UoKQorCQkJaW1hZ2Uuc2V0X2Zyb21fc3RvY2soZ3RrLlNUT0NLX0ZJTkQsIGd0ay5JQ09OX1NJWkVfTUVOVSkKKwkJCWltYWdlLnNob3coKQorCisJCQlidXR0b24gPSBndGsuQnV0dG9uKCkKKwkJCWJ1dHRvbi5hZGQoaW1hZ2UpCisJCQlidXR0b24uc2V0X3JlbGllZihndGsuUkVMSUVGX05PTkUpCisJCQlidXR0b24uc2V0X3NlbnNpdGl2ZShUcnVlKQorCQkJYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLl9zaG93X2NsaWNrZWRfY2IsCisJCQkJCWNvbW1pdC5jb21taXRfc2hhMSwgcGFyZW50X2lkLCBzZWxmLmVuY29kaW5nKQorCQkJaGJveC5wYWNrX3N0YXJ0KGJ1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUpCisJCQlidXR0b24uc2hvdygpCisKKwkJIyBQb3B1bGF0ZSB3aXRoIGNoaWxkIGRldGFpbHMKKwkJZm9yIHdpZGdldCBpbiBzZWxmLmNoaWxkcmVuX3dpZGdldHM6CisJCQlzZWxmLnRhYmxlLnJlbW92ZSh3aWRnZXQpCisKKwkJc2VsZi5jaGlsZHJlbl93aWRnZXRzID0gW10KKwkJdHJ5OgorCQkJY2hpbGRfc2hhMSA9IENvbW1pdC5jaGlsZHJlbl9zaGExW2NvbW1pdC5jb21taXRfc2hhMV0KKwkJZXhjZXB0IEtleUVycm9yOgorCQkJIyBXZSBkb24ndCBoYXZlIGNoaWxkCisJCQljaGlsZF9zaGExID0gWyAwIF0KKworCQlpZiAoIGxlbihjaGlsZF9zaGExKSA+IGxlbihjb21taXQucGFyZW50X3NoYTEpKToKKwkJCXNlbGYudGFibGUucmVzaXplKDQgKyBsZW4oY2hpbGRfc2hhMSkgLSAxLCA0KQorCisJCWZvciBpZHgsIGNoaWxkX2lkIGluIGVudW1lcmF0ZShjaGlsZF9zaGExKToKKwkJCXNlbGYudGFibGUuc2V0X3Jvd19zcGFjaW5nKGlkeCArIDMsIDApCisKKwkJCWFsaWduID0gZ3RrLkFsaWdubWVudCgwLjAsIDAuMCkKKwkJCXNlbGYuY2hpbGRyZW5fd2lkZ2V0cy5hcHBlbmQoYWxpZ24pCisJCQlzZWxmLnRhYmxlLmF0dGFjaChhbGlnbiwgMywgNCwgaWR4ICsgMywgaWR4ICsgNCwKKwkJCQkJZ3RrLkVYUEFORCB8IGd0ay5GSUxMLCBndGsuRklMTCkKKwkJCWFsaWduLnNob3coKQorCisJCQloYm94ID0gZ3RrLkhCb3goRmFsc2UsIDApCisJCQlhbGlnbi5hZGQoaGJveCkKKwkJCWhib3guc2hvdygpCisKKwkJCWxhYmVsID0gZ3RrLkxhYmVsKGNoaWxkX2lkKQorCQkJbGFiZWwuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKwkJCWhib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUpCisJCQlsYWJlbC5zaG93KCkKKworCQkJaW1hZ2UgPSBndGsuSW1hZ2UoKQorCQkJaW1hZ2Uuc2V0X2Zyb21fc3RvY2soZ3RrLlNUT0NLX0pVTVBfVE8sIGd0ay5JQ09OX1NJWkVfTUVOVSkKKwkJCWltYWdlLnNob3coKQorCisJCQlidXR0b24gPSBndGsuQnV0dG9uKCkKKwkJCWJ1dHRvbi5hZGQoaW1hZ2UpCisJCQlidXR0b24uc2V0X3JlbGllZihndGsuUkVMSUVGX05PTkUpCisJCQlidXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuX2dvX2NsaWNrZWRfY2IsIGNoaWxkX2lkKQorCQkJaGJveC5wYWNrX3N0YXJ0KGJ1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUpCisJCQlidXR0b24uc2hvdygpCisKKwkJCWltYWdlID0gZ3RrLkltYWdlKCkKKwkJCWltYWdlLnNldF9mcm9tX3N0b2NrKGd0ay5TVE9DS19GSU5ELCBndGsuSUNPTl9TSVpFX01FTlUpCisJCQlpbWFnZS5zaG93KCkKKworCQkJYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisJCQlidXR0b24uYWRkKGltYWdlKQorCQkJYnV0dG9uLnNldF9yZWxpZWYoZ3RrLlJFTElFRl9OT05FKQorCQkJYnV0dG9uLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKwkJCWJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5fc2hvd19jbGlja2VkX2NiLAorCQkJCQljaGlsZF9pZCwgY29tbWl0LmNvbW1pdF9zaGExLCBzZWxmLmVuY29kaW5nKQorCQkJaGJveC5wYWNrX3N0YXJ0KGJ1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUpCisJCQlidXR0b24uc2hvdygpCisKKwlkZWYgX2Rlc3Ryb3lfY2Ioc2VsZiwgd2lkZ2V0KToKKwkJIiIiQ2FsbGJhY2sgZm9yIHdoZW4gYSB3aW5kb3cgd2UgbWFuYWdlIGlzIGRlc3Ryb3llZC4iIiIKKwkJc2VsZi5xdWl0KCkKKworCisJZGVmIHF1aXQoc2VsZik6CisJCSIiIlN0b3AgdGhlIEdUSysgbWFpbiBsb29wLiIiIgorCQlndGsubWFpbl9xdWl0KCkKKworCWRlZiBydW4oc2VsZiwgYXJncyk6CisJCXNlbGYuc2V0X2JyYW5jaChhcmdzKQorCQlzZWxmLndpbmRvdy5jb25uZWN0KCJkZXN0cm95Iiwgc2VsZi5fZGVzdHJveV9jYikKKwkJc2VsZi53aW5kb3cuc2hvdygpCisJCWd0ay5tYWluKCkKKworCWRlZiBzZXRfYnJhbmNoKHNlbGYsIGFyZ3MpOgorCQkiIiJGaWxsIGluIGRpZmZlcmVudCB3aW5kb3dzIHdpdGggaW5mbyBmcm9tIHRoZSByZXBvc2lyb3R5IiIiCisJCWZwID0gb3MucG9wZW4oImdpdCByZXYtcGFyc2UgLS1zcSAtLWRlZmF1bHQgSEVBRCAiICsgbGlzdF90b19zdHJpbmcoYXJncywgMSkpCisJCWdpdF9yZXZfbGlzdF9jbWQgPSBmcC5yZWFkKCkKKwkJZnAuY2xvc2UoKQorCQlmcCA9IG9zLnBvcGVuKCJnaXQgcmV2LWxpc3QgIC0taGVhZGVyIC0tdG9wby1vcmRlciAtLXBhcmVudHMgIiArIGdpdF9yZXZfbGlzdF9jbWQpCisJCXNlbGYudXBkYXRlX3dpbmRvdyhmcCkKKworCWRlZiB1cGRhdGVfd2luZG93KHNlbGYsIGZwKToKKwkJY29tbWl0X2xpbmVzID0gW10KKworCQlzZWxmLm1vZGVsID0gZ3RrLkxpc3RTdG9yZShnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwKKwkJCQlnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwgc3RyLCBzdHIsIHN0cikKKworCQkjIHVzZWQgZm9yIGN1cnNvciBwb3NpdGlvbmluZworCQlzZWxmLmluZGV4ID0ge30KKworCQlzZWxmLmNvbG91cnMgPSB7fQorCQlzZWxmLm5vZGVwb3MgPSB7fQorCQlzZWxmLmluY29tcGxldGVfbGluZSA9IHt9CisJCXNlbGYuY29tbWl0cyA9IFtdCisKKwkJaW5kZXggPSAwCisJCWxhc3RfY29sb3VyID0gMAorCQlsYXN0X25vZGVwb3MgPSAtMQorCQlvdXRfbGluZSA9IFtdCisJCWlucHV0X2xpbmUgPSBmcC5yZWFkbGluZSgpCisJCXdoaWxlIChpbnB1dF9saW5lICE9ICIiKToKKwkJCSMgVGhlIGNvbW1pdCBoZWFkZXIgZW5kcyB3aXRoICdcMCcKKwkJCSMgVGhpcyBOVUxMIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSBzaGExIG9mIHRoZQorCQkJIyBuZXh0IGNvbW1pdAorCQkJaWYgKGlucHV0X2xpbmVbMF0gIT0gJ1wwJyk6CisJCQkJY29tbWl0X2xpbmVzLmFwcGVuZChpbnB1dF9saW5lKQorCQkJCWlucHV0X2xpbmUgPSBmcC5yZWFkbGluZSgpCisJCQkJY29udGludWU7CisKKwkJCWNvbW1pdCA9IENvbW1pdChjb21taXRfbGluZXMpCisJCQlpZiAoY29tbWl0ICE9IE5vbmUgKToKKwkJCQlzZWxmLmNvbW1pdHMuYXBwZW5kKGNvbW1pdCkKKworCQkJIyBTa2lwIHRoZSAnXDAKKwkJCWNvbW1pdF9saW5lcyA9IFtdCisJCQljb21taXRfbGluZXMuYXBwZW5kKGlucHV0X2xpbmVbMTpdKQorCQkJaW5wdXRfbGluZSA9IGZwLnJlYWRsaW5lKCkKKworCQlmcC5jbG9zZSgpCisKKwkJZm9yIGNvbW1pdCBpbiBzZWxmLmNvbW1pdHM6CisJCQkob3V0X2xpbmUsIGxhc3RfY29sb3VyLCBsYXN0X25vZGVwb3MpID0gc2VsZi5kcmF3X2dyYXBoKGNvbW1pdCwKKwkJCQkJCQkJCQlpbmRleCwgb3V0X2xpbmUsCisJCQkJCQkJCQkJbGFzdF9jb2xvdXIsCisJCQkJCQkJCQkJbGFzdF9ub2RlcG9zKQorCQkJc2VsZi5pbmRleFtjb21taXQuY29tbWl0X3NoYTFdID0gaW5kZXgKKwkJCWluZGV4ICs9IDEKKworCQlzZWxmLnRyZWV2aWV3LnNldF9tb2RlbChzZWxmLm1vZGVsKQorCQlzZWxmLnRyZWV2aWV3LnNob3coKQorCisJZGVmIGRyYXdfZ3JhcGgoc2VsZiwgY29tbWl0LCBpbmRleCwgb3V0X2xpbmUsIGxhc3RfY29sb3VyLCBsYXN0X25vZGVwb3MpOgorCQlpbl9saW5lPVtdCisKKwkJIyAgIHwgICAtPiBvdXRsaW5lCisJCSMgICBYCisJCSMgICB8XCAgPC0gaW5saW5lCisKKwkJIyBSZXNldCBub2RlcG9zdGlvbgorCQlpZiAobGFzdF9ub2RlcG9zID4gNSk6CisJCQlsYXN0X25vZGVwb3MgPSAtMQorCisJCSMgQWRkIHRoZSBpbmNvbXBsZXRlIGxpbmVzIG9mIHRoZSBsYXN0IGNlbGwgaW4gdGhpcworCQl0cnk6CisJCQljb2xvdXIgPSBzZWxmLmNvbG91cnNbY29tbWl0LmNvbW1pdF9zaGExXQorCQlleGNlcHQgS2V5RXJyb3I6CisJCQlzZWxmLmNvbG91cnNbY29tbWl0LmNvbW1pdF9zaGExXSA9IGxhc3RfY29sb3VyKzEKKwkJCWxhc3RfY29sb3VyID0gc2VsZi5jb2xvdXJzW2NvbW1pdC5jb21taXRfc2hhMV0KKwkJCWNvbG91ciA9ICAgc2VsZi5jb2xvdXJzW2NvbW1pdC5jb21taXRfc2hhMV0KKworCQl0cnk6CisJCQlub2RlX3BvcyA9IHNlbGYubm9kZXBvc1tjb21taXQuY29tbWl0X3NoYTFdCisJCWV4Y2VwdCBLZXlFcnJvcjoKKwkJCXNlbGYubm9kZXBvc1tjb21taXQuY29tbWl0X3NoYTFdID0gbGFzdF9ub2RlcG9zKzEKKwkJCWxhc3Rfbm9kZXBvcyA9IHNlbGYubm9kZXBvc1tjb21taXQuY29tbWl0X3NoYTFdCisJCQlub2RlX3BvcyA9ICBzZWxmLm5vZGVwb3NbY29tbWl0LmNvbW1pdF9zaGExXQorCisJCSNUaGUgZmlyc3QgcGFyZW50IGFsd2F5cyBjb250aW51ZSBvbiB0aGUgc2FtZSBsaW5lCisJCXRyeToKKwkJCSMgY2hlY2sgd2UgYWxyZWF5IGhhdmUgdGhlIHZhbHVlCisJCQl0bXBfbm9kZV9wb3MgPSBzZWxmLm5vZGVwb3NbY29tbWl0LnBhcmVudF9zaGExWzBdXQorCQlleGNlcHQgS2V5RXJyb3I6CisJCQlzZWxmLmNvbG91cnNbY29tbWl0LnBhcmVudF9zaGExWzBdXSA9IGNvbG91cgorCQkJc2VsZi5ub2RlcG9zW2NvbW1pdC5wYXJlbnRfc2hhMVswXV0gPSBub2RlX3BvcworCisJCWZvciBzaGExIGluIHNlbGYuaW5jb21wbGV0ZV9saW5lLmtleXMoKToKKwkJCWlmIChzaGExICE9IGNvbW1pdC5jb21taXRfc2hhMSk6CisJCQkJc2VsZi5kcmF3X2luY29tcGxldGVfbGluZShzaGExLCBub2RlX3BvcywKKwkJCQkJCW91dF9saW5lLCBpbl9saW5lLCBpbmRleCkKKwkJCWVsc2U6CisJCQkJZGVsIHNlbGYuaW5jb21wbGV0ZV9saW5lW3NoYTFdCisKKworCQlmb3IgcGFyZW50X2lkIGluIGNvbW1pdC5wYXJlbnRfc2hhMToKKwkJCXRyeToKKwkJCQl0bXBfbm9kZV9wb3MgPSBzZWxmLm5vZGVwb3NbcGFyZW50X2lkXQorCQkJZXhjZXB0IEtleUVycm9yOgorCQkJCXNlbGYuY29sb3Vyc1twYXJlbnRfaWRdID0gbGFzdF9jb2xvdXIrMQorCQkJCWxhc3RfY29sb3VyID0gc2VsZi5jb2xvdXJzW3BhcmVudF9pZF0KKwkJCQlzZWxmLm5vZGVwb3NbcGFyZW50X2lkXSA9IGxhc3Rfbm9kZXBvcysxCisJCQkJbGFzdF9ub2RlcG9zID0gc2VsZi5ub2RlcG9zW3BhcmVudF9pZF0KKworCQkJaW5fbGluZS5hcHBlbmQoKG5vZGVfcG9zLCBzZWxmLm5vZGVwb3NbcGFyZW50X2lkXSwKKwkJCQkJCXNlbGYuY29sb3Vyc1twYXJlbnRfaWRdKSkKKwkJCXNlbGYuYWRkX2luY29tcGxldGVfbGluZShwYXJlbnRfaWQpCisKKwkJdHJ5OgorCQkJYnJhbmNoX3RhZyA9IHNlbGYuYnRfc2hhMVtjb21taXQuY29tbWl0X3NoYTFdCisJCWV4Y2VwdCBLZXlFcnJvcjoKKwkJCWJyYW5jaF90YWcgPSBbIF0KKworCisJCW5vZGUgPSAobm9kZV9wb3MsIGNvbG91ciwgYnJhbmNoX3RhZykKKworCQlzZWxmLm1vZGVsLmFwcGVuZChbY29tbWl0LCBub2RlLCBvdXRfbGluZSwgaW5fbGluZSwKKwkJCQljb21taXQubWVzc2FnZSwgY29tbWl0LmF1dGhvciwgY29tbWl0LmRhdGVdKQorCisJCXJldHVybiAoaW5fbGluZSwgbGFzdF9jb2xvdXIsIGxhc3Rfbm9kZXBvcykKKworCWRlZiBhZGRfaW5jb21wbGV0ZV9saW5lKHNlbGYsIHNoYTEpOgorCQl0cnk6CisJCQlzZWxmLmluY29tcGxldGVfbGluZVtzaGExXS5hcHBlbmQoc2VsZi5ub2RlcG9zW3NoYTFdKQorCQlleGNlcHQgS2V5RXJyb3I6CisJCQlzZWxmLmluY29tcGxldGVfbGluZVtzaGExXSA9IFtzZWxmLm5vZGVwb3Nbc2hhMV1dCisKKwlkZWYgZHJhd19pbmNvbXBsZXRlX2xpbmUoc2VsZiwgc2hhMSwgbm9kZV9wb3MsIG91dF9saW5lLCBpbl9saW5lLCBpbmRleCk6CisJCWZvciBpZHgsIHBvcyBpbiBlbnVtZXJhdGUoc2VsZi5pbmNvbXBsZXRlX2xpbmVbc2hhMV0pOgorCQkJaWYocG9zID09IG5vZGVfcG9zKToKKwkJCQkjcmVtb3ZlIHRoZSBzdHJhaWdodCBsaW5lIGFuZCBhZGQgYSBzbGFzaAorCQkJCWlmICgocG9zLCBwb3MsIHNlbGYuY29sb3Vyc1tzaGExXSkgaW4gb3V0X2xpbmUpOgorCQkJCQlvdXRfbGluZS5yZW1vdmUoKHBvcywgcG9zLCBzZWxmLmNvbG91cnNbc2hhMV0pKQorCQkJCW91dF9saW5lLmFwcGVuZCgocG9zLCBwb3MrMC41LCBzZWxmLmNvbG91cnNbc2hhMV0pKQorCQkJCXNlbGYuaW5jb21wbGV0ZV9saW5lW3NoYTFdW2lkeF0gPSBwb3MgPSBwb3MrMC41CisJCQl0cnk6CisJCQkJbmV4dF9jb21taXQgPSBzZWxmLmNvbW1pdHNbaW5kZXgrMV0KKwkJCQlpZiAobmV4dF9jb21taXQuY29tbWl0X3NoYTEgPT0gc2hhMSBhbmQgcG9zICE9IGludChwb3MpKToKKwkJCQkjIGpvaW4gdGhlIGxpbmUgYmFjayB0byB0aGUgbm9kZSBwb2ludAorCQkJCSMgVGhpcyBuZWVkIHRvIGJlIGRvbmUgb25seSBpZiB3ZSBtb2RpZmllZCBpdAorCQkJCQlpbl9saW5lLmFwcGVuZCgocG9zLCBwb3MtMC41LCBzZWxmLmNvbG91cnNbc2hhMV0pKQorCQkJCQljb250aW51ZTsKKwkJCWV4Y2VwdCBJbmRleEVycm9yOgorCQkJCXBhc3MKKwkJCWluX2xpbmUuYXBwZW5kKChwb3MsIHBvcywgc2VsZi5jb2xvdXJzW3NoYTFdKSkKKworCisJZGVmIF9nb19jbGlja2VkX2NiKHNlbGYsIHdpZGdldCwgcmV2aWQpOgorCQkiIiJDYWxsYmFjayBmb3Igd2hlbiB0aGUgZ28gYnV0dG9uIGZvciBhIHBhcmVudCBpcyBjbGlja2VkLiIiIgorCQl0cnk6CisJCQlzZWxmLnRyZWV2aWV3LnNldF9jdXJzb3Ioc2VsZi5pbmRleFtyZXZpZF0pCisJCWV4Y2VwdCBLZXlFcnJvcjoKKwkJCWRpYWxvZyA9IGd0ay5NZXNzYWdlRGlhbG9nKHBhcmVudD1Ob25lLCBmbGFncz0wLAorCQkJCQl0eXBlPWd0ay5NRVNTQUdFX1dBUk5JTkcsIGJ1dHRvbnM9Z3RrLkJVVFRPTlNfQ0xPU0UsCisJCQkJCW1lc3NhZ2VfZm9ybWF0PU5vbmUpCisJCQlkaWFsb2cuc2V0X21hcmt1cCgiUmV2aXNpb24gPGI+JXM8L2I+IG5vdCBwcmVzZW50IGluIHRoZSBsaXN0IiAlIHJldmlkKQorCQkJIyByZXZpZCA9PSAwIGlzIHRoZSBwYXJlbnQgb2YgdGhlIGZpcnN0IGNvbW1pdAorCQkJaWYgKHJldmlkICE9IDAgKToKKwkJCQlkaWFsb2cuZm9ybWF0X3NlY29uZGFyeV90ZXh0KCJUcnkgcnVubmluZyBnaXR2aWV3IHdpdGhvdXQgYW55IG9wdGlvbnMiKQorCQkJZGlhbG9nLnJ1bigpCisJCQlkaWFsb2cuZGVzdHJveSgpCisKKwkJc2VsZi50cmVldmlldy5ncmFiX2ZvY3VzKCkKKworCWRlZiBfc2hvd19jbGlja2VkX2NiKHNlbGYsIHdpZGdldCwgIGNvbW1pdF9zaGExLCBwYXJlbnRfc2hhMSwgZW5jb2RpbmcpOgorCQkiIiJDYWxsYmFjayBmb3Igd2hlbiB0aGUgc2hvdyBidXR0b24gZm9yIGEgcGFyZW50IGlzIGNsaWNrZWQuIiIiCisJCXdpbmRvdyA9IERpZmZXaW5kb3coKQorCQl3aW5kb3cuc2V0X2RpZmYoY29tbWl0X3NoYTEsIHBhcmVudF9zaGExLCBlbmNvZGluZykKKwkJc2VsZi50cmVldmlldy5ncmFiX2ZvY3VzKCkKKword2l0aG91dF9kaWZmID0gMAoraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKworCWlmIChsZW4oc3lzLmFyZ3YpID4gMSApOgorCQlpZiAoc3lzLmFyZ3ZbMV0gPT0gIi0td2l0aG91dC1kaWZmIik6CisJCQl3aXRob3V0X2RpZmYgPSAxCisKKwl2aWV3ID0gR2l0Vmlldyggd2l0aG91dF9kaWZmICE9IDEpCisJdmlldy5ydW4oc3lzLmFyZ3Zbd2l0aG91dF9kaWZmOl0pCmRpZmYgLS1naXQgYS9jb250cmliL2dpdHZpZXcvZ2l0dmlldy50eHQgYi9jb250cmliL2dpdHZpZXcvZ2l0dmlldy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxMmY5NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ2l0dmlldy9naXR2aWV3LnR4dApAQCAtMCwwICsxLDU3IEBACitnaXR2aWV3KDEpCis9PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHZpZXcgLSBBIEdUSyBiYXNlZCByZXBvc2l0b3J5IGJyb3dzZXIgZm9yIGdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXR2aWV3JyBbb3B0aW9uc10gW2FyZ3NdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0KKworRGVwZW5kZW5jaWVzOgorCisqIFB5dGhvbiAyLjQKKyogUHlHVEsgMi44IG9yIGxhdGVyCisqIFB5Q2Fpcm8gMS4wIG9yIGxhdGVyCisKK09QVElPTlMKKy0tLS0tLS0KKy0td2l0aG91dC1kaWZmOjoKKworCUlmIHRoZSB1c2VyIGRvZXNuJ3Qgd2FudCB0byBsaXN0IHRoZSBjb21taXQgZGlmZnMgaW4gdGhlIG1haW4gd2luZG93LgorCVRoaXMgbWF5IHNwZWVkIHVwIHRoZSByZXBvc2l0b3J5IGJyb3dzaW5nLgorCis8YXJncz46OgorCisJQWxsIHRoZSB2YWxpZCBvcHRpb24gZm9yIGdpdGxpbms6Z2l0LXJldi1saXN0WzFdLgorCitLZXkgQmluZGluZ3MKKy0tLS0tLS0tLS0tLQorRjQ6OgorCVRvIG1heGltaXplIHRoZSB3aW5kb3cKKworRjU6OgorCVRvIHJlcmVhZCByZWZlcmVuY2VzLgorCitGMTE6OgorCUZ1bGwgc2NyZWVuCisKK0YxMjo6CisJTGVhdmUgZnVsbCBzY3JlZW4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK2dpdHZpZXcgdjIuNi4xMi4uIGluY2x1ZGUvc2NzaSBkcml2ZXJzL3Njc2k6OgorCisJU2hvdyBhcyB0aGUgY2hhbmdlcyBzaW5jZSB2ZXJzaW9uIHYyLjYuMTIgdGhhdCBjaGFuZ2VkIGFueSBmaWxlIGluIHRoZQorCWluY2x1ZGUvc2NzaSBvciBkcml2ZXJzL3Njc2kgc3ViZGlyZWN0b3JpZXMKKworZ2l0dmlldyAtLXNpbmNlPTIud2Vla3MuYWdvOjoKKworCVNob3cgdGhlIGNoYW5nZXMgZHVyaW5nIHRoZSBsYXN0IHR3byB3ZWVrcwpkaWZmIC0tZ2l0IGEvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5IGIvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0NmNiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQucHkKQEAgLTAsMCArMSwyNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiIgaGctdG8tZ2l0LnB5IC0gQSBNZXJjdXJpYWwgdG8gR0lUIGNvbnZlcnRlcgorCisgICAgQ29weXJpZ2h0IChDKTIwMDcgU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorIiIiCisKK2ltcG9ydCBvcywgb3MucGF0aCwgc3lzCitpbXBvcnQgdGVtcGZpbGUsIHBpY2tsZSwgZ2V0b3B0CitpbXBvcnQgcmUKKworIyBNYXBzIGhnIHZlcnNpb24gLT4gZ2l0IHZlcnNpb24KK2hndmVycyA9IHt9CisjIExpc3Qgb2YgY2hpbGRyZW4gZm9yIGVhY2ggaGcgcmV2aXNpb24KK2hnY2hpbGRyZW4gPSB7fQorIyBMaXN0IG9mIHBhcmVudHMgZm9yIGVhY2ggaGcgcmV2aXNpb24KK2hncGFyZW50cyA9IHt9CisjIEN1cnJlbnQgYnJhbmNoIGZvciBlYWNoIGhnIHJldmlzaW9uCitoZ2JyYW5jaCA9IHt9CisjIE51bWJlciBvZiBuZXcgY2hhbmdlc2V0cyBjb252ZXJ0ZWQgZnJvbSBoZworaGduZXdjc2V0cyA9IDAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgdXNhZ2UoKToKKworICAgICAgICBwcmludCAiIiJcCislczogW09QVElPTlNdIDxoZ3Byaj4KKworb3B0aW9uczoKKyAgICAtcywgLS1naXRzdGF0ZT1GSUxFOiBuYW1lIG9mIHRoZSBzdGF0ZSB0byBiZSBzYXZlZC9yZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGluY3JlbWVudGFscworICAgIC1uLCAtLW5yZXBhY2s9SU5UOiAgIG51bWJlciBvZiBjaGFuZ2VzZXRzIHRoYXQgd2lsbCB0cmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgYSByZXBhY2sgKGRlZmF1bHQ9MCwgLTEgdG8gZGVhY3RpdmF0ZSkKKyAgICAtdiwgLS12ZXJib3NlOiAgICAgICBiZSB2ZXJib3NlCisKK3JlcXVpcmVkOgorICAgIGhncHJqOiAgbmFtZSBvZiB0aGUgSEcgcHJvamVjdCB0byBpbXBvcnQgKGRpcmVjdG9yeSkKKyIiIiAlIHN5cy5hcmd2WzBdCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGdldGdpdGVudih1c2VyLCBkYXRlKToKKyAgICBlbnYgPSAnJworICAgIGVsZW1zID0gcmUuY29tcGlsZSgnKC4qPylccys8KC4qKT4nKS5tYXRjaCh1c2VyKQorICAgIGlmIGVsZW1zOgorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQVVUSE9SX05BTUU9IiVzIiA7JyAlIGVsZW1zLmdyb3VwKDEpCisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9DT01NSVRURVJfTkFNRT0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMSkKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0FVVEhPUl9FTUFJTD0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMikKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVFRFUl9FTUFJTD0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMikKKyAgICBlbHNlOgorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQVVUSE9SX05BTUU9IiVzIiA7JyAlIHVzZXIKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FPSIlcyIgOycgJSB1c2VyCisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUw9IDsnCisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9DT01NSVRURVJfRU1BSUw9IDsnCisKKyAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQVVUSE9SX0RBVEU9IiVzIiA7JyAlIGRhdGUKKyAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEU9IiVzIiA7JyAlIGRhdGUKKyAgICByZXR1cm4gZW52CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGUgPSAnJworb3B0X25yZXBhY2sgPSAwCit2ZXJib3NlID0gRmFsc2UKKwordHJ5OgorICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ3M6dDpuOnYnLCBbJ2dpdHN0YXRlPScsICd0ZW1wZGlyPScsICducmVwYWNrPScsICd2ZXJib3NlJ10pCisgICAgZm9yIG8sIGEgaW4gb3B0czoKKyAgICAgICAgaWYgbyBpbiAoJy1zJywgJy0tZ2l0c3RhdGUnKToKKyAgICAgICAgICAgIHN0YXRlID0gYQorICAgICAgICAgICAgc3RhdGUgPSBvcy5wYXRoLmFic3BhdGgoc3RhdGUpCisgICAgICAgIGlmIG8gaW4gKCctbicsICctLW5yZXBhY2snKToKKyAgICAgICAgICAgIG9wdF9ucmVwYWNrID0gaW50KGEpCisgICAgICAgIGlmIG8gaW4gKCctdicsICctLXZlcmJvc2UnKToKKyAgICAgICAgICAgIHZlcmJvc2UgPSBUcnVlCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigncGFyYW1zJykKK2V4Y2VwdDoKKyAgICB1c2FnZSgpCisgICAgc3lzLmV4aXQoMSkKKworaGdwcmogPSBhcmdzWzBdCitvcy5jaGRpcihoZ3ByaikKKworaWYgc3RhdGU6CisgICAgaWYgb3MucGF0aC5leGlzdHMoc3RhdGUpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1N0YXRlIGRvZXMgZXhpc3QsIHJlYWRpbmcnCisgICAgICAgIGYgPSBvcGVuKHN0YXRlLCAncicpCisgICAgICAgIGhndmVycyA9IHBpY2tsZS5sb2FkKGYpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQgJ1N0YXRlIGRvZXMgbm90IGV4aXN0LCBmaXJzdCBydW4nCisKK3NvY2sgPSBvcy5wb3BlbignaGcgdGlwIC0tdGVtcGxhdGUgIntyZXZ9IicpCit0aXAgPSBzb2NrLnJlYWQoKQoraWYgc29jay5jbG9zZSgpOgorICAgIHN5cy5leGl0KDEpCitpZiB2ZXJib3NlOgorICAgIHByaW50ICd0aXAgaXMnLCB0aXAKKworIyBDYWxjdWxhdGUgdGhlIGJyYW5jaGVzCitpZiB2ZXJib3NlOgorICAgIHByaW50ICdhbmFseXNpbmcgdGhlIGJyYW5jaGVzLi4uJworaGdjaGlsZHJlblsiMCJdID0gKCkKK2hncGFyZW50c1siMCJdID0gKE5vbmUsIE5vbmUpCitoZ2JyYW5jaFsiMCJdID0gIm1hc3RlciIKK2ZvciBjc2V0IGluIHJhbmdlKDEsIGludCh0aXApICsgMSk6CisgICAgaGdjaGlsZHJlbltzdHIoY3NldCldID0gKCkKKyAgICBwcm50cyA9IG9zLnBvcGVuKCdoZyBsb2cgLXIgJWQgLS10ZW1wbGF0ZSAie3BhcmVudHN9IicgJSBjc2V0KS5yZWFkKCkuc3RyaXAoKS5zcGxpdCgnICcpCisgICAgcHJudHMgPSBtYXAobGFtYmRhIHg6IHhbOnguZmluZCgnOicpXSwgcHJudHMpCisgICAgaWYgcHJudHNbMF0gIT0gJyc6CisgICAgICAgIHBhcmVudCA9IHBybnRzWzBdLnN0cmlwKCkKKyAgICBlbHNlOgorICAgICAgICBwYXJlbnQgPSBzdHIoY3NldCAtIDEpCisgICAgaGdjaGlsZHJlbltwYXJlbnRdICs9ICggc3RyKGNzZXQpLCApCisgICAgaWYgbGVuKHBybnRzKSA+IDE6CisgICAgICAgIG1wYXJlbnQgPSBwcm50c1sxXS5zdHJpcCgpCisgICAgICAgIGhnY2hpbGRyZW5bbXBhcmVudF0gKz0gKCBzdHIoY3NldCksICkKKyAgICBlbHNlOgorICAgICAgICBtcGFyZW50ID0gTm9uZQorCisgICAgaGdwYXJlbnRzW3N0cihjc2V0KV0gPSAocGFyZW50LCBtcGFyZW50KQorCisgICAgaWYgbXBhcmVudDoKKyAgICAgICAgIyBGb3IgbWVyZ2UgY2hhbmdlc2V0cywgdGFrZSBlaXRoZXIgb25lLCBwcmVmZXJhYmx5IHRoZSAnbWFzdGVyJyBicmFuY2gKKyAgICAgICAgaWYgaGdicmFuY2hbbXBhcmVudF0gPT0gJ21hc3Rlcic6CisgICAgICAgICAgICBoZ2JyYW5jaFtzdHIoY3NldCldID0gJ21hc3RlcicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhnYnJhbmNoW3N0cihjc2V0KV0gPSBoZ2JyYW5jaFtwYXJlbnRdCisgICAgZWxzZToKKyAgICAgICAgIyBOb3JtYWwgY2hhbmdlc2V0cworICAgICAgICAjIEZvciBmaXJzdCBjaGlsZHJlbiwgdGFrZSB0aGUgcGFyZW50IGJyYW5jaCwgZm9yIHRoZSBvdGhlcnMgY3JlYXRlIGEgbmV3IGJyYW5jaAorICAgICAgICBpZiBoZ2NoaWxkcmVuW3BhcmVudF1bMF0gPT0gc3RyKGNzZXQpOgorICAgICAgICAgICAgaGdicmFuY2hbc3RyKGNzZXQpXSA9IGhnYnJhbmNoW3BhcmVudF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhnYnJhbmNoW3N0cihjc2V0KV0gPSAiYnJhbmNoLSIgKyBzdHIoY3NldCkKKworaWYgbm90IGhndmVycy5oYXNfa2V5KCIwIik6CisgICAgcHJpbnQgJ2NyZWF0aW5nIHJlcG9zaXRvcnknCisgICAgb3Muc3lzdGVtKCdnaXQgaW5pdCcpCisKKyMgbG9vcCB0aHJvdWdoIGV2ZXJ5IGhnIGNoYW5nZXNldAorZm9yIGNzZXQgaW4gcmFuZ2UoaW50KHRpcCkgKyAxKToKKworICAgICMgaW5jcmVtZW50YWwsIGFscmVhZHkgc2VlbgorICAgIGlmIGhndmVycy5oYXNfa2V5KHN0cihjc2V0KSk6CisgICAgICAgIGNvbnRpbnVlCisgICAgaGduZXdjc2V0cyArPSAxCisKKyAgICAjIGdldCBpbmZvCisgICAgbG9nX2RhdGEgPSBvcy5wb3BlbignaGcgbG9nIC1yICVkIC0tdGVtcGxhdGUgInt0YWdzfVxue2RhdGV8ZGF0ZX1cbnthdXRob3J9XG4iJyAlIGNzZXQpLnJlYWRsaW5lcygpCisgICAgdGFnID0gbG9nX2RhdGFbMF0uc3RyaXAoKQorICAgIGRhdGUgPSBsb2dfZGF0YVsxXS5zdHJpcCgpCisgICAgdXNlciA9IGxvZ19kYXRhWzJdLnN0cmlwKCkKKyAgICBwYXJlbnQgPSBoZ3BhcmVudHNbc3RyKGNzZXQpXVswXQorICAgIG1wYXJlbnQgPSBoZ3BhcmVudHNbc3RyKGNzZXQpXVsxXQorCisgICAgI2dldCBjb21tZW50CisgICAgKGZkY29tbWVudCwgZmlsZWNvbW1lbnQpID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgY3NldGNvbW1lbnQgPSBvcy5wb3BlbignaGcgbG9nIC1yICVkIC0tdGVtcGxhdGUgIntkZXNjfSInICUgY3NldCkucmVhZCgpLnN0cmlwKCkKKyAgICBvcy53cml0ZShmZGNvbW1lbnQsIGNzZXRjb21tZW50KQorICAgIG9zLmNsb3NlKGZkY29tbWVudCkKKworICAgIHByaW50ICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKyAgICBwcmludCAnY3NldDonLCBjc2V0CisgICAgcHJpbnQgJ2JyYW5jaDonLCBoZ2JyYW5jaFtzdHIoY3NldCldCisgICAgcHJpbnQgJ3VzZXI6JywgdXNlcgorICAgIHByaW50ICdkYXRlOicsIGRhdGUKKyAgICBwcmludCAnY29tbWVudDonLCBjc2V0Y29tbWVudAorICAgIGlmIHBhcmVudDoKKwlwcmludCAncGFyZW50OicsIHBhcmVudAorICAgIGlmIG1wYXJlbnQ6CisgICAgICAgIHByaW50ICdtcGFyZW50OicsIG1wYXJlbnQKKyAgICBpZiB0YWc6CisgICAgICAgIHByaW50ICd0YWc6JywgdGFnCisgICAgcHJpbnQgJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJworCisgICAgIyBjaGVja291dCB0aGUgcGFyZW50IGlmIG5lY2Vzc2FyeQorICAgIGlmIGNzZXQgIT0gMDoKKyAgICAgICAgaWYgaGdicmFuY2hbc3RyKGNzZXQpXSA9PSAiYnJhbmNoLSIgKyBzdHIoY3NldCk6CisgICAgICAgICAgICBwcmludCAnY3JlYXRpbmcgbmV3IGJyYW5jaCcsIGhnYnJhbmNoW3N0cihjc2V0KV0KKyAgICAgICAgICAgIG9zLnN5c3RlbSgnZ2l0IGNoZWNrb3V0IC1iICVzICVzJyAlIChoZ2JyYW5jaFtzdHIoY3NldCldLCBoZ3ZlcnNbcGFyZW50XSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAnY2hlY2tpbmcgb3V0IGJyYW5jaCcsIGhnYnJhbmNoW3N0cihjc2V0KV0KKyAgICAgICAgICAgIG9zLnN5c3RlbSgnZ2l0IGNoZWNrb3V0ICVzJyAlIGhnYnJhbmNoW3N0cihjc2V0KV0pCisKKyAgICAjIG1lcmdlCisgICAgaWYgbXBhcmVudDoKKyAgICAgICAgaWYgaGdicmFuY2hbcGFyZW50XSA9PSBoZ2JyYW5jaFtzdHIoY3NldCldOgorICAgICAgICAgICAgb3RoZXJicmFuY2ggPSBoZ2JyYW5jaFttcGFyZW50XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3RoZXJicmFuY2ggPSBoZ2JyYW5jaFtwYXJlbnRdCisgICAgICAgIHByaW50ICdtZXJnaW5nJywgb3RoZXJicmFuY2gsICdpbnRvJywgaGdicmFuY2hbc3RyKGNzZXQpXQorICAgICAgICBvcy5zeXN0ZW0oZ2V0Z2l0ZW52KHVzZXIsIGRhdGUpICsgJ2dpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzICIiICVzICVzJyAlIChoZ2JyYW5jaFtzdHIoY3NldCldLCBvdGhlcmJyYW5jaCkpCisKKyAgICAjIHJlbW92ZSBldmVyeXRoaW5nIGV4Y2VwdCAuZ2l0IGFuZCAuaGcgZGlyZWN0b3JpZXMKKyAgICBvcy5zeXN0ZW0oJ2ZpbmQgLiBcKCAtcGF0aCAiLi8uaGciIC1vIC1wYXRoICIuLy5naXQiIFwpIC1wcnVuZSAtbyAhIC1uYW1lICIuIiAtcHJpbnQgfCB4YXJncyBybSAtcmYnKQorCisgICAgIyByZXBvcHVsYXRlIHdpdGggY2hlY2tvdXRlZCBmaWxlcworICAgIG9zLnN5c3RlbSgnaGcgdXBkYXRlIC1DICVkJyAlIGNzZXQpCisKKyAgICAjIGFkZCBuZXcgZmlsZXMKKyAgICBvcy5zeXN0ZW0oJ2dpdCBscy1maWxlcyAteCAuaGcgLS1vdGhlcnMgfCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tc3RkaW4nKQorICAgICMgZGVsZXRlIHJlbW92ZWQgZmlsZXMKKyAgICBvcy5zeXN0ZW0oJ2dpdCBscy1maWxlcyAteCAuaGcgLS1kZWxldGVkIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAtLXN0ZGluJykKKworICAgICMgY29tbWl0CisgICAgb3Muc3lzdGVtKGdldGdpdGVudih1c2VyLCBkYXRlKSArICdnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLWEgLUYgJXMnICUgZmlsZWNvbW1lbnQpCisgICAgb3MudW5saW5rKGZpbGVjb21tZW50KQorCisgICAgIyB0YWcKKyAgICBpZiB0YWcgYW5kIHRhZyAhPSAndGlwJzoKKyAgICAgICAgb3Muc3lzdGVtKGdldGdpdGVudih1c2VyLCBkYXRlKSArICdnaXQgdGFnICVzJyAlIHRhZykKKworICAgICMgZGVsZXRlIGJyYW5jaCBpZiBub3QgdXNlZCBhbnltb3JlLi4uCisgICAgaWYgbXBhcmVudCBhbmQgbGVuKGhnY2hpbGRyZW5bc3RyKGNzZXQpXSk6CisgICAgICAgIHByaW50ICJEZWxldGluZyB1bnVzZWQgYnJhbmNoOiIsIG90aGVyYnJhbmNoCisgICAgICAgIG9zLnN5c3RlbSgnZ2l0IGJyYW5jaCAtZCAlcycgJSBvdGhlcmJyYW5jaCkKKworICAgICMgcmV0cmlldmUgYW5kIHJlY29yZCB0aGUgdmVyc2lvbgorICAgIHZ2diA9IG9zLnBvcGVuKCdnaXQgc2hvdyAtLXF1aWV0IC0tcHJldHR5PWZvcm1hdDolSCcpLnJlYWQoKQorICAgIHByaW50ICdyZWNvcmQnLCBjc2V0LCAnLT4nLCB2dnYKKyAgICBoZ3ZlcnNbc3RyKGNzZXQpXSA9IHZ2dgorCitpZiBoZ25ld2NzZXRzID49IG9wdF9ucmVwYWNrIGFuZCBvcHRfbnJlcGFjayAhPSAtMToKKyAgICBvcy5zeXN0ZW0oJ2dpdCByZXBhY2sgLWEgLWQnKQorCisjIHdyaXRlIHRoZSBzdGF0ZSBmb3IgaW5jcmVtZW50YWxzCitpZiBzdGF0ZToKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnV3JpdGluZyBzdGF0ZScKKyAgICBmID0gb3BlbihzdGF0ZSwgJ3cnKQorICAgIHBpY2tsZS5kdW1wKGhndmVycywgZikKKworIyB2aW06IGV0IHRzPTggc3c9NCBzdHM9NApkaWZmIC0tZ2l0IGEvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnR4dCBiL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmOGZlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC50eHQKQEAgLTAsMCArMSwyMSBAQAoraGctdG8tZ2l0LnB5IGlzIGFibGUgdG8gY29udmVydCBhIE1lcmN1cmlhbCByZXBvc2l0b3J5IGludG8gYSBnaXQgb25lLAorYW5kIHByZXNlcnZlcyB0aGUgYnJhbmNoZXMgaW4gdGhlIHByb2Nlc3MgKHVubGlrZSB0YWlsb3IpCisKK2hnLXRvLWdpdC5weSBjYW4gcHJvYmFibHkgYmUgZ3JlYXRseSBpbXByb3ZlZCAoaXQncyBhIHJhdGhlciBjcnVkZQorY29tYmluYXRpb24gb2Ygc2hlbGwgYW5kIHB5dGhvbikgYnV0IGl0IGRvZXMgYWxyZWFkeSB3b3JrIHF1aXRlIHdlbGwgZm9yCittZS4gRmVhdHVyZXM6CisJLSBzdXBwb3J0cyBpbmNyZW1lbnRhbCBjb252ZXJzaW9uCisJICAoZm9yIGtlZXBpbmcgYSBnaXQgcmVwbyBpbiBzeW5jIHdpdGggYSBoZyBvbmUpCisgICAgICAgIC0gc3VwcG9ydHMgaGcgYnJhbmNoZXMKKyAgICAgICAgLSBjb252ZXJ0cyBoZyB0YWdzCisKK05vdGUgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgd2lsbCBiZSBjcmVhdGVkICdpbiBwbGFjZScgKGF0IHRoZSBzYW1lCitsb2NhdGlvbiBhcyB0aGUgc291cmNlIGhnIHJlcG8pLiBZb3Ugd2lsbCBoYXZlIHRvIG1hbnVhbGx5IHJlbW92ZSB0aGUKKycuaGcnIGRpcmVjdG9yeSBhZnRlciB0aGUgY29udmVyc2lvbi4KKworQWxzbyBub3RlIHRoYXQgdGhlIGluY3JlbWVudGFsIGNvbnZlcnNpb24gdXNlcyAnc2ltcGxlJyBoZyBjaGFuZ2VzZXRzCitpZGVudGlmaWVycyAob3JkaW5hbHMsIGFzIG9wcG9zZWQgdG8gU0hBLTEgaWRzKSwgYW5kIHNpbmNlIHRoZXNlIGlkcworYXJlIG5vdCBzdGFibGUgYWNyb3NzIGRpZmZlcmVudCByZXBvc2l0b3JpZXMgdGhlIGhnLXRvLWdpdC5weSBzdGF0ZSBmaWxlCitpcyBmb3JldmVyIHRpZWQgdG8gb25lIGhnIHJlcG9zaXRvcnkuCisKK1N0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbCBiL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyMTcxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbApAQCAtMCwwICsxLDc0NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBBbmR5IFBhcmtpbnMKKyMKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBtYWlsIG91dCBjb21taXQgdXBkYXRlIGluZm9ybWF0aW9uLiAgVGhpcyBob29rCisjIHNlbmRzIGVtYWlscyBsaXN0aW5nIG5ldyByZXZpc2lvbnMgdG8gdGhlIHJlcG9zaXRvcnkgaW50cm9kdWNlZCBieSB0aGUKKyMgY2hhbmdlIGJlaW5nIHJlcG9ydGVkLiAgVGhlIHJ1bGUgaXMgdGhhdCAoZm9yIGJyYW5jaCB1cGRhdGVzKSBlYWNoIGNvbW1pdAorIyB3aWxsIGFwcGVhciBvbiBvbmUgZW1haWwgYW5kIG9uZSBlbWFpbCBvbmx5LgorIworIyBUaGlzIGhvb2sgaXMgc3RvcmVkIGluIHRoZSBjb250cmliL2hvb2tzIGRpcmVjdG9yeS4gIFlvdXIgZGlzdHJpYnV0aW9uCisjIHdpbGwgaGF2ZSBwdXQgdGhpcyBzb21ld2hlcmUgc3RhbmRhcmQuICBZb3Ugc2hvdWxkIG1ha2UgdGhpcyBzY3JpcHQKKyMgZXhlY3V0YWJsZSB0aGVuIGxpbmsgdG8gaXQgaW4gdGhlIHJlcG9zaXRvcnkgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGl0IGluLgorIyBGb3IgZXhhbXBsZSwgb24gZGViaWFuIHRoZSBob29rIGlzIHN0b3JlZCBpbgorIyAvdXNyL3NoYXJlL2dpdC1jb3JlL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsOgorIworIyAgY2htb2QgYSt4IHBvc3QtcmVjZWl2ZS1lbWFpbAorIyAgY2QgL3BhdGgvdG8veW91ci9yZXBvc2l0b3J5LmdpdAorIyAgbG4gLXNmIC91c3Ivc2hhcmUvZ2l0LWNvcmUvY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWwgaG9va3MvcG9zdC1yZWNlaXZlCisjCisjIFRoaXMgaG9vayBzY3JpcHQgYXNzdW1lcyBpdCBpcyBlbmFibGVkIG9uIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgb2YgYQorIyBwcm9qZWN0LCB3aXRoIGFsbCB1c2VycyBwdXNoaW5nIG9ubHkgdG8gaXQgYW5kIG5vdCBiZXR3ZWVuIGVhY2ggb3RoZXIuICBJdAorIyB3aWxsIHN0aWxsIHdvcmsgaWYgeW91IGRvbid0IG9wZXJhdGUgaW4gdGhhdCBzdHlsZSwgYnV0IGl0IHdvdWxkIGJlY29tZQorIyBwb3NzaWJsZSBmb3IgdGhlIGVtYWlsIHRvIGJlIGZyb20gc29tZW9uZSBvdGhlciB0aGFuIHRoZSBwZXJzb24gZG9pbmcgdGhlCisjIHB1c2guCisjCisjIFRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcgYW5kIHVzZSBvbiBwcmUtdjEuNS4xIGdpdCBzZXJ2ZXJzLCB0aGlzIHNjcmlwdCB3aWxsCisjIGFsc28gb2JleSB0aGUgaW50ZXJmYWNlIG9mIGhvb2tzL3VwZGF0ZSwgdGFraW5nIGl0cyBhcmd1bWVudHMgb24gdGhlCisjIGNvbW1hbmQgbGluZS4gIFVuZm9ydHVuYXRlbHksIGhvb2tzL3VwZGF0ZSBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCByZWYuCisjIFRvIGF2b2lkIGZpcmluZyBvbmUgZW1haWwgcGVyIHJlZiwgdGhpcyBzY3JpcHQganVzdCBwcmludHMgaXRzIG91dHB1dCB0bworIyB0aGUgc2NyZWVuIHdoZW4gdXNlZCBpbiB0aGlzIG1vZGUuICBUaGUgb3V0cHV0IGNhbiB0aGVuIGJlIHJlZGlyZWN0ZWQgaWYKKyMgd2FudGVkLgorIworIyBDb25maWcKKyMgLS0tLS0tCisjIGhvb2tzLm1haWxpbmdsaXN0CisjICAgVGhpcyBpcyB0aGUgbGlzdCB0aGF0IGFsbCBwdXNoZXMgd2lsbCBnbyB0bzsgbGVhdmUgaXQgYmxhbmsgdG8gbm90IHNlbmQKKyMgICBlbWFpbHMgZm9yIGV2ZXJ5IHJlZiB1cGRhdGUuCisjIGhvb2tzLmFubm91bmNlbGlzdAorIyAgIFRoaXMgaXMgdGhlIGxpc3QgdGhhdCBhbGwgcHVzaGVzIG9mIGFubm90YXRlZCB0YWdzIHdpbGwgZ28gdG8uICBMZWF2ZSBpdAorIyAgIGJsYW5rIHRvIGRlZmF1bHQgdG8gdGhlIG1haWxpbmdsaXN0IGZpZWxkLiAgVGhlIGFubm91bmNlIGVtYWlscyBsaXN0cworIyAgIHRoZSBzaG9ydCBsb2cgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBzaW5jZSB0aGUgbGFzdCBhbm5vdGF0ZWQgdGFnLgorIyBob29rcy5lbnZlbG9wZXNlbmRlcgorIyAgIElmIHNldCB0aGVuIHRoZSAtZiBvcHRpb24gaXMgcGFzc2VkIHRvIHNlbmRtYWlsIHRvIGFsbG93IHRoZSBlbnZlbG9wZQorIyAgIHNlbmRlciBhZGRyZXNzIHRvIGJlIHNldAorIyBob29rcy5lbWFpbHByZWZpeAorIyAgIEFsbCBlbWFpbHMgaGF2ZSB0aGVpciBzdWJqZWN0cyBwcmVmaXhlZCB3aXRoIHRoaXMgcHJlZml4LCBvciAiW1NDTV0iCisjICAgaWYgZW1haWxwcmVmaXggaXMgdW5zZXQsIHRvIGFpZCBmaWx0ZXJpbmcKKyMgaG9va3Muc2hvd3JldgorIyAgIFRoZSBzaGVsbCBjb21tYW5kIHVzZWQgdG8gZm9ybWF0IGVhY2ggcmV2aXNpb24gaW4gdGhlIGVtYWlsLCB3aXRoCisjICAgIiVzIiByZXBsYWNlZCB3aXRoIHRoZSBjb21taXQgaWQuICBEZWZhdWx0cyB0byAiZ2l0IHJldi1saXN0IC0xCisjICAgLS1wcmV0dHkgJXMiLCBkaXNwbGF5aW5nIHRoZSBjb21taXQgaWQsIGF1dGhvciwgZGF0ZSBhbmQgbG9nCisjICAgbWVzc2FnZS4gIFRvIGxpc3QgZnVsbCBwYXRjaGVzIHNlcGFyYXRlZCBieSBhIGJsYW5rIGxpbmUsIHlvdQorIyAgIGNvdWxkIHNldCB0aGlzIHRvICJnaXQgc2hvdyAtQyAlczsgZWNobyIuCisjICAgVG8gbGlzdCBhIGdpdHdlYi9jZ2l0IFVSTCAqYW5kKiBhIGZ1bGwgcGF0Y2ggZm9yIGVhY2ggY2hhbmdlIHNldCwgdXNlIHRoaXM6CisjICAgICAidD0lczsgcHJpbnRmICdodHRwOi8vLi4uLz9pZD0lJXMnIFwkdDsgZWNobztlY2hvOyBnaXQgc2hvdyAtQyBcJHQ7IGVjaG8iCisjICAgQmUgY2FyZWZ1bCBpZiAiLi4uIiBjb250YWlucyB0aGluZ3MgdGhhdCB3aWxsIGJlIGV4cGFuZGVkIGJ5IHNoZWxsICJldmFsIgorIyAgIG9yIHByaW50Zi4KKyMgaG9va3MuZW1haWxtYXhsaW5lcworIyAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgZ2VuZXJhdGVkCisjICAgZW1haWwgYm9keS4gSWYgbm90IHNwZWNpZmllZCwgdGhlcmUgaXMgbm8gbGltaXQuCisjICAgTGluZXMgYmV5b25kIHRoZSBsaW1pdCBhcmUgc3VwcHJlc3NlZCBhbmQgY291bnRlZCwgYW5kIGEgZmluYWwKKyMgICBsaW5lIGlzIGFkZGVkIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBzdXBwcmVzc2VkIGxpbmVzLgorIyBob29rcy5kaWZmb3B0cworIyAgIEFsdGVybmF0ZSBvcHRpb25zIGZvciB0aGUgZ2l0IGRpZmYtdHJlZSBpbnZvY2F0aW9uIHRoYXQgc2hvd3MgY2hhbmdlcy4KKyMgICBEZWZhdWx0IGlzICItLXN0YXQgLS1zdW1tYXJ5IC0tZmluZC1jb3BpZXMtaGFyZGVyIi4gQWRkIC1wIHRvIHRob3NlCisjICAgb3B0aW9ucyB0byBpbmNsdWRlIGEgdW5pZmllZCBkaWZmIG9mIGNoYW5nZXMgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsCisjICAgc3VtbWFyeSBvdXRwdXQuCisjCisjIE5vdGVzCisjIC0tLS0tCisjIEFsbCBlbWFpbHMgaW5jbHVkZSB0aGUgaGVhZGVycyAiWC1HaXQtUmVmbmFtZSIsICJYLUdpdC1PbGRyZXYiLAorIyAiWC1HaXQtTmV3cmV2IiwgYW5kICJYLUdpdC1SZWZ0eXBlIiB0byBlbmFibGUgZmluZSB0dW5lZCBmaWx0ZXJpbmcgYW5kCisjIGdpdmUgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZy4KKyMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucworCisjCisjIEZ1bmN0aW9uIHRvIHByZXBhcmUgZm9yIGVtYWlsIGdlbmVyYXRpb24uIFRoaXMgZGVjaWRlcyB3aGF0IHR5cGUKKyMgb2YgdXBkYXRlIHRoaXMgaXMgYW5kIHdoZXRoZXIgYW4gZW1haWwgc2hvdWxkIGV2ZW4gYmUgZ2VuZXJhdGVkLgorIworcHJlcF9mb3JfZW1haWwoKQoreworCSMgLS0tIEFyZ3VtZW50cworCW9sZHJldj0kKGdpdCByZXYtcGFyc2UgJDEpCisJbmV3cmV2PSQoZ2l0IHJldi1wYXJzZSAkMikKKwlyZWZuYW1lPSIkMyIKKworCSMgLS0tIEludGVycHJldAorCSMgMDAwMC0+MTIzNCAoY3JlYXRlKQorCSMgMTIzNC0+MjM0NSAodXBkYXRlKQorCSMgMjM0NS0+MDAwMCAoZGVsZXRlKQorCWlmIGV4cHIgIiRvbGRyZXYiIDogJzAqJCcgPi9kZXYvbnVsbAorCXRoZW4KKwkJY2hhbmdlX3R5cGU9ImNyZWF0ZSIKKwllbHNlCisJCWlmIGV4cHIgIiRuZXdyZXYiIDogJzAqJCcgPi9kZXYvbnVsbAorCQl0aGVuCisJCQljaGFuZ2VfdHlwZT0iZGVsZXRlIgorCQllbHNlCisJCQljaGFuZ2VfdHlwZT0idXBkYXRlIgorCQlmaQorCWZpCisKKwkjIC0tLSBHZXQgdGhlIHJldmlzaW9uIHR5cGVzCisJbmV3cmV2X3R5cGU9JChnaXQgY2F0LWZpbGUgLXQgJG5ld3JldiAyPiAvZGV2L251bGwpCisJb2xkcmV2X3R5cGU9JChnaXQgY2F0LWZpbGUgLXQgIiRvbGRyZXYiIDI+IC9kZXYvbnVsbCkKKwljYXNlICIkY2hhbmdlX3R5cGUiIGluCisJY3JlYXRlfHVwZGF0ZSkKKwkJcmV2PSIkbmV3cmV2IgorCQlyZXZfdHlwZT0iJG5ld3Jldl90eXBlIgorCQk7OworCWRlbGV0ZSkKKwkJcmV2PSIkb2xkcmV2IgorCQlyZXZfdHlwZT0iJG9sZHJldl90eXBlIgorCQk7OworCWVzYWMKKworCSMgVGhlIHJldmlzaW9uIHR5cGUgdGVsbHMgdXMgd2hhdCB0eXBlIHRoZSBjb21taXQgaXMsIGNvbWJpbmVkIHdpdGgKKwkjIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVmIHdlIGNhbiBkZWNpZGUgYmV0d2VlbgorCSMgIC0gd29ya2luZyBicmFuY2gKKwkjICAtIHRyYWNraW5nIGJyYW5jaAorCSMgIC0gdW5hbm5vdGVkIHRhZworCSMgIC0gYW5ub3RhdGVkIHRhZworCWNhc2UgIiRyZWZuYW1lIiwiJHJldl90eXBlIiBpbgorCQlyZWZzL3RhZ3MvKixjb21taXQpCisJCQkjIHVuLWFubm90YXRlZCB0YWcKKwkJCXJlZm5hbWVfdHlwZT0idGFnIgorCQkJc2hvcnRfcmVmbmFtZT0ke3JlZm5hbWUjI3JlZnMvdGFncy99CisJCQk7OworCQlyZWZzL3RhZ3MvKix0YWcpCisJCQkjIGFubm90YXRlZCB0YWcKKwkJCXJlZm5hbWVfdHlwZT0iYW5ub3RhdGVkIHRhZyIKKwkJCXNob3J0X3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL3RhZ3MvfQorCQkJIyBjaGFuZ2UgcmVjaXBpZW50cworCQkJaWYgWyAtbiAiJGFubm91bmNlcmVjaXBpZW50cyIgXTsgdGhlbgorCQkJCXJlY2lwaWVudHM9IiRhbm5vdW5jZXJlY2lwaWVudHMiCisJCQlmaQorCQkJOzsKKwkJcmVmcy9oZWFkcy8qLGNvbW1pdCkKKwkJCSMgYnJhbmNoCisJCQlyZWZuYW1lX3R5cGU9ImJyYW5jaCIKKwkJCXNob3J0X3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL2hlYWRzL30KKwkJCTs7CisJCXJlZnMvcmVtb3Rlcy8qLGNvbW1pdCkKKwkJCSMgdHJhY2tpbmcgYnJhbmNoCisJCQlyZWZuYW1lX3R5cGU9InRyYWNraW5nIGJyYW5jaCIKKwkJCXNob3J0X3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL3JlbW90ZXMvfQorCQkJZWNobyA+JjIgIioqKiBQdXNoLXVwZGF0ZSBvZiB0cmFja2luZyBicmFuY2gsICRyZWZuYW1lIgorCQkJZWNobyA+JjIgIioqKiAgLSBubyBlbWFpbCBnZW5lcmF0ZWQuIgorCQkJcmV0dXJuIDEKKwkJCTs7CisJCSopCisJCQkjIEFueXRoaW5nIGVsc2UgKGlzIHRoZXJlIGFueXRoaW5nIGVsc2U/KQorCQkJZWNobyA+JjIgIioqKiBVbmtub3duIHR5cGUgb2YgdXBkYXRlIHRvICRyZWZuYW1lICgkcmV2X3R5cGUpIgorCQkJZWNobyA+JjIgIioqKiAgLSBubyBlbWFpbCBnZW5lcmF0ZWQiCisJCQlyZXR1cm4gMQorCQkJOzsKKwllc2FjCisKKwkjIENoZWNrIGlmIHdlJ3ZlIGdvdCBhbnlvbmUgdG8gc2VuZCB0bworCWlmIFsgLXogIiRyZWNpcGllbnRzIiBdOyB0aGVuCisJCWNhc2UgIiRyZWZuYW1lX3R5cGUiIGluCisJCQkiYW5ub3RhdGVkIHRhZyIpCisJCQkJY29uZmlnX25hbWU9Imhvb2tzLmFubm91bmNlbGlzdCIKKwkJCQk7OworCQkJKikKKwkJCQljb25maWdfbmFtZT0iaG9va3MubWFpbGluZ2xpc3QiCisJCQkJOzsKKwkJZXNhYworCQllY2hvID4mMiAiKioqICRjb25maWdfbmFtZSBpcyBub3Qgc2V0IHNvIG5vIGVtYWlsIHdpbGwgYmUgc2VudCIKKwkJZWNobyA+JjIgIioqKiBmb3IgJHJlZm5hbWUgdXBkYXRlICRvbGRyZXYtPiRuZXdyZXYiCisJCXJldHVybiAxCisJZmkKKworCXJldHVybiAwCit9CisKKyMKKyMgVG9wIGxldmVsIGVtYWlsIGdlbmVyYXRpb24gZnVuY3Rpb24uICBUaGlzIGNhbGxzIHRoZSBhcHByb3ByaWF0ZQorIyBib2R5LWdlbmVyYXRpb24gcm91dGluZSBhZnRlciBvdXRwdXR0aW5nIHRoZSBjb21tb24gaGVhZGVyLgorIworIyBOb3RlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhbnkgZW1haWwgb3V0cHV0LCB0aGF0IGlzCisjIHRha2VuIGNhcmUgb2YgYnkgdGhlIGZ1bmN0aW9ucyBpdCBjYWxsczoKKyMgIC0gZ2VuZXJhdGVfZW1haWxfaGVhZGVyCisjICAtIGdlbmVyYXRlX2NyZWF0ZV9YWFhYX2VtYWlsCisjICAtIGdlbmVyYXRlX3VwZGF0ZV9YWFhYX2VtYWlsCisjICAtIGdlbmVyYXRlX2RlbGV0ZV9YWFhYX2VtYWlsCisjICAtIGdlbmVyYXRlX2VtYWlsX2Zvb3RlcgorIworIyBOb3RlIGFsc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbm5vdCAnZXhpdCcgZnJvbSB0aGUgc2NyaXB0OyB3aGVuIHRoaXMKKyMgZnVuY3Rpb24gaXMgcnVubmluZyAoaW4gaG9vayBzY3JpcHQgbW9kZSksIHRoZSBzZW5kX21haWwoKSBmdW5jdGlvbgorIyBpcyBhbHJlYWR5IGV4ZWN1dGluZyBpbiBhbm90aGVyIHByb2Nlc3MsIGNvbm5lY3RlZCB2aWEgYSBwaXBlLCBhbmQKKyMgaWYgdGhpcyBmdW5jdGlvbiBleGl0cyB3aXRob3V0LCB3aGF0ZXZlciBoYXMgYmVlbiBnZW5lcmF0ZWQgdG8gdGhhdAorIyBwb2ludCB3aWxsIGJlIHNlbnQgYXMgYW4gZW1haWwuLi4gZXZlbiBpZiBub3RoaW5nIGhhcyBiZWVuIGdlbmVyYXRlZC4KKyMKK2dlbmVyYXRlX2VtYWlsKCkKK3sKKwkjIEVtYWlsIHBhcmFtZXRlcnMKKwkjIFRoZSBlbWFpbCBzdWJqZWN0IHdpbGwgY29udGFpbiB0aGUgYmVzdCBkZXNjcmlwdGlvbiBvZiB0aGUgcmVmCisJIyB0aGF0IHdlIGNhbiBidWlsZCBmcm9tIHRoZSBwYXJhbWV0ZXJzCisJZGVzY3JpYmU9JChnaXQgZGVzY3JpYmUgJHJldiAyPi9kZXYvbnVsbCkKKwlpZiBbIC16ICIkZGVzY3JpYmUiIF07IHRoZW4KKwkJZGVzY3JpYmU9JHJldgorCWZpCisKKwlnZW5lcmF0ZV9lbWFpbF9oZWFkZXIKKworCSMgQ2FsbCB0aGUgY29ycmVjdCBib2R5IGdlbmVyYXRpb24gZnVuY3Rpb24KKwlmbl9uYW1lPWdlbmVyYWwKKwljYXNlICIkcmVmbmFtZV90eXBlIiBpbgorCSJ0cmFja2luZyBicmFuY2gifGJyYW5jaCkKKwkJZm5fbmFtZT1icmFuY2gKKwkJOzsKKwkiYW5ub3RhdGVkIHRhZyIpCisJCWZuX25hbWU9YXRhZworCQk7OworCWVzYWMKKworCWlmIFsgLXogIiRtYXhsaW5lcyIgXTsgdGhlbgorCQlnZW5lcmF0ZV8ke2NoYW5nZV90eXBlfV8ke2ZuX25hbWV9X2VtYWlsCisJZWxzZQorCQlnZW5lcmF0ZV8ke2NoYW5nZV90eXBlfV8ke2ZuX25hbWV9X2VtYWlsIHwgbGltaXRfbGluZXMgJG1heGxpbmVzCisJZmkKKworCWdlbmVyYXRlX2VtYWlsX2Zvb3RlcgorfQorCitnZW5lcmF0ZV9lbWFpbF9oZWFkZXIoKQoreworCSMgLS0tIEVtYWlsIChhbGwgc3Rkb3V0IHdpbGwgYmUgdGhlIGVtYWlsKQorCSMgR2VuZXJhdGUgaGVhZGVyCisJY2F0IDw8LUVPRgorCVRvOiAkcmVjaXBpZW50cworCVN1YmplY3Q6ICR7ZW1haWxwcmVmaXh9JHByb2plY3RkZXNjICRyZWZuYW1lX3R5cGUgJHNob3J0X3JlZm5hbWUgJHtjaGFuZ2VfdHlwZX1kLiAkZGVzY3JpYmUKKwlYLUdpdC1SZWZuYW1lOiAkcmVmbmFtZQorCVgtR2l0LVJlZnR5cGU6ICRyZWZuYW1lX3R5cGUKKwlYLUdpdC1PbGRyZXY6ICRvbGRyZXYKKwlYLUdpdC1OZXdyZXY6ICRuZXdyZXYKKworCVRoaXMgaXMgYW4gYXV0b21hdGVkIGVtYWlsIGZyb20gdGhlIGdpdCBob29rcy9wb3N0LXJlY2VpdmUgc2NyaXB0LiBJdCB3YXMKKwlnZW5lcmF0ZWQgYmVjYXVzZSBhIHJlZiBjaGFuZ2Ugd2FzIHB1c2hlZCB0byB0aGUgcmVwb3NpdG9yeSBjb250YWluaW5nCisJdGhlIHByb2plY3QgIiRwcm9qZWN0ZGVzYyIuCisKKwlUaGUgJHJlZm5hbWVfdHlwZSwgJHNob3J0X3JlZm5hbWUgaGFzIGJlZW4gJHtjaGFuZ2VfdHlwZX1kCisJRU9GCit9CisKK2dlbmVyYXRlX2VtYWlsX2Zvb3RlcigpCit7CisJU1BBQ0U9IiAiCisJY2F0IDw8LUVPRgorCisKKwlob29rcy9wb3N0LXJlY2VpdmUKKwktLSR7U1BBQ0V9CisJJHByb2plY3RkZXNjCisJRU9GCit9CisKKyMgLS0tLS0tLS0tLS0tLS0tIEJyYW5jaGVzCisKKyMKKyMgQ2FsbGVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSBicmFuY2gKKyMKK2dlbmVyYXRlX2NyZWF0ZV9icmFuY2hfZW1haWwoKQoreworCSMgVGhpcyBpcyBhIG5ldyBicmFuY2ggYW5kIHNvIG9sZHJldiBpcyBub3QgdmFsaWQKKwllY2hvICIgICAgICAgIGF0ICAkbmV3cmV2ICgkbmV3cmV2X3R5cGUpIgorCWVjaG8gIiIKKworCWVjaG8gJExPR0JFR0lOCisJc2hvd19uZXdfcmV2aXNpb25zCisJZWNobyAkTE9HRU5ECit9CisKKyMKKyMgQ2FsbGVkIGZvciB0aGUgY2hhbmdlIG9mIGEgcHJlLWV4aXN0aW5nIGJyYW5jaAorIworZ2VuZXJhdGVfdXBkYXRlX2JyYW5jaF9lbWFpbCgpCit7CisJIyBDb25zaWRlciB0aGlzOgorCSMgICAxIC0tLSAyIC0tLSBPIC0tLSBYIC0tLSAzIC0tLSA0IC0tLSBOCisJIworCSMgTyBpcyAkb2xkcmV2IGZvciAkcmVmbmFtZQorCSMgTiBpcyAkbmV3cmV2IGZvciAkcmVmbmFtZQorCSMgWCBpcyBhIHJldmlzaW9uIHBvaW50ZWQgdG8gYnkgc29tZSBvdGhlciByZWYsIGZvciB3aGljaCB3ZSBtYXkKKwkjICAgYXNzdW1lIHRoYXQgYW4gZW1haWwgaGFzIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQuCisJIyBJbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBpc3N1ZSBhbiBlbWFpbCBjb250YWluaW5nIG9ubHkgcmV2aXNpb25zCisJIyAzLCA0LCBhbmQgTi4gIEdpdmVuIChhbG1vc3QpIGJ5CisJIworCSMgIGdpdCByZXYtbGlzdCBOIF5PIC0tbm90IC0tYWxsCisJIworCSMgVGhlIHJlYXNvbiBmb3IgdGhlICJhbG1vc3QiLCBpcyB0aGF0IHRoZSAiLS1ub3QgLS1hbGwiIHdpbGwgdGFrZQorCSMgcHJlY2VkZW5jZSBvdmVyIHRoZSAiTiIsIGFuZCBlZmZlY3RpdmVseSB3aWxsIHRyYW5zbGF0ZSB0bworCSMKKwkjICBnaXQgcmV2LWxpc3QgTiBeTyBeWCBeTgorCSMKKwkjIFNvLCB3ZSBuZWVkIHRvIGJ1aWxkIHVwIHRoZSBsaXN0IG1vcmUgY2FyZWZ1bGx5LiAgZ2l0IHJldi1wYXJzZQorCSMgd2lsbCBnZW5lcmF0ZSBhIGxpc3Qgb2YgcmV2cyB0aGF0IG1heSBiZSBmZWQgaW50byBnaXQgcmV2LWxpc3QuCisJIyBXZSBjYW4gZ2V0IGl0IHRvIG1ha2UgdGhlICItLW5vdCAtLWFsbCIgcGFydCBhbmQgdGhlbiBmaWx0ZXIgb3V0CisJIyB0aGUgIl5OIiB3aXRoOgorCSMKKwkjICBnaXQgcmV2LXBhcnNlIC0tbm90IC0tYWxsIHwgZ3JlcCAtdiBOCisJIworCSMgVGhlbiwgdXNpbmcgdGhlIC0tc3RkaW4gc3dpdGNoIHRvIGdpdCByZXYtbGlzdCB3ZSBoYXZlIGVmZmVjdGl2ZWx5CisJIyBtYW51ZmFjdHVyZWQKKwkjCisJIyAgZ2l0IHJldi1saXN0IE4gXk8gXlgKKwkjCisJIyBUaGlzIGxlYXZlcyBhIHByb2JsZW0gd2hlbiBzb21lb25lIGVsc2UgdXBkYXRlcyB0aGUgcmVwb3NpdG9yeQorCSMgd2hpbGUgdGhpcyBzY3JpcHQgaXMgcnVubmluZy4gIFRoZWlyIG5ldyB2YWx1ZSBvZiB0aGUgcmVmIHdlJ3JlCisJIyB3b3JraW5nIG9uIHdvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSAiLS1ub3QgLS1hbGwiIG91dHB1dDsgYW5kIGFzCisJIyBvdXIgJG5ld3JldiB3b3VsZCBiZSBhbiBhbmNlc3RvciBvZiB0aGF0IGNvbW1pdCwgaXQgd291bGQgZXhjbHVkZQorCSMgYWxsIG9mIG91ciBjb21taXRzLiAgV2hhdCB3ZSByZWFsbHkgd2FudCBpcyB0byBleGNsdWRlIHRoZSBjdXJyZW50CisJIyB2YWx1ZSBvZiAkcmVmbmFtZSBmcm9tIHRoZSAtLW5vdCBsaXN0LCByYXRoZXIgdGhhbiBOIGl0c2VsZi4gIFNvOgorCSMKKwkjICBnaXQgcmV2LXBhcnNlIC0tbm90IC0tYWxsIHwgZ3JlcCAtdiAkKGdpdCByZXYtcGFyc2UgJHJlZm5hbWUpCisJIworCSMgR2V0J3MgdXMgdG8gc29tZXRoaW5nIHByZXR0eSBzYWZlIChhcGFydCBmcm9tIHRoZSBzbWFsbCB0aW1lCisJIyBiZXR3ZWVuIHJlZm5hbWUgYmVpbmcgcmVhZCwgYW5kIGdpdCByZXYtcGFyc2UgcnVubmluZyAtIGZvciB0aGF0LAorCSMgSSBnaXZlIHVwKQorCSMKKwkjCisJIyBOZXh0IHByb2JsZW0sIGNvbnNpZGVyIHRoaXM6CisJIyAgICogLS0tIEIgLS0tICogLS0tIE8gKCRvbGRyZXYpCisJIyAgICAgICAgICBcCisJIyAgICAgICAgICAgKiAtLS0gWCAtLS0gKiAtLS0gTiAoJG5ld3JldikKKwkjCisJIyBUaGF0IGlzIHRvIHNheSwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgb2xkcmV2IGlzIGEgc3RyaWN0CisJIyBzdWJzZXQgb2YgbmV3cmV2IChpdCB3b3VsZCBoYXZlIHJlcXVpcmVkIGEgLS1mb3JjZSwgYnV0IHRoYXQncworCSMgYWxsb3dlZCkuICBTbywgd2UgY2FuJ3Qgc2ltcGx5IHNheSByZXYtbGlzdCAkb2xkcmV2Li4kbmV3cmV2LgorCSMgSW5zdGVhZCB3ZSBmaW5kIHRoZSBjb21tb24gYmFzZSBvZiB0aGUgdHdvIHJldnMgYW5kIGxpc3QgZnJvbQorCSMgdGhlcmUuCisJIworCSMgQXMgYWJvdmUsIHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIHByZXNlbmNlIG9mIFg7IGlmCisJIyBhbm90aGVyIGJyYW5jaCBpcyBhbHJlYWR5IGluIHRoZSByZXBvc2l0b3J5IGFuZCBwb2ludHMgYXQgc29tZSBvZgorCSMgdGhlIHJldmlzaW9ucyB0aGF0IHdlIGFyZSBhYm91dCB0byBvdXRwdXQgLSB3ZSBkb24ndCB3YW50IHRoZW0uCisJIyBUaGUgc29sdXRpb24gaXMgYXMgYmVmb3JlOiBnaXQgcmV2LXBhcnNlIG91dHB1dCBmaWx0ZXJlZC4KKwkjCisJIyBGaW5hbGx5LCB0YWdzOiAxIC0tLSAyIC0tLSBPIC0tLSBUIC0tLSAzIC0tLSA0IC0tLSBOCisJIworCSMgVGFncyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSBnZW5lcmF0ZSBuaWNlIHNob3J0bG9nIGVtYWlscyB0aGF0CisJIyBzdW1tYXJpc2UgdGhlIGNvbW1pdHMgYmV0d2VlbiB0aGVtIGFuZCB0aGUgcHJldmlvdXMgdGFnLiAgSG93ZXZlciwKKwkjIHRob3NlIGVtYWlscyBkb24ndCBpbmNsdWRlIHRoZSBmdWxsIGNvbW1pdCBtZXNzYWdlcyB0aGF0IHdlIG91dHB1dAorCSMgZm9yIGEgYnJhbmNoIHVwZGF0ZS4gIFRoZXJlZm9yZSB3ZSBzdGlsbCB3YW50IHRvIG91dHB1dCByZXZpc2lvbnMKKwkjIHRoYXQgaGF2ZSBiZWVuIG91dHB1dCBvbiBhIHRhZyBlbWFpbC4KKwkjCisJIyBMdWNraWx5LCBnaXQgcmV2LXBhcnNlIGluY2x1ZGVzIGp1c3QgdGhlIHRvb2wuICBJbnN0ZWFkIG9mIHVzaW5nCisJIyAiLS1hbGwiIHdlIHVzZSAiLS1icmFuY2hlcyI7IHRoaXMgaGFzIHRoZSBhZGRlZCBiZW5lZml0IHRoYXQKKwkjICJyZW1vdGVzLyIgd2lsbCBiZSBpZ25vcmVkIGFzIHdlbGwuCisKKwkjIExpc3QgYWxsIG9mIHRoZSByZXZpc2lvbnMgdGhhdCB3ZXJlIHJlbW92ZWQgYnkgdGhpcyB1cGRhdGUsIGluIGEKKwkjIGZhc3QtZm9yd2FyZCB1cGRhdGUsIHRoaXMgbGlzdCB3aWxsIGJlIGVtcHR5LCBiZWNhdXNlIHJldi1saXN0IE8KKwkjIF5OIGlzIGVtcHR5LiAgRm9yIGEgbm9uLWZhc3QtZm9yd2FyZCwgTyBeTiBpcyB0aGUgbGlzdCBvZiByZW1vdmVkCisJIyByZXZpc2lvbnMKKwlmYXN0X2ZvcndhcmQ9IiIKKwlyZXY9IiIKKwlmb3IgcmV2IGluICQoZ2l0IHJldi1saXN0ICRuZXdyZXYuLiRvbGRyZXYpCisJZG8KKwkJcmV2dHlwZT0kKGdpdCBjYXQtZmlsZSAtdCAiJHJldiIpCisJCWVjaG8gIiAgZGlzY2FyZHMgICRyZXYgKCRyZXZ0eXBlKSIKKwlkb25lCisJaWYgWyAteiAiJHJldiIgXTsgdGhlbgorCQlmYXN0X2ZvcndhcmQ9MQorCWZpCisKKwkjIExpc3QgYWxsIHRoZSByZXZpc2lvbnMgZnJvbSBiYXNlcmV2IHRvIG5ld3JldiBpbiBhIGtpbmQgb2YKKwkjICJ0YWJsZS1vZi1jb250ZW50cyI7IG5vdGUgdGhpcyBsaXN0IGNhbiBpbmNsdWRlIHJldmlzaW9ucyB0aGF0CisJIyBoYXZlIGFscmVhZHkgaGFkIG5vdGlmaWNhdGlvbiBlbWFpbHMgYW5kIGlzIHByZXNlbnQgdG8gc2hvdyB0aGUKKwkjIGZ1bGwgZGV0YWlsIG9mIHRoZSBjaGFuZ2UgZnJvbSByb2xsaW5nIGJhY2sgdGhlIG9sZCByZXZpc2lvbiB0bworCSMgdGhlIGJhc2UgcmV2aXNpb24gYW5kIHRoZW4gZm9yd2FyZCB0byB0aGUgbmV3IHJldmlzaW9uCisJZm9yIHJldiBpbiAkKGdpdCByZXYtbGlzdCAkb2xkcmV2Li4kbmV3cmV2KQorCWRvCisJCXJldnR5cGU9JChnaXQgY2F0LWZpbGUgLXQgIiRyZXYiKQorCQllY2hvICIgICAgICAgdmlhICAkcmV2ICgkcmV2dHlwZSkiCisJZG9uZQorCisJaWYgWyAiJGZhc3RfZm9yd2FyZCIgXTsgdGhlbgorCQllY2hvICIgICAgICBmcm9tICAkb2xkcmV2ICgkb2xkcmV2X3R5cGUpIgorCWVsc2UKKwkJIyAgMS4gRXhpc3RpbmcgcmV2aXNpb25zIHdlcmUgcmVtb3ZlZC4gIEluIHRoaXMgY2FzZSBuZXdyZXYKKwkJIyAgICAgaXMgYSBzdWJzZXQgb2Ygb2xkcmV2IC0gdGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiBhCisJCSMgICAgIGZhc3QtZm9yd2FyZCwgYSByZXdpbmQKKwkJIyAgMi4gTmV3IHJldmlzaW9ucyB3ZXJlIGFkZGVkIG9uIHRvcCBvZiBhbiBvbGQgcmV2aXNpb24sCisJCSMgICAgIHRoaXMgaXMgYSByZXdpbmQgYW5kIGFkZGl0aW9uLgorCisJCSMgKDEpIGNlcnRhaW5seSBoYXBwZW5lZCwgKDIpIHBvc3NpYmx5LiAgV2hlbiAoMikgaGFzbid0CisJCSMgaGFwcGVuZWQsIHdlIHNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBubyBsb2cgcHJpbnRvdXQKKwkJIyBpcyByZXF1aXJlZC4KKworCQllY2hvICIiCisKKwkJIyBGaW5kIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgdGhlIG9sZCBhbmQgbmV3IHJldmlzaW9ucyBhbmQKKwkJIyBjb21wYXJlIGl0IHdpdGggbmV3cmV2CisJCWJhc2VyZXY9JChnaXQgbWVyZ2UtYmFzZSAkb2xkcmV2ICRuZXdyZXYpCisJCXJld2luZF9vbmx5PSIiCisJCWlmIFsgIiRiYXNlcmV2IiA9ICIkbmV3cmV2IiBdOyB0aGVuCisJCQllY2hvICJUaGlzIHVwZGF0ZSBkaXNjYXJkZWQgZXhpc3RpbmcgcmV2aXNpb25zIGFuZCBsZWZ0IHRoZSBicmFuY2ggcG9pbnRpbmcgYXQiCisJCQllY2hvICJhIHByZXZpb3VzIHBvaW50IGluIHRoZSByZXBvc2l0b3J5IGhpc3RvcnkuIgorCQkJZWNobyAiIgorCQkJZWNobyAiICogLS0gKiAtLSBOICgkbmV3cmV2KSIKKwkJCWVjaG8gIiAgICAgICAgICAgIFxcIgorCQkJZWNobyAiICAgICAgICAgICAgIE8gLS0gTyAtLSBPICgkb2xkcmV2KSIKKwkJCWVjaG8gIiIKKwkJCWVjaG8gIlRoZSByZW1vdmVkIHJldmlzaW9ucyBhcmUgbm90IG5lY2Vzc2FyaWx5IGdvbmUgLSBpZiBhbm90aGVyIHJlZmVyZW5jZSIKKwkJCWVjaG8gInN0aWxsIHJlZmVycyB0byB0aGVtIHRoZXkgd2lsbCBzdGF5IGluIHRoZSByZXBvc2l0b3J5LiIKKwkJCXJld2luZF9vbmx5PTEKKwkJZWxzZQorCQkJZWNobyAiVGhpcyB1cGRhdGUgYWRkZWQgbmV3IHJldmlzaW9ucyBhZnRlciB1bmRvaW5nIGV4aXN0aW5nIHJldmlzaW9ucy4gIFRoYXQgaXMiCisJCQllY2hvICJ0byBzYXksIHRoZSBvbGQgcmV2aXNpb24gaXMgbm90IGEgc3RyaWN0IHN1YnNldCBvZiB0aGUgbmV3IHJldmlzaW9uLiAgVGhpcyIKKwkJCWVjaG8gInNpdHVhdGlvbiBvY2N1cnMgd2hlbiB5b3UgLS1mb3JjZSBwdXNoIGEgY2hhbmdlIGFuZCBnZW5lcmF0ZSBhIHJlcG9zaXRvcnkiCisJCQllY2hvICJjb250YWluaW5nIHNvbWV0aGluZyBsaWtlIHRoaXM6IgorCQkJZWNobyAiIgorCQkJZWNobyAiICogLS0gKiAtLSBCIC0tIE8gLS0gTyAtLSBPICgkb2xkcmV2KSIKKwkJCWVjaG8gIiAgICAgICAgICAgIFxcIgorCQkJZWNobyAiICAgICAgICAgICAgIE4gLS0gTiAtLSBOICgkbmV3cmV2KSIKKwkJCWVjaG8gIiIKKwkJCWVjaG8gIldoZW4gdGhpcyBoYXBwZW5zIHdlIGFzc3VtZSB0aGF0IHlvdSd2ZSBhbHJlYWR5IGhhZCBhbGVydCBlbWFpbHMgZm9yIGFsbCIKKwkJCWVjaG8gIm9mIHRoZSBPIHJldmlzaW9ucywgYW5kIHNvIHdlIGhlcmUgcmVwb3J0IG9ubHkgdGhlIHJldmlzaW9ucyBpbiB0aGUgTiIKKwkJCWVjaG8gImJyYW5jaCBmcm9tIHRoZSBjb21tb24gYmFzZSwgQi4iCisJCWZpCisJZmkKKworCWVjaG8gIiIKKwlpZiBbIC16ICIkcmV3aW5kX29ubHkiIF07IHRoZW4KKwkJZWNobyAiVGhvc2UgcmV2aXNpb25zIGxpc3RlZCBhYm92ZSB0aGF0IGFyZSBuZXcgdG8gdGhpcyByZXBvc2l0b3J5IGhhdmUiCisJCWVjaG8gIm5vdCBhcHBlYXJlZCBvbiBhbnkgb3RoZXIgbm90aWZpY2F0aW9uIGVtYWlsOyBzbyB3ZSBsaXN0IHRob3NlIgorCQllY2hvICJyZXZpc2lvbnMgaW4gZnVsbCwgYmVsb3cuIgorCisJCWVjaG8gIiIKKwkJZWNobyAkTE9HQkVHSU4KKwkJc2hvd19uZXdfcmV2aXNpb25zCisKKwkJIyBYWFg6IE5lZWQgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZXRoZXIgZ2l0IHJldi1saXN0IGFjdHVhbGx5CisJCSMgb3V0cHV0dGVkIGFueXRoaW5nLCBzbyB0aGF0IHdlIGNhbiBpc3N1ZSBhICJubyBuZXcKKwkJIyByZXZpc2lvbnMgYWRkZWQgYnkgdGhpcyB1cGRhdGUiIG1lc3NhZ2UKKworCQllY2hvICRMT0dFTkQKKwllbHNlCisJCWVjaG8gIk5vIG5ldyByZXZpc2lvbnMgd2VyZSBhZGRlZCBieSB0aGlzIHVwZGF0ZS4iCisJZmkKKworCSMgVGhlIGRpZmZzdGF0IGlzIHNob3duIGZyb20gdGhlIG9sZCByZXZpc2lvbiB0byB0aGUgbmV3IHJldmlzaW9uLgorCSMgVGhpcyBpcyB0byBzaG93IHRoZSB0cnV0aCBvZiB3aGF0IGhhcHBlbmVkIGluIHRoaXMgY2hhbmdlLgorCSMgVGhlcmUncyBubyBwb2ludCBzaG93aW5nIHRoZSBzdGF0IGZyb20gdGhlIGJhc2UgdG8gdGhlIG5ldworCSMgcmV2aXNpb24gYmVjYXVzZSB0aGUgYmFzZSBpcyBlZmZlY3RpdmVseSBhIHJhbmRvbSByZXZpc2lvbiBhdCB0aGlzCisJIyBwb2ludCAtIHRoZSB1c2VyIHdpbGwgYmUgaW50ZXJlc3RlZCBpbiB3aGF0IHRoaXMgcmV2aXNpb24gY2hhbmdlZAorCSMgLSBpbmNsdWRpbmcgdGhlIHVuZG9pbmcgb2YgcHJldmlvdXMgcmV2aXNpb25zIGluIHRoZSBjYXNlIG9mCisJIyBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMuCisJZWNobyAiIgorCWVjaG8gIlN1bW1hcnkgb2YgY2hhbmdlczoiCisJZ2l0IGRpZmYtdHJlZSAkZGlmZm9wdHMgJG9sZHJldi4uJG5ld3JldgorfQorCisjCisjIENhbGxlZCBmb3IgdGhlIGRlbGV0aW9uIG9mIGEgYnJhbmNoCisjCitnZW5lcmF0ZV9kZWxldGVfYnJhbmNoX2VtYWlsKCkKK3sKKwllY2hvICIgICAgICAgd2FzICAkb2xkcmV2IgorCWVjaG8gIiIKKwllY2hvICRMT0dCRUdJTgorCWdpdCBzaG93IC1zIC0tcHJldHR5PW9uZWxpbmUgJG9sZHJldgorCWVjaG8gJExPR0VORAorfQorCisjIC0tLS0tLS0tLS0tLS0tLSBBbm5vdGF0ZWQgdGFncworCisjCisjIENhbGxlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGFuIGFubm90YXRlZCB0YWcKKyMKK2dlbmVyYXRlX2NyZWF0ZV9hdGFnX2VtYWlsKCkKK3sKKwllY2hvICIgICAgICAgIGF0ICAkbmV3cmV2ICgkbmV3cmV2X3R5cGUpIgorCisJZ2VuZXJhdGVfYXRhZ19lbWFpbAorfQorCisjCisjIENhbGxlZCBmb3IgdGhlIHVwZGF0ZSBvZiBhbiBhbm5vdGF0ZWQgdGFnICh0aGlzIGlzIHByb2JhYmx5IGEgcmFyZSBldmVudAorIyBhbmQgbWF5IG5vdCBldmVuIGJlIGFsbG93ZWQpCisjCitnZW5lcmF0ZV91cGRhdGVfYXRhZ19lbWFpbCgpCit7CisJZWNobyAiICAgICAgICB0byAgJG5ld3JldiAoJG5ld3Jldl90eXBlKSIKKwllY2hvICIgICAgICBmcm9tICAkb2xkcmV2ICh3aGljaCBpcyBub3cgb2Jzb2xldGUpIgorCisJZ2VuZXJhdGVfYXRhZ19lbWFpbAorfQorCisjCisjIENhbGxlZCB3aGVuIGFuIGFubm90YXRlZCB0YWcgaXMgY3JlYXRlZCBvciBjaGFuZ2VkCisjCitnZW5lcmF0ZV9hdGFnX2VtYWlsKCkKK3sKKwkjIFVzZSBnaXQgZm9yLWVhY2gtcmVmIHRvIHB1bGwgb3V0IHRoZSBpbmRpdmlkdWFsIGZpZWxkcyBmcm9tIHRoZQorCSMgdGFnCisJZXZhbCAkKGdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0nCisJdGFnb2JqZWN0PSUoKm9iamVjdG5hbWUpCisJdGFndHlwZT0lKCpvYmplY3R0eXBlKQorCXRhZ2dlcj0lKHRhZ2dlcm5hbWUpCisJdGFnZ2VkPSUodGFnZ2VyZGF0ZSknICRyZWZuYW1lCisJKQorCisJZWNobyAiICAgdGFnZ2luZyAgJHRhZ29iamVjdCAoJHRhZ3R5cGUpIgorCWNhc2UgIiR0YWd0eXBlIiBpbgorCWNvbW1pdCkKKworCQkjIElmIHRoZSB0YWdnZWQgb2JqZWN0IGlzIGEgY29tbWl0LCB0aGVuIHdlIGFzc3VtZSB0aGlzIGlzIGEKKwkJIyByZWxlYXNlLCBhbmQgc28gd2UgY2FsY3VsYXRlIHdoaWNoIHRhZyB0aGlzIHRhZyBpcworCQkjIHJlcGxhY2luZworCQlwcmV2dGFnPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTAgJG5ld3Jldl4gMj4vZGV2L251bGwpCisKKwkJaWYgWyAtbiAiJHByZXZ0YWciIF07IHRoZW4KKwkJCWVjaG8gIiAgcmVwbGFjZXMgICRwcmV2dGFnIgorCQlmaQorCQk7OworCSopCisJCWVjaG8gIiAgICBsZW5ndGggICQoZ2l0IGNhdC1maWxlIC1zICR0YWdvYmplY3QpIGJ5dGVzIgorCQk7OworCWVzYWMKKwllY2hvICIgdGFnZ2VkIGJ5ICAkdGFnZ2VyIgorCWVjaG8gIiAgICAgICAgb24gICR0YWdnZWQiCisKKwllY2hvICIiCisJZWNobyAkTE9HQkVHSU4KKworCSMgU2hvdyB0aGUgY29udGVudCBvZiB0aGUgdGFnIG1lc3NhZ2U7IHRoaXMgbWlnaHQgY29udGFpbiBhIGNoYW5nZQorCSMgbG9nIG9yIHJlbGVhc2Ugbm90ZXMgc28gaXMgd29ydGggZGlzcGxheWluZy4KKwlnaXQgY2F0LWZpbGUgdGFnICRuZXdyZXYgfCBzZWQgLWUgJzEsL14kL2QnCisKKwllY2hvICIiCisJY2FzZSAiJHRhZ3R5cGUiIGluCisJY29tbWl0KQorCQkjIE9ubHkgY29tbWl0IHRhZ3MgbWFrZSBzZW5zZSB0byBoYXZlIHJldi1saXN0IG9wZXJhdGlvbnMKKwkJIyBwZXJmb3JtZWQgb24gdGhlbQorCQlpZiBbIC1uICIkcHJldnRhZyIgXTsgdGhlbgorCQkJIyBTaG93IGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHJlbGVhc2UKKwkJCWdpdCByZXYtbGlzdCAtLXByZXR0eT1zaG9ydCAiJHByZXZ0YWcuLiRuZXdyZXYiIHwgZ2l0IHNob3J0bG9nCisJCWVsc2UKKwkJCSMgTm8gcHJldmlvdXMgdGFnLCBzaG93IGFsbCB0aGUgY2hhbmdlcyBzaW5jZSB0aW1lCisJCQkjIGJlZ2FuCisJCQlnaXQgcmV2LWxpc3QgLS1wcmV0dHk9c2hvcnQgJG5ld3JldiB8IGdpdCBzaG9ydGxvZworCQlmaQorCQk7OworCSopCisJCSMgWFhYOiBJcyB0aGVyZSBhbnl0aGluZyB1c2VmdWwgd2UgY2FuIGRvIGZvciBub24tY29tbWl0CisJCSMgb2JqZWN0cz8KKwkJOzsKKwllc2FjCisKKwllY2hvICRMT0dFTkQKK30KKworIworIyBDYWxsZWQgZm9yIHRoZSBkZWxldGlvbiBvZiBhbiBhbm5vdGF0ZWQgdGFnCisjCitnZW5lcmF0ZV9kZWxldGVfYXRhZ19lbWFpbCgpCit7CisJZWNobyAiICAgICAgIHdhcyAgJG9sZHJldiIKKwllY2hvICIiCisJZWNobyAkTE9HQkVHSU4KKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1vbmVsaW5lICRvbGRyZXYKKwllY2hvICRMT0dFTkQKK30KKworIyAtLS0tLS0tLS0tLS0tLS0gR2VuZXJhbCByZWZlcmVuY2VzCisKKyMKKyMgQ2FsbGVkIHdoZW4gYW55IG90aGVyIHR5cGUgb2YgcmVmZXJlbmNlIGlzIGNyZWF0ZWQgKG1vc3QgbGlrZWx5IGEKKyMgbm9uLWFubm90YXRlZCB0YWcpCisjCitnZW5lcmF0ZV9jcmVhdGVfZ2VuZXJhbF9lbWFpbCgpCit7CisJZWNobyAiICAgICAgICBhdCAgJG5ld3JldiAoJG5ld3Jldl90eXBlKSIKKworCWdlbmVyYXRlX2dlbmVyYWxfZW1haWwKK30KKworIworIyBDYWxsZWQgd2hlbiBhbnkgb3RoZXIgdHlwZSBvZiByZWZlcmVuY2UgaXMgdXBkYXRlZCAobW9zdCBsaWtlbHkgYQorIyBub24tYW5ub3RhdGVkIHRhZykKKyMKK2dlbmVyYXRlX3VwZGF0ZV9nZW5lcmFsX2VtYWlsKCkKK3sKKwllY2hvICIgICAgICAgIHRvICAkbmV3cmV2ICgkbmV3cmV2X3R5cGUpIgorCWVjaG8gIiAgICAgIGZyb20gICRvbGRyZXYiCisKKwlnZW5lcmF0ZV9nZW5lcmFsX2VtYWlsCit9CisKKyMKKyMgQ2FsbGVkIGZvciBjcmVhdGlvbiBvciB1cGRhdGUgb2YgYW55IG90aGVyIHR5cGUgb2YgcmVmZXJlbmNlCisjCitnZW5lcmF0ZV9nZW5lcmFsX2VtYWlsKCkKK3sKKwkjIFVuYW5ub3RhdGVkIHRhZ3MgYXJlIG1vcmUgYWJvdXQgbWFya2luZyBhIHBvaW50IHRoYW4gcmVsZWFzaW5nIGEKKwkjIHZlcnNpb247IHRoZXJlZm9yZSB3ZSBkb24ndCBkbyB0aGUgc2hvcnRsb2cgc3VtbWFyeSB0aGF0IHdlIGRvIGZvcgorCSMgYW5ub3RhdGVkIHRhZ3MgYWJvdmUgLSB3ZSBzaW1wbHkgc2hvdyB0aGF0IHRoZSBwb2ludCBoYXMgYmVlbgorCSMgbWFya2VkLCBhbmQgcHJpbnQgdGhlIGxvZyBtZXNzYWdlIGZvciB0aGUgbWFya2VkIHBvaW50IGZvcgorCSMgcmVmZXJlbmNlIHB1cnBvc2VzCisJIworCSMgTm90ZSB0aGlzIHNlY3Rpb24gYWxzbyBjYXRjaGVzIGFueSBvdGhlciByZWZlcmVuY2UgdHlwZSAoYWx0aG91Z2gKKwkjIHRoZXJlIGFyZW4ndCBhbnkpIGFuZCBkZWFscyB3aXRoIHRoZW0gaW4gdGhlIHNhbWUgd2F5LgorCisJZWNobyAiIgorCWlmIFsgIiRuZXdyZXZfdHlwZSIgPSAiY29tbWl0IiBdOyB0aGVuCisJCWVjaG8gJExPR0JFR0lOCisJCWdpdCBzaG93IC0tbm8tY29sb3IgLS1yb290IC1zIC0tcHJldHR5PW1lZGl1bSAkbmV3cmV2CisJCWVjaG8gJExPR0VORAorCWVsc2UKKwkJIyBXaGF0IGNhbiB3ZSBkbyBoZXJlPyAgVGhlIHRhZyBtYXJrcyBhbiBvYmplY3QgdGhhdCBpcyBub3QKKwkJIyBhIGNvbW1pdCwgc28gdGhlcmUgaXMgbm8gbG9nIGZvciB1cyB0byBkaXNwbGF5LiAgSXQncworCQkjIHByb2JhYmx5IG5vdCB3aXNlIHRvIG91dHB1dCBnaXQgY2F0LWZpbGUgYXMgaXQgY291bGQgYmUgYQorCQkjIGJpbmFyeSBibG9iLiAgV2UnbGwganVzdCBzYXkgaG93IGJpZyBpdCBpcworCQllY2hvICIkbmV3cmV2IGlzIGEgJG5ld3Jldl90eXBlLCBhbmQgaXMgJChnaXQgY2F0LWZpbGUgLXMgJG5ld3JldikgYnl0ZXMgbG9uZy4iCisJZmkKK30KKworIworIyBDYWxsZWQgZm9yIHRoZSBkZWxldGlvbiBvZiBhbnkgb3RoZXIgdHlwZSBvZiByZWZlcmVuY2UKKyMKK2dlbmVyYXRlX2RlbGV0ZV9nZW5lcmFsX2VtYWlsKCkKK3sKKwllY2hvICIgICAgICAgd2FzICAkb2xkcmV2IgorCWVjaG8gIiIKKwllY2hvICRMT0dCRUdJTgorCWdpdCBzaG93IC1zIC0tcHJldHR5PW9uZWxpbmUgJG9sZHJldgorCWVjaG8gJExPR0VORAorfQorCisKKyMgLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzCisKKyMKKyMgU2hvdyBuZXcgcmV2aXNpb25zIGFzIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gc2VlIHRoZW0gaW4gdGhlIGVtYWlsLgorIworc2hvd19uZXdfcmV2aXNpb25zKCkKK3sKKwkjIFRoaXMgc2hvd3MgYWxsIGxvZyBlbnRyaWVzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGNvdmVyZWQgYnkKKwkjIGFub3RoZXIgcmVmIC0gaS5lLiBjb21taXRzIHRoYXQgYXJlIG5vdyBhY2Nlc3NpYmxlIGZyb20gdGhpcworCSMgcmVmIHRoYXQgd2VyZSBwcmV2aW91c2x5IG5vdCBhY2Nlc3NpYmxlCisJIyAoc2VlIGdlbmVyYXRlX3VwZGF0ZV9icmFuY2hfZW1haWwgZm9yIHRoZSBleHBsYW5hdGlvbiBvZiB0aGlzCisJIyBjb21tYW5kKQorCisJIyBSZXZpc2lvbiByYW5nZSBwYXNzZWQgdG8gcmV2LWxpc3QgZGlmZmVycyBmb3IgbmV3IHZzLiB1cGRhdGVkCisJIyBicmFuY2hlcy4KKwlpZiBbICIkY2hhbmdlX3R5cGUiID0gY3JlYXRlIF0KKwl0aGVuCisJCSMgU2hvdyBhbGwgcmV2aXNpb25zIGV4Y2x1c2l2ZSB0byB0aGlzIChuZXcpIGJyYW5jaC4KKwkJcmV2c3BlYz0kbmV3cmV2CisJZWxzZQorCQkjIEJyYW5jaCB1cGRhdGU7IHNob3cgcmV2aXNpb25zIG5vdCBwYXJ0IG9mICRvbGRyZXYuCisJCXJldnNwZWM9JG9sZHJldi4uJG5ld3JldgorCWZpCisKKwlvdGhlcl9icmFuY2hlcz0kKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSknIHJlZnMvaGVhZHMvIHwKKwkgICAgZ3JlcCAtRiAtdiAkcmVmbmFtZSkKKwlnaXQgcmV2LXBhcnNlIC0tbm90ICRvdGhlcl9icmFuY2hlcyB8CisJaWYgWyAteiAiJGN1c3RvbV9zaG93cmV2IiBdCisJdGhlbgorCQlnaXQgcmV2LWxpc3QgLS1wcmV0dHkgLS1zdGRpbiAkcmV2c3BlYworCWVsc2UKKwkJZ2l0IHJldi1saXN0IC0tc3RkaW4gJHJldnNwZWMgfAorCQl3aGlsZSByZWFkIG9uZXJldgorCQlkbworCQkJZXZhbCAkKHByaW50ZiAiJGN1c3RvbV9zaG93cmV2IiAkb25lcmV2KQorCQlkb25lCisJZmkKK30KKworCitsaW1pdF9saW5lcygpCit7CisJbGluZXM9MAorCXNraXBwZWQ9MAorCXdoaWxlIElGUz0iIiByZWFkIC1yIGxpbmU7IGRvCisJCWxpbmVzPSQoKGxpbmVzICsgMSkpCisJCWlmIFsgJGxpbmVzIC1ndCAkMSBdOyB0aGVuCisJCQlza2lwcGVkPSQoKHNraXBwZWQgKyAxKSkKKwkJZWxzZQorCQkJcHJpbnRmICIlc1xuIiAiJGxpbmUiCisJCWZpCisJZG9uZQorCWlmIFsgJHNraXBwZWQgLW5lIDAgXTsgdGhlbgorCQllY2hvICIuLi4gJHNraXBwZWQgbGluZXMgc3VwcHJlc3NlZCAuLi4iCisJZmkKK30KKworCitzZW5kX21haWwoKQoreworCWlmIFsgLW4gIiRlbnZlbG9wZXNlbmRlciIgXTsgdGhlbgorCQkvdXNyL3NiaW4vc2VuZG1haWwgLXQgLWYgIiRlbnZlbG9wZXNlbmRlciIKKwllbHNlCisJCS91c3Ivc2Jpbi9zZW5kbWFpbCAtdAorCWZpCit9CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWluKCkKKworIyAtLS0gQ29uc3RhbnRzCitMT0dCRUdJTj0iLSBMb2cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitMT0dFTkQ9Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCisjIC0tLSBDb25maWcKKyMgU2V0IEdJVF9ESVIgZWl0aGVyIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBvciBmcm9tIHRoZSBlbnZpcm9ubWVudAorIyB2YXJpYWJsZS4KK0dJVF9ESVI9JChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbCkKK2lmIFsgLXogIiRHSVRfRElSIiBdOyB0aGVuCisJZWNobyA+JjIgImZhdGFsOiBwb3N0LXJlY2VpdmU6IEdJVF9ESVIgbm90IHNldCIKKwlleGl0IDEKK2ZpCisKK3Byb2plY3RkZXNjPSQoc2VkIC1uZSAnMXAnICIkR0lUX0RJUi9kZXNjcmlwdGlvbiIgMj4vZGV2L251bGwpCisjIENoZWNrIGlmIHRoZSBkZXNjcmlwdGlvbiBpcyB1bmNoYW5nZWQgZnJvbSBpdCdzIGRlZmF1bHQsIGFuZCBzaG9ydGVuIGl0IHRvCisjIGEgbW9yZSBtYW5hZ2VhYmxlIGxlbmd0aCBpZiBpdCBpcworaWYgZXhwciAiJHByb2plY3RkZXNjIiA6ICJVbm5hbWVkIHJlcG9zaXRvcnkuKiQiID4vZGV2L251bGwKK3RoZW4KKwlwcm9qZWN0ZGVzYz0iVU5OQU1FRCBQUk9KRUNUIgorZmkKKworcmVjaXBpZW50cz0kKGdpdCBjb25maWcgaG9va3MubWFpbGluZ2xpc3QpCithbm5vdW5jZXJlY2lwaWVudHM9JChnaXQgY29uZmlnIGhvb2tzLmFubm91bmNlbGlzdCkKK2VudmVsb3Blc2VuZGVyPSQoZ2l0IGNvbmZpZyBob29rcy5lbnZlbG9wZXNlbmRlcikKK2VtYWlscHJlZml4PSQoZ2l0IGNvbmZpZyBob29rcy5lbWFpbHByZWZpeCB8fCBlY2hvICdbU0NNXSAnKQorY3VzdG9tX3Nob3dyZXY9JChnaXQgY29uZmlnIGhvb2tzLnNob3dyZXYpCittYXhsaW5lcz0kKGdpdCBjb25maWcgaG9va3MuZW1haWxtYXhsaW5lcykKK2RpZmZvcHRzPSQoZ2l0IGNvbmZpZyBob29rcy5kaWZmb3B0cykKKzogJHtkaWZmb3B0czo9Ii0tc3RhdCAtLXN1bW1hcnkgLS1maW5kLWNvcGllcy1oYXJkZXIifQorCisjIC0tLSBNYWluIGxvb3AKKyMgQWxsb3cgZHVhbCBtb2RlOiBydW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lIGp1c3QgbGlrZSB0aGUgdXBkYXRlIGhvb2ssIG9yCisjIGlmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4gdGhlbiBydW4gYXMgYSBob29rIHNjcmlwdAoraWYgWyAtbiAiJDEiIC1hIC1uICIkMiIgLWEgLW4gIiQzIiBdOyB0aGVuCisJIyBPdXRwdXQgdG8gdGhlIHRlcm1pbmFsIGluIGNvbW1hbmQgbGluZSBtb2RlIC0gaWYgc29tZW9uZSB3YW50ZWQgdG8KKwkjIHJlc2VuZCBhbiBlbWFpbDsgdGhleSBjb3VsZCByZWRpcmVjdCB0aGUgb3V0cHV0IHRvIHNlbmRtYWlsCisJIyB0aGVtc2VsdmVzCisJcHJlcF9mb3JfZW1haWwgJDIgJDMgJDEgJiYgUEFHRVI9IGdlbmVyYXRlX2VtYWlsCitlbHNlCisJd2hpbGUgcmVhZCBvbGRyZXYgbmV3cmV2IHJlZm5hbWUKKwlkbworCQlwcmVwX2Zvcl9lbWFpbCAkb2xkcmV2ICRuZXdyZXYgJHJlZm5hbWUgfHwgY29udGludWUKKwkJZ2VuZXJhdGVfZW1haWwgJG1heGxpbmVzIHwgc2VuZF9tYWlsCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeSBiL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjkxNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9wcmUtYXV0by1nYy1iYXR0ZXJ5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHZlcmlmeSBpZiB5b3UgYXJlIG9uIGJhdHRlcnksIGluIGNhc2UgeW91CisjIGFyZSBydW5uaW5nIExpbnV4IG9yIE9TIFguIENhbGxlZCBieSBnaXQtZ2MgLS1hdXRvIHdpdGggbm8gYXJndW1lbnRzLgorIyBUaGUgaG9vayBzaG91bGQgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBhZnRlciBpc3N1aW5nIGFuIGFwcHJvcHJpYXRlCisjIG1lc3NhZ2UgaWYgaXQgd2FudHMgdG8gc3RvcCB0aGUgYXV0byByZXBhY2tpbmcuCisjCisjIFRoaXMgaG9vayBpcyBzdG9yZWQgaW4gdGhlIGNvbnRyaWIvaG9va3MgZGlyZWN0b3J5LiBZb3VyIGRpc3RyaWJ1dGlvbgorIyBtYXkgaGF2ZSBwdXQgdGhpcyBzb21ld2hlcmUgZWxzZS4gSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgaG9vaywgeW91CisjIHNob3VsZCBtYWtlIHRoaXMgc2NyaXB0IGV4ZWN1dGFibGUgdGhlbiBsaW5rIHRvIGl0IGluIHRoZSByZXBvc2l0b3J5CisjIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBpdCBpbi4KKyMKKyMgRm9yIGV4YW1wbGUsIGlmIHRoZSBob29rIGlzIHN0b3JlZCBpbgorIyAvdXNyL3NoYXJlL2dpdC1jb3JlL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeToKKyMKKyMgY2htb2QgYSt4IHByZS1hdXRvLWdjLWJhdHRlcnkKKyMgY2QgL3BhdGgvdG8veW91ci9yZXBvc2l0b3J5LmdpdAorIyBsbiAtc2YgL3Vzci9zaGFyZS9naXQtY29yZS9jb250cmliL2hvb2tzL3ByZS1hdXRvLWdjLWJhdHRlcnkgXAorIwlob29rcy9wcmUtYXV0by1nYworCitpZiB0ZXN0IC14IC9zYmluL29uX2FjX3Bvd2VyICYmIC9zYmluL29uX2FjX3Bvd2VyCit0aGVuCisJZXhpdCAwCitlbGlmIHRlc3QgIiQoY2F0IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L0FDL29ubGluZSAyPi9kZXYvbnVsbCkiID0gMQordGhlbgorCWV4aXQgMAorZWxpZiBncmVwIC1xICdvbi1saW5lJyAvcHJvYy9hY3BpL2FjX2FkYXB0ZXIvQUMvc3RhdGUgMj4vZGV2L251bGwKK3RoZW4KKwlleGl0IDAKK2VsaWYgZ3JlcCAtcSAnMHgwMSQnIC9wcm9jL2FwbSAyPi9kZXYvbnVsbAordGhlbgorCWV4aXQgMAorZWxpZiBncmVwIC1xICJBQyBQb3dlciBcKzogMSIgL3Byb2MvcG11L2luZm8gMj4vZGV2L251bGwKK3RoZW4KKwlleGl0IDAKK2VsaWYgdGVzdCAteCAvdXNyL2Jpbi9wbXNldCAmJiAvdXNyL2Jpbi9wbXNldCAtZyBiYXR0IHwKKwlncmVwIC1xICJDdXJyZW50bHkgZHJhd2luZyBmcm9tICdBQyBQb3dlciciCit0aGVuCisJZXhpdCAwCitmaQorCitlY2hvICJBdXRvIHBhY2tpbmcgZGVmZXJyZWQ7IG5vdCBvbiBBQyIKK2V4aXQgMQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsIGIvY29udHJpYi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzdhZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL3NldGdpdHBlcm1zLnBlcmwKQEAgLTAsMCArMSwyMTQgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9zaCBFbmdsYW5kCisjCisjIFRoaXMgc2NyaXB0IGNhbiBiZSB1c2VkIHRvIHNhdmUvcmVzdG9yZSBmdWxsIHBlcm1pc3Npb25zIGFuZCBvd25lcnNoaXAgZGF0YQorIyB3aXRoaW4gYSBnaXQgd29ya2luZyB0cmVlLgorIworIyBUbyBzYXZlIHBlcm1pc3Npb25zL293bmVyc2hpcCBkYXRhLCBwbGFjZSB0aGlzIHNjcmlwdCBpbiB5b3VyIC5naXQvaG9va3MKKyMgZGlyZWN0b3J5IGFuZCBlbmFibGUgYSBgcHJlLWNvbW1pdGAgaG9vayB3aXRoIHRoZSBmb2xsb3dpbmcgbGluZXM6CisjICAgICAgIyEvYmluL3NoCisjICAgICBTVUJESVJFQ1RPUllfT0s9MSAuIGdpdC1zaC1zZXR1cAorIyAgICAgJEdJVF9ESVIvaG9va3Mvc2V0Z2l0cGVybXMucGVybCAtcgorIworIyBUbyByZXN0b3JlIHBlcm1pc3Npb25zL293bmVyc2hpcCBkYXRhLCBwbGFjZSB0aGlzIHNjcmlwdCBpbiB5b3VyIC5naXQvaG9va3MKKyMgZGlyZWN0b3J5IGFuZCBlbmFibGUgYSBgcG9zdC1tZXJnZWAgYW5kIGBwb3N0LWNoZWNrb3V0YCBob29rIHdpdGggdGhlCisjIGZvbGxvd2luZyBsaW5lczoKKyMgICAgICAjIS9iaW4vc2gKKyMgICAgIFNVQkRJUkVDVE9SWV9PSz0xIC4gZ2l0LXNoLXNldHVwCisjICAgICAkR0lUX0RJUi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsIC13CisjCit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6TG9uZzsKK3VzZSBGaWxlOjpGaW5kOwordXNlIEZpbGU6OkJhc2VuYW1lOworCitteSAkdXNhZ2UgPQorIlVzYWdlOiBzZXRnaXRwZXJtcy5wZXJsIFtPUFRJT05dLi4uIDwtLXJlYWR8LS13cml0ZT4KK1RoaXMgcHJvZ3JhbSB1c2VzIGEgZmlsZSBgLmdpdG1ldGFgIHRvIHN0b3JlL3Jlc3RvcmUgcGVybWlzc2lvbnMgYW5kIHVpZC9naWQKK2luZm8gZm9yIGFsbCBmaWxlcy9kaXJzIHRyYWNrZWQgYnkgZ2l0IGluIHRoZSByZXBvc2l0b3J5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1SZWFkIE1vZGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistciwgIC0tcmVhZCAgICAgICAgIFJlYWRzIHBlcm1zL2V0YyBmcm9tIHdvcmtpbmcgZGlyIGludG8gYSAuZ2l0bWV0YSBmaWxlCistcywgIC0tc3Rkb3V0ICAgICAgIE91dHB1dCB0byBzdGRvdXQgaW5zdGVhZCBvZiAuZ2l0bWV0YQorLWQsICAtLWRpZmYgICAgICAgICBTaG93IHVuaWZpZWQgZGlmZiBvZiBwZXJtcyBmaWxlIChYT1Igd2l0aCAtLXN0ZG91dCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tV3JpdGUgTW9kZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLXcsICAtLXdyaXRlICAgICAgICBNb2RpZnkgcGVybXMvZXRjIGluIHdvcmtpbmcgZGlyIHRvIG1hdGNoIHRoZSAuZ2l0bWV0YSBmaWxlCistdiwgIC0tdmVyYm9zZSAgICAgIEJlIHZlcmJvc2UKKworXG4iOworCitteSAoJHN0ZG91dCwgJHNob3dkaWZmLCAkdmVyYm9zZSwgJHJlYWRfbW9kZSwgJHdyaXRlX21vZGUpOworCitpZiAoKEBBUkdWIDwgMCkgfHwgIUdldE9wdGlvbnMoCisJCQkgICAgICAgInN0ZG91dCIsICAgICAgICAgXCRzdGRvdXQsCisJCQkgICAgICAgImRpZmYiLCAgICAgICAgICAgXCRzaG93ZGlmZiwKKwkJCSAgICAgICAicmVhZCIsICAgICAgICAgICBcJHJlYWRfbW9kZSwKKwkJCSAgICAgICAid3JpdGUiLCAgICAgICAgICBcJHdyaXRlX21vZGUsCisJCQkgICAgICAgInZlcmJvc2UiLCAgICAgICAgXCR2ZXJib3NlLAorCQkJICAgICAgKSkgeyBkaWUgJHVzYWdlOyB9CitkaWUgJHVzYWdlIHVubGVzcyAoJHJlYWRfbW9kZSB4b3IgJHdyaXRlX21vZGUpOworCitteSAkdG9wZGlyID0gYGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXBgIG9yIGRpZSAiXG4iOyBjaG9tcCAkdG9wZGlyOworbXkgJGdpdGRpciA9ICR0b3BkaXIgLiAnLmdpdCc7CitteSAkZ2l0bWV0YSA9ICR0b3BkaXIgLiAnLmdpdG1ldGEnOworCitpZiAoJHdyaXRlX21vZGUpIHsKKyAgICAjIFVwZGF0ZSB0aGUgd29ya2luZyBkaXIgcGVybWlzc2lvbnMvb3duZXJzaGlwIGJhc2VkIG9uIGRhdGEgZnJvbSAuZ2l0bWV0YQorICAgIG9wZW4gKElOLCAiPCRnaXRtZXRhIikgb3IgZGllICJDb3VsZCBub3Qgb3BlbiAkZ2l0bWV0YSBmb3IgcmVhZGluZzogJCFcbiI7CisgICAgd2hpbGUgKGRlZmluZWQgKCRfID0gPElOPikpIHsKKwljaG9tcDsKKwlpZiAoL14oLiopICBtb2RlPShcUyspXHMrdWlkPShcZCspXHMrZ2lkPShcZCspLykgeworCSAgICAjIENvbXBhcmUgcmVjb3JkZWQgcGVybXMgdG8gYWN0dWFsIHBlcm1zIGluIHRoZSB3b3JraW5nIGRpcgorCSAgICBteSAoJHBhdGgsICRtb2RlLCAkdWlkLCAkZ2lkKSA9ICgkMSwgJDIsICQzLCAkNCk7CisJICAgIG15ICRmdWxscGF0aCA9ICR0b3BkaXIgLiAkcGF0aDsKKwkgICAgbXkgKHVuZGVmLHVuZGVmLCR3bW9kZSx1bmRlZiwkd3VpZCwkd2dpZCkgPSBsc3RhdCgkZnVsbHBhdGgpOworCSAgICAkd21vZGUgPSBzcHJpbnRmICIlMDRvIiwgJHdtb2RlICYgMDc3Nzc7CisJICAgIGlmICgkbW9kZSBuZSAkd21vZGUpIHsKKwkJJHZlcmJvc2UgJiYgcHJpbnQgIlVwZGF0aW5nIHBlcm1pc3Npb25zIG9uICRwYXRoOiBvbGQ9JHdtb2RlLCBuZXc9JG1vZGVcbiI7CisJCWNobW9kIG9jdCgkbW9kZSksICRmdWxscGF0aDsKKwkgICAgfQorCSAgICBpZiAoJHVpZCAhPSAkd3VpZCB8fCAkZ2lkICE9ICR3Z2lkKSB7CisJCWlmICgkdmVyYm9zZSkgeworCQkgICAgIyBQcmludCBvdXQgdXNlci9ncm91cCBuYW1lcyBpbnN0ZWFkIG9mIHVpZC9naWQKKwkJICAgIG15ICRwd25hbWUgID0gZ2V0cHd1aWQoJHVpZCk7CisJCSAgICBteSAkZ3JwbmFtZSAgPSBnZXRncmdpZCgkZ2lkKTsKKwkJICAgIG15ICR3cHduYW1lICA9IGdldHB3dWlkKCR3dWlkKTsKKwkJICAgIG15ICR3Z3JwbmFtZSAgPSBnZXRncmdpZCgkd2dpZCk7CisJCSAgICAkcHduYW1lID0gJHVpZCBpZiAhZGVmaW5lZCAkcHduYW1lOworCQkgICAgJGdycG5hbWUgPSAkZ2lkIGlmICFkZWZpbmVkICRncnBuYW1lOworCQkgICAgJHdwd25hbWUgPSAkd3VpZCBpZiAhZGVmaW5lZCAkd3B3bmFtZTsKKwkJICAgICR3Z3JwbmFtZSA9ICR3Z2lkIGlmICFkZWZpbmVkICR3Z3JwbmFtZTsKKworCQkgICAgcHJpbnQgIlVwZGF0aW5nIHVpZC9naWQgb24gJHBhdGg6IG9sZD0kd3B3bmFtZS8kd2dycG5hbWUsIG5ldz0kcHduYW1lLyRncnBuYW1lXG4iOworCQl9CisJCWNob3duICR1aWQsICRnaWQsICRmdWxscGF0aDsKKwkgICAgfQorCX0KKwllbHNlIHsKKwkgICAgd2FybiAiSW52YWxpZCBpbnB1dCBmb3JtYXQgaW4gJGdpdG1ldGE6XG5cdCRfXG4iOworCX0KKyAgICB9CisgICAgY2xvc2UgSU47Cit9CitlbHNpZiAoJHJlYWRfbW9kZSkgeworICAgICMgSGFuZGxlIG1lcmdlIGNvbmZsaWN0cyBpbiB0aGUgLmdpdHBlcm1zIGZpbGUKKyAgICBpZiAoLWUgIiRnaXRkaXIvTUVSR0VfTVNHIikgeworCWlmIChgZ3JlcCA9PT09PT0gJGdpdG1ldGFgKSB7CisJICAgICMgQ29uZmxpY3Qgbm90IHJlc29sdmVkIC0tIGFib3J0IHRoZSBjb21taXQKKwkgICAgcHJpbnQgIlBFUk1JU1NJT05TL09XTkVSU0hJUCBDT05GTElDVFxuIjsKKwkgICAgcHJpbnQgIiAgICBSZXNvbHZlIHRoZSBjb25mbGljdCBpbiB0aGUgJGdpdG1ldGEgZmlsZSBhbmQgdGhlbiBydW5cbiI7CisJICAgIHByaW50ICIgICAgYC5naXQvaG9va3Mvc2V0Z2l0cGVybXMucGVybCAtLXdyaXRlYCB0byByZWNvbmNpbGUuXG4iOworCSAgICBleGl0IDE7CisJfQorCWVsc2lmIChgZ3JlcCAkZ2l0bWV0YSAkZ2l0ZGlyL01FUkdFX01TR2ApIHsKKwkgICAgIyBBIGNvbmZsaWN0IGluIC5naXRtZXRhIGhhcyBiZWVuIG1hbnVhbGx5IHJlc29sdmVkLiBWZXJpZnkgdGhhdAorCSAgICAjIHRoZSB3b3JraW5nIGRpciBwZXJtcyBtYXRjaGVzIHRoZSBjdXJyZW50IC5naXRtZXRhIHBlcm1zIGZvcgorCSAgICAjIGVhY2ggZmlsZS9kaXIgdGhhdCBjb25mbGljdGVkLgorCSAgICAjIFRoaXMgaXMgaGVyZSBiZWNhdXNlIGEgYHNldGdpdHBlcm1zLnBlcmwgLS13cml0ZWAgd2FzIG5vdAorCSAgICAjIHBlcmZvcm1lZCBkdWUgdG8gYSBtZXJnZSBjb25mbGljdCwgc28gcGVybWlzc2lvbnMvb3duZXJzaGlwCisJICAgICMgbWF5IG5vdCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIG1hbnVhbGx5IG1lcmdlZCAuZ2l0bWV0YSBmaWxlLgorCSAgICBteSBAY29uZmxpY3RfZGlmZiA9IGBnaXQgc2hvdyBcJChjYXQgJGdpdGRpci9NRVJHRV9IRUFEKWA7CisJICAgIG15IEBjb25mbGljdF9maWxlczsKKwkgICAgbXkgJG1ldGFkaWZmID0gMDsKKworCSAgICAjIEJ1aWxkIGEgbGlzdCBvZiBmaWxlcyB0aGF0IGNvbmZsaWN0ZWQgZnJvbSB0aGUgLmdpdG1ldGEgZGlmZgorCSAgICBmb3JlYWNoIG15ICRsaW5lIChAY29uZmxpY3RfZGlmZikgeworCQlpZiAoJGxpbmUgPX4gbXxeZGlmZiAtLWdpdCBhLyRnaXRtZXRhIGIvJGdpdG1ldGF8KSB7CisJCSAgICAkbWV0YWRpZmYgPSAxOworCQl9CisJCWVsc2lmICgkbGluZSA9fiAvXmRpZmYgLS1naXQvKSB7CisJCSAgICAkbWV0YWRpZmYgPSAwOworCQl9CisJCWVsc2lmICgkbWV0YWRpZmYgJiYgJGxpbmUgPX4gL15cKyguKikgIG1vZGU9LykgeworCQkgICAgcHVzaCBAY29uZmxpY3RfZmlsZXMsICQxOworCQl9CisJICAgIH0KKworCSAgICAjIFZlcmlmeSB0aGF0IGVhY2ggY29uZmxpY3QgZmlsZSBub3cgaGFzIHBlcm1pc3Npb25zIGNvbnNpc3RlbnQKKwkgICAgIyB3aXRoIHRoZSAuZ2l0bWV0YSBmaWxlCisJICAgIGZvcmVhY2ggbXkgJGZpbGUgKEBjb25mbGljdF9maWxlcykgeworCQlteSAkYWJzZmlsZSA9ICR0b3BkaXIgLiAkZmlsZTsKKwkJbXkgJGdtX2VudHJ5ID0gYGdyZXAgIl4kZmlsZSAgbW9kZT0iICRnaXRtZXRhYDsKKwkJaWYgKCRnbV9lbnRyeSA9fiAvbW9kZT0oXGQrKSAgdWlkPShcZCspICBnaWQ9KFxkKykvKSB7CisJCSAgICBteSAoJGdtX21vZGUsICRnbV91aWQsICRnbV9naWQpID0gKCQxLCAkMiwgJDMpOworCQkgICAgbXkgKHVuZGVmLHVuZGVmLCRtb2RlLHVuZGVmLCR1aWQsJGdpZCkgPSBsc3RhdCgiJGFic2ZpbGUiKTsKKwkJICAgICRtb2RlID0gc3ByaW50ZigiJTA0byIsICRtb2RlICYgMDc3NzcpOworCQkgICAgaWYgKCgkZ21fbW9kZSBuZSAkbW9kZSkgfHwgKCRnbV91aWQgIT0gJHVpZCkKKwkJCXx8ICgkZ21fZ2lkICE9ICRnaWQpKSB7CisJCQlwcmludCAiUEVSTUlTU0lPTlMvT1dORVJTSElQIENPTkZMSUNUXG4iOworCQkJcHJpbnQgIiAgICBNaXNtYXRjaCBmb3VuZCBmb3IgZmlsZTogJGZpbGVcbiI7CisJCQlwcmludCAiICAgIFJ1biBgLmdpdC9ob29rcy9zZXRnaXRwZXJtcy5wZXJsIC0td3JpdGVgIHRvIHJlY29uY2lsZS5cbiI7CisJCQlleGl0IDE7CisJCSAgICB9CisJCX0KKwkJZWxzZSB7CisJCSAgICBwcmludCAiV2FybmluZyEgUGVybWlzc2lvbnMvb3duZXJzaGlwIG5vIGxvbmdlciBiZWluZyB0cmFja2VkIGZvciBmaWxlOiAkZmlsZVxuIjsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgICMgTm8gbWVyZ2UgY29uZmxpY3RzIC0tIHdyaXRlIG91dCBwZXJtcy9vd25lcnNoaXAgZGF0YSB0byAuZ2l0bWV0YSBmaWxlCisgICAgdW5sZXNzICgkc3Rkb3V0KSB7CisJb3BlbiAoT1VULCAiPiRnaXRtZXRhLnRtcCIpIG9yIGRpZSAiQ291bGQgbm90IG9wZW4gJGdpdG1ldGEudG1wIGZvciB3cml0aW5nOiAkIVxuIjsKKyAgICB9CisKKyAgICBteSBAZmlsZXMgPSBgZ2l0IGxzLWZpbGVzYDsKKyAgICBteSAlZGlyczsKKworICAgIGZvcmVhY2ggbXkgJHBhdGggKEBmaWxlcykgeworCWNob21wICRwYXRoOworCSMgV2UgaGF2ZSB0byBtYW51YWxseSBhZGQgc3RhdHMgZm9yIHBhcmVudCBkaXJlY3RvcmllcworCW15ICRwYXJlbnQgPSBkaXJuYW1lKCRwYXRoKTsKKwl3aGlsZSAoIWV4aXN0cyAkZGlyc3skcGFyZW50fSkgeworCSAgICAkZGlyc3skcGFyZW50fSA9IDE7CisJICAgIG5leHQgaWYgJHBhcmVudCBlcSAnLic7CisJICAgIHByaW50c3RhdHMoJHBhcmVudCk7CisJICAgICRwYXJlbnQgPSBkaXJuYW1lKCRwYXJlbnQpOworCX0KKwkjIE5vdyB0aGUgZ2l0LXRyYWNrZWQgZmlsZQorCXByaW50c3RhdHMoJHBhdGgpOworICAgIH0KKworICAgICMgZGlmZiB0aGUgdGVtcG9yYXJ5IG1ldGFkYXRhIGZpbGUgdG8gc2VlIGlmIGFueXRoaW5nIGhhcyBjaGFuZ2VkCisgICAgIyBJZiBubyBtZXRhZGF0YSBoYXMgY2hhbmdlZCwgZG9uJ3Qgb3ZlcndyaXRlIHRoZSByZWFsIGZpbGUKKyAgICAjIFRoaXMgaXMganVzdCBzbyBgZ2l0IGNvbW1pdCAtYWAgZG9lc24ndCB0cnkgdG8gY29tbWl0IGEgYm9ndXMgdXBkYXRlCisgICAgdW5sZXNzICgkc3Rkb3V0KSB7CisJaWYgKCEgLWUgJGdpdG1ldGEpIHsKKwkgICAgcmVuYW1lICIkZ2l0bWV0YS50bXAiLCAkZ2l0bWV0YTsKKwl9CisJZWxzZSB7CisJICAgIG15ICRkaWZmID0gYGRpZmYgLVUgMCAkZ2l0bWV0YSAkZ2l0bWV0YS50bXBgOworCSAgICBpZiAoJGRpZmYgbmUgJycpIHsKKwkJcmVuYW1lICIkZ2l0bWV0YS50bXAiLCAkZ2l0bWV0YTsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkJdW5saW5rICIkZ2l0bWV0YS50bXAiOworCSAgICB9CisJICAgIGlmICgkc2hvd2RpZmYpIHsKKwkJcHJpbnQgJGRpZmY7CisJICAgIH0KKwl9CisJY2xvc2UgT1VUOworICAgIH0KKyAgICAjIE1ha2Ugc3VyZSB0aGUgLmdpdG1ldGEgZmlsZSBpcyB0cmFja2VkCisgICAgc3lzdGVtKCJnaXQgYWRkICRnaXRtZXRhIik7Cit9CisKKworc3ViIHByaW50c3RhdHMgeworICAgIG15ICRwYXRoID0gJF9bMF07CisgICAgJHBhdGggPX4gcy9AL1xAL2c7CisgICAgbXkgKHVuZGVmLHVuZGVmLCRtb2RlLHVuZGVmLCR1aWQsJGdpZCkgPSBsc3RhdCgkcGF0aCk7CisgICAgJHBhdGggPX4gcy8lL1wlL2c7CisgICAgaWYgKCRzdGRvdXQpIHsKKwlwcmludCAkcGF0aDsKKwlwcmludGYgIiAgbW9kZT0lMDRvICB1aWQ9JHVpZCAgZ2lkPSRnaWRcbiIsICRtb2RlICYgMDc3Nzc7CisgICAgfQorICAgIGVsc2UgeworCXByaW50IE9VVCAkcGF0aDsKKwlwcmludGYgT1VUICIgIG1vZGU9JTA0byAgdWlkPSR1aWQgIGdpZD0kZ2lkXG4iLCAkbW9kZSAmIDA3Nzc3OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvdXBkYXRlLXBhcmFub2lkIGIvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4YjMxNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvdXBkYXRlLXBhcmFub2lkCkBAIC0wLDAgKzEsNDIxIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpTcGVjOworCiskRU5We1BBVEh9ICAgICA9ICcvb3B0L2dpdC9iaW4nOworbXkgJGFjbF9naXQgICAgPSAnL3Zjcy9hY2xzLmdpdCc7CitteSAkYWNsX2JyYW5jaCA9ICdyZWZzL2hlYWRzL21hc3Rlcic7CitteSAkZGVidWcgICAgICA9IDA7CisKKz1kb2MKK0ludm9rZWQgYXM6IHVwZGF0ZSByZWZuYW1lIG9sZC1zaGExIG5ldy1zaGExCisKK1RoaXMgc2NyaXB0IGlzIHJ1biBieSBnaXQtcmVjZWl2ZS1wYWNrIG9uY2UgZm9yIGVhY2ggcmVmIHRoYXQgdGhlCitjbGllbnQgaXMgdHJ5aW5nIHRvIG1vZGlmeS4gIElmIHdlIGV4aXQgd2l0aCBhIG5vbi16ZXJvIGV4aXQgdmFsdWUKK3RoZW4gdGhlIHVwZGF0ZSBmb3IgdGhhdCBwYXJ0aWN1bGFyIHJlZiBpcyBkZW5pZWQsIGJ1dCB1cGRhdGVzIGZvcgorb3RoZXIgcmVmcyBpbiB0aGUgc2FtZSBydW4gb2YgcmVjZWl2ZS1wYWNrIG1heSBzdGlsbCBiZSBhbGxvd2VkLgorCitXZSBhcmUgcnVuIGFmdGVyIHRoZSBvYmplY3RzIGhhdmUgYmVlbiB1cGxvYWRlZCwgYnV0IGJlZm9yZSB0aGUKK3JlZiBpcyBhY3R1YWxseSBtb2RpZmllZC4gIFdlIHRha2UgYWR2YW50YWdlIG9mIHRoYXQgZmFjdCB3aGVuIHdlCitsb29rIGZvciAibmV3IiBjb21taXRzIGFuZCB0YWdzICh0aGUgbmV3IG9iamVjdHMgd29uJ3Qgc2hvdyB1cCBpbgorYHJldi1saXN0IC0tYWxsYCkuCisKK1RoaXMgc2NyaXB0IGxvYWRzIGFuZCBwYXJzZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbmZpZyBmaWxlCisidXNlcnMvJHRoaXNfdXNlci5hY2wiIGZyb20gdGhlICRhY2xfYnJhbmNoIGNvbW1pdCBvZiAkYWNsX2dpdCBPREIuCitUaGUgYWNsIGZpbGUgaXMgYSBnaXQtY29uZmlnIHN0eWxlIGZpbGUsIGJ1dCB1c2VzIGEgc2xpZ2h0bHkgbW9yZQorcmVzdHJpY3RlZCBzeW50YXggYXMgdGhlIFBlcmwgcGFyc2VyIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBzY3JpcHQKK2lzIG5vdCBuZWFybHkgYXMgcGVybWlzc2l2ZSBhcyBnaXQtY29uZmlnLgorCitFeGFtcGxlOgorCisgIFt1c2VyXQorICAgIGNvbW1pdHRlciA9IEpvaG4gRG9lIDxqb2huLmRvZUBleGFtcGxlLmNvbT4KKyAgICBjb21taXR0ZXIgPSBKb2huIFIuIERvZSA8am9obi5kb2VAZXhhbXBsZS5jb20+CisKKyAgW3JlcG9zaXRvcnkgImFjbHMiXQorICAgIGFsbG93ID0gaGVhZHMvbWFzdGVyCisgICAgYWxsb3cgPSBDRFVSIGZvciBoZWFkcy9qZC8KKyAgICBhbGxvdyA9IEMgICAgZm9yIF50YWdzL3ZcXGQrJAorCitGb3IgYWxsIG5ldyBjb21taXQgb3IgdGFnIG9iamVjdHMgdGhlIGNvbW1pdHRlciAob3IgdGFnZ2VyKSBsaW5lCit3aXRoaW4gdGhlIG9iamVjdCBtdXN0IGV4YWN0bHkgbWF0Y2ggb25lIG9mIHRoZSB1c2VyLmNvbW1pdHRlcgordmFsdWVzIGxpc3RlZCBpbiB0aGUgYWNsIGZpbGUgKCJIRUFEOnVzZXJzLyR0aGlzX3VzZXIuYWNsIikuCisKK0ZvciBhIGJyYW5jaCB0byBiZSBtb2RpZmllZCBhbiBhbGxvdyBsaW5lIHdpdGhpbiB0aGUgbWF0Y2hpbmcKK3JlcG9zaXRvcnkgc2VjdGlvbiBtdXN0IGJlIG1hdGNoZWQgZm9yIGJvdGggdGhlIHJlZm5hbWUgYW5kIHRoZQorb3Bjb2RlLgorCitSZXBvc2l0b3J5IHNlY3Rpb25zIGFyZSBtYXRjaGVkIG9uIHRoZSBiYXNlbmFtZSBvZiB0aGUgcmVwb3NpdG9yeQorKGFmdGVyIHJlbW92aW5nIHRoZSAuZ2l0IHN1ZmZpeCkuCisKK1RoZSBvcGNvZGUgYWJicmV2YXRpb25zIGFyZToKKworICBDOiBjcmVhdGUgbmV3IHJlZgorICBEOiBkZWxldGUgZXhpc3RpbmcgcmVmCisgIFU6IGZhc3QtZm9yd2FyZCBleGlzdGluZyByZWYgKG5vIGNvbW1pdCBsb3NzKQorICBSOiByZXdpbmQvcmViYXNlIGV4aXN0aW5nIHJlZiAoY29tbWl0IGxvc3MpCisKK2lmIG5vIG9wY29kZXMgYXJlIGxpc3RlZCBiZWZvcmUgdGhlICJmb3IiIGtleXdvcmQgdGhlbiAiVSIgKGZvcgorZmFzdC1mb3J3YXJkIHVwZGF0ZSBvbmx5KSBpcyBhc3N1bWVkIGFzIHRoaXMgaXMgdGhlIG1vc3QgY29tbW9uCit1c2FnZS4KKworUmVmbmFtZXMgYXJlIG1hdGNoZWQgYnkgYWx3YXlzIGFzc3VtaW5nIGEgcHJlZml4IG9mICJyZWZzLyIuCitUaGlzIGhvb2sgZm9yYmlkcyBwdXNoaW5nIG9yIGRlbGV0aW5nIGFueXRoaW5nIG5vdCB1bmRlciAicmVmcy8iLgorCitSZWZuYW1lcyB0aGF0IHN0YXJ0IHdpdGggXiBhcmUgUGVybCByZWd1bGFyIGV4cHJlc3Npb25zLCBhbmQgdGhlIF4KK2lzIGtlcHQgYXMgcGFydCBvZiB0aGUgcmVnZXhwLiAgXFwgaXMgbmVlZGVkIHRvIGdldCBqdXN0IG9uZSBcLCBzbworXFxkIGV4cGFuZHMgdG8gXGQgaW4gUGVybC4gIFRoZSAzcmQgYWxsb3cgbGluZSBhYm92ZSBpcyBhbiBleGFtcGxlLgorCitSZWZuYW1lcyB0aGF0IGRvbid0IHN0YXJ0IHdpdGggXiBidXQgdGhhdCBlbmQgd2l0aCAvIGFyZSBwcmVmaXgKK21hdGNoZXMgKDJuZCBhbGxvdyBsaW5lIGFib3ZlKTsgYWxsIG90aGVyIHJlZm5hbWVzIGFyZSBzdHJpY3QKK2VxdWFsaXR5IG1hdGNoZXMgKDFzdCBhbGxvdyBsaW5lKS4KKworQW55dGhpbmcgcHVzaGVkIHRvICJoZWFkcy8iIChvaywgcmVhbGx5ICJyZWZzL2hlYWRzLyIpIG11c3QgYmUKK2EgY29tbWl0LiAgVGFncyBhcmUgbm90IHBlcm1pdHRlZCBoZXJlLgorCitBbnl0aGluZyBwdXNoZWQgdG8gInRhZ3MvIiAoZXJyLCByZWFsbHkgInJlZnMvdGFncy8iKSBtdXN0IGJlIGFuCithbm5vdGF0ZWQgdGFnLiAgQ29tbWl0cywgYmxvYnMsIHRyZWVzLCBldGMuIGFyZSBub3QgcGVybWl0dGVkIGhlcmUuCitBbm5vdGF0ZWQgdGFnIHNpZ25hdHVyZXMgYXJlbid0IGNoZWNrZWQsIG5vciBhcmUgdGhleSByZXF1aXJlZC4KKworVGhlIHNwZWNpYWwgc3VicmVwb3NpdG9yeSBvZiAnaW5mby9uZXctY29tbWl0LWNoZWNrJyBjYW4KK2JlIGNyZWF0ZWQgYW5kIHVzZWQgdG8gYWxsb3cgdXNlcnMgdG8gcHVzaCBuZXcgY29tbWl0cyBhbmQKK3RhZ3MgZnJvbSBhbm90aGVyIGxvY2FsIHJlcG9zaXRvcnkgdG8gdGhpcyBvbmUsIGV2ZW4gaWYgdGhleQorYXJlbid0IHRoZSBjb21taXR0ZXIvdGFnZ2VyIG9mIHRob3NlIG9iamVjdHMuICBJbiBhIG51dCBzaGVsbAordGhlIGluZm8vbmV3LWNvbW1pdC1jaGVjayBkaXJlY3RvcnkgaXMgYSBHaXQgcmVwb3NpdG9yeSB3aG9zZQorb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgZmlsZSBsaXN0cyB0aGlzIHJlcG9zaXRvcnkgYW5kIGFsbCBvdGhlcgorcG9zc2libGUgc291cmNlcywgYW5kIHdob3NlIHJlZnMgc3ViZGlyZWN0b3J5IGNvbnRhaW5zIHN5bWxpbmtzCit0byB0aGlzIHJlcG9zaXRvcnkncyByZWZzIHN1YmRpcmVjdG9yeSwgYW5kIHRvIGFsbCBvdGhlciBwb3NzaWJsZQorc291cmNlcyByZWZzIHN1YmRpcmVjdG9yaWVzLiAgWWVzLCB0aGlzIG1lYW5zIHRoYXQgeW91IGNhbm5vdAordXNlIHBhY2tlZC1yZWZzIGluIHRob3NlIHJlcG9zaXRvcmllcyBhcyB0aGV5IHdvbid0IGJlIHJlc29sdmVkCitjb3JyZWN0bHkuCisKKz1jdXQKKworbXkgJGdpdF9kaXIgPSAkRU5We0dJVF9ESVJ9OworbXkgJG5ld19jb21taXRfY2hlY2sgPSAiJGdpdF9kaXIvaW5mby9uZXctY29tbWl0LWNoZWNrIjsKK215ICRyZWYgPSAkQVJHVlswXTsKK215ICRvbGQgPSAkQVJHVlsxXTsKK215ICRuZXcgPSAkQVJHVlsyXTsKK215ICRuZXdfdHlwZTsKK215ICgkdGhpc191c2VyKSA9IGdldHB3dWlkICQ8OyAjIFJFQUxfVVNFUl9JRAorbXkgJHJlcG9zaXRvcnlfbmFtZTsKK215ICV1c2VyX2NvbW1pdHRlcjsKK215IEBhbGxvd19ydWxlczsKK215IEBwYXRoX3J1bGVzOworbXkgJWRpZmZfY2FjaGU7CisKK3N1YiBkZW55ICgkKSB7CisJcHJpbnQgU1RERVJSICItRGVueS0gICAgJF9bMF1cbiIgaWYgJGRlYnVnOworCXByaW50IFNUREVSUiAiXG5kZW5pZWQ6ICRfWzBdXG5cbiI7CisJZXhpdCAxOworfQorCitzdWIgZ3JhbnQgKCQpIHsKKwlwcmludCBTVERFUlIgIi1HcmFudC0gICAkX1swXVxuIiBpZiAkZGVidWc7CisJZXhpdCAwOworfQorCitzdWIgaW5mbyAoJCkgeworCXByaW50IFNUREVSUiAiLUluZm8tICAgICRfWzBdXG4iIGlmICRkZWJ1ZzsKK30KKworc3ViIGdpdF92YWx1ZSAoQCkgeworCW9wZW4oVCwnLXwnLCdnaXQnLEBfKTsgbG9jYWwgJF8gPSA8VD47IGNob3A7IGNsb3NlIFQ7ICRfOworfQorCitzdWIgbWF0Y2hfc3RyaW5nICgkJCkgeworCW15ICgkYWNsX24sICRyZWYpID0gQF87CisJICAgKCRhY2xfbiBlcSAkcmVmKQorCXx8ICgkYWNsX24gPX4gbSwvJCwgJiYgc3Vic3RyKCRyZWYsMCxsZW5ndGggJGFjbF9uKSBlcSAkYWNsX24pCisJfHwgKCRhY2xfbiA9fiBtLF5cXiwgJiYgJHJlZiA9fiBtOiRhY2xfbjopOworfQorCitzdWIgcGFyc2VfY29uZmlnICgkJCQkKSB7CisJbXkgJGRhdGEgPSBzaGlmdDsKKwlsb2NhbCAkRU5We0dJVF9ESVJ9ID0gc2hpZnQ7CisJbXkgJGJyID0gc2hpZnQ7CisJbXkgJGZuID0gc2hpZnQ7CisJcmV0dXJuIHVubGVzcyBnaXRfdmFsdWUoJ3Jldi1saXN0JywnLS1tYXgtY291bnQ9MScsJGJyLCctLScsJGZuKTsKKwlpbmZvICJMb2FkaW5nICRicjokZm4iOworCW9wZW4oSSwnLXwnLCdnaXQnLCdjYXQtZmlsZScsJ2Jsb2InLCIkYnI6JGZuIik7CisJbXkgJHNlY3Rpb24gPSAnJzsKKwl3aGlsZSAoPEk+KSB7CisJCWNob21wOworCQlpZiAoL15ccyokLyB8fCAvXlxzKiMvKSB7CisJCX0gZWxzaWYgKC9eXFsoW2Etel0rKVxdJC9pKSB7CisJCQkkc2VjdGlvbiA9IGxjICQxOworCQl9IGVsc2lmICgvXlxbKFthLXpdKylccysiKC4qKSJcXSQvaSkgeworCQkJJHNlY3Rpb24gPSBqb2luKCcuJyxsYyAkMSwkMik7CisJCX0gZWxzaWYgKC9eXHMqKFthLXpdW2EtejAtOV0rKVxzKj1ccyooLio/KVxzKiQvaSkgeworCQkJcHVzaCBAeyRkYXRhLT57am9pbignLicsJHNlY3Rpb24sbGMgJDEpfX0sICQyOworCQl9IGVsc2UgeworCQkJZGVueSAiYmFkIGNvbmZpZyBmaWxlIGxpbmUgJC4gaW4gJGJyOiRmbiI7CisJCX0KKwl9CisJY2xvc2UgSTsKK30KKworc3ViIGFsbF9uZXdfY29tbWl0dGVycyAoKSB7CisJbG9jYWwgJEVOVntHSVRfRElSfSA9ICRnaXRfZGlyOworCSRFTlZ7R0lUX0RJUn0gPSAkbmV3X2NvbW1pdF9jaGVjayBpZiAtZCAkbmV3X2NvbW1pdF9jaGVjazsKKworCWluZm8gIkdldHRpbmcgY29tbWl0dGVycyBvZiBuZXcgY29tbWl0cy4iOworCW15ICV1c2VkOworCW9wZW4oVCwnLXwnLCdnaXQnLCdyZXYtbGlzdCcsJy0tcHJldHR5PXJhdycsJG5ldywnLS1ub3QnLCctLWFsbCcpOworCXdoaWxlICg8VD4pIHsKKwkJbmV4dCB1bmxlc3Mgcy9eY29tbWl0dGVyIC8vOworCQljaG9wOworCQlzLz4uKiQvPi87CisJCWluZm8gIkZvdW5kICRfLiIgdW5sZXNzICR1c2VkeyRffSsrOworCX0KKwljbG9zZSBUOworCWluZm8gIk5vIG5ldyBjb21taXRzLiIgdW5sZXNzICV1c2VkOworCWtleXMgJXVzZWQ7Cit9CisKK3N1YiBhbGxfbmV3X3RhZ2dlcnMgKCkgeworCW15ICVleGlzdHM7CisJb3BlbihULCctfCcsJ2dpdCcsJ2Zvci1lYWNoLXJlZicsJy0tZm9ybWF0PSUob2JqZWN0bmFtZSknLCdyZWZzL3RhZ3MnKTsKKwl3aGlsZSAoPFQ+KSB7CisJCWNob3A7CisJCSRleGlzdHN7JF99ID0gMTsKKwl9CisJY2xvc2UgVDsKKworCWluZm8gIkdldHRpbmcgdGFnZ2VycyBvZiBuZXcgdGFncy4iOworCW15ICV1c2VkOworCW15ICRvYmogPSAkbmV3OworCW15ICRvYmpfdHlwZSA9ICRuZXdfdHlwZTsKKwl3aGlsZSAoJG9ial90eXBlIGVxICd0YWcnKSB7CisJCWxhc3QgaWYgJGV4aXN0c3skb2JqfTsKKwkJJG9ial90eXBlID0gJyc7CisJCW9wZW4oVCwnLXwnLCdnaXQnLCdjYXQtZmlsZScsJ3RhZycsJG9iaik7CisJCXdoaWxlICg8VD4pIHsKKwkJCWNob3A7CisJCQlpZiAoL15vYmplY3QgKFthLXowLTldezQwfSkkLykgeworCQkJCSRvYmogPSAkMTsKKwkJCX0gZWxzaWYgKC9edHlwZSAoLispJC8pIHsKKwkJCQkkb2JqX3R5cGUgPSAkMTsKKwkJCX0gZWxzaWYgKHMvXnRhZ2dlciAvLykgeworCQkJCXMvPi4qJC8+LzsKKwkJCQlpbmZvICJGb3VuZCAkXy4iIHVubGVzcyAkdXNlZHskX30rKzsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJCWNsb3NlIFQ7CisJfQorCWluZm8gIk5vIG5ldyB0YWdzLiIgdW5sZXNzICV1c2VkOworCWtleXMgJXVzZWQ7Cit9CisKK3N1YiBjaGVja19jb21taXR0ZXJzIChAKSB7CisJbXkgQGJhZDsKKwlmb3JlYWNoIChAXykgeyBwdXNoIEBiYWQsICRfIHVubGVzcyAkdXNlcl9jb21taXR0ZXJ7JF99OyB9CisJaWYgKEBiYWQpIHsKKwkJcHJpbnQgU1RERVJSICJcbiI7CisJCXByaW50IFNUREVSUiAiWW91IGFyZSBub3QgJF8uXG4iIGZvcmVhY2ggKHNvcnQgQGJhZCk7CisJCWRlbnkgIllvdSBjYW5ub3QgcHVzaCBjaGFuZ2VzIG5vdCBjb21taXR0ZWQgYnkgeW91LiI7CisJfQorfQorCitzdWIgbG9hZF9kaWZmICgkKSB7CisJbXkgJGJhc2UgPSBzaGlmdDsKKwlteSAkZCA9ICRkaWZmX2NhY2hleyRiYXNlfTsKKwl1bmxlc3MgKCRkKSB7CisJCWxvY2FsICQvID0gIlwwIjsKKwkJbXkgJXRoaXNfZGlmZjsKKwkJaWYgKCRiYXNlID1+IC9eMHs0MH0kLykgeworCQkJIyBEb24ndCBsb2FkIHRoZSBkaWZmIGF0IGFsbDsgd2UgYXJlIG1ha2luZyB0aGUKKwkJCSMgYnJhbmNoIGFuZCBoYXZlIG5vIGJhc2UgdG8gY29tcGFyZSB0byBpbiB0aGlzCisJCQkjIGNhc2UuICBBIGZpbGUgbGV2ZWwgQUNMIG1ha2VzIG5vIHNlbnNlIGluIHRoaXMKKwkJCSMgY29udGV4dC4gIEhhdmluZyBhbiBlbXB0eSBkaWZmIHdpbGwgYWxsb3cgdGhlCisJCQkjIGJyYW5jaCBjcmVhdGlvbi4KKwkJCSMKKwkJfSBlbHNlIHsKKwkJCW9wZW4oVCwnLXwnLCdnaXQnLCdkaWZmLXRyZWUnLAorCQkJCSctcicsJy0tbmFtZS1zdGF0dXMnLCcteicsCisJCQkJJGJhc2UsJG5ldykgb3IgcmV0dXJuIHVuZGVmOworCQkJd2hpbGUgKDxUPikgeworCQkJCW15ICRvcCA9ICRfOworCQkJCWNob3AgJG9wOworCisJCQkJbXkgJHBhdGggPSA8VD47CisJCQkJY2hvcCAkcGF0aDsKKworCQkJCSR0aGlzX2RpZmZ7JHBhdGh9ID0gJG9wOworCQkJfQorCQkJY2xvc2UgVCBvciByZXR1cm4gdW5kZWY7CisJCX0KKwkJJGQgPSBcJXRoaXNfZGlmZjsKKwkJJGRpZmZfY2FjaGV7JGJhc2V9ID0gJGQ7CisJfQorCXJldHVybiAkZDsKK30KKworZGVueSAiTm8gR0lUX0RJUiBpbmhlcml0ZWQgZnJvbSBjYWxsZXIiIHVubGVzcyAkZ2l0X2RpcjsKK2RlbnkgIk5lZWQgYSByZWYgbmFtZSIgdW5sZXNzICRyZWY7CitkZW55ICJSZWZ1c2luZyBmdW5ueSByZWYgJHJlZiIgdW5sZXNzICRyZWYgPX4gcyxecmVmcy8sLDsKK2RlbnkgIkJhZCBvbGQgdmFsdWUgJG9sZCIgdW5sZXNzICRvbGQgPX4gL15bYS16MC05XXs0MH0kLzsKK2RlbnkgIkJhZCBuZXcgdmFsdWUgJG5ldyIgdW5sZXNzICRuZXcgPX4gL15bYS16MC05XXs0MH0kLzsKK2RlbnkgIkNhbm5vdCBkZXRlcm1pbmUgd2hvIHlvdSBhcmUuIiB1bmxlc3MgJHRoaXNfdXNlcjsKK2dyYW50ICJObyBjaGFuZ2UgcmVxdWVzdGVkLiIgaWYgJG9sZCBlcSAkbmV3OworCiskcmVwb3NpdG9yeV9uYW1lID0gRmlsZTo6U3BlYy0+cmVsMmFicygkZ2l0X2Rpcik7CiskcmVwb3NpdG9yeV9uYW1lID1+IG0sLyhbXi9dKykoPzpcLmdpdHwvXC5naXQpJCw7CiskcmVwb3NpdG9yeV9uYW1lID0gJDE7CitpbmZvICJVcGRhdGluZyBpbiAnJHJlcG9zaXRvcnlfbmFtZScuIjsKKworbXkgJG9wOworaWYgICAgKCRvbGQgPX4gL14wezQwfSQvKSB7ICRvcCA9ICdDJzsgfQorZWxzaWYgKCRuZXcgPX4gL14wezQwfSQvKSB7ICRvcCA9ICdEJzsgfQorZWxzZSAgICAgICAgICAgICAgICAgICAgICB7ICRvcCA9ICdSJzsgfQorCisjIFRoaXMgaXMgcmVhbGx5IGFuIHVwZGF0ZSAoZmFzdC1mb3J3YXJkKSBpZiB0aGUKKyMgbWVyZ2UgYmFzZSBvZiAkb2xkIGFuZCAkbmV3IGlzICRvbGQuCisjCiskb3AgPSAnVScgaWYgKCRvcCBlcSAnUicKKwkmJiAkcmVmID1+IG0sXmhlYWRzLywKKwkmJiAkb2xkIGVxIGdpdF92YWx1ZSgnbWVyZ2UtYmFzZScsJG9sZCwkbmV3KSk7CisKKyMgTG9hZCB0aGUgdXNlcidzIEFDTCBmaWxlLiBFeHBhbmQgZ3JvdXBzICh1c2VyLm1lbWJlcm9mKSBvbmUgbGV2ZWwuCit7CisJbXkgJWRhdGEgPSAoJ3VzZXIuY29tbWl0dGVyJyA9PiBbXSk7CisJcGFyc2VfY29uZmlnKFwlZGF0YSwkYWNsX2dpdCwkYWNsX2JyYW5jaCwiZXh0ZXJuYWwvJHJlcG9zaXRvcnlfbmFtZS5hY2wiKTsKKworCSVkYXRhID0gKAorCQkndXNlci5jb21taXR0ZXInID0+ICRkYXRheyd1c2VyLmNvbW1pdHRlcid9LAorCQkndXNlci5tZW1iZXJvZicgPT4gW10sCisJKTsKKwlwYXJzZV9jb25maWcoXCVkYXRhLCRhY2xfZ2l0LCRhY2xfYnJhbmNoLCJ1c2Vycy8kdGhpc191c2VyLmFjbCIpOworCisJJXVzZXJfY29tbWl0dGVyID0gbWFwIHskXyA9PiAkX30gQHskZGF0YXsndXNlci5jb21taXR0ZXInfX07CisJbXkgJHJ1bGVfa2V5ID0gInJlcG9zaXRvcnkuJHJlcG9zaXRvcnlfbmFtZS5hbGxvdyI7CisJbXkgJHJ1bGVzID0gJGRhdGF7JHJ1bGVfa2V5fSB8fCBbXTsKKworCWZvcmVhY2ggbXkgJGdyb3VwIChAeyRkYXRheyd1c2VyLm1lbWJlcm9mJ319KSB7CisJCW15ICVnOworCQlwYXJzZV9jb25maWcoXCVnLCRhY2xfZ2l0LCRhY2xfYnJhbmNoLCJncm91cHMvJGdyb3VwLmFjbCIpOworCQlteSAkZ3JvdXBfcnVsZXMgPSAkZ3skcnVsZV9rZXl9OworCQlwdXNoIEAkcnVsZXMsIEAkZ3JvdXBfcnVsZXMgaWYgJGdyb3VwX3J1bGVzOworCX0KKworUlVMRToKKwlmb3JlYWNoIChAJHJ1bGVzKSB7CisJCXdoaWxlICgvXCR7dXNlclwuKFthLXpdW2EtekEtWjAtOV0rKX0vKSB7CisJCQlteSAkayA9IGxjICQxOworCQkJbXkgJHYgPSAkZGF0YXsidXNlci4kayJ9OworCQkJbmV4dCBSVUxFIHVubGVzcyBkZWZpbmVkICR2OworCQkJbmV4dCBSVUxFIGlmIEAkdiAhPSAxOworCQkJbmV4dCBSVUxFIHVubGVzcyBkZWZpbmVkICR2LT5bMF07CisJCQlzL1wke3VzZXJcLiRrfS8kdi0+WzBdL2c7CisJCX0KKworCQlpZiAoL14oW0FNRCBdKylccytvZlxzKyhbXlxzXSspXHMrZm9yXHMrKFteXHNdKylccytkaWZmXHMrKFteXHNdKykkLykgeworCQkJbXkgKCRvcHMsICRwdGgsICRyZWYsICRic3QpID0gKCQxLCAkMiwgJDMsICQ0KTsKKwkJCSRvcHMgPX4gcy8gLy9nOworCQkJJHB0aCA9fiBzL1xcXFwvXFwvZzsKKwkJCSRyZWYgPX4gcy9cXFxcL1xcL2c7CisJCQlwdXNoIEBwYXRoX3J1bGVzLCBbJG9wcywgJHB0aCwgJHJlZiwgJGJzdF07CisJCX0gZWxzaWYgKC9eKFtBTUQgXSspXHMrb2ZccysoW15cc10rKVxzK2ZvclxzKyhbXlxzXSspJC8pIHsKKwkJCW15ICgkb3BzLCAkcHRoLCAkcmVmKSA9ICgkMSwgJDIsICQzKTsKKwkJCSRvcHMgPX4gcy8gLy9nOworCQkJJHB0aCA9fiBzL1xcXFwvXFwvZzsKKwkJCSRyZWYgPX4gcy9cXFxcL1xcL2c7CisJCQlwdXNoIEBwYXRoX3J1bGVzLCBbJG9wcywgJHB0aCwgJHJlZiwgJG9sZF07CisJCX0gZWxzaWYgKC9eKFtDRFJVIF0rKVxzK2ZvclxzKyhbXlxzXSspJC8pIHsKKwkJCW15ICRvcHMgPSAkMTsKKwkJCW15ICRyZWYgPSAkMjsKKwkJCSRvcHMgPX4gcy8gLy9nOworCQkJJHJlZiA9fiBzL1xcXFwvXFwvZzsKKwkJCXB1c2ggQGFsbG93X3J1bGVzLCBbJG9wcywgJHJlZl07CisJCX0gZWxzaWYgKC9eZm9yXHMrKFteXHNdKykkLykgeworCQkJIyBNZW50aW9uZWQsIGJ1dCBub3RoaW5nIGdyYW50ZWQ/CisJCX0gZWxzaWYgKC9eW15cc10rJC8pIHsKKwkJCXMvXFxcXC9cXC9nOworCQkJcHVzaCBAYWxsb3dfcnVsZXMsIFsnVScsICRfXTsKKwkJfQorCX0KK30KKworaWYgKCRvcCBuZSAnRCcpIHsKKwkkbmV3X3R5cGUgPSBnaXRfdmFsdWUoJ2NhdC1maWxlJywnLXQnLCRuZXcpOworCisJaWYgKCRyZWYgPX4gbSxeaGVhZHMvLCkgeworCQlkZW55ICIkcmVmIG11c3QgYmUgYSBjb21taXQuIiB1bmxlc3MgJG5ld190eXBlIGVxICdjb21taXQnOworCX0gZWxzaWYgKCRyZWYgPX4gbSxedGFncy8sKSB7CisJCWRlbnkgIiRyZWYgbXVzdCBiZSBhbiBhbm5vdGF0ZWQgdGFnLiIgdW5sZXNzICRuZXdfdHlwZSBlcSAndGFnJzsKKwl9CisKKwljaGVja19jb21taXR0ZXJzIChhbGxfbmV3X2NvbW1pdHRlcnMpOworCWNoZWNrX2NvbW1pdHRlcnMgKGFsbF9uZXdfdGFnZ2VycykgaWYgJG5ld190eXBlIGVxICd0YWcnOworfQorCitpbmZvICIkdGhpc191c2VyIHdhbnRzICRvcCBmb3IgJHJlZiI7Citmb3JlYWNoIG15ICRhY2xfZW50cnkgKEBhbGxvd19ydWxlcykgeworCW15ICgkYWNsX29wcywgJGFjbF9uKSA9IEAkYWNsX2VudHJ5OworCW5leHQgdW5sZXNzICRhY2xfb3BzID1+IC9eW0NEUlVdKyQvOyAjIFVoaC4uLi4gc2hvdWxkbid0IGhhcHBlbi4KKwluZXh0IHVubGVzcyAkYWNsX247CisJbmV4dCB1bmxlc3MgJG9wID1+IC9eWyRhY2xfb3BzXSQvOworCW5leHQgdW5sZXNzIG1hdGNoX3N0cmluZyAkYWNsX24sICRyZWY7CisKKwkjIERvbid0IHRlc3QgcGF0aCBydWxlcyBvbiBicmFuY2ggZGVsZXRlcy4KKwkjCisJZ3JhbnQgIkFsbG93ZWQgYnk6ICRhY2xfb3BzIGZvciAkYWNsX24iIGlmICRvcCBlcSAnRCc7CisKKwkjIEFnZ3JlZ2F0ZSBtYXRjaGluZyBwYXRoIHJ1bGVzOyBhbGxvdyBpZiB0aGVyZSBhcmVuJ3QKKwkjIGFueSBtYXRjaGluZyB0aGlzIHJlZi4KKwkjCisJbXkgJXByOworCWZvcmVhY2ggbXkgJHBfZW50cnkgKEBwYXRoX3J1bGVzKSB7CisJCW15ICgkcF9vcHMsICRwX24sICRwX3JlZiwgJHBfYnN0KSA9IEAkcF9lbnRyeTsKKwkJbmV4dCB1bmxlc3MgJHBfcmVmOworCQlwdXNoIEB7JHByeyRwX2JzdH19LCAkcF9lbnRyeSBpZiBtYXRjaF9zdHJpbmcgJHBfcmVmLCAkcmVmOworCX0KKwlncmFudCAiQWxsb3dlZCBieTogJGFjbF9vcHMgZm9yICRhY2xfbiIgdW5sZXNzICVwcjsKKworCSMgQWxsb3cgb25seSBpZiBhbGwgY2hhbmdlcyBhZ2FpbnN0IGEgc2luZ2xlIGJhc2UgYXJlCisJIyBhbGxvd2VkIGJ5IGZpbGUgcGF0aCBydWxlcy4KKwkjCisJbXkgQGJhZDsKKwlmb3JlYWNoIG15ICRwX2JzdCAoa2V5cyAlcHIpIHsKKwkJbXkgJGRpZmZfcmVmID0gbG9hZF9kaWZmICRwX2JzdDsKKwkJZGVueSAiQ2Fubm90IGRpZmZlcmVuY2UgdHJlZXMuIiB1bmxlc3MgcmVmICRkaWZmX3JlZjsKKworCQlteSAlZmQgPSAlJGRpZmZfcmVmOworCQlmb3JlYWNoIG15ICRwX2VudHJ5IChAeyRwcnskcF9ic3R9fSkgeworCQkJbXkgKCRwX29wcywgJHBfbiwgJHBfcmVmLCAkcF9ic3QpID0gQCRwX2VudHJ5OworCQkJbmV4dCB1bmxlc3MgJHBfb3BzID1+IC9eW0FNRF0rJC87CisJCQluZXh0IHVubGVzcyAkcF9uOworCisJCQlmb3JlYWNoIG15ICRmX24gKGtleXMgJWZkKSB7CisJCQkJbXkgJGZfb3AgPSAkZmR7JGZfbn07CisJCQkJbmV4dCB1bmxlc3MgJGZfb3A7CisJCQkJbmV4dCB1bmxlc3MgJGZfb3AgPX4gL15bJHBfb3BzXSQvOworCQkJCWRlbGV0ZSAkZmR7JGZfbn0gaWYgbWF0Y2hfc3RyaW5nICRwX24sICRmX247CisJCQl9CisJCQlsYXN0IHVubGVzcyAlZmQ7CisJCX0KKworCQlpZiAoJWZkKSB7CisJCQlwdXNoIEBiYWQsIFskcF9ic3QsIFwlZmRdOworCQl9IGVsc2UgeworCQkJIyBBbGwgY2hhbmdlcyByZWxhdGl2ZSB0byAkcF9ic3Qgd2VyZSBhbGxvd2VkLgorCQkJIworCQkJZ3JhbnQgIkFsbG93ZWQgYnk6ICRhY2xfb3BzIGZvciAkYWNsX24gZGlmZiAkcF9ic3QiOworCQl9CisJfQorCisJZm9yZWFjaCBteSAkYmFkX3JlZiAoQGJhZCkgeworCQlteSAoJHBfYnN0LCAkZmQpID0gQCRiYWRfcmVmOworCQlwcmludCBTVERFUlIgIlxuIjsKKwkJcHJpbnQgU1RERVJSICJOb3QgYWxsb3dlZCB0byBtYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlczpcbiI7CisJCXByaW50IFNUREVSUiAiKGJhc2U6ICRwX2JzdClcbiI7CisJCWZvcmVhY2ggbXkgJGZfbiAoc29ydCBrZXlzICUkZmQpIHsKKwkJCXByaW50IFNUREVSUiAiICAkZmQtPnskZl9ufSAkZl9uXG4iOworCQl9CisJfQorCWRlbnkgIllvdSBhcmUgbm90IHBlcm1pdHRlZCB0byAkb3AgJHJlZiI7Cit9CitjbG9zZSBBOworZGVueSAiWW91IGFyZSBub3QgcGVybWl0dGVkIHRvICRvcCAkcmVmIjsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L01ha2VmaWxlIGIvY29udHJpYi9tdy10by1naXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VkNzI4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L01ha2VmaWxlCkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyCisjICAgICBDaGFybGVzIFJvdXNzZWwgPGNoYXJsZXMucm91c3NlbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBDYXRoZWJyYXMgPHNpbW9uLmNhdGhlYnJhc0BlbnNpbWFnLmltYWcuZnI+CisjICAgICBKdWxpZW4gS2hheWF0IDxqdWxpZW4ua2hheWF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEd1aWxsYXVtZSBTYXNkeSA8Z3VpbGxhdW1lLnNhc2R5QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIFBlcnJhdCA8c2ltb24ucGVycmF0QGVuc2ltYWcuaW1hZy5mcj4KKyMKKyMjIEJ1aWxkIGdpdC1yZW1vdGUtbWVkaWF3aWtpCisKKy1pbmNsdWRlIC4uLy4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vLi4vY29uZmlnLm1haworCitpZm5kZWYgUEVSTF9QQVRICisJUEVSTF9QQVRIID0gL3Vzci9iaW4vcGVybAorZW5kaWYKK2lmbmRlZiBnaXRleGVjZGlyCisJZ2l0ZXhlY2RpciA9ICQoc2hlbGwgZ2l0IC0tZXhlYy1wYXRoKQorZW5kaWYKKworUEVSTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQRVJMX1BBVEgpKQorZ2l0ZXhlY2Rpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0ZXhlY2RpcikpCitTQ1JJUFQgPSBnaXQtcmVtb3RlLW1lZGlhd2lraQorCisuUEhPTlk6IGluc3RhbGwgaGVscCBkb2MgdGVzdCBjbGVhbgorCitoZWxwOgorCUBlY2hvICdUaGlzIGlzIHRoZSBoZWxwIHRhcmdldCBvZiB0aGUgTWFrZWZpbGUuIEN1cnJlbnQgY29uZmlndXJhdGlvbjonCisJQGVjaG8gJyAgZ2l0ZXhlY2RpciA9ICQoZ2l0ZXhlY2Rpcl9TUSknCisJQGVjaG8gJyAgUEVSTF9QQVRIID0gJChQRVJMX1BBVEhfU1EpJworCUBlY2hvICdSdW4gIiQoTUFLRSkgaW5zdGFsbCIgdG8gaW5zdGFsbCAkKFNDUklQVCkgaW4gZ2l0ZXhlY2RpcicKKwlAZWNobyAnUnVuICIkKE1BS0UpIHRlc3QiIHRvIHJ1biB0aGUgdGVzdHN1aXRlJworCitpbnN0YWxsOgorCXNlZCAtZSAnMXN8IyEuKi9wZXJsfCMhJChQRVJMX1BBVEhfU1EpfCcgJChTQ1JJUFQpIFwKKwkJPiAnJChnaXRleGVjZGlyX1NRKS8kKFNDUklQVCknCisJY2htb2QgK3ggJyQoZ2l0ZXhlY2RpcikvJChTQ1JJUFQpJworCitkb2M6CisJQGVjaG8gJ1NvcnJ5LCAibWFrZSBkb2MiIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yICQoU0NSSVBUKScKKwordGVzdDoKKwkkKE1BS0UpIC1DIHQvIHRlc3QKKworY2xlYW46CisJJChSTSkgJyQoZ2l0ZXhlY2RpcikvJChTQ1JJUFQpJworCSQoTUFLRSkgLUMgdC8gY2xlYW4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpIGIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjg1NTVkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpCkBAIC0wLDAgKzEsMTM1MCBAQAorIyEgL3Vzci9iaW4vcGVybAorCisjIENvcHlyaWdodCAoQykgMjAxMQorIyAgICAgSsOpcsOpbWllIE5pa2FlcyA8amVyZW1pZS5uaWthZXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgQXJuYXVkIExhY3VyaWUgPGFybmF1ZC5sYWN1cmllQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIENsYWlyZSBGb3Vzc2UgPGNsYWlyZS5mb3Vzc2VAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgRGF2aWQgQW1vdXlhbCA8ZGF2aWQuYW1vdXlhbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBNYXR0aGlldSBNb3kgPG1hdHRoaWV1Lm1veUBncmVub2JsZS1pbnAuZnI+CisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjIEdhdGV3YXkgYmV0d2VlbiBHaXQgYW5kIE1lZGlhV2lraS4KKyMgRG9jdW1lbnRhdGlvbiAmIGJ1Z3RyYWNrZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3kvR2l0LU1lZGlhd2lraS8KKwordXNlIHN0cmljdDsKK3VzZSBNZWRpYVdpa2k6OkFQSTsKK3VzZSBEYXRlVGltZTo6Rm9ybWF0OjpJU084NjAxOworCisjIEJ5IGRlZmF1bHQsIHVzZSBVVEYtOCB0byBjb21tdW5pY2F0ZSB3aXRoIEdpdCBhbmQgdGhlIHVzZXIKK2Jpbm1vZGUgU1RERVJSLCAiOnV0ZjgiOworYmlubW9kZSBTVERPVVQsICI6dXRmOCI7CisKK3VzZSBVUkk6OkVzY2FwZTsKK3VzZSBJUEM6Ok9wZW4yOworCit1c2Ugd2FybmluZ3M7CisKKyMgTWVkaWF3aWtpIGZpbGVuYW1lcyBjYW4gY29udGFpbiBmb3J3YXJkIHNsYXNoZXMuIFRoaXMgdmFyaWFibGUgZGVjaWRlcyBieSB3aGljaCBwYXR0ZXJuIHRoZXkgc2hvdWxkIGJlIHJlcGxhY2VkCit1c2UgY29uc3RhbnQgU0xBU0hfUkVQTEFDRU1FTlQgPT4gIiUyRiI7CisKKyMgSXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRlbGV0ZSBwYWdlcyAobWF5IHJlcXVpcmUgc29tZQorIyBwcml2aWxlZGdlcykuIERlbGV0ZWQgcGFnZXMgYXJlIHJlcGxhY2VkIHdpdGggdGhpcyBjb250ZW50LgordXNlIGNvbnN0YW50IERFTEVURURfQ09OVEVOVCA9PiAiW1tDYXRlZ29yeTpEZWxldGVkXV1cbiI7CisKKyMgSXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIGVtcHR5IHBhZ2VzLiBOZXcgZW1wdHkgZmlsZXMgaW4gR2l0IGFyZQorIyBzZW50IHdpdGggdGhpcyBjb250ZW50IGluc3RlYWQuCit1c2UgY29uc3RhbnQgRU1QVFlfQ09OVEVOVCA9PiAiPCEtLSBlbXB0eSBwYWdlIC0tPlxuIjsKKworIyB1c2VkIHRvIHJlZmxlY3QgZmlsZSBjcmVhdGlvbiBvciBkZWxldGlvbiBpbiBkaWZmLgordXNlIGNvbnN0YW50IE5VTExfU0hBMSA9PiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI7CisKKyMgVXNlZCBvbiBHaXQncyBzaWRlIHRvIHJlZmxlY3QgZW1wdHkgZWRpdCBtZXNzYWdlcyBvbiB0aGUgd2lraQordXNlIGNvbnN0YW50IEVNUFRZX01FU1NBR0UgPT4gJypFbXB0eSBNZWRpYVdpa2kgTWVzc2FnZSonOworCitteSAkcmVtb3RlbmFtZSA9ICRBUkdWWzBdOworbXkgJHVybCA9ICRBUkdWWzFdOworCisjIEFjY2VwdCBib3RoIHNwYWNlLXNlcGFyYXRlZCBhbmQgbXVsdGlwbGUga2V5cyBpbiBjb25maWcgZmlsZS4KKyMgU3BhY2VzIHNob3VsZCBiZSB3cml0dGVuIGFzIF8gYW55d2F5IGJlY2F1c2Ugd2UnbGwgdXNlIGNob21wLgorbXkgQHRyYWNrZWRfcGFnZXMgPSBzcGxpdCgvWyBcbl0vLCBydW5fZ2l0KCJjb25maWcgLS1nZXQtYWxsIHJlbW90ZS4iLiAkcmVtb3RlbmFtZSAuIi5wYWdlcyIpKTsKK2Nob21wKEB0cmFja2VkX3BhZ2VzKTsKKworIyBKdXN0IGxpa2UgQHRyYWNrZWRfcGFnZXMsIGJ1dCBmb3IgTWVkaWFXaWtpIGNhdGVnb3JpZXMuCitteSBAdHJhY2tlZF9jYXRlZ29yaWVzID0gc3BsaXQoL1sgXG5dLywgcnVuX2dpdCgiY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuIi4gJHJlbW90ZW5hbWUgLiIuY2F0ZWdvcmllcyIpKTsKK2Nob21wKEB0cmFja2VkX2NhdGVnb3JpZXMpOworCisjIEltcG9ydCBtZWRpYSBmaWxlcyBvbiBwdWxsCitteSAkaW1wb3J0X21lZGlhID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IC0tYm9vbCByZW1vdGUuIi4gJHJlbW90ZW5hbWUgLiIubWVkaWFpbXBvcnQiKTsKK2Nob21wKCRpbXBvcnRfbWVkaWEpOworJGltcG9ydF9tZWRpYSA9ICgkaW1wb3J0X21lZGlhIGVxICJ0cnVlIik7CisKKyMgRXhwb3J0IG1lZGlhIGZpbGVzIG9uIHB1c2gKK215ICRleHBvcnRfbWVkaWEgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgLS1ib29sIHJlbW90ZS4iLiAkcmVtb3RlbmFtZSAuIi5tZWRpYWV4cG9ydCIpOworY2hvbXAoJGV4cG9ydF9tZWRpYSk7CiskZXhwb3J0X21lZGlhID0gISgkZXhwb3J0X21lZGlhIGVxICJmYWxzZSIpOworCitteSAkd2lraV9sb2dpbiA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCByZW1vdGUuIi4gJHJlbW90ZW5hbWUgLiIubXdMb2dpbiIpOworIyBOb3RlOiBtd1Bhc3N3b3JkIGlzIGRpc2NvdXJyYWdlZC4gVXNlIHRoZSBjcmVkZW50aWFsIHN5c3RlbSBpbnN0ZWFkLgorbXkgJHdpa2lfcGFzc3dkID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4iLiAkcmVtb3RlbmFtZSAuIi5td1Bhc3N3b3JkIik7CitteSAkd2lraV9kb21haW4gPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiIuICRyZW1vdGVuYW1lIC4iLm13RG9tYWluIik7CitjaG9tcCgkd2lraV9sb2dpbik7CitjaG9tcCgkd2lraV9wYXNzd2QpOworY2hvbXAoJHdpa2lfZG9tYWluKTsKKworIyBJbXBvcnQgb25seSBsYXN0IHJldmlzaW9ucyAoYm90aCBmb3IgY2xvbmUgYW5kIGZldGNoKQorbXkgJHNoYWxsb3dfaW1wb3J0ID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IC0tYm9vbCByZW1vdGUuIi4gJHJlbW90ZW5hbWUgLiIuc2hhbGxvdyIpOworY2hvbXAoJHNoYWxsb3dfaW1wb3J0KTsKKyRzaGFsbG93X2ltcG9ydCA9ICgkc2hhbGxvd19pbXBvcnQgZXEgInRydWUiKTsKKworIyBGZXRjaCAoY2xvbmUgYW5kIHB1bGwpIGJ5IHJldmlzaW9ucyBpbnN0ZWFkIG9mIGJ5IHBhZ2VzLiBUaGlzIGJlaGF2aW9yCisjIGlzIG1vcmUgZWZmaWNpZW50IHdoZW4gd2UgaGF2ZSBhIHdpa2kgd2l0aCBsb3RzIG9mIHBhZ2VzIGFuZCB3ZSBmZXRjaAorIyB0aGUgcmV2aXNpb25zIHF1aXRlIG9mdGVuIHNvIHRoYXQgdGhleSBjb25jZXJuIG9ubHkgZmV3IHBhZ2VzLgorIyBQb3NzaWJsZSB2YWx1ZXM6CisjIC0gYnlfcmV2OiBwZXJmb3JtIG9uZSBxdWVyeSBwZXIgbmV3IHJldmlzaW9uIG9uIHRoZSByZW1vdGUgd2lraQorIyAtIGJ5X3BhZ2U6IHF1ZXJ5IGVhY2ggdHJhY2tlZCBwYWdlIGZvciBuZXcgcmV2aXNpb24KK215ICRmZXRjaF9zdHJhdGVneSA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCByZW1vdGUuJHJlbW90ZW5hbWUuZmV0Y2hTdHJhdGVneSIpOwordW5sZXNzICgkZmV0Y2hfc3RyYXRlZ3kpIHsKKwkkZmV0Y2hfc3RyYXRlZ3kgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgbWVkaWF3aWtpLmZldGNoU3RyYXRlZ3kiKTsKK30KK2Nob21wKCRmZXRjaF9zdHJhdGVneSk7Cit1bmxlc3MgKCRmZXRjaF9zdHJhdGVneSkgeworCSRmZXRjaF9zdHJhdGVneSA9ICJieV9wYWdlIjsKK30KKworIyBEdW1iIHB1c2g6IGRvbid0IHVwZGF0ZSBub3RlcyBhbmQgbWVkaWF3aWtpIHJlZiB0byByZWZsZWN0IHRoZSBsYXN0IHB1c2guCisjCisjIENvbmZpZ3VyYWJsZSB3aXRoIG1lZGlhd2lraS5kdW1iUHVzaCwgb3IgcGVyLXJlbW90ZSB3aXRoCisjIHJlbW90ZS48cmVtb3RlbmFtZT4uZHVtYlB1c2guCisjCisjIFRoaXMgbWVhbnMgdGhlIHVzZXIgd2lsbCBoYXZlIHRvIHJlLWltcG9ydCB0aGUganVzdC1wdXNoZWQKKyMgcmV2aXNpb25zLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBtZWFucyB0aGF0IHRoZSBHaXQgcmV2aXNpb25zCisjIGNvcnJlc3BvbmRpbmcgdG8gTWVkaWFXaWtpIHJldmlzaW9ucyBhcmUgYWxsIGltcG9ydGVkIGZyb20gdGhlIHdpa2ksCisjIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IHdlcmUgaW5pdGlhbGx5IGNyZWF0ZWQgaW4gR2l0IG9yIGZyb20gdGhlCisjIHdlYiBpbnRlcmZhY2UsIGhlbmNlIGFsbCB1c2VycyB3aWxsIGdldCB0aGUgc2FtZSBoaXN0b3J5IChpLmUuIGlmCisjIHRoZSBwdXNoIGZyb20gR2l0IHRvIE1lZGlhV2lraSBsb3NlcyBzb21lIGluZm9ybWF0aW9uLCBldmVyeWJvZHkKKyMgd2lsbCBnZXQgdGhlIGhpc3Rvcnkgd2l0aCBpbmZvcm1hdGlvbiBsb3N0KS4gSWYgdGhlIGltcG9ydCBpcworIyBkZXRlcm1pbmlzdGljLCB0aGlzIG1lYW5zIGV2ZXJ5Ym9keSBnZXRzIHRoZSBzYW1lIHNoYTEgZm9yIGVhY2gKKyMgTWVkaWFXaWtpIHJldmlzaW9uLgorbXkgJGR1bWJfcHVzaCA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCAtLWJvb2wgcmVtb3RlLiRyZW1vdGVuYW1lLmR1bWJQdXNoIik7Cit1bmxlc3MgKCRkdW1iX3B1c2gpIHsKKwkkZHVtYl9wdXNoID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IC0tYm9vbCBtZWRpYXdpa2kuZHVtYlB1c2giKTsKK30KK2Nob21wKCRkdW1iX3B1c2gpOworJGR1bWJfcHVzaCA9ICgkZHVtYl9wdXNoIGVxICJ0cnVlIik7CisKK215ICR3aWtpX25hbWUgPSAkdXJsOworJHdpa2lfbmFtZSA9fiBzL1teXC9dKjpcL1wvLy87CisjIElmIFVSTCBpcyBsaWtlIGh0dHA6Ly91c2VyOnBhc3N3b3JkQGV4YW1wbGUuY29tLywgd2UgY2xlYXJseSBkb24ndAorIyB3YW50IHRoZSBwYXNzd29yZCBpbiAkd2lraV9uYW1lLiBXaGlsZSB3ZSdyZSB0aGVyZSwgYWxzbyByZW1vdmUgdXNlcgorIyBhbmQgJ0AnIHNpZ24sIHRvIGF2b2lkIGF1dGhvciBsaWtlIE1XVXNlckBIVFRQVXNlckBob3N0LmNvbQorJHdpa2lfbmFtZSA9fiBzL14uKkAvLzsKKworIyBDb21tYW5kcyBwYXJzZXIKK215ICRlbnRyeTsKK215IEBjbWQ7Cit3aGlsZSAoPFNURElOPikgeworCWNob21wOworCUBjbWQgPSBzcGxpdCgvIC8pOworCWlmIChkZWZpbmVkKCRjbWRbMF0pKSB7CisJCSMgTGluZSBub3QgYmxhbmsKKwkJaWYgKCRjbWRbMF0gZXEgImNhcGFiaWxpdGllcyIpIHsKKwkJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBjYXBhYmlsaXRpZXMiKSB1bmxlc3MgKCFkZWZpbmVkKCRjbWRbMV0pKTsKKwkJCW13X2NhcGFiaWxpdGllcygpOworCQl9IGVsc2lmICgkY21kWzBdIGVxICJsaXN0IikgeworCQkJZGllKCJUb28gbWFueSBhcmd1bWVudHMgZm9yIGxpc3QiKSB1bmxlc3MgKCFkZWZpbmVkKCRjbWRbMl0pKTsKKwkJCW13X2xpc3QoJGNtZFsxXSk7CisJCX0gZWxzaWYgKCRjbWRbMF0gZXEgImltcG9ydCIpIHsKKwkJCWRpZSgiSW52YWxpZCBhcmd1bWVudHMgZm9yIGltcG9ydCIpIHVubGVzcyAoJGNtZFsxXSBuZSAiIiAmJiAhZGVmaW5lZCgkY21kWzJdKSk7CisJCQltd19pbXBvcnQoJGNtZFsxXSk7CisJCX0gZWxzaWYgKCRjbWRbMF0gZXEgIm9wdGlvbiIpIHsKKwkJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBvcHRpb24iKSB1bmxlc3MgKCRjbWRbMV0gbmUgIiIgJiYgJGNtZFsyXSBuZSAiIiAmJiAhZGVmaW5lZCgkY21kWzNdKSk7CisJCQltd19vcHRpb24oJGNtZFsxXSwkY21kWzJdKTsKKwkJfSBlbHNpZiAoJGNtZFswXSBlcSAicHVzaCIpIHsKKwkJCW13X3B1c2goJGNtZFsxXSk7CisJCX0gZWxzZSB7CisJCQlwcmludCBTVERFUlIgIlVua25vd24gY29tbWFuZC4gQWJvcnRpbmcuLi5cbiI7CisJCQlsYXN0OworCQl9CisJfSBlbHNlIHsKKwkJIyBibGFuayBsaW5lOiB3ZSBzaG91bGQgdGVybWluYXRlCisJCWxhc3Q7CisJfQorCisJQkVHSU4geyAkfCA9IDEgfSAjIGZsdXNoIFNURE9VVCwgdG8gbWFrZSBzdXJlIHRoZSBwcmV2aW91cworCQkJICMgY29tbWFuZCBpcyBmdWxseSBwcm9jZXNzZWQuCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMgY3JlZGVudGlhbCBBUEkgbWFuYWdlbWVudCAoZ2VuZXJpYyBmdW5jdGlvbnMpCisKK3N1YiBjcmVkZW50aWFsX3JlYWQgeworCW15ICVjcmVkZW50aWFsOworCW15ICRyZWFkZXIgPSBzaGlmdDsKKwlteSAkb3AgPSBzaGlmdDsKKwl3aGlsZSAoPCRyZWFkZXI+KSB7CisJCW15ICgka2V5LCAkdmFsdWUpID0gLyhbXj1dKik9KC4qKS87CisJCWlmIChub3QgZGVmaW5lZCAka2V5KSB7CisJCQlkaWUgIkVSUk9SIHJlY2VpdmluZyByZXNwb25zZSBmcm9tIGdpdCBjcmVkZW50aWFsICRvcDpcbiRfXG4iOworCQl9CisJCSRjcmVkZW50aWFseyRrZXl9ID0gJHZhbHVlOworCX0KKwlyZXR1cm4gJWNyZWRlbnRpYWw7Cit9CisKK3N1YiBjcmVkZW50aWFsX3dyaXRlIHsKKwlteSAkY3JlZGVudGlhbCA9IHNoaWZ0OworCW15ICR3cml0ZXIgPSBzaGlmdDsKKwkjIHVybCBvdmVyd3JpdGVzIG90aGVyIGZpZWxkcywgc28gaXQgbXVzdCBjb21lIGZpcnN0CisJcHJpbnQgJHdyaXRlciAidXJsPSRjcmVkZW50aWFsLT57dXJsfVxuIiBpZiBleGlzdHMgJGNyZWRlbnRpYWwtPnt1cmx9OworCXdoaWxlIChteSAoJGtleSwgJHZhbHVlKSA9IGVhY2goJSRjcmVkZW50aWFsKSApIHsKKwkJaWYgKGxlbmd0aCAkdmFsdWUgJiYgJGtleSBuZSAndXJsJykgeworCQkJcHJpbnQgJHdyaXRlciAiJGtleT0kdmFsdWVcbiI7CisJCX0KKwl9Cit9CisKK3N1YiBjcmVkZW50aWFsX3J1biB7CisJbXkgJG9wID0gc2hpZnQ7CisJbXkgJGNyZWRlbnRpYWwgPSBzaGlmdDsKKwlteSAkcGlkID0gb3BlbjIobXkgJHJlYWRlciwgbXkgJHdyaXRlciwgImdpdCBjcmVkZW50aWFsICRvcCIpOworCWNyZWRlbnRpYWxfd3JpdGUoJGNyZWRlbnRpYWwsICR3cml0ZXIpOworCXByaW50ICR3cml0ZXIgIlxuIjsKKwljbG9zZSgkd3JpdGVyKTsKKworCWlmICgkb3AgZXEgImZpbGwiKSB7CisJCSUkY3JlZGVudGlhbCA9IGNyZWRlbnRpYWxfcmVhZCgkcmVhZGVyLCAkb3ApOworCX0gZWxzZSB7CisJCWlmICg8JHJlYWRlcj4pIHsKKwkJCWRpZSAiRVJST1Igd2hpbGUgcnVubmluZyBnaXQgY3JlZGVudGlhbCAkb3A6XG4kXyI7CisJCX0KKwl9CisJY2xvc2UoJHJlYWRlcik7CisJd2FpdHBpZCgkcGlkLCAwKTsKKwlteSAkY2hpbGRfZXhpdF9zdGF0dXMgPSAkPyA+PiA4OworCWlmICgkY2hpbGRfZXhpdF9zdGF0dXMgIT0gMCkgeworCQlkaWUgIidnaXQgY3JlZGVudGlhbCAkb3AnIGZhaWxlZCB3aXRoIGNvZGUgJGNoaWxkX2V4aXRfc3RhdHVzLiI7CisJfQorfQorCisjIE1lZGlhV2lraSBBUEkgaW5zdGFuY2UsIGNyZWF0ZWQgbGF6aWx5LgorbXkgJG1lZGlhd2lraTsKKworc3ViIG13X2Nvbm5lY3RfbWF5YmUgeworCWlmICgkbWVkaWF3aWtpKSB7CisJCXJldHVybjsKKwl9CisJJG1lZGlhd2lraSA9IE1lZGlhV2lraTo6QVBJLT5uZXc7CisJJG1lZGlhd2lraS0+e2NvbmZpZ30tPnthcGlfdXJsfSA9ICIkdXJsL2FwaS5waHAiOworCWlmICgkd2lraV9sb2dpbikgeworCQlteSAlY3JlZGVudGlhbCA9ICh1cmwgPT4gJHVybCk7CisJCSRjcmVkZW50aWFse3VzZXJuYW1lfSA9ICR3aWtpX2xvZ2luOworCQkkY3JlZGVudGlhbHtwYXNzd29yZH0gPSAkd2lraV9wYXNzd2Q7CisJCWNyZWRlbnRpYWxfcnVuKCJmaWxsIiwgXCVjcmVkZW50aWFsKTsKKwkJbXkgJHJlcXVlc3QgPSB7bGduYW1lID0+ICRjcmVkZW50aWFse3VzZXJuYW1lfSwKKwkJCSAgICAgICBsZ3Bhc3N3b3JkID0+ICRjcmVkZW50aWFse3Bhc3N3b3JkfSwKKwkJCSAgICAgICBsZ2RvbWFpbiA9PiAkd2lraV9kb21haW59OworCQlpZiAoJG1lZGlhd2lraS0+bG9naW4oJHJlcXVlc3QpKSB7CisJCQljcmVkZW50aWFsX3J1bigiYXBwcm92ZSIsIFwlY3JlZGVudGlhbCk7CisJCQlwcmludCBTVERFUlIgIkxvZ2dlZCBpbiBtZWRpYXdpa2kgdXNlciBcIiRjcmVkZW50aWFse3VzZXJuYW1lfVwiLlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50IFNUREVSUiAiRmFpbGVkIHRvIGxvZyBpbiBtZWRpYXdpa2kgdXNlciBcIiRjcmVkZW50aWFse3VzZXJuYW1lfVwiIG9uICR1cmxcbiI7CisJCQlwcmludCBTVERFUlIgIiAgKGVycm9yICIgLgorCQkJCSRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuICc6ICcgLgorCQkJCSRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuICIpXG4iOworCQkJY3JlZGVudGlhbF9ydW4oInJlamVjdCIsIFwlY3JlZGVudGlhbCk7CisJCQlleGl0IDE7CisJCX0KKwl9Cit9CisKKyMjIEZ1bmN0aW9ucyBmb3IgbGlzdGluZyBwYWdlcyBvbiB0aGUgcmVtb3RlIHdpa2kKK3N1YiBnZXRfbXdfdHJhY2tlZF9wYWdlcyB7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisJZ2V0X213X3BhZ2VfbGlzdChcQHRyYWNrZWRfcGFnZXMsICRwYWdlcyk7Cit9CisKK3N1YiBnZXRfbXdfcGFnZV9saXN0IHsKKwlteSAkcGFnZV9saXN0ID0gc2hpZnQ7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisJbXkgQHNvbWVfcGFnZXMgPSBAJHBhZ2VfbGlzdDsKKwl3aGlsZSAoQHNvbWVfcGFnZXMpIHsKKwkJbXkgJGxhc3QgPSA1MDsKKwkJaWYgKCQjc29tZV9wYWdlcyA8ICRsYXN0KSB7CisJCQkkbGFzdCA9ICQjc29tZV9wYWdlczsKKwkJfQorCQlteSBAc2xpY2UgPSBAc29tZV9wYWdlc1swLi4kbGFzdF07CisJCWdldF9td19maXJzdF9wYWdlcyhcQHNsaWNlLCAkcGFnZXMpOworCQlAc29tZV9wYWdlcyA9IEBzb21lX3BhZ2VzWzUxLi4kI3NvbWVfcGFnZXNdOworCX0KK30KKworc3ViIGdldF9td190cmFja2VkX2NhdGVnb3JpZXMgeworCW15ICRwYWdlcyA9IHNoaWZ0OworCWZvcmVhY2ggbXkgJGNhdGVnb3J5IChAdHJhY2tlZF9jYXRlZ29yaWVzKSB7CisJCWlmIChpbmRleCgkY2F0ZWdvcnksICc6JykgPCAwKSB7CisJCQkjIE1lZGlhd2lraSByZXF1aXJlcyB0aGUgQ2F0ZWdvcnkKKwkJCSMgcHJlZml4LCBidXQgbGV0J3Mgbm90IGZvcmNlIHRoZSB1c2VyCisJCQkjIHRvIHNwZWNpZnkgaXQuCisJCQkkY2F0ZWdvcnkgPSAiQ2F0ZWdvcnk6IiAuICRjYXRlZ29yeTsKKwkJfQorCQlteSAkbXdfcGFnZXMgPSAkbWVkaWF3aWtpLT5saXN0KCB7CisJCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJCWxpc3QgPT4gJ2NhdGVnb3J5bWVtYmVycycsCisJCQljbXRpdGxlID0+ICRjYXRlZ29yeSwKKwkJCWNtbGltaXQgPT4gJ21heCcgfSApCisJCQl8fCBkaWUgJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4gJzogJworCQkJCS4gJG1lZGlhd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9OworCQlmb3JlYWNoIG15ICRwYWdlIChAeyRtd19wYWdlc30pIHsKKwkJCSRwYWdlcy0+eyRwYWdlLT57dGl0bGV9fSA9ICRwYWdlOworCQl9CisJfQorfQorCitzdWIgZ2V0X213X2FsbF9wYWdlcyB7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisJIyBObyB1c2VyLXByb3ZpZGVkIGxpc3QsIGdldCB0aGUgbGlzdCBvZiBwYWdlcyBmcm9tIHRoZSBBUEkuCisJbXkgJG13X3BhZ2VzID0gJG1lZGlhd2lraS0+bGlzdCh7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQlsaXN0ID0+ICdhbGxwYWdlcycsCisJCWFwbGltaXQgPT4gJ21heCcKKwl9KTsKKwlpZiAoIWRlZmluZWQoJG13X3BhZ2VzKSkgeworCQlwcmludCBTVERFUlIgImZhdGFsOiBjb3VsZCBub3QgZ2V0IHRoZSBsaXN0IG9mIHdpa2kgcGFnZXMuXG4iOworCQlwcmludCBTVERFUlIgImZhdGFsOiAnJHVybCcgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgbWVkaWF3aWtpXG4iOworCQlwcmludCBTVERFUlIgImZhdGFsOiBtYWtlIHN1cmUgJyR1cmwvYXBpLnBocCcgaXMgYSB2YWxpZCBwYWdlLlxuIjsKKwkJZXhpdCAxOworCX0KKwlmb3JlYWNoIG15ICRwYWdlIChAeyRtd19wYWdlc30pIHsKKwkJJHBhZ2VzLT57JHBhZ2UtPnt0aXRsZX19ID0gJHBhZ2U7CisJfQorfQorCisjIHF1ZXJpZXMgdGhlIHdpa2kgZm9yIGEgc2V0IG9mIHBhZ2VzLiBNZWFudCB0byBiZSB1c2VkIHdpdGhpbiBhIGxvb3AKKyMgcXVlcnlpbmcgdGhlIHdpa2kgZm9yIHNsaWNlcyBvZiBwYWdlIGxpc3QuCitzdWIgZ2V0X213X2ZpcnN0X3BhZ2VzIHsKKwlteSAkc29tZV9wYWdlcyA9IHNoaWZ0OworCW15IEBzb21lX3BhZ2VzID0gQHskc29tZV9wYWdlc307CisKKwlteSAkcGFnZXMgPSBzaGlmdDsKKworCSMgcGF0dGVybiAncGFnZTF8cGFnZTJ8Li4uJyByZXF1aXJlZCBieSB0aGUgQVBJCisJbXkgJHRpdGxlcyA9IGpvaW4oJ3wnLCBAc29tZV9wYWdlcyk7CisKKwlteSAkbXdfcGFnZXMgPSAkbWVkaWF3aWtpLT5hcGkoeworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJdGl0bGVzID0+ICR0aXRsZXMsCisJfSk7CisJaWYgKCFkZWZpbmVkKCRtd19wYWdlcykpIHsKKwkJcHJpbnQgU1RERVJSICJmYXRhbDogY291bGQgbm90IHF1ZXJ5IHRoZSBsaXN0IG9mIHdpa2kgcGFnZXMuXG4iOworCQlwcmludCBTVERFUlIgImZhdGFsOiAnJHVybCcgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgbWVkaWF3aWtpXG4iOworCQlwcmludCBTVERFUlIgImZhdGFsOiBtYWtlIHN1cmUgJyR1cmwvYXBpLnBocCcgaXMgYSB2YWxpZCBwYWdlLlxuIjsKKwkJZXhpdCAxOworCX0KKwl3aGlsZSAobXkgKCRpZCwgJHBhZ2UpID0gZWFjaCgleyRtd19wYWdlcy0+e3F1ZXJ5fS0+e3BhZ2VzfX0pKSB7CisJCWlmICgkaWQgPCAwKSB7CisJCQlwcmludCBTVERFUlIgIldhcm5pbmc6IHBhZ2UgJHBhZ2UtPnt0aXRsZX0gbm90IGZvdW5kIG9uIHdpa2lcbiI7CisJCX0gZWxzZSB7CisJCQkkcGFnZXMtPnskcGFnZS0+e3RpdGxlfX0gPSAkcGFnZTsKKwkJfQorCX0KK30KKworIyBHZXQgdGhlIGxpc3Qgb2YgcGFnZXMgdG8gYmUgZmV0Y2hlZCBhY2NvcmRpbmcgdG8gY29uZmlndXJhdGlvbi4KK3N1YiBnZXRfbXdfcGFnZXMgeworCW13X2Nvbm5lY3RfbWF5YmUoKTsKKworCXByaW50IFNUREVSUiAiTGlzdGluZyBwYWdlcyBvbiByZW1vdGUgd2lraS4uLlxuIjsKKworCW15ICVwYWdlczsgIyBoYXNoIG9uIHBhZ2UgdGl0bGVzIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKwlteSAkdXNlcl9kZWZpbmVkOworCWlmIChAdHJhY2tlZF9wYWdlcykgeworCQkkdXNlcl9kZWZpbmVkID0gMTsKKwkJIyBUaGUgdXNlciBwcm92aWRlZCBhIGxpc3Qgb2YgcGFnZXMgdGl0bGVzLCBidXQgd2UKKwkJIyBzdGlsbCBuZWVkIHRvIHF1ZXJ5IHRoZSBBUEkgdG8gZ2V0IHRoZSBwYWdlIElEcy4KKwkJZ2V0X213X3RyYWNrZWRfcGFnZXMoXCVwYWdlcyk7CisJfQorCWlmIChAdHJhY2tlZF9jYXRlZ29yaWVzKSB7CisJCSR1c2VyX2RlZmluZWQgPSAxOworCQlnZXRfbXdfdHJhY2tlZF9jYXRlZ29yaWVzKFwlcGFnZXMpOworCX0KKwlpZiAoISR1c2VyX2RlZmluZWQpIHsKKwkJZ2V0X213X2FsbF9wYWdlcyhcJXBhZ2VzKTsKKwl9CisJaWYgKCRpbXBvcnRfbWVkaWEpIHsKKwkJcHJpbnQgU1RERVJSICJHZXR0aW5nIG1lZGlhIGZpbGVzIGZvciBzZWxlY3RlZCBwYWdlcy4uLlxuIjsKKwkJaWYgKCR1c2VyX2RlZmluZWQpIHsKKwkJCWdldF9saW5rZWRfbWVkaWFmaWxlcyhcJXBhZ2VzKTsKKwkJfSBlbHNlIHsKKwkJCWdldF9hbGxfbWVkaWFmaWxlcyhcJXBhZ2VzKTsKKwkJfQorCX0KKwlwcmludCBTVERFUlIgKHNjYWxhciBrZXlzICVwYWdlcykgLiAiIHBhZ2VzIGZvdW5kLlxuIjsKKwlyZXR1cm4gJXBhZ2VzOworfQorCisjIHVzYWdlOiAkb3V0ID0gcnVuX2dpdCgiY29tbWFuZCBhcmdzIik7CisjICAgICAgICAkb3V0ID0gcnVuX2dpdCgiY29tbWFuZCBhcmdzIiwgInJhdyIpOyAjIGRvbid0IGludGVycHJldCBvdXRwdXQgYXMgVVRGLTguCitzdWIgcnVuX2dpdCB7CisJbXkgJGFyZ3MgPSBzaGlmdDsKKwlteSAkZW5jb2RpbmcgPSAoc2hpZnQgfHwgImVuY29kaW5nKFVURi04KSIpOworCW9wZW4obXkgJGdpdCwgIi18OiRlbmNvZGluZyIsICJnaXQgIiAuICRhcmdzKTsKKwlteSAkcmVzID0gZG8geyBsb2NhbCAkLzsgPCRnaXQ+IH07CisJY2xvc2UoJGdpdCk7CisKKwlyZXR1cm4gJHJlczsKK30KKworCitzdWIgZ2V0X2FsbF9tZWRpYWZpbGVzIHsKKwlteSAkcGFnZXMgPSBzaGlmdDsKKwkjIEF0dGFjaCBsaXN0IG9mIGFsbCBwYWdlcyBmb3IgbWVkaWEgZmlsZXMgZnJvbSB0aGUgQVBJLAorCSMgdGhleSBhcmUgaW4gYSBkaWZmZXJlbnQgbmFtZXNwYWNlLCBvbmx5IG9uZSBuYW1lc3BhY2UKKwkjIGNhbiBiZSBxdWVyaWVkIGF0IHRoZSBzYW1lIG1vbWVudAorCW15ICRtd19wYWdlcyA9ICRtZWRpYXdpa2ktPmxpc3QoeworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJbGlzdCA9PiAnYWxscGFnZXMnLAorCQlhcG5hbWVzcGFjZSA9PiBnZXRfbXdfbmFtZXNwYWNlX2lkKCJGaWxlIiksCisJCWFwbGltaXQgPT4gJ21heCcKKwl9KTsKKwlpZiAoIWRlZmluZWQoJG13X3BhZ2VzKSkgeworCQlwcmludCBTVERFUlIgImZhdGFsOiBjb3VsZCBub3QgZ2V0IHRoZSBsaXN0IG9mIHBhZ2VzIGZvciBtZWRpYSBmaWxlcy5cbiI7CisJCXByaW50IFNUREVSUiAiZmF0YWw6ICckdXJsJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBtZWRpYXdpa2lcbiI7CisJCXByaW50IFNUREVSUiAiZmF0YWw6IG1ha2Ugc3VyZSAnJHVybC9hcGkucGhwJyBpcyBhIHZhbGlkIHBhZ2UuXG4iOworCQlleGl0IDE7CisJfQorCWZvcmVhY2ggbXkgJHBhZ2UgKEB7JG13X3BhZ2VzfSkgeworCQkkcGFnZXMtPnskcGFnZS0+e3RpdGxlfX0gPSAkcGFnZTsKKwl9Cit9CisKK3N1YiBnZXRfbGlua2VkX21lZGlhZmlsZXMgeworCW15ICRwYWdlcyA9IHNoaWZ0OworCW15IEB0aXRsZXMgPSBtYXAgJF8tPnt0aXRsZX0sIHZhbHVlcygleyRwYWdlc30pOworCisJIyBUaGUgcXVlcnkgaXMgc3BsaXQgaW4gc21hbGwgYmF0Y2hlcyBiZWNhdXNlIG9mIHRoZSBNVyBBUEkgbGltaXQgb2YKKwkjIHRoZSBudW1iZXIgb2YgbGlua3MgdG8gYmUgcmV0dXJuZWQgKDUwMCBsaW5rcyBtYXgpLgorCW15ICRiYXRjaCA9IDEwOworCXdoaWxlIChAdGl0bGVzKSB7CisJCWlmICgkI3RpdGxlcyA8ICRiYXRjaCkgeworCQkJJGJhdGNoID0gJCN0aXRsZXM7CisJCX0KKwkJbXkgQHNsaWNlID0gQHRpdGxlc1swLi4kYmF0Y2hdOworCisJCSMgcGF0dGVybiAncGFnZTF8cGFnZTJ8Li4uJyByZXF1aXJlZCBieSB0aGUgQVBJCisJCW15ICRtd190aXRsZXMgPSBqb2luKCd8JywgQHNsaWNlKTsKKworCQkjIE1lZGlhIGZpbGVzIGNvdWxkIGJlIGluY2x1ZGVkIG9yIGxpbmtlZCBmcm9tCisJCSMgYSBwYWdlLCBnZXQgYWxsIHJlbGF0ZWQKKwkJbXkgJHF1ZXJ5ID0geworCQkJYWN0aW9uID0+ICdxdWVyeScsCisJCQlwcm9wID0+ICdsaW5rc3xpbWFnZXMnLAorCQkJdGl0bGVzID0+ICRtd190aXRsZXMsCisJCQlwbG5hbWVzcGFjZSA9PiBnZXRfbXdfbmFtZXNwYWNlX2lkKCJGaWxlIiksCisJCQlwbGxpbWl0ID0+ICdtYXgnCisJCX07CisJCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKworCQl3aGlsZSAobXkgKCRpZCwgJHBhZ2UpID0gZWFjaCgleyRyZXN1bHQtPntxdWVyeX0tPntwYWdlc319KSkgeworCQkJbXkgQG1lZGlhX3RpdGxlczsKKwkJCWlmIChkZWZpbmVkKCRwYWdlLT57bGlua3N9KSkgeworCQkJCW15IEBsaW5rX3RpdGxlcyA9IG1hcCAkXy0+e3RpdGxlfSwgQHskcGFnZS0+e2xpbmtzfX07CisJCQkJcHVzaChAbWVkaWFfdGl0bGVzLCBAbGlua190aXRsZXMpOworCQkJfQorCQkJaWYgKGRlZmluZWQoJHBhZ2UtPntpbWFnZXN9KSkgeworCQkJCW15IEBpbWFnZV90aXRsZXMgPSBtYXAgJF8tPnt0aXRsZX0sIEB7JHBhZ2UtPntpbWFnZXN9fTsKKwkJCQlwdXNoKEBtZWRpYV90aXRsZXMsIEBpbWFnZV90aXRsZXMpOworCQkJfQorCQkJaWYgKEBtZWRpYV90aXRsZXMpIHsKKwkJCQlnZXRfbXdfcGFnZV9saXN0KFxAbWVkaWFfdGl0bGVzLCAkcGFnZXMpOworCQkJfQorCQl9CisKKwkJQHRpdGxlcyA9IEB0aXRsZXNbKCRiYXRjaCsxKS4uJCN0aXRsZXNdOworCX0KK30KKworc3ViIGdldF9td19tZWRpYWZpbGVfZm9yX3BhZ2VfcmV2aXNpb24geworCSMgTmFtZSBvZiB0aGUgZmlsZSBvbiBXaWtpLCB3aXRoIHRoZSBwcmVmaXguCisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJbXkgJHRpbWVzdGFtcCA9IHNoaWZ0OworCW15ICVtZWRpYWZpbGU7CisKKwkjIFNlYXJjaCBpZiBvbiBhIG1lZGlhIGZpbGUgd2l0aCBnaXZlbiB0aW1lc3RhbXAgZXhpc3RzIG9uCisJIyBNZWRpYVdpa2kuIEluIHRoYXQgY2FzZSBkb3dubG9hZCB0aGUgZmlsZS4KKwlteSAkcXVlcnkgPSB7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQlwcm9wID0+ICdpbWFnZWluZm8nLAorCQl0aXRsZXMgPT4gIkZpbGU6IiAuICRmaWxlbmFtZSwKKwkJaWlzdGFydCA9PiAkdGltZXN0YW1wLAorCQlpaWVuZCA9PiAkdGltZXN0YW1wLAorCQlpaXByb3AgPT4gJ3RpbWVzdGFtcHxhcmNoaXZlbmFtZXx1cmwnLAorCQlpaWxpbWl0ID0+IDEKKwl9OworCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKworCW15ICgkZmlsZWlkLCAkZmlsZSkgPSBlYWNoKCAleyRyZXN1bHQtPntxdWVyeX0tPntwYWdlc319ICk7CisJIyBJZiBub3QgZGVmaW5lZCBpdCBtZWFucyB0aGVyZSBpcyBubyByZXZpc2lvbiBvZiB0aGUgZmlsZSBmb3IKKwkjIGdpdmVuIHRpbWVzdGFtcC4KKwlpZiAoZGVmaW5lZCgkZmlsZS0+e2ltYWdlaW5mb30pKSB7CisJCSRtZWRpYWZpbGV7dGl0bGV9ID0gJGZpbGVuYW1lOworCisJCW15ICRmaWxlaW5mbyA9IHBvcChAeyRmaWxlLT57aW1hZ2VpbmZvfX0pOworCQkkbWVkaWFmaWxle3RpbWVzdGFtcH0gPSAkZmlsZWluZm8tPnt0aW1lc3RhbXB9OworCQkjIE1lZGlhd2lraTo6QVBJJ3MgZG93bmxvYWQgZnVuY3Rpb24gZG9lc24ndCBzdXBwb3J0IGh0dHBzIFVSTHMKKwkJIyBhbmQgY2FuJ3QgZG93bmxvYWQgb2xkIHZlcnNpb25zIG9mIGZpbGVzLgorCQlwcmludCBTVERFUlIgIlx0RG93bmxvYWRpbmcgZmlsZSAkbWVkaWFmaWxle3RpdGxlfSwgdmVyc2lvbiAkbWVkaWFmaWxle3RpbWVzdGFtcH1cbiI7CisJCSRtZWRpYWZpbGV7Y29udGVudH0gPSBkb3dubG9hZF9td19tZWRpYWZpbGUoJGZpbGVpbmZvLT57dXJsfSk7CisJfQorCXJldHVybiAlbWVkaWFmaWxlOworfQorCitzdWIgZG93bmxvYWRfbXdfbWVkaWFmaWxlIHsKKwlteSAkdXJsID0gc2hpZnQ7CisKKwlteSAkcmVzcG9uc2UgPSAkbWVkaWF3aWtpLT57dWF9LT5nZXQoJHVybCk7CisJaWYgKCRyZXNwb25zZS0+Y29kZSA9PSAyMDApIHsKKwkJcmV0dXJuICRyZXNwb25zZS0+ZGVjb2RlZF9jb250ZW50OworCX0gZWxzZSB7CisJCXByaW50IFNUREVSUiAiRXJyb3IgZG93bmxvYWRpbmcgbWVkaWFmaWxlIGZyb20gOlxuIjsKKwkJcHJpbnQgU1RERVJSICJVUkw6ICR1cmxcbiI7CisJCXByaW50IFNUREVSUiAiU2VydmVyIHJlc3BvbnNlOiAiIC4gJHJlc3BvbnNlLT5jb2RlIC4gIiAiIC4gJHJlc3BvbnNlLT5tZXNzYWdlIC4gIlxuIjsKKwkJZXhpdCAxOworCX0KK30KKworc3ViIGdldF9sYXN0X2xvY2FsX3JldmlzaW9uIHsKKwkjIEdldCBub3RlIHJlZ2FyZGluZyBsYXN0IG1lZGlhd2lraSByZXZpc2lvbgorCW15ICRub3RlID0gcnVuX2dpdCgibm90ZXMgLS1yZWY9JHJlbW90ZW5hbWUvbWVkaWF3aWtpIHNob3cgcmVmcy9tZWRpYXdpa2kvJHJlbW90ZW5hbWUvbWFzdGVyIDI+L2Rldi9udWxsIik7CisJbXkgQG5vdGVfaW5mbyA9IHNwbGl0KC8gLywgJG5vdGUpOworCisJbXkgJGxhc3RyZXZpc2lvbl9udW1iZXI7CisJaWYgKCEoZGVmaW5lZCgkbm90ZV9pbmZvWzBdKSAmJiAkbm90ZV9pbmZvWzBdIGVxICJtZWRpYXdpa2lfcmV2aXNpb246IikpIHsKKwkJcHJpbnQgU1RERVJSICJObyBwcmV2aW91cyBtZWRpYXdpa2kgcmV2aXNpb24gZm91bmQiOworCQkkbGFzdHJldmlzaW9uX251bWJlciA9IDA7CisJfSBlbHNlIHsKKwkJIyBOb3RlcyBhcmUgZm9ybWF0dGVkIDogbWVkaWF3aWtpX3JldmlzaW9uOiAjbnVtYmVyCisJCSRsYXN0cmV2aXNpb25fbnVtYmVyID0gJG5vdGVfaW5mb1sxXTsKKwkJY2hvbXAoJGxhc3RyZXZpc2lvbl9udW1iZXIpOworCQlwcmludCBTVERFUlIgIkxhc3QgbG9jYWwgbWVkaWF3aWtpIHJldmlzaW9uIGZvdW5kIGlzICRsYXN0cmV2aXNpb25fbnVtYmVyIjsKKwl9CisJcmV0dXJuICRsYXN0cmV2aXNpb25fbnVtYmVyOworfQorCisjIFJlbWVtYmVyIHRoZSB0aW1lc3RhbXAgY29ycmVzcG9uZGluZyB0byBhIHJldmlzaW9uIGlkLgorbXkgJWJhc2V0aW1lc3RhbXBzOworCisjIEdldCB0aGUgbGFzdCByZW1vdGUgcmV2aXNpb24gd2l0aG91dCB0YWtpbmcgaW4gYWNjb3VudCB3aGljaCBwYWdlcyBhcmUKKyMgdHJhY2tlZCBvciBub3QuIFRoaXMgZnVuY3Rpb24gbWFrZXMgYSBzaW5nbGUgcmVxdWVzdCB0byB0aGUgd2lraSB0aHVzCisjIGF2b2lkIGEgbG9vcCBvbnRvIGFsbCB0cmFja2VkIHBhZ2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhlIGZldGNoLWJ5LXJldgorIyBvcHRpb24uCitzdWIgZ2V0X2xhc3RfZ2xvYmFsX3JlbW90ZV9yZXYgeworCW13X2Nvbm5lY3RfbWF5YmUoKTsKKworCW15ICRxdWVyeSA9IHsKKwkJYWN0aW9uID0+ICdxdWVyeScsCisJCWxpc3QgPT4gJ3JlY2VudGNoYW5nZXMnLAorCQlwcm9wID0+ICdyZXZpc2lvbnMnLAorCQlyY2xpbWl0ID0+ICcxJywKKwkJcmNkaXIgPT4gJ29sZGVyJywKKwl9OworCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKwlyZXR1cm4gJHJlc3VsdC0+e3F1ZXJ5fS0+e3JlY2VudGNoYW5nZXN9WzBdLT57cmV2aWR9OworfQorCisjIEdldCB0aGUgbGFzdCByZW1vdGUgcmV2aXNpb24gY29uY2VybmluZyB0aGUgdHJhY2tlZCBwYWdlcyBhbmQgdGhlIHRyYWNrZWQKKyMgY2F0ZWdvcmllcy4KK3N1YiBnZXRfbGFzdF9yZW1vdGVfcmV2aXNpb24geworCW13X2Nvbm5lY3RfbWF5YmUoKTsKKworCW15ICVwYWdlc19oYXNoID0gZ2V0X213X3BhZ2VzKCk7CisJbXkgQHBhZ2VzID0gdmFsdWVzKCVwYWdlc19oYXNoKTsKKworCW15ICRtYXhfcmV2X251bSA9IDA7CisKKwlwcmludCBTVERFUlIgIkdldHRpbmcgbGFzdCByZXZpc2lvbiBpZCBvbiB0cmFja2VkIHBhZ2VzLi4uXG4iOworCisJZm9yZWFjaCBteSAkcGFnZSAoQHBhZ2VzKSB7CisJCW15ICRpZCA9ICRwYWdlLT57cGFnZWlkfTsKKworCQlteSAkcXVlcnkgPSB7CisJCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJCXByb3AgPT4gJ3JldmlzaW9ucycsCisJCQlydnByb3AgPT4gJ2lkc3x0aW1lc3RhbXAnLAorCQkJcGFnZWlkcyA9PiAkaWQsCisJCX07CisKKwkJbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmFwaSgkcXVlcnkpOworCisJCW15ICRsYXN0cmV2ID0gcG9wKEB7JHJlc3VsdC0+e3F1ZXJ5fS0+e3BhZ2VzfS0+eyRpZH0tPntyZXZpc2lvbnN9fSk7CisKKwkJJGJhc2V0aW1lc3RhbXBzeyRsYXN0cmV2LT57cmV2aWR9fSA9ICRsYXN0cmV2LT57dGltZXN0YW1wfTsKKworCQkkbWF4X3Jldl9udW0gPSAoJGxhc3RyZXYtPntyZXZpZH0gPiAkbWF4X3Jldl9udW0gPyAkbGFzdHJldi0+e3JldmlkfSA6ICRtYXhfcmV2X251bSk7CisJfQorCisJcHJpbnQgU1RERVJSICJMYXN0IHJlbW90ZSByZXZpc2lvbiBmb3VuZCBpcyAkbWF4X3Jldl9udW0uXG4iOworCXJldHVybiAkbWF4X3Jldl9udW07Cit9CisKKyMgQ2xlYW4gY29udGVudCBiZWZvcmUgc2VuZGluZyBpdCB0byBNZWRpYVdpa2kKK3N1YiBtZWRpYXdpa2lfY2xlYW4geworCW15ICRzdHJpbmcgPSBzaGlmdDsKKwlteSAkcGFnZV9jcmVhdGVkID0gc2hpZnQ7CisJIyBNZWRpYXdpa2kgZG9lcyBub3QgYWxsb3cgYmxhbmsgc3BhY2UgYXQgdGhlIGVuZCBvZiBhIHBhZ2UgYW5kIGVuZHMgd2l0aCBhIHNpbmdsZSBcbi4KKwkjIFRoaXMgZnVuY3Rpb24gcmlnaHQgdHJpbXMgYSBzdHJpbmcgYW5kIGFkZHMgYSBcbiBhdCB0aGUgZW5kIHRvIGZvbGxvdyB0aGlzIHJ1bGUKKwkkc3RyaW5nID1+IHMvXHMrJC8vOworCWlmICgkc3RyaW5nIGVxICIiICYmICRwYWdlX2NyZWF0ZWQpIHsKKwkJIyBDcmVhdGluZyBlbXB0eSBwYWdlcyBpcyBmb3JiaWRkZW4uCisJCSRzdHJpbmcgPSBFTVBUWV9DT05URU5UOworCX0KKwlyZXR1cm4gJHN0cmluZy4iXG4iOworfQorCisjIEZpbHRlciBhcHBsaWVkIG9uIE1lZGlhV2lraSBkYXRhIGJlZm9yZSBhZGRpbmcgdGhlbSB0byBHaXQKK3N1YiBtZWRpYXdpa2lfc211ZGdlIHsKKwlteSAkc3RyaW5nID0gc2hpZnQ7CisJaWYgKCRzdHJpbmcgZXEgRU1QVFlfQ09OVEVOVCkgeworCQkkc3RyaW5nID0gIiI7CisJfQorCSMgVGhpcyBcbiBpcyBpbXBvcnRhbnQuIFRoaXMgaXMgZHVlIHRvIG1lZGlhd2lraSdzIHdheSB0byBoYW5kbGUgZW5kIG9mIGZpbGVzLgorCXJldHVybiAkc3RyaW5nLiJcbiI7Cit9CisKK3N1YiBtZWRpYXdpa2lfY2xlYW5fZmlsZW5hbWUgeworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCSRmaWxlbmFtZSA9fiBzL0B7W1NMQVNIX1JFUExBQ0VNRU5UXX0vXC8vZzsKKwkjIFssIF0sIHwsIHssIGFuZCB9IGFyZSBmb3JiaWRkZW4gYnkgTWVkaWFXaWtpLCBldmVuIFVSTC1lbmNvZGVkLgorCSMgRG8gYSB2YXJpYW50IG9mIFVSTC1lbmNvZGluZywgaS5lLiBsb29rcyBsaWtlIFVSTC1lbmNvZGluZywKKwkjIGJ1dCB3aXRoIF8gYWRkZWQgdG8gcHJldmVudCBNZWRpYVdpa2kgZnJvbSB0aGlua2luZyB0aGlzIGlzCisJIyBhbiBhY3R1YWwgc3BlY2lhbCBjaGFyYWN0ZXIuCisJJGZpbGVuYW1lID1+IHMvW1xbXF1ce1x9XHxdL3NwcmludGYoIl8lJV8leCIsIG9yZCgkJikpL2dlOworCSMgSWYgd2UgdXNlIHRoZSB1cmkgZXNjYXBlIGJlZm9yZQorCSMgd2Ugc2hvdWxkIHVuZXNjYXBlIGhlcmUsIGJlZm9yZSBhbnl0aGluZworCisJcmV0dXJuICRmaWxlbmFtZTsKK30KKworc3ViIG1lZGlhd2lraV9zbXVkZ2VfZmlsZW5hbWUgeworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCSRmaWxlbmFtZSA9fiBzL1wvL0B7W1NMQVNIX1JFUExBQ0VNRU5UXX0vZzsKKwkkZmlsZW5hbWUgPX4gcy8gL18vZzsKKwkjIERlY29kZSBmb3JiaWRkZW4gY2hhcmFjdGVycyBlbmNvZGVkIGluIG1lZGlhd2lraV9jbGVhbl9maWxlbmFtZQorCSRmaWxlbmFtZSA9fiBzL18lXyhbMC05YS1mQS1GXVswLTlhLWZBLUZdKS9zcHJpbnRmKCIlYyIsIGhleCgkMSkpL2dlOworCXJldHVybiAkZmlsZW5hbWU7Cit9CisKK3N1YiBsaXRlcmFsX2RhdGEgeworCW15ICgkY29udGVudCkgPSBAXzsKKwlwcmludCBTVERPVVQgImRhdGEgIiwgYnl0ZXM6Omxlbmd0aCgkY29udGVudCksICJcbiIsICRjb250ZW50OworfQorCitzdWIgbGl0ZXJhbF9kYXRhX3JhdyB7CisJIyBPdXRwdXQgcG9zc2libHkgYmluYXJ5IGNvbnRlbnQuCisJbXkgKCRjb250ZW50KSA9IEBfOworCSMgQXZvaWQgY29uZnVzaW9uIGJldHdlZW4gc2l6ZSBpbiBieXRlcyBhbmQgaW4gY2hhcmFjdGVycworCXV0Zjg6OmRvd25ncmFkZSgkY29udGVudCk7CisJYmlubW9kZSBTVERPVVQsICI6cmF3IjsKKwlwcmludCBTVERPVVQgImRhdGEgIiwgYnl0ZXM6Omxlbmd0aCgkY29udGVudCksICJcbiIsICRjb250ZW50OworCWJpbm1vZGUgU1RET1VULCAiOnV0ZjgiOworfQorCitzdWIgbXdfY2FwYWJpbGl0aWVzIHsKKwkjIFJldmlzaW9ucyBhcmUgaW1wb3J0ZWQgdG8gdGhlIHByaXZhdGUgbmFtZXNwYWNlCisJIyByZWZzL21lZGlhd2lraS8kcmVtb3RlbmFtZS8gYnkgdGhlIGhlbHBlciBhbmQgZmV0Y2hlZCBpbnRvCisJIyByZWZzL3JlbW90ZXMvJHJlbW90ZW5hbWUgbGF0ZXIgYnkgZmV0Y2guCisJcHJpbnQgU1RET1VUICJyZWZzcGVjIHJlZnMvaGVhZHMvKjpyZWZzL21lZGlhd2lraS8kcmVtb3RlbmFtZS8qXG4iOworCXByaW50IFNURE9VVCAiaW1wb3J0XG4iOworCXByaW50IFNURE9VVCAibGlzdFxuIjsKKwlwcmludCBTVERPVVQgInB1c2hcbiI7CisJcHJpbnQgU1RET1VUICJcbiI7Cit9CisKK3N1YiBtd19saXN0IHsKKwkjIE1lZGlhV2lraSBkbyBub3QgaGF2ZSBicmFuY2hlcywgd2UgY29uc2lkZXIgb25lIGJyYW5jaCBhcmJpdHJhcmlseQorCSMgY2FsbGVkIG1hc3RlciwgYW5kIEhFQUQgcG9pbnRpbmcgdG8gaXQuCisJcHJpbnQgU1RET1VUICI/IHJlZnMvaGVhZHMvbWFzdGVyXG4iOworCXByaW50IFNURE9VVCAiXEByZWZzL2hlYWRzL21hc3RlciBIRUFEXG4iOworCXByaW50IFNURE9VVCAiXG4iOworfQorCitzdWIgbXdfb3B0aW9uIHsKKwlwcmludCBTVERFUlIgInJlbW90ZS1oZWxwZXIgY29tbWFuZCAnb3B0aW9uICRfWzBdJyBub3QgeWV0IGltcGxlbWVudGVkXG4iOworCXByaW50IFNURE9VVCAidW5zdXBwb3J0ZWRcbiI7Cit9CisKK3N1YiBmZXRjaF9td19yZXZpc2lvbnNfZm9yX3BhZ2UgeworCW15ICRwYWdlID0gc2hpZnQ7CisJbXkgJGlkID0gc2hpZnQ7CisJbXkgJGZldGNoX2Zyb20gPSBzaGlmdDsKKwlteSBAcGFnZV9yZXZzID0gKCk7CisJbXkgJHF1ZXJ5ID0geworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJcHJvcCA9PiAncmV2aXNpb25zJywKKwkJcnZwcm9wID0+ICdpZHMnLAorCQlydmRpciA9PiAnbmV3ZXInLAorCQlydnN0YXJ0aWQgPT4gJGZldGNoX2Zyb20sCisJCXJ2bGltaXQgPT4gNTAwLAorCQlwYWdlaWRzID0+ICRpZCwKKwl9OworCisJbXkgJHJldm51bSA9IDA7CisJIyBHZXQgNTAwIHJldmlzaW9ucyBhdCBhIHRpbWUgZHVlIHRvIHRoZSBtZWRpYXdpa2kgYXBpIGxpbWl0CisJd2hpbGUgKDEpIHsKKwkJbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmFwaSgkcXVlcnkpOworCisJCSMgUGFyc2UgZWFjaCBvZiB0aG9zZSA1MDAgcmV2aXNpb25zCisJCWZvcmVhY2ggbXkgJHJldmlzaW9uIChAeyRyZXN1bHQtPntxdWVyeX0tPntwYWdlc30tPnskaWR9LT57cmV2aXNpb25zfX0pIHsKKwkJCW15ICRwYWdlX3Jldl9pZHM7CisJCQkkcGFnZV9yZXZfaWRzLT57cGFnZWlkfSA9ICRwYWdlLT57cGFnZWlkfTsKKwkJCSRwYWdlX3Jldl9pZHMtPntyZXZpZH0gPSAkcmV2aXNpb24tPntyZXZpZH07CisJCQlwdXNoKEBwYWdlX3JldnMsICRwYWdlX3Jldl9pZHMpOworCQkJJHJldm51bSsrOworCQl9CisJCWxhc3QgdW5sZXNzICRyZXN1bHQtPnsncXVlcnktY29udGludWUnfTsKKwkJJHF1ZXJ5LT57cnZzdGFydGlkfSA9ICRyZXN1bHQtPnsncXVlcnktY29udGludWUnfS0+e3JldmlzaW9uc30tPntydnN0YXJ0aWR9OworCX0KKwlpZiAoJHNoYWxsb3dfaW1wb3J0ICYmIEBwYWdlX3JldnMpIHsKKwkJcHJpbnQgU1RERVJSICIgIEZvdW5kIDEgcmV2aXNpb24gKHNoYWxsb3cgaW1wb3J0KS5cbiI7CisJCUBwYWdlX3JldnMgPSBzb3J0IHskYi0+e3JldmlkfSA8PT4gJGEtPntyZXZpZH19IChAcGFnZV9yZXZzKTsKKwkJcmV0dXJuICRwYWdlX3JldnNbMF07CisJfQorCXByaW50IFNUREVSUiAiICBGb3VuZCAiLCAkcmV2bnVtLCAiIHJldmlzaW9uKHMpLlxuIjsKKwlyZXR1cm4gQHBhZ2VfcmV2czsKK30KKworc3ViIGZldGNoX213X3JldmlzaW9ucyB7CisJbXkgJHBhZ2VzID0gc2hpZnQ7IG15IEBwYWdlcyA9IEB7JHBhZ2VzfTsKKwlteSAkZmV0Y2hfZnJvbSA9IHNoaWZ0OworCisJbXkgQHJldmlzaW9ucyA9ICgpOworCW15ICRuID0gMTsKKwlmb3JlYWNoIG15ICRwYWdlIChAcGFnZXMpIHsKKwkJbXkgJGlkID0gJHBhZ2UtPntwYWdlaWR9OworCisJCXByaW50IFNUREVSUiAicGFnZSAkbi8iLCBzY2FsYXIoQHBhZ2VzKSwgIjogIi4gJHBhZ2UtPnt0aXRsZX0gLiJcbiI7CisJCSRuKys7CisJCW15IEBwYWdlX3JldnMgPSBmZXRjaF9td19yZXZpc2lvbnNfZm9yX3BhZ2UoJHBhZ2UsICRpZCwgJGZldGNoX2Zyb20pOworCQlAcmV2aXNpb25zID0gKEBwYWdlX3JldnMsIEByZXZpc2lvbnMpOworCX0KKworCXJldHVybiAoJG4sIEByZXZpc2lvbnMpOworfQorCitzdWIgaW1wb3J0X2ZpbGVfcmV2aXNpb24geworCW15ICRjb21taXQgPSBzaGlmdDsKKwlteSAlY29tbWl0ID0gJXskY29tbWl0fTsKKwlteSAkZnVsbF9pbXBvcnQgPSBzaGlmdDsKKwlteSAkbiA9IHNoaWZ0OworCW15ICRtZWRpYWZpbGUgPSBzaGlmdDsKKwlteSAlbWVkaWFmaWxlOworCWlmICgkbWVkaWFmaWxlKSB7CisJCSVtZWRpYWZpbGUgPSAleyRtZWRpYWZpbGV9OworCX0KKworCW15ICR0aXRsZSA9ICRjb21taXR7dGl0bGV9OworCW15ICRjb21tZW50ID0gJGNvbW1pdHtjb21tZW50fTsKKwlteSAkY29udGVudCA9ICRjb21taXR7Y29udGVudH07CisJbXkgJGF1dGhvciA9ICRjb21taXR7YXV0aG9yfTsKKwlteSAkZGF0ZSA9ICRjb21taXR7ZGF0ZX07CisKKwlwcmludCBTVERPVVQgImNvbW1pdCByZWZzL21lZGlhd2lraS8kcmVtb3RlbmFtZS9tYXN0ZXJcbiI7CisJcHJpbnQgU1RET1VUICJtYXJrIDokblxuIjsKKwlwcmludCBTVERPVVQgImNvbW1pdHRlciAkYXV0aG9yIDwkYXV0aG9yXEAkd2lraV9uYW1lPiAiLCAkZGF0ZS0+ZXBvY2gsICIgKzAwMDBcbiI7CisJbGl0ZXJhbF9kYXRhKCRjb21tZW50KTsKKworCSMgSWYgaXQncyBub3QgYSBjbG9uZSwgd2UgbmVlZCB0byBrbm93IHdoZXJlIHRvIHN0YXJ0IGZyb20KKwlpZiAoISRmdWxsX2ltcG9ydCAmJiAkbiA9PSAxKSB7CisJCXByaW50IFNURE9VVCAiZnJvbSByZWZzL21lZGlhd2lraS8kcmVtb3RlbmFtZS9tYXN0ZXJeMFxuIjsKKwl9CisJaWYgKCRjb250ZW50IG5lIERFTEVURURfQ09OVEVOVCkgeworCQlwcmludCBTVERPVVQgIk0gNjQ0IGlubGluZSAkdGl0bGUubXdcbiI7CisJCWxpdGVyYWxfZGF0YSgkY29udGVudCk7CisJCWlmICglbWVkaWFmaWxlKSB7CisJCQlwcmludCBTVERPVVQgIk0gNjQ0IGlubGluZSAkbWVkaWFmaWxle3RpdGxlfVxuIjsKKwkJCWxpdGVyYWxfZGF0YV9yYXcoJG1lZGlhZmlsZXtjb250ZW50fSk7CisJCX0KKwkJcHJpbnQgU1RET1VUICJcblxuIjsKKwl9IGVsc2UgeworCQlwcmludCBTVERPVVQgIkQgJHRpdGxlLm13XG4iOworCX0KKworCSMgbWVkaWF3aWtpIHJldmlzaW9uIG51bWJlciBpbiB0aGUgZ2l0IG5vdGUKKwlpZiAoJGZ1bGxfaW1wb3J0ICYmICRuID09IDEpIHsKKwkJcHJpbnQgU1RET1VUICJyZXNldCByZWZzL25vdGVzLyRyZW1vdGVuYW1lL21lZGlhd2lraVxuIjsKKwl9CisJcHJpbnQgU1RET1VUICJjb21taXQgcmVmcy9ub3Rlcy8kcmVtb3RlbmFtZS9tZWRpYXdpa2lcbiI7CisJcHJpbnQgU1RET1VUICJjb21taXR0ZXIgJGF1dGhvciA8JGF1dGhvclxAJHdpa2lfbmFtZT4gIiwgJGRhdGUtPmVwb2NoLCAiICswMDAwXG4iOworCWxpdGVyYWxfZGF0YSgiTm90ZSBhZGRlZCBieSBnaXQtbWVkaWF3aWtpIGR1cmluZyBpbXBvcnQiKTsKKwlpZiAoISRmdWxsX2ltcG9ydCAmJiAkbiA9PSAxKSB7CisJCXByaW50IFNURE9VVCAiZnJvbSByZWZzL25vdGVzLyRyZW1vdGVuYW1lL21lZGlhd2lraV4wXG4iOworCX0KKwlwcmludCBTVERPVVQgIk4gaW5saW5lIDokblxuIjsKKwlsaXRlcmFsX2RhdGEoIm1lZGlhd2lraV9yZXZpc2lvbjogIiAuICRjb21taXR7bXdfcmV2aXNpb259KTsKKwlwcmludCBTVERPVVQgIlxuXG4iOworfQorCisjIHBhcnNlIGEgc2VxdWVuY2Ugb2YKKyMgPGNtZD4gPGFyZzE+CisjIDxjbWQ+IDxhcmcyPgorIyBcbgorIyAobGlrZSBiYXRjaCBzZXF1ZW5jZSBvZiBpbXBvcnQgYW5kIHNlcXVlbmNlIG9mIHB1c2ggc3RhdGVtZW50cykKK3N1YiBnZXRfbW9yZV9yZWZzIHsKKwlteSAkY21kID0gc2hpZnQ7CisJbXkgQHJlZnM7CisJd2hpbGUgKDEpIHsKKwkJbXkgJGxpbmUgPSA8U1RESU4+OworCQlpZiAoJGxpbmUgPX4gbS9eJGNtZCAoLiopJC8pIHsKKwkJCXB1c2goQHJlZnMsICQxKTsKKwkJfSBlbHNpZiAoJGxpbmUgZXEgIlxuIikgeworCQkJcmV0dXJuIEByZWZzOworCQl9IGVsc2UgeworCQkJZGllKCJJbnZhbGlkIGNvbW1hbmQgaW4gYSAnJGNtZCcgYmF0Y2g6ICIuICRfKTsKKwkJfQorCX0KK30KKworc3ViIG13X2ltcG9ydCB7CisJIyBtdWx0aXBsZSBpbXBvcnQgY29tbWFuZHMgY2FuIGZvbGxvdyBlYWNoIG90aGVyLgorCW15IEByZWZzID0gKHNoaWZ0LCBnZXRfbW9yZV9yZWZzKCJpbXBvcnQiKSk7CisJZm9yZWFjaCBteSAkcmVmIChAcmVmcykgeworCQltd19pbXBvcnRfcmVmKCRyZWYpOworCX0KKwlwcmludCBTVERPVVQgImRvbmVcbiI7Cit9CisKK3N1YiBtd19pbXBvcnRfcmVmIHsKKwlteSAkcmVmID0gc2hpZnQ7CisJIyBUaGUgcmVtb3RlIGhlbHBlciB3aWxsIGNhbGwgImltcG9ydCBIRUFEIiBhbmQKKwkjICJpbXBvcnQgcmVmcy9oZWFkcy9tYXN0ZXIiLgorCSMgU2luY2UgSEVBRCBpcyBhIHN5bWJvbGljIHJlZiB0byBtYXN0ZXIgKGJ5IGNvbnZlbnRpb24sCisJIyBmb2xsb3dlZCBieSB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kICJsaXN0IiB0aGF0IHdlIGdhdmUpLAorCSMgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBpbiB0aGlzIGNhc2UuCisJaWYgKCRyZWYgZXEgIkhFQUQiKSB7CisJCXJldHVybjsKKwl9CisKKwltd19jb25uZWN0X21heWJlKCk7CisKKwlwcmludCBTVERFUlIgIlNlYXJjaGluZyByZXZpc2lvbnMuLi5cbiI7CisJbXkgJGxhc3RfbG9jYWwgPSBnZXRfbGFzdF9sb2NhbF9yZXZpc2lvbigpOworCW15ICRmZXRjaF9mcm9tID0gJGxhc3RfbG9jYWwgKyAxOworCWlmICgkZmV0Y2hfZnJvbSA9PSAxKSB7CisJCXByaW50IFNUREVSUiAiLCBmZXRjaGluZyBmcm9tIGJlZ2lubmluZy5cbiI7CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSICIsIGZldGNoaW5nIGZyb20gaGVyZS5cbiI7CisJfQorCisJbXkgJG4gPSAwOworCWlmICgkZmV0Y2hfc3RyYXRlZ3kgZXEgImJ5X3JldiIpIHsKKwkJcHJpbnQgU1RERVJSICJGZXRjaGluZyAmIHdyaXRpbmcgZXhwb3J0IGRhdGEgYnkgcmV2cy4uLlxuIjsKKwkJJG4gPSBtd19pbXBvcnRfcmVmX2J5X3JldnMoJGZldGNoX2Zyb20pOworCX0gZWxzaWYgKCRmZXRjaF9zdHJhdGVneSBlcSAiYnlfcGFnZSIpIHsKKwkJcHJpbnQgU1RERVJSICJGZXRjaGluZyAmIHdyaXRpbmcgZXhwb3J0IGRhdGEgYnkgcGFnZXMuLi5cbiI7CisJCSRuID0gbXdfaW1wb3J0X3JlZl9ieV9wYWdlcygkZmV0Y2hfZnJvbSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSICJmYXRhbDogaW52YWxpZCBmZXRjaCBzdHJhdGVneSBcIiRmZXRjaF9zdHJhdGVneVwiLlxuIjsKKwkJcHJpbnQgU1RERVJSICJDaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHJlbW90ZS4kcmVtb3RlbmFtZS5mZXRjaFN0cmF0ZWd5IGFuZCBtZWRpYXdpa2kuZmV0Y2hTdHJhdGVneVxuIjsKKwkJZXhpdCAxOworCX0KKworCWlmICgkZmV0Y2hfZnJvbSA9PSAxICYmICRuID09IDApIHsKKwkJcHJpbnQgU1RERVJSICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IE1lZGlhV2lraS5cbiI7CisJCSMgU29tZXRoaW5nIGhhcyB0byBiZSBkb25lIHJlbW90ZS1oZWxwZXIgc2lkZS4gSWYgbm90aGluZyBpcyBkb25lLCBhbiBlcnJvciBpcworCQkjIHRocm93biBzYXlpbmcgdGhhdCBIRUFEIGlzIHJlZmVyaW5nIHRvIHVua25vd24gb2JqZWN0IDAwMDAwMDAwMDAwMDAwMDAwMDAKKwkJIyBhbmQgdGhlIGNsb25lIGZhaWxzLgorCX0KK30KKworc3ViIG13X2ltcG9ydF9yZWZfYnlfcGFnZXMgeworCisJbXkgJGZldGNoX2Zyb20gPSBzaGlmdDsKKwlteSAlcGFnZXNfaGFzaCA9IGdldF9td19wYWdlcygpOworCW15IEBwYWdlcyA9IHZhbHVlcyglcGFnZXNfaGFzaCk7CisKKwlteSAoJG4sIEByZXZpc2lvbnMpID0gZmV0Y2hfbXdfcmV2aXNpb25zKFxAcGFnZXMsICRmZXRjaF9mcm9tKTsKKworCUByZXZpc2lvbnMgPSBzb3J0IHskYS0+e3JldmlkfSA8PT4gJGItPntyZXZpZH19IEByZXZpc2lvbnM7CisJbXkgQHJldmlzaW9uX2lkcyA9IG1hcCAkXy0+e3JldmlkfSwgQHJldmlzaW9uczsKKworCXJldHVybiBtd19pbXBvcnRfcmV2aWRzKCRmZXRjaF9mcm9tLCBcQHJldmlzaW9uX2lkcywgXCVwYWdlc19oYXNoKTsKK30KKworc3ViIG13X2ltcG9ydF9yZWZfYnlfcmV2cyB7CisKKwlteSAkZmV0Y2hfZnJvbSA9IHNoaWZ0OworCW15ICVwYWdlc19oYXNoID0gZ2V0X213X3BhZ2VzKCk7CisKKwlteSAkbGFzdF9yZW1vdGUgPSBnZXRfbGFzdF9nbG9iYWxfcmVtb3RlX3JldigpOworCW15IEByZXZpc2lvbl9pZHMgPSAkZmV0Y2hfZnJvbS4uJGxhc3RfcmVtb3RlOworCXJldHVybiBtd19pbXBvcnRfcmV2aWRzKCRmZXRjaF9mcm9tLCBcQHJldmlzaW9uX2lkcywgXCVwYWdlc19oYXNoKTsKK30KKworIyBJbXBvcnQgcmV2aXNpb25zIGdpdmVuIGluIHNlY29uZCBhcmd1bWVudCAoYXJyYXkgb2YgaW50ZWdlcnMpLgorIyBPbmx5IHBhZ2VzIGFwcGVhcmluZyBpbiB0aGUgdGhpcmQgYXJndW1lbnQgKGhhc2ggaW5kZXhlZCBieSBwYWdlIHRpdGxlcykKKyMgd2lsbCBiZSBpbXBvcnRlZC4KK3N1YiBtd19pbXBvcnRfcmV2aWRzIHsKKwlteSAkZmV0Y2hfZnJvbSA9IHNoaWZ0OworCW15ICRyZXZpc2lvbl9pZHMgPSBzaGlmdDsKKwlteSAkcGFnZXMgPSBzaGlmdDsKKworCW15ICRuID0gMDsKKwlteSAkbl9hY3R1YWwgPSAwOworCW15ICRsYXN0X3RpbWVzdGFtcCA9IDA7ICMgUGxhY2Vob2xlciBpbiBjYXNlICRyZXYtPnRpbWVzdGFtcCBpcyB1bmRlZmluZWQKKworCWZvcmVhY2ggbXkgJHBhZ2VyZXZpZCAoQCRyZXZpc2lvbl9pZHMpIHsKKwkgICAgICAgICMgQ291bnQgcGFnZSBldmVuIGlmIHdlIHNraXAgaXQsIHNpbmNlIHdlIGRpc3BsYXkKKwkJIyAkbi8kdG90YWwgYW5kICR0b3RhbCBpbmNsdWRlcyBza2lwcGVkIHBhZ2VzLgorCQkkbisrOworCisJCSMgZmV0Y2ggdGhlIGNvbnRlbnQgb2YgdGhlIHBhZ2VzCisJCW15ICRxdWVyeSA9IHsKKwkJCWFjdGlvbiA9PiAncXVlcnknLAorCQkJcHJvcCA9PiAncmV2aXNpb25zJywKKwkJCXJ2cHJvcCA9PiAnY29udGVudHx0aW1lc3RhbXB8Y29tbWVudHx1c2VyfGlkcycsCisJCQlyZXZpZHMgPT4gJHBhZ2VyZXZpZCwKKwkJfTsKKworCQlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7CisKKwkJaWYgKCEkcmVzdWx0KSB7CisJCQlkaWUgIkZhaWxlZCB0byByZXRyaWV2ZSBtb2RpZmllZCBwYWdlIGZvciByZXZpc2lvbiAkcGFnZXJldmlkIjsKKwkJfQorCisJCWlmIChkZWZpbmVkKCRyZXN1bHQtPntxdWVyeX0tPntiYWRyZXZpZHN9LT57JHBhZ2VyZXZpZH0pKSB7CisJCQkjIFRoZSByZXZpc2lvbiBpZCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgcmVtb3RlIHdpa2kuCisJCQluZXh0OworCQl9CisKKwkJaWYgKCFkZWZpbmVkKCRyZXN1bHQtPntxdWVyeX0tPntwYWdlc30pKSB7CisJCQlkaWUgIkludmFsaWQgcmV2aXNpb24gJHBhZ2VyZXZpZC4iOworCQl9CisKKwkJbXkgQHJlc3VsdF9wYWdlcyA9IHZhbHVlcygleyRyZXN1bHQtPntxdWVyeX0tPntwYWdlc319KTsKKwkJbXkgJHJlc3VsdF9wYWdlID0gJHJlc3VsdF9wYWdlc1swXTsKKwkJbXkgJHJldiA9ICRyZXN1bHRfcGFnZXNbMF0tPntyZXZpc2lvbnN9LT5bMF07CisKKwkJbXkgJHBhZ2VfdGl0bGUgPSAkcmVzdWx0X3BhZ2UtPnt0aXRsZX07CisKKwkJaWYgKCFleGlzdHMoJHBhZ2VzLT57JHBhZ2VfdGl0bGV9KSkgeworCQkJcHJpbnQgU1RERVJSICIkbi8iLCBzY2FsYXIoQCRyZXZpc2lvbl9pZHMpLAorCQkJCSI6IFNraXBwaW5nIHJldmlzaW9uICMkcmV2LT57cmV2aWR9IG9mICRwYWdlX3RpdGxlXG4iOworCQkJbmV4dDsKKwkJfQorCisJCSRuX2FjdHVhbCsrOworCisJCW15ICVjb21taXQ7CisJCSRjb21taXR7YXV0aG9yfSA9ICRyZXYtPnt1c2VyfSB8fCAnQW5vbnltb3VzJzsKKwkJJGNvbW1pdHtjb21tZW50fSA9ICRyZXYtPntjb21tZW50fSB8fCBFTVBUWV9NRVNTQUdFOworCQkkY29tbWl0e3RpdGxlfSA9IG1lZGlhd2lraV9zbXVkZ2VfZmlsZW5hbWUoJHBhZ2VfdGl0bGUpOworCQkkY29tbWl0e213X3JldmlzaW9ufSA9ICRyZXYtPntyZXZpZH07CisJCSRjb21taXR7Y29udGVudH0gPSBtZWRpYXdpa2lfc211ZGdlKCRyZXYtPnsnKid9KTsKKworCQlpZiAoIWRlZmluZWQoJHJldi0+e3RpbWVzdGFtcH0pKSB7CisJCQkkbGFzdF90aW1lc3RhbXArKzsKKwkJfSBlbHNlIHsKKwkJCSRsYXN0X3RpbWVzdGFtcCA9ICRyZXYtPnt0aW1lc3RhbXB9OworCQl9CisJCSRjb21taXR7ZGF0ZX0gPSBEYXRlVGltZTo6Rm9ybWF0OjpJU084NjAxLT5wYXJzZV9kYXRldGltZSgkbGFzdF90aW1lc3RhbXApOworCisJCSMgRGlmZmVyZW50aWF0ZXMgY2xhc3NpYyBwYWdlcyBhbmQgbWVkaWEgZmlsZXMuCisJCW15ICgkbmFtZXNwYWNlLCAkZmlsZW5hbWUpID0gJHBhZ2VfdGl0bGUgPX4gL14oW146XSopOiguKikkLzsKKwkJbXkgJW1lZGlhZmlsZTsKKwkJaWYgKCRuYW1lc3BhY2UpIHsKKwkJCW15ICRpZCA9IGdldF9td19uYW1lc3BhY2VfaWQoJG5hbWVzcGFjZSk7CisJCQlpZiAoJGlkICYmICRpZCA9PSBnZXRfbXdfbmFtZXNwYWNlX2lkKCJGaWxlIikpIHsKKwkJCQklbWVkaWFmaWxlID0gZ2V0X213X21lZGlhZmlsZV9mb3JfcGFnZV9yZXZpc2lvbigkZmlsZW5hbWUsICRyZXYtPnt0aW1lc3RhbXB9KTsKKwkJCX0KKwkJfQorCQkjIElmIHRoaXMgaXMgYSByZXZpc2lvbiBvZiB0aGUgbWVkaWEgcGFnZSBmb3IgbmV3IHZlcnNpb24KKwkJIyBvZiBhIGZpbGUgZG8gb25lIGNvbW1vbiBjb21taXQgZm9yIGJvdGggZmlsZSBhbmQgbWVkaWEgcGFnZS4KKwkJIyBFbHNlIGRvIGNvbW1pdCBvbmx5IGZvciB0aGF0IHBhZ2UuCisJCXByaW50IFNUREVSUiAiJG4vIiwgc2NhbGFyKEAkcmV2aXNpb25faWRzKSwgIjogUmV2aXNpb24gIyRyZXYtPntyZXZpZH0gb2YgJGNvbW1pdHt0aXRsZX1cbiI7CisJCWltcG9ydF9maWxlX3JldmlzaW9uKFwlY29tbWl0LCAoJGZldGNoX2Zyb20gPT0gMSksICRuX2FjdHVhbCwgXCVtZWRpYWZpbGUpOworCX0KKworCXJldHVybiAkbl9hY3R1YWw7Cit9CisKK3N1YiBlcnJvcl9ub25fZmFzdF9mb3J3YXJkIHsKKwlteSAkYWR2aWNlID0gcnVuX2dpdCgiY29uZmlnIC0tYm9vbCBhZHZpY2UucHVzaE5vbkZhc3RGb3J3YXJkIik7CisJY2hvbXAoJGFkdmljZSk7CisJaWYgKCRhZHZpY2UgbmUgImZhbHNlIikgeworCQkjIE5hdGl2ZSBnaXQtcHVzaCB3b3VsZCBzaG93IHRoaXMgYWZ0ZXIgdGhlIHN1bW1hcnkuCisJCSMgV2UgY2FuJ3QgYXNrIGl0IHRvIGRpc3BsYXkgaXQgY2xlYW5seSwgc28gcHJpbnQgaXQKKwkJIyBvdXJzZWx2ZXMgYmVmb3JlLgorCQlwcmludCBTVERFUlIgIlRvIHByZXZlbnQgeW91IGZyb20gbG9zaW5nIGhpc3RvcnksIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcyB3ZXJlIHJlamVjdGVkXG4iOworCQlwcmludCBTVERFUlIgIk1lcmdlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLiAnZ2l0IHB1bGwnKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi4gU2VlIHRoZVxuIjsKKwkJcHJpbnQgU1RERVJSICInTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBzZWN0aW9uIG9mICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLlxuIjsKKwl9CisJcHJpbnQgU1RET1VUICJlcnJvciAkX1swXSBcIm5vbi1mYXN0LWZvcndhcmRcIlxuIjsKKwlyZXR1cm4gMDsKK30KKworc3ViIG13X3VwbG9hZF9maWxlIHsKKwlteSAkY29tcGxldGVfZmlsZV9uYW1lID0gc2hpZnQ7CisJbXkgJG5ld19zaGExID0gc2hpZnQ7CisJbXkgJGV4dGVuc2lvbiA9IHNoaWZ0OworCW15ICRmaWxlX2RlbGV0ZWQgPSBzaGlmdDsKKwlteSAkc3VtbWFyeSA9IHNoaWZ0OworCW15ICRuZXdyZXZpZDsKKwlteSAkcGF0aCA9ICJGaWxlOiIgLiAkY29tcGxldGVfZmlsZV9uYW1lOworCW15ICVoYXNoRmlsZXMgPSBnZXRfYWxsb3dlZF9maWxlX2V4dGVuc2lvbnMoKTsKKwlpZiAoIWV4aXN0cygkaGFzaEZpbGVzeyRleHRlbnNpb259KSkgeworCQlwcmludCBTVERFUlIgIiRjb21wbGV0ZV9maWxlX25hbWUgaXMgbm90IGEgcGVybWl0dGVkIGZpbGUgb24gdGhpcyB3aWtpLlxuIjsKKwkJcHJpbnQgU1RERVJSICJDaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiBmaWxlIHVwbG9hZHMgaW4geW91ciBtZWRpYXdpa2kuXG4iOworCQlyZXR1cm4gJG5ld3JldmlkOworCX0KKwkjIERlbGV0aW5nIGFuZCB1cGxvYWRpbmcgYSBmaWxlIHJlcXVpcmVzIGEgcHJpdmlsZWRnZWQgdXNlcgorCWlmICgkZmlsZV9kZWxldGVkKSB7CisJCW13X2Nvbm5lY3RfbWF5YmUoKTsKKwkJbXkgJHF1ZXJ5ID0geworCQkJYWN0aW9uID0+ICdkZWxldGUnLAorCQkJdGl0bGUgPT4gJHBhdGgsCisJCQlyZWFzb24gPT4gJHN1bW1hcnkKKwkJfTsKKwkJaWYgKCEkbWVkaWF3aWtpLT5lZGl0KCRxdWVyeSkpIHsKKwkJCXByaW50IFNUREVSUiAiRmFpbGVkIHRvIGRlbGV0ZSBmaWxlIG9uIHJlbW90ZSB3aWtpXG4iOworCQkJcHJpbnQgU1RERVJSICJDaGVjayB5b3VyIHBlcm1pc3Npb25zIG9uIHRoZSByZW1vdGUgc2l0ZS4gRXJyb3IgY29kZTpcbiI7CisJCQlwcmludCBTVERFUlIgJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4gJzonIC4gJG1lZGlhd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9OworCQkJZXhpdCAxOworCQl9CisJfSBlbHNlIHsKKwkJIyBEb24ndCBsZXQgcGVybCB0cnkgdG8gaW50ZXJwcmV0IGZpbGUgY29udGVudCBhcyBVVEYtOCA9PiB1c2UgInJhdyIKKwkJbXkgJGNvbnRlbnQgPSBydW5fZ2l0KCJjYXQtZmlsZSBibG9iICRuZXdfc2hhMSIsICJyYXciKTsKKwkJaWYgKCRjb250ZW50IG5lICIiKSB7CisJCQltd19jb25uZWN0X21heWJlKCk7CisJCQkkbWVkaWF3aWtpLT57Y29uZmlnfS0+e3VwbG9hZF91cmx9ID0KKwkJCQkiJHVybC9pbmRleC5waHAvU3BlY2lhbDpVcGxvYWQiOworCQkJJG1lZGlhd2lraS0+ZWRpdCh7CisJCQkJYWN0aW9uID0+ICd1cGxvYWQnLAorCQkJCWZpbGVuYW1lID0+ICRjb21wbGV0ZV9maWxlX25hbWUsCisJCQkJY29tbWVudCA9PiAkc3VtbWFyeSwKKwkJCQlmaWxlID0+IFt1bmRlZiwKKwkJCQkJICRjb21wbGV0ZV9maWxlX25hbWUsCisJCQkJCSBDb250ZW50ID0+ICRjb250ZW50XSwKKwkJCQlpZ25vcmV3YXJuaW5ncyA9PiAxLAorCQkJfSwgeworCQkJCXNraXBfZW5jb2RpbmcgPT4gMQorCQkJfSApIHx8IGRpZSAkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOicKKwkJCQkgLiAkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc307CisJCQlteSAkbGFzdF9maWxlX3BhZ2UgPSAkbWVkaWF3aWtpLT5nZXRfcGFnZSh7dGl0bGUgPT4gJHBhdGh9KTsKKwkJCSRuZXdyZXZpZCA9ICRsYXN0X2ZpbGVfcGFnZS0+e3JldmlkfTsKKwkJCXByaW50IFNUREVSUiAiUHVzaGVkIGZpbGU6ICRuZXdfc2hhMSAtICRjb21wbGV0ZV9maWxlX25hbWUuXG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgU1RERVJSICJFbXB0eSBmaWxlICRjb21wbGV0ZV9maWxlX25hbWUgbm90IHB1c2hlZC5cbiI7CisJCX0KKwl9CisJcmV0dXJuICRuZXdyZXZpZDsKK30KKworc3ViIG13X3B1c2hfZmlsZSB7CisJbXkgJGRpZmZfaW5mbyA9IHNoaWZ0OworCSMgJGRpZmZfaW5mbyBjb250YWlucyBhIHN0cmluZyBpbiB0aGlzIGZvcm1hdDoKKwkjIDEwMDY0NCAxMDA2NDQgPHNoYTFfb2ZfYmxvYl9iZWZvcmVfY29tbWl0PiA8c2hhMV9vZl9ibG9iX25vdz4gPHN0YXR1cz4KKwlteSBAZGlmZl9pbmZvX3NwbGl0ID0gc3BsaXQoL1sgXHRdLywgJGRpZmZfaW5mbyk7CisKKwkjIEZpbGVuYW1lLCBpbmNsdWRpbmcgLm13IGV4dGVuc2lvbgorCW15ICRjb21wbGV0ZV9maWxlX25hbWUgPSBzaGlmdDsKKwkjIENvbW1pdCBtZXNzYWdlCisJbXkgJHN1bW1hcnkgPSBzaGlmdDsKKwkjIE1lZGlhV2lraSByZXZpc2lvbiBudW1iZXIuIEtlZXAgdGhlIHByZXZpb3VzIG9uZSBieSBkZWZhdWx0LAorCSMgaW4gY2FzZSB0aGVyZSdzIG5vIGVkaXQgdG8gcGVyZm9ybS4KKwlteSAkb2xkcmV2aWQgPSBzaGlmdDsKKwlteSAkbmV3cmV2aWQ7CisKKwlpZiAoJHN1bW1hcnkgZXEgRU1QVFlfTUVTU0FHRSkgeworCQkkc3VtbWFyeSA9ICcnOworCX0KKworCW15ICRuZXdfc2hhMSA9ICRkaWZmX2luZm9fc3BsaXRbM107CisJbXkgJG9sZF9zaGExID0gJGRpZmZfaW5mb19zcGxpdFsyXTsKKwlteSAkcGFnZV9jcmVhdGVkID0gKCRvbGRfc2hhMSBlcSBOVUxMX1NIQTEpOworCW15ICRwYWdlX2RlbGV0ZWQgPSAoJG5ld19zaGExIGVxIE5VTExfU0hBMSk7CisJJGNvbXBsZXRlX2ZpbGVfbmFtZSA9IG1lZGlhd2lraV9jbGVhbl9maWxlbmFtZSgkY29tcGxldGVfZmlsZV9uYW1lKTsKKworCW15ICgkdGl0bGUsICRleHRlbnNpb24pID0gJGNvbXBsZXRlX2ZpbGVfbmFtZSA9fiAvXiguKilcLihbXlwuXSopJC87CisJaWYgKCFkZWZpbmVkKCRleHRlbnNpb24pKSB7CisJCSRleHRlbnNpb24gPSAiIjsKKwl9CisJaWYgKCRleHRlbnNpb24gZXEgIm13IikgeworCQlteSAkbnMgPSBnZXRfbXdfbmFtZXNwYWNlX2lkX2Zvcl9wYWdlKCRjb21wbGV0ZV9maWxlX25hbWUpOworCQlpZiAoJG5zICYmICRucyA9PSBnZXRfbXdfbmFtZXNwYWNlX2lkKCJGaWxlIikgJiYgKCEkZXhwb3J0X21lZGlhKSkgeworCQkJcHJpbnQgU1RERVJSICJJZ25vcmluZyBtZWRpYSBmaWxlIHJlbGF0ZWQgcGFnZTogJGNvbXBsZXRlX2ZpbGVfbmFtZVxuIjsKKwkJCXJldHVybiAoJG9sZHJldmlkLCAib2siKTsKKwkJfQorCQlteSAkZmlsZV9jb250ZW50OworCQlpZiAoJHBhZ2VfZGVsZXRlZCkgeworCQkJIyBEZWxldGluZyBhIHBhZ2UgdXN1YWxseSByZXF1aXJlcworCQkJIyBzcGVjaWFsIHByaXZpbGVkZ2VzLiBBIGNvbW1vbgorCQkJIyBjb252ZW50aW9uIGlzIHRvIHJlcGxhY2UgdGhlIHBhZ2UKKwkJCSMgd2l0aCB0aGlzIGNvbnRlbnQgaW5zdGVhZDoKKwkJCSRmaWxlX2NvbnRlbnQgPSBERUxFVEVEX0NPTlRFTlQ7CisJCX0gZWxzZSB7CisJCQkkZmlsZV9jb250ZW50ID0gcnVuX2dpdCgiY2F0LWZpbGUgYmxvYiAkbmV3X3NoYTEiKTsKKwkJfQorCisJCW13X2Nvbm5lY3RfbWF5YmUoKTsKKworCQlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+ZWRpdCggeworCQkJYWN0aW9uID0+ICdlZGl0JywKKwkJCXN1bW1hcnkgPT4gJHN1bW1hcnksCisJCQl0aXRsZSA9PiAkdGl0bGUsCisJCQliYXNldGltZXN0YW1wID0+ICRiYXNldGltZXN0YW1wc3skb2xkcmV2aWR9LAorCQkJdGV4dCA9PiBtZWRpYXdpa2lfY2xlYW4oJGZpbGVfY29udGVudCwgJHBhZ2VfY3JlYXRlZCksCisJCQkJICB9LCB7CisJCQkJCSAgc2tpcF9lbmNvZGluZyA9PiAxICMgSGVscHMgd2l0aCBuYW1lcyB3aXRoIGFjY2VudHVhdGVkIGNoYXJhY3RlcnMKKwkJCQkgIH0pOworCQlpZiAoISRyZXN1bHQpIHsKKwkJCWlmICgkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gPT0gMykgeworCQkJCSMgZWRpdCBjb25mbGljdHMsIGNvbnNpZGVyZWQgYXMgbm9uLWZhc3QtZm9yd2FyZAorCQkJCXByaW50IFNUREVSUiAnV2FybmluZzogRXJyb3IgJyAuCisJCQkJICAgICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuCisJCQkJICAgICcgZnJvbSBtZWRpd2lraTogJyAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuCisJCQkJICAgICIuXG4iOworCQkJCXJldHVybiAoJG9sZHJldmlkLCAibm9uLWZhc3QtZm9yd2FyZCIpOworCQkJfSBlbHNlIHsKKwkJCQkjIE90aGVyIGVycm9ycy4gU2hvdWxkbid0IGhhcHBlbiA9PiBqdXN0IGRpZSgpCisJCQkJZGllICdGYXRhbDogRXJyb3IgJyAuCisJCQkJICAgICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuCisJCQkJICAgICcgZnJvbSBtZWRpd2lraTogJyAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfTsKKwkJCX0KKwkJfQorCQkkbmV3cmV2aWQgPSAkcmVzdWx0LT57ZWRpdH0tPntuZXdyZXZpZH07CisJCXByaW50IFNUREVSUiAiUHVzaGVkIGZpbGU6ICRuZXdfc2hhMSAtICR0aXRsZVxuIjsKKwl9IGVsc2lmICgkZXhwb3J0X21lZGlhKSB7CisJCSRuZXdyZXZpZCA9IG13X3VwbG9hZF9maWxlKCRjb21wbGV0ZV9maWxlX25hbWUsICRuZXdfc2hhMSwKKwkJCQkJICAgJGV4dGVuc2lvbiwgJHBhZ2VfZGVsZXRlZCwKKwkJCQkJICAgJHN1bW1hcnkpOworCX0gZWxzZSB7CisJCXByaW50IFNUREVSUiAiSWdub3JpbmcgbWVkaWEgZmlsZSAkdGl0bGVcbiI7CisJfQorCSRuZXdyZXZpZCA9ICgkbmV3cmV2aWQgb3IgJG9sZHJldmlkKTsKKwlyZXR1cm4gKCRuZXdyZXZpZCwgIm9rIik7Cit9CisKK3N1YiBtd19wdXNoIHsKKwkjIG11bHRpcGxlIHB1c2ggc3RhdGVtZW50cyBjYW4gZm9sbG93IGVhY2ggb3RoZXIKKwlteSBAcmVmc3NwZWNzID0gKHNoaWZ0LCBnZXRfbW9yZV9yZWZzKCJwdXNoIikpOworCW15ICRwdXNoZWQ7CisJZm9yIG15ICRyZWZzcGVjIChAcmVmc3NwZWNzKSB7CisJCW15ICgkZm9yY2UsICRsb2NhbCwgJHJlbW90ZSkgPSAkcmVmc3BlYyA9fiAvXihcKyk/KFteOl0qKTooW146XSopJC8KKwkJICAgIG9yIGRpZSgiSW52YWxpZCByZWZzcGVjIGZvciBwdXNoLiBFeHBlY3RlZCA8c3JjPjo8ZHN0PiBvciArPHNyYz46PGRzdD4iKTsKKwkJaWYgKCRmb3JjZSkgeworCQkJcHJpbnQgU1RERVJSICJXYXJuaW5nOiBmb3JjZWQgcHVzaCBub3QgYWxsb3dlZCBvbiBhIE1lZGlhV2lraS5cbiI7CisJCX0KKwkJaWYgKCRsb2NhbCBlcSAiIikgeworCQkJcHJpbnQgU1RERVJSICJDYW5ub3QgZGVsZXRlIHJlbW90ZSBicmFuY2ggb24gYSBNZWRpYVdpa2lcbiI7CisJCQlwcmludCBTVERPVVQgImVycm9yICRyZW1vdGUgY2Fubm90IGRlbGV0ZVxuIjsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRyZW1vdGUgbmUgInJlZnMvaGVhZHMvbWFzdGVyIikgeworCQkJcHJpbnQgU1RERVJSICJPbmx5IHB1c2ggdG8gdGhlIGJyYW5jaCAnbWFzdGVyJyBpcyBzdXBwb3J0ZWQgb24gYSBNZWRpYVdpa2lcbiI7CisJCQlwcmludCBTVERPVVQgImVycm9yICRyZW1vdGUgb25seSBtYXN0ZXIgYWxsb3dlZFxuIjsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKG13X3B1c2hfcmV2aXNpb24oJGxvY2FsLCAkcmVtb3RlKSkgeworCQkJJHB1c2hlZCA9IDE7CisJCX0KKwl9CisKKwkjIE5vdGlmeSBHaXQgdGhhdCB0aGUgcHVzaCBpcyBkb25lCisJcHJpbnQgU1RET1VUICJcbiI7CisKKwlpZiAoJHB1c2hlZCAmJiAkZHVtYl9wdXNoKSB7CisJCXByaW50IFNUREVSUiAiSnVzdCBwdXNoZWQgc29tZSByZXZpc2lvbnMgdG8gTWVkaWFXaWtpLlxuIjsKKwkJcHJpbnQgU1RERVJSICJUaGUgcHVzaGVkIHJldmlzaW9ucyBub3cgaGF2ZSB0byBiZSByZS1pbXBvcnRlZCwgYW5kIHlvdXIgY3VycmVudCBicmFuY2hcbiI7CisJCXByaW50IFNUREVSUiAibmVlZHMgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZXNlIHJlLWltcG9ydGVkIGNvbW1pdHMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoXG4iOworCQlwcmludCBTVERFUlIgIlxuIjsKKwkJcHJpbnQgU1RERVJSICIgIGdpdCBwdWxsIC0tcmViYXNlXG4iOworCQlwcmludCBTVERFUlIgIlxuIjsKKwl9Cit9CisKK3N1YiBtd19wdXNoX3JldmlzaW9uIHsKKwlteSAkbG9jYWwgPSBzaGlmdDsKKwlteSAkcmVtb3RlID0gc2hpZnQ7ICMgYWN0dWFsbHksIHRoaXMgaGFzIHRvIGJlICJyZWZzL2hlYWRzL21hc3RlciIgYXQgdGhpcyBwb2ludC4KKwlteSAkbGFzdF9sb2NhbF9yZXZpZCA9IGdldF9sYXN0X2xvY2FsX3JldmlzaW9uKCk7CisJcHJpbnQgU1RERVJSICIuXG4iOyAjIEZpbmlzaCBzZW50ZW5jZSBzdGFydGVkIGJ5IGdldF9sYXN0X2xvY2FsX3JldmlzaW9uKCkKKwlteSAkbGFzdF9yZW1vdGVfcmV2aWQgPSBnZXRfbGFzdF9yZW1vdGVfcmV2aXNpb24oKTsKKwlteSAkbXdfcmV2aXNpb24gPSAkbGFzdF9yZW1vdGVfcmV2aWQ7CisKKwkjIEdldCBzaGExIG9mIGNvbW1pdCBwb2ludGVkIGJ5IGxvY2FsIEhFQUQKKwlteSAkSEVBRF9zaGExID0gcnVuX2dpdCgicmV2LXBhcnNlICRsb2NhbCAyPi9kZXYvbnVsbCIpOyBjaG9tcCgkSEVBRF9zaGExKTsKKwkjIEdldCBzaGExIG9mIGNvbW1pdCBwb2ludGVkIGJ5IHJlbW90ZXMvJHJlbW90ZW5hbWUvbWFzdGVyCisJbXkgJHJlbW90ZW9yaWdpbl9zaGExID0gcnVuX2dpdCgicmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy8kcmVtb3RlbmFtZS9tYXN0ZXIgMj4vZGV2L251bGwiKTsKKwljaG9tcCgkcmVtb3Rlb3JpZ2luX3NoYTEpOworCisJaWYgKCRsYXN0X2xvY2FsX3JldmlkID4gMCAmJgorCSAgICAkbGFzdF9sb2NhbF9yZXZpZCA8ICRsYXN0X3JlbW90ZV9yZXZpZCkgeworCQlyZXR1cm4gZXJyb3Jfbm9uX2Zhc3RfZm9yd2FyZCgkcmVtb3RlKTsKKwl9CisKKwlpZiAoJEhFQURfc2hhMSBlcSAkcmVtb3Rlb3JpZ2luX3NoYTEpIHsKKwkJIyBub3RoaW5nIHRvIHB1c2gKKwkJcmV0dXJuIDA7CisJfQorCisJIyBHZXQgZXZlcnkgY29tbWl0IGluIGJldHdlZW4gSEVBRCBhbmQgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIsCisJIyBpbmNsdWRpbmcgSEVBRCBhbmQgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKwlteSBAY29tbWl0X3BhaXJzID0gKCk7CisJaWYgKCRsYXN0X2xvY2FsX3JldmlkID4gMCkgeworCQlteSAkcGFyc2VkX3NoYTEgPSAkcmVtb3Rlb3JpZ2luX3NoYTE7CisJCSMgRmluZCBhIHBhdGggZnJvbSBsYXN0IE1lZGlhV2lraSBjb21taXQgdG8gcHVzaGVkIGNvbW1pdAorCQlwcmludCBTVERFUlIgIkNvbXB1dGluZyBwYXRoIGZyb20gbG9jYWwgdG8gcmVtb3RlIC4uLlxuIjsKKwkJbXkgQGxvY2FsX2FuY2VzdHJ5ID0gc3BsaXQoL1xuLywgcnVuX2dpdCgicmV2LWxpc3QgLS1ib3VuZGFyeSAtLXBhcmVudHMgJGxvY2FsIF4kcGFyc2VkX3NoYTEiKSk7CisJCW15ICVsb2NhbF9hbmNlc3RyeTsKKwkJZm9yZWFjaCBteSAkbGluZSAoQGxvY2FsX2FuY2VzdHJ5KSB7CisJCQlpZiAobXkgKCRjaGlsZCwgJHBhcmVudHMpID0gJGxpbmUgPX4gbS9eLT8oW2EtZjAtOV0rKSAoW2EtZjAtOSBdKykvKSB7CisJCQkJZm9yZWFjaCBteSAkcGFyZW50IChzcGxpdCgnICcsICRwYXJlbnRzKSkgeworCQkJCQkkbG9jYWxfYW5jZXN0cnl7JHBhcmVudH0gPSAkY2hpbGQ7CisJCQkJfQorCQkJfSBlbHNpZiAoISRsaW5lID1+IG0vXihbYS1mMC05XSspLykgeworCQkJCWRpZSAiVW5leHBlY3RlZCBvdXRwdXQgZnJvbSBnaXQgcmV2LWxpc3Q6ICRsaW5lIjsKKwkJCX0KKwkJfQorCQl3aGlsZSAoJHBhcnNlZF9zaGExIG5lICRIRUFEX3NoYTEpIHsKKwkJCW15ICRjaGlsZCA9ICRsb2NhbF9hbmNlc3RyeXskcGFyc2VkX3NoYTF9OworCQkJaWYgKCEkY2hpbGQpIHsKKwkJCQlwcmludGYgU1RERVJSICJDYW5ub3QgZmluZCBhIHBhdGggaW4gaGlzdG9yeSBmcm9tIHJlbW90ZSBjb21taXQgdG8gbGFzdCBjb21taXRcbiI7CisJCQkJcmV0dXJuIGVycm9yX25vbl9mYXN0X2ZvcndhcmQoJHJlbW90ZSk7CisJCQl9CisJCQlwdXNoKEBjb21taXRfcGFpcnMsIFskcGFyc2VkX3NoYTEsICRjaGlsZF0pOworCQkJJHBhcnNlZF9zaGExID0gJGNoaWxkOworCQl9CisJfSBlbHNlIHsKKwkJIyBObyByZW1vdGUgbWVkaWF3aWtpIHJldmlzaW9uLiBFeHBvcnQgdGhlIHdob2xlCisJCSMgaGlzdG9yeSAobGluZWFyaXplZCB3aXRoIC0tZmlyc3QtcGFyZW50KQorCQlwcmludCBTVERFUlIgIldhcm5pbmc6IG5vIGNvbW1vbiBhbmNlc3RvciwgcHVzaGluZyBjb21wbGV0ZSBoaXN0b3J5XG4iOworCQlteSAkaGlzdG9yeSA9IHJ1bl9naXQoInJldi1saXN0IC0tZmlyc3QtcGFyZW50IC0tY2hpbGRyZW4gJGxvY2FsIik7CisJCW15IEBoaXN0b3J5ID0gc3BsaXQoJ1xuJywgJGhpc3RvcnkpOworCQlAaGlzdG9yeSA9IEBoaXN0b3J5WzEuLiQjaGlzdG9yeV07CisJCWZvcmVhY2ggbXkgJGxpbmUgKHJldmVyc2UgQGhpc3RvcnkpIHsKKwkJCW15IEBjb21taXRfaW5mb19zcGxpdCA9IHNwbGl0KC8gfFxuLywgJGxpbmUpOworCQkJcHVzaChAY29tbWl0X3BhaXJzLCBcQGNvbW1pdF9pbmZvX3NwbGl0KTsKKwkJfQorCX0KKworCWZvcmVhY2ggbXkgJGNvbW1pdF9pbmZvX3NwbGl0IChAY29tbWl0X3BhaXJzKSB7CisJCW15ICRzaGExX2NoaWxkID0gQHskY29tbWl0X2luZm9fc3BsaXR9WzBdOworCQlteSAkc2hhMV9jb21taXQgPSBAeyRjb21taXRfaW5mb19zcGxpdH1bMV07CisJCW15ICRkaWZmX2luZm9zID0gcnVuX2dpdCgiZGlmZi10cmVlIC1yIC0tcmF3IC16ICRzaGExX2NoaWxkICRzaGExX2NvbW1pdCIpOworCQkjIFRPRE86IHdlIGNvdWxkIGRldGVjdCByZW5hbWUsIGFuZCBlbmNvZGUgdGhlbSB3aXRoIGEgI3JlZGlyZWN0IG9uIHRoZSB3aWtpLgorCQkjIFRPRE86IGZvciBub3csIGl0J3MganVzdCBhIGRlbGV0ZSthZGQKKwkJbXkgQGRpZmZfaW5mb19saXN0ID0gc3BsaXQoL1wwLywgJGRpZmZfaW5mb3MpOworCQkjIEtlZXAgdGhlIHN1YmplY3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgYXMgbWVkaWF3aWtpIGNvbW1lbnQgZm9yIHRoZSByZXZpc2lvbgorCQlteSAkY29tbWl0X21zZyA9IHJ1bl9naXQoImxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9XCIlc1wiICRzaGExX2NvbW1pdCIpOworCQljaG9tcCgkY29tbWl0X21zZyk7CisJCSMgUHVzaCBldmVyeSBibG9iCisJCXdoaWxlIChAZGlmZl9pbmZvX2xpc3QpIHsKKwkJCW15ICRzdGF0dXM7CisJCQkjIGdpdCBkaWZmLXRyZWUgLXogZ2l2ZXMgYW4gb3V0cHV0IGxpa2UKKwkJCSMgPG1ldGFkYXRhPlwwPGZpbGVuYW1lMT5cMAorCQkJIyA8bWV0YWRhdGE+XDA8ZmlsZW5hbWUyPlwwCisJCQkjIGFuZCB3ZSd2ZSBzcGxpdCBvbiBcMC4KKwkJCW15ICRpbmZvID0gc2hpZnQoQGRpZmZfaW5mb19saXN0KTsKKwkJCW15ICRmaWxlID0gc2hpZnQoQGRpZmZfaW5mb19saXN0KTsKKwkJCSgkbXdfcmV2aXNpb24sICRzdGF0dXMpID0gbXdfcHVzaF9maWxlKCRpbmZvLCAkZmlsZSwgJGNvbW1pdF9tc2csICRtd19yZXZpc2lvbik7CisJCQlpZiAoJHN0YXR1cyBlcSAibm9uLWZhc3QtZm9yd2FyZCIpIHsKKwkJCQkjIHdlIG1heSBhbHJlYWR5IGhhdmUgc2VudCBwYXJ0IG9mIHRoZQorCQkJCSMgY29tbWl0IHRvIE1lZGlhV2lraSwgYnV0IGl0J3MgdG9vCisJCQkJIyBsYXRlIHRvIGNhbmNlbCBpdC4gU3RvcCB0aGUgcHVzaCBpbgorCQkJCSMgdGhlIG1pZGRsZSwgYnV0IHN0aWxsIGdpdmUgYW4KKwkJCQkjIGFjY3VyYXRlIGVycm9yIG1lc3NhZ2UuCisJCQkJcmV0dXJuIGVycm9yX25vbl9mYXN0X2ZvcndhcmQoJHJlbW90ZSk7CisJCQl9CisJCQlpZiAoJHN0YXR1cyBuZSAib2siKSB7CisJCQkJZGllKCJVbmtub3duIGVycm9yIGZyb20gbXdfcHVzaF9maWxlKCkiKTsKKwkJCX0KKwkJfQorCQl1bmxlc3MgKCRkdW1iX3B1c2gpIHsKKwkJCXJ1bl9naXQoIm5vdGVzIC0tcmVmPSRyZW1vdGVuYW1lL21lZGlhd2lraSBhZGQgLWYgLW0gXCJtZWRpYXdpa2lfcmV2aXNpb246ICRtd19yZXZpc2lvblwiICRzaGExX2NvbW1pdCIpOworCQkJcnVuX2dpdCgidXBkYXRlLXJlZiAtbSBcIkdpdC1NZWRpYVdpa2kgcHVzaFwiIHJlZnMvbWVkaWF3aWtpLyRyZW1vdGVuYW1lL21hc3RlciAkc2hhMV9jb21taXQgJHNoYTFfY2hpbGQiKTsKKwkJfQorCX0KKworCXByaW50IFNURE9VVCAib2sgJHJlbW90ZVxuIjsKKwlyZXR1cm4gMTsKK30KKworc3ViIGdldF9hbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyB7CisJbXdfY29ubmVjdF9tYXliZSgpOworCisJbXkgJHF1ZXJ5ID0geworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJbWV0YSA9PiAnc2l0ZWluZm8nLAorCQlzaXByb3AgPT4gJ2ZpbGVleHRlbnNpb25zJworCQl9OworCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKwlteSBAZmlsZV9leHRlbnNpb25zPSBtYXAgJF8tPntleHR9LEB7JHJlc3VsdC0+e3F1ZXJ5fS0+e2ZpbGVleHRlbnNpb25zfX07CisJbXkgJWhhc2hGaWxlID0gbWFwIHskXyA9PiAxfUBmaWxlX2V4dGVuc2lvbnM7CisKKwlyZXR1cm4gJWhhc2hGaWxlOworfQorCisjIEluIG1lbW9yeSBjYWNoZSBmb3IgTWVkaWFXaWtpIG5hbWVzcGFjZSBpZHMuCitteSAlbmFtZXNwYWNlX2lkOworCisjIE5hbWVzcGFjZXMgd2hvc2UgaWQgaXMgY2FjaGVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKyMgKHRvIGF2b2lkIGR1cGxpY2F0ZXMpCitteSAlY2FjaGVkX213X25hbWVzcGFjZV9pZDsKKworIyBSZXR1cm4gTWVkaWFXaWtpIGlkIGZvciBhIGNhbm9uaWNhbCBuYW1lc3BhY2UgbmFtZS4KKyMgRXguOiAiRmlsZSIsICJQcm9qZWN0Ii4KK3N1YiBnZXRfbXdfbmFtZXNwYWNlX2lkIHsKKwltd19jb25uZWN0X21heWJlKCk7CisJbXkgJG5hbWUgPSBzaGlmdDsKKworCWlmICghZXhpc3RzICRuYW1lc3BhY2VfaWR7JG5hbWV9KSB7CisJCSMgTG9vayBhdCBjb25maWd1cmF0aW9uIGZpbGUsIGlmIHRoZSByZWNvcmQgZm9yIHRoYXQgbmFtZXNwYWNlIGlzCisJCSMgYWxyZWFkeSBjYWNoZWQuIE5hbWVzcGFjZXMgYXJlIHN0b3JlZCBpbiBmb3JtOgorCQkjICJOYW1lX29mX25hbWVzcGFjZTpJZF9uYW1lc3BhY2UiLCBleC46ICJGaWxlOjYiLgorCQlteSBAdGVtcCA9IHNwbGl0KC9bXG5dLywgcnVuX2dpdCgiY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuIgorCQkJCQkJLiAkcmVtb3RlbmFtZSAuIi5uYW1lc3BhY2VDYWNoZSIpKTsKKwkJY2hvbXAoQHRlbXApOworCQlmb3JlYWNoIG15ICRucyAoQHRlbXApIHsKKwkJCW15ICgkbiwgJGlkKSA9IHNwbGl0KC86LywgJG5zKTsKKwkJCWlmICgkaWQgZXEgJ25vdEFOYW1lU3BhY2UnKSB7CisJCQkJJG5hbWVzcGFjZV9pZHskbn0gPSB7aXNfbmFtZXNwYWNlID0+IDB9OworCQkJfSBlbHNlIHsKKwkJCQkkbmFtZXNwYWNlX2lkeyRufSA9IHtpc19uYW1lc3BhY2UgPT4gMSwgaWQgPT4gJGlkfTsKKwkJCX0KKwkJCSRjYWNoZWRfbXdfbmFtZXNwYWNlX2lkeyRufSA9IDE7CisJCX0KKwl9CisKKwlpZiAoIWV4aXN0cyAkbmFtZXNwYWNlX2lkeyRuYW1lfSkgeworCQlwcmludCBTVERFUlIgIk5hbWVzcGFjZSAkbmFtZSBub3QgZm91bmQgaW4gY2FjaGUsIHF1ZXJ5aW5nIHRoZSB3aWtpIC4uLlxuIjsKKwkJIyBOUyBub3QgZm91bmQgPT4gZ2V0IG5hbWVzcGFjZSBpZCBmcm9tIE1XIGFuZCBzdG9yZSBpdCBpbgorCSAgICAgICAgIyBjb25maWd1cmF0aW9uIGZpbGUuCisJICAgICAgICBteSAkcXVlcnkgPSB7CisJICAgICAgICAgICAgICAgIGFjdGlvbiA9PiAncXVlcnknLAorCSAgICAgICAgICAgICAgICBtZXRhID0+ICdzaXRlaW5mbycsCisJICAgICAgICAgICAgICAgIHNpcHJvcCA9PiAnbmFtZXNwYWNlcycKKwkgICAgICAgIH07CisJICAgICAgICBteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7CisKKwkgICAgICAgIHdoaWxlIChteSAoJGlkLCAkbnMpID0gZWFjaCgleyRyZXN1bHQtPntxdWVyeX0tPntuYW1lc3BhY2VzfX0pKSB7CisJICAgICAgICAgICAgICAgIGlmIChkZWZpbmVkKCRucy0+e2lkfSkgJiYgZGVmaW5lZCgkbnMtPntjYW5vbmljYWx9KSkgeworCQkJCSRuYW1lc3BhY2VfaWR7JG5zLT57Y2Fub25pY2FsfX0gPSB7aXNfbmFtZXNwYWNlID0+IDEsIGlkID0+ICRucy0+e2lkfX07CisJCQkJaWYgKCRucy0+eycqJ30pIHsKKwkJCQkJIyBhbGlhcyAoZS5nLiBmcmVuY2ggRmljaGllcjogYXMgYWxpYXMgZm9yIGNhbm9uaWNhbCBGaWxlOikKKwkJCQkJJG5hbWVzcGFjZV9pZHskbnMtPnsnKid9fSA9IHtpc19uYW1lc3BhY2UgPT4gMSwgaWQgPT4gJG5zLT57aWR9fTsKKwkJCQl9CisJCQl9CisJICAgICAgICB9CisJfQorCisJbXkgJG5zID0gJG5hbWVzcGFjZV9pZHskbmFtZX07CisJbXkgJGlkOworCisJdW5sZXNzIChkZWZpbmVkICRucykgeworCQlwcmludCBTVERFUlIgIk5vIHN1Y2ggbmFtZXNwYWNlICRuYW1lIG9uIE1lZGlhV2lraS5cbiI7CisJCSRucyA9IHtpc19uYW1lc3BhY2UgPT4gMH07CisJCSRuYW1lc3BhY2VfaWR7JG5hbWV9ID0gJG5zOworCX0KKworCWlmICgkbnMtPntpc19uYW1lc3BhY2V9KSB7CisJCSRpZCA9ICRucy0+e2lkfTsKKwl9CisKKwkjIFN0b3JlICJub3RBTmFtZVNwYWNlIiBhcyBzcGVjaWFsIHZhbHVlIGZvciBpbmV4aXN0aW5nIG5hbWVzcGFjZXMKKwlteSAkc3RvcmVfaWQgPSAoJGlkIHx8ICdub3RBTmFtZVNwYWNlJyk7CisKKwkjIFN0b3JlIGV4cGxpY2l0ZWx5IHJlcXVlc3RlZCBuYW1lc3BhY2VzIG9uIGRpc2sKKwlpZiAoIWV4aXN0cyAkY2FjaGVkX213X25hbWVzcGFjZV9pZHskbmFtZX0pIHsKKwkJcnVuX2dpdCgiY29uZmlnIC0tYWRkIHJlbW90ZS4iLiAkcmVtb3RlbmFtZQorCQkJLiIubmFtZXNwYWNlQ2FjaGUgXCIiLiAkbmFtZSAuIjoiLiAkc3RvcmVfaWQgLiJcIiIpOworCQkkY2FjaGVkX213X25hbWVzcGFjZV9pZHskbmFtZX0gPSAxOworCX0KKwlyZXR1cm4gJGlkOworfQorCitzdWIgZ2V0X213X25hbWVzcGFjZV9pZF9mb3JfcGFnZSB7CisJaWYgKG15ICgkbmFtZXNwYWNlKSA9ICRfWzBdID1+IC9eKFteOl0qKTovKSB7CisJCXJldHVybiBnZXRfbXdfbmFtZXNwYWNlX2lkKCRuYW1lc3BhY2UpOworCX0gZWxzZSB7CisJCXJldHVybjsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS50eHQgYi9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyMTFmNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnR4dApAQCAtMCwwICsxLDcgQEAKK0dpdC1NZWRpYXdpa2kgaXMgYSBwcm9qZWN0IHdoaWNoIGFpbXMgdGhlIGNyZWF0aW9uIG9mIGEgZ2F0ZQorYmV0d2VlbiBnaXQgYW5kIG1lZGlhd2lraSwgYWxsb3dpbmcgZ2l0IHVzZXJzIHRvIHB1c2ggYW5kIHB1bGwKK29iamVjdHMgZnJvbSBtZWRpYXdpa2kganVzdCBhcyBvbmUgd291bGQgZG8gd2l0aCBhIGNsYXNzaWMgZ2l0CityZXBvc2l0b3J5IHRoYW5rcyB0byByZW1vdGUtaGVscGVycy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSB3aWtpIGF0CitodHRwczovL2dpdGh1Yi5jb20vQmliemJhbGwvR2l0LU1lZGlhd2lraS93aWtpCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90Ly5naXRpZ25vcmUgYi9jb250cmliL213LXRvLWdpdC90Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhNDBiNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKK1dFQi8KK3dpa2kvCit0cmFzaCBkaXJlY3RvcnkudCovCit0ZXN0LXJlc3VsdHMvCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L01ha2VmaWxlIGIvY29udHJpYi9tdy10by1naXQvdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDIyMjAzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC9NYWtlZmlsZQpAQCAtMCwwICsxLDMxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMgorIyAgICAgQ2hhcmxlcyBSb3Vzc2VsIDxjaGFybGVzLnJvdXNzZWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gQ2F0aGVicmFzIDxzaW1vbi5jYXRoZWJyYXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgSnVsaWVuIEtoYXlhdCA8anVsaWVuLmtoYXlhdEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBHdWlsbGF1bWUgU2FzZHkgPGd1aWxsYXVtZS5zYXNkeUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBQZXJyYXQgPHNpbW9uLnBlcnJhdEBlbnNpbWFnLmltYWcuZnI+CisjCisjIyBUZXN0IGdpdC1yZW1vdGUtbWVkaWF3aWtpCisKK2FsbDogdGVzdAorCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworVCA9ICQod2lsZGNhcmQgdFswLTldWzAtOV1bMC05XVswLTldLSouc2gpCisKKy5QSE9OWTogaGVscCB0ZXN0IGNsZWFuIGFsbAorCitoZWxwOgorCUBlY2hvICdSdW4gIiQoTUFLRSkgdGVzdCIgdG8gbGF1bmNoIHRlc3Qgc2NyaXB0cycKKwlAZWNobyAnUnVuICIkKE1BS0UpIGNsZWFuIiB0byByZW1vdmUgdHJhc2ggZm9sZGVycycKKwordGVzdDoKKwlAZm9yIHQgaW4gJChUKTsgZG8gXAorCQllY2hvICIkJHQiOyBcCisJCSIuLyQkdCIgfHwgZXhpdCAxOyBcCisJZG9uZQorCitjbGVhbjoKKwkkKFJNKSAtciAndHJhc2ggZGlyZWN0b3J5Jy4qCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L1JFQURNRSBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTk3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L1JFQURNRQpAQCAtMCwwICsxLDEyNCBAQAorVGVzdHMgZm9yIE1lZGlhd2lraS10by1HaXQKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCitUaGlzIG1hbnVhbCBkZXNjcmliZXMgaG93IHRvIGluc3RhbGwgdGhlIGdpdC1yZW1vdGUtbWVkaWF3aWtpIHRlc3QKK2Vudmlyb25tZW50IG9uIGEgbWFjaGluZSB3aXRoIGdpdCBpbnN0YWxsZWQgb24gaXQuCisKK1ByZXJlcXVpc2l0ZQorLS0tLS0tLS0tLS0tCisKK0luIG9yZGVyIHRvIHJ1biB0aGlzIHRlc3QgZW52aXJvbm1lbnQgY29ycmVjdGx5LCB5b3Ugd2lsbCBuZWVkIHRvCitpbnN0YWxsIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgKERlYmlhbi9VYnVudHUgbmFtZXMsIG1heSBuZWVkIHRvIGJlCithZGFwdGVkIGZvciBhbm90aGVyIGRpc3RyaWJ1dGlvbik6CisKKyogbGlnaHR0cGQKKyogcGhwNQorKiBwaHA1LWNnaQorKiBwaHA1LWNsaQorKiBwaHA1LWN1cmwKKyogcGhwNS1zcWxpdGUKKworUHJpbmNpcGxlcyBhbmQgVGVjaG5pY2FsIENob2ljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB0ZXN0IGVudmlyb25tZW50IG1ha2VzIGl0IGVhc3kgdG8gaW5zdGFsbCBhbmQgbWFuaXB1bGF0ZSBvbmUgb3IKK3NldmVyYWwgTWVkaWFXaWtpIGluc3RhbmNlcy4gVG8gYWxsb3cgZGV2ZWxvcGVycyB0byBydW4gdGhlIHRlc3RzdWl0ZQorZWFzaWx5LCB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3QgcmVxdWlyZSByb290IHByaXZpbGVkZ2UgKGV4Y2VwdCB0bworaW5zdGFsbCB0aGUgcmVxdWlyZWQgcGFja2FnZXMgaWYgbmVlZGVkKS4gSXQgc3RhcnRzIGEgd2Vic2VydmVyCitpbnN0YW5jZSBvbiB0aGUgdXNlcidzIGFjY291bnQgKHVzaW5nIGxpZ2h0dHBkIGdyZWF0bHkgaGVscHMgZm9yCit0aGF0KSwgYW5kIGRvZXMgbm90IG5lZWQgYSBzZXBhcmF0ZSBkYXRhYmFzZSBkYWVtb24gKHRoYW5rcyB0byB0aGUgdXNlCitvZiBzcWxpdGUpLgorCitSdW4gdGhlIHRlc3QgZW52aXJvbm1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnN0YWxsIGEgbmV3IHdpa2kKK35+fn5+fn5+fn5+fn5+fn5+fgorCitPbmNlIHlvdSBoYXZlIGFsbCB0aGUgcHJlcmVxdWlzaXRlLCB5b3UgbmVlZCB0byBpbnN0YWxsIGEgTWVkaWFXaWtpCitpbnN0YW5jZSBvbiB5b3VyIG1hY2hpbmUuIElmIHlvdSBhbHJlYWR5IGhhdmUgb25lLCBpdCBpcyBzdGlsbAorc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gaW5zdGFsbCBvbmUgd2l0aCB0aGUgc2NyaXB0IHByb3ZpZGVkLiBIZXJlJ3MKK2hvdyB0byB3b3JrIGl0OgorCithLiBjaGFuZ2UgZGlyZWN0b3J5IHRvIGNvbnRyaWIvbXctdG8tZ2l0L3QvCitiLiBpZiBuZWVkZWQsIGVkaXQgdGVzdC5jb25maWcgdG8gY2hvb3NlIHlvdXIgaW5zdGFsbGF0aW9uIHBhcmFtZXRlcnMKK2MuIHJ1biBgLi9pbnN0YWxsLXdpa2kuc2ggaW5zdGFsbGAKK2QuIGNoZWNrIG9uIHlvdXIgZmF2b3VyaXRlIHdlYiBicm93c2VyIGlmIHlvdXIgd2lraSBpcyBjb3JyZWN0bHkKKyAgIGluc3RhbGxlZC4KKworUmVtb3ZlIGFuIGV4aXN0aW5nIHdpa2kKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0VkaXQgdGhlIGZpbGUgdGVzdC5jb25maWcgdG8gZml0IHRoZSB3aWtpIHlvdSB3YW50IHRvIGRlbGV0ZSwgYW5kIHRoZW4KK2V4ZWN1dGUgdGhlIGNvbW1hbmQgYC4vaW5zdGFsbC13aWtpLnNoIGRlbGV0ZWAgZnJvbSB0aGUKK2NvbnRyaWIvbXctdG8tZ2l0L3QgZGlyZWN0b3J5LgorCitSdW4gdGhlIGV4aXN0aW5nIHRlc3RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBwcm92aWRlZCB0ZXN0cyBhcmUgY3VycmVudGx5IGluIHRoZSBgY29udHJpYi9tdy10by1naXQvdGAgZGlyZWN0b3J5LgorVGhlIGZpbGVzIGFyZSBhbGwgdGhlIHQ5MzZbMC05XS0qLnNoIHNoZWxsIHNjcmlwdHMuCisKK2EuIFJ1biBhbGwgdGVzdHM6CitUbyBkbyBzbywgcnVuICJtYWtlIHRlc3QiIGZyb20gdGhlIGNvbnRyaWIvbXctdG8tZ2l0LyBkaXJlY3RvcnkuCisKK2IuIFJ1biBhIHNwZWNpZmljIHRlc3Q6CitUbyBydW4gYSBnaXZlbiB0ZXN0IDx0ZXN0X25hbWU+LCBydW4gLi88dGVzdF9uYW1lPiBmcm9tIHRoZQorY29udHJpYi9tdy10by1naXQvdCBkaXJlY3RvcnkuCisKK0hvdyB0byBjcmVhdGUgbmV3IHRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBdmFpbGFibGUgZnVuY3Rpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSB0ZXN0IGVudmlyb25tZW50IG9mIGdpdC1yZW1vdGUtbWVkaWF3aWtpIHByb3ZpZGVzIHNvbWUgZnVuY3Rpb25zCit1c2VmdWwgdG8gdGVzdCBpdHMgYmVoYXZpb3VyLiBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBmdW5jdGlvbnMnCitwYXJhbWV0ZXJzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGB0ZXN0LWdpdG13LWxpYi5zaGAgYW5kCitgdGVzdC1naXRtdy5wbGAgZmlsZXMuCisKKyoqIGB0ZXN0X2NoZWNrX3dpa2lfcHJlY29uZGA6CitDaGVjayBpZiB0aGUgdGVzdHMgbXVzdCBiZSBza2lwcGVkIG9yIG5vdC4gUGxlYXNlIHVzZSB0aGlzIGZ1bmN0aW9uCithdCB0aGUgYmVnZ2luaW5nIG9mIGVhY2ggbmV3IHRlc3QgZmlsZS4KKworKiogYHdpa2lfZ2V0cGFnZWA6CitGZXRjaCBhIGdpdmVuIHBhZ2UgZnJvbSB0aGUgd2lraSBhbmQgcHV0cyBpdHMgY29udGVudCBpbiB0aGUKK2RpcmVjdG9yeSBpbiBwYXJhbWV0ZXIuCisKKyoqIGB3aWtpX2RlbGV0ZV9wYWdlYDoKK0RlbGV0ZSBhIGdpdmVuIHBhZ2UgZnJvbSB0aGUgd2lraS4KKworKiogYHdpa2lfZWRpdF9wYWdlYDoKK0NyZWF0ZSBvciBtb2RpZnkgYSBnaXZlbiBwYWdlIGluIHRoZSB3aWtpLiBZb3UgY2FuIHNwZWNpZnkgc2V2ZXJhbAorcGFyYW1ldGVycyBsaWtlIGEgc3VtbWFyeSBmb3IgdGhlIHBhZ2UgZWRpdGlvbiwgb3IgYWRkIHRoZSBwYWdlIHRvIGEKK2dpdmVuIGNhdGVnb3J5LgorU2VlIHRlc3QtZ2l0bXcucGwgZm9yIG1vcmUgZGV0YWlscy4KKworKiogYHdpa2lfZ2V0YWxscGFnZWA6CitGZXRjaCBhbGwgcGFnZXMgZnJvbSB0aGUgd2lraSBpbnRvIGEgZ2l2ZW4gZGlyZWN0b3J5LiBUaGUgZGlyZWN0b3J5CitpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGV4aXN0cy4KKworKiogYHRlc3RfZGlmZl9kaXJlY3Rvcmllc2A6CitDb21wYXJlIHRoZSBjb250ZW50IG9mIHR3byBkaXJlY3Rvcmllcy4gVGhlIGNvbnRlbnQgbXVzdCBiZSB0aGUgc2FtZS4KK1VzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbXBhcmUgdGhlIGNvbnRlbnQgb2YgYSBnaXQgZGlyZWN0b3J5IGFuZCBhIHdpa2kKK29uZSBjcmVhdGVkIGJ5IHdpa2lfZ2V0YWxscGFnZS4KKworKiogYHRlc3RfY29udGFpbnNfTl9maWxlc2A6CitDaGVjayBpZiB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGNvbnRhaW5zIGEgZ2l2ZW4gbnVtYmVyIG9mIGZpbGUuCisKKyoqIGB3aWtpX3BhZ2VfZXhpc3RzYDoKK1Rlc3RzIGlmIGEgZ2l2ZW4gcGFnZSBleGlzdHMgb24gdGhlIHdpa2kuCisKKyoqIGB3aWtpX3Jlc2V0YDoKK1Jlc2V0IHRoZSB3aWtpLCBpLmUuIGZsdXNoIHRoZSBkYXRhYmFzZS4gVXNlIHRoaXMgZnVuY3Rpb24gYXQgdGhlCitiZWdpbmluZyBvZiBlYWNoIG5ldyB0ZXN0LCBleGNlcHQgaWYgdGhlIHRlc3QgcmUtdXNlcyB0aGUgc2FtZSB3aWtpCisoYW5kIGhpc3RvcnkpIGFzIHRoZSBwcmV2aW91cyB0ZXN0LgorCitIb3cgdG8gd3JpdGUgYSBuZXcgdGVzdAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworUGxlYXNlLCBmb2xsb3cgdGhlIHN0YW5kYXJkcyBnaXZlbiBieSBnaXQuIFNlZSBnaXQvdC9SRUFETUUuCitOZXcgZmlsZSBzaG91bGQgYmUgbmFtZWQgYXMgdDkzNlswLTldLSouc2guCitCZSBzdXJlIHRvIHJlc2V0IHlvdXIgd2lraSByZWd1bGFyeSB3aXRoIHRoZSBmdW5jdGlvbiBgd2lraV9yZXNldGAuCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2ZDZmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS5zaApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKworIyBUaGlzIHNjcmlwdCBpbnN0YWxscyBvciBkZWxldGVzIGEgTWVkaWFXaWtpIG9uIHlvdXIgY29tcHV0ZXIuCisjIEl0IHJlcXVpcmVzIGEgd2ViIHNlcnZlciB3aXRoIFBIUCBhbmQgU1FMaXRlIHJ1bm5pbmcuIEluIGFkZGl0aW9uLCBpZiB5b3UKKyMgZG8gbm90IGhhdmUgTWVkaWFXaWtpIHNvdXJjZXMgb24geW91ciBjb21wdXRlciwgdGhlIG9wdGlvbiAnaW5zdGFsbCcKKyMgZG93bmxvYWRzIHRoZW0gZm9yIHlvdS4KKyMgUGxlYXNlIHNldCB0aGUgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgaW4gLi90ZXN0LWdpdG13LWxpYi5zaAorCitXSUtJX1RFU1RfRElSPSQoY2QgIiQoZGlybmFtZSAiJDAiKSIgJiYgcHdkKQorCitpZiB0ZXN0IC16ICIkV0lLSV9URVNUX0RJUiIKK3RoZW4KKwlXSUtJX1RFU1RfRElSPS4KK2ZpCisKKy4gIiRXSUtJX1RFU1RfRElSIi90ZXN0LWdpdG13LWxpYi5zaAordXNhZ2UgKCkgeworCWVjaG8gIlVzYWdlOiAiCisJZWNobyAiCS4vaW5zdGFsbC13aWtpLnNoIDxpbnN0YWxsIHwgZGVsZXRlIHwgLS1oZWxwPiIKKwllY2hvICIJCWluc3RhbGwgfCAtaSA6CUluc3RhbGwgYSB3aWtpIG9uIHlvdXIgY29tcHV0ZXIuIgorCWVjaG8gIgkJZGVsZXRlIHwgLWQgOiBEZWxldGUgdGhlIHdpa2kgYW5kIGFsbCBpdHMgcGFnZXMgYW5kICIKKwllY2hvICIJCQljb250ZW50LiIKK30KKworCisjIEFyZ3VtZW50OiBpbnN0YWxsLCBkZWxldGUsIC0taGVscCB8IC1oCitjYXNlICIkMSIgaW4KKwkiaW5zdGFsbCIgfCAiLWkiKQorCQl3aWtpX2luc3RhbGwKKwkJZXhpdCAwCisJCTs7CisJImRlbGV0ZSIgfCAiLWQiKQorCQl3aWtpX2RlbGV0ZQorCQlleGl0IDAKKwkJOzsKKwkiLS1oZWxwIiB8ICItaCIpCisJCXVzYWdlCisJCWV4aXQgMAorCQk7OworCSopCisJCWVjaG8gIkludmFsaWQgYXJndW1lbnQ6ICQxIgorCQl1c2FnZQorCQlleGl0IDEKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpLy5naXRpZ25vcmUgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTJhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3dpa2lkYi5zcWxpdGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL0xvY2FsU2V0dGluZ3MucGhwIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvTG9jYWxTZXR0aW5ncy5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmMTI1MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL0xvY2FsU2V0dGluZ3MucGhwCkBAIC0wLDAgKzEsMTI5IEBACis8P3BocAorIyBUaGlzIGZpbGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHRoZSBNZWRpYVdpa2kgMS4xOS4wCisjIGluc3RhbGxlci4gSWYgeW91IG1ha2UgbWFudWFsIGNoYW5nZXMsIHBsZWFzZSBrZWVwIHRyYWNrIGluIGNhc2UgeW91CisjIG5lZWQgdG8gcmVjcmVhdGUgdGhlbSBsYXRlci4KKyMKKyMgU2VlIGluY2x1ZGVzL0RlZmF1bHRTZXR0aW5ncy5waHAgZm9yIGFsbCBjb25maWd1cmFibGUgc2V0dGluZ3MKKyMgYW5kIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBidXQgZG9uJ3QgZm9yZ2V0IHRvIG1ha2UgY2hhbmdlcyBpbiBfdGhpc18KKyMgZmlsZSwgbm90IHRoZXJlLgorIworIyBGdXJ0aGVyIGRvY3VtZW50YXRpb24gZm9yIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgbWF5IGJlIGZvdW5kIGF0OgorIyBodHRwOi8vd3d3Lm1lZGlhd2lraS5vcmcvd2lraS9NYW51YWw6Q29uZmlndXJhdGlvbl9zZXR0aW5ncworCisjIFByb3RlY3QgYWdhaW5zdCB3ZWIgZW50cnkKK2lmICggIWRlZmluZWQoICdNRURJQVdJS0knICkgKSB7CisJZXhpdDsKK30KKworIyMgVW5jb21tZW50IHRoaXMgdG8gZGlzYWJsZSBvdXRwdXQgY29tcHJlc3Npb24KKyMgJHdnRGlzYWJsZU91dHB1dENvbXByZXNzaW9uID0gdHJ1ZTsKKworJHdnU2l0ZW5hbWUgICAgICA9ICJHaXQtTWVkaWFXaWtpLVRlc3QiOworJHdnTWV0YU5hbWVzcGFjZSA9ICJHaXQtTWVkaWFXaWtpLVRlc3QiOworCisjIyBUaGUgVVJMIGJhc2UgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHdpa2k7CisjIyBkZWZhdWx0cyBmb3IgYWxsIHJ1bnRpbWUgVVJMIHBhdGhzIGFyZSBiYXNlZCBvZmYgb2YgdGhpcy4KKyMjIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGN1c3RvbWl6aW5nIHRoZSBVUkxzIHBsZWFzZSBzZWU6CisjIyBodHRwOi8vd3d3Lm1lZGlhd2lraS5vcmcvd2lraS9NYW51YWw6U2hvcnRfVVJMCiskd2dTY3JpcHRQYXRoICAgICAgID0gIkBXR19TQ1JJUFRfUEFUSEAiOworJHdnU2NyaXB0RXh0ZW5zaW9uICA9ICIucGhwIjsKKworIyMgVGhlIHByb3RvY29sIGFuZCBzZXJ2ZXIgbmFtZSB0byB1c2UgaW4gZnVsbHktcXVhbGlmaWVkIFVSTHMKKyR3Z1NlcnZlciAgICAgICAgICAgPSAiQFdHX1NFUlZFUkAiOworCisjIyBUaGUgcmVsYXRpdmUgVVJMIHBhdGggdG8gdGhlIHNraW5zIGRpcmVjdG9yeQorJHdnU3R5bGVQYXRoICAgICAgICA9ICIkd2dTY3JpcHRQYXRoL3NraW5zIjsKKworIyMgVGhlIHJlbGF0aXZlIFVSTCBwYXRoIHRvIHRoZSBsb2dvLiAgTWFrZSBzdXJlIHlvdSBjaGFuZ2UgdGhpcyBmcm9tIHRoZSBkZWZhdWx0LAorIyMgb3IgZWxzZSB5b3UnbGwgb3ZlcndyaXRlIHlvdXIgbG9nbyB3aGVuIHlvdSB1cGdyYWRlIQorJHdnTG9nbyAgICAgICAgICAgICA9ICIkd2dTdHlsZVBhdGgvY29tbW9uL2ltYWdlcy93aWtpLnBuZyI7CisKKyMjIFVQTyBtZWFuczogdGhpcyBpcyBhbHNvIGEgdXNlciBwcmVmZXJlbmNlIG9wdGlvbgorCiskd2dFbmFibGVFbWFpbCAgICAgID0gdHJ1ZTsKKyR3Z0VuYWJsZVVzZXJFbWFpbCAgPSB0cnVlOyAjIFVQTworCiskd2dFbWVyZ2VuY3lDb250YWN0ID0gImFwYWNoZUBsb2NhbGhvc3QiOworJHdnUGFzc3dvcmRTZW5kZXIgICA9ICJhcGFjaGVAbG9jYWxob3N0IjsKKworJHdnRW5vdGlmVXNlclRhbGsgICAgICA9IGZhbHNlOyAjIFVQTworJHdnRW5vdGlmV2F0Y2hsaXN0ICAgICA9IGZhbHNlOyAjIFVQTworJHdnRW1haWxBdXRoZW50aWNhdGlvbiA9IHRydWU7CisKKyMjIERhdGFiYXNlIHNldHRpbmdzCiskd2dEQnR5cGUgICAgICAgICAgID0gInNxbGl0ZSI7Ciskd2dEQnNlcnZlciAgICAgICAgID0gIiI7Ciskd2dEQm5hbWUgICAgICAgICAgID0gIkBXR19TUUxJVEVfREFUQUZJTEVAIjsKKyR3Z0RCdXNlciAgICAgICAgICAgPSAiIjsKKyR3Z0RCcGFzc3dvcmQgICAgICAgPSAiIjsKKworIyBTUUxpdGUtc3BlY2lmaWMgc2V0dGluZ3MKKyR3Z1NRTGl0ZURhdGFEaXIgICAgPSAiQFdHX1NRTElURV9EQVRBRElSQCI7CisKKworIyMgU2hhcmVkIG1lbW9yeSBzZXR0aW5ncworJHdnTWFpbkNhY2hlVHlwZSAgICA9IENBQ0hFX05PTkU7Ciskd2dNZW1DYWNoZWRTZXJ2ZXJzID0gYXJyYXkoKTsKKworIyMgVG8gZW5hYmxlIGltYWdlIHVwbG9hZHMsIG1ha2Ugc3VyZSB0aGUgJ2ltYWdlcycgZGlyZWN0b3J5CisjIyBpcyB3cml0YWJsZSwgdGhlbiBzZXQgdGhpcyB0byB0cnVlOgorJHdnRW5hYmxlVXBsb2FkcyAgPSB0cnVlOworJHdnVXNlSW1hZ2VNYWdpY2sgPSB0cnVlOworJHdnSW1hZ2VNYWdpY2tDb252ZXJ0Q29tbWFuZCA9IkBDT05WRVJUQCI7Ciskd2dGaWxlRXh0ZW5zaW9uc1tdID0gJ3R4dCc7CisKKyMgSW5zdGFudENvbW1vbnMgYWxsb3dzIHdpa2kgdG8gdXNlIGltYWdlcyBmcm9tIGh0dHA6Ly9jb21tb25zLndpa2ltZWRpYS5vcmcKKyR3Z1VzZUluc3RhbnRDb21tb25zICA9IGZhbHNlOworCisjIyBJZiB5b3UgdXNlIEltYWdlTWFnaWNrIChvciBhbnkgb3RoZXIgc2hlbGwgY29tbWFuZCkgb24gYQorIyMgTGludXggc2VydmVyLCB0aGlzIHdpbGwgbmVlZCB0byBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgYW4KKyMjIGF2YWlsYWJsZSBVVEYtOCBsb2NhbGUKKyR3Z1NoZWxsTG9jYWxlID0gImVuX1VTLnV0ZjgiOworCisjIyBJZiB5b3Ugd2FudCB0byB1c2UgaW1hZ2UgdXBsb2FkcyB1bmRlciBzYWZlIG1vZGUsCisjIyBjcmVhdGUgdGhlIGRpcmVjdG9yaWVzIGltYWdlcy9hcmNoaXZlLCBpbWFnZXMvdGh1bWIgYW5kCisjIyBpbWFnZXMvdGVtcCwgYW5kIG1ha2UgdGhlbSBhbGwgd3JpdGFibGUuIFRoZW4gdW5jb21tZW50CisjIyB0aGlzLCBpZiBpdCdzIG5vdCBhbHJlYWR5IHVuY29tbWVudGVkOgorIyR3Z0hhc2hlZFVwbG9hZERpcmVjdG9yeSA9IGZhbHNlOworCisjIyBTZXQgJHdnQ2FjaGVEaXJlY3RvcnkgdG8gYSB3cml0YWJsZSBkaXJlY3Rvcnkgb24gdGhlIHdlYiBzZXJ2ZXIKKyMjIHRvIG1ha2UgeW91ciB3aWtpIGdvIHNsaWdodGx5IGZhc3Rlci4gVGhlIGRpcmVjdG9yeSBzaG91bGQgbm90CisjIyBiZSBwdWJsaWNhbGx5IGFjY2Vzc2libGUgZnJvbSB0aGUgd2ViLgorIyR3Z0NhY2hlRGlyZWN0b3J5ID0gIiRJUC9jYWNoZSI7CisKKyMgU2l0ZSBsYW5ndWFnZSBjb2RlLCBzaG91bGQgYmUgb25lIG9mIHRoZSBsaXN0IGluIC4vbGFuZ3VhZ2VzL05hbWVzLnBocAorJHdnTGFuZ3VhZ2VDb2RlID0gImVuIjsKKworJHdnU2VjcmV0S2V5ID0gIjFjOTEyYmZlMzUxOWZiNzBmNWRjNTIzZWNjNjk4MTExY2Q0M2Q4MWExMWM1ODViM2VlZmIyOGYyOWMyNjk5YjciOworIyR3Z1NlY3JldEtleSA9ICJAU0VDUkVUS0VZQCI7CisKKworIyBTaXRlIHVwZ3JhZGUga2V5LiBNdXN0IGJlIHNldCB0byBhIHN0cmluZyAoZGVmYXVsdCBwcm92aWRlZCkgdG8gdHVybiBvbiB0aGUKKyMgd2ViIGluc3RhbGxlciB3aGlsZSBMb2NhbFNldHRpbmdzLnBocCBpcyBpbiBwbGFjZQorJHdnVXBncmFkZUtleSA9ICJkZGFlN2RjODdjZDBhNjQ1IjsKKworIyMgRGVmYXVsdCBza2luOiB5b3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdCBza2luLiBVc2UgdGhlIGludGVybmFsIHN5bWJvbGljCisjIyBuYW1lcywgaWUgJ3N0YW5kYXJkJywgJ25vc3RhbGdpYScsICdjb2xvZ25lYmx1ZScsICdtb25vYm9vaycsICd2ZWN0b3InOgorJHdnRGVmYXVsdFNraW4gPSAidmVjdG9yIjsKKworIyMgRm9yIGF0dGFjaGluZyBsaWNlbnNpbmcgbWV0YWRhdGEgdG8gcGFnZXMsIGFuZCBkaXNwbGF5aW5nIGFuCisjIyBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIC8gaWNvbi4gR05VIEZyZWUgRG9jdW1lbnRhdGlvbgorIyMgTGljZW5zZSBhbmQgQ3JlYXRpdmUgQ29tbW9ucyBsaWNlbnNlcyBhcmUgc3VwcG9ydGVkIHNvIGZhci4KKyR3Z1JpZ2h0c1BhZ2UgPSAiIjsgIyBTZXQgdG8gdGhlIHRpdGxlIG9mIGEgd2lraSBwYWdlIHRoYXQgZGVzY3JpYmVzIHlvdXIgbGljZW5zZS9jb3B5cmlnaHQKKyR3Z1JpZ2h0c1VybCAgPSAiIjsKKyR3Z1JpZ2h0c1RleHQgPSAiIjsKKyR3Z1JpZ2h0c0ljb24gPSAiIjsKKworIyBQYXRoIHRvIHRoZSBHTlUgZGlmZjMgdXRpbGl0eS4gVXNlZCBmb3IgY29uZmxpY3QgcmVzb2x1dGlvbi4KKyR3Z0RpZmYzID0gIi91c3IvYmluL2RpZmYzIjsKKworIyBRdWVyeSBzdHJpbmcgbGVuZ3RoIGxpbWl0IGZvciBSZXNvdXJjZUxvYWRlci4gWW91IHNob3VsZCBvbmx5IHNldCB0aGlzIGlmCisjIHlvdXIgd2ViIHNlcnZlciBoYXMgYSBxdWVyeSBzdHJpbmcgbGVuZ3RoIGxpbWl0ICh0aGVuIHNldCBpdCB0byB0aGF0IGxpbWl0KSwKKyMgb3IgaWYgeW91IGhhdmUgc3Vob3Npbi5nZXQubWF4X3ZhbHVlX2xlbmd0aCBzZXQgaW4gcGhwLmluaSAodGhlbiBzZXQgaXQgdG8KKyMgdGhhdCB2YWx1ZSkKKyR3Z1Jlc291cmNlTG9hZGVyTWF4UXVlcnlMZW5ndGggPSAtMTsKKworCisKKyMgRW5kIG9mIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHNldHRpbmdzLgorIyBBZGQgbW9yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVsb3cuCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS9kYl9pbnN0YWxsLnBocCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmM2Y0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS9kYl9pbnN0YWxsLnBocApAQCAtMCwwICsxLDEyMCBAQAorPD9waHAKKy8qKgorICogVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIGEgU1FMaXRlIGRhdGFiYXNlIGZvciBhIE1lZGlhV2lraSB2ZXJzaW9uIDEuMTkuMAorICogWW91IG11c3Qgc3BlY2lmeSB0aGUgbG9naW4gb2YgdGhlIGFkbWluIChhcmd1bWVudCAxKSBhbmQgaXRzCisgKiBwYXNzd29yZCAoYXJndW1lbnQgMikgYW5kIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGRhdGFiYXNlIGZpbGUKKyAqIGlzIGxvY2F0ZWQgKGFic29sdXRlIHBhdGggaW4gYXJndW1lbnQgMykuCisgKiBJdCBpcyB1c2VkIGJ5IHRoZSBzY3JpcHQgaW5zdGFsbC13aWtpLnNoIGluIG9yZGVyIHRvIG1ha2UgZWFzeSB0aGUKKyAqIGluc3RhbGxhdGlvbiBvZiBhIE1lZGlhV2lraS4KKyAqCisgKiBJbiBvcmRlciB0byBnZW5lcmF0ZSBhIFNRTGl0ZSBkYXRhYmFzZSBmaWxlLCBNZWRpYVdpa2kgYXNrIHRoZSB1c2VyCisgKiB0byBzdWJtaXQgc29tZSBmb3JtcyBpbiBpdHMgd2ViIGJyb3dzZXIuIFRoaXMgc2NyaXB0IHNpbXVsYXRlcyB0aGlzCisgKiBiZWhhdmlvciB0aG91Z2ggdGhlIGZ1bmN0aW9ucyA8Z2V0PiBhbmQgPHN1Ym1pdD4KKyAqCisgKi8KKyRhcmdjID0gJF9TRVJWRVJbJ2FyZ2MnXTsKKyRhcmd2ID0gJF9TRVJWRVJbJ2FyZ3YnXTsKKworJGxvZ2luID0gJGFyZ3ZbMl07CiskcGFzcyA9ICRhcmd2WzNdOworJHRtcCA9ICRhcmd2WzRdOworJHBvcnQgPSAkYXJndls1XTsKKworJHVybCA9ICdodHRwOi8vbG9jYWxob3N0OicuJHBvcnQuJy93aWtpL213LWNvbmZpZy9pbmRleC5waHAnOworJGRiX2RpciA9IHVybGVuY29kZSgkdG1wKTsKKyR0bXBfY29va2llID0gdGVtcG5hbSgkdG1wLCAiQ09PS0lFXyIpOworLyoKKyAqIEZldGNocyBhIHBhZ2Ugd2l0aCBjVVJMLgorICovCitmdW5jdGlvbiBnZXQoJHBhZ2VfbmFtZSA9ICIiKSB7CisJJGN1cmwgPSBjdXJsX2luaXQoKTsKKwkkcGFnZV9uYW1lX2FkZCA9ICIiOworCWlmICgkcGFnZV9uYW1lICE9ICIiKSB7CisJCSRwYWdlX25hbWVfYWRkID0gJz9wYWdlPScuJHBhZ2VfbmFtZTsKKwl9CisJJHVybCA9ICRHTE9CQUxTWyd1cmwnXS4kcGFnZV9uYW1lX2FkZDsKKwkkdG1wX2Nvb2tpZSA9ICRHTE9CQUxTWyd0bXBfY29va2llJ107CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfQ09PS0lFSkFSLCAkdG1wX2Nvb2tpZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCB0cnVlKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAkdG1wX2Nvb2tpZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfSEVBREVSLCB0cnVlKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VUkwsICR1cmwpOworCisJJHBhZ2UgPSBjdXJsX2V4ZWMoJGN1cmwpOworCWlmICghJHBhZ2UpIHsKKwkJZGllKCJDb3VsZCBub3QgZ2V0IHBhZ2U6ICR1cmxcbiIpOworCX0KKwljdXJsX2Nsb3NlKCRjdXJsKTsKKwlyZXR1cm4gJHBhZ2U7Cit9CisKKy8qCisgKiBTdWJtaXRzIGEgZm9ybSB3aXRoIGNVUkwuCisgKi8KK2Z1bmN0aW9uIHN1Ym1pdCgkcGFnZV9uYW1lLCAkb3B0aW9uID0gIiIpIHsKKwkkY3VybCA9IGN1cmxfaW5pdCgpOworCSRkYXRhcG9zdCA9ICdzdWJtaXQtY29udGludWU9Q29udGludWUrJUUyJTg2JTkyJzsKKwlpZiAoJG9wdGlvbiAhPSAiIikgeworCQkkZGF0YXBvc3QgPSAkb3B0aW9uLicmJy4kZGF0YXBvc3Q7CisJfQorCSR1cmwgPSAkR0xPQkFMU1sndXJsJ10uJz9wYWdlPScuJHBhZ2VfbmFtZTsKKwkkdG1wX2Nvb2tpZSA9ICRHTE9CQUxTWyd0bXBfY29va2llJ107CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVJMLCAkdXJsKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9QT1NULCB0cnVlKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUE9TVEZJRUxEUywgJGRhdGFwb3N0KTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfQ09PS0lFSkFSLCAkdG1wX2Nvb2tpZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfQ09PS0lFRklMRSwgJHRtcF9jb29raWUpOworCisJJHBhZ2UgPSBjdXJsX2V4ZWMoJGN1cmwpOworCWlmICghJHBhZ2UpIHsKKwkJZGllKCJDb3VsZCBub3QgZ2V0IHBhZ2U6ICR1cmxcbiIpOworCX0KKwljdXJsX2Nsb3NlKCRjdXJsKTsKKwlyZXR1cm4gIiRwYWdlIjsKK30KKworLyoKKyAqIEhlcmUgc3RhcnRzIHRoaXMgc2NyaXB0OiBzaW11bGF0ZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSB1c2VyCisgKiBzdWJtaXR0aW5nIGZvcm1zIHRvIGdlbmVyYXRlcyB0aGUgZGF0YWJhc2UgZmlsZS4KKyAqIE5vdGUgdGhpcyBzaW11bGF0aW9uIHdhcyBtYWRlIGZvciB0aGUgTWVkaWFXaWtpIHZlcnNpb24gMS4xOS4wLAorICogd2UgY2FuJ3QgYXNzdW1lIGl0IHdvcmtzIHdpdGggb3RoZXIgdmVyc2lvbnMuCisgKgorICovCisKKyRwYWdlID0gZ2V0KCk7CitpZiAoIXByZWdfbWF0Y2goJy9pbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSIoWzAtOV0rKSIgbmFtZT0iTGFuZ3VhZ2VSZXF1ZXN0VGltZSIvJywKKwkJJHBhZ2UsICRtYXRjaGVzKSkgeworCWVjaG8gIlVuZXhwZWN0ZWQgY29udGVudCBmb3IgcGFnZSBkb3dubG9hZGVkOlxuIjsKKwllY2hvICIkcGFnZSI7CisJZGllOworfTsKKyR0aW1lc3RhbXAgPSAkbWF0Y2hlc1sxXTsKKyRsYW5ndWFnZSA9ICJMYW5ndWFnZVJlcXVlc3RUaW1lPSR0aW1lc3RhbXAmdXNlbGFuZz1lbiZDb250TGFuZz1lbiI7CiskcGFnZSA9IHN1Ym1pdCgnTGFuZ3VhZ2UnLCAkbGFuZ3VhZ2UpOworCitzdWJtaXQoJ1dlbGNvbWUnKTsKKworJGRiX2NvbmZpZyA9ICdEQlR5cGU9c3FsaXRlJzsKKyRkYl9jb25maWcgPSAkZGJfY29uZmlnLicmc3FsaXRlX3dnU1FMaXRlRGF0YURpcj0nLiRkYl9kaXI7CiskZGJfY29uZmlnID0gJGRiX2NvbmZpZy4nJnNxbGl0ZV93Z0RCbmFtZT0nLiRhcmd2WzFdOworc3VibWl0KCdEQkNvbm5lY3QnLCAkZGJfY29uZmlnKTsKKworJHdpa2lfY29uZmlnID0gJ2NvbmZpZ193Z1NpdGVuYW1lPVRFU1QnOworJHdpa2lfY29uZmlnID0gJHdpa2lfY29uZmlnLicmY29uZmlnX19OYW1lc3BhY2VUeXBlPXNpdGUtbmFtZSc7Ciskd2lraV9jb25maWcgPSAkd2lraV9jb25maWcuJyZjb25maWdfd2dNZXRhTmFtZXNwYWNlPU15V2lraSc7Ciskd2lraV9jb25maWcgPSAkd2lraV9jb25maWcuJyZjb25maWdfX0FkbWluTmFtZT0nLiRsb2dpbjsKKworJHdpa2lfY29uZmlnID0gJHdpa2lfY29uZmlnLicmY29uZmlnX19BZG1pblBhc3N3b3JkPScuJHBhc3M7Ciskd2lraV9jb25maWcgPSAkd2lraV9jb25maWcuJyZjb25maWdfX0FkbWluUGFzc3dvcmQyPScuJHBhc3M7CisKKyR3aWtpX2NvbmZpZyA9ICR3aWtpX2NvbmZpZy4nJndpa2lfX2NvbmZpZ0VtYWlsPWVtYWlsJTQwZW1haWwub3JnJzsKKyR3aWtpX2NvbmZpZyA9ICR3aWtpX2NvbmZpZy4nJmNvbmZpZ19fU2tpcE9wdGlvbmFsPXNraXAnOworc3VibWl0KCdOYW1lJywgJHdpa2lfY29uZmlnKTsKK3N1Ym1pdCgnSW5zdGFsbCcpOworc3VibWl0KCdJbnN0YWxsJyk7CisKK3VubGluaygkdG1wX2Nvb2tpZSk7Cis/PgpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC9wdXNoLXB1bGwtdGVzdHMuc2ggYi9jb250cmliL213LXRvLWdpdC90L3B1c2gtcHVsbC10ZXN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGEyZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC9wdXNoLXB1bGwtdGVzdHMuc2gKQEAgLTAsMCArMSwxNDQgQEAKK3Rlc3RfcHVzaF9wdWxsICgpIHsKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBwdWxsIHdvcmtzIGFmdGVyIGFkZGluZyBhIG5ldyB3aWtpIHBhZ2UnICcKKwkJd2lraV9yZXNldCAmJgorCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEgJiYKKwkJd2lraV9lZGl0cGFnZSBGb28gInBhZ2UgY3JlYXRlZCBhZnRlciB0aGUgZ2l0IGNsb25lIiBmYWxzZSAmJgorCisJCSgKKwkJCWNkIG13X2Rpcl8xICYmCisJCQlnaXQgcHVsbAorCQkpICYmCisKKwkJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzEgJiYKKwkJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xIHJlZl9wYWdlXzEKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgcHVsbCB3b3JrcyBhZnRlciBlZGl0aW5nIGEgd2lraSBwYWdlJyAnCisJCXdpa2lfcmVzZXQgJiYKKworCQl3aWtpX2VkaXRwYWdlIEZvbyAicGFnZSBjcmVhdGVkIGJlZm9yZSB0aGUgZ2l0IGNsb25lIiBmYWxzZSAmJgorCQlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8yICYmCisJCXdpa2lfZWRpdHBhZ2UgRm9vICJuZXcgbGluZSBhZGRlZCBvbiB0aGUgd2lraSIgdHJ1ZSAmJgorCisJCSgKKwkJCWNkIG13X2Rpcl8yICYmCisJCQlnaXQgcHVsbAorCQkpICYmCisKKwkJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzIgJiYKKwkJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8yIHJlZl9wYWdlXzIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCB3b3JrcyBvbiBjb25mbGljdCBoYW5kbGVkIGJ5IGF1dG8tbWVyZ2UnICcKKwkJd2lraV9yZXNldCAmJgorCisJCXdpa2lfZWRpdHBhZ2UgRm9vICIxIGluaXQKKzMKKzUKKwkiIGZhbHNlICYmCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzMgJiYKKworCQl3aWtpX2VkaXRwYWdlIEZvbyAiMSBpbml0CisyIGNvbnRlbnQgYWRkZWQgb24gd2lraSBhZnRlciBjbG9uZQorMworNQorCSIgZmFsc2UgJiYKKworCQkoCisJCQljZCBtd19kaXJfMyAmJgorCQllY2hvICIxIGluaXQKKzMKKzQgY29udGVudCBhZGRlZCBvbiBnaXQgYWZ0ZXIgY2xvbmUKKzUKKyIgPkZvby5tdyAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbmZsaWN0aW5nIGNoYW5nZSBvbiBmb28iICYmCisJCQlnaXQgcHVsbCAmJgorCQkJZ2l0IHB1c2gKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBwdXNoIHdvcmtzIGFmdGVyIGFkZGluZyBhIGZpbGUgLm13JyAnCisJCXdpa2lfcmVzZXQgJiYKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNCAmJgorCQl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfNCAmJgorCQkoCisJCQljZCBtd19kaXJfNCAmJgorCQkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLm13ICYmCisJCQl0b3VjaCBGb28ubXcgJiYKKwkJCWVjaG8gImhlbGxvIHdvcmxkIiA+PkZvby5tdyAmJgorCQkJZ2l0IGFkZCBGb28ubXcgJiYKKwkJCWdpdCBjb21taXQgLW0gIkZvbyIgJiYKKwkJCWdpdCBwdXNoCisJCSkgJiYKKwkJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzQgJiYKKwkJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl80IHJlZl9wYWdlXzQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgcHVzaCB3b3JrcyBhZnRlciBlZGl0aW5nIGEgZmlsZSAubXcnICcKKwkJd2lraV9yZXNldCAmJgorCQl3aWtpX2VkaXRwYWdlICJGb28iICJwYWdlIGNyZWF0ZWQgYmVmb3JlIHRoZSBnaXQgY2xvbmUiIGZhbHNlICYmCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzUgJiYKKworCQkoCisJCQljZCBtd19kaXJfNSAmJgorCQkJZWNobyAibmV3IGxpbmUgYWRkZWQgaW4gdGhlIGZpbGUgRm9vLm13IiA+PkZvby5tdyAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImVkaXQgZmlsZSBGb28ubXciICYmCisJCQlnaXQgcHVzaAorCQkpICYmCisKKwkJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzUgJiYKKwkJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl81IHJlZl9wYWdlXzUKKwknCisKKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICdHaXQgcHVzaCB3b3JrcyBhZnRlciBkZWxldGluZyBhIGZpbGUnICcKKwkJd2lraV9yZXNldCAmJgorCQl3aWtpX2VkaXRwYWdlIEZvbyAid2lraSBwYWdlIGFkZGVkIGJlZm9yZSBnaXQgY2xvbmUiIGZhbHNlICYmCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzYgJiYKKworCQkoCisJCQljZCBtd19kaXJfNiAmJgorCQkJZ2l0IHJtIEZvby5tdyAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gInBhZ2UgRm9vLm13IGRlbGV0ZWQiICYmCisJCQlnaXQgcHVzaAorCQkpICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgd2lraV9wYWdlX2V4aXN0IEZvbworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01lcmdlIGNvbmZsaWN0IGV4cGVjdGVkIGFuZCBzb2x2aW5nIGl0JyAnCisJCXdpa2lfcmVzZXQgJiYKKworCQlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl83ICYmCisJCXdpa2lfZWRpdHBhZ2UgRm9vICIxIGNvbmZsaWN0CiszIHdpa2kKKzQiIGZhbHNlICYmCisKKwkJKAorCQkJY2QgbXdfZGlyXzcgJiYKKwkJZWNobyAiMSBjb25mbGljdAorMiBnaXQKKzQiID5Gb28ubXcgJiYKKwkJCWdpdCBhZGQgRm9vLm13ICYmCisJCQlnaXQgY29tbWl0IC1tICJjb25mbGljdCBjcmVhdGVkIiAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgJiYKKwkJCSIkUEVSTF9QQVRIIiAtcGkgLWUgInMvWzw9Pl0uKi8vZyIgRm9vLm13ICYmCisJCQlnaXQgY29tbWl0IC1hbSAibWVyZ2UgY29uZmxpY3Qgc29sdmVkIiAmJgorCQkJZ2l0IHB1c2gKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdCBwdWxsIHdvcmtzIGFmdGVyIGRlbGV0aW5nIGEgd2lraSBwYWdlJyAnCisJCXdpa2lfcmVzZXQgJiYKKwkJd2lraV9lZGl0cGFnZSBGb28gIndpa2kgcGFnZSBhZGRlZCBiZWZvcmUgdGhlIGdpdCBjbG9uZSIgZmFsc2UgJiYKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfOCAmJgorCisJCXdpa2lfZGVsZXRlX3BhZ2UgRm9vICYmCisJCSgKKwkJCWNkIG13X2Rpcl84ICYmCisJCQlnaXQgcHVsbCAmJgorCQkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLm13CisJCSkKKwknCit9CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjAtbXctdG8tZ2l0LWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgxMWE5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaApAQCAtMCwwICsxLDI1NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAxMgorIyAgICAgQ2hhcmxlcyBSb3Vzc2VsIDxjaGFybGVzLnJvdXNzZWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gQ2F0aGVicmFzIDxzaW1vbi5jYXRoZWJyYXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgSnVsaWVuIEtoYXlhdCA8anVsaWVuLmtoYXlhdEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBHdWlsbGF1bWUgU2FzZHkgPGd1aWxsYXVtZS5zYXNkeUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBQZXJyYXQgPHNpbW9uLnBlcnJhdEBlbnNpbWFnLmltYWcuZnI+CisjCisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIEdpdCBNZWRpYXdpa2kgcmVtb3RlIGhlbHBlcjogZ2l0IGNsb25lJworCisuIC4vdGVzdC1naXRtdy1saWIuc2gKKy4gJFRFU1RfRElSRUNUT1JZL3Rlc3QtbGliLnNoCisKKwordGVzdF9jaGVja19wcmVjb25kCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIGNyZWF0ZXMgdGhlIGV4cGVjdGVkIGdpdCBsb2cgd2l0aCBvbmUgZmlsZScgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAidGhpcyBpcyBub3QgaW1wb3J0YW50IiBmYWxzZSAtYyBjYXQgLXMgInRoaXMgbXVzdCBiZSB0aGUgc2FtZSIgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xICYmCisJKAorCQljZCBtd19kaXJfMSAmJgorCQlnaXQgbG9nIC0tZm9ybWF0PSVzIEhFQUReLi5IRUFEID5sb2cudG1wCisJKSAmJgorCWVjaG8gInRoaXMgbXVzdCBiZSB0aGUgc2FtZSIgPm1zZy50bXAgJiYKKwlkaWZmIC1iIG13X2Rpcl8xL2xvZy50bXAgbXNnLnRtcAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSBjcmVhdGVzIHRoZSBleHBlY3RlZCBnaXQgbG9nIHdpdGggbXVsdGlwbGUgZmlsZXMnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBkYWRkeSAidGhpcyBpcyBub3QgaW1wb3J0YW50IiBmYWxzZSAtcz0idGhpcyBtdXN0IGJlIHRoZSBzYW1lIiAmJgorCXdpa2lfZWRpdHBhZ2UgZGFkZHkgIm5laXRoZXIgaXMgdGhpcyIgdHJ1ZSAtcz0idGhpcyBtdXN0IGFsc28gYmUgdGhlIHNhbWUiICYmCisJd2lraV9lZGl0cGFnZSBkYWRkeSAibmVpdGhlciBpcyB0aGlzIiB0cnVlIC1zPSJzYW1lIHNhbWUgc2FtZSIgJiYKKwl3aWtpX2VkaXRwYWdlIGRqICJkb250IGNhcmUiIGZhbHNlIC1zPSJpZGVudGljYWwiICYmCisJd2lraV9lZGl0cGFnZSBkaiAiZG9udCBjYXJlIGVpdGhlciIgdHJ1ZSAtcz0iaWRlbnRpY2FsIHRvbyIgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8yICYmCisJKAorCQljZCBtd19kaXJfMiAmJgorCQlnaXQgbG9nIC0tZm9ybWF0PSVzIERhZGR5Lm13ICA+bG9nRGFkZHkudG1wICYmCisJCWdpdCBsb2cgLS1mb3JtYXQ9JXMgRGoubXcgPmxvZ0RqLnRtcAorCSkgJiYKKwllY2hvICJzYW1lIHNhbWUgc2FtZSIgPm1zZ0RhZGR5LnRtcCAmJgorCWVjaG8gInRoaXMgbXVzdCBhbHNvIGJlIHRoZSBzYW1lIiA+Pm1zZ0RhZGR5LnRtcCAmJgorCWVjaG8gInRoaXMgbXVzdCBiZSB0aGUgc2FtZSIgPj5tc2dEYWRkeS50bXAgJiYKKwllY2hvICJpZGVudGljYWwgdG9vIiA+bXNnRGoudG1wICYmCisJZWNobyAiaWRlbnRpY2FsIiA+Pm1zZ0RqLnRtcCAmJgorCWRpZmYgLWIgbXdfZGlyXzIvbG9nRGFkZHkudG1wIG1zZ0RhZGR5LnRtcCAmJgorCWRpZmYgLWIgbXdfZGlyXzIvbG9nRGoudG1wIG1zZ0RqLnRtcAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSBjcmVhdGVzIG9ubHkgTWFpbl9QYWdlLm13IHdpdGggYW4gZW1wdHkgd2lraScgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8zICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl8zIDEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMy9NYWluX1BhZ2UubXcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIGRvZXMgbm90IGZldGNoIGEgZGVsZXRlZCBwYWdlJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJ0aGlzIHBhZ2UgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSB0aGUgY2xvbmUiIGZhbHNlICYmCisJd2lraV9kZWxldGVfcGFnZSBmb28gJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl80ICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl80IDEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNC9NYWluX1BhZ2UubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfNC9Gb28ubXcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIHdvcmtzIHdpdGggcGFnZSBhZGRlZCcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiIEkgd2lsbCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBiYXIgIkkgd2lsbCBiZSBjbG9uZWQiIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV81ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl81IHJlZl9wYWdlXzUgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIGZvbyAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIGFuIGVkaXRlZCBwYWdlICcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAidGhpcyBwYWdlIHdpbGwgYmUgZWRpdGVkIiBcCisJCWZhbHNlIC1zICJmaXJzdCBlZGl0aW9uIG9mIHBhZ2UgZm9vIiYmCisJd2lraV9lZGl0cGFnZSBmb28gInRoaXMgcGFnZSBoYXMgYmVlbiBlZGl0ZWQgYW5kIG11c3QgYmUgb24gdGhlIGNsb25lICIgdHJ1ZSAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzYgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNi9Gb28ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNi9NYWluX1BhZ2UubXcgJiYKKwl3aWtpX2dldGFsbHBhZ2UgbXdfZGlyXzYvcGFnZV9yZWZfNiAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfNiBtd19kaXJfNi9wYWdlX3JlZl82ICYmCisJKAorCQljZCBtd19kaXJfNiAmJgorCQlnaXQgbG9nIC0tZm9ybWF0PSVzIEhFQUReIEZvby5tdyA+IC4uL0Zvby5sb2cKKwkpICYmCisJZWNobyAiZmlyc3QgZWRpdGlvbiBvZiBwYWdlIGZvbyIgPiBGb29FeHBlY3QubG9nICYmCisJZGlmZiBGb29FeHBlY3QubG9nIEZvby5sb2cKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCBzZXZlcmFsIHBhZ2VzIGFuZCBzb21lIGRlbGV0ZWQgJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJ0aGlzIHBhZ2Ugd2lsbCBub3QgYmUgZGVsZXRlZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiSSBtdXN0IG5vdCBiZSBlcmFzZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBuYW1uYW0gIkkgd2lsbCBub3QgYmUgdGhlcmUgYXQgdGhlIGVuZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG55YW5jYXQgIm55YW4gbnlhbiBueWFuIGRlbGV0ZSBtZSIgZmFsc2UgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIG5hbW5hbSAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgbnlhbmNhdCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNy9Gb28ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNy9CYXIubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfNy9OYW1uYW0ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfNy9OeWFuY2F0Lm13ICYmCisJd2lraV9nZXRhbGxwYWdlIG13X2Rpcl83L3BhZ2VfcmVmXzcgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzcgbXdfZGlyXzcvcGFnZV9yZWZfNworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIG9uZSBzcGVjaWZpYyBwYWdlIGNsb25lZCAnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gIkkgd2lsbCBub3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgYmFyICJEbyBub3QgY2xvbmUgbWUiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBuYW1uYW0gIkkgd2lsbCBiZSBjbG9uZWQgOikiIGZhbHNlICAtcz0idGhpcyBsb2cgbXVzdCBzdGF5IiAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbmNhdCAibnlhbiBueWFuIG55YW4geW91IGNhbnQgY2xvbmUgbWUiIGZhbHNlICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9bmFtbmFtIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl84ICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl84IDEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfOC9OYW1uYW0ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfOC9NYWluX1BhZ2UubXcgJiYKKwkoCisJCWNkIG13X2Rpcl84ICYmCisJCWVjaG8gInRoaXMgbG9nIG11c3Qgc3RheSIgPm1zZy50bXAgJiYKKwkJZ2l0IGxvZyAtLWZvcm1hdD0lcyA+bG9nLnRtcCAmJgorCQlkaWZmIC1iIG1zZy50bXAgbG9nLnRtcAorCSkgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzgvTmFtbmFtLm13IE5hbW5hbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCBtdWx0aXBsZSBzcGVjaWZpYyBwYWdlIGNsb25lZCAnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gIkkgd2lsbCBiZSB0aGVyZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiSSB3aWxsIG5vdCBkaXNhcGVhciIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG5hbW5hbSAiSSBiZSBlcmFzZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBueWFuY2F0ICJueWFuIG55YW4gbnlhbiB5b3Ugd2lsbCBub3QgZXJhc2UgbWUiIGZhbHNlICYmCisJd2lraV9kZWxldGVfcGFnZSBuYW1uYW0gJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz0iZm9vIGJhciBueWFuY2F0IG5hbW5hbSIgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzkgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzkgMyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl85L05hbW5hbS5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl85L0Zvby5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl85L055YW5jYXQubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfOS9CYXIubXcgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzkvRm9vLm13IEZvbyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfOS9CYXIubXcgQmFyICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl85L055YW5jYXQubXcgTnlhbmNhdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZWRpYXdpa2ktY2xvbmUgb2Ygc2V2ZXJhbCBzcGVjaWZpYyBwYWdlcyBvbiB3aWtpJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJmb28gMSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiYmFyIDEiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBkdW1teSAiZHVtbXkgMSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGNsb25lZF8xICJjbG9uZWRfMSAxIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgY2xvbmVkXzIgImNsb25lZF8yIDIiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBjbG9uZWRfMyAiY2xvbmVkXzMgMyIgZmFsc2UgJiYKKwlta2RpciAtcCByZWZfcGFnZV8xMCAmJgorCXdpa2lfZ2V0cGFnZSBjbG9uZWRfMSByZWZfcGFnZV8xMCAmJgorCXdpa2lfZ2V0cGFnZSBjbG9uZWRfMiByZWZfcGFnZV8xMCAmJgorCXdpa2lfZ2V0cGFnZSBjbG9uZWRfMyByZWZfcGFnZV8xMCAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLnBhZ2VzPSJjbG9uZWRfMSBjbG9uZWRfMiBjbG9uZWRfMyIgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEwICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xMCByZWZfcGFnZV8xMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCB0aGUgc2hhbGxvdyBvcHRpb24nICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gIjFzdCByZXZpc2lvbiwgc2hvdWxkIGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiMXN0IHJldmlzaW9uLCBzaG91bGQgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbiAiMXN0IHJldmlzaW9uLCBzaG91bGQgbm90IGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG55YW4gIjJuZCByZXZpc2lvbiwgc2hvdWxkIGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgLWMgcmVtb3RlLm9yaWdpbi5zaGFsbG93PXRydWUgY2xvbmUgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzExICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl8xMSA0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzExL055YW4ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTEvRm9vLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzExL0Jhci5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMS9NYWluX1BhZ2UubXcgJiYKKwkoCisJCWNkIG13X2Rpcl8xMSAmJgorCQl0ZXN0IGBnaXQgbG9nIC0tb25lbGluZSBOeWFuLm13IHwgd2MgLWxgIC1lcSAxICYmCisJCXRlc3QgYGdpdCBsb2cgLS1vbmVsaW5lIEZvby5tdyB8IHdjIC1sYCAtZXEgMSAmJgorCQl0ZXN0IGBnaXQgbG9nIC0tb25lbGluZSBCYXIubXcgfCB3YyAtbGAgLWVxIDEgJiYKKwkJdGVzdCBgZ2l0IGxvZyAtLW9uZWxpbmUgTWFpbl9QYWdlLm13IHwgd2MgLWwgYCAtZXEgMQorCSkgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzExL055YW4ubXcgTnlhbiAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTEvRm9vLm13IEZvbyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTEvQmFyLm13IEJhciAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTEvTWFpbl9QYWdlLm13IE1haW5fUGFnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCB0aGUgc2hhbGxvdyBvcHRpb24gd2l0aCBhIGRlbGV0ZSBwYWdlJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICIxc3QgcmV2aXNpb24sIHdpbGwgYmUgZGVsZXRlZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiMXN0IHJldmlzaW9uLCBzaG91bGQgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbiAiMXN0IHJldmlzaW9uLCBzaG91bGQgbm90IGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG55YW4gIjJuZCByZXZpc2lvbiwgc2hvdWxkIGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIGZvbyAmJgorCWdpdCAtYyByZW1vdGUub3JpZ2luLnNoYWxsb3c9dHJ1ZSBjbG9uZSBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTIgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzEyIDMgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTIvTnlhbi5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xMi9Gb28ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTIvQmFyLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzEyL01haW5fUGFnZS5tdyAmJgorCSgKKwkJY2QgbXdfZGlyXzEyICYmCisJCXRlc3QgYGdpdCBsb2cgLS1vbmVsaW5lIE55YW4ubXcgfCB3YyAtbGAgLWVxIDEgJiYKKwkJdGVzdCBgZ2l0IGxvZyAtLW9uZWxpbmUgQmFyLm13IHwgd2MgLWxgIC1lcSAxICYmCisJCXRlc3QgYGdpdCBsb2cgLS1vbmVsaW5lIE1haW5fUGFnZS5tdyB8IHdjIC1sIGAgLWVxIDEKKwkpICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xMi9OeWFuLm13IE55YW4gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzEyL0Jhci5tdyBCYXIgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzEyL01haW5fUGFnZS5tdyBNYWluX1BhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCBvZiBmZXRjaGluZyBhIGNhdGVnb3J5JyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgRm9vICJJIHdpbGwgYmUgY2xvbmVkIiBmYWxzZSAtYz1DYXRlZ29yeSAmJgorCXdpa2lfZWRpdHBhZ2UgQmFyICJNZWV0IG1lIG9uIHRoZSByZXBvc2l0b3J5IiBmYWxzZSAtYz1DYXRlZ29yeSAmJgorCXdpa2lfZWRpdHBhZ2UgRHVtbXkgIkkgd2lsbCBub3QgY29tZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIEJhcldyb25nICJJIHdpbGwgc3RheSBvbmxpbmUgb25seSIgZmFsc2UgLWM9Tm90Q2F0ZWdvcnkgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5jYXRlZ29yaWVzPSJDYXRlZ29yeSIgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEzICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzEzIENhdGVnb3J5ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xMyByZWZfcGFnZV8xMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUZXN0IG9mIHJlc2lzdGFuY2UgdG8gbW9kaWZpY2F0aW9uIG9mIGNhdGVnb3J5IG9uIHdpa2kgZm9yIGNsb25lJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgVG9iZWRlbGV0ZWQgInRoaXMgcGFnZSB3aWxsIGJlIGRlbGV0ZWQiIGZhbHNlIC1jPUNhdG9uZSAmJgorCXdpa2lfZWRpdHBhZ2UgVG9iZWVkaXRlZCAidGhpcyBwYWdlIHdpbGwgYmUgbW9kaWZpZWQiIGZhbHNlIC1jPUNhdG9uZSAmJgorCXdpa2lfZWRpdHBhZ2UgTm9ybWFsb25lICJ0aGlzIHBhZ2Ugd29udCBiZSBtb2RpZmllZCBhbmQgd2lsbCBiZSBvbiBnaXQiIGZhbHNlIC1jPUNhdG9uZSAmJgorCXdpa2lfZWRpdHBhZ2UgTm90Y29uc2lkZXJlZCAidGhpcyBwYWdlIHdpbGwgbm90IGFwcGVhciBvbiBsb2NhbCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIE90aGVyY2F0ZWdvcnkgInRoaXMgcGFnZSB3aWxsIG5vdCBhcHBlYXIgb24gbG9jYWwiIGZhbHNlIC1jPUNhdHR3byAmJgorCXdpa2lfZWRpdHBhZ2UgVG9iZWVkaXRlZCAidGhpcyBwYWdlIGhhdmUgYmVlbiBtb2RpZmllZCIgdHJ1ZSAtYz1DYXRvbmUgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIFRvYmVkZWxldGVkCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4uY2F0ZWdvcmllcz0iQ2F0b25lIiBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTQgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMTQgQ2F0b25lICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xNCByZWZfcGFnZV8xNAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjEtbXctdG8tZ2l0LXB1c2gtcHVsbC5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjEtbXctdG8tZ2l0LXB1c2gtcHVsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZWEyMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2MS1tdy10by1naXQtcHVzaC1wdWxsLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIKKyMgICAgIENoYXJsZXMgUm91c3NlbCA8Y2hhcmxlcy5yb3Vzc2VsQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIENhdGhlYnJhcyA8c2ltb24uY2F0aGVicmFzQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEp1bGllbiBLaGF5YXQgPGp1bGllbi5raGF5YXRAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgR3VpbGxhdW1lIFNhc2R5IDxndWlsbGF1bWUuc2FzZHlAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gUGVycmF0IDxzaW1vbi5wZXJyYXRAZW5zaW1hZy5pbWFnLmZyPgorIworIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIyB0ZXN0cyBmb3IgZ2l0LXJlbW90ZS1tZWRpYXdpa2kKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgR2l0IE1lZGlhd2lraSByZW1vdGUgaGVscGVyOiBnaXQgcHVzaCBhbmQgZ2l0IHB1bGwgc2ltcGxlIHRlc3QgY2FzZXMnCisKKy4gLi90ZXN0LWdpdG13LWxpYi5zaAorLiAuL3B1c2gtcHVsbC10ZXN0cy5zaAorLiAkVEVTVF9ESVJFQ1RPUlkvdGVzdC1saWIuc2gKKwordGVzdF9jaGVja19wcmVjb25kCisKK3Rlc3RfcHVzaF9wdWxsCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90OTM2Mi1tdy10by1naXQtdXRmOC5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjItbXctdG8tZ2l0LXV0Zjguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjQ2ZDQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjItbXctdG8tZ2l0LXV0Zjguc2gKQEAgLTAsMCArMSwzMjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIKKyMgICAgIENoYXJsZXMgUm91c3NlbCA8Y2hhcmxlcy5yb3Vzc2VsQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIENhdGhlYnJhcyA8c2ltb24uY2F0aGVicmFzQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEp1bGllbiBLaGF5YXQgPGp1bGllbi5raGF5YXRAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgR3VpbGxhdW1lIFNhc2R5IDxndWlsbGF1bWUuc2FzZHlAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gUGVycmF0IDxzaW1vbi5wZXJyYXRAZW5zaW1hZy5pbWFnLmZyPgorIworIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIyB0ZXN0cyBmb3IgZ2l0LXJlbW90ZS1tZWRpYXdpa2kKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQtbWVkaWF3aWtpIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGZpbGVuYW1lcycKKworLiAuL3Rlc3QtZ2l0bXctbGliLnNoCisuICRURVNUX0RJUkVDVE9SWS90ZXN0LWxpYi5zaAorCisKK3Rlc3RfY2hlY2tfcHJlY29uZAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyBmb3IgYSB3aWtpIHdpdGggYWNjZW50cyBpbiB0aGUgcGFnZSBuYW1lcycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGbDqcOpICJUaGlzIHBhZ2UgbXVzdCBiZSBkw6lsw6l0w6lkIGJlZm9yZSBjbG9uZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGvDqMOoICJUaGlzIHBhZ2UgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSBjbG9uZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGjDoMOgICJUaGlzIHBhZ2UgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSBjbG9uZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGvDrsOuICJUaGlzIHBhZ2UgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSBjbG9uZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiVGhpcyBwYWdlIG11c3QgYmUgZGVsZXRlZCBiZWZvcmUgY2xvbmUiIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8xICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xIHJlZl9wYWdlXzEKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgcHVsbCB3b3JrcyB3aXRoIGEgd2lraSB3aXRoIGFjY2VudHMgaW4gdGhlIHBhZ2VzIG5hbWVzJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2Uga8Ouw64gInRoaXMgcGFnZSBtdXN0IGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAidGhpcyBwYWdlIG11c3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzIgJiYKKwl3aWtpX2VkaXRwYWdlIMOpw6DDrsO0w7sgIlRoaXMgcGFnZSBtdXN0IGJlIHB1bGxlZCIgZmFsc2UgJiYKKwkoCisJCWNkIG13X2Rpcl8yICYmCisJCWdpdCBwdWxsCisJKSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8yICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8yIHJlZl9wYWdlXzIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uaW5nIGEgY2hvc2VuIHBhZ2Ugd29ya3Mgd2l0aCBhY2NlbnRzJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2Uga8Ouw64gInRoaXMgcGFnZSBtdXN0IGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz1rw67DriBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMy9Lw67Dri5tdyBLw67DriAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8zL0vDrsOuLm13ICYmCisJcm0gLXJmIG13X2Rpcl8zCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGhlIHNoYWxsb3cgb3B0aW9uIHdvcmtzIHdpdGggYWNjZW50cycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIG7DqW/DoCAiMXN0IHJldmlzaW9uLCBzaG91bGQgbm90IGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG7DqW/DoCAiMm5kIHJldmlzaW9uLCBzaG91bGQgYmUgY2xvbmVkIiBmYWxzZSAmJgorCWdpdCAtYyByZW1vdGUub3JpZ2luLnNoYWxsb3c9dHJ1ZSBjbG9uZSBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNCAmJgorCXRlc3RfY29udGFpbnNfTl9maWxlcyBtd19kaXJfNCAyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzQvTsOpb8OgLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzQvTWFpbl9QYWdlLm13ICYmCisJKAorCQljZCBtd19kaXJfNCAmJgorCQl0ZXN0IGBnaXQgbG9nIC0tb25lbGluZSBOw6lvw6AubXcgfCB3YyAtbGAgLWVxIDEgJiYKKwkJdGVzdCBgZ2l0IGxvZyAtLW9uZWxpbmUgTWFpbl9QYWdlLm13IHwgd2MgLWwgYCAtZXEgMQorCSkgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzQvTsOpb8OgLm13IE7DqW/DoCAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfNC9NYWluX1BhZ2UubXcgTWFpbl9QYWdlCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmluZyB3b3JrcyB3aGVuIHBhZ2UgbmFtZSBmaXJzdCBsZXR0ZXIgaGFzIGFuIGFjY2VudCcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIMOuw64gInRoaXMgcGFnZSBtdXN0IGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz3DrsOuIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl81ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzUvw47Dri5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfNS/DjsOuLm13IMOOw64KKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgcHVzaCB3b3JrcyB3aXRoIGEgd2lraSB3aXRoIGFjY2VudHMnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmw6nDqSAibG90cyBvZiBhY2NlbnRzIDogw6nDqMOgw5YiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBmb28gInRoaXMgcGFnZSBtdXN0IGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl82ICYmCisJKAorCQljZCBtd19kaXJfNiAmJgorCQllY2hvICJBIHdpbGQgUMOua8OkY2jDuyBhcHBlYXJzIG9uIHRoZSB3aWtpIiA+UMOua8OkY2jDuy5tdyAmJgorCQlnaXQgYWRkIFDDrmvDpGNow7subXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSBuZXcgcGFnZSBhcHBlYXJzIiAmJgorCQlnaXQgcHVzaAorCSkgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfNiAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfNiByZWZfcGFnZV82CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIGFjY2VudHNhbmQgc3BhY2VzJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgIsOpIMOgIMOuIiAidGhpcyBwYWdlIG11c3QgYmUgZMOpbMOpdMOpIGJlZm9yZSB0aGUgY2xvbmUiIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNyAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV83ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl83IHJlZl9wYWdlXzcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhcmFjdGVyICQgaW4gcGFnZSBuYW1lIChtdyAtPiBnaXQpJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZmlsZV9cJF9mb28gImV4cGVjdCB0byBiZSBjYWxsZWQgZmlsZV8kX2ZvbyIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl84ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzgvRmlsZV9cJF9mb28ubXcgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfOCAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfOCByZWZfcGFnZV84CisnCisKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFyYWN0ZXIgJCBpbiBmaWxlIG5hbWUgKGdpdCAtPiBtdykgJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzkgJiYKKwkoCisJCWNkIG13X2Rpcl85ICYmCisJCWVjaG8gInRoaXMgZmlsZSBpcyBjYWxsZWQgRmlsZV9cJF9mb28ubXciID5GaWxlX1wkX2Zvby5tdyAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtYW0gImZpbGUgRmlsZV9cJF9mb28ubXciICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBwdXNoCisJKSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV85ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl85IHJlZl9wYWdlXzkKKycKKworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjYXBpdGFsIGF0IHRoZSBiZWdpbmluZyBvZiBmaWxlIG5hbWVzJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEwICYmCisJKAorCQljZCBtd19kaXJfMTAgJiYKKwkJZWNobyAibXkgbmV3IGZpbGUgZm9vIiA+Zm9vLm13ICYmCisJCWVjaG8gIm15IG5ldyBmaWxlIEZvby4uLiBGaW5nZXIgY3Jvc3NlZCIgPkZvby5tdyAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtYW0gImZpbGUgZm9vLm13IiAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgcHVzaAorCSkgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMTAgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEwIHJlZl9wYWdlXzEwCisnCisKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc3BlY2lhbCBjaGFyYWN0ZXIgYXQgdGhlIGJlZ2luaW5nIG9mIGZpbGUgbmFtZSBmcm9tIG13IHRvIGdpdCcgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xMSAmJgorCXdpa2lfZWRpdHBhZ2Uge2NoYXJfMSAiZXhwZWN0IHRvIGJlIHJlbmFtZWQge2NoYXJfMSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIFtjaGFyXzIgImV4cGVjdCB0byBiZSByZW5hbWVkIFtjaGFyXzIiIGZhbHNlICYmCisJKAorCQljZCBtd19kaXJfMTEgJiYKKwkJZ2l0IHB1bGwKKwkpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzExL3tjaGFyXzEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTEvW2NoYXJfMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQdWxsIHBhZ2Ugd2l0aCB0aXRsZSBjb250YWluaW5nICI6IiBvdGhlciB0aGFuIG5hbWVzcGFjZSBzZXBhcmF0b3InICcKKwl3aWtpX2VkaXRwYWdlIEZvbzpCYXIgY29udGVudCBmYWxzZSAmJgorCSgKKwkJY2QgbXdfZGlyXzExICYmCisJCWdpdCBwdWxsCisJKSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMS9Gb286QmFyLm13CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1B1c2ggcGFnZSB3aXRoIHRpdGxlIGNvbnRhaW5pbmcgIjoiIG90aGVyIHRoYW4gbmFtZXNwYWNlIHNlcGFyYXRvcicgJworCSgKKwkJY2QgbXdfZGlyXzExICYmCisJCWVjaG8gY29udGVudCA+Tm90QU5hbWVTcGFjZTpQYWdlLm13ICYmCisJCWdpdCBhZGQgTm90QU5hbWVTcGFjZTpQYWdlLm13ICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBwYWdlIHdpdGggY29sb24iICYmCisJCWdpdCBwdXNoCisJKSAmJgorCXdpa2lfcGFnZV9leGlzdCBOb3RBTmFtZVNwYWNlOlBhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBvZiBjb3JyZWN0IGZvcm1hdGluZyBmb3IgZmlsZSBuYW1lIGZyb20gbXcgdG8gZ2l0JyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEyICYmCisJd2lraV9lZGl0cGFnZSBjaGFyXyVfN2JfMSAiZXhwZWN0IHRvIGJlIHJlbmFtZWQgY2hhcntfMSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGNoYXJfJV81Yl8yICJleHBlY3QgdG8gYmUgcmVuYW1lZCBjaGFye18yIiBmYWxzZSAmJgorCSgKKwkJY2QgbXdfZGlyXzEyICYmCisJCWdpdCBwdWxsCisJKSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMi9DaGFyXHtfMS5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMi9DaGFyXFtfMi5tdyAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8xMiAmJgorCW12IHJlZl9wYWdlXzEyL0NoYXJfJV83Yl8xLm13IHJlZl9wYWdlXzEyL0NoYXJce18xLm13ICYmCisJbXYgcmVmX3BhZ2VfMTIvQ2hhcl8lXzViXzIubXcgcmVmX3BhZ2VfMTIvQ2hhclxbXzIubXcgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEyIHJlZl9wYWdlXzEyCisnCisKKwordGVzdF9leHBlY3RfZmFpbHVyZSAndGVzdCBvZiBjb3JyZWN0IGZvcm1hdGluZyBmb3IgZmlsZSBuYW1lIGJlZ2luaW5nIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXInICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTMgJiYKKwkoCisJCWNkIG13X2Rpcl8xMyAmJgorCQllY2hvICJteSBuZXcgZmlsZSB7Y2hhcl8xIiA+XHtjaGFyXzEubXcgJiYKKwkJZWNobyAibXkgbmV3IGZpbGUgW2NoYXJfMiIgPlxbY2hhcl8yLm13ICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0aW5nIHNvbWUgZXhvdGljIGZpbGUgbmFtZS4uLiIgJiYKKwkJZ2l0IHB1c2ggJiYKKwkJZ2l0IHB1bGwKKwkpICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzEzICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVmX3BhZ2VfMTMve2NoYXJfMS5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIHJlZl9wYWdlXzEzL1tjaGFyXzIubXcgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEzIHJlZl9wYWdlXzEzCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBvZiBjb3JyZWN0IGZvcm1hdGluZyBmb3IgZmlsZSBuYW1lIGZyb20gZ2l0IHRvIG13JyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE0ICYmCisJKAorCQljZCBtd19kaXJfMTQgJiYKKwkJZWNobyAibXkgbmV3IGZpbGUgY2hhcntfMSIgPkNoYXJce18xLm13ICYmCisJCWVjaG8gIm15IG5ldyBmaWxlIGNoYXJbXzIiID5DaGFyXFtfMi5tdyAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29tbWl0aW5nIHNvbWUgZXhvdGljIGZpbGUgbmFtZS4uLiIgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzE0ICYmCisJbXYgbXdfZGlyXzE0L0NoYXJce18xLm13IG13X2Rpcl8xNC9DaGFyXyVfN2JfMS5tdyAmJgorCW12IG13X2Rpcl8xNC9DaGFyXFtfMi5tdyBtd19kaXJfMTQvQ2hhcl8lXzViXzIubXcgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzE0IHJlZl9wYWdlXzE0CisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdpdGggLycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIFwvZm9cL28gInRoaXMgaXMgbm90IGltcG9ydGFudCIgZmFsc2UgLWM9RGVsZXRlZCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE1ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE1LyUyRmZvJTJGby5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTUvJTJGZm8lMkZvLm13IFwvZm9cL28KKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCB3aXRoIC8nICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTYgJiYKKwllY2hvICJJIHdpbGwgYmUgb24gdGhlIHdpa2kiID5td19kaXJfMTYvJTJGZm8lMkZvLm13ICYmCisJKAorCQljZCBtd19kaXJfMTYgJiYKKwkJZ2l0IGFkZCAlMkZmbyUyRm8ubXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiICUyRmZvJTJGbyBhZGRlZCIgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJd2lraV9wYWdlX2V4aXN0IFwvZm9cL28gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE2LyUyRmZvJTJGby5tdyBcL2ZvXC9vCisKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgd2l0aCBcJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgXFxrb1xcbyAidGhpcyBpcyBub3QgaW1wb3J0YW50IiBmYWxzZSAtYz1EZWxldGVkICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTcvXFxrb1xcby5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTcvXFxrb1xcby5tdyBcXGtvXFxvCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggd2l0aCBcJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE4ICYmCisJZWNobyAiSSB3aWxsIGJlIG9uIHRoZSB3aWtpIiA+bXdfZGlyXzE4L1xca29cXG8ubXcgJiYKKwkoCisJCWNkIG13X2Rpcl8xOCAmJgorCQlnaXQgYWRkIFxca29cXG8ubXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiIFxca29cXG8gYWRkZWQiICYmCisJCWdpdCBwdXNoCisJKSYmCisJd2lraV9wYWdlX2V4aXN0IFxca29cXG8gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE4L1xca29cXG8ubXcgXFxrb1xcbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3aXRoIFwgaW4gZm9ybWF0IGNvbnRyb2wnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBcXG5vXFxvICJ0aGlzIGlzIG5vdCBpbXBvcnRhbnQiIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTkvXFxub1xcby5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTkvXFxub1xcby5tdyBcXG5vXFxvCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggd2l0aCBcIGluIGZvcm1hdCBjb250cm9sJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzIwICYmCisJZWNobyAiSSB3aWxsIGJlIG9uIHRoZSB3aWtpIiA+bXdfZGlyXzIwL1xcZm9cXG8ubXcgJiYKKwkoCisJCWNkIG13X2Rpcl8yMCAmJgorCQlnaXQgYWRkIFxcZm9cXG8ubXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiIFxcZm9cXG8gYWRkZWQiICYmCisJCWdpdCBwdXNoCisJKSYmCisJd2lraV9wYWdlX2V4aXN0IFxcZm9cXG8gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzIwL1xcZm9cXG8ubXcgXFxmb1xcbworCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Q5MzYzLW13LXRvLWdpdC1leHBvcnQtaW1wb3J0LnNoIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2My1tdy10by1naXQtZXhwb3J0LWltcG9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YTAzNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2My1tdy10by1naXQtZXhwb3J0LWltcG9ydC5zaApAQCAtMCwwICsxLDE5OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAxMgorIyAgICAgQ2hhcmxlcyBSb3Vzc2VsIDxjaGFybGVzLnJvdXNzZWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gQ2F0aGVicmFzIDxzaW1vbi5jYXRoZWJyYXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgSnVsaWVuIEtoYXlhdCA8anVsaWVuLmtoYXlhdEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBHdWlsbGF1bWUgU2FzZHkgPGd1aWxsYXVtZS5zYXNkeUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBQZXJyYXQgPHNpbW9uLnBlcnJhdEBlbnNpbWFnLmltYWcuZnI+CisjCisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjIHRlc3RzIGZvciBnaXQtcmVtb3RlLW1lZGlhd2lraQorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBHaXQgTWVkaWF3aWtpIHJlbW90ZSBoZWxwZXI6IGdpdCBwdXNoIGFuZCBnaXQgcHVsbCBzaW1wbGUgdGVzdCBjYXNlcycKKworLiAuL3Rlc3QtZ2l0bXctbGliLnNoCisuICRURVNUX0RJUkVDVE9SWS90ZXN0LWxpYi5zaAorCisKK3Rlc3RfY2hlY2tfcHJlY29uZAorCisKK3Rlc3RfZ2l0X3JlaW1wb3J0ICgpIHsKKwlnaXQgLWMgcmVtb3RlLm9yaWdpbi5kdW1iUHVzaD10cnVlIHB1c2ggJiYKKwlnaXQgLWMgcmVtb3RlLm9yaWdpbi5tZWRpYUltcG9ydD10cnVlIHB1bGwgLS1yZWJhc2UKK30KKworIyBEb24ndCBib3RoZXIgd2l0aCBwZXJtaXNzaW9ucywgYmUgYWRtaW5pc3RyYXRvciBieSBkZWZhdWx0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb25maWcnICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHJlbW90ZS5vcmlnaW4ubXdMb2dpbiBXaWtpQWRtaW4gJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHJlbW90ZS5vcmlnaW4ubXdQYXNzd29yZCBBZG1pblBhc3MgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLXVuc2V0IHJlbW90ZS5vcmlnaW4ubWVkaWFJbXBvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggY2FuIHVwbG9hZCBtZWRpYSAoRmlsZTopIGZpbGVzJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5Gb28udHh0ICYmCisJCWdpdCBhZGQgRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSB0ZXh0IGZpbGUiICYmCisJCWdpdCBwdXNoICYmCisJCSIkUEVSTF9QQVRIIiAtZSAicHJpbnQgU1RET1VUIFwiYmluYXJ5IGNvbnRlbnQ6IFwiLmNocigyNTUpOyIgPkZvby50eHQgJiYKKwkJZ2l0IGFkZCBGb28udHh0ICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBhIHRleHQgZmlsZSB3aXRoIGJpbmFyeSBjb250ZW50IiAmJgorCQlnaXQgcHVzaAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdvcmtzIG9uIHByZXZpb3VzbHkgY3JlYXRlZCB3aWtpIHdpdGggbWVkaWEgZmlsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtd19kaXIgbXdfZGlyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLm1lZGlhaW1wb3J0PXRydWUgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyX2Nsb25lICYmCisJdGVzdF9jbXAgbXdfZGlyX2Nsb25lL0Zvby50eHQgbXdfZGlyL0Zvby50eHQgJiYKKwkoY2QgbXdfZGlyX2Nsb25lICYmIGdpdCBjaGVja291dCBIRUFEXikgJiYKKwkoY2QgbXdfZGlyICYmIGdpdCBjaGVja291dCBIRUFEXikgJiYKKwl0ZXN0X2NtcCBtd19kaXJfY2xvbmUvRm9vLnR4dCBtd19kaXIvRm9vLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCAmIHB1bGwgd29yayB3aXRoIGxvY2FsbHkgcmVuYW1lZCBtZWRpYSBmaWxlcycgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2RpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIG13X2RpciIgJiYKKwkoCisJCWNkIG13X2RpciAmJgorCQllY2hvICJBIEZpbGUiID5Gb28udHh0ICYmCisJCWdpdCBhZGQgRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSBmaWxlIiAmJgorCQlnaXQgbXYgRm9vLnR4dCBCYXIudHh0ICYmCisJCWdpdCBjb21taXQgLW0gIlJlbmFtZSBhIGZpbGUiICYmCisJCXRlc3RfZ2l0X3JlaW1wb3J0ICYmCisJCWVjaG8gIkEgRmlsZSIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgQmFyLnR4dCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28udHh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCBjYW4gcHJvcGFnYXRlIGxvY2FsIHBhZ2UgZGVsZXRpb24nICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBtd19kaXIiICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLm13ICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+Rm9vLm13ICYmCisJCWdpdCBhZGQgRm9vLm13ICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCB0aGUgcGFnZSBGb28iICYmCisJCWdpdCBwdXNoICYmCisJCXJtIC1mIEZvby5tdyAmJgorCQlnaXQgY29tbWl0IC1hbSAiRGVsZXRlIHRoZSBwYWdlIEZvbyIgJiYKKwkJdGVzdF9naXRfcmVpbXBvcnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLm13CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCBjYW4gcHJvcGFnYXRlIGxvY2FsIG1lZGlhIGZpbGUgZGVsZXRpb24nICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBtd19kaXIiICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5Gb28udHh0ICYmCisJCWdpdCBhZGQgRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgdGhlIHRleHQgZmlsZSBGb28iICYmCisJCWdpdCBybSBGb28udHh0ICYmCisJCWdpdCBjb21taXQgLW0gIkRlbGV0ZSB0aGUgZmlsZSBGb28iICYmCisJCXRlc3RfZ2l0X3JlaW1wb3J0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIEZvby50eHQKKwkpCisnCisKKyMgdGVzdCBmYWlsdXJlOiB0aGUgZmlsZSBpcyBjb3JyZWN0bHkgdXBsb2FkZWQsIGFuZCB0aGVuIGRlbGV0ZWQgYnV0CisjIGFzIG5vIHBhZ2UgbGluayB0byBpdCwgdGhlIGltcG9ydCAod2hpY2ggbG9va3MgYXQgcGFnZSByZXZpc2lvbnMpCisjIGRvZXNuJ3Qgbm90aWNlIHRoZSBmaWxlIGRlbGV0aW9uIG9uIHRoZSB3aWtpLiBXZSBmZXRjaCB0aGUgbGlzdCBvZgorIyBmaWxlcyBmcm9tIHRoZSB3aWtpLCBidXQgYXMgdGhlIGZpbGUgaXMgZGVsZXRlZCwgaXQgZG9lc24ndCBhcHBlYXIuCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQgcHVsbCBjb3JyZWN0bHkgaW1wb3J0cyBtZWRpYSBmaWxlIGRlbGV0aW9uIHdoZW4gbm8gcGFnZSBsaW5rIHRvIGl0JyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgbXdfZGlyIiAmJgorCSgKKwkJY2QgbXdfZGlyICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+Rm9vLnR4dCAmJgorCQlnaXQgYWRkIEZvby50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIHRoZSB0ZXh0IGZpbGUgRm9vIiAmJgorCQlnaXQgcHVzaCAmJgorCQlnaXQgcm0gRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJEZWxldGUgdGhlIGZpbGUgRm9vIiAmJgorCQl0ZXN0X2dpdF9yZWltcG9ydCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28udHh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCBwcm9wZXJseSB3YXJucyBhYm91dCBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBtd19kaXIiICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJZWNobyAiQSBGaWxlIiA+Zm9vLmZvcmJpZGRlbiAmJgorCQlnaXQgYWRkIGZvby5mb3JiaWRkZW4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgZmlsZSIgJiYKKwkJZ2l0IHB1c2ggMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAiZm9vLmZvcmJpZGRlbiBpcyBub3QgYSBwZXJtaXR0ZWQgZmlsZSIgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHJlcG9zaXRvcnkgd2l0aCBtZWRpYSBmaWxlcycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIHRlc3RwYWdlICJJIGFtIGxpbmtpbmcgYSBmaWxlIFtbRmlsZTpGaWxlLnR4dF1dIiBmYWxzZSAmJgorCWVjaG8gIkZpbGUgY29udGVudCIgPkZpbGUudHh0ICYmCisJd2lraV91cGxvYWRfZmlsZSBGaWxlLnR4dCAmJgorCWVjaG8gIkFub3RoZXIgZmlsZSBjb250ZW50IiA+QW5vdGhlckZpbGUudHh0ICYmCisJd2lraV91cGxvYWRfZmlsZSBBbm90aGVyRmlsZS50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdvcmtzIHdpdGggb25lIHNwZWNpZmljIHBhZ2UgY2xvbmVkIGFuZCBtZWRpYWltcG9ydD10cnVlJyAnCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9dGVzdHBhZ2UgXAorCQkgIC1jIHJlbW90ZS5vcmlnaW4ubWVkaWFpbXBvcnQ9dHJ1ZSBcCisJCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE1ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbXdfZGlyXzE1IiAmJgorCXRlc3RfY29udGFpbnNfTl9maWxlcyBtd19kaXJfMTUgMyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xNS9UZXN0cGFnZS5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xNS9GaWxlOkZpbGUudHh0Lm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE1L0ZpbGUudHh0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE1L01haW5fUGFnZS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNS9GaWxlOkFub3RoZXJGaWxlLnR4dC5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNS9Bbm90aGV0RmlsZS50eHQgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE1L1Rlc3RwYWdlLm13IFRlc3RwYWdlICYmCisJdGVzdF9jbXAgbXdfZGlyXzE1L0ZpbGUudHh0IEZpbGUudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3b3JrcyB3aXRoIG9uZSBzcGVjaWZpYyBwYWdlIGNsb25lZCBhbmQgbWVkaWFpbXBvcnQ9ZmFsc2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtd19kaXJfMTYiICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9dGVzdHBhZ2UgXAorCQkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xNiAmJgorCXRlc3RfY29udGFpbnNfTl9maWxlcyBtd19kaXJfMTYgMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xNi9UZXN0cGFnZS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNi9GaWxlOkZpbGUudHh0Lm13ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE2L0ZpbGUudHh0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE2L01haW5fUGFnZS5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTYvVGVzdHBhZ2UubXcgVGVzdHBhZ2UKKycKKworIyBzaG91bGQgYmVoYXZlIGxpa2UgbWVkaWFpbXBvcnQ9ZmFsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3b3JrcyB3aXRoIG9uZSBzcGVjaWZpYyBwYWdlIGNsb25lZCBhbmQgbWVkaWFpbXBvcnQgdW5zZXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBtd19kaXJfMTciICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9dGVzdHBhZ2UgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE3ICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl8xNyAxICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE3L1Rlc3RwYWdlLm13ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE3L0ZpbGU6RmlsZS50eHQubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTcvRmlsZS50eHQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTcvTWFpbl9QYWdlLm13ICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xNy9UZXN0cGFnZS5tdyBUZXN0cGFnZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjQtcHVsbC1ieS1yZXYuc2ggYi9jb250cmliL213LXRvLWdpdC90L3Q5MzY0LXB1bGwtYnktcmV2LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVjMjI0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Q5MzY0LXB1bGwtYnktcmV2LnNoCkBAIC0wLDAgKzEsMTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBHaXQgTWVkaWF3aWtpIHJlbW90ZSBoZWxwZXI6IGdpdCBwdWxsIGJ5IHJldmlzaW9uJworCisuIC4vdGVzdC1naXRtdy1saWIuc2gKKy4gLi9wdXNoLXB1bGwtdGVzdHMuc2gKKy4gJFRFU1RfRElSRUNUT1JZL3Rlc3QtbGliLnNoCisKK3Rlc3RfY2hlY2tfcHJlY29uZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmF0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBtZWRpYXdpa2kuZmV0Y2hTdHJhdGVneSBieV9yZXYKKycKKwordGVzdF9wdXNoX3B1bGwKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LWxpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjJjZmFjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LWxpYi5zaApAQCAtMCwwICsxLDQzNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIKKyMgICAgIENoYXJsZXMgUm91c3NlbCA8Y2hhcmxlcy5yb3Vzc2VsQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIENhdGhlYnJhcyA8c2ltb24uY2F0aGVicmFzQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEp1bGllbiBLaGF5YXQgPGp1bGllbi5raGF5YXRAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgR3VpbGxhdW1lIFNhc2R5IDxndWlsbGF1bWUuc2FzZHlAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gUGVycmF0IDxzaW1vbi5wZXJyYXRAZW5zaW1hZy5pbWFnLmZyPgorIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUworIyBZb3UgbWlnaHQgd2FudCB0byBjaGFuZ2UgdGhlc2Ugb25lcworIworCisuIC4vdGVzdC5jb25maWcKKworV0lLSV9VUkw9aHR0cDovLyIkU0VSVkVSX0FERFI6JFBPUlQvJFdJS0lfRElSX05BTUUiCitDVVJSX0RJUj0kKHB3ZCkKK1RFU1RfT1VUUFVUX0RJUkVDVE9SWT0kKHB3ZCkKK1RFU1RfRElSRUNUT1JZPSIkQ1VSUl9ESVIiLy4uLy4uLy4uL3QKKworZXhwb3J0IFRFU1RfT1VUUFVUX0RJUkVDVE9SWSBURVNUX0RJUkVDVE9SWSBDVVJSX0RJUgorCitpZiB0ZXN0ICIkTElHSFRUUEQiID0gImZhbHNlIiA7IHRoZW4KKwlQT1JUPTgwCitlbHNlCisJV0lLSV9ESVJfSU5TVD0iJENVUlJfRElSLyRXRUJfV1dXIgorZmkKKword2lraV91cGxvYWRfZmlsZSAoKSB7CisJIiRDVVJSX0RJUiIvdGVzdC1naXRtdy5wbCB1cGxvYWRfZmlsZSAiJEAiCit9CisKK3dpa2lfZ2V0cGFnZSAoKSB7CisJIiRDVVJSX0RJUiIvdGVzdC1naXRtdy5wbCBnZXRfcGFnZSAiJEAiCit9CisKK3dpa2lfZGVsZXRlX3BhZ2UgKCkgeworCSIkQ1VSUl9ESVIiL3Rlc3QtZ2l0bXcucGwgZGVsZXRlX3BhZ2UgIiRAIgorfQorCit3aWtpX2VkaXRwYWdlICgpIHsKKwkiJENVUlJfRElSIi90ZXN0LWdpdG13LnBsIGVkaXRfcGFnZSAiJEAiCit9CisKK2RpZSAoKSB7CisJZGllX3dpdGhfc3RhdHVzIDEgIiRAIgorfQorCitkaWVfd2l0aF9zdGF0dXMgKCkgeworCXN0YXR1cz0kMQorCXNoaWZ0CisJZWNobyA+JjIgIiQqIgorCWV4aXQgIiRzdGF0dXMiCit9CisKKworIyBDaGVjayB0aGUgcHJlY29uZGl0aW9ucyB0byBydW4gZ2l0LXJlbW90ZS1tZWRpYXdpa2kncyB0ZXN0cwordGVzdF9jaGVja19wcmVjb25kICgpIHsKKwlpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAorCXRoZW4KKwkJc2tpcF9hbGw9J3NraXBwaW5nIGdhdGV3YXkgZ2l0LW13IHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJCXRlc3RfZG9uZQorCWZpCisKKwlpZiBbICEgLWYgIiRHSVRfQlVJTERfRElSIi9naXQtcmVtb3RlLW1lZGlhd2lraSBdOworCXRoZW4KKwkJZWNobyAiTm8gcmVtb3RlIG1lZGlhd2lraSBmb3IgZ2l0IGZvdW5kLiBDb3B5aW5nIGl0IGluIGdpdCIKKwkJZWNobyAiY3AgJEdJVF9CVUlMRF9ESVIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kgJEdJVF9CVUlMRF9ESVIvIgorCQlsbiAtcyAiJEdJVF9CVUlMRF9ESVIiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpICIkR0lUX0JVSUxEX0RJUiIKKwlmaQorCisJaWYgWyAhIC1kICIkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRSIgXTsKKwl0aGVuCisJCXNraXBfYWxsPSdza2lwcGluZyBnYXRld2F5IGdpdC1tdyB0ZXN0cywgbm8gbWVkaWF3aWtpIGZvdW5kJworCQl0ZXN0X2RvbmUKKwlmaQorfQorCisjIHRlc3RfZGlmZl9kaXJlY3RvcmllcyA8ZGlyX2dpdD4gPGRpcl93aWtpPgorIworIyBDb21wYXJlIHRoZSBjb250ZW50cyBvZiBkaXJlY3RvcmllcyA8ZGlyX2dpdD4gYW5kIDxkaXJfd2lraT4gd2l0aCBkaWZmCisjIGFuZCBlcnJvcnMgaWYgdGhleSBkbyBub3QgbWF0Y2guIFRoZSBwcm9ncmFtIHdpbGwKKyMgbm90IGxvb2sgaW50byAuZ2l0IGluIHRoZSBwcm9jZXNzLgorIyBXYXJuaW5nOiB0aGUgZmlyc3QgYXJndW1lbnQgTVVTVCBiZSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGdpdCBkYXRhCit0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgKCkgeworCXJtIC1yZiAiJDFfdG1wIgorCW1rZGlyIC1wICIkMV90bXAiCisJY3AgIiQxIi8qLm13ICIkMV90bXAiCisJZGlmZiAtciAtYiAiJDFfdG1wIiAiJDIiCit9CisKKyMgJDE9PGRpcj4KKyMgJDI9PE4+CisjCisjIENoZWNrIHRoYXQgPGRpcj4gY29udGFpbnMgZXhhY3RseSA8Tj4gZmlsZXMKK3Rlc3RfY29udGFpbnNfTl9maWxlcyAoKSB7CisJaWYgdGVzdCBgbHMgLS0gIiQxIiB8IHdjIC1sYCAtbmUgIiQyIjsgdGhlbgorCQllY2hvICJkaXJlY3RvcnkgJDEgc291bGQgY29udGFpbiAkMiBmaWxlcyIKKwkJZWNobyAiaXQgY29udGFpbnMgdGhlc2UgZmlsZXM6IgorCQlscyAiJDEiCisJCWZhbHNlCisJZmkKK30KKworCisjIHdpa2lfY2hlY2tfY29udGVudCA8ZmlsZV9uYW1lPiA8cGFnZV9uYW1lPgorIworIyBDb21wYXJlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgPGZpbGVfbmFtZT4gYW5kIHRoZSB3aWtpIHBhZ2UKKyMgPHBhZ2VfbmFtZT4gYW5kIGV4aXRzIHdpdGggZXJyb3IgMSBpZiB0aGV5IGRvIG5vdCBtYXRjaC4KK3dpa2lfY2hlY2tfY29udGVudCAoKSB7CisJbWtkaXIgLXAgd2lraV90bXAKKwl3aWtpX2dldHBhZ2UgIiQyIiB3aWtpX3RtcAorCSMgcmVwbGFjZW1lbnQgb2YgZm9yYmlkZGVuIGNoYXJhY3RlciBpbiBmaWxlIG5hbWUKKwlwYWdlX25hbWU9JChwcmludGYgIiVzXG4iICIkMiIgfCBzZWQgLWUgInMvXC8vJTJGL2ciKQorCisJZGlmZiAtYiAiJDEiIHdpa2lfdG1wLyIkcGFnZV9uYW1lIi5tdworCWlmIHRlc3QgJD8gLW5lIDAKKwl0aGVuCisJCXJtIC1yZiB3aWtpX3RtcAorCQllcnJvciAiRVJST1I6IGZpbGUgJDIgbm90IGZvdW5kIG9uIHdpa2kiCisJZmkKKwlybSAtcmYgd2lraV90bXAKK30KKworIyB3aWtpX3BhZ2VfZXhpc3QgPHBhZ2VfbmFtZT4KKyMKKyMgQ2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgcGFnZSA8cGFnZV9uYW1lPiBvbiB0aGUgd2lraSBhbmQgZXhpdHMKKyMgd2l0aCBlcnJvciBpZiBpdCBpcyBhYnNlbnQgZnJvbSBpdC4KK3dpa2lfcGFnZV9leGlzdCAoKSB7CisJbWtkaXIgLXAgd2lraV90bXAKKwl3aWtpX2dldHBhZ2UgIiQxIiB3aWtpX3RtcAorCXBhZ2VfbmFtZT0kKHByaW50ZiAiJXNcbiIgIiQxIiB8IHNlZCAicy9cLy8lMkYvZyIpCisJaWYgdGVzdCAtZiB3aWtpX3RtcC8iJHBhZ2VfbmFtZSIubXcgOyB0aGVuCisJCXJtIC1yZiB3aWtpX3RtcAorCWVsc2UKKwkJcm0gLXJmIHdpa2lfdG1wCisJCWVycm9yICJ0ZXN0IGZhaWxlZDogZmlsZSAkMSBub3QgZm91bmQgb24gd2lraSIKKwlmaQorfQorCisjIHdpa2lfZ2V0YWxscGFnZW5hbWUKKyMKKyMgRmV0Y2ggdGhlIG5hbWUgb2YgZWFjaCBwYWdlIG9uIHRoZSB3aWtpLgord2lraV9nZXRhbGxwYWdlbmFtZSAoKSB7CisJIiRDVVJSX0RJUiIvdGVzdC1naXRtdy5wbCBnZXRhbGxwYWdlbmFtZQorfQorCisjIHdpa2lfZ2V0YWxscGFnZWNhdGVnb3J5IDxjYXRlZ29yeT4KKyMKKyMgRmV0Y2ggdGhlIG5hbWUgb2YgZWFjaCBwYWdlIGJlbG9uZ2luZyB0byA8Y2F0ZWdvcnk+IG9uIHRoZSB3aWtpLgord2lraV9nZXRhbGxwYWdlY2F0ZWdvcnkgKCkgeworCSIkQ1VSUl9ESVIiL3Rlc3QtZ2l0bXcucGwgZ2V0YWxscGFnZW5hbWUgIiRAIgorfQorCisjIHdpa2lfZ2V0YWxscGFnZSA8ZGVzdF9kaXI+IFs8Y2F0ZWdvcnk+XQorIworIyBGZXRjaCBhbGwgdGhlIHBhZ2VzIGZyb20gdGhlIHdpa2kgYW5kIHBsYWNlIHRoZW0gaW4gdGhlIGRpcmVjdG9yeQorIyA8ZGVzdF9kaXI+LgorIyBJZiA8Y2F0ZWdvcnk+IGlzIGRlZmluZSwgdGhlbiB3aWtpX2dldGFsbHBhZ2UgZmV0Y2ggdGhlIHBhZ2VzIGluY2x1ZGVkCisjIGluIDxjYXRlZ29yeT4uCit3aWtpX2dldGFsbHBhZ2UgKCkgeworCWlmIHRlc3QgLXogIiQyIjsKKwl0aGVuCisJCXdpa2lfZ2V0YWxscGFnZW5hbWUKKwllbHNlCisJCXdpa2lfZ2V0YWxscGFnZWNhdGVnb3J5ICIkMiIKKwlmaQorCW1rZGlyIC1wICIkMSIKKwl3aGlsZSByZWFkIC1yIGxpbmU7IGRvCisJCXdpa2lfZ2V0cGFnZSAiJGxpbmUiICQxOworCWRvbmUgPCBhbGwudHh0Cit9CisKKyMgPT09PT09PT09PT09PT09PT0gSW5zdGFsbCBwYXJ0ID09PT09PT09PT09PT09PT09CisKK2Vycm9yICgpIHsKKwllY2hvICIkQCIgPiYyCisJZXhpdCAxCit9CisKKyMgY29uZmlnX2xpZ2h0dHBkCisjCisjIENyZWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgdGhlIGZvbGRlcnMgbmVjZXNzYXJ5IHRvIHN0YXJ0IGxpZ2h0dHBkLgorIyBPdmVyd3JpdGUgYW55IGV4aXN0aW5nIGZpbGUuCitjb25maWdfbGlnaHR0cGQgKCkgeworCW1rZGlyIC1wICRXRUIKKwlta2RpciAtcCAkV0VCX1RNUAorCW1rZGlyIC1wICRXRUJfV1dXCisJY2F0ID4gJFdFQi9saWdodHRwZC5jb25mIDw8RU9GCisJc2VydmVyLmRvY3VtZW50LXJvb3QgPSAiJENVUlJfRElSLyRXRUJfV1dXIgorCXNlcnZlci5wb3J0ID0gJFBPUlQKKwlzZXJ2ZXIucGlkLWZpbGUgPSAiJENVUlJfRElSLyRXRUJfVE1QL3BpZCIKKworCXNlcnZlci5tb2R1bGVzID0gKAorCSJtb2RfcmV3cml0ZSIsCisJIm1vZF9yZWRpcmVjdCIsCisJIm1vZF9hY2Nlc3MiLAorCSJtb2RfYWNjZXNzbG9nIiwKKwkibW9kX2Zhc3RjZ2kiCisJKQorCisJaW5kZXgtZmlsZS5uYW1lcyA9ICgiaW5kZXgucGhwIiAsICJpbmRleC5odG1sIikKKworCW1pbWV0eXBlLmFzc2lnbgkJICAgID0gKAorCSIucGRmIgkJPT4JImFwcGxpY2F0aW9uL3BkZiIsCisJIi5zaWciCQk9PgkiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZSIsCisJIi5zcGwiCQk9PgkiYXBwbGljYXRpb24vZnV0dXJlc3BsYXNoIiwKKwkiLmNsYXNzIgk9PgkiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKKwkiLnBzIgkJPT4JImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiLAorCSIudG9ycmVudCIJPT4JImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudCIsCisJIi5kdmkiCQk9PgkiYXBwbGljYXRpb24veC1kdmkiLAorCSIuZ3oiCQk9PgkiYXBwbGljYXRpb24veC1nemlwIiwKKwkiLnBhYyIJCT0+CSJhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWciLAorCSIuc3dmIgkJPT4JImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiwKKwkiLnRhci5neiIJPT4JImFwcGxpY2F0aW9uL3gtdGd6IiwKKwkiLnRneiIJCT0+CSJhcHBsaWNhdGlvbi94LXRneiIsCisJIi50YXIiCQk9PgkiYXBwbGljYXRpb24veC10YXIiLAorCSIuemlwIgkJPT4JImFwcGxpY2F0aW9uL3ppcCIsCisJIi5tcDMiCQk9PgkiYXVkaW8vbXBlZyIsCisJIi5tM3UiCQk9PgkiYXVkaW8veC1tcGVndXJsIiwKKwkiLndtYSIJCT0+CSJhdWRpby94LW1zLXdtYSIsCisJIi53YXgiCQk9PgkiYXVkaW8veC1tcy13YXgiLAorCSIub2dnIgkJPT4JImFwcGxpY2F0aW9uL29nZyIsCisJIi53YXYiCQk9PgkiYXVkaW8veC13YXYiLAorCSIuZ2lmIgkJPT4JImltYWdlL2dpZiIsCisJIi5qcGciCQk9PgkiaW1hZ2UvanBlZyIsCisJIi5qcGVnIgkJPT4JImltYWdlL2pwZWciLAorCSIucG5nIgkJPT4JImltYWdlL3BuZyIsCisJIi54Ym0iCQk9PgkiaW1hZ2UveC14Yml0bWFwIiwKKwkiLnhwbSIJCT0+CSJpbWFnZS94LXhwaXhtYXAiLAorCSIueHdkIgkJPT4JImltYWdlL3gteHdpbmRvd2R1bXAiLAorCSIuY3NzIgkJPT4JInRleHQvY3NzIiwKKwkiLmh0bWwiCQk9PgkidGV4dC9odG1sIiwKKwkiLmh0bSIJCT0+CSJ0ZXh0L2h0bWwiLAorCSIuanMiCQk9PgkidGV4dC9qYXZhc2NyaXB0IiwKKwkiLmFzYyIJCT0+CSJ0ZXh0L3BsYWluIiwKKwkiLmMiCQk9PgkidGV4dC9wbGFpbiIsCisJIi5jcHAiCQk9PgkidGV4dC9wbGFpbiIsCisJIi5sb2ciCQk9PgkidGV4dC9wbGFpbiIsCisJIi5jb25mIgkJPT4JInRleHQvcGxhaW4iLAorCSIudGV4dCIJCT0+CSJ0ZXh0L3BsYWluIiwKKwkiLnR4dCIJCT0+CSJ0ZXh0L3BsYWluIiwKKwkiLmR0ZCIJCT0+CSJ0ZXh0L3htbCIsCisJIi54bWwiCQk9PgkidGV4dC94bWwiLAorCSIubXBlZyIJCT0+CSJ2aWRlby9tcGVnIiwKKwkiLm1wZyIJCT0+CSJ2aWRlby9tcGVnIiwKKwkiLm1vdiIJCT0+CSJ2aWRlby9xdWlja3RpbWUiLAorCSIucXQiCQk9PgkidmlkZW8vcXVpY2t0aW1lIiwKKwkiLmF2aSIJCT0+CSJ2aWRlby94LW1zdmlkZW8iLAorCSIuYXNmIgkJPT4JInZpZGVvL3gtbXMtYXNmIiwKKwkiLmFzeCIJCT0+CSJ2aWRlby94LW1zLWFzZiIsCisJIi53bXYiCQk9PgkidmlkZW8veC1tcy13bXYiLAorCSIuYnoyIgkJPT4JImFwcGxpY2F0aW9uL3gtYnppcCIsCisJIi50YnoiCQk9PgkiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIiwKKwkiLnRhci5iejIiCT0+CSJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiLAorCSIiCQk9PgkidGV4dC9wbGFpbiIKKwkpCisKKwlmYXN0Y2dpLnNlcnZlciA9ICggIi5waHAiID0+CisJKCJsb2NhbGhvc3QiID0+CisJKCAic29ja2V0IiA9PiAiJENVUlJfRElSLyRXRUJfVE1QL3BocC5zb2NrZXQiLAorCSJiaW4tcGF0aCIgPT4gIiRQSFBfRElSL3BocC1jZ2kgLWMgJENVUlJfRElSLyRXRUIvcGhwLmluaSIKKworCSkKKwkpCisJKQorRU9GCisKKwljYXQgPiAkV0VCL3BocC5pbmkgPDxFT0YKKwlzZXNzaW9uLnNhdmVfcGF0aCA9JyRDVVJSX0RJUi8kV0VCX1RNUCcKK0VPRgorfQorCisjIHN0YXJ0X2xpZ2h0dHBkCisjCisjIFN0YXJ0IG9yIHJlc3RhcnQgZGFlbW9uIGxpZ2h0dHBkLiBJZiByZXN0YXJ0LCByZXdyaXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCitzdGFydF9saWdodHRwZCAoKSB7CisJaWYgdGVzdCAtZiAiJFdFQl9UTVAvcGlkIjsgdGhlbgorCQllY2hvICJJbnN0YW5jZSBhbHJlYWR5IHJ1bm5pbmcuIFJlc3RhcnRpbmcuLi4iCisJCXN0b3BfbGlnaHR0cGQKKwlmaQorCWNvbmZpZ19saWdodHRwZAorCSIkTElHSFRUUERfRElSIi9saWdodHRwZCAtZiAiJFdFQiIvbGlnaHR0cGQuY29uZgorCisJaWYgdGVzdCAkPyAtbmUgMCA7IHRoZW4KKwkJZWNobyAiQ291bGQgbm90IGV4ZWN1dGUgaHR0cCBkZWFtb24gbGlnaHR0cGQiCisJCWV4aXQgMQorCWZpCit9CisKKyMgc3RvcF9saWdodHRwZAorIworIyBLaWxsIGRhZW1vbiBsaWdodHRwZCBhbmQgcmVtb3ZlcyBmaWxlcyBhbmQgZm9sZGVycyBhc3NvY2lhdGVkLgorc3RvcF9saWdodHRwZCAoKSB7CisJdGVzdCAtZiAiJFdFQl9UTVAvcGlkIiAmJiBraWxsICQoY2F0ICIkV0VCX1RNUC9waWQiKQorCXJtIC1yZiAiJFdFQiIKK30KKworIyBDcmVhdGUgdGhlIFNRTGl0ZSBkYXRhYmFzZSBvZiB0aGUgTWVkaWFXaWtpLiBJZiB0aGUgZGF0YWJhc2UgZmlsZSBhbHJlYWR5CisjIGV4aXN0cywgaXQgd2lsbCBiZSBkZWxldGVkLgorIyBUaGlzIHNjcmlwdCBzaG91bGQgYmUgcnVubmVkIGZyb20gdGhlIGRpcmVjdG9yeSB3aGVyZSAkRklMRVNfRk9MREVSIGlzCisjIGxvY2F0ZWQuCitjcmVhdGVfZGIgKCkgeworCXJtIC1mICIkVE1QLyREQl9GSUxFIgorCisJZWNobyAiR2VuZXJhdGluZyB0aGUgU1FMaXRlIGRhdGFiYXNlIGZpbGUuIEl0IGNhbiB0YWtlIHNvbWUgdGltZSAuLi4iCisJIyBSdW4gdGhlIHBocCBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlCisJIyB3aXRoIGNVUkwgY2FsbHMuCisJcGhwICIkRklMRVNfRk9MREVSLyREQl9JTlNUQUxMX1NDUklQVCIgJChiYXNlbmFtZSAiJERCX0ZJTEUiIC5zcWxpdGUpIFwKKwkJIiRXSUtJX0FETUlOIiAiJFdJS0lfUEFTU1ciICIkVE1QIiAiJFBPUlQiCisKKwlpZiBbICEgLWYgIiRUTVAvJERCX0ZJTEUiIF0gOyB0aGVuCisJCWVycm9yICJDYW4ndCBjcmVhdGUgZGF0YWJhc2UgZmlsZSAkVE1QLyREQl9GSUxFLiBUcnkgdG8gcnVuIC4vaW5zdGFsbC13aWtpLnNoIGRlbGV0ZSBmaXJzdC4iCisJZmkKKworCSMgQ29weSB0aGUgZ2VuZXJhdGVkIGRhdGFiYXNlIGZpbGUgaW50byB0aGUgZGlyZWN0b3J5IHRoZQorCSMgdXNlciBpbmRpY2F0ZWQuCisJY3AgIiRUTVAvJERCX0ZJTEUiICIkRklMRVNfRk9MREVSIiB8fAorCQllcnJvciAiVW5hYmxlIHRvIGNvcHkgJFRNUC8kREJfRklMRSB0byAkRklMRVNfRk9MREVSIgorfQorCisjIEluc3RhbGwgYSB3aWtpIGluIHlvdXIgd2ViIHNlcnZlciBkaXJlY3RvcnkuCit3aWtpX2luc3RhbGwgKCkgeworCWlmIHRlc3QgJExJR0hUVFBEID0gInRydWUiIDsgdGhlbgorCQlzdGFydF9saWdodHRwZAorCWZpCisKKwlTRVJWRVJfQUREUj0kU0VSVkVSX0FERFI6JFBPUlQKKwkjIEluIHRoaXMgcGFydCwgd2UgY2hhbmdlIGRpcmVjdG9yeSB0byAkVE1QIGluIG9yZGVyIHRvIGRvd25sb2FkLAorCSMgdW5wYWNrIGFuZCBjb3B5IHRoZSBmaWxlcyBvZiBNZWRpYVdpa2kKKwkoCisJbWtkaXIgLXAgIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIgorCWlmIFsgISAtZCAiJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUiIF0gOyB0aGVuCisJCWVycm9yICJGb2xkZXIgJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUgZG9lc24ndCBleGlzdC4KKwkJUGxlYXNlIGNyZWF0ZSBpdCBhbmQgbGF1bmNoIHRoZSBzY3JpcHQgYWdhaW4uIgorCWZpCisKKwkjIEZldGNoIE1lZGlhV2lraSdzIGFyY2hpdmUgaWYgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgVE1QIGRpcmVjdG9yeQorCWNkICIkVE1QIgorCWlmIFsgISAtZiAiJE1XX1ZFUlNJT04udGFyLmd6IiBdIDsgdGhlbgorCQllY2hvICJEb3dubG9hZGluZyAkTVdfVkVSU0lPTiBzb3VyY2VzIC4uLiIKKwkJd2dldCAiaHR0cDovL2Rvd25sb2FkLndpa2ltZWRpYS5vcmcvbWVkaWF3aWtpLzEuMTkvbWVkaWF3aWtpLTEuMTkuMC50YXIuZ3oiIHx8CisJCQllcnJvciAiVW5hYmxlIHRvIGRvd25sb2FkICJcCisJCQkiaHR0cDovL2Rvd25sb2FkLndpa2ltZWRpYS5vcmcvbWVkaWF3aWtpLzEuMTkvIlwKKwkJCSJtZWRpYXdpa2ktMS4xOS4wLnRhci5nei4gIlwKKwkJCSJQbGVhc2UgZml4IHlvdXIgY29ubmVjdGlvbiBhbmQgbGF1bmNoIHRoZSBzY3JpcHQgYWdhaW4uIgorCQllY2hvICIkTVdfVkVSU0lPTi50YXIuZ3ogZG93bmxvYWRlZCBpbiBgcHdkYC4gIlwKKwkJCSJZb3UgY2FuIGRlbGV0ZSBpdCBsYXRlciBpZiB5b3Ugd2FudC4iCisJZWxzZQorCQllY2hvICJSZXVzaW5nIGV4aXN0aW5nICRNV19WRVJTSU9OLnRhci5neiBkb3dubG9hZGVkIGluIGBwd2RgLiIKKwlmaQorCWFyY2hpdmVfYWJzX3BhdGg9JChwd2QpLyIkTVdfVkVSU0lPTi50YXIuZ3oiCisJY2QgIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FLyIgfHwKKwkJZXJyb3IgImNhbid0IGNkIHRvICRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FLyIKKwl0YXIgeHpmICIkYXJjaGl2ZV9hYnNfcGF0aCIgLS1zdHJpcC1jb21wb25lbnRzPTEgfHwKKwkJZXJyb3IgIlVuYWJsZSB0byBleHRyYWN0IFdpa2lNZWRpYSdzIGZpbGVzIGZyb20gJGFyY2hpdmVfYWJzX3BhdGggdG8gIlwKKwkJCSIkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRSIKKwkpIHx8IGV4aXQgMQorCisJY3JlYXRlX2RiCisKKwkjIENvcHkgdGhlIGdlbmVyaWMgTG9jYWxTZXR0aW5ncy5waHAgaW4gdGhlIHdlYiBzZXJ2ZXIncyBkaXJlY3RvcnkKKwkjIEFuZCBtb2RpZnkgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gdGhlIG9uZXMgc2V0IGF0IHRoZSB0b3AKKwkjIG9mIHRoaXMgc2NyaXB0LgorCSMgTm90ZSB0aGF0IExvY2FsU2V0dGluZ3MucGhwIGlzIG5ldmVyIG1vZGlmaWVkLgorCWlmIFsgISAtZiAiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLnBocCIgXSA7IHRoZW4KKwkJZXJyb3IgIkNhbid0IGZpbmQgJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLnBocCAiIFwKKwkJCSJpbiB0aGUgY3VycmVudCBmb2xkZXIuICJcCisJCSJQbGVhc2UgcnVuIHRoZSBzY3JpcHQgaW5zaWRlIGl0cyBmb2xkZXIuIgorCWZpCisJY3AgIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy5waHAiIFwKKwkJIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIiB8fAorCQllcnJvciAiVW5hYmxlIHRvIGNvcHkgJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLnBocCAiIFwKKwkJInRvICRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIgorCisJIyBQYXJzZSBhbmQgc2V0IHRoZSBMb2NhbFNldHRpbmdzIGZpbGUgb2YgdGhlIHVzZXIgYWNjb3JkaW5nIHRvIHRoZQorCSMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgc2VjdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc2NyaXB0CisJZmlsZV9zd2FwPSIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3Mtc3dhcC5waHAiCisJc2VkICJzLEBXR19TQ1JJUFRfUEFUSEAsLyRXSUtJX0RJUl9OQU1FLCIgXAorCQkiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiID4gIiRmaWxlX3N3YXAiCisJbXYgIiRmaWxlX3N3YXAiICIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIKKwlzZWQgInMsQFdHX1NFUlZFUkAsaHR0cDovLyRTRVJWRVJfQUREUiwiIFwKKwkJIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIiA+ICIkZmlsZV9zd2FwIgorCW12ICIkZmlsZV9zd2FwIiAiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiCisJc2VkICJzLEBXR19TUUxJVEVfREFUQURJUkAsJFRNUCwiIFwKKwkJIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIiA+ICIkZmlsZV9zd2FwIgorCW12ICIkZmlsZV9zd2FwIiAiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiCisJc2VkICJzLEBXR19TUUxJVEVfREFUQUZJTEVALCQoIGJhc2VuYW1lICREQl9GSUxFIC5zcWxpdGUpLCIgXAorCQkiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiID4gIiRmaWxlX3N3YXAiCisJbXYgIiRmaWxlX3N3YXAiICIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIKKworCW12ICIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIgXAorCQkiJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUvTG9jYWxTZXR0aW5ncy5waHAiIHx8CisJCWVycm9yICJVbmFibGUgdG8gbW92ZSAkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIgXAorCQkiaW4gJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUiCisJZWNobyAiRmlsZSAkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MucGhwIGlzIHNldCBpbiIgXAorCQkiICRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIgorCisJZWNobyAiWW91ciB3aWtpIGhhcyBiZWVuIGluc3RhbGxlZC4gWW91IGNhbiBjaGVjayBpdCBhdAorCQlodHRwOi8vJFNFUlZFUl9BRERSLyRXSUtJX0RJUl9OQU1FIgorfQorCisjIFJlc2V0IHRoZSBkYXRhYmFzZSBvZiB0aGUgd2lraSBhbmQgdGhlIHBhc3N3b3JkIG9mIHRoZSBhZG1pbgorIworIyBXYXJuaW5nOiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIG9ubHkgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgdC8gZGlyZWN0b3J5Cit3aWtpX3Jlc2V0ICgpIHsKKwkjIENvcHkgaW5pdGlhbCBkYXRhYmFzZSBvZiB0aGUgd2lraQorCWlmIFsgISAtZiAiLi4vJEZJTEVTX0ZPTERFUi8kREJfRklMRSIgXSA7IHRoZW4KKwkJZXJyb3IgIkNhbid0IGZpbmQgLi4vJEZJTEVTX0ZPTERFUi8kREJfRklMRSBpbiB0aGUgY3VycmVudCBmb2xkZXIuIgorCWZpCisJY3AgIi4uLyRGSUxFU19GT0xERVIvJERCX0ZJTEUiICIkVE1QIiB8fAorCQllcnJvciAiQ2FuJ3QgY29weSAuLi8kRklMRVNfRk9MREVSLyREQl9GSUxFIGluICRUTVAiCisJZWNobyAiRmlsZSAkRklMRVNfRk9MREVSLyREQl9GSUxFIGlzIHNldCBpbiAkVE1QIgorfQorCisjIERlbGV0ZSB0aGUgd2lraSBjcmVhdGVkIGluIHRoZSB3ZWIgc2VydmVyJ3MgZGlyZWN0b3J5IGFuZCBhbGwgaXRzIGNvbnRlbnQKKyMgc2F2ZWQgaW4gdGhlIGRhdGFiYXNlLgord2lraV9kZWxldGUgKCkgeworCWlmIHRlc3QgJExJR0hUVFBEID0gInRydWUiOyB0aGVuCisJCXN0b3BfbGlnaHR0cGQKKwllbHNlCisJCSMgRGVsZXRlIHRoZSB3aWtpJ3MgZGlyZWN0b3J5LgorCQlybSAtcmYgIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIiB8fAorCQkJZXJyb3IgIldpa2kncyBkaXJlY3RvcnkgJFdJS0lfRElSX0lOU1QvIiBcCisJCQkiJFdJS0lfRElSX05BTUUgY291bGQgbm90IGJlIGRlbGV0ZWQiCisJCSMgRGVsZXRlIHRoZSB3aWtpJ3MgU1FMaXRlIGRhdGFiYXNlLgorCQlybSAtZiAiJFRNUC8kREJfRklMRSIgfHwKKwkJCWVycm9yICJEYXRhYmFzZSAkVE1QLyREQl9GSUxFIGNvdWxkIG5vdCBiZSBkZWxldGVkLiIKKwlmaQorCisJIyBEZWxldGUgdGhlIHdpa2kncyBTUUxpdGUgZGF0YWJhc2UKKwlybSAtZiAiJFRNUC8kREJfRklMRSIgfHwgZXJyb3IgIkRhdGFiYXNlICRUTVAvJERCX0ZJTEUgY291bGQgbm90IGJlIGRlbGV0ZWQuIgorCXJtIC1mICIkRklMRVNfRk9MREVSLyREQl9GSUxFIgorCXJtIC1yZiAiJFRNUC8kTVdfVkVSU0lPTiIKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy5wbCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZmY3NjI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LnBsCkBAIC0wLDAgKzEsMjI1IEBACisjIS91c3IvYmluL3BlcmwgLXcgLXMKKyMgQ29weXJpZ2h0IChDKSAyMDEyCisjICAgICBDaGFybGVzIFJvdXNzZWwgPGNoYXJsZXMucm91c3NlbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBDYXRoZWJyYXMgPHNpbW9uLmNhdGhlYnJhc0BlbnNpbWFnLmltYWcuZnI+CisjICAgICBKdWxpZW4gS2hheWF0IDxqdWxpZW4ua2hheWF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEd1aWxsYXVtZSBTYXNkeSA8Z3VpbGxhdW1lLnNhc2R5QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIFBlcnJhdCA8c2ltb24ucGVycmF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgTGljZW5zZTogR1BMIHYyIG9yIGxhdGVyCisKKyMgVXNhZ2U6CisjICAgICAgIC4vdGVzdC1naXRtdy5wbCA8Y29tbWFuZD4gW2FyZ3VtZW50XSoKKyMgRXhlY3V0ZSBpbiB0ZXJtaW5hbCB1c2luZyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbCBhcyBmaXJzdAorIyBwYXJhbWV0ZXIsIGFuZCB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYXMgZm9sbG93aW5nIHBhcmFtZXRlcnMKKyMKKyMgRXhhbXBsZToKKyMgICAgIC4vdGVzdC1naXRtdy5wbCAiZ2V0X3BhZ2UiIGZvbyAuCisjIHdpbGwgY2FsbCA8d2lraV9nZXRwYWdlPiB3aXRoIGFyZ3VtZW50cyA8Zm9vPiBhbmQgPC4+CisjCisjIEF2YWlsYWJsZSBmdW5jdGlvbnMgYXJlOgorIyAgICAgImdldF9wYWdlIgorIyAgICAgImRlbGV0ZV9wYWdlIgorIyAgICAgImVkaXRfcGFnZSIKKyMgICAgICJnZXRhbGxwYWdlbmFtZSIKKwordXNlIE1lZGlhV2lraTo6QVBJOwordXNlIEdldG9wdDo6TG9uZzsKK3VzZSBlbmNvZGluZyAndXRmOCc7Cit1c2UgRGF0ZVRpbWU6OkZvcm1hdDo6SVNPODYwMTsKK3VzZSBvcGVuICc6ZW5jb2RpbmcodXRmOCknOwordXNlIGNvbnN0YW50IFNMQVNIX1JFUExBQ0VNRU5UID0+ICIlMkYiOworCisjUGFyc2luZyBvZiB0aGUgY29uZmlnIGZpbGUKKworbXkgJGNvbmZpZ2ZpbGUgPSAiJEVOVnsnQ1VSUl9ESVInfS90ZXN0LmNvbmZpZyI7CitteSAlY29uZmlnOworb3BlbiBteSAkQ09ORklHLCAiPCIsICAkY29uZmlnZmlsZSBvciBkaWUgImNhbid0IG9wZW4gJGNvbmZpZ2ZpbGU6ICQhIjsKK3doaWxlICg8JENPTkZJRz4pCit7CisJY2hvbXA7CisJcy8jLiovLzsKKwlzL15ccysvLzsKKwlzL1xzKyQvLzsKKwluZXh0IHVubGVzcyBsZW5ndGg7CisJbXkgKCRrZXksICR2YWx1ZSkgPSBzcGxpdCAoL1xzKj1ccyovLCRfLCAyKTsKKwkkY29uZmlneyRrZXl9ID0gJHZhbHVlOworCWxhc3QgaWYgKCRrZXkgZXEgJ0xJR0hUVFBEJyBhbmQgJHZhbHVlIGVxICdmYWxzZScpOworCWxhc3QgaWYgKCRrZXkgZXEgJ1BPUlQnKTsKK30KK2Nsb3NlICRDT05GSUcgb3IgZGllICJjYW4ndCBjbG9zZSAkY29uZmlnZmlsZTogJCEiOworCitteSAkd2lraV9hZGRyZXNzID0gImh0dHA6Ly8kY29uZmlneydTRVJWRVJfQUREUid9Ii4iOiIuIiRjb25maWd7J1BPUlQnfSI7CitteSAkd2lraV91cmwgPSAiJHdpa2lfYWRkcmVzcy8kY29uZmlneydXSUtJX0RJUl9OQU1FJ30vYXBpLnBocCI7CitteSAkd2lraV9hZG1pbiA9ICIkY29uZmlneydXSUtJX0FETUlOJ30iOworbXkgJHdpa2lfYWRtaW5fcGFzcyA9ICIkY29uZmlneydXSUtJX1BBU1NXJ30iOworbXkgJG13ID0gTWVkaWFXaWtpOjpBUEktPm5ldzsKKyRtdy0+e2NvbmZpZ30tPnthcGlfdXJsfSA9ICR3aWtpX3VybDsKKworCisjIHdpa2lfbG9naW4gPG5hbWU+IDxwYXNzd29yZD4KKyMKKyMgTG9ncyB0aGUgdXNlciB3aXRoIDxuYW1lPiBhbmQgPHBhc3N3b3JkPiBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlCisjIG9mIHRoZSBtZWRpYXdpa2kgJG13CitzdWIgd2lraV9sb2dpbiB7CisJJG13LT5sb2dpbiggeyBsZ25hbWUgPT4gIiRfWzBdIixsZ3Bhc3N3b3JkID0+ICIkX1sxXSIgfSApCisJfHwgZGllICJnZXRwYWdlOiBsb2dpbiBmYWlsZWQiOworfQorCisjIHdpa2lfZ2V0cGFnZSA8d2lraV9wYWdlPiA8ZGVzdF9wYXRoPgorIworIyBmZXRjaCBhIHBhZ2UgPHdpa2lfcGFnZT4gZnJvbSB0aGUgd2lraSByZWZlcmVuY2VkIGluIHRoZSBnbG9iYWwgdmFyaWFibGUKKyMgJG13IGFuZCBjb3BpZXMgaXRzIGNvbnRlbnQgaW4gZGlyZWN0b3J5IGRlc3RfcGF0aAorc3ViIHdpa2lfZ2V0cGFnZSB7CisJbXkgJHBhZ2VuYW1lID0gJF9bMF07CisJbXkgJGRlc3RkaXIgPSAkX1sxXTsKKworCW15ICRwYWdlID0gJG13LT5nZXRfcGFnZSggeyB0aXRsZSA9PiAkcGFnZW5hbWUgfSApOworCWlmICghZGVmaW5lZCgkcGFnZSkpIHsKKwkJZGllICJnZXRwYWdlOiB3aWtpIGRvZXMgbm90IGV4aXN0IjsKKwl9CisKKwlteSAkY29udGVudCA9ICRwYWdlLT57JyonfTsKKwlpZiAoIWRlZmluZWQoJGNvbnRlbnQpKSB7CisJCWRpZSAiZ2V0cGFnZTogcGFnZSBkb2VzIG5vdCBleGlzdCI7CisJfQorCisJJHBhZ2VuYW1lPSRwYWdlLT57J3RpdGxlJ307CisJIyBSZXBsYWNlIHNwYWNlcyBieSB1bmRlcnNjb3JlIGluIHRoZSBwYWdlIG5hbWUKKwkkcGFnZW5hbWUgPX4gcy8gL18vZzsKKwkkcGFnZW5hbWUgPX4gcy9cLy8lMkYvZzsKKwlvcGVuKG15ICRmaWxlLCAiPiRkZXN0ZGlyLyRwYWdlbmFtZS5tdyIpOworCXByaW50ICRmaWxlICIkY29udGVudCI7CisJY2xvc2UgKCRmaWxlKTsKKworfQorCisjIHdpa2lfZGVsZXRlX3BhZ2UgPHBhZ2VfbmFtZT4KKyMKKyMgZGVsZXRlIHRoZSBwYWdlIHdpdGggbmFtZSA8cGFnZV9uYW1lPiBmcm9tIHRoZSB3aWtpIHJlZmVyZW5jZWQKKyMgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZSAkbXcKK3N1YiB3aWtpX2RlbGV0ZV9wYWdlIHsKKwlteSAkcGFnZW5hbWUgPSAkX1swXTsKKworCW15ICRleGlzdD0kbXctPmdldF9wYWdlKHt0aXRsZSA9PiAkcGFnZW5hbWV9KTsKKworCWlmIChkZWZpbmVkKCRleGlzdC0+eycqJ30pKXsKKwkJJG13LT5lZGl0KHsgYWN0aW9uID0+ICdkZWxldGUnLAorCQkJCXRpdGxlID0+ICRwYWdlbmFtZX0pCisJCXx8IGRpZSAkbXctPntlcnJvcn0tPntjb2RlfSAuICI6ICIgLiAkbXctPntlcnJvcn0tPntkZXRhaWxzfTsKKwl9IGVsc2UgeworCQlkaWUgIm5vIHBhZ2Ugd2l0aCBzdWNoIG5hbWUgZm91bmQ6ICRwYWdlbmFtZVxuIjsKKwl9Cit9CisKKyMgd2lraV9lZGl0cGFnZSA8d2lraV9wYWdlPiA8d2lraV9jb250ZW50PiA8d2lraV9hcHBlbmQ+IFstYz08Y2F0ZWdvcnk+XSBbLXM9PHN1bW1hcnk+XQorIworIyBFZGl0IGEgcGFnZSBuYW1lZCA8d2lraV9wYWdlPiB3aXRoIGNvbnRlbnQgPHdpa2lfY29udGVudD4gb24gdGhlIHdpa2kKKyMgcmVmZXJlbmNlZCB3aXRoIHRoZSBnbG9iYWwgdmFyaWFibGUgJG13CisjIElmIDx3aWtpX2FwcGVuZD4gPT0gdHJ1ZSA6IGFwcGVuZCA8d2lraV9jb250ZW50PiBhdCB0aGUgZW5kIG9mIHRoZSBhY3R1YWwKKyMgY29udGVudCBvZiB0aGUgcGFnZSA8d2lraV9wYWdlPgorIyBJZiA8d2lrX3BhZ2U+IGRvZXNuJ3QgZXhpc3QsIHRoYXQgcGFnZSBpcyBjcmVhdGVkIHdpdGggdGhlIDx3aWtpX2NvbnRlbnQ+CitzdWIgd2lraV9lZGl0cGFnZSB7CisJbXkgJHdpa2lfcGFnZSA9ICRfWzBdOworCW15ICR3aWtpX2NvbnRlbnQgPSAkX1sxXTsKKwlteSAkd2lraV9hcHBlbmQgPSAkX1syXTsKKwlteSAkc3VtbWFyeSA9ICIiOworCW15ICgkc3VtbSwgJGNhdCkgPSAoKTsKKwlHZXRPcHRpb25zKCdzPXMnID0+IFwkc3VtbSwgJ2M9cycgPT4gXCRjYXQpOworCisJbXkgJGFwcGVuZCA9IDA7CisJaWYgKGRlZmluZWQoJHdpa2lfYXBwZW5kKSAmJiAkd2lraV9hcHBlbmQgZXEgJ3RydWUnKSB7CisJCSRhcHBlbmQ9MTsKKwl9CisKKwlteSAkcHJldmlvdXNfdGV4dCA9IiI7CisKKwlpZiAoJGFwcGVuZCkgeworCQlteSAkcmVmID0gJG13LT5nZXRfcGFnZSggeyB0aXRsZSA9PiAkd2lraV9wYWdlIH0gKTsKKwkJJHByZXZpb3VzX3RleHQgPSAkcmVmLT57JyonfTsKKwl9CisKKwlteSAkdGV4dCA9ICR3aWtpX2NvbnRlbnQ7CisJaWYgKGRlZmluZWQoJHByZXZpb3VzX3RleHQpKSB7CisJCSR0ZXh0PSIkcHJldmlvdXNfdGV4dCR0ZXh0IjsKKwl9CisKKwkjIEV2ZW50dWFsbHksIGFkZCB0aGlzIHBhZ2UgdG8gYSBjYXRlZ29yeS4KKwlpZiAoZGVmaW5lZCgkY2F0KSkgeworCQlteSAkY2F0ZWdvcnlfbmFtZT0iW1tDYXRlZ29yeTokY2F0XV0iOworCQkkdGV4dD0iJHRleHRcbiAkY2F0ZWdvcnlfbmFtZSI7CisJfQorCWlmKGRlZmluZWQoJHN1bW0pKXsKKwkJJHN1bW1hcnk9JHN1bW07CisJfQorCisJJG13LT5lZGl0KCB7IGFjdGlvbiA9PiAnZWRpdCcsIHRpdGxlID0+ICR3aWtpX3BhZ2UsIHN1bW1hcnkgPT4gJHN1bW1hcnksIHRleHQgPT4gIiR0ZXh0In0gKTsKK30KKworIyB3aWtpX2dldGFsbHBhZ2VuYW1lIFs8Y2F0ZWdvcnk+XQorIworIyBGZXRjaCBhbGwgcGFnZXMgb2YgdGhlIHdpa2kgcmVmZXJlbmNlZCBieSB0aGUgZ2xvYmFsIHZhcmlhYmxlICRtdworIyBhbmQgcHJpbnQgdGhlIG5hbWVzIG9mIGVhY2ggb25lIGluIHRoZSBmaWxlIGFsbC50eHQgd2l0aCBhIG5ldyBsaW5lCisjICgiXG4iKSBiZXR3ZWVuIHRoZXNlLgorIyBJZiB0aGUgYXJndW1lbnQgPGNhdGVnb3J5PiBpcyBkZWZpbmVkLCB0aGVuIHRoaXMgZnVuY3Rpb24gZ2V0IG9ubHkgdGhlIHBhZ2VzCisjIGJlbG9uZ2luZyB0byA8Y2F0ZWdvcnk+Lgorc3ViIHdpa2lfZ2V0YWxscGFnZW5hbWUgeworCSMgZmV0Y2ggdGhlIHBhZ2VzIG9mIHRoZSB3aWtpCisJaWYgKGRlZmluZWQoJF9bMF0pKSB7CisJCW15ICRtd19wYWdlcyA9ICRtdy0+bGlzdCAoIHsgYWN0aW9uID0+ICdxdWVyeScsCisJCQkJbGlzdCA9PiAnY2F0ZWdvcnltZW1iZXJzJywKKwkJCQljbXRpdGxlID0+ICJDYXRlZ29yeTokX1swXSIsCisJCQkJY21uYW1lc3BhY2UgPT4gMCwKKwkJCQljbWxpbWl0ID0+IDUwMCB9LAorCQkpCisJCXx8IGRpZSAkbXctPntlcnJvcn0tPntjb2RlfS4iOiAiLiRtdy0+e2Vycm9yfS0+e2RldGFpbHN9OworCQlvcGVuKG15ICRmaWxlLCAiPmFsbC50eHQiKTsKKwkJZm9yZWFjaCBteSAkcGFnZSAoQHskbXdfcGFnZXN9KSB7CisJCQlwcmludCAkZmlsZSAiJHBhZ2UtPnt0aXRsZX1cbiI7CisJCX0KKwkJY2xvc2UgKCRmaWxlKTsKKworCX0gZWxzZSB7CisJCW15ICRtd19wYWdlcyA9ICRtdy0+bGlzdCh7CisJCQkJYWN0aW9uID0+ICdxdWVyeScsCisJCQkJbGlzdCA9PiAnYWxscGFnZXMnLAorCQkJCWFwbGltaXQgPT4gNTAwLAorCQkJfSkKKwkJfHwgZGllICRtdy0+e2Vycm9yfS0+e2NvZGV9LiI6ICIuJG13LT57ZXJyb3J9LT57ZGV0YWlsc307CisJCW9wZW4obXkgJGZpbGUsICI+YWxsLnR4dCIpOworCQlmb3JlYWNoIG15ICRwYWdlIChAeyRtd19wYWdlc30pIHsKKwkJCXByaW50ICRmaWxlICIkcGFnZS0+e3RpdGxlfVxuIjsKKwkJfQorCQljbG9zZSAoJGZpbGUpOworCX0KK30KKworc3ViIHdpa2lfdXBsb2FkX2ZpbGUgeworCW15ICRmaWxlX25hbWUgPSAkX1swXTsKKwlteSAkcmVzdWx0YXQgPSAkbXctPmVkaXQgKCB7CisJCWFjdGlvbiA9PiAndXBsb2FkJywKKwkJZmlsZW5hbWUgPT4gJGZpbGVfbmFtZSwKKwkJY29tbWVudCA9PiAndXBsb2FkIGEgZmlsZScsCisJCWZpbGUgPT4gWyAkZmlsZV9uYW1lIF0sCisJCWlnbm9yZXdhcm5pbmdzPT4xLAorCX0sIHsKKwkJc2tpcF9lbmNvZGluZyA9PiAxCisJfSApIHx8IGRpZSAkbXctPntlcnJvcn0tPntjb2RlfSAuICcgOiAnIC4gJG13LT57ZXJyb3J9LT57ZGV0YWlsc307Cit9CisKKworCisjIE1haW4gcGFydCBvZiB0aGlzIHNjcmlwdDogcGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyMgYW5kIHNlbGVjdCB3aGljaCBmdW5jdGlvbiB0byBleGVjdXRlCitteSAkZmN0X3RvX2NhbGwgPSBzaGlmdDsKKword2lraV9sb2dpbigkd2lraV9hZG1pbiwgJHdpa2lfYWRtaW5fcGFzcyk7CisKK215ICVmdW5jdGlvbnNfdG9fY2FsbCA9IHF3KAorCXVwbG9hZF9maWxlICAgIHdpa2lfdXBsb2FkX2ZpbGUKKwlnZXRfcGFnZSAgICAgICB3aWtpX2dldHBhZ2UKKwlkZWxldGVfcGFnZSAgICB3aWtpX2RlbGV0ZV9wYWdlCisJZWRpdF9wYWdlICAgICAgd2lraV9lZGl0cGFnZQorCWdldGFsbHBhZ2VuYW1lIHdpa2lfZ2V0YWxscGFnZW5hbWUKKyk7CitkaWUgIiQwIEVSUk9SOiB3cm9uZyBhcmd1bWVudCIgdW5sZXNzIGV4aXN0cyAkZnVuY3Rpb25zX3RvX2NhbGx7JGZjdF90b19jYWxsfTsKKyZ7JGZ1bmN0aW9uc190b19jYWxseyRmY3RfdG9fY2FsbH19KEBBUkdWKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC5jb25maWcgYi9jb250cmliL213LXRvLWdpdC90L3Rlc3QuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OGIzN2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Rlc3QuY29uZmlnCkBAIC0wLDAgKzEsMzUgQEAKKyMgTmFtZSBvZiB0aGUgd2ViIHNlcnZlcidzIGRpcmVjdG9yeSBkZWRpY2F0ZWQgdG8gdGhlIHdpa2kgaXMgV0lLSV9ESVJfTkFNRQorV0lLSV9ESVJfTkFNRT13aWtpCisKKyMgTG9naW4gYW5kIHBhc3N3b3JkIG9mIHRoZSB3aWtpJ3MgYWRtaW4KK1dJS0lfQURNSU49V2lraUFkbWluCitXSUtJX1BBU1NXPUFkbWluUGFzcworCisjIEFkZHJlc3Mgb2YgdGhlIHdlYiBzZXJ2ZXIKK1NFUlZFUl9BRERSPWxvY2FsaG9zdAorCisjIFNRTGl0ZSBkYXRhYmFzZSBvZiB0aGUgd2lraSwgbmFtZWQgREJfRklMRSwgaXMgbG9jYXRlZCBpbiBUTVAKK1RNUD0vdG1wCitEQl9GSUxFPXdpa2lkYi5zcWxpdGUKKworIyBJZiBMSUdIVFRQRCBpcyBub3Qgc2V0IHRvIHRydWUsIHRoZSBzY3JpcHQgd2lsbCB1c2UgdGhlIGRlZmF1dAorIyB3ZWIgc2VydmVyIHJ1bm5pbmcgaW4gV0lLSV9ESVJfSU5TVC4KK1dJS0lfRElSX0lOU1Q9L3Zhci93d3cKKworIyBJZiBMSUdIVFRQRCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIHNjcmlwdCB3aWxsIHVzZSBMaWdodHRwZCB0byBydW4KKyMgdGhlIHdpa2kuCitMSUdIVFRQRD10cnVlCisKKyMgVGhlIHZhcmlhYmxlcyBiZWxvdyBhcmUgdXNlZnVsIG9ubHkgaWYgTElHSFRUUEQgaXMgc2V0IHRvIHRydWUuCitQT1JUPTEyMzQKK1BIUF9ESVI9L3Vzci9iaW4KK0xJR0hUVFBEX0RJUj0vdXNyL3NiaW4KK1dFQj1XRUIKK1dFQl9UTVA9JFdFQi90bXAKK1dFQl9XV1c9JFdFQi93d3cKKworIyBUaGUgdmFyaWFibGVzIGJlbG93IGFyZSB1c2VkIGJ5IHRoZSBzY3JpcHQgdG8gaW5zdGFsbCBhIHdpa2kuCisjIFlvdSBzaG91bGQgbm90IG1vZGlmeSB0aGVzZSB1bmxlc3MgeW91IGFyZSBtb2RpZnlpbmcgdGhlIHNjcmlwdCBpdHNlbGYuCitNV19WRVJTSU9OPW1lZGlhd2lraS0xLjE5LjAKK0ZJTEVTX0ZPTERFUj1pbnN0YWxsLXdpa2kKK0RCX0lOU1RBTExfU0NSSVBUPWRiX2luc3RhbGwucGhwCmRpZmYgLS1naXQgYS9jb250cmliL3A0aW1wb3J0L1JFQURNRSBiL2NvbnRyaWIvcDRpbXBvcnQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ODkyYjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3A0aW1wb3J0L1JFQURNRQpAQCAtMCwwICsxIEBACitQbGVhc2Ugc2VlIGNvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LXA0IGZvciBhIGJldHRlciBQZXJmb3JjZSBpbXBvcnRlci4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcDRpbXBvcnQvZ2l0LXA0aW1wb3J0LnB5IGIvY29udHJpYi9wNGltcG9ydC9naXQtcDRpbXBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZlNTM0YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcDRpbXBvcnQvZ2l0LXA0aW1wb3J0LnB5CkBAIC0wLDAgKzEsMzYwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgVGhpcyB0b29sIGlzIGNvcHlyaWdodCAoYykgMjAwNiwgU2VhbiBFc3RhYnJvb2tzLgorIyBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR251IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisjCisjIEltcG9ydCBQZXJmb3JjZSBicmFuY2hlcyBpbnRvIEdpdCByZXBvc2l0b3JpZXMuCisjIENoZWNraW5nIG91dCB0aGUgZmlsZXMgaXMgZG9uZSBieSBjYWxsaW5nIHRoZSBzdGFuZGFyZCBwNAorIyBjbGllbnQgd2hpY2ggeW91IG11c3QgaGF2ZSBwcm9wZXJseSBjb25maWd1cmVkIHlvdXJzZWxmCisjCisKK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgZ2V0b3B0CisKK2Zyb20gc2lnbmFsIGltcG9ydCBzaWduYWwsIFwKKyAgIFNJR1BJUEUsIFNJR0lOVCwgU0lHX0RGTCwgXAorICAgZGVmYXVsdF9pbnRfaGFuZGxlcgorCitzaWduYWwoU0lHUElQRSwgU0lHX0RGTCkKK3MgPSBzaWduYWwoU0lHSU5ULCBTSUdfREZMKQoraWYgcyAhPSBkZWZhdWx0X2ludF9oYW5kbGVyOgorICAgc2lnbmFsKFNJR0lOVCwgcykKKworZGVmIGRpZShtc2csICphcmdzKToKKyAgICBmb3IgYSBpbiBhcmdzOgorICAgICAgICBtc2cgPSAiJXMgJXMiICUgKG1zZywgYSkKKyAgICBwcmludCAiZ2l0LXA0aW1wb3J0IGZhdGFsIGVycm9yOiIsIG1zZworICAgIHN5cy5leGl0KDEpCisKK2RlZiB1c2FnZSgpOgorICAgIHByaW50ICJVU0FHRTogZ2l0LXA0aW1wb3J0IFstcXwtdl0gIFstLWF1dGhvcnM9PGZpbGU+XSAgWy10IDx0aW1lem9uZT5dICBbLy9wNHJlcG8vcGF0aCA8YnJhbmNoPl0iCisgICAgc3lzLmV4aXQoMSkKKwordmVyYm9zaXR5ID0gMQorbG9nZmlsZSA9ICIvZGV2L251bGwiCitpZ25vcmVfd2FybmluZ3MgPSBGYWxzZQorc3RpdGNoID0gMAordGFnYWxsID0gVHJ1ZQorCitkZWYgcmVwb3J0KGxldmVsLCBtc2csICphcmdzKToKKyAgICBnbG9iYWwgdmVyYm9zaXR5CisgICAgZ2xvYmFsIGxvZ2ZpbGUKKyAgICBmb3IgYSBpbiBhcmdzOgorICAgICAgICBtc2cgPSAiJXMgJXMiICUgKG1zZywgYSkKKyAgICBmZCA9IG9wZW4obG9nZmlsZSwgImEiKQorICAgIGZkLndyaXRlbGluZXMobXNnKQorICAgIGZkLmNsb3NlKCkKKyAgICBpZiBsZXZlbCA8PSB2ZXJib3NpdHk6CisgICAgICAgIHByaW50IG1zZworCitjbGFzcyBwNF9jb21tYW5kOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfcmVwb3BhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBnbG9iYWwgbG9nZmlsZQorICAgICAgICAgICAgc2VsZi51c2VybGlzdCA9IHt9CisgICAgICAgICAgICBpZiBfcmVwb3BhdGhbLTFdID09ICcvJzoKKyAgICAgICAgICAgICAgICBzZWxmLnJlcG9wYXRoID0gX3JlcG9wYXRoWzotMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5yZXBvcGF0aCA9IF9yZXBvcGF0aAorICAgICAgICAgICAgaWYgc2VsZi5yZXBvcGF0aFstNDpdICE9ICIvLi4uIjoKKyAgICAgICAgICAgICAgICBzZWxmLnJlcG9wYXRoPSAiJXMvLi4uIiAlIHNlbGYucmVwb3BhdGgKKyAgICAgICAgICAgIGY9b3MucG9wZW4oJ3A0IC1WIDI+PiVzJyVsb2dmaWxlLCAncmInKQorICAgICAgICAgICAgYSA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIGlmIGYuY2xvc2UoKToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgZGllKCJDb3VsZCBub3QgZmluZCB0aGUgXCJwNFwiIGNvbW1hbmQiKQorCisgICAgZGVmIHA0KHNlbGYsIGNtZCwgKmFyZ3MpOgorICAgICAgICBnbG9iYWwgbG9nZmlsZQorICAgICAgICBjbWQgPSAiJXMgJXMiICUgKGNtZCwgJyAnLmpvaW4oYXJncykpCisgICAgICAgIHJlcG9ydCgyLCAiUDQ6IiwgY21kKQorICAgICAgICBmPW9zLnBvcGVuKCdwNCAtRyAlcyAyPj4lcycgJSAoY21kLGxvZ2ZpbGUpLCAncmInKQorICAgICAgICBsaXN0ID0gW10KKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKG1hcnNoYWwubG9hZChmKSkKKyAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYucmV0ID0gZi5jbG9zZSgpCisgICAgICAgIHJldHVybiBsaXN0CisKKyAgICBkZWYgc3luYyhzZWxmLCBpZCwgZm9yY2U9RmFsc2UsIHRyaWNrPUZhbHNlLCB0ZXN0PUZhbHNlKToKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICByZXQgPSBzZWxmLnA0KCJzeW5jIC1mICVzQCVzIiUoc2VsZi5yZXBvcGF0aCwgaWQpKVswXQorICAgICAgICBlbGlmIHRyaWNrOgorICAgICAgICAgICAgcmV0ID0gc2VsZi5wNCgic3luYyAtayAlc0AlcyIlKHNlbGYucmVwb3BhdGgsIGlkKSlbMF0KKyAgICAgICAgZWxpZiB0ZXN0OgorICAgICAgICAgICAgcmV0ID0gc2VsZi5wNCgic3luYyAtbiAlc0AlcyIlKHNlbGYucmVwb3BhdGgsIGlkKSlbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldCA9IHNlbGYucDQoInN5bmMgICAgJXNAJXMiJShzZWxmLnJlcG9wYXRoLCBpZCkpWzBdCisgICAgICAgIGlmIHJldFsnY29kZSddID09ICJlcnJvciI6CisgICAgICAgICAgICAgZGF0YSA9IHJldFsnZGF0YSddLnVwcGVyKCkKKyAgICAgICAgICAgICBpZiBkYXRhLmZpbmQoJ1ZJRVcnKSA+IDA6CisgICAgICAgICAgICAgICAgIGRpZSgiUGVyZm9yY2UgcmVwb3J0cyAlcyBpcyBub3QgaW4gY2xpZW50IHZpZXciJSBzZWxmLnJlcG9wYXRoKQorICAgICAgICAgICAgIGVsaWYgZGF0YS5maW5kKCdVUC1UTy1EQVRFJykgPCAwOgorICAgICAgICAgICAgICAgICBkaWUoIkNvdWxkIG5vdCBzeW5jIGZpbGVzIGZyb20gcGVyZm9yY2UiLCBzZWxmLnJlcG9wYXRoKQorCisgICAgZGVmIGNoYW5nZXMoc2VsZiwgc2luY2U9MCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxpc3QgPSBbXQorICAgICAgICAgICAgZm9yIHJlYyBpbiBzZWxmLnA0KCJjaGFuZ2VzICVzQCVzLCNoZWFkIiAlIChzZWxmLnJlcG9wYXRoLCBzaW5jZSsxKSk6CisgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQocmVjWydjaGFuZ2UnXSkKKyAgICAgICAgICAgIGxpc3QucmV2ZXJzZSgpCisgICAgICAgICAgICByZXR1cm4gbGlzdAorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBhdXRob3JzKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgZj1vcGVuKGZpbGVuYW1lKQorICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgc2VsZi51c2VybGlzdFtsWzpsLmZpbmQoJz0nKV0ucnN0cmlwKCldID0gXAorICAgICAgICAgICAgICAgICAgICAobFtsLmZpbmQoJz0nKSsxOmwuZmluZCgnPCcpXS5yc3RyaXAoKSxsW2wuZmluZCgnPCcpKzE6bC5maW5kKCc+JyldKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZm9yIGYsZSBpbiBzZWxmLnVzZXJsaXN0Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgcmVwb3J0KDIsIGYsICI6IiwgZVswXSwgIiAgPCIsIGVbMV0sICI+IikKKworICAgIGRlZiBfZ2V0X3VzZXIoc2VsZiwgaWQpOgorICAgICAgICBpZiBub3Qgc2VsZi51c2VybGlzdC5oYXNfa2V5KGlkKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1c2VyID0gc2VsZi5wNCgidXNlcnMiLCBpZClbMF0KKyAgICAgICAgICAgICAgICBzZWxmLnVzZXJsaXN0W2lkXSA9ICh1c2VyWydGdWxsTmFtZSddLCB1c2VyWydFbWFpbCddKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYudXNlcmxpc3RbaWRdID0gKGlkLCAiIikKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlcmxpc3RbaWRdCisKKyAgICBkZWYgX2Zvcm1hdF9kYXRlKHNlbGYsIHRpY2tzKToKKyAgICAgICAgc3ltYm9sPScrJworICAgICAgICBuYW1lID0gdGltZS50em5hbWVbMF0KKyAgICAgICAgb2Zmc2V0ID0gdGltZS50aW1lem9uZQorICAgICAgICBpZiB0aWNrc1s4XToKKyAgICAgICAgICAgIG5hbWUgPSB0aW1lLnR6bmFtZVsxXQorICAgICAgICAgICAgb2Zmc2V0ID0gdGltZS5hbHR6b25lCisgICAgICAgIGlmIG9mZnNldCA8IDA6CisgICAgICAgICAgICBvZmZzZXQgKj0gLTEKKyAgICAgICAgICAgIHN5bWJvbCA9ICctJworICAgICAgICBsb2NhbG8gPSAiJXMlMDJkJTAyZCAlcyIgJSAoc3ltYm9sLCBvZmZzZXQgLyAzNjAwLCBvZmZzZXQgJSAzNjAwLCBuYW1lKQorICAgICAgICB0aWNrc28gPSB0aW1lLnN0cmZ0aW1lKCIlYSAlYiAlZCAlSDolTTolUyAlWSIsIHRpY2tzKQorICAgICAgICByZXR1cm4gIiVzICVzIiAlICh0aWNrc28sIGxvY2FsbykKKworICAgIGRlZiB3aGVyZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucDQoIndoZXJlICVzIiAlIHNlbGYucmVwb3BhdGgpWy0xXVsncGF0aCddCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIGRlc2NyaWJlKHNlbGYsIG51bSk6CisgICAgICAgIGRlc2MgPSBzZWxmLnA0KCJkZXNjcmliZSAtcyIsIG51bSlbMF0KKyAgICAgICAgc2VsZi5tc2cgPSBkZXNjWydkZXNjJ10KKyAgICAgICAgc2VsZi5hdXRob3IsIHNlbGYuZW1haWwgPSBzZWxmLl9nZXRfdXNlcihkZXNjWyd1c2VyJ10pCisgICAgICAgIHNlbGYuZGF0ZSA9IHNlbGYuX2Zvcm1hdF9kYXRlKHRpbWUubG9jYWx0aW1lKGxvbmcoZGVzY1sndGltZSddKSkpCisgICAgICAgIHJldHVybiBzZWxmCisKK2NsYXNzIGdpdF9jb21tYW5kOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi52ZXJzaW9uID0gc2VsZi5naXQoIi0tdmVyc2lvbiIpWzBdWzEyOl0ucnN0cmlwKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZGllKCJDb3VsZCBub3QgZmluZCB0aGUgXCJnaXRcIiBjb21tYW5kIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5naXRkaXIgPSBzZWxmLmdldF9zaW5nbGUoInJldi1wYXJzZSAtLWdpdC1kaXIiKQorICAgICAgICAgICAgcmVwb3J0KDIsICJnZGlyOiIsIHNlbGYuZ2l0ZGlyKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBkaWUoIk5vdCBhIGdpdCByZXBvc2l0b3J5Li4uIGRpZCB5b3UgZm9yZ2V0IHRvIFwiZ2l0IGluaXRcIiA/IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jZHVwID0gc2VsZi5nZXRfc2luZ2xlKCJyZXYtcGFyc2UgLS1zaG93LWNkdXAiKQorICAgICAgICAgICAgaWYgc2VsZi5jZHVwICE9ICIiOgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYuY2R1cCkKKyAgICAgICAgICAgIHNlbGYudG9wZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIHJlcG9ydCgyLCAidG9wZGlyOiIsIHNlbGYudG9wZGlyKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBkaWUoIkNvdWxkIG5vdCBmaW5kIHRvcCBnaXQgZGlyZWN0b3J5IikKKworICAgIGRlZiBnaXQoc2VsZiwgY21kKToKKyAgICAgICAgZ2xvYmFsIGxvZ2ZpbGUKKyAgICAgICAgcmVwb3J0KDIsICJHSVQ6IiwgY21kKQorICAgICAgICBmPW9zLnBvcGVuKCdnaXQgJXMgMj4+JXMnICUgKGNtZCxsb2dmaWxlKSwgJ3JiJykKKyAgICAgICAgcj1mLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYucmV0ID0gZi5jbG9zZSgpCisgICAgICAgIHJldHVybiByCisKKyAgICBkZWYgZ2V0X3NpbmdsZShzZWxmLCBjbWQpOgorICAgICAgICByZXR1cm4gc2VsZi5naXQoY21kKVswXS5yc3RyaXAoKQorCisgICAgZGVmIGN1cnJlbnRfYnJhbmNoKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0aXQgPSBzZWxmLmdpdCgicmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQiKVswXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2l0KCJzeW1ib2xpYy1yZWYgSEVBRCIpWzBdWzExOl0ucnN0cmlwKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRfY29uZmlnKHNlbGYsIHZhcmlhYmxlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2l0KCJjb25maWcgLS1nZXQgJXMiICUgdmFyaWFibGUpWzBdLnJzdHJpcCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2V0X2NvbmZpZyhzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmdpdCgiY29uZmlnICVzICVzIiUodmFyaWFibGUsIHZhbHVlKSApCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGRpZSgiQ291bGQgbm90IHNldCAlcyB0byAiICUgdmFyaWFibGUsIHZhbHVlKQorCisgICAgZGVmIG1ha2VfdGFnKHNlbGYsIG5hbWUsIGhlYWQpOgorICAgICAgICBzZWxmLmdpdCgidGFnIC1mICVzICVzIiUobmFtZSxoZWFkKSkKKworICAgIGRlZiB0b3BfY2hhbmdlKHNlbGYsIGJyYW5jaCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGE9c2VsZi5nZXRfc2luZ2xlKCJuYW1lLXJldiAtLXRhZ3MgcmVmcy9oZWFkcy8lcyIgJSBicmFuY2gpCisgICAgICAgICAgICBsb2MgPSBhLmZpbmQoJyB0YWdzLycpICsgNgorICAgICAgICAgICAgaWYgYVtsb2M6bG9jKzNdICE9ICJwNC8iOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gaW50KGFbbG9jKzM6XVs6LTJdKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIHVwZGF0ZV9pbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5naXQoImxzLWZpbGVzIC1tIC1kIC1vIC16IHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSAteiAtLXN0ZGluIikKKworICAgIGRlZiBjaGVja291dChzZWxmLCBicmFuY2gpOgorICAgICAgICBzZWxmLmdpdCgiY2hlY2tvdXQgJXMiICUgYnJhbmNoKQorCisgICAgZGVmIHJlcG9pbnRfaGVhZChzZWxmLCBicmFuY2gpOgorICAgICAgICBzZWxmLmdpdCgic3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy8lcyIgJSBicmFuY2gpCisKKyAgICBkZWYgcmVtb3ZlX2ZpbGVzKHNlbGYpOgorICAgICAgICBzZWxmLmdpdCgibHMtZmlsZXMgfCB4YXJncyBybSIpCisKKyAgICBkZWYgY2xlYW5fZGlyZWN0b3JpZXMoc2VsZik6CisgICAgICAgIHNlbGYuZ2l0KCJjbGVhbiAtZCIpCisKKyAgICBkZWYgZnJlc2hfYnJhbmNoKHNlbGYsIGJyYW5jaCk6CisgICAgICAgIHJlcG9ydCgxLCAiQ3JlYXRpbmcgbmV3IGJyYW5jaCIsIGJyYW5jaCkKKyAgICAgICAgc2VsZi5naXQoImxzLWZpbGVzIHwgeGFyZ3Mgcm0iKQorICAgICAgICBvcy5yZW1vdmUoIi5naXQvaW5kZXgiKQorICAgICAgICBzZWxmLnJlcG9pbnRfaGVhZChicmFuY2gpCisgICAgICAgIHNlbGYuZ2l0KCJjbGVhbiAtZCIpCisKKyAgICBkZWYgYmFzZWRpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudG9wZGlyCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIGF1dGhvciwgZW1haWwsIGRhdGUsIG1zZywgaWQpOgorICAgICAgICBzZWxmLnVwZGF0ZV9pbmRleCgpCisgICAgICAgIGZkPW9wZW4oIi5tc2ciLCAidyIpCisgICAgICAgIGZkLndyaXRlbGluZXMobXNnKQorICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gc2VsZi5nZXRfc2luZ2xlKCJyZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCIpCisgICAgICAgICAgICAgICAgaGVhZCA9ICItcCBIRUFEIgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgY3VycmVudCA9ICIiCisgICAgICAgICAgICAgICAgaGVhZCA9ICIiCisgICAgICAgIHRyZWUgPSBzZWxmLmdldF9zaW5nbGUoIndyaXRlLXRyZWUiKQorICAgICAgICBmb3IgcixsIGluIFsoJ0RBVEUnLGRhdGUpLCgnTkFNRScsYXV0aG9yKSwoJ0VNQUlMJyxlbWFpbCldOgorICAgICAgICAgICAgb3MuZW52aXJvblsnR0lUX0FVVEhPUl8lcyclcl0gPSBsCisgICAgICAgICAgICBvcy5lbnZpcm9uWydHSVRfQ09NTUlUVEVSXyVzJyVyXSA9IGwKKyAgICAgICAgY29tbWl0ID0gc2VsZi5nZXRfc2luZ2xlKCJjb21taXQtdHJlZSAlcyAlcyA8IC5tc2ciICUgKHRyZWUsaGVhZCkpCisgICAgICAgIG9zLnJlbW92ZSgiLm1zZyIpCisgICAgICAgIHNlbGYubWFrZV90YWcoInA0LyVzIiVpZCwgY29tbWl0KQorICAgICAgICBzZWxmLmdpdCgidXBkYXRlLXJlZiBIRUFEICVzICVzIiAlIChjb21taXQsIGN1cnJlbnQpICkKKwordHJ5OgorICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgInFodnQ6IiwKKyAgICAgICAgICAgIFsiYXV0aG9ycz0iLCJoZWxwIiwic3RpdGNoPSIsInRpbWV6b25lPSIsImxvZz0iLCJpZ25vcmUiLCJub3RhZ3MiXSkKK2V4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3I6CisgICAgdXNhZ2UoKQorCitmb3IgbywgYSBpbiBvcHRzOgorICAgIGlmIG8gPT0gIi1xIjoKKyAgICAgICAgdmVyYm9zaXR5ID0gMAorICAgIGlmIG8gPT0gIi12IjoKKyAgICAgICAgdmVyYm9zaXR5ICs9IDEKKyAgICBpZiBvIGluICgiLS1sb2ciKToKKyAgICAgICAgbG9nZmlsZSA9IGEKKyAgICBpZiBvIGluICgiLS1ub3RhZ3MiKToKKyAgICAgICAgdGFnYWxsID0gRmFsc2UKKyAgICBpZiBvIGluICgiLWgiLCAiLS1oZWxwIik6CisgICAgICAgIHVzYWdlKCkKKyAgICBpZiBvIGluICgiLS1pZ25vcmUiKToKKyAgICAgICAgaWdub3JlX3dhcm5pbmdzID0gVHJ1ZQorCitnaXQgPSBnaXRfY29tbWFuZCgpCiticmFuY2g9Z2l0LmN1cnJlbnRfYnJhbmNoKCkKKworZm9yIG8sIGEgaW4gb3B0czoKKyAgICBpZiBvIGluICgiLXQiLCAiLS10aW1lem9uZSIpOgorICAgICAgICBnaXQuc2V0X2NvbmZpZygicGVyZm9yY2UudGltZXpvbmUiLCBhKQorICAgIGlmIG8gaW4gKCItLXN0aXRjaCIpOgorICAgICAgICBnaXQuc2V0X2NvbmZpZygicGVyZm9yY2UuJXMucGF0aCIgJSBicmFuY2gsIGEpCisgICAgICAgIHN0aXRjaCA9IDEKKworaWYgbGVuKGFyZ3MpID09IDI6CisgICAgYnJhbmNoID0gYXJnc1sxXQorICAgIGdpdC5jaGVja291dChicmFuY2gpCisgICAgaWYgYnJhbmNoID09IGdpdC5jdXJyZW50X2JyYW5jaCgpOgorICAgICAgICBkaWUoIkJyYW5jaCAlcyBhbHJlYWR5IGV4aXN0cyEiICUgYnJhbmNoKQorICAgIHJlcG9ydCgxLCAiU2V0dGluZyBwZXJmb3JjZSB0byAiLCBhcmdzWzBdKQorICAgIGdpdC5zZXRfY29uZmlnKCJwZXJmb3JjZS4lcy5wYXRoIiAlIGJyYW5jaCwgYXJnc1swXSkKK2VsaWYgbGVuKGFyZ3MpICE9IDA6CisgICAgZGllKCJZb3UgbXVzdCBzcGVjaWZ5IHRoZSBwZXJmb3JjZSAvL2RlcG90L3BhdGggYW5kIGdpdCBicmFuY2giKQorCitwNHBhdGggPSBnaXQuZ2V0X2NvbmZpZygicGVyZm9yY2UuJXMucGF0aCIgJSBicmFuY2gpCitpZiBwNHBhdGggPT0gTm9uZToKKyAgICBkaWUoIkRvIG5vdCBrbm93IFBlcmZvcmNlIC8vZGVwb3QvcGF0aCBmb3IgZ2l0IGJyYW5jaCIsIGJyYW5jaCkKKworcDQgPSBwNF9jb21tYW5kKHA0cGF0aCkKKworZm9yIG8sIGEgaW4gb3B0czoKKyAgICBpZiBvIGluICgiLWEiLCAiLS1hdXRob3JzIik6CisgICAgICAgIHA0LmF1dGhvcnMoYSkKKworbG9jYWxkaXIgPSBnaXQuYmFzZWRpcigpCitpZiBwNC53aGVyZSgpWzpsZW4obG9jYWxkaXIpXSAhPSBsb2NhbGRpcjoKKyAgICByZXBvcnQoMSwgIioqV0FSTklORyoqIEFwcGVhcnMgcDQgY2xpZW50IGlzIG1pc2NvbmZpZ3VyZWQiKQorICAgIHJlcG9ydCgxLCAiICAgZm9yIHN5bmMgZnJvbSAlcyB0byAlcyIgJSAocDQucmVwb3BhdGgsIGxvY2FsZGlyKSkKKyAgICBpZiBpZ25vcmVfd2FybmluZ3MgIT0gVHJ1ZToKKyAgICAgICAgZGllKCJSZWNvbmZpZ3VyZSBvciB1c2UgXCItLWlnbm9yZVwiIG9uIGNvbW1hbmQgbGluZSIpCisKK2lmIHN0aXRjaCA9PSAwOgorICAgIHRvcCA9IGdpdC50b3BfY2hhbmdlKGJyYW5jaCkKK2Vsc2U6CisgICAgdG9wID0gMAorY2hhbmdlcyA9IHA0LmNoYW5nZXModG9wKQorY291bnQgPSBsZW4oY2hhbmdlcykKK2lmIGNvdW50ID09IDA6CisgICAgcmVwb3J0KDEsICJBbHJlYWR5IHVwIHRvIGRhdGUuLi4iKQorICAgIHN5cy5leGl0KDApCisKK3B0eiA9IGdpdC5nZXRfY29uZmlnKCJwZXJmb3JjZS50aW1lem9uZSIpCitpZiBwdHo6CisgICAgcmVwb3J0KDEsICJTZXR0aW5nIHRpbWV6b25lIHRvIiwgcHR6KQorICAgIG9zLmVudmlyb25bJ1RaJ10gPSBwdHoKKyAgICB0aW1lLnR6c2V0KCkKKworaWYgc3RpdGNoID09IDE6CisgICAgZ2l0LnJlbW92ZV9maWxlcygpCisgICAgZ2l0LmNsZWFuX2RpcmVjdG9yaWVzKCkKKyAgICBwNC5zeW5jKGNoYW5nZXNbMF0sIGZvcmNlPVRydWUpCitlbGlmIHRvcCA9PSAwIGFuZCBicmFuY2ggIT0gZ2l0LmN1cnJlbnRfYnJhbmNoKCk6CisgICAgcDQuc3luYyhjaGFuZ2VzWzBdLCB0ZXN0PVRydWUpCisgICAgcmVwb3J0KDEsICJDcmVhdGluZyBuZXcgaW5pdGlhbCBjb21taXQiKTsKKyAgICBnaXQuZnJlc2hfYnJhbmNoKGJyYW5jaCkKKyAgICBwNC5zeW5jKGNoYW5nZXNbMF0sIGZvcmNlPVRydWUpCitlbHNlOgorICAgIHA0LnN5bmMoY2hhbmdlc1swXSwgdHJpY2s9VHJ1ZSkKKworcmVwb3J0KDEsICJwcm9jZXNzaW5nICVzIGNoYW5nZXMgZnJvbSBwNCAoJXMpIHRvIGdpdCAoJXMpIiAlIChjb3VudCwgcDQucmVwb3BhdGgsIGJyYW5jaCkpCitmb3IgaWQgaW4gY2hhbmdlczoKKyAgICByZXBvcnQoMSwgIkltcG9ydGluZyBjaGFuZ2VzZXQiLCBpZCkKKyAgICBjaGFuZ2UgPSBwNC5kZXNjcmliZShpZCkKKyAgICBwNC5zeW5jKGlkKQorICAgIGlmIHRhZ2FsbCA6CisgICAgICAgICAgICBnaXQuY29tbWl0KGNoYW5nZS5hdXRob3IsIGNoYW5nZS5lbWFpbCwgY2hhbmdlLmRhdGUsIGNoYW5nZS5tc2csIGlkKQorICAgIGVsc2U6CisgICAgICAgICAgICBnaXQuY29tbWl0KGNoYW5nZS5hdXRob3IsIGNoYW5nZS5lbWFpbCwgY2hhbmdlLmRhdGUsIGNoYW5nZS5tc2csICJpbXBvcnQiKQorICAgIGlmIHN0aXRjaCA9PSAxOgorICAgICAgICBnaXQuY2xlYW5fZGlyZWN0b3JpZXMoKQorICAgICAgICBzdGl0Y2ggPSAwCmRpZmYgLS1naXQgYS9jb250cmliL3A0aW1wb3J0L2dpdC1wNGltcG9ydC50eHQgYi9jb250cmliL3A0aW1wb3J0L2dpdC1wNGltcG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk2NzU4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcDRpbXBvcnQvZ2l0LXA0aW1wb3J0LnR4dApAQCAtMCwwICsxLDE2NyBAQAorZ2l0LXA0aW1wb3J0KDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXA0aW1wb3J0IC0gSW1wb3J0IGEgUGVyZm9yY2UgcmVwb3NpdG9yeSBpbnRvIGdpdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorYGdpdC1wNGltcG9ydGAgWy1xfC12XSBbLS1ub3RhZ3NdIFstLWF1dGhvcnMgPGZpbGU+XSBbLXQgPHRpbWV6b25lPl0KKyAgICAgICAgICAgICAgIDwvL3A0cmVwby9wYXRoPiA8YnJhbmNoPgorYGdpdC1wNGltcG9ydGAgLS1zdGl0Y2ggPC8vcDRyZXBvL3BhdGg+CitgZ2l0LXA0aW1wb3J0YAorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW1wb3J0IGEgUGVyZm9yY2UgcmVwb3NpdG9yeSBpbnRvIGFuIGV4aXN0aW5nIGdpdCByZXBvc2l0b3J5LiAgV2hlbgorYSA8Ly9wNHJlcG8vcGF0aD4gYW5kIDxicmFuY2g+IGFyZSBzcGVjaWZpZWQgYSBuZXcgYnJhbmNoIHdpdGggdGhlCitnaXZlbiBuYW1lIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlIGluaXRpYWwgaW1wb3J0IHdpbGwgYmVnaW4uCisKK09uY2UgdGhlIGluaXRpYWwgaW1wb3J0IGlzIGNvbXBsZXRlIHlvdSBjYW4gZG8gYW4gaW5jcmVtZW50YWwgaW1wb3J0CitvZiBuZXcgY29tbWl0cyBmcm9tIHRoZSBQZXJmb3JjZSByZXBvc2l0b3J5LiAgWW91IGRvIHRoaXMgYnkgY2hlY2tpbmcKK291dCB0aGUgYXBwcm9wcmlhdGUgZ2l0IGJyYW5jaCBhbmQgdGhlbiBydW5uaW5nIGBnaXQtcDRpbXBvcnRgIHdpdGhvdXQKK2FueSBvcHRpb25zLgorCitUaGUgc3RhbmRhcmQgcDQgY2xpZW50IGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgUGVyZm9yY2UKK3JlcG9zaXRvcnk7IGl0IG11c3QgYmUgY29uZmlndXJlZCBjb3JyZWN0bHkgaW4gb3JkZXIgZm9yIGBnaXQtcDRpbXBvcnRgCit0byBvcGVyYXRlIChzZWUgYmVsb3cpLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1xOjoKKwlEbyBub3QgZGlzcGxheSBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24uCisKKy12OjoKKyAgICAgICAgR2l2ZSBleHRyYSBwcm9ncmVzcyBpbmZvcm1hdGlvbi4KKworXC0tYXV0aG9yczo6CisJU3BlY2lmeSBhbiBhdXRob3JzIGZpbGUgY29udGFpbmluZyBhIG1hcHBpbmcgb2YgUGVyZm9yY2UgdXNlcgorCWlkcyB0byBmdWxsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgKHNlZSBOb3RlcyBiZWxvdykuCisKK1wtLW5vdGFnczo6CisJRG8gbm90IGNyZWF0ZSBhIHRhZyBmb3IgZWFjaCBpbXBvcnRlZCBjb21taXQuCisKK1wtLXN0aXRjaDo6CisJSW1wb3J0IHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gcGVyZm9yY2UgYnJhbmNoIGludG8gdGhlCisJY3VycmVudGx5IGNoZWNrZWQgb3V0IGdpdCBicmFuY2guCisKK1wtLWxvZzo6CisJU3RvcmUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHRoZSBzcGVjaWZpZWQgZmlsZS4KKworLXQ6OgorCVNwZWNpZnkgdGhhdCB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgaXMgaW4gdGhlIHNwZWNpZmllZCB0aW1lem9uZS4KKwlUaW1lem9uZSBtdXN0IGJlIGluIHRoZSBmb3JtYXQgIlVTL1BhY2lmaWMiIG9yICJFdXJvcGUvTG9uZG9uIgorCWV0Yy4gIFlvdSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGlzIG9uY2UsIGl0IHdpbGwgYmUgc2F2ZWQgaW4KKwl0aGUgZ2l0IGNvbmZpZyBmaWxlIGZvciB0aGUgcmVwb3NpdG9yeS4KKworPC8vcDRyZXBvL3BhdGg+OjoKKwlUaGUgUGVyZm9yY2UgcGF0aCB0aGF0IHdpbGwgYmUgaW1wb3J0ZWQgaW50byB0aGUgc3BlY2lmaWVkIGJyYW5jaC4KKworPGJyYW5jaD46OgorCVRoZSBuZXcgYnJhbmNoIHRoYXQgd2lsbCBiZSBjcmVhdGVkIHRvIGhvbGQgdGhlIFBlcmZvcmNlIGltcG9ydHMuCisKKworUDQgQ2xpZW50CistLS0tLS0tLS0KK1lvdSBtdXN0IG1ha2UgdGhlIGBwNGAgY2xpZW50IGNvbW1hbmQgYXZhaWxhYmxlIGluIHlvdXIgJFBBVEggYW5kCitjb25maWd1cmUgaXQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgdGFyZ2V0IFBlcmZvcmNlIHJlcG9zaXRvcnkuCitUeXBpY2FsbHkgdGhpcyBtZWFucyB5b3UgbXVzdCBzZXQgdGhlICIkUDRQT1JUIiBhbmQgIiRQNENMSUVOVCIKK2Vudmlyb25tZW50IHZhcmlhYmxlcy4KKworWW91IG11c3QgYWxzbyBjb25maWd1cmUgYSBgcDRgIGNsaWVudCAidmlldyIgd2hpY2ggbWFwcyB0aGUgUGVyZm9yY2UKK2JyYW5jaCBpbnRvIHRoZSB0b3AgbGV2ZWwgb2YgeW91ciBnaXQgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorQ2xpZW50OiBteWhvc3QKKworUm9vdDogICAvaG9tZS9zZWFuL2ltcG9ydAorCitPcHRpb25zOiAgIG5vYWxsd3JpdGUgY2xvYmJlciBub2NvbXByZXNzIHVubG9ja2VkIG1vZHRpbWUgcm1kaXIKKworVmlldzoKKyAgICAgICAgLy9wdWJsaWMvamFtLy4uLiAvL215aG9zdC9qYW0vLi4uCistLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgYWJvdmUgYHA0YCBjbGllbnQgc2V0dXAsIHlvdSBjb3VsZCBpbXBvcnQgdGhlICJqYW0iCitwZXJmb3JjZSBicmFuY2ggaW50byBhIGJyYW5jaCBuYW1lZCAiamFtbXkiLCBsaWtlIHNvOgorCistLS0tLS0tLS0tLS0KKyQgbWtkaXIgLXAgL2hvbWUvc2Vhbi9pbXBvcnQvamFtCiskIGNkIC9ob21lL3NlYW4vaW1wb3J0L2phbQorJCBnaXQgaW5pdAorJCBnaXQgcDRpbXBvcnQgLy9wdWJsaWMvamFtIGphbW15CistLS0tLS0tLS0tLS0KKworCitNdWx0aXBsZSBCcmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0KK05vdGUgdGhhdCBieSBjcmVhdGluZyBtdWx0aXBsZSAidmlld3MiIHlvdSBjYW4gdXNlIGBnaXQtcDRpbXBvcnRgCit0byBpbXBvcnQgYWRkaXRpb25hbCBicmFuY2hlcyBpbnRvIHRoZSBzYW1lIGdpdCByZXBvc2l0b3J5LgorSG93ZXZlciwgdGhlIGBwNGAgY2xpZW50IGhhcyBhIGxpbWl0YXRpb24gaW4gdGhhdCBpdCBzaWxlbnRseQoraWdub3JlcyBhbGwgYnV0IHRoZSBsYXN0ICJ2aWV3IiB0aGF0IG1hcHMgaW50byB0aGUgc2FtZSBsb2NhbAorZGlyZWN0b3J5LiAgU28gdGhlIGZvbGxvd2luZyB3aWxsICpub3QqIHdvcms6CisKKy0tLS0tLS0tLS0tLQorVmlldzoKKyAgICAgICAgLy9wdWJsaWMvamFtLy4uLiAvL215aG9zdC9qYW0vLi4uCisgICAgICAgIC8vcHVibGljL290aGVyLy4uLiAvL215aG9zdC9qYW0vLi4uCisgICAgICAgIC8vcHVibGljL2d1ZXN0Ly4uLiAvL215aG9zdC9qYW0vLi4uCistLS0tLS0tLS0tLS0KKworSWYgeW91IHdhbnQgbW9yZSB0aGFuIG9uZSBQZXJmb3JjZSBicmFuY2ggdG8gYmUgaW1wb3J0ZWQgaW50byB0aGUKK3NhbWUgZGlyZWN0b3J5IHlvdSBtdXN0IGVtcGxveSBhIHdvcmthcm91bmQuICBBIHNpbXBsZSBvcHRpb24gaXMKK3RvIGFkanVzdCB5b3VyIGBwNGAgY2xpZW50IGJlZm9yZSBlYWNoIGltcG9ydCB0byBvbmx5IGluY2x1ZGUgYQorc2luZ2xlIHZpZXcuCisKK0Fub3RoZXIgb3B0aW9uIGlzIHRvIGNyZWF0ZSBtdWx0aXBsZSBzeW1saW5rcyBsb2NhbGx5IHdoaWNoIGFsbAorcG9pbnQgdG8gdGhlIHNhbWUgZGlyZWN0b3J5IGluIHlvdXIgZ2l0IHJlcG9zaXRvcnkgYW5kIHRoZW4gdXNlCitvbmUgcGVyICJ2aWV3IiBpbnN0ZWFkIG9mIGxpc3RpbmcgdGhlIGFjdHVhbCBkaXJlY3RvcnkuCisKKworVGFncworLS0tLQorQSBnaXQgdGFnIG9mIHRoZSBmb3JtIHA0L3h4IGlzIGNyZWF0ZWQgZm9yIGV2ZXJ5IGNoYW5nZSBpbXBvcnRlZCBmcm9tCit0aGUgUGVyZm9yY2UgcmVwb3NpdG9yeSB3aGVyZSB4eCBpcyB0aGUgUGVyZm9yY2UgY2hhbmdlc2V0IG51bWJlci4KK1RoZXJlZm9yZSBhZnRlciB0aGUgaW1wb3J0IHlvdSBjYW4gdXNlIGdpdCB0byBhY2Nlc3MgYW55IGNvbW1pdCBieSBpdHMKK1BlcmZvcmNlIG51bWJlciwgZS5nLiBnaXQgc2hvdyBwNC8zMjcuCisKK1RoZSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSBIRUFEIGNvbW1pdCBpcyBhbHNvIGhvdyBgZ2l0LXA0aW1wb3J0YAorZGV0ZXJtaW5lcyBpZiB0aGVyZSBhcmUgbmV3IGNoYW5nZXMgdG8gaW5jcmVtZW50YWxseSBpbXBvcnQgZnJvbSB0aGUKK1BlcmZvcmNlIHJlcG9zaXRvcnkuCisKK0lmIHlvdSBpbXBvcnQgZnJvbSBhIHJlcG9zaXRvcnkgd2l0aCBtYW55IHRob3VzYW5kcyBvZiBjaGFuZ2VzCit5b3Ugd2lsbCBoYXZlIGFuIGVxdWFsIG51bWJlciBvZiBwNC94eHh4IGdpdCB0YWdzLiAgR2l0IHRhZ3MgY2FuCitiZSBleHBlbnNpdmUgaW4gdGVybXMgb2YgZGlzayBzcGFjZSBhbmQgcmVwb3NpdG9yeSBvcGVyYXRpb25zLgorSWYgeW91IGRvbid0IG5lZWQgdG8gcGVyZm9ybSBmdXJ0aGVyIGluY3JlbWVudGFsIGltcG9ydHMsIHlvdQorbWF5IGRlbGV0ZSB0aGUgdGFncy4KKworCitOb3RlcworLS0tLS0KK1lvdSBjYW4gaW50ZXJydXB0IHRoZSBpbXBvcnQgKGUuZy4gY3RybC1jKSBhdCBhbnkgdGltZSBhbmQgcmVzdGFydCBpdAord2l0aG91dCB3b3JyeS4KKworQXV0aG9yIGluZm9ybWF0aW9uIGlzIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCBieSBxdWVyeWluZyB0aGUKK1BlcmZvcmNlICJ1c2VycyIgdGFibGUgdXNpbmcgdGhlIGlkIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGNoYW5nZS4KK0hvd2V2ZXIsIGlmIHlvdSB3YW50IHRvIG1hbnVhbGx5IHN1cHBseSB0aGVzZSBtYXBwaW5ncyB5b3UgY2FuIGRvCitzbyB3aXRoIHRoZSAiLS1hdXRob3JzIiBvcHRpb24uICBJdCBhY2NlcHRzIGEgZmlsZSBjb250YWluaW5nIGEgbGlzdAorb2YgbWFwcGluZ3Mgd2l0aCBlYWNoIGxpbmUgY29udGFpbmluZyBvbmUgbWFwcGluZyBpbiB0aGUgZm9ybWF0OgorCistLS0tLS0tLS0tLS0KKyAgICBwZXJmb3JjZV9pZCA9IEZ1bGwgTmFtZSA8ZW1haWxAYWRkcmVzcy5jb20+CistLS0tLS0tLS0tLS0KKworCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBTZWFuIEVzdGFicm9va3MgPHNlYW5sa21sQHN5bXBhdGljby5jYT4KKworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGF0Y2hlcy9kb2Nib29rLXhzbC1tYW5wYWdlcy1jaGFybWFwLnBhdGNoIGIvY29udHJpYi9wYXRjaGVzL2RvY2Jvb2steHNsLW1hbnBhZ2VzLWNoYXJtYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiMDhiNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGF0Y2hlcy9kb2Nib29rLXhzbC1tYW5wYWdlcy1jaGFybWFwLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK0Zyb206IElzbWFpbCBEw7ZubWV6IDxpc21haWxAcGFyZHVzLm9yZy50cj4KKworVHJ5aW5nIHRvIGJ1aWxkIHRoZSBkb2N1bWVudGF0aW9uIHdpdGggZG9jYm9vay14c2wgMS43MyBtYXkgcmVzdWx0IGluCit0aGUgZm9sbG93aW5nIGVycm9yLiAgVGhpcyBwYXRjaCBmaXhlcyBpdC4KKworJCB4bWx0byAtbSBjYWxsb3V0cy54c2wgbWFuIGdpdC1hZGQueG1sCitydW50aW1lIGVycm9yOiBmaWxlCitmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzMuMC9tYW5wYWdlcy9vdGhlci54c2wgbGluZQorMTI5IGVsZW1lbnQgY2FsbC10ZW1wbGF0ZQorVGhlIGNhbGxlZCB0ZW1wbGF0ZSAncmVhZC1jaGFyYWN0ZXItbWFwJyB3YXMgbm90IGZvdW5kLgorCistLS0gZG9jYm9vay14c2wtMS43My4wL21hbnBhZ2VzL2RvY2Jvb2sueHNsLm1hbnBhZ2VzLWNoYXJtYXAJMjAwNy0wNy0yMyAxNjoyNDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBkb2Nib29rLXhzbC0xLjczLjAvbWFucGFnZXMvZG9jYm9vay54c2wJMjAwNy0wNy0yMyAxNjoyNToxNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNyw2ICszNyw3IEBACisgICA8eHNsOmluY2x1ZGUgaHJlZj0ibGlzdHMueHNsIi8+CisgICA8eHNsOmluY2x1ZGUgaHJlZj0iZW5kbm90ZXMueHNsIi8+CisgICA8eHNsOmluY2x1ZGUgaHJlZj0idGFibGUueHNsIi8+CisrICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vY29tbW9uL2NoYXJtYXAueHNsIi8+CisKKyAgIDwhLS0gKiB3ZSByZW5hbWUgdGhlIGZvbGxvd2luZyBqdXN0IHRvIGF2b2lkIHVzaW5nIHBhcmFtcyB3aXRoICJtYW4iIC0tPgorICAgPCEtLSAqIHByZWZpeGVzIGluIHRoZSB0YWJsZS54c2wgc3R5bGVzaGVldCAoYmVjYXVzZSB0aGF0IHN0eWxlc2hlZXQgLS0+CmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvTElDRU5TRSBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDU2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvTElDRU5TRQpAQCAtMCwwICsxLDIwMiBAQAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9NYWtlZmlsZSBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmJhYTNiCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL01ha2VmaWxlCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworQlVJTERfTEFCRUw9JChzaGVsbCBkYXRlICsiJXMiKQorVEFSX09VVD0kKHNoZWxsIGdvIGVudiBHT09TKV8kKHNoZWxsIGdvIGVudiBHT0FSQ0gpLnRhci5negorCithbGw6IGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5IFwKKwlnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cAorCitnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5OiBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMKKwlsbiAtZiAtcyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzLS1wcm94eQorCitnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cDogZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzCisJbG4gLWYgLXMgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwCisKK2dpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwczoKKwlnbyBidWlsZCAtbyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgXAorCQktbGRmbGFncyAiLVggbWFpbi5fQlVJTERfRU1CRURfTEFCRUwgJChCVUlMRF9MQUJFTCkiCisKK2NsZWFuOgorCXJtIC1mIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwKiAqLnRhci5negorCit0YXI6IGNsZWFuIGFsbAorCUBjaG1vZCA1NTUgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzCisJQHRhciAtY3pmICQoVEFSX09VVCkgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHAqIFJFQURNRSBMSUNFTlNFCisJQGVjaG8KKwlAZWNobyAiQ3JlYXRlZCAkKFRBUl9PVVQpIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL1JFQURNRSBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4NGRkMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9SRUFETUUKQEAgLTAsMCArMSw2MiBAQAorZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzCisKK1RoZSBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgYmluYXJ5IHNwZWVkcyB1cCBTU0wgb3BlcmF0aW9ucworYnkgcnVubmluZyBhIGRhZW1vbiBqb2IgKGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHkpIHRoYXQKK2tlZXBzIGEgY29ubmVjdGlvbiBvcGVuIHRvIGEgc2VydmVyLgorCisKK1BSRS1CVUlMVCBCSU5BUklFUworCitEYXJ3aW4gYW1kNjQ6CitodHRwczovL2NvbW1vbmRhdGFzdG9yYWdlLmdvb2dsZWFwaXMuY29tL2dpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy9kYXJ3aW5fYW1kNjQudGFyLmd6CisKK0xpbnV4IGFtZDY0OgoraHR0cHM6Ly9jb21tb25kYXRhc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9naXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMvbGludXhfYW1kNjQudGFyLmd6CisKKworSU5TVEFMTElORworCitNb3ZlIGFsbCBvZiB0aGUgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHAqIGJpbmFyaWVzIHRvIGEgZGlyZWN0b3J5CitpbiBQQVRILgorCisKK1VTQUdFCisKK0hUVFBTIHJlcXVlc3RzIGNhbiBiZSBkZWxlZ2F0ZWQgdG8gdGhlIHByb3h5IGJ5IHVzaW5nIHRoZQorInBlcnNpc3RlbnQtaHR0cHMiIHNjaGVtZSwgZS5nLgorCitnaXQgY2xvbmUgcGVyc2lzdGVudC1odHRwczovL2tlcm5lbC5nb29nbGVzb3VyY2UuY29tL3B1Yi9zY20vZ2l0L2dpdAorCitMaWtld2lzZSwgLmdpdGNvbmZpZyBjYW4gYmUgdXBkYXRlZCBhcyBmb2xsb3dzIHRvIHJld3JpdGUgaHR0cHMgdXJscwordG8gdXNlIHBlcnNpc3RlbnQtaHR0cHM6CisKK1t1cmwgInBlcnNpc3RlbnQtaHR0cHMiXQorCWluc3RlYWRvZiA9IGh0dHBzCitbdXJsICJwZXJzaXN0ZW50LWh0dHAiXQorCWluc3RlYWRvZiA9IGh0dHAKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlVJTERJTkcgRlJPTSBTT1VSQ0UKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitMT0NBVElPTgorCitUaGUgc291cmNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzIGRpcmVjdG9yeSBvZgordGhlIEdpdCBzb3VyY2UgcmVwb3NpdG9yeS4gVGhlIEdpdCBzb3VyY2UgcmVwb3NpdG9yeSBpcyBhdmFpbGFibGUgYXQKK2dpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvCitodHRwczovL2tlcm5lbC5nb29nbGVzb3VyY2UuY29tL3B1Yi9zY20vZ2l0L2dpdAorCisKK1BSRVJFUVVJU0lURVMKKworVGhlIGNvZGUgaXMgd3JpdHRlbiBpbiBHbyAoaHR0cDovL2dvbGFuZy5vcmcvKSBhbmQgdGhlIEdvIGNvbXBpbGVyIGlzCityZXF1aXJlZC4gQ3VycmVudGx5LCB0aGUgY29tcGlsZXIgbXVzdCBiZSBidWlsdCBhbmQgaW5zdGFsbGVkIGZyb20gdGlwCitvZiBzb3VyY2UsIGluIG9yZGVyIHRvIGluY2x1ZGUgYSBmaXggaW4gdGhlIHJldmVyc2UgaHR0cCBwcm94eToKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nby9zb3VyY2UvZGV0YWlsP3I9YTYxNWI3OTY1NzBhMmNkODU5MTg4NDc2N2E3ZDY3ZWRlNzRmNjY0OAorCisKK0JVSUxESU5HCisKK1J1biAibWFrZSIgdG8gYnVpbGQgdGhlIGJpbmFyaWVzLiBTZWUgdGhlIHNlY3Rpb24gb24KK0lOU1RBTExJTkcgYWJvdmUuCmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvY2xpZW50LmdvIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL2NsaWVudC5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTEyNWI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL2NsaWVudC5nbwpAQCAtMCwwICsxLDE4OSBAQAorLy8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworcGFja2FnZSBtYWluCisKK2ltcG9ydCAoCisJImJ1ZmlvIgorCSJlcnJvcnMiCisJImZtdCIKKwkibmV0IgorCSJuZXQvdXJsIgorCSJvcyIKKwkib3MvZXhlYyIKKwkic3RyaW5ncyIKKwkic3lzY2FsbCIKKwkidGltZSIKKykKKwordHlwZSBDbGllbnQgc3RydWN0IHsKKwlQcm94eUJpbiBzdHJpbmcKKwlBcmdzICAgICBbXXN0cmluZworCisJaW5zZWN1cmUgYm9vbAorfQorCitmdW5jIChjICpDbGllbnQpIFJ1bigpIGVycm9yIHsKKwlpZiBlcnIgOj0gYy5yZXNvbHZlQXJncygpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoInJlc29sdmVBcmdzKCkgZ290IGVycm9yOiAldiIsIGVycikKKwl9CisKKwkvLyBDb25uZWN0IHRvIHRoZSBwcm94eS4KKwl1Y29ubiwgaGNvbm4sIGFkZHIsIGVyciA6PSBjLmNvbm5lY3QoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZm10LkVycm9yZigiY29ubmVjdCgpIGdvdCBlcnJvcjogJXYiLCBlcnIpCisJfQorCS8vIEtlZXAgdGhlIHVuaXggc29ja2V0IGNvbm5lY3Rpb24gb3BlbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXF1ZXN0LgorCWRlZmVyIHVjb25uLkNsb3NlKCkKKwkvLyBLZWVwIGEgY29ubmVjdGlvbiB0byB0aGUgSFRUUCBzZXJ2ZXIgb3Blbiwgc28gbm8gb3RoZXIgdXNlciBjYW4KKwkvLyBiaW5kIG9uIHRoZSBzYW1lIGFkZHJlc3Mgc28gbG9uZyBhcyB0aGUgcHJvY2VzcyBpcyBydW5uaW5nLgorCWRlZmVyIGhjb25uLkNsb3NlKCkKKworCS8vIFN0YXJ0IHRoZSBnaXQtcmVtb3RlLWh0dHAgc3VicHJvY2Vzcy4KKwljYXJncyA6PSBbXXN0cmluZ3siLWMiLCBmbXQuU3ByaW50ZigiaHR0cC5wcm94eT0ldiIsIGFkZHIpLCAicmVtb3RlLWh0dHAifQorCWNhcmdzID0gYXBwZW5kKGNhcmdzLCBjLkFyZ3MuLi4pCisJY21kIDo9IGV4ZWMuQ29tbWFuZCgiZ2l0IiwgY2FyZ3MuLi4pCisKKwlmb3IgXywgdiA6PSByYW5nZSBvcy5FbnZpcm9uKCkgeworCQlpZiAhc3RyaW5ncy5IYXNQcmVmaXgodiwgIkdJVF9QRVJTSVNURU5UX0hUVFBTX1NFQ1VSRT0iKSB7CisJCQljbWQuRW52ID0gYXBwZW5kKGNtZC5FbnYsIHYpCisJCX0KKwl9CisJLy8gU2V0IHRoZSBHSVRfUEVSU0lTVEVOVF9IVFRQU19TRUNVUkUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbgorCS8vIHRoZSBwcm94eSBpcyB1c2luZyBhIFNTTCBjb25uZWN0aW9uLiAgVGhpcyBhbGxvd3MgY3JlZGVudGlhbCBoZWxwZXJzCisJLy8gdG8gaWRlbnRpZnkgc2VjdXJlIHByb3h5IGNvbm5lY3Rpb25zLCBkZXNwaXRlIGJlaW5nIHBhc3NlZCBhbiBIVFRQCisJLy8gc2NoZW1lLgorCWlmICFjLmluc2VjdXJlIHsKKwkJY21kLkVudiA9IGFwcGVuZChjbWQuRW52LCAiR0lUX1BFUlNJU1RFTlRfSFRUUFNfU0VDVVJFPTEiKQorCX0KKworCWNtZC5TdGRpbiA9IG9zLlN0ZGluCisJY21kLlN0ZG91dCA9IG9zLlN0ZG91dAorCWNtZC5TdGRlcnIgPSBvcy5TdGRlcnIKKwlpZiBlcnIgOj0gY21kLlJ1bigpOyBlcnIgIT0gbmlsIHsKKwkJaWYgZWVyciwgb2sgOj0gZXJyLigqZXhlYy5FeGl0RXJyb3IpOyBvayB7CisJCQlpZiBzdGF0LCBvayA6PSBlZXJyLlByb2Nlc3NTdGF0ZS5TeXMoKS4oc3lzY2FsbC5XYWl0U3RhdHVzKTsgb2sgJiYgc3RhdC5FeGl0U3RhdHVzKCkgIT0gMCB7CisJCQkJb3MuRXhpdChzdGF0LkV4aXRTdGF0dXMoKSkKKwkJCX0KKwkJfQorCQlyZXR1cm4gZm10LkVycm9yZigiZ2l0LXJlbW90ZS1odHRwIHN1YnByb2Nlc3MgZ290IGVycm9yOiAldiIsIGVycikKKwl9CisJcmV0dXJuIG5pbAorfQorCitmdW5jIChjICpDbGllbnQpIGNvbm5lY3QoKSAodWNvbm4gbmV0LkNvbm4sIGhjb25uIG5ldC5Db25uLCBhZGRyIHN0cmluZywgZXJyIGVycm9yKSB7CisJdWNvbm4sIGVyciA9IERlZmF1bHRTb2NrZXQuRGlhbCgpCisJaWYgZXJyICE9IG5pbCB7CisJCWlmIGUsIG9rIDo9IGVyci4oKm5ldC5PcEVycm9yKTsgb2sgJiYgKG9zLklzTm90RXhpc3QoZS5FcnIpIHx8IGUuRXJyID09IHN5c2NhbGwuRUNPTk5SRUZVU0VEKSB7CisJCQlpZiBlcnIgPSBjLnN0YXJ0UHJveHkoKTsgZXJyID09IG5pbCB7CisJCQkJdWNvbm4sIGVyciA9IERlZmF1bHRTb2NrZXQuRGlhbCgpCisJCQl9CisJCX0KKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4KKwkJfQorCX0KKworCWlmIGFkZHIsIGVyciA9IGMucmVhZEFkZHIodWNvbm4pOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCisJLy8gT3BlbiBhIHRjcCBjb25uZWN0aW9uIHRvIHRoZSBwcm94eS4KKwlpZiBoY29ubiwgZXJyID0gbmV0LkRpYWwoInRjcCIsIGFkZHIpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCisJLy8gVmVyaWZ5IHRoZSBhZGRyZXNzIGhhc24ndCBjaGFuZ2VkIG93bmVyc2hpcC4KKwl2YXIgYWRkcjIgc3RyaW5nCisJaWYgYWRkcjIsIGVyciA9IGMucmVhZEFkZHIodWNvbm4pOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfSBlbHNlIGlmIGFkZHIgIT0gYWRkcjIgeworCQllcnIgPSBmbXQuRXJyb3JmKCJhZGRyZXNzIGNoYW5nZWQgYWZ0ZXIgY29ubmVjdC4gZ290ICVxLCB3YW50ICVxIiwgYWRkcjIsIGFkZHIpCisJCXJldHVybgorCX0KKwlyZXR1cm4KK30KKworZnVuYyAoYyAqQ2xpZW50KSByZWFkQWRkcihjb25uIG5ldC5Db25uKSAoc3RyaW5nLCBlcnJvcikgeworCWNvbm4uU2V0RGVhZGxpbmUodGltZS5Ob3coKS5BZGQoNSAqIHRpbWUuU2Vjb25kKSkKKwlkYXRhIDo9IG1ha2UoW11ieXRlLCAxMDApCisJbiwgZXJyIDo9IGNvbm4uUmVhZChkYXRhKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gIiIsIGZtdC5FcnJvcmYoImVycm9yIHJlYWRpbmcgdW5peCBzb2NrZXQ6ICV2IiwgZXJyKQorCX0gZWxzZSBpZiBuID09IDAgeworCQlyZXR1cm4gIiIsIGVycm9ycy5OZXcoImVtcHR5IGRhdGEgcmVzcG9uc2UiKQorCX0KKwljb25uLldyaXRlKFtdYnl0ZXsxfSkgLy8gQWNrCisKKwl2YXIgYWRkciBzdHJpbmcKKwlpZiBhZGRycyA6PSBzdHJpbmdzLlNwbGl0KHN0cmluZyhkYXRhWzpuXSksICJcbiIpOyBsZW4oYWRkcnMpICE9IDIgeworCQlyZXR1cm4gIiIsIGZtdC5FcnJvcmYoImdvdCAlcSwgd2FudGVkIDIgYWRkcmVzc2VzIiwgZGF0YVs6bl0pCisJfSBlbHNlIGlmIGMuaW5zZWN1cmUgeworCQlhZGRyID0gYWRkcnNbMV0KKwl9IGVsc2UgeworCQlhZGRyID0gYWRkcnNbMF0KKwl9CisJcmV0dXJuIGFkZHIsIG5pbAorfQorCitmdW5jIChjICpDbGllbnQpIHN0YXJ0UHJveHkoKSBlcnJvciB7CisJY21kIDo9IGV4ZWMuQ29tbWFuZChjLlByb3h5QmluKQorCWNtZC5TeXNQcm9jQXR0ciA9ICZzeXNjYWxsLlN5c1Byb2NBdHRye1NldHBnaWQ6IHRydWV9CisJc3Rkb3V0LCBlcnIgOj0gY21kLlN0ZG91dFBpcGUoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCWRlZmVyIHN0ZG91dC5DbG9zZSgpCisJaWYgZXJyIDo9IGNtZC5TdGFydCgpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlyZXN1bHQgOj0gbWFrZShjaGFuIGVycm9yKQorCWdvIGZ1bmMoKSB7CisJCWJ5dGVzLCBfLCBlcnIgOj0gYnVmaW8uTmV3UmVhZGVyKHN0ZG91dCkuUmVhZExpbmUoKQorCQlpZiBsaW5lIDo9IHN0cmluZyhieXRlcyk7IGVyciA9PSBuaWwgJiYgbGluZSAhPSAiT0siIHsKKwkJCWVyciA9IGZtdC5FcnJvcmYoInByb3h5IHJldHVybmVkICVxLCB3YW50IFwiT0tcIiIsIGxpbmUpCisJCX0KKwkJcmVzdWx0IDwtIGVycgorCX0oKQorCXNlbGVjdCB7CisJY2FzZSBlcnIgOj0gPC1yZXN1bHQ6CisJCXJldHVybiBlcnIKKwljYXNlIDwtdGltZS5BZnRlcig1ICogdGltZS5TZWNvbmQpOgorCQlyZXR1cm4gZXJyb3JzLk5ldygidGltZW91dCB3YWl0aW5nIGZvciBwcm94eSB0byBzdGFydCIpCisJfQorCXBhbmljKCJub3QgcmVhY2hhYmxlIikKK30KKworZnVuYyAoYyAqQ2xpZW50KSByZXNvbHZlQXJncygpIGVycm9yIHsKKwlpZiBuYXJncyA6PSBsZW4oYy5BcmdzKTsgbmFyZ3MgPT0gMCB7CisJCXJldHVybiBlcnJvcnMuTmV3KCJyZW1vdGUgbmVlZGVkIikKKwl9IGVsc2UgaWYgbmFyZ3MgPiAyIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIndhbnQgYXQgbW9zdCAyIGFyZ3MsIGdvdCAldiIsIGMuQXJncykKKwl9CisKKwkvLyBSZXdyaXRlIHRoZSB1cmwgc2NoZW1lIHRvIGJlIGh0dHAuCisJaWR4IDo9IGxlbihjLkFyZ3MpIC0gMQorCXJhd3VybCA6PSBjLkFyZ3NbaWR4XQorCXJ1cmwsIGVyciA6PSB1cmwuUGFyc2UocmF3dXJsKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZm10LkVycm9yZigiaW52YWxpZCByZW1vdGU6ICV2IiwgZXJyKQorCX0KKwljLmluc2VjdXJlID0gcnVybC5TY2hlbWUgPT0gInBlcnNpc3RlbnQtaHR0cCIKKwlydXJsLlNjaGVtZSA9ICJodHRwIgorCWMuQXJnc1tpZHhdID0gcnVybC5TdHJpbmcoKQorCWlmIGlkeCAhPSAwICYmIGMuQXJnc1swXSA9PSByYXd1cmwgeworCQljLkFyZ3NbMF0gPSBjLkFyZ3NbaWR4XQorCX0KKwlyZXR1cm4gbmlsCit9CmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvbWFpbi5nbyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9tYWluLmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMWIxMDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvbWFpbi5nbwpAQCAtMCwwICsxLDgyIEBACisvLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBUaGUgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzIGJpbmFyeSBzcGVlZHMgdXAgU1NMIG9wZXJhdGlvbnMgYnkgcnVubmluZworLy8gYSBkYWVtb24gam9iIHRoYXQga2VlcHMgYSBjb25uZWN0aW9uIG9wZW4gdG8gYSBHaXQgc2VydmVyLiBUaGlzIGVuc3VyZXMgdGhlCisvLyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5IGlzIHJ1bm5pbmcgYW5kIGRlbGVnYXRpbmcgZXhlY3V0aW9uCisvLyB0byB0aGUgZ2l0LXJlbW90ZS1odHRwIGJpbmFyeSB3aXRoIHRoZSBodHRwX3Byb3h5IHNldCB0byB0aGUgZGFlbW9uIGpvYi4KKy8vIEEgdW5peCBzb2NrZXQgaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhlIHByb3h5IGFuZCBkaXNjb3ZlciB0aGUKKy8vIEhUVFAgYWRkcmVzcy4gTm90ZSwgYm90aCB0aGUgY2xpZW50IGFuZCBwcm94eSBhcmUgaW5jbHVkZWQgaW4gdGhlIHNhbWUKKy8vIGJpbmFyeS4KK3BhY2thZ2UgbWFpbgorCitpbXBvcnQgKAorCSJmbGFnIgorCSJmbXQiCisJImxvZyIKKwkib3MiCisJInN0cmluZ3MiCisJInRpbWUiCispCisKK3ZhciAoCisJZm9yY2VQcm94eSA9IGZsYWcuQm9vbCgicHJveHkiLCBmYWxzZSwgIldoZXRoZXIgdG8gc3RhcnQgdGhlIGJpbmFyeSBpbiBwcm94eSBtb2RlIikKKwlwcm94eUJpbiAgID0gZmxhZy5TdHJpbmcoInByb3h5X2JpbiIsICJnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5IiwgIlBhdGggdG8gdGhlIHByb3h5IGJpbmFyeSIpCisJcHJpbnRMYWJlbCA9IGZsYWcuQm9vbCgicHJpbnRfbGFiZWwiLCBmYWxzZSwgIlByaW50cyB0aGUgYnVpbGQgbGFiZWwgZm9yIHRoZSBiaW5hcnkiKQorCisJLy8gVmFyaWFibGUgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCB0aHJvdWdoIHRoZSAtWCBsaW5rZXIgZmxhZy4KKwlfQlVJTERfRU1CRURfTEFCRUwgc3RyaW5nCispCisKK2NvbnN0ICgKKwlkZWZhdWx0TWF4SWRsZUR1cmF0aW9uICAgID0gMjQgKiB0aW1lLkhvdXIKKwlkZWZhdWx0UG9sbFVwZGF0ZUludGVydmFsID0gMTUgKiB0aW1lLk1pbnV0ZQorKQorCitmdW5jIG1haW4oKSB7CisJZmxhZy5QYXJzZSgpCisJaWYgKnByaW50TGFiZWwgeworCQkvLyBTaG9ydCBjaXJjdWl0IGV4ZWN1dGlvbiB0byBwcmludCB0aGUgYnVpbGQgbGFiZWwKKwkJZm10LlByaW50bG4oYnVpbGRMYWJlbCgpKQorCQlyZXR1cm4KKwl9CisKKwl2YXIgZXJyIGVycm9yCisJaWYgKmZvcmNlUHJveHkgfHwgc3RyaW5ncy5IYXNTdWZmaXgob3MuQXJnc1swXSwgIi0tcHJveHkiKSB7CisJCWxvZy5TZXRQcmVmaXgoImdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHk6ICIpCisJCXByb3h5IDo9ICZQcm94eXsKKwkJCUJ1aWxkTGFiZWw6ICAgICAgICAgYnVpbGRMYWJlbCgpLAorCQkJTWF4SWRsZUR1cmF0aW9uOiAgICBkZWZhdWx0TWF4SWRsZUR1cmF0aW9uLAorCQkJUG9sbFVwZGF0ZUludGVydmFsOiBkZWZhdWx0UG9sbFVwZGF0ZUludGVydmFsLAorCQl9CisJCWVyciA9IHByb3h5LlJ1bigpCisJfSBlbHNlIHsKKwkJbG9nLlNldFByZWZpeCgiZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzOiAiKQorCQljbGllbnQgOj0gJkNsaWVudHsKKwkJCVByb3h5QmluOiAqcHJveHlCaW4sCisJCQlBcmdzOiAgICAgZmxhZy5BcmdzKCksCisJCX0KKwkJZXJyID0gY2xpZW50LlJ1bigpCisJfQorCWlmIGVyciAhPSBuaWwgeworCQlsb2cuRmF0YWxsbihlcnIpCisJfQorfQorCitmdW5jIGJ1aWxkTGFiZWwoKSBzdHJpbmcgeworCWlmIF9CVUlMRF9FTUJFRF9MQUJFTCA9PSAiIiB7CisJCWxvZy5QcmludGxuKGB1bmxhYmVsZWQgYnVpbGQ7IGJ1aWxkIHdpdGggIm1ha2UiIHRvIGxhYmVsYCkKKwl9CisJcmV0dXJuIF9CVUlMRF9FTUJFRF9MQUJFTAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL3Byb3h5LmdvIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL3Byb3h5LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGNkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvcHJveHkuZ28KQEAgLTAsMCArMSwxOTAgQEAKKy8vIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3BhY2thZ2UgbWFpbgorCitpbXBvcnQgKAorCSJmbXQiCisJImxvZyIKKwkibmV0IgorCSJuZXQvaHR0cCIKKwkibmV0L2h0dHAvaHR0cHV0aWwiCisJIm9zIgorCSJvcy9leGVjIgorCSJvcy9zaWduYWwiCisJInN5bmMiCisJInN5c2NhbGwiCisJInRpbWUiCispCisKK3R5cGUgUHJveHkgc3RydWN0IHsKKwlCdWlsZExhYmVsICAgICAgICAgc3RyaW5nCisJTWF4SWRsZUR1cmF0aW9uICAgIHRpbWUuRHVyYXRpb24KKwlQb2xsVXBkYXRlSW50ZXJ2YWwgdGltZS5EdXJhdGlvbgorCisJdWwgICAgICAgIG5ldC5MaXN0ZW5lcgorCWh0dHBBZGRyICBzdHJpbmcKKwlodHRwc0FkZHIgc3RyaW5nCit9CisKK2Z1bmMgKHAgKlByb3h5KSBSdW4oKSBlcnJvciB7CisJaGwsIGVyciA6PSBuZXQuTGlzdGVuKCJ0Y3AiLCAiMTI3LjAuMC4xOjAiKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZm10LkVycm9yZigiaHR0cCBsaXN0ZW4gZmFpbGVkOiAldiIsIGVycikKKwl9CisJZGVmZXIgaGwuQ2xvc2UoKQorCisJaHNsLCBlcnIgOj0gbmV0Lkxpc3RlbigidGNwIiwgIjEyNy4wLjAuMTowIikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoImh0dHBzIGxpc3RlbiBmYWlsZWQ6ICV2IiwgZXJyKQorCX0KKwlkZWZlciBoc2wuQ2xvc2UoKQorCisJcC51bCwgZXJyID0gRGVmYXVsdFNvY2tldC5MaXN0ZW4oKQorCWlmIGVyciAhPSBuaWwgeworCQljLCBkZXJyIDo9IERlZmF1bHRTb2NrZXQuRGlhbCgpCisJCWlmIGRlcnIgPT0gbmlsIHsKKwkJCWMuQ2xvc2UoKQorCQkJZm10LlByaW50bG4oIk9LXG5BIHByb3h5IGlzIGFscmVhZHkgcnVubmluZy4uLiBleGl0aW5nIikKKwkJCXJldHVybiBuaWwKKwkJfSBlbHNlIGlmIGUsIG9rIDo9IGRlcnIuKCpuZXQuT3BFcnJvcik7IG9rICYmIGUuRXJyID09IHN5c2NhbGwuRUNPTk5SRUZVU0VEIHsKKwkJCS8vIE5vdGhpbmcgaXMgbGlzdGVuaW5nIG9uIHRoZSBzb2NrZXQsIHVubGluayBpdCBhbmQgdHJ5IGFnYWluLgorCQkJc3lzY2FsbC5VbmxpbmsoRGVmYXVsdFNvY2tldC5QYXRoKCkpCisJCQlwLnVsLCBlcnIgPSBEZWZhdWx0U29ja2V0Lkxpc3RlbigpCisJCX0KKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gZm10LkVycm9yZigidW5peCBsaXN0ZW4gZmFpbGVkIG9uICV2OiAldiIsIERlZmF1bHRTb2NrZXQuUGF0aCgpLCBlcnIpCisJCX0KKwl9CisJZGVmZXIgcC51bC5DbG9zZSgpCisJZ28gcC5jbG9zZU9uU2lnbmFsKCkKKwlnbyBwLmNsb3NlT25VcGRhdGUoKQorCisJcC5odHRwQWRkciA9IGhsLkFkZHIoKS5TdHJpbmcoKQorCXAuaHR0cHNBZGRyID0gaHNsLkFkZHIoKS5TdHJpbmcoKQorCWZtdC5QcmludGYoIk9LXG5MaXN0ZW5pbmcgb24gdW5peCBzb2NrZXQ9JXYgaHR0cD0ldiBodHRwcz0ldlxuIiwKKwkJcC51bC5BZGRyKCksIHAuaHR0cEFkZHIsIHAuaHR0cHNBZGRyKQorCisJcmVzdWx0IDo9IG1ha2UoY2hhbiBlcnJvciwgMikKKwlnbyBwLnNlcnZlVW5peChyZXN1bHQpCisJZ28gZnVuYygpIHsKKwkJcmVzdWx0IDwtIGh0dHAuU2VydmUoaGwsICZodHRwdXRpbC5SZXZlcnNlUHJveHl7CisJCQlGbHVzaEludGVydmFsOiA1MDAgKiB0aW1lLk1pbGxpc2Vjb25kLAorCQkJRGlyZWN0b3I6ICAgICAgZnVuYyhyICpodHRwLlJlcXVlc3QpIHt9LAorCQl9KQorCX0oKQorCWdvIGZ1bmMoKSB7CisJCXJlc3VsdCA8LSBodHRwLlNlcnZlKGhzbCwgJmh0dHB1dGlsLlJldmVyc2VQcm94eXsKKwkJCUZsdXNoSW50ZXJ2YWw6IDUwMCAqIHRpbWUuTWlsbGlzZWNvbmQsCisJCQlEaXJlY3RvcjogZnVuYyhyICpodHRwLlJlcXVlc3QpIHsKKwkJCQlyLlVSTC5TY2hlbWUgPSAiaHR0cHMiCisJCQl9LAorCQl9KQorCX0oKQorCXJldHVybiA8LXJlc3VsdAorfQorCit0eXBlIHNvY2tldENvbnRleHQgc3RydWN0IHsKKwlzeW5jLldhaXRHcm91cAorCW11dGV4IHN5bmMuTXV0ZXgKKwlsYXN0ICB0aW1lLlRpbWUKK30KKworZnVuYyAoc2MgKnNvY2tldENvbnRleHQpIERvbmUoKSB7CisJc2MubXV0ZXguTG9jaygpCisJZGVmZXIgc2MubXV0ZXguVW5sb2NrKCkKKwlzYy5sYXN0ID0gdGltZS5Ob3coKQorCXNjLldhaXRHcm91cC5Eb25lKCkKK30KKworZnVuYyAocCAqUHJveHkpIHNlcnZlVW5peChyZXN1bHQgY2hhbjwtIGVycm9yKSB7CisJc29ja0N0eCA6PSAmc29ja2V0Q29udGV4dHt9CisJZ28gcC5jbG9zZU9uSWRsZShzb2NrQ3R4KQorCisJdmFyIGVyciBlcnJvcgorCWZvciB7CisJCXZhciB1Y29ubiBuZXQuQ29ubgorCQl1Y29ubiwgZXJyID0gcC51bC5BY2NlcHQoKQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCWVyciA9IGZtdC5FcnJvcmYoImFjY2VwdCBmYWlsZWQ6ICV2IiwgZXJyKQorCQkJYnJlYWsKKwkJfQorCQlzb2NrQ3R4LkFkZCgxKQorCQlnbyBwLmhhbmRsZVVuaXhDb25uKHNvY2tDdHgsIHVjb25uKQorCX0KKwlzb2NrQ3R4LldhaXQoKQorCXJlc3VsdCA8LSBlcnIKK30KKworZnVuYyAocCAqUHJveHkpIGhhbmRsZVVuaXhDb25uKHNvY2tDdHggKnNvY2tldENvbnRleHQsIHVjb25uIG5ldC5Db25uKSB7CisJZGVmZXIgc29ja0N0eC5Eb25lKCkKKwlkZWZlciB1Y29ubi5DbG9zZSgpCisJZGF0YSA6PSBbXWJ5dGUoZm10LlNwcmludGYoIiV2XG4ldiIsIHAuaHR0cHNBZGRyLCBwLmh0dHBBZGRyKSkKKwl1Y29ubi5TZXREZWFkbGluZSh0aW1lLk5vdygpLkFkZCg1ICogdGltZS5TZWNvbmQpKQorCWZvciBpIDo9IDA7IGkgPCAyOyBpKysgeworCQlpZiBuLCBlcnIgOj0gdWNvbm4uV3JpdGUoZGF0YSk7IGVyciAhPSBuaWwgeworCQkJbG9nLlByaW50ZigiZXJyb3Igc2VuZGluZyBodHRwIGFkZHJlc3NlczogJSt2XG4iLCBlcnIpCisJCQlyZXR1cm4KKwkJfSBlbHNlIGlmIG4gIT0gbGVuKGRhdGEpIHsKKwkJCWxvZy5QcmludGYoInNlbnQgJWQgZGF0YSBieXRlcywgd2FudGVkICVkXG4iLCBuLCBsZW4oZGF0YSkpCisJCQlyZXR1cm4KKwkJfQorCQlpZiBfLCBlcnIgOj0gdWNvbm4uUmVhZChbXWJ5dGV7MCwgMCwgMCwgMH0pOyBlcnIgIT0gbmlsIHsKKwkJCWxvZy5QcmludGYoImVycm9yIHdhaXRpbmcgZm9yIEFjazogJSt2XG4iLCBlcnIpCisJCQlyZXR1cm4KKwkJfQorCX0KKwkvLyBXYWl0IHdpdGhvdXQgYSBkZWFkbGluZSBmb3IgdGhlIGNsaWVudCB0byBmaW5pc2ggdmlhIEVPRgorCXVjb25uLlNldERlYWRsaW5lKHRpbWUuVGltZXt9KQorCXVjb25uLlJlYWQoW11ieXRlezAsIDAsIDAsIDB9KQorfQorCitmdW5jIChwICpQcm94eSkgY2xvc2VPbklkbGUoc29ja0N0eCAqc29ja2V0Q29udGV4dCkgeworCWZvciBkIDo9IHAuTWF4SWRsZUR1cmF0aW9uOyBkID4gMDsgeworCQl0aW1lLlNsZWVwKGQpCisJCXNvY2tDdHguV2FpdCgpCisJCXNvY2tDdHgubXV0ZXguTG9jaygpCisJCWlmIGQgPSBzb2NrQ3R4Lmxhc3QuQWRkKHAuTWF4SWRsZUR1cmF0aW9uKS5TdWIodGltZS5Ob3coKSk7IGQgPD0gMCB7CisJCQlsb2cuUHJpbnRsbigiZ3JhY2VmdWwgc2h1dGRvd24gZnJvbSBpZGxlIHRpbWVvdXQiKQorCQkJcC51bC5DbG9zZSgpCisJCX0KKwkJc29ja0N0eC5tdXRleC5VbmxvY2soKQorCX0KK30KKworZnVuYyAocCAqUHJveHkpIGNsb3NlT25VcGRhdGUoKSB7CisJZm9yIHsKKwkJdGltZS5TbGVlcChwLlBvbGxVcGRhdGVJbnRlcnZhbCkKKwkJaWYgb3V0LCBlcnIgOj0gZXhlYy5Db21tYW5kKG9zLkFyZ3NbMF0sICItLXByaW50X2xhYmVsIikuT3V0cHV0KCk7IGVyciAhPSBuaWwgeworCQkJbG9nLlByaW50ZigiZXJyb3IgcG9sbGluZyBmb3IgdXBkYXRlZCBiaW5hcnk6ICV2XG4iLCBlcnIpCisJCX0gZWxzZSBpZiBzIDo9IHN0cmluZyhvdXRbOmxlbihvdXQpLTFdKTsgcC5CdWlsZExhYmVsICE9IHMgeworCQkJbG9nLlByaW50ZigiZ3JhY2VmdWwgc2h1dGRvd24gZnJvbSB1cGRhdGVkIGJpbmFyeTogJXEgLS0+ICVxXG4iLCBwLkJ1aWxkTGFiZWwsIHMpCisJCQlwLnVsLkNsb3NlKCkKKwkJCWJyZWFrCisJCX0KKwl9Cit9CisKK2Z1bmMgKHAgKlByb3h5KSBjbG9zZU9uU2lnbmFsKCkgeworCWNoIDo9IG1ha2UoY2hhbiBvcy5TaWduYWwsIDEwKQorCXNpZ25hbC5Ob3RpZnkoY2gsIG9zLkludGVycnVwdCwgb3MuS2lsbCwgb3MuU2lnbmFsKHN5c2NhbGwuU0lHVEVSTSksIG9zLlNpZ25hbChzeXNjYWxsLlNJR0hVUCkpCisJc2lnIDo9IDwtY2gKKwlwLnVsLkNsb3NlKCkKKwlzd2l0Y2ggc2lnIHsKKwljYXNlIG9zLlNpZ25hbChzeXNjYWxsLlNJR0hVUCk6CisJCWxvZy5QcmludGYoImdyYWNlZnVsIHNodXRkb3duIGZyb20gc2lnbmFsOiAldlxuIiwgc2lnKQorCWRlZmF1bHQ6CisJCWxvZy5GYXRhbGYoImV4aXRpbmcgZnJvbSBzaWduYWw6ICV2XG4iLCBzaWcpCisJfQorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL3NvY2tldC5nbyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9zb2NrZXQuZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzYjkxMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9zb2NrZXQuZ28KQEAgLTAsMCArMSw5NyBAQAorLy8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworcGFja2FnZSBtYWluCisKK2ltcG9ydCAoCisJImZtdCIKKwkibG9nIgorCSJuZXQiCisJIm9zIgorCSJwYXRoL2ZpbGVwYXRoIgorCSJzeXNjYWxsIgorKQorCisvLyBBIFNvY2tldCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgVW5peCBzb2NrZXQgdGhhdCB2ZXJpZmllcyBkaXJlY3RvcnkKKy8vIHBlcm1pc3Npb25zLgordHlwZSBTb2NrZXQgc3RydWN0IHsKKwlEaXIgc3RyaW5nCit9CisKK2Z1bmMgZGVmYXVsdERpcigpIHN0cmluZyB7CisJc29ja1BhdGggOj0gIi5naXQtY3JlZGVudGlhbC1jYWNoZSIKKwlpZiBob21lIDo9IG9zLkdldGVudigiSE9NRSIpOyBob21lICE9ICIiIHsKKwkJcmV0dXJuIGZpbGVwYXRoLkpvaW4oaG9tZSwgc29ja1BhdGgpCisJfQorCWxvZy5QcmludGYoInNvY2tldDogY2Fubm90IGZpbmQgSE9NRSBwYXRoLiB1c2luZyByZWxhdGl2ZSBkaXJlY3RvcnkgJXEgZm9yIHNvY2tldCIsIHNvY2tQYXRoKQorCXJldHVybiBzb2NrUGF0aAorfQorCisvLyBEZWZhdWx0U29ja2V0IGlzIGEgU29ja2V0IGluIHRoZSAkSE9NRS8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUgZGlyZWN0b3J5LgordmFyIERlZmF1bHRTb2NrZXQgPSBTb2NrZXR7RGlyOiBkZWZhdWx0RGlyKCl9CisKKy8vIExpc3RlbiBhbm5vdW5jZXMgdGhlIGxvY2FsIG5ldHdvcmsgYWRkcmVzcyBvZiB0aGUgdW5peCBzb2NrZXQuIFRoZQorLy8gcGVybWlzc2lvbnMgb24gdGhlIHNvY2tldCBkaXJlY3RvcnkgYXJlIHZlcmlmaWVkIGJlZm9yZSBhdHRlbXB0aW5nCisvLyB0aGUgYWN0dWFsIGxpc3Rlbi4KK2Z1bmMgKHMgU29ja2V0KSBMaXN0ZW4oKSAobmV0Lkxpc3RlbmVyLCBlcnJvcikgeworCW5ldHdvcmssIGFkZHIgOj0gInVuaXgiLCBzLlBhdGgoKQorCWlmIGVyciA6PSBzLm1rZGlyKCk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCAmbmV0Lk9wRXJyb3J7T3A6ICJsaXN0ZW4iLCBOZXQ6IG5ldHdvcmssIEFkZHI6ICZuZXQuVW5peEFkZHJ7TmFtZTogYWRkciwgTmV0OiBuZXR3b3JrfSwgRXJyOiBlcnJ9CisJfQorCXJldHVybiBuZXQuTGlzdGVuKG5ldHdvcmssIGFkZHIpCit9CisKKy8vIERpYWwgY29ubmVjdHMgdG8gdGhlIHVuaXggc29ja2V0LiBUaGUgcGVybWlzc2lvbnMgb24gdGhlIHNvY2tldCBkaXJlY3RvcnkKKy8vIGFyZSB2ZXJpZmllZCBiZWZvcmUgYXR0ZW1wdGluZyB0aGUgYWN0dWFsIGRpYWwuCitmdW5jIChzIFNvY2tldCkgRGlhbCgpIChuZXQuQ29ubiwgZXJyb3IpIHsKKwluZXR3b3JrLCBhZGRyIDo9ICJ1bml4Iiwgcy5QYXRoKCkKKwlpZiBlcnIgOj0gcy5jaGVja1Blcm1pc3Npb25zKCk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCAmbmV0Lk9wRXJyb3J7T3A6ICJkaWFsIiwgTmV0OiBuZXR3b3JrLCBBZGRyOiAmbmV0LlVuaXhBZGRye05hbWU6IGFkZHIsIE5ldDogbmV0d29ya30sIEVycjogZXJyfQorCX0KKwlyZXR1cm4gbmV0LkRpYWwobmV0d29yaywgYWRkcikKK30KKworLy8gUGF0aCByZXR1cm5zIHRoZSBmdWxseSBzcGVjaWZpZWQgZmlsZSBuYW1lIG9mIHRoZSB1bml4IHNvY2tldC4KK2Z1bmMgKHMgU29ja2V0KSBQYXRoKCkgc3RyaW5nIHsKKwlyZXR1cm4gZmlsZXBhdGguSm9pbihzLkRpciwgInBlcnNpc3RlbnQtaHR0cHMtcHJveHktc29ja2V0IikKK30KKworZnVuYyAocyBTb2NrZXQpIG1rZGlyKCkgZXJyb3IgeworCWlmIGVyciA6PSBzLmNoZWNrUGVybWlzc2lvbnMoKTsgZXJyID09IG5pbCB7CisJCXJldHVybiBuaWwKKwl9IGVsc2UgaWYgIW9zLklzTm90RXhpc3QoZXJyKSB7CisJCXJldHVybiBlcnIKKwl9CisJaWYgZXJyIDo9IG9zLk1rZGlyQWxsKHMuRGlyLCAwNzAwKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJcmV0dXJuIHMuY2hlY2tQZXJtaXNzaW9ucygpCit9CisKK2Z1bmMgKHMgU29ja2V0KSBjaGVja1Blcm1pc3Npb25zKCkgZXJyb3IgeworCWZpLCBlcnIgOj0gb3MuU3RhdChzLkRpcikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlpZiAhZmkuSXNEaXIoKSB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJzb2NrZXQ6IGdvdCBmaWxlLCB3YW50IGRpcmVjdG9yeSBmb3IgJXEiLCBzLkRpcikKKwl9CisJaWYgZmkuTW9kZSgpLlBlcm0oKSAhPSAwNzAwIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoInNvY2tldDogZ290IHBlcm0gJW8sIHdhbnQgNzAwIGZvciAlcSIsIGZpLk1vZGUoKS5QZXJtKCksIHMuRGlyKQorCX0KKwlpZiBzdCA6PSBmaS5TeXMoKS4oKnN5c2NhbGwuU3RhdF90KTsgaW50KHN0LlVpZCkgIT0gb3MuR2V0dWlkKCkgeworCQlyZXR1cm4gZm10LkVycm9yZigic29ja2V0OiBnb3QgdWlkICVkLCB3YW50ICVkIGZvciAlcSIsIHN0LlVpZCwgb3MuR2V0dWlkKCksIHMuRGlyKQorCX0KKwlyZXR1cm4gbmlsCit9CmRpZmYgLS1naXQgYS9jb250cmliL3JlbW90ZXMyY29uZmlnLnNoIGIvY29udHJpYi9yZW1vdGVzMmNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xY2RhMTlmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9yZW1vdGVzMmNvbmZpZy5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKworIyBVc2UgdGhpcyB0b29sIHRvIHJld3JpdGUgeW91ciAuZ2l0L3JlbW90ZXMvIGZpbGVzIGludG8gdGhlIGNvbmZpZy4KKworLiBnaXQtc2gtc2V0dXAKKworaWYgWyAtZCAiJEdJVF9ESVIiL3JlbW90ZXMgXTsgdGhlbgorCWVjaG8gIlJld3JpdGluZyAkR0lUX0RJUi9yZW1vdGVzIiA+JjIKKwllcnJvcj0wCisJIyByZXdyaXRlIGludG8gY29uZmlnCisJeworCQljZCAiJEdJVF9ESVIiL3JlbW90ZXMKKwkJbHMgfCB3aGlsZSByZWFkIGY7IGRvCisJCQluYW1lPSQocHJpbnRmICIkZiIgfCB0ciAtYyAiQS1aYS16MC05LSIgIi4iKQorCQkJc2VkIC1uIFwKKwkJCS1lICJzL15VUkw6WyAJXSpcKC4qXCkkL3JlbW90ZS4kbmFtZS51cmwgXDEgLi9wIiBcCisJCQktZSAicy9eUHVsbDpbIAldKlwoLipcKSQvcmVtb3RlLiRuYW1lLmZldGNoIFwxIF4kIC9wIiBcCisJCQktZSAicy9eUHVzaDpbIAldKlwoLipcKSQvcmVtb3RlLiRuYW1lLnB1c2ggXDEgXiQgL3AiIFwKKwkJCTwgIiRmIgorCQlkb25lCisJCWVjaG8gZG9uZQorCX0gfCB3aGlsZSByZWFkIGtleSB2YWx1ZSByZWdleDsgZG8KKwkJY2FzZSAka2V5IGluCisJCWRvbmUpCisJCQlpZiBbICRlcnJvciA9IDAgXTsgdGhlbgorCQkJCW12ICIkR0lUX0RJUiIvcmVtb3RlcyAiJEdJVF9ESVIiL3JlbW90ZXMub2xkCisJCQlmaSA7OworCQkqKQorCQkJZWNobyAiZ2l0IGNvbmZpZyAka2V5ICIkdmFsdWUiICRyZWdleCIKKwkJCWdpdCBjb25maWcgJGtleSAiJHZhbHVlIiAkcmVnZXggfHwgZXJyb3I9MSA7OworCQllc2FjCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVyZXJlLXRyYWluLnNoIGIvY29udHJpYi9yZXJlcmUtdHJhaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzZiNmZlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcmVyZXJlLXRyYWluLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDgsIE5hbmFrbyBTaGlyYWlzaGkKKyMgUHJpbWUgcmVyZXJlIGRhdGFiYXNlIGZyb20gZXhpc3RpbmcgbWVyZ2UgY29tbWl0cworCittZT1yZXJlcmUtdHJhaW4KK1VTQUdFPSIkbWUgcmV2LWxpc3QtYXJncyIKKworU1VCRElSRUNUT1JZX09LPVllcworT1BUSU9OU19TUEVDPQorLiAkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LXNoLXNldHVwCityZXF1aXJlX3dvcmtfdHJlZQorY2RfdG9fdG9wbGV2ZWwKKworIyBSZW1lbWJlciBvcmlnaW5hbCBicmFuY2gKK2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkgfHwKK29yaWdpbmFsX0hFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8IHsKKwllY2hvID4mMiAiTm90IG9uIGFueSBicmFuY2ggYW5kIG5vIGNvbW1pdCB5ZXQ/IgorCWV4aXQgMQorfQorCitta2RpciAtcCAiJEdJVF9ESVIvcnItY2FjaGUiIHx8IGV4aXQKKworZ2l0IHJldi1saXN0IC0tcGFyZW50cyAiJEAiIHwKK3doaWxlIHJlYWQgY29tbWl0IHBhcmVudDEgb3RoZXJfcGFyZW50cworZG8KKwlpZiB0ZXN0IC16ICIkb3RoZXJfcGFyZW50cyIKKwl0aGVuCisJCSMgU2tpcCBub24tbWVyZ2VzCisJCWNvbnRpbnVlCisJZmkKKwlnaXQgY2hlY2tvdXQgLXEgIiRwYXJlbnQxXjAiCisJaWYgZ2l0IG1lcmdlICRvdGhlcl9wYXJlbnRzID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJIyBDbGVhbmx5IG1lcmdlcworCQljb250aW51ZQorCWZpCisJaWYgdGVzdCAtcyAiJEdJVF9ESVIvTUVSR0VfUlIiCisJdGhlbgorCQlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IkxlYXJuaW5nIGZyb20gJWggJXMiICIkY29tbWl0IgorCQlnaXQgcmVyZXJlCisJCWdpdCBjaGVja291dCAtcSAkY29tbWl0IC0tIC4KKwkJZ2l0IHJlcmVyZQorCWZpCisJZ2l0IHJlc2V0IC1xIC0taGFyZAorZG9uZQorCitpZiB0ZXN0IC16ICIkYnJhbmNoIgordGhlbgorCWdpdCBjaGVja291dCAiJG9yaWdpbmFsX0hFQUQiCitlbHNlCisJZ2l0IGNoZWNrb3V0ICIke2JyYW5jaCNyZWZzL2hlYWRzL30iCitmaQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdGF0cy9naXQtY29tbW9uLWhhc2ggYi9jb250cmliL3N0YXRzL2dpdC1jb21tb24taGFzaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMjdmZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdGF0cy9naXQtY29tbW9uLWhhc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisKKyMgVGhpcyBzY3JpcHQgZGlzcGxheXMgdGhlIGRpc3RyaWJ1dGlvbiBvZiBsb25nZXN0IGNvbW1vbiBoYXNoIHByZWZpeGVzLgorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgbWluaW11bSBwcmVmaXggbGVuZ3RoIHRvIHVzZQorIyBmb3Igb2JqZWN0IG5hbWVzIHRvIGJlIHVuaXF1ZS4KKworZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCB8IHNvcnQgfCBwZXJsIC1sbmUgJworICBzdWJzdHIoJF8sIDQwKSA9ICIiOworICAjIHVuY29tbWVudCBuZXh0IGxpbmUgZm9yIGEgZGlzdHJpYnV0aW9uIG9mIGJpdHMgaW5zdGVhZCBvZiBoZXggY2hhcnMKKyAgIyAkXyA9IHVucGFjaygiQioiLHBhY2soIkgqIiwkXykpOworICBpZiAoZGVmaW5lZCAkcCkgeworICAgICgkcCBeICRfKSA9fiAvXihcMCopLzsKKyAgICAkY29tbW9uID0gbGVuZ3RoICQxOworICAgIGlmIChkZWZpbmVkICRwY29tbW9uKSB7CisgICAgICAkY291bnRbJHBjb21tb24gPiAkY29tbW9uID8gJHBjb21tb24gOiAkY29tbW9uXSsrOworICAgIH0gZWxzZSB7CisgICAgICAkY291bnRbJGNvbW1vbl0rKzsgIyBmaXJzdCBpdGVtCisgICAgfQorICB9CisgICRwID0gJF87CisgICRwY29tbW9uID0gJGNvbW1vbjsKKyAgRU5EIHsKKyAgICAkY291bnRbJGNvbW1vbl0rKzsgIyBsYXN0IGl0ZW0KKyAgICBwcmludCAiJF86ICRjb3VudFskX10iIGZvciAwLi4kI2NvdW50OworICB9CisnCmRpZmYgLS1naXQgYS9jb250cmliL3N0YXRzL21haWxtYXAucGwgYi9jb250cmliL3N0YXRzL21haWxtYXAucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGI4NTJlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3RhdHMvbWFpbG1hcC5wbApAQCAtMCwwICsxLDM4IEBACisjIS91c3IvYmluL3BlcmwgLXcKK215ICVtYWlsbWFwID0gKCk7CitvcGVuIEksICI8IiwgIi5tYWlsbWFwIjsKK3doaWxlICg8ST4pIHsKKwljaG9tcDsKKwluZXh0IGlmIC9eIy87CisJaWYgKG15ICgkYXV0aG9yLCAkbWFpbCkgPSAvXiguKj8pXHMrPCguKyk+JC8pIHsKKwkJJG1haWxtYXB7JG1haWx9ID0gJGF1dGhvcjsKKwl9Cit9CitjbG9zZSBJOworCitteSAlbWFpbDJhdXRob3IgPSAoKTsKK29wZW4gSSwgImdpdCBsb2cgLS1wcmV0dHk9J2Zvcm1hdDolYWUJJWFuJyB8IjsKK3doaWxlICg8ST4pIHsKKwljaG9tcDsKKwlteSAoJG1haWwsICRhdXRob3IpID0gc3BsaXQoL1x0LywgJF8pOworCW5leHQgaWYgZXhpc3RzICRtYWlsbWFweyRtYWlsfTsKKwkkbWFpbDJhdXRob3J7JG1haWx9IHx8PSB7fTsKKwkkbWFpbDJhdXRob3J7JG1haWx9eyRhdXRob3J9IHx8PSAwOworCSRtYWlsMmF1dGhvcnskbWFpbH17JGF1dGhvcn0rKzsKK30KK2Nsb3NlIEk7CisKK3doaWxlIChteSAoJG1haWwsICRhdXRob3Jjb3VudCkgPSBlYWNoICVtYWlsMmF1dGhvcikgeworCSMgJSRhdXRob3Jjb3VudCBpcyAoJGF1dGhvciA9PiAkY291bnQpOworCSMgc29ydCBhbmQgc2hvdyB0aGUgbmFtZXMgZnJvbSB0aGUgbW9zdCBmcmVxdWVudCBvbmVzLgorCW15IEBuYW1lcyA9IChtYXAgeyAkXy0+WzBdIH0KKwkJc29ydCB7ICRiLT5bMV0gPD0+ICRhLT5bMV0gfQorCQltYXAgeyBbJF8sICRhdXRob3Jjb3VudC0+eyRffV0gfQorCQlrZXlzICUkYXV0aG9yY291bnQpOworCWlmICgxIDwgQG5hbWVzKSB7CisJCWZvciAoQG5hbWVzKSB7CisJCQlwcmludCAiJF8gPCRtYWlsPlxuIjsKKwkJfQorCX0KK30KKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdGF0cy9wYWNraW5mby5wbCBiL2NvbnRyaWIvc3RhdHMvcGFja2luZm8ucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmUxODhjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3RhdHMvcGFja2luZm8ucGwKQEAgLTAsMCArMSwyMTIgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBUaGlzIHRvb2wgd2lsbCBwcmludCB2YWd1ZWx5IHByZXR0eSBpbmZvcm1hdGlvbiBhYm91dCBhIHBhY2suICBJdAorIyBleHBlY3RzIHRoZSBvdXRwdXQgb2YgImdpdCB2ZXJpZnktcGFjayAtdiIgYXMgaW5wdXQgb24gc3RkaW4uCisjCisjICQgZ2l0IHZlcmlmeS1wYWNrIC12IHwgcGFja2luZm8ucGwKKyMKKyMgVGhpcyBwcmludHMgc29tZSBmdWxsLXBhY2sgc3RhdGlzdGljczsgY3VycmVudGx5ICJhbGwgc2l6ZXMiLCAiYWxsCisjIHBhdGggc2l6ZXMiLCAidHJlZSBzaXplcyIsICJ0cmVlIHBhdGggc2l6ZXMiLCBhbmQgImRlcHRocyIuCisjCisjICogImFsbCBzaXplcyIgc3RhdHMgYXJlIGFjcm9zcyBldmVyeSBvYmplY3Qgc2l6ZSBpbiB0aGUgZmlsZTsKKyMgICBmdWxsIHNpemVzIGZvciBiYXNlIG9iamVjdHMsIGFuZCBkZWx0YSBzaXplIGZvciBkZWx0YXMuCisjICogImFsbCBwYXRoIHNpemVzIiBzdGF0cyBhcmUgYWNyb3NzIGFsbCBvYmplY3QncyAicGF0aCBzaXplcyIuCisjICAgQSBwYXRoIHNpemUgaXMgdGhlIHN1bSBvZiB0aGUgc2l6ZSBvZiB0aGUgZGVsdGEgY2hhaW4sIGluY2x1ZGluZyB0aGUKKyMgICBiYXNlIG9iamVjdC4gIEluIG90aGVyIHdvcmRzLCBpdCdzIGhvdyBtYW55IGJ5dGVzIG5lZWQgYmUgcmVhZCB0bworIyAgIHJlYXNzZW1ibGUgdGhlIGZpbGUgZnJvbSBkZWx0YXMuCisjICogInRyZWUgc2l6ZXMiIGFyZSBvYmplY3Qgc2l6ZXMgZ3JvdXBlZCBpbnRvIGRlbHRhIHRyZWVzLgorIyAqICJ0cmVlIHBhdGggc2l6ZXMiIGFyZSBwYXRoIHNpemVzIGdyb3VwZWQgaW50byBkZWx0YSB0cmVlcy4KKyMgKiAiZGVwdGhzIiBzaG91bGQgYmUgb2J2aW91cy4KKyMKKyMgV2hlbiBydW4gYXM6CisjCisjICQgZ2l0IHZlcmlmeS1wYWNrIC12IHwgcGFja2luZm8ucGwgLXRyZWUKKyMKKyMgdGhlIHRyZWVzIG9mIG9iamVjdHMgYXJlIG91dHB1dCBhbG9uZyB3aXRoIHRoZSBzdGF0cy4gIFRoaXMgbG9va3MKKyMgbGlrZToKKyMKKyMgICAwIGNvbW1pdCAwMzEzMjFjNi4uLiAgICAgIDgwMyAgICAgIDgwMworIworIyAgIDAgICBibG9iIDAzMTU2ZjIxLi4uICAgICAxNzY3ICAgICAxNzY3CisjICAgMSAgICBibG9iIGY1MmE5ZDdmLi4uICAgICAgIDEwICAgICAxNzc3CisjICAgMiAgICAgYmxvYiBhOGNjNTczOS4uLiAgICAgICA1MSAgICAgMTgyOAorIyAgIDMgICAgICBibG9iIDY2MGU5MGIxLi4uICAgICAgIDE1ICAgICAxODQzCisjICAgNCAgICAgICBibG9iIDBjYjhlM2JiLi4uICAgICAgIDMzICAgICAxODc2CisjICAgMiAgICAgYmxvYiBlNDg2MDdmMC4uLiAgICAgIDMxMSAgICAgMjA4OAorIyAgICAgIHNpemU6IGNvdW50IDYgdG90YWwgMjE4NyBtaW4gMTAgbWF4IDE3NjcgbWVhbiAzNjQuNTAgbWVkaWFuIDUxIHN0ZF9kZXYgNjM1Ljg1CisjIHBhdGggc2l6ZTogY291bnQgNiB0b3RhbCAxMTE3OSBtaW4gMTc2NyBtYXggMjA4OCBtZWFuIDE4NjMuMTcgbWVkaWFuIDE4NDMgc3RkX2RldiAxMDcuMjYKKyMKKyMgVGhlIGZpcnN0IG51bWJlciBhZnRlciB0aGUgc2hhMSBpcyB0aGUgb2JqZWN0IHNpemUsIHRoZSBzZWNvbmQKKyMgbnVtYmVyIGlzIHRoZSBwYXRoIHNpemUuICBUaGUgc3RhdGlzdGljcyBhcmUgYWNyb3NzIGFsbCBvYmplY3RzIGluCisjIHRoZSBwcmV2aW91cyBkZWx0YSB0cmVlLiAgT2J2aW91c2x5IHRoZXkgYXJlIG9taXR0ZWQgZm9yIHRyZWVzIG9mCisjIG9uZSBvYmplY3QuCisjCisjIFdoZW4gcnVuIGFzOgorIworIyAkIGdpdCB2ZXJpZnktcGFjayAtdiB8IHBhY2tpbmZvLnBsIC10cmVlIC1maWxlbmFtZXMKKyMKKyMgaXQgYWRkcyBmaWxlbmFtZXMgdG8gdGhlIHRyZWUuICBHZXR0aW5nIHRoaXMgaW5mb3JtYXRpb24gaXMgc2xvdzoKKyMKKyMgICAwICAgYmxvYiAwMzE1NmYyMS4uLiAgICAgMTc2NyAgICAgMTc2NyBEb2N1bWVudGF0aW9uL2dpdC1sb3N0LWZvdW5kLnR4dCBAIHRhZ3MvdjEuMi4wfjE0MgorIyAgIDEgICAgYmxvYiBmNTJhOWQ3Zi4uLiAgICAgICAxMCAgICAgMTc3NyBEb2N1bWVudGF0aW9uL2dpdC1sb3N0LWZvdW5kLnR4dCBAIHRhZ3MvdjEuNS4wLXJjMX43NAorIyAgIDIgICAgIGJsb2IgYThjYzU3MzkuLi4gICAgICAgNTEgICAgIDE4MjggRG9jdW1lbnRhdGlvbi9naXQtbG9zdCtmb3VuZC50eHQgQCB0YWdzL3YwLjk5LjloXjAKKyMgICAzICAgICAgYmxvYiA2NjBlOTBiMS4uLiAgICAgICAxNSAgICAgMTg0MyBEb2N1bWVudGF0aW9uL2dpdC1sb3N0K2ZvdW5kLnR4dCBAIG1hc3Rlcn4zMjIyXjJ+MgorIyAgIDQgICAgICAgYmxvYiAwY2I4ZTNiYi4uLiAgICAgICAzMyAgICAgMTg3NiBEb2N1bWVudGF0aW9uL2dpdC1sb3N0K2ZvdW5kLnR4dCBAIG1hc3Rlcn4zMjIyXjJ+MworIyAgIDIgICAgIGJsb2IgZTQ4NjA3ZjAuLi4gICAgICAzMTEgICAgIDIwODggRG9jdW1lbnRhdGlvbi9naXQtbG9zdC1mb3VuZC50eHQgQCB0YWdzL3YxLjUuMi1yYzN+NAorIyAgICAgIHNpemU6IGNvdW50IDYgdG90YWwgMjE4NyBtaW4gMTAgbWF4IDE3NjcgbWVhbiAzNjQuNTAgbWVkaWFuIDUxIHN0ZF9kZXYgNjM1Ljg1CisjIHBhdGggc2l6ZTogY291bnQgNiB0b3RhbCAxMTE3OSBtaW4gMTc2NyBtYXggMjA4OCBtZWFuIDE4NjMuMTcgbWVkaWFuIDE4NDMgc3RkX2RldiAxMDcuMjYKKyMKKyMgV2hlbiBydW4gYXM6CisjCisjICQgZ2l0IHZlcmlmeS1wYWNrIC12IHwgcGFja2luZm8ucGwgLWR1bXAKKyMKKyMgaXQgcHJpbnRzIG91dCAic2hhMSBzaXplIHBhdGhzaXplIGRlcHRoIiBmb3IgZWFjaCBzaGExIGluIGxleGljYWwKKyMgb3JkZXIuCisjCisjIDAwMDA3OWEyZWFlZjE3YjdlYWU3MGUxZjBmNjM1NTU3ZWE2N2I2NDQgMzAgNDcyIDcKKyMgMDAwMTNjYWZlNjk4MDQxMWFhNmZkZDk0MDc4NDkxN2I1ZmY1MGYwYSA0NCAxNTQyIDQKKyMgMDAwMTgyZWFjZjk5Y2RlMjdkNTkxNmFhNDE1OTIxOTI0YjgyOTcyYyA0OTkgNDk5IDAKKyMgLi4uCisjCisjIFRoaXMgaXMgaGFuZHkgZm9yIGNvbXBhcmluZyB0d28gcGFja3MuICBBZGRpbmcgIi1maWxlbmFtZXMiIHdpbGwgYWRkCisjIGZpbGVuYW1lcywgYXMgcGVyICItdHJlZSAtZmlsZW5hbWVzIiBhYm92ZS4KKwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKK215ICRmaWxlbmFtZXMgPSAwOworbXkgJHRyZWUgPSAwOworbXkgJGR1bXAgPSAwOworR2V0T3B0aW9ucygidHJlZSIgPT4gXCR0cmVlLAorICAgICAgICAgICAiZmlsZW5hbWVzIiA9PiBcJGZpbGVuYW1lcywKKyAgICAgICAgICAgImR1bXAiID0+IFwkZHVtcCk7CisKK215ICVwYXJlbnRzOworbXkgJWNoaWxkcmVuOworbXkgJXNpemVzOworbXkgQHJvb3RzOworbXkgJXBhdGhzOworbXkgJXR5cGVzOworbXkgQGNvbW1pdHM7CitteSAlbmFtZXM7CitteSAlZGVwdGhzOworbXkgQGRlcHRoczsKKword2hpbGUgKDxTVERJTj4pIHsKKyAgICBteSAoJHNoYTEsICR0eXBlLCAkc2l6ZSwgJHNwYWNlLCAkb2Zmc2V0LCAkZGVwdGgsICRwYXJlbnQpID0gc3BsaXQoL1xzKy8sICRfKTsKKyAgICBuZXh0IHVubGVzcyAoJHNoYTEgPX4gL15bMC05YS1mXXs0MH0kLyk7CisgICAgJGRlcHRoc3skc2hhMX0gPSAkZGVwdGggfHwgMDsKKyAgICBwdXNoKEBkZXB0aHMsICRkZXB0aCB8fCAwKTsKKyAgICBwdXNoKEBjb21taXRzLCAkc2hhMSkgaWYgKCR0eXBlIGVxICdjb21taXQnKTsKKyAgICBwdXNoKEByb290cywgJHNoYTEpIHVubGVzcyAkcGFyZW50OworICAgICRwYXJlbnRzeyRzaGExfSA9ICRwYXJlbnQ7CisgICAgJHR5cGVzeyRzaGExfSA9ICR0eXBlOworICAgIHB1c2goQHskY2hpbGRyZW57JHBhcmVudH19LCAkc2hhMSk7CisgICAgJHNpemVzeyRzaGExfSA9ICRzaXplOworfQorCitpZiAoJGZpbGVuYW1lcyAmJiAoJHRyZWUgfHwgJGR1bXApKSB7CisgICAgb3BlbihOQU1FUywgImdpdCBuYW1lLXJldiAtLWFsbHwiKTsKKyAgICB3aGlsZSAoPE5BTUVTPikgeworICAgICAgICBpZiAoL14oXFMrKVxzKyguKikkLykgeworICAgICAgICAgICAgbXkgKCRzaGExLCAkbmFtZSkgPSAoJDEsICQyKTsKKyAgICAgICAgICAgICRuYW1lc3skc2hhMX0gPSAkbmFtZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZSBOQU1FUzsKKworICAgIGZvciBteSAkY29tbWl0IChAY29tbWl0cykgeworICAgICAgICBteSAkbmFtZSA9ICRuYW1lc3skY29tbWl0fTsKKyAgICAgICAgb3BlbihUUkVFLCAiZ2l0IGxzLXRyZWUgLXQgLXIgJGNvbW1pdHwiKTsKKyAgICAgICAgcHJpbnQgU1RERVJSICJQbHVtYmluZyB0cmVlICRuYW1lXG4iOworICAgICAgICB3aGlsZSAoPFRSRUU+KSB7CisgICAgICAgICAgICBpZiAoL14oXFMrKVxzKyhcUyspXHMrKFxTKylccysoLiopJC8pIHsKKyAgICAgICAgICAgICAgICBteSAoJG1vZGUsICR0eXBlLCAkc2hhMSwgJHBhdGgpID0gKCQxLCAkMiwgJDMsICQ0KTsKKyAgICAgICAgICAgICAgICAkcGF0aHN7JHNoYTF9ID0gIiRwYXRoIEAgJG5hbWUiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNsb3NlIFRSRUU7CisgICAgfQorfQorCitzdWIgc3RhdHMgeworICAgIG15IEBkYXRhID0gc29ydCB7JGEgPD0+ICRifSBAXzsKKyAgICBteSAkbWluID0gJGRhdGFbMF07CisgICAgbXkgJG1heCA9ICRkYXRhWyQjZGF0YV07CisgICAgbXkgJHRvdGFsID0gMDsKKyAgICBteSAkY291bnQgPSBzY2FsYXIgQGRhdGE7CisgICAgZm9yIG15ICRkYXR1bSAoQGRhdGEpIHsKKyAgICAgICAgJHRvdGFsICs9ICRkYXR1bTsKKyAgICB9CisgICAgbXkgJG1lYW4gPSAkdG90YWwgLyAkY291bnQ7CisgICAgbXkgJG1lZGlhbiA9ICRkYXRhW2ludChAZGF0YSAvIDIpXTsKKyAgICBteSAkZGlmZl9zdW0gPSAwOworICAgIGZvciBteSAkZGF0dW0gKEBkYXRhKSB7CisgICAgICAgICRkaWZmX3N1bSArPSAoJGRhdHVtIC0gJG1lYW4pKioyOworICAgIH0KKyAgICBteSAkc3RkX2RldiA9IHNxcnQoJGRpZmZfc3VtIC8gJGNvdW50KTsKKyAgICByZXR1cm4gKCRjb3VudCwgJHRvdGFsLCAkbWluLCAkbWF4LCAkbWVhbiwgJG1lZGlhbiwgJHN0ZF9kZXYpOworfQorCitzdWIgcHJpbnRfc3RhdHMgeworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgKCRjb3VudCwgJHRvdGFsLCAkbWluLCAkbWF4LCAkbWVhbiwgJG1lZGlhbiwgJHN0ZF9kZXYpID0gc3RhdHMoQF8pOworICAgIHByaW50ZigiJXM6IGNvdW50ICVzIHRvdGFsICVzIG1pbiAlcyBtYXggJXMgbWVhbiAlLjJmIG1lZGlhbiAlcyBzdGRfZGV2ICUuMmZcbiIsCisgICAgICAgICAgICRuYW1lLCAkY291bnQsICR0b3RhbCwgJG1pbiwgJG1heCwgJG1lYW4sICRtZWRpYW4sICRzdGRfZGV2KTsKK30KKworbXkgQHNpemVzOworbXkgQHBhdGhfc2l6ZXM7CitteSBAYWxsX3NpemVzOworbXkgQGFsbF9wYXRoX3NpemVzOworbXkgJXBhdGhfc2l6ZXM7CisKK3N1YiBkaWcgeworICAgIG15ICgkc2hhMSwgJGRlcHRoLCAkcGF0aF9zaXplKSA9IEBfOworICAgICRwYXRoX3NpemUgKz0gJHNpemVzeyRzaGExfTsKKyAgICBwdXNoKEBzaXplcywgJHNpemVzeyRzaGExfSk7CisgICAgcHVzaChAYWxsX3NpemVzLCAkc2l6ZXN7JHNoYTF9KTsKKyAgICBwdXNoKEBwYXRoX3NpemVzLCAkcGF0aF9zaXplKTsKKyAgICBwdXNoKEBhbGxfcGF0aF9zaXplcywgJHBhdGhfc2l6ZSk7CisgICAgJHBhdGhfc2l6ZXN7JHNoYTF9ID0gJHBhdGhfc2l6ZTsKKyAgICBpZiAoJHRyZWUpIHsKKyAgICAgICAgcHJpbnRmKCIlM2QlcyAlNnMgJXMgJThkICU4ZCAlc1xuIiwKKyAgICAgICAgICAgICAgICRkZXB0aCwgKCIgIiB4ICRkZXB0aCksICR0eXBlc3skc2hhMX0sCisgICAgICAgICAgICAgICAkc2hhMSwgJHNpemVzeyRzaGExfSwgJHBhdGhfc2l6ZSwgJHBhdGhzeyRzaGExfSk7CisgICAgfQorICAgIGZvciBteSAkY2hpbGQgKEB7JGNoaWxkcmVueyRzaGExfX0pIHsKKyAgICAgICAgZGlnKCRjaGlsZCwgJGRlcHRoICsgMSwgJHBhdGhfc2l6ZSk7CisgICAgfQorfQorCitteSBAdHJlZV9zaXplczsKK215IEB0cmVlX3BhdGhfc2l6ZXM7CisKK2ZvciBteSAkcm9vdCAoQHJvb3RzKSB7CisgICAgdW5kZWYgQHNpemVzOworICAgIHVuZGVmIEBwYXRoX3NpemVzOworICAgIGRpZygkcm9vdCwgMCwgMCk7CisgICAgbXkgKCRhYSwgJHN6X3RvdGFsKSA9IHN0YXRzKEBzaXplcyk7CisgICAgbXkgKCRiYiwgJHBzel90b3RhbCkgPSBzdGF0cyhAcGF0aF9zaXplcyk7CisgICAgcHVzaChAdHJlZV9zaXplcywgJHN6X3RvdGFsKTsKKyAgICBwdXNoKEB0cmVlX3BhdGhfc2l6ZXMsICRwc3pfdG90YWwpOworICAgIGlmICgkdHJlZSkgeworICAgICAgICBpZiAoQHNpemVzID4gMSkgeworICAgICAgICAgICAgcHJpbnRfc3RhdHMoIiAgICAgc2l6ZSIsIEBzaXplcyk7CisgICAgICAgICAgICBwcmludF9zdGF0cygicGF0aCBzaXplIiwgQHBhdGhfc2l6ZXMpOworICAgICAgICB9CisgICAgICAgIHByaW50ICJcbiI7CisgICAgfQorfQorCitpZiAoJGR1bXApIHsKKyAgICBmb3IgbXkgJHNoYTEgKHNvcnQga2V5cyAlc2l6ZXMpIHsKKyAgICAgICAgcHJpbnQgIiRzaGExICRzaXplc3skc2hhMX0gJHBhdGhfc2l6ZXN7JHNoYTF9ICRkZXB0aHN7JHNoYTF9ICRwYXRoc3skc2hhMX1cbiI7CisgICAgfQorfSBlbHNlIHsKKyAgICBwcmludF9zdGF0cygiICAgICAgYWxsIHNpemVzIiwgQGFsbF9zaXplcyk7CisgICAgcHJpbnRfc3RhdHMoIiBhbGwgcGF0aCBzaXplcyIsIEBhbGxfcGF0aF9zaXplcyk7CisgICAgcHJpbnRfc3RhdHMoIiAgICAgdHJlZSBzaXplcyIsIEB0cmVlX3NpemVzKTsKKyAgICBwcmludF9zdGF0cygidHJlZSBwYXRoIHNpemVzIiwgQHRyZWVfcGF0aF9zaXplcyk7CisgICAgcHJpbnRfc3RhdHMoIiAgICAgICAgIGRlcHRocyIsIEBkZXB0aHMpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlLy5naXRpZ25vcmUgYi9jb250cmliL3N1YnRyZWUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc3YzlkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlLy5naXRpZ25vcmUKQEAgLTAsMCArMSw1IEBACisqfgorZ2l0LXN1YnRyZWUueG1sCitnaXQtc3VidHJlZS4xCittYWlubGluZQorc3VicHJvagpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL0NPUFlJTkcgYi9jb250cmliL3N1YnRyZWUvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTExOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL0NPUFlJTkcKQEAgLTAsMCArMSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL0lOU1RBTEwgYi9jb250cmliL3N1YnRyZWUvSU5TVEFMTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWIwY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL0lOU1RBTEwKQEAgLTAsMCArMSwyOCBAQAorSE9XIFRPIElOU1RBTEwgZ2l0LXN1YnRyZWUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpcnN0LCBidWlsZCBmcm9tIHRoZSB0b3Agc291cmNlIGRpcmVjdG9yeS4KKworVGhlbiwgaW4gY29udHJpYi9zdWJ0cmVlLCBydW46CisKKyAgbWFrZQorICBtYWtlIGluc3RhbGwKKyAgbWFrZSBpbnN0YWxsLWRvYworCitJZiB5b3UgdXNlZCBjb25maWd1cmUgdG8gZG8gdGhlIG1haW4gYnVpbGQgdGhlIGdpdC1zdWJ0cmVlIGJ1aWxkIHdpbGwKK3BpY2sgdXAgdGhvc2Ugc2V0dGluZ3MuICBJZiBub3QsIHlvdSB3aWxsIGxpa2VseSBoYXZlIHRvIHByb3ZpZGUgYQordmFsdWUgZm9yIHByZWZpeDoKKworICBtYWtlIHByZWZpeD08c29tZSBkaXI+CisgIG1ha2UgcHJlZml4PTxzb21lIGRpcj4gaW5zdGFsbAorICBtYWtlIHByZWZpeD08c29tZSBkaXI+IGluc3RhbGwtZG9jCisKK1RvIHJ1biB0ZXN0cyBmaXJzdCBjb3B5IGdpdC1zdWJ0cmVlIHRvIHRoZSBtYWluIGJ1aWxkIGFyZWEgc28gdGhlCituZXdseS1idWlsdCBnaXQgY2FuIGZpbmQgaXQ6CisKKyAgY3AgZ2l0LXN1YnRyZWUgLi4vLi4KKworVGhlbjoKKworICBtYWtlIHRlc3QKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL01ha2VmaWxlIGIvY29udHJpYi9zdWJ0cmVlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Y2RkNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvTWFrZWZpbGUKQEAgLTAsMCArMSw1MiBAQAorLWluY2x1ZGUgLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi9jb25maWcubWFrCisKK3ByZWZpeCA/PSAvdXNyL2xvY2FsCittYW5kaXIgPz0gJChwcmVmaXgpL3NoYXJlL21hbgorbGliZXhlY2RpciA/PSAkKHByZWZpeCkvbGliZXhlYy9naXQtY29yZQorZ2l0ZGlyID89ICQoc2hlbGwgZ2l0IC0tZXhlYy1wYXRoKQorbWFuMWRpciA/PSAkKG1hbmRpcikvbWFuMQorCitnaXR2ZXIgPz0gJCh3b3JkIDMsJChzaGVsbCBnaXQgLS12ZXJzaW9uKSkKKworIyB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYSAnc3RhbmRhcmQnIGJzZC10eXBlIGluc3RhbGwgcHJvZ3JhbQorSU5TVEFMTCA/PSBpbnN0YWxsCisKK0FTQ0lJRE9DX0NPTkYgICAgICA9IC4uLy4uL0RvY3VtZW50YXRpb24vYXNjaWlkb2MuY29uZgorTUFOUEFHRV9OT1JNQUxfWFNMID0gIC4uLy4uL0RvY3VtZW50YXRpb24vbWFucGFnZS1ub3JtYWwueHNsCisKK0dJVF9TVUJUUkVFX1NIIDo9IGdpdC1zdWJ0cmVlLnNoCitHSVRfU1VCVFJFRSAgICA6PSBnaXQtc3VidHJlZQorCitHSVRfU1VCVFJFRV9ET0MgOj0gZ2l0LXN1YnRyZWUuMQorR0lUX1NVQlRSRUVfWE1MIDo9IGdpdC1zdWJ0cmVlLnhtbAorR0lUX1NVQlRSRUVfVFhUIDo9IGdpdC1zdWJ0cmVlLnR4dAorCithbGw6ICQoR0lUX1NVQlRSRUUpCisKKyQoR0lUX1NVQlRSRUUpOiAkKEdJVF9TVUJUUkVFX1NIKQorCWNwICQ8ICRAICYmIGNobW9kICt4ICRACisKK2RvYzogJChHSVRfU1VCVFJFRV9ET0MpCisKK2luc3RhbGw6ICQoR0lUX1NVQlRSRUUpCisJJChJTlNUQUxMKSAtbSA3NTUgJChHSVRfU1VCVFJFRSkgJChsaWJleGVjZGlyKQorCitpbnN0YWxsLWRvYzogaW5zdGFsbC1tYW4KKworaW5zdGFsbC1tYW46ICQoR0lUX1NVQlRSRUVfRE9DKQorCSQoSU5TVEFMTCkgLW0gNjQ0ICReICQobWFuMWRpcikKKworJChHSVRfU1VCVFJFRV9ET0MpOiAkKEdJVF9TVUJUUkVFX1hNTCkKKwl4bWx0byAtbSAkKE1BTlBBR0VfTk9STUFMX1hTTCkgIG1hbiAkXgorCiskKEdJVF9TVUJUUkVFX1hNTCk6ICQoR0lUX1NVQlRSRUVfVFhUKQorCWFzY2lpZG9jIC1iIGRvY2Jvb2sgLWQgbWFucGFnZSAtZiAkKEFTQ0lJRE9DX0NPTkYpIFwKKwkJLWFnaXRfdmVyc2lvbj0kKGdpdHZlcikgJF4KKwordGVzdDoKKwkkKE1BS0UpIC1DIHQvIHRlc3QKKworY2xlYW46CisJcm0gLWYgKn4gKi54bWwgKi5odG1sICouMQorCXJtIC1yZiBzdWJwcm9qIG1haW5saW5lCmRpZmYgLS1naXQgYS9jb250cmliL3N1YnRyZWUvUkVBRE1FIGIvY29udHJpYi9zdWJ0cmVlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjg2YjRhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL1JFQURNRQpAQCAtMCwwICsxLDggQEAKKworUGxlYXNlIHJlYWQgZ2l0LXN1YnRyZWUudHh0IGZvciBkb2N1bWVudGF0aW9uLgorCitQbGVhc2UgZG9uJ3QgY29udGFjdCBtZSB1c2luZyBnaXRodWIgbWFpbDsgaXQncyBzbG93LCB1Z2x5LCBhbmQgd29yc3Qgb2YKK2FsbCwgcmVkdW5kYW50LiBFbWFpbCBtZSBpbnN0ZWFkIGF0IGFwZW53YXJyQGdtYWlsLmNvbSBhbmQgSSdsbCBiZSBoYXBweSB0bworaGVscC4KKworQXZlcnkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS5zaCBiL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MjBjNjY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL2dpdC1zdWJ0cmVlLnNoCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS50eHQgYi9jb250cmliL3N1YnRyZWUvZ2l0LXN1YnRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNDRmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvZ2l0LXN1YnRyZWUudHh0CkBAIC0wLDAgKzEsMzY2IEBACitnaXQtc3VidHJlZSgxKQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN1YnRyZWUgLSBNZXJnZSBzdWJ0cmVlcyB0b2dldGhlciBhbmQgc3BsaXQgcmVwb3NpdG9yeSBpbnRvIHN1YnRyZWVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN1YnRyZWUnIGFkZCAgIC1QIDxwcmVmaXg+IDxjb21taXQ+CisnZ2l0IHN1YnRyZWUnIHB1bGwgIC1QIDxwcmVmaXg+IDxyZXBvc2l0b3J5PiA8cmVmc3BlYy4uLj4KKydnaXQgc3VidHJlZScgcHVzaCAgLVAgPHByZWZpeD4gPHJlcG9zaXRvcnk+IDxyZWZzcGVjLi4uPgorJ2dpdCBzdWJ0cmVlJyBtZXJnZSAtUCA8cHJlZml4PiA8Y29tbWl0PgorJ2dpdCBzdWJ0cmVlJyBzcGxpdCAtUCA8cHJlZml4PiBbT1BUSU9OU10gWzxjb21taXQ+XQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU3VidHJlZXMgYWxsb3cgc3VicHJvamVjdHMgdG8gYmUgaW5jbHVkZWQgd2l0aGluIGEgc3ViZGlyZWN0b3J5CitvZiB0aGUgbWFpbiBwcm9qZWN0LCBvcHRpb25hbGx5IGluY2x1ZGluZyB0aGUgc3VicHJvamVjdCdzCitlbnRpcmUgaGlzdG9yeS4KKworRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBpbmNsdWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgYSBsaWJyYXJ5CithcyBhIHN1YmRpcmVjdG9yeSBvZiB5b3VyIGFwcGxpY2F0aW9uLgorCitTdWJ0cmVlcyBhcmUgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggc3VibW9kdWxlcywgd2hpY2ggYXJlIG1lYW50IGZvcgordGhlIHNhbWUgdGFzay4gVW5saWtlIHN1Ym1vZHVsZXMsIHN1YnRyZWVzIGRvIG5vdCBuZWVkIGFueSBzcGVjaWFsCitjb25zdHJ1Y3Rpb25zIChsaWtlIC5naXRtb2R1bGUgZmlsZXMgb3IgZ2l0bGlua3MpIGJlIHByZXNlbnQgaW4KK3lvdXIgcmVwb3NpdG9yeSwgYW5kIGRvIG5vdCBmb3JjZSBlbmQtdXNlcnMgb2YgeW91cgorcmVwb3NpdG9yeSB0byBkbyBhbnl0aGluZyBzcGVjaWFsIG9yIHRvIHVuZGVyc3RhbmQgaG93IHN1YnRyZWVzCit3b3JrLiBBIHN1YnRyZWUgaXMganVzdCBhIHN1YmRpcmVjdG9yeSB0aGF0IGNhbiBiZQorY29tbWl0dGVkIHRvLCBicmFuY2hlZCwgYW5kIG1lcmdlZCBhbG9uZyB3aXRoIHlvdXIgcHJvamVjdCBpbgorYW55IHdheSB5b3Ugd2FudC4KKworVGhleSBhcmUgYWxzbyBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCB1c2luZyB0aGUgc3VidHJlZSBtZXJnZQorc3RyYXRlZ3kuIFRoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCwgYmVzaWRlcyBtZXJnaW5nCit0aGUgb3RoZXIgcHJvamVjdCBhcyBhIHN1YmRpcmVjdG9yeSwgeW91IGNhbiBhbHNvIGV4dHJhY3QgdGhlCitlbnRpcmUgaGlzdG9yeSBvZiBhIHN1YmRpcmVjdG9yeSBmcm9tIHlvdXIgcHJvamVjdCBhbmQgbWFrZSBpdAoraW50byBhIHN0YW5kYWxvbmUgcHJvamVjdC4gVW5saWtlIHRoZSBzdWJ0cmVlIG1lcmdlIHN0cmF0ZWd5Cit5b3UgY2FuIGFsdGVybmF0ZSBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZXNlCit0d28gb3BlcmF0aW9ucy4gSWYgdGhlIHN0YW5kYWxvbmUgbGlicmFyeSBnZXRzIHVwZGF0ZWQsIHlvdSBjYW4KK2F1dG9tYXRpY2FsbHkgbWVyZ2UgdGhlIGNoYW5nZXMgaW50byB5b3VyIHByb2plY3Q7IGlmIHlvdQordXBkYXRlIHRoZSBsaWJyYXJ5IGluc2lkZSB5b3VyIHByb2plY3QsIHlvdSBjYW4gInNwbGl0IiB0aGUKK2NoYW5nZXMgYmFjayBvdXQgYWdhaW4gYW5kIG1lcmdlIHRoZW0gYmFjayBpbnRvIHRoZSBsaWJyYXJ5Citwcm9qZWN0LgorCitGb3IgZXhhbXBsZSwgaWYgYSBsaWJyYXJ5IHlvdSBtYWRlIGZvciBvbmUgYXBwbGljYXRpb24gZW5kcyB1cCBiZWluZwordXNlZnVsIGVsc2V3aGVyZSwgeW91IGNhbiBleHRyYWN0IGl0cyBlbnRpcmUgaGlzdG9yeSBhbmQgcHVibGlzaAordGhhdCBhcyBpdHMgb3duIGdpdCByZXBvc2l0b3J5LCB3aXRob3V0IGFjY2lkZW50YWxseQoraW50ZXJtaW5nbGluZyB0aGUgaGlzdG9yeSBvZiB5b3VyIGFwcGxpY2F0aW9uIHByb2plY3QuCisKK1tUSVBdCitJbiBvcmRlciB0byBrZWVwIHlvdXIgY29tbWl0IG1lc3NhZ2VzIGNsZWFuLCB3ZSByZWNvbW1lbmQgdGhhdAorcGVvcGxlIHNwbGl0IHRoZWlyIGNvbW1pdHMgYmV0d2VlbiB0aGUgc3VidHJlZXMgYW5kIHRoZSBtYWluCitwcm9qZWN0IGFzIG11Y2ggYXMgcG9zc2libGUuICBUaGF0IGlzLCBpZiB5b3UgbWFrZSBhIGNoYW5nZSB0aGF0CithZmZlY3RzIGJvdGggdGhlIGxpYnJhcnkgYW5kIHRoZSBtYWluIGFwcGxpY2F0aW9uLCBjb21taXQgaXQgaW4KK3R3byBwaWVjZXMuICBUaGF0IHdheSwgd2hlbiB5b3Ugc3BsaXQgdGhlIGxpYnJhcnkgY29tbWl0cyBvdXQKK2xhdGVyLCB0aGVpciBkZXNjcmlwdGlvbnMgd2lsbCBzdGlsbCBtYWtlIHNlbnNlLiAgQnV0IGlmIHRoaXMKK2lzbid0IGltcG9ydGFudCB0byB5b3UsIGl0J3Mgbm90ICpuZWNlc3NhcnkqLiAgZ2l0IHN1YnRyZWUgd2lsbAorc2ltcGx5IGxlYXZlIG91dCB0aGUgbm9uLWxpYnJhcnktcmVsYXRlZCBwYXJ0cyBvZiB0aGUgY29tbWl0Cit3aGVuIGl0IHNwbGl0cyBpdCBvdXQgaW50byB0aGUgc3VicHJvamVjdCBsYXRlci4KKworCitDT01NQU5EUworLS0tLS0tLS0KK2FkZDo6CisJQ3JlYXRlIHRoZSA8cHJlZml4PiBzdWJ0cmVlIGJ5IGltcG9ydGluZyBpdHMgY29udGVudHMKKwlmcm9tIHRoZSBnaXZlbiA8cmVmc3BlYz4gb3IgPHJlcG9zaXRvcnk+IGFuZCByZW1vdGUgPHJlZnNwZWM+LgorCUEgbmV3IGNvbW1pdCBpcyBjcmVhdGVkCWF1dG9tYXRpY2FsbHksIGpvaW5pbmcgdGhlIGltcG9ydGVkCisJcHJvamVjdCdzIGhpc3Rvcnkgd2l0aCB5b3VyIG93bi4gIFdpdGggJy0tc3F1YXNoJywgaW1wb3J0cworCW9ubHkgYSBzaW5nbGUgY29tbWl0IGZyb20gdGhlIHN1YnByb2plY3QsIHJhdGhlciB0aGFuIGl0cworCWVudGlyZSBoaXN0b3J5LgorCittZXJnZTo6CisJTWVyZ2UgcmVjZW50IGNoYW5nZXMgdXAgdG8gPGNvbW1pdD4gaW50byB0aGUgPHByZWZpeD4KKwlzdWJ0cmVlLiAgQXMgd2l0aCBub3JtYWwgJ2dpdCBtZXJnZScsIHRoaXMgZG9lc24ndAorCXJlbW92ZSB5b3VyIG93biBsb2NhbCBjaGFuZ2VzOyBpdCBqdXN0IG1lcmdlcyB0aG9zZQorCWNoYW5nZXMgaW50byB0aGUgbGF0ZXN0IDxjb21taXQ+LiAgV2l0aCAnLS1zcXVhc2gnLAorCWNyZWF0ZXMgb25seSBvbmUgY29tbWl0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBjaGFuZ2VzLAorCXJhdGhlciB0aGFuIG1lcmdpbmcgaW4gdGhlIGVudGlyZSBoaXN0b3J5LgorCisJSWYgeW91IHVzZSAnLS1zcXVhc2gnLCB0aGUgbWVyZ2UgZGlyZWN0aW9uIGRvZXNuJ3QKKwlhbHdheXMgaGF2ZSB0byBiZSBmb3J3YXJkOyB5b3UgY2FuIHVzZSB0aGlzIGNvbW1hbmQgdG8KKwlnbyBiYWNrIGluIHRpbWUgZnJvbSB2Mi41IHRvIHYyLjQsIGZvciBleGFtcGxlLiAgSWYgeW91cgorCW1lcmdlIGludHJvZHVjZXMgYSBjb25mbGljdCwgeW91IGNhbiByZXNvbHZlIGl0IGluIHRoZQorCXVzdWFsIHdheXMuCisJCitwdWxsOjoKKwlFeGFjdGx5IGxpa2UgJ21lcmdlJywgYnV0IHBhcmFsbGVscyAnZ2l0IHB1bGwnIGluIHRoYXQKKwlpdCBmZXRjaGVzIHRoZSBnaXZlbiBjb21taXQgZnJvbSB0aGUgc3BlY2lmaWVkIHJlbW90ZQorCXJlcG9zaXRvcnkuCisJCitwdXNoOjoKKwlEb2VzIGEgJ3NwbGl0JyAoc2VlIGFib3ZlKSB1c2luZyB0aGUgPHByZWZpeD4gc3VwcGxpZWQKKwlhbmQgdGhlbiBkb2VzIGEgJ2dpdCBwdXNoJyB0byBwdXNoIHRoZSByZXN1bHQgdG8gdGhlIAorCXJlcG9zaXRvcnkgYW5kIHJlZnNwZWMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHVzaCB5b3VyCisJc3VidHJlZSB0byBkaWZmZXJlbnQgYnJhbmNoZXMgb2YgdGhlIHJlbW90ZSByZXBvc2l0b3J5LgorCitzcGxpdDo6CisJRXh0cmFjdCBhIG5ldywgc3ludGhldGljIHByb2plY3QgaGlzdG9yeSBmcm9tIHRoZQorCWhpc3Rvcnkgb2YgdGhlIDxwcmVmaXg+IHN1YnRyZWUuICBUaGUgbmV3IGhpc3RvcnkKKwlpbmNsdWRlcyBvbmx5IHRoZSBjb21taXRzIChpbmNsdWRpbmcgbWVyZ2VzKSB0aGF0CisJYWZmZWN0ZWQgPHByZWZpeD4sIGFuZCBlYWNoIG9mIHRob3NlIGNvbW1pdHMgbm93IGhhcyB0aGUKKwljb250ZW50cyBvZiA8cHJlZml4PiBhdCB0aGUgcm9vdCBvZiB0aGUgcHJvamVjdCBpbnN0ZWFkCisJb2YgaW4gYSBzdWJkaXJlY3RvcnkuICBUaHVzLCB0aGUgbmV3bHkgY3JlYXRlZCBoaXN0b3J5CisJaXMgc3VpdGFibGUgZm9yIGV4cG9ydCBhcyBhIHNlcGFyYXRlIGdpdCByZXBvc2l0b3J5LgorCQorCUFmdGVyIHNwbGl0dGluZyBzdWNjZXNzZnVsbHksIGEgc2luZ2xlIGNvbW1pdCBpZCBpcworCXByaW50ZWQgdG8gc3Rkb3V0LiAgVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgSEVBRCBvZiB0aGUKKwluZXdseSBjcmVhdGVkIHRyZWUsIHdoaWNoIHlvdSBjYW4gbWFuaXB1bGF0ZSBob3dldmVyIHlvdQorCXdhbnQuCisJCisJUmVwZWF0ZWQgc3BsaXRzIG9mIGV4YWN0bHkgdGhlIHNhbWUgaGlzdG9yeSBhcmUKKwlndWFyYW50ZWVkIHRvIGJlIGlkZW50aWNhbCAoaWUuIHRvIHByb2R1Y2UgdGhlIHNhbWUKKwljb21taXQgaWRzKS4gIEJlY2F1c2Ugb2YgdGhpcywgaWYgeW91IGFkZCBuZXcgY29tbWl0cworCWFuZCB0aGVuIHJlLXNwbGl0LCB0aGUgbmV3IGNvbW1pdHMgd2lsbCBiZSBhdHRhY2hlZCBhcworCWNvbW1pdHMgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHlvdSBnZW5lcmF0ZWQgbGFzdCB0aW1lLAorCXNvICdnaXQgbWVyZ2UnIGFuZCBmcmllbmRzIHdpbGwgd29yayBhcyBleHBlY3RlZC4KKwkKKwlOb3RlIHRoYXQgaWYgeW91IHVzZSAnLS1zcXVhc2gnIHdoZW4geW91IG1lcmdlLCB5b3UKKwlzaG91bGQgdXN1YWxseSBub3QganVzdCAnLS1yZWpvaW4nIHdoZW4geW91IHNwbGl0LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1xOjoKKy0tcXVpZXQ6OgorCVN1cHByZXNzIHVubmVjZXNzYXJ5IG91dHB1dCBtZXNzYWdlcyBvbiBzdGRlcnIuCisKKy1kOjoKKy0tZGVidWc6OgorCVByb2R1Y2UgZXZlbiBtb3JlIHVubmVjZXNzYXJ5IG91dHB1dCBtZXNzYWdlcyBvbiBzdGRlcnIuCisKKy1QIDxwcmVmaXg+OjoKKy0tcHJlZml4PTxwcmVmaXg+OjoKKwlTcGVjaWZ5IHRoZSBwYXRoIGluIHRoZSByZXBvc2l0b3J5IHRvIHRoZSBzdWJ0cmVlIHlvdQorCXdhbnQgdG8gbWFuaXB1bGF0ZS4gIFRoaXMgb3B0aW9uIGlzIG1hbmRhdG9yeQorCWZvciBhbGwgY29tbWFuZHMuCisKKy1tIDxtZXNzYWdlPjo6CistLW1lc3NhZ2U9PG1lc3NhZ2U+OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBhZGQsIG1lcmdlIGFuZCBwdWxsICh1bnN1cmUpLgorCVNwZWNpZnkgPG1lc3NhZ2U+IGFzIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlIG1lcmdlIGNvbW1pdC4KKworCitPUFRJT05TIEZPUiBhZGQsIG1lcmdlLCBwdXNoLCBwdWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLXNxdWFzaDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYWRkLCBtZXJnZSwgcHVzaCBhbmQgcHVsbAorCWNvbW1hbmRzLgorCisJSW5zdGVhZCBvZiBtZXJnaW5nIHRoZSBlbnRpcmUgaGlzdG9yeSBmcm9tIHRoZSBzdWJ0cmVlCisJcHJvamVjdCwgcHJvZHVjZSBvbmx5IGEgc2luZ2xlIGNvbW1pdCB0aGF0IGNvbnRhaW5zIGFsbAorCXRoZSBkaWZmZXJlbmNlcyB5b3Ugd2FudCB0byBtZXJnZSwgYW5kIHRoZW4gbWVyZ2UgdGhhdAorCW5ldyBjb21taXQgaW50byB5b3VyIHByb2plY3QuCisJCisJVXNpbmcgdGhpcyBvcHRpb24gaGVscHMgdG8gcmVkdWNlIGxvZyBjbHV0dGVyLiBQZW9wbGUKKwlyYXJlbHkgd2FudCB0byBzZWUgZXZlcnkgY2hhbmdlIHRoYXQgaGFwcGVuZWQgYmV0d2VlbgorCXYxLjAgYW5kIHYxLjEgb2YgdGhlIGxpYnJhcnkgdGhleSdyZSB1c2luZywgc2luY2Ugbm9uZSBvZiB0aGUKKwlpbnRlcmltIHZlcnNpb25zIHdlcmUgZXZlciBpbmNsdWRlZCBpbiB0aGVpciBhcHBsaWNhdGlvbi4KKwkKKwlVc2luZyAnLS1zcXVhc2gnIGFsc28gaGVscHMgYXZvaWQgcHJvYmxlbXMgd2hlbiB0aGUgc2FtZQorCXN1YnByb2plY3QgaXMgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUKKwlwcm9qZWN0LCBvciBpcyByZW1vdmVkIGFuZCB0aGVuIHJlLWFkZGVkLiAgSW4gc3VjaCBhCisJY2FzZSwgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNvbWJpbmUgdGhlIGhpc3RvcmllcworCWFueXdheSwgc2luY2UgaXQncyB1bmNsZWFyIHdoaWNoIHBhcnQgb2YgdGhlIGhpc3RvcnkKKwliZWxvbmdzIHRvIHdoaWNoIHN1YnRyZWUuCisJCisJRnVydGhlcm1vcmUsIHdpdGggJy0tc3F1YXNoJywgeW91IGNhbiBzd2l0Y2ggYmFjayBhbmQKKwlmb3J0aCBiZXR3ZWVuIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBhIHN1YnRyZWUsIHJhdGhlcgorCXRoYW4gc3RyaWN0bHkgZm9yd2FyZC4gICdnaXQgc3VidHJlZSBtZXJnZSAtLXNxdWFzaCcKKwlhbHdheXMgYWRqdXN0cyB0aGUgc3VidHJlZSB0byBtYXRjaCB0aGUgZXhhY3RseQorCXNwZWNpZmllZCBjb21taXQsIGV2ZW4gaWYgZ2V0dGluZyB0byB0aGF0IGNvbW1pdCB3b3VsZAorCXJlcXVpcmUgdW5kb2luZyBzb21lIGNoYW5nZXMgdGhhdCB3ZXJlIGFkZGVkIGVhcmxpZXIuCisJCisJV2hldGhlciBvciBub3QgeW91IHVzZSAnLS1zcXVhc2gnLCBjaGFuZ2VzIG1hZGUgaW4geW91cgorCWxvY2FsIHJlcG9zaXRvcnkgcmVtYWluIGludGFjdCBhbmQgY2FuIGJlIGxhdGVyIHNwbGl0CisJYW5kIHNlbmQgdXBzdHJlYW0gdG8gdGhlIHN1YnByb2plY3QuCisKKworT1BUSU9OUyBGT1Igc3BsaXQKKy0tLS0tLS0tLS0tLS0tLS0tCistLWFubm90YXRlPTxhbm5vdGF0aW9uPjo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHNwbGl0IGNvbW1hbmQuCisKKwlXaGVuIGdlbmVyYXRpbmcgc3ludGhldGljIGhpc3RvcnksIGFkZCA8YW5ub3RhdGlvbj4gYXMgYQorCXByZWZpeCB0byBlYWNoIGNvbW1pdCBtZXNzYWdlLiAgU2luY2Ugd2UncmUgY3JlYXRpbmcgbmV3CisJY29tbWl0cyB3aXRoIHRoZSBzYW1lIGNvbW1pdCBtZXNzYWdlLCBidXQgcG9zc2libHkKKwlkaWZmZXJlbnQgY29udGVudCwgZnJvbSB0aGUgb3JpZ2luYWwgY29tbWl0cywgdGhpcyBjYW4gaGVscAorCXRvIGRpZmZlcmVudGlhdGUgdGhlbSBhbmQgYXZvaWQgY29uZnVzaW9uLgorCQorCVdoZW5ldmVyIHlvdSBzcGxpdCwgeW91IG5lZWQgdG8gdXNlIHRoZSBzYW1lCisJPGFubm90YXRpb24+LCBvciBlbHNlIHlvdSBkb24ndCBoYXZlIGEgZ3VhcmFudGVlIHRoYXQKKwl0aGUgbmV3IHJlLWNyZWF0ZWQgaGlzdG9yeSB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgb2xkCisJb25lLiAgVGhhdCB3aWxsIHByZXZlbnQgbWVyZ2luZyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiAKKwlnaXQgc3VidHJlZSB0cmllcyB0byBtYWtlIGl0IHdvcmsgYW55d2F5LCBwYXJ0aWN1bGFybHkKKwlpZiB5b3UgdXNlIC0tcmVqb2luLCBidXQgaXQgbWF5IG5vdCBhbHdheXMgYmUgZWZmZWN0aXZlLgorCistYiA8YnJhbmNoPjo6CistLWJyYW5jaD08YnJhbmNoPjo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHNwbGl0IGNvbW1hbmQuCisKKwlBZnRlciBnZW5lcmF0aW5nIHRoZSBzeW50aGV0aWMgaGlzdG9yeSwgY3JlYXRlIGEgbmV3CisJYnJhbmNoIGNhbGxlZCA8YnJhbmNoPiB0aGF0IGNvbnRhaW5zIHRoZSBuZXcgaGlzdG9yeS4gCisJVGhpcyBpcyBzdWl0YWJsZSBmb3IgaW1tZWRpYXRlIHB1c2hpbmcgdXBzdHJlYW0uIAorCTxicmFuY2g+IG11c3Qgbm90IGFscmVhZHkgZXhpc3QuCisKKy0taWdub3JlLWpvaW5zOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgc3BsaXQgY29tbWFuZC4KKworCUlmIHlvdSB1c2UgJy0tcmVqb2luJywgZ2l0IHN1YnRyZWUgYXR0ZW1wdHMgdG8gb3B0aW1pemUKKwlpdHMgaGlzdG9yeSByZWNvbnN0cnVjdGlvbiB0byBnZW5lcmF0ZSBvbmx5IHRoZSBuZXcKKwljb21taXRzIHNpbmNlIHRoZSBsYXN0ICctLXJlam9pbicuICAnLS1pZ25vcmUtam9pbicKKwlkaXNhYmxlcyB0aGlzIGJlaGF2aW91ciwgZm9yY2luZyBpdCB0byByZWdlbmVyYXRlIHRoZQorCWVudGlyZSBoaXN0b3J5LiAgSW4gYSBsYXJnZSBwcm9qZWN0LCB0aGlzIGNhbiB0YWtlIGEKKwlsb25nIHRpbWUuCisKKy0tb250bz08b250bz46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBzcGxpdCBjb21tYW5kLgorCisJSWYgeW91ciBzdWJ0cmVlIHdhcyBvcmlnaW5hbGx5IGltcG9ydGVkIHVzaW5nIHNvbWV0aGluZworCW90aGVyIHRoYW4gZ2l0IHN1YnRyZWUsIGl0cyBoaXN0b3J5IG1heSBub3QgbWF0Y2ggd2hhdAorCWdpdCBzdWJ0cmVlIGlzIGV4cGVjdGluZy4gIEluIHRoYXQgY2FzZSwgeW91IGNhbiBzcGVjaWZ5CisJdGhlIGNvbW1pdCBpZCA8b250bz4gdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QKKwlyZXZpc2lvbiBvZiB0aGUgc3VicHJvamVjdCdzIGhpc3RvcnkgdGhhdCB3YXMgaW1wb3J0ZWQKKwlpbnRvIHlvdXIgcHJvamVjdCwgYW5kIGdpdCBzdWJ0cmVlIHdpbGwgYXR0ZW1wdCB0byBidWlsZAorCWl0cyBoaXN0b3J5IGZyb20gdGhlcmUuCisJCisJSWYgeW91IHVzZWQgJ2dpdCBzdWJ0cmVlIGFkZCcsIHlvdSBzaG91bGQgbmV2ZXIgbmVlZAorCXRoaXMgb3B0aW9uLgorCistLXJlam9pbjo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHNwbGl0IGNvbW1hbmQuCisKKwlBZnRlciBzcGxpdHRpbmcsIG1lcmdlIHRoZSBuZXdseSBjcmVhdGVkIHN5bnRoZXRpYworCWhpc3RvcnkgYmFjayBpbnRvIHlvdXIgbWFpbiBwcm9qZWN0LiAgVGhhdCB3YXksIGZ1dHVyZQorCXNwbGl0cyBjYW4gc2VhcmNoIG9ubHkgdGhlIHBhcnQgb2YgaGlzdG9yeSB0aGF0IGhhcworCWJlZW4gYWRkZWQgc2luY2UgdGhlIG1vc3QgcmVjZW50IC0tcmVqb2luLgorCQorCUlmIHlvdXIgc3BsaXQgY29tbWl0cyBlbmQgdXAgbWVyZ2VkIGludG8gdGhlIHVwc3RyZWFtCisJc3VicHJvamVjdCwgYW5kIHRoZW4geW91IHdhbnQgdG8gZ2V0IHRoZSBsYXRlc3QgdXBzdHJlYW0KKwl2ZXJzaW9uLCB0aGlzIHdpbGwgYWxsb3cgZ2l0J3MgbWVyZ2UgYWxnb3JpdGhtIHRvIG1vcmUKKwlpbnRlbGxpZ2VudGx5IGF2b2lkIGNvbmZsaWN0cyAoc2luY2UgaXQga25vd3MgdGhlc2UKKwlzeW50aGV0aWMgY29tbWl0cyBhcmUgYWxyZWFkeSBwYXJ0IG9mIHRoZSB1cHN0cmVhbQorCXJlcG9zaXRvcnkpLgorCQorCVVuZm9ydHVuYXRlbHksIHVzaW5nIHRoaXMgb3B0aW9uIHJlc3VsdHMgaW4gJ2dpdCBsb2cnCisJc2hvd2luZyBhbiBleHRyYSBjb3B5IG9mIGV2ZXJ5IG5ldyBjb21taXQgdGhhdCB3YXMKKwljcmVhdGVkICh0aGUgb3JpZ2luYWwsIGFuZCB0aGUgc3ludGhldGljIG9uZSkuCisJCisJSWYgeW91IGRvIGFsbCB5b3VyIG1lcmdlcyB3aXRoICctLXNxdWFzaCcsIGRvbid0IHVzZQorCSctLXJlam9pbicgd2hlbiB5b3Ugc3BsaXQsIGJlY2F1c2UgeW91IGRvbid0IHdhbnQgdGhlCisJc3VicHJvamVjdCdzIGhpc3RvcnkgdG8gYmUgcGFydCBvZiB5b3VyIHByb2plY3QgYW55d2F5LgorCisKK0VYQU1QTEUgMS4gQWRkIGNvbW1hbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xldCdzIGFzc3VtZSB0aGF0IHlvdSBoYXZlIGEgbG9jYWwgcmVwb3NpdG9yeSB0aGF0IHlvdSB3b3VsZCBsaWtlCit0byBhZGQgYW4gZXh0ZXJuYWwgdmVuZG9yIGxpYnJhcnkgdG8uIEluIHRoaXMgY2FzZSB3ZSB3aWxsIGFkZCB0aGUKK2dpdC1zdWJ0cmVlIHJlcG9zaXRvcnkgYXMgYSBzdWJkaXJlY3Rvcnkgb2YgeW91ciBhbHJlYWR5IGV4aXN0aW5nCitnaXQtZXh0ZW5zaW9ucyByZXBvc2l0b3J5IGluIH4vZ2l0LWV4dGVuc2lvbnMvOgorCisJJCBnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9Z2l0LXN1YnRyZWUgLS1zcXVhc2ggXAorCQlnaXQ6Ly9naXRodWIuY29tL2FwZW53YXJyL2dpdC1zdWJ0cmVlLmdpdCBtYXN0ZXIKKworJ21hc3RlcicgbmVlZHMgdG8gYmUgYSB2YWxpZCByZW1vdGUgcmVmIGFuZCBjYW4gYmUgYSBkaWZmZXJlbnQgYnJhbmNoCituYW1lCisKK1lvdSBjYW4gb21pdCB0aGUgLS1zcXVhc2ggZmxhZywgYnV0IGRvaW5nIHNvIHdpbGwgaW5jcmVhc2UgdGhlIG51bWJlcgorb2YgY29tbWl0cyB0aGF0IGFyZSBpbmNsZHVlZCBpbiB5b3VyIGxvY2FsIHJlcG9zaXRvcnkuCisKK1dlIG5vdyBoYXZlIGEgfi9naXQtZXh0ZW5zaW9ucy9naXQtc3VidHJlZSBkaXJlY3RvcnkgY29udGFpbmluZyBjb2RlCitmcm9tIHRoZSBtYXN0ZXIgYnJhbmNoIG9mIGdpdDovL2dpdGh1Yi5jb20vYXBlbndhcnIvZ2l0LXN1YnRyZWUuZ2l0CitpbiBvdXIgZ2l0LWV4dGVuc2lvbnMgcmVwb3NpdG9yeS4KKworRVhBTVBMRSAyLiBFeHRyYWN0IGEgc3VidHJlZSB1c2luZyBjb21taXQsIG1lcmdlIGFuZCBwdWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xldCdzIHVzZSB0aGUgcmVwb3NpdG9yeSBmb3IgdGhlIGdpdCBzb3VyY2UgY29kZSBhcyBhbiBleGFtcGxlLgorRmlyc3QsIGdldCB5b3VyIG93biBjb3B5IG9mIHRoZSBnaXQuZ2l0IHJlcG9zaXRvcnk6CisKKwkkIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0IHRlc3QtZ2l0CisJJCBjZCB0ZXN0LWdpdAorCitnaXR3ZWIgKGNvbW1pdCAxMTMwZWYzKSB3YXMgbWVyZ2VkIGludG8gZ2l0IGFzIG9mIGNvbW1pdAorMGE4ZjRmMCwgYWZ0ZXIgd2hpY2ggaXQgd2FzIG5vIGxvbmdlciBtYWludGFpbmVkIHNlcGFyYXRlbHkuIAorQnV0IGltYWdpbmUgaXQgaGFkIGJlZW4gbWFpbnRhaW5lZCBzZXBhcmF0ZWx5LCBhbmQgd2Ugd2FudGVkIHRvCitleHRyYWN0IGdpdCdzIGNoYW5nZXMgdG8gZ2l0d2ViIHNpbmNlIHRoYXQgdGltZSwgdG8gc2hhcmUgd2l0aAordGhlIHVwc3RyZWFtLiAgWW91IGNvdWxkIGRvIHRoaXM6CisKKwkkIGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PWdpdHdlYiAtLWFubm90YXRlPScoc3BsaXQpICcgXAorICAgICAgICAJMGE4ZjRmMF4uLiAtLW9udG89MTEzMGVmMyAtLXJlam9pbiBcCisgICAgICAgIAktLWJyYW5jaCBnaXR3ZWItbGF0ZXN0CisgICAgICAgICQgZ2l0ayBnaXR3ZWItbGF0ZXN0CisgICAgICAgICQgZ2l0IHB1c2ggZ2l0QGdpdGh1Yi5jb206d2hhdGV2ZXIvZ2l0d2ViLmdpdCBnaXR3ZWItbGF0ZXN0Om1hc3RlcgorICAgICAgICAKKyhXZSB1c2UgJzBhOGY0ZjBeLi4nIGJlY2F1c2UgdGhhdCBtZWFucyAiYWxsIHRoZSBjaGFuZ2VzIGZyb20KKzBhOGY0ZjAgdG8gdGhlIGN1cnJlbnQgdmVyc2lvbiwgaW5jbHVkaW5nIDBhOGY0ZjAgaXRzZWxmLiIpCisKK0lmIGdpdHdlYiBoYWQgb3JpZ2luYWxseSBiZWVuIG1lcmdlZCB1c2luZyAnZ2l0IHN1YnRyZWUgYWRkJyAob3IKK2EgcHJldmlvdXMgc3BsaXQgaGFkIGFscmVhZHkgYmVlbiBkb25lIHdpdGggLS1yZWpvaW4gc3BlY2lmaWVkKQordGhlbiB5b3UgY2FuIGRvIGFsbCB5b3VyIHNwbGl0cyB3aXRob3V0IGhhdmluZyB0byByZW1lbWJlciBhbnkKK3dlaXJkIGNvbW1pdCBpZHM6CisKKwkkIGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PWdpdHdlYiAtLWFubm90YXRlPScoc3BsaXQpICcgLS1yZWpvaW4gXAorCQktLWJyYW5jaCBnaXR3ZWItbGF0ZXN0MgorCitBbmQgeW91IGNhbiBtZXJnZSBjaGFuZ2VzIGJhY2sgaW4gZnJvbSB0aGUgdXBzdHJlYW0gcHJvamVjdCBqdXN0CithcyBlYXNpbHk6CisKKwkkIGdpdCBzdWJ0cmVlIHB1bGwgLS1wcmVmaXg9Z2l0d2ViIFwKKwkJZ2l0QGdpdGh1Yi5jb206d2hhdGV2ZXIvZ2l0d2ViLmdpdCBtYXN0ZXIKKworT3IsIHVzaW5nICctLXNxdWFzaCcsIHlvdSBjYW4gYWN0dWFsbHkgcmV3aW5kIHRvIGFuIGVhcmxpZXIKK3ZlcnNpb24gb2YgZ2l0d2ViOgorCisJJCBnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD1naXR3ZWIgLS1zcXVhc2ggZ2l0d2ViLWxhdGVzdH4xMAorCitUaGVuIG1ha2Ugc29tZSBjaGFuZ2VzOgorCisJJCBkYXRlID5naXR3ZWIvbXlmaWxlCisJJCBnaXQgYWRkIGdpdHdlYi9teWZpbGUKKwkkIGdpdCBjb21taXQgLW0gJ2NyZWF0ZWQgbXlmaWxlJworCitBbmQgZmFzdCBmb3J3YXJkIGFnYWluOgorCisJJCBnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD1naXR3ZWIgLS1zcXVhc2ggZ2l0d2ViLWxhdGVzdAorCitBbmQgbm90aWNlIHRoYXQgeW91ciBjaGFuZ2UgaXMgc3RpbGwgaW50YWN0OgorCQorCSQgbHMgLWwgZ2l0d2ViL215ZmlsZQorCitBbmQgeW91IGNhbiBzcGxpdCBpdCBvdXQgYW5kIGxvb2sgYXQgeW91ciBjaGFuZ2VzIHZlcnN1cwordGhlIHN0YW5kYXJkIGdpdHdlYjoKKworCWdpdCBsb2cgZ2l0d2ViLWxhdGVzdC4uJChnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD1naXR3ZWIpCisKK0VYQU1QTEUgMy4gRXh0cmFjdCBhIHN1YnRyZWUgdXNpbmcgYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3VwcG9zZSB5b3UgaGF2ZSBhIHNvdXJjZSBkaXJlY3Rvcnkgd2l0aCBtYW55IGZpbGVzIGFuZAorc3ViZGlyZWN0b3JpZXMsIGFuZCB5b3Ugd2FudCB0byBleHRyYWN0IHRoZSBsaWIgZGlyZWN0b3J5IHRvIGl0cyBvd24KK2dpdCBwcm9qZWN0LiBIZXJlJ3MgYSBzaG9ydCB3YXkgdG8gZG8gaXQ6CisKK0ZpcnN0LCBtYWtlIHRoZSBuZXcgcmVwb3NpdG9yeSB3aGVyZXZlciB5b3Ugd2FudDoKKworCSQgPGdvIHRvIHRoZSBuZXcgbG9jYXRpb24+CisJJCBnaXQgaW5pdCAtLWJhcmUKKworQmFjayBpbiB5b3VyIG9yaWdpbmFsIGRpcmVjdG9yeToKKworCSQgZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9bGliIC0tYW5ub3RhdGU9IihzcGxpdCkiIC1iIHNwbGl0CisKK1RoZW4gcHVzaCB0aGUgbmV3IGJyYW5jaCBvbnRvIHRoZSBuZXcgZW1wdHkgcmVwb3NpdG9yeToKKworCSQgZ2l0IHB1c2ggPG5ldy1yZXBvPiBzcGxpdDptYXN0ZXIKKworCitBVVRIT1IKKy0tLS0tLQorV3JpdHRlbiBieSBBdmVyeSBQZW5uYXJ1biA8YXBlbndhcnJAZ21haWwuY29tPgorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL3QvTWFrZWZpbGUgYi9jb250cmliL3N1YnRyZWUvdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY0ODEwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL3QvTWFrZWZpbGUKQEAgLTAsMCArMSw2OSBAQAorIyBSdW4gdGVzdHMKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1haworCisjR0lUX1RFU1RfT1BUUz0tLXZlcmJvc2UgLS1kZWJ1ZworU0hFTExfUEFUSCA/PSAkKFNIRUxMKQorUEVSTF9QQVRIID89IC91c3IvYmluL3BlcmwKK1RBUiA/PSAkKFRBUikKK1JNID89IHJtIC1mCitQUk9WRSA/PSBwcm92ZQorREVGQVVMVF9URVNUX1RBUkdFVCA/PSB0ZXN0CisKKyMgU2hlbGwgcXVvdGU7CitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKKworVCA9ICQod2lsZGNhcmQgdFswLTldWzAtOV1bMC05XVswLTldLSouc2gpCisKK2FsbDogJChERUZBVUxUX1RFU1RfVEFSR0VUKQorCit0ZXN0OiBwcmUtY2xlYW4gJChURVNUX0xJTlQpCisJJChNQUtFKSBhZ2dyZWdhdGUtcmVzdWx0cy1hbmQtY2xlYW51cAorCitwcm92ZTogcHJlLWNsZWFuICQoVEVTVF9MSU5UKQorCUBlY2hvICIqKiogcHJvdmUgKioqIjsgR0lUX0NPTkZJRz0uZ2l0L2NvbmZpZyAkKFBST1ZFKSAtLWV4ZWMgJyQoU0hFTExfUEFUSF9TUSknICQoR0lUX1BST1ZFX09QVFMpICQoVCkgOjogJChHSVRfVEVTVF9PUFRTKQorCSQoTUFLRSkgY2xlYW4KKworJChUKToKKwlAZWNobyAiKioqICRAICoqKiI7IEdJVF9DT05GSUc9LmdpdC9jb25maWcgJyQoU0hFTExfUEFUSF9TUSknICRAICQoR0lUX1RFU1RfT1BUUykKKworcHJlLWNsZWFuOgorCSQoUk0pIC1yIHRlc3QtcmVzdWx0cworCitjbGVhbjoKKwkkKFJNKSAtciAndHJhc2ggZGlyZWN0b3J5Jy4qIHRlc3QtcmVzdWx0cworCSQoUk0pIC1yIHZhbGdyaW5kL2JpbgorCSQoUk0pIC5wcm92ZQorCit0ZXN0LWxpbnQ6IHRlc3QtbGludC1kdXBsaWNhdGVzIHRlc3QtbGludC1leGVjdXRhYmxlCisKK3Rlc3QtbGludC1kdXBsaWNhdGVzOgorCUBkdXBzPWBlY2hvICQoVCkgfCB0ciAnICcgJ1xuJyB8IHNlZCAncy8tLiovLycgfCBzb3J0IHwgdW5pcSAtZGAgJiYgXAorCQl0ZXN0IC16ICIkJGR1cHMiIHx8IHsgXAorCQllY2hvID4mMiAiZHVwbGljYXRlIHRlc3QgbnVtYmVyczoiICQkZHVwczsgZXhpdCAxOyB9CisKK3Rlc3QtbGludC1leGVjdXRhYmxlOgorCUBiYWQ9YGZvciBpIGluICQoVCk7IGRvIHRlc3QgLXggIiQkaSIgfHwgZWNobyAkJGk7IGRvbmVgICYmIFwKKwkJdGVzdCAteiAiJCRiYWQiIHx8IHsgXAorCQllY2hvID4mMiAibm9uLWV4ZWN1dGFibGUgdGVzdHM6IiAkJGJhZDsgZXhpdCAxOyB9CisKK2FnZ3JlZ2F0ZS1yZXN1bHRzLWFuZC1jbGVhbnVwOiAkKFQpCisJJChNQUtFKSBhZ2dyZWdhdGUtcmVzdWx0cworCSQoTUFLRSkgY2xlYW4KKworYWdncmVnYXRlLXJlc3VsdHM6CisJZm9yIGYgaW4gLi4vLi4vLi4vdC90ZXN0LXJlc3VsdHMvdCotKi5jb3VudHM7IGRvIFwKKwkJZWNobyAiJCRmIjsgXAorCWRvbmUgfCAnJChTSEVMTF9QQVRIX1NRKScgLi4vLi4vLi4vdC9hZ2dyZWdhdGUtcmVzdWx0cy5zaAorCit2YWxncmluZDoKKwkkKE1BS0UpIEdJVF9URVNUX09QVFM9IiQoR0lUX1RFU1RfT1BUUykgLS12YWxncmluZCIKKwordGVzdC1yZXN1bHRzOgorCW1rZGlyIC1wIHRlc3QtcmVzdWx0cworCisuUEhPTlk6IHByZS1jbGVhbiAkKFQpIGFnZ3JlZ2F0ZS1yZXN1bHRzIGNsZWFuIHZhbGdyaW5kCmRpZmYgLS1naXQgYS9jb250cmliL3N1YnRyZWUvdC90NzkwMC1zdWJ0cmVlLnNoIGIvY29udHJpYi9zdWJ0cmVlL3QvdDc5MDAtc3VidHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYzJlZWIwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL3QvdDc5MDAtc3VidHJlZS5zaApAQCAtMCwwICsxLDUwOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBBdmVyeSBQZW5uYXJhdW0KKyMKK3Rlc3RfZGVzY3JpcHRpb249J0Jhc2ljIHBvcmNlbGFpbiBzdXBwb3J0IGZvciBzdWJ0cmVlcworCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGJhc2ljIG9wZXJhdGlvbiBvZiB0aGUgbWVyZ2UsIHB1bGwsIGFkZAorYW5kIHNwbGl0IHN1YmNvbW1hbmRzIG9mIGdpdCBzdWJ0cmVlLgorJworCitleHBvcnQgVEVTVF9ESVJFQ1RPUlk9JChwd2QpLy4uLy4uLy4uL3QKKworLiAuLi8uLi8uLi90L3Rlc3QtbGliLnNoCisKK2NyZWF0ZSgpCit7CisJZWNobyAiJDEiID4iJDEiCisJZ2l0IGFkZCAiJDEiCit9CisKKworY2hlY2tfZXF1YWwoKQoreworCXRlc3RfZGVidWcgJ2VjaG8nCisJdGVzdF9kZWJ1ZyAiZWNobyBcImNoZWNrIGE6XCIgXCJ7JDF9XCIiCisJdGVzdF9kZWJ1ZyAiZWNobyBcIiAgICAgIGI6XCIgXCJ7JDJ9XCIiCisJaWYgWyAiJDEiID0gIiQyIiBdOyB0aGVuCisJCXJldHVybiAwCisJZWxzZQorCQlyZXR1cm4gMQorCWZpCit9CisKK2ZpeG5sKCkKK3sKKwl0PSIiCisJd2hpbGUgcmVhZCB4OyBkbworCQl0PSIkdCR4ICIKKwlkb25lCisJZWNobyAkdAorfQorCittdWx0aWxpbmUoKQoreworCXdoaWxlIHJlYWQgeDsgZG8KKwkJc2V0IC0tICR4CisJCWZvciBkIGluICIkQCI7IGRvCisJCQllY2hvICIkZCIKKwkJZG9uZQorCWRvbmUKK30KKwordW5kbygpCit7CisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfgorfQorCitsYXN0X2NvbW1pdF9tZXNzYWdlKCkKK3sKKwlnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyAtMQorfQorCisjIDEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgc3VicHJvaicgJworICAgICAgICB0ZXN0X2NyZWF0ZV9yZXBvIHN1YnByb2oKKycKKworIyBUbyB0aGUgc3VicHJvamVjdCEKK2NkIHN1YnByb2oKKworIyAyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3ViMScgJworICAgICAgICBjcmVhdGUgc3ViMSAmJgorICAgICAgICBnaXQgY29tbWl0IC1tICJzdWIxIiAmJgorICAgICAgICBnaXQgYnJhbmNoIHN1YjEgJiYKKyAgICAgICAgZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgc3VicHJvagorJworCisjIDMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdWIyJyAnCisgICAgICAgIGNyZWF0ZSBzdWIyICYmCisgICAgICAgIGdpdCBjb21taXQgLW0gInN1YjIiICYmCisgICAgICAgIGdpdCBicmFuY2ggc3ViMgorJworCisjIDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdWIzJyAnCisgICAgICAgIGNyZWF0ZSBzdWIzICYmCisgICAgICAgIGdpdCBjb21taXQgLW0gInN1YjMiICYmCisgICAgICAgIGdpdCBicmFuY2ggc3ViMworJworCisjIEJhY2sgdG8gbWFpbmxpbmUKK2NkIC4uCisKKyMgNQordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1haW40JyAnCisgICAgICAgIGNyZWF0ZSBtYWluNCAmJgorICAgICAgICBnaXQgY29tbWl0IC1tICJtYWluNCIgJiYKKyAgICAgICAgZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgbWFpbmxpbmUgJiYKKyAgICAgICAgZ2l0IGJyYW5jaCBzdWJkaXIKKycKKworIyA2Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBzdWJwcm9qIGhpc3RvcnknICcKKyAgICAgICAgZ2l0IGZldGNoIC4vc3VicHJvaiBzdWIxICYmCisgICAgICAgIGdpdCBicmFuY2ggc3ViMSBGRVRDSF9IRUFECisnCisKKyMgNwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gc3VidHJlZSBleGlzdHMgaW4gbWFpbiB0cmVlJyAnCisgICAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PXN1YmRpciBzdWIxCisnCisKKyMgOAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gcHVsbCBmcm9tIG5vbi1leGlzdGFudCBzdWJ0cmVlJyAnCisgICAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJ0cmVlIHB1bGwgLS1wcmVmaXg9c3ViZGlyIC4vc3VicHJvaiBzdWIxCisnCisKKyMgOQordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgLS1tZXNzYWdlIHdvcmtzIGZvciBhZGQnICcKKyAgICAgICAgZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PXN1YmRpciAtLW1lc3NhZ2U9IkFkZGVkIHN1YnByb2plY3QiIHN1YjEgJiYKKyAgICAgICAgY2hlY2tfZXF1YWwgJyciJChsYXN0X2NvbW1pdF9tZXNzYWdlKSInJyAiQWRkZWQgc3VicHJvamVjdCIgJiYKKyAgICAgICAgdW5kbworJworCisjIDEwCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiAtLW1lc3NhZ2Ugd29ya3MgYXMgLW0gYW5kIC0tcHJlZml4IGFzIC1QJyAnCisgICAgICAgIGdpdCBzdWJ0cmVlIGFkZCAtUCBzdWJkaXIgLW0gIkFkZGVkIHN1YnByb2plY3QgdXNpbmcgZ2l0IHN1YnRyZWUiIHN1YjEgJiYKKyAgICAgICAgY2hlY2tfZXF1YWwgJyciJChsYXN0X2NvbW1pdF9tZXNzYWdlKSInJyAiQWRkZWQgc3VicHJvamVjdCB1c2luZyBnaXQgc3VidHJlZSIgJiYKKyAgICAgICAgdW5kbworJworCisjIDExCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiAtLW1lc3NhZ2Ugd29ya3Mgd2l0aCBzcXVhc2ggdG9vJyAnCisgICAgICAgIGdpdCBzdWJ0cmVlIGFkZCAtUCBzdWJkaXIgLW0gIkFkZGVkIHN1YnByb2plY3Qgd2l0aCBzcXVhc2giIC0tc3F1YXNoIHN1YjEgJiYKKyAgICAgICAgY2hlY2tfZXF1YWwgJyciJChsYXN0X2NvbW1pdF9tZXNzYWdlKSInJyAiQWRkZWQgc3VicHJvamVjdCB3aXRoIHNxdWFzaCIgJiYKKyAgICAgICAgdW5kbworJworCisjIDEyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3VicHJvaiB0byBtYWlubGluZScgJworICAgICAgICBnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9c3ViZGlyLyBGRVRDSF9IRUFEICYmCisgICAgICAgIGNoZWNrX2VxdWFsICcnIiQobGFzdF9jb21taXRfbWVzc2FnZSkiJycgIkFkZCAnIidzdWJkaXIvJyInIGZyb20gY29tbWl0ICciJyInJyciJChnaXQgcmV2LXBhcnNlIHN1YjEpIicnJyInIiciCisnCisKKyMgMTMKKyMgdGhpcyBzaG91bGRuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcsIHNpbmNlIEZFVENIX0hFQUQgaXMgYWxyZWFkeSBhIHBhcmVudAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZmV0Y2hlZCBzdWJwcm9qJyAnCisgICAgICAgIGdpdCBtZXJnZSAtbSAibWVyZ2UgLXMgLW91cnMiIC1zIG91cnMgRkVUQ0hfSEVBRAorJworCisjIDE0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbWFpbi1zdWI1JyAnCisgICAgICAgIGNyZWF0ZSBzdWJkaXIvbWFpbi1zdWI1ICYmCisgICAgICAgIGdpdCBjb21taXQgLW0gIm1haW4tc3ViNSIKKycKKworIyAxNQordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1haW42JyAnCisgICAgICAgIGNyZWF0ZSBtYWluNiAmJgorICAgICAgICBnaXQgY29tbWl0IC1tICJtYWluNiBib3JpbmciCisnCisKKyMgMTYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBtYWluLXN1YjcnICcKKyAgICAgICAgY3JlYXRlIHN1YmRpci9tYWluLXN1YjcgJiYKKyAgICAgICAgZ2l0IGNvbW1pdCAtbSAibWFpbi1zdWI3IgorJworCisjIDE3Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBuZXcgc3VicHJvaiBoaXN0b3J5JyAnCisgICAgICAgIGdpdCBmZXRjaCAuL3N1YnByb2ogc3ViMiAmJgorICAgICAgICBnaXQgYnJhbmNoIHN1YjIgRkVUQ0hfSEVBRAorJworCisjIDE4Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiAtLW1lc3NhZ2Ugd29ya3MgZm9yIG1lcmdlJyAnCisgICAgICAgIGdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PXN1YmRpciAtbSAiTWVyZ2VkIGNoYW5nZXMgZnJvbSBzdWJwcm9qZWN0IiBzdWIyICYmCisgICAgICAgIGNoZWNrX2VxdWFsICcnIiQobGFzdF9jb21taXRfbWVzc2FnZSkiJycgIk1lcmdlZCBjaGFuZ2VzIGZyb20gc3VicHJvamVjdCIgJiYKKyAgICAgICAgdW5kbworJworCisjIDE5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiAtLW1lc3NhZ2UgZm9yIG1lcmdlIHdvcmtzIHdpdGggc3F1YXNoIHRvbycgJworICAgICAgICBnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeCBzdWJkaXIgLW0gIk1lcmdlZCBjaGFuZ2VzIGZyb20gc3VicHJvamVjdCB1c2luZyBzcXVhc2giIC0tc3F1YXNoIHN1YjIgJiYKKyAgICAgICAgY2hlY2tfZXF1YWwgJyciJChsYXN0X2NvbW1pdF9tZXNzYWdlKSInJyAiTWVyZ2VkIGNoYW5nZXMgZnJvbSBzdWJwcm9qZWN0IHVzaW5nIHNxdWFzaCIgJiYKKyAgICAgICAgdW5kbworJworCisjIDIwCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBuZXcgc3VicHJvaiBoaXN0b3J5IGludG8gc3ViZGlyJyAnCisgICAgICAgIGdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PXN1YmRpciBGRVRDSF9IRUFEICYmCisgICAgICAgIGdpdCBicmFuY2ggcHJlLXNwbGl0ICYmCisgICAgICAgIGNoZWNrX2VxdWFsICcnIiQobGFzdF9jb21taXRfbWVzc2FnZSkiJycgIk1lcmdlIGNvbW1pdCAnIiciJyIkKGdpdCByZXYtcGFyc2Ugc3ViMikiJyInIicgaW50byBtYWlubGluZSIKKycKKworIyAyMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgdGhhdCBwcmVmaXggYXJndW1lbnQgaXMgcmVxdWlyZWQgZm9yIHNwbGl0JyAnCisgICAgICAgIGVjaG8gIllvdSBtdXN0IHByb3ZpZGUgdGhlIC0tcHJlZml4IG9wdGlvbi4iID4gZXhwZWN0ZWQgJiYKKyAgICAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1YnRyZWUgc3BsaXQgPiBhY3R1YWwgMj4mMSAmJgorICAgICAgICB0ZXN0X2RlYnVnICJlY2hvIC1uIGV4cGVjdGVkOiAiICYmCisgICAgICAgIHRlc3RfZGVidWcgImNhdCBleHBlY3RlZCIgJiYKKyAgICAgICAgdGVzdF9kZWJ1ZyAiZWNobyAtbiBhY3R1YWw6ICIgJiYKKyAgICAgICAgdGVzdF9kZWJ1ZyAiY2F0IGFjdHVhbCIgJiYKKyAgICAgICAgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisgICAgICAgIHJtIC1mIGV4cGVjdGVkIGFjdHVhbAorJworCisjIDIyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayB0aGF0IHRoZSA8cHJlZml4PiBleGlzdHMgZm9yIGEgc3BsaXQnICcKKyAgICAgICAgZWNobyAiJyInIidub24tZXhpc3RlbnQtZGlyZWN0b3J5JyInIiciIGRvZXMgbm90IGV4aXN0XDsgdXNlICInIiciJ2dpdCBzdWJ0cmVlIGFkZCciJyInIiA+IGV4cGVjdGVkICYmCisgICAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PW5vbi1leGlzdGVudC1kaXJlY3RvcnkgPiBhY3R1YWwgMj4mMSAmJgorICAgICAgICB0ZXN0X2RlYnVnICJlY2hvIC1uIGV4cGVjdGVkOiAiICYmCisgICAgICAgIHRlc3RfZGVidWcgImNhdCBleHBlY3RlZCIgJiYKKyAgICAgICAgdGVzdF9kZWJ1ZyAiZWNobyAtbiBhY3R1YWw6ICIgJiYKKyAgICAgICAgdGVzdF9kZWJ1ZyAiY2F0IGFjdHVhbCIgJiYKKyAgICAgICAgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisjICAgICAgICBybSAtZiBleHBlY3RlZCBhY3R1YWwKKycKKworIyAyMwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgLS1tZXNzYWdlIHdvcmtzIGZvciBzcGxpdCtyZWpvaW4nICcKKyAgICAgICAgc3BsMT0nJyIkKGdpdCBzdWJ0cmVlIHNwbGl0IC0tYW5ub3RhdGU9JyInKiciJyAtLXByZWZpeCBzdWJkaXIgLS1vbnRvIEZFVENIX0hFQUQgLS1tZXNzYWdlICJTcGxpdCAmIHJlam9pbiIgLS1yZWpvaW4pIicnICYmCisgICAgICAgIGdpdCBicmFuY2ggc3BsMSAiJHNwbDEiICYmCisgICAgICAgIGNoZWNrX2VxdWFsICcnIiQobGFzdF9jb21taXRfbWVzc2FnZSkiJycgIlNwbGl0ICYgcmVqb2luIiAmJgorICAgICAgICB1bmRvCisnCisKKyMgMjQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHNwbGl0IHdpdGggLS1icmFuY2gnICcKKyAgICAgICAgc3BsMT0kKGdpdCBzdWJ0cmVlIHNwbGl0IC0tYW5ub3RhdGU9JyInKiciJyAtLXByZWZpeCBzdWJkaXIgLS1vbnRvIEZFVENIX0hFQUQgLS1tZXNzYWdlICJTcGxpdCAmIHJlam9pbiIgLS1yZWpvaW4pICYmCisgICAgICAgIHVuZG8gJiYKKyAgICAgICAgZ2l0IHN1YnRyZWUgc3BsaXQgLS1hbm5vdGF0ZT0nIicqJyInIC0tcHJlZml4IHN1YmRpciAtLW9udG8gRkVUQ0hfSEVBRCAtLWJyYW5jaCBzcGxpdGJyMSAmJgorICAgICAgICBjaGVja19lcXVhbCAnJyIkKGdpdCByZXYtcGFyc2Ugc3BsaXRicjEpIicnICIkc3BsMSIKKycKKworIyAyNQordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BsaXQgd2l0aCAtLWJyYW5jaCBmb3IgYW4gZXhpc3RpbmcgYnJhbmNoJyAnCisgICAgICAgIHNwbDE9JyciJChnaXQgc3VidHJlZSBzcGxpdCAtLWFubm90YXRlPSciJyonIicgLS1wcmVmaXggc3ViZGlyIC0tb250byBGRVRDSF9IRUFEIC0tbWVzc2FnZSAiU3BsaXQgJiByZWpvaW4iIC0tcmVqb2luKSInJyAmJgorICAgICAgICB1bmRvICYmCisgICAgICAgIGdpdCBicmFuY2ggc3BsaXRicjIgc3ViMSAmJgorICAgICAgICBnaXQgc3VidHJlZSBzcGxpdCAtLWFubm90YXRlPSciJyonIicgLS1wcmVmaXggc3ViZGlyIC0tb250byBGRVRDSF9IRUFEIC0tYnJhbmNoIHNwbGl0YnIyICYmCisgICAgICAgIGNoZWNrX2VxdWFsICcnIiQoZ2l0IHJldi1wYXJzZSBzcGxpdGJyMikiJycgIiRzcGwxIgorJworCisjIDI2Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGxpdCB3aXRoIC0tYnJhbmNoIGZvciBhbiBpbmNvbXBhdGlibGUgYnJhbmNoJyAnCisgICAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4IHN1YmRpciAtLW9udG8gRkVUQ0hfSEVBRCAtLWJyYW5jaCBzdWJkaXIKKycKKworCisjIDI3Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGxpdCtyZWpvaW4nICcKKyAgICAgICAgc3BsMT0nJyIkKGdpdCBzdWJ0cmVlIHNwbGl0IC0tYW5ub3RhdGU9JyInKiciJyAtLXByZWZpeCBzdWJkaXIgLS1vbnRvIEZFVENIX0hFQUQgLS1tZXNzYWdlICJTcGxpdCAmIHJlam9pbiIgLS1yZWpvaW4pIicnICYmCisgICAgICAgIHVuZG8gJiYKKyAgICAgICAgZ2l0IHN1YnRyZWUgc3BsaXQgLS1hbm5vdGF0ZT0nIicqJyInIC0tcHJlZml4IHN1YmRpciAtLW9udG8gRkVUQ0hfSEVBRCAtLXJlam9pbiAmJgorICAgICAgICBjaGVja19lcXVhbCAnJyIkKGxhc3RfY29tbWl0X21lc3NhZ2UpIicnICJTcGxpdCAnIiciJ3N1YmRpci8nIiciJyBpbnRvIGNvbW1pdCAnIiciJyIkc3BsMSInIiciJyIKKycKKworIyAyOAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1haW4tc3ViOCcgJworICAgICAgICBjcmVhdGUgc3ViZGlyL21haW4tc3ViOCAmJgorICAgICAgICBnaXQgY29tbWl0IC1tICJtYWluLXN1YjgiCisnCisKKyMgVG8gdGhlIHN1YnByb2plY3QhCitjZCAuL3N1YnByb2oKKworIyAyOQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugc3BsaXQgaW50byBzdWJwcm9qJyAnCisgICAgICAgIGdpdCBmZXRjaCAuLiBzcGwxICYmCisgICAgICAgIGdpdCBicmFuY2ggc3BsMSBGRVRDSF9IRUFEICYmCisgICAgICAgIGdpdCBtZXJnZSBGRVRDSF9IRUFECisnCisKKyMgMzAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdWI5JyAnCisgICAgICAgIGNyZWF0ZSBzdWI5ICYmCisgICAgICAgIGdpdCBjb21taXQgLW0gInN1YjkiCisnCisKKyMgQmFjayB0byBtYWlubGluZQorY2QgLi4KKworIyAzMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgZm9yIHN1YjgnICcKKyAgICAgICAgc3BsaXQyPScnIiQoZ2l0IHN1YnRyZWUgc3BsaXQgLS1hbm5vdGF0ZT0nIicqJyInIC0tcHJlZml4IHN1YmRpci8gLS1yZWpvaW4pIicnCisgICAgICAgIGdpdCBicmFuY2ggc3BsaXQyICIkc3BsaXQyIgorJworCisjIDMyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbWFpbi1zdWIxMCcgJworICAgICAgICBjcmVhdGUgc3ViZGlyL21haW4tc3ViMTAgJiYKKyAgICAgICAgZ2l0IGNvbW1pdCAtbSAibWFpbi1zdWIxMCIKKycKKworIyAzMwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgZm9yIHN1YjEwJyAnCisgICAgICAgIHNwbDM9JyciJChnaXQgc3VidHJlZSBzcGxpdCAtLWFubm90YXRlPSciJyonIicgLS1wcmVmaXggc3ViZGlyIC0tcmVqb2luKSInJyAmJgorICAgICAgICBnaXQgYnJhbmNoIHNwbDMgIiRzcGwzIgorJworCisjIFRvIHRoZSBzdWJwcm9qZWN0IQorY2QgLi9zdWJwcm9qCisKKyMgMzQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHNwbGl0IGludG8gc3VicHJvaicgJworICAgICAgICBnaXQgZmV0Y2ggLi4gc3BsMyAmJgorICAgICAgICBnaXQgYnJhbmNoIHNwbDMgRkVUQ0hfSEVBRCAmJgorICAgICAgICBnaXQgbWVyZ2UgRkVUQ0hfSEVBRCAmJgorICAgICAgICBnaXQgYnJhbmNoIHN1YnByb2otbWVyZ2Utc3BsMworJworCitjaGttPSJtYWluNCBtYWluNiIKK2Noa21zPSJtYWluLXN1YjEwIG1haW4tc3ViNSBtYWluLXN1YjcgbWFpbi1zdWI4IgorY2hrbXNfc3ViPSQoZWNobyAkY2hrbXMgfCBtdWx0aWxpbmUgfCBzZWQgJ3MsXixzdWJkaXIvLCcgfCBmaXhubCkKK2Noa3M9InN1YjEgc3ViMiBzdWIzIHN1YjkiCitjaGtzX3N1Yj0kKGVjaG8gJGNoa3MgfCBtdWx0aWxpbmUgfCBzZWQgJ3MsXixzdWJkaXIvLCcgfCBmaXhubCkKKworIyAzNQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIGV4YWN0bHkgdGhlIHJpZ2h0IHNldCBvZiBmaWxlcyBlbmRzIHVwIGluIHRoZSBzdWJwcm9qJyAnCisgICAgICAgIHN1YmZpbGVzPScnIiQoZ2l0IGxzLWZpbGVzIHwgZml4bmwpIicnICYmCisgICAgICAgIGNoZWNrX2VxdWFsICIkc3ViZmlsZXMiICIkY2hrbXMgJGNoa3MiCisnCisKKyMgMzYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSB0aGUgc3VicHJvaiBoaXN0b3J5ICpvbmx5KiBjb250YWlucyBjb21taXRzIHRoYXQgYWZmZWN0IHRoZSBzdWJkaXInICcKKyAgICAgICAgYWxsY2hhbmdlcz0nJyIkKGdpdCBsb2cgLS1uYW1lLW9ubHkgLS1wcmV0dHk9Zm9ybWF0OiciJyciJyB8IHNvcnQgfCBmaXhubCkiJycgJiYKKyAgICAgICAgY2hlY2tfZXF1YWwgIiRhbGxjaGFuZ2VzIiAiJGNoa21zICRjaGtzIgorJworCisjIEJhY2sgdG8gbWFpbmxpbmUKK2NkIC4uCisKKyMgMzcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgZnJvbSBzdWJwcm9qJyAnCisgICAgICAgIGdpdCBmZXRjaCAuL3N1YnByb2ogc3VicHJvai1tZXJnZS1zcGwzICYmCisgICAgICAgIGdpdCBicmFuY2ggc3VicHJvai1tZXJnZS1zcGwzIEZFVENIX0hFQUQgJiYKKyAgICAgICAgZ2l0IHN1YnRyZWUgcHVsbCAtLXByZWZpeD1zdWJkaXIgLi9zdWJwcm9qIHN1YnByb2otbWVyZ2Utc3BsMworJworCisjIDM4Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgZXhhY3RseSB0aGUgcmlnaHQgc2V0IG9mIGZpbGVzIGVuZHMgdXAgaW4gdGhlIG1haW5saW5lJyAnCisgICAgICAgIG1haW5maWxlcz0nJyIkKGdpdCBscy1maWxlcyB8IGZpeG5sKSInJyAmJgorICAgICAgICBjaGVja19lcXVhbCAiJG1haW5maWxlcyIgIiRjaGttICRjaGttc19zdWIgJGNoa3Nfc3ViIgorJworCisjIDM5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgZWFjaCBmaWxlbmFtZSBjaGFuZ2VkIGV4YWN0bHkgb25jZSBpbiB0aGUgZW50aXJlIGhpc3RvcnknICcKKyAgICAgICAgIyBtYWluLXN1Yj8/IGFuZCAvc3ViZGlyL21haW4tc3ViPz8gYm90aCBjaGFuZ2UsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZQorICAgICAgICAjIGNoYW5nZXMgdGhhdCB3ZXJlIHNwbGl0IGludG8gdGhlaXIgb3duIGhpc3RvcnkuICBBbmQgc3ViZGlyL3N1Yj8/IG5ldmVyCisgICAgICAgICMgY2hhbmdlLCBzaW5jZSB0aGV5IHdlcmUgKm9ubHkqIGNoYW5nZWQgaW4gdGhlIHN1YnRyZWUgYnJhbmNoLgorICAgICAgICBhbGxjaGFuZ2VzPScnIiQoZ2l0IGxvZyAtLW5hbWUtb25seSAtLXByZXR0eT1mb3JtYXQ6JyInJyInIHwgc29ydCB8IGZpeG5sKSInJyAmJgorICAgICAgICBjaGVja19lcXVhbCAiJGFsbGNoYW5nZXMiICcnIiQoZWNobyAkY2hrbXMgJGNoa20gJGNoa3MgJGNoa21zX3N1YiB8IG11bHRpbGluZSB8IHNvcnQgfCBmaXhubCkiJycKKycKKworIyA0MAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIHRoZSAtLXJlam9pbiBjb21taXRzIG5ldmVyIG1ha2UgaXQgaW50byBzdWJwcm9qJyAnCisgICAgICAgIGNoZWNrX2VxdWFsICcnIiQoZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JyInJXMnIicgSEVBRF4yIHwgZ3JlcCAtaSBzcGxpdCkiJycgIiIKKycKKworIyA0MQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIG5vICJnaXQgc3VidHJlZSIgdGFnZ2VkIGNvbW1pdHMgbWFrZSBpdCBpbnRvIHN1YnByb2onICcKKyAgICAgICAgIyBUaGV5IGFyZSBtZWFuaW5nbGVzcyB0byBzdWJwcm9qIHNpbmNlIG9uZSBzaWRlIG9mIHRoZSBtZXJnZSByZWZlcnMgdG8gdGhlIG1haW5saW5lCisgICAgICAgIGNoZWNrX2VxdWFsICcnIiQoZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JyInJXMlbiViJyInIEhFQUReMiB8IGdyZXAgImdpdC1zdWJ0cmVlLio6IikiJycgIiIKKycKKworIyBwcmVwYXJlIHNlY29uZCBwYWlyIG9mIHJlcG9zaXRvcmllcworbWtkaXIgdGVzdDIKK2NkIHRlc3QyCisKKyMgNDIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgbWFpbicgJworICAgICAgICB0ZXN0X2NyZWF0ZV9yZXBvIG1haW4KKycKKworY2QgbWFpbgorCisjIDQzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbWFpbjEnICcKKyAgICAgICAgY3JlYXRlIG1haW4xICYmCisgICAgICAgIGdpdCBjb21taXQgLW0gIm1haW4xIgorJworCitjZCAuLgorCisjIDQ0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHN1YicgJworICAgICAgICB0ZXN0X2NyZWF0ZV9yZXBvIHN1YgorJworCitjZCBzdWIKKworIyA0NQordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHN1YjInICcKKyAgICAgICAgY3JlYXRlIHN1YjIgJiYKKyAgICAgICAgZ2l0IGNvbW1pdCAtbSAic3ViMiIKKycKKworY2QgLi4vbWFpbgorCisjIGNoZWNrIGlmIHNwbGl0IGNhbiBmaW5kIHByb3BlciBiYXNlIHdpdGhvdXQgLS1vbnRvCisKKyMgNDYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdWIgYXMgc3ViZGlyIGluIG1haW4nICcKKyAgICAgICAgZ2l0IGZldGNoIC4uL3N1YiBtYXN0ZXIgJiYKKyAgICAgICAgZ2l0IGJyYW5jaCBzdWIyIEZFVENIX0hFQUQgJiYKKyAgICAgICAgZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4IHN1YmRpciBzdWIyCisnCisKK2NkIC4uL3N1YgorCisjIDQ3Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3ViMycgJworICAgICAgICBjcmVhdGUgc3ViMyAmJgorICAgICAgICBnaXQgY29tbWl0IC1tICJzdWIzIgorJworCitjZCAuLi9tYWluCisKKyMgNDgKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZyb20gc3ViJyAnCisgICAgICAgIGdpdCBmZXRjaCAuLi9zdWIgbWFzdGVyICYmCisgICAgICAgIGdpdCBicmFuY2ggc3ViMyBGRVRDSF9IRUFEICYmCisgICAgICAgIGdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4IHN1YmRpciBzdWIzCisnCisKKyMgNDkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBtYWluLXN1YjQnICcKKyAgICAgICAgY3JlYXRlIHN1YmRpci9tYWluLXN1YjQgJiYKKyAgICAgICAgZ2l0IGNvbW1pdCAtbSAibWFpbi1zdWI0IgorJworCisjIDUwCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCBmb3IgbWFpbi1zdWI0IHdpdGhvdXQgLS1vbnRvJyAnCisgICAgICAgIGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4IHN1YmRpciAtLWJyYW5jaCBtYWluc3ViNAorJworCisjIGF0IHRoaXMgcG9pbnQsIHRoZSBuZXcgY29tbWl0IHBhcmVudCBzaG91bGQgYmUgc3ViMyBpZiBpdCBpcyBub3QsCisjIHNvbWV0aGluZyB3ZW50IHdyb25nICh0aGUgIm5ld3BhcmVudCIgb2YgIm1hc3Rlcn4iIGNvbW1pdCBzaG91bGQKKyMgaGF2ZSBiZWVuIHN1YjMsIGJ1dCBpdCB3YXMgbm90LCBiZWNhdXNlIGl0cyBjYWNoZSB3YXMgbm90IHNldCB0bworIyBpdHNlbGYpCisKKyMgNTEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoYXQgdGhlIGNvbW1pdCBwYXJlbnQgaXMgc3ViMycgJworICAgICAgICBjaGVja19lcXVhbCAnJyIkKGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVQIC0xIG1haW5zdWI0KSInJyAnJyIkKGdpdCByZXYtcGFyc2Ugc3ViMykiJycKKycKKworIyA1MgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1haW4tc3ViNScgJworICAgICAgICBta2RpciBzdWJkaXIyICYmCisgICAgICAgIGNyZWF0ZSBzdWJkaXIyL21haW4tc3ViNSAmJgorICAgICAgICBnaXQgY29tbWl0IC1tICJtYWluLXN1YjUiCisnCisKKyMgNTMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0IGZvciBtYWluLXN1YjUgd2l0aG91dCAtLW9udG8nICcKKyAgICAgICAgIyBhbHNvIHRlc3QgdGhhdCB3ZSBzdGlsbCBjYW4gc3BsaXQgb3V0IGFuIGVudGlyZWx5IG5ldyBzdWJ0cmVlCisgICAgICAgICMgaWYgdGhlIHBhcmVudCBvZiB0aGUgZmlyc3QgY29tbWl0IGluIHRoZSB0cmVlIGlzIG5vdCBlbXB0eSwKKyAgICAgICAgIyB0aGVuIHRoZSBuZXcgc3VidHJlZSBoYXMgYWNjaWRlbnRseSBiZWVuIGF0dGFjaGVkIHRvIHNvbWV0aGluZworICAgICAgICBnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeCBzdWJkaXIyIC0tYnJhbmNoIG1haW5zdWI1ICYmCisgICAgICAgIGNoZWNrX2VxdWFsICcnIiQoZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JVAgLTEgbWFpbnN1YjUpIicnICIiCisnCisKKyMgbWFrZSBzdXJlIG5vIHBhdGNoIGNoYW5nZXMgbW9yZSB0aGFuIG9uZSBmaWxlLiAgVGhlIG9yaWdpbmFsIHNldCBvZiBjb21taXRzCisjIGNoYW5nZWQgb25seSBvbmUgZmlsZSBlYWNoLiAgQSBtdWx0aS1maWxlIGNoYW5nZSB3b3VsZCBpbXBseSB0aGF0IHdlIHBydW5lZAorIyBjb21taXRzIHRvbyBhZ2dyZXNzaXZlbHkuCitqb2luY29tbWl0cygpCit7CisJY29tbWl0PQorCWFsbD0KKwl3aGlsZSByZWFkIHggeTsgZG8KKwkJI2VjaG8gInskeH0iID4mMgorCQlpZiBbIC16ICIkeCIgXTsgdGhlbgorCQkJY29udGludWUKKwkJZWxpZiBbICIkeCIgPSAiY29tbWl0OiIgXTsgdGhlbgorCQkJaWYgWyAtbiAiJGNvbW1pdCIgXTsgdGhlbgorCQkJCWVjaG8gIiRjb21taXQgJGFsbCIKKwkJCQlhbGw9CisJCQlmaQorCQkJY29tbWl0PSIkeSIKKwkJZWxzZQorCQkJYWxsPSIkYWxsICR5IgorCQlmaQorCWRvbmUKKwllY2hvICIkY29tbWl0ICRhbGwiCit9CisKKyMgNTQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBvbmUgZmlsZSBjaGFuZ2UgcGVyIGNvbW1pdCcgJworICAgICAgICB4PSAmJgorICAgICAgICBsaXN0PScnIiQoZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JyInY29tbWl0OiAlSCciJyB8IGpvaW5jb21taXRzKSInJyAmJgorIyAgICAgICAgdGVzdF9kZWJ1ZyAiZWNobyBIRVJFIiAmJgorIyAgICAgICAgdGVzdF9kZWJ1ZyAiZWNobyAnJyIkbGlzdCInJyIgJiYKKyAgICAgICAgKGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiciJ2NvbW1pdDogJUgnIicgfCBqb2luY29tbWl0cyB8CisgICAgICAgICggICAgICAgd2hpbGUgcmVhZCBjb21taXQgYSBiOyBkbworCQkgICAgICAgIHRlc3RfZGVidWcgImVjaG8gVmVyaWZ5aW5nIGNvbW1pdCAiJyciJGNvbW1pdCInJworCQkgICAgICAgIHRlc3RfZGVidWcgImVjaG8gYTogIicnIiRhIicnCisJCSAgICAgICAgdGVzdF9kZWJ1ZyAiZWNobyBiOiAiJyciJGIiJycKKwkJICAgICAgICBjaGVja19lcXVhbCAiJGIiICIiCisJCSAgICAgICAgeD0xCisJICAgICAgICBkb25lCisJICAgICAgICBjaGVja19lcXVhbCAiJHgiIDEKKyAgICAgICAgKSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL3N1YnRyZWUvdG9kbyBiL2NvbnRyaWIvc3VidHJlZS90b2RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNDRiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvdG9kbwpAQCAtMCwwICsxLDUwIEBACisKKwlkZWxldGUgdGVtcGRpcgorCisJJ2dpdCBzdWJ0cmVlIHJlam9pbicgb3B0aW9uIHRvIGRvIHRoZSBzYW1lIGFzIC0tcmVqb2luLCBlZy4gYWZ0ZXIgYQorCSAgcmViYXNlCisKKwktLXByZWZpeCBkb2Vzbid0IGZvcmNlIHRoZSBzdWJ0cmVlIGNvcnJlY3RseSBpbiBtZXJnZS9wdWxsOgorCSItcyBzdWJ0cmVlIiBzaG91bGQgYmUgZ2l2ZW4gYW4gZXhwbGljaXQgc3VidHJlZSBvcHRpb24/CisJCVRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHdheSB0byBkbyB0aGlzLiAgV2UnZCBoYXZlIHRvCisJCXBhdGNoIGdpdC1tZXJnZS1zdWJ0cmVlLiAgVWdoLgorCQkoYnV0IHdlIGNvdWxkIGF2b2lkIHRoaXMgcHJvYmxlbSBieSBnZW5lcmF0aW5nIHNxdWFzaGVzIHdpdGgKKwkJZXhhY3RseSB0aGUgcmlnaHQgc3VidHJlZSBzdHJ1Y3R1cmUsIHJhdGhlciB0aGFuIHVzaW5nCisJCXN1YnRyZWUgbWVyZ2UuLi4pCisKKwlhZGQgYSAncHVzaCcgc3ViY29tbWFuZCB0byBwYXJhbGxlbCAncHVsbCcKKwkKKwlhZGQgYSAnbG9nJyBzdWJjb21tYW5kIHRvIHNlZSB3aGF0J3MgbmV3IGluIGEgc3VidHJlZT8KKworCWFkZCB0by1zdWJtb2R1bGUgYW5kIGZyb20tc3VibW9kdWxlIGNvbW1hbmRzCisKKwlhdXRvbWF0ZWQgdGVzdHMgZm9yIC0tc3F1YXNoIHN0dWZmCisKKwkiYWRkIiBjb21tYW5kIG5vbi1vYnZpb3VzbHkgcmVxdWlyZXMgYSBjb21taXRpZDsgd291bGQgYmUgZWFzaWVyIGlmCisJCWl0IGhhZCBhICJwdWxsIiBzb3J0IG9mIG1vZGUgaW5zdGVhZAorCisJInB1bGwiIGFuZCAibWVyZ2UiIGNvbW1hbmRzIHNob3VsZCBmYWlsIGlmIHlvdSd2ZSBuZXZlciBtZXJnZWQKKwkJdGhhdCAtLXByZWZpeCBiZWZvcmUKKwkJCisJZG9jcyBzaG91bGQgcHJvdmlkZSBhbiBleGFtcGxlIG9mICJhZGQiCisJCisJbm90ZSB0aGF0IHRoZSBpbml0aWFsIHNwbGl0IGRvZXNuJ3QgKmhhdmUqIHRvIGhhdmUgYSBjb21taXRpZAorCQlzcGVjaWZpZWQuLi4gdGhhdCdzIGp1c3QgYW4gb3B0aW1pemF0aW9uCisKKwlpZiB5b3UgdHJ5IHRvIGFkZCAob3IgbWF5YmUgbWVyZ2U/KSB3aXRoIGFuIGludmFsaWQgY29tbWl0aWQsIHlvdQorCQlnZXQgYSBtaXNsZWFkaW5nICJwcmVmaXggbXVzdCBlbmQgd2l0aCAvIiBtZXNzYWdlIGZyb20KKwkJb25lIG9mIHRoZSBvdGhlciBnaXQgdG9vbHMgdGhhdCBnaXQtc3VidHJlZSBjYWxscy4gIFNob3VsZAorCQlkZXRlY3QgdGhpcyBzaXR1YXRpb24gYW5kIHByaW50IHRoZSAqcmVhbCogcHJvYmxlbS4KKwkKKwkicHVsbCAtLXNxdWFzaCIgc2hvdWxkIGRvIGZldGNoLXN5bnRoZXNpemUtbWVyZ2UsIGJ1dCBpbnN0ZWFkIGp1c3QKKwkJZG9lcyAicHVsbCIgZGlyZWN0bHksIHdoaWNoIGRvZXNuJ3Qgd29yayBhdCBhbGwuCisKKwltYWtlIGEgJ2ZvcmNlLXVwZGF0ZScgdGhhdCBkb2VzIHdoYXQgJ2FkZCcgZG9lcyBldmVuIGlmIHRoZSBzdWJ0cmVlCisJCWFscmVhZHkgZXhpc3RzLiAgVGhhdCB3YXkgd2UgY2FuIGhlbHAgcGVvcGxlIHdobyBpbXBvcnRlZAorCQlzdWJ0cmVlcyAiaW5jb3JyZWN0bHkiIChlZy4gYnkganVzdCBjb3B5aW5nIGluIHRoZSBmaWxlcykgaW4KKwkJdGhlIHBhc3QuCisKKwlndWVzcyAtLXByZWZpeCBhdXRvbWF0aWNhbGx5IGlmIHBvc3NpYmxlIGJhc2VkIG9uIHB3ZAorCisJbWFrZSBhICdnaXQgc3VidHJlZSBncmFmdHMnIHRoYXQgYXV0b21hdGljYWxseSBleHBhbmRzIC0tc3F1YXNoJ2QKKwkJY29tbWl0cyBzbyB5b3UgY2FuIHNlZSB0aGUgZnVsbCBoaXN0b3J5IGlmIHlvdSB3YW50IGl0LgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdm4tZmUvLmdpdGlnbm9yZSBiL2NvbnRyaWIvc3ZuLWZlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhNzc5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3ZuLWZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACisvKi54bWwKKy8qLjEKKy8qLmh0bWwKKy9zdm4tZmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3ZuLWZlL01ha2VmaWxlIGIvY29udHJpYi9zdm4tZmUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwZDhkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3ZuLWZlL01ha2VmaWxlCkBAIC0wLDAgKzEsNjMgQEAKK2FsbDo6IHN2bi1mZSRYCisKK0NDID0gZ2NjCitSTSA9IHJtIC1mCitNViA9IG12CisKK0NGTEFHUyA9IC1nIC1PMiAtV2FsbAorTERGTEFHUyA9CitBTExfQ0ZMQUdTID0gJChDRkxBR1MpCitBTExfTERGTEFHUyA9ICQoTERGTEFHUykKK0VYVExJQlMgPQorCitHSVRfTElCID0gLi4vLi4vbGliZ2l0LmEKK1ZDU1NWTl9MSUIgPSAuLi8uLi92Y3Mtc3ZuL2xpYi5hCitMSUJTID0gJChWQ1NTVk5fTElCKSAkKEdJVF9MSUIpICQoRVhUTElCUykKKworUVVJRVRfU1VCRElSMCA9ICskKE1BS0UpIC1DICMgc3BhY2UgdG8gc2VwYXJhdGUgLUMgYW5kIHN1YmRpcgorUVVJRVRfU1VCRElSMSA9CisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHcpLHcpCitQUklOVF9ESVIgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorZWxzZSAjICJtYWtlIC13IgorTk9fU1VCRElSID0gOgorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK2lmbmRlZiBWCisJUVVJRVRfQ0MgICAgICA9IEBlY2hvICcgICAnIENDICRAOworCVFVSUVUX0xJTksgICAgPSBAZWNobyAnICAgJyBMSU5LICRAOworCVFVSUVUX1NVQkRJUjAgPSArQHN1YmRpcj0KKwlRVUlFVF9TVUJESVIxID0gOyQoTk9fU1VCRElSKSBlY2hvICcgICAnIFNVQkRJUiAkJHN1YmRpcjsgXAorCSAgICAgICAgICAgICAgICAkKE1BS0UpICQoUFJJTlRfRElSKSAtQyAkJHN1YmRpcgorZW5kaWYKK2VuZGlmCisKK3N2bi1mZSRYOiBzdm4tZmUubyAkKFZDU1NWTl9MSUIpICQoR0lUX0xJQikKKwkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCBzdm4tZmUubyBcCisJCSQoQUxMX0xERkxBR1MpICQoTElCUykKKworc3ZuLWZlLm86IHN2bi1mZS5jIC4uLy4uL3Zjcy1zdm4vc3ZuZHVtcC5oCisJJChRVUlFVF9DQykkKENDKSAtSS4uLy4uL3Zjcy1zdm4gLW8gJCoubyAtYyAkKEFMTF9DRkxBR1MpICQ8CisKK3N2bi1mZS5odG1sOiBzdm4tZmUudHh0CisJJChRVUlFVF9TVUJESVIwKS4uLy4uL0RvY3VtZW50YXRpb24gJChRVUlFVF9TVUJESVIxKSBcCisJCU1BTl9UWFQ9Li4vY29udHJpYi9zdm4tZmUvc3ZuLWZlLnR4dCBcCisJCS4uL2NvbnRyaWIvc3ZuLWZlLyRACisKK3N2bi1mZS4xOiBzdm4tZmUudHh0CisJJChRVUlFVF9TVUJESVIwKS4uLy4uL0RvY3VtZW50YXRpb24gJChRVUlFVF9TVUJESVIxKSBcCisJCU1BTl9UWFQ9Li4vY29udHJpYi9zdm4tZmUvc3ZuLWZlLnR4dCBcCisJCS4uL2NvbnRyaWIvc3ZuLWZlLyRACisJJChNVikgLi4vLi4vRG9jdW1lbnRhdGlvbi9zdm4tZmUuMSAuCisKKy4uLy4uL3Zjcy1zdm4vbGliLmE6IEZPUkNFCisJJChRVUlFVF9TVUJESVIwKS4uLy4uICQoUVVJRVRfU1VCRElSMSkgdmNzLXN2bi9saWIuYQorCisuLi8uLi9saWJnaXQuYTogRk9SQ0UKKwkkKFFVSUVUX1NVQkRJUjApLi4vLi4gJChRVUlFVF9TVUJESVIxKSBsaWJnaXQuYQorCitjbGVhbjoKKwkkKFJNKSBzdm4tZmUkWCBzdm4tZmUubyBzdm4tZmUuaHRtbCBzdm4tZmUueG1sIHN2bi1mZS4xCisKKy5QSE9OWTogYWxsIGNsZWFuIEZPUkNFCmRpZmYgLS1naXQgYS9jb250cmliL3N2bi1mZS9zdm4tZmUuYyBiL2NvbnRyaWIvc3ZuLWZlL3N2bi1mZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZGIyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N2bi1mZS9zdm4tZmUuYwpAQCAtMCwwICsxLDE3IEBACisvKgorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICogWW91IG1heSBmcmVlbHkgdXNlLCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCByZWxpY2Vuc2UgaXQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInN2bmR1bXAuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWlmIChzdm5kdW1wX2luaXQoTlVMTCkpCisJCXJldHVybiAxOworCXN2bmR1bXBfcmVhZCgoYXJnYyA+IDEpID8gYXJndlsxXSA6IE5VTEwpOworCXN2bmR1bXBfZGVpbml0KCk7CisJc3ZuZHVtcF9yZXNldCgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdm4tZmUvc3ZuLWZlLnR4dCBiL2NvbnRyaWIvc3ZuLWZlL3N2bi1mZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyOGFiMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3ZuLWZlL3N2bi1mZS50eHQKQEAgLTAsMCArMSw3MSBAQAorc3ZuLWZlKDEpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorc3ZuLWZlIC0gY29udmVydCBhbiBTVk4gImR1bXBmaWxlIiB0byBhIGZhc3QtaW1wb3J0IHN0cmVhbQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK21rZmlmbyBiYWNrY2hhbm5lbCAmJgorc3ZuYWRtaW4gZHVtcCAtLWRlbHRhcyBSRVBPIHwKKwlzdm4tZmUgW3VybF0gMzxiYWNrY2hhbm5lbCB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmJhY2tjaGFubmVsCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitDb252ZXJ0cyBhIFN1YnZlcnNpb24gZHVtcGZpbGUgaW50byBpbnB1dCBzdWl0YWJsZSBmb3IKK2dpdC1mYXN0LWltcG9ydCgxKSBhbmQgc2ltaWxhciBpbXBvcnRlcnMuIFJFUE8gaXMgYSBwYXRoIHRvIGEKK1N1YnZlcnNpb24gcmVwb3NpdG9yeSBtaXJyb3JlZCBvbiB0aGUgbG9jYWwgZGlzay4gUmVtb3RlIFN1YnZlcnNpb24KK3JlcG9zaXRvcmllcyBjYW4gYmUgbWlycm9yZWQgb24gbG9jYWwgZGlzayB1c2luZyB0aGUgYHN2bnN5bmNgCitjb21tYW5kLgorCitOb3RlOiB0aGlzIHRvb2wgaXMgdmVyeSB5b3VuZy4gIFRoZSBkZXRhaWxzIG9mIGl0cyBjb21tYW5kbGluZQoraW50ZXJmYWNlIG1heSBjaGFuZ2UgaW4gYmFja3dhcmQgaW5jb21wYXRpYmxlIHdheXMuCisKK0lOUFVUIEZPUk1BVAorLS0tLS0tLS0tLS0tCitTdWJ2ZXJzaW9uJ3MgcmVwb3NpdG9yeSBkdW1wIGZvcm1hdCBpcyBkb2N1bWVudGVkIGluIGZ1bGwgaW4KK2Bub3Rlcy9kdW1wLWxvYWQtZm9ybWF0LnR4dGAgZnJvbSB0aGUgU3VidmVyc2lvbiBzb3VyY2UgdHJlZS4KK0ZpbGVzIGluIHRoaXMgZm9ybWF0IGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcgdGhlICdzdm5hZG1pbiBkdW1wJyBvcgorJ3N2ayBhZG1pbiBkdW1wJyBjb21tYW5kLgorCitPVVRQVVQgRk9STUFUCistLS0tLS0tLS0tLS0tCitUaGUgZmFzdC1pbXBvcnQgZm9ybWF0IGlzIGRvY3VtZW50ZWQgYnkgdGhlIGdpdC1mYXN0LWltcG9ydCgxKQorbWFudWFsIHBhZ2UuCisKK05PVEVTCistLS0tLQorU3VidmVyc2lvbiBkdW1wcyBkbyBub3QgcmVjb3JkIGEgc2VwYXJhdGUgYXV0aG9yIGFuZCBjb21taXR0ZXIgZm9yCitlYWNoIHJldmlzaW9uLCBub3IgYSBzZXBhcmF0ZSBkaXNwbGF5IG5hbWUgYW5kIGVtYWlsIGFkZHJlc3MgZm9yCitlYWNoIGF1dGhvci4gIExpa2UgZ2l0LXN2bigxKSwgJ3N2bi1mZScgd2lsbCB1c2UgdGhlIG5hbWUKKworLS0tLS0tLS0tCit1c2VyIDx1c2VyQFVVSUQ+CistLS0tLS0tLS0KKworYXMgY29tbWl0dGVyLCB3aGVyZSAndXNlcicgaXMgdGhlIHZhbHVlIG9mIHRoZSBgc3ZuOmF1dGhvcmAgcHJvcGVydHkKK2FuZCAnVVVJRCcgdGhlIHJlcG9zaXRvcnkncyBpZGVudGlmaWVyLgorCitUbyBzdXBwb3J0IGluY3JlbWVudGFsIGltcG9ydHMsICdzdm4tZmUnIHB1dHMgYSBgZ2l0LXN2bi1pZGAgbGluZSBhdAordGhlIGVuZCBvZiBlYWNoIGNvbW1pdCBsb2cgbWVzc2FnZSBpZiBwYXNzZWQgYSBVUkwgb24gdGhlIGNvbW1hbmQKK2xpbmUuICBUaGlzIGxpbmUgaGFzIHRoZSBmb3JtIGBnaXQtc3ZuLWlkOiBVUkxAUkVWTk8gVVVJRGAuCisKK1RoZSByZXN1bHRpbmcgcmVwb3NpdG9yeSB3aWxsIGdlbmVyYWxseSByZXF1aXJlIGZ1cnRoZXIgcHJvY2Vzc2luZwordG8gcHV0IGVhY2ggcHJvamVjdCBpbiBpdHMgb3duIHJlcG9zaXRvcnkgYW5kIHRvIHNlcGFyYXRlIHRoZSBoaXN0b3J5CitvZiBlYWNoIGJyYW5jaC4gIFRoZSAnZ2l0IGZpbHRlci1icmFuY2ggLS1zdWJkaXJlY3RvcnktZmlsdGVyJyBjb21tYW5kCittYXkgYmUgdXNlZnVsIGZvciB0aGlzIHB1cnBvc2UuCisKK0JVR1MKKy0tLS0KK0VtcHR5IGRpcmVjdG9yaWVzIGFuZCB1bmtub3duIHByb3BlcnRpZXMgYXJlIHNpbGVudGx5IGRpc2NhcmRlZC4KKworVGhlIGV4aXQgc3RhdHVzIGRvZXMgbm90IHJlZmxlY3Qgd2hldGhlciBhbiBlcnJvciB3YXMgZGV0ZWN0ZWQuCisKK1NFRSBBTFNPCistLS0tLS0tLQorZ2l0LXN2bigxKSwgc3ZuMmdpdCgxKSwgc3ZrKDEpLCBnaXQtZmlsdGVyLWJyYW5jaCgxKSwgZ2l0LWZhc3QtaW1wb3J0KDEpLAoraHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2Yvc3VidmVyc2lvbi90cnVuay9ub3Rlcy9kdW1wLWxvYWQtZm9ybWF0LnR4dApkaWZmIC0tZ2l0IGEvY29udHJpYi90aHVuZGVyYmlyZC1wYXRjaC1pbmxpbmUvUkVBRE1FIGIvY29udHJpYi90aHVuZGVyYmlyZC1wYXRjaC1pbmxpbmUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDE0N2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3RodW5kZXJiaXJkLXBhdGNoLWlubGluZS9SRUFETUUKQEAgLTAsMCArMSwyMCBAQAorYXBwcC5zaCBpcyBhIHNjcmlwdCB0aGF0IGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBFeHRlcm5hbEVkaXRvcgorZm9yIE1vemlsbGEgVGh1bmRlcmJpcmQuIEl0IHdpbGwgbGV0IHlvdSBpbmNsdWRlIHBhdGNoZXMgaW5saW5lIGluIGUtbWFpbHMKK2luIGFuIGVhc3kgd2F5LgorCitVc2FnZToKKy0gR2VuZXJhdGUgdGhlIHBhdGNoIHdpdGggZ2l0IGZvcm1hdC1wYXRjaC4KKy0gU3RhcnQgd3JpdGluZyBhIG5ldyBlLW1haWwgaW4gVGh1bmRlcmJpcmQuCistIFByZXNzIHRoZSBleHRlcm5hbCBlZGl0b3IgYnV0dG9uIChvciBDdHJsLUUpIHRvIHJ1biBhcHBwLnNoCistIFNlbGVjdCB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgcGF0Y2ggZmlsZS4KKy0gRmluaXNoIGVkaXRpbmcgdGhlIGUtbWFpbC4KKworQW55IHRleHQgdGhhdCBpcyBlbnRlcmVkIGludG8gdGhlIG1lc3NhZ2UgZWRpdG9yIGJlZm9yZSBhcHBwLnNoIGlzIGNhbGxlZAord2lsbCBiZSBtb3ZlZCB0byB0aGUgc2VjdGlvbiBiZXR3ZWVuIHRoZSAtLS0gYW5kIHRoZSBkaWZmc3RhdC4KKworQWxsIFMtTy1COnMgYW5kIENjOnMgaW4gdGhlIHBhdGNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIENDIGxpc3QuCisKK1RvIHNldCBpdCB1cCwganVzdCBpbnN0YWxsIEV4dGVybmFsIEVkaXRvciBhbmQgdGVsbCBpdCB0byB1c2UgYXBwcC5zaCBhcyB0aGUKK2VkaXRvci4KKworWmVuaXR5IGlzIGEgcmVxdWlyZWQgZGVwZW5kZW5jeS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGh1bmRlcmJpcmQtcGF0Y2gtaW5saW5lL2FwcHAuc2ggYi9jb250cmliL3RodW5kZXJiaXJkLXBhdGNoLWlubGluZS9hcHBwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlYjRhNTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3RodW5kZXJiaXJkLXBhdGNoLWlubGluZS9hcHBwLnNoCkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgMjAwOCBMdWthcyBTYW5kc3Ryw7ZtIDxsdWtzYW5AZ21haWwuY29tPgorIworIyBBcHBlbmRQYXRjaCAtIEEgc2NyaXB0IHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBFeHRlcm5hbEVkaXRvcgorIyBmb3IgTW96aWxsYSBUaHVuZGVyYmlyZCB0byBwcm9wZXJseSBpbmNsdWRlIHBhdGNoZXMgaW5saW5lIGluIGUtbWFpbHMuCisKKyMgRXh0ZXJuYWxFZGl0b3IgY2FuIGJlIGRvd25sb2FkZWQgYXQgaHR0cDovL2dsb2JzLm9yZy9hcnRpY2xlcy5waHA/bG5nPWVuJnBnPTIKKworQ09ORkZJTEU9fi8uYXBwcHJjCisKK1NFUD0iLT0tPS09LT0tPS09LT0tPS09IyBEb24ndCByZW1vdmUgdGhpcyBsaW5lICM9LT0tPS09LT0tPS09LT0tPS0iCitpZiBbIC1lICIkQ09ORkZJTEUiIF0gOyB0aGVuCisJTEFTVF9ESVI9YGdyZXAgLW0gMSAiXkxBU1RfRElSPSIgIiR7Q09ORkZJTEV9InxzZWQgLWUgJ3MvXkxBU1RfRElSPS8vJ2AKKwljZCAiJHtMQVNUX0RJUn0iCitlbHNlCisJY2QgPiAvZGV2L251bGwKK2ZpCisKK1BBVENIPSQoemVuaXR5IC0tZmlsZS1zZWxlY3Rpb24pCisKK2lmIFsgIiQ/IiAhPSAiMCIgXSA7IHRoZW4KKwkjemVuaXR5IC0tZXJyb3IgLS10ZXh0ICJObyBwYXRjaGZpbGUgZ2l2ZW4uIgorCWV4aXQgMQorZmkKKworY2QgLSA+IC9kZXYvbnVsbAorCitTVUJKRUNUPWBzZWQgLW4gLWUgJy9eU3ViamVjdDogL3AnICIke1BBVENIfSJgCitIRUFERVJTPWBzZWQgLWUgJy9eJyIke1NFUH0iJyQvLCRkJyAkMWAKK0JPRFk9YHNlZCAtZSAiMSwvJHtTRVB9L2QiICQxYAorQ01UX01TRz1gc2VkIC1lICcxLC9eJC9kJyAtZSAnL14tLS0kLywkZCcgIiR7UEFUQ0h9ImAKK0RJRkY9YHNlZCAtZSAnMSwvXi0tLSQvZCcgIiR7UEFUQ0h9ImAKKworQ0NTPWBlY2hvIC1lICIkQ01UX01TR1xuJEhFQURFUlMiIHwgc2VkIC1uIC1lICdzL15DYzogXCguKlwpJC9cMSwvZ3AnIFwKKwktZSAncy9eU2lnbmVkLW9mZi1ieTogXCguKlwpL1wxLC9ncCdgCisKK2VjaG8gIiRTVUJKRUNUIiA+ICQxCitlY2hvICJDYzogJENDUyIgPj4gJDEKK2VjaG8gIiRIRUFERVJTIiB8IHNlZCAtZSAnL15TdWJqZWN0OiAvZCcgLWUgJy9eQ2M6IC9kJyA+PiAkMQorZWNobyAiJFNFUCIgPj4gJDEKKworZWNobyAiJENNVF9NU0ciID4+ICQxCitlY2hvICItLS0iID4+ICQxCitpZiBbICJ4JHtCT0RZfXgiICE9ICJ4eCIgXSA7IHRoZW4KKwllY2hvID4+ICQxCisJZWNobyAiJEJPRFkiID4+ICQxCisJZWNobyA+PiAkMQorZmkKK2VjaG8gIiRESUZGIiA+PiAkMQorCitMQVNUX0RJUj1gZGlybmFtZSAiJHtQQVRDSH0iYAorCitncmVwIC12ICJeTEFTVF9ESVI9IiAiJHtDT05GRklMRX0iID4gIiR7Q09ORkZJTEV9XyIKK2VjaG8gIkxBU1RfRElSPSR7TEFTVF9ESVJ9IiA+PiAiJHtDT05GRklMRX1fIgorbXYgIiR7Q09ORkZJTEV9XyIgIiR7Q09ORkZJTEV9IgpkaWZmIC0tZ2l0IGEvY29udHJpYi92aW0vUkVBRE1FIGIvY29udHJpYi92aW0vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTFlMTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3ZpbS9SRUFETUUKQEAgLTAsMCArMSwzMiBAQAorU3ludGF4IGhpZ2hsaWdodGluZyBmb3IgZ2l0IGNvbW1pdCBtZXNzYWdlcywgY29uZmlnIGZpbGVzLCBldGMuIGlzCitpbmNsdWRlZCB3aXRoIHRoZSB2aW0gZGlzdHJpYnV0aW9uIGFzIG9mIHZpbSA3LjIsIGFuZCBzaG91bGQgd29yaworYXV0b21hdGljYWxseS4KKworSWYgeW91IGhhdmUgYW4gb2xkZXIgdmVyc2lvbiBvZiB2aW0sIHlvdSBjYW4gZ2V0IHRoZSBsYXRlc3Qgc3ludGF4CitmaWxlcyBmcm9tIHRoZSB2aW0gcHJvamVjdDoKKworICBodHRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS9ydW50aW1lL3N5bnRheC9naXQudmltCisgIGh0dHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL3J1bnRpbWUvc3ludGF4L2dpdGNvbW1pdC52aW0KKyAgaHR0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vcnVudGltZS9zeW50YXgvZ2l0Y29uZmlnLnZpbQorICBodHRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS9ydW50aW1lL3N5bnRheC9naXRyZWJhc2UudmltCisgIGh0dHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL3J1bnRpbWUvc3ludGF4L2dpdHNlbmRlbWFpbC52aW0KKworVGhlc2UgZmlsZXMgYXJlIGFsc28gYXZhaWxhYmxlIHZpYSBGVFAgYXQgdGhlIHNhbWUgbG9jYXRpb24uCisKK1RvIGluc3RhbGw6CisKKyAgMS4gQ29weSB0aGVzZSBmaWxlcyB0byB2aW0ncyBzeW50YXggZGlyZWN0b3J5ICRIT01FLy52aW0vc3ludGF4CisgIDIuIFRvIGF1dG8tZGV0ZWN0IHRoZSBlZGl0aW5nIG9mIHZhcmlvdXMgZ2l0LXJlbGF0ZWQgZmlsZXR5cGVzOgorCSQgY2F0ID4+JEhPTUUvLnZpbS9maWxldHlwZS52aW0gPDwnRU9GJworCWF1dG9jbWQgQnVmTmV3RmlsZSxCdWZSZWFkICouZ2l0L0NPTU1JVF9FRElUTVNHICAgIHNldGYgZ2l0Y29tbWl0CisJYXV0b2NtZCBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5naXQvY29uZmlnLC5naXRjb25maWcgc2V0ZiBnaXRjb25maWcKKwlhdXRvY21kIEJ1Zk5ld0ZpbGUsQnVmUmVhZCBnaXQtcmViYXNlLXRvZG8gICAgICAgICBzZXRmIGdpdHJlYmFzZQorCWF1dG9jbWQgQnVmTmV3RmlsZSxCdWZSZWFkIC5tc2cuWzAtOV0qCisJCVwgaWYgZ2V0bGluZSgxKSA9fiAnXkZyb20uKiMgVGhpcyBsaW5lIGlzIGlnbm9yZWQuJCcgfAorCQlcICAgc2V0ZiBnaXRzZW5kZW1haWwgfAorCQlcIGVuZGlmCisJYXV0b2NtZCBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5naXQvKioKKwkJXCBpZiBnZXRsaW5lKDEpID1+ICdeXHhcezQwXH1cPlx8XnJlZjogJyB8CisJCVwgICBzZXRmIGdpdCB8CisJCVwgZW5kaWYKKwlFT0YKZGlmZiAtLWdpdCBhL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIgYi9jb250cmliL3dvcmtkaXIvZ2l0LW5ldy13b3JrZGlyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1ZThiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3dvcmtkaXIvZ2l0LW5ldy13b3JrZGlyCkBAIC0wLDAgKzEsODIgQEAKKyMhL2Jpbi9zaAorCit1c2FnZSAoKSB7CisJZWNobyAidXNhZ2U6IiAkQAorCWV4aXQgMTI3Cit9CisKK2RpZSAoKSB7CisJZWNobyAkQAorCWV4aXQgMTI4Cit9CisKK2lmIHRlc3QgJCMgLWx0IDIgfHwgdGVzdCAkIyAtZ3QgMwordGhlbgorCXVzYWdlICIkMCA8cmVwb3NpdG9yeT4gPG5ld193b3JrZGlyPiBbPGJyYW5jaD5dIgorZmkKKworb3JpZ19naXQ9JDEKK25ld193b3JrZGlyPSQyCiticmFuY2g9JDMKKworIyB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHdoYXQgaXMgcG9pbnRlZCB0byBoYXMgYSAuZ2l0IGRpcmVjdG9yeSAuLi4KK2dpdF9kaXI9JChjZCAiJG9yaWdfZ2l0IiAyPi9kZXYvbnVsbCAmJgorICBnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbCkgfHwKKyAgZGllICJOb3QgYSBnaXQgcmVwb3NpdG9yeTogXCIkb3JpZ19naXRcIiIKKworY2FzZSAiJGdpdF9kaXIiIGluCisuZ2l0KQorCWdpdF9kaXI9IiRvcmlnX2dpdC8uZ2l0IgorCTs7CisuKQorCWdpdF9kaXI9JG9yaWdfZ2l0CisJOzsKK2VzYWMKKworIyBkb24ndCBsaW5rIHRvIGEgY29uZmlndXJlZCBiYXJlIHJlcG9zaXRvcnkKK2lzYmFyZT0kKGdpdCAtLWdpdC1kaXI9IiRnaXRfZGlyIiBjb25maWcgLS1ib29sIC0tZ2V0IGNvcmUuYmFyZSkKK2lmIHRlc3QgenRydWUgPSB6JGlzYmFyZQordGhlbgorCWRpZSAiXCIkZ2l0X2RpclwiIGhhcyBjb3JlLmJhcmUgc2V0IHRvIHRydWUsIiBcCisJCSIgcmVtb3ZlIGZyb20gXCIkZ2l0X2Rpci9jb25maWdcIiB0byB1c2UgJDAiCitmaQorCisjIGRvbid0IGxpbmsgdG8gYSB3b3JrZGlyCitpZiB0ZXN0IC1oICIkZ2l0X2Rpci9jb25maWciCit0aGVuCisJZGllICJcIiRvcmlnX2dpdFwiIGlzIGEgd29ya2luZyBkaXJlY3Rvcnkgb25seSwgcGxlYXNlIHNwZWNpZnkiIFwKKwkJImEgY29tcGxldGUgcmVwb3NpdG9yeS4iCitmaQorCisjIGRvbid0IHJlY3JlYXRlIGEgd29ya2RpciBvdmVyIGFuIGV4aXN0aW5nIHJlcG9zaXRvcnkKK2lmIHRlc3QgLWUgIiRuZXdfd29ya2RpciIKK3RoZW4KKwlkaWUgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSAnJG5ld193b3JrZGlyJyBhbHJlYWR5IGV4aXN0cy4iCitmaQorCisjIG1ha2Ugc3VyZSB0aGUgbGlua3MgdXNlIGZ1bGwgcGF0aHMKK2dpdF9kaXI9JChjZCAiJGdpdF9kaXIiOyBwd2QpCisKKyMgY3JlYXRlIHRoZSB3b3JrZGlyCitta2RpciAtcCAiJG5ld193b3JrZGlyLy5naXQiIHx8IGRpZSAidW5hYmxlIHRvIGNyZWF0ZSBcIiRuZXdfd29ya2RpclwiISIKKworIyBjcmVhdGUgdGhlIGxpbmtzIHRvIHRoZSBvcmlnaW5hbCByZXBvLiAgZXhwbGljaXRseSBleGNsdWRlIGluZGV4LCBIRUFEIGFuZAorIyBsb2dzL0hFQUQgZnJvbSB0aGUgbGlzdCBzaW5jZSB0aGV5IGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aGUgY3VycmVudCB3b3JraW5nCisjIGRpcmVjdG9yeSwgYW5kIHNob3VsZCBub3QgYmUgc2hhcmVkLgorZm9yIHggaW4gY29uZmlnIHJlZnMgbG9ncy9yZWZzIG9iamVjdHMgaW5mbyBob29rcyBwYWNrZWQtcmVmcyByZW1vdGVzIHJyLWNhY2hlIHN2bgorZG8KKwljYXNlICR4IGluCisJKi8qKQorCQlta2RpciAtcCAiJChkaXJuYW1lICIkbmV3X3dvcmtkaXIvLmdpdC8keCIpIgorCQk7OworCWVzYWMKKwlsbiAtcyAiJGdpdF9kaXIvJHgiICIkbmV3X3dvcmtkaXIvLmdpdC8keCIKK2RvbmUKKworIyBub3cgc2V0dXAgdGhlIHdvcmtkaXIKK2NkICIkbmV3X3dvcmtkaXIiCisjIGNvcHkgdGhlIEhFQUQgZnJvbSB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yeSBhcyBhIGRlZmF1bHQgYnJhbmNoCitjcCAiJGdpdF9kaXIvSEVBRCIgLmdpdC9IRUFECisjIGNoZWNrb3V0IHRoZSBicmFuY2ggKGVpdGhlciB0aGUgc2FtZSBhcyBIRUFEIGZyb20gdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnksIG9yCisjIHRoZSBvbmUgdGhhdCB3YXMgYXNrZWQgZm9yKQorZ2l0IGNoZWNrb3V0IC1mICRicmFuY2gKZGlmZiAtLWdpdCBhL2NvbnZlcnQuYyBiL2NvbnZlcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjAyMTU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udmVydC5jCkBAIC0wLDAgKzEsMTMyNCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorCisvKgorICogY29udmVydC5jIC0gY29udmVydCBhIGZpbGUgd2hlbiBjaGVja2luZyBpdCBvdXQgYW5kIGNoZWNraW5nIGl0IGluLgorICoKKyAqIFRoaXMgc2hvdWxkIHVzZSB0aGUgcGF0aG5hbWUgdG8gZGVjaWRlIG9uIHdoZXRoZXIgaXQgd2FudHMgdG8gZG8gc29tZQorICogbW9yZSBpbnRlcmVzdGluZyBjb252ZXJzaW9ucyAoYXV0b21hdGljIGd6aXAvdW56aXAsIGdlbmVyYWwgZm9ybWF0CisgKiBjb252ZXJzaW9ucyBldGMgZXRjKSwgYnV0IGJ5IGRlZmF1bHQgaXQganVzdCBkb2VzIGF1dG9tYXRpYyBDUkxGPC0+TEYKKyAqIHRyYW5zbGF0aW9uIHdoZW4gdGhlICJ0ZXh0IiBhdHRyaWJ1dGUgb3IgImF1dG9fY3JsZiIgb3B0aW9uIGlzIHNldC4KKyAqLworCitlbnVtIGNybGZfYWN0aW9uIHsKKwlDUkxGX0dVRVNTID0gLTEsCisJQ1JMRl9CSU5BUlkgPSAwLAorCUNSTEZfVEVYVCwKKwlDUkxGX0lOUFVULAorCUNSTEZfQ1JMRiwKKwlDUkxGX0FVVE8KK307CisKK3N0cnVjdCB0ZXh0X3N0YXQgeworCS8qIE5VTCwgQ1IsIExGIGFuZCBDUkxGIGNvdW50cyAqLworCXVuc2lnbmVkIG51bCwgY3IsIGxmLCBjcmxmOworCisJLyogVGhlc2UgYXJlIGp1c3QgYXBwcm94aW1hdGlvbnMhICovCisJdW5zaWduZWQgcHJpbnRhYmxlLCBub25wcmludGFibGU7Cit9OworCitzdGF0aWMgdm9pZCBnYXRoZXJfc3RhdHMoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCB0ZXh0X3N0YXQgKnN0YXRzKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSBidWZbaV07CisJCWlmIChjID09ICdccicpIHsKKwkJCXN0YXRzLT5jcisrOworCQkJaWYgKGkrMSA8IHNpemUgJiYgYnVmW2krMV0gPT0gJ1xuJykKKwkJCQlzdGF0cy0+Y3JsZisrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gJ1xuJykgeworCQkJc3RhdHMtPmxmKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYyA9PSAxMjcpCisJCQkvKiBERUwgKi8KKwkJCXN0YXRzLT5ub25wcmludGFibGUrKzsKKwkJZWxzZSBpZiAoYyA8IDMyKSB7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCQkvKiBCUywgSFQsIEVTQyBhbmQgRkYgKi8KKwkJCWNhc2UgJ1xiJzogY2FzZSAnXHQnOiBjYXNlICdcMDMzJzogY2FzZSAnXDAxNCc6CisJCQkJc3RhdHMtPnByaW50YWJsZSsrOworCQkJCWJyZWFrOworCQkJY2FzZSAwOgorCQkJCXN0YXRzLT5udWwrKzsKKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJc3RhdHMtPm5vbnByaW50YWJsZSsrOworCQkJfQorCQl9CisJCWVsc2UKKwkJCXN0YXRzLT5wcmludGFibGUrKzsKKwl9CisKKwkvKiBJZiBmaWxlIGVuZHMgd2l0aCBFT0YgdGhlbiBkb24ndCBjb3VudCB0aGlzIEVPRiBhcyBub24tcHJpbnRhYmxlLiAqLworCWlmIChzaXplID49IDEgJiYgYnVmW3NpemUtMV0gPT0gJ1wwMzInKQorCQlzdGF0cy0+bm9ucHJpbnRhYmxlLS07Cit9CisKKy8qCisgKiBUaGUgc2FtZSBoZXVyaXN0aWNzIGFzIGRpZmYuYzo6bW1maWxlX2lzX2JpbmFyeSgpCisgKi8KK3N0YXRpYyBpbnQgaXNfYmluYXJ5KHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHRleHRfc3RhdCAqc3RhdHMpCit7CisKKwlpZiAoc3RhdHMtPm51bCkKKwkJcmV0dXJuIDE7CisJaWYgKChzdGF0cy0+cHJpbnRhYmxlID4+IDcpIDwgc3RhdHMtPm5vbnByaW50YWJsZSkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiBPdGhlciBoZXVyaXN0aWNzPyBBdmVyYWdlIGxpbmUgbGVuZ3RoIG1pZ2h0IGJlIHJlbGV2YW50LAorCSAqIGFzIG1pZ2h0IExGIHZzIENSIHZzIENSTEYgY291bnRzLi4KKwkgKgorCSAqIE5PVEUhIEl0IG1pZ2h0IGJlIG5vcm1hbCB0byBoYXZlIGEgbG93IHJhdGlvIG9mIENSTEYgdG8gTEYKKwkgKiAoc29tZWJvZHkgc3RhcnRzIHdpdGggYSBMRi1vbmx5IGZpbGUgYW5kIGVkaXRzIGl0IHdpdGggYW4gZWRpdG9yCisJICogdGhhdCBhZGRzIENSTEYgb25seSB0byBsaW5lcyB0aGF0IGFyZSBhZGRlZC4uKS4gQnV0IGRvICB3ZQorCSAqIHdhbnQgdG8gc3VwcG9ydCBDUi1vbmx5PyBQcm9iYWJseSBub3QuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGVvbCBvdXRwdXRfZW9sKGVudW0gY3JsZl9hY3Rpb24gY3JsZl9hY3Rpb24pCit7CisJc3dpdGNoIChjcmxmX2FjdGlvbikgeworCWNhc2UgQ1JMRl9CSU5BUlk6CisJCXJldHVybiBFT0xfVU5TRVQ7CisJY2FzZSBDUkxGX0NSTEY6CisJCXJldHVybiBFT0xfQ1JMRjsKKwljYXNlIENSTEZfSU5QVVQ6CisJCXJldHVybiBFT0xfTEY7CisJY2FzZSBDUkxGX0dVRVNTOgorCQlpZiAoIWF1dG9fY3JsZikKKwkJCXJldHVybiBFT0xfVU5TRVQ7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ1JMRl9URVhUOgorCWNhc2UgQ1JMRl9BVVRPOgorCQlpZiAoYXV0b19jcmxmID09IEFVVE9fQ1JMRl9UUlVFKQorCQkJcmV0dXJuIEVPTF9DUkxGOworCQllbHNlIGlmIChhdXRvX2NybGYgPT0gQVVUT19DUkxGX0lOUFVUKQorCQkJcmV0dXJuIEVPTF9MRjsKKwkJZWxzZSBpZiAoY29yZV9lb2wgPT0gRU9MX1VOU0VUKQorCQkJcmV0dXJuIEVPTF9OQVRJVkU7CisJfQorCXJldHVybiBjb3JlX2VvbDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfc2FmZV9jcmxmKGNvbnN0IGNoYXIgKnBhdGgsIGVudW0gY3JsZl9hY3Rpb24gY3JsZl9hY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRleHRfc3RhdCAqc3RhdHMsIGVudW0gc2FmZV9jcmxmIGNoZWNrc2FmZSkKK3sKKwlpZiAoIWNoZWNrc2FmZSkKKwkJcmV0dXJuOworCisJaWYgKG91dHB1dF9lb2woY3JsZl9hY3Rpb24pID09IEVPTF9MRikgeworCQkvKgorCQkgKiBDUkxGcyB3b3VsZCBub3QgYmUgcmVzdG9yZWQgYnkgY2hlY2tvdXQ6CisJCSAqIGNoZWNrIGlmIHdlJ2QgcmVtb3ZlIENSTEZzCisJCSAqLworCQlpZiAoc3RhdHMtPmNybGYpIHsKKwkJCWlmIChjaGVja3NhZmUgPT0gU0FGRV9DUkxGX1dBUk4pCisJCQkJd2FybmluZygiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4iLCBwYXRoKTsKKwkJCWVsc2UgLyogaS5lLiBTQUZFX0NSTEZfRkFJTCAqLworCQkJCWRpZSgiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy4iLCBwYXRoKTsKKwkJfQorCX0gZWxzZSBpZiAob3V0cHV0X2VvbChjcmxmX2FjdGlvbikgPT0gRU9MX0NSTEYpIHsKKwkJLyoKKwkJICogQ1JMRnMgd291bGQgYmUgYWRkZWQgYnkgY2hlY2tvdXQ6CisJCSAqIGNoZWNrIGlmIHdlIGhhdmUgIm5ha2VkIiBMRnMKKwkJICovCisJCWlmIChzdGF0cy0+bGYgIT0gc3RhdHMtPmNybGYpIHsKKwkJCWlmIChjaGVja3NhZmUgPT0gU0FGRV9DUkxGX1dBUk4pCisJCQkJd2FybmluZygiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4iLCBwYXRoKTsKKwkJCWVsc2UgLyogaS5lLiBTQUZFX0NSTEZfRkFJTCAqLworCQkJCWRpZSgiTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcyIsIHBhdGgpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGhhc19jcl9pbl9pbmRleChjb25zdCBjaGFyICpwYXRoKQoreworCWludCBwb3MsIGxlbjsKKwl1bnNpZ25lZCBsb25nIHN6OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpkYXRhOworCWludCBoYXNfY3I7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSAmdGhlX2luZGV4OworCisJbGVuID0gc3RybGVuKHBhdGgpOworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgbGVuKTsKKwlpZiAocG9zIDwgMCkgeworCQkvKgorCQkgKiBXZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UsIGluIHdoaWNoCisJCSAqIGNhc2Ugd2Ugd291bGQgcmVhZCBzdGFnZSAjMiAob3VycykuCisJCSAqLworCQlpbnQgaTsKKwkJZm9yIChpID0gLXBvcyAtIDE7CisJCSAgICAgKHBvcyA8IDAgJiYgaSA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYKKwkJICAgICAgIXN0cmNtcChpc3RhdGUtPmNhY2hlW2ldLT5uYW1lLCBwYXRoKSk7CisJCSAgICAgaSsrKQorCQkJaWYgKGNlX3N0YWdlKGlzdGF0ZS0+Y2FjaGVbaV0pID09IDIpCisJCQkJcG9zID0gaTsKKwl9CisJaWYgKHBvcyA8IDApCisJCXJldHVybiAwOworCWRhdGEgPSByZWFkX3NoYTFfZmlsZShpc3RhdGUtPmNhY2hlW3Bvc10tPnNoYTEsICZ0eXBlLCAmc3opOworCWlmICghZGF0YSB8fCB0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiAwOworCX0KKworCWhhc19jciA9IG1lbWNocihkYXRhLCAnXHInLCBzeikgIT0gTlVMTDsKKwlmcmVlKGRhdGEpOworCXJldHVybiBoYXNfY3I7Cit9CisKK3N0YXRpYyBpbnQgY3JsZl90b19naXQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkgICAgICAgZW51bSBjcmxmX2FjdGlvbiBjcmxmX2FjdGlvbiwgZW51bSBzYWZlX2NybGYgY2hlY2tzYWZlKQoreworCXN0cnVjdCB0ZXh0X3N0YXQgc3RhdHM7CisJY2hhciAqZHN0OworCisJaWYgKGNybGZfYWN0aW9uID09IENSTEZfQklOQVJZIHx8CisJICAgIChjcmxmX2FjdGlvbiA9PSBDUkxGX0dVRVNTICYmIGF1dG9fY3JsZiA9PSBBVVRPX0NSTEZfRkFMU0UpIHx8CisJICAgIChzcmMgJiYgIWxlbikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgYSBkcnktcnVuIGFuZCBoYXZlIG5vIHNvdXJjZSBidWZmZXIsIHRoZXJlIGlzCisJICogbm90aGluZyB0byBhbmFseXplOyB3ZSBtdXN0IGFzc3VtZSB3ZSB3b3VsZCBjb252ZXJ0LgorCSAqLworCWlmICghYnVmICYmICFzcmMpCisJCXJldHVybiAxOworCisJZ2F0aGVyX3N0YXRzKHNyYywgbGVuLCAmc3RhdHMpOworCisJaWYgKGNybGZfYWN0aW9uID09IENSTEZfQVVUTyB8fCBjcmxmX2FjdGlvbiA9PSBDUkxGX0dVRVNTKSB7CisJCS8qCisJCSAqIFdlJ3JlIGN1cnJlbnRseSBub3QgZ29pbmcgdG8gZXZlbiB0cnkgdG8gY29udmVydCBzdHVmZgorCQkgKiB0aGF0IGhhcyBiYXJlIENSIGNoYXJhY3RlcnMuIERvZXMgYW55Ym9keSBkbyB0aGF0IGNyYXp5CisJCSAqIHN0dWZmPworCQkgKi8KKwkJaWYgKHN0YXRzLmNyICE9IHN0YXRzLmNybGYpCisJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBBbmQgYWRkIHNvbWUgaGV1cmlzdGljcyBmb3IgYmluYXJ5IHZzIHRleHQsIG9mIGNvdXJzZS4uLgorCQkgKi8KKwkJaWYgKGlzX2JpbmFyeShsZW4sICZzdGF0cykpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoY3JsZl9hY3Rpb24gPT0gQ1JMRl9HVUVTUykgeworCQkJLyoKKwkJCSAqIElmIHRoZSBmaWxlIGluIHRoZSBpbmRleCBoYXMgYW55IENSIGluIGl0LCBkbyBub3QgY29udmVydC4KKwkJCSAqIFRoaXMgaXMgdGhlIG5ldyBzYWZlciBhdXRvY3JsZiBoYW5kbGluZy4KKwkJCSAqLworCQkJaWYgKGhhc19jcl9pbl9pbmRleChwYXRoKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWNoZWNrX3NhZmVfY3JsZihwYXRoLCBjcmxmX2FjdGlvbiwgJnN0YXRzLCBjaGVja3NhZmUpOworCisJLyogT3B0aW1pemF0aW9uOiBObyBDUj8gTm90aGluZyB0byBjb252ZXJ0LCByZWdhcmRsZXNzLiAqLworCWlmICghc3RhdHMuY3IpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IGFsbCBvZiBvdXIgc291cmNlIGFuYWx5c2lzIGlzIGRvbmUsIGFuZCB3ZSBhcmUgc3VyZSB3ZQorCSAqIHdvdWxkIGNvbnZlcnQuIElmIHdlIGFyZSBpbiBkcnktcnVuIG1vZGUsIHdlIGNhbiBnaXZlIGFuIGFuc3dlci4KKwkgKi8KKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDE7CisKKwkvKiBvbmx5IGdyb3cgaWYgbm90IGluIHBsYWNlICovCisJaWYgKHN0cmJ1Zl9hdmFpbChidWYpICsgYnVmLT5sZW4gPCBsZW4pCisJCXN0cmJ1Zl9ncm93KGJ1ZiwgbGVuIC0gYnVmLT5sZW4pOworCWRzdCA9IGJ1Zi0+YnVmOworCWlmIChjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE8gfHwgY3JsZl9hY3Rpb24gPT0gQ1JMRl9HVUVTUykgeworCQkvKgorCQkgKiBJZiB3ZSBndWVzc2VkLCB3ZSBhbHJlYWR5IGtub3cgd2UgcmVqZWN0ZWQgYSBmaWxlIHdpdGgKKwkJICogbG9uZSBDUiwgYW5kIHdlIGNhbiBzdHJpcCBhIENSIHdpdGhvdXQgbG9va2luZyBhdCB3aGF0CisJCSAqIGZvbGxvdyBpdC4KKwkJICovCisJCWRvIHsKKwkJCXVuc2lnbmVkIGNoYXIgYyA9ICpzcmMrKzsKKwkJCWlmIChjICE9ICdccicpCisJCQkJKmRzdCsrID0gYzsKKwkJfSB3aGlsZSAoLS1sZW4pOworCX0gZWxzZSB7CisJCWRvIHsKKwkJCXVuc2lnbmVkIGNoYXIgYyA9ICpzcmMrKzsKKwkJCWlmICghIChjID09ICdccicgJiYgKDEgPCBsZW4gJiYgKnNyYyA9PSAnXG4nKSkpCisJCQkJKmRzdCsrID0gYzsKKwkJfSB3aGlsZSAoLS1sZW4pOworCX0KKwlzdHJidWZfc2V0bGVuKGJ1ZiwgZHN0IC0gYnVmLT5idWYpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNybGZfdG9fd29ya3RyZWUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwgZW51bSBjcmxmX2FjdGlvbiBjcmxmX2FjdGlvbikKK3sKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKwlzdHJ1Y3QgdGV4dF9zdGF0IHN0YXRzOworCisJaWYgKCFsZW4gfHwgb3V0cHV0X2VvbChjcmxmX2FjdGlvbikgIT0gRU9MX0NSTEYpCisJCXJldHVybiAwOworCisJZ2F0aGVyX3N0YXRzKHNyYywgbGVuLCAmc3RhdHMpOworCisJLyogTm8gTEY/IE5vdGhpbmcgdG8gY29udmVydCwgcmVnYXJkbGVzcy4gKi8KKwlpZiAoIXN0YXRzLmxmKQorCQlyZXR1cm4gMDsKKworCS8qIFdhcyBpdCBhbHJlYWR5IGluIENSTEYgZm9ybWF0PyAqLworCWlmIChzdGF0cy5sZiA9PSBzdGF0cy5jcmxmKQorCQlyZXR1cm4gMDsKKworCWlmIChjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE8gfHwgY3JsZl9hY3Rpb24gPT0gQ1JMRl9HVUVTUykgeworCQlpZiAoY3JsZl9hY3Rpb24gPT0gQ1JMRl9HVUVTUykgeworCQkJLyogSWYgd2UgaGF2ZSBhbnkgQ1Igb3IgQ1JMRiBsaW5lIGVuZGluZ3MsIHdlIGRvIG5vdCB0b3VjaCBpdCAqLworCQkJLyogVGhpcyBpcyB0aGUgbmV3IHNhZmVyIGF1dG9jcmxmLWhhbmRsaW5nICovCisJCQlpZiAoc3RhdHMuY3IgPiAwIHx8IHN0YXRzLmNybGYgPiAwKQorCQkJCXJldHVybiAwOworCQl9CisKKwkJLyogSWYgd2UgaGF2ZSBhbnkgYmFyZSBDUiBjaGFyYWN0ZXJzLCB3ZSdyZSBub3QgZ29pbmcgdG8gdG91Y2ggaXQgKi8KKwkJaWYgKHN0YXRzLmNyICE9IHN0YXRzLmNybGYpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoaXNfYmluYXJ5KGxlbiwgJnN0YXRzKSkKKwkJCXJldHVybiAwOworCX0KKworCS8qIGFyZSB3ZSAiZmFraW5nIiBpbiBwbGFjZSBlZGl0aW5nID8gKi8KKwlpZiAoc3JjID09IGJ1Zi0+YnVmKQorCQl0b19mcmVlID0gc3RyYnVmX2RldGFjaChidWYsIE5VTEwpOworCisJc3RyYnVmX2dyb3coYnVmLCBsZW4gKyBzdGF0cy5sZiAtIHN0YXRzLmNybGYpOworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqbmwgPSBtZW1jaHIoc3JjLCAnXG4nLCBsZW4pOworCQlpZiAoIW5sKQorCQkJYnJlYWs7CisJCWlmIChubCA+IHNyYyAmJiBubFstMV0gPT0gJ1xyJykgeworCQkJc3RyYnVmX2FkZChidWYsIHNyYywgbmwgKyAxIC0gc3JjKTsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIG5sIC0gc3JjKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiXHJcbiIpOworCQl9CisJCWxlbiAtPSBubCArIDEgLSBzcmM7CisJCXNyYyAgPSBubCArIDE7CisJfQorCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIGxlbik7CisKKwlmcmVlKHRvX2ZyZWUpOworCXJldHVybiAxOworfQorCitzdHJ1Y3QgZmlsdGVyX3BhcmFtcyB7CisJY29uc3QgY2hhciAqc3JjOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwljb25zdCBjaGFyICpjbWQ7CisJY29uc3QgY2hhciAqcGF0aDsKK307CisKK3N0YXRpYyBpbnQgZmlsdGVyX2J1ZmZlcihpbnQgaW4sIGludCBvdXQsIHZvaWQgKmRhdGEpCit7CisJLyoKKwkgKiBTcGF3biBjbWQgYW5kIGZlZWQgdGhlIGJ1ZmZlciBjb250ZW50cyB0aHJvdWdoIGl0cyBzdGRpbi4KKwkgKi8KKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZF9wcm9jZXNzOworCXN0cnVjdCBmaWx0ZXJfcGFyYW1zICpwYXJhbXMgPSAoc3RydWN0IGZpbHRlcl9wYXJhbXMgKilkYXRhOworCWludCB3cml0ZV9lcnIsIHN0YXR1czsKKwljb25zdCBjaGFyICphcmd2W10gPSB7IE5VTEwsIE5VTEwgfTsKKworCS8qIGFwcGx5ICUgc3Vic3RpdHV0aW9uIHRvIGNtZCAqLworCXN0cnVjdCBzdHJidWYgY21kID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1Zl9leHBhbmRfZGljdF9lbnRyeSBkaWN0W10gPSB7CisJCXsgImYiLCBOVUxMLCB9LAorCQl7IE5VTEwsIE5VTEwsIH0sCisJfTsKKworCS8qIHF1b3RlIHRoZSBwYXRoIHRvIHByZXNlcnZlIHNwYWNlcywgZXRjLiAqLworCXNxX3F1b3RlX2J1ZigmcGF0aCwgcGFyYW1zLT5wYXRoKTsKKwlkaWN0WzBdLnZhbHVlID0gcGF0aC5idWY7CisKKwkvKiBleHBhbmQgYWxsICVmIHdpdGggdGhlIHF1b3RlZCBwYXRoICovCisJc3RyYnVmX2V4cGFuZCgmY21kLCBwYXJhbXMtPmNtZCwgc3RyYnVmX2V4cGFuZF9kaWN0X2NiLCAmZGljdCk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCisJYXJndlswXSA9IGNtZC5idWY7CisKKwltZW1zZXQoJmNoaWxkX3Byb2Nlc3MsIDAsIHNpemVvZihjaGlsZF9wcm9jZXNzKSk7CisJY2hpbGRfcHJvY2Vzcy5hcmd2ID0gYXJndjsKKwljaGlsZF9wcm9jZXNzLnVzZV9zaGVsbCA9IDE7CisJY2hpbGRfcHJvY2Vzcy5pbiA9IC0xOworCWNoaWxkX3Byb2Nlc3Mub3V0ID0gb3V0OworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNoaWxkX3Byb2Nlc3MpKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJXMiLCBwYXJhbXMtPmNtZCk7CisKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJd3JpdGVfZXJyID0gKHdyaXRlX2luX2Z1bGwoY2hpbGRfcHJvY2Vzcy5pbiwgcGFyYW1zLT5zcmMsIHBhcmFtcy0+c2l6ZSkgPCAwKTsKKwlpZiAoY2xvc2UoY2hpbGRfcHJvY2Vzcy5pbikpCisJCXdyaXRlX2VyciA9IDE7CisJaWYgKHdyaXRlX2VycikKKwkJZXJyb3IoImNhbm5vdCBmZWVkIHRoZSBpbnB1dCB0byBleHRlcm5hbCBmaWx0ZXIgJXMiLCBwYXJhbXMtPmNtZCk7CisKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwlzdGF0dXMgPSBmaW5pc2hfY29tbWFuZCgmY2hpbGRfcHJvY2Vzcyk7CisJaWYgKHN0YXR1cykKKwkJZXJyb3IoImV4dGVybmFsIGZpbHRlciAlcyBmYWlsZWQgJWQiLCBwYXJhbXMtPmNtZCwgc3RhdHVzKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZjbWQpOworCXJldHVybiAod3JpdGVfZXJyIHx8IHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfZmlsdGVyKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqY21kKQoreworCS8qCisJICogQ3JlYXRlIGEgcGlwZWxpbmUgdG8gaGF2ZSB0aGUgY29tbWFuZCBmaWx0ZXIgdGhlIGJ1ZmZlcidzCisJICogY29udGVudHMuCisJICoKKwkgKiAoY2hpbGQgLS0+IGNtZCkgLS0+IHVzCisJICovCisJaW50IHJldCA9IDE7CisJc3RydWN0IHN0cmJ1ZiBuYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGFzeW5jIGFzeW5jOworCXN0cnVjdCBmaWx0ZXJfcGFyYW1zIHBhcmFtczsKKworCWlmICghY21kKQorCQlyZXR1cm4gMDsKKworCWlmICghZHN0KQorCQlyZXR1cm4gMTsKKworCW1lbXNldCgmYXN5bmMsIDAsIHNpemVvZihhc3luYykpOworCWFzeW5jLnByb2MgPSBmaWx0ZXJfYnVmZmVyOworCWFzeW5jLmRhdGEgPSAmcGFyYW1zOworCWFzeW5jLm91dCA9IC0xOworCXBhcmFtcy5zcmMgPSBzcmM7CisJcGFyYW1zLnNpemUgPSBsZW47CisJcGFyYW1zLmNtZCA9IGNtZDsKKwlwYXJhbXMucGF0aCA9IHBhdGg7CisKKwlmZmx1c2goTlVMTCk7CisJaWYgKHN0YXJ0X2FzeW5jKCZhc3luYykpCisJCXJldHVybiAwOwkvKiBlcnJvciB3YXMgYWxyZWFkeSByZXBvcnRlZCAqLworCisJaWYgKHN0cmJ1Zl9yZWFkKCZuYnVmLCBhc3luYy5vdXQsIGxlbikgPCAwKSB7CisJCWVycm9yKCJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICVzIGZhaWxlZCIsIGNtZCk7CisJCXJldCA9IDA7CisJfQorCWlmIChjbG9zZShhc3luYy5vdXQpKSB7CisJCWVycm9yKCJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICVzIGZhaWxlZCIsIGNtZCk7CisJCXJldCA9IDA7CisJfQorCWlmIChmaW5pc2hfYXN5bmMoJmFzeW5jKSkgeworCQllcnJvcigiZXh0ZXJuYWwgZmlsdGVyICVzIGZhaWxlZCIsIGNtZCk7CisJCXJldCA9IDA7CisJfQorCisJaWYgKHJldCkgeworCQlzdHJidWZfc3dhcChkc3QsICZuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJm5idWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29udmVydF9kcml2ZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGNvbnZlcnRfZHJpdmVyICpuZXh0OworCWNvbnN0IGNoYXIgKnNtdWRnZTsKKwljb25zdCBjaGFyICpjbGVhbjsKKwlpbnQgcmVxdWlyZWQ7Cit9ICp1c2VyX2NvbnZlcnQsICoqdXNlcl9jb252ZXJ0X3RhaWw7CisKK3N0YXRpYyBpbnQgcmVhZF9jb252ZXJ0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICplcCwgKm5hbWU7CisJaW50IG5hbWVsZW47CisJc3RydWN0IGNvbnZlcnRfZHJpdmVyICpkcnY7CisKKwkvKgorCSAqIEV4dGVybmFsIGNvbnZlcnNpb24gZHJpdmVycyBhcmUgY29uZmlndXJlZCB1c2luZworCSAqICJmaWx0ZXIuPG5hbWU+LnZhcmlhYmxlIi4KKwkgKi8KKwlpZiAocHJlZml4Y21wKHZhciwgImZpbHRlci4iKSB8fCAoZXAgPSBzdHJyY2hyKHZhciwgJy4nKSkgPT0gdmFyICsgNikKKwkJcmV0dXJuIDA7CisJbmFtZSA9IHZhciArIDc7CisJbmFtZWxlbiA9IGVwIC0gbmFtZTsKKwlmb3IgKGRydiA9IHVzZXJfY29udmVydDsgZHJ2OyBkcnYgPSBkcnYtPm5leHQpCisJCWlmICghc3RybmNtcChkcnYtPm5hbWUsIG5hbWUsIG5hbWVsZW4pICYmICFkcnYtPm5hbWVbbmFtZWxlbl0pCisJCQlicmVhazsKKwlpZiAoIWRydikgeworCQlkcnYgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY29udmVydF9kcml2ZXIpKTsKKwkJZHJ2LT5uYW1lID0geG1lbWR1cHoobmFtZSwgbmFtZWxlbik7CisJCSp1c2VyX2NvbnZlcnRfdGFpbCA9IGRydjsKKwkJdXNlcl9jb252ZXJ0X3RhaWwgPSAmKGRydi0+bmV4dCk7CisJfQorCisJZXArKzsKKworCS8qCisJICogZmlsdGVyLjxuYW1lPi5zbXVkZ2UgYW5kIGZpbHRlci48bmFtZT4uY2xlYW4gc3BlY2lmaWVzCisJICogdGhlIGNvbW1hbmQgbGluZToKKwkgKgorCSAqCWNvbW1hbmQtbGluZQorCSAqCisJICogVGhlIGNvbW1hbmQtbGluZSB3aWxsIG5vdCBiZSBpbnRlcnBvbGF0ZWQgaW4gYW55IHdheS4KKwkgKi8KKworCWlmICghc3RyY21wKCJzbXVkZ2UiLCBlcCkpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZHJ2LT5zbXVkZ2UsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImNsZWFuIiwgZXApKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+Y2xlYW4sIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoInJlcXVpcmVkIiwgZXApKSB7CisJCWRydi0+cmVxdWlyZWQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvdW50X2lkZW50KGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJLyoKKwkgKiAiJElkOiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICQiIDw9PiAiJElkJCIKKwkgKi8KKwlpbnQgY250ID0gMDsKKwljaGFyIGNoOworCisJd2hpbGUgKHNpemUpIHsKKwkJY2ggPSAqY3ArKzsKKwkJc2l6ZS0tOworCQlpZiAoY2ggIT0gJyQnKQorCQkJY29udGludWU7CisJCWlmIChzaXplIDwgMykKKwkJCWJyZWFrOworCQlpZiAobWVtY21wKCJJZCIsIGNwLCAyKSkKKwkJCWNvbnRpbnVlOworCQljaCA9IGNwWzJdOworCQljcCArPSAzOworCQlzaXplIC09IDM7CisJCWlmIChjaCA9PSAnJCcpCisJCQljbnQrKzsgLyogJElkJCAqLworCQlpZiAoY2ggIT0gJzonKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogIiRJZDogLi4uICI7IHNjYW4gdXAgdG8gdGhlIGNsb3NpbmcgZG9sbGFyIHNpZ24gYW5kIGRpc2NhcmQuCisJCSAqLworCQl3aGlsZSAoc2l6ZSkgeworCQkJY2ggPSAqY3ArKzsKKwkJCXNpemUtLTsKKwkJCWlmIChjaCA9PSAnJCcpIHsKKwkJCQljbnQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjaCA9PSAnXG4nKQorCQkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQgaWRlbnRfdG9fZ2l0KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IGlkZW50KQoreworCWNoYXIgKmRzdCwgKmRvbGxhcjsKKworCWlmICghaWRlbnQgfHwgKHNyYyAmJiAhY291bnRfaWRlbnQoc3JjLCBsZW4pKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDE7CisKKwkvKiBvbmx5IGdyb3cgaWYgbm90IGluIHBsYWNlICovCisJaWYgKHN0cmJ1Zl9hdmFpbChidWYpICsgYnVmLT5sZW4gPCBsZW4pCisJCXN0cmJ1Zl9ncm93KGJ1ZiwgbGVuIC0gYnVmLT5sZW4pOworCWRzdCA9IGJ1Zi0+YnVmOworCWZvciAoOzspIHsKKwkJZG9sbGFyID0gbWVtY2hyKHNyYywgJyQnLCBsZW4pOworCQlpZiAoIWRvbGxhcikKKwkJCWJyZWFrOworCQltZW1tb3ZlKGRzdCwgc3JjLCBkb2xsYXIgKyAxIC0gc3JjKTsKKwkJZHN0ICs9IGRvbGxhciArIDEgLSBzcmM7CisJCWxlbiAtPSBkb2xsYXIgKyAxIC0gc3JjOworCQlzcmMgID0gZG9sbGFyICsgMTsKKworCQlpZiAobGVuID4gMyAmJiAhbWVtY21wKHNyYywgIklkOiIsIDMpKSB7CisJCQlkb2xsYXIgPSBtZW1jaHIoc3JjICsgMywgJyQnLCBsZW4gLSAzKTsKKwkJCWlmICghZG9sbGFyKQorCQkJCWJyZWFrOworCQkJaWYgKG1lbWNocihzcmMgKyAzLCAnXG4nLCBkb2xsYXIgLSBzcmMgLSAzKSkgeworCQkJCS8qIExpbmUgYnJlYWsgYmVmb3JlIHRoZSBuZXh0IGRvbGxhci4gKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbWVtY3B5KGRzdCwgIklkJCIsIDMpOworCQkJZHN0ICs9IDM7CisJCQlsZW4gLT0gZG9sbGFyICsgMSAtIHNyYzsKKwkJCXNyYyAgPSBkb2xsYXIgKyAxOworCQl9CisJfQorCW1lbW1vdmUoZHN0LCBzcmMsIGxlbik7CisJc3RyYnVmX3NldGxlbihidWYsIGRzdCArIGxlbiAtIGJ1Zi0+YnVmKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpZGVudF90b193b3JrdHJlZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IGlkZW50KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciAqdG9fZnJlZSA9IE5VTEwsICpkb2xsYXIsICpzcGM7CisJaW50IGNudDsKKworCWlmICghaWRlbnQpCisJCXJldHVybiAwOworCisJY250ID0gY291bnRfaWRlbnQoc3JjLCBsZW4pOworCWlmICghY250KQorCQlyZXR1cm4gMDsKKworCS8qIGFyZSB3ZSAiZmFraW5nIiBpbiBwbGFjZSBlZGl0aW5nID8gKi8KKwlpZiAoc3JjID09IGJ1Zi0+YnVmKQorCQl0b19mcmVlID0gc3RyYnVmX2RldGFjaChidWYsIE5VTEwpOworCWhhc2hfc2hhMV9maWxlKHNyYywgbGVuLCAiYmxvYiIsIHNoYTEpOworCisJc3RyYnVmX2dyb3coYnVmLCBsZW4gKyBjbnQgKiA0Myk7CisJZm9yICg7OykgeworCQkvKiBzdGVwIDE6IHJ1biB0byB0aGUgbmV4dCAnJCcgKi8KKwkJZG9sbGFyID0gbWVtY2hyKHNyYywgJyQnLCBsZW4pOworCQlpZiAoIWRvbGxhcikKKwkJCWJyZWFrOworCQlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBkb2xsYXIgKyAxIC0gc3JjKTsKKwkJbGVuIC09IGRvbGxhciArIDEgLSBzcmM7CisJCXNyYyAgPSBkb2xsYXIgKyAxOworCisJCS8qIHN0ZXAgMjogZG9lcyBpdCBsb29rcyBsaWtlIGEgYml0IGxpa2UgSWQ6eHh4JCBvciBJZCQgPyAqLworCQlpZiAobGVuIDwgMyB8fCBtZW1jbXAoIklkIiwgc3JjLCAyKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHN0ZXAgMzogc2tpcCBvdmVyIElkJCBvciBJZDp4eHh4eCQgKi8KKwkJaWYgKHNyY1syXSA9PSAnJCcpIHsKKwkJCXNyYyArPSAzOworCQkJbGVuIC09IDM7CisJCX0gZWxzZSBpZiAoc3JjWzJdID09ICc6JykgeworCQkJLyoKKwkJCSAqIEl0J3MgcG9zc2libGUgdGhhdCBhbiBleHBhbmRlZCBJZCBoYXMgY3JlcHQgaXRzIHdheSBpbnRvIHRoZQorCQkJICogcmVwb3NpdG9yeSwgd2UgY29wZSB3aXRoIHRoYXQgYnkgc3RyaXBwaW5nIHRoZSBleHBhbnNpb24gb3V0LgorCQkJICogVGhpcyBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEsIHNpbmNlIGl0IHdpbGwgY2F1c2UgY2hhbmdlcworCQkJICogb24gY2hlY2tvdXQsIHdoaWNoIHdvbid0IGdvIGF3YXkgYnkgc3Rhc2gsIGJ1dCBsZXQncyBrZWVwIGl0CisJCQkgKiBmb3IgZ2l0LXN0eWxlIGlkcy4KKwkJCSAqLworCQkJZG9sbGFyID0gbWVtY2hyKHNyYyArIDMsICckJywgbGVuIC0gMyk7CisJCQlpZiAoIWRvbGxhcikgeworCQkJCS8qIGluY29tcGxldGUga2V5d29yZCwgbm8gbW9yZSAnJCcsIHNvIGp1c3QgcXVpdCB0aGUgbG9vcCAqLworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAobWVtY2hyKHNyYyArIDMsICdcbicsIGRvbGxhciAtIHNyYyAtIDMpKSB7CisJCQkJLyogTGluZSBicmVhayBiZWZvcmUgdGhlIG5leHQgZG9sbGFyLiAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlzcGMgPSBtZW1jaHIoc3JjICsgNCwgJyAnLCBkb2xsYXIgLSBzcmMgLSA0KTsKKwkJCWlmIChzcGMgJiYgc3BjIDwgZG9sbGFyLTEpIHsKKwkJCQkvKiBUaGVyZSBhcmUgc3BhY2VzIGluIHVuZXhwZWN0ZWQgcGxhY2VzLgorCQkJCSAqIFRoaXMgaXMgcHJvYmFibHkgYW4gaWQgZnJvbSBzb21lIG90aGVyCisJCQkJICogdmVyc2lvbmluZyBzeXN0ZW0uIEtlZXAgaXQgZm9yIG5vdy4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbGVuIC09IGRvbGxhciArIDEgLSBzcmM7CisJCQlzcmMgID0gZG9sbGFyICsgMTsKKwkJfSBlbHNlIHsKKwkJCS8qIGl0IHdhc24ndCBhICJJZCQiIG9yICJJZDp4eHh4JCIgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogc3RlcCA0OiBzdWJzdGl0dXRlICovCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiSWQ6ICIpOworCQlzdHJidWZfYWRkKGJ1Ziwgc2hhMV90b19oZXgoc2hhMSksIDQwKTsKKwkJc3RyYnVmX2FkZHN0cihidWYsICIgJCIpOworCX0KKwlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBsZW4pOworCisJZnJlZSh0b19mcmVlKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGVudW0gY3JsZl9hY3Rpb24gZ2l0X3BhdGhfY2hlY2tfY3JsZihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrKQoreworCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2stPnZhbHVlOworCisJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpCisJCXJldHVybiBDUkxGX1RFWFQ7CisJZWxzZSBpZiAoQVRUUl9GQUxTRSh2YWx1ZSkpCisJCXJldHVybiBDUkxGX0JJTkFSWTsKKwllbHNlIGlmIChBVFRSX1VOU0VUKHZhbHVlKSkKKwkJOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpbnB1dCIpKQorCQlyZXR1cm4gQ1JMRl9JTlBVVDsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiYXV0byIpKQorCQlyZXR1cm4gQ1JMRl9BVVRPOworCXJldHVybiBDUkxGX0dVRVNTOworfQorCitzdGF0aWMgZW51bSBlb2wgZ2l0X3BhdGhfY2hlY2tfZW9sKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2spCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+dmFsdWU7CisKKwlpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpCisJCTsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibGYiKSkKKwkJcmV0dXJuIEVPTF9MRjsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiY3JsZiIpKQorCQlyZXR1cm4gRU9MX0NSTEY7CisJcmV0dXJuIEVPTF9VTlNFVDsKK30KKworc3RhdGljIHN0cnVjdCBjb252ZXJ0X2RyaXZlciAqZ2l0X3BhdGhfY2hlY2tfY29udmVydChjb25zdCBjaGFyICpwYXRoLAorCQkJCQkgICAgIHN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2spCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+dmFsdWU7CisJc3RydWN0IGNvbnZlcnRfZHJpdmVyICpkcnY7CisKKwlpZiAoQVRUUl9UUlVFKHZhbHVlKSB8fCBBVFRSX0ZBTFNFKHZhbHVlKSB8fCBBVFRSX1VOU0VUKHZhbHVlKSkKKwkJcmV0dXJuIE5VTEw7CisJZm9yIChkcnYgPSB1c2VyX2NvbnZlcnQ7IGRydjsgZHJ2ID0gZHJ2LT5uZXh0KQorCQlpZiAoIXN0cmNtcCh2YWx1ZSwgZHJ2LT5uYW1lKSkKKwkJCXJldHVybiBkcnY7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3BhdGhfY2hlY2tfaWRlbnQoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjaykKK3sKKwljb25zdCBjaGFyICp2YWx1ZSA9IGNoZWNrLT52YWx1ZTsKKworCXJldHVybiAhIUFUVFJfVFJVRSh2YWx1ZSk7Cit9CisKK3N0YXRpYyBlbnVtIGNybGZfYWN0aW9uIGlucHV0X2NybGZfYWN0aW9uKGVudW0gY3JsZl9hY3Rpb24gdGV4dF9hdHRyLCBlbnVtIGVvbCBlb2xfYXR0cikKK3sKKwlpZiAodGV4dF9hdHRyID09IENSTEZfQklOQVJZKQorCQlyZXR1cm4gQ1JMRl9CSU5BUlk7CisJaWYgKGVvbF9hdHRyID09IEVPTF9MRikKKwkJcmV0dXJuIENSTEZfSU5QVVQ7CisJaWYgKGVvbF9hdHRyID09IEVPTF9DUkxGKQorCQlyZXR1cm4gQ1JMRl9DUkxGOworCXJldHVybiB0ZXh0X2F0dHI7Cit9CisKK3N0cnVjdCBjb252X2F0dHJzIHsKKwlzdHJ1Y3QgY29udmVydF9kcml2ZXIgKmRydjsKKwllbnVtIGNybGZfYWN0aW9uIGNybGZfYWN0aW9uOworCWVudW0gZW9sIGVvbF9hdHRyOworCWludCBpZGVudDsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb252X2F0dHJfbmFtZVtdID0geworCSJjcmxmIiwgImlkZW50IiwgImZpbHRlciIsICJlb2wiLCAidGV4dCIsCit9OworI2RlZmluZSBOVU1fQ09OVl9BVFRSUyBBUlJBWV9TSVpFKGNvbnZfYXR0cl9uYW1lKQorCitzdGF0aWMgdm9pZCBjb252ZXJ0X2F0dHJzKHN0cnVjdCBjb252X2F0dHJzICpjYSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgaTsKKwlzdGF0aWMgc3RydWN0IGdpdF9hdHRyX2NoZWNrIGNjaGVja1tOVU1fQ09OVl9BVFRSU107CisKKwlpZiAoIWNjaGVja1swXS5hdHRyKSB7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVl9BVFRSUzsgaSsrKQorCQkJY2NoZWNrW2ldLmF0dHIgPSBnaXRfYXR0cihjb252X2F0dHJfbmFtZVtpXSk7CisJCXVzZXJfY29udmVydF90YWlsID0gJnVzZXJfY29udmVydDsKKwkJZ2l0X2NvbmZpZyhyZWFkX2NvbnZlcnRfY29uZmlnLCBOVUxMKTsKKwl9CisKKwlpZiAoIWdpdF9jaGVja19hdHRyKHBhdGgsIE5VTV9DT05WX0FUVFJTLCBjY2hlY2spKSB7CisJCWNhLT5jcmxmX2FjdGlvbiA9IGdpdF9wYXRoX2NoZWNrX2NybGYocGF0aCwgY2NoZWNrICsgNCk7CisJCWlmIChjYS0+Y3JsZl9hY3Rpb24gPT0gQ1JMRl9HVUVTUykKKwkJCWNhLT5jcmxmX2FjdGlvbiA9IGdpdF9wYXRoX2NoZWNrX2NybGYocGF0aCwgY2NoZWNrICsgMCk7CisJCWNhLT5pZGVudCA9IGdpdF9wYXRoX2NoZWNrX2lkZW50KHBhdGgsIGNjaGVjayArIDEpOworCQljYS0+ZHJ2ID0gZ2l0X3BhdGhfY2hlY2tfY29udmVydChwYXRoLCBjY2hlY2sgKyAyKTsKKwkJY2EtPmVvbF9hdHRyID0gZ2l0X3BhdGhfY2hlY2tfZW9sKHBhdGgsIGNjaGVjayArIDMpOworCX0gZWxzZSB7CisJCWNhLT5kcnYgPSBOVUxMOworCQljYS0+Y3JsZl9hY3Rpb24gPSBDUkxGX0dVRVNTOworCQljYS0+ZW9sX2F0dHIgPSBFT0xfVU5TRVQ7CisJCWNhLT5pZGVudCA9IDA7CisJfQorfQorCitpbnQgY29udmVydF90b19naXQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdHJidWYgKmRzdCwgZW51bSBzYWZlX2NybGYgY2hlY2tzYWZlKQoreworCWludCByZXQgPSAwOworCWNvbnN0IGNoYXIgKmZpbHRlciA9IE5VTEw7CisJaW50IHJlcXVpcmVkID0gMDsKKwlzdHJ1Y3QgY29udl9hdHRycyBjYTsKKworCWNvbnZlcnRfYXR0cnMoJmNhLCBwYXRoKTsKKwlpZiAoY2EuZHJ2KSB7CisJCWZpbHRlciA9IGNhLmRydi0+Y2xlYW47CisJCXJlcXVpcmVkID0gY2EuZHJ2LT5yZXF1aXJlZDsKKwl9CisKKwlyZXQgfD0gYXBwbHlfZmlsdGVyKHBhdGgsIHNyYywgbGVuLCBkc3QsIGZpbHRlcik7CisJaWYgKCFyZXQgJiYgcmVxdWlyZWQpCisJCWRpZSgiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIsIHBhdGgsIGNhLmRydi0+bmFtZSk7CisKKwlpZiAocmV0ICYmIGRzdCkgeworCQlzcmMgPSBkc3QtPmJ1ZjsKKwkJbGVuID0gZHN0LT5sZW47CisJfQorCWNhLmNybGZfYWN0aW9uID0gaW5wdXRfY3JsZl9hY3Rpb24oY2EuY3JsZl9hY3Rpb24sIGNhLmVvbF9hdHRyKTsKKwlyZXQgfD0gY3JsZl90b19naXQocGF0aCwgc3JjLCBsZW4sIGRzdCwgY2EuY3JsZl9hY3Rpb24sIGNoZWNrc2FmZSk7CisJaWYgKHJldCAmJiBkc3QpIHsKKwkJc3JjID0gZHN0LT5idWY7CisJCWxlbiA9IGRzdC0+bGVuOworCX0KKwlyZXR1cm4gcmV0IHwgaWRlbnRfdG9fZ2l0KHBhdGgsIHNyYywgbGVuLCBkc3QsIGNhLmlkZW50KTsKK30KKworc3RhdGljIGludCBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZV9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsCisJCQkJCSAgICBzaXplX3QgbGVuLCBzdHJ1Y3Qgc3RyYnVmICpkc3QsCisJCQkJCSAgICBpbnQgbm9ybWFsaXppbmcpCit7CisJaW50IHJldCA9IDAsIHJldF9maWx0ZXIgPSAwOworCWNvbnN0IGNoYXIgKmZpbHRlciA9IE5VTEw7CisJaW50IHJlcXVpcmVkID0gMDsKKwlzdHJ1Y3QgY29udl9hdHRycyBjYTsKKworCWNvbnZlcnRfYXR0cnMoJmNhLCBwYXRoKTsKKwlpZiAoY2EuZHJ2KSB7CisJCWZpbHRlciA9IGNhLmRydi0+c211ZGdlOworCQlyZXF1aXJlZCA9IGNhLmRydi0+cmVxdWlyZWQ7CisJfQorCisJcmV0IHw9IGlkZW50X3RvX3dvcmt0cmVlKHBhdGgsIHNyYywgbGVuLCBkc3QsIGNhLmlkZW50KTsKKwlpZiAocmV0KSB7CisJCXNyYyA9IGRzdC0+YnVmOworCQlsZW4gPSBkc3QtPmxlbjsKKwl9CisJLyoKKwkgKiBDUkxGIGNvbnZlcnNpb24gY2FuIGJlIHNraXBwZWQgaWYgbm9ybWFsaXppbmcsIHVubGVzcyB0aGVyZQorCSAqIGlzIGEgc211ZGdlIGZpbHRlci4gIFRoZSBmaWx0ZXIgbWlnaHQgZXhwZWN0IENSTEZzLgorCSAqLworCWlmIChmaWx0ZXIgfHwgIW5vcm1hbGl6aW5nKSB7CisJCWNhLmNybGZfYWN0aW9uID0gaW5wdXRfY3JsZl9hY3Rpb24oY2EuY3JsZl9hY3Rpb24sIGNhLmVvbF9hdHRyKTsKKwkJcmV0IHw9IGNybGZfdG9fd29ya3RyZWUocGF0aCwgc3JjLCBsZW4sIGRzdCwgY2EuY3JsZl9hY3Rpb24pOworCQlpZiAocmV0KSB7CisJCQlzcmMgPSBkc3QtPmJ1ZjsKKwkJCWxlbiA9IGRzdC0+bGVuOworCQl9CisJfQorCisJcmV0X2ZpbHRlciA9IGFwcGx5X2ZpbHRlcihwYXRoLCBzcmMsIGxlbiwgZHN0LCBmaWx0ZXIpOworCWlmICghcmV0X2ZpbHRlciAmJiByZXF1aXJlZCkKKwkJZGllKCIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiLCBwYXRoLCBjYS5kcnYtPm5hbWUpOworCisJcmV0dXJuIHJldCB8IHJldF9maWx0ZXI7Cit9CisKK2ludCBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sIHN0cnVjdCBzdHJidWYgKmRzdCkKK3sKKwlyZXR1cm4gY29udmVydF90b193b3JraW5nX3RyZWVfaW50ZXJuYWwocGF0aCwgc3JjLCBsZW4sIGRzdCwgMCk7Cit9CisKK2ludCByZW5vcm1hbGl6ZV9idWZmZXIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLCBzdHJ1Y3Qgc3RyYnVmICpkc3QpCit7CisJaW50IHJldCA9IGNvbnZlcnRfdG9fd29ya2luZ190cmVlX2ludGVybmFsKHBhdGgsIHNyYywgbGVuLCBkc3QsIDEpOworCWlmIChyZXQpIHsKKwkJc3JjID0gZHN0LT5idWY7CisJCWxlbiA9IGRzdC0+bGVuOworCX0KKwlyZXR1cm4gcmV0IHwgY29udmVydF90b19naXQocGF0aCwgc3JjLCBsZW4sIGRzdCwgU0FGRV9DUkxGX0ZBTFNFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU3RyZWFtaW5nIGNvbnZlcmlzb24gc3VwcG9ydAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBpbnQgKCpmaWx0ZXJfZm4pKHN0cnVjdCBzdHJlYW1fZmlsdGVyICosCisJCQkgY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqaXNpemVfcCwKKwkJCSBjaGFyICpvdXRwdXQsIHNpemVfdCAqb3NpemVfcCk7Cit0eXBlZGVmIHZvaWQgKCpmcmVlX2ZuKShzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqKTsKKworc3RydWN0IHN0cmVhbV9maWx0ZXJfdnRibCB7CisJZmlsdGVyX2ZuIGZpbHRlcjsKKwlmcmVlX2ZuIGZyZWU7Cit9OworCitzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciB7CisJc3RydWN0IHN0cmVhbV9maWx0ZXJfdnRibCAqdnRibDsKK307CisKK3N0YXRpYyBpbnQgbnVsbF9maWx0ZXJfZm4oc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciwKKwkJCSAgY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqaXNpemVfcCwKKwkJCSAgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9zaXplX3ApCit7CisJc2l6ZV90IGNvdW50OworCisJaWYgKCFpbnB1dCkKKwkJcmV0dXJuIDA7IC8qIHdlIGRvIG5vdCBrZWVwIGFueSBzdGF0ZXMgKi8KKwljb3VudCA9ICppc2l6ZV9wOworCWlmICgqb3NpemVfcCA8IGNvdW50KQorCQljb3VudCA9ICpvc2l6ZV9wOworCWlmIChjb3VudCkgeworCQltZW1tb3ZlKG91dHB1dCwgaW5wdXQsIGNvdW50KTsKKwkJKmlzaXplX3AgLT0gY291bnQ7CisJCSpvc2l6ZV9wIC09IGNvdW50OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbnVsbF9mcmVlX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCit7CisJOyAvKiBub3RoaW5nIC0tIG51bGwgaW5zdGFuY2VzIGFyZSBzaGFyZWQgKi8KK30KKworc3RhdGljIHN0cnVjdCBzdHJlYW1fZmlsdGVyX3Z0YmwgbnVsbF92dGJsID0geworCW51bGxfZmlsdGVyX2ZuLAorCW51bGxfZnJlZV9mbiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciBudWxsX2ZpbHRlcl9zaW5nbGV0b24gPSB7CisJJm51bGxfdnRibCwKK307CisKK2ludCBpc19udWxsX3N0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwlyZXR1cm4gZmlsdGVyID09ICZudWxsX2ZpbHRlcl9zaW5nbGV0b247Cit9CisKKworLyoKKyAqIExGLXRvLUNSTEYgZmlsdGVyCisgKi8KKworc3RydWN0IGxmX3RvX2NybGZfZmlsdGVyIHsKKwlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciBmaWx0ZXI7CisJdW5zaWduZWQgaGFzX2hlbGQ6MTsKKwljaGFyIGhlbGQ7Cit9OworCitzdGF0aWMgaW50IGxmX3RvX2NybGZfZmlsdGVyX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIsCisJCQkJY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqaXNpemVfcCwKKwkJCQljaGFyICpvdXRwdXQsIHNpemVfdCAqb3NpemVfcCkKK3sKKwlzaXplX3QgY291bnQsIG8gPSAwOworCXN0cnVjdCBsZl90b19jcmxmX2ZpbHRlciAqbGZfdG9fY3JsZiA9IChzdHJ1Y3QgbGZfdG9fY3JsZl9maWx0ZXIgKilmaWx0ZXI7CisKKwkvKgorCSAqIFdlIG1heSBiZSBob2xkaW5nIG9udG8gdGhlIENSIHRvIHNlZSBpZiBpdCBpcyBmb2xsb3dlZCBieSBhCisJICogTEYsIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgbmVlZCB0byBnbyB0byB0aGUgbWFpbiBsb29wLgorCSAqIE90aGVyd2lzZSwganVzdCBlbWl0IGl0IHRvIHRoZSBvdXRwdXQgc3RyZWFtLgorCSAqLworCWlmIChsZl90b19jcmxmLT5oYXNfaGVsZCAmJiAobGZfdG9fY3JsZi0+aGVsZCAhPSAnXHInIHx8ICFpbnB1dCkpIHsKKwkJb3V0cHV0W28rK10gPSBsZl90b19jcmxmLT5oZWxkOworCQlsZl90b19jcmxmLT5oYXNfaGVsZCA9IDA7CisJfQorCisJLyogV2UgYXJlIHRvbGQgdG8gZHJhaW4gKi8KKwlpZiAoIWlucHV0KSB7CisJCSpvc2l6ZV9wIC09IG87CisJCXJldHVybiAwOworCX0KKworCWNvdW50ID0gKmlzaXplX3A7CisJaWYgKGNvdW50IHx8IGxmX3RvX2NybGYtPmhhc19oZWxkKSB7CisJCXNpemVfdCBpOworCQlpbnQgd2FzX2NyID0gMDsKKworCQlpZiAobGZfdG9fY3JsZi0+aGFzX2hlbGQpIHsKKwkJCXdhc19jciA9IDE7CisJCQlsZl90b19jcmxmLT5oYXNfaGVsZCA9IDA7CisJCX0KKworCQlmb3IgKGkgPSAwOyBvIDwgKm9zaXplX3AgJiYgaSA8IGNvdW50OyBpKyspIHsKKwkJCWNoYXIgY2ggPSBpbnB1dFtpXTsKKworCQkJaWYgKGNoID09ICdcbicpIHsKKwkJCQlvdXRwdXRbbysrXSA9ICdccic7CisJCQl9IGVsc2UgaWYgKHdhc19jcikgeworCQkJCS8qCisJCQkJICogUHJldmlvdXMgcm91bmQgc2F3IENSIGFuZCBpdCBpcyBub3QgZm9sbG93ZWQKKwkJCQkgKiBieSBhIExGOyBlbWl0IHRoZSBDUiBiZWZvcmUgcHJvY2Vzc2luZyB0aGUKKwkJCQkgKiBjdXJyZW50IGNoYXJhY3Rlci4KKwkJCQkgKi8KKwkJCQlvdXRwdXRbbysrXSA9ICdccic7CisJCQl9CisKKwkJCS8qCisJCQkgKiBXZSBtYXkgaGF2ZSBjb25zdW1lZCB0aGUgbGFzdCBvdXRwdXQgc2xvdCwKKwkJCSAqIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBicmVhayBvdXQgb2YgdGhpcworCQkJICogbG9vcDsgaG9sZCB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYmVmb3JlCisJCQkgKiByZXR1cm5pbmcuCisJCQkgKi8KKwkJCWlmICgqb3NpemVfcCA8PSBvKSB7CisJCQkJbGZfdG9fY3JsZi0+aGFzX2hlbGQgPSAxOworCQkJCWxmX3RvX2NybGYtPmhlbGQgPSBjaDsKKwkJCQljb250aW51ZTsgLyogYnJlYWsgYnV0IGluY3JlbWVudCBpICovCisJCQl9CisKKwkJCWlmIChjaCA9PSAnXHInKSB7CisJCQkJd2FzX2NyID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJd2FzX2NyID0gMDsKKwkJCW91dHB1dFtvKytdID0gY2g7CisJCX0KKworCQkqb3NpemVfcCAtPSBvOworCQkqaXNpemVfcCAtPSBpOworCisJCWlmICghbGZfdG9fY3JsZi0+aGFzX2hlbGQgJiYgd2FzX2NyKSB7CisJCQlsZl90b19jcmxmLT5oYXNfaGVsZCA9IDE7CisJCQlsZl90b19jcmxmLT5oZWxkID0gJ1xyJzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGZfdG9fY3JsZl9mcmVlX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCit7CisJZnJlZShmaWx0ZXIpOworfQorCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXJfdnRibCBsZl90b19jcmxmX3Z0YmwgPSB7CisJbGZfdG9fY3JsZl9maWx0ZXJfZm4sCisJbGZfdG9fY3JsZl9mcmVlX2ZuLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHJlYW1fZmlsdGVyICpsZl90b19jcmxmX2ZpbHRlcih2b2lkKQoreworCXN0cnVjdCBsZl90b19jcmxmX2ZpbHRlciAqbGZfdG9fY3JsZiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpsZl90b19jcmxmKSk7CisKKwlsZl90b19jcmxmLT5maWx0ZXIudnRibCA9ICZsZl90b19jcmxmX3Z0Ymw7CisJcmV0dXJuIChzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqKWxmX3RvX2NybGY7Cit9CisKKy8qCisgKiBDYXNjYWRlIGZpbHRlcgorICovCisjZGVmaW5lIEZJTFRFUl9CVUZGRVIgMTAyNAorc3RydWN0IGNhc2NhZGVfZmlsdGVyIHsKKwlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciBmaWx0ZXI7CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgKm9uZTsKKwlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqdHdvOworCWNoYXIgYnVmW0ZJTFRFUl9CVUZGRVJdOworCWludCBlbmQsIHB0cjsKK307CisKK3N0YXRpYyBpbnQgY2FzY2FkZV9maWx0ZXJfZm4oc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciwKKwkJCSAgICAgY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqaXNpemVfcCwKKwkJCSAgICAgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9zaXplX3ApCit7CisJc3RydWN0IGNhc2NhZGVfZmlsdGVyICpjYXMgPSAoc3RydWN0IGNhc2NhZGVfZmlsdGVyICopIGZpbHRlcjsKKwlzaXplX3QgZmlsbGVkID0gMDsKKwlzaXplX3Qgc3ogPSAqb3NpemVfcDsKKwlzaXplX3QgdG9fZmVlZCwgcmVtYWluaW5nOworCisJLyoKKwkgKiBpbnB1dCAtLSAob25lKSAtLT4gYnVmIC0tICh0d28pIC0tPiBvdXRwdXQKKwkgKi8KKwl3aGlsZSAoZmlsbGVkIDwgc3opIHsKKwkJcmVtYWluaW5nID0gc3ogLSBmaWxsZWQ7CisKKwkJLyogZG8gd2UgYWxyZWFkeSBoYXZlIHNvbWV0aGluZyB0byBmZWVkIHR3byB3aXRoPyAqLworCQlpZiAoY2FzLT5wdHIgPCBjYXMtPmVuZCkgeworCQkJdG9fZmVlZCA9IGNhcy0+ZW5kIC0gY2FzLT5wdHI7CisJCQlpZiAoc3RyZWFtX2ZpbHRlcihjYXMtPnR3bywKKwkJCQkJICBjYXMtPmJ1ZiArIGNhcy0+cHRyLCAmdG9fZmVlZCwKKwkJCQkJICBvdXRwdXQgKyBmaWxsZWQsICZyZW1haW5pbmcpKQorCQkJCXJldHVybiAtMTsKKwkJCWNhcy0+cHRyICs9IChjYXMtPmVuZCAtIGNhcy0+cHRyKSAtIHRvX2ZlZWQ7CisJCQlmaWxsZWQgPSBzeiAtIHJlbWFpbmluZzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogZmVlZCBvbmUgZnJvbSB1cHN0cmVhbSBhbmQgaGF2ZSBpdCBlbWl0IGludG8gb3VyIGJ1ZmZlciAqLworCQl0b19mZWVkID0gaW5wdXQgPyAqaXNpemVfcCA6IDA7CisJCWlmIChpbnB1dCAmJiAhdG9fZmVlZCkKKwkJCWJyZWFrOworCQlyZW1haW5pbmcgPSBzaXplb2YoY2FzLT5idWYpOworCQlpZiAoc3RyZWFtX2ZpbHRlcihjYXMtPm9uZSwKKwkJCQkgIGlucHV0LCAmdG9fZmVlZCwKKwkJCQkgIGNhcy0+YnVmLCAmcmVtYWluaW5nKSkKKwkJCXJldHVybiAtMTsKKwkJY2FzLT5lbmQgPSBzaXplb2YoY2FzLT5idWYpIC0gcmVtYWluaW5nOworCQljYXMtPnB0ciA9IDA7CisJCWlmIChpbnB1dCkgeworCQkJc2l6ZV90IGZlZCA9ICppc2l6ZV9wIC0gdG9fZmVlZDsKKwkJCSppc2l6ZV9wIC09IGZlZDsKKwkJCWlucHV0ICs9IGZlZDsKKwkJfQorCisJCS8qIGRvIHdlIGtub3cgdGhhdCB3ZSBkcmFpbmVkIG9uZSBjb21wbGV0ZWx5PyAqLworCQlpZiAoaW5wdXQgfHwgY2FzLT5lbmQpCisJCQljb250aW51ZTsKKworCQkvKiB0ZWxsIHR3byB0byBkcmFpbjsgd2UgaGF2ZSBub3RoaW5nIG1vcmUgdG8gZ2l2ZSBpdCAqLworCQl0b19mZWVkID0gMDsKKwkJcmVtYWluaW5nID0gc3ogLSBmaWxsZWQ7CisJCWlmIChzdHJlYW1fZmlsdGVyKGNhcy0+dHdvLAorCQkJCSAgTlVMTCwgJnRvX2ZlZWQsCisJCQkJICBvdXRwdXQgKyBmaWxsZWQsICZyZW1haW5pbmcpKQorCQkJcmV0dXJuIC0xOworCQlpZiAocmVtYWluaW5nID09IChzeiAtIGZpbGxlZCkpCisJCQlicmVhazsgLyogY29tcGxldGVseSBkcmFpbmVkIHR3byAqLworCQlmaWxsZWQgPSBzeiAtIHJlbWFpbmluZzsKKwl9CisJKm9zaXplX3AgLT0gZmlsbGVkOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjYXNjYWRlX2ZyZWVfZm4oc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwlzdHJ1Y3QgY2FzY2FkZV9maWx0ZXIgKmNhcyA9IChzdHJ1Y3QgY2FzY2FkZV9maWx0ZXIgKilmaWx0ZXI7CisJZnJlZV9zdHJlYW1fZmlsdGVyKGNhcy0+b25lKTsKKwlmcmVlX3N0cmVhbV9maWx0ZXIoY2FzLT50d28pOworCWZyZWUoZmlsdGVyKTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJlYW1fZmlsdGVyX3Z0YmwgY2FzY2FkZV92dGJsID0geworCWNhc2NhZGVfZmlsdGVyX2ZuLAorCWNhc2NhZGVfZnJlZV9mbiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqY2FzY2FkZV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKm9uZSwKKwkJCQkJICAgIHN0cnVjdCBzdHJlYW1fZmlsdGVyICp0d28pCit7CisJc3RydWN0IGNhc2NhZGVfZmlsdGVyICpjYXNjYWRlOworCisJaWYgKCFvbmUgfHwgaXNfbnVsbF9zdHJlYW1fZmlsdGVyKG9uZSkpCisJCXJldHVybiB0d287CisJaWYgKCF0d28gfHwgaXNfbnVsbF9zdHJlYW1fZmlsdGVyKHR3bykpCisJCXJldHVybiBvbmU7CisKKwljYXNjYWRlID0geG1hbGxvYyhzaXplb2YoKmNhc2NhZGUpKTsKKwljYXNjYWRlLT5vbmUgPSBvbmU7CisJY2FzY2FkZS0+dHdvID0gdHdvOworCWNhc2NhZGUtPmVuZCA9IGNhc2NhZGUtPnB0ciA9IDA7CisJY2FzY2FkZS0+ZmlsdGVyLnZ0YmwgPSAmY2FzY2FkZV92dGJsOworCXJldHVybiAoc3RydWN0IHN0cmVhbV9maWx0ZXIgKiljYXNjYWRlOworfQorCisvKgorICogaWRlbnQgZmlsdGVyCisgKi8KKyNkZWZpbmUgSURFTlRfRFJBSU5JTkcgKC0xKQorI2RlZmluZSBJREVOVF9TS0lQUElORyAoLTIpCitzdHJ1Y3QgaWRlbnRfZmlsdGVyIHsKKwlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciBmaWx0ZXI7CisJc3RydWN0IHN0cmJ1ZiBsZWZ0OworCWludCBzdGF0ZTsKKwljaGFyIGlkZW50WzQ1XTsgLyogIjogeDQwICQiICovCit9OworCitzdGF0aWMgaW50IGlzX2ZvcmVpZ25faWRlbnQoY29uc3QgY2hhciAqc3RyKQoreworCWludCBpOworCisJaWYgKHByZWZpeGNtcChzdHIsICIkSWQ6ICIpKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSA1OyBzdHJbaV07IGkrKykgeworCQlpZiAoaXNzcGFjZShzdHJbaV0pICYmIHN0cltpKzFdICE9ICckJykKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWRlbnRfZHJhaW4oc3RydWN0IGlkZW50X2ZpbHRlciAqaWRlbnQsIGNoYXIgKipvdXRwdXRfcCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXNpemVfdCB0b19kcmFpbiA9IGlkZW50LT5sZWZ0LmxlbjsKKworCWlmICgqb3NpemVfcCA8IHRvX2RyYWluKQorCQl0b19kcmFpbiA9ICpvc2l6ZV9wOworCWlmICh0b19kcmFpbikgeworCQltZW1jcHkoKm91dHB1dF9wLCBpZGVudC0+bGVmdC5idWYsIHRvX2RyYWluKTsKKwkJc3RyYnVmX3JlbW92ZSgmaWRlbnQtPmxlZnQsIDAsIHRvX2RyYWluKTsKKwkJKm91dHB1dF9wICs9IHRvX2RyYWluOworCQkqb3NpemVfcCAtPSB0b19kcmFpbjsKKwl9CisJaWYgKCFpZGVudC0+bGVmdC5sZW4pCisJCWlkZW50LT5zdGF0ZSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgaWRlbnRfZmlsdGVyX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIsCisJCQkgICBjb25zdCBjaGFyICppbnB1dCwgc2l6ZV90ICppc2l6ZV9wLAorCQkJICAgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9zaXplX3ApCit7CisJc3RydWN0IGlkZW50X2ZpbHRlciAqaWRlbnQgPSAoc3RydWN0IGlkZW50X2ZpbHRlciAqKWZpbHRlcjsKKwlzdGF0aWMgY29uc3QgY2hhciBoZWFkW10gPSAiJElkIjsKKworCWlmICghaW5wdXQpIHsKKwkJLyogZHJhaW4gdXBvbiBlb2YgKi8KKwkJc3dpdGNoIChpZGVudC0+c3RhdGUpIHsKKwkJZGVmYXVsdDoKKwkJCXN0cmJ1Zl9hZGQoJmlkZW50LT5sZWZ0LCBoZWFkLCBpZGVudC0+c3RhdGUpOworCQljYXNlIElERU5UX1NLSVBQSU5HOgorCQkJLyogZmFsbHRocnUgKi8KKwkJY2FzZSBJREVOVF9EUkFJTklORzoKKwkJCWlkZW50X2RyYWluKGlkZW50LCAmb3V0cHV0LCBvc2l6ZV9wKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAoKmlzaXplX3AgfHwgKGlkZW50LT5zdGF0ZSA9PSBJREVOVF9EUkFJTklORykpIHsKKwkJaW50IGNoOworCisJCWlmIChpZGVudC0+c3RhdGUgPT0gSURFTlRfRFJBSU5JTkcpIHsKKwkJCWlkZW50X2RyYWluKGlkZW50LCAmb3V0cHV0LCBvc2l6ZV9wKTsKKwkJCWlmICghKm9zaXplX3ApCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNoID0gKihpbnB1dCsrKTsKKwkJKCppc2l6ZV9wKS0tOworCisJCWlmIChpZGVudC0+c3RhdGUgPT0gSURFTlRfU0tJUFBJTkcpIHsKKwkJCS8qCisJCQkgKiBTa2lwcGluZyB1bnRpbCAnJCcgb3IgTEYsIGJ1dCBrZWVwaW5nIHRoZW0KKwkJCSAqIGluIGNhc2UgaXQgaXMgYSBmb3JlaWduIGlkZW50LgorCQkJICovCisJCQlzdHJidWZfYWRkY2goJmlkZW50LT5sZWZ0LCBjaCk7CisJCQlpZiAoY2ggIT0gJ1xuJyAmJiBjaCAhPSAnJCcpCisJCQkJY29udGludWU7CisJCQlpZiAoY2ggPT0gJyQnICYmICFpc19mb3JlaWduX2lkZW50KGlkZW50LT5sZWZ0LmJ1ZikpIHsKKwkJCQlzdHJidWZfc2V0bGVuKCZpZGVudC0+bGVmdCwgc2l6ZW9mKGhlYWQpIC0gMSk7CisJCQkJc3RyYnVmX2FkZHN0cigmaWRlbnQtPmxlZnQsIGlkZW50LT5pZGVudCk7CisJCQl9CisJCQlpZGVudC0+c3RhdGUgPSBJREVOVF9EUkFJTklORzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlkZW50LT5zdGF0ZSA8IHNpemVvZihoZWFkKSAmJgorCQkgICAgaGVhZFtpZGVudC0+c3RhdGVdID09IGNoKSB7CisJCQlpZGVudC0+c3RhdGUrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlkZW50LT5zdGF0ZSkKKwkJCXN0cmJ1Zl9hZGQoJmlkZW50LT5sZWZ0LCBoZWFkLCBpZGVudC0+c3RhdGUpOworCQlpZiAoaWRlbnQtPnN0YXRlID09IHNpemVvZihoZWFkKSAtIDEpIHsKKwkJCWlmIChjaCAhPSAnOicgJiYgY2ggIT0gJyQnKSB7CisJCQkJc3RyYnVmX2FkZGNoKCZpZGVudC0+bGVmdCwgY2gpOworCQkJCWlkZW50LT5zdGF0ZSA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChjaCA9PSAnOicpIHsKKwkJCQlzdHJidWZfYWRkY2goJmlkZW50LT5sZWZ0LCBjaCk7CisJCQkJaWRlbnQtPnN0YXRlID0gSURFTlRfU0tJUFBJTkc7CisJCQl9IGVsc2UgeworCQkJCXN0cmJ1Zl9hZGRzdHIoJmlkZW50LT5sZWZ0LCBpZGVudC0+aWRlbnQpOworCQkJCWlkZW50LT5zdGF0ZSA9IElERU5UX0RSQUlOSU5HOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlzdHJidWZfYWRkY2goJmlkZW50LT5sZWZ0LCBjaCk7CisJCWlkZW50LT5zdGF0ZSA9IElERU5UX0RSQUlOSU5HOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWRlbnRfZnJlZV9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyKQoreworCXN0cnVjdCBpZGVudF9maWx0ZXIgKmlkZW50ID0gKHN0cnVjdCBpZGVudF9maWx0ZXIgKilmaWx0ZXI7CisJc3RyYnVmX3JlbGVhc2UoJmlkZW50LT5sZWZ0KTsKKwlmcmVlKGZpbHRlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlcl92dGJsIGlkZW50X3Z0YmwgPSB7CisJaWRlbnRfZmlsdGVyX2ZuLAorCWlkZW50X2ZyZWVfZm4sCit9OworCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXIgKmlkZW50X2ZpbHRlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBpZGVudF9maWx0ZXIgKmlkZW50ID0geG1hbGxvYyhzaXplb2YoKmlkZW50KSk7CisKKwlzcHJpbnRmKGlkZW50LT5pZGVudCwgIjogJXMgJCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlzdHJidWZfaW5pdCgmaWRlbnQtPmxlZnQsIDApOworCWlkZW50LT5maWx0ZXIudnRibCA9ICZpZGVudF92dGJsOworCWlkZW50LT5zdGF0ZSA9IDA7CisJcmV0dXJuIChzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqKWlkZW50OworfQorCisvKgorICogUmV0dXJuIGFuIGFwcHJvcHJpYXRlbHkgY29uc3RydWN0ZWQgZmlsdGVyIGZvciB0aGUgcGF0aCwgb3IgTlVMTCBpZgorICogdGhlIGNvbnRlbnRzIGNhbm5vdCBiZSBmaWx0ZXJlZCB3aXRob3V0IHJlYWRpbmcgdGhlIHdob2xlIHRoaW5nCisgKiBpbi1jb3JlLgorICoKKyAqIE5vdGUgdGhhdCB5b3Ugd291bGQgYmUgY3JhenkgdG8gc2V0IENSTEYsIHNtdWdlL2NsZWFuIG9yIGlkZW50IHRvIGEKKyAqIGxhcmdlIGJpbmFyeSBibG9iIHlvdSB3b3VsZCB3YW50IHVzIG5vdCB0byBzbHVycCBpbnRvIHRoZSBtZW1vcnkhCisgKi8KK3N0cnVjdCBzdHJlYW1fZmlsdGVyICpnZXRfc3RyZWFtX2ZpbHRlcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBjb252X2F0dHJzIGNhOworCWVudW0gY3JsZl9hY3Rpb24gY3JsZl9hY3Rpb247CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciA9IE5VTEw7CisKKwljb252ZXJ0X2F0dHJzKCZjYSwgcGF0aCk7CisKKwlpZiAoY2EuZHJ2ICYmIChjYS5kcnYtPnNtdWRnZSB8fCBjYS5kcnYtPmNsZWFuKSkKKwkJcmV0dXJuIGZpbHRlcjsKKworCWlmIChjYS5pZGVudCkKKwkJZmlsdGVyID0gaWRlbnRfZmlsdGVyKHNoYTEpOworCisJY3JsZl9hY3Rpb24gPSBpbnB1dF9jcmxmX2FjdGlvbihjYS5jcmxmX2FjdGlvbiwgY2EuZW9sX2F0dHIpOworCisJaWYgKChjcmxmX2FjdGlvbiA9PSBDUkxGX0JJTkFSWSkgfHwgKGNybGZfYWN0aW9uID09IENSTEZfSU5QVVQpIHx8CisJICAgIChjcmxmX2FjdGlvbiA9PSBDUkxGX0dVRVNTICYmIGF1dG9fY3JsZiA9PSBBVVRPX0NSTEZfRkFMU0UpKQorCQlmaWx0ZXIgPSBjYXNjYWRlX2ZpbHRlcihmaWx0ZXIsICZudWxsX2ZpbHRlcl9zaW5nbGV0b24pOworCisJZWxzZSBpZiAob3V0cHV0X2VvbChjcmxmX2FjdGlvbikgPT0gRU9MX0NSTEYgJiYKKwkJICEoY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPIHx8IGNybGZfYWN0aW9uID09IENSTEZfR1VFU1MpKQorCQlmaWx0ZXIgPSBjYXNjYWRlX2ZpbHRlcihmaWx0ZXIsIGxmX3RvX2NybGZfZmlsdGVyKCkpOworCisJcmV0dXJuIGZpbHRlcjsKK30KKwordm9pZCBmcmVlX3N0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwlmaWx0ZXItPnZ0YmwtPmZyZWUoZmlsdGVyKTsKK30KKworaW50IHN0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciwKKwkJICBjb25zdCBjaGFyICppbnB1dCwgc2l6ZV90ICppc2l6ZV9wLAorCQkgIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXJldHVybiBmaWx0ZXItPnZ0YmwtPmZpbHRlcihmaWx0ZXIsIGlucHV0LCBpc2l6ZV9wLCBvdXRwdXQsIG9zaXplX3ApOworfQpkaWZmIC0tZ2l0IGEvY29udmVydC5oIGIvY29udmVydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNWZkNjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb252ZXJ0LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4KKyAqLworI2lmbmRlZiBDT05WRVJUX0gKKyNkZWZpbmUgQ09OVkVSVF9ICisKK2VudW0gc2FmZV9jcmxmIHsKKwlTQUZFX0NSTEZfRkFMU0UgPSAwLAorCVNBRkVfQ1JMRl9GQUlMID0gMSwKKwlTQUZFX0NSTEZfV0FSTiA9IDIKK307CisKK2V4dGVybiBlbnVtIHNhZmVfY3JsZiBzYWZlX2NybGY7CisKK2VudW0gYXV0b19jcmxmIHsKKwlBVVRPX0NSTEZfRkFMU0UgPSAwLAorCUFVVE9fQ1JMRl9UUlVFID0gMSwKKwlBVVRPX0NSTEZfSU5QVVQgPSAtMQorfTsKKworZXh0ZXJuIGVudW0gYXV0b19jcmxmIGF1dG9fY3JsZjsKKworZW51bSBlb2wgeworCUVPTF9VTlNFVCwKKwlFT0xfQ1JMRiwKKwlFT0xfTEYsCisjaWZkZWYgTkFUSVZFX0NSTEYKKwlFT0xfTkFUSVZFID0gRU9MX0NSTEYKKyNlbHNlCisJRU9MX05BVElWRSA9IEVPTF9MRgorI2VuZGlmCit9OworCitleHRlcm4gZW51bSBlb2wgY29yZV9lb2w7CisKKy8qIHJldHVybnMgMSBpZiAqZHN0IHdhcyB1c2VkICovCitleHRlcm4gaW50IGNvbnZlcnRfdG9fZ2l0KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqZHN0LCBlbnVtIHNhZmVfY3JsZiBjaGVja3NhZmUpOworZXh0ZXJuIGludCBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsCisJCQkJICAgc2l6ZV90IGxlbiwgc3RydWN0IHN0cmJ1ZiAqZHN0KTsKK2V4dGVybiBpbnQgcmVub3JtYWxpemVfYnVmZmVyKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKwkJCSAgICAgIHN0cnVjdCBzdHJidWYgKmRzdCk7CitzdGF0aWMgaW5saW5lIGludCB3b3VsZF9jb252ZXJ0X3RvX2dpdChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsCisJCQkJICAgICAgIHNpemVfdCBsZW4sIGVudW0gc2FmZV9jcmxmIGNoZWNrc2FmZSkKK3sKKwlyZXR1cm4gY29udmVydF90b19naXQocGF0aCwgc3JjLCBsZW4sIE5VTEwsIGNoZWNrc2FmZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFN0cmVhbWluZyBjb252ZXJpc29uIHN1cHBvcnQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBzdHJlYW1fZmlsdGVyOyAvKiBvcGFxdWUgKi8KKworZXh0ZXJuIHN0cnVjdCBzdHJlYW1fZmlsdGVyICpnZXRfc3RyZWFtX2ZpbHRlcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIHZvaWQgZnJlZV9zdHJlYW1fZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICopOworZXh0ZXJuIGludCBpc19udWxsX3N0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKik7CisKKy8qCisgKiBVc2UgYXMgbXVjaCBpbnB1dCB1cCB0byAqaXNpemVfcCBhbmQgZmlsbCBvdXRwdXQgdXAgdG8gKm9zaXplX3A7CisgKiB1cGRhdGUgaXNpemVfcCBhbmQgb3NpemVfcCB0byBpbmRpY2F0ZSBob3cgbXVjaCBidWZmZXIgc3BhY2Ugd2FzCisgKiBjb25zdW1lZCBhbmQgZmlsbGVkLiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBub24temVybyBvbiBlcnJvci4KKyAqCisgKiBTb21lIGZpbHRlcnMgbWF5IG5lZWQgdG8gYnVmZmVyIHRoZSBpbnB1dCBhbmQgbG9vay1haGVhZCBpbnNpZGUgaXQKKyAqIHRvIGRlY2lkZSB3aGF0IHRvIG91dHB1dCwgYW5kIHRoZXkgbWF5IGNvbnN1bWUgbW9yZSB0aGFuIHplcm8gYnl0ZXMKKyAqIG9mIGlucHV0IGFuZCBzdGlsbCBub3QgcHJvZHVjZSBhbnkgb3V0cHV0LiBBZnRlciBmZWVkaW5nIGFsbCB0aGUKKyAqIGlucHV0LCBwYXNzIE5VTEwgYXMgaW5wdXQgYW5kIGtlZXAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0byBsZXQKKyAqIHN1Y2ggZmlsdGVycyBrbm93IHRoZXJlIGlzIG5vIG1vcmUgaW5wdXQgY29taW5nIGFuZCBpdCBpcyB0aW1lIGZvcgorICogdGhlbSB0byBwcm9kdWNlIHRoZSByZW1haW5pbmcgb3V0cHV0IGJhc2VkIG9uIHRoZSBidWZmZXJlZCBpbnB1dC4KKyAqLworZXh0ZXJuIGludCBzdHJlYW1fZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICosCisJCQkgY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqaXNpemVfcCwKKwkJCSBjaGFyICpvdXRwdXQsIHNpemVfdCAqb3NpemVfcCk7CisKKyNlbmRpZiAvKiBDT05WRVJUX0ggKi8KZGlmZiAtLWdpdCBhL2NvcHkuYyBiL2NvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y1OGZkCi0tLSAvZGV2L251bGwKKysrIGIvY29weS5jCkBAIC0wLDAgKzEsNzggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgY29weV9mZChpbnQgaWZkLCBpbnQgb2ZkKQoreworCXdoaWxlICgxKSB7CisJCWNoYXIgYnVmZmVyWzgxOTJdOworCQljaGFyICpidWYgPSBidWZmZXI7CisJCXNzaXplX3QgbGVuID0geHJlYWQoaWZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKwkJaWYgKGxlbiA8IDApIHsKKwkJCWludCByZWFkX2Vycm9yID0gZXJybm87CisJCQljbG9zZShpZmQpOworCQkJcmV0dXJuIGVycm9yKCJjb3B5LWZkOiByZWFkIHJldHVybmVkICVzIiwKKwkJCQkgICAgIHN0cmVycm9yKHJlYWRfZXJyb3IpKTsKKwkJfQorCQl3aGlsZSAobGVuKSB7CisJCQlpbnQgd3JpdHRlbiA9IHh3cml0ZShvZmQsIGJ1ZiwgbGVuKTsKKwkJCWlmICh3cml0dGVuID4gMCkgeworCQkJCWJ1ZiArPSB3cml0dGVuOworCQkJCWxlbiAtPSB3cml0dGVuOworCQkJfQorCQkJZWxzZSBpZiAoIXdyaXR0ZW4pIHsKKwkJCQljbG9zZShpZmQpOworCQkJCXJldHVybiBlcnJvcigiY29weS1mZDogd3JpdGUgcmV0dXJuZWQgMCIpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgd3JpdGVfZXJyb3IgPSBlcnJubzsKKwkJCQljbG9zZShpZmQpOworCQkJCXJldHVybiBlcnJvcigiY29weS1mZDogd3JpdGUgcmV0dXJuZWQgJXMiLAorCQkJCQkgICAgIHN0cmVycm9yKHdyaXRlX2Vycm9yKSk7CisJCQl9CisJCX0KKwl9CisJY2xvc2UoaWZkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb3B5X3RpbWVzKGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKQoreworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCB1dGltYnVmIHRpbWVzOworCWlmIChzdGF0KHNyYywgJnN0KSA8IDApCisJCXJldHVybiAtMTsKKwl0aW1lcy5hY3RpbWUgPSBzdC5zdF9hdGltZTsKKwl0aW1lcy5tb2R0aW1lID0gc3Quc3RfbXRpbWU7CisJaWYgKHV0aW1lKGRzdCwgJnRpbWVzKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvcHlfZmlsZShjb25zdCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IG1vZGUpCit7CisJaW50IGZkaSwgZmRvLCBzdGF0dXM7CisKKwltb2RlID0gKG1vZGUgJiAwMTExKSA/IDA3NzcgOiAwNjY2OworCWlmICgoZmRpID0gb3BlbihzcmMsIE9fUkRPTkxZKSkgPCAwKQorCQlyZXR1cm4gZmRpOworCWlmICgoZmRvID0gb3Blbihkc3QsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgbW9kZSkpIDwgMCkgeworCQljbG9zZShmZGkpOworCQlyZXR1cm4gZmRvOworCX0KKwlzdGF0dXMgPSBjb3B5X2ZkKGZkaSwgZmRvKTsKKwlpZiAoY2xvc2UoZmRvKSAhPSAwKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBjbG9zZSBlcnJvcjogJXMiLCBkc3QsIHN0cmVycm9yKGVycm5vKSk7CisKKwlpZiAoIXN0YXR1cyAmJiBhZGp1c3Rfc2hhcmVkX3Blcm0oZHN0KSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGNvcHlfZmlsZV93aXRoX3RpbWUoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBtb2RlKQoreworCWludCBzdGF0dXMgPSBjb3B5X2ZpbGUoZHN0LCBzcmMsIG1vZGUpOworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gY29weV90aW1lcyhkc3QsIHNyYyk7CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2NyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jIGIvY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwZjE5NAotLS0gL2Rldi9udWxsCisrKyBiL2NyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jCkBAIC0wLDAgKzEsMjY5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjcmVkZW50aWFsLmgiCisjaW5jbHVkZSAidW5peC1zb2NrZXQuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqc29ja2V0X3BhdGg7CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfc29ja2V0KHZvaWQpCit7CisJaWYgKHNvY2tldF9wYXRoKQorCQl1bmxpbmsoc29ja2V0X3BhdGgpOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3NvY2tldF9vbl9zaWduYWwoaW50IHNpZykKK3sKKwljbGVhbnVwX3NvY2tldCgpOworCXNpZ2NoYWluX3BvcChzaWcpOworCXJhaXNlKHNpZyk7Cit9CisKK3N0cnVjdCBjcmVkZW50aWFsX2NhY2hlX2VudHJ5IHsKKwlzdHJ1Y3QgY3JlZGVudGlhbCBpdGVtOworCXVuc2lnbmVkIGxvbmcgZXhwaXJhdGlvbjsKK307CitzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWxfY2FjaGVfZW50cnkgKmVudHJpZXM7CitzdGF0aWMgaW50IGVudHJpZXNfbnI7CitzdGF0aWMgaW50IGVudHJpZXNfYWxsb2M7CisKK3N0YXRpYyB2b2lkIGNhY2hlX2NyZWRlbnRpYWwoc3RydWN0IGNyZWRlbnRpYWwgKmMsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBjcmVkZW50aWFsX2NhY2hlX2VudHJ5ICplOworCisJQUxMT0NfR1JPVyhlbnRyaWVzLCBlbnRyaWVzX25yICsgMSwgZW50cmllc19hbGxvYyk7CisJZSA9ICZlbnRyaWVzW2VudHJpZXNfbnIrK107CisKKwkvKiB0YWtlIG93bmVyc2hpcCBvZiBwb2ludGVycyAqLworCW1lbWNweSgmZS0+aXRlbSwgYywgc2l6ZW9mKCpjKSk7CisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCWUtPmV4cGlyYXRpb24gPSB0aW1lKE5VTEwpICsgdGltZW91dDsKK30KKworc3RhdGljIHN0cnVjdCBjcmVkZW50aWFsX2NhY2hlX2VudHJ5ICpsb29rdXBfY3JlZGVudGlhbChjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllc19ucjsgaSsrKSB7CisJCXN0cnVjdCBjcmVkZW50aWFsICplID0gJmVudHJpZXNbaV0uaXRlbTsKKwkJaWYgKGNyZWRlbnRpYWxfbWF0Y2goYywgZSkpCisJCQlyZXR1cm4gJmVudHJpZXNbaV07CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfY3JlZGVudGlhbChjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlzdHJ1Y3QgY3JlZGVudGlhbF9jYWNoZV9lbnRyeSAqZTsKKworCWUgPSBsb29rdXBfY3JlZGVudGlhbChjKTsKKwlpZiAoZSkKKwkJZS0+ZXhwaXJhdGlvbiA9IDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZXhwaXJhdGlvbnModm9pZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyB3YWl0X2Zvcl9lbnRyeV91bnRpbDsKKwlpbnQgaSA9IDA7CisJdW5zaWduZWQgbG9uZyBub3cgPSB0aW1lKE5VTEwpOworCXVuc2lnbmVkIGxvbmcgbmV4dCA9ICh1bnNpZ25lZCBsb25nKS0xOworCisJLyoKKwkgKiBJbml0aWFsbHkgZ2l2ZSB0aGUgY2xpZW50IDMwIHNlY29uZHMgdG8gYWN0dWFsbHkgY29udGFjdCB1cworCSAqIGFuZCBzdG9yZSBhIGNyZWRlbnRpYWwgYmVmb3JlIHdlIGRlY2lkZSB0aGVyZSdzIG5vIHBvaW50IGluCisJICoga2VlcGluZyB0aGUgZGFlbW9uIGFyb3VuZC4KKwkgKi8KKwlpZiAoIXdhaXRfZm9yX2VudHJ5X3VudGlsKQorCQl3YWl0X2Zvcl9lbnRyeV91bnRpbCA9IG5vdyArIDMwOworCisJd2hpbGUgKGkgPCBlbnRyaWVzX25yKSB7CisJCWlmIChlbnRyaWVzW2ldLmV4cGlyYXRpb24gPD0gbm93KSB7CisJCQllbnRyaWVzX25yLS07CisJCQljcmVkZW50aWFsX2NsZWFyKCZlbnRyaWVzW2ldLml0ZW0pOworCQkJaWYgKGkgIT0gZW50cmllc19ucikKKwkJCQltZW1jcHkoJmVudHJpZXNbaV0sICZlbnRyaWVzW2VudHJpZXNfbnJdLCBzaXplb2YoKmVudHJpZXMpKTsKKwkJCS8qCisJCQkgKiBTdGljayBhcm91bmQgMzAgc2Vjb25kcyBpbiBjYXNlIGEgbmV3IGNyZWRlbnRpYWwKKwkJCSAqIHNob3dzIHVwIChlLmcuLCBiZWNhdXNlIHdlIGp1c3QgcmVtb3ZlZCBhIGZhaWxlZAorCQkJICogb25lLCBhbmQgd2Ugd2lsbCBzb29uIGdldCB0aGUgY29ycmVjdCBvbmUpLgorCQkJICovCisJCQl3YWl0X2Zvcl9lbnRyeV91bnRpbCA9IG5vdyArIDMwOworCQl9CisJCWVsc2UgeworCQkJaWYgKGVudHJpZXNbaV0uZXhwaXJhdGlvbiA8IG5leHQpCisJCQkJbmV4dCA9IGVudHJpZXNbaV0uZXhwaXJhdGlvbjsKKwkJCWkrKzsKKwkJfQorCX0KKworCWlmICghZW50cmllc19ucikgeworCQlpZiAod2FpdF9mb3JfZW50cnlfdW50aWwgPD0gbm93KQorCQkJcmV0dXJuIDA7CisJCW5leHQgPSB3YWl0X2Zvcl9lbnRyeV91bnRpbDsKKwl9CisKKwlyZXR1cm4gbmV4dCAtIG5vdzsKK30KKworc3RhdGljIGludCByZWFkX3JlcXVlc3QoRklMRSAqZmgsIHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJc3RydWN0IHN0cmJ1ZiAqYWN0aW9uLCBpbnQgKnRpbWVvdXQpIHsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBpdGVtID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcDsKKworCXN0cmJ1Zl9nZXRsaW5lKCZpdGVtLCBmaCwgJ1xuJyk7CisJcCA9IHNraXBfcHJlZml4KGl0ZW0uYnVmLCAiYWN0aW9uPSIpOworCWlmICghcCkKKwkJcmV0dXJuIGVycm9yKCJjbGllbnQgc2VudCBib2d1cyBhY3Rpb24gbGluZTogJXMiLCBpdGVtLmJ1Zik7CisJc3RyYnVmX2FkZHN0cihhY3Rpb24sIHApOworCisJc3RyYnVmX2dldGxpbmUoJml0ZW0sIGZoLCAnXG4nKTsKKwlwID0gc2tpcF9wcmVmaXgoaXRlbS5idWYsICJ0aW1lb3V0PSIpOworCWlmICghcCkKKwkJcmV0dXJuIGVycm9yKCJjbGllbnQgc2VudCBib2d1cyB0aW1lb3V0IGxpbmU6ICVzIiwgaXRlbS5idWYpOworCSp0aW1lb3V0ID0gYXRvaShwKTsKKworCWlmIChjcmVkZW50aWFsX3JlYWQoYywgZmgpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZV9vbmVfY2xpZW50KEZJTEUgKmluLCBGSUxFICpvdXQpCit7CisJc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGFjdGlvbiA9IFNUUkJVRl9JTklUOworCWludCB0aW1lb3V0ID0gLTE7CisKKwlpZiAocmVhZF9yZXF1ZXN0KGluLCAmYywgJmFjdGlvbiwgJnRpbWVvdXQpIDwgMCkKKwkJLyogaWdub3JlIGVycm9yICovIDsKKwllbHNlIGlmICghc3RyY21wKGFjdGlvbi5idWYsICJnZXQiKSkgeworCQlzdHJ1Y3QgY3JlZGVudGlhbF9jYWNoZV9lbnRyeSAqZSA9IGxvb2t1cF9jcmVkZW50aWFsKCZjKTsKKwkJaWYgKGUpIHsKKwkJCWZwcmludGYob3V0LCAidXNlcm5hbWU9JXNcbiIsIGUtPml0ZW0udXNlcm5hbWUpOworCQkJZnByaW50ZihvdXQsICJwYXNzd29yZD0lc1xuIiwgZS0+aXRlbS5wYXNzd29yZCk7CisJCX0KKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24uYnVmLCAiZXhpdCIpKQorCQlleGl0KDApOworCWVsc2UgaWYgKCFzdHJjbXAoYWN0aW9uLmJ1ZiwgImVyYXNlIikpCisJCXJlbW92ZV9jcmVkZW50aWFsKCZjKTsKKwllbHNlIGlmICghc3RyY21wKGFjdGlvbi5idWYsICJzdG9yZSIpKSB7CisJCWlmICh0aW1lb3V0IDwgMCkKKwkJCXdhcm5pbmcoImNhY2hlIGNsaWVudCBkaWRuJ3Qgc3BlY2lmeSBhIHRpbWVvdXQiKTsKKwkJZWxzZSBpZiAoIWMudXNlcm5hbWUgfHwgIWMucGFzc3dvcmQpCisJCQl3YXJuaW5nKCJjYWNoZSBjbGllbnQgZ2F2ZSB1cyBhIHBhcnRpYWwgY3JlZGVudGlhbCIpOworCQllbHNlIHsKKwkJCXJlbW92ZV9jcmVkZW50aWFsKCZjKTsKKwkJCWNhY2hlX2NyZWRlbnRpYWwoJmMsIHRpbWVvdXQpOworCQl9CisJfQorCWVsc2UKKwkJd2FybmluZygiY2FjaGUgY2xpZW50IHNlbnQgdW5rbm93biBhY3Rpb246ICVzIiwgYWN0aW9uLmJ1Zik7CisKKwljcmVkZW50aWFsX2NsZWFyKCZjKTsKKwlzdHJidWZfcmVsZWFzZSgmYWN0aW9uKTsKK30KKworc3RhdGljIGludCBzZXJ2ZV9jYWNoZV9sb29wKGludCBmZCkKK3sKKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwl1bnNpZ25lZCBsb25nIHdha2V1cDsKKworCXdha2V1cCA9IGNoZWNrX2V4cGlyYXRpb25zKCk7CisJaWYgKCF3YWtldXApCisJCXJldHVybiAwOworCisJcGZkLmZkID0gZmQ7CisJcGZkLmV2ZW50cyA9IFBPTExJTjsKKwlpZiAocG9sbCgmcGZkLCAxLCAxMDAwICogd2FrZXVwKSA8IDApIHsKKwkJaWYgKGVycm5vICE9IEVJTlRSKQorCQkJZGllX2Vycm5vKCJwb2xsIGZhaWxlZCIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAocGZkLnJldmVudHMgJiBQT0xMSU4pIHsKKwkJaW50IGNsaWVudCwgY2xpZW50MjsKKwkJRklMRSAqaW4sICpvdXQ7CisKKwkJY2xpZW50ID0gYWNjZXB0KGZkLCBOVUxMLCBOVUxMKTsKKwkJaWYgKGNsaWVudCA8IDApIHsKKwkJCXdhcm5pbmcoImFjY2VwdCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiAxOworCQl9CisJCWNsaWVudDIgPSBkdXAoY2xpZW50KTsKKwkJaWYgKGNsaWVudDIgPCAwKSB7CisJCQl3YXJuaW5nKCJkdXAgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQljbG9zZShjbGllbnQpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlpbiA9IHhmZG9wZW4oY2xpZW50LCAiciIpOworCQlvdXQgPSB4ZmRvcGVuKGNsaWVudDIsICJ3Iik7CisJCXNlcnZlX29uZV9jbGllbnQoaW4sIG91dCk7CisJCWZjbG9zZShpbik7CisJCWZjbG9zZShvdXQpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc2VydmVfY2FjaGUoY29uc3QgY2hhciAqc29ja2V0X3BhdGgpCit7CisJaW50IGZkOworCisJZmQgPSB1bml4X3N0cmVhbV9saXN0ZW4oc29ja2V0X3BhdGgpOworCWlmIChmZCA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIGJpbmQgdG8gJyVzJyIsIHNvY2tldF9wYXRoKTsKKworCXByaW50Zigib2tcbiIpOworCWZjbG9zZShzdGRvdXQpOworCisJd2hpbGUgKHNlcnZlX2NhY2hlX2xvb3AoZmQpKQorCQk7IC8qIG5vdGhpbmcgKi8KKworCWNsb3NlKGZkKTsKKwl1bmxpbmsoc29ja2V0X3BhdGgpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBwZXJtaXNzaW9uc19hZHZpY2VbXSA9CisiVGhlIHBlcm1pc3Npb25zIG9uIHlvdXIgc29ja2V0IGRpcmVjdG9yeSBhcmUgdG9vIGxvb3NlOyBvdGhlclxuIgorInVzZXJzIG1heSBiZSBhYmxlIHRvIHJlYWQgeW91ciBjYWNoZWQgY3JlZGVudGlhbHMuIENvbnNpZGVyIHJ1bm5pbmc6XG4iCisiXG4iCisiCWNobW9kIDA3MDAgJXMiOworc3RhdGljIHZvaWQgY2hlY2tfc29ja2V0X2RpcmVjdG9yeShjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKnBhdGhfY29weSA9IHhzdHJkdXAocGF0aCk7CisJY2hhciAqZGlyID0gZGlybmFtZShwYXRoX2NvcHkpOworCisJaWYgKCFzdGF0KGRpciwgJnN0KSkgeworCQlpZiAoc3Quc3RfbW9kZSAmIDA3NykKKwkJCWRpZShwZXJtaXNzaW9uc19hZHZpY2UsIGRpcik7CisJCWZyZWUocGF0aF9jb3B5KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogV2UgbXVzdCBiZSBzdXJlIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHdpdGggdGhlIGNvcnJlY3QgbW9kZSwKKwkgKiBub3QganVzdCBjaG1vZCBpdCBhZnRlciB0aGUgZmFjdDsgb3RoZXJ3aXNlLCB0aGVyZSBpcyBhIHJhY2UKKwkgKiBjb25kaXRpb24gaW4gd2hpY2ggc29tZWJvZHkgY2FuIGNoZGlyIHRvIGl0LCBzbGVlcCwgdGhlbiB0cnkgdG8gb3BlbgorCSAqIG91ciBwcm90ZWN0ZWQgc29ja2V0LgorCSAqLworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGRpcikgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICclcyciLCBkaXIpOworCWlmIChta2RpcihkaXIsIDA3MDApIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWtkaXIgJyVzJyIsIGRpcik7CisJZnJlZShwYXRoX2NvcHkpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc29ja2V0X3BhdGggPSBhcmd2WzFdOworCisJaWYgKCFzb2NrZXRfcGF0aCkKKwkJZGllKCJ1c2FnZTogZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbiA8c29ja2V0X3BhdGg+Iik7CisJY2hlY2tfc29ja2V0X2RpcmVjdG9yeShzb2NrZXRfcGF0aCk7CisKKwlhdGV4aXQoY2xlYW51cF9zb2NrZXQpOworCXNpZ2NoYWluX3B1c2hfY29tbW9uKGNsZWFudXBfc29ja2V0X29uX3NpZ25hbCk7CisKKwlzZXJ2ZV9jYWNoZShzb2NrZXRfcGF0aCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NyZWRlbnRpYWwtY2FjaGUuYyBiL2NyZWRlbnRpYWwtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTAzNzkyCi0tLSAvZGV2L251bGwKKysrIGIvY3JlZGVudGlhbC1jYWNoZS5jCkBAIC0wLDAgKzEsMTIzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjcmVkZW50aWFsLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidW5peC1zb2NrZXQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCisjZGVmaW5lIEZMQUdfU1BBV04gMHgxCisjZGVmaW5lIEZMQUdfUkVMQVkgMHgyCisKK3N0YXRpYyBpbnQgc2VuZF9yZXF1ZXN0KGNvbnN0IGNoYXIgKnNvY2tldCwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCWludCBnb3RfZGF0YSA9IDA7CisJaW50IGZkID0gdW5peF9zdHJlYW1fY29ubmVjdChzb2NrZXQpOworCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIG91dC0+YnVmLCBvdXQtPmxlbikgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0byBjYWNoZSBkYWVtb24iKTsKKwlzaHV0ZG93bihmZCwgU0hVVF9XUik7CisKKwl3aGlsZSAoMSkgeworCQljaGFyIGluWzEwMjRdOworCQlpbnQgcjsKKworCQlyID0gcmVhZF9pbl9mdWxsKGZkLCBpbiwgc2l6ZW9mKGluKSk7CisJCWlmIChyID09IDApCisJCQlicmVhazsKKwkJaWYgKHIgPCAwKQorCQkJZGllX2Vycm5vKCJyZWFkIGVycm9yIGZyb20gY2FjaGUgZGFlbW9uIik7CisJCXdyaXRlX29yX2RpZSgxLCBpbiwgcik7CisJCWdvdF9kYXRhID0gMTsKKwl9CisJcmV0dXJuIGdvdF9kYXRhOworfQorCitzdGF0aWMgdm9pZCBzcGF3bl9kYWVtb24oY29uc3QgY2hhciAqc29ja2V0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGRhZW1vbjsKKwljb25zdCBjaGFyICphcmd2W10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKwljaGFyIGJ1ZlsxMjhdOworCWludCByOworCisJbWVtc2V0KCZkYWVtb24sIDAsIHNpemVvZihkYWVtb24pKTsKKwlhcmd2WzBdID0gImdpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24iOworCWFyZ3ZbMV0gPSBzb2NrZXQ7CisJZGFlbW9uLmFyZ3YgPSBhcmd2OworCWRhZW1vbi5ub19zdGRpbiA9IDE7CisJZGFlbW9uLm91dCA9IC0xOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmRhZW1vbikpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHN0YXJ0IGNhY2hlIGRhZW1vbiIpOworCXIgPSByZWFkX2luX2Z1bGwoZGFlbW9uLm91dCwgYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKHIgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byByZWFkIHJlc3VsdCBjb2RlIGZyb20gY2FjaGUgZGFlbW9uIik7CisJaWYgKHIgIT0gMyB8fCBtZW1jbXAoYnVmLCAib2tcbiIsIDMpKQorCQlkaWUoImNhY2hlIGRhZW1vbiBkaWQgbm90IHN0YXJ0OiAlLipzIiwgciwgYnVmKTsKKwljbG9zZShkYWVtb24ub3V0KTsKK30KKworc3RhdGljIHZvaWQgZG9fY2FjaGUoY29uc3QgY2hhciAqc29ja2V0LCBjb25zdCBjaGFyICphY3Rpb24sIGludCB0aW1lb3V0LAorCQkgICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgImFjdGlvbj0lc1xuIiwgYWN0aW9uKTsKKwlzdHJidWZfYWRkZigmYnVmLCAidGltZW91dD0lZFxuIiwgdGltZW91dCk7CisJaWYgKGZsYWdzICYgRkxBR19SRUxBWSkgeworCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMCkgPCAwKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVsYXkgY3JlZGVudGlhbCIpOworCX0KKworCWlmIChzZW5kX3JlcXVlc3Qoc29ja2V0LCAmYnVmKSA8IDApIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBlcnJubyAhPSBFQ09OTlJFRlVTRUQpCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byBjb25uZWN0IHRvIGNhY2hlIGRhZW1vbiIpOworCQlpZiAoZmxhZ3MgJiBGTEFHX1NQQVdOKSB7CisJCQlzcGF3bl9kYWVtb24oc29ja2V0KTsKKwkJCWlmIChzZW5kX3JlcXVlc3Qoc29ja2V0LCAmYnVmKSA8IDApCisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY29ubmVjdCB0byBjYWNoZSBkYWVtb24iKTsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNoYXIgKnNvY2tldF9wYXRoID0gTlVMTDsKKwlpbnQgdGltZW91dCA9IDkwMDsKKwljb25zdCBjaGFyICpvcDsKKwljb25zdCBjaGFyICogY29uc3QgdXNhZ2VbXSA9IHsKKwkJImdpdCBjcmVkZW50aWFsLWNhY2hlIFtvcHRpb25zXSA8YWN0aW9uPiIsCisJCU5VTEwKKwl9OworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfSU5URUdFUigwLCAidGltZW91dCIsICZ0aW1lb3V0LAorCQkJICAgICJudW1iZXIgb2Ygc2Vjb25kcyB0byBjYWNoZSBjcmVkZW50aWFscyIpLAorCQlPUFRfU1RSSU5HKDAsICJzb2NrZXQiLCAmc29ja2V0X3BhdGgsICJwYXRoIiwKKwkJCSAgICJwYXRoIG9mIGNhY2hlLWRhZW1vbiBzb2NrZXQiKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIHVzYWdlLCAwKTsKKwlpZiAoIWFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZSwgb3B0aW9ucyk7CisJb3AgPSBhcmd2WzBdOworCisJaWYgKCFzb2NrZXRfcGF0aCkKKwkJc29ja2V0X3BhdGggPSBleHBhbmRfdXNlcl9wYXRoKCJ+Ly5naXQtY3JlZGVudGlhbC1jYWNoZS9zb2NrZXQiKTsKKwlpZiAoIXNvY2tldF9wYXRoKQorCQlkaWUoInVuYWJsZSB0byBmaW5kIGEgc3VpdGFibGUgc29ja2V0IHBhdGg7IHVzZSAtLXNvY2tldCIpOworCisJaWYgKCFzdHJjbXAob3AsICJleGl0IikpCisJCWRvX2NhY2hlKHNvY2tldF9wYXRoLCBvcCwgdGltZW91dCwgMCk7CisJZWxzZSBpZiAoIXN0cmNtcChvcCwgImdldCIpIHx8ICFzdHJjbXAob3AsICJlcmFzZSIpKQorCQlkb19jYWNoZShzb2NrZXRfcGF0aCwgb3AsIHRpbWVvdXQsIEZMQUdfUkVMQVkpOworCWVsc2UgaWYgKCFzdHJjbXAob3AsICJzdG9yZSIpKQorCQlkb19jYWNoZShzb2NrZXRfcGF0aCwgb3AsIHRpbWVvdXQsIEZMQUdfUkVMQVl8RkxBR19TUEFXTik7CisJZWxzZQorCQk7IC8qIGlnbm9yZSB1bmtub3duIG9wZXJhdGlvbiAqLworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jcmVkZW50aWFsLXN0b3JlLmMgYi9jcmVkZW50aWFsLXN0b3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmNzU4OQotLS0gL2Rldi9udWxsCisrKyBiL2NyZWRlbnRpYWwtc3RvcmUuYwpAQCAtMCwwICsxLDE1NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBjcmVkZW50aWFsX2xvY2s7CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NyZWRlbnRpYWxfZmlsZShjb25zdCBjaGFyICpmbiwKKwkJCQkgIHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJCSAgdm9pZCAoKm1hdGNoX2NiKShzdHJ1Y3QgY3JlZGVudGlhbCAqKSwKKwkJCQkgIHZvaWQgKCpvdGhlcl9jYikoc3RydWN0IHN0cmJ1ZiAqKSkKK3sKKwlGSUxFICpmaDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY3JlZGVudGlhbCBlbnRyeSA9IENSRURFTlRJQUxfSU5JVDsKKworCWZoID0gZm9wZW4oZm4sICJyIik7CisJaWYgKCFmaCkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gb3BlbiAlcyIsIGZuKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgZmgsICdcbicpICE9IEVPRikgeworCQljcmVkZW50aWFsX2Zyb21fdXJsKCZlbnRyeSwgbGluZS5idWYpOworCQlpZiAoZW50cnkudXNlcm5hbWUgJiYgZW50cnkucGFzc3dvcmQgJiYKKwkJICAgIGNyZWRlbnRpYWxfbWF0Y2goYywgJmVudHJ5KSkgeworCQkJaWYgKG1hdGNoX2NiKSB7CisJCQkJbWF0Y2hfY2IoJmVudHJ5KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChvdGhlcl9jYikKKwkJCW90aGVyX2NiKCZsaW5lKTsKKwl9CisKKwljcmVkZW50aWFsX2NsZWFyKCZlbnRyeSk7CisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCWZjbG9zZShmaCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2VudHJ5KHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCXByaW50ZigidXNlcm5hbWU9JXNcbiIsIGMtPnVzZXJuYW1lKTsKKwlwcmludGYoInBhc3N3b3JkPSVzXG4iLCBjLT5wYXNzd29yZCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xpbmUoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCXdyaXRlX29yX2RpZShjcmVkZW50aWFsX2xvY2suZmQsIGJ1Zi0+YnVmLCBidWYtPmxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHJld3JpdGVfY3JlZGVudGlhbF9maWxlKGNvbnN0IGNoYXIgKmZuLCBzdHJ1Y3QgY3JlZGVudGlhbCAqYywKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZXh0cmEpCit7CisJaWYgKGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmNyZWRlbnRpYWxfbG9jaywgZm4sIDApIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gZ2V0IGNyZWRlbnRpYWwgc3RvcmFnZSBsb2NrIik7CisJaWYgKGV4dHJhKQorCQlwcmludF9saW5lKGV4dHJhKTsKKwlwYXJzZV9jcmVkZW50aWFsX2ZpbGUoZm4sIGMsIE5VTEwsIHByaW50X2xpbmUpOworCWlmIChjb21taXRfbG9ja19maWxlKCZjcmVkZW50aWFsX2xvY2spIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY29tbWl0IGNyZWRlbnRpYWwgc3RvcmUiKTsKK30KKworc3RhdGljIHZvaWQgc3RvcmVfY3JlZGVudGlhbChjb25zdCBjaGFyICpmbiwgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCS8qCisJICogU2FuaXR5IGNoZWNrIHRoYXQgd2hhdCB3ZSBhcmUgc3RvcmluZyBpcyBhY3R1YWxseSBzZW5zaWJsZS4KKwkgKiBJbiBwYXJ0aWN1bGFyLCB3ZSBjYW4ndCBtYWtlIGEgVVJMIHdpdGhvdXQgYSBwcm90b2NvbCBmaWVsZC4KKwkgKiBXaXRob3V0IGVpdGhlciBhIGhvc3Qgb3IgcGF0aG5hbWUgKGRlcGVuZGluZyBvbiB0aGUgc2NoZW1lKSwKKwkgKiB3ZSBoYXZlIG5vIHByaW1hcnkga2V5LiBBbmQgd2l0aG91dCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwKKwkgKiB3ZSBhcmUgbm90IGFjdHVhbGx5IHN0b3JpbmcgYSBjcmVkZW50aWFsLgorCSAqLworCWlmICghYy0+cHJvdG9jb2wgfHwgIShjLT5ob3N0IHx8IGMtPnBhdGgpIHx8CisJICAgICFjLT51c2VybmFtZSB8fCAhYy0+cGFzc3dvcmQpCisJCXJldHVybjsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlczovLyIsIGMtPnByb3RvY29sKTsKKwlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmYnVmLCBjLT51c2VybmFtZSwgMSk7CisJc3RyYnVmX2FkZGNoKCZidWYsICc6Jyk7CisJc3RyYnVmX2FkZHN0cl91cmxlbmNvZGUoJmJ1ZiwgYy0+cGFzc3dvcmQsIDEpOworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnQCcpOworCWlmIChjLT5ob3N0KQorCQlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmYnVmLCBjLT5ob3N0LCAxKTsKKwlpZiAoYy0+cGF0aCkgeworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJy8nKTsKKwkJc3RyYnVmX2FkZHN0cl91cmxlbmNvZGUoJmJ1ZiwgYy0+cGF0aCwgMCk7CisJfQorCisJcmV3cml0ZV9jcmVkZW50aWFsX2ZpbGUoZm4sIGMsICZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfY3JlZGVudGlhbChjb25zdCBjaGFyICpmbiwgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJLyoKKwkgKiBTYW5pdHkgY2hlY2sgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWV0aGluZyB0byBtYXRjaAorCSAqIGFnYWluc3QuIFRoZSBpbnB1dCB3ZSBnZXQgaXMgYSByZXN0cmljdGl2ZSBwYXR0ZXJuLAorCSAqIHNvIHRlY2huaWNhbGx5IGEgYmxhbmsgY3JlZGVudGlhbCBtZWFucyAiZXJhc2UgZXZlcnl0aGluZyIuCisJICogQnV0IGl0IGlzIHRvbyBlYXN5IHRvIGFjY2lkZW50YWxseSBzZW5kIHRoaXMsIHNpbmNlIGl0IGlzIGVxdWl2YWxlbnQKKwkgKiB0byBlbXB0eSBpbnB1dC4gU28gZXhwbGljaXRseSBkaXNhbGxvdyBpdCwgYW5kIHJlcXVpcmUgdGhhdCB0aGUKKwkgKiBwYXR0ZXJuIGhhdmUgc29tZSBhY3R1YWwgY29udGVudCB0byBtYXRjaC4KKwkgKi8KKwlpZiAoYy0+cHJvdG9jb2wgfHwgYy0+aG9zdCB8fCBjLT5wYXRoIHx8IGMtPnVzZXJuYW1lKQorCQlyZXdyaXRlX2NyZWRlbnRpYWxfZmlsZShmbiwgYywgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgbG9va3VwX2NyZWRlbnRpYWwoY29uc3QgY2hhciAqZm4sIHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCXBhcnNlX2NyZWRlbnRpYWxfZmlsZShmbiwgYywgcHJpbnRfZW50cnksIE5VTEwpOworCXJldHVybiBjLT51c2VybmFtZSAmJiBjLT5wYXNzd29yZDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZVtdID0geworCQkiZ2l0IGNyZWRlbnRpYWwtc3RvcmUgW29wdGlvbnNdIDxhY3Rpb24+IiwKKwkJTlVMTAorCX07CisJY29uc3QgY2hhciAqb3A7CisJc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKKwljaGFyICpmaWxlID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAiZmlsZSIsICZmaWxlLCAicGF0aCIsCisJCQkgICAiZmV0Y2ggYW5kIHN0b3JlIGNyZWRlbnRpYWxzIGluIDxwYXRoPiIpLAorCQlPUFRfRU5EKCkKKwl9OworCisJdW1hc2soMDc3KTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIHVzYWdlLCAwKTsKKwlpZiAoYXJnYyAhPSAxKQorCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2UsIG9wdGlvbnMpOworCW9wID0gYXJndlswXTsKKworCWlmICghZmlsZSkKKwkJZmlsZSA9IGV4cGFuZF91c2VyX3BhdGgoIn4vLmdpdC1jcmVkZW50aWFscyIpOworCWlmICghZmlsZSkKKwkJZGllKCJ1bmFibGUgdG8gc2V0IHVwIGRlZmF1bHQgcGF0aDsgdXNlIC0tZmlsZSIpOworCisJaWYgKGNyZWRlbnRpYWxfcmVhZCgmYywgc3RkaW4pIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBjcmVkZW50aWFsIik7CisKKwlpZiAoIXN0cmNtcChvcCwgImdldCIpKQorCQlsb29rdXBfY3JlZGVudGlhbChmaWxlLCAmYyk7CisJZWxzZSBpZiAoIXN0cmNtcChvcCwgImVyYXNlIikpCisJCXJlbW92ZV9jcmVkZW50aWFsKGZpbGUsICZjKTsKKwllbHNlIGlmICghc3RyY21wKG9wLCAic3RvcmUiKSkKKwkJc3RvcmVfY3JlZGVudGlhbChmaWxlLCAmYyk7CisJZWxzZQorCQk7IC8qIElnbm9yZSB1bmtub3duIG9wZXJhdGlvbi4gKi8KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC5jIGIvY3JlZGVudGlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NDc1M2MKLS0tIC9kZXYvbnVsbAorKysgYi9jcmVkZW50aWFsLmMKQEAgLTAsMCArMSwzNjcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAicHJvbXB0LmgiCisKK3ZvaWQgY3JlZGVudGlhbF9pbml0KHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwljLT5oZWxwZXJzLnN0cmR1cF9zdHJpbmdzID0gMTsKK30KKwordm9pZCBjcmVkZW50aWFsX2NsZWFyKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWZyZWUoYy0+cHJvdG9jb2wpOworCWZyZWUoYy0+aG9zdCk7CisJZnJlZShjLT5wYXRoKTsKKwlmcmVlKGMtPnVzZXJuYW1lKTsKKwlmcmVlKGMtPnBhc3N3b3JkKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmYy0+aGVscGVycywgMCk7CisKKwljcmVkZW50aWFsX2luaXQoYyk7Cit9CisKK2ludCBjcmVkZW50aWFsX21hdGNoKGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICp3YW50LAorCQkgICAgIGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICpoYXZlKQoreworI2RlZmluZSBDSEVDSyh4KSAoIXdhbnQtPnggfHwgKGhhdmUtPnggJiYgIXN0cmNtcCh3YW50LT54LCBoYXZlLT54KSkpCisJcmV0dXJuIENIRUNLKHByb3RvY29sKSAmJgorCSAgICAgICBDSEVDSyhob3N0KSAmJgorCSAgICAgICBDSEVDSyhwYXRoKSAmJgorCSAgICAgICBDSEVDSyh1c2VybmFtZSk7CisjdW5kZWYgQ0hFQ0sKK30KKworc3RhdGljIGludCBjcmVkZW50aWFsX2NvbmZpZ19jYWxsYmFjayhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNyZWRlbnRpYWwgKmMgPSBkYXRhOworCWNvbnN0IGNoYXIgKmtleSwgKmRvdDsKKworCWtleSA9IHNraXBfcHJlZml4KHZhciwgImNyZWRlbnRpYWwuIik7CisJaWYgKCFrZXkpCisJCXJldHVybiAwOworCisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisKKwlkb3QgPSBzdHJyY2hyKGtleSwgJy4nKTsKKwlpZiAoZG90KSB7CisJCXN0cnVjdCBjcmVkZW50aWFsIHdhbnQgPSBDUkVERU5USUFMX0lOSVQ7CisJCWNoYXIgKnVybCA9IHhtZW1kdXB6KGtleSwgZG90IC0ga2V5KTsKKwkJaW50IG1hdGNoZWQ7CisKKwkJY3JlZGVudGlhbF9mcm9tX3VybCgmd2FudCwgdXJsKTsKKwkJbWF0Y2hlZCA9IGNyZWRlbnRpYWxfbWF0Y2goJndhbnQsIGMpOworCisJCWNyZWRlbnRpYWxfY2xlYXIoJndhbnQpOworCQlmcmVlKHVybCk7CisKKwkJaWYgKCFtYXRjaGVkKQorCQkJcmV0dXJuIDA7CisJCWtleSA9IGRvdCArIDE7CisJfQorCisJaWYgKCFzdHJjbXAoa2V5LCAiaGVscGVyIikpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmYy0+aGVscGVycywgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAidXNlcm5hbWUiKSkgeworCQlpZiAoIWMtPnVzZXJuYW1lKQorCQkJYy0+dXNlcm5hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJ1c2VodHRwcGF0aCIpKQorCQljLT51c2VfaHR0cF9wYXRoID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvdG9faXNfaHR0cChjb25zdCBjaGFyICpzKQoreworCWlmICghcykKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFzdHJjbXAocywgImh0dHBzIikgfHwgIXN0cmNtcChzLCAiaHR0cCIpOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2FwcGx5X2NvbmZpZyhzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpZiAoYy0+Y29uZmlndXJlZCkKKwkJcmV0dXJuOworCWdpdF9jb25maWcoY3JlZGVudGlhbF9jb25maWdfY2FsbGJhY2ssIGMpOworCWMtPmNvbmZpZ3VyZWQgPSAxOworCisJaWYgKCFjLT51c2VfaHR0cF9wYXRoICYmIHByb3RvX2lzX2h0dHAoYy0+cHJvdG9jb2wpKSB7CisJCWZyZWUoYy0+cGF0aCk7CisJCWMtPnBhdGggPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9kZXNjcmliZShzdHJ1Y3QgY3JlZGVudGlhbCAqYywgc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCWlmICghYy0+cHJvdG9jb2wpCisJCXJldHVybjsKKwlzdHJidWZfYWRkZihvdXQsICIlczovLyIsIGMtPnByb3RvY29sKTsKKwlpZiAoYy0+dXNlcm5hbWUgJiYgKmMtPnVzZXJuYW1lKQorCQlzdHJidWZfYWRkZihvdXQsICIlc0AiLCBjLT51c2VybmFtZSk7CisJaWYgKGMtPmhvc3QpCisJCXN0cmJ1Zl9hZGRzdHIob3V0LCBjLT5ob3N0KTsKKwlpZiAoYy0+cGF0aCkKKwkJc3RyYnVmX2FkZGYob3V0LCAiLyVzIiwgYy0+cGF0aCk7Cit9CisKK3N0YXRpYyBjaGFyICpjcmVkZW50aWFsX2Fza19vbmUoY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IGNyZWRlbnRpYWwgKmMsCisJCQkJaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgZGVzYyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcHJvbXB0ID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcjsKKworCWNyZWRlbnRpYWxfZGVzY3JpYmUoYywgJmRlc2MpOworCWlmIChkZXNjLmxlbikKKwkJc3RyYnVmX2FkZGYoJnByb21wdCwgIiVzIGZvciAnJXMnOiAiLCB3aGF0LCBkZXNjLmJ1Zik7CisJZWxzZQorCQlzdHJidWZfYWRkZigmcHJvbXB0LCAiJXM6ICIsIHdoYXQpOworCisJciA9IGdpdF9wcm9tcHQocHJvbXB0LmJ1ZiwgZmxhZ3MpOworCisJc3RyYnVmX3JlbGVhc2UoJmRlc2MpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcm9tcHQpOworCXJldHVybiB4c3RyZHVwKHIpOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2dldHBhc3Moc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJaWYgKCFjLT51c2VybmFtZSkKKwkJYy0+dXNlcm5hbWUgPSBjcmVkZW50aWFsX2Fza19vbmUoIlVzZXJuYW1lIiwgYywKKwkJCQkJCSBQUk9NUFRfQVNLUEFTU3xQUk9NUFRfRUNITyk7CisJaWYgKCFjLT5wYXNzd29yZCkKKwkJYy0+cGFzc3dvcmQgPSBjcmVkZW50aWFsX2Fza19vbmUoIlBhc3N3b3JkIiwgYywKKwkJCQkJCSBQUk9NUFRfQVNLUEFTUyk7Cit9CisKK2ludCBjcmVkZW50aWFsX3JlYWQoc3RydWN0IGNyZWRlbnRpYWwgKmMsIEZJTEUgKmZwKQoreworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBmcCwgJ1xuJykgIT0gRU9GKSB7CisJCWNoYXIgKmtleSA9IGxpbmUuYnVmOworCQljaGFyICp2YWx1ZSA9IHN0cmNocihrZXksICc9Jyk7CisKKwkJaWYgKCFsaW5lLmxlbikKKwkJCWJyZWFrOworCisJCWlmICghdmFsdWUpIHsKKwkJCXdhcm5pbmcoImludmFsaWQgY3JlZGVudGlhbCBsaW5lOiAlcyIsIGtleSk7CisJCQlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJKnZhbHVlKysgPSAnXDAnOworCisJCWlmICghc3RyY21wKGtleSwgInVzZXJuYW1lIikpIHsKKwkJCWZyZWUoYy0+dXNlcm5hbWUpOworCQkJYy0+dXNlcm5hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInBhc3N3b3JkIikpIHsKKwkJCWZyZWUoYy0+cGFzc3dvcmQpOworCQkJYy0+cGFzc3dvcmQgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInByb3RvY29sIikpIHsKKwkJCWZyZWUoYy0+cHJvdG9jb2wpOworCQkJYy0+cHJvdG9jb2wgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgImhvc3QiKSkgeworCQkJZnJlZShjLT5ob3N0KTsKKwkJCWMtPmhvc3QgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInBhdGgiKSkgeworCQkJZnJlZShjLT5wYXRoKTsKKwkJCWMtPnBhdGggPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInVybCIpKSB7CisJCQljcmVkZW50aWFsX2Zyb21fdXJsKGMsIHZhbHVlKTsKKwkJfQorCQkvKgorCQkgKiBJZ25vcmUgb3RoZXIgbGluZXM7IHdlIGRvbid0IGtub3cgd2hhdCB0aGV5IG1lYW4sIGJ1dAorCQkgKiB0aGlzIGZ1dHVyZS1wcm9vZnMgdXMgd2hlbiBsYXRlciB2ZXJzaW9ucyBvZiBnaXQgZG8KKwkJICogbGVhcm4gbmV3IGxpbmVzLCBhbmQgdGhlIGhlbHBlcnMgYXJlIHVwZGF0ZWQgdG8gbWF0Y2guCisJCSAqLworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF93cml0ZV9pdGVtKEZJTEUgKmZwLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybjsKKwlmcHJpbnRmKGZwLCAiJXM9JXNcbiIsIGtleSwgdmFsdWUpOworfQorCit2b2lkIGNyZWRlbnRpYWxfd3JpdGUoY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKmMsIEZJTEUgKmZwKQoreworCWNyZWRlbnRpYWxfd3JpdGVfaXRlbShmcCwgInByb3RvY29sIiwgYy0+cHJvdG9jb2wpOworCWNyZWRlbnRpYWxfd3JpdGVfaXRlbShmcCwgImhvc3QiLCBjLT5ob3N0KTsKKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oZnAsICJwYXRoIiwgYy0+cGF0aCk7CisJY3JlZGVudGlhbF93cml0ZV9pdGVtKGZwLCAidXNlcm5hbWUiLCBjLT51c2VybmFtZSk7CisJY3JlZGVudGlhbF93cml0ZV9pdGVtKGZwLCAicGFzc3dvcmQiLCBjLT5wYXNzd29yZCk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2NyZWRlbnRpYWxfaGVscGVyKHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJCSBjb25zdCBjaGFyICpjbWQsCisJCQkJIGludCB3YW50X291dHB1dCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBoZWxwZXI7CisJY29uc3QgY2hhciAqYXJndltdID0geyBOVUxMLCBOVUxMIH07CisJRklMRSAqZnA7CisKKwltZW1zZXQoJmhlbHBlciwgMCwgc2l6ZW9mKGhlbHBlcikpOworCWFyZ3ZbMF0gPSBjbWQ7CisJaGVscGVyLmFyZ3YgPSBhcmd2OworCWhlbHBlci51c2Vfc2hlbGwgPSAxOworCWhlbHBlci5pbiA9IC0xOworCWlmICh3YW50X291dHB1dCkKKwkJaGVscGVyLm91dCA9IC0xOworCWVsc2UKKwkJaGVscGVyLm5vX3N0ZG91dCA9IDE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmaGVscGVyKSA8IDApCisJCXJldHVybiAtMTsKKworCWZwID0geGZkb3BlbihoZWxwZXIuaW4sICJ3Iik7CisJY3JlZGVudGlhbF93cml0ZShjLCBmcCk7CisJZmNsb3NlKGZwKTsKKworCWlmICh3YW50X291dHB1dCkgeworCQlpbnQgcjsKKwkJZnAgPSB4ZmRvcGVuKGhlbHBlci5vdXQsICJyIik7CisJCXIgPSBjcmVkZW50aWFsX3JlYWQoYywgZnApOworCQlmY2xvc2UoZnApOworCQlpZiAociA8IDApIHsKKwkJCWZpbmlzaF9jb21tYW5kKCZoZWxwZXIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKGZpbmlzaF9jb21tYW5kKCZoZWxwZXIpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3JlZGVudGlhbF9kbyhzdHJ1Y3QgY3JlZGVudGlhbCAqYywgY29uc3QgY2hhciAqaGVscGVyLAorCQkJIGNvbnN0IGNoYXIgKm9wZXJhdGlvbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGNtZCA9IFNUUkJVRl9JTklUOworCWludCByOworCisJaWYgKGhlbHBlclswXSA9PSAnIScpCisJCXN0cmJ1Zl9hZGRzdHIoJmNtZCwgaGVscGVyICsgMSk7CisJZWxzZSBpZiAoaXNfYWJzb2x1dGVfcGF0aChoZWxwZXIpKQorCQlzdHJidWZfYWRkc3RyKCZjbWQsIGhlbHBlcik7CisJZWxzZQorCQlzdHJidWZfYWRkZigmY21kLCAiZ2l0IGNyZWRlbnRpYWwtJXMiLCBoZWxwZXIpOworCisJc3RyYnVmX2FkZGYoJmNtZCwgIiAlcyIsIG9wZXJhdGlvbik7CisJciA9IHJ1bl9jcmVkZW50aWFsX2hlbHBlcihjLCBjbWQuYnVmLCAhc3RyY21wKG9wZXJhdGlvbiwgImdldCIpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZjbWQpOworCXJldHVybiByOworfQorCit2b2lkIGNyZWRlbnRpYWxfZmlsbChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpbnQgaTsKKworCWlmIChjLT51c2VybmFtZSAmJiBjLT5wYXNzd29yZCkKKwkJcmV0dXJuOworCisJY3JlZGVudGlhbF9hcHBseV9jb25maWcoYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYy0+aGVscGVycy5ucjsgaSsrKSB7CisJCWNyZWRlbnRpYWxfZG8oYywgYy0+aGVscGVycy5pdGVtc1tpXS5zdHJpbmcsICJnZXQiKTsKKwkJaWYgKGMtPnVzZXJuYW1lICYmIGMtPnBhc3N3b3JkKQorCQkJcmV0dXJuOworCX0KKworCWNyZWRlbnRpYWxfZ2V0cGFzcyhjKTsKKwlpZiAoIWMtPnVzZXJuYW1lICYmICFjLT5wYXNzd29yZCkKKwkJZGllKCJ1bmFibGUgdG8gZ2V0IHBhc3N3b3JkIGZyb20gdXNlciIpOworfQorCit2b2lkIGNyZWRlbnRpYWxfYXBwcm92ZShzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpbnQgaTsKKworCWlmIChjLT5hcHByb3ZlZCkKKwkJcmV0dXJuOworCWlmICghYy0+dXNlcm5hbWUgfHwgIWMtPnBhc3N3b3JkKQorCQlyZXR1cm47CisKKwljcmVkZW50aWFsX2FwcGx5X2NvbmZpZyhjKTsKKworCWZvciAoaSA9IDA7IGkgPCBjLT5oZWxwZXJzLm5yOyBpKyspCisJCWNyZWRlbnRpYWxfZG8oYywgYy0+aGVscGVycy5pdGVtc1tpXS5zdHJpbmcsICJzdG9yZSIpOworCWMtPmFwcHJvdmVkID0gMTsKK30KKwordm9pZCBjcmVkZW50aWFsX3JlamVjdChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpbnQgaTsKKworCWNyZWRlbnRpYWxfYXBwbHlfY29uZmlnKGMpOworCisJZm9yIChpID0gMDsgaSA8IGMtPmhlbHBlcnMubnI7IGkrKykKKwkJY3JlZGVudGlhbF9kbyhjLCBjLT5oZWxwZXJzLml0ZW1zW2ldLnN0cmluZywgImVyYXNlIik7CisKKwlmcmVlKGMtPnVzZXJuYW1lKTsKKwljLT51c2VybmFtZSA9IE5VTEw7CisJZnJlZShjLT5wYXNzd29yZCk7CisJYy0+cGFzc3dvcmQgPSBOVUxMOworCWMtPmFwcHJvdmVkID0gMDsKK30KKwordm9pZCBjcmVkZW50aWFsX2Zyb21fdXJsKHN0cnVjdCBjcmVkZW50aWFsICpjLCBjb25zdCBjaGFyICp1cmwpCit7CisJY29uc3QgY2hhciAqYXQsICpjb2xvbiwgKmNwLCAqc2xhc2gsICpob3N0LCAqcHJvdG9fZW5kOworCisJY3JlZGVudGlhbF9jbGVhcihjKTsKKworCS8qCisJICogTWF0Y2ggb25lIG9mOgorCSAqICAgKDEpIHByb3RvOi8vPGhvc3Q+Ly4uLgorCSAqICAgKDIpIHByb3RvOi8vPHVzZXI+QDxob3N0Pi8uLi4KKwkgKiAgICgzKSBwcm90bzovLzx1c2VyPjo8cGFzcz5APGhvc3Q+Ly4uLgorCSAqLworCXByb3RvX2VuZCA9IHN0cnN0cih1cmwsICI6Ly8iKTsKKwlpZiAoIXByb3RvX2VuZCkKKwkJcmV0dXJuOworCWNwID0gcHJvdG9fZW5kICsgMzsKKwlhdCA9IHN0cmNocihjcCwgJ0AnKTsKKwljb2xvbiA9IHN0cmNocihjcCwgJzonKTsKKwlzbGFzaCA9IHN0cmNocm51bChjcCwgJy8nKTsKKworCWlmICghYXQgfHwgc2xhc2ggPD0gYXQpIHsKKwkJLyogQ2FzZSAoMSkgKi8KKwkJaG9zdCA9IGNwOworCX0KKwllbHNlIGlmICghY29sb24gfHwgYXQgPD0gY29sb24pIHsKKwkJLyogQ2FzZSAoMikgKi8KKwkJYy0+dXNlcm5hbWUgPSB1cmxfZGVjb2RlX21lbShjcCwgYXQgLSBjcCk7CisJCWhvc3QgPSBhdCArIDE7CisJfSBlbHNlIHsKKwkJLyogQ2FzZSAoMykgKi8KKwkJYy0+dXNlcm5hbWUgPSB1cmxfZGVjb2RlX21lbShjcCwgY29sb24gLSBjcCk7CisJCWMtPnBhc3N3b3JkID0gdXJsX2RlY29kZV9tZW0oY29sb24gKyAxLCBhdCAtIChjb2xvbiArIDEpKTsKKwkJaG9zdCA9IGF0ICsgMTsKKwl9CisKKwlpZiAocHJvdG9fZW5kIC0gdXJsID4gMCkKKwkJYy0+cHJvdG9jb2wgPSB4bWVtZHVweih1cmwsIHByb3RvX2VuZCAtIHVybCk7CisJaWYgKHNsYXNoIC0gaG9zdCA+IDApCisJCWMtPmhvc3QgPSB1cmxfZGVjb2RlX21lbShob3N0LCBzbGFzaCAtIGhvc3QpOworCS8qIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHBhdGggKi8KKwl3aGlsZSAoKnNsYXNoID09ICcvJykKKwkJc2xhc2grKzsKKwlpZiAoKnNsYXNoKSB7CisJCWNoYXIgKnA7CisJCWMtPnBhdGggPSB1cmxfZGVjb2RlKHNsYXNoKTsKKwkJcCA9IGMtPnBhdGggKyBzdHJsZW4oYy0+cGF0aCkgLSAxOworCQl3aGlsZSAocCA+IGMtPnBhdGggJiYgKnAgPT0gJy8nKQorCQkJKnAtLSA9ICdcMCc7CisJfQorfQpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC5oIGIvY3JlZGVudGlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjM2U4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9jcmVkZW50aWFsLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBDUkVERU5USUFMX0gKKyNkZWZpbmUgQ1JFREVOVElBTF9ICisKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdHJ1Y3QgY3JlZGVudGlhbCB7CisJc3RydWN0IHN0cmluZ19saXN0IGhlbHBlcnM7CisJdW5zaWduZWQgYXBwcm92ZWQ6MSwKKwkJIGNvbmZpZ3VyZWQ6MSwKKwkJIHVzZV9odHRwX3BhdGg6MTsKKworCWNoYXIgKnVzZXJuYW1lOworCWNoYXIgKnBhc3N3b3JkOworCWNoYXIgKnByb3RvY29sOworCWNoYXIgKmhvc3Q7CisJY2hhciAqcGF0aDsKK307CisKKyNkZWZpbmUgQ1JFREVOVElBTF9JTklUIHsgU1RSSU5HX0xJU1RfSU5JVF9EVVAgfQorCit2b2lkIGNyZWRlbnRpYWxfaW5pdChzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKK3ZvaWQgY3JlZGVudGlhbF9jbGVhcihzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKKwordm9pZCBjcmVkZW50aWFsX2ZpbGwoc3RydWN0IGNyZWRlbnRpYWwgKik7Cit2b2lkIGNyZWRlbnRpYWxfYXBwcm92ZShzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKK3ZvaWQgY3JlZGVudGlhbF9yZWplY3Qoc3RydWN0IGNyZWRlbnRpYWwgKik7CisKK2ludCBjcmVkZW50aWFsX3JlYWQoc3RydWN0IGNyZWRlbnRpYWwgKiwgRklMRSAqKTsKK3ZvaWQgY3JlZGVudGlhbF93cml0ZShjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqLCBGSUxFICopOwordm9pZCBjcmVkZW50aWFsX2Zyb21fdXJsKHN0cnVjdCBjcmVkZW50aWFsICosIGNvbnN0IGNoYXIgKnVybCk7CitpbnQgY3JlZGVudGlhbF9tYXRjaChjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqaGF2ZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqd2FudCk7CisKKyNlbmRpZiAvKiBDUkVERU5USUFMX0ggKi8KZGlmZiAtLWdpdCBhL2NzdW0tZmlsZS5jIGIvY3N1bS1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmNTM3NQotLS0gL2Rldi9udWxsCisrKyBiL2NzdW0tZmlsZS5jCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogY3N1bS1maWxlLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTGludXMgVG9ydmFsZHMKKyAqCisgKiBTaW1wbGUgZmlsZSB3cml0ZSBpbmZyYXN0cnVjdHVyZSBmb3Igd3JpdGluZyBTSEExLXN1bW1lZAorICogZmlsZXMuIFVzZWZ1bCB3aGVuIHlvdSB3cml0ZSBhIGZpbGUgdGhhdCB5b3Ugd2FudCB0byBiZQorICogYWJsZSB0byB2ZXJpZnkgaGFzbid0IGJlZW4gbWVzc2VkIHdpdGggYWZ0ZXJ3YXJkcy4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKworc3RhdGljIHZvaWQgZmx1c2goc3RydWN0IHNoYTFmaWxlICpmLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlpZiAoMCA8PSBmLT5jaGVja19mZCAmJiBjb3VudCkgIHsKKwkJdW5zaWduZWQgY2hhciBjaGVja19idWZmZXJbODE5Ml07CisJCXNzaXplX3QgcmV0ID0gcmVhZF9pbl9mdWxsKGYtPmNoZWNrX2ZkLCBjaGVja19idWZmZXIsIGNvdW50KTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWRpZV9lcnJubygiJXM6IHNoYTEgZmlsZSByZWFkIGVycm9yIiwgZi0+bmFtZSk7CisJCWlmIChyZXQgPCBjb3VudCkKKwkJCWRpZSgiJXM6IHNoYTEgZmlsZSB0cnVuY2F0ZWQiLCBmLT5uYW1lKTsKKwkJaWYgKG1lbWNtcChidWYsIGNoZWNrX2J1ZmZlciwgY291bnQpKQorCQkJZGllKCJzaGExIGZpbGUgJyVzJyB2YWxpZGF0aW9uIGVycm9yIiwgZi0+bmFtZSk7CisJfQorCisJZm9yICg7OykgeworCQlpbnQgcmV0ID0geHdyaXRlKGYtPmZkLCBidWYsIGNvdW50KTsKKwkJaWYgKHJldCA+IDApIHsKKwkJCWYtPnRvdGFsICs9IHJldDsKKwkJCWRpc3BsYXlfdGhyb3VnaHB1dChmLT50cCwgZi0+dG90YWwpOworCQkJYnVmID0gKGNoYXIgKikgYnVmICsgcmV0OworCQkJY291bnQgLT0gcmV0OworCQkJaWYgKGNvdW50KQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuOworCQl9CisJCWlmICghcmV0KQorCQkJZGllKCJzaGExIGZpbGUgJyVzJyB3cml0ZSBlcnJvci4gT3V0IG9mIGRpc2tzcGFjZSIsIGYtPm5hbWUpOworCQlkaWVfZXJybm8oInNoYTEgZmlsZSAnJXMnIHdyaXRlIGVycm9yIiwgZi0+bmFtZSk7CisJfQorfQorCit2b2lkIHNoYTFmbHVzaChzdHJ1Y3Qgc2hhMWZpbGUgKmYpCit7CisJdW5zaWduZWQgb2Zmc2V0ID0gZi0+b2Zmc2V0OworCisJaWYgKG9mZnNldCkgeworCQlnaXRfU0hBMV9VcGRhdGUoJmYtPmN0eCwgZi0+YnVmZmVyLCBvZmZzZXQpOworCQlmbHVzaChmLCBmLT5idWZmZXIsIG9mZnNldCk7CisJCWYtPm9mZnNldCA9IDA7CisJfQorfQorCitpbnQgc2hhMWNsb3NlKHN0cnVjdCBzaGExZmlsZSAqZiwgdW5zaWduZWQgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGZkOworCisJc2hhMWZsdXNoKGYpOworCWdpdF9TSEExX0ZpbmFsKGYtPmJ1ZmZlciwgJmYtPmN0eCk7CisJaWYgKHJlc3VsdCkKKwkJaGFzaGNweShyZXN1bHQsIGYtPmJ1ZmZlcik7CisJaWYgKGZsYWdzICYgKENTVU1fQ0xPU0UgfCBDU1VNX0ZTWU5DKSkgeworCQkvKiB3cml0ZSBjaGVja3N1bSBhbmQgY2xvc2UgZmQgKi8KKwkJZmx1c2goZiwgZi0+YnVmZmVyLCAyMCk7CisJCWlmIChmbGFncyAmIENTVU1fRlNZTkMpCisJCQlmc3luY19vcl9kaWUoZi0+ZmQsIGYtPm5hbWUpOworCQlpZiAoY2xvc2UoZi0+ZmQpKQorCQkJZGllX2Vycm5vKCIlczogc2hhMSBmaWxlIGVycm9yIG9uIGNsb3NlIiwgZi0+bmFtZSk7CisJCWZkID0gMDsKKwl9IGVsc2UKKwkJZmQgPSBmLT5mZDsKKwlpZiAoMCA8PSBmLT5jaGVja19mZCkgeworCQljaGFyIGRpc2NhcmQ7CisJCWludCBjbnQgPSByZWFkX2luX2Z1bGwoZi0+Y2hlY2tfZmQsICZkaXNjYXJkLCAxKTsKKwkJaWYgKGNudCA8IDApCisJCQlkaWVfZXJybm8oIiVzOiBlcnJvciB3aGVuIHJlYWRpbmcgdGhlIHRhaWwgb2Ygc2hhMSBmaWxlIiwKKwkJCQkgIGYtPm5hbWUpOworCQlpZiAoY250KQorCQkJZGllKCIlczogc2hhMSBmaWxlIGhhcyB0cmFpbGluZyBnYXJiYWdlIiwgZi0+bmFtZSk7CisJCWlmIChjbG9zZShmLT5jaGVja19mZCkpCisJCQlkaWVfZXJybm8oIiVzOiBzaGExIGZpbGUgZXJyb3Igb24gY2xvc2UiLCBmLT5uYW1lKTsKKwl9CisJZnJlZShmKTsKKwlyZXR1cm4gZmQ7Cit9CisKK2ludCBzaGExd3JpdGUoc3RydWN0IHNoYTFmaWxlICpmLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQpIHsKKwkJdW5zaWduZWQgb2Zmc2V0ID0gZi0+b2Zmc2V0OworCQl1bnNpZ25lZCBsZWZ0ID0gc2l6ZW9mKGYtPmJ1ZmZlcikgLSBvZmZzZXQ7CisJCXVuc2lnbmVkIG5yID0gY291bnQgPiBsZWZ0ID8gbGVmdCA6IGNvdW50OworCQl2b2lkICpkYXRhOworCisJCWlmIChmLT5kb19jcmMpCisJCQlmLT5jcmMzMiA9IGNyYzMyKGYtPmNyYzMyLCBidWYsIG5yKTsKKworCQlpZiAobnIgPT0gc2l6ZW9mKGYtPmJ1ZmZlcikpIHsKKwkJCS8qIHByb2Nlc3MgZnVsbCBidWZmZXIgZGlyZWN0bHkgd2l0aG91dCBjb3B5ICovCisJCQlkYXRhID0gYnVmOworCQl9IGVsc2UgeworCQkJbWVtY3B5KGYtPmJ1ZmZlciArIG9mZnNldCwgYnVmLCBucik7CisJCQlkYXRhID0gZi0+YnVmZmVyOworCQl9CisKKwkJY291bnQgLT0gbnI7CisJCW9mZnNldCArPSBucjsKKwkJYnVmID0gKGNoYXIgKikgYnVmICsgbnI7CisJCWxlZnQgLT0gbnI7CisJCWlmICghbGVmdCkgeworCQkJZ2l0X1NIQTFfVXBkYXRlKCZmLT5jdHgsIGRhdGEsIG9mZnNldCk7CisJCQlmbHVzaChmLCBkYXRhLCBvZmZzZXQpOworCQkJb2Zmc2V0ID0gMDsKKwkJfQorCQlmLT5vZmZzZXQgPSBvZmZzZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc2hhMWZpbGUgKnNoYTFmZChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIHNoYTFmZF90aHJvdWdocHV0KGZkLCBuYW1lLCBOVUxMKTsKK30KKworc3RydWN0IHNoYTFmaWxlICpzaGExZmRfY2hlY2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgc2luaywgY2hlY2s7CisJc3RydWN0IHNoYTFmaWxlICpmOworCisJc2luayA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fV1JPTkxZKTsKKwlpZiAoc2luayA8IDApCisJCXJldHVybiBOVUxMOworCWNoZWNrID0gb3BlbihuYW1lLCBPX1JET05MWSk7CisJaWYgKGNoZWNrIDwgMCkgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJY2xvc2Uoc2luayk7CisJCWVycm5vID0gc2F2ZWRfZXJybm87CisJCXJldHVybiBOVUxMOworCX0KKwlmID0gc2hhMWZkKHNpbmssIG5hbWUpOworCWYtPmNoZWNrX2ZkID0gY2hlY2s7CisJcmV0dXJuIGY7Cit9CisKK3N0cnVjdCBzaGExZmlsZSAqc2hhMWZkX3Rocm91Z2hwdXQoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcHJvZ3Jlc3MgKnRwKQoreworCXN0cnVjdCBzaGExZmlsZSAqZiA9IHhtYWxsb2Moc2l6ZW9mKCpmKSk7CisJZi0+ZmQgPSBmZDsKKwlmLT5jaGVja19mZCA9IC0xOworCWYtPm9mZnNldCA9IDA7CisJZi0+dG90YWwgPSAwOworCWYtPnRwID0gdHA7CisJZi0+bmFtZSA9IG5hbWU7CisJZi0+ZG9fY3JjID0gMDsKKwlnaXRfU0hBMV9Jbml0KCZmLT5jdHgpOworCXJldHVybiBmOworfQorCit2b2lkIHNoYTFmaWxlX2NoZWNrcG9pbnQoc3RydWN0IHNoYTFmaWxlICpmLCBzdHJ1Y3Qgc2hhMWZpbGVfY2hlY2twb2ludCAqY2hlY2twb2ludCkKK3sKKwlzaGExZmx1c2goZik7CisJY2hlY2twb2ludC0+b2Zmc2V0ID0gZi0+dG90YWw7CisJY2hlY2twb2ludC0+Y3R4ID0gZi0+Y3R4OworfQorCitpbnQgc2hhMWZpbGVfdHJ1bmNhdGUoc3RydWN0IHNoYTFmaWxlICpmLCBzdHJ1Y3Qgc2hhMWZpbGVfY2hlY2twb2ludCAqY2hlY2twb2ludCkKK3sKKwlvZmZfdCBvZmZzZXQgPSBjaGVja3BvaW50LT5vZmZzZXQ7CisKKwlpZiAoZnRydW5jYXRlKGYtPmZkLCBvZmZzZXQpIHx8CisJICAgIGxzZWVrKGYtPmZkLCBvZmZzZXQsIFNFRUtfU0VUKSAhPSBvZmZzZXQpCisJCXJldHVybiAtMTsKKwlmLT50b3RhbCA9IG9mZnNldDsKKwlmLT5jdHggPSBjaGVja3BvaW50LT5jdHg7CisJZi0+b2Zmc2V0ID0gMDsgLyogc2hhMWZsdXNoKCkgd2FzIGNhbGxlZCBpbiBjaGVja3BvaW50ICovCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3JjMzJfYmVnaW4oc3RydWN0IHNoYTFmaWxlICpmKQoreworCWYtPmNyYzMyID0gY3JjMzIoMCwgTlVMTCwgMCk7CisJZi0+ZG9fY3JjID0gMTsKK30KKwordWludDMyX3QgY3JjMzJfZW5kKHN0cnVjdCBzaGExZmlsZSAqZikKK3sKKwlmLT5kb19jcmMgPSAwOworCXJldHVybiBmLT5jcmMzMjsKK30KZGlmZiAtLWdpdCBhL2NzdW0tZmlsZS5oIGIvY3N1bS1maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1NDBiZAotLS0gL2Rldi9udWxsCisrKyBiL2NzdW0tZmlsZS5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgQ1NVTV9GSUxFX0gKKyNkZWZpbmUgQ1NVTV9GSUxFX0gKKworc3RydWN0IHByb2dyZXNzOworCisvKiBBIFNIQTEtcHJvdGVjdGVkIGZpbGUgKi8KK3N0cnVjdCBzaGExZmlsZSB7CisJaW50IGZkOworCWludCBjaGVja19mZDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCWdpdF9TSEFfQ1RYIGN0eDsKKwlvZmZfdCB0b3RhbDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnRwOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGRvX2NyYzsKKwl1aW50MzJfdCBjcmMzMjsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls4MTkyXTsKK307CisKKy8qIENoZWNrcG9pbnQgKi8KK3N0cnVjdCBzaGExZmlsZV9jaGVja3BvaW50IHsKKwlvZmZfdCBvZmZzZXQ7CisJZ2l0X1NIQV9DVFggY3R4OworfTsKKworZXh0ZXJuIHZvaWQgc2hhMWZpbGVfY2hlY2twb2ludChzdHJ1Y3Qgc2hhMWZpbGUgKiwgc3RydWN0IHNoYTFmaWxlX2NoZWNrcG9pbnQgKik7CitleHRlcm4gaW50IHNoYTFmaWxlX3RydW5jYXRlKHN0cnVjdCBzaGExZmlsZSAqLCBzdHJ1Y3Qgc2hhMWZpbGVfY2hlY2twb2ludCAqKTsKKworLyogc2hhMWNsb3NlIGZsYWdzICovCisjZGVmaW5lIENTVU1fQ0xPU0UJMQorI2RlZmluZSBDU1VNX0ZTWU5DCTIKKworZXh0ZXJuIHN0cnVjdCBzaGExZmlsZSAqc2hhMWZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gc3RydWN0IHNoYTFmaWxlICpzaGExZmRfY2hlY2soY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gc3RydWN0IHNoYTFmaWxlICpzaGExZmRfdGhyb3VnaHB1dChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwcm9ncmVzcyAqdHApOworZXh0ZXJuIGludCBzaGExY2xvc2Uoc3RydWN0IHNoYTFmaWxlICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBpbnQgc2hhMXdyaXRlKHN0cnVjdCBzaGExZmlsZSAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBzaGExZmx1c2goc3RydWN0IHNoYTFmaWxlICpmKTsKK2V4dGVybiB2b2lkIGNyYzMyX2JlZ2luKHN0cnVjdCBzaGExZmlsZSAqKTsKK2V4dGVybiB1aW50MzJfdCBjcmMzMl9lbmQoc3RydWN0IHNoYTFmaWxlICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N0eXBlLmMgYi9jdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNTMyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9jdHlwZS5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBTYW5lIGxvY2FsZS1pbmRlcGVuZGVudCwgQVNDSUkgY3R5cGUuCisgKgorICogTm8gc3VycHJpc2VzLCBhbmQgd29ya3Mgd2l0aCBzaWduZWQgYW5kIHVuc2lnbmVkIGNoYXJzLgorICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2VudW0geworCVMgPSBHSVRfU1BBQ0UsCisJQSA9IEdJVF9BTFBIQSwKKwlEID0gR0lUX0RJR0lULAorCUcgPSBHSVRfR0xPQl9TUEVDSUFMLAkvKiAqLCA/LCBbLCBcXCAqLworCVIgPSBHSVRfUkVHRVhfU1BFQ0lBTCwJLyogJCwgKCwgKSwgKywgLiwgXiwgeywgfCAqLworCVAgPSBHSVRfUEFUSFNQRUNfTUFHSUMgIC8qIG90aGVyIG5vbi1hbG51bSwgZXhjZXB0IGZvciBdIGFuZCB9ICovCit9OworCit1bnNpZ25lZCBjaGFyIHNhbmVfY3R5cGVbMjU2XSA9IHsKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCBTLCBTLCAwLCAwLCBTLCAwLCAwLAkJLyogICAwLi4gMTUgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAkJLyogIDE2Li4gMzEgKi8KKwlTLCBQLCBQLCBQLCBSLCBQLCBQLCBQLCBSLCBSLCBHLCBSLCBQLCBQLCBSLCBQLAkJLyogIDMyLi4gNDcgKi8KKwlELCBELCBELCBELCBELCBELCBELCBELCBELCBELCBQLCBQLCBQLCBQLCBQLCBHLAkJLyogIDQ4Li4gNjMgKi8KKwlQLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLAkJLyogIDY0Li4gNzkgKi8KKwlBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBHLCBHLCAwLCBSLCBQLAkJLyogIDgwLi4gOTUgKi8KKwlQLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLAkJLyogIDk2Li4xMTEgKi8KKwlBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBSLCBSLCAwLCBQLCAwLAkJLyogMTEyLi4xMjcgKi8KKwkvKiBOb3RoaW5nIGluIHRoZSAxMjguLiByYW5nZSAqLworfTsKKworLyogRm9yIGNhc2UtaW5zZW5zaXRpdmUga3dzZXQgKi8KK2NvbnN0IGNoYXIgdG9sb3dlcl90cmFuc190YmxbMjU2XSA9IHsKKwkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCTB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisJMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKwkweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAorCSAnICcsICAnIScsICAnIicsICAnIycsICAnJCcsICAnJScsICAnJicsIDB4MjcsCisJICcoJywgICcpJywgICcqJywgICcrJywgICcsJywgICctJywgICcuJywgICcvJywKKwkgJzAnLCAgJzEnLCAgJzInLCAgJzMnLCAgJzQnLCAgJzUnLCAgJzYnLCAgJzcnLAorCSAnOCcsICAnOScsICAnOicsICAnOycsICAnPCcsICAnPScsICAnPicsICAnPycsCisJICdAJywgICdhJywgICdiJywgICdjJywgICdkJywgICdlJywgICdmJywgICdnJywKKwkgJ2gnLCAgJ2knLCAgJ2onLCAgJ2snLCAgJ2wnLCAgJ20nLCAgJ24nLCAgJ28nLAorCSAncCcsICAncScsICAncicsICAncycsICAndCcsICAndScsICAndicsICAndycsCisJICd4JywgICd5JywgICd6JywgICdbJywgMHg1YywgICddJywgICdeJywgICdfJywKKwkgJ2AnLCAgJ2EnLCAgJ2InLCAgJ2MnLCAgJ2QnLCAgJ2UnLCAgJ2YnLCAgJ2cnLAorCSAnaCcsICAnaScsICAnaicsICAnaycsICAnbCcsICAnbScsICAnbicsICAnbycsCisJICdwJywgICdxJywgICdyJywgICdzJywgICd0JywgICd1JywgICd2JywgICd3JywKKwkgJ3gnLCAgJ3knLCAgJ3onLCAgJ3snLCAgJ3wnLCAgJ30nLCAgJ34nLCAweDdmLAorCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCisJMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywKKwkweGE4LCAweGE5LCAweGFhLCAweGFiLCAweGFjLCAweGFkLCAweGFlLCAweGFmLAorCTB4YjAsIDB4YjEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsCisJMHhiOCwgMHhiOSwgMHhiYSwgMHhiYiwgMHhiYywgMHhiZCwgMHhiZSwgMHhiZiwKKwkweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAorCTB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsCisJMHhkMCwgMHhkMSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywKKwkweGQ4LCAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLAorCTB4ZTAsIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsCisJMHhlOCwgMHhlOSwgMHhlYSwgMHhlYiwgMHhlYywgMHhlZCwgMHhlZSwgMHhlZiwKKwkweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAorCTB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQsIDB4ZmUsIDB4ZmYsCit9OwpkaWZmIC0tZ2l0IGEvZGFlbW9uLmMgYi9kYWVtb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjAyYjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZGFlbW9uLmMKQEAgLTAsMCArMSwxMzY5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCisjaWZuZGVmIEhPU1RfTkFNRV9NQVgKKyNkZWZpbmUgSE9TVF9OQU1FX01BWCAyNTYKKyNlbmRpZgorCisjaWZuZGVmIE5JX01BWFNFUlYKKyNkZWZpbmUgTklfTUFYU0VSViAzMgorI2VuZGlmCisKKyNpZmRlZiBOT19JTklUR1JPVVBTCisjZGVmaW5lIGluaXRncm91cHMoeCwgeSkgKDApIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCitzdGF0aWMgaW50IGxvZ19zeXNsb2c7CitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IHJldXNlYWRkcjsKK3N0YXRpYyBpbnQgaW5mb3JtYXRpdmVfZXJyb3JzOworCitzdGF0aWMgY29uc3QgY2hhciBkYWVtb25fdXNhZ2VbXSA9CisiZ2l0IGRhZW1vbiBbLS12ZXJib3NlXSBbLS1zeXNsb2ddIFstLWV4cG9ydC1hbGxdXG4iCisiICAgICAgICAgICBbLS10aW1lb3V0PTxuPl0gWy0taW5pdC10aW1lb3V0PTxuPl0gWy0tbWF4LWNvbm5lY3Rpb25zPTxuPl1cbiIKKyIgICAgICAgICAgIFstLXN0cmljdC1wYXRoc10gWy0tYmFzZS1wYXRoPTxwYXRoPl0gWy0tYmFzZS1wYXRoLXJlbGF4ZWRdXG4iCisiICAgICAgICAgICBbLS11c2VyLXBhdGggfCAtLXVzZXItcGF0aD08cGF0aD5dXG4iCisiICAgICAgICAgICBbLS1pbnRlcnBvbGF0ZWQtcGF0aD08cGF0aD5dXG4iCisiICAgICAgICAgICBbLS1yZXVzZWFkZHJdIFstLXBpZC1maWxlPTxmaWxlPl1cbiIKKyIgICAgICAgICAgIFstLShlbmFibGV8ZGlzYWJsZXxhbGxvdy1vdmVycmlkZXxmb3JiaWQtb3ZlcnJpZGUpPTxzZXJ2aWNlPl1cbiIKKyIgICAgICAgICAgIFstLWFjY2Vzcy1ob29rPTxwYXRoPl1cbiIKKyIgICAgICAgICAgIFstLWluZXRkIHwgWy0tbGlzdGVuPTxob3N0X29yX2lwYWRkcj5dIFstLXBvcnQ9PG4+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgICBbLS1kZXRhY2hdIFstLXVzZXI9PHVzZXI+IFstLWdyb3VwPTxncm91cD5dXVxuIgorIiAgICAgICAgICAgWzxkaXJlY3Rvcnk+Li4uXSI7CisKKy8qIExpc3Qgb2YgYWNjZXB0YWJsZSBwYXRobmFtZSBwcmVmaXhlcyAqLworc3RhdGljIGNoYXIgKipva19wYXRoczsKK3N0YXRpYyBpbnQgc3RyaWN0X3BhdGhzOworCisvKiBJZiB0aGlzIGlzIHNldCwgZ2l0LWRhZW1vbi1leHBvcnQtb2sgaXMgbm90IHJlcXVpcmVkICovCitzdGF0aWMgaW50IGV4cG9ydF9hbGxfdHJlZXM7CisKKy8qIFRha2UgYWxsIHBhdGhzIHJlbGF0aXZlIHRvIHRoaXMgb25lIGlmIG5vbi1OVUxMICovCitzdGF0aWMgY2hhciAqYmFzZV9wYXRoOworc3RhdGljIGNoYXIgKmludGVycG9sYXRlZF9wYXRoOworc3RhdGljIGludCBiYXNlX3BhdGhfcmVsYXhlZDsKKworLyogRmxhZyBpbmRpY2F0aW5nIGNsaWVudCBzZW50IGV4dHJhIGFyZ3MuICovCitzdGF0aWMgaW50IHNhd19leHRlbmRlZF9hcmdzOworCisvKiBJZiBkZWZpbmVkLCB+dXNlciBub3RhdGlvbiBpcyBhbGxvd2VkIGFuZCB0aGUgc3RyaW5nIGlzIGluc2VydGVkCisgKiBhZnRlciB+dXNlci8uICBFLmcuIGEgcmVxdWVzdCB0byBnaXQ6Ly9ob3N0L35hbGljZS9mcm90eiB3b3VsZAorICogZ28gdG8gL2hvbWUvYWxpY2UvcHViX2dpdC9mcm90eiB3aXRoIC0tdXNlci1wYXRoPXB1Yl9naXQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp1c2VyX3BhdGg7CisKKy8qIFRpbWVvdXQsIGFuZCBpbml0aWFsIHRpbWVvdXQgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGltZW91dDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF90aW1lb3V0OworCitzdGF0aWMgY2hhciAqaG9zdG5hbWU7CitzdGF0aWMgY2hhciAqY2Fub25faG9zdG5hbWU7CitzdGF0aWMgY2hhciAqaXBfYWRkcmVzczsKK3N0YXRpYyBjaGFyICp0Y3BfcG9ydDsKKworc3RhdGljIHZvaWQgbG9ncmVwb3J0KGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwlpZiAobG9nX3N5c2xvZykgeworCQljaGFyIGJ1ZlsxMDI0XTsKKwkJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGVyciwgcGFyYW1zKTsKKwkJc3lzbG9nKHByaW9yaXR5LCAiJXMiLCBidWYpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFNpbmNlIHN0ZGVyciBpcyBzZXQgdG8gYnVmZmVyZWQgbW9kZSwgdGhlCisJCSAqIGxvZ2dpbmcgb2YgZGlmZmVyZW50IHByb2Nlc3NlcyB3aWxsIG5vdCBvdmVybGFwCisJCSAqIHVubGVzcyB0aGV5IG92ZXJmbG93IHRoZSAocmF0aGVyIGJpZykgYnVmZmVycy4KKwkJICovCisJCWZwcmludGYoc3RkZXJyLCAiWyUiUFJJdU1BWCJdICIsICh1aW50bWF4X3QpZ2V0cGlkKCkpOworCQl2ZnByaW50ZihzdGRlcnIsIGVyciwgcGFyYW1zKTsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJZmZsdXNoKHN0ZGVycik7CisJfQorfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgbG9nZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWxvZ3JlcG9ydChMT0dfRVJSLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgdm9pZCBsb2dpbmZvKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwlsb2dyZXBvcnQoTE9HX0lORk8sIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworc3RhdGljIHZvaWQgTk9SRVRVUk4gZGFlbW9uX2RpZShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCWxvZ3JlcG9ydChMT0dfRVJSLCBlcnIsIHBhcmFtcyk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfb2soY2hhciAqZGlyZWN0b3J5KQoreworCXN0YXRpYyBjaGFyIHJwYXRoW1BBVEhfTUFYXTsKKwlzdGF0aWMgY2hhciBpbnRlcnBfcGF0aFtQQVRIX01BWF07CisJY29uc3QgY2hhciAqcGF0aDsKKwljaGFyICpkaXI7CisKKwlkaXIgPSBkaXJlY3Rvcnk7CisKKwlpZiAoZGFlbW9uX2F2b2lkX2FsaWFzKGRpcikpIHsKKwkJbG9nZXJyb3IoIiclcyc6IGFsaWFzZWQiLCBkaXIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoKmRpciA9PSAnficpIHsKKwkJaWYgKCF1c2VyX3BhdGgpIHsKKwkJCWxvZ2Vycm9yKCInJXMnOiBVc2VyLXBhdGggbm90IGFsbG93ZWQiLCBkaXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaWYgKCp1c2VyX3BhdGgpIHsKKwkJCS8qIEdvdCBlaXRoZXIgIn5hbGljZSIgb3IgIn5hbGljZS9mb28iOworCQkJICogcmV3cml0ZSB0aGVtIHRvICJ+YWxpY2UvJXMiIG9yCisJCQkgKiAifmFsaWNlLyVzL2ZvbyIuCisJCQkgKi8KKwkJCWludCBuYW1sZW4sIHJlc3RsZW4gPSBzdHJsZW4oZGlyKTsKKwkJCWNoYXIgKnNsYXNoID0gc3RyY2hyKGRpciwgJy8nKTsKKwkJCWlmICghc2xhc2gpCisJCQkJc2xhc2ggPSBkaXIgKyByZXN0bGVuOworCQkJbmFtbGVuID0gc2xhc2ggLSBkaXI7CisJCQlyZXN0bGVuIC09IG5hbWxlbjsKKwkJCWxvZ2luZm8oInVzZXJwYXRoIDwlcz4sIHJlcXVlc3QgPCVzPiwgbmFtbGVuICVkLCByZXN0bGVuICVkLCBzbGFzaCA8JXM+IiwgdXNlcl9wYXRoLCBkaXIsIG5hbWxlbiwgcmVzdGxlbiwgc2xhc2gpOworCQkJc25wcmludGYocnBhdGgsIFBBVEhfTUFYLCAiJS4qcy8lcyUuKnMiLAorCQkJCSBuYW1sZW4sIGRpciwgdXNlcl9wYXRoLCByZXN0bGVuLCBzbGFzaCk7CisJCQlkaXIgPSBycGF0aDsKKwkJfQorCX0KKwllbHNlIGlmIChpbnRlcnBvbGF0ZWRfcGF0aCAmJiBzYXdfZXh0ZW5kZWRfYXJncykgeworCQlzdHJ1Y3Qgc3RyYnVmIGV4cGFuZGVkX3BhdGggPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHN0cmJ1Zl9leHBhbmRfZGljdF9lbnRyeSBkaWN0WzZdOworCisJCWRpY3RbMF0ucGxhY2Vob2xkZXIgPSAiSCI7IGRpY3RbMF0udmFsdWUgPSBob3N0bmFtZTsKKwkJZGljdFsxXS5wbGFjZWhvbGRlciA9ICJDSCI7IGRpY3RbMV0udmFsdWUgPSBjYW5vbl9ob3N0bmFtZTsKKwkJZGljdFsyXS5wbGFjZWhvbGRlciA9ICJJUCI7IGRpY3RbMl0udmFsdWUgPSBpcF9hZGRyZXNzOworCQlkaWN0WzNdLnBsYWNlaG9sZGVyID0gIlAiOyBkaWN0WzNdLnZhbHVlID0gdGNwX3BvcnQ7CisJCWRpY3RbNF0ucGxhY2Vob2xkZXIgPSAiRCI7IGRpY3RbNF0udmFsdWUgPSBkaXJlY3Rvcnk7CisJCWRpY3RbNV0ucGxhY2Vob2xkZXIgPSBOVUxMOyBkaWN0WzVdLnZhbHVlID0gTlVMTDsKKwkJaWYgKCpkaXIgIT0gJy8nKSB7CisJCQkvKiBBbGxvdyBvbmx5IGFic29sdXRlICovCisJCQlsb2dlcnJvcigiJyVzJzogTm9uLWFic29sdXRlIHBhdGggZGVuaWVkIChpbnRlcnBvbGF0ZWQtcGF0aCBhY3RpdmUpIiwgZGlyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJc3RyYnVmX2V4cGFuZCgmZXhwYW5kZWRfcGF0aCwgaW50ZXJwb2xhdGVkX3BhdGgsCisJCQkJc3RyYnVmX2V4cGFuZF9kaWN0X2NiLCAmZGljdCk7CisJCXN0cmxjcHkoaW50ZXJwX3BhdGgsIGV4cGFuZGVkX3BhdGguYnVmLCBQQVRIX01BWCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZleHBhbmRlZF9wYXRoKTsKKwkJbG9naW5mbygiSW50ZXJwb2xhdGVkIGRpciAnJXMnIiwgaW50ZXJwX3BhdGgpOworCisJCWRpciA9IGludGVycF9wYXRoOworCX0KKwllbHNlIGlmIChiYXNlX3BhdGgpIHsKKwkJaWYgKCpkaXIgIT0gJy8nKSB7CisJCQkvKiBBbGxvdyBvbmx5IGFic29sdXRlICovCisJCQlsb2dlcnJvcigiJyVzJzogTm9uLWFic29sdXRlIHBhdGggZGVuaWVkIChiYXNlLXBhdGggYWN0aXZlKSIsIGRpcik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlzbnByaW50ZihycGF0aCwgUEFUSF9NQVgsICIlcyVzIiwgYmFzZV9wYXRoLCBkaXIpOworCQlkaXIgPSBycGF0aDsKKwl9CisKKwlwYXRoID0gZW50ZXJfcmVwbyhkaXIsIHN0cmljdF9wYXRocyk7CisJaWYgKCFwYXRoICYmIGJhc2VfcGF0aCAmJiBiYXNlX3BhdGhfcmVsYXhlZCkgeworCQkvKgorCQkgKiBpZiB3ZSBmYWlsIGFuZCBiYXNlX3BhdGhfcmVsYXhlZCBpcyBlbmFibGVkLCB0cnkgd2l0aG91dAorCQkgKiBwcmVmaXhpbmcgdGhlIGJhc2UgcGF0aAorCQkgKi8KKwkJZGlyID0gZGlyZWN0b3J5OworCQlwYXRoID0gZW50ZXJfcmVwbyhkaXIsIHN0cmljdF9wYXRocyk7CisJfQorCisJaWYgKCFwYXRoKSB7CisJCWxvZ2Vycm9yKCInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIGdpdCByZXBvc2l0b3J5IiwgZGlyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCBva19wYXRocyAmJiAqb2tfcGF0aHMgKSB7CisJCWNoYXIgKipwcDsKKwkJaW50IHBhdGhsZW4gPSBzdHJsZW4ocGF0aCk7CisKKwkJLyogVGhlIHZhbGlkYXRpb24gaXMgZG9uZSBvbiB0aGUgcGF0aHMgYWZ0ZXIgZW50ZXJfcmVwbworCQkgKiBhcHBlbmRzIG9wdGlvbmFsIHsuZ2l0LC5naXQvLmdpdH0gYW5kIGZyaWVuZHMsIGJ1dAorCQkgKiBpdCBkb2VzIG5vdCB1c2UgZ2V0Y3dkKCkuICBTbyBpZiB5b3VyIC9wdWIgaXMKKwkJICogYSBzeW1saW5rIHRvIC9tbnQvcHViLCB5b3UgY2FuIHdoaXRlbGlzdCAvcHViIGFuZAorCQkgKiBkbyBub3QgaGF2ZSB0byBzYXkgL21udC9wdWIuCisJCSAqIERvIG5vdCBzYXkgL3B1Yi8uCisJCSAqLworCQlmb3IgKCBwcCA9IG9rX3BhdGhzIDsgKnBwIDsgcHArKyApIHsKKwkJCWludCBsZW4gPSBzdHJsZW4oKnBwKTsKKwkJCWlmIChsZW4gPD0gcGF0aGxlbiAmJgorCQkJICAgICFtZW1jbXAoKnBwLCBwYXRoLCBsZW4pICYmCisJCQkgICAgKHBhdGhbbGVuXSA9PSAnXDAnIHx8CisJCQkgICAgICghc3RyaWN0X3BhdGhzICYmIHBhdGhbbGVuXSA9PSAnLycpKSkKKwkJCQlyZXR1cm4gcGF0aDsKKwkJfQorCX0KKwllbHNlIHsKKwkJLyogYmUgYmFja3dhcmRzIGNvbXBhdGlibGUgKi8KKwkJaWYgKCFzdHJpY3RfcGF0aHMpCisJCQlyZXR1cm4gcGF0aDsKKwl9CisKKwlsb2dlcnJvcigiJyVzJzogbm90IGluIHdoaXRlbGlzdCIsIHBhdGgpOworCXJldHVybiBOVUxMOwkJLyogRmFsbHRocm91Z2guIERlbnkgYnkgZGVmYXVsdCAqLworfQorCit0eXBlZGVmIGludCAoKmRhZW1vbl9zZXJ2aWNlX2ZuKSh2b2lkKTsKK3N0cnVjdCBkYWVtb25fc2VydmljZSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpjb25maWdfbmFtZTsKKwlkYWVtb25fc2VydmljZV9mbiBmbjsKKwlpbnQgZW5hYmxlZDsKKwlpbnQgb3ZlcnJpZGFibGU7Cit9OworCitzdGF0aWMgc3RydWN0IGRhZW1vbl9zZXJ2aWNlICpzZXJ2aWNlX2xvb2tpbmdfYXQ7CitzdGF0aWMgaW50IHNlcnZpY2VfZW5hYmxlZDsKKworc3RhdGljIGludCBnaXRfZGFlbW9uX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXByZWZpeGNtcCh2YXIsICJkYWVtb24uIikgJiYKKwkgICAgIXN0cmNtcCh2YXIgKyA3LCBzZXJ2aWNlX2xvb2tpbmdfYXQtPmNvbmZpZ19uYW1lKSkgeworCQlzZXJ2aWNlX2VuYWJsZWQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiBwYXJzaW5nIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGhlcmUgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYWVtb25fZXJyb3IoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICptc2cpCit7CisJaWYgKCFpbmZvcm1hdGl2ZV9lcnJvcnMpCisJCW1zZyA9ICJhY2Nlc3MgZGVuaWVkIG9yIHJlcG9zaXRvcnkgbm90IGV4cG9ydGVkIjsKKwlwYWNrZXRfd3JpdGUoMSwgIkVSUiAlczogJXMiLCBtc2csIGRpcik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY2hhciAqYWNjZXNzX2hvb2s7CisKK3N0YXRpYyBpbnQgcnVuX2FjY2Vzc19ob29rKHN0cnVjdCBkYWVtb25fc2VydmljZSAqc2VydmljZSwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqYXJndls4XTsKKwljb25zdCBjaGFyICoqYXJnID0gYXJndjsKKwljaGFyICplb2w7CisJaW50IHNlZW5fZXJyb3JzID0gMDsKKworI2RlZmluZSBTVFJBUkcoeCkgKCh4KSA/ICh4KSA6ICIiKQorCSphcmcrKyA9IGFjY2Vzc19ob29rOworCSphcmcrKyA9IHNlcnZpY2UtPm5hbWU7CisJKmFyZysrID0gcGF0aDsKKwkqYXJnKysgPSBTVFJBUkcoaG9zdG5hbWUpOworCSphcmcrKyA9IFNUUkFSRyhjYW5vbl9ob3N0bmFtZSk7CisJKmFyZysrID0gU1RSQVJHKGlwX2FkZHJlc3MpOworCSphcmcrKyA9IFNUUkFSRyh0Y3BfcG9ydCk7CisJKmFyZyA9IE5VTEw7CisjdW5kZWYgU1RSQVJHCisKKwltZW1zZXQoJmNoaWxkLCAwLCBzaXplb2YoY2hpbGQpKTsKKwljaGlsZC51c2Vfc2hlbGwgPSAxOworCWNoaWxkLmFyZ3YgPSBhcmd2OworCWNoaWxkLm5vX3N0ZGluID0gMTsKKwljaGlsZC5ub19zdGRlcnIgPSAxOworCWNoaWxkLm91dCA9IC0xOworCWlmIChzdGFydF9jb21tYW5kKCZjaGlsZCkpIHsKKwkJbG9nZXJyb3IoImRhZW1vbiBhY2Nlc3MgaG9vayAnJXMnIGZhaWxlZCB0byBzdGFydCIsCisJCQkgYWNjZXNzX2hvb2spOworCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIGNoaWxkLm91dCwgMCkgPCAwKSB7CisJCWxvZ2Vycm9yKCJmYWlsZWQgdG8gcmVhZCBmcm9tIHBpcGUgdG8gZGFlbW9uIGFjY2VzcyBob29rICclcyciLAorCQkJIGFjY2Vzc19ob29rKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzZWVuX2Vycm9ycyA9IDE7CisJfQorCWlmIChjbG9zZShjaGlsZC5vdXQpIDwgMCkgeworCQlsb2dlcnJvcigiZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gZGFlbW9uIGFjY2VzcyBob29rICclcyciLAorCQkJIGFjY2Vzc19ob29rKTsKKwkJc2Vlbl9lcnJvcnMgPSAxOworCX0KKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNoaWxkKSkKKwkJc2Vlbl9lcnJvcnMgPSAxOworCisJaWYgKCFzZWVuX2Vycm9ycykgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCitlcnJvcl9yZXR1cm46CisJc3RyYnVmX2x0cmltKCZidWYpOworCWlmICghYnVmLmxlbikKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAic2VydmljZSByZWplY3RlZCIpOworCWVvbCA9IHN0cmNocihidWYuYnVmLCAnXG4nKTsKKwlpZiAoZW9sKQorCQkqZW9sID0gJ1wwJzsKKwllcnJubyA9IEVBQ0NFUzsKKwlkYWVtb25fZXJyb3IoZGlyLCBidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3NlcnZpY2UoY2hhciAqZGlyLCBzdHJ1Y3QgZGFlbW9uX3NlcnZpY2UgKnNlcnZpY2UpCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwlpbnQgZW5hYmxlZCA9IHNlcnZpY2UtPmVuYWJsZWQ7CisKKwlsb2dpbmZvKCJSZXF1ZXN0ICVzIGZvciAnJXMnIiwgc2VydmljZS0+bmFtZSwgZGlyKTsKKworCWlmICghZW5hYmxlZCAmJiAhc2VydmljZS0+b3ZlcnJpZGFibGUpIHsKKwkJbG9nZXJyb3IoIiclcyc6IHNlcnZpY2Ugbm90IGVuYWJsZWQuIiwgc2VydmljZS0+bmFtZSk7CisJCWVycm5vID0gRUFDQ0VTOworCQlyZXR1cm4gZGFlbW9uX2Vycm9yKGRpciwgInNlcnZpY2Ugbm90IGVuYWJsZWQiKTsKKwl9CisKKwlpZiAoIShwYXRoID0gcGF0aF9vayhkaXIpKSkKKwkJcmV0dXJuIGRhZW1vbl9lcnJvcihkaXIsICJubyBzdWNoIHJlcG9zaXRvcnkiKTsKKworCS8qCisJICogU2VjdXJpdHkgb24gdGhlIGNoZWFwLgorCSAqCisJICogV2Ugd2FudCBhIHJlYWRhYmxlIEhFQUQsIHVzYWJsZSAib2JqZWN0cyIgZGlyZWN0b3J5LCBhbmQKKwkgKiBhICJnaXQtZGFlbW9uLWV4cG9ydC1vayIgZmxhZyB0aGF0IHNheXMgdGhhdCB0aGUgb3RoZXIgc2lkZQorCSAqIGlzIG9rIHdpdGggdXMgZG9pbmcgdGhpcy4KKwkgKgorCSAqIHBhdGhfb2soKSB1c2VzIGVudGVyX3JlcG8oKSBhbmQgZG9lcyB3aGl0ZWxpc3QgY2hlY2tpbmcuCisJICogV2Ugb25seSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVwb3NpdG9yeSBpcyBleHBvcnRlZC4KKwkgKi8KKworCWlmICghZXhwb3J0X2FsbF90cmVlcyAmJiBhY2Nlc3MoImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgRl9PSykpIHsKKwkJbG9nZXJyb3IoIiclcyc6IHJlcG9zaXRvcnkgbm90IGV4cG9ydGVkLiIsIHBhdGgpOworCQllcnJubyA9IEVBQ0NFUzsKKwkJcmV0dXJuIGRhZW1vbl9lcnJvcihkaXIsICJyZXBvc2l0b3J5IG5vdCBleHBvcnRlZCIpOworCX0KKworCWlmIChzZXJ2aWNlLT5vdmVycmlkYWJsZSkgeworCQlzZXJ2aWNlX2xvb2tpbmdfYXQgPSBzZXJ2aWNlOworCQlzZXJ2aWNlX2VuYWJsZWQgPSAtMTsKKwkJZ2l0X2NvbmZpZyhnaXRfZGFlbW9uX2NvbmZpZywgTlVMTCk7CisJCWlmICgwIDw9IHNlcnZpY2VfZW5hYmxlZCkKKwkJCWVuYWJsZWQgPSBzZXJ2aWNlX2VuYWJsZWQ7CisJfQorCWlmICghZW5hYmxlZCkgeworCQlsb2dlcnJvcigiJyVzJzogc2VydmljZSBub3QgZW5hYmxlZCBmb3IgJyVzJyIsCisJCQkgc2VydmljZS0+bmFtZSwgcGF0aCk7CisJCWVycm5vID0gRUFDQ0VTOworCQlyZXR1cm4gZGFlbW9uX2Vycm9yKGRpciwgInNlcnZpY2Ugbm90IGVuYWJsZWQiKTsKKwl9CisKKwkvKgorCSAqIE9wdGlvbmFsbHksIGEgaG9vayBjYW4gY2hvb3NlIHRvIGRlbnkgYWNjZXNzIHRvIHRoZQorCSAqIHJlcG9zaXRvcnkgZGVwZW5kaW5nIG9uIHRoZSBwaGFzZSBvZiB0aGUgbW9vbi4KKwkgKi8KKwlpZiAoYWNjZXNzX2hvb2sgJiYgcnVuX2FjY2Vzc19ob29rKHNlcnZpY2UsIGRpciwgcGF0aCkpCisJCXJldHVybiAtMTsKKworCS8qCisJICogV2UnbGwgaWdub3JlIFNJR1RFUk0gZnJvbSBub3cgb24sIHdlIGhhdmUgYQorCSAqIGdvb2QgY2xpZW50LgorCSAqLworCXNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsKKworCXJldHVybiBzZXJ2aWNlLT5mbigpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3RvX2xvZyhpbnQgZmQpCit7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqZnA7CisKKwlmcCA9IGZkb3BlbihmZCwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkgeworCQlsb2dlcnJvcigiZmRvcGVuIG9mIGVycm9yIGNoYW5uZWwgZmFpbGVkIik7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgZnAsICdcbicpICE9IEVPRikgeworCQlsb2dlcnJvcigiJXMiLCBsaW5lLmJ1Zik7CisJCXN0cmJ1Zl9zZXRsZW4oJmxpbmUsIDApOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlmY2xvc2UoZnApOworfQorCitzdGF0aWMgaW50IHJ1bl9zZXJ2aWNlX2NvbW1hbmQoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xkOworCisJbWVtc2V0KCZjbGQsIDAsIHNpemVvZihjbGQpKTsKKwljbGQuYXJndiA9IGFyZ3Y7CisJY2xkLmdpdF9jbWQgPSAxOworCWNsZC5lcnIgPSAtMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2xkKSkKKwkJcmV0dXJuIC0xOworCisJY2xvc2UoMCk7CisJY2xvc2UoMSk7CisKKwljb3B5X3RvX2xvZyhjbGQuZXJyKTsKKworCXJldHVybiBmaW5pc2hfY29tbWFuZCgmY2xkKTsKK30KKworc3RhdGljIGludCB1cGxvYWRfcGFjayh2b2lkKQoreworCS8qIFRpbWVvdXQgYXMgc3RyaW5nICovCisJY2hhciB0aW1lb3V0X2J1Zls2NF07CisJY29uc3QgY2hhciAqYXJndltdID0geyAidXBsb2FkLXBhY2siLCAiLS1zdHJpY3QiLCBOVUxMLCAiLiIsIE5VTEwgfTsKKworCWFyZ3ZbMl0gPSB0aW1lb3V0X2J1ZjsKKworCXNucHJpbnRmKHRpbWVvdXRfYnVmLCBzaXplb2YgdGltZW91dF9idWYsICItLXRpbWVvdXQ9JXUiLCB0aW1lb3V0KTsKKwlyZXR1cm4gcnVuX3NlcnZpY2VfY29tbWFuZChhcmd2KTsKK30KKworc3RhdGljIGludCB1cGxvYWRfYXJjaGl2ZSh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICphcmd2W10gPSB7ICJ1cGxvYWQtYXJjaGl2ZSIsICIuIiwgTlVMTCB9OworCXJldHVybiBydW5fc2VydmljZV9jb21tYW5kKGFyZ3YpOworfQorCitzdGF0aWMgaW50IHJlY2VpdmVfcGFjayh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICphcmd2W10gPSB7ICJyZWNlaXZlLXBhY2siLCAiLiIsIE5VTEwgfTsKKwlyZXR1cm4gcnVuX3NlcnZpY2VfY29tbWFuZChhcmd2KTsKK30KKworc3RhdGljIHN0cnVjdCBkYWVtb25fc2VydmljZSBkYWVtb25fc2VydmljZVtdID0geworCXsgInVwbG9hZC1hcmNoaXZlIiwgInVwbG9hZGFyY2giLCB1cGxvYWRfYXJjaGl2ZSwgMCwgMSB9LAorCXsgInVwbG9hZC1wYWNrIiwgInVwbG9hZHBhY2siLCB1cGxvYWRfcGFjaywgMSwgMSB9LAorCXsgInJlY2VpdmUtcGFjayIsICJyZWNlaXZlcGFjayIsIHJlY2VpdmVfcGFjaywgMCwgMSB9LAorfTsKKworc3RhdGljIHZvaWQgZW5hYmxlX3NlcnZpY2UoY29uc3QgY2hhciAqbmFtZSwgaW50IGVuYSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYWVtb25fc2VydmljZSk7IGkrKykgeworCQlpZiAoIXN0cmNtcChkYWVtb25fc2VydmljZVtpXS5uYW1lLCBuYW1lKSkgeworCQkJZGFlbW9uX3NlcnZpY2VbaV0uZW5hYmxlZCA9IGVuYTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlkaWUoIk5vIHN1Y2ggc2VydmljZSAlcyIsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBtYWtlX3NlcnZpY2Vfb3ZlcnJpZGFibGUoY29uc3QgY2hhciAqbmFtZSwgaW50IGVuYSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYWVtb25fc2VydmljZSk7IGkrKykgeworCQlpZiAoIXN0cmNtcChkYWVtb25fc2VydmljZVtpXS5uYW1lLCBuYW1lKSkgeworCQkJZGFlbW9uX3NlcnZpY2VbaV0ub3ZlcnJpZGFibGUgPSBlbmE7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZGllKCJObyBzdWNoIHNlcnZpY2UgJXMiLCBuYW1lKTsKK30KKworc3RhdGljIGNoYXIgKnhzdHJkdXBfdG9sb3dlcihjb25zdCBjaGFyICpzdHIpCit7CisJY2hhciAqcCwgKmR1cCA9IHhzdHJkdXAoc3RyKTsKKwlmb3IgKHAgPSBkdXA7ICpwOyBwKyspCisJCSpwID0gdG9sb3dlcigqcCk7CisJcmV0dXJuIGR1cDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfaG9zdF9hbmRfcG9ydChjaGFyICpob3N0cG9ydCwgY2hhciAqKmhvc3QsCisJY2hhciAqKnBvcnQpCit7CisJaWYgKCpob3N0cG9ydCA9PSAnWycpIHsKKwkJY2hhciAqZW5kOworCisJCWVuZCA9IHN0cmNocihob3N0cG9ydCwgJ10nKTsKKwkJaWYgKCFlbmQpCisJCQlkaWUoIkludmFsaWQgcmVxdWVzdCAoJ1snIHdpdGhvdXQgJ10nKSIpOworCQkqZW5kID0gJ1wwJzsKKwkJKmhvc3QgPSBob3N0cG9ydCArIDE7CisJCWlmICghZW5kWzFdKQorCQkJKnBvcnQgPSBOVUxMOworCQllbHNlIGlmIChlbmRbMV0gPT0gJzonKQorCQkJKnBvcnQgPSBlbmQgKyAyOworCQllbHNlCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgZW5kIG9mIGhvc3QgcGFydCIpOworCX0gZWxzZSB7CisJCSpob3N0ID0gaG9zdHBvcnQ7CisJCSpwb3J0ID0gc3RycmNocihob3N0cG9ydCwgJzonKTsKKwkJaWYgKCpwb3J0KSB7CisJCQkqKnBvcnQgPSAnXDAnOworCQkJKysqcG9ydDsKKwkJfQorCX0KK30KKworLyoKKyAqIFJlYWQgdGhlIGhvc3QgYXMgc3VwcGxpZWQgYnkgdGhlIGNsaWVudCBjb25uZWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBwYXJzZV9ob3N0X2FyZyhjaGFyICpleHRyYV9hcmdzLCBpbnQgYnVmbGVuKQoreworCWNoYXIgKnZhbDsKKwlpbnQgdmFsbGVuOworCWNoYXIgKmVuZCA9IGV4dHJhX2FyZ3MgKyBidWZsZW47CisKKwlpZiAoZXh0cmFfYXJncyA8IGVuZCAmJiAqZXh0cmFfYXJncykgeworCQlzYXdfZXh0ZW5kZWRfYXJncyA9IDE7CisJCWlmIChzdHJuY2FzZWNtcCgiaG9zdD0iLCBleHRyYV9hcmdzLCA1KSA9PSAwKSB7CisJCQl2YWwgPSBleHRyYV9hcmdzICsgNTsKKwkJCXZhbGxlbiA9IHN0cmxlbih2YWwpICsgMTsKKwkJCWlmICgqdmFsKSB7CisJCQkJLyogU3BsaXQgPGhvc3Q+Ojxwb3J0PiBhdCBjb2xvbi4gKi8KKwkJCQljaGFyICpob3N0OworCQkJCWNoYXIgKnBvcnQ7CisJCQkJcGFyc2VfaG9zdF9hbmRfcG9ydCh2YWwsICZob3N0LCAmcG9ydCk7CisJCQkJaWYgKHBvcnQpIHsKKwkJCQkJZnJlZSh0Y3BfcG9ydCk7CisJCQkJCXRjcF9wb3J0ID0geHN0cmR1cChwb3J0KTsKKwkJCQl9CisJCQkJZnJlZShob3N0bmFtZSk7CisJCQkJaG9zdG5hbWUgPSB4c3RyZHVwX3RvbG93ZXIoaG9zdCk7CisJCQl9CisKKwkJCS8qIE9uIHRvIHRoZSBuZXh0IG9uZSAqLworCQkJZXh0cmFfYXJncyA9IHZhbCArIHZhbGxlbjsKKwkJfQorCQlpZiAoZXh0cmFfYXJncyA8IGVuZCAmJiAqZXh0cmFfYXJncykKKwkJCWRpZSgiSW52YWxpZCByZXF1ZXN0Iik7CisJfQorCisJLyoKKwkgKiBMb2NhdGUgY2Fub25pY2FsIGhvc3RuYW1lIGFuZCBpdHMgSVAgYWRkcmVzcy4KKwkgKi8KKwlpZiAoaG9zdG5hbWUpIHsKKyNpZm5kZWYgTk9fSVBWNgorCQlzdHJ1Y3QgYWRkcmluZm8gaGludHM7CisJCXN0cnVjdCBhZGRyaW5mbyAqYWk7CisJCWludCBnYWk7CisJCXN0YXRpYyBjaGFyIGFkZHJidWZbSE9TVF9OQU1FX01BWCArIDFdOworCisJCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCQloaW50cy5haV9mbGFncyA9IEFJX0NBTk9OTkFNRTsKKworCQlnYWkgPSBnZXRhZGRyaW5mbyhob3N0bmFtZSwgTlVMTCwgJmhpbnRzLCAmYWkpOworCQlpZiAoIWdhaSkgeworCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYWRkciA9ICh2b2lkICopYWktPmFpX2FkZHI7CisKKwkJCWluZXRfbnRvcChBRl9JTkVULCAmc2luX2FkZHItPnNpbl9hZGRyLAorCQkJCSAgYWRkcmJ1Ziwgc2l6ZW9mKGFkZHJidWYpKTsKKwkJCWZyZWUoaXBfYWRkcmVzcyk7CisJCQlpcF9hZGRyZXNzID0geHN0cmR1cChhZGRyYnVmKTsKKworCQkJZnJlZShjYW5vbl9ob3N0bmFtZSk7CisJCQljYW5vbl9ob3N0bmFtZSA9IHhzdHJkdXAoYWktPmFpX2Nhbm9ubmFtZSA/CisJCQkJCQkgYWktPmFpX2Nhbm9ubmFtZSA6IGlwX2FkZHJlc3MpOworCisJCQlmcmVlYWRkcmluZm8oYWkpOworCQl9CisjZWxzZQorCQlzdHJ1Y3QgaG9zdGVudCAqaGVudDsKKwkJc3RydWN0IHNvY2thZGRyX2luIHNhOworCQljaGFyICoqYXA7CisJCXN0YXRpYyBjaGFyIGFkZHJidWZbSE9TVF9OQU1FX01BWCArIDFdOworCisJCWhlbnQgPSBnZXRob3N0YnluYW1lKGhvc3RuYW1lKTsKKworCQlhcCA9IGhlbnQtPmhfYWRkcl9saXN0OworCQltZW1zZXQoJnNhLCAwLCBzaXplb2Ygc2EpOworCQlzYS5zaW5fZmFtaWx5ID0gaGVudC0+aF9hZGRydHlwZTsKKwkJc2Euc2luX3BvcnQgPSBodG9ucygwKTsKKwkJbWVtY3B5KCZzYS5zaW5fYWRkciwgKmFwLCBoZW50LT5oX2xlbmd0aCk7CisKKwkJaW5ldF9udG9wKGhlbnQtPmhfYWRkcnR5cGUsICZzYS5zaW5fYWRkciwKKwkJCSAgYWRkcmJ1Ziwgc2l6ZW9mKGFkZHJidWYpKTsKKworCQlmcmVlKGNhbm9uX2hvc3RuYW1lKTsKKwkJY2Fub25faG9zdG5hbWUgPSB4c3RyZHVwKGhlbnQtPmhfbmFtZSk7CisJCWZyZWUoaXBfYWRkcmVzcyk7CisJCWlwX2FkZHJlc3MgPSB4c3RyZHVwKGFkZHJidWYpOworI2VuZGlmCisJfQorfQorCisKK3N0YXRpYyBpbnQgZXhlY3V0ZSh2b2lkKQoreworCXN0YXRpYyBjaGFyIGxpbmVbMTAwMF07CisJaW50IHBrdGxlbiwgbGVuLCBpOworCWNoYXIgKmFkZHIgPSBnZXRlbnYoIlJFTU9URV9BRERSIiksICpwb3J0ID0gZ2V0ZW52KCJSRU1PVEVfUE9SVCIpOworCisJaWYgKGFkZHIpCisJCWxvZ2luZm8oIkNvbm5lY3Rpb24gZnJvbSAlczolcyIsIGFkZHIsIHBvcnQpOworCisJYWxhcm0oaW5pdF90aW1lb3V0ID8gaW5pdF90aW1lb3V0IDogdGltZW91dCk7CisJcGt0bGVuID0gcGFja2V0X3JlYWRfbGluZSgwLCBsaW5lLCBzaXplb2YobGluZSkpOworCWFsYXJtKDApOworCisJbGVuID0gc3RybGVuKGxpbmUpOworCWlmIChwa3RsZW4gIT0gbGVuKQorCQlsb2dpbmZvKCJFeHRlbmRlZCBhdHRyaWJ1dGVzICglZCBieXRlcykgZXhpc3QgPCUuKnM+IiwKKwkJCShpbnQpIHBrdGxlbiAtIGxlbiwKKwkJCShpbnQpIHBrdGxlbiAtIGxlbiwgbGluZSArIGxlbiArIDEpOworCWlmIChsZW4gJiYgbGluZVtsZW4tMV0gPT0gJ1xuJykgeworCQlsaW5lWy0tbGVuXSA9IDA7CisJCXBrdGxlbi0tOworCX0KKworCWZyZWUoaG9zdG5hbWUpOworCWZyZWUoY2Fub25faG9zdG5hbWUpOworCWZyZWUoaXBfYWRkcmVzcyk7CisJZnJlZSh0Y3BfcG9ydCk7CisJaG9zdG5hbWUgPSBjYW5vbl9ob3N0bmFtZSA9IGlwX2FkZHJlc3MgPSB0Y3BfcG9ydCA9IE5VTEw7CisKKwlpZiAobGVuICE9IHBrdGxlbikKKwkJcGFyc2VfaG9zdF9hcmcobGluZSArIGxlbiArIDEsIHBrdGxlbiAtIGxlbiAtIDEpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGFlbW9uX3NlcnZpY2UpOyBpKyspIHsKKwkJc3RydWN0IGRhZW1vbl9zZXJ2aWNlICpzID0gJihkYWVtb25fc2VydmljZVtpXSk7CisJCWludCBuYW1lbGVuID0gc3RybGVuKHMtPm5hbWUpOworCQlpZiAoIXByZWZpeGNtcChsaW5lLCAiZ2l0LSIpICYmCisJCSAgICAhc3RybmNtcChzLT5uYW1lLCBsaW5lICsgNCwgbmFtZWxlbikgJiYKKwkJICAgIGxpbmVbbmFtZWxlbiArIDRdID09ICcgJykgeworCQkJLyoKKwkJCSAqIE5vdGU6IFRoZSBkaXJlY3RvcnkgaGVyZSBpcyBwcm9iYWJseSBjb250ZXh0IHNlbnNpdGl2ZSwKKwkJCSAqIGFuZCBtaWdodCBkZXBlbmQgb24gdGhlIGFjdHVhbCBzZXJ2aWNlIGJlaW5nIHBlcmZvcm1lZC4KKwkJCSAqLworCQkJcmV0dXJuIHJ1bl9zZXJ2aWNlKGxpbmUgKyBuYW1lbGVuICsgNSwgcyk7CisJCX0KKwl9CisKKwlsb2dlcnJvcigiUHJvdG9jb2wgZXJyb3I6ICclcyciLCBsaW5lKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgYWRkcmNtcChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqczEsCisgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnMyKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2ExID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopIHMxOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EyID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopIHMyOworCisJaWYgKHNhMS0+c2FfZmFtaWx5ICE9IHNhMi0+c2FfZmFtaWx5KQorCQlyZXR1cm4gc2ExLT5zYV9mYW1pbHkgLSBzYTItPnNhX2ZhbWlseTsKKwlpZiAoc2ExLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwkJcmV0dXJuIG1lbWNtcCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzMSktPnNpbl9hZGRyLAorCQkgICAgJigoc3RydWN0IHNvY2thZGRyX2luICopczIpLT5zaW5fYWRkciwKKwkJICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworI2lmbmRlZiBOT19JUFY2CisJaWYgKHNhMS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCQlyZXR1cm4gbWVtY21wKCYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzMSktPnNpbjZfYWRkciwKKwkJICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzMiktPnNpbjZfYWRkciwKKwkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heF9jb25uZWN0aW9ucyA9IDMyOworCitzdGF0aWMgdW5zaWduZWQgaW50IGxpdmVfY2hpbGRyZW47CisKK3N0YXRpYyBzdHJ1Y3QgY2hpbGQgeworCXN0cnVjdCBjaGlsZCAqbmV4dDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbGQ7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcmVzczsKK30gKmZpcnN0Ym9ybjsKKworc3RhdGljIHZvaWQgYWRkX2NoaWxkKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbGQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFkZHJsZW4pCit7CisJc3RydWN0IGNoaWxkICpuZXdib3JuLCAqKmNyYWRsZTsKKworCW5ld2Jvcm4gPSB4Y2FsbG9jKDEsIHNpemVvZigqbmV3Ym9ybikpOworCWxpdmVfY2hpbGRyZW4rKzsKKwltZW1jcHkoJm5ld2Jvcm4tPmNsZCwgY2xkLCBzaXplb2YoKmNsZCkpOworCW1lbWNweSgmbmV3Ym9ybi0+YWRkcmVzcywgYWRkciwgYWRkcmxlbik7CisJZm9yIChjcmFkbGUgPSAmZmlyc3Rib3JuOyAqY3JhZGxlOyBjcmFkbGUgPSAmKCpjcmFkbGUpLT5uZXh0KQorCQlpZiAoIWFkZHJjbXAoJigqY3JhZGxlKS0+YWRkcmVzcywgJm5ld2Jvcm4tPmFkZHJlc3MpKQorCQkJYnJlYWs7CisJbmV3Ym9ybi0+bmV4dCA9ICpjcmFkbGU7CisJKmNyYWRsZSA9IG5ld2Jvcm47Cit9CisKKy8qCisgKiBUaGlzIGdldHMgY2FsbGVkIGlmIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgZ3Jvd3MKKyAqIHBhc3QgIm1heF9jb25uZWN0aW9ucyIuCisgKgorICogV2Uga2lsbCB0aGUgbmV3ZXN0IGNvbm5lY3Rpb24gZnJvbSBhIGR1cGxpY2F0ZSBJUC4KKyAqLworc3RhdGljIHZvaWQga2lsbF9zb21lX2NoaWxkKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IGNoaWxkICpibGFua2V0LCAqbmV4dDsKKworCWlmICghKGJsYW5rZXQgPSBmaXJzdGJvcm4pKQorCQlyZXR1cm47CisKKwlmb3IgKDsgKG5leHQgPSBibGFua2V0LT5uZXh0KTsgYmxhbmtldCA9IG5leHQpCisJCWlmICghYWRkcmNtcCgmYmxhbmtldC0+YWRkcmVzcywgJm5leHQtPmFkZHJlc3MpKSB7CisJCQlraWxsKGJsYW5rZXQtPmNsZC5waWQsIFNJR1RFUk0pOworCQkJYnJlYWs7CisJCX0KK30KKworc3RhdGljIHZvaWQgY2hlY2tfZGVhZF9jaGlsZHJlbih2b2lkKQoreworCWludCBzdGF0dXM7CisJcGlkX3QgcGlkOworCisJc3RydWN0IGNoaWxkICoqY3JhZGxlLCAqYmxhbmtldDsKKwlmb3IgKGNyYWRsZSA9ICZmaXJzdGJvcm47IChibGFua2V0ID0gKmNyYWRsZSk7KQorCQlpZiAoKHBpZCA9IHdhaXRwaWQoYmxhbmtldC0+Y2xkLnBpZCwgJnN0YXR1cywgV05PSEFORykpID4gMSkgeworCQkJY29uc3QgY2hhciAqZGVhZCA9ICIiOworCQkJaWYgKHN0YXR1cykKKwkJCQlkZWFkID0gIiAod2l0aCBlcnJvcikiOworCQkJbG9naW5mbygiWyUiUFJJdU1BWCJdIERpc2Nvbm5lY3RlZCVzIiwgKHVpbnRtYXhfdClwaWQsIGRlYWQpOworCisJCQkvKiByZW1vdmUgdGhlIGNoaWxkICovCisJCQkqY3JhZGxlID0gYmxhbmtldC0+bmV4dDsKKwkJCWxpdmVfY2hpbGRyZW4tLTsKKwkJCWZyZWUoYmxhbmtldCk7CisJCX0gZWxzZQorCQkJY3JhZGxlID0gJmJsYW5rZXQtPm5leHQ7Cit9CisKK3N0YXRpYyBjaGFyICoqY2xkX2FyZ3Y7CitzdGF0aWMgdm9pZCBoYW5kbGUoaW50IGluY29taW5nLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhZGRybGVuKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsZCA9IHsgTlVMTCB9OworCWNoYXIgYWRkcmJ1ZlszMDBdID0gIlJFTU9URV9BRERSPSIsIHBvcnRidWZbMzAwXTsKKwljaGFyICplbnZbXSA9IHsgYWRkcmJ1ZiwgcG9ydGJ1ZiwgTlVMTCB9OworCisJaWYgKG1heF9jb25uZWN0aW9ucyAmJiBsaXZlX2NoaWxkcmVuID49IG1heF9jb25uZWN0aW9ucykgeworCQlraWxsX3NvbWVfY2hpbGQoKTsKKwkJc2xlZXAoMSk7ICAvKiBnaXZlIGl0IHNvbWUgdGltZSB0byBkaWUgKi8KKwkJY2hlY2tfZGVhZF9jaGlsZHJlbigpOworCQlpZiAobGl2ZV9jaGlsZHJlbiA+PSBtYXhfY29ubmVjdGlvbnMpIHsKKwkJCWNsb3NlKGluY29taW5nKTsKKwkJCWxvZ2Vycm9yKCJUb28gbWFueSBjaGlsZHJlbiwgZHJvcHBpbmcgY29ubmVjdGlvbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luX2FkZHIgPSAodm9pZCAqKSBhZGRyOworCQlpbmV0X250b3AoYWRkci0+c2FfZmFtaWx5LCAmc2luX2FkZHItPnNpbl9hZGRyLCBhZGRyYnVmICsgMTIsCisJCSAgICBzaXplb2YoYWRkcmJ1ZikgLSAxMik7CisJCXNucHJpbnRmKHBvcnRidWYsIHNpemVvZihwb3J0YnVmKSwgIlJFTU9URV9QT1JUPSVkIiwKKwkJICAgIG50b2hzKHNpbl9hZGRyLT5zaW5fcG9ydCkpOworI2lmbmRlZiBOT19JUFY2CisJfSBlbHNlIGlmIChhZGRyICYmIGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42X2FkZHIgPSAodm9pZCAqKSBhZGRyOworCisJCWNoYXIgKmJ1ZiA9IGFkZHJidWYgKyAxMjsKKwkJKmJ1ZisrID0gJ1snOyAqYnVmID0gJ1wwJzsgLyogc3RwY3B5KCkgaXMgY29vbCAqLworCQlpbmV0X250b3AoQUZfSU5FVDYsICZzaW42X2FkZHItPnNpbjZfYWRkciwgYnVmLAorCQkgICAgc2l6ZW9mKGFkZHJidWYpIC0gMTMpOworCQlzdHJjYXQoYnVmLCAiXSIpOworCisJCXNucHJpbnRmKHBvcnRidWYsIHNpemVvZihwb3J0YnVmKSwgIlJFTU9URV9QT1JUPSVkIiwKKwkJICAgIG50b2hzKHNpbjZfYWRkci0+c2luNl9wb3J0KSk7CisjZW5kaWYKKwl9CisKKwljbGQuZW52ID0gKGNvbnN0IGNoYXIgKiopZW52OworCWNsZC5hcmd2ID0gKGNvbnN0IGNoYXIgKiopY2xkX2FyZ3Y7CisJY2xkLmluID0gaW5jb21pbmc7CisJY2xkLm91dCA9IGR1cChpbmNvbWluZyk7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2xkKSkKKwkJbG9nZXJyb3IoInVuYWJsZSB0byBmb3JrIik7CisJZWxzZQorCQlhZGRfY2hpbGQoJmNsZCwgYWRkciwgYWRkcmxlbik7CisJY2xvc2UoaW5jb21pbmcpOworfQorCitzdGF0aWMgdm9pZCBjaGlsZF9oYW5kbGVyKGludCBzaWdubykKK3sKKwkvKgorCSAqIE90aGVyd2lzZSBlbXB0eSBoYW5kbGVyIGJlY2F1c2Ugc3lzdGVtY2FsbHMgd2lsbCBnZXQgaW50ZXJydXB0ZWQKKwkgKiB1cG9uIHNpZ25hbCByZWNlaXB0CisJICogU3lzViBuZWVkcyB0aGUgaGFuZGxlciB0byBiZSByZWFybWVkCisJICovCisJc2lnbmFsKFNJR0NITEQsIGNoaWxkX2hhbmRsZXIpOworfQorCitzdGF0aWMgaW50IHNldF9yZXVzZV9hZGRyKGludCBzb2NrZmQpCit7CisJaW50IG9uID0gMTsKKworCWlmICghcmV1c2VhZGRyKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKKwkJCSAgJm9uLCBzaXplb2Yob24pKTsKK30KKworc3RydWN0IHNvY2tldGxpc3QgeworCWludCAqbGlzdDsKKwlzaXplX3QgbnI7CisJc2l6ZV90IGFsbG9jOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmlwMnN0cihpbnQgZmFtaWx5LCBzdHJ1Y3Qgc29ja2FkZHIgKnNpbiwgc29ja2xlbl90IGxlbikKK3sKKyNpZmRlZiBOT19JUFY2CisJc3RhdGljIGNoYXIgaXBbSU5FVF9BRERSU1RSTEVOXTsKKyNlbHNlCisJc3RhdGljIGNoYXIgaXBbSU5FVDZfQUREUlNUUkxFTl07CisjZW5kaWYKKworCXN3aXRjaCAoZmFtaWx5KSB7CisjaWZuZGVmIE5PX0lQVjYKKwljYXNlIEFGX0lORVQ2OgorCQlpbmV0X250b3AoZmFtaWx5LCAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42KilzaW4pLT5zaW42X2FkZHIsIGlwLCBsZW4pOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgQUZfSU5FVDoKKwkJaW5ldF9udG9wKGZhbWlseSwgJigoc3RydWN0IHNvY2thZGRyX2luKilzaW4pLT5zaW5fYWRkciwgaXAsIGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0cmNweShpcCwgIjx1bmtub3duPiIpOworCX0KKwlyZXR1cm4gaXA7Cit9CisKKyNpZm5kZWYgTk9fSVBWNgorCitzdGF0aWMgaW50IHNldHVwX25hbWVkX3NvY2soY2hhciAqbGlzdGVuX2FkZHIsIGludCBsaXN0ZW5fcG9ydCwgc3RydWN0IHNvY2tldGxpc3QgKnNvY2tsaXN0KQoreworCWludCBzb2NrbnVtID0gMDsKKwlpbnQgbWF4ZmQgPSAtMTsKKwljaGFyIHBidWZbTklfTUFYU0VSVl07CisJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWkwLCAqYWk7CisJaW50IGdhaTsKKwlsb25nIGZsYWdzOworCisJc3ByaW50ZihwYnVmLCAiJWQiLCBsaXN0ZW5fcG9ydCk7CisJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisJaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOworCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKwloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkU7CisKKwlnYWkgPSBnZXRhZGRyaW5mbyhsaXN0ZW5fYWRkciwgcGJ1ZiwgJmhpbnRzLCAmYWkwKTsKKwlpZiAoZ2FpKSB7CisJCWxvZ2Vycm9yKCJnZXRhZGRyaW5mbygpIGZvciAlcyBmYWlsZWQ6ICVzIiwgbGlzdGVuX2FkZHIsIGdhaV9zdHJlcnJvcihnYWkpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChhaSA9IGFpMDsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKKwkJaW50IHNvY2tmZDsKKworCQlzb2NrZmQgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworCQlpZiAoc29ja2ZkIDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc29ja2ZkID49IEZEX1NFVFNJWkUpIHsKKwkJCWxvZ2Vycm9yKCJTb2NrZXQgZGVzY3JpcHRvciB0b28gbGFyZ2UiKTsKKwkJCWNsb3NlKHNvY2tmZCk7CisJCQljb250aW51ZTsKKwkJfQorCisjaWZkZWYgSVBWNl9WNk9OTFkKKwkJaWYgKGFpLT5haV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCWludCBvbiA9IDE7CisJCQlzZXRzb2Nrb3B0KHNvY2tmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1Y2T05MWSwKKwkJCQkgICAmb24sIHNpemVvZihvbikpOworCQkJLyogTm90ZTogZXJyb3IgaXMgbm90IGZhdGFsICovCisJCX0KKyNlbmRpZgorCisJCWlmIChzZXRfcmV1c2VfYWRkcihzb2NrZmQpKSB7CisJCQlsb2dlcnJvcigiQ291bGQgbm90IHNldCBTT19SRVVTRUFERFI6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNsb3NlKHNvY2tmZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChiaW5kKHNvY2tmZCwgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSA8IDApIHsKKwkJCWxvZ2Vycm9yKCJDb3VsZCBub3QgYmluZCB0byAlczogJXMiLAorCQkJCSBpcDJzdHIoYWktPmFpX2ZhbWlseSwgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSwKKwkJCQkgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNsb3NlKHNvY2tmZCk7CisJCQljb250aW51ZTsJLyogbm90IGZhdGFsICovCisJCX0KKwkJaWYgKGxpc3Rlbihzb2NrZmQsIDUpIDwgMCkgeworCQkJbG9nZXJyb3IoIkNvdWxkIG5vdCBsaXN0ZW4gdG8gJXM6ICVzIiwKKwkJCQkgaXAyc3RyKGFpLT5haV9mYW1pbHksIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiksCisJCQkJIHN0cmVycm9yKGVycm5vKSk7CisJCQljbG9zZShzb2NrZmQpOworCQkJY29udGludWU7CS8qIG5vdCBmYXRhbCAqLworCQl9CisKKwkJZmxhZ3MgPSBmY250bChzb2NrZmQsIEZfR0VURkQsIDApOworCQlpZiAoZmxhZ3MgPj0gMCkKKwkJCWZjbnRsKHNvY2tmZCwgRl9TRVRGRCwgZmxhZ3MgfCBGRF9DTE9FWEVDKTsKKworCQlBTExPQ19HUk9XKHNvY2tsaXN0LT5saXN0LCBzb2NrbGlzdC0+bnIgKyAxLCBzb2NrbGlzdC0+YWxsb2MpOworCQlzb2NrbGlzdC0+bGlzdFtzb2NrbGlzdC0+bnIrK10gPSBzb2NrZmQ7CisJCXNvY2tudW0rKzsKKworCQlpZiAobWF4ZmQgPCBzb2NrZmQpCisJCQltYXhmZCA9IHNvY2tmZDsKKwl9CisKKwlmcmVlYWRkcmluZm8oYWkwKTsKKworCXJldHVybiBzb2NrbnVtOworfQorCisjZWxzZSAvKiBOT19JUFY2ICovCisKK3N0YXRpYyBpbnQgc2V0dXBfbmFtZWRfc29jayhjaGFyICpsaXN0ZW5fYWRkciwgaW50IGxpc3Rlbl9wb3J0LCBzdHJ1Y3Qgc29ja2V0bGlzdCAqc29ja2xpc3QpCit7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKwlpbnQgc29ja2ZkOworCWxvbmcgZmxhZ3M7CisKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mIHNpbik7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbi5zaW5fcG9ydCA9IGh0b25zKGxpc3Rlbl9wb3J0KTsKKworCWlmIChsaXN0ZW5fYWRkcikgeworCQkvKiBXZWxsLCBob3N0IGJldHRlciBiZSBhbiBJUCBhZGRyZXNzIGhlcmUuICovCisJCWlmIChpbmV0X3B0b24oQUZfSU5FVCwgbGlzdGVuX2FkZHIsICZzaW4uc2luX2FkZHIuc19hZGRyKSA8PSAwKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJc2luLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworCX0KKworCXNvY2tmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisJaWYgKHNvY2tmZCA8IDApCisJCXJldHVybiAwOworCisJaWYgKHNldF9yZXVzZV9hZGRyKHNvY2tmZCkpIHsKKwkJbG9nZXJyb3IoIkNvdWxkIG5vdCBzZXQgU09fUkVVU0VBRERSOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKHNvY2tmZCk7CisJCXJldHVybiAwOworCX0KKworCWlmICggYmluZChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Ygc2luKSA8IDAgKSB7CisJCWxvZ2Vycm9yKCJDb3VsZCBub3QgbGlzdGVuIHRvICVzOiAlcyIsCisJCQkgaXAyc3RyKEFGX0lORVQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc2luKSksCisJCQkgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2Uoc29ja2ZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGxpc3Rlbihzb2NrZmQsIDUpIDwgMCkgeworCQlsb2dlcnJvcigiQ291bGQgbm90IGxpc3RlbiB0byAlczogJXMiLAorCQkJIGlwMnN0cihBRl9JTkVULCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHNpbikpLAorCQkJIHN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKHNvY2tmZCk7CisJCXJldHVybiAwOworCX0KKworCWZsYWdzID0gZmNudGwoc29ja2ZkLCBGX0dFVEZELCAwKTsKKwlpZiAoZmxhZ3MgPj0gMCkKKwkJZmNudGwoc29ja2ZkLCBGX1NFVEZELCBmbGFncyB8IEZEX0NMT0VYRUMpOworCisJQUxMT0NfR1JPVyhzb2NrbGlzdC0+bGlzdCwgc29ja2xpc3QtPm5yICsgMSwgc29ja2xpc3QtPmFsbG9jKTsKKwlzb2NrbGlzdC0+bGlzdFtzb2NrbGlzdC0+bnIrK10gPSBzb2NrZmQ7CisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzb2Nrc2V0dXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ZW5fYWRkciwgaW50IGxpc3Rlbl9wb3J0LCBzdHJ1Y3Qgc29ja2V0bGlzdCAqc29ja2xpc3QpCit7CisJaWYgKCFsaXN0ZW5fYWRkci0+bnIpCisJCXNldHVwX25hbWVkX3NvY2soTlVMTCwgbGlzdGVuX3BvcnQsIHNvY2tsaXN0KTsKKwllbHNlIHsKKwkJaW50IGksIHNvY2tudW07CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0ZW5fYWRkci0+bnI7IGkrKykgeworCQkJc29ja251bSA9IHNldHVwX25hbWVkX3NvY2sobGlzdGVuX2FkZHItPml0ZW1zW2ldLnN0cmluZywKKwkJCQkJCSAgIGxpc3Rlbl9wb3J0LCBzb2NrbGlzdCk7CisKKwkJCWlmIChzb2NrbnVtID09IDApCisJCQkJbG9nZXJyb3IoInVuYWJsZSB0byBhbGxvY2F0ZSBhbnkgbGlzdGVuIHNvY2tldHMgZm9yIGhvc3QgJXMgb24gcG9ydCAldSIsCisJCQkJCSBsaXN0ZW5fYWRkci0+aXRlbXNbaV0uc3RyaW5nLCBsaXN0ZW5fcG9ydCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgc2VydmljZV9sb29wKHN0cnVjdCBzb2NrZXRsaXN0ICpzb2NrbGlzdCkKK3sKKwlzdHJ1Y3QgcG9sbGZkICpwZmQ7CisJaW50IGk7CisKKwlwZmQgPSB4Y2FsbG9jKHNvY2tsaXN0LT5uciwgc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBzb2NrbGlzdC0+bnI7IGkrKykgeworCQlwZmRbaV0uZmQgPSBzb2NrbGlzdC0+bGlzdFtpXTsKKwkJcGZkW2ldLmV2ZW50cyA9IFBPTExJTjsKKwl9CisKKwlzaWduYWwoU0lHQ0hMRCwgY2hpbGRfaGFuZGxlcik7CisKKwlmb3IgKDs7KSB7CisJCWludCBpOworCisJCWNoZWNrX2RlYWRfY2hpbGRyZW4oKTsKKworCQlpZiAocG9sbChwZmQsIHNvY2tsaXN0LT5uciwgLTEpIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVJTlRSKSB7CisJCQkJbG9nZXJyb3IoIlBvbGwgZmFpbGVkLCByZXN1bWluZzogJXMiLAorCQkJCSAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQkJc2xlZXAoMSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBzb2NrbGlzdC0+bnI7IGkrKykgeworCQkJaWYgKHBmZFtpXS5yZXZlbnRzICYgUE9MTElOKSB7CisJCQkJdW5pb24geworCQkJCQlzdHJ1Y3Qgc29ja2FkZHIgc2E7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiBzYWk7CisjaWZuZGVmIE5PX0lQVjYKKwkJCQkJc3RydWN0IHNvY2thZGRyX2luNiBzYWk2OworI2VuZGlmCisJCQkJfSBzczsKKwkJCQlzb2NrbGVuX3Qgc3NsZW4gPSBzaXplb2Yoc3MpOworCQkJCWludCBpbmNvbWluZyA9IGFjY2VwdChwZmRbaV0uZmQsICZzcy5zYSwgJnNzbGVuKTsKKwkJCQlpZiAoaW5jb21pbmcgPCAwKSB7CisJCQkJCXN3aXRjaCAoZXJybm8pIHsKKwkJCQkJY2FzZSBFQUdBSU46CisJCQkJCWNhc2UgRUlOVFI6CisJCQkJCWNhc2UgRUNPTk5BQk9SVEVEOgorCQkJCQkJY29udGludWU7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlkaWVfZXJybm8oImFjY2VwdCByZXR1cm5lZCIpOworCQkJCQl9CisJCQkJfQorCQkJCWhhbmRsZShpbmNvbWluZywgJnNzLnNhLCBzc2xlbik7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qIGlmIGFueSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3IgaXMgbWlzc2luZyBvcGVuIGl0IHRvIC9kZXYvbnVsbCAqLworc3RhdGljIHZvaWQgc2FuaXRpemVfc3RkZmRzKHZvaWQpCit7CisJaW50IGZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSLCAwKTsKKwl3aGlsZSAoZmQgIT0gLTEgJiYgZmQgPCAyKQorCQlmZCA9IGR1cChmZCk7CisJaWYgKGZkID09IC0xKQorCQlkaWVfZXJybm8oIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiKTsKKwlpZiAoZmQgPiAyKQorCQljbG9zZShmZCk7Cit9CisKKyNpZmRlZiBOT19QT1NJWF9HT09ESUVTCisKK3N0cnVjdCBjcmVkZW50aWFsczsKKworc3RhdGljIHZvaWQgZHJvcF9wcml2aWxlZ2VzKHN0cnVjdCBjcmVkZW50aWFscyAqY3JlZCkKK3sKKwkvKiBub3RoaW5nICovCit9CisKK3N0YXRpYyB2b2lkIGRhZW1vbml6ZSh2b2lkKQoreworCWRpZSgiLS1kZXRhY2ggbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbHMgKnByZXBhcmVfY3JlZGVudGlhbHMoY29uc3QgY2hhciAqdXNlcl9uYW1lLAorICAgIGNvbnN0IGNoYXIgKmdyb3VwX25hbWUpCit7CisJZGllKCItLXVzZXIgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7Cit9CisKKyNlbHNlCisKK3N0cnVjdCBjcmVkZW50aWFscyB7CisJc3RydWN0IHBhc3N3ZCAqcGFzczsKKwlnaWRfdCBnaWQ7Cit9OworCitzdGF0aWMgdm9pZCBkcm9wX3ByaXZpbGVnZXMoc3RydWN0IGNyZWRlbnRpYWxzICpjcmVkKQoreworCWlmIChjcmVkICYmIChpbml0Z3JvdXBzKGNyZWQtPnBhc3MtPnB3X25hbWUsIGNyZWQtPmdpZCkgfHwKKwkgICAgc2V0Z2lkIChjcmVkLT5naWQpIHx8IHNldHVpZChjcmVkLT5wYXNzLT5wd191aWQpKSkKKwkJZGllKCJjYW5ub3QgZHJvcCBwcml2aWxlZ2VzIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbHMgKnByZXBhcmVfY3JlZGVudGlhbHMoY29uc3QgY2hhciAqdXNlcl9uYW1lLAorICAgIGNvbnN0IGNoYXIgKmdyb3VwX25hbWUpCit7CisJc3RhdGljIHN0cnVjdCBjcmVkZW50aWFscyBjOworCisJYy5wYXNzID0gZ2V0cHduYW0odXNlcl9uYW1lKTsKKwlpZiAoIWMucGFzcykKKwkJZGllKCJ1c2VyIG5vdCBmb3VuZCAtICVzIiwgdXNlcl9uYW1lKTsKKworCWlmICghZ3JvdXBfbmFtZSkKKwkJYy5naWQgPSBjLnBhc3MtPnB3X2dpZDsKKwllbHNlIHsKKwkJc3RydWN0IGdyb3VwICpncm91cCA9IGdldGdybmFtKGdyb3VwX25hbWUpOworCQlpZiAoIWdyb3VwKQorCQkJZGllKCJncm91cCBub3QgZm91bmQgLSAlcyIsIGdyb3VwX25hbWUpOworCisJCWMuZ2lkID0gZ3JvdXAtPmdyX2dpZDsKKwl9CisKKwlyZXR1cm4gJmM7Cit9CisKK3N0YXRpYyB2b2lkIGRhZW1vbml6ZSh2b2lkKQoreworCXN3aXRjaCAoZm9yaygpKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQljYXNlIC0xOgorCQkJZGllX2Vycm5vKCJmb3JrIGZhaWxlZCIpOworCQlkZWZhdWx0OgorCQkJZXhpdCgwKTsKKwl9CisJaWYgKHNldHNpZCgpID09IC0xKQorCQlkaWVfZXJybm8oInNldHNpZCBmYWlsZWQiKTsKKwljbG9zZSgwKTsKKwljbG9zZSgxKTsKKwljbG9zZSgyKTsKKwlzYW5pdGl6ZV9zdGRmZHMoKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzdG9yZV9waWQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlGSUxFICpmID0gZm9wZW4ocGF0aCwgInciKTsKKwlpZiAoIWYpCisJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gcGlkIGZpbGUgJyVzJyIsIHBhdGgpOworCWlmIChmcHJpbnRmKGYsICIlIlBSSXVNQVgiXG4iLCAodWludG1heF90KSBnZXRwaWQoKSkgPCAwIHx8IGZjbG9zZShmKSAhPSAwKQorCQlkaWVfZXJybm8oImZhaWxlZCB0byB3cml0ZSBwaWQgZmlsZSAnJXMnIiwgcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgc2VydmUoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ZW5fYWRkciwgaW50IGxpc3Rlbl9wb3J0LAorICAgIHN0cnVjdCBjcmVkZW50aWFscyAqY3JlZCkKK3sKKwlzdHJ1Y3Qgc29ja2V0bGlzdCBzb2NrbGlzdCA9IHsgTlVMTCwgMCwgMCB9OworCisJc29ja3NldHVwKGxpc3Rlbl9hZGRyLCBsaXN0ZW5fcG9ydCwgJnNvY2tsaXN0KTsKKwlpZiAoc29ja2xpc3QubnIgPT0gMCkKKwkJZGllKCJ1bmFibGUgdG8gYWxsb2NhdGUgYW55IGxpc3RlbiBzb2NrZXRzIG9uIHBvcnQgJXUiLAorCQkgICAgbGlzdGVuX3BvcnQpOworCisJZHJvcF9wcml2aWxlZ2VzKGNyZWQpOworCisJbG9naW5mbygiUmVhZHkgdG8gcnVtYmxlIik7CisKKwlyZXR1cm4gc2VydmljZV9sb29wKCZzb2NrbGlzdCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgbGlzdGVuX3BvcnQgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ZW5fYWRkciA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IHNlcnZlX21vZGUgPSAwLCBpbmV0ZF9tb2RlID0gMDsKKwljb25zdCBjaGFyICpwaWRfZmlsZSA9IE5VTEwsICp1c2VyX25hbWUgPSBOVUxMLCAqZ3JvdXBfbmFtZSA9IE5VTEw7CisJaW50IGRldGFjaCA9IDA7CisJc3RydWN0IGNyZWRlbnRpYWxzICpjcmVkID0gTlVMTDsKKwlpbnQgaTsKKworCWdpdF9zZXR1cF9nZXR0ZXh0KCk7CisKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmICghcHJlZml4Y21wKGFyZywgIi0tbGlzdGVuPSIpKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmxpc3Rlbl9hZGRyLCB4c3RyZHVwX3RvbG93ZXIoYXJnICsgOSkpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1wb3J0PSIpKSB7CisJCQljaGFyICplbmQ7CisJCQl1bnNpZ25lZCBsb25nIG47CisJCQluID0gc3RydG91bChhcmcrNywgJmVuZCwgMCk7CisJCQlpZiAoYXJnWzddICYmICEqZW5kKSB7CisJCQkJbGlzdGVuX3BvcnQgPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tc2VydmUiKSkgeworCQkJc2VydmVfbW9kZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWluZXRkIikpIHsKKwkJCWluZXRkX21vZGUgPSAxOworCQkJbG9nX3N5c2xvZyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXZlcmJvc2UiKSkgeworCQkJdmVyYm9zZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXN5c2xvZyIpKSB7CisJCQlsb2dfc3lzbG9nID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tZXhwb3J0LWFsbCIpKSB7CisJCQlleHBvcnRfYWxsX3RyZWVzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcHJlZml4Y21wKGFyZywgIi0tYWNjZXNzLWhvb2s9IikpIHsKKwkJCWFjY2Vzc19ob29rID0gYXJnICsgMTQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXRpbWVvdXQ9IikpIHsKKwkJCXRpbWVvdXQgPSBhdG9pKGFyZysxMCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWluaXQtdGltZW91dD0iKSkgeworCQkJaW5pdF90aW1lb3V0ID0gYXRvaShhcmcrMTUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1tYXgtY29ubmVjdGlvbnM9IikpIHsKKwkJCW1heF9jb25uZWN0aW9ucyA9IGF0b2koYXJnKzE4KTsKKwkJCWlmIChtYXhfY29ubmVjdGlvbnMgPCAwKQorCQkJCW1heF9jb25uZWN0aW9ucyA9IDA7CSAgICAgICAgLyogdW5saW1pdGVkICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXN0cmljdC1wYXRocyIpKSB7CisJCQlzdHJpY3RfcGF0aHMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1iYXNlLXBhdGg9IikpIHsKKwkJCWJhc2VfcGF0aCA9IGFyZysxMjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tYmFzZS1wYXRoLXJlbGF4ZWQiKSkgeworCQkJYmFzZV9wYXRoX3JlbGF4ZWQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1pbnRlcnBvbGF0ZWQtcGF0aD0iKSkgeworCQkJaW50ZXJwb2xhdGVkX3BhdGggPSBhcmcrMjA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXJldXNlYWRkciIpKSB7CisJCQlyZXVzZWFkZHIgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS11c2VyLXBhdGgiKSkgeworCQkJdXNlcl9wYXRoID0gIiI7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXVzZXItcGF0aD0iKSkgeworCQkJdXNlcl9wYXRoID0gYXJnICsgMTI7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXBpZC1maWxlPSIpKSB7CisJCQlwaWRfZmlsZSA9IGFyZyArIDExOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kZXRhY2giKSkgeworCQkJZGV0YWNoID0gMTsKKwkJCWxvZ19zeXNsb2cgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS11c2VyPSIpKSB7CisJCQl1c2VyX25hbWUgPSBhcmcgKyA3OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1ncm91cD0iKSkgeworCQkJZ3JvdXBfbmFtZSA9IGFyZyArIDg7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWVuYWJsZT0iKSkgeworCQkJZW5hYmxlX3NlcnZpY2UoYXJnICsgOSwgMSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWRpc2FibGU9IikpIHsKKwkJCWVuYWJsZV9zZXJ2aWNlKGFyZyArIDEwLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcHJlZml4Y21wKGFyZywgIi0tYWxsb3ctb3ZlcnJpZGU9IikpIHsKKwkJCW1ha2Vfc2VydmljZV9vdmVycmlkYWJsZShhcmcgKyAxNywgMSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChhcmcsICItLWZvcmJpZC1vdmVycmlkZT0iKSkgeworCQkJbWFrZV9zZXJ2aWNlX292ZXJyaWRhYmxlKGFyZyArIDE4LCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcHJlZml4Y21wKGFyZywgIi0taW5mb3JtYXRpdmUtZXJyb3JzIikpIHsKKwkJCWluZm9ybWF0aXZlX2Vycm9ycyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChhcmcsICItLW5vLWluZm9ybWF0aXZlLWVycm9ycyIpKSB7CisJCQlpbmZvcm1hdGl2ZV9lcnJvcnMgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJb2tfcGF0aHMgPSAmYXJndltpKzFdOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoYXJnWzBdICE9ICctJykgeworCQkJb2tfcGF0aHMgPSAmYXJndltpXTsKKwkJCWJyZWFrOworCQl9CisKKwkJdXNhZ2UoZGFlbW9uX3VzYWdlKTsKKwl9CisKKwlpZiAobG9nX3N5c2xvZykgeworCQlvcGVubG9nKCJnaXQtZGFlbW9uIiwgTE9HX1BJRCwgTE9HX0RBRU1PTik7CisJCXNldF9kaWVfcm91dGluZShkYWVtb25fZGllKTsKKwl9IGVsc2UKKwkJLyogYXZvaWQgc3BsaXR0aW5nIGEgbWVzc2FnZSBpbiB0aGUgbWlkZGxlICovCisJCXNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9GQkYsIDQwOTYpOworCisJaWYgKGluZXRkX21vZGUgJiYgKGRldGFjaCB8fCBncm91cF9uYW1lIHx8IHVzZXJfbmFtZSkpCisJCWRpZSgiLS1kZXRhY2gsIC0tdXNlciBhbmQgLS1ncm91cCBhcmUgaW5jb21wYXRpYmxlIHdpdGggLS1pbmV0ZCIpOworCisJaWYgKGluZXRkX21vZGUgJiYgKGxpc3Rlbl9wb3J0IHx8IChsaXN0ZW5fYWRkci5uciA+IDApKSkKKwkJZGllKCItLWxpc3Rlbj0gYW5kIC0tcG9ydD0gYXJlIGluY29tcGF0aWJsZSB3aXRoIC0taW5ldGQiKTsKKwllbHNlIGlmIChsaXN0ZW5fcG9ydCA9PSAwKQorCQlsaXN0ZW5fcG9ydCA9IERFRkFVTFRfR0lUX1BPUlQ7CisKKwlpZiAoZ3JvdXBfbmFtZSAmJiAhdXNlcl9uYW1lKQorCQlkaWUoIi0tZ3JvdXAgc3VwcGxpZWQgd2l0aG91dCAtLXVzZXIiKTsKKworCWlmICh1c2VyX25hbWUpCisJCWNyZWQgPSBwcmVwYXJlX2NyZWRlbnRpYWxzKHVzZXJfbmFtZSwgZ3JvdXBfbmFtZSk7CisKKwlpZiAoc3RyaWN0X3BhdGhzICYmICghb2tfcGF0aHMgfHwgISpva19wYXRocykpCisJCWRpZSgib3B0aW9uIC0tc3RyaWN0LXBhdGhzIHJlcXVpcmVzIGEgd2hpdGVsaXN0Iik7CisKKwlpZiAoYmFzZV9wYXRoICYmICFpc19kaXJlY3RvcnkoYmFzZV9wYXRoKSkKKwkJZGllKCJiYXNlLXBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiLAorCQkgICAgYmFzZV9wYXRoKTsKKworCWlmIChpbmV0ZF9tb2RlKSB7CisJCWlmICghZnJlb3BlbigiL2Rldi9udWxsIiwgInciLCBzdGRlcnIpKQorCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIC9kZXYvbnVsbCIpOworCX0KKworCWlmIChpbmV0ZF9tb2RlIHx8IHNlcnZlX21vZGUpCisJCXJldHVybiBleGVjdXRlKCk7CisKKwlpZiAoZGV0YWNoKQorCQlkYWVtb25pemUoKTsKKwllbHNlCisJCXNhbml0aXplX3N0ZGZkcygpOworCisJaWYgKHBpZF9maWxlKQorCQlzdG9yZV9waWQocGlkX2ZpbGUpOworCisJLyogcHJlcGFyZSBhcmd2IGZvciBzZXJ2aW5nLXByb2Nlc3NlcyAqLworCWNsZF9hcmd2ID0geG1hbGxvYyhzaXplb2YgKGNoYXIgKikgKiAoYXJnYyArIDIpKTsKKwljbGRfYXJndlswXSA9IGFyZ3ZbMF07CS8qIGdpdC1kYWVtb24gKi8KKwljbGRfYXJndlsxXSA9ICItLXNlcnZlIjsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgKytpKQorCQljbGRfYXJndltpKzFdID0gYXJndltpXTsKKwljbGRfYXJndlthcmdjKzFdID0gTlVMTDsKKworCXJldHVybiBzZXJ2ZSgmbGlzdGVuX2FkZHIsIGxpc3Rlbl9wb3J0LCBjcmVkKTsKK30KZGlmZiAtLWdpdCBhL2RhdGUuYyBiL2RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzMzMWVkCi0tLSAvZGV2L251bGwKKysrIGIvZGF0ZS5jCkBAIC0wLDAgKzEsMTA4NyBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKworLyoKKyAqIFRoaXMgaXMgbGlrZSBta3RpbWUsIGJ1dCB3aXRob3V0IG5vcm1hbGl6YXRpb24gb2YgdG1fd2RheSBhbmQgdG1feWRheS4KKyAqLworc3RhdGljIHRpbWVfdCB0bV90b190aW1lX3QoY29uc3Qgc3RydWN0IHRtICp0bSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IG1kYXlzW10gPSB7CisJICAgIDAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0CisJfTsKKwlpbnQgeWVhciA9IHRtLT50bV95ZWFyIC0gNzA7CisJaW50IG1vbnRoID0gdG0tPnRtX21vbjsKKwlpbnQgZGF5ID0gdG0tPnRtX21kYXk7CisKKwlpZiAoeWVhciA8IDAgfHwgeWVhciA+IDEyOSkgLyogYWxnbyBvbmx5IHdvcmtzIGZvciAxOTcwLTIwOTkgKi8KKwkJcmV0dXJuIC0xOworCWlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkgLyogYXJyYXkgYm91bmRzICovCisJCXJldHVybiAtMTsKKwlpZiAobW9udGggPCAyIHx8ICh5ZWFyICsgMikgJSA0KQorCQlkYXktLTsKKwlpZiAodG0tPnRtX2hvdXIgPCAwIHx8IHRtLT50bV9taW4gPCAwIHx8IHRtLT50bV9zZWMgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuICh5ZWFyICogMzY1ICsgKHllYXIgKyAxKSAvIDQgKyBtZGF5c1ttb250aF0gKyBkYXkpICogMjQqNjAqNjBVTCArCisJCXRtLT50bV9ob3VyICogNjAqNjAgKyB0bS0+dG1fbWluICogNjAgKyB0bS0+dG1fc2VjOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbW9udGhfbmFtZXNbXSA9IHsKKwkiSmFudWFyeSIsICJGZWJydWFyeSIsICJNYXJjaCIsICJBcHJpbCIsICJNYXkiLCAiSnVuZSIsCisJIkp1bHkiLCAiQXVndXN0IiwgIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKndlZWtkYXlfbmFtZXNbXSA9IHsKKwkiU3VuZGF5cyIsICJNb25kYXlzIiwgIlR1ZXNkYXlzIiwgIldlZG5lc2RheXMiLCAiVGh1cnNkYXlzIiwgIkZyaWRheXMiLCAiU2F0dXJkYXlzIgorfTsKKworc3RhdGljIHRpbWVfdCBnbV90aW1lX3QodW5zaWduZWQgbG9uZyB0aW1lLCBpbnQgdHopCit7CisJaW50IG1pbnV0ZXM7CisKKwltaW51dGVzID0gdHogPCAwID8gLXR6IDogdHo7CisJbWludXRlcyA9IChtaW51dGVzIC8gMTAwKSo2MCArIChtaW51dGVzICUgMTAwKTsKKwltaW51dGVzID0gdHogPCAwID8gLW1pbnV0ZXMgOiBtaW51dGVzOworCXJldHVybiB0aW1lICsgbWludXRlcyAqIDYwOworfQorCisvKgorICogVGhlICJ0eiIgdGhpbmcgaXMgcGFzc2VkIGluIGFzIHRoaXMgc3RyYW5nZSAiZGVjaW1hbCBwYXJzZSBvZiB0eiIKKyAqIHRoaW5nLCB3aGljaCBtZWFucyB0aGF0IHR6IC0wMTAwIGlzIHBhc3NlZCBpbiBhcyB0aGUgaW50ZWdlciAtMTAwLAorICogZXZlbiB0aG91Z2ggaXQgbWVhbnMgInNpeHR5IG1pbnV0ZXMgb2ZmIgorICovCitzdGF0aWMgc3RydWN0IHRtICp0aW1lX3RvX3RtKHVuc2lnbmVkIGxvbmcgdGltZSwgaW50IHR6KQoreworCXRpbWVfdCB0ID0gZ21fdGltZV90KHRpbWUsIHR6KTsKKwlyZXR1cm4gZ210aW1lKCZ0KTsKK30KKworLyoKKyAqIFdoYXQgdmFsdWUgb2YgInR6IiB3YXMgaW4gZWZmZWN0IGJhY2sgdGhlbiBhdCAidGltZSIgaW4gdGhlCisgKiBsb2NhbCB0aW1lem9uZT8KKyAqLworc3RhdGljIGludCBsb2NhbF90em9mZnNldCh1bnNpZ25lZCBsb25nIHRpbWUpCit7CisJdGltZV90IHQsIHRfbG9jYWw7CisJc3RydWN0IHRtIHRtOworCWludCBvZmZzZXQsIGVhc3R3ZXN0OworCisJdCA9IHRpbWU7CisJbG9jYWx0aW1lX3IoJnQsICZ0bSk7CisJdF9sb2NhbCA9IHRtX3RvX3RpbWVfdCgmdG0pOworCisJaWYgKHRfbG9jYWwgPCB0KSB7CisJCWVhc3R3ZXN0ID0gLTE7CisJCW9mZnNldCA9IHQgLSB0X2xvY2FsOworCX0gZWxzZSB7CisJCWVhc3R3ZXN0ID0gMTsKKwkJb2Zmc2V0ID0gdF9sb2NhbCAtIHQ7CisJfQorCW9mZnNldCAvPSA2MDsgLyogaW4gbWludXRlcyAqLworCW9mZnNldCA9IChvZmZzZXQgJSA2MCkgKyAoKG9mZnNldCAvIDYwKSAqIDEwMCk7CisJcmV0dXJuIG9mZnNldCAqIGVhc3R3ZXN0OworfQorCit2b2lkIHNob3dfZGF0ZV9yZWxhdGl2ZSh1bnNpZ25lZCBsb25nIHRpbWUsIGludCB0eiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqbm93LAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKnRpbWVidWYpCit7CisJdW5zaWduZWQgbG9uZyBkaWZmOworCWlmIChub3ctPnR2X3NlYyA8IHRpbWUpIHsKKwkJc3RyYnVmX2FkZHN0cih0aW1lYnVmLCBfKCJpbiB0aGUgZnV0dXJlIikpOworCQlyZXR1cm47CisJfQorCWRpZmYgPSBub3ctPnR2X3NlYyAtIHRpbWU7CisJaWYgKGRpZmYgPCA5MCkgeworCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJIFFfKCIlbHUgc2Vjb25kIGFnbyIsICIlbHUgc2Vjb25kcyBhZ28iLCBkaWZmKSwgZGlmZik7CisJCXJldHVybjsKKwl9CisJLyogVHVybiBpdCBpbnRvIG1pbnV0ZXMgKi8KKwlkaWZmID0gKGRpZmYgKyAzMCkgLyA2MDsKKwlpZiAoZGlmZiA8IDkwKSB7CisJCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCQkgUV8oIiVsdSBtaW51dGUgYWdvIiwgIiVsdSBtaW51dGVzIGFnbyIsIGRpZmYpLCBkaWZmKTsKKwkJcmV0dXJuOworCX0KKwkvKiBUdXJuIGl0IGludG8gaG91cnMgKi8KKwlkaWZmID0gKGRpZmYgKyAzMCkgLyA2MDsKKwlpZiAoZGlmZiA8IDM2KSB7CisJCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCQkgUV8oIiVsdSBob3VyIGFnbyIsICIlbHUgaG91cnMgYWdvIiwgZGlmZiksIGRpZmYpOworCQlyZXR1cm47CisJfQorCS8qIFdlIGRlYWwgd2l0aCBudW1iZXIgb2YgZGF5cyBmcm9tIGhlcmUgb24gKi8KKwlkaWZmID0gKGRpZmYgKyAxMikgLyAyNDsKKwlpZiAoZGlmZiA8IDE0KSB7CisJCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCQkgUV8oIiVsdSBkYXkgYWdvIiwgIiVsdSBkYXlzIGFnbyIsIGRpZmYpLCBkaWZmKTsKKwkJcmV0dXJuOworCX0KKwkvKiBTYXkgd2Vla3MgZm9yIHRoZSBwYXN0IDEwIHdlZWtzIG9yIHNvICovCisJaWYgKGRpZmYgPCA3MCkgeworCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJIFFfKCIlbHUgd2VlayBhZ28iLCAiJWx1IHdlZWtzIGFnbyIsIChkaWZmICsgMykgLyA3KSwKKwkJCSAoZGlmZiArIDMpIC8gNyk7CisJCXJldHVybjsKKwl9CisJLyogU2F5IG1vbnRocyBmb3IgdGhlIHBhc3QgMTIgbW9udGhzIG9yIHNvICovCisJaWYgKGRpZmYgPCAzNjUpIHsKKwkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCSBRXygiJWx1IG1vbnRoIGFnbyIsICIlbHUgbW9udGhzIGFnbyIsIChkaWZmICsgMTUpIC8gMzApLAorCQkJIChkaWZmICsgMTUpIC8gMzApOworCQlyZXR1cm47CisJfQorCS8qIEdpdmUgeWVhcnMgYW5kIG1vbnRocyBmb3IgNSB5ZWFycyBvciBzbyAqLworCWlmIChkaWZmIDwgMTgyNSkgeworCQl1bnNpZ25lZCBsb25nIHRvdGFsbW9udGhzID0gKGRpZmYgKiAxMiAqIDIgKyAzNjUpIC8gKDM2NSAqIDIpOworCQl1bnNpZ25lZCBsb25nIHllYXJzID0gdG90YWxtb250aHMgLyAxMjsKKwkJdW5zaWduZWQgbG9uZyBtb250aHMgPSB0b3RhbG1vbnRocyAlIDEyOworCQlpZiAobW9udGhzKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkZigmc2IsIFFfKCIlbHUgeWVhciIsICIlbHUgeWVhcnMiLCB5ZWFycyksIHllYXJzKTsKKwkJCS8qIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiICovCisJCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJCSBRXygiJXMsICVsdSBtb250aCBhZ28iLCAiJXMsICVsdSBtb250aHMgYWdvIiwgbW9udGhzKSwKKwkJCQkgc2IuYnVmLCBtb250aHMpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJfSBlbHNlCisJCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJCSBRXygiJWx1IHllYXIgYWdvIiwgIiVsdSB5ZWFycyBhZ28iLCB5ZWFycyksIHllYXJzKTsKKwkJcmV0dXJuOworCX0KKwkvKiBPdGhlcndpc2UsIGp1c3QgeWVhcnMuIENlbnR1cmllcyBpcyBwcm9iYWJseSBvdmVya2lsbC4gKi8KKwlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkgUV8oIiVsdSB5ZWFyIGFnbyIsICIlbHUgeWVhcnMgYWdvIiwgKGRpZmYgKyAxODMpIC8gMzY1KSwKKwkJIChkaWZmICsgMTgzKSAvIDM2NSk7Cit9CisKK2NvbnN0IGNoYXIgKnNob3dfZGF0ZSh1bnNpZ25lZCBsb25nIHRpbWUsIGludCB0eiwgZW51bSBkYXRlX21vZGUgbW9kZSkKK3sKKwlzdHJ1Y3QgdG0gKnRtOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHRpbWVidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChtb2RlID09IERBVEVfUkFXKSB7CisJCXN0cmJ1Zl9yZXNldCgmdGltZWJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJWx1ICUrMDVkIiwgdGltZSwgdHopOworCQlyZXR1cm4gdGltZWJ1Zi5idWY7CisJfQorCisJaWYgKG1vZGUgPT0gREFURV9SRUxBVElWRSkgeworCQlzdHJ1Y3QgdGltZXZhbCBub3c7CisKKwkJc3RyYnVmX3Jlc2V0KCZ0aW1lYnVmKTsKKwkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCQlzaG93X2RhdGVfcmVsYXRpdmUodGltZSwgdHosICZub3csICZ0aW1lYnVmKTsKKwkJcmV0dXJuIHRpbWVidWYuYnVmOworCX0KKworCWlmIChtb2RlID09IERBVEVfTE9DQUwpCisJCXR6ID0gbG9jYWxfdHpvZmZzZXQodGltZSk7CisKKwl0bSA9IHRpbWVfdG9fdG0odGltZSwgdHopOworCWlmICghdG0pCisJCXJldHVybiBOVUxMOworCisJc3RyYnVmX3Jlc2V0KCZ0aW1lYnVmKTsKKwlpZiAobW9kZSA9PSBEQVRFX1NIT1JUKQorCQlzdHJidWZfYWRkZigmdGltZWJ1ZiwgIiUwNGQtJTAyZC0lMDJkIiwgdG0tPnRtX3llYXIgKyAxOTAwLAorCQkJCXRtLT50bV9tb24gKyAxLCB0bS0+dG1fbWRheSk7CisJZWxzZSBpZiAobW9kZSA9PSBEQVRFX0lTTzg2MDEpCisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQgJSswNWQiLAorCQkJCXRtLT50bV95ZWFyICsgMTkwMCwKKwkJCQl0bS0+dG1fbW9uICsgMSwKKwkJCQl0bS0+dG1fbWRheSwKKwkJCQl0bS0+dG1faG91ciwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYywKKwkJCQl0eik7CisJZWxzZSBpZiAobW9kZSA9PSBEQVRFX1JGQzI4MjIpCisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJS4zcywgJWQgJS4zcyAlZCAlMDJkOiUwMmQ6JTAyZCAlKzA1ZCIsCisJCQl3ZWVrZGF5X25hbWVzW3RtLT50bV93ZGF5XSwgdG0tPnRtX21kYXksCisJCQltb250aF9uYW1lc1t0bS0+dG1fbW9uXSwgdG0tPnRtX3llYXIgKyAxOTAwLAorCQkJdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsIHR6KTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJS4zcyAlLjNzICVkICUwMmQ6JTAyZDolMDJkICVkJWMlKzA1ZCIsCisJCQkJd2Vla2RheV9uYW1lc1t0bS0+dG1fd2RheV0sCisJCQkJbW9udGhfbmFtZXNbdG0tPnRtX21vbl0sCisJCQkJdG0tPnRtX21kYXksCisJCQkJdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsCisJCQkJdG0tPnRtX3llYXIgKyAxOTAwLAorCQkJCShtb2RlID09IERBVEVfTE9DQUwpID8gMCA6ICcgJywKKwkJCQl0eik7CisJcmV0dXJuIHRpbWVidWYuYnVmOworfQorCisvKgorICogQ2hlY2sgdGhlc2UuIEFuZCBub3RlIGhvdyBpdCBkb2Vzbid0IGRvIHRoZSBzdW1tZXItdGltZSBjb252ZXJzaW9uLgorICoKKyAqIEluIG15IHdvcmxkLCBpdCdzIGFsd2F5cyBzdW1tZXIsIGFuZCB0aGluZ3MgYXJlIHByb2JhYmx5IGEgYml0IG9mZgorICogaW4gb3RoZXIgd2F5cyB0b28uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG9mZnNldDsKKwlpbnQgZHN0OworfSB0aW1lem9uZV9uYW1lc1tdID0geworCXsgIklETFciLCAtMTIsIDAsIH0sCS8qIEludGVybmF0aW9uYWwgRGF0ZSBMaW5lIFdlc3QgKi8KKwl7ICJOVCIsICAgLTExLCAwLCB9LAkvKiBOb21lICovCisJeyAiQ0FUIiwgIC0xMCwgMCwgfSwJLyogQ2VudHJhbCBBbGFza2EgKi8KKwl7ICJIU1QiLCAgLTEwLCAwLCB9LAkvKiBIYXdhaWkgU3RhbmRhcmQgKi8KKwl7ICJIRFQiLCAgLTEwLCAxLCB9LAkvKiBIYXdhaWkgRGF5bGlnaHQgKi8KKwl7ICJZU1QiLCAgIC05LCAwLCB9LAkvKiBZdWtvbiBTdGFuZGFyZCAqLworCXsgIllEVCIsICAgLTksIDEsIH0sCS8qIFl1a29uIERheWxpZ2h0ICovCisJeyAiUFNUIiwgICAtOCwgMCwgfSwJLyogUGFjaWZpYyBTdGFuZGFyZCAqLworCXsgIlBEVCIsICAgLTgsIDEsIH0sCS8qIFBhY2lmaWMgRGF5bGlnaHQgKi8KKwl7ICJNU1QiLCAgIC03LCAwLCB9LAkvKiBNb3VudGFpbiBTdGFuZGFyZCAqLworCXsgIk1EVCIsICAgLTcsIDEsIH0sCS8qIE1vdW50YWluIERheWxpZ2h0ICovCisJeyAiQ1NUIiwgICAtNiwgMCwgfSwJLyogQ2VudHJhbCBTdGFuZGFyZCAqLworCXsgIkNEVCIsICAgLTYsIDEsIH0sCS8qIENlbnRyYWwgRGF5bGlnaHQgKi8KKwl7ICJFU1QiLCAgIC01LCAwLCB9LAkvKiBFYXN0ZXJuIFN0YW5kYXJkICovCisJeyAiRURUIiwgICAtNSwgMSwgfSwJLyogRWFzdGVybiBEYXlsaWdodCAqLworCXsgIkFTVCIsICAgLTMsIDAsIH0sCS8qIEF0bGFudGljIFN0YW5kYXJkICovCisJeyAiQURUIiwgICAtMywgMSwgfSwJLyogQXRsYW50aWMgRGF5bGlnaHQgKi8KKwl7ICJXQVQiLCAgIC0xLCAwLCB9LAkvKiBXZXN0IEFmcmljYSAqLworCisJeyAiR01UIiwgICAgMCwgMCwgfSwJLyogR3JlZW53aWNoIE1lYW4gKi8KKwl7ICJVVEMiLCAgICAwLCAwLCB9LAkvKiBVbml2ZXJzYWwgKENvb3JkaW5hdGVkKSAqLworCXsgIloiLCAgICAgIDAsIDAsIH0sICAgIC8qIFp1bHUsIGFsaWFzIGZvciBVVEMgKi8KKworCXsgIldFVCIsICAgIDAsIDAsIH0sCS8qIFdlc3Rlcm4gRXVyb3BlYW4gKi8KKwl7ICJCU1QiLCAgICAwLCAxLCB9LAkvKiBCcml0aXNoIFN1bW1lciAqLworCXsgIkNFVCIsICAgKzEsIDAsIH0sCS8qIENlbnRyYWwgRXVyb3BlYW4gKi8KKwl7ICJNRVQiLCAgICsxLCAwLCB9LAkvKiBNaWRkbGUgRXVyb3BlYW4gKi8KKwl7ICJNRVdUIiwgICsxLCAwLCB9LAkvKiBNaWRkbGUgRXVyb3BlYW4gV2ludGVyICovCisJeyAiTUVTVCIsICArMSwgMSwgfSwJLyogTWlkZGxlIEV1cm9wZWFuIFN1bW1lciAqLworCXsgIkNFU1QiLCAgKzEsIDEsIH0sCS8qIENlbnRyYWwgRXVyb3BlYW4gU3VtbWVyICovCisJeyAiTUVTWiIsICArMSwgMSwgfSwJLyogTWlkZGxlIEV1cm9wZWFuIFN1bW1lciAqLworCXsgIkZXVCIsICAgKzEsIDAsIH0sCS8qIEZyZW5jaCBXaW50ZXIgKi8KKwl7ICJGU1QiLCAgICsxLCAxLCB9LAkvKiBGcmVuY2ggU3VtbWVyICovCisJeyAiRUVUIiwgICArMiwgMCwgfSwJLyogRWFzdGVybiBFdXJvcGUsIFVTU1IgWm9uZSAxICovCisJeyAiRUVTVCIsICArMiwgMSwgfSwJLyogRWFzdGVybiBFdXJvcGVhbiBEYXlsaWdodCAqLworCXsgIldBU1QiLCAgKzcsIDAsIH0sCS8qIFdlc3QgQXVzdHJhbGlhbiBTdGFuZGFyZCAqLworCXsgIldBRFQiLCAgKzcsIDEsIH0sCS8qIFdlc3QgQXVzdHJhbGlhbiBEYXlsaWdodCAqLworCXsgIkNDVCIsICAgKzgsIDAsIH0sCS8qIENoaW5hIENvYXN0LCBVU1NSIFpvbmUgNyAqLworCXsgIkpTVCIsICAgKzksIDAsIH0sCS8qIEphcGFuIFN0YW5kYXJkLCBVU1NSIFpvbmUgOCAqLworCXsgIkVBU1QiLCArMTAsIDAsIH0sCS8qIEVhc3Rlcm4gQXVzdHJhbGlhbiBTdGFuZGFyZCAqLworCXsgIkVBRFQiLCArMTAsIDEsIH0sCS8qIEVhc3Rlcm4gQXVzdHJhbGlhbiBEYXlsaWdodCAqLworCXsgIkdTVCIsICArMTAsIDAsIH0sCS8qIEd1YW0gU3RhbmRhcmQsIFVTU1IgWm9uZSA5ICovCisJeyAiTlpUIiwgICsxMiwgMCwgfSwJLyogTmV3IFplYWxhbmQgKi8KKwl7ICJOWlNUIiwgKzEyLCAwLCB9LAkvKiBOZXcgWmVhbGFuZCBTdGFuZGFyZCAqLworCXsgIk5aRFQiLCArMTIsIDEsIH0sCS8qIE5ldyBaZWFsYW5kIERheWxpZ2h0ICovCisJeyAiSURMRSIsICsxMiwgMCwgfSwJLyogSW50ZXJuYXRpb25hbCBEYXRlIExpbmUgRWFzdCAqLworfTsKKworc3RhdGljIGludCBtYXRjaF9zdHJpbmcoY29uc3QgY2hhciAqZGF0ZSwgY29uc3QgY2hhciAqc3RyKQoreworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7ICpkYXRlOyBkYXRlKyssIHN0cisrLCBpKyspIHsKKwkJaWYgKCpkYXRlID09ICpzdHIpCisJCQljb250aW51ZTsKKwkJaWYgKHRvdXBwZXIoKmRhdGUpID09IHRvdXBwZXIoKnN0cikpCisJCQljb250aW51ZTsKKwkJaWYgKCFpc2FsbnVtKCpkYXRlKSkKKwkJCWJyZWFrOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgc2tpcF9hbHBoYShjb25zdCBjaGFyICpkYXRlKQoreworCWludCBpID0gMDsKKwlkbyB7CisJCWkrKzsKKwl9IHdoaWxlIChpc2FscGhhKGRhdGVbaV0pKTsKKwlyZXR1cm4gaTsKK30KKworLyoKKyogUGFyc2UgbW9udGgsIHdlZWtkYXksIG9yIHRpbWV6b25lIG5hbWUKKyovCitzdGF0aWMgaW50IG1hdGNoX2FscGhhKGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCB0bSAqdG0sIGludCAqb2Zmc2V0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJaW50IG1hdGNoID0gbWF0Y2hfc3RyaW5nKGRhdGUsIG1vbnRoX25hbWVzW2ldKTsKKwkJaWYgKG1hdGNoID49IDMpIHsKKwkJCXRtLT50bV9tb24gPSBpOworCQkJcmV0dXJuIG1hdGNoOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgd2Vla2RheV9uYW1lc1tpXSk7CisJCWlmIChtYXRjaCA+PSAzKSB7CisJCQl0bS0+dG1fd2RheSA9IGk7CisJCQlyZXR1cm4gbWF0Y2g7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aW1lem9uZV9uYW1lcyk7IGkrKykgeworCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgdGltZXpvbmVfbmFtZXNbaV0ubmFtZSk7CisJCWlmIChtYXRjaCA+PSAzIHx8IG1hdGNoID09IHN0cmxlbih0aW1lem9uZV9uYW1lc1tpXS5uYW1lKSkgeworCQkJaW50IG9mZiA9IHRpbWV6b25lX25hbWVzW2ldLm9mZnNldDsKKworCQkJLyogVGhpcyBpcyBib2d1cywgYnV0IHdlIGxpa2Ugc3VtbWVyICovCisJCQlvZmYgKz0gdGltZXpvbmVfbmFtZXNbaV0uZHN0OworCisJCQkvKiBPbmx5IHVzZSB0aGUgdHogbmFtZSBvZmZzZXQgaWYgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyBiZXR0ZXIgKi8KKwkJCWlmICgqb2Zmc2V0ID09IC0xKQorCQkJCSpvZmZzZXQgPSA2MCpvZmY7CisKKwkJCXJldHVybiBtYXRjaDsKKwkJfQorCX0KKworCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgIlBNIikgPT0gMikgeworCQl0bS0+dG1faG91ciA9ICh0bS0+dG1faG91ciAlIDEyKSArIDEyOworCQlyZXR1cm4gMjsKKwl9CisKKwlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsICJBTSIpID09IDIpIHsKKwkJdG0tPnRtX2hvdXIgPSAodG0tPnRtX2hvdXIgJSAxMikgKyAwOworCQlyZXR1cm4gMjsKKwl9CisKKwkvKiBCQUQgQ1JBUCAqLworCXJldHVybiBza2lwX2FscGhhKGRhdGUpOworfQorCitzdGF0aWMgaW50IGlzX2RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgc3RydWN0IHRtICpub3dfdG0sIHRpbWVfdCBub3csIHN0cnVjdCB0bSAqdG0pCit7CisJaWYgKG1vbnRoID4gMCAmJiBtb250aCA8IDEzICYmIGRheSA+IDAgJiYgZGF5IDwgMzIpIHsKKwkJc3RydWN0IHRtIGNoZWNrID0gKnRtOworCQlzdHJ1Y3QgdG0gKnIgPSAobm93X3RtID8gJmNoZWNrIDogdG0pOworCQl0aW1lX3Qgc3BlY2lmaWVkOworCisJCXItPnRtX21vbiA9IG1vbnRoIC0gMTsKKwkJci0+dG1fbWRheSA9IGRheTsKKwkJaWYgKHllYXIgPT0gLTEpIHsKKwkJCWlmICghbm93X3RtKQorCQkJCXJldHVybiAxOworCQkJci0+dG1feWVhciA9IG5vd190bS0+dG1feWVhcjsKKwkJfQorCQllbHNlIGlmICh5ZWFyID49IDE5NzAgJiYgeWVhciA8IDIxMDApCisJCQlyLT50bV95ZWFyID0geWVhciAtIDE5MDA7CisJCWVsc2UgaWYgKHllYXIgPiA3MCAmJiB5ZWFyIDwgMTAwKQorCQkJci0+dG1feWVhciA9IHllYXI7CisJCWVsc2UgaWYgKHllYXIgPCAzOCkKKwkJCXItPnRtX3llYXIgPSB5ZWFyICsgMTAwOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFub3dfdG0pCisJCQlyZXR1cm4gMTsKKworCQlzcGVjaWZpZWQgPSB0bV90b190aW1lX3Qocik7CisKKwkJLyogQmUgaXQgY29tbWl0IHRpbWUgb3IgYXV0aG9yIHRpbWUsIGl0IGRvZXMgbm90IG1ha2UKKwkJICogc2Vuc2UgdG8gc3BlY2lmeSB0aW1lc3RhbXAgd2F5IGludG8gdGhlIGZ1dHVyZS4gIE1ha2UKKwkJICogc3VyZSBpdCBpcyBub3QgbGF0ZXIgdGhhbiB0ZW4gZGF5cyBmcm9tIG5vdy4uLgorCQkgKi8KKwkJaWYgKG5vdyArIDEwKjI0KjM2MDAgPCBzcGVjaWZpZWQpCisJCQlyZXR1cm4gMDsKKwkJdG0tPnRtX21vbiA9IHItPnRtX21vbjsKKwkJdG0tPnRtX21kYXkgPSByLT50bV9tZGF5OworCQlpZiAoeWVhciAhPSAtMSkKKwkJCXRtLT50bV95ZWFyID0gci0+dG1feWVhcjsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hdGNoX211bHRpX251bWJlcih1bnNpZ25lZCBsb25nIG51bSwgY2hhciBjLCBjb25zdCBjaGFyICpkYXRlLCBjaGFyICplbmQsIHN0cnVjdCB0bSAqdG0pCit7CisJdGltZV90IG5vdzsKKwlzdHJ1Y3QgdG0gbm93X3RtOworCXN0cnVjdCB0bSAqcmVmdXNlX2Z1dHVyZTsKKwlsb25nIG51bTIsIG51bTM7CisKKwludW0yID0gc3RydG9sKGVuZCsxLCAmZW5kLCAxMCk7CisJbnVtMyA9IC0xOworCWlmICgqZW5kID09IGMgJiYgaXNkaWdpdChlbmRbMV0pKQorCQludW0zID0gc3RydG9sKGVuZCsxLCAmZW5kLCAxMCk7CisKKwkvKiBUaW1lPyBEYXRlPyAqLworCXN3aXRjaCAoYykgeworCWNhc2UgJzonOgorCQlpZiAobnVtMyA8IDApCisJCQludW0zID0gMDsKKwkJaWYgKG51bSA8IDI1ICYmIG51bTIgPj0gMCAmJiBudW0yIDwgNjAgJiYgbnVtMyA+PSAwICYmIG51bTMgPD0gNjApIHsKKwkJCXRtLT50bV9ob3VyID0gbnVtOworCQkJdG0tPnRtX21pbiA9IG51bTI7CisJCQl0bS0+dG1fc2VjID0gbnVtMzsKKwkJCWJyZWFrOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSAnLSc6CisJY2FzZSAnLyc6CisJY2FzZSAnLic6CisJCW5vdyA9IHRpbWUoTlVMTCk7CisJCXJlZnVzZV9mdXR1cmUgPSBOVUxMOworCQlpZiAoZ210aW1lX3IoJm5vdywgJm5vd190bSkpCisJCQlyZWZ1c2VfZnV0dXJlID0gJm5vd190bTsKKworCQlpZiAobnVtID4gNzApIHsKKwkJCS8qIHl5eXktbW0tZGQ/ICovCisJCQlpZiAoaXNfZGF0ZShudW0sIG51bTIsIG51bTMsIHJlZnVzZV9mdXR1cmUsIG5vdywgdG0pKQorCQkJCWJyZWFrOworCQkJLyogeXl5eS1kZC1tbT8gKi8KKwkJCWlmIChpc19kYXRlKG51bSwgbnVtMywgbnVtMiwgcmVmdXNlX2Z1dHVyZSwgbm93LCB0bSkpCisJCQkJYnJlYWs7CisJCX0KKwkJLyogT3VyIGVhc3Rlcm4gRXVyb3BlYW4gZnJpZW5kcyBzYXkgZGQubW0ueXlbeXldCisJCSAqIGlzIHRoZSBub3JtIHRoZXJlLCBzbyBnaXZpbmcgcHJlY2VkZW5jZSB0bworCQkgKiBtbS9kZC95eVt5eV0gZm9ybSBvbmx5IHdoZW4gc2VwYXJhdG9yIGlzIG5vdCAnLicKKwkJICovCisJCWlmIChjICE9ICcuJyAmJgorCQkgICAgaXNfZGF0ZShudW0zLCBudW0sIG51bTIsIHJlZnVzZV9mdXR1cmUsIG5vdywgdG0pKQorCQkJYnJlYWs7CisJCS8qIEV1cm9wZWFuIGRkLm1tLnl5W3l5XSBvciBmdW5ueSBVUyBkZC9tbS95eVt5eV0gKi8KKwkJaWYgKGlzX2RhdGUobnVtMywgbnVtMiwgbnVtLCByZWZ1c2VfZnV0dXJlLCBub3csIHRtKSkKKwkJCWJyZWFrOworCQkvKiBGdW5ueSBFdXJvcGVhbiBtbS5kZC55eSAqLworCQlpZiAoYyA9PSAnLicgJiYKKwkJICAgIGlzX2RhdGUobnVtMywgbnVtLCBudW0yLCByZWZ1c2VfZnV0dXJlLCBub3csIHRtKSkKKwkJCWJyZWFrOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGVuZCAtIGRhdGU7Cit9CisKKy8qCisgKiBIYXZlIHdlIGZpbGxlZCBpbiBhbnkgcGFydCBvZiB0aGUgdGltZS9kYXRlIHlldD8KKyAqIFdlIGp1c3QgZG8gYSBiaW5hcnkgJ2FuZCcgdG8gc2VlIGlmIHRoZSBzaWduIGJpdAorICogaXMgc2V0IGluIGFsbCB0aGUgdmFsdWVzLgorICovCitzdGF0aWMgaW5saW5lIGludCBub2RhdGUoc3RydWN0IHRtICp0bSkKK3sKKwlyZXR1cm4gKHRtLT50bV95ZWFyICYKKwkJdG0tPnRtX21vbiAmCisJCXRtLT50bV9tZGF5ICYKKwkJdG0tPnRtX2hvdXIgJgorCQl0bS0+dG1fbWluICYKKwkJdG0tPnRtX3NlYykgPCAwOworfQorCisvKgorICogV2UndmUgc2VlbiBhIGRpZ2l0LiBUaW1lPyBZZWFyPyBEYXRlPworICovCitzdGF0aWMgaW50IG1hdGNoX2RpZ2l0KGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCB0bSAqdG0sIGludCAqb2Zmc2V0LCBpbnQgKnRtX2dtdCkKK3sKKwlpbnQgbjsKKwljaGFyICplbmQ7CisJdW5zaWduZWQgbG9uZyBudW07CisKKwludW0gPSBzdHJ0b3VsKGRhdGUsICZlbmQsIDEwKTsKKworCS8qCisJICogU2Vjb25kcyBzaW5jZSAxOTcwPyBXZSB0cmlnZ2VyIG9uIHRoYXQgZm9yIGFueSBudW1iZXJzIHdpdGgKKwkgKiBtb3JlIHRoYW4gOCBkaWdpdHMuIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJ1bGUgb3V0CisJICogbnVtYmVycyBsaWtlIDIwMDcwNjA2IGFzIGEgWVlZWU1NREQgZGF0ZS4KKwkgKi8KKwlpZiAobnVtID49IDEwMDAwMDAwMCAmJiBub2RhdGUodG0pKSB7CisJCXRpbWVfdCB0aW1lID0gbnVtOworCQlpZiAoZ210aW1lX3IoJnRpbWUsIHRtKSkgeworCQkJKnRtX2dtdCA9IDE7CisJCQlyZXR1cm4gZW5kIC0gZGF0ZTsKKwkJfQorCX0KKworCS8qCisJICogQ2hlY2sgZm9yIHNwZWNpYWwgZm9ybWF0czogbnVtWy0uOi9dbnVtW3NhbWVdbnVtCisJICovCisJc3dpdGNoICgqZW5kKSB7CisJY2FzZSAnOic6CisJY2FzZSAnLic6CisJY2FzZSAnLyc6CisJY2FzZSAnLSc6CisJCWlmIChpc2RpZ2l0KGVuZFsxXSkpIHsKKwkJCWludCBtYXRjaCA9IG1hdGNoX211bHRpX251bWJlcihudW0sICplbmQsIGRhdGUsIGVuZCwgdG0pOworCQkJaWYgKG1hdGNoKQorCQkJCXJldHVybiBtYXRjaDsKKwkJfQorCX0KKworCS8qCisJICogTm9uZSBvZiB0aGUgc3BlY2lhbCBmb3JtYXRzPyBUcnkgdG8gZ3Vlc3Mgd2hhdAorCSAqIHRoZSBudW1iZXIgbWVhbnQuIFdlIHVzZSB0aGUgbnVtYmVyIG9mIGRpZ2l0cworCSAqIHRvIG1ha2UgYSBtb3JlIGVkdWNhdGVkIGd1ZXNzLi4KKwkgKi8KKwluID0gMDsKKwlkbyB7CisJCW4rKzsKKwl9IHdoaWxlIChpc2RpZ2l0KGRhdGVbbl0pKTsKKworCS8qIEZvdXItZGlnaXQgeWVhciBvciBhIHRpbWV6b25lPyAqLworCWlmIChuID09IDQpIHsKKwkJaWYgKG51bSA8PSAxNDAwICYmICpvZmZzZXQgPT0gLTEpIHsKKwkJCXVuc2lnbmVkIGludCBtaW51dGVzID0gbnVtICUgMTAwOworCQkJdW5zaWduZWQgaW50IGhvdXJzID0gbnVtIC8gMTAwOworCQkJKm9mZnNldCA9IGhvdXJzKjYwICsgbWludXRlczsKKwkJfSBlbHNlIGlmIChudW0gPiAxOTAwICYmIG51bSA8IDIxMDApCisJCQl0bS0+dG1feWVhciA9IG51bSAtIDE5MDA7CisJCXJldHVybiBuOworCX0KKworCS8qCisJICogSWdub3JlIGxvdHMgb2YgbnVtZXJhbHMuIFdlIHRvb2sgY2FyZSBvZiA0LWRpZ2l0IHllYXJzIGFib3ZlLgorCSAqIERheXMgb3IgbW9udGhzIG11c3QgYmUgb25lIG9yIHR3byBkaWdpdHMuCisJICovCisJaWYgKG4gPiAyKQorCQlyZXR1cm4gbjsKKworCS8qCisJICogTk9URSEgV2Ugd2lsbCBnaXZlIHByZWNlZGVuY2UgdG8gZGF5LW9mLW1vbnRoIG92ZXIgbW9udGggb3IKKwkgKiB5ZWFyIG51bWJlcnMgaW4gdGhlIDEtMTIgcmFuZ2UuIFNvIDA1IGlzIGFsd2F5cyAibWRheSA1IiwKKwkgKiB1bmxlc3Mgd2UgYWxyZWFkeSBoYXZlIGEgbWRheS4uCisJICoKKwkgKiBJT1csIDAxIEFwciAwNSBwYXJzZXMgYXMgIkFwcmlsIDFzdCwgMjAwNSIuCisJICovCisJaWYgKG51bSA+IDAgJiYgbnVtIDwgMzIgJiYgdG0tPnRtX21kYXkgPCAwKSB7CisJCXRtLT50bV9tZGF5ID0gbnVtOworCQlyZXR1cm4gbjsKKwl9CisKKwkvKiBUd28tZGlnaXQgeWVhcj8gKi8KKwlpZiAobiA9PSAyICYmIHRtLT50bV95ZWFyIDwgMCkgeworCQlpZiAobnVtIDwgMTAgJiYgdG0tPnRtX21kYXkgPj0gMCkgeworCQkJdG0tPnRtX3llYXIgPSBudW0gKyAxMDA7CisJCQlyZXR1cm4gbjsKKwkJfQorCQlpZiAobnVtID49IDcwKSB7CisJCQl0bS0+dG1feWVhciA9IG51bTsKKwkJCXJldHVybiBuOworCQl9CisJfQorCisJaWYgKG51bSA+IDAgJiYgbnVtIDwgMTMgJiYgdG0tPnRtX21vbiA8IDApCisJCXRtLT50bV9tb24gPSBudW0tMTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IG1hdGNoX3R6KGNvbnN0IGNoYXIgKmRhdGUsIGludCAqb2ZmcCkKK3sKKwljaGFyICplbmQ7CisJaW50IGhvdXIgPSBzdHJ0b3VsKGRhdGUgKyAxLCAmZW5kLCAxMCk7CisJaW50IG4gPSBlbmQgLSAoZGF0ZSArIDEpOworCWludCBtaW4gPSAwOworCisJaWYgKG4gPT0gNCkgeworCQkvKiBoaG1tICovCisJCW1pbiA9IGhvdXIgJSAxMDA7CisJCWhvdXIgPSBob3VyIC8gMTAwOworCX0gZWxzZSBpZiAobiAhPSAyKSB7CisJCW1pbiA9IDk5OyAvKiByYW5kb20gY3JhcCAqLworCX0gZWxzZSBpZiAoKmVuZCA9PSAnOicpIHsKKwkJLyogaGg6bW0/ICovCisJCW1pbiA9IHN0cnRvdWwoZW5kICsgMSwgJmVuZCwgMTApOworCQlpZiAoZW5kIC0gKGRhdGUgKyAxKSAhPSA1KQorCQkJbWluID0gOTk7IC8qIHJhbmRvbSBjcmFwICovCisJfSAvKiBvdGhlcndpc2Ugd2UgcGFyc2VkICJoaCIgKi8KKworCS8qCisJICogRG9uJ3QgYWNjZXB0IGFueSByYW5kb20gY3JhcC4gRXZlbiB0aG91Z2ggc29tZSBwbGFjZXMgaGF2ZQorCSAqIG9mZnNldCBsYXJnZXIgdGhhbiAxMiBob3VycyAoZS5nLiBQYWNpZmljL0tpcml0aW1hdGkgaXMgYXQKKwkgKiBVVEMrMTQpLCB0aGVyZSBpcyBzb21ldGhpbmcgd3JvbmcgaWYgaG91ciBwYXJ0IGlzIG11Y2gKKwkgKiBsYXJnZXIgdGhhbiB0aGF0LiBXZSBtaWdodCBhbHNvIHdhbnQgdG8gY2hlY2sgdGhhdCB0aGUKKwkgKiBtaW51dGVzIGFyZSBkaXZpc2libGUgYnkgMTUgb3Igc29tZXRoaW5nIHRvby4gKE9mZnNldCBvZgorCSAqIEthdGhtYW5kdSwgTmVwYWwgaXMgVVRDKzU6NDUpCisJICovCisJaWYgKG1pbiA8IDYwICYmIGhvdXIgPCAyNCkgeworCQlpbnQgb2Zmc2V0ID0gaG91ciAqIDYwICsgbWluOworCQlpZiAoKmRhdGUgPT0gJy0nKQorCQkJb2Zmc2V0ID0gLW9mZnNldDsKKwkJKm9mZnAgPSBvZmZzZXQ7CisJfQorCXJldHVybiBlbmQgLSBkYXRlOworfQorCitzdGF0aWMgaW50IGRhdGVfc3RyaW5nKHVuc2lnbmVkIGxvbmcgZGF0ZSwgaW50IG9mZnNldCwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBzaWduID0gJysnOworCisJaWYgKG9mZnNldCA8IDApIHsKKwkJb2Zmc2V0ID0gLW9mZnNldDsKKwkJc2lnbiA9ICctJzsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgbGVuLCAiJWx1ICVjJTAyZCUwMmQiLCBkYXRlLCBzaWduLCBvZmZzZXQgLyA2MCwgb2Zmc2V0ICUgNjApOworfQorCisvKgorICogUGFyc2UgYSBzdHJpbmcgbGlrZSAiMCArMDAwMCIgYXMgYW5jaWVudCB0aW1lc3RhbXAgbmVhciBlcG9jaCwgYnV0CisgKiBvbmx5IHdoZW4gaXQgYXBwZWFycyBub3QgYXMgcGFydCBvZiBhbnkgb3RoZXIgc3RyaW5nLgorICovCitzdGF0aWMgaW50IG1hdGNoX29iamVjdF9oZWFkZXJfZGF0ZShjb25zdCBjaGFyICpkYXRlLCB1bnNpZ25lZCBsb25nICp0aW1lc3RhbXAsIGludCAqb2Zmc2V0KQoreworCWNoYXIgKmVuZDsKKwl1bnNpZ25lZCBsb25nIHN0YW1wOworCWludCBvZnM7CisKKwlpZiAoKmRhdGUgPCAnMCcgfHwgJzknIDwgKmRhdGUpCisJCXJldHVybiAtMTsKKwlzdGFtcCA9IHN0cnRvdWwoZGF0ZSwgJmVuZCwgMTApOworCWlmICgqZW5kICE9ICcgJyB8fCBzdGFtcCA9PSBVTE9OR19NQVggfHwgKGVuZFsxXSAhPSAnKycgJiYgZW5kWzFdICE9ICctJykpCisJCXJldHVybiAtMTsKKwlkYXRlID0gZW5kICsgMjsKKwlvZnMgPSBzdHJ0b2woZGF0ZSwgJmVuZCwgMTApOworCWlmICgoKmVuZCAhPSAnXDAnICYmICgqZW5kICE9ICdcbicpKSB8fCBlbmQgIT0gZGF0ZSArIDQpCisJCXJldHVybiAtMTsKKwlvZnMgPSAob2ZzIC8gMTAwKSAqIDYwICsgKG9mcyAlIDEwMCk7CisJaWYgKGRhdGVbLTFdID09ICctJykKKwkJb2ZzID0gLW9mczsKKwkqdGltZXN0YW1wID0gc3RhbXA7CisJKm9mZnNldCA9IG9mczsKKwlyZXR1cm4gMDsKK30KKworLyogR3IuIHN0cnB0aW1lIGlzIGNyYXAgZm9yIHRoaXM7IGl0IGRvZXNuJ3QgaGF2ZSBhIHdheSB0byByZXF1aXJlIFJGQzI4MjIKKyAgIChpLmUuIEVuZ2xpc2gpIGRheS9tb250aCBuYW1lcywgYW5kIGl0IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCAlei4gKi8KK2ludCBwYXJzZV9kYXRlX2Jhc2ljKGNvbnN0IGNoYXIgKmRhdGUsIHVuc2lnbmVkIGxvbmcgKnRpbWVzdGFtcCwgaW50ICpvZmZzZXQpCit7CisJc3RydWN0IHRtIHRtOworCWludCB0bV9nbXQ7CisJdW5zaWduZWQgbG9uZyBkdW1teV90aW1lc3RhbXA7CisJaW50IGR1bW15X29mZnNldDsKKworCWlmICghdGltZXN0YW1wKQorCQl0aW1lc3RhbXAgPSAmZHVtbXlfdGltZXN0YW1wOworCWlmICghb2Zmc2V0KQorCQlvZmZzZXQgPSAmZHVtbXlfb2Zmc2V0OworCisJbWVtc2V0KCZ0bSwgMCwgc2l6ZW9mKHRtKSk7CisJdG0udG1feWVhciA9IC0xOworCXRtLnRtX21vbiA9IC0xOworCXRtLnRtX21kYXkgPSAtMTsKKwl0bS50bV9pc2RzdCA9IC0xOworCXRtLnRtX2hvdXIgPSAtMTsKKwl0bS50bV9taW4gPSAtMTsKKwl0bS50bV9zZWMgPSAtMTsKKwkqb2Zmc2V0ID0gLTE7CisJdG1fZ210ID0gMDsKKworCWlmICgqZGF0ZSA9PSAnQCcgJiYKKwkgICAgIW1hdGNoX29iamVjdF9oZWFkZXJfZGF0ZShkYXRlICsgMSwgdGltZXN0YW1wLCBvZmZzZXQpKQorCQlyZXR1cm4gMDsgLyogc3VjY2VzcyAqLworCWZvciAoOzspIHsKKwkJaW50IG1hdGNoID0gMDsKKwkJdW5zaWduZWQgY2hhciBjID0gKmRhdGU7CisKKwkJLyogU3RvcCBhdCBlbmQgb2Ygc3RyaW5nIG9yIG5ld2xpbmUgKi8KKwkJaWYgKCFjIHx8IGMgPT0gJ1xuJykKKwkJCWJyZWFrOworCisJCWlmIChpc2FscGhhKGMpKQorCQkJbWF0Y2ggPSBtYXRjaF9hbHBoYShkYXRlLCAmdG0sIG9mZnNldCk7CisJCWVsc2UgaWYgKGlzZGlnaXQoYykpCisJCQltYXRjaCA9IG1hdGNoX2RpZ2l0KGRhdGUsICZ0bSwgb2Zmc2V0LCAmdG1fZ210KTsKKwkJZWxzZSBpZiAoKGMgPT0gJy0nIHx8IGMgPT0gJysnKSAmJiBpc2RpZ2l0KGRhdGVbMV0pKQorCQkJbWF0Y2ggPSBtYXRjaF90eihkYXRlLCBvZmZzZXQpOworCisJCWlmICghbWF0Y2gpIHsKKwkJCS8qIEJBRCBDUkFQICovCisJCQltYXRjaCA9IDE7CisJCX0KKworCQlkYXRlICs9IG1hdGNoOworCX0KKworCS8qIG1rdGltZSB1c2VzIGxvY2FsIHRpbWV6b25lICovCisJKnRpbWVzdGFtcCA9IHRtX3RvX3RpbWVfdCgmdG0pOworCWlmICgqb2Zmc2V0ID09IC0xKQorCQkqb2Zmc2V0ID0gKCh0aW1lX3QpKnRpbWVzdGFtcCAtIG1rdGltZSgmdG0pKSAvIDYwOworCisJaWYgKCp0aW1lc3RhbXAgPT0gLTEpCisJCXJldHVybiAtMTsKKworCWlmICghdG1fZ210KQorCQkqdGltZXN0YW1wIC09ICpvZmZzZXQgKiA2MDsKKwlyZXR1cm4gMDsgLyogc3VjY2VzcyAqLworfQorCitpbnQgcGFyc2VfZGF0ZShjb25zdCBjaGFyICpkYXRlLCBjaGFyICpyZXN1bHQsIGludCBtYXhsZW4pCit7CisJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CisJaW50IG9mZnNldDsKKwlpZiAocGFyc2VfZGF0ZV9iYXNpYyhkYXRlLCAmdGltZXN0YW1wLCAmb2Zmc2V0KSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBkYXRlX3N0cmluZyh0aW1lc3RhbXAsIG9mZnNldCwgcmVzdWx0LCBtYXhsZW4pOworfQorCitlbnVtIGRhdGVfbW9kZSBwYXJzZV9kYXRlX2Zvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJaWYgKCFzdHJjbXAoZm9ybWF0LCAicmVsYXRpdmUiKSkKKwkJcmV0dXJuIERBVEVfUkVMQVRJVkU7CisJZWxzZSBpZiAoIXN0cmNtcChmb3JtYXQsICJpc284NjAxIikgfHwKKwkJICFzdHJjbXAoZm9ybWF0LCAiaXNvIikpCisJCXJldHVybiBEQVRFX0lTTzg2MDE7CisJZWxzZSBpZiAoIXN0cmNtcChmb3JtYXQsICJyZmMyODIyIikgfHwKKwkJICFzdHJjbXAoZm9ybWF0LCAicmZjIikpCisJCXJldHVybiBEQVRFX1JGQzI4MjI7CisJZWxzZSBpZiAoIXN0cmNtcChmb3JtYXQsICJzaG9ydCIpKQorCQlyZXR1cm4gREFURV9TSE9SVDsKKwllbHNlIGlmICghc3RyY21wKGZvcm1hdCwgImxvY2FsIikpCisJCXJldHVybiBEQVRFX0xPQ0FMOworCWVsc2UgaWYgKCFzdHJjbXAoZm9ybWF0LCAiZGVmYXVsdCIpKQorCQlyZXR1cm4gREFURV9OT1JNQUw7CisJZWxzZSBpZiAoIXN0cmNtcChmb3JtYXQsICJyYXciKSkKKwkJcmV0dXJuIERBVEVfUkFXOworCWVsc2UKKwkJZGllKCJ1bmtub3duIGRhdGUgZm9ybWF0ICVzIiwgZm9ybWF0KTsKK30KKwordm9pZCBkYXRlc3RhbXAoY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKK3sKKwl0aW1lX3Qgbm93OworCWludCBvZmZzZXQ7CisKKwl0aW1lKCZub3cpOworCisJb2Zmc2V0ID0gdG1fdG9fdGltZV90KGxvY2FsdGltZSgmbm93KSkgLSBub3c7CisJb2Zmc2V0IC89IDYwOworCisJZGF0ZV9zdHJpbmcobm93LCBvZmZzZXQsIGJ1ZiwgYnVmc2l6ZSk7Cit9CisKKy8qCisgKiBSZWxhdGl2ZSB0aW1lIHVwZGF0ZSAoZWcgIjIgZGF5cyBhZ28iKS4gIElmIHdlIGhhdmVuJ3Qgc2V0IHRoZSB0aW1lCisgKiB5ZXQsIHdlIG5lZWQgdG8gc2V0IGl0IGZyb20gY3VycmVudCB0aW1lLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1cGRhdGVfdG0oc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIHVuc2lnbmVkIGxvbmcgc2VjKQoreworCXRpbWVfdCBuOworCisJaWYgKHRtLT50bV9tZGF5IDwgMCkKKwkJdG0tPnRtX21kYXkgPSBub3ctPnRtX21kYXk7CisJaWYgKHRtLT50bV9tb24gPCAwKQorCQl0bS0+dG1fbW9uID0gbm93LT50bV9tb247CisJaWYgKHRtLT50bV95ZWFyIDwgMCkgeworCQl0bS0+dG1feWVhciA9IG5vdy0+dG1feWVhcjsKKwkJaWYgKHRtLT50bV9tb24gPiBub3ctPnRtX21vbikKKwkJCXRtLT50bV95ZWFyLS07CisJfQorCisJbiA9IG1rdGltZSh0bSkgLSBzZWM7CisJbG9jYWx0aW1lX3IoJm4sIHRtKTsKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgZGF0ZV9ub3coc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCXVwZGF0ZV90bSh0bSwgbm93LCAwKTsKK30KKworc3RhdGljIHZvaWQgZGF0ZV95ZXN0ZXJkYXkoc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCXVwZGF0ZV90bSh0bSwgbm93LCAyNCo2MCo2MCk7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfdGltZShzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50IGhvdXIpCit7CisJaWYgKHRtLT50bV9ob3VyIDwgaG91cikKKwkJZGF0ZV95ZXN0ZXJkYXkodG0sIG5vdywgTlVMTCk7CisJdG0tPnRtX2hvdXIgPSBob3VyOworCXRtLT50bV9taW4gPSAwOworCXRtLT50bV9zZWMgPSAwOworfQorCitzdGF0aWMgdm9pZCBkYXRlX21pZG5pZ2h0KHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSkKK3sKKwlkYXRlX3RpbWUodG0sIG5vdywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfbm9vbihzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCit7CisJZGF0ZV90aW1lKHRtLCBub3csIDEyKTsKK30KKworc3RhdGljIHZvaWQgZGF0ZV90ZWEoc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCWRhdGVfdGltZSh0bSwgbm93LCAxNyk7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfcG0oc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCWludCBob3VyLCBuID0gKm51bTsKKwkqbnVtID0gMDsKKworCWhvdXIgPSB0bS0+dG1faG91cjsKKwlpZiAobikgeworCQlob3VyID0gbjsKKwkJdG0tPnRtX21pbiA9IDA7CisJCXRtLT50bV9zZWMgPSAwOworCX0KKwl0bS0+dG1faG91ciA9IChob3VyICUgMTIpICsgMTI7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfYW0oc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCWludCBob3VyLCBuID0gKm51bTsKKwkqbnVtID0gMDsKKworCWhvdXIgPSB0bS0+dG1faG91cjsKKwlpZiAobikgeworCQlob3VyID0gbjsKKwkJdG0tPnRtX21pbiA9IDA7CisJCXRtLT50bV9zZWMgPSAwOworCX0KKwl0bS0+dG1faG91ciA9IChob3VyICUgMTIpOworfQorCitzdGF0aWMgdm9pZCBkYXRlX25ldmVyKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSkKK3sKKwl0aW1lX3QgbiA9IDA7CisJbG9jYWx0aW1lX3IoJm4sIHRtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGVjaWFsIHsKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQgKCpmbikoc3RydWN0IHRtICosIHN0cnVjdCB0bSAqLCBpbnQgKik7Cit9IHNwZWNpYWxbXSA9IHsKKwl7ICJ5ZXN0ZXJkYXkiLCBkYXRlX3llc3RlcmRheSB9LAorCXsgIm5vb24iLCBkYXRlX25vb24gfSwKKwl7ICJtaWRuaWdodCIsIGRhdGVfbWlkbmlnaHQgfSwKKwl7ICJ0ZWEiLCBkYXRlX3RlYSB9LAorCXsgIlBNIiwgZGF0ZV9wbSB9LAorCXsgIkFNIiwgZGF0ZV9hbSB9LAorCXsgIm5ldmVyIiwgZGF0ZV9uZXZlciB9LAorCXsgIm5vdyIsIGRhdGVfbm93IH0sCisJeyBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpudW1iZXJfbmFtZVtdID0geworCSJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsCisJImZpdmUiLCAic2l4IiwgInNldmVuIiwgImVpZ2h0IiwgIm5pbmUiLCAidGVuIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHlwZWxlbiB7CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgbGVuZ3RoOworfSB0eXBlbGVuW10gPSB7CisJeyAic2Vjb25kcyIsIDEgfSwKKwl7ICJtaW51dGVzIiwgNjAgfSwKKwl7ICJob3VycyIsIDYwKjYwIH0sCisJeyAiZGF5cyIsIDI0KjYwKjYwIH0sCisJeyAid2Vla3MiLCA3KjI0KjYwKjYwIH0sCisJeyBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICphcHByb3hpZGF0ZV9hbHBoYShjb25zdCBjaGFyICpkYXRlLCBzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0sIGludCAqdG91Y2hlZCkKK3sKKwljb25zdCBzdHJ1Y3QgdHlwZWxlbiAqdGw7CisJY29uc3Qgc3RydWN0IHNwZWNpYWwgKnM7CisJY29uc3QgY2hhciAqZW5kID0gZGF0ZTsKKwlpbnQgaTsKKworCXdoaWxlIChpc2FscGhhKCorK2VuZCkpOworCQk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgbW9udGhfbmFtZXNbaV0pOworCQlpZiAobWF0Y2ggPj0gMykgeworCQkJdG0tPnRtX21vbiA9IGk7CisJCQkqdG91Y2hlZCA9IDE7CisJCQlyZXR1cm4gZW5kOworCQl9CisJfQorCisJZm9yIChzID0gc3BlY2lhbDsgcy0+bmFtZTsgcysrKSB7CisJCWludCBsZW4gPSBzdHJsZW4ocy0+bmFtZSk7CisJCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgcy0+bmFtZSkgPT0gbGVuKSB7CisJCQlzLT5mbih0bSwgbm93LCBudW0pOworCQkJKnRvdWNoZWQgPSAxOworCQkJcmV0dXJuIGVuZDsKKwkJfQorCX0KKworCWlmICghKm51bSkgeworCQlmb3IgKGkgPSAxOyBpIDwgMTE7IGkrKykgeworCQkJaW50IGxlbiA9IHN0cmxlbihudW1iZXJfbmFtZVtpXSk7CisJCQlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsIG51bWJlcl9uYW1lW2ldKSA9PSBsZW4pIHsKKwkJCQkqbnVtID0gaTsKKwkJCQkqdG91Y2hlZCA9IDE7CisJCQkJcmV0dXJuIGVuZDsKKwkJCX0KKwkJfQorCQlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsICJsYXN0IikgPT0gNCkgeworCQkJKm51bSA9IDE7CisJCQkqdG91Y2hlZCA9IDE7CisJCX0KKwkJcmV0dXJuIGVuZDsKKwl9CisKKwl0bCA9IHR5cGVsZW47CisJd2hpbGUgKHRsLT50eXBlKSB7CisJCWludCBsZW4gPSBzdHJsZW4odGwtPnR5cGUpOworCQlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsIHRsLT50eXBlKSA+PSBsZW4tMSkgeworCQkJdXBkYXRlX3RtKHRtLCBub3csIHRsLT5sZW5ndGggKiAqbnVtKTsKKwkJCSpudW0gPSAwOworCQkJKnRvdWNoZWQgPSAxOworCQkJcmV0dXJuIGVuZDsKKwkJfQorCQl0bCsrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJaW50IG1hdGNoID0gbWF0Y2hfc3RyaW5nKGRhdGUsIHdlZWtkYXlfbmFtZXNbaV0pOworCQlpZiAobWF0Y2ggPj0gMykgeworCQkJaW50IGRpZmYsIG4gPSAqbnVtIC0xOworCQkJKm51bSA9IDA7CisKKwkJCWRpZmYgPSB0bS0+dG1fd2RheSAtIGk7CisJCQlpZiAoZGlmZiA8PSAwKQorCQkJCW4rKzsKKwkJCWRpZmYgKz0gNypuOworCisJCQl1cGRhdGVfdG0odG0sIG5vdywgZGlmZiAqIDI0ICogNjAgKiA2MCk7CisJCQkqdG91Y2hlZCA9IDE7CisJCQlyZXR1cm4gZW5kOworCQl9CisJfQorCisJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCAibW9udGhzIikgPj0gNSkgeworCQlpbnQgbjsKKwkJdXBkYXRlX3RtKHRtLCBub3csIDApOyAvKiBmaWxsIGluIGRhdGUgZmllbGRzIGlmIG5lZWRlZCAqLworCQluID0gdG0tPnRtX21vbiAtICpudW07CisJCSpudW0gPSAwOworCQl3aGlsZSAobiA8IDApIHsKKwkJCW4gKz0gMTI7CisJCQl0bS0+dG1feWVhci0tOworCQl9CisJCXRtLT50bV9tb24gPSBuOworCQkqdG91Y2hlZCA9IDE7CisJCXJldHVybiBlbmQ7CisJfQorCisJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCAieWVhcnMiKSA+PSA0KSB7CisJCXVwZGF0ZV90bSh0bSwgbm93LCAwKTsgLyogZmlsbCBpbiBkYXRlIGZpZWxkcyBpZiBuZWVkZWQgKi8KKwkJdG0tPnRtX3llYXIgLT0gKm51bTsKKwkJKm51bSA9IDA7CisJCSp0b3VjaGVkID0gMTsKKwkJcmV0dXJuIGVuZDsKKwl9CisKKwlyZXR1cm4gZW5kOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYXBwcm94aWRhdGVfZGlnaXQoY29uc3QgY2hhciAqZGF0ZSwgc3RydWN0IHRtICp0bSwgaW50ICpudW0pCit7CisJY2hhciAqZW5kOworCXVuc2lnbmVkIGxvbmcgbnVtYmVyID0gc3RydG91bChkYXRlLCAmZW5kLCAxMCk7CisKKwlzd2l0Y2ggKCplbmQpIHsKKwljYXNlICc6JzoKKwljYXNlICcuJzoKKwljYXNlICcvJzoKKwljYXNlICctJzoKKwkJaWYgKGlzZGlnaXQoZW5kWzFdKSkgeworCQkJaW50IG1hdGNoID0gbWF0Y2hfbXVsdGlfbnVtYmVyKG51bWJlciwgKmVuZCwgZGF0ZSwgZW5kLCB0bSk7CisJCQlpZiAobWF0Y2gpCisJCQkJcmV0dXJuIGRhdGUgKyBtYXRjaDsKKwkJfQorCX0KKworCS8qIEFjY2VwdCB6ZXJvLXBhZGRpbmcgb25seSBmb3Igc21hbGwgbnVtYmVycyAoIkRlYyAwMiIsIG5ldmVyICJEZWMgMDAwMiIpICovCisJaWYgKGRhdGVbMF0gIT0gJzAnIHx8IGVuZCAtIGRhdGUgPD0gMikKKwkJKm51bSA9IG51bWJlcjsKKwlyZXR1cm4gZW5kOworfQorCisvKgorICogRG8gd2UgaGF2ZSBhIHBlbmRpbmcgbnVtYmVyIGF0IHRoZSBlbmQsIG9yIHdoZW4KKyAqIHdlIHNlZSBhIG5ldyBvbmU/IExldCdzIGFzc3VtZSBpdCdzIGEgbW9udGggZGF5LAorICogYXMgaW4gIkRlYyA2LCAxOTkyIgorICovCitzdGF0aWMgdm9pZCBwZW5kaW5nX251bWJlcihzdHJ1Y3QgdG0gKnRtLCBpbnQgKm51bSkKK3sKKwlpbnQgbnVtYmVyID0gKm51bTsKKworCWlmIChudW1iZXIpIHsKKwkJKm51bSA9IDA7CisJCWlmICh0bS0+dG1fbWRheSA8IDAgJiYgbnVtYmVyIDwgMzIpCisJCQl0bS0+dG1fbWRheSA9IG51bWJlcjsKKwkJZWxzZSBpZiAodG0tPnRtX21vbiA8IDAgJiYgbnVtYmVyIDwgMTMpCisJCQl0bS0+dG1fbW9uID0gbnVtYmVyLTE7CisJCWVsc2UgaWYgKHRtLT50bV95ZWFyIDwgMCkgeworCQkJaWYgKG51bWJlciA+IDE5NjkgJiYgbnVtYmVyIDwgMjEwMCkKKwkJCQl0bS0+dG1feWVhciA9IG51bWJlciAtIDE5MDA7CisJCQllbHNlIGlmIChudW1iZXIgPiA2OSAmJiBudW1iZXIgPCAxMDApCisJCQkJdG0tPnRtX3llYXIgPSBudW1iZXI7CisJCQllbHNlIGlmIChudW1iZXIgPCAzOCkKKwkJCQl0bS0+dG1feWVhciA9IDEwMCArIG51bWJlcjsKKwkJCS8qIFdlIHNjcmV3IHVwIGZvciBudW1iZXIgPSAwMCA/ICovCisJCX0KKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFwcHJveGlkYXRlX3N0cihjb25zdCBjaGFyICpkYXRlLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2LAorCQkJCSAgICAgaW50ICplcnJvcl9yZXQpCit7CisJaW50IG51bWJlciA9IDA7CisJaW50IHRvdWNoZWQgPSAwOworCXN0cnVjdCB0bSB0bSwgbm93OworCXRpbWVfdCB0aW1lX3NlYzsKKworCXRpbWVfc2VjID0gdHYtPnR2X3NlYzsKKwlsb2NhbHRpbWVfcigmdGltZV9zZWMsICZ0bSk7CisJbm93ID0gdG07CisKKwl0bS50bV95ZWFyID0gLTE7CisJdG0udG1fbW9uID0gLTE7CisJdG0udG1fbWRheSA9IC0xOworCisJZm9yICg7OykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSAqZGF0ZTsKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisJCWRhdGUrKzsKKwkJaWYgKGlzZGlnaXQoYykpIHsKKwkJCXBlbmRpbmdfbnVtYmVyKCZ0bSwgJm51bWJlcik7CisJCQlkYXRlID0gYXBwcm94aWRhdGVfZGlnaXQoZGF0ZS0xLCAmdG0sICZudW1iZXIpOworCQkJdG91Y2hlZCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoaXNhbHBoYShjKSkKKwkJCWRhdGUgPSBhcHByb3hpZGF0ZV9hbHBoYShkYXRlLTEsICZ0bSwgJm5vdywgJm51bWJlciwgJnRvdWNoZWQpOworCX0KKwlwZW5kaW5nX251bWJlcigmdG0sICZudW1iZXIpOworCWlmICghdG91Y2hlZCkKKwkJKmVycm9yX3JldCA9IDE7CisJcmV0dXJuIHVwZGF0ZV90bSgmdG0sICZub3csIDApOworfQorCit1bnNpZ25lZCBsb25nIGFwcHJveGlkYXRlX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmRhdGUsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0dikKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKKwlpbnQgb2Zmc2V0OworCWludCBlcnJvcnMgPSAwOworCisJaWYgKCFwYXJzZV9kYXRlX2Jhc2ljKGRhdGUsICZ0aW1lc3RhbXAsICZvZmZzZXQpKQorCQlyZXR1cm4gdGltZXN0YW1wOworCXJldHVybiBhcHByb3hpZGF0ZV9zdHIoZGF0ZSwgdHYsICZlcnJvcnMpOworfQorCit1bnNpZ25lZCBsb25nIGFwcHJveGlkYXRlX2NhcmVmdWwoY29uc3QgY2hhciAqZGF0ZSwgaW50ICplcnJvcl9yZXQpCit7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CisJaW50IG9mZnNldDsKKwlpbnQgZHVtbXkgPSAwOworCWlmICghZXJyb3JfcmV0KQorCQllcnJvcl9yZXQgPSAmZHVtbXk7CisKKwlpZiAoIXBhcnNlX2RhdGVfYmFzaWMoZGF0ZSwgJnRpbWVzdGFtcCwgJm9mZnNldCkpIHsKKwkJKmVycm9yX3JldCA9IDA7CisJCXJldHVybiB0aW1lc3RhbXA7CisJfQorCisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJcmV0dXJuIGFwcHJveGlkYXRlX3N0cihkYXRlLCAmdHYsIGVycm9yX3JldCk7Cit9CmRpZmYgLS1naXQgYS9kZWNvcmF0ZS5jIGIvZGVjb3JhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjhhNjNlCi0tLSAvZGV2L251bGwKKysrIGIvZGVjb3JhdGUuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogZGVjb3JhdGUuYyAtIGRlY29yYXRlIGEgZ2l0IG9iamVjdCB3aXRoIHNvbWUgYXJiaXRyYXJ5CisgKiBkYXRhLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGhhc2hfb2JqKGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaiwgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgaW50IGhhc2g7CisKKwltZW1jcHkoJmhhc2gsIG9iai0+c2hhMSwgc2l6ZW9mKHVuc2lnbmVkIGludCkpOworCXJldHVybiBoYXNoICUgbjsKK30KKworc3RhdGljIHZvaWQgKmluc2VydF9kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpiYXNlLCB2b2lkICpkZWNvcmF0aW9uKQoreworCWludCBzaXplID0gbi0+c2l6ZTsKKwlzdHJ1Y3Qgb2JqZWN0X2RlY29yYXRpb24gKmhhc2ggPSBuLT5oYXNoOworCXVuc2lnbmVkIGludCBqID0gaGFzaF9vYmooYmFzZSwgc2l6ZSk7CisKKwl3aGlsZSAoaGFzaFtqXS5iYXNlKSB7CisJCWlmIChoYXNoW2pdLmJhc2UgPT0gYmFzZSkgeworCQkJdm9pZCAqb2xkID0gaGFzaFtqXS5kZWNvcmF0aW9uOworCQkJaGFzaFtqXS5kZWNvcmF0aW9uID0gZGVjb3JhdGlvbjsKKwkJCXJldHVybiBvbGQ7CisJCX0KKwkJaWYgKCsraiA+PSBzaXplKQorCQkJaiA9IDA7CisJfQorCWhhc2hbal0uYmFzZSA9IGJhc2U7CisJaGFzaFtqXS5kZWNvcmF0aW9uID0gZGVjb3JhdGlvbjsKKwluLT5ucisrOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBncm93X2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4pCit7CisJaW50IGk7CisJaW50IG9sZF9zaXplID0gbi0+c2l6ZTsKKwlzdHJ1Y3Qgb2JqZWN0X2RlY29yYXRpb24gKm9sZF9oYXNoID0gbi0+aGFzaDsKKworCW4tPnNpemUgPSAob2xkX3NpemUgKyAxMDAwKSAqIDMgLyAyOworCW4tPmhhc2ggPSB4Y2FsbG9jKG4tPnNpemUsIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2RlY29yYXRpb24pKTsKKwluLT5uciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgb2xkX3NpemU7IGkrKykgeworCQljb25zdCBzdHJ1Y3Qgb2JqZWN0ICpiYXNlID0gb2xkX2hhc2hbaV0uYmFzZTsKKwkJdm9pZCAqZGVjb3JhdGlvbiA9IG9sZF9oYXNoW2ldLmRlY29yYXRpb247CisKKwkJaWYgKCFiYXNlKQorCQkJY29udGludWU7CisJCWluc2VydF9kZWNvcmF0aW9uKG4sIGJhc2UsIGRlY29yYXRpb24pOworCX0KKwlmcmVlKG9sZF9oYXNoKTsKK30KKworLyogQWRkIGEgZGVjb3JhdGlvbiBwb2ludGVyLCByZXR1cm4gYW55IG9sZCBvbmUgKi8KK3ZvaWQgKmFkZF9kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCXZvaWQgKmRlY29yYXRpb24pCit7CisJaW50IG5yID0gbi0+bnIgKyAxOworCisJaWYgKG5yID4gbi0+c2l6ZSAqIDIgLyAzKQorCQlncm93X2RlY29yYXRpb24obik7CisJcmV0dXJuIGluc2VydF9kZWNvcmF0aW9uKG4sIG9iaiwgZGVjb3JhdGlvbik7Cit9CisKKy8qIExvb2t1cCBhIGRlY29yYXRpb24gcG9pbnRlciAqLwordm9pZCAqbG9va3VwX2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwl1bnNpZ25lZCBpbnQgajsKKworCS8qIG5vdGhpbmcgdG8gbG9va3VwICovCisJaWYgKCFuLT5zaXplKQorCQlyZXR1cm4gTlVMTDsKKwlqID0gaGFzaF9vYmoob2JqLCBuLT5zaXplKTsKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBvYmplY3RfZGVjb3JhdGlvbiAqcmVmID0gbi0+aGFzaCArIGo7CisJCWlmIChyZWYtPmJhc2UgPT0gb2JqKQorCQkJcmV0dXJuIHJlZi0+ZGVjb3JhdGlvbjsKKwkJaWYgKCFyZWYtPmJhc2UpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCsraiA9PSBuLT5zaXplKQorCQkJaiA9IDA7CisJfQorfQpkaWZmIC0tZ2l0IGEvZGVjb3JhdGUuaCBiL2RlY29yYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczMjgwNAotLS0gL2Rldi9udWxsCisrKyBiL2RlY29yYXRlLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBERUNPUkFURV9ICisjZGVmaW5lIERFQ09SQVRFX0gKKworc3RydWN0IG9iamVjdF9kZWNvcmF0aW9uIHsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0ICpiYXNlOworCXZvaWQgKmRlY29yYXRpb247Cit9OworCitzdHJ1Y3QgZGVjb3JhdGlvbiB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgbnI7CisJc3RydWN0IG9iamVjdF9kZWNvcmF0aW9uICpoYXNoOworfTsKKworZXh0ZXJuIHZvaWQgKmFkZF9kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmRlY29yYXRpb24pOworZXh0ZXJuIHZvaWQgKmxvb2t1cF9kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RlbHRhLmggYi9kZWx0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDMzM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kZWx0YS5oCkBAIC0wLDAgKzEsMTA0IEBACisjaWZuZGVmIERFTFRBX0gKKyNkZWZpbmUgREVMVEFfSAorCisvKiBvcGFxdWUgb2JqZWN0IGZvciBkZWx0YSBpbmRleCAqLworc3RydWN0IGRlbHRhX2luZGV4OworCisvKgorICogY3JlYXRlX2RlbHRhX2luZGV4OiBjb21wdXRlIGluZGV4IGRhdGEgZnJvbSBnaXZlbiBidWZmZXIKKyAqCisgKiBUaGlzIHJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGRlbHRhX2luZGV4IHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0bworICogc3Vic2VxdWVudCBjcmVhdGVfZGVsdGEoKSBjYWxscywgb3IgdG8gZnJlZV9kZWx0YV9pbmRleCgpLiAgQSBOVUxMIHBvaW50ZXIKKyAqIGlzIHJldHVybmVkIG9uIGZhaWx1cmUuICBUaGUgZ2l2ZW4gYnVmZmVyIG11c3Qgbm90IGJlIGZyZWVkIG5vciBhbHRlcmVkCisgKiBiZWZvcmUgZnJlZV9kZWx0YV9pbmRleCgpIGlzIGNhbGxlZC4gIFRoZSByZXR1cm5lZCBwb2ludGVyIG11c3QgYmUgZnJlZWQKKyAqIHVzaW5nIGZyZWVfZGVsdGFfaW5kZXgoKS4KKyAqLworZXh0ZXJuIHN0cnVjdCBkZWx0YV9pbmRleCAqCitjcmVhdGVfZGVsdGFfaW5kZXgoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGJ1ZnNpemUpOworCisvKgorICogZnJlZV9kZWx0YV9pbmRleDogZnJlZSB0aGUgaW5kZXggY3JlYXRlZCBieSBjcmVhdGVfZGVsdGFfaW5kZXgoKQorICoKKyAqIEdpdmVuIHBvaW50ZXIgbXVzdCBiZSB3aGF0IGNyZWF0ZV9kZWx0YV9pbmRleCgpIHJldHVybmVkLCBvciBOVUxMLgorICovCitleHRlcm4gdm9pZCBmcmVlX2RlbHRhX2luZGV4KHN0cnVjdCBkZWx0YV9pbmRleCAqaW5kZXgpOworCisvKgorICogc2l6ZW9mX2RlbHRhX2luZGV4OiByZXR1cm5zIG1lbW9yeSB1c2FnZSBvZiBkZWx0YSBpbmRleAorICoKKyAqIEdpdmVuIHBvaW50ZXIgbXVzdCBiZSB3aGF0IGNyZWF0ZV9kZWx0YV9pbmRleCgpIHJldHVybmVkLCBvciBOVUxMLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBzaXplb2ZfZGVsdGFfaW5kZXgoc3RydWN0IGRlbHRhX2luZGV4ICppbmRleCk7CisKKy8qCisgKiBjcmVhdGVfZGVsdGE6IGNyZWF0ZSBhIGRlbHRhIGZyb20gZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgYnVmZmVycyB1c2luZworICogdGhlIHNhbWUgZGVsdGFfaW5kZXggcG9pbnRlci4gIElmIG1heF9kZWx0YV9zaXplIGlzIG5vbi16ZXJvIGFuZCB0aGUKKyAqIHJlc3VsdGluZyBkZWx0YSBpcyB0byBiZSBsYXJnZXIgdGhhbiBtYXhfZGVsdGFfc2l6ZSB0aGVuIE5VTEwgaXMgcmV0dXJuZWQuCisgKiBPbiBzdWNjZXNzLCBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aXRoIHRoZSBkZWx0YSBkYXRhIGlzCisgKiByZXR1cm5lZCBhbmQgKmRlbHRhX3NpemUgaXMgdXBkYXRlZCB3aXRoIGl0cyBzaXplLiAgVGhlIHJldHVybmVkIGJ1ZmZlcgorICogbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgorICovCitleHRlcm4gdm9pZCAqCitjcmVhdGVfZGVsdGEoY29uc3Qgc3RydWN0IGRlbHRhX2luZGV4ICppbmRleCwKKwkgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBidWZzaXplLAorCSAgICAgdW5zaWduZWQgbG9uZyAqZGVsdGFfc2l6ZSwgdW5zaWduZWQgbG9uZyBtYXhfZGVsdGFfc2l6ZSk7CisKKy8qCisgKiBkaWZmX2RlbHRhOiBjcmVhdGUgYSBkZWx0YSBmcm9tIHNvdXJjZSBidWZmZXIgdG8gdGFyZ2V0IGJ1ZmZlcgorICoKKyAqIElmIG1heF9kZWx0YV9zaXplIGlzIG5vbi16ZXJvIGFuZCB0aGUgcmVzdWx0aW5nIGRlbHRhIGlzIHRvIGJlIGxhcmdlcgorICogdGhhbiBtYXhfZGVsdGFfc2l6ZSB0aGVuIE5VTEwgaXMgcmV0dXJuZWQuICBPbiBzdWNjZXNzLCBhIG5vbi1OVUxMCisgKiBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2l0aCB0aGUgZGVsdGEgZGF0YSBpcyByZXR1cm5lZCBhbmQgKmRlbHRhX3NpemUgaXMKKyAqIHVwZGF0ZWQgd2l0aCBpdHMgc2l6ZS4gIFRoZSByZXR1cm5lZCBidWZmZXIgbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorZGlmZl9kZWx0YShjb25zdCB2b2lkICpzcmNfYnVmLCB1bnNpZ25lZCBsb25nIHNyY19idWZzaXplLAorCSAgIGNvbnN0IHZvaWQgKnRyZ19idWYsIHVuc2lnbmVkIGxvbmcgdHJnX2J1ZnNpemUsCisJICAgdW5zaWduZWQgbG9uZyAqZGVsdGFfc2l6ZSwgdW5zaWduZWQgbG9uZyBtYXhfZGVsdGFfc2l6ZSkKK3sKKwlzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4ID0gY3JlYXRlX2RlbHRhX2luZGV4KHNyY19idWYsIHNyY19idWZzaXplKTsKKwlpZiAoaW5kZXgpIHsKKwkJdm9pZCAqZGVsdGEgPSBjcmVhdGVfZGVsdGEoaW5kZXgsIHRyZ19idWYsIHRyZ19idWZzaXplLAorCQkJCQkgICBkZWx0YV9zaXplLCBtYXhfZGVsdGFfc2l6ZSk7CisJCWZyZWVfZGVsdGFfaW5kZXgoaW5kZXgpOworCQlyZXR1cm4gZGVsdGE7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogcGF0Y2hfZGVsdGE6IHJlY3JlYXRlIHRhcmdldCBidWZmZXIgZ2l2ZW4gc291cmNlIGJ1ZmZlciBhbmQgZGVsdGEgZGF0YQorICoKKyAqIE9uIHN1Y2Nlc3MsIGEgbm9uLU5VTEwgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGJ1ZmZlciBpcyByZXR1cm5lZCBhbmQKKyAqICp0cmdfYnVmc2l6ZSBpcyB1cGRhdGVkIHdpdGggaXRzIHNpemUuICBPbiBmYWlsdXJlIGEgTlVMTCBwb2ludGVyIGlzCisgKiByZXR1cm5lZC4gIFRoZSByZXR1cm5lZCBidWZmZXIgbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgorICovCitleHRlcm4gdm9pZCAqcGF0Y2hfZGVsdGEoY29uc3Qgdm9pZCAqc3JjX2J1ZiwgdW5zaWduZWQgbG9uZyBzcmNfc2l6ZSwKKwkJCSBjb25zdCB2b2lkICpkZWx0YV9idWYsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSwKKwkJCSB1bnNpZ25lZCBsb25nICpkc3Rfc2l6ZSk7CisKKy8qIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBkZWx0YSBzaXplIGlzIDQgYnl0ZXMgKi8KKyNkZWZpbmUgREVMVEFfU0laRV9NSU4JNAorCisvKgorICogVGhpcyBtdXN0IGJlIGNhbGxlZCB0d2ljZSBvbiB0aGUgZGVsdGEgZGF0YSBidWZmZXIsIGZpcnN0IHRvIGdldCB0aGUKKyAqIGV4cGVjdGVkIHNvdXJjZSBidWZmZXIgc2l6ZSwgYW5kIGFnYWluIHRvIGdldCB0aGUgdGFyZ2V0IGJ1ZmZlciBzaXplLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2RlbHRhX2hkcl9zaXplKGNvbnN0IHVuc2lnbmVkIGNoYXIgKipkYXRhcCwKKwkJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRvcCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gKmRhdGFwOworCXVuc2lnbmVkIGxvbmcgY21kLCBzaXplID0gMDsKKwlpbnQgaSA9IDA7CisJZG8geworCQljbWQgPSAqZGF0YSsrOworCQlzaXplIHw9IChjbWQgJiAweDdmKSA8PCBpOworCQlpICs9IDc7CisJfSB3aGlsZSAoY21kICYgMHg4MCAmJiBkYXRhIDwgdG9wKTsKKwkqZGF0YXAgPSBkYXRhOworCXJldHVybiBzaXplOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RpZmYtZGVsdGEuYyBiL2RpZmYtZGVsdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzM4NWUxCi0tLSAvZGV2L251bGwKKysrIGIvZGlmZi1kZWx0YS5jCkBAIC0wLDAgKzEsNDg5IEBACisvKgorICogZGlmZi1kZWx0YS5jOiBnZW5lcmF0ZSBhIGRlbHRhIGJldHdlZW4gdHdvIGJ1ZmZlcnMKKyAqCisgKiBUaGlzIGNvZGUgd2FzIGdyZWF0bHkgaW5zcGlyZWQgYnkgcGFydHMgb2YgTGliWERpZmYgZnJvbSBEYXZpZGUgTGliZW56aQorICogaHR0cDovL3d3dy54bWFpbHNlcnZlci5vcmcveGRpZmYtbGliLmh0bWwKKyAqCisgKiBSZXdyaXR0ZW4gZm9yIEdJVCBieSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PiwgKEMpIDIwMDUtMjAwNworICoKKyAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisKKy8qIG1heGltdW0gaGFzaCBlbnRyeSBsaXN0IGZvciB0aGUgc2FtZSBoYXNoIGJ1Y2tldCAqLworI2RlZmluZSBIQVNIX0xJTUlUIDY0CisKKyNkZWZpbmUgUkFCSU5fU0hJRlQgMjMKKyNkZWZpbmUgUkFCSU5fV0lORE9XIDE2CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFsyNTZdID0geworCTB4MDAwMDAwMDAsIDB4YWI1OWI0ZDEsIDB4NTZiMzY5YTIsIDB4ZmRlYWRkNzMsIDB4MDYzZjY3OTUsIDB4YWQ2NmQzNDQsCisJMHg1MDhjMGUzNywgMHhmYmQ1YmFlNiwgMHgwYzdlY2YyYSwgMHhhNzI3N2JmYiwgMHg1YWNkYTY4OCwgMHhmMTk0MTI1OSwKKwkweDBhNDFhOGJmLCAweGExMTgxYzZlLCAweDVjZjJjMTFkLCAweGY3YWI3NWNjLCAweDE4ZmQ5ZTU0LCAweGIzYTQyYTg1LAorCTB4NGU0ZWY3ZjYsIDB4ZTUxNzQzMjcsIDB4MWVjMmY5YzEsIDB4YjU5YjRkMTAsIDB4NDg3MTkwNjMsIDB4ZTMyODI0YjIsCisJMHgxNDgzNTE3ZSwgMHhiZmRhZTVhZiwgMHg0MjMwMzhkYywgMHhlOTY5OGMwZCwgMHgxMmJjMzZlYiwgMHhiOWU1ODIzYSwKKwkweDQ0MGY1ZjQ5LCAweGVmNTZlYjk4LCAweDMxZmIzY2E4LCAweDlhYTI4ODc5LCAweDY3NDg1NTBhLCAweGNjMTFlMWRiLAorCTB4MzdjNDViM2QsIDB4OWM5ZGVmZWMsIDB4NjE3NzMyOWYsIDB4Y2EyZTg2NGUsIDB4M2Q4NWYzODIsIDB4OTZkYzQ3NTMsCisJMHg2YjM2OWEyMCwgMHhjMDZmMmVmMSwgMHgzYmJhOTQxNywgMHg5MGUzMjBjNiwgMHg2ZDA5ZmRiNSwgMHhjNjUwNDk2NCwKKwkweDI5MDZhMmZjLCAweDgyNWYxNjJkLCAweDdmYjVjYjVlLCAweGQ0ZWM3ZjhmLCAweDJmMzljNTY5LCAweDg0NjA3MWI4LAorCTB4Nzk4YWFjY2IsIDB4ZDJkMzE4MWEsIDB4MjU3ODZkZDYsIDB4OGUyMWQ5MDcsIDB4NzNjYjA0NzQsIDB4ZDg5MmIwYTUsCisJMHgyMzQ3MGE0MywgMHg4ODFlYmU5MiwgMHg3NWY0NjNlMSwgMHhkZWFkZDczMCwgMHg2M2Y2Nzk1MCwgMHhjOGFmY2Q4MSwKKwkweDM1NDUxMGYyLCAweDllMWNhNDIzLCAweDY1YzkxZWM1LCAweGNlOTBhYTE0LCAweDMzN2E3NzY3LCAweDk4MjNjM2I2LAorCTB4NmY4OGI2N2EsIDB4YzRkMTAyYWIsIDB4MzkzYmRmZDgsIDB4OTI2MjZiMDksIDB4NjliN2QxZWYsIDB4YzJlZTY1M2UsCisJMHgzZjA0Yjg0ZCwgMHg5NDVkMGM5YywgMHg3YjBiZTcwNCwgMHhkMDUyNTNkNSwgMHgyZGI4OGVhNiwgMHg4NmUxM2E3NywKKwkweDdkMzQ4MDkxLCAweGQ2NmQzNDQwLCAweDJiODdlOTMzLCAweDgwZGU1ZGUyLCAweDc3NzUyODJlLCAweGRjMmM5Y2ZmLAorCTB4MjFjNjQxOGMsIDB4OGE5ZmY1NWQsIDB4NzE0YTRmYmIsIDB4ZGExM2ZiNmEsIDB4MjdmOTI2MTksIDB4OGNhMDkyYzgsCisJMHg1MjBkNDVmOCwgMHhmOTU0ZjEyOSwgMHgwNGJlMmM1YSwgMHhhZmU3OTg4YiwgMHg1NDMyMjI2ZCwgMHhmZjZiOTZiYywKKwkweDAyODE0YmNmLCAweGE5ZDhmZjFlLCAweDVlNzM4YWQyLCAweGY1MmEzZTAzLCAweDA4YzBlMzcwLCAweGEzOTk1N2ExLAorCTB4NTg0Y2VkNDcsIDB4ZjMxNTU5OTYsIDB4MGVmZjg0ZTUsIDB4YTVhNjMwMzQsIDB4NGFmMGRiYWMsIDB4ZTFhOTZmN2QsCisJMHgxYzQzYjIwZSwgMHhiNzFhMDZkZiwgMHg0Y2NmYmMzOSwgMHhlNzk2MDhlOCwgMHgxYTdjZDU5YiwgMHhiMTI1NjE0YSwKKwkweDQ2OGUxNDg2LCAweGVkZDdhMDU3LCAweDEwM2Q3ZDI0LCAweGJiNjRjOWY1LCAweDQwYjE3MzEzLCAweGViZThjN2MyLAorCTB4MTYwMjFhYjEsIDB4YmQ1YmFlNjAsIDB4NmNiNTQ2NzEsIDB4YzdlY2YyYTAsIDB4M2EwNjJmZDMsIDB4OTE1ZjliMDIsCisJMHg2YThhMjFlNCwgMHhjMWQzOTUzNSwgMHgzYzM5NDg0NiwgMHg5NzYwZmM5NywgMHg2MGNiODk1YiwgMHhjYjkyM2Q4YSwKKwkweDM2NzhlMGY5LCAweDlkMjE1NDI4LCAweDY2ZjRlZWNlLCAweGNkYWQ1YTFmLCAweDMwNDc4NzZjLCAweDliMWUzM2JkLAorCTB4NzQ0OGQ4MjUsIDB4ZGYxMTZjZjQsIDB4MjJmYmIxODcsIDB4ODlhMjA1NTYsIDB4NzI3N2JmYjAsIDB4ZDkyZTBiNjEsCisJMHgyNGM0ZDYxMiwgMHg4ZjlkNjJjMywgMHg3ODM2MTcwZiwgMHhkMzZmYTNkZSwgMHgyZTg1N2VhZCwgMHg4NWRjY2E3YywKKwkweDdlMDk3MDlhLCAweGQ1NTBjNDRiLCAweDI4YmExOTM4LCAweDgzZTNhZGU5LCAweDVkNGU3YWQ5LCAweGY2MTdjZTA4LAorCTB4MGJmZDEzN2IsIDB4YTBhNGE3YWEsIDB4NWI3MTFkNGMsIDB4ZjAyOGE5OWQsIDB4MGRjMjc0ZWUsIDB4YTY5YmMwM2YsCisJMHg1MTMwYjVmMywgMHhmYTY5MDEyMiwgMHgwNzgzZGM1MSwgMHhhY2RhNjg4MCwgMHg1NzBmZDI2NiwgMHhmYzU2NjZiNywKKwkweDAxYmNiYmM0LCAweGFhZTUwZjE1LCAweDQ1YjNlNDhkLCAweGVlZWE1MDVjLCAweDEzMDA4ZDJmLCAweGI4NTkzOWZlLAorCTB4NDM4YzgzMTgsIDB4ZThkNTM3YzksIDB4MTUzZmVhYmEsIDB4YmU2NjVlNmIsIDB4NDljZDJiYTcsIDB4ZTI5NDlmNzYsCisJMHgxZjdlNDIwNSwgMHhiNDI3ZjZkNCwgMHg0ZmYyNGMzMiwgMHhlNGFiZjhlMywgMHgxOTQxMjU5MCwgMHhiMjE4OTE0MSwKKwkweDBmNDMzZjIxLCAweGE0MWE4YmYwLCAweDU5ZjA1NjgzLCAweGYyYTllMjUyLCAweDA5N2M1OGI0LCAweGEyMjVlYzY1LAorCTB4NWZjZjMxMTYsIDB4ZjQ5Njg1YzcsIDB4MDMzZGYwMGIsIDB4YTg2NDQ0ZGEsIDB4NTU4ZTk5YTksIDB4ZmVkNzJkNzgsCisJMHgwNTAyOTc5ZSwgMHhhZTViMjM0ZiwgMHg1M2IxZmUzYywgMHhmOGU4NGFlZCwgMHgxN2JlYTE3NSwgMHhiY2U3MTVhNCwKKwkweDQxMGRjOGQ3LCAweGVhNTQ3YzA2LCAweDExODFjNmUwLCAweGJhZDg3MjMxLCAweDQ3MzJhZjQyLCAweGVjNmIxYjkzLAorCTB4MWJjMDZlNWYsIDB4YjA5OWRhOGUsIDB4NGQ3MzA3ZmQsIDB4ZTYyYWIzMmMsIDB4MWRmZjA5Y2EsIDB4YjZhNmJkMWIsCisJMHg0YjRjNjA2OCwgMHhlMDE1ZDRiOSwgMHgzZWI4MDM4OSwgMHg5NWUxYjc1OCwgMHg2ODBiNmEyYiwgMHhjMzUyZGVmYSwKKwkweDM4ODc2NDFjLCAweDkzZGVkMGNkLCAweDZlMzQwZGJlLCAweGM1NmRiOTZmLCAweDMyYzZjY2EzLCAweDk5OWY3ODcyLAorCTB4NjQ3NWE1MDEsIDB4Y2YyYzExZDAsIDB4MzRmOWFiMzYsIDB4OWZhMDFmZTcsIDB4NjI0YWMyOTQsIDB4YzkxMzc2NDUsCisJMHgyNjQ1OWRkZCwgMHg4ZDFjMjkwYywgMHg3MGY2ZjQ3ZiwgMHhkYmFmNDBhZSwgMHgyMDdhZmE0OCwgMHg4YjIzNGU5OSwKKwkweDc2Yzk5M2VhLCAweGRkOTAyNzNiLCAweDJhM2I1MmY3LCAweDgxNjJlNjI2LCAweDdjODgzYjU1LCAweGQ3ZDE4Zjg0LAorCTB4MmMwNDM1NjIsIDB4ODc1ZDgxYjMsIDB4N2FiNzVjYzAsIDB4ZDFlZWU4MTEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVVsyNTZdID0geworCTB4MDAwMDAwMDAsIDB4N2ViNTIwMGQsIDB4NTYzM2Y0Y2IsIDB4Mjg4NmQ0YzYsIDB4MDczZTVkNDcsIDB4Nzk4YjdkNGEsCisJMHg1MTBkYTk4YywgMHgyZmI4ODk4MSwgMHgwZTdjYmE4ZSwgMHg3MGM5OWE4MywgMHg1ODRmNGU0NSwgMHgyNmZhNmU0OCwKKwkweDA5NDJlN2M5LCAweDc3ZjdjN2M0LCAweDVmNzExMzAyLCAweDIxYzQzMzBmLCAweDFjZjk3NTFjLCAweDYyNGM1NTExLAorCTB4NGFjYTgxZDcsIDB4MzQ3ZmExZGEsIDB4MWJjNzI4NWIsIDB4NjU3MjA4NTYsIDB4NGRmNGRjOTAsIDB4MzM0MWZjOWQsCisJMHgxMjg1Y2Y5MiwgMHg2YzMwZWY5ZiwgMHg0NGI2M2I1OSwgMHgzYTAzMWI1NCwgMHgxNWJiOTJkNSwgMHg2YjBlYjJkOCwKKwkweDQzODg2NjFlLCAweDNkM2Q0NjEzLCAweDM5ZjJlYTM4LCAweDQ3NDdjYTM1LCAweDZmYzExZWYzLCAweDExNzQzZWZlLAorCTB4M2VjY2I3N2YsIDB4NDA3OTk3NzIsIDB4NjhmZjQzYjQsIDB4MTY0YTYzYjksIDB4Mzc4ZTUwYjYsIDB4NDkzYjcwYmIsCisJMHg2MWJkYTQ3ZCwgMHgxZjA4ODQ3MCwgMHgzMGIwMGRmMSwgMHg0ZTA1MmRmYywgMHg2NjgzZjkzYSwgMHgxODM2ZDkzNywKKwkweDI1MGI5ZjI0LCAweDViYmViZjI5LCAweDczMzg2YmVmLCAweDBkOGQ0YmUyLCAweDIyMzVjMjYzLCAweDVjODBlMjZlLAorCTB4NzQwNjM2YTgsIDB4MGFiMzE2YTUsIDB4MmI3NzI1YWEsIDB4NTVjMjA1YTcsIDB4N2Q0NGQxNjEsIDB4MDNmMWYxNmMsCisJMHgyYzQ5NzhlZCwgMHg1MmZjNThlMCwgMHg3YTdhOGMyNiwgMHgwNGNmYWMyYiwgMHg3M2U1ZDQ3MCwgMHgwZDUwZjQ3ZCwKKwkweDI1ZDYyMGJiLCAweDViNjMwMGI2LCAweDc0ZGI4OTM3LCAweDBhNmVhOTNhLCAweDIyZTg3ZGZjLCAweDVjNWQ1ZGYxLAorCTB4N2Q5OTZlZmUsIDB4MDMyYzRlZjMsIDB4MmJhYTlhMzUsIDB4NTUxZmJhMzgsIDB4N2FhNzMzYjksIDB4MDQxMjEzYjQsCisJMHgyYzk0Yzc3MiwgMHg1MjIxZTc3ZiwgMHg2ZjFjYTE2YywgMHgxMWE5ODE2MSwgMHgzOTJmNTVhNywgMHg0NzlhNzVhYSwKKwkweDY4MjJmYzJiLCAweDE2OTdkYzI2LCAweDNlMTEwOGUwLCAweDQwYTQyOGVkLCAweDYxNjAxYmUyLCAweDFmZDUzYmVmLAorCTB4Mzc1M2VmMjksIDB4NDllNmNmMjQsIDB4NjY1ZTQ2YTUsIDB4MThlYjY2YTgsIDB4MzA2ZGIyNmUsIDB4NGVkODkyNjMsCisJMHg0YTE3M2U0OCwgMHgzNGEyMWU0NSwgMHgxYzI0Y2E4MywgMHg2MjkxZWE4ZSwgMHg0ZDI5NjMwZiwgMHgzMzljNDMwMiwKKwkweDFiMWE5N2M0LCAweDY1YWZiN2M5LCAweDQ0NmI4NGM2LCAweDNhZGVhNGNiLCAweDEyNTg3MDBkLCAweDZjZWQ1MDAwLAorCTB4NDM1NWQ5ODEsIDB4M2RlMGY5OGMsIDB4MTU2NjJkNGEsIDB4NmJkMzBkNDcsIDB4NTZlZTRiNTQsIDB4Mjg1YjZiNTksCisJMHgwMGRkYmY5ZiwgMHg3ZTY4OWY5MiwgMHg1MWQwMTYxMywgMHgyZjY1MzYxZSwgMHgwN2UzZTJkOCwgMHg3OTU2YzJkNSwKKwkweDU4OTJmMWRhLCAweDI2MjdkMWQ3LCAweDBlYTEwNTExLCAweDcwMTQyNTFjLCAweDVmYWNhYzlkLCAweDIxMTk4YzkwLAorCTB4MDk5ZjU4NTYsIDB4NzcyYTc4NWIsIDB4NGM5MjFjMzEsIDB4MzIyNzNjM2MsIDB4MWFhMWU4ZmEsIDB4NjQxNGM4ZjcsCisJMHg0YmFjNDE3NiwgMHgzNTE5NjE3YiwgMHgxZDlmYjViZCwgMHg2MzJhOTViMCwgMHg0MmVlYTZiZiwgMHgzYzViODZiMiwKKwkweDE0ZGQ1Mjc0LCAweDZhNjg3Mjc5LCAweDQ1ZDBmYmY4LCAweDNiNjVkYmY1LCAweDEzZTMwZjMzLCAweDZkNTYyZjNlLAorCTB4NTA2YjY5MmQsIDB4MmVkZTQ5MjAsIDB4MDY1ODlkZTYsIDB4NzhlZGJkZWIsIDB4NTc1NTM0NmEsIDB4MjllMDE0NjcsCisJMHgwMTY2YzBhMSwgMHg3ZmQzZTBhYywgMHg1ZTE3ZDNhMywgMHgyMGEyZjNhZSwgMHgwODI0Mjc2OCwgMHg3NjkxMDc2NSwKKwkweDU5Mjk4ZWU0LCAweDI3OWNhZWU5LCAweDBmMWE3YTJmLCAweDcxYWY1YTIyLCAweDc1NjBmNjA5LCAweDBiZDVkNjA0LAorCTB4MjM1MzAyYzIsIDB4NWRlNjIyY2YsIDB4NzI1ZWFiNGUsIDB4MGNlYjhiNDMsIDB4MjQ2ZDVmODUsIDB4NWFkODdmODgsCisJMHg3YjFjNGM4NywgMHgwNWE5NmM4YSwgMHgyZDJmYjg0YywgMHg1MzlhOTg0MSwgMHg3YzIyMTFjMCwgMHgwMjk3MzFjZCwKKwkweDJhMTFlNTBiLCAweDU0YTRjNTA2LCAweDY5OTk4MzE1LCAweDE3MmNhMzE4LCAweDNmYWE3N2RlLCAweDQxMWY1N2QzLAorCTB4NmVhN2RlNTIsIDB4MTAxMmZlNWYsIDB4Mzg5NDJhOTksIDB4NDYyMTBhOTQsIDB4NjdlNTM5OWIsIDB4MTk1MDE5OTYsCisJMHgzMWQ2Y2Q1MCwgMHg0ZjYzZWQ1ZCwgMHg2MGRiNjRkYywgMHgxZTZlNDRkMSwgMHgzNmU4OTAxNywgMHg0ODVkYjAxYSwKKwkweDNmNzdjODQxLCAweDQxYzJlODRjLCAweDY5NDQzYzhhLCAweDE3ZjExYzg3LCAweDM4NDk5NTA2LCAweDQ2ZmNiNTBiLAorCTB4NmU3YTYxY2QsIDB4MTBjZjQxYzAsIDB4MzEwYjcyY2YsIDB4NGZiZTUyYzIsIDB4NjczODg2MDQsIDB4MTk4ZGE2MDksCisJMHgzNjM1MmY4OCwgMHg0ODgwMGY4NSwgMHg2MDA2ZGI0MywgMHgxZWIzZmI0ZSwgMHgyMzhlYmQ1ZCwgMHg1ZDNiOWQ1MCwKKwkweDc1YmQ0OTk2LCAweDBiMDg2OTliLCAweDI0YjBlMDFhLCAweDVhMDVjMDE3LCAweDcyODMxNGQxLCAweDBjMzYzNGRjLAorCTB4MmRmMjA3ZDMsIDB4NTM0NzI3ZGUsIDB4N2JjMWYzMTgsIDB4MDU3NGQzMTUsIDB4MmFjYzVhOTQsIDB4NTQ3OTdhOTksCisJMHg3Y2ZmYWU1ZiwgMHgwMjRhOGU1MiwgMHgwNjg1MjI3OSwgMHg3ODMwMDI3NCwgMHg1MGI2ZDZiMiwgMHgyZTAzZjZiZiwKKwkweDAxYmI3ZjNlLCAweDdmMGU1ZjMzLCAweDU3ODg4YmY1LCAweDI5M2RhYmY4LCAweDA4Zjk5OGY3LCAweDc2NGNiOGZhLAorCTB4NWVjYTZjM2MsIDB4MjA3ZjRjMzEsIDB4MGZjN2M1YjAsIDB4NzE3MmU1YmQsIDB4NTlmNDMxN2IsIDB4Mjc0MTExNzYsCisJMHgxYTdjNTc2NSwgMHg2NGM5Nzc2OCwgMHg0YzRmYTNhZSwgMHgzMmZhODNhMywgMHgxZDQyMGEyMiwgMHg2M2Y3MmEyZiwKKwkweDRiNzFmZWU5LCAweDM1YzRkZWU0LCAweDE0MDBlZGViLCAweDZhYjVjZGU2LCAweDQyMzMxOTIwLCAweDNjODYzOTJkLAorCTB4MTMzZWIwYWMsIDB4NmQ4YjkwYTEsIDB4NDUwZDQ0NjcsIDB4M2JiODY0NmEKK307CisKK3N0cnVjdCBpbmRleF9lbnRyeSB7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcHRyOworCXVuc2lnbmVkIGludCB2YWw7Cit9OworCitzdHJ1Y3QgdW5wYWNrZWRfaW5kZXhfZW50cnkgeworCXN0cnVjdCBpbmRleF9lbnRyeSBlbnRyeTsKKwlzdHJ1Y3QgdW5wYWNrZWRfaW5kZXhfZW50cnkgKm5leHQ7Cit9OworCitzdHJ1Y3QgZGVsdGFfaW5kZXggeworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKKwljb25zdCB2b2lkICpzcmNfYnVmOworCXVuc2lnbmVkIGxvbmcgc3JjX3NpemU7CisJdW5zaWduZWQgaW50IGhhc2hfbWFzazsKKwlzdHJ1Y3QgaW5kZXhfZW50cnkgKmhhc2hbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgZGVsdGFfaW5kZXggKiBjcmVhdGVfZGVsdGFfaW5kZXgoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGJ1ZnNpemUpCit7CisJdW5zaWduZWQgaW50IGksIGhzaXplLCBobWFzaywgZW50cmllcywgcHJldl92YWwsICpoYXNoX2NvdW50OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsICpidWZmZXIgPSBidWY7CisJc3RydWN0IGRlbHRhX2luZGV4ICppbmRleDsKKwlzdHJ1Y3QgdW5wYWNrZWRfaW5kZXhfZW50cnkgKmVudHJ5LCAqKmhhc2g7CisJc3RydWN0IGluZGV4X2VudHJ5ICpwYWNrZWRfZW50cnksICoqcGFja2VkX2hhc2g7CisJdm9pZCAqbWVtOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKKworCWlmICghYnVmIHx8ICFidWZzaXplKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIERldGVybWluZSBpbmRleCBoYXNoIHNpemUuICBOb3RlIHRoYXQgaW5kZXhpbmcgc2tpcHMgdGhlCisJICAgZmlyc3QgYnl0ZSB0byBhbGxvdyBmb3Igb3B0aW1pemluZyB0aGUgUmFiaW4ncyBwb2x5bm9taWFsCisJICAgaW5pdGlhbGl6YXRpb24gaW4gY3JlYXRlX2RlbHRhKCkuICovCisJZW50cmllcyA9IChidWZzaXplIC0gMSkgLyBSQUJJTl9XSU5ET1c7CisJaWYgKGJ1ZnNpemUgPj0gMHhmZmZmZmZmZlVMKSB7CisJCS8qCisJCSAqIEN1cnJlbnQgZGVsdGEgZm9ybWF0IGNhbid0IGVuY29kZSBvZmZzZXRzIGludG8KKwkJICogcmVmZXJlbmNlIGJ1ZmZlciB3aXRoIG1vcmUgdGhhbiAzMiBiaXRzLgorCQkgKi8KKwkJZW50cmllcyA9IDB4ZmZmZmZmZmVVIC8gUkFCSU5fV0lORE9XOworCX0KKwloc2l6ZSA9IGVudHJpZXMgLyA0OworCWZvciAoaSA9IDQ7ICgxdSA8PCBpKSA8IGhzaXplICYmIGkgPCAzMTsgaSsrKTsKKwloc2l6ZSA9IDEgPDwgaTsKKwlobWFzayA9IGhzaXplIC0gMTsKKworCS8qIGFsbG9jYXRlIGxvb2t1cCBpbmRleCAqLworCW1lbXNpemUgPSBzaXplb2YoKmhhc2gpICogaHNpemUgKworCQkgIHNpemVvZigqZW50cnkpICogZW50cmllczsKKwltZW0gPSBtYWxsb2MobWVtc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCWhhc2ggPSBtZW07CisJbWVtID0gaGFzaCArIGhzaXplOworCWVudHJ5ID0gbWVtOworCisJbWVtc2V0KGhhc2gsIDAsIGhzaXplICogc2l6ZW9mKCpoYXNoKSk7CisKKwkvKiBhbGxvY2F0ZSBhbiBhcnJheSB0byBjb3VudCBoYXNoIGVudHJpZXMgKi8KKwloYXNoX2NvdW50ID0gY2FsbG9jKGhzaXplLCBzaXplb2YoKmhhc2hfY291bnQpKTsKKwlpZiAoIWhhc2hfY291bnQpIHsKKwkJZnJlZShoYXNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogdGhlbiBwb3B1bGF0ZSB0aGUgaW5kZXggKi8KKwlwcmV2X3ZhbCA9IH4wOworCWZvciAoZGF0YSA9IGJ1ZmZlciArIGVudHJpZXMgKiBSQUJJTl9XSU5ET1cgLSBSQUJJTl9XSU5ET1c7CisJICAgICBkYXRhID49IGJ1ZmZlcjsKKwkgICAgIGRhdGEgLT0gUkFCSU5fV0lORE9XKSB7CisJCXVuc2lnbmVkIGludCB2YWwgPSAwOworCQlmb3IgKGkgPSAxOyBpIDw9IFJBQklOX1dJTkRPVzsgaSsrKQorCQkJdmFsID0gKCh2YWwgPDwgOCkgfCBkYXRhW2ldKSBeIFRbdmFsID4+IFJBQklOX1NISUZUXTsKKwkJaWYgKHZhbCA9PSBwcmV2X3ZhbCkgeworCQkJLyoga2VlcCB0aGUgbG93ZXN0IG9mIGNvbnNlY3V0aXZlIGlkZW50aWNhbCBibG9ja3MgKi8KKwkJCWVudHJ5Wy0xXS5lbnRyeS5wdHIgPSBkYXRhICsgUkFCSU5fV0lORE9XOworCQkJLS1lbnRyaWVzOworCQl9IGVsc2UgeworCQkJcHJldl92YWwgPSB2YWw7CisJCQlpID0gdmFsICYgaG1hc2s7CisJCQllbnRyeS0+ZW50cnkucHRyID0gZGF0YSArIFJBQklOX1dJTkRPVzsKKwkJCWVudHJ5LT5lbnRyeS52YWwgPSB2YWw7CisJCQllbnRyeS0+bmV4dCA9IGhhc2hbaV07CisJCQloYXNoW2ldID0gZW50cnkrKzsKKwkJCWhhc2hfY291bnRbaV0rKzsKKwkJfQorCX0KKworCS8qCisJICogRGV0ZXJtaW5lIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzYW1lIGhhc2gKKwkgKiBidWNrZXQuICBUaGlzIGd1YXJkcyB1cyBhZ2FpbnN0IHBhdGhvbG9naWNhbCBkYXRhIHNldHMgY2F1c2luZworCSAqIHJlYWxseSBiYWQgaGFzaCBkaXN0cmlidXRpb24gd2l0aCBtb3N0IGVudHJpZXMgaW4gdGhlIHNhbWUgaGFzaAorCSAqIGJ1Y2tldCB0aGF0IHdvdWxkIGJyaW5nIHVzIHRvIE8obSpuKSBjb21wdXRpbmcgY29zdHMgKG0gYW5kIG4KKwkgKiBjb3JyZXNwb25kaW5nIHRvIHJlZmVyZW5jZSBhbmQgdGFyZ2V0IGJ1ZmZlciBzaXplcykuCisJICoKKwkgKiBNYWtlIHN1cmUgbm9uZSBvZiB0aGUgaGFzaCBidWNrZXRzIGhhcyBtb3JlIGVudHJpZXMgdGhhbgorCSAqIHdlJ3JlIHdpbGxpbmcgdG8gdGVzdC4gIE90aGVyd2lzZSB3ZSBjdWxsIHRoZSBlbnRyeSBsaXN0CisJICogdW5pZm9ybWx5IHRvIHN0aWxsIHByZXNlcnZlIGEgZ29vZCByZXBhcnRpdGlvbiBhY3Jvc3MKKwkgKiB0aGUgcmVmZXJlbmNlIGJ1ZmZlci4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaHNpemU7IGkrKykgeworCQlpbnQgYWNjOworCisJCWlmIChoYXNoX2NvdW50W2ldIDw9IEhBU0hfTElNSVQpCisJCQljb250aW51ZTsKKworCQkvKiBXZSBsZWF2ZSBleGFjdGx5IEhBU0hfTElNSVQgZW50cmllcyBpbiB0aGUgYnVja2V0ICovCisJCWVudHJpZXMgLT0gaGFzaF9jb3VudFtpXSAtIEhBU0hfTElNSVQ7CisKKwkJZW50cnkgPSBoYXNoW2ldOworCQlhY2MgPSAwOworCisJCS8qCisJCSAqIEFzc3VtZSB0aGF0IHRoaXMgbG9vcCBpcyBnb25lIHRocm91Z2ggZXhhY3RseQorCQkgKiBIQVNIX0xJTUlUIHRpbWVzIGFuZCBpcyBlbnRlcmVkIGFuZCBsZWZ0IHdpdGgKKwkJICogYWNjPT0wLiAgU28gdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgbG9vcAorCQkgKiBjb250cmlidXRlcyAoaGFzaF9jb3VudFtpXS1IQVNIX0xJTUlUKSpIQVNIX0xJTUlUCisJCSAqIHRvIHRoZSBhY2N1bXVsYXRvciwgYW5kIHRoZSBpbm5lciBsb29wIGNvbnNlcXVlbnRseQorCQkgKiBpcyBydW4gKGhhc2hfY291bnRbaV0tSEFTSF9MSU1JVCkgdGltZXMsIHJlbW92aW5nCisJCSAqIG9uZSBlbGVtZW50IGZyb20gdGhlIGxpc3QgZWFjaCB0aW1lLiAgU2luY2UgYWNjCisJCSAqIGJhbGFuY2VzIG91dCB0byAwIGF0IHRoZSBmaW5hbCBydW4sIHRoZSBpbm5lciBsb29wCisJCSAqIGJvZHkgY2FuJ3QgYmUgbGVmdCB3aXRoIGVudHJ5PT1OVUxMLiAgU28gd2UgaW5kZWVkCisJCSAqIGVuY291bnRlciBlbnRyeT09TlVMTCBpbiB0aGUgb3V0ZXIgbG9vcCBvbmx5LgorCQkgKi8KKwkJZG8geworCQkJYWNjICs9IGhhc2hfY291bnRbaV0gLSBIQVNIX0xJTUlUOworCQkJaWYgKGFjYyA+IDApIHsKKwkJCQlzdHJ1Y3QgdW5wYWNrZWRfaW5kZXhfZW50cnkgKmtlZXAgPSBlbnRyeTsKKwkJCQlkbyB7CisJCQkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCQkJCWFjYyAtPSBIQVNIX0xJTUlUOworCQkJCX0gd2hpbGUgKGFjYyA+IDApOworCQkJCWtlZXAtPm5leHQgPSBlbnRyeS0+bmV4dDsKKwkJCX0KKwkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCX0gd2hpbGUgKGVudHJ5KTsKKwl9CisJZnJlZShoYXNoX2NvdW50KTsKKworCS8qCisJICogTm93IGNyZWF0ZSB0aGUgcGFja2VkIGluZGV4IGluIGFycmF5IGZvcm0KKwkgKiByYXRoZXIgdGhhbiBsaW5rZWQgbGlzdHMuCisJICovCisJbWVtc2l6ZSA9IHNpemVvZigqaW5kZXgpCisJCSsgc2l6ZW9mKCpwYWNrZWRfaGFzaCkgKiAoaHNpemUrMSkKKwkJKyBzaXplb2YoKnBhY2tlZF9lbnRyeSkgKiBlbnRyaWVzOworCW1lbSA9IG1hbGxvYyhtZW1zaXplKTsKKwlpZiAoIW1lbSkgeworCQlmcmVlKGhhc2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleCA9IG1lbTsKKwlpbmRleC0+bWVtc2l6ZSA9IG1lbXNpemU7CisJaW5kZXgtPnNyY19idWYgPSBidWY7CisJaW5kZXgtPnNyY19zaXplID0gYnVmc2l6ZTsKKwlpbmRleC0+aGFzaF9tYXNrID0gaG1hc2s7CisKKwltZW0gPSBpbmRleC0+aGFzaDsKKwlwYWNrZWRfaGFzaCA9IG1lbTsKKwltZW0gPSBwYWNrZWRfaGFzaCArIChoc2l6ZSsxKTsKKwlwYWNrZWRfZW50cnkgPSBtZW07CisKKwlmb3IgKGkgPSAwOyBpIDwgaHNpemU7IGkrKykgeworCQkvKgorCQkgKiBDb2FsZXNjZSBhbGwgZW50cmllcyBiZWxvbmdpbmcgdG8gb25lIGxpbmtlZCBsaXN0CisJCSAqIGludG8gY29uc2VjdXRpdmUgYXJyYXkgZW50cmllcy4KKwkJICovCisJCXBhY2tlZF9oYXNoW2ldID0gcGFja2VkX2VudHJ5OworCQlmb3IgKGVudHJ5ID0gaGFzaFtpXTsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQpCisJCQkqcGFja2VkX2VudHJ5KysgPSBlbnRyeS0+ZW50cnk7CisJfQorCisJLyogU2VudGluZWwgdmFsdWUgdG8gaW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgbGFzdCBoYXNoIGJ1Y2tldCAqLworCXBhY2tlZF9oYXNoW2hzaXplXSA9IHBhY2tlZF9lbnRyeTsKKworCWFzc2VydChwYWNrZWRfZW50cnkgLSAoc3RydWN0IGluZGV4X2VudHJ5ICopbWVtID09IGVudHJpZXMpOworCWZyZWUoaGFzaCk7CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3ZvaWQgZnJlZV9kZWx0YV9pbmRleChzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4KQoreworCWZyZWUoaW5kZXgpOworfQorCit1bnNpZ25lZCBsb25nIHNpemVvZl9kZWx0YV9pbmRleChzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4KQoreworCWlmIChpbmRleCkKKwkJcmV0dXJuIGluZGV4LT5tZW1zaXplOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgbWF4aW11bSBzaXplIGZvciBhbnkgb3Bjb2RlIHNlcXVlbmNlLCBpbmNsdWRpbmcgdGhlIGluaXRpYWwgaGVhZGVyCisgKiBwbHVzIFJhYmluIHdpbmRvdyBwbHVzIGJpZ2dlc3QgY29weS4KKyAqLworI2RlZmluZSBNQVhfT1BfU0laRQkoNSArIDUgKyAxICsgUkFCSU5fV0lORE9XICsgNykKKwordm9pZCAqCitjcmVhdGVfZGVsdGEoY29uc3Qgc3RydWN0IGRlbHRhX2luZGV4ICppbmRleCwKKwkgICAgIGNvbnN0IHZvaWQgKnRyZ19idWYsIHVuc2lnbmVkIGxvbmcgdHJnX3NpemUsCisJICAgICB1bnNpZ25lZCBsb25nICpkZWx0YV9zaXplLCB1bnNpZ25lZCBsb25nIG1heF9zaXplKQoreworCXVuc2lnbmVkIGludCBpLCBvdXRwb3MsIG91dHNpemUsIG1vZmYsIG1zaXplLCB2YWw7CisJaW50IGluc2NudDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpyZWZfZGF0YSwgKnJlZl90b3AsICpkYXRhLCAqdG9wOworCXVuc2lnbmVkIGNoYXIgKm91dDsKKworCWlmICghdHJnX2J1ZiB8fCAhdHJnX3NpemUpCisJCXJldHVybiBOVUxMOworCisJb3V0cG9zID0gMDsKKwlvdXRzaXplID0gODE5MjsKKwlpZiAobWF4X3NpemUgJiYgb3V0c2l6ZSA+PSBtYXhfc2l6ZSkKKwkJb3V0c2l6ZSA9IG1heF9zaXplICsgTUFYX09QX1NJWkUgKyAxOworCW91dCA9IG1hbGxvYyhvdXRzaXplKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBzdG9yZSByZWZlcmVuY2UgYnVmZmVyIHNpemUgKi8KKwlpID0gaW5kZXgtPnNyY19zaXplOworCXdoaWxlIChpID49IDB4ODApIHsKKwkJb3V0W291dHBvcysrXSA9IGkgfCAweDgwOworCQlpID4+PSA3OworCX0KKwlvdXRbb3V0cG9zKytdID0gaTsKKworCS8qIHN0b3JlIHRhcmdldCBidWZmZXIgc2l6ZSAqLworCWkgPSB0cmdfc2l6ZTsKKwl3aGlsZSAoaSA+PSAweDgwKSB7CisJCW91dFtvdXRwb3MrK10gPSBpIHwgMHg4MDsKKwkJaSA+Pj0gNzsKKwl9CisJb3V0W291dHBvcysrXSA9IGk7CisKKwlyZWZfZGF0YSA9IGluZGV4LT5zcmNfYnVmOworCXJlZl90b3AgPSByZWZfZGF0YSArIGluZGV4LT5zcmNfc2l6ZTsKKwlkYXRhID0gdHJnX2J1ZjsKKwl0b3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSB0cmdfYnVmICsgdHJnX3NpemU7CisKKwlvdXRwb3MrKzsKKwl2YWwgPSAwOworCWZvciAoaSA9IDA7IGkgPCBSQUJJTl9XSU5ET1cgJiYgZGF0YSA8IHRvcDsgaSsrLCBkYXRhKyspIHsKKwkJb3V0W291dHBvcysrXSA9ICpkYXRhOworCQl2YWwgPSAoKHZhbCA8PCA4KSB8ICpkYXRhKSBeIFRbdmFsID4+IFJBQklOX1NISUZUXTsKKwl9CisJaW5zY250ID0gaTsKKworCW1vZmYgPSAwOworCW1zaXplID0gMDsKKwl3aGlsZSAoZGF0YSA8IHRvcCkgeworCQlpZiAobXNpemUgPCA0MDk2KSB7CisJCQlzdHJ1Y3QgaW5kZXhfZW50cnkgKmVudHJ5OworCQkJdmFsIF49IFVbZGF0YVstUkFCSU5fV0lORE9XXV07CisJCQl2YWwgPSAoKHZhbCA8PCA4KSB8ICpkYXRhKSBeIFRbdmFsID4+IFJBQklOX1NISUZUXTsKKwkJCWkgPSB2YWwgJiBpbmRleC0+aGFzaF9tYXNrOworCQkJZm9yIChlbnRyeSA9IGluZGV4LT5oYXNoW2ldOyBlbnRyeSA8IGluZGV4LT5oYXNoW2krMV07IGVudHJ5KyspIHsKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpyZWYgPSBlbnRyeS0+cHRyOworCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IGRhdGE7CisJCQkJdW5zaWduZWQgaW50IHJlZl9zaXplID0gcmVmX3RvcCAtIHJlZjsKKwkJCQlpZiAoZW50cnktPnZhbCAhPSB2YWwpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChyZWZfc2l6ZSA+IHRvcCAtIHNyYykKKwkJCQkJcmVmX3NpemUgPSB0b3AgLSBzcmM7CisJCQkJaWYgKHJlZl9zaXplIDw9IG1zaXplKQorCQkJCQlicmVhazsKKwkJCQl3aGlsZSAocmVmX3NpemUtLSAmJiAqc3JjKysgPT0gKnJlZikKKwkJCQkJcmVmKys7CisJCQkJaWYgKG1zaXplIDwgcmVmIC0gZW50cnktPnB0cikgeworCQkJCQkvKiB0aGlzIGlzIG91ciBiZXN0IG1hdGNoIHNvIGZhciAqLworCQkJCQltc2l6ZSA9IHJlZiAtIGVudHJ5LT5wdHI7CisJCQkJCW1vZmYgPSBlbnRyeS0+cHRyIC0gcmVmX2RhdGE7CisJCQkJCWlmIChtc2l6ZSA+PSA0MDk2KSAvKiBnb29kIGVub3VnaCAqLworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKG1zaXplIDwgNCkgeworCQkJaWYgKCFpbnNjbnQpCisJCQkJb3V0cG9zKys7CisJCQlvdXRbb3V0cG9zKytdID0gKmRhdGErKzsKKwkJCWluc2NudCsrOworCQkJaWYgKGluc2NudCA9PSAweDdmKSB7CisJCQkJb3V0W291dHBvcyAtIGluc2NudCAtIDFdID0gaW5zY250OworCQkJCWluc2NudCA9IDA7CisJCQl9CisJCQltc2l6ZSA9IDA7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgbGVmdDsKKwkJCXVuc2lnbmVkIGNoYXIgKm9wOworCisJCQlpZiAoaW5zY250KSB7CisJCQkJd2hpbGUgKG1vZmYgJiYgcmVmX2RhdGFbbW9mZi0xXSA9PSBkYXRhWy0xXSkgeworCQkJCQkvKiB3ZSBjYW4gbWF0Y2ggb25lIGJ5dGUgYmFjayAqLworCQkJCQltc2l6ZSsrOworCQkJCQltb2ZmLS07CisJCQkJCWRhdGEtLTsKKwkJCQkJb3V0cG9zLS07CisJCQkJCWlmICgtLWluc2NudCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlvdXRwb3MtLTsgIC8qIHJlbW92ZSBjb3VudCBzbG90ICovCisJCQkJCWluc2NudC0tOyAgLyogbWFrZSBpdCAtMSAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb3V0W291dHBvcyAtIGluc2NudCAtIDFdID0gaW5zY250OworCQkJCWluc2NudCA9IDA7CisJCQl9CisKKwkJCS8qIEEgY29weSBvcCBpcyBjdXJyZW50bHkgbGltaXRlZCB0byA2NEtCIChwYWNrIHYyKSAqLworCQkJbGVmdCA9IChtc2l6ZSA8IDB4MTAwMDApID8gMCA6IChtc2l6ZSAtIDB4MTAwMDApOworCQkJbXNpemUgLT0gbGVmdDsKKworCQkJb3AgPSBvdXQgKyBvdXRwb3MrKzsKKwkJCWkgPSAweDgwOworCisJCQlpZiAobW9mZiAmIDB4MDAwMDAwZmYpCisJCQkJb3V0W291dHBvcysrXSA9IG1vZmYgPj4gMCwgIGkgfD0gMHgwMTsKKwkJCWlmIChtb2ZmICYgMHgwMDAwZmYwMCkKKwkJCQlvdXRbb3V0cG9zKytdID0gbW9mZiA+PiA4LCAgaSB8PSAweDAyOworCQkJaWYgKG1vZmYgJiAweDAwZmYwMDAwKQorCQkJCW91dFtvdXRwb3MrK10gPSBtb2ZmID4+IDE2LCBpIHw9IDB4MDQ7CisJCQlpZiAobW9mZiAmIDB4ZmYwMDAwMDApCisJCQkJb3V0W291dHBvcysrXSA9IG1vZmYgPj4gMjQsIGkgfD0gMHgwODsKKworCQkJaWYgKG1zaXplICYgMHgwMGZmKQorCQkJCW91dFtvdXRwb3MrK10gPSBtc2l6ZSA+PiAwLCBpIHw9IDB4MTA7CisJCQlpZiAobXNpemUgJiAweGZmMDApCisJCQkJb3V0W291dHBvcysrXSA9IG1zaXplID4+IDgsIGkgfD0gMHgyMDsKKworCQkJKm9wID0gaTsKKworCQkJZGF0YSArPSBtc2l6ZTsKKwkJCW1vZmYgKz0gbXNpemU7CisJCQltc2l6ZSA9IGxlZnQ7CisKKwkJCWlmIChtc2l6ZSA8IDQwOTYpIHsKKwkJCQlpbnQgajsKKwkJCQl2YWwgPSAwOworCQkJCWZvciAoaiA9IC1SQUJJTl9XSU5ET1c7IGogPCAwOyBqKyspCisJCQkJCXZhbCA9ICgodmFsIDw8IDgpIHwgZGF0YVtqXSkKKwkJCQkJICAgICAgXiBUW3ZhbCA+PiBSQUJJTl9TSElGVF07CisJCQl9CisJCX0KKworCQlpZiAob3V0cG9zID49IG91dHNpemUgLSBNQVhfT1BfU0laRSkgeworCQkJdm9pZCAqdG1wID0gb3V0OworCQkJb3V0c2l6ZSA9IG91dHNpemUgKiAzIC8gMjsKKwkJCWlmIChtYXhfc2l6ZSAmJiBvdXRzaXplID49IG1heF9zaXplKQorCQkJCW91dHNpemUgPSBtYXhfc2l6ZSArIE1BWF9PUF9TSVpFICsgMTsKKwkJCWlmIChtYXhfc2l6ZSAmJiBvdXRwb3MgPiBtYXhfc2l6ZSkKKwkJCQlicmVhazsKKwkJCW91dCA9IHJlYWxsb2Mob3V0LCBvdXRzaXplKTsKKwkJCWlmICghb3V0KSB7CisJCQkJZnJlZSh0bXApOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisJfQorCisJaWYgKGluc2NudCkKKwkJb3V0W291dHBvcyAtIGluc2NudCAtIDFdID0gaW5zY250OworCisJaWYgKG1heF9zaXplICYmIG91dHBvcyA+IG1heF9zaXplKSB7CisJCWZyZWUob3V0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJKmRlbHRhX3NpemUgPSBvdXRwb3M7CisJcmV0dXJuIG91dDsKK30KZGlmZiAtLWdpdCBhL2RpZmYtbGliLmMgYi9kaWZmLWxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNWRlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmLWxpYi5jCkBAIC0wLDAgKzEsNTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorCisvKgorICogZGlmZi1maWxlcworICovCisKKy8qCisgKiBIYXMgdGhlIHdvcmsgdHJlZSBlbnRpdHkgYmVlbiByZW1vdmVkPworICoKKyAqIFJldHVybiAxIGlmIGl0IHdhcyByZW1vdmVkIGZyb20gdGhlIHdvcmsgdHJlZSwgMCBpZiBhbiBlbnRpdHkgdG8gYmUKKyAqIGNvbXBhcmVkIHdpdGggdGhlIGNhY2hlIGVudHJ5IGNlIHN0aWxsIGV4aXN0cyAodGhlIGxhdHRlciBpbmNsdWRlcworICogdGhlIGNhc2Ugd2hlcmUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgYSBzdWJtb2R1bGUgcmVwb3NpdG9yeQorICogZXhpc3RzIGZvciBjZSB0aGF0IGlzIGEgc3VibW9kdWxlIC0tIGl0IGlzIGEgc3VibW9kdWxlIHRoYXQgaXMgbm90CisgKiBjaGVja2VkIG91dCkuICBSZXR1cm4gbmVnYXRpdmUgZm9yIGFuIGVycm9yLgorICovCitzdGF0aWMgaW50IGNoZWNrX3JlbW92ZWQoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQoreworCWlmIChsc3RhdChjZS0+bmFtZSwgc3QpIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UICYmIGVycm5vICE9IEVOT1RESVIpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAxOworCX0KKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSkpCisJCXJldHVybiAxOworCWlmIChTX0lTRElSKHN0LT5zdF9tb2RlKSkgeworCQl1bnNpZ25lZCBjaGFyIHN1YlsyMF07CisKKwkJLyoKKwkJICogSWYgY2UgaXMgYWxyZWFkeSBhIGdpdGxpbmssIHdlIGNhbiBoYXZlIGEgcGxhaW4KKwkJICogZGlyZWN0b3J5IChpLmUuIHRoZSBzdWJtb2R1bGUgaXMgbm90IGNoZWNrZWQgb3V0KSwKKwkJICogb3IgYSBjaGVja2VkIG91dCBzdWJtb2R1bGUuICBFaXRoZXIgY2FzZSB0aGlzIGlzIG5vdAorCQkgKiBhIGNhc2Ugd2hlcmUgc29tZXRoaW5nIHdhcyByZW1vdmVkIGZyb20gdGhlIHdvcmsgdHJlZSwKKwkJICogc28gd2Ugd2lsbCByZXR1cm4gMC4KKwkJICoKKwkJICogT3RoZXJ3aXNlLCBpZiB0aGUgZGlyZWN0b3J5IGlzIG5vdCBhIHN1Ym1vZHVsZQorCQkgKiByZXBvc2l0b3J5LCB0aGF0IG1lYW5zIGNlIHdoaWNoIHdhcyBhIGJsb2IgdHVybmVkIGludG8KKwkJICogYSBkaXJlY3RvcnkgLS0tIHRoZSBibG9iIHdhcyByZW1vdmVkIQorCQkgKi8KKwkJaWYgKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgJiYKKwkJICAgIHJlc29sdmVfZ2l0bGlua19yZWYoY2UtPm5hbWUsICJIRUFEIiwgc3ViKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhcyBhIGZpbGUgY2hhbmdlZCBvciBoYXMgYSBzdWJtb2R1bGUgbmV3IGNvbW1pdHMgb3IgYSBkaXJ0eSB3b3JrIHRyZWU/CisgKgorICogUmV0dXJuIDEgd2hlbiBjaGFuZ2VzIGFyZSBkZXRlY3RlZCwgMCBvdGhlcndpc2UuIElmIHRoZSBESVJUWV9TVUJNT0RVTEVTCisgKiBvcHRpb24gaXMgc2V0LCB0aGUgY2FsbGVyIGRvZXMgbm90IG9ubHkgd2FudCB0byBrbm93IGlmIGEgc3VibW9kdWxlIGlzCisgKiBtb2RpZmllZCBhdCBhbGwgYnV0IHdhbnRzIHRvIGtub3cgYWxsIHRoZSBjb25kaXRpb25zIHRoYXQgYXJlIG1ldCAobmV3CisgKiBjb21taXRzLCB1bnRyYWNrZWQgY29udGVudCBhbmQvb3IgbW9kaWZpZWQgY29udGVudCkuCisgKi8KK3N0YXRpYyBpbnQgbWF0Y2hfc3RhdF93aXRoX3N1Ym1vZHVsZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0LAorCQkJCSAgICAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCwKKwkJCQkgICAgICB1bnNpZ25lZCBjZV9vcHRpb24sIHVuc2lnbmVkICpkaXJ0eV9zdWJtb2R1bGUpCit7CisJaW50IGNoYW5nZWQgPSBjZV9tYXRjaF9zdGF0KGNlLCBzdCwgY2Vfb3B0aW9uKTsKKwlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKSB7CisJCXVuc2lnbmVkIG9yaWdfZmxhZ3MgPSBkaWZmb3B0LT5mbGFnczsKKwkJaWYgKCFESUZGX09QVF9UU1QoZGlmZm9wdCwgT1ZFUlJJREVfU1VCTU9EVUxFX0NPTkZJRykpCisJCQlzZXRfZGlmZm9wdF9mbGFnc19mcm9tX3N1Ym1vZHVsZV9jb25maWcoZGlmZm9wdCwgY2UtPm5hbWUpOworCQlpZiAoRElGRl9PUFRfVFNUKGRpZmZvcHQsIElHTk9SRV9TVUJNT0RVTEVTKSkKKwkJCWNoYW5nZWQgPSAwOworCQllbHNlIGlmICghRElGRl9PUFRfVFNUKGRpZmZvcHQsIElHTk9SRV9ESVJUWV9TVUJNT0RVTEVTKQorCQkgICAgJiYgKCFjaGFuZ2VkIHx8IERJRkZfT1BUX1RTVChkaWZmb3B0LCBESVJUWV9TVUJNT0RVTEVTKSkpCisJCQkqZGlydHlfc3VibW9kdWxlID0gaXNfc3VibW9kdWxlX21vZGlmaWVkKGNlLT5uYW1lLCBESUZGX09QVF9UU1QoZGlmZm9wdCwgSUdOT1JFX1VOVFJBQ0tFRF9JTl9TVUJNT0RVTEVTKSk7CisJCWRpZmZvcHQtPmZsYWdzID0gb3JpZ19mbGFnczsKKwl9CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2ludCBydW5fZGlmZl9maWxlcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGludCBvcHRpb24pCit7CisJaW50IGVudHJpZXMsIGk7CisJaW50IGRpZmZfdW5tZXJnZWRfc3RhZ2UgPSByZXZzLT5tYXhfY291bnQ7CisJaW50IHNpbGVudF9vbl9yZW1vdmVkID0gb3B0aW9uICYgRElGRl9TSUxFTlRfT05fUkVNT1ZFRDsKKwl1bnNpZ25lZCBjZV9vcHRpb24gPSAoKG9wdGlvbiAmIERJRkZfUkFDWV9JU19NT0RJRklFRCkKKwkJCSAgICAgID8gQ0VfTUFUQ0hfUkFDWV9JU19ESVJUWSA6IDApOworCisJZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KCZyZXZzLT5kaWZmb3B0LCAiaS8iLCAidy8iKTsKKworCWlmIChkaWZmX3VubWVyZ2VkX3N0YWdlIDwgMCkKKwkJZGlmZl91bm1lcmdlZF9zdGFnZSA9IDI7CisJZW50cmllcyA9IGFjdGl2ZV9ucjsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQl1bnNpZ25lZCBpbnQgb2xkbW9kZSwgbmV3bW9kZTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJaW50IGNoYW5nZWQ7CisJCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSA9IDA7CisKKwkJaWYgKGRpZmZfY2FuX3F1aXRfZWFybHkoJnJldnMtPmRpZmZvcHQpKQorCQkJYnJlYWs7CisKKwkJaWYgKCFjZV9wYXRoX21hdGNoKGNlLCAmcmV2cy0+cHJ1bmVfZGF0YSkpCisJCQljb250aW51ZTsKKworCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCQlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmRwYXRoOworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXI7CisJCQl1bnNpZ25lZCBpbnQgd3RfbW9kZSA9IDA7CisJCQlpbnQgbnVtX2NvbXBhcmVfc3RhZ2VzID0gMDsKKwkJCXNpemVfdCBwYXRoX2xlbjsKKworCQkJcGF0aF9sZW4gPSBjZV9uYW1lbGVuKGNlKTsKKworCQkJZHBhdGggPSB4bWFsbG9jKGNvbWJpbmVfZGlmZl9wYXRoX3NpemUoNSwgcGF0aF9sZW4pKTsKKwkJCWRwYXRoLT5wYXRoID0gKGNoYXIgKikgJihkcGF0aC0+cGFyZW50WzVdKTsKKworCQkJZHBhdGgtPm5leHQgPSBOVUxMOworCQkJZHBhdGgtPmxlbiA9IHBhdGhfbGVuOworCQkJbWVtY3B5KGRwYXRoLT5wYXRoLCBjZS0+bmFtZSwgcGF0aF9sZW4pOworCQkJZHBhdGgtPnBhdGhbcGF0aF9sZW5dID0gJ1wwJzsKKwkJCWhhc2hjbHIoZHBhdGgtPnNoYTEpOworCQkJbWVtc2V0KCYoZHBhdGgtPnBhcmVudFswXSksIDAsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjb21iaW5lX2RpZmZfcGFyZW50KSo1KTsKKworCQkJY2hhbmdlZCA9IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CisJCQlpZiAoIWNoYW5nZWQpCisJCQkJd3RfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KGNlLCBzdC5zdF9tb2RlKTsKKwkJCWVsc2UgeworCQkJCWlmIChjaGFuZ2VkIDwgMCkgeworCQkJCQlwZXJyb3IoY2UtPm5hbWUpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKHNpbGVudF9vbl9yZW1vdmVkKQorCQkJCQljb250aW51ZTsKKwkJCQl3dF9tb2RlID0gMDsKKwkJCX0KKwkJCWRwYXRoLT5tb2RlID0gd3RfbW9kZTsKKworCQkJd2hpbGUgKGkgPCBlbnRyaWVzKSB7CisJCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpuY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCQkJaW50IHN0YWdlOworCisJCQkJaWYgKHN0cmNtcChjZS0+bmFtZSwgbmNlLT5uYW1lKSkKKwkJCQkJYnJlYWs7CisKKwkJCQkvKiBTdGFnZSAjMiAob3VycykgaXMgdGhlIGZpcnN0IHBhcmVudCwKKwkJCQkgKiBzdGFnZSAjMyAodGhlaXJzKSBpcyB0aGUgc2Vjb25kLgorCQkJCSAqLworCQkJCXN0YWdlID0gY2Vfc3RhZ2UobmNlKTsKKwkJCQlpZiAoMiA8PSBzdGFnZSkgeworCQkJCQlpbnQgbW9kZSA9IG5jZS0+Y2VfbW9kZTsKKwkJCQkJbnVtX2NvbXBhcmVfc3RhZ2VzKys7CisJCQkJCWhhc2hjcHkoZHBhdGgtPnBhcmVudFtzdGFnZS0yXS5zaGExLCBuY2UtPnNoYTEpOworCQkJCQlkcGF0aC0+cGFyZW50W3N0YWdlLTJdLm1vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChuY2UsIG1vZGUpOworCQkJCQlkcGF0aC0+cGFyZW50W3N0YWdlLTJdLnN0YXR1cyA9CisJCQkJCQlESUZGX1NUQVRVU19NT0RJRklFRDsKKwkJCQl9CisKKwkJCQkvKiBkaWZmIGFnYWluc3QgdGhlIHByb3BlciB1bm1lcmdlZCBzdGFnZSAqLworCQkJCWlmIChzdGFnZSA9PSBkaWZmX3VubWVyZ2VkX3N0YWdlKQorCQkJCQljZSA9IG5jZTsKKwkJCQlpKys7CisJCQl9CisJCQkvKgorCQkJICogQ29tcGVuc2F0ZSBmb3IgbG9vcCB1cGRhdGUKKwkJCSAqLworCQkJaS0tOworCisJCQlpZiAocmV2cy0+Y29tYmluZV9tZXJnZXMgJiYgbnVtX2NvbXBhcmVfc3RhZ2VzID09IDIpIHsKKwkJCQlzaG93X2NvbWJpbmVkX2RpZmYoZHBhdGgsIDIsCisJCQkJCQkgICByZXZzLT5kZW5zZV9jb21iaW5lZF9tZXJnZXMsCisJCQkJCQkgICByZXZzKTsKKwkJCQlmcmVlKGRwYXRoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWZyZWUoZHBhdGgpOworCQkJZHBhdGggPSBOVUxMOworCisJCQkvKgorCQkJICogU2hvdyB0aGUgZGlmZiBmb3IgdGhlICdjZScgaWYgd2UgZm91bmQgdGhlIG9uZQorCQkJICogZnJvbSB0aGUgZGVzaXJlZCBzdGFnZS4KKwkJCSAqLworCQkJcGFpciA9IGRpZmZfdW5tZXJnZSgmcmV2cy0+ZGlmZm9wdCwgY2UtPm5hbWUpOworCQkJaWYgKHd0X21vZGUpCisJCQkJcGFpci0+dHdvLT5tb2RlID0gd3RfbW9kZTsKKwkJCWlmIChjZV9zdGFnZShjZSkgIT0gZGlmZl91bm1lcmdlZF9zdGFnZSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjZV91cHRvZGF0ZShjZSkgfHwgY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCQljb250aW51ZTsKKworCQkvKiBJZiBDRV9WQUxJRCBpcyBzZXQsIGRvbid0IGxvb2sgYXQgd29ya2RpciBmb3IgZmlsZSByZW1vdmFsICovCisJCWNoYW5nZWQgPSAoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpID8gMCA6IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CisJCWlmIChjaGFuZ2VkKSB7CisJCQlpZiAoY2hhbmdlZCA8IDApIHsKKwkJCQlwZXJyb3IoY2UtPm5hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHNpbGVudF9vbl9yZW1vdmVkKQorCQkJCWNvbnRpbnVlOworCQkJZGlmZl9hZGRyZW1vdmUoJnJldnMtPmRpZmZvcHQsICctJywgY2UtPmNlX21vZGUsCisJCQkJICAgICAgIGNlLT5zaGExLCAhaXNfbnVsbF9zaGExKGNlLT5zaGExKSwKKwkJCQkgICAgICAgY2UtPm5hbWUsIDApOworCQkJY29udGludWU7CisJCX0KKwkJY2hhbmdlZCA9IG1hdGNoX3N0YXRfd2l0aF9zdWJtb2R1bGUoJnJldnMtPmRpZmZvcHQsIGNlLCAmc3QsCisJCQkJCQkgICAgY2Vfb3B0aW9uLCAmZGlydHlfc3VibW9kdWxlKTsKKwkJaWYgKCFjaGFuZ2VkICYmICFkaXJ0eV9zdWJtb2R1bGUpIHsKKwkJCWNlX21hcmtfdXB0b2RhdGUoY2UpOworCQkJaWYgKCFESUZGX09QVF9UU1QoJnJldnMtPmRpZmZvcHQsIEZJTkRfQ09QSUVTX0hBUkRFUikpCisJCQkJY29udGludWU7CisJCX0KKwkJb2xkbW9kZSA9IGNlLT5jZV9tb2RlOworCQluZXdtb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpOworCQlkaWZmX2NoYW5nZSgmcmV2cy0+ZGlmZm9wdCwgb2xkbW9kZSwgbmV3bW9kZSwKKwkJCSAgICBjZS0+c2hhMSwgKGNoYW5nZWQgPyBudWxsX3NoYTEgOiBjZS0+c2hhMSksCisJCQkgICAgIWlzX251bGxfc2hhMShjZS0+c2hhMSksIChjaGFuZ2VkID8gMCA6ICFpc19udWxsX3NoYTEoY2UtPnNoYTEpKSwKKwkJCSAgICBjZS0+bmFtZSwgMCwgZGlydHlfc3VibW9kdWxlKTsKKworCX0KKwlkaWZmY29yZV9zdGQoJnJldnMtPmRpZmZvcHQpOworCWRpZmZfZmx1c2goJnJldnMtPmRpZmZvcHQpOworCXJldHVybiAwOworfQorCisvKgorICogZGlmZi1pbmRleAorICovCisKKy8qIEEgZmlsZSBlbnRyeSB3ZW50IGF3YXkgb3IgYXBwZWFyZWQgKi8KK3N0YXRpYyB2b2lkIGRpZmZfaW5kZXhfc2hvd19maWxlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgc2hhMV92YWxpZCwKKwkJCQkgdW5zaWduZWQgaW50IG1vZGUsCisJCQkJIHVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSkKK3sKKwlkaWZmX2FkZHJlbW92ZSgmcmV2cy0+ZGlmZm9wdCwgcHJlZml4WzBdLCBtb2RlLAorCQkgICAgICAgc2hhMSwgc2hhMV92YWxpZCwgY2UtPm5hbWUsIGRpcnR5X3N1Ym1vZHVsZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3N0YXRfZGF0YShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipzaGExcCwKKwkJCSB1bnNpZ25lZCBpbnQgKm1vZGVwLAorCQkJIGludCBjYWNoZWQsIGludCBtYXRjaF9taXNzaW5nLAorCQkJIHVuc2lnbmVkICpkaXJ0eV9zdWJtb2R1bGUsIHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9IGNlLT5zaGExOworCXVuc2lnbmVkIGludCBtb2RlID0gY2UtPmNlX21vZGU7CisKKwlpZiAoIWNhY2hlZCAmJiAhY2VfdXB0b2RhdGUoY2UpKSB7CisJCWludCBjaGFuZ2VkOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJY2hhbmdlZCA9IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CisJCWlmIChjaGFuZ2VkIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJZWxzZSBpZiAoY2hhbmdlZCkgeworCQkJaWYgKG1hdGNoX21pc3NpbmcpIHsKKwkJCQkqc2hhMXAgPSBzaGExOworCQkJCSptb2RlcCA9IG1vZGU7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJY2hhbmdlZCA9IG1hdGNoX3N0YXRfd2l0aF9zdWJtb2R1bGUoZGlmZm9wdCwgY2UsICZzdCwKKwkJCQkJCSAgICAwLCBkaXJ0eV9zdWJtb2R1bGUpOworCQlpZiAoY2hhbmdlZCkgeworCQkJbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KGNlLCBzdC5zdF9tb2RlKTsKKwkJCXNoYTEgPSBudWxsX3NoYTE7CisJCX0KKwl9CisKKwkqc2hhMXAgPSBzaGExOworCSptb2RlcCA9IG1vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbmV3X2ZpbGUoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICBzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ldywKKwkJCSAgaW50IGNhY2hlZCwgaW50IG1hdGNoX21pc3NpbmcpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgPSAwOworCisJLyoKKwkgKiBOZXcgZmlsZSBpbiB0aGUgaW5kZXg6IGl0IG1pZ2h0IGFjdHVhbGx5IGJlIGRpZmZlcmVudCBpbgorCSAqIHRoZSB3b3JraW5nIHRyZWUuCisJICovCisJaWYgKGdldF9zdGF0X2RhdGEobmV3LCAmc2hhMSwgJm1vZGUsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZywKKwkgICAgJmRpcnR5X3N1Ym1vZHVsZSwgJnJldnMtPmRpZmZvcHQpIDwgMCkKKwkJcmV0dXJuOworCisJZGlmZl9pbmRleF9zaG93X2ZpbGUocmV2cywgIisiLCBuZXcsIHNoYTEsICFpc19udWxsX3NoYTEoc2hhMSksIG1vZGUsIGRpcnR5X3N1Ym1vZHVsZSk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19tb2RpZmllZChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCQkgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXcsCisJCQkgaW50IHJlcG9ydF9taXNzaW5nLAorCQkJIGludCBjYWNoZWQsIGludCBtYXRjaF9taXNzaW5nKQoreworCXVuc2lnbmVkIGludCBtb2RlLCBvbGRtb2RlOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CisJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlID0gMDsKKworCWlmIChnZXRfc3RhdF9kYXRhKG5ldywgJnNoYTEsICZtb2RlLCBjYWNoZWQsIG1hdGNoX21pc3NpbmcsCisJCQkgICZkaXJ0eV9zdWJtb2R1bGUsICZyZXZzLT5kaWZmb3B0KSA8IDApIHsKKwkJaWYgKHJlcG9ydF9taXNzaW5nKQorCQkJZGlmZl9pbmRleF9zaG93X2ZpbGUocmV2cywgIi0iLCBvbGQsCisJCQkJCSAgICAgb2xkLT5zaGExLCAxLCBvbGQtPmNlX21vZGUsIDApOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHJldnMtPmNvbWJpbmVfbWVyZ2VzICYmICFjYWNoZWQgJiYKKwkgICAgKGhhc2hjbXAoc2hhMSwgb2xkLT5zaGExKSB8fCBoYXNoY21wKG9sZC0+c2hhMSwgbmV3LT5zaGExKSkpIHsKKwkJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwOworCQlpbnQgcGF0aGxlbiA9IGNlX25hbWVsZW4obmV3KTsKKworCQlwID0geG1hbGxvYyhjb21iaW5lX2RpZmZfcGF0aF9zaXplKDIsIHBhdGhsZW4pKTsKKwkJcC0+cGF0aCA9IChjaGFyICopICZwLT5wYXJlbnRbMl07CisJCXAtPm5leHQgPSBOVUxMOworCQlwLT5sZW4gPSBwYXRobGVuOworCQltZW1jcHkocC0+cGF0aCwgbmV3LT5uYW1lLCBwYXRobGVuKTsKKwkJcC0+cGF0aFtwYXRobGVuXSA9IDA7CisJCXAtPm1vZGUgPSBtb2RlOworCQloYXNoY2xyKHAtPnNoYTEpOworCQltZW1zZXQocC0+cGFyZW50LCAwLCAyICogc2l6ZW9mKHN0cnVjdCBjb21iaW5lX2RpZmZfcGFyZW50KSk7CisJCXAtPnBhcmVudFswXS5zdGF0dXMgPSBESUZGX1NUQVRVU19NT0RJRklFRDsKKwkJcC0+cGFyZW50WzBdLm1vZGUgPSBuZXctPmNlX21vZGU7CisJCWhhc2hjcHkocC0+cGFyZW50WzBdLnNoYTEsIG5ldy0+c2hhMSk7CisJCXAtPnBhcmVudFsxXS5zdGF0dXMgPSBESUZGX1NUQVRVU19NT0RJRklFRDsKKwkJcC0+cGFyZW50WzFdLm1vZGUgPSBvbGQtPmNlX21vZGU7CisJCWhhc2hjcHkocC0+cGFyZW50WzFdLnNoYTEsIG9sZC0+c2hhMSk7CisJCXNob3dfY29tYmluZWRfZGlmZihwLCAyLCByZXZzLT5kZW5zZV9jb21iaW5lZF9tZXJnZXMsIHJldnMpOworCQlmcmVlKHApOworCQlyZXR1cm4gMDsKKwl9CisKKwlvbGRtb2RlID0gb2xkLT5jZV9tb2RlOworCWlmIChtb2RlID09IG9sZG1vZGUgJiYgIWhhc2hjbXAoc2hhMSwgb2xkLT5zaGExKSAmJiAhZGlydHlfc3VibW9kdWxlICYmCisJICAgICFESUZGX09QVF9UU1QoJnJldnMtPmRpZmZvcHQsIEZJTkRfQ09QSUVTX0hBUkRFUikpCisJCXJldHVybiAwOworCisJZGlmZl9jaGFuZ2UoJnJldnMtPmRpZmZvcHQsIG9sZG1vZGUsIG1vZGUsCisJCSAgICBvbGQtPnNoYTEsIHNoYTEsIDEsICFpc19udWxsX3NoYTEoc2hhMSksCisJCSAgICBvbGQtPm5hbWUsIDAsIGRpcnR5X3N1Ym1vZHVsZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGdldHMgYSBtaXggb2YgYW4gZXhpc3RpbmcgaW5kZXggYW5kIGEgdHJlZSwgb25lIHBhdGhuYW1lIGVudHJ5CisgKiBhdCBhIHRpbWUuIFRoZSBpbmRleCBlbnRyeSBtYXkgYmUgYSBzaW5nbGUgc3RhZ2UtMCBvbmUsIGJ1dCBpdCBjb3VsZAorICogYWxzbyBiZSBtdWx0aXBsZSB1bm1lcmdlZCBlbnRyaWVzIChpbiB3aGljaCBjYXNlIGlkeF9wb3MvaWR4X25yIHdpbGwKKyAqIGdpdmUgeW91IHRoZSBwb3NpdGlvbiBhbmQgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGluZGV4KS4KKyAqLworc3RhdGljIHZvaWQgZG9fb25ld2F5X2RpZmYoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLAorCXN0cnVjdCBjYWNoZV9lbnRyeSAqaWR4LAorCXN0cnVjdCBjYWNoZV9lbnRyeSAqdHJlZSkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBvLT51bnBhY2tfZGF0YTsKKwlpbnQgbWF0Y2hfbWlzc2luZywgY2FjaGVkOworCisJLyogaWYgdGhlIGVudHJ5IGlzIG5vdCBjaGVja2VkIG91dCwgZG9uJ3QgZXhhbWluZSB3b3JrIHRyZWUgKi8KKwljYWNoZWQgPSBvLT5pbmRleF9vbmx5IHx8CisJCShpZHggJiYgKChpZHgtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpIHx8IGNlX3NraXBfd29ya3RyZWUoaWR4KSkpOworCS8qCisJICogQmFja3dhcmQgY29tcGF0aWJpbGl0eSB3YXJ0IC0gImRpZmYtaW5kZXggLW0iIGRvZXMKKwkgKiBub3QgbWVhbiAiZG8gbm90IGlnbm9yZSBtZXJnZXMiLCBidXQgIm1hdGNoX21pc3NpbmciLgorCSAqCisJICogQnV0IHdpdGggdGhlIHJldmlzaW9uIGZsYWcgcGFyc2luZywgdGhhdCdzIGZvdW5kIGluCisJICogIiFyZXZzLT5pZ25vcmVfbWVyZ2VzIi4KKwkgKi8KKwltYXRjaF9taXNzaW5nID0gIXJldnMtPmlnbm9yZV9tZXJnZXM7CisKKwlpZiAoY2FjaGVkICYmIGlkeCAmJiBjZV9zdGFnZShpZHgpKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyOworCQlwYWlyID0gZGlmZl91bm1lcmdlKCZyZXZzLT5kaWZmb3B0LCBpZHgtPm5hbWUpOworCQlpZiAodHJlZSkKKwkJCWZpbGxfZmlsZXNwZWMocGFpci0+b25lLCB0cmVlLT5zaGExLCAxLCB0cmVlLT5jZV9tb2RlKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU29tZXRoaW5nIGFkZGVkIHRvIHRoZSB0cmVlPworCSAqLworCWlmICghdHJlZSkgeworCQlzaG93X25ld19maWxlKHJldnMsIGlkeCwgY2FjaGVkLCBtYXRjaF9taXNzaW5nKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU29tZXRoaW5nIHJlbW92ZWQgZnJvbSB0aGUgdHJlZT8KKwkgKi8KKwlpZiAoIWlkeCkgeworCQlkaWZmX2luZGV4X3Nob3dfZmlsZShyZXZzLCAiLSIsIHRyZWUsIHRyZWUtPnNoYTEsIDEsIHRyZWUtPmNlX21vZGUsIDApOworCQlyZXR1cm47CisJfQorCisJLyogU2hvdyBkaWZmZXJlbmNlIGJldHdlZW4gb2xkIGFuZCBuZXcgKi8KKwlzaG93X21vZGlmaWVkKHJldnMsIHRyZWUsIGlkeCwgMSwgY2FjaGVkLCBtYXRjaF9taXNzaW5nKTsKK30KKworLyoKKyAqIFRoZSB1bnBhY2tfdHJlZXMoKSBpbnRlcmZhY2UgaXMgZGVzaWduZWQgZm9yIG1lcmdpbmcsIHNvCisgKiB0aGUgZGlmZmVyZW50IHNvdXJjZSBlbnRyaWVzIGFyZSBkZXNpZ25lZCBwcmltYXJpbHkgZm9yCisgKiB0aGUgc291cmNlIHRyZWVzLCB3aXRoIHRoZSBvbGQgaW5kZXggYmVpbmcgcmVhbGx5IG1haW5seQorICogdXNlZCBmb3IgYmVpbmcgcmVwbGFjZWQgYnkgdGhlIHJlc3VsdC4KKyAqCisgKiBGb3IgZGlmZmluZywgdGhlIGluZGV4IGlzIG1vcmUgaW1wb3J0YW50LCBhbmQgd2Ugb25seSBoYXZlIGEKKyAqIHNpbmdsZSB0cmVlLgorICoKKyAqIFdlJ3JlIHN1cHBvc2VkIHRvIGFkdmFuY2Ugby0+cG9zIHRvIHNraXAgd2hhdCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkLgorICoKKyAqIFRoaXMgd3JhcHBlciBtYWtlcyBpdCBhbGwgbW9yZSByZWFkYWJsZSwgYW5kIHRha2VzIGNhcmUgb2YgYWxsCisgKiB0aGUgZmFpcmx5IGNvbXBsZXggdW5wYWNrX3RyZWVzKCkgc2VtYW50aWMgcmVxdWlyZW1lbnRzLCBpbmNsdWRpbmcKKyAqIHRoZSBza2lwcGluZywgdGhlIHBhdGggbWF0Y2hpbmcsIHRoZSB0eXBlIGNvbmZsaWN0IGNhc2VzIGV0Yy4KKyAqLworc3RhdGljIGludCBvbmV3YXlfZGlmZihzdHJ1Y3QgY2FjaGVfZW50cnkgKipzcmMsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmlkeCA9IHNyY1swXTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKnRyZWUgPSBzcmNbMV07CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gby0+dW5wYWNrX2RhdGE7CisKKwkvKgorCSAqIFVucGFjay10cmVlcyBnZW5lcmF0ZXMgYSBERi9jb25mbGljdCBlbnRyeSBpZgorCSAqIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBpbiB0aGUgaW5kZXggYW5kIGEgdHJlZQorCSAqIGluIHRoZSB0cmVlLiBGcm9tIGEgZGlmZiBzdGFuZHBvaW50LCB0aGF0J3MgYQorCSAqIGRlbGV0ZSBvZiB0aGUgdHJlZSBhbmQgYSBjcmVhdGUgb2YgdGhlIGZpbGUuCisJICovCisJaWYgKHRyZWUgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCXRyZWUgPSBOVUxMOworCisJaWYgKGNlX3BhdGhfbWF0Y2goaWR4ID8gaWR4IDogdHJlZSwgJnJldnMtPnBydW5lX2RhdGEpKSB7CisJCWRvX29uZXdheV9kaWZmKG8sIGlkeCwgdHJlZSk7CisJCWlmIChkaWZmX2Nhbl9xdWl0X2Vhcmx5KCZyZXZzLT5kaWZmb3B0KSkgeworCQkJby0+ZXhpdGluZ19lYXJseSA9IDE7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX2NhY2hlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZV9zaGExLAorCQkgICAgICBjb25zdCBjaGFyICp0cmVlX25hbWUsCisJCSAgICAgIGludCBjYWNoZWQpCit7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCisJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QodHJlZV9zaGExKTsKKwlpZiAoIXRyZWUpCisJCXJldHVybiBlcnJvcigiYmFkIHRyZWUgb2JqZWN0ICVzIiwKKwkJCSAgICAgdHJlZV9uYW1lID8gdHJlZV9uYW1lIDogc2hhMV90b19oZXgodHJlZV9zaGExKSk7CisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuaGVhZF9pZHggPSAxOworCW9wdHMuaW5kZXhfb25seSA9IGNhY2hlZDsKKwlvcHRzLmRpZmZfaW5kZXhfY2FjaGVkID0gKGNhY2hlZCAmJgorCQkJCSAgIURJRkZfT1BUX1RTVCgmcmV2cy0+ZGlmZm9wdCwgRklORF9DT1BJRVNfSEFSREVSKSk7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5mbiA9IG9uZXdheV9kaWZmOworCW9wdHMudW5wYWNrX2RhdGEgPSByZXZzOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9IE5VTEw7CisJb3B0cy5wYXRoc3BlYyA9ICZyZXZzLT5kaWZmb3B0LnBhdGhzcGVjOworCW9wdHMucGF0aHNwZWMtPnJlY3Vyc2l2ZSA9IDE7CisJb3B0cy5wYXRoc3BlYy0+bWF4X2RlcHRoID0gLTE7CisKKwlpbml0X3RyZWVfZGVzYygmdCwgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwlyZXR1cm4gdW5wYWNrX3RyZWVzKDEsICZ0LCAmb3B0cyk7Cit9CisKK2ludCBydW5fZGlmZl9pbmRleChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBjYWNoZWQpCit7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50OworCisJZW50ID0gcmV2cy0+cGVuZGluZy5vYmplY3RzOworCWlmIChkaWZmX2NhY2hlKHJldnMsIGVudC0+aXRlbS0+c2hhMSwgZW50LT5uYW1lLCBjYWNoZWQpKQorCQlleGl0KDEyOCk7CisKKwlkaWZmX3NldF9tbmVtb25pY19wcmVmaXgoJnJldnMtPmRpZmZvcHQsICJjLyIsIGNhY2hlZCA/ICJpLyIgOiAidy8iKTsKKwlkaWZmY29yZV9maXhfZGlmZl9pbmRleCgmcmV2cy0+ZGlmZm9wdCk7CisJZGlmZmNvcmVfc3RkKCZyZXZzLT5kaWZmb3B0KTsKKwlkaWZmX2ZsdXNoKCZyZXZzLT5kaWZmb3B0KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRvX2RpZmZfY2FjaGUoY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZV9zaGExLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJaW5pdF9wYXRoc3BlYygmcmV2cy5wcnVuZV9kYXRhLCBvcHQtPnBhdGhzcGVjLnJhdyk7CisJcmV2cy5kaWZmb3B0ID0gKm9wdDsKKworCWlmIChkaWZmX2NhY2hlKCZyZXZzLCB0cmVlX3NoYTEsIE5VTEwsIDEpKQorCQlleGl0KDEyOCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBpbmRleF9kaWZmZXJzX2Zyb20oY29uc3QgY2hhciAqZGVmLCBpbnQgZGlmZl9mbGFncykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gZGVmOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCAmb3B0KTsKKwlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBRVUlDSyk7CisJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgRVhJVF9XSVRIX1NUQVRVUyk7CisJcmV2LmRpZmZvcHQuZmxhZ3MgfD0gZGlmZl9mbGFnczsKKwlydW5fZGlmZl9pbmRleCgmcmV2LCAxKTsKKwlpZiAocmV2LnBlbmRpbmcuYWxsb2MpCisJCWZyZWUocmV2LnBlbmRpbmcub2JqZWN0cyk7CisJcmV0dXJuIChESUZGX09QVF9UU1QoJnJldi5kaWZmb3B0LCBIQVNfQ0hBTkdFUykgIT0gMCk7Cit9CmRpZmYgLS1naXQgYS9kaWZmLW5vLWluZGV4LmMgYi9kaWZmLW5vLWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkYTY1OQotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYtbm8taW5kZXguYwpAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqICJkaWZmIC0tbm8taW5kZXgiIHN1cHBvcnQKKyAqIENvcHlyaWdodCAoYykgMjAwNyBieSBKb2hhbm5lcyBTY2hpbmRlbGluCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggYnkgSnVuaW8gQyBIYW1hbm8KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmU7CisKKwlpZiAoIShkaXIgPSBvcGVuZGlyKHBhdGgpKSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJXMiLCBwYXRoKTsKKworCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkpCisJCWlmIChzdHJjbXAoIi4iLCBlLT5kX25hbWUpICYmIHN0cmNtcCgiLi4iLCBlLT5kX25hbWUpKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KGxpc3QsIGUtPmRfbmFtZSk7CisKKwljbG9zZWRpcihkaXIpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBzaG91bGQgYmUgIihzdGFuZGFyZCBpbnB1dCkiIG9yIHNvbWV0aGluZywgYnV0IGl0IHdpbGwKKyAqIHByb2JhYmx5IGV4cG9zZSBtYW55IG1vcmUgYnJlYWthZ2VzIGluIHRoZSB3YXkgbm8taW5kZXggY29kZQorICogaXMgYm9sdGVkIG9udG8gdGhlIGRpZmYgY2FsbGNoYWluLgorICovCitzdGF0aWMgY29uc3QgY2hhciBmaWxlX2Zyb21fc3RhbmRhcmRfaW5wdXRbXSA9ICItIjsKKworc3RhdGljIGludCBnZXRfbW9kZShjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1vZGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIXBhdGggfHwgIXN0cmNtcChwYXRoLCAiL2Rldi9udWxsIikpCisJCSptb2RlID0gMDsKKyNpZmRlZiBfV0lOMzIKKwllbHNlIGlmICghc3RyY2FzZWNtcChwYXRoLCAibnVsIikpCisJCSptb2RlID0gMDsKKyNlbmRpZgorCWVsc2UgaWYgKHBhdGggPT0gZmlsZV9mcm9tX3N0YW5kYXJkX2lucHV0KQorCQkqbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKDA2NjYpOworCWVsc2UgaWYgKGxzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGFjY2VzcyAnJXMnIiwgcGF0aCk7CisJZWxzZQorCQkqbW9kZSA9IHN0LnN0X21vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9wdWxhdGVfZnJvbV9zdGRpbihzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBzaXplID0gMDsKKworCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAwKSA8IDApCisJCXJldHVybiBlcnJvcigiZXJyb3Igd2hpbGUgcmVhZGluZyBmcm9tIHN0ZGluICVzIiwKKwkJCQkgICAgIHN0cmVycm9yKGVycm5vKSk7CisKKwlzLT5zaG91bGRfbXVubWFwID0gMDsKKwlzLT5kYXRhID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc2l6ZSk7CisJcy0+c2l6ZSA9IHNpemU7CisJcy0+c2hvdWxkX2ZyZWUgPSAxOworCXMtPmlzX3N0ZGluID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpub2luZGV4X2ZpbGVzcGVjKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzOworCisJaWYgKCFuYW1lKQorCQluYW1lID0gIi9kZXYvbnVsbCI7CisJcyA9IGFsbG9jX2ZpbGVzcGVjKG5hbWUpOworCWZpbGxfZmlsZXNwZWMocywgbnVsbF9zaGExLCAwLCBtb2RlKTsKKwlpZiAobmFtZSA9PSBmaWxlX2Zyb21fc3RhbmRhcmRfaW5wdXQpCisJCXBvcHVsYXRlX2Zyb21fc3RkaW4ocyk7CisJcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBpbnQgcXVldWVfZGlmZihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lMSwgY29uc3QgY2hhciAqbmFtZTIpCit7CisJaW50IG1vZGUxID0gMCwgbW9kZTIgPSAwOworCisJaWYgKGdldF9tb2RlKG5hbWUxLCAmbW9kZTEpIHx8IGdldF9tb2RlKG5hbWUyLCAmbW9kZTIpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobW9kZTEgJiYgbW9kZTIgJiYgU19JU0RJUihtb2RlMSkgIT0gU19JU0RJUihtb2RlMikpCisJCXJldHVybiBlcnJvcigiZmlsZS9kaXJlY3RvcnkgY29uZmxpY3Q6ICVzLCAlcyIsIG5hbWUxLCBuYW1lMik7CisKKwlpZiAoU19JU0RJUihtb2RlMSkgfHwgU19JU0RJUihtb2RlMikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWZmZXIxID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgYnVmZmVyMiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcDEgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJc3RydWN0IHN0cmluZ19saXN0IHAyID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCWludCBpMSwgaTIsIHJldCA9IDA7CisJCXNpemVfdCBsZW4xID0gMCwgbGVuMiA9IDA7CisKKwkJaWYgKG5hbWUxICYmIHJlYWRfZGlyZWN0b3J5KG5hbWUxLCAmcDEpKQorCQkJcmV0dXJuIC0xOworCQlpZiAobmFtZTIgJiYgcmVhZF9kaXJlY3RvcnkobmFtZTIsICZwMikpIHsKKwkJCXN0cmluZ19saXN0X2NsZWFyKCZwMSwgMCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAobmFtZTEpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZmZlcjEsIG5hbWUxKTsKKwkJCWlmIChidWZmZXIxLmxlbiAmJiBidWZmZXIxLmJ1ZltidWZmZXIxLmxlbiAtIDFdICE9ICcvJykKKwkJCQlzdHJidWZfYWRkY2goJmJ1ZmZlcjEsICcvJyk7CisJCQlsZW4xID0gYnVmZmVyMS5sZW47CisJCX0KKworCQlpZiAobmFtZTIpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZmZlcjIsIG5hbWUyKTsKKwkJCWlmIChidWZmZXIyLmxlbiAmJiBidWZmZXIyLmJ1ZltidWZmZXIyLmxlbiAtIDFdICE9ICcvJykKKwkJCQlzdHJidWZfYWRkY2goJmJ1ZmZlcjIsICcvJyk7CisJCQlsZW4yID0gYnVmZmVyMi5sZW47CisJCX0KKworCQlmb3IgKGkxID0gaTIgPSAwOyAhcmV0ICYmIChpMSA8IHAxLm5yIHx8IGkyIDwgcDIubnIpOyApIHsKKwkJCWNvbnN0IGNoYXIgKm4xLCAqbjI7CisJCQlpbnQgY29tcDsKKworCQkJc3RyYnVmX3NldGxlbigmYnVmZmVyMSwgbGVuMSk7CisJCQlzdHJidWZfc2V0bGVuKCZidWZmZXIyLCBsZW4yKTsKKworCQkJaWYgKGkxID09IHAxLm5yKQorCQkJCWNvbXAgPSAxOworCQkJZWxzZSBpZiAoaTIgPT0gcDIubnIpCisJCQkJY29tcCA9IC0xOworCQkJZWxzZQorCQkJCWNvbXAgPSBzdHJjbXAocDEuaXRlbXNbaTFdLnN0cmluZywgcDIuaXRlbXNbaTJdLnN0cmluZyk7CisKKwkJCWlmIChjb21wID4gMCkKKwkJCQluMSA9IE5VTEw7CisJCQllbHNlIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWZmZXIxLCBwMS5pdGVtc1tpMSsrXS5zdHJpbmcpOworCQkJCW4xID0gYnVmZmVyMS5idWY7CisJCQl9CisKKwkJCWlmIChjb21wIDwgMCkKKwkJCQluMiA9IE5VTEw7CisJCQllbHNlIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWZmZXIyLCBwMi5pdGVtc1tpMisrXS5zdHJpbmcpOworCQkJCW4yID0gYnVmZmVyMi5idWY7CisJCQl9CisKKwkJCXJldCA9IHF1ZXVlX2RpZmYobywgbjEsIG4yKTsKKwkJfQorCQlzdHJpbmdfbGlzdF9jbGVhcigmcDEsIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmcDIsIDApOworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyMSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIyKTsKKworCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkMSwgKmQyOworCisJCWlmIChESUZGX09QVF9UU1QobywgUkVWRVJTRV9ESUZGKSkgeworCQkJdW5zaWduZWQgdG1wOworCQkJY29uc3QgY2hhciAqdG1wX2M7CisJCQl0bXAgPSBtb2RlMTsgbW9kZTEgPSBtb2RlMjsgbW9kZTIgPSB0bXA7CisJCQl0bXBfYyA9IG5hbWUxOyBuYW1lMSA9IG5hbWUyOyBuYW1lMiA9IHRtcF9jOworCQl9CisKKwkJZDEgPSBub2luZGV4X2ZpbGVzcGVjKG5hbWUxLCBtb2RlMSk7CisJCWQyID0gbm9pbmRleF9maWxlc3BlYyhuYW1lMiwgbW9kZTIpOworCQlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBkMSwgZDIpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3ZvaWQgZGlmZl9ub19pbmRleChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCSAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJICAgaW50IG5vbmdpdCwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBwcmVmaXhsZW47CisJaW50IG5vX2luZGV4ID0gMDsKKwl1bnNpZ25lZCBvcHRpb25zID0gMDsKKwljb25zdCBjaGFyICpwYXRoc1syXTsKKworCS8qIFdlcmUgd2UgYXNrZWQgdG8gZG8gLS1uby1pbmRleCBleHBsaWNpdGx5PyAqLworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLW5vLWluZGV4IikpCisJCQlub19pbmRleCA9IDE7CisJCWlmIChhcmd2W2ldWzBdICE9ICctJykKKwkJCWJyZWFrOworCX0KKworCWlmICghbm9faW5kZXggJiYgIW5vbmdpdCkgeworCQkvKgorCQkgKiBJbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSwgd2l0aG91dCAtLW5vLWluZGV4LiAgT25seQorCQkgKiB3aGVuIGEgcGF0aCBvdXRzaWRlIHRoZSByZXBvc2l0b3J5IGlzIGdpdmVuLAorCQkgKiBlLmcuICJnaXQgZGlmZiAvdmFyL3RtcC9bMTJdIiwgb3IgImdpdCBkaWZmCisJCSAqIE1ha2VmaWxlIC92YXIvdG1wL01ha2VmaWxlIiwgYWxsb3cgaXQgdG8gYmUgdXNlZCBhcworCQkgKiBhIGNvbG91cmZ1bCAiZGlmZiIgcmVwbGFjZW1lbnQuCisJCSAqLworCQlpZiAoKGFyZ2MgIT0gaSArIDIpIHx8CisJCSAgICAocGF0aF9pbnNpZGVfcmVwbyhwcmVmaXgsIGFyZ3ZbaV0pICYmCisJCSAgICAgcGF0aF9pbnNpZGVfcmVwbyhwcmVmaXgsIGFyZ3ZbaSsxXSkpKQorCQkJcmV0dXJuOworCX0KKwlpZiAoYXJnYyAhPSBpICsgMikKKwkJdXNhZ2VmKCJnaXQgZGlmZiAlcyA8cGF0aD4gPHBhdGg+IiwKKwkJICAgICAgIG5vX2luZGV4ID8gIi0tbm8taW5kZXgiIDogIlstLW5vLWluZGV4XSIpOworCisJZGlmZl9zZXR1cCgmcmV2cy0+ZGlmZm9wdCk7CisJZm9yIChpID0gMTsgaSA8IGFyZ2MgLSAyOyApIHsKKwkJaW50IGo7CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLW5vLWluZGV4IikpCisJCQlpKys7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi1xIikpIHsKKwkJCW9wdGlvbnMgfD0gRElGRl9TSUxFTlRfT05fUkVNT1ZFRDsKKwkJCWkrKzsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLSIpKQorCQkJaSsrOworCQllbHNlIHsKKwkJCWogPSBkaWZmX29wdF9wYXJzZSgmcmV2cy0+ZGlmZm9wdCwgYXJndiArIGksIGFyZ2MgLSBpKTsKKwkJCWlmICghaikKKwkJCQlkaWUoImludmFsaWQgZGlmZiBvcHRpb24vdmFsdWU6ICVzIiwgYXJndltpXSk7CisJCQlpICs9IGo7CisJCX0KKwl9CisKKwlwcmVmaXhsZW4gPSBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDA7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQljb25zdCBjaGFyICpwID0gYXJndlthcmdjIC0gMiArIGldOworCQlpZiAoIXN0cmNtcChwLCAiLSIpKQorCQkJLyoKKwkJCSAqIHN0ZGluIHNob3VsZCBiZSBzcGVsbGVkIGFzICItIjsgaWYgeW91IGhhdmUKKwkJCSAqIHBhdGggdGhhdCBpcyAiLSIsIHNwZWxsIGl0IGFzICIuLy0iLgorCQkJICovCisJCQlwID0gZmlsZV9mcm9tX3N0YW5kYXJkX2lucHV0OworCQllbHNlIGlmIChwcmVmaXhsZW4pCisJCQlwID0geHN0cmR1cChwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBwcmVmaXhsZW4sIHApKTsKKwkJcGF0aHNbaV0gPSBwOworCX0KKwlyZXZzLT5kaWZmb3B0LnNraXBfc3RhdF91bm1hdGNoID0gMTsKKwlpZiAoIXJldnMtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJcmV2cy0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisKKwlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIE5PX0lOREVYKTsKKworCXJldnMtPm1heF9jb3VudCA9IC0yOworCWRpZmZfc2V0dXBfZG9uZSgmcmV2cy0+ZGlmZm9wdCk7CisKKwlzZXR1cF9kaWZmX3BhZ2VyKCZyZXZzLT5kaWZmb3B0KTsKKwlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIEVYSVRfV0lUSF9TVEFUVVMpOworCisJaWYgKHF1ZXVlX2RpZmYoJnJldnMtPmRpZmZvcHQsIHBhdGhzWzBdLCBwYXRoc1sxXSkpCisJCWV4aXQoMSk7CisJZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KCZyZXZzLT5kaWZmb3B0LCAiMS8iLCAiMi8iKTsKKwlkaWZmY29yZV9zdGQoJnJldnMtPmRpZmZvcHQpOworCWRpZmZfZmx1c2goJnJldnMtPmRpZmZvcHQpOworCisJLyoKKwkgKiBUaGUgcmV0dXJuIGNvZGUgZm9yIC0tbm8taW5kZXggaW1pdGF0ZXMgZGlmZigxKToKKwkgKiAwID0gbm8gY2hhbmdlcywgMSA9IGNoYW5nZXMsIGVsc2UgZXJyb3IKKwkgKi8KKwlleGl0KGRpZmZfcmVzdWx0X2NvZGUoJnJldnMtPmRpZmZvcHQsIDApKTsKK30KZGlmZiAtLWdpdCBhL2RpZmYuYyBiL2RpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWQzZjA3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlmZi5jCkBAIC0wLDAgKzEsNDg3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBKdW5pbyBDIEhhbWFubworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisKKyNpZmRlZiBOT19GQVNUX1dPUktJTkdfRElSRUNUT1JZCisjZGVmaW5lIEZBU1RfV09SS0lOR19ESVJFQ1RPUlkgMAorI2Vsc2UKKyNkZWZpbmUgRkFTVF9XT1JLSU5HX0RJUkVDVE9SWSAxCisjZW5kaWYKKworc3RhdGljIGludCBkaWZmX2RldGVjdF9yZW5hbWVfZGVmYXVsdDsKK3N0YXRpYyBpbnQgZGlmZl9yZW5hbWVfbGltaXRfZGVmYXVsdCA9IDQwMDsKK3N0YXRpYyBpbnQgZGlmZl9zdXBwcmVzc19ibGFua19lbXB0eTsKK3N0YXRpYyBpbnQgZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9IC0xOworc3RhdGljIGNvbnN0IGNoYXIgKmRpZmZfd29yZF9yZWdleF9jZmc7CitzdGF0aWMgY29uc3QgY2hhciAqZXh0ZXJuYWxfZGlmZl9jbWRfY2ZnOworaW50IGRpZmZfYXV0b19yZWZyZXNoX2luZGV4ID0gMTsKK3N0YXRpYyBpbnQgZGlmZl9tbmVtb25pY19wcmVmaXg7CitzdGF0aWMgaW50IGRpZmZfbm9fcHJlZml4Oworc3RhdGljIGludCBkaWZmX3N0YXRfZ3JhcGhfd2lkdGg7CitzdGF0aWMgaW50IGRpZmZfZGlyc3RhdF9wZXJtaWxsZV9kZWZhdWx0ID0gMzA7CitzdGF0aWMgc3RydWN0IGRpZmZfb3B0aW9ucyBkZWZhdWx0X2RpZmZfb3B0aW9uczsKKworc3RhdGljIGNoYXIgZGlmZl9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRVNFVCwKKwlHSVRfQ09MT1JfTk9STUFMLAkvKiBQTEFJTiAqLworCUdJVF9DT0xPUl9CT0xELAkJLyogTUVUQUlORk8gKi8KKwlHSVRfQ09MT1JfQ1lBTiwJCS8qIEZSQUdJTkZPICovCisJR0lUX0NPTE9SX1JFRCwJCS8qIE9MRCAqLworCUdJVF9DT0xPUl9HUkVFTiwJLyogTkVXICovCisJR0lUX0NPTE9SX1lFTExPVywJLyogQ09NTUlUICovCisJR0lUX0NPTE9SX0JHX1JFRCwJLyogV0hJVEVTUEFDRSAqLworCUdJVF9DT0xPUl9OT1JNQUwsCS8qIEZVTkNJTkZPICovCit9OworCitzdGF0aWMgaW50IHBhcnNlX2RpZmZfY29sb3Jfc2xvdChjb25zdCBjaGFyICp2YXIsIGludCBvZnMpCit7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZnMsICJwbGFpbiIpKQorCQlyZXR1cm4gRElGRl9QTEFJTjsKKwlpZiAoIXN0cmNhc2VjbXAodmFyK29mcywgIm1ldGEiKSkKKwkJcmV0dXJuIERJRkZfTUVUQUlORk87CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZnMsICJmcmFnIikpCisJCXJldHVybiBESUZGX0ZSQUdJTkZPOworCWlmICghc3RyY2FzZWNtcCh2YXIrb2ZzLCAib2xkIikpCisJCXJldHVybiBESUZGX0ZJTEVfT0xEOworCWlmICghc3RyY2FzZWNtcCh2YXIrb2ZzLCAibmV3IikpCisJCXJldHVybiBESUZGX0ZJTEVfTkVXOworCWlmICghc3RyY2FzZWNtcCh2YXIrb2ZzLCAiY29tbWl0IikpCisJCXJldHVybiBESUZGX0NPTU1JVDsKKwlpZiAoIXN0cmNhc2VjbXAodmFyK29mcywgIndoaXRlc3BhY2UiKSkKKwkJcmV0dXJuIERJRkZfV0hJVEVTUEFDRTsKKwlpZiAoIXN0cmNhc2VjbXAodmFyK29mcywgImZ1bmMiKSkKKwkJcmV0dXJuIERJRkZfRlVOQ0lORk87CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHBhcnNlX2RpcnN0YXRfcGFyYW1zKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnBhcmFtcywKKwkJCQlzdHJ1Y3Qgc3RyYnVmICplcnJtc2cpCit7CisJY29uc3QgY2hhciAqcCA9IHBhcmFtczsKKwlpbnQgcF9sZW4sIHJldCA9IDA7CisKKwl3aGlsZSAoKnApIHsKKwkJcF9sZW4gPSBzdHJjaHJudWwocCwgJywnKSAtIHA7CisJCWlmICghbWVtY21wKHAsICJjaGFuZ2VzIiwgcF9sZW4pKSB7CisJCQlESUZGX09QVF9DTFIob3B0aW9ucywgRElSU1RBVF9CWV9MSU5FKTsKKwkJCURJRkZfT1BUX0NMUihvcHRpb25zLCBESVJTVEFUX0JZX0ZJTEUpOworCQl9IGVsc2UgaWYgKCFtZW1jbXAocCwgImxpbmVzIiwgcF9sZW4pKSB7CisJCQlESUZGX09QVF9TRVQob3B0aW9ucywgRElSU1RBVF9CWV9MSU5FKTsKKwkJCURJRkZfT1BUX0NMUihvcHRpb25zLCBESVJTVEFUX0JZX0ZJTEUpOworCQl9IGVsc2UgaWYgKCFtZW1jbXAocCwgImZpbGVzIiwgcF9sZW4pKSB7CisJCQlESUZGX09QVF9DTFIob3B0aW9ucywgRElSU1RBVF9CWV9MSU5FKTsKKwkJCURJRkZfT1BUX1NFVChvcHRpb25zLCBESVJTVEFUX0JZX0ZJTEUpOworCQl9IGVsc2UgaWYgKCFtZW1jbXAocCwgIm5vbmN1bXVsYXRpdmUiLCBwX2xlbikpIHsKKwkJCURJRkZfT1BUX0NMUihvcHRpb25zLCBESVJTVEFUX0NVTVVMQVRJVkUpOworCQl9IGVsc2UgaWYgKCFtZW1jbXAocCwgImN1bXVsYXRpdmUiLCBwX2xlbikpIHsKKwkJCURJRkZfT1BUX1NFVChvcHRpb25zLCBESVJTVEFUX0NVTVVMQVRJVkUpOworCQl9IGVsc2UgaWYgKGlzZGlnaXQoKnApKSB7CisJCQljaGFyICplbmQ7CisJCQlpbnQgcGVybWlsbGUgPSBzdHJ0b3VsKHAsICZlbmQsIDEwKSAqIDEwOworCQkJaWYgKCplbmQgPT0gJy4nICYmIGlzZGlnaXQoKisrZW5kKSkgeworCQkJCS8qIG9ubHkgdXNlIGZpcnN0IGRpZ2l0ICovCisJCQkJcGVybWlsbGUgKz0gKmVuZCAtICcwJzsKKwkJCQkvKiAuLiBhbmQgaWdub3JlIGFueSBmdXJ0aGVyIGRpZ2l0cyAqLworCQkJCXdoaWxlIChpc2RpZ2l0KCorK2VuZCkpCisJCQkJCTsgLyogbm90aGluZyAqLworCQkJfQorCQkJaWYgKGVuZCAtIHAgPT0gcF9sZW4pCisJCQkJb3B0aW9ucy0+ZGlyc3RhdF9wZXJtaWxsZSA9IHBlcm1pbGxlOworCQkJZWxzZSB7CisJCQkJc3RyYnVmX2FkZGYoZXJybXNnLCBfKCIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJS4qcydcbiIpLAorCQkJCQkgICAgcF9sZW4sIHApOworCQkJCXJldCsrOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZGYoZXJybXNnLCBfKCIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyUuKnMnXG4iKSwKKwkJCQkgICAgcF9sZW4sIHApOworCQkJcmV0Kys7CisJCX0KKworCQlwICs9IHBfbGVuOworCisJCWlmICgqcCkKKwkJCXArKzsgLyogbW9yZSBwYXJhbWV0ZXJzLCBzd2FsbG93IHNlcGFyYXRvciAqLworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdpdF9jb25maWdfcmVuYW1lKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIERJRkZfREVURUNUX1JFTkFNRTsKKwlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJjb3BpZXMiKSB8fCAhc3RyY2FzZWNtcCh2YWx1ZSwgImNvcHkiKSkKKwkJcmV0dXJuICBESUZGX0RFVEVDVF9DT1BZOworCXJldHVybiBnaXRfY29uZmlnX2Jvb2wodmFyLHZhbHVlKSA/IERJRkZfREVURUNUX1JFTkFNRSA6IDA7Cit9CisKKy8qCisgKiBUaGVzZSBhcmUgdG8gZ2l2ZSBVSSBsYXllciBkZWZhdWx0cy4KKyAqIFRoZSBjb3JlLWxldmVsIGNvbW1hbmRzIHN1Y2ggYXMgZ2l0LWRpZmYtZmlsZXMgc2hvdWxkCisgKiBuZXZlciBiZSBhZmZlY3RlZCBieSB0aGUgc2V0dGluZyBvZiBkaWZmLnJlbmFtZXMKKyAqIHRoZSB1c2VyIGhhcHBlbnMgdG8gaGF2ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorICovCitpbnQgZ2l0X2RpZmZfdWlfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImRpZmYuY29sb3IiKSB8fCAhc3RyY21wKHZhciwgImNvbG9yLmRpZmYiKSkgeworCQlkaWZmX3VzZV9jb2xvcl9kZWZhdWx0ID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnJlbmFtZXMiKSkgeworCQlkaWZmX2RldGVjdF9yZW5hbWVfZGVmYXVsdCA9IGdpdF9jb25maWdfcmVuYW1lKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5hdXRvcmVmcmVzaGluZGV4IikpIHsKKwkJZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLm1uZW1vbmljcHJlZml4IikpIHsKKwkJZGlmZl9tbmVtb25pY19wcmVmaXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLm5vcHJlZml4IikpIHsKKwkJZGlmZl9ub19wcmVmaXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnN0YXRncmFwaHdpZHRoIikpIHsKKwkJZGlmZl9zdGF0X2dyYXBoX3dpZHRoID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmV4dGVybmFsIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZXh0ZXJuYWxfZGlmZl9jbWRfY2ZnLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLndvcmRyZWdleCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRpZmZfd29yZF9yZWdleF9jZmcsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5pZ25vcmVzdWJtb2R1bGVzIikpCisJCWhhbmRsZV9pZ25vcmVfc3VibW9kdWxlc19hcmcoJmRlZmF1bHRfZGlmZl9vcHRpb25zLCB2YWx1ZSk7CisKKwlpZiAoZ2l0X2NvbG9yX2NvbmZpZyh2YXIsIHZhbHVlLCBjYikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ2l0X2RpZmZfYmFzaWNfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnJlbmFtZWxpbWl0IikpIHsKKwkJZGlmZl9yZW5hbWVfbGltaXRfZGVmYXVsdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodXNlcmRpZmZfY29uZmlnKHZhciwgdmFsdWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFwcmVmaXhjbXAodmFyLCAiZGlmZi5jb2xvci4iKSB8fCAhcHJlZml4Y21wKHZhciwgImNvbG9yLmRpZmYuIikpIHsKKwkJaW50IHNsb3QgPSBwYXJzZV9kaWZmX2NvbG9yX3Nsb3QodmFyLCAxMSk7CisJCWlmIChzbG90IDwgMCkKKwkJCXJldHVybiAwOworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWNvbG9yX3BhcnNlKHZhbHVlLCB2YXIsIGRpZmZfY29sb3JzW3Nsb3RdKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogbGlrZSBHTlUgZGlmZidzIC0tc3VwcHJlc3MtYmxhbmstZW1wdHkgb3B0aW9uICAqLworCWlmICghc3RyY21wKHZhciwgImRpZmYuc3VwcHJlc3NibGFua2VtcHR5IikgfHwKKwkJCS8qIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQkJIXN0cmNtcCh2YXIsICJkaWZmLnN1cHByZXNzLWJsYW5rLWVtcHR5IikpIHsKKwkJZGlmZl9zdXBwcmVzc19ibGFua19lbXB0eSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5kaXJzdGF0IikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBlcnJtc2cgPSBTVFJCVUZfSU5JVDsKKwkJZGVmYXVsdF9kaWZmX29wdGlvbnMuZGlyc3RhdF9wZXJtaWxsZSA9IGRpZmZfZGlyc3RhdF9wZXJtaWxsZV9kZWZhdWx0OworCQlpZiAocGFyc2VfZGlyc3RhdF9wYXJhbXMoJmRlZmF1bHRfZGlmZl9vcHRpb25zLCB2YWx1ZSwgJmVycm1zZykpCisJCQl3YXJuaW5nKF8oIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4lcyIpLAorCQkJCWVycm1zZy5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJybXNnKTsKKwkJZGlmZl9kaXJzdGF0X3Blcm1pbGxlX2RlZmF1bHQgPSBkZWZhdWx0X2RpZmZfb3B0aW9ucy5kaXJzdGF0X3Blcm1pbGxlOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXByZWZpeGNtcCh2YXIsICJzdWJtb2R1bGUuIikpCisJCXJldHVybiBwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbih2YXIsIHZhbHVlKTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgY2hhciAqcXVvdGVfdHdvKGNvbnN0IGNoYXIgKm9uZSwgY29uc3QgY2hhciAqdHdvKQoreworCWludCBuZWVkX29uZSA9IHF1b3RlX2Nfc3R5bGUob25lLCBOVUxMLCBOVUxMLCAxKTsKKwlpbnQgbmVlZF90d28gPSBxdW90ZV9jX3N0eWxlKHR3bywgTlVMTCwgTlVMTCwgMSk7CisJc3RydWN0IHN0cmJ1ZiByZXMgPSBTVFJCVUZfSU5JVDsKKworCWlmIChuZWVkX29uZSArIG5lZWRfdHdvKSB7CisJCXN0cmJ1Zl9hZGRjaCgmcmVzLCAnIicpOworCQlxdW90ZV9jX3N0eWxlKG9uZSwgJnJlcywgTlVMTCwgMSk7CisJCXF1b3RlX2Nfc3R5bGUodHdvLCAmcmVzLCBOVUxMLCAxKTsKKwkJc3RyYnVmX2FkZGNoKCZyZXMsICciJyk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cigmcmVzLCBvbmUpOworCQlzdHJidWZfYWRkc3RyKCZyZXMsIHR3byk7CisJfQorCXJldHVybiBzdHJidWZfZGV0YWNoKCZyZXMsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZXh0ZXJuYWxfZGlmZih2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpleHRlcm5hbF9kaWZmX2NtZCA9IE5VTEw7CisJc3RhdGljIGludCBkb25lX3ByZXBhcmluZyA9IDA7CisKKwlpZiAoZG9uZV9wcmVwYXJpbmcpCisJCXJldHVybiBleHRlcm5hbF9kaWZmX2NtZDsKKwlleHRlcm5hbF9kaWZmX2NtZCA9IGdldGVudigiR0lUX0VYVEVSTkFMX0RJRkYiKTsKKwlpZiAoIWV4dGVybmFsX2RpZmZfY21kKQorCQlleHRlcm5hbF9kaWZmX2NtZCA9IGV4dGVybmFsX2RpZmZfY21kX2NmZzsKKwlkb25lX3ByZXBhcmluZyA9IDE7CisJcmV0dXJuIGV4dGVybmFsX2RpZmZfY21kOworfQorCitzdGF0aWMgc3RydWN0IGRpZmZfdGVtcGZpbGUgeworCWNvbnN0IGNoYXIgKm5hbWU7IC8qIGZpbGVuYW1lIGV4dGVybmFsIGRpZmYgc2hvdWxkIHJlYWQgZnJvbSAqLworCWNoYXIgaGV4WzQxXTsKKwljaGFyIG1vZGVbMTBdOworCWNoYXIgdG1wX3BhdGhbUEFUSF9NQVhdOworfSBkaWZmX3RlbXBbMl07CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAoKnNhbmVfdHJ1bmNhdGVfZm4pKGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKTsKKworc3RydWN0IGVtaXRfY2FsbGJhY2sgeworCWludCBjb2xvcl9kaWZmOworCXVuc2lnbmVkIHdzX3J1bGU7CisJaW50IGJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZTsKKwlpbnQgYmxhbmtfYXRfZW9mX2luX3Bvc3RpbWFnZTsKKwlpbnQgbG5vX2luX3ByZWltYWdlOworCWludCBsbm9faW5fcG9zdGltYWdlOworCXNhbmVfdHJ1bmNhdGVfZm4gdHJ1bmNhdGU7CisJY29uc3QgY2hhciAqKmxhYmVsX3BhdGg7CisJc3RydWN0IGRpZmZfd29yZHNfZGF0YSAqZGlmZl93b3JkczsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQ7CisJaW50ICpmb3VuZF9jaGFuZ2VzcDsKKwlzdHJ1Y3Qgc3RyYnVmICpoZWFkZXI7Cit9OworCitzdGF0aWMgaW50IGNvdW50X2xpbmVzKGNvbnN0IGNoYXIgKmRhdGEsIGludCBzaXplKQoreworCWludCBjb3VudCwgY2gsIGNvbXBsZXRlbHlfZW1wdHkgPSAxLCBubF9qdXN0X3NlZW4gPSAwOworCWNvdW50ID0gMDsKKwl3aGlsZSAoMCA8IHNpemUtLSkgeworCQljaCA9ICpkYXRhKys7CisJCWlmIChjaCA9PSAnXG4nKSB7CisJCQljb3VudCsrOworCQkJbmxfanVzdF9zZWVuID0gMTsKKwkJCWNvbXBsZXRlbHlfZW1wdHkgPSAwOworCQl9CisJCWVsc2UgeworCQkJbmxfanVzdF9zZWVuID0gMDsKKwkJCWNvbXBsZXRlbHlfZW1wdHkgPSAwOworCQl9CisJfQorCWlmIChjb21wbGV0ZWx5X2VtcHR5KQorCQlyZXR1cm4gMDsKKwlpZiAoIW5sX2p1c3Rfc2VlbikKKwkJY291bnQrKzsgLyogbm8gdHJhaWxpbmcgbmV3bGluZSAqLworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBmaWxsX21tZmlsZShtbWZpbGVfdCAqbWYsIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJaWYgKCFESUZGX0ZJTEVfVkFMSUQob25lKSkgeworCQltZi0+cHRyID0gKGNoYXIgKikiIjsgLyogZG9lcyBub3QgbWF0dGVyICovCisJCW1mLT5zaXplID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAwKSkKKwkJcmV0dXJuIC0xOworCisJbWYtPnB0ciA9IG9uZS0+ZGF0YTsKKwltZi0+c2l6ZSA9IG9uZS0+c2l6ZTsKKwlyZXR1cm4gMDsKK30KKworLyogbGlrZSBmaWxsX21tZmlsZSwgYnV0IG9ubHkgZm9yIHNpemUsIHNvIHdlIGNhbiBhdm9pZCByZXRyaWV2aW5nIGJsb2IgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRpZmZfZmlsZXNwZWNfc2l6ZShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWlmICghRElGRl9GSUxFX1ZBTElEKG9uZSkpCisJCXJldHVybiAwOworCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAxKTsKKwlyZXR1cm4gb25lLT5zaXplOworfQorCitzdGF0aWMgaW50IGNvdW50X3RyYWlsaW5nX2JsYW5rKG1tZmlsZV90ICptZiwgdW5zaWduZWQgd3NfcnVsZSkKK3sKKwljaGFyICpwdHIgPSBtZi0+cHRyOworCWxvbmcgc2l6ZSA9IG1mLT5zaXplOworCWludCBjbnQgPSAwOworCisJaWYgKCFzaXplKQorCQlyZXR1cm4gY250OworCXB0ciArPSBzaXplIC0gMTsgLyogcG9pbnRpbmcgYXQgdGhlIHZlcnkgZW5kICovCisJaWYgKCpwdHIgIT0gJ1xuJykKKwkJOyAvKiBpbmNvbXBsZXRlIGxpbmUgKi8KKwllbHNlCisJCXB0ci0tOyAvKiBza2lwIHRoZSBsYXN0IExGICovCisJd2hpbGUgKG1mLT5wdHIgPCBwdHIpIHsKKwkJY2hhciAqcHJldl9lb2w7CisJCWZvciAocHJldl9lb2wgPSBwdHI7IG1mLT5wdHIgPD0gcHJldl9lb2w7IHByZXZfZW9sLS0pCisJCQlpZiAoKnByZXZfZW9sID09ICdcbicpCisJCQkJYnJlYWs7CisJCWlmICghd3NfYmxhbmtfbGluZShwcmV2X2VvbCArIDEsIHB0ciAtIHByZXZfZW9sLCB3c19ydWxlKSkKKwkJCWJyZWFrOworCQljbnQrKzsKKwkJcHRyID0gcHJldl9lb2wgLSAxOworCX0KKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgdm9pZCBjaGVja19ibGFua19hdF9lb2YobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwKKwkJCSAgICAgICBzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSkKK3sKKwlpbnQgbDEsIGwyLCBhdDsKKwl1bnNpZ25lZCB3c19ydWxlID0gZWNiZGF0YS0+d3NfcnVsZTsKKwlsMSA9IGNvdW50X3RyYWlsaW5nX2JsYW5rKG1mMSwgd3NfcnVsZSk7CisJbDIgPSBjb3VudF90cmFpbGluZ19ibGFuayhtZjIsIHdzX3J1bGUpOworCWlmIChsMiA8PSBsMSkgeworCQllY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcHJlaW1hZ2UgPSAwOworCQllY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcG9zdGltYWdlID0gMDsKKwkJcmV0dXJuOworCX0KKwlhdCA9IGNvdW50X2xpbmVzKG1mMS0+cHRyLCBtZjEtPnNpemUpOworCWVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZSA9IChhdCAtIGwxKSArIDE7CisKKwlhdCA9IGNvdW50X2xpbmVzKG1mMi0+cHRyLCBtZjItPnNpemUpOworCWVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2UgPSAoYXQgLSBsMikgKyAxOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2xpbmVfMChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICpzZXQsIGNvbnN0IGNoYXIgKnJlc2V0LAorCQkJaW50IGZpcnN0LCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWludCBoYXNfdHJhaWxpbmdfbmV3bGluZSwgaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybjsKKwlpbnQgbm9maXJzdDsKKwlGSUxFICpmaWxlID0gby0+ZmlsZTsKKworCWlmIChvLT5vdXRwdXRfcHJlZml4KSB7CisJCXN0cnVjdCBzdHJidWYgKm1zZyA9IE5VTEw7CisJCW1zZyA9IG8tPm91dHB1dF9wcmVmaXgobywgby0+b3V0cHV0X3ByZWZpeF9kYXRhKTsKKwkJYXNzZXJ0KG1zZyk7CisJCWZ3cml0ZShtc2ctPmJ1ZiwgbXNnLT5sZW4sIDEsIGZpbGUpOworCX0KKworCWlmIChsZW4gPT0gMCkgeworCQloYXNfdHJhaWxpbmdfbmV3bGluZSA9IChmaXJzdCA9PSAnXG4nKTsKKwkJaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybiA9ICghaGFzX3RyYWlsaW5nX25ld2xpbmUgJiYKKwkJCQkJCShmaXJzdCA9PSAnXHInKSk7CisJCW5vZmlyc3QgPSBoYXNfdHJhaWxpbmdfbmV3bGluZSB8fCBoYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuOworCX0gZWxzZSB7CisJCWhhc190cmFpbGluZ19uZXdsaW5lID0gKGxlbiA+IDAgJiYgbGluZVtsZW4tMV0gPT0gJ1xuJyk7CisJCWlmIChoYXNfdHJhaWxpbmdfbmV3bGluZSkKKwkJCWxlbi0tOworCQloYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuID0gKGxlbiA+IDAgJiYgbGluZVtsZW4tMV0gPT0gJ1xyJyk7CisJCWlmIChoYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuKQorCQkJbGVuLS07CisJCW5vZmlyc3QgPSAwOworCX0KKworCWlmIChsZW4gfHwgIW5vZmlyc3QpIHsKKwkJZnB1dHMoc2V0LCBmaWxlKTsKKwkJaWYgKCFub2ZpcnN0KQorCQkJZnB1dGMoZmlyc3QsIGZpbGUpOworCQlmd3JpdGUobGluZSwgbGVuLCAxLCBmaWxlKTsKKwkJZnB1dHMocmVzZXQsIGZpbGUpOworCX0KKwlpZiAoaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybikKKwkJZnB1dGMoJ1xyJywgZmlsZSk7CisJaWYgKGhhc190cmFpbGluZ19uZXdsaW5lKQorCQlmcHV0YygnXG4nLCBmaWxlKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9saW5lKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKnNldCwgY29uc3QgY2hhciAqcmVzZXQsCisJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJZW1pdF9saW5lXzAobywgc2V0LCByZXNldCwgbGluZVswXSwgbGluZSsxLCBsZW4tMSk7Cit9CisKK3N0YXRpYyBpbnQgbmV3X2JsYW5rX2xpbmVfYXRfZW9mKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhLCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWlmICghKChlY2JkYXRhLT53c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSAmJgorCSAgICAgIGVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZSAmJgorCSAgICAgIGVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2UgJiYKKwkgICAgICBlY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcHJlaW1hZ2UgPD0gZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlICYmCisJICAgICAgZWNiZGF0YS0+YmxhbmtfYXRfZW9mX2luX3Bvc3RpbWFnZSA8PSBlY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHdzX2JsYW5rX2xpbmUobGluZSwgbGVuLCBlY2JkYXRhLT53c19ydWxlKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9hZGRfbGluZShjb25zdCBjaGFyICpyZXNldCwKKwkJCSAgc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEsCisJCQkgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJY29uc3QgY2hhciAqd3MgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX1dISVRFU1BBQ0UpOworCWNvbnN0IGNoYXIgKnNldCA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfRklMRV9ORVcpOworCisJaWYgKCEqd3MpCisJCWVtaXRfbGluZV8wKGVjYmRhdGEtPm9wdCwgc2V0LCByZXNldCwgJysnLCBsaW5lLCBsZW4pOworCWVsc2UgaWYgKG5ld19ibGFua19saW5lX2F0X2VvZihlY2JkYXRhLCBsaW5lLCBsZW4pKQorCQkvKiBCbGFuayBsaW5lIGF0IEVPRiAtIHBhaW50ICcrJyBhcyB3ZWxsICovCisJCWVtaXRfbGluZV8wKGVjYmRhdGEtPm9wdCwgd3MsIHJlc2V0LCAnKycsIGxpbmUsIGxlbik7CisJZWxzZSB7CisJCS8qIEVtaXQganVzdCB0aGUgcHJlZml4LCB0aGVuIHRoZSByZXN0LiAqLworCQllbWl0X2xpbmVfMChlY2JkYXRhLT5vcHQsIHNldCwgcmVzZXQsICcrJywgIiIsIDApOworCQl3c19jaGVja19lbWl0KGxpbmUsIGxlbiwgZWNiZGF0YS0+d3NfcnVsZSwKKwkJCSAgICAgIGVjYmRhdGEtPm9wdC0+ZmlsZSwgc2V0LCByZXNldCwgd3MpOworCX0KK30KKworc3RhdGljIHZvaWQgZW1pdF9odW5rX2hlYWRlcihzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwKKwkJCSAgICAgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwljb25zdCBjaGFyICpwbGFpbiA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfUExBSU4pOworCWNvbnN0IGNoYXIgKmZyYWcgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX0ZSQUdJTkZPKTsKKwljb25zdCBjaGFyICpmdW5jID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9GVU5DSU5GTyk7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX1JFU0VUKTsKKwlzdGF0aWMgY29uc3QgY2hhciBhdGF0WzJdID0geyAnQCcsICdAJyB9OworCWNvbnN0IGNoYXIgKmNwLCAqZXA7CisJc3RydWN0IHN0cmJ1ZiBtc2didWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgb3JnX2xlbiA9IGxlbjsKKwlpbnQgaSA9IDE7CisKKwkvKgorCSAqIEFzIGEgaHVuayBoZWFkZXIgbXVzdCBiZWdpbiB3aXRoICJAQCAtPG9sZD4sICs8bmV3PiBAQCIsCisJICogaXQgYWx3YXlzIGlzIGF0IGxlYXN0IDEwIGJ5dGVzIGxvbmcuCisJICovCisJaWYgKGxlbiA8IDEwIHx8CisJICAgIG1lbWNtcChsaW5lLCBhdGF0LCAyKSB8fAorCSAgICAhKGVwID0gbWVtbWVtKGxpbmUgKyAyLCBsZW4gLSAyLCBhdGF0LCAyKSkpIHsKKwkJZW1pdF9saW5lKGVjYmRhdGEtPm9wdCwgcGxhaW4sIHJlc2V0LCBsaW5lLCBsZW4pOworCQlyZXR1cm47CisJfQorCWVwICs9IDI7IC8qIHNraXAgb3ZlciBAQCAqLworCisJLyogVGhlIGh1bmsgaGVhZGVyIGluIGZyYWdpbmZvIGNvbG9yICovCisJc3RyYnVmX2FkZCgmbXNnYnVmLCBmcmFnLCBzdHJsZW4oZnJhZykpOworCXN0cmJ1Zl9hZGQoJm1zZ2J1ZiwgbGluZSwgZXAgLSBsaW5lKTsKKwlzdHJidWZfYWRkKCZtc2didWYsIHJlc2V0LCBzdHJsZW4ocmVzZXQpKTsKKworCS8qCisJICogdHJhaWxpbmcgIlxyXG4iCisJICovCisJZm9yICggOyBpIDwgMzsgaSsrKQorCQlpZiAobGluZVtsZW4gLSBpXSA9PSAnXHInIHx8IGxpbmVbbGVuIC0gaV0gPT0gJ1xuJykKKwkJCWxlbi0tOworCisJLyogYmxhbmsgYmVmb3JlIHRoZSBmdW5jIGhlYWRlciAqLworCWZvciAoY3AgPSBlcDsgZXAgLSBsaW5lIDwgbGVuOyBlcCsrKQorCQlpZiAoKmVwICE9ICcgJyAmJiAqZXAgIT0gJ1x0JykKKwkJCWJyZWFrOworCWlmIChlcCAhPSBjcCkgeworCQlzdHJidWZfYWRkKCZtc2didWYsIHBsYWluLCBzdHJsZW4ocGxhaW4pKTsKKwkJc3RyYnVmX2FkZCgmbXNnYnVmLCBjcCwgZXAgLSBjcCk7CisJCXN0cmJ1Zl9hZGQoJm1zZ2J1ZiwgcmVzZXQsIHN0cmxlbihyZXNldCkpOworCX0KKworCWlmIChlcCA8IGxpbmUgKyBsZW4pIHsKKwkJc3RyYnVmX2FkZCgmbXNnYnVmLCBmdW5jLCBzdHJsZW4oZnVuYykpOworCQlzdHJidWZfYWRkKCZtc2didWYsIGVwLCBsaW5lICsgbGVuIC0gZXApOworCQlzdHJidWZfYWRkKCZtc2didWYsIHJlc2V0LCBzdHJsZW4ocmVzZXQpKTsKKwl9CisKKwlzdHJidWZfYWRkKCZtc2didWYsIGxpbmUgKyBsZW4sIG9yZ19sZW4gLSBsZW4pOworCWVtaXRfbGluZShlY2JkYXRhLT5vcHQsICIiLCAiIiwgbXNnYnVmLmJ1ZiwgbXNnYnVmLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl90ZW1wZmlsZSAqY2xhaW1fZGlmZl90ZW1wZmlsZSh2b2lkKSB7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlmZl90ZW1wKTsgaSsrKQorCQlpZiAoIWRpZmZfdGVtcFtpXS5uYW1lKQorCQkJcmV0dXJuIGRpZmZfdGVtcCArIGk7CisJZGllKCJCVUc6IGRpZmYgaXMgZmFpbGluZyB0byBjbGVhbiB1cCBpdHMgdGVtcGZpbGVzIik7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX3RlbXBmaWxlX2luc3RhbGxlZDsKKworc3RhdGljIHZvaWQgcmVtb3ZlX3RlbXBmaWxlKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlmZl90ZW1wKTsgaSsrKSB7CisJCWlmIChkaWZmX3RlbXBbaV0ubmFtZSA9PSBkaWZmX3RlbXBbaV0udG1wX3BhdGgpCisJCQl1bmxpbmtfb3Jfd2FybihkaWZmX3RlbXBbaV0ubmFtZSk7CisJCWRpZmZfdGVtcFtpXS5uYW1lID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV90ZW1wZmlsZV9vbl9zaWduYWwoaW50IHNpZ25vKQoreworCXJlbW92ZV90ZW1wZmlsZSgpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCitzdGF0aWMgdm9pZCBwcmludF9saW5lX2NvdW50KEZJTEUgKmZpbGUsIGludCBjb3VudCkKK3sKKwlzd2l0Y2ggKGNvdW50KSB7CisJY2FzZSAwOgorCQlmcHJpbnRmKGZpbGUsICIwLDAiKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmcHJpbnRmKGZpbGUsICIxIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZwcmludGYoZmlsZSwgIjEsJWQiLCBjb3VudCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZW1pdF9yZXdyaXRlX2xpbmVzKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2IsCisJCQkgICAgICAgaW50IHByZWZpeCwgY29uc3QgY2hhciAqZGF0YSwgaW50IHNpemUpCit7CisJY29uc3QgY2hhciAqZW5kcCA9IE5VTEw7CisJc3RhdGljIGNvbnN0IGNoYXIgKm5uZW9mID0gIiBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iOworCWNvbnN0IGNoYXIgKm9sZCA9IGRpZmZfZ2V0X2NvbG9yKGVjYi0+Y29sb3JfZGlmZiwgRElGRl9GSUxFX09MRCk7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcihlY2ItPmNvbG9yX2RpZmYsIERJRkZfUkVTRVQpOworCisJd2hpbGUgKDAgPCBzaXplKSB7CisJCWludCBsZW47CisKKwkJZW5kcCA9IG1lbWNocihkYXRhLCAnXG4nLCBzaXplKTsKKwkJbGVuID0gZW5kcCA/IChlbmRwIC0gZGF0YSArIDEpIDogc2l6ZTsKKwkJaWYgKHByZWZpeCAhPSAnKycpIHsKKwkJCWVjYi0+bG5vX2luX3ByZWltYWdlKys7CisJCQllbWl0X2xpbmVfMChlY2ItPm9wdCwgb2xkLCByZXNldCwgJy0nLAorCQkJCSAgICBkYXRhLCBsZW4pOworCQl9IGVsc2UgeworCQkJZWNiLT5sbm9faW5fcG9zdGltYWdlKys7CisJCQllbWl0X2FkZF9saW5lKHJlc2V0LCBlY2IsIGRhdGEsIGxlbik7CisJCX0KKwkJc2l6ZSAtPSBsZW47CisJCWRhdGEgKz0gbGVuOworCX0KKwlpZiAoIWVuZHApIHsKKwkJY29uc3QgY2hhciAqcGxhaW4gPSBkaWZmX2dldF9jb2xvcihlY2ItPmNvbG9yX2RpZmYsCisJCQkJCQkgICBESUZGX1BMQUlOKTsKKwkJcHV0YygnXG4nLCBlY2ItPm9wdC0+ZmlsZSk7CisJCWVtaXRfbGluZV8wKGVjYi0+b3B0LCBwbGFpbiwgcmVzZXQsICdcXCcsCisJCQkgICAgbm5lb2YsIHN0cmxlbihubmVvZikpOworCX0KK30KKworc3RhdGljIHZvaWQgZW1pdF9yZXdyaXRlX2RpZmYoY29uc3QgY2hhciAqbmFtZV9hLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZV9iLAorCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28sCisJCQkgICAgICBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl9vbmUsCisJCQkgICAgICBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl90d28sCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCWludCBsY19hLCBsY19iOworCWNvbnN0IGNoYXIgKm5hbWVfYV90YWIsICpuYW1lX2JfdGFiOworCWNvbnN0IGNoYXIgKm1ldGFpbmZvID0gZGlmZl9nZXRfY29sb3Ioby0+dXNlX2NvbG9yLCBESUZGX01FVEFJTkZPKTsKKwljb25zdCBjaGFyICpmcmFnaW5mbyA9IGRpZmZfZ2V0X2NvbG9yKG8tPnVzZV9jb2xvciwgRElGRl9GUkFHSU5GTyk7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcihvLT51c2VfY29sb3IsIERJRkZfUkVTRVQpOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGFfbmFtZSA9IFNUUkJVRl9JTklULCBiX25hbWUgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICphX3ByZWZpeCwgKmJfcHJlZml4OworCWNoYXIgKmRhdGFfb25lLCAqZGF0YV90d287CisJc2l6ZV90IHNpemVfb25lLCBzaXplX3R3bzsKKwlzdHJ1Y3QgZW1pdF9jYWxsYmFjayBlY2JkYXRhOworCWNoYXIgKmxpbmVfcHJlZml4ID0gIiI7CisJc3RydWN0IHN0cmJ1ZiAqbXNnYnVmOworCisJaWYgKG8gJiYgby0+b3V0cHV0X3ByZWZpeCkgeworCQltc2didWYgPSBvLT5vdXRwdXRfcHJlZml4KG8sIG8tPm91dHB1dF9wcmVmaXhfZGF0YSk7CisJCWxpbmVfcHJlZml4ID0gbXNnYnVmLT5idWY7CisJfQorCisJaWYgKGRpZmZfbW5lbW9uaWNfcHJlZml4ICYmIERJRkZfT1BUX1RTVChvLCBSRVZFUlNFX0RJRkYpKSB7CisJCWFfcHJlZml4ID0gby0+Yl9wcmVmaXg7CisJCWJfcHJlZml4ID0gby0+YV9wcmVmaXg7CisJfSBlbHNlIHsKKwkJYV9wcmVmaXggPSBvLT5hX3ByZWZpeDsKKwkJYl9wcmVmaXggPSBvLT5iX3ByZWZpeDsKKwl9CisKKwluYW1lX2EgKz0gKCpuYW1lX2EgPT0gJy8nKTsKKwluYW1lX2IgKz0gKCpuYW1lX2IgPT0gJy8nKTsKKwluYW1lX2FfdGFiID0gc3RyY2hyKG5hbWVfYSwgJyAnKSA/ICJcdCIgOiAiIjsKKwluYW1lX2JfdGFiID0gc3RyY2hyKG5hbWVfYiwgJyAnKSA/ICJcdCIgOiAiIjsKKworCXN0cmJ1Zl9yZXNldCgmYV9uYW1lKTsKKwlzdHJidWZfcmVzZXQoJmJfbmFtZSk7CisJcXVvdGVfdHdvX2Nfc3R5bGUoJmFfbmFtZSwgYV9wcmVmaXgsIG5hbWVfYSwgMCk7CisJcXVvdGVfdHdvX2Nfc3R5bGUoJmJfbmFtZSwgYl9wcmVmaXgsIG5hbWVfYiwgMCk7CisKKwlzaXplX29uZSA9IGZpbGxfdGV4dGNvbnYodGV4dGNvbnZfb25lLCBvbmUsICZkYXRhX29uZSk7CisJc2l6ZV90d28gPSBmaWxsX3RleHRjb252KHRleHRjb252X3R3bywgdHdvLCAmZGF0YV90d28pOworCisJbWVtc2V0KCZlY2JkYXRhLCAwLCBzaXplb2YoZWNiZGF0YSkpOworCWVjYmRhdGEuY29sb3JfZGlmZiA9IHdhbnRfY29sb3Ioby0+dXNlX2NvbG9yKTsKKwllY2JkYXRhLmZvdW5kX2NoYW5nZXNwID0gJm8tPmZvdW5kX2NoYW5nZXM7CisJZWNiZGF0YS53c19ydWxlID0gd2hpdGVzcGFjZV9ydWxlKG5hbWVfYiA/IG5hbWVfYiA6IG5hbWVfYSk7CisJZWNiZGF0YS5vcHQgPSBvOworCWlmIChlY2JkYXRhLndzX3J1bGUgJiBXU19CTEFOS19BVF9FT0YpIHsKKwkJbW1maWxlX3QgbWYxLCBtZjI7CisJCW1mMS5wdHIgPSAoY2hhciAqKWRhdGFfb25lOworCQltZjIucHRyID0gKGNoYXIgKilkYXRhX3R3bzsKKwkJbWYxLnNpemUgPSBzaXplX29uZTsKKwkJbWYyLnNpemUgPSBzaXplX3R3bzsKKwkJY2hlY2tfYmxhbmtfYXRfZW9mKCZtZjEsICZtZjIsICZlY2JkYXRhKTsKKwl9CisJZWNiZGF0YS5sbm9faW5fcHJlaW1hZ2UgPSAxOworCWVjYmRhdGEubG5vX2luX3Bvc3RpbWFnZSA9IDE7CisKKwlsY19hID0gY291bnRfbGluZXMoZGF0YV9vbmUsIHNpemVfb25lKTsKKwlsY19iID0gY291bnRfbGluZXMoZGF0YV90d28sIHNpemVfdHdvKTsKKwlmcHJpbnRmKG8tPmZpbGUsCisJCSIlcyVzLS0tICVzJXMlc1xuJXMlcysrKyAlcyVzJXNcbiVzJXNAQCAtIiwKKwkJbGluZV9wcmVmaXgsIG1ldGFpbmZvLCBhX25hbWUuYnVmLCBuYW1lX2FfdGFiLCByZXNldCwKKwkJbGluZV9wcmVmaXgsIG1ldGFpbmZvLCBiX25hbWUuYnVmLCBuYW1lX2JfdGFiLCByZXNldCwKKwkJbGluZV9wcmVmaXgsIGZyYWdpbmZvKTsKKwlpZiAoIW8tPmlycmV2ZXJzaWJsZV9kZWxldGUpCisJCXByaW50X2xpbmVfY291bnQoby0+ZmlsZSwgbGNfYSk7CisJZWxzZQorCQlmcHJpbnRmKG8tPmZpbGUsICI/LD8iKTsKKwlmcHJpbnRmKG8tPmZpbGUsICIgKyIpOworCXByaW50X2xpbmVfY291bnQoby0+ZmlsZSwgbGNfYik7CisJZnByaW50ZihvLT5maWxlLCAiIEBAJXNcbiIsIHJlc2V0KTsKKwlpZiAobGNfYSAmJiAhby0+aXJyZXZlcnNpYmxlX2RlbGV0ZSkKKwkJZW1pdF9yZXdyaXRlX2xpbmVzKCZlY2JkYXRhLCAnLScsIGRhdGFfb25lLCBzaXplX29uZSk7CisJaWYgKGxjX2IpCisJCWVtaXRfcmV3cml0ZV9saW5lcygmZWNiZGF0YSwgJysnLCBkYXRhX3R3bywgc2l6ZV90d28pOworCWlmICh0ZXh0Y29udl9vbmUpCisJCWZyZWUoKGNoYXIgKilkYXRhX29uZSk7CisJaWYgKHRleHRjb252X3R3bykKKwkJZnJlZSgoY2hhciAqKWRhdGFfdHdvKTsKK30KKworc3RydWN0IGRpZmZfd29yZHNfYnVmZmVyIHsKKwltbWZpbGVfdCB0ZXh0OworCWxvbmcgYWxsb2M7CisJc3RydWN0IGRpZmZfd29yZHNfb3JpZyB7CisJCWNvbnN0IGNoYXIgKmJlZ2luLCAqZW5kOworCX0gKm9yaWc7CisJaW50IG9yaWdfbnIsIG9yaWdfYWxsb2M7Cit9OworCitzdGF0aWMgdm9pZCBkaWZmX3dvcmRzX2FwcGVuZChjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJc3RydWN0IGRpZmZfd29yZHNfYnVmZmVyICpidWZmZXIpCit7CisJQUxMT0NfR1JPVyhidWZmZXItPnRleHQucHRyLCBidWZmZXItPnRleHQuc2l6ZSArIGxlbiwgYnVmZmVyLT5hbGxvYyk7CisJbGluZSsrOworCWxlbi0tOworCW1lbWNweShidWZmZXItPnRleHQucHRyICsgYnVmZmVyLT50ZXh0LnNpemUsIGxpbmUsIGxlbik7CisJYnVmZmVyLT50ZXh0LnNpemUgKz0gbGVuOworCWJ1ZmZlci0+dGV4dC5wdHJbYnVmZmVyLT50ZXh0LnNpemVdID0gJ1wwJzsKK30KKworc3RydWN0IGRpZmZfd29yZHNfc3R5bGVfZWxlbSB7CisJY29uc3QgY2hhciAqcHJlZml4OworCWNvbnN0IGNoYXIgKnN1ZmZpeDsKKwljb25zdCBjaGFyICpjb2xvcjsgLyogTlVMTDsgZmlsbGVkIGluIGJ5IHRoZSBzZXR1cCBjb2RlIGlmCisJCQkgICAgKiBjb2xvciBpcyBlbmFibGVkICovCit9OworCitzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZSB7CisJZW51bSBkaWZmX3dvcmRzX3R5cGUgdHlwZTsKKwlzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZV9lbGVtIG5ldywgb2xkLCBjdHg7CisJY29uc3QgY2hhciAqbmV3bGluZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZSBkaWZmX3dvcmRzX3N0eWxlc1tdID0geworCXsgRElGRl9XT1JEU19QT1JDRUxBSU4sIHsiKyIsICJcbiJ9LCB7Ii0iLCAiXG4ifSwgeyIgIiwgIlxuIn0sICJ+XG4iIH0sCisJeyBESUZGX1dPUkRTX1BMQUlOLCB7InsrIiwgIit9In0sIHsiWy0iLCAiLV0ifSwgeyIiLCAiIn0sICJcbiIgfSwKKwl7IERJRkZfV09SRFNfQ09MT1IsIHsiIiwgIiJ9LCB7IiIsICIifSwgeyIiLCAiIn0sICJcbiIgfQorfTsKKworc3RydWN0IGRpZmZfd29yZHNfZGF0YSB7CisJc3RydWN0IGRpZmZfd29yZHNfYnVmZmVyIG1pbnVzLCBwbHVzOworCWNvbnN0IGNoYXIgKmN1cnJlbnRfcGx1czsKKwlpbnQgbGFzdF9taW51czsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQ7CisJcmVnZXhfdCAqd29yZF9yZWdleDsKKwllbnVtIGRpZmZfd29yZHNfdHlwZSB0eXBlOworCXN0cnVjdCBkaWZmX3dvcmRzX3N0eWxlICpzdHlsZTsKK307CisKK3N0YXRpYyBpbnQgZm5fb3V0X2RpZmZfd29yZHNfd3JpdGVfaGVscGVyKEZJTEUgKmZwLAorCQkJCQkgIHN0cnVjdCBkaWZmX3dvcmRzX3N0eWxlX2VsZW0gKnN0X2VsLAorCQkJCQkgIGNvbnN0IGNoYXIgKm5ld2xpbmUsCisJCQkJCSAgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICpidWYsCisJCQkJCSAgY29uc3QgY2hhciAqbGluZV9wcmVmaXgpCit7CisJaW50IHByaW50ID0gMDsKKworCXdoaWxlIChjb3VudCkgeworCQljaGFyICpwID0gbWVtY2hyKGJ1ZiwgJ1xuJywgY291bnQpOworCQlpZiAocHJpbnQpCisJCQlmcHV0cyhsaW5lX3ByZWZpeCwgZnApOworCQlpZiAocCAhPSBidWYpIHsKKwkJCWlmIChzdF9lbC0+Y29sb3IgJiYgZnB1dHMoc3RfZWwtPmNvbG9yLCBmcCkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChmcHV0cyhzdF9lbC0+cHJlZml4LCBmcCkgPCAwIHx8CisJCQkgICAgZndyaXRlKGJ1ZiwgcCA/IHAgLSBidWYgOiBjb3VudCwgMSwgZnApICE9IDEgfHwKKwkJCSAgICBmcHV0cyhzdF9lbC0+c3VmZml4LCBmcCkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChzdF9lbC0+Y29sb3IgJiYgKnN0X2VsLT5jb2xvcgorCQkJICAgICYmIGZwdXRzKEdJVF9DT0xPUl9SRVNFVCwgZnApIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKCFwKQorCQkJcmV0dXJuIDA7CisJCWlmIChmcHV0cyhuZXdsaW5lLCBmcCkgPCAwKQorCQkJcmV0dXJuIC0xOworCQljb3VudCAtPSBwICsgMSAtIGJ1ZjsKKwkJYnVmID0gcCArIDE7CisJCXByaW50ID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAnLS1jb2xvci13b3JkcycgYWxnb3JpdGhtIGNhbiBiZSBkZXNjcmliZWQgYXM6CisgKgorICogICAxLiBjb2xsZWN0IGEgdGhlIG1pbnVzL3BsdXMgbGluZXMgb2YgYSBkaWZmIGh1bmssIGRpdmlkZWQgaW50bworICogICAgICBtaW51cy1saW5lcyBhbmQgcGx1cy1saW5lczsKKyAqCisgKiAgIDIuIGJyZWFrIGJvdGggbWludXMtbGluZXMgYW5kIHBsdXMtbGluZXMgaW50byB3b3JkcyBhbmQKKyAqICAgICAgcGxhY2UgdGhlbSBpbnRvIHR3byBtbWZpbGVfdCB3aXRoIG9uZSB3b3JkIGZvciBlYWNoIGxpbmU7CisgKgorICogICAzLiB1c2UgeGRpZmYgdG8gcnVuIGRpZmYgb24gdGhlIHR3byBtbWZpbGVfdCB0byBnZXQgdGhlIHdvcmRzIGxldmVsIGRpZmY7CisgKgorICogQW5kIGZvciB0aGUgY29tbW9uIHBhcnRzIG9mIHRoZSBib3RoIGZpbGUsIHdlIG91dHB1dCB0aGUgcGx1cyBzaWRlIHRleHQuCisgKiBkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgaXMgdXNlZCB0byB0cmFjZSB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgcGx1cyBmaWxlCisgKiB3aGljaCBwcmludGVkLiBkaWZmX3dvcmRzLT5sYXN0X21pbnVzIGlzIHVzZWQgdG8gdHJhY2UgdGhlIGxhc3QgbWludXMgd29yZAorICogcHJpbnRlZC4KKyAqCisgKiBGb3IgJy0tZ3JhcGgnIHRvIHdvcmsgd2l0aCAnLS1jb2xvci13b3JkcycsIHdlIG5lZWQgdG8gb3V0cHV0IHRoZSBncmFwaCBwcmVmaXgKKyAqIG9uIGVhY2ggbGluZSBvZiBjb2xvciB3b3JkcyBvdXRwdXQuIEdlbmVyYWxseSwgdGhlcmUgYXJlIHR3byBjb25kaXRpb25zIG9uCisgKiB3aGljaCB3ZSBzaG91bGQgb3V0cHV0IHRoZSBwcmVmaXguCisgKgorICogICAxLiBkaWZmX3dvcmRzLT5sYXN0X21pbnVzID09IDAgJiYKKyAqICAgICAgZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzID09IGRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIKKyAqCisgKiAgICAgIHRoYXQgaXM6IHRoZSBwbHVzIHRleHQgbXVzdCBzdGFydCBhcyBhIG5ldyBsaW5lLCBhbmQgaWYgdGhlcmUgaXMgbm8gbWludXMKKyAqICAgICAgd29yZCBwcmludGVkLCBhIGdyYXBoIHByZWZpeCBtdXN0IGJlIHByaW50ZWQuCisgKgorICogICAyLiBkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgPiBkaWZmX3dvcmRzLT5wbHVzLnRleHQucHRyICYmCisgKiAgICAgICooZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzIC0gMSkgPT0gJ1xuJworICoKKyAqICAgICAgdGhhdCBpczogYSBncmFwaCBwcmVmaXggbXVzdCBiZSBwcmludGVkIGZvbGxvd2luZyBhICdcbicKKyAqLworc3RhdGljIGludCBjb2xvcl93b3Jkc19vdXRwdXRfZ3JhcGhfcHJlZml4KHN0cnVjdCBkaWZmX3dvcmRzX2RhdGEgKmRpZmZfd29yZHMpCit7CisJaWYgKChkaWZmX3dvcmRzLT5sYXN0X21pbnVzID09IDAgJiYKKwkJZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzID09IGRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIpIHx8CisJCShkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgPiBkaWZmX3dvcmRzLT5wbHVzLnRleHQucHRyICYmCisJCSooZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzIC0gMSkgPT0gJ1xuJykpIHsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbl9vdXRfZGlmZl93b3Jkc19hdXgodm9pZCAqcHJpdiwgY2hhciAqbGluZSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJc3RydWN0IGRpZmZfd29yZHNfZGF0YSAqZGlmZl93b3JkcyA9IHByaXY7CisJc3RydWN0IGRpZmZfd29yZHNfc3R5bGUgKnN0eWxlID0gZGlmZl93b3Jkcy0+c3R5bGU7CisJaW50IG1pbnVzX2ZpcnN0LCBtaW51c19sZW4sIHBsdXNfZmlyc3QsIHBsdXNfbGVuOworCWNvbnN0IGNoYXIgKm1pbnVzX2JlZ2luLCAqbWludXNfZW5kLCAqcGx1c19iZWdpbiwgKnBsdXNfZW5kOworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCA9IGRpZmZfd29yZHMtPm9wdDsKKwlzdHJ1Y3Qgc3RyYnVmICptc2didWY7CisJY2hhciAqbGluZV9wcmVmaXggPSAiIjsKKworCWlmIChsaW5lWzBdICE9ICdAJyB8fCBwYXJzZV9odW5rX2hlYWRlcihsaW5lLCBsZW4sCisJCQkmbWludXNfZmlyc3QsICZtaW51c19sZW4sICZwbHVzX2ZpcnN0LCAmcGx1c19sZW4pKQorCQlyZXR1cm47CisKKwlhc3NlcnQob3B0KTsKKwlpZiAob3B0LT5vdXRwdXRfcHJlZml4KSB7CisJCW1zZ2J1ZiA9IG9wdC0+b3V0cHV0X3ByZWZpeChvcHQsIG9wdC0+b3V0cHV0X3ByZWZpeF9kYXRhKTsKKwkJbGluZV9wcmVmaXggPSBtc2didWYtPmJ1ZjsKKwl9CisKKwkvKiBQT1NJWCByZXF1aXJlcyB0aGF0IGZpcnN0IGJlIGRlY3JlbWVudGVkIGJ5IG9uZSBpZiBsZW4gPT0gMC4uLiAqLworCWlmIChtaW51c19sZW4pIHsKKwkJbWludXNfYmVnaW4gPSBkaWZmX3dvcmRzLT5taW51cy5vcmlnW21pbnVzX2ZpcnN0XS5iZWdpbjsKKwkJbWludXNfZW5kID0KKwkJCWRpZmZfd29yZHMtPm1pbnVzLm9yaWdbbWludXNfZmlyc3QgKyBtaW51c19sZW4gLSAxXS5lbmQ7CisJfSBlbHNlCisJCW1pbnVzX2JlZ2luID0gbWludXNfZW5kID0KKwkJCWRpZmZfd29yZHMtPm1pbnVzLm9yaWdbbWludXNfZmlyc3RdLmVuZDsKKworCWlmIChwbHVzX2xlbikgeworCQlwbHVzX2JlZ2luID0gZGlmZl93b3Jkcy0+cGx1cy5vcmlnW3BsdXNfZmlyc3RdLmJlZ2luOworCQlwbHVzX2VuZCA9IGRpZmZfd29yZHMtPnBsdXMub3JpZ1twbHVzX2ZpcnN0ICsgcGx1c19sZW4gLSAxXS5lbmQ7CisJfSBlbHNlCisJCXBsdXNfYmVnaW4gPSBwbHVzX2VuZCA9IGRpZmZfd29yZHMtPnBsdXMub3JpZ1twbHVzX2ZpcnN0XS5lbmQ7CisKKwlpZiAoY29sb3Jfd29yZHNfb3V0cHV0X2dyYXBoX3ByZWZpeChkaWZmX3dvcmRzKSkgeworCQlmcHV0cyhsaW5lX3ByZWZpeCwgZGlmZl93b3Jkcy0+b3B0LT5maWxlKTsKKwl9CisJaWYgKGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyAhPSBwbHVzX2JlZ2luKSB7CisJCWZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihkaWZmX3dvcmRzLT5vcHQtPmZpbGUsCisJCQkJJnN0eWxlLT5jdHgsIHN0eWxlLT5uZXdsaW5lLAorCQkJCXBsdXNfYmVnaW4gLSBkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMsCisJCQkJZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzLCBsaW5lX3ByZWZpeCk7CisJCWlmICgqKHBsdXNfYmVnaW4gLSAxKSA9PSAnXG4nKQorCQkJZnB1dHMobGluZV9wcmVmaXgsIGRpZmZfd29yZHMtPm9wdC0+ZmlsZSk7CisJfQorCWlmIChtaW51c19iZWdpbiAhPSBtaW51c19lbmQpIHsKKwkJZm5fb3V0X2RpZmZfd29yZHNfd3JpdGVfaGVscGVyKGRpZmZfd29yZHMtPm9wdC0+ZmlsZSwKKwkJCQkmc3R5bGUtPm9sZCwgc3R5bGUtPm5ld2xpbmUsCisJCQkJbWludXNfZW5kIC0gbWludXNfYmVnaW4sIG1pbnVzX2JlZ2luLAorCQkJCWxpbmVfcHJlZml4KTsKKwl9CisJaWYgKHBsdXNfYmVnaW4gIT0gcGx1c19lbmQpIHsKKwkJZm5fb3V0X2RpZmZfd29yZHNfd3JpdGVfaGVscGVyKGRpZmZfd29yZHMtPm9wdC0+ZmlsZSwKKwkJCQkmc3R5bGUtPm5ldywgc3R5bGUtPm5ld2xpbmUsCisJCQkJcGx1c19lbmQgLSBwbHVzX2JlZ2luLCBwbHVzX2JlZ2luLAorCQkJCWxpbmVfcHJlZml4KTsKKwl9CisKKwlkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgPSBwbHVzX2VuZDsKKwlkaWZmX3dvcmRzLT5sYXN0X21pbnVzID0gbWludXNfZmlyc3Q7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gc3RhcnRzIGxvb2tpbmcgYXQgKmJlZ2luLCBhbmQgcmV0dXJucyAwIGlmZiBhIHdvcmQgd2FzIGZvdW5kLiAqLworc3RhdGljIGludCBmaW5kX3dvcmRfYm91bmRhcmllcyhtbWZpbGVfdCAqYnVmZmVyLCByZWdleF90ICp3b3JkX3JlZ2V4LAorCQlpbnQgKmJlZ2luLCBpbnQgKmVuZCkKK3sKKwlpZiAod29yZF9yZWdleCAmJiAqYmVnaW4gPCBidWZmZXItPnNpemUpIHsKKwkJcmVnbWF0Y2hfdCBtYXRjaFsxXTsKKwkJaWYgKCFyZWdleGVjKHdvcmRfcmVnZXgsIGJ1ZmZlci0+cHRyICsgKmJlZ2luLCAxLCBtYXRjaCwgMCkpIHsKKwkJCWNoYXIgKnAgPSBtZW1jaHIoYnVmZmVyLT5wdHIgKyAqYmVnaW4gKyBtYXRjaFswXS5ybV9zbywKKwkJCQkJJ1xuJywgbWF0Y2hbMF0ucm1fZW8gLSBtYXRjaFswXS5ybV9zbyk7CisJCQkqZW5kID0gcCA/IHAgLSBidWZmZXItPnB0ciA6IG1hdGNoWzBdLnJtX2VvICsgKmJlZ2luOworCQkJKmJlZ2luICs9IG1hdGNoWzBdLnJtX3NvOworCQkJcmV0dXJuICpiZWdpbiA+PSAqZW5kOworCQl9CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBmaW5kIHRoZSBuZXh0IHdvcmQgKi8KKwl3aGlsZSAoKmJlZ2luIDwgYnVmZmVyLT5zaXplICYmIGlzc3BhY2UoYnVmZmVyLT5wdHJbKmJlZ2luXSkpCisJCSgqYmVnaW4pKys7CisJaWYgKCpiZWdpbiA+PSBidWZmZXItPnNpemUpCisJCXJldHVybiAtMTsKKworCS8qIGZpbmQgdGhlIGVuZCBvZiB0aGUgd29yZCAqLworCSplbmQgPSAqYmVnaW4gKyAxOworCXdoaWxlICgqZW5kIDwgYnVmZmVyLT5zaXplICYmICFpc3NwYWNlKGJ1ZmZlci0+cHRyWyplbmRdKSkKKwkJKCplbmQpKys7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSB3b3JkcyBpbiBidWZmZXItPnRleHQsIHN0b3JlcyB0aGUgbGlzdCB3aXRoCisgKiBuZXdsaW5lIHNlcGFyYXRvciBpbnRvIG91dCwgYW5kIHNhdmVzIHRoZSBvZmZzZXRzIG9mIHRoZSBvcmlnaW5hbCB3b3JkcworICogaW4gYnVmZmVyLT5vcmlnLgorICovCitzdGF0aWMgdm9pZCBkaWZmX3dvcmRzX2ZpbGwoc3RydWN0IGRpZmZfd29yZHNfYnVmZmVyICpidWZmZXIsIG1tZmlsZV90ICpvdXQsCisJCXJlZ2V4X3QgKndvcmRfcmVnZXgpCit7CisJaW50IGksIGo7CisJbG9uZyBhbGxvYyA9IDA7CisKKwlvdXQtPnNpemUgPSAwOworCW91dC0+cHRyID0gTlVMTDsKKworCS8qIGZha2UgYW4gZW1wdHkgIjB0aCIgd29yZCAqLworCUFMTE9DX0dST1coYnVmZmVyLT5vcmlnLCAxLCBidWZmZXItPm9yaWdfYWxsb2MpOworCWJ1ZmZlci0+b3JpZ1swXS5iZWdpbiA9IGJ1ZmZlci0+b3JpZ1swXS5lbmQgPSBidWZmZXItPnRleHQucHRyOworCWJ1ZmZlci0+b3JpZ19uciA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZmVyLT50ZXh0LnNpemU7IGkrKykgeworCQlpZiAoZmluZF93b3JkX2JvdW5kYXJpZXMoJmJ1ZmZlci0+dGV4dCwgd29yZF9yZWdleCwgJmksICZqKSkKKwkJCXJldHVybjsKKworCQkvKiBzdG9yZSBvcmlnaW5hbCBib3VuZGFyaWVzICovCisJCUFMTE9DX0dST1coYnVmZmVyLT5vcmlnLCBidWZmZXItPm9yaWdfbnIgKyAxLAorCQkJCWJ1ZmZlci0+b3JpZ19hbGxvYyk7CisJCWJ1ZmZlci0+b3JpZ1tidWZmZXItPm9yaWdfbnJdLmJlZ2luID0gYnVmZmVyLT50ZXh0LnB0ciArIGk7CisJCWJ1ZmZlci0+b3JpZ1tidWZmZXItPm9yaWdfbnJdLmVuZCA9IGJ1ZmZlci0+dGV4dC5wdHIgKyBqOworCQlidWZmZXItPm9yaWdfbnIrKzsKKworCQkvKiBzdG9yZSBvbmUgd29yZCAqLworCQlBTExPQ19HUk9XKG91dC0+cHRyLCBvdXQtPnNpemUgKyBqIC0gaSArIDEsIGFsbG9jKTsKKwkJbWVtY3B5KG91dC0+cHRyICsgb3V0LT5zaXplLCBidWZmZXItPnRleHQucHRyICsgaSwgaiAtIGkpOworCQlvdXQtPnB0cltvdXQtPnNpemUgKyBqIC0gaV0gPSAnXG4nOworCQlvdXQtPnNpemUgKz0gaiAtIGkgKyAxOworCisJCWkgPSBqIC0gMTsKKwl9Cit9CisKKy8qIHRoaXMgZXhlY3V0ZXMgdGhlIHdvcmQgZGlmZiBvbiB0aGUgYWNjdW11bGF0ZWQgYnVmZmVycyAqLworc3RhdGljIHZvaWQgZGlmZl93b3Jkc19zaG93KHN0cnVjdCBkaWZmX3dvcmRzX2RhdGEgKmRpZmZfd29yZHMpCit7CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisJbW1maWxlX3QgbWludXMsIHBsdXM7CisJc3RydWN0IGRpZmZfd29yZHNfc3R5bGUgKnN0eWxlID0gZGlmZl93b3Jkcy0+c3R5bGU7CisKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSBkaWZmX3dvcmRzLT5vcHQ7CisJc3RydWN0IHN0cmJ1ZiAqbXNnYnVmOworCWNoYXIgKmxpbmVfcHJlZml4ID0gIiI7CisKKwlhc3NlcnQob3B0KTsKKwlpZiAob3B0LT5vdXRwdXRfcHJlZml4KSB7CisJCW1zZ2J1ZiA9IG9wdC0+b3V0cHV0X3ByZWZpeChvcHQsIG9wdC0+b3V0cHV0X3ByZWZpeF9kYXRhKTsKKwkJbGluZV9wcmVmaXggPSBtc2didWYtPmJ1ZjsKKwl9CisKKwkvKiBzcGVjaWFsIGNhc2U6IG9ubHkgcmVtb3ZhbCAqLworCWlmICghZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUpIHsKKwkJZnB1dHMobGluZV9wcmVmaXgsIGRpZmZfd29yZHMtPm9wdC0+ZmlsZSk7CisJCWZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihkaWZmX3dvcmRzLT5vcHQtPmZpbGUsCisJCQkmc3R5bGUtPm9sZCwgc3R5bGUtPm5ld2xpbmUsCisJCQlkaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUsCisJCQlkaWZmX3dvcmRzLT5taW51cy50ZXh0LnB0ciwgbGluZV9wcmVmaXgpOworCQlkaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUgPSAwOworCQlyZXR1cm47CisJfQorCisJZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzID0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cjsKKwlkaWZmX3dvcmRzLT5sYXN0X21pbnVzID0gMDsKKworCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJZGlmZl93b3Jkc19maWxsKCZkaWZmX3dvcmRzLT5taW51cywgJm1pbnVzLCBkaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKKwlkaWZmX3dvcmRzX2ZpbGwoJmRpZmZfd29yZHMtPnBsdXMsICZwbHVzLCBkaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKKwl4cHAuZmxhZ3MgPSAwOworCS8qIGFzIG9ubHkgdGhlIGh1bmsgaGVhZGVyIHdpbGwgYmUgcGFyc2VkLCB3ZSBuZWVkIGEgMC1jb250ZXh0ICovCisJeGVjZmcuY3R4bGVuID0gMDsKKwl4ZGlfZGlmZl9vdXRmKCZtaW51cywgJnBsdXMsIGZuX291dF9kaWZmX3dvcmRzX2F1eCwgZGlmZl93b3JkcywKKwkJICAgICAgJnhwcCwgJnhlY2ZnKTsKKwlmcmVlKG1pbnVzLnB0cik7CisJZnJlZShwbHVzLnB0cik7CisJaWYgKGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyAhPSBkaWZmX3dvcmRzLT5wbHVzLnRleHQucHRyICsKKwkJCWRpZmZfd29yZHMtPnBsdXMudGV4dC5zaXplKSB7CisJCWlmIChjb2xvcl93b3Jkc19vdXRwdXRfZ3JhcGhfcHJlZml4KGRpZmZfd29yZHMpKQorCQkJZnB1dHMobGluZV9wcmVmaXgsIGRpZmZfd29yZHMtPm9wdC0+ZmlsZSk7CisJCWZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihkaWZmX3dvcmRzLT5vcHQtPmZpbGUsCisJCQkmc3R5bGUtPmN0eCwgc3R5bGUtPm5ld2xpbmUsCisJCQlkaWZmX3dvcmRzLT5wbHVzLnRleHQucHRyICsgZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUKKwkJCS0gZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzLCBkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMsCisJCQlsaW5lX3ByZWZpeCk7CisJfQorCWRpZmZfd29yZHMtPm1pbnVzLnRleHQuc2l6ZSA9IGRpZmZfd29yZHMtPnBsdXMudGV4dC5zaXplID0gMDsKK30KKworLyogSW4gImNvbG9yLXdvcmRzIiBtb2RlLCBzaG93IHdvcmQtZGlmZiBvZiB3b3JkcyBhY2N1bXVsYXRlZCBpbiB0aGUgYnVmZmVyICovCitzdGF0aWMgdm9pZCBkaWZmX3dvcmRzX2ZsdXNoKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhKQoreworCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUgfHwKKwkgICAgZWNiZGF0YS0+ZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUpCisJCWRpZmZfd29yZHNfc2hvdyhlY2JkYXRhLT5kaWZmX3dvcmRzKTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9maWxlc3BlY19sb2FkX2RyaXZlcihzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCS8qIFVzZSBhbHJlYWR5LWxvYWRlZCBkcml2ZXIgKi8KKwlpZiAob25lLT5kcml2ZXIpCisJCXJldHVybjsKKworCWlmIChTX0lTUkVHKG9uZS0+bW9kZSkpCisJCW9uZS0+ZHJpdmVyID0gdXNlcmRpZmZfZmluZF9ieV9wYXRoKG9uZS0+cGF0aCk7CisKKwkvKiBGYWxsYmFjayB0byBkZWZhdWx0IHNldHRpbmdzICovCisJaWYgKCFvbmUtPmRyaXZlcikKKwkJb25lLT5kcml2ZXIgPSB1c2VyZGlmZl9maW5kX2J5X25hbWUoImRlZmF1bHQiKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVzZXJkaWZmX3dvcmRfcmVnZXgoc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSkKK3sKKwlkaWZmX2ZpbGVzcGVjX2xvYWRfZHJpdmVyKG9uZSk7CisJcmV0dXJuIG9uZS0+ZHJpdmVyLT53b3JkX3JlZ2V4OworfQorCitzdGF0aWMgdm9pZCBpbml0X2RpZmZfd29yZHNfZGF0YShzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwKKwkJCQkgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3JpZ19vcHRzLAorCQkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvKQoreworCWludCBpOworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm8gPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZGlmZl9vcHRpb25zKSk7CisJbWVtY3B5KG8sIG9yaWdfb3B0cywgc2l6ZW9mKHN0cnVjdCBkaWZmX29wdGlvbnMpKTsKKworCWVjYmRhdGEtPmRpZmZfd29yZHMgPQorCQl4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGlmZl93b3Jkc19kYXRhKSk7CisJZWNiZGF0YS0+ZGlmZl93b3Jkcy0+dHlwZSA9IG8tPndvcmRfZGlmZjsKKwllY2JkYXRhLT5kaWZmX3dvcmRzLT5vcHQgPSBvOworCWlmICghby0+d29yZF9yZWdleCkKKwkJby0+d29yZF9yZWdleCA9IHVzZXJkaWZmX3dvcmRfcmVnZXgob25lKTsKKwlpZiAoIW8tPndvcmRfcmVnZXgpCisJCW8tPndvcmRfcmVnZXggPSB1c2VyZGlmZl93b3JkX3JlZ2V4KHR3byk7CisJaWYgKCFvLT53b3JkX3JlZ2V4KQorCQlvLT53b3JkX3JlZ2V4ID0gZGlmZl93b3JkX3JlZ2V4X2NmZzsKKwlpZiAoby0+d29yZF9yZWdleCkgeworCQllY2JkYXRhLT5kaWZmX3dvcmRzLT53b3JkX3JlZ2V4ID0gKHJlZ2V4X3QgKikKKwkJCXhtYWxsb2Moc2l6ZW9mKHJlZ2V4X3QpKTsKKwkJaWYgKHJlZ2NvbXAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+d29yZF9yZWdleCwKKwkJCSAgICBvLT53b3JkX3JlZ2V4LAorCQkJICAgIFJFR19FWFRFTkRFRCB8IFJFR19ORVdMSU5FKSkKKwkJCWRpZSAoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAlcyIsCisJCQkgICAgIG8tPndvcmRfcmVnZXgpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaWZmX3dvcmRzX3N0eWxlcyk7IGkrKykgeworCQlpZiAoby0+d29yZF9kaWZmID09IGRpZmZfd29yZHNfc3R5bGVzW2ldLnR5cGUpIHsKKwkJCWVjYmRhdGEtPmRpZmZfd29yZHMtPnN0eWxlID0KKwkJCQkmZGlmZl93b3Jkc19zdHlsZXNbaV07CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAod2FudF9jb2xvcihvLT51c2VfY29sb3IpKSB7CisJCXN0cnVjdCBkaWZmX3dvcmRzX3N0eWxlICpzdCA9IGVjYmRhdGEtPmRpZmZfd29yZHMtPnN0eWxlOworCQlzdC0+b2xkLmNvbG9yID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTEQpOworCQlzdC0+bmV3LmNvbG9yID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9ORVcpOworCQlzdC0+Y3R4LmNvbG9yID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfUExBSU4pOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9kaWZmX3dvcmRzX2RhdGEoc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEpCit7CisJaWYgKGVjYmRhdGEtPmRpZmZfd29yZHMpIHsKKwkJZGlmZl93b3Jkc19mbHVzaChlY2JkYXRhKTsKKwkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+b3B0KTsKKwkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+bWludXMudGV4dC5wdHIpOworCQlmcmVlIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5taW51cy5vcmlnKTsKKwkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cik7CisJCWZyZWUgKGVjYmRhdGEtPmRpZmZfd29yZHMtPnBsdXMub3JpZyk7CisJCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzLT53b3JkX3JlZ2V4KSB7CisJCQlyZWdmcmVlKGVjYmRhdGEtPmRpZmZfd29yZHMtPndvcmRfcmVnZXgpOworCQkJZnJlZShlY2JkYXRhLT5kaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKKwkJfQorCQlmcmVlKGVjYmRhdGEtPmRpZmZfd29yZHMpOworCQllY2JkYXRhLT5kaWZmX3dvcmRzID0gTlVMTDsKKwl9Cit9CisKK2NvbnN0IGNoYXIgKmRpZmZfZ2V0X2NvbG9yKGludCBkaWZmX3VzZV9jb2xvciwgZW51bSBjb2xvcl9kaWZmIGl4KQoreworCWlmICh3YW50X2NvbG9yKGRpZmZfdXNlX2NvbG9yKSkKKwkJcmV0dXJuIGRpZmZfY29sb3JzW2l4XTsKKwlyZXR1cm4gIiI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhbmVfdHJ1bmNhdGVfbGluZShzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiLCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljb25zdCBjaGFyICpjcDsKKwl1bnNpZ25lZCBsb25nIGFsbG90OworCXNpemVfdCBsID0gbGVuOworCisJaWYgKGVjYi0+dHJ1bmNhdGUpCisJCXJldHVybiBlY2ItPnRydW5jYXRlKGxpbmUsIGxlbik7CisJY3AgPSBsaW5lOworCWFsbG90ID0gbDsKKwl3aGlsZSAoMCA8IGwpIHsKKwkJKHZvaWQpIHV0Zjhfd2lkdGgoJmNwLCAmbCk7CisJCWlmICghY3ApCisJCQlicmVhazsgLyogdHJ1bmNhdGVkIGluIHRoZSBtaWRkbGU/ICovCisJfQorCXJldHVybiBhbGxvdCAtIGw7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfbG5vKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhKQoreworCWNvbnN0IGNoYXIgKnA7CisJZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlID0gMDsKKwllY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlID0gMDsKKwlwID0gc3RyY2hyKGxpbmUsICctJyk7CisJaWYgKCFwKQorCQlyZXR1cm47IC8qIGNhbm5vdCBoYXBwZW4gKi8KKwllY2JkYXRhLT5sbm9faW5fcHJlaW1hZ2UgPSBzdHJ0b2wocCArIDEsIE5VTEwsIDEwKTsKKwlwID0gc3RyY2hyKHAsICcrJyk7CisJaWYgKCFwKQorCQlyZXR1cm47IC8qIGNhbm5vdCBoYXBwZW4gKi8KKwllY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlID0gc3RydG9sKHAgKyAxLCBOVUxMLCAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX291dF9jb25zdW1lKHZvaWQgKnByaXYsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhID0gcHJpdjsKKwljb25zdCBjaGFyICptZXRhID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9NRVRBSU5GTyk7CisJY29uc3QgY2hhciAqcGxhaW4gPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX1BMQUlOKTsKKwljb25zdCBjaGFyICpyZXNldCA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfUkVTRVQpOworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm8gPSBlY2JkYXRhLT5vcHQ7CisJY2hhciAqbGluZV9wcmVmaXggPSAiIjsKKwlzdHJ1Y3Qgc3RyYnVmICptc2didWY7CisKKwlpZiAobyAmJiBvLT5vdXRwdXRfcHJlZml4KSB7CisJCW1zZ2J1ZiA9IG8tPm91dHB1dF9wcmVmaXgobywgby0+b3V0cHV0X3ByZWZpeF9kYXRhKTsKKwkJbGluZV9wcmVmaXggPSBtc2didWYtPmJ1ZjsKKwl9CisKKwlpZiAoZWNiZGF0YS0+aGVhZGVyKSB7CisJCWZwcmludGYoZWNiZGF0YS0+b3B0LT5maWxlLCAiJXMiLCBlY2JkYXRhLT5oZWFkZXItPmJ1Zik7CisJCXN0cmJ1Zl9yZXNldChlY2JkYXRhLT5oZWFkZXIpOworCQllY2JkYXRhLT5oZWFkZXIgPSBOVUxMOworCX0KKwkqKGVjYmRhdGEtPmZvdW5kX2NoYW5nZXNwKSA9IDE7CisKKwlpZiAoZWNiZGF0YS0+bGFiZWxfcGF0aFswXSkgeworCQljb25zdCBjaGFyICpuYW1lX2FfdGFiLCAqbmFtZV9iX3RhYjsKKworCQluYW1lX2FfdGFiID0gc3RyY2hyKGVjYmRhdGEtPmxhYmVsX3BhdGhbMF0sICcgJykgPyAiXHQiIDogIiI7CisJCW5hbWVfYl90YWIgPSBzdHJjaHIoZWNiZGF0YS0+bGFiZWxfcGF0aFsxXSwgJyAnKSA/ICJcdCIgOiAiIjsKKworCQlmcHJpbnRmKGVjYmRhdGEtPm9wdC0+ZmlsZSwgIiVzJXMtLS0gJXMlcyVzXG4iLAorCQkJbGluZV9wcmVmaXgsIG1ldGEsIGVjYmRhdGEtPmxhYmVsX3BhdGhbMF0sIHJlc2V0LCBuYW1lX2FfdGFiKTsKKwkJZnByaW50ZihlY2JkYXRhLT5vcHQtPmZpbGUsICIlcyVzKysrICVzJXMlc1xuIiwKKwkJCWxpbmVfcHJlZml4LCBtZXRhLCBlY2JkYXRhLT5sYWJlbF9wYXRoWzFdLCByZXNldCwgbmFtZV9iX3RhYik7CisJCWVjYmRhdGEtPmxhYmVsX3BhdGhbMF0gPSBlY2JkYXRhLT5sYWJlbF9wYXRoWzFdID0gTlVMTDsKKwl9CisKKwlpZiAoZGlmZl9zdXBwcmVzc19ibGFua19lbXB0eQorCSAgICAmJiBsZW4gPT0gMiAmJiBsaW5lWzBdID09ICcgJyAmJiBsaW5lWzFdID09ICdcbicpIHsKKwkJbGluZVswXSA9ICdcbic7CisJCWxlbiA9IDE7CisJfQorCisJaWYgKGxpbmVbMF0gPT0gJ0AnKSB7CisJCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzKQorCQkJZGlmZl93b3Jkc19mbHVzaChlY2JkYXRhKTsKKwkJbGVuID0gc2FuZV90cnVuY2F0ZV9saW5lKGVjYmRhdGEsIGxpbmUsIGxlbik7CisJCWZpbmRfbG5vKGxpbmUsIGVjYmRhdGEpOworCQllbWl0X2h1bmtfaGVhZGVyKGVjYmRhdGEsIGxpbmUsIGxlbik7CisJCWlmIChsaW5lW2xlbi0xXSAhPSAnXG4nKQorCQkJcHV0YygnXG4nLCBlY2JkYXRhLT5vcHQtPmZpbGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxlbiA8IDEpIHsKKwkJZW1pdF9saW5lKGVjYmRhdGEtPm9wdCwgcmVzZXQsIHJlc2V0LCBsaW5lLCBsZW4pOworCQlpZiAoZWNiZGF0YS0+ZGlmZl93b3JkcworCQkgICAgJiYgZWNiZGF0YS0+ZGlmZl93b3Jkcy0+dHlwZSA9PSBESUZGX1dPUkRTX1BPUkNFTEFJTikKKwkJCWZwdXRzKCJ+XG4iLCBlY2JkYXRhLT5vcHQtPmZpbGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGVjYmRhdGEtPmRpZmZfd29yZHMpIHsKKwkJaWYgKGxpbmVbMF0gPT0gJy0nKSB7CisJCQlkaWZmX3dvcmRzX2FwcGVuZChsaW5lLCBsZW4sCisJCQkJCSAgJmVjYmRhdGEtPmRpZmZfd29yZHMtPm1pbnVzKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChsaW5lWzBdID09ICcrJykgeworCQkJZGlmZl93b3Jkc19hcHBlbmQobGluZSwgbGVuLAorCQkJCQkgICZlY2JkYXRhLT5kaWZmX3dvcmRzLT5wbHVzKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmICghcHJlZml4Y21wKGxpbmUsICJcXCAiKSkgeworCQkJLyoKKwkJCSAqIEVhdCB0aGUgIm5vIG5ld2xpbmUgYXQgZW9mIiBtYXJrZXIgYXMgaWYgd2UKKwkJCSAqIHNhdyBhICIrIiBvciAiLSIgbGluZSB3aXRoIG5vdGhpbmcgb24gaXQsCisJCQkgKiBhbmQgcmV0dXJuIHdpdGhvdXQgZGlmZl93b3Jkc19mbHVzaCgpIHRvCisJCQkgKiBkZWZlciBwcm9jZXNzaW5nLiBJZiB0aGlzIGlzIHRoZSBlbmQgb2YKKwkJCSAqIHByZWltYWdlLCBtb3JlICIrIiBsaW5lcyBtYXkgY29tZSBhZnRlciBpdC4KKwkJCSAqLworCQkJcmV0dXJuOworCQl9CisJCWRpZmZfd29yZHNfZmx1c2goZWNiZGF0YSk7CisJCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzLT50eXBlID09IERJRkZfV09SRFNfUE9SQ0VMQUlOKSB7CisJCQllbWl0X2xpbmUoZWNiZGF0YS0+b3B0LCBwbGFpbiwgcmVzZXQsIGxpbmUsIGxlbik7CisJCQlmcHV0cygiflxuIiwgZWNiZGF0YS0+b3B0LT5maWxlKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBTa2lwIHRoZSBwcmVmaXggY2hhcmFjdGVyLCBpZiBhbnkuICBXaXRoCisJCQkgKiBkaWZmX3N1cHByZXNzX2JsYW5rX2VtcHR5LCB0aGVyZSBtYXkgYmUKKwkJCSAqIG5vbmUuCisJCQkgKi8KKwkJCWlmIChsaW5lWzBdICE9ICdcbicpIHsKKwkJCSAgICAgIGxpbmUrKzsKKwkJCSAgICAgIGxlbi0tOworCQkJfQorCQkJZW1pdF9saW5lKGVjYmRhdGEtPm9wdCwgcGxhaW4sIHJlc2V0LCBsaW5lLCBsZW4pOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAobGluZVswXSAhPSAnKycpIHsKKwkJY29uc3QgY2hhciAqY29sb3IgPQorCQkJZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwKKwkJCQkgICAgICAgbGluZVswXSA9PSAnLScgPyBESUZGX0ZJTEVfT0xEIDogRElGRl9QTEFJTik7CisJCWVjYmRhdGEtPmxub19pbl9wcmVpbWFnZSsrOworCQlpZiAobGluZVswXSA9PSAnICcpCisJCQllY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlKys7CisJCWVtaXRfbGluZShlY2JkYXRhLT5vcHQsIGNvbG9yLCByZXNldCwgbGluZSwgbGVuKTsKKwl9IGVsc2UgeworCQllY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlKys7CisJCWVtaXRfYWRkX2xpbmUocmVzZXQsIGVjYmRhdGEsIGxpbmUgKyAxLCBsZW4gLSAxKTsKKwl9Cit9CisKK3N0YXRpYyBjaGFyICpwcHJpbnRfcmVuYW1lKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJY29uc3QgY2hhciAqb2xkID0gYTsKKwljb25zdCBjaGFyICpuZXcgPSBiOworCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBwZnhfbGVuZ3RoLCBzZnhfbGVuZ3RoOworCWludCBsZW5fYSA9IHN0cmxlbihhKTsKKwlpbnQgbGVuX2IgPSBzdHJsZW4oYik7CisJaW50IGFfbWlkbGVuLCBiX21pZGxlbjsKKwlpbnQgcWxlbl9hID0gcXVvdGVfY19zdHlsZShhLCBOVUxMLCBOVUxMLCAwKTsKKwlpbnQgcWxlbl9iID0gcXVvdGVfY19zdHlsZShiLCBOVUxMLCBOVUxMLCAwKTsKKworCWlmIChxbGVuX2EgfHwgcWxlbl9iKSB7CisJCXF1b3RlX2Nfc3R5bGUoYSwgJm5hbWUsIE5VTEwsIDApOworCQlzdHJidWZfYWRkc3RyKCZuYW1lLCAiID0+ICIpOworCQlxdW90ZV9jX3N0eWxlKGIsICZuYW1lLCBOVUxMLCAwKTsKKwkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm5hbWUsIE5VTEwpOworCX0KKworCS8qIEZpbmQgY29tbW9uIHByZWZpeCAqLworCXBmeF9sZW5ndGggPSAwOworCXdoaWxlICgqb2xkICYmICpuZXcgJiYgKm9sZCA9PSAqbmV3KSB7CisJCWlmICgqb2xkID09ICcvJykKKwkJCXBmeF9sZW5ndGggPSBvbGQgLSBhICsgMTsKKwkJb2xkKys7CisJCW5ldysrOworCX0KKworCS8qIEZpbmQgY29tbW9uIHN1ZmZpeCAqLworCW9sZCA9IGEgKyBsZW5fYTsKKwluZXcgPSBiICsgbGVuX2I7CisJc2Z4X2xlbmd0aCA9IDA7CisJd2hpbGUgKGEgPD0gb2xkICYmIGIgPD0gbmV3ICYmICpvbGQgPT0gKm5ldykgeworCQlpZiAoKm9sZCA9PSAnLycpCisJCQlzZnhfbGVuZ3RoID0gbGVuX2EgLSAob2xkIC0gYSk7CisJCW9sZC0tOworCQluZXctLTsKKwl9CisKKwkvKgorCSAqIHBmeHttaWQtYSA9PiBtaWQtYn1zZngKKwkgKiB7cGZ4LWEgPT4gcGZ4LWJ9c2Z4CisJICogcGZ4e3NmeC1hID0+IHNmeC1ifQorCSAqIG5hbWUtYSA9PiBuYW1lLWIKKwkgKi8KKwlhX21pZGxlbiA9IGxlbl9hIC0gcGZ4X2xlbmd0aCAtIHNmeF9sZW5ndGg7CisJYl9taWRsZW4gPSBsZW5fYiAtIHBmeF9sZW5ndGggLSBzZnhfbGVuZ3RoOworCWlmIChhX21pZGxlbiA8IDApCisJCWFfbWlkbGVuID0gMDsKKwlpZiAoYl9taWRsZW4gPCAwKQorCQliX21pZGxlbiA9IDA7CisKKwlzdHJidWZfZ3JvdygmbmFtZSwgcGZ4X2xlbmd0aCArIGFfbWlkbGVuICsgYl9taWRsZW4gKyBzZnhfbGVuZ3RoICsgNyk7CisJaWYgKHBmeF9sZW5ndGggKyBzZnhfbGVuZ3RoKSB7CisJCXN0cmJ1Zl9hZGQoJm5hbWUsIGEsIHBmeF9sZW5ndGgpOworCQlzdHJidWZfYWRkY2goJm5hbWUsICd7Jyk7CisJfQorCXN0cmJ1Zl9hZGQoJm5hbWUsIGEgKyBwZnhfbGVuZ3RoLCBhX21pZGxlbik7CisJc3RyYnVmX2FkZHN0cigmbmFtZSwgIiA9PiAiKTsKKwlzdHJidWZfYWRkKCZuYW1lLCBiICsgcGZ4X2xlbmd0aCwgYl9taWRsZW4pOworCWlmIChwZnhfbGVuZ3RoICsgc2Z4X2xlbmd0aCkgeworCQlzdHJidWZfYWRkY2goJm5hbWUsICd9Jyk7CisJCXN0cmJ1Zl9hZGQoJm5hbWUsIGEgKyBsZW5fYSAtIHNmeF9sZW5ndGgsIHNmeF9sZW5ndGgpOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmbmFtZSwgTlVMTCk7Cit9CisKK3N0cnVjdCBkaWZmc3RhdF90IHsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCXN0cnVjdCBkaWZmc3RhdF9maWxlIHsKKwkJY2hhciAqZnJvbV9uYW1lOworCQljaGFyICpuYW1lOworCQljaGFyICpwcmludF9uYW1lOworCQl1bnNpZ25lZCBpc191bm1lcmdlZDoxOworCQl1bnNpZ25lZCBpc19iaW5hcnk6MTsKKwkJdW5zaWduZWQgaXNfcmVuYW1lZDoxOworCQl1aW50bWF4X3QgYWRkZWQsIGRlbGV0ZWQ7CisJfSAqKmZpbGVzOworfTsKKworc3RhdGljIHN0cnVjdCBkaWZmc3RhdF9maWxlICpkaWZmc3RhdF9hZGQoc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0LAorCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWVfYSwKKwkJCQkJICBjb25zdCBjaGFyICpuYW1lX2IpCit7CisJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKng7CisJeCA9IHhjYWxsb2Moc2l6ZW9mICgqeCksIDEpOworCWlmIChkaWZmc3RhdC0+bnIgPT0gZGlmZnN0YXQtPmFsbG9jKSB7CisJCWRpZmZzdGF0LT5hbGxvYyA9IGFsbG9jX25yKGRpZmZzdGF0LT5hbGxvYyk7CisJCWRpZmZzdGF0LT5maWxlcyA9IHhyZWFsbG9jKGRpZmZzdGF0LT5maWxlcywKKwkJCQlkaWZmc3RhdC0+YWxsb2MgKiBzaXplb2YoeCkpOworCX0KKwlkaWZmc3RhdC0+ZmlsZXNbZGlmZnN0YXQtPm5yKytdID0geDsKKwlpZiAobmFtZV9iKSB7CisJCXgtPmZyb21fbmFtZSA9IHhzdHJkdXAobmFtZV9hKTsKKwkJeC0+bmFtZSA9IHhzdHJkdXAobmFtZV9iKTsKKwkJeC0+aXNfcmVuYW1lZCA9IDE7CisJfQorCWVsc2UgeworCQl4LT5mcm9tX25hbWUgPSBOVUxMOworCQl4LT5uYW1lID0geHN0cmR1cChuYW1lX2EpOworCX0KKwlyZXR1cm4geDsKK30KKworc3RhdGljIHZvaWQgZGlmZnN0YXRfY29uc3VtZSh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQgPSBwcml2OworCXN0cnVjdCBkaWZmc3RhdF9maWxlICp4ID0gZGlmZnN0YXQtPmZpbGVzW2RpZmZzdGF0LT5uciAtIDFdOworCisJaWYgKGxpbmVbMF0gPT0gJysnKQorCQl4LT5hZGRlZCsrOworCWVsc2UgaWYgKGxpbmVbMF0gPT0gJy0nKQorCQl4LT5kZWxldGVkKys7Cit9CisKK2NvbnN0IGNoYXIgbWltZV9ib3VuZGFyeV9sZWFkZXJbXSA9ICItLS0tLS0tLS0tLS0iOworCitzdGF0aWMgaW50IHNjYWxlX2xpbmVhcihpbnQgaXQsIGludCB3aWR0aCwgaW50IG1heF9jaGFuZ2UpCit7CisJaWYgKCFpdCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBtYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgJy0nIG9yICcrJyBpcyBwcmludGVkIGlmCisJICogdGhlcmUgaXMgYW55IGNoYW5nZSB0byB0aGlzIHBhdGguIFRoZSBlYXNpZXN0IHdheSBpcyB0bworCSAqIHNjYWxlIGxpbmVhcmx5IGFzIGlmIHRoZSBhbGxvdGVkIHdpZHRoIGlzIG9uZSBjb2x1bW4gc2hvcnRlcgorCSAqIHRoYW4gaXQgaXMsIGFuZCB0aGVuIGFkZCAxIHRvIHRoZSByZXN1bHQuCisJICovCisJcmV0dXJuIDEgKyAoaXQgKiAod2lkdGggLSAxKSAvIG1heF9jaGFuZ2UpOworfQorCitzdGF0aWMgdm9pZCBzaG93X25hbWUoRklMRSAqZmlsZSwKKwkJICAgICAgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCWZwcmludGYoZmlsZSwgIiAlcyUtKnMgfCIsIHByZWZpeCwgbGVuLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19ncmFwaChGSUxFICpmaWxlLCBjaGFyIGNoLCBpbnQgY250LCBjb25zdCBjaGFyICpzZXQsIGNvbnN0IGNoYXIgKnJlc2V0KQoreworCWlmIChjbnQgPD0gMCkKKwkJcmV0dXJuOworCWZwcmludGYoZmlsZSwgIiVzIiwgc2V0KTsKKwl3aGlsZSAoY250LS0pCisJCXB1dGMoY2gsIGZpbGUpOworCWZwcmludGYoZmlsZSwgIiVzIiwgcmVzZXQpOworfQorCitzdGF0aWMgdm9pZCBmaWxsX3ByaW50X25hbWUoc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmZpbGUpCit7CisJY2hhciAqcG5hbWU7CisKKwlpZiAoZmlsZS0+cHJpbnRfbmFtZSkKKwkJcmV0dXJuOworCisJaWYgKCFmaWxlLT5pc19yZW5hbWVkKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWlmIChxdW90ZV9jX3N0eWxlKGZpbGUtPm5hbWUsICZidWYsIE5VTEwsIDApKSB7CisJCQlwbmFtZSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlwbmFtZSA9IGZpbGUtPm5hbWU7CisJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJfQorCX0gZWxzZSB7CisJCXBuYW1lID0gcHByaW50X3JlbmFtZShmaWxlLT5mcm9tX25hbWUsIGZpbGUtPm5hbWUpOworCX0KKwlmaWxlLT5wcmludF9uYW1lID0gcG5hbWU7Cit9CisKK2ludCBwcmludF9zdGF0X3N1bW1hcnkoRklMRSAqZnAsIGludCBmaWxlcywgaW50IGluc2VydGlvbnMsIGludCBkZWxldGlvbnMpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlpZiAoIWZpbGVzKSB7CisJCWFzc2VydChpbnNlcnRpb25zID09IDAgJiYgZGVsZXRpb25zID09IDApOworCQlyZXR1cm4gZnByaW50ZihmcCwgIiVzXG4iLCAiIDAgZmlsZXMgY2hhbmdlZCIpOworCX0KKworCXN0cmJ1Zl9hZGRmKCZzYiwKKwkJICAgIChmaWxlcyA9PSAxKSA/ICIgJWQgZmlsZSBjaGFuZ2VkIiA6ICIgJWQgZmlsZXMgY2hhbmdlZCIsCisJCSAgICBmaWxlcyk7CisKKwkvKgorCSAqIEZvciBiaW5hcnkgZGlmZiwgdGhlIGNhbGxlciBtYXkgd2FudCB0byBwcmludCAieCBmaWxlcworCSAqIGNoYW5nZWQiIHdpdGggaW5zZXJ0aW9ucyA9PSAwICYmIGRlbGV0aW9ucyA9PSAwLgorCSAqCisJICogTm90IG9taXR0aW5nICIwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pIiBpbiB0aGlzIGNhc2UKKwkgKiBpcyBwcm9iYWJseSBsZXNzIGNvbmZ1c2luZyAoaS5lIHNraXAgb3ZlciAiMiBmaWxlcyBjaGFuZ2VkCisJICogYnV0IG5vdGhpbmcgYWJvdXQgYWRkZWQvcmVtb3ZlZCBsaW5lcz8gSXMgdGhpcyBhIGJ1ZyBpbiBHaXQ/IikuCisJICovCisJaWYgKGluc2VydGlvbnMgfHwgZGVsZXRpb25zID09IDApIHsKKwkJLyoKKwkJICogVFJBTlNMQVRPUlM6ICIrIiBpbiAoKykgaXMgYSBsaW5lIGFkZGl0aW9uIG1hcmtlcjsKKwkJICogZG8gbm90IHRyYW5zbGF0ZSBpdC4KKwkJICovCisJCXN0cmJ1Zl9hZGRmKCZzYiwKKwkJCSAgICAoaW5zZXJ0aW9ucyA9PSAxKSA/ICIsICVkIGluc2VydGlvbigrKSIgOiAiLCAlZCBpbnNlcnRpb25zKCspIiwKKwkJCSAgICBpbnNlcnRpb25zKTsKKwl9CisKKwlpZiAoZGVsZXRpb25zIHx8IGluc2VydGlvbnMgPT0gMCkgeworCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogIi0iIGluICgtKSBpcyBhIGxpbmUgcmVtb3ZhbCBtYXJrZXI7CisJCSAqIGRvIG5vdCB0cmFuc2xhdGUgaXQuCisJCSAqLworCQlzdHJidWZfYWRkZigmc2IsCisJCQkgICAgKGRlbGV0aW9ucyA9PSAxKSA/ICIsICVkIGRlbGV0aW9uKC0pIiA6ICIsICVkIGRlbGV0aW9ucygtKSIsCisJCQkgICAgZGVsZXRpb25zKTsKKwl9CisJc3RyYnVmX2FkZGNoKCZzYiwgJ1xuJyk7CisJcmV0ID0gZnB1dHMoc2IuYnVmLCBmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaG93X3N0YXRzKHN0cnVjdCBkaWZmc3RhdF90ICpkYXRhLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBpLCBsZW4sIGFkZCwgZGVsLCBhZGRzID0gMCwgZGVscyA9IDA7CisJdWludG1heF90IG1heF9jaGFuZ2UgPSAwLCBtYXhfbGVuID0gMDsKKwlpbnQgdG90YWxfZmlsZXMgPSBkYXRhLT5uciwgY291bnQ7CisJaW50IHdpZHRoLCBuYW1lX3dpZHRoLCBncmFwaF93aWR0aCwgbnVtYmVyX3dpZHRoID0gMCwgYmluX3dpZHRoID0gMDsKKwljb25zdCBjaGFyICpyZXNldCwgKmFkZF9jLCAqZGVsX2M7CisJY29uc3QgY2hhciAqbGluZV9wcmVmaXggPSAiIjsKKwlpbnQgZXh0cmFfc2hvd24gPSAwOworCXN0cnVjdCBzdHJidWYgKm1zZyA9IE5VTEw7CisKKwlpZiAoZGF0YS0+bnIgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKG9wdGlvbnMtPm91dHB1dF9wcmVmaXgpIHsKKwkJbXNnID0gb3B0aW9ucy0+b3V0cHV0X3ByZWZpeChvcHRpb25zLCBvcHRpb25zLT5vdXRwdXRfcHJlZml4X2RhdGEpOworCQlsaW5lX3ByZWZpeCA9IG1zZy0+YnVmOworCX0KKworCWNvdW50ID0gb3B0aW9ucy0+c3RhdF9jb3VudCA/IG9wdGlvbnMtPnN0YXRfY291bnQgOiBkYXRhLT5ucjsKKworCXJlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG9wdGlvbnMsIERJRkZfUkVTRVQpOworCWFkZF9jID0gZGlmZl9nZXRfY29sb3Jfb3B0KG9wdGlvbnMsIERJRkZfRklMRV9ORVcpOworCWRlbF9jID0gZGlmZl9nZXRfY29sb3Jfb3B0KG9wdGlvbnMsIERJRkZfRklMRV9PTEQpOworCisJLyoKKwkgKiBGaW5kIHRoZSBsb25nZXN0IGZpbGVuYW1lIGFuZCBtYXggbnVtYmVyIG9mIGNoYW5nZXMKKwkgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IGNvdW50KSAmJiAoaSA8IGRhdGEtPm5yKTsgaSsrKSB7CisJCXN0cnVjdCBkaWZmc3RhdF9maWxlICpmaWxlID0gZGF0YS0+ZmlsZXNbaV07CisJCXVpbnRtYXhfdCBjaGFuZ2UgPSBmaWxlLT5hZGRlZCArIGZpbGUtPmRlbGV0ZWQ7CisJCWlmICghZGF0YS0+ZmlsZXNbaV0tPmlzX3JlbmFtZWQgJiYKKwkJCSAoY2hhbmdlID09IDApKSB7CisJCQljb3VudCsrOyAvKiBub3Qgc2hvd24gPT0gcm9vbSBmb3Igb25lIG1vcmUgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWZpbGxfcHJpbnRfbmFtZShmaWxlKTsKKwkJbGVuID0gc3RybGVuKGZpbGUtPnByaW50X25hbWUpOworCQlpZiAobWF4X2xlbiA8IGxlbikKKwkJCW1heF9sZW4gPSBsZW47CisKKwkJaWYgKGZpbGUtPmlzX3VubWVyZ2VkKSB7CisJCQkvKiAiVW5tZXJnZWQiIGlzIDggY2hhcmFjdGVycyAqLworCQkJYmluX3dpZHRoID0gYmluX3dpZHRoIDwgOCA/IDggOiBiaW5fd2lkdGg7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmlsZS0+aXNfYmluYXJ5KSB7CisJCQkvKiAiQmluIFhYWCAtPiBZWVkgYnl0ZXMiICovCisJCQlpbnQgdyA9IDE0ICsgZGVjaW1hbF93aWR0aChmaWxlLT5hZGRlZCkKKwkJCQkrIGRlY2ltYWxfd2lkdGgoZmlsZS0+ZGVsZXRlZCk7CisJCQliaW5fd2lkdGggPSBiaW5fd2lkdGggPCB3ID8gdyA6IGJpbl93aWR0aDsKKwkJCS8qIERpc3BsYXkgY2hhbmdlIGNvdW50cyBhbGlnbmVkIHdpdGggIkJpbiIgKi8KKwkJCW51bWJlcl93aWR0aCA9IDM7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChtYXhfY2hhbmdlIDwgY2hhbmdlKQorCQkJbWF4X2NoYW5nZSA9IGNoYW5nZTsKKwl9CisJY291bnQgPSBpOyAvKiBtaW4oY291bnQsIGRhdGEtPm5yKSAqLworCisJLyoKKwkgKiBXZSBoYXZlIHdpZHRoID0gc3RhdF93aWR0aCBvciB0ZXJtX2NvbHVtbnMoKSBjb2x1bW5zIHRvdGFsLgorCSAqIFdlIHdhbnQgYSBtYXhpbXVtIG9mIG1pbihtYXhfbGVuLCBzdGF0X25hbWVfd2lkdGgpIGZvciB0aGUgbmFtZSBwYXJ0LgorCSAqIFdlIHdhbnQgYSBtYXhpbXVtIG9mIG1pbihtYXhfY2hhbmdlLCBzdGF0X2dyYXBoX3dpZHRoKSBmb3IgdGhlICstIHBhcnQuCisJICogV2UgYWxzbyBuZWVkIDEgZm9yICIgIiBhbmQgNCArIGRlY2ltYWxfd2lkdGgobWF4X2NoYW5nZSkKKwkgKiBmb3IgIiB8IE5OTk4gIiBhbmQgb25lIHRoZSBlbXB0eSBjb2x1bW4gYXQgdGhlIGVuZCwgYWx0b2dldGhlcgorCSAqIDYgKyBkZWNpbWFsX3dpZHRoKG1heF9jaGFuZ2UpLgorCSAqCisJICogSWYgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlLCB3ZSB3aWxsIHVzZSB0aGUgc21hbGxlciBvZgorCSAqIHN0YXRfbmFtZV93aWR0aCAoaWYgc2V0KSBhbmQgNS84KndpZHRoIGZvciB0aGUgZmlsZW5hbWUsCisJICogYW5kIHRoZSByZXN0IGZvciBjb25zdGFudCBlbGVtZW50cyArIGdyYXBoIHBhcnQsIGJ1dCBubyBtb3JlCisJICogdGhhbiBzdGF0X2dyYXBoX3dpZHRoIGZvciB0aGUgZ3JhcGggcGFydC4KKwkgKiAoNS84IGdpdmVzIDUwIGZvciBmaWxlbmFtZSBhbmQgMzAgZm9yIHRoZSBjb25zdGFudCBwYXJ0cyArIGdyYXBoCisJICogZm9yIHRoZSBzdGFuZGFyZCB0ZXJtaW5hbCBzaXplKS4KKwkgKgorCSAqIEluIG90aGVyIHdvcmRzOiBzdGF0X3dpZHRoIGxpbWl0cyB0aGUgbWF4aW11bSB3aWR0aCwgYW5kCisJICogc3RhdF9uYW1lX3dpZHRoIGZpeGVzIHRoZSBtYXhpbXVtIHdpZHRoIG9mIHRoZSBmaWxlbmFtZSwKKwkgKiBhbmQgaXMgYWxzbyB1c2VkIHRvIGRpdmlkZSBhdmFpbGFibGUgY29sdW1ucyBpZiB0aGVyZQorCSAqIGFyZW4ndCBlbm91Z2guCisJICoKKwkgKiBCaW5hcnkgZmlsZXMgYXJlIGRpc3BsYXllZCB3aXRoICJCaW4gWFhYIC0+IFlZWSBieXRlcyIKKwkgKiBpbnN0ZWFkIG9mIHRoZSBjaGFuZ2UgY291bnQgYW5kIGdyYXBoLiBUaGlzIHBhcnQgaXMgdHJlYXRlZAorCSAqIHNpbWlsYXJseSB0byB0aGUgZ3JhcGggcGFydCwgZXhjZXB0IHRoYXQgaXQgaXMgbm90CisJICogInNjYWxlZCIuIElmIHRvdGFsIHdpZHRoIGlzIHRvbyBzbWFsbCB0byBhY2NvbW9kYXRlIHRoZQorCSAqIGd1YXJhbnRlZWQgbWluaW11bSB3aWR0aCBvZiB0aGUgZmlsZW5hbWUgcGFydCBhbmQgdGhlCisJICogc2VwYXJhdG9ycyBhbmQgdGhpcyBtZXNzYWdlLCB0aGlzIG1lc3NhZ2Ugd2lsbCAib3ZlcmZsb3ciCisJICogbWFraW5nIHRoZSBsaW5lIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIHdpZHRoLgorCSAqLworCisJaWYgKG9wdGlvbnMtPnN0YXRfd2lkdGggPT0gLTEpCisJCXdpZHRoID0gdGVybV9jb2x1bW5zKCkgLSBvcHRpb25zLT5vdXRwdXRfcHJlZml4X2xlbmd0aDsKKwllbHNlCisJCXdpZHRoID0gb3B0aW9ucy0+c3RhdF93aWR0aCA/IG9wdGlvbnMtPnN0YXRfd2lkdGggOiA4MDsKKwludW1iZXJfd2lkdGggPSBkZWNpbWFsX3dpZHRoKG1heF9jaGFuZ2UpID4gbnVtYmVyX3dpZHRoID8KKwkJZGVjaW1hbF93aWR0aChtYXhfY2hhbmdlKSA6IG51bWJlcl93aWR0aDsKKworCWlmIChvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoID09IC0xKQorCQlvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoID0gZGlmZl9zdGF0X2dyYXBoX3dpZHRoOworCisJLyoKKwkgKiBHdWFyYW50ZWUgMy84KjE2PT02IGZvciB0aGUgZ3JhcGggcGFydAorCSAqIGFuZCA1LzgqMTY9PTEwIGZvciB0aGUgZmlsZW5hbWUgcGFydAorCSAqLworCWlmICh3aWR0aCA8IDE2ICsgNiArIG51bWJlcl93aWR0aCkKKwkJd2lkdGggPSAxNiArIDYgKyBudW1iZXJfd2lkdGg7CisKKwkvKgorCSAqIEZpcnN0IGFzc2lnbiBzaXplcyB0aGF0IGFyZSB3YW50ZWQsIGlnbm9yaW5nIGF2YWlsYWJsZSB3aWR0aC4KKwkgKiBzdHJsZW4oIkJpbiBYWFggLT4gWVlZIGJ5dGVzIikgPT0gYmluX3dpZHRoLCBhbmQgdGhlIHBhcnQKKwkgKiBzdGFydGluZyBmcm9tICJYWFgiIHNob3VsZCBmaXQgaW4gZ3JhcGhfd2lkdGguCisJICovCisJZ3JhcGhfd2lkdGggPSBtYXhfY2hhbmdlICsgNCA+IGJpbl93aWR0aCA/IG1heF9jaGFuZ2UgOiBiaW5fd2lkdGggLSA0OworCWlmIChvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoICYmCisJICAgIG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGggPCBncmFwaF93aWR0aCkKKwkJZ3JhcGhfd2lkdGggPSBvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoOworCisJbmFtZV93aWR0aCA9IChvcHRpb25zLT5zdGF0X25hbWVfd2lkdGggPiAwICYmCisJCSAgICAgIG9wdGlvbnMtPnN0YXRfbmFtZV93aWR0aCA8IG1heF9sZW4pID8KKwkJb3B0aW9ucy0+c3RhdF9uYW1lX3dpZHRoIDogbWF4X2xlbjsKKworCS8qCisJICogQWRqdXN0IGFkanVzdGFibGUgd2lkdGhzIG5vdCB0byBleGNlZWQgbWF4aW11bSB3aWR0aAorCSAqLworCWlmIChuYW1lX3dpZHRoICsgbnVtYmVyX3dpZHRoICsgNiArIGdyYXBoX3dpZHRoID4gd2lkdGgpIHsKKwkJaWYgKGdyYXBoX3dpZHRoID4gd2lkdGggKiAzLzggLSBudW1iZXJfd2lkdGggLSA2KSB7CisJCQlncmFwaF93aWR0aCA9IHdpZHRoICogMy84IC0gbnVtYmVyX3dpZHRoIC0gNjsKKwkJCWlmIChncmFwaF93aWR0aCA8IDYpCisJCQkJZ3JhcGhfd2lkdGggPSA2OworCQl9CisKKwkJaWYgKG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGggJiYKKwkJICAgIGdyYXBoX3dpZHRoID4gb3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aCkKKwkJCWdyYXBoX3dpZHRoID0gb3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aDsKKwkJaWYgKG5hbWVfd2lkdGggPiB3aWR0aCAtIG51bWJlcl93aWR0aCAtIDYgLSBncmFwaF93aWR0aCkKKwkJCW5hbWVfd2lkdGggPSB3aWR0aCAtIG51bWJlcl93aWR0aCAtIDYgLSBncmFwaF93aWR0aDsKKwkJZWxzZQorCQkJZ3JhcGhfd2lkdGggPSB3aWR0aCAtIG51bWJlcl93aWR0aCAtIDYgLSBuYW1lX3dpZHRoOworCX0KKworCS8qCisJICogRnJvbSBoZXJlIG5hbWVfd2lkdGggaXMgdGhlIHdpZHRoIG9mIHRoZSBuYW1lIGFyZWEsCisJICogYW5kIGdyYXBoX3dpZHRoIGlzIHRoZSB3aWR0aCBvZiB0aGUgZ3JhcGggYXJlYS4KKwkgKiBtYXhfY2hhbmdlIGlzIHVzZWQgdG8gc2NhbGUgZ3JhcGggcHJvcGVybHkuCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJY29uc3QgY2hhciAqcHJlZml4ID0gIiI7CisJCWNoYXIgKm5hbWUgPSBkYXRhLT5maWxlc1tpXS0+cHJpbnRfbmFtZTsKKwkJdWludG1heF90IGFkZGVkID0gZGF0YS0+ZmlsZXNbaV0tPmFkZGVkOworCQl1aW50bWF4X3QgZGVsZXRlZCA9IGRhdGEtPmZpbGVzW2ldLT5kZWxldGVkOworCQlpbnQgbmFtZV9sZW47CisKKwkJaWYgKCFkYXRhLT5maWxlc1tpXS0+aXNfcmVuYW1lZCAmJgorCQkJIChhZGRlZCArIGRlbGV0ZWQgPT0gMCkpIHsKKwkJCXRvdGFsX2ZpbGVzLS07CisJCQljb250aW51ZTsKKwkJfQorCQkvKgorCQkgKiAic2NhbGUiIHRoZSBmaWxlbmFtZQorCQkgKi8KKwkJbGVuID0gbmFtZV93aWR0aDsKKwkJbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChuYW1lX3dpZHRoIDwgbmFtZV9sZW4pIHsKKwkJCWNoYXIgKnNsYXNoOworCQkJcHJlZml4ID0gIi4uLiI7CisJCQlsZW4gLT0gMzsKKwkJCW5hbWUgKz0gbmFtZV9sZW4gLSBsZW47CisJCQlzbGFzaCA9IHN0cmNocihuYW1lLCAnLycpOworCQkJaWYgKHNsYXNoKQorCQkJCW5hbWUgPSBzbGFzaDsKKwkJfQorCisJCWlmIChkYXRhLT5maWxlc1tpXS0+aXNfYmluYXJ5KSB7CisJCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICIlcyIsIGxpbmVfcHJlZml4KTsKKwkJCXNob3dfbmFtZShvcHRpb25zLT5maWxlLCBwcmVmaXgsIG5hbWUsIGxlbik7CisJCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICIgJSpzIiwgbnVtYmVyX3dpZHRoLCAiQmluIik7CisJCQlpZiAoIWFkZGVkICYmICFkZWxldGVkKSB7CisJCQkJcHV0YygnXG4nLCBvcHRpb25zLT5maWxlKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiAlcyUiUFJJdU1BWCIlcyIsCisJCQkJZGVsX2MsIGRlbGV0ZWQsIHJlc2V0KTsKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiAtPiAiKTsKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiVzJSJQUkl1TUFYIiVzIiwKKwkJCQlhZGRfYywgYWRkZWQsIHJlc2V0KTsKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiBieXRlcyIpOworCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKGRhdGEtPmZpbGVzW2ldLT5pc191bm1lcmdlZCkgeworCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiJXMiLCBsaW5lX3ByZWZpeCk7CisJCQlzaG93X25hbWUob3B0aW9ucy0+ZmlsZSwgcHJlZml4LCBuYW1lLCBsZW4pOworCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiIFVubWVyZ2VkXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogc2NhbGUgdGhlIGFkZC9kZWxldGUKKwkJICovCisJCWFkZCA9IGFkZGVkOworCQlkZWwgPSBkZWxldGVkOworCQlhZGRzICs9IGFkZDsKKwkJZGVscyArPSBkZWw7CisKKwkJaWYgKGdyYXBoX3dpZHRoIDw9IG1heF9jaGFuZ2UpIHsKKwkJCWludCB0b3RhbCA9IGFkZCArIGRlbDsKKworCQkJdG90YWwgPSBzY2FsZV9saW5lYXIoYWRkICsgZGVsLCBncmFwaF93aWR0aCwgbWF4X2NoYW5nZSk7CisJCQlpZiAodG90YWwgPCAyICYmIGFkZCAmJiBkZWwpCisJCQkJLyogd2lkdGggPj0gMiBkdWUgdG8gdGhlIHNhbml0eSBjaGVjayAqLworCQkJCXRvdGFsID0gMjsKKwkJCWlmIChhZGQgPCBkZWwpIHsKKwkJCQlhZGQgPSBzY2FsZV9saW5lYXIoYWRkLCBncmFwaF93aWR0aCwgbWF4X2NoYW5nZSk7CisJCQkJZGVsID0gdG90YWwgLSBhZGQ7CisJCQl9IGVsc2UgeworCQkJCWRlbCA9IHNjYWxlX2xpbmVhcihkZWwsIGdyYXBoX3dpZHRoLCBtYXhfY2hhbmdlKTsKKwkJCQlhZGQgPSB0b3RhbCAtIGRlbDsKKwkJCX0KKwkJfQorCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICIlcyIsIGxpbmVfcHJlZml4KTsKKwkJc2hvd19uYW1lKG9wdGlvbnMtPmZpbGUsIHByZWZpeCwgbmFtZSwgbGVuKTsKKwkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiICUqIlBSSXVNQVgiJXMiLAorCQkJbnVtYmVyX3dpZHRoLCBhZGRlZCArIGRlbGV0ZWQsCisJCQlhZGRlZCArIGRlbGV0ZWQgPyAiICIgOiAiIik7CisJCXNob3dfZ3JhcGgob3B0aW9ucy0+ZmlsZSwgJysnLCBhZGQsIGFkZF9jLCByZXNldCk7CisJCXNob3dfZ3JhcGgob3B0aW9ucy0+ZmlsZSwgJy0nLCBkZWwsIGRlbF9jLCByZXNldCk7CisJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIlxuIik7CisJfQorCWZvciAoaSA9IGNvdW50OyBpIDwgZGF0YS0+bnI7IGkrKykgeworCQl1aW50bWF4X3QgYWRkZWQgPSBkYXRhLT5maWxlc1tpXS0+YWRkZWQ7CisJCXVpbnRtYXhfdCBkZWxldGVkID0gZGF0YS0+ZmlsZXNbaV0tPmRlbGV0ZWQ7CisJCWlmICghZGF0YS0+ZmlsZXNbaV0tPmlzX3JlbmFtZWQgJiYKKwkJCSAoYWRkZWQgKyBkZWxldGVkID09IDApKSB7CisJCQl0b3RhbF9maWxlcy0tOworCQkJY29udGludWU7CisJCX0KKwkJYWRkcyArPSBhZGRlZDsKKwkJZGVscyArPSBkZWxldGVkOworCQlpZiAoIWV4dHJhX3Nob3duKQorCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiJXMgLi4uXG4iLCBsaW5lX3ByZWZpeCk7CisJCWV4dHJhX3Nob3duID0gMTsKKwl9CisJZnByaW50ZihvcHRpb25zLT5maWxlLCAiJXMiLCBsaW5lX3ByZWZpeCk7CisJcHJpbnRfc3RhdF9zdW1tYXJ5KG9wdGlvbnMtPmZpbGUsIHRvdGFsX2ZpbGVzLCBhZGRzLCBkZWxzKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19zaG9ydHN0YXRzKHN0cnVjdCBkaWZmc3RhdF90ICpkYXRhLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBpLCBhZGRzID0gMCwgZGVscyA9IDAsIHRvdGFsX2ZpbGVzID0gZGF0YS0+bnI7CisKKwlpZiAoZGF0YS0+bnIgPT0gMCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm5yOyBpKyspIHsKKwkJaW50IGFkZGVkID0gZGF0YS0+ZmlsZXNbaV0tPmFkZGVkOworCQlpbnQgZGVsZXRlZD0gZGF0YS0+ZmlsZXNbaV0tPmRlbGV0ZWQ7CisKKwkJaWYgKGRhdGEtPmZpbGVzW2ldLT5pc191bm1lcmdlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWRhdGEtPmZpbGVzW2ldLT5pc19yZW5hbWVkICYmIChhZGRlZCArIGRlbGV0ZWQgPT0gMCkpIHsKKwkJCXRvdGFsX2ZpbGVzLS07CisJCX0gZWxzZSBpZiAoIWRhdGEtPmZpbGVzW2ldLT5pc19iaW5hcnkpIHsgLyogZG9uJ3QgY291bnQgYnl0ZXMgKi8KKwkJCWFkZHMgKz0gYWRkZWQ7CisJCQlkZWxzICs9IGRlbGV0ZWQ7CisJCX0KKwl9CisJaWYgKG9wdGlvbnMtPm91dHB1dF9wcmVmaXgpIHsKKwkJc3RydWN0IHN0cmJ1ZiAqbXNnID0gTlVMTDsKKwkJbXNnID0gb3B0aW9ucy0+b3V0cHV0X3ByZWZpeChvcHRpb25zLAorCQkJCW9wdGlvbnMtPm91dHB1dF9wcmVmaXhfZGF0YSk7CisJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiVzIiwgbXNnLT5idWYpOworCX0KKwlwcmludF9zdGF0X3N1bW1hcnkob3B0aW9ucy0+ZmlsZSwgdG90YWxfZmlsZXMsIGFkZHMsIGRlbHMpOworfQorCitzdGF0aWMgdm9pZCBzaG93X251bXN0YXQoc3RydWN0IGRpZmZzdGF0X3QgKmRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGk7CisKKwlpZiAoZGF0YS0+bnIgPT0gMCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmZpbGUgPSBkYXRhLT5maWxlc1tpXTsKKworCQlpZiAob3B0aW9ucy0+b3V0cHV0X3ByZWZpeCkgeworCQkJc3RydWN0IHN0cmJ1ZiAqbXNnID0gTlVMTDsKKwkJCW1zZyA9IG9wdGlvbnMtPm91dHB1dF9wcmVmaXgob3B0aW9ucywKKwkJCQkJb3B0aW9ucy0+b3V0cHV0X3ByZWZpeF9kYXRhKTsKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiVzIiwgbXNnLT5idWYpOworCQl9CisKKwkJaWYgKGZpbGUtPmlzX2JpbmFyeSkKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIi1cdC1cdCIpOworCQllbHNlCisJCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsCisJCQkJIiUiUFJJdU1BWCJcdCUiUFJJdU1BWCJcdCIsCisJCQkJZmlsZS0+YWRkZWQsIGZpbGUtPmRlbGV0ZWQpOworCQlpZiAob3B0aW9ucy0+bGluZV90ZXJtaW5hdGlvbikgeworCQkJZmlsbF9wcmludF9uYW1lKGZpbGUpOworCQkJaWYgKCFmaWxlLT5pc19yZW5hbWVkKQorCQkJCXdyaXRlX25hbWVfcXVvdGVkKGZpbGUtPm5hbWUsIG9wdGlvbnMtPmZpbGUsCisJCQkJCQkgIG9wdGlvbnMtPmxpbmVfdGVybWluYXRpb24pOworCQkJZWxzZSB7CisJCQkJZnB1dHMoZmlsZS0+cHJpbnRfbmFtZSwgb3B0aW9ucy0+ZmlsZSk7CisJCQkJcHV0YyhvcHRpb25zLT5saW5lX3Rlcm1pbmF0aW9uLCBvcHRpb25zLT5maWxlKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChmaWxlLT5pc19yZW5hbWVkKSB7CisJCQkJcHV0YygnXDAnLCBvcHRpb25zLT5maWxlKTsKKwkJCQl3cml0ZV9uYW1lX3F1b3RlZChmaWxlLT5mcm9tX25hbWUsIG9wdGlvbnMtPmZpbGUsICdcMCcpOworCQkJfQorCQkJd3JpdGVfbmFtZV9xdW90ZWQoZmlsZS0+bmFtZSwgb3B0aW9ucy0+ZmlsZSwgJ1wwJyk7CisJCX0KKwl9Cit9CisKK3N0cnVjdCBkaXJzdGF0X2ZpbGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyBjaGFuZ2VkOworfTsKKworc3RydWN0IGRpcnN0YXRfZGlyIHsKKwlzdHJ1Y3QgZGlyc3RhdF9maWxlICpmaWxlczsKKwlpbnQgYWxsb2MsIG5yLCBwZXJtaWxsZSwgY3VtdWxhdGl2ZTsKK307CisKK3N0YXRpYyBsb25nIGdhdGhlcl9kaXJzdGF0KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgc3RydWN0IGRpcnN0YXRfZGlyICpkaXIsCisJCXVuc2lnbmVkIGxvbmcgY2hhbmdlZCwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4pCit7CisJdW5zaWduZWQgbG9uZyB0aGlzX2RpciA9IDA7CisJdW5zaWduZWQgaW50IHNvdXJjZXMgPSAwOworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4ID0gIiI7CisJc3RydWN0IHN0cmJ1ZiAqbXNnID0gTlVMTDsKKworCWlmIChvcHQtPm91dHB1dF9wcmVmaXgpIHsKKwkJbXNnID0gb3B0LT5vdXRwdXRfcHJlZml4KG9wdCwgb3B0LT5vdXRwdXRfcHJlZml4X2RhdGEpOworCQlsaW5lX3ByZWZpeCA9IG1zZy0+YnVmOworCX0KKworCXdoaWxlIChkaXItPm5yKSB7CisJCXN0cnVjdCBkaXJzdGF0X2ZpbGUgKmYgPSBkaXItPmZpbGVzOworCQlpbnQgbmFtZWxlbiA9IHN0cmxlbihmLT5uYW1lKTsKKwkJdW5zaWduZWQgbG9uZyB0aGlzOworCQljaGFyICpzbGFzaDsKKworCQlpZiAobmFtZWxlbiA8IGJhc2VsZW4pCisJCQlicmVhazsKKwkJaWYgKG1lbWNtcChmLT5uYW1lLCBiYXNlLCBiYXNlbGVuKSkKKwkJCWJyZWFrOworCQlzbGFzaCA9IHN0cmNocihmLT5uYW1lICsgYmFzZWxlbiwgJy8nKTsKKwkJaWYgKHNsYXNoKSB7CisJCQlpbnQgbmV3YmFzZWxlbiA9IHNsYXNoICsgMSAtIGYtPm5hbWU7CisJCQl0aGlzID0gZ2F0aGVyX2RpcnN0YXQob3B0LCBkaXIsIGNoYW5nZWQsIGYtPm5hbWUsIG5ld2Jhc2VsZW4pOworCQkJc291cmNlcysrOworCQl9IGVsc2UgeworCQkJdGhpcyA9IGYtPmNoYW5nZWQ7CisJCQlkaXItPmZpbGVzKys7CisJCQlkaXItPm5yLS07CisJCQlzb3VyY2VzICs9IDI7CisJCX0KKwkJdGhpc19kaXIgKz0gdGhpczsKKwl9CisKKwkvKgorCSAqIFdlIGRvbid0IHJlcG9ydCBkaXJzdGF0J3MgZm9yCisJICogIC0gdGhlIHRvcCBsZXZlbAorCSAqICAtIG9yIGNhc2VzIHdoZXJlIGV2ZXJ5dGhpbmcgY2FtZSBmcm9tIGEgc2luZ2xlIGRpcmVjdG9yeQorCSAqICAgIHVuZGVyIHRoaXMgZGlyZWN0b3J5IChzb3VyY2VzID09IDEpLgorCSAqLworCWlmIChiYXNlbGVuICYmIHNvdXJjZXMgIT0gMSkgeworCQlpZiAodGhpc19kaXIpIHsKKwkJCWludCBwZXJtaWxsZSA9IHRoaXNfZGlyICogMTAwMCAvIGNoYW5nZWQ7CisJCQlpZiAocGVybWlsbGUgPj0gZGlyLT5wZXJtaWxsZSkgeworCQkJCWZwcmludGYob3B0LT5maWxlLCAiJXMlNGQuJTAxZCUlICUuKnNcbiIsIGxpbmVfcHJlZml4LAorCQkJCQlwZXJtaWxsZSAvIDEwLCBwZXJtaWxsZSAlIDEwLCBiYXNlbGVuLCBiYXNlKTsKKwkJCQlpZiAoIWRpci0+Y3VtdWxhdGl2ZSkKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHRoaXNfZGlyOworfQorCitzdGF0aWMgaW50IGRpcnN0YXRfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IGRpcnN0YXRfZmlsZSAqYSA9IF9hOworCWNvbnN0IHN0cnVjdCBkaXJzdGF0X2ZpbGUgKmIgPSBfYjsKKwlyZXR1cm4gc3RyY21wKGEtPm5hbWUsIGItPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RpcnN0YXQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGNoYW5nZWQ7CisJc3RydWN0IGRpcnN0YXRfZGlyIGRpcjsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKKworCWRpci5maWxlcyA9IE5VTEw7CisJZGlyLmFsbG9jID0gMDsKKwlkaXIubnIgPSAwOworCWRpci5wZXJtaWxsZSA9IG9wdGlvbnMtPmRpcnN0YXRfcGVybWlsbGU7CisJZGlyLmN1bXVsYXRpdmUgPSBESUZGX09QVF9UU1Qob3B0aW9ucywgRElSU1RBVF9DVU1VTEFUSVZFKTsKKworCWNoYW5nZWQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXVuc2lnbmVkIGxvbmcgY29waWVkLCBhZGRlZCwgZGFtYWdlOworCQlpbnQgY29udGVudF9jaGFuZ2VkOworCisJCW5hbWUgPSBwLT50d28tPnBhdGggPyBwLT50d28tPnBhdGggOiBwLT5vbmUtPnBhdGg7CisKKwkJaWYgKHAtPm9uZS0+c2hhMV92YWxpZCAmJiBwLT50d28tPnNoYTFfdmFsaWQpCisJCQljb250ZW50X2NoYW5nZWQgPSBoYXNoY21wKHAtPm9uZS0+c2hhMSwgcC0+dHdvLT5zaGExKTsKKwkJZWxzZQorCQkJY29udGVudF9jaGFuZ2VkID0gMTsKKworCQlpZiAoIWNvbnRlbnRfY2hhbmdlZCkgeworCQkJLyoKKwkJCSAqIFRoZSBTSEExIGhhcyBub3QgY2hhbmdlZCwgc28gcHJlLS9wb3N0LWNvbnRlbnQgaXMKKwkJCSAqIGlkZW50aWNhbC4gV2UgY2FuIHRoZXJlZm9yZSBza2lwIGxvb2tpbmcgYXQgdGhlCisJCQkgKiBmaWxlIGNvbnRlbnRzIGFsdG9nZXRoZXIuCisJCQkgKi8KKwkJCWRhbWFnZSA9IDA7CisJCQlnb3RvIGZvdW5kX2RhbWFnZTsKKwkJfQorCisJCWlmIChESUZGX09QVF9UU1Qob3B0aW9ucywgRElSU1RBVF9CWV9GSUxFKSkgeworCQkJLyoKKwkJCSAqIEluIC0tZGlyc3RhdC1ieS1maWxlIG1vZGUsIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvCisJCQkgKiBsb29rIGF0IHRoZSBhY3R1YWwgZmlsZSBjb250ZW50cyBhdCBhbGwuCisJCQkgKiBUaGUgZmFjdCB0aGF0IHRoZSBTSEExIGNoYW5nZWQgaXMgZW5vdWdoIGZvciB1cyB0bworCQkJICogYWRkIHRoaXMgZmlsZSB0byB0aGUgbGlzdCBvZiByZXN1bHRzCisJCQkgKiAod2l0aCBlYWNoIGZpbGUgY29udHJpYnV0aW5nIGVxdWFsIGRhbWFnZSkuCisJCQkgKi8KKwkJCWRhbWFnZSA9IDE7CisJCQlnb3RvIGZvdW5kX2RhbWFnZTsKKwkJfQorCisJCWlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT5vbmUsIDApOworCQkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT50d28sIDApOworCQkJZGlmZmNvcmVfY291bnRfY2hhbmdlcyhwLT5vbmUsIHAtPnR3bywgTlVMTCwgTlVMTCwgMCwKKwkJCQkJICAgICAgICZjb3BpZWQsICZhZGRlZCk7CisJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT5vbmUpOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKKwkJfSBlbHNlIGlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSkgeworCQkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT5vbmUsIDEpOworCQkJY29waWVkID0gYWRkZWQgPSAwOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+b25lKTsKKwkJfSBlbHNlIGlmIChESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT50d28sIDEpOworCQkJY29waWVkID0gMDsKKwkJCWFkZGVkID0gcC0+dHdvLT5zaXplOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKKwkJfSBlbHNlCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBPcmlnaW5hbCBtaW51cyBjb3BpZWQgaXMgdGhlIHJlbW92ZWQgbWF0ZXJpYWwsCisJCSAqIGFkZGVkIGlzIHRoZSBuZXcgbWF0ZXJpYWwuICBUaGV5IGFyZSBib3RoIGRhbWFnZXMKKwkJICogbWFkZSB0byB0aGUgcHJlaW1hZ2UuCisJCSAqIElmIHRoZSByZXN1bHRpbmcgZGFtYWdlIGlzIHplcm8sIHdlIGtub3cgdGhhdAorCQkgKiBkaWZmY29yZV9jb3VudF9jaGFuZ2VzKCkgY29uc2lkZXJzIHRoZSB0d28gZW50cmllcyB0bworCQkgKiBiZSBpZGVudGljYWwsIGJ1dCBzaW5jZSBjb250ZW50X2NoYW5nZWQgaXMgdHJ1ZSwgd2UKKwkJICoga25vdyB0aGF0IHRoZXJlIG11c3QgaGF2ZSBiZWVuIF9zb21lXyBraW5kIG9mIGNoYW5nZSwKKwkJICogc28gd2UgZm9yY2UgYWxsIGVudHJpZXMgdG8gaGF2ZSBkYW1hZ2UgPiAwLgorCQkgKi8KKwkJZGFtYWdlID0gKHAtPm9uZS0+c2l6ZSAtIGNvcGllZCkgKyBhZGRlZDsKKwkJaWYgKCFkYW1hZ2UpCisJCQlkYW1hZ2UgPSAxOworCitmb3VuZF9kYW1hZ2U6CisJCUFMTE9DX0dST1coZGlyLmZpbGVzLCBkaXIubnIgKyAxLCBkaXIuYWxsb2MpOworCQlkaXIuZmlsZXNbZGlyLm5yXS5uYW1lID0gbmFtZTsKKwkJZGlyLmZpbGVzW2Rpci5ucl0uY2hhbmdlZCA9IGRhbWFnZTsKKwkJY2hhbmdlZCArPSBkYW1hZ2U7CisJCWRpci5ucisrOworCX0KKworCS8qIFRoaXMgY2FuIGhhcHBlbiBldmVuIHdpdGggbWFueSBmaWxlcywgaWYgZXZlcnl0aGluZyB3YXMgcmVuYW1lcyAqLworCWlmICghY2hhbmdlZCkKKwkJcmV0dXJuOworCisJLyogU2hvdyBhbGwgZGlyZWN0b3JpZXMgd2l0aCBtb3JlIHRoYW4geCUgb2YgdGhlIGNoYW5nZXMgKi8KKwlxc29ydChkaXIuZmlsZXMsIGRpci5uciwgc2l6ZW9mKGRpci5maWxlc1swXSksIGRpcnN0YXRfY29tcGFyZSk7CisJZ2F0aGVyX2RpcnN0YXQob3B0aW9ucywgJmRpciwgY2hhbmdlZCwgIiIsIDApOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RpcnN0YXRfYnlfbGluZShzdHJ1Y3QgZGlmZnN0YXRfdCAqZGF0YSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGNoYW5nZWQ7CisJc3RydWN0IGRpcnN0YXRfZGlyIGRpcjsKKworCWlmIChkYXRhLT5uciA9PSAwKQorCQlyZXR1cm47CisKKwlkaXIuZmlsZXMgPSBOVUxMOworCWRpci5hbGxvYyA9IDA7CisJZGlyLm5yID0gMDsKKwlkaXIucGVybWlsbGUgPSBvcHRpb25zLT5kaXJzdGF0X3Blcm1pbGxlOworCWRpci5jdW11bGF0aXZlID0gRElGRl9PUFRfVFNUKG9wdGlvbnMsIERJUlNUQVRfQ1VNVUxBVElWRSk7CisKKwljaGFuZ2VkID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZmlsZSA9IGRhdGEtPmZpbGVzW2ldOworCQl1bnNpZ25lZCBsb25nIGRhbWFnZSA9IGZpbGUtPmFkZGVkICsgZmlsZS0+ZGVsZXRlZDsKKwkJaWYgKGZpbGUtPmlzX2JpbmFyeSkKKwkJCS8qCisJCQkgKiBiaW5hcnkgZmlsZXMgY291bnRzIGJ5dGVzLCBub3QgbGluZXMuIE11c3QgZmluZCBzb21lCisJCQkgKiB3YXkgdG8gbm9ybWFsaXplIGJpbmFyeSBieXRlcyB2cy4gdGV4dHVhbCBsaW5lcy4KKwkJCSAqIFRoZSBmb2xsb3dpbmcgaGV1cmlzdGljIGFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgNjQKKwkJCSAqIGJ5dGVzIHBlciAibGluZSIuCisJCQkgKiBUaGlzIGlzIHN0dXBpZCBhbmQgdWdseSwgYnV0IHZlcnkgY2hlYXAuLi4KKwkJCSAqLworCQkJZGFtYWdlID0gKGRhbWFnZSArIDYzKSAvIDY0OworCQlBTExPQ19HUk9XKGRpci5maWxlcywgZGlyLm5yICsgMSwgZGlyLmFsbG9jKTsKKwkJZGlyLmZpbGVzW2Rpci5ucl0ubmFtZSA9IGZpbGUtPm5hbWU7CisJCWRpci5maWxlc1tkaXIubnJdLmNoYW5nZWQgPSBkYW1hZ2U7CisJCWNoYW5nZWQgKz0gZGFtYWdlOworCQlkaXIubnIrKzsKKwl9CisKKwkvKiBUaGlzIGNhbiBoYXBwZW4gZXZlbiB3aXRoIG1hbnkgZmlsZXMsIGlmIGV2ZXJ5dGhpbmcgd2FzIHJlbmFtZXMgKi8KKwlpZiAoIWNoYW5nZWQpCisJCXJldHVybjsKKworCS8qIFNob3cgYWxsIGRpcmVjdG9yaWVzIHdpdGggbW9yZSB0aGFuIHglIG9mIHRoZSBjaGFuZ2VzICovCisJcXNvcnQoZGlyLmZpbGVzLCBkaXIubnIsIHNpemVvZihkaXIuZmlsZXNbMF0pLCBkaXJzdGF0X2NvbXBhcmUpOworCWdhdGhlcl9kaXJzdGF0KG9wdGlvbnMsICZkaXIsIGNoYW5nZWQsICIiLCAwKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9kaWZmc3RhdF9pbmZvKHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZnN0YXQtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmYgPSBkaWZmc3RhdC0+ZmlsZXNbaV07CisJCWlmIChmLT5uYW1lICE9IGYtPnByaW50X25hbWUpCisJCQlmcmVlKGYtPnByaW50X25hbWUpOworCQlmcmVlKGYtPm5hbWUpOworCQlmcmVlKGYtPmZyb21fbmFtZSk7CisJCWZyZWUoZik7CisJfQorCWZyZWUoZGlmZnN0YXQtPmZpbGVzKTsKK30KKworc3RydWN0IGNoZWNrZGlmZl90IHsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlpbnQgbGluZW5vOworCWludCBjb25mbGljdF9tYXJrZXJfc2l6ZTsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvOworCXVuc2lnbmVkIHdzX3J1bGU7CisJdW5zaWduZWQgc3RhdHVzOworfTsKKworc3RhdGljIGludCBpc19jb25mbGljdF9tYXJrZXIoY29uc3QgY2hhciAqbGluZSwgaW50IG1hcmtlcl9zaXplLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljaGFyIGZpcnN0Y2hhcjsKKwlpbnQgY250OworCisJaWYgKGxlbiA8IG1hcmtlcl9zaXplICsgMSkKKwkJcmV0dXJuIDA7CisJZmlyc3RjaGFyID0gbGluZVswXTsKKwlzd2l0Y2ggKGZpcnN0Y2hhcikgeworCWNhc2UgJz0nOiBjYXNlICc+JzogY2FzZSAnPCc6IGNhc2UgJ3wnOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJZm9yIChjbnQgPSAxOyBjbnQgPCBtYXJrZXJfc2l6ZTsgY250KyspCisJCWlmIChsaW5lW2NudF0gIT0gZmlyc3RjaGFyKQorCQkJcmV0dXJuIDA7CisJLyogbGluZVsxXSB0aHJ1IGxpbmVbbWFya2VyX3NpemUtMV0gYXJlIHNhbWUgYXMgZmlyc3RjaGFyICovCisJaWYgKGxlbiA8IG1hcmtlcl9zaXplICsgMSB8fCAhaXNzcGFjZShsaW5lW21hcmtlcl9zaXplXSkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBjaGVja2RpZmZfY29uc3VtZSh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3QgY2hlY2tkaWZmX3QgKmRhdGEgPSBwcml2OworCWludCBtYXJrZXJfc2l6ZSA9IGRhdGEtPmNvbmZsaWN0X21hcmtlcl9zaXplOworCWNvbnN0IGNoYXIgKndzID0gZGlmZl9nZXRfY29sb3IoZGF0YS0+by0+dXNlX2NvbG9yLCBESUZGX1dISVRFU1BBQ0UpOworCWNvbnN0IGNoYXIgKnJlc2V0ID0gZGlmZl9nZXRfY29sb3IoZGF0YS0+by0+dXNlX2NvbG9yLCBESUZGX1JFU0VUKTsKKwljb25zdCBjaGFyICpzZXQgPSBkaWZmX2dldF9jb2xvcihkYXRhLT5vLT51c2VfY29sb3IsIERJRkZfRklMRV9ORVcpOworCWNoYXIgKmVycjsKKwljaGFyICpsaW5lX3ByZWZpeCA9ICIiOworCXN0cnVjdCBzdHJidWYgKm1zZ2J1ZjsKKworCWFzc2VydChkYXRhLT5vKTsKKwlpZiAoZGF0YS0+by0+b3V0cHV0X3ByZWZpeCkgeworCQltc2didWYgPSBkYXRhLT5vLT5vdXRwdXRfcHJlZml4KGRhdGEtPm8sCisJCQlkYXRhLT5vLT5vdXRwdXRfcHJlZml4X2RhdGEpOworCQlsaW5lX3ByZWZpeCA9IG1zZ2J1Zi0+YnVmOworCX0KKworCWlmIChsaW5lWzBdID09ICcrJykgeworCQl1bnNpZ25lZCBiYWQ7CisJCWRhdGEtPmxpbmVubysrOworCQlpZiAoaXNfY29uZmxpY3RfbWFya2VyKGxpbmUgKyAxLCBtYXJrZXJfc2l6ZSwgbGVuIC0gMSkpIHsKKwkJCWRhdGEtPnN0YXR1cyB8PSAxOworCQkJZnByaW50ZihkYXRhLT5vLT5maWxlLAorCQkJCSIlcyVzOiVkOiBsZWZ0b3ZlciBjb25mbGljdCBtYXJrZXJcbiIsCisJCQkJbGluZV9wcmVmaXgsIGRhdGEtPmZpbGVuYW1lLCBkYXRhLT5saW5lbm8pOworCQl9CisJCWJhZCA9IHdzX2NoZWNrKGxpbmUgKyAxLCBsZW4gLSAxLCBkYXRhLT53c19ydWxlKTsKKwkJaWYgKCFiYWQpCisJCQlyZXR1cm47CisJCWRhdGEtPnN0YXR1cyB8PSBiYWQ7CisJCWVyciA9IHdoaXRlc3BhY2VfZXJyb3Jfc3RyaW5nKGJhZCk7CisJCWZwcmludGYoZGF0YS0+by0+ZmlsZSwgIiVzJXM6JWQ6ICVzLlxuIiwKKwkJCWxpbmVfcHJlZml4LCBkYXRhLT5maWxlbmFtZSwgZGF0YS0+bGluZW5vLCBlcnIpOworCQlmcmVlKGVycik7CisJCWVtaXRfbGluZShkYXRhLT5vLCBzZXQsIHJlc2V0LCBsaW5lLCAxKTsKKwkJd3NfY2hlY2tfZW1pdChsaW5lICsgMSwgbGVuIC0gMSwgZGF0YS0+d3NfcnVsZSwKKwkJCSAgICAgIGRhdGEtPm8tPmZpbGUsIHNldCwgcmVzZXQsIHdzKTsKKwl9IGVsc2UgaWYgKGxpbmVbMF0gPT0gJyAnKSB7CisJCWRhdGEtPmxpbmVubysrOworCX0gZWxzZSBpZiAobGluZVswXSA9PSAnQCcpIHsKKwkJY2hhciAqcGx1cyA9IHN0cmNocihsaW5lLCAnKycpOworCQlpZiAocGx1cykKKwkJCWRhdGEtPmxpbmVubyA9IHN0cnRvbChwbHVzLCBOVUxMLCAxMCkgLSAxOworCQllbHNlCisJCQlkaWUoImludmFsaWQgZGlmZiIpOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmRlZmxhdGVfaXQoY2hhciAqZGF0YSwKKwkJCQkgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSB1bnNpZ25lZCBsb25nICpyZXN1bHRfc2l6ZSkKK3sKKwlpbnQgYm91bmQ7CisJdW5zaWduZWQgY2hhciAqZGVmbGF0ZWQ7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlnaXRfZGVmbGF0ZV9pbml0KCZzdHJlYW0sIHpsaWJfY29tcHJlc3Npb25fbGV2ZWwpOworCWJvdW5kID0gZ2l0X2RlZmxhdGVfYm91bmQoJnN0cmVhbSwgc2l6ZSk7CisJZGVmbGF0ZWQgPSB4bWFsbG9jKGJvdW5kKTsKKwlzdHJlYW0ubmV4dF9vdXQgPSBkZWZsYXRlZDsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gYm91bmQ7CisKKwlzdHJlYW0ubmV4dF9pbiA9ICh1bnNpZ25lZCBjaGFyICopZGF0YTsKKwlzdHJlYW0uYXZhaWxfaW4gPSBzaXplOworCXdoaWxlIChnaXRfZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCkgPT0gWl9PSykKKwkJOyAvKiBub3RoaW5nICovCisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCSpyZXN1bHRfc2l6ZSA9IHN0cmVhbS50b3RhbF9vdXQ7CisJcmV0dXJuIGRlZmxhdGVkOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2JpbmFyeV9kaWZmX2JvZHkoRklMRSAqZmlsZSwgbW1maWxlX3QgKm9uZSwgbW1maWxlX3QgKnR3bywgY2hhciAqcHJlZml4KQoreworCXZvaWQgKmNwOworCXZvaWQgKmRlbHRhOworCXZvaWQgKmRlZmxhdGVkOworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBvcmlnX3NpemU7CisJdW5zaWduZWQgbG9uZyBkZWx0YV9zaXplOworCXVuc2lnbmVkIGxvbmcgZGVmbGF0ZV9zaXplOworCXVuc2lnbmVkIGxvbmcgZGF0YV9zaXplOworCisJLyogV2UgY291bGQgZG8gZGVmbGF0ZWQgZGVsdGEsIG9yIHdlIGNvdWxkIGRvIGp1c3QgZGVmbGF0ZWQgdHdvLAorCSAqIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorCSAqLworCWRlbHRhID0gTlVMTDsKKwlkZWZsYXRlZCA9IGRlZmxhdGVfaXQodHdvLT5wdHIsIHR3by0+c2l6ZSwgJmRlZmxhdGVfc2l6ZSk7CisJaWYgKG9uZS0+c2l6ZSAmJiB0d28tPnNpemUpIHsKKwkJZGVsdGEgPSBkaWZmX2RlbHRhKG9uZS0+cHRyLCBvbmUtPnNpemUsCisJCQkJICAgdHdvLT5wdHIsIHR3by0+c2l6ZSwKKwkJCQkgICAmZGVsdGFfc2l6ZSwgZGVmbGF0ZV9zaXplKTsKKwkJaWYgKGRlbHRhKSB7CisJCQl2b2lkICp0b19mcmVlID0gZGVsdGE7CisJCQlvcmlnX3NpemUgPSBkZWx0YV9zaXplOworCQkJZGVsdGEgPSBkZWZsYXRlX2l0KGRlbHRhLCBkZWx0YV9zaXplLCAmZGVsdGFfc2l6ZSk7CisJCQlmcmVlKHRvX2ZyZWUpOworCQl9CisJfQorCisJaWYgKGRlbHRhICYmIGRlbHRhX3NpemUgPCBkZWZsYXRlX3NpemUpIHsKKwkJZnByaW50ZihmaWxlLCAiJXNkZWx0YSAlbHVcbiIsIHByZWZpeCwgb3JpZ19zaXplKTsKKwkJZnJlZShkZWZsYXRlZCk7CisJCWRhdGEgPSBkZWx0YTsKKwkJZGF0YV9zaXplID0gZGVsdGFfc2l6ZTsKKwl9CisJZWxzZSB7CisJCWZwcmludGYoZmlsZSwgIiVzbGl0ZXJhbCAlbHVcbiIsIHByZWZpeCwgdHdvLT5zaXplKTsKKwkJZnJlZShkZWx0YSk7CisJCWRhdGEgPSBkZWZsYXRlZDsKKwkJZGF0YV9zaXplID0gZGVmbGF0ZV9zaXplOworCX0KKworCS8qIGVtaXQgZGF0YSBlbmNvZGVkIGluIGJhc2U4NSAqLworCWNwID0gZGF0YTsKKwl3aGlsZSAoZGF0YV9zaXplKSB7CisJCWludCBieXRlcyA9ICg1MiA8IGRhdGFfc2l6ZSkgPyA1MiA6IGRhdGFfc2l6ZTsKKwkJY2hhciBsaW5lWzcwXTsKKwkJZGF0YV9zaXplIC09IGJ5dGVzOworCQlpZiAoYnl0ZXMgPD0gMjYpCisJCQlsaW5lWzBdID0gYnl0ZXMgKyAnQScgLSAxOworCQllbHNlCisJCQlsaW5lWzBdID0gYnl0ZXMgLSAyNiArICdhJyAtIDE7CisJCWVuY29kZV84NShsaW5lICsgMSwgY3AsIGJ5dGVzKTsKKwkJY3AgPSAoY2hhciAqKSBjcCArIGJ5dGVzOworCQlmcHJpbnRmKGZpbGUsICIlcyIsIHByZWZpeCk7CisJCWZwdXRzKGxpbmUsIGZpbGUpOworCQlmcHV0YygnXG4nLCBmaWxlKTsKKwl9CisJZnByaW50ZihmaWxlLCAiJXNcbiIsIHByZWZpeCk7CisJZnJlZShkYXRhKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9iaW5hcnlfZGlmZihGSUxFICpmaWxlLCBtbWZpbGVfdCAqb25lLCBtbWZpbGVfdCAqdHdvLCBjaGFyICpwcmVmaXgpCit7CisJZnByaW50ZihmaWxlLCAiJXNHSVQgYmluYXJ5IHBhdGNoXG4iLCBwcmVmaXgpOworCWVtaXRfYmluYXJ5X2RpZmZfYm9keShmaWxlLCBvbmUsIHR3bywgcHJlZml4KTsKKwllbWl0X2JpbmFyeV9kaWZmX2JvZHkoZmlsZSwgdHdvLCBvbmUsIHByZWZpeCk7Cit9CisKK2ludCBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWlmIChvbmUtPmlzX2JpbmFyeSA9PSAtMSkgeworCQlkaWZmX2ZpbGVzcGVjX2xvYWRfZHJpdmVyKG9uZSk7CisJCWlmIChvbmUtPmRyaXZlci0+YmluYXJ5ICE9IC0xKQorCQkJb25lLT5pc19iaW5hcnkgPSBvbmUtPmRyaXZlci0+YmluYXJ5OworCQllbHNlIHsKKwkJCWlmICghb25lLT5kYXRhICYmIERJRkZfRklMRV9WQUxJRChvbmUpKQorCQkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAwKTsKKwkJCWlmIChvbmUtPmRhdGEpCisJCQkJb25lLT5pc19iaW5hcnkgPSBidWZmZXJfaXNfYmluYXJ5KG9uZS0+ZGF0YSwKKwkJCQkJCW9uZS0+c2l6ZSk7CisJCQlpZiAob25lLT5pc19iaW5hcnkgPT0gLTEpCisJCQkJb25lLT5pc19iaW5hcnkgPSAwOworCQl9CisJfQorCXJldHVybiBvbmUtPmlzX2JpbmFyeTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyZGlmZl9mdW5jbmFtZSAqZGlmZl9mdW5jbmFtZV9wYXR0ZXJuKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJZGlmZl9maWxlc3BlY19sb2FkX2RyaXZlcihvbmUpOworCXJldHVybiBvbmUtPmRyaXZlci0+ZnVuY25hbWUucGF0dGVybiA/ICZvbmUtPmRyaXZlci0+ZnVuY25hbWUgOiBOVUxMOworfQorCit2b2lkIGRpZmZfc2V0X21uZW1vbmljX3ByZWZpeChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCWlmICghb3B0aW9ucy0+YV9wcmVmaXgpCisJCW9wdGlvbnMtPmFfcHJlZml4ID0gYTsKKwlpZiAoIW9wdGlvbnMtPmJfcHJlZml4KQorCQlvcHRpb25zLT5iX3ByZWZpeCA9IGI7Cit9CisKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmdldF90ZXh0Y29udihzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWlmICghRElGRl9GSUxFX1ZBTElEKG9uZSkpCisJCXJldHVybiBOVUxMOworCisJZGlmZl9maWxlc3BlY19sb2FkX2RyaXZlcihvbmUpOworCXJldHVybiB1c2VyZGlmZl9nZXRfdGV4dGNvbnYob25lLT5kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBidWlsdGluX2RpZmYoY29uc3QgY2hhciAqbmFtZV9hLAorCQkJIGNvbnN0IGNoYXIgKm5hbWVfYiwKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28sCisJCQkgY29uc3QgY2hhciAqeGZybV9tc2csCisJCQkgaW50IG11c3Rfc2hvd19oZWFkZXIsCisJCQkgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCSBpbnQgY29tcGxldGVfcmV3cml0ZSkKK3sKKwltbWZpbGVfdCBtZjEsIG1mMjsKKwljb25zdCBjaGFyICpsYmxbMl07CisJY2hhciAqYV9vbmUsICpiX3R3bzsKKwljb25zdCBjaGFyICpzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9NRVRBSU5GTyk7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9SRVNFVCk7CisJY29uc3QgY2hhciAqYV9wcmVmaXgsICpiX3ByZWZpeDsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl9vbmUgPSBOVUxMOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252X3R3byA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBoZWFkZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmICptc2didWY7CisJY2hhciAqbGluZV9wcmVmaXggPSAiIjsKKworCWlmIChvLT5vdXRwdXRfcHJlZml4KSB7CisJCW1zZ2J1ZiA9IG8tPm91dHB1dF9wcmVmaXgobywgby0+b3V0cHV0X3ByZWZpeF9kYXRhKTsKKwkJbGluZV9wcmVmaXggPSBtc2didWYtPmJ1ZjsKKwl9CisKKwlpZiAoRElGRl9PUFRfVFNUKG8sIFNVQk1PRFVMRV9MT0cpICYmCisJCQkoIW9uZS0+bW9kZSB8fCBTX0lTR0lUTElOSyhvbmUtPm1vZGUpKSAmJgorCQkJKCF0d28tPm1vZGUgfHwgU19JU0dJVExJTksodHdvLT5tb2RlKSkpIHsKKwkJY29uc3QgY2hhciAqZGVsID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTEQpOworCQljb25zdCBjaGFyICphZGQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FVyk7CisJCXNob3dfc3VibW9kdWxlX3N1bW1hcnkoby0+ZmlsZSwgb25lID8gb25lLT5wYXRoIDogdHdvLT5wYXRoLAorCQkJCW9uZS0+c2hhMSwgdHdvLT5zaGExLCB0d28tPmRpcnR5X3N1Ym1vZHVsZSwKKwkJCQlkZWwsIGFkZCwgcmVzZXQpOworCQlyZXR1cm47CisJfQorCisJaWYgKERJRkZfT1BUX1RTVChvLCBBTExPV19URVhUQ09OVikpIHsKKwkJdGV4dGNvbnZfb25lID0gZ2V0X3RleHRjb252KG9uZSk7CisJCXRleHRjb252X3R3byA9IGdldF90ZXh0Y29udih0d28pOworCX0KKworCWRpZmZfc2V0X21uZW1vbmljX3ByZWZpeChvLCAiYS8iLCAiYi8iKTsKKwlpZiAoRElGRl9PUFRfVFNUKG8sIFJFVkVSU0VfRElGRikpIHsKKwkJYV9wcmVmaXggPSBvLT5iX3ByZWZpeDsKKwkJYl9wcmVmaXggPSBvLT5hX3ByZWZpeDsKKwl9IGVsc2UgeworCQlhX3ByZWZpeCA9IG8tPmFfcHJlZml4OworCQliX3ByZWZpeCA9IG8tPmJfcHJlZml4OworCX0KKworCS8qIE5ldmVyIHVzZSBhIG5vbi12YWxpZCBmaWxlbmFtZSBhbnl3aGVyZSBpZiBhdCBhbGwgcG9zc2libGUgKi8KKwluYW1lX2EgPSBESUZGX0ZJTEVfVkFMSUQob25lKSA/IG5hbWVfYSA6IG5hbWVfYjsKKwluYW1lX2IgPSBESUZGX0ZJTEVfVkFMSUQodHdvKSA/IG5hbWVfYiA6IG5hbWVfYTsKKworCWFfb25lID0gcXVvdGVfdHdvKGFfcHJlZml4LCBuYW1lX2EgKyAoKm5hbWVfYSA9PSAnLycpKTsKKwliX3R3byA9IHF1b3RlX3R3byhiX3ByZWZpeCwgbmFtZV9iICsgKCpuYW1lX2IgPT0gJy8nKSk7CisJbGJsWzBdID0gRElGRl9GSUxFX1ZBTElEKG9uZSkgPyBhX29uZSA6ICIvZGV2L251bGwiOworCWxibFsxXSA9IERJRkZfRklMRV9WQUxJRCh0d28pID8gYl90d28gOiAiL2Rldi9udWxsIjsKKwlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXMlc2RpZmYgLS1naXQgJXMgJXMlc1xuIiwgbGluZV9wcmVmaXgsIHNldCwgYV9vbmUsIGJfdHdvLCByZXNldCk7CisJaWYgKGxibFswXVswXSA9PSAnLycpIHsKKwkJLyogL2Rldi9udWxsICovCisJCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsICIlcyVzbmV3IGZpbGUgbW9kZSAlMDZvJXNcbiIsIGxpbmVfcHJlZml4LCBzZXQsIHR3by0+bW9kZSwgcmVzZXQpOworCQlpZiAoeGZybV9tc2cpCisJCQlzdHJidWZfYWRkc3RyKCZoZWFkZXIsIHhmcm1fbXNnKTsKKwkJbXVzdF9zaG93X2hlYWRlciA9IDE7CisJfQorCWVsc2UgaWYgKGxibFsxXVswXSA9PSAnLycpIHsKKwkJc3RyYnVmX2FkZGYoJmhlYWRlciwgIiVzJXNkZWxldGVkIGZpbGUgbW9kZSAlMDZvJXNcbiIsIGxpbmVfcHJlZml4LCBzZXQsIG9uZS0+bW9kZSwgcmVzZXQpOworCQlpZiAoeGZybV9tc2cpCisJCQlzdHJidWZfYWRkc3RyKCZoZWFkZXIsIHhmcm1fbXNnKTsKKwkJbXVzdF9zaG93X2hlYWRlciA9IDE7CisJfQorCWVsc2UgeworCQlpZiAob25lLT5tb2RlICE9IHR3by0+bW9kZSkgeworCQkJc3RyYnVmX2FkZGYoJmhlYWRlciwgIiVzJXNvbGQgbW9kZSAlMDZvJXNcbiIsIGxpbmVfcHJlZml4LCBzZXQsIG9uZS0+bW9kZSwgcmVzZXQpOworCQkJc3RyYnVmX2FkZGYoJmhlYWRlciwgIiVzJXNuZXcgbW9kZSAlMDZvJXNcbiIsIGxpbmVfcHJlZml4LCBzZXQsIHR3by0+bW9kZSwgcmVzZXQpOworCQkJbXVzdF9zaG93X2hlYWRlciA9IDE7CisJCX0KKwkJaWYgKHhmcm1fbXNnKQorCQkJc3RyYnVmX2FkZHN0cigmaGVhZGVyLCB4ZnJtX21zZyk7CisKKwkJLyoKKwkJICogd2UgZG8gbm90IHJ1biBkaWZmIGJldHdlZW4gZGlmZmVyZW50IGtpbmQKKwkJICogb2Ygb2JqZWN0cy4KKwkJICovCisJCWlmICgob25lLT5tb2RlIF4gdHdvLT5tb2RlKSAmIFNfSUZNVCkKKwkJCWdvdG8gZnJlZV9hYl9hbmRfcmV0dXJuOworCQlpZiAoY29tcGxldGVfcmV3cml0ZSAmJgorCQkgICAgKHRleHRjb252X29uZSB8fCAhZGlmZl9maWxlc3BlY19pc19iaW5hcnkob25lKSkgJiYKKwkJICAgICh0ZXh0Y29udl90d28gfHwgIWRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KHR3bykpKSB7CisJCQlmcHJpbnRmKG8tPmZpbGUsICIlcyIsIGhlYWRlci5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZoZWFkZXIpOworCQkJZW1pdF9yZXdyaXRlX2RpZmYobmFtZV9hLCBuYW1lX2IsIG9uZSwgdHdvLAorCQkJCQkJdGV4dGNvbnZfb25lLCB0ZXh0Y29udl90d28sIG8pOworCQkJby0+Zm91bmRfY2hhbmdlcyA9IDE7CisJCQlnb3RvIGZyZWVfYWJfYW5kX3JldHVybjsKKwkJfQorCX0KKworCWlmIChvLT5pcnJldmVyc2libGVfZGVsZXRlICYmIGxibFsxXVswXSA9PSAnLycpIHsKKwkJZnByaW50ZihvLT5maWxlLCAiJXMiLCBoZWFkZXIuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZoZWFkZXIpOworCQlnb3RvIGZyZWVfYWJfYW5kX3JldHVybjsKKwl9IGVsc2UgaWYgKCFESUZGX09QVF9UU1QobywgVEVYVCkgJiYKKwkgICAgKCAoIXRleHRjb252X29uZSAmJiBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShvbmUpKSB8fAorCSAgICAgICghdGV4dGNvbnZfdHdvICYmIGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KHR3bykpICkpIHsKKwkJaWYgKGZpbGxfbW1maWxlKCZtZjEsIG9uZSkgPCAwIHx8IGZpbGxfbW1maWxlKCZtZjIsIHR3bykgPCAwKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CisJCS8qIFF1aXRlIGNvbW1vbiBjb25mdXNpbmcgY2FzZSAqLworCQlpZiAobWYxLnNpemUgPT0gbWYyLnNpemUgJiYKKwkJICAgICFtZW1jbXAobWYxLnB0ciwgbWYyLnB0ciwgbWYxLnNpemUpKSB7CisJCQlpZiAobXVzdF9zaG93X2hlYWRlcikKKwkJCQlmcHJpbnRmKG8tPmZpbGUsICIlcyIsIGhlYWRlci5idWYpOworCQkJZ290byBmcmVlX2FiX2FuZF9yZXR1cm47CisJCX0KKwkJZnByaW50ZihvLT5maWxlLCAiJXMiLCBoZWFkZXIuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZoZWFkZXIpOworCQlpZiAoRElGRl9PUFRfVFNUKG8sIEJJTkFSWSkpCisJCQllbWl0X2JpbmFyeV9kaWZmKG8tPmZpbGUsICZtZjEsICZtZjIsIGxpbmVfcHJlZml4KTsKKwkJZWxzZQorCQkJZnByaW50ZihvLT5maWxlLCAiJXNCaW5hcnkgZmlsZXMgJXMgYW5kICVzIGRpZmZlclxuIiwKKwkJCQlsaW5lX3ByZWZpeCwgbGJsWzBdLCBsYmxbMV0pOworCQlvLT5mb3VuZF9jaGFuZ2VzID0gMTsKKwl9IGVsc2UgeworCQkvKiBDcmF6eSB4ZGwgaW50ZXJmYWNlcy4uICovCisJCWNvbnN0IGNoYXIgKmRpZmZvcHRzID0gZ2V0ZW52KCJHSVRfRElGRl9PUFRTIik7CisJCXhwcGFyYW1fdCB4cHA7CisJCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwkJc3RydWN0IGVtaXRfY2FsbGJhY2sgZWNiZGF0YTsKKwkJY29uc3Qgc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lICpwZTsKKworCQlpZiAobXVzdF9zaG93X2hlYWRlcikgeworCQkJZnByaW50ZihvLT5maWxlLCAiJXMiLCBoZWFkZXIuYnVmKTsKKwkJCXN0cmJ1Zl9yZXNldCgmaGVhZGVyKTsKKwkJfQorCisJCW1mMS5zaXplID0gZmlsbF90ZXh0Y29udih0ZXh0Y29udl9vbmUsIG9uZSwgJm1mMS5wdHIpOworCQltZjIuc2l6ZSA9IGZpbGxfdGV4dGNvbnYodGV4dGNvbnZfdHdvLCB0d28sICZtZjIucHRyKTsKKworCQlwZSA9IGRpZmZfZnVuY25hbWVfcGF0dGVybihvbmUpOworCQlpZiAoIXBlKQorCQkJcGUgPSBkaWZmX2Z1bmNuYW1lX3BhdHRlcm4odHdvKTsKKworCQltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCQltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwkJbWVtc2V0KCZlY2JkYXRhLCAwLCBzaXplb2YoZWNiZGF0YSkpOworCQllY2JkYXRhLmxhYmVsX3BhdGggPSBsYmw7CisJCWVjYmRhdGEuY29sb3JfZGlmZiA9IHdhbnRfY29sb3Ioby0+dXNlX2NvbG9yKTsKKwkJZWNiZGF0YS5mb3VuZF9jaGFuZ2VzcCA9ICZvLT5mb3VuZF9jaGFuZ2VzOworCQllY2JkYXRhLndzX3J1bGUgPSB3aGl0ZXNwYWNlX3J1bGUobmFtZV9iID8gbmFtZV9iIDogbmFtZV9hKTsKKwkJaWYgKGVjYmRhdGEud3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikKKwkJCWNoZWNrX2JsYW5rX2F0X2VvZigmbWYxLCAmbWYyLCAmZWNiZGF0YSk7CisJCWVjYmRhdGEub3B0ID0gbzsKKwkJZWNiZGF0YS5oZWFkZXIgPSBoZWFkZXIubGVuID8gJmhlYWRlciA6IE5VTEw7CisJCXhwcC5mbGFncyA9IG8tPnhkbF9vcHRzOworCQl4ZWNmZy5jdHhsZW4gPSBvLT5jb250ZXh0OworCQl4ZWNmZy5pbnRlcmh1bmtjdHhsZW4gPSBvLT5pbnRlcmh1bmtjb250ZXh0OworCQl4ZWNmZy5mbGFncyA9IFhETF9FTUlUX0ZVTkNOQU1FUzsKKwkJaWYgKERJRkZfT1BUX1RTVChvLCBGVU5DQ09OVEVYVCkpCisJCQl4ZWNmZy5mbGFncyB8PSBYRExfRU1JVF9GVU5DQ09OVEVYVDsKKwkJaWYgKHBlKQorCQkJeGRpZmZfc2V0X2ZpbmRfZnVuYygmeGVjZmcsIHBlLT5wYXR0ZXJuLCBwZS0+Y2ZsYWdzKTsKKwkJaWYgKCFkaWZmb3B0cykKKwkJCTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChkaWZmb3B0cywgIi0tdW5pZmllZD0iKSkKKwkJCXhlY2ZnLmN0eGxlbiA9IHN0cnRvdWwoZGlmZm9wdHMgKyAxMCwgTlVMTCwgMTApOworCQllbHNlIGlmICghcHJlZml4Y21wKGRpZmZvcHRzLCAiLXUiKSkKKwkJCXhlY2ZnLmN0eGxlbiA9IHN0cnRvdWwoZGlmZm9wdHMgKyAyLCBOVUxMLCAxMCk7CisJCWlmIChvLT53b3JkX2RpZmYpCisJCQlpbml0X2RpZmZfd29yZHNfZGF0YSgmZWNiZGF0YSwgbywgb25lLCB0d28pOworCQl4ZGlfZGlmZl9vdXRmKCZtZjEsICZtZjIsIGZuX291dF9jb25zdW1lLCAmZWNiZGF0YSwKKwkJCSAgICAgICZ4cHAsICZ4ZWNmZyk7CisJCWlmIChvLT53b3JkX2RpZmYpCisJCQlmcmVlX2RpZmZfd29yZHNfZGF0YSgmZWNiZGF0YSk7CisJCWlmICh0ZXh0Y29udl9vbmUpCisJCQlmcmVlKG1mMS5wdHIpOworCQlpZiAodGV4dGNvbnZfdHdvKQorCQkJZnJlZShtZjIucHRyKTsKKwkJeGRpZmZfY2xlYXJfZmluZF9mdW5jKCZ4ZWNmZyk7CisJfQorCisgZnJlZV9hYl9hbmRfcmV0dXJuOgorCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkZXIpOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKG9uZSk7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEodHdvKTsKKwlmcmVlKGFfb25lKTsKKwlmcmVlKGJfdHdvKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWx0aW5fZGlmZnN0YXQoY29uc3QgY2hhciAqbmFtZV9hLCBjb25zdCBjaGFyICpuYW1lX2IsCisJCQkgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28sCisJCQkgICAgIHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCwKKwkJCSAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCSAgICAgaW50IGNvbXBsZXRlX3Jld3JpdGUpCit7CisJbW1maWxlX3QgbWYxLCBtZjI7CisJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmRhdGE7CisJaW50IHNhbWVfY29udGVudHM7CisKKwlkYXRhID0gZGlmZnN0YXRfYWRkKGRpZmZzdGF0LCBuYW1lX2EsIG5hbWVfYik7CisKKwlpZiAoIW9uZSB8fCAhdHdvKSB7CisJCWRhdGEtPmlzX3VubWVyZ2VkID0gMTsKKwkJcmV0dXJuOworCX0KKworCXNhbWVfY29udGVudHMgPSAhaGFzaGNtcChvbmUtPnNoYTEsIHR3by0+c2hhMSk7CisKKwlpZiAoZGlmZl9maWxlc3BlY19pc19iaW5hcnkob25lKSB8fCBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeSh0d28pKSB7CisJCWRhdGEtPmlzX2JpbmFyeSA9IDE7CisJCWlmIChzYW1lX2NvbnRlbnRzKSB7CisJCQlkYXRhLT5hZGRlZCA9IDA7CisJCQlkYXRhLT5kZWxldGVkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWRhdGEtPmFkZGVkID0gZGlmZl9maWxlc3BlY19zaXplKHR3byk7CisJCQlkYXRhLT5kZWxldGVkID0gZGlmZl9maWxlc3BlY19zaXplKG9uZSk7CisJCX0KKwl9CisKKwllbHNlIGlmIChjb21wbGV0ZV9yZXdyaXRlKSB7CisJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAwKTsKKwkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyh0d28sIDApOworCQlkYXRhLT5kZWxldGVkID0gY291bnRfbGluZXMob25lLT5kYXRhLCBvbmUtPnNpemUpOworCQlkYXRhLT5hZGRlZCA9IGNvdW50X2xpbmVzKHR3by0+ZGF0YSwgdHdvLT5zaXplKTsKKwl9CisKKwllbHNlIGlmICghc2FtZV9jb250ZW50cykgeworCQkvKiBDcmF6eSB4ZGwgaW50ZXJmYWNlcy4uICovCisJCXhwcGFyYW1fdCB4cHA7CisJCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKworCQlpZiAoZmlsbF9tbWZpbGUoJm1mMSwgb25lKSA8IDAgfHwgZmlsbF9tbWZpbGUoJm1mMiwgdHdvKSA8IDApCisJCQlkaWUoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKKworCQltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCQltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwkJeHBwLmZsYWdzID0gby0+eGRsX29wdHM7CisJCXhlY2ZnLmN0eGxlbiA9IG8tPmNvbnRleHQ7CisJCXhlY2ZnLmludGVyaHVua2N0eGxlbiA9IG8tPmludGVyaHVua2NvbnRleHQ7CisJCXhkaV9kaWZmX291dGYoJm1mMSwgJm1mMiwgZGlmZnN0YXRfY29uc3VtZSwgZGlmZnN0YXQsCisJCQkgICAgICAmeHBwLCAmeGVjZmcpOworCX0KKworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKG9uZSk7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEodHdvKTsKK30KKworc3RhdGljIHZvaWQgYnVpbHRpbl9jaGVja2RpZmYoY29uc3QgY2hhciAqbmFtZV9hLCBjb25zdCBjaGFyICpuYW1lX2IsCisJCQkgICAgICBjb25zdCBjaGFyICphdHRyX3BhdGgsCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bywKKwkJCSAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJbW1maWxlX3QgbWYxLCBtZjI7CisJc3RydWN0IGNoZWNrZGlmZl90IGRhdGE7CisKKwlpZiAoIXR3bykKKwkJcmV0dXJuOworCisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCWRhdGEuZmlsZW5hbWUgPSBuYW1lX2IgPyBuYW1lX2IgOiBuYW1lX2E7CisJZGF0YS5saW5lbm8gPSAwOworCWRhdGEubyA9IG87CisJZGF0YS53c19ydWxlID0gd2hpdGVzcGFjZV9ydWxlKGF0dHJfcGF0aCk7CisJZGF0YS5jb25mbGljdF9tYXJrZXJfc2l6ZSA9IGxsX21lcmdlX21hcmtlcl9zaXplKGF0dHJfcGF0aCk7CisKKwlpZiAoZmlsbF9tbWZpbGUoJm1mMSwgb25lKSA8IDAgfHwgZmlsbF9tbWZpbGUoJm1mMiwgdHdvKSA8IDApCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgZmlsZXMgdG8gZGlmZiIpOworCisJLyoKKwkgKiBBbGwgdGhlIG90aGVyIGNvZGVwYXRocyBjaGVjayBib3RoIHNpZGVzLCBidXQgbm90IGNoZWNraW5nCisJICogdGhlICJvbGQiIHNpZGUgaGVyZSBpcyBkZWxpYmVyYXRlLiAgV2UgYXJlIGNoZWNraW5nIHRoZSBuZXdseQorCSAqIGludHJvZHVjZWQgY2hhbmdlcywgYW5kIGFzIGxvbmcgYXMgdGhlICJuZXciIHNpZGUgaXMgdGV4dCwgd2UKKwkgKiBjYW4gYW5kIHNob3VsZCBjaGVjayB3aGF0IGl0IGludHJvZHVjZXMuCisJICovCisJaWYgKGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KHR3bykpCisJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOworCWVsc2UgeworCQkvKiBDcmF6eSB4ZGwgaW50ZXJmYWNlcy4uICovCisJCXhwcGFyYW1fdCB4cHA7CisJCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKworCQltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCQltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwkJeGVjZmcuY3R4bGVuID0gMTsgLyogYXQgbGVhc3Qgb25lIGNvbnRleHQgbGluZSAqLworCQl4cHAuZmxhZ3MgPSAwOworCQl4ZGlfZGlmZl9vdXRmKCZtZjEsICZtZjIsIGNoZWNrZGlmZl9jb25zdW1lLCAmZGF0YSwKKwkJCSAgICAgICZ4cHAsICZ4ZWNmZyk7CisKKwkJaWYgKGRhdGEud3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgeworCQkJc3RydWN0IGVtaXRfY2FsbGJhY2sgZWNiZGF0YTsKKwkJCWludCBibGFua19hdF9lb2Y7CisKKwkJCWVjYmRhdGEud3NfcnVsZSA9IGRhdGEud3NfcnVsZTsKKwkJCWNoZWNrX2JsYW5rX2F0X2VvZigmbWYxLCAmbWYyLCAmZWNiZGF0YSk7CisJCQlibGFua19hdF9lb2YgPSBlY2JkYXRhLmJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2U7CisKKwkJCWlmIChibGFua19hdF9lb2YpIHsKKwkJCQlzdGF0aWMgY2hhciAqZXJyOworCQkJCWlmICghZXJyKQorCQkJCQllcnIgPSB3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyhXU19CTEFOS19BVF9FT0YpOworCQkJCWZwcmludGYoby0+ZmlsZSwgIiVzOiVkOiAlcy5cbiIsCisJCQkJCWRhdGEuZmlsZW5hbWUsIGJsYW5rX2F0X2VvZiwgZXJyKTsKKwkJCQlkYXRhLnN0YXR1cyA9IDE7IC8qIHJlcG9ydCBlcnJvcnMgKi8KKwkJCX0KKwkJfQorCX0KKyBmcmVlX2FuZF9yZXR1cm46CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEob25lKTsKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YSh0d28pOworCWlmIChkYXRhLnN0YXR1cykKKwkJRElGRl9PUFRfU0VUKG8sIENIRUNLX0ZBSUxFRCk7Cit9CisKK3N0cnVjdCBkaWZmX2ZpbGVzcGVjICphbGxvY19maWxlc3BlYyhjb25zdCBjaGFyICpwYXRoKQoreworCWludCBuYW1lbGVuID0gc3RybGVuKHBhdGgpOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjID0geG1hbGxvYyhzaXplb2YoKnNwZWMpICsgbmFtZWxlbiArIDEpOworCisJbWVtc2V0KHNwZWMsIDAsIHNpemVvZigqc3BlYykpOworCXNwZWMtPnBhdGggPSAoY2hhciAqKShzcGVjICsgMSk7CisJbWVtY3B5KHNwZWMtPnBhdGgsIHBhdGgsIG5hbWVsZW4rMSk7CisJc3BlYy0+Y291bnQgPSAxOworCXNwZWMtPmlzX2JpbmFyeSA9IC0xOworCXJldHVybiBzcGVjOworfQorCit2b2lkIGZyZWVfZmlsZXNwZWMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWMpCit7CisJaWYgKCEtLXNwZWMtPmNvdW50KSB7CisJCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHNwZWMpOworCQlmcmVlKHNwZWMpOworCX0KK30KKwordm9pZCBmaWxsX2ZpbGVzcGVjKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgICBpbnQgc2hhMV92YWxpZCwgdW5zaWduZWQgc2hvcnQgbW9kZSkKK3sKKwlpZiAobW9kZSkgeworCQlzcGVjLT5tb2RlID0gY2Fub25fbW9kZShtb2RlKTsKKwkJaGFzaGNweShzcGVjLT5zaGExLCBzaGExKTsKKwkJc3BlYy0+c2hhMV92YWxpZCA9IHNoYTFfdmFsaWQ7CisJfQorfQorCisvKgorICogR2l2ZW4gYSBuYW1lIGFuZCBzaGExIHBhaXIsIGlmIHRoZSBpbmRleCB0ZWxscyB1cyB0aGUgZmlsZSBpbgorICogdGhlIHdvcmsgdHJlZSBoYXMgdGhhdCBvYmplY3QgY29udGVudHMsIHJldHVybiB0cnVlLCBzbyB0aGF0CisgKiBwcmVwYXJlX3RlbXBfZmlsZSgpIGRvZXMgbm90IGhhdmUgdG8gaW5mbGF0ZSBhbmQgZXh0cmFjdC4KKyAqLworc3RhdGljIGludCByZXVzZV93b3JrdHJlZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCB3YW50X2ZpbGUpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgcG9zLCBsZW47CisKKwkvKgorCSAqIFdlIGRvIG5vdCByZWFkIHRoZSBjYWNoZSBvdXJzZWx2ZXMgaGVyZSwgYmVjYXVzZSB0aGUKKwkgKiBiZW5jaG1hcmsgd2l0aCBteSBwcmV2aW91cyB2ZXJzaW9uIHRoYXQgYWx3YXlzIHJlYWRzIGNhY2hlCisJICogc2hvd3MgdGhhdCBpdCBtYWtlcyB0aGluZ3Mgd29yc2UgZm9yIGRpZmYtdHJlZSBjb21wYXJpbmcKKwkgKiB0d28gbGludXgtMi42IGtlcm5lbCB0cmVlcyBpbiBhbiBhbHJlYWR5IGNoZWNrZWQgb3V0IHdvcmsKKwkgKiB0cmVlLiAgVGhpcyBpcyBiZWNhdXNlIG1vc3QgZGlmZi10cmVlIGNvbXBhcmlzb25zIGRlYWwgd2l0aAorCSAqIG9ubHkgYSBzbWFsbCBudW1iZXIgb2YgZmlsZXMsIHdoaWxlIHJlYWRpbmcgdGhlIGNhY2hlIGlzCisJICogZXhwZW5zaXZlIGZvciBhIGxhcmdlIHByb2plY3QsIGFuZCBpdHMgY29zdCBvdXR3ZWlnaHMgdGhlCisJICogc2F2aW5ncyB3ZSBnZXQgYnkgbm90IGluZmxhdGluZyB0aGUgb2JqZWN0IHRvIGEgdGVtcG9yYXJ5CisJICogZmlsZS4gIFByYWN0aWNhbGx5LCB0aGlzIGNvZGUgb25seSBoZWxwcyB3aGVuIHdlIGFyZSB1c2VkCisJICogYnkgZGlmZi1jYWNoZSAtLWNhY2hlZCwgd2hpY2ggZG9lcyByZWFkIHRoZSBjYWNoZSBiZWZvcmUKKwkgKiBjYWxsaW5nIHVzLgorCSAqLworCWlmICghYWN0aXZlX2NhY2hlKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIHdhbnQgdG8gYXZvaWQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlmIG91ciBjYWxsZXIKKwkgKiBkb2Vzbid0IG5lZWQgdGhlIGRhdGEgaW4gYSBub3JtYWwgZmlsZSwgdGhpcyBzeXN0ZW0KKwkgKiBpcyByYXRoZXIgc2xvdyB3aXRoIGl0cyBzdGF0L29wZW4vbW1hcC9jbG9zZSBzeXNjYWxscywKKwkgKiBhbmQgdGhlIG9iamVjdCBpcyBjb250YWluZWQgaW4gYSBwYWNrIGZpbGUuICBUaGUgcGFjaworCSAqIGlzIHByb2JhYmx5IGFscmVhZHkgb3BlbiBhbmQgd2lsbCBiZSBmYXN0ZXIgdG8gb2J0YWluCisJICogdGhlIGRhdGEgdGhyb3VnaCB0aGFuIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gIExvb3NlCisJICogb2JqZWN0cyBob3dldmVyIHdvdWxkIHRlbmQgdG8gYmUgc2xvd2VyIGFzIHRoZXkgbmVlZAorCSAqIHRvIGJlIGluZGl2aWR1YWxseSBvcGVuZWQgYW5kIGluZmxhdGVkLgorCSAqLworCWlmICghRkFTVF9XT1JLSU5HX0RJUkVDVE9SWSAmJiAhd2FudF9maWxlICYmIGhhc19zaGExX3BhY2soc2hhMSkpCisJCXJldHVybiAwOworCisJbGVuID0gc3RybGVuKG5hbWUpOworCXBvcyA9IGNhY2hlX25hbWVfcG9zKG5hbWUsIGxlbik7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiAwOworCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisKKwkvKgorCSAqIFRoaXMgaXMgbm90IHRoZSBzaGExIHdlIGFyZSBsb29raW5nIGZvciwgb3IKKwkgKiB1bnJldXNhYmxlIGJlY2F1c2UgaXQgaXMgbm90IGEgcmVndWxhciBmaWxlLgorCSAqLworCWlmIChoYXNoY21wKHNoYTEsIGNlLT5zaGExKSB8fCAhU19JU1JFRyhjZS0+Y2VfbW9kZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiBjZSBpcyBtYXJrZWQgYXMgImFzc3VtZSB1bmNoYW5nZWQiLCB0aGVyZSBpcyBubworCSAqIGd1YXJhbnRlZSB0aGF0IHdvcmsgdHJlZSBtYXRjaGVzIHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLgorCSAqLworCWlmICgoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpIHx8IGNlX3NraXBfd29ya3RyZWUoY2UpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgY2UgbWF0Y2hlcyB0aGUgZmlsZSBpbiB0aGUgd29yayB0cmVlLCB3ZSBjYW4gcmV1c2UgaXQuCisJICovCisJaWYgKGNlX3VwdG9kYXRlKGNlKSB8fAorCSAgICAoIWxzdGF0KG5hbWUsICZzdCkgJiYgIWNlX21hdGNoX3N0YXQoY2UsICZzdCwgMCkpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpZmZfcG9wdWxhdGVfZ2l0bGluayhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcywgaW50IHNpemVfb25seSkKK3sKKwlpbnQgbGVuOworCWNoYXIgKmRhdGEgPSB4bWFsbG9jKDEwMCksICpkaXJ0eSA9ICIiOworCisJLyogQXJlIHdlIGxvb2tpbmcgYXQgdGhlIHdvcmsgdHJlZT8gKi8KKwlpZiAocy0+ZGlydHlfc3VibW9kdWxlKQorCQlkaXJ0eSA9ICItZGlydHkiOworCisJbGVuID0gc25wcmludGYoZGF0YSwgMTAwLAorCQkgICAgICAgIlN1YnByb2plY3QgY29tbWl0ICVzJXNcbiIsIHNoYTFfdG9faGV4KHMtPnNoYTEpLCBkaXJ0eSk7CisJcy0+ZGF0YSA9IGRhdGE7CisJcy0+c2l6ZSA9IGxlbjsKKwlzLT5zaG91bGRfZnJlZSA9IDE7CisJaWYgKHNpemVfb25seSkgeworCQlzLT5kYXRhID0gTlVMTDsKKwkJZnJlZShkYXRhKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXaGlsZSBkb2luZyByZW5hbWUgZGV0ZWN0aW9uIGFuZCBwaWNrYXhlIG9wZXJhdGlvbiwgd2UgbWF5IG5lZWQgdG8KKyAqIGdyYWIgdGhlIGRhdGEgZm9yIHRoZSBibG9iIChvciBmaWxlKSBmb3Igb3VyIG93biBpbi1jb3JlIGNvbXBhcmlzb24uCisgKiBkaWZmX2ZpbGVzcGVjIGhhcyBkYXRhIGFuZCBzaXplIGZpZWxkcyBmb3IgdGhpcyBwdXJwb3NlLgorICovCitpbnQgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcywgaW50IHNpemVfb25seSkKK3sKKwlpbnQgZXJyID0gMDsKKwlpZiAoIURJRkZfRklMRV9WQUxJRChzKSkKKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogYXNraW5nIHRvIHBvcHVsYXRlIGludmFsaWQgZmlsZS4iKTsKKwlpZiAoU19JU0RJUihzLT5tb2RlKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHMtPmRhdGEpCisJCXJldHVybiAwOworCisJaWYgKHNpemVfb25seSAmJiAwIDwgcy0+c2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoU19JU0dJVExJTksocy0+bW9kZSkpCisJCXJldHVybiBkaWZmX3BvcHVsYXRlX2dpdGxpbmsocywgc2l6ZV9vbmx5KTsKKworCWlmICghcy0+c2hhMV92YWxpZCB8fAorCSAgICByZXVzZV93b3JrdHJlZV9maWxlKHMtPnBhdGgsIHMtPnNoYTEsIDApKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdGF0IHN0OworCQlpbnQgZmQ7CisKKwkJaWYgKGxzdGF0KHMtPnBhdGgsICZzdCkgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJCQllcnJfZW1wdHk6CisJCQkJZXJyID0gLTE7CisJCQllbXB0eToKKwkJCQlzLT5kYXRhID0gKGNoYXIgKikiIjsKKwkJCQlzLT5zaXplID0gMDsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJCXMtPnNpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCQlpZiAoIXMtPnNpemUpCisJCQlnb3RvIGVtcHR5OworCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZzYiwgcy0+cGF0aCwgcy0+c2l6ZSkpCisJCQkJZ290byBlcnJfZW1wdHk7CisJCQlzLT5zaXplID0gc2IubGVuOworCQkJcy0+ZGF0YSA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJCXMtPnNob3VsZF9mcmVlID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChzaXplX29ubHkpCisJCQlyZXR1cm4gMDsKKwkJZmQgPSBvcGVuKHMtPnBhdGgsIE9fUkRPTkxZKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWdvdG8gZXJyX2VtcHR5OworCQlzLT5kYXRhID0geG1tYXAoTlVMTCwgcy0+c2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCQljbG9zZShmZCk7CisJCXMtPnNob3VsZF9tdW5tYXAgPSAxOworCisJCS8qCisJCSAqIENvbnZlcnQgZnJvbSB3b3JraW5nIHRyZWUgZm9ybWF0IHRvIGNhbm9uaWNhbCBnaXQgZm9ybWF0CisJCSAqLworCQlpZiAoY29udmVydF90b19naXQocy0+cGF0aCwgcy0+ZGF0YSwgcy0+c2l6ZSwgJmJ1Ziwgc2FmZV9jcmxmKSkgeworCQkJc2l6ZV90IHNpemUgPSAwOworCQkJbXVubWFwKHMtPmRhdGEsIHMtPnNpemUpOworCQkJcy0+c2hvdWxkX211bm1hcCA9IDA7CisJCQlzLT5kYXRhID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc2l6ZSk7CisJCQlzLT5zaXplID0gc2l6ZTsKKwkJCXMtPnNob3VsZF9mcmVlID0gMTsKKwkJfQorCX0KKwllbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQlpZiAoc2l6ZV9vbmx5KSB7CisJCQl0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzLT5zaGExLCAmcy0+c2l6ZSk7CisJCQlpZiAodHlwZSA8IDApCisJCQkJZGllKCJ1bmFibGUgdG8gcmVhZCAlcyIsIHNoYTFfdG9faGV4KHMtPnNoYTEpKTsKKwkJfSBlbHNlIHsKKwkJCXMtPmRhdGEgPSByZWFkX3NoYTFfZmlsZShzLT5zaGExLCAmdHlwZSwgJnMtPnNpemUpOworCQkJaWYgKCFzLT5kYXRhKQorCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgJXMiLCBzaGExX3RvX2hleChzLT5zaGExKSk7CisJCQlzLT5zaG91bGRfZnJlZSA9IDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2Ioc3RydWN0IGRpZmZfZmlsZXNwZWMgKnMpCit7CisJaWYgKHMtPnNob3VsZF9mcmVlKQorCQlmcmVlKHMtPmRhdGEpOworCWVsc2UgaWYgKHMtPnNob3VsZF9tdW5tYXApCisJCW11bm1hcChzLT5kYXRhLCBzLT5zaXplKTsKKworCWlmIChzLT5zaG91bGRfZnJlZSB8fCBzLT5zaG91bGRfbXVubWFwKSB7CisJCXMtPnNob3VsZF9mcmVlID0gcy0+c2hvdWxkX211bm1hcCA9IDA7CisJCXMtPmRhdGEgPSBOVUxMOworCX0KK30KKwordm9pZCBkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcykKK3sKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYihzKTsKKwlmcmVlKHMtPmNudF9kYXRhKTsKKwlzLT5jbnRfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBfdGVtcF9ibG9iKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBkaWZmX3RlbXBmaWxlICp0ZW1wLAorCQkJICAgdm9pZCAqYmxvYiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICBpbnQgbW9kZSkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHRlbXBsYXRlID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aF9kdXAgPSB4c3RyZHVwKHBhdGgpOworCWNvbnN0IGNoYXIgKmJhc2UgPSBiYXNlbmFtZShwYXRoX2R1cCk7CisKKwkvKiBHZW5lcmF0ZSAiWFhYWFhYX2Jhc2VuYW1lLmV4dCIgKi8KKwlzdHJidWZfYWRkc3RyKCZ0ZW1wbGF0ZSwgIlhYWFhYWF8iKTsKKwlzdHJidWZfYWRkc3RyKCZ0ZW1wbGF0ZSwgYmFzZSk7CisKKwlmZCA9IGdpdF9ta3N0ZW1wcyh0ZW1wLT50bXBfcGF0aCwgUEFUSF9NQVgsIHRlbXBsYXRlLmJ1ZiwKKwkJCXN0cmxlbihiYXNlKSArIDEpOworCWlmIChmZCA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wLWZpbGUiKTsKKwlpZiAoY29udmVydF90b193b3JraW5nX3RyZWUocGF0aCwKKwkJCShjb25zdCBjaGFyICopYmxvYiwgKHNpemVfdClzaXplLCAmYnVmKSkgeworCQlibG9iID0gYnVmLmJ1ZjsKKwkJc2l6ZSA9IGJ1Zi5sZW47CisJfQorCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBibG9iLCBzaXplKSAhPSBzaXplKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKKwljbG9zZShmZCk7CisJdGVtcC0+bmFtZSA9IHRlbXAtPnRtcF9wYXRoOworCXN0cmNweSh0ZW1wLT5oZXgsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl0ZW1wLT5oZXhbNDBdID0gMDsKKwlzcHJpbnRmKHRlbXAtPm1vZGUsICIlMDZvIiwgbW9kZSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnRlbXBsYXRlKTsKKwlmcmVlKHBhdGhfZHVwKTsKK30KKworc3RhdGljIHN0cnVjdCBkaWZmX3RlbXBmaWxlICpwcmVwYXJlX3RlbXBfZmlsZShjb25zdCBjaGFyICpuYW1lLAorCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCXN0cnVjdCBkaWZmX3RlbXBmaWxlICp0ZW1wID0gY2xhaW1fZGlmZl90ZW1wZmlsZSgpOworCisJaWYgKCFESUZGX0ZJTEVfVkFMSUQob25lKSkgeworCW5vdF9hX3ZhbGlkX2ZpbGU6CisJCS8qIEEgJy0nIGVudHJ5IHByb2R1Y2VzIHRoaXMgZm9yIGZpbGUtMiwgYW5kCisJCSAqIGEgJysnIGVudHJ5IHByb2R1Y2VzIHRoaXMgZm9yIGZpbGUtMS4KKwkJICovCisJCXRlbXAtPm5hbWUgPSAiL2Rldi9udWxsIjsKKwkJc3RyY3B5KHRlbXAtPmhleCwgIi4iKTsKKwkJc3RyY3B5KHRlbXAtPm1vZGUsICIuIik7CisJCXJldHVybiB0ZW1wOworCX0KKworCWlmICghcmVtb3ZlX3RlbXBmaWxlX2luc3RhbGxlZCkgeworCQlhdGV4aXQocmVtb3ZlX3RlbXBmaWxlKTsKKwkJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVtb3ZlX3RlbXBmaWxlX29uX3NpZ25hbCk7CisJCXJlbW92ZV90ZW1wZmlsZV9pbnN0YWxsZWQgPSAxOworCX0KKworCWlmICghb25lLT5zaGExX3ZhbGlkIHx8CisJICAgIHJldXNlX3dvcmt0cmVlX2ZpbGUobmFtZSwgb25lLT5zaGExLCAxKSkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKGxzdGF0KG5hbWUsICZzdCkgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCWdvdG8gbm90X2FfdmFsaWRfZmlsZTsKKwkJCWRpZV9lcnJubygic3RhdCglcykiLCBuYW1lKTsKKwkJfQorCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmc2IsIG5hbWUsIHN0LnN0X3NpemUpIDwgMCkKKwkJCQlkaWVfZXJybm8oInJlYWRsaW5rKCVzKSIsIG5hbWUpOworCQkJcHJlcF90ZW1wX2Jsb2IobmFtZSwgdGVtcCwgc2IuYnVmLCBzYi5sZW4sCisJCQkJICAgICAgIChvbmUtPnNoYTFfdmFsaWQgPworCQkJCQlvbmUtPnNoYTEgOiBudWxsX3NoYTEpLAorCQkJCSAgICAgICAob25lLT5zaGExX3ZhbGlkID8KKwkJCQkJb25lLT5tb2RlIDogU19JRkxOSykpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJfQorCQllbHNlIHsKKwkJCS8qIHdlIGNhbiBib3Jyb3cgZnJvbSB0aGUgZmlsZSBpbiB0aGUgd29yayB0cmVlICovCisJCQl0ZW1wLT5uYW1lID0gbmFtZTsKKwkJCWlmICghb25lLT5zaGExX3ZhbGlkKQorCQkJCXN0cmNweSh0ZW1wLT5oZXgsIHNoYTFfdG9faGV4KG51bGxfc2hhMSkpOworCQkJZWxzZQorCQkJCXN0cmNweSh0ZW1wLT5oZXgsIHNoYTFfdG9faGV4KG9uZS0+c2hhMSkpOworCQkJLyogRXZlbiB0aG91Z2ggd2UgbWF5IHNvbWV0aW1lcyBib3Jyb3cgdGhlCisJCQkgKiBjb250ZW50cyBmcm9tIHRoZSB3b3JrIHRyZWUsIHdlIGFsd2F5cyB3YW50CisJCQkgKiBvbmUtPm1vZGUuICBtb2RlIGlzIHRydXN0d29ydGh5IGV2ZW4gd2hlbgorCQkJICogIShvbmUtPnNoYTFfdmFsaWQpLCBhcyBsb25nIGFzCisJCQkgKiBESUZGX0ZJTEVfVkFMSUQob25lKS4KKwkJCSAqLworCQkJc3ByaW50Zih0ZW1wLT5tb2RlLCAiJTA2byIsIG9uZS0+bW9kZSk7CisJCX0KKwkJcmV0dXJuIHRlbXA7CisJfQorCWVsc2UgeworCQlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhvbmUsIDApKQorCQkJZGllKCJjYW5ub3QgcmVhZCBkYXRhIGJsb2IgZm9yICVzIiwgb25lLT5wYXRoKTsKKwkJcHJlcF90ZW1wX2Jsb2IobmFtZSwgdGVtcCwgb25lLT5kYXRhLCBvbmUtPnNpemUsCisJCQkgICAgICAgb25lLT5zaGExLCBvbmUtPm1vZGUpOworCX0KKwlyZXR1cm4gdGVtcDsKK30KKworLyogQW4gZXh0ZXJuYWwgZGlmZiBjb21tYW5kIHRha2VzOgorICoKKyAqIGRpZmYtY21kIG5hbWUgaW5maWxlMSBpbmZpbGUxLXNoYTEgaW5maWxlMS1tb2RlIFwKKyAqICAgICAgICAgICAgICAgaW5maWxlMiBpbmZpbGUyLXNoYTEgaW5maWxlMi1tb2RlIFsgcmVuYW1lLXRvIF0KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHJ1bl9leHRlcm5hbF9kaWZmKGNvbnN0IGNoYXIgKnBnbSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpvdGhlciwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvLAorCQkJICAgICAgY29uc3QgY2hhciAqeGZybV9tc2csCisJCQkgICAgICBpbnQgY29tcGxldGVfcmV3cml0ZSkKK3sKKwljb25zdCBjaGFyICpzcGF3bl9hcmdbMTBdOworCWludCByZXR2YWw7CisJY29uc3QgY2hhciAqKmFyZyA9ICZzcGF3bl9hcmdbMF07CisKKwlpZiAob25lICYmIHR3bykgeworCQlzdHJ1Y3QgZGlmZl90ZW1wZmlsZSAqdGVtcF9vbmUsICp0ZW1wX3R3bzsKKwkJY29uc3QgY2hhciAqb3RoZXJuYW1lID0gKG90aGVyID8gb3RoZXIgOiBuYW1lKTsKKwkJdGVtcF9vbmUgPSBwcmVwYXJlX3RlbXBfZmlsZShuYW1lLCBvbmUpOworCQl0ZW1wX3R3byA9IHByZXBhcmVfdGVtcF9maWxlKG90aGVybmFtZSwgdHdvKTsKKwkJKmFyZysrID0gcGdtOworCQkqYXJnKysgPSBuYW1lOworCQkqYXJnKysgPSB0ZW1wX29uZS0+bmFtZTsKKwkJKmFyZysrID0gdGVtcF9vbmUtPmhleDsKKwkJKmFyZysrID0gdGVtcF9vbmUtPm1vZGU7CisJCSphcmcrKyA9IHRlbXBfdHdvLT5uYW1lOworCQkqYXJnKysgPSB0ZW1wX3R3by0+aGV4OworCQkqYXJnKysgPSB0ZW1wX3R3by0+bW9kZTsKKwkJaWYgKG90aGVyKSB7CisJCQkqYXJnKysgPSBvdGhlcjsKKwkJCSphcmcrKyA9IHhmcm1fbXNnOworCQl9CisJfSBlbHNlIHsKKwkJKmFyZysrID0gcGdtOworCQkqYXJnKysgPSBuYW1lOworCX0KKwkqYXJnID0gTlVMTDsKKwlmZmx1c2goTlVMTCk7CisJcmV0dmFsID0gcnVuX2NvbW1hbmRfdl9vcHQoc3Bhd25fYXJnLCBSVU5fVVNJTkdfU0hFTEwpOworCXJlbW92ZV90ZW1wZmlsZSgpOworCWlmIChyZXR2YWwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzLlxuIiwgbmFtZSk7CisJCWV4aXQoMSk7CisJfQorfQorCitzdGF0aWMgaW50IHNpbWlsYXJpdHlfaW5kZXgoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCit7CisJcmV0dXJuIHAtPnNjb3JlICogMTAwIC8gTUFYX1NDT1JFOworfQorCitzdGF0aWMgdm9pZCBmaWxsX21ldGFpbmZvKHN0cnVjdCBzdHJidWYgKm1zZywKKwkJCSAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgY29uc3QgY2hhciAqb3RoZXIsCisJCQkgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28sCisJCQkgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkgIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLAorCQkJICBpbnQgKm11c3Rfc2hvd19oZWFkZXIsCisJCQkgIGludCB1c2VfY29sb3IpCit7CisJY29uc3QgY2hhciAqc2V0ID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX01FVEFJTkZPKTsKKwljb25zdCBjaGFyICpyZXNldCA9IGRpZmZfZ2V0X2NvbG9yKHVzZV9jb2xvciwgRElGRl9SRVNFVCk7CisJc3RydWN0IHN0cmJ1ZiAqbXNnYnVmOworCWNoYXIgKmxpbmVfcHJlZml4ID0gIiI7CisKKwkqbXVzdF9zaG93X2hlYWRlciA9IDE7CisJaWYgKG8tPm91dHB1dF9wcmVmaXgpIHsKKwkJbXNnYnVmID0gby0+b3V0cHV0X3ByZWZpeChvLCBvLT5vdXRwdXRfcHJlZml4X2RhdGEpOworCQlsaW5lX3ByZWZpeCA9IG1zZ2J1Zi0+YnVmOworCX0KKwlzdHJidWZfaW5pdChtc2csIFBBVEhfTUFYICogMiArIDMwMCk7CisJc3dpdGNoIChwLT5zdGF0dXMpIHsKKwljYXNlIERJRkZfU1RBVFVTX0NPUElFRDoKKwkJc3RyYnVmX2FkZGYobXNnLCAiJXMlc3NpbWlsYXJpdHkgaW5kZXggJWQlJSIsCisJCQkgICAgbGluZV9wcmVmaXgsIHNldCwgc2ltaWxhcml0eV9pbmRleChwKSk7CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXG4lcyVzY29weSBmcm9tICIsCisJCQkgICAgcmVzZXQsICBsaW5lX3ByZWZpeCwgc2V0KTsKKwkJcXVvdGVfY19zdHlsZShuYW1lLCBtc2csIE5VTEwsIDApOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuJXMlc2NvcHkgdG8gIiwgcmVzZXQsIGxpbmVfcHJlZml4LCBzZXQpOworCQlxdW90ZV9jX3N0eWxlKG90aGVyLCBtc2csIE5VTEwsIDApOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuIiwgcmVzZXQpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX1JFTkFNRUQ6CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzJXNzaW1pbGFyaXR5IGluZGV4ICVkJSUiLAorCQkJICAgIGxpbmVfcHJlZml4LCBzZXQsIHNpbWlsYXJpdHlfaW5kZXgocCkpOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuJXMlc3JlbmFtZSBmcm9tICIsCisJCQkgICAgcmVzZXQsIGxpbmVfcHJlZml4LCBzZXQpOworCQlxdW90ZV9jX3N0eWxlKG5hbWUsIG1zZywgTlVMTCwgMCk7CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXG4lcyVzcmVuYW1lIHRvICIsCisJCQkgICAgcmVzZXQsIGxpbmVfcHJlZml4LCBzZXQpOworCQlxdW90ZV9jX3N0eWxlKG90aGVyLCBtc2csIE5VTEwsIDApOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuIiwgcmVzZXQpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQlpZiAocC0+c2NvcmUpIHsKKwkJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzJXNkaXNzaW1pbGFyaXR5IGluZGV4ICVkJSUlc1xuIiwKKwkJCQkgICAgbGluZV9wcmVmaXgsCisJCQkJICAgIHNldCwgc2ltaWxhcml0eV9pbmRleChwKSwgcmVzZXQpOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbHRocnUgKi8KKwlkZWZhdWx0OgorCQkqbXVzdF9zaG93X2hlYWRlciA9IDA7CisJfQorCWlmIChvbmUgJiYgdHdvICYmIGhhc2hjbXAob25lLT5zaGExLCB0d28tPnNoYTEpKSB7CisJCWludCBhYmJyZXYgPSBESUZGX09QVF9UU1QobywgRlVMTF9JTkRFWCkgPyA0MCA6IERFRkFVTFRfQUJCUkVWOworCisJCWlmIChESUZGX09QVF9UU1QobywgQklOQVJZKSkgeworCQkJbW1maWxlX3QgbWY7CisJCQlpZiAoKCFmaWxsX21tZmlsZSgmbWYsIG9uZSkgJiYgZGlmZl9maWxlc3BlY19pc19iaW5hcnkob25lKSkgfHwKKwkJCSAgICAoIWZpbGxfbW1maWxlKCZtZiwgdHdvKSAmJiBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeSh0d28pKSkKKwkJCQlhYmJyZXYgPSA0MDsKKwkJfQorCQlzdHJidWZfYWRkZihtc2csICIlcyVzaW5kZXggJXMuLiIsIGxpbmVfcHJlZml4LCBzZXQsCisJCQkgICAgZmluZF91bmlxdWVfYWJicmV2KG9uZS0+c2hhMSwgYWJicmV2KSk7CisJCXN0cmJ1Zl9hZGRzdHIobXNnLCBmaW5kX3VuaXF1ZV9hYmJyZXYodHdvLT5zaGExLCBhYmJyZXYpKTsKKwkJaWYgKG9uZS0+bW9kZSA9PSB0d28tPm1vZGUpCisJCQlzdHJidWZfYWRkZihtc2csICIgJTA2byIsIG9uZS0+bW9kZSk7CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXG4iLCByZXNldCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBydW5fZGlmZl9jbWQoY29uc3QgY2hhciAqcGdtLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgY29uc3QgY2hhciAqb3RoZXIsCisJCQkgY29uc3QgY2hhciAqYXR0cl9wYXRoLAorCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bywKKwkJCSBzdHJ1Y3Qgc3RyYnVmICptc2csCisJCQkgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCkKK3sKKwljb25zdCBjaGFyICp4ZnJtX21zZyA9IE5VTEw7CisJaW50IGNvbXBsZXRlX3Jld3JpdGUgPSAocC0+c3RhdHVzID09IERJRkZfU1RBVFVTX01PRElGSUVEKSAmJiBwLT5zY29yZTsKKwlpbnQgbXVzdF9zaG93X2hlYWRlciA9IDA7CisKKworCWlmIChESUZGX09QVF9UU1QobywgQUxMT1dfRVhURVJOQUwpKSB7CisJCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRydiA9IHVzZXJkaWZmX2ZpbmRfYnlfcGF0aChhdHRyX3BhdGgpOworCQlpZiAoZHJ2ICYmIGRydi0+ZXh0ZXJuYWwpCisJCQlwZ20gPSBkcnYtPmV4dGVybmFsOworCX0KKworCWlmIChtc2cpIHsKKwkJLyoKKwkJICogZG9uJ3QgdXNlIGNvbG9ycyB3aGVuIHRoZSBoZWFkZXIgaXMgaW50ZW5kZWQgZm9yIGFuCisJCSAqIGV4dGVybmFsIGRpZmYgZHJpdmVyCisJCSAqLworCQlmaWxsX21ldGFpbmZvKG1zZywgbmFtZSwgb3RoZXIsIG9uZSwgdHdvLCBvLCBwLAorCQkJICAgICAgJm11c3Rfc2hvd19oZWFkZXIsCisJCQkgICAgICB3YW50X2NvbG9yKG8tPnVzZV9jb2xvcikgJiYgIXBnbSk7CisJCXhmcm1fbXNnID0gbXNnLT5sZW4gPyBtc2ctPmJ1ZiA6IE5VTEw7CisJfQorCisJaWYgKHBnbSkgeworCQlydW5fZXh0ZXJuYWxfZGlmZihwZ20sIG5hbWUsIG90aGVyLCBvbmUsIHR3bywgeGZybV9tc2csCisJCQkJICBjb21wbGV0ZV9yZXdyaXRlKTsKKwkJcmV0dXJuOworCX0KKwlpZiAob25lICYmIHR3bykKKwkJYnVpbHRpbl9kaWZmKG5hbWUsIG90aGVyID8gb3RoZXIgOiBuYW1lLAorCQkJICAgICBvbmUsIHR3bywgeGZybV9tc2csIG11c3Rfc2hvd19oZWFkZXIsCisJCQkgICAgIG8sIGNvbXBsZXRlX3Jld3JpdGUpOworCWVsc2UKKwkJZnByaW50ZihvLT5maWxlLCAiKiBVbm1lcmdlZCBwYXRoICVzXG4iLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9maWxsX3NoYTFfaW5mbyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWlmIChESUZGX0ZJTEVfVkFMSUQob25lKSkgeworCQlpZiAoIW9uZS0+c2hhMV92YWxpZCkgeworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlpZiAob25lLT5pc19zdGRpbikgeworCQkJCWhhc2hjcHkob25lLT5zaGExLCBudWxsX3NoYTEpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChsc3RhdChvbmUtPnBhdGgsICZzdCkgPCAwKQorCQkJCWRpZV9lcnJubygic3RhdCAnJXMnIiwgb25lLT5wYXRoKTsKKwkJCWlmIChpbmRleF9wYXRoKG9uZS0+c2hhMSwgb25lLT5wYXRoLCAmc3QsIDApKQorCQkJCWRpZSgiY2Fubm90IGhhc2ggJXMiLCBvbmUtPnBhdGgpOworCQl9CisJfQorCWVsc2UKKwkJaGFzaGNscihvbmUtPnNoYTEpOworfQorCitzdGF0aWMgdm9pZCBzdHJpcF9wcmVmaXgoaW50IHByZWZpeF9sZW5ndGgsIGNvbnN0IGNoYXIgKipuYW1lcCwgY29uc3QgY2hhciAqKm90aGVycCkKK3sKKwkvKiBTdHJpcCB0aGUgcHJlZml4IGJ1dCBkbyBub3QgbW9sZXN0IC9kZXYvbnVsbCBhbmQgYWJzb2x1dGUgcGF0aHMgKi8KKwlpZiAoKm5hbWVwICYmICoqbmFtZXAgIT0gJy8nKSB7CisJCSpuYW1lcCArPSBwcmVmaXhfbGVuZ3RoOworCQlpZiAoKipuYW1lcCA9PSAnLycpCisJCQkrKypuYW1lcDsKKwl9CisJaWYgKCpvdGhlcnAgJiYgKipvdGhlcnAgIT0gJy8nKSB7CisJCSpvdGhlcnAgKz0gcHJlZml4X2xlbmd0aDsKKwkJaWYgKCoqb3RoZXJwID09ICcvJykKKwkJCSsrKm90aGVycDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9kaWZmKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCWNvbnN0IGNoYXIgKnBnbSA9IGV4dGVybmFsX2RpZmYoKTsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZzsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lID0gcC0+b25lOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28gPSBwLT50d287CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpvdGhlcjsKKwljb25zdCBjaGFyICphdHRyX3BhdGg7CisKKwluYW1lICA9IHAtPm9uZS0+cGF0aDsKKwlvdGhlciA9IChzdHJjbXAobmFtZSwgcC0+dHdvLT5wYXRoKSA/IHAtPnR3by0+cGF0aCA6IE5VTEwpOworCWF0dHJfcGF0aCA9IG5hbWU7CisJaWYgKG8tPnByZWZpeF9sZW5ndGgpCisJCXN0cmlwX3ByZWZpeChvLT5wcmVmaXhfbGVuZ3RoLCAmbmFtZSwgJm90aGVyKTsKKworCWlmICghRElGRl9PUFRfVFNUKG8sIEFMTE9XX0VYVEVSTkFMKSkKKwkJcGdtID0gTlVMTDsKKworCWlmIChESUZGX1BBSVJfVU5NRVJHRUQocCkpIHsKKwkJcnVuX2RpZmZfY21kKHBnbSwgbmFtZSwgTlVMTCwgYXR0cl9wYXRoLAorCQkJICAgICBOVUxMLCBOVUxMLCBOVUxMLCBvLCBwKTsKKwkJcmV0dXJuOworCX0KKworCWRpZmZfZmlsbF9zaGExX2luZm8ob25lKTsKKwlkaWZmX2ZpbGxfc2hhMV9pbmZvKHR3byk7CisKKwlpZiAoIXBnbSAmJgorCSAgICBESUZGX0ZJTEVfVkFMSUQob25lKSAmJiBESUZGX0ZJTEVfVkFMSUQodHdvKSAmJgorCSAgICAoU19JRk1UICYgb25lLT5tb2RlKSAhPSAoU19JRk1UICYgdHdvLT5tb2RlKSkgeworCQkvKgorCQkgKiBhIGZpbGVwYWlyIHRoYXQgY2hhbmdlcyBiZXR3ZWVuIGZpbGUgYW5kIHN5bWxpbmsKKwkJICogbmVlZHMgdG8gYmUgc3BsaXQgaW50byBkZWxldGlvbiBhbmQgY3JlYXRpb24uCisJCSAqLworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqbnVsbCA9IGFsbG9jX2ZpbGVzcGVjKHR3by0+cGF0aCk7CisJCXJ1bl9kaWZmX2NtZChOVUxMLCBuYW1lLCBvdGhlciwgYXR0cl9wYXRoLAorCQkJICAgICBvbmUsIG51bGwsICZtc2csIG8sIHApOworCQlmcmVlKG51bGwpOworCQlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKworCQludWxsID0gYWxsb2NfZmlsZXNwZWMob25lLT5wYXRoKTsKKwkJcnVuX2RpZmZfY21kKE5VTEwsIG5hbWUsIG90aGVyLCBhdHRyX3BhdGgsCisJCQkgICAgIG51bGwsIHR3bywgJm1zZywgbywgcCk7CisJCWZyZWUobnVsbCk7CisJfQorCWVsc2UKKwkJcnVuX2RpZmZfY21kKHBnbSwgbmFtZSwgb3RoZXIsIGF0dHJfcGF0aCwKKwkJCSAgICAgb25lLCB0d28sICZtc2csIG8sIHApOworCisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9kaWZmc3RhdChzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCSBzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpvdGhlcjsKKwlpbnQgY29tcGxldGVfcmV3cml0ZSA9IDA7CisKKwlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKSB7CisJCS8qIHVubWVyZ2VkICovCisJCWJ1aWx0aW5fZGlmZnN0YXQocC0+b25lLT5wYXRoLCBOVUxMLCBOVUxMLCBOVUxMLCBkaWZmc3RhdCwgbywgMCk7CisJCXJldHVybjsKKwl9CisKKwluYW1lID0gcC0+b25lLT5wYXRoOworCW90aGVyID0gKHN0cmNtcChuYW1lLCBwLT50d28tPnBhdGgpID8gcC0+dHdvLT5wYXRoIDogTlVMTCk7CisKKwlpZiAoby0+cHJlZml4X2xlbmd0aCkKKwkJc3RyaXBfcHJlZml4KG8tPnByZWZpeF9sZW5ndGgsICZuYW1lLCAmb3RoZXIpOworCisJZGlmZl9maWxsX3NoYTFfaW5mbyhwLT5vbmUpOworCWRpZmZfZmlsbF9zaGExX2luZm8ocC0+dHdvKTsKKworCWlmIChwLT5zdGF0dXMgPT0gRElGRl9TVEFUVVNfTU9ESUZJRUQgJiYgcC0+c2NvcmUpCisJCWNvbXBsZXRlX3Jld3JpdGUgPSAxOworCWJ1aWx0aW5fZGlmZnN0YXQobmFtZSwgb3RoZXIsIHAtPm9uZSwgcC0+dHdvLCBkaWZmc3RhdCwgbywgY29tcGxldGVfcmV3cml0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9jaGVja2RpZmYoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpvdGhlcjsKKwljb25zdCBjaGFyICphdHRyX3BhdGg7CisKKwlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKSB7CisJCS8qIHVubWVyZ2VkICovCisJCXJldHVybjsKKwl9CisKKwluYW1lID0gcC0+b25lLT5wYXRoOworCW90aGVyID0gKHN0cmNtcChuYW1lLCBwLT50d28tPnBhdGgpID8gcC0+dHdvLT5wYXRoIDogTlVMTCk7CisJYXR0cl9wYXRoID0gb3RoZXIgPyBvdGhlciA6IG5hbWU7CisKKwlpZiAoby0+cHJlZml4X2xlbmd0aCkKKwkJc3RyaXBfcHJlZml4KG8tPnByZWZpeF9sZW5ndGgsICZuYW1lLCAmb3RoZXIpOworCisJZGlmZl9maWxsX3NoYTFfaW5mbyhwLT5vbmUpOworCWRpZmZfZmlsbF9zaGExX2luZm8ocC0+dHdvKTsKKworCWJ1aWx0aW5fY2hlY2tkaWZmKG5hbWUsIG90aGVyLCBhdHRyX3BhdGgsIHAtPm9uZSwgcC0+dHdvLCBvKTsKK30KKwordm9pZCBkaWZmX3NldHVwKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJbWVtY3B5KG9wdGlvbnMsICZkZWZhdWx0X2RpZmZfb3B0aW9ucywgc2l6ZW9mKCpvcHRpb25zKSk7CisKKwlvcHRpb25zLT5maWxlID0gc3Rkb3V0OworCisJb3B0aW9ucy0+bGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CisJb3B0aW9ucy0+YnJlYWtfb3B0ID0gLTE7CisJb3B0aW9ucy0+cmVuYW1lX2xpbWl0ID0gLTE7CisJb3B0aW9ucy0+ZGlyc3RhdF9wZXJtaWxsZSA9IGRpZmZfZGlyc3RhdF9wZXJtaWxsZV9kZWZhdWx0OworCW9wdGlvbnMtPmNvbnRleHQgPSAzOworCURJRkZfT1BUX1NFVChvcHRpb25zLCBSRU5BTUVfRU1QVFkpOworCisJb3B0aW9ucy0+Y2hhbmdlID0gZGlmZl9jaGFuZ2U7CisJb3B0aW9ucy0+YWRkX3JlbW92ZSA9IGRpZmZfYWRkcmVtb3ZlOworCW9wdGlvbnMtPnVzZV9jb2xvciA9IGRpZmZfdXNlX2NvbG9yX2RlZmF1bHQ7CisJb3B0aW9ucy0+ZGV0ZWN0X3JlbmFtZSA9IGRpZmZfZGV0ZWN0X3JlbmFtZV9kZWZhdWx0OworCisJaWYgKGRpZmZfbm9fcHJlZml4KSB7CisJCW9wdGlvbnMtPmFfcHJlZml4ID0gb3B0aW9ucy0+Yl9wcmVmaXggPSAiIjsKKwl9IGVsc2UgaWYgKCFkaWZmX21uZW1vbmljX3ByZWZpeCkgeworCQlvcHRpb25zLT5hX3ByZWZpeCA9ICJhLyI7CisJCW9wdGlvbnMtPmJfcHJlZml4ID0gImIvIjsKKwl9Cit9CisKK3ZvaWQgZGlmZl9zZXR1cF9kb25lKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGNvdW50ID0gMDsKKworCWlmIChvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTkFNRSkKKwkJY291bnQrKzsKKwlpZiAob3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05BTUVfU1RBVFVTKQorCQljb3VudCsrOworCWlmIChvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfQ0hFQ0tESUZGKQorCQljb3VudCsrOworCWlmIChvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTk9fT1VUUFVUKQorCQljb3VudCsrOworCWlmIChjb3VudCA+IDEpCisJCWRpZSgiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKTsKKworCS8qCisJICogTW9zdCBvZiB0aGUgdGltZSB3ZSBjYW4gc2F5ICJ0aGVyZSBhcmUgY2hhbmdlcyIKKwkgKiBvbmx5IGJ5IGNoZWNraW5nIGlmIHRoZXJlIGFyZSBjaGFuZ2VkIHBhdGhzLCBidXQKKwkgKiAtLWlnbm9yZS13aGl0ZXNwYWNlKiBvcHRpb25zIGZvcmNlIHVzIHRvIGxvb2sKKwkgKiBpbnNpZGUgY29udGVudHMuCisJICovCisKKwlpZiAoRElGRl9YRExfVFNUKG9wdGlvbnMsIElHTk9SRV9XSElURVNQQUNFKSB8fAorCSAgICBESUZGX1hETF9UU1Qob3B0aW9ucywgSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFKSB8fAorCSAgICBESUZGX1hETF9UU1Qob3B0aW9ucywgSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIERJRkZfRlJPTV9DT05URU5UUyk7CisJZWxzZQorCQlESUZGX09QVF9DTFIob3B0aW9ucywgRElGRl9GUk9NX0NPTlRFTlRTKTsKKworCWlmIChESUZGX09QVF9UU1Qob3B0aW9ucywgRklORF9DT1BJRVNfSEFSREVSKSkKKwkJb3B0aW9ucy0+ZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX0NPUFk7CisKKwlpZiAoIURJRkZfT1BUX1RTVChvcHRpb25zLCBSRUxBVElWRV9OQU1FKSkKKwkJb3B0aW9ucy0+cHJlZml4ID0gTlVMTDsKKwlpZiAob3B0aW9ucy0+cHJlZml4KQorCQlvcHRpb25zLT5wcmVmaXhfbGVuZ3RoID0gc3RybGVuKG9wdGlvbnMtPnByZWZpeCk7CisJZWxzZQorCQlvcHRpb25zLT5wcmVmaXhfbGVuZ3RoID0gMDsKKworCWlmIChvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICYgKERJRkZfRk9STUFUX05BTUUgfAorCQkJCSAgICAgIERJRkZfRk9STUFUX05BTUVfU1RBVFVTIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9DSEVDS0RJRkYgfAorCQkJCSAgICAgIERJRkZfRk9STUFUX05PX09VVFBVVCkpCisJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgJj0gfihESUZGX0ZPUk1BVF9SQVcgfAorCQkJCQkgICAgRElGRl9GT1JNQVRfTlVNU1RBVCB8CisJCQkJCSAgICBESUZGX0ZPUk1BVF9ESUZGU1RBVCB8CisJCQkJCSAgICBESUZGX0ZPUk1BVF9TSE9SVFNUQVQgfAorCQkJCQkgICAgRElGRl9GT1JNQVRfRElSU1RBVCB8CisJCQkJCSAgICBESUZGX0ZPUk1BVF9TVU1NQVJZIHwKKwkJCQkJICAgIERJRkZfRk9STUFUX1BBVENIKTsKKworCS8qCisJICogVGhlc2UgY2FzZXMgYWx3YXlzIG5lZWQgcmVjdXJzaXZlOyB3ZSBkbyBub3QgZHJvcCBjYWxsZXItc3VwcGxpZWQKKwkgKiByZWN1cnNpdmUgYml0cyBmb3Igb3RoZXIgZm9ybWF0cyBoZXJlLgorCSAqLworCWlmIChvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICYgKERJRkZfRk9STUFUX1BBVENIIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9OVU1TVEFUIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9ESUZGU1RBVCB8CisJCQkJICAgICAgRElGRl9GT1JNQVRfU0hPUlRTVEFUIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9ESVJTVEFUIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9TVU1NQVJZIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9DSEVDS0RJRkYpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgUkVDVVJTSVZFKTsKKwkvKgorCSAqIEFsc28gcGlja2F4ZSB3b3VsZCBub3Qgd29yayB2ZXJ5IHdlbGwgaWYgeW91IGRvIG5vdCBzYXkgcmVjdXJzaXZlCisJICovCisJaWYgKG9wdGlvbnMtPnBpY2theGUpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBSRUNVUlNJVkUpOworCS8qCisJICogV2hlbiBwYXRjaGVzIGFyZSBnZW5lcmF0ZWQsIHN1Ym1vZHVsZXMgZGlmZmVkIGFnYWluc3QgdGhlIHdvcmsgdHJlZQorCSAqIG11c3QgYmUgY2hlY2tlZCBmb3IgZGlydGluZXNzIHRvbyBzbyBpdCBjYW4gYmUgc2hvd24gaW4gdGhlIG91dHB1dAorCSAqLworCWlmIChvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUEFUQ0gpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBESVJUWV9TVUJNT0RVTEVTKTsKKworCWlmIChvcHRpb25zLT5kZXRlY3RfcmVuYW1lICYmIG9wdGlvbnMtPnJlbmFtZV9saW1pdCA8IDApCisJCW9wdGlvbnMtPnJlbmFtZV9saW1pdCA9IGRpZmZfcmVuYW1lX2xpbWl0X2RlZmF1bHQ7CisJaWYgKG9wdGlvbnMtPnNldHVwICYgRElGRl9TRVRVUF9VU0VfQ0FDSEUpIHsKKwkJaWYgKCFhY3RpdmVfY2FjaGUpCisJCQkvKiByZWFkLWNhY2hlIGRvZXMgbm90IGRpZSBldmVuIHdoZW4gaXQgZmFpbHMKKwkJCSAqIHNvIGl0IGlzIHNhZmUgZm9yIHVzIHRvIGRvIHRoaXMgaGVyZS4gIEFsc28KKwkJCSAqIGl0IGRvZXMgbm90IHNtdWRnZSBhY3RpdmVfY2FjaGUgb3IgYWN0aXZlX25yCisJCQkgKiB3aGVuIGl0IGZhaWxzLCBzbyB3ZSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dAorCQkJICogY2xlYW5pbmcgaXQgdXAgb3Vyc2VsdmVzIGVpdGhlci4KKwkJCSAqLworCQkJcmVhZF9jYWNoZSgpOworCX0KKwlpZiAob3B0aW9ucy0+YWJicmV2IDw9IDAgfHwgNDAgPCBvcHRpb25zLT5hYmJyZXYpCisJCW9wdGlvbnMtPmFiYnJldiA9IDQwOyAvKiBmdWxsICovCisKKwkvKgorCSAqIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gc2hvdyB0aGUgZmlyc3QgaGl0IHdlIGhhcHBlbmVkCisJICogdG8gaGF2ZSBmb3VuZC4gIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2Ugbm90IHRvIHJldHVybiB3aXRoCisJICogZXhpdCBjb2RlIGluIHN1Y2ggYSBjYXNlIGVpdGhlci4KKwkgKi8KKwlpZiAoRElGRl9PUFRfVFNUKG9wdGlvbnMsIFFVSUNLKSkgeworCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCQlESUZGX09QVF9TRVQob3B0aW9ucywgRVhJVF9XSVRIX1NUQVRVUyk7CisJfQorfQorCitzdGF0aWMgaW50IG9wdF9hcmcoY29uc3QgY2hhciAqYXJnLCBpbnQgYXJnX3Nob3J0LCBjb25zdCBjaGFyICphcmdfbG9uZywgaW50ICp2YWwpCit7CisJY2hhciBjLCAqZXE7CisJaW50IGxlbjsKKworCWlmICgqYXJnICE9ICctJykKKwkJcmV0dXJuIDA7CisJYyA9ICorK2FyZzsKKwlpZiAoIWMpCisJCXJldHVybiAwOworCWlmIChjID09IGFyZ19zaG9ydCkgeworCQljID0gKisrYXJnOworCQlpZiAoIWMpCisJCQlyZXR1cm4gMTsKKwkJaWYgKHZhbCAmJiBpc2RpZ2l0KGMpKSB7CisJCQljaGFyICplbmQ7CisJCQlpbnQgbiA9IHN0cnRvdWwoYXJnLCAmZW5kLCAxMCk7CisJCQlpZiAoKmVuZCkKKwkJCQlyZXR1cm4gMDsKKwkJCSp2YWwgPSBuOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmIChjICE9ICctJykKKwkJcmV0dXJuIDA7CisJYXJnKys7CisJZXEgPSBzdHJjaHIoYXJnLCAnPScpOworCWlmIChlcSkKKwkJbGVuID0gZXEgLSBhcmc7CisJZWxzZQorCQlsZW4gPSBzdHJsZW4oYXJnKTsKKwlpZiAoIWxlbiB8fCBzdHJuY21wKGFyZywgYXJnX2xvbmcsIGxlbikpCisJCXJldHVybiAwOworCWlmIChlcSkgeworCQlpbnQgbjsKKwkJY2hhciAqZW5kOworCQlpZiAoIWlzZGlnaXQoKisrZXEpKQorCQkJcmV0dXJuIDA7CisJCW4gPSBzdHJ0b3VsKGVxLCAmZW5kLCAxMCk7CisJCWlmICgqZW5kKQorCQkJcmV0dXJuIDA7CisJCSp2YWwgPSBuOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkaWZmX3Njb3Jlb3B0X3BhcnNlKGNvbnN0IGNoYXIgKm9wdCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHNob3J0X29wdChjaGFyIG9wdCwgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkgICAgY29uc3QgY2hhciAqKm9wdGFyZykKK3sKKwljb25zdCBjaGFyICphcmcgPSBhcmd2WzBdOworCWlmIChhcmdbMF0gIT0gJy0nIHx8IGFyZ1sxXSAhPSBvcHQpCisJCXJldHVybiAwOworCWlmIChhcmdbMl0gIT0gJ1wwJykgeworCQkqb3B0YXJnID0gYXJnICsgMjsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghYXJndlsxXSkKKwkJZGllKCJPcHRpb24gJyVjJyByZXF1aXJlcyBhIHZhbHVlIiwgb3B0KTsKKwkqb3B0YXJnID0gYXJndlsxXTsKKwlyZXR1cm4gMjsKK30KKworaW50IHBhcnNlX2xvbmdfb3B0KGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqKmFyZ3YsCisJCSAgIGNvbnN0IGNoYXIgKipvcHRhcmcpCit7CisJY29uc3QgY2hhciAqYXJnID0gYXJndlswXTsKKwlpZiAoYXJnWzBdICE9ICctJyB8fCBhcmdbMV0gIT0gJy0nKQorCQlyZXR1cm4gMDsKKwlhcmcgKz0gc3RybGVuKCItLSIpOworCWlmIChwcmVmaXhjbXAoYXJnLCBvcHQpKQorCQlyZXR1cm4gMDsKKwlhcmcgKz0gc3RybGVuKG9wdCk7CisJaWYgKCphcmcgPT0gJz0nKSB7IC8qIHN0aWNrZWQgZm9ybTogLS1vcHRpb249dmFsdWUgKi8KKwkJKm9wdGFyZyA9IGFyZyArIDE7CisJCXJldHVybiAxOworCX0KKwlpZiAoKmFyZyAhPSAnXDAnKQorCQlyZXR1cm4gMDsKKwkvKiBzZXBhcmF0ZSBmb3JtOiAtLW9wdGlvbiB2YWx1ZSAqLworCWlmICghYXJndlsxXSkKKwkJZGllKCJPcHRpb24gJy0tJXMnIHJlcXVpcmVzIGEgdmFsdWUiLCBvcHQpOworCSpvcHRhcmcgPSBhcmd2WzFdOworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHN0YXRfb3B0KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKiphdikKK3sKKwljb25zdCBjaGFyICphcmcgPSBhdlswXTsKKwljaGFyICplbmQ7CisJaW50IHdpZHRoID0gb3B0aW9ucy0+c3RhdF93aWR0aDsKKwlpbnQgbmFtZV93aWR0aCA9IG9wdGlvbnMtPnN0YXRfbmFtZV93aWR0aDsKKwlpbnQgZ3JhcGhfd2lkdGggPSBvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoOworCWludCBjb3VudCA9IG9wdGlvbnMtPnN0YXRfY291bnQ7CisJaW50IGFyZ2NvdW50ID0gMTsKKworCWFyZyArPSBzdHJsZW4oIi0tc3RhdCIpOworCWVuZCA9IChjaGFyICopYXJnOworCisJc3dpdGNoICgqYXJnKSB7CisJY2FzZSAnLSc6CisJCWlmICghcHJlZml4Y21wKGFyZywgIi13aWR0aCIpKSB7CisJCQlhcmcgKz0gc3RybGVuKCItd2lkdGgiKTsKKwkJCWlmICgqYXJnID09ICc9JykKKwkJCQl3aWR0aCA9IHN0cnRvdWwoYXJnICsgMSwgJmVuZCwgMTApOworCQkJZWxzZSBpZiAoISphcmcgJiYgIWF2WzFdKQorCQkJCWRpZSgiT3B0aW9uICctLXN0YXQtd2lkdGgnIHJlcXVpcmVzIGEgdmFsdWUiKTsKKwkJCWVsc2UgaWYgKCEqYXJnKSB7CisJCQkJd2lkdGggPSBzdHJ0b3VsKGF2WzFdLCAmZW5kLCAxMCk7CisJCQkJYXJnY291bnQgPSAyOworCQkJfQorCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLW5hbWUtd2lkdGgiKSkgeworCQkJYXJnICs9IHN0cmxlbigiLW5hbWUtd2lkdGgiKTsKKwkJCWlmICgqYXJnID09ICc9JykKKwkJCQluYW1lX3dpZHRoID0gc3RydG91bChhcmcgKyAxLCAmZW5kLCAxMCk7CisJCQllbHNlIGlmICghKmFyZyAmJiAhYXZbMV0pCisJCQkJZGllKCJPcHRpb24gJy0tc3RhdC1uYW1lLXdpZHRoJyByZXF1aXJlcyBhIHZhbHVlIik7CisJCQllbHNlIGlmICghKmFyZykgeworCQkJCW5hbWVfd2lkdGggPSBzdHJ0b3VsKGF2WzFdLCAmZW5kLCAxMCk7CisJCQkJYXJnY291bnQgPSAyOworCQkJfQorCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLWdyYXBoLXdpZHRoIikpIHsKKwkJCWFyZyArPSBzdHJsZW4oIi1ncmFwaC13aWR0aCIpOworCQkJaWYgKCphcmcgPT0gJz0nKQorCQkJCWdyYXBoX3dpZHRoID0gc3RydG91bChhcmcgKyAxLCAmZW5kLCAxMCk7CisJCQllbHNlIGlmICghKmFyZyAmJiAhYXZbMV0pCisJCQkJZGllKCJPcHRpb24gJy0tc3RhdC1ncmFwaC13aWR0aCcgcmVxdWlyZXMgYSB2YWx1ZSIpOworCQkJZWxzZSBpZiAoISphcmcpIHsKKwkJCQlncmFwaF93aWR0aCA9IHN0cnRvdWwoYXZbMV0sICZlbmQsIDEwKTsKKwkJCQlhcmdjb3VudCA9IDI7CisJCQl9CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItY291bnQiKSkgeworCQkJYXJnICs9IHN0cmxlbigiLWNvdW50Iik7CisJCQlpZiAoKmFyZyA9PSAnPScpCisJCQkJY291bnQgPSBzdHJ0b3VsKGFyZyArIDEsICZlbmQsIDEwKTsKKwkJCWVsc2UgaWYgKCEqYXJnICYmICFhdlsxXSkKKwkJCQlkaWUoIk9wdGlvbiAnLS1zdGF0LWNvdW50JyByZXF1aXJlcyBhIHZhbHVlIik7CisJCQllbHNlIGlmICghKmFyZykgeworCQkJCWNvdW50ID0gc3RydG91bChhdlsxXSwgJmVuZCwgMTApOworCQkJCWFyZ2NvdW50ID0gMjsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlICc9JzoKKwkJd2lkdGggPSBzdHJ0b3VsKGFyZysxLCAmZW5kLCAxMCk7CisJCWlmICgqZW5kID09ICcsJykKKwkJCW5hbWVfd2lkdGggPSBzdHJ0b3VsKGVuZCsxLCAmZW5kLCAxMCk7CisJCWlmICgqZW5kID09ICcsJykKKwkJCWNvdW50ID0gc3RydG91bChlbmQrMSwgJmVuZCwgMTApOworCX0KKworCS8qIEltcG9ydGFudCEgVGhpcyBjaGVja3MgYWxsIHRoZSBlcnJvciBjYXNlcyEgKi8KKwlpZiAoKmVuZCkKKwkJcmV0dXJuIDA7CisJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9ESUZGU1RBVDsKKwlvcHRpb25zLT5zdGF0X25hbWVfd2lkdGggPSBuYW1lX3dpZHRoOworCW9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGggPSBncmFwaF93aWR0aDsKKwlvcHRpb25zLT5zdGF0X3dpZHRoID0gd2lkdGg7CisJb3B0aW9ucy0+c3RhdF9jb3VudCA9IGNvdW50OworCXJldHVybiBhcmdjb3VudDsKK30KKworc3RhdGljIGludCBwYXJzZV9kaXJzdGF0X29wdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICpwYXJhbXMpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnJtc2cgPSBTVFJCVUZfSU5JVDsKKwlpZiAocGFyc2VfZGlyc3RhdF9wYXJhbXMob3B0aW9ucywgcGFyYW1zLCAmZXJybXNnKSkKKwkJZGllKF8oIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiVzIiksCisJCSAgICBlcnJtc2cuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJybXNnKTsKKwkvKgorCSAqIFRoZSBjYWxsZXIga25vd3MgYSBkaXJzdGF0LXJlbGF0ZWQgb3B0aW9uIGlzIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQKKwkgKiBsaW5lOyBhbGxvdyBpdCB0byBzYXkgInJldHVybiB0aGlzX2Z1bmN0aW9uKCk7IgorCSAqLworCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfRElSU1RBVDsKKwlyZXR1cm4gMTsKK30KKworaW50IGRpZmZfb3B0X3BhcnNlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKiphdiwgaW50IGFjKQoreworCWNvbnN0IGNoYXIgKmFyZyA9IGF2WzBdOworCWNvbnN0IGNoYXIgKm9wdGFyZzsKKwlpbnQgYXJnY291bnQ7CisKKwkvKiBPdXRwdXQgZm9ybWF0IG9wdGlvbnMgKi8KKwlpZiAoIXN0cmNtcChhcmcsICItcCIpIHx8ICFzdHJjbXAoYXJnLCAiLXUiKSB8fCAhc3RyY21wKGFyZywgIi0tcGF0Y2giKSkKKwkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9QQVRDSDsKKwllbHNlIGlmIChvcHRfYXJnKGFyZywgJ1UnLCAidW5pZmllZCIsICZvcHRpb25zLT5jb250ZXh0KSkKKwkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9QQVRDSDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmF3IikpCisJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfUkFXOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1wYXRjaC13aXRoLXJhdyIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIIHwgRElGRl9GT1JNQVRfUkFXOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1udW1zdGF0IikpCisJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfTlVNU1RBVDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvcnRzdGF0IikpCisJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfU0hPUlRTVEFUOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLVgiKSB8fCAhc3RyY21wKGFyZywgIi0tZGlyc3RhdCIpKQorCQlyZXR1cm4gcGFyc2VfZGlyc3RhdF9vcHQob3B0aW9ucywgIiIpOworCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLVgiKSkKKwkJcmV0dXJuIHBhcnNlX2RpcnN0YXRfb3B0KG9wdGlvbnMsIGFyZyArIDIpOworCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1kaXJzdGF0PSIpKQorCQlyZXR1cm4gcGFyc2VfZGlyc3RhdF9vcHQob3B0aW9ucywgYXJnICsgMTApOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jdW11bGF0aXZlIikpCisJCXJldHVybiBwYXJzZV9kaXJzdGF0X29wdChvcHRpb25zLCAiY3VtdWxhdGl2ZSIpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1kaXJzdGF0LWJ5LWZpbGUiKSkKKwkJcmV0dXJuIHBhcnNlX2RpcnN0YXRfb3B0KG9wdGlvbnMsICJmaWxlcyIpOworCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1kaXJzdGF0LWJ5LWZpbGU9IikpIHsKKwkJcGFyc2VfZGlyc3RhdF9vcHQob3B0aW9ucywgImZpbGVzIik7CisJCXJldHVybiBwYXJzZV9kaXJzdGF0X29wdChvcHRpb25zLCBhcmcgKyAxOCk7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jaGVjayIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX0NIRUNLRElGRjsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tc3VtbWFyeSIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1NVTU1BUlk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBhdGNoLXdpdGgtc3RhdCIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIIHwgRElGRl9GT1JNQVRfRElGRlNUQVQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5hbWUtb25seSIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX05BTUU7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5hbWUtc3RhdHVzIikpCisJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfTkFNRV9TVEFUVVM7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItcyIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tc3RhdCIpKQorCQkvKiAtLXN0YXQsIC0tc3RhdC13aWR0aCwgLS1zdGF0LW5hbWUtd2lkdGgsIG9yIC0tc3RhdC1jb3VudCAqLworCQlyZXR1cm4gc3RhdF9vcHQob3B0aW9ucywgYXYpOworCisJLyogcmVuYW1lcyBvcHRpb25zICovCisJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItQiIpIHx8ICFwcmVmaXhjbXAoYXJnLCAiLS1icmVhay1yZXdyaXRlcz0iKSB8fAorCQkgIXN0cmNtcChhcmcsICItLWJyZWFrLXJld3JpdGVzIikpIHsKKwkJaWYgKChvcHRpb25zLT5icmVha19vcHQgPSBkaWZmX3Njb3Jlb3B0X3BhcnNlKGFyZykpID09IC0xKQorCQkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGFyZ3VtZW50IHRvIC1COiAlcyIsIGFyZysyKTsKKwl9CisJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItTSIpIHx8ICFwcmVmaXhjbXAoYXJnLCAiLS1maW5kLXJlbmFtZXM9IikgfHwKKwkJICFzdHJjbXAoYXJnLCAiLS1maW5kLXJlbmFtZXMiKSkgeworCQlpZiAoKG9wdGlvbnMtPnJlbmFtZV9zY29yZSA9IGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJnKSkgPT0gLTEpCisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgYXJndW1lbnQgdG8gLU06ICVzIiwgYXJnKzIpOworCQlvcHRpb25zLT5kZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfUkVOQU1FOworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi1EIikgfHwgIXN0cmNtcChhcmcsICItLWlycmV2ZXJzaWJsZS1kZWxldGUiKSkgeworCQlvcHRpb25zLT5pcnJldmVyc2libGVfZGVsZXRlID0gMTsKKwl9CisJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItQyIpIHx8ICFwcmVmaXhjbXAoYXJnLCAiLS1maW5kLWNvcGllcz0iKSB8fAorCQkgIXN0cmNtcChhcmcsICItLWZpbmQtY29waWVzIikpIHsKKwkJaWYgKG9wdGlvbnMtPmRldGVjdF9yZW5hbWUgPT0gRElGRl9ERVRFQ1RfQ09QWSkKKwkJCURJRkZfT1BUX1NFVChvcHRpb25zLCBGSU5EX0NPUElFU19IQVJERVIpOworCQlpZiAoKG9wdGlvbnMtPnJlbmFtZV9zY29yZSA9IGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJnKSkgPT0gLTEpCisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgYXJndW1lbnQgdG8gLUM6ICVzIiwgYXJnKzIpOworCQlvcHRpb25zLT5kZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfQ09QWTsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLXJlbmFtZXMiKSkKKwkJb3B0aW9ucy0+ZGV0ZWN0X3JlbmFtZSA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbmFtZS1lbXB0eSIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgUkVOQU1FX0VNUFRZKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tcmVuYW1lLWVtcHR5IikpCisJCURJRkZfT1BUX0NMUihvcHRpb25zLCBSRU5BTUVfRU1QVFkpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZWxhdGl2ZSIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgUkVMQVRJVkVfTkFNRSk7CisJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLXJlbGF0aXZlPSIpKSB7CisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBSRUxBVElWRV9OQU1FKTsKKwkJb3B0aW9ucy0+cHJlZml4ID0gYXJnICsgMTE7CisJfQorCisJLyogeGRpZmYgb3B0aW9ucyAqLworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1taW5pbWFsIikpCisJCURJRkZfWERMX1NFVChvcHRpb25zLCBORUVEX01JTklNQUwpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1taW5pbWFsIikpCisJCURJRkZfWERMX0NMUihvcHRpb25zLCBORUVEX01JTklNQUwpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXciKSB8fCAhc3RyY21wKGFyZywgIi0taWdub3JlLWFsbC1zcGFjZSIpKQorCQlESUZGX1hETF9TRVQob3B0aW9ucywgSUdOT1JFX1dISVRFU1BBQ0UpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWIiKSB8fCAhc3RyY21wKGFyZywgIi0taWdub3JlLXNwYWNlLWNoYW5nZSIpKQorCQlESUZGX1hETF9TRVQob3B0aW9ucywgSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0taWdub3JlLXNwYWNlLWF0LWVvbCIpKQorCQlESUZGX1hETF9TRVQob3B0aW9ucywgSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcGF0aWVuY2UiKSkKKwkJb3B0aW9ucy0+eGRsX29wdHMgPSBESUZGX1dJVEhfQUxHKG9wdGlvbnMsIFBBVElFTkNFX0RJRkYpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1oaXN0b2dyYW0iKSkKKwkJb3B0aW9ucy0+eGRsX29wdHMgPSBESUZGX1dJVEhfQUxHKG9wdGlvbnMsIEhJU1RPR1JBTV9ESUZGKTsKKworCS8qIGZsYWdzIG9wdGlvbnMgKi8KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tYmluYXJ5IikpIHsKKwkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9QQVRDSDsKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEJJTkFSWSk7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1mdWxsLWluZGV4IikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBGVUxMX0lOREVYKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi1hIikgfHwgIXN0cmNtcChhcmcsICItLXRleHQiKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIFRFWFQpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLVIiKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIFJFVkVSU0VfRElGRik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZpbmQtY29waWVzLWhhcmRlciIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgRklORF9DT1BJRVNfSEFSREVSKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tZm9sbG93IikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBGT0xMT1dfUkVOQU1FUyk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNvbG9yIikpCisJCW9wdGlvbnMtPnVzZV9jb2xvciA9IDE7CisJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLWNvbG9yPSIpKSB7CisJCWludCB2YWx1ZSA9IGdpdF9jb25maWdfY29sb3Jib29sKE5VTEwsIGFyZys4KTsKKwkJaWYgKHZhbHVlIDwgMCkKKwkJCXJldHVybiBlcnJvcigib3B0aW9uIGBjb2xvcicgZXhwZWN0cyBcImFsd2F5c1wiLCBcImF1dG9cIiwgb3IgXCJuZXZlclwiIik7CisJCW9wdGlvbnMtPnVzZV9jb2xvciA9IHZhbHVlOworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tY29sb3IiKSkKKwkJb3B0aW9ucy0+dXNlX2NvbG9yID0gMDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tY29sb3Itd29yZHMiKSkgeworCQlvcHRpb25zLT51c2VfY29sb3IgPSAxOworCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX0NPTE9SOworCX0KKwllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tY29sb3Itd29yZHM9IikpIHsKKwkJb3B0aW9ucy0+dXNlX2NvbG9yID0gMTsKKwkJb3B0aW9ucy0+d29yZF9kaWZmID0gRElGRl9XT1JEU19DT0xPUjsKKwkJb3B0aW9ucy0+d29yZF9yZWdleCA9IGFyZyArIDE0OworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0td29yZC1kaWZmIikpIHsKKwkJaWYgKG9wdGlvbnMtPndvcmRfZGlmZiA9PSBESUZGX1dPUkRTX05PTkUpCisJCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX1BMQUlOOworCX0KKwllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0td29yZC1kaWZmPSIpKSB7CisJCWNvbnN0IGNoYXIgKnR5cGUgPSBhcmcgKyAxMjsKKwkJaWYgKCFzdHJjbXAodHlwZSwgInBsYWluIikpCisJCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX1BMQUlOOworCQllbHNlIGlmICghc3RyY21wKHR5cGUsICJjb2xvciIpKSB7CisJCQlvcHRpb25zLT51c2VfY29sb3IgPSAxOworCQkJb3B0aW9ucy0+d29yZF9kaWZmID0gRElGRl9XT1JEU19DT0xPUjsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKHR5cGUsICJwb3JjZWxhaW4iKSkKKwkJCW9wdGlvbnMtPndvcmRfZGlmZiA9IERJRkZfV09SRFNfUE9SQ0VMQUlOOworCQllbHNlIGlmICghc3RyY21wKHR5cGUsICJub25lIikpCisJCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX05PTkU7CisJCWVsc2UKKwkJCWRpZSgiYmFkIC0td29yZC1kaWZmIGFyZ3VtZW50OiAlcyIsIHR5cGUpOworCX0KKwllbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgid29yZC1kaWZmLXJlZ2V4IiwgYXYsICZvcHRhcmcpKSkgeworCQlpZiAob3B0aW9ucy0+d29yZF9kaWZmID09IERJRkZfV09SRFNfTk9ORSkKKwkJCW9wdGlvbnMtPndvcmRfZGlmZiA9IERJRkZfV09SRFNfUExBSU47CisJCW9wdGlvbnMtPndvcmRfcmVnZXggPSBvcHRhcmc7CisJCXJldHVybiBhcmdjb3VudDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWV4aXQtY29kZSIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgRVhJVF9XSVRIX1NUQVRVUyk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXF1aWV0IikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBRVUlDSyk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWV4dC1kaWZmIikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBBTExPV19FWFRFUk5BTCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWV4dC1kaWZmIikpCisJCURJRkZfT1BUX0NMUihvcHRpb25zLCBBTExPV19FWFRFUk5BTCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXRleHRjb252IikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBBTExPV19URVhUQ09OVik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLXRleHRjb252IikpCisJCURJRkZfT1BUX0NMUihvcHRpb25zLCBBTExPV19URVhUQ09OVik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWlnbm9yZS1zdWJtb2R1bGVzIikpIHsKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIE9WRVJSSURFX1NVQk1PRFVMRV9DT05GSUcpOworCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKG9wdGlvbnMsICJhbGwiKTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1pZ25vcmUtc3VibW9kdWxlcz0iKSkgeworCQlESUZGX09QVF9TRVQob3B0aW9ucywgT1ZFUlJJREVfU1VCTU9EVUxFX0NPTkZJRyk7CisJCWhhbmRsZV9pZ25vcmVfc3VibW9kdWxlc19hcmcob3B0aW9ucywgYXJnICsgMjApOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXN1Ym1vZHVsZSIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgU1VCTU9EVUxFX0xPRyk7CisJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLXN1Ym1vZHVsZT0iKSkgeworCQlpZiAoIXN0cmNtcChhcmcgKyAxMiwgImxvZyIpKQorCQkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIFNVQk1PRFVMRV9MT0cpOworCX0KKworCS8qIG1pc2Mgb3B0aW9ucyAqLworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXoiKSkKKwkJb3B0aW9ucy0+bGluZV90ZXJtaW5hdGlvbiA9IDA7CisJZWxzZSBpZiAoKGFyZ2NvdW50ID0gc2hvcnRfb3B0KCdsJywgYXYsICZvcHRhcmcpKSkgeworCQlvcHRpb25zLT5yZW5hbWVfbGltaXQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMTApOworCQlyZXR1cm4gYXJnY291bnQ7CisJfQorCWVsc2UgaWYgKChhcmdjb3VudCA9IHNob3J0X29wdCgnUycsIGF2LCAmb3B0YXJnKSkpIHsKKwkJb3B0aW9ucy0+cGlja2F4ZSA9IG9wdGFyZzsKKwkJb3B0aW9ucy0+cGlja2F4ZV9vcHRzIHw9IERJRkZfUElDS0FYRV9LSU5EX1M7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHNob3J0X29wdCgnRycsIGF2LCAmb3B0YXJnKSkpIHsKKwkJb3B0aW9ucy0+cGlja2F4ZSA9IG9wdGFyZzsKKwkJb3B0aW9ucy0+cGlja2F4ZV9vcHRzIHw9IERJRkZfUElDS0FYRV9LSU5EX0c7CisJCXJldHVybiBhcmdjb3VudDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBpY2theGUtYWxsIikpCisJCW9wdGlvbnMtPnBpY2theGVfb3B0cyB8PSBESUZGX1BJQ0tBWEVfQUxMOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1waWNrYXhlLXJlZ2V4IikpCisJCW9wdGlvbnMtPnBpY2theGVfb3B0cyB8PSBESUZGX1BJQ0tBWEVfUkVHRVg7CisJZWxzZSBpZiAoKGFyZ2NvdW50ID0gc2hvcnRfb3B0KCdPJywgYXYsICZvcHRhcmcpKSkgeworCQlvcHRpb25zLT5vcmRlcmZpbGUgPSBvcHRhcmc7CisJCXJldHVybiBhcmdjb3VudDsKKwl9CisJZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoImRpZmYtZmlsdGVyIiwgYXYsICZvcHRhcmcpKSkgeworCQlvcHRpb25zLT5maWx0ZXIgPSBvcHRhcmc7CisJCXJldHVybiBhcmdjb3VudDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFiYnJldiIpKQorCQlvcHRpb25zLT5hYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKKwllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tYWJicmV2PSIpKSB7CisJCW9wdGlvbnMtPmFiYnJldiA9IHN0cnRvdWwoYXJnICsgOSwgTlVMTCwgMTApOworCQlpZiAob3B0aW9ucy0+YWJicmV2IDwgTUlOSU1VTV9BQkJSRVYpCisJCQlvcHRpb25zLT5hYmJyZXYgPSBNSU5JTVVNX0FCQlJFVjsKKwkJZWxzZSBpZiAoNDAgPCBvcHRpb25zLT5hYmJyZXYpCisJCQlvcHRpb25zLT5hYmJyZXYgPSA0MDsKKwl9CisJZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoInNyYy1wcmVmaXgiLCBhdiwgJm9wdGFyZykpKSB7CisJCW9wdGlvbnMtPmFfcHJlZml4ID0gb3B0YXJnOworCQlyZXR1cm4gYXJnY291bnQ7CisJfQorCWVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJkc3QtcHJlZml4IiwgYXYsICZvcHRhcmcpKSkgeworCQlvcHRpb25zLT5iX3ByZWZpeCA9IG9wdGFyZzsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tcHJlZml4IikpCisJCW9wdGlvbnMtPmFfcHJlZml4ID0gb3B0aW9ucy0+Yl9wcmVmaXggPSAiIjsKKwllbHNlIGlmIChvcHRfYXJnKGFyZywgJ1wwJywgImludGVyLWh1bmstY29udGV4dCIsCisJCQkgJm9wdGlvbnMtPmludGVyaHVua2NvbnRleHQpKQorCQk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItVyIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgRlVOQ0NPTlRFWFQpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1mdW5jdGlvbi1jb250ZXh0IikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBGVU5DQ09OVEVYVCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWZ1bmN0aW9uLWNvbnRleHQiKSkKKwkJRElGRl9PUFRfQ0xSKG9wdGlvbnMsIEZVTkNDT05URVhUKTsKKwllbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgib3V0cHV0IiwgYXYsICZvcHRhcmcpKSkgeworCQlvcHRpb25zLT5maWxlID0gZm9wZW4ob3B0YXJnLCAidyIpOworCQlpZiAoIW9wdGlvbnMtPmZpbGUpCisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuICclcyciLCBvcHRhcmcpOworCQlvcHRpb25zLT5jbG9zZV9maWxlID0gMTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworaW50IHBhcnNlX3JlbmFtZV9zY29yZShjb25zdCBjaGFyICoqY3BfcCkKK3sKKwl1bnNpZ25lZCBsb25nIG51bSwgc2NhbGU7CisJaW50IGNoLCBkb3Q7CisJY29uc3QgY2hhciAqY3AgPSAqY3BfcDsKKworCW51bSA9IDA7CisJc2NhbGUgPSAxOworCWRvdCA9IDA7CisJZm9yICg7OykgeworCQljaCA9ICpjcDsKKwkJaWYgKCAhZG90ICYmIGNoID09ICcuJyApIHsKKwkJCXNjYWxlID0gMTsKKwkJCWRvdCA9IDE7CisJCX0gZWxzZSBpZiAoIGNoID09ICclJyApIHsKKwkJCXNjYWxlID0gZG90ID8gc2NhbGUqMTAwIDogMTAwOworCQkJY3ArKzsJLyogJSBpcyBhbHdheXMgYXQgdGhlIGVuZCAqLworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoIGNoID49ICcwJyAmJiBjaCA8PSAnOScgKSB7CisJCQlpZiAoIHNjYWxlIDwgMTAwMDAwICkgeworCQkJCXNjYWxlICo9IDEwOworCQkJCW51bSA9IChudW0qMTApICsgKGNoLScwJyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCQljcCsrOworCX0KKwkqY3BfcCA9IGNwOworCisJLyogdXNlciBzYXlzIG51bSBkaXZpZGVkIGJ5IHNjYWxlIGFuZCB3ZSBzYXkgaW50ZXJuYWxseSB0aGF0CisJICogaXMgTUFYX1NDT1JFICogbnVtIC8gc2NhbGUuCisJICovCisJcmV0dXJuIChpbnQpKChudW0gPj0gc2NhbGUpID8gTUFYX1NDT1JFIDogKE1BWF9TQ09SRSAqIG51bSAvIHNjYWxlKSk7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9zY29yZW9wdF9wYXJzZShjb25zdCBjaGFyICpvcHQpCit7CisJaW50IG9wdDEsIG9wdDIsIGNtZDsKKworCWlmICgqb3B0KysgIT0gJy0nKQorCQlyZXR1cm4gLTE7CisJY21kID0gKm9wdCsrOworCWlmIChjbWQgPT0gJy0nKSB7CisJCS8qIGNvbnZlcnQgdGhlIGxvbmctZm9ybSBhcmd1bWVudHMgaW50byBzaG9ydC1mb3JtIHZlcnNpb25zICovCisJCWlmICghcHJlZml4Y21wKG9wdCwgImJyZWFrLXJld3JpdGVzIikpIHsKKwkJCW9wdCArPSBzdHJsZW4oImJyZWFrLXJld3JpdGVzIik7CisJCQlpZiAoKm9wdCA9PSAwIHx8ICpvcHQrKyA9PSAnPScpCisJCQkJY21kID0gJ0InOworCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAob3B0LCAiZmluZC1jb3BpZXMiKSkgeworCQkJb3B0ICs9IHN0cmxlbigiZmluZC1jb3BpZXMiKTsKKwkJCWlmICgqb3B0ID09IDAgfHwgKm9wdCsrID09ICc9JykKKwkJCQljbWQgPSAnQyc7CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChvcHQsICJmaW5kLXJlbmFtZXMiKSkgeworCQkJb3B0ICs9IHN0cmxlbigiZmluZC1yZW5hbWVzIik7CisJCQlpZiAoKm9wdCA9PSAwIHx8ICpvcHQrKyA9PSAnPScpCisJCQkJY21kID0gJ00nOworCQl9CisJfQorCWlmIChjbWQgIT0gJ00nICYmIGNtZCAhPSAnQycgJiYgY21kICE9ICdCJykKKwkJcmV0dXJuIC0xOyAvKiB0aGF0IGlzIG5vdCBhIC1NLCAtQyBub3IgLUIgb3B0aW9uICovCisKKwlvcHQxID0gcGFyc2VfcmVuYW1lX3Njb3JlKCZvcHQpOworCWlmIChjbWQgIT0gJ0InKQorCQlvcHQyID0gMDsKKwllbHNlIHsKKwkJaWYgKCpvcHQgPT0gMCkKKwkJCW9wdDIgPSAwOworCQllbHNlIGlmICgqb3B0ICE9ICcvJykKKwkJCXJldHVybiAtMTsgLyogd2UgZXhwZWN0IC1CODAvOTkgb3IgLUI4MCAqLworCQllbHNlIHsKKwkJCW9wdCsrOworCQkJb3B0MiA9IHBhcnNlX3JlbmFtZV9zY29yZSgmb3B0KTsKKwkJfQorCX0KKwlpZiAoKm9wdCAhPSAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIG9wdDEgfCAob3B0MiA8PCAxNik7Cit9CisKK3N0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBkaWZmX3F1ZXVlZF9kaWZmOworCit2b2lkIGRpZmZfcShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnF1ZXVlLCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZHApCit7CisJaWYgKHF1ZXVlLT5hbGxvYyA8PSBxdWV1ZS0+bnIpIHsKKwkJcXVldWUtPmFsbG9jID0gYWxsb2NfbnIocXVldWUtPmFsbG9jKTsKKwkJcXVldWUtPnF1ZXVlID0geHJlYWxsb2MocXVldWUtPnF1ZXVlLAorCQkJCQlzaXplb2YoZHApICogcXVldWUtPmFsbG9jKTsKKwl9CisJcXVldWUtPnF1ZXVlW3F1ZXVlLT5ucisrXSA9IGRwOworfQorCitzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZGlmZl9xdWV1ZShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnF1ZXVlLAorCQkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvKQoreworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpkcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkcCkpOworCWRwLT5vbmUgPSBvbmU7CisJZHAtPnR3byA9IHR3bzsKKwlpZiAocXVldWUpCisJCWRpZmZfcShxdWV1ZSwgZHApOworCXJldHVybiBkcDsKK30KKwordm9pZCBkaWZmX2ZyZWVfZmlsZXBhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCit7CisJZnJlZV9maWxlc3BlYyhwLT5vbmUpOworCWZyZWVfZmlsZXNwZWMocC0+dHdvKTsKKwlmcmVlKHApOworfQorCisvKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGZpbmRfdW5pcXVlX2FiYnJldigpIGluIHRoYXQKKyAqIGl0IHN0dWZmcyB0aGUgcmVzdWx0IHdpdGggZG90cyBmb3IgYWxpZ25tZW50LgorICovCitjb25zdCBjaGFyICpkaWZmX3VuaXF1ZV9hYmJyZXYoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGxlbikKK3sKKwlpbnQgYWJibGVuOworCWNvbnN0IGNoYXIgKmFiYnJldjsKKwlpZiAobGVuID09IDQwKQorCQlyZXR1cm4gc2hhMV90b19oZXgoc2hhMSk7CisKKwlhYmJyZXYgPSBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgbGVuKTsKKwlhYmJsZW4gPSBzdHJsZW4oYWJicmV2KTsKKwlpZiAoYWJibGVuIDwgMzcpIHsKKwkJc3RhdGljIGNoYXIgaGV4WzQxXTsKKwkJaWYgKGxlbiA8IGFiYmxlbiAmJiBhYmJsZW4gPD0gbGVuICsgMikKKwkJCXNwcmludGYoaGV4LCAiJXMlLipzIiwgYWJicmV2LCBsZW4rMy1hYmJsZW4sICIuLiIpOworCQllbHNlCisJCQlzcHJpbnRmKGhleCwgIiVzLi4uIiwgYWJicmV2KTsKKwkJcmV0dXJuIGhleDsKKwl9CisJcmV0dXJuIHNoYTFfdG9faGV4KHNoYTEpOworfQorCitzdGF0aWMgdm9pZCBkaWZmX2ZsdXNoX3JhdyhzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCWludCBsaW5lX3Rlcm1pbmF0aW9uID0gb3B0LT5saW5lX3Rlcm1pbmF0aW9uOworCWludCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uID0gbGluZV90ZXJtaW5hdGlvbiA/ICdcdCcgOiAnXDAnOworCWlmIChvcHQtPm91dHB1dF9wcmVmaXgpIHsKKwkJc3RydWN0IHN0cmJ1ZiAqbXNnID0gTlVMTDsKKwkJbXNnID0gb3B0LT5vdXRwdXRfcHJlZml4KG9wdCwgb3B0LT5vdXRwdXRfcHJlZml4X2RhdGEpOworCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVzIiwgbXNnLT5idWYpOworCX0KKworCWlmICghKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05BTUVfU1RBVFVTKSkgeworCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIjolMDZvICUwNm8gJXMgIiwgcC0+b25lLT5tb2RlLCBwLT50d28tPm1vZGUsCisJCQlkaWZmX3VuaXF1ZV9hYmJyZXYocC0+b25lLT5zaGExLCBvcHQtPmFiYnJldikpOworCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVzICIsIGRpZmZfdW5pcXVlX2FiYnJldihwLT50d28tPnNoYTEsIG9wdC0+YWJicmV2KSk7CisJfQorCWlmIChwLT5zY29yZSkgeworCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVjJTAzZCVjIiwgcC0+c3RhdHVzLCBzaW1pbGFyaXR5X2luZGV4KHApLAorCQkJaW50ZXJfbmFtZV90ZXJtaW5hdGlvbik7CisJfSBlbHNlIHsKKwkJZnByaW50ZihvcHQtPmZpbGUsICIlYyVjIiwgcC0+c3RhdHVzLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uKTsKKwl9CisKKwlpZiAocC0+c3RhdHVzID09IERJRkZfU1RBVFVTX0NPUElFRCB8fAorCSAgICBwLT5zdGF0dXMgPT0gRElGRl9TVEFUVVNfUkVOQU1FRCkgeworCQljb25zdCBjaGFyICpuYW1lX2EsICpuYW1lX2I7CisJCW5hbWVfYSA9IHAtPm9uZS0+cGF0aDsKKwkJbmFtZV9iID0gcC0+dHdvLT5wYXRoOworCQlzdHJpcF9wcmVmaXgob3B0LT5wcmVmaXhfbGVuZ3RoLCAmbmFtZV9hLCAmbmFtZV9iKTsKKwkJd3JpdGVfbmFtZV9xdW90ZWQobmFtZV9hLCBvcHQtPmZpbGUsIGludGVyX25hbWVfdGVybWluYXRpb24pOworCQl3cml0ZV9uYW1lX3F1b3RlZChuYW1lX2IsIG9wdC0+ZmlsZSwgbGluZV90ZXJtaW5hdGlvbik7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqbmFtZV9hLCAqbmFtZV9iOworCQluYW1lX2EgPSBwLT5vbmUtPm1vZGUgPyBwLT5vbmUtPnBhdGggOiBwLT50d28tPnBhdGg7CisJCW5hbWVfYiA9IE5VTEw7CisJCXN0cmlwX3ByZWZpeChvcHQtPnByZWZpeF9sZW5ndGgsICZuYW1lX2EsICZuYW1lX2IpOworCQl3cml0ZV9uYW1lX3F1b3RlZChuYW1lX2EsIG9wdC0+ZmlsZSwgbGluZV90ZXJtaW5hdGlvbik7CisJfQorfQorCitpbnQgZGlmZl91bm1vZGlmaWVkX3BhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCit7CisJLyogVGhpcyBmdW5jdGlvbiBpcyB3cml0dGVuIHN0cmljdGVyIHRoYW4gbmVjZXNzYXJ5IHRvIHN1cHBvcnQKKwkgKiB0aGUgY3VycmVudGx5IGltcGxlbWVudGVkIHRyYW5zZm9ybWVycywgYnV0IHRoZSBpZGVhIGlzIHRvCisJICogbGV0IHRyYW5zZm9ybWVycyB0byBwcm9kdWNlIGRpZmZfZmlsZXBhaXJzIGFueSB3YXkgdGhleSB3YW50LAorCSAqIGFuZCBmaWx0ZXIgYW5kIGNsZWFuIHRoZW0gdXAgaGVyZSBiZWZvcmUgcHJvZHVjaW5nIHRoZSBvdXRwdXQuCisJICovCisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSA9IHAtPm9uZSwgKnR3byA9IHAtPnR3bzsKKworCWlmIChESUZGX1BBSVJfVU5NRVJHRUQocCkpCisJCXJldHVybiAwOyAvKiB1bm1lcmdlZCBpcyBpbnRlcmVzdGluZyAqLworCisJLyogZGVsZXRpb24sIGFkZGl0aW9uLCBtb2RlIG9yIHR5cGUgY2hhbmdlCisJICogYW5kIHJlbmFtZSBhcmUgYWxsIGludGVyZXN0aW5nLgorCSAqLworCWlmIChESUZGX0ZJTEVfVkFMSUQob25lKSAhPSBESUZGX0ZJTEVfVkFMSUQodHdvKSB8fAorCSAgICBESUZGX1BBSVJfTU9ERV9DSEFOR0VEKHApIHx8CisJICAgIHN0cmNtcChvbmUtPnBhdGgsIHR3by0+cGF0aCkpCisJCXJldHVybiAwOworCisJLyogYm90aCBhcmUgdmFsaWQgYW5kIHBvaW50IGF0IHRoZSBzYW1lIHBhdGguICB0aGF0IGlzLCB3ZSBhcmUKKwkgKiBkZWFsaW5nIHdpdGggYSBjaGFuZ2UuCisJICovCisJaWYgKG9uZS0+c2hhMV92YWxpZCAmJiB0d28tPnNoYTFfdmFsaWQgJiYKKwkgICAgIWhhc2hjbXAob25lLT5zaGExLCB0d28tPnNoYTEpICYmCisJICAgICFvbmUtPmRpcnR5X3N1Ym1vZHVsZSAmJiAhdHdvLT5kaXJ0eV9zdWJtb2R1bGUpCisJCXJldHVybiAxOyAvKiBubyBjaGFuZ2UgKi8KKwlpZiAoIW9uZS0+c2hhMV92YWxpZCAmJiAhdHdvLT5zaGExX3ZhbGlkKQorCQlyZXR1cm4gMTsgLyogYm90aCBsb29rIGF0IHRoZSBzYW1lIGZpbGUgb24gdGhlIGZpbGVzeXN0ZW0uICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZfZmx1c2hfcGF0Y2goc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJaWYgKGRpZmZfdW5tb2RpZmllZF9wYWlyKHApKQorCQlyZXR1cm47CisKKwlpZiAoKERJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmIFNfSVNESVIocC0+b25lLT5tb2RlKSkgfHwKKwkgICAgKERJRkZfRklMRV9WQUxJRChwLT50d28pICYmIFNfSVNESVIocC0+dHdvLT5tb2RlKSkpCisJCXJldHVybjsgLyogbm8gdHJlZSBkaWZmcyBpbiBwYXRjaCBmb3JtYXQgKi8KKworCXJ1bl9kaWZmKHAsIG8pOworfQorCitzdGF0aWMgdm9pZCBkaWZmX2ZsdXNoX3N0YXQoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkgICAgc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0KQoreworCWlmIChkaWZmX3VubW9kaWZpZWRfcGFpcihwKSkKKwkJcmV0dXJuOworCisJaWYgKChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBTX0lTRElSKHAtPm9uZS0+bW9kZSkpIHx8CisJICAgIChESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSAmJiBTX0lTRElSKHAtPnR3by0+bW9kZSkpKQorCQlyZXR1cm47IC8qIG5vIHVzZWZ1bCBzdGF0IGZvciB0cmVlIGRpZmZzICovCisKKwlydW5fZGlmZnN0YXQocCwgbywgZGlmZnN0YXQpOworfQorCitzdGF0aWMgdm9pZCBkaWZmX2ZsdXNoX2NoZWNrZGlmZihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwKKwkJc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwlpZiAoZGlmZl91bm1vZGlmaWVkX3BhaXIocCkpCisJCXJldHVybjsKKworCWlmICgoRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgJiYgU19JU0RJUihwLT5vbmUtPm1vZGUpKSB8fAorCSAgICAoRElGRl9GSUxFX1ZBTElEKHAtPnR3bykgJiYgU19JU0RJUihwLT50d28tPm1vZGUpKSkKKwkJcmV0dXJuOyAvKiBub3RoaW5nIHRvIGNoZWNrIGluIHRyZWUgZGlmZnMgKi8KKworCXJ1bl9jaGVja2RpZmYocCwgbyk7Cit9CisKK2ludCBkaWZmX3F1ZXVlX2lzX2VtcHR5KHZvaWQpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspCisJCWlmICghZGlmZl91bm1vZGlmaWVkX3BhaXIocS0+cXVldWVbaV0pKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKyNpZiBESUZGX0RFQlVHCit2b2lkIGRpZmZfZGVidWdfZmlsZXNwZWMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnMsIGludCB4LCBjb25zdCBjaGFyICpvbmUpCit7CisJZnByaW50ZihzdGRlcnIsICJxdWV1ZVslZF0gJXMgKCVzKSAlcyAlMDZvICVzXG4iLAorCQl4LCBvbmUgPyBvbmUgOiAiIiwKKwkJcy0+cGF0aCwKKwkJRElGRl9GSUxFX1ZBTElEKHMpID8gInZhbGlkIiA6ICJpbnZhbGlkIiwKKwkJcy0+bW9kZSwKKwkJcy0+c2hhMV92YWxpZCA/IHNoYTFfdG9faGV4KHMtPnNoYTEpIDogIiIpOworCWZwcmludGYoc3RkZXJyLCAicXVldWVbJWRdICVzIHNpemUgJWx1IGZsYWdzICVkXG4iLAorCQl4LCBvbmUgPyBvbmUgOiAiIiwKKwkJcy0+c2l6ZSwgcy0+eGZybV9mbGFncyk7Cit9CisKK3ZvaWQgZGlmZl9kZWJ1Z19maWxlcGFpcihjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgaW50IGkpCit7CisJZGlmZl9kZWJ1Z19maWxlc3BlYyhwLT5vbmUsIGksICJvbmUiKTsKKwlkaWZmX2RlYnVnX2ZpbGVzcGVjKHAtPnR3bywgaSwgInR3byIpOworCWZwcmludGYoc3RkZXJyLCAic2NvcmUgJWQsIHN0YXR1cyAlYyByZW5hbWVfdXNlZCAlZCBicm9rZW4gJWRcbiIsCisJCXAtPnNjb3JlLCBwLT5zdGF0dXMgPyBwLT5zdGF0dXMgOiAnPycsCisJCXAtPm9uZS0+cmVuYW1lX3VzZWQsIHAtPmJyb2tlbl9wYWlyKTsKK30KKwordm9pZCBkaWZmX2RlYnVnX3F1ZXVlKGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxKQoreworCWludCBpOworCWlmIChtc2cpCisJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CisJZnByaW50ZihzdGRlcnIsICJxLT5uciA9ICVkXG4iLCBxLT5ucik7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJZGlmZl9kZWJ1Z19maWxlcGFpcihwLCBpKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZGlmZl9yZXNvbHZlX3JlbmFtZV9jb3B5KHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnA7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisKKwlkaWZmX2RlYnVnX3F1ZXVlKCJyZXNvbHZlLXJlbmFtZS1jb3B5IiwgcSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlwID0gcS0+cXVldWVbaV07CisJCXAtPnN0YXR1cyA9IDA7IC8qIHVuZGVjaWRlZCAqLworCQlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKQorCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfVU5NRVJHRUQ7CisJCWVsc2UgaWYgKCFESUZGX0ZJTEVfVkFMSUQocC0+b25lKSkKKwkJCXAtPnN0YXR1cyA9IERJRkZfU1RBVFVTX0FEREVEOworCQllbHNlIGlmICghRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpCisJCQlwLT5zdGF0dXMgPSBESUZGX1NUQVRVU19ERUxFVEVEOworCQllbHNlIGlmIChESUZGX1BBSVJfVFlQRV9DSEFOR0VEKHApKQorCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfVFlQRV9DSEFOR0VEOworCisJCS8qIGZyb20gdGhpcyBwb2ludCBvbiwgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHBhaXIKKwkJICogd2hvc2UgYm90aCBzaWRlcyBhcmUgdmFsaWQgYW5kIG9mIHRoZSBzYW1lIHR5cGUsIGkuZS4KKwkJICogZWl0aGVyIGluLXBsYWNlIGVkaXQgb3IgcmVuYW1lL2NvcHkgZWRpdC4KKwkJICovCisJCWVsc2UgaWYgKERJRkZfUEFJUl9SRU5BTUUocCkpIHsKKwkJCS8qCisJCQkgKiBBIHJlbmFtZSBtaWdodCBoYXZlIHJlLWNvbm5lY3RlZCBhIGJyb2tlbgorCQkJICogcGFpciB1cCwgY2F1c2luZyB0aGUgcGF0aG5hbWVzIHRvIGJlIHRoZQorCQkJICogc2FtZSBhZ2Fpbi4gSWYgc28sIHRoYXQncyBub3QgYSByZW5hbWUgYXQKKwkJCSAqIGFsbCwganVzdCBhIG1vZGlmaWNhdGlvbi4uCisJCQkgKgorCQkJICogT3RoZXJ3aXNlLCBzZWUgaWYgdGhpcyBzb3VyY2Ugd2FzIHVzZWQgZm9yCisJCQkgKiBtdWx0aXBsZSByZW5hbWVzLCBpbiB3aGljaCBjYXNlIHdlIGRlY3JlbWVudAorCQkJICogdGhlIGNvdW50LCBhbmQgY2FsbCBpdCBhIGNvcHkuCisJCQkgKi8KKwkJCWlmICghc3RyY21wKHAtPm9uZS0+cGF0aCwgcC0+dHdvLT5wYXRoKSkKKwkJCQlwLT5zdGF0dXMgPSBESUZGX1NUQVRVU19NT0RJRklFRDsKKwkJCWVsc2UgaWYgKC0tcC0+b25lLT5yZW5hbWVfdXNlZCA+IDApCisJCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfQ09QSUVEOworCQkJZWxzZQorCQkJCXAtPnN0YXR1cyA9IERJRkZfU1RBVFVTX1JFTkFNRUQ7CisJCX0KKwkJZWxzZSBpZiAoaGFzaGNtcChwLT5vbmUtPnNoYTEsIHAtPnR3by0+c2hhMSkgfHwKKwkJCSBwLT5vbmUtPm1vZGUgIT0gcC0+dHdvLT5tb2RlIHx8CisJCQkgcC0+b25lLT5kaXJ0eV9zdWJtb2R1bGUgfHwKKwkJCSBwLT50d28tPmRpcnR5X3N1Ym1vZHVsZSB8fAorCQkJIGlzX251bGxfc2hhMShwLT5vbmUtPnNoYTEpKQorCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfTU9ESUZJRUQ7CisJCWVsc2UgeworCQkJLyogVGhpcyBpcyBhICJuby1jaGFuZ2UiIGVudHJ5IGFuZCBzaG91bGQgbm90CisJCQkgKiBoYXBwZW4gYW55bW9yZSwgYnV0IHByZXBhcmUgZm9yIGJyb2tlbiBjYWxsZXJzLgorCQkJICovCisJCQllcnJvcigiZmVlZGluZyB1bm1vZGlmaWVkICVzIHRvIGRpZmZjb3JlIiwKKwkJCSAgICAgIHAtPm9uZS0+cGF0aCk7CisJCQlwLT5zdGF0dXMgPSBESUZGX1NUQVRVU19VTktOT1dOOworCQl9CisJfQorCWRpZmZfZGVidWdfcXVldWUoInJlc29sdmUtcmVuYW1lLWNvcHkgZG9uZSIsIHEpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3BhaXJfc3RhdHVzKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJY2FzZSBESUZGX1NUQVRVU19VTktOT1dOOgorCQlyZXR1cm4gMDsKKwljYXNlIDA6CisJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gZGlmZi1yZXNvbHZlLXJlbmFtZS1jb3B5Iik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbHVzaF9vbmVfcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCWludCBmbXQgPSBvcHQtPm91dHB1dF9mb3JtYXQ7CisKKwlpZiAoZm10ICYgRElGRl9GT1JNQVRfQ0hFQ0tESUZGKQorCQlkaWZmX2ZsdXNoX2NoZWNrZGlmZihwLCBvcHQpOworCWVsc2UgaWYgKGZtdCAmIChESUZGX0ZPUk1BVF9SQVcgfCBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykpCisJCWRpZmZfZmx1c2hfcmF3KHAsIG9wdCk7CisJZWxzZSBpZiAoZm10ICYgRElGRl9GT1JNQVRfTkFNRSkgeworCQljb25zdCBjaGFyICpuYW1lX2EsICpuYW1lX2I7CisJCW5hbWVfYSA9IHAtPnR3by0+cGF0aDsKKwkJbmFtZV9iID0gTlVMTDsKKwkJc3RyaXBfcHJlZml4KG9wdC0+cHJlZml4X2xlbmd0aCwgJm5hbWVfYSwgJm5hbWVfYik7CisJCXdyaXRlX25hbWVfcXVvdGVkKG5hbWVfYSwgb3B0LT5maWxlLCBvcHQtPmxpbmVfdGVybWluYXRpb24pOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19maWxlX21vZGVfbmFtZShGSUxFICpmaWxlLCBjb25zdCBjaGFyICpuZXdkZWxldGUsIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpmcykKK3sKKwlpZiAoZnMtPm1vZGUpCisJCWZwcmludGYoZmlsZSwgIiAlcyBtb2RlICUwNm8gIiwgbmV3ZGVsZXRlLCBmcy0+bW9kZSk7CisJZWxzZQorCQlmcHJpbnRmKGZpbGUsICIgJXMgIiwgbmV3ZGVsZXRlKTsKKwl3cml0ZV9uYW1lX3F1b3RlZChmcy0+cGF0aCwgZmlsZSwgJ1xuJyk7Cit9CisKKworc3RhdGljIHZvaWQgc2hvd19tb2RlX2NoYW5nZShGSUxFICpmaWxlLCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgaW50IHNob3dfbmFtZSwKKwkJY29uc3QgY2hhciAqbGluZV9wcmVmaXgpCit7CisJaWYgKHAtPm9uZS0+bW9kZSAmJiBwLT50d28tPm1vZGUgJiYgcC0+b25lLT5tb2RlICE9IHAtPnR3by0+bW9kZSkgeworCQlmcHJpbnRmKGZpbGUsICIlcyBtb2RlIGNoYW5nZSAlMDZvID0+ICUwNm8lYyIsIGxpbmVfcHJlZml4LCBwLT5vbmUtPm1vZGUsCisJCQlwLT50d28tPm1vZGUsIHNob3dfbmFtZSA/ICcgJyA6ICdcbicpOworCQlpZiAoc2hvd19uYW1lKSB7CisJCQl3cml0ZV9uYW1lX3F1b3RlZChwLT50d28tPnBhdGgsIGZpbGUsICdcbicpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3JlbmFtZV9jb3B5KEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnJlbmFtZWNvcHksIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLAorCQkJY29uc3QgY2hhciAqbGluZV9wcmVmaXgpCit7CisJY2hhciAqbmFtZXMgPSBwcHJpbnRfcmVuYW1lKHAtPm9uZS0+cGF0aCwgcC0+dHdvLT5wYXRoKTsKKworCWZwcmludGYoZmlsZSwgIiAlcyAlcyAoJWQlJSlcbiIsIHJlbmFtZWNvcHksIG5hbWVzLCBzaW1pbGFyaXR5X2luZGV4KHApKTsKKwlmcmVlKG5hbWVzKTsKKwlzaG93X21vZGVfY2hhbmdlKGZpbGUsIHAsIDAsIGxpbmVfcHJlZml4KTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9zdW1tYXJ5KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCit7CisJRklMRSAqZmlsZSA9IG9wdC0+ZmlsZTsKKwljaGFyICpsaW5lX3ByZWZpeCA9ICIiOworCisJaWYgKG9wdC0+b3V0cHV0X3ByZWZpeCkgeworCQlzdHJ1Y3Qgc3RyYnVmICpidWYgPSBvcHQtPm91dHB1dF9wcmVmaXgob3B0LCBvcHQtPm91dHB1dF9wcmVmaXhfZGF0YSk7CisJCWxpbmVfcHJlZml4ID0gYnVmLT5idWY7CisJfQorCisJc3dpdGNoKHAtPnN0YXR1cykgeworCWNhc2UgRElGRl9TVEFUVVNfREVMRVRFRDoKKwkJZnB1dHMobGluZV9wcmVmaXgsIGZpbGUpOworCQlzaG93X2ZpbGVfbW9kZV9uYW1lKGZpbGUsICJkZWxldGUiLCBwLT5vbmUpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX0FEREVEOgorCQlmcHV0cyhsaW5lX3ByZWZpeCwgZmlsZSk7CisJCXNob3dfZmlsZV9tb2RlX25hbWUoZmlsZSwgImNyZWF0ZSIsIHAtPnR3byk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TVEFUVVNfQ09QSUVEOgorCQlmcHV0cyhsaW5lX3ByZWZpeCwgZmlsZSk7CisJCXNob3dfcmVuYW1lX2NvcHkoZmlsZSwgImNvcHkiLCBwLCBsaW5lX3ByZWZpeCk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TVEFUVVNfUkVOQU1FRDoKKwkJZnB1dHMobGluZV9wcmVmaXgsIGZpbGUpOworCQlzaG93X3JlbmFtZV9jb3B5KGZpbGUsICJyZW5hbWUiLCBwLCBsaW5lX3ByZWZpeCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChwLT5zY29yZSkgeworCQkJZnByaW50ZihmaWxlLCAiJXMgcmV3cml0ZSAiLCBsaW5lX3ByZWZpeCk7CisJCQl3cml0ZV9uYW1lX3F1b3RlZChwLT50d28tPnBhdGgsIGZpbGUsICcgJyk7CisJCQlmcHJpbnRmKGZpbGUsICIoJWQlJSlcbiIsIHNpbWlsYXJpdHlfaW5kZXgocCkpOworCQl9CisJCXNob3dfbW9kZV9jaGFuZ2UoZmlsZSwgcCwgIXAtPnNjb3JlLCBsaW5lX3ByZWZpeCk7CisJCWJyZWFrOworCX0KK30KKworc3RydWN0IHBhdGNoX2lkX3QgeworCWdpdF9TSEFfQ1RYICpjdHg7CisJaW50IHBhdGNobGVuOworfTsKKworc3RhdGljIGludCByZW1vdmVfc3BhY2UoY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlpbnQgaTsKKwljaGFyICpkc3QgPSBsaW5lOworCXVuc2lnbmVkIGNoYXIgYzsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJaWYgKCFpc3NwYWNlKChjID0gbGluZVtpXSkpKQorCQkJKmRzdCsrID0gYzsKKworCXJldHVybiBkc3QgLSBsaW5lOworfQorCitzdGF0aWMgdm9pZCBwYXRjaF9pZF9jb25zdW1lKHZvaWQgKnByaXYsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBwYXRjaF9pZF90ICpkYXRhID0gcHJpdjsKKwlpbnQgbmV3X2xlbjsKKworCS8qIElnbm9yZSBsaW5lIG51bWJlcnMgd2hlbiBjb21wdXRpbmcgdGhlIFNIQTEgb2YgdGhlIHBhdGNoICovCisJaWYgKCFwcmVmaXhjbXAobGluZSwgIkBAIC0iKSkKKwkJcmV0dXJuOworCisJbmV3X2xlbiA9IHJlbW92ZV9zcGFjZShsaW5lLCBsZW4pOworCisJZ2l0X1NIQTFfVXBkYXRlKGRhdGEtPmN0eCwgbGluZSwgbmV3X2xlbik7CisJZGF0YS0+cGF0Y2hsZW4gKz0gbmV3X2xlbjsKK30KKworLyogcmV0dXJucyAwIHVwb24gc3VjY2VzcywgYW5kIHdyaXRlcyByZXN1bHQgaW50byBzaGExICovCitzdGF0aWMgaW50IGRpZmZfZ2V0X3BhdGNoX2lkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJaW50IGk7CisJZ2l0X1NIQV9DVFggY3R4OworCXN0cnVjdCBwYXRjaF9pZF90IGRhdGE7CisJY2hhciBidWZmZXJbUEFUSF9NQVggKiA0ICsgMjBdOworCisJZ2l0X1NIQTFfSW5pdCgmY3R4KTsKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcGF0Y2hfaWRfdCkpOworCWRhdGEuY3R4ID0gJmN0eDsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXhwcGFyYW1fdCB4cHA7CisJCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwkJbW1maWxlX3QgbWYxLCBtZjI7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWludCBsZW4xLCBsZW4yOworCisJCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCQlpZiAocC0+c3RhdHVzID09IDApCisJCQlyZXR1cm4gZXJyb3IoImludGVybmFsIGRpZmYgc3RhdHVzIGVycm9yIik7CisJCWlmIChwLT5zdGF0dXMgPT0gRElGRl9TVEFUVVNfVU5LTk9XTikKKwkJCWNvbnRpbnVlOworCQlpZiAoZGlmZl91bm1vZGlmaWVkX3BhaXIocCkpCisJCQljb250aW51ZTsKKwkJaWYgKChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBTX0lTRElSKHAtPm9uZS0+bW9kZSkpIHx8CisJCSAgICAoRElGRl9GSUxFX1ZBTElEKHAtPnR3bykgJiYgU19JU0RJUihwLT50d28tPm1vZGUpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKQorCQkJY29udGludWU7CisKKwkJZGlmZl9maWxsX3NoYTFfaW5mbyhwLT5vbmUpOworCQlkaWZmX2ZpbGxfc2hhMV9pbmZvKHAtPnR3byk7CisJCWlmIChmaWxsX21tZmlsZSgmbWYxLCBwLT5vbmUpIDwgMCB8fAorCQkJCWZpbGxfbW1maWxlKCZtZjIsIHAtPnR3bykgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CisKKwkJbGVuMSA9IHJlbW92ZV9zcGFjZShwLT5vbmUtPnBhdGgsIHN0cmxlbihwLT5vbmUtPnBhdGgpKTsKKwkJbGVuMiA9IHJlbW92ZV9zcGFjZShwLT50d28tPnBhdGgsIHN0cmxlbihwLT50d28tPnBhdGgpKTsKKwkJaWYgKHAtPm9uZS0+bW9kZSA9PSAwKQorCQkJbGVuMSA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisJCQkJCSJkaWZmLS1naXRhLyUuKnNiLyUuKnMiCisJCQkJCSJuZXdmaWxlbW9kZSUwNm8iCisJCQkJCSItLS0vZGV2L251bGwiCisJCQkJCSIrKytiLyUuKnMiLAorCQkJCQlsZW4xLCBwLT5vbmUtPnBhdGgsCisJCQkJCWxlbjIsIHAtPnR3by0+cGF0aCwKKwkJCQkJcC0+dHdvLT5tb2RlLAorCQkJCQlsZW4yLCBwLT50d28tPnBhdGgpOworCQllbHNlIGlmIChwLT50d28tPm1vZGUgPT0gMCkKKwkJCWxlbjEgPSBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAorCQkJCQkiZGlmZi0tZ2l0YS8lLipzYi8lLipzIgorCQkJCQkiZGVsZXRlZGZpbGVtb2RlJTA2byIKKwkJCQkJIi0tLWEvJS4qcyIKKwkJCQkJIisrKy9kZXYvbnVsbCIsCisJCQkJCWxlbjEsIHAtPm9uZS0+cGF0aCwKKwkJCQkJbGVuMiwgcC0+dHdvLT5wYXRoLAorCQkJCQlwLT5vbmUtPm1vZGUsCisJCQkJCWxlbjEsIHAtPm9uZS0+cGF0aCk7CisJCWVsc2UKKwkJCWxlbjEgPSBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAorCQkJCQkiZGlmZi0tZ2l0YS8lLipzYi8lLipzIgorCQkJCQkiLS0tYS8lLipzIgorCQkJCQkiKysrYi8lLipzIiwKKwkJCQkJbGVuMSwgcC0+b25lLT5wYXRoLAorCQkJCQlsZW4yLCBwLT50d28tPnBhdGgsCisJCQkJCWxlbjEsIHAtPm9uZS0+cGF0aCwKKwkJCQkJbGVuMiwgcC0+dHdvLT5wYXRoKTsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIGJ1ZmZlciwgbGVuMSk7CisKKwkJaWYgKGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KHAtPm9uZSkgfHwKKwkJICAgIGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KHAtPnR3bykpIHsKKwkJCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBzaGExX3RvX2hleChwLT5vbmUtPnNoYTEpLCA0MCk7CisJCQlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgc2hhMV90b19oZXgocC0+dHdvLT5zaGExKSwgNDApOworCQkJY29udGludWU7CisJCX0KKworCQl4cHAuZmxhZ3MgPSAwOworCQl4ZWNmZy5jdHhsZW4gPSAzOworCQl4ZWNmZy5mbGFncyA9IDA7CisJCXhkaV9kaWZmX291dGYoJm1mMSwgJm1mMiwgcGF0Y2hfaWRfY29uc3VtZSwgJmRhdGEsCisJCQkgICAgICAmeHBwLCAmeGVjZmcpOworCX0KKworCWdpdF9TSEExX0ZpbmFsKHNoYTEsICZjdHgpOworCXJldHVybiAwOworfQorCitpbnQgZGlmZl9mbHVzaF9wYXRjaF9pZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCWludCBpOworCWludCByZXN1bHQgPSBkaWZmX2dldF9wYXRjaF9pZChvcHRpb25zLCBzaGExKTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKQorCQlkaWZmX2ZyZWVfZmlsZXBhaXIocS0+cXVldWVbaV0pOworCisJZnJlZShxLT5xdWV1ZSk7CisJRElGRl9RVUVVRV9DTEVBUihxKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfc3VtbWFyeV9lbXB0eShjb25zdCBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCisJCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJCWNhc2UgRElGRl9TVEFUVVNfREVMRVRFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19BRERFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19DT1BJRUQ6CisJCWNhc2UgRElGRl9TVEFUVVNfUkVOQU1FRDoKKwkJCXJldHVybiAwOworCQlkZWZhdWx0OgorCQkJaWYgKHAtPnNjb3JlKQorCQkJCXJldHVybiAwOworCQkJaWYgKHAtPm9uZS0+bW9kZSAmJiBwLT50d28tPm1vZGUgJiYKKwkJCSAgICBwLT5vbmUtPm1vZGUgIT0gcC0+dHdvLT5tb2RlKQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHJlbmFtZV9saW1pdF93YXJuaW5nW10gPQorImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIjsKKworc3RhdGljIGNvbnN0IGNoYXIgZGVncmFkZV9jY190b19jX3dhcm5pbmdbXSA9Cisib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIjsKKworc3RhdGljIGNvbnN0IGNoYXIgcmVuYW1lX2xpbWl0X2FkdmljZVtdID0KKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgIgorIiVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iOworCit2b2lkIGRpZmZfd2Fybl9yZW5hbWVfbGltaXQoY29uc3QgY2hhciAqdmFybmFtZSwgaW50IG5lZWRlZCwgaW50IGRlZ3JhZGVkX2NjKQoreworCWlmIChkZWdyYWRlZF9jYykKKwkJd2FybmluZyhkZWdyYWRlX2NjX3RvX2Nfd2FybmluZyk7CisJZWxzZSBpZiAobmVlZGVkKQorCQl3YXJuaW5nKHJlbmFtZV9saW1pdF93YXJuaW5nKTsKKwllbHNlCisJCXJldHVybjsKKwlpZiAoMCA8IG5lZWRlZCAmJiBuZWVkZWQgPCAzMjc2NykKKwkJd2FybmluZyhyZW5hbWVfbGltaXRfYWR2aWNlLCB2YXJuYW1lLCBuZWVkZWQpOworfQorCit2b2lkIGRpZmZfZmx1c2goc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKKwlpbnQgaSwgb3V0cHV0X2Zvcm1hdCA9IG9wdGlvbnMtPm91dHB1dF9mb3JtYXQ7CisJaW50IHNlcGFyYXRvciA9IDA7CisJaW50IGRpcnN0YXRfYnlfbGluZSA9IDA7CisKKwkvKgorCSAqIE9yZGVyOiByYXcsIHN0YXQsIHN1bW1hcnksIHBhdGNoCisJICogb3I6ICAgIG5hbWUvbmFtZS1zdGF0dXMvY2hlY2tkaWZmIChvdGhlciBiaXRzIGNsZWFyKQorCSAqLworCWlmICghcS0+bnIpCisJCWdvdG8gZnJlZV9xdWV1ZTsKKworCWlmIChvdXRwdXRfZm9ybWF0ICYgKERJRkZfRk9STUFUX1JBVyB8CisJCQkgICAgIERJRkZfRk9STUFUX05BTUUgfAorCQkJICAgICBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUyB8CisJCQkgICAgIERJRkZfRk9STUFUX0NIRUNLRElGRikpIHsKKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCQlpZiAoY2hlY2tfcGFpcl9zdGF0dXMocCkpCisJCQkJZmx1c2hfb25lX3BhaXIocCwgb3B0aW9ucyk7CisJCX0KKwkJc2VwYXJhdG9yKys7CisJfQorCisJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9ESVJTVEFUICYmIERJRkZfT1BUX1RTVChvcHRpb25zLCBESVJTVEFUX0JZX0xJTkUpKQorCQlkaXJzdGF0X2J5X2xpbmUgPSAxOworCisJaWYgKG91dHB1dF9mb3JtYXQgJiAoRElGRl9GT1JNQVRfRElGRlNUQVR8RElGRl9GT1JNQVRfU0hPUlRTVEFUfERJRkZfRk9STUFUX05VTVNUQVQpIHx8CisJICAgIGRpcnN0YXRfYnlfbGluZSkgeworCQlzdHJ1Y3QgZGlmZnN0YXRfdCBkaWZmc3RhdDsKKworCQltZW1zZXQoJmRpZmZzdGF0LCAwLCBzaXplb2Yoc3RydWN0IGRpZmZzdGF0X3QpKTsKKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCQlpZiAoY2hlY2tfcGFpcl9zdGF0dXMocCkpCisJCQkJZGlmZl9mbHVzaF9zdGF0KHAsIG9wdGlvbnMsICZkaWZmc3RhdCk7CisJCX0KKwkJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9OVU1TVEFUKQorCQkJc2hvd19udW1zdGF0KCZkaWZmc3RhdCwgb3B0aW9ucyk7CisJCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfRElGRlNUQVQpCisJCQlzaG93X3N0YXRzKCZkaWZmc3RhdCwgb3B0aW9ucyk7CisJCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfU0hPUlRTVEFUKQorCQkJc2hvd19zaG9ydHN0YXRzKCZkaWZmc3RhdCwgb3B0aW9ucyk7CisJCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfRElSU1RBVCkKKwkJCXNob3dfZGlyc3RhdF9ieV9saW5lKCZkaWZmc3RhdCwgb3B0aW9ucyk7CisJCWZyZWVfZGlmZnN0YXRfaW5mbygmZGlmZnN0YXQpOworCQlzZXBhcmF0b3IrKzsKKwl9CisJaWYgKChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfRElSU1RBVCkgJiYgIWRpcnN0YXRfYnlfbGluZSkKKwkJc2hvd19kaXJzdGF0KG9wdGlvbnMpOworCisJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9TVU1NQVJZICYmICFpc19zdW1tYXJ5X2VtcHR5KHEpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCQlkaWZmX3N1bW1hcnkob3B0aW9ucywgcS0+cXVldWVbaV0pOworCQl9CisJCXNlcGFyYXRvcisrOworCX0KKworCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTk9fT1VUUFVUICYmCisJICAgIERJRkZfT1BUX1RTVChvcHRpb25zLCBFWElUX1dJVEhfU1RBVFVTKSAmJgorCSAgICBESUZGX09QVF9UU1Qob3B0aW9ucywgRElGRl9GUk9NX0NPTlRFTlRTKSkgeworCQkvKgorCQkgKiBydW4gZGlmZl9mbHVzaF9wYXRjaCBmb3IgdGhlIGV4aXQgc3RhdHVzLiBzZXR0aW5nCisJCSAqIG9wdGlvbnMtPmZpbGUgdG8gL2Rldi9udWxsIHNob3VsZCBiZSBzYWZlLCBiZWNhdWUgd2UKKwkJICogYXJlbid0IHN1cHBvc2VkIHRvIHByb2R1Y2UgYW55IG91dHB1dCBhbnl3YXkuCisJCSAqLworCQlpZiAob3B0aW9ucy0+Y2xvc2VfZmlsZSkKKwkJCWZjbG9zZShvcHRpb25zLT5maWxlKTsKKwkJb3B0aW9ucy0+ZmlsZSA9IGZvcGVuKCIvZGV2L251bGwiLCAidyIpOworCQlpZiAoIW9wdGlvbnMtPmZpbGUpCisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuIC9kZXYvbnVsbCIpOworCQlvcHRpb25zLT5jbG9zZV9maWxlID0gMTsKKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCQlpZiAoY2hlY2tfcGFpcl9zdGF0dXMocCkpCisJCQkJZGlmZl9mbHVzaF9wYXRjaChwLCBvcHRpb25zKTsKKwkJCWlmIChvcHRpb25zLT5mb3VuZF9jaGFuZ2VzKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkgeworCQlpZiAoc2VwYXJhdG9yKSB7CisJCQlpZiAob3B0aW9ucy0+b3V0cHV0X3ByZWZpeCkgeworCQkJCXN0cnVjdCBzdHJidWYgKm1zZyA9IE5VTEw7CisJCQkJbXNnID0gb3B0aW9ucy0+b3V0cHV0X3ByZWZpeChvcHRpb25zLAorCQkJCQlvcHRpb25zLT5vdXRwdXRfcHJlZml4X2RhdGEpOworCQkJCWZ3cml0ZShtc2ctPmJ1ZiwgbXNnLT5sZW4sIDEsIHN0ZG91dCk7CisJCQl9CisJCQlwdXRjKG9wdGlvbnMtPmxpbmVfdGVybWluYXRpb24sIG9wdGlvbnMtPmZpbGUpOworCQkJaWYgKG9wdGlvbnMtPnN0YXRfc2VwKSB7CisJCQkJLyogYXR0YWNoIHBhdGNoIGluc3RlYWQgb2YgaW5saW5lICovCisJCQkJZnB1dHMob3B0aW9ucy0+c3RhdF9zZXAsIG9wdGlvbnMtPmZpbGUpOworCQkJfQorCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCQlpZiAoY2hlY2tfcGFpcl9zdGF0dXMocCkpCisJCQkJZGlmZl9mbHVzaF9wYXRjaChwLCBvcHRpb25zKTsKKwkJfQorCX0KKworCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfQ0FMTEJBQ0spCisJCW9wdGlvbnMtPmZvcm1hdF9jYWxsYmFjayhxLCBvcHRpb25zLCBvcHRpb25zLT5mb3JtYXRfY2FsbGJhY2tfZGF0YSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykKKwkJZGlmZl9mcmVlX2ZpbGVwYWlyKHEtPnF1ZXVlW2ldKTsKK2ZyZWVfcXVldWU6CisJZnJlZShxLT5xdWV1ZSk7CisJRElGRl9RVUVVRV9DTEVBUihxKTsKKwlpZiAob3B0aW9ucy0+Y2xvc2VfZmlsZSkKKwkJZmNsb3NlKG9wdGlvbnMtPmZpbGUpOworCisJLyoKKwkgKiBSZXBvcnQgdGhlIGNvbnRlbnQtbGV2ZWwgZGlmZmVyZW5jZXMgd2l0aCBIQVNfQ0hBTkdFUzsKKwkgKiBkaWZmX2FkZHJlbW92ZS9kaWZmX2NoYW5nZSBkb2VzIG5vdCBzZXQgdGhlIGJpdCB3aGVuCisJICogRElGRl9GUk9NX0NPTlRFTlRTIGlzIGluIGVmZmVjdCAoZS5nLiB3aXRoIC13KS4KKwkgKi8KKwlpZiAoRElGRl9PUFRfVFNUKG9wdGlvbnMsIERJRkZfRlJPTV9DT05URU5UUykpIHsKKwkJaWYgKG9wdGlvbnMtPmZvdW5kX2NoYW5nZXMpCisJCQlESUZGX09QVF9TRVQob3B0aW9ucywgSEFTX0NIQU5HRVMpOworCQllbHNlCisJCQlESUZGX09QVF9DTFIob3B0aW9ucywgSEFTX0NIQU5HRVMpOworCX0KK30KKworc3RhdGljIHZvaWQgZGlmZmNvcmVfYXBwbHlfZmlsdGVyKGNvbnN0IGNoYXIgKmZpbHRlcikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3Qgb3V0cTsKKwlESUZGX1FVRVVFX0NMRUFSKCZvdXRxKTsKKworCWlmICghZmlsdGVyKQorCQlyZXR1cm47CisKKwlpZiAoc3RyY2hyKGZpbHRlciwgRElGRl9TVEFUVVNfRklMVEVSX0FPTikpIHsKKwkJaW50IGZvdW5kOworCQlmb3IgKGkgPSBmb3VuZCA9IDA7ICFmb3VuZCAmJiBpIDwgcS0+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmICgoKHAtPnN0YXR1cyA9PSBESUZGX1NUQVRVU19NT0RJRklFRCkgJiYKKwkJCSAgICAgKChwLT5zY29yZSAmJgorCQkJICAgICAgIHN0cmNocihmaWx0ZXIsIERJRkZfU1RBVFVTX0ZJTFRFUl9CUk9LRU4pKSB8fAorCQkJICAgICAgKCFwLT5zY29yZSAmJgorCQkJICAgICAgIHN0cmNocihmaWx0ZXIsIERJRkZfU1RBVFVTX01PRElGSUVEKSkpKSB8fAorCQkJICAgICgocC0+c3RhdHVzICE9IERJRkZfU1RBVFVTX01PRElGSUVEKSAmJgorCQkJICAgICBzdHJjaHIoZmlsdGVyLCBwLT5zdGF0dXMpKSkKKwkJCQlmb3VuZCsrOworCQl9CisJCWlmIChmb3VuZCkKKwkJCXJldHVybjsKKworCQkvKiBvdGhlcndpc2Ugd2Ugd2lsbCBjbGVhciB0aGUgd2hvbGUgcXVldWUKKwkJICogYnkgY29weWluZyB0aGUgZW1wdHkgb3V0cSBhdCB0aGUgZW5kIG9mIHRoaXMKKwkJICogZnVuY3Rpb24sIGJ1dCBmaXJzdCBjbGVhciB0aGUgY3VycmVudCBlbnRyaWVzCisJCSAqIGluIHRoZSBxdWV1ZS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKQorCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHEtPnF1ZXVlW2ldKTsKKwl9CisJZWxzZSB7CisJCS8qIE9ubHkgdGhlIG1hdGNoaW5nIG9uZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisKKwkJCWlmICgoKHAtPnN0YXR1cyA9PSBESUZGX1NUQVRVU19NT0RJRklFRCkgJiYKKwkJCSAgICAgKChwLT5zY29yZSAmJgorCQkJICAgICAgIHN0cmNocihmaWx0ZXIsIERJRkZfU1RBVFVTX0ZJTFRFUl9CUk9LRU4pKSB8fAorCQkJICAgICAgKCFwLT5zY29yZSAmJgorCQkJICAgICAgIHN0cmNocihmaWx0ZXIsIERJRkZfU1RBVFVTX01PRElGSUVEKSkpKSB8fAorCQkJICAgICgocC0+c3RhdHVzICE9IERJRkZfU1RBVFVTX01PRElGSUVEKSAmJgorCQkJICAgICBzdHJjaHIoZmlsdGVyLCBwLT5zdGF0dXMpKSkKKwkJCQlkaWZmX3EoJm91dHEsIHApOworCQkJZWxzZQorCQkJCWRpZmZfZnJlZV9maWxlcGFpcihwKTsKKwkJfQorCX0KKwlmcmVlKHEtPnF1ZXVlKTsKKwkqcSA9IG91dHE7Cit9CisKKy8qIENoZWNrIHdoZXRoZXIgdHdvIGZpbGVzcGVjcyB3aXRoIHRoZSBzYW1lIG1vZGUgYW5kIHNpemUgYXJlIGlkZW50aWNhbCAqLworc3RhdGljIGludCBkaWZmX2ZpbGVzcGVjX2lzX2lkZW50aWNhbChzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28pCit7CisJaWYgKFNfSVNHSVRMSU5LKG9uZS0+bW9kZSkpCisJCXJldHVybiAwOworCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKG9uZSwgMCkpCisJCXJldHVybiAwOworCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHR3bywgMCkpCisJCXJldHVybiAwOworCXJldHVybiAhbWVtY21wKG9uZS0+ZGF0YSwgdHdvLT5kYXRhLCBvbmUtPnNpemUpOworfQorCitzdGF0aWMgdm9pZCBkaWZmY29yZV9za2lwX3N0YXRfdW5tYXRjaChzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0KQoreworCWludCBpOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKworCQkvKgorCQkgKiAxLiBFbnRyaWVzIHRoYXQgY29tZSBmcm9tIHN0YXQgaW5mbyBkaXJ0aW5lc3MKKwkJICogICAgYWx3YXlzIGhhdmUgYm90aCBzaWRlcyAoaW93LCBub3QgY3JlYXRlL2RlbGV0ZSksCisJCSAqICAgIG9uZSBzaWRlIG9mIHRoZSBvYmplY3QgbmFtZSBpcyB1bmtub3duLCB3aXRoCisJCSAqICAgIHRoZSBzYW1lIG1vZGUgYW5kIHNpemUuICBLZWVwIHRoZSBvbmVzIHRoYXQKKwkJICogICAgZG8gbm90IG1hdGNoIHRoZXNlIGNyaXRlcmlhLiAgVGhleSBoYXZlIHJlYWwKKwkJICogICAgZGlmZmVyZW5jZXMuCisJCSAqCisJCSAqIDIuIEF0IHRoaXMgcG9pbnQsIHRoZSBmaWxlIGlzIGtub3duIHRvIGJlIG1vZGlmaWVkLAorCQkgKiAgICB3aXRoIHRoZSBzYW1lIG1vZGUgYW5kIHNpemUsIGFuZCB0aGUgb2JqZWN0CisJCSAqICAgIG5hbWUgb2Ygb25lIHNpZGUgaXMgdW5rbm93bi4gIE5lZWQgdG8gaW5zcGVjdAorCQkgKiAgICB0aGUgaWRlbnRpY2FsIGNvbnRlbnRzLgorCQkgKi8KKwkJaWYgKCFESUZGX0ZJTEVfVkFMSUQocC0+b25lKSB8fCAvKiAoMSkgKi8KKwkJICAgICFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSB8fAorCQkgICAgKHAtPm9uZS0+c2hhMV92YWxpZCAmJiBwLT50d28tPnNoYTFfdmFsaWQpIHx8CisJCSAgICAocC0+b25lLT5tb2RlICE9IHAtPnR3by0+bW9kZSkgfHwKKwkJICAgIGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocC0+b25lLCAxKSB8fAorCQkgICAgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT50d28sIDEpIHx8CisJCSAgICAocC0+b25lLT5zaXplICE9IHAtPnR3by0+c2l6ZSkgfHwKKwkJICAgICFkaWZmX2ZpbGVzcGVjX2lzX2lkZW50aWNhbChwLT5vbmUsIHAtPnR3bykpIC8qICgyKSAqLworCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJZWxzZSB7CisJCQkvKgorCQkJICogVGhlIGNhbGxlciBjYW4gc3VidHJhY3QgMSBmcm9tIHNraXBfc3RhdF91bm1hdGNoCisJCQkgKiB0byBkZXRlcm1pbmUgaG93IG1hbnkgcGF0aHMgd2VyZSBkaXJ0eSBvbmx5CisJCQkgKiBkdWUgdG8gc3RhdCBpbmZvIG1pc21hdGNoLgorCQkJICovCisJCQlpZiAoIURJRkZfT1BUX1RTVChkaWZmb3B0LCBOT19JTkRFWCkpCisJCQkJZGlmZm9wdC0+c2tpcF9zdGF0X3VubWF0Y2grKzsKKwkJCWRpZmZfZnJlZV9maWxlcGFpcihwKTsKKwkJfQorCX0KKwlmcmVlKHEtPnF1ZXVlKTsKKwkqcSA9IG91dHE7Cit9CisKK3N0YXRpYyBpbnQgZGlmZm5hbWVjbXAoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICphID0gKigoY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKiopYV8pOworCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpiID0gKigoY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKiopYl8pOworCWNvbnN0IGNoYXIgKm5hbWVfYSwgKm5hbWVfYjsKKworCW5hbWVfYSA9IGEtPm9uZSA/IGEtPm9uZS0+cGF0aCA6IGEtPnR3by0+cGF0aDsKKwluYW1lX2IgPSBiLT5vbmUgPyBiLT5vbmUtPnBhdGggOiBiLT50d28tPnBhdGg7CisJcmV0dXJuIHN0cmNtcChuYW1lX2EsIG5hbWVfYik7Cit9CisKK3ZvaWQgZGlmZmNvcmVfZml4X2RpZmZfaW5kZXgoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKKwlxc29ydChxLT5xdWV1ZSwgcS0+bnIsIHNpemVvZihxLT5xdWV1ZVswXSksIGRpZmZuYW1lY21wKTsKK30KKwordm9pZCBkaWZmY29yZV9zdGQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpZiAob3B0aW9ucy0+c2tpcF9zdGF0X3VubWF0Y2gpCisJCWRpZmZjb3JlX3NraXBfc3RhdF91bm1hdGNoKG9wdGlvbnMpOworCWlmICghb3B0aW9ucy0+Zm91bmRfZm9sbG93KSB7CisJCS8qIFNlZSB0cnlfdG9fZm9sbG93X3JlbmFtZXMoKSBpbiB0cmVlLWRpZmYuYyAqLworCQlpZiAob3B0aW9ucy0+YnJlYWtfb3B0ICE9IC0xKQorCQkJZGlmZmNvcmVfYnJlYWsob3B0aW9ucy0+YnJlYWtfb3B0KTsKKwkJaWYgKG9wdGlvbnMtPmRldGVjdF9yZW5hbWUpCisJCQlkaWZmY29yZV9yZW5hbWUob3B0aW9ucyk7CisJCWlmIChvcHRpb25zLT5icmVha19vcHQgIT0gLTEpCisJCQlkaWZmY29yZV9tZXJnZV9icm9rZW4oKTsKKwl9CisJaWYgKG9wdGlvbnMtPnBpY2theGUpCisJCWRpZmZjb3JlX3BpY2theGUob3B0aW9ucyk7CisJaWYgKG9wdGlvbnMtPm9yZGVyZmlsZSkKKwkJZGlmZmNvcmVfb3JkZXIob3B0aW9ucy0+b3JkZXJmaWxlKTsKKwlpZiAoIW9wdGlvbnMtPmZvdW5kX2ZvbGxvdykKKwkJLyogU2VlIHRyeV90b19mb2xsb3dfcmVuYW1lcygpIGluIHRyZWUtZGlmZi5jICovCisJCWRpZmZfcmVzb2x2ZV9yZW5hbWVfY29weSgpOworCWRpZmZjb3JlX2FwcGx5X2ZpbHRlcihvcHRpb25zLT5maWx0ZXIpOworCisJaWYgKGRpZmZfcXVldWVkX2RpZmYubnIgJiYgIURJRkZfT1BUX1RTVChvcHRpb25zLCBESUZGX0ZST01fQ09OVEVOVFMpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgSEFTX0NIQU5HRVMpOworCWVsc2UKKwkJRElGRl9PUFRfQ0xSKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKKworCW9wdGlvbnMtPmZvdW5kX2ZvbGxvdyA9IDA7Cit9CisKK2ludCBkaWZmX3Jlc3VsdF9jb2RlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgaW50IHN0YXR1cykKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRpZmZfd2Fybl9yZW5hbWVfbGltaXQoImRpZmYucmVuYW1lbGltaXQiLAorCQkJICAgICAgIG9wdC0+bmVlZGVkX3JlbmFtZV9saW1pdCwKKwkJCSAgICAgICBvcHQtPmRlZ3JhZGVkX2NjX3RvX2MpOworCWlmICghRElGRl9PUFRfVFNUKG9wdCwgRVhJVF9XSVRIX1NUQVRVUykgJiYKKwkgICAgIShvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9DSEVDS0RJRkYpKQorCQlyZXR1cm4gc3RhdHVzOworCWlmIChESUZGX09QVF9UU1Qob3B0LCBFWElUX1dJVEhfU1RBVFVTKSAmJgorCSAgICBESUZGX09QVF9UU1Qob3B0LCBIQVNfQ0hBTkdFUykpCisJCXJlc3VsdCB8PSAwMTsKKwlpZiAoKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NIRUNLRElGRikgJiYKKwkgICAgRElGRl9PUFRfVFNUKG9wdCwgQ0hFQ0tfRkFJTEVEKSkKKwkJcmVzdWx0IHw9IDAyOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBkaWZmX2Nhbl9xdWl0X2Vhcmx5KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlyZXR1cm4gKERJRkZfT1BUX1RTVChvcHQsIFFVSUNLKSAmJgorCQkhb3B0LT5maWx0ZXIgJiYKKwkJRElGRl9PUFRfVFNUKG9wdCwgSEFTX0NIQU5HRVMpKTsKK30KKworLyoKKyAqIFNoYWxsIGNoYW5nZXMgdG8gdGhpcyBzdWJtb2R1bGUgYmUgaWdub3JlZD8KKyAqCisgKiBTdWJtb2R1bGUgY2hhbmdlcyBjYW4gYmUgY29uZmlndXJlZCB0byBiZSBpZ25vcmVkIHNlcGFyYXRlbHkgZm9yIGVhY2ggcGF0aCwKKyAqIGJ1dCB0aGF0IGNvbmZpZ3VyYXRpb24gY2FuIGJlIG92ZXJyaWRkZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorICovCitzdGF0aWMgaW50IGlzX3N1Ym1vZHVsZV9pZ25vcmVkKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGlnbm9yZWQgPSAwOworCXVuc2lnbmVkIG9yaWdfZmxhZ3MgPSBvcHRpb25zLT5mbGFnczsKKwlpZiAoIURJRkZfT1BUX1RTVChvcHRpb25zLCBPVkVSUklERV9TVUJNT0RVTEVfQ09ORklHKSkKKwkJc2V0X2RpZmZvcHRfZmxhZ3NfZnJvbV9zdWJtb2R1bGVfY29uZmlnKG9wdGlvbnMsIHBhdGgpOworCWlmIChESUZGX09QVF9UU1Qob3B0aW9ucywgSUdOT1JFX1NVQk1PRFVMRVMpKQorCQlpZ25vcmVkID0gMTsKKwlvcHRpb25zLT5mbGFncyA9IG9yaWdfZmxhZ3M7CisJcmV0dXJuIGlnbm9yZWQ7Cit9CisKK3ZvaWQgZGlmZl9hZGRyZW1vdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgICAgaW50IHNoYTFfdmFsaWQsCisJCSAgICBjb25zdCBjaGFyICpjb25jYXRwYXRoLCB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpCit7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwgKnR3bzsKKworCWlmIChTX0lTR0lUTElOSyhtb2RlKSAmJiBpc19zdWJtb2R1bGVfaWdub3JlZChjb25jYXRwYXRoLCBvcHRpb25zKSkKKwkJcmV0dXJuOworCisJLyogVGhpcyBtYXkgbG9vayBvZGQsIGJ1dCBpdCBpcyBhIHByZXBhcmF0aW9uIGZvcgorCSAqIGZlZWRpbmcgInRoZXJlIGFyZSB1bmNoYW5nZWQgZmlsZXMgd2hpY2ggc2hvdWxkCisJICogbm90IHByb2R1Y2UgZGlmZnMsIGJ1dCB3aGVuIHlvdSBhcmUgZG9pbmcgY29weQorCSAqIGRldGVjdGlvbiB5b3Ugd291bGQgbmVlZCB0aGVtLCBzbyBoZXJlIHRoZXkgYXJlIgorCSAqIGVudHJpZXMgdG8gdGhlIGRpZmYtY29yZS4gIFRoZXkgd2lsbCBiZSBwcmVmaXhlZAorCSAqIHdpdGggc29tZXRoaW5nIGxpa2UgJz0nIG9yICcqJyAoSSBoYXZlbid0IGRlY2lkZWQKKwkgKiB3aGljaCBidXQgc2hvdWxkIG5vdCBtYWtlIGFueSBkaWZmZXJlbmNlKS4KKwkgKiBGZWVkaW5nIHRoZSBzYW1lIG5ldyBhbmQgb2xkIHRvIGRpZmZfY2hhbmdlKCkKKwkgKiBhbHNvIGhhcyB0aGUgc2FtZSBlZmZlY3QuCisJICogQmVmb3JlIHRoZSBmaW5hbCBvdXRwdXQgaGFwcGVucywgdGhleSBhcmUgcHJ1bmVkIGFmdGVyCisJICogbWVyZ2VkIGludG8gcmVuYW1lL2NvcHkgcGFpcnMgYXMgYXBwcm9wcmlhdGUuCisJICovCisJaWYgKERJRkZfT1BUX1RTVChvcHRpb25zLCBSRVZFUlNFX0RJRkYpKQorCQlhZGRyZW1vdmUgPSAoYWRkcmVtb3ZlID09ICcrJyA/ICctJyA6CisJCQkgICAgIGFkZHJlbW92ZSA9PSAnLScgPyAnKycgOiBhZGRyZW1vdmUpOworCisJaWYgKG9wdGlvbnMtPnByZWZpeCAmJgorCSAgICBzdHJuY21wKGNvbmNhdHBhdGgsIG9wdGlvbnMtPnByZWZpeCwgb3B0aW9ucy0+cHJlZml4X2xlbmd0aCkpCisJCXJldHVybjsKKworCW9uZSA9IGFsbG9jX2ZpbGVzcGVjKGNvbmNhdHBhdGgpOworCXR3byA9IGFsbG9jX2ZpbGVzcGVjKGNvbmNhdHBhdGgpOworCisJaWYgKGFkZHJlbW92ZSAhPSAnKycpCisJCWZpbGxfZmlsZXNwZWMob25lLCBzaGExLCBzaGExX3ZhbGlkLCBtb2RlKTsKKwlpZiAoYWRkcmVtb3ZlICE9ICctJykgeworCQlmaWxsX2ZpbGVzcGVjKHR3bywgc2hhMSwgc2hhMV92YWxpZCwgbW9kZSk7CisJCXR3by0+ZGlydHlfc3VibW9kdWxlID0gZGlydHlfc3VibW9kdWxlOworCX0KKworCWRpZmZfcXVldWUoJmRpZmZfcXVldWVkX2RpZmYsIG9uZSwgdHdvKTsKKwlpZiAoIURJRkZfT1BUX1RTVChvcHRpb25zLCBESUZGX0ZST01fQ09OVEVOVFMpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgSEFTX0NIQU5HRVMpOworfQorCit2b2lkIGRpZmZfY2hhbmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSB1bnNpZ25lZCBvbGRfbW9kZSwgdW5zaWduZWQgbmV3X21vZGUsCisJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAorCQkgaW50IG9sZF9zaGExX3ZhbGlkLCBpbnQgbmV3X3NoYTFfdmFsaWQsCisJCSBjb25zdCBjaGFyICpjb25jYXRwYXRoLAorCQkgdW5zaWduZWQgb2xkX2RpcnR5X3N1Ym1vZHVsZSwgdW5zaWduZWQgbmV3X2RpcnR5X3N1Ym1vZHVsZSkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOworCisJaWYgKFNfSVNHSVRMSU5LKG9sZF9tb2RlKSAmJiBTX0lTR0lUTElOSyhuZXdfbW9kZSkgJiYKKwkgICAgaXNfc3VibW9kdWxlX2lnbm9yZWQoY29uY2F0cGF0aCwgb3B0aW9ucykpCisJCXJldHVybjsKKworCWlmIChESUZGX09QVF9UU1Qob3B0aW9ucywgUkVWRVJTRV9ESUZGKSkgeworCQl1bnNpZ25lZCB0bXA7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRtcF9jOworCQl0bXAgPSBvbGRfbW9kZTsgb2xkX21vZGUgPSBuZXdfbW9kZTsgbmV3X21vZGUgPSB0bXA7CisJCXRtcF9jID0gb2xkX3NoYTE7IG9sZF9zaGExID0gbmV3X3NoYTE7IG5ld19zaGExID0gdG1wX2M7CisJCXRtcCA9IG9sZF9zaGExX3ZhbGlkOyBvbGRfc2hhMV92YWxpZCA9IG5ld19zaGExX3ZhbGlkOworCQkJbmV3X3NoYTFfdmFsaWQgPSB0bXA7CisJCXRtcCA9IG9sZF9kaXJ0eV9zdWJtb2R1bGU7IG9sZF9kaXJ0eV9zdWJtb2R1bGUgPSBuZXdfZGlydHlfc3VibW9kdWxlOworCQkJbmV3X2RpcnR5X3N1Ym1vZHVsZSA9IHRtcDsKKwl9CisKKwlpZiAob3B0aW9ucy0+cHJlZml4ICYmCisJICAgIHN0cm5jbXAoY29uY2F0cGF0aCwgb3B0aW9ucy0+cHJlZml4LCBvcHRpb25zLT5wcmVmaXhfbGVuZ3RoKSkKKwkJcmV0dXJuOworCisJb25lID0gYWxsb2NfZmlsZXNwZWMoY29uY2F0cGF0aCk7CisJdHdvID0gYWxsb2NfZmlsZXNwZWMoY29uY2F0cGF0aCk7CisJZmlsbF9maWxlc3BlYyhvbmUsIG9sZF9zaGExLCBvbGRfc2hhMV92YWxpZCwgb2xkX21vZGUpOworCWZpbGxfZmlsZXNwZWModHdvLCBuZXdfc2hhMSwgbmV3X3NoYTFfdmFsaWQsIG5ld19tb2RlKTsKKwlvbmUtPmRpcnR5X3N1Ym1vZHVsZSA9IG9sZF9kaXJ0eV9zdWJtb2R1bGU7CisJdHdvLT5kaXJ0eV9zdWJtb2R1bGUgPSBuZXdfZGlydHlfc3VibW9kdWxlOworCisJZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgb25lLCB0d28pOworCWlmICghRElGRl9PUFRfVFNUKG9wdGlvbnMsIERJRkZfRlJPTV9DT05URU5UUykpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBIQVNfQ0hBTkdFUyk7Cit9CisKK3N0cnVjdCBkaWZmX2ZpbGVwYWlyICpkaWZmX3VubWVyZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOworCisJaWYgKG9wdGlvbnMtPnByZWZpeCAmJgorCSAgICBzdHJuY21wKHBhdGgsIG9wdGlvbnMtPnByZWZpeCwgb3B0aW9ucy0+cHJlZml4X2xlbmd0aCkpCisJCXJldHVybiBOVUxMOworCisJb25lID0gYWxsb2NfZmlsZXNwZWMocGF0aCk7CisJdHdvID0gYWxsb2NfZmlsZXNwZWMocGF0aCk7CisJcGFpciA9IGRpZmZfcXVldWUoJmRpZmZfcXVldWVkX2RpZmYsIG9uZSwgdHdvKTsKKwlwYWlyLT5pc191bm1lcmdlZCA9IDE7CisJcmV0dXJuIHBhaXI7Cit9CisKK3N0YXRpYyBjaGFyICpydW5fdGV4dGNvbnYoY29uc3QgY2hhciAqcGdtLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYywKKwkJc2l6ZV90ICpvdXRzaXplKQoreworCXN0cnVjdCBkaWZmX3RlbXBmaWxlICp0ZW1wOworCWNvbnN0IGNoYXIgKmFyZ3ZbM107CisJY29uc3QgY2hhciAqKmFyZyA9IGFyZ3Y7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZXJyID0gMDsKKworCXRlbXAgPSBwcmVwYXJlX3RlbXBfZmlsZShzcGVjLT5wYXRoLCBzcGVjKTsKKwkqYXJnKysgPSBwZ207CisJKmFyZysrID0gdGVtcC0+bmFtZTsKKwkqYXJnID0gTlVMTDsKKworCW1lbXNldCgmY2hpbGQsIDAsIHNpemVvZihjaGlsZCkpOworCWNoaWxkLnVzZV9zaGVsbCA9IDE7CisJY2hpbGQuYXJndiA9IGFyZ3Y7CisJY2hpbGQub3V0ID0gLTE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNoaWxkKSkgeworCQlyZW1vdmVfdGVtcGZpbGUoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIGNoaWxkLm91dCwgMCkgPCAwKQorCQllcnIgPSBlcnJvcigiZXJyb3IgcmVhZGluZyBmcm9tIHRleHRjb252IGNvbW1hbmQgJyVzJyIsIHBnbSk7CisJY2xvc2UoY2hpbGQub3V0KTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmY2hpbGQpIHx8IGVycikgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmVtb3ZlX3RlbXBmaWxlKCk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZW1vdmVfdGVtcGZpbGUoKTsKKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIG91dHNpemUpOworfQorCitzaXplX3QgZmlsbF90ZXh0Y29udihzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXIsCisJCSAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmLAorCQkgICAgIGNoYXIgKipvdXRidWYpCit7CisJc2l6ZV90IHNpemU7CisKKwlpZiAoIWRyaXZlciB8fCAhZHJpdmVyLT50ZXh0Y29udikgeworCQlpZiAoIURJRkZfRklMRV9WQUxJRChkZikpIHsKKwkJCSpvdXRidWYgPSAiIjsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKGRmLCAwKSkKKwkJCWRpZSgidW5hYmxlIHRvIHJlYWQgZmlsZXMgdG8gZGlmZiIpOworCQkqb3V0YnVmID0gZGYtPmRhdGE7CisJCXJldHVybiBkZi0+c2l6ZTsKKwl9CisKKwlpZiAoZHJpdmVyLT50ZXh0Y29udl9jYWNoZSAmJiBkZi0+c2hhMV92YWxpZCkgeworCQkqb3V0YnVmID0gbm90ZXNfY2FjaGVfZ2V0KGRyaXZlci0+dGV4dGNvbnZfY2FjaGUsIGRmLT5zaGExLAorCQkJCQkgICZzaXplKTsKKwkJaWYgKCpvdXRidWYpCisJCQlyZXR1cm4gc2l6ZTsKKwl9CisKKwkqb3V0YnVmID0gcnVuX3RleHRjb252KGRyaXZlci0+dGV4dGNvbnYsIGRmLCAmc2l6ZSk7CisJaWYgKCEqb3V0YnVmKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKKworCWlmIChkcml2ZXItPnRleHRjb252X2NhY2hlICYmIGRmLT5zaGExX3ZhbGlkKSB7CisJCS8qIGlnbm9yZSBlcnJvcnMsIGFzIHdlIG1pZ2h0IGJlIGluIGEgcmVhZG9ubHkgcmVwb3NpdG9yeSAqLworCQlub3Rlc19jYWNoZV9wdXQoZHJpdmVyLT50ZXh0Y29udl9jYWNoZSwgZGYtPnNoYTEsICpvdXRidWYsCisJCQkJc2l6ZSk7CisJCS8qCisJCSAqIHdlIGNvdWxkIHNhdmUgdXAgY2hhbmdlcyBhbmQgZmx1c2ggdGhlbSBhbGwgYXQgdGhlIGVuZCwKKwkJICogYnV0IHdlIHdvdWxkIG5lZWQgYW4gZXh0cmEgY2FsbCBhZnRlciBhbGwgZGlmZmluZyBpcyBkb25lLgorCQkgKiBTaW5jZSBnZW5lcmF0aW5nIGEgY2FjaGUgZW50cnkgaXMgdGhlIHNsb3cgcGF0aCBhbnl3YXksCisJCSAqIHRoaXMgZXh0cmEgb3ZlcmhlYWQgcHJvYmFibHkgaXNuJ3QgYSBiaWcgZGVhbC4KKwkJICovCisJCW5vdGVzX2NhY2hlX3dyaXRlKGRyaXZlci0+dGV4dGNvbnZfY2FjaGUpOworCX0KKworCXJldHVybiBzaXplOworfQpkaWZmIC0tZ2l0IGEvZGlmZi5oIGIvZGlmZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NThmODUKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmLmgKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2lmbmRlZiBESUZGX0gKKyNkZWZpbmUgRElGRl9ICisKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKworc3RydWN0IHJldl9pbmZvOworc3RydWN0IGRpZmZfb3B0aW9uczsKK3N0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdDsKK3N0cnVjdCBzdHJidWY7CitzdHJ1Y3QgZGlmZl9maWxlc3BlYzsKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXI7CitzdHJ1Y3Qgc2hhMV9hcnJheTsKK3N0cnVjdCBjb21taXQ7CisKK3R5cGVkZWYgdm9pZCAoKmNoYW5nZV9mbl90KShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAorCQkgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwKKwkJIGludCBvbGRfc2hhMV92YWxpZCwgaW50IG5ld19zaGExX3ZhbGlkLAorCQkgY29uc3QgY2hhciAqZnVsbHBhdGgsCisJCSB1bnNpZ25lZCBvbGRfZGlydHlfc3VibW9kdWxlLCB1bnNpZ25lZCBuZXdfZGlydHlfc3VibW9kdWxlKTsKKwordHlwZWRlZiB2b2lkICgqYWRkX3JlbW92ZV9mbl90KShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICAgaW50IGFkZHJlbW92ZSwgdW5zaWduZWQgbW9kZSwKKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCSAgICBpbnQgc2hhMV92YWxpZCwKKwkJICAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLCB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpOworCit0eXBlZGVmIHZvaWQgKCpkaWZmX2Zvcm1hdF9mbl90KShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHZvaWQgKmRhdGEpOworCit0eXBlZGVmIHN0cnVjdCBzdHJidWYgKigqZGlmZl9wcmVmaXhfZm5fdCkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCB2b2lkICpkYXRhKTsKKworI2RlZmluZSBESUZGX0ZPUk1BVF9SQVcJCTB4MDAwMQorI2RlZmluZSBESUZGX0ZPUk1BVF9ESUZGU1RBVAkweDAwMDIKKyNkZWZpbmUgRElGRl9GT1JNQVRfTlVNU1RBVAkweDAwMDQKKyNkZWZpbmUgRElGRl9GT1JNQVRfU1VNTUFSWQkweDAwMDgKKyNkZWZpbmUgRElGRl9GT1JNQVRfUEFUQ0gJMHgwMDEwCisjZGVmaW5lIERJRkZfRk9STUFUX1NIT1JUU1RBVAkweDAwMjAKKyNkZWZpbmUgRElGRl9GT1JNQVRfRElSU1RBVAkweDAwNDAKKworLyogVGhlc2Ugb3ZlcnJpZGUgYWxsIGFib3ZlICovCisjZGVmaW5lIERJRkZfRk9STUFUX05BTUUJMHgwMTAwCisjZGVmaW5lIERJRkZfRk9STUFUX05BTUVfU1RBVFVTCTB4MDIwMAorI2RlZmluZSBESUZGX0ZPUk1BVF9DSEVDS0RJRkYJMHgwNDAwCisKKy8qIFNhbWUgYXMgb3V0cHV0X2Zvcm1hdCA9IDAgYnV0IHdlIGtub3cgdGhhdCAtcyBmbGFnIHdhcyBnaXZlbgorICogYW5kIHdlIHNob3VsZCBub3QgZ2l2ZSBkZWZhdWx0IHZhbHVlIHRvIG91dHB1dF9mb3JtYXQuCisgKi8KKyNkZWZpbmUgRElGRl9GT1JNQVRfTk9fT1VUUFVUCTB4MDgwMAorCisjZGVmaW5lIERJRkZfRk9STUFUX0NBTExCQUNLCTB4MTAwMAorCisjZGVmaW5lIERJRkZfT1BUX1JFQ1VSU0lWRSAgICAgICAgICAgKDEgPDwgIDApCisjZGVmaW5lIERJRkZfT1BUX1RSRUVfSU5fUkVDVVJTSVZFICAgKDEgPDwgIDEpCisjZGVmaW5lIERJRkZfT1BUX0JJTkFSWSAgICAgICAgICAgICAgKDEgPDwgIDIpCisjZGVmaW5lIERJRkZfT1BUX1RFWFQgICAgICAgICAgICAgICAgKDEgPDwgIDMpCisjZGVmaW5lIERJRkZfT1BUX0ZVTExfSU5ERVggICAgICAgICAgKDEgPDwgIDQpCisjZGVmaW5lIERJRkZfT1BUX1NJTEVOVF9PTl9SRU1PVkUgICAgKDEgPDwgIDUpCisjZGVmaW5lIERJRkZfT1BUX0ZJTkRfQ09QSUVTX0hBUkRFUiAgKDEgPDwgIDYpCisjZGVmaW5lIERJRkZfT1BUX0ZPTExPV19SRU5BTUVTICAgICAgKDEgPDwgIDcpCisjZGVmaW5lIERJRkZfT1BUX1JFTkFNRV9FTVBUWSAgICAgICAgKDEgPDwgIDgpCisvKiAoMSA8PCAgOSkgdW51c2VkICovCisjZGVmaW5lIERJRkZfT1BUX0hBU19DSEFOR0VTICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIERJRkZfT1BUX1FVSUNLICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjZGVmaW5lIERJRkZfT1BUX05PX0lOREVYICAgICAgICAgICAgKDEgPDwgMTIpCisjZGVmaW5lIERJRkZfT1BUX0FMTE9XX0VYVEVSTkFMICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIERJRkZfT1BUX0VYSVRfV0lUSF9TVEFUVVMgICAgKDEgPDwgMTQpCisjZGVmaW5lIERJRkZfT1BUX1JFVkVSU0VfRElGRiAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIERJRkZfT1BUX0NIRUNLX0ZBSUxFRCAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIERJRkZfT1BUX1JFTEFUSVZFX05BTUUgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIERJRkZfT1BUX0lHTk9SRV9TVUJNT0RVTEVTICAgKDEgPDwgMTgpCisjZGVmaW5lIERJRkZfT1BUX0RJUlNUQVRfQ1VNVUxBVElWRSAgKDEgPDwgMTkpCisjZGVmaW5lIERJRkZfT1BUX0RJUlNUQVRfQllfRklMRSAgICAgKDEgPDwgMjApCisjZGVmaW5lIERJRkZfT1BUX0FMTE9XX1RFWFRDT05WICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIERJRkZfT1BUX0RJRkZfRlJPTV9DT05URU5UUyAgKDEgPDwgMjIpCisjZGVmaW5lIERJRkZfT1BUX1NVQk1PRFVMRV9MT0cgICAgICAgKDEgPDwgMjMpCisjZGVmaW5lIERJRkZfT1BUX0RJUlRZX1NVQk1PRFVMRVMgICAgKDEgPDwgMjQpCisjZGVmaW5lIERJRkZfT1BUX0lHTk9SRV9VTlRSQUNLRURfSU5fU1VCTU9EVUxFUyAoMSA8PCAyNSkKKyNkZWZpbmUgRElGRl9PUFRfSUdOT1JFX0RJUlRZX1NVQk1PRFVMRVMgKDEgPDwgMjYpCisjZGVmaW5lIERJRkZfT1BUX09WRVJSSURFX1NVQk1PRFVMRV9DT05GSUcgKDEgPDwgMjcpCisjZGVmaW5lIERJRkZfT1BUX0RJUlNUQVRfQllfTElORSAgICAgKDEgPDwgMjgpCisjZGVmaW5lIERJRkZfT1BUX0ZVTkNDT05URVhUICAgICAgICAgKDEgPDwgMjkpCisjZGVmaW5lIERJRkZfT1BUX1BJQ0tBWEVfSUdOT1JFX0NBU0UgKDEgPDwgMzApCisKKyNkZWZpbmUgRElGRl9PUFRfVFNUKG9wdHMsIGZsYWcpICAgICgob3B0cyktPmZsYWdzICYgRElGRl9PUFRfIyNmbGFnKQorI2RlZmluZSBESUZGX09QVF9TRVQob3B0cywgZmxhZykgICAgKChvcHRzKS0+ZmxhZ3MgfD0gRElGRl9PUFRfIyNmbGFnKQorI2RlZmluZSBESUZGX09QVF9DTFIob3B0cywgZmxhZykgICAgKChvcHRzKS0+ZmxhZ3MgJj0gfkRJRkZfT1BUXyMjZmxhZykKKyNkZWZpbmUgRElGRl9YRExfVFNUKG9wdHMsIGZsYWcpICAgICgob3B0cyktPnhkbF9vcHRzICYgWERGXyMjZmxhZykKKyNkZWZpbmUgRElGRl9YRExfU0VUKG9wdHMsIGZsYWcpICAgICgob3B0cyktPnhkbF9vcHRzIHw9IFhERl8jI2ZsYWcpCisjZGVmaW5lIERJRkZfWERMX0NMUihvcHRzLCBmbGFnKSAgICAoKG9wdHMpLT54ZGxfb3B0cyAmPSB+WERGXyMjZmxhZykKKworI2RlZmluZSBESUZGX1dJVEhfQUxHKG9wdHMsIGZsYWcpICAgKCgob3B0cyktPnhkbF9vcHRzICYgflhERl9ESUZGX0FMR09SSVRITV9NQVNLKSB8IFhERl8jI2ZsYWcpCisKK2VudW0gZGlmZl93b3Jkc190eXBlIHsKKwlESUZGX1dPUkRTX05PTkUgPSAwLAorCURJRkZfV09SRFNfUE9SQ0VMQUlOLAorCURJRkZfV09SRFNfUExBSU4sCisJRElGRl9XT1JEU19DT0xPUgorfTsKKworc3RydWN0IGRpZmZfb3B0aW9ucyB7CisJY29uc3QgY2hhciAqZmlsdGVyOworCWNvbnN0IGNoYXIgKm9yZGVyZmlsZTsKKwljb25zdCBjaGFyICpwaWNrYXhlOworCWNvbnN0IGNoYXIgKnNpbmdsZV9mb2xsb3c7CisJY29uc3QgY2hhciAqYV9wcmVmaXgsICpiX3ByZWZpeDsKKwl1bnNpZ25lZCBmbGFnczsKKwlpbnQgdXNlX2NvbG9yOworCWludCBjb250ZXh0OworCWludCBpbnRlcmh1bmtjb250ZXh0OworCWludCBicmVha19vcHQ7CisJaW50IGRldGVjdF9yZW5hbWU7CisJaW50IGlycmV2ZXJzaWJsZV9kZWxldGU7CisJaW50IHNraXBfc3RhdF91bm1hdGNoOworCWludCBsaW5lX3Rlcm1pbmF0aW9uOworCWludCBvdXRwdXRfZm9ybWF0OworCWludCBwaWNrYXhlX29wdHM7CisJaW50IHJlbmFtZV9zY29yZTsKKwlpbnQgcmVuYW1lX2xpbWl0OworCWludCBuZWVkZWRfcmVuYW1lX2xpbWl0OworCWludCBkZWdyYWRlZF9jY190b19jOworCWludCBzaG93X3JlbmFtZV9wcm9ncmVzczsKKwlpbnQgZGlyc3RhdF9wZXJtaWxsZTsKKwlpbnQgc2V0dXA7CisJaW50IGFiYnJldjsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJaW50IHByZWZpeF9sZW5ndGg7CisJY29uc3QgY2hhciAqc3RhdF9zZXA7CisJbG9uZyB4ZGxfb3B0czsKKworCWludCBzdGF0X3dpZHRoOworCWludCBzdGF0X25hbWVfd2lkdGg7CisJaW50IHN0YXRfZ3JhcGhfd2lkdGg7CisJaW50IHN0YXRfY291bnQ7CisJY29uc3QgY2hhciAqd29yZF9yZWdleDsKKwllbnVtIGRpZmZfd29yZHNfdHlwZSB3b3JkX2RpZmY7CisKKwkvKiB0aGlzIGlzIHNldCBieSBkaWZmY29yZSBmb3IgRElGRl9GT1JNQVRfUEFUQ0ggKi8KKwlpbnQgZm91bmRfY2hhbmdlczsKKworCS8qIHRvIHN1cHBvcnQgaW50ZXJuYWwgZGlmZiByZWN1cnNpb24gYnkgLS1mb2xsb3cgaGFjayovCisJaW50IGZvdW5kX2ZvbGxvdzsKKworCUZJTEUgKmZpbGU7CisJaW50IGNsb3NlX2ZpbGU7CisKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJY2hhbmdlX2ZuX3QgY2hhbmdlOworCWFkZF9yZW1vdmVfZm5fdCBhZGRfcmVtb3ZlOworCWRpZmZfZm9ybWF0X2ZuX3QgZm9ybWF0X2NhbGxiYWNrOworCXZvaWQgKmZvcm1hdF9jYWxsYmFja19kYXRhOworCWRpZmZfcHJlZml4X2ZuX3Qgb3V0cHV0X3ByZWZpeDsKKwlpbnQgb3V0cHV0X3ByZWZpeF9sZW5ndGg7CisJdm9pZCAqb3V0cHV0X3ByZWZpeF9kYXRhOworfTsKKworZW51bSBjb2xvcl9kaWZmIHsKKwlESUZGX1JFU0VUID0gMCwKKwlESUZGX1BMQUlOID0gMSwKKwlESUZGX01FVEFJTkZPID0gMiwKKwlESUZGX0ZSQUdJTkZPID0gMywKKwlESUZGX0ZJTEVfT0xEID0gNCwKKwlESUZGX0ZJTEVfTkVXID0gNSwKKwlESUZGX0NPTU1JVCA9IDYsCisJRElGRl9XSElURVNQQUNFID0gNywKKwlESUZGX0ZVTkNJTkZPID0gOAorfTsKK2NvbnN0IGNoYXIgKmRpZmZfZ2V0X2NvbG9yKGludCBkaWZmX3VzZV9jb2xvciwgZW51bSBjb2xvcl9kaWZmIGl4KTsKKyNkZWZpbmUgZGlmZl9nZXRfY29sb3Jfb3B0KG8sIGl4KSBcCisJZGlmZl9nZXRfY29sb3IoKG8pLT51c2VfY29sb3IsIGl4KQorCisKK2V4dGVybiBjb25zdCBjaGFyIG1pbWVfYm91bmRhcnlfbGVhZGVyW107CisKK2V4dGVybiB2b2lkIGRpZmZfdHJlZV9zZXR1cF9wYXRocyhjb25zdCBjaGFyICoqcGF0aHMsIHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CitleHRlcm4gdm9pZCBkaWZmX3RyZWVfcmVsZWFzZV9wYXRocyhzdHJ1Y3QgZGlmZl9vcHRpb25zICopOworZXh0ZXJuIGludCBkaWZmX3RyZWUoc3RydWN0IHRyZWVfZGVzYyAqdDEsIHN0cnVjdCB0cmVlX2Rlc2MgKnQyLAorCQkgICAgIGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCk7CitleHRlcm4gaW50IGRpZmZfdHJlZV9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LAorCQkJICBjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpOworZXh0ZXJuIGludCBkaWZmX3Jvb3RfdHJlZV9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldywgY29uc3QgY2hhciAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpOworCitzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggeworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqbmV4dDsKKwlpbnQgbGVuOworCWNoYXIgKnBhdGg7CisJdW5zaWduZWQgaW50IG1vZGU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhcmVudCB7CisJCWNoYXIgc3RhdHVzOworCQl1bnNpZ25lZCBpbnQgbW9kZTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl9IHBhcmVudFtGTEVYX0FSUkFZXTsKK307CisjZGVmaW5lIGNvbWJpbmVfZGlmZl9wYXRoX3NpemUobiwgbCkgXAorCShzaXplb2Yoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoKSArIFwKKwkgc2l6ZW9mKHN0cnVjdCBjb21iaW5lX2RpZmZfcGFyZW50KSAqIChuKSArIChsKSArIDEpCisKK2V4dGVybiB2b2lkIHNob3dfY29tYmluZWRfZGlmZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmVsZW0sIGludCBudW1fcGFyZW50LAorCQkJICAgICAgaW50IGRlbnNlLCBzdHJ1Y3QgcmV2X2luZm8gKik7CisKK2V4dGVybiB2b2lkIGRpZmZfdHJlZV9jb21iaW5lZChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBzdHJ1Y3Qgc2hhMV9hcnJheSAqcGFyZW50cywgaW50IGRlbnNlLCBzdHJ1Y3QgcmV2X2luZm8gKnJldik7CisKK2V4dGVybiB2b2lkIGRpZmZfdHJlZV9jb21iaW5lZF9tZXJnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBkZW5zZSwgc3RydWN0IHJldl9pbmZvICpyZXYpOworCit2b2lkIGRpZmZfc2V0X21uZW1vbmljX3ByZWZpeChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKKworZXh0ZXJuIGludCBkaWZmX2Nhbl9xdWl0X2Vhcmx5KHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CisKK2V4dGVybiB2b2lkIGRpZmZfYWRkcmVtb3ZlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwKKwkJCSAgIGludCBhZGRyZW1vdmUsCisJCQkgICB1bnNpZ25lZCBtb2RlLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgIGludCBzaGExX3ZhbGlkLAorCQkJICAgY29uc3QgY2hhciAqZnVsbHBhdGgsIHVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSk7CisKK2V4dGVybiB2b2lkIGRpZmZfY2hhbmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwKKwkJCXVuc2lnbmVkIG1vZGUxLCB1bnNpZ25lZCBtb2RlMiwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGEyLAorCQkJaW50IHNoYTFfdmFsaWQsCisJCQlpbnQgc2hhMl92YWxpZCwKKwkJCWNvbnN0IGNoYXIgKmZ1bGxwYXRoLAorCQkJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlMSwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlMik7CisKK2V4dGVybiBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZGlmZl91bm1lcmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgY29uc3QgY2hhciAqcGF0aCk7CisKKyNkZWZpbmUgRElGRl9TRVRVUF9SRVZFUlNFICAgICAgCTEKKyNkZWZpbmUgRElGRl9TRVRVUF9VU0VfQ0FDSEUJCTIKKyNkZWZpbmUgRElGRl9TRVRVUF9VU0VfU0laRV9DQUNIRQk0CisKKy8qCisgKiBQb29yIG1hbidzIGFsdGVybmF0aXZlIHRvIHBhcnNlLW9wdGlvbiwgdG8gYWxsb3cgYm90aCBzdGlja2VkIGZvcm0KKyAqICgtLW9wdGlvbj12YWx1ZSkgYW5kIHNlcGFyYXRlIGZvcm0gKC0tb3B0aW9uIHZhbHVlKS4KKyAqLworZXh0ZXJuIGludCBwYXJzZV9sb25nX29wdChjb25zdCBjaGFyICpvcHQsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJIGNvbnN0IGNoYXIgKipvcHRhcmcpOworCitleHRlcm4gaW50IGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CitleHRlcm4gaW50IGdpdF9kaWZmX3VpX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CitleHRlcm4gdm9pZCBkaWZmX3NldHVwKHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CitleHRlcm4gaW50IGRpZmZfb3B0X3BhcnNlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgY29uc3QgY2hhciAqKiwgaW50KTsKK2V4dGVybiB2b2lkIGRpZmZfc2V0dXBfZG9uZShzdHJ1Y3QgZGlmZl9vcHRpb25zICopOworCisjZGVmaW5lIERJRkZfREVURUNUX1JFTkFNRQkxCisjZGVmaW5lIERJRkZfREVURUNUX0NPUFkJMgorCisjZGVmaW5lIERJRkZfUElDS0FYRV9BTEwJMQorI2RlZmluZSBESUZGX1BJQ0tBWEVfUkVHRVgJMgorCisjZGVmaW5lIERJRkZfUElDS0FYRV9LSU5EX1MJNCAvKiB0cmFkaXRpb25hbCBwbHVtYmluZyBjb3VudGVyICovCisjZGVmaW5lIERJRkZfUElDS0FYRV9LSU5EX0cJOCAvKiBncmVwIGluIHRoZSBwYXRjaCAqLworCitleHRlcm4gdm9pZCBkaWZmY29yZV9zdGQoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKK2V4dGVybiB2b2lkIGRpZmZjb3JlX2ZpeF9kaWZmX2luZGV4KHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CisKKyNkZWZpbmUgQ09NTU9OX0RJRkZfT1BUSU9OU19IRUxQIFwKKyJcbmNvbW1vbiBkaWZmIG9wdGlvbnM6XG4iIFwKKyIgIC16ICAgICAgICAgICAgb3V0cHV0IGRpZmYtcmF3IHdpdGggbGluZXMgdGVybWluYXRlZCB3aXRoIE5VTC5cbiIgXAorIiAgLXAgICAgICAgICAgICBvdXRwdXQgcGF0Y2ggZm9ybWF0LlxuIiBcCisiICAtdSAgICAgICAgICAgIHN5bm9ueW0gZm9yIC1wLlxuIiBcCisiICAtLXBhdGNoLXdpdGgtcmF3XG4iIFwKKyIgICAgICAgICAgICAgICAgb3V0cHV0IGJvdGggYSBwYXRjaCBhbmQgdGhlIGRpZmYtcmF3IGZvcm1hdC5cbiIgXAorIiAgLS1zdGF0ICAgICAgICBzaG93IGRpZmZzdGF0IGluc3RlYWQgb2YgcGF0Y2guXG4iIFwKKyIgIC0tbnVtc3RhdCAgICAgc2hvdyBudW1lcmljIGRpZmZzdGF0IGluc3RlYWQgb2YgcGF0Y2guXG4iIFwKKyIgIC0tcGF0Y2gtd2l0aC1zdGF0XG4iIFwKKyIgICAgICAgICAgICAgICAgb3V0cHV0IGEgcGF0Y2ggYW5kIHByZXBlbmQgaXRzIGRpZmZzdGF0LlxuIiBcCisiICAtLW5hbWUtb25seSAgIHNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzLlxuIiBcCisiICAtLW5hbWUtc3RhdHVzIHNob3cgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzLlxuIiBcCisiICAtLWZ1bGwtaW5kZXggIHNob3cgZnVsbCBvYmplY3QgbmFtZSBvbiBpbmRleCBsaW5lcy5cbiIgXAorIiAgLS1hYmJyZXY9PG4+ICBhYmJyZXZpYXRlIG9iamVjdCBuYW1lcyBpbiBkaWZmLXRyZWUgaGVhZGVyIGFuZCBkaWZmLXJhdy5cbiIgXAorIiAgLVIgICAgICAgICAgICBzd2FwIGlucHV0IGZpbGUgcGFpcnMuXG4iIFwKKyIgIC1CICAgICAgICAgICAgZGV0ZWN0IGNvbXBsZXRlIHJld3JpdGVzLlxuIiBcCisiICAtTSAgICAgICAgICAgIGRldGVjdCByZW5hbWVzLlxuIiBcCisiICAtQyAgICAgICAgICAgIGRldGVjdCBjb3BpZXMuXG4iIFwKKyIgIC0tZmluZC1jb3BpZXMtaGFyZGVyXG4iIFwKKyIgICAgICAgICAgICAgICAgdHJ5IHVuY2hhbmdlZCBmaWxlcyBhcyBjYW5kaWRhdGUgZm9yIGNvcHkgZGV0ZWN0aW9uLlxuIiBcCisiICAtbDxuPiAgICAgICAgIGxpbWl0IHJlbmFtZSBhdHRlbXB0cyB1cCB0byA8bj4gcGF0aHMuXG4iIFwKKyIgIC1PPGZpbGU+ICAgICAgcmVvcmRlciBkaWZmcyBhY2NvcmRpbmcgdG8gdGhlIDxmaWxlPi5cbiIgXAorIiAgLVM8c3RyaW5nPiAgICBmaW5kIGZpbGVwYWlyIHdob3NlIG9ubHkgb25lIHNpZGUgY29udGFpbnMgdGhlIHN0cmluZy5cbiIgXAorIiAgLS1waWNrYXhlLWFsbFxuIiBcCisiICAgICAgICAgICAgICAgIHNob3cgYWxsIGZpbGVzIGRpZmYgd2hlbiAtUyBpcyB1c2VkIGFuZCBoaXQgaXMgZm91bmQuXG4iIFwKKyIgIC1hICAtLXRleHQgICAgdHJlYXQgYWxsIGZpbGVzIGFzIHRleHQuXG4iCisKK2V4dGVybiBpbnQgZGlmZl9xdWV1ZV9pc19lbXB0eSh2b2lkKTsKK2V4dGVybiB2b2lkIGRpZmZfZmx1c2goc3RydWN0IGRpZmZfb3B0aW9ucyopOworZXh0ZXJuIHZvaWQgZGlmZl93YXJuX3JlbmFtZV9saW1pdChjb25zdCBjaGFyICp2YXJuYW1lLCBpbnQgbmVlZGVkLCBpbnQgZGVncmFkZWRfY2MpOworCisvKiBkaWZmLXJhdyBzdGF0dXMgbGV0dGVycyAqLworI2RlZmluZSBESUZGX1NUQVRVU19BRERFRAkJJ0EnCisjZGVmaW5lIERJRkZfU1RBVFVTX0NPUElFRAkJJ0MnCisjZGVmaW5lIERJRkZfU1RBVFVTX0RFTEVURUQJCSdEJworI2RlZmluZSBESUZGX1NUQVRVU19NT0RJRklFRAkJJ00nCisjZGVmaW5lIERJRkZfU1RBVFVTX1JFTkFNRUQJCSdSJworI2RlZmluZSBESUZGX1NUQVRVU19UWVBFX0NIQU5HRUQJJ1QnCisjZGVmaW5lIERJRkZfU1RBVFVTX1VOS05PV04JCSdYJworI2RlZmluZSBESUZGX1NUQVRVU19VTk1FUkdFRAkJJ1UnCisKKy8qIHRoZXNlIGFyZSBub3QgZGlmZi1yYXcgc3RhdHVzIGxldHRlcnMgcHJvcGVyLCBidXQgdXNlZCBieQorICogZGlmZmNvcmUtZmlsdGVyIGluc24gdG8gc3BlY2lmeSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucy4KKyAqLworI2RlZmluZSBESUZGX1NUQVRVU19GSUxURVJfQU9OCQknKicKKyNkZWZpbmUgRElGRl9TVEFUVVNfRklMVEVSX0JST0tFTgknQicKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmRpZmZfdW5pcXVlX2FiYnJldihjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCk7CisKKy8qIGRvIG5vdCByZXBvcnQgYW55dGhpbmcgb24gcmVtb3ZlZCBwYXRocyAqLworI2RlZmluZSBESUZGX1NJTEVOVF9PTl9SRU1PVkVEIDAxCisvKiByZXBvcnQgcmFjaWx5LWNsZWFuIHBhdGhzIGFzIG1vZGlmaWVkICovCisjZGVmaW5lIERJRkZfUkFDWV9JU19NT0RJRklFRCAwMgorZXh0ZXJuIGludCBydW5fZGlmZl9maWxlcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGludCBvcHRpb24pOworZXh0ZXJuIGludCBydW5fZGlmZl9pbmRleChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBjYWNoZWQpOworCitleHRlcm4gaW50IGRvX2RpZmZfY2FjaGUoY29uc3QgdW5zaWduZWQgY2hhciAqLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICopOworZXh0ZXJuIGludCBkaWZmX2ZsdXNoX3BhdGNoX2lkKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgdW5zaWduZWQgY2hhciAqKTsKKworZXh0ZXJuIGludCBkaWZmX3Jlc3VsdF9jb2RlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgaW50KTsKKworZXh0ZXJuIHZvaWQgZGlmZl9ub19pbmRleChzdHJ1Y3QgcmV2X2luZm8gKiwgaW50LCBjb25zdCBjaGFyICoqLCBpbnQsIGNvbnN0IGNoYXIgKik7CisKK2V4dGVybiBpbnQgaW5kZXhfZGlmZmVyc19mcm9tKGNvbnN0IGNoYXIgKmRlZiwgaW50IGRpZmZfZmxhZ3MpOworCitleHRlcm4gc2l6ZV90IGZpbGxfdGV4dGNvbnYoc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyLAorCQkJICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkZiwKKwkJCSAgICBjaGFyICoqb3V0YnVmKTsKKworZXh0ZXJuIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmdldF90ZXh0Y29udihzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKTsKKworZXh0ZXJuIGludCBwYXJzZV9yZW5hbWVfc2NvcmUoY29uc3QgY2hhciAqKmNwX3ApOworCitleHRlcm4gaW50IHByaW50X3N0YXRfc3VtbWFyeShGSUxFICpmcCwgaW50IGZpbGVzLAorCQkJICAgICAgaW50IGluc2VydGlvbnMsIGludCBkZWxldGlvbnMpOworCisjZW5kaWYgLyogRElGRl9IICovCmRpZmYgLS1naXQgYS9kaWZmY29yZS1icmVhay5jIGIvZGlmZmNvcmUtYnJlYWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGY4Njc4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlmZmNvcmUtYnJlYWsuYwpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBKdW5pbyBDIEhhbWFubworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKworc3RhdGljIGludCBzaG91bGRfYnJlYWsoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYywKKwkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkc3QsCisJCQlpbnQgYnJlYWtfc2NvcmUsCisJCQlpbnQgKm1lcmdlX3Njb3JlX3ApCit7CisJLyogZHN0IGlzIHJlY29yZGVkIGFzIGEgbW9kaWZpY2F0aW9uIG9mIHNyYy4gIEFyZSB0aGV5IHNvCisJICogZGlmZmVyZW50IHRoYXQgd2UgYXJlIGJldHRlciBvZmYgcmVjb3JkaW5nIHRoaXMgYXMgYSBwYWlyCisJICogb2YgZGVsZXRlIGFuZCBjcmVhdGU/CisJICoKKwkgKiBUaGVyZSBhcmUgdHdvIGNyaXRlcmlhIHVzZWQgaW4gdGhpcyBhbGdvcml0aG0uICBGb3IgdGhlCisJICogcHVycG9zZXMgb2YgaGVscGluZyBsYXRlciByZW5hbWUvY29weSwgd2UgdGFrZSBib3RoIGRlbGV0ZQorCSAqIGFuZCBpbnNlcnQgaW50byBhY2NvdW50IGFuZCBlc3RpbWF0ZSB0aGUgYW1vdW50IG9mICJlZGl0Ii4KKwkgKiBJZiB0aGUgZWRpdCBpcyB2ZXJ5IGxhcmdlLCB3ZSBicmVhayB0aGlzIHBhaXIgc28gdGhhdAorCSAqIHJlbmFtZS9jb3B5IGNhbiBwaWNrIHRoZSBwaWVjZXMgdXAgdG8gbWF0Y2ggd2l0aCBvdGhlcgorCSAqIGZpbGVzLgorCSAqCisJICogT24gdGhlIG90aGVyIGhhbmQsIHdlIHdvdWxkIHdhbnQgdG8gaWdub3JlIGluc2VydHMgZm9yIHRoZQorCSAqIHB1cmUgImNvbXBsZXRlIHJld3JpdGUiIGRldGVjdGlvbi4gIEFzIGxvbmcgYXMgbW9zdCBvZiB0aGUKKwkgKiBleGlzdGluZyBjb250ZW50cyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSwgaXQgaXMgYQorCSAqIGNvbXBsZXRlIHJld3JpdGUsIGFuZCBpZiBzaXphYmxlIGNodW5rIGZyb20gdGhlIG9yaWdpbmFsCisJICogc3RpbGwgcmVtYWlucyBpbiB0aGUgcmVzdWx0LCBpdCBpcyBub3QgYSByZXdyaXRlLiAgSXQgZG9lcworCSAqIG5vdCBtYXR0ZXIgaG93IG11Y2ggb3IgaG93IGxpdHRsZSBuZXcgbWF0ZXJpYWwgaXMgYWRkZWQgdG8KKwkgKiB0aGUgZmlsZS4KKwkgKgorCSAqIFRoZSBzY29yZSB3ZSBsZWF2ZSBmb3Igc3VjaCBhIGJyb2tlbiBmaWxlcGFpciB1c2VzIHRoZQorCSAqIGxhdHRlciBkZWZpbml0aW9uIHNvIHRoYXQgbGF0ZXIgY2xlYW4tdXAgc3RhZ2UgY2FuIGZpbmQgdGhlCisJICogcGllY2VzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gYnJva2VuIGFjY29yZGluZyB0byB0aGUKKwkgKiBsYXR0ZXIgZGVmaW5pdGlvbiBhZnRlciByZW5hbWUvY29weSBydW5zLCBhbmQgbWVyZ2UgdGhlCisJICogYnJva2VuIHBhaXIgdGhhdCBoYXZlIGEgc2NvcmUgbG93ZXIgdGhhbiBnaXZlbiBjcml0ZXJpYQorCSAqIGJhY2sgdG9nZXRoZXIuICBUaGUgYnJlYWsgb3BlcmF0aW9uIGl0c2VsZiBoYXBwZW5zCisJICogYWNjb3JkaW5nIHRvIHRoZSBmb3JtZXIgZGVmaW5pdGlvbi4KKwkgKgorCSAqIFRoZSBtaW5pbXVtX2VkaXQgcGFyYW1ldGVyIHRlbGxzIHVzIHdoZW4gdG8gYnJlYWsgKHRoZQorCSAqIGFtb3VudCBvZiAiZWRpdCIgcmVxdWlyZWQgZm9yIHVzIHRvIGNvbnNpZGVyIGJyZWFraW5nIHRoZQorCSAqIHBhaXIpLiAgV2UgbGVhdmUgdGhlIGFtb3VudCBvZiBkZWxldGlvbiBpbiAqbWVyZ2Vfc2NvcmVfcAorCSAqIHdoZW4gd2UgcmV0dXJuLgorCSAqCisJICogVGhlIHZhbHVlIHdlIHJldHVybiBpcyAxIGlmIHdlIHdhbnQgdGhlIHBhaXIgdG8gYmUgYnJva2VuLAorCSAqIG9yIDAgaWYgd2UgZG8gbm90LgorCSAqLworCXVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSwgbWF4X3NpemU7CisJdW5zaWduZWQgbG9uZyBzcmNfY29waWVkLCBsaXRlcmFsX2FkZGVkLCBzcmNfcmVtb3ZlZDsKKworCSptZXJnZV9zY29yZV9wID0gMDsgLyogYXNzdW1lIG5vIGRlbGV0aW9uIC0tLSAiZG8gbm90IGJyZWFrIgorCQkJICAgICAqIGlzIHRoZSBkZWZhdWx0LgorCQkJICAgICAqLworCisJaWYgKFNfSVNSRUcoc3JjLT5tb2RlKSAhPSBTX0lTUkVHKGRzdC0+bW9kZSkpIHsKKwkJKm1lcmdlX3Njb3JlX3AgPSAoaW50KU1BWF9TQ09SRTsKKwkJcmV0dXJuIDE7IC8qIGV2ZW4gdGhlaXIgdHlwZXMgYXJlIGRpZmZlcmVudCAqLworCX0KKworCWlmIChzcmMtPnNoYTFfdmFsaWQgJiYgZHN0LT5zaGExX3ZhbGlkICYmCisJICAgICFoYXNoY21wKHNyYy0+c2hhMSwgZHN0LT5zaGExKSkKKwkJcmV0dXJuIDA7IC8qIHRoZXkgYXJlIHRoZSBzYW1lICovCisKKwlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhzcmMsIDApIHx8IGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoZHN0LCAwKSkKKwkJcmV0dXJuIDA7IC8qIGVycm9yIGJ1dCBjYXVnaHQgZG93bnN0cmVhbSAqLworCisJbWF4X3NpemUgPSAoKHNyYy0+c2l6ZSA+IGRzdC0+c2l6ZSkgPyBzcmMtPnNpemUgOiBkc3QtPnNpemUpOworCWlmIChtYXhfc2l6ZSA8IE1JTklNVU1fQlJFQUtfU0laRSkKKwkJcmV0dXJuIDA7IC8qIHdlIGRvIG5vdCBicmVhayB0b28gc21hbGwgZmlsZXBhaXIgKi8KKworCWlmIChkaWZmY29yZV9jb3VudF9jaGFuZ2VzKHNyYywgZHN0LAorCQkJCSAgICZzcmMtPmNudF9kYXRhLCAmZHN0LT5jbnRfZGF0YSwKKwkJCQkgICAwLAorCQkJCSAgICZzcmNfY29waWVkLCAmbGl0ZXJhbF9hZGRlZCkpCisJCXJldHVybiAwOworCisJLyogc2FuaXR5ICovCisJaWYgKHNyYy0+c2l6ZSA8IHNyY19jb3BpZWQpCisJCXNyY19jb3BpZWQgPSBzcmMtPnNpemU7CisJaWYgKGRzdC0+c2l6ZSA8IGxpdGVyYWxfYWRkZWQgKyBzcmNfY29waWVkKSB7CisJCWlmIChzcmNfY29waWVkIDwgZHN0LT5zaXplKQorCQkJbGl0ZXJhbF9hZGRlZCA9IGRzdC0+c2l6ZSAtIHNyY19jb3BpZWQ7CisJCWVsc2UKKwkJCWxpdGVyYWxfYWRkZWQgPSAwOworCX0KKwlzcmNfcmVtb3ZlZCA9IHNyYy0+c2l6ZSAtIHNyY19jb3BpZWQ7CisKKwkvKiBDb21wdXRlIG1lcmdlLXNjb3JlLCB3aGljaCBpcyAiaG93IG11Y2ggaXMgcmVtb3ZlZAorCSAqIGZyb20gdGhlIHNvdXJjZSBtYXRlcmlhbCIuICBUaGUgY2xlYW4tdXAgc3RhZ2Ugd2lsbAorCSAqIG1lcmdlIHRoZSBzdXJ2aXZpbmcgcGFpciB0b2dldGhlciBpZiB0aGUgc2NvcmUgaXMKKwkgKiBsZXNzIHRoYW4gdGhlIG1pbmltdW0sIGFmdGVyIHJlbmFtZS9jb3B5IHJ1bnMuCisJICovCisJKm1lcmdlX3Njb3JlX3AgPSAoaW50KShzcmNfcmVtb3ZlZCAqIE1BWF9TQ09SRSAvIHNyYy0+c2l6ZSk7CisJaWYgKCptZXJnZV9zY29yZV9wID4gYnJlYWtfc2NvcmUpCisJCXJldHVybiAxOworCisJLyogRXh0ZW50IG9mIGRhbWFnZSwgd2hpY2ggY291bnRzIGJvdGggaW5zZXJ0cyBhbmQKKwkgKiBkZWxldGVzLgorCSAqLworCWRlbHRhX3NpemUgPSBzcmNfcmVtb3ZlZCArIGxpdGVyYWxfYWRkZWQ7CisJaWYgKGRlbHRhX3NpemUgKiBNQVhfU0NPUkUgLyBtYXhfc2l6ZSA8IGJyZWFrX3Njb3JlKQorCQlyZXR1cm4gMDsKKworCS8qIElmIHlvdSByZW1vdmVkIGEgbG90IHdpdGhvdXQgYWRkaW5nIG5ldyBtYXRlcmlhbCwgdGhhdCBpcworCSAqIG5vdCByZWFsbHkgYSByZXdyaXRlLgorCSAqLworCWlmICgoc3JjLT5zaXplICogYnJlYWtfc2NvcmUgPCBzcmNfcmVtb3ZlZCAqIE1BWF9TQ09SRSkgJiYKKwkgICAgKGxpdGVyYWxfYWRkZWQgKiAyMCA8IHNyY19yZW1vdmVkKSAmJgorCSAgICAobGl0ZXJhbF9hZGRlZCAqIDIwIDwgc3JjX2NvcGllZCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgZGlmZmNvcmVfYnJlYWsoaW50IGJyZWFrX3Njb3JlKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCisJLyogV2hlbiB0aGUgZmlsZXBhaXIgaGFzIHRoaXMgbXVjaCBlZGl0IChpbnNlcnQgYW5kIGRlbGV0ZSksCisJICogaXQgaXMgZmlyc3QgY29uc2lkZXJlZCB0byBiZSBhIHJld3JpdGUgYW5kIGJyb2tlbiBpbnRvIGEKKwkgKiBjcmVhdGUgYW5kIGRlbGV0ZSBmaWxlcGFpci4gIFRoaXMgaXMgdG8gaGVscCBicmVha2luZyBhCisJICogZmlsZSB0aGF0IGhhZCB0b28gbXVjaCBuZXcgc3R1ZmYgYWRkZWQsIHBvc3NpYmx5IGZyb20KKwkgKiBtb3ZpbmcgY29udGVudHMgZnJvbSBhbm90aGVyIGZpbGUsIHNvIHRoYXQgcmVuYW1lL2NvcHkgY2FuCisJICogbWF0Y2ggaXQgd2l0aCB0aGUgb3RoZXIgZmlsZS4KKwkgKgorCSAqIGludCBicmVha19zY29yZTsgd2UgcmV1c2UgaW5jb21pbmcgcGFyYW1ldGVyIGZvciB0aGlzLgorCSAqLworCisJLyogQWZ0ZXIgYSBwYWlyIGlzIGJyb2tlbiBhY2NvcmRpbmcgdG8gYnJlYWtfc2NvcmUgYW5kCisJICogc3ViamVjdGVkIHRvIHJlbmFtZS9jb3B5LCBib3RoIG9mIHRoZW0gbWF5IHN1cnZpdmUgaW50YWN0LAorCSAqIGR1ZSB0byBsYWNrIG9mIHN1aXRhYmxlIHJlbmFtZS9jb3B5IHBlZXIuICBPciwgdGhlIGNhbGxlcgorCSAqIG1heSBiZSBjYWxsaW5nIHVzIHdpdGhvdXQgdXNpbmcgcmVuYW1lL2NvcHkuICBXaGVuIHRoYXQKKwkgKiBoYXBwZW5zLCB3ZSBtZXJnZSB0aGUgYnJva2VuIHBpZWNlcyBiYWNrIGludG8gb25lCisJICogbW9kaWZpY2F0aW9uIHRvZ2V0aGVyIGlmIHRoZSBwYWlyIGRpZCBub3QgaGF2ZSBtb3JlIHRoYW4KKwkgKiB0aGlzIG11Y2ggZGVsZXRlLiAgRm9yIHRoaXMgY29tcHV0YXRpb24sIHdlIGRvIG5vdCB0YWtlCisJICogaW5zZXJ0IGludG8gYWNjb3VudCBhdCBhbGwuICBJZiB5b3Ugc3RhcnQgZnJvbSBhIDEwMC1saW5lCisJICogZmlsZSBhbmQgZGVsZXRlIDk3IGxpbmVzIG9mIGl0LCBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgeW91CisJICogYWRkIDI3IGxpbmVzIHRvIGl0IHRvIG1ha2UgYSBuZXcgMzAtbGluZSBmaWxlIG9yIGlmIHlvdSBhZGQKKwkgKiA5OTcgbGluZXMgdG8gaXQgdG8gbWFrZSBhIDEwMDAtbGluZSBmaWxlLiAgRWl0aGVyIHdheSB3aGF0CisJICogeW91IGRpZCB3YXMgYSByZXdyaXRlIG9mIDk3JS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UKKwkgKiBkZWxldGUgMyBsaW5lcywga2VlcGluZyA5NyBsaW5lcyBpbnRhY3QsIGl0IGRvZXMgbm90IG1hdHRlcgorCSAqIGlmIHlvdSBhZGQgMyBsaW5lcyB0byBpdCB0byBtYWtlIGEgbmV3IDEwMC1saW5lIGZpbGUgb3IgaWYKKwkgKiB5b3UgYWRkIDkwMyBsaW5lcyB0byBpdCB0byBtYWtlIGEgbmV3IDEwMDAtbGluZSBmaWxlLgorCSAqIEVpdGhlciB3YXkgeW91IGRpZCBhIGxvdCBvZiBhZGRpdGlvbnMgYW5kIG5vdCBhIHJld3JpdGUuCisJICogVGhpcyBtZXJnZSBoYXBwZW5zIHRvIGNhdGNoIHRoZSBsYXR0ZXIgY2FzZS4gIEEgbWVyZ2Vfc2NvcmUKKwkgKiBvZiA4MCUgd291bGQgYmUgYSBnb29kIGRlZmF1bHQgdmFsdWUgKGEgYnJva2VuIHBhaXIgdGhhdAorCSAqIGhhcyBzY29yZSBsb3dlciB0aGFuIG1lcmdlX3Njb3JlIHdpbGwgYmUgbWVyZ2VkIGJhY2sKKwkgKiB0b2dldGhlcikuCisJICovCisJaW50IG1lcmdlX3Njb3JlOworCWludCBpOworCisJLyogU2VlIGNvbW1lbnQgb24gREVGQVVMVF9CUkVBS19TQ09SRSBhbmQKKwkgKiBERUZBVUxUX01FUkdFX1NDT1JFIGluIGRpZmZjb3JlLmgKKwkgKi8KKwltZXJnZV9zY29yZSA9IChicmVha19zY29yZSA+PiAxNikgJiAweEZGRkY7CisJYnJlYWtfc2NvcmUgPSAoYnJlYWtfc2NvcmUgJiAweEZGRkYpOworCisJaWYgKCFicmVha19zY29yZSkKKwkJYnJlYWtfc2NvcmUgPSBERUZBVUxUX0JSRUFLX1NDT1JFOworCWlmICghbWVyZ2Vfc2NvcmUpCisJCW1lcmdlX3Njb3JlID0gREVGQVVMVF9NRVJHRV9TQ09SRTsKKworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJaW50IHNjb3JlOworCisJCS8qCisJCSAqIFdlIGRlYWwgb25seSB3aXRoIGluLXBsYWNlIGVkaXQgb2YgYmxvYnMuCisJCSAqIFdlIGRvIG5vdCBicmVhayBhbnl0aGluZyBlbHNlLgorCQkgKi8KKwkJaWYgKERJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmIERJRkZfRklMRV9WQUxJRChwLT50d28pICYmCisJCSAgICBvYmplY3RfdHlwZShwLT5vbmUtPm1vZGUpID09IE9CSl9CTE9CICYmCisJCSAgICBvYmplY3RfdHlwZShwLT50d28tPm1vZGUpID09IE9CSl9CTE9CICYmCisJCSAgICAhc3RyY21wKHAtPm9uZS0+cGF0aCwgcC0+dHdvLT5wYXRoKSkgeworCQkJaWYgKHNob3VsZF9icmVhayhwLT5vbmUsIHAtPnR3bywKKwkJCQkJIGJyZWFrX3Njb3JlLCAmc2NvcmUpKSB7CisJCQkJLyogU3BsaXQgdGhpcyBpbnRvIGRlbGV0ZSBhbmQgY3JlYXRlICovCisJCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm51bGxfb25lLCAqbnVsbF90d287CisJCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKmRwOworCisJCQkJLyogU2V0IHNjb3JlIHRvIDAgZm9yIHRoZSBwYWlyIHRoYXQKKwkJCQkgKiBuZWVkcyB0byBiZSBtZXJnZWQgYmFjayB0b2dldGhlcgorCQkJCSAqIHNob3VsZCB0aGV5IHN1cnZpdmUgcmVuYW1lL2NvcHkuCisJCQkJICogQWxzbyB3ZSBkbyBub3Qgd2FudCB0byBicmVhayB2ZXJ5CisJCQkJICogc21hbGwgZmlsZXMuCisJCQkJICovCisJCQkJaWYgKHNjb3JlIDwgbWVyZ2Vfc2NvcmUpCisJCQkJCXNjb3JlID0gMDsKKworCQkJCS8qIGRlbGV0aW9uIG9mIG9uZSAqLworCQkJCW51bGxfb25lID0gYWxsb2NfZmlsZXNwZWMocC0+b25lLT5wYXRoKTsKKwkJCQlkcCA9IGRpZmZfcXVldWUoJm91dHEsIHAtPm9uZSwgbnVsbF9vbmUpOworCQkJCWRwLT5zY29yZSA9IHNjb3JlOworCQkJCWRwLT5icm9rZW5fcGFpciA9IDE7CisKKwkJCQkvKiBjcmVhdGlvbiBvZiB0d28gKi8KKwkJCQludWxsX3R3byA9IGFsbG9jX2ZpbGVzcGVjKHAtPnR3by0+cGF0aCk7CisJCQkJZHAgPSBkaWZmX3F1ZXVlKCZvdXRxLCBudWxsX3R3bywgcC0+dHdvKTsKKwkJCQlkcC0+c2NvcmUgPSBzY29yZTsKKwkJCQlkcC0+YnJva2VuX3BhaXIgPSAxOworCisJCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2IocC0+b25lKTsKKwkJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYihwLT50d28pOworCQkJCWZyZWUocCk7IC8qIG5vdCBkaWZmX2ZyZWVfZmlsZXBhaXIoKSwgd2UgYXJlCisJCQkJCSAgKiByZXVzaW5nIG9uZSBhbmQgdHdvIGhlcmUuCisJCQkJCSAgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT5vbmUpOworCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT50d28pOworCQlkaWZmX3EoJm91dHEsIHApOworCX0KKwlmcmVlKHEtPnF1ZXVlKTsKKwkqcSA9IG91dHE7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX2Jyb2tlbihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcHAsCisJCQkgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpvdXRxKQoreworCS8qIHAgYW5kIHBwIGFyZSBicm9rZW4gcGFpcnMgd2Ugd2FudCB0byBtZXJnZSAqLworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpjID0gcCwgKmQgPSBwcCwgKmRwOworCWlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSkgeworCQkvKiB0aGlzIG11c3QgYmUgYSBkZWxldGUgaGFsZiAqLworCQlkID0gcDsgYyA9IHBwOworCX0KKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoIURJRkZfRklMRV9WQUxJRChkLT5vbmUpKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIG1lcmdlICMxIik7CisJaWYgKERJRkZfRklMRV9WQUxJRChkLT50d28pKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIG1lcmdlICMyIik7CisJaWYgKERJRkZfRklMRV9WQUxJRChjLT5vbmUpKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIG1lcmdlICMzIik7CisJaWYgKCFESUZGX0ZJTEVfVkFMSUQoYy0+dHdvKSkKKwkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBtZXJnZSAjNCIpOworCisJZHAgPSBkaWZmX3F1ZXVlKG91dHEsIGQtPm9uZSwgYy0+dHdvKTsKKwlkcC0+c2NvcmUgPSBwLT5zY29yZTsKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShkLT50d28pOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKGMtPm9uZSk7CisJZnJlZShkKTsKKwlmcmVlKGMpOworfQorCit2b2lkIGRpZmZjb3JlX21lcmdlX2Jyb2tlbih2b2lkKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCWludCBpLCBqOworCisJRElGRl9RVUVVRV9DTEVBUigmb3V0cSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlpZiAoIXApCisJCQkvKiB3ZSBhbHJlYWR5IG1lcmdlZCB0aGlzIHdpdGggaXRzIHBlZXIgKi8KKwkJCWNvbnRpbnVlOworCQllbHNlIGlmIChwLT5icm9rZW5fcGFpciAmJgorCQkJICFzdHJjbXAocC0+b25lLT5wYXRoLCBwLT50d28tPnBhdGgpKSB7CisJCQkvKiBJZiB0aGUgcGVlciBhbHNvIHN1cnZpdmVkIHJlbmFtZS9jb3B5LCB0aGVuCisJCQkgKiB3ZSBtZXJnZSB0aGVtIGJhY2sgdG9nZXRoZXIuCisJCQkgKi8KKwkJCWZvciAoaiA9IGkgKyAxOyBqIDwgcS0+bnI7IGorKykgeworCQkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwcCA9IHEtPnF1ZXVlW2pdOworCQkJCWlmIChwcC0+YnJva2VuX3BhaXIgJiYKKwkJCQkgICAgIXN0cmNtcChwcC0+b25lLT5wYXRoLCBwcC0+dHdvLT5wYXRoKSAmJgorCQkJCSAgICAhc3RyY21wKHAtPm9uZS0+cGF0aCwgcHAtPnR3by0+cGF0aCkpIHsKKwkJCQkJLyogUGVlciBzdXJ2aXZlZC4gIE1lcmdlIHRoZW0gKi8KKwkJCQkJbWVyZ2VfYnJva2VuKHAsIHBwLCAmb3V0cSk7CisJCQkJCXEtPnF1ZXVlW2pdID0gTlVMTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKHEtPm5yIDw9IGopCisJCQkJLyogVGhlIHBlZXIgZGlkIG5vdCBzdXJ2aXZlLCBzbyB3ZSBrZWVwCisJCQkJICogaXQgaW4gdGhlIG91dHB1dC4KKwkJCQkgKi8KKwkJCQlkaWZmX3EoJm91dHEsIHApOworCQl9CisJCWVsc2UKKwkJCWRpZmZfcSgmb3V0cSwgcCk7CisJfQorCWZyZWUocS0+cXVldWUpOworCSpxID0gb3V0cTsKKworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLWRlbHRhLmMgYi9kaWZmY29yZS1kZWx0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjQzMWQyCi0tLSAvZGV2L251bGwKKysrIGIvZGlmZmNvcmUtZGVsdGEuYwpAQCAtMCwwICsxLDIzMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisKKy8qCisgKiBJZGVhIGhlcmUgaXMgdmVyeSBzaW1wbGUuCisgKgorICogQWxtb3N0IGFsbCBkYXRhIHdlIGFyZSBpbnRlcmVzdGVkIGluIGFyZSB0ZXh0LCBidXQgc29tZXRpbWVzIHdlIGhhdmUKKyAqIHRvIGRlYWwgd2l0aCBiaW5hcnkgZGF0YS4gIFNvIHdlIGN1dCB0aGVtIGludG8gY2h1bmtzIGRlbGltaXRlZCBieQorICogTEYgYnl0ZSwgb3IgNjQtYnl0ZSBzZXF1ZW5jZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LCBhbmQgaGFzaCB0aGVtLgorICoKKyAqIEZvciB0aG9zZSBjaHVua3MsIGlmIHRoZSBzb3VyY2UgYnVmZmVyIGhhcyBtb3JlIGluc3RhbmNlcyBvZiBpdAorICogdGhhbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB0aGF0IG1lYW5zIHRoZSBkaWZmZXJlbmNlIGFyZSB0aGUKKyAqIG51bWJlciBvZiBieXRlcyBub3QgY29waWVkIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLiAgSWYgdGhlCisgKiBjb3VudHMgYXJlIHRoZSBzYW1lLCBldmVyeXRoaW5nIHdhcyBjb3BpZWQgZnJvbSBzb3VyY2UgdG8KKyAqIGRlc3RpbmF0aW9uLiAgSWYgdGhlIGRlc3RpbmF0aW9uIGhhcyBtb3JlLCBldmVyeXRoaW5nIHdhcyBjb3BpZWQsCisgKiBhbmQgZGVzdGluYXRpb24gYWRkZWQgbW9yZS4KKyAqCisgKiBXZSBhcmUgZG9pbmcgYW4gYXBwcm94aW1hdGlvbiBzbyB3ZSBkbyBub3QgcmVhbGx5IGhhdmUgdG8gd2FzdGUKKyAqIG1lbW9yeSBieSBhY3R1YWxseSBzdG9yaW5nIHRoZSBzZXF1ZW5jZS4gIFdlIGp1c3QgaGFzaCB0aGVtIGludG8KKyAqIHNvbWV3aGVyZSBhcm91bmQgMl4xNiBoYXNoYnVja2V0cyBhbmQgY291bnQgdGhlIG9jY3VycmVuY2VzLgorICovCisKKy8qIFdpbGQgZ3Vlc3MgYXQgdGhlIGluaXRpYWwgaGFzaCBzaXplICovCisjZGVmaW5lIElOSVRJQUxfSEFTSF9TSVpFIDkKKworLyogV2UgbGVhdmUgbW9yZSByb29tIGluIHNtYWxsZXIgaGFzaCBidXQgZG8gbm90IGxldCBpdAorICogZ3JvdyB0byBoYXZlIHVudXNlZCBob2xlIHRvbyBtdWNoLgorICovCisjZGVmaW5lIElOSVRJQUxfRlJFRShzel9sb2cyKSAoKDE8PChzel9sb2cyKSkqKHN6X2xvZzItMykvKHN6X2xvZzIpKQorCisvKiBBIHByaW1lIHJhdGhlciBjYXJlZnVsbHkgY2hvc2VuIGJldHdlZW4gMl4xNi4uMl4xNywgc28gdGhhdAorICogSEFTSEJBU0UgPCBJTklUSUFMX0ZSRUUoMTcpLiAgV2Ugd2FudCB0byBrZWVwIHRoZSBtYXhpbXVtIGhhc2h0YWJsZQorICogc2l6ZSB1bmRlciB0aGUgY3VycmVudCAyPDwxNyBtYXhpbXVtLCB3aGljaCBjYW4gaG9sZCB0aGlzIG1hbnkKKyAqIGRpZmZlcmVudCB2YWx1ZXMgYmVmb3JlIG92ZXJmbG93aW5nIHRvIGhhc2h0YWJsZSBvZiBzaXplIDI8PDE4LgorICovCisjZGVmaW5lIEhBU0hCQVNFIDEwNzkyNworCitzdHJ1Y3Qgc3Bhbmhhc2ggeworCXVuc2lnbmVkIGludCBoYXNodmFsOworCXVuc2lnbmVkIGludCBjbnQ7Cit9Oworc3RydWN0IHNwYW5oYXNoX3RvcCB7CisJaW50IGFsbG9jX2xvZzI7CisJaW50IGZyZWU7CisJc3RydWN0IHNwYW5oYXNoIGRhdGFbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgc3RydWN0IHNwYW5oYXNoX3RvcCAqc3Bhbmhhc2hfcmVoYXNoKHN0cnVjdCBzcGFuaGFzaF90b3AgKm9yaWcpCit7CisJc3RydWN0IHNwYW5oYXNoX3RvcCAqbmV3OworCWludCBpOworCWludCBvc3ogPSAxIDw8IG9yaWctPmFsbG9jX2xvZzI7CisJaW50IHN6ID0gb3N6IDw8IDE7CisKKwluZXcgPSB4bWFsbG9jKHNpemVvZigqb3JpZykgKyBzaXplb2Yoc3RydWN0IHNwYW5oYXNoKSAqIHN6KTsKKwluZXctPmFsbG9jX2xvZzIgPSBvcmlnLT5hbGxvY19sb2cyICsgMTsKKwluZXctPmZyZWUgPSBJTklUSUFMX0ZSRUUobmV3LT5hbGxvY19sb2cyKTsKKwltZW1zZXQobmV3LT5kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHNwYW5oYXNoKSAqIHN6KTsKKwlmb3IgKGkgPSAwOyBpIDwgb3N6OyBpKyspIHsKKwkJc3RydWN0IHNwYW5oYXNoICpvID0gJihvcmlnLT5kYXRhW2ldKTsKKwkJaW50IGJ1Y2tldDsKKwkJaWYgKCFvLT5jbnQpCisJCQljb250aW51ZTsKKwkJYnVja2V0ID0gby0+aGFzaHZhbCAmIChzeiAtIDEpOworCQl3aGlsZSAoMSkgeworCQkJc3RydWN0IHNwYW5oYXNoICpoID0gJihuZXctPmRhdGFbYnVja2V0KytdKTsKKwkJCWlmICghaC0+Y250KSB7CisJCQkJaC0+aGFzaHZhbCA9IG8tPmhhc2h2YWw7CisJCQkJaC0+Y250ID0gby0+Y250OworCQkJCW5ldy0+ZnJlZS0tOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHN6IDw9IGJ1Y2tldCkKKwkJCQlidWNrZXQgPSAwOworCQl9CisJfQorCWZyZWUob3JpZyk7CisJcmV0dXJuIG5ldzsKK30KKworc3RhdGljIHN0cnVjdCBzcGFuaGFzaF90b3AgKmFkZF9zcGFuaGFzaChzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICp0b3AsCisJCQkJCSB1bnNpZ25lZCBpbnQgaGFzaHZhbCwgaW50IGNudCkKK3sKKwlpbnQgYnVja2V0LCBsaW07CisJc3RydWN0IHNwYW5oYXNoICpoOworCisJbGltID0gKDEgPDwgdG9wLT5hbGxvY19sb2cyKTsKKwlidWNrZXQgPSBoYXNodmFsICYgKGxpbSAtIDEpOworCXdoaWxlICgxKSB7CisJCWggPSAmKHRvcC0+ZGF0YVtidWNrZXQrK10pOworCQlpZiAoIWgtPmNudCkgeworCQkJaC0+aGFzaHZhbCA9IGhhc2h2YWw7CisJCQloLT5jbnQgPSBjbnQ7CisJCQl0b3AtPmZyZWUtLTsKKwkJCWlmICh0b3AtPmZyZWUgPCAwKQorCQkJCXJldHVybiBzcGFuaGFzaF9yZWhhc2godG9wKTsKKwkJCXJldHVybiB0b3A7CisJCX0KKwkJaWYgKGgtPmhhc2h2YWwgPT0gaGFzaHZhbCkgeworCQkJaC0+Y250ICs9IGNudDsKKwkJCXJldHVybiB0b3A7CisJCX0KKwkJaWYgKGxpbSA8PSBidWNrZXQpCisJCQlidWNrZXQgPSAwOworCX0KK30KKworc3RhdGljIGludCBzcGFuaGFzaF9jbXAoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCBzcGFuaGFzaCAqYSA9IGFfOworCWNvbnN0IHN0cnVjdCBzcGFuaGFzaCAqYiA9IGJfOworCisJLyogQSBjb3VudCBvZiB6ZXJvIGNvbXBhcmVzIGF0IHRoZSBlbmQuLiAqLworCWlmICghYS0+Y250KQorCQlyZXR1cm4gIWItPmNudCA/IDAgOiAxOworCWlmICghYi0+Y250KQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGEtPmhhc2h2YWwgPCBiLT5oYXNodmFsID8gLTEgOgorCQlhLT5oYXNodmFsID4gYi0+aGFzaHZhbCA/IDEgOiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwYW5oYXNoX3RvcCAqaGFzaF9jaGFycyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWludCBpLCBuOworCXVuc2lnbmVkIGludCBhY2N1bTEsIGFjY3VtMiwgaGFzaHZhbDsKKwlzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICpoYXNoOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IG9uZS0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgc3ogPSBvbmUtPnNpemU7CisJaW50IGlzX3RleHQgPSAhZGlmZl9maWxlc3BlY19pc19iaW5hcnkob25lKTsKKworCWkgPSBJTklUSUFMX0hBU0hfU0laRTsKKwloYXNoID0geG1hbGxvYyhzaXplb2YoKmhhc2gpICsgc2l6ZW9mKHN0cnVjdCBzcGFuaGFzaCkgKiAoMTw8aSkpOworCWhhc2gtPmFsbG9jX2xvZzIgPSBpOworCWhhc2gtPmZyZWUgPSBJTklUSUFMX0ZSRUUoaSk7CisJbWVtc2V0KGhhc2gtPmRhdGEsIDAsIHNpemVvZihzdHJ1Y3Qgc3Bhbmhhc2gpICogKDE8PGkpKTsKKworCW4gPSAwOworCWFjY3VtMSA9IGFjY3VtMiA9IDA7CisJd2hpbGUgKHN6KSB7CisJCXVuc2lnbmVkIGludCBjID0gKmJ1ZisrOworCQl1bnNpZ25lZCBpbnQgb2xkXzEgPSBhY2N1bTE7CisJCXN6LS07CisKKwkJLyogSWdub3JlIENSIGluIENSTEYgc2VxdWVuY2UgaWYgdGV4dCAqLworCQlpZiAoaXNfdGV4dCAmJiBjID09ICdccicgJiYgc3ogJiYgKmJ1ZiA9PSAnXG4nKQorCQkJY29udGludWU7CisKKwkJYWNjdW0xID0gKGFjY3VtMSA8PCA3KSBeIChhY2N1bTIgPj4gMjUpOworCQlhY2N1bTIgPSAoYWNjdW0yIDw8IDcpIF4gKG9sZF8xID4+IDI1KTsKKwkJYWNjdW0xICs9IGM7CisJCWlmICgrK24gPCA2NCAmJiBjICE9ICdcbicpCisJCQljb250aW51ZTsKKwkJaGFzaHZhbCA9IChhY2N1bTEgKyBhY2N1bTIgKiAweDYxKSAlIEhBU0hCQVNFOworCQloYXNoID0gYWRkX3NwYW5oYXNoKGhhc2gsIGhhc2h2YWwsIG4pOworCQluID0gMDsKKwkJYWNjdW0xID0gYWNjdW0yID0gMDsKKwl9CisJcXNvcnQoaGFzaC0+ZGF0YSwKKwkJMXVsIDw8IGhhc2gtPmFsbG9jX2xvZzIsCisJCXNpemVvZihoYXNoLT5kYXRhWzBdKSwKKwkJc3Bhbmhhc2hfY21wKTsKKwlyZXR1cm4gaGFzaDsKK30KKworaW50IGRpZmZjb3JlX2NvdW50X2NoYW5nZXMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYywKKwkJCSAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkc3QsCisJCQkgICB2b2lkICoqc3JjX2NvdW50X3AsCisJCQkgICB2b2lkICoqZHN0X2NvdW50X3AsCisJCQkgICB1bnNpZ25lZCBsb25nIGRlbHRhX2xpbWl0LAorCQkJICAgdW5zaWduZWQgbG9uZyAqc3JjX2NvcGllZCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKmxpdGVyYWxfYWRkZWQpCit7CisJc3RydWN0IHNwYW5oYXNoICpzLCAqZDsKKwlzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICpzcmNfY291bnQsICpkc3RfY291bnQ7CisJdW5zaWduZWQgbG9uZyBzYywgbGE7CisKKwlzcmNfY291bnQgPSBkc3RfY291bnQgPSBOVUxMOworCWlmIChzcmNfY291bnRfcCkKKwkJc3JjX2NvdW50ID0gKnNyY19jb3VudF9wOworCWlmICghc3JjX2NvdW50KSB7CisJCXNyY19jb3VudCA9IGhhc2hfY2hhcnMoc3JjKTsKKwkJaWYgKHNyY19jb3VudF9wKQorCQkJKnNyY19jb3VudF9wID0gc3JjX2NvdW50OworCX0KKwlpZiAoZHN0X2NvdW50X3ApCisJCWRzdF9jb3VudCA9ICpkc3RfY291bnRfcDsKKwlpZiAoIWRzdF9jb3VudCkgeworCQlkc3RfY291bnQgPSBoYXNoX2NoYXJzKGRzdCk7CisJCWlmIChkc3RfY291bnRfcCkKKwkJCSpkc3RfY291bnRfcCA9IGRzdF9jb3VudDsKKwl9CisJc2MgPSBsYSA9IDA7CisKKwlzID0gc3JjX2NvdW50LT5kYXRhOworCWQgPSBkc3RfY291bnQtPmRhdGE7CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBkc3RfY250LCBzcmNfY250OworCQlpZiAoIXMtPmNudCkKKwkJCWJyZWFrOyAvKiB3ZSBjaGVja2VkIGFsbCBpbiBzcmMgKi8KKwkJd2hpbGUgKGQtPmNudCkgeworCQkJaWYgKGQtPmhhc2h2YWwgPj0gcy0+aGFzaHZhbCkKKwkJCQlicmVhazsKKwkJCWxhICs9IGQtPmNudDsKKwkJCWQrKzsKKwkJfQorCQlzcmNfY250ID0gcy0+Y250OworCQlkc3RfY250ID0gMDsKKwkJaWYgKGQtPmNudCAmJiBkLT5oYXNodmFsID09IHMtPmhhc2h2YWwpIHsKKwkJCWRzdF9jbnQgPSBkLT5jbnQ7CisJCQlkKys7CisJCX0KKwkJaWYgKHNyY19jbnQgPCBkc3RfY250KSB7CisJCQlsYSArPSBkc3RfY250IC0gc3JjX2NudDsKKwkJCXNjICs9IHNyY19jbnQ7CisJCX0KKwkJZWxzZQorCQkJc2MgKz0gZHN0X2NudDsKKwkJcysrOworCX0KKwl3aGlsZSAoZC0+Y250KSB7CisJCWxhICs9IGQtPmNudDsKKwkJZCsrOworCX0KKworCWlmICghc3JjX2NvdW50X3ApCisJCWZyZWUoc3JjX2NvdW50KTsKKwlpZiAoIWRzdF9jb3VudF9wKQorCQlmcmVlKGRzdF9jb3VudCk7CisJKnNyY19jb3BpZWQgPSBzYzsKKwkqbGl0ZXJhbF9hZGRlZCA9IGxhOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtb3JkZXIuYyBiL2RpZmZjb3JlLW9yZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlOTM4NQotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLW9yZGVyLmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisKK3N0YXRpYyBjaGFyICoqb3JkZXI7CitzdGF0aWMgaW50IG9yZGVyX2NudDsKKworc3RhdGljIHZvaWQgcHJlcGFyZV9vcmRlcihjb25zdCBjaGFyICpvcmRlcmZpbGUpCit7CisJaW50IGZkLCBjbnQsIHBhc3M7CisJdm9pZCAqbWFwOworCWNoYXIgKmNwLCAqZW5kcDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzaXplX3Qgc3o7CisKKwlpZiAob3JkZXIpCisJCXJldHVybjsKKworCWZkID0gb3BlbihvcmRlcmZpbGUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm47CisJaWYgKGZzdGF0KGZkLCAmc3QpKSB7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKwlzeiA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJbWFwID0gbW1hcChOVUxMLCBzeiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJY2xvc2UoZmQpOworCWlmIChtYXAgPT0gTUFQX0ZBSUxFRCkKKwkJcmV0dXJuOworCWVuZHAgPSAoY2hhciAqKSBtYXAgKyBzejsKKwlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisJCWNudCA9IDA7CisJCWNwID0gbWFwOworCQl3aGlsZSAoY3AgPCBlbmRwKSB7CisJCQljaGFyICplcDsKKwkJCWZvciAoZXAgPSBjcDsgZXAgPCBlbmRwICYmICplcCAhPSAnXG4nOyBlcCsrKQorCQkJCTsKKwkJCS8qIGNwIHRvIGVwIGhhcyBvbmUgbGluZSAqLworCQkJaWYgKCpjcCA9PSAnXG4nIHx8ICpjcCA9PSAnIycpCisJCQkJOyAvKiBjb21tZW50ICovCisJCQllbHNlIGlmIChwYXNzID09IDApCisJCQkJY250Kys7CisJCQllbHNlIHsKKwkJCQlpZiAoKmVwID09ICdcbicpIHsKKwkJCQkJKmVwID0gMDsKKwkJCQkJb3JkZXJbY250XSA9IGNwOworCQkJCX0gZWxzZSB7CisJCQkJCW9yZGVyW2NudF0gPSB4bWVtZHVweihjcCwgZXAgLSBjcCk7CisJCQkJfQorCQkJCWNudCsrOworCQkJfQorCQkJaWYgKGVwIDwgZW5kcCkKKwkJCQllcCsrOworCQkJY3AgPSBlcDsKKwkJfQorCQlpZiAocGFzcyA9PSAwKSB7CisJCQlvcmRlcl9jbnQgPSBjbnQ7CisJCQlvcmRlciA9IHhtYWxsb2Moc2l6ZW9mKCpvcmRlcikgKiBjbnQpOworCQl9CisJfQorfQorCitzdHJ1Y3QgcGFpcl9vcmRlciB7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXI7CisJaW50IG9yaWdfb3JkZXI7CisJaW50IG9yZGVyOworfTsKKworc3RhdGljIGludCBtYXRjaF9vcmRlcihjb25zdCBjaGFyICpwYXRoKQoreworCWludCBpOworCWNoYXIgcFtQQVRIX01BWF07CisKKwlmb3IgKGkgPSAwOyBpIDwgb3JkZXJfY250OyBpKyspIHsKKwkJc3RyY3B5KHAsIHBhdGgpOworCQl3aGlsZSAocFswXSkgeworCQkJY2hhciAqY3A7CisJCQlpZiAoIWZubWF0Y2gob3JkZXJbaV0sIHAsIDApKQorCQkJCXJldHVybiBpOworCQkJY3AgPSBzdHJyY2hyKHAsICcvJyk7CisJCQlpZiAoIWNwKQorCQkJCWJyZWFrOworCQkJKmNwID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gb3JkZXJfY250OworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfcGFpcl9vcmRlcihjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHBhaXJfb3JkZXIgY29uc3QgKmEsICpiOworCWEgPSAoc3RydWN0IHBhaXJfb3JkZXIgY29uc3QgKilhXzsKKwliID0gKHN0cnVjdCBwYWlyX29yZGVyIGNvbnN0ICopYl87CisJaWYgKGEtPm9yZGVyICE9IGItPm9yZGVyKQorCQlyZXR1cm4gYS0+b3JkZXIgLSBiLT5vcmRlcjsKKwlyZXR1cm4gYS0+b3JpZ19vcmRlciAtIGItPm9yaWdfb3JkZXI7Cit9CisKK3ZvaWQgZGlmZmNvcmVfb3JkZXIoY29uc3QgY2hhciAqb3JkZXJmaWxlKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBwYWlyX29yZGVyICpvOworCWludCBpOworCisJaWYgKCFxLT5ucikKKwkJcmV0dXJuOworCisJbyA9IHhtYWxsb2Moc2l6ZW9mKCpvKSAqIHEtPm5yKTsKKwlwcmVwYXJlX29yZGVyKG9yZGVyZmlsZSk7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJb1tpXS5wYWlyID0gcS0+cXVldWVbaV07CisJCW9baV0ub3JpZ19vcmRlciA9IGk7CisJCW9baV0ub3JkZXIgPSBtYXRjaF9vcmRlcihvW2ldLnBhaXItPnR3by0+cGF0aCk7CisJfQorCXFzb3J0KG8sIHEtPm5yLCBzaXplb2YoKm8pLCBjb21wYXJlX3BhaXJfb3JkZXIpOworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKQorCQlxLT5xdWV1ZVtpXSA9IG9baV0ucGFpcjsKKwlmcmVlKG8pOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLXBpY2theGUuYyBiL2RpZmZjb3JlLXBpY2theGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDIzZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlmZmNvcmUtcGlja2F4ZS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAia3dzZXQuaCIKKwordHlwZWRlZiBpbnQgKCpwaWNrYXhlX2ZuKShzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgcmVnZXhfdCAqcmVnZXhwLCBrd3NldF90IGt3cyk7CisKK3N0YXRpYyB2b2lkIHBpY2theGUoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkgICAgcmVnZXhfdCAqcmVnZXhwLCBrd3NldF90IGt3cywgcGlja2F4ZV9mbiBmbikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3Qgb3V0cTsKKworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJaWYgKG8tPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9BTEwpIHsKKwkJLyogU2hvd2luZyB0aGUgd2hvbGUgY2hhbmdlc2V0IGlmIG5lZWRsZSBleGlzdHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCQlpZiAoZm4ocCwgbywgcmVnZXhwLCBrd3MpKQorCQkJCXJldHVybjsgLyogZG8gbm90IG11bmdlIHRoZSBxdWV1ZSAqLworCQl9CisKKwkJLyoKKwkJICogT3RoZXJ3aXNlIHdlIHdpbGwgY2xlYXIgdGhlIHdob2xlIHF1ZXVlIGJ5IGNvcHlpbmcKKwkJICogdGhlIGVtcHR5IG91dHEgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLCBidXQKKwkJICogZmlyc3QgY2xlYXIgdGhlIGN1cnJlbnQgZW50cmllcyBpbiB0aGUgcXVldWUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykKKwkJCWRpZmZfZnJlZV9maWxlcGFpcihxLT5xdWV1ZVtpXSk7CisJfSBlbHNlIHsKKwkJLyogU2hvd2luZyBvbmx5IHRoZSBmaWxlcGFpcnMgdGhhdCBoYXMgdGhlIG5lZWRsZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmIChmbihwLCBvLCByZWdleHAsIGt3cykpCisJCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJCWVsc2UKKwkJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocCk7CisJCX0KKwl9CisKKwlmcmVlKHEtPnF1ZXVlKTsKKwkqcSA9IG91dHE7Cit9CisKK3N0cnVjdCBkaWZmZ3JlcF9jYiB7CisJcmVnZXhfdCAqcmVnZXhwOworCWludCBoaXQ7Cit9OworCitzdGF0aWMgdm9pZCBkaWZmZ3JlcF9jb25zdW1lKHZvaWQgKnByaXYsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBkaWZmZ3JlcF9jYiAqZGF0YSA9IHByaXY7CisJcmVnbWF0Y2hfdCByZWdtYXRjaDsKKwlpbnQgaG9sZDsKKworCWlmIChsaW5lWzBdICE9ICcrJyAmJiBsaW5lWzBdICE9ICctJykKKwkJcmV0dXJuOworCWlmIChkYXRhLT5oaXQpCisJCS8qCisJCSAqIE5FRURTV09SSzogd2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gdGVybWluYXRlIHRoZQorCQkgKiBjYWxsZXIgZWFybHkuCisJCSAqLworCQlyZXR1cm47CisJLyogWXVjayAtLSBsaW5lIG91Z2h0IHRvIGJlICJjb25zdCBjaGFyICoiISAqLworCWhvbGQgPSBsaW5lW2xlbl07CisJbGluZVtsZW5dID0gJ1wwJzsKKwlkYXRhLT5oaXQgPSAhcmVnZXhlYyhkYXRhLT5yZWdleHAsIGxpbmUgKyAxLCAxLCAmcmVnbWF0Y2gsIDApOworCWxpbmVbbGVuXSA9IGhvbGQ7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfb25lKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCSAgICAgbW1maWxlX3QgKm1mLCBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICoqdGV4dGNvbnYpCit7CisJaWYgKERJRkZfRklMRV9WQUxJRChvbmUpKSB7CisJCSp0ZXh0Y29udiA9IGdldF90ZXh0Y29udihvbmUpOworCQltZi0+c2l6ZSA9IGZpbGxfdGV4dGNvbnYoKnRleHRjb252LCBvbmUsICZtZi0+cHRyKTsKKwl9IGVsc2UgeworCQltZW1zZXQobWYsIDAsIHNpemVvZigqbWYpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9ncmVwKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkgICAgIHJlZ2V4X3QgKnJlZ2V4cCwga3dzZXRfdCBrd3MpCit7CisJcmVnbWF0Y2hfdCByZWdtYXRjaDsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl9vbmUgPSBOVUxMOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252X3R3byA9IE5VTEw7CisJbW1maWxlX3QgbWYxLCBtZjI7CisJaW50IGhpdDsKKworCWlmIChkaWZmX3VubW9kaWZpZWRfcGFpcihwKSkKKwkJcmV0dXJuIDA7CisKKwlmaWxsX29uZShwLT5vbmUsICZtZjEsICZ0ZXh0Y29udl9vbmUpOworCWZpbGxfb25lKHAtPnR3bywgJm1mMiwgJnRleHRjb252X3R3byk7CisKKwlpZiAoIW1mMS5wdHIpIHsKKwkJaWYgKCFtZjIucHRyKQorCQkJcmV0dXJuIDA7IC8qIGlnbm9yZSB1bm1lcmdlZCAqLworCQkvKiBjcmVhdGVkICJ0d28iIC0tIGRvZXMgaXQgaGF2ZSB3aGF0IHdlIGFyZSBsb29raW5nIGZvcj8gKi8KKwkJaGl0ID0gIXJlZ2V4ZWMocmVnZXhwLCBwLT50d28tPmRhdGEsIDEsICZyZWdtYXRjaCwgMCk7CisJfSBlbHNlIGlmICghbWYyLnB0cikgeworCQkvKiByZW1vdmVkICJvbmUiIC0tIGRpZCBpdCBoYXZlIHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yPyAqLworCQloaXQgPSAhcmVnZXhlYyhyZWdleHAsIHAtPm9uZS0+ZGF0YSwgMSwgJnJlZ21hdGNoLCAwKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBXZSBoYXZlIGJvdGggc2lkZXM7IG5lZWQgdG8gcnVuIHRleHR1YWwgZGlmZiBhbmQgc2VlIGlmCisJCSAqIHRoZSBwYXR0ZXJuIGFwcGVhcnMgb24gYWRkZWQvZGVsZXRlZCBsaW5lcy4KKwkJICovCisJCXN0cnVjdCBkaWZmZ3JlcF9jYiBlY2JkYXRhOworCQl4cHBhcmFtX3QgeHBwOworCQl4ZGVtaXRjb25mX3QgeGVjZmc7CisKKwkJbWVtc2V0KCZ4cHAsIDAsIHNpemVvZih4cHApKTsKKwkJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJCWVjYmRhdGEucmVnZXhwID0gcmVnZXhwOworCQllY2JkYXRhLmhpdCA9IDA7CisJCXhlY2ZnLmN0eGxlbiA9IG8tPmNvbnRleHQ7CisJCXhlY2ZnLmludGVyaHVua2N0eGxlbiA9IG8tPmludGVyaHVua2NvbnRleHQ7CisJCXhkaV9kaWZmX291dGYoJm1mMSwgJm1mMiwgZGlmZmdyZXBfY29uc3VtZSwgJmVjYmRhdGEsCisJCQkgICAgICAmeHBwLCAmeGVjZmcpOworCQloaXQgPSBlY2JkYXRhLmhpdDsKKwl9CisJaWYgKHRleHRjb252X29uZSkKKwkJZnJlZShtZjEucHRyKTsKKwlpZiAodGV4dGNvbnZfdHdvKQorCQlmcmVlKG1mMi5wdHIpOworCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZjb3JlX3BpY2theGVfZ3JlcChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCWludCBlcnI7CisJcmVnZXhfdCByZWdleDsKKwlpbnQgY2ZsYWdzID0gUkVHX0VYVEVOREVEIHwgUkVHX05FV0xJTkU7CisKKwlpZiAoRElGRl9PUFRfVFNUKG8sIFBJQ0tBWEVfSUdOT1JFX0NBU0UpKQorCQljZmxhZ3MgfD0gUkVHX0lDQVNFOworCisJZXJyID0gcmVnY29tcCgmcmVnZXgsIG8tPnBpY2theGUsIGNmbGFncyk7CisJaWYgKGVycikgeworCQljaGFyIGVycmJ1ZlsxMDI0XTsKKwkJcmVnZXJyb3IoZXJyLCAmcmVnZXgsIGVycmJ1ZiwgMTAyNCk7CisJCXJlZ2ZyZWUoJnJlZ2V4KTsKKwkJZGllKCJpbnZhbGlkIGxvZy1ncmVwIHJlZ2V4OiAlcyIsIGVycmJ1Zik7CisJfQorCisJcGlja2F4ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgbywgJnJlZ2V4LCBOVUxMLCBkaWZmX2dyZXApOworCisJcmVnZnJlZSgmcmVnZXgpOworCXJldHVybjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjb250YWlucyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJICAgICByZWdleF90ICpyZWdleHAsIGt3c2V0X3Qga3dzKQoreworCXVuc2lnbmVkIGludCBjbnQ7CisJdW5zaWduZWQgbG9uZyBzejsKKwljb25zdCBjaGFyICpkYXRhOworCWlmICghby0+cGlja2F4ZVswXSkKKwkJcmV0dXJuIDA7CisJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAwKSkKKwkJcmV0dXJuIDA7CisKKwlzeiA9IG9uZS0+c2l6ZTsKKwlkYXRhID0gb25lLT5kYXRhOworCWNudCA9IDA7CisKKwlpZiAocmVnZXhwKSB7CisJCXJlZ21hdGNoX3QgcmVnbWF0Y2g7CisJCWludCBmbGFncyA9IDA7CisKKwkJYXNzZXJ0KGRhdGFbc3pdID09ICdcMCcpOworCQl3aGlsZSAoKmRhdGEgJiYgIXJlZ2V4ZWMocmVnZXhwLCBkYXRhLCAxLCAmcmVnbWF0Y2gsIGZsYWdzKSkgeworCQkJZmxhZ3MgfD0gUkVHX05PVEJPTDsKKwkJCWRhdGEgKz0gcmVnbWF0Y2gucm1fZW87CisJCQlpZiAoKmRhdGEgJiYgcmVnbWF0Y2gucm1fc28gPT0gcmVnbWF0Y2gucm1fZW8pCisJCQkJZGF0YSsrOworCQkJY250Kys7CisJCX0KKworCX0gZWxzZSB7IC8qIENsYXNzaWMgZXhhY3Qgc3RyaW5nIG1hdGNoICovCisJCXdoaWxlIChzeikgeworCQkJc3RydWN0IGt3c21hdGNoIGt3c207CisJCQlzaXplX3Qgb2Zmc2V0ID0ga3dzZXhlYyhrd3MsIGRhdGEsIHN6LCAma3dzbSk7CisJCQljb25zdCBjaGFyICpmb3VuZDsKKwkJCWlmIChvZmZzZXQgPT0gLTEpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJZm91bmQgPSBkYXRhICsgb2Zmc2V0OworCQkJc3ogLT0gZm91bmQgLSBkYXRhICsga3dzbS5zaXplWzBdOworCQkJZGF0YSA9IGZvdW5kICsga3dzbS5zaXplWzBdOworCQkJY250Kys7CisJCX0KKwl9CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEob25lKTsKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgaW50IGhhc19jaGFuZ2VzKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkgICAgICAgcmVnZXhfdCAqcmVnZXhwLCBrd3NldF90IGt3cykKK3sKKwlpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpKSB7CisJCWlmICghRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpCisJCQlyZXR1cm4gMDsgLyogaWdub3JlIHVubWVyZ2VkICovCisJCS8qIGNyZWF0ZWQgKi8KKwkJcmV0dXJuIGNvbnRhaW5zKHAtPnR3bywgbywgcmVnZXhwLCBrd3MpICE9IDA7CisJfQorCWlmICghRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpCisJCXJldHVybiBjb250YWlucyhwLT5vbmUsIG8sIHJlZ2V4cCwga3dzKSAhPSAwOworCWlmICghZGlmZl91bm1vZGlmaWVkX3BhaXIocCkpIHsKKwkJcmV0dXJuIGNvbnRhaW5zKHAtPm9uZSwgbywgcmVnZXhwLCBrd3MpICE9CisJCSAgICAgICBjb250YWlucyhwLT50d28sIG8sIHJlZ2V4cCwga3dzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZjb3JlX3BpY2theGVfY291bnQoc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwljb25zdCBjaGFyICpuZWVkbGUgPSBvLT5waWNrYXhlOworCWludCBvcHRzID0gby0+cGlja2F4ZV9vcHRzOworCXVuc2lnbmVkIGxvbmcgbGVuID0gc3RybGVuKG5lZWRsZSk7CisJcmVnZXhfdCByZWdleCwgKnJlZ2V4cCA9IE5VTEw7CisJa3dzZXRfdCBrd3MgPSBOVUxMOworCisJaWYgKG9wdHMgJiBESUZGX1BJQ0tBWEVfUkVHRVgpIHsKKwkJaW50IGVycjsKKwkJZXJyID0gcmVnY29tcCgmcmVnZXgsIG5lZWRsZSwgUkVHX0VYVEVOREVEIHwgUkVHX05FV0xJTkUpOworCQlpZiAoZXJyKSB7CisJCQkvKiBUaGUgUE9TSVguMiBwZW9wbGUgYXJlIHN1cmVseSBzaWNrICovCisJCQljaGFyIGVycmJ1ZlsxMDI0XTsKKwkJCXJlZ2Vycm9yKGVyciwgJnJlZ2V4LCBlcnJidWYsIDEwMjQpOworCQkJcmVnZnJlZSgmcmVnZXgpOworCQkJZGllKCJpbnZhbGlkIHBpY2theGUgcmVnZXg6ICVzIiwgZXJyYnVmKTsKKwkJfQorCQlyZWdleHAgPSAmcmVnZXg7CisJfSBlbHNlIHsKKwkJa3dzID0ga3dzYWxsb2MoRElGRl9PUFRfVFNUKG8sIFBJQ0tBWEVfSUdOT1JFX0NBU0UpCisJCQkgICAgICAgPyB0b2xvd2VyX3RyYW5zX3RibCA6IE5VTEwpOworCQlrd3NpbmNyKGt3cywgbmVlZGxlLCBsZW4pOworCQlrd3NwcmVwKGt3cyk7CisJfQorCisJcGlja2F4ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgbywgcmVnZXhwLCBrd3MsIGhhc19jaGFuZ2VzKTsKKworCWlmIChvcHRzICYgRElGRl9QSUNLQVhFX1JFR0VYKQorCQlyZWdmcmVlKCZyZWdleCk7CisJZWxzZQorCQlrd3NmcmVlKGt3cyk7CisJcmV0dXJuOworfQorCit2b2lkIGRpZmZjb3JlX3BpY2theGUoc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwkvKiBNaWdodCB3YW50IHRvIHdhcm4gd2hlbiBib3RoIFMgYW5kIEcgYXJlIG9uOyBJIGRvbid0IGNhcmUuLi4gKi8KKwlpZiAoby0+cGlja2F4ZV9vcHRzICYgRElGRl9QSUNLQVhFX0tJTkRfRykKKwkJZGlmZmNvcmVfcGlja2F4ZV9ncmVwKG8pOworCWVsc2UKKwkJZGlmZmNvcmVfcGlja2F4ZV9jb3VudChvKTsKK30KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLXJlbmFtZS5jIGIvZGlmZmNvcmUtcmVuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyZDBhYwotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLXJlbmFtZS5jCkBAIC0wLDAgKzEsNzI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImhhc2guaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorCisvKiBUYWJsZSBvZiByZW5hbWUvY29weSBkZXN0aW5hdGlvbnMgKi8KKworc3RhdGljIHN0cnVjdCBkaWZmX3JlbmFtZV9kc3QgeworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d287CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXI7Cit9ICpyZW5hbWVfZHN0Oworc3RhdGljIGludCByZW5hbWVfZHN0X25yLCByZW5hbWVfZHN0X2FsbG9jOworCitzdGF0aWMgc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqbG9jYXRlX3JlbmFtZV9kc3Qoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bywKKwkJCQkJCSBpbnQgaW5zZXJ0X29rKQoreworCWludCBmaXJzdCwgbGFzdDsKKworCWZpcnN0ID0gMDsKKwlsYXN0ID0gcmVuYW1lX2RzdF9ucjsKKwl3aGlsZSAobGFzdCA+IGZpcnN0KSB7CisJCWludCBuZXh0ID0gKGxhc3QgKyBmaXJzdCkgPj4gMTsKKwkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0ID0gJihyZW5hbWVfZHN0W25leHRdKTsKKwkJaW50IGNtcCA9IHN0cmNtcCh0d28tPnBhdGgsIGRzdC0+dHdvLT5wYXRoKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gZHN0OworCQlpZiAoY21wIDwgMCkgeworCQkJbGFzdCA9IG5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlmaXJzdCA9IG5leHQrMTsKKwl9CisJLyogbm90IGZvdW5kICovCisJaWYgKCFpbnNlcnRfb2spCisJCXJldHVybiBOVUxMOworCS8qIGluc2VydCB0byBtYWtlIGl0IGF0ICJmaXJzdCIgKi8KKwlpZiAocmVuYW1lX2RzdF9hbGxvYyA8PSByZW5hbWVfZHN0X25yKSB7CisJCXJlbmFtZV9kc3RfYWxsb2MgPSBhbGxvY19ucihyZW5hbWVfZHN0X2FsbG9jKTsKKwkJcmVuYW1lX2RzdCA9IHhyZWFsbG9jKHJlbmFtZV9kc3QsCisJCQkJICAgICAgcmVuYW1lX2RzdF9hbGxvYyAqIHNpemVvZigqcmVuYW1lX2RzdCkpOworCX0KKwlyZW5hbWVfZHN0X25yKys7CisJaWYgKGZpcnN0IDwgcmVuYW1lX2RzdF9ucikKKwkJbWVtbW92ZShyZW5hbWVfZHN0ICsgZmlyc3QgKyAxLCByZW5hbWVfZHN0ICsgZmlyc3QsCisJCQkocmVuYW1lX2RzdF9uciAtIGZpcnN0IC0gMSkgKiBzaXplb2YoKnJlbmFtZV9kc3QpKTsKKwlyZW5hbWVfZHN0W2ZpcnN0XS50d28gPSBhbGxvY19maWxlc3BlYyh0d28tPnBhdGgpOworCWZpbGxfZmlsZXNwZWMocmVuYW1lX2RzdFtmaXJzdF0udHdvLCB0d28tPnNoYTEsIHR3by0+c2hhMV92YWxpZCwgdHdvLT5tb2RlKTsKKwlyZW5hbWVfZHN0W2ZpcnN0XS5wYWlyID0gTlVMTDsKKwlyZXR1cm4gJihyZW5hbWVfZHN0W2ZpcnN0XSk7Cit9CisKKy8qIFRhYmxlIG9mIHJlbmFtZS9jb3B5IHNyYyBmaWxlcyAqLworc3RhdGljIHN0cnVjdCBkaWZmX3JlbmFtZV9zcmMgeworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCXVuc2lnbmVkIHNob3J0IHNjb3JlOyAvKiB0byByZW1lbWJlciB0aGUgYnJlYWsgc2NvcmUgKi8KK30gKnJlbmFtZV9zcmM7CitzdGF0aWMgaW50IHJlbmFtZV9zcmNfbnIsIHJlbmFtZV9zcmNfYWxsb2M7CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9yZW5hbWVfc3JjICpyZWdpc3Rlcl9yZW5hbWVfc3JjKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCWludCBmaXJzdCwgbGFzdDsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lID0gcC0+b25lOworCXVuc2lnbmVkIHNob3J0IHNjb3JlID0gcC0+c2NvcmU7CisKKwlmaXJzdCA9IDA7CisJbGFzdCA9IHJlbmFtZV9zcmNfbnI7CisJd2hpbGUgKGxhc3QgPiBmaXJzdCkgeworCQlpbnQgbmV4dCA9IChsYXN0ICsgZmlyc3QpID4+IDE7CisJCXN0cnVjdCBkaWZmX3JlbmFtZV9zcmMgKnNyYyA9ICYocmVuYW1lX3NyY1tuZXh0XSk7CisJCWludCBjbXAgPSBzdHJjbXAob25lLT5wYXRoLCBzcmMtPnAtPm9uZS0+cGF0aCk7CisJCWlmICghY21wKQorCQkJcmV0dXJuIHNyYzsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCisJLyogaW5zZXJ0IHRvIG1ha2UgaXQgYXQgImZpcnN0IiAqLworCWlmIChyZW5hbWVfc3JjX2FsbG9jIDw9IHJlbmFtZV9zcmNfbnIpIHsKKwkJcmVuYW1lX3NyY19hbGxvYyA9IGFsbG9jX25yKHJlbmFtZV9zcmNfYWxsb2MpOworCQlyZW5hbWVfc3JjID0geHJlYWxsb2MocmVuYW1lX3NyYywKKwkJCQkgICAgICByZW5hbWVfc3JjX2FsbG9jICogc2l6ZW9mKCpyZW5hbWVfc3JjKSk7CisJfQorCXJlbmFtZV9zcmNfbnIrKzsKKwlpZiAoZmlyc3QgPCByZW5hbWVfc3JjX25yKQorCQltZW1tb3ZlKHJlbmFtZV9zcmMgKyBmaXJzdCArIDEsIHJlbmFtZV9zcmMgKyBmaXJzdCwKKwkJCShyZW5hbWVfc3JjX25yIC0gZmlyc3QgLSAxKSAqIHNpemVvZigqcmVuYW1lX3NyYykpOworCXJlbmFtZV9zcmNbZmlyc3RdLnAgPSBwOworCXJlbmFtZV9zcmNbZmlyc3RdLnNjb3JlID0gc2NvcmU7CisJcmV0dXJuICYocmVuYW1lX3NyY1tmaXJzdF0pOworfQorCitzdGF0aWMgaW50IGJhc2VuYW1lX3NhbWUoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYywgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRzdCkKK3sKKwlpbnQgc3JjX2xlbiA9IHN0cmxlbihzcmMtPnBhdGgpLCBkc3RfbGVuID0gc3RybGVuKGRzdC0+cGF0aCk7CisJd2hpbGUgKHNyY19sZW4gJiYgZHN0X2xlbikgeworCQljaGFyIGMxID0gc3JjLT5wYXRoWy0tc3JjX2xlbl07CisJCWNoYXIgYzIgPSBkc3QtPnBhdGhbLS1kc3RfbGVuXTsKKwkJaWYgKGMxICE9IGMyKQorCQkJcmV0dXJuIDA7CisJCWlmIChjMSA9PSAnLycpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuICghc3JjX2xlbiB8fCBzcmMtPnBhdGhbc3JjX2xlbiAtIDFdID09ICcvJykgJiYKKwkJKCFkc3RfbGVuIHx8IGRzdC0+cGF0aFtkc3RfbGVuIC0gMV0gPT0gJy8nKTsKK30KKworc3RydWN0IGRpZmZfc2NvcmUgeworCWludCBzcmM7IC8qIGluZGV4IGluIHJlbmFtZV9zcmMgKi8KKwlpbnQgZHN0OyAvKiBpbmRleCBpbiByZW5hbWVfZHN0ICovCisJdW5zaWduZWQgc2hvcnQgc2NvcmU7CisJc2hvcnQgbmFtZV9zY29yZTsKK307CisKK3N0YXRpYyBpbnQgZXN0aW1hdGVfc2ltaWxhcml0eShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3JjLAorCQkJICAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkc3QsCisJCQkgICAgICAgaW50IG1pbmltdW1fc2NvcmUpCit7CisJLyogc3JjIHBvaW50cyBhdCBhIGZpbGUgdGhhdCBleGlzdGVkIGluIHRoZSBvcmlnaW5hbCB0cmVlIChvcgorCSAqIG9wdGlvbmFsbHkgYSBmaWxlIGluIHRoZSBkZXN0aW5hdGlvbiB0cmVlKSBhbmQgZHN0IHBvaW50cworCSAqIGF0IGEgbmV3bHkgY3JlYXRlZCBmaWxlLiAgVGhleSBtYXkgYmUgcXVpdGUgc2ltaWxhciwgaW4gd2hpY2gKKwkgKiBjYXNlIHdlIHdhbnQgdG8gc2F5IHNyYyBpcyByZW5hbWVkIHRvIGRzdCBvciBzcmMgaXMgY29waWVkIGludG8KKwkgKiBkc3QsIGFuZCB0aGVuIHNvbWUgZWRpdCBoYXMgYmVlbiBhcHBsaWVkIHRvIGRzdC4KKwkgKgorCSAqIENvbXBhcmUgdGhlbSBhbmQgcmV0dXJuIGhvdyBzaW1pbGFyIHRoZXkgYXJlLCByZXByZXNlbnRpbmcKKwkgKiB0aGUgc2NvcmUgYXMgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIE1BWF9TQ09SRS4KKwkgKgorCSAqIFdoZW4gdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2gsIGl0IGlzIGNvbnNpZGVyZWQgYSBiZXR0ZXIKKwkgKiBtYXRjaCB0aGFuIGFueXRoaW5nIGVsc2U7IHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBldmVuCisJICogY2FsbCBpbnRvIHRoaXMgZnVuY3Rpb24gaW4gdGhhdCBjYXNlLgorCSAqLworCXVuc2lnbmVkIGxvbmcgbWF4X3NpemUsIGRlbHRhX3NpemUsIGJhc2Vfc2l6ZSwgc3JjX2NvcGllZCwgbGl0ZXJhbF9hZGRlZDsKKwl1bnNpZ25lZCBsb25nIGRlbHRhX2xpbWl0OworCWludCBzY29yZTsKKworCS8qIFdlIGRlYWwgb25seSB3aXRoIHJlZ3VsYXIgZmlsZXMuICBTeW1saW5rIHJlbmFtZXMgYXJlIGhhbmRsZWQKKwkgKiBvbmx5IHdoZW4gdGhleSBhcmUgZXhhY3QgbWF0Y2hlcyAtLS0gaW4gb3RoZXIgd29yZHMsIG5vIGVkaXRzCisJICogYWZ0ZXIgcmVuYW1pbmcuCisJICovCisJaWYgKCFTX0lTUkVHKHNyYy0+bW9kZSkgfHwgIVNfSVNSRUcoZHN0LT5tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE5lZWQgdG8gY2hlY2sgdGhhdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHNpemVzIGFyZQorCSAqIGZpbGxlZCBpbiBiZWZvcmUgY29tcGFyaW5nIHRoZW0uCisJICoKKwkgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgImNudF9kYXRhIiBmaWxsZWQgaW4sIHdlIGtub3cgaXQncworCSAqIGFsbCBnb29kIChhdm9pZCBjaGVja2luZyB0aGUgc2l6ZSBmb3IgemVybywgYXMgdGhhdAorCSAqIGlzIGEgcG9zc2libGUgc2l6ZSAtIHdlIHJlYWxseSBzaG91bGQgaGF2ZSBhIGZsYWcgdG8KKwkgKiBzYXkgd2hldGhlciB0aGUgc2l6ZSBpcyB2YWxpZCBvciBub3QhKQorCSAqLworCWlmICghc3JjLT5jbnRfZGF0YSAmJiBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHNyYywgMSkpCisJCXJldHVybiAwOworCWlmICghZHN0LT5jbnRfZGF0YSAmJiBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKGRzdCwgMSkpCisJCXJldHVybiAwOworCisJbWF4X3NpemUgPSAoKHNyYy0+c2l6ZSA+IGRzdC0+c2l6ZSkgPyBzcmMtPnNpemUgOiBkc3QtPnNpemUpOworCWJhc2Vfc2l6ZSA9ICgoc3JjLT5zaXplIDwgZHN0LT5zaXplKSA/IHNyYy0+c2l6ZSA6IGRzdC0+c2l6ZSk7CisJZGVsdGFfc2l6ZSA9IG1heF9zaXplIC0gYmFzZV9zaXplOworCisJLyogV2Ugd291bGQgbm90IGNvbnNpZGVyIGVkaXRzIHRoYXQgY2hhbmdlIHRoZSBmaWxlIHNpemUgc28KKwkgKiBkcmFzdGljYWxseS4gIGRlbHRhX3NpemUgbXVzdCBiZSBzbWFsbGVyIHRoYW4KKwkgKiAoTUFYX1NDT1JFLW1pbmltdW1fc2NvcmUpL01BWF9TQ09SRSAqIG1pbihzcmMtPnNpemUsIGRzdC0+c2l6ZSkuCisJICoKKwkgKiBOb3RlIHRoYXQgYmFzZV9zaXplID09IDAgY2FzZSBpcyBoYW5kbGVkIGhlcmUgYWxyZWFkeQorCSAqIGFuZCB0aGUgZmluYWwgc2NvcmUgY29tcHV0YXRpb24gYmVsb3cgd291bGQgbm90IGhhdmUgYQorCSAqIGRpdmlkZS1ieS16ZXJvIGlzc3VlLgorCSAqLworCWlmIChtYXhfc2l6ZSAqIChNQVhfU0NPUkUtbWluaW11bV9zY29yZSkgPCBkZWx0YV9zaXplICogTUFYX1NDT1JFKQorCQlyZXR1cm4gMDsKKworCWlmICghc3JjLT5jbnRfZGF0YSAmJiBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHNyYywgMCkpCisJCXJldHVybiAwOworCWlmICghZHN0LT5jbnRfZGF0YSAmJiBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKGRzdCwgMCkpCisJCXJldHVybiAwOworCisJZGVsdGFfbGltaXQgPSAodW5zaWduZWQgbG9uZykKKwkJKGJhc2Vfc2l6ZSAqIChNQVhfU0NPUkUtbWluaW11bV9zY29yZSkgLyBNQVhfU0NPUkUpOworCWlmIChkaWZmY29yZV9jb3VudF9jaGFuZ2VzKHNyYywgZHN0LAorCQkJCSAgICZzcmMtPmNudF9kYXRhLCAmZHN0LT5jbnRfZGF0YSwKKwkJCQkgICBkZWx0YV9saW1pdCwKKwkJCQkgICAmc3JjX2NvcGllZCwgJmxpdGVyYWxfYWRkZWQpKQorCQlyZXR1cm4gMDsKKworCS8qIEhvdyBzaW1pbGFyIGFyZSB0aGV5PworCSAqIHdoYXQgcGVyY2VudGFnZSBvZiBtYXRlcmlhbCBpbiBkc3QgYXJlIGZyb20gc291cmNlPworCSAqLworCWlmICghZHN0LT5zaXplKQorCQlzY29yZSA9IDA7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCisJZWxzZQorCQlzY29yZSA9IChpbnQpKHNyY19jb3BpZWQgKiBNQVhfU0NPUkUgLyBtYXhfc2l6ZSk7CisJcmV0dXJuIHNjb3JlOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfcmVuYW1lX3BhaXIoaW50IGRzdF9pbmRleCwgaW50IHNyY19pbmRleCwgaW50IHNjb3JlKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcmMsICpkc3Q7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKmRwOworCisJaWYgKHJlbmFtZV9kc3RbZHN0X2luZGV4XS5wYWlyKQorCQlkaWUoImludGVybmFsIGVycm9yOiBkc3QgYWxyZWFkeSBtYXRjaGVkLiIpOworCisJc3JjID0gcmVuYW1lX3NyY1tzcmNfaW5kZXhdLnAtPm9uZTsKKwlzcmMtPnJlbmFtZV91c2VkKys7CisJc3JjLT5jb3VudCsrOworCisJZHN0ID0gcmVuYW1lX2RzdFtkc3RfaW5kZXhdLnR3bzsKKwlkc3QtPmNvdW50Kys7CisKKwlkcCA9IGRpZmZfcXVldWUoTlVMTCwgc3JjLCBkc3QpOworCWRwLT5yZW5hbWVkX3BhaXIgPSAxOworCWlmICghc3RyY21wKHNyYy0+cGF0aCwgZHN0LT5wYXRoKSkKKwkJZHAtPnNjb3JlID0gcmVuYW1lX3NyY1tzcmNfaW5kZXhdLnNjb3JlOworCWVsc2UKKwkJZHAtPnNjb3JlID0gc2NvcmU7CisJcmVuYW1lX2RzdFtkc3RfaW5kZXhdLnBhaXIgPSBkcDsKK30KKworLyoKKyAqIFdlIHNvcnQgdGhlIHJlbmFtZSBzaW1pbGFyaXR5IG1hdHJpeCB3aXRoIHRoZSBzY29yZSwgaW4gZGVzY2VuZGluZworICogb3JkZXIgKHRoZSBtb3N0IHNpbWlsYXIgZmlyc3QpLgorICovCitzdGF0aWMgaW50IHNjb3JlX2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCBkaWZmX3Njb3JlICphID0gYV8sICpiID0gYl87CisKKwkvKiBzaW5rIHRoZSB1bnVzZWQgb25lcyB0byB0aGUgYm90dG9tICovCisJaWYgKGEtPmRzdCA8IDApCisJCXJldHVybiAoMCA8PSBiLT5kc3QpOworCWVsc2UgaWYgKGItPmRzdCA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChhLT5zY29yZSA9PSBiLT5zY29yZSkKKwkJcmV0dXJuIGItPm5hbWVfc2NvcmUgLSBhLT5uYW1lX3Njb3JlOworCisJcmV0dXJuIGItPnNjb3JlIC0gYS0+c2NvcmU7Cit9CisKK3N0cnVjdCBmaWxlX3NpbWlsYXJpdHkgeworCWludCBzcmNfZHN0LCBpbmRleDsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZmlsZXNwZWM7CisJc3RydWN0IGZpbGVfc2ltaWxhcml0eSAqbmV4dDsKK307CisKK3N0YXRpYyBpbnQgZmluZF9pZGVudGljYWxfZmlsZXMoc3RydWN0IGZpbGVfc2ltaWxhcml0eSAqc3JjLAorCQkJCXN0cnVjdCBmaWxlX3NpbWlsYXJpdHkgKmRzdCwKKwkJCQlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCByZW5hbWVzID0gMDsKKworCS8qCisJICogV2FsayBvdmVyIGFsbCB0aGUgZGVzdGluYXRpb25zIC4uLgorCSAqLworCWRvIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnRhcmdldCA9IGRzdC0+ZmlsZXNwZWM7CisJCXN0cnVjdCBmaWxlX3NpbWlsYXJpdHkgKnAsICpiZXN0OworCQlpbnQgaSA9IDEwMCwgYmVzdF9zY29yZSA9IC0xOworCisJCS8qCisJCSAqIC4uIHRvIGZpbmQgdGhlIGJlc3Qgc291cmNlIG1hdGNoCisJCSAqLworCQliZXN0ID0gTlVMTDsKKwkJZm9yIChwID0gc3JjOyBwOyBwID0gcC0+bmV4dCkgeworCQkJaW50IHNjb3JlOworCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNvdXJjZSA9IHAtPmZpbGVzcGVjOworCisJCQkvKiBGYWxzZSBoYXNoIGNvbGxpc2lvbj8gKi8KKwkJCWlmIChoYXNoY21wKHNvdXJjZS0+c2hhMSwgdGFyZ2V0LT5zaGExKSkKKwkJCQljb250aW51ZTsKKwkJCS8qIE5vbi1yZWd1bGFyIGZpbGVzPyBJZiBzbywgdGhlIG1vZGVzIG11c3QgbWF0Y2ghICovCisJCQlpZiAoIVNfSVNSRUcoc291cmNlLT5tb2RlKSB8fCAhU19JU1JFRyh0YXJnZXQtPm1vZGUpKSB7CisJCQkJaWYgKHNvdXJjZS0+bW9kZSAhPSB0YXJnZXQtPm1vZGUpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogR2l2ZSBoaWdoZXIgc2NvcmVzIHRvIHNvdXJjZXMgdGhhdCBoYXZlbid0IGJlZW4gdXNlZCBhbHJlYWR5ICovCisJCQlzY29yZSA9ICFzb3VyY2UtPnJlbmFtZV91c2VkOworCQkJaWYgKHNvdXJjZS0+cmVuYW1lX3VzZWQgJiYgb3B0aW9ucy0+ZGV0ZWN0X3JlbmFtZSAhPSBESUZGX0RFVEVDVF9DT1BZKQorCQkJCWNvbnRpbnVlOworCQkJc2NvcmUgKz0gYmFzZW5hbWVfc2FtZShzb3VyY2UsIHRhcmdldCk7CisJCQlpZiAoc2NvcmUgPiBiZXN0X3Njb3JlKSB7CisJCQkJYmVzdCA9IHA7CisJCQkJYmVzdF9zY29yZSA9IHNjb3JlOworCQkJCWlmIChzY29yZSA9PSAyKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyogVG9vIG1hbnkgaWRlbnRpY2FsIGFsdGVybmF0aXZlcz8gUGljayBvbmUgKi8KKwkJCWlmICghLS1pKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChiZXN0KSB7CisJCQlyZWNvcmRfcmVuYW1lX3BhaXIoZHN0LT5pbmRleCwgYmVzdC0+aW5kZXgsIE1BWF9TQ09SRSk7CisJCQlyZW5hbWVzKys7CisJCX0KKwl9IHdoaWxlICgoZHN0ID0gZHN0LT5uZXh0KSAhPSBOVUxMKTsKKwlyZXR1cm4gcmVuYW1lczsKK30KKworc3RhdGljIHZvaWQgZnJlZV9zaW1pbGFyaXR5X2xpc3Qoc3RydWN0IGZpbGVfc2ltaWxhcml0eSAqcCkKK3sKKwl3aGlsZSAocCkgeworCQlzdHJ1Y3QgZmlsZV9zaW1pbGFyaXR5ICplbnRyeSA9IHA7CisJCXAgPSBwLT5uZXh0OworCQlmcmVlKGVudHJ5KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZmluZF9zYW1lX2ZpbGVzKHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBmaWxlX3NpbWlsYXJpdHkgKnAgPSBwdHI7CisJc3RydWN0IGZpbGVfc2ltaWxhcml0eSAqc3JjID0gTlVMTCwgKmRzdCA9IE5VTEw7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IGRhdGE7CisKKwkvKiBTcGxpdCB0aGUgaGFzaCBsaXN0IHVwIGludG8gc291cmNlcyBhbmQgZGVzdGluYXRpb25zICovCisJZG8geworCQlzdHJ1Y3QgZmlsZV9zaW1pbGFyaXR5ICplbnRyeSA9IHA7CisJCXAgPSBwLT5uZXh0OworCQlpZiAoZW50cnktPnNyY19kc3QgPCAwKSB7CisJCQllbnRyeS0+bmV4dCA9IHNyYzsKKwkJCXNyYyA9IGVudHJ5OworCQl9IGVsc2UgeworCQkJZW50cnktPm5leHQgPSBkc3Q7CisJCQlkc3QgPSBlbnRyeTsKKwkJfQorCX0gd2hpbGUgKHApOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGJvdGggc291cmNlcyAqYW5kKiBkZXN0aW5hdGlvbnMsIHNlZSBpZgorCSAqIHdlIGNhbiBtYXRjaCB0aGVtIHVwCisJICovCisJcmV0ID0gKHNyYyAmJiBkc3QpID8gZmluZF9pZGVudGljYWxfZmlsZXMoc3JjLCBkc3QsIG9wdGlvbnMpIDogMDsKKworCS8qIEZyZWUgdGhlIGhhc2hlcyBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgcmVuYW1lcyBmb3VuZCAqLworCWZyZWVfc2ltaWxhcml0eV9saXN0KHNyYyk7CisJZnJlZV9zaW1pbGFyaXR5X2xpc3QoZHN0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGhhc2hfZmlsZXNwZWMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjKQoreworCXVuc2lnbmVkIGludCBoYXNoOworCWlmICghZmlsZXNwZWMtPnNoYTFfdmFsaWQpIHsKKwkJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoZmlsZXNwZWMsIDApKQorCQkJcmV0dXJuIDA7CisJCWhhc2hfc2hhMV9maWxlKGZpbGVzcGVjLT5kYXRhLCBmaWxlc3BlYy0+c2l6ZSwgImJsb2IiLCBmaWxlc3BlYy0+c2hhMSk7CisJfQorCW1lbWNweSgmaGFzaCwgZmlsZXNwZWMtPnNoYTEsIHNpemVvZihoYXNoKSk7CisJcmV0dXJuIGhhc2g7Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF9maWxlX3RhYmxlKHN0cnVjdCBoYXNoX3RhYmxlICp0YWJsZSwgaW50IHNyY19kc3QsIGludCBpbmRleCwgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjKQoreworCXZvaWQgKipwb3M7CisJdW5zaWduZWQgaW50IGhhc2g7CisJc3RydWN0IGZpbGVfc2ltaWxhcml0eSAqZW50cnkgPSB4bWFsbG9jKHNpemVvZigqZW50cnkpKTsKKworCWVudHJ5LT5zcmNfZHN0ID0gc3JjX2RzdDsKKwllbnRyeS0+aW5kZXggPSBpbmRleDsKKwllbnRyeS0+ZmlsZXNwZWMgPSBmaWxlc3BlYzsKKwllbnRyeS0+bmV4dCA9IE5VTEw7CisKKwloYXNoID0gaGFzaF9maWxlc3BlYyhmaWxlc3BlYyk7CisJcG9zID0gaW5zZXJ0X2hhc2goaGFzaCwgZW50cnksIHRhYmxlKTsKKworCS8qIFdlIGFscmVhZHkgaGFkIGFuIGVudHJ5IHRoZXJlPyAqLworCWlmIChwb3MpIHsKKwkJZW50cnktPm5leHQgPSAqcG9zOworCQkqcG9zID0gZW50cnk7CisJfQorfQorCisvKgorICogRmluZCBleGFjdCByZW5hbWVzIGZpcnN0LgorICoKKyAqIFRoZSBmaXJzdCByb3VuZCBtYXRjaGVzIHVwIHRoZSB1cC10by1kYXRlIGVudHJpZXMsCisgKiBhbmQgdGhlbiBkdXJpbmcgdGhlIHNlY29uZCByb3VuZCB3ZSB0cnkgdG8gbWF0Y2gKKyAqIGNhY2hlLWRpcnR5IGVudHJpZXMgYXMgd2VsbC4KKyAqLworc3RhdGljIGludCBmaW5kX2V4YWN0X3JlbmFtZXMoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaGFzaF90YWJsZSBmaWxlX3RhYmxlOworCisJaW5pdF9oYXNoKCZmaWxlX3RhYmxlKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVuYW1lX3NyY19ucjsgaSsrKQorCQlpbnNlcnRfZmlsZV90YWJsZSgmZmlsZV90YWJsZSwgLTEsIGksIHJlbmFtZV9zcmNbaV0ucC0+b25lKTsKKworCWZvciAoaSA9IDA7IGkgPCByZW5hbWVfZHN0X25yOyBpKyspCisJCWluc2VydF9maWxlX3RhYmxlKCZmaWxlX3RhYmxlLCAxLCBpLCByZW5hbWVfZHN0W2ldLnR3byk7CisKKwkvKiBGaW5kIHRoZSByZW5hbWVzICovCisJaSA9IGZvcl9lYWNoX2hhc2goJmZpbGVfdGFibGUsIGZpbmRfc2FtZV9maWxlcywgb3B0aW9ucyk7CisKKwkvKiAuLiBhbmQgZnJlZSB0aGUgaGFzaCBkYXRhIHN0cnVjdHVyZSAqLworCWZyZWVfaGFzaCgmZmlsZV90YWJsZSk7CisKKwlyZXR1cm4gaTsKK30KKworI2RlZmluZSBOVU1fQ0FORElEQVRFX1BFUl9EU1QgNAorc3RhdGljIHZvaWQgcmVjb3JkX2lmX2JldHRlcihzdHJ1Y3QgZGlmZl9zY29yZSBtW10sIHN0cnVjdCBkaWZmX3Njb3JlICpvKQoreworCWludCBpLCB3b3JzdDsKKworCS8qIGZpbmQgdGhlIHdvcnN0IG9uZSAqLworCXdvcnN0ID0gMDsKKwlmb3IgKGkgPSAxOyBpIDwgTlVNX0NBTkRJREFURV9QRVJfRFNUOyBpKyspCisJCWlmIChzY29yZV9jb21wYXJlKCZtW2ldLCAmbVt3b3JzdF0pID4gMCkKKwkJCXdvcnN0ID0gaTsKKworCS8qIGlzIGl0IGJldHRlciB0aGFuIHRoZSB3b3JzdCBvbmU/ICovCisJaWYgKHNjb3JlX2NvbXBhcmUoJm1bd29yc3RdLCBvKSA+IDApCisJCW1bd29yc3RdID0gKm87Cit9CisKKy8qCisgKiBSZXR1cm5zOgorICogMCBpZiB3ZSBhcmUgdW5kZXIgdGhlIGxpbWl0OworICogMSBpZiB3ZSBuZWVkIHRvIGRpc2FibGUgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uOworICogMiBpZiB3ZSB3b3VsZCBiZSB1bmRlciB0aGUgbGltaXQgaWYgd2Ugd2VyZSBnaXZlbiAtQyBpbnN0ZWFkIG9mIC1DIC1DLgorICovCitzdGF0aWMgaW50IHRvb19tYW55X3JlbmFtZV9jYW5kaWRhdGVzKGludCBudW1fY3JlYXRlLAorCQkJCSAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IHJlbmFtZV9saW1pdCA9IG9wdGlvbnMtPnJlbmFtZV9saW1pdDsKKwlpbnQgbnVtX3NyYyA9IHJlbmFtZV9zcmNfbnI7CisJaW50IGk7CisKKwlvcHRpb25zLT5uZWVkZWRfcmVuYW1lX2xpbWl0ID0gMDsKKworCS8qCisJICogVGhpcyBiYXNpY2FsbHkgZG9lcyBhIHRlc3QgZm9yIHRoZSByZW5hbWUgbWF0cml4IG5vdAorCSAqIGdyb3dpbmcgbGFyZ2VyIHRoYW4gYSAicmVuYW1lX2xpbWl0IiBzcXVhcmUgbWF0cml4LCBpZToKKwkgKgorCSAqICAgIG51bV9jcmVhdGUgKiBudW1fc3JjID4gcmVuYW1lX2xpbWl0ICogcmVuYW1lX2xpbWl0CisJICoKKwkgKiBidXQgaGFuZGxlcyB0aGUgcG90ZW50aWFsIG92ZXJmbG93IGNhc2Ugc3BlY2lhbGx5IChhbmQgd2UKKwkgKiBhc3N1bWUgYXQgbGVhc3QgMzItYml0IGludGVnZXJzKQorCSAqLworCWlmIChyZW5hbWVfbGltaXQgPD0gMCB8fCByZW5hbWVfbGltaXQgPiAzMjc2NykKKwkJcmVuYW1lX2xpbWl0ID0gMzI3Njc7CisJaWYgKChudW1fY3JlYXRlIDw9IHJlbmFtZV9saW1pdCB8fCBudW1fc3JjIDw9IHJlbmFtZV9saW1pdCkgJiYKKwkgICAgKG51bV9jcmVhdGUgKiBudW1fc3JjIDw9IHJlbmFtZV9saW1pdCAqIHJlbmFtZV9saW1pdCkpCisJCXJldHVybiAwOworCisJb3B0aW9ucy0+bmVlZGVkX3JlbmFtZV9saW1pdCA9CisJCW51bV9zcmMgPiBudW1fY3JlYXRlID8gbnVtX3NyYyA6IG51bV9jcmVhdGU7CisKKwkvKiBBcmUgd2UgcnVubmluZyB1bmRlciAtQyAtQz8gKi8KKwlpZiAoIURJRkZfT1BUX1RTVChvcHRpb25zLCBGSU5EX0NPUElFU19IQVJERVIpKQorCQlyZXR1cm4gMTsKKworCS8qIFdvdWxkIHdlIGJ1c3QgdGhlIGxpbWl0IGlmIHdlIHdlcmUgcnVubmluZyB1bmRlciAtQz8gKi8KKwlmb3IgKG51bV9zcmMgPSBpID0gMDsgaSA8IHJlbmFtZV9zcmNfbnI7IGkrKykgeworCQlpZiAoZGlmZl91bm1vZGlmaWVkX3BhaXIocmVuYW1lX3NyY1tpXS5wKSkKKwkJCWNvbnRpbnVlOworCQludW1fc3JjKys7CisJfQorCWlmICgobnVtX2NyZWF0ZSA8PSByZW5hbWVfbGltaXQgfHwgbnVtX3NyYyA8PSByZW5hbWVfbGltaXQpICYmCisJICAgIChudW1fY3JlYXRlICogbnVtX3NyYyA8PSByZW5hbWVfbGltaXQgKiByZW5hbWVfbGltaXQpKQorCQlyZXR1cm4gMjsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmaW5kX3JlbmFtZXMoc3RydWN0IGRpZmZfc2NvcmUgKm14LCBpbnQgZHN0X2NudCwgaW50IG1pbmltdW1fc2NvcmUsIGludCBjb3BpZXMpCit7CisJaW50IGNvdW50ID0gMCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkc3RfY250ICogTlVNX0NBTkRJREFURV9QRVJfRFNUOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0OworCisJCWlmICgobXhbaV0uZHN0IDwgMCkgfHwKKwkJICAgIChteFtpXS5zY29yZSA8IG1pbmltdW1fc2NvcmUpKQorCQkJYnJlYWs7IC8qIHRoZXJlIGlzIG5vIG1vcmUgdXNhYmxlIHBhaXIuICovCisJCWRzdCA9ICZyZW5hbWVfZHN0W214W2ldLmRzdF07CisJCWlmIChkc3QtPnBhaXIpCisJCQljb250aW51ZTsgLyogYWxyZWFkeSBkb25lLCBlaXRoZXIgZXhhY3Qgb3IgZnV6enkuICovCisJCWlmICghY29waWVzICYmIHJlbmFtZV9zcmNbbXhbaV0uc3JjXS5wLT5vbmUtPnJlbmFtZV91c2VkKQorCQkJY29udGludWU7CisJCXJlY29yZF9yZW5hbWVfcGFpcihteFtpXS5kc3QsIG14W2ldLnNyYywgbXhbaV0uc2NvcmUpOworCQljb3VudCsrOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3ZvaWQgZGlmZmNvcmVfcmVuYW1lKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGRldGVjdF9yZW5hbWUgPSBvcHRpb25zLT5kZXRlY3RfcmVuYW1lOworCWludCBtaW5pbXVtX3Njb3JlID0gb3B0aW9ucy0+cmVuYW1lX3Njb3JlOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCXN0cnVjdCBkaWZmX3Njb3JlICpteDsKKwlpbnQgaSwgaiwgcmVuYW1lX2NvdW50LCBza2lwX3VubW9kaWZpZWQgPSAwOworCWludCBudW1fY3JlYXRlLCBkc3RfY250OworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCisJaWYgKCFtaW5pbXVtX3Njb3JlKQorCQltaW5pbXVtX3Njb3JlID0gREVGQVVMVF9SRU5BTUVfU0NPUkU7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpKSB7CisJCQlpZiAoIURJRkZfRklMRV9WQUxJRChwLT50d28pKQorCQkJCWNvbnRpbnVlOyAvKiB1bm1lcmdlZCAqLworCQkJZWxzZSBpZiAob3B0aW9ucy0+c2luZ2xlX2ZvbGxvdyAmJgorCQkJCSBzdHJjbXAob3B0aW9ucy0+c2luZ2xlX2ZvbGxvdywgcC0+dHdvLT5wYXRoKSkKKwkJCQljb250aW51ZTsgLyogbm90IGludGVyZXN0ZWQgKi8KKwkJCWVsc2UgaWYgKCFESUZGX09QVF9UU1Qob3B0aW9ucywgUkVOQU1FX0VNUFRZKSAmJgorCQkJCSBpc19lbXB0eV9ibG9iX3NoYTEocC0+dHdvLT5zaGExKSkKKwkJCQljb250aW51ZTsKKwkJCWVsc2UKKwkJCQlsb2NhdGVfcmVuYW1lX2RzdChwLT50d28sIDEpOworCQl9CisJCWVsc2UgaWYgKCFESUZGX09QVF9UU1Qob3B0aW9ucywgUkVOQU1FX0VNUFRZKSAmJgorCQkJIGlzX2VtcHR5X2Jsb2Jfc2hhMShwLT5vbmUtPnNoYTEpKQorCQkJY29udGludWU7CisJCWVsc2UgaWYgKCFESUZGX1BBSVJfVU5NRVJHRUQocCkgJiYgIURJRkZfRklMRV9WQUxJRChwLT50d28pKSB7CisJCQkvKgorCQkJICogSWYgdGhlIHNvdXJjZSBpcyBhIGJyb2tlbiAiZGVsZXRlIiwgYW5kCisJCQkgKiB0aGV5IGRpZCBub3QgcmVhbGx5IHdhbnQgdG8gZ2V0IGJyb2tlbiwKKwkJCSAqIHRoYXQgbWVhbnMgdGhlIHNvdXJjZSBhY3R1YWxseSBzdGF5cy4KKwkJCSAqIFNvIHdlIGluY3JlbWVudCB0aGUgInJlbmFtZV91c2VkIiBzY29yZQorCQkJICogYnkgb25lLCB0byBpbmRpY2F0ZSBvdXJzZWx2ZXMgYXMgYSB1c2VyCisJCQkgKi8KKwkJCWlmIChwLT5icm9rZW5fcGFpciAmJiAhcC0+c2NvcmUpCisJCQkJcC0+b25lLT5yZW5hbWVfdXNlZCsrOworCQkJcmVnaXN0ZXJfcmVuYW1lX3NyYyhwKTsKKwkJfQorCQllbHNlIGlmIChkZXRlY3RfcmVuYW1lID09IERJRkZfREVURUNUX0NPUFkpIHsKKwkJCS8qCisJCQkgKiBJbmNyZW1lbnQgdGhlICJyZW5hbWVfdXNlZCIgc2NvcmUgYnkKKwkJCSAqIG9uZSwgdG8gaW5kaWNhdGUgb3Vyc2VsdmVzIGFzIGEgdXNlci4KKwkJCSAqLworCQkJcC0+b25lLT5yZW5hbWVfdXNlZCsrOworCQkJcmVnaXN0ZXJfcmVuYW1lX3NyYyhwKTsKKwkJfQorCX0KKwlpZiAocmVuYW1lX2RzdF9uciA9PSAwIHx8IHJlbmFtZV9zcmNfbnIgPT0gMCkKKwkJZ290byBjbGVhbnVwOyAvKiBub3RoaW5nIHRvIGRvICovCisKKwkvKgorCSAqIFdlIHJlYWxseSB3YW50IHRvIGN1bGwgdGhlIGNhbmRpZGF0ZXMgbGlzdCBlYXJseQorCSAqIHdpdGggY2hlYXAgdGVzdHMgaW4gb3JkZXIgdG8gYXZvaWQgZG9pbmcgZGVsdGFzLgorCSAqLworCXJlbmFtZV9jb3VudCA9IGZpbmRfZXhhY3RfcmVuYW1lcyhvcHRpb25zKTsKKworCS8qIERpZCB3ZSBvbmx5IHdhbnQgZXhhY3QgcmVuYW1lcz8gKi8KKwlpZiAobWluaW11bV9zY29yZSA9PSBNQVhfU0NPUkUpCisJCWdvdG8gY2xlYW51cDsKKworCS8qCisJICogQ2FsY3VsYXRlIGhvdyBtYW55IHJlbmFtZXMgYXJlIGxlZnQgKGJ1dCBhbGwgdGhlIHNvdXJjZQorCSAqIGZpbGVzIHN0aWxsIHJlbWFpbiBhcyBvcHRpb25zIGZvciByZW5hbWUvY29waWVzISkKKwkgKi8KKwludW1fY3JlYXRlID0gKHJlbmFtZV9kc3RfbnIgLSByZW5hbWVfY291bnQpOworCisJLyogQWxsIGRvbmU/ICovCisJaWYgKCFudW1fY3JlYXRlKQorCQlnb3RvIGNsZWFudXA7CisKKwlzd2l0Y2ggKHRvb19tYW55X3JlbmFtZV9jYW5kaWRhdGVzKG51bV9jcmVhdGUsIG9wdGlvbnMpKSB7CisJY2FzZSAxOgorCQlnb3RvIGNsZWFudXA7CisJY2FzZSAyOgorCQlvcHRpb25zLT5kZWdyYWRlZF9jY190b19jID0gMTsKKwkJc2tpcF91bm1vZGlmaWVkID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKG9wdGlvbnMtPnNob3dfcmVuYW1lX3Byb2dyZXNzKSB7CisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3NfZGVsYXkoCisJCQkJIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIiwKKwkJCQlyZW5hbWVfZHN0X25yICogcmVuYW1lX3NyY19uciwgNTAsIDEpOworCX0KKworCW14ID0geGNhbGxvYyhudW1fY3JlYXRlICogTlVNX0NBTkRJREFURV9QRVJfRFNULCBzaXplb2YoKm14KSk7CisJZm9yIChkc3RfY250ID0gaSA9IDA7IGkgPCByZW5hbWVfZHN0X25yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3byA9IHJlbmFtZV9kc3RbaV0udHdvOworCQlzdHJ1Y3QgZGlmZl9zY29yZSAqbTsKKworCQlpZiAocmVuYW1lX2RzdFtpXS5wYWlyKQorCQkJY29udGludWU7IC8qIGRlYWx0IHdpdGggZXhhY3QgbWF0Y2ggYWxyZWFkeS4gKi8KKworCQltID0gJm14W2RzdF9jbnQgKiBOVU1fQ0FORElEQVRFX1BFUl9EU1RdOworCQlmb3IgKGogPSAwOyBqIDwgTlVNX0NBTkRJREFURV9QRVJfRFNUOyBqKyspCisJCQltW2pdLmRzdCA9IC0xOworCisJCWZvciAoaiA9IDA7IGogPCByZW5hbWVfc3JjX25yOyBqKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSByZW5hbWVfc3JjW2pdLnAtPm9uZTsKKwkJCXN0cnVjdCBkaWZmX3Njb3JlIHRoaXNfc3JjOworCisJCQlpZiAoc2tpcF91bm1vZGlmaWVkICYmCisJCQkgICAgZGlmZl91bm1vZGlmaWVkX3BhaXIocmVuYW1lX3NyY1tqXS5wKSkKKwkJCQljb250aW51ZTsKKworCQkJdGhpc19zcmMuc2NvcmUgPSBlc3RpbWF0ZV9zaW1pbGFyaXR5KG9uZSwgdHdvLAorCQkJCQkJCSAgICAgbWluaW11bV9zY29yZSk7CisJCQl0aGlzX3NyYy5uYW1lX3Njb3JlID0gYmFzZW5hbWVfc2FtZShvbmUsIHR3byk7CisJCQl0aGlzX3NyYy5kc3QgPSBpOworCQkJdGhpc19zcmMuc3JjID0gajsKKwkJCXJlY29yZF9pZl9iZXR0ZXIobSwgJnRoaXNfc3JjKTsKKwkJCS8qCisJCQkgKiBPbmNlIHdlIHJ1biBlc3RpbWF0ZV9zaW1pbGFyaXR5LAorCQkJICogV2UgZG8gbm90IG5lZWQgdGhlIHRleHQgYW55bW9yZS4KKwkJCSAqLworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2Iob25lKTsKKwkJCWRpZmZfZnJlZV9maWxlc3BlY19ibG9iKHR3byk7CisJCX0KKwkJZHN0X2NudCsrOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCAoaSsxKSpyZW5hbWVfc3JjX25yKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJLyogY29zdCBtYXRyaXggc29ydGVkIGJ5IG1vc3QgdG8gbGVhc3Qgc2ltaWxhciBwYWlyICovCisJcXNvcnQobXgsIGRzdF9jbnQgKiBOVU1fQ0FORElEQVRFX1BFUl9EU1QsIHNpemVvZigqbXgpLCBzY29yZV9jb21wYXJlKTsKKworCXJlbmFtZV9jb3VudCArPSBmaW5kX3JlbmFtZXMobXgsIGRzdF9jbnQsIG1pbmltdW1fc2NvcmUsIDApOworCWlmIChkZXRlY3RfcmVuYW1lID09IERJRkZfREVURUNUX0NPUFkpCisJCXJlbmFtZV9jb3VudCArPSBmaW5kX3JlbmFtZXMobXgsIGRzdF9jbnQsIG1pbmltdW1fc2NvcmUsIDEpOworCWZyZWUobXgpOworCisgY2xlYW51cDoKKwkvKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGZvdW5kIHNvbWUgcmVuYW1lcyBhbmQgY29waWVzIGFuZCB0aGV5CisJICogYXJlIHJlY29yZGVkIGluIHJlbmFtZV9kc3QuICBUaGUgb3JpZ2luYWwgbGlzdCBpcyBzdGlsbCBpbiAqcS4KKwkgKi8KKwlESUZGX1FVRVVFX0NMRUFSKCZvdXRxKTsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcl90b19mcmVlID0gTlVMTDsKKworCQlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKSB7CisJCQlkaWZmX3EoJm91dHEsIHApOworCQl9CisJCWVsc2UgaWYgKCFESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJLyoKKwkJCSAqIENyZWF0aW9uCisJCQkgKgorCQkJICogV2Ugd291bGQgb3V0cHV0IHRoaXMgY3JlYXRlIHJlY29yZCBpZiBpdCBoYXMKKwkJCSAqIG5vdCBiZWVuIHR1cm5lZCBpbnRvIGEgcmVuYW1lL2NvcHkgYWxyZWFkeS4KKwkJCSAqLworCQkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0ID0KKwkJCQlsb2NhdGVfcmVuYW1lX2RzdChwLT50d28sIDApOworCQkJaWYgKGRzdCAmJiBkc3QtPnBhaXIpIHsKKwkJCQlkaWZmX3EoJm91dHEsIGRzdC0+cGFpcik7CisJCQkJcGFpcl90b19mcmVlID0gcDsKKwkJCX0KKwkJCWVsc2UKKwkJCQkvKiBubyBtYXRjaGluZyByZW5hbWUvY29weSBzb3VyY2UsIHNvCisJCQkJICogcmVjb3JkIHRoaXMgYXMgYSBjcmVhdGlvbi4KKwkJCQkgKi8KKwkJCQlkaWZmX3EoJm91dHEsIHApOworCQl9CisJCWVsc2UgaWYgKERJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmICFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJLyoKKwkJCSAqIERlbGV0aW9uCisJCQkgKgorCQkJICogV2Ugd291bGQgb3V0cHV0IHRoaXMgZGVsZXRlIHJlY29yZCBpZjoKKwkJCSAqCisJCQkgKiAoMSkgdGhpcyBpcyBhIGJyb2tlbiBkZWxldGUgYW5kIHRoZSBjb3VudGVycGFydAorCQkJICogICAgIGJyb2tlbiBjcmVhdGUgcmVtYWlucyBpbiB0aGUgb3V0cHV0OyBvcgorCQkJICogKDIpIHRoaXMgaXMgbm90IGEgYnJva2VuIGRlbGV0ZSwgYW5kIHJlbmFtZV9kc3QKKwkJCSAqICAgICBkb2VzIG5vdCBoYXZlIGEgcmVuYW1lL2NvcHkgdG8gbW92ZSBwLT5vbmUtPnBhdGgKKwkJCSAqICAgICBvdXQgb2YgZXhpc3RlbmNlLgorCQkJICoKKwkJCSAqIE90aGVyd2lzZSwgdGhlIGNvdW50ZXJwYXJ0IGJyb2tlbiBjcmVhdGUKKwkJCSAqIGhhcyBiZWVuIHR1cm5lZCBpbnRvIGEgcmVuYW1lLWVkaXQ7IG9yCisJCQkgKiBkZWxldGUgZGlkIG5vdCBoYXZlIGEgbWF0Y2hpbmcgY3JlYXRlIHRvCisJCQkgKiBiZWdpbiB3aXRoLgorCQkJICovCisJCQlpZiAoRElGRl9QQUlSX0JST0tFTihwKSkgeworCQkJCS8qIGJyb2tlbiBkZWxldGUgKi8KKwkJCQlzdHJ1Y3QgZGlmZl9yZW5hbWVfZHN0ICpkc3QgPQorCQkJCQlsb2NhdGVfcmVuYW1lX2RzdChwLT5vbmUsIDApOworCQkJCWlmIChkc3QgJiYgZHN0LT5wYWlyKQorCQkJCQkvKiBjb3VudGVycGFydCBpcyBub3cgcmVuYW1lL2NvcHkgKi8KKwkJCQkJcGFpcl90b19mcmVlID0gcDsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWlmIChwLT5vbmUtPnJlbmFtZV91c2VkKQorCQkJCQkvKiB0aGlzIHBhdGggcmVtYWlucyAqLworCQkJCQlwYWlyX3RvX2ZyZWUgPSBwOworCQkJfQorCisJCQlpZiAocGFpcl90b19mcmVlKQorCQkJCTsKKwkJCWVsc2UKKwkJCQlkaWZmX3EoJm91dHEsIHApOworCQl9CisJCWVsc2UgaWYgKCFkaWZmX3VubW9kaWZpZWRfcGFpcihwKSkKKwkJCS8qIGFsbCB0aGUgdXN1YWwgb25lcyBuZWVkIHRvIGJlIGtlcHQgKi8KKwkJCWRpZmZfcSgmb3V0cSwgcCk7CisJCWVsc2UKKwkJCS8qIG5vIG5lZWQgdG8ga2VlcCB1bm1vZGlmaWVkIHBhaXJzICovCisJCQlwYWlyX3RvX2ZyZWUgPSBwOworCisJCWlmIChwYWlyX3RvX2ZyZWUpCisJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocGFpcl90b19mcmVlKTsKKwl9CisJZGlmZl9kZWJ1Z19xdWV1ZSgiZG9uZSBjb3B5aW5nIG9yaWdpbmFsIiwgJm91dHEpOworCisJZnJlZShxLT5xdWV1ZSk7CisJKnEgPSBvdXRxOworCWRpZmZfZGVidWdfcXVldWUoImRvbmUgY29sbGFwc2luZyIsIHEpOworCisJZm9yIChpID0gMDsgaSA8IHJlbmFtZV9kc3RfbnI7IGkrKykKKwkJZnJlZV9maWxlc3BlYyhyZW5hbWVfZHN0W2ldLnR3byk7CisKKwlmcmVlKHJlbmFtZV9kc3QpOworCXJlbmFtZV9kc3QgPSBOVUxMOworCXJlbmFtZV9kc3RfbnIgPSByZW5hbWVfZHN0X2FsbG9jID0gMDsKKwlmcmVlKHJlbmFtZV9zcmMpOworCXJlbmFtZV9zcmMgPSBOVUxMOworCXJlbmFtZV9zcmNfbnIgPSByZW5hbWVfc3JjX2FsbG9jID0gMDsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kaWZmY29yZS5oIGIvZGlmZmNvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzE2Yzg1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlmZmNvcmUuaApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBKdW5pbyBDIEhhbWFubworICovCisjaWZuZGVmIERJRkZDT1JFX0gKKyNkZWZpbmUgRElGRkNPUkVfSAorCisvKiBUaGlzIGhlYWRlciBmaWxlIGlzIGludGVybmFsIGJldHdlZW4gZGlmZi5jIGFuZCBpdHMgZGlmZiB0cmFuc2Zvcm1lcnMKKyAqIChlLmcuIGRpZmZjb3JlLXJlbmFtZSwgZGlmZmNvcmUtcGlja2F4ZSkuICBOZXZlciBpbmNsdWRlIHRoaXMgaGVhZGVyCisgKiBpbiBhbnl0aGluZyBlbHNlLgorICovCisKKy8qIFdlIGludGVybmFsbHkgdXNlIHVuc2lnbmVkIHNob3J0IGFzIHRoZSBzY29yZSB2YWx1ZSwKKyAqIGFuZCByZWx5IG9uIGFuIGludCBjYXBhYmxlIHRvIGhvbGQgMzItYml0cy4gIC1CIGNhbiB0YWtlCisgKiAtQm1lcmdlX3Njb3JlL2JyZWFrX3Njb3JlIGZvcm1hdCBhbmQgdGhlIHR3byBzY29yZXMgYXJlCisgKiBwYXNzZWQgYXJvdW5kIGluIG9uZSBpbnQgKGhpZ2ggMTYtYml0IGZvciBtZXJnZSBhbmQgbG93IDE2LWJpdAorICogZm9yIGJyZWFrKS4KKyAqLworI2RlZmluZSBNQVhfU0NPUkUgNjAwMDAuMAorI2RlZmluZSBERUZBVUxUX1JFTkFNRV9TQ09SRSAzMDAwMCAvKiByZW5hbWUvY29weSBzaW1pbGFyaXR5IG1pbmltdW0gKDUwJSkgKi8KKyNkZWZpbmUgREVGQVVMVF9CUkVBS19TQ09SRSAgMzAwMDAgLyogbWluaW11bSBmb3IgYnJlYWsgdG8gaGFwcGVuICg1MCUpICovCisjZGVmaW5lIERFRkFVTFRfTUVSR0VfU0NPUkUgIDM2MDAwIC8qIG1heGltdW0gZm9yIGJyZWFrLW1lcmdlIHRvIGhhcHBlbiAoNjAlKSAqLworCisjZGVmaW5lIE1JTklNVU1fQlJFQUtfU0laRSAgICAgNDAwIC8qIGRvIG5vdCBicmVhayBhIGZpbGUgc21hbGxlciB0aGFuIHRoaXMgKi8KKworc3RydWN0IHVzZXJkaWZmX2RyaXZlcjsKKworc3RydWN0IGRpZmZfZmlsZXNwZWMgeworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciAqcGF0aDsKKwl2b2lkICpkYXRhOworCXZvaWQgKmNudF9kYXRhOworCWNvbnN0IGNoYXIgKmZ1bmNuYW1lX3BhdHRlcm5faWRlbnQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBjb3VudDsgICAgICAgICAgICAgICAvKiBSZWZlcmVuY2UgY291bnQgKi8KKwlpbnQgeGZybV9mbGFnczsJCSAvKiBmb3IgdXNlIGJ5IHRoZSB4ZnJtICovCisJaW50IHJlbmFtZV91c2VkOyAgICAgICAgIC8qIENvdW50IG9mIHJlbmFtZSB1c2VycyAqLworCXVuc2lnbmVkIHNob3J0IG1vZGU7CSAvKiBmaWxlIG1vZGUgKi8KKwl1bnNpZ25lZCBzaGExX3ZhbGlkIDogMTsgLyogaWYgdHJ1ZSwgdXNlIHNoYTEgYW5kIHRydXN0IG1vZGU7CisJCQkJICAqIGlmIGZhbHNlLCB1c2UgdGhlIG5hbWUgYW5kIHJlYWQgZnJvbQorCQkJCSAgKiB0aGUgZmlsZXN5c3RlbS4KKwkJCQkgICovCisjZGVmaW5lIERJRkZfRklMRV9WQUxJRChzcGVjKSAoKChzcGVjKS0+bW9kZSkgIT0gMCkKKwl1bnNpZ25lZCBzaG91bGRfZnJlZSA6IDE7IC8qIGRhdGEgc2hvdWxkIGJlIGZyZWUoKSdlZCAqLworCXVuc2lnbmVkIHNob3VsZF9tdW5tYXAgOiAxOyAvKiBkYXRhIHNob3VsZCBiZSBtdW5tYXAoKSdlZCAqLworCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSA6IDI7ICAvKiBGb3Igc3VibW9kdWxlczogaXRzIHdvcmsgdHJlZSBpcyBkaXJ0eSAqLworCXVuc2lnbmVkIGlzX3N0ZGluIDogMTsKKyNkZWZpbmUgRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRCAxCisjZGVmaW5lIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCAgMgorCXVuc2lnbmVkIGhhc19tb3JlX2VudHJpZXMgOiAxOyAvKiBvbmx5IGFwcGVhciBpbiBjb21iaW5lZCBkaWZmICovCisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyOworCS8qIGRhdGEgc2hvdWxkIGJlIGNvbnNpZGVyZWQgImJpbmFyeSI7IC0xIG1lYW5zICJkb24ndCBrbm93IHlldCIgKi8KKwlpbnQgaXNfYmluYXJ5OworfTsKKworZXh0ZXJuIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICphbGxvY19maWxlc3BlYyhjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZnJlZV9maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKK2V4dGVybiB2b2lkIGZpbGxfZmlsZXNwZWMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorCQkJICBpbnQsIHVuc2lnbmVkIHNob3J0KTsKKworZXh0ZXJuIGludCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICosIGludCk7CitleHRlcm4gdm9pZCBkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKK2V4dGVybiB2b2lkIGRpZmZfZnJlZV9maWxlc3BlY19ibG9iKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICopOworZXh0ZXJuIGludCBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKKworc3RydWN0IGRpZmZfZmlsZXBhaXIgeworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmU7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bzsKKwl1bnNpZ25lZCBzaG9ydCBpbnQgc2NvcmU7CisJY2hhciBzdGF0dXM7IC8qIE0gQyBSIEEgRCBVIGV0Yy4gKHNlZSBEb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dCBvciBESUZGX1NUQVRVU18qIGluIGRpZmYuaCkgKi8KKwl1bnNpZ25lZCBicm9rZW5fcGFpciA6IDE7CisJdW5zaWduZWQgcmVuYW1lZF9wYWlyIDogMTsKKwl1bnNpZ25lZCBpc191bm1lcmdlZCA6IDE7Cit9OworI2RlZmluZSBESUZGX1BBSVJfVU5NRVJHRUQocCkgKChwKS0+aXNfdW5tZXJnZWQpCisKKyNkZWZpbmUgRElGRl9QQUlSX1JFTkFNRShwKSAoKHApLT5yZW5hbWVkX3BhaXIpCisKKyNkZWZpbmUgRElGRl9QQUlSX0JST0tFTihwKSBcCisJKCAoIURJRkZfRklMRV9WQUxJRCgocCktPm9uZSkgIT0gIURJRkZfRklMRV9WQUxJRCgocCktPnR3bykpICYmIFwKKwkgICgocCktPmJyb2tlbl9wYWlyICE9IDApICkKKworI2RlZmluZSBESUZGX1BBSVJfVFlQRV9DSEFOR0VEKHApIFwKKwkoKFNfSUZNVCAmIChwKS0+b25lLT5tb2RlKSAhPSAoU19JRk1UICYgKHApLT50d28tPm1vZGUpKQorCisjZGVmaW5lIERJRkZfUEFJUl9NT0RFX0NIQU5HRUQocCkgKChwKS0+b25lLT5tb2RlICE9IChwKS0+dHdvLT5tb2RlKQorCitleHRlcm4gdm9pZCBkaWZmX2ZyZWVfZmlsZXBhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKik7CisKK2V4dGVybiBpbnQgZGlmZl91bm1vZGlmaWVkX3BhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKik7CisKK3N0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCB7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKipxdWV1ZTsKKwlpbnQgYWxsb2M7CisJaW50IG5yOworfTsKKyNkZWZpbmUgRElGRl9RVUVVRV9DTEVBUihxKSBcCisJZG8geyBcCisJCShxKS0+cXVldWUgPSBOVUxMOyBcCisJCShxKS0+bnIgPSAocSktPmFsbG9jID0gMDsgXAorCX0gd2hpbGUgKDApCisKK2V4dGVybiBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgZGlmZl9xdWV1ZWRfZGlmZjsKK2V4dGVybiBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZGlmZl9xdWV1ZShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKiwKKwkJCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKiwKKwkJCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKik7CitleHRlcm4gdm9pZCBkaWZmX3Eoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICosIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICopOworCitleHRlcm4gdm9pZCBkaWZmY29yZV9icmVhayhpbnQpOworZXh0ZXJuIHZvaWQgZGlmZmNvcmVfcmVuYW1lKHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CitleHRlcm4gdm9pZCBkaWZmY29yZV9tZXJnZV9icm9rZW4odm9pZCk7CitleHRlcm4gdm9pZCBkaWZmY29yZV9waWNrYXhlKHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CitleHRlcm4gdm9pZCBkaWZmY29yZV9vcmRlcihjb25zdCBjaGFyICpvcmRlcmZpbGUpOworCisjZGVmaW5lIERJRkZfREVCVUcgMAorI2lmIERJRkZfREVCVUcKK3ZvaWQgZGlmZl9kZWJ1Z19maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqLCBpbnQsIGNvbnN0IGNoYXIgKik7Cit2b2lkIGRpZmZfZGVidWdfZmlsZXBhaXIoY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKiwgaW50KTsKK3ZvaWQgZGlmZl9kZWJ1Z19xdWV1ZShjb25zdCBjaGFyICosIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqKTsKKyNlbHNlCisjZGVmaW5lIGRpZmZfZGVidWdfZmlsZXNwZWMoYSxiLGMpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2RlZmluZSBkaWZmX2RlYnVnX2ZpbGVwYWlyKGEsYikgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZGVmaW5lIGRpZmZfZGVidWdfcXVldWUoYSxiKSBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKKyNlbmRpZgorCitleHRlcm4gaW50IGRpZmZjb3JlX2NvdW50X2NoYW5nZXMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYywKKwkJCQkgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkc3QsCisJCQkJICB2b2lkICoqc3JjX2NvdW50X3AsCisJCQkJICB2b2lkICoqZHN0X2NvdW50X3AsCisJCQkJICB1bnNpZ25lZCBsb25nIGRlbHRhX2xpbWl0LAorCQkJCSAgdW5zaWduZWQgbG9uZyAqc3JjX2NvcGllZCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKmxpdGVyYWxfYWRkZWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Rpci5jIGIvZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2ODMzOQotLS0gL2Rldi9udWxsCisrKyBiL2Rpci5jCkBAIC0wLDAgKzEsMTM4NyBAQAorLyoKKyAqIFRoaXMgaGFuZGxlcyByZWN1cnNpdmUgZmlsZW5hbWUgZGV0ZWN0aW9uIHdpdGggZXhjbHVkZQorICogZmlsZXMsIGluZGV4IGtub3dsZWRnZSBldGMuLgorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUtMjAwNgorICoJCSBKdW5pbyBIYW1hbm8sIDIwMDUtMjAwNgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisKK3N0cnVjdCBwYXRoX3NpbXBsaWZ5IHsKKwlpbnQgbGVuOworCWNvbnN0IGNoYXIgKnBhdGg7Cit9OworCitzdGF0aWMgaW50IHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLAorCWludCBjaGVja19vbmx5LCBjb25zdCBzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnkpOworc3RhdGljIGludCBnZXRfZHR5cGUoc3RydWN0IGRpcmVudCAqZGUsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pOworCisvKiBoZWxwZXIgc3RyaW5nIGZ1bmN0aW9ucyB3aXRoIHN1cHBvcnQgZm9yIHRoZSBpZ25vcmVfY2FzZSBmbGFnICovCitpbnQgc3RyY21wX2ljYXNlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJcmV0dXJuIGlnbm9yZV9jYXNlID8gc3RyY2FzZWNtcChhLCBiKSA6IHN0cmNtcChhLCBiKTsKK30KKworaW50IHN0cm5jbXBfaWNhc2UoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBpZ25vcmVfY2FzZSA/IHN0cm5jYXNlY21wKGEsIGIsIGNvdW50KSA6IHN0cm5jbXAoYSwgYiwgY291bnQpOworfQorCitpbnQgZm5tYXRjaF9pY2FzZShjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcsIGludCBmbGFncykKK3sKKwlyZXR1cm4gZm5tYXRjaChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzIHwgKGlnbm9yZV9jYXNlID8gRk5NX0NBU0VGT0xEIDogMCkpOworfQorCitzdGF0aWMgc2l6ZV90IGNvbW1vbl9wcmVmaXhfbGVuKGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwljb25zdCBjaGFyICpuLCAqZmlyc3Q7CisJc2l6ZV90IG1heCA9IDA7CisKKwlpZiAoIXBhdGhzcGVjKQorCQlyZXR1cm4gbWF4OworCisJZmlyc3QgPSAqcGF0aHNwZWM7CisJd2hpbGUgKChuID0gKnBhdGhzcGVjKyspKSB7CisJCXNpemVfdCBpLCBsZW4gPSAwOworCQlmb3IgKGkgPSAwOyBmaXJzdCA9PSBuIHx8IGkgPCBtYXg7IGkrKykgeworCQkJY2hhciBjID0gbltpXTsKKwkJCWlmICghYyB8fCBjICE9IGZpcnN0W2ldIHx8IGlzX2dsb2Jfc3BlY2lhbChjKSkKKwkJCQlicmVhazsKKwkJCWlmIChjID09ICcvJykKKwkJCQlsZW4gPSBpICsgMTsKKwkJfQorCQlpZiAoZmlyc3QgPT0gbiB8fCBsZW4gPCBtYXgpIHsKKwkJCW1heCA9IGxlbjsKKwkJCWlmICghbWF4KQorCQkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBtYXg7Cit9CisKKy8qCisgKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgbG9uZ2VzdCBsZWFkaW5nIHBhdGggY29tbW9uIGFtb25nIGFsbAorICogcGF0aHNwZWNzLgorICovCitjaGFyICpjb21tb25fcHJlZml4KGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwl1bnNpZ25lZCBsb25nIGxlbiA9IGNvbW1vbl9wcmVmaXhfbGVuKHBhdGhzcGVjKTsKKworCXJldHVybiBsZW4gPyB4bWVtZHVweigqcGF0aHNwZWMsIGxlbikgOiBOVUxMOworfQorCitpbnQgZmlsbF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQoreworCXNpemVfdCBsZW47CisKKwkvKgorCSAqIENhbGN1bGF0ZSBjb21tb24gcHJlZml4IGZvciB0aGUgcGF0aHNwZWMsIGFuZAorCSAqIHVzZSB0aGF0IHRvIG9wdGltaXplIHRoZSBkaXJlY3Rvcnkgd2FsaworCSAqLworCWxlbiA9IGNvbW1vbl9wcmVmaXhfbGVuKHBhdGhzcGVjKTsKKworCS8qIFJlYWQgdGhlIGRpcmVjdG9yeSBhbmQgcHJ1bmUgaXQgKi8KKwlyZWFkX2RpcmVjdG9yeShkaXIsIHBhdGhzcGVjID8gKnBhdGhzcGVjIDogIiIsIGxlbiwgcGF0aHNwZWMpOworCXJldHVybiBsZW47Cit9CisKK2ludCB3aXRoaW5fZGVwdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQlpbnQgZGVwdGgsIGludCBtYXhfZGVwdGgpCit7CisJY29uc3QgY2hhciAqY3AgPSBuYW1lLCAqY3BlID0gbmFtZSArIG5hbWVsZW47CisKKwl3aGlsZSAoY3AgPCBjcGUpIHsKKwkJaWYgKCpjcCsrICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQlkZXB0aCsrOworCQlpZiAoZGVwdGggPiBtYXhfZGVwdGgpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBEb2VzICdtYXRjaCcgbWF0Y2ggdGhlIGdpdmVuIG5hbWU/CisgKiBBIG1hdGNoIGlzIGZvdW5kIGlmCisgKgorICogKDEpIHRoZSAnbWF0Y2gnIHN0cmluZyBpcyBsZWFkaW5nIGRpcmVjdG9yeSBvZiAnbmFtZScsIG9yCisgKiAoMikgdGhlICdtYXRjaCcgc3RyaW5nIGlzIGEgd2lsZGNhcmQgYW5kIG1hdGNoZXMgJ25hbWUnLCBvcgorICogKDMpIHRoZSAnbWF0Y2gnIHN0cmluZyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzICduYW1lJy4KKyAqCisgKiBhbmQgdGhlIHJldHVybiB2YWx1ZSB0ZWxscyB3aGljaCBjYXNlIGl0IHdhcy4KKyAqCisgKiBJdCByZXR1cm5zIDAgd2hlbiB0aGVyZSBpcyBubyBtYXRjaC4KKyAqLworc3RhdGljIGludCBtYXRjaF9vbmUoY29uc3QgY2hhciAqbWF0Y2gsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQoreworCWludCBtYXRjaGxlbjsKKworCS8qIElmIHRoZSBtYXRjaCB3YXMganVzdCB0aGUgcHJlZml4LCB3ZSBtYXRjaGVkICovCisJaWYgKCEqbWF0Y2gpCisJCXJldHVybiBNQVRDSEVEX1JFQ1VSU0lWRUxZOworCisJaWYgKGlnbm9yZV9jYXNlKSB7CisJCWZvciAoOzspIHsKKwkJCXVuc2lnbmVkIGNoYXIgYzEgPSB0b2xvd2VyKCptYXRjaCk7CisJCQl1bnNpZ25lZCBjaGFyIGMyID0gdG9sb3dlcigqbmFtZSk7CisJCQlpZiAoYzEgPT0gJ1wwJyB8fCBpc19nbG9iX3NwZWNpYWwoYzEpKQorCQkJCWJyZWFrOworCQkJaWYgKGMxICE9IGMyKQorCQkJCXJldHVybiAwOworCQkJbWF0Y2grKzsKKwkJCW5hbWUrKzsKKwkJCW5hbWVsZW4tLTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoOzspIHsKKwkJCXVuc2lnbmVkIGNoYXIgYzEgPSAqbWF0Y2g7CisJCQl1bnNpZ25lZCBjaGFyIGMyID0gKm5hbWU7CisJCQlpZiAoYzEgPT0gJ1wwJyB8fCBpc19nbG9iX3NwZWNpYWwoYzEpKQorCQkJCWJyZWFrOworCQkJaWYgKGMxICE9IGMyKQorCQkJCXJldHVybiAwOworCQkJbWF0Y2grKzsKKwkJCW5hbWUrKzsKKwkJCW5hbWVsZW4tLTsKKwkJfQorCX0KKworCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBtYXRjaCB0aGUgbWF0Y2hzdHJpbmcgZXhhY3RseSwKKwkgKiB3ZSBuZWVkIHRvIG1hdGNoIGJ5IGZubWF0Y2gKKwkgKi8KKwltYXRjaGxlbiA9IHN0cmxlbihtYXRjaCk7CisJaWYgKHN0cm5jbXBfaWNhc2UobWF0Y2gsIG5hbWUsIG1hdGNobGVuKSkKKwkJcmV0dXJuICFmbm1hdGNoX2ljYXNlKG1hdGNoLCBuYW1lLCAwKSA/IE1BVENIRURfRk5NQVRDSCA6IDA7CisKKwlpZiAobmFtZWxlbiA9PSBtYXRjaGxlbikKKwkJcmV0dXJuIE1BVENIRURfRVhBQ1RMWTsKKwlpZiAobWF0Y2hbbWF0Y2hsZW4tMV0gPT0gJy8nIHx8IG5hbWVbbWF0Y2hsZW5dID09ICcvJykKKwkJcmV0dXJuIE1BVENIRURfUkVDVVJTSVZFTFk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHaXZlbiBhIG5hbWUgYW5kIGEgbGlzdCBvZiBwYXRoc3BlY3MsIHNlZSBpZiB0aGUgbmFtZSBtYXRjaGVzCisgKiBhbnkgb2YgdGhlIHBhdGhzcGVjcy4gIFRoZSBjYWxsZXIgaXMgYWxzbyBpbnRlcmVzdGVkIGluIHNlZWluZworICogYWxsIHBhdGhzcGVjIG1hdGNoZXMgc29tZSBuYW1lcyBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdpdGgKKyAqIChvdGhlcndpc2UgdGhlIHVzZXIgY291bGQgaGF2ZSBtaXN0eXBlZCB0aGUgdW5tYXRjaGVkIHBhdGhzcGVjKSwKKyAqIGFuZCBhIG1hcmsgaXMgbGVmdCBpbiBzZWVuW10gYXJyYXkgZm9yIHBhdGhzcGVjIGVsZW1lbnQgdGhhdAorICogYWN0dWFsbHkgbWF0Y2hlZCBhbnl0aGluZy4KKyAqLworaW50IG1hdGNoX3BhdGhzcGVjKGNvbnN0IGNoYXIgKipwYXRoc3BlYywgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCWludCBwcmVmaXgsIGNoYXIgKnNlZW4pCit7CisJaW50IGksIHJldHZhbCA9IDA7CisKKwlpZiAoIXBhdGhzcGVjKQorCQlyZXR1cm4gMTsKKworCW5hbWUgKz0gcHJlZml4OworCW5hbWVsZW4gLT0gcHJlZml4OworCisJZm9yIChpID0gMDsgcGF0aHNwZWNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCWludCBob3c7CisJCWNvbnN0IGNoYXIgKm1hdGNoID0gcGF0aHNwZWNbaV0gKyBwcmVmaXg7CisJCWlmIChzZWVuICYmIHNlZW5baV0gPT0gTUFUQ0hFRF9FWEFDVExZKQorCQkJY29udGludWU7CisJCWhvdyA9IG1hdGNoX29uZShtYXRjaCwgbmFtZSwgbmFtZWxlbik7CisJCWlmIChob3cpIHsKKwkJCWlmIChyZXR2YWwgPCBob3cpCisJCQkJcmV0dmFsID0gaG93OworCQkJaWYgKHNlZW4gJiYgc2VlbltpXSA8IGhvdykKKwkJCQlzZWVuW2ldID0gaG93OworCQl9CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBEb2VzICdtYXRjaCcgbWF0Y2ggdGhlIGdpdmVuIG5hbWU/CisgKiBBIG1hdGNoIGlzIGZvdW5kIGlmCisgKgorICogKDEpIHRoZSAnbWF0Y2gnIHN0cmluZyBpcyBsZWFkaW5nIGRpcmVjdG9yeSBvZiAnbmFtZScsIG9yCisgKiAoMikgdGhlICdtYXRjaCcgc3RyaW5nIGlzIGEgd2lsZGNhcmQgYW5kIG1hdGNoZXMgJ25hbWUnLCBvcgorICogKDMpIHRoZSAnbWF0Y2gnIHN0cmluZyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzICduYW1lJy4KKyAqCisgKiBhbmQgdGhlIHJldHVybiB2YWx1ZSB0ZWxscyB3aGljaCBjYXNlIGl0IHdhcy4KKyAqCisgKiBJdCByZXR1cm5zIDAgd2hlbiB0aGVyZSBpcyBubyBtYXRjaC4KKyAqLworc3RhdGljIGludCBtYXRjaF9wYXRoc3BlY19pdGVtKGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLCBpbnQgcHJlZml4LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQoreworCS8qIG5hbWUvbmFtZWxlbiBoYXMgcHJlZml4IGN1dCBvZmYgYnkgY2FsbGVyICovCisJY29uc3QgY2hhciAqbWF0Y2ggPSBpdGVtLT5tYXRjaCArIHByZWZpeDsKKwlpbnQgbWF0Y2hsZW4gPSBpdGVtLT5sZW4gLSBwcmVmaXg7CisKKwkvKiBJZiB0aGUgbWF0Y2ggd2FzIGp1c3QgdGhlIHByZWZpeCwgd2UgbWF0Y2hlZCAqLworCWlmICghKm1hdGNoKQorCQlyZXR1cm4gTUFUQ0hFRF9SRUNVUlNJVkVMWTsKKworCWlmIChtYXRjaGxlbiA8PSBuYW1lbGVuICYmICFzdHJuY21wKG1hdGNoLCBuYW1lLCBtYXRjaGxlbikpIHsKKwkJaWYgKG1hdGNobGVuID09IG5hbWVsZW4pCisJCQlyZXR1cm4gTUFUQ0hFRF9FWEFDVExZOworCisJCWlmIChtYXRjaFttYXRjaGxlbi0xXSA9PSAnLycgfHwgbmFtZVttYXRjaGxlbl0gPT0gJy8nKQorCQkJcmV0dXJuIE1BVENIRURfUkVDVVJTSVZFTFk7CisJfQorCisJaWYgKGl0ZW0tPnVzZV93aWxkY2FyZCAmJiAhZm5tYXRjaChtYXRjaCwgbmFtZSwgMCkpCisJCXJldHVybiBNQVRDSEVEX0ZOTUFUQ0g7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdpdmVuIGEgbmFtZSBhbmQgYSBsaXN0IG9mIHBhdGhzcGVjcywgc2VlIGlmIHRoZSBuYW1lIG1hdGNoZXMKKyAqIGFueSBvZiB0aGUgcGF0aHNwZWNzLiAgVGhlIGNhbGxlciBpcyBhbHNvIGludGVyZXN0ZWQgaW4gc2VlaW5nCisgKiBhbGwgcGF0aHNwZWMgbWF0Y2hlcyBzb21lIG5hbWVzIGl0IGNhbGxzIHRoaXMgZnVuY3Rpb24gd2l0aAorICogKG90aGVyd2lzZSB0aGUgdXNlciBjb3VsZCBoYXZlIG1pc3R5cGVkIHRoZSB1bm1hdGNoZWQgcGF0aHNwZWMpLAorICogYW5kIGEgbWFyayBpcyBsZWZ0IGluIHNlZW5bXSBhcnJheSBmb3IgcGF0aHNwZWMgZWxlbWVudCB0aGF0CisgKiBhY3R1YWxseSBtYXRjaGVkIGFueXRoaW5nLgorICovCitpbnQgbWF0Y2hfcGF0aHNwZWNfZGVwdGgoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCSBpbnQgcHJlZml4LCBjaGFyICpzZWVuKQoreworCWludCBpLCByZXR2YWwgPSAwOworCisJaWYgKCFwcy0+bnIpIHsKKwkJaWYgKCFwcy0+cmVjdXJzaXZlIHx8IHBzLT5tYXhfZGVwdGggPT0gLTEpCisJCQlyZXR1cm4gTUFUQ0hFRF9SRUNVUlNJVkVMWTsKKworCQlpZiAod2l0aGluX2RlcHRoKG5hbWUsIG5hbWVsZW4sIDAsIHBzLT5tYXhfZGVwdGgpKQorCQkJcmV0dXJuIE1BVENIRURfRVhBQ1RMWTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJbmFtZSArPSBwcmVmaXg7CisJbmFtZWxlbiAtPSBwcmVmaXg7CisKKwlmb3IgKGkgPSBwcy0+bnIgLSAxOyBpID49IDA7IGktLSkgeworCQlpbnQgaG93OworCQlpZiAoc2VlbiAmJiBzZWVuW2ldID09IE1BVENIRURfRVhBQ1RMWSkKKwkJCWNvbnRpbnVlOworCQlob3cgPSBtYXRjaF9wYXRoc3BlY19pdGVtKHBzLT5pdGVtcytpLCBwcmVmaXgsIG5hbWUsIG5hbWVsZW4pOworCQlpZiAocHMtPnJlY3Vyc2l2ZSAmJiBwcy0+bWF4X2RlcHRoICE9IC0xICYmCisJCSAgICBob3cgJiYgaG93ICE9IE1BVENIRURfRk5NQVRDSCkgeworCQkJaW50IGxlbiA9IHBzLT5pdGVtc1tpXS5sZW47CisJCQlpZiAobmFtZVtsZW5dID09ICcvJykKKwkJCQlsZW4rKzsKKwkJCWlmICh3aXRoaW5fZGVwdGgobmFtZStsZW4sIG5hbWVsZW4tbGVuLCAwLCBwcy0+bWF4X2RlcHRoKSkKKwkJCQlob3cgPSBNQVRDSEVEX0VYQUNUTFk7CisJCQllbHNlCisJCQkJaG93ID0gMDsKKwkJfQorCQlpZiAoaG93KSB7CisJCQlpZiAocmV0dmFsIDwgaG93KQorCQkJCXJldHZhbCA9IGhvdzsKKwkJCWlmIChzZWVuICYmIHNlZW5baV0gPCBob3cpCisJCQkJc2VlbltpXSA9IGhvdzsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlICJzaW1wbGUiIHBhcnQgb2YgYSBwYXRoIG1hdGNoIGxpbWl0ZXIuCisgKi8KK3N0YXRpYyBpbnQgc2ltcGxlX2xlbmd0aChjb25zdCBjaGFyICptYXRjaCkKK3sKKwlpbnQgbGVuID0gLTE7CisKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICptYXRjaCsrOworCQlsZW4rKzsKKwkJaWYgKGMgPT0gJ1wwJyB8fCBpc19nbG9iX3NwZWNpYWwoYykpCisJCQlyZXR1cm4gbGVuOworCX0KK30KKworc3RhdGljIGludCBub193aWxkY2FyZChjb25zdCBjaGFyICpzdHJpbmcpCit7CisJcmV0dXJuIHN0cmluZ1tzaW1wbGVfbGVuZ3RoKHN0cmluZyldID09ICdcMCc7Cit9CisKK3ZvaWQgYWRkX2V4Y2x1ZGUoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpiYXNlLAorCQkgaW50IGJhc2VsZW4sIHN0cnVjdCBleGNsdWRlX2xpc3QgKndoaWNoKQoreworCXN0cnVjdCBleGNsdWRlICp4OworCXNpemVfdCBsZW47CisJaW50IHRvX2V4Y2x1ZGUgPSAxOworCWludCBmbGFncyA9IDA7CisKKwlpZiAoKnN0cmluZyA9PSAnIScpIHsKKwkJdG9fZXhjbHVkZSA9IDA7CisJCXN0cmluZysrOworCX0KKwlsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKwlpZiAobGVuICYmIHN0cmluZ1tsZW4gLSAxXSA9PSAnLycpIHsKKwkJY2hhciAqczsKKwkJeCA9IHhtYWxsb2Moc2l6ZW9mKCp4KSArIGxlbik7CisJCXMgPSAoY2hhciAqKSh4KzEpOworCQltZW1jcHkocywgc3RyaW5nLCBsZW4gLSAxKTsKKwkJc1tsZW4gLSAxXSA9ICdcMCc7CisJCXN0cmluZyA9IHM7CisJCXgtPnBhdHRlcm4gPSBzOworCQlmbGFncyA9IEVYQ19GTEFHX01VU1RCRURJUjsKKwl9IGVsc2UgeworCQl4ID0geG1hbGxvYyhzaXplb2YoKngpKTsKKwkJeC0+cGF0dGVybiA9IHN0cmluZzsKKwl9CisJeC0+dG9fZXhjbHVkZSA9IHRvX2V4Y2x1ZGU7CisJeC0+cGF0dGVybmxlbiA9IHN0cmxlbihzdHJpbmcpOworCXgtPmJhc2UgPSBiYXNlOworCXgtPmJhc2VsZW4gPSBiYXNlbGVuOworCXgtPmZsYWdzID0gZmxhZ3M7CisJaWYgKCFzdHJjaHIoc3RyaW5nLCAnLycpKQorCQl4LT5mbGFncyB8PSBFWENfRkxBR19OT0RJUjsKKwl4LT5ub3dpbGRjYXJkbGVuID0gc2ltcGxlX2xlbmd0aChzdHJpbmcpOworCWlmICgqc3RyaW5nID09ICcqJyAmJiBub193aWxkY2FyZChzdHJpbmcrMSkpCisJCXgtPmZsYWdzIHw9IEVYQ19GTEFHX0VORFNXSVRIOworCUFMTE9DX0dST1cod2hpY2gtPmV4Y2x1ZGVzLCB3aGljaC0+bnIgKyAxLCB3aGljaC0+YWxsb2MpOworCXdoaWNoLT5leGNsdWRlc1t3aGljaC0+bnIrK10gPSB4OworfQorCitzdGF0aWMgdm9pZCAqcmVhZF9za2lwX3dvcmt0cmVlX2ZpbGVfZnJvbV9pbmRleChjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgKnNpemUpCit7CisJaW50IHBvcywgbGVuOworCXVuc2lnbmVkIGxvbmcgc3o7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXZvaWQgKmRhdGE7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSAmdGhlX2luZGV4OworCisJbGVuID0gc3RybGVuKHBhdGgpOworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgbGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFjZV9za2lwX3dvcmt0cmVlKGlzdGF0ZS0+Y2FjaGVbcG9zXSkpCisJCXJldHVybiBOVUxMOworCWRhdGEgPSByZWFkX3NoYTFfZmlsZShpc3RhdGUtPmNhY2hlW3Bvc10tPnNoYTEsICZ0eXBlLCAmc3opOworCWlmICghZGF0YSB8fCB0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiBOVUxMOworCX0KKwkqc2l6ZSA9IHhzaXplX3Qoc3opOworCXJldHVybiBkYXRhOworfQorCit2b2lkIGZyZWVfZXhjbHVkZXMoc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZWwtPm5yOyBpKyspCisJCWZyZWUoZWwtPmV4Y2x1ZGVzW2ldKTsKKwlmcmVlKGVsLT5leGNsdWRlcyk7CisKKwllbC0+bnIgPSAwOworCWVsLT5leGNsdWRlcyA9IE5VTEw7Cit9CisKK2ludCBhZGRfZXhjbHVkZXNfZnJvbV9maWxlX3RvX2xpc3QoY29uc3QgY2hhciAqZm5hbWUsCisJCQkJICAgY29uc3QgY2hhciAqYmFzZSwKKwkJCQkgICBpbnQgYmFzZWxlbiwKKwkJCQkgICBjaGFyICoqYnVmX3AsCisJCQkJICAgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqd2hpY2gsCisJCQkJICAgaW50IGNoZWNrX2luZGV4KQoreworCXN0cnVjdCBzdGF0IHN0OworCWludCBmZCwgaTsKKwlzaXplX3Qgc2l6ZSA9IDA7CisJY2hhciAqYnVmLCAqZW50cnk7CisKKwlmZCA9IG9wZW4oZm5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwIHx8IGZzdGF0KGZkLCAmc3QpIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJd2Fybl9vbl9pbmFjY2Vzc2libGUoZm5hbWUpOworCQlpZiAoMCA8PSBmZCkKKwkJCWNsb3NlKGZkKTsKKwkJaWYgKCFjaGVja19pbmRleCB8fAorCQkgICAgKGJ1ZiA9IHJlYWRfc2tpcF93b3JrdHJlZV9maWxlX2Zyb21faW5kZXgoZm5hbWUsICZzaXplKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKHNpemUgPT0gMCkgeworCQkJZnJlZShidWYpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGJ1ZltzaXplLTFdICE9ICdcbicpIHsKKwkJCWJ1ZiA9IHhyZWFsbG9jKGJ1Ziwgc2l6ZSsxKTsKKwkJCWJ1ZltzaXplKytdID0gJ1xuJzsKKwkJfQorCX0KKwllbHNlIHsKKwkJc2l6ZSA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJCWlmIChzaXplID09IDApIHsKKwkJCWNsb3NlKGZkKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJ1ZiA9IHhtYWxsb2Moc2l6ZSsxKTsKKwkJaWYgKHJlYWRfaW5fZnVsbChmZCwgYnVmLCBzaXplKSAhPSBzaXplKSB7CisJCQlmcmVlKGJ1Zik7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnVmW3NpemUrK10gPSAnXG4nOworCQljbG9zZShmZCk7CisJfQorCisJaWYgKGJ1Zl9wKQorCQkqYnVmX3AgPSBidWY7CisJZW50cnkgPSBidWY7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlpZiAoYnVmW2ldID09ICdcbicpIHsKKwkJCWlmIChlbnRyeSAhPSBidWYgKyBpICYmIGVudHJ5WzBdICE9ICcjJykgeworCQkJCWJ1ZltpIC0gKGkgJiYgYnVmW2ktMV0gPT0gJ1xyJyldID0gMDsKKwkJCQlhZGRfZXhjbHVkZShlbnRyeSwgYmFzZSwgYmFzZWxlbiwgd2hpY2gpOworCQkJfQorCQkJZW50cnkgPSBidWYgKyBpICsgMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBhZGRfZXhjbHVkZXNfZnJvbV9maWxlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKmZuYW1lKQoreworCWlmIChhZGRfZXhjbHVkZXNfZnJvbV9maWxlX3RvX2xpc3QoZm5hbWUsICIiLCAwLCBOVUxMLAorCQkJCQkgICAmZGlyLT5leGNsdWRlX2xpc3RbRVhDX0ZJTEVdLCAwKSA8IDApCisJCWRpZSgiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiLCBmbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBfZXhjbHVkZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbikKK3sKKwlzdHJ1Y3QgZXhjbHVkZV9saXN0ICplbDsKKwlzdHJ1Y3QgZXhjbHVkZV9zdGFjayAqc3RrID0gTlVMTDsKKwlpbnQgY3VycmVudDsKKworCWlmICgoIWRpci0+ZXhjbHVkZV9wZXJfZGlyKSB8fAorCSAgICAoYmFzZWxlbiArIHN0cmxlbihkaXItPmV4Y2x1ZGVfcGVyX2RpcikgPj0gUEFUSF9NQVgpKQorCQlyZXR1cm47IC8qIHRvbyBsb25nIGEgcGF0aCAtLSBpZ25vcmUgKi8KKworCS8qIFBvcCB0aGUgb25lcyB0aGF0IGFyZSBub3QgdGhlIHByZWZpeCBvZiB0aGUgcGF0aCBiZWluZyBjaGVja2VkLiAqLworCWVsID0gJmRpci0+ZXhjbHVkZV9saXN0W0VYQ19ESVJTXTsKKwl3aGlsZSAoKHN0ayA9IGRpci0+ZXhjbHVkZV9zdGFjaykgIT0gTlVMTCkgeworCQlpZiAoc3RrLT5iYXNlbGVuIDw9IGJhc2VsZW4gJiYKKwkJICAgICFzdHJuY21wKGRpci0+YmFzZWJ1ZiwgYmFzZSwgc3RrLT5iYXNlbGVuKSkKKwkJCWJyZWFrOworCQlkaXItPmV4Y2x1ZGVfc3RhY2sgPSBzdGstPnByZXY7CisJCXdoaWxlIChzdGstPmV4Y2x1ZGVfaXggPCBlbC0+bnIpCisJCQlmcmVlKGVsLT5leGNsdWRlc1stLWVsLT5ucl0pOworCQlmcmVlKHN0ay0+ZmlsZWJ1Zik7CisJCWZyZWUoc3RrKTsKKwl9CisKKwkvKiBSZWFkIGZyb20gdGhlIHBhcmVudCBkaXJlY3RvcmllcyBhbmQgcHVzaCB0aGVtIGRvd24uICovCisJY3VycmVudCA9IHN0ayA/IHN0ay0+YmFzZWxlbiA6IC0xOworCXdoaWxlIChjdXJyZW50IDwgYmFzZWxlbikgeworCQlzdHJ1Y3QgZXhjbHVkZV9zdGFjayAqc3RrID0geGNhbGxvYygxLCBzaXplb2YoKnN0aykpOworCQljb25zdCBjaGFyICpjcDsKKworCQlpZiAoY3VycmVudCA8IDApIHsKKwkJCWNwID0gYmFzZTsKKwkJCWN1cnJlbnQgPSAwOworCQl9CisJCWVsc2UgeworCQkJY3AgPSBzdHJjaHIoYmFzZSArIGN1cnJlbnQgKyAxLCAnLycpOworCQkJaWYgKCFjcCkKKwkJCQlkaWUoIm9vcHMgaW4gcHJlcF9leGNsdWRlIik7CisJCQljcCsrOworCQl9CisJCXN0ay0+cHJldiA9IGRpci0+ZXhjbHVkZV9zdGFjazsKKwkJc3RrLT5iYXNlbGVuID0gY3AgLSBiYXNlOworCQlzdGstPmV4Y2x1ZGVfaXggPSBlbC0+bnI7CisJCW1lbWNweShkaXItPmJhc2VidWYgKyBjdXJyZW50LCBiYXNlICsgY3VycmVudCwKKwkJICAgICAgIHN0ay0+YmFzZWxlbiAtIGN1cnJlbnQpOworCQlzdHJjcHkoZGlyLT5iYXNlYnVmICsgc3RrLT5iYXNlbGVuLCBkaXItPmV4Y2x1ZGVfcGVyX2Rpcik7CisJCWFkZF9leGNsdWRlc19mcm9tX2ZpbGVfdG9fbGlzdChkaXItPmJhc2VidWYsCisJCQkJCSAgICAgICBkaXItPmJhc2VidWYsIHN0ay0+YmFzZWxlbiwKKwkJCQkJICAgICAgICZzdGstPmZpbGVidWYsIGVsLCAxKTsKKwkJZGlyLT5leGNsdWRlX3N0YWNrID0gc3RrOworCQljdXJyZW50ID0gc3RrLT5iYXNlbGVuOworCX0KKwlkaXItPmJhc2VidWZbYmFzZWxlbl0gPSAnXDAnOworfQorCisvKiBTY2FuIHRoZSBsaXN0IGFuZCBsZXQgdGhlIGxhc3QgbWF0Y2ggZGV0ZXJtaW5lIHRoZSBmYXRlLgorICogUmV0dXJuIDEgZm9yIGV4Y2x1ZGUsIDAgZm9yIGluY2x1ZGUgYW5kIC0xIGZvciB1bmRlY2lkZWQuCisgKi8KK2ludCBleGNsdWRlZF9mcm9tX2xpc3QoY29uc3QgY2hhciAqcGF0aG5hbWUsCisJCSAgICAgICBpbnQgcGF0aGxlbiwgY29uc3QgY2hhciAqYmFzZW5hbWUsIGludCAqZHR5cGUsCisJCSAgICAgICBzdHJ1Y3QgZXhjbHVkZV9saXN0ICplbCkKK3sKKwlpbnQgaTsKKworCWlmICghZWwtPm5yKQorCQlyZXR1cm4gLTE7CS8qIHVuZGVmaW5lZCAqLworCisJZm9yIChpID0gZWwtPm5yIC0gMTsgMCA8PSBpOyBpLS0pIHsKKwkJc3RydWN0IGV4Y2x1ZGUgKnggPSBlbC0+ZXhjbHVkZXNbaV07CisJCWNvbnN0IGNoYXIgKm5hbWUsICpleGNsdWRlID0geC0+cGF0dGVybjsKKwkJaW50IHRvX2V4Y2x1ZGUgPSB4LT50b19leGNsdWRlOworCQlpbnQgbmFtZWxlbiwgcHJlZml4ID0geC0+bm93aWxkY2FyZGxlbjsKKworCQlpZiAoeC0+ZmxhZ3MgJiBFWENfRkxBR19NVVNUQkVESVIpIHsKKwkJCWlmICgqZHR5cGUgPT0gRFRfVU5LTk9XTikKKwkJCQkqZHR5cGUgPSBnZXRfZHR5cGUoTlVMTCwgcGF0aG5hbWUsIHBhdGhsZW4pOworCQkJaWYgKCpkdHlwZSAhPSBEVF9ESVIpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoeC0+ZmxhZ3MgJiBFWENfRkxBR19OT0RJUikgeworCQkJLyogbWF0Y2ggYmFzZW5hbWUgKi8KKwkJCWlmIChwcmVmaXggPT0geC0+cGF0dGVybmxlbikgeworCQkJCWlmICghc3RyY21wX2ljYXNlKGV4Y2x1ZGUsIGJhc2VuYW1lKSkKKwkJCQkJcmV0dXJuIHRvX2V4Y2x1ZGU7CisJCQl9IGVsc2UgaWYgKHgtPmZsYWdzICYgRVhDX0ZMQUdfRU5EU1dJVEgpIHsKKwkJCQlpZiAoeC0+cGF0dGVybmxlbiAtIDEgPD0gcGF0aGxlbiAmJgorCQkJCSAgICAhc3RyY21wX2ljYXNlKGV4Y2x1ZGUgKyAxLCBwYXRobmFtZSArIHBhdGhsZW4gLSB4LT5wYXR0ZXJubGVuICsgMSkpCisJCQkJCXJldHVybiB0b19leGNsdWRlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZm5tYXRjaF9pY2FzZShleGNsdWRlLCBiYXNlbmFtZSwgMCkgPT0gMCkKKwkJCQkJcmV0dXJuIHRvX2V4Y2x1ZGU7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIG1hdGNoIHdpdGggRk5NX1BBVEhOQU1FOgorCQkgKiBleGNsdWRlIGhhcyBiYXNlIChiYXNlbGVuIGxvbmcpIGltcGxpY2l0bHkgaW4gZnJvbnQgb2YgaXQuCisJCSAqLworCQlpZiAoKmV4Y2x1ZGUgPT0gJy8nKSB7CisJCQlleGNsdWRlKys7CisJCQlwcmVmaXgtLTsKKwkJfQorCisJCWlmIChwYXRobGVuIDwgeC0+YmFzZWxlbiB8fAorCQkgICAgKHgtPmJhc2VsZW4gJiYgcGF0aG5hbWVbeC0+YmFzZWxlbi0xXSAhPSAnLycpIHx8CisJCSAgICBzdHJuY21wX2ljYXNlKHBhdGhuYW1lLCB4LT5iYXNlLCB4LT5iYXNlbGVuKSkKKwkJCWNvbnRpbnVlOworCisJCW5hbWVsZW4gPSB4LT5iYXNlbGVuID8gcGF0aGxlbiAtIHgtPmJhc2VsZW4gOiBwYXRobGVuOworCQluYW1lID0gcGF0aG5hbWUgKyBwYXRobGVuICAtIG5hbWVsZW47CisKKwkJLyogaWYgdGhlIG5vbi13aWxkY2FyZCBwYXJ0IGlzIGxvbmdlciB0aGFuIHRoZQorCQkgICByZW1haW5pbmcgcGF0aG5hbWUsIHN1cmVseSBpdCBjYW5ub3QgbWF0Y2ggKi8KKwkJaWYgKHByZWZpeCA+IG5hbWVsZW4pCisJCQljb250aW51ZTsKKworCQlpZiAocHJlZml4KSB7CisJCQlpZiAoc3RybmNtcF9pY2FzZShleGNsdWRlLCBuYW1lLCBwcmVmaXgpKQorCQkJCWNvbnRpbnVlOworCQkJZXhjbHVkZSArPSBwcmVmaXg7CisJCQluYW1lICAgICs9IHByZWZpeDsKKwkJCW5hbWVsZW4gLT0gcHJlZml4OworCQl9CisKKwkJaWYgKCFuYW1lbGVuIHx8ICFmbm1hdGNoX2ljYXNlKGV4Y2x1ZGUsIG5hbWUsIEZOTV9QQVRITkFNRSkpCisJCQlyZXR1cm4gdG9fZXhjbHVkZTsKKwl9CisJcmV0dXJuIC0xOyAvKiB1bmRlY2lkZWQgKi8KK30KKworc3RhdGljIGludCBleGNsdWRlZChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50ICpkdHlwZV9wKQoreworCWludCBwYXRobGVuID0gc3RybGVuKHBhdGhuYW1lKTsKKwlpbnQgc3Q7CisJY29uc3QgY2hhciAqYmFzZW5hbWUgPSBzdHJyY2hyKHBhdGhuYW1lLCAnLycpOworCWJhc2VuYW1lID0gKGJhc2VuYW1lKSA/IGJhc2VuYW1lKzEgOiBwYXRobmFtZTsKKworCXByZXBfZXhjbHVkZShkaXIsIHBhdGhuYW1lLCBiYXNlbmFtZS1wYXRobmFtZSk7CisJZm9yIChzdCA9IEVYQ19DTURMOyBzdCA8PSBFWENfRklMRTsgc3QrKykgeworCQlzd2l0Y2ggKGV4Y2x1ZGVkX2Zyb21fbGlzdChwYXRobmFtZSwgcGF0aGxlbiwgYmFzZW5hbWUsCisJCQkJCSAgIGR0eXBlX3AsICZkaXItPmV4Y2x1ZGVfbGlzdFtzdF0pKSB7CisJCWNhc2UgMDoKKwkJCXJldHVybiAwOworCQljYXNlIDE6CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBwYXRoX2V4Y2x1ZGVfY2hlY2tfaW5pdChzdHJ1Y3QgcGF0aF9leGNsdWRlX2NoZWNrICpjaGVjaywKKwkJCSAgICAgc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcikKK3sKKwljaGVjay0+ZGlyID0gZGlyOworCXN0cmJ1Zl9pbml0KCZjaGVjay0+cGF0aCwgMjU2KTsKK30KKwordm9pZCBwYXRoX2V4Y2x1ZGVfY2hlY2tfY2xlYXIoc3RydWN0IHBhdGhfZXhjbHVkZV9jaGVjayAqY2hlY2spCit7CisJc3RyYnVmX3JlbGVhc2UoJmNoZWNrLT5wYXRoKTsKK30KKworLyoKKyAqIElzIHRoaXMgbmFtZSBleGNsdWRlZD8gIFRoaXMgaXMgZm9yIGEgY2FsbGVyIGxpa2Ugc2hvd19maWxlcygpIHRoYXQKKyAqIGRvIG5vdCBob25vciBkaXJlY3RvcnkgaGllcmFyY2h5IGFuZCBpdGVyYXRlIHRocm91Z2ggcGF0aHMgdGhhdCBhcmUKKyAqIHBvc3NpYmx5IGluIGFuIGlnbm9yZWQgZGlyZWN0b3J5LgorICoKKyAqIEEgcGF0aCB0byBhIGRpcmVjdG9yeSBrbm93biB0byBiZSBleGNsdWRlZCBpcyBsZWZ0IGluIGNoZWNrLT5wYXRoIHRvCisgKiBvcHRpbWl6ZSBmb3IgcmVwZWF0ZWQgY2hlY2tzIGZvciBmaWxlcyBpbiB0aGUgc2FtZSBleGNsdWRlZCBkaXJlY3RvcnkuCisgKi8KK2ludCBwYXRoX2V4Y2x1ZGVkKHN0cnVjdCBwYXRoX2V4Y2x1ZGVfY2hlY2sgKmNoZWNrLAorCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgKmR0eXBlKQoreworCWludCBpOworCXN0cnVjdCBzdHJidWYgKnBhdGggPSAmY2hlY2stPnBhdGg7CisKKwkvKgorCSAqIHdlIGFsbG93IHRoZSBjYWxsZXIgdG8gcGFzcyBuYW1lbGVuIGFzIGFuIG9wdGltaXphdGlvbjsgaXQKKwkgKiBtdXN0IG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUsIGFzIHdlIGV2ZW50dWFsbHkgY2FsbAorCSAqIGV4Y2x1ZGVkKCkgb24gdGhlIHdob2xlIG5hbWUgc3RyaW5nLgorCSAqLworCWlmIChuYW1lbGVuIDwgMCkKKwkJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKworCWlmIChwYXRoLT5sZW4gJiYKKwkgICAgcGF0aC0+bGVuIDw9IG5hbWVsZW4gJiYKKwkgICAgIW1lbWNtcChuYW1lLCBwYXRoLT5idWYsIHBhdGgtPmxlbikgJiYKKwkgICAgKCFuYW1lW3BhdGgtPmxlbl0gfHwgbmFtZVtwYXRoLT5sZW5dID09ICcvJykpCisJCXJldHVybiAxOworCisJc3RyYnVmX3NldGxlbihwYXRoLCAwKTsKKwlmb3IgKGkgPSAwOyBuYW1lW2ldOyBpKyspIHsKKwkJaW50IGNoID0gbmFtZVtpXTsKKworCQlpZiAoY2ggPT0gJy8nKSB7CisJCQlpbnQgZHQgPSBEVF9ESVI7CisJCQlpZiAoZXhjbHVkZWQoY2hlY2stPmRpciwgcGF0aC0+YnVmLCAmZHQpKQorCQkJCXJldHVybiAxOworCQl9CisJCXN0cmJ1Zl9hZGRjaChwYXRoLCBjaCk7CisJfQorCisJLyogQW4gZW50cnkgaW4gdGhlIGluZGV4OyBjYW5ub3QgYmUgYSBkaXJlY3Rvcnkgd2l0aCBzdWJlbnRyaWVzICovCisJc3RyYnVmX3NldGxlbihwYXRoLCAwKTsKKworCXJldHVybiBleGNsdWRlZChjaGVjay0+ZGlyLCBuYW1lLCBkdHlwZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlyX2VudHJ5ICpkaXJfZW50cnlfbmV3KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgbGVuKQoreworCXN0cnVjdCBkaXJfZW50cnkgKmVudDsKKworCWVudCA9IHhtYWxsb2Moc2l6ZW9mKCplbnQpICsgbGVuICsgMSk7CisJZW50LT5sZW4gPSBsZW47CisJbWVtY3B5KGVudC0+bmFtZSwgcGF0aG5hbWUsIGxlbik7CisJZW50LT5uYW1lW2xlbl0gPSAwOworCXJldHVybiBlbnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlyX2VudHJ5ICpkaXJfYWRkX25hbWUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBsZW4pCit7CisJaWYgKGNhY2hlX25hbWVfZXhpc3RzKHBhdGhuYW1lLCBsZW4sIGlnbm9yZV9jYXNlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlBTExPQ19HUk9XKGRpci0+ZW50cmllcywgZGlyLT5ucisxLCBkaXItPmFsbG9jKTsKKwlyZXR1cm4gZGlyLT5lbnRyaWVzW2Rpci0+bnIrK10gPSBkaXJfZW50cnlfbmV3KHBhdGhuYW1lLCBsZW4pOworfQorCitzdHJ1Y3QgZGlyX2VudHJ5ICpkaXJfYWRkX2lnbm9yZWQoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBsZW4pCit7CisJaWYgKCFjYWNoZV9uYW1lX2lzX290aGVyKHBhdGhuYW1lLCBsZW4pKQorCQlyZXR1cm4gTlVMTDsKKworCUFMTE9DX0dST1coZGlyLT5pZ25vcmVkLCBkaXItPmlnbm9yZWRfbnIrMSwgZGlyLT5pZ25vcmVkX2FsbG9jKTsKKwlyZXR1cm4gZGlyLT5pZ25vcmVkW2Rpci0+aWdub3JlZF9ucisrXSA9IGRpcl9lbnRyeV9uZXcocGF0aG5hbWUsIGxlbik7Cit9CisKK2VudW0gZXhpc3Rfc3RhdHVzIHsKKwlpbmRleF9ub25leGlzdGVudCA9IDAsCisJaW5kZXhfZGlyZWN0b3J5LAorCWluZGV4X2dpdGRpcgorfTsKKworLyoKKyAqIERvIG5vdCB1c2UgdGhlIGFscGhhYmV0aWNhbGx5IHN0b3JlZCBpbmRleCB0byBsb29rIHVwCisgKiB0aGUgZGlyZWN0b3J5IG5hbWU7IGluc3RlYWQsIHVzZSB0aGUgY2FzZSBpbnNlbnNpdGl2ZQorICogbmFtZSBoYXNoLgorICovCitzdGF0aWMgZW51bSBleGlzdF9zdGF0dXMgZGlyZWN0b3J5X2V4aXN0c19pbl9pbmRleF9pY2FzZShjb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgbGVuKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleF9uYW1lX2V4aXN0cygmdGhlX2luZGV4LCBkaXJuYW1lLCBsZW4gKyAxLCBpZ25vcmVfY2FzZSk7CisJdW5zaWduZWQgY2hhciBlbmRjaGFyOworCisJaWYgKCFjZSkKKwkJcmV0dXJuIGluZGV4X25vbmV4aXN0ZW50OworCWVuZGNoYXIgPSBjZS0+bmFtZVtsZW5dOworCisJLyoKKwkgKiBUaGUgY2FjaGVfZW50cnkgc3RydWN0dXJlIHJldHVybmVkIHdpbGwgY29udGFpbiB0aGlzIGRpcm5hbWUKKwkgKiBhbmQgcG9zc2libHkgYWRkaXRpb25hbCBwYXRoIGNvbXBvbmVudHMuCisJICovCisJaWYgKGVuZGNoYXIgPT0gJy8nKQorCQlyZXR1cm4gaW5kZXhfZGlyZWN0b3J5OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gYWRkaXRpb25hbCBwYXRoIGNvbXBvbmVudHMsIHRoZW4gdGhpcyBjYWNoZV9lbnRyeQorCSAqIHJlcHJlc2VudHMgYSBzdWJtb2R1bGUuICBTdWJtb2R1bGVzLCBkZXNwaXRlIGJlaW5nIGRpcmVjdG9yaWVzLAorCSAqIGFyZSBzdG9yZWQgaW4gdGhlIGNhY2hlIHdpdGhvdXQgYSBjbG9zaW5nIHNsYXNoLgorCSAqLworCWlmICghZW5kY2hhciAmJiBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCXJldHVybiBpbmRleF9naXRkaXI7CisKKwkvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBoaXQsIGJ1dCBpdCBleGlzdHMganVzdCBpbiBjYXNlLiAqLworCXJldHVybiBpbmRleF9ub25leGlzdGVudDsKK30KKworLyoKKyAqIFRoZSBpbmRleCBzb3J0cyBhbHBoYWJldGljYWxseSBieSBlbnRyeSBuYW1lLCB3aGljaAorICogbWVhbnMgdGhhdCBhIGdpdGxpbmsgc29ydHMgYXMgJ1wwJyBhdCB0aGUgZW5kLCB3aGlsZQorICogYSBkaXJlY3RvcnkgKHdoaWNoIGlzIGRlZmluZWQgbm90IGFzIGFuIGVudHJ5LCBidXQgYXMKKyAqIHRoZSBmaWxlcyBpdCBjb250YWlucykgd2lsbCBzb3J0IHdpdGggdGhlICcvJyBhdCB0aGUKKyAqIGVuZC4KKyAqLworc3RhdGljIGVudW0gZXhpc3Rfc3RhdHVzIGRpcmVjdG9yeV9leGlzdHNfaW5faW5kZXgoY29uc3QgY2hhciAqZGlybmFtZSwgaW50IGxlbikKK3sKKwlpbnQgcG9zOworCisJaWYgKGlnbm9yZV9jYXNlKQorCQlyZXR1cm4gZGlyZWN0b3J5X2V4aXN0c19pbl9pbmRleF9pY2FzZShkaXJuYW1lLCBsZW4pOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MoZGlybmFtZSwgbGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLXBvcy0xOworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisJCXVuc2lnbmVkIGNoYXIgZW5kY2hhcjsKKworCQlpZiAoc3RybmNtcChjZS0+bmFtZSwgZGlybmFtZSwgbGVuKSkKKwkJCWJyZWFrOworCQllbmRjaGFyID0gY2UtPm5hbWVbbGVuXTsKKwkJaWYgKGVuZGNoYXIgPiAnLycpCisJCQlicmVhazsKKwkJaWYgKGVuZGNoYXIgPT0gJy8nKQorCQkJcmV0dXJuIGluZGV4X2RpcmVjdG9yeTsKKwkJaWYgKCFlbmRjaGFyICYmIFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCXJldHVybiBpbmRleF9naXRkaXI7CisJfQorCXJldHVybiBpbmRleF9ub25leGlzdGVudDsKK30KKworLyoKKyAqIFdoZW4gd2UgZmluZCBhIGRpcmVjdG9yeSB3aGVuIHRyYXZlcnNpbmcgdGhlIGZpbGVzeXN0ZW0sIHdlCisgKiBoYXZlIHRocmVlIGRpc3RpbmN0IGNhc2VzOgorICoKKyAqICAtIGlnbm9yZSBpdAorICogIC0gc2VlIGl0IGFzIGEgZGlyZWN0b3J5CisgKiAgLSByZWN1cnNlIGludG8gaXQKKyAqCisgKiBhbmQgd2hpY2ggb25lIHdlIGNob29zZSBkZXBlbmRzIG9uIGEgY29tYmluYXRpb24gb2YgZXhpc3RpbmcKKyAqIGdpdCBpbmRleCBjb250ZW50cyBhbmQgdGhlIGZsYWdzIHBhc3NlZCBpbnRvIHRoZSBkaXJlY3RvcnkKKyAqIHRyYXZlcnNhbCByb3V0aW5lLgorICoKKyAqIENhc2UgMTogSWYgd2UgKmFscmVhZHkqIGhhdmUgZW50cmllcyBpbiB0aGUgaW5kZXggdW5kZXIgdGhhdAorICogZGlyZWN0b3J5IG5hbWUsIHdlIGFsd2F5cyByZWN1cnNlIGludG8gdGhlIGRpcmVjdG9yeSB0byBzZWUKKyAqIGFsbCB0aGUgZmlsZXMuCisgKgorICogQ2FzZSAyOiBJZiB3ZSAqYWxyZWFkeSogaGF2ZSB0aGF0IGRpcmVjdG9yeSBuYW1lIGFzIGEgZ2l0bGluaywKKyAqIHdlIGFsd2F5cyBjb250aW51ZSB0byBzZWUgaXQgYXMgYSBnaXRsaW5rLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKKyAqIHRoZXJlIGlzIGFuIGFjdHVhbCBnaXQgZGlyZWN0b3J5IHRoZXJlIG9yIG5vdCAoaXQgbWlnaHQgbm90CisgKiBiZSBjaGVja2VkIG91dCBhcyBhIHN1YnByb2plY3QhKQorICoKKyAqIENhc2UgMzogaWYgd2UgZGlkbid0IGhhdmUgaXQgaW4gdGhlIGluZGV4IHByZXZpb3VzbHksIHdlCisgKiBoYXZlIGEgZmV3IHN1Yi1jYXNlczoKKyAqCisgKiAgKGEpIGlmICJzaG93X290aGVyX2RpcmVjdG9yaWVzIiBpcyB0cnVlLCB3ZSBzaG93IGl0IGFzCisgKiAgICAgIGp1c3QgYSBkaXJlY3RvcnksIHVubGVzcyAiaGlkZV9lbXB0eV9kaXJlY3RvcmllcyIgaXMKKyAqICAgICAgYWxzbyB0cnVlIGFuZCB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LCBpbiB3aGljaCBjYXNlCisgKiAgICAgIHdlIGp1c3QgaWdub3JlIGl0IGVudGlyZWx5LgorICogIChiKSBpZiBpdCBsb29rcyBsaWtlIGEgZ2l0IGRpcmVjdG9yeSwgYW5kIHdlIGRvbid0IGhhdmUKKyAqICAgICAgJ25vX2dpdGxpbmtzJyBzZXQgd2UgdHJlYXQgaXQgYXMgYSBnaXRsaW5rLCBhbmQgc2hvdyBpdAorICogICAgICBhcyBhIGRpcmVjdG9yeS4KKyAqICAoYykgb3RoZXJ3aXNlLCB3ZSByZWN1cnNlIGludG8gaXQuCisgKi8KK2VudW0gZGlyZWN0b3J5X3RyZWF0bWVudCB7CisJc2hvd19kaXJlY3RvcnksCisJaWdub3JlX2RpcmVjdG9yeSwKKwlyZWN1cnNlX2ludG9fZGlyZWN0b3J5Cit9OworCitzdGF0aWMgZW51bSBkaXJlY3RvcnlfdHJlYXRtZW50IHRyZWF0X2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCWNvbnN0IGNoYXIgKmRpcm5hbWUsIGludCBsZW4sCisJY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQoreworCS8qIFRoZSAibGVuLTEiIGlzIHRvIHN0cmlwIHRoZSBmaW5hbCAnLycgKi8KKwlzd2l0Y2ggKGRpcmVjdG9yeV9leGlzdHNfaW5faW5kZXgoZGlybmFtZSwgbGVuLTEpKSB7CisJY2FzZSBpbmRleF9kaXJlY3Rvcnk6CisJCXJldHVybiByZWN1cnNlX2ludG9fZGlyZWN0b3J5OworCisJY2FzZSBpbmRleF9naXRkaXI6CisJCWlmIChkaXItPmZsYWdzICYgRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMpCisJCQlyZXR1cm4gaWdub3JlX2RpcmVjdG9yeTsKKwkJcmV0dXJuIHNob3dfZGlyZWN0b3J5OworCisJY2FzZSBpbmRleF9ub25leGlzdGVudDoKKwkJaWYgKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUykKKwkJCWJyZWFrOworCQlpZiAoIShkaXItPmZsYWdzICYgRElSX05PX0dJVExJTktTKSkgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJCWlmIChyZXNvbHZlX2dpdGxpbmtfcmVmKGRpcm5hbWUsICJIRUFEIiwgc2hhMSkgPT0gMCkKKwkJCQlyZXR1cm4gc2hvd19kaXJlY3Rvcnk7CisJCX0KKwkJcmV0dXJuIHJlY3Vyc2VfaW50b19kaXJlY3Rvcnk7CisJfQorCisJLyogVGhpcyBpcyB0aGUgInNob3dfb3RoZXJfZGlyZWN0b3JpZXMiIGNhc2UgKi8KKwlpZiAoIShkaXItPmZsYWdzICYgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVMpKQorCQlyZXR1cm4gc2hvd19kaXJlY3Rvcnk7CisJaWYgKCFyZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBkaXJuYW1lLCBsZW4sIDEsIHNpbXBsaWZ5KSkKKwkJcmV0dXJuIGlnbm9yZV9kaXJlY3Rvcnk7CisJcmV0dXJuIHNob3dfZGlyZWN0b3J5OworfQorCisvKgorICogVGhpcyBpcyBhbiBpbmV4YWN0IGVhcmx5IHBydW5pbmcgb2YgYW55IHJlY3Vyc2l2ZSBkaXJlY3RvcnkKKyAqIHJlYWRpbmcgLSBpZiB0aGUgcGF0aCBjYW5ub3QgcG9zc2libHkgYmUgaW4gdGhlIHBhdGhzcGVjLAorICogcmV0dXJuIHRydWUsIGFuZCB3ZSdsbCBza2lwIGl0IGVhcmx5LgorICovCitzdGF0aWMgaW50IHNpbXBsaWZ5X2F3YXkoY29uc3QgY2hhciAqcGF0aCwgaW50IHBhdGhsZW4sIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSkKK3sKKwlpZiAoc2ltcGxpZnkpIHsKKwkJZm9yICg7OykgeworCQkJY29uc3QgY2hhciAqbWF0Y2ggPSBzaW1wbGlmeS0+cGF0aDsKKwkJCWludCBsZW4gPSBzaW1wbGlmeS0+bGVuOworCisJCQlpZiAoIW1hdGNoKQorCQkJCWJyZWFrOworCQkJaWYgKGxlbiA+IHBhdGhsZW4pCisJCQkJbGVuID0gcGF0aGxlbjsKKwkJCWlmICghbWVtY21wKHBhdGgsIG1hdGNoLCBsZW4pKQorCQkJCXJldHVybiAwOworCQkJc2ltcGxpZnkrKzsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHRlbGxzIHVzIHdoZXRoZXIgYW4gZXhjbHVkZWQgcGF0aCBtYXRjaGVzIGEKKyAqIGxpc3Qgb2YgImludGVyZXN0aW5nIiBwYXRoc3BlY3MuIFRoYXQgaXMsIHdoZXRoZXIgYSBwYXRoIG1hdGNoZWQKKyAqIGJ5IGFueSBvZiB0aGUgcGF0aHNwZWNzIGNvdWxkIHBvc3NpYmx5IGJlIGlnbm9yZWQgYnkgZXhjbHVkaW5nCisgKiB0aGUgc3BlY2lmaWVkIHBhdGguIFRoaXMgY2FuIGhhcHBlbiBpZjoKKyAqCisgKiAgIDEuIHRoZSBwYXRoIGlzIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwYXRoc3BlYworICoKKyAqICAgMi4gdGhlIHBhdGggaXMgYSBkaXJlY3RvcnkgcHJlZml4IG9mIHNvbWUgZWxlbWVudCBpbiB0aGUKKyAqICAgICAgcGF0aHNwZWMKKyAqLworc3RhdGljIGludCBleGNsdWRlX21hdGNoZXNfcGF0aHNwZWMoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwKKwkJY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQoreworCWlmIChzaW1wbGlmeSkgeworCQlmb3IgKDsgc2ltcGxpZnktPnBhdGg7IHNpbXBsaWZ5KyspIHsKKwkJCWlmIChsZW4gPT0gc2ltcGxpZnktPmxlbgorCQkJICAgICYmICFtZW1jbXAocGF0aCwgc2ltcGxpZnktPnBhdGgsIGxlbikpCisJCQkJcmV0dXJuIDE7CisJCQlpZiAobGVuIDwgc2ltcGxpZnktPmxlbgorCQkJICAgICYmIHNpbXBsaWZ5LT5wYXRoW2xlbl0gPT0gJy8nCisJCQkgICAgJiYgIW1lbWNtcChwYXRoLCBzaW1wbGlmeS0+cGF0aCwgbGVuKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfaW5kZXhfZHR5cGUoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbikKK3sKKwlpbnQgcG9zOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwljZSA9IGNhY2hlX25hbWVfZXhpc3RzKHBhdGgsIGxlbiwgMCk7CisJaWYgKGNlKSB7CisJCWlmICghY2VfdXB0b2RhdGUoY2UpKQorCQkJcmV0dXJuIERUX1VOS05PV047CisJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQlyZXR1cm4gRFRfRElSOworCQkvKgorCQkgKiBOb2JvZHkgYWN0dWFsbHkgY2FyZXMgYWJvdXQgdGhlCisJCSAqIGRpZmZlcmVuY2UgYmV0d2VlbiBEVF9MTksgYW5kIERUX1JFRworCQkgKi8KKwkJcmV0dXJuIERUX1JFRzsKKwl9CisKKwkvKiBUcnkgdG8gbG9vayBpdCB1cCBhcyBhIGRpcmVjdG9yeSAqLworCXBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIGxlbik7CisJaWYgKHBvcyA+PSAwKQorCQlyZXR1cm4gRFRfVU5LTk9XTjsKKwlwb3MgPSAtcG9zLTE7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBwYXRoLCBsZW4pKQorCQkJYnJlYWs7CisJCWlmIChjZS0+bmFtZVtsZW5dID4gJy8nKQorCQkJYnJlYWs7CisJCWlmIChjZS0+bmFtZVtsZW5dIDwgJy8nKQorCQkJY29udGludWU7CisJCWlmICghY2VfdXB0b2RhdGUoY2UpKQorCQkJYnJlYWs7CS8qIGNvbnRpbnVlPyAqLworCQlyZXR1cm4gRFRfRElSOworCX0KKwlyZXR1cm4gRFRfVU5LTk9XTjsKK30KKworc3RhdGljIGludCBnZXRfZHR5cGUoc3RydWN0IGRpcmVudCAqZGUsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJaW50IGR0eXBlID0gZGUgPyBEVFlQRShkZSkgOiBEVF9VTktOT1dOOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGR0eXBlICE9IERUX1VOS05PV04pCisJCXJldHVybiBkdHlwZTsKKwlkdHlwZSA9IGdldF9pbmRleF9kdHlwZShwYXRoLCBsZW4pOworCWlmIChkdHlwZSAhPSBEVF9VTktOT1dOKQorCQlyZXR1cm4gZHR5cGU7CisJaWYgKGxzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiBkdHlwZTsKKwlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIERUX1JFRzsKKwlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIERUX0RJUjsKKwlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIERUX0xOSzsKKwlyZXR1cm4gZHR5cGU7Cit9CisKK2VudW0gcGF0aF90cmVhdG1lbnQgeworCXBhdGhfaWdub3JlZCwKKwlwYXRoX2hhbmRsZWQsCisJcGF0aF9yZWN1cnNlCit9OworCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCB0cmVhdF9vbmVfcGF0aChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJCQkgIHN0cnVjdCBzdHJidWYgKnBhdGgsCisJCQkJCSAgY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5LAorCQkJCQkgIGludCBkdHlwZSwgc3RydWN0IGRpcmVudCAqZGUpCit7CisJaW50IGV4Y2x1ZGUgPSBleGNsdWRlZChkaXIsIHBhdGgtPmJ1ZiwgJmR0eXBlKTsKKwlpZiAoZXhjbHVkZSAmJiAoZGlyLT5mbGFncyAmIERJUl9DT0xMRUNUX0lHTk9SRUQpCisJICAgICYmIGV4Y2x1ZGVfbWF0Y2hlc19wYXRoc3BlYyhwYXRoLT5idWYsIHBhdGgtPmxlbiwgc2ltcGxpZnkpKQorCQlkaXJfYWRkX2lnbm9yZWQoZGlyLCBwYXRoLT5idWYsIHBhdGgtPmxlbik7CisKKwkvKgorCSAqIEV4Y2x1ZGVkPyBJZiB3ZSBkb24ndCBleHBsaWNpdGx5IHdhbnQgdG8gc2hvdworCSAqIGlnbm9yZWQgZmlsZXMsIGlnbm9yZSBpdAorCSAqLworCWlmIChleGNsdWRlICYmICEoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpKQorCQlyZXR1cm4gcGF0aF9pZ25vcmVkOworCisJaWYgKGR0eXBlID09IERUX1VOS05PV04pCisJCWR0eXBlID0gZ2V0X2R0eXBlKGRlLCBwYXRoLT5idWYsIHBhdGgtPmxlbik7CisKKwkvKgorCSAqIERvIHdlIHdhbnQgdG8gc2VlIGp1c3QgdGhlIGlnbm9yZWQgZmlsZXM/CisJICogV2Ugc3RpbGwgbmVlZCB0byByZWN1cnNlIGludG8gZGlyZWN0b3JpZXMsCisJICogZXZlbiBpZiB3ZSBkb24ndCBpZ25vcmUgdGhlbSwgc2luY2UgdGhlCisJICogZGlyZWN0b3J5IG1heSBjb250YWluIGZpbGVzIHRoYXQgd2UgZG8uLgorCSAqLworCWlmICghZXhjbHVkZSAmJiAoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpKSB7CisJCWlmIChkdHlwZSAhPSBEVF9ESVIpCisJCQlyZXR1cm4gcGF0aF9pZ25vcmVkOworCX0KKworCXN3aXRjaCAoZHR5cGUpIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gcGF0aF9pZ25vcmVkOworCWNhc2UgRFRfRElSOgorCQlzdHJidWZfYWRkY2gocGF0aCwgJy8nKTsKKwkJc3dpdGNoICh0cmVhdF9kaXJlY3RvcnkoZGlyLCBwYXRoLT5idWYsIHBhdGgtPmxlbiwgc2ltcGxpZnkpKSB7CisJCWNhc2Ugc2hvd19kaXJlY3Rvcnk6CisJCQlpZiAoZXhjbHVkZSAhPSAhIShkaXItPmZsYWdzCisJCQkJCSAgJiBESVJfU0hPV19JR05PUkVEKSkKKwkJCQlyZXR1cm4gcGF0aF9pZ25vcmVkOworCQkJYnJlYWs7CisJCWNhc2UgcmVjdXJzZV9pbnRvX2RpcmVjdG9yeToKKwkJCXJldHVybiBwYXRoX3JlY3Vyc2U7CisJCWNhc2UgaWdub3JlX2RpcmVjdG9yeToKKwkJCXJldHVybiBwYXRoX2lnbm9yZWQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBEVF9SRUc6CisJY2FzZSBEVF9MTks6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcGF0aF9oYW5kbGVkOworfQorCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCB0cmVhdF9wYXRoKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJICAgICAgc3RydWN0IGRpcmVudCAqZGUsCisJCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwkJCQkgICAgICBpbnQgYmFzZWxlbiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnkpCit7CisJaW50IGR0eXBlOworCisJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZGUtPmRfbmFtZSkgfHwgIXN0cmNtcChkZS0+ZF9uYW1lLCAiLmdpdCIpKQorCQlyZXR1cm4gcGF0aF9pZ25vcmVkOworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbik7CisJc3RyYnVmX2FkZHN0cihwYXRoLCBkZS0+ZF9uYW1lKTsKKwlpZiAoc2ltcGxpZnlfYXdheShwYXRoLT5idWYsIHBhdGgtPmxlbiwgc2ltcGxpZnkpKQorCQlyZXR1cm4gcGF0aF9pZ25vcmVkOworCisJZHR5cGUgPSBEVFlQRShkZSk7CisJcmV0dXJuIHRyZWF0X29uZV9wYXRoKGRpciwgcGF0aCwgc2ltcGxpZnksIGR0eXBlLCBkZSk7Cit9CisKKy8qCisgKiBSZWFkIGEgZGlyZWN0b3J5IHRyZWUuIFdlIGN1cnJlbnRseSBpZ25vcmUgYW55dGhpbmcgYnV0CisgKiBkaXJlY3RvcmllcywgcmVndWxhciBmaWxlcyBhbmQgc3ltbGlua3MuIFRoYXQncyBiZWNhdXNlIGdpdAorICogZG9lc24ndCBoYW5kbGUgdGhlbSBhdCBhbGwgeWV0LiBNYXliZSB0aGF0IHdpbGwgY2hhbmdlIHNvbWUKKyAqIGRheS4KKyAqCisgKiBBbHNvLCB3ZSBpZ25vcmUgdGhlIG5hbWUgIi5naXQiIChldmVuIGlmIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSkuCisgKiBUaGF0IGxpa2VseSB3aWxsIG5vdCBjaGFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJCSAgICBpbnQgY2hlY2tfb25seSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQoreworCURJUiAqZmRpcjsKKwlpbnQgY29udGVudHMgPSAwOworCXN0cnVjdCBkaXJlbnQgKmRlOworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZCgmcGF0aCwgYmFzZSwgYmFzZWxlbik7CisKKwlmZGlyID0gb3BlbmRpcihwYXRoLmxlbiA/IHBhdGguYnVmIDogIi4iKTsKKwlpZiAoIWZkaXIpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZmRpcikpICE9IE5VTEwpIHsKKwkJc3dpdGNoICh0cmVhdF9wYXRoKGRpciwgZGUsICZwYXRoLCBiYXNlbGVuLCBzaW1wbGlmeSkpIHsKKwkJY2FzZSBwYXRoX3JlY3Vyc2U6CisJCQljb250ZW50cyArPSByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBwYXRoLmJ1ZiwKKwkJCQkJCQkgICAgIHBhdGgubGVuLCAwLAorCQkJCQkJCSAgICAgc2ltcGxpZnkpOworCQkJY29udGludWU7CisJCWNhc2UgcGF0aF9pZ25vcmVkOgorCQkJY29udGludWU7CisJCWNhc2UgcGF0aF9oYW5kbGVkOgorCQkJYnJlYWs7CisJCX0KKwkJY29udGVudHMrKzsKKwkJaWYgKGNoZWNrX29ubHkpCisJCQlicmVhazsKKwkJZGlyX2FkZF9uYW1lKGRpciwgcGF0aC5idWYsIHBhdGgubGVuKTsKKwl9CisJY2xvc2VkaXIoZmRpcik7Cisgb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKworCXJldHVybiBjb250ZW50czsKK30KKworc3RhdGljIGludCBjbXBfbmFtZShjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCit7CisJY29uc3Qgc3RydWN0IGRpcl9lbnRyeSAqZTEgPSAqKGNvbnN0IHN0cnVjdCBkaXJfZW50cnkgKiopcDE7CisJY29uc3Qgc3RydWN0IGRpcl9lbnRyeSAqZTIgPSAqKGNvbnN0IHN0cnVjdCBkaXJfZW50cnkgKiopcDI7CisKKwlyZXR1cm4gY2FjaGVfbmFtZV9jb21wYXJlKGUxLT5uYW1lLCBlMS0+bGVuLAorCQkJCSAgZTItPm5hbWUsIGUyLT5sZW4pOworfQorCitzdGF0aWMgc3RydWN0IHBhdGhfc2ltcGxpZnkgKmNyZWF0ZV9zaW1wbGlmeShjb25zdCBjaGFyICoqcGF0aHNwZWMpCit7CisJaW50IG5yLCBhbGxvYyA9IDA7CisJc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5ID0gTlVMTDsKKworCWlmICghcGF0aHNwZWMpCisJCXJldHVybiBOVUxMOworCisJZm9yIChuciA9IDAgOyA7IG5yKyspIHsKKwkJY29uc3QgY2hhciAqbWF0Y2g7CisJCWlmIChuciA+PSBhbGxvYykgeworCQkJYWxsb2MgPSBhbGxvY19ucihhbGxvYyk7CisJCQlzaW1wbGlmeSA9IHhyZWFsbG9jKHNpbXBsaWZ5LCBhbGxvYyAqIHNpemVvZigqc2ltcGxpZnkpKTsKKwkJfQorCQltYXRjaCA9ICpwYXRoc3BlYysrOworCQlpZiAoIW1hdGNoKQorCQkJYnJlYWs7CisJCXNpbXBsaWZ5W25yXS5wYXRoID0gbWF0Y2g7CisJCXNpbXBsaWZ5W25yXS5sZW4gPSBzaW1wbGVfbGVuZ3RoKG1hdGNoKTsKKwl9CisJc2ltcGxpZnlbbnJdLnBhdGggPSBOVUxMOworCXNpbXBsaWZ5W25yXS5sZW4gPSAwOworCXJldHVybiBzaW1wbGlmeTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9zaW1wbGlmeShzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnkpCit7CisJZnJlZShzaW1wbGlmeSk7Cit9CisKK3N0YXRpYyBpbnQgdHJlYXRfbGVhZGluZ19wYXRoKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgYmFzZWxlbiwgcmMgPSAwOworCWNvbnN0IGNoYXIgKmNwOworCisJd2hpbGUgKGxlbiAmJiBwYXRoW2xlbiAtIDFdID09ICcvJykKKwkJbGVuLS07CisJaWYgKCFsZW4pCisJCXJldHVybiAxOworCWJhc2VsZW4gPSAwOworCXdoaWxlICgxKSB7CisJCWNwID0gcGF0aCArIGJhc2VsZW4gKyAhIWJhc2VsZW47CisJCWNwID0gbWVtY2hyKGNwLCAnLycsIHBhdGggKyBsZW4gLSBjcCk7CisJCWlmICghY3ApCisJCQliYXNlbGVuID0gbGVuOworCQllbHNlCisJCQliYXNlbGVuID0gY3AgLSBwYXRoOworCQlzdHJidWZfc2V0bGVuKCZzYiwgMCk7CisJCXN0cmJ1Zl9hZGQoJnNiLCBwYXRoLCBiYXNlbGVuKTsKKwkJaWYgKCFpc19kaXJlY3Rvcnkoc2IuYnVmKSkKKwkJCWJyZWFrOworCQlpZiAoc2ltcGxpZnlfYXdheShzYi5idWYsIHNiLmxlbiwgc2ltcGxpZnkpKQorCQkJYnJlYWs7CisJCWlmICh0cmVhdF9vbmVfcGF0aChkaXIsICZzYiwgc2ltcGxpZnksCisJCQkJICAgRFRfRElSLCBOVUxMKSA9PSBwYXRoX2lnbm9yZWQpCisJCQlicmVhazsgLyogZG8gbm90IHJlY3Vyc2UgaW50byBpdCAqLworCQlpZiAobGVuIDw9IGJhc2VsZW4pIHsKKwkJCXJjID0gMTsKKwkJCWJyZWFrOyAvKiBmaW5pc2hlZCBjaGVja2luZyAqLworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJjOworfQorCitpbnQgcmVhZF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQoreworCXN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeTsKKworCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgocGF0aCwgbGVuKSkKKwkJcmV0dXJuIGRpci0+bnI7CisKKwlzaW1wbGlmeSA9IGNyZWF0ZV9zaW1wbGlmeShwYXRoc3BlYyk7CisJaWYgKCFsZW4gfHwgdHJlYXRfbGVhZGluZ19wYXRoKGRpciwgcGF0aCwgbGVuLCBzaW1wbGlmeSkpCisJCXJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsIHBhdGgsIGxlbiwgMCwgc2ltcGxpZnkpOworCWZyZWVfc2ltcGxpZnkoc2ltcGxpZnkpOworCXFzb3J0KGRpci0+ZW50cmllcywgZGlyLT5uciwgc2l6ZW9mKHN0cnVjdCBkaXJfZW50cnkgKiksIGNtcF9uYW1lKTsKKwlxc29ydChkaXItPmlnbm9yZWQsIGRpci0+aWdub3JlZF9uciwgc2l6ZW9mKHN0cnVjdCBkaXJfZW50cnkgKiksIGNtcF9uYW1lKTsKKwlyZXR1cm4gZGlyLT5ucjsKK30KKworaW50IGZpbGVfZXhpc3RzKGNvbnN0IGNoYXIgKmYpCit7CisJc3RydWN0IHN0YXQgc2I7CisJcmV0dXJuIGxzdGF0KGYsICZzYikgPT0gMDsKK30KKworLyoKKyAqIEdpdmVuIHR3byBub3JtYWxpemVkIHBhdGhzIChhIHRyYWlsaW5nIHNsYXNoIGlzIG9rKSwgaWYgc3ViZGlyIGlzCisgKiBvdXRzaWRlIGRpciwgcmV0dXJuIC0xLiAgT3RoZXJ3aXNlIHJldHVybiB0aGUgb2Zmc2V0IGluIHN1YmRpciB0aGF0CisgKiBjYW4gYmUgdXNlZCBhcyByZWxhdGl2ZSBwYXRoIHRvIGRpci4KKyAqLworaW50IGRpcl9pbnNpZGVfb2YoY29uc3QgY2hhciAqc3ViZGlyLCBjb25zdCBjaGFyICpkaXIpCit7CisJaW50IG9mZnNldCA9IDA7CisKKwlhc3NlcnQoZGlyICYmIHN1YmRpciAmJiAqZGlyICYmICpzdWJkaXIpOworCisJd2hpbGUgKCpkaXIgJiYgKnN1YmRpciAmJiAqZGlyID09ICpzdWJkaXIpIHsKKwkJZGlyKys7CisJCXN1YmRpcisrOworCQlvZmZzZXQrKzsKKwl9CisKKwkvKiBoZWxbcF0vbWUgdnMgaGVsW2xdL3llYWggKi8KKwlpZiAoKmRpciAmJiAqc3ViZGlyKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoISpzdWJkaXIpCisJCXJldHVybiAhKmRpciA/IG9mZnNldCA6IC0xOyAvKiBzYW1lIGRpciAqLworCisJLyogZm9vL1tiXWFyIHZzIGZvby9bXSAqLworCWlmIChpc19kaXJfc2VwKGRpclstMV0pKQorCQlyZXR1cm4gaXNfZGlyX3NlcChzdWJkaXJbLTFdKSA/IG9mZnNldCA6IC0xOworCisJLyogZm9vWy9dYmFyIHZzIGZvb1tdICovCisJcmV0dXJuIGlzX2Rpcl9zZXAoKnN1YmRpcikgPyBvZmZzZXQgKyAxIDogLTE7Cit9CisKK2ludCBpc19pbnNpZGVfZGlyKGNvbnN0IGNoYXIgKmRpcikKK3sKKwljaGFyIGN3ZFtQQVRIX01BWF07CisJaWYgKCFkaXIpCisJCXJldHVybiAwOworCWlmICghZ2V0Y3dkKGN3ZCwgc2l6ZW9mKGN3ZCkpKQorCQlkaWVfZXJybm8oImNhbid0IGZpbmQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Iik7CisJcmV0dXJuIGRpcl9pbnNpZGVfb2YoY3dkLCBkaXIpID49IDA7Cit9CisKK2ludCBpc19lbXB0eV9kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlESVIgKmRpciA9IG9wZW5kaXIocGF0aCk7CisJc3RydWN0IGRpcmVudCAqZTsKKwlpbnQgcmV0ID0gMTsKKworCWlmICghZGlyKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkKKwkJaWYgKCFpc19kb3Rfb3JfZG90ZG90KGUtPmRfbmFtZSkpIHsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJlbW92ZV9kaXJfcmVjdXJzZShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgZmxhZywgaW50ICprZXB0X3VwKQoreworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmU7CisJaW50IHJldCA9IDAsIG9yaWdpbmFsX2xlbiA9IHBhdGgtPmxlbiwgbGVuLCBrZXB0X2Rvd24gPSAwOworCWludCBvbmx5X2VtcHR5ID0gKGZsYWcgJiBSRU1PVkVfRElSX0VNUFRZX09OTFkpOworCWludCBrZWVwX3RvcGxldmVsID0gKGZsYWcgJiBSRU1PVkVfRElSX0tFRVBfVE9QTEVWRUwpOworCXVuc2lnbmVkIGNoYXIgc3VibW9kdWxlX2hlYWRbMjBdOworCisJaWYgKChmbGFnICYgUkVNT1ZFX0RJUl9LRUVQX05FU1RFRF9HSVQpICYmCisJICAgICFyZXNvbHZlX2dpdGxpbmtfcmVmKHBhdGgtPmJ1ZiwgIkhFQUQiLCBzdWJtb2R1bGVfaGVhZCkpIHsKKwkJLyogRG8gbm90IGRlc2NlbmQgYW5kIG51a2UgYSBuZXN0ZWQgZ2l0IHdvcmsgdHJlZS4gKi8KKwkJaWYgKGtlcHRfdXApCisJCQkqa2VwdF91cCA9IDE7CisJCXJldHVybiAwOworCX0KKworCWZsYWcgJj0gflJFTU9WRV9ESVJfS0VFUF9UT1BMRVZFTDsKKwlkaXIgPSBvcGVuZGlyKHBhdGgtPmJ1Zik7CisJaWYgKCFkaXIpIHsKKwkJLyogYW4gZW1wdHkgZGlyIGNvdWxkIGJlIHJlbW92ZWQgZXZlbiBpZiBpdCBpcyB1bnJlYWRibGUgKi8KKwkJaWYgKCFrZWVwX3RvcGxldmVsKQorCQkJcmV0dXJuIHJtZGlyKHBhdGgtPmJ1Zik7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisJaWYgKHBhdGgtPmJ1ZltvcmlnaW5hbF9sZW4gLSAxXSAhPSAnLycpCisJCXN0cmJ1Zl9hZGRjaChwYXRoLCAnLycpOworCisJbGVuID0gcGF0aC0+bGVuOworCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgbGVuKTsKKwkJc3RyYnVmX2FkZHN0cihwYXRoLCBlLT5kX25hbWUpOworCQlpZiAobHN0YXQocGF0aC0+YnVmLCAmc3QpKQorCQkJOyAvKiBmYWxsIHRocnUgKi8KKwkJZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJaWYgKCFyZW1vdmVfZGlyX3JlY3Vyc2UocGF0aCwgZmxhZywgJmtlcHRfZG93bikpCisJCQkJY29udGludWU7IC8qIGhhcHB5ICovCisJCX0gZWxzZSBpZiAoIW9ubHlfZW1wdHkgJiYgIXVubGluayhwYXRoLT5idWYpKQorCQkJY29udGludWU7IC8qIGhhcHB5LCB0b28gKi8KKworCQkvKiBwYXRoIHRvbyBsb25nLCBzdGF0IGZhaWxzLCBvciBub24tZGlyZWN0b3J5IHN0aWxsIGV4aXN0cyAqLworCQlyZXQgPSAtMTsKKwkJYnJlYWs7CisJfQorCWNsb3NlZGlyKGRpcik7CisKKwlzdHJidWZfc2V0bGVuKHBhdGgsIG9yaWdpbmFsX2xlbik7CisJaWYgKCFyZXQgJiYgIWtlZXBfdG9wbGV2ZWwgJiYgIWtlcHRfZG93bikKKwkJcmV0ID0gcm1kaXIocGF0aC0+YnVmKTsKKwllbHNlIGlmIChrZXB0X3VwKQorCQkvKgorCQkgKiByZXBvcnQgdGhlIHVwbGV2ZWwgdGhhdCBpdCBpcyBub3QgYW4gZXJyb3IgdGhhdCB3ZQorCQkgKiBkaWQgbm90IHJtZGlyKCkgb3VyIGRpcmVjdG9yeS4KKwkJICovCisJCSprZXB0X3VwID0gIXJldDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgZmxhZykKK3sKKwlyZXR1cm4gcmVtb3ZlX2Rpcl9yZWN1cnNlKHBhdGgsIGZsYWcsIE5VTEwpOworfQorCit2b2lkIHNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIpCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwljaGFyICp4ZGdfcGF0aDsKKworCWRpci0+ZXhjbHVkZV9wZXJfZGlyID0gIi5naXRpZ25vcmUiOworCXBhdGggPSBnaXRfcGF0aCgiaW5mby9leGNsdWRlIik7CisJaWYgKCFleGNsdWRlc19maWxlKSB7CisJCWhvbWVfY29uZmlnX3BhdGhzKE5VTEwsICZ4ZGdfcGF0aCwgImlnbm9yZSIpOworCQlleGNsdWRlc19maWxlID0geGRnX3BhdGg7CisJfQorCWlmICghYWNjZXNzX29yX3dhcm4ocGF0aCwgUl9PSykpCisJCWFkZF9leGNsdWRlc19mcm9tX2ZpbGUoZGlyLCBwYXRoKTsKKwlpZiAoZXhjbHVkZXNfZmlsZSAmJiAhYWNjZXNzX29yX3dhcm4oZXhjbHVkZXNfZmlsZSwgUl9PSykpCisJCWFkZF9leGNsdWRlc19mcm9tX2ZpbGUoZGlyLCBleGNsdWRlc19maWxlKTsKK30KKworaW50IHJlbW92ZV9wYXRoKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqc2xhc2g7CisKKwlpZiAodW5saW5rKG5hbWUpICYmIGVycm5vICE9IEVOT0VOVCkKKwkJcmV0dXJuIC0xOworCisJc2xhc2ggPSBzdHJyY2hyKG5hbWUsICcvJyk7CisJaWYgKHNsYXNoKSB7CisJCWNoYXIgKmRpcnMgPSB4c3RyZHVwKG5hbWUpOworCQlzbGFzaCA9IGRpcnMgKyAoc2xhc2ggLSBuYW1lKTsKKwkJZG8geworCQkJKnNsYXNoID0gJ1wwJzsKKwkJfSB3aGlsZSAocm1kaXIoZGlycykgPT0gMCAmJiAoc2xhc2ggPSBzdHJyY2hyKGRpcnMsICcvJykpKTsKKwkJZnJlZShkaXJzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGF0aHNwZWNfaXRlbV9jbXAoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBwYXRoc3BlY19pdGVtICphLCAqYjsKKworCWEgPSAoc3RydWN0IHBhdGhzcGVjX2l0ZW0gKilhXzsKKwliID0gKHN0cnVjdCBwYXRoc3BlY19pdGVtICopYl87CisJcmV0dXJuIHN0cmNtcChhLT5tYXRjaCwgYi0+bWF0Y2gpOworfQorCitpbnQgaW5pdF9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCBjb25zdCBjaGFyICoqcGF0aHMpCit7CisJY29uc3QgY2hhciAqKnAgPSBwYXRoczsKKwlpbnQgaTsKKworCW1lbXNldChwYXRoc3BlYywgMCwgc2l6ZW9mKCpwYXRoc3BlYykpOworCWlmICghcCkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKCpwKQorCQlwKys7CisJcGF0aHNwZWMtPnJhdyA9IHBhdGhzOworCXBhdGhzcGVjLT5uciA9IHAgLSBwYXRoczsKKwlpZiAoIXBhdGhzcGVjLT5ucikKKwkJcmV0dXJuIDA7CisKKwlwYXRoc3BlYy0+aXRlbXMgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcGF0aHNwZWNfaXRlbSkqcGF0aHNwZWMtPm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aHNwZWMtPm5yOyBpKyspIHsKKwkJc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0gPSBwYXRoc3BlYy0+aXRlbXMraTsKKwkJY29uc3QgY2hhciAqcGF0aCA9IHBhdGhzW2ldOworCisJCWl0ZW0tPm1hdGNoID0gcGF0aDsKKwkJaXRlbS0+bGVuID0gc3RybGVuKHBhdGgpOworCQlpdGVtLT51c2Vfd2lsZGNhcmQgPSAhbm9fd2lsZGNhcmQocGF0aCk7CisJCWlmIChpdGVtLT51c2Vfd2lsZGNhcmQpCisJCQlwYXRoc3BlYy0+aGFzX3dpbGRjYXJkID0gMTsKKwl9CisKKwlxc29ydChwYXRoc3BlYy0+aXRlbXMsIHBhdGhzcGVjLT5uciwKKwkgICAgICBzaXplb2Yoc3RydWN0IHBhdGhzcGVjX2l0ZW0pLCBwYXRoc3BlY19pdGVtX2NtcCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmcmVlX3BhdGhzcGVjKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJZnJlZShwYXRoc3BlYy0+aXRlbXMpOworCXBhdGhzcGVjLT5pdGVtcyA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kaXIuaCBiL2Rpci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MzQ2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXIuaApAQCAtMCwwICsxLDEzMSBAQAorI2lmbmRlZiBESVJfSAorI2RlZmluZSBESVJfSAorCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK3N0cnVjdCBkaXJfZW50cnkgeworCXVuc2lnbmVkIGludCBsZW47CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCisjZGVmaW5lIEVYQ19GTEFHX05PRElSIDEKKyNkZWZpbmUgRVhDX0ZMQUdfRU5EU1dJVEggNAorI2RlZmluZSBFWENfRkxBR19NVVNUQkVESVIgOAorCitzdHJ1Y3QgZXhjbHVkZV9saXN0IHsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCXN0cnVjdCBleGNsdWRlIHsKKwkJY29uc3QgY2hhciAqcGF0dGVybjsKKwkJaW50IHBhdHRlcm5sZW47CisJCWludCBub3dpbGRjYXJkbGVuOworCQljb25zdCBjaGFyICpiYXNlOworCQlpbnQgYmFzZWxlbjsKKwkJaW50IHRvX2V4Y2x1ZGU7CisJCWludCBmbGFnczsKKwl9ICoqZXhjbHVkZXM7Cit9OworCitzdHJ1Y3QgZXhjbHVkZV9zdGFjayB7CisJc3RydWN0IGV4Y2x1ZGVfc3RhY2sgKnByZXY7CisJY2hhciAqZmlsZWJ1ZjsKKwlpbnQgYmFzZWxlbjsKKwlpbnQgZXhjbHVkZV9peDsKK307CisKK3N0cnVjdCBkaXJfc3RydWN0IHsKKwlpbnQgbnIsIGFsbG9jOworCWludCBpZ25vcmVkX25yLCBpZ25vcmVkX2FsbG9jOworCWVudW0geworCQlESVJfU0hPV19JR05PUkVEID0gMTw8MCwKKwkJRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMgPSAxPDwxLAorCQlESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUyA9IDE8PDIsCisJCURJUl9OT19HSVRMSU5LUyA9IDE8PDMsCisJCURJUl9DT0xMRUNUX0lHTk9SRUQgPSAxPDw0CisJfSBmbGFnczsKKwlzdHJ1Y3QgZGlyX2VudHJ5ICoqZW50cmllczsKKwlzdHJ1Y3QgZGlyX2VudHJ5ICoqaWdub3JlZDsKKworCS8qIEV4Y2x1ZGUgaW5mbyAqLworCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfcGVyX2RpcjsKKwlzdHJ1Y3QgZXhjbHVkZV9saXN0IGV4Y2x1ZGVfbGlzdFszXTsKKwkvKgorCSAqIFdlIG1haW50YWluIHRocmVlIGV4Y2x1ZGUgcGF0dGVybiBsaXN0czoKKwkgKiBFWENfQ01ETCBsaXN0cyBwYXR0ZXJucyBleHBsaWNpdGx5IGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCisJICogRVhDX0RJUlMgbGlzdHMgcGF0dGVybnMgb2J0YWluZWQgZnJvbSBwZXItZGlyZWN0b3J5IGlnbm9yZSBmaWxlcy4KKwkgKiBFWENfRklMRSBsaXN0cyBwYXR0ZXJucyBmcm9tIGZhbGxiYWNrIGlnbm9yZSBmaWxlcy4KKwkgKi8KKyNkZWZpbmUgRVhDX0NNREwgMAorI2RlZmluZSBFWENfRElSUyAxCisjZGVmaW5lIEVYQ19GSUxFIDIKKworCXN0cnVjdCBleGNsdWRlX3N0YWNrICpleGNsdWRlX3N0YWNrOworCWNoYXIgYmFzZWJ1ZltQQVRIX01BWF07Cit9OworCisjZGVmaW5lIE1BVENIRURfUkVDVVJTSVZFTFkgMQorI2RlZmluZSBNQVRDSEVEX0ZOTUFUQ0ggMgorI2RlZmluZSBNQVRDSEVEX0VYQUNUTFkgMworZXh0ZXJuIGNoYXIgKmNvbW1vbl9wcmVmaXgoY29uc3QgY2hhciAqKnBhdGhzcGVjKTsKK2V4dGVybiBpbnQgbWF0Y2hfcGF0aHNwZWMoY29uc3QgY2hhciAqKnBhdGhzcGVjLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IHByZWZpeCwgY2hhciAqc2Vlbik7CitleHRlcm4gaW50IG1hdGNoX3BhdGhzcGVjX2RlcHRoKGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkJaW50IHByZWZpeCwgY2hhciAqc2Vlbik7CitleHRlcm4gaW50IHdpdGhpbl9kZXB0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IGRlcHRoLCBpbnQgbWF4X2RlcHRoKTsKKworZXh0ZXJuIGludCBmaWxsX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOworZXh0ZXJuIGludCByZWFkX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOworCitleHRlcm4gaW50IGV4Y2x1ZGVkX2Zyb21fbGlzdChjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IHBhdGhsZW4sIGNvbnN0IGNoYXIgKmJhc2VuYW1lLAorCQkJICAgICAgaW50ICpkdHlwZSwgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwpOworc3RydWN0IGRpcl9lbnRyeSAqZGlyX2FkZF9pZ25vcmVkKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgbGVuKTsKKworLyoKKyAqIFRoZSBleGNsdWRlZCgpIEFQSSBpcyBtZWFudCBmb3IgY2FsbGVycyB0aGF0IGNoZWNrIGVhY2ggbGV2ZWwgb2YgbGVhZGluZworICogZGlyZWN0b3J5IGhpZXJhcmNoaWVzIHdpdGggZXhjbHVkZWQoKSB0byBhdm9pZCByZWN1cnNpbmcgaW50byBleGNsdWRlZAorICogZGlyZWN0b3JpZXMuICBDYWxsZXJzIHRoYXQgZG8gbm90IGRvIHNvIHNob3VsZCB1c2UgdGhpcyBBUEkgaW5zdGVhZC4KKyAqLworc3RydWN0IHBhdGhfZXhjbHVkZV9jaGVjayB7CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcjsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGg7Cit9OworZXh0ZXJuIHZvaWQgcGF0aF9leGNsdWRlX2NoZWNrX2luaXQoc3RydWN0IHBhdGhfZXhjbHVkZV9jaGVjayAqLCBzdHJ1Y3QgZGlyX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHBhdGhfZXhjbHVkZV9jaGVja19jbGVhcihzdHJ1Y3QgcGF0aF9leGNsdWRlX2NoZWNrICopOworZXh0ZXJuIGludCBwYXRoX2V4Y2x1ZGVkKHN0cnVjdCBwYXRoX2V4Y2x1ZGVfY2hlY2sgKiwgY29uc3QgY2hhciAqLCBpbnQgbmFtZWxlbiwgaW50ICpkdHlwZSk7CisKKworZXh0ZXJuIGludCBhZGRfZXhjbHVkZXNfZnJvbV9maWxlX3RvX2xpc3QoY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJCQkgIGNoYXIgKipidWZfcCwgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqd2hpY2gsIGludCBjaGVja19pbmRleCk7CitleHRlcm4gdm9pZCBhZGRfZXhjbHVkZXNfZnJvbV9maWxlKHN0cnVjdCBkaXJfc3RydWN0ICosIGNvbnN0IGNoYXIgKmZuYW1lKTsKK2V4dGVybiB2b2lkIGFkZF9leGNsdWRlKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqYmFzZSwKKwkJCWludCBiYXNlbGVuLCBzdHJ1Y3QgZXhjbHVkZV9saXN0ICp3aGljaCk7CitleHRlcm4gdm9pZCBmcmVlX2V4Y2x1ZGVzKHN0cnVjdCBleGNsdWRlX2xpc3QgKmVsKTsKK2V4dGVybiBpbnQgZmlsZV9leGlzdHMoY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIGludCBpc19pbnNpZGVfZGlyKGNvbnN0IGNoYXIgKmRpcik7CitleHRlcm4gaW50IGRpcl9pbnNpZGVfb2YoY29uc3QgY2hhciAqc3ViZGlyLCBjb25zdCBjaGFyICpkaXIpOworCitzdGF0aWMgaW5saW5lIGludCBpc19kb3Rfb3JfZG90ZG90KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIChuYW1lWzBdID09ICcuJyAmJgorCQkobmFtZVsxXSA9PSAnXDAnIHx8CisJCSAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnXDAnKSkpOworfQorCitleHRlcm4gaW50IGlzX2VtcHR5X2Rpcihjb25zdCBjaGFyICpkaXIpOworCitleHRlcm4gdm9pZCBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKTsKKworI2RlZmluZSBSRU1PVkVfRElSX0VNUFRZX09OTFkgMDEKKyNkZWZpbmUgUkVNT1ZFX0RJUl9LRUVQX05FU1RFRF9HSVQgMDIKKyNkZWZpbmUgUkVNT1ZFX0RJUl9LRUVQX1RPUExFVkVMIDA0CitleHRlcm4gaW50IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgaW50IGZsYWcpOworCisvKiB0cmllcyB0byByZW1vdmUgdGhlIHBhdGggd2l0aCBlbXB0eSBkaXJlY3RvcmllcyBhbG9uZyBpdCwgaWdub3JlcyBFTk9FTlQgKi8KK2V4dGVybiBpbnQgcmVtb3ZlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CisKK2V4dGVybiBpbnQgc3RyY21wX2ljYXNlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOworZXh0ZXJuIGludCBzdHJuY21wX2ljYXNlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHNpemVfdCBjb3VudCk7CitleHRlcm4gaW50IGZubWF0Y2hfaWNhc2UoY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2VkaXRvci5jIGIvZWRpdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzNDAwMwotLS0gL2Rldi9udWxsCisrKyBiL2VkaXRvci5jCkBAIC0wLDAgKzEsNTIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKKyNpZm5kZWYgREVGQVVMVF9FRElUT1IKKyNkZWZpbmUgREVGQVVMVF9FRElUT1IgInZpIgorI2VuZGlmCisKK2NvbnN0IGNoYXIgKmdpdF9lZGl0b3Iodm9pZCkKK3sKKwljb25zdCBjaGFyICplZGl0b3IgPSBnZXRlbnYoIkdJVF9FRElUT1IiKTsKKwljb25zdCBjaGFyICp0ZXJtaW5hbCA9IGdldGVudigiVEVSTSIpOworCWludCB0ZXJtaW5hbF9pc19kdW1iID0gIXRlcm1pbmFsIHx8ICFzdHJjbXAodGVybWluYWwsICJkdW1iIik7CisKKwlpZiAoIWVkaXRvciAmJiBlZGl0b3JfcHJvZ3JhbSkKKwkJZWRpdG9yID0gZWRpdG9yX3Byb2dyYW07CisJaWYgKCFlZGl0b3IgJiYgIXRlcm1pbmFsX2lzX2R1bWIpCisJCWVkaXRvciA9IGdldGVudigiVklTVUFMIik7CisJaWYgKCFlZGl0b3IpCisJCWVkaXRvciA9IGdldGVudigiRURJVE9SIik7CisKKwlpZiAoIWVkaXRvciAmJiB0ZXJtaW5hbF9pc19kdW1iKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghZWRpdG9yKQorCQllZGl0b3IgPSBERUZBVUxUX0VESVRPUjsKKworCXJldHVybiBlZGl0b3I7Cit9CisKK2ludCBsYXVuY2hfZWRpdG9yKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwgY29uc3QgY2hhciAqY29uc3QgKmVudikKK3sKKwljb25zdCBjaGFyICplZGl0b3IgPSBnaXRfZWRpdG9yKCk7CisKKwlpZiAoIWVkaXRvcikKKwkJcmV0dXJuIGVycm9yKCJUZXJtaW5hbCBpcyBkdW1iLCBidXQgRURJVE9SIHVuc2V0Iik7CisKKwlpZiAoc3RyY21wKGVkaXRvciwgIjoiKSkgeworCQljb25zdCBjaGFyICphcmdzW10gPSB7IGVkaXRvciwgcGF0aCwgTlVMTCB9OworCisJCWlmIChydW5fY29tbWFuZF92X29wdF9jZF9lbnYoYXJncywgUlVOX1VTSU5HX1NIRUxMLCBOVUxMLCBlbnYpKQorCQkJcmV0dXJuIGVycm9yKCJUaGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIGVkaXRvciAnJXMnLiIsCisJCQkJCWVkaXRvcik7CisJfQorCisJaWYgKCFidWZmZXIpCisJCXJldHVybiAwOworCWlmIChzdHJidWZfcmVhZF9maWxlKGJ1ZmZlciwgcGF0aCwgMCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJzogJXMiLAorCQkJCXBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lbnRyeS5jIGIvZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2E2YmNjCi0tLSAvZGV2L251bGwKKysrIGIvZW50cnkuYwpAQCAtMCwwICsxLDI3NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorCitzdGF0aWMgdm9pZCBjcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgY2hhciAqcGF0aCwgaW50IHBhdGhfbGVuLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUpCit7CisJY2hhciAqYnVmID0geG1hbGxvYyhwYXRoX2xlbiArIDEpOworCWludCBsZW4gPSAwOworCisJd2hpbGUgKGxlbiA8IHBhdGhfbGVuKSB7CisJCWRvIHsKKwkJCWJ1ZltsZW5dID0gcGF0aFtsZW5dOworCQkJbGVuKys7CisJCX0gd2hpbGUgKGxlbiA8IHBhdGhfbGVuICYmIHBhdGhbbGVuXSAhPSAnLycpOworCQlpZiAobGVuID49IHBhdGhfbGVuKQorCQkJYnJlYWs7CisJCWJ1ZltsZW5dID0gMDsKKworCQkvKgorCQkgKiBGb3IgJ2NoZWNrb3V0LWluZGV4IC0tcHJlZml4PTxkaXI+JywgPGRpcj4gaXMKKwkJICogYWxsb3dlZCB0byBiZSBhIHN5bWxpbmsgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LAorCQkgKiBhbmQgd2Ugc2V0ICdzdGF0ZS0+YmFzZV9kaXJfbGVuJyBiZWxvdywgc3VjaCB0aGF0CisJCSAqIHdlIHRlc3QgdGhlIHBhdGggY29tcG9uZW50cyBvZiB0aGUgcHJlZml4IHdpdGggdGhlCisJCSAqIHN0YXQoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBsc3RhdCgpIGZ1bmN0aW9uLgorCQkgKi8KKwkJaWYgKGhhc19kaXJzX29ubHlfcGF0aChidWYsIGxlbiwgc3RhdGUtPmJhc2VfZGlyX2xlbikpCisJCQljb250aW51ZTsgLyogb2ssIGl0IGlzIGFscmVhZHkgYSBkaXJlY3RvcnkuICovCisKKwkJLyoKKwkJICogSWYgdGhpcyBta2RpcigpIHdvdWxkIGZhaWwsIGl0IGNvdWxkIGJlIHRoYXQgdGhlcmUKKwkJICogaXMgYWxyZWFkeSBhIHN5bWxpbmsgb3Igc29tZXRoaW5nIGVsc2UgZXhpc3RzCisJCSAqIHRoZXJlLCB0aGVyZWZvcmUgd2UgdGhlbiB0cnkgdG8gdW5saW5rIGl0IGFuZCB0cnkKKwkJICogb25lIG1vcmUgdGltZSB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeS4KKwkJICovCisJCWlmIChta2RpcihidWYsIDA3NzcpKSB7CisJCQlpZiAoZXJybm8gPT0gRUVYSVNUICYmIHN0YXRlLT5mb3JjZSAmJgorCQkJICAgICF1bmxpbmtfb3Jfd2FybihidWYpICYmICFta2RpcihidWYsIDA3NzcpKQorCQkJCWNvbnRpbnVlOworCQkJZGllX2Vycm5vKCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBhdCAnJXMnIiwgYnVmKTsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJRElSICpkaXIgPSBvcGVuZGlyKHBhdGgpOworCXN0cnVjdCBkaXJlbnQgKmRlOworCWNoYXIgcGF0aGJ1ZltQQVRIX01BWF07CisJY2hhciAqbmFtZTsKKworCWlmICghZGlyKQorCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuZGlyICclcyciLCBwYXRoKTsKKwlzdHJjcHkocGF0aGJ1ZiwgcGF0aCk7CisJbmFtZSA9IHBhdGhidWYgKyBzdHJsZW4ocGF0aCk7CisJKm5hbWUrKyA9ICcvJzsKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlzdHJjcHkobmFtZSwgZGUtPmRfbmFtZSk7CisJCWlmIChsc3RhdChwYXRoYnVmLCAmc3QpKQorCQkJZGllX2Vycm5vKCJjYW5ub3QgbHN0YXQgJyVzJyIsIHBhdGhidWYpOworCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCXJlbW92ZV9zdWJ0cmVlKHBhdGhidWYpOworCQllbHNlIGlmICh1bmxpbmsocGF0aGJ1ZikpCisJCQlkaWVfZXJybm8oImNhbm5vdCB1bmxpbmsgJyVzJyIsIHBhdGhidWYpOworCX0KKwljbG9zZWRpcihkaXIpOworCWlmIChybWRpcihwYXRoKSkKKwkJZGllX2Vycm5vKCJjYW5ub3Qgcm1kaXIgJyVzJyIsIHBhdGgpOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBtb2RlKQoreworCW1vZGUgPSAobW9kZSAmIDAxMDApID8gMDc3NyA6IDA2NjY7CisJcmV0dXJuIG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCBtb2RlKTsKK30KKworc3RhdGljIHZvaWQgKnJlYWRfYmxvYl9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpuZXcgPSByZWFkX3NoYTFfZmlsZShjZS0+c2hhMSwgJnR5cGUsIHNpemUpOworCisJaWYgKG5ldykgeworCQlpZiAodHlwZSA9PSBPQkpfQkxPQikKKwkJCXJldHVybiBuZXc7CisJCWZyZWUobmV3KTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9vdXRwdXRfZmQoY2hhciAqcGF0aCwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHRvX3RlbXBmaWxlKQoreworCWludCBzeW1saW5rID0gKGNlLT5jZV9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHOworCWlmICh0b190ZW1wZmlsZSkgeworCQlzdHJjcHkocGF0aCwgc3ltbGluaworCQkgICAgICAgPyAiLm1lcmdlX2xpbmtfWFhYWFhYIiA6ICIubWVyZ2VfZmlsZV9YWFhYWFgiKTsKKwkJcmV0dXJuIG1rc3RlbXAocGF0aCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGNyZWF0ZV9maWxlKHBhdGgsICFzeW1saW5rID8gY2UtPmNlX21vZGUgOiAwNjY2KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZnN0YXRfb3V0cHV0KGludCBmZCwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgc3RydWN0IHN0YXQgKnN0KQoreworCS8qIHVzZSBmc3RhdCgpIG9ubHkgd2hlbiBwYXRoID09IGNlLT5uYW1lICovCisJaWYgKGZzdGF0X2lzX3JlbGlhYmxlKCkgJiYKKwkgICAgc3RhdGUtPnJlZnJlc2hfY2FjaGUgJiYgIXN0YXRlLT5iYXNlX2Rpcl9sZW4pIHsKKwkJZnN0YXQoZmQsIHN0KTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0cmVhbWluZ193cml0ZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjaGFyICpwYXRoLAorCQkJCSBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyLAorCQkJCSBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBpbnQgdG9fdGVtcGZpbGUsCisJCQkJIGludCAqZnN0YXRfZG9uZSwgc3RydWN0IHN0YXQgKnN0YXRidWYpCit7CisJaW50IHJlc3VsdCA9IC0xOworCWludCBmZDsKKworCWZkID0gb3Blbl9vdXRwdXRfZmQocGF0aCwgY2UsIHRvX3RlbXBmaWxlKTsKKwlpZiAoMCA8PSBmZCkgeworCQlyZXN1bHQgPSBzdHJlYW1fYmxvYl90b19mZChmZCwgY2UtPnNoYTEsIGZpbHRlciwgMSk7CisJCSpmc3RhdF9kb25lID0gZnN0YXRfb3V0cHV0KGZkLCBzdGF0ZSwgc3RhdGJ1Zik7CisJCXJlc3VsdCA9IGNsb3NlKGZkKTsKKwl9CisJaWYgKHJlc3VsdCAmJiAwIDw9IGZkKQorCQl1bmxpbmsocGF0aCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3cml0ZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBpbnQgdG9fdGVtcGZpbGUpCit7CisJdW5zaWduZWQgaW50IGNlX21vZGVfc19pZm10ID0gY2UtPmNlX21vZGUgJiBTX0lGTVQ7CisJaW50IGZkLCByZXQsIGZzdGF0X2RvbmUgPSAwOworCWNoYXIgKm5ldzsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzaXplX3Qgd3JvdGUsIG5ld3NpemUgPSAwOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGNlX21vZGVfc19pZm10ID09IFNfSUZSRUcpIHsKKwkJc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciA9IGdldF9zdHJlYW1fZmlsdGVyKHBhdGgsIGNlLT5zaGExKTsKKwkJaWYgKGZpbHRlciAmJgorCQkgICAgIXN0cmVhbWluZ193cml0ZV9lbnRyeShjZSwgcGF0aCwgZmlsdGVyLAorCQkJCQkgICBzdGF0ZSwgdG9fdGVtcGZpbGUsCisJCQkJCSAgICZmc3RhdF9kb25lLCAmc3QpKQorCQkJZ290byBmaW5pc2g7CisJfQorCisJc3dpdGNoIChjZV9tb2RlX3NfaWZtdCkgeworCWNhc2UgU19JRlJFRzoKKwljYXNlIFNfSUZMTks6CisJCW5ldyA9IHJlYWRfYmxvYl9lbnRyeShjZSwgJnNpemUpOworCQlpZiAoIW5ldykKKwkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHJlYWQgc2hhMSBmaWxlIG9mICVzICglcykiLAorCQkJCXBhdGgsIHNoYTFfdG9faGV4KGNlLT5zaGExKSk7CisKKwkJaWYgKGNlX21vZGVfc19pZm10ID09IFNfSUZMTksgJiYgaGFzX3N5bWxpbmtzICYmICF0b190ZW1wZmlsZSkgeworCQkJcmV0ID0gc3ltbGluayhuZXcsIHBhdGgpOworCQkJZnJlZShuZXcpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBjcmVhdGUgc3ltbGluayAlcyAoJXMpIiwKKwkJCQkJICAgICBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBDb252ZXJ0IGZyb20gZ2l0IGludGVybmFsIGZvcm1hdCB0byB3b3JraW5nIHRyZWUgZm9ybWF0CisJCSAqLworCQlpZiAoY2VfbW9kZV9zX2lmbXQgPT0gU19JRlJFRyAmJgorCQkgICAgY29udmVydF90b193b3JraW5nX3RyZWUoY2UtPm5hbWUsIG5ldywgc2l6ZSwgJmJ1ZikpIHsKKwkJCWZyZWUobmV3KTsKKwkJCW5ldyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJm5ld3NpemUpOworCQkJc2l6ZSA9IG5ld3NpemU7CisJCX0KKworCQlmZCA9IG9wZW5fb3V0cHV0X2ZkKHBhdGgsIGNlLCB0b190ZW1wZmlsZSk7CisJCWlmIChmZCA8IDApIHsKKwkJCWZyZWUobmV3KTsKKwkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGNyZWF0ZSBmaWxlICVzICglcykiLAorCQkJCXBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCX0KKworCQl3cm90ZSA9IHdyaXRlX2luX2Z1bGwoZmQsIG5ldywgc2l6ZSk7CisJCWlmICghdG9fdGVtcGZpbGUpCisJCQlmc3RhdF9kb25lID0gZnN0YXRfb3V0cHV0KGZkLCBzdGF0ZSwgJnN0KTsKKwkJY2xvc2UoZmQpOworCQlmcmVlKG5ldyk7CisJCWlmICh3cm90ZSAhPSBzaXplKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIsIHBhdGgpOworCQlicmVhazsKKwljYXNlIFNfSUZHSVRMSU5LOgorCQlpZiAodG9fdGVtcGZpbGUpCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IHN1YnByb2plY3QgJXMiLCBwYXRoKTsKKwkJaWYgKG1rZGlyKHBhdGgsIDA3NzcpIDwgMCkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IGNyZWF0ZSBzdWJwcm9qZWN0IGRpcmVjdG9yeSAlcyIsIHBhdGgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZXJyb3IoInVua25vd24gZmlsZSBtb2RlIGZvciAlcyBpbiBpbmRleCIsIHBhdGgpOworCX0KKworZmluaXNoOgorCWlmIChzdGF0ZS0+cmVmcmVzaF9jYWNoZSkgeworCQlpZiAoIWZzdGF0X2RvbmUpCisJCQlsc3RhdChjZS0+bmFtZSwgJnN0KTsKKwkJZmlsbF9zdGF0X2NhY2hlX2luZm8oY2UsICZzdCk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyBsaWtlICdsc3RhdCgpJywgZXhjZXB0IGl0IHJlZnVzZXMgdG8gZm9sbG93IHN5bWxpbmtzCisgKiBpbiB0aGUgcGF0aCwgYWZ0ZXIgc2tpcHBpbmcgInNraXBsZW4iLgorICovCitzdGF0aWMgaW50IGNoZWNrX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwgc3RydWN0IHN0YXQgKnN0LCBpbnQgc2tpcGxlbikKK3sKKwljb25zdCBjaGFyICpzbGFzaCA9IHBhdGggKyBsZW47CisKKwl3aGlsZSAocGF0aCA8IHNsYXNoICYmICpzbGFzaCAhPSAnLycpCisJCXNsYXNoLS07CisJaWYgKCFoYXNfZGlyc19vbmx5X3BhdGgocGF0aCwgc2xhc2ggLSBwYXRoLCBza2lwbGVuKSkgeworCQllcnJubyA9IEVOT0VOVDsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gbHN0YXQocGF0aCwgc3QpOworfQorCitpbnQgY2hlY2tvdXRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgY2hhciAqdG9wYXRoKQoreworCXN0YXRpYyBjaGFyIHBhdGhbUEFUSF9NQVggKyAxXTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgbGVuID0gc3RhdGUtPmJhc2VfZGlyX2xlbjsKKworCWlmICh0b3BhdGgpCisJCXJldHVybiB3cml0ZV9lbnRyeShjZSwgdG9wYXRoLCBzdGF0ZSwgMSk7CisKKwltZW1jcHkocGF0aCwgc3RhdGUtPmJhc2VfZGlyLCBsZW4pOworCXN0cmNweShwYXRoICsgbGVuLCBjZS0+bmFtZSk7CisJbGVuICs9IGNlX25hbWVsZW4oY2UpOworCisJaWYgKCFjaGVja19wYXRoKHBhdGgsIGxlbiwgJnN0LCBzdGF0ZS0+YmFzZV9kaXJfbGVuKSkgeworCQl1bnNpZ25lZCBjaGFuZ2VkID0gY2VfbWF0Y2hfc3RhdChjZSwgJnN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUpOworCQlpZiAoIWNoYW5nZWQpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFzdGF0ZS0+Zm9yY2UpIHsKKwkJCWlmICghc3RhdGUtPnF1aWV0KQorCQkJCWZwcmludGYoc3RkZXJyLCAiJXMgYWxyZWFkeSBleGlzdHMsIG5vIGNoZWNrb3V0XG4iLCBwYXRoKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qCisJCSAqIFdlIHVubGluayB0aGUgb2xkIGZpbGUsIHRvIGdldCB0aGUgbmV3IG9uZSB3aXRoIHRoZQorCQkgKiByaWdodCBwZXJtaXNzaW9ucyAoaW5jbHVkaW5nIHVtYXNrLCB3aGljaCBpcyBuYXN0eQorCQkgKiB0byBlbXVsYXRlIGJ5IGhhbmQgLSBtdWNoIGVhc2llciB0byBsZXQgdGhlIHN5c3RlbQorCQkgKiBqdXN0IGRvIHRoZSByaWdodCB0aGluZykKKwkJICovCisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQkvKiBJZiBpdCBpcyBhIGdpdGxpbmssIGxlYXZlIGl0IGFsb25lISAqLworCQkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmICghc3RhdGUtPmZvcmNlKQorCQkJCXJldHVybiBlcnJvcigiJXMgaXMgYSBkaXJlY3RvcnkiLCBwYXRoKTsKKwkJCXJlbW92ZV9zdWJ0cmVlKHBhdGgpOworCQl9IGVsc2UgaWYgKHVubGluayhwYXRoKSkKKwkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHVubGluayBvbGQgJyVzJyAoJXMpIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwl9IGVsc2UgaWYgKHN0YXRlLT5ub3RfbmV3KQorCQlyZXR1cm4gMDsKKwljcmVhdGVfZGlyZWN0b3JpZXMocGF0aCwgbGVuLCBzdGF0ZSk7CisJcmV0dXJuIHdyaXRlX2VudHJ5KGNlLCBwYXRoLCBzdGF0ZSwgMCk7Cit9CmRpZmYgLS1naXQgYS9lbnZpcm9ubWVudC5jIGIvZW52aXJvbm1lbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWVkZDdmCi0tLSAvZGV2L251bGwKKysrIGIvZW52aXJvbm1lbnQuYwpAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIFdlIHB1dCBhbGwgdGhlIGdpdCBjb25maWcgdmFyaWFibGVzIGluIHRoaXMgc2FtZSBvYmplY3QKKyAqIGZpbGUsIHNvIHRoYXQgcHJvZ3JhbXMgY2FuIGxpbmsgYWdhaW5zdCB0aGUgY29uZmlnIHBhcnNlcgorICogd2l0aG91dCBoYXZpbmcgdG8gbGluayBhZ2FpbnN0IGFsbCB0aGUgcmVzdCBvZiBnaXQuCisgKgorICogSW4gcGFydGljdWxhciwgbm8gbmVlZCB0byBicmluZyBpbiBsaWJ6IGV0YyB1bmxlc3MgbmVlZGVkLAorICogZXZlbiBpZiB5b3UgbWlnaHQgd2FudCB0byBrbm93IHdoZXJlIHRoZSBnaXQgZGlyZWN0b3J5IGV0YworICogYXJlLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZm10LW1lcmdlLW1zZy5oIgorCitpbnQgdHJ1c3RfZXhlY3V0YWJsZV9iaXQgPSAxOworaW50IHRydXN0X2N0aW1lID0gMTsKK2ludCBoYXNfc3ltbGlua3MgPSAxOworaW50IG1pbmltdW1fYWJicmV2ID0gNCwgZGVmYXVsdF9hYmJyZXYgPSA3OworaW50IGlnbm9yZV9jYXNlOworaW50IGFzc3VtZV91bmNoYW5nZWQ7CitpbnQgcHJlZmVyX3N5bWxpbmtfcmVmczsKK2ludCBpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCitpbnQgbG9nX2FsbF9yZWZfdXBkYXRlcyA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworaW50IHdhcm5fYW1iaWd1b3VzX3JlZnMgPSAxOworaW50IHJlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb247Citjb25zdCBjaGFyICpnaXRfY29tbWl0X2VuY29kaW5nOworY29uc3QgY2hhciAqZ2l0X2xvZ19vdXRwdXRfZW5jb2Rpbmc7CitpbnQgc2hhcmVkX3JlcG9zaXRvcnkgPSBQRVJNX1VNQVNLOworY29uc3QgY2hhciAqYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlOworY29uc3QgY2hhciAqYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlOworY29uc3QgY2hhciAqZ2l0X2F0dHJpYnV0ZXNfZmlsZTsKK2ludCB6bGliX2NvbXByZXNzaW9uX2xldmVsID0gWl9CRVNUX1NQRUVEOworaW50IGNvcmVfY29tcHJlc3Npb25fbGV2ZWw7CitpbnQgY29yZV9jb21wcmVzc2lvbl9zZWVuOworaW50IGZzeW5jX29iamVjdF9maWxlczsKK3NpemVfdCBwYWNrZWRfZ2l0X3dpbmRvd19zaXplID0gREVGQVVMVF9QQUNLRURfR0lUX1dJTkRPV19TSVpFOworc2l6ZV90IHBhY2tlZF9naXRfbGltaXQgPSBERUZBVUxUX1BBQ0tFRF9HSVRfTElNSVQ7CitzaXplX3QgZGVsdGFfYmFzZV9jYWNoZV9saW1pdCA9IDE2ICogMTAyNCAqIDEwMjQ7Cit1bnNpZ25lZCBsb25nIGJpZ19maWxlX3RocmVzaG9sZCA9IDUxMiAqIDEwMjQgKiAxMDI0OworY29uc3QgY2hhciAqbG9nX3BhY2tfYWNjZXNzOworY29uc3QgY2hhciAqcGFnZXJfcHJvZ3JhbTsKK2ludCBwYWdlcl91c2VfY29sb3IgPSAxOworY29uc3QgY2hhciAqZWRpdG9yX3Byb2dyYW07Citjb25zdCBjaGFyICphc2twYXNzX3Byb2dyYW07Citjb25zdCBjaGFyICpleGNsdWRlc19maWxlOworZW51bSBhdXRvX2NybGYgYXV0b19jcmxmID0gQVVUT19DUkxGX0ZBTFNFOworaW50IHJlYWRfcmVwbGFjZV9yZWZzID0gMTsgLyogTkVFRFNXT1JLOiByZW5hbWUgdG8gdXNlX3JlcGxhY2VfcmVmcyAqLworZW51bSBlb2wgY29yZV9lb2wgPSBFT0xfVU5TRVQ7CitlbnVtIHNhZmVfY3JsZiBzYWZlX2NybGYgPSBTQUZFX0NSTEZfV0FSTjsKK3Vuc2lnbmVkIHdoaXRlc3BhY2VfcnVsZV9jZmcgPSBXU19ERUZBVUxUX1JVTEU7CitlbnVtIGJyYW5jaF90cmFjayBnaXRfYnJhbmNoX3RyYWNrID0gQlJBTkNIX1RSQUNLX1JFTU9URTsKK2VudW0gcmViYXNlX3NldHVwX3R5cGUgYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfTkVWRVI7CitlbnVtIHB1c2hfZGVmYXVsdF90eXBlIHB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9VTlNQRUNJRklFRDsKKyNpZm5kZWYgT0JKRUNUX0NSRUFUSU9OX01PREUKKyNkZWZpbmUgT0JKRUNUX0NSRUFUSU9OX01PREUgT0JKRUNUX0NSRUFUSU9OX1VTRVNfSEFSRExJTktTCisjZW5kaWYKK2VudW0gb2JqZWN0X2NyZWF0aW9uX21vZGUgb2JqZWN0X2NyZWF0aW9uX21vZGUgPSBPQkpFQ1RfQ1JFQVRJT05fTU9ERTsKK2NoYXIgKm5vdGVzX3JlZl9uYW1lOworaW50IGdyYWZ0c19yZXBsYWNlX3BhcmVudHMgPSAxOworaW50IGNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0OworaW50IG1lcmdlX2xvZ19jb25maWcgPSAtMTsKK2ludCBwcmVjb21wb3NlZF91bmljb2RlID0gLTE7IC8qIHNlZSBwcm9iZV91dGY4X3BhdGhuYW1lX2NvbXBvc2l0aW9uKCkgKi8KK3N0cnVjdCBzdGFydHVwX2luZm8gKnN0YXJ0dXBfaW5mbzsKK3Vuc2lnbmVkIGxvbmcgcGFja19zaXplX2xpbWl0X2NmZzsKKworLyogUGFyYWxsZWwgaW5kZXggc3RhdCBkYXRhIHByZWxvYWQ/ICovCitpbnQgY29yZV9wcmVsb2FkX2luZGV4ID0gMDsKKworLyogVGhpcyBpcyBzZXQgYnkgc2V0dXBfZ2l0X2Rpcl9nZW50bHkoKSBhbmQvb3IgZ2l0X2RlZmF1bHRfY29uZmlnKCkgKi8KK2NoYXIgKmdpdF93b3JrX3RyZWVfY2ZnOworc3RhdGljIGNoYXIgKndvcmtfdHJlZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm5hbWVzcGFjZTsKK3N0YXRpYyBzaXplX3QgbmFtZXNwYWNlX2xlbjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmdpdF9kaXI7CitzdGF0aWMgY2hhciAqZ2l0X29iamVjdF9kaXIsICpnaXRfaW5kZXhfZmlsZSwgKmdpdF9ncmFmdF9maWxlOworCisvKgorICogUmVwb3NpdG9yeS1sb2NhbCBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAqIFJlbWVtYmVyIHRvIHVwZGF0ZSBsb2NhbF9yZXBvX2Vudl9zaXplIGluIGNhY2hlLmggd2hlbgorICogdGhlIHNpemUgb2YgdGhlIGxpc3QgY2hhbmdlcworICovCitjb25zdCBjaGFyICogY29uc3QgbG9jYWxfcmVwb19lbnZbTE9DQUxfUkVQT19FTlZfU0laRSArIDFdID0geworCUFMVEVSTkFURV9EQl9FTlZJUk9OTUVOVCwKKwlDT05GSUdfRU5WSVJPTk1FTlQsCisJQ09ORklHX0RBVEFfRU5WSVJPTk1FTlQsCisJREJfRU5WSVJPTk1FTlQsCisJR0lUX0RJUl9FTlZJUk9OTUVOVCwKKwlHSVRfV09SS19UUkVFX0VOVklST05NRU5ULAorCUdSQUZUX0VOVklST05NRU5ULAorCUlOREVYX0VOVklST05NRU5ULAorCU5PX1JFUExBQ0VfT0JKRUNUU19FTlZJUk9OTUVOVCwKKwlOVUxMCit9OworCitzdGF0aWMgY2hhciAqZXhwYW5kX25hbWVzcGFjZShjb25zdCBjaGFyICpyYXdfbmFtZXNwYWNlKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiAqKmNvbXBvbmVudHMsICoqYzsKKworCWlmICghcmF3X25hbWVzcGFjZSB8fCAhKnJhd19uYW1lc3BhY2UpCisJCXJldHVybiB4c3RyZHVwKCIiKTsKKworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmF3X25hbWVzcGFjZSk7CisJY29tcG9uZW50cyA9IHN0cmJ1Zl9zcGxpdCgmYnVmLCAnLycpOworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlmb3IgKGMgPSBjb21wb25lbnRzOyAqYzsgYysrKQorCQlpZiAoc3RyY21wKCgqYyktPmJ1ZiwgIi8iKSAhPSAwKQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlZnMvbmFtZXNwYWNlcy8lcyIsICgqYyktPmJ1Zik7CisJc3RyYnVmX2xpc3RfZnJlZShjb21wb25lbnRzKTsKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoYnVmLmJ1ZiwgMCkpCisJCWRpZSgiYmFkIGdpdCBuYW1lc3BhY2UgcGF0aCBcIiVzXCIiLCByYXdfbmFtZXNwYWNlKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJy8nKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZ2l0X2Vudih2b2lkKQoreworCWdpdF9kaXIgPSBnZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJZ2l0X2RpciA9IGdpdF9kaXIgPyB4c3RyZHVwKGdpdF9kaXIpIDogTlVMTDsKKwlpZiAoIWdpdF9kaXIpIHsKKwkJZ2l0X2RpciA9IHJlYWRfZ2l0ZmlsZShERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQpOworCQlnaXRfZGlyID0gZ2l0X2RpciA/IHhzdHJkdXAoZ2l0X2RpcikgOiBOVUxMOworCX0KKwlpZiAoIWdpdF9kaXIpCisJCWdpdF9kaXIgPSBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQ7CisJZ2l0X29iamVjdF9kaXIgPSBnZXRlbnYoREJfRU5WSVJPTk1FTlQpOworCWlmICghZ2l0X29iamVjdF9kaXIpIHsKKwkJZ2l0X29iamVjdF9kaXIgPSB4bWFsbG9jKHN0cmxlbihnaXRfZGlyKSArIDkpOworCQlzcHJpbnRmKGdpdF9vYmplY3RfZGlyLCAiJXMvb2JqZWN0cyIsIGdpdF9kaXIpOworCX0KKwlnaXRfaW5kZXhfZmlsZSA9IGdldGVudihJTkRFWF9FTlZJUk9OTUVOVCk7CisJaWYgKCFnaXRfaW5kZXhfZmlsZSkgeworCQlnaXRfaW5kZXhfZmlsZSA9IHhtYWxsb2Moc3RybGVuKGdpdF9kaXIpICsgNyk7CisJCXNwcmludGYoZ2l0X2luZGV4X2ZpbGUsICIlcy9pbmRleCIsIGdpdF9kaXIpOworCX0KKwlnaXRfZ3JhZnRfZmlsZSA9IGdldGVudihHUkFGVF9FTlZJUk9OTUVOVCk7CisJaWYgKCFnaXRfZ3JhZnRfZmlsZSkKKwkJZ2l0X2dyYWZ0X2ZpbGUgPSBnaXRfcGF0aGR1cCgiaW5mby9ncmFmdHMiKTsKKwlpZiAoZ2V0ZW52KE5PX1JFUExBQ0VfT0JKRUNUU19FTlZJUk9OTUVOVCkpCisJCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKKwluYW1lc3BhY2UgPSBleHBhbmRfbmFtZXNwYWNlKGdldGVudihHSVRfTkFNRVNQQUNFX0VOVklST05NRU5UKSk7CisJbmFtZXNwYWNlX2xlbiA9IHN0cmxlbihuYW1lc3BhY2UpOworfQorCitpbnQgaXNfYmFyZV9yZXBvc2l0b3J5KHZvaWQpCit7CisJLyogaWYgY29yZS5iYXJlIGlzIG5vdCAnZmFsc2UnLCBsZXQncyBzZWUgaWYgdGhlcmUgaXMgYSB3b3JrIHRyZWUgKi8KKwlyZXR1cm4gaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyAmJiAhZ2V0X2dpdF93b3JrX3RyZWUoKTsKK30KKworaW50IGhhdmVfZ2l0X2Rpcih2b2lkKQoreworCXJldHVybiAhIWdpdF9kaXI7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9naXRfZGlyKHZvaWQpCit7CisJaWYgKCFnaXRfZGlyKQorCQlzZXR1cF9naXRfZW52KCk7CisJcmV0dXJuIGdpdF9kaXI7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9naXRfbmFtZXNwYWNlKHZvaWQpCit7CisJaWYgKCFuYW1lc3BhY2UpCisJCXNldHVwX2dpdF9lbnYoKTsKKwlyZXR1cm4gbmFtZXNwYWNlOworfQorCitjb25zdCBjaGFyICpzdHJpcF9uYW1lc3BhY2UoY29uc3QgY2hhciAqbmFtZXNwYWNlZF9yZWYpCit7CisJaWYgKHByZWZpeGNtcChuYW1lc3BhY2VkX3JlZiwgZ2V0X2dpdF9uYW1lc3BhY2UoKSkgIT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIG5hbWVzcGFjZWRfcmVmICsgbmFtZXNwYWNlX2xlbjsKK30KKworc3RhdGljIGludCBnaXRfd29ya190cmVlX2luaXRpYWxpemVkOworCisvKgorICogTm90ZS4gIFRoaXMgd29ya3Mgb25seSBiZWZvcmUgeW91IHVzZWQgYSB3b3JrIHRyZWUuICBUaGlzIHdhcyBhZGRlZAorICogcHJpbWFyaWx5IHRvIHN1cHBvcnQgZ2l0LWNsb25lIHRvIHdvcmsgaW4gYSBuZXcgcmVwb3NpdG9yeSBpdCBqdXN0CisgKiBjcmVhdGVkLCBhbmQgaXMgbm90IG1lYW50IHRvIGZsaXAgYmV0d2VlbiBkaWZmZXJlbnQgd29yayB0cmVlcy4KKyAqLwordm9pZCBzZXRfZ2l0X3dvcmtfdHJlZShjb25zdCBjaGFyICpuZXdfd29ya190cmVlKQoreworCWlmIChnaXRfd29ya190cmVlX2luaXRpYWxpemVkKSB7CisJCW5ld193b3JrX3RyZWUgPSByZWFsX3BhdGgobmV3X3dvcmtfdHJlZSk7CisJCWlmIChzdHJjbXAobmV3X3dvcmtfdHJlZSwgd29ya190cmVlKSkKKwkJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IHdvcmsgdHJlZSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIgorCQkJICAgICJDdXJyZW50IHdvcmt0cmVlOiAlc1xuTmV3IHdvcmt0cmVlOiAlcyIsCisJCQkgICAgd29ya190cmVlLCBuZXdfd29ya190cmVlKTsKKwkJcmV0dXJuOworCX0KKwlnaXRfd29ya190cmVlX2luaXRpYWxpemVkID0gMTsKKwl3b3JrX3RyZWUgPSB4c3RyZHVwKHJlYWxfcGF0aChuZXdfd29ya190cmVlKSk7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9naXRfd29ya190cmVlKHZvaWQpCit7CisJcmV0dXJuIHdvcmtfdHJlZTsKK30KKworY2hhciAqZ2V0X29iamVjdF9kaXJlY3Rvcnkodm9pZCkKK3sKKwlpZiAoIWdpdF9vYmplY3RfZGlyKQorCQlzZXR1cF9naXRfZW52KCk7CisJcmV0dXJuIGdpdF9vYmplY3RfZGlyOworfQorCitpbnQgb2RiX21rc3RlbXAoY2hhciAqdGVtcGxhdGUsIHNpemVfdCBsaW1pdCwgY29uc3QgY2hhciAqcGF0dGVybikKK3sKKwlpbnQgZmQ7CisJLyoKKwkgKiB3ZSBsZXQgdGhlIHVtYXNrIGRvIGl0cyBqb2IsIGRvbid0IHRyeSB0byBiZSBtb3JlCisJICogcmVzdHJpY3RpdmUgZXhjZXB0IHRvIHJlbW92ZSB3cml0ZSBwZXJtaXNzaW9uLgorCSAqLworCWludCBtb2RlID0gMDQ0NDsKKwlzbnByaW50Zih0ZW1wbGF0ZSwgbGltaXQsICIlcy8lcyIsCisJCSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBwYXR0ZXJuKTsKKwlmZCA9IGdpdF9ta3N0ZW1wX21vZGUodGVtcGxhdGUsIG1vZGUpOworCWlmICgwIDw9IGZkKQorCQlyZXR1cm4gZmQ7CisKKwkvKiBzbG93IHBhdGggKi8KKwkvKiBzb21lIG1rc3RlbXAgaW1wbGVtZW50YXRpb25zIGVyYXNlIHRlbXBsYXRlIG9uIGZhaWx1cmUgKi8KKwlzbnByaW50Zih0ZW1wbGF0ZSwgbGltaXQsICIlcy8lcyIsCisJCSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBwYXR0ZXJuKTsKKwlzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHRlbXBsYXRlKTsKKwlyZXR1cm4geG1rc3RlbXBfbW9kZSh0ZW1wbGF0ZSwgbW9kZSk7Cit9CisKK2ludCBvZGJfcGFja19rZWVwKGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lc3osIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IGZkOworCisJc25wcmludGYobmFtZSwgbmFtZXN6LCAiJXMvcGFjay9wYWNrLSVzLmtlZXAiLAorCQkgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgc2hhMV90b19oZXgoc2hhMSkpOworCWZkID0gb3BlbihuYW1lLCBPX1JEV1J8T19DUkVBVHxPX0VYQ0wsIDA2MDApOworCWlmICgwIDw9IGZkKQorCQlyZXR1cm4gZmQ7CisKKwkvKiBzbG93IHBhdGggKi8KKwlzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKG5hbWUpOworCXJldHVybiBvcGVuKG5hbWUsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTCwgMDYwMCk7Cit9CisKK2NoYXIgKmdldF9pbmRleF9maWxlKHZvaWQpCit7CisJaWYgKCFnaXRfaW5kZXhfZmlsZSkKKwkJc2V0dXBfZ2l0X2VudigpOworCXJldHVybiBnaXRfaW5kZXhfZmlsZTsKK30KKworY2hhciAqZ2V0X2dyYWZ0X2ZpbGUodm9pZCkKK3sKKwlpZiAoIWdpdF9ncmFmdF9maWxlKQorCQlzZXR1cF9naXRfZW52KCk7CisJcmV0dXJuIGdpdF9ncmFmdF9maWxlOworfQorCitpbnQgc2V0X2dpdF9kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoc2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQsIHBhdGgsIDEpKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBzZXQgR0lUX0RJUiB0byAnJXMnIiwgcGF0aCk7CisJc2V0dXBfZ2l0X2VudigpOworCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICpnZXRfbG9nX291dHB1dF9lbmNvZGluZyh2b2lkKQoreworCXJldHVybiBnaXRfbG9nX291dHB1dF9lbmNvZGluZyA/IGdpdF9sb2dfb3V0cHV0X2VuY29kaW5nCisJCTogZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKK30KKworY29uc3QgY2hhciAqZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2Rpbmcodm9pZCkKK3sKKwlyZXR1cm4gZ2l0X2NvbW1pdF9lbmNvZGluZyA/IGdpdF9jb21taXRfZW5jb2RpbmcgOiAiVVRGLTgiOworfQpkaWZmIC0tZ2l0IGEvZXhlY19jbWQuYyBiL2V4ZWNfY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1ZmE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2V4ZWNfY21kLmMKQEAgLTAsMCArMSwxNjcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNkZWZpbmUgTUFYX0FSR1MJMzIKKworc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZfZXhlY19wYXRoOworc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3YwX3BhdGg7CisKK2NvbnN0IGNoYXIgKnN5c3RlbV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisjaWZkZWYgUlVOVElNRV9QUkVGSVgKKwlzdGF0aWMgY29uc3QgY2hhciAqcHJlZml4OworI2Vsc2UKKwlzdGF0aWMgY29uc3QgY2hhciAqcHJlZml4ID0gUFJFRklYOworI2VuZGlmCisJc3RydWN0IHN0cmJ1ZiBkID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkKKwkJcmV0dXJuIHBhdGg7CisKKyNpZmRlZiBSVU5USU1FX1BSRUZJWAorCWFzc2VydChhcmd2MF9wYXRoKTsKKwlhc3NlcnQoaXNfYWJzb2x1dGVfcGF0aChhcmd2MF9wYXRoKSk7CisKKwlpZiAoIXByZWZpeCAmJgorCSAgICAhKHByZWZpeCA9IHN0cmlwX3BhdGhfc3VmZml4KGFyZ3YwX3BhdGgsIEdJVF9FWEVDX1BBVEgpKSAmJgorCSAgICAhKHByZWZpeCA9IHN0cmlwX3BhdGhfc3VmZml4KGFyZ3YwX3BhdGgsIEJJTkRJUikpICYmCisJICAgICEocHJlZml4ID0gc3RyaXBfcGF0aF9zdWZmaXgoYXJndjBfcGF0aCwgImdpdCIpKSkgeworCQlwcmVmaXggPSBQUkVGSVg7CisJCXRyYWNlX3ByaW50ZigiUlVOVElNRV9QUkVGSVggcmVxdWVzdGVkLCAiCisJCQkJImJ1dCBwcmVmaXggY29tcHV0YXRpb24gZmFpbGVkLiAgIgorCQkJCSJVc2luZyBzdGF0aWMgZmFsbGJhY2sgJyVzJy5cbiIsIHByZWZpeCk7CisJfQorI2VuZGlmCisKKwlzdHJidWZfYWRkZigmZCwgIiVzLyVzIiwgcHJlZml4LCBwYXRoKTsKKwlwYXRoID0gc3RyYnVmX2RldGFjaCgmZCwgTlVMTCk7CisJcmV0dXJuIHBhdGg7Cit9CisKK2NvbnN0IGNoYXIgKmdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoY29uc3QgY2hhciAqYXJndjApCit7CisJY29uc3QgY2hhciAqc2xhc2g7CisKKwlpZiAoIWFyZ3YwIHx8ICEqYXJndjApCisJCXJldHVybiBOVUxMOworCXNsYXNoID0gYXJndjAgKyBzdHJsZW4oYXJndjApOworCisJd2hpbGUgKGFyZ3YwIDw9IHNsYXNoICYmICFpc19kaXJfc2VwKCpzbGFzaCkpCisJCXNsYXNoLS07CisKKwlpZiAoc2xhc2ggPj0gYXJndjApIHsKKwkJYXJndjBfcGF0aCA9IHhzdHJuZHVwKGFyZ3YwLCBzbGFzaCAtIGFyZ3YwKTsKKwkJcmV0dXJuIHNsYXNoICsgMTsKKwl9CisKKwlyZXR1cm4gYXJndjA7Cit9CisKK3ZvaWQgZ2l0X3NldF9hcmd2X2V4ZWNfcGF0aChjb25zdCBjaGFyICpleGVjX3BhdGgpCit7CisJYXJndl9leGVjX3BhdGggPSBleGVjX3BhdGg7CisJLyoKKwkgKiBQcm9wYWdhdGUgdGhpcyBzZXR0aW5nIHRvIGV4dGVybmFsIHByb2dyYW1zLgorCSAqLworCXNldGVudihFWEVDX1BBVEhfRU5WSVJPTk1FTlQsIGV4ZWNfcGF0aCwgMSk7Cit9CisKKworLyogUmV0dXJucyB0aGUgaGlnaGVzdC1wcmlvcml0eSwgbG9jYXRpb24gdG8gbG9vayBmb3IgZ2l0IHByb2dyYW1zLiAqLworY29uc3QgY2hhciAqZ2l0X2V4ZWNfcGF0aCh2b2lkKQoreworCWNvbnN0IGNoYXIgKmVudjsKKworCWlmIChhcmd2X2V4ZWNfcGF0aCkKKwkJcmV0dXJuIGFyZ3ZfZXhlY19wYXRoOworCisJZW52ID0gZ2V0ZW52KEVYRUNfUEFUSF9FTlZJUk9OTUVOVCk7CisJaWYgKGVudiAmJiAqZW52KSB7CisJCXJldHVybiBlbnY7CisJfQorCisJcmV0dXJuIHN5c3RlbV9wYXRoKEdJVF9FWEVDX1BBVEgpOworfQorCitzdGF0aWMgdm9pZCBhZGRfcGF0aChzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKHBhdGggJiYgKnBhdGgpIHsKKwkJaWYgKGlzX2Fic29sdXRlX3BhdGgocGF0aCkpCisJCQlzdHJidWZfYWRkc3RyKG91dCwgcGF0aCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBhYnNvbHV0ZV9wYXRoKHBhdGgpKTsKKworCQlzdHJidWZfYWRkY2gob3V0LCBQQVRIX1NFUCk7CisJfQorfQorCit2b2lkIHNldHVwX3BhdGgodm9pZCkKK3sKKwljb25zdCBjaGFyICpvbGRfcGF0aCA9IGdldGVudigiUEFUSCIpOworCXN0cnVjdCBzdHJidWYgbmV3X3BhdGggPSBTVFJCVUZfSU5JVDsKKworCWFkZF9wYXRoKCZuZXdfcGF0aCwgZ2l0X2V4ZWNfcGF0aCgpKTsKKwlhZGRfcGF0aCgmbmV3X3BhdGgsIGFyZ3YwX3BhdGgpOworCisJaWYgKG9sZF9wYXRoKQorCQlzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgb2xkX3BhdGgpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cigmbmV3X3BhdGgsIF9QQVRIX0RFRlBBVEgpOworCisJc2V0ZW52KCJQQVRIIiwgbmV3X3BhdGguYnVmLCAxKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdfcGF0aCk7Cit9CisKK2NvbnN0IGNoYXIgKipwcmVwYXJlX2dpdF9jbWQoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGFyZ2M7CisJY29uc3QgY2hhciAqKm5hcmd2OworCisJZm9yIChhcmdjID0gMDsgYXJndlthcmdjXTsgYXJnYysrKQorCQk7IC8qIGp1c3QgY291bnRpbmcgKi8KKwluYXJndiA9IHhtYWxsb2Moc2l6ZW9mKCpuYXJndikgKiAoYXJnYyArIDIpKTsKKworCW5hcmd2WzBdID0gImdpdCI7CisJZm9yIChhcmdjID0gMDsgYXJndlthcmdjXTsgYXJnYysrKQorCQluYXJndlthcmdjICsgMV0gPSBhcmd2W2FyZ2NdOworCW5hcmd2W2FyZ2MgKyAxXSA9IE5VTEw7CisJcmV0dXJuIG5hcmd2OworfQorCitpbnQgZXhlY3ZfZ2l0X2NtZChjb25zdCBjaGFyICoqYXJndikgeworCWNvbnN0IGNoYXIgKipuYXJndiA9IHByZXBhcmVfZ2l0X2NtZChhcmd2KTsKKwl0cmFjZV9hcmd2X3ByaW50ZihuYXJndiwgInRyYWNlOiBleGVjOiIpOworCisJLyogZXhlY3ZwKCkgY2FuIG9ubHkgZXZlciByZXR1cm4gaWYgaXQgZmFpbHMgKi8KKwlzYW5lX2V4ZWN2cCgiZ2l0IiwgKGNoYXIgKiopbmFyZ3YpOworCisJdHJhY2VfcHJpbnRmKCJ0cmFjZTogZXhlYyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCisJZnJlZShuYXJndik7CisJcmV0dXJuIC0xOworfQorCisKK2ludCBleGVjbF9naXRfY21kKGNvbnN0IGNoYXIgKmNtZCwuLi4pCit7CisJaW50IGFyZ2M7CisJY29uc3QgY2hhciAqYXJndltNQVhfQVJHUyArIDFdOworCWNvbnN0IGNoYXIgKmFyZzsKKwl2YV9saXN0IHBhcmFtOworCisJdmFfc3RhcnQocGFyYW0sIGNtZCk7CisJYXJndlswXSA9IGNtZDsKKwlhcmdjID0gMTsKKwl3aGlsZSAoYXJnYyA8IE1BWF9BUkdTKSB7CisJCWFyZyA9IGFyZ3ZbYXJnYysrXSA9IHZhX2FyZyhwYXJhbSwgY2hhciAqKTsKKwkJaWYgKCFhcmcpCisJCQlicmVhazsKKwl9CisJdmFfZW5kKHBhcmFtKTsKKwlpZiAoTUFYX0FSR1MgPD0gYXJnYykKKwkJcmV0dXJuIGVycm9yKCJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIsIGNtZCk7CisKKwlhcmd2W2FyZ2NdID0gTlVMTDsKKwlyZXR1cm4gZXhlY3ZfZ2l0X2NtZChhcmd2KTsKK30KZGlmZiAtLWdpdCBhL2V4ZWNfY21kLmggYi9leGVjX2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjU0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9leGVjX2NtZC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgR0lUX0VYRUNfQ01EX0gKKyNkZWZpbmUgR0lUX0VYRUNfQ01EX0gKKworZXh0ZXJuIHZvaWQgZ2l0X3NldF9hcmd2X2V4ZWNfcGF0aChjb25zdCBjaGFyICpleGVjX3BhdGgpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2V4ZWNfcGF0aCh2b2lkKTsKK2V4dGVybiB2b2lkIHNldHVwX3BhdGgodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqKnByZXBhcmVfZ2l0X2NtZChjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gaW50IGV4ZWN2X2dpdF9jbWQoY29uc3QgY2hhciAqKmFyZ3YpOyAvKiBOVUxMIHRlcm1pbmF0ZWQgKi8KK2V4dGVybiBpbnQgZXhlY2xfZ2l0X2NtZChjb25zdCBjaGFyICpjbWQsIC4uLik7CitleHRlcm4gY29uc3QgY2hhciAqc3lzdGVtX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CisKKyNlbmRpZiAvKiBHSVRfRVhFQ19DTURfSCAqLwpkaWZmIC0tZ2l0IGEvZmFzdC1pbXBvcnQuYyBiL2Zhc3QtaW1wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhODE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2Zhc3QtaW1wb3J0LmMKQEAgLTAsMCArMSwzNDYxIEBACisvKgorKFNlZSBEb2N1bWVudGF0aW9uL2dpdC1mYXN0LWltcG9ydC50eHQgZm9yIG1haW50YWluZWQgZG9jdW1lbnRhdGlvbi4pCitGb3JtYXQgb2YgU1RESU4gc3RyZWFtOgorCisgIHN0cmVhbSA6Oj0gY21kKjsKKworICBjbWQgOjo9IG5ld19ibG9iCisgICAgICAgIHwgbmV3X2NvbW1pdAorICAgICAgICB8IG5ld190YWcKKyAgICAgICAgfCByZXNldF9icmFuY2gKKyAgICAgICAgfCBjaGVja3BvaW50CisgICAgICAgIHwgcHJvZ3Jlc3MKKyAgICAgICAgOworCisgIG5ld19ibG9iIDo6PSAnYmxvYicgbGYKKyAgICBtYXJrPworICAgIGZpbGVfY29udGVudDsKKyAgZmlsZV9jb250ZW50IDo6PSBkYXRhOworCisgIG5ld19jb21taXQgOjo9ICdjb21taXQnIHNwIHJlZl9zdHIgbGYKKyAgICBtYXJrPworICAgICgnYXV0aG9yJyAoc3AgbmFtZSk/IHNwICc8JyBlbWFpbCAnPicgc3Agd2hlbiBsZik/CisgICAgJ2NvbW1pdHRlcicgKHNwIG5hbWUpPyBzcCAnPCcgZW1haWwgJz4nIHNwIHdoZW4gbGYKKyAgICBjb21taXRfbXNnCisgICAgKCdmcm9tJyBzcCBjb21taXR0aXNoIGxmKT8KKyAgICAoJ21lcmdlJyBzcCBjb21taXR0aXNoIGxmKSoKKyAgICAoZmlsZV9jaGFuZ2UgfCBscykqCisgICAgbGY/OworICBjb21taXRfbXNnIDo6PSBkYXRhOworCisgIGxzIDo6PSAnbHMnIHNwICciJyBxdW90ZWQocGF0aCkgJyInIGxmOworCisgIGZpbGVfY2hhbmdlIDo6PSBmaWxlX2NscgorICAgIHwgZmlsZV9kZWwKKyAgICB8IGZpbGVfcm5tCisgICAgfCBmaWxlX2NweQorICAgIHwgZmlsZV9vYm0KKyAgICB8IGZpbGVfaW5tOworICBmaWxlX2NsciA6Oj0gJ2RlbGV0ZWFsbCcgbGY7CisgIGZpbGVfZGVsIDo6PSAnRCcgc3AgcGF0aF9zdHIgbGY7CisgIGZpbGVfcm5tIDo6PSAnUicgc3AgcGF0aF9zdHIgc3AgcGF0aF9zdHIgbGY7CisgIGZpbGVfY3B5IDo6PSAnQycgc3AgcGF0aF9zdHIgc3AgcGF0aF9zdHIgbGY7CisgIGZpbGVfb2JtIDo6PSAnTScgc3AgbW9kZSBzcCAoaGV4c2hhMSB8IGlkbnVtKSBzcCBwYXRoX3N0ciBsZjsKKyAgZmlsZV9pbm0gOjo9ICdNJyBzcCBtb2RlIHNwICdpbmxpbmUnIHNwIHBhdGhfc3RyIGxmCisgICAgZGF0YTsKKyAgbm90ZV9vYm0gOjo9ICdOJyBzcCAoaGV4c2hhMSB8IGlkbnVtKSBzcCBjb21taXR0aXNoIGxmOworICBub3RlX2lubSA6Oj0gJ04nIHNwICdpbmxpbmUnIHNwIGNvbW1pdHRpc2ggbGYKKyAgICBkYXRhOworCisgIG5ld190YWcgOjo9ICd0YWcnIHNwIHRhZ19zdHIgbGYKKyAgICAnZnJvbScgc3AgY29tbWl0dGlzaCBsZgorICAgICgndGFnZ2VyJyAoc3AgbmFtZSk/IHNwICc8JyBlbWFpbCAnPicgc3Agd2hlbiBsZik/CisgICAgdGFnX21zZzsKKyAgdGFnX21zZyA6Oj0gZGF0YTsKKworICByZXNldF9icmFuY2ggOjo9ICdyZXNldCcgc3AgcmVmX3N0ciBsZgorICAgICgnZnJvbScgc3AgY29tbWl0dGlzaCBsZik/CisgICAgbGY/OworCisgIGNoZWNrcG9pbnQgOjo9ICdjaGVja3BvaW50JyBsZgorICAgIGxmPzsKKworICBwcm9ncmVzcyA6Oj0gJ3Byb2dyZXNzJyBzcCBub3RfbGYqIGxmCisgICAgbGY/OworCisgICAgICMgbm90ZTogdGhlIGZpcnN0IGlkbnVtIGluIGEgc3RyZWFtIHNob3VsZCBiZSAxIGFuZCBzdWJzZXF1ZW50CisgICAgICMgaWRudW1zIHNob3VsZCBub3QgaGF2ZSBnYXBzIGJldHdlZW4gdmFsdWVzIGFzIHRoaXMgd2lsbCBjYXVzZQorICAgICAjIHRoZSBzdHJlYW0gcGFyc2VyIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBnYXBwZWQgdmFsdWVzLiAgQW4KKyAgICAgIyBpZG51bSBjYW4gYmUgdXBkYXRlZCBpbiB0aGUgZnV0dXJlIHRvIGEgbmV3IG9iamVjdCBieSBpc3N1aW5nCisgICAgICMgYSBuZXcgbWFyayBkaXJlY3RpdmUgd2l0aCB0aGUgb2xkIGlkbnVtLgorICAgICAjCisgIG1hcmsgOjo9ICdtYXJrJyBzcCBpZG51bSBsZjsKKyAgZGF0YSA6Oj0gKGRlbGltaXRlZF9kYXRhIHwgZXhhY3RfZGF0YSkKKyAgICBsZj87CisKKyAgICAjIG5vdGU6IGRlbGltIG1heSBiZSBhbnkgc3RyaW5nIGJ1dCBtdXN0IG5vdCBjb250YWluIGxmLgorICAgICMgZGF0YV9saW5lIG1heSBjb250YWluIGFueSBkYXRhIGJ1dCBtdXN0IG5vdCBiZSBleGFjdGx5CisgICAgIyBkZWxpbS4KKyAgZGVsaW1pdGVkX2RhdGEgOjo9ICdkYXRhJyBzcCAnPDwnIGRlbGltIGxmCisgICAgKGRhdGFfbGluZSBsZikqCisgICAgZGVsaW0gbGY7CisKKyAgICAgIyBub3RlOiBkZWNsZW4gaW5kaWNhdGVzIHRoZSBsZW5ndGggb2YgYmluYXJ5X2RhdGEgaW4gYnl0ZXMuCisgICAgICMgZGVjbGVuIGRvZXMgbm90IGluY2x1ZGUgdGhlIGxmIHByZWNlZGluZyB0aGUgYmluYXJ5IGRhdGEuCisgICAgICMKKyAgZXhhY3RfZGF0YSA6Oj0gJ2RhdGEnIHNwIGRlY2xlbiBsZgorICAgIGJpbmFyeV9kYXRhOworCisgICAgICMgbm90ZTogcXVvdGVkIHN0cmluZ3MgYXJlIEMtc3R5bGUgcXVvdGluZyBzdXBwb3J0aW5nIFxjIGZvcgorICAgICAjIGNvbW1vbiBlc2NhcGVzIG9mICdjJyAoZS4uZyBcbiwgXHQsIFxcLCBcIikgb3IgXG5ubiB3aGVyZSBubm4KKyAgICAgIyBpcyB0aGUgc2lnbmVkIGJ5dGUgdmFsdWUgaW4gb2N0YWwuICBOb3RlIHRoYXQgdGhlIG9ubHkKKyAgICAgIyBjaGFyYWN0ZXJzIHdoaWNoIG11c3QgYWN0dWFsbHkgYmUgZXNjYXBlZCB0byBwcm90ZWN0IHRoZQorICAgICAjIHN0cmVhbSBmb3JtYXR0aW5nIGlzOiBcLCAiIGFuZCBMRi4gIE90aGVyd2lzZSB0aGVzZSB2YWx1ZXMKKyAgICAgIyBhcmUgVVRGOC4KKyAgICAgIworICBjb21taXR0aXNoICA6Oj0gKHJlZl9zdHIgfCBoZXhzaGExIHwgc2hhMWV4cF9zdHIgfCBpZG51bSk7CisgIHJlZl9zdHIgICAgIDo6PSByZWY7CisgIHNoYTFleHBfc3RyIDo6PSBzaGExZXhwOworICB0YWdfc3RyICAgICA6Oj0gdGFnOworICBwYXRoX3N0ciAgICA6Oj0gcGF0aCAgICB8ICciJyBxdW90ZWQocGF0aCkgICAgJyInIDsKKyAgbW9kZSAgICAgICAgOjo9ICcxMDA2NDQnIHwgJzY0NCcKKyAgICAgICAgICAgICAgICB8ICcxMDA3NTUnIHwgJzc1NScKKyAgICAgICAgICAgICAgICB8ICcxMjAwMDAnCisgICAgICAgICAgICAgICAgOworCisgIGRlY2xlbiA6Oj0gIyB1bnNpZ25lZCAzMiBiaXQgdmFsdWUsIGFzY2lpIGJhc2UxMCBub3RhdGlvbjsKKyAgYmlnaW50IDo6PSAjIHVuc2lnbmVkIGludGVnZXIgdmFsdWUsIGFzY2lpIGJhc2UxMCBub3RhdGlvbjsKKyAgYmluYXJ5X2RhdGEgOjo9ICMgZmlsZSBjb250ZW50LCBub3QgaW50ZXJwcmV0ZWQ7CisKKyAgd2hlbiAgICAgICAgIDo6PSByYXdfd2hlbiB8IHJmYzI4MjJfd2hlbjsKKyAgcmF3X3doZW4gICAgIDo6PSB0cyBzcCB0ejsKKyAgcmZjMjgyMl93aGVuIDo6PSAjIFZhbGlkIFJGQyAyODIyIGRhdGUgYW5kIHRpbWU7CisKKyAgc3AgOjo9ICMgQVNDSUkgc3BhY2UgY2hhcmFjdGVyOworICBsZiA6Oj0gIyBBU0NJSSBuZXdsaW5lIChMRikgY2hhcmFjdGVyOworCisgICAgICMgbm90ZTogYSBjb2xvbiAoJzonKSBtdXN0IHByZWNlZGUgdGhlIG51bWVyaWNhbCB2YWx1ZSBhc3NpZ25lZCB0bworICAgICAjIGFuIGlkbnVtLiAgVGhpcyBpcyB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIGEgcmVmIG9yIHRhZyBuYW1lIGFzCisgICAgICMgR0lUIGRvZXMgbm90IHBlcm1pdCAnOicgaW4gcmVmIG9yIHRhZyBzdHJpbmdzLgorICAgICAjCisgIGlkbnVtICAgOjo9ICc6JyBiaWdpbnQ7CisgIHBhdGggICAgOjo9ICMgR0lUIHN0eWxlIGZpbGUgcGF0aCwgZS5nLiAiYS9iL2MiOworICByZWYgICAgIDo6PSAjIEdJVCByZWYgbmFtZSwgZS5nLiAicmVmcy9oZWFkcy9NT1pfR0VDS09fRVhQRVJJTUVOVCI7CisgIHRhZyAgICAgOjo9ICMgR0lUIHRhZyBuYW1lLCBlLmcuICJGSVJFRk9YXzFfNSI7CisgIHNoYTFleHAgOjo9ICMgQW55IHZhbGlkIEdJVCBTSEExIGV4cHJlc3Npb247CisgIGhleHNoYTEgOjo9ICMgU0hBMSBpbiBoZXhhZGVjaW1hbCBmb3JtYXQ7CisKKyAgICAgIyBub3RlOiBuYW1lIGFuZCBlbWFpbCBhcmUgVVRGOCBzdHJpbmdzLCBob3dldmVyIG5hbWUgbXVzdCBub3QKKyAgICAgIyBjb250YWluICc8JyBvciBsZiBhbmQgZW1haWwgbXVzdCBub3QgY29udGFpbiBhbnkgb2YgdGhlCisgICAgICMgZm9sbG93aW5nOiAnPCcsICc+JywgbGYuCisgICAgICMKKyAgbmFtZSAgOjo9ICMgdmFsaWQgR0lUIGF1dGhvci9jb21taXR0ZXIgbmFtZTsKKyAgZW1haWwgOjo9ICMgdmFsaWQgR0lUIGF1dGhvci9jb21taXR0ZXIgZW1haWw7CisgIHRzICAgIDo6PSAjIHRpbWUgc2luY2UgdGhlIGVwb2NoIGluIHNlY29uZHMsIGFzY2lpIGJhc2UxMCBub3RhdGlvbjsKKyAgdHogICAgOjo9ICMgR0lUIHN0eWxlIHRpbWV6b25lOworCisgICAgICMgbm90ZTogY29tbWVudHMsIGxzIGFuZCBjYXQgcmVxdWVzdHMgbWF5IGFwcGVhciBhbnl3aGVyZQorICAgICAjIGluIHRoZSBpbnB1dCwgZXhjZXB0IHdpdGhpbiBhIGRhdGEgY29tbWFuZC4gIEFueSBmb3JtCisgICAgICMgb2YgdGhlIGRhdGEgY29tbWFuZCBhbHdheXMgZXNjYXBlcyB0aGUgcmVsYXRlZCBpbnB1dAorICAgICAjIGZyb20gY29tbWVudCBwcm9jZXNzaW5nLgorICAgICAjCisgICAgICMgSW4gY2FzZSBpdCBpcyBub3QgY2xlYXIsIHRoZSAnIycgdGhhdCBzdGFydHMgdGhlIGNvbW1lbnQKKyAgICAgIyBtdXN0IGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gdGhhdCBsaW5lIChhbiBsZgorICAgICAjIHByZWNlZGVkIGl0KS4KKyAgICAgIworCisgIGNhdF9ibG9iIDo6PSAnY2F0LWJsb2InIHNwIChoZXhzaGExIHwgaWRudW0pIGxmOworICBsc190cmVlICA6Oj0gJ2xzJyBzcCAoaGV4c2hhMSB8IGlkbnVtKSBzcCBwYXRoX3N0ciBsZjsKKworICBjb21tZW50IDo6PSAnIycgbm90X2xmKiBsZjsKKyAgbm90X2xmICA6Oj0gIyBBbnkgYnl0ZSB0aGF0IGlzIG5vdCBBU0NJSSBuZXdsaW5lIChMRik7CisqLworCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY3N1bS1maWxlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgImRpci5oIgorCisjZGVmaW5lIFBBQ0tfSURfQklUUyAxNgorI2RlZmluZSBNQVhfUEFDS19JRCAoKDE8PFBBQ0tfSURfQklUUyktMSkKKyNkZWZpbmUgREVQVEhfQklUUyAxMworI2RlZmluZSBNQVhfREVQVEggKCgxPDxERVBUSF9CSVRTKS0xKQorCisvKgorICogV2UgYWJ1c2UgdGhlIHNldHVpZCBiaXQgb24gZGlyZWN0b3JpZXMgdG8gbWVhbiAiZG8gbm90IGRlbHRhIi4KKyAqLworI2RlZmluZSBOT19ERUxUQSBTX0lTVUlECisKK3N0cnVjdCBvYmplY3RfZW50cnkgeworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSBpZHg7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqbmV4dDsKKwl1aW50MzJfdCB0eXBlIDogVFlQRV9CSVRTLAorCQlwYWNrX2lkIDogUEFDS19JRF9CSVRTLAorCQlkZXB0aCA6IERFUFRIX0JJVFM7Cit9OworCitzdHJ1Y3Qgb2JqZWN0X2VudHJ5X3Bvb2wgeworCXN0cnVjdCBvYmplY3RfZW50cnlfcG9vbCAqbmV4dF9wb29sOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm5leHRfZnJlZTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbmQ7CisJc3RydWN0IG9iamVjdF9lbnRyeSBlbnRyaWVzW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdHJ1Y3QgbWFya19zZXQgeworCXVuaW9uIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqbWFya2VkWzEwMjRdOworCQlzdHJ1Y3QgbWFya19zZXQgKnNldHNbMTAyNF07CisJfSBkYXRhOworCXVuc2lnbmVkIGludCBzaGlmdDsKK307CisKK3N0cnVjdCBsYXN0X29iamVjdCB7CisJc3RydWN0IHN0cmJ1ZiBkYXRhOworCW9mZl90IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgZGVwdGg7CisJdW5zaWduZWQgbm9fc3dhcCA6IDE7Cit9OworCitzdHJ1Y3QgbWVtX3Bvb2wgeworCXN0cnVjdCBtZW1fcG9vbCAqbmV4dF9wb29sOworCWNoYXIgKm5leHRfZnJlZTsKKwljaGFyICplbmQ7CisJdWludG1heF90IHNwYWNlW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdHJ1Y3QgYXRvbV9zdHIgeworCXN0cnVjdCBhdG9tX3N0ciAqbmV4dF9hdG9tOworCXVuc2lnbmVkIHNob3J0IHN0cl9sZW47CisJY2hhciBzdHJfZGF0W0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdHJ1Y3QgdHJlZV9jb250ZW50Oworc3RydWN0IHRyZWVfZW50cnkgeworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnRyZWU7CisJc3RydWN0IGF0b21fc3RyICpuYW1lOworCXN0cnVjdCB0cmVlX2VudHJ5X21zIHsKKwkJdWludDE2X3QgbW9kZTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl9IHZlcnNpb25zWzJdOworfTsKKworc3RydWN0IHRyZWVfY29udGVudCB7CisJdW5zaWduZWQgaW50IGVudHJ5X2NhcGFjaXR5OyAvKiBtdXN0IG1hdGNoIGF2YWlsX3RyZWVfY29udGVudCAqLworCXVuc2lnbmVkIGludCBlbnRyeV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgZGVsdGFfZGVwdGg7CisJc3RydWN0IHRyZWVfZW50cnkgKmVudHJpZXNbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKK3N0cnVjdCBhdmFpbF90cmVlX2NvbnRlbnQgeworCXVuc2lnbmVkIGludCBlbnRyeV9jYXBhY2l0eTsgLyogbXVzdCBtYXRjaCB0cmVlX2NvbnRlbnQgKi8KKwlzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50ICpuZXh0X2F2YWlsOworfTsKKworc3RydWN0IGJyYW5jaCB7CisJc3RydWN0IGJyYW5jaCAqdGFibGVfbmV4dF9icmFuY2g7CisJc3RydWN0IGJyYW5jaCAqYWN0aXZlX25leHRfYnJhbmNoOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHRyZWVfZW50cnkgYnJhbmNoX3RyZWU7CisJdWludG1heF90IGxhc3RfY29tbWl0OworCXVpbnRtYXhfdCBudW1fbm90ZXM7CisJdW5zaWduZWQgYWN0aXZlIDogMTsKKwl1bnNpZ25lZCBwYWNrX2lkIDogUEFDS19JRF9CSVRTOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Cit9OworCitzdHJ1Y3QgdGFnIHsKKwlzdHJ1Y3QgdGFnICpuZXh0X3RhZzsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBwYWNrX2lkOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Cit9OworCitzdHJ1Y3QgaGFzaF9saXN0IHsKKwlzdHJ1Y3QgaGFzaF9saXN0ICpuZXh0OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Cit9OworCit0eXBlZGVmIGVudW0geworCVdIRU5TUEVDX1JBVyA9IDEsCisJV0hFTlNQRUNfUkZDMjgyMiwKKwlXSEVOU1BFQ19OT1cKK30gd2hlbnNwZWNfdHlwZTsKKworc3RydWN0IHJlY2VudF9jb21tYW5kIHsKKwlzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgKnByZXY7CisJc3RydWN0IHJlY2VudF9jb21tYW5kICpuZXh0OworCWNoYXIgKmJ1ZjsKK307CisKKy8qIENvbmZpZ3VyZWQgbGltaXRzIG9uIG91dHB1dCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2RlcHRoID0gMTA7CitzdGF0aWMgb2ZmX3QgbWF4X3BhY2tzaXplOworc3RhdGljIGludCBmb3JjZV91cGRhdGU7CitzdGF0aWMgaW50IHBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CitzdGF0aWMgaW50IHBhY2tfY29tcHJlc3Npb25fc2VlbjsKKworLyogU3RhdHMgYW5kIG1pc2MuIGNvdW50ZXJzICovCitzdGF0aWMgdWludG1heF90IGFsbG9jX2NvdW50Oworc3RhdGljIHVpbnRtYXhfdCBtYXJrc19zZXRfY291bnQ7CitzdGF0aWMgdWludG1heF90IG9iamVjdF9jb3VudF9ieV90eXBlWzEgPDwgVFlQRV9CSVRTXTsKK3N0YXRpYyB1aW50bWF4X3QgZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbMSA8PCBUWVBFX0JJVFNdOworc3RhdGljIHVpbnRtYXhfdCBkZWx0YV9jb3VudF9ieV90eXBlWzEgPDwgVFlQRV9CSVRTXTsKK3N0YXRpYyB1aW50bWF4X3QgZGVsdGFfY291bnRfYXR0ZW1wdHNfYnlfdHlwZVsxIDw8IFRZUEVfQklUU107CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvYmplY3RfY291bnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBicmFuY2hfY291bnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBicmFuY2hfbG9hZF9jb3VudDsKK3N0YXRpYyBpbnQgZmFpbHVyZTsKK3N0YXRpYyBGSUxFICpwYWNrX2VkZ2VzOworc3RhdGljIHVuc2lnbmVkIGludCBzaG93X3N0YXRzID0gMTsKK3N0YXRpYyBpbnQgZ2xvYmFsX2FyZ2M7CitzdGF0aWMgY29uc3QgY2hhciAqKmdsb2JhbF9hcmd2OworCisvKiBNZW1vcnkgcG9vbHMgKi8KK3N0YXRpYyBzaXplX3QgbWVtX3Bvb2xfYWxsb2MgPSAyKjEwMjQqMTAyNCAtIHNpemVvZihzdHJ1Y3QgbWVtX3Bvb2wpOworc3RhdGljIHNpemVfdCB0b3RhbF9hbGxvY2Q7CitzdGF0aWMgc3RydWN0IG1lbV9wb29sICptZW1fcG9vbDsKKworLyogQXRvbSBtYW5hZ2VtZW50ICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0b21fdGFibGVfc3ogPSA0NDUxOworc3RhdGljIHVuc2lnbmVkIGludCBhdG9tX2NudDsKK3N0YXRpYyBzdHJ1Y3QgYXRvbV9zdHIgKiphdG9tX3RhYmxlOworCisvKiBUaGUgLnBhY2sgZmlsZSBiZWluZyBnZW5lcmF0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uIHBhY2tfaWR4X29wdHM7CitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfaWQ7CitzdGF0aWMgc3RydWN0IHNoYTFmaWxlICpwYWNrX2ZpbGU7CitzdGF0aWMgc3RydWN0IHBhY2tlZF9naXQgKnBhY2tfZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgcGFja2VkX2dpdCAqKmFsbF9wYWNrczsKK3N0YXRpYyBvZmZfdCBwYWNrX3NpemU7CisKKy8qIFRhYmxlIG9mIG9iamVjdHMgd2UndmUgd3JpdHRlbi4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2JqZWN0X2VudHJ5X2FsbG9jID0gNTAwMDsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5X3Bvb2wgKmJsb2NrczsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmplY3RfdGFibGVbMSA8PCAxNl07CitzdGF0aWMgc3RydWN0IG1hcmtfc2V0ICptYXJrczsKK3N0YXRpYyBjb25zdCBjaGFyICpleHBvcnRfbWFya3NfZmlsZTsKK3N0YXRpYyBjb25zdCBjaGFyICppbXBvcnRfbWFya3NfZmlsZTsKK3N0YXRpYyBpbnQgaW1wb3J0X21hcmtzX2ZpbGVfZnJvbV9zdHJlYW07CitzdGF0aWMgaW50IGltcG9ydF9tYXJrc19maWxlX2lnbm9yZV9taXNzaW5nOworc3RhdGljIGludCByZWxhdGl2ZV9tYXJrc19wYXRoczsKKworLyogT3VyIGxhc3QgYmxvYiAqLworc3RhdGljIHN0cnVjdCBsYXN0X29iamVjdCBsYXN0X2Jsb2IgPSB7IFNUUkJVRl9JTklULCAwLCAwLCAwIH07CisKKy8qIFRyZWUgbWFuYWdlbWVudCAqLworc3RhdGljIHVuc2lnbmVkIGludCB0cmVlX2VudHJ5X2FsbG9jID0gMTAwMDsKK3N0YXRpYyB2b2lkICphdmFpbF90cmVlX2VudHJ5Oworc3RhdGljIHVuc2lnbmVkIGludCBhdmFpbF90cmVlX3RhYmxlX3N6ID0gMTAwOworc3RhdGljIHN0cnVjdCBhdmFpbF90cmVlX2NvbnRlbnQgKiphdmFpbF90cmVlX3RhYmxlOworc3RhdGljIHN0cnVjdCBzdHJidWYgb2xkX3RyZWUgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG5ld190cmVlID0gU1RSQlVGX0lOSVQ7CisKKy8qIEJyYW5jaCBkYXRhICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfYWN0aXZlX2JyYW5jaGVzID0gNTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGN1cl9hY3RpdmVfYnJhbmNoZXM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBicmFuY2hfdGFibGVfc3ogPSAxMDM5Oworc3RhdGljIHN0cnVjdCBicmFuY2ggKipicmFuY2hfdGFibGU7CitzdGF0aWMgc3RydWN0IGJyYW5jaCAqYWN0aXZlX2JyYW5jaGVzOworCisvKiBUYWcgZGF0YSAqLworc3RhdGljIHN0cnVjdCB0YWcgKmZpcnN0X3RhZzsKK3N0YXRpYyBzdHJ1Y3QgdGFnICpsYXN0X3RhZzsKKworLyogSW5wdXQgc3RyZWFtIHBhcnNpbmcgKi8KK3N0YXRpYyB3aGVuc3BlY190eXBlIHdoZW5zcGVjID0gV0hFTlNQRUNfUkFXOworc3RhdGljIHN0cnVjdCBzdHJidWYgY29tbWFuZF9idWYgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBpbnQgdW5yZWFkX2NvbW1hbmRfYnVmOworc3RhdGljIHN0cnVjdCByZWNlbnRfY29tbWFuZCBjbWRfaGlzdCA9IHsmY21kX2hpc3QsICZjbWRfaGlzdCwgTlVMTH07CitzdGF0aWMgc3RydWN0IHJlY2VudF9jb21tYW5kICpjbWRfdGFpbCA9ICZjbWRfaGlzdDsKK3N0YXRpYyBzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgKnJjX2ZyZWU7CitzdGF0aWMgdW5zaWduZWQgaW50IGNtZF9zYXZlID0gMTAwOworc3RhdGljIHVpbnRtYXhfdCBuZXh0X21hcms7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBuZXdfZGF0YSA9IFNUUkJVRl9JTklUOworc3RhdGljIGludCBzZWVuX2RhdGFfY29tbWFuZDsKK3N0YXRpYyBpbnQgcmVxdWlyZV9leHBsaWNpdF90ZXJtaW5hdGlvbjsKKworLyogU2lnbmFsIGhhbmRsaW5nICovCitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGNoZWNrcG9pbnRfcmVxdWVzdGVkOworCisvKiBXaGVyZSB0byB3cml0ZSBvdXRwdXQgb2YgY2F0LWJsb2IgY29tbWFuZHMgKi8KK3N0YXRpYyBpbnQgY2F0X2Jsb2JfZmQgPSBTVERPVVRfRklMRU5POworCitzdGF0aWMgdm9pZCBwYXJzZV9hcmd2KHZvaWQpOworc3RhdGljIHZvaWQgcGFyc2VfY2F0X2Jsb2Iodm9pZCk7CitzdGF0aWMgdm9pZCBwYXJzZV9scyhzdHJ1Y3QgYnJhbmNoICpiKTsKKworc3RhdGljIHZvaWQgd3JpdGVfYnJhbmNoX3JlcG9ydChGSUxFICpycHQsIHN0cnVjdCBicmFuY2ggKmIpCit7CisJZnByaW50ZihycHQsICIlczpcbiIsIGItPm5hbWUpOworCisJZnByaW50ZihycHQsICIgIHN0YXR1cyAgICAgIDoiKTsKKwlpZiAoYi0+YWN0aXZlKQorCQlmcHV0cygiIGFjdGl2ZSIsIHJwdCk7CisJaWYgKGItPmJyYW5jaF90cmVlLnRyZWUpCisJCWZwdXRzKCIgbG9hZGVkIiwgcnB0KTsKKwlpZiAoaXNfbnVsbF9zaGExKGItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLnNoYTEpKQorCQlmcHV0cygiIGRpcnR5IiwgcnB0KTsKKwlmcHV0YygnXG4nLCBycHQpOworCisJZnByaW50ZihycHQsICIgIHRpcCBjb21taXQgIDogJXNcbiIsIHNoYTFfdG9faGV4KGItPnNoYTEpKTsKKwlmcHJpbnRmKHJwdCwgIiAgb2xkIHRyZWUgICAgOiAlc1xuIiwgc2hhMV90b19oZXgoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0uc2hhMSkpOworCWZwcmludGYocnB0LCAiICBjdXIgdHJlZSAgICA6ICVzXG4iLCBzaGExX3RvX2hleChiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5zaGExKSk7CisJZnByaW50ZihycHQsICIgIGNvbW1pdCBjbG9jazogJSIgUFJJdU1BWCAiXG4iLCBiLT5sYXN0X2NvbW1pdCk7CisKKwlmcHV0cygiICBsYXN0IHBhY2sgICA6ICIsIHJwdCk7CisJaWYgKGItPnBhY2tfaWQgPCBNQVhfUEFDS19JRCkKKwkJZnByaW50ZihycHQsICIldSIsIGItPnBhY2tfaWQpOworCWZwdXRjKCdcbicsIHJwdCk7CisKKwlmcHV0YygnXG4nLCBycHQpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX21hcmtzX2hlbHBlcihGSUxFICosIHVpbnRtYXhfdCwgc3RydWN0IG1hcmtfc2V0ICopOworCitzdGF0aWMgdm9pZCB3cml0ZV9jcmFzaF9yZXBvcnQoY29uc3QgY2hhciAqZXJyKQoreworCWNoYXIgKmxvYyA9IGdpdF9wYXRoKCJmYXN0X2ltcG9ydF9jcmFzaF8lIlBSSXVNQVgsICh1aW50bWF4X3QpIGdldHBpZCgpKTsKKwlGSUxFICpycHQgPSBmb3Blbihsb2MsICJ3Iik7CisJc3RydWN0IGJyYW5jaCAqYjsKKwl1bnNpZ25lZCBsb25nIGx1OworCXN0cnVjdCByZWNlbnRfY29tbWFuZCAqcmM7CisKKwlpZiAoIXJwdCkgeworCQllcnJvcigiY2FuJ3Qgd3JpdGUgY3Jhc2ggcmVwb3J0ICVzOiAlcyIsIGxvYywgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiZmFzdC1pbXBvcnQ6IGR1bXBpbmcgY3Jhc2ggcmVwb3J0IHRvICVzXG4iLCBsb2MpOworCisJZnByaW50ZihycHQsICJmYXN0LWltcG9ydCBjcmFzaCByZXBvcnQ6XG4iKTsKKwlmcHJpbnRmKHJwdCwgIiAgICBmYXN0LWltcG9ydCBwcm9jZXNzOiAlIlBSSXVNQVgiXG4iLCAodWludG1heF90KSBnZXRwaWQoKSk7CisJZnByaW50ZihycHQsICIgICAgcGFyZW50IHByb2Nlc3MgICAgIDogJSJQUkl1TUFYIlxuIiwgKHVpbnRtYXhfdCkgZ2V0cHBpZCgpKTsKKwlmcHJpbnRmKHJwdCwgIiAgICBhdCAlc1xuIiwgc2hvd19kYXRlKHRpbWUoTlVMTCksIDAsIERBVEVfTE9DQUwpKTsKKwlmcHV0YygnXG4nLCBycHQpOworCisJZnB1dHMoImZhdGFsOiAiLCBycHQpOworCWZwdXRzKGVyciwgcnB0KTsKKwlmcHV0YygnXG4nLCBycHQpOworCisJZnB1dGMoJ1xuJywgcnB0KTsKKwlmcHV0cygiTW9zdCBSZWNlbnQgQ29tbWFuZHMgQmVmb3JlIENyYXNoXG4iLCBycHQpOworCWZwdXRzKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsIHJwdCk7CisJZm9yIChyYyA9IGNtZF9oaXN0Lm5leHQ7IHJjICE9ICZjbWRfaGlzdDsgcmMgPSByYy0+bmV4dCkgeworCQlpZiAocmMtPm5leHQgPT0gJmNtZF9oaXN0KQorCQkJZnB1dHMoIiogIiwgcnB0KTsKKwkJZWxzZQorCQkJZnB1dHMoIiAgIiwgcnB0KTsKKwkJZnB1dHMocmMtPmJ1ZiwgcnB0KTsKKwkJZnB1dGMoJ1xuJywgcnB0KTsKKwl9CisKKwlmcHV0YygnXG4nLCBycHQpOworCWZwdXRzKCJBY3RpdmUgQnJhbmNoIExSVVxuIiwgcnB0KTsKKwlmcHV0cygiLS0tLS0tLS0tLS0tLS0tLS1cbiIsIHJwdCk7CisJZnByaW50ZihycHQsICIgICAgYWN0aXZlX2JyYW5jaGVzID0gJWx1IGN1ciwgJWx1IG1heFxuIiwKKwkJY3VyX2FjdGl2ZV9icmFuY2hlcywKKwkJbWF4X2FjdGl2ZV9icmFuY2hlcyk7CisJZnB1dGMoJ1xuJywgcnB0KTsKKwlmcHV0cygiICBwb3MgIGNsb2NrIG5hbWVcbiIsIHJwdCk7CisJZnB1dHMoIiAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG4iLCBycHQpOworCWZvciAoYiA9IGFjdGl2ZV9icmFuY2hlcywgbHUgPSAwOyBiOyBiID0gYi0+YWN0aXZlX25leHRfYnJhbmNoKQorCQlmcHJpbnRmKHJwdCwgIiAgJTJsdSkgJTYiIFBSSXVNQVgiICVzXG4iLAorCQkJKytsdSwgYi0+bGFzdF9jb21taXQsIGItPm5hbWUpOworCisJZnB1dGMoJ1xuJywgcnB0KTsKKwlmcHV0cygiSW5hY3RpdmUgQnJhbmNoZXNcbiIsIHJwdCk7CisJZnB1dHMoIi0tLS0tLS0tLS0tLS0tLS0tXG4iLCBycHQpOworCWZvciAobHUgPSAwOyBsdSA8IGJyYW5jaF90YWJsZV9zejsgbHUrKykgeworCQlmb3IgKGIgPSBicmFuY2hfdGFibGVbbHVdOyBiOyBiID0gYi0+dGFibGVfbmV4dF9icmFuY2gpCisJCQl3cml0ZV9icmFuY2hfcmVwb3J0KHJwdCwgYik7CisJfQorCisJaWYgKGZpcnN0X3RhZykgeworCQlzdHJ1Y3QgdGFnICp0ZzsKKwkJZnB1dGMoJ1xuJywgcnB0KTsKKwkJZnB1dHMoIkFubm90YXRlZCBUYWdzXG4iLCBycHQpOworCQlmcHV0cygiLS0tLS0tLS0tLS0tLS1cbiIsIHJwdCk7CisJCWZvciAodGcgPSBmaXJzdF90YWc7IHRnOyB0ZyA9IHRnLT5uZXh0X3RhZykgeworCQkJZnB1dHMoc2hhMV90b19oZXgodGctPnNoYTEpLCBycHQpOworCQkJZnB1dGMoJyAnLCBycHQpOworCQkJZnB1dHModGctPm5hbWUsIHJwdCk7CisJCQlmcHV0YygnXG4nLCBycHQpOworCQl9CisJfQorCisJZnB1dGMoJ1xuJywgcnB0KTsKKwlmcHV0cygiTWFya3NcbiIsIHJwdCk7CisJZnB1dHMoIi0tLS0tXG4iLCBycHQpOworCWlmIChleHBvcnRfbWFya3NfZmlsZSkKKwkJZnByaW50ZihycHQsICIgIGV4cG9ydGVkIHRvICVzXG4iLCBleHBvcnRfbWFya3NfZmlsZSk7CisJZWxzZQorCQlkdW1wX21hcmtzX2hlbHBlcihycHQsIDAsIG1hcmtzKTsKKworCWZwdXRjKCdcbicsIHJwdCk7CisJZnB1dHMoIi0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsIHJwdCk7CisJZnB1dHMoIkVORCBPRiBDUkFTSCBSRVBPUlRcbiIsIHJwdCk7CisJZmNsb3NlKHJwdCk7Cit9CisKK3N0YXRpYyB2b2lkIGVuZF9wYWNrZmlsZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHVua2VlcF9hbGxfcGFja3Modm9pZCk7CitzdGF0aWMgdm9pZCBkdW1wX21hcmtzKHZvaWQpOworCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfbmljZWx5KGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJc3RhdGljIGludCB6b21iaWU7CisJY2hhciBtZXNzYWdlWzIgKiBQQVRIX01BWF07CisKKwl2c25wcmludGYobWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpLCBlcnIsIHBhcmFtcyk7CisJZnB1dHMoImZhdGFsOiAiLCBzdGRlcnIpOworCWZwdXRzKG1lc3NhZ2UsIHN0ZGVycik7CisJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKworCWlmICghem9tYmllKSB7CisJCXpvbWJpZSA9IDE7CisJCXdyaXRlX2NyYXNoX3JlcG9ydChtZXNzYWdlKTsKKwkJZW5kX3BhY2tmaWxlKCk7CisJCXVua2VlcF9hbGxfcGFja3MoKTsKKwkJZHVtcF9tYXJrcygpOworCX0KKwlleGl0KDEyOCk7Cit9CisKKyNpZm5kZWYgU0lHVVNSMQkvKiBXaW5kb3dzLCBmb3IgZXhhbXBsZSAqLworCitzdGF0aWMgdm9pZCBzZXRfY2hlY2twb2ludF9zaWduYWwodm9pZCkKK3sKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgY2hlY2twb2ludF9zaWduYWwoaW50IHNpZ25vKQoreworCWNoZWNrcG9pbnRfcmVxdWVzdGVkID0gMTsKK30KKworc3RhdGljIHZvaWQgc2V0X2NoZWNrcG9pbnRfc2lnbmFsKHZvaWQpCit7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKKworCW1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOworCXNhLnNhX2hhbmRsZXIgPSBjaGVja3BvaW50X3NpZ25hbDsKKwlzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CisJc2Euc2FfZmxhZ3MgPSBTQV9SRVNUQVJUOworCXNpZ2FjdGlvbihTSUdVU1IxLCAmc2EsIE5VTEwpOworfQorCisjZW5kaWYKKworc3RhdGljIHZvaWQgYWxsb2Nfb2JqZWN0cyh1bnNpZ25lZCBpbnQgY250KQoreworCXN0cnVjdCBvYmplY3RfZW50cnlfcG9vbCAqYjsKKworCWIgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5X3Bvb2wpCisJCSsgY250ICogc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkpKTsKKwliLT5uZXh0X3Bvb2wgPSBibG9ja3M7CisJYi0+bmV4dF9mcmVlID0gYi0+ZW50cmllczsKKwliLT5lbmQgPSBiLT5lbnRyaWVzICsgY250OworCWJsb2NrcyA9IGI7CisJYWxsb2NfY291bnQgKz0gY250OworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqbmV3X29iamVjdCh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisKKwlpZiAoYmxvY2tzLT5uZXh0X2ZyZWUgPT0gYmxvY2tzLT5lbmQpCisJCWFsbG9jX29iamVjdHMob2JqZWN0X2VudHJ5X2FsbG9jKTsKKworCWUgPSBibG9ja3MtPm5leHRfZnJlZSsrOworCWhhc2hjcHkoZS0+aWR4LnNoYTEsIHNoYTEpOworCXJldHVybiBlOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqZmluZF9vYmplY3QodW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwl1bnNpZ25lZCBpbnQgaCA9IHNoYTFbMF0gPDwgOCB8IHNoYTFbMV07CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZTsKKwlmb3IgKGUgPSBvYmplY3RfdGFibGVbaF07IGU7IGUgPSBlLT5uZXh0KQorCQlpZiAoIWhhc2hjbXAoc2hhMSwgZS0+aWR4LnNoYTEpKQorCQkJcmV0dXJuIGU7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICppbnNlcnRfb2JqZWN0KHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgaW50IGggPSBzaGExWzBdIDw8IDggfCBzaGExWzFdOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmUgPSBvYmplY3RfdGFibGVbaF07CisKKwl3aGlsZSAoZSkgeworCQlpZiAoIWhhc2hjbXAoc2hhMSwgZS0+aWR4LnNoYTEpKQorCQkJcmV0dXJuIGU7CisJCWUgPSBlLT5uZXh0OworCX0KKworCWUgPSBuZXdfb2JqZWN0KHNoYTEpOworCWUtPm5leHQgPSBvYmplY3RfdGFibGVbaF07CisJZS0+aWR4Lm9mZnNldCA9IDA7CisJb2JqZWN0X3RhYmxlW2hdID0gZTsKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoY19zdHIoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgciA9IDA7CisJd2hpbGUgKGxlbi0tID4gMCkKKwkJciA9IHIgKiAzMSArICpzKys7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkICpwb29sX2FsbG9jKHNpemVfdCBsZW4pCit7CisJc3RydWN0IG1lbV9wb29sICpwOworCXZvaWQgKnI7CisKKwkvKiByb3VuZCB1cCB0byBhICd1aW50bWF4X3QnIGFsaWdubWVudCAqLworCWlmIChsZW4gJiAoc2l6ZW9mKHVpbnRtYXhfdCkgLSAxKSkKKwkJbGVuICs9IHNpemVvZih1aW50bWF4X3QpIC0gKGxlbiAmIChzaXplb2YodWludG1heF90KSAtIDEpKTsKKworCWZvciAocCA9IG1lbV9wb29sOyBwOyBwID0gcC0+bmV4dF9wb29sKQorCQlpZiAoKHAtPmVuZCAtIHAtPm5leHRfZnJlZSA+PSBsZW4pKQorCQkJYnJlYWs7CisKKwlpZiAoIXApIHsKKwkJaWYgKGxlbiA+PSAobWVtX3Bvb2xfYWxsb2MvMikpIHsKKwkJCXRvdGFsX2FsbG9jZCArPSBsZW47CisJCQlyZXR1cm4geG1hbGxvYyhsZW4pOworCQl9CisJCXRvdGFsX2FsbG9jZCArPSBzaXplb2Yoc3RydWN0IG1lbV9wb29sKSArIG1lbV9wb29sX2FsbG9jOworCQlwID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG1lbV9wb29sKSArIG1lbV9wb29sX2FsbG9jKTsKKwkJcC0+bmV4dF9wb29sID0gbWVtX3Bvb2w7CisJCXAtPm5leHRfZnJlZSA9IChjaGFyICopIHAtPnNwYWNlOworCQlwLT5lbmQgPSBwLT5uZXh0X2ZyZWUgKyBtZW1fcG9vbF9hbGxvYzsKKwkJbWVtX3Bvb2wgPSBwOworCX0KKworCXIgPSBwLT5uZXh0X2ZyZWU7CisJcC0+bmV4dF9mcmVlICs9IGxlbjsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgKnBvb2xfY2FsbG9jKHNpemVfdCBjb3VudCwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGxlbiA9IGNvdW50ICogc2l6ZTsKKwl2b2lkICpyID0gcG9vbF9hbGxvYyhsZW4pOworCW1lbXNldChyLCAwLCBsZW4pOworCXJldHVybiByOworfQorCitzdGF0aWMgY2hhciAqcG9vbF9zdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwljaGFyICpyID0gcG9vbF9hbGxvYyhzdHJsZW4ocykgKyAxKTsKKwlzdHJjcHkociwgcyk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF9tYXJrKHVpbnRtYXhfdCBpZG51bSwgc3RydWN0IG9iamVjdF9lbnRyeSAqb2UpCit7CisJc3RydWN0IG1hcmtfc2V0ICpzID0gbWFya3M7CisJd2hpbGUgKChpZG51bSA+PiBzLT5zaGlmdCkgPj0gMTAyNCkgeworCQlzID0gcG9vbF9jYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBtYXJrX3NldCkpOworCQlzLT5zaGlmdCA9IG1hcmtzLT5zaGlmdCArIDEwOworCQlzLT5kYXRhLnNldHNbMF0gPSBtYXJrczsKKwkJbWFya3MgPSBzOworCX0KKwl3aGlsZSAocy0+c2hpZnQpIHsKKwkJdWludG1heF90IGkgPSBpZG51bSA+PiBzLT5zaGlmdDsKKwkJaWRudW0gLT0gaSA8PCBzLT5zaGlmdDsKKwkJaWYgKCFzLT5kYXRhLnNldHNbaV0pIHsKKwkJCXMtPmRhdGEuc2V0c1tpXSA9IHBvb2xfY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbWFya19zZXQpKTsKKwkJCXMtPmRhdGEuc2V0c1tpXS0+c2hpZnQgPSBzLT5zaGlmdCAtIDEwOworCQl9CisJCXMgPSBzLT5kYXRhLnNldHNbaV07CisJfQorCWlmICghcy0+ZGF0YS5tYXJrZWRbaWRudW1dKQorCQltYXJrc19zZXRfY291bnQrKzsKKwlzLT5kYXRhLm1hcmtlZFtpZG51bV0gPSBvZTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKmZpbmRfbWFyayh1aW50bWF4X3QgaWRudW0pCit7CisJdWludG1heF90IG9yaWdfaWRudW0gPSBpZG51bTsKKwlzdHJ1Y3QgbWFya19zZXQgKnMgPSBtYXJrczsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSA9IE5VTEw7CisJaWYgKChpZG51bSA+PiBzLT5zaGlmdCkgPCAxMDI0KSB7CisJCXdoaWxlIChzICYmIHMtPnNoaWZ0KSB7CisJCQl1aW50bWF4X3QgaSA9IGlkbnVtID4+IHMtPnNoaWZ0OworCQkJaWRudW0gLT0gaSA8PCBzLT5zaGlmdDsKKwkJCXMgPSBzLT5kYXRhLnNldHNbaV07CisJCX0KKwkJaWYgKHMpCisJCQlvZSA9IHMtPmRhdGEubWFya2VkW2lkbnVtXTsKKwl9CisJaWYgKCFvZSkKKwkJZGllKCJtYXJrIDolIiBQUkl1TUFYICIgbm90IGRlY2xhcmVkIiwgb3JpZ19pZG51bSk7CisJcmV0dXJuIG9lOworfQorCitzdGF0aWMgc3RydWN0IGF0b21fc3RyICp0b19hdG9tKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIHNob3J0IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaGMgPSBoY19zdHIocywgbGVuKSAlIGF0b21fdGFibGVfc3o7CisJc3RydWN0IGF0b21fc3RyICpjOworCisJZm9yIChjID0gYXRvbV90YWJsZVtoY107IGM7IGMgPSBjLT5uZXh0X2F0b20pCisJCWlmIChjLT5zdHJfbGVuID09IGxlbiAmJiAhc3RybmNtcChzLCBjLT5zdHJfZGF0LCBsZW4pKQorCQkJcmV0dXJuIGM7CisKKwljID0gcG9vbF9hbGxvYyhzaXplb2Yoc3RydWN0IGF0b21fc3RyKSArIGxlbiArIDEpOworCWMtPnN0cl9sZW4gPSBsZW47CisJc3RybmNweShjLT5zdHJfZGF0LCBzLCBsZW4pOworCWMtPnN0cl9kYXRbbGVuXSA9IDA7CisJYy0+bmV4dF9hdG9tID0gYXRvbV90YWJsZVtoY107CisJYXRvbV90YWJsZVtoY10gPSBjOworCWF0b21fY250Kys7CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYnJhbmNoICpsb29rdXBfYnJhbmNoKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdW5zaWduZWQgaW50IGhjID0gaGNfc3RyKG5hbWUsIHN0cmxlbihuYW1lKSkgJSBicmFuY2hfdGFibGVfc3o7CisJc3RydWN0IGJyYW5jaCAqYjsKKworCWZvciAoYiA9IGJyYW5jaF90YWJsZVtoY107IGI7IGIgPSBiLT50YWJsZV9uZXh0X2JyYW5jaCkKKwkJaWYgKCFzdHJjbXAobmFtZSwgYi0+bmFtZSkpCisJCQlyZXR1cm4gYjsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBicmFuY2ggKm5ld19icmFuY2goY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBpbnQgaGMgPSBoY19zdHIobmFtZSwgc3RybGVuKG5hbWUpKSAlIGJyYW5jaF90YWJsZV9zejsKKwlzdHJ1Y3QgYnJhbmNoICpiID0gbG9va3VwX2JyYW5jaChuYW1lKTsKKworCWlmIChiKQorCQlkaWUoIkludmFsaWQgYXR0ZW1wdCB0byBjcmVhdGUgZHVwbGljYXRlIGJyYW5jaDogJXMiLCBuYW1lKTsKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQobmFtZSwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpCisJCWRpZSgiQnJhbmNoIG5hbWUgZG9lc24ndCBjb25mb3JtIHRvIEdJVCBzdGFuZGFyZHM6ICVzIiwgbmFtZSk7CisKKwliID0gcG9vbF9jYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBicmFuY2gpKTsKKwliLT5uYW1lID0gcG9vbF9zdHJkdXAobmFtZSk7CisJYi0+dGFibGVfbmV4dF9icmFuY2ggPSBicmFuY2hfdGFibGVbaGNdOworCWItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLm1vZGUgPSBTX0lGRElSOworCWItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLm1vZGUgPSBTX0lGRElSOworCWItPm51bV9ub3RlcyA9IDA7CisJYi0+YWN0aXZlID0gMDsKKwliLT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJYnJhbmNoX3RhYmxlW2hjXSA9IGI7CisJYnJhbmNoX2NvdW50Kys7CisJcmV0dXJuIGI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGNfZW50cmllcyh1bnNpZ25lZCBpbnQgY250KQoreworCWNudCA9IGNudCAmIDcgPyAoY250IC8gOCkgKyAxIDogY250IC8gODsKKwlyZXR1cm4gY250IDwgYXZhaWxfdHJlZV90YWJsZV9zeiA/IGNudCA6IGF2YWlsX3RyZWVfdGFibGVfc3ogLSAxOworfQorCitzdGF0aWMgc3RydWN0IHRyZWVfY29udGVudCAqbmV3X3RyZWVfY29udGVudCh1bnNpZ25lZCBpbnQgY250KQoreworCXN0cnVjdCBhdmFpbF90cmVlX2NvbnRlbnQgKmYsICpsID0gTlVMTDsKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0OworCXVuc2lnbmVkIGludCBoYyA9IGhjX2VudHJpZXMoY250KTsKKworCWZvciAoZiA9IGF2YWlsX3RyZWVfdGFibGVbaGNdOyBmOyBsID0gZiwgZiA9IGYtPm5leHRfYXZhaWwpCisJCWlmIChmLT5lbnRyeV9jYXBhY2l0eSA+PSBjbnQpCisJCQlicmVhazsKKworCWlmIChmKSB7CisJCWlmIChsKQorCQkJbC0+bmV4dF9hdmFpbCA9IGYtPm5leHRfYXZhaWw7CisJCWVsc2UKKwkJCWF2YWlsX3RyZWVfdGFibGVbaGNdID0gZi0+bmV4dF9hdmFpbDsKKwl9IGVsc2UgeworCQljbnQgPSBjbnQgJiA3ID8gKChjbnQgLyA4KSArIDEpICogOCA6IGNudDsKKwkJZiA9IHBvb2xfYWxsb2Moc2l6ZW9mKCp0KSArIHNpemVvZih0LT5lbnRyaWVzWzBdKSAqIGNudCk7CisJCWYtPmVudHJ5X2NhcGFjaXR5ID0gY250OworCX0KKworCXQgPSAoc3RydWN0IHRyZWVfY29udGVudCopZjsKKwl0LT5lbnRyeV9jb3VudCA9IDA7CisJdC0+ZGVsdGFfZGVwdGggPSAwOworCXJldHVybiB0OworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZW50cnkgKmUpOworc3RhdGljIHZvaWQgcmVsZWFzZV90cmVlX2NvbnRlbnQoc3RydWN0IHRyZWVfY29udGVudCAqdCkKK3sKKwlzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50ICpmID0gKHN0cnVjdCBhdmFpbF90cmVlX2NvbnRlbnQqKXQ7CisJdW5zaWduZWQgaW50IGhjID0gaGNfZW50cmllcyhmLT5lbnRyeV9jYXBhY2l0eSk7CisJZi0+bmV4dF9hdmFpbCA9IGF2YWlsX3RyZWVfdGFibGVbaGNdOworCWF2YWlsX3RyZWVfdGFibGVbaGNdID0gZjsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKHN0cnVjdCB0cmVlX2NvbnRlbnQgKnQpCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHQtPmVudHJ5X2NvdW50OyBpKyspCisJCXJlbGVhc2VfdHJlZV9lbnRyeSh0LT5lbnRyaWVzW2ldKTsKKwlyZWxlYXNlX3RyZWVfY29udGVudCh0KTsKK30KKworc3RhdGljIHN0cnVjdCB0cmVlX2NvbnRlbnQgKmdyb3dfdHJlZV9jb250ZW50KAorCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnQsCisJaW50IGFtdCkKK3sKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICpyID0gbmV3X3RyZWVfY29udGVudCh0LT5lbnRyeV9jb3VudCArIGFtdCk7CisJci0+ZW50cnlfY291bnQgPSB0LT5lbnRyeV9jb3VudDsKKwlyLT5kZWx0YV9kZXB0aCA9IHQtPmRlbHRhX2RlcHRoOworCW1lbWNweShyLT5lbnRyaWVzLHQtPmVudHJpZXMsdC0+ZW50cnlfY291bnQqc2l6ZW9mKHQtPmVudHJpZXNbMF0pKTsKKwlyZWxlYXNlX3RyZWVfY29udGVudCh0KTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5ICpuZXdfdHJlZV9lbnRyeSh2b2lkKQoreworCXN0cnVjdCB0cmVlX2VudHJ5ICplOworCisJaWYgKCFhdmFpbF90cmVlX2VudHJ5KSB7CisJCXVuc2lnbmVkIGludCBuID0gdHJlZV9lbnRyeV9hbGxvYzsKKwkJdG90YWxfYWxsb2NkICs9IG4gKiBzaXplb2Yoc3RydWN0IHRyZWVfZW50cnkpOworCQlhdmFpbF90cmVlX2VudHJ5ID0gZSA9IHhtYWxsb2MobiAqIHNpemVvZihzdHJ1Y3QgdHJlZV9lbnRyeSkpOworCQl3aGlsZSAobi0tID4gMSkgeworCQkJKigodm9pZCoqKWUpID0gZSArIDE7CisJCQllKys7CisJCX0KKwkJKigodm9pZCoqKWUpID0gTlVMTDsKKwl9CisKKwllID0gYXZhaWxfdHJlZV9lbnRyeTsKKwlhdmFpbF90cmVlX2VudHJ5ID0gKigodm9pZCoqKWUpOworCXJldHVybiBlOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZW50cnkgKmUpCit7CisJaWYgKGUtPnRyZWUpCisJCXJlbGVhc2VfdHJlZV9jb250ZW50X3JlY3Vyc2l2ZShlLT50cmVlKTsKKwkqKCh2b2lkKiopZSkgPSBhdmFpbF90cmVlX2VudHJ5OworCWF2YWlsX3RyZWVfZW50cnkgPSBlOworfQorCitzdGF0aWMgc3RydWN0IHRyZWVfY29udGVudCAqZHVwX3RyZWVfY29udGVudChzdHJ1Y3QgdHJlZV9jb250ZW50ICpzKQoreworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKmQ7CisJc3RydWN0IHRyZWVfZW50cnkgKmEsICpiOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCFzKQorCQlyZXR1cm4gTlVMTDsKKwlkID0gbmV3X3RyZWVfY29udGVudChzLT5lbnRyeV9jb3VudCk7CisJZm9yIChpID0gMDsgaSA8IHMtPmVudHJ5X2NvdW50OyBpKyspIHsKKwkJYSA9IHMtPmVudHJpZXNbaV07CisJCWIgPSBuZXdfdHJlZV9lbnRyeSgpOworCQltZW1jcHkoYiwgYSwgc2l6ZW9mKCphKSk7CisJCWlmIChhLT50cmVlICYmIGlzX251bGxfc2hhMShiLT52ZXJzaW9uc1sxXS5zaGExKSkKKwkJCWItPnRyZWUgPSBkdXBfdHJlZV9jb250ZW50KGEtPnRyZWUpOworCQllbHNlCisJCQliLT50cmVlID0gTlVMTDsKKwkJZC0+ZW50cmllc1tpXSA9IGI7CisJfQorCWQtPmVudHJ5X2NvdW50ID0gcy0+ZW50cnlfY291bnQ7CisJZC0+ZGVsdGFfZGVwdGggPSBzLT5kZWx0YV9kZXB0aDsKKworCXJldHVybiBkOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9wYWNrZmlsZSh2b2lkKQoreworCXN0YXRpYyBjaGFyIHRtcF9maWxlW1BBVEhfTUFYXTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlzdHJ1Y3QgcGFja19oZWFkZXIgaGRyOworCWludCBwYWNrX2ZkOworCisJcGFja19mZCA9IG9kYl9ta3N0ZW1wKHRtcF9maWxlLCBzaXplb2YodG1wX2ZpbGUpLAorCQkJICAgICAgInBhY2svdG1wX3BhY2tfWFhYWFhYIik7CisJcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpwKSArIHN0cmxlbih0bXBfZmlsZSkgKyAyKTsKKwlzdHJjcHkocC0+cGFja19uYW1lLCB0bXBfZmlsZSk7CisJcC0+cGFja19mZCA9IHBhY2tfZmQ7CisJcC0+ZG9fbm90X2Nsb3NlID0gMTsKKwlwYWNrX2ZpbGUgPSBzaGExZmQocGFja19mZCwgcC0+cGFja19uYW1lKTsKKworCWhkci5oZHJfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19TSUdOQVRVUkUpOworCWhkci5oZHJfdmVyc2lvbiA9IGh0b25sKDIpOworCWhkci5oZHJfZW50cmllcyA9IDA7CisJc2hhMXdyaXRlKHBhY2tfZmlsZSwgJmhkciwgc2l6ZW9mKGhkcikpOworCisJcGFja19kYXRhID0gcDsKKwlwYWNrX3NpemUgPSBzaXplb2YoaGRyKTsKKwlvYmplY3RfY291bnQgPSAwOworCisJYWxsX3BhY2tzID0geHJlYWxsb2MoYWxsX3BhY2tzLCBzaXplb2YoKmFsbF9wYWNrcykgKiAocGFja19pZCArIDEpKTsKKwlhbGxfcGFja3NbcGFja19pZF0gPSBwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY3JlYXRlX2luZGV4KHZvaWQpCit7CisJY29uc3QgY2hhciAqdG1wZmlsZTsKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKippZHgsICoqYywgKipsYXN0OworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJc3RydWN0IG9iamVjdF9lbnRyeV9wb29sICpvOworCisJLyogQnVpbGQgdGhlIHRhYmxlIG9mIG9iamVjdCBJRHMuICovCisJaWR4ID0geG1hbGxvYyhvYmplY3RfY291bnQgKiBzaXplb2YoKmlkeCkpOworCWMgPSBpZHg7CisJZm9yIChvID0gYmxvY2tzOyBvOyBvID0gby0+bmV4dF9wb29sKQorCQlmb3IgKGUgPSBvLT5uZXh0X2ZyZWU7IGUtLSAhPSBvLT5lbnRyaWVzOykKKwkJCWlmIChwYWNrX2lkID09IGUtPnBhY2tfaWQpCisJCQkJKmMrKyA9ICZlLT5pZHg7CisJbGFzdCA9IGlkeCArIG9iamVjdF9jb3VudDsKKwlpZiAoYyAhPSBsYXN0KQorCQlkaWUoImludGVybmFsIGNvbnNpc3RlbmN5IGVycm9yIGNyZWF0aW5nIHRoZSBpbmRleCIpOworCisJdG1wZmlsZSA9IHdyaXRlX2lkeF9maWxlKE5VTEwsIGlkeCwgb2JqZWN0X2NvdW50LCAmcGFja19pZHhfb3B0cywgcGFja19kYXRhLT5zaGExKTsKKwlmcmVlKGlkeCk7CisJcmV0dXJuIHRtcGZpbGU7Cit9CisKK3N0YXRpYyBjaGFyICprZWVwX3BhY2soY29uc3QgY2hhciAqY3Vycl9pbmRleF9uYW1lKQoreworCXN0YXRpYyBjaGFyIG5hbWVbUEFUSF9NQVhdOworCXN0YXRpYyBjb25zdCBjaGFyICprZWVwX21zZyA9ICJmYXN0LWltcG9ydCI7CisJaW50IGtlZXBfZmQ7CisKKwlrZWVwX2ZkID0gb2RiX3BhY2tfa2VlcChuYW1lLCBzaXplb2YobmFtZSksIHBhY2tfZGF0YS0+c2hhMSk7CisJaWYgKGtlZXBfZmQgPCAwKQorCQlkaWVfZXJybm8oImNhbm5vdCBjcmVhdGUga2VlcCBmaWxlIik7CisJd3JpdGVfb3JfZGllKGtlZXBfZmQsIGtlZXBfbXNnLCBzdHJsZW4oa2VlcF9tc2cpKTsKKwlpZiAoY2xvc2Uoa2VlcF9mZCkpCisJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIGtlZXAgZmlsZSIpOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvcGFjay9wYWNrLSVzLnBhY2siLAorCQkgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgc2hhMV90b19oZXgocGFja19kYXRhLT5zaGExKSk7CisJaWYgKG1vdmVfdGVtcF90b19maWxlKHBhY2tfZGF0YS0+cGFja19uYW1lLCBuYW1lKSkKKwkJZGllKCJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIik7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy9wYWNrL3BhY2stJXMuaWR4IiwKKwkJIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIHNoYTFfdG9faGV4KHBhY2tfZGF0YS0+c2hhMSkpOworCWlmIChtb3ZlX3RlbXBfdG9fZmlsZShjdXJyX2luZGV4X25hbWUsIG5hbWUpKQorCQlkaWUoImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIik7CisJZnJlZSgodm9pZCAqKWN1cnJfaW5kZXhfbmFtZSk7CisJcmV0dXJuIG5hbWU7Cit9CisKK3N0YXRpYyB2b2lkIHVua2VlcF9hbGxfcGFja3Modm9pZCkKK3sKKwlzdGF0aWMgY2hhciBuYW1lW1BBVEhfTUFYXTsKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBwYWNrX2lkOyBrKyspIHsKKwkJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBhbGxfcGFja3Nba107CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzL3BhY2svcGFjay0lcy5rZWVwIiwKKwkJCSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBzaGExX3RvX2hleChwLT5zaGExKSk7CisJCXVubGlua19vcl93YXJuKG5hbWUpOworCX0KK30KKworc3RhdGljIHZvaWQgZW5kX3BhY2tmaWxlKHZvaWQpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKm9sZF9wID0gcGFja19kYXRhLCAqbmV3X3A7CisKKwljbGVhcl9kZWx0YV9iYXNlX2NhY2hlKCk7CisJaWYgKG9iamVjdF9jb3VudCkgeworCQl1bnNpZ25lZCBjaGFyIGN1cl9wYWNrX3NoYTFbMjBdOworCQljaGFyICppZHhfbmFtZTsKKwkJaW50IGk7CisJCXN0cnVjdCBicmFuY2ggKmI7CisJCXN0cnVjdCB0YWcgKnQ7CisKKwkJY2xvc2VfcGFja193aW5kb3dzKHBhY2tfZGF0YSk7CisJCXNoYTFjbG9zZShwYWNrX2ZpbGUsIGN1cl9wYWNrX3NoYTEsIDApOworCQlmaXh1cF9wYWNrX2hlYWRlcl9mb290ZXIocGFja19kYXRhLT5wYWNrX2ZkLCBwYWNrX2RhdGEtPnNoYTEsCisJCQkJICAgIHBhY2tfZGF0YS0+cGFja19uYW1lLCBvYmplY3RfY291bnQsCisJCQkJICAgIGN1cl9wYWNrX3NoYTEsIHBhY2tfc2l6ZSk7CisJCWNsb3NlKHBhY2tfZGF0YS0+cGFja19mZCk7CisJCWlkeF9uYW1lID0ga2VlcF9wYWNrKGNyZWF0ZV9pbmRleCgpKTsKKworCQkvKiBSZWdpc3RlciB0aGUgcGFja2ZpbGUgd2l0aCBjb3JlIGdpdCdzIG1hY2hpbmVyeS4gKi8KKwkJbmV3X3AgPSBhZGRfcGFja2VkX2dpdChpZHhfbmFtZSwgc3RybGVuKGlkeF9uYW1lKSwgMSk7CisJCWlmICghbmV3X3ApCisJCQlkaWUoImNvcmUgZ2l0IHJlamVjdGVkIGluZGV4ICVzIiwgaWR4X25hbWUpOworCQlhbGxfcGFja3NbcGFja19pZF0gPSBuZXdfcDsKKwkJaW5zdGFsbF9wYWNrZWRfZ2l0KG5ld19wKTsKKworCQkvKiBQcmludCB0aGUgYm91bmRhcnkgKi8KKwkJaWYgKHBhY2tfZWRnZXMpIHsKKwkJCWZwcmludGYocGFja19lZGdlcywgIiVzOiIsIG5ld19wLT5wYWNrX25hbWUpOworCQkJZm9yIChpID0gMDsgaSA8IGJyYW5jaF90YWJsZV9zejsgaSsrKSB7CisJCQkJZm9yIChiID0gYnJhbmNoX3RhYmxlW2ldOyBiOyBiID0gYi0+dGFibGVfbmV4dF9icmFuY2gpIHsKKwkJCQkJaWYgKGItPnBhY2tfaWQgPT0gcGFja19pZCkKKwkJCQkJCWZwcmludGYocGFja19lZGdlcywgIiAlcyIsIHNoYTFfdG9faGV4KGItPnNoYTEpKTsKKwkJCQl9CisJCQl9CisJCQlmb3IgKHQgPSBmaXJzdF90YWc7IHQ7IHQgPSB0LT5uZXh0X3RhZykgeworCQkJCWlmICh0LT5wYWNrX2lkID09IHBhY2tfaWQpCisJCQkJCWZwcmludGYocGFja19lZGdlcywgIiAlcyIsIHNoYTFfdG9faGV4KHQtPnNoYTEpKTsKKwkJCX0KKwkJCWZwdXRjKCdcbicsIHBhY2tfZWRnZXMpOworCQkJZmZsdXNoKHBhY2tfZWRnZXMpOworCQl9CisKKwkJcGFja19pZCsrOworCX0KKwllbHNlIHsKKwkJY2xvc2Uob2xkX3AtPnBhY2tfZmQpOworCQl1bmxpbmtfb3Jfd2FybihvbGRfcC0+cGFja19uYW1lKTsKKwl9CisJZnJlZShvbGRfcCk7CisKKwkvKiBXZSBjYW4ndCBjYXJyeSBhIGRlbHRhIGFjcm9zcyBwYWNrZmlsZXMuICovCisJc3RyYnVmX3JlbGVhc2UoJmxhc3RfYmxvYi5kYXRhKTsKKwlsYXN0X2Jsb2Iub2Zmc2V0ID0gMDsKKwlsYXN0X2Jsb2IuZGVwdGggPSAwOworfQorCitzdGF0aWMgdm9pZCBjeWNsZV9wYWNrZmlsZSh2b2lkKQoreworCWVuZF9wYWNrZmlsZSgpOworCXN0YXJ0X3BhY2tmaWxlKCk7Cit9CisKK3N0YXRpYyBpbnQgc3RvcmVfb2JqZWN0KAorCWVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwlzdHJ1Y3Qgc3RyYnVmICpkYXQsCisJc3RydWN0IGxhc3Rfb2JqZWN0ICpsYXN0LAorCXVuc2lnbmVkIGNoYXIgKnNoYTFvdXQsCisJdWludG1heF90IG1hcmspCit7CisJdm9pZCAqb3V0LCAqZGVsdGE7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZTsKKwl1bnNpZ25lZCBjaGFyIGhkcls5Nl07CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBsb25nIGhkcmxlbiwgZGVsdGFsZW47CisJZ2l0X1NIQV9DVFggYzsKKwlnaXRfenN0cmVhbSBzOworCisJaGRybGVuID0gc3ByaW50ZigoY2hhciAqKWhkciwiJXMgJWx1IiwgdHlwZW5hbWUodHlwZSksCisJCSh1bnNpZ25lZCBsb25nKWRhdC0+bGVuKSArIDE7CisJZ2l0X1NIQTFfSW5pdCgmYyk7CisJZ2l0X1NIQTFfVXBkYXRlKCZjLCBoZHIsIGhkcmxlbik7CisJZ2l0X1NIQTFfVXBkYXRlKCZjLCBkYXQtPmJ1ZiwgZGF0LT5sZW4pOworCWdpdF9TSEExX0ZpbmFsKHNoYTEsICZjKTsKKwlpZiAoc2hhMW91dCkKKwkJaGFzaGNweShzaGExb3V0LCBzaGExKTsKKworCWUgPSBpbnNlcnRfb2JqZWN0KHNoYTEpOworCWlmIChtYXJrKQorCQlpbnNlcnRfbWFyayhtYXJrLCBlKTsKKwlpZiAoZS0+aWR4Lm9mZnNldCkgeworCQlkdXBsaWNhdGVfY291bnRfYnlfdHlwZVt0eXBlXSsrOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKGZpbmRfc2hhMV9wYWNrKHNoYTEsIHBhY2tlZF9naXQpKSB7CisJCWUtPnR5cGUgPSB0eXBlOworCQllLT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJCWUtPmlkeC5vZmZzZXQgPSAxOyAvKiBqdXN0IG5vdCB6ZXJvISAqLworCQlkdXBsaWNhdGVfY291bnRfYnlfdHlwZVt0eXBlXSsrOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAobGFzdCAmJiBsYXN0LT5kYXRhLmJ1ZiAmJiBsYXN0LT5kZXB0aCA8IG1heF9kZXB0aCAmJiBkYXQtPmxlbiA+IDIwKSB7CisJCWRlbHRhX2NvdW50X2F0dGVtcHRzX2J5X3R5cGVbdHlwZV0rKzsKKwkJZGVsdGEgPSBkaWZmX2RlbHRhKGxhc3QtPmRhdGEuYnVmLCBsYXN0LT5kYXRhLmxlbiwKKwkJCWRhdC0+YnVmLCBkYXQtPmxlbiwKKwkJCSZkZWx0YWxlbiwgZGF0LT5sZW4gLSAyMCk7CisJfSBlbHNlCisJCWRlbHRhID0gTlVMTDsKKworCW1lbXNldCgmcywgMCwgc2l6ZW9mKHMpKTsKKwlnaXRfZGVmbGF0ZV9pbml0KCZzLCBwYWNrX2NvbXByZXNzaW9uX2xldmVsKTsKKwlpZiAoZGVsdGEpIHsKKwkJcy5uZXh0X2luID0gZGVsdGE7CisJCXMuYXZhaWxfaW4gPSBkZWx0YWxlbjsKKwl9IGVsc2UgeworCQlzLm5leHRfaW4gPSAodm9pZCAqKWRhdC0+YnVmOworCQlzLmF2YWlsX2luID0gZGF0LT5sZW47CisJfQorCXMuYXZhaWxfb3V0ID0gZ2l0X2RlZmxhdGVfYm91bmQoJnMsIHMuYXZhaWxfaW4pOworCXMubmV4dF9vdXQgPSBvdXQgPSB4bWFsbG9jKHMuYXZhaWxfb3V0KTsKKwl3aGlsZSAoZ2l0X2RlZmxhdGUoJnMsIFpfRklOSVNIKSA9PSBaX09LKQorCQk7IC8qIG5vdGhpbmcgKi8KKwlnaXRfZGVmbGF0ZV9lbmQoJnMpOworCisJLyogRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBhdXRvLWNoZWNrcG9pbnQuICovCisJaWYgKChtYXhfcGFja3NpemUgJiYgKHBhY2tfc2l6ZSArIDYwICsgcy50b3RhbF9vdXQpID4gbWF4X3BhY2tzaXplKQorCQl8fCAocGFja19zaXplICsgNjAgKyBzLnRvdGFsX291dCkgPCBwYWNrX3NpemUpIHsKKworCQkvKiBUaGlzIG5ldyBvYmplY3QgbmVlZHMgdG8gKm5vdCogaGF2ZSB0aGUgY3VycmVudCBwYWNrX2lkLiAqLworCQllLT5wYWNrX2lkID0gcGFja19pZCArIDE7CisJCWN5Y2xlX3BhY2tmaWxlKCk7CisKKwkJLyogV2UgY2Fubm90IGNhcnJ5IGEgZGVsdGEgaW50byB0aGUgbmV3IHBhY2suICovCisJCWlmIChkZWx0YSkgeworCQkJZnJlZShkZWx0YSk7CisJCQlkZWx0YSA9IE5VTEw7CisKKwkJCW1lbXNldCgmcywgMCwgc2l6ZW9mKHMpKTsKKwkJCWdpdF9kZWZsYXRlX2luaXQoJnMsIHBhY2tfY29tcHJlc3Npb25fbGV2ZWwpOworCQkJcy5uZXh0X2luID0gKHZvaWQgKilkYXQtPmJ1ZjsKKwkJCXMuYXZhaWxfaW4gPSBkYXQtPmxlbjsKKwkJCXMuYXZhaWxfb3V0ID0gZ2l0X2RlZmxhdGVfYm91bmQoJnMsIHMuYXZhaWxfaW4pOworCQkJcy5uZXh0X291dCA9IG91dCA9IHhyZWFsbG9jKG91dCwgcy5hdmFpbF9vdXQpOworCQkJd2hpbGUgKGdpdF9kZWZsYXRlKCZzLCBaX0ZJTklTSCkgPT0gWl9PSykKKwkJCQk7IC8qIG5vdGhpbmcgKi8KKwkJCWdpdF9kZWZsYXRlX2VuZCgmcyk7CisJCX0KKwl9CisKKwllLT50eXBlID0gdHlwZTsKKwllLT5wYWNrX2lkID0gcGFja19pZDsKKwllLT5pZHgub2Zmc2V0ID0gcGFja19zaXplOworCW9iamVjdF9jb3VudCsrOworCW9iamVjdF9jb3VudF9ieV90eXBlW3R5cGVdKys7CisKKwljcmMzMl9iZWdpbihwYWNrX2ZpbGUpOworCisJaWYgKGRlbHRhKSB7CisJCW9mZl90IG9mcyA9IGUtPmlkeC5vZmZzZXQgLSBsYXN0LT5vZmZzZXQ7CisJCXVuc2lnbmVkIHBvcyA9IHNpemVvZihoZHIpIC0gMTsKKworCQlkZWx0YV9jb3VudF9ieV90eXBlW3R5cGVdKys7CisJCWUtPmRlcHRoID0gbGFzdC0+ZGVwdGggKyAxOworCisJCWhkcmxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIoT0JKX09GU19ERUxUQSwgZGVsdGFsZW4sIGhkcik7CisJCXNoYTF3cml0ZShwYWNrX2ZpbGUsIGhkciwgaGRybGVuKTsKKwkJcGFja19zaXplICs9IGhkcmxlbjsKKworCQloZHJbcG9zXSA9IG9mcyAmIDEyNzsKKwkJd2hpbGUgKG9mcyA+Pj0gNykKKwkJCWhkclstLXBvc10gPSAxMjggfCAoLS1vZnMgJiAxMjcpOworCQlzaGExd3JpdGUocGFja19maWxlLCBoZHIgKyBwb3MsIHNpemVvZihoZHIpIC0gcG9zKTsKKwkJcGFja19zaXplICs9IHNpemVvZihoZHIpIC0gcG9zOworCX0gZWxzZSB7CisJCWUtPmRlcHRoID0gMDsKKwkJaGRybGVuID0gZW5jb2RlX2luX3BhY2tfb2JqZWN0X2hlYWRlcih0eXBlLCBkYXQtPmxlbiwgaGRyKTsKKwkJc2hhMXdyaXRlKHBhY2tfZmlsZSwgaGRyLCBoZHJsZW4pOworCQlwYWNrX3NpemUgKz0gaGRybGVuOworCX0KKworCXNoYTF3cml0ZShwYWNrX2ZpbGUsIG91dCwgcy50b3RhbF9vdXQpOworCXBhY2tfc2l6ZSArPSBzLnRvdGFsX291dDsKKworCWUtPmlkeC5jcmMzMiA9IGNyYzMyX2VuZChwYWNrX2ZpbGUpOworCisJZnJlZShvdXQpOworCWZyZWUoZGVsdGEpOworCWlmIChsYXN0KSB7CisJCWlmIChsYXN0LT5ub19zd2FwKSB7CisJCQlsYXN0LT5kYXRhID0gKmRhdDsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9zd2FwKCZsYXN0LT5kYXRhLCBkYXQpOworCQl9CisJCWxhc3QtPm9mZnNldCA9IGUtPmlkeC5vZmZzZXQ7CisJCWxhc3QtPmRlcHRoID0gZS0+ZGVwdGg7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0cnVuY2F0ZV9wYWNrKHN0cnVjdCBzaGExZmlsZV9jaGVja3BvaW50ICpjaGVja3BvaW50KQoreworCWlmIChzaGExZmlsZV90cnVuY2F0ZShwYWNrX2ZpbGUsIGNoZWNrcG9pbnQpKQorCQlkaWVfZXJybm8oImNhbm5vdCB0cnVuY2F0ZSBwYWNrIHRvIHNraXAgZHVwbGljYXRlIik7CisJcGFja19zaXplID0gY2hlY2twb2ludC0+b2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCBzdHJlYW1fYmxvYih1aW50bWF4X3QgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExb3V0LCB1aW50bWF4X3QgbWFyaykKK3sKKwlzaXplX3QgaW5fc3ogPSA2NCAqIDEwMjQsIG91dF9zeiA9IDY0ICogMTAyNDsKKwl1bnNpZ25lZCBjaGFyICppbl9idWYgPSB4bWFsbG9jKGluX3N6KTsKKwl1bnNpZ25lZCBjaGFyICpvdXRfYnVmID0geG1hbGxvYyhvdXRfc3opOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBsb25nIGhkcmxlbjsKKwlvZmZfdCBvZmZzZXQ7CisJZ2l0X1NIQV9DVFggYzsKKwlnaXRfenN0cmVhbSBzOworCXN0cnVjdCBzaGExZmlsZV9jaGVja3BvaW50IGNoZWNrcG9pbnQ7CisJaW50IHN0YXR1cyA9IFpfT0s7CisKKwkvKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGF1dG8tY2hlY2twb2ludC4gKi8KKwlpZiAoKG1heF9wYWNrc2l6ZSAmJiAocGFja19zaXplICsgNjAgKyBsZW4pID4gbWF4X3BhY2tzaXplKQorCQl8fCAocGFja19zaXplICsgNjAgKyBsZW4pIDwgcGFja19zaXplKQorCQljeWNsZV9wYWNrZmlsZSgpOworCisJc2hhMWZpbGVfY2hlY2twb2ludChwYWNrX2ZpbGUsICZjaGVja3BvaW50KTsKKwlvZmZzZXQgPSBjaGVja3BvaW50Lm9mZnNldDsKKworCWhkcmxlbiA9IHNucHJpbnRmKChjaGFyICopb3V0X2J1Ziwgb3V0X3N6LCAiYmxvYiAlIiBQUkl1TUFYLCBsZW4pICsgMTsKKwlpZiAob3V0X3N6IDw9IGhkcmxlbikKKwkJZGllKCJpbXBvc3NpYmx5IGxhcmdlIG9iamVjdCBoZWFkZXIiKTsKKworCWdpdF9TSEExX0luaXQoJmMpOworCWdpdF9TSEExX1VwZGF0ZSgmYywgb3V0X2J1ZiwgaGRybGVuKTsKKworCWNyYzMyX2JlZ2luKHBhY2tfZmlsZSk7CisKKwltZW1zZXQoJnMsIDAsIHNpemVvZihzKSk7CisJZ2l0X2RlZmxhdGVfaW5pdCgmcywgcGFja19jb21wcmVzc2lvbl9sZXZlbCk7CisKKwloZHJsZW4gPSBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKE9CSl9CTE9CLCBsZW4sIG91dF9idWYpOworCWlmIChvdXRfc3ogPD0gaGRybGVuKQorCQlkaWUoImltcG9zc2libHkgbGFyZ2Ugb2JqZWN0IGhlYWRlciIpOworCisJcy5uZXh0X291dCA9IG91dF9idWYgKyBoZHJsZW47CisJcy5hdmFpbF9vdXQgPSBvdXRfc3ogLSBoZHJsZW47CisKKwl3aGlsZSAoc3RhdHVzICE9IFpfU1RSRUFNX0VORCkgeworCQlpZiAoMCA8IGxlbiAmJiAhcy5hdmFpbF9pbikgeworCQkJc2l6ZV90IGNudCA9IGluX3N6IDwgbGVuID8gaW5fc3ogOiAoc2l6ZV90KWxlbjsKKwkJCXNpemVfdCBuID0gZnJlYWQoaW5fYnVmLCAxLCBjbnQsIHN0ZGluKTsKKwkJCWlmICghbiAmJiBmZW9mKHN0ZGluKSkKKwkJCQlkaWUoIkVPRiBpbiBkYXRhICglIiBQUkl1TUFYICIgYnl0ZXMgcmVtYWluaW5nKSIsIGxlbik7CisKKwkJCWdpdF9TSEExX1VwZGF0ZSgmYywgaW5fYnVmLCBuKTsKKwkJCXMubmV4dF9pbiA9IGluX2J1ZjsKKwkJCXMuYXZhaWxfaW4gPSBuOworCQkJbGVuIC09IG47CisJCX0KKworCQlzdGF0dXMgPSBnaXRfZGVmbGF0ZSgmcywgbGVuID8gMCA6IFpfRklOSVNIKTsKKworCQlpZiAoIXMuYXZhaWxfb3V0IHx8IHN0YXR1cyA9PSBaX1NUUkVBTV9FTkQpIHsKKwkJCXNpemVfdCBuID0gcy5uZXh0X291dCAtIG91dF9idWY7CisJCQlzaGExd3JpdGUocGFja19maWxlLCBvdXRfYnVmLCBuKTsKKwkJCXBhY2tfc2l6ZSArPSBuOworCQkJcy5uZXh0X291dCA9IG91dF9idWY7CisJCQlzLmF2YWlsX291dCA9IG91dF9zejsKKwkJfQorCisJCXN3aXRjaCAoc3RhdHVzKSB7CisJCWNhc2UgWl9PSzoKKwkJY2FzZSBaX0JVRl9FUlJPUjoKKwkJY2FzZSBaX1NUUkVBTV9FTkQ6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWRpZSgidW5leHBlY3RlZCBkZWZsYXRlIGZhaWx1cmU6ICVkIiwgc3RhdHVzKTsKKwkJfQorCX0KKwlnaXRfZGVmbGF0ZV9lbmQoJnMpOworCWdpdF9TSEExX0ZpbmFsKHNoYTEsICZjKTsKKworCWlmIChzaGExb3V0KQorCQloYXNoY3B5KHNoYTFvdXQsIHNoYTEpOworCisJZSA9IGluc2VydF9vYmplY3Qoc2hhMSk7CisKKwlpZiAobWFyaykKKwkJaW5zZXJ0X21hcmsobWFyaywgZSk7CisKKwlpZiAoZS0+aWR4Lm9mZnNldCkgeworCQlkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0rKzsKKwkJdHJ1bmNhdGVfcGFjaygmY2hlY2twb2ludCk7CisKKwl9IGVsc2UgaWYgKGZpbmRfc2hhMV9wYWNrKHNoYTEsIHBhY2tlZF9naXQpKSB7CisJCWUtPnR5cGUgPSBPQkpfQkxPQjsKKwkJZS0+cGFja19pZCA9IE1BWF9QQUNLX0lEOworCQllLT5pZHgub2Zmc2V0ID0gMTsgLyoganVzdCBub3QgemVybyEgKi8KKwkJZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbT0JKX0JMT0JdKys7CisJCXRydW5jYXRlX3BhY2soJmNoZWNrcG9pbnQpOworCisJfSBlbHNlIHsKKwkJZS0+ZGVwdGggPSAwOworCQllLT50eXBlID0gT0JKX0JMT0I7CisJCWUtPnBhY2tfaWQgPSBwYWNrX2lkOworCQllLT5pZHgub2Zmc2V0ID0gb2Zmc2V0OworCQllLT5pZHguY3JjMzIgPSBjcmMzMl9lbmQocGFja19maWxlKTsKKwkJb2JqZWN0X2NvdW50Kys7CisJCW9iamVjdF9jb3VudF9ieV90eXBlW09CSl9CTE9CXSsrOworCX0KKworCWZyZWUoaW5fYnVmKTsKKwlmcmVlKG91dF9idWYpOworfQorCisvKiBBbGwgY2FsbHMgbXVzdCBiZSBndWFyZGVkIGJ5IGZpbmRfb2JqZWN0KCkgb3IgZmluZF9tYXJrKCkgdG8KKyAqIGVuc3VyZSB0aGUgJ3N0cnVjdCBvYmplY3RfZW50cnknIHBhc3NlZCB3YXMgd3JpdHRlbiBieSB0aGlzCisgKiBwcm9jZXNzIGluc3RhbmNlLiAgV2UgdW5wYWNrIHRoZSBlbnRyeSBieSB0aGUgb2Zmc2V0LCBhdm9pZGluZworICogdGhlIG5lZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIC5pZHggZmlsZS4gIFRoaXMgdW5wYWNraW5nIHJ1bGUKKyAqIHdvcmtzIGJlY2F1c2Ugd2Ugb25seSB1c2UgT0JKX1JFRl9ERUxUQSB3aXRoaW4gdGhlIHBhY2tmaWxlcworICogY3JlYXRlZCBieSBmYXN0LWltcG9ydC4KKyAqCisgKiBvZSBtdXN0IG5vdCBiZSBOVUxMLiAgU3VjaCBhbiBvZSB1c3VhbGx5IGNvbWVzIGZyb20gZ2l2aW5nCisgKiBhbiB1bmtub3duIFNIQS0xIHRvIGZpbmRfb2JqZWN0KCkgb3IgYW4gdW5kZWZpbmVkIG1hcmsgdG8KKyAqIGZpbmRfbWFyaygpLiAgQ2FsbGVycyBtdXN0IHRlc3QgZm9yIHRoaXMgY29uZGl0aW9uIGFuZCB1c2UKKyAqIHRoZSBzdGFuZGFyZCByZWFkX3NoYTFfZmlsZSgpIHdoZW4gaXQgaGFwcGVucy4KKyAqCisgKiBvZS0+cGFja19pZCBtdXN0IG5vdCBiZSBNQVhfUEFDS19JRC4gIFN1Y2ggYW4gb2UgaXMgdXN1YWxseSBmcm9tCisgKiBmaW5kX21hcmsoKSwgd2hlcmUgdGhlIG1hcmsgd2FzIHJlbG9hZGVkIGZyb20gYW4gZXhpc3RpbmcgbWFya3MKKyAqIGZpbGUgYW5kIGlzIHJlZmVyZW5jaW5nIGFuIG9iamVjdCB0aGF0IHRoaXMgZmFzdC1pbXBvcnQgcHJvY2VzcworICogaW5zdGFuY2UgZGlkIG5vdCB3cml0ZSBvdXQgdG8gYSBwYWNrZmlsZS4gIENhbGxlcnMgbXVzdCB0ZXN0IGZvcgorICogdGhpcyBjb25kaXRpb24gYW5kIHVzZSByZWFkX3NoYTFfZmlsZSgpIGluc3RlYWQuCisgKi8KK3N0YXRpYyB2b2lkICpnZmlfdW5wYWNrX2VudHJ5KAorCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lLAorCXVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGFsbF9wYWNrc1tvZS0+cGFja19pZF07CisJaWYgKHAgPT0gcGFja19kYXRhICYmIHAtPnBhY2tfc2l6ZSA8IChwYWNrX3NpemUgKyAyMCkpIHsKKwkJLyogVGhlIG9iamVjdCBpcyBzdG9yZWQgaW4gdGhlIHBhY2tmaWxlIHdlIGFyZSB3cml0aW5nIHRvCisJCSAqIGFuZCB3ZSBoYXZlIG1vZGlmaWVkIGl0IHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugc2Nhbm5lZAorCQkgKiBiYWNrIHRvIHJlYWQgYSBwcmV2aW91c2x5IHdyaXR0ZW4gb2JqZWN0LiAgSWYgYW4gb2xkCisJCSAqIHdpbmRvdyBjb3ZlcmVkIFtwLT5wYWNrX3NpemUsIHAtPnBhY2tfc2l6ZSArIDIwKSBpdHMKKwkJICogZGF0YSBpcyBzdGFsZSBhbmQgaXMgbm90IHZhbGlkLiAgQ2xvc2luZyBhbGwgd2luZG93cworCQkgKiBhbmQgdXBkYXRpbmcgdGhlIHBhY2tmaWxlIGxlbmd0aCBlbnN1cmVzIHdlIGNhbiByZWFkCisJCSAqIHRoZSBuZXdseSB3cml0dGVuIGRhdGEuCisJCSAqLworCQljbG9zZV9wYWNrX3dpbmRvd3MocCk7CisJCXNoYTFmbHVzaChwYWNrX2ZpbGUpOworCisJCS8qIFdlIGhhdmUgdG8gb2ZmZXIgMjAgYnl0ZXMgYWRkaXRpb25hbCBvbiB0aGUgZW5kIG9mCisJCSAqIHRoZSBwYWNrZmlsZSBhcyB0aGUgY29yZSB1bnBhY2tlciBjb2RlIGFzc3VtZXMgdGhlCisJCSAqIGZvb3RlciBpcyBwcmVzZW50IGF0IHRoZSBmaWxlIGVuZCBhbmQgbXVzdCBwcm9taXNlCisJCSAqIGF0IGxlYXN0IDIwIGJ5dGVzIHdpdGhpbiBhbnkgd2luZG93IGl0IG1hcHMuICBCdXQKKwkJICogd2UgZG9uJ3QgYWN0dWFsbHkgY3JlYXRlIHRoZSBmb290ZXIgaGVyZS4KKwkJICovCisJCXAtPnBhY2tfc2l6ZSA9IHBhY2tfc2l6ZSArIDIwOworCX0KKwlyZXR1cm4gdW5wYWNrX2VudHJ5KHAsIG9lLT5pZHgub2Zmc2V0LCAmdHlwZSwgc2l6ZXApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X21vZGUoY29uc3QgY2hhciAqc3RyLCB1aW50MTZfdCAqbW9kZXApCit7CisJdW5zaWduZWQgY2hhciBjOworCXVpbnQxNl90IG1vZGUgPSAwOworCisJd2hpbGUgKChjID0gKnN0cisrKSAhPSAnICcpIHsKKwkJaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykKKwkJCXJldHVybiBOVUxMOworCQltb2RlID0gKG1vZGUgPDwgMykgKyAoYyAtICcwJyk7CisJfQorCSptb2RlcCA9IG1vZGU7CisJcmV0dXJuIHN0cjsKK30KKworc3RhdGljIHZvaWQgbG9hZF90cmVlKHN0cnVjdCB0cmVlX2VudHJ5ICpyb290KQoreworCXVuc2lnbmVkIGNoYXIgKnNoYTEgPSByb290LT52ZXJzaW9uc1sxXS5zaGExOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm15b2U7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJY2hhciAqYnVmOworCWNvbnN0IGNoYXIgKmM7CisKKwlyb290LT50cmVlID0gdCA9IG5ld190cmVlX2NvbnRlbnQoOCk7CisJaWYgKGlzX251bGxfc2hhMShzaGExKSkKKwkJcmV0dXJuOworCisJbXlvZSA9IGZpbmRfb2JqZWN0KHNoYTEpOworCWlmIChteW9lICYmIG15b2UtPnBhY2tfaWQgIT0gTUFYX1BBQ0tfSUQpIHsKKwkJaWYgKG15b2UtPnR5cGUgIT0gT0JKX1RSRUUpCisJCQlkaWUoIk5vdCBhIHRyZWU6ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCQl0LT5kZWx0YV9kZXB0aCA9IG15b2UtPmRlcHRoOworCQlidWYgPSBnZmlfdW5wYWNrX2VudHJ5KG15b2UsICZzaXplKTsKKwkJaWYgKCFidWYpCisJCQlkaWUoIkNhbid0IGxvYWQgdHJlZSAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9IGVsc2UgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghYnVmIHx8IHR5cGUgIT0gT0JKX1RSRUUpCisJCQlkaWUoIkNhbid0IGxvYWQgdHJlZSAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisKKwljID0gYnVmOworCXdoaWxlIChjICE9IChidWYgKyBzaXplKSkgeworCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSA9IG5ld190cmVlX2VudHJ5KCk7CisKKwkJaWYgKHQtPmVudHJ5X2NvdW50ID09IHQtPmVudHJ5X2NhcGFjaXR5KQorCQkJcm9vdC0+dHJlZSA9IHQgPSBncm93X3RyZWVfY29udGVudCh0LCB0LT5lbnRyeV9jb3VudCk7CisJCXQtPmVudHJpZXNbdC0+ZW50cnlfY291bnQrK10gPSBlOworCisJCWUtPnRyZWUgPSBOVUxMOworCQljID0gZ2V0X21vZGUoYywgJmUtPnZlcnNpb25zWzFdLm1vZGUpOworCQlpZiAoIWMpCisJCQlkaWUoIkNvcnJ1cHQgbW9kZSBpbiAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJZS0+dmVyc2lvbnNbMF0ubW9kZSA9IGUtPnZlcnNpb25zWzFdLm1vZGU7CisJCWUtPm5hbWUgPSB0b19hdG9tKGMsIHN0cmxlbihjKSk7CisJCWMgKz0gZS0+bmFtZS0+c3RyX2xlbiArIDE7CisJCWhhc2hjcHkoZS0+dmVyc2lvbnNbMF0uc2hhMSwgKHVuc2lnbmVkIGNoYXIgKiljKTsKKwkJaGFzaGNweShlLT52ZXJzaW9uc1sxXS5zaGExLCAodW5zaWduZWQgY2hhciAqKWMpOworCQljICs9IDIwOworCX0KKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgdGVjbXAwIChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IHRyZWVfZW50cnkgKmEgPSAqKChzdHJ1Y3QgdHJlZV9lbnRyeSoqKV9hKTsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqYiA9ICooKHN0cnVjdCB0cmVlX2VudHJ5KiopX2IpOworCXJldHVybiBiYXNlX25hbWVfY29tcGFyZSgKKwkJYS0+bmFtZS0+c3RyX2RhdCwgYS0+bmFtZS0+c3RyX2xlbiwgYS0+dmVyc2lvbnNbMF0ubW9kZSwKKwkJYi0+bmFtZS0+c3RyX2RhdCwgYi0+bmFtZS0+c3RyX2xlbiwgYi0+dmVyc2lvbnNbMF0ubW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgdGVjbXAxIChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IHRyZWVfZW50cnkgKmEgPSAqKChzdHJ1Y3QgdHJlZV9lbnRyeSoqKV9hKTsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqYiA9ICooKHN0cnVjdCB0cmVlX2VudHJ5KiopX2IpOworCXJldHVybiBiYXNlX25hbWVfY29tcGFyZSgKKwkJYS0+bmFtZS0+c3RyX2RhdCwgYS0+bmFtZS0+c3RyX2xlbiwgYS0+dmVyc2lvbnNbMV0ubW9kZSwKKwkJYi0+bmFtZS0+c3RyX2RhdCwgYi0+bmFtZS0+c3RyX2xlbiwgYi0+dmVyc2lvbnNbMV0ubW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1rdHJlZShzdHJ1Y3QgdHJlZV9jb250ZW50ICp0LCBpbnQgdiwgc3RydWN0IHN0cmJ1ZiAqYikKK3sKKwlzaXplX3QgbWF4bGVuID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghdikKKwkJcXNvcnQodC0+ZW50cmllcyx0LT5lbnRyeV9jb3VudCxzaXplb2YodC0+ZW50cmllc1swXSksdGVjbXAwKTsKKwllbHNlCisJCXFzb3J0KHQtPmVudHJpZXMsdC0+ZW50cnlfY291bnQsc2l6ZW9mKHQtPmVudHJpZXNbMF0pLHRlY21wMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQlpZiAodC0+ZW50cmllc1tpXS0+dmVyc2lvbnNbdl0ubW9kZSkKKwkJCW1heGxlbiArPSB0LT5lbnRyaWVzW2ldLT5uYW1lLT5zdHJfbGVuICsgMzQ7CisJfQorCisJc3RyYnVmX3Jlc2V0KGIpOworCXN0cmJ1Zl9ncm93KGIsIG1heGxlbik7CisJZm9yIChpID0gMDsgaSA8IHQtPmVudHJ5X2NvdW50OyBpKyspIHsKKwkJc3RydWN0IHRyZWVfZW50cnkgKmUgPSB0LT5lbnRyaWVzW2ldOworCQlpZiAoIWUtPnZlcnNpb25zW3ZdLm1vZGUpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX2FkZGYoYiwgIiVvICVzJWMiLAorCQkJKHVuc2lnbmVkIGludCkoZS0+dmVyc2lvbnNbdl0ubW9kZSAmIH5OT19ERUxUQSksCisJCQllLT5uYW1lLT5zdHJfZGF0LCAnXDAnKTsKKwkJc3RyYnVmX2FkZChiLCBlLT52ZXJzaW9uc1t2XS5zaGExLCAyMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9yZV90cmVlKHN0cnVjdCB0cmVlX2VudHJ5ICpyb290KQoreworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnQgPSByb290LT50cmVlOworCXVuc2lnbmVkIGludCBpLCBqLCBkZWw7CisJc3RydWN0IGxhc3Rfb2JqZWN0IGxvID0geyBTVFJCVUZfSU5JVCwgMCwgMCwgLyogbm9fc3dhcCAqLyAxIH07CisJc3RydWN0IG9iamVjdF9lbnRyeSAqbGUgPSBOVUxMOworCisJaWYgKCFpc19udWxsX3NoYTEocm9vdC0+dmVyc2lvbnNbMV0uc2hhMSkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWlmICh0LT5lbnRyaWVzW2ldLT50cmVlKQorCQkJc3RvcmVfdHJlZSh0LT5lbnRyaWVzW2ldKTsKKwl9CisKKwlpZiAoIShyb290LT52ZXJzaW9uc1swXS5tb2RlICYgTk9fREVMVEEpKQorCQlsZSA9IGZpbmRfb2JqZWN0KHJvb3QtPnZlcnNpb25zWzBdLnNoYTEpOworCWlmIChTX0lTRElSKHJvb3QtPnZlcnNpb25zWzBdLm1vZGUpICYmIGxlICYmIGxlLT5wYWNrX2lkID09IHBhY2tfaWQpIHsKKwkJbWt0cmVlKHQsIDAsICZvbGRfdHJlZSk7CisJCWxvLmRhdGEgPSBvbGRfdHJlZTsKKwkJbG8ub2Zmc2V0ID0gbGUtPmlkeC5vZmZzZXQ7CisJCWxvLmRlcHRoID0gdC0+ZGVsdGFfZGVwdGg7CisJfQorCisJbWt0cmVlKHQsIDEsICZuZXdfdHJlZSk7CisJc3RvcmVfb2JqZWN0KE9CSl9UUkVFLCAmbmV3X3RyZWUsICZsbywgcm9vdC0+dmVyc2lvbnNbMV0uc2hhMSwgMCk7CisKKwl0LT5kZWx0YV9kZXB0aCA9IGxvLmRlcHRoOworCWZvciAoaSA9IDAsIGogPSAwLCBkZWwgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSA9IHQtPmVudHJpZXNbaV07CisJCWlmIChlLT52ZXJzaW9uc1sxXS5tb2RlKSB7CisJCQllLT52ZXJzaW9uc1swXS5tb2RlID0gZS0+dmVyc2lvbnNbMV0ubW9kZTsKKwkJCWhhc2hjcHkoZS0+dmVyc2lvbnNbMF0uc2hhMSwgZS0+dmVyc2lvbnNbMV0uc2hhMSk7CisJCQl0LT5lbnRyaWVzW2orK10gPSBlOworCQl9IGVsc2UgeworCQkJcmVsZWFzZV90cmVlX2VudHJ5KGUpOworCQkJZGVsKys7CisJCX0KKwl9CisJdC0+ZW50cnlfY291bnQgLT0gZGVsOworfQorCitzdGF0aWMgdm9pZCB0cmVlX2NvbnRlbnRfcmVwbGFjZSgKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCWNvbnN0IHVpbnQxNl90IG1vZGUsCisJc3RydWN0IHRyZWVfY29udGVudCAqbmV3dHJlZSkKK3sKKwlpZiAoIVNfSVNESVIobW9kZSkpCisJCWRpZSgiUm9vdCBjYW5ub3QgYmUgYSBub24tZGlyZWN0b3J5Iik7CisJaGFzaGNscihyb290LT52ZXJzaW9uc1swXS5zaGExKTsKKwloYXNoY3B5KHJvb3QtPnZlcnNpb25zWzFdLnNoYTEsIHNoYTEpOworCWlmIChyb290LT50cmVlKQorCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUocm9vdC0+dHJlZSk7CisJcm9vdC0+dHJlZSA9IG5ld3RyZWU7Cit9CisKK3N0YXRpYyBpbnQgdHJlZV9jb250ZW50X3NldCgKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwljb25zdCBjaGFyICpwLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJY29uc3QgdWludDE2X3QgbW9kZSwKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICpzdWJ0cmVlKQoreworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnQ7CisJY29uc3QgY2hhciAqc2xhc2gxOworCXVuc2lnbmVkIGludCBpLCBuOworCXN0cnVjdCB0cmVlX2VudHJ5ICplOworCisJc2xhc2gxID0gc3RyY2hyKHAsICcvJyk7CisJaWYgKHNsYXNoMSkKKwkJbiA9IHNsYXNoMSAtIHA7CisJZWxzZQorCQluID0gc3RybGVuKHApOworCWlmICghbikKKwkJZGllKCJFbXB0eSBwYXRoIGNvbXBvbmVudCBmb3VuZCBpbiBpbnB1dCIpOworCWlmICghc2xhc2gxICYmICFTX0lTRElSKG1vZGUpICYmIHN1YnRyZWUpCisJCWRpZSgiTm9uLWRpcmVjdG9yaWVzIGNhbm5vdCBoYXZlIHN1YnRyZWVzIik7CisKKwlpZiAoIXJvb3QtPnRyZWUpCisJCWxvYWRfdHJlZShyb290KTsKKwl0ID0gcm9vdC0+dHJlZTsKKwlmb3IgKGkgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQllID0gdC0+ZW50cmllc1tpXTsKKwkJaWYgKGUtPm5hbWUtPnN0cl9sZW4gPT0gbiAmJiAhc3RybmNtcF9pY2FzZShwLCBlLT5uYW1lLT5zdHJfZGF0LCBuKSkgeworCQkJaWYgKCFzbGFzaDEpIHsKKwkJCQlpZiAoIVNfSVNESVIobW9kZSkKKwkJCQkJCSYmIGUtPnZlcnNpb25zWzFdLm1vZGUgPT0gbW9kZQorCQkJCQkJJiYgIWhhc2hjbXAoZS0+dmVyc2lvbnNbMV0uc2hhMSwgc2hhMSkpCisJCQkJCXJldHVybiAwOworCQkJCWUtPnZlcnNpb25zWzFdLm1vZGUgPSBtb2RlOworCQkJCWhhc2hjcHkoZS0+dmVyc2lvbnNbMV0uc2hhMSwgc2hhMSk7CisJCQkJaWYgKGUtPnRyZWUpCisJCQkJCXJlbGVhc2VfdHJlZV9jb250ZW50X3JlY3Vyc2l2ZShlLT50cmVlKTsKKwkJCQllLT50cmVlID0gc3VidHJlZTsKKworCQkJCS8qCisJCQkJICogV2UgbmVlZCB0byBsZWF2ZSBlLT52ZXJzaW9uc1swXS5zaGExIGFsb25lCisJCQkJICogdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBwcmVpbWFnZSB0cmVlIHVzZWQKKwkJCQkgKiB3aGVuIHdyaXRpbmcgb3V0IHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorCQkJCSAqIEJ1dCBhZnRlciByZXBsYWNpbmcgdGhlIHN1YmRpciB3aXRoIGEKKwkJCQkgKiBjb21wbGV0ZWx5IGRpZmZlcmVudCBvbmUsIGl0J3Mgbm90IGEgZ29vZAorCQkJCSAqIGRlbHRhIGJhc2UgYW55IG1vcmUsIGFuZCBiZXNpZGVzLCB3ZSd2ZQorCQkJCSAqIHRocm93biBhd2F5IHRoZSB0cmVlIGVudHJpZXMgbmVlZGVkIHRvCisJCQkJICogbWFrZSBhIGRlbHRhIGFnYWluc3QgaXQuCisJCQkJICoKKwkJCQkgKiBTbyBsZXQncyBqdXN0IGV4cGxpY2l0bHkgZGlzYWJsZSBkZWx0YXMKKwkJCQkgKiBmb3IgdGhlIHN1YnRyZWUuCisJCQkJICovCisJCQkJaWYgKFNfSVNESVIoZS0+dmVyc2lvbnNbMF0ubW9kZSkpCisJCQkJCWUtPnZlcnNpb25zWzBdLm1vZGUgfD0gTk9fREVMVEE7CisKKwkJCQloYXNoY2xyKHJvb3QtPnZlcnNpb25zWzFdLnNoYTEpOworCQkJCXJldHVybiAxOworCQkJfQorCQkJaWYgKCFTX0lTRElSKGUtPnZlcnNpb25zWzFdLm1vZGUpKSB7CisJCQkJZS0+dHJlZSA9IG5ld190cmVlX2NvbnRlbnQoOCk7CisJCQkJZS0+dmVyc2lvbnNbMV0ubW9kZSA9IFNfSUZESVI7CisJCQl9CisJCQlpZiAoIWUtPnRyZWUpCisJCQkJbG9hZF90cmVlKGUpOworCQkJaWYgKHRyZWVfY29udGVudF9zZXQoZSwgc2xhc2gxICsgMSwgc2hhMSwgbW9kZSwgc3VidHJlZSkpIHsKKwkJCQloYXNoY2xyKHJvb3QtPnZlcnNpb25zWzFdLnNoYTEpOworCQkJCXJldHVybiAxOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAodC0+ZW50cnlfY291bnQgPT0gdC0+ZW50cnlfY2FwYWNpdHkpCisJCXJvb3QtPnRyZWUgPSB0ID0gZ3Jvd190cmVlX2NvbnRlbnQodCwgdC0+ZW50cnlfY291bnQpOworCWUgPSBuZXdfdHJlZV9lbnRyeSgpOworCWUtPm5hbWUgPSB0b19hdG9tKHAsIG4pOworCWUtPnZlcnNpb25zWzBdLm1vZGUgPSAwOworCWhhc2hjbHIoZS0+dmVyc2lvbnNbMF0uc2hhMSk7CisJdC0+ZW50cmllc1t0LT5lbnRyeV9jb3VudCsrXSA9IGU7CisJaWYgKHNsYXNoMSkgeworCQllLT50cmVlID0gbmV3X3RyZWVfY29udGVudCg4KTsKKwkJZS0+dmVyc2lvbnNbMV0ubW9kZSA9IFNfSUZESVI7CisJCXRyZWVfY29udGVudF9zZXQoZSwgc2xhc2gxICsgMSwgc2hhMSwgbW9kZSwgc3VidHJlZSk7CisJfSBlbHNlIHsKKwkJZS0+dHJlZSA9IHN1YnRyZWU7CisJCWUtPnZlcnNpb25zWzFdLm1vZGUgPSBtb2RlOworCQloYXNoY3B5KGUtPnZlcnNpb25zWzFdLnNoYTEsIHNoYTEpOworCX0KKwloYXNoY2xyKHJvb3QtPnZlcnNpb25zWzFdLnNoYTEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRyZWVfY29udGVudF9yZW1vdmUoCisJc3RydWN0IHRyZWVfZW50cnkgKnJvb3QsCisJY29uc3QgY2hhciAqcCwKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqYmFja3VwX2xlYWYpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwljb25zdCBjaGFyICpzbGFzaDE7CisJdW5zaWduZWQgaW50IGksIG47CisJc3RydWN0IHRyZWVfZW50cnkgKmU7CisKKwlzbGFzaDEgPSBzdHJjaHIocCwgJy8nKTsKKwlpZiAoc2xhc2gxKQorCQluID0gc2xhc2gxIC0gcDsKKwllbHNlCisJCW4gPSBzdHJsZW4ocCk7CisKKwlpZiAoIXJvb3QtPnRyZWUpCisJCWxvYWRfdHJlZShyb290KTsKKwl0ID0gcm9vdC0+dHJlZTsKKwlmb3IgKGkgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQllID0gdC0+ZW50cmllc1tpXTsKKwkJaWYgKGUtPm5hbWUtPnN0cl9sZW4gPT0gbiAmJiAhc3RybmNtcF9pY2FzZShwLCBlLT5uYW1lLT5zdHJfZGF0LCBuKSkgeworCQkJaWYgKHNsYXNoMSAmJiAhU19JU0RJUihlLT52ZXJzaW9uc1sxXS5tb2RlKSkKKwkJCQkvKgorCQkJCSAqIElmIHAgbmFtZXMgYSBmaWxlIGluIHNvbWUgc3ViZGlyZWN0b3J5LCBhbmQgYQorCQkJCSAqIGZpbGUgb3Igc3ltbGluayBtYXRjaGluZyB0aGUgbmFtZSBvZiB0aGUKKwkJCQkgKiBwYXJlbnQgZGlyZWN0b3J5IG9mIHAgZXhpc3RzLCB0aGVuIHAgY2Fubm90CisJCQkJICogZXhpc3QgYW5kIG5lZWQgbm90IGJlIGRlbGV0ZWQuCisJCQkJICovCisJCQkJcmV0dXJuIDE7CisJCQlpZiAoIXNsYXNoMSB8fCAhU19JU0RJUihlLT52ZXJzaW9uc1sxXS5tb2RlKSkKKwkJCQlnb3RvIGRlbF9lbnRyeTsKKwkJCWlmICghZS0+dHJlZSkKKwkJCQlsb2FkX3RyZWUoZSk7CisJCQlpZiAodHJlZV9jb250ZW50X3JlbW92ZShlLCBzbGFzaDEgKyAxLCBiYWNrdXBfbGVhZikpIHsKKwkJCQlmb3IgKG4gPSAwOyBuIDwgZS0+dHJlZS0+ZW50cnlfY291bnQ7IG4rKykgeworCQkJCQlpZiAoZS0+dHJlZS0+ZW50cmllc1tuXS0+dmVyc2lvbnNbMV0ubW9kZSkgeworCQkJCQkJaGFzaGNscihyb290LT52ZXJzaW9uc1sxXS5zaGExKTsKKwkJCQkJCXJldHVybiAxOworCQkJCQl9CisJCQkJfQorCQkJCWJhY2t1cF9sZWFmID0gTlVMTDsKKwkJCQlnb3RvIGRlbF9lbnRyeTsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAwOworCitkZWxfZW50cnk6CisJaWYgKGJhY2t1cF9sZWFmKQorCQltZW1jcHkoYmFja3VwX2xlYWYsIGUsIHNpemVvZigqYmFja3VwX2xlYWYpKTsKKwllbHNlIGlmIChlLT50cmVlKQorCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoZS0+dHJlZSk7CisJZS0+dHJlZSA9IE5VTEw7CisJZS0+dmVyc2lvbnNbMV0ubW9kZSA9IDA7CisJaGFzaGNscihlLT52ZXJzaW9uc1sxXS5zaGExKTsKKwloYXNoY2xyKHJvb3QtPnZlcnNpb25zWzFdLnNoYTEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRyZWVfY29udGVudF9nZXQoCisJc3RydWN0IHRyZWVfZW50cnkgKnJvb3QsCisJY29uc3QgY2hhciAqcCwKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqbGVhZikKK3sKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0OworCWNvbnN0IGNoYXIgKnNsYXNoMTsKKwl1bnNpZ25lZCBpbnQgaSwgbjsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqZTsKKworCXNsYXNoMSA9IHN0cmNocihwLCAnLycpOworCWlmIChzbGFzaDEpCisJCW4gPSBzbGFzaDEgLSBwOworCWVsc2UKKwkJbiA9IHN0cmxlbihwKTsKKwlpZiAoIW4pCisJCWRpZSgiRW1wdHkgcGF0aCBjb21wb25lbnQgZm91bmQgaW4gaW5wdXQiKTsKKworCWlmICghcm9vdC0+dHJlZSkKKwkJbG9hZF90cmVlKHJvb3QpOworCXQgPSByb290LT50cmVlOworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWUgPSB0LT5lbnRyaWVzW2ldOworCQlpZiAoZS0+bmFtZS0+c3RyX2xlbiA9PSBuICYmICFzdHJuY21wX2ljYXNlKHAsIGUtPm5hbWUtPnN0cl9kYXQsIG4pKSB7CisJCQlpZiAoIXNsYXNoMSkgeworCQkJCW1lbWNweShsZWFmLCBlLCBzaXplb2YoKmxlYWYpKTsKKwkJCQlpZiAoZS0+dHJlZSAmJiBpc19udWxsX3NoYTEoZS0+dmVyc2lvbnNbMV0uc2hhMSkpCisJCQkJCWxlYWYtPnRyZWUgPSBkdXBfdHJlZV9jb250ZW50KGUtPnRyZWUpOworCQkJCWVsc2UKKwkJCQkJbGVhZi0+dHJlZSA9IE5VTEw7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlpZiAoIVNfSVNESVIoZS0+dmVyc2lvbnNbMV0ubW9kZSkpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoIWUtPnRyZWUpCisJCQkJbG9hZF90cmVlKGUpOworCQkJcmV0dXJuIHRyZWVfY29udGVudF9nZXQoZSwgc2xhc2gxICsgMSwgbGVhZik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2JyYW5jaChzdHJ1Y3QgYnJhbmNoICpiKQoreworCXN0YXRpYyBjb25zdCBjaGFyICptc2cgPSAiZmFzdC1pbXBvcnQiOworCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKwl1bnNpZ25lZCBjaGFyIG9sZF9zaGExWzIwXTsKKworCWlmIChpc19udWxsX3NoYTEoYi0+c2hhMSkpCisJCXJldHVybiAwOworCWlmIChyZWFkX3JlZihiLT5uYW1lLCBvbGRfc2hhMSkpCisJCWhhc2hjbHIob2xkX3NoYTEpOworCWxvY2sgPSBsb2NrX2FueV9yZWZfZm9yX3VwZGF0ZShiLT5uYW1lLCBvbGRfc2hhMSwgMCk7CisJaWYgKCFsb2NrKQorCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBsb2NrICVzIiwgYi0+bmFtZSk7CisJaWYgKCFmb3JjZV91cGRhdGUgJiYgIWlzX251bGxfc2hhMShvbGRfc2hhMSkpIHsKKwkJc3RydWN0IGNvbW1pdCAqb2xkX2NtaXQsICpuZXdfY21pdDsKKworCQlvbGRfY21pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShvbGRfc2hhMSwgMCk7CisJCW5ld19jbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KGItPnNoYTEsIDApOworCQlpZiAoIW9sZF9jbWl0IHx8ICFuZXdfY21pdCkgeworCQkJdW5sb2NrX3JlZihsb2NrKTsKKwkJCXJldHVybiBlcnJvcigiQnJhbmNoICVzIGlzIG1pc3NpbmcgY29tbWl0cy4iLCBiLT5uYW1lKTsKKwkJfQorCisJCWlmICghaW5fbWVyZ2VfYmFzZXMob2xkX2NtaXQsIG5ld19jbWl0KSkgeworCQkJdW5sb2NrX3JlZihsb2NrKTsKKwkJCXdhcm5pbmcoIk5vdCB1cGRhdGluZyAlcyIKKwkJCQkiIChuZXcgdGlwICVzIGRvZXMgbm90IGNvbnRhaW4gJXMpIiwKKwkJCQliLT5uYW1lLCBzaGExX3RvX2hleChiLT5zaGExKSwgc2hhMV90b19oZXgob2xkX3NoYTEpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAod3JpdGVfcmVmX3NoYTEobG9jaywgYi0+c2hhMSwgbXNnKSA8IDApCisJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHVwZGF0ZSAlcyIsIGItPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2JyYW5jaGVzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGJyYW5jaCAqYjsKKworCWZvciAoaSA9IDA7IGkgPCBicmFuY2hfdGFibGVfc3o7IGkrKykgeworCQlmb3IgKGIgPSBicmFuY2hfdGFibGVbaV07IGI7IGIgPSBiLT50YWJsZV9uZXh0X2JyYW5jaCkKKwkJCWZhaWx1cmUgfD0gdXBkYXRlX2JyYW5jaChiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfdGFncyh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICptc2cgPSAiZmFzdC1pbXBvcnQiOworCXN0cnVjdCB0YWcgKnQ7CisJc3RydWN0IHJlZl9sb2NrICpsb2NrOworCWNoYXIgcmVmX25hbWVbUEFUSF9NQVhdOworCisJZm9yICh0ID0gZmlyc3RfdGFnOyB0OyB0ID0gdC0+bmV4dF90YWcpIHsKKwkJc3ByaW50ZihyZWZfbmFtZSwgInRhZ3MvJXMiLCB0LT5uYW1lKTsKKwkJbG9jayA9IGxvY2tfcmVmX3NoYTEocmVmX25hbWUsIE5VTEwpOworCQlpZiAoIWxvY2sgfHwgd3JpdGVfcmVmX3NoYTEobG9jaywgdC0+c2hhMSwgbXNnKSA8IDApCisJCQlmYWlsdXJlIHw9IGVycm9yKCJVbmFibGUgdG8gdXBkYXRlICVzIiwgcmVmX25hbWUpOworCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF9tYXJrc19oZWxwZXIoRklMRSAqZiwKKwl1aW50bWF4X3QgYmFzZSwKKwlzdHJ1Y3QgbWFya19zZXQgKm0pCit7CisJdWludG1heF90IGs7CisJaWYgKG0tPnNoaWZ0KSB7CisJCWZvciAoayA9IDA7IGsgPCAxMDI0OyBrKyspIHsKKwkJCWlmIChtLT5kYXRhLnNldHNba10pCisJCQkJZHVtcF9tYXJrc19oZWxwZXIoZiwgYmFzZSArIChrIDw8IG0tPnNoaWZ0KSwKKwkJCQkJbS0+ZGF0YS5zZXRzW2tdKTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoayA9IDA7IGsgPCAxMDI0OyBrKyspIHsKKwkJCWlmIChtLT5kYXRhLm1hcmtlZFtrXSkKKwkJCQlmcHJpbnRmKGYsICI6JSIgUFJJdU1BWCAiICVzXG4iLCBiYXNlICsgaywKKwkJCQkJc2hhMV90b19oZXgobS0+ZGF0YS5tYXJrZWRba10tPmlkeC5zaGExKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfbWFya3Modm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBtYXJrX2xvY2s7CisJaW50IG1hcmtfZmQ7CisJRklMRSAqZjsKKworCWlmICghZXhwb3J0X21hcmtzX2ZpbGUpCisJCXJldHVybjsKKworCW1hcmtfZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZtYXJrX2xvY2ssIGV4cG9ydF9tYXJrc19maWxlLCAwKTsKKwlpZiAobWFya19mZCA8IDApIHsKKwkJZmFpbHVyZSB8PSBlcnJvcigiVW5hYmxlIHRvIHdyaXRlIG1hcmtzIGZpbGUgJXM6ICVzIiwKKwkJCWV4cG9ydF9tYXJrc19maWxlLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm47CisJfQorCisJZiA9IGZkb3BlbihtYXJrX2ZkLCAidyIpOworCWlmICghZikgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZtYXJrX2xvY2spOworCQlmYWlsdXJlIHw9IGVycm9yKCJVbmFibGUgdG8gd3JpdGUgbWFya3MgZmlsZSAlczogJXMiLAorCQkJZXhwb3J0X21hcmtzX2ZpbGUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoZSBsb2NrIGZpbGUgd2FzIGZkb3BlbigpJ2VkLCBpdCBzaG91bGQgbm90IGJlIGNsb3NlKCknZWQuCisJICogQXNzaWduIC0xIHRvIHRoZSBsb2NrIGZpbGUgZGVzY3JpcHRvciBzbyB0aGF0IGNvbW1pdF9sb2NrX2ZpbGUoKQorCSAqIHdvbid0IHRyeSB0byBjbG9zZSgpIGl0LgorCSAqLworCW1hcmtfbG9jay5mZCA9IC0xOworCisJZHVtcF9tYXJrc19oZWxwZXIoZiwgMCwgbWFya3MpOworCWlmIChmZXJyb3IoZikgfHwgZmNsb3NlKGYpKSB7CisJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJm1hcmtfbG9jayk7CisJCWZhaWx1cmUgfD0gZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBtYXJrcyBmaWxlICVzOiAlcyIsCisJCQlleHBvcnRfbWFya3NfZmlsZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjb21taXRfbG9ja19maWxlKCZtYXJrX2xvY2spKSB7CisJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJm1hcmtfbG9jayk7CisJCWZhaWx1cmUgfD0gZXJyb3IoIlVuYWJsZSB0byBjb21taXQgbWFya3MgZmlsZSAlczogJXMiLAorCQkJZXhwb3J0X21hcmtzX2ZpbGUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfbWFya3Modm9pZCkKK3sKKwljaGFyIGxpbmVbNTEyXTsKKwlGSUxFICpmID0gZm9wZW4oaW1wb3J0X21hcmtzX2ZpbGUsICJyIik7CisJaWYgKGYpCisJCTsKKwllbHNlIGlmIChpbXBvcnRfbWFya3NfZmlsZV9pZ25vcmVfbWlzc2luZyAmJiBlcnJubyA9PSBFTk9FTlQpCisJCXJldHVybjsgLyogTWFya3MgZmlsZSBkb2VzIG5vdCBleGlzdCAqLworCWVsc2UKKwkJZGllX2Vycm5vKCJjYW5ub3QgcmVhZCAnJXMnIiwgaW1wb3J0X21hcmtzX2ZpbGUpOworCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CisJCXVpbnRtYXhfdCBtYXJrOworCQljaGFyICplbmQ7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisKKwkJZW5kID0gc3RyY2hyKGxpbmUsICdcbicpOworCQlpZiAobGluZVswXSAhPSAnOicgfHwgIWVuZCkKKwkJCWRpZSgiY29ycnVwdCBtYXJrIGxpbmU6ICVzIiwgbGluZSk7CisJCSplbmQgPSAwOworCQltYXJrID0gc3RydG91bWF4KGxpbmUgKyAxLCAmZW5kLCAxMCk7CisJCWlmICghbWFyayB8fCBlbmQgPT0gbGluZSArIDEKKwkJCXx8ICplbmQgIT0gJyAnIHx8IGdldF9zaGExKGVuZCArIDEsIHNoYTEpKQorCQkJZGllKCJjb3JydXB0IG1hcmsgbGluZTogJXMiLCBsaW5lKTsKKwkJZSA9IGZpbmRfb2JqZWN0KHNoYTEpOworCQlpZiAoIWUpIHsKKwkJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJCQlpZiAodHlwZSA8IDApCisJCQkJZGllKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCWUgPSBpbnNlcnRfb2JqZWN0KHNoYTEpOworCQkJZS0+dHlwZSA9IHR5cGU7CisJCQllLT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJCQllLT5pZHgub2Zmc2V0ID0gMTsgLyoganVzdCBub3QgemVybyEgKi8KKwkJfQorCQlpbnNlcnRfbWFyayhtYXJrLCBlKTsKKwl9CisJZmNsb3NlKGYpOworfQorCisKK3N0YXRpYyBpbnQgcmVhZF9uZXh0X2NvbW1hbmQodm9pZCkKK3sKKwlzdGF0aWMgaW50IHN0ZGluX2VvZiA9IDA7CisKKwlpZiAoc3RkaW5fZW9mKSB7CisJCXVucmVhZF9jb21tYW5kX2J1ZiA9IDA7CisJCXJldHVybiBFT0Y7CisJfQorCisJZm9yICg7OykgeworCQlpZiAodW5yZWFkX2NvbW1hbmRfYnVmKSB7CisJCQl1bnJlYWRfY29tbWFuZF9idWYgPSAwOworCQl9IGVsc2UgeworCQkJc3RydWN0IHJlY2VudF9jb21tYW5kICpyYzsKKworCQkJc3RyYnVmX2RldGFjaCgmY29tbWFuZF9idWYsIE5VTEwpOworCQkJc3RkaW5fZW9mID0gc3RyYnVmX2dldGxpbmUoJmNvbW1hbmRfYnVmLCBzdGRpbiwgJ1xuJyk7CisJCQlpZiAoc3RkaW5fZW9mKQorCQkJCXJldHVybiBFT0Y7CisKKwkJCWlmICghc2Vlbl9kYXRhX2NvbW1hbmQKKwkJCQkmJiBwcmVmaXhjbXAoY29tbWFuZF9idWYuYnVmLCAiZmVhdHVyZSAiKQorCQkJCSYmIHByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJvcHRpb24gIikpIHsKKwkJCQlwYXJzZV9hcmd2KCk7CisJCQl9CisKKwkJCXJjID0gcmNfZnJlZTsKKwkJCWlmIChyYykKKwkJCQlyY19mcmVlID0gcmMtPm5leHQ7CisJCQllbHNlIHsKKwkJCQlyYyA9IGNtZF9oaXN0Lm5leHQ7CisJCQkJY21kX2hpc3QubmV4dCA9IHJjLT5uZXh0OworCQkJCWNtZF9oaXN0Lm5leHQtPnByZXYgPSAmY21kX2hpc3Q7CisJCQkJZnJlZShyYy0+YnVmKTsKKwkJCX0KKworCQkJcmMtPmJ1ZiA9IGNvbW1hbmRfYnVmLmJ1ZjsKKwkJCXJjLT5wcmV2ID0gY21kX3RhaWw7CisJCQlyYy0+bmV4dCA9IGNtZF9oaXN0LnByZXY7CisJCQlyYy0+cHJldi0+bmV4dCA9IHJjOworCQkJY21kX3RhaWwgPSByYzsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJjYXQtYmxvYiAiKSkgeworCQkJcGFyc2VfY2F0X2Jsb2IoKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjb21tYW5kX2J1Zi5idWZbMF0gPT0gJyMnKQorCQkJY29udGludWU7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgc2tpcF9vcHRpb25hbF9sZih2b2lkKQoreworCWludCB0ZXJtX2NoYXIgPSBmZ2V0YyhzdGRpbik7CisJaWYgKHRlcm1fY2hhciAhPSAnXG4nICYmIHRlcm1fY2hhciAhPSBFT0YpCisJCXVuZ2V0Yyh0ZXJtX2NoYXIsIHN0ZGluKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfbWFyayh2b2lkKQoreworCWlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgIm1hcmsgOiIpKSB7CisJCW5leHRfbWFyayA9IHN0cnRvdW1heChjb21tYW5kX2J1Zi5idWYgKyA2LCBOVUxMLCAxMCk7CisJCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJfQorCWVsc2UKKwkJbmV4dF9tYXJrID0gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9kYXRhKHN0cnVjdCBzdHJidWYgKnNiLCB1aW50bWF4X3QgbGltaXQsIHVpbnRtYXhfdCAqbGVuX3JlcykKK3sKKwlzdHJidWZfcmVzZXQoc2IpOworCisJaWYgKHByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJkYXRhICIpKQorCQlkaWUoIkV4cGVjdGVkICdkYXRhIG4nIGNvbW1hbmQsIGZvdW5kOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisKKwlpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYgKyA1LCAiPDwiKSkgeworCQljaGFyICp0ZXJtID0geHN0cmR1cChjb21tYW5kX2J1Zi5idWYgKyA1ICsgMik7CisJCXNpemVfdCB0ZXJtX2xlbiA9IGNvbW1hbmRfYnVmLmxlbiAtIDUgLSAyOworCisJCXN0cmJ1Zl9kZXRhY2goJmNvbW1hbmRfYnVmLCBOVUxMKTsKKwkJZm9yICg7OykgeworCQkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZjb21tYW5kX2J1Ziwgc3RkaW4sICdcbicpID09IEVPRikKKwkJCQlkaWUoIkVPRiBpbiBkYXRhICh0ZXJtaW5hdG9yICclcycgbm90IGZvdW5kKSIsIHRlcm0pOworCQkJaWYgKHRlcm1fbGVuID09IGNvbW1hbmRfYnVmLmxlbgorCQkJCSYmICFzdHJjbXAodGVybSwgY29tbWFuZF9idWYuYnVmKSkKKwkJCQlicmVhazsKKwkJCXN0cmJ1Zl9hZGRidWYoc2IsICZjb21tYW5kX2J1Zik7CisJCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCQl9CisJCWZyZWUodGVybSk7CisJfQorCWVsc2UgeworCQl1aW50bWF4X3QgbGVuID0gc3RydG91bWF4KGNvbW1hbmRfYnVmLmJ1ZiArIDUsIE5VTEwsIDEwKTsKKwkJc2l6ZV90IG4gPSAwLCBsZW5ndGggPSAoc2l6ZV90KWxlbjsKKworCQlpZiAobGltaXQgJiYgbGltaXQgPCBsZW4pIHsKKwkJCSpsZW5fcmVzID0gbGVuOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGxlbmd0aCA8IGxlbikKKwkJCWRpZSgiZGF0YSBpcyB0b28gbGFyZ2UgdG8gdXNlIGluIHRoaXMgY29udGV4dCIpOworCisJCXdoaWxlIChuIDwgbGVuZ3RoKSB7CisJCQlzaXplX3QgcyA9IHN0cmJ1Zl9mcmVhZChzYiwgbGVuZ3RoIC0gbiwgc3RkaW4pOworCQkJaWYgKCFzICYmIGZlb2Yoc3RkaW4pKQorCQkJCWRpZSgiRU9GIGluIGRhdGEgKCVsdSBieXRlcyByZW1haW5pbmcpIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKGxlbmd0aCAtIG4pKTsKKwkJCW4gKz0gczsKKwkJfQorCX0KKworCXNraXBfb3B0aW9uYWxfbGYoKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9yYXdfZGF0ZShjb25zdCBjaGFyICpzcmMsIGNoYXIgKnJlc3VsdCwgaW50IG1heGxlbikKK3sKKwljb25zdCBjaGFyICpvcmlnX3NyYyA9IHNyYzsKKwljaGFyICplbmRwOworCXVuc2lnbmVkIGxvbmcgbnVtOworCisJZXJybm8gPSAwOworCisJbnVtID0gc3RydG91bChzcmMsICZlbmRwLCAxMCk7CisJLyogTkVFRFNXT1JLOiBwZXJoYXBzIGNoZWNrIGZvciByZWFzb25hYmxlIHZhbHVlcz8gKi8KKwlpZiAoZXJybm8gfHwgZW5kcCA9PSBzcmMgfHwgKmVuZHAgIT0gJyAnKQorCQlyZXR1cm4gLTE7CisKKwlzcmMgPSBlbmRwICsgMTsKKwlpZiAoKnNyYyAhPSAnLScgJiYgKnNyYyAhPSAnKycpCisJCXJldHVybiAtMTsKKworCW51bSA9IHN0cnRvdWwoc3JjICsgMSwgJmVuZHAsIDEwKTsKKwlpZiAoZXJybm8gfHwgZW5kcCA9PSBzcmMgKyAxIHx8ICplbmRwIHx8IChlbmRwIC0gb3JpZ19zcmMpID49IG1heGxlbiB8fAorCSAgICAxNDAwIDwgbnVtKQorCQlyZXR1cm4gLTE7CisKKwlzdHJjcHkocmVzdWx0LCBvcmlnX3NyYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpwYXJzZV9pZGVudChjb25zdCBjaGFyICpidWYpCit7CisJY29uc3QgY2hhciAqbHRndDsKKwlzaXplX3QgbmFtZV9sZW47CisJY2hhciAqaWRlbnQ7CisKKwkvKiBlbnN1cmUgdGhlcmUgaXMgYSBzcGFjZSBkZWxpbWl0ZXIgZXZlbiBpZiB0aGVyZSBpcyBubyBuYW1lICovCisJaWYgKCpidWYgPT0gJzwnKQorCQktLWJ1ZjsKKworCWx0Z3QgPSBidWYgKyBzdHJjc3BuKGJ1ZiwgIjw+Iik7CisJaWYgKCpsdGd0ICE9ICc8JykKKwkJZGllKCJNaXNzaW5nIDwgaW4gaWRlbnQgc3RyaW5nOiAlcyIsIGJ1Zik7CisJaWYgKGx0Z3QgIT0gYnVmICYmIGx0Z3RbLTFdICE9ICcgJykKKwkJZGllKCJNaXNzaW5nIHNwYWNlIGJlZm9yZSA8IGluIGlkZW50IHN0cmluZzogJXMiLCBidWYpOworCWx0Z3QgPSBsdGd0ICsgMSArIHN0cmNzcG4obHRndCArIDEsICI8PiIpOworCWlmICgqbHRndCAhPSAnPicpCisJCWRpZSgiTWlzc2luZyA+IGluIGlkZW50IHN0cmluZzogJXMiLCBidWYpOworCWx0Z3QrKzsKKwlpZiAoKmx0Z3QgIT0gJyAnKQorCQlkaWUoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgPiBpbiBpZGVudCBzdHJpbmc6ICVzIiwgYnVmKTsKKwlsdGd0Kys7CisJbmFtZV9sZW4gPSBsdGd0IC0gYnVmOworCWlkZW50ID0geG1hbGxvYyhuYW1lX2xlbiArIDI0KTsKKwlzdHJuY3B5KGlkZW50LCBidWYsIG5hbWVfbGVuKTsKKworCXN3aXRjaCAod2hlbnNwZWMpIHsKKwljYXNlIFdIRU5TUEVDX1JBVzoKKwkJaWYgKHZhbGlkYXRlX3Jhd19kYXRlKGx0Z3QsIGlkZW50ICsgbmFtZV9sZW4sIDI0KSA8IDApCisJCQlkaWUoIkludmFsaWQgcmF3IGRhdGUgXCIlc1wiIGluIGlkZW50OiAlcyIsIGx0Z3QsIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgV0hFTlNQRUNfUkZDMjgyMjoKKwkJaWYgKHBhcnNlX2RhdGUobHRndCwgaWRlbnQgKyBuYW1lX2xlbiwgMjQpIDwgMCkKKwkJCWRpZSgiSW52YWxpZCByZmMyODIyIGRhdGUgXCIlc1wiIGluIGlkZW50OiAlcyIsIGx0Z3QsIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgV0hFTlNQRUNfTk9XOgorCQlpZiAoc3RyY21wKCJub3ciLCBsdGd0KSkKKwkJCWRpZSgiRGF0ZSBpbiBpZGVudCBtdXN0IGJlICdub3cnOiAlcyIsIGJ1Zik7CisJCWRhdGVzdGFtcChpZGVudCArIG5hbWVfbGVuLCAyNCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBpZGVudDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfYW5kX3N0b3JlX2Jsb2IoCisJc3RydWN0IGxhc3Rfb2JqZWN0ICpsYXN0LAorCXVuc2lnbmVkIGNoYXIgKnNoYTFvdXQsCisJdWludG1heF90IG1hcmspCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdWludG1heF90IGxlbjsKKworCWlmIChwYXJzZV9kYXRhKCZidWYsIGJpZ19maWxlX3RocmVzaG9sZCwgJmxlbikpCisJCXN0b3JlX29iamVjdChPQkpfQkxPQiwgJmJ1ZiwgbGFzdCwgc2hhMW91dCwgbWFyayk7CisJZWxzZSB7CisJCWlmIChsYXN0KSB7CisJCQlzdHJidWZfcmVsZWFzZSgmbGFzdC0+ZGF0YSk7CisJCQlsYXN0LT5vZmZzZXQgPSAwOworCQkJbGFzdC0+ZGVwdGggPSAwOworCQl9CisJCXN0cmVhbV9ibG9iKGxlbiwgc2hhMW91dCwgbWFyayk7CisJCXNraXBfb3B0aW9uYWxfbGYoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX25ld19ibG9iKHZvaWQpCit7CisJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwlwYXJzZV9tYXJrKCk7CisJcGFyc2VfYW5kX3N0b3JlX2Jsb2IoJmxhc3RfYmxvYiwgTlVMTCwgbmV4dF9tYXJrKTsKK30KKworc3RhdGljIHZvaWQgdW5sb2FkX29uZV9icmFuY2godm9pZCkKK3sKKwl3aGlsZSAoY3VyX2FjdGl2ZV9icmFuY2hlcworCQkmJiBjdXJfYWN0aXZlX2JyYW5jaGVzID49IG1heF9hY3RpdmVfYnJhbmNoZXMpIHsKKwkJdWludG1heF90IG1pbl9jb21taXQgPSBVTE9OR19NQVg7CisJCXN0cnVjdCBicmFuY2ggKmUsICpsID0gTlVMTCwgKnAgPSBOVUxMOworCisJCWZvciAoZSA9IGFjdGl2ZV9icmFuY2hlczsgZTsgZSA9IGUtPmFjdGl2ZV9uZXh0X2JyYW5jaCkgeworCQkJaWYgKGUtPmxhc3RfY29tbWl0IDwgbWluX2NvbW1pdCkgeworCQkJCXAgPSBsOworCQkJCW1pbl9jb21taXQgPSBlLT5sYXN0X2NvbW1pdDsKKwkJCX0KKwkJCWwgPSBlOworCQl9CisKKwkJaWYgKHApIHsKKwkJCWUgPSBwLT5hY3RpdmVfbmV4dF9icmFuY2g7CisJCQlwLT5hY3RpdmVfbmV4dF9icmFuY2ggPSBlLT5hY3RpdmVfbmV4dF9icmFuY2g7CisJCX0gZWxzZSB7CisJCQllID0gYWN0aXZlX2JyYW5jaGVzOworCQkJYWN0aXZlX2JyYW5jaGVzID0gZS0+YWN0aXZlX25leHRfYnJhbmNoOworCQl9CisJCWUtPmFjdGl2ZSA9IDA7CisJCWUtPmFjdGl2ZV9uZXh0X2JyYW5jaCA9IE5VTEw7CisJCWlmIChlLT5icmFuY2hfdHJlZS50cmVlKSB7CisJCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoZS0+YnJhbmNoX3RyZWUudHJlZSk7CisJCQllLT5icmFuY2hfdHJlZS50cmVlID0gTlVMTDsKKwkJfQorCQljdXJfYWN0aXZlX2JyYW5jaGVzLS07CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX2JyYW5jaChzdHJ1Y3QgYnJhbmNoICpiKQoreworCWxvYWRfdHJlZSgmYi0+YnJhbmNoX3RyZWUpOworCWlmICghYi0+YWN0aXZlKSB7CisJCWItPmFjdGl2ZSA9IDE7CisJCWItPmFjdGl2ZV9uZXh0X2JyYW5jaCA9IGFjdGl2ZV9icmFuY2hlczsKKwkJYWN0aXZlX2JyYW5jaGVzID0gYjsKKwkJY3VyX2FjdGl2ZV9icmFuY2hlcysrOworCQlicmFuY2hfbG9hZF9jb3VudCsrOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29udmVydF9udW1fbm90ZXNfdG9fZmFub3V0KHVpbnRtYXhfdCBudW1fbm90ZXMpCit7CisJdW5zaWduZWQgY2hhciBmYW5vdXQgPSAwOworCXdoaWxlICgobnVtX25vdGVzID4+PSA4KSkKKwkJZmFub3V0Kys7CisJcmV0dXJuIGZhbm91dDsKK30KKworc3RhdGljIHZvaWQgY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQoY29uc3QgY2hhciAqaGV4X3NoYTEsCisJCXVuc2lnbmVkIGNoYXIgZmFub3V0LCBjaGFyICpwYXRoKQoreworCXVuc2lnbmVkIGludCBpID0gMCwgaiA9IDA7CisJaWYgKGZhbm91dCA+PSAyMCkKKwkJZGllKCJUb28gbGFyZ2UgZmFub3V0ICgldSkiLCBmYW5vdXQpOworCXdoaWxlIChmYW5vdXQpIHsKKwkJcGF0aFtpKytdID0gaGV4X3NoYTFbaisrXTsKKwkJcGF0aFtpKytdID0gaGV4X3NoYTFbaisrXTsKKwkJcGF0aFtpKytdID0gJy8nOworCQlmYW5vdXQtLTsKKwl9CisJbWVtY3B5KHBhdGggKyBpLCBoZXhfc2hhMSArIGosIDQwIC0gaik7CisJcGF0aFtpICsgNDAgLSBqXSA9ICdcMCc7Cit9CisKK3N0YXRpYyB1aW50bWF4X3QgZG9fY2hhbmdlX25vdGVfZmFub3V0KAorCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqb3JpZ19yb290LCBzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwkJY2hhciAqaGV4X3NoYTEsIHVuc2lnbmVkIGludCBoZXhfc2hhMV9sZW4sCisJCWNoYXIgKmZ1bGxwYXRoLCB1bnNpZ25lZCBpbnQgZnVsbHBhdGhfbGVuLAorCQl1bnNpZ25lZCBjaGFyIGZhbm91dCkKK3sKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0ID0gcm9vdC0+dHJlZTsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSwgbGVhZjsKKwl1bnNpZ25lZCBpbnQgaSwgdG1wX2hleF9zaGExX2xlbiwgdG1wX2Z1bGxwYXRoX2xlbjsKKwl1aW50bWF4X3QgbnVtX25vdGVzID0gMDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgcmVhbHBhdGhbNjBdOworCisJZm9yIChpID0gMDsgdCAmJiBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQllID0gdC0+ZW50cmllc1tpXTsKKwkJdG1wX2hleF9zaGExX2xlbiA9IGhleF9zaGExX2xlbiArIGUtPm5hbWUtPnN0cl9sZW47CisJCXRtcF9mdWxscGF0aF9sZW4gPSBmdWxscGF0aF9sZW47CisKKwkJLyoKKwkJICogV2UncmUgaW50ZXJlc3RlZCBpbiBFSVRIRVIgZXhpc3Rpbmcgbm90ZSBlbnRyaWVzIChlbnRyaWVzCisJCSAqIHdpdGggZXhhY3RseSA0MCBoZXggY2hhcnMgaW4gcGF0aCwgbm90IGluY2x1ZGluZyBkaXJlY3RvcnkKKwkJICogc2VwYXJhdG9ycyksIE9SIGRpcmVjdG9yeSBlbnRyaWVzIHRoYXQgbWF5IGNvbnRhaW4gbm90ZQorCQkgKiBlbnRyaWVzICh3aXRoIDwgNDAgaGV4IGNoYXJzIGluIHBhdGgpLgorCQkgKiBBbHNvLCBlYWNoIHBhdGggY29tcG9uZW50IGluIGEgbm90ZSBlbnRyeSBtdXN0IGJlIGEgbXVsdGlwbGUKKwkJICogb2YgMiBjaGFycy4KKwkJICovCisJCWlmICghZS0+dmVyc2lvbnNbMV0ubW9kZSB8fAorCQkgICAgdG1wX2hleF9zaGExX2xlbiA+IDQwIHx8CisJCSAgICBlLT5uYW1lLT5zdHJfbGVuICUgMikKKwkJCWNvbnRpbnVlOworCisJCS8qIFRoaXMgX21heV8gYmUgYSBub3RlIGVudHJ5LCBvciBhIHN1YmRpciBjb250YWluaW5nIG5vdGVzICovCisJCW1lbWNweShoZXhfc2hhMSArIGhleF9zaGExX2xlbiwgZS0+bmFtZS0+c3RyX2RhdCwKKwkJICAgICAgIGUtPm5hbWUtPnN0cl9sZW4pOworCQlpZiAodG1wX2Z1bGxwYXRoX2xlbikKKwkJCWZ1bGxwYXRoW3RtcF9mdWxscGF0aF9sZW4rK10gPSAnLyc7CisJCW1lbWNweShmdWxscGF0aCArIHRtcF9mdWxscGF0aF9sZW4sIGUtPm5hbWUtPnN0cl9kYXQsCisJCSAgICAgICBlLT5uYW1lLT5zdHJfbGVuKTsKKwkJdG1wX2Z1bGxwYXRoX2xlbiArPSBlLT5uYW1lLT5zdHJfbGVuOworCQlmdWxscGF0aFt0bXBfZnVsbHBhdGhfbGVuXSA9ICdcMCc7CisKKwkJaWYgKHRtcF9oZXhfc2hhMV9sZW4gPT0gNDAgJiYgIWdldF9zaGExX2hleChoZXhfc2hhMSwgc2hhMSkpIHsKKwkJCS8qIFRoaXMgaXMgYSBub3RlIGVudHJ5ICovCisJCQlpZiAoZmFub3V0ID09IDB4ZmYpIHsKKwkJCQkvKiBDb3VudGluZyBtb2RlLCBubyByZW5hbWUgKi8KKwkJCQludW1fbm90ZXMrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KGhleF9zaGExLCBmYW5vdXQsIHJlYWxwYXRoKTsKKwkJCWlmICghc3RyY21wKGZ1bGxwYXRoLCByZWFscGF0aCkpIHsKKwkJCQkvKiBOb3RlIGVudHJ5IGlzIGluIGNvcnJlY3QgbG9jYXRpb24gKi8KKwkJCQludW1fbm90ZXMrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogUmVuYW1lIGZ1bGxwYXRoIHRvIHJlYWxwYXRoICovCisJCQlpZiAoIXRyZWVfY29udGVudF9yZW1vdmUob3JpZ19yb290LCBmdWxscGF0aCwgJmxlYWYpKQorCQkJCWRpZSgiRmFpbGVkIHRvIHJlbW92ZSBwYXRoICVzIiwgZnVsbHBhdGgpOworCQkJdHJlZV9jb250ZW50X3NldChvcmlnX3Jvb3QsIHJlYWxwYXRoLAorCQkJCWxlYWYudmVyc2lvbnNbMV0uc2hhMSwKKwkJCQlsZWFmLnZlcnNpb25zWzFdLm1vZGUsCisJCQkJbGVhZi50cmVlKTsKKwkJfSBlbHNlIGlmIChTX0lTRElSKGUtPnZlcnNpb25zWzFdLm1vZGUpKSB7CisJCQkvKiBUaGlzIGlzIGEgc3ViZGlyIHRoYXQgbWF5IGNvbnRhaW4gbm90ZSBlbnRyaWVzICovCisJCQlpZiAoIWUtPnRyZWUpCisJCQkJbG9hZF90cmVlKGUpOworCQkJbnVtX25vdGVzICs9IGRvX2NoYW5nZV9ub3RlX2Zhbm91dChvcmlnX3Jvb3QsIGUsCisJCQkJaGV4X3NoYTEsIHRtcF9oZXhfc2hhMV9sZW4sCisJCQkJZnVsbHBhdGgsIHRtcF9mdWxscGF0aF9sZW4sIGZhbm91dCk7CisJCX0KKworCQkvKiBUaGUgYWJvdmUgbWF5IGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGN1cnJlbnQgdHJlZV9jb250ZW50ICovCisJCXQgPSByb290LT50cmVlOworCX0KKwlyZXR1cm4gbnVtX25vdGVzOworfQorCitzdGF0aWMgdWludG1heF90IGNoYW5nZV9ub3RlX2Zhbm91dChzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwkJdW5zaWduZWQgY2hhciBmYW5vdXQpCit7CisJY2hhciBoZXhfc2hhMVs0MF0sIHBhdGhbNjBdOworCXJldHVybiBkb19jaGFuZ2Vfbm90ZV9mYW5vdXQocm9vdCwgcm9vdCwgaGV4X3NoYTEsIDAsIHBhdGgsIDAsIGZhbm91dCk7Cit9CisKKy8qCisgKiBHaXZlbiBhIHBvaW50ZXIgaW50byBhIHN0cmluZywgcGFyc2UgYSBtYXJrIHJlZmVyZW5jZToKKyAqCisgKiAgIGlkbnVtIDo6PSAnOicgYmlnaW50OworICoKKyAqIFJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSB2YWx1ZSBpbiAqZW5kcHRyLgorICoKKyAqIENvbXBsYWluIGlmIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIG5vdCB3aGF0IGlzIGV4cGVjdGVkLAorICogZWl0aGVyIGEgc3BhY2Ugb3IgZW5kIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB1aW50bWF4X3QgcGFyc2VfbWFya19yZWYoY29uc3QgY2hhciAqcCwgY2hhciAqKmVuZHB0cikKK3sKKwl1aW50bWF4X3QgbWFyazsKKworCWFzc2VydCgqcCA9PSAnOicpOworCXArKzsKKwltYXJrID0gc3RydG91bWF4KHAsIGVuZHB0ciwgMTApOworCWlmICgqZW5kcHRyID09IHApCisJCWRpZSgiTm8gdmFsdWUgYWZ0ZXIgJzonIGluIG1hcms6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwlyZXR1cm4gbWFyazsKK30KKworLyoKKyAqIFBhcnNlIHRoZSBtYXJrIHJlZmVyZW5jZSwgYW5kIGNvbXBsYWluIGlmIHRoaXMgaXMgbm90IHRoZSBlbmQgb2YKKyAqIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB1aW50bWF4X3QgcGFyc2VfbWFya19yZWZfZW9sKGNvbnN0IGNoYXIgKnApCit7CisJY2hhciAqZW5kOworCXVpbnRtYXhfdCBtYXJrOworCisJbWFyayA9IHBhcnNlX21hcmtfcmVmKHAsICZlbmQpOworCWlmICgqZW5kICE9ICdcMCcpCisJCWRpZSgiR2FyYmFnZSBhZnRlciBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJcmV0dXJuIG1hcms7Cit9CisKKy8qCisgKiBQYXJzZSB0aGUgbWFyayByZWZlcmVuY2UsIGRlbWFuZGluZyBhIHRyYWlsaW5nIHNwYWNlLiAgUmV0dXJuIGEKKyAqIHBvaW50ZXIgdG8gdGhlIHNwYWNlLgorICovCitzdGF0aWMgdWludG1heF90IHBhcnNlX21hcmtfcmVmX3NwYWNlKGNvbnN0IGNoYXIgKipwKQoreworCXVpbnRtYXhfdCBtYXJrOworCWNoYXIgKmVuZDsKKworCW1hcmsgPSBwYXJzZV9tYXJrX3JlZigqcCwgJmVuZCk7CisJaWYgKCplbmQgIT0gJyAnKQorCQlkaWUoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgbWFyazogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCSpwID0gZW5kOworCXJldHVybiBtYXJrOworfQorCitzdGF0aWMgdm9pZCBmaWxlX2NoYW5nZV9tKHN0cnVjdCBicmFuY2ggKmIpCit7CisJY29uc3QgY2hhciAqcCA9IGNvbW1hbmRfYnVmLmJ1ZiArIDI7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgdXEgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICplbmRwOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gb2U7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1aW50MTZfdCBtb2RlLCBpbmxpbmVfZGF0YSA9IDA7CisKKwlwID0gZ2V0X21vZGUocCwgJm1vZGUpOworCWlmICghcCkKKwkJZGllKCJDb3JydXB0IG1vZGU6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDA2NDQ6CisJY2FzZSAwNzU1OgorCQltb2RlIHw9IFNfSUZSRUc7CisJY2FzZSBTX0lGUkVHIHwgMDY0NDoKKwljYXNlIFNfSUZSRUcgfCAwNzU1OgorCWNhc2UgU19JRkxOSzoKKwljYXNlIFNfSUZESVI6CisJY2FzZSBTX0lGR0lUTElOSzoKKwkJLyogb2sgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJDb3JydXB0IG1vZGU6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwl9CisKKwlpZiAoKnAgPT0gJzonKSB7CisJCW9lID0gZmluZF9tYXJrKHBhcnNlX21hcmtfcmVmX3NwYWNlKCZwKSk7CisJCWhhc2hjcHkoc2hhMSwgb2UtPmlkeC5zaGExKTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAocCwgImlubGluZSAiKSkgeworCQlpbmxpbmVfZGF0YSA9IDE7CisJCXAgKz0gc3RybGVuKCJpbmxpbmUiKTsgIC8qIGFkdmFuY2UgdG8gc3BhY2UgKi8KKwl9IGVsc2UgeworCQlpZiAoZ2V0X3NoYTFfaGV4KHAsIHNoYTEpKQorCQkJZGllKCJJbnZhbGlkIGRhdGFyZWY6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJb2UgPSBmaW5kX29iamVjdChzaGExKTsKKwkJcCArPSA0MDsKKwkJaWYgKCpwICE9ICcgJykKKwkJCWRpZSgiTWlzc2luZyBzcGFjZSBhZnRlciBTSEExOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJfQorCWFzc2VydCgqcCA9PSAnICcpOworCXArKzsgIC8qIHNraXAgc3BhY2UgKi8KKworCXN0cmJ1Zl9yZXNldCgmdXEpOworCWlmICghdW5xdW90ZV9jX3N0eWxlKCZ1cSwgcCwgJmVuZHApKSB7CisJCWlmICgqZW5kcCkKKwkJCWRpZSgiR2FyYmFnZSBhZnRlciBwYXRoIGluOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCXAgPSB1cS5idWY7CisJfQorCisJLyogR2l0IGRvZXMgbm90IHRyYWNrIGVtcHR5LCBub24tdG9wbGV2ZWwgZGlyZWN0b3JpZXMuICovCisJaWYgKFNfSVNESVIobW9kZSkgJiYgIW1lbWNtcChzaGExLCBFTVBUWV9UUkVFX1NIQTFfQklOLCAyMCkgJiYgKnApIHsKKwkJdHJlZV9jb250ZW50X3JlbW92ZSgmYi0+YnJhbmNoX3RyZWUsIHAsIE5VTEwpOworCQlyZXR1cm47CisJfQorCisJaWYgKFNfSVNHSVRMSU5LKG1vZGUpKSB7CisJCWlmIChpbmxpbmVfZGF0YSkKKwkJCWRpZSgiR2l0IGxpbmtzIGNhbm5vdCBiZSBzcGVjaWZpZWQgJ2lubGluZSc6ICVzIiwKKwkJCQljb21tYW5kX2J1Zi5idWYpOworCQllbHNlIGlmIChvZSkgeworCQkJaWYgKG9lLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQkJZGllKCJOb3QgYSBjb21taXQgKGFjdHVhbGx5IGEgJXMpOiAlcyIsCisJCQkJCXR5cGVuYW1lKG9lLT50eXBlKSwgY29tbWFuZF9idWYuYnVmKTsKKwkJfQorCQkvKgorCQkgKiBBY2NlcHQgdGhlIHNoYTEgd2l0aG91dCBjaGVja2luZzsgaXQgZXhwZWN0ZWQgdG8gYmUgaW4KKwkJICogYW5vdGhlciByZXBvc2l0b3J5LgorCQkgKi8KKwl9IGVsc2UgaWYgKGlubGluZV9kYXRhKSB7CisJCWlmIChTX0lTRElSKG1vZGUpKQorCQkJZGllKCJEaXJlY3RvcmllcyBjYW5ub3QgYmUgc3BlY2lmaWVkICdpbmxpbmUnOiAlcyIsCisJCQkJY29tbWFuZF9idWYuYnVmKTsKKwkJaWYgKHAgIT0gdXEuYnVmKSB7CisJCQlzdHJidWZfYWRkc3RyKCZ1cSwgcCk7CisJCQlwID0gdXEuYnVmOworCQl9CisJCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJCXBhcnNlX2FuZF9zdG9yZV9ibG9iKCZsYXN0X2Jsb2IsIHNoYTEsIDApOworCX0gZWxzZSB7CisJCWVudW0gb2JqZWN0X3R5cGUgZXhwZWN0ZWQgPSBTX0lTRElSKG1vZGUpID8KKwkJCQkJCU9CSl9UUkVFOiBPQkpfQkxPQjsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gb2UgPyBvZS0+dHlwZSA6CisJCQkJCXNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJCWlmICh0eXBlIDwgMCkKKwkJCWRpZSgiJXMgbm90IGZvdW5kOiAlcyIsCisJCQkJCVNfSVNESVIobW9kZSkgPyAgIlRyZWUiIDogIkJsb2IiLAorCQkJCQljb21tYW5kX2J1Zi5idWYpOworCQlpZiAodHlwZSAhPSBleHBlY3RlZCkKKwkJCWRpZSgiTm90IGEgJXMgKGFjdHVhbGx5IGEgJXMpOiAlcyIsCisJCQkJdHlwZW5hbWUoZXhwZWN0ZWQpLCB0eXBlbmFtZSh0eXBlKSwKKwkJCQljb21tYW5kX2J1Zi5idWYpOworCX0KKworCWlmICghKnApIHsKKwkJdHJlZV9jb250ZW50X3JlcGxhY2UoJmItPmJyYW5jaF90cmVlLCBzaGExLCBtb2RlLCBOVUxMKTsKKwkJcmV0dXJuOworCX0KKwl0cmVlX2NvbnRlbnRfc2V0KCZiLT5icmFuY2hfdHJlZSwgcCwgc2hhMSwgbW9kZSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVfY2hhbmdlX2Qoc3RydWN0IGJyYW5jaCAqYikKK3sKKwljb25zdCBjaGFyICpwID0gY29tbWFuZF9idWYuYnVmICsgMjsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmVuZHA7CisKKwlzdHJidWZfcmVzZXQoJnVxKTsKKwlpZiAoIXVucXVvdGVfY19zdHlsZSgmdXEsIHAsICZlbmRwKSkgeworCQlpZiAoKmVuZHApCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgcGF0aCBpbjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlwID0gdXEuYnVmOworCX0KKwl0cmVlX2NvbnRlbnRfcmVtb3ZlKCZiLT5icmFuY2hfdHJlZSwgcCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVfY2hhbmdlX2NyKHN0cnVjdCBicmFuY2ggKmIsIGludCByZW5hbWUpCit7CisJY29uc3QgY2hhciAqcywgKmQ7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgc191cSA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGRfdXEgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICplbmRwOworCXN0cnVjdCB0cmVlX2VudHJ5IGxlYWY7CisKKwlzID0gY29tbWFuZF9idWYuYnVmICsgMjsKKwlzdHJidWZfcmVzZXQoJnNfdXEpOworCWlmICghdW5xdW90ZV9jX3N0eWxlKCZzX3VxLCBzLCAmZW5kcCkpIHsKKwkJaWYgKCplbmRwICE9ICcgJykKKwkJCWRpZSgiTWlzc2luZyBzcGFjZSBhZnRlciBzb3VyY2U6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwl9IGVsc2UgeworCQllbmRwID0gc3RyY2hyKHMsICcgJyk7CisJCWlmICghZW5kcCkKKwkJCWRpZSgiTWlzc2luZyBzcGFjZSBhZnRlciBzb3VyY2U6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJc3RyYnVmX2FkZCgmc191cSwgcywgZW5kcCAtIHMpOworCX0KKwlzID0gc191cS5idWY7CisKKwllbmRwKys7CisJaWYgKCEqZW5kcCkKKwkJZGllKCJNaXNzaW5nIGRlc3Q6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKworCWQgPSBlbmRwOworCXN0cmJ1Zl9yZXNldCgmZF91cSk7CisJaWYgKCF1bnF1b3RlX2Nfc3R5bGUoJmRfdXEsIGQsICZlbmRwKSkgeworCQlpZiAoKmVuZHApCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgZGVzdCBpbjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlkID0gZF91cS5idWY7CisJfQorCisJbWVtc2V0KCZsZWFmLCAwLCBzaXplb2YobGVhZikpOworCWlmIChyZW5hbWUpCisJCXRyZWVfY29udGVudF9yZW1vdmUoJmItPmJyYW5jaF90cmVlLCBzLCAmbGVhZik7CisJZWxzZQorCQl0cmVlX2NvbnRlbnRfZ2V0KCZiLT5icmFuY2hfdHJlZSwgcywgJmxlYWYpOworCWlmICghbGVhZi52ZXJzaW9uc1sxXS5tb2RlKQorCQlkaWUoIlBhdGggJXMgbm90IGluIGJyYW5jaCIsIHMpOworCWlmICghKmQpIHsJLyogQyAicGF0aC90by9zdWJkaXIiICIiICovCisJCXRyZWVfY29udGVudF9yZXBsYWNlKCZiLT5icmFuY2hfdHJlZSwKKwkJCWxlYWYudmVyc2lvbnNbMV0uc2hhMSwKKwkJCWxlYWYudmVyc2lvbnNbMV0ubW9kZSwKKwkJCWxlYWYudHJlZSk7CisJCXJldHVybjsKKwl9CisJdHJlZV9jb250ZW50X3NldCgmYi0+YnJhbmNoX3RyZWUsIGQsCisJCWxlYWYudmVyc2lvbnNbMV0uc2hhMSwKKwkJbGVhZi52ZXJzaW9uc1sxXS5tb2RlLAorCQlsZWFmLnRyZWUpOworfQorCitzdGF0aWMgdm9pZCBub3RlX2NoYW5nZV9uKHN0cnVjdCBicmFuY2ggKmIsIHVuc2lnbmVkIGNoYXIgKm9sZF9mYW5vdXQpCit7CisJY29uc3QgY2hhciAqcCA9IGNvbW1hbmRfYnVmLmJ1ZiArIDI7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgdXEgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSA9IG9lOworCXN0cnVjdCBicmFuY2ggKnM7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgY29tbWl0X3NoYTFbMjBdOworCWNoYXIgcGF0aFs2MF07CisJdWludDE2X3QgaW5saW5lX2RhdGEgPSAwOworCXVuc2lnbmVkIGNoYXIgbmV3X2Zhbm91dDsKKworCS8qCisJICogV2hlbiBsb2FkaW5nIGEgYnJhbmNoLCB3ZSBkb24ndCB0cmF2ZXJzZSBpdHMgdHJlZSB0byBjb3VudCB0aGUgcmVhbAorCSAqIG51bWJlciBvZiBub3RlcyAodG9vIGV4cGVuc2l2ZSB0byBkbyB0aGlzIGZvciBhbGwgbm9uLW5vdGUgcmVmcykuCisJICogVGhpcyBtZWFucyB0aGF0IHJlY2VudGx5IGxvYWRlZCBub3RlcyByZWZzIG1pZ2h0IGluY29ycmVjdGx5IGhhdmUKKwkgKiBiLT5udW1fbm90ZXMgPT0gMCwgYW5kIGNvbnNlcXVlbnRseSwgb2xkX2Zhbm91dCBtaWdodCBiZSB3cm9uZy4KKwkgKgorCSAqIEZpeCB0aGlzIGJ5IHRyYXZlcnNpbmcgdGhlIHRyZWUgYW5kIGNvdW50aW5nIHRoZSBudW1iZXIgb2Ygbm90ZXMKKwkgKiB3aGVuIGItPm51bV9ub3RlcyA9PSAwLiBJZiB0aGUgbm90ZXMgdHJlZSBpcyB0cnVseSBlbXB0eSwgdGhlCisJICogY2FsY3VsYXRpb24gc2hvdWxkIG5vdCB0YWtlIGxvbmcuCisJICovCisJaWYgKGItPm51bV9ub3RlcyA9PSAwICYmICpvbGRfZmFub3V0ID09IDApIHsKKwkJLyogSW52b2tlIGNoYW5nZV9ub3RlX2Zhbm91dCgpIGluICJjb3VudGluZyBtb2RlIi4gKi8KKwkJYi0+bnVtX25vdGVzID0gY2hhbmdlX25vdGVfZmFub3V0KCZiLT5icmFuY2hfdHJlZSwgMHhmZik7CisJCSpvbGRfZmFub3V0ID0gY29udmVydF9udW1fbm90ZXNfdG9fZmFub3V0KGItPm51bV9ub3Rlcyk7CisJfQorCisJLyogTm93IHBhcnNlIHRoZSBub3RlbW9kaWZ5IGNvbW1hbmQuICovCisJLyogPGRhdGFyZWY+IG9yICdpbmxpbmUnICovCisJaWYgKCpwID09ICc6JykgeworCQlvZSA9IGZpbmRfbWFyayhwYXJzZV9tYXJrX3JlZl9zcGFjZSgmcCkpOworCQloYXNoY3B5KHNoYTEsIG9lLT5pZHguc2hhMSk7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKHAsICJpbmxpbmUgIikpIHsKKwkJaW5saW5lX2RhdGEgPSAxOworCQlwICs9IHN0cmxlbigiaW5saW5lIik7ICAvKiBhZHZhbmNlIHRvIHNwYWNlICovCisJfSBlbHNlIHsKKwkJaWYgKGdldF9zaGExX2hleChwLCBzaGExKSkKKwkJCWRpZSgiSW52YWxpZCBkYXRhcmVmOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCW9lID0gZmluZF9vYmplY3Qoc2hhMSk7CisJCXAgKz0gNDA7CisJCWlmICgqcCAhPSAnICcpCisJCQlkaWUoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgU0hBMTogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCX0KKwlhc3NlcnQoKnAgPT0gJyAnKTsKKwlwKys7ICAvKiBza2lwIHNwYWNlICovCisKKwkvKiA8Y29tbWl0dGlzaD4gKi8KKwlzID0gbG9va3VwX2JyYW5jaChwKTsKKwlpZiAocykgeworCQlpZiAoaXNfbnVsbF9zaGExKHMtPnNoYTEpKQorCQkJZGllKCJDYW4ndCBhZGQgYSBub3RlIG9uIGVtcHR5IGJyYW5jaC4iKTsKKwkJaGFzaGNweShjb21taXRfc2hhMSwgcy0+c2hhMSk7CisJfSBlbHNlIGlmICgqcCA9PSAnOicpIHsKKwkJdWludG1heF90IGNvbW1pdF9tYXJrID0gcGFyc2VfbWFya19yZWZfZW9sKHApOworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpjb21taXRfb2UgPSBmaW5kX21hcmsoY29tbWl0X21hcmspOworCQlpZiAoY29tbWl0X29lLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQlkaWUoIk1hcmsgOiUiIFBSSXVNQVggIiBub3QgYSBjb21taXQiLCBjb21taXRfbWFyayk7CisJCWhhc2hjcHkoY29tbWl0X3NoYTEsIGNvbW1pdF9vZS0+aWR4LnNoYTEpOworCX0gZWxzZSBpZiAoIWdldF9zaGExKHAsIGNvbW1pdF9zaGExKSkgeworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWNoYXIgKmJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKGNvbW1pdF9zaGExLAorCQkJY29tbWl0X3R5cGUsICZzaXplLCBjb21taXRfc2hhMSk7CisJCWlmICghYnVmIHx8IHNpemUgPCA0NikKKwkJCWRpZSgiTm90IGEgdmFsaWQgY29tbWl0OiAlcyIsIHApOworCQlmcmVlKGJ1Zik7CisJfSBlbHNlCisJCWRpZSgiSW52YWxpZCByZWYgbmFtZSBvciBTSEExIGV4cHJlc3Npb246ICVzIiwgcCk7CisKKwlpZiAoaW5saW5lX2RhdGEpIHsKKwkJaWYgKHAgIT0gdXEuYnVmKSB7CisJCQlzdHJidWZfYWRkc3RyKCZ1cSwgcCk7CisJCQlwID0gdXEuYnVmOworCQl9CisJCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJCXBhcnNlX2FuZF9zdG9yZV9ibG9iKCZsYXN0X2Jsb2IsIHNoYTEsIDApOworCX0gZWxzZSBpZiAob2UpIHsKKwkJaWYgKG9lLT50eXBlICE9IE9CSl9CTE9CKQorCQkJZGllKCJOb3QgYSBibG9iIChhY3R1YWxseSBhICVzKTogJXMiLAorCQkJCXR5cGVuYW1lKG9lLT50eXBlKSwgY29tbWFuZF9idWYuYnVmKTsKKwl9IGVsc2UgaWYgKCFpc19udWxsX3NoYTEoc2hhMSkpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwkJaWYgKHR5cGUgPCAwKQorCQkJZGllKCJCbG9iIG5vdCBmb3VuZDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlpZiAodHlwZSAhPSBPQkpfQkxPQikKKwkJCWRpZSgiTm90IGEgYmxvYiAoYWN0dWFsbHkgYSAlcyk6ICVzIiwKKwkJCSAgICB0eXBlbmFtZSh0eXBlKSwgY29tbWFuZF9idWYuYnVmKTsKKwl9CisKKwljb25zdHJ1Y3RfcGF0aF93aXRoX2Zhbm91dChzaGExX3RvX2hleChjb21taXRfc2hhMSksICpvbGRfZmFub3V0LCBwYXRoKTsKKwlpZiAodHJlZV9jb250ZW50X3JlbW92ZSgmYi0+YnJhbmNoX3RyZWUsIHBhdGgsIE5VTEwpKQorCQliLT5udW1fbm90ZXMtLTsKKworCWlmIChpc19udWxsX3NoYTEoc2hhMSkpCisJCXJldHVybjsgLyogbm90aGluZyB0byBpbnNlcnQgKi8KKworCWItPm51bV9ub3RlcysrOworCW5ld19mYW5vdXQgPSBjb252ZXJ0X251bV9ub3Rlc190b19mYW5vdXQoYi0+bnVtX25vdGVzKTsKKwljb25zdHJ1Y3RfcGF0aF93aXRoX2Zhbm91dChzaGExX3RvX2hleChjb21taXRfc2hhMSksIG5ld19mYW5vdXQsIHBhdGgpOworCXRyZWVfY29udGVudF9zZXQoJmItPmJyYW5jaF90cmVlLCBwYXRoLCBzaGExLCBTX0lGUkVHIHwgMDY0NCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVfY2hhbmdlX2RlbGV0ZWFsbChzdHJ1Y3QgYnJhbmNoICpiKQoreworCXJlbGVhc2VfdHJlZV9jb250ZW50X3JlY3Vyc2l2ZShiLT5icmFuY2hfdHJlZS50cmVlKTsKKwloYXNoY2xyKGItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLnNoYTEpOworCWhhc2hjbHIoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0uc2hhMSk7CisJbG9hZF90cmVlKCZiLT5icmFuY2hfdHJlZSk7CisJYi0+bnVtX25vdGVzID0gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZnJvbV9jb21taXQoc3RydWN0IGJyYW5jaCAqYiwgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKCFidWYgfHwgc2l6ZSA8IDQ2KQorCQlkaWUoIk5vdCBhIHZhbGlkIGNvbW1pdDogJXMiLCBzaGExX3RvX2hleChiLT5zaGExKSk7CisJaWYgKG1lbWNtcCgidHJlZSAiLCBidWYsIDUpCisJCXx8IGdldF9zaGExX2hleChidWYgKyA1LCBiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5zaGExKSkKKwkJZGllKCJUaGUgY29tbWl0ICVzIGlzIGNvcnJ1cHQiLCBzaGExX3RvX2hleChiLT5zaGExKSk7CisJaGFzaGNweShiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1swXS5zaGExLAorCQliLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5zaGExKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZnJvbV9leGlzdGluZyhzdHJ1Y3QgYnJhbmNoICpiKQoreworCWlmIChpc19udWxsX3NoYTEoYi0+c2hhMSkpIHsKKwkJaGFzaGNscihiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1swXS5zaGExKTsKKwkJaGFzaGNscihiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5zaGExKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWNoYXIgKmJ1ZjsKKworCQlidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShiLT5zaGExLAorCQkJY29tbWl0X3R5cGUsICZzaXplLCBiLT5zaGExKTsKKwkJcGFyc2VfZnJvbV9jb21taXQoYiwgYnVmLCBzaXplKTsKKwkJZnJlZShidWYpOworCX0KK30KKworc3RhdGljIGludCBwYXJzZV9mcm9tKHN0cnVjdCBicmFuY2ggKmIpCit7CisJY29uc3QgY2hhciAqZnJvbTsKKwlzdHJ1Y3QgYnJhbmNoICpzOworCisJaWYgKHByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJmcm9tICIpKQorCQlyZXR1cm4gMDsKKworCWlmIChiLT5icmFuY2hfdHJlZS50cmVlKSB7CisJCXJlbGVhc2VfdHJlZV9jb250ZW50X3JlY3Vyc2l2ZShiLT5icmFuY2hfdHJlZS50cmVlKTsKKwkJYi0+YnJhbmNoX3RyZWUudHJlZSA9IE5VTEw7CisJfQorCisJZnJvbSA9IHN0cmNocihjb21tYW5kX2J1Zi5idWYsICcgJykgKyAxOworCXMgPSBsb29rdXBfYnJhbmNoKGZyb20pOworCWlmIChiID09IHMpCisJCWRpZSgiQ2FuJ3QgY3JlYXRlIGEgYnJhbmNoIGZyb20gaXRzZWxmOiAlcyIsIGItPm5hbWUpOworCWVsc2UgaWYgKHMpIHsKKwkJdW5zaWduZWQgY2hhciAqdCA9IHMtPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLnNoYTE7CisJCWhhc2hjcHkoYi0+c2hhMSwgcy0+c2hhMSk7CisJCWhhc2hjcHkoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0uc2hhMSwgdCk7CisJCWhhc2hjcHkoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0uc2hhMSwgdCk7CisJfSBlbHNlIGlmICgqZnJvbSA9PSAnOicpIHsKKwkJdWludG1heF90IGlkbnVtID0gcGFyc2VfbWFya19yZWZfZW9sKGZyb20pOworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSA9IGZpbmRfbWFyayhpZG51bSk7CisJCWlmIChvZS0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJZGllKCJNYXJrIDolIiBQUkl1TUFYICIgbm90IGEgY29tbWl0IiwgaWRudW0pOworCQloYXNoY3B5KGItPnNoYTEsIG9lLT5pZHguc2hhMSk7CisJCWlmIChvZS0+cGFja19pZCAhPSBNQVhfUEFDS19JRCkgeworCQkJdW5zaWduZWQgbG9uZyBzaXplOworCQkJY2hhciAqYnVmID0gZ2ZpX3VucGFja19lbnRyeShvZSwgJnNpemUpOworCQkJcGFyc2VfZnJvbV9jb21taXQoYiwgYnVmLCBzaXplKTsKKwkJCWZyZWUoYnVmKTsKKwkJfSBlbHNlCisJCQlwYXJzZV9mcm9tX2V4aXN0aW5nKGIpOworCX0gZWxzZSBpZiAoIWdldF9zaGExKGZyb20sIGItPnNoYTEpKQorCQlwYXJzZV9mcm9tX2V4aXN0aW5nKGIpOworCWVsc2UKKwkJZGllKCJJbnZhbGlkIHJlZiBuYW1lIG9yIFNIQTEgZXhwcmVzc2lvbjogJXMiLCBmcm9tKTsKKworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGFzaF9saXN0ICpwYXJzZV9tZXJnZSh1bnNpZ25lZCBpbnQgKmNvdW50KQoreworCXN0cnVjdCBoYXNoX2xpc3QgKmxpc3QgPSBOVUxMLCAqbiwgKmUgPSBlOworCWNvbnN0IGNoYXIgKmZyb207CisJc3RydWN0IGJyYW5jaCAqczsKKworCSpjb3VudCA9IDA7CisJd2hpbGUgKCFwcmVmaXhjbXAoY29tbWFuZF9idWYuYnVmLCAibWVyZ2UgIikpIHsKKwkJZnJvbSA9IHN0cmNocihjb21tYW5kX2J1Zi5idWYsICcgJykgKyAxOworCQluID0geG1hbGxvYyhzaXplb2YoKm4pKTsKKwkJcyA9IGxvb2t1cF9icmFuY2goZnJvbSk7CisJCWlmIChzKQorCQkJaGFzaGNweShuLT5zaGExLCBzLT5zaGExKTsKKwkJZWxzZSBpZiAoKmZyb20gPT0gJzonKSB7CisJCQl1aW50bWF4X3QgaWRudW0gPSBwYXJzZV9tYXJrX3JlZl9lb2woZnJvbSk7CisJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSA9IGZpbmRfbWFyayhpZG51bSk7CisJCQlpZiAob2UtPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCQlkaWUoIk1hcmsgOiUiIFBSSXVNQVggIiBub3QgYSBjb21taXQiLCBpZG51bSk7CisJCQloYXNoY3B5KG4tPnNoYTEsIG9lLT5pZHguc2hhMSk7CisJCX0gZWxzZSBpZiAoIWdldF9zaGExKGZyb20sIG4tPnNoYTEpKSB7CisJCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCQljaGFyICpidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShuLT5zaGExLAorCQkJCWNvbW1pdF90eXBlLCAmc2l6ZSwgbi0+c2hhMSk7CisJCQlpZiAoIWJ1ZiB8fCBzaXplIDwgNDYpCisJCQkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQ6ICVzIiwgZnJvbSk7CisJCQlmcmVlKGJ1Zik7CisJCX0gZWxzZQorCQkJZGllKCJJbnZhbGlkIHJlZiBuYW1lIG9yIFNIQTEgZXhwcmVzc2lvbjogJXMiLCBmcm9tKTsKKworCQluLT5uZXh0ID0gTlVMTDsKKwkJaWYgKGxpc3QpCisJCQllLT5uZXh0ID0gbjsKKwkJZWxzZQorCQkJbGlzdCA9IG47CisJCWUgPSBuOworCQkoKmNvdW50KSsrOworCQlyZWFkX25leHRfY29tbWFuZCgpOworCX0KKwlyZXR1cm4gbGlzdDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfbmV3X2NvbW1pdCh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBicmFuY2ggKmI7CisJY2hhciAqc3A7CisJY2hhciAqYXV0aG9yID0gTlVMTDsKKwljaGFyICpjb21taXR0ZXIgPSBOVUxMOworCXN0cnVjdCBoYXNoX2xpc3QgKm1lcmdlX2xpc3QgPSBOVUxMOworCXVuc2lnbmVkIGludCBtZXJnZV9jb3VudDsKKwl1bnNpZ25lZCBjaGFyIHByZXZfZmFub3V0LCBuZXdfZmFub3V0OworCisJLyogT2J0YWluIHRoZSBicmFuY2ggbmFtZSBmcm9tIHRoZSByZXN0IG9mIG91ciBjb21tYW5kICovCisJc3AgPSBzdHJjaHIoY29tbWFuZF9idWYuYnVmLCAnICcpICsgMTsKKwliID0gbG9va3VwX2JyYW5jaChzcCk7CisJaWYgKCFiKQorCQliID0gbmV3X2JyYW5jaChzcCk7CisKKwlyZWFkX25leHRfY29tbWFuZCgpOworCXBhcnNlX21hcmsoKTsKKwlpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJhdXRob3IgIikpIHsKKwkJYXV0aG9yID0gcGFyc2VfaWRlbnQoY29tbWFuZF9idWYuYnVmICsgNyk7CisJCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJfQorCWlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgImNvbW1pdHRlciAiKSkgeworCQljb21taXR0ZXIgPSBwYXJzZV9pZGVudChjb21tYW5kX2J1Zi5idWYgKyAxMCk7CisJCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJfQorCWlmICghY29tbWl0dGVyKQorCQlkaWUoIkV4cGVjdGVkIGNvbW1pdHRlciBidXQgZGlkbid0IGdldCBvbmUiKTsKKwlwYXJzZV9kYXRhKCZtc2csIDAsIE5VTEwpOworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJcGFyc2VfZnJvbShiKTsKKwltZXJnZV9saXN0ID0gcGFyc2VfbWVyZ2UoJm1lcmdlX2NvdW50KTsKKworCS8qIGVuc3VyZSB0aGUgYnJhbmNoIGlzIGFjdGl2ZS9sb2FkZWQgKi8KKwlpZiAoIWItPmJyYW5jaF90cmVlLnRyZWUgfHwgIW1heF9hY3RpdmVfYnJhbmNoZXMpIHsKKwkJdW5sb2FkX29uZV9icmFuY2goKTsKKwkJbG9hZF9icmFuY2goYik7CisJfQorCisJcHJldl9mYW5vdXQgPSBjb252ZXJ0X251bV9ub3Rlc190b19mYW5vdXQoYi0+bnVtX25vdGVzKTsKKworCS8qIGZpbGVfY2hhbmdlKiAqLworCXdoaWxlIChjb21tYW5kX2J1Zi5sZW4gPiAwKSB7CisJCWlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgIk0gIikpCisJCQlmaWxlX2NoYW5nZV9tKGIpOworCQllbHNlIGlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgIkQgIikpCisJCQlmaWxlX2NoYW5nZV9kKGIpOworCQllbHNlIGlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgIlIgIikpCisJCQlmaWxlX2NoYW5nZV9jcihiLCAxKTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJDICIpKQorCQkJZmlsZV9jaGFuZ2VfY3IoYiwgMCk7CisJCWVsc2UgaWYgKCFwcmVmaXhjbXAoY29tbWFuZF9idWYuYnVmLCAiTiAiKSkKKwkJCW5vdGVfY2hhbmdlX24oYiwgJnByZXZfZmFub3V0KTsKKwkJZWxzZSBpZiAoIXN0cmNtcCgiZGVsZXRlYWxsIiwgY29tbWFuZF9idWYuYnVmKSkKKwkJCWZpbGVfY2hhbmdlX2RlbGV0ZWFsbChiKTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJscyAiKSkKKwkJCXBhcnNlX2xzKGIpOworCQllbHNlIHsKKwkJCXVucmVhZF9jb21tYW5kX2J1ZiA9IDE7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmVhZF9uZXh0X2NvbW1hbmQoKSA9PSBFT0YpCisJCQlicmVhazsKKwl9CisKKwluZXdfZmFub3V0ID0gY29udmVydF9udW1fbm90ZXNfdG9fZmFub3V0KGItPm51bV9ub3Rlcyk7CisJaWYgKG5ld19mYW5vdXQgIT0gcHJldl9mYW5vdXQpCisJCWItPm51bV9ub3RlcyA9IGNoYW5nZV9ub3RlX2Zhbm91dCgmYi0+YnJhbmNoX3RyZWUsIG5ld19mYW5vdXQpOworCisJLyogYnVpbGQgdGhlIHRyZWUgYW5kIHRoZSBjb21taXQgKi8KKwlzdG9yZV90cmVlKCZiLT5icmFuY2hfdHJlZSk7CisJaGFzaGNweShiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1swXS5zaGExLAorCQliLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5zaGExKTsKKworCXN0cmJ1Zl9yZXNldCgmbmV3X2RhdGEpOworCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwgInRyZWUgJXNcbiIsCisJCXNoYTFfdG9faGV4KGItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLnNoYTEpKTsKKwlpZiAoIWlzX251bGxfc2hhMShiLT5zaGExKSkKKwkJc3RyYnVmX2FkZGYoJm5ld19kYXRhLCAicGFyZW50ICVzXG4iLCBzaGExX3RvX2hleChiLT5zaGExKSk7CisJd2hpbGUgKG1lcmdlX2xpc3QpIHsKKwkJc3RydWN0IGhhc2hfbGlzdCAqbmV4dCA9IG1lcmdlX2xpc3QtPm5leHQ7CisJCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwgInBhcmVudCAlc1xuIiwgc2hhMV90b19oZXgobWVyZ2VfbGlzdC0+c2hhMSkpOworCQlmcmVlKG1lcmdlX2xpc3QpOworCQltZXJnZV9saXN0ID0gbmV4dDsKKwl9CisJc3RyYnVmX2FkZGYoJm5ld19kYXRhLAorCQkiYXV0aG9yICVzXG4iCisJCSJjb21taXR0ZXIgJXNcbiIKKwkJIlxuIiwKKwkJYXV0aG9yID8gYXV0aG9yIDogY29tbWl0dGVyLCBjb21taXR0ZXIpOworCXN0cmJ1Zl9hZGRidWYoJm5ld19kYXRhLCAmbXNnKTsKKwlmcmVlKGF1dGhvcik7CisJZnJlZShjb21taXR0ZXIpOworCisJaWYgKCFzdG9yZV9vYmplY3QoT0JKX0NPTU1JVCwgJm5ld19kYXRhLCBOVUxMLCBiLT5zaGExLCBuZXh0X21hcmspKQorCQliLT5wYWNrX2lkID0gcGFja19pZDsKKwliLT5sYXN0X2NvbW1pdCA9IG9iamVjdF9jb3VudF9ieV90eXBlW09CSl9DT01NSVRdOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9uZXdfdGFnKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqc3A7CisJY29uc3QgY2hhciAqZnJvbTsKKwljaGFyICp0YWdnZXI7CisJc3RydWN0IGJyYW5jaCAqczsKKwlzdHJ1Y3QgdGFnICp0OworCXVpbnRtYXhfdCBmcm9tX21hcmsgPSAwOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJLyogT2J0YWluIHRoZSBuZXcgdGFnIG5hbWUgZnJvbSB0aGUgcmVzdCBvZiBvdXIgY29tbWFuZCAqLworCXNwID0gc3RyY2hyKGNvbW1hbmRfYnVmLmJ1ZiwgJyAnKSArIDE7CisJdCA9IHBvb2xfYWxsb2Moc2l6ZW9mKHN0cnVjdCB0YWcpKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHN0cnVjdCB0YWcpKTsKKwl0LT5uYW1lID0gcG9vbF9zdHJkdXAoc3ApOworCWlmIChsYXN0X3RhZykKKwkJbGFzdF90YWctPm5leHRfdGFnID0gdDsKKwllbHNlCisJCWZpcnN0X3RhZyA9IHQ7CisJbGFzdF90YWcgPSB0OworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisKKwkvKiBmcm9tIC4uLiAqLworCWlmIChwcmVmaXhjbXAoY29tbWFuZF9idWYuYnVmLCAiZnJvbSAiKSkKKwkJZGllKCJFeHBlY3RlZCBmcm9tIGNvbW1hbmQsIGdvdCAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJZnJvbSA9IHN0cmNocihjb21tYW5kX2J1Zi5idWYsICcgJykgKyAxOworCXMgPSBsb29rdXBfYnJhbmNoKGZyb20pOworCWlmIChzKSB7CisJCWlmIChpc19udWxsX3NoYTEocy0+c2hhMSkpCisJCQlkaWUoIkNhbid0IHRhZyBhbiBlbXB0eSBicmFuY2guIik7CisJCWhhc2hjcHkoc2hhMSwgcy0+c2hhMSk7CisJCXR5cGUgPSBPQkpfQ09NTUlUOworCX0gZWxzZSBpZiAoKmZyb20gPT0gJzonKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lOworCQlmcm9tX21hcmsgPSBwYXJzZV9tYXJrX3JlZl9lb2woZnJvbSk7CisJCW9lID0gZmluZF9tYXJrKGZyb21fbWFyayk7CisJCXR5cGUgPSBvZS0+dHlwZTsKKwkJaGFzaGNweShzaGExLCBvZS0+aWR4LnNoYTEpOworCX0gZWxzZSBpZiAoIWdldF9zaGExKGZyb20sIHNoYTEpKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gZmluZF9vYmplY3Qoc2hhMSk7CisJCWlmICghb2UpIHsKKwkJCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOworCQkJaWYgKHR5cGUgPCAwKQorCQkJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0OiAlcyIsIGZyb20pOworCQl9IGVsc2UKKwkJCXR5cGUgPSBvZS0+dHlwZTsKKwl9IGVsc2UKKwkJZGllKCJJbnZhbGlkIHJlZiBuYW1lIG9yIFNIQTEgZXhwcmVzc2lvbjogJXMiLCBmcm9tKTsKKwlyZWFkX25leHRfY29tbWFuZCgpOworCisJLyogdGFnZ2VyIC4uLiAqLworCWlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgInRhZ2dlciAiKSkgeworCQl0YWdnZXIgPSBwYXJzZV9pZGVudChjb21tYW5kX2J1Zi5idWYgKyA3KTsKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwl9IGVsc2UKKwkJdGFnZ2VyID0gTlVMTDsKKworCS8qIHRhZyBwYXlsb2FkL21lc3NhZ2UgKi8KKwlwYXJzZV9kYXRhKCZtc2csIDAsIE5VTEwpOworCisJLyogYnVpbGQgdGhlIHRhZyBvYmplY3QgKi8KKwlzdHJidWZfcmVzZXQoJm5ld19kYXRhKTsKKworCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwKKwkJICAgICJvYmplY3QgJXNcbiIKKwkJICAgICJ0eXBlICVzXG4iCisJCSAgICAidGFnICVzXG4iLAorCQkgICAgc2hhMV90b19oZXgoc2hhMSksIHR5cGVuYW1lKHR5cGUpLCB0LT5uYW1lKTsKKwlpZiAodGFnZ2VyKQorCQlzdHJidWZfYWRkZigmbmV3X2RhdGEsCisJCQkgICAgInRhZ2dlciAlc1xuIiwgdGFnZ2VyKTsKKwlzdHJidWZfYWRkY2goJm5ld19kYXRhLCAnXG4nKTsKKwlzdHJidWZfYWRkYnVmKCZuZXdfZGF0YSwgJm1zZyk7CisJZnJlZSh0YWdnZXIpOworCisJaWYgKHN0b3JlX29iamVjdChPQkpfVEFHLCAmbmV3X2RhdGEsIE5VTEwsIHQtPnNoYTEsIDApKQorCQl0LT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJZWxzZQorCQl0LT5wYWNrX2lkID0gcGFja19pZDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfcmVzZXRfYnJhbmNoKHZvaWQpCit7CisJc3RydWN0IGJyYW5jaCAqYjsKKwljaGFyICpzcDsKKworCS8qIE9idGFpbiB0aGUgYnJhbmNoIG5hbWUgZnJvbSB0aGUgcmVzdCBvZiBvdXIgY29tbWFuZCAqLworCXNwID0gc3RyY2hyKGNvbW1hbmRfYnVmLmJ1ZiwgJyAnKSArIDE7CisJYiA9IGxvb2t1cF9icmFuY2goc3ApOworCWlmIChiKSB7CisJCWhhc2hjbHIoYi0+c2hhMSk7CisJCWhhc2hjbHIoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0uc2hhMSk7CisJCWhhc2hjbHIoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0uc2hhMSk7CisJCWlmIChiLT5icmFuY2hfdHJlZS50cmVlKSB7CisJCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoYi0+YnJhbmNoX3RyZWUudHJlZSk7CisJCQliLT5icmFuY2hfdHJlZS50cmVlID0gTlVMTDsKKwkJfQorCX0KKwllbHNlCisJCWIgPSBuZXdfYnJhbmNoKHNwKTsKKwlyZWFkX25leHRfY29tbWFuZCgpOworCXBhcnNlX2Zyb20oYik7CisJaWYgKGNvbW1hbmRfYnVmLmxlbiA+IDApCisJCXVucmVhZF9jb21tYW5kX2J1ZiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGNhdF9ibG9iX3dyaXRlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmICh3cml0ZV9pbl9mdWxsKGNhdF9ibG9iX2ZkLCBidWYsIHNpemUpICE9IHNpemUpCisJCWRpZV9lcnJubygiV3JpdGUgdG8gZnJvbnRlbmQgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB2b2lkIGNhdF9ibG9iKHN0cnVjdCBvYmplY3RfZW50cnkgKm9lLCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdKQoreworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGUgPSAwOworCWNoYXIgKmJ1ZjsKKworCWlmICghb2UgfHwgb2UtPnBhY2tfaWQgPT0gTUFYX1BBQ0tfSUQpIHsKKwkJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwl9IGVsc2UgeworCQl0eXBlID0gb2UtPnR5cGU7CisJCWJ1ZiA9IGdmaV91bnBhY2tfZW50cnkob2UsICZzaXplKTsKKwl9CisKKwkvKgorCSAqIE91dHB1dCBiYXNlZCBvbiBiYXRjaF9vbmVfb2JqZWN0KCkgZnJvbSBjYXQtZmlsZS5jLgorCSAqLworCWlmICh0eXBlIDw9IDApIHsKKwkJc3RyYnVmX3Jlc2V0KCZsaW5lKTsKKwkJc3RyYnVmX2FkZGYoJmxpbmUsICIlcyBtaXNzaW5nXG4iLCBzaGExX3RvX2hleChzaGExKSk7CisJCWNhdF9ibG9iX3dyaXRlKGxpbmUuYnVmLCBsaW5lLmxlbik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwkJZnJlZShidWYpOworCQlyZXR1cm47CisJfQorCWlmICghYnVmKQorCQlkaWUoIkNhbid0IHJlYWQgb2JqZWN0ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmICh0eXBlICE9IE9CSl9CTE9CKQorCQlkaWUoIk9iamVjdCAlcyBpcyBhICVzIGJ1dCBhIGJsb2Igd2FzIGV4cGVjdGVkLiIsCisJCSAgICBzaGExX3RvX2hleChzaGExKSwgdHlwZW5hbWUodHlwZSkpOworCXN0cmJ1Zl9yZXNldCgmbGluZSk7CisJc3RyYnVmX2FkZGYoJmxpbmUsICIlcyAlcyAlbHVcbiIsIHNoYTFfdG9faGV4KHNoYTEpLAorCQkJCQkJdHlwZW5hbWUodHlwZSksIHNpemUpOworCWNhdF9ibG9iX3dyaXRlKGxpbmUuYnVmLCBsaW5lLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCWNhdF9ibG9iX3dyaXRlKGJ1Ziwgc2l6ZSk7CisJY2F0X2Jsb2Jfd3JpdGUoIlxuIiwgMSk7CisJaWYgKG9lICYmIG9lLT5wYWNrX2lkID09IHBhY2tfaWQpIHsKKwkJbGFzdF9ibG9iLm9mZnNldCA9IG9lLT5pZHgub2Zmc2V0OworCQlzdHJidWZfYXR0YWNoKCZsYXN0X2Jsb2IuZGF0YSwgYnVmLCBzaXplLCBzaXplKTsKKwkJbGFzdF9ibG9iLmRlcHRoID0gb2UtPmRlcHRoOworCX0gZWxzZQorCQlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NhdF9ibG9iKHZvaWQpCit7CisJY29uc3QgY2hhciAqcDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSA9IG9lOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwkvKiBjYXQtYmxvYiBTUCA8b2JqZWN0PiBMRiAqLworCXAgPSBjb21tYW5kX2J1Zi5idWYgKyBzdHJsZW4oImNhdC1ibG9iICIpOworCWlmICgqcCA9PSAnOicpIHsKKwkJb2UgPSBmaW5kX21hcmsocGFyc2VfbWFya19yZWZfZW9sKHApKTsKKwkJaWYgKCFvZSkKKwkJCWRpZSgiVW5rbm93biBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCWhhc2hjcHkoc2hhMSwgb2UtPmlkeC5zaGExKTsKKwl9IGVsc2UgeworCQlpZiAoZ2V0X3NoYTFfaGV4KHAsIHNoYTEpKQorCQkJZGllKCJJbnZhbGlkIGRhdGFyZWY6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJaWYgKHBbNDBdKQorCQkJZGllKCJHYXJiYWdlIGFmdGVyIFNIQTE6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJb2UgPSBmaW5kX29iamVjdChzaGExKTsKKwl9CisKKwljYXRfYmxvYihvZSwgc2hhMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZXJlZmVyZW5jZShzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSwKKwkJCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJY2hhciAqYnVmID0gTlVMTDsKKwlpZiAoIW9lKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJCWlmICh0eXBlIDwgMCkKKwkJCWRpZSgib2JqZWN0IG5vdCBmb3VuZDogJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJCS8qIGNhY2hlIGl0ISAqLworCQlvZSA9IGluc2VydF9vYmplY3Qoc2hhMSk7CisJCW9lLT50eXBlID0gdHlwZTsKKwkJb2UtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwkJb2UtPmlkeC5vZmZzZXQgPSAxOworCX0KKwlzd2l0Y2ggKG9lLT50eXBlKSB7CisJY2FzZSBPQkpfVFJFRToJLyogZWFzeSBjYXNlLiAqLworCQlyZXR1cm4gb2U7CisJY2FzZSBPQkpfQ09NTUlUOgorCWNhc2UgT0JKX1RBRzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJOb3QgYSB0cmVlaXNoOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJfQorCisJaWYgKG9lLT5wYWNrX2lkICE9IE1BWF9QQUNLX0lEKSB7CS8qIGluIGEgcGFjayBiZWluZyB3cml0dGVuICovCisJCWJ1ZiA9IGdmaV91bnBhY2tfZW50cnkob2UsICZzaXplKTsKKwl9IGVsc2UgeworCQllbnVtIG9iamVjdF90eXBlIHVudXNlZDsKKwkJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnVudXNlZCwgJnNpemUpOworCX0KKwlpZiAoIWJ1ZikKKwkJZGllKCJDYW4ndCBsb2FkIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCS8qIFBlZWwgb25lIGxheWVyLiAqLworCXN3aXRjaCAob2UtPnR5cGUpIHsKKwljYXNlIE9CSl9UQUc6CisJCWlmIChzaXplIDwgNDAgKyBzdHJsZW4oIm9iamVjdCAiKSB8fAorCQkgICAgZ2V0X3NoYTFfaGV4KGJ1ZiArIHN0cmxlbigib2JqZWN0ICIpLCBzaGExKSkKKwkJCWRpZSgiSW52YWxpZCBTSEExIGluIHRhZzogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlicmVhazsKKwljYXNlIE9CSl9DT01NSVQ6CisJCWlmIChzaXplIDwgNDAgKyBzdHJsZW4oInRyZWUgIikgfHwKKwkJICAgIGdldF9zaGExX2hleChidWYgKyBzdHJsZW4oInRyZWUgIiksIHNoYTEpKQorCQkJZGllKCJJbnZhbGlkIFNIQTEgaW4gY29tbWl0OiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJfQorCisJZnJlZShidWYpOworCXJldHVybiBmaW5kX29iamVjdChzaGExKTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKnBhcnNlX3RyZWVpc2hfZGF0YXJlZihjb25zdCBjaGFyICoqcCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisKKwlpZiAoKipwID09ICc6JykgewkvKiA8bWFyaz4gKi8KKwkJZSA9IGZpbmRfbWFyayhwYXJzZV9tYXJrX3JlZl9zcGFjZShwKSk7CisJCWlmICghZSkKKwkJCWRpZSgiVW5rbm93biBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCWhhc2hjcHkoc2hhMSwgZS0+aWR4LnNoYTEpOworCX0gZWxzZSB7CS8qIDxzaGExPiAqLworCQlpZiAoZ2V0X3NoYTFfaGV4KCpwLCBzaGExKSkKKwkJCWRpZSgiSW52YWxpZCBkYXRhcmVmOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCWUgPSBmaW5kX29iamVjdChzaGExKTsKKwkJKnAgKz0gNDA7CisJfQorCisJd2hpbGUgKCFlIHx8IGUtPnR5cGUgIT0gT0JKX1RSRUUpCisJCWUgPSBkZXJlZmVyZW5jZShlLCBzaGExKTsKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfbHMoaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCisJLyogU2VlIHNob3dfdHJlZSgpLiAqLworCWNvbnN0IGNoYXIgKnR5cGUgPQorCQlTX0lTR0lUTElOSyhtb2RlKSA/IGNvbW1pdF90eXBlIDoKKwkJU19JU0RJUihtb2RlKSA/IHRyZWVfdHlwZSA6CisJCWJsb2JfdHlwZTsKKworCWlmICghbW9kZSkgeworCQkvKiBtaXNzaW5nIFNQIHBhdGggTEYgKi8KKwkJc3RyYnVmX3Jlc2V0KCZsaW5lKTsKKwkJc3RyYnVmX2FkZHN0cigmbGluZSwgIm1pc3NpbmcgIik7CisJCXF1b3RlX2Nfc3R5bGUocGF0aCwgJmxpbmUsIE5VTEwsIDApOworCQlzdHJidWZfYWRkY2goJmxpbmUsICdcbicpOworCX0gZWxzZSB7CisJCS8qIG1vZGUgU1AgdHlwZSBTUCBvYmplY3RfbmFtZSBUQUIgcGF0aCBMRiAqLworCQlzdHJidWZfcmVzZXQoJmxpbmUpOworCQlzdHJidWZfYWRkZigmbGluZSwgIiUwNm8gJXMgJXNcdCIsCisJCQkJbW9kZSAmIH5OT19ERUxUQSwgdHlwZSwgc2hhMV90b19oZXgoc2hhMSkpOworCQlxdW90ZV9jX3N0eWxlKHBhdGgsICZsaW5lLCBOVUxMLCAwKTsKKwkJc3RyYnVmX2FkZGNoKCZsaW5lLCAnXG4nKTsKKwl9CisJY2F0X2Jsb2Jfd3JpdGUobGluZS5idWYsIGxpbmUubGVuKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfbHMoc3RydWN0IGJyYW5jaCAqYikKK3sKKwljb25zdCBjaGFyICpwOworCXN0cnVjdCB0cmVlX2VudHJ5ICpyb290ID0gTlVMTDsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSBsZWFmID0ge05VTEx9OworCisJLyogbHMgU1AgKDx0cmVlaXNoPiBTUCk/IDxwYXRoPiAqLworCXAgPSBjb21tYW5kX2J1Zi5idWYgKyBzdHJsZW4oImxzICIpOworCWlmICgqcCA9PSAnIicpIHsKKwkJaWYgKCFiKQorCQkJZGllKCJOb3QgaW4gYSBjb21taXQ6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJcm9vdCA9ICZiLT5icmFuY2hfdHJlZTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplID0gcGFyc2VfdHJlZWlzaF9kYXRhcmVmKCZwKTsKKwkJcm9vdCA9IG5ld190cmVlX2VudHJ5KCk7CisJCWhhc2hjcHkocm9vdC0+dmVyc2lvbnNbMV0uc2hhMSwgZS0+aWR4LnNoYTEpOworCQlsb2FkX3RyZWUocm9vdCk7CisJCWlmICgqcCsrICE9ICcgJykKKwkJCWRpZSgiTWlzc2luZyBzcGFjZSBhZnRlciB0cmVlLWlzaDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCX0KKwlpZiAoKnAgPT0gJyInKSB7CisJCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHVxID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKmVuZHA7CisJCXN0cmJ1Zl9yZXNldCgmdXEpOworCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZ1cSwgcCwgJmVuZHApKQorCQkJZGllKCJJbnZhbGlkIHBhdGg6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJaWYgKCplbmRwKQorCQkJZGllKCJHYXJiYWdlIGFmdGVyIHBhdGggaW46ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJcCA9IHVxLmJ1ZjsKKwl9CisJdHJlZV9jb250ZW50X2dldChyb290LCBwLCAmbGVhZik7CisJLyoKKwkgKiBBIGRpcmVjdG9yeSBpbiBwcmVwYXJhdGlvbiB3b3VsZCBoYXZlIGEgc2hhMSBvZiB6ZXJvCisJICogdW50aWwgaXQgaXMgc2F2ZWQuICBTYXZlLCBmb3Igc2ltcGxpY2l0eS4KKwkgKi8KKwlpZiAoU19JU0RJUihsZWFmLnZlcnNpb25zWzFdLm1vZGUpKQorCQlzdG9yZV90cmVlKCZsZWFmKTsKKworCXByaW50X2xzKGxlYWYudmVyc2lvbnNbMV0ubW9kZSwgbGVhZi52ZXJzaW9uc1sxXS5zaGExLCBwKTsKKwlpZiAobGVhZi50cmVlKQorCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUobGVhZi50cmVlKTsKKwlpZiAoIWIgfHwgcm9vdCAhPSAmYi0+YnJhbmNoX3RyZWUpCisJCXJlbGVhc2VfdHJlZV9lbnRyeShyb290KTsKK30KKworc3RhdGljIHZvaWQgY2hlY2twb2ludCh2b2lkKQoreworCWNoZWNrcG9pbnRfcmVxdWVzdGVkID0gMDsKKwlpZiAob2JqZWN0X2NvdW50KSB7CisJCWN5Y2xlX3BhY2tmaWxlKCk7CisJCWR1bXBfYnJhbmNoZXMoKTsKKwkJZHVtcF90YWdzKCk7CisJCWR1bXBfbWFya3MoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NoZWNrcG9pbnQodm9pZCkKK3sKKwljaGVja3BvaW50X3JlcXVlc3RlZCA9IDE7CisJc2tpcF9vcHRpb25hbF9sZigpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9wcm9ncmVzcyh2b2lkKQoreworCWZ3cml0ZShjb21tYW5kX2J1Zi5idWYsIDEsIGNvbW1hbmRfYnVmLmxlbiwgc3Rkb3V0KTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworCWZmbHVzaChzdGRvdXQpOworCXNraXBfb3B0aW9uYWxfbGYoKTsKK30KKworc3RhdGljIGNoYXIqIG1ha2VfZmFzdF9pbXBvcnRfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgYWJzX3BhdGggPSBTVFJCVUZfSU5JVDsKKworCWlmICghcmVsYXRpdmVfbWFya3NfcGF0aHMgfHwgaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkKKwkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJc3RyYnVmX2FkZGYoJmFic19wYXRoLCAiJXMvaW5mby9mYXN0LWltcG9ydC8lcyIsIGdldF9naXRfZGlyKCksIHBhdGgpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZhYnNfcGF0aCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9pbXBvcnRfbWFya3MoY29uc3QgY2hhciAqbWFya3MsCisJCQkJCWludCBmcm9tX3N0cmVhbSwgaW50IGlnbm9yZV9taXNzaW5nKQoreworCWlmIChpbXBvcnRfbWFya3NfZmlsZSkgeworCQlpZiAoZnJvbV9zdHJlYW0pCisJCQlkaWUoIk9ubHkgb25lIGltcG9ydC1tYXJrcyBjb21tYW5kIGFsbG93ZWQgcGVyIHN0cmVhbSIpOworCisJCS8qIHJlYWQgcHJldmlvdXMgbWFyayBmaWxlICovCisJCWlmKCFpbXBvcnRfbWFya3NfZmlsZV9mcm9tX3N0cmVhbSkKKwkJCXJlYWRfbWFya3MoKTsKKwl9CisKKwlpbXBvcnRfbWFya3NfZmlsZSA9IG1ha2VfZmFzdF9pbXBvcnRfcGF0aChtYXJrcyk7CisJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChpbXBvcnRfbWFya3NfZmlsZSk7CisJaW1wb3J0X21hcmtzX2ZpbGVfZnJvbV9zdHJlYW0gPSBmcm9tX3N0cmVhbTsKKwlpbXBvcnRfbWFya3NfZmlsZV9pZ25vcmVfbWlzc2luZyA9IGlnbm9yZV9taXNzaW5nOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fZGF0ZV9mb3JtYXQoY29uc3QgY2hhciAqZm10KQoreworCWlmICghc3RyY21wKGZtdCwgInJhdyIpKQorCQl3aGVuc3BlYyA9IFdIRU5TUEVDX1JBVzsKKwllbHNlIGlmICghc3RyY21wKGZtdCwgInJmYzI4MjIiKSkKKwkJd2hlbnNwZWMgPSBXSEVOU1BFQ19SRkMyODIyOworCWVsc2UgaWYgKCFzdHJjbXAoZm10LCAibm93IikpCisJCXdoZW5zcGVjID0gV0hFTlNQRUNfTk9XOworCWVsc2UKKwkJZGllKCJ1bmtub3duIC0tZGF0ZS1mb3JtYXQgYXJndW1lbnQgJXMiLCBmbXQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bG9uZ19hcmcoY29uc3QgY2hhciAqb3B0aW9uLCBjb25zdCBjaGFyICphcmcpCit7CisJY2hhciAqZW5kcHRyOworCXVuc2lnbmVkIGxvbmcgcnYgPSBzdHJ0b3VsKGFyZywgJmVuZHB0ciwgMCk7CisJaWYgKHN0cmNocihhcmcsICctJykgfHwgZW5kcHRyID09IGFyZyB8fCAqZW5kcHRyKQorCQlkaWUoIiVzOiBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIiLCBvcHRpb24pOworCXJldHVybiBydjsKK30KKworc3RhdGljIHZvaWQgb3B0aW9uX2RlcHRoKGNvbnN0IGNoYXIgKmRlcHRoKQoreworCW1heF9kZXB0aCA9IHVsb25nX2FyZygiLS1kZXB0aCIsIGRlcHRoKTsKKwlpZiAobWF4X2RlcHRoID4gTUFYX0RFUFRIKQorCQlkaWUoIi0tZGVwdGggY2Fubm90IGV4Y2VlZCAldSIsIE1BWF9ERVBUSCk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9hY3RpdmVfYnJhbmNoZXMoY29uc3QgY2hhciAqYnJhbmNoZXMpCit7CisJbWF4X2FjdGl2ZV9icmFuY2hlcyA9IHVsb25nX2FyZygiLS1hY3RpdmUtYnJhbmNoZXMiLCBicmFuY2hlcyk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9leHBvcnRfbWFya3MoY29uc3QgY2hhciAqbWFya3MpCit7CisJZXhwb3J0X21hcmtzX2ZpbGUgPSBtYWtlX2Zhc3RfaW1wb3J0X3BhdGgobWFya3MpOworCXNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoZXhwb3J0X21hcmtzX2ZpbGUpOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fY2F0X2Jsb2JfZmQoY29uc3QgY2hhciAqZmQpCit7CisJdW5zaWduZWQgbG9uZyBuID0gdWxvbmdfYXJnKCItLWNhdC1ibG9iLWZkIiwgZmQpOworCWlmIChuID4gKHVuc2lnbmVkIGxvbmcpIElOVF9NQVgpCisJCWRpZSgiLS1jYXQtYmxvYi1mZCBjYW5ub3QgZXhjZWVkICVkIiwgSU5UX01BWCk7CisJY2F0X2Jsb2JfZmQgPSAoaW50KSBuOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fZXhwb3J0X3BhY2tfZWRnZXMoY29uc3QgY2hhciAqZWRnZXMpCit7CisJaWYgKHBhY2tfZWRnZXMpCisJCWZjbG9zZShwYWNrX2VkZ2VzKTsKKwlwYWNrX2VkZ2VzID0gZm9wZW4oZWRnZXMsICJhIik7CisJaWYgKCFwYWNrX2VkZ2VzKQorCQlkaWVfZXJybm8oIkNhbm5vdCBvcGVuICclcyciLCBlZGdlcyk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb25lX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24pCit7CisJaWYgKCFwcmVmaXhjbXAob3B0aW9uLCAibWF4LXBhY2stc2l6ZT0iKSkgeworCQl1bnNpZ25lZCBsb25nIHY7CisJCWlmICghZ2l0X3BhcnNlX3Vsb25nKG9wdGlvbiArIDE0LCAmdikpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHYgPCA4MTkyKSB7CisJCQl3YXJuaW5nKCJtYXgtcGFjay1zaXplIGlzIG5vdyBpbiBieXRlcywgYXNzdW1pbmcgLS1tYXgtcGFjay1zaXplPSVsdW0iLCB2KTsKKwkJCXYgKj0gMTAyNCAqIDEwMjQ7CisJCX0gZWxzZSBpZiAodiA8IDEwMjQgKiAxMDI0KSB7CisJCQl3YXJuaW5nKCJtaW5pbXVtIG1heC1wYWNrLXNpemUgaXMgMSBNaUIiKTsKKwkJCXYgPSAxMDI0ICogMTAyNDsKKwkJfQorCQltYXhfcGFja3NpemUgPSB2OworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChvcHRpb24sICJiaWctZmlsZS10aHJlc2hvbGQ9IikpIHsKKwkJdW5zaWduZWQgbG9uZyB2OworCQlpZiAoIWdpdF9wYXJzZV91bG9uZyhvcHRpb24gKyAxOSwgJnYpKQorCQkJcmV0dXJuIDA7CisJCWJpZ19maWxlX3RocmVzaG9sZCA9IHY7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKG9wdGlvbiwgImRlcHRoPSIpKSB7CisJCW9wdGlvbl9kZXB0aChvcHRpb24gKyA2KTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAob3B0aW9uLCAiYWN0aXZlLWJyYW5jaGVzPSIpKSB7CisJCW9wdGlvbl9hY3RpdmVfYnJhbmNoZXMob3B0aW9uICsgMTYpOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChvcHRpb24sICJleHBvcnQtcGFjay1lZGdlcz0iKSkgeworCQlvcHRpb25fZXhwb3J0X3BhY2tfZWRnZXMob3B0aW9uICsgMTgpOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChvcHRpb24sICJxdWlldCIpKSB7CisJCXNob3dfc3RhdHMgPSAwOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChvcHRpb24sICJzdGF0cyIpKSB7CisJCXNob3dfc3RhdHMgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBhcnNlX29uZV9mZWF0dXJlKGNvbnN0IGNoYXIgKmZlYXR1cmUsIGludCBmcm9tX3N0cmVhbSkKK3sKKwlpZiAoIXByZWZpeGNtcChmZWF0dXJlLCAiZGF0ZS1mb3JtYXQ9IikpIHsKKwkJb3B0aW9uX2RhdGVfZm9ybWF0KGZlYXR1cmUgKyAxMik7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKGZlYXR1cmUsICJpbXBvcnQtbWFya3M9IikpIHsKKwkJb3B0aW9uX2ltcG9ydF9tYXJrcyhmZWF0dXJlICsgMTMsIGZyb21fc3RyZWFtLCAwKTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoZmVhdHVyZSwgImltcG9ydC1tYXJrcy1pZi1leGlzdHM9IikpIHsKKwkJb3B0aW9uX2ltcG9ydF9tYXJrcyhmZWF0dXJlICsgc3RybGVuKCJpbXBvcnQtbWFya3MtaWYtZXhpc3RzPSIpLAorCQkJCQlmcm9tX3N0cmVhbSwgMSk7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKGZlYXR1cmUsICJleHBvcnQtbWFya3M9IikpIHsKKwkJb3B0aW9uX2V4cG9ydF9tYXJrcyhmZWF0dXJlICsgMTMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChmZWF0dXJlLCAiY2F0LWJsb2IiKSkgeworCQk7IC8qIERvbid0IGRpZSAtIHRoaXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwl9IGVsc2UgaWYgKCFzdHJjbXAoZmVhdHVyZSwgInJlbGF0aXZlLW1hcmtzIikpIHsKKwkJcmVsYXRpdmVfbWFya3NfcGF0aHMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChmZWF0dXJlLCAibm8tcmVsYXRpdmUtbWFya3MiKSkgeworCQlyZWxhdGl2ZV9tYXJrc19wYXRocyA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJkb25lIikpIHsKKwkJcmVxdWlyZV9leHBsaWNpdF90ZXJtaW5hdGlvbiA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJmb3JjZSIpKSB7CisJCWZvcmNlX3VwZGF0ZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJub3RlcyIpIHx8ICFzdHJjbXAoZmVhdHVyZSwgImxzIikpIHsKKwkJOyAvKiBkbyBub3RoaW5nOyB3ZSBoYXZlIHRoZSBmZWF0dXJlICovCisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2ZlYXR1cmUodm9pZCkKK3sKKwljaGFyICpmZWF0dXJlID0gY29tbWFuZF9idWYuYnVmICsgODsKKworCWlmIChzZWVuX2RhdGFfY29tbWFuZCkKKwkJZGllKCJHb3QgZmVhdHVyZSBjb21tYW5kICclcycgYWZ0ZXIgZGF0YSBjb21tYW5kIiwgZmVhdHVyZSk7CisKKwlpZiAocGFyc2Vfb25lX2ZlYXR1cmUoZmVhdHVyZSwgMSkpCisJCXJldHVybjsKKworCWRpZSgiVGhpcyB2ZXJzaW9uIG9mIGZhc3QtaW1wb3J0IGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZSAlcy4iLCBmZWF0dXJlKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9uKHZvaWQpCit7CisJY2hhciAqb3B0aW9uID0gY29tbWFuZF9idWYuYnVmICsgMTE7CisKKwlpZiAoc2Vlbl9kYXRhX2NvbW1hbmQpCisJCWRpZSgiR290IG9wdGlvbiBjb21tYW5kICclcycgYWZ0ZXIgZGF0YSBjb21tYW5kIiwgb3B0aW9uKTsKKworCWlmIChwYXJzZV9vbmVfb3B0aW9uKG9wdGlvbikpCisJCXJldHVybjsKKworCWRpZSgiVGhpcyB2ZXJzaW9uIG9mIGZhc3QtaW1wb3J0IGRvZXMgbm90IHN1cHBvcnQgb3B0aW9uOiAlcyIsIG9wdGlvbik7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKGssICJwYWNrLmRlcHRoIikpIHsKKwkJbWF4X2RlcHRoID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCWlmIChtYXhfZGVwdGggPiBNQVhfREVQVEgpCisJCQltYXhfZGVwdGggPSBNQVhfREVQVEg7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay5jb21wcmVzc2lvbiIpKSB7CisJCWludCBsZXZlbCA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlpZiAobGV2ZWwgPT0gLTEpCisJCQlsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKwkJZWxzZSBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gWl9CRVNUX0NPTVBSRVNTSU9OKQorCQkJZGllKCJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIsIGxldmVsKTsKKwkJcGFja19jb21wcmVzc2lvbl9sZXZlbCA9IGxldmVsOworCQlwYWNrX2NvbXByZXNzaW9uX3NlZW4gPSAxOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInBhY2suaW5kZXh2ZXJzaW9uIikpIHsKKwkJcGFja19pZHhfb3B0cy52ZXJzaW9uID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCWlmIChwYWNrX2lkeF9vcHRzLnZlcnNpb24gPiAyKQorCQkJZGllKCJiYWQgcGFjay5pbmRleHZlcnNpb249JSJQUkl1MzIsCisJCQkgICAgcGFja19pZHhfb3B0cy52ZXJzaW9uKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLnBhY2tzaXplbGltaXQiKSkgeworCQltYXhfcGFja3NpemUgPSBnaXRfY29uZmlnX3Vsb25nKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2LCBjYik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGZhc3RfaW1wb3J0X3VzYWdlW10gPQorImdpdCBmYXN0LWltcG9ydCBbLS1kYXRlLWZvcm1hdD08Zj5dIFstLW1heC1wYWNrLXNpemU9PG4+XSBbLS1iaWctZmlsZS10aHJlc2hvbGQ9PG4+XSBbLS1kZXB0aD08bj5dIFstLWFjdGl2ZS1icmFuY2hlcz08bj5dIFstLWV4cG9ydC1tYXJrcz08bWFya3MuZmlsZT5dIjsKKworc3RhdGljIHZvaWQgcGFyc2VfYXJndih2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMTsgaSA8IGdsb2JhbF9hcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYSA9IGdsb2JhbF9hcmd2W2ldOworCisJCWlmICgqYSAhPSAnLScgfHwgIXN0cmNtcChhLCAiLS0iKSkKKwkJCWJyZWFrOworCisJCWlmIChwYXJzZV9vbmVfb3B0aW9uKGEgKyAyKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXJzZV9vbmVfZmVhdHVyZShhICsgMiwgMCkpCisJCQljb250aW51ZTsKKworCQlpZiAoIXByZWZpeGNtcChhICsgMiwgImNhdC1ibG9iLWZkPSIpKSB7CisJCQlvcHRpb25fY2F0X2Jsb2JfZmQoYSArIDIgKyBzdHJsZW4oImNhdC1ibG9iLWZkPSIpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGllKCJ1bmtub3duIG9wdGlvbiAlcyIsIGEpOworCX0KKwlpZiAoaSAhPSBnbG9iYWxfYXJnYykKKwkJdXNhZ2UoZmFzdF9pbXBvcnRfdXNhZ2UpOworCisJc2Vlbl9kYXRhX2NvbW1hbmQgPSAxOworCWlmIChpbXBvcnRfbWFya3NfZmlsZSkKKwkJcmVhZF9tYXJrcygpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoZmFzdF9pbXBvcnRfdXNhZ2UpOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCXJlc2V0X3BhY2tfaWR4X29wdGlvbigmcGFja19pZHhfb3B0cyk7CisJZ2l0X2NvbmZpZyhnaXRfcGFja19jb25maWcsIE5VTEwpOworCWlmICghcGFja19jb21wcmVzc2lvbl9zZWVuICYmIGNvcmVfY29tcHJlc3Npb25fc2VlbikKKwkJcGFja19jb21wcmVzc2lvbl9sZXZlbCA9IGNvcmVfY29tcHJlc3Npb25fbGV2ZWw7CisKKwlhbGxvY19vYmplY3RzKG9iamVjdF9lbnRyeV9hbGxvYyk7CisJc3RyYnVmX2luaXQoJmNvbW1hbmRfYnVmLCAwKTsKKwlhdG9tX3RhYmxlID0geGNhbGxvYyhhdG9tX3RhYmxlX3N6LCBzaXplb2Yoc3RydWN0IGF0b21fc3RyKikpOworCWJyYW5jaF90YWJsZSA9IHhjYWxsb2MoYnJhbmNoX3RhYmxlX3N6LCBzaXplb2Yoc3RydWN0IGJyYW5jaCopKTsKKwlhdmFpbF90cmVlX3RhYmxlID0geGNhbGxvYyhhdmFpbF90cmVlX3RhYmxlX3N6LCBzaXplb2Yoc3RydWN0IGF2YWlsX3RyZWVfY29udGVudCopKTsKKwltYXJrcyA9IHBvb2xfY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbWFya19zZXQpKTsKKworCWdsb2JhbF9hcmdjID0gYXJnYzsKKwlnbG9iYWxfYXJndiA9IGFyZ3Y7CisKKwlyY19mcmVlID0gcG9vbF9hbGxvYyhjbWRfc2F2ZSAqIHNpemVvZigqcmNfZnJlZSkpOworCWZvciAoaSA9IDA7IGkgPCAoY21kX3NhdmUgLSAxKTsgaSsrKQorCQlyY19mcmVlW2ldLm5leHQgPSAmcmNfZnJlZVtpICsgMV07CisJcmNfZnJlZVtjbWRfc2F2ZSAtIDFdLm5leHQgPSBOVUxMOworCisJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisJc3RhcnRfcGFja2ZpbGUoKTsKKwlzZXRfZGllX3JvdXRpbmUoZGllX25pY2VseSk7CisJc2V0X2NoZWNrcG9pbnRfc2lnbmFsKCk7CisJd2hpbGUgKHJlYWRfbmV4dF9jb21tYW5kKCkgIT0gRU9GKSB7CisJCWlmICghc3RyY21wKCJibG9iIiwgY29tbWFuZF9idWYuYnVmKSkKKwkJCXBhcnNlX25ld19ibG9iKCk7CisJCWVsc2UgaWYgKCFwcmVmaXhjbXAoY29tbWFuZF9idWYuYnVmLCAibHMgIikpCisJCQlwYXJzZV9scyhOVUxMKTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJjb21taXQgIikpCisJCQlwYXJzZV9uZXdfY29tbWl0KCk7CisJCWVsc2UgaWYgKCFwcmVmaXhjbXAoY29tbWFuZF9idWYuYnVmLCAidGFnICIpKQorCQkJcGFyc2VfbmV3X3RhZygpOworCQllbHNlIGlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgInJlc2V0ICIpKQorCQkJcGFyc2VfcmVzZXRfYnJhbmNoKCk7CisJCWVsc2UgaWYgKCFzdHJjbXAoImNoZWNrcG9pbnQiLCBjb21tYW5kX2J1Zi5idWYpKQorCQkJcGFyc2VfY2hlY2twb2ludCgpOworCQllbHNlIGlmICghc3RyY21wKCJkb25lIiwgY29tbWFuZF9idWYuYnVmKSkKKwkJCWJyZWFrOworCQllbHNlIGlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgInByb2dyZXNzICIpKQorCQkJcGFyc2VfcHJvZ3Jlc3MoKTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJmZWF0dXJlICIpKQorCQkJcGFyc2VfZmVhdHVyZSgpOworCQllbHNlIGlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgIm9wdGlvbiBnaXQgIikpCisJCQlwYXJzZV9vcHRpb24oKTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJvcHRpb24gIikpCisJCQkvKiBpZ25vcmUgbm9uLWdpdCBvcHRpb25zKi87CisJCWVsc2UKKwkJCWRpZSgiVW5zdXBwb3J0ZWQgY29tbWFuZDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCisJCWlmIChjaGVja3BvaW50X3JlcXVlc3RlZCkKKwkJCWNoZWNrcG9pbnQoKTsKKwl9CisKKwkvKiBhcmd2IGhhc24ndCBiZWVuIHBhcnNlZCB5ZXQsIGRvIHNvICovCisJaWYgKCFzZWVuX2RhdGFfY29tbWFuZCkKKwkJcGFyc2VfYXJndigpOworCisJaWYgKHJlcXVpcmVfZXhwbGljaXRfdGVybWluYXRpb24gJiYgZmVvZihzdGRpbikpCisJCWRpZSgic3RyZWFtIGVuZHMgZWFybHkiKTsKKworCWVuZF9wYWNrZmlsZSgpOworCisJZHVtcF9icmFuY2hlcygpOworCWR1bXBfdGFncygpOworCXVua2VlcF9hbGxfcGFja3MoKTsKKwlkdW1wX21hcmtzKCk7CisKKwlpZiAocGFja19lZGdlcykKKwkJZmNsb3NlKHBhY2tfZWRnZXMpOworCisJaWYgKHNob3dfc3RhdHMpIHsKKwkJdWludG1heF90IHRvdGFsX2NvdW50ID0gMCwgZHVwbGljYXRlX2NvdW50ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob2JqZWN0X2NvdW50X2J5X3R5cGUpOyBpKyspCisJCQl0b3RhbF9jb3VudCArPSBvYmplY3RfY291bnRfYnlfdHlwZVtpXTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHVwbGljYXRlX2NvdW50X2J5X3R5cGUpOyBpKyspCisJCQlkdXBsaWNhdGVfY291bnQgKz0gZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbaV07CisKKwkJZnByaW50ZihzdGRlcnIsICIlcyBzdGF0aXN0aWNzOlxuIiwgYXJndlswXSk7CisJCWZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJZnByaW50ZihzdGRlcnIsICJBbGxvYydkIG9iamVjdHM6ICUxMCIgUFJJdU1BWCAiXG4iLCBhbGxvY19jb3VudCk7CisJCWZwcmludGYoc3RkZXJyLCAiVG90YWwgb2JqZWN0czogICAlMTAiIFBSSXVNQVggIiAoJTEwIiBQUkl1TUFYICIgZHVwbGljYXRlcyAgICAgICAgICAgICAgICAgIClcbiIsIHRvdGFsX2NvdW50LCBkdXBsaWNhdGVfY291bnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIGJsb2JzICA6ICAgJTEwIiBQUkl1TUFYICIgKCUxMCIgUFJJdU1BWCAiIGR1cGxpY2F0ZXMgJTEwIiBQUkl1TUFYICIgZGVsdGFzIG9mICUxMCIgUFJJdU1BWCIgYXR0ZW1wdHMpXG4iLCBvYmplY3RfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0sIGR1cGxpY2F0ZV9jb3VudF9ieV90eXBlW09CSl9CTE9CXSwgZGVsdGFfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0sIGRlbHRhX2NvdW50X2F0dGVtcHRzX2J5X3R5cGVbT0JKX0JMT0JdKTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgICB0cmVlcyAgOiAgICUxMCIgUFJJdU1BWCAiICglMTAiIFBSSXVNQVggIiBkdXBsaWNhdGVzICUxMCIgUFJJdU1BWCAiIGRlbHRhcyBvZiAlMTAiIFBSSXVNQVgiIGF0dGVtcHRzKVxuIiwgb2JqZWN0X2NvdW50X2J5X3R5cGVbT0JKX1RSRUVdLCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfVFJFRV0sIGRlbHRhX2NvdW50X2J5X3R5cGVbT0JKX1RSRUVdLCBkZWx0YV9jb3VudF9hdHRlbXB0c19ieV90eXBlW09CSl9UUkVFXSk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgY29tbWl0czogICAlMTAiIFBSSXVNQVggIiAoJTEwIiBQUkl1TUFYICIgZHVwbGljYXRlcyAlMTAiIFBSSXVNQVggIiBkZWx0YXMgb2YgJTEwIiBQUkl1TUFYIiBhdHRlbXB0cylcbiIsIG9iamVjdF9jb3VudF9ieV90eXBlW09CSl9DT01NSVRdLCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfQ09NTUlUXSwgZGVsdGFfY291bnRfYnlfdHlwZVtPQkpfQ09NTUlUXSwgZGVsdGFfY291bnRfYXR0ZW1wdHNfYnlfdHlwZVtPQkpfQ09NTUlUXSk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgdGFncyAgIDogICAlMTAiIFBSSXVNQVggIiAoJTEwIiBQUkl1TUFYICIgZHVwbGljYXRlcyAlMTAiIFBSSXVNQVggIiBkZWx0YXMgb2YgJTEwIiBQUkl1TUFYIiBhdHRlbXB0cylcbiIsIG9iamVjdF9jb3VudF9ieV90eXBlW09CSl9UQUddLCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfVEFHXSwgZGVsdGFfY291bnRfYnlfdHlwZVtPQkpfVEFHXSwgZGVsdGFfY291bnRfYXR0ZW1wdHNfYnlfdHlwZVtPQkpfVEFHXSk7CisJCWZwcmludGYoc3RkZXJyLCAiVG90YWwgYnJhbmNoZXM6ICAlMTBsdSAoJTEwbHUgbG9hZHMgICAgIClcbiIsIGJyYW5jaF9jb3VudCwgYnJhbmNoX2xvYWRfY291bnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIG1hcmtzOiAgICAgJTEwIiBQUkl1TUFYICIgKCUxMCIgUFJJdU1BWCAiIHVuaXF1ZSAgICApXG4iLCAoKCh1aW50bWF4X3QpMSkgPDwgbWFya3MtPnNoaWZ0KSAqIDEwMjQsIG1hcmtzX3NldF9jb3VudCk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgYXRvbXM6ICAgICAlMTB1XG4iLCBhdG9tX2NudCk7CisJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IHRvdGFsOiAgICAlMTAiIFBSSXVNQVggIiBLaUJcbiIsICh0b3RhbF9hbGxvY2QgKyBhbGxvY19jb3VudCpzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSkpLzEwMjQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgICBwb29sczogICAgJTEwbHUgS2lCXG4iLCAodW5zaWduZWQgbG9uZykodG90YWxfYWxsb2NkLzEwMjQpKTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgIG9iamVjdHM6ICAgICUxMCIgUFJJdU1BWCAiIEtpQlxuIiwgKGFsbG9jX2NvdW50KnNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5KSkvMTAyNCk7CisJCWZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJcGFja19yZXBvcnQoKTsKKwkJZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJfQorCisJcmV0dXJuIGZhaWx1cmUgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL2ZldGNoLXBhY2suaCBiL2ZldGNoLXBhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjE0ODcxCi0tLSAvZGV2L251bGwKKysrIGIvZmV0Y2gtcGFjay5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgRkVUQ0hfUEFDS19ICisjZGVmaW5lIEZFVENIX1BBQ0tfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RydWN0IGZldGNoX3BhY2tfYXJncyB7CisJY29uc3QgY2hhciAqdXBsb2FkcGFjazsKKwlpbnQgdW5wYWNrbGltaXQ7CisJaW50IGRlcHRoOworCXVuc2lnbmVkIHF1aWV0OjEsCisJCWtlZXBfcGFjazoxLAorCQlsb2NrX3BhY2s6MSwKKwkJdXNlX3RoaW5fcGFjazoxLAorCQlmZXRjaF9hbGw6MSwKKwkJc3RkaW5fcmVmczoxLAorCQl2ZXJib3NlOjEsCisJCW5vX3Byb2dyZXNzOjEsCisJCWluY2x1ZGVfdGFnOjEsCisJCXN0YXRlbGVzc19ycGM6MTsKK307CisKKy8qCisgKiBzb3VnaHQgY29udGFpbnMgdGhlIGZ1bGwgbmFtZXMgb2YgcmVtb3RlIHJlZmVyZW5jZXMgdGhhdCBzaG91bGQgYmUKKyAqIHVwZGF0ZWQgZnJvbS4gIE9uIHJldHVybiwgdGhlIG5hbWVzIHRoYXQgd2VyZSBmb3VuZCBvbiB0aGUgcmVtb3RlCisgKiB3aWxsIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGxpc3QuICBUaGUgdXRpbCBtZW1iZXJzIG9mIHRoZQorICogc3RyaW5nX2xpc3RfaXRlbXMgYXJlIHVzZWQgaW50ZXJuYWxseTsgdGhleSBtdXN0IGJlIE5VTEwgb24gZW50cnkKKyAqIChhbmQgd2lsbCBiZSBOVUxMIG9uIGV4aXQpLgorICovCitzdHJ1Y3QgcmVmICpmZXRjaF9wYWNrKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCSAgICAgICBpbnQgZmRbXSwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgcmVmICpyZWYsCisJCSAgICAgICBjb25zdCBjaGFyICpkZXN0LAorCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICpzb3VnaHQsCisJCSAgICAgICBjaGFyICoqcGFja19sb2NrZmlsZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZml4dXAtYnVpbHRpbnMgYi9maXh1cC1idWlsdGlucwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42M2RmYTRjCi0tLSAvZGV2L251bGwKKysrIGIvZml4dXAtYnVpbHRpbnMKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCit3aGlsZSBbICIkMSIgXQorZG8KKwlpZiBbICIkMSIgIT0gImdpdC1zaC1zZXR1cCIgLWEgIiQxIiAhPSAiZ2l0LXBhcnNlLXJlbW90ZSIgLWEgIiQxIiAhPSAiZ2l0LXN2biIgXTsgdGhlbgorCQlvbGQ9IiQxIgorCQluZXc9JChlY2hvICIkMSIgfCBzZWQgJ3MvZ2l0LS9naXQgLycpCisJCWVjaG8gIkNvbnZlcnRpbmcgJyRvbGQnIHRvICckbmV3JyIKKwkJc2VkIC1pICJzL1xcPCRvbGRcXD4vJG5ldy9nIiAkKGdpdCBscy1maWxlcyAnKi5zaCcpCisJZmkKKwlzaGlmdAorZG9uZQorCitzZWQgLWkgJ3MvZ2l0IG1lcmdlLW9uZS1maWxlL2dpdC1tZXJnZS1vbmUtZmlsZS9nCitzL2dpdCByZWJhc2UtdG9kby9naXQtcmViYXNlLXRvZG8vZycgJChnaXQgbHMtZmlsZXMgJyouc2gnKQorZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggPiYgL2Rldi9udWxsCitleGl0IDAKZGlmZiAtLWdpdCBhL2ZtdC1tZXJnZS1tc2cuaCBiL2ZtdC1tZXJnZS1tc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjhkM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvZm10LW1lcmdlLW1zZy5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBGTVRfTUVSR0VfTVNHX0gKKyNkZWZpbmUgRk1UX01FUkdFX01TR19ICisKK2V4dGVybiBpbnQgbWVyZ2VfbG9nX2NvbmZpZzsKK2V4dGVybiBpbnQgZm10X21lcmdlX21zZ19jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworCisjZW5kaWYgLyogRk1UX01FUkdFX01TR19IICovCmRpZmYgLS1naXQgYS9mc2NrLmMgYi9mc2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5NWVmNgotLS0gL2Rldi9udWxsCisrKyBiL2ZzY2suYwpAQCAtMCwwICsxLDM2OSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJmc2NrLmgiCisKK3N0YXRpYyBpbnQgZnNja193YWxrX3RyZWUoc3RydWN0IHRyZWUgKnRyZWUsIGZzY2tfd2Fsa19mdW5jIHdhbGssIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCWludCByZXMgPSAwOworCisJaWYgKHBhcnNlX3RyZWUodHJlZSkpCisJCXJldHVybiAtMTsKKworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCWludCByZXN1bHQ7CisKKwkJaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQorCQkJY29udGludWU7CisJCWlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKQorCQkJcmVzdWx0ID0gd2FsaygmbG9va3VwX3RyZWUoZW50cnkuc2hhMSktPm9iamVjdCwgT0JKX1RSRUUsIGRhdGEpOworCQllbHNlIGlmIChTX0lTUkVHKGVudHJ5Lm1vZGUpIHx8IFNfSVNMTksoZW50cnkubW9kZSkpCisJCQlyZXN1bHQgPSB3YWxrKCZsb29rdXBfYmxvYihlbnRyeS5zaGExKS0+b2JqZWN0LCBPQkpfQkxPQiwgZGF0YSk7CisJCWVsc2UgeworCQkJcmVzdWx0ID0gZXJyb3IoImluIHRyZWUgJXM6IGVudHJ5ICVzIGhhcyBiYWQgbW9kZSAlLjZvIiwKKwkJCQkJc2hhMV90b19oZXgodHJlZS0+b2JqZWN0LnNoYTEpLCBlbnRyeS5wYXRoLCBlbnRyeS5tb2RlKTsKKwkJfQorCQlpZiAocmVzdWx0IDwgMCkKKwkJCXJldHVybiByZXN1bHQ7CisJCWlmICghcmVzKQorCQkJcmVzID0gcmVzdWx0OworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGZzY2tfd2Fsa19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBmc2NrX3dhbGtfZnVuYyB3YWxrLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlpbnQgcmVzOworCWludCByZXN1bHQ7CisKKwlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCXJldHVybiAtMTsKKworCXJlc3VsdCA9IHdhbGsoKHN0cnVjdCBvYmplY3QgKiljb21taXQtPnRyZWUsIE9CSl9UUkVFLCBkYXRhKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXMgPSByZXN1bHQ7CisKKwlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCXdoaWxlIChwYXJlbnRzKSB7CisJCXJlc3VsdCA9IHdhbGsoKHN0cnVjdCBvYmplY3QgKilwYXJlbnRzLT5pdGVtLCBPQkpfQ09NTUlULCBkYXRhKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gcmVzdWx0OworCQlpZiAoIXJlcykKKwkJCXJlcyA9IHJlc3VsdDsKKwkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZnNja193YWxrX3RhZyhzdHJ1Y3QgdGFnICp0YWcsIGZzY2tfd2Fsa19mdW5jIHdhbGssIHZvaWQgKmRhdGEpCit7CisJaWYgKHBhcnNlX3RhZyh0YWcpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHdhbGsodGFnLT50YWdnZWQsIE9CSl9BTlksIGRhdGEpOworfQorCitpbnQgZnNja193YWxrKHN0cnVjdCBvYmplY3QgKm9iaiwgZnNja193YWxrX2Z1bmMgd2Fsaywgdm9pZCAqZGF0YSkKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC0xOworCXN3aXRjaCAob2JqLT50eXBlKSB7CisJY2FzZSBPQkpfQkxPQjoKKwkJcmV0dXJuIDA7CisJY2FzZSBPQkpfVFJFRToKKwkJcmV0dXJuIGZzY2tfd2Fsa190cmVlKChzdHJ1Y3QgdHJlZSAqKW9iaiwgd2FsaywgZGF0YSk7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlyZXR1cm4gZnNja193YWxrX2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKW9iaiwgd2FsaywgZGF0YSk7CisJY2FzZSBPQkpfVEFHOgorCQlyZXR1cm4gZnNja193YWxrX3RhZygoc3RydWN0IHRhZyAqKW9iaiwgd2FsaywgZGF0YSk7CisJZGVmYXVsdDoKKwkJZXJyb3IoIlVua25vd24gb2JqZWN0IHR5cGUgZm9yICVzIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qCisgKiBUaGUgZW50cmllcyBpbiBhIHRyZWUgYXJlIG9yZGVyZWQgaW4gdGhlIF9wYXRoXyBvcmRlciwKKyAqIHdoaWNoIG1lYW5zIHRoYXQgYSBkaXJlY3RvcnkgZW50cnkgaXMgb3JkZXJlZCBieSBhZGRpbmcKKyAqIGEgc2xhc2ggdG8gdGhlIGVuZCBvZiBpdC4KKyAqCisgKiBTbyBhIGRpcmVjdG9yeSBjYWxsZWQgImEiIGlzIG9yZGVyZWQgX2FmdGVyXyBhIGZpbGUKKyAqIGNhbGxlZCAiYS5jIiwgYmVjYXVzZSAiYS8iIHNvcnRzIGFmdGVyICJhLmMiLgorICovCisjZGVmaW5lIFRSRUVfVU5PUkRFUkVEICgtMSkKKyNkZWZpbmUgVFJFRV9IQVNfRFVQUyAgKC0yKQorCitzdGF0aWMgaW50IHZlcmlmeV9vcmRlcmVkKHVuc2lnbmVkIG1vZGUxLCBjb25zdCBjaGFyICpuYW1lMSwgdW5zaWduZWQgbW9kZTIsIGNvbnN0IGNoYXIgKm5hbWUyKQoreworCWludCBsZW4xID0gc3RybGVuKG5hbWUxKTsKKwlpbnQgbGVuMiA9IHN0cmxlbihuYW1lMik7CisJaW50IGxlbiA9IGxlbjEgPCBsZW4yID8gbGVuMSA6IGxlbjI7CisJdW5zaWduZWQgY2hhciBjMSwgYzI7CisJaW50IGNtcDsKKworCWNtcCA9IG1lbWNtcChuYW1lMSwgbmFtZTIsIGxlbik7CisJaWYgKGNtcCA8IDApCisJCXJldHVybiAwOworCWlmIChjbXAgPiAwKQorCQlyZXR1cm4gVFJFRV9VTk9SREVSRUQ7CisKKwkvKgorCSAqIE9rLCB0aGUgZmlyc3QgPGxlbj4gY2hhcmFjdGVycyBhcmUgdGhlIHNhbWUuCisJICogTm93IHdlIG5lZWQgdG8gb3JkZXIgdGhlIG5leHQgb25lLCBidXQgdHVybgorCSAqIGEgJ1wwJyBpbnRvIGEgJy8nIGZvciBhIGRpcmVjdG9yeSBlbnRyeS4KKwkgKi8KKwljMSA9IG5hbWUxW2xlbl07CisJYzIgPSBuYW1lMltsZW5dOworCWlmICghYzEgJiYgIWMyKQorCQkvKgorCQkgKiBnaXQtd3JpdGUtdHJlZSB1c2VkIHRvIHdyaXRlIG91dCBhIG5vbnNlbnNlIHRyZWUgdGhhdCBoYXMKKwkJICogZW50cmllcyB3aXRoIHRoZSBzYW1lIG5hbWUsIG9uZSBibG9iIGFuZCBvbmUgdHJlZS4gIE1ha2UKKwkJICogc3VyZSB3ZSBkbyBub3QgaGF2ZSBkdXBsaWNhdGUgZW50cmllcy4KKwkJICovCisJCXJldHVybiBUUkVFX0hBU19EVVBTOworCWlmICghYzEgJiYgU19JU0RJUihtb2RlMSkpCisJCWMxID0gJy8nOworCWlmICghYzIgJiYgU19JU0RJUihtb2RlMikpCisJCWMyID0gJy8nOworCXJldHVybiBjMSA8IGMyID8gMCA6IFRSRUVfVU5PUkRFUkVEOworfQorCitzdGF0aWMgaW50IGZzY2tfdHJlZShzdHJ1Y3QgdHJlZSAqaXRlbSwgaW50IHN0cmljdCwgZnNja19lcnJvciBlcnJvcl9mdW5jKQoreworCWludCByZXR2YWw7CisJaW50IGhhc19udWxsX3NoYTEgPSAwOworCWludCBoYXNfZnVsbF9wYXRoID0gMDsKKwlpbnQgaGFzX2VtcHR5X25hbWUgPSAwOworCWludCBoYXNfemVyb19wYWQgPSAwOworCWludCBoYXNfYmFkX21vZGVzID0gMDsKKwlpbnQgaGFzX2R1cF9lbnRyaWVzID0gMDsKKwlpbnQgbm90X3Byb3Blcmx5X3NvcnRlZCA9IDA7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXVuc2lnbmVkIG9fbW9kZTsKKwljb25zdCBjaGFyICpvX25hbWU7CisKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgaXRlbS0+YnVmZmVyLCBpdGVtLT5zaXplKTsKKworCW9fbW9kZSA9IDA7CisJb19uYW1lID0gTlVMTDsKKworCXdoaWxlIChkZXNjLnNpemUpIHsKKwkJdW5zaWduZWQgbW9kZTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKKworCQlzaGExID0gdHJlZV9lbnRyeV9leHRyYWN0KCZkZXNjLCAmbmFtZSwgJm1vZGUpOworCisJCWlmIChpc19udWxsX3NoYTEoc2hhMSkpCisJCQloYXNfbnVsbF9zaGExID0gMTsKKwkJaWYgKHN0cmNocihuYW1lLCAnLycpKQorCQkJaGFzX2Z1bGxfcGF0aCA9IDE7CisJCWlmICghKm5hbWUpCisJCQloYXNfZW1wdHlfbmFtZSA9IDE7CisJCWhhc196ZXJvX3BhZCB8PSAqKGNoYXIgKilkZXNjLmJ1ZmZlciA9PSAnMCc7CisJCXVwZGF0ZV90cmVlX2VudHJ5KCZkZXNjKTsKKworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJLyoKKwkJICogU3RhbmRhcmQgbW9kZXMuLgorCQkgKi8KKwkJY2FzZSBTX0lGUkVHIHwgMDc1NToKKwkJY2FzZSBTX0lGUkVHIHwgMDY0NDoKKwkJY2FzZSBTX0lGTE5LOgorCQljYXNlIFNfSUZESVI6CisJCWNhc2UgU19JRkdJVExJTks6CisJCQlicmVhazsKKwkJLyoKKwkJICogVGhpcyBpcyBub25zdGFuZGFyZCwgYnV0IHdlIGhhZCBhIGZldyBvZiB0aGVzZQorCQkgKiBlYXJseSBvbiB3aGVuIHdlIGhvbm9yZWQgdGhlIGZ1bGwgc2V0IG9mIG1vZGUKKwkJICogYml0cy4uCisJCSAqLworCQljYXNlIFNfSUZSRUcgfCAwNjY0OgorCQkJaWYgKCFzdHJpY3QpCisJCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQloYXNfYmFkX21vZGVzID0gMTsKKwkJfQorCisJCWlmIChvX25hbWUpIHsKKwkJCXN3aXRjaCAodmVyaWZ5X29yZGVyZWQob19tb2RlLCBvX25hbWUsIG1vZGUsIG5hbWUpKSB7CisJCQljYXNlIFRSRUVfVU5PUkRFUkVEOgorCQkJCW5vdF9wcm9wZXJseV9zb3J0ZWQgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBUUkVFX0hBU19EVVBTOgorCQkJCWhhc19kdXBfZW50cmllcyA9IDE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJb19tb2RlID0gbW9kZTsKKwkJb19uYW1lID0gbmFtZTsKKwl9CisKKwlyZXR2YWwgPSAwOworCWlmIChoYXNfbnVsbF9zaGExKQorCQlyZXR2YWwgKz0gZXJyb3JfZnVuYygmaXRlbS0+b2JqZWN0LCBGU0NLX1dBUk4sICJjb250YWlucyBlbnRyaWVzIHBvaW50aW5nIHRvIG51bGwgc2hhMSIpOworCWlmIChoYXNfZnVsbF9wYXRoKQorCQlyZXR2YWwgKz0gZXJyb3JfZnVuYygmaXRlbS0+b2JqZWN0LCBGU0NLX1dBUk4sICJjb250YWlucyBmdWxsIHBhdGhuYW1lcyIpOworCWlmIChoYXNfZW1wdHlfbmFtZSkKKwkJcmV0dmFsICs9IGVycm9yX2Z1bmMoJml0ZW0tPm9iamVjdCwgRlNDS19XQVJOLCAiY29udGFpbnMgZW1wdHkgcGF0aG5hbWUiKTsKKwlpZiAoaGFzX3plcm9fcGFkKQorCQlyZXR2YWwgKz0gZXJyb3JfZnVuYygmaXRlbS0+b2JqZWN0LCBGU0NLX1dBUk4sICJjb250YWlucyB6ZXJvLXBhZGRlZCBmaWxlIG1vZGVzIik7CisJaWYgKGhhc19iYWRfbW9kZXMpCisJCXJldHZhbCArPSBlcnJvcl9mdW5jKCZpdGVtLT5vYmplY3QsIEZTQ0tfV0FSTiwgImNvbnRhaW5zIGJhZCBmaWxlIG1vZGVzIik7CisJaWYgKGhhc19kdXBfZW50cmllcykKKwkJcmV0dmFsICs9IGVycm9yX2Z1bmMoJml0ZW0tPm9iamVjdCwgRlNDS19FUlJPUiwgImNvbnRhaW5zIGR1cGxpY2F0ZSBmaWxlIGVudHJpZXMiKTsKKwlpZiAobm90X3Byb3Blcmx5X3NvcnRlZCkKKwkJcmV0dmFsICs9IGVycm9yX2Z1bmMoJml0ZW0tPm9iamVjdCwgRlNDS19FUlJPUiwgIm5vdCBwcm9wZXJseSBzb3J0ZWQiKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGZzY2tfaWRlbnQoY2hhciAqKmlkZW50LCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGZzY2tfZXJyb3IgZXJyb3JfZnVuYykKK3sKKwlpZiAoKippZGVudCA9PSAnPCcpCisJCXJldHVybiBlcnJvcl9mdW5jKG9iaiwgRlNDS19FUlJPUiwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gbWlzc2luZyBzcGFjZSBiZWZvcmUgZW1haWwiKTsKKwkqaWRlbnQgKz0gc3RyY3NwbigqaWRlbnQsICI8PlxuIik7CisJaWYgKCoqaWRlbnQgPT0gJz4nKQorCQlyZXR1cm4gZXJyb3JfZnVuYyhvYmosIEZTQ0tfRVJST1IsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCBuYW1lIik7CisJaWYgKCoqaWRlbnQgIT0gJzwnKQorCQlyZXR1cm4gZXJyb3JfZnVuYyhvYmosIEZTQ0tfRVJST1IsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3NpbmcgZW1haWwiKTsKKwlpZiAoKCppZGVudClbLTFdICE9ICcgJykKKwkJcmV0dXJuIGVycm9yX2Z1bmMob2JqLCBGU0NLX0VSUk9SLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBlbWFpbCIpOworCSgqaWRlbnQpKys7CisJKmlkZW50ICs9IHN0cmNzcG4oKmlkZW50LCAiPD5cbiIpOworCWlmICgqKmlkZW50ICE9ICc+JykKKwkJcmV0dXJuIGVycm9yX2Z1bmMob2JqLCBGU0NLX0VSUk9SLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgZW1haWwiKTsKKwkoKmlkZW50KSsrOworCWlmICgqKmlkZW50ICE9ICcgJykKKwkJcmV0dXJuIGVycm9yX2Z1bmMob2JqLCBGU0NLX0VSUk9SLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBkYXRlIik7CisJKCppZGVudCkrKzsKKwlpZiAoKippZGVudCA9PSAnMCcgJiYgKCppZGVudClbMV0gIT0gJyAnKQorCQlyZXR1cm4gZXJyb3JfZnVuYyhvYmosIEZTQ0tfRVJST1IsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIHplcm8tcGFkZGVkIGRhdGUiKTsKKwkqaWRlbnQgKz0gc3Ryc3BuKCppZGVudCwgIjAxMjM0NTY3ODkiKTsKKwlpZiAoKippZGVudCAhPSAnICcpCisJCXJldHVybiBlcnJvcl9mdW5jKG9iaiwgRlNDS19FUlJPUiwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIGRhdGUiKTsKKwkoKmlkZW50KSsrOworCWlmICgoKippZGVudCAhPSAnKycgJiYgKippZGVudCAhPSAnLScpIHx8CisJICAgICFpc2RpZ2l0KCgqaWRlbnQpWzFdKSB8fAorCSAgICAhaXNkaWdpdCgoKmlkZW50KVsyXSkgfHwKKwkgICAgIWlzZGlnaXQoKCppZGVudClbM10pIHx8CisJICAgICFpc2RpZ2l0KCgqaWRlbnQpWzRdKSB8fAorCSAgICAoKCppZGVudClbNV0gIT0gJ1xuJykpCisJCXJldHVybiBlcnJvcl9mdW5jKG9iaiwgRlNDS19FUlJPUiwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIHRpbWUgem9uZSIpOworCSgqaWRlbnQpICs9IDY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnNja19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBmc2NrX2Vycm9yIGVycm9yX2Z1bmMpCit7CisJY2hhciAqYnVmZmVyID0gY29tbWl0LT5idWZmZXI7CisJdW5zaWduZWQgY2hhciB0cmVlX3NoYTFbMjBdLCBzaGExWzIwXTsKKwlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdDsKKwlpbnQgcGFyZW50cyA9IDA7CisJaW50IGVycjsKKworCWlmIChjb21taXQtPmRhdGUgPT0gVUxPTkdfTUFYKQorCQlyZXR1cm4gZXJyb3JfZnVuYygmY29tbWl0LT5vYmplY3QsIEZTQ0tfRVJST1IsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSIpOworCisJaWYgKG1lbWNtcChidWZmZXIsICJ0cmVlICIsIDUpKQorCQlyZXR1cm4gZXJyb3JfZnVuYygmY29tbWl0LT5vYmplY3QsIEZTQ0tfRVJST1IsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0cmVlJyBsaW5lIik7CisJaWYgKGdldF9zaGExX2hleChidWZmZXIrNSwgdHJlZV9zaGExKSB8fCBidWZmZXJbNDVdICE9ICdcbicpCisJCXJldHVybiBlcnJvcl9mdW5jKCZjb21taXQtPm9iamVjdCwgRlNDS19FUlJPUiwgImludmFsaWQgJ3RyZWUnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKKwlidWZmZXIgKz0gNDY7CisJd2hpbGUgKCFtZW1jbXAoYnVmZmVyLCAicGFyZW50ICIsIDcpKSB7CisJCWlmIChnZXRfc2hhMV9oZXgoYnVmZmVyKzcsIHNoYTEpIHx8IGJ1ZmZlcls0N10gIT0gJ1xuJykKKwkJCXJldHVybiBlcnJvcl9mdW5jKCZjb21taXQtPm9iamVjdCwgRlNDS19FUlJPUiwgImludmFsaWQgJ3BhcmVudCcgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOworCQlidWZmZXIgKz0gNDg7CisJCXBhcmVudHMrKzsKKwl9CisJZ3JhZnQgPSBsb29rdXBfY29tbWl0X2dyYWZ0KGNvbW1pdC0+b2JqZWN0LnNoYTEpOworCWlmIChncmFmdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnAgPSBjb21taXQtPnBhcmVudHM7CisJCXBhcmVudHMgPSAwOworCQl3aGlsZSAocCkgeworCQkJcCA9IHAtPm5leHQ7CisJCQlwYXJlbnRzKys7CisJCX0KKwkJaWYgKGdyYWZ0LT5ucl9wYXJlbnQgPT0gLTEgJiYgIXBhcmVudHMpCisJCQk7IC8qIHNoYWxsb3cgY29tbWl0ICovCisJCWVsc2UgaWYgKGdyYWZ0LT5ucl9wYXJlbnQgIT0gcGFyZW50cykKKwkJCXJldHVybiBlcnJvcl9mdW5jKCZjb21taXQtPm9iamVjdCwgRlNDS19FUlJPUiwgImdyYWZ0IG9iamVjdHMgbWlzc2luZyIpOworCX0gZWxzZSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcCA9IGNvbW1pdC0+cGFyZW50czsKKwkJd2hpbGUgKHAgJiYgcGFyZW50cykgeworCQkJcCA9IHAtPm5leHQ7CisJCQlwYXJlbnRzLS07CisJCX0KKwkJaWYgKHAgfHwgcGFyZW50cykKKwkJCXJldHVybiBlcnJvcl9mdW5jKCZjb21taXQtPm9iamVjdCwgRlNDS19FUlJPUiwgInBhcmVudCBvYmplY3RzIG1pc3NpbmciKTsKKwl9CisJaWYgKG1lbWNtcChidWZmZXIsICJhdXRob3IgIiwgNykpCisJCXJldHVybiBlcnJvcl9mdW5jKCZjb21taXQtPm9iamVjdCwgRlNDS19FUlJPUiwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ2F1dGhvcicgbGluZSIpOworCWJ1ZmZlciArPSA3OworCWVyciA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgJmNvbW1pdC0+b2JqZWN0LCBlcnJvcl9mdW5jKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmIChtZW1jbXAoYnVmZmVyLCAiY29tbWl0dGVyICIsIHN0cmxlbigiY29tbWl0dGVyICIpKSkKKwkJcmV0dXJuIGVycm9yX2Z1bmMoJmNvbW1pdC0+b2JqZWN0LCBGU0NLX0VSUk9SLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnY29tbWl0dGVyJyBsaW5lIik7CisJYnVmZmVyICs9IHN0cmxlbigiY29tbWl0dGVyICIpOworCWVyciA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgJmNvbW1pdC0+b2JqZWN0LCBlcnJvcl9mdW5jKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmICghY29tbWl0LT50cmVlKQorCQlyZXR1cm4gZXJyb3JfZnVuYygmY29tbWl0LT5vYmplY3QsIEZTQ0tfRVJST1IsICJjb3VsZCBub3QgbG9hZCBjb21taXQncyB0cmVlICVzIiwgc2hhMV90b19oZXgodHJlZV9zaGExKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmc2NrX3RhZyhzdHJ1Y3QgdGFnICp0YWcsIGZzY2tfZXJyb3IgZXJyb3JfZnVuYykKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICp0YWdnZWQgPSB0YWctPnRhZ2dlZDsKKworCWlmICghdGFnZ2VkKQorCQlyZXR1cm4gZXJyb3JfZnVuYygmdGFnLT5vYmplY3QsIEZTQ0tfRVJST1IsICJjb3VsZCBub3QgbG9hZCB0YWdnZWQgb2JqZWN0Iik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBmc2NrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCBzdHJpY3QsIGZzY2tfZXJyb3IgZXJyb3JfZnVuYykKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuIGVycm9yX2Z1bmMob2JqLCBGU0NLX0VSUk9SLCAibm8gdmFsaWQgb2JqZWN0IHRvIGZzY2siKTsKKworCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpCisJCXJldHVybiAwOworCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpCisJCXJldHVybiBmc2NrX3RyZWUoKHN0cnVjdCB0cmVlICopIG9iaiwgc3RyaWN0LCBlcnJvcl9mdW5jKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCXJldHVybiBmc2NrX2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKSBvYmosIGVycm9yX2Z1bmMpOworCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykKKwkJcmV0dXJuIGZzY2tfdGFnKChzdHJ1Y3QgdGFnICopIG9iaiwgZXJyb3JfZnVuYyk7CisKKwlyZXR1cm4gZXJyb3JfZnVuYyhvYmosIEZTQ0tfRVJST1IsICJ1bmtub3duIHR5cGUgJyVkJyAoaW50ZXJuYWwgZnNjayBlcnJvcikiLAorCQkJICBvYmotPnR5cGUpOworfQorCitpbnQgZnNja19lcnJvcl9mdW5jdGlvbihzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZzYiwgIm9iamVjdCAlczoiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmc2IsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwllcnJvcigiJXMiLCBzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9mc2NrLmggYi9mc2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0ZjUyNwotLS0gL2Rldi9udWxsCisrKyBiL2ZzY2suaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIEdJVF9GU0NLX0gKKyNkZWZpbmUgR0lUX0ZTQ0tfSAorCisjZGVmaW5lIEZTQ0tfRVJST1IgMQorI2RlZmluZSBGU0NLX1dBUk4gMgorCisvKgorICogY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGZzY2tfd2FsaworICogdHlwZSBpcyB0aGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgb2JqZWN0IG9yIE9CSl9BTlkKKyAqIHRoZSByZXR1cm4gdmFsdWUgaXM6CisgKiAgICAgMAlldmVyeXRoaW5nIE9LCisgKiAgICAgPDAJZXJyb3Igc2lnbmFsZWQgYW5kIGFib3J0CisgKiAgICAgPjAJZXJyb3Igc2lnbmFsZWQgYW5kIGRvIG5vdCBhYm9ydAorICovCit0eXBlZGVmIGludCAoKmZzY2tfd2Fsa19mdW5jKShzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCB2b2lkICpkYXRhKTsKKworLyogY2FsbGJhY2sgZm9yIGZzY2tfb2JqZWN0LCB0eXBlIGlzIEZTQ0tfRVJST1Igb3IgRlNDS19XQVJOICovCit0eXBlZGVmIGludCAoKmZzY2tfZXJyb3IpKHN0cnVjdCBvYmplY3QgKm9iaiwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSkKK2ludCBmc2NrX2Vycm9yX2Z1bmN0aW9uKHN0cnVjdCBvYmplY3QgKm9iaiwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyogZGVzY2VuZCBpbiBhbGwgbGlua2VkIGNoaWxkIG9iamVjdHMKKyAqIHRoZSByZXR1cm4gdmFsdWUgaXM6CisgKiAgICAtMQllcnJvciBpbiBwcm9jZXNzaW5nIHRoZSBvYmplY3QKKyAqICAgIDwwCXJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2ssIHdoaWNoIGxlYWQgdG8gYW4gYWJvcnQKKyAqICAgID4wCXJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3Qgc2lnbmFsZWQgZXJyb3IgPjAgKGluIHRoZSBjYXNlIG9mIG5vIG90aGVyIGVycm9ycykKKyAqICAgIDAJCWV2ZXJ5dGhpbmcgT0sKKyAqLworaW50IGZzY2tfd2FsayhzdHJ1Y3Qgb2JqZWN0ICpvYmosIGZzY2tfd2Fsa19mdW5jIHdhbGssIHZvaWQgKmRhdGEpOworaW50IGZzY2tfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgaW50IHN0cmljdCwgZnNja19lcnJvciBlcnJvcl9mdW5jKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9nZW5lcmF0ZS1jbWRsaXN0LnNoIGIvZ2VuZXJhdGUtY21kbGlzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YTRjOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2VuZXJhdGUtY21kbGlzdC5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKworZWNobyAiLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgJDAgKi8KK3N0cnVjdCBjbWRuYW1lX2hlbHAgeworICAgIGNoYXIgbmFtZVsxNl07CisgICAgY2hhciBoZWxwWzgwXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY21kbmFtZV9oZWxwIGNvbW1vbl9jbWRzW10gPSB7IgorCitzZWQgLW4gLWUgJ3MvXmdpdC1cKFteIAldKlwpWyAJXS4qIGNvbW1vbi4qL1wxL3AnIGNvbW1hbmQtbGlzdC50eHQgfAorc29ydCB8Cit3aGlsZSByZWFkIGNtZAorZG8KKyAgICAgc2VkIC1uICcKKyAgICAgL15OQU1FLywvZ2l0LSciJGNtZCInL0gKKyAgICAgJHsKKwkgICAgeAorCSAgICBzLy4qZ2l0LSciJGNtZCInIC0gXCguKlwpLyAgeyInIiRjbWQiJyIsIE5fKCJcMSIpfSwvCisJICAgIHAKKyAgICAgfScgIkRvY3VtZW50YXRpb24vZ2l0LSRjbWQudHh0IgorZG9uZQorZWNobyAifTsiCmRpZmYgLS1naXQgYS9nZXR0ZXh0LmMgYi9nZXR0ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlOTU0NQotLS0gL2Rldi9udWxsCisrKyBiL2dldHRleHQuYwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidXRmOC5oIgorCisjaWZuZGVmIE5PX0dFVFRFWFQKKyMJaW5jbHVkZSA8bG9jYWxlLmg+CisjCWluY2x1ZGUgPGxpYmludGwuaD4KKyMJaWZkZWYgSEFWRV9MSUJDSEFSU0VUX0gKKyMJCWluY2x1ZGUgPGxpYmNoYXJzZXQuaD4KKyMJZWxzZQorIwkJaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyMJCWRlZmluZSBsb2NhbGVfY2hhcnNldCgpIG5sX2xhbmdpbmZvKENPREVTRVQpCisjCWVuZGlmCisjZW5kaWYKKworI2lmZGVmIEdFVFRFWFRfUE9JU09OCitpbnQgdXNlX2dldHRleHRfcG9pc29uKHZvaWQpCit7CisJc3RhdGljIGludCBwb2lzb25fcmVxdWVzdGVkID0gLTE7CisJaWYgKHBvaXNvbl9yZXF1ZXN0ZWQgPT0gLTEpCisJCXBvaXNvbl9yZXF1ZXN0ZWQgPSBnZXRlbnYoIkdJVF9HRVRURVhUX1BPSVNPTiIpID8gMSA6IDA7CisJcmV0dXJuIHBvaXNvbl9yZXF1ZXN0ZWQ7Cit9CisjZW5kaWYKKworI2lmbmRlZiBOT19HRVRURVhUCitzdGF0aWMgY29uc3QgY2hhciAqY2hhcnNldDsKK3N0YXRpYyB2b2lkIGluaXRfZ2V0dGV4dF9jaGFyc2V0KGNvbnN0IGNoYXIgKmRvbWFpbikKK3sKKwkvKgorCSAgIFRoaXMgdHJpY2sgYXJyYW5nZXMgZm9yIG1lc3NhZ2VzIHRvIGJlIGVtaXR0ZWQgaW4gdGhlIHVzZXIncworCSAgIHJlcXVlc3RlZCBlbmNvZGluZywgYnV0IGF2b2lkcyBzZXR0aW5nIExDX0NUWVBFIGZyb20gdGhlCisJICAgZW52aXJvbm1lbnQgZm9yIHRoZSB3aG9sZSBwcm9ncmFtLgorCisJICAgVGhpcyBwcmltYXJpbHkgZG9uZSB0byBhdm9pZCBhIGJ1ZyBpbiB2c25wcmludGYgaW4gdGhlIEdOVSBDCisJICAgTGlicmFyeSBbMV0uIHdoaWNoIHRyaWdnZXJlZCBhICJ5b3VyIHZzbnByaW50ZiBpcyBicm9rZW4iIGVycm9yCisJICAgb24gR2l0J3Mgb3duIHJlcG9zaXRvcnkgd2hlbiBpbnNwZWN0aW5nIHYwLjk5LjZ+MSB1bmRlciBhIFVURi04CisJICAgbG9jYWxlLgorCisJICAgVGhhdCBjb21taXQgY29udGFpbnMgYSBJU08tODg1OS0xIGVuY29kZWQgYXV0aG9yIG5hbWUsIHdoaWNoCisJICAgdGhlIGxvY2FsZSBhd2FyZSB2c25wcmludGYoMykgd29uJ3QgaW50ZXJwb2xhdGUgaW4gdGhlIGZvcm1hdAorCSAgIGFyZ3VtZW50LCBkdWUgdG8gbWlzbWF0Y2ggYmV0d2VlbiB0aGUgZGF0YSBlbmNvZGluZyBhbmQgdGhlCisJICAgbG9jYWxlLgorCisJICAgRXZlbiBpZiBpdCB3YXNuJ3QgZm9yIHRoYXQgYnVnIHdlIHdvdWxkbid0IHdhbnQgdG8gdXNlIExDX0NUWVBFIGF0CisJICAgdGhpcyBwb2ludCwgYmVjYXVzZSBpdCdkIHJlcXVpcmUgYXVkaXRpbmcgYWxsIHRoZSBjb2RlIHRoYXQgdXNlcyBDCisJICAgZnVuY3Rpb25zIHdob3NlIHNlbWFudGljcyBhcmUgbW9kaWZpZWQgYnkgTENfQ1RZUEUuCisKKwkgICBCdXQgb25seSBzZXR0aW5nIExDX01FU1NBR0VTIGFzIHdlIGRvIGNyZWF0ZXMgYSBwcm9ibGVtLCBzaW5jZQorCSAgIHdlIGRlY2xhcmUgdGhlIGVuY29kaW5nIG9mIG91ciBQTyBmaWxlc1syXSB0aGUgZ2V0dGV4dAorCSAgIGltcGxlbWVudGF0aW9uIHdpbGwgdHJ5IHRvIHJlY29kZSBpdCB0byB0aGUgdXNlcidzIGxvY2FsZSwgYnV0CisJICAgd2l0aG91dCBMQ19DVFlQRSBpdCdsbCBlbWl0IHNvbWV0aGluZyBsaWtlIHRoaXMgb24gJ2dpdCBpbml0JworCSAgIHVuZGVyIHRoZSBJY2VsYW5kaWMgbG9jYWxlOgorCisJICAgICAgIEJqPyB0aWwgdD9tYSBHaXQgbGluZCA/IC9obGFnaC8uZ2l0LworCisJICAgR2V0dGV4dCBrbm93cyBhYm91dCB0aGUgZW5jb2Rpbmcgb2Ygb3VyIFBPIGZpbGUsIGJ1dCB3ZSBoYXZlbid0CisJICAgdG9sZCBpdCBhYm91dCB0aGUgdXNlcidzIGVuY29kaW5nLCBzbyBhbGwgdGhlIG5vbi1VUy1BU0NJSQorCSAgIGNoYXJhY3RlcnMgZ2V0IGVuY29kZWQgdG8gcXVlc3Rpb24gbWFya3MuCisKKwkgICBCdXQgd2UncmUgaW4gbHVjayEgV2UgY2FuIHNldCBMQ19DVFlQRSBmcm9tIHRoZSBlbnZpcm9ubWVudAorCSAgIG9ubHkgd2hpbGUgd2UgY2FsbCBubF9sYW5naW5mbyBhbmQKKwkgICBiaW5kX3RleHRkb21haW5fY29kZXNldC4gVGhhdCBzdWZmaWNlcyB0byB0ZWxsIGdldHRleHQgd2hhdAorCSAgIGVuY29kaW5nIGl0IHNob3VsZCBlbWl0IGluLCBzbyBpdCdsbCBub3cgc2F5OgorCisJICAgICAgIEJqw7MgdGlsIHTDs21hIEdpdCBsaW5kIMOtIC9obGFnaC8uZ2l0LworCisJICAgQW5kIHRoZSBlcXVpdmFsZW50IElTTy04ODU5LTEgc3RyaW5nIHdpbGwgYmUgZW1pdHRlZCB1bmRlciBhCisJICAgSVNPLTg4NTktMSBsb2NhbGUuCisKKwkgICBXaXRoIHRoaXMgY2hhbmdlIHdheSB3ZSBnZXQgdGhlIGFkdmFudGFnZXMgb2Ygc2V0dGluZyBMQ19DVFlQRQorCSAgICh0YWxrIHRvIHRoZSB1c2VyIGluIGhpcyBsYW5ndWFnZS9lbmNvZGluZyksIHdpdGhvdXQgdGhlIG1ham9yCisJICAgZHJhd2JhY2tzIChjaGFuZ2VkIHNlbWFudGljcyBmb3IgQyBmdW5jdGlvbnMgd2UgcmVseSBvbikuCisKKwkgICBIb3dldmVyIGZvcmVpZ24gZnVuY3Rpb25zIHVzaW5nIG90aGVyIG1lc3NhZ2UgY2F0YWxvZ3MgdGhhdAorCSAgIGFyZW4ndCB1c2luZyBvdXIgbmVhdCB0cmljayB3aWxsIHN0aWxsIGhhdmUgYSBwcm9ibGVtLCBlLmcuIGlmCisJICAgd2UgaGF2ZSB0byBjYWxsIHBlcnJvcigzKToKKworCSAgICNpbmNsdWRlIDxzdGRpby5oPgorCSAgICNpbmNsdWRlIDxsb2NhbGUuaD4KKwkgICAjaW5jbHVkZSA8ZXJybm8uaD4KKworCSAgIGludCBtYWluKHZvaWQpCisJICAgeworCQkgICBzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwkJICAgc2V0bG9jYWxlKExDX0NUWVBFLCAiQyIpOworCQkgICBlcnJubyA9IEVOT0RFVjsKKwkJICAgcGVycm9yKCJ0ZXN0Iik7CisJCSAgIHJldHVybiAwOworCSAgIH0KKworCSAgIFJ1bm5pbmcgdGhhdCB3aWxsIGdpdmUgeW91IGEgbWVzc2FnZSB3aXRoIHF1ZXN0aW9uIG1hcmtzOgorCisJICAgJCBMQU5HVUFHRT0gTEFORz1kZV9ERS51dGY4IC4vdGVzdAorCSAgIHRlc3Q6IEtlaW4gcGFzc2VuZGVzIEdlcj90IGdlZnVuZGVuCisKKwkgICBJbiB0aGUgbG9uZyB0ZXJtIHdlIHNob3VsZCBwcm9iYWJseSBzZWUgYWJvdXQgZ2V0dGluZyB0aGF0CisJICAgdnNucHJpbnRmIGJ1ZyBpbiBnbGliYyBmaXhlZCwgYW5kIGF1ZGl0IG91ciBjb2RlIHNvIGl0IHdvbid0CisJICAgZmFsbCBhcGFydCB1bmRlciBhIG5vbi1DIGxvY2FsZS4KKworCSAgIFRoZW4gd2UgY291bGQgc2ltcGx5IHNldCBMQ19DVFlQRSBmcm9tIHRoZSBlbnZpcm9ubWVudCwgd2hpY2ggd291bGQKKwkgICBtYWtlIHRoaW5ncyBsaWtlIHRoZSBleHRlcm5hbCBwZXJyb3IoMykgbWVzc2FnZXMgd29yay4KKworCSAgIFNlZSB0L3QwMjAzLWdldHRleHQtc2V0bG9jYWxlLXNhbml0eS5zaCdzICJnZXR0ZXh0LmMiIHRlc3RzIGZvcgorCSAgIHJlZ3Jlc3Npb24gdGVzdHMuCisKKwkgICAxLiBodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTY1MzAKKwkgICAyLiBFLmcuICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIgaW4gcG8vaXMucG8KKwkqLworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWNoYXJzZXQgPSBsb2NhbGVfY2hhcnNldCgpOworCWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KGRvbWFpbiwgY2hhcnNldCk7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiQyIpOworfQorCit2b2lkIGdpdF9zZXR1cF9nZXR0ZXh0KHZvaWQpCit7CisJY29uc3QgY2hhciAqcG9kaXIgPSBnZXRlbnYoIkdJVF9URVhURE9NQUlORElSIik7CisKKwlpZiAoIXBvZGlyKQorCQlwb2RpciA9IEdJVF9MT0NBTEVfUEFUSDsKKwliaW5kdGV4dGRvbWFpbigiZ2l0IiwgcG9kaXIpOworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCWluaXRfZ2V0dGV4dF9jaGFyc2V0KCJnaXQiKTsKKwl0ZXh0ZG9tYWluKCJnaXQiKTsKK30KKworLyogcmV0dXJuIHRoZSBudW1iZXIgb2YgY29sdW1ucyBvZiBzdHJpbmcgJ3MnIGluIGN1cnJlbnQgbG9jYWxlICovCitpbnQgZ2V0dGV4dF93aWR0aChjb25zdCBjaGFyICpzKQoreworCXN0YXRpYyBpbnQgaXNfdXRmOCA9IC0xOworCWlmIChpc191dGY4ID09IC0xKQorCQlpc191dGY4ID0gIXN0cmNtcChjaGFyc2V0LCAiVVRGLTgiKTsKKworCXJldHVybiBpc191dGY4ID8gdXRmOF9zdHJ3aWR0aChzKSA6IHN0cmxlbihzKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZ2V0dGV4dC5oIGIvZ2V0dGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzFkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9nZXR0ZXh0LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisgKgorICogVGhpcyBpcyBhIHNrZWxldG9uIG5vLW9wIGltcGxlbWVudGF0aW9uIG9mIGdldHRleHQgZm9yIEdpdC4KKyAqIFlvdSBjYW4gcmVwbGFjZSBpdCB3aXRoIHNvbWV0aGluZyB0aGF0IHVzZXMgbGliaW50bC5oIGFuZCB3cmFwcworICogZ2V0dGV4dCgpIHRvIHRyeSBvdXQgdGhlIHRyYW5zbGF0aW9ucy4KKyAqLworCisjaWZuZGVmIEdFVFRFWFRfSAorI2RlZmluZSBHRVRURVhUX0gKKworI2lmIGRlZmluZWQoXykgfHwgZGVmaW5lZChRXykKKyNlcnJvciAibmFtZXNwYWNlIGNvbmZsaWN0OiAnXycgb3IgJ1FfJyBpcyBwcmUtZGVmaW5lZD8iCisjZW5kaWYKKworI2lmbmRlZiBOT19HRVRURVhUCisjCWluY2x1ZGUgPGxpYmludGwuaD4KKyNlbHNlCisjCWlmZGVmIGdldHRleHQKKyMJCXVuZGVmIGdldHRleHQKKyMJZW5kaWYKKyMJZGVmaW5lIGdldHRleHQocykgKHMpCisjCWlmZGVmIG5nZXR0ZXh0CisjCQl1bmRlZiBuZ2V0dGV4dAorIwllbmRpZgorIwlkZWZpbmUgbmdldHRleHQocywgcCwgbikgKChuID09IDEpID8gKHMpIDogKHApKQorI2VuZGlmCisKKyNkZWZpbmUgRk9STUFUX1BSRVNFUlZJTkcobikgX19hdHRyaWJ1dGVfXygoZm9ybWF0X2FyZyhuKSkpCisKKyNpZm5kZWYgTk9fR0VUVEVYVAorZXh0ZXJuIHZvaWQgZ2l0X3NldHVwX2dldHRleHQodm9pZCk7CitleHRlcm4gaW50IGdldHRleHRfd2lkdGgoY29uc3QgY2hhciAqcyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGdpdF9zZXR1cF9nZXR0ZXh0KHZvaWQpCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBnZXR0ZXh0X3dpZHRoKGNvbnN0IGNoYXIgKnMpCit7CisJcmV0dXJuIHN0cmxlbihzKTsKK30KKyNlbmRpZgorCisjaWZkZWYgR0VUVEVYVF9QT0lTT04KK2V4dGVybiBpbnQgdXNlX2dldHRleHRfcG9pc29uKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgdXNlX2dldHRleHRfcG9pc29uKCkgMAorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgRk9STUFUX1BSRVNFUlZJTkcoMSkgY29uc3QgY2hhciAqXyhjb25zdCBjaGFyICptc2dpZCkKK3sKKwlpZiAoISptc2dpZCkKKwkJcmV0dXJuICIiOworCXJldHVybiB1c2VfZ2V0dGV4dF9wb2lzb24oKSA/ICIjIEdFVFRFWFQgUE9JU09OICMiIDogZ2V0dGV4dChtc2dpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRk9STUFUX1BSRVNFUlZJTkcoMSkgRk9STUFUX1BSRVNFUlZJTkcoMikKK2NvbnN0IGNoYXIgKlFfKGNvbnN0IGNoYXIgKm1zZ2lkLCBjb25zdCBjaGFyICpwbHUsIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAodXNlX2dldHRleHRfcG9pc29uKCkpCisJCXJldHVybiAiIyBHRVRURVhUIFBPSVNPTiAjIjsKKwlyZXR1cm4gbmdldHRleHQobXNnaWQsIHBsdSwgbik7Cit9CisKKy8qIE1hcmsgbXNnaWQgZm9yIHRyYW5zbGF0aW9uIGJ1dCBkbyBub3QgdHJhbnNsYXRlIGl0LiAqLworI2RlZmluZSBOXyhtc2dpZCkgbXNnaWQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MTA3NjRhCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybApAQCAtMCwwICsxLDE2MzYgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdpdDsKKworYmlubW9kZShTVERPVVQsICI6cmF3Iik7CisKK215ICRyZXBvID0gR2l0LT5yZXBvc2l0b3J5KCk7CisKK215ICRtZW51X3VzZV9jb2xvciA9ICRyZXBvLT5nZXRfY29sb3Jib29sKCdjb2xvci5pbnRlcmFjdGl2ZScpOworbXkgKCRwcm9tcHRfY29sb3IsICRoZWFkZXJfY29sb3IsICRoZWxwX2NvbG9yKSA9CisJJG1lbnVfdXNlX2NvbG9yID8gKAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5wcm9tcHQnLCAnYm9sZCBibHVlJyksCisJCSRyZXBvLT5nZXRfY29sb3IoJ2NvbG9yLmludGVyYWN0aXZlLmhlYWRlcicsICdib2xkJyksCisJCSRyZXBvLT5nZXRfY29sb3IoJ2NvbG9yLmludGVyYWN0aXZlLmhlbHAnLCAncmVkIGJvbGQnKSwKKwkpIDogKCk7CitteSAkZXJyb3JfY29sb3IgPSAoKTsKK2lmICgkbWVudV91c2VfY29sb3IpIHsKKwlteSAkaGVscF9jb2xvcl9zcGVjID0gKCRyZXBvLT5jb25maWcoJ2NvbG9yLmludGVyYWN0aXZlLmhlbHAnKSBvcgorCQkJCSdyZWQgYm9sZCcpOworCSRlcnJvcl9jb2xvciA9ICRyZXBvLT5nZXRfY29sb3IoJ2NvbG9yLmludGVyYWN0aXZlLmVycm9yJywKKwkJCQkJJGhlbHBfY29sb3Jfc3BlYyk7Cit9CisKK215ICRkaWZmX3VzZV9jb2xvciA9ICRyZXBvLT5nZXRfY29sb3Jib29sKCdjb2xvci5kaWZmJyk7CitteSAoJGZyYWdpbmZvX2NvbG9yKSA9CisJJGRpZmZfdXNlX2NvbG9yID8gKAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5kaWZmLmZyYWcnLCAnY3lhbicpLAorCSkgOiAoKTsKK215ICgkZGlmZl9wbGFpbl9jb2xvcikgPQorCSRkaWZmX3VzZV9jb2xvciA/ICgKKwkJJHJlcG8tPmdldF9jb2xvcignY29sb3IuZGlmZi5wbGFpbicsICcnKSwKKwkpIDogKCk7CitteSAoJGRpZmZfb2xkX2NvbG9yKSA9CisJJGRpZmZfdXNlX2NvbG9yID8gKAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5kaWZmLm9sZCcsICdyZWQnKSwKKwkpIDogKCk7CitteSAoJGRpZmZfbmV3X2NvbG9yKSA9CisJJGRpZmZfdXNlX2NvbG9yID8gKAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5kaWZmLm5ldycsICdncmVlbicpLAorCSkgOiAoKTsKKworbXkgJG5vcm1hbF9jb2xvciA9ICRyZXBvLT5nZXRfY29sb3IoIiIsICJyZXNldCIpOworCitteSAkdXNlX3JlYWRrZXkgPSAwOworbXkgJHVzZV90ZXJtY2FwID0gMDsKK215ICV0ZXJtX2VzY2FwZXM7CisKK3N1YiBSZWFkTW9kZTsKK3N1YiBSZWFkS2V5OworaWYgKCRyZXBvLT5jb25maWdfYm9vbCgiaW50ZXJhY3RpdmUuc2luZ2xla2V5IikpIHsKKwlldmFsIHsKKwkJcmVxdWlyZSBUZXJtOjpSZWFkS2V5OworCQlUZXJtOjpSZWFkS2V5LT5pbXBvcnQ7CisJCSR1c2VfcmVhZGtleSA9IDE7CisJfTsKKwlldmFsIHsKKwkJcmVxdWlyZSBUZXJtOjpDYXA7CisJCW15ICR0ZXJtY2FwID0gVGVybTo6Q2FwLT5UZ2V0ZW50OworCQlmb3JlYWNoICh2YWx1ZXMgJSR0ZXJtY2FwKSB7CisJCQkkdGVybV9lc2NhcGVzeyRffSA9IDEgaWYgL15cZS87CisJCX0KKwkJJHVzZV90ZXJtY2FwID0gMTsKKwl9OworfQorCitzdWIgY29sb3JlZCB7CisJbXkgJGNvbG9yID0gc2hpZnQ7CisJbXkgJHN0cmluZyA9IGpvaW4oIiIsIEBfKTsKKworCWlmIChkZWZpbmVkICRjb2xvcikgeworCQkjIFB1dCBhIGNvbG9yIGNvZGUgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUsIGEgcmVzZXQgYXQgdGhlIGVuZAorCQkjIGNvbG9yIGFmdGVyIG5ld2xpbmVzIHRoYXQgYXJlIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKKwkJJHN0cmluZyA9fiBzLyhcbispKC4pLyQxJGNvbG9yJDIvZzsKKwkJIyByZXNldCBiZWZvcmUgbmV3bGluZXMKKwkJJHN0cmluZyA9fiBzLyhcbispLyRub3JtYWxfY29sb3IkMS9nOworCQkjIGNvZGVzIGF0IGJlZ2lubmluZyBhbmQgZW5kIChpZiBuZWNlc3NhcnkpOgorCQkkc3RyaW5nID1+IHMvXi8kY29sb3IvOworCQkkc3RyaW5nID1+IHMvJC8kbm9ybWFsX2NvbG9yLyB1bmxlc3MgJHN0cmluZyA9fiAvXG4kLzsKKwl9CisJcmV0dXJuICRzdHJpbmc7Cit9CisKKyMgY29tbWFuZCBsaW5lIG9wdGlvbnMKK215ICRwYXRjaF9tb2RlOworbXkgJHBhdGNoX21vZGVfcmV2aXNpb247CisKK3N1YiBhcHBseV9wYXRjaDsKK3N1YiBhcHBseV9wYXRjaF9mb3JfY2hlY2tvdXRfY29tbWl0Oworc3ViIGFwcGx5X3BhdGNoX2Zvcl9zdGFzaDsKKworbXkgJXBhdGNoX21vZGVzID0gKAorCSdzdGFnZScgPT4geworCQlESUZGID0+ICdkaWZmLWZpbGVzIC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC0tY2FjaGVkJywgQF87IH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtLWNhY2hlZCcsCisJCVZFUkIgPT4gJ1N0YWdlJywKKwkJVEFSR0VUID0+ICcnLAorCQlQQVJUSUNJUExFID0+ICdzdGFnaW5nJywKKwkJRklMVEVSID0+ICdmaWxlLW9ubHknLAorCQlJU19SRVZFUlNFID0+IDAsCisJfSwKKwknc3Rhc2gnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtcCBIRUFEJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC0tY2FjaGVkJywgQF87IH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtLWNhY2hlZCcsCisJCVZFUkIgPT4gJ1N0YXNoJywKKwkJVEFSR0VUID0+ICcnLAorCQlQQVJUSUNJUExFID0+ICdzdGFzaGluZycsCisJCUZJTFRFUiA9PiB1bmRlZiwKKwkJSVNfUkVWRVJTRSA9PiAwLAorCX0sCisJJ3Jlc2V0X2hlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtcCAtLWNhY2hlZCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoICdhcHBseSAtUiAtLWNhY2hlZCcsIEBfOyB9LAorCQlBUFBMWV9DSEVDSyA9PiAnYXBwbHkgLVIgLS1jYWNoZWQnLAorCQlWRVJCID0+ICdVbnN0YWdlJywKKwkJVEFSR0VUID0+ICcnLAorCQlQQVJUSUNJUExFID0+ICd1bnN0YWdpbmcnLAorCQlGSUxURVIgPT4gJ2luZGV4LW9ubHknLAorCQlJU19SRVZFUlNFID0+IDEsCisJfSwKKwkncmVzZXRfbm90aGVhZCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1SIC1wIC0tY2FjaGVkJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC0tY2FjaGVkJywgQF87IH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtLWNhY2hlZCcsCisJCVZFUkIgPT4gJ0FwcGx5JywKKwkJVEFSR0VUID0+ICcgdG8gaW5kZXgnLAorCQlQQVJUSUNJUExFID0+ICdhcHBseWluZycsCisJCUZJTFRFUiA9PiAnaW5kZXgtb25seScsCisJCUlTX1JFVkVSU0UgPT4gMCwKKwl9LAorCSdjaGVja291dF9pbmRleCcgPT4geworCQlESUZGID0+ICdkaWZmLWZpbGVzIC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC1SJywgQF87IH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtUicsCisJCVZFUkIgPT4gJ0Rpc2NhcmQnLAorCQlUQVJHRVQgPT4gJyBmcm9tIHdvcmt0cmVlJywKKwkJUEFSVElDSVBMRSA9PiAnZGlzY2FyZGluZycsCisJCUZJTFRFUiA9PiAnZmlsZS1vbmx5JywKKwkJSVNfUkVWRVJTRSA9PiAxLAorCX0sCisJJ2NoZWNrb3V0X2hlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtcCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoX2Zvcl9jaGVja291dF9jb21taXQgJy1SJywgQF8gfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC1SJywKKwkJVkVSQiA9PiAnRGlzY2FyZCcsCisJCVRBUkdFVCA9PiAnIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlJywKKwkJUEFSVElDSVBMRSA9PiAnZGlzY2FyZGluZycsCisJCUZJTFRFUiA9PiB1bmRlZiwKKwkJSVNfUkVWRVJTRSA9PiAxLAorCX0sCisJJ2NoZWNrb3V0X25vdGhlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtUiAtcCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoX2Zvcl9jaGVja291dF9jb21taXQgJycsIEBfIH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseScsCisJCVZFUkIgPT4gJ0FwcGx5JywKKwkJVEFSR0VUID0+ICcgdG8gaW5kZXggYW5kIHdvcmt0cmVlJywKKwkJUEFSVElDSVBMRSA9PiAnYXBwbHlpbmcnLAorCQlGSUxURVIgPT4gdW5kZWYsCisJCUlTX1JFVkVSU0UgPT4gMCwKKwl9LAorKTsKKworbXkgJXBhdGNoX21vZGVfZmxhdm91ciA9ICV7JHBhdGNoX21vZGVze3N0YWdlfX07CisKK3N1YiBydW5fY21kX3BpcGUgeworCWlmICgkXk8gZXEgJ01TV2luMzInIHx8ICReTyBlcSAnbXN5cycpIHsKKwkJbXkgQGludmFsaWQgPSBncmVwIHttL1siOipdL30gQF87CisJCWRpZSAiJF5PIGRvZXMgbm90IHN1cHBvcnQ6IEBpbnZhbGlkXG4iIGlmIEBpbnZhbGlkOworCQlteSBAYXJncyA9IG1hcCB7IG0vIC9vID8gIlwiJF9cIiI6ICRfIH0gQF87CisJCXJldHVybiBxeHtAYXJnc307CisJfSBlbHNlIHsKKwkJbXkgJGZoID0gdW5kZWY7CisJCW9wZW4oJGZoLCAnLXwnLCBAXykgb3IgZGllOworCQlyZXR1cm4gPCRmaD47CisJfQorfQorCitteSAoJEdJVF9ESVIpID0gcnVuX2NtZF9waXBlKHF3KGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKSk7CisKK2lmICghZGVmaW5lZCAkR0lUX0RJUikgeworCWV4aXQoMSk7ICMgcmV2LXBhcnNlIHdvdWxkIGhhdmUgYWxyZWFkeSBzYWlkICJub3QgYSBnaXQgcmVwbyIKK30KK2Nob21wKCRHSVRfRElSKTsKKworbXkgJWNxdW90ZV9tYXAgPSAoCisgImIiID0+IGNocig4KSwKKyAidCIgPT4gY2hyKDkpLAorICJuIiA9PiBjaHIoMTApLAorICJ2IiA9PiBjaHIoMTEpLAorICJmIiA9PiBjaHIoMTIpLAorICJyIiA9PiBjaHIoMTMpLAorICJcXCIgPT4gIlxcIiwKKyAiXDA0MiIgPT4gIlwwNDIiLAorKTsKKworc3ViIHVucXVvdGVfcGF0aCB7CisJbG9jYWwgKCRfKSA9IEBfOworCW15ICgkcmV0dmFsLCAkcmVtYWluZGVyKTsKKwlpZiAoIS9eXDA0MiguKilcMDQyJC8pIHsKKwkJcmV0dXJuICRfOworCX0KKwkoJF8sICRyZXR2YWwpID0gKCQxLCAiIik7CisJd2hpbGUgKC9eKFteXFxdKilcXCguKikkLykgeworCQkkcmVtYWluZGVyID0gJDI7CisJCSRyZXR2YWwgLj0gJDE7CisJCWZvciAoJHJlbWFpbmRlcikgeworCQkJaWYgKC9eKFswLTNdWzAtN11bMC03XSkoLiopJC8pIHsKKwkJCQkkcmV0dmFsIC49IGNocihvY3QoJDEpKTsKKwkJCQkkXyA9ICQyOworCQkJCWxhc3Q7CisJCQl9CisJCQlpZiAoL14oW1xcXDA0MmJ0bnZmcl0pKC4qKSQvKSB7CisJCQkJJHJldHZhbCAuPSAkY3F1b3RlX21hcHskMX07CisJCQkJJF8gPSAkMjsKKwkJCQlsYXN0OworCQkJfQorCQkJIyBUaGlzIGlzIG1hbGZvcm1lZCAtLSBqdXN0IHJldHVybiBpdCBhcy1pcyBmb3Igbm93LgorCQkJcmV0dXJuICRfWzBdOworCQl9CisJCSRfID0gJHJlbWFpbmRlcjsKKwl9CisJJHJldHZhbCAuPSAkXzsKKwlyZXR1cm4gJHJldHZhbDsKK30KKworc3ViIHJlZnJlc2ggeworCW15ICRmaDsKKwlvcGVuICRmaCwgJ2dpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIHwnCisJICAgIG9yIGRpZTsKKwl3aGlsZSAoPCRmaD4pIHsKKwkJOyMgaWdub3JlICduZWVkcyB1cGRhdGUnCisJfQorCWNsb3NlICRmaDsKK30KKworc3ViIGxpc3RfdW50cmFja2VkIHsKKwltYXAgeworCQljaG9tcCAkXzsKKwkJdW5xdW90ZV9wYXRoKCRfKTsKKwl9CisJcnVuX2NtZF9waXBlKHF3KGdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUtc3RhbmRhcmQgLS0pLCBAQVJHVik7Cit9CisKK215ICRzdGF0dXNfZm10ID0gJyUxMnMgJTEycyAlcyc7CitteSAkc3RhdHVzX2hlYWQgPSBzcHJpbnRmKCRzdGF0dXNfZm10LCAnc3RhZ2VkJywgJ3Vuc3RhZ2VkJywgJ3BhdGgnKTsKKworeworCW15ICRpbml0aWFsOworCXN1YiBpc19pbml0aWFsX2NvbW1pdCB7CisJCSRpbml0aWFsID0gc3lzdGVtKCdnaXQgcmV2LXBhcnNlIEhFQUQgLS0gPi9kZXYvbnVsbCAyPiYxJykgIT0gMAorCQkJdW5sZXNzIGRlZmluZWQgJGluaXRpYWw7CisJCXJldHVybiAkaW5pdGlhbDsKKwl9Cit9CisKK3N1YiBnZXRfZW1wdHlfdHJlZSB7CisJcmV0dXJuICc0YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0JzsKK30KKworIyBSZXR1cm5zIGxpc3Qgb2YgaGFzaGVzLCBjb250ZW50cyBvZiBlYWNoIG9mIHdoaWNoIGFyZToKKyMgVkFMVUU6CXBhdGhuYW1lCisjIEJJTkFSWToJaXMgYSBiaW5hcnkgcGF0aAorIyBJTkRFWDoJaXMgaW5kZXggZGlmZmVyZW50IGZyb20gSEVBRD8KKyMgRklMRToJCWlzIGZpbGUgZGlmZmVyZW50IGZyb20gaW5kZXg/CisjIElOREVYX0FERERFTDoJaXMgaXQgYWRkL2RlbGV0ZSBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4PworIyBGSUxFX0FERERFTDoJaXMgaXQgYWRkL2RlbGV0ZSBiZXR3ZWVuIGluZGV4IGFuZCBmaWxlPworIyBVTk1FUkdFRDoJaXMgdGhlIHBhdGggdW5tZXJnZWQKKworc3ViIGxpc3RfbW9kaWZpZWQgeworCW15ICgkb25seSkgPSBAXzsKKwlteSAoJWRhdGEsIEByZXR1cm4pOworCW15ICgkYWRkLCAkZGVsLCAkYWRkZGVsLCAkZmlsZSk7CisJbXkgQHRyYWNrZWQgPSAoKTsKKworCWlmIChAQVJHVikgeworCQlAdHJhY2tlZCA9IG1hcCB7CisJCQljaG9tcCAkXzsKKwkJCXVucXVvdGVfcGF0aCgkXyk7CisJCX0gcnVuX2NtZF9waXBlKHF3KGdpdCBscy1maWxlcyAtLSksIEBBUkdWKTsKKwkJcmV0dXJuIGlmICghQHRyYWNrZWQpOworCX0KKworCW15ICRyZWZlcmVuY2U7CisJaWYgKGRlZmluZWQgJHBhdGNoX21vZGVfcmV2aXNpb24gYW5kICRwYXRjaF9tb2RlX3JldmlzaW9uIG5lICdIRUFEJykgeworCQkkcmVmZXJlbmNlID0gJHBhdGNoX21vZGVfcmV2aXNpb247CisJfSBlbHNpZiAoaXNfaW5pdGlhbF9jb21taXQoKSkgeworCQkkcmVmZXJlbmNlID0gZ2V0X2VtcHR5X3RyZWUoKTsKKwl9IGVsc2UgeworCQkkcmVmZXJlbmNlID0gJ0hFQUQnOworCX0KKwlmb3IgKHJ1bl9jbWRfcGlwZShxdyhnaXQgZGlmZi1pbmRleCAtLWNhY2hlZAorCQkJICAgICAtLW51bXN0YXQgLS1zdW1tYXJ5KSwgJHJlZmVyZW5jZSwKKwkJCSAgICAgJy0tJywgQHRyYWNrZWQpKSB7CisJCWlmICgoJGFkZCwgJGRlbCwgJGZpbGUpID0KKwkJICAgIC9eKFstXGRdKykJKFstXGRdKykJKC4qKS8pIHsKKwkJCW15ICgkY2hhbmdlLCAkYmluKTsKKwkJCSRmaWxlID0gdW5xdW90ZV9wYXRoKCRmaWxlKTsKKwkJCWlmICgkYWRkIGVxICctJyAmJiAkZGVsIGVxICctJykgeworCQkJCSRjaGFuZ2UgPSAnYmluYXJ5JzsKKwkJCQkkYmluID0gMTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSRjaGFuZ2UgPSAiKyRhZGQvLSRkZWwiOworCQkJfQorCQkJJGRhdGF7JGZpbGV9ID0geworCQkJCUlOREVYID0+ICRjaGFuZ2UsCisJCQkJQklOQVJZID0+ICRiaW4sCisJCQkJRklMRSA9PiAnbm90aGluZycsCisJCQl9CisJCX0KKwkJZWxzaWYgKCgkYWRkZGVsLCAkZmlsZSkgPQorCQkgICAgICAgL14gKGNyZWF0ZXxkZWxldGUpIG1vZGUgWzAtN10rICguKikkLykgeworCQkJJGZpbGUgPSB1bnF1b3RlX3BhdGgoJGZpbGUpOworCQkJJGRhdGF7JGZpbGV9e0lOREVYX0FERERFTH0gPSAkYWRkZGVsOworCQl9CisJfQorCisJZm9yIChydW5fY21kX3BpcGUocXcoZ2l0IGRpZmYtZmlsZXMgLS1udW1zdGF0IC0tc3VtbWFyeSAtLXJhdyAtLSksIEB0cmFja2VkKSkgeworCQlpZiAoKCRhZGQsICRkZWwsICRmaWxlKSA9CisJCSAgICAvXihbLVxkXSspCShbLVxkXSspCSguKikvKSB7CisJCQkkZmlsZSA9IHVucXVvdGVfcGF0aCgkZmlsZSk7CisJCQlteSAoJGNoYW5nZSwgJGJpbik7CisJCQlpZiAoJGFkZCBlcSAnLScgJiYgJGRlbCBlcSAnLScpIHsKKwkJCQkkY2hhbmdlID0gJ2JpbmFyeSc7CisJCQkJJGJpbiA9IDE7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkY2hhbmdlID0gIiskYWRkLy0kZGVsIjsKKwkJCX0KKwkJCSRkYXRheyRmaWxlfXtGSUxFfSA9ICRjaGFuZ2U7CisJCQlpZiAoJGJpbikgeworCQkJCSRkYXRheyRmaWxlfXtCSU5BUll9ID0gMTsKKwkJCX0KKwkJfQorCQllbHNpZiAoKCRhZGRkZWwsICRmaWxlKSA9CisJCSAgICAgICAvXiAoY3JlYXRlfGRlbGV0ZSkgbW9kZSBbMC03XSsgKC4qKSQvKSB7CisJCQkkZmlsZSA9IHVucXVvdGVfcGF0aCgkZmlsZSk7CisJCQkkZGF0YXskZmlsZX17RklMRV9BRERERUx9ID0gJGFkZGRlbDsKKwkJfQorCQllbHNpZiAoL146WzAtN10rIFswLTddKyBbMC05YS1mXSsgWzAtOWEtZl0rICguKQkoLiopJC8pIHsKKwkJCSRmaWxlID0gdW5xdW90ZV9wYXRoKCQyKTsKKwkJCWlmICghZXhpc3RzICRkYXRheyRmaWxlfSkgeworCQkJCSRkYXRheyRmaWxlfSA9ICt7CisJCQkJCUlOREVYID0+ICd1bmNoYW5nZWQnLAorCQkJCQlCSU5BUlkgPT4gMCwKKwkJCQl9OworCQkJfQorCQkJaWYgKCQxIGVxICdVJykgeworCQkJCSRkYXRheyRmaWxlfXtVTk1FUkdFRH0gPSAxOworCQkJfQorCQl9CisJfQorCisJZm9yIChzb3J0IGtleXMgJWRhdGEpIHsKKwkJbXkgJGl0ID0gJGRhdGF7JF99OworCisJCWlmICgkb25seSkgeworCQkJaWYgKCRvbmx5IGVxICdpbmRleC1vbmx5JykgeworCQkJCW5leHQgaWYgKCRpdC0+e0lOREVYfSBlcSAndW5jaGFuZ2VkJyk7CisJCQl9CisJCQlpZiAoJG9ubHkgZXEgJ2ZpbGUtb25seScpIHsKKwkJCQluZXh0IGlmICgkaXQtPntGSUxFfSBlcSAnbm90aGluZycpOworCQkJfQorCQl9CisJCXB1c2ggQHJldHVybiwgK3sKKwkJCVZBTFVFID0+ICRfLAorCQkJJSRpdCwKKwkJfTsKKwl9CisJcmV0dXJuIEByZXR1cm47Cit9CisKK3N1YiBmaW5kX3VuaXF1ZSB7CisJbXkgKCRzdHJpbmcsIEBzdHVmZikgPSBAXzsKKwlteSAkZm91bmQgPSB1bmRlZjsKKwlmb3IgKG15ICRpID0gMDsgJGkgPCBAc3R1ZmY7ICRpKyspIHsKKwkJbXkgJGl0ID0gJHN0dWZmWyRpXTsKKwkJbXkgJGhpdCA9IHVuZGVmOworCQlpZiAocmVmICRpdCkgeworCQkJaWYgKChyZWYgJGl0KSBlcSAnQVJSQVknKSB7CisJCQkJJGl0ID0gJGl0LT5bMF07CisJCQl9CisJCQllbHNlIHsKKwkJCQkkaXQgPSAkaXQtPntWQUxVRX07CisJCQl9CisJCX0KKwkJZXZhbCB7CisJCQlpZiAoJGl0ID1+IC9eJHN0cmluZy8pIHsKKwkJCQkkaGl0ID0gMTsKKwkJCX07CisJCX07CisJCWlmIChkZWZpbmVkICRoaXQgJiYgZGVmaW5lZCAkZm91bmQpIHsKKwkJCXJldHVybiB1bmRlZjsKKwkJfQorCQlpZiAoJGhpdCkgeworCQkJJGZvdW5kID0gJGkgKyAxOworCQl9CisJfQorCXJldHVybiAkZm91bmQ7Cit9CisKKyMgaW5zZXJ0cyBzdHJpbmcgaW50byB0cmllIGFuZCB1cGRhdGVzIGNvdW50IGZvciBlYWNoIGNoYXJhY3Rlcgorc3ViIHVwZGF0ZV90cmllIHsKKwlteSAoJHRyaWUsICRzdHJpbmcpID0gQF87CisJZm9yZWFjaCAoc3BsaXQgLy8sICRzdHJpbmcpIHsKKwkJJHRyaWUgPSAkdHJpZS0+eyRffSB8fD0ge0NPVU5UID0+IDB9OworCQkkdHJpZS0+e0NPVU5UfSsrOworCX0KK30KKworIyByZXR1cm5zIGFuIGFycmF5IG9mIHR1cGxlcyAocHJlZml4LCByZW1haW5kZXIpCitzdWIgZmluZF91bmlxdWVfcHJlZml4ZXMgeworCW15IEBzdHVmZiA9IEBfOworCW15IEByZXR1cm4gPSAoKTsKKworCSMgYW55IHNpbmdsZSBwcmVmaXggZXhjZWVkaW5nIHRoZSBzb2Z0IGxpbWl0IGlzIG9taXR0ZWQKKwkjIGlmIGFueSBwcmVmaXggZXhjZWVkcyB0aGUgaGFyZCBsaW1pdCBhbGwgYXJlIG9taXR0ZWQKKwkjIDAgaW5kaWNhdGVzIG5vIGxpbWl0CisJbXkgJHNvZnRfbGltaXQgPSAwOworCW15ICRoYXJkX2xpbWl0ID0gMzsKKworCSMgYnVpbGQgYSB0cmllIG1vZGVsbGluZyBhbGwgcG9zc2libGUgb3B0aW9ucworCW15ICV0cmllOworCWZvcmVhY2ggbXkgJHByaW50IChAc3R1ZmYpIHsKKwkJaWYgKChyZWYgJHByaW50KSBlcSAnQVJSQVknKSB7CisJCQkkcHJpbnQgPSAkcHJpbnQtPlswXTsKKwkJfQorCQllbHNpZiAoKHJlZiAkcHJpbnQpIGVxICdIQVNIJykgeworCQkJJHByaW50ID0gJHByaW50LT57VkFMVUV9OworCQl9CisJCXVwZGF0ZV90cmllKFwldHJpZSwgJHByaW50KTsKKwkJcHVzaCBAcmV0dXJuLCAkcHJpbnQ7CisJfQorCisJIyB1c2UgdGhlIHRyaWUgdG8gZmluZCB0aGUgdW5pcXVlIHByZWZpeGVzCisJZm9yIChteSAkaSA9IDA7ICRpIDwgQHJldHVybjsgJGkrKykgeworCQlteSAkcmV0ID0gJHJldHVyblskaV07CisJCW15IEBsZXR0ZXJzID0gc3BsaXQgLy8sICRyZXQ7CisJCW15ICVzZWFyY2ggPSAldHJpZTsKKwkJbXkgKCRwcmVmaXgsICRyZW1haW5kZXIpOworCQlteSAkajsKKwkJZm9yICgkaiA9IDA7ICRqIDwgQGxldHRlcnM7ICRqKyspIHsKKwkJCW15ICRsZXR0ZXIgPSAkbGV0dGVyc1skal07CisJCQlpZiAoJHNlYXJjaHskbGV0dGVyfXtDT1VOVH0gPT0gMSkgeworCQkJCSRwcmVmaXggPSBzdWJzdHIgJHJldCwgMCwgJGogKyAxOworCQkJCSRyZW1haW5kZXIgPSBzdWJzdHIgJHJldCwgJGogKyAxOworCQkJCWxhc3Q7CisJCQl9CisJCQllbHNlIHsKKwkJCQlteSAkcHJlZml4ID0gc3Vic3RyICRyZXQsIDAsICRqOworCQkJCXJldHVybiAoKQorCQkJCSAgICBpZiAoJGhhcmRfbGltaXQgJiYgJGogKyAxID4gJGhhcmRfbGltaXQpOworCQkJfQorCQkJJXNlYXJjaCA9ICV7JHNlYXJjaHskbGV0dGVyfX07CisJCX0KKwkJaWYgKG9yZCgkbGV0dGVyc1swXSkgPiAxMjcgfHwKKwkJICAgICgkc29mdF9saW1pdCAmJiAkaiArIDEgPiAkc29mdF9saW1pdCkpIHsKKwkJCSRwcmVmaXggPSB1bmRlZjsKKwkJCSRyZW1haW5kZXIgPSAkcmV0OworCQl9CisJCSRyZXR1cm5bJGldID0gWyRwcmVmaXgsICRyZW1haW5kZXJdOworCX0KKwlyZXR1cm4gQHJldHVybjsKK30KKworIyBmaWx0ZXJzIG91dCBwcmVmaXhlcyB3aGljaCBoYXZlIHNwZWNpYWwgbWVhbmluZyB0byBsaXN0X2FuZF9jaG9vc2UoKQorc3ViIGlzX3ZhbGlkX3ByZWZpeCB7CisJbXkgJHByZWZpeCA9IHNoaWZ0OworCXJldHVybiAoZGVmaW5lZCAkcHJlZml4KSAmJgorCSAgICAhKCRwcmVmaXggPX4gL1tccyxdLykgJiYgIyBzZXBhcmF0b3JzCisJICAgICEoJHByZWZpeCA9fiAvXi0vKSAmJiAgICAjIGRlc2VsZWN0aW9uCisJICAgICEoJHByZWZpeCA9fiAvXlxkKy8pICYmICAjIHNlbGVjdGlvbgorCSAgICAoJHByZWZpeCBuZSAnKicpICYmICAgICAgIyAiYWxsIiB3aWxkY2FyZAorCSAgICAoJHByZWZpeCBuZSAnPycpOyAgICAgICAgIyBwcm9tcHQgaGVscAorfQorCisjIGdpdmVuIGEgcHJlZml4L3JlbWFpbmRlciB0dXBsZSByZXR1cm4gYSBzdHJpbmcgd2l0aCB0aGUgcHJlZml4IGhpZ2hsaWdodGVkCisjIGZvciBub3cgdXNlIHNxdWFyZSBicmFja2V0czsgbGF0ZXIgbWlnaHQgdXNlIEFOU0kgY29sb3JzICh1bmRlcmxpbmUsIGJvbGQpCitzdWIgaGlnaGxpZ2h0X3ByZWZpeCB7CisJbXkgJHByZWZpeCA9IHNoaWZ0OworCW15ICRyZW1haW5kZXIgPSBzaGlmdDsKKworCWlmICghZGVmaW5lZCAkcHJlZml4KSB7CisJCXJldHVybiAkcmVtYWluZGVyOworCX0KKworCWlmICghaXNfdmFsaWRfcHJlZml4KCRwcmVmaXgpKSB7CisJCXJldHVybiAiJHByZWZpeCRyZW1haW5kZXIiOworCX0KKworCWlmICghJG1lbnVfdXNlX2NvbG9yKSB7CisJCXJldHVybiAiWyRwcmVmaXhdJHJlbWFpbmRlciI7CisJfQorCisJcmV0dXJuICIkcHJvbXB0X2NvbG9yJHByZWZpeCRub3JtYWxfY29sb3IkcmVtYWluZGVyIjsKK30KKworc3ViIGVycm9yX21zZyB7CisJcHJpbnQgU1RERVJSIGNvbG9yZWQgJGVycm9yX2NvbG9yLCBAXzsKK30KKworc3ViIGxpc3RfYW5kX2Nob29zZSB7CisJbXkgKCRvcHRzLCBAc3R1ZmYpID0gQF87CisJbXkgKEBjaG9zZW4sIEByZXR1cm4pOworCW15ICRpOworCW15IEBwcmVmaXhlcyA9IGZpbmRfdW5pcXVlX3ByZWZpeGVzKEBzdHVmZikgdW5sZXNzICRvcHRzLT57TElTVF9PTkxZfTsKKworICAgICAgVE9QTE9PUDoKKwl3aGlsZSAoMSkgeworCQlteSAkbGFzdF9sZiA9IDA7CisKKwkJaWYgKCRvcHRzLT57SEVBREVSfSkgeworCQkJaWYgKCEkb3B0cy0+e0xJU1RfRkxBVH0pIHsKKwkJCQlwcmludCAiICAgICAiOworCQkJfQorCQkJcHJpbnQgY29sb3JlZCAkaGVhZGVyX2NvbG9yLCAiJG9wdHMtPntIRUFERVJ9XG4iOworCQl9CisJCWZvciAoJGkgPSAwOyAkaSA8IEBzdHVmZjsgJGkrKykgeworCQkJbXkgJGNob3NlbiA9ICRjaG9zZW5bJGldID8gJyonIDogJyAnOworCQkJbXkgJHByaW50ID0gJHN0dWZmWyRpXTsKKwkJCW15ICRyZWYgPSByZWYgJHByaW50OworCQkJbXkgJGhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0X3ByZWZpeChAeyRwcmVmaXhlc1skaV19KQorCQkJICAgIGlmIEBwcmVmaXhlczsKKwkJCWlmICgkcmVmIGVxICdBUlJBWScpIHsKKwkJCQkkcHJpbnQgPSAkaGlnaGxpZ2h0ZWQgfHwgJHByaW50LT5bMF07CisJCQl9CisJCQllbHNpZiAoJHJlZiBlcSAnSEFTSCcpIHsKKwkJCQlteSAkdmFsdWUgPSAkaGlnaGxpZ2h0ZWQgfHwgJHByaW50LT57VkFMVUV9OworCQkJCSRwcmludCA9IHNwcmludGYoJHN0YXR1c19mbXQsCisJCQkJICAgICRwcmludC0+e0lOREVYfSwKKwkJCQkgICAgJHByaW50LT57RklMRX0sCisJCQkJICAgICR2YWx1ZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkcHJpbnQgPSAkaGlnaGxpZ2h0ZWQgfHwgJHByaW50OworCQkJfQorCQkJcHJpbnRmKCIlcyUyZDogJXMiLCAkY2hvc2VuLCAkaSsxLCAkcHJpbnQpOworCQkJaWYgKCgkb3B0cy0+e0xJU1RfRkxBVH0pICYmCisJCQkgICAgKCgkaSArIDEpICUgKCRvcHRzLT57TElTVF9GTEFUfSkpKSB7CisJCQkJcHJpbnQgIlx0IjsKKwkJCQkkbGFzdF9sZiA9IDA7CisJCQl9CisJCQllbHNlIHsKKwkJCQlwcmludCAiXG4iOworCQkJCSRsYXN0X2xmID0gMTsKKwkJCX0KKwkJfQorCQlpZiAoISRsYXN0X2xmKSB7CisJCQlwcmludCAiXG4iOworCQl9CisKKwkJcmV0dXJuIGlmICgkb3B0cy0+e0xJU1RfT05MWX0pOworCisJCXByaW50IGNvbG9yZWQgJHByb21wdF9jb2xvciwgJG9wdHMtPntQUk9NUFR9OworCQlpZiAoJG9wdHMtPntTSU5HTEVUT059KSB7CisJCQlwcmludCAiPiAiOworCQl9CisJCWVsc2UgeworCQkJcHJpbnQgIj4+ICI7CisJCX0KKwkJbXkgJGxpbmUgPSA8U1RESU4+OworCQlpZiAoISRsaW5lKSB7CisJCQlwcmludCAiXG4iOworCQkJJG9wdHMtPntPTl9FT0Z9LT4oKSBpZiAkb3B0cy0+e09OX0VPRn07CisJCQlsYXN0OworCQl9CisJCWNob21wICRsaW5lOworCQlsYXN0IGlmICRsaW5lIGVxICcnOworCQlpZiAoJGxpbmUgZXEgJz8nKSB7CisJCQkkb3B0cy0+e1NJTkdMRVRPTn0gPworCQkJICAgIHNpbmdsZXRvbl9wcm9tcHRfaGVscF9jbWQoKSA6CisJCQkgICAgcHJvbXB0X2hlbHBfY21kKCk7CisJCQluZXh0IFRPUExPT1A7CisJCX0KKwkJZm9yIG15ICRjaG9pY2UgKHNwbGl0KC9bXHMsXSsvLCAkbGluZSkpIHsKKwkJCW15ICRjaG9vc2UgPSAxOworCQkJbXkgKCRib3R0b20sICR0b3ApOworCisJCQkjIElucHV0IHRoYXQgYmVnaW5zIHdpdGggJy0nOyB1bmNob29zZQorCQkJaWYgKCRjaG9pY2UgPX4gcy9eLS8vKSB7CisJCQkJJGNob29zZSA9IDA7CisJCQl9CisJCQkjIEEgcmFuZ2UgY2FuIGJlIHNwZWNpZmllZCBsaWtlIDUtNyBvciA1LS4KKwkJCWlmICgkY2hvaWNlID1+IC9eKFxkKyktKFxkKikkLykgeworCQkJCSgkYm90dG9tLCAkdG9wKSA9ICgkMSwgbGVuZ3RoKCQyKSA/ICQyIDogMSArIEBzdHVmZik7CisJCQl9CisJCQllbHNpZiAoJGNob2ljZSA9fiAvXlxkKyQvKSB7CisJCQkJJGJvdHRvbSA9ICR0b3AgPSAkY2hvaWNlOworCQkJfQorCQkJZWxzaWYgKCRjaG9pY2UgZXEgJyonKSB7CisJCQkJJGJvdHRvbSA9IDE7CisJCQkJJHRvcCA9IDEgKyBAc3R1ZmY7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkYm90dG9tID0gJHRvcCA9IGZpbmRfdW5pcXVlKCRjaG9pY2UsIEBzdHVmZik7CisJCQkJaWYgKCFkZWZpbmVkICRib3R0b20pIHsKKwkJCQkJZXJyb3JfbXNnICJIdWggKCRjaG9pY2UpP1xuIjsKKwkJCQkJbmV4dCBUT1BMT09QOworCQkJCX0KKwkJCX0KKwkJCWlmICgkb3B0cy0+e1NJTkdMRVRPTn0gJiYgJGJvdHRvbSAhPSAkdG9wKSB7CisJCQkJZXJyb3JfbXNnICJIdWggKCRjaG9pY2UpP1xuIjsKKwkJCQluZXh0IFRPUExPT1A7CisJCQl9CisJCQlmb3IgKCRpID0gJGJvdHRvbS0xOyAkaSA8PSAkdG9wLTE7ICRpKyspIHsKKwkJCQluZXh0IGlmIChAc3R1ZmYgPD0gJGkgfHwgJGkgPCAwKTsKKwkJCQkkY2hvc2VuWyRpXSA9ICRjaG9vc2U7CisJCQl9CisJCX0KKwkJbGFzdCBpZiAoJG9wdHMtPntJTU1FRElBVEV9IHx8ICRsaW5lIGVxICcqJyk7CisJfQorCWZvciAoJGkgPSAwOyAkaSA8IEBzdHVmZjsgJGkrKykgeworCQlpZiAoJGNob3NlblskaV0pIHsKKwkJCXB1c2ggQHJldHVybiwgJHN0dWZmWyRpXTsKKwkJfQorCX0KKwlyZXR1cm4gQHJldHVybjsKK30KKworc3ViIHNpbmdsZXRvbl9wcm9tcHRfaGVscF9jbWQgeworCXByaW50IGNvbG9yZWQgJGhlbHBfY29sb3IsIDw8XEVPRiA7CitQcm9tcHQgaGVscDoKKzEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtCitmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeAorICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmcKK0VPRgorfQorCitzdWIgcHJvbXB0X2hlbHBfY21kIHsKKwlwcmludCBjb2xvcmVkICRoZWxwX2NvbG9yLCA8PFxFT0YgOworUHJvbXB0IGhlbHA6CisxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW0KKzMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtcworMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXMKK2ZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4CistLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zCisqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtcworICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZworRU9GCit9CisKK3N1YiBzdGF0dXNfY21kIHsKKwlsaXN0X2FuZF9jaG9vc2UoeyBMSVNUX09OTFkgPT4gMSwgSEVBREVSID0+ICRzdGF0dXNfaGVhZCB9LAorCQkJbGlzdF9tb2RpZmllZCgpKTsKKwlwcmludCAiXG4iOworfQorCitzdWIgc2F5X25fcGF0aHMgeworCW15ICRkaWQgPSBzaGlmdCBAXzsKKwlteSAkY250ID0gc2NhbGFyIEBfOworCXByaW50ICIkZGlkICI7CisJaWYgKDEgPCAkY250KSB7CisJCXByaW50ICIkY250IHBhdGhzXG4iOworCX0KKwllbHNlIHsKKwkJcHJpbnQgIm9uZSBwYXRoXG4iOworCX0KK30KKworc3ViIHVwZGF0ZV9jbWQgeworCW15IEBtb2RzID0gbGlzdF9tb2RpZmllZCgnZmlsZS1vbmx5Jyk7CisJcmV0dXJuIGlmICghQG1vZHMpOworCisJbXkgQHVwZGF0ZSA9IGxpc3RfYW5kX2Nob29zZSh7IFBST01QVCA9PiAnVXBkYXRlJywKKwkJCQkgICAgICAgSEVBREVSID0+ICRzdGF0dXNfaGVhZCwgfSwKKwkJCQkgICAgIEBtb2RzKTsKKwlpZiAoQHVwZGF0ZSkgeworCQlzeXN0ZW0ocXcoZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSAtLSksCisJCSAgICAgICBtYXAgeyAkXy0+e1ZBTFVFfSB9IEB1cGRhdGUpOworCQlzYXlfbl9wYXRocygndXBkYXRlZCcsIEB1cGRhdGUpOworCX0KKwlwcmludCAiXG4iOworfQorCitzdWIgcmV2ZXJ0X2NtZCB7CisJbXkgQHVwZGF0ZSA9IGxpc3RfYW5kX2Nob29zZSh7IFBST01QVCA9PiAnUmV2ZXJ0JywKKwkJCQkgICAgICAgSEVBREVSID0+ICRzdGF0dXNfaGVhZCwgfSwKKwkJCQkgICAgIGxpc3RfbW9kaWZpZWQoKSk7CisJaWYgKEB1cGRhdGUpIHsKKwkJaWYgKGlzX2luaXRpYWxfY29tbWl0KCkpIHsKKwkJCXN5c3RlbShxdyhnaXQgcm0gLS1jYWNoZWQpLAorCQkJCW1hcCB7ICRfLT57VkFMVUV9IH0gQHVwZGF0ZSk7CisJCX0KKwkJZWxzZSB7CisJCQlteSBAbGluZXMgPSBydW5fY21kX3BpcGUocXcoZ2l0IGxzLXRyZWUgSEVBRCAtLSksCisJCQkJCQkgbWFwIHsgJF8tPntWQUxVRX0gfSBAdXBkYXRlKTsKKwkJCW15ICRmaDsKKwkJCW9wZW4gJGZoLCAnfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbycKKwkJCSAgICBvciBkaWU7CisJCQlmb3IgKEBsaW5lcykgeworCQkJCXByaW50ICRmaCAkXzsKKwkJCX0KKwkJCWNsb3NlKCRmaCk7CisJCQlmb3IgKEB1cGRhdGUpIHsKKwkJCQlpZiAoJF8tPntJTkRFWF9BRERERUx9ICYmCisJCQkJICAgICRfLT57SU5ERVhfQUREREVMfSBlcSAnY3JlYXRlJykgeworCQkJCQlzeXN0ZW0ocXcoZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAtLSksCisJCQkJCSAgICAgICAkXy0+e1ZBTFVFfSk7CisJCQkJCXByaW50ICJub3RlOiAkXy0+e1ZBTFVFfSBpcyB1bnRyYWNrZWQgbm93LlxuIjsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmVmcmVzaCgpOworCQlzYXlfbl9wYXRocygncmV2ZXJ0ZWQnLCBAdXBkYXRlKTsKKwl9CisJcHJpbnQgIlxuIjsKK30KKworc3ViIGFkZF91bnRyYWNrZWRfY21kIHsKKwlteSBAYWRkID0gbGlzdF9hbmRfY2hvb3NlKHsgUFJPTVBUID0+ICdBZGQgdW50cmFja2VkJyB9LAorCQkJCSAgbGlzdF91bnRyYWNrZWQoKSk7CisJaWYgKEBhZGQpIHsKKwkJc3lzdGVtKHF3KGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0pLCBAYWRkKTsKKwkJc2F5X25fcGF0aHMoJ2FkZGVkJywgQGFkZCk7CisJfQorCXByaW50ICJcbiI7Cit9CisKK3N1YiBydW5fZ2l0X2FwcGx5IHsKKwlteSAkY21kID0gc2hpZnQ7CisJbXkgJGZoOworCW9wZW4gJGZoLCAnfCBnaXQgJyAuICRjbWQgLiAiIC0tcmVjb3VudCAtLWFsbG93LW92ZXJsYXAiOworCXByaW50ICRmaCBAXzsKKwlyZXR1cm4gY2xvc2UgJGZoOworfQorCitzdWIgcGFyc2VfZGlmZiB7CisJbXkgKCRwYXRoKSA9IEBfOworCW15IEBkaWZmX2NtZCA9IHNwbGl0KCIgIiwgJHBhdGNoX21vZGVfZmxhdm91cntESUZGfSk7CisJaWYgKGRlZmluZWQgJHBhdGNoX21vZGVfcmV2aXNpb24pIHsKKwkJcHVzaCBAZGlmZl9jbWQsICRwYXRjaF9tb2RlX3JldmlzaW9uOworCX0KKwlteSBAZGlmZiA9IHJ1bl9jbWRfcGlwZSgiZ2l0IiwgQGRpZmZfY21kLCAiLS0iLCAkcGF0aCk7CisJbXkgQGNvbG9yZWQgPSAoKTsKKwlpZiAoJGRpZmZfdXNlX2NvbG9yKSB7CisJCUBjb2xvcmVkID0gcnVuX2NtZF9waXBlKCJnaXQiLCBAZGlmZl9jbWQsIHF3KC0tY29sb3IgLS0pLCAkcGF0aCk7CisJfQorCW15IChAaHVuaykgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ2hlYWRlcicgfTsKKworCWZvciAobXkgJGkgPSAwOyAkaSA8IEBkaWZmOyAkaSsrKSB7CisJCWlmICgkZGlmZlskaV0gPX4gL15AQCAvKSB7CisJCQlwdXNoIEBodW5rLCB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sCisJCQkJVFlQRSA9PiAnaHVuaycgfTsKKwkJfQorCQlwdXNoIEB7JGh1bmtbLTFde1RFWFR9fSwgJGRpZmZbJGldOworCQlwdXNoIEB7JGh1bmtbLTFde0RJU1BMQVl9fSwKKwkJCSgkZGlmZl91c2VfY29sb3IgPyAkY29sb3JlZFskaV0gOiAkZGlmZlskaV0pOworCX0KKwlyZXR1cm4gQGh1bms7Cit9CisKK3N1YiBwYXJzZV9kaWZmX2hlYWRlciB7CisJbXkgJHNyYyA9IHNoaWZ0OworCisJbXkgJGhlYWQgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ2hlYWRlcicgfTsKKwlteSAkbW9kZSA9IHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSwgVFlQRSA9PiAnbW9kZScgfTsKKwlteSAkZGVsZXRpb24gPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ2RlbGV0aW9uJyB9OworCisJZm9yIChteSAkaSA9IDA7ICRpIDwgQHskc3JjLT57VEVYVH19OyAkaSsrKSB7CisJCW15ICRkZXN0ID0KKwkJICAgJHNyYy0+e1RFWFR9LT5bJGldID1+IC9eKG9sZHxuZXcpIG1vZGUgKFxkKykkLyA/ICRtb2RlIDoKKwkJICAgJHNyYy0+e1RFWFR9LT5bJGldID1+IC9eZGVsZXRlZCBmaWxlLyA/ICRkZWxldGlvbiA6CisJCSAgICRoZWFkOworCQlwdXNoIEB7JGRlc3QtPntURVhUfX0sICRzcmMtPntURVhUfS0+WyRpXTsKKwkJcHVzaCBAeyRkZXN0LT57RElTUExBWX19LCAkc3JjLT57RElTUExBWX0tPlskaV07CisJfQorCXJldHVybiAoJGhlYWQsICRtb2RlLCAkZGVsZXRpb24pOworfQorCitzdWIgaHVua19zcGxpdHRhYmxlIHsKKwlteSAoJHRleHQpID0gQF87CisKKwlteSBAcyA9IHNwbGl0X2h1bmsoJHRleHQpOworCXJldHVybiAoMSA8IEBzKTsKK30KKworc3ViIHBhcnNlX2h1bmtfaGVhZGVyIHsKKwlteSAoJGxpbmUpID0gQF87CisJbXkgKCRvX29mcywgJG9fY250LCAkbl9vZnMsICRuX2NudCkgPQorCSAgICAkbGluZSA9fiAvXkBAIC0oXGQrKSg/OiwoXGQrKSk/IFwrKFxkKykoPzosKFxkKykpPyBAQC87CisJJG9fY250ID0gMSB1bmxlc3MgZGVmaW5lZCAkb19jbnQ7CisJJG5fY250ID0gMSB1bmxlc3MgZGVmaW5lZCAkbl9jbnQ7CisJcmV0dXJuICgkb19vZnMsICRvX2NudCwgJG5fb2ZzLCAkbl9jbnQpOworfQorCitzdWIgc3BsaXRfaHVuayB7CisJbXkgKCR0ZXh0LCAkZGlzcGxheSkgPSBAXzsKKwlteSBAc3BsaXQgPSAoKTsKKwlpZiAoIWRlZmluZWQgJGRpc3BsYXkpIHsKKwkJJGRpc3BsYXkgPSAkdGV4dDsKKwl9CisJIyBJZiB0aGVyZSBhcmUgY29udGV4dCBsaW5lcyBpbiB0aGUgbWlkZGxlIG9mIGEgaHVuaywKKwkjIGl0IGNhbiBiZSBzcGxpdCwgYnV0IHdlIHdvdWxkIG5lZWQgdG8gdGFrZSBjYXJlIG9mCisJIyBvdmVybGFwcyBsYXRlci4KKworCW15ICgkb19vZnMsIHVuZGVmLCAkbl9vZnMpID0gcGFyc2VfaHVua19oZWFkZXIoJHRleHQtPlswXSk7CisJbXkgJGh1bmtfc3RhcnQgPSAxOworCisgICAgICBPVVRFUjoKKwl3aGlsZSAoMSkgeworCQlteSAkbmV4dF9odW5rX3N0YXJ0ID0gdW5kZWY7CisJCW15ICRpID0gJGh1bmtfc3RhcnQgLSAxOworCQlteSAkdGhpcyA9ICt7CisJCQlURVhUID0+IFtdLAorCQkJRElTUExBWSA9PiBbXSwKKwkJCVRZUEUgPT4gJ2h1bmsnLAorCQkJT0xEID0+ICRvX29mcywKKwkJCU5FVyA9PiAkbl9vZnMsCisJCQlPQ05UID0+IDAsCisJCQlOQ05UID0+IDAsCisJCQlBRERERUwgPT4gMCwKKwkJCVBPU1RDVFggPT4gMCwKKwkJCVVTRSA9PiB1bmRlZiwKKwkJfTsKKworCQl3aGlsZSAoKyskaSA8IEAkdGV4dCkgeworCQkJbXkgJGxpbmUgPSAkdGV4dC0+WyRpXTsKKwkJCW15ICRkaXNwbGF5ID0gJGRpc3BsYXktPlskaV07CisJCQlpZiAoJGxpbmUgPX4gL14gLykgeworCQkJCWlmICgkdGhpcy0+e0FERERFTH0gJiYKKwkJCQkgICAgIWRlZmluZWQgJG5leHRfaHVua19zdGFydCkgeworCQkJCQkjIFdlIGhhdmUgc2VlbiBsZWFkaW5nIGNvbnRleHQgYW5kCisJCQkJCSMgYWRkcy9kZWxzIGFuZCB0aGVuIGhlcmUgaXMgYW5vdGhlcgorCQkJCQkjIGNvbnRleHQsIHdoaWNoIGlzIHRyYWlsaW5nIGZvciB0aGlzCisJCQkJCSMgc3BsaXQgaHVuayBhbmQgbGVhZGluZyBmb3IgdGhlIG5leHQKKwkJCQkJIyBvbmUuCisJCQkJCSRuZXh0X2h1bmtfc3RhcnQgPSAkaTsKKwkJCQl9CisJCQkJcHVzaCBAeyR0aGlzLT57VEVYVH19LCAkbGluZTsKKwkJCQlwdXNoIEB7JHRoaXMtPntESVNQTEFZfX0sICRkaXNwbGF5OworCQkJCSR0aGlzLT57T0NOVH0rKzsKKwkJCQkkdGhpcy0+e05DTlR9Kys7CisJCQkJaWYgKGRlZmluZWQgJG5leHRfaHVua19zdGFydCkgeworCQkJCQkkdGhpcy0+e1BPU1RDVFh9Kys7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisKKwkJCSMgYWRkL2RlbAorCQkJaWYgKGRlZmluZWQgJG5leHRfaHVua19zdGFydCkgeworCQkJCSMgV2UgYXJlIGRvbmUgd2l0aCB0aGUgY3VycmVudCBodW5rIGFuZAorCQkJCSMgdGhpcyBpcyB0aGUgZmlyc3QgcmVhbCBjaGFuZ2UgZm9yIHRoZQorCQkJCSMgbmV4dCBzcGxpdCBvbmUuCisJCQkJJGh1bmtfc3RhcnQgPSAkbmV4dF9odW5rX3N0YXJ0OworCQkJCSRvX29mcyA9ICR0aGlzLT57T0xEfSArICR0aGlzLT57T0NOVH07CisJCQkJJG5fb2ZzID0gJHRoaXMtPntORVd9ICsgJHRoaXMtPntOQ05UfTsKKwkJCQkkb19vZnMgLT0gJHRoaXMtPntQT1NUQ1RYfTsKKwkJCQkkbl9vZnMgLT0gJHRoaXMtPntQT1NUQ1RYfTsKKwkJCQlwdXNoIEBzcGxpdCwgJHRoaXM7CisJCQkJcmVkbyBPVVRFUjsKKwkJCX0KKwkJCXB1c2ggQHskdGhpcy0+e1RFWFR9fSwgJGxpbmU7CisJCQlwdXNoIEB7JHRoaXMtPntESVNQTEFZfX0sICRkaXNwbGF5OworCQkJJHRoaXMtPntBRERERUx9Kys7CisJCQlpZiAoJGxpbmUgPX4gL14tLykgeworCQkJCSR0aGlzLT57T0NOVH0rKzsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSR0aGlzLT57TkNOVH0rKzsKKwkJCX0KKwkJfQorCisJCXB1c2ggQHNwbGl0LCAkdGhpczsKKwkJbGFzdDsKKwl9CisKKwlmb3IgbXkgJGh1bmsgKEBzcGxpdCkgeworCQkkb19vZnMgPSAkaHVuay0+e09MRH07CisJCSRuX29mcyA9ICRodW5rLT57TkVXfTsKKwkJbXkgJG9fY250ID0gJGh1bmstPntPQ05UfTsKKwkJbXkgJG5fY250ID0gJGh1bmstPntOQ05UfTsKKworCQlteSAkaGVhZCA9ICgiQEAgLSRvX29mcyIgLgorCQkJICAgICgoJG9fY250ICE9IDEpID8gIiwkb19jbnQiIDogJycpIC4KKwkJCSAgICAiICskbl9vZnMiIC4KKwkJCSAgICAoKCRuX2NudCAhPSAxKSA/ICIsJG5fY250IiA6ICcnKSAuCisJCQkgICAgIiBAQFxuIik7CisJCW15ICRkaXNwbGF5X2hlYWQgPSAkaGVhZDsKKwkJdW5zaGlmdCBAeyRodW5rLT57VEVYVH19LCAkaGVhZDsKKwkJaWYgKCRkaWZmX3VzZV9jb2xvcikgeworCQkJJGRpc3BsYXlfaGVhZCA9IGNvbG9yZWQoJGZyYWdpbmZvX2NvbG9yLCAkaGVhZCk7CisJCX0KKwkJdW5zaGlmdCBAeyRodW5rLT57RElTUExBWX19LCAkZGlzcGxheV9oZWFkOworCX0KKwlyZXR1cm4gQHNwbGl0OworfQorCitzdWIgZmluZF9sYXN0X29fY3R4IHsKKwlteSAoJGl0KSA9IEBfOworCW15ICR0ZXh0ID0gJGl0LT57VEVYVH07CisJbXkgKCRvX29mcywgJG9fY250KSA9IHBhcnNlX2h1bmtfaGVhZGVyKCR0ZXh0LT5bMF0pOworCW15ICRpID0gQHskdGV4dH07CisJbXkgJGxhc3Rfb19jdHggPSAkb19vZnMgKyAkb19jbnQ7CisJd2hpbGUgKDAgPCAtLSRpKSB7CisJCW15ICRsaW5lID0gJHRleHQtPlskaV07CisJCWlmICgkbGluZSA9fiAvXiAvKSB7CisJCQkkbGFzdF9vX2N0eC0tOworCQkJbmV4dDsKKwkJfQorCQlsYXN0OworCX0KKwlyZXR1cm4gJGxhc3Rfb19jdHg7Cit9CisKK3N1YiBtZXJnZV9odW5rIHsKKwlteSAoJHByZXYsICR0aGlzKSA9IEBfOworCW15ICgkbzBfb2ZzLCAkbzBfY250LCAkbjBfb2ZzLCAkbjBfY250KSA9CisJICAgIHBhcnNlX2h1bmtfaGVhZGVyKCRwcmV2LT57VEVYVH1bMF0pOworCW15ICgkbzFfb2ZzLCAkbzFfY250LCAkbjFfb2ZzLCAkbjFfY250KSA9CisJICAgIHBhcnNlX2h1bmtfaGVhZGVyKCR0aGlzLT57VEVYVH1bMF0pOworCisJbXkgKEBsaW5lLCAkaSwgJG9mcywgJG9fY250LCAkbl9jbnQpOworCSRvZnMgPSAkbzBfb2ZzOworCSRvX2NudCA9ICRuX2NudCA9IDA7CisJZm9yICgkaSA9IDE7ICRpIDwgQHskcHJldi0+e1RFWFR9fTsgJGkrKykgeworCQlteSAkbGluZSA9ICRwcmV2LT57VEVYVH1bJGldOworCQlpZiAoJGxpbmUgPX4gL15cKy8pIHsKKwkJCSRuX2NudCsrOworCQkJcHVzaCBAbGluZSwgJGxpbmU7CisJCQluZXh0OworCQl9CisKKwkJbGFzdCBpZiAoJG8xX29mcyA8PSAkb2ZzKTsKKworCQkkb19jbnQrKzsKKwkJJG9mcysrOworCQlpZiAoJGxpbmUgPX4gL14gLykgeworCQkJJG5fY250Kys7CisJCX0KKwkJcHVzaCBAbGluZSwgJGxpbmU7CisJfQorCisJZm9yICgkaSA9IDE7ICRpIDwgQHskdGhpcy0+e1RFWFR9fTsgJGkrKykgeworCQlteSAkbGluZSA9ICR0aGlzLT57VEVYVH1bJGldOworCQlpZiAoJGxpbmUgPX4gL15cKy8pIHsKKwkJCSRuX2NudCsrOworCQkJcHVzaCBAbGluZSwgJGxpbmU7CisJCQluZXh0OworCQl9CisJCSRvZnMrKzsKKwkJJG9fY250Kys7CisJCWlmICgkbGluZSA9fiAvXiAvKSB7CisJCQkkbl9jbnQrKzsKKwkJfQorCQlwdXNoIEBsaW5lLCAkbGluZTsKKwl9CisJbXkgJGhlYWQgPSAoIkBAIC0kbzBfb2ZzIiAuCisJCSAgICAoKCRvX2NudCAhPSAxKSA/ICIsJG9fY250IiA6ICcnKSAuCisJCSAgICAiICskbjBfb2ZzIiAuCisJCSAgICAoKCRuX2NudCAhPSAxKSA/ICIsJG5fY250IiA6ICcnKSAuCisJCSAgICAiIEBAXG4iKTsKKwlAeyRwcmV2LT57VEVYVH19ID0gKCRoZWFkLCBAbGluZSk7Cit9CisKK3N1YiBjb2FsZXNjZV9vdmVybGFwcGluZ19odW5rcyB7CisJbXkgKEBpbikgPSBAXzsKKwlteSBAb3V0ID0gKCk7CisKKwlteSAoJGxhc3Rfb19jdHgsICRsYXN0X3dhc19kaXJ0eSk7CisKKwlmb3IgKGdyZXAgeyAkXy0+e1VTRX0gfSBAaW4pIHsKKwkJaWYgKCRfLT57VFlQRX0gbmUgJ2h1bmsnKSB7CisJCQlwdXNoIEBvdXQsICRfOworCQkJbmV4dDsKKwkJfQorCQlteSAkdGV4dCA9ICRfLT57VEVYVH07CisJCW15ICgkb19vZnMpID0gcGFyc2VfaHVua19oZWFkZXIoJHRleHQtPlswXSk7CisJCWlmIChkZWZpbmVkICRsYXN0X29fY3R4ICYmCisJCSAgICAkb19vZnMgPD0gJGxhc3Rfb19jdHggJiYKKwkJICAgICEkXy0+e0RJUlRZfSAmJgorCQkgICAgISRsYXN0X3dhc19kaXJ0eSkgeworCQkJbWVyZ2VfaHVuaygkb3V0Wy0xXSwgJF8pOworCQl9CisJCWVsc2UgeworCQkJcHVzaCBAb3V0LCAkXzsKKwkJfQorCQkkbGFzdF9vX2N0eCA9IGZpbmRfbGFzdF9vX2N0eCgkb3V0Wy0xXSk7CisJCSRsYXN0X3dhc19kaXJ0eSA9ICRfLT57RElSVFl9OworCX0KKwlyZXR1cm4gQG91dDsKK30KKworc3ViIHJlYXNzZW1ibGVfcGF0Y2ggeworCW15ICRoZWFkID0gc2hpZnQ7CisJbXkgQHBhdGNoOworCisJIyBJbmNsdWRlIGV2ZXJ5dGhpbmcgaW4gdGhlIGhlYWRlciBleGNlcHQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlmZi4KKwlwdXNoIEBwYXRjaCwgKGdyZXAgeyAhL15bLStdezN9LyB9IEAkaGVhZCk7CisKKwkjIFRoZW4gaW5jbHVkZSBhbnkgaGVhZGVycyBmcm9tIHRoZSBodW5rIGxpbmVzLCB3aGljaCBtdXN0CisJIyBjb21lIGJlZm9yZSBhbnkgYWN0dWFsIGh1bmsuCisJd2hpbGUgKEBfICYmICRfWzBdICF+IC9eQC8pIHsKKwkJcHVzaCBAcGF0Y2gsIHNoaWZ0OworCX0KKworCSMgVGhlbiBiZWdpbiB0aGUgZGlmZi4KKwlwdXNoIEBwYXRjaCwgZ3JlcCB7IC9eWy0rXXszfS8gfSBAJGhlYWQ7CisKKwkjIEFuZCB0aGVuIHRoZSBhY3R1YWwgaHVua3MuCisJcHVzaCBAcGF0Y2gsIEBfOworCisJcmV0dXJuIEBwYXRjaDsKK30KKworc3ViIGNvbG9yX2RpZmYgeworCXJldHVybiBtYXAgeworCQljb2xvcmVkKCgvXkAvICA/ICRmcmFnaW5mb19jb2xvciA6CisJCQkgL15cKy8gPyAkZGlmZl9uZXdfY29sb3IgOgorCQkJIC9eLS8gID8gJGRpZmZfb2xkX2NvbG9yIDoKKwkJCSAkZGlmZl9wbGFpbl9jb2xvciksCisJCQkkXyk7CisJfSBAXzsKK30KKworc3ViIGVkaXRfaHVua19tYW51YWxseSB7CisJbXkgKCRvbGR0ZXh0KSA9IEBfOworCisJbXkgJGh1bmtmaWxlID0gJHJlcG8tPnJlcG9fcGF0aCAuICIvYWRkcC1odW5rLWVkaXQuZGlmZiI7CisJbXkgJGZoOworCW9wZW4gJGZoLCAnPicsICRodW5rZmlsZQorCQlvciBkaWUgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciB3cml0aW5nOiAiIC4gJCE7CisJcHJpbnQgJGZoICIjIE1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlXG4iOworCXByaW50ICRmaCBAJG9sZHRleHQ7CisJbXkgJHBhcnRpY2lwbGUgPSAkcGF0Y2hfbW9kZV9mbGF2b3Vye1BBUlRJQ0lQTEV9OworCW15ICRpc19yZXZlcnNlID0gJHBhdGNoX21vZGVfZmxhdm91cntJU19SRVZFUlNFfTsKKwlteSAoJHJlbW92ZV9wbHVzLCAkcmVtb3ZlX21pbnVzKSA9ICRpc19yZXZlcnNlID8gKCctJywgJysnKSA6ICgnKycsICctJyk7CisJcHJpbnQgJGZoIDw8RU9GOworIyAtLS0KKyMgVG8gcmVtb3ZlICckcmVtb3ZlX21pbnVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuCisjIFRvIHJlbW92ZSAnJHJlbW92ZV9wbHVzJyBsaW5lcywgZGVsZXRlIHRoZW0uCisjIExpbmVzIHN0YXJ0aW5nIHdpdGggIyB3aWxsIGJlIHJlbW92ZWQuCisjCisjIElmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCisjIG1hcmtlZCBmb3IgJHBhcnRpY2lwbGUuIElmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuCisjIGFuIG9wcG9ydHVuaXR5IHRvIGVkaXQgYWdhaW4uIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwKKyMgdGhlbiB0aGUgZWRpdCBpcyBhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC4KK0VPRgorCWNsb3NlICRmaDsKKworCWNob21wKG15ICRlZGl0b3IgPSBydW5fY21kX3BpcGUocXcoZ2l0IHZhciBHSVRfRURJVE9SKSkpOworCXN5c3RlbSgnc2gnLCAnLWMnLCAkZWRpdG9yLicgIiRAIicsICRlZGl0b3IsICRodW5rZmlsZSk7CisKKwlpZiAoJD8gIT0gMCkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCisJb3BlbiAkZmgsICc8JywgJGh1bmtmaWxlCisJCW9yIGRpZSAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICIgLiAkITsKKwlteSBAbmV3dGV4dCA9IGdyZXAgeyAhL14jLyB9IDwkZmg+OworCWNsb3NlICRmaDsKKwl1bmxpbmsgJGh1bmtmaWxlOworCisJIyBBYm9ydCBpZiBub3RoaW5nIHJlbWFpbnMKKwlpZiAoIWdyZXAgeyAvXFMvIH0gQG5ld3RleHQpIHsKKwkJcmV0dXJuIHVuZGVmOworCX0KKworCSMgUmVpbnNlcnQgdGhlIGZpcnN0IGh1bmsgaGVhZGVyIGlmIHRoZSB1c2VyIGFjY2lkZW50YWxseSBkZWxldGVkIGl0CisJaWYgKCRuZXd0ZXh0WzBdICF+IC9eQC8pIHsKKwkJdW5zaGlmdCBAbmV3dGV4dCwgJG9sZHRleHQtPlswXTsKKwl9CisJcmV0dXJuIFxAbmV3dGV4dDsKK30KKworc3ViIGRpZmZfYXBwbGllcyB7CisJcmV0dXJuIHJ1bl9naXRfYXBwbHkoJHBhdGNoX21vZGVfZmxhdm91cntBUFBMWV9DSEVDS30gLiAnIC0tY2hlY2snLAorCQkJICAgICBtYXAgeyBAeyRfLT57VEVYVH19IH0gQF8pOworfQorCitzdWIgX3Jlc3RvcmVfdGVybWluYWxfYW5kX2RpZSB7CisJUmVhZE1vZGUgJ3Jlc3RvcmUnOworCXByaW50ICJcbiI7CisJZXhpdCAxOworfQorCitzdWIgcHJvbXB0X3NpbmdsZV9jaGFyYWN0ZXIgeworCWlmICgkdXNlX3JlYWRrZXkpIHsKKwkJbG9jYWwgJFNJR3tURVJNfSA9IFwmX3Jlc3RvcmVfdGVybWluYWxfYW5kX2RpZTsKKwkJbG9jYWwgJFNJR3tJTlR9ID0gXCZfcmVzdG9yZV90ZXJtaW5hbF9hbmRfZGllOworCQlSZWFkTW9kZSAnY2JyZWFrJzsKKwkJbXkgJGtleSA9IFJlYWRLZXkgMDsKKwkJUmVhZE1vZGUgJ3Jlc3RvcmUnOworCQlpZiAoJHVzZV90ZXJtY2FwIGFuZCAka2V5IGVxICJcZSIpIHsKKwkJCXdoaWxlICghZGVmaW5lZCAkdGVybV9lc2NhcGVzeyRrZXl9KSB7CisJCQkJbXkgJG5leHQgPSBSZWFkS2V5IDAuNTsKKwkJCQlsYXN0IGlmICghZGVmaW5lZCAkbmV4dCk7CisJCQkJJGtleSAuPSAkbmV4dDsKKwkJCX0KKwkJCSRrZXkgPX4gcy9cZS9eWy87CisJCX0KKwkJcHJpbnQgIiRrZXkiIGlmIGRlZmluZWQgJGtleTsKKwkJcHJpbnQgIlxuIjsKKwkJcmV0dXJuICRrZXk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDxTVERJTj47CisJfQorfQorCitzdWIgcHJvbXB0X3llc25vIHsKKwlteSAoJHByb21wdCkgPSBAXzsKKwl3aGlsZSAoMSkgeworCQlwcmludCBjb2xvcmVkICRwcm9tcHRfY29sb3IsICRwcm9tcHQ7CisJCW15ICRsaW5lID0gcHJvbXB0X3NpbmdsZV9jaGFyYWN0ZXI7CisJCXJldHVybiAwIGlmICRsaW5lID1+IC9ebi9pOworCQlyZXR1cm4gMSBpZiAkbGluZSA9fiAvXnkvaTsKKwl9Cit9CisKK3N1YiBlZGl0X2h1bmtfbG9vcCB7CisJbXkgKCRoZWFkLCAkaHVuaywgJGl4KSA9IEBfOworCW15ICR0ZXh0ID0gJGh1bmstPlskaXhdLT57VEVYVH07CisKKwl3aGlsZSAoMSkgeworCQkkdGV4dCA9IGVkaXRfaHVua19tYW51YWxseSgkdGV4dCk7CisJCWlmICghZGVmaW5lZCAkdGV4dCkgeworCQkJcmV0dXJuIHVuZGVmOworCQl9CisJCW15ICRuZXdodW5rID0geworCQkJVEVYVCA9PiAkdGV4dCwKKwkJCVRZUEUgPT4gJGh1bmstPlskaXhdLT57VFlQRX0sCisJCQlVU0UgPT4gMSwKKwkJCURJUlRZID0+IDEsCisJCX07CisJCWlmIChkaWZmX2FwcGxpZXMoJGhlYWQsCisJCQkJIEB7JGh1bmt9WzAuLiRpeC0xXSwKKwkJCQkgJG5ld2h1bmssCisJCQkJIEB7JGh1bmt9WyRpeCsxLi4kI3skaHVua31dKSkgeworCQkJJG5ld2h1bmstPntESVNQTEFZfSA9IFtjb2xvcl9kaWZmKEB7JHRleHR9KV07CisJCQlyZXR1cm4gJG5ld2h1bms7CisJCX0KKwkJZWxzZSB7CisJCQlwcm9tcHRfeWVzbm8oCisJCQkJJ1lvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gJworCQkJCS4gJyhzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIFt5L25dPyAnCisJCQkJKSBvciByZXR1cm4gdW5kZWY7CisJCX0KKwl9Cit9CisKK3N1YiBoZWxwX3BhdGNoX2NtZCB7CisJbXkgJHZlcmIgPSBsYyAkcGF0Y2hfbW9kZV9mbGF2b3Vye1ZFUkJ9OworCW15ICR0YXJnZXQgPSAkcGF0Y2hfbW9kZV9mbGF2b3Vye1RBUkdFVH07CisJcHJpbnQgY29sb3JlZCAkaGVscF9jb2xvciwgPDxFT0YgOworeSAtICR2ZXJiIHRoaXMgaHVuayR0YXJnZXQKK24gLSBkbyBub3QgJHZlcmIgdGhpcyBodW5rJHRhcmdldAorcSAtIHF1aXQ7IGRvIG5vdCAkdmVyYiB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKK2EgLSAkdmVyYiB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorZCAtIGRvIG5vdCAkdmVyYiB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKK2cgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvCisvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4CitqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmsKK0ogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rCitrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rCitLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmsKK3MgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rcworZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVuaworPyAtIHByaW50IGhlbHAKK0VPRgorfQorCitzdWIgYXBwbHlfcGF0Y2ggeworCW15ICRjbWQgPSBzaGlmdDsKKwlteSAkcmV0ID0gcnVuX2dpdF9hcHBseSAkY21kLCBAXzsKKwlpZiAoISRyZXQpIHsKKwkJcHJpbnQgU1RERVJSIEBfOworCX0KKwlyZXR1cm4gJHJldDsKK30KKworc3ViIGFwcGx5X3BhdGNoX2Zvcl9jaGVja291dF9jb21taXQgeworCW15ICRyZXZlcnNlID0gc2hpZnQ7CisJbXkgJGFwcGxpZXNfaW5kZXggPSBydW5fZ2l0X2FwcGx5ICdhcHBseSAnLiRyZXZlcnNlLicgLS1jYWNoZWQgLS1jaGVjaycsIEBfOworCW15ICRhcHBsaWVzX3dvcmt0cmVlID0gcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZS4nIC0tY2hlY2snLCBAXzsKKworCWlmICgkYXBwbGllc193b3JrdHJlZSAmJiAkYXBwbGllc19pbmRleCkgeworCQlydW5fZ2l0X2FwcGx5ICdhcHBseSAnLiRyZXZlcnNlLicgLS1jYWNoZWQnLCBAXzsKKwkJcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZSwgQF87CisJCXJldHVybiAxOworCX0gZWxzaWYgKCEkYXBwbGllc19pbmRleCkgeworCQlwcmludCBjb2xvcmVkICRlcnJvcl9jb2xvciwgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIjsKKwkJaWYgKHByb21wdF95ZXNubyAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiKSB7CisJCQlyZXR1cm4gcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZSwgQF87CisJCX0gZWxzZSB7CisJCQlwcmludCBjb2xvcmVkICRlcnJvcl9jb2xvciwgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlwcmludCBTVERFUlIgQF87CisJCXJldHVybiAwOworCX0KK30KKworc3ViIHBhdGNoX3VwZGF0ZV9jbWQgeworCW15IEBhbGxfbW9kcyA9IGxpc3RfbW9kaWZpZWQoJHBhdGNoX21vZGVfZmxhdm91cntGSUxURVJ9KTsKKwllcnJvcl9tc2cgImlnbm9yaW5nIHVubWVyZ2VkOiAkXy0+e1ZBTFVFfVxuIgorCQlmb3IgZ3JlcCB7ICRfLT57VU5NRVJHRUR9IH0gQGFsbF9tb2RzOworCUBhbGxfbW9kcyA9IGdyZXAgeyAhJF8tPntVTk1FUkdFRH0gfSBAYWxsX21vZHM7CisKKwlteSBAbW9kcyA9IGdyZXAgeyAhKCRfLT57QklOQVJZfSkgfSBAYWxsX21vZHM7CisJbXkgQHRoZW07CisKKwlpZiAoIUBtb2RzKSB7CisJCWlmIChAYWxsX21vZHMpIHsKKwkJCXByaW50IFNUREVSUiAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCBTVERFUlIgIk5vIGNoYW5nZXMuXG4iOworCQl9CisJCXJldHVybiAwOworCX0KKwlpZiAoJHBhdGNoX21vZGUpIHsKKwkJQHRoZW0gPSBAbW9kczsKKwl9CisJZWxzZSB7CisJCUB0aGVtID0gbGlzdF9hbmRfY2hvb3NlKHsgUFJPTVBUID0+ICdQYXRjaCB1cGRhdGUnLAorCQkJCQkgIEhFQURFUiA9PiAkc3RhdHVzX2hlYWQsIH0sCisJCQkJCUBtb2RzKTsKKwl9CisJZm9yIChAdGhlbSkgeworCQlyZXR1cm4gMCBpZiBwYXRjaF91cGRhdGVfZmlsZSgkXy0+e1ZBTFVFfSk7CisJfQorfQorCisjIEdlbmVyYXRlIGEgb25lIGxpbmUgc3VtbWFyeSBvZiBhIGh1bmsuCitzdWIgc3VtbWFyaXplX2h1bmsgeworCW15ICRyaHVuayA9IHNoaWZ0OworCW15ICRzdW1tYXJ5ID0gJHJodW5rLT57VEVYVH1bMF07CisKKwkjIEtlZXAgdGhlIGxpbmUgbnVtYmVycywgZGlzY2FyZCBleHRyYSBjb250ZXh0LgorCSRzdW1tYXJ5ID1+IHMvQEAoLio/KUBALiovJDEgL3M7CisJJHN1bW1hcnkgLj0gIiAiIHggKDIwIC0gbGVuZ3RoICRzdW1tYXJ5KTsKKworCSMgQWRkIHNvbWUgdXNlciBjb250ZXh0LgorCWZvciBteSAkbGluZSAoQHskcmh1bmstPntURVhUfX0pIHsKKwkJaWYgKCRsaW5lID1+IG0vXlsrLV0uKlx3LykgeworCQkJJHN1bW1hcnkgLj0gJGxpbmU7CisJCQlsYXN0OworCQl9CisJfQorCisJY2hvbXAgJHN1bW1hcnk7CisJcmV0dXJuIHN1YnN0cigkc3VtbWFyeSwgMCwgODApIC4gIlxuIjsKK30KKworCisjIFByaW50IGEgb25lLWxpbmUgc3VtbWFyeSBvZiBlYWNoIGh1bmsgaW4gdGhlIGFycmF5IHJlZiBpbgorIyB0aGUgZmlyc3QgYXJndW1lbnQsIHN0YXJ0aW5nIHdpaCB0aGUgaW5kZXggaW4gdGhlIDJuZC4KK3N1YiBkaXNwbGF5X2h1bmtzIHsKKwlteSAoJGh1bmtzLCAkaSkgPSBAXzsKKwlteSAkY3RyID0gMDsKKwkkaSB8fD0gMDsKKwlmb3IgKDsgJGkgPCBAJGh1bmtzICYmICRjdHIgPCAyMDsgJGkrKywgJGN0cisrKSB7CisJCW15ICRzdGF0dXMgPSAiICI7CisJCWlmIChkZWZpbmVkICRodW5rcy0+WyRpXXtVU0V9KSB7CisJCQkkc3RhdHVzID0gJGh1bmtzLT5bJGlde1VTRX0gPyAiKyIgOiAiLSI7CisJCX0KKwkJcHJpbnRmICIlcyUyZDogJXMiLAorCQkJJHN0YXR1cywKKwkJCSRpICsgMSwKKwkJCXN1bW1hcml6ZV9odW5rKCRodW5rcy0+WyRpXSk7CisJfQorCXJldHVybiAkaTsKK30KKworc3ViIHBhdGNoX3VwZGF0ZV9maWxlIHsKKwlteSAkcXVpdCA9IDA7CisJbXkgKCRpeCwgJG51bSk7CisJbXkgJHBhdGggPSBzaGlmdDsKKwlteSAoJGhlYWQsIEBodW5rKSA9IHBhcnNlX2RpZmYoJHBhdGgpOworCSgkaGVhZCwgbXkgJG1vZGUsIG15ICRkZWxldGlvbikgPSBwYXJzZV9kaWZmX2hlYWRlcigkaGVhZCk7CisJZm9yIChAeyRoZWFkLT57RElTUExBWX19KSB7CisJCXByaW50OworCX0KKworCWlmIChAeyRtb2RlLT57VEVYVH19KSB7CisJCXVuc2hpZnQgQGh1bmssICRtb2RlOworCX0KKwlpZiAoQHskZGVsZXRpb24tPntURVhUfX0pIHsKKwkJZm9yZWFjaCBteSAkaHVuayAoQGh1bmspIHsKKwkJCXB1c2ggQHskZGVsZXRpb24tPntURVhUfX0sIEB7JGh1bmstPntURVhUfX07CisJCQlwdXNoIEB7JGRlbGV0aW9uLT57RElTUExBWX19LCBAeyRodW5rLT57RElTUExBWX19OworCQl9CisJCUBodW5rID0gKCRkZWxldGlvbik7CisJfQorCisJJG51bSA9IHNjYWxhciBAaHVuazsKKwkkaXggPSAwOworCisJd2hpbGUgKDEpIHsKKwkJbXkgKCRwcmV2LCAkbmV4dCwgJG90aGVyLCAkdW5kZWNpZGVkLCAkaSk7CisJCSRvdGhlciA9ICcnOworCisJCWlmICgkbnVtIDw9ICRpeCkgeworCQkJJGl4ID0gMDsKKwkJfQorCQlmb3IgKCRpID0gMDsgJGkgPCAkaXg7ICRpKyspIHsKKwkJCWlmICghZGVmaW5lZCAkaHVua1skaV17VVNFfSkgeworCQkJCSRwcmV2ID0gMTsKKwkJCQkkb3RoZXIgLj0gJyxrJzsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJCWlmICgkaXgpIHsKKwkJCSRvdGhlciAuPSAnLEsnOworCQl9CisJCWZvciAoJGkgPSAkaXggKyAxOyAkaSA8ICRudW07ICRpKyspIHsKKwkJCWlmICghZGVmaW5lZCAkaHVua1skaV17VVNFfSkgeworCQkJCSRuZXh0ID0gMTsKKwkJCQkkb3RoZXIgLj0gJyxqJzsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJCWlmICgkaXggPCAkbnVtIC0gMSkgeworCQkJJG90aGVyIC49ICcsSic7CisJCX0KKwkJaWYgKCRudW0gPiAxKSB7CisJCQkkb3RoZXIgLj0gJyxnJzsKKwkJfQorCQlmb3IgKCRpID0gMDsgJGkgPCAkbnVtOyAkaSsrKSB7CisJCQlpZiAoIWRlZmluZWQgJGh1bmtbJGlde1VTRX0pIHsKKwkJCQkkdW5kZWNpZGVkID0gMTsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJCWxhc3QgaWYgKCEkdW5kZWNpZGVkKTsKKworCQlpZiAoJGh1bmtbJGl4XXtUWVBFfSBlcSAnaHVuaycgJiYKKwkJICAgIGh1bmtfc3BsaXR0YWJsZSgkaHVua1skaXhde1RFWFR9KSkgeworCQkJJG90aGVyIC49ICcscyc7CisJCX0KKwkJaWYgKCRodW5rWyRpeF17VFlQRX0gZXEgJ2h1bmsnKSB7CisJCQkkb3RoZXIgLj0gJyxlJzsKKwkJfQorCQlmb3IgKEB7JGh1bmtbJGl4XXtESVNQTEFZfX0pIHsKKwkJCXByaW50OworCQl9CisJCXByaW50IGNvbG9yZWQgJHByb21wdF9jb2xvciwgJHBhdGNoX21vZGVfZmxhdm91cntWRVJCfSwKKwkJICAoJGh1bmtbJGl4XXtUWVBFfSBlcSAnbW9kZScgPyAnIG1vZGUgY2hhbmdlJyA6CisJCSAgICRodW5rWyRpeF17VFlQRX0gZXEgJ2RlbGV0aW9uJyA/ICcgZGVsZXRpb24nIDoKKwkJICAgJyB0aGlzIGh1bmsnKSwKKwkJICAkcGF0Y2hfbW9kZV9mbGF2b3Vye1RBUkdFVH0sCisJCSAgIiBbeSxuLHEsYSxkLC8kb3RoZXIsP10/ICI7CisJCW15ICRsaW5lID0gcHJvbXB0X3NpbmdsZV9jaGFyYWN0ZXI7CisJCWlmICgkbGluZSkgeworCQkJaWYgKCRsaW5lID1+IC9eeS9pKSB7CisJCQkJJGh1bmtbJGl4XXtVU0V9ID0gMTsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXm4vaSkgeworCQkJCSRodW5rWyRpeF17VVNFfSA9IDA7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15hL2kpIHsKKwkJCQl3aGlsZSAoJGl4IDwgJG51bSkgeworCQkJCQlpZiAoIWRlZmluZWQgJGh1bmtbJGl4XXtVU0V9KSB7CisJCQkJCQkkaHVua1skaXhde1VTRX0gPSAxOworCQkJCQl9CisJCQkJCSRpeCsrOworCQkJCX0KKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRvdGhlciA9fiAvZy8gJiYgJGxpbmUgPX4gL15nKC4qKS8pIHsKKwkJCQlteSAkcmVzcG9uc2UgPSAkMTsKKwkJCQlteSAkbm8gPSAkaXggPiAxMCA/ICRpeCAtIDEwIDogMDsKKwkJCQl3aGlsZSAoJHJlc3BvbnNlIGVxICcnKSB7CisJCQkJCW15ICRleHRyYSA9ICIiOworCQkJCQkkbm8gPSBkaXNwbGF5X2h1bmtzKFxAaHVuaywgJG5vKTsKKwkJCQkJaWYgKCRubyA8ICRudW0pIHsKKwkJCQkJCSRleHRyYSA9ICIgKDxyZXQ+IHRvIHNlZSBtb3JlKSI7CisJCQkJCX0KKwkJCQkJcHJpbnQgImdvIHRvIHdoaWNoIGh1bmskZXh0cmE/ICI7CisJCQkJCSRyZXNwb25zZSA9IDxTVERJTj47CisJCQkJCWlmICghZGVmaW5lZCAkcmVzcG9uc2UpIHsKKwkJCQkJCSRyZXNwb25zZSA9ICcnOworCQkJCQl9CisJCQkJCWNob21wICRyZXNwb25zZTsKKwkJCQl9CisJCQkJaWYgKCRyZXNwb25zZSAhfiAvXlxzKlxkK1xzKiQvKSB7CisJCQkJCWVycm9yX21zZyAiSW52YWxpZCBudW1iZXI6ICckcmVzcG9uc2UnXG4iOworCQkJCX0gZWxzaWYgKDAgPCAkcmVzcG9uc2UgJiYgJHJlc3BvbnNlIDw9ICRudW0pIHsKKwkJCQkJJGl4ID0gJHJlc3BvbnNlIC0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQllcnJvcl9tc2cgIlNvcnJ5LCBvbmx5ICRudW0gaHVua3MgYXZhaWxhYmxlLlxuIjsKKwkJCQl9CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXmQvaSkgeworCQkJCXdoaWxlICgkaXggPCAkbnVtKSB7CisJCQkJCWlmICghZGVmaW5lZCAkaHVua1skaXhde1VTRX0pIHsKKwkJCQkJCSRodW5rWyRpeF17VVNFfSA9IDA7CisJCQkJCX0KKwkJCQkJJGl4Kys7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15xL2kpIHsKKwkJCQlmb3IgKCRpID0gMDsgJGkgPCAkbnVtOyAkaSsrKSB7CisJCQkJCWlmICghZGVmaW5lZCAkaHVua1skaV17VVNFfSkgeworCQkJCQkJJGh1bmtbJGlde1VTRX0gPSAwOworCQkJCQl9CisJCQkJfQorCQkJCSRxdWl0ID0gMTsKKwkJCQlsYXN0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IG18Xi8oLiopfCkgeworCQkJCW15ICRyZWdleCA9ICQxOworCQkJCWlmICgkMSBlcSAiIikgeworCQkJCQlwcmludCBjb2xvcmVkICRwcm9tcHRfY29sb3IsICJzZWFyY2ggZm9yIHJlZ2V4PyAiOworCQkJCQkkcmVnZXggPSA8U1RESU4+OworCQkJCQlpZiAoZGVmaW5lZCAkcmVnZXgpIHsKKwkJCQkJCWNob21wICRyZWdleDsKKwkJCQkJfQorCQkJCX0KKwkJCQlteSAkc2VhcmNoX3N0cmluZzsKKwkJCQlldmFsIHsKKwkJCQkJJHNlYXJjaF9zdHJpbmcgPSBxcnskcmVnZXh9bTsKKwkJCQl9OworCQkJCWlmICgkQCkgeworCQkJCQlteSAoJGVyciwkZXhwKSA9ICgkQCwgJDEpOworCQkJCQkkZXJyID1+IHMvIGF0IC4qZ2l0LWFkZC0taW50ZXJhY3RpdmUgbGluZSBcZCssIDxTVERJTj4gbGluZSBcZCsuKiQvLzsKKwkJCQkJZXJyb3JfbXNnICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAkZXhwOiAkZXJyXG4iOworCQkJCQluZXh0OworCQkJCX0KKwkJCQlteSAkaXkgPSAkaXg7CisJCQkJd2hpbGUgKDEpIHsKKwkJCQkJbXkgJHRleHQgPSBqb2luICgiIiwgQHskaHVua1skaXlde1RFWFR9fSk7CisJCQkJCWxhc3QgaWYgKCR0ZXh0ID1+ICRzZWFyY2hfc3RyaW5nKTsKKwkJCQkJJGl5Kys7CisJCQkJCSRpeSA9IDAgaWYgKCRpeSA+PSAkbnVtKTsKKwkJCQkJaWYgKCRpeCA9PSAkaXkpIHsKKwkJCQkJCWVycm9yX21zZyAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iOworCQkJCQkJbGFzdDsKKwkJCQkJfQorCQkJCX0KKwkJCQkkaXggPSAkaXk7CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXksvKSB7CisJCQkJaWYgKCRvdGhlciA9fiAvSy8pIHsKKwkJCQkJJGl4LS07CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllcnJvcl9tc2cgIk5vIHByZXZpb3VzIGh1bmtcbiI7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15KLykgeworCQkJCWlmICgkb3RoZXIgPX4gL0ovKSB7CisJCQkJCSRpeCsrOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZXJyb3JfbXNnICJObyBuZXh0IGh1bmtcbiI7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15rLykgeworCQkJCWlmICgkb3RoZXIgPX4gL2svKSB7CisJCQkJCXdoaWxlICgxKSB7CisJCQkJCQkkaXgtLTsKKwkJCQkJCWxhc3QgaWYgKCEkaXggfHwKKwkJCQkJCQkgIWRlZmluZWQgJGh1bmtbJGl4XXtVU0V9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZXJyb3JfbXNnICJObyBwcmV2aW91cyBodW5rXG4iOworCQkJCX0KKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eai8pIHsKKwkJCQlpZiAoJG90aGVyICF+IC9qLykgeworCQkJCQllcnJvcl9tc2cgIk5vIG5leHQgaHVua1xuIjsKKwkJCQkJbmV4dDsKKwkJCQl9CisJCQl9CisJCQllbHNpZiAoJG90aGVyID1+IC9zLyAmJiAkbGluZSA9fiAvXnMvKSB7CisJCQkJbXkgQHNwbGl0ID0gc3BsaXRfaHVuaygkaHVua1skaXhde1RFWFR9LCAkaHVua1skaXhde0RJU1BMQVl9KTsKKwkJCQlpZiAoMSA8IEBzcGxpdCkgeworCQkJCQlwcmludCBjb2xvcmVkICRoZWFkZXJfY29sb3IsICJTcGxpdCBpbnRvICIsCisJCQkJCXNjYWxhcihAc3BsaXQpLCAiIGh1bmtzLlxuIjsKKwkJCQl9CisJCQkJc3BsaWNlIChAaHVuaywgJGl4LCAxLCBAc3BsaXQpOworCQkJCSRudW0gPSBzY2FsYXIgQGh1bms7CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkb3RoZXIgPX4gL2UvICYmICRsaW5lID1+IC9eZS8pIHsKKwkJCQlteSAkbmV3aHVuayA9IGVkaXRfaHVua19sb29wKCRoZWFkLCBcQGh1bmssICRpeCk7CisJCQkJaWYgKGRlZmluZWQgJG5ld2h1bmspIHsKKwkJCQkJc3BsaWNlIEBodW5rLCAkaXgsIDEsICRuZXdodW5rOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCWhlbHBfcGF0Y2hfY21kKCRvdGhlcik7CisJCQkJbmV4dDsKKwkJCX0KKwkJCSMgc29mdCBpbmNyZW1lbnQKKwkJCXdoaWxlICgxKSB7CisJCQkJJGl4Kys7CisJCQkJbGFzdCBpZiAoJGl4ID49ICRudW0gfHwKKwkJCQkJICFkZWZpbmVkICRodW5rWyRpeF17VVNFfSk7CisJCQl9CisJCX0KKwl9CisKKwlAaHVuayA9IGNvYWxlc2NlX292ZXJsYXBwaW5nX2h1bmtzKEBodW5rKTsKKworCW15ICRuX2xvZnMgPSAwOworCW15IEByZXN1bHQgPSAoKTsKKwlmb3IgKEBodW5rKSB7CisJCWlmICgkXy0+e1VTRX0pIHsKKwkJCXB1c2ggQHJlc3VsdCwgQHskXy0+e1RFWFR9fTsKKwkJfQorCX0KKworCWlmIChAcmVzdWx0KSB7CisJCW15IEBwYXRjaCA9IHJlYXNzZW1ibGVfcGF0Y2goJGhlYWQtPntURVhUfSwgQHJlc3VsdCk7CisJCW15ICRhcHBseV9yb3V0aW5lID0gJHBhdGNoX21vZGVfZmxhdm91cntBUFBMWX07CisJCSYkYXBwbHlfcm91dGluZShAcGF0Y2gpOworCQlyZWZyZXNoKCk7CisJfQorCisJcHJpbnQgIlxuIjsKKwlyZXR1cm4gJHF1aXQ7Cit9CisKK3N1YiBkaWZmX2NtZCB7CisJbXkgQG1vZHMgPSBsaXN0X21vZGlmaWVkKCdpbmRleC1vbmx5Jyk7CisJQG1vZHMgPSBncmVwIHsgISgkXy0+e0JJTkFSWX0pIH0gQG1vZHM7CisJcmV0dXJuIGlmICghQG1vZHMpOworCW15IChAdGhlbSkgPSBsaXN0X2FuZF9jaG9vc2UoeyBQUk9NUFQgPT4gJ1JldmlldyBkaWZmJywKKwkJCQkgICAgIElNTUVESUFURSA9PiAxLAorCQkJCSAgICAgSEVBREVSID0+ICRzdGF0dXNfaGVhZCwgfSwKKwkJCQkgICBAbW9kcyk7CisJcmV0dXJuIGlmICghQHRoZW0pOworCW15ICRyZWZlcmVuY2UgPSBpc19pbml0aWFsX2NvbW1pdCgpID8gZ2V0X2VtcHR5X3RyZWUoKSA6ICdIRUFEJzsKKwlzeXN0ZW0ocXcoZ2l0IGRpZmYgLXAgLS1jYWNoZWQpLCAkcmVmZXJlbmNlLCAnLS0nLAorCQltYXAgeyAkXy0+e1ZBTFVFfSB9IEB0aGVtKTsKK30KKworc3ViIHF1aXRfY21kIHsKKwlwcmludCAiQnllLlxuIjsKKwlleGl0KDApOworfQorCitzdWIgaGVscF9jbWQgeworCXByaW50IGNvbG9yZWQgJGhlbHBfY29sb3IsIDw8XEVPRiA7CitzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXMKK3VwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMKK3JldmVydCAgICAgICAgLSByZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvbgorcGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseQorZGlmZgkgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4CithZGQgdW50cmFja2VkIC0gYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzCitFT0YKK30KKworc3ViIHByb2Nlc3NfYXJncyB7CisJcmV0dXJuIHVubGVzcyBAQVJHVjsKKwlteSAkYXJnID0gc2hpZnQgQEFSR1Y7CisJaWYgKCRhcmcgPX4gLy0tcGF0Y2goPzo9KC4qKSk/LykgeworCQlpZiAoZGVmaW5lZCAkMSkgeworCQkJaWYgKCQxIGVxICdyZXNldCcpIHsKKwkJCQkkcGF0Y2hfbW9kZSA9ICdyZXNldF9oZWFkJzsKKwkJCQkkcGF0Y2hfbW9kZV9yZXZpc2lvbiA9ICdIRUFEJzsKKwkJCQkkYXJnID0gc2hpZnQgQEFSR1Ygb3IgZGllICJtaXNzaW5nIC0tIjsKKwkJCQlpZiAoJGFyZyBuZSAnLS0nKSB7CisJCQkJCSRwYXRjaF9tb2RlX3JldmlzaW9uID0gJGFyZzsKKwkJCQkJJHBhdGNoX21vZGUgPSAoJGFyZyBlcSAnSEVBRCcgPworCQkJCQkJICAgICAgICdyZXNldF9oZWFkJyA6ICdyZXNldF9ub3RoZWFkJyk7CisJCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgIm1pc3NpbmcgLS0iOworCQkJCX0KKwkJCX0gZWxzaWYgKCQxIGVxICdjaGVja291dCcpIHsKKwkJCQkkYXJnID0gc2hpZnQgQEFSR1Ygb3IgZGllICJtaXNzaW5nIC0tIjsKKwkJCQlpZiAoJGFyZyBlcSAnLS0nKSB7CisJCQkJCSRwYXRjaF9tb2RlID0gJ2NoZWNrb3V0X2luZGV4JzsKKwkJCQl9IGVsc2UgeworCQkJCQkkcGF0Y2hfbW9kZV9yZXZpc2lvbiA9ICRhcmc7CisJCQkJCSRwYXRjaF9tb2RlID0gKCRhcmcgZXEgJ0hFQUQnID8KKwkJCQkJCSAgICAgICAnY2hlY2tvdXRfaGVhZCcgOiAnY2hlY2tvdXRfbm90aGVhZCcpOworCQkJCQkkYXJnID0gc2hpZnQgQEFSR1Ygb3IgZGllICJtaXNzaW5nIC0tIjsKKwkJCQl9CisJCQl9IGVsc2lmICgkMSBlcSAnc3RhZ2UnIG9yICQxIGVxICdzdGFzaCcpIHsKKwkJCQkkcGF0Y2hfbW9kZSA9ICQxOworCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgIm1pc3NpbmcgLS0iOworCQkJfSBlbHNlIHsKKwkJCQlkaWUgInVua25vd24gLS1wYXRjaCBtb2RlOiAkMSI7CisJCQl9CisJCX0gZWxzZSB7CisJCQkkcGF0Y2hfbW9kZSA9ICdzdGFnZSc7CisJCQkkYXJnID0gc2hpZnQgQEFSR1Ygb3IgZGllICJtaXNzaW5nIC0tIjsKKwkJfQorCQlkaWUgImludmFsaWQgYXJndW1lbnQgJGFyZywgZXhwZWN0aW5nIC0tIgorCQkgICAgdW5sZXNzICRhcmcgZXEgIi0tIjsKKwkJJXBhdGNoX21vZGVfZmxhdm91ciA9ICV7JHBhdGNoX21vZGVzeyRwYXRjaF9tb2RlfX07CisJfQorCWVsc2lmICgkYXJnIG5lICItLSIpIHsKKwkJZGllICJpbnZhbGlkIGFyZ3VtZW50ICRhcmcsIGV4cGVjdGluZyAtLSI7CisJfQorfQorCitzdWIgbWFpbl9sb29wIHsKKwlteSBAY21kID0gKFsgJ3N0YXR1cycsIFwmc3RhdHVzX2NtZCwgXSwKKwkJICAgWyAndXBkYXRlJywgXCZ1cGRhdGVfY21kLCBdLAorCQkgICBbICdyZXZlcnQnLCBcJnJldmVydF9jbWQsIF0sCisJCSAgIFsgJ2FkZCB1bnRyYWNrZWQnLCBcJmFkZF91bnRyYWNrZWRfY21kLCBdLAorCQkgICBbICdwYXRjaCcsIFwmcGF0Y2hfdXBkYXRlX2NtZCwgXSwKKwkJICAgWyAnZGlmZicsIFwmZGlmZl9jbWQsIF0sCisJCSAgIFsgJ3F1aXQnLCBcJnF1aXRfY21kLCBdLAorCQkgICBbICdoZWxwJywgXCZoZWxwX2NtZCwgXSwKKwkpOworCXdoaWxlICgxKSB7CisJCW15ICgkaXQpID0gbGlzdF9hbmRfY2hvb3NlKHsgUFJPTVBUID0+ICdXaGF0IG5vdycsCisJCQkJCSAgICAgU0lOR0xFVE9OID0+IDEsCisJCQkJCSAgICAgTElTVF9GTEFUID0+IDQsCisJCQkJCSAgICAgSEVBREVSID0+ICcqKiogQ29tbWFuZHMgKioqJywKKwkJCQkJICAgICBPTl9FT0YgPT4gXCZxdWl0X2NtZCwKKwkJCQkJICAgICBJTU1FRElBVEUgPT4gMSB9LCBAY21kKTsKKwkJaWYgKCRpdCkgeworCQkJZXZhbCB7CisJCQkJJGl0LT5bMV0tPigpOworCQkJfTsKKwkJCWlmICgkQCkgeworCQkJCXByaW50ICIkQCI7CisJCQl9CisJCX0KKwl9Cit9CisKK3Byb2Nlc3NfYXJncygpOworcmVmcmVzaCgpOworaWYgKCRwYXRjaF9tb2RlKSB7CisJcGF0Y2hfdXBkYXRlX2NtZCgpOworfQorZWxzZSB7CisJc3RhdHVzX2NtZCgpOworCW1haW5fbG9vcCgpOworfQpkaWZmIC0tZ2l0IGEvZ2l0LWFtLnNoIGIvZ2l0LWFtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2ODJkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtYW0uc2gKQEAgLTAsMCArMSw5MDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSnVuaW8gQyBIYW1hbm8KKworU1VCRElSRUNUT1JZX09LPVllcworT1BUSU9OU19LRUVQREFTSERBU0g9CitPUFRJT05TX1NQRUM9IlwKK2dpdCBhbSBbb3B0aW9uc10gWyg8bWJveD58PE1haWxkaXI+KS4uLl0KK2dpdCBhbSBbb3B0aW9uc10gKC0tcmVzb2x2ZWQgfCAtLXNraXAgfCAtLWFib3J0KQorLS0KK2ksaW50ZXJhY3RpdmUgICBydW4gaW50ZXJhY3RpdmVseQorYixiaW5hcnkqICAgICAgIChoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCkKKzMsM3dheSAgICAgICAgICBhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZAorcSxxdWlldCAgICAgICAgIGJlIHF1aWV0CitzLHNpZ25vZmYgICAgICAgYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZQordSx1dGY4ICAgICAgICAgIHJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpCitrLGtlZXAgICAgICAgICAgcGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbwora2VlcC1ub24tcGF0Y2ggIHBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8KK2tlZXAtY3IgICAgICAgICBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgZm9yIG1ib3ggZm9ybWF0Cituby1rZWVwLWNyICAgICAgZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IKK2Msc2Npc3NvcnMgICAgICBzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUKK3doaXRlc3BhY2U9ICAgICBwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5CitpZ25vcmUtc3BhY2UtY2hhbmdlIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKK2lnbm9yZS13aGl0ZXNwYWNlIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKK2RpcmVjdG9yeT0gICAgICBwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5CitleGNsdWRlPSAgICAgICAgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQoraW5jbHVkZT0gICAgICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKK0M9ICAgICAgICAgICAgICBwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5CitwPSAgICAgICAgICAgICAgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQorcGF0Y2gtZm9ybWF0PSAgIGZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbgorcmVqZWN0ICAgICAgICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKK3Jlc29sdmVtc2c9ICAgICBvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMKK2NvbnRpbnVlICAgICAgICBjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0CityLHJlc29sdmVkICAgICAgc3lub255bXMgZm9yIC0tY29udGludWUKK3NraXAgICAgICAgICAgICBza2lwIHRoZSBjdXJyZW50IHBhdGNoCithYm9ydCAgICAgICAgICAgcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLgorY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUgICAgbGllIGFib3V0IGNvbW1pdHRlciBkYXRlCitpZ25vcmUtZGF0ZSAgICAgdXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZQorcmVyZXJlLWF1dG91cGRhdGUgdXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlCityZWJhc2luZyogICAgICAgKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCisKKy4gZ2l0LXNoLXNldHVwCisuIGdpdC1zaC1pMThuCitwcmVmaXg9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgpCitzZXRfcmVmbG9nX2FjdGlvbiBhbQorcmVxdWlyZV93b3JrX3RyZWUKK2NkX3RvX3RvcGxldmVsCisKK2dpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+L2Rldi9udWxsIHx8CisJZGllICIkKGdldHRleHQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IikiCisKK2lmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCA+L2Rldi9udWxsCit0aGVuCisJSEFTX0hFQUQ9eWVzCitlbHNlCisJSEFTX0hFQUQ9CitmaQorCitjbWRsaW5lPSJnaXQgYW0iCitpZiB0ZXN0ICcnICE9ICIkaW50ZXJhY3RpdmUiCit0aGVuCisJY21kbGluZT0iJGNtZGxpbmUgLWkiCitmaQoraWYgdGVzdCAnJyAhPSAiJHRocmVld2F5IgordGhlbgorCWNtZGxpbmU9IiRjbWRsaW5lIC0zIgorZmkKKworc3EgKCkgeworCWdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJEAiCit9CisKK3N0b3BfaGVyZSAoKSB7CisgICAgZWNobyAiJDEiID4iJGRvdGVzdC9uZXh0IgorICAgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCA+IiRkb3Rlc3QvYWJvcnQtc2FmZXR5IgorICAgIGV4aXQgMQorfQorCitzYWZlX3RvX2Fib3J0ICgpIHsKKwlpZiB0ZXN0IC1mICIkZG90ZXN0L2RpcnR5aW5kZXgiCisJdGhlbgorCQlyZXR1cm4gMQorCWZpCisKKwlpZiAhIHRlc3QgLXMgIiRkb3Rlc3QvYWJvcnQtc2FmZXR5IgorCXRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCisJYWJvcnRfc2FmZXR5PSQoY2F0ICIkZG90ZXN0L2Fib3J0LXNhZmV0eSIpCisJaWYgdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSBIRUFEKSIgPSAieiRhYm9ydF9zYWZldHkiCisJdGhlbgorCQlyZXR1cm4gMAorCWZpCisJZ2V0dGV4dGxuICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLgorTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiID4mMgorCXJldHVybiAxCit9CisKK3N0b3BfaGVyZV91c2VyX3Jlc29sdmUgKCkgeworICAgIGlmIFsgLW4gIiRyZXNvbHZlbXNnIiBdOyB0aGVuCisJICAgIHByaW50ZiAnJXNcbicgIiRyZXNvbHZlbXNnIgorCSAgICBzdG9wX2hlcmUgJDEKKyAgICBmaQorICAgIGV2YWxfZ2V0dGV4dGxuICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiXCRjbWRsaW5lIC0tcmVzb2x2ZWRcIi4KK0lmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCJcJGNtZGxpbmUgLS1za2lwXCIgaW5zdGVhZC4KK1RvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiXCRjbWRsaW5lIC0tYWJvcnRcIi4iCisKKyAgICBzdG9wX2hlcmUgJDEKK30KKworZ29fbmV4dCAoKSB7CisJcm0gLWYgIiRkb3Rlc3QvJG1zZ251bSIgIiRkb3Rlc3QvbXNnIiAiJGRvdGVzdC9tc2ctY2xlYW4iIFwKKwkJIiRkb3Rlc3QvcGF0Y2giICIkZG90ZXN0L2luZm8iCisJZWNobyAiJG5leHQiID4iJGRvdGVzdC9uZXh0IgorCXRoaXM9JG5leHQKK30KKworY2Fubm90X2ZhbGxiYWNrICgpIHsKKwllY2hvICIkMSIKKwlnZXR0ZXh0bG4gIkNhbm5vdCBmYWxsIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLiIKKwlleGl0IDEKK30KKworZmFsbF9iYWNrXzN3YXkgKCkgeworICAgIE9fT0JKRUNUPWBjZCAiJEdJVF9PQkpFQ1RfRElSRUNUT1JZIiAmJiBwd2RgCisKKyAgICBybSAtZnIgIiRkb3Rlc3QiL3BhdGNoLW1lcmdlLSoKKyAgICBta2RpciAiJGRvdGVzdC9wYXRjaC1tZXJnZS10bXAtZGlyIgorCisgICAgIyBGaXJzdCBzZWUgaWYgdGhlIHBhdGNoIHJlY29yZHMgdGhlIGluZGV4IGluZm8gdGhhdCB3ZSBjYW4gdXNlLgorICAgIGNtZD0iZ2l0IGFwcGx5ICRnaXRfYXBwbHlfb3B0IC0tYnVpbGQtZmFrZS1hbmNlc3RvciIgJiYKKyAgICBjbWQ9IiRjbWQgIiciJGRvdGVzdC9wYXRjaC1tZXJnZS10bXAtaW5kZXgiICIkZG90ZXN0L3BhdGNoIicgJiYKKyAgICBldmFsICIkY21kIiAmJgorICAgIEdJVF9JTkRFWF9GSUxFPSIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1pbmRleCIgXAorICAgIGdpdCB3cml0ZS10cmVlID4iJGRvdGVzdC9wYXRjaC1tZXJnZS1iYXNlKyIgfHwKKyAgICBjYW5ub3RfZmFsbGJhY2sgIiQoZ2V0dGV4dCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIpIgorCisgICAgc2F5ICIkKGdldHRleHQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iKSIKKworICAgIGNtZD0nR0lUX0lOREVYX0ZJTEU9IiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtdG1wLWluZGV4IicKKworICAgIGlmIHRlc3QgLXogIiRHSVRfUVVJRVQiCisgICAgdGhlbgorCWV2YWwgIiRjbWQgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1kaWZmLWZpbHRlcj1BTSAtLW5hbWUtc3RhdHVzIEhFQUQiCisgICAgZmkKKworICAgIGNtZD0iJGNtZCBnaXQgYXBwbHkgLS1jYWNoZWQgJGdpdF9hcHBseV9vcHQiJyA8IiRkb3Rlc3QvcGF0Y2giJworICAgIGlmIGV2YWwgIiRjbWQiCisgICAgdGhlbgorCW12ICIkZG90ZXN0L3BhdGNoLW1lcmdlLWJhc2UrIiAiJGRvdGVzdC9wYXRjaC1tZXJnZS1iYXNlIgorCW12ICIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1pbmRleCIgIiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtaW5kZXgiCisgICAgZWxzZQorCWNhbm5vdF9mYWxsYmFjayAiJChnZXR0ZXh0ICJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoPworSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIpIgorICAgIGZpCisKKyAgICB0ZXN0IC1mICIkZG90ZXN0L3BhdGNoLW1lcmdlLWluZGV4IiAmJgorICAgIGhpc190cmVlPSQoR0lUX0lOREVYX0ZJTEU9IiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtaW5kZXgiIGdpdCB3cml0ZS10cmVlKSAmJgorICAgIG9yaWdfdHJlZT0kKGNhdCAiJGRvdGVzdC9wYXRjaC1tZXJnZS1iYXNlIikgJiYKKyAgICBybSAtZnIgIiRkb3Rlc3QiL3BhdGNoLW1lcmdlLSogfHwgZXhpdCAxCisKKyAgICBzYXkgIiQoZ2V0dGV4dCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIikiCisKKyAgICAjIFRoaXMgaXMgbm90IHNvIHdyb25nLiAgRGVwZW5kaW5nIG9uIHdoaWNoIGJhc2Ugd2UgcGlja2VkLAorICAgICMgb3JpZ190cmVlIG1heSBiZSB3aWxkbHkgZGlmZmVyZW50IGZyb20gb3VycywgYnV0IGhpc190cmVlCisgICAgIyBoYXMgdGhlIHNhbWUgc2V0IG9mIHdpbGRseSBkaWZmZXJlbnQgY2hhbmdlcyBpbiBwYXJ0cyB0aGUKKyAgICAjIHBhdGNoIGRpZCBub3QgdG91Y2gsIHNvIHJlY3Vyc2l2ZSBlbmRzIHVwIGNhbmNlbGluZyB0aGVtLAorICAgICMgc2F5aW5nIHRoYXQgd2UgcmV2ZXJ0ZWQgYWxsIHRob3NlIGNoYW5nZXMuCisKKyAgICBldmFsIEdJVEhFQURfJGhpc190cmVlPSciJEZJUlNUTElORSInCisgICAgZXhwb3J0IEdJVEhFQURfJGhpc190cmVlCisgICAgaWYgdGVzdCAtbiAiJEdJVF9RVUlFVCIKKyAgICB0aGVuCisJICAgIEdJVF9NRVJHRV9WRVJCT1NJVFk9MCAmJiBleHBvcnQgR0lUX01FUkdFX1ZFUkJPU0lUWQorICAgIGZpCisgICAgZ2l0LW1lcmdlLXJlY3Vyc2l2ZSAkb3JpZ190cmVlIC0tIEhFQUQgJGhpc190cmVlIHx8IHsKKwkgICAgZ2l0IHJlcmVyZSAkYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUKKwkgICAgZGllICIkKGdldHRleHQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iKSIKKyAgICB9CisgICAgdW5zZXQgR0lUSEVBRF8kaGlzX3RyZWUKK30KKworY2xlYW5fYWJvcnQgKCkgeworCXRlc3QgJCMgPSAwIHx8IGVjaG8gPiYyICIkQCIKKwlybSAtZnIgIiRkb3Rlc3QiCisJZXhpdCAxCit9CisKK3BhdGNoX2Zvcm1hdD0KKworY2hlY2tfcGF0Y2hfZm9ybWF0ICgpIHsKKwkjIGVhcmx5IHJldHVybiBpZiBwYXRjaF9mb3JtYXQgd2FzIHNldCBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKwlpZiB0ZXN0IC1uICIkcGF0Y2hfZm9ybWF0IgorCXRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCisJIyB3ZSBkZWZhdWx0IHRvIG1ib3ggZm9ybWF0IGlmIGlucHV0IGlzIGZyb20gc3RkaW4gYW5kIGZvcgorCSMgZGlyZWN0b3JpZXMKKwlpZiB0ZXN0ICQjID0gMCB8fCB0ZXN0ICJ4JDEiID0gIngtIiB8fCB0ZXN0IC1kICIkMSIKKwl0aGVuCisJCXBhdGNoX2Zvcm1hdD1tYm94CisJCXJldHVybiAwCisJZmkKKworCSMgb3RoZXJ3aXNlLCBjaGVjayB0aGUgZmlyc3QgZmV3IG5vbi1ibGFuayBsaW5lcyBvZiB0aGUgZmlyc3QKKwkjIHBhdGNoIHRvIHRyeSB0byBkZXRlY3QgaXRzIGZvcm1hdAorCXsKKwkJIyBTdGFydCBmcm9tIGZpcnN0IGxpbmUgY29udGFpbmluZyBub24td2hpdGVzcGFjZQorCQlsMT0KKwkJd2hpbGUgdGVzdCAteiAiJGwxIgorCQlkbworCQkJcmVhZCBsMSB8fCBicmVhaworCQlkb25lCisJCXJlYWQgbDIKKwkJcmVhZCBsMworCQljYXNlICIkbDEiIGluCisJCSJGcm9tICIqIHwgIkZyb206ICIqKQorCQkJcGF0Y2hfZm9ybWF0PW1ib3gKKwkJCTs7CisJCScjIFRoaXMgc2VyaWVzIGFwcGxpZXMgb24gR0lUIGNvbW1pdCcqKQorCQkJcGF0Y2hfZm9ybWF0PXN0Z2l0LXNlcmllcworCQkJOzsKKwkJIiMgSEcgY2hhbmdlc2V0IHBhdGNoIikKKwkJCXBhdGNoX2Zvcm1hdD1oZworCQkJOzsKKwkJKikKKwkJCSMgaWYgdGhlIHNlY29uZCBsaW5lIGlzIGVtcHR5IGFuZCB0aGUgdGhpcmQgaXMKKwkJCSMgYSBGcm9tLCBBdXRob3Igb3IgRGF0ZSBlbnRyeSwgdGhpcyBpcyB2ZXJ5CisJCQkjIGxpa2VseSBhbiBTdEdJVCBwYXRjaAorCQkJY2FzZSAiJGwyLCRsMyIgaW4KKwkJCSwiRnJvbTogIiogfCAsIkF1dGhvcjogIiogfCAsIkRhdGU6ICIqKQorCQkJCXBhdGNoX2Zvcm1hdD1zdGdpdAorCQkJCTs7CisJCQkqKQorCQkJCTs7CisJCQllc2FjCisJCQk7OworCQllc2FjCisJCWlmIHRlc3QgLXogIiRwYXRjaF9mb3JtYXQiICYmCisJCQl0ZXN0IC1uICIkbDEiICYmCisJCQl0ZXN0IC1uICIkbDIiICYmCisJCQl0ZXN0IC1uICIkbDMiCisJCXRoZW4KKwkJCSMgVGhpcyBiZWdpbnMgd2l0aCB0aHJlZSBub24tZW1wdHkgbGluZXMuICBJcyB0aGlzIGEKKwkJCSMgcGllY2Ugb2YgZS1tYWlsIGEtbGEgUkZDMjgyMj8gIEdyYWIgYWxsIHRoZSBoZWFkZXJzLAorCQkJIyBkaXNjYXJkaW5nIHRoZSBpbmRlbnRlZCByZW1haW5kZXIgb2YgZm9sZGVkIGxpbmVzLAorCQkJIyBhbmQgc2VlIGlmIGl0IGxvb2tzIGxpa2UgdGhhdCB0aGV5IGFsbCBiZWdpbiB3aXRoIHRoZQorCQkJIyBoZWFkZXIgZmllbGQgbmFtZXMuLi4KKwkJCXRyIC1kICdcMDE1JyA8IiQxIiB8CisJCQlzZWQgLW4gLWUgJy9eJC9xJyAtZSAnL15bIAldL2QnIC1lIHAgfAorCQkJc2FuZV9lZ3JlcCAtdiAnXlshLTk7LX5dKzonID4vZGV2L251bGwgfHwKKwkJCXBhdGNoX2Zvcm1hdD1tYm94CisJCWZpCisJfSA8ICIkMSIgfHwgY2xlYW5fYWJvcnQKK30KKworc3BsaXRfcGF0Y2hlcyAoKSB7CisJY2FzZSAiJHBhdGNoX2Zvcm1hdCIgaW4KKwltYm94KQorCQlpZiB0ZXN0IHQgPSAiJGtlZXBjciIKKwkJdGhlbgorCQkgICAga2VlcF9jcj0tLWtlZXAtY3IKKwkJZWxzZQorCQkgICAga2VlcF9jcj0KKwkJZmkKKwkJZ2l0IG1haWxzcGxpdCAtZCIkcHJlYyIgLW8iJGRvdGVzdCIgLWIgJGtlZXBfY3IgLS0gIiRAIiA+ICIkZG90ZXN0L2xhc3QiIHx8CisJCWNsZWFuX2Fib3J0CisJCTs7CisJc3RnaXQtc2VyaWVzKQorCQlpZiB0ZXN0ICQjIC1uZSAxCisJCXRoZW4KKwkJCWNsZWFuX2Fib3J0ICIkKGdldHRleHQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIikiCisJCWZpCisJCXNlcmllc19kaXI9YGRpcm5hbWUgIiQxImAKKwkJc2VyaWVzX2ZpbGU9IiQxIgorCQlzaGlmdAorCQl7CisJCQlzZXQgeAorCQkJd2hpbGUgcmVhZCBmaWxlbmFtZQorCQkJZG8KKwkJCQlzZXQgIiRAIiAiJHNlcmllc19kaXIvJGZpbGVuYW1lIgorCQkJZG9uZQorCQkJIyByZW1vdmUgdGhlIHNhZmV0eSB4CisJCQlzaGlmdAorCQkJIyByZW1vdmUgdGhlIGFyZyBjb21pbmcgZnJvbSB0aGUgZmlyc3QtbGluZSBjb21tZW50CisJCQlzaGlmdAorCQl9IDwgIiRzZXJpZXNfZmlsZSIgfHwgY2xlYW5fYWJvcnQKKwkJIyBzZXQgdGhlIHBhdGNoIGZvcm1hdCBhcHByb3ByaWF0ZWx5CisJCXBhdGNoX2Zvcm1hdD1zdGdpdAorCQkjIG5vdyBoYW5kbGUgdGhlIGFjdHVhbCBTdEdJVCBwYXRjaGVzCisJCXNwbGl0X3BhdGNoZXMgIiRAIgorCQk7OworCXN0Z2l0KQorCQl0aGlzPTAKKwkJZm9yIHN0Z2l0IGluICIkQCIKKwkJZG8KKwkJCXRoaXM9YGV4cHIgIiR0aGlzIiArIDFgCisJCQltc2dudW09YHByaW50ZiAiJTAke3ByZWN9ZCIgJHRoaXNgCisJCQkjIFBlcmwgdmVyc2lvbiBvZiBTdEdJVCBwYXJzZV9wYXRjaC4gVGhlIGZpcnN0IG5vbmVtcHR5bGluZQorCQkJIyBub3Qgc3RhcnRpbmcgd2l0aCBBdXRob3IsIEZyb20gb3IgRGF0ZSBpcyB0aGUKKwkJCSMgc3ViamVjdCwgYW5kIHRoZSBib2R5IHN0YXJ0cyB3aXRoIHRoZSBuZXh0IG5vbmVtcHR5CisJCQkjIGxpbmUgbm90IHN0YXJ0aW5nIHdpdGggQXV0aG9yLCBGcm9tIG9yIERhdGUKKwkJCXBlcmwgLW5lICdCRUdJTiB7ICRzdWJqZWN0ID0gMCB9CisJCQkJaWYgKCRzdWJqZWN0ID4gMSkgeyBwcmludCA7IH0KKwkJCQllbHNpZiAoL15ccyskLykgeyBuZXh0IDsgfQorCQkJCWVsc2lmICgvXkF1dGhvcjovKSB7IHMvQXV0aG9yL0Zyb20vIDsgcHJpbnQgO30KKwkJCQllbHNpZiAoL14oRnJvbXxEYXRlKS8pIHsgcHJpbnQgOyB9CisJCQkJZWxzaWYgKCRzdWJqZWN0KSB7CisJCQkJCSRzdWJqZWN0ID0gMiA7CisJCQkJCXByaW50ICJcbiIgOworCQkJCQlwcmludCA7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJpbnQgIlN1YmplY3Q6ICIsICRfIDsKKwkJCQkJJHN1YmplY3QgPSAxOworCQkJCX0KKwkJCScgPCAiJHN0Z2l0IiA+ICIkZG90ZXN0LyRtc2dudW0iIHx8IGNsZWFuX2Fib3J0CisJCWRvbmUKKwkJZWNobyAiJHRoaXMiID4gIiRkb3Rlc3QvbGFzdCIKKwkJdGhpcz0KKwkJbXNnbnVtPQorCQk7OworCWhnKQorCQl0aGlzPTAKKwkJZm9yIGhnIGluICIkQCIKKwkJZG8KKwkJCXRoaXM9JCgoICR0aGlzICsgMSApKQorCQkJbXNnbnVtPSQocHJpbnRmICIlMCR7cHJlY31kIiAkdGhpcykKKwkJCSMgaGcgc3RvcmVzIGNoYW5nZXNldCBtZXRhZGF0YSBpbiAjLWNvbW1lbnRlZCBsaW5lcyBwcmVjZWRpbmcKKwkJCSMgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBkaWZmKHMpLiBUaGUgb25seSBtZXRhZGF0YSB3ZSBjYXJlIGFib3V0CisJCQkjIGFyZSB0aGUgVXNlciBhbmQgRGF0ZSAoTm9kZSBJRCBhbmQgUGFyZW50IGFyZSBoYXNoZXMgd2hpY2ggYXJlCisJCQkjIG9ubHkgcmVsZXZhbnQgdG8gdGhlIGhnIHJlcG9zaXRvcnkgYW5kIHRodXMgbm90IHVzZWZ1bCB0byB1cykKKwkJCSMgU2luY2Ugd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSBjb21taXQgbWVzc2FnZSBpcyBpbgorCQkJIyBnaXQtZnJpZW5kbHkgZm9ybWF0LCB3ZSBwdXQgbm8gU3ViamVjdDogbGluZSBhbmQganVzdCBjb25zdW1lCisJCQkjIGFsbCBvZiB0aGUgbWVzc2FnZSBhcyB0aGUgYm9keQorCQkJcGVybCAtTSdQT1NJWCBxdyhzdHJmdGltZSknIC1uZSAnQkVHSU4geyAkc3ViamVjdCA9IDAgfQorCQkJCWlmICgkc3ViamVjdCkgeyBwcmludCA7IH0KKwkJCQllbHNpZiAoL15cIyBVc2VyIC8pIHsgcy9cIyBVc2VyL0Zyb206LyA7IHByaW50IDsgfQorCQkJCWVsc2lmICgvXlwjIERhdGUgLykgeworCQkJCQlteSAoJGhhc2hzaWduLCAkc3RyLCAkdGltZSwgJHR6KSA9IHNwbGl0IDsKKwkJCQkJJHR6ID0gc3ByaW50ZiAiJSswNWQiLCAoMC0kdHopLzM2OworCQkJCQlwcmludCAiRGF0ZTogIiAuCisJCQkJCSAgICAgIHN0cmZ0aW1lKCIlYSwgJWQgJWIgJVkgJUg6JU06JVMgIiwKKwkJCQkJCSAgICAgICBsb2NhbHRpbWUoJHRpbWUpKQorCQkJCQkgICAgICAuICIkdHpcbiI7CisJCQkJfSBlbHNpZiAoL15cIyAvKSB7IG5leHQgOyB9CisJCQkJZWxzZSB7CisJCQkJCXByaW50ICJcbiIsICRfIDsKKwkJCQkJJHN1YmplY3QgPSAxOworCQkJCX0KKwkJCScgPCIkaGciID4iJGRvdGVzdC8kbXNnbnVtIiB8fCBjbGVhbl9hYm9ydAorCQlkb25lCisJCWVjaG8gIiR0aGlzIiA+IiRkb3Rlc3QvbGFzdCIKKwkJdGhpcz0KKwkJbXNnbnVtPQorCQk7OworCSopCisJCWlmIHRlc3QgLW4gIiRwYXRjaF9mb3JtYXQiCisJCXRoZW4KKwkJCWNsZWFuX2Fib3J0ICIkKGV2YWxfZ2V0dGV4dCAiUGF0Y2ggZm9ybWF0IFwkcGF0Y2hfZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIikiCisJCWVsc2UKKwkJCWNsZWFuX2Fib3J0ICIkKGdldHRleHQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIpIgorCQlmaQorCQk7OworCWVzYWMKK30KKworcHJlYz00Citkb3Rlc3Q9IiRHSVRfRElSL3JlYmFzZS1hcHBseSIKK3NpZ249IHV0Zjg9dCBrZWVwPSBrZWVwY3I9IHNraXA9IGludGVyYWN0aXZlPSByZXNvbHZlZD0gcmViYXNpbmc9IGFib3J0PQorcmVzb2x2ZW1zZz0gcmVzdW1lPSBzY2lzc29ycz0gbm9faW5ib2R5X2hlYWRlcnM9CitnaXRfYXBwbHlfb3B0PQorY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGU9CitpZ25vcmVfZGF0ZT0KK2FsbG93X3JlcmVyZV9hdXRvdXBkYXRlPQorCitpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGFtLmtlZXBjcikiID0gdHJ1ZQordGhlbgorICAgIGtlZXBjcj10CitmaQorCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLWl8LS1pbnRlcmFjdGl2ZSkKKwkJaW50ZXJhY3RpdmU9dCA7OworCS1ifC0tYmluYXJ5KQorCQlnZXR0ZXh0bG4gPiYyICJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kCitpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorCQk7OworCS0zfC0tM3dheSkKKwkJdGhyZWV3YXk9dCA7OworCS1zfC0tc2lnbm9mZikKKwkJc2lnbj10IDs7CisJLXV8LS11dGY4KQorCQl1dGY4PXQgOzsgIyB0aGlzIGlzIG5vdyBkZWZhdWx0CisJLS1uby11dGY4KQorCQl1dGY4PSA7OworCS1rfC0ta2VlcCkKKwkJa2VlcD10IDs7CisJLS1rZWVwLW5vbi1wYXRjaCkKKwkJa2VlcD1iIDs7CisJLWN8LS1zY2lzc29ycykKKwkJc2Npc3NvcnM9dCA7OworCS0tbm8tc2Npc3NvcnMpCisJCXNjaXNzb3JzPWYgOzsKKwktcnwtLXJlc29sdmVkfC0tY29udGludWUpCisJCXJlc29sdmVkPXQgOzsKKwktLXNraXApCisJCXNraXA9dCA7OworCS0tYWJvcnQpCisJCWFib3J0PXQgOzsKKwktLXJlYmFzaW5nKQorCQlyZWJhc2luZz10IHRocmVld2F5PXQgOzsKKwktLXJlc29sdmVtc2cpCisJCXNoaWZ0OyByZXNvbHZlbXNnPSQxIDs7CisJLS13aGl0ZXNwYWNlfC0tZGlyZWN0b3J5fC0tZXhjbHVkZXwtLWluY2x1ZGUpCisJCWdpdF9hcHBseV9vcHQ9IiRnaXRfYXBwbHlfb3B0ICQoc3EgIiQxPSQyIikiOyBzaGlmdCA7OworCS1DfC1wKQorCQlnaXRfYXBwbHlfb3B0PSIkZ2l0X2FwcGx5X29wdCAkKHNxICIkMSQyIikiOyBzaGlmdCA7OworCS0tcGF0Y2gtZm9ybWF0KQorCQlzaGlmdCA7IHBhdGNoX2Zvcm1hdD0iJDEiIDs7CisJLS1yZWplY3R8LS1pZ25vcmUtd2hpdGVzcGFjZXwtLWlnbm9yZS1zcGFjZS1jaGFuZ2UpCisJCWdpdF9hcHBseV9vcHQ9IiRnaXRfYXBwbHlfb3B0ICQxIiA7OworCS0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUpCisJCWNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlPXQgOzsKKwktLWlnbm9yZS1kYXRlKQorCQlpZ25vcmVfZGF0ZT10IDs7CisJLS1yZXJlcmUtYXV0b3VwZGF0ZXwtLW5vLXJlcmVyZS1hdXRvdXBkYXRlKQorCQlhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZT0iJDEiIDs7CisJLXF8LS1xdWlldCkKKwkJR0lUX1FVSUVUPXQgOzsKKwktLWtlZXAtY3IpCisJCWtlZXBjcj10IDs7CisJLS1uby1rZWVwLWNyKQorCQlrZWVwY3I9ZiA7OworCS0tKQorCQlzaGlmdDsgYnJlYWsgOzsKKwkqKQorCQl1c2FnZSA7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCisjIElmIHRoZSBkb3Rlc3QgZGlyZWN0b3J5IGV4aXN0cywgYnV0IHdlIGhhdmUgZmluaXNoZWQgYXBwbHlpbmcgYWxsIHRoZQorIyBwYXRjaGVzIGluIHRoZW0sIGNsZWFyIGl0IG91dC4KK2lmIHRlc3QgLWQgIiRkb3Rlc3QiICYmCisgICBsYXN0PSQoY2F0ICIkZG90ZXN0L2xhc3QiKSAmJgorICAgbmV4dD0kKGNhdCAiJGRvdGVzdC9uZXh0IikgJiYKKyAgIHRlc3QgJCMgIT0gMCAmJgorICAgdGVzdCAiJG5leHQiIC1ndCAiJGxhc3QiCit0aGVuCisgICBybSAtZnIgIiRkb3Rlc3QiCitmaQorCitpZiB0ZXN0IC1kICIkZG90ZXN0IgordGhlbgorCWNhc2UgIiQjLCRza2lwJHJlc29sdmVkJGFib3J0IiBpbgorCTAsKnQqKQorCQkjIEV4cGxpY2l0IHJlc3VtZSBjb21tYW5kIGFuZCB3ZSBkbyBub3QgaGF2ZSBmaWxlLCBzbworCQkjIHdlIGFyZSBoYXBweS4KKwkJOiA7OworCTAsKQorCQkjIE5vIGZpbGUgaW5wdXQgYnV0IHdpdGhvdXQgcmVzdW1lIHBhcmFtZXRlcnM7IGNhdGNoCisJCSMgdXNlciBlcnJvciB0byBmZWVkIHVzIGEgcGF0Y2ggZnJvbSBzdGFuZGFyZCBpbnB1dAorCQkjIHdoZW4gdGhlcmUgaXMgYWxyZWFkeSAkZG90ZXN0LiAgVGhpcyBpcyBzb21ld2hhdAorCQkjIHVucmVsaWFibGUgLS0gc3RkaW4gY291bGQgYmUgL2Rldi9udWxsIGZvciBleGFtcGxlCisJCSMgYW5kIHRoZSBjYWxsZXIgZGlkIG5vdCBpbnRlbmQgdG8gZmVlZCB1cyBhIHBhdGNoIGJ1dAorCQkjIHdhbnRlZCB0byBjb250aW51ZSB1bmF0dGVuZGVkLgorCQl0ZXN0IC10IDAKKwkJOzsKKwkqKQorCQlmYWxzZQorCQk7OworCWVzYWMgfHwKKwlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5IFwkZG90ZXN0IHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iKSIKKwlyZXN1bWU9eWVzCisKKwljYXNlICIkc2tpcCwkYWJvcnQiIGluCisJdCx0KQorCQlkaWUgIiQoZ2V0dGV4dCAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iKSIKKwkJOzsKKwl0LCkKKwkJZ2l0IHJlcmVyZSBjbGVhcgorCQlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCBIRUFECisJCW9yaWdfaGVhZD0kKGNhdCAiJEdJVF9ESVIvT1JJR19IRUFEIikKKwkJZ2l0IHJlc2V0IEhFQUQKKwkJZ2l0IHVwZGF0ZS1yZWYgT1JJR19IRUFEICRvcmlnX2hlYWQKKwkJOzsKKwksdCkKKwkJaWYgdGVzdCAtZiAiJGRvdGVzdC9yZWJhc2luZyIKKwkJdGhlbgorCQkJZXhlYyBnaXQgcmViYXNlIC0tYWJvcnQKKwkJZmkKKwkJZ2l0IHJlcmVyZSBjbGVhcgorCQlpZiBzYWZlX3RvX2Fib3J0CisJCXRoZW4KKwkJCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEIE9SSUdfSEVBRAorCQkJZ2l0IHJlc2V0IE9SSUdfSEVBRAorCQlmaQorCQlybSAtZnIgIiRkb3Rlc3QiCisJCWV4aXQgOzsKKwllc2FjCisJcm0gLWYgIiRkb3Rlc3QvZGlydHlpbmRleCIKK2Vsc2UKKwkjIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGdpdmVuIC0tc2tpcCwgLS1yZXNvbHZlZCwgbm9yIC0tYWJvcnQKKwl0ZXN0ICIkc2tpcCRyZXNvbHZlZCRhYm9ydCIgPSAiIiB8fAorCQlkaWUgIiQoZ2V0dGV4dCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIpIgorCisJIyBTdGFydCBhZnJlc2guCisJbWtkaXIgLXAgIiRkb3Rlc3QiIHx8IGV4aXQKKworCWlmIHRlc3QgLW4gIiRwcmVmaXgiICYmIHRlc3QgJCMgIT0gMAorCXRoZW4KKwkJZmlyc3Q9dAorCQlmb3IgYXJnCisJCWRvCisJCQl0ZXN0IC1uICIkZmlyc3QiICYmIHsKKwkJCQlzZXQgeAorCQkJCWZpcnN0PQorCQkJfQorCQkJaWYgaXNfYWJzb2x1dGVfcGF0aCAiJGFyZyIKKwkJCXRoZW4KKwkJCQlzZXQgIiRAIiAiJGFyZyIKKwkJCWVsc2UKKwkJCQlzZXQgIiRAIiAiJHByZWZpeCRhcmciCisJCQlmaQorCQlkb25lCisJCXNoaWZ0CisJZmkKKworCWNoZWNrX3BhdGNoX2Zvcm1hdCAiJEAiCisKKwlzcGxpdF9wYXRjaGVzICIkQCIKKworCSMgLWkgY2FuIGFuZCBtdXN0IGJlIGdpdmVuIHdoZW4gcmVzdW1pbmc7IGV2ZXJ5dGhpbmcKKwkjIGVsc2UgaXMga2VwdAorCWVjaG8gIiAkZ2l0X2FwcGx5X29wdCIgPiIkZG90ZXN0L2FwcGx5LW9wdCIKKwllY2hvICIkdGhyZWV3YXkiID4iJGRvdGVzdC90aHJlZXdheSIKKwllY2hvICIkc2lnbiIgPiIkZG90ZXN0L3NpZ24iCisJZWNobyAiJHV0ZjgiID4iJGRvdGVzdC91dGY4IgorCWVjaG8gIiRrZWVwIiA+IiRkb3Rlc3Qva2VlcCIKKwllY2hvICIkc2Npc3NvcnMiID4iJGRvdGVzdC9zY2lzc29ycyIKKwllY2hvICIkbm9faW5ib2R5X2hlYWRlcnMiID4iJGRvdGVzdC9ub19pbmJvZHlfaGVhZGVycyIKKwllY2hvICIkR0lUX1FVSUVUIiA+IiRkb3Rlc3QvcXVpZXQiCisJZWNobyAxID4iJGRvdGVzdC9uZXh0IgorCWlmIHRlc3QgLW4gIiRyZWJhc2luZyIKKwl0aGVuCisJCTogPiIkZG90ZXN0L3JlYmFzaW5nIgorCWVsc2UKKwkJOiA+IiRkb3Rlc3QvYXBwbHlpbmciCisJCWlmIHRlc3QgLW4gIiRIQVNfSEVBRCIKKwkJdGhlbgorCQkJZ2l0IHVwZGF0ZS1yZWYgT1JJR19IRUFEIEhFQUQKKwkJZWxzZQorCQkJZ2l0IHVwZGF0ZS1yZWYgLWQgT1JJR19IRUFEID4vZGV2L251bGwgMj4mMQorCQlmaQorCWZpCitmaQorCitnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAorCitjYXNlICIkcmVzb2x2ZWQiIGluCisnJykKKwljYXNlICIkSEFTX0hFQUQiIGluCisJJycpCisJCWZpbGVzPSQoZ2l0IGxzLWZpbGVzKSA7OworCT8qKQorCQlmaWxlcz0kKGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tbmFtZS1vbmx5IEhFQUQgLS0pIDs7CisJZXNhYyB8fCBleGl0CisJaWYgdGVzdCAiJGZpbGVzIgorCXRoZW4KKwkJdGVzdCAtbiAiJEhBU19IRUFEIiAmJiA6ID4iJGRvdGVzdC9kaXJ0eWluZGV4IgorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiBcJGZpbGVzKSIpIgorCWZpCitlc2FjCisKKyMgTm93LCBkZWNpZGUgd2hhdCBjb21tYW5kIGxpbmUgb3B0aW9ucyB3ZSB3aWxsIGdpdmUgdG8gdGhlIGdpdAorIyBjb21tYW5kcyB3ZSBpbnZva2UsIGJhc2VkIG9uIHRoZSByZXN1bHQgb2YgcGFyc2luZyBjb21tYW5kIGxpbmUKKyMgb3B0aW9ucyBhbmQgcHJldmlvdXMgaW52b2NhdGlvbiBzdGF0ZSBzdG9yZWQgaW4gJGRvdGVzdC8gZmlsZXMuCisKK2lmIHRlc3QgIiQoY2F0ICIkZG90ZXN0L3V0ZjgiKSIgPSB0Cit0aGVuCisJdXRmOD0tdQorZWxzZQorCXV0Zjg9LW4KK2ZpCitrZWVwPSQoY2F0ICIkZG90ZXN0L2tlZXAiKQorY2FzZSAiJGtlZXAiIGluCit0KQorCWtlZXA9LWsgOzsKK2IpCisJa2VlcD0tYiA7OworKikKKwlrZWVwPSA7OworZXNhYworY2FzZSAiJChjYXQgIiRkb3Rlc3Qvc2Npc3NvcnMiKSIgaW4KK3QpCisJc2Npc3NvcnM9LS1zY2lzc29ycyA7OworZikKKwlzY2lzc29ycz0tLW5vLXNjaXNzb3JzIDs7Citlc2FjCitpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC9ub19pbmJvZHlfaGVhZGVycyIpIiA9IHQKK3RoZW4KKwlub19pbmJvZHlfaGVhZGVycz0tLW5vLWluYm9keS1oZWFkZXJzCitlbHNlCisJbm9faW5ib2R5X2hlYWRlcnM9CitmaQoraWYgdGVzdCAiJChjYXQgIiRkb3Rlc3QvcXVpZXQiKSIgPSB0Cit0aGVuCisJR0lUX1FVSUVUPXQKK2ZpCitpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC90aHJlZXdheSIpIiA9IHQKK3RoZW4KKwl0aHJlZXdheT10CitmaQorZ2l0X2FwcGx5X29wdD0kKGNhdCAiJGRvdGVzdC9hcHBseS1vcHQiKQoraWYgdGVzdCAiJChjYXQgIiRkb3Rlc3Qvc2lnbiIpIiA9IHQKK3RoZW4KKwlTSUdOT0ZGPWBnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfCBzZWQgLWUgJworCQkJcy8+LiovPi8KKwkJCXMvXi9TaWduZWQtb2ZmLWJ5OiAvJworCQlgCitlbHNlCisJU0lHTk9GRj0KK2ZpCisKK2xhc3Q9YGNhdCAiJGRvdGVzdC9sYXN0ImAKK3RoaXM9YGNhdCAiJGRvdGVzdC9uZXh0ImAKK2lmIHRlc3QgIiRza2lwIiA9IHQKK3RoZW4KKwl0aGlzPWBleHByICIkdGhpcyIgKyAxYAorCXJlc3VtZT0KK2ZpCisKK3doaWxlIHRlc3QgIiR0aGlzIiAtbGUgIiRsYXN0IgorZG8KKwltc2dudW09YHByaW50ZiAiJTAke3ByZWN9ZCIgJHRoaXNgCisJbmV4dD1gZXhwciAiJHRoaXMiICsgMWAKKwl0ZXN0IC1mICIkZG90ZXN0LyRtc2dudW0iIHx8IHsKKwkJcmVzdW1lPQorCQlnb19uZXh0CisJCWNvbnRpbnVlCisJfQorCisJIyBJZiB3ZSBhcmUgbm90IHJlc3VtaW5nLCBwYXJzZSBhbmQgZXh0cmFjdCB0aGUgcGF0Y2ggaW5mb3JtYXRpb24KKwkjIGludG8gc2VwYXJhdGUgZmlsZXM6CisJIyAgLSBpbmZvIHJlY29yZHMgdGhlIGF1dGhvcnNoaXAgYW5kIHRpdGxlCisJIyAgLSBtc2cgaXMgdGhlIHJlc3Qgb2YgY29tbWl0IGxvZyBtZXNzYWdlCisJIyAgLSBwYXRjaCBpcyB0aGUgcGF0Y2ggYm9keS4KKwkjCisJIyBXaGVuIHdlIGFyZSByZXN1bWluZywgdGhlc2UgZmlsZXMgYXJlIGVpdGhlciBhbHJlYWR5IHByZXBhcmVkCisJIyBieSB0aGUgdXNlciwgb3IgdGhlIHVzZXIgY2FuIHRlbGwgdXMgdG8gZG8gc28gYnkgLS1yZXNvbHZlZCBmbGFnLgorCWNhc2UgIiRyZXN1bWUiIGluCisJJycpCisJCWlmIHRlc3QgLWYgIiRkb3Rlc3QvcmViYXNpbmciCisJCXRoZW4KKwkJCWNvbW1pdD0kKHNlZCAtZSAncy9eRnJvbSBcKFswLTlhLWZdKlwpIC4qL1wxLycgXAorCQkJCS1lIHEgIiRkb3Rlc3QvJG1zZ251bSIpICYmCisJCQl0ZXN0ICIkKGdpdCBjYXQtZmlsZSAtdCAiJGNvbW1pdCIpIiA9IGNvbW1pdCB8fAorCQkJCXN0b3BfaGVyZSAkdGhpcworCQkJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJGNvbW1pdCIgfAorCQkJc2VkIC1lICcxLC9eJC9kJyA+IiRkb3Rlc3QvbXNnLWNsZWFuIgorCQkJZWNobyAiJGNvbW1pdCIgPiIkZG90ZXN0L29yaWdpbmFsLWNvbW1pdCIKKwkJCWdldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQgIiRjb21taXQiID4iJGRvdGVzdC9hdXRob3Itc2NyaXB0IgorCQkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1iaW5hcnkgIiRjb21taXQiID4iJGRvdGVzdC9wYXRjaCIKKwkJZWxzZQorCQkJZ2l0IG1haWxpbmZvICRrZWVwICRub19pbmJvZHlfaGVhZGVycyAkc2Npc3NvcnMgJHV0ZjggIiRkb3Rlc3QvbXNnIiAiJGRvdGVzdC9wYXRjaCIgXAorCQkJCTwiJGRvdGVzdC8kbXNnbnVtIiA+IiRkb3Rlc3QvaW5mbyIgfHwKKwkJCQlzdG9wX2hlcmUgJHRoaXMKKworCQkJIyBza2lwIHBpbmUncyBpbnRlcm5hbCBmb2xkZXIgZGF0YQorCQkJc2FuZV9ncmVwICdeQXV0aG9yOiBNYWlsIFN5c3RlbSBJbnRlcm5hbCBEYXRhJCcgXAorCQkJCTwiJGRvdGVzdCIvaW5mbyA+L2Rldi9udWxsICYmCisJCQkJZ29fbmV4dCAmJiBjb250aW51ZQorCisJCQl0ZXN0IC1zICIkZG90ZXN0L3BhdGNoIiB8fCB7CisJCQkJZXZhbF9nZXR0ZXh0bG4gIlBhdGNoIGlzIGVtcHR5LiAgV2FzIGl0IHNwbGl0IHdyb25nPworSWYgeW91IHdvdWxkIHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIGluc3RlYWQgcnVuIFwiXCRjbWRsaW5lIC0tc2tpcFwiLgorVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nIHJ1biBcIlwkY21kbGluZSAtLWFib3J0XCIuIgorCQkJCXN0b3BfaGVyZSAkdGhpcworCQkJfQorCQkJcm0gLWYgIiRkb3Rlc3Qvb3JpZ2luYWwtY29tbWl0IiAiJGRvdGVzdC9hdXRob3Itc2NyaXB0IgorCQkJeworCQkJCXNlZCAtbiAnL15TdWJqZWN0LyBzL1N1YmplY3Q6IC8vcCcgIiRkb3Rlc3QvaW5mbyIKKwkJCQllY2hvCisJCQkJY2F0ICIkZG90ZXN0L21zZyIKKwkJCX0gfAorCQkJZ2l0IHN0cmlwc3BhY2UgPiAiJGRvdGVzdC9tc2ctY2xlYW4iCisJCWZpCisJCTs7CisJZXNhYworCisJaWYgdGVzdCAtZiAiJGRvdGVzdC9hdXRob3Itc2NyaXB0IgorCXRoZW4KKwkJZXZhbCAkKGNhdCAiJGRvdGVzdC9hdXRob3Itc2NyaXB0IikKKwllbHNlCisJCUdJVF9BVVRIT1JfTkFNRT0iJChzZWQgLW4gJy9eQXV0aG9yLyBzL0F1dGhvcjogLy9wJyAiJGRvdGVzdC9pbmZvIikiCisJCUdJVF9BVVRIT1JfRU1BSUw9IiQoc2VkIC1uICcvXkVtYWlsLyBzL0VtYWlsOiAvL3AnICIkZG90ZXN0L2luZm8iKSIKKwkJR0lUX0FVVEhPUl9EQVRFPSIkKHNlZCAtbiAnL15EYXRlLyBzL0RhdGU6IC8vcCcgIiRkb3Rlc3QvaW5mbyIpIgorCWZpCisKKwlpZiB0ZXN0IC16ICIkR0lUX0FVVEhPUl9FTUFJTCIKKwl0aGVuCisJCWdldHRleHRsbiAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKKwkJc3RvcF9oZXJlICR0aGlzCisJZmkKKworCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCBHSVRfQVVUSE9SX0RBVEUKKworCWNhc2UgIiRyZXN1bWUiIGluCisJJycpCisJICAgIGlmIHRlc3QgJycgIT0gIiRTSUdOT0ZGIgorCSAgICB0aGVuCisJCUxBU1RfU0lHTkVEX09GRl9CWT1gCisJCSAgICBzZWQgLW5lICcvXlNpZ25lZC1vZmYtYnk6IC9wJyBcCisJCSAgICAiJGRvdGVzdC9tc2ctY2xlYW4iIHwKKwkJICAgIHNlZCAtbmUgJyRwJworCQlgCisJCUFERF9TSUdOT0ZGPWAKKwkJICAgIHRlc3QgIiRMQVNUX1NJR05FRF9PRkZfQlkiID0gIiRTSUdOT0ZGIiB8fCB7CisJCSAgICB0ZXN0ICcnID0gIiRMQVNUX1NJR05FRF9PRkZfQlkiICYmIGVjaG8KKwkJICAgIGVjaG8gIiRTSUdOT0ZGIgorCQl9YAorCSAgICBlbHNlCisJCUFERF9TSUdOT0ZGPQorCSAgICBmaQorCSAgICB7CisJCWlmIHRlc3QgLXMgIiRkb3Rlc3QvbXNnLWNsZWFuIgorCQl0aGVuCisJCQljYXQgIiRkb3Rlc3QvbXNnLWNsZWFuIgorCQlmaQorCQlpZiB0ZXN0ICcnICE9ICIkQUREX1NJR05PRkYiCisJCXRoZW4KKwkJCWVjaG8gIiRBRERfU0lHTk9GRiIKKwkJZmkKKwkgICAgfSA+IiRkb3Rlc3QvZmluYWwtY29tbWl0IgorCSAgICA7OworCSopCisJCWNhc2UgIiRyZXNvbHZlZCRpbnRlcmFjdGl2ZSIgaW4KKwkJdHQpCisJCQkjIFRoaXMgaXMgdXNlZCBvbmx5IGZvciBpbnRlcmFjdGl2ZSB2aWV3IG9wdGlvbi4KKwkJCWdpdCBkaWZmLWluZGV4IC1wIC0tY2FjaGVkIEhFQUQgLS0gPiIkZG90ZXN0L3BhdGNoIgorCQkJOzsKKwkJZXNhYworCWVzYWMKKworCXJlc3VtZT0KKwlpZiB0ZXN0ICIkaW50ZXJhY3RpdmUiID0gdAorCXRoZW4KKwkgICAgdGVzdCAtdCAwIHx8CisJICAgIGRpZSAiJChnZXR0ZXh0ICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iKSIKKwkgICAgYWN0aW9uPWFnYWluCisJICAgIHdoaWxlIHRlc3QgIiRhY3Rpb24iID0gYWdhaW4KKwkgICAgZG8KKwkJZ2V0dGV4dGxuICJDb21taXQgQm9keSBpczoiCisJCWVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCQljYXQgIiRkb3Rlc3QvZmluYWwtY29tbWl0IgorCQllY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwkJIyBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKwkJIyBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKwkJIyBpbnB1dCBhdCB0aGlzIHBvaW50LgorCQlnZXR0ZXh0ICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbCAiCisJCXJlYWQgcmVwbHkKKwkJY2FzZSAiJHJlcGx5IiBpbgorCQlbeVldKikgYWN0aW9uPXllcyA7OworCQlbYUFdKikgYWN0aW9uPXllcyBpbnRlcmFjdGl2ZT0gOzsKKwkJW25OXSopIGFjdGlvbj1za2lwIDs7CisJCVtlRV0qKSBnaXRfZWRpdG9yICIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIKKwkJICAgICAgIGFjdGlvbj1hZ2FpbiA7OworCQlbdlZdKikgYWN0aW9uPWFnYWluCisJCSAgICAgICBnaXRfcGFnZXIgIiRkb3Rlc3QvcGF0Y2giIDs7CisJCSopICAgICBhY3Rpb249YWdhaW4gOzsKKwkJZXNhYworCSAgICBkb25lCisJZWxzZQorCSAgICBhY3Rpb249eWVzCisJZmkKKworCWlmIHRlc3QgLWYgIiRkb3Rlc3QvZmluYWwtY29tbWl0IgorCXRoZW4KKwkJRklSU1RMSU5FPSQoc2VkIDFxICIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIpCisJZWxzZQorCQlGSVJTVExJTkU9IiIKKwlmaQorCisJaWYgdGVzdCAkYWN0aW9uID0gc2tpcAorCXRoZW4KKwkJZ29fbmV4dAorCQljb250aW51ZQorCWZpCisKKwlpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvYXBwbHlwYXRjaC1tc2cKKwl0aGVuCisJCSIkR0lUX0RJUiIvaG9va3MvYXBwbHlwYXRjaC1tc2cgIiRkb3Rlc3QvZmluYWwtY29tbWl0IiB8fAorCQlzdG9wX2hlcmUgJHRoaXMKKwlmaQorCisJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiQXBwbHlpbmc6IFwkRklSU1RMSU5FIikiCisKKwljYXNlICIkcmVzb2x2ZWQiIGluCisJJycpCisJCSMgV2hlbiB3ZSBhcmUgYWxsb3dlZCB0byBmYWxsIGJhY2sgdG8gMy13YXkgbGF0ZXIsIGRvbid0IGdpdmUKKwkJIyBmYWxzZSBlcnJvcnMgZHVyaW5nIHRoZSBpbml0aWFsIGF0dGVtcHQuCisJCXNxdWVsY2g9CisJCWlmIHRlc3QgIiR0aHJlZXdheSIgPSB0CisJCXRoZW4KKwkJCXNxdWVsY2g9Jz4vZGV2L251bGwgMj4mMSAnCisJCWZpCisJCWV2YWwgImdpdCBhcHBseSAkc3F1ZWxjaCRnaXRfYXBwbHlfb3B0IicgLS1pbmRleCAiJGRvdGVzdC9wYXRjaCInCisJCWFwcGx5X3N0YXR1cz0kPworCQk7OworCXQpCisJCSMgUmVzb2x2ZWQgbWVhbnMgdGhlIHVzZXIgZGlkIGFsbCB0aGUgaGFyZCB3b3JrLCBhbmQKKwkJIyB3ZSBkbyBub3QgaGF2ZSB0byBkbyBhbnkgcGF0Y2ggYXBwbGljYXRpb24uICBKdXN0CisJCSMgdHJ1c3Qgd2hhdCB0aGUgdXNlciBoYXMgaW4gdGhlIGluZGV4IGZpbGUgYW5kIHRoZQorCQkjIHdvcmtpbmcgdHJlZS4KKwkJcmVzb2x2ZWQ9CisJCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAtLSAmJiB7CisJCQlnZXR0ZXh0bG4gIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPworSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlCithbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKKwkJCXN0b3BfaGVyZV91c2VyX3Jlc29sdmUgJHRoaXMKKwkJfQorCQl1bm1lcmdlZD0kKGdpdCBscy1maWxlcyAtdSkKKwkJaWYgdGVzdCAtbiAiJHVubWVyZ2VkIgorCQl0aGVuCisJCQlnZXR0ZXh0bG4gIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXgKK2RpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/IgorCQkJc3RvcF9oZXJlX3VzZXJfcmVzb2x2ZSAkdGhpcworCQlmaQorCQlhcHBseV9zdGF0dXM9MAorCQlnaXQgcmVyZXJlCisJCTs7CisJZXNhYworCisJaWYgdGVzdCAkYXBwbHlfc3RhdHVzICE9IDAgJiYgdGVzdCAiJHRocmVld2F5IiA9IHQKKwl0aGVuCisJCWlmIChmYWxsX2JhY2tfM3dheSkKKwkJdGhlbgorCQkgICAgIyBBcHBseWluZyB0aGUgcGF0Y2ggdG8gYW4gZWFybGllciB0cmVlIGFuZCBtZXJnaW5nIHRoZQorCQkgICAgIyByZXN1bHQgbWF5IGhhdmUgcHJvZHVjZWQgdGhlIHNhbWUgdHJlZSBhcyBvdXJzLgorCQkgICAgZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmIHsKKwkJCXNheSAiJChnZXR0ZXh0ICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iKSIKKwkJCWdvX25leHQKKwkJCWNvbnRpbnVlCisJCSAgICB9CisJCSAgICAjIGNsZWFyIGFwcGx5X3N0YXR1cyAtLSB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBtZXJnZWQuCisJCSAgICBhcHBseV9zdGF0dXM9MAorCQlmaQorCWZpCisJaWYgdGVzdCAkYXBwbHlfc3RhdHVzICE9IDAKKwl0aGVuCisJCWV2YWxfZ2V0dGV4dGxuICdQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FJworCQlpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIGFkdmljZS5hbXdvcmtkaXIpIiAhPSBmYWxzZQorCQl0aGVuCisJCQlldmFsX2dldHRleHRsbiAnVGhlIGNvcHkgb2YgdGhlIHBhdGNoIHRoYXQgZmFpbGVkIGlzIGZvdW5kIGluOgorICAgJGRvdGVzdC9wYXRjaCcKKwkJZmkKKwkJc3RvcF9oZXJlX3VzZXJfcmVzb2x2ZSAkdGhpcworCWZpCisKKwlpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcHJlLWFwcGx5cGF0Y2gKKwl0aGVuCisJCSIkR0lUX0RJUiIvaG9va3MvcHJlLWFwcGx5cGF0Y2ggfHwgc3RvcF9oZXJlICR0aGlzCisJZmkKKworCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwljb21taXQ9JCgKKwkJaWYgdGVzdCAtbiAiJGlnbm9yZV9kYXRlIgorCQl0aGVuCisJCQlHSVRfQVVUSE9SX0RBVEU9CisJCWZpCisJCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCkgfHwKKwkJc2F5ID4mMiAiJChnZXR0ZXh0ICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IikiCisKKwkJaWYgdGVzdCAtbiAiJGNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlIgorCQl0aGVuCisJCQlHSVRfQ09NTUlUVEVSX0RBVEU9IiRHSVRfQVVUSE9SX0RBVEUiCisJCQlleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFCisJCWZpICYmCisJCWdpdCBjb21taXQtdHJlZSAkdHJlZSAke3BhcmVudDorLXB9ICRwYXJlbnQgPCIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIKKwkpICYmCisJZ2l0IHVwZGF0ZS1yZWYgLW0gIiRHSVRfUkVGTE9HX0FDVElPTjogJEZJUlNUTElORSIgSEVBRCAkY29tbWl0ICRwYXJlbnQgfHwKKwlzdG9wX2hlcmUgJHRoaXMKKworCWlmIHRlc3QgLWYgIiRkb3Rlc3Qvb3JpZ2luYWwtY29tbWl0IjsgdGhlbgorCQllY2hvICIkKGNhdCAiJGRvdGVzdC9vcmlnaW5hbC1jb21taXQiKSAkY29tbWl0IiA+PiAiJGRvdGVzdC9yZXdyaXR0ZW4iCisJZmkKKworCWlmIHRlc3QgLXggIiRHSVRfRElSIi9ob29rcy9wb3N0LWFwcGx5cGF0Y2gKKwl0aGVuCisJCSIkR0lUX0RJUiIvaG9va3MvcG9zdC1hcHBseXBhdGNoCisJZmkKKworCWdvX25leHQKK2RvbmUKKworaWYgdGVzdCAtcyAiJGRvdGVzdCIvcmV3cml0dGVuOyB0aGVuCisgICAgZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1yZWJhc2UgPCAiJGRvdGVzdCIvcmV3cml0dGVuCisgICAgaWYgdGVzdCAteCAiJEdJVF9ESVIiL2hvb2tzL3Bvc3QtcmV3cml0ZTsgdGhlbgorCSIkR0lUX0RJUiIvaG9va3MvcG9zdC1yZXdyaXRlIHJlYmFzZSA8ICIkZG90ZXN0Ii9yZXdyaXR0ZW4KKyAgICBmaQorZmkKKworcm0gLWZyICIkZG90ZXN0IgorZ2l0IGdjIC0tYXV0bwpkaWZmIC0tZ2l0IGEvZ2l0LWFyY2hpbXBvcnQucGVybCBiL2dpdC1hcmNoaW1wb3J0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmMzMmYxOAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1hcmNoaW1wb3J0LnBlcmwKQEAgLTAsMCArMSwxMTM0IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgVGhpcyB0b29sIGlzIGNvcHlyaWdodCAoYykgMjAwNSwgTWFydGluIExhbmdob2ZmLgorIyBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR251IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisjCisjIFRoZSBiYXNpYyBpZGVhIGlzIHRvIHdhbGsgdGhlIG91dHB1dCBvZiB0bGEgYWJyb3dzZSwKKyMgZmV0Y2ggdGhlIGNoYW5nZXNldHMgYW5kIGFwcGx5IHRoZW0uCisjCisKKz1oZWFkMSBJbnZvY2F0aW9uCisKKyAgICBnaXQgYXJjaGltcG9ydCBbIC1oIF0gWyAtdiBdIFsgLW8gXSBbIC1hIF0gWyAtZiBdIFsgLVQgXQorCVsgLUQgZGVwdGhdIFsgLXQgdGVtcGRpciBdIDxhcmNoaXZlPi88YnJhbmNoPiBbIDxhcmNoaXZlPi88YnJhbmNoPiBdCisKK0ltcG9ydHMgYSBwcm9qZWN0IGZyb20gb25lIG9yIG1vcmUgQXJjaCByZXBvc2l0b3JpZXMuIEl0IHdpbGwgZm9sbG93IGJyYW5jaGVzCithbmQgcmVwb3NpdG9yaWVzIHdpdGhpbiB0aGUgbmFtZXNwYWNlcyBkZWZpbmVkIGJ5IHRoZSA8YXJjaGl2ZS9icmFuY2g+CitwYXJhbWV0ZXJzIHN1cHBsaWVkLiBJZiBpdCBjYW5ub3QgZmluZCB0aGUgcmVtb3RlIGJyYW5jaCBhIG1lcmdlIGNvbWVzIGZyb20KK2l0IHdpbGwganVzdCBpbXBvcnQgaXQgYXMgYSByZWd1bGFyIGNvbW1pdC4gSWYgaXQgY2FuIGZpbmQgaXQsIGl0IHdpbGwgbWFyayBpdAorYXMgYSBtZXJnZSB3aGVuZXZlciBwb3NzaWJsZS4KKworU2VlIG1hbiAoMSkgZ2l0LWFyY2hpbXBvcnQgZm9yIG1vcmUgZGV0YWlscy4KKworPWhlYWQxIFRPRE8KKworIC0gY3JlYXRlIHRhZyBvYmplY3RzIGluc3RlYWQgb2YgcmVmIHRhZ3MKKyAtIGF1ZGl0IHNoZWxsLWVzY2FwaW5nIG9mIGZpbGVuYW1lcworIC0gaGlkZSBvdXIgcHJpdmF0ZSB0YWdzIHNvbWV3aGVyZSBzbWFydGVyCisgLSBmaW5kIGEgd2F5IHRvIG1ha2UgImNhdCAqcGF0Y2hlcyB8IHBhdGNoIiBzYWZlIGV2ZW4gd2hlbiBwYXRjaGZpbGVzIGFyZSBtaXNzaW5nIG5ld2xpbmVzCisgLSBzb3J0IGFuZCBhcHBseSBwYXRjaGVzIGJ5IGdyYXBoaW5nIGFuY2VzdHJ5IHJlbGF0aW9ucyBpbnN0ZWFkIG9mIGp1c3QKKyAgIHJlbHlpbmcgaW4gZGF0ZXMgc3VwcGxpZWQgaW4gdGhlIGNoYW5nZXNldCBpdHNlbGYuCisgICB0bGEgYW5jZXN0cnktZ3JhcGggLW0gY291bGQgYmUgaGVscGZ1bCBoZXJlLi4uCisKKz1oZWFkMSBEZXZlbCB0cmlja3MKKworQWRkIHByaW50IGluIGZyb250IG9mIHRoZSBzaGVsbCBjb21tYW5kcyBpbnZva2VkIHZpYSBiYWNrdGlja3MuCisKKz1oZWFkMSBEZXZlbCBOb3RlcworCitUaGVyZSBhcmUgc2V2ZXJhbCBwbGFjZXMgd2hlcmUgQXJjaCBhbmQgZ2l0IHRlcm1pbm9sb2d5IGFyZSBpbnRlcm1peGVkCithbmQgcG90ZW50aWFsbHkgY29uZnVzZWQuCisKK1RoZSBub3Rpb24gb2YgYSAiYnJhbmNoIiBpbiBnaXQgaXMgYXBwcm94aW1hdGVseSBlcXVpdmFsZW50IHRvCithICJhcmNoaXZlL2NhdGVnb3J5LS1icmFuY2gtLXZlcnNpb24iIGluIEFyY2guICBBbHNvLCBpdCBzaG91bGQgYmUgbm90ZWQKK3RoYXQgdGhlICItLWJyYW5jaCIgcG9ydGlvbiBvZiAiYXJjaGl2ZS9jYXRlZ29yeS0tYnJhbmNoLS12ZXJzaW9uIiBpcyByZWFsbHkKK29wdGlvbmFsIGluIEFyY2ggYWx0aG91Z2ggbm90IG1hbnkgcGVvcGxlIChub3IgdG9vbHMhKSBzZWVtIHRvIGtub3cgdGhpcy4KK1RoaXMgbWVhbnMgdGhhdCAiYXJjaGl2ZS9jYXRlZ29yeS0tdmVyc2lvbiIgaXMgYWxzbyBhIHZhbGlkICJicmFuY2giCitpbiBnaXQgdGVybXMuCisKK1dlIGFsd2F5cyByZWZlciB0byBBcmNoIG5hbWVzIGJ5IHRoZWlyIGZ1bGx5IHF1YWxpZmllZCB2YXJpYW50ICh3aGljaAorbWVhbnMgdGhlICJhcmNoaXZlIiBuYW1lIGlzIHByZWZpeGVkLgorCitGb3IgcGVvcGxlIHVuZmFtaWxpYXIgd2l0aCBBcmNoLCBhbiAiYXJjaGl2ZSIgaXMgdGhlIHRlcm0gZm9yICJyZXBvc2l0b3J5IiwKK2FuZCBjYW4gY29udGFpbiBtdWx0aXBsZSwgdW5yZWxhdGVkIGJyYW5jaGVzLgorCis9Y3V0CisKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2V0b3B0OjpTdGQ7Cit1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZGlyKTsKK3VzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCBybXRyZWUpOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3KGJhc2VuYW1lIGRpcm5hbWUpOwordXNlIERhdGE6OkR1bXBlciBxdy8gRHVtcGVyIC87Cit1c2UgSVBDOjpPcGVuMjsKKworJFNJR3snUElQRSd9PSJJR05PUkUiOworJEVOVnsnVFonfT0iVVRDIjsKKworbXkgJGdpdF9kaXIgPSAkRU5WeyJHSVRfRElSIn0gfHwgIi5naXQiOworJEVOVnsiR0lUX0RJUiJ9ID0gJGdpdF9kaXI7CitteSAkcHRhZ19kaXIgPSAiJGdpdF9kaXIvYXJjaGltcG9ydC90YWdzIjsKKworb3VyKCRvcHRfaCwkb3B0X2YsJG9wdF92LCRvcHRfVCwkb3B0X3QsJG9wdF9ELCRvcHRfYSwkb3B0X28pOworCitzdWIgdXNhZ2UoKSB7CisgICAgcHJpbnQgU1RERVJSIDw8RU5EOworVXNhZ2U6IGdpdCBhcmNoaW1wb3J0ICAgICAjIGZldGNoL3VwZGF0ZSBHSVQgZnJvbSBBcmNoCisgICAgICAgWyAtaCBdIFsgLXYgXSBbIC1vIF0gWyAtYSBdIFsgLWYgXSBbIC1UIF0gWyAtRCBkZXB0aCBdIFsgLXQgdGVtcGRpciBdCisgICAgICAgcmVwb3NpdG9yeS9hcmNoLWJyYW5jaCBbIHJlcG9zaXRvcnkvYXJjaC1icmFuY2hdIC4uLgorRU5ECisgICAgZXhpdCgxKTsKK30KKworZ2V0b3B0cygiZlRodmF0OkQ6Iikgb3IgdXNhZ2UoKTsKK3VzYWdlIGlmICRvcHRfaDsKKworQEFSR1YgPj0gMSBvciB1c2FnZSgpOworIyAkYXJjaF9icmFuY2hlczoKKyMgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBrZXlzOgorIyAgID0xIC0gQXJjaCB2ZXJzaW9uIC8gZ2l0ICdicmFuY2gnIGRldGVjdGVkIHZpYSBhYnJvd3NlIG9uIGEgbGltaXQKKyMgICA+MSAtIEFyY2ggdmVyc2lvbiAvIGdpdCAnYnJhbmNoJyBvZiBhbiBhdXhpbGlhcnkgYnJhbmNoIHdlJ3ZlIG1lcmdlZAorbXkgJWFyY2hfYnJhbmNoZXMgPSBtYXAgeyBteSAkYnJhbmNoID0gJF87ICRicmFuY2ggPX4gcy86W146XSokLy87ICRicmFuY2ggPT4gMSB9IEBBUkdWOworCisjICRicmFuY2hfbmFtZV9tYXA6CisjIG1hcHMgYXJjaCBicmFuY2hlcyB0byBnaXQgYnJhbmNoIG5hbWVzCitteSAlYnJhbmNoX25hbWVfbWFwID0gbWFwIHsgbS9eKC4qKTooW146XSopJC87ICQxID0+ICQyIH0gZ3JlcCB7IG0vOi8gfSBAQVJHVjsKKworJEVOVnsnVE1QRElSJ30gPSAkb3B0X3QgaWYgJG9wdF90OyAjICRFTlZ7VE1QRElSfSB3aWxsIGFmZmVjdCB0ZW1wZGlyKCkgY2FsbHM6CitteSAkdG1wID0gdGVtcGRpcignZ2l0LWFyY2hpbXBvcnQtWFhYWFhYJywgVE1QRElSID0+IDEsIENMRUFOVVAgPT4gMSk7Ciskb3B0X3YgJiYgcHJpbnQgIisgVXNpbmcgJHRtcCBhcyB0ZW1wb3JhcnkgZGlyZWN0b3J5XG4iOworCit1bmxlc3MgKC1kICRnaXRfZGlyKSB7ICMgaW5pdGlhbCBpbXBvcnQgbmVlZHMgZW1wdHkgZGlyZWN0b3J5CisgICAgb3BlbmRpciBESVIsICcuJyBvciBkaWUgIlVuYWJsZSB0byBvcGVuIGN1cnJlbnQgZGlyZWN0b3J5OiAkIVxuIjsKKyAgICB3aGlsZSAobXkgJGVudHJ5ID0gcmVhZGRpciBESVIpIHsKKyAgICAgICAgJGVudHJ5ID1+IC9eXC5cLj8kLyBvcgorICAgICAgICAgICAgZGllICJJbml0aWFsIGltcG9ydCBuZWVkcyBhbiBlbXB0eSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuIgorICAgIH0KKyAgICBjbG9zZWRpciBESVIKK30KKworbXkgJGRlZmF1bHRfYXJjaGl2ZTsJCSMgZGVmYXVsdCBBcmNoIGFyY2hpdmUKK215ICVyZWFjaGFibGUgPSAoKTsgICAgICAgICAgICAgIyBBcmNoIHJlcG9zaXRvcmllcyB3ZSBjYW4gYWNjZXNzCitteSAldW5yZWFjaGFibGUgPSAoKTsgICAgICAgICAgICMgQXJjaCByZXBvc2l0b3JpZXMgd2UgY2FuJ3QgYWNjZXNzIDo8CitteSBAcHNldHMgID0gKCk7ICAgICAgICAgICAgICAgICMgdGhlIGNvbGxlY3Rpb24KK215ICVwc2V0cyAgPSAoKTsgICAgICAgICAgICAgICAgIyB0aGUgY29sbGVjdGlvbiwgYnkgbmFtZQorbXkgJXN0YXRzICA9ICgJCQkjIFRyYWNrIHdoaWNoIHN0cmF0ZWd5IHdlIHVzZWQgdG8gaW1wb3J0OgorCWdldF90YWcgPT4gMCwgcmVwbGF5ID0+IDAsIGdldF9uZXcgPT4gMCwgZ2V0X2RlbHRhID0+IDAsCisgICAgICAgIHNpbXBsZV9jaGFuZ2VzZXQgPT4gMCwgaW1wb3J0X29yX3RhZyA9PiAwCispOworCitteSAlcnB0YWdzID0gKCk7ICAgICAgICAgICAgICAgICMgbXkgcmV2ZXJzZSBwcml2YXRlIHRhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBtYXAgYSBTSEExIHRvIGEgY29tbWl0aWQKK215ICRUTEEgPSAkRU5WeydBUkNIX0NMSUVOVCd9IHx8ICd0bGEnOworCitzdWIgZG9fYWJyb3dzZSB7CisgICAgbXkgJHN0YWdlID0gc2hpZnQ7CisgICAgd2hpbGUgKG15ICgkbGltaXQsICRsZXZlbCkgPSBlYWNoICVhcmNoX2JyYW5jaGVzKSB7CisgICAgICAgIG5leHQgdW5sZXNzICRsZXZlbCA9PSAkc3RhZ2U7CisKKwlvcGVuIEFCUk9XU0UsICIkVExBIGFicm93c2UgLWZrRCAtLW1lcmdlcyAkbGltaXQgfCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZGllICJQcm9ibGVtcyB3aXRoIHRsYSBhYnJvd3NlOiAkISI7CisKKyAgICAgICAgbXkgJXBzICAgICAgICA9ICgpOyAgICAgICAgICMgdGhlIGN1cnJlbnQgb25lCisgICAgICAgIG15ICRsYXN0c2VlbiAgPSAnJzsKKworICAgICAgICB3aGlsZSAoPEFCUk9XU0U+KSB7CisgICAgICAgICAgICBjaG9tcDsKKworICAgICAgICAgICAgIyBmaXJzdCByZWNvcmQgcGFkZGVkIHcgOCBzcGFjZXMKKyAgICAgICAgICAgIGlmIChzL15cc3s4fVxiLy8pIHsKKyAgICAgICAgICAgICAgICBteSAoJGlkLCAkdHlwZSkgPSBzcGxpdChtL1xzKy8sICRfLCAyKTsKKworICAgICAgICAgICAgICAgIG15ICVsYXN0X3BzOworICAgICAgICAgICAgICAgICMgc3RvcmUgdGhlIHJlY29yZCB3ZSBqdXN0IGNhcHR1cmVkCisgICAgICAgICAgICAgICAgaWYgKCVwcyAmJiAhZXhpc3RzICRwc2V0c3sgJHBze2lkfSB9KSB7CisgICAgICAgICAgICAgICAgICAgICVsYXN0X3BzID0gJXBzOyAjIGJyZWFrIHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAgcHVzaCAoQHBzZXRzLCBcJWxhc3RfcHMpOworICAgICAgICAgICAgICAgICAgICAkcHNldHN7ICRsYXN0X3Bze2lkfSB9ID0gXCVsYXN0X3BzOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG15ICRicmFuY2ggPSBleHRyYWN0X3ZlcnNpb25uYW1lKCRpZCk7CisgICAgICAgICAgICAgICAgJXBzID0gKCBpZCA9PiAkaWQsIGJyYW5jaCA9PiAkYnJhbmNoICk7CisgICAgICAgICAgICAgICAgaWYgKCVsYXN0X3BzICYmICgkbGFzdF9wc3ticmFuY2h9IGVxICRicmFuY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICRwc3twYXJlbnRfaWR9ID0gJGxhc3RfcHN7aWR9OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICRhcmNoX2JyYW5jaGVzeyRicmFuY2h9ID0gMTsKKyAgICAgICAgICAgICAgICAkbGFzdHNlZW4gPSAnaWQnOworCisgICAgICAgICAgICAgICAgIyBkZWFsIHdpdGggdHlwZXMgKHNob3VsZCB3b3JrIHdpdGggYmF6IG9yIHRsYSk6CisgICAgICAgICAgICAgICAgaWYgKCR0eXBlID1+IG0vXCguKmNoYW5nZXNldFwpLykgeworICAgICAgICAgICAgICAgICAgICAkcHN7dHlwZX0gPSAncyc7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHR5cGUgPX4gL1woLippbXBvcnRcKS8pIHsKKyAgICAgICAgICAgICAgICAgICAgJHBze3R5cGV9ID0gJ2knOworICAgICAgICAgICAgICAgIH0gZWxzaWYgKCR0eXBlID1+IG0vXCh0YWcuKj8oXFMrXEBcUyspLio/XCkvKSB7CisgICAgICAgICAgICAgICAgICAgICRwc3t0eXBlfSA9ICd0JzsKKyAgICAgICAgICAgICAgICAgICAgIyByZWFkIHdoaWNoIHJldmlzaW9uIHdlJ3ZlIHRhZ2dlZCB3aGVuIHdlIHBhcnNlIHRoZSBsb2cKKyAgICAgICAgICAgICAgICAgICAgJHBze3RhZ30gID0gJDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgd2FybiAiVW5rbm93biB0eXBlICR0eXBlIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAkYXJjaF9icmFuY2hlc3skYnJhbmNofSA9IDE7CisgICAgICAgICAgICAgICAgJGxhc3RzZWVuID0gJ2lkJzsKKyAgICAgICAgICAgIH0gZWxzaWYgKHMvXlxzezEwfS8vKSB7CisgICAgICAgICAgICAgICAgIyAxMCBsZWFkaW5nIHNwYWNlcyBvciBtb3JlCisgICAgICAgICAgICAgICAgIyBpbmRpY2F0ZSBjb21taXQgbWV0YWRhdGEKKworICAgICAgICAgICAgICAgICMgZGF0ZQorICAgICAgICAgICAgICAgIGlmICgkbGFzdHNlZW4gZXEgJ2lkJyAmJiBtL14oXGR7NH0tXGRcZC1cZFxkIFxkXGQ6XGRcZDpcZFxkKS8peworICAgICAgICAgICAgICAgICAgICAkcHN7ZGF0ZX0gICA9ICQxOworICAgICAgICAgICAgICAgICAgICAkbGFzdHNlZW4gPSAnZGF0ZSc7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJF8gZXEgJ21lcmdlcyBpbjonKSB7CisgICAgICAgICAgICAgICAgICAgICRwc3ttZXJnZXN9ID0gW107CisgICAgICAgICAgICAgICAgICAgICRsYXN0c2VlbiA9ICdtZXJnZXMnOworICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRsYXN0c2VlbiBlcSAnbWVyZ2VzJyAmJiBzL15cc3syfS8vKSB7CisgICAgICAgICAgICAgICAgICAgIG15ICRpZCA9ICRfOworICAgICAgICAgICAgICAgICAgICBwdXNoIChAeyRwc3ttZXJnZXN9fSwgJGlkKTsKKworICAgICAgICAgICAgICAgICAgICAjIGFnZ3Jlc3NpdmUgYnJhbmNoIGZpbmRpbmc6CisgICAgICAgICAgICAgICAgICAgIGlmICgkb3B0X0QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15ICRicmFuY2ggPSBleHRyYWN0X3ZlcnNpb25uYW1lKCRpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBteSAkcmVwbyA9IGV4dHJhY3RfcmVwb25hbWUoJGJyYW5jaCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmNoaXZlX3JlYWNoYWJsZSgkcmVwbykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmluZWQgJGFyY2hfYnJhbmNoZXN7JGJyYW5jaH0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJjaF9icmFuY2hlc3skYnJhbmNofSA9ICRzdGFnZSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB3YXJuICJtb3JlIG1ldGFkYXRhIGFmdGVyIG1lcmdlcyE/OiAkX1xuIiB1bmxlc3MgL15ccyokLzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoJXBzICYmICFleGlzdHMgJHBzZXRzeyAkcHN7aWR9IH0pIHsKKyAgICAgICAgICAgIG15ICV0ZW1wID0gJXBzOyAgICAgICAgICMgYnJlYWsgcmVmZXJlbmNlcworICAgICAgICAgICAgaWYgKEBwc2V0cyAmJiAkcHNldHNbJCNwc2V0c117YnJhbmNofSBlcSAkcHN7YnJhbmNofSkgeworICAgICAgICAgICAgICAgICR0ZW1we3BhcmVudF9pZH0gPSAkcHNldHNbJCNwc2V0c117aWR9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVzaCAoQHBzZXRzLCBcJXRlbXApOworICAgICAgICAgICAgJHBzZXRzeyAkdGVtcHtpZH0gfSA9IFwldGVtcDsKKyAgICAgICAgfQorCisgICAgICAgIGNsb3NlIEFCUk9XU0Ugb3IgZGllICIkVExBIGFicm93c2UgZmFpbGVkIG9uICRsaW1pdFxuIjsKKyAgICB9Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZW5kIGZvcmVhY2ggJHJvb3QKKworZG9fYWJyb3dzZSgxKTsKK215ICRkZXB0aCA9IDI7Ciskb3B0X0QgfHw9IDA7Cit3aGlsZSAoJGRlcHRoIDw9ICRvcHRfRCkgeworICAgIGRvX2Ficm93c2UoJGRlcHRoKTsKKyAgICAkZGVwdGgrKzsKK30KKworIyMgT3JkZXIgcGF0Y2hlcyBieSB0aW1lCisjIEZJWE1FIHNlZSBpZiB3ZSBjYW4gZmluZCBhIG1vcmUgb3B0aW1hbCB3YXkgdG8gZG8gdGhpcyBieSBncmFwaGluZworIyB0aGUgYW5jZXN0cnkgZGF0YSBhbmQgd2Fsa2luZyBpdCwgdGhhdCB3YXkgd2Ugd29uJ3QgaGF2ZSB0byByZWx5IG9uCisjIGNsaWVudC1zdXBwbGllZCBkYXRlcworQHBzZXRzID0gc29ydCB7JGEtPntkYXRlfS4kYi0+e2lkfSBjbXAgJGItPntkYXRlfS4kYi0+e2lkfX0gQHBzZXRzOworCisjcHJpbnQgRHVtcGVyIFxAcHNldHM7CisKKyMjCisjIyBUT0RPIGNsZWFudXAgaXJyZWxldmFudCBwYXRjaGVzCisjIyAgICAgIGFuZCBwdXQgYW4gaW5pdGlhbCBpbXBvcnQKKyMjICAgICAgb3IgYSBmdWxsIHRhZworbXkgJGltcG9ydCA9IDA7Cit1bmxlc3MgKC1kICRnaXRfZGlyKSB7ICMgaW5pdGlhbCBpbXBvcnQKKyAgICBpZiAoJHBzZXRzWzBde3R5cGV9IGVxICdpJyB8fCAkcHNldHNbMF17dHlwZX0gZXEgJ3QnKSB7CisgICAgICAgIHByaW50ICJTdGFydGluZyBpbXBvcnQgZnJvbSAkcHNldHNbMF17aWR9XG4iOworCWBnaXQtaW5pdGA7CisJZGllICQhIGlmICQ/OworCSRpbXBvcnQgPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIGRpZSAiTmVlZCB0byBzdGFydCBmcm9tIGFuIGltcG9ydCBvciBhIHRhZyAtLSBjYW5ub3QgdXNlICRwc2V0c1swXXtpZH0iOworICAgIH0KK30gZWxzZSB7ICAgICMgcHJvZ3Jlc3NpbmcgYW4gaW1wb3J0CisgICAgIyBsb2FkIHRoZSBycHRhZ3MKKyAgICBvcGVuZGlyKERJUiwgJHB0YWdfZGlyKQorCXx8IGRpZSAiY2FuJ3Qgb3BlbmRpcjogJCEiOworICAgIHdoaWxlIChteSAkZmlsZSA9IHJlYWRkaXIoRElSKSkgeworICAgICAgICAjIHNraXAgbm9uLWludGVyZXN0aW5nLWZpbGVzCisgICAgICAgIG5leHQgdW5sZXNzIC1mICIkcHRhZ19kaXIvJGZpbGUiOworCisgICAgICAgICMgY29udmVydCBmaXJzdCAnLS0nIHRvICcvJyBmcm9tIG9sZCBnaXQtYXJjaGltcG9ydCB0byB1c2UKKyAgICAgICAgIyBhcyBhbiBhcmNoaXZlbmFtZS9jLS1iLS12IHByaXZhdGUgdGFnCisgICAgICAgIGlmICgkZmlsZSAhfiBtISwhKSB7CisgICAgICAgICAgICBteSAkb2xkZmlsZSA9ICRmaWxlOworICAgICAgICAgICAgJGZpbGUgPX4gcyEtLSEsITsKKyAgICAgICAgICAgIHByaW50IFNUREVSUiAiY29udmVydGluZyBvbGQgdGFnICRvbGRmaWxlIHRvICRmaWxlXG4iOworICAgICAgICAgICAgcmVuYW1lKCIkcHRhZ19kaXIvJG9sZGZpbGUiLCAiJHB0YWdfZGlyLyRmaWxlIikgb3IgZGllICQhOworICAgICAgICB9CisJbXkgJHNoYSA9IHB0YWcoJGZpbGUpOworCWNob21wICRzaGE7CisJJHJwdGFnc3skc2hhfSA9ICRmaWxlOworICAgIH0KKyAgICBjbG9zZWRpciBESVI7Cit9CisKKyMgcHJvY2VzcyBwYXRjaHNldHMKKyMgZXh0cmFjdCB0aGUgQXJjaCByZXBvc2l0b3J5IG5hbWUgKEFyY2ggImFyY2hpdmUiIGluIEFyY2gtc3BlYWspCitzdWIgZXh0cmFjdF9yZXBvbmFtZSB7CisgICAgbXkgJGZxX2N2YnIgPSBzaGlmdDsgIyBhcmNoaXZlbmFtZS9bW1tbY2F0ZWdvcnldYnJhbmNoXXZlcnNpb25dcmV2aXNpb25dCisgICAgcmV0dXJuIChzcGxpdCgvXC8vLCAkZnFfY3ZicikpWzBdOworfQorCitzdWIgZXh0cmFjdF92ZXJzaW9ubmFtZSB7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICAkbmFtZSA9fiBzLy0tKD86cGF0Y2h8dmVyc2lvbig/OmZpeCk/fGJhc2UpLVxkKyQvLzsKKyAgICByZXR1cm4gJG5hbWU7Cit9CisKKyMgY29udmVydCBhIGZ1bGx5LXF1YWxpZmllZCByZXZpc2lvbiBvciB2ZXJzaW9uIHRvIGEgdW5pcXVlIGRpcm5hbWU6CisjICAgbm9ybWFscGVyc29uQHloYnQubmV0LTA1L21wZC0tdWNsaW51eC0tMS0tcGF0Y2gtMgorIyBiZWNvbWVzOiBub3JtYWxwZXJzb25AeWhidC5uZXQtMDUsbXBkLS11Y2xpbnV4LS0xCisjCisjIHRoZSBnaXQgbm90aW9uIG9mIGEgYnJhbmNoIGlzIGNsb3NlciB0bworIyBhcmNoaXZlL2NhdGVnb3J5LS1icmFuY2gtLXZlcnNpb24gdGhhbiBhcmNoaXZlL2NhdGVnb3J5LS1icmFuY2gsIHNvIHdlCisjIHVzZSB0aGlzIHRvIGNvbnZlcnQgdG8gZ2l0IGJyYW5jaCBuYW1lcy4KKyMgQWxzbywga2VlcCBhcmNoaXZlIG5hbWVzIGJ1dCByZXBsYWNlICcvJyB3aXRoICcsJyBzaW5jZSBpdCB3b24ndCByZXF1aXJlCisjIHN1YmRpcmVjdG9yaWVzLCBhbmQgaXMgc2FmZXIgdGhhbiBzd2FwcGluZyAnLS0nIHdoaWNoIGNvdWxkIGNvbmZ1c2UKKyMgcmV2ZXJzZS1tYXBwaW5nIHdoZW4gZGVhbGluZyB3aXRoIGJhc3RhcmQgYnJhbmNoZXMgdGhhdAorIyBhcmUganVzdCBhcmNoaXZlL2NhdGVnb3J5LS12ZXJzaW9uICAobm8gLS1icmFuY2gpCitzdWIgdHJlZV9kaXJuYW1lIHsKKyAgICBteSAkcmV2aXNpb24gPSBzaGlmdDsKKyAgICBteSAkbmFtZSA9IGV4dHJhY3RfdmVyc2lvbm5hbWUoJHJldmlzaW9uKTsKKyAgICAkbmFtZSA9fiBzIy8jLCM7CisgICAgcmV0dXJuICRuYW1lOworfQorCisjIG9sZCB2ZXJzaW9ucyBvZiBnaXQtYXJjaGltcG9ydCBqdXN0IHVzZSB0aGUgPGNhdGVnb3J5LS1icmFuY2g+IHBhcnQ6CitzdWIgb2xkX3N0eWxlX2JyYW5jaG5hbWUgeworICAgIG15ICRpZCA9IHNoaWZ0OworICAgIG15ICRyZXQgPSBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdwYXJzZS1wYWNrYWdlLW5hbWUnLCctcCcsJGlkKTsKKyAgICBjaG9tcCAkcmV0OworICAgIHJldHVybiAkcmV0OworfQorCisqZ2l0X2RlZmF1bHRfYnJhbmNobmFtZSA9ICRvcHRfbyA/ICpvbGRfc3R5bGVfYnJhbmNobmFtZSA6ICp0cmVlX2Rpcm5hbWU7CisKKyMgcmV0cmlldmUgZGVmYXVsdCBhcmNoaXZlLCBzaW5jZSAkYnJhbmNoX25hbWVfbWFwIGtleXMgbWlnaHQgbm90IGluY2x1ZGUgaXQKK3N1YiBnZXRfZGVmYXVsdF9hcmNoaXZlIHsKKyAgICBpZiAoIWRlZmluZWQgJGRlZmF1bHRfYXJjaGl2ZSkgeworICAgICAgICAkZGVmYXVsdF9hcmNoaXZlID0gc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnbXktZGVmYXVsdC1hcmNoaXZlJyk7CisgICAgICAgIGNob21wICRkZWZhdWx0X2FyY2hpdmU7CisgICAgfQorICAgIHJldHVybiAkZGVmYXVsdF9hcmNoaXZlOworfQorCitzdWIgZ2l0X2JyYW5jaG5hbWUgeworICAgIG15ICRyZXZpc2lvbiA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gZXh0cmFjdF92ZXJzaW9ubmFtZSgkcmV2aXNpb24pOworCisgICAgaWYgKGV4aXN0cyAkYnJhbmNoX25hbWVfbWFweyRuYW1lfSkgeworCXJldHVybiAkYnJhbmNoX25hbWVfbWFweyRuYW1lfTsKKworICAgIH0gZWxzaWYgKCRuYW1lID1+IG0jXihbXi9dKikvKC4qKSQjCisJICAgICAmJiAkMSBlcSBnZXRfZGVmYXVsdF9hcmNoaXZlKCkKKwkgICAgICYmIGV4aXN0cyAkYnJhbmNoX25hbWVfbWFweyQyfSkgeworCSMgdGhlIG5hbWVzIGdpdmVuIGluIHRoZSBjb21tYW5kLWxpbmUgbGFja2VkIHRoZSBhcmNoaXZlLgorCXJldHVybiAkYnJhbmNoX25hbWVfbWFweyQyfTsKKworICAgIH0gZWxzZSB7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2JyYW5jaG5hbWUoJHJldmlzaW9uKTsKKyAgICB9Cit9CisKK3N1YiBwcm9jZXNzX3BhdGNoc2V0X2FjY3VyYXRlIHsKKyAgICBteSAkcHMgPSBzaGlmdDsKKworICAgICMgc3dpdGNoIHRvIHRoYXQgYnJhbmNoIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IGluIHRoYXQgYnJhbmNoOgorICAgIGlmICgtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kcHMtPnticmFuY2h9IikgeworICAgICAgIHN5c3RlbSgnZ2l0LWNoZWNrb3V0JywnLWYnLCRwcy0+e2JyYW5jaH0pID09IDAgb3IgZGllICIkISAkP1xuIjsKKworICAgICAgICMgcmVtb3ZlIGFueSBvbGQgc3R1ZmYgdGhhdCBnb3QgbGVmdG92ZXI6CisgICAgICAgbXkgJHJtID0gc2FmZV9waXBlX2NhcHR1cmUoJ2dpdC1scy1maWxlcycsJy0tb3RoZXJzJywnLXonKTsKKyAgICAgICBybXRyZWUoc3BsaXQoL1wwLywkcm0pKSBpZiAkcm07CisgICAgfQorCisgICAgIyBBcHBseSB0aGUgaW1wb3J0L2NoYW5nZXNldC9tZXJnZSBpbnRvIHRoZSB3b3JraW5nIHRyZWUKKyAgICBteSAkZGlyID0gc3luY190b19wcygkcHMpOworICAgICMgcmVhZCB0aGUgbmV3IGxvZyBlbnRyeToKKyAgICBteSBAY29tbWl0bG9nID0gc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnY2F0LWxvZycsJy1kJywkZGlyLCRwcy0+e2lkfSk7CisgICAgZGllICJFcnJvciBpbiBjYXQtbG9nOiAkISIgaWYgJD87CisgICAgY2hvbXAgQGNvbW1pdGxvZzsKKworICAgICMgZ3JhYiB2YXJpYWJsZXMgd2Ugd2FudCBmcm9tIHRoZSBsb2csIG5ldyBmaWVsZHMgZ2V0IGFkZGVkIHRvICRwczoKKyAgICAjIChhdXRob3IsIGRhdGUsIGVtYWlsLCBzdW1tYXJ5LCBtZXNzYWdlIGJvZHkgLi4uKQorICAgIHBhcnNlbG9nKCRwcywgXEBjb21taXRsb2cpOworCisgICAgaWYgKCRwcy0+e2lkfSA9fiAvLS1iYXNlLTAkLyAmJiAkcHMtPntpZH0gbmUgJHBzZXRzWzBde2lkfSkgeworICAgICAgICAjIHRoaXMgc2hvdWxkIHdvcmsgd2hlbiBpbXBvcnRpbmcgY29udGludWF0aW9ucworICAgICAgICBpZiAoJHBzLT57dGFnfSAmJiAobXkgJGJyYW5jaHBvaW50ID0gZXZhbCB7IHB0YWcoJHBzLT57dGFnfSkgfSkpIHsKKworICAgICAgICAgICAgIyBmaW5kIHdoZXJlIHdlIGFyZSBzdXBwb3NlZCB0byBicmFuY2ggZnJvbQorCSAgICBpZiAoISAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kcHMtPnticmFuY2h9IikgeworCQlzeXN0ZW0oJ2dpdC1icmFuY2gnLCRwcy0+e2JyYW5jaH0sJGJyYW5jaHBvaW50KSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisKKwkJIyBXZSB0cnVzdCBBcmNoIHdpdGggdGhlIGZhY3QgdGhhdCB0aGlzIGlzIGp1c3QgYSB0YWcsCisJCSMgYW5kIGl0IGRvZXMgbm90IGFmZmVjdCB0aGUgc3RhdGUgb2YgdGhlIHRyZWUsIHNvCisJCSMgd2UganVzdCB0YWcgYW5kIG1vdmUgb24uICBJZiB0aGUgdXNlciByZWFsbHkgd2FudHMgdXMKKwkJIyB0byBjb25zb2xpZGF0ZSBtb3JlIGJyYW5jaGVzIGludG8gb25lLCBkb24ndCB0YWcgYmVjYXVzZQorCQkjIHRoZSB0YWcgbmFtZSB3b3VsZCBiZSBhbHJlYWR5IHRha2VuLgorCQl0YWcoJHBzLT57aWR9LCAkYnJhbmNocG9pbnQpOworCQlwdGFnKCRwcy0+e2lkfSwgJGJyYW5jaHBvaW50KTsKKwkJcHJpbnQgIiAqIFRhZ2dlZCAkcHMtPntpZH0gYXQgJGJyYW5jaHBvaW50XG4iOworCSAgICB9CisJICAgIHN5c3RlbSgnZ2l0LWNoZWNrb3V0JywnLWYnLCRwcy0+e2JyYW5jaH0pID09IDAgb3IgZGllICIkISAkP1xuIjsKKworICAgICAgICAgICAgIyByZW1vdmUgYW55IG9sZCBzdHVmZiB0aGF0IGdvdCBsZWZ0b3ZlcjoKKyAgICAgICAgICAgIG15ICRybSA9IHNhZmVfcGlwZV9jYXB0dXJlKCdnaXQtbHMtZmlsZXMnLCctLW90aGVycycsJy16Jyk7CisgICAgICAgICAgICBybXRyZWUoc3BsaXQoL1wwLywkcm0pKSBpZiAkcm07CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdhcm4gIlRhZ2dpbmcgZnJvbSB1bmtub3duIGlkIHVuc3VwcG9ydGVkXG4iIGlmICRwcy0+e3RhZ307CisgICAgICAgIH0KKyAgICAgICAgIyBhbGxvdyBtdWx0aXBsZSBiYXNlcy9pbXBvcnRzIGhlcmUgc2luY2UgQXJjaCBzdXBwb3J0cyBjaGVycnktcGlja3MKKyAgICAgICAgIyBmcm9tIHVucmVsYXRlZCB0cmVlcworICAgIH0KKworICAgICMgdXBkYXRlIHRoZSBpbmRleCB3aXRoIGFsbCB0aGUgY2hhbmdlcyB3ZSBnb3QKKyAgICBzeXN0ZW0oJ2dpdC1kaWZmLWZpbGVzIC0tbmFtZS1vbmx5IC16IHwgJy4KKyAgICAgICAgICAgICdnaXQtdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC16IC0tc3RkaW4nKSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisgICAgc3lzdGVtKCdnaXQtbHMtZmlsZXMgLS1vdGhlcnMgLXogfCAnLgorICAgICAgICAgICAgJ2dpdC11cGRhdGUtaW5kZXggLS1hZGQgLXogLS1zdGRpbicpID09IDAgb3IgZGllICIkISAkP1xuIjsKKyAgICByZXR1cm4gMTsKK30KKworIyB0aGUgbmF0aXZlIGNoYW5nZXNldCBwcm9jZXNzaW5nIHN0cmF0ZWd5LiAgVGhpcyBpcyB2ZXJ5IGZhc3QsIGJ1dAorIyBkb2VzIG5vdCBoYW5kbGUgcGVybWlzc2lvbnMgb3IgYW55IHJlbmFtZXMgaW52b2x2aW5nIGRpcmVjdG9yaWVzCitzdWIgcHJvY2Vzc19wYXRjaHNldF9mYXN0IHsKKyAgICBteSAkcHMgPSBzaGlmdDsKKyAgICAjCisgICAgIyBjcmVhdGUgdGhlIGJyYW5jaCBpZiBuZWVkZWQKKyAgICAjCisgICAgaWYgKCRwcy0+e3R5cGV9IGVxICdpJyAmJiAhJGltcG9ydCkgeworICAgICAgICBkaWUgIlNob3VsZCBub3QgaGF2ZSBtb3JlIHRoYW4gb25lICdJbml0aWFsIGltcG9ydCcgcGVyIEdJVCBpbXBvcnQ6ICRwcy0+e2lkfSI7CisgICAgfQorCisgICAgdW5sZXNzICgkaW1wb3J0KSB7ICMgc2tpcCBmb3IgaW1wb3J0CisgICAgICAgIGlmICggLWUgIiRnaXRfZGlyL3JlZnMvaGVhZHMvJHBzLT57YnJhbmNofSIpIHsKKyAgICAgICAgICAgICMgd2Uga25vdyBhYm91dCB0aGlzIGJyYW5jaAorICAgICAgICAgICAgc3lzdGVtKCdnaXQtY2hlY2tvdXQnLCRwcy0+e2JyYW5jaH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyBuZXcgYnJhbmNoISB3ZSBuZWVkIHRvIHZlcmlmeSBhIGZldyB0aGluZ3MKKyAgICAgICAgICAgIGRpZSAiQnJhbmNoIG9uIGEgbm9uLXRhZyEiIHVubGVzcyAkcHMtPnt0eXBlfSBlcSAndCc7CisgICAgICAgICAgICBteSAkYnJhbmNocG9pbnQgPSBwdGFnKCRwcy0+e3RhZ30pOworICAgICAgICAgICAgZGllICJUYWdnaW5nIGZyb20gdW5rbm93biBpZCB1bnN1cHBvcnRlZDogJHBzLT57dGFnfSIKKyAgICAgICAgICAgICAgICB1bmxlc3MgJGJyYW5jaHBvaW50OworCisgICAgICAgICAgICAjIGZpbmQgd2hlcmUgd2UgYXJlIHN1cHBvc2VkIHRvIGJyYW5jaCBmcm9tCisJICAgIGlmICghIC1lICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRwcy0+e2JyYW5jaH0iKSB7CisJCXN5c3RlbSgnZ2l0LWJyYW5jaCcsJHBzLT57YnJhbmNofSwkYnJhbmNocG9pbnQpID09IDAgb3IgZGllICIkISAkP1xuIjsKKworCQkjIFdlIHRydXN0IEFyY2ggd2l0aCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMganVzdCBhIHRhZywKKwkJIyBhbmQgaXQgZG9lcyBub3QgYWZmZWN0IHRoZSBzdGF0ZSBvZiB0aGUgdHJlZSwgc28KKwkJIyB3ZSBqdXN0IHRhZyBhbmQgbW92ZSBvbi4gIElmIHRoZSB1c2VyIHJlYWxseSB3YW50cyB1cworCQkjIHRvIGNvbnNvbGlkYXRlIG1vcmUgYnJhbmNoZXMgaW50byBvbmUsIGRvbid0IHRhZyBiZWNhdXNlCisJCSMgdGhlIHRhZyBuYW1lIHdvdWxkIGJlIGFscmVhZHkgdGFrZW4uCisJCXRhZygkcHMtPntpZH0sICRicmFuY2hwb2ludCk7CisJCXB0YWcoJHBzLT57aWR9LCAkYnJhbmNocG9pbnQpOworCQlwcmludCAiICogVGFnZ2VkICRwcy0+e2lkfSBhdCAkYnJhbmNocG9pbnRcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdC1jaGVja291dCcsJHBzLT57YnJhbmNofSkgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZGllICQhIGlmICQ/OworICAgIH0KKworICAgICMKKyAgICAjIEFwcGx5IHRoZSBpbXBvcnQvY2hhbmdlc2V0L21lcmdlIGludG8gdGhlIHdvcmtpbmcgdHJlZQorICAgICMKKyAgICBpZiAoJHBzLT57dHlwZX0gZXEgJ2knIHx8ICRwcy0+e3R5cGV9IGVxICd0JykgeworICAgICAgICBhcHBseV9pbXBvcnQoJHBzKSBvciBkaWUgJCE7CisgICAgICAgICRzdGF0c3tpbXBvcnRfb3JfdGFnfSsrOworICAgICAgICAkaW1wb3J0PTA7CisgICAgfSBlbHNpZiAoJHBzLT57dHlwZX0gZXEgJ3MnKSB7CisgICAgICAgIGFwcGx5X2NzZXQoJHBzKTsKKyAgICAgICAgJHN0YXRze3NpbXBsZV9jaGFuZ2VzZXR9Kys7CisgICAgfQorCisgICAgIworICAgICMgcHJlcGFyZSB1cGRhdGUgZ2l0J3MgaW5kZXgsIGJhc2VkIG9uIHdoYXQgYXJjaCBrbm93cworICAgICMgYWJvdXQgdGhlIHBzZXQsIHJlc29sdmUgcGFyZW50cywgZXRjCisgICAgIworCisgICAgbXkgQGNvbW1pdGxvZyA9IHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ2NhdC1hcmNoaXZlLWxvZycsJHBzLT57aWR9KTsKKyAgICBkaWUgIkVycm9yIGluIGNhdC1hcmNoaXZlLWxvZzogJCEiIGlmICQ/OworCisgICAgcGFyc2Vsb2coJHBzLFxAY29tbWl0bG9nKTsKKworICAgICMgaW1wb3J0cyBkb24ndCBnaXZlIHVzIGdvb2QgaW5mbworICAgICMgb24gYWRkZWQgZmlsZXMuIFNoYW1lIG9uIHRoZW0KKyAgICBpZiAoJHBzLT57dHlwZX0gZXEgJ2knIHx8ICRwcy0+e3R5cGV9IGVxICd0JykgeworICAgICAgICBzeXN0ZW0oJ2dpdC1scy1maWxlcyAtLWRlbGV0ZWQgLXogfCAnLgorICAgICAgICAgICAgICAgICdnaXQtdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC16IC0tc3RkaW4nKSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisgICAgICAgIHN5c3RlbSgnZ2l0LWxzLWZpbGVzIC0tb3RoZXJzIC16IHwgJy4KKyAgICAgICAgICAgICAgICAnZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCAteiAtLXN0ZGluJykgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworICAgIH0KKworICAgICMgVE9ETzogaGFuZGxlIHJlbW92ZWRfZGlyZWN0b3JpZXMgYW5kIHJlbmFtZWRfZGlyZWN0b3JpZXM6CisKKyAgICBpZiAobXkgJGRlbCA9ICRwcy0+e3JlbW92ZWRfZmlsZXN9KSB7CisgICAgICAgIHVubGluayBAJGRlbDsKKyAgICAgICAgd2hpbGUgKEAkZGVsKSB7CisgICAgICAgICAgICBteSBAc2xpY2UgPSBzcGxpY2UoQCRkZWwsIDAsIDEwMCk7CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdC11cGRhdGUtaW5kZXgnLCctLXJlbW92ZScsJy0tJyxAc2xpY2UpID09IDAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUgIkVycm9yIGluIGdpdC11cGRhdGUtaW5kZXggLS1yZW1vdmU6ICQhICQ/XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG15ICRyZW4gPSAkcHMtPntyZW5hbWVkX2ZpbGVzfSkgeyAgICAgICAgICAgICAgICAjIHJlbmFtZWQKKyAgICAgICAgaWYgKEAkcmVuICUgMikgeworICAgICAgICAgICAgZGllICJPZGQgbnVtYmVyIG9mIGVudHJpZXMgaW4gcmVuYW1lIT8iOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKEAkcmVuKSB7CisgICAgICAgICAgICBteSAkZnJvbSA9IHNoaWZ0IEAkcmVuOworICAgICAgICAgICAgbXkgJHRvICAgPSBzaGlmdCBAJHJlbjsKKworICAgICAgICAgICAgdW5sZXNzICgtZCBkaXJuYW1lKCR0bykpIHsKKyAgICAgICAgICAgICAgICBta3BhdGgoZGlybmFtZSgkdG8pKTsgIyB3aWxsIGRpZSBvbiBlcnIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICMgcHJpbnQgIm1vdmluZyAkZnJvbSAkdG8iOworICAgICAgICAgICAgcmVuYW1lKCRmcm9tLCAkdG8pIG9yIGRpZSAiRXJyb3IgcmVuYW1pbmcgJyRmcm9tJyAnJHRvJzogJCFcbiI7CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdC11cGRhdGUtaW5kZXgnLCctLXJlbW92ZScsJy0tJywkZnJvbSkgPT0gMCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiRXJyb3IgaW4gZ2l0LXVwZGF0ZS1pbmRleCAtLXJlbW92ZTogJCEgJD9cbiI7CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdC11cGRhdGUtaW5kZXgnLCctLWFkZCcsJy0tJywkdG8pID09IDAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUgIkVycm9yIGluIGdpdC11cGRhdGUtaW5kZXggLS1hZGQ6ICQhICQ/XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG15ICRhZGQgPSAkcHMtPntuZXdfZmlsZXN9KSB7CisgICAgICAgIHdoaWxlIChAJGFkZCkgeworICAgICAgICAgICAgbXkgQHNsaWNlID0gc3BsaWNlKEAkYWRkLCAwLCAxMDApOworICAgICAgICAgICAgc3lzdGVtKCdnaXQtdXBkYXRlLWluZGV4JywnLS1hZGQnLCctLScsQHNsaWNlKSA9PSAwIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllICJFcnJvciBpbiBnaXQtdXBkYXRlLWluZGV4IC0tYWRkOiAkISAkP1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChteSAkbW9kID0gJHBzLT57bW9kaWZpZWRfZmlsZXN9KSB7CisgICAgICAgIHdoaWxlIChAJG1vZCkgeworICAgICAgICAgICAgbXkgQHNsaWNlID0gc3BsaWNlKEAkbW9kLCAwLCAxMDApOworICAgICAgICAgICAgc3lzdGVtKCdnaXQtdXBkYXRlLWluZGV4JywnLS0nLEBzbGljZSkgPT0gMCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiRXJyb3IgaW4gZ2l0LXVwZGF0ZS1pbmRleDogJCEgJD9cbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7ICMgd2Ugc3VjY2Vzc2Z1bGx5IGFwcGxpZWQgdGhlIGNoYW5nZXNldAorfQorCitpZiAoJG9wdF9mKSB7CisgICAgcHJpbnQgIldpbGwgaW1wb3J0IHBhdGNoc2V0cyB1c2luZyB0aGUgZmFzdCBzdHJhdGVneVxuIiwKKyAgICAgICAgICAgICJSZW5hbWVkIGRpcmVjdG9yaWVzIGFuZCBwZXJtaXNzaW9uIGNoYW5nZXMgd2lsbCBiZSBtaXNzZWRcbiI7CisgICAgKnByb2Nlc3NfcGF0Y2hzZXQgPSAqcHJvY2Vzc19wYXRjaHNldF9mYXN0OworfSBlbHNlIHsKKyAgICBwcmludCAiVXNpbmcgdGhlIGRlZmF1bHQgKGFjY3VyYXRlKSBpbXBvcnQgc3RyYXRlZ3kuXG4iLAorICAgICAgICAgICAgIlRoaW5ncyBtYXkgYmUgYSBiaXQgc2xvd1xuIjsKKyAgICAqcHJvY2Vzc19wYXRjaHNldCA9ICpwcm9jZXNzX3BhdGNoc2V0X2FjY3VyYXRlOworfQorCitmb3JlYWNoIG15ICRwcyAoQHBzZXRzKSB7CisgICAgIyBwcm9jZXNzIHBhdGNoc2V0cworICAgICRwcy0+e2JyYW5jaH0gPSBnaXRfYnJhbmNobmFtZSgkcHMtPntpZH0pOworCisgICAgIworICAgICMgZW5zdXJlIHdlIGhhdmUgYSBjbGVhbiBzdGF0ZQorICAgICMKKyAgICBpZiAobXkgJGRpcnR5ID0gYGdpdC1kaWZmLWZpbGVzYCkgeworICAgICAgICBkaWUgIlVuY2xlYW4gdHJlZSB3aGVuIGFib3V0IHRvIHByb2Nlc3MgJHBzLT57aWR9ICIgLgorICAgICAgICAgICAgIiAtIGRpZCB3ZSBmYWlsIHRvIGNvbW1pdCBjbGVhbmx5IGJlZm9yZT9cbiRkaXJ0eSI7CisgICAgfQorICAgIGRpZSAkISBpZiAkPzsKKworICAgICMKKyAgICAjIHNraXAgY29tbWl0cyBhbHJlYWR5IGluIHJlcG8KKyAgICAjCisgICAgaWYgKHB0YWcoJHBzLT57aWR9KSkgeworICAgICAgJG9wdF92ICYmIHByaW50ICIgKiBTa2lwcGluZyBhbHJlYWR5IGltcG9ydGVkOiAkcHMtPntpZH1cbiI7CisgICAgICBuZXh0OworICAgIH0KKworICAgIHByaW50ICIgKiBTdGFydGluZyB0byB3b3JrIG9uICRwcy0+e2lkfVxuIjsKKworICAgIHByb2Nlc3NfcGF0Y2hzZXQoJHBzKSBvciBuZXh0OworCisgICAgIyB3YXJuICJlcnJvcnMgd2hlbiBydW5uaW5nIGdpdC11cGRhdGUtaW5kZXghICQhIjsKKyAgICBteSAkdHJlZSA9IGBnaXQtd3JpdGUtdHJlZWA7CisgICAgZGllICJjYW5ub3Qgd3JpdGUgdHJlZSAkISIgaWYgJD87CisgICAgY2hvbXAgJHRyZWU7CisKKyAgICAjCisgICAgIyBXaG8ncyB5b3VyIGRhZGR5PworICAgICMKKyAgICBteSBAcGFyOworICAgIGlmICggLWUgIiRnaXRfZGlyL3JlZnMvaGVhZHMvJHBzLT57YnJhbmNofSIpIHsKKyAgICAgICAgaWYgKG9wZW4gSEVBRCwgIjwiLCIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRwcy0+e2JyYW5jaH0iKSB7CisgICAgICAgICAgICBteSAkcCA9IDxIRUFEPjsKKyAgICAgICAgICAgIGNsb3NlIEhFQUQ7CisgICAgICAgICAgICBjaG9tcCAkcDsKKyAgICAgICAgICAgIHB1c2ggQHBhciwgJy1wJywgJHA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoJHBzLT57dHlwZX0gZXEgJ3MnKSB7CisgICAgICAgICAgICAgICAgd2FybiAiQ291bGQgbm90IGZpbmQgdGhlIHJpZ2h0IGhlYWQgZm9yIHRoZSBicmFuY2ggJHBzLT57YnJhbmNofSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJHBzLT57bWVyZ2VzfSkgeworICAgICAgICBwdXNoIEBwYXIsIGZpbmRfcGFyZW50cygkcHMpOworICAgIH0KKworICAgICMKKyAgICAjIENvbW1pdCwgdGFnIGFuZCBjbGVhbiBzdGF0ZQorICAgICMKKyAgICAkRU5We1RafSAgICAgICAgICAgICAgICAgID0gJ0dNVCc7CisgICAgJEVOVntHSVRfQVVUSE9SX05BTUV9ICAgICA9ICRwcy0+e2F1dGhvcn07CisgICAgJEVOVntHSVRfQVVUSE9SX0VNQUlMfSAgICA9ICRwcy0+e2VtYWlsfTsKKyAgICAkRU5We0dJVF9BVVRIT1JfREFURX0gICAgID0gJHBzLT57ZGF0ZX07CisgICAgJEVOVntHSVRfQ09NTUlUVEVSX05BTUV9ICA9ICRwcy0+e2F1dGhvcn07CisgICAgJEVOVntHSVRfQ09NTUlUVEVSX0VNQUlMfSA9ICRwcy0+e2VtYWlsfTsKKyAgICAkRU5We0dJVF9DT01NSVRURVJfREFURX0gID0gJHBzLT57ZGF0ZX07CisKKyAgICBteSAkcGlkID0gb3BlbjIoKlJFQURFUiwgKldSSVRFUiwnZ2l0LWNvbW1pdC10cmVlJywkdHJlZSxAcGFyKQorICAgICAgICBvciBkaWUgJCE7CisgICAgcHJpbnQgV1JJVEVSICRwcy0+e3N1bW1hcnl9LCJcblxuIjsKKworICAgICMgb25seSBwcmludCBtZXNzYWdlIGlmIGl0J3Mgbm90IGVtcHR5LCB0byBhdm9pZCBhIHNwdXJpb3VzIGJsYW5rIGxpbmU7CisgICAgIyBhbHNvIGFwcGVuZCBhbiBleHRyYSBuZXdsaW5lLCBzbyB0aGVyZSdzIGEgYmxhbmsgbGluZSBiZWZvcmUgdGhlCisgICAgIyBmb2xsb3dpbmcgImdpdC1hcmNoaW1wb3J0LWlkOiIgbGluZS4KKyAgICBwcmludCBXUklURVIgJHBzLT57bWVzc2FnZX0sIlxuXG4iIGlmICgkcHMtPnttZXNzYWdlfSBuZSAiIik7CisKKyAgICAjIG1ha2UgaXQgZWFzeSB0byBiYWNrdHJhY2sgYW5kIGZpZ3VyZSBvdXQgd2hpY2ggQXJjaCByZXZpc2lvbiB0aGlzIHdhczoKKyAgICBwcmludCBXUklURVIgJ2dpdC1hcmNoaW1wb3J0LWlkOiAnLCRwcy0+e2lkfSwiXG4iOworCisgICAgY2xvc2UgV1JJVEVSOworICAgIG15ICRjb21taXRpZCA9IDxSRUFERVI+OyAgICAjIHJlYWQKKyAgICBjaG9tcCAkY29tbWl0aWQ7CisgICAgY2xvc2UgUkVBREVSOworICAgIHdhaXRwaWQgJHBpZCwwOyAgICAgICAgICAgICAjIGNsb3NlOworCisgICAgaWYgKGxlbmd0aCAkY29tbWl0aWQgIT0gNDApIHsKKyAgICAgICAgZGllICJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBjb21taXQhICQhICRjb21taXRpZCI7CisgICAgfQorICAgICMKKyAgICAjIFVwZGF0ZSB0aGUgYnJhbmNoCisgICAgIworICAgIG9wZW4gIEhFQUQsICI+IiwiJGdpdF9kaXIvcmVmcy9oZWFkcy8kcHMtPnticmFuY2h9IjsKKyAgICBwcmludCBIRUFEICRjb21taXRpZDsKKyAgICBjbG9zZSBIRUFEOworICAgIHN5c3RlbSgnZ2l0LXVwZGF0ZS1yZWYnLCAnSEVBRCcsICIkcHMtPnticmFuY2h9Iik7CisKKyAgICAjIHRhZyBhY2NvcmRpbmdseQorICAgIHB0YWcoJHBzLT57aWR9LCAkY29tbWl0aWQpOyAjIHByaXZhdGUgdGFnCisgICAgaWYgKCRvcHRfVCB8fCAkcHMtPnt0eXBlfSBlcSAndCcgfHwgJHBzLT57dHlwZX0gZXEgJ2knKSB7CisgICAgICAgIHRhZygkcHMtPntpZH0sICRjb21taXRpZCk7CisgICAgfQorICAgIHByaW50ICIgKiBDb21taXR0ZWQgJHBzLT57aWR9XG4iOworICAgIHByaW50ICIgICArIHRyZWUgICAkdHJlZVxuIjsKKyAgICBwcmludCAiICAgKyBjb21taXQgJGNvbW1pdGlkXG4iOworICAgICRvcHRfdiAmJiBwcmludCAiICAgKyBjb21taXQgZGF0ZSBpcyAgJHBzLT57ZGF0ZX0gXG4iOworICAgICRvcHRfdiAmJiBwcmludCAiICAgKyBwYXJlbnRzOiAgIixqb2luKCcgJyxAcGFyKSwiXG4iOworfQorCitpZiAoJG9wdF92KSB7CisgICAgZm9yZWFjaCAoc29ydCBrZXlzICVzdGF0cykgeworICAgICAgICBwcmludCIgJF86ICRzdGF0c3skX31cbiI7CisgICAgfQorfQorZXhpdCAwOworCisjIHVzZWQgYnkgdGhlIGFjY3VyYXRlIHN0cmF0ZWd5Ogorc3ViIHN5bmNfdG9fcHMgeworICAgIG15ICRwcyA9IHNoaWZ0OworICAgIG15ICR0cmVlX2RpciA9ICR0bXAuJy8nLnRyZWVfZGlybmFtZSgkcHMtPntpZH0pOworCisgICAgJG9wdF92ICYmIHByaW50ICJzeW5jX3RvX3BzKCRwcy0+e2lkfSkgbWV0aG9kOiAiOworCisgICAgaWYgKC1kICR0cmVlX2RpcikgeworICAgICAgICBpZiAoJHBzLT57dHlwZX0gZXEgJ3QnKSB7CisJICAgICRvcHRfdiAmJiBwcmludCAiZ2V0ICh0YWcpXG4iOworICAgICAgICAgICAgIyBsb29rcyBsaWtlIGEgdGFnLW9ubHkgb3IgKHdvcnNlLCkgYSBtaXhlZCB0YWdzL2NoYW5nZXNldCBicmFuY2gsCisgICAgICAgICAgICAjIGNhbid0IHJlbHkgb24gcmVwbGF5IHRvIHdvcmsgY29ycmVjdGx5IG9uIHRoZXNlCisgICAgICAgICAgICBybXRyZWUoJHRyZWVfZGlyKTsKKyAgICAgICAgICAgIHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ2dldCcsJy0tbm8tcHJpc3RpbmUnLCRwcy0+e2lkfSwkdHJlZV9kaXIpOworICAgICAgICAgICAgJHN0YXRze2dldF90YWd9Kys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbXkgJHRyZWVfaWQgPSBhcmNoX3RyZWVfaWQoJHRyZWVfZGlyKTsKKyAgICAgICAgICAgICAgICBpZiAoJHBzLT57cGFyZW50X2lkfSAmJiAoJHBzLT57cGFyZW50X2lkfSBlcSAkdHJlZV9pZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgY29tbW9uIGNhc2UgKGhvcGVmdWxseSkKKwkJICAgICRvcHRfdiAmJiBwcmludCAicmVwbGF5XG4iOworICAgICAgICAgICAgICAgICAgICBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdyZXBsYXknLCctZCcsJHRyZWVfZGlyLCRwcy0+e2lkfSk7CisgICAgICAgICAgICAgICAgICAgICRzdGF0c3tyZXBsYXl9Kys7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgIyBnZXR0aW5nIG9uZSB0cmVlIGlzIHVzdWFsbHkgZmFzdGVyIHRoYW4gZ2V0dGluZyB0d28gdHJlZXMKKyAgICAgICAgICAgICAgICAgICAgIyBhbmQgYXBwbHlpbmcgdGhlIGRlbHRhIC4uLgorICAgICAgICAgICAgICAgICAgICBybXRyZWUoJHRyZWVfZGlyKTsKKwkJICAgICRvcHRfdiAmJiBwcmludCAiYXBwbHktZGVsdGFcbiI7CisgICAgICAgICAgICAgICAgICAgIHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ2dldCcsJy0tbm8tcHJpc3RpbmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcy0+e2lkfSwkdHJlZV9kaXIpOworICAgICAgICAgICAgICAgICAgICAkc3RhdHN7Z2V0X2RlbHRhfSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgICMgbmV3IGJyYW5jaCB3b3JrCisgICAgICAgICRvcHRfdiAmJiBwcmludCAiZ2V0IChuZXcgdHJlZSlcbiI7CisgICAgICAgIHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ2dldCcsJy0tbm8tcHJpc3RpbmUnLCRwcy0+e2lkfSwkdHJlZV9kaXIpOworICAgICAgICAkc3RhdHN7Z2V0X25ld30rKzsKKyAgICB9CisKKyAgICAjIGFkZGVkIC1JIGZsYWcgdG8gcnN5bmMgc2luY2Ugd2UncmUgZ29pbmcgdG8gZmFzdCEgQUlFRUVFRSEhISEKKyAgICBzeXN0ZW0oJ3JzeW5jJywnLWFJJywnLS1kZWxldGUnLCctLWV4Y2x1ZGUnLCRnaXRfZGlyLAorIyAgICAgICAgICAgICAgICctLWV4Y2x1ZGUnLCcuYXJjaC1pbnZlbnRvcnknLAorICAgICAgICAgICAgICAgICctLWV4Y2x1ZGUnLCcuYXJjaC1pZHMnLCctLWV4Y2x1ZGUnLCd7YXJjaH0nLAorICAgICAgICAgICAgICAgICctLWV4Y2x1ZGUnLCcrKicsJy0tZXhjbHVkZScsJywqJywKKyAgICAgICAgICAgICAgICAiJHRyZWVfZGlyLyIsJy4vJykgPT0gMCBvciBkaWUgIkNhbm5vdCByc3luYyAkdHJlZV9kaXI6ICQhICQ/IjsKKyAgICByZXR1cm4gJHRyZWVfZGlyOworfQorCitzdWIgYXBwbHlfaW1wb3J0IHsKKyAgICBteSAkcHMgPSBzaGlmdDsKKyAgICBteSAkYm5hbWUgPSBnaXRfYnJhbmNobmFtZSgkcHMtPntpZH0pOworCisgICAgbWtwYXRoKCR0bXApOworCisgICAgc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnZ2V0JywnLXMnLCctLW5vLXByaXN0aW5lJywkcHMtPntpZH0sIiR0bXAvaW1wb3J0Iik7CisgICAgZGllICJDYW5ub3QgZ2V0IGltcG9ydDogJCEiIGlmICQ/OworICAgIHN5c3RlbSgncnN5bmMnLCctYUknLCctLWRlbGV0ZScsICctLWV4Y2x1ZGUnLCRnaXRfZGlyLAorCQknLS1leGNsdWRlJywnLmFyY2gtaWRzJywnLS1leGNsdWRlJywne2FyY2h9JywKKwkJIiR0bXAvaW1wb3J0LyIsICcuLycpOworICAgIGRpZSAiQ2Fubm90IHJzeW5jIGltcG9ydDokISIgaWYgJD87CisKKyAgICBybXRyZWUoIiR0bXAvaW1wb3J0Iik7CisgICAgZGllICJDYW5ub3QgcmVtb3ZlIHRlbXBkaXI6ICQhIiBpZiAkPzsKKworCisgICAgcmV0dXJuIDE7Cit9CisKK3N1YiBhcHBseV9jc2V0IHsKKyAgICBteSAkcHMgPSBzaGlmdDsKKworICAgIG1rcGF0aCgkdG1wKTsKKworICAgICMgZ2V0IHRoZSBjaGFuZ2VzZXQKKyAgICBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdnZXQtY2hhbmdlc2V0JywkcHMtPntpZH0sIiR0bXAvY2hhbmdlc2V0Iik7CisgICAgZGllICJDYW5ub3QgZ2V0IGNoYW5nZXNldDogJCEiIGlmICQ/OworCisgICAgIyBhcHBseSBwYXRjaGVzCisgICAgaWYgKGBmaW5kICR0bXAvY2hhbmdlc2V0L3BhdGNoZXMgLXR5cGUgZiAtbmFtZSAnKi5wYXRjaCdgKSB7CisgICAgICAgICMgdGhpcyBjYW4gYmUgc3BlZCB1cCBjb25zaWRlcmFibHkgYnkgZG9pbmcKKyAgICAgICAgIyAgICAoZmluZCB8IHhhcmdzIGNhdCkgfCBwYXRjaAorICAgICAgICAjIGJ1dCB0aGF0IGNhbiBnZXQgbXVja2VkIHVwIGJ5IHBhdGNoZXMKKyAgICAgICAgIyB3aXRoIG1pc3NpbmcgdHJhaWxpbmcgbmV3bGluZXMgb3IgdGhlIHN0YW5kYXJkCisgICAgICAgICMgJ21pc3NpbmcgbmV3bGluZScgZmxhZyBpbiB0aGUgcGF0Y2ggLSBwb3NzaWJseQorICAgICAgICAjIHByb2R1Y2VkIHdpdGggYW4gb2xkL2J1Z2d5IGRpZmYuCisgICAgICAgICMgc2xvdyBhbmQgc2FmZSwgd2UgaW52b2tlIHBhdGNoIG9uY2UgcGVyIHBhdGNoZmlsZQorICAgICAgICBgZmluZCAkdG1wL2NoYW5nZXNldC9wYXRjaGVzIC10eXBlIGYgLW5hbWUgJyoucGF0Y2gnIC1wcmludDAgfCBncmVwIC16diAne2FyY2h9JyB8IHhhcmdzIC1pRklMRSAtMCAtLW5vLXJ1bi1pZi1lbXB0eSBwYXRjaCAtcDEgLS1mb3J3YXJkIC1pRklMRWA7CisgICAgICAgIGRpZSAiUHJvYmxlbSBhcHBseWluZyBwYXRjaGVzISAkISIgaWYgJD87CisgICAgfQorCisgICAgIyBhcHBseSBjaGFuZ2VkIGJpbmFyeSBmaWxlcworICAgIGlmIChteSBAbW9kaWZpZWQgPSBgZmluZCAkdG1wL2NoYW5nZXNldC9wYXRjaGVzIC10eXBlIGYgLW5hbWUgJyoubW9kaWZpZWQnYCkgeworICAgICAgICBmb3JlYWNoIG15ICRtb2QgKEBtb2RpZmllZCkgeworICAgICAgICAgICAgY2hvbXAgJG1vZDsKKyAgICAgICAgICAgIG15ICRvcmlnID0gJG1vZDsKKyAgICAgICAgICAgICRvcmlnID1+IHMvXC5tb2RpZmllZCQvLzsgIyBsYXp5CisgICAgICAgICAgICAkb3JpZyA9fiBzIV5cUSR0bXBcRS9jaGFuZ2VzZXQvcGF0Y2hlcy8hITsKKyAgICAgICAgICAgICNwcmludCAicnN5bmMgLXAgJyRtb2QnICckb3JpZyciOworICAgICAgICAgICAgc3lzdGVtKCdyc3luYycsJy1wJywkbW9kLCIuLyRvcmlnIik7CisgICAgICAgICAgICBkaWUgIlByb2JsZW0gYXBwbHlpbmcgYmluYXJ5IGNoYW5nZXMhICQhIiBpZiAkPzsKKyAgICAgICAgfQorICAgIH0KKworICAgICMgYnJpbmcgaW4gbmV3IGZpbGVzCisgICAgc3lzdGVtKCdyc3luYycsJy1hSScsJy0tZXhjbHVkZScsJGdpdF9kaXIsCisJCSctLWV4Y2x1ZGUnLCcuYXJjaC1pZHMnLAorCQknLS1leGNsdWRlJywgJ3thcmNofScsCisJCSIkdG1wL2NoYW5nZXNldC9uZXctZmlsZXMtYXJjaGl2ZS8iLCcuLycpOworCisgICAgIyBkZWxldGVkIGZpbGVzIGFyZSBoaW50ZWQgZnJvbSB0aGUgY29tbWl0bG9nIHByb2Nlc3NpbmcKKworICAgIHJtdHJlZSgiJHRtcC9jaGFuZ2VzZXQiKTsKK30KKworCisjID1mb3IgcmVmZXJlbmNlCisjIG5vdGVzOiAqLWZpbGVzLy1kaXJlY3RvcmllcyBrZXlzIGNhbm5vdCBoYXZlIHNwYWNlcywgdGhleSdyZSBhbHdheXMKKyMgcGlrYS1lc2NhcGVkLiAgRXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgbmV3bGluZQorIyBBIGxvZyBlbnRyeSBsb29rcyBsaWtlOgorIyBSZXZpc2lvbjogbW9vZGxlLW9yZy0tbW9vZGxlLS0xLjMuMy0tcGF0Y2gtMTUKKyMgQXJjaGl2ZTogYXJjaC1lZHVmb3JnZUBjYXRhbHlzdC5uZXQubnotLTIwMDQKKyMgQ3JlYXRvcjogUGVubnkgTGVhY2ggPHBlbm55QGNhdGFseXN0Lm5ldC5uej4KKyMgRGF0ZTogV2VkIE1heSAyNSAxNDoxNTozNCBOWlNUIDIwMDUKKyMgU3RhbmRhcmQtZGF0ZTogMjAwNS0wNS0yNSAwMjoxNTozNCBHTVQKKyMgTmV3LWZpbGVzOiBsYW5nL2RlLy5hcmNoLWlkcy9ibG9ja19nbG9zc2FyeV9yYW5kb20ucGhwLmlkCisjICAgICBsYW5nL2RlLy5hcmNoLWlkcy9ibG9ja19odG1sLnBocC5pZAorIyBOZXctZGlyZWN0b3JpZXM6IGxhbmcvZGUvaGVscC9xdWVzdGlvbm5haXJlCisjICAgICBsYW5nL2RlL2hlbHAvcXVlc3Rpb25uYWlyZS8uYXJjaC1pZHMKKyMgUmVuYW1lZC1maWxlczogLmFyY2gtaWRzL2RiX3NlYXJzLnNxbC5pZCBkYi8uYXJjaC1pZHMvZGJfc2VhcnMuc3FsLmlkCisjICAgIGRiX3NlYXJzLnNxbCBkYi9kYl9zZWFycy5zcWwKKyMgUmVtb3ZlZC1maWxlczogbGFuZy9iZS9kb2NzLy5hcmNoLWlkcy9yZWxlYXNlLmh0bWwuaWQKKyMgICAgIGxhbmcvYmUvZG9jcy8uYXJjaC1pZHMvcmVsZWFzZW9sZC5odG1sLmlkCisjIE1vZGlmaWVkLWZpbGVzOiBhZG1pbi9jcm9uLnBocCBhZG1pbi9kZWxldGUucGhwCisjICAgICBhZG1pbi9lZGl0b3IuaHRtbCBiYWNrdXAvbGliLnBocCBiYWNrdXAvcmVzdG9yZS5waHAKKyMgTmV3LXBhdGNoZXM6IGFyY2gtZWR1Zm9yZ2VAY2F0YWx5c3QubmV0Lm56LS0yMDA0L21vb2RsZS1vcmctLW1vb2RsZS0tMS4zLjMtLXBhdGNoLTE1CisjIFN1bW1hcnk6IFVwZGF0aW5nIHRvIGxhdGVzdCBmcm9tIE1PT0RMRV8xNF9TVEFCTEUgKDEuNC41KykKKyMgICBzdW1tYXJ5IGNhbiBiZSBtdWx0aWxpbmUgd2l0aCBhIGxlYWRpbmcgc3BhY2UganVzdCBsaWtlIHRoZSBhYm92ZSBmaWVsZHMKKyMgS2V5d29yZHM6CisjCisjIFVwZGF0aW5nIHlhZGRhIHRhZGRhIHRhZGRhIG1hZGRhCitzdWIgcGFyc2Vsb2cgeworICAgIG15ICgkcHMsICRsb2cpID0gQF87CisgICAgbXkgJGtleSA9IHVuZGVmOworCisgICAgIyBoZWFkZXJzIHdlIHdhbnQgdGhhdCBjb250YWluIGZpbGVuYW1lczoKKyAgICBteSAld2FudF9oZWFkZXJzID0gKAorICAgICAgICBuZXdfZmlsZXMgPT4gMSwKKyAgICAgICAgbW9kaWZpZWRfZmlsZXMgPT4gMSwKKyAgICAgICAgcmVuYW1lZF9maWxlcyA9PiAxLAorICAgICAgICByZW5hbWVkX2RpcmVjdG9yaWVzID0+IDEsCisgICAgICAgIHJlbW92ZWRfZmlsZXMgPT4gMSwKKyAgICAgICAgcmVtb3ZlZF9kaXJlY3RvcmllcyA9PiAxLAorICAgICk7CisKKyAgICBjaG9tcCAoQCRsb2cpOworICAgIHdoaWxlICgkXyA9IHNoaWZ0IEAkbG9nKSB7CisgICAgICAgIGlmICgvXkNvbnRpbnVhdGlvbi1vZjpccyooLiopLykgeworICAgICAgICAgICAgJHBzLT57dGFnfSA9ICQxOworICAgICAgICAgICAgJGtleSA9IHVuZGVmOworICAgICAgICB9IGVsc2lmICgvXlN1bW1hcnk6XHMqKC4qKSQvICkgeworICAgICAgICAgICAgIyBzdW1tYXJ5IGNhbiBiZSBtdWx0aWxpbmUgYXMgbG9uZyBhcyBpdCBoYXMgYSBsZWFkaW5nIHNwYWNlLgorCSAgICAjIHdlIHNxdWVlemUgaXQgb250byBhIHNpbmdsZSBsaW5lLCB0aG91Z2guCisgICAgICAgICAgICAkcHMtPntzdW1tYXJ5fSA9IFsgJDEgXTsKKyAgICAgICAgICAgICRrZXkgPSAnc3VtbWFyeSc7CisgICAgICAgIH0gZWxzaWYgKC9eQ3JlYXRvcjogKC4qKVxzKjwoW15cPl0rKT4vKSB7CisgICAgICAgICAgICAkcHMtPnthdXRob3J9ID0gJDE7CisgICAgICAgICAgICAkcHMtPntlbWFpbH0gPSAkMjsKKyAgICAgICAgICAgICRrZXkgPSB1bmRlZjsKKyAgICAgICAgIyBhbnkgKi1maWxlcyBvciAqLWRpcmVjdG9yaWVzIGNhbiBiZSByZWFkIGhlcmU6CisgICAgICAgIH0gZWxzaWYgKC9eKFtBLVpdW2EtelwtXSspOlxzKiguKikkLykgeworICAgICAgICAgICAgbXkgJHZhbCA9ICQyOworICAgICAgICAgICAgJGtleSA9IGxjICQxOworICAgICAgICAgICAgJGtleSA9fiB0ci8tL18vOyAjIHRvbyBsYXp5IHRvIHF1b3RlIDpQCisgICAgICAgICAgICBpZiAoJHdhbnRfaGVhZGVyc3ska2V5fSkgeworICAgICAgICAgICAgICAgIHB1c2ggQHskcHMtPnska2V5fX0sIHNwbGl0KC9ccysvLCAkdmFsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJGtleSA9IHVuZGVmOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2lmICgvXiQvKSB7CisgICAgICAgICAgICBsYXN0OyAjIHJlbWFpbmRlciBvZiBAJGxvZyB0aGF0IGRpZG4ndCBnZXQgc2hpZnRlZCBvZmYgaXMgbWVzc2FnZQorICAgICAgICB9IGVsc2lmICgka2V5KSB7CisgICAgICAgICAgICBpZiAoL15ccysoLiopJC8pIHsKKyAgICAgICAgICAgICAgICBpZiAoJGtleSBlcSAnc3VtbWFyeScpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyRwcy0+eyRrZXl9fSwgJDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgIyBmaWxlcy9kaXJlY3RvcmllczoKKyAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyRwcy0+eyRrZXl9fSwgc3BsaXQoL1xzKy8sICQxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICRrZXkgPSB1bmRlZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICMgZHJvcCBsZWFkaW5nIGVtcHR5IGxpbmVzIGZyb20gdGhlIGxvZyBtZXNzYWdlCisgICAgd2hpbGUgKEAkbG9nICYmICRsb2ctPlswXSBlcSAnJykgeworCXNoaWZ0IEAkbG9nOworICAgIH0KKyAgICBpZiAoZXhpc3RzICRwcy0+e3N1bW1hcnl9ICYmIEB7JHBzLT57c3VtbWFyeX19KSB7CisJJHBzLT57c3VtbWFyeX0gPSBqb2luKCcgJywgQHskcHMtPntzdW1tYXJ5fX0pOworICAgIH0KKyAgICBlbHNpZiAoQCRsb2cgPT0gMCkgeworCSRwcy0+e3N1bW1hcnl9ID0gJ2VtcHR5IGNvbW1pdCBtZXNzYWdlJzsKKyAgICB9IGVsc2UgeworCSRwcy0+e3N1bW1hcnl9ID0gJGxvZy0+WzBdIC4gJy4uLic7CisgICAgfQorICAgICRwcy0+e21lc3NhZ2V9ID0gam9pbigiXG4iLEAkbG9nKTsKKworICAgICMgc2tpcCBBcmNoIGNvbnRyb2wgZmlsZXMsIHVuZXNjYXBlIHBpa2EtZXNjYXBlZCBmaWxlcworICAgIGZvcmVhY2ggbXkgJGsgKGtleXMgJXdhbnRfaGVhZGVycykgeworICAgICAgICBuZXh0IHVubGVzcyAoZGVmaW5lZCAkcHMtPnska30pOworICAgICAgICBteSBAdG1wID0gKCk7CisgICAgICAgIGZvcmVhY2ggbXkgJHQgKEB7JHBzLT57JGt9fSkgeworICAgICAgICAgICBuZXh0IHVubGVzcyBsZW5ndGggKCR0KTsKKyAgICAgICAgICAgbmV4dCBpZiAkdCA9fiBtIVx7YXJjaFx9LyE7CisgICAgICAgICAgIG5leHQgaWYgJHQgPX4gbSFcLmFyY2gtaWRzLyE7CisgICAgICAgICAgICMgc2hvdWxkIHdlIHNraXAgdGhpcz8KKyAgICAgICAgICAgbmV4dCBpZiAkdCA9fiBtIVwuYXJjaC1pbnZlbnRvcnkkITsKKyAgICAgICAgICAgIyB0bGEgY2F0LWFyY2hpdmUtbG9nIHdpbGwgZ2l2ZSB1cyBmaWxlbmFtZXMgd2l0aCBzcGFjZXMgYXMgZmlsZVwoc3ApbmFtZSAtIHdoeT8KKyAgICAgICAgICAgIyB3ZSBjYW4gYXNzdW1lIHRoYXQgYW55IGZpbGVuYW1lIHdpdGggXCBpbmRpY2F0ZXMgc29tZSBwaWthIGVzY2FwaW5nIHRoYXQgd2Ugd2FudCB0byBnZXQgcmlkIG9mLgorICAgICAgICAgICBpZiAoJHQgPX4gL1xcLyApeworICAgICAgICAgICAgICAgJHQgPSAoc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnZXNjYXBlJywnLS11bmVzY2FwZWQnLCR0KSlbMF07CisgICAgICAgICAgIH0KKyAgICAgICAgICAgcHVzaCBAdG1wLCAkdDsKKyAgICAgICAgfQorICAgICAgICAkcHMtPnska30gPSBcQHRtcDsKKyAgICB9Cit9CisKKyMgd3JpdGUvcmVhZCBhIHRhZworc3ViIHRhZyB7CisgICAgbXkgKCR0YWcsICRjb21taXQpID0gQF87CisKKyAgICBpZiAoJG9wdF9vKSB7CisgICAgICAgICR0YWcgPX4gc3wvfC0tfGc7CisgICAgfSBlbHNlIHsKKwlteSAkcGF0Y2huYW1lID0gJHRhZzsKKwkkcGF0Y2huYW1lID1+IHMvLiotLS8vOworICAgICAgICAkdGFnID0gZ2l0X2JyYW5jaG5hbWUgKCR0YWcpIC4gJy0tJyAuICRwYXRjaG5hbWU7CisgICAgfQorCisgICAgaWYgKCRjb21taXQpIHsKKyAgICAgICAgb3BlbihDLCI+IiwiJGdpdF9kaXIvcmVmcy90YWdzLyR0YWciKQorICAgICAgICAgICAgb3IgZGllICJDYW5ub3QgY3JlYXRlIHRhZyAkdGFnOiAkIVxuIjsKKyAgICAgICAgcHJpbnQgQyAiJGNvbW1pdFxuIgorICAgICAgICAgICAgb3IgZGllICJDYW5ub3Qgd3JpdGUgdGFnICR0YWc6ICQhXG4iOworICAgICAgICBjbG9zZShDKQorICAgICAgICAgICAgb3IgZGllICJDYW5ub3Qgd3JpdGUgdGFnICR0YWc6ICQhXG4iOworICAgICAgICBwcmludCAiICogQ3JlYXRlZCB0YWcgJyR0YWcnIG9uICckY29tbWl0J1xuIiBpZiAkb3B0X3Y7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICMgcmVhZAorICAgICAgICBvcGVuKEMsIjwiLCIkZ2l0X2Rpci9yZWZzL3RhZ3MvJHRhZyIpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCByZWFkIHRhZyAkdGFnOiAkIVxuIjsKKyAgICAgICAgJGNvbW1pdCA9IDxDPjsKKyAgICAgICAgY2hvbXAgJGNvbW1pdDsKKyAgICAgICAgZGllICJFcnJvciByZWFkaW5nIHRhZyAkdGFnOiAkIVxuIiB1bmxlc3MgbGVuZ3RoICRjb21taXQgPT0gNDA7CisgICAgICAgIGNsb3NlKEMpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCByZWFkIHRhZyAkdGFnOiAkIVxuIjsKKyAgICAgICAgcmV0dXJuICRjb21taXQ7CisgICAgfQorfQorCisjIHdyaXRlL3JlYWQgYSBwcml2YXRlIHRhZworIyByZWFkcyBmYWlsIHNvZnRseSBpZiB0aGUgdGFnIGlzbid0IHRoZXJlCitzdWIgcHRhZyB7CisgICAgbXkgKCR0YWcsICRjb21taXQpID0gQF87CisKKyAgICAjIGRvbid0IHVzZSBzdWJkaXJzIGZvciB0YWdzIHlldCwgaXQgY291bGQgc2NyZXcgdXAgb3RoZXIgcG9yY2VsYWlucworICAgICR0YWcgPX4gc3wvfCx8ZzsKKworICAgIG15ICR0YWdfZmlsZSA9ICIkcHRhZ19kaXIvJHRhZyI7CisgICAgbXkgJHRhZ19icmFuY2hfZGlyID0gZGlybmFtZSgkdGFnX2ZpbGUpOworICAgIG1rcGF0aCgkdGFnX2JyYW5jaF9kaXIpIHVubGVzcyAoLWQgJHRhZ19icmFuY2hfZGlyKTsKKworICAgIGlmICgkY29tbWl0KSB7ICAgICAgICAgICAgICAjIHdyaXRlCisgICAgICAgIG9wZW4oQywiPiIsJHRhZ19maWxlKQorICAgICAgICAgICAgb3IgZGllICJDYW5ub3QgY3JlYXRlIHRhZyAkdGFnOiAkIVxuIjsKKyAgICAgICAgcHJpbnQgQyAiJGNvbW1pdFxuIgorICAgICAgICAgICAgb3IgZGllICJDYW5ub3Qgd3JpdGUgdGFnICR0YWc6ICQhXG4iOworICAgICAgICBjbG9zZShDKQorICAgICAgICAgICAgb3IgZGllICJDYW5ub3Qgd3JpdGUgdGFnICR0YWc6ICQhXG4iOworCSRycHRhZ3N7JGNvbW1pdH0gPSAkdGFnCisJICAgIHVubGVzcyAkdGFnID1+IG0vLS1iYXNlLTAkLzsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgIyByZWFkCisgICAgICAgICMgaWYgdGhlIHRhZyBpc24ndCB0aGVyZSwgcmV0dXJuIDAKKyAgICAgICAgdW5sZXNzICggLXMgJHRhZ19maWxlKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBvcGVuKEMsIjwiLCR0YWdfZmlsZSkKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IHJlYWQgdGFnICR0YWc6ICQhXG4iOworICAgICAgICAkY29tbWl0ID0gPEM+OworICAgICAgICBjaG9tcCAkY29tbWl0OworICAgICAgICBkaWUgIkVycm9yIHJlYWRpbmcgdGFnICR0YWc6ICQhXG4iIHVubGVzcyBsZW5ndGggJGNvbW1pdCA9PSA0MDsKKyAgICAgICAgY2xvc2UoQykKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IHJlYWQgdGFnICR0YWc6ICQhXG4iOworCXVubGVzcyAoZGVmaW5lZCAkcnB0YWdzeyRjb21taXR9KSB7CisJICAgICRycHRhZ3N7JGNvbW1pdH0gPSAkdGFnOworCX0KKyAgICAgICAgcmV0dXJuICRjb21taXQ7CisgICAgfQorfQorCitzdWIgZmluZF9wYXJlbnRzIHsKKyAgICAjCisgICAgIyBJZGVudGlmeSB3aGF0IGJyYW5jaGVzIGFyZSBtZXJnaW5nIGludG8gbWUKKyAgICAjIGFuZCB3aGV0aGVyIHdlIGFyZSBmdWxseSBtZXJnZWQKKyAgICAjIGdpdC1tZXJnZS1iYXNlIDxoZWFkc2hhPiA8aGVhZHNoYT4gc2hvdWxkIHRlbGwKKyAgICAjIG1lIHdoYXQgdGhlIGJhc2Ugb2YgdGhlIG1lcmdlIHNob3VsZCBiZQorICAgICMKKyAgICBteSAkcHMgPSBzaGlmdDsKKworICAgIG15ICVicmFuY2hlczsgIyBob2xkcyBhbiBhcnJheXJlZiBwZXIgYnJhbmNoCisgICAgICAgICAgICAgICAgICAjIHRoZSBhcnJheXJlZiBjb250YWlucyBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICMgbWVyZ2VkIHBhdGNoZXMgYmV0d2VlbiB0aGUgYmFzZQorICAgICAgICAgICAgICAgICAgIyBvZiB0aGUgbWVyZ2UgYW5kIHRoZSBjdXJyZW50IGhlYWQKKworICAgIG15IEBwYXJlbnRzOyAgIyBwYXJlbnRzIGZvdW5kIGZvciB0aGlzIGNvbW1pdAorCisgICAgIyBzaW1wbGUgbG9vcCB0byBzcGxpdCB0aGUgbWVyZ2VzCisgICAgIyBwZXIgYnJhbmNoCisgICAgZm9yZWFjaCBteSAkbWVyZ2UgKEB7JHBzLT57bWVyZ2VzfX0pIHsKKwlteSAkYnJhbmNoID0gZ2l0X2JyYW5jaG5hbWUoJG1lcmdlKTsKKwl1bmxlc3MgKGRlZmluZWQgJGJyYW5jaGVzeyRicmFuY2h9ICl7CisJICAgICRicmFuY2hlc3skYnJhbmNofSA9IFtdOworCX0KKwlwdXNoIEB7JGJyYW5jaGVzeyRicmFuY2h9fSwgJG1lcmdlOworICAgIH0KKworICAgICMKKyAgICAjIGZvcmVhY2ggYnJhbmNoIGZpbmQgYSBtZXJnZSBiYXNlIGFuZCB3YWxrIGl0IHRvIHRoZQorICAgICMgaGVhZCB3aGVyZSB3ZSBhcmUsIGNvbGxlY3RpbmcgdGhlIG1lcmdlZCBwYXRjaHNldHMgdGhhdAorICAgICMgQXJjaCBoYXMgcmVjb3JkZWQuIEtlZXAgdGhhdCBpbiBAaGF2ZQorICAgICMgQ29tcGFyZSB0aGF0IHdpdGggdGhlIGNvbW1pdHMgb24gdGhlIG90aGVyIGJyYW5jaAorICAgICMgYmV0d2VlbiBtZXJnZS1iYXNlIGFuZCB0aGUgdGlwIG9mIHRoZSBicmFuY2ggKEBuZWVkKQorICAgICMgYW5kIHNlZSBpZiB3ZSBoYXZlIGEgc2VyaWVzIG9mIGNvbnNlY3V0aXZlIHBhdGNoZXMKKyAgICAjIHN0YXJ0aW5nIGZyb20gdGhlIG1lcmdlIGJhc2UuIFRoZSB0aXAgb2YgdGhlIHNlcmllcworICAgICMgb2YgY29uc2VjdXRpdmUgcGF0Y2hlcyBtZXJnZWQgaXMgb3VyIG5ldyBwYXJlbnQgZm9yCisgICAgIyB0aGF0IGJyYW5jaC4KKyAgICAjCisgICAgZm9yZWFjaCBteSAkYnJhbmNoIChrZXlzICVicmFuY2hlcykgeworCisJIyBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGtub3cgYWJvdXQgdGhlIGJyYW5jaAorCW5leHQgdW5sZXNzIC1lICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRicmFuY2giOworCisJbXkgJG1lcmdlYmFzZSA9IGBnaXQtbWVyZ2UtYmFzZSAkYnJhbmNoICRwcy0+e2JyYW5jaH1gOworCWlmICgkPykgeworCSAgICAjIERvbid0IGRpZSBoZXJlLCBBcmNoIHN1cHBvcnRzIG9uZS13YXkgY2hlcnJ5LXBpY2tpbmcKKwkgICAgIyBiZXR3ZWVuIGJyYW5jaGVzIHdpdGggbm8gY29tbW9uIGJhc2UgKG9yIGFueSByZWxhdGlvbnNoaXAKKwkgICAgIyBhdCBhbGwgYmVmb3JlaGFuZCkKKwkgICAgd2FybiAiQ2Fubm90IGZpbmQgbWVyZ2UgYmFzZSBmb3IgJGJyYW5jaCBhbmQgJHBzLT57YnJhbmNofSI7CisJICAgIG5leHQ7CisJfQorCWNob21wICRtZXJnZWJhc2U7CisKKwkjIG5vdyB3YWxrIHVwIHRvIHRoZSBtZXJnZXBvaW50IGNvbGxlY3Rpbmcgd2hhdCBwYXRjaGVzIHdlIGhhdmUKKwlteSAkYnJhbmNodGlwID0gZ2l0X3Jldl9wYXJzZSgkcHMtPnticmFuY2h9KTsKKwlteSBAYW5jZXN0b3JzID0gYGdpdC1yZXYtbGlzdCAtLXRvcG8tb3JkZXIgJGJyYW5jaHRpcCBeJG1lcmdlYmFzZWA7CisJbXkgJWhhdmU7ICMgY29sbGVjdGVkIG1lcmdlcyB0aGlzIGJyYW5jaCBoYXMKKwlmb3JlYWNoIG15ICRtZXJnZSAoQHskcHMtPnttZXJnZXN9fSkgeworCSAgICAkaGF2ZXskbWVyZ2V9ID0gMTsKKwl9CisJbXkgJWFuY2VzdG9yc2hhdmU7CisJZm9yZWFjaCBteSAkcGFyIChAYW5jZXN0b3JzKSB7CisJICAgICRwYXIgPSBjb21taXRpZDJwc2V0KCRwYXIpOworCSAgICBpZiAoZGVmaW5lZCAkcGFyLT57bWVyZ2VzfSkgeworCQlmb3JlYWNoIG15ICRtZXJnZSAoQHskcGFyLT57bWVyZ2VzfX0pIHsKKwkJICAgICRhbmNlc3RvcnNoYXZleyRtZXJnZX09MTsKKwkJfQorCSAgICB9CisJfQorCSMgcHJpbnQgIisrKysgTWVyZ2VzIGluICRwcy0+e2lkfSBhcmUuLi4uXG4iOworCSMgbXkgQGhhdmUgPSBzb3J0IGtleXMgJWhhdmU7CXByaW50IER1bXBlcihcQGhhdmUpOworCisJIyBtZXJnZSB3aGF0IHdlIGhhdmUgd2l0aCB3aGF0IGFuY2VzdG9ycyBoYXZlCisJJWhhdmUgPSAoJWhhdmUsICVhbmNlc3RvcnNoYXZlKTsKKworCSMgc2VlIHdoYXQgdGhlIHJlbW90ZSBicmFuY2ggaGFzIC0gdGhlc2UgYXJlIHRoZSBtZXJnZXMgd2UKKwkjIHdpbGwgd2FudCB0byBoYXZlIGluIGEgY29uc2VjdXRpdmUgc2VyaWVzIGZyb20gdGhlIG1lcmdlYmFzZQorCW15ICRvdGhlcmJyYW5jaHRpcCA9IGdpdF9yZXZfcGFyc2UoJGJyYW5jaCk7CisJbXkgQG5lZWRyYXcgPSBgZ2l0LXJldi1saXN0IC0tdG9wby1vcmRlciAkb3RoZXJicmFuY2h0aXAgXiRtZXJnZWJhc2VgOworCW15IEBuZWVkOworCWZvcmVhY2ggbXkgJG5lZWRwcyAoQG5lZWRyYXcpIHsgCSMgZ2V0IHRoZSBwc2V0cworCSAgICAkbmVlZHBzID0gY29tbWl0aWQycHNldCgkbmVlZHBzKTsKKwkgICAgIyBnaXQtcmV2LWxpc3Qgd2lsbCBhbHNvCisJICAgICMgbGlzdCBjb21taXRzIG1lcmdlZCBpbiB2aWEgZWFybGllcgorCSAgICAjIG1lcmdlcy4gd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBjb21taXRzCisJICAgICMgZnJvbSB0aGUgYnJhbmNoIHdlJ3JlIGxvb2tpbmcgYXQKKwkgICAgaWYgKCRicmFuY2ggZXEgJG5lZWRwcy0+e2JyYW5jaH0pIHsKKwkJcHVzaCBAbmVlZCwgJG5lZWRwcy0+e2lkfTsKKwkgICAgfQorCX0KKworCSMgcHJpbnQgIisrKysgTWVyZ2VzIGZyb20gJGJyYW5jaCB3ZSB3YW50IGFyZS4uLi5cbiI7CisJIyBwcmludCBEdW1wZXIoXEBuZWVkKTsKKworCW15ICRuZXdwYXJlbnQ7CisJd2hpbGUgKG15ICRuZWVkZWRfY29tbWl0ID0gcG9wIEBuZWVkKSB7CisJICAgIGlmICgkaGF2ZXskbmVlZGVkX2NvbW1pdH0pIHsKKwkJJG5ld3BhcmVudCA9ICRuZWVkZWRfY29tbWl0OworCSAgICB9IGVsc2UgeworCQlsYXN0OyAjIGJyZWFrIG91dCBvZiB0aGUgd2hpbGUKKwkgICAgfQorCX0KKwlpZiAoJG5ld3BhcmVudCkgeworCSAgICBwdXNoIEBwYXJlbnRzLCAkbmV3cGFyZW50OworCX0KKworCisgICAgfSAjIGVuZCBmb3JlYWNoIGJyYW5jaAorCisgICAgIyBwcnVuZSByZWR1bmRhbnQgcGFyZW50cworICAgIG15ICVwYXJlbnRzOworICAgIGZvcmVhY2ggbXkgJHAgKEBwYXJlbnRzKSB7CisJJHBhcmVudHN7JHB9ID0gMTsKKyAgICB9CisgICAgZm9yZWFjaCBteSAkcCAoQHBhcmVudHMpIHsKKwluZXh0IHVubGVzcyBleGlzdHMgJHBzZXRzeyRwfXttZXJnZXN9OworCW5leHQgdW5sZXNzIHJlZiAgICAkcHNldHN7JHB9e21lcmdlc307CisJbXkgQG1lcmdlcyA9IEB7JHBzZXRzeyRwfXttZXJnZXN9fTsKKwlmb3JlYWNoIG15ICRtZXJnZSAoQG1lcmdlcykgeworCSAgICBpZiAoJHBhcmVudHN7JG1lcmdlfSkgeworCQlkZWxldGUgJHBhcmVudHN7JG1lcmdlfTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBAcGFyZW50cyA9ICgpOworICAgIGZvcmVhY2ggKGtleXMgJXBhcmVudHMpIHsKKyAgICAgICAgcHVzaCBAcGFyZW50cywgJy1wJywgcHRhZygkXyk7CisgICAgfQorICAgIHJldHVybiBAcGFyZW50czsKK30KKworc3ViIGdpdF9yZXZfcGFyc2UgeworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgJHZhbCAgPSBgZ2l0LXJldi1wYXJzZSAkbmFtZWA7CisgICAgZGllICJFcnJvcjogZ2l0LXJldi1wYXJzZSAkbmFtZSIgaWYgJD87CisgICAgY2hvbXAgJHZhbDsKKyAgICByZXR1cm4gJHZhbDsKK30KKworIyByZXNvbHZlIGEgU0hBMSB0byBhIGtub3duIHBhdGNoc2V0CitzdWIgY29tbWl0aWQycHNldCB7CisgICAgbXkgJGNvbW1pdGlkID0gc2hpZnQ7CisgICAgY2hvbXAgJGNvbW1pdGlkOworICAgIG15ICRuYW1lID0gJHJwdGFnc3skY29tbWl0aWR9CisJfHwgZGllICJDYW5ub3QgZmluZCByZXZlcnNlIHRhZyBtYXBwaW5nIGZvciAkY29tbWl0aWQiOworICAgICRuYW1lID1+IHN8LHwvfDsKKyAgICBteSAkcHMgICA9ICRwc2V0c3skbmFtZX0KKwl8fCAocHJpbnQgRHVtcGVyKHNvcnQga2V5cyAlcHNldHMpKSAmJiBkaWUgIkNhbm5vdCBmaW5kIHBhdGNoc2V0IGZvciAkbmFtZSI7CisgICAgcmV0dXJuICRwczsKK30KKworCisjIGFuIGFsdGVybmF0aXZlIHRvIGBjb21tYW5kYCB0aGF0IGFsbG93cyBpbnB1dCB0byBiZSBwYXNzZWQgYXMgYW4gYXJyYXkKKyMgdG8gd29yayBhcm91bmQgc2hlbGwgcHJvYmxlbXMgd2l0aCB3ZWlyZCBjaGFyYWN0ZXJzIGluIGFyZ3VtZW50cworc3ViIHNhZmVfcGlwZV9jYXB0dXJlIHsKKyAgICBteSBAb3V0cHV0OworICAgIGlmIChteSAkcGlkID0gb3BlbiBteSAkY2hpbGQsICctfCcpIHsKKyAgICAgICAgQG91dHB1dCA9ICg8JGNoaWxkPik7CisgICAgICAgIGNsb3NlICRjaGlsZCBvciBkaWUgam9pbignICcsQF8pLiI6ICQhICQ/IjsKKyAgICB9IGVsc2UgeworCWV4ZWMoQF8pIG9yIGRpZSAiJCEgJD8iOyAjIGV4ZWMoKSBjYW4gZmFpbCB0aGUgZXhlY3V0YWJsZSBjYW4ndCBiZSBmb3VuZAorICAgIH0KKyAgICByZXR1cm4gd2FudGFycmF5ID8gQG91dHB1dCA6IGpvaW4oJycsQG91dHB1dCk7Cit9CisKKyMgYHRsYSBsb2dzIC1yZiAtZCA8ZGlyPiB8IGhlYWQgLW4xYCBvciBgYmF6IHRyZWUtaWQgPGRpcj5gCitzdWIgYXJjaF90cmVlX2lkIHsKKyAgICBteSAkZGlyID0gc2hpZnQ7CisgICAgY2hvbXAoIG15ICRyZXQgPSAoc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnbG9ncycsJy1yZicsJy1kJywkZGlyKSlbMF0gKTsKKyAgICByZXR1cm4gJHJldDsKK30KKworc3ViIGFyY2hpdmVfcmVhY2hhYmxlIHsKKyAgICBteSAkYXJjaGl2ZSA9IHNoaWZ0OworICAgIHJldHVybiAxIGlmICRyZWFjaGFibGV7JGFyY2hpdmV9OworICAgIHJldHVybiAwIGlmICR1bnJlYWNoYWJsZXskYXJjaGl2ZX07CisKKyAgICBpZiAoc3lzdGVtICIkVExBIHdoZXJlaXMtYXJjaGl2ZSAkYXJjaGl2ZSA+L2Rldi9udWxsIikgeworICAgICAgICBpZiAoJG9wdF9hICYmIChzeXN0ZW0oJFRMQSwncmVnaXN0ZXItYXJjaGl2ZScsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9taXJyb3JzLnNvdXJjZWNvbnRyb2wubmV0LyRhcmNoaXZlIikgPT0gMCkpIHsKKyAgICAgICAgICAgICRyZWFjaGFibGV7JGFyY2hpdmV9ID0gMTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIHByaW50IFNUREVSUiAiQXJjaGl2ZSBpcyB1bnJlYWNoYWJsZTogJGFyY2hpdmVcbiI7CisgICAgICAgICR1bnJlYWNoYWJsZXskYXJjaGl2ZX0gPSAxOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAkcmVhY2hhYmxleyRhcmNoaXZlfSA9IDE7CisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dpdC1iaXNlY3Quc2ggYi9naXQtYmlzZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5ZWZiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtYmlzZWN0LnNoCkBAIC0wLDAgKzEsNTA5IEBACisjIS9iaW4vc2gKKworVVNBR0U9J1toZWxwfHN0YXJ0fGJhZHxnb29kfHNraXB8bmV4dHxyZXNldHx2aXN1YWxpemV8cmVwbGF5fGxvZ3xydW5dJworTE9OR19VU0FHRT0nZ2l0IGJpc2VjdCBoZWxwCisJcHJpbnQgdGhpcyBsb25nIGhlbHAgbWVzc2FnZS4KK2dpdCBiaXNlY3Qgc3RhcnQgWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KKwlyZXNldCBiaXNlY3Qgc3RhdGUgYW5kIHN0YXJ0IGJpc2VjdGlvbi4KK2dpdCBiaXNlY3QgYmFkIFs8cmV2Pl0KKwltYXJrIDxyZXY+IGEga25vd24tYmFkIHJldmlzaW9uLgorZ2l0IGJpc2VjdCBnb29kIFs8cmV2Pi4uLl0KKwltYXJrIDxyZXY+Li4uIGtub3duLWdvb2QgcmV2aXNpb25zLgorZ2l0IGJpc2VjdCBza2lwIFsoPHJldj58PHJhbmdlPikuLi5dCisJbWFyayA8cmV2Pi4uLiB1bnRlc3RhYmxlIHJldmlzaW9ucy4KK2dpdCBiaXNlY3QgbmV4dAorCWZpbmQgbmV4dCBiaXNlY3Rpb24gdG8gdGVzdCBhbmQgY2hlY2sgaXQgb3V0LgorZ2l0IGJpc2VjdCByZXNldCBbPGNvbW1pdD5dCisJZmluaXNoIGJpc2VjdGlvbiBzZWFyY2ggYW5kIGdvIGJhY2sgdG8gY29tbWl0LgorZ2l0IGJpc2VjdCB2aXN1YWxpemUKKwlzaG93IGJpc2VjdCBzdGF0dXMgaW4gZ2l0ay4KK2dpdCBiaXNlY3QgcmVwbGF5IDxsb2dmaWxlPgorCXJlcGxheSBiaXNlY3Rpb24gbG9nLgorZ2l0IGJpc2VjdCBsb2cKKwlzaG93IGJpc2VjdCBsb2cuCitnaXQgYmlzZWN0IHJ1biA8Y21kPi4uLgorCXVzZSA8Y21kPi4uLiB0byBhdXRvbWF0aWNhbGx5IGJpc2VjdC4KKworUGxlYXNlIHVzZSAiZ2l0IGhlbHAgYmlzZWN0IiB0byBnZXQgdGhlIGZ1bGwgbWFuIHBhZ2UuJworCitPUFRJT05TX1NQRUM9CisuIGdpdC1zaC1zZXR1cAorLiBnaXQtc2gtaTE4bgorCitfeDQwPSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJworX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKKworYmlzZWN0X2hlYWQoKQoreworCWlmIHRlc3QgLWYgIiRHSVRfRElSL0JJU0VDVF9IRUFEIgorCXRoZW4KKwkJZWNobyBCSVNFQ1RfSEVBRAorCWVsc2UKKwkJZWNobyBIRUFECisJZmkKK30KKworYmlzZWN0X2F1dG9zdGFydCgpIHsKKwl0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiIHx8IHsKKwkJZ2V0dGV4dGxuICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIgPiYyCisJCWlmIHRlc3QgLXQgMAorCQl0aGVuCisJCQkjIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisJCQkjIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKwkJCSMgYXQgdGhpcyBwb2ludC4KKwkJCWdldHRleHQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIgPiYyCisJCQlyZWFkIHllc25vCisJCQljYXNlICIkeWVzbm8iIGluCisJCQlbTm5dKikKKwkJCQlleGl0IDs7CisJCQllc2FjCisJCQliaXNlY3Rfc3RhcnQKKwkJZWxzZQorCQkJZXhpdCAxCisJCWZpCisJfQorfQorCitiaXNlY3Rfc3RhcnQoKSB7CisJIworCSMgQ2hlY2sgZm9yIG9uZSBiYWQgYW5kIHRoZW4gc29tZSBnb29kIHJldmlzaW9ucy4KKwkjCisJaGFzX2RvdWJsZV9kYXNoPTAKKwlmb3IgYXJnOyBkbworCQljYXNlICIkYXJnIiBpbiAtLSkgaGFzX2RvdWJsZV9kYXNoPTE7IGJyZWFrIDs7IGVzYWMKKwlkb25lCisJb3JpZ19hcmdzPSQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkQCIpCisJYmFkX3NlZW49MAorCWV2YWw9JycKKwlpZiB0ZXN0ICJ6JChnaXQgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5KSIgIT0gemZhbHNlCisJdGhlbgorCQltb2RlPS0tbm8tY2hlY2tvdXQKKwllbHNlCisJCW1vZGU9JycKKwlmaQorCXdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KKwkJYXJnPSIkMSIKKwkJY2FzZSAiJGFyZyIgaW4KKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJOzsKKwkJLS1uby1jaGVja291dCkKKwkJCW1vZGU9LS1uby1jaGVja291dAorCQkJc2hpZnQgOzsKKwkJLS0qKQorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJ1wkYXJnJyIpIiA7OworCQkqKQorCQkJcmV2PSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJGFyZ157Y29tbWl0fSIpIHx8IHsKKwkJCQl0ZXN0ICRoYXNfZG91YmxlX2Rhc2ggLWVxIDEgJiYKKwkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICInXCRhcmcnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIikiCisJCQkJYnJlYWsKKwkJCX0KKwkJCWNhc2UgJGJhZF9zZWVuIGluCisJCQkwKSBzdGF0ZT0nYmFkJyA7IGJhZF9zZWVuPTEgOzsKKwkJCSopIHN0YXRlPSdnb29kJyA7OworCQkJZXNhYworCQkJZXZhbD0iJGV2YWwgYmlzZWN0X3dyaXRlICckc3RhdGUnICckcmV2JyAnbm9sb2cnICYmIgorCQkJc2hpZnQKKwkJCTs7CisJCWVzYWMKKwlkb25lCisKKwkjCisJIyBWZXJpZnkgSEVBRC4KKwkjCisJaGVhZD0kKEdJVF9ESVI9IiRHSVRfRElSIiBnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIHx8CisJaGVhZD0kKEdJVF9ESVI9IiRHSVRfRElSIiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8CisJZGllICIkKGdldHRleHQgIkJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIpIgorCisJIworCSMgQ2hlY2sgaWYgd2UgYXJlIGJpc2VjdGluZy4KKwkjCisJc3RhcnRfaGVhZD0nJworCWlmIHRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIKKwl0aGVuCisJCSMgUmVzZXQgdG8gdGhlIHJldiBmcm9tIHdoZXJlIHdlIHN0YXJ0ZWQuCisJCXN0YXJ0X2hlYWQ9JChjYXQgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIpCisJCWlmIHRlc3QgInokbW9kZSIgIT0gInotLW5vLWNoZWNrb3V0IgorCQl0aGVuCisJCQlnaXQgY2hlY2tvdXQgIiRzdGFydF9oZWFkIiAtLSB8fAorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ2hlY2tpbmcgb3V0ICdcJHN0YXJ0X2hlYWQnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDx2YWxpZGJyYW5jaD4nLiIpIgorCQlmaQorCWVsc2UKKwkJIyBHZXQgcmV2IGZyb20gd2hlcmUgd2Ugc3RhcnQuCisJCWNhc2UgIiRoZWFkIiBpbgorCQlyZWZzL2hlYWRzLyp8JF94NDApCisJCQkjIFRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWQgYnkKKwkJCSMgY29naXRvIHVzYWdlLCBhbmQgY29naXRvIHVzZXJzIHNob3VsZCB1bmRlcnN0YW5kCisJCQkjIGl0IHJlbGF0ZXMgdG8gY2ctc2Vlay4KKwkJCVsgLXMgIiRHSVRfRElSL2hlYWQtbmFtZSIgXSAmJgorCQkJCWRpZSAiJChnZXR0ZXh0ICJ3b24ndCBiaXNlY3Qgb24gc2Vla2VkIHRyZWUiKSIKKwkJCXN0YXJ0X2hlYWQ9IiR7aGVhZCNyZWZzL2hlYWRzL30iCisJCQk7OworCQkqKQorCQkJZGllICIkKGdldHRleHQgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiKSIKKwkJCTs7CisJCWVzYWMKKwlmaQorCisJIworCSMgR2V0IHJpZCBvZiBhbnkgb2xkIGJpc2VjdCBzdGF0ZS4KKwkjCisJYmlzZWN0X2NsZWFuX3N0YXRlIHx8IGV4aXQKKworCSMKKwkjIENoYW5nZSBzdGF0ZS4KKwkjIEluIGNhc2Ugb2YgbWlzdGFrZW4gcmV2cyBvciBjaGVja291dCBlcnJvciwgb3Igc2lnbmFscyByZWNlaXZlZCwKKwkjICJiaXNlY3RfYXV0b19uZXh0IiBiZWxvdyBtYXkgZXhpdCBvciBtaXNiZWhhdmUuCisJIyBXZSBoYXZlIHRvIHRyYXAgdGhpcyB0byBiZSBhYmxlIHRvIGNsZWFuIHVwIHVzaW5nCisJIyAiYmlzZWN0X2NsZWFuX3N0YXRlIi4KKwkjCisJdHJhcCAnYmlzZWN0X2NsZWFuX3N0YXRlJyAwCisJdHJhcCAnZXhpdCAyNTUnIDEgMiAzIDE1CisKKwkjCisJIyBXcml0ZSBuZXcgc3RhcnQgc3RhdGUuCisJIworCWVjaG8gIiRzdGFydF9oZWFkIiA+IiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgJiYgeworCQl0ZXN0ICJ6JG1vZGUiICE9ICJ6LS1uby1jaGVja291dCIgfHwKKwkJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiBCSVNFQ1RfSEVBRCAiJHN0YXJ0X2hlYWQiCisJfSAmJgorCWdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJEAiID4iJEdJVF9ESVIvQklTRUNUX05BTUVTIiAmJgorCWV2YWwgIiRldmFsIHRydWUiICYmCisJZWNobyAiZ2l0IGJpc2VjdCBzdGFydCRvcmlnX2FyZ3MiID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciIHx8IGV4aXQKKwkjCisJIyBDaGVjayBpZiB3ZSBjYW4gcHJvY2VlZCB0byB0aGUgbmV4dCBiaXNlY3Qgc3RhdGUuCisJIworCWJpc2VjdF9hdXRvX25leHQKKworCXRyYXAgJy0nIDAKK30KKworYmlzZWN0X3dyaXRlKCkgeworCXN0YXRlPSIkMSIKKwlyZXY9IiQyIgorCW5vbG9nPSIkMyIKKwljYXNlICIkc3RhdGUiIGluCisJCWJhZCkJCXRhZz0iJHN0YXRlIiA7OworCQlnb29kfHNraXApCXRhZz0iJHN0YXRlIi0iJHJldiIgOzsKKwkJKikJCWRpZSAiJChldmFsX2dldHRleHQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6IFwkc3RhdGUiKSIgOzsKKwllc2FjCisJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvYmlzZWN0LyR0YWciICIkcmV2IiB8fCBleGl0CisJZWNobyAiIyAkc3RhdGU6ICQoZ2l0IHNob3ctYnJhbmNoICRyZXYpIiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorCXRlc3QgLW4gIiRub2xvZyIgfHwgZWNobyAiZ2l0IGJpc2VjdCAkc3RhdGUgJHJldiIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIKK30KKworaXNfZXhwZWN0ZWRfcmV2KCkgeworCXRlc3QgLWYgIiRHSVRfRElSL0JJU0VDVF9FWFBFQ1RFRF9SRVYiICYmCisJdGVzdCAiJDEiID0gJChjYXQgIiRHSVRfRElSL0JJU0VDVF9FWFBFQ1RFRF9SRVYiKQorfQorCitjaGVja19leHBlY3RlZF9yZXZzKCkgeworCWZvciBfcmV2IGluICIkQCI7IGRvCisJCWlmICEgaXNfZXhwZWN0ZWRfcmV2ICIkX3JldiIKKwkJdGhlbgorCQkJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9BTkNFU1RPUlNfT0siCisJCQlybSAtZiAiJEdJVF9ESVIvQklTRUNUX0VYUEVDVEVEX1JFViIKKwkJCXJldHVybgorCQlmaQorCWRvbmUKK30KKworYmlzZWN0X3NraXAoKSB7CisJYWxsPScnCisJZm9yIGFyZyBpbiAiJEAiCisJZG8KKwkJY2FzZSAiJGFyZyIgaW4KKwkJKi4uKikKKwkJCXJldnM9JChnaXQgcmV2LWxpc3QgIiRhcmciKSB8fCBkaWUgIiQoZXZhbF9nZXR0ZXh0ICJCYWQgcmV2IGlucHV0OiBcJGFyZyIpIiA7OworCQkqKQorCQkJcmV2cz0kKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJGFyZyIpIDs7CisJCWVzYWMKKwkJYWxsPSIkYWxsICRyZXZzIgorCWRvbmUKKwlldmFsIGJpc2VjdF9zdGF0ZSAnc2tpcCcgJGFsbAorfQorCitiaXNlY3Rfc3RhdGUoKSB7CisJYmlzZWN0X2F1dG9zdGFydAorCXN0YXRlPSQxCisJY2FzZSAiJCMsJHN0YXRlIiBpbgorCTAsKikKKwkJZGllICIkKGdldHRleHQgIlBsZWFzZSBjYWxsICdiaXNlY3Rfc3RhdGUnIHdpdGggYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpIiA7OworCTEsYmFkfDEsZ29vZHwxLHNraXApCisJCXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJChiaXNlY3RfaGVhZCkpIHx8CisJCQlkaWUgIiQoZ2V0dGV4dCAiQmFkIHJldiBpbnB1dDogJChiaXNlY3RfaGVhZCkiKSIKKwkJYmlzZWN0X3dyaXRlICIkc3RhdGUiICIkcmV2IgorCQljaGVja19leHBlY3RlZF9yZXZzICIkcmV2IiA7OworCTIsYmFkfCosZ29vZHwqLHNraXApCisJCXNoaWZ0CisJCWV2YWw9JycKKwkJZm9yIHJldiBpbiAiJEAiCisJCWRvCisJCQlzaGE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkcmV2Xntjb21taXR9IikgfHwKKwkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJCYWQgcmV2IGlucHV0OiBcJHJldiIpIgorCQkJZXZhbD0iJGV2YWwgYmlzZWN0X3dyaXRlICckc3RhdGUnICckc2hhJzsgIgorCQlkb25lCisJCWV2YWwgIiRldmFsIgorCQljaGVja19leHBlY3RlZF9yZXZzICIkQCIgOzsKKwkqLGJhZCkKKwkJZGllICIkKGdldHRleHQgIidnaXQgYmlzZWN0IGJhZCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIikiIDs7CisJKikKKwkJdXNhZ2UgOzsKKwllc2FjCisJYmlzZWN0X2F1dG9fbmV4dAorfQorCitiaXNlY3RfbmV4dF9jaGVjaygpIHsKKwltaXNzaW5nX2dvb2Q9IG1pc3NpbmdfYmFkPQorCWdpdCBzaG93LXJlZiAtcSAtLXZlcmlmeSByZWZzL2Jpc2VjdC9iYWQgfHwgbWlzc2luZ19iYWQ9dAorCXRlc3QgLW4gIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9iaXNlY3QvZ29vZC0qIikiIHx8IG1pc3NpbmdfZ29vZD10CisKKwljYXNlICIkbWlzc2luZ19nb29kLCRtaXNzaW5nX2JhZCwkMSIgaW4KKwksLCopCisJCTogaGF2ZSBib3RoIGdvb2QgYW5kIGJhZCAtIG9rCisJCTs7CisJKiwpCisJCSMgZG8gbm90IGhhdmUgYm90aCBidXQgbm90IGFza2VkIHRvIGZhaWwgLSBqdXN0IHJlcG9ydC4KKwkJZmFsc2UKKwkJOzsKKwl0LCxnb29kKQorCQkjIGhhdmUgYmFkIGJ1dCBub3QgZ29vZC4gIHdlIGNvdWxkIGJpc2VjdCBhbHRob3VnaAorCQkjIHRoaXMgaXMgbGVzcyBvcHRpbXVtLgorCQlnZXR0ZXh0bG4gIldhcm5pbmc6IGJpc2VjdGluZyBvbmx5IHdpdGggYSBiYWQgY29tbWl0LiIgPiYyCisJCWlmIHRlc3QgLXQgMAorCQl0aGVuCisJCQkjIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisJCQkjIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKwkJCSMgYXQgdGhpcyBwb2ludC4KKwkJCWdldHRleHQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIiA+JjIKKwkJCXJlYWQgeWVzbm8KKwkJCWNhc2UgIiR5ZXNubyIgaW4gW05uXSopIGV4aXQgMSA7OyBlc2FjCisJCWZpCisJCTogYmlzZWN0IHdpdGhvdXQgZ29vZC4uLgorCQk7OworCSopCisKKwkJaWYgdGVzdCAtcyAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIgorCQl0aGVuCisJCQlnZXR0ZXh0bG4gIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lIGdvb2QgYW5kIG9uZSBiYWQgcmV2aXNpb25zLgorKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCBiYWRcIiBhbmQgXCJnaXQgYmlzZWN0IGdvb2RcIiBmb3IgdGhhdC4pIiA+JjIKKwkJZWxzZQorCQkJZ2V0dGV4dGxuICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi4KK1lvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgZ29vZCBhbmQgb25lIGJhZCByZXZpc2lvbnMuCisoWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0IGJhZFwiIGFuZCBcImdpdCBiaXNlY3QgZ29vZFwiIGZvciB0aGF0LikiID4mMgorCQlmaQorCQlleGl0IDEgOzsKKwllc2FjCit9CisKK2Jpc2VjdF9hdXRvX25leHQoKSB7CisJYmlzZWN0X25leHRfY2hlY2sgJiYgYmlzZWN0X25leHQgfHwgOgorfQorCitiaXNlY3RfbmV4dCgpIHsKKwljYXNlICIkIyIgaW4gMCkgOzsgKikgdXNhZ2UgOzsgZXNhYworCWJpc2VjdF9hdXRvc3RhcnQKKwliaXNlY3RfbmV4dF9jaGVjayBnb29kCisKKwkjIFBlcmZvcm0gYWxsIGJpc2VjdGlvbiBjb21wdXRhdGlvbiwgZGlzcGxheSBhbmQgY2hlY2tvdXQKKwlnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCAkKHRlc3QgLWYgIiRHSVRfRElSL0JJU0VDVF9IRUFEIiAmJiBlY2hvIC0tbm8tY2hlY2tvdXQpCisJcmVzPSQ/CisKKwkjIENoZWNrIGlmIHdlIHNob3VsZCBleGl0IGJlY2F1c2UgYmlzZWN0aW9uIGlzIGZpbmlzaGVkCisJdGVzdCAkcmVzIC1lcSAxMCAmJiBleGl0IDAKKworCSMgQ2hlY2sgZm9yIGFuIGVycm9yIGluIHRoZSBiaXNlY3Rpb24gcHJvY2VzcworCXRlc3QgJHJlcyAtbmUgMCAmJiBleGl0ICRyZXMKKworCXJldHVybiAwCit9CisKK2Jpc2VjdF92aXN1YWxpemUoKSB7CisJYmlzZWN0X25leHRfY2hlY2sgZmFpbAorCisJaWYgdGVzdCAkIyA9IDAKKwl0aGVuCisJCWlmIHRlc3QgLW4gIiR7RElTUExBWStzZXR9JHtTRVNTSU9OTkFNRStzZXR9JHtNU1lTVEVNK3NldH0ke1NFQ1VSSVRZU0VTU0lPTklEK3NldH0iICYmCisJCQl0eXBlIGdpdGsgPi9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCXNldCBnaXRrCisJCWVsc2UKKwkJCXNldCBnaXQgbG9nCisJCWZpCisJZWxzZQorCQljYXNlICIkMSIgaW4KKwkJZ2l0Knx0aWcpIDs7CisJCS0qKQlzZXQgZ2l0IGxvZyAiJEAiIDs7CisJCSopCXNldCBnaXQgIiRAIiA7OworCQllc2FjCisJZmkKKworCWV2YWwgJyIkQCInIC0tYmlzZWN0IC0tICQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiKQorfQorCitiaXNlY3RfcmVzZXQoKSB7CisJdGVzdCAtcyAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIiB8fCB7CisJCWdldHRleHRsbiAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorCQlyZXR1cm4KKwl9CisJY2FzZSAiJCMiIGluCisJMCkgYnJhbmNoPSQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiKSA7OworCTEpIGdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSAiJDFee2NvbW1pdH0iID4gL2Rldi9udWxsIHx8IHsKKwkJCWludmFsaWQ9IiQxIgorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiJ1wkaW52YWxpZCcgaXMgbm90IGEgdmFsaWQgY29tbWl0IikiCisJCX0KKwkJYnJhbmNoPSIkMSIgOzsKKwkqKQorCQl1c2FnZSA7OworCWVzYWMKKworCWlmICEgdGVzdCAtZiAiJEdJVF9ESVIvQklTRUNUX0hFQUQiICYmICEgZ2l0IGNoZWNrb3V0ICIkYnJhbmNoIiAtLQorCXRoZW4KKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICdcJGJyYW5jaCcuCitUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIpIgorCWZpCisJYmlzZWN0X2NsZWFuX3N0YXRlCit9CisKK2Jpc2VjdF9jbGVhbl9zdGF0ZSgpIHsKKwkjIFRoZXJlIG1heSBiZSBzb21lIHJlZnMgcGFja2VkIGR1cmluZyBiaXNlY3Rpb24uCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShyZWZuYW1lKSAlKG9iamVjdG5hbWUpJyByZWZzL2Jpc2VjdC9cKiB8CisJd2hpbGUgcmVhZCByZWYgaGFzaAorCWRvCisJCWdpdCB1cGRhdGUtcmVmIC1kICRyZWYgJGhhc2ggfHwgZXhpdAorCWRvbmUKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX0VYUEVDVEVEX1JFViIgJiYKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX0FOQ0VTVE9SU19PSyIgJiYKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX0xPRyIgJiYKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX05BTUVTIiAmJgorCXJtIC1mICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiAmJgorCSMgQ2xlYW51cCBoZWFkLW5hbWUgaWYgaXQgZ290IGxlZnQgYnkgYW4gb2xkIHZlcnNpb24gb2YgZ2l0LWJpc2VjdAorCXJtIC1mICIkR0lUX0RJUi9oZWFkLW5hbWUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgLS1uby1kZXJlZiBCSVNFQ1RfSEVBRCAmJgorCSMgY2xlYW4gdXAgQklTRUNUX1NUQVJUIGxhc3QKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIgorfQorCitiaXNlY3RfcmVwbGF5ICgpIHsKKwlmaWxlPSIkMSIKKwl0ZXN0ICIkIyIgLWVxIDEgfHwgZGllICIkKGdldHRleHQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iKSIKKwl0ZXN0IC1yICIkZmlsZSIgfHwgZGllICIkKGV2YWxfZ2V0dGV4dCAiY2Fubm90IHJlYWQgXCRmaWxlIGZvciByZXBsYXlpbmciKSIKKwliaXNlY3RfcmVzZXQKKwl3aGlsZSByZWFkIGdpdCBiaXNlY3QgY29tbWFuZCByZXYKKwlkbworCQl0ZXN0ICIkZ2l0ICRiaXNlY3QiID0gImdpdCBiaXNlY3QiIC1vICIkZ2l0IiA9ICJnaXQtYmlzZWN0IiB8fCBjb250aW51ZQorCQlpZiB0ZXN0ICIkZ2l0IiA9ICJnaXQtYmlzZWN0IgorCQl0aGVuCisJCQlyZXY9IiRjb21tYW5kIgorCQkJY29tbWFuZD0iJGJpc2VjdCIKKwkJZmkKKwkJY2FzZSAiJGNvbW1hbmQiIGluCisJCXN0YXJ0KQorCQkJY21kPSJiaXNlY3Rfc3RhcnQgJHJldiIKKwkJCWV2YWwgIiRjbWQiIDs7CisJCWdvb2R8YmFkfHNraXApCisJCQliaXNlY3Rfd3JpdGUgIiRjb21tYW5kIiAiJHJldiIgOzsKKwkJKikKKwkJCWRpZSAiJChnZXR0ZXh0ICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iKSIgOzsKKwkJZXNhYworCWRvbmUgPCIkZmlsZSIKKwliaXNlY3RfYXV0b19uZXh0Cit9CisKK2Jpc2VjdF9ydW4gKCkgeworCWJpc2VjdF9uZXh0X2NoZWNrIGZhaWwKKworCXdoaWxlIHRydWUKKwlkbworCQljb21tYW5kPSIkQCIKKwkJZXZhbF9nZXR0ZXh0bG4gInJ1bm5pbmcgXCRjb21tYW5kIgorCQkiJEAiCisJCXJlcz0kPworCisJCSMgQ2hlY2sgZm9yIHJlYWxseSBiYWQgcnVuIGVycm9yLgorCQlpZiBbICRyZXMgLWx0IDAgLW8gJHJlcyAtZ2UgMTI4IF0KKwkJdGhlbgorCQkJZXZhbF9nZXR0ZXh0bG4gImJpc2VjdCBydW4gZmFpbGVkOgorZXhpdCBjb2RlIFwkcmVzIGZyb20gJ1wkY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIgPiYyCisJCQlleGl0ICRyZXMKKwkJZmkKKworCQkjIEZpbmQgY3VycmVudCBzdGF0ZSBkZXBlbmRpbmcgb24gcnVuIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKwkJIyBBIHNwZWNpYWwgZXhpdCBjb2RlIG9mIDEyNSBtZWFucyBjYW5ub3QgdGVzdC4KKwkJaWYgWyAkcmVzIC1lcSAxMjUgXQorCQl0aGVuCisJCQlzdGF0ZT0nc2tpcCcKKwkJZWxpZiBbICRyZXMgLWd0IDAgXQorCQl0aGVuCisJCQlzdGF0ZT0nYmFkJworCQllbHNlCisJCQlzdGF0ZT0nZ29vZCcKKwkJZmkKKworCQkjIFdlIGhhdmUgdG8gdXNlIGEgc3Vic2hlbGwgYmVjYXVzZSAiYmlzZWN0X3N0YXRlIiBjYW4gZXhpdC4KKwkJKCBiaXNlY3Rfc3RhdGUgJHN0YXRlID4gIiRHSVRfRElSL0JJU0VDVF9SVU4iICkKKwkJcmVzPSQ/CisKKwkJY2F0ICIkR0lUX0RJUi9CSVNFQ1RfUlVOIgorCisJCWlmIHNhbmVfZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiBcCisJCQk+IC9kZXYvbnVsbAorCQl0aGVuCisJCQlnZXR0ZXh0bG4gImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIiA+JjIKKwkJCWV4aXQgJHJlcworCQlmaQorCisJCWlmIFsgJHJlcyAtbmUgMCBdCisJCXRoZW4KKwkJCWV2YWxfZ2V0dGV4dGxuICJiaXNlY3QgcnVuIGZhaWxlZDoKKydiaXNlY3Rfc3RhdGUgXCRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSBcJHJlcyIgPiYyCisJCQlleGl0ICRyZXMKKwkJZmkKKworCQlpZiBzYW5lX2dyZXAgImlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiAiJEdJVF9ESVIvQklTRUNUX1JVTiIgPiAvZGV2L251bGwKKwkJdGhlbgorCQkJZ2V0dGV4dGxuICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCisJCQlleGl0IDA7CisJCWZpCisKKwlkb25lCit9CisKK2Jpc2VjdF9sb2cgKCkgeworCXRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9MT0ciIHx8IGRpZSAiJChnZXR0ZXh0ICJXZSBhcmUgbm90IGJpc2VjdGluZy4iKSIKKwljYXQgIiRHSVRfRElSL0JJU0VDVF9MT0ciCit9CisKK2Nhc2UgIiQjIiBpbgorMCkKKwl1c2FnZSA7OworKikKKwljbWQ9IiQxIgorCXNoaWZ0CisJY2FzZSAiJGNtZCIgaW4KKwloZWxwKQorCQlnaXQgYmlzZWN0IC1oIDs7CisJc3RhcnQpCisJCWJpc2VjdF9zdGFydCAiJEAiIDs7CisJYmFkfGdvb2QpCisJCWJpc2VjdF9zdGF0ZSAiJGNtZCIgIiRAIiA7OworCXNraXApCisJCWJpc2VjdF9za2lwICIkQCIgOzsKKwluZXh0KQorCQkjIE5vdCBzdXJlIHdlIHdhbnQgIm5leHQiIGF0IHRoZSBVSSBsZXZlbCBhbnltb3JlLgorCQliaXNlY3RfbmV4dCAiJEAiIDs7CisJdmlzdWFsaXplfHZpZXcpCisJCWJpc2VjdF92aXN1YWxpemUgIiRAIiA7OworCXJlc2V0KQorCQliaXNlY3RfcmVzZXQgIiRAIiA7OworCXJlcGxheSkKKwkJYmlzZWN0X3JlcGxheSAiJEAiIDs7CisJbG9nKQorCQliaXNlY3RfbG9nIDs7CisJcnVuKQorCQliaXNlY3RfcnVuICIkQCIgOzsKKwkqKQorCQl1c2FnZSA7OworCWVzYWMKK2VzYWMKZGlmZiAtLWdpdCBhL2dpdC1jb21wYXQtdXRpbC5oIGIvZ2l0LWNvbXBhdC11dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiZjFmZAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1jb21wYXQtdXRpbC5oCkBAIC0wLDAgKzEsNjQ3IEBACisjaWZuZGVmIEdJVF9DT01QQVRfVVRJTF9ICisjZGVmaW5lIEdJVF9DT01QQVRfVVRJTF9ICisKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKworI2lmbmRlZiBGTEVYX0FSUkFZCisvKgorICogU2VlIGlmIG91ciBjb21waWxlciBpcyBrbm93biB0byBzdXBwb3J0IGZsZXhpYmxlIGFycmF5IG1lbWJlcnMuCisgKi8KKyNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpICYmICghZGVmaW5lZChfX1NVTlBST19DKSB8fCAoX19TVU5QUk9fQyA+IDB4NTgwKSkKKyMgZGVmaW5lIEZMRVhfQVJSQVkgLyogZW1wdHkgKi8KKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCisjIGlmIChfX0dOVUNfXyA+PSAzKQorIyAgZGVmaW5lIEZMRVhfQVJSQVkgLyogZW1wdHkgKi8KKyMgZWxzZQorIyAgZGVmaW5lIEZMRVhfQVJSQVkgMCAvKiBvbGRlciBHTlUgZXh0ZW5zaW9uICovCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIE90aGVyd2lzZSwgZGVmYXVsdCB0byBzYWZlciBidXQgYSBiaXQgd2FzdGVmdWwgdHJhZGl0aW9uYWwgc3R5bGUKKyAqLworI2lmbmRlZiBGTEVYX0FSUkFZCisjIGRlZmluZSBGTEVYX0FSUkFZIDEKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKKyNkZWZpbmUgYml0c2l6ZW9mKHgpICAoQ0hBUl9CSVQgKiBzaXplb2YoeCkpCisKKyNkZWZpbmUgbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShhKSBcCisgICAgKElOVE1BWF9NQVggPj4gKGJpdHNpemVvZihpbnRtYXhfdCkgLSBiaXRzaXplb2YoYSkpKQorCisjZGVmaW5lIG1heGltdW1fdW5zaWduZWRfdmFsdWVfb2ZfdHlwZShhKSBcCisgICAgKFVJTlRNQVhfTUFYID4+IChiaXRzaXplb2YodWludG1heF90KSAtIGJpdHNpemVvZihhKSkpCisKKy8qCisgKiBTaWduZWQgaW50ZWdlciBvdmVyZmxvdyBpcyB1bmRlZmluZWQgaW4gQywgc28gaGVyZSdzIGEgaGVscGVyIG1hY3JvCisgKiB0byBkZXRlY3QgaWYgdGhlIHN1bSBvZiB0d28gaW50ZWdlcnMgd2lsbCBvdmVyZmxvdy4KKyAqCisgKiBSZXF1aXJlczogYSA+PSAwLCB0eXBlb2YoYSkgZXF1YWxzIHR5cGVvZihiKQorICovCisjZGVmaW5lIHNpZ25lZF9hZGRfb3ZlcmZsb3dzKGEsIGIpIFwKKyAgICAoKGIpID4gbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShhKSAtIChhKSkKKworI2RlZmluZSB1bnNpZ25lZF9hZGRfb3ZlcmZsb3dzKGEsIGIpIFwKKyAgICAoKGIpID4gbWF4aW11bV91bnNpZ25lZF92YWx1ZV9vZl90eXBlKGEpIC0gKGEpKQorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgVFlQRU9GKHgpIChfX3R5cGVvZl9fKHgpKQorI2Vsc2UKKyNkZWZpbmUgVFlQRU9GKHgpCisjZW5kaWYKKworI2RlZmluZSBNU0IoeCwgYml0cykgKCh4KSAmIFRZUEVPRih4KSh+MFVMTCA8PCAoYml0c2l6ZW9mKHgpIC0gKGJpdHMpKSkpCisjZGVmaW5lIEhBU19NVUxUSV9CSVRTKGkpICAoKGkpICYgKChpKSAtIDEpKSAgLyogY2hlY2tzIGlmIGFuIGludGVnZXIgaGFzIG1vcmUgdGhhbiAxIGJpdCBzZXQgKi8KKworI2RlZmluZSBESVZfUk9VTkRfVVAobixkKSAoKChuKSArIChkKSAtIDEpIC8gKGQpKQorCisvKiBBcHByb3hpbWF0aW9uIG9mIHRoZSBsZW5ndGggb2YgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0eXBlLiAqLworI2RlZmluZSBkZWNpbWFsX2xlbmd0aCh4KQkoKGludCkoc2l6ZW9mKHgpICogMi41NiArIDAuNSkgKyAxKQorCisjaWYgZGVmaW5lZChfX3N1bl9fKQorIC8qCisgICogT24gU29sYXJpcywgd2hlbiBfWE9QRU5fRVhURU5ERUQgaXMgc2V0LCBpdHMgaGVhZGVyIGZpbGUKKyAgKiBmb3JjZXMgdGhlIHByb2dyYW1zIHRvIGJlIFhQRzR2MiwgZGVmZWF0aW5nIGFueSBfWE9QRU5fU09VUkNFCisgICogc2V0dGluZyB0byBzYXkgd2UgYXJlIFhQRzUgb3IgWFBHNi4gIEFsc28gb24gU29sYXJpcywKKyAgKiBYUEc2IHByb2dyYW1zIG11c3QgYmUgY29tcGlsZWQgd2l0aCBhIGM5OSBjb21waWxlciwgd2hpbGUKKyAgKiBub24gWFBHNiBwcm9ncmFtcyBtdXN0IGJlIGNvbXBpbGVkIHdpdGggYSBwcmUtYzk5IGNvbXBpbGVyLgorICAqLworIyBpZiBfX1NURENfVkVSU0lPTl9fIC0gMCA+PSAxOTk5MDFMCisjIGRlZmluZSBfWE9QRU5fU09VUkNFIDYwMAorIyBlbHNlCisjIGRlZmluZSBfWE9QRU5fU09VUkNFIDUwMAorIyBlbmRpZgorI2VsaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19VU0xDX18pICYmIFwKKyAgICAgICFkZWZpbmVkKF9NX1VOSVgpICYmICFkZWZpbmVkKF9fc2dpKSAmJiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKSAmJiBcCisgICAgICAhZGVmaW5lZChfX1RBTkRFTSkKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZ2xpYmMyIGFuZCBBSVggNS4zTCBuZWVkIDUwMCwgT3BlbkJTRCBuZWVkcyA2MDAgZm9yIFNfSVNMTksoKSAqLworI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEgLyogQUlYIDUuM0wgbmVlZHMgdGhpcyAqLworI2VuZGlmCisjZGVmaW5lIF9BTExfU09VUkNFIDEKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2RlZmluZSBfQlNEX1NPVVJDRSAxCisjZGVmaW5lIF9ORVRCU0RfU09VUkNFIDEKKyNkZWZpbmUgX1NHSV9TT1VSQ0UgMQorCisjaWZkZWYgV0lOMzIgLyogQm90aCBNaW5HVyBhbmQgTVNWQyAqLworI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOICAvKiBzdG9wcyB3aW5kb3dzLmggaW5jbHVkaW5nIHdpbnNvY2suaCAqLworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBfX1RBTkRFTSAvKiBvciBIQVZFX1NUUklOR1NfSCBvciAhTk9fU1RSSU5HU19IPyAqLworI2luY2x1ZGUgPHN0cmluZ3MuaD4gLyogZm9yIHN0cmNhc2VjbXAoKSAqLworI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxmbm1hdGNoLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlIDx1dGltZS5oPgorI2luY2x1ZGUgPHN5c2xvZy5oPgorI2lmbmRlZiBOT19TWVNfUE9MTF9ICisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNlbHNlCisjaW5jbHVkZSA8cG9sbC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKy8qIHB1bGwgaW4gV2luZG93cyBjb21wYXRpYmlsaXR5IHN0dWZmICovCisjaW5jbHVkZSAiY29tcGF0L21pbmd3LmgiCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2luY2x1ZGUgImNvbXBhdC9tc3ZjLmgiCisjZWxzZQorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpZm5kZWYgTk9fU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpZm5kZWYgTk9fSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgTk9fSU5UUFRSX1QKKy8qCisgKiBPbiBJMTZMUDMyLCBJTFAzMiBhbmQgTFA2NCAibG9uZyIgaXMgdGhlIHNhdmUgYmV0LCBob3dldmVyCisgKiBvbiBMTFA4NiwgSUwzM0xMUDY0IGFuZCBQNjQgaXQgbmVlZHMgdG8gYmUgImxvbmcgbG9uZyIsCisgKiB3aGlsZSBvbiBJUDE2IGFuZCBJUDE2TDMyIGl0IGlzICJpbnQiIChyZXNwLiAic2hvcnQiKQorICogU2l6ZSBuZWVkcyB0byBtYXRjaCAob3IgZXhjZWVkKSAnc2l6ZW9mKHZvaWQgKiknLgorICogV2UgY2FuJ3QgdGFrZSAibG9uZyBsb25nIiBoZXJlIGFzIG5vdCBldmVyeWJvZHkgaGFzIGl0LgorICovCit0eXBlZGVmIGxvbmcgaW50cHRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0cl90OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorI3VuZGVmIF9YT1BFTl9TT1VSQ0UKKyNpbmNsdWRlIDxncnAuaD4KKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAKKyNpbmNsdWRlICJjb21wYXQvY3lnd2luLmgiCisjZWxzZQorI3VuZGVmIF9BTExfU09VUkNFIC8qIEFJWCA1LjNMIGRlZmluZXMgYSBzdHJ1Y3QgbGlzdCB3aXRoIF9BTExfU09VUkNFLiAqLworI2luY2x1ZGUgPGdycC5oPgorI2RlZmluZSBfQUxMX1NPVVJDRSAxCisjZW5kaWYKKyNlbmRpZgorCisvKiB1c2VkIG9uIE1hYyBPUyBYICovCisjaWZkZWYgUFJFQ09NUE9TRV9VTklDT0RFCisjaW5jbHVkZSAiY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5oIgorI2Vsc2UKKyNkZWZpbmUgcHJlY29tcG9zZV9zdHIoaW4saV9uZmQybmZjKQorI2RlZmluZSBwcmVjb21wb3NlX2FyZ3YoYyx2KQorI2RlZmluZSBwcm9iZV91dGY4X3BhdGhuYW1lX2NvbXBvc2l0aW9uKGEsYikKKyNlbmRpZgorCisjaWZkZWYgTUtESVJfV09fVFJBSUxJTkdfU0xBU0gKKyNkZWZpbmUgbWtkaXIoYSxiKSBjb21wYXRfbWtkaXJfd29fdHJhaWxpbmdfc2xhc2goKGEpLChiKSkKK2V4dGVybiBpbnQgY29tcGF0X21rZGlyX3dvX3RyYWlsaW5nX3NsYXNoKGNvbnN0IGNoYXIqLCBtb2RlX3QpOworI2VuZGlmCisKKyNpZmRlZiBOT19TVFJVQ1RfSVRJTUVSVkFMCitzdHJ1Y3QgaXRpbWVydmFsIHsKKwlzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKKwlzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKK30KKyNlbmRpZgorCisjaWZkZWYgTk9fU0VUSVRJTUVSCisjZGVmaW5lIHNldGl0aW1lcih3aGljaCx2YWx1ZSxvdmFsdWUpCisjZW5kaWYKKworI2lmbmRlZiBOT19MSUJHRU5fSAorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2Vsc2UKKyNkZWZpbmUgYmFzZW5hbWUgZ2l0YmFzZW5hbWUKK2V4dGVybiBjaGFyICpnaXRiYXNlbmFtZShjaGFyICopOworI2VuZGlmCisKKyNpZm5kZWYgTk9fSUNPTlYKKyNpbmNsdWRlIDxpY29udi5oPgorI2VuZGlmCisKKyNpZm5kZWYgTk9fT1BFTlNTTAorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNlbmRpZgorCisvKiBPbiBtb3N0IHN5c3RlbXMgPGxpbWl0cy5oPiB3b3VsZCBoYXZlIGdpdmVuIHVzIHRoaXMsIGJ1dAorICogbm90IG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBHTlUvSHVyZCkuCisgKi8KKyNpZm5kZWYgUEFUSF9NQVgKKyNkZWZpbmUgUEFUSF9NQVggNDA5NgorI2VuZGlmCisKKyNpZm5kZWYgUFJJdU1BWAorI2RlZmluZSBQUkl1TUFYICJsbHUiCisjZW5kaWYKKworI2lmbmRlZiBQUkl1MzIKKyNkZWZpbmUgUFJJdTMyICJ1IgorI2VuZGlmCisKKyNpZm5kZWYgUFJJeDMyCisjZGVmaW5lIFBSSXgzMiAieCIKKyNlbmRpZgorCisjaWZuZGVmIFBSSW8zMgorI2RlZmluZSBQUklvMzIgIm8iCisjZW5kaWYKKworI2lmbmRlZiBQQVRIX1NFUAorI2RlZmluZSBQQVRIX1NFUCAnOicKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9QQVRIU19ICisjaW5jbHVkZSA8cGF0aHMuaD4KKyNlbmRpZgorI2lmbmRlZiBfUEFUSF9ERUZQQVRICisjZGVmaW5lIF9QQVRIX0RFRlBBVEggIi91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4iCisjZW5kaWYKKworI2lmbmRlZiBTVFJJUF9FWFRFTlNJT04KKyNkZWZpbmUgU1RSSVBfRVhURU5TSU9OICIiCisjZW5kaWYKKworI2lmbmRlZiBoYXNfZG9zX2RyaXZlX3ByZWZpeAorI2RlZmluZSBoYXNfZG9zX2RyaXZlX3ByZWZpeChwYXRoKSAwCisjZW5kaWYKKworI2lmbmRlZiBpc19kaXJfc2VwCisjZGVmaW5lIGlzX2Rpcl9zZXAoYykgKChjKSA9PSAnLycpCisjZW5kaWYKKworI2lmbmRlZiBmaW5kX2xhc3RfZGlyX3NlcAorI2RlZmluZSBmaW5kX2xhc3RfZGlyX3NlcChwYXRoKSBzdHJyY2hyKHBhdGgsICcvJykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0hQX2NjKSAmJiAoX19IUF9jYyA+PSA2MTAwMCkKKyNkZWZpbmUgTk9SRVRVUk4gX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQorI2RlZmluZSBOT1JFVFVSTl9QVFIKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKE5PX05PUkVUVVJOKQorI2RlZmluZSBOT1JFVFVSTiBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2RlZmluZSBOT1JFVFVSTl9QVFIgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIE5PUkVUVVJOIF9fZGVjbHNwZWMobm9yZXR1cm4pCisjZGVmaW5lIE5PUkVUVVJOX1BUUgorI2Vsc2UKKyNkZWZpbmUgTk9SRVRVUk4KKyNkZWZpbmUgTk9SRVRVUk5fUFRSCisjaWZuZGVmIF9fYXR0cmlidXRlX18KKyNkZWZpbmUgX19hdHRyaWJ1dGVfXyh4KQorI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImNvbXBhdC9ic3dhcC5oIgorCisvKiBHZW5lcmFsIGhlbHBlciBmdW5jdGlvbnMgKi8KK2V4dGVybiB2b2lkIHZyZXBvcnRmKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcyk7CitleHRlcm4gdm9pZCB2d3JpdGVmKGludCBmZCwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKTsKK2V4dGVybiBOT1JFVFVSTiB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKmVycik7CitleHRlcm4gTk9SRVRVUk4gdm9pZCB1c2FnZWYoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIE5PUkVUVVJOIHZvaWQgZGllKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK2V4dGVybiBOT1JFVFVSTiB2b2lkIGRpZV9lcnJubyhjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitleHRlcm4gaW50IGVycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK2V4dGVybiB2b2lkIHdhcm5pbmcoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCitleHRlcm4gdm9pZCBzZXRfZGllX3JvdXRpbmUoTk9SRVRVUk5fUFRSIHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSk7CitleHRlcm4gdm9pZCBzZXRfZXJyb3Jfcm91dGluZSh2b2lkICgqcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykpOworCitleHRlcm4gaW50IHByZWZpeGNtcChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IHN1ZmZpeGNtcChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc2tpcF9wcmVmaXgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihwcmVmaXgpOworCXJldHVybiBzdHJuY21wKHN0ciwgcHJlZml4LCBsZW4pID8gTlVMTCA6IHN0ciArIGxlbjsKK30KKworI2lmIGRlZmluZWQoTk9fTU1BUCkgfHwgZGVmaW5lZChVU0VfV0lOMzJfTU1BUCkKKworI2lmbmRlZiBQUk9UX1JFQUQKKyNkZWZpbmUgUFJPVF9SRUFEIDEKKyNkZWZpbmUgUFJPVF9XUklURSAyCisjZGVmaW5lIE1BUF9QUklWQVRFIDEKKyNlbmRpZgorCisjZGVmaW5lIG1tYXAgZ2l0X21tYXAKKyNkZWZpbmUgbXVubWFwIGdpdF9tdW5tYXAKK2V4dGVybiB2b2lkICpnaXRfbW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpOworZXh0ZXJuIGludCBnaXRfbXVubWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKTsKKworI2Vsc2UgLyogTk9fTU1BUCB8fCBVU0VfV0lOMzJfTU1BUCAqLworCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2VuZGlmIC8qIE5PX01NQVAgfHwgVVNFX1dJTjMyX01NQVAgKi8KKworI2lmZGVmIE5PX01NQVAKKworLyogVGhpcyB2YWx1ZSBtdXN0IGJlIG11bHRpcGxlIG9mIChwYWdlc2l6ZSAqIDIpICovCisjZGVmaW5lIERFRkFVTFRfUEFDS0VEX0dJVF9XSU5ET1dfU0laRSAoMSAqIDEwMjQgKiAxMDI0KQorCisjZWxzZSAvKiBOT19NTUFQICovCisKKy8qIFRoaXMgdmFsdWUgbXVzdCBiZSBtdWx0aXBsZSBvZiAocGFnZXNpemUgKiAyKSAqLworI2RlZmluZSBERUZBVUxUX1BBQ0tFRF9HSVRfV0lORE9XX1NJWkUgXAorCShzaXplb2Yodm9pZCopID49IDggXAorCQk/ICAxICogMTAyNCAqIDEwMjQgKiAxMDI0IFwKKwkJOiAzMiAqIDEwMjQgKiAxMDI0KQorCisjZW5kaWYgLyogTk9fTU1BUCAqLworCisjaWZuZGVmIE1BUF9GQUlMRUQKKyNkZWZpbmUgTUFQX0ZBSUxFRCAoKHZvaWQgKiktMSkKKyNlbmRpZgorCisjaWZkZWYgTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUCisjZGVmaW5lIG9uX2Rpc2tfYnl0ZXMoc3QpICgoc3QpLnN0X3NpemUpCisjZWxzZQorI2RlZmluZSBvbl9kaXNrX2J5dGVzKHN0KSAoKHN0KS5zdF9ibG9ja3MgKiA1MTIpCisjZW5kaWYKKworI2RlZmluZSBERUZBVUxUX1BBQ0tFRF9HSVRfTElNSVQgXAorCSgoMTAyNEwgKiAxMDI0TCkgKiAoc2l6ZW9mKHZvaWQqKSA+PSA4ID8gODE5MiA6IDI1NikpCisKKyNpZmRlZiBOT19QUkVBRAorI2RlZmluZSBwcmVhZCBnaXRfcHJlYWQKK2V4dGVybiBzc2l6ZV90IGdpdF9wcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBvZmZfdCBvZmZzZXQpOworI2VuZGlmCisvKgorICogRm9yd2FyZCBkZWNsIHRoYXQgd2lsbCByZW1pbmQgdXMgaWYgaXRzIHR3aW4gaW4gY2FjaGUuaCBjaGFuZ2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNvbXBhdC9wcmVhZC5jLiAgQnV0IHdlIGNhbid0IGluY2x1ZGUKKyAqIGNhY2hlLmggdGhlcmUuCisgKi8KK2V4dGVybiBzc2l6ZV90IHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKKworI2lmZGVmIE5PX1NFVEVOVgorI2RlZmluZSBzZXRlbnYgZ2l0c2V0ZW52CitleHRlcm4gaW50IGdpdHNldGVudihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyNlbmRpZgorCisjaWZkZWYgTk9fTUtEVEVNUAorI2RlZmluZSBta2R0ZW1wIGdpdG1rZHRlbXAKK2V4dGVybiBjaGFyICpnaXRta2R0ZW1wKGNoYXIgKik7CisjZW5kaWYKKworI2lmZGVmIE5PX01LU1RFTVBTCisjZGVmaW5lIG1rc3RlbXBzIGdpdG1rc3RlbXBzCitleHRlcm4gaW50IGdpdG1rc3RlbXBzKGNoYXIgKiwgaW50KTsKKyNlbmRpZgorCisjaWZkZWYgTk9fVU5TRVRFTlYKKyNkZWZpbmUgdW5zZXRlbnYgZ2l0dW5zZXRlbnYKK2V4dGVybiB2b2lkIGdpdHVuc2V0ZW52KGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKworI2lmZGVmIE5PX1NUUkNBU0VTVFIKKyNkZWZpbmUgc3RyY2FzZXN0ciBnaXRzdHJjYXNlc3RyCitleHRlcm4gY2hhciAqZ2l0c3RyY2FzZXN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKTsKKyNlbmRpZgorCisjaWZkZWYgTk9fU1RSTENQWQorI2RlZmluZSBzdHJsY3B5IGdpdHN0cmxjcHkKK2V4dGVybiBzaXplX3QgZ2l0c3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKyNlbmRpZgorCisjaWZkZWYgTk9fU1RSVE9VTUFYCisjZGVmaW5lIHN0cnRvdW1heCBnaXRzdHJ0b3VtYXgKK2V4dGVybiB1aW50bWF4X3QgZ2l0c3RydG91bWF4KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKKyNkZWZpbmUgc3RydG9pbWF4IGdpdHN0cnRvaW1heAorZXh0ZXJuIGludG1heF90IGdpdHN0cnRvaW1heChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CisjZW5kaWYKKworI2lmZGVmIE5PX1NUUlRPS19SCisjZGVmaW5lIHN0cnRva19yIGdpdHN0cnRva19yCitleHRlcm4gY2hhciAqZ2l0c3RydG9rX3IoY2hhciAqcywgY29uc3QgY2hhciAqZGVsaW0sIGNoYXIgKipzYXZlX3B0cik7CisjZW5kaWYKKworI2lmZGVmIE5PX0hTVFJFUlJPUgorI2RlZmluZSBoc3RyZXJyb3IgZ2l0aHN0cmVycm9yCitleHRlcm4gY29uc3QgY2hhciAqZ2l0aHN0cmVycm9yKGludCBoZXJyb3IpOworI2VuZGlmCisKKyNpZmRlZiBOT19NRU1NRU0KKyNkZWZpbmUgbWVtbWVtIGdpdG1lbW1lbQordm9pZCAqZ2l0bWVtbWVtKGNvbnN0IHZvaWQgKmhheXN0YWNrLCBzaXplX3QgaGF5c3RhY2tsZW4sCisgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbmVlZGxlLCBzaXplX3QgbmVlZGxlbGVuKTsKKyNlbmRpZgorCisjaWZkZWYgRlJFQURfUkVBRFNfRElSRUNUT1JJRVMKKyNpZmRlZiBmb3BlbgorI3VuZGVmIGZvcGVuCisjZW5kaWYKKyNkZWZpbmUgZm9wZW4oYSxiKSBnaXRfZm9wZW4oYSxiKQorZXh0ZXJuIEZJTEUgKmdpdF9mb3Blbihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworI2VuZGlmCisKKyNpZmRlZiBTTlBSSU5URl9SRVRVUk5TX0JPR1VTCisjZGVmaW5lIHNucHJpbnRmIGdpdF9zbnByaW50ZgorZXh0ZXJuIGludCBnaXRfc25wcmludGYoY2hhciAqc3RyLCBzaXplX3QgbWF4c2l6ZSwKKwkJCWNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKyNkZWZpbmUgdnNucHJpbnRmIGdpdF92c25wcmludGYKK2V4dGVybiBpbnQgZ2l0X3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLAorCQkJIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCk7CisjZW5kaWYKKworI2lmZGVmIF9fR0xJQkNfUFJFUkVRCisjaWYgX19HTElCQ19QUkVSRVEoMiwgMSkKKyNkZWZpbmUgSEFWRV9TVFJDSFJOVUwKKyNkZWZpbmUgSEFWRV9NRU1QQ1BZCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU1RSQ0hSTlVMCisjZGVmaW5lIHN0cmNocm51bCBnaXRzdHJjaHJudWwKK3N0YXRpYyBpbmxpbmUgY2hhciAqZ2l0c3RyY2hybnVsKGNvbnN0IGNoYXIgKnMsIGludCBjKQoreworCXdoaWxlICgqcyAmJiAqcyAhPSBjKQorCQlzKys7CisJcmV0dXJuIChjaGFyICopczsKK30KKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfTUVNUENQWQorI2RlZmluZSBtZW1wY3B5IGdpdG1lbXBjcHkKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZ2l0bWVtcGNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQoreworCXJldHVybiAoY2hhciAqKW1lbWNweShkZXN0LCBzcmMsIG4pICsgbjsKK30KKyNlbmRpZgorCisjaWZkZWYgTk9fSU5FVF9QVE9OCitpbnQgaW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpOworI2VuZGlmCisKKyNpZmRlZiBOT19JTkVUX05UT1AKK2NvbnN0IGNoYXIgKmluZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgcmVsZWFzZV9wYWNrX21lbW9yeShzaXplX3QsIGludCk7CisKK3R5cGVkZWYgdm9pZCAoKnRyeV90b19mcmVlX3QpKHNpemVfdCk7CitleHRlcm4gdHJ5X3RvX2ZyZWVfdCBzZXRfdHJ5X3RvX2ZyZWVfcm91dGluZSh0cnlfdG9fZnJlZV90KTsKKworZXh0ZXJuIGNoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkICp4bWFsbG9jKHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkICp4bWFsbG9jeihzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCAqeG1lbWR1cHooY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitleHRlcm4gY2hhciAqeHN0cm5kdXAoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKTsKK2V4dGVybiB2b2lkICp4cmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkICp4Y2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgKnhtbWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCk7CitleHRlcm4gc3NpemVfdCB4cmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CitleHRlcm4gc3NpemVfdCB4d3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworZXh0ZXJuIGludCB4ZHVwKGludCBmZCk7CitleHRlcm4gRklMRSAqeGZkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpOworZXh0ZXJuIGludCB4bWtzdGVtcChjaGFyICp0ZW1wbGF0ZSk7CitleHRlcm4gaW50IHhta3N0ZW1wX21vZGUoY2hhciAqdGVtcGxhdGUsIGludCBtb2RlKTsKK2V4dGVybiBpbnQgb2RiX21rc3RlbXAoY2hhciAqdGVtcGxhdGUsIHNpemVfdCBsaW1pdCwgY29uc3QgY2hhciAqcGF0dGVybik7CitleHRlcm4gaW50IG9kYl9wYWNrX2tlZXAoY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVzeiwgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHhzaXplX3Qob2ZmX3QgbGVuKQoreworCWlmIChsZW4gPiAoc2l6ZV90KSBsZW4pCisJCWRpZSgiQ2Fubm90IGhhbmRsZSBmaWxlcyB0aGlzIGJpZyIpOworCXJldHVybiAoc2l6ZV90KWxlbjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaGFzX2V4dGVuc2lvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZXh0KQoreworCXNpemVfdCBsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOworCXNpemVfdCBleHRsZW4gPSBzdHJsZW4oZXh0KTsKKwlyZXR1cm4gbGVuID4gZXh0bGVuICYmICFtZW1jbXAoZmlsZW5hbWUgKyBsZW4gLSBleHRsZW4sIGV4dCwgZXh0bGVuKTsKK30KKworLyogaW4gY3R5cGUuYywgZm9yIGt3c2V0IHVzZXJzICovCitleHRlcm4gY29uc3QgY2hhciB0b2xvd2VyX3RyYW5zX3RibFsyNTZdOworCisvKiBTYW5lIGN0eXBlIC0gbm8gbG9jYWxlLCBhbmQgd29ya3Mgd2l0aCBzaWduZWQgY2hhcnMgKi8KKyN1bmRlZiBpc2FzY2lpCisjdW5kZWYgaXNzcGFjZQorI3VuZGVmIGlzZGlnaXQKKyN1bmRlZiBpc2FscGhhCisjdW5kZWYgaXNhbG51bQorI3VuZGVmIGlzbG93ZXIKKyN1bmRlZiBpc3VwcGVyCisjdW5kZWYgdG9sb3dlcgorI3VuZGVmIHRvdXBwZXIKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHNhbmVfY3R5cGVbMjU2XTsKKyNkZWZpbmUgR0lUX1NQQUNFIDB4MDEKKyNkZWZpbmUgR0lUX0RJR0lUIDB4MDIKKyNkZWZpbmUgR0lUX0FMUEhBIDB4MDQKKyNkZWZpbmUgR0lUX0dMT0JfU1BFQ0lBTCAweDA4CisjZGVmaW5lIEdJVF9SRUdFWF9TUEVDSUFMIDB4MTAKKyNkZWZpbmUgR0lUX1BBVEhTUEVDX01BR0lDIDB4MjAKKyNkZWZpbmUgc2FuZV9pc3Rlc3QoeCxtYXNrKSAoKHNhbmVfY3R5cGVbKHVuc2lnbmVkIGNoYXIpKHgpXSAmIChtYXNrKSkgIT0gMCkKKyNkZWZpbmUgaXNhc2NpaSh4KSAoKCh4KSAmIH4weDdmKSA9PSAwKQorI2RlZmluZSBpc3NwYWNlKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX1NQQUNFKQorI2RlZmluZSBpc2RpZ2l0KHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0RJR0lUKQorI2RlZmluZSBpc2FscGhhKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBKQorI2RlZmluZSBpc2FsbnVtKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBIHwgR0lUX0RJR0lUKQorI2RlZmluZSBpc2xvd2VyKHgpIHNhbmVfaXNjYXNlKHgsIDEpCisjZGVmaW5lIGlzdXBwZXIoeCkgc2FuZV9pc2Nhc2UoeCwgMCkKKyNkZWZpbmUgaXNfZ2xvYl9zcGVjaWFsKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0dMT0JfU1BFQ0lBTCkKKyNkZWZpbmUgaXNfcmVnZXhfc3BlY2lhbCh4KSBzYW5lX2lzdGVzdCh4LEdJVF9HTE9CX1NQRUNJQUwgfCBHSVRfUkVHRVhfU1BFQ0lBTCkKKyNkZWZpbmUgdG9sb3dlcih4KSBzYW5lX2Nhc2UoKHVuc2lnbmVkIGNoYXIpKHgpLCAweDIwKQorI2RlZmluZSB0b3VwcGVyKHgpIHNhbmVfY2FzZSgodW5zaWduZWQgY2hhcikoeCksIDApCisjZGVmaW5lIGlzX3BhdGhzcGVjX21hZ2ljKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX1BBVEhTUEVDX01BR0lDKQorCitzdGF0aWMgaW5saW5lIGludCBzYW5lX2Nhc2UoaW50IHgsIGludCBoaWdoKQoreworCWlmIChzYW5lX2lzdGVzdCh4LCBHSVRfQUxQSEEpKQorCQl4ID0gKHggJiB+MHgyMCkgfCBoaWdoOworCXJldHVybiB4OworfQorCitzdGF0aWMgaW5saW5lIGludCBzYW5lX2lzY2FzZShpbnQgeCwgaW50IGlzX2xvd2VyKQoreworCWlmICghc2FuZV9pc3Rlc3QoeCwgR0lUX0FMUEhBKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXNfbG93ZXIpCisJCXJldHVybiAoeCAmIDB4MjApICE9IDA7CisJZWxzZQorCQlyZXR1cm4gKHggJiAweDIwKSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzdHJ0b3VsX3VpKGNoYXIgY29uc3QgKnMsIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgKnJlc3VsdCkKK3sKKwl1bnNpZ25lZCBsb25nIHVsOworCWNoYXIgKnA7CisKKwllcnJubyA9IDA7CisJdWwgPSBzdHJ0b3VsKHMsICZwLCBiYXNlKTsKKwlpZiAoZXJybm8gfHwgKnAgfHwgcCA9PSBzIHx8ICh1bnNpZ25lZCBpbnQpIHVsICE9IHVsKQorCQlyZXR1cm4gLTE7CisJKnJlc3VsdCA9IHVsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzdHJ0b2xfaShjaGFyIGNvbnN0ICpzLCBpbnQgYmFzZSwgaW50ICpyZXN1bHQpCit7CisJbG9uZyB1bDsKKwljaGFyICpwOworCisJZXJybm8gPSAwOworCXVsID0gc3RydG9sKHMsICZwLCBiYXNlKTsKKwlpZiAoZXJybm8gfHwgKnAgfHwgcCA9PSBzIHx8IChpbnQpIHVsICE9IHVsKQorCQlyZXR1cm4gLTE7CisJKnJlc3VsdCA9IHVsOworCXJldHVybiAwOworfQorCisjaWZkZWYgSU5URVJOQUxfUVNPUlQKK3ZvaWQgZ2l0X3Fzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsCisJICAgICAgIGludCgqY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworI2RlZmluZSBxc29ydCBnaXRfcXNvcnQKKyNlbmRpZgorCisjaWZuZGVmIERJUl9IQVNfQlNEX0dST1VQX1NFTUFOVElDUworIyBkZWZpbmUgRk9SQ0VfRElSX1NFVF9HSUQgU19JU0dJRAorI2Vsc2UKKyMgZGVmaW5lIEZPUkNFX0RJUl9TRVRfR0lEIDAKKyNlbmRpZgorCisjaWZkZWYgTk9fTlNFQworI3VuZGVmIFVTRV9OU0VDCisjZGVmaW5lIFNUX0NUSU1FX05TRUMoc3QpIDAKKyNkZWZpbmUgU1RfTVRJTUVfTlNFQyhzdCkgMAorI2Vsc2UKKyNpZmRlZiBVU0VfU1RfVElNRVNQRUMKKyNkZWZpbmUgU1RfQ1RJTUVfTlNFQyhzdCkgKCh1bnNpZ25lZCBpbnQpKChzdCkuc3RfY3RpbWVzcGVjLnR2X25zZWMpKQorI2RlZmluZSBTVF9NVElNRV9OU0VDKHN0KSAoKHVuc2lnbmVkIGludCkoKHN0KS5zdF9tdGltZXNwZWMudHZfbnNlYykpCisjZWxzZQorI2RlZmluZSBTVF9DVElNRV9OU0VDKHN0KSAoKHVuc2lnbmVkIGludCkoKHN0KS5zdF9jdGltLnR2X25zZWMpKQorI2RlZmluZSBTVF9NVElNRV9OU0VDKHN0KSAoKHVuc2lnbmVkIGludCkoKHN0KS5zdF9tdGltLnR2X25zZWMpKQorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFVOUkVMSUFCTEVfRlNUQVQKKyNkZWZpbmUgZnN0YXRfaXNfcmVsaWFibGUoKSAwCisjZWxzZQorI2RlZmluZSBmc3RhdF9pc19yZWxpYWJsZSgpIDEKKyNlbmRpZgorCisjaWZuZGVmIHZhX2NvcHkKKy8qCisgKiBTaW5jZSBhbiBvYnZpb3VzIGltcGxlbWVudGF0aW9uIG9mIHZhX2xpc3Qgd291bGQgYmUgdG8gbWFrZSBpdCBhCisgKiBwb2ludGVyIGludG8gdGhlIHN0YWNrIGZyYW1lLCBhIHNpbXBsZSBhc3NpZ25tZW50IHdpbGwgd29yayBvbgorICogbWFueSBzeXN0ZW1zLiAgQnV0IGxldCdzIHRyeSB0byBiZSBtb3JlIHBvcnRhYmxlLgorICovCisjaWZkZWYgX192YV9jb3B5CisjZGVmaW5lIHZhX2NvcHkoZHN0LCBzcmMpIF9fdmFfY29weShkc3QsIHNyYykKKyNlbHNlCisjZGVmaW5lIHZhX2NvcHkoZHN0LCBzcmMpICgoZHN0KSA9IChzcmMpKQorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIFByZXNlcnZlcyBlcnJubywgcHJpbnRzIGEgbWVzc2FnZSwgYnV0IGdpdmVzIG5vIHdhcm5pbmcgZm9yIEVOT0VOVC4KKyAqIEFsd2F5cyByZXR1cm5zIHRoZSByZXR1cm4gdmFsdWUgb2YgdW5saW5rKDIpLgorICovCitpbnQgdW5saW5rX29yX3dhcm4oY29uc3QgY2hhciAqcGF0aCk7CisvKgorICogTGlrZXdpc2UgZm9yIHJtZGlyKDIpLgorICovCitpbnQgcm1kaXJfb3Jfd2Fybihjb25zdCBjaGFyICpwYXRoKTsKKy8qCisgKiBDYWxscyB0aGUgY29ycmVjdCBmdW5jdGlvbiBvdXQgb2Yge3VubGluayxybWRpcn1fb3Jfd2FybiBiYXNlZCBvbgorICogdGhlIHN1cHBsaWVkIGZpbGUgbW9kZS4KKyAqLworaW50IHJlbW92ZV9vcl93YXJuKHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBjaGFyICpwYXRoKTsKKworLyogQ2FsbCBhY2Nlc3MoMiksIGJ1dCB3YXJuIGZvciBhbnkgZXJyb3IgYmVzaWRlcyBFTk9FTlQuICovCitpbnQgYWNjZXNzX29yX3dhcm4oY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpOworCisvKiBXYXJuIG9uIGFuIGluYWNjZXNzaWJsZSBmaWxlIHRoYXQgb3VnaHQgdG8gYmUgYWNjZXNzaWJsZSAqLwordm9pZCB3YXJuX29uX2luYWNjZXNzaWJsZShjb25zdCBjaGFyICpwYXRoKTsKKworLyogR2V0IHRoZSBwYXNzd2QgZW50cnkgZm9yIHRoZSBVSUQgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4gKi8KK3N0cnVjdCBwYXNzd2QgKnhnZXRwd3VpZF9zZWxmKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2dpdC1jdnNleHBvcnRjb21taXQucGVybCBiL2dpdC1jdnNleHBvcnRjb21taXQucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNmJmMjUyCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsCkBAIC0wLDAgKzEsNDYyIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHZXRvcHQ6OlN0ZDsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBkaXIpOwordXNlIERhdGE6OkR1bXBlcjsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdyhiYXNlbmFtZSBkaXJuYW1lKTsKK3VzZSBGaWxlOjpTcGVjOwordXNlIEdpdDsKKworb3VyICgkb3B0X2gsICRvcHRfUCwgJG9wdF9wLCAkb3B0X3YsICRvcHRfYywgJG9wdF9mLCAkb3B0X2EsICRvcHRfbSwgJG9wdF9kLCAkb3B0X3UsICRvcHRfdywgJG9wdF9XLCAkb3B0X2spOworCitnZXRvcHRzKCd1aFBwdmNma2FtOmQ6dzpXJyk7CisKKyRvcHRfaCAmJiB1c2FnZSgpOworCitkaWUgIk5lZWQgYXQgbGVhc3Qgb25lIGNvbW1pdCBpZGVudGlmaWVyISIgdW5sZXNzIEBBUkdWOworCisjIEdldCBnaXQtY29uZmlnIHNldHRpbmdzCitteSAkcmVwbyA9IEdpdC0+cmVwb3NpdG9yeSgpOworJG9wdF93ID0gJHJlcG8tPmNvbmZpZygnY3ZzZXhwb3J0Y29tbWl0LmN2c2RpcicpIHVubGVzcyBkZWZpbmVkICRvcHRfdzsKKworaWYgKCRvcHRfdyB8fCAkb3B0X1cpIHsKKwkjIFJlbWVtYmVyIHdoZXJlIEdJVF9ESVIgaXMgYmVmb3JlIGNoYW5naW5nIHRvIENWUyBjaGVja291dAorCXVubGVzcyAoJEVOVntHSVRfRElSfSkgeworCQkjIE5vIEdJVF9ESVIgc2V0LiBGaWd1cmUgaXQgb3V0IGZvciBvdXJzZWx2ZXMKKwkJbXkgJGdkID1gZ2l0LXJldi1wYXJzZSAtLWdpdC1kaXJgOworCQljaG9tcCgkZ2QpOworCQkkRU5We0dJVF9ESVJ9ID0gJGdkOworCX0KKworCSMgT24gTVNZUywgY29udmVydCBhIFdpbmRvd3Mtc3R5bGUgcGF0aCB0byBhbiBNU1lTLXN0eWxlIHBhdGgKKwkjIHNvIHRoYXQgcmVsMmFicygpIGJlbG93IHdvcmtzIGNvcnJlY3RseS4KKwlpZiAoJF5PIGVxICdtc3lzJykgeworCQkkRU5We0dJVF9ESVJ9ID1+IHMjXihbWzphbHBoYTpdXSk6LyMvJDEvIzsKKwl9CisKKwkjIE1ha2Ugc3VyZSBHSVRfRElSIGlzIGFic29sdXRlCisJJEVOVntHSVRfRElSfSA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJEVOVntHSVRfRElSfSk7Cit9CisKK2lmICgkb3B0X3cpIHsKKwlpZiAoISAtZCAkb3B0X3cuIi9DVlMiICkgeworCQlkaWUgIiRvcHRfdyBpcyBub3QgYSBDVlMgY2hlY2tvdXQiOworCX0KKwljaGRpciAkb3B0X3cgb3IgZGllICJDYW5ub3QgY2hhbmdlIHRvIENWUyBjaGVja291dCBhdCAkb3B0X3ciOworfQordW5sZXNzICgkRU5We0dJVF9ESVJ9ICYmIC1yICRFTlZ7R0lUX0RJUn0peworICAgIGRpZSAiR0lUX0RJUiBpcyBub3QgZGVmaW5lZCBvciBpcyB1bnJlYWRhYmxlIjsKK30KKworCitteSBAY3ZzOworaWYgKCRvcHRfZCkgeworCUBjdnMgPSAoJ2N2cycsICctZCcsICRvcHRfZCk7Cit9IGVsc2UgeworCUBjdnMgPSAoJ2N2cycpOworfQorCisjIHJlc29sdmUgdGFyZ2V0IGNvbW1pdAorbXkgJGNvbW1pdDsKKyRjb21taXQgPSBwb3AgQEFSR1Y7CiskY29tbWl0ID0gc2FmZV9waXBlX2NhcHR1cmUoJ2dpdC1yZXYtcGFyc2UnLCAnLS12ZXJpZnknLCAiJGNvbW1pdF4wIik7CitjaG9tcCAkY29tbWl0OworaWYgKCQ/KSB7CisgICAgZGllICJUaGUgY29tbWl0IHJlZmVyZW5jZSAkY29tbWl0IGRpZCBub3QgcmVzb2x2ZSEiOworfQorCisjIHJlc29sdmUgd2hhdCBwYXJlbnQgd2Ugd2FudAorbXkgJHBhcmVudDsKK2lmIChAQVJHVikgeworICAgICRwYXJlbnQgPSBwb3AgQEFSR1Y7CisgICAgJHBhcmVudCA9ICBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0LXJldi1wYXJzZScsICctLXZlcmlmeScsICIkcGFyZW50XjAiKTsKKyAgICBjaG9tcCAkcGFyZW50OworICAgIGlmICgkPykgeworCWRpZSAiVGhlIHBhcmVudCByZWZlcmVuY2UgZGlkIG5vdCByZXNvbHZlISI7CisgICAgfQorfQorCisjIGZpbmQgcGFyZW50cyBmcm9tIHRoZSBjb21taXQgaXRzZWxmCitteSBAY29tbWl0ICA9IHNhZmVfcGlwZV9jYXB0dXJlKCdnaXQtY2F0LWZpbGUnLCAnY29tbWl0JywgJGNvbW1pdCk7CitteSBAcGFyZW50czsKK215ICRjb21taXR0ZXI7CitteSAkYXV0aG9yOworbXkgJHN0YWdlID0gJ2hlYWRlcnMnOyAjIGhlYWRlcnMsIG1zZworbXkgJHRpdGxlOworbXkgJG1zZyA9ICcnOworCitmb3JlYWNoIG15ICRsaW5lIChAY29tbWl0KSB7CisgICAgY2hvbXAgJGxpbmU7CisgICAgaWYgKCRzdGFnZSBlcSAnaGVhZGVycycgJiYgJGxpbmUgZXEgJycpIHsKKwkkc3RhZ2UgPSAnbXNnJzsKKwluZXh0OworICAgIH0KKworICAgIGlmICgkc3RhZ2UgZXEgJ2hlYWRlcnMnKSB7CisJaWYgKCRsaW5lID1+IG0vXnBhcmVudCAoXHd7NDB9KSQvKSB7ICMgZm91bmQgYSBwYXJlbnQKKwkgICAgcHVzaCBAcGFyZW50cywgJDE7CisJfSBlbHNpZiAoJGxpbmUgPX4gbS9eYXV0aG9yICguKykgXGQrIFstK11cZCskLykgeworCSAgICAkYXV0aG9yID0gJDE7CisJfSBlbHNpZiAoJGxpbmUgPX4gbS9eY29tbWl0dGVyICguKykgXGQrIFstK11cZCskLykgeworCSAgICAkY29tbWl0dGVyID0gJDE7CisJfQorICAgIH0gZWxzZSB7CisJJG1zZyAuPSAkbGluZSAuICJcbiI7CisJdW5sZXNzICgkdGl0bGUpIHsKKwkgICAgJHRpdGxlID0gJGxpbmU7CisJfQorICAgIH0KK30KKworbXkgJG5vcGFyZW50ID0gIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOworaWYgKCRwYXJlbnQpIHsKKyAgICBteSAkZm91bmQ7CisgICAgIyBkb3VibGUgY2hlY2sgdGhhdCBpdCdzIGEgdmFsaWQgcGFyZW50CisgICAgZm9yZWFjaCBteSAkcCAoQHBhcmVudHMpIHsKKwlpZiAoJHAgZXEgJHBhcmVudCkgeworCSAgICAkZm91bmQgPSAxOworCSAgICBsYXN0OworCX07ICMgZm91bmQgaXQKKyAgICB9CisgICAgZGllICJEaWQgbm90IGZpbmQgJHBhcmVudCBpbiB0aGUgcGFyZW50cyBmb3IgdGhpcyBjb21taXQhIiBpZiAhJGZvdW5kIGFuZCAhJG9wdF9QOworfSBlbHNlIHsgIyB3ZSBkb24ndCBoYXZlIGEgcGFyZW50IGZyb20gdGhlIGNtZGxpbmUuLi4KKyAgICBpZiAoQHBhcmVudHMgPT0gMSkgeyAjIGl0J3Mgc2FmZSB0byBnZXQgaXQgZnJvbSB0aGUgY29tbWl0CisJJHBhcmVudCA9ICRwYXJlbnRzWzBdOworICAgIH0gZWxzaWYgKEBwYXJlbnRzID09IDApIHsgIyB0aGVyZSBpcyBubyBwYXJlbnQKKyAgICAgICAgJHBhcmVudCA9ICRub3BhcmVudDsKKyAgICB9IGVsc2UgeyAjIGNhbm5vdCBjaG9vc2UgYXV0b21hdGljYWxseSBmcm9tIG11bHRpcGxlIHBhcmVudHMKKyAgICAgICAgZGllICJUaGlzIGNvbW1pdCBoYXMgbW9yZSB0aGFuIG9uZSBwYXJlbnQgLS0gcGxlYXNlIG5hbWUgdGhlIHBhcmVudCB5b3Ugd2FudCB0byB1c2UgZXhwbGljaXRseSI7CisgICAgfQorfQorCitteSAkZ29fYmFja190byA9IDA7CisKK2lmICgkb3B0X1cpIHsKKyAgICAkb3B0X3YgJiYgcHJpbnQgIlJlc2V0dGluZyB0byAkcGFyZW50XG4iOworICAgICRnb19iYWNrX3RvID0gYGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPiAvZGV2L251bGwgfHwKKwlnaXQgcmV2LXBhcnNlIEhFQURgIHx8IGRpZSAiQ291bGQgbm90IGRldGVybWluZSBjdXJyZW50IGJyYW5jaCI7CisgICAgc3lzdGVtKCJnaXQgY2hlY2tvdXQgLXEgJHBhcmVudF4wIikgJiYgZGllICJDb3VsZCBub3QgY2hlY2sgb3V0ICRwYXJlbnReMCI7Cit9CisKKyRvcHRfdiAmJiBwcmludCAiQXBwbHlpbmcgdG8gQ1ZTIGNvbW1pdCAkY29tbWl0IGZyb20gcGFyZW50ICRwYXJlbnRcbiI7CisKKyMgZ3JhYiB0aGUgY29tbWl0IG1lc3NhZ2UKK29wZW4oTVNHLCAiPi5tc2ciKSBvciBkaWUgIkNhbm5vdCBvcGVuIC5tc2cgZm9yIHdyaXRpbmciOworaWYgKCRvcHRfbSkgeworICAgIHByaW50IE1TRyAkb3B0X207Cit9CitwcmludCBNU0cgJG1zZzsKK2lmICgkb3B0X2EpIHsKKyAgICBwcmludCBNU0cgIlxuXG5BdXRob3I6ICRhdXRob3JcbiI7CisgICAgaWYgKCRhdXRob3IgbmUgJGNvbW1pdHRlcikgeworCXByaW50IE1TRyAiQ29tbWl0dGVyOiAkY29tbWl0dGVyXG4iOworICAgIH0KK30KK2Nsb3NlIE1TRzsKKworaWYgKCRwYXJlbnQgZXEgJG5vcGFyZW50KSB7CisgICAgYGdpdC1kaWZmLXRyZWUgLS1iaW5hcnkgLXAgLS1yb290ICRjb21taXQgPi5jdnNleHBvcnRjb21taXQuZGlmZmA7IyB8fCBkaWUgIkNhbm5vdCBkaWZmIjsKK30gZWxzZSB7CisgICAgYGdpdC1kaWZmLXRyZWUgLS1iaW5hcnkgLXAgJHBhcmVudCAkY29tbWl0ID4uY3ZzZXhwb3J0Y29tbWl0LmRpZmZgOyMgfHwgZGllICJDYW5ub3QgZGlmZiI7Cit9CisKKyMjIGFwcGx5IG5vbi1iaW5hcnkgY2hhbmdlcworCisjIEluIHBlZGFudGljIG1vZGUgcmVxdWlyZSBhbGwgbGluZXMgb2YgY29udGV4dCB0byBtYXRjaC4gIEluIG5vcm1hbAorIyBtb2RlLCBiZSBjb21wYXRpYmxlIHdpdGggZGlmZi9wYXRjaDogYXNzdW1lIDMgbGluZXMgb2YgY29udGV4dCBhbmQKKyMgcmVxdWlyZSBhdCBsZWFzdCBvbmUgbGluZSBtYXRjaCwgaS5lLiBpZ25vcmUgYXQgbW9zdCAyIGxpbmVzIG9mCisjIGNvbnRleHQsIGxpa2UgZGlmZi9wYXRjaCBkbyBieSBkZWZhdWx0LgorbXkgJGNvbnRleHQgPSAkb3B0X3AgPyAnJyA6ICctQzEnOworCitwcmludCAiQ2hlY2tpbmcgaWYgcGF0Y2ggd2lsbCBhcHBseVxuIjsKKworbXkgQHN0YXQ7CitvcGVuIEFQUExZLCAiR0lUX0RJUj0gZ2l0LWFwcGx5ICRjb250ZXh0IC0tc3VtbWFyeSAtLW51bXN0YXQ8LmN2c2V4cG9ydGNvbW1pdC5kaWZmfCIgfHwgZGllICJjYW5ub3QgcGF0Y2giOworQHN0YXQ9PEFQUExZPjsKK2Nsb3NlIEFQUExZIHx8IGRpZSAiQ2Fubm90IHBhdGNoIjsKK215IChAYmZpbGVzLEBmaWxlcyxAYWZpbGVzLEBkZmlsZXMpOworY2hvbXAgQHN0YXQ7Citmb3JlYWNoIChAc3RhdCkgeworCXB1c2ggKEBiZmlsZXMsJDEpIGlmIG0vXi1cdC1cdCguKikkLzsKKwlwdXNoIChAZmlsZXMsICQxKSBpZiBtL14tXHQtXHQoLiopJC87CisJcHVzaCAoQGZpbGVzLCAkMSkgaWYgbS9eXGQrXHRcZCtcdCguKikkLzsKKwlwdXNoIChAYWZpbGVzLCQxKSBpZiBtL14gY3JlYXRlIG1vZGUgWzAtN10rICguKikkLzsKKwlwdXNoIChAZGZpbGVzLCQxKSBpZiBtL14gZGVsZXRlIG1vZGUgWzAtN10rICguKikkLzsKK30KK21hcCB7IHMvXiIoLiopIiQvJDEvZyB9IEBiZmlsZXMsQGZpbGVzOworbWFwIHsgcy9cXChbMC03XXszfSkvc3ByaW50ZignJWMnLG9jdCAkMSkvZWcgfSBAYmZpbGVzLEBmaWxlczsKKworIyBjaGVjayB0aGF0IHRoZSBmaWxlcyBhcmUgY2xlYW4gYW5kIHVwIHRvIGRhdGUgYWNjb3JkaW5nIHRvIGN2cworbXkgJGRpcnR5OworbXkgQGRpcnM7Citmb3JlYWNoIG15ICRwIChAYWZpbGVzKSB7CisgICAgbXkgJHBhdGggPSBkaXJuYW1lICRwOworICAgIHdoaWxlICghLWQgJHBhdGggYW5kICEgZ3JlcCB7ICRfIGVxICRwYXRoIH0gQGRpcnMpIHsKKwl1bnNoaWZ0IEBkaXJzLCAkcGF0aDsKKwkkcGF0aCA9IGRpcm5hbWUgJHBhdGg7CisgICAgfQorfQorCisjIC4uLiBjaGVjayBkaXJzLAorZm9yZWFjaCBteSAkZCAoQGRpcnMpIHsKKyAgICBpZiAoLWUgJGQpIHsKKwkkZGlydHkgPSAxOworCXdhcm4gIiRkIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IVxuIjsKKyAgICB9Cit9CisKKyMgLi4uIHF1ZXJ5IHN0YXR1cyBvZiBhbGwgZmlsZXMgdGhhdCB3ZSBoYXZlIGEgZGlyZWN0b3J5IGZvciBhbmQgcGFyc2Ugb3V0cHV0IG9mICdjdnMgc3RhdHVzJyB0byAlY3Zzc3RhdC4KK215IEBjYW5zdGF0dXNmaWxlczsKK2ZvcmVhY2ggbXkgJGYgKEBmaWxlcykgeworICAgIG15ICRwYXRoID0gZGlybmFtZSAkZjsKKyAgICBuZXh0IGlmIChncmVwIHsgJF8gZXEgJHBhdGggfSBAZGlycyk7CisgICAgcHVzaCBAY2Fuc3RhdHVzZmlsZXMsICRmOworfQorCitteSAlY3Zzc3RhdDsKK2lmIChAY2Fuc3RhdHVzZmlsZXMpIHsKKyAgICBpZiAoJG9wdF91KSB7CisgICAgICBteSBAdXBkYXRlZCA9IHhhcmdzX3NhZmVfcGlwZV9jYXB0dXJlKFtAY3ZzLCAndXBkYXRlJ10sIEBjYW5zdGF0dXNmaWxlcyk7CisgICAgICBwcmludCBAdXBkYXRlZDsKKyAgICB9CisgICAgIyAiY3ZzIHN0YXR1cyIgcmVvcmRlcnMgdGhlIHBhcmFtZXRlcnMsIG5vdGFibHkgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUKKyAgICAjIGFyZ3VtZW50cyB3aXRoIHRoZSBzYW1lIGJhc2VuYW1lLiAgU28gYmUgcHJlY2lzZSBoZXJlLgorCisgICAgbXkgJWFkZGVkID0gbWFwIHsgJF8gPT4gMSB9IEBhZmlsZXM7CisgICAgbXkgJXRvZG8gPSBtYXAgeyAkXyA9PiAxIH0gQGNhbnN0YXR1c2ZpbGVzOworCisgICAgd2hpbGUgKCV0b2RvKSB7CisgICAgICBteSBAY2Fuc3RhdHVzZmlsZXMyID0gKCk7CisgICAgICBteSAlZnVsbG5hbWUgPSAoKTsKKyAgICAgIGZvcmVhY2ggbXkgJG5hbWUgKGtleXMgJXRvZG8pIHsKKwlteSAkYmFzZW5hbWUgPSBiYXNlbmFtZSgkbmFtZSk7CisKKwkjIENWUyByZXBvcnRzIGZpbGVzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgcmV2aXNpb24gYXMKKwkjICJubyBmaWxlICRiYXNlbmFtZSIgaW4gaXRzICJzdGF0dXMiIG91dHB1dCwgc28gd2Ugc2hvdWxkCisJIyBhbnRpY2lwYXRlIHRoYXQuICBUb3RhbGx5IHVua25vd24gZmlsZXMgd2lsbCBoYXZlIGEgc3RhdHVzCisJIyAiVW5rbm93biIuIEhvd2V2ZXIsIGlmIHRoZXkgZXhpc3QgaW4gdGhlIEF0dGljLCB0aGVpciBzdGF0dXMKKwkjIHdpbGwgYmUgIlVwLXRvLWRhdGUiICh0aGlzIG1lYW5zIHRoZXkgd2VyZSBhZGRlZCBvbmNlIGJ1dCBoYXZlCisJIyBiZWVuIHJlbW92ZWQpLgorCSRiYXNlbmFtZSA9ICJubyBmaWxlICRiYXNlbmFtZSIgaWYgJGFkZGVkeyRiYXNlbmFtZX07CisKKwkkYmFzZW5hbWUgPX4gcy9eXHMrLy87CisJJGJhc2VuYW1lID1+IHMvXHMrJC8vOworCisJaWYgKCFleGlzdHMoJGZ1bGxuYW1leyRiYXNlbmFtZX0pKSB7CisJICAkZnVsbG5hbWV7JGJhc2VuYW1lfSA9ICRuYW1lOworCSAgcHVzaCAoQGNhbnN0YXR1c2ZpbGVzMiwgJG5hbWUpOworCSAgZGVsZXRlKCR0b2RveyRuYW1lfSk7CisJfQorICAgICAgfQorICAgICAgbXkgQGN2c291dHB1dDsKKyAgICAgIEBjdnNvdXRwdXQgPSB4YXJnc19zYWZlX3BpcGVfY2FwdHVyZShbQGN2cywgJ3N0YXR1cyddLCBAY2Fuc3RhdHVzZmlsZXMyKTsKKyAgICAgIGZvcmVhY2ggbXkgJGwgKEBjdnNvdXRwdXQpIHsKKwljaG9tcCAkbDsKKwluZXh0IHVubGVzcworCSAgICBteSAoJGZpbGUsICRzdGF0dXMpID0gJGwgPX4gL15GaWxlOlxzKyguKlxTKVxzK1N0YXR1czogKC4qKSQvOworCisJbXkgJGZ1bGxuYW1lID0gJGZ1bGxuYW1leyRmaWxlfTsKKwlwcmludCBTVERFUlIgIkh1aD8gU3RhdHVzICckc3RhdHVzJyByZXBvcnRlZCBmb3IgdW5leHBlY3RlZCBmaWxlICckZmlsZSdcbiIKKwkgICAgdW5sZXNzIGRlZmluZWQgJGZ1bGxuYW1lOworCisJIyBUaGlzIHJlc3BvbnNlIG1lYW5zIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IGV4Y2VwdCBpbgorCSMgQ1ZTJ3MgYXR0aWMsIHNvIHNldCB0aGUgc3RhdHVzIGFjY29yZGluZ2x5CisJJHN0YXR1cyA9ICJJbi1hdHRpYyIKKwkgICAgaWYgJGZpbGUgPX4gL15ubyBmaWxlIC8KKwkJJiYgJHN0YXR1cyBlcSAnVXAtdG8tZGF0ZSc7CisKKwkkY3Zzc3RhdHskZnVsbG5hbWV7JGZpbGV9fSA9ICRzdGF0dXMKKwkgICAgaWYgZGVmaW5lZCAkZnVsbG5hbWV7JGZpbGV9OworICAgICAgfQorICAgIH0KK30KKworIyAuLi4gVmFsaWRhdGUgdGhhdCBuZXcgZmlsZXMgaGF2ZSB0aGUgY29ycmVjdCBzdGF0dXMKK2ZvcmVhY2ggbXkgJGYgKEBhZmlsZXMpIHsKKyAgICBuZXh0IHVubGVzcyBkZWZpbmVkKG15ICRzdGF0ID0gJGN2c3N0YXR7JGZ9KTsKKworICAgICMgVGhpcyBtZWFucyB0aGUgZmlsZSBoYXMgbmV2ZXIgYmVlbiBzZWVuIGJlZm9yZQorICAgIG5leHQgaWYgJHN0YXQgZXEgJ1Vua25vd24nOworCisgICAgIyBUaGlzIG1lYW5zIHRoZSBmaWxlIGhhcyBiZWVuIHNlZW4gYmVmb3JlIGJ1dCB3YXMgcmVtb3ZlZAorICAgIG5leHQgaWYgJHN0YXQgZXEgJ0luLWF0dGljJzsKKworICAgICRkaXJ0eSA9IDE7CisJd2FybiAiRmlsZSAkZiBpcyBhbHJlYWR5IGtub3duIGluIHlvdXIgQ1ZTIGNoZWNrb3V0IC0tIHBlcmhhcHMgaXQgaGFzIGJlZW4gYWRkZWQgYnkgYW5vdGhlciB1c2VyLiBPciB0aGlzIG1heSBpbmRpY2F0ZSB0aGF0IGl0IGV4aXN0cyBvbiBhIGRpZmZlcmVudCBicmFuY2guIElmIHRoaXMgaXMgdGhlIGNhc2UsIHVzZSAtZiB0byBmb3JjZSB0aGUgbWVyZ2UuXG4iOworCXdhcm4gIlN0YXR1cyB3YXM6ICRjdnNzdGF0eyRmfVxuIjsKK30KKworIyAuLi4gdmFsaWRhdGUga25vd24gZmlsZXMuCitmb3JlYWNoIG15ICRmIChAZmlsZXMpIHsKKyAgICBuZXh0IGlmIGdyZXAgeyAkXyBlcSAkZiB9IEBhZmlsZXM7CisgICAgIyBUT0RPOndlIG5lZWQgdG8gaGFuZGxlIHJlbW92ZWQgaW4gY3ZzCisgICAgdW5sZXNzIChkZWZpbmVkICgkY3Zzc3RhdHskZn0pIGFuZCAkY3Zzc3RhdHskZn0gZXEgIlVwLXRvLWRhdGUiKSB7CisJJGRpcnR5ID0gMTsKKwl3YXJuICJGaWxlICRmIG5vdCB1cCB0byBkYXRlIGJ1dCBoYXMgc3RhdHVzICckY3Zzc3RhdHskZn0nIGluIHlvdXIgQ1ZTIGNoZWNrb3V0IVxuIjsKKyAgICB9CisKKyAgICAjIERlcGVuZGluZyBvbiBob3cgeW91ciBHSVQgdHJlZSBnb3QgaW1wb3J0ZWQgZnJvbSBDVlMgeW91IG1heQorICAgICMgaGF2ZSBhIGNvbmZsaWN0IGJldHdlZW4gZXhwYW5kZWQga2V5d29yZHMgaW4geW91ciBDVlMgdHJlZSBhbmQKKyAgICAjIHVuZXhwYW5kZWQga2V5d29yZHMgaW4gdGhlIHBhdGNoIGFib3V0IHRvIGJlIGFwcGxpZWQuCisgICAgaWYgKCRvcHRfaykgeworCW15ICRvcmlnX2ZpbGUgPSIkZi5vcmlnIjsKKwlyZW5hbWUgJGYsICRvcmlnX2ZpbGU7CisJb3BlbihGSUxURVJfSU4sICI8JG9yaWdfZmlsZSIpIG9yIGRpZSAiQ2Fubm90IG9wZW4gJG9yaWdfZmlsZVxuIjsKKwlvcGVuKEZJTFRFUl9PVVQsICI+JGYiKSBvciBkaWUgIkNhbm5vdCBvcGVuICRmXG4iOworCXdoaWxlICg8RklMVEVSX0lOPikKKwl7CisJICAgIG15ICRsaW5lID0gJF87CisJICAgICRsaW5lID1+IHMvXCQoW0EtWl1bYS16XSspOlteXCRdK1wkL1wkJDFcJC9nOworCSAgICBwcmludCBGSUxURVJfT1VUICRsaW5lOworCX0KKwljbG9zZSBGSUxURVJfSU47CisJY2xvc2UgRklMVEVSX09VVDsKKyAgICB9Cit9CisKK2lmICgkZGlydHkpIHsKKyAgICBpZiAoJG9wdF9mKSB7CXdhcm4gIlRoZSB0cmVlIGlzIG5vdCBjbGVhbiAtLSBmb3JjZWQgbWVyZ2VcbiI7CisJJGRpcnR5ID0gMDsKKyAgICB9IGVsc2UgeworCWRpZSAiRXhpdGluZzogeW91ciBDVlMgdHJlZSBpcyBub3QgY2xlYW4gZm9yIHRoaXMgbWVyZ2UuIjsKKyAgICB9Cit9CisKK3ByaW50ICJBcHBseWluZ1xuIjsKK2lmICgkb3B0X1cpIHsKKyAgICBzeXN0ZW0oImdpdCBjaGVja291dCAtcSAkY29tbWl0XjAiKSAmJiBkaWUgImNhbm5vdCBwYXRjaCI7Cit9IGVsc2UgeworICAgIGBHSVRfRElSPSBnaXQtYXBwbHkgJGNvbnRleHQgLS1zdW1tYXJ5IC0tbnVtc3RhdCAtLWFwcGx5IDwuY3ZzZXhwb3J0Y29tbWl0LmRpZmZgIHx8IGRpZSAiY2Fubm90IHBhdGNoIjsKK30KKworcHJpbnQgIlBhdGNoIGFwcGxpZWQgc3VjY2Vzc2Z1bGx5LiBBZGRpbmcgbmV3IGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBDVlNcbiI7CitteSAkZGlydHlwYXRjaCA9IDA7CisKKyMKKyMgV2UgaGF2ZSB0byBhZGQgdGhlIGRpcmVjdG9yaWVzIGluIG9yZGVyIG90aGVyd2lzZSB3ZSB3aWxsIGhhdmUKKyMgcHJvYmxlbXMgd2hlbiB3ZSB0cnkgYW5kIGFkZCB0aGUgc3ViLWRpcmVjdG9yeSBvZiBhIGRpcmVjdG9yeSB3ZQorIyBoYXZlIG5vdCBhZGRlZCB5ZXQuCisjCisjIEx1Y2tpbHkgdGhpcyBpcyBlYXN5IHRvIGRlYWwgd2l0aCBieSBzb3J0aW5nIHRoZSBkaXJlY3RvcmllcyBhbmQKKyMgZGVhbGluZyB3aXRoIHRoZSBzaG9ydGVzdCBvbmVzIGZpcnN0LgorIworQGRpcnMgPSBzb3J0IHsgbGVuZ3RoICRhIDw9PiBsZW5ndGggJGJ9IEBkaXJzOworCitmb3JlYWNoIG15ICRkIChAZGlycykgeworICAgIGlmIChzeXN0ZW0oQGN2cywnYWRkJywkZCkpIHsKKwkkZGlydHlwYXRjaCA9IDE7CisJd2FybiAiRmFpbGVkIHRvIGN2cyBhZGQgZGlyZWN0b3J5ICRkIC0tIHlvdSBtYXkgbmVlZCB0byBkbyBpdCBtYW51YWxseSI7CisgICAgfQorfQorCitmb3JlYWNoIG15ICRmIChAYWZpbGVzKSB7CisgICAgaWYgKGdyZXAgeyAkXyBlcSAkZiB9IEBiZmlsZXMpIHsKKyAgICAgIHN5c3RlbShAY3ZzLCAnYWRkJywnLWtiJywkZik7CisgICAgfSBlbHNlIHsKKyAgICAgIHN5c3RlbShAY3ZzLCAnYWRkJywgJGYpOworICAgIH0KKyAgICBpZiAoJD8pIHsKKwkkZGlydHlwYXRjaCA9IDE7CisJd2FybiAiRmFpbGVkIHRvIGN2cyBhZGQgJGYgLS0geW91IG1heSBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5IjsKKyAgICB9Cit9CisKK2ZvcmVhY2ggbXkgJGYgKEBkZmlsZXMpIHsKKyAgICBzeXN0ZW0oQGN2cywgJ3JtJywgJy1mJywgJGYpOworICAgIGlmICgkPykgeworCSRkaXJ0eXBhdGNoID0gMTsKKwl3YXJuICJGYWlsZWQgdG8gY3ZzIHJtIC1mICRmIC0tIHlvdSBtYXkgbmVlZCB0byBkbyBpdCBtYW51YWxseSI7CisgICAgfQorfQorCitwcmludCAiQ29tbWl0IHRvIENWU1xuIjsKK3ByaW50ICJQYXRjaCB0aXRsZSAoZmlyc3QgY29tbWVudCBsaW5lKTogJHRpdGxlXG4iOworbXkgQGNvbW1pdGZpbGVzID0gbWFwIHsgdW5sZXNzIChtL1xzLykgeyAnXCcnLiRfLidcJyc7IH0gZWxzZSB7ICRfOyB9OyB9IChAZmlsZXMpOworbXkgJGNtZCA9IGpvaW4oJyAnLCBAY3ZzKS4iIGNvbW1pdCAtRiAubXNnIEBjb21taXRmaWxlcyI7CisKK2lmICgkZGlydHlwYXRjaCkgeworICAgIHByaW50ICJOT1RFOiBPbmUgb3IgbW9yZSBodW5rcyBmYWlsZWQgdG8gYXBwbHkgY2xlYW5seS5cbiI7CisgICAgcHJpbnQgIllvdSdsbCBuZWVkIHRvIGFwcGx5IHRoZSBwYXRjaCBpbiAuY3ZzZXhwb3J0Y29tbWl0LmRpZmYgbWFudWFsbHlcbiI7CisgICAgcHJpbnQgInVzaW5nIGEgcGF0Y2ggcHJvZ3JhbS4gQWZ0ZXIgYXBwbHlpbmcgdGhlIHBhdGNoIGFuZCByZXNvbHZpbmcgdGhlXG4iOworICAgIHByaW50ICJwcm9ibGVtcyB5b3UgbWF5IGNvbW1pdCB1c2luZzoiOworICAgIHByaW50ICJcbiAgICBjZCBcIiRvcHRfd1wiIiBpZiAkb3B0X3c7CisgICAgcHJpbnQgIlxuICAgICRjbWRcbiI7CisgICAgcHJpbnQgIlxuICAgIGdpdCBjaGVja291dCAkZ29fYmFja190b1xuIiBpZiAkZ29fYmFja190bzsKKyAgICBwcmludCAiXG4iOworICAgIGV4aXQoMSk7Cit9CisKK2lmICgkb3B0X2MpIHsKKyAgICBwcmludCAiQXV0b2NvbW1pdFxuICAkY21kXG4iOworICAgIHByaW50IHhhcmdzX3NhZmVfcGlwZV9jYXB0dXJlKFtAY3ZzLCAnY29tbWl0JywgJy1GJywgJy5tc2cnXSwgQGZpbGVzKTsKKyAgICBpZiAoJD8pIHsKKwlkaWUgIkV4aXRpbmc6IFRoZSBjb21taXQgZGlkIG5vdCBzdWNjZWVkIjsKKyAgICB9CisgICAgcHJpbnQgIkNvbW1pdHRlZCBzdWNjZXNzZnVsbHkgdG8gQ1ZTXG4iOworICAgICMgY2xlYW4gdXAKKyAgICB1bmxpbmsoIi5tc2ciKTsKK30gZWxzZSB7CisgICAgcHJpbnQgIlJlYWR5IGZvciB5b3UgdG8gY29tbWl0LCBqdXN0IHJ1bjpcblxuICAgJGNtZFxuIjsKK30KKworIyBjbGVhbiB1cAordW5saW5rKCIuY3ZzZXhwb3J0Y29tbWl0LmRpZmYiKTsKKworaWYgKCRvcHRfVykgeworICAgIHN5c3RlbSgiZ2l0IGNoZWNrb3V0ICRnb19iYWNrX3RvIikgJiYgZGllICJjYW5ub3QgbW92ZSBiYWNrIHRvICRnb19iYWNrX3RvIjsKKyAgICBpZiAoISgkZ29fYmFja190byA9fiAvXlswLTlhLWZBLUZdezQwfSQvKSkgeworCXN5c3RlbSgiZ2l0IHN5bWJvbGljLXJlZiBIRUFEICRnb19iYWNrX3RvIikgJiYKKwkgICAgZGllICJjYW5ub3QgbW92ZSBiYWNrIHRvICRnb19iYWNrX3RvIjsKKyAgICB9Cit9CisKKyMgQ1ZTIHZlcnNpb24gMS4xMS54IGFuZCAxLjEyLnggc2xlZXBzIHRoZSB3cm9uZyB3YXkgdG8gZW5zdXJlIHRoZSB0aW1lc3RhbXAKKyMgdXNlZCBieSBDVlMgYW5kIHRoZSBvbmUgc2V0IGJ5IHN1YnNlcXVlbmNlIGZpbGUgbW9kaWZpY2F0aW9ucyBhcmUgZGlmZmVyZW50LgorIyBJZiB0aGV5IGFyZSBub3QgZGlmZmVyZW50IENWUyB3aWxsIG5vdCBkZXRlY3QgY2hhbmdlcy4KK3NsZWVwKDEpOworCitzdWIgdXNhZ2UgeworCXByaW50IFNUREVSUiA8PEVORDsKK1VzYWdlOiBHSVRfRElSPS9wYXRoL3RvLy5naXQgZ2l0IGN2c2V4cG9ydGNvbW1pdCBbLWhdIFstcF0gWy12XSBbLWNdIFstZl0gWy11XSBbLWtdIFstdyBjdnN3b3JrZGlyXSBbLW0gbXNncHJlZml4XSBbIHBhcmVudCBdIGNvbW1pdAorRU5ECisJZXhpdCgxKTsKK30KKworIyBBbiBhbHRlcm5hdGl2ZSB0byBgY29tbWFuZGAgdGhhdCBhbGxvd3MgaW5wdXQgdG8gYmUgcGFzc2VkIGFzIGFuIGFycmF5CisjIHRvIHdvcmsgYXJvdW5kIHNoZWxsIHByb2JsZW1zIHdpdGggd2VpcmQgY2hhcmFjdGVycyBpbiBhcmd1bWVudHMKKyMgaWYgdGhlIGV4ZWMgcmV0dXJucyBub24temVybyB3ZSBkaWUKK3N1YiBzYWZlX3BpcGVfY2FwdHVyZSB7CisgICAgbXkgQG91dHB1dDsKKyAgICBpZiAobXkgJHBpZCA9IG9wZW4gbXkgJGNoaWxkLCAnLXwnKSB7CisJQG91dHB1dCA9ICg8JGNoaWxkPik7CisJY2xvc2UgJGNoaWxkIG9yIGRpZSBqb2luKCcgJyxAXykuIjogJCEgJD8iOworICAgIH0gZWxzZSB7CisJZXhlYyhAXykgb3IgZGllICIkISAkPyI7ICMgZXhlYygpIGNhbiBmYWlsIHRoZSBleGVjdXRhYmxlIGNhbid0IGJlIGZvdW5kCisgICAgfQorICAgIHJldHVybiB3YW50YXJyYXkgPyBAb3V0cHV0IDogam9pbignJyxAb3V0cHV0KTsKK30KKworc3ViIHhhcmdzX3NhZmVfcGlwZV9jYXB0dXJlIHsKKwlteSAkTUFYX0FSR19MRU5HVEggPSA2NTUzNjsKKwlteSAkY21kID0gc2hpZnQ7CisJbXkgQG91dHB1dDsKKwlteSAkb3V0cHV0OworCXdoaWxlKEBfKSB7CisJCW15IEBhcmdzOworCQlteSAkbGVuZ3RoID0gMDsKKwkJd2hpbGUoQF8gJiYgJGxlbmd0aCA8ICRNQVhfQVJHX0xFTkdUSCkgeworCQkJcHVzaCBAYXJncywgc2hpZnQ7CisJCQkkbGVuZ3RoICs9IGxlbmd0aCgkYXJnc1skI2FyZ3NdKTsKKwkJfQorCQlpZiAod2FudGFycmF5KSB7CisJCQlwdXNoIEBvdXRwdXQsIHNhZmVfcGlwZV9jYXB0dXJlKEAkY21kLCBAYXJncyk7CisJCX0KKwkJZWxzZSB7CisJCQkkb3V0cHV0IC49IHNhZmVfcGlwZV9jYXB0dXJlKEAkY21kLCBAYXJncyk7CisJCX0KKwl9CisJcmV0dXJuIHdhbnRhcnJheSA/IEBvdXRwdXQgOiAkb3V0cHV0OworfQpkaWZmIC0tZ2l0IGEvZ2l0LWN2c2ltcG9ydC5wZXJsIGIvZ2l0LWN2c2ltcG9ydC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgwMzJmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtY3ZzaW1wb3J0LnBlcmwKQEAgLTAsMCArMSwxMTU0IEBACisjIS91c3IvYmluL3BlcmwKKworIyBUaGlzIHRvb2wgaXMgY29weXJpZ2h0IChjKSAyMDA1LCBNYXR0aGlhcyBVcmxpY2hzLgorIyBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR251IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisjCisjIFRoZSBiYXNpYyBpZGVhIGlzIHRvIGFnZ3JlZ2F0ZSBDVlMgY2hlY2staW5zIGludG8gcmVsYXRlZCBjaGFuZ2VzLgorIyBGb3J0dW5hdGVseSwgImN2c3BzIiBkb2VzIHRoYXQgZm9yIHVzOyBhbGwgd2UgaGF2ZSB0byBkbyBpcyB0byBwYXJzZQorIyBpdHMgb3V0cHV0LgorIworIyBDaGVja2luZyBvdXQgdGhlIGZpbGVzIGlzIGRvbmUgYnkgYSBzaW5nbGUgbG9uZy1ydW5uaW5nIENWUyBjb25uZWN0aW9uCisjIC8gc2VydmVyIHByb2Nlc3MuCisjCisjIFRoZSBoZWFkIHJldmlzaW9uIGlzIG9uIGJyYW5jaCAib3JpZ2luIiBieSBkZWZhdWx0LgorIyBZb3UgY2FuIGNoYW5nZSB0aGF0IHdpdGggdGhlICctbycgb3B0aW9uLgorCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdldG9wdDo6TG9uZzsKK3VzZSBGaWxlOjpTcGVjOwordXNlIEZpbGU6OlRlbXAgcXcodGVtcGZpbGUgdG1wbmFtKTsKK3VzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7Cit1c2UgVGltZTo6TG9jYWw7Cit1c2UgSU86OlNvY2tldDsKK3VzZSBJTzo6UGlwZTsKK3VzZSBQT1NJWCBxdyhzdHJmdGltZSBkdXAyIEVOT0VOVCk7Cit1c2UgSVBDOjpPcGVuMjsKKworJFNJR3snUElQRSd9PSJJR05PUkUiOworJEVOVnsnVFonfT0iVVRDIjsKKworb3VyICgkb3B0X2gsJG9wdF9vLCRvcHRfdiwkb3B0X2ssJG9wdF91LCRvcHRfZCwkb3B0X3AsJG9wdF9DLCRvcHRfeiwkb3B0X2ksJG9wdF9QLCAkb3B0X3MsJG9wdF9tLEBvcHRfTSwkb3B0X0EsJG9wdF9TLCRvcHRfTCwgJG9wdF9hLCAkb3B0X3IsICRvcHRfUik7CitteSAoJWNvbnZfYXV0aG9yX25hbWUsICVjb252X2F1dGhvcl9lbWFpbCk7CisKK3N1YiB1c2FnZSg7JCkgeworCW15ICRtc2cgPSBzaGlmdDsKKwlwcmludChTVERFUlIgIkVycm9yOiAkbXNnXG4iKSBpZiAkbXNnOworCXByaW50IFNUREVSUiA8PEVORDsKK1VzYWdlOiBnaXQgY3ZzaW1wb3J0ICAgICAjIGZldGNoL3VwZGF0ZSBHSVQgZnJvbSBDVlMKKyAgICAgICBbLW8gYnJhbmNoLWZvci1IRUFEXSBbLWhdIFstdl0gWy1kIENWU1JPT1RdIFstQSBhdXRob3ItY29udi1maWxlXQorICAgICAgIFstcCBvcHRzLWZvci1jdnNwc10gWy1QIGZpbGVdIFstQyBHSVRfcmVwb3NpdG9yeV0gWy16IGZ1enpdIFstaV0gWy1rXQorICAgICAgIFstdV0gWy1zIHN1YnN0XSBbLWFdIFstbV0gWy1NIHJlZ2V4XSBbLVMgcmVnZXhdIFstTCBjb21taXRsaW1pdF0KKyAgICAgICBbLXIgcmVtb3RlXSBbLVJdIFtDVlNfbW9kdWxlXQorRU5ECisJZXhpdCgxKTsKK30KKworc3ViIHJlYWRfYXV0aG9yX2luZm8oJCkgeworCW15ICgkZmlsZSkgPSBAXzsKKwlteSAkdXNlcjsKKwlvcGVuIG15ICRmLCAnPCcsICIkZmlsZSIgb3IgZGllKCJGYWlsZWQgdG8gb3BlbiAkZmlsZTogJCFcbiIpOworCisJd2hpbGUgKDwkZj4pIHsKKwkJIyBFeHBlY3RlZCBmb3JtYXQgaXMgdGhpczoKKwkJIyAgIGV4b249QW5kcmVhcyBFcmljc3NvbiA8YWVAb3A1LnNlPgorCQlpZiAobS9eKFxTKz8pXHMqPVxzKiguKz8pXHMqPCguKyk+XHMqJC8pIHsKKwkJCSR1c2VyID0gJDE7CisJCQkkY29udl9hdXRob3JfbmFtZXskdXNlcn0gPSAkMjsKKwkJCSRjb252X2F1dGhvcl9lbWFpbHskdXNlcn0gPSAkMzsKKwkJfQorCQkjIEhvd2V2ZXIsIHdlIGFsc28gcmVhZCBmcm9tIENWU1JPT1QvdXNlcnMgZm9ybWF0CisJCSMgdG8gZWFzZSBtaWdyYXRpb24uCisJCWVsc2lmICgvXihcdyspOihbJyJdPykoLis/KVwyXHMqJC8pIHsKKwkJCW15ICRtYXBwZWQ7CisJCQkoJHVzZXIsICRtYXBwZWQpID0gKCQxLCAkMyk7CisJCQlpZiAoJG1hcHBlZCA9fiAvXlxzKiguKj8pXHMqPCguKik+XHMqJC8pIHsKKwkJCQkkY29udl9hdXRob3JfbmFtZXskdXNlcn0gPSAkMTsKKwkJCQkkY29udl9hdXRob3JfZW1haWx7JHVzZXJ9ID0gJDI7CisJCQl9CisJCQllbHNpZiAoJG1hcHBlZCA9fiAvXjw/KC4qKT4/JC8pIHsKKwkJCQkkY29udl9hdXRob3JfbmFtZXskdXNlcn0gPSAkdXNlcjsKKwkJCQkkY29udl9hdXRob3JfZW1haWx7JHVzZXJ9ID0gJDE7CisJCQl9CisJCX0KKwkJIyBORUVEU1dPUks6IE1heWJlIHdhcm4gb24gdW5yZWNvZ25pemVkIGxpbmVzPworCX0KKwljbG9zZSAoJGYpOworfQorCitzdWIgd3JpdGVfYXV0aG9yX2luZm8oJCkgeworCW15ICgkZmlsZSkgPSBAXzsKKwlvcGVuIG15ICRmLCAnPicsICRmaWxlIG9yCisJICBkaWUoIkZhaWxlZCB0byBvcGVuICRmaWxlIGZvciB3cml0aW5nOiAkISIpOworCisJZm9yZWFjaCAoa2V5cyAlY29udl9hdXRob3JfbmFtZSkgeworCQlwcmludCAkZiAiJF89JGNvbnZfYXV0aG9yX25hbWV7JF99IDwkY29udl9hdXRob3JfZW1haWx7JF99PlxuIjsKKwl9CisJY2xvc2UgKCRmKTsKK30KKworIyBjb252ZXJ0IGdldG9wdHMgc3BlY3MgZm9yIHVzZSBieSBnaXQgY29uZmlnCitteSAlbG9uZ21hcCA9ICgKKwknQTonID0+ICdhdXRob3JzLWZpbGUnLAorCSdNOicgPT4gJ21lcmdlLXJlZ2V4JywKKwknUDonID0+IHVuZGVmLAorCSdSJyA9PiAndHJhY2stcmV2aXNpb25zJywKKwknUzonID0+ICdpZ25vcmUtcGF0aHMnLAorKTsKKworc3ViIHJlYWRfcmVwb19jb25maWcgeworCSMgU3BsaXQgdGhlIHN0cmluZyBiZXR3ZWVuIGNoYXJhY3RlcnMsIHVubGVzcyB0aGVyZSBpcyBhICc6JworCSMgU28gImFiYzpkZSIgYmVjb21lcyBbImEiLCAiYiIsICJjOiIsICJkIiwgImUiXQorCW15IEBvcHRzID0gc3BsaXQoLyAqKD8hOikvLCBzaGlmdCk7CisJZm9yZWFjaCBteSAkbyAoQG9wdHMpIHsKKwkJbXkgJGtleSA9ICRvOworCQkka2V5ID1+IHMvOi8vZzsKKwkJbXkgJGFyZyA9ICdnaXQgY29uZmlnJzsKKwkJJGFyZyAuPSAnIC0tYm9vbCcgaWYgKCRvICF+IC86JC8pOworCQlteSAkY2tleSA9ICRrZXk7CisKKwkJaWYgKGV4aXN0cyAkbG9uZ21hcHskb30pIHsKKwkJCSMgQW4gdXBwZXJjYXNlIG9wdGlvbiBsaWtlIC1SIGNhbm5vdCBiZQorCQkJIyBleHByZXNzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIGFzIHRoZQorCQkJIyB2YXJpYWJsZSBuYW1lcyBhcmUgZG93bmNhc2VkLgorCQkJJGNrZXkgPSAkbG9uZ21hcHskb307CisJCQluZXh0IGlmICghIGRlZmluZWQgJGNrZXkpOworCQkJJGNrZXkgPX4gcy8tLy9nOworCQl9CisJCWNob21wKG15ICR0bXAgPSBgJGFyZyAtLWdldCBjdnNpbXBvcnQuJGNrZXlgKTsKKwkJaWYgKCR0bXAgJiYgISgkYXJnID1+IC8tLWJvb2wvICYmICR0bXAgZXEgJ2ZhbHNlJykpIHsKKwkJCW5vIHN0cmljdCAncmVmcyc7CisJCQlteSAkb3B0X25hbWUgPSAib3B0XyIgLiAka2V5OworCQkJaWYgKCEkJG9wdF9uYW1lKSB7CisJCQkJJCRvcHRfbmFtZSA9ICR0bXA7CisJCQl9CisJCX0KKwl9Cit9CisKK215ICRvcHRzID0gImhhaXZta3VvOmQ6cDpyOkM6ejpzOk06UDpBOlM6TDpSIjsKK3JlYWRfcmVwb19jb25maWcoJG9wdHMpOworR2V0b3B0OjpMb25nOjpDb25maWd1cmUoICdub19pZ25vcmVfY2FzZScsICdidW5kbGluZycgKTsKKworIyB0dXJuIHRoZSBHZXRvcHQ6OlN0ZCBzcGVjaWZpY2F0aW9uIGluIGEgR2V0b3B0OjpMb25nIG9uZSwKKyMgd2l0aCBzdXBwb3J0IGZvciBtdWx0aXBsZSAtTSBvcHRpb25zCitHZXRPcHRpb25zKCBtYXAgeyBzLzovPXMvOyAvTS8gPyAiJF9cQCIgOiAkXyB9IHNwbGl0KCAvKD8hOikvLCAkb3B0cyApICkKKyAgICBvciB1c2FnZSgpOwordXNhZ2UgaWYgJG9wdF9oOworCitpZiAoQEFSR1YgPT0gMCkgeworCQljaG9tcChteSAkbW9kdWxlID0gYGdpdCBjb25maWcgLS1nZXQgY3ZzaW1wb3J0Lm1vZHVsZWApOworCQlwdXNoKEBBUkdWLCAkbW9kdWxlKSBpZiAkPyA9PSAwOworfQorQEFSR1YgPD0gMSBvciB1c2FnZSgiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBDVlMgbW9kdWxlIik7CisKK2lmICgkb3B0X2QpIHsKKwkkRU5WeyJDVlNST09UIn0gPSAkb3B0X2Q7Cit9IGVsc2lmICgtZiAnQ1ZTL1Jvb3QnKSB7CisJb3BlbiBteSAkZiwgJzwnLCAnQ1ZTL1Jvb3QnIG9yIGRpZSAnRmFpbGVkIHRvIG9wZW4gQ1ZTL1Jvb3QnOworCSRvcHRfZCA9IDwkZj47CisJY2hvbXAgJG9wdF9kOworCWNsb3NlICRmOworCSRFTlZ7IkNWU1JPT1QifSA9ICRvcHRfZDsKK30gZWxzaWYgKCRFTlZ7IkNWU1JPT1QifSkgeworCSRvcHRfZCA9ICRFTlZ7IkNWU1JPT1QifTsKK30gZWxzZSB7CisJdXNhZ2UoIkNWU1JPT1QgbmVlZHMgdG8gYmUgc2V0Iik7Cit9Ciskb3B0X3MgfHw9ICItIjsKKyRvcHRfYSB8fD0gMDsKKworbXkgJGdpdF90cmVlID0gJG9wdF9DOworJGdpdF90cmVlIHx8PSAiLiI7CisKK215ICRyZW1vdGU7CitpZiAoZGVmaW5lZCAkb3B0X3IpIHsKKwkkcmVtb3RlID0gJ3JlZnMvcmVtb3Rlcy8nIC4gJG9wdF9yOworCSRvcHRfbyB8fD0gIm1hc3RlciI7Cit9IGVsc2UgeworCSRvcHRfbyB8fD0gIm9yaWdpbiI7CisJJHJlbW90ZSA9ICdyZWZzL2hlYWRzJzsKK30KKworbXkgJGN2c190cmVlOworaWYgKCQjQVJHViA9PSAwKSB7CisJJGN2c190cmVlID0gJEFSR1ZbMF07Cit9IGVsc2lmICgtZiAnQ1ZTL1JlcG9zaXRvcnknKSB7CisJb3BlbiBteSAkZiwgJzwnLCAnQ1ZTL1JlcG9zaXRvcnknIG9yCisJICAgIGRpZSAnRmFpbGVkIHRvIG9wZW4gQ1ZTL1JlcG9zaXRvcnknOworCSRjdnNfdHJlZSA9IDwkZj47CisJY2hvbXAgJGN2c190cmVlOworCWNsb3NlICRmOworfSBlbHNlIHsKKwl1c2FnZSgiQ1ZTIG1vZHVsZSBoYXMgdG8gYmUgc3BlY2lmaWVkIik7Cit9CisKK291ciBAbWVyZ2VyeCA9ICgpOworaWYgKCRvcHRfbSkgeworCUBtZXJnZXJ4ID0gKCBxci9cYig/OmZyb218b2Z8bWVyZ2V8bWVyZ2luZ3xtZXJnZWQpIChbLVx3XSspL2kgKTsKK30KK2lmIChAb3B0X00pIHsKKwlwdXNoIChAbWVyZ2VyeCwgbWFwIHsgcXIvJF8vIH0gQG9wdF9NKTsKK30KKworIyBSZW1lbWJlciBVVEMgb2Ygb3VyIHN0YXJ0aW5nIHRpbWUKKyMgd2UnbGwgd2FudCB0byBhdm9pZCBpbXBvcnRpbmcgY29tbWl0cworIyB0aGF0IGFyZSB0b28gcmVjZW50CitvdXIgJHN0YXJ0dGltZSA9IHRpbWUoKTsKKworc2VsZWN0KFNUREVSUik7ICR8PTE7IHNlbGVjdChTVERPVVQpOworCisKK3BhY2thZ2UgQ1ZTY29ubjsKKyMgQmFzaWMgQ1ZTIGRpYWxvZy4KKyMgV2UncmUgb25seSBpbnRlcmVzdGVkIGluIGNvbm5lY3RpbmcgYW5kIGRvd25sb2FkaW5nLCBzbyAuLi4KKwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZmlsZSk7Cit1c2UgUE9TSVggcXcoc3RyZnRpbWUgZHVwMik7CisKK3N1YiBuZXcgeworCW15ICgkd2hhdCwkcmVwbywkc3ViZGlyKSA9IEBfOworCSR3aGF0PXJlZigkd2hhdCkgaWYgcmVmKCR3aGF0KTsKKworCW15ICRzZWxmID0ge307CisJJHNlbGYtPnsnYnVmZmVyJ30gPSAiIjsKKwlibGVzcygkc2VsZiwkd2hhdCk7CisKKwkkcmVwbyA9fiBzIy8rJCMjOworCSRzZWxmLT57J2Z1bGxyZXAnfSA9ICRyZXBvOworCSRzZWxmLT5jb25uKCk7CisKKwkkc2VsZi0+eydzdWJkaXInfSA9ICRzdWJkaXI7CisJJHNlbGYtPnsnbGluZXMnfSA9IHVuZGVmOworCisJcmV0dXJuICRzZWxmOworfQorCitzdWIgZmluZF9wYXNzd29yZF9lbnRyeSB7CisJbXkgKCRjdnNwYXNzLCBAY3Zzcm9vdCkgPSBAXzsKKwlteSAoJGZpbGUsICRkZWxpbSkgPSBAJGN2c3Bhc3M7CisJbXkgJHBhc3M7CisJbG9jYWwgKCRfKTsKKworCWlmIChvcGVuKG15ICRmaCwgJGZpbGUpKSB7CisJCSMgOnBzZXJ2ZXI6Y3ZzQG1lYS50bXQudGVsZS5maTovY3Zzcm9vdC96bWFpbGVyIEFoPFoKKwkJQ1ZTUEFTU0ZJTEU6CisJCXdoaWxlICg8JGZoPikgeworCQkJY2hvbXA7CisJCQlzL15cL1xkK1xzKy8vOworCQkJbXkgKCR3LCAkcCkgPSBzcGxpdCgkZGVsaW0sJF8sMik7CisJCQlmb3IgbXkgJGN2c3Jvb3QgKEBjdnNyb290KSB7CisJCQkJaWYgKCR3IGVxICRjdnNyb290KSB7CisJCQkJCSRwYXNzID0gJHA7CisJCQkJCWxhc3QgQ1ZTUEFTU0ZJTEU7CisJCQkJfQorCQkJfQorCQl9CisJCWNsb3NlKCRmaCk7CisJfQorCXJldHVybiAkcGFzczsKK30KKworc3ViIGNvbm4geworCW15ICRzZWxmID0gc2hpZnQ7CisJbXkgJHJlcG8gPSAkc2VsZi0+eydmdWxscmVwJ307CisJaWYgKCRyZXBvID1+IHMvXjpwc2VydmVyKD86KFteOl0qKSk6KD86KC4qPykoPzo6KC4qPykpP0ApPyhbXjpcL10qKSg/OjooXGQqKSk/Ly8pIHsKKwkJbXkgKCRwYXJhbSwkdXNlciwkcGFzcywkc2VydiwkcG9ydCkgPSAoJDEsJDIsJDMsJDQsJDUpOworCisJCW15ICgkcHJveHlob3N0LCRwcm94eXBvcnQpOworCQlpZiAoJHBhcmFtICYmICgkcGFyYW0gPX4gbS9wcm94eT0oW147XSspLykpIHsKKwkJCSRwcm94eWhvc3QgPSAkMTsKKwkJCSMgRGVmYXVsdCBwcm94eXBvcnQsIGlmIG5vdCBzcGVjaWZpZWQsIGlzIDgwODAuCisJCQkkcHJveHlwb3J0ID0gODA4MDsKKwkJCWlmICgkRU5WeyJDVlNfUFJPWFlfUE9SVCJ9KSB7CisJCQkJJHByb3h5cG9ydCA9ICRFTlZ7IkNWU19QUk9YWV9QT1JUIn07CisJCQl9CisJCQlpZiAoJHBhcmFtID1+IG0vcHJveHlwb3J0PShbXjtdKykvKSB7CisJCQkJJHByb3h5cG9ydCA9ICQxOworCQkJfQorCQl9CisJCSRyZXBvIHx8PSAnLyc7CisKKwkJIyBpZiB1c2VybmFtZSBpcyBub3QgZXhwbGljaXQgaW4gQ1ZTUk9PVCwgdGhlbiB1c2UgY3VycmVudCB1c2VyLCBhcyBjdnMgd291bGQKKwkJJHVzZXI9KGdldGxvZ2luKCkgfHwgJEVOVnsnTE9HTkFNRSd9IHx8ICRFTlZ7J1VTRVInfSB8fCAiYW5vbnltb3VzIikgdW5sZXNzICR1c2VyOworCQlteSAkcnIyID0gIi0iOworCQl1bmxlc3MgKCRwb3J0KSB7CisJCQkkcnIyID0gIjpwc2VydmVyOiR1c2VyXEAkc2VydjokcmVwbyI7CisJCQkkcG9ydD0yNDAxOworCQl9CisJCW15ICRyciA9ICI6cHNlcnZlcjokdXNlclxAJHNlcnY6JHBvcnQkcmVwbyI7CisKKwkJaWYgKCRwYXNzKSB7CisJCQkkcGFzcyA9ICRzZWxmLT5fc2NyYW1ibGUoJHBhc3MpOworCQl9IGVsc2UgeworCQkJbXkgQGN2c3Bhc3MgPSAoWyRFTlZ7J0hPTUUnfS4iLy5jdnNwYXNzIiwgcXIvXHMvXSwKKwkJCQkgICAgICAgWyRFTlZ7J0hPTUUnfS4iLy5jdnMvY3ZzcGFzcyIsIHFyLz0vXSk7CisJCQlteSBAbG9jID0gKCk7CisJCQlmb3JlYWNoIG15ICRjdnNwYXNzIChAY3ZzcGFzcykgeworCQkJCW15ICRwID0gZmluZF9wYXNzd29yZF9lbnRyeSgkY3ZzcGFzcywgJHJyLCAkcnIyKTsKKwkJCQlpZiAoJHApIHsKKwkJCQkJcHVzaCBAbG9jLCAkY3ZzcGFzcy0+WzBdOworCQkJCQkkcGFzcyA9ICRwOworCQkJCX0KKwkJCX0KKworCQkJaWYgKDEgPCBAbG9jKSB7CisJCQkJZGllKCJNdWx0aXBsZSBjdnMgcGFzc3dvcmQgZmlsZXMgaGF2ZSAiLgorCQkJCSAgICAiZW50cmllcyBmb3IgQ1ZTUk9PVCAkb3B0X2Q6IEBsb2MiKTsKKwkJCX0gZWxzaWYgKCEkcGFzcykgeworCQkJCSRwYXNzID0gIkEiOworCQkJfQorCQl9CisKKwkJbXkgKCRzLCAkcmVwKTsKKwkJaWYgKCRwcm94eWhvc3QpIHsKKworCQkJIyBVc2UgYSBIVFRQIFByb3h5LiBPbmx5IHdvcmtzIGZvciBIVFRQIHByb3hpZXMgdGhhdAorCQkJIyBkb24ndCByZXF1aXJlIHVzZXIgYXV0aGVudGljYXRpb24KKwkJCSMKKwkJCSMgU2VlOiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyODE3LnR4dAorCisJCQkkcyA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQZWVySG9zdCA9PiAkcHJveHlob3N0LCBQZWVyUG9ydCA9PiAkcHJveHlwb3J0KTsKKwkJCWRpZSAiU29ja2V0IHRvICRwcm94eWhvc3Q6ICQhXG4iIHVubGVzcyBkZWZpbmVkICRzOworCQkJJHMtPndyaXRlKCJDT05ORUNUICRzZXJ2OiRwb3J0IEhUVFAvMS4xXHJcbkhvc3Q6ICRzZXJ2OiRwb3J0XHJcblxyXG4iKQorCSAgICAgICAgICAgICAgICAgICAgICAgIG9yIGRpZSAiV3JpdGUgdG8gJHByb3h5aG9zdDogJCFcbiI7CisJICAgICAgICAgICAgICAgICRzLT5mbHVzaCgpOworCisJCQkkcmVwID0gPCRzPjsKKworCQkJIyBUaGUgYW5zd2VyIHNob3VsZCBsb29rIGxpa2UgJ0hUVFAvMS54IDJ5eSAuLi4uJworCQkJaWYgKCEoJHJlcCA9fiBtI15IVFRQLzFcLi4gMlswLTldWzAtOV0jKSkgeworCQkJCWRpZSAiUHJveHkgY29ubmVjdDogJHJlcFxuIjsKKwkJCX0KKwkJCSMgU2tpcCB1cCB0byB0aGUgZW1wdHkgbGluZSBvZiB0aGUgcHJveHkgc2VydmVyIG91dHB1dAorCQkJIyBpbmNsdWRpbmcgdGhlIHJlc3BvbnNlIGhlYWRlcnMuCisJCQl3aGlsZSAoJHJlcCA9IDwkcz4pIHsKKwkJCQlsYXN0IGlmICghZGVmaW5lZCAkcmVwIHx8CisJCQkJCSAkcmVwIGVxICJcbiIgfHwKKwkJCQkJICRyZXAgZXEgIlxyXG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRzID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFBlZXJIb3N0ID0+ICRzZXJ2LCBQZWVyUG9ydCA9PiAkcG9ydCk7CisJCQlkaWUgIlNvY2tldCB0byAkc2VydjogJCFcbiIgdW5sZXNzIGRlZmluZWQgJHM7CisJCX0KKworCQkkcy0+d3JpdGUoIkJFR0lOIEFVVEggUkVRVUVTVFxuJHJlcG9cbiR1c2VyXG4kcGFzc1xuRU5EIEFVVEggUkVRVUVTVFxuIikKKwkJCW9yIGRpZSAiV3JpdGUgdG8gJHNlcnY6ICQhXG4iOworCQkkcy0+Zmx1c2goKTsKKworCQkkcmVwID0gPCRzPjsKKworCQlpZiAoJHJlcCBuZSAiSSBMT1ZFIFlPVVxuIikgeworCQkJJHJlcD0iPHVua25vd24+IiB1bmxlc3MgJHJlcDsKKwkJCWRpZSAiQXV0aFJlcGx5OiAkcmVwXG4iOworCQl9CisJCSRzZWxmLT57J3NvY2tldG8nfSA9ICRzOworCQkkc2VsZi0+eydzb2NrZXRpJ30gPSAkczsKKwl9IGVsc2UgeyAjIGxvY2FsIG9yIGV4dDogRm9yayBvZmYgb3VyIG93biBjdnMgc2VydmVyLgorCQlteSAkcHIgPSBJTzo6UGlwZS0+bmV3KCk7CisJCW15ICRwdyA9IElPOjpQaXBlLT5uZXcoKTsKKwkJbXkgJHBpZCA9IGZvcmsoKTsKKwkJZGllICJGb3JrOiAkIVxuIiB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQlteSAkY3ZzID0gJ2N2cyc7CisJCSRjdnMgPSAkRU5We0NWU19TRVJWRVJ9IGlmIGV4aXN0cyAkRU5We0NWU19TRVJWRVJ9OworCQlteSAkcnNoID0gJ3JzaCc7CisJCSRyc2ggPSAkRU5We0NWU19SU0h9IGlmIGV4aXN0cyAkRU5We0NWU19SU0h9OworCisJCW15IEBjdnMgPSAoJGN2cywgJ3NlcnZlcicpOworCQlteSAoJGxvY2FsLCAkdXNlciwgJGhvc3QpOworCQkkbG9jYWwgPSAkcmVwbyA9fiBzLzpsb2NhbDovLzsKKwkJaWYgKCEkbG9jYWwpIHsKKwkJICAgICRyZXBvID1+IHMvOmV4dDovLzsKKwkJICAgICRsb2NhbCA9ICEoJHJlcG8gPX4gcy9eKD86KFteXEA6XSspXEApPyhbXjpdKyk6Ly8pOworCQkgICAgKCR1c2VyLCAkaG9zdCkgPSAoJDEsICQyKTsKKwkJfQorCQlpZiAoISRsb2NhbCkgeworCQkgICAgaWYgKCR1c2VyKSB7CisJCQl1bnNoaWZ0IEBjdnMsICRyc2gsICctbCcsICR1c2VyLCAkaG9zdDsKKwkJICAgIH0gZWxzZSB7CisJCQl1bnNoaWZ0IEBjdnMsICRyc2gsICRob3N0OworCQkgICAgfQorCQl9CisKKwkJdW5sZXNzICgkcGlkKSB7CisJCQkkcHItPndyaXRlcigpOworCQkJJHB3LT5yZWFkZXIoKTsKKwkJCWR1cDIoJHB3LT5maWxlbm8oKSwwKTsKKwkJCWR1cDIoJHByLT5maWxlbm8oKSwxKTsKKwkJCSRwci0+Y2xvc2UoKTsKKwkJCSRwdy0+Y2xvc2UoKTsKKwkJCWV4ZWMoQGN2cyk7CisJCX0KKwkJJHB3LT53cml0ZXIoKTsKKwkJJHByLT5yZWFkZXIoKTsKKwkJJHNlbGYtPnsnc29ja2V0byd9ID0gJHB3OworCQkkc2VsZi0+eydzb2NrZXRpJ30gPSAkcHI7CisJfQorCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIlJvb3QgJHJlcG9cbiIpOworCisJIyBUcmlhbCBhbmQgZXJyb3Igc2F5cyB0aGF0IHRoaXMgcHJvYmFibHkgaXMgdGhlIG1pbmltdW0gc2V0CisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiVmFsaWQtcmVzcG9uc2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIE1vZGUgTSBNYmluYXJ5IEUgQ2hlY2tlZC1pbiBDcmVhdGVkIFVwZGF0ZWQgTWVyZ2VkIFJlbW92ZWRcbiIpOworCisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgidmFsaWQtcmVxdWVzdHNcbiIpOworCSRzZWxmLT57J3NvY2tldG8nfS0+Zmx1c2goKTsKKworCW15ICRyZXA9JHNlbGYtPnJlYWRsaW5lKCk7CisJZGllICJGYWlsZWQgdG8gcmVhZCBmcm9tIHNlcnZlciIgdW5sZXNzIGRlZmluZWQgJHJlcDsKKwljaG9tcCgkcmVwKTsKKwlpZiAoJHJlcCAhfiBzL15WYWxpZC1yZXF1ZXN0c1xzKi8vKSB7CisJCSRyZXA9Ijx1bmtub3duPiIgdW5sZXNzICRyZXA7CisJCWRpZSAiRXhwZWN0ZWQgVmFsaWQtcmVxdWVzdHMgZnJvbSBzZXJ2ZXIsIGJ1dCBnb3Q6ICRyZXBcbiI7CisJfQorCWNob21wKG15ICRyZXM9JHNlbGYtPnJlYWRsaW5lKCkpOworCWRpZSAidmFsaWRSZXBseTogJHJlc1xuIiBpZiAkcmVzIG5lICJvayI7CisKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJVc2VVbmNoYW5nZWRcbiIpIGlmICRyZXAgPX4gL1xiVXNlVW5jaGFuZ2VkXGIvOworCSRzZWxmLT57J3JlcG8nfSA9ICRyZXBvOworfQorCitzdWIgcmVhZGxpbmUgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPnsnc29ja2V0aSd9LT5nZXRsaW5lKCk7Cit9CisKK3N1YiBfZmlsZSB7CisJIyBSZXF1ZXN0IGEgZmlsZSB3aXRoIGEgZ2l2ZW4gcmV2aXNpb24uCisJIyBUcmlhbCBhbmQgZXJyb3Igc2F5cyB0aGlzIGlzIGEgZ29vZCB3YXkgdG8gZG8gaXQuIDotLworCW15ICgkc2VsZiwkZm4sJHJldikgPSBAXzsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAtTlxuIikgb3IgcmV0dXJuIHVuZGVmOworCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIkFyZ3VtZW50IC1QXG4iKSBvciByZXR1cm4gdW5kZWY7CisJIyAta2s6IExpbnVzJyB2ZXJzaW9uIGRvZXNuJ3QgdXNlIGl0IC0gZGVmYXVsdHMgdG8gb2ZmCisJaWYgKCRvcHRfaykgeworCSAgICAkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAta2tcbiIpIG9yIHJldHVybiB1bmRlZjsKKwl9CisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiQXJndW1lbnQgLXJcbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAkcmV2XG4iKSBvciByZXR1cm4gdW5kZWY7CisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiQXJndW1lbnQgLS1cbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAkc2VsZi0+eydzdWJkaXInfS8kZm5cbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJEaXJlY3RvcnkgLlxuIikgb3IgcmV0dXJuIHVuZGVmOworCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIiRzZWxmLT57J3JlcG8nfVxuIikgb3IgcmV0dXJuIHVuZGVmOworCSMgJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiU3RpY2t5IFQxLjBcbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJjb1xuIikgb3IgcmV0dXJuIHVuZGVmOworCSRzZWxmLT57J3NvY2tldG8nfS0+Zmx1c2goKSBvciByZXR1cm4gdW5kZWY7CisJJHNlbGYtPnsnbGluZXMnfSA9IDA7CisJcmV0dXJuIDE7Cit9CitzdWIgX2xpbmUgeworCSMgUmVhZCBhIGxpbmUgZnJvbSB0aGUgc2VydmVyLgorCSMgLi4uIGV4Y2VwdCB0aGF0ICdsaW5lJyBtYXkgYmUgYW4gZW50aXJlIGZpbGUuIDstKQorCW15ICgkc2VsZiwgJGZoKSA9IEBfOworCWRpZSAiTm90IGluIGxpbmVzIiB1bmxlc3MgZGVmaW5lZCAkc2VsZi0+eydsaW5lcyd9OworCisJbXkgJGxpbmU7CisJbXkgJHJlcz0wOworCXdoaWxlIChkZWZpbmVkKCRsaW5lID0gJHNlbGYtPnJlYWRsaW5lKCkpKSB7CisJCSMgTSBVIGdudXBnLWN2cy1yZXAvQVVUSE9SUworCQkjIFVwZGF0ZWQgZ251cGctY3ZzLXJlcC8KKwkJIyAvZGF0ZW4vc3JjL3JzeW5jL2dudXBnLWN2cy1yZXAvQVVUSE9SUworCQkjIC9BVVRIT1JTLzEuMS8vL1QxLjEKKwkJIyB1PXJ3LGc9cncsbz1ydworCQkjIDAKKwkJIyBvaworCisJCWlmICgkbGluZSA9fiBzL14oPzpDcmVhdGVkfFVwZGF0ZWQpIC8vKSB7CisJCQkkbGluZSA9ICRzZWxmLT5yZWFkbGluZSgpOyAjIHBhdGgKKwkJCSRsaW5lID0gJHNlbGYtPnJlYWRsaW5lKCk7ICMgRW50cmllcyBsaW5lCisJCQlteSAkbW9kZSA9ICRzZWxmLT5yZWFkbGluZSgpOyBjaG9tcCAkbW9kZTsKKwkJCSRzZWxmLT57J21vZGUnfSA9ICRtb2RlOworCQkJZGVmaW5lZCAobXkgJGNudCA9ICRzZWxmLT5yZWFkbGluZSgpKQorCQkJCW9yIGRpZSAiRU9GIGZyb20gc2VydmVyIGFmdGVyICdDaGFuZ2VkJ1xuIjsKKwkJCWNob21wICRjbnQ7CisJCQlkaWUgIkR1aDogRmlsZXNpemUgJGNudCIgaWYgJGNudCAhfiAvXlxkKyQvOworCQkJJGxpbmU9IiI7CisJCQkkcmVzID0gJHNlbGYtPl9mZXRjaGZpbGUoJGZoLCAkY250KTsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gcy9eIC8vKSB7CisJCQlwcmludCAkZmggJGxpbmU7CisJCQkkcmVzICs9IGxlbmd0aCgkbGluZSk7CisJCX0gZWxzaWYgKCRsaW5lID1+IC9eTVxiLykgeworCQkJIyBvdXRwdXQsIGRvIG5vdGhpbmcKKwkJfSBlbHNpZiAoJGxpbmUgPX4gL15NYmluYXJ5XGIvKSB7CisJCQlteSAkY250OworCQkJZGllICJFT0YgZnJvbSBzZXJ2ZXIgYWZ0ZXIgJ01iaW5hcnknIiB1bmxlc3MgZGVmaW5lZCAoJGNudCA9ICRzZWxmLT5yZWFkbGluZSgpKTsKKwkJCWNob21wICRjbnQ7CisJCQlkaWUgIkR1aDogTWJpbmFyeSAkY250IiBpZiAkY250ICF+IC9eXGQrJC8gb3IgJGNudDwxOworCQkJJGxpbmU9IiI7CisJCQkkcmVzICs9ICRzZWxmLT5fZmV0Y2hmaWxlKCRmaCwgJGNudCk7CisJCX0gZWxzZSB7CisJCQljaG9tcCAkbGluZTsKKwkJCWlmICgkbGluZSBlcSAib2siKSB7CisJCQkJIyBwcmludCBTVERFUlIgIlM6IG9rICgiLmxlbmd0aCgkcmVzKS4iKVxuIjsKKwkJCQlyZXR1cm4gJHJlczsKKwkJCX0gZWxzaWYgKCRsaW5lID1+IHMvXkUgLy8pIHsKKwkJCQkjIHByaW50IFNUREVSUiAiUzogJGxpbmVcbiI7CisJCQl9IGVsc2lmICgkbGluZSA9fiAvXihSZW1vdmUtZW50cnl8UmVtb3ZlZCkgL2kpIHsKKwkJCQkkbGluZSA9ICRzZWxmLT5yZWFkbGluZSgpOyAjIGZpbGVuYW1lCisJCQkJJGxpbmUgPSAkc2VsZi0+cmVhZGxpbmUoKTsgIyBPSworCQkJCWNob21wICRsaW5lOworCQkJCWRpZSAiVW5rbm93bjogJGxpbmUiIGlmICRsaW5lIG5lICJvayI7CisJCQkJcmV0dXJuIC0xOworCQkJfSBlbHNlIHsKKwkJCQlkaWUgIlVua25vd246ICRsaW5lXG4iOworCQkJfQorCQl9CisJfQorCXJldHVybiB1bmRlZjsKK30KK3N1YiBmaWxlIHsKKwlteSAoJHNlbGYsJGZuLCRyZXYpID0gQF87CisJbXkgJHJlczsKKworCW15ICgkZmgsICRuYW1lKSA9IHRlbXBmaWxlKCdnaXRjdnMuWFhYWFhYJywKKwkJICAgIERJUiA9PiBGaWxlOjpTcGVjLT50bXBkaXIoKSwgVU5MSU5LID0+IDEpOworCisJJHNlbGYtPl9maWxlKCRmbiwkcmV2KSBhbmQgJHJlcyA9ICRzZWxmLT5fbGluZSgkZmgpOworCisJaWYgKCFkZWZpbmVkICRyZXMpIHsKKwkgICAgcHJpbnQgU1RERVJSICJTZXJ2ZXIgaGFzIGdvbmUgYXdheSB3aGlsZSBmZXRjaGluZyAkZm4gJHJldiwgcmV0cnlpbmcuLi5cbiI7CisJICAgIHRydW5jYXRlICRmaCwgMDsKKwkgICAgJHNlbGYtPmNvbm4oKTsKKwkgICAgJHNlbGYtPl9maWxlKCRmbiwkcmV2KSBvciBkaWUgIk5vIGZpbGUgY29tbWFuZCBzZW5kIjsKKwkgICAgJHJlcyA9ICRzZWxmLT5fbGluZSgkZmgpOworCSAgICBkaWUgIlJldHJ5IGZhaWxlZCIgdW5sZXNzIGRlZmluZWQgJHJlczsKKwl9CisJY2xvc2UgKCRmaCk7CisKKwlyZXR1cm4gKCRuYW1lLCAkcmVzKTsKK30KK3N1YiBfZmV0Y2hmaWxlIHsKKwlteSAoJHNlbGYsICRmaCwgJGNudCkgPSBAXzsKKwlteSAkcmVzID0gMDsKKwlteSAkYnVmc2l6ZSA9IDEwMjQgKiAxMDI0OworCXdoaWxlICgkY250KSB7CisJICAgIGlmICgkYnVmc2l6ZSA+ICRjbnQpIHsKKwkJJGJ1ZnNpemUgPSAkY250OworCSAgICB9CisJICAgIG15ICRidWY7CisJICAgIG15ICRudW0gPSAkc2VsZi0+eydzb2NrZXRpJ30tPnJlYWQoJGJ1ZiwkYnVmc2l6ZSk7CisJICAgIGRpZSAiU2VydmVyOiBGaWxlc2l6ZSAkY250OiAkbnVtOiAkIVxuIiBpZiBub3QgZGVmaW5lZCAkbnVtIG9yICRudW08PTA7CisJICAgIHByaW50ICRmaCAkYnVmOworCSAgICAkcmVzICs9ICRudW07CisJICAgICRjbnQgLT0gJG51bTsKKwl9CisJcmV0dXJuICRyZXM7Cit9CisKK3N1YiBfc2NyYW1ibGUgeworCW15ICgkc2VsZiwgJHBhc3MpID0gQF87CisJbXkgJHNjcmFtYmxlZCA9ICJBIjsKKworCXJldHVybiAkc2NyYW1ibGVkIHVubGVzcyAkcGFzczsKKworCW15ICRwYXNzX2xlbiA9IGxlbmd0aCgkcGFzcyk7CisJbXkgQHBhc3NfYXJyID0gc3BsaXQoIiIsICRwYXNzKTsKKwlteSAkaTsKKworCSMgZnJvbSBjdnMvc3JjL3NjcmFtYmxlLmMKKwlteSBAc2hpZnRzID0gKAorCQkgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisJCSAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwKKwkJMTE0LDEyMCwgNTMsIDc5LCA5NiwxMDksIDcyLDEwOCwgNzAsIDY0LCA3NiwgNjcsMTE2LCA3NCwgNjgsIDg3LAorCQkxMTEsIDUyLCA3NSwxMTksIDQ5LCAzNCwgODIsIDgxLCA5NSwgNjUsMTEyLCA4NiwxMTgsMTEwLDEyMiwxMDUsCisJCSA0MSwgNTcsIDgzLCA0MywgNDYsMTAyLCA0MCwgODksIDM4LDEwMywgNDUsIDUwLCA0MiwxMjMsIDkxLCAzNSwKKwkJMTI1LCA1NSwgNTQsIDY2LDEyNCwxMjYsIDU5LCA0NywgOTIsIDcxLDExNSwgNzgsIDg4LDEwNywxMDYsIDU2LAorCQkgMzYsMTIxLDExNywxMDQsMTAxLDEwMCwgNjksIDczLCA5OSwgNjMsIDk0LCA5MywgMzksIDM3LCA2MSwgNDgsCisJCSA1OCwxMTMsIDMyLCA5MCwgNDQsIDk4LCA2MCwgNTEsIDMzLCA5NywgNjIsIDc3LCA4NCwgODAsIDg1LDIyMywKKwkJMjI1LDIxNiwxODcsMTY2LDIyOSwxODksMjIyLDE4OCwxNDEsMjQ5LDE0OCwyMDAsMTg0LDEzNiwyNDgsMTkwLAorCQkxOTksMTcwLDE4MSwyMDQsMTM4LDIzMiwyMTgsMTgzLDI1NSwyMzQsMjIwLDI0NywyMTMsMjAzLDIyNiwxOTMsCisJCTE3NCwxNzIsMjI4LDI1MiwyMTcsMjAxLDEzMSwyMzAsMTk3LDIxMSwxNDUsMjM4LDE2MSwxNzksMTYwLDIxMiwKKwkJMjA3LDIyMSwyNTQsMTczLDIwMiwxNDYsMjI0LDE1MSwxNDAsMTk2LDIwNSwxMzAsMTM1LDEzMywxNDMsMjQ2LAorCQkxOTIsMTU5LDI0NCwyMzksMTg1LDE2OCwyMTUsMTQ0LDEzOSwxNjUsMTgwLDE1NywxNDcsMTg2LDIxNCwxNzYsCisJCTIyNywyMzEsMjE5LDE2OSwxNzUsMTU2LDIwNiwxOTgsMTI5LDE2NCwxNTAsMjEwLDE1NCwxNzcsMTM0LDEyNywKKwkJMTgyLDEyOCwxNTgsMjA4LDE2MiwxMzIsMTY3LDIwOSwxNDksMjQxLDE1MywyNTEsMjM3LDIzNiwxNzEsMTk1LAorCQkyNDMsMjMzLDI1MywyNDAsMTk0LDI1MCwxOTEsMTU1LDE0MiwxMzcsMjQ1LDIzNSwxNjMsMjQyLDE3OCwxNTIKKwkpOworCisJZm9yICgkaSA9IDA7ICRpIDwgJHBhc3NfbGVuOyAkaSsrKSB7CisJCSRzY3JhbWJsZWQgLj0gcGFjaygiQyIsICRzaGlmdHNbb3JkKCRwYXNzX2FyclskaV0pXSk7CisJfQorCisJcmV0dXJuICRzY3JhbWJsZWQ7Cit9CisKK3BhY2thZ2UgbWFpbjsKKworbXkgJGN2cyA9IENWU2Nvbm4tPm5ldygkb3B0X2QsICRjdnNfdHJlZSk7CisKKworc3ViIHBkYXRlKCQpIHsKKwlteSAoJGQpID0gQF87CisJbSMoXGR7Miw0fSkvKFxkXGQpLyhcZFxkKVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpPyMKKwkJb3IgZGllICJVbnBhcnNlYWJsZSBkYXRlOiAkZFxuIjsKKwlteSAkeT0kMTsgJHktPTE5MDAgaWYgJHk+MTkwMDsKKwlyZXR1cm4gdGltZWdtKCQ2fHwwLCQ1LCQ0LCQzLCQyLTEsJHkpOworfQorCitzdWIgcG1vZGUoJCkgeworCW15ICgkbW9kZSkgPSBAXzsKKwlteSAkbSA9IDA7CisJbXkgJG1tID0gMDsKKwlteSAkdW0gPSAwOworCWZvciBteSAkeChzcGxpdCgvLywkbW9kZSkpIHsKKwkJaWYgKCR4IGVxICIsIikgeworCQkJJG0gfD0gJG1tJiR1bTsKKwkJCSRtbSA9IDA7CisJCQkkdW0gPSAwOworCQl9IGVsc2lmICgkeCBlcSAidSIpIHsgJHVtIHw9IDA3MDA7CisJCX0gZWxzaWYgKCR4IGVxICJnIikgeyAkdW0gfD0gMDA3MDsKKwkJfSBlbHNpZiAoJHggZXEgIm8iKSB7ICR1bSB8PSAwMDA3OworCQl9IGVsc2lmICgkeCBlcSAiciIpIHsgJG1tIHw9IDA0NDQ7CisJCX0gZWxzaWYgKCR4IGVxICJ3IikgeyAkbW0gfD0gMDIyMjsKKwkJfSBlbHNpZiAoJHggZXEgIngiKSB7ICRtbSB8PSAwMTExOworCQl9IGVsc2lmICgkeCBlcSAiPSIpIHsgIyBkbyBub3RoaW5nCisJCX0gZWxzZSB7IGRpZSAiVW5rbm93biBtb2RlOiAkbW9kZVxuIjsKKwkJfQorCX0KKwkkbSB8PSAkbW0mJHVtOworCXJldHVybiAkbTsKK30KKworc3ViIGdldHdkKCkgeworCW15ICRwd2QgPSBgcHdkYDsKKwljaG9tcCAkcHdkOworCXJldHVybiAkcHdkOworfQorCitzdWIgaXNfc2hhMSB7CisJbXkgJHMgPSBzaGlmdDsKKwlyZXR1cm4gJHMgPX4gL15bYS1mMC05XXs0MH0kLzsKK30KKworc3ViIGdldF9oZWFkcmVmICgkKSB7CisJbXkgJG5hbWUgPSBzaGlmdDsKKwlteSAkciA9IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICckbmFtZScgMj4vZGV2L251bGxgOworCXJldHVybiB1bmRlZiB1bmxlc3MgJD8gPT0gMDsKKwljaG9tcCAkcjsKKwlyZXR1cm4gJHI7Cit9CisKK215ICR1c2VyX2ZpbGVuYW1lX3ByZXBlbmQgPSAnJzsKK3N1YiBtdW5nZV91c2VyX2ZpbGVuYW1lIHsKKwlteSAkbmFtZSA9IHNoaWZ0OworCXJldHVybiBGaWxlOjpTcGVjLT5maWxlX25hbWVfaXNfYWJzb2x1dGUoJG5hbWUpID8KKwkJJG5hbWUgOgorCQkkdXNlcl9maWxlbmFtZV9wcmVwZW5kIC4gJG5hbWU7Cit9CisKKy1kICRnaXRfdHJlZQorCW9yIG1rZGlyKCRnaXRfdHJlZSwwNzc3KQorCW9yIGRpZSAiQ291bGQgbm90IGNyZWF0ZSAkZ2l0X3RyZWU6ICQhIjsKK2lmICgkZ2l0X3RyZWUgbmUgJy4nKSB7CisJJHVzZXJfZmlsZW5hbWVfcHJlcGVuZCA9IGdldHdkKCkgLiAnLyc7CisJY2hkaXIoJGdpdF90cmVlKTsKK30KKworbXkgJGxhc3RfYnJhbmNoID0gIiI7CitteSAkb3JpZ19icmFuY2ggPSAiIjsKK215ICVicmFuY2hfZGF0ZTsKK215ICR0aXBfYXRfc3RhcnQgPSB1bmRlZjsKKworbXkgJGdpdF9kaXIgPSAkRU5WeyJHSVRfRElSIn0gfHwgIi5naXQiOworJGdpdF9kaXIgPSBnZXR3ZCgpLiIvIi4kZ2l0X2RpciB1bmxlc3MgJGdpdF9kaXIgPX4gbSNeLyM7CiskRU5WeyJHSVRfRElSIn0gPSAkZ2l0X2RpcjsKK215ICRvcmlnX2dpdF9pbmRleDsKKyRvcmlnX2dpdF9pbmRleCA9ICRFTlZ7R0lUX0lOREVYX0ZJTEV9IGlmIGV4aXN0cyAkRU5We0dJVF9JTkRFWF9GSUxFfTsKKworbXkgJWluZGV4OyAjIGhvbGRzIGZpbGVuYW1lcyBvZiBvbmUgaW5kZXggcGVyIGJyYW5jaAorCit1bmxlc3MgKC1kICRnaXRfZGlyKSB7CisJc3lzdGVtKHF3KGdpdCBpbml0KSk7CisJZGllICJDYW5ub3QgaW5pdCB0aGUgR0lUIGRiIGF0ICRnaXRfdHJlZTogJD9cbiIgaWYgJD87CisJc3lzdGVtKHF3KGdpdCByZWFkLXRyZWUgLS1lbXB0eSkpOworCWRpZSAiQ2Fubm90IGluaXQgYW4gZW1wdHkgdHJlZTogJD9cbiIgaWYgJD87CisKKwkkbGFzdF9icmFuY2ggPSAkb3B0X287CisJJG9yaWdfYnJhbmNoID0gIiI7Cit9IGVsc2UgeworCW9wZW4oRiwgIi18IiwgcXcoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSkgb3IKKwkJZGllICJDYW5ub3QgcnVuIGdpdCBzeW1ib2xpYy1yZWY6ICQhXG4iOworCWNob21wICgkbGFzdF9icmFuY2ggPSA8Rj4pOworCSRsYXN0X2JyYW5jaCA9IGJhc2VuYW1lKCRsYXN0X2JyYW5jaCk7CisJY2xvc2UoRik7CisJdW5sZXNzICgkbGFzdF9icmFuY2gpIHsKKwkJd2FybiAiQ2Fubm90IHJlYWQgdGhlIGxhc3QgYnJhbmNoIG5hbWU6ICQhIC0tIGFzc3VtaW5nICdtYXN0ZXInXG4iOworCQkkbGFzdF9icmFuY2ggPSAibWFzdGVyIjsKKwl9CisJJG9yaWdfYnJhbmNoID0gJGxhc3RfYnJhbmNoOworCSR0aXBfYXRfc3RhcnQgPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYDsKKworCSMgR2V0IHRoZSBsYXN0IGltcG9ydCB0aW1lc3RhbXBzCisJbXkgJGZtdCA9ICcoJHJlZiwgJGF1dGhvcikgPSAoJShyZWZuYW1lKSwgJShhdXRob3IpKTsnOworCW15IEBjbWQgPSAoJ2dpdCcsICdmb3ItZWFjaC1yZWYnLCAnLS1wZXJsJywgIi0tZm9ybWF0PSRmbXQiLCAkcmVtb3RlKTsKKwlvcGVuKEgsICItfCIsIEBjbWQpIG9yIGRpZSAiQ2Fubm90IHJ1biBnaXQgZm9yLWVhY2gtcmVmOiAkIVxuIjsKKwl3aGlsZSAoZGVmaW5lZChteSAkZW50cnkgPSA8SD4pKSB7CisJCW15ICgkcmVmLCAkYXV0aG9yKTsKKwkJZXZhbCgkZW50cnkpIHx8IGRpZSAiY2Fubm90IGV2YWwgcmVmcyBsaXN0OiAkQCI7CisJCW15ICgkaGVhZCkgPSAoJHJlZiA9fiBtfF4kcmVtb3RlLyguKil8KTsKKwkJJGF1dGhvciA9fiAvXi4qXHMoXGQrKVxzWy0rXVxkezR9JC87CisJCSRicmFuY2hfZGF0ZXskaGVhZH0gPSAkMTsKKwl9CisJY2xvc2UoSCk7CisgICAgICAgIGlmICghZXhpc3RzICRicmFuY2hfZGF0ZXskb3B0X299KSB7CisJCWRpZSAiQnJhbmNoICckb3B0X28nIGRvZXMgbm90IGV4aXN0LlxuIi4KKwkJICAgICAgICJFaXRoZXIgdXNlIHRoZSBjb3JyZWN0ICctbyBicmFuY2gnIG9wdGlvbixcbiIuCisJCSAgICAgICAib3IgaW1wb3J0IHRvIGEgbmV3IHJlcG9zaXRvcnkuXG4iOworICAgICAgICB9Cit9CisKKy1kICRnaXRfZGlyCisJb3IgZGllICJDb3VsZCBub3QgY3JlYXRlIGdpdCBzdWJkaXIgKCRnaXRfZGlyKS5cbiI7CisKKyMgbm93IHdlIHJlYWQgKGFuZCBwb3NzaWJseSBzYXZlKSBhdXRob3ItaW5mbyBhcyB3ZWxsCistZiAiJGdpdF9kaXIvY3ZzLWF1dGhvcnMiIGFuZAorICByZWFkX2F1dGhvcl9pbmZvKCIkZ2l0X2Rpci9jdnMtYXV0aG9ycyIpOworaWYgKCRvcHRfQSkgeworCXJlYWRfYXV0aG9yX2luZm8obXVuZ2VfdXNlcl9maWxlbmFtZSgkb3B0X0EpKTsKKwl3cml0ZV9hdXRob3JfaW5mbygiJGdpdF9kaXIvY3ZzLWF1dGhvcnMiKTsKK30KKworIyBvcGVuIC5naXQvY3ZzLXJldmlzaW9ucywgaWYgcmVxdWVzdGVkCitvcGVuIG15ICRyZXZpc2lvbl9tYXAsICc+PicsICIkZ2l0X2Rpci9jdnMtcmV2aXNpb25zIgorICAgIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkZ2l0X2Rpci9jdnMtcmV2aXNpb25zIGZvciBhcHBlbmRpbmc6ICQhXG4iCisJaWYgZGVmaW5lZCAkb3B0X1I7CisKKworIworIyBydW4gY3ZzcHMgaW50byBhIGZpbGUgdW5sZXNzIHdlIGFyZSBnZXR0aW5nCisjIGl0IHBhc3NlZCBhcyBhIGZpbGUgdmlhICRvcHRfUAorIworbXkgJGN2c3BzZmlsZTsKK3VubGVzcyAoJG9wdF9QKSB7CisJcHJpbnQgIlJ1bm5pbmcgY3ZzcHMuLi5cbiIgaWYgJG9wdF92OworCW15ICRwaWQgPSBvcGVuKENWU1BTLCItfCIpOworCW15ICRjdnNwc2ZoOworCWRpZSAiQ2Fubm90IGZvcms6ICQhXG4iIHVubGVzcyBkZWZpbmVkICRwaWQ7CisJdW5sZXNzICgkcGlkKSB7CisJCW15IEBvcHQ7CisJCUBvcHQgPSBzcGxpdCgvLC8sJG9wdF9wKSBpZiBkZWZpbmVkICRvcHRfcDsKKwkJdW5zaGlmdCBAb3B0LCAnLXonLCAkb3B0X3ogaWYgZGVmaW5lZCAkb3B0X3o7CisJCXVuc2hpZnQgQG9wdCwgJy1xJyAgICAgICAgIHVubGVzcyBkZWZpbmVkICRvcHRfdjsKKwkJdW5sZXNzIChkZWZpbmVkKCRvcHRfcCkgJiYgJG9wdF9wID1+IG0vLS1uby1jdnMtZGlyZWN0LykgeworCQkJcHVzaCBAb3B0LCAnLS1jdnMtZGlyZWN0JzsKKwkJfQorCQlleGVjKCJjdnNwcyIsIi0tbm9yYyIsQG9wdCwiLXUiLCItQSIsJy0tcm9vdCcsJG9wdF9kLCRjdnNfdHJlZSk7CisJCWRpZSAiQ291bGQgbm90IHN0YXJ0IGN2c3BzOiAkIVxuIjsKKwl9CisJKCRjdnNwc2ZoLCAkY3ZzcHNmaWxlKSA9IHRlbXBmaWxlKCdnaXRYWFhYWFgnLCBTVUZGSVggPT4gJy5jdnNwcycsCisJCQkJCSAgRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpKTsKKwl3aGlsZSAoPENWU1BTPikgeworCSAgICBwcmludCAkY3ZzcHNmaCAkXzsKKwl9CisJY2xvc2UgQ1ZTUFM7CisJJD8gPT0gMCBvciBkaWUgImdpdCBjdnNpbXBvcnQ6IGZhdGFsOiBjdnNwcyByZXBvcnRlZCBlcnJvclxuIjsKKwljbG9zZSAkY3ZzcHNmaDsKK30gZWxzZSB7CisJJGN2c3BzZmlsZSA9IG11bmdlX3VzZXJfZmlsZW5hbWUoJG9wdF9QKTsKK30KKworb3BlbihDVlMsICI8JGN2c3BzZmlsZSIpIG9yIGRpZSAkITsKKworIyMgY3ZzcHMgb3V0cHV0OgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI1BhdGNoU2V0IDMxNAorI0RhdGU6IDE5OTkvMDkvMTggMTM6MDM6NTkKKyNBdXRob3I6IHdrb2NoCisjQnJhbmNoOiBTVEFCTEUtQlJBTkNILTEtMAorI0FuY2VzdG9yIGJyYW5jaDogSEVBRAorI1RhZzogKG5vbmUpCisjTG9nOgorIyAgICBTZWUgQ2hhbmdlTG9nOiBTYXQgU2VwIDE4IDEzOjAzOjI4IENFU1QgMTk5OSAgV2VybmVyIEtvY2gKKyNNZW1iZXJzOgorIwlSRUFETUU6MS41Ny0+MS41Ny4yLjEKKyMJVkVSU0lPTjoxLjk2LT4xLjk2LjIuMQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitteSAkc3RhdGUgPSAwOworCitzdWIgdXBkYXRlX2luZGV4IChcQFxAKSB7CisJbXkgJG9sZCA9IHNoaWZ0OworCW15ICRuZXcgPSBzaGlmdDsKKwlvcGVuKG15ICRmaCwgJ3wtJywgcXcoZ2l0IHVwZGF0ZS1pbmRleCAteiAtLWluZGV4LWluZm8pKQorCQlvciBkaWUgInVuYWJsZSB0byBvcGVuIGdpdCB1cGRhdGUtaW5kZXg6ICQhIjsKKwlwcmludCAkZmgKKwkJKG1hcCB7ICIwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcdCRfXDAiIH0KKwkJCUAkb2xkKSwKKwkJKG1hcCB7ICcxMDAnIC4gc3ByaW50ZignJW8nLCAkXy0+WzBdKSAuICIgJF8tPlsxXVx0JF8tPlsyXVwwIiB9CisJCQlAJG5ldykKKwkJb3IgZGllICJ1bmFibGUgdG8gd3JpdGUgdG8gZ2l0IHVwZGF0ZS1pbmRleDogJCEiOworCWNsb3NlICRmaAorCQlvciBkaWUgInVuYWJsZSB0byB3cml0ZSB0byBnaXQgdXBkYXRlLWluZGV4OiAkISI7CisJJD8gYW5kIGRpZSAiZ2l0IHVwZGF0ZS1pbmRleCByZXBvcnRlZCBlcnJvcjogJD8iOworfQorCitzdWIgd3JpdGVfdHJlZSAoKSB7CisJb3BlbihteSAkZmgsICctfCcsIHF3KGdpdCB3cml0ZS10cmVlKSkKKwkJb3IgZGllICJ1bmFibGUgdG8gb3BlbiBnaXQgd3JpdGUtdHJlZTogJCEiOworCWNob21wKG15ICR0cmVlID0gPCRmaD4pOworCWlzX3NoYTEoJHRyZWUpCisJCW9yIGRpZSAiQ2Fubm90IGdldCB0cmVlIGlkICgkdHJlZSk6ICQhIjsKKwljbG9zZSgkZmgpCisJCW9yIGRpZSAiRXJyb3IgcnVubmluZyBnaXQgd3JpdGUtdHJlZTogJD9cbiI7CisJcHJpbnQgIlRyZWUgSUQgJHRyZWVcbiIgaWYgJG9wdF92OworCXJldHVybiAkdHJlZTsKK30KKworbXkgKCRwYXRjaHNldCwkZGF0ZSwkYXV0aG9yX25hbWUsJGF1dGhvcl9lbWFpbCwkYnJhbmNoLCRhbmNlc3RvciwkdGFnLCRsb2dtc2cpOworbXkgKEBvbGQsQG5ldyxAc2tpcHBlZCwlaWdub3JlYnJhbmNoLEBjb21taXRfcmV2aXNpb25zKTsKKworIyBjb21taXRzIHRoYXQgY3ZzcHMgY2Fubm90IHBsYWNlIGFueXdoZXJlLi4uCiskaWdub3JlYnJhbmNoeycjQ1ZTUFNfTk9fQlJBTkNIJ30gPSAxOworCitzdWIgY29tbWl0IHsKKwlpZiAoJGJyYW5jaCBlcSAkb3B0X28gJiYgISRpbmRleHticmFuY2h9ICYmCisJCSFnZXRfaGVhZHJlZigiJHJlbW90ZS8kYnJhbmNoIikpIHsKKwkgICAgIyBsb29rcyBsaWtlIGFuIGluaXRpYWwgY29tbWl0CisJICAgICMgdXNlIHRoZSBpbmRleCBwcmltZWQgYnkgZ2l0IGluaXQKKwkgICAgJEVOVntHSVRfSU5ERVhfRklMRX0gPSAiJGdpdF9kaXIvaW5kZXgiOworCSAgICAkaW5kZXh7JGJyYW5jaH0gPSAiJGdpdF9kaXIvaW5kZXgiOworCX0gZWxzZSB7CisJICAgICMgdXNlIGFuIGluZGV4IHBlciBicmFuY2ggdG8gc3BlZWQgdXAKKwkgICAgIyBpbXBvcnRzIG9mIHByb2plY3RzIHdpdGggbWFueSBicmFuY2hlcworCSAgICB1bmxlc3MgKCRpbmRleHskYnJhbmNofSkgeworCQkkaW5kZXh7JGJyYW5jaH0gPSB0bXBuYW0oKTsKKwkJJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkaW5kZXh7JGJyYW5jaH07CisJCWlmICgkYW5jZXN0b3IpIHsKKwkJICAgIHN5c3RlbSgiZ2l0IiwgInJlYWQtdHJlZSIsICIkcmVtb3RlLyRhbmNlc3RvciIpOworCQl9IGVsc2UgeworCQkgICAgc3lzdGVtKCJnaXQiLCAicmVhZC10cmVlIiwgIiRyZW1vdGUvJGJyYW5jaCIpOworCQl9CisJCWRpZSAicmVhZC10cmVlIGZhaWxlZDogJD9cbiIgaWYgJD87CisJICAgIH0KKwl9CisgICAgICAgICRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJGluZGV4eyRicmFuY2h9OworCisJdXBkYXRlX2luZGV4KEBvbGQsIEBuZXcpOworCUBvbGQgPSBAbmV3ID0gKCk7CisJbXkgJHRyZWUgPSB3cml0ZV90cmVlKCk7CisJbXkgJHBhcmVudCA9IGdldF9oZWFkcmVmKCIkcmVtb3RlLyRsYXN0X2JyYW5jaCIpOworCXByaW50ICJQYXJlbnQgSUQgIiAuICgkcGFyZW50ID8gJHBhcmVudCA6ICIoZW1wdHkpIikgLiAiXG4iIGlmICRvcHRfdjsKKworCW15IEBjb21taXRfYXJnczsKKwlwdXNoIEBjb21taXRfYXJncywgKCItcCIsICRwYXJlbnQpIGlmICRwYXJlbnQ7CisKKwkjIGxvb3NlIGRldGVjdGlvbiBvZiBtZXJnZXMKKwkjIGJhc2VkIG9uIHRoZSBjb21taXQgbXNnCisJZm9yZWFjaCBteSAkcnggKEBtZXJnZXJ4KSB7CisJCW5leHQgdW5sZXNzICRsb2dtc2cgPX4gJHJ4ICYmICQxOworCQlteSAkbXBhcmVudCA9ICQxIGVxICdIRUFEJyA/ICRvcHRfbyA6ICQxOworCQlpZiAobXkgJHNoYTEgPSBnZXRfaGVhZHJlZigiJHJlbW90ZS8kbXBhcmVudCIpKSB7CisJCQlwdXNoIEBjb21taXRfYXJncywgJy1wJywgIiRyZW1vdGUvJG1wYXJlbnQiOworCQkJcHJpbnQgIk1lcmdlIHBhcmVudCBicmFuY2g6ICRtcGFyZW50XG4iIGlmICRvcHRfdjsKKwkJfQorCX0KKworCW15ICRjb21taXRfZGF0ZSA9IHN0cmZ0aW1lKCIrMDAwMCAlWS0lbS0lZCAlSDolTTolUyIsZ210aW1lKCRkYXRlKSk7CisJJEVOVntHSVRfQVVUSE9SX05BTUV9ID0gJGF1dGhvcl9uYW1lOworCSRFTlZ7R0lUX0FVVEhPUl9FTUFJTH0gPSAkYXV0aG9yX2VtYWlsOworCSRFTlZ7R0lUX0FVVEhPUl9EQVRFfSA9ICRjb21taXRfZGF0ZTsKKwkkRU5We0dJVF9DT01NSVRURVJfTkFNRX0gPSAkYXV0aG9yX25hbWU7CisJJEVOVntHSVRfQ09NTUlUVEVSX0VNQUlMfSA9ICRhdXRob3JfZW1haWw7CisJJEVOVntHSVRfQ09NTUlUVEVSX0RBVEV9ID0gJGNvbW1pdF9kYXRlOworCW15ICRwaWQgPSBvcGVuMihteSAkY29tbWl0X3JlYWQsIG15ICRjb21taXRfd3JpdGUsCisJCSdnaXQnLCAnY29tbWl0LXRyZWUnLCAkdHJlZSwgQGNvbW1pdF9hcmdzKTsKKworCSMgY29tcGF0aWJpbGl0eSB3aXRoIGdpdDJjdnMKKwlzdWJzdHIoJGxvZ21zZywzMjc2NykgPSAiIiBpZiBsZW5ndGgoJGxvZ21zZykgPiAzMjc2NzsKKwkkbG9nbXNnID1+IHMvW1xzXG5dK1x6Ly87CisKKwlpZiAoQHNraXBwZWQpIHsKKwkgICAgJGxvZ21zZyAuPSAiXG5cblxuU0tJUFBFRDpcblx0IjsKKwkgICAgJGxvZ21zZyAuPSBqb2luKCJcblx0IiwgQHNraXBwZWQpIC4gIlxuIjsKKwkgICAgQHNraXBwZWQgPSAoKTsKKwl9CisKKwlwcmludCgkY29tbWl0X3dyaXRlICIkbG9nbXNnXG4iKSAmJiBjbG9zZSgkY29tbWl0X3dyaXRlKQorCQlvciBkaWUgIkVycm9yIHdyaXRpbmcgdG8gZ2l0IGNvbW1pdC10cmVlOiAkIVxuIjsKKworCXByaW50ICJDb21taXR0ZWQgcGF0Y2ggJHBhdGNoc2V0ICgkYnJhbmNoICRjb21taXRfZGF0ZSlcbiIgaWYgJG9wdF92OworCWNob21wKG15ICRjaWQgPSA8JGNvbW1pdF9yZWFkPik7CisJaXNfc2hhMSgkY2lkKSBvciBkaWUgIkNhbm5vdCBnZXQgY29tbWl0IGlkICgkY2lkKTogJCFcbiI7CisJcHJpbnQgIkNvbW1pdCBJRCAkY2lkXG4iIGlmICRvcHRfdjsKKwljbG9zZSgkY29tbWl0X3JlYWQpOworCisJd2FpdHBpZCgkcGlkLDApOworCWRpZSAiRXJyb3IgcnVubmluZyBnaXQgY29tbWl0LXRyZWU6ICQ/XG4iIGlmICQ/OworCisJc3lzdGVtKCdnaXQnICwgJ3VwZGF0ZS1yZWYnLCAiJHJlbW90ZS8kYnJhbmNoIiwgJGNpZCkgPT0gMAorCQlvciBkaWUgIkNhbm5vdCB3cml0ZSBicmFuY2ggJGJyYW5jaCBmb3IgdXBkYXRlOiAkIVxuIjsKKworCWlmICgkcmV2aXNpb25fbWFwKSB7CisJCXByaW50ICRyZXZpc2lvbl9tYXAgIkAkXyAkY2lkXG4iIGZvciBAY29tbWl0X3JldmlzaW9uczsKKwl9CisJQGNvbW1pdF9yZXZpc2lvbnMgPSAoKTsKKworCWlmICgkdGFnKSB7CisJICAgICAgICBteSAoJHh0YWcpID0gJHRhZzsKKwkJJHh0YWcgPX4gcy9ccytcKlwqLiokLy87ICMgUmVtb3ZlIHN0dWZmIGxpa2UgKiogSU5WQUxJRCAqKiBhbmQgKiogRlVOS1kgKioKKwkJJHh0YWcgPX4gdHIvXy9cLi8gaWYgKCAkb3B0X3UgKTsKKwkJJHh0YWcgPX4gcy9bXC9dLyRvcHRfcy9nOworCisJCSMgU2VlIHJlZnMuYyBmb3IgdGhlc2UgcnVsZXMuCisJCSMgVGFnIGNhbm5vdCBjb250YWluIGJhZCBjaGFycy4gKFNlZSBiYWRfcmVmX2NoYXIgaW4gcmVmcy5jLikKKwkJJHh0YWcgPX4gcy9bIH5cXjpcXFwqXD9cW10vL2c7CisJCSMgT3RoZXIgYmFkIHN0cmluZ3MgZm9yIHRhZ3M6CisJCSMgKFNlZSBjaGVja19yZWZuYW1lX2NvbXBvbmVudCBpbiByZWZzLmMuKQorCQkxIHdoaWxlICR4dGFnID1+IHMvCisJCQkoPzogXC5cLiAgICAgICAgIyBUYWcgY2Fubm90IGNvbnRhaW4gJy4uJy4KKwkJCXwgICBcQHsgICAgICAgICAjIFRhZyBjYW5ub3QgY29udGFpbiAnQHsnLgorCQkJfCBeIC0gICAgICAgICAgICMgVGFnIGNhbm5vdCBiZWdpbiB3aXRoICctJy4KKwkJCXwgICBcLmxvY2sgJCAgICAjIFRhZyBjYW5ub3QgZW5kIHdpdGggJy5sb2NrJy4KKwkJCXwgXiBcLiAgICAgICAgICAjIFRhZyBjYW5ub3QgYmVnaW4uLi4KKwkJCXwgICBcLiAkICAgICAgICAjIC4uLm9yIGVuZCB3aXRoICcuJworCQkJKS8veGc7CisJCSMgVGFnIGNhbm5vdCBiZSBlbXB0eS4KKwkJaWYgKCR4dGFnIGVxICcnKSB7CisJCQl3YXJuKCJ3YXJuaW5nOiBpZ25vcmluZyB0YWcgJyR0YWcnIiwKKwkJCSIgd2l0aCBpbnZhbGlkIHRhZ25hbWVcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHN5c3RlbSgnZ2l0JyAsICd0YWcnLCAnLWYnLCAkeHRhZywgJGNpZCkgIT0gMCkgeworCQkJIyBXZSBkaWQgb3VyIGJlc3QgdG8gc2FuaXRpemUgdGhlIHRhZywgYnV0IHN0aWxsIGZhaWxlZAorCQkJIyBmb3Igd2hhdGV2ZXIgcmVhc29uLiBCYWlsIG91dCwgYW5kIGdpdmUgdGhlIHVzZXIKKwkJCSMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgaWYvaG93IHdlIHNob3VsZAorCQkJIyBpbXByb3ZlIHRoZSB0cmFuc2xhdGlvbiBpbiB0aGUgZnV0dXJlLgorCQkJaWYgKCR0YWcgbmUgJHh0YWcpIHsKKwkJCQlwcmludCAiVHJhbnNsYXRlZCAnJHRhZycgdGFnIHRvICckeHRhZydcbiI7CisJCQl9CisJCQlkaWUgIkNhbm5vdCBjcmVhdGUgdGFnICR4dGFnOiAkIVxuIjsKKwkJfQorCisJCXByaW50ICJDcmVhdGVkIHRhZyAnJHh0YWcnIG9uICckYnJhbmNoJ1xuIiBpZiAkb3B0X3Y7CisJfQorfTsKKworbXkgJGNvbW1pdGNvdW50ID0gMTsKK3doaWxlICg8Q1ZTPikgeworCWNob21wOworCWlmICgkc3RhdGUgPT0gMCBhbmQgL14tKyQvKSB7CisJCSRzdGF0ZSA9IDE7CisJfSBlbHNpZiAoJHN0YXRlID09IDApIHsKKwkJJHN0YXRlID0gMTsKKwkJcmVkbzsKKwl9IGVsc2lmICgoJHN0YXRlPT0wIG9yICRzdGF0ZT09MSkgYW5kIHMvXlBhdGNoU2V0XHMrLy8pIHsKKwkJJHBhdGNoc2V0ID0gMCskXzsKKwkJJHN0YXRlPTI7CisJfSBlbHNpZiAoJHN0YXRlID09IDIgYW5kIHMvXkRhdGU6XHMrLy8pIHsKKwkJJGRhdGUgPSBwZGF0ZSgkXyk7CisJCXVubGVzcyAoJGRhdGUpIHsKKwkJCXByaW50IFNUREVSUiAiQ291bGQgbm90IHBhcnNlIGRhdGU6ICRfXG4iOworCQkJJHN0YXRlPTA7CisJCQluZXh0OworCQl9CisJCSRzdGF0ZT0zOworCX0gZWxzaWYgKCRzdGF0ZSA9PSAzIGFuZCBzL15BdXRob3I6XHMrLy8pIHsKKwkJcy9ccyskLy87CisJCWlmICgvXiguKj8pXHMrPCguKik+LykgeworCQkgICAgKCRhdXRob3JfbmFtZSwgJGF1dGhvcl9lbWFpbCkgPSAoJDEsICQyKTsKKwkJfSBlbHNpZiAoJGNvbnZfYXV0aG9yX25hbWV7JF99KSB7CisJCQkkYXV0aG9yX25hbWUgPSAkY29udl9hdXRob3JfbmFtZXskX307CisJCQkkYXV0aG9yX2VtYWlsID0gJGNvbnZfYXV0aG9yX2VtYWlseyRffTsKKwkJfSBlbHNlIHsKKwkJICAgICRhdXRob3JfbmFtZSA9ICRhdXRob3JfZW1haWwgPSAkXzsKKwkJfQorCQkkc3RhdGUgPSA0OworCX0gZWxzaWYgKCRzdGF0ZSA9PSA0IGFuZCBzL15CcmFuY2g6XHMrLy8pIHsKKwkJcy9ccyskLy87CisJCXRyL18vXC4vIGlmICggJG9wdF91ICk7CisJCXMvW1wvXS8kb3B0X3MvZzsKKwkJJGJyYW5jaCA9ICRfOworCQkkc3RhdGUgPSA1OworCX0gZWxzaWYgKCRzdGF0ZSA9PSA1IGFuZCBzL15BbmNlc3RvciBicmFuY2g6XHMrLy8pIHsKKwkJcy9ccyskLy87CisJCSRhbmNlc3RvciA9ICRfOworCQkkYW5jZXN0b3IgPSAkb3B0X28gaWYgJGFuY2VzdG9yIGVxICJIRUFEIjsKKwkJJHN0YXRlID0gNjsKKwl9IGVsc2lmICgkc3RhdGUgPT0gNSkgeworCQkkYW5jZXN0b3IgPSB1bmRlZjsKKwkJJHN0YXRlID0gNjsKKwkJcmVkbzsKKwl9IGVsc2lmICgkc3RhdGUgPT0gNiBhbmQgcy9eVGFnOlxzKy8vKSB7CisJCXMvXHMrJC8vOworCQlpZiAoJF8gZXEgIihub25lKSIpIHsKKwkJCSR0YWcgPSB1bmRlZjsKKwkJfSBlbHNlIHsKKwkJCSR0YWcgPSAkXzsKKwkJfQorCQkkc3RhdGUgPSA3OworCX0gZWxzaWYgKCRzdGF0ZSA9PSA3IGFuZCAvXkxvZzovKSB7CisJCSRsb2dtc2cgPSAiIjsKKwkJJHN0YXRlID0gODsKKwl9IGVsc2lmICgkc3RhdGUgPT0gOCBhbmQgL15NZW1iZXJzOi8pIHsKKwkJJGJyYW5jaCA9ICRvcHRfbyBpZiAkYnJhbmNoIGVxICJIRUFEIjsKKwkJaWYgKGRlZmluZWQgJGJyYW5jaF9kYXRleyRicmFuY2h9IGFuZCAkYnJhbmNoX2RhdGV7JGJyYW5jaH0gPj0gJGRhdGUpIHsKKwkJCSMgc2tpcAorCQkJcHJpbnQgInNraXAgcGF0Y2hzZXQgJHBhdGNoc2V0OiAkZGF0ZSBiZWZvcmUgJGJyYW5jaF9kYXRleyRicmFuY2h9XG4iIGlmICRvcHRfdjsKKwkJCSRzdGF0ZSA9IDExOworCQkJbmV4dDsKKwkJfQorCQlpZiAoISRvcHRfYSAmJiAkc3RhcnR0aW1lIC0gMzAwIC0gKGRlZmluZWQgJG9wdF96ID8gJG9wdF96IDogMzAwKSA8PSAkZGF0ZSkgeworCQkJIyBza2lwIGlmIHRoZSBjb21taXQgaXMgdG9vIHJlY2VudAorCQkJIyBnaXZlbiB0aGF0IHRoZSBjdnNwcyBkZWZhdWx0IGZ1enogaXMgMzAwcywgd2UgZ2l2ZSBvdXJzZWx2ZXMgYW5vdGhlcgorCQkJIyAzMDBzIGp1c3QgaW4gY2FzZSAtLSB0aGlzIGFsc28gcHJldmVudHMgc2tpcHBpbmcgY29tbWl0cworCQkJIyBkdWUgdG8gc2VydmVyIGNsb2NrIGRyaWZ0CisJCQlwcmludCAic2tpcCBwYXRjaHNldCAkcGF0Y2hzZXQ6ICRkYXRlIHRvbyByZWNlbnRcbiIgaWYgJG9wdF92OworCQkJJHN0YXRlID0gMTE7CisJCQluZXh0OworCQl9CisJCWlmIChleGlzdHMgJGlnbm9yZWJyYW5jaHskYnJhbmNofSkgeworCQkJcHJpbnQgU1RERVJSICJTa2lwcGluZyAkYnJhbmNoXG4iOworCQkJJHN0YXRlID0gMTE7CisJCQluZXh0OworCQl9CisJCWlmICgkYW5jZXN0b3IpIHsKKwkJCWlmICgkYW5jZXN0b3IgZXEgJGJyYW5jaCkgeworCQkJCXByaW50IFNUREVSUiAiQnJhbmNoICRicmFuY2ggZXJyb25lb3VzbHkgc3RlbXMgZnJvbSBpdHNlbGYgLS0gY2hhbmdlZCBhbmNlc3RvciB0byAkb3B0X29cbiI7CisJCQkJJGFuY2VzdG9yID0gJG9wdF9vOworCQkJfQorCQkJaWYgKGRlZmluZWQgZ2V0X2hlYWRyZWYoIiRyZW1vdGUvJGJyYW5jaCIpKSB7CisJCQkJcHJpbnQgU1RERVJSICJCcmFuY2ggJGJyYW5jaCBhbHJlYWR5IGV4aXN0cyFcbiI7CisJCQkJJHN0YXRlPTExOworCQkJCW5leHQ7CisJCQl9CisJCQlteSAkaWQgPSBnZXRfaGVhZHJlZigiJHJlbW90ZS8kYW5jZXN0b3IiKTsKKwkJCWlmICghJGlkKSB7CisJCQkJcHJpbnQgU1RERVJSICJCcmFuY2ggJGFuY2VzdG9yIGRvZXMgbm90IGV4aXN0IVxuIjsKKwkJCQkkaWdub3JlYnJhbmNoeyRicmFuY2h9ID0gMTsKKwkJCQkkc3RhdGU9MTE7CisJCQkJbmV4dDsKKwkJCX0KKworCQkJc3lzdGVtKHF3KGdpdCB1cGRhdGUtcmVmIC1tIGN2c2ltcG9ydCksCisJCQkJIiRyZW1vdGUvJGJyYW5jaCIsICRpZCk7CisJCQlpZigkPyAhPSAwKSB7CisJCQkJcHJpbnQgU1RERVJSICJDb3VsZCBub3QgY3JlYXRlIGJyYW5jaCAkYnJhbmNoXG4iOworCQkJCSRpZ25vcmVicmFuY2h7JGJyYW5jaH0gPSAxOworCQkJCSRzdGF0ZT0xMTsKKwkJCQluZXh0OworCQkJfQorCQl9CisJCSRsYXN0X2JyYW5jaCA9ICRicmFuY2ggaWYgJGJyYW5jaCBuZSAkbGFzdF9icmFuY2g7CisJCSRzdGF0ZSA9IDk7CisJfSBlbHNpZiAoJHN0YXRlID09IDgpIHsKKwkJJGxvZ21zZyAuPSAiJF9cbiI7CisJfSBlbHNpZiAoJHN0YXRlID09IDkgYW5kIC9eXHMrKC4rPyk6KElOSVRJQUx8XGQrKD86XC5cZCspKyktPihcZCsoPzpcLlxkKykrKVxzKiQvKSB7CisjCVZFUlNJT046MS45Ni0+MS45Ni4yLjEKKwkJbXkgJGluaXQgPSAoJDIgZXEgIklOSVRJQUwiKTsKKwkJbXkgJGZuID0gJDE7CisJCW15ICRyZXYgPSAkMzsKKwkJJGZuID1+IHMjXi8rIyM7CisJCWlmICgkb3B0X1MgJiYgJGZuID1+IG0vJG9wdF9TLykgeworCQkgICAgcHJpbnQgIlNLSVBQSU5HICRmbiB2ICRyZXZcbiI7CisJCSAgICBwdXNoKEBza2lwcGVkLCAkZm4pOworCQkgICAgbmV4dDsKKwkJfQorCQlwdXNoIEBjb21taXRfcmV2aXNpb25zLCBbJGZuLCAkcmV2XTsKKwkJcHJpbnQgIkZldGNoaW5nICRmbiAgIHYgJHJldlxuIiBpZiAkb3B0X3Y7CisJCW15ICgkdG1wbmFtZSwgJHNpemUpID0gJGN2cy0+ZmlsZSgkZm4sJHJldik7CisJCWlmICgkc2l6ZSA9PSAtMSkgeworCQkJcHVzaChAb2xkLCRmbik7CisJCQlwcmludCAiRHJvcCAkZm5cbiIgaWYgJG9wdF92OworCQl9IGVsc2UgeworCQkJcHJpbnQgIiIuKCRpbml0ID8gIk5ldyIgOiAiVXBkYXRlIikuIiAkZm46ICRzaXplIGJ5dGVzXG4iIGlmICRvcHRfdjsKKwkJCW15ICRwaWQgPSBvcGVuKG15ICRGLCAnLXwnKTsKKwkJCWRpZSAkISB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQkJaWYgKCEkcGlkKSB7CisJCQkgICAgZXhlYygiZ2l0IiwgImhhc2gtb2JqZWN0IiwgIi13IiwgJHRtcG5hbWUpCisJCQkJb3IgZGllICJDYW5ub3QgY3JlYXRlIG9iamVjdDogJCFcbiI7CisJCQl9CisJCQlteSAkc2hhID0gPCRGPjsKKwkJCWNob21wICRzaGE7CisJCQljbG9zZSAkRjsKKwkJCW15ICRtb2RlID0gcG1vZGUoJGN2cy0+eydtb2RlJ30pOworCQkJcHVzaChAbmV3LFskbW9kZSwgJHNoYSwgJGZuXSk7ICMgbWF5IGJlIHJlc3VycmVjdGVkIQorCQl9CisJCXVubGluaygkdG1wbmFtZSk7CisJfSBlbHNpZiAoJHN0YXRlID09IDkgYW5kIC9eXHMrKC4rPyk6XGQrKD86XC5cZCspKy0+KFxkKyg/OlwuXGQrKSspXChERUFEXClccyokLykgeworCQlteSAkZm4gPSAkMTsKKwkJbXkgJHJldiA9ICQyOworCQkkZm4gPX4gcyNeLysjIzsKKwkJcHVzaCBAY29tbWl0X3JldmlzaW9ucywgWyRmbiwgJHJldl07CisJCXB1c2goQG9sZCwkZm4pOworCQlwcmludCAiRGVsZXRlICRmblxuIiBpZiAkb3B0X3Y7CisJfSBlbHNpZiAoJHN0YXRlID09IDkgYW5kIC9eXHMqJC8pIHsKKwkJJHN0YXRlID0gMTA7CisJfSBlbHNpZiAoKCRzdGF0ZSA9PSA5IG9yICRzdGF0ZSA9PSAxMCkgYW5kIC9eLSskLykgeworCQkkY29tbWl0Y291bnQrKzsKKwkJaWYgKCRvcHRfTCAmJiAkY29tbWl0Y291bnQgPiAkb3B0X0wpIHsKKwkJCWxhc3Q7CisJCX0KKwkJY29tbWl0KCk7CisJCWlmICgoJGNvbW1pdGNvdW50ICYgMTAyMykgPT0gMCkgeworCQkJc3lzdGVtKHF3KGdpdCByZXBhY2sgLWEgLWQpKTsKKwkJfQorCQkkc3RhdGUgPSAxOworCX0gZWxzaWYgKCRzdGF0ZSA9PSAxMSBhbmQgL14tKyQvKSB7CisJCSRzdGF0ZSA9IDE7CisJfSBlbHNpZiAoL14tKyQvKSB7ICMgZW5kIG9mIHVua25vd24tbGluZSBwcm9jZXNzaW5nCisJCSRzdGF0ZSA9IDE7CisJfSBlbHNpZiAoJHN0YXRlICE9IDExKSB7ICMgaWdub3JlIHN0dWZmIHdoZW4gc2tpcHBpbmcKKwkJcHJpbnQgU1RERVJSICIqIFVOS05PV04gTElORSAqICRfXG4iOworCX0KK30KK2NvbW1pdCgpIGlmICRicmFuY2ggYW5kICRzdGF0ZSAhPSAxMTsKKwordW5sZXNzICgkb3B0X1ApIHsKKwl1bmxpbmsoJGN2c3BzZmlsZSk7Cit9CisKKyMgVGhlIGhldXJpc3RpYyBvZiByZXBhY2tpbmcgZXZlcnkgMTAyNCBjb21taXRzIGNhbiBsZWF2ZSBhCisjIGxvdCBvZiB1bnBhY2tlZCBkYXRhLiAgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIDFNQiB3b3J0aCBvZgorIyBub3QtcGFja2VkIG9iamVjdHMsIHJlcGFjayBvbmNlIG1vcmUuCitteSAkbGluZSA9IGBnaXQgY291bnQtb2JqZWN0c2A7CitpZiAoJGxpbmUgPX4gL14oXGQrKSBvYmplY3RzLCAoXGQrKSBraWxvYnl0ZXMkLykgeworICBteSAoJG5fb2JqZWN0cywgJGtiKSA9ICgkMSwgJDIpOworICAxMDI0IDwgJGtiCisgICAgYW5kIHN5c3RlbShxdyhnaXQgcmVwYWNrIC1hIC1kKSk7Cit9CisKK2ZvcmVhY2ggbXkgJGdpdF9pbmRleCAodmFsdWVzICVpbmRleCkgeworICAgIGlmICgkZ2l0X2luZGV4IG5lICIkZ2l0X2Rpci9pbmRleCIpIHsKKwl1bmxpbmsoJGdpdF9pbmRleCk7CisgICAgfQorfQorCitpZiAoZGVmaW5lZCAkb3JpZ19naXRfaW5kZXgpIHsKKwkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRvcmlnX2dpdF9pbmRleDsKK30gZWxzZSB7CisJZGVsZXRlICRFTlZ7R0lUX0lOREVYX0ZJTEV9OworfQorCisjIE5vdyBzd2l0Y2ggYmFjayB0byB0aGUgYnJhbmNoIHdlIHdlcmUgaW4gYmVmb3JlIGFsbCBvZiB0aGlzIGhhcHBlbmVkCitpZiAoJG9yaWdfYnJhbmNoKSB7CisJcHJpbnQgIkRPTkUuXG4iIGlmICRvcHRfdjsKKwlpZiAoJG9wdF9pKSB7CisJCWV4aXQgMDsKKwl9CisJbXkgJHRpcF9hdF9lbmQgPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYDsKKwlpZiAoJHRpcF9hdF9zdGFydCBuZSAkdGlwX2F0X2VuZCkgeworCQlmb3IgKCR0aXBfYXRfc3RhcnQsICR0aXBfYXRfZW5kKSB7IGNob21wOyB9CisJCXByaW50ICJGZXRjaGVkIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLlxuIiBpZiAkb3B0X3Y7CisJCXN5c3RlbShxdyhnaXQgcmVhZC10cmVlIC11IC1tKSwKKwkJICAgICAgICR0aXBfYXRfc3RhcnQsICR0aXBfYXRfZW5kKTsKKwkJZGllICJGYXN0LWZvcndhcmQgdXBkYXRlIGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorCWVsc2UgeworCQlzeXN0ZW0ocXcoZ2l0IG1lcmdlIGN2c2ltcG9ydCBIRUFEKSwgIiRyZW1vdGUvJG9wdF9vIik7CisJCWRpZSAiQ291bGQgbm90IG1lcmdlICRvcHRfbyBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC5cbiIgaWYgJD87CisJfQorfSBlbHNlIHsKKwkkb3JpZ19icmFuY2ggPSAibWFzdGVyIjsKKwlwcmludCAiRE9ORTsgY3JlYXRpbmcgJG9yaWdfYnJhbmNoIGJyYW5jaFxuIiBpZiAkb3B0X3Y7CisJc3lzdGVtKCJnaXQiLCAidXBkYXRlLXJlZiIsICJyZWZzL2hlYWRzL21hc3RlciIsICIkcmVtb3RlLyRvcHRfbyIpCisJCXVubGVzcyBkZWZpbmVkIGdldF9oZWFkcmVmKCdyZWZzL2hlYWRzL21hc3RlcicpOworCXN5c3RlbSgiZ2l0IiwgInN5bWJvbGljLXJlZiIsICIkcmVtb3RlL0hFQUQiLCAiJHJlbW90ZS8kb3B0X28iKQorCQlpZiAoJG9wdF9yICYmICRvcHRfbyBuZSAnSEVBRCcpOworCXN5c3RlbSgnZ2l0JywgJ3VwZGF0ZS1yZWYnLCAnSEVBRCcsICIkb3JpZ19icmFuY2giKTsKKwl1bmxlc3MgKCRvcHRfaSkgeworCQlzeXN0ZW0ocXcoZ2l0IGNoZWNrb3V0IC1mKSk7CisJCWRpZSAiY2hlY2tvdXQgZmFpbGVkOiAkP1xuIiBpZiAkPzsKKwl9Cit9CmRpZmYgLS1naXQgYS9naXQtY3Zzc2VydmVyLnBlcmwgYi9naXQtY3Zzc2VydmVyLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjhlZGRhYgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1jdnNzZXJ2ZXIucGVybApAQCAtMCwwICsxLDM2OTUgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIyMjCisjIyMjIFRoaXMgYXBwbGljYXRpb24gaXMgYSBDVlMgZW11bGF0aW9uIGxheWVyIGZvciBnaXQuCisjIyMjIEl0IGlzIGludGVuZGVkIGZvciBjbGllbnRzIHRvIGNvbm5lY3Qgb3ZlciBTU0guCisjIyMjIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorIyMjIworIyMjIyBDb3B5cmlnaHQgVGhlIE9wZW4gVW5pdmVyc2l0eSBVSyAtIDIwMDYuCisjIyMjCisjIyMjIEF1dGhvcnM6IE1hcnR5biBTbWl0aCAgICA8bWFydHluQGNhdGFseXN0Lm5ldC5uej4KKyMjIyMgICAgICAgICAgTWFydGluIExhbmdob2ZmIDxtYXJ0aW5AbGFwdG9wLm9yZz4KKyMjIyMKKyMjIyMKKyMjIyMgUmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorIyMjIworIyMjIworCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIGJ5dGVzOworCit1c2UgRmNudGw7Cit1c2UgRmlsZTo6VGVtcCBxdy90ZW1wZGlyIHRlbXBmaWxlLzsKK3VzZSBGaWxlOjpQYXRoIHF3L3JtdHJlZS87Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgcmVxdWlyZV9vcmRlciBub19pZ25vcmVfY2FzZSk7CisKK215ICRWRVJTSU9OID0gJ0BAR0lUX1ZFUlNJT05AQCc7CisKK215ICRsb2cgPSBHSVRDVlM6OmxvZy0+bmV3KCk7CitteSAkY2ZnOworCitteSAkREFURV9MSVNUID0geworICAgIEphbiA9PiAiMDEiLAorICAgIEZlYiA9PiAiMDIiLAorICAgIE1hciA9PiAiMDMiLAorICAgIEFwciA9PiAiMDQiLAorICAgIE1heSA9PiAiMDUiLAorICAgIEp1biA9PiAiMDYiLAorICAgIEp1bCA9PiAiMDciLAorICAgIEF1ZyA9PiAiMDgiLAorICAgIFNlcCA9PiAiMDkiLAorICAgIE9jdCA9PiAiMTAiLAorICAgIE5vdiA9PiAiMTEiLAorICAgIERlYyA9PiAiMTIiLAorfTsKKworIyBFbmFibGUgYXV0b2ZsdXNoIGZvciBTVERPVVQgKG90aGVyd2lzZSB0aGUgd2hvbGUgdGhpbmcgZmFsbHMgYXBhcnQpCiskfCA9IDE7CisKKyMjIyMgRGVmaW5pdGlvbiBhbmQgbWFwcGluZ3Mgb2YgZnVuY3Rpb25zICMjIyMKKworbXkgJG1ldGhvZHMgPSB7CisgICAgJ1Jvb3QnICAgICAgICAgICAgPT4gXCZyZXFfUm9vdCwKKyAgICAnVmFsaWQtcmVzcG9uc2VzJyA9PiBcJnJlcV9WYWxpZHJlc3BvbnNlcywKKyAgICAndmFsaWQtcmVxdWVzdHMnICA9PiBcJnJlcV92YWxpZHJlcXVlc3RzLAorICAgICdEaXJlY3RvcnknICAgICAgID0+IFwmcmVxX0RpcmVjdG9yeSwKKyAgICAnRW50cnknICAgICAgICAgICA9PiBcJnJlcV9FbnRyeSwKKyAgICAnTW9kaWZpZWQnICAgICAgICA9PiBcJnJlcV9Nb2RpZmllZCwKKyAgICAnVW5jaGFuZ2VkJyAgICAgICA9PiBcJnJlcV9VbmNoYW5nZWQsCisgICAgJ1F1ZXN0aW9uYWJsZScgICAgPT4gXCZyZXFfUXVlc3Rpb25hYmxlLAorICAgICdBcmd1bWVudCcgICAgICAgID0+IFwmcmVxX0FyZ3VtZW50LAorICAgICdBcmd1bWVudHgnICAgICAgID0+IFwmcmVxX0FyZ3VtZW50LAorICAgICdleHBhbmQtbW9kdWxlcycgID0+IFwmcmVxX2V4cGFuZG1vZHVsZXMsCisgICAgJ2FkZCcgICAgICAgICAgICAgPT4gXCZyZXFfYWRkLAorICAgICdyZW1vdmUnICAgICAgICAgID0+IFwmcmVxX3JlbW92ZSwKKyAgICAnY28nICAgICAgICAgICAgICA9PiBcJnJlcV9jbywKKyAgICAndXBkYXRlJyAgICAgICAgICA9PiBcJnJlcV91cGRhdGUsCisgICAgJ2NpJyAgICAgICAgICAgICAgPT4gXCZyZXFfY2ksCisgICAgJ2RpZmYnICAgICAgICAgICAgPT4gXCZyZXFfZGlmZiwKKyAgICAnbG9nJyAgICAgICAgICAgICA9PiBcJnJlcV9sb2csCisgICAgJ3Jsb2cnICAgICAgICAgICAgPT4gXCZyZXFfbG9nLAorICAgICd0YWcnICAgICAgICAgICAgID0+IFwmcmVxX0NBVENIQUxMLAorICAgICdzdGF0dXMnICAgICAgICAgID0+IFwmcmVxX3N0YXR1cywKKyAgICAnYWRtaW4nICAgICAgICAgICA9PiBcJnJlcV9DQVRDSEFMTCwKKyAgICAnaGlzdG9yeScgICAgICAgICA9PiBcJnJlcV9DQVRDSEFMTCwKKyAgICAnd2F0Y2hlcnMnICAgICAgICA9PiBcJnJlcV9FTVBUWSwKKyAgICAnZWRpdG9ycycgICAgICAgICA9PiBcJnJlcV9FTVBUWSwKKyAgICAnbm9vcCcgICAgICAgICAgICA9PiBcJnJlcV9FTVBUWSwKKyAgICAnYW5ub3RhdGUnICAgICAgICA9PiBcJnJlcV9hbm5vdGF0ZSwKKyAgICAnR2xvYmFsX29wdGlvbicgICA9PiBcJnJlcV9HbG9iYWxvcHRpb24sCisgICAgIydhbm5vdGF0ZScgICAgICAgID0+IFwmcmVxX0NBVENIQUxMLAorfTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMgJHN0YXRlIGhvbGRzIGFsbCB0aGUgYml0cyBvZiBpbmZvcm1hdGlvbiB0aGUgY2xpZW50cyBzZW5kcyB1cyB0aGF0IGNvdWxkCisjIHBvdGVudGlhbGx5IGJlIHVzZWZ1bCB3aGVuIGl0IGNvbWVzIHRvIGFjdHVhbGx5IF9kb2luZ18gc29tZXRoaW5nLgorbXkgJHN0YXRlID0geyBwcmVwZW5kZGlyID0+ICcnIH07CisKKyMgV29yayBpcyBmb3IgbWFuYWdpbmcgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5CitteSAkd29yayA9CisgICAgeworICAgICAgICBzdGF0ZSA9PiB1bmRlZiwgICMgdW5kZWYsIDEgKGVtcHR5KSwgMiAod2l0aCBzdHVmZikKKyAgICAgICAgd29ya0RpciA9PiB1bmRlZiwKKyAgICAgICAgaW5kZXggPT4gdW5kZWYsCisgICAgICAgIGVtcHR5RGlyID0+IHVuZGVmLAorICAgICAgICB0bXBEaXIgPT4gdW5kZWYKKyAgICB9OworCiskbG9nLT5pbmZvKCItLS0tLS0tLS0tLS0tLS0gU1RBUlRJTkcgLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworbXkgJHVzYWdlID0KKyAgICAiVXNhZ2U6IGdpdCBjdnNzZXJ2ZXIgW29wdGlvbnNdIFtwc2VydmVyfHNlcnZlcl0gWzxkaXJlY3Rvcnk+IC4uLl1cbiIuCisgICAgIiAgICAtLWJhc2UtcGF0aCA8cGF0aD4gIDogUHJlcGVuZCB0byByZXF1ZXN0ZWQgQ1ZTUk9PVFxuIi4KKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgcmVhZCBmcm9tIEdJVF9DVlNTRVJWRVJfQkFTRV9QQVRIXG4iLgorICAgICIgICAgLS1zdHJpY3QtcGF0aHMgICAgICA6IERvbid0IGFsbG93IHJlY3Vyc2luZyBpbnRvIHN1YmRpcmVjdG9yaWVzXG4iLgorICAgICIgICAgLS1leHBvcnQtYWxsICAgICAgICA6IERvbid0IGNoZWNrIGZvciBnaXRjdnMuZW5hYmxlZCBpbiBjb25maWdcbiIuCisgICAgIiAgICAtLXZlcnNpb24sIC1WICAgICAgIDogUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIi4KKyAgICAiICAgIC1oLCAtSCAgICAgICAgICAgICAgOiBQcmludCB1c2FnZSBpbmZvcm1hdGlvbiBhbmQgZXhpdFxuIi4KKyAgICAiXG4iLgorICAgICI8ZGlyZWN0b3J5PiAuLi4gaXMgYSBsaXN0IG9mIGFsbG93ZWQgZGlyZWN0b3JpZXMuIElmIG5vIGRpcmVjdG9yaWVzXG4iLgorICAgICJhcmUgZ2l2ZW4sIGFsbCBhcmUgYWxsb3dlZC4gVGhpcyBpcyBhbiBhZGRpdGlvbmFsIHJlc3RyaWN0aW9uLCBnaXRjdnNcbiIuCisgICAgImFjY2VzcyBzdGlsbCBuZWVkcyB0byBiZSBlbmFibGVkIGJ5IHRoZSBnaXRjdnMuZW5hYmxlZCBjb25maWcgb3B0aW9uLlxuIi4KKyAgICAiQWx0ZXJuYXRlbHksIG9uZSBkaXJlY3RvcnkgbWF5IGJlIHNwZWNpZmllZCBpbiBHSVRfQ1ZTU0VSVkVSX1JPT1QuXG4iOworCitteSBAb3B0cyA9ICggJ2h8SCcsICd2ZXJzaW9ufFYnLAorCSAgICAgJ2Jhc2UtcGF0aD1zJywgJ3N0cmljdC1wYXRocycsICdleHBvcnQtYWxsJyApOworR2V0T3B0aW9ucyggJHN0YXRlLCBAb3B0cyApCisgICAgb3IgZGllICR1c2FnZTsKKworaWYgKCRzdGF0ZS0+e3ZlcnNpb259KSB7CisgICAgcHJpbnQgImdpdC1jdnNzZXJ2ZXIgdmVyc2lvbiAkVkVSU0lPTlxuIjsKKyAgICBleGl0OworfQoraWYgKCRzdGF0ZS0+e2hlbHB9KSB7CisgICAgcHJpbnQgJHVzYWdlOworICAgIGV4aXQ7Cit9CisKK215ICRURU1QX0RJUiA9IHRlbXBkaXIoIENMRUFOVVAgPT4gMSApOworJGxvZy0+ZGVidWcoIlRlbXBvcmFyeSBkaXJlY3RvcnkgaXMgJyRURU1QX0RJUiciKTsKKworJHN0YXRlLT57bWV0aG9kfSA9ICdleHQnOworaWYgKEBBUkdWKSB7CisgICAgaWYgKCRBUkdWWzBdIGVxICdwc2VydmVyJykgeworCSRzdGF0ZS0+e21ldGhvZH0gPSAncHNlcnZlcic7CisJc2hpZnQgQEFSR1Y7CisgICAgfSBlbHNpZiAoJEFSR1ZbMF0gZXEgJ3NlcnZlcicpIHsKKwlzaGlmdCBAQVJHVjsKKyAgICB9Cit9CisKKyMgZXZlcnl0aGluZyBlbHNlIGlzIGEgZGlyZWN0b3J5Ciskc3RhdGUtPnthbGxvd2VkX3Jvb3RzfSA9IFsgQEFSR1YgXTsKKworIyBkb24ndCBleHBvcnQgdGhlIHdob2xlIHN5c3RlbSB1bmxlc3MgdGhlIHVzZXJzIHJlcXVlc3RzIGl0CitpZiAoJHN0YXRlLT57J2V4cG9ydC1hbGwnfSAmJiAhQHskc3RhdGUtPnthbGxvd2VkX3Jvb3RzfX0pIHsKKyAgICBkaWUgIi0tZXhwb3J0LWFsbCBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggYW4gZXhwbGljaXQgd2hpdGVsaXN0XG4iOworfQorCisjIEVudmlyb25tZW50IGhhbmRsaW5nIGZvciBydW5uaW5nIHVuZGVyIGdpdC1zaGVsbAoraWYgKGV4aXN0cyAkRU5We0dJVF9DVlNTRVJWRVJfQkFTRV9QQVRIfSkgeworICAgIGlmICgkc3RhdGUtPnsnYmFzZS1wYXRoJ30pIHsKKwlkaWUgIkNhbm5vdCBzcGVjaWZ5IGJhc2UgcGF0aCBib3RoIHdheXMuXG4iOworICAgIH0KKyAgICBteSAkYmFzZV9wYXRoID0gJEVOVntHSVRfQ1ZTU0VSVkVSX0JBU0VfUEFUSH07CisgICAgJHN0YXRlLT57J2Jhc2UtcGF0aCd9ID0gJGJhc2VfcGF0aDsKKyAgICAkbG9nLT5kZWJ1ZygiUGlja2VkIHVwIGJhc2UgcGF0aCAnJGJhc2VfcGF0aCcgZnJvbSBlbnZpcm9ubWVudC5cbiIpOworfQoraWYgKGV4aXN0cyAkRU5We0dJVF9DVlNTRVJWRVJfUk9PVH0pIHsKKyAgICBpZiAoQHskc3RhdGUtPnthbGxvd2VkX3Jvb3RzfX0pIHsKKwlkaWUgIkNhbm5vdCBzcGVjaWZ5IHJvb3RzIGJvdGggd2F5czogQEFSR1ZcbiI7CisgICAgfQorICAgIG15ICRhbGxvd2VkX3Jvb3QgPSAkRU5We0dJVF9DVlNTRVJWRVJfUk9PVH07CisgICAgJHN0YXRlLT57YWxsb3dlZF9yb290c30gPSBbICRhbGxvd2VkX3Jvb3QgXTsKKyAgICAkbG9nLT5kZWJ1ZygiUGlja2VkIHVwIGFsbG93ZWQgcm9vdCAnJGFsbG93ZWRfcm9vdCcgZnJvbSBlbnZpcm9ubWVudC5cbiIpOworfQorCisjIGlmIHdlIGFyZSBjYWxsZWQgd2l0aCBhIHBzZXJ2ZXIgYXJndW1lbnQsCisjIGRlYWwgd2l0aCB0aGUgYXV0aGVudGljYXRpb24gY2F0IGJlZm9yZSBlbnRlcmluZyB0aGUKKyMgbWFpbiBsb29wCitpZiAoJHN0YXRlLT57bWV0aG9kfSBlcSAncHNlcnZlcicpIHsKKyAgICBteSAkbGluZSA9IDxTVERJTj47IGNob21wICRsaW5lOworICAgIHVubGVzcyggJGxpbmUgPX4gL15CRUdJTiAoQVVUSHxWRVJJRklDQVRJT04pIFJFUVVFU1QkLykgeworICAgICAgIGRpZSAiRSBEbyBub3QgdW5kZXJzdGFuZCAkbGluZSAtIGV4cGVjdGluZyBCRUdJTiBBVVRIIFJFUVVFU1RcbiI7CisgICAgfQorICAgIG15ICRyZXF1ZXN0ID0gJDE7CisgICAgJGxpbmUgPSA8U1RESU4+OyBjaG9tcCAkbGluZTsKKyAgICB1bmxlc3MgKHJlcV9Sb290KCdyb290JywgJGxpbmUpKSB7ICMgcmV1c2UgUm9vdAorICAgICAgIHByaW50ICJFIEludmFsaWQgcm9vdCAkbGluZSBcbiI7CisgICAgICAgZXhpdCAxOworICAgIH0KKyAgICAkbGluZSA9IDxTVERJTj47IGNob21wICRsaW5lOworICAgIG15ICR1c2VyID0gJGxpbmU7CisgICAgJGxpbmUgPSA8U1RESU4+OyBjaG9tcCAkbGluZTsKKyAgICBteSAkcGFzc3dvcmQgPSAkbGluZTsKKworICAgIGlmICgkdXNlciBlcSAnYW5vbnltb3VzJykgeworICAgICAgICAjICJBIiB3aWxsIGJlIDEgYnl0ZSwgdXNlIGxlbmd0aCBpbnN0ZWFkIGluIGNhc2UgdGhlCisgICAgICAgICMgZW5jcnlwdGlvbiBtZXRob2QgZXZlciBjaGFuZ2VzICh5ZWFoLCByaWdodCEpCisgICAgICAgIGlmIChsZW5ndGgoJHBhc3N3b3JkKSA+IDEgKSB7CisgICAgICAgICAgICBwcmludCAiRSBEb24ndCBzdXBwbHkgYSBwYXNzd29yZCBmb3IgdGhlIGBhbm9ueW1vdXMnIHVzZXJcbiI7CisgICAgICAgICAgICBwcmludCAiSSBIQVRFIFlPVVxuIjsKKyAgICAgICAgICAgIGV4aXQgMTsKKyAgICAgICAgfQorCisgICAgICAgICMgRmFsbCB0aHJvdWdoIHRvIExPVkUKKyAgICB9IGVsc2UgeworICAgICAgICAjIFRyeWluZyB0byBhdXRoZW50aWNhdGUgYSB1c2VyCisgICAgICAgIGlmIChub3QgZXhpc3RzICRjZmctPntnaXRjdnN9LT57YXV0aGRifSkgeworICAgICAgICAgICAgcHJpbnQgIkUgdGhlIHJlcG8gY29uZmlnIGZpbGUgbmVlZHMgYSBbZ2l0Y3ZzXSBzZWN0aW9uIHdpdGggYW4gJ2F1dGhkYicgcGFyYW1ldGVyIHNldCB0byB0aGUgZmlsZW5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGFiYXNlXG4iOworICAgICAgICAgICAgcHJpbnQgIkkgSEFURSBZT1VcbiI7CisgICAgICAgICAgICBleGl0IDE7CisgICAgICAgIH0KKworICAgICAgICBteSAkYXV0aGRiID0gJGNmZy0+e2dpdGN2c30tPnthdXRoZGJ9OworCisgICAgICAgIHVubGVzcyAoLWUgJGF1dGhkYikgeworICAgICAgICAgICAgcHJpbnQgIkUgVGhlIGF1dGhlbnRpY2F0aW9uIGRhdGFiYXNlIHNwZWNpZmllZCBpbiBbZ2l0Y3ZzLmF1dGhkYl0gZG9lcyBub3QgZXhpc3RcbiI7CisgICAgICAgICAgICBwcmludCAiSSBIQVRFIFlPVVxuIjsKKyAgICAgICAgICAgIGV4aXQgMTsKKyAgICAgICAgfQorCisgICAgICAgIG15ICRhdXRoX29rOworICAgICAgICBvcGVuIG15ICRwYXNzd2QsICI8IiwgJGF1dGhkYiBvciBkaWUgJCE7CisgICAgICAgIHdoaWxlICg8JHBhc3N3ZD4pIHsKKyAgICAgICAgICAgIGlmIChte15cUSR1c2VyXEU6KC4qKX0pIHsKKyAgICAgICAgICAgICAgICBpZiAoY3J5cHQoJHVzZXIsIGRlc2NyYW1ibGUoJHBhc3N3b3JkKSkgZXEgJDEpIHsKKyAgICAgICAgICAgICAgICAgICAgJGF1dGhfb2sgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UgJHBhc3N3ZDsKKworICAgICAgICB1bmxlc3MgKCRhdXRoX29rKSB7CisgICAgICAgICAgICBwcmludCAiSSBIQVRFIFlPVVxuIjsKKyAgICAgICAgICAgIGV4aXQgMTsKKyAgICAgICAgfQorCisgICAgICAgICMgRmFsbCB0aHJvdWdoIHRvIExPVkUKKyAgICB9CisKKyAgICAjIEZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB1c2VyIGlzIGFub255bW91cyBvbiBjb21taXQKKyAgICAkc3RhdGUtPnt1c2VyfSA9ICR1c2VyOworCisgICAgJGxpbmUgPSA8U1RESU4+OyBjaG9tcCAkbGluZTsKKyAgICB1bmxlc3MgKCRsaW5lIGVxICJFTkQgJHJlcXVlc3QgUkVRVUVTVCIpIHsKKyAgICAgICBkaWUgIkUgRG8gbm90IHVuZGVyc3RhbmQgJGxpbmUgLS0gZXhwZWN0aW5nIEVORCAkcmVxdWVzdCBSRVFVRVNUXG4iOworICAgIH0KKyAgICBwcmludCAiSSBMT1ZFIFlPVVxuIjsKKyAgICBleGl0IGlmICRyZXF1ZXN0IGVxICdWRVJJRklDQVRJT04nOyAjIGN2cyBsb2dpbgorICAgICMgYW5kIG5vdyBiYWNrIHRvIG91ciByZWd1bGFyIHByb2dyYW1tZS4uLgorfQorCisjIEtlZXAgZ29pbmcgdW50aWwgdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24KK3doaWxlICg8U1RESU4+KQoreworICAgIGNob21wOworCisgICAgIyBDaGVjayB0byBzZWUgaWYgd2UndmUgc2VlbiB0aGlzIG1ldGhvZCwgYW5kIGNhbGwgYXBwcm9wcmlhdGUgZnVuY3Rpb24uCisgICAgaWYgKCAvXihbXHctXSspKD86XHMrKC4qKSk/JC8gYW5kIGRlZmluZWQoJG1ldGhvZHMtPnskMX0pICkKKyAgICB7CisgICAgICAgICMgdXNlIHRoZSAkbWV0aG9kcyBoYXNoIHRvIGNhbGwgdGhlIGFwcHJvcHJpYXRlIHN1YiBmb3IgdGhpcyBjb21tYW5kCisgICAgICAgICMkbG9nLT5pbmZvKCJNZXRob2QgOiAkMSIpOworICAgICAgICAmeyRtZXRob2RzLT57JDF9fSgkMSwkMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBsb2cgZmF0YWwgYmVjYXVzZSB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24uIElmIHRoaXMgaGFwcGVucworICAgICAgICAjIHdlJ3JlIGZhaXJseSBzY3Jld2VkIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGUgY2xpZW50IGlzIGV4cGVjdGluZworICAgICAgICAjIGEgcmVzcG9uc2UuIElmIGl0IGlzLCB0aGUgY2xpZW50IHdpbGwgaGFuZywgd2UnbGwgaGFuZywgYW5kIHRoZSB3aG9sZQorICAgICAgICAjIHRoaW5nIHdpbGwgYmUgY3VzdGFyZC4KKyAgICAgICAgJGxvZy0+ZmF0YWwoIkRvbid0IHVuZGVyc3RhbmQgY29tbWFuZCAkX1xuIik7CisgICAgICAgIGRpZSgiVW5rbm93biBjb21tYW5kICRfIik7CisgICAgfQorfQorCiskbG9nLT5kZWJ1ZygiUHJvY2Vzc2luZyB0aW1lIDogdXNlcj0iIC4gKHRpbWVzKVswXSAuICIgc3lzdGVtPSIgLiAodGltZXMpWzFdKTsKKyRsb2ctPmluZm8oIi0tLS0tLS0tLS0tLS0tLSBGSU5JU0ggLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworY2hkaXIgJy8nOworZXhpdCAwOworCisjIE1hZ2ljIGNhdGNoYWxsIG1ldGhvZC4KKyMgICAgVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgd2lsbCBoYW5kbGUgYWxsIGNvbW1hbmRzIHdlIGhhdmVuJ3QgeWV0CisjICAgIGltcGxlbWVudGVkLiBJdCBzaW1wbHkgc2VuZHMgYSB3YXJuaW5nIHRvIHRoZSBsb2cgZmlsZSBpbmRpY2F0aW5nIGEKKyMgICAgY29tbWFuZCB0aGF0IGhhc24ndCBiZWVuIGltcGxlbWVudGVkIGhhcyBiZWVuIGludm9rZWQuCitzdWIgcmVxX0NBVENIQUxMCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisgICAgJGxvZy0+d2FybigiVW5oYW5kbGVkIGNvbW1hbmQgOiByZXFfJGNtZCA6ICRkYXRhIik7Cit9CisKKyMgVGhpcyBtZXRob2QgaW52YXJpYWJseSBzdWNjZWVkcyB3aXRoIGFuIGVtcHR5IHJlc3BvbnNlLgorc3ViIHJlcV9FTVBUWQoreworICAgIHByaW50ICJva1xuIjsKK30KKworIyBSb290IHBhdGhuYW1lIFxuCisjICAgICBSZXNwb25zZSBleHBlY3RlZDogbm8uIFRlbGwgdGhlIHNlcnZlciB3aGljaCBDVlNST09UIHRvIHVzZS4gTm90ZSB0aGF0CisjICAgICBwYXRobmFtZSBpcyBhIGxvY2FsIGRpcmVjdG9yeSBhbmQgbm90IGEgZnVsbHkgcXVhbGlmaWVkIENWU1JPT1QgdmFyaWFibGUuCisjICAgICBwYXRobmFtZSBtdXN0IGFscmVhZHkgZXhpc3Q7IGlmIGNyZWF0aW5nIGEgbmV3IHJvb3QsIHVzZSB0aGUgaW5pdAorIyAgICAgcmVxdWVzdCwgbm90IFJvb3QuIHBhdGhuYW1lIGRvZXMgbm90IGluY2x1ZGUgdGhlIGhvc3RuYW1lIG9mIHRoZSBzZXJ2ZXIsCisjICAgICBob3cgdG8gYWNjZXNzIHRoZSBzZXJ2ZXIsIGV0Yy47IGJ5IHRoZSB0aW1lIHRoZSBDVlMgcHJvdG9jb2wgaXMgaW4gdXNlLAorIyAgICAgY29ubmVjdGlvbiwgYXV0aGVudGljYXRpb24sIGV0Yy4sIGFyZSBhbHJlYWR5IHRha2VuIGNhcmUgb2YuIFRoZSBSb290CisjICAgICByZXF1ZXN0IG11c3QgYmUgc2VudCBvbmx5IG9uY2UsIGFuZCBpdCBtdXN0IGJlIHNlbnQgYmVmb3JlIGFueSByZXF1ZXN0cworIyAgICAgb3RoZXIgdGhhbiBWYWxpZC1yZXNwb25zZXMsIHZhbGlkLXJlcXVlc3RzLCBVc2VVbmNoYW5nZWQsIFNldCBvciBpbml0Lgorc3ViIHJlcV9Sb290Cit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisgICAgJGxvZy0+ZGVidWcoInJlcV9Sb290IDogJGRhdGEiKTsKKworICAgIHVubGVzcyAoJGRhdGEgPX4gbSNeLyMpIHsKKwlwcmludCAiZXJyb3IgMSBSb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aG5hbWVcbiI7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgbXkgJGN2c3Jvb3QgPSAkc3RhdGUtPnsnYmFzZS1wYXRoJ30gfHwgJyc7CisgICAgJGN2c3Jvb3QgPX4gcyMvKyQjIzsKKyAgICAkY3Zzcm9vdCAuPSAkZGF0YTsKKworICAgIGlmICgkc3RhdGUtPntDVlNST09UfQorCSYmICgkc3RhdGUtPntDVlNST09UfSBuZSAkY3Zzcm9vdCkpIHsKKwlwcmludCAiZXJyb3IgMSBDb25mbGljdGluZyByb290cyBzcGVjaWZpZWRcbiI7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgJHN0YXRlLT57Q1ZTUk9PVH0gPSAkY3Zzcm9vdDsKKworICAgICRFTlZ7R0lUX0RJUn0gPSAkc3RhdGUtPntDVlNST09UfSAuICIvIjsKKworICAgIGlmIChAeyRzdGF0ZS0+e2FsbG93ZWRfcm9vdHN9fSkgeworCW15ICRhbGxvd2VkID0gMDsKKwlmb3JlYWNoIG15ICRkaXIgKEB7JHN0YXRlLT57YWxsb3dlZF9yb290c319KSB7CisJICAgIG5leHQgdW5sZXNzICRkaXIgPX4gbSNeLyM7CisJICAgICRkaXIgPX4gcyMvKyQjIzsKKwkgICAgaWYgKCRzdGF0ZS0+eydzdHJpY3QtcGF0aHMnfSkgeworCQlpZiAoJEVOVntHSVRfRElSfSA9fiBtI15cUSRkaXJcRS8/JCMpIHsKKwkJICAgICRhbGxvd2VkID0gMTsKKwkJICAgIGxhc3Q7CisJCX0KKwkgICAgfSBlbHNpZiAoJEVOVntHSVRfRElSfSA9fiBtI15cUSRkaXJcRSgvPyR8LykjKSB7CisJCSRhbGxvd2VkID0gMTsKKwkJbGFzdDsKKwkgICAgfQorCX0KKworCXVubGVzcyAoJGFsbG93ZWQpIHsKKwkgICAgcHJpbnQgIkUgJEVOVntHSVRfRElSfSBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgdmFsaWQgR0lUIHJlcG9zaXRvcnlcbiI7CisJICAgIHByaW50ICJFIFxuIjsKKwkgICAgcHJpbnQgImVycm9yIDEgJEVOVntHSVRfRElSfSBpcyBub3QgYSB2YWxpZCByZXBvc2l0b3J5XG4iOworCSAgICByZXR1cm4gMDsKKwl9CisgICAgfQorCisgICAgdW5sZXNzICgtZCAkRU5We0dJVF9ESVJ9ICYmIC1lICRFTlZ7R0lUX0RJUn0uJ0hFQUQnKSB7CisgICAgICAgcHJpbnQgIkUgJEVOVntHSVRfRElSfSBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgdmFsaWQgR0lUIHJlcG9zaXRvcnlcbiI7CisgICAgICAgcHJpbnQgIkUgXG4iOworICAgICAgIHByaW50ICJlcnJvciAxICRFTlZ7R0lUX0RJUn0gaXMgbm90IGEgdmFsaWQgcmVwb3NpdG9yeVxuIjsKKyAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBteSBAZ2l0dmFycyA9IGBnaXQgY29uZmlnIC1sYDsKKyAgICBpZiAoJD8pIHsKKyAgICAgICBwcmludCAiRSBwcm9ibGVtcyBleGVjdXRpbmcgZ2l0LWNvbmZpZyBvbiB0aGUgc2VydmVyIC0tIHRoaXMgaXMgbm90IGEgZ2l0IHJlcG9zaXRvcnkgb3IgdGhlIFBBVEggaXMgbm90IHNldCBjb3JyZWN0bHkuXG4iOworICAgICAgICBwcmludCAiRSBcbiI7CisgICAgICAgIHByaW50ICJlcnJvciAxIC0gcHJvYmxlbSBleGVjdXRpbmcgZ2l0LWNvbmZpZ1xuIjsKKyAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZm9yZWFjaCBteSAkbGluZSAoIEBnaXR2YXJzICkKKyAgICB7CisgICAgICAgIG5leHQgdW5sZXNzICggJGxpbmUgPX4gL14oZ2l0Y3ZzKVwuKD86KGV4dHxwc2VydmVyKVwuKT8oW1x3LV0rKT0oLiopJC8gKTsKKyAgICAgICAgdW5sZXNzICgkMikgeworICAgICAgICAgICAgJGNmZy0+eyQxfXskM30gPSAkNDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRjZmctPnskMX17JDJ9eyQzfSA9ICQ0OworICAgICAgICB9CisgICAgfQorCisgICAgbXkgJGVuYWJsZWQgPSAoJGNmZy0+e2dpdGN2c317JHN0YXRlLT57bWV0aG9kfX17ZW5hYmxlZH0KKwkJICAgfHwgJGNmZy0+e2dpdGN2c317ZW5hYmxlZH0pOworICAgIHVubGVzcyAoJHN0YXRlLT57J2V4cG9ydC1hbGwnfSB8fAorCSAgICAoJGVuYWJsZWQgJiYgJGVuYWJsZWQgPX4gL15ccyooMXx0cnVlfHllcylccyokL2kpKSB7CisgICAgICAgIHByaW50ICJFIEdJVENWUyBlbXVsYXRpb24gbmVlZHMgdG8gYmUgZW5hYmxlZCBvbiB0aGlzIHJlcG9cbiI7CisgICAgICAgIHByaW50ICJFIHRoZSByZXBvIGNvbmZpZyBmaWxlIG5lZWRzIGEgW2dpdGN2c10gc2VjdGlvbiBhZGRlZCwgYW5kIHRoZSBwYXJhbWV0ZXIgJ2VuYWJsZWQnIHNldCB0byAxXG4iOworICAgICAgICBwcmludCAiRSBcbiI7CisgICAgICAgIHByaW50ICJlcnJvciAxIEdJVENWUyBlbXVsYXRpb24gZGlzYWJsZWRcbiI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG15ICRsb2dmaWxlID0gJGNmZy0+e2dpdGN2c317JHN0YXRlLT57bWV0aG9kfX17bG9nZmlsZX0gfHwgJGNmZy0+e2dpdGN2c317bG9nZmlsZX07CisgICAgaWYgKCAkbG9nZmlsZSApCisgICAgeworICAgICAgICAkbG9nLT5zZXRmaWxlKCRsb2dmaWxlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAkbG9nLT5ub2ZpbGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworIyBHbG9iYWxfb3B0aW9uIG9wdGlvbiBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBUcmFuc21pdCBvbmUgb2YgdGhlIGdsb2JhbCBvcHRpb25zIGAtcScsIGAtUScsCisjICAgICBgLWwnLCBgLXQnLCBgLXInLCBvciBgLW4nLiBvcHRpb24gbXVzdCBiZSBvbmUgb2YgdGhvc2Ugc3RyaW5ncywgbm8KKyMgICAgIHZhcmlhdGlvbnMgKHN1Y2ggYXMgY29tYmluaW5nIG9mIG9wdGlvbnMpIGFyZSBhbGxvd2VkLiBGb3IgZ3JhY2VmdWwKKyMgICAgIGhhbmRsaW5nIG9mIHZhbGlkLXJlcXVlc3RzLCBpdCBpcyBwcm9iYWJseSBiZXR0ZXIgdG8gbWFrZSBuZXcgZ2xvYmFsCisjICAgICBvcHRpb25zIHNlcGFyYXRlIHJlcXVlc3RzLCByYXRoZXIgdGhhbiB0cnlpbmcgdG8gYWRkIHRoZW0gdG8gdGhpcworIyAgICAgcmVxdWVzdC4KK3N1YiByZXFfR2xvYmFsb3B0aW9uCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisgICAgJGxvZy0+ZGVidWcoInJlcV9HbG9iYWxvcHRpb24gOiAkZGF0YSIpOworICAgICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9eyRkYXRhfSA9IDE7Cit9CisKKyMgVmFsaWQtcmVzcG9uc2VzIHJlcXVlc3QtbGlzdCBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBUZWxsIHRoZSBzZXJ2ZXIgd2hhdCByZXNwb25zZXMgdGhlIGNsaWVudCB3aWxsCisjICAgICBhY2NlcHQuIHJlcXVlc3QtbGlzdCBpcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHRva2Vucy4KK3N1YiByZXFfVmFsaWRyZXNwb25zZXMKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKyAgICAkbG9nLT5kZWJ1ZygicmVxX1ZhbGlkcmVzcG9uc2VzIDogJGRhdGEiKTsKKworICAgICMgVE9ETyA6IHJlLWVuYWJsZSB0aGlzLCBjdXJyZW50bHkgaXQncyBub3QgcGFydGljdWxhcmx5IHVzZWZ1bAorICAgICMkc3RhdGUtPnt2YWxpZHJlc3BvbnNlc30gPSBbIHNwbGl0IC9ccysvLCAkZGF0YSBdOworfQorCisjIHZhbGlkLXJlcXVlc3RzIFxuCisjICAgICBSZXNwb25zZSBleHBlY3RlZDogeWVzLiBBc2sgdGhlIHNlcnZlciB0byBzZW5kIGJhY2sgYSBWYWxpZC1yZXF1ZXN0cworIyAgICAgcmVzcG9uc2UuCitzdWIgcmVxX3ZhbGlkcmVxdWVzdHMKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgICRsb2ctPmRlYnVnKCJyZXFfdmFsaWRyZXF1ZXN0cyIpOworCisgICAgJGxvZy0+ZGVidWcoIlNFTkQgOiBWYWxpZC1yZXF1ZXN0cyAiIC4gam9pbigiICIsa2V5cyAlJG1ldGhvZHMpKTsKKyAgICAkbG9nLT5kZWJ1ZygiU0VORCA6IG9rIik7CisKKyAgICBwcmludCAiVmFsaWQtcmVxdWVzdHMgIiAuIGpvaW4oIiAiLGtleXMgJSRtZXRob2RzKSAuICJcbiI7CisgICAgcHJpbnQgIm9rXG4iOworfQorCisjIERpcmVjdG9yeSBsb2NhbC1kaXJlY3RvcnkgXG4KKyMgICAgIEFkZGl0aW9uYWwgZGF0YTogcmVwb3NpdG9yeSBcbi4gUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBUZWxsIHRoZSBzZXJ2ZXIKKyMgICAgIHdoYXQgZGlyZWN0b3J5IHRvIHVzZS4gVGhlIHJlcG9zaXRvcnkgc2hvdWxkIGJlIGEgZGlyZWN0b3J5IG5hbWUgZnJvbSBhCisjICAgICBwcmV2aW91cyBzZXJ2ZXIgcmVzcG9uc2UuIE5vdGUgdGhhdCB0aGlzIGJvdGggZ2l2ZXMgYSBkZWZhdWx0IGZvciBFbnRyeQorIyAgICAgYW5kIE1vZGlmaWVkIGFuZCBhbHNvIGZvciBjaSBhbmQgdGhlIG90aGVyIGNvbW1hbmRzOyBub3JtYWwgdXNhZ2UgaXMgdG8KKyMgICAgIHNlbmQgRGlyZWN0b3J5IGZvciBlYWNoIGRpcmVjdG9yeSBpbiB3aGljaCB0aGVyZSB3aWxsIGJlIGFuIEVudHJ5IG9yCisjICAgICBNb2RpZmllZCwgYW5kIHRoZW4gYSBmaW5hbCBEaXJlY3RvcnkgZm9yIHRoZSBvcmlnaW5hbCBkaXJlY3RvcnksIHRoZW4gdGhlCisjICAgICBjb21tYW5kLiBUaGUgbG9jYWwtZGlyZWN0b3J5IGlzIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGV2ZWwgYXQgd2hpY2ggdGhlCisjICAgICBjb21tYW5kIGlzIG9jY3VycmluZyAoaS5lLiB0aGUgbGFzdCBEaXJlY3Rvcnkgd2hpY2ggaXMgc2VudCBiZWZvcmUgdGhlCisjICAgICBjb21tYW5kKTsgdG8gaW5kaWNhdGUgdGhhdCB0b3AgbGV2ZWwsIGAuJyBzaG91bGQgYmUgc2VudCBmb3IKKyMgICAgIGxvY2FsLWRpcmVjdG9yeS4KK3N1YiByZXFfRGlyZWN0b3J5Cit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICBteSAkcmVwb3NpdG9yeSA9IDxTVERJTj47CisgICAgY2hvbXAgJHJlcG9zaXRvcnk7CisKKworICAgICRzdGF0ZS0+e2xvY2FsZGlyfSA9ICRkYXRhOworICAgICRzdGF0ZS0+e3JlcG9zaXRvcnl9ID0gJHJlcG9zaXRvcnk7CisgICAgJHN0YXRlLT57cGF0aH0gPSAkcmVwb3NpdG9yeTsKKyAgICAkc3RhdGUtPntwYXRofSA9fiBzL15cUSRzdGF0ZS0+e0NWU1JPT1R9XEVcLy8vOworICAgICRzdGF0ZS0+e21vZHVsZX0gPSAkMSBpZiAoJHN0YXRlLT57cGF0aH0gPX4gcy9eKC4qPykoXC98JCkvLyk7CisgICAgJHN0YXRlLT57cGF0aH0gLj0gIi8iIGlmICggJHN0YXRlLT57cGF0aH0gPX4gL1xTLyApOworCisgICAgJHN0YXRlLT57ZGlyZWN0b3J5fSA9ICRzdGF0ZS0+e2xvY2FsZGlyfTsKKyAgICAkc3RhdGUtPntkaXJlY3Rvcnl9ID0gIiIgaWYgKCAkc3RhdGUtPntkaXJlY3Rvcnl9IGVxICIuIiApOworICAgICRzdGF0ZS0+e2RpcmVjdG9yeX0gLj0gIi8iIGlmICggJHN0YXRlLT57ZGlyZWN0b3J5fSA9fiAvXFMvICk7CisKKyAgICBpZiAoIChub3QgZGVmaW5lZCgkc3RhdGUtPntwcmVwZW5kZGlyfSkgb3IgJHN0YXRlLT57cHJlcGVuZGRpcn0gZXEgJycpIGFuZCAkc3RhdGUtPntsb2NhbGRpcn0gZXEgIi4iIGFuZCAkc3RhdGUtPntwYXRofSA9fiAvXFMvICkKKyAgICB7CisgICAgICAgICRsb2ctPmluZm8oIlNldHRpbmcgcHJlcGVuZCB0byAnJHN0YXRlLT57cGF0aH0nIik7CisgICAgICAgICRzdGF0ZS0+e3ByZXBlbmRkaXJ9ID0gJHN0YXRlLT57cGF0aH07CisgICAgICAgIGZvcmVhY2ggbXkgJGVudHJ5ICgga2V5cyAleyRzdGF0ZS0+e2VudHJpZXN9fSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRzdGF0ZS0+e2VudHJpZXN9eyRzdGF0ZS0+e3ByZXBlbmRkaXJ9IC4gJGVudHJ5fSA9ICRzdGF0ZS0+e2VudHJpZXN9eyRlbnRyeX07CisgICAgICAgICAgICBkZWxldGUgJHN0YXRlLT57ZW50cmllc317JGVudHJ5fTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggZGVmaW5lZCAoICRzdGF0ZS0+e3ByZXBlbmRkaXJ9ICkgKQorICAgIHsKKyAgICAgICAgJGxvZy0+ZGVidWcoIlByZXBlbmRpbmcgJyRzdGF0ZS0+e3ByZXBlbmRkaXJ9JyB0byBzdGF0ZXxkaXJlY3RvcnkiKTsKKyAgICAgICAgJHN0YXRlLT57ZGlyZWN0b3J5fSA9ICRzdGF0ZS0+e3ByZXBlbmRkaXJ9IC4gJHN0YXRlLT57ZGlyZWN0b3J5fQorICAgIH0KKyAgICAkbG9nLT5kZWJ1ZygicmVxX0RpcmVjdG9yeSA6IGxvY2FsZGlyPSRkYXRhIHJlcG9zaXRvcnk9JHJlcG9zaXRvcnkgcGF0aD0kc3RhdGUtPntwYXRofSBkaXJlY3Rvcnk9JHN0YXRlLT57ZGlyZWN0b3J5fSBtb2R1bGU9JHN0YXRlLT57bW9kdWxlfSIpOworfQorCisjIEVudHJ5IGVudHJ5LWxpbmUgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiBuby4gVGVsbCB0aGUgc2VydmVyIHdoYXQgdmVyc2lvbiBvZiBhIGZpbGUgaXMgb24gdGhlCisjICAgICBsb2NhbCBtYWNoaW5lLiBUaGUgbmFtZSBpbiBlbnRyeS1saW5lIGlzIGEgbmFtZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5CisjICAgICBtb3N0IHJlY2VudGx5IHNwZWNpZmllZCB3aXRoIERpcmVjdG9yeS4gSWYgdGhlIHVzZXIgaXMgb3BlcmF0aW5nIG9uIG9ubHkKKyMgICAgIHNvbWUgZmlsZXMgaW4gYSBkaXJlY3RvcnksIEVudHJ5IHJlcXVlc3RzIGZvciBvbmx5IHRob3NlIGZpbGVzIG5lZWQgYmUKKyMgICAgIGluY2x1ZGVkLiBJZiBhbiBFbnRyeSByZXF1ZXN0IGlzIHNlbnQgd2l0aG91dCBNb2RpZmllZCwgSXMtbW9kaWZpZWQsIG9yCisjICAgICBVbmNoYW5nZWQsIGl0IG1lYW5zIHRoZSBmaWxlIGlzIGxvc3QgKGRvZXMgbm90IGV4aXN0IGluIHRoZSB3b3JraW5nCisjICAgICBkaXJlY3RvcnkpLiBJZiBib3RoIEVudHJ5IGFuZCBvbmUgb2YgTW9kaWZpZWQsIElzLW1vZGlmaWVkLCBvciBVbmNoYW5nZWQKKyMgICAgIGFyZSBzZW50IGZvciB0aGUgc2FtZSBmaWxlLCBFbnRyeSBtdXN0IGJlIHNlbnQgZmlyc3QuIEZvciBhIGdpdmVuIGZpbGUsCisjICAgICBvbmUgY2FuIHNlbmQgTW9kaWZpZWQsIElzLW1vZGlmaWVkLCBvciBVbmNoYW5nZWQsIGJ1dCBub3QgbW9yZSB0aGFuIG9uZQorIyAgICAgb2YgdGhlc2UgdGhyZWUuCitzdWIgcmVxX0VudHJ5Cit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICAjJGxvZy0+ZGVidWcoInJlcV9FbnRyeSA6ICRkYXRhIik7CisKKyAgICBteSBAZGF0YSA9IHNwbGl0KC9cLy8sICRkYXRhKTsKKworICAgICRzdGF0ZS0+e2VudHJpZXN9eyRzdGF0ZS0+e2RpcmVjdG9yeX0uJGRhdGFbMV19ID0geworICAgICAgICByZXZpc2lvbiAgICA9PiAkZGF0YVsyXSwKKyAgICAgICAgY29uZmxpY3QgICAgPT4gJGRhdGFbM10sCisgICAgICAgIG9wdGlvbnMgICAgID0+ICRkYXRhWzRdLAorICAgICAgICB0YWdfb3JfZGF0ZSA9PiAkZGF0YVs1XSwKKyAgICB9OworCisgICAgJGxvZy0+aW5mbygiUmVjZWl2ZWQgZW50cnkgbGluZSAnJGRhdGEnID0+ICciIC4gJHN0YXRlLT57ZGlyZWN0b3J5fSAuICRkYXRhWzFdIC4gIiciKTsKK30KKworIyBRdWVzdGlvbmFibGUgZmlsZW5hbWUgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiBuby4gQWRkaXRpb25hbCBkYXRhOiBuby4gVGVsbCB0aGUgc2VydmVyIHRvIGNoZWNrCisjICAgICB3aGV0aGVyIGZpbGVuYW1lIHNob3VsZCBiZSBpZ25vcmVkLCBhbmQgaWYgbm90LCBuZXh0IHRpbWUgdGhlIHNlcnZlcgorIyAgICAgc2VuZHMgcmVzcG9uc2VzLCBzZW5kIChpbiBhIE0gcmVzcG9uc2UpIGA/JyBmb2xsb3dlZCBieSB0aGUgZGlyZWN0b3J5IGFuZAorIyAgICAgZmlsZW5hbWUuIGZpbGVuYW1lIG11c3Qgbm90IGNvbnRhaW4gYC8nOyBpdCBuZWVkcyB0byBiZSBhIGZpbGUgaW4gdGhlCisjICAgICBkaXJlY3RvcnkgbmFtZWQgYnkgdGhlIG1vc3QgcmVjZW50IERpcmVjdG9yeSByZXF1ZXN0Lgorc3ViIHJlcV9RdWVzdGlvbmFibGUKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgICRsb2ctPmRlYnVnKCJyZXFfUXVlc3Rpb25hYmxlIDogJGRhdGEiKTsKKyAgICAkc3RhdGUtPntlbnRyaWVzfXskc3RhdGUtPntkaXJlY3Rvcnl9LiRkYXRhfXtxdWVzdGlvbmFibGV9ID0gMTsKK30KKworIyBhZGQgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiB5ZXMuIEFkZCBhIGZpbGUgb3IgZGlyZWN0b3J5LiBUaGlzIHVzZXMgYW55IHByZXZpb3VzCisjICAgICBBcmd1bWVudCwgRGlyZWN0b3J5LCBFbnRyeSwgb3IgTW9kaWZpZWQgcmVxdWVzdHMsIGlmIHRoZXkgaGF2ZSBiZWVuIHNlbnQuCisjICAgICBUaGUgbGFzdCBEaXJlY3Rvcnkgc2VudCBzcGVjaWZpZXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGF0IHRoZSB0aW1lIG9mCisjICAgICB0aGUgb3BlcmF0aW9uLiBUbyBhZGQgYSBkaXJlY3RvcnksIHNlbmQgdGhlIGRpcmVjdG9yeSB0byBiZSBhZGRlZCB1c2luZworIyAgICAgRGlyZWN0b3J5IGFuZCBBcmd1bWVudCByZXF1ZXN0cy4KK3N1YiByZXFfYWRkCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICBhcmdzcGxpdCgiYWRkIik7CisKKyAgICBteSAkdXBkYXRlciA9IEdJVENWUzo6dXBkYXRlci0+bmV3KCRzdGF0ZS0+e0NWU1JPT1R9LCAkc3RhdGUtPnttb2R1bGV9LCAkbG9nKTsKKyAgICAkdXBkYXRlci0+dXBkYXRlKCk7CisKKyAgICBhcmdzZnJvbWRpcigkdXBkYXRlcik7CisKKyAgICBteSAkYWRkY291bnQgPSAwOworCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICAkZmlsZW5hbWUgPSBmaWxlY2xlYW51cCgkZmlsZW5hbWUpOworCisgICAgICAgIG15ICRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lKTsKKyAgICAgICAgbXkgJHdyZXYgPSByZXZwYXJzZSgkZmlsZW5hbWUpOworCisgICAgICAgIGlmICgkd3JldiAmJiAkbWV0YSAmJiAoJHdyZXYgPCAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgIyBwcmV2aW91c2x5IHJlbW92ZWQgZmlsZSwgYWRkIGJhY2sKKyAgICAgICAgICAgICRsb2ctPmluZm8oImFkZGVkIGZpbGUgJGZpbGVuYW1lIHdhcyBwcmV2aW91c2x5IHJlbW92ZWQsIHNlbmQgMS4kbWV0YS0+e3JldmlzaW9ufSIpOworCisgICAgICAgICAgICBwcmludCAiTVQgK3VwZGF0ZWRcbiI7CisgICAgICAgICAgICBwcmludCAiTVQgdGV4dCBVIFxuIjsKKyAgICAgICAgICAgIHByaW50ICJNVCBmbmFtZSAkZmlsZW5hbWVcbiI7CisgICAgICAgICAgICBwcmludCAiTVQgbmV3bGluZVxuIjsKKyAgICAgICAgICAgIHByaW50ICJNVCAtdXBkYXRlZFxuIjsKKworICAgICAgICAgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lLDEpOworCisgICAgICAgICAgICAgICAgcHJpbnQgIkNyZWF0ZWQgJGRpcnBhcnRcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRzdGF0ZS0+e21vZHVsZX0vJGZpbGVuYW1lXG4iOworCisgICAgICAgICAgICAgICAgIyB0aGlzIGlzIGFuICJlbnRyaWVzIiBsaW5lCisgICAgICAgICAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlbmFtZSwic2hhMSIsJG1ldGEtPntmaWxlaGFzaH0pOworICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCIvJGZpbGVwYXJ0LzEuJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy8iKTsKKyAgICAgICAgICAgICAgICBwcmludCAiLyRmaWxlcGFydC8xLiRtZXRhLT57cmV2aXNpb259Ly8ka29wdHMvXG4iOworICAgICAgICAgICAgICAgICMgcGVybWlzc2lvbnMKKyAgICAgICAgICAgICAgICAkbG9nLT5kZWJ1ZygiU0VORCA6IHU9JG1ldGEtPnttb2RlfSxnPSRtZXRhLT57bW9kZX0sbz0kbWV0YS0+e21vZGV9Iik7CisgICAgICAgICAgICAgICAgcHJpbnQgInU9JG1ldGEtPnttb2RlfSxnPSRtZXRhLT57bW9kZX0sbz0kbWV0YS0+e21vZGV9XG4iOworICAgICAgICAgICAgICAgICMgdHJhbnNtaXQgZmlsZQorICAgICAgICAgICAgICAgIHRyYW5zbWl0ZmlsZSgkbWV0YS0+e2ZpbGVoYXNofSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICB1bmxlc3MgKCBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0gKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJFIGN2cyBhZGQ6IG5vdGhpbmcga25vd24gYWJvdXQgYCRmaWxlbmFtZSdcbiI7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgICAgICMgVE9ETyA6IGNoZWNrIHdlJ3JlIG5vdCBzcXVhc2hpbmcgYW4gYWxyZWFkeSBleGlzdGluZyBmaWxlCisgICAgICAgIGlmICggZGVmaW5lZCAoICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17cmV2aXNpb259ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCAiRSBjdnMgYWRkOiBgJGZpbGVuYW1lJyBoYXMgYWxyZWFkeSBiZWVuIGVudGVyZWRcbiI7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRmaWxlbmFtZSwgMSk7CisKKyAgICAgICAgcHJpbnQgIkUgY3ZzIGFkZDogc2NoZWR1bGluZyBmaWxlIGAkZmlsZW5hbWUnIGZvciBhZGRpdGlvblxuIjsKKworICAgICAgICBwcmludCAiQ2hlY2tlZC1pbiAkZGlycGFydFxuIjsKKyAgICAgICAgcHJpbnQgIiRmaWxlbmFtZVxuIjsKKyAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlbmFtZSwiZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSk7CisgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0LzAvLyRrb3B0cy9cbiI7CisKKyAgICAgICAgbXkgJHJlcXVlc3RlZEtvcHRzID0gJHN0YXRlLT57b3B0fXtrfTsKKyAgICAgICAgaWYoZGVmaW5lZCgkcmVxdWVzdGVkS29wdHMpKQorICAgICAgICB7CisgICAgICAgICAgICAkcmVxdWVzdGVkS29wdHMgPSAiLWskcmVxdWVzdGVkS29wdHMiOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgJHJlcXVlc3RlZEtvcHRzID0gIiI7CisgICAgICAgIH0KKyAgICAgICAgaWYoICRrb3B0cyBuZSAkcmVxdWVzdGVkS29wdHMgKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJJZ25vcmluZyByZXF1ZXN0ZWQgLWs9JyRyZXF1ZXN0ZWRLb3B0cyciCisgICAgICAgICAgICAgICAgICAgICAgICAuICIgZm9yICckZmlsZW5hbWUnOyBkZXRlY3RlZCAtaz0nJGtvcHRzJyBpbnN0ZWFkIik7CisgICAgICAgICAgICAjVE9ETzogQWxzbyBoYXZlIG9wdGlvbiB0byBzZW5kIHdhcm5pbmcgdG8gdXNlcj8KKyAgICAgICAgfQorCisgICAgICAgICRhZGRjb3VudCsrOworICAgIH0KKworICAgIGlmICggJGFkZGNvdW50ID09IDEgKQorICAgIHsKKyAgICAgICAgcHJpbnQgIkUgY3ZzIGFkZDogdXNlIGBjdnMgY29tbWl0JyB0byBhZGQgdGhpcyBmaWxlIHBlcm1hbmVudGx5XG4iOworICAgIH0KKyAgICBlbHNpZiAoICRhZGRjb3VudCA+IDEgKQorICAgIHsKKyAgICAgICAgcHJpbnQgIkUgY3ZzIGFkZDogdXNlIGBjdnMgY29tbWl0JyB0byBhZGQgdGhlc2UgZmlsZXMgcGVybWFuZW50bHlcbiI7CisgICAgfQorCisgICAgcHJpbnQgIm9rXG4iOworfQorCisjIHJlbW92ZSBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IHllcy4gUmVtb3ZlIGEgZmlsZS4gVGhpcyB1c2VzIGFueSBwcmV2aW91cyBBcmd1bWVudCwKKyMgICAgIERpcmVjdG9yeSwgRW50cnksIG9yIE1vZGlmaWVkIHJlcXVlc3RzLCBpZiB0aGV5IGhhdmUgYmVlbiBzZW50LiBUaGUgbGFzdAorIyAgICAgRGlyZWN0b3J5IHNlbnQgc3BlY2lmaWVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhdCB0aGUgdGltZSBvZiB0aGUKKyMgICAgIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHRoaXMgcmVxdWVzdCBkb2VzIG5vdCBhY3R1YWxseSBkbyBhbnl0aGluZyB0byB0aGUKKyMgICAgIHJlcG9zaXRvcnk7IHRoZSBvbmx5IGVmZmVjdCBvZiBhIHN1Y2Nlc3NmdWwgcmVtb3ZlIHJlcXVlc3QgaXMgdG8gc3VwcGx5CisjICAgICB0aGUgY2xpZW50IHdpdGggYSBuZXcgZW50cmllcyBsaW5lIGNvbnRhaW5pbmcgYC0nIHRvIGluZGljYXRlIGEgcmVtb3ZlZAorIyAgICAgZmlsZS4gSW4gZmFjdCwgdGhlIGNsaWVudCBwcm9iYWJseSBjb3VsZCBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uIHdpdGhvdXQKKyMgICAgIGNvbnRhY3RpbmcgdGhlIHNlcnZlciwgYWx0aG91Z2ggdXNpbmcgcmVtb3ZlIG1heSBjYXVzZSB0aGUgc2VydmVyIHRvCisjICAgICBwZXJmb3JtIGEgZmV3IG1vcmUgY2hlY2tzLiBUaGUgY2xpZW50IHNlbmRzIGEgc3Vic2VxdWVudCBjaSByZXF1ZXN0IHRvCisjICAgICBhY3R1YWxseSByZWNvcmQgdGhlIHJlbW92YWwgaW4gdGhlIHJlcG9zaXRvcnkuCitzdWIgcmVxX3JlbW92ZQoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgYXJnc3BsaXQoInJlbW92ZSIpOworCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgICMkbG9nLT5kZWJ1ZygiYWRkIHN0YXRlIDogIiAuIER1bXBlcigkc3RhdGUpKTsKKworICAgIG15ICRybWNvdW50ID0gMDsKKworICAgIGZvcmVhY2ggbXkgJGZpbGVuYW1lICggQHskc3RhdGUtPnthcmdzfX0gKQorICAgIHsKKyAgICAgICAgJGZpbGVuYW1lID0gZmlsZWNsZWFudXAoJGZpbGVuYW1lKTsKKworICAgICAgICBpZiAoIGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3VuY2hhbmdlZH0gKSBvciBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0gKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJFIGN2cyByZW1vdmU6IGZpbGUgYCRmaWxlbmFtZScgc3RpbGwgaW4gd29ya2luZyBkaXJlY3RvcnlcbiI7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgbXkgJG1ldGEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUpOworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKyAgICAgICAgdW5sZXNzICggZGVmaW5lZCAoICR3cmV2ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCAiRSBjdnMgcmVtb3ZlOiBub3RoaW5nIGtub3duIGFib3V0IGAkZmlsZW5hbWUnXG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZGVmaW5lZCgkd3JldikgYW5kICR3cmV2IDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJFIGN2cyByZW1vdmU6IGZpbGUgYCRmaWxlbmFtZScgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIHJlbW92YWxcbiI7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgdW5sZXNzICggJHdyZXYgPT0gJG1ldGEtPntyZXZpc2lvbn0gKQorICAgICAgICB7CisgICAgICAgICAgICAjIFRPRE8gOiBub3Qgc3VyZSBpZiB0aGUgZm9ybWF0IG9mIHRoaXMgbWVzc2FnZSBpcyBxdWl0ZSBjb3JyZWN0LgorICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIHJlbW92ZTogVXAgdG8gZGF0ZSBjaGVjayBmYWlsZWQgZm9yIGAkZmlsZW5hbWUnXG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisKKyAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRmaWxlbmFtZSwgMSk7CisKKyAgICAgICAgcHJpbnQgIkUgY3ZzIHJlbW92ZTogc2NoZWR1bGluZyBgJGZpbGVuYW1lJyBmb3IgcmVtb3ZhbFxuIjsKKworICAgICAgICBwcmludCAiQ2hlY2tlZC1pbiAkZGlycGFydFxuIjsKKyAgICAgICAgcHJpbnQgIiRmaWxlbmFtZVxuIjsKKyAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlbmFtZSwic2hhMSIsJG1ldGEtPntmaWxlaGFzaH0pOworICAgICAgICBwcmludCAiLyRmaWxlcGFydC8tMS4kd3Jldi8vJGtvcHRzL1xuIjsKKworICAgICAgICAkcm1jb3VudCsrOworICAgIH0KKworICAgIGlmICggJHJtY291bnQgPT0gMSApCisgICAgeworICAgICAgICBwcmludCAiRSBjdnMgcmVtb3ZlOiB1c2UgYGN2cyBjb21taXQnIHRvIHJlbW92ZSB0aGlzIGZpbGUgcGVybWFuZW50bHlcbiI7CisgICAgfQorICAgIGVsc2lmICggJHJtY291bnQgPiAxICkKKyAgICB7CisgICAgICAgIHByaW50ICJFIGN2cyByZW1vdmU6IHVzZSBgY3ZzIGNvbW1pdCcgdG8gcmVtb3ZlIHRoZXNlIGZpbGVzIHBlcm1hbmVudGx5XG4iOworICAgIH0KKworICAgIHByaW50ICJva1xuIjsKK30KKworIyBNb2RpZmllZCBmaWxlbmFtZSBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBBZGRpdGlvbmFsIGRhdGE6IG1vZGUsIFxuLCBmaWxlIHRyYW5zbWlzc2lvbi4gU2VuZAorIyAgICAgdGhlIHNlcnZlciBhIGNvcHkgb2Ygb25lIGxvY2FsbHkgbW9kaWZpZWQgZmlsZS4gZmlsZW5hbWUgaXMgYSBmaWxlIHdpdGhpbgorIyAgICAgdGhlIG1vc3QgcmVjZW50IGRpcmVjdG9yeSBzZW50IHdpdGggRGlyZWN0b3J5OyBpdCBtdXN0IG5vdCBjb250YWluIGAvJy4KKyMgICAgIElmIHRoZSB1c2VyIGlzIG9wZXJhdGluZyBvbiBvbmx5IHNvbWUgZmlsZXMgaW4gYSBkaXJlY3RvcnksIG9ubHkgdGhvc2UKKyMgICAgIGZpbGVzIG5lZWQgdG8gYmUgaW5jbHVkZWQuIFRoaXMgY2FuIGFsc28gYmUgc2VudCB3aXRob3V0IEVudHJ5LCBpZiB0aGVyZQorIyAgICAgaXMgbm8gZW50cnkgZm9yIHRoZSBmaWxlLgorc3ViIHJlcV9Nb2RpZmllZAoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgbXkgJG1vZGUgPSA8U1RESU4+OworICAgIGRlZmluZWQgJG1vZGUKKyAgICAgICAgb3IgKHByaW50ICJFIGVuZCBvZiBmaWxlIHJlYWRpbmcgbW9kZSBmb3IgJGRhdGFcbiIpLCByZXR1cm47CisgICAgY2hvbXAgJG1vZGU7CisgICAgbXkgJHNpemUgPSA8U1RESU4+OworICAgIGRlZmluZWQgJHNpemUKKyAgICAgICAgb3IgKHByaW50ICJFIGVuZCBvZiBmaWxlIHJlYWRpbmcgc2l6ZSBvZiAkZGF0YVxuIiksIHJldHVybjsKKyAgICBjaG9tcCAkc2l6ZTsKKworICAgICMgR3JhYiBjb25maWcgaW5mb3JtYXRpb24KKyAgICBteSAkYmxvY2tzaXplID0gODE5MjsKKyAgICBteSAkYnl0ZXNsZWZ0ID0gJHNpemU7CisgICAgbXkgJHRtcDsKKworICAgICMgR2V0IGEgZmlsZWhhbmRsZS9uYW1lIHRvIHdyaXRlIGl0IHRvCisgICAgbXkgKCAkZmgsICRmaWxlbmFtZSApID0gdGVtcGZpbGUoIERJUiA9PiAkVEVNUF9ESVIgKTsKKworICAgICMgTG9vcCBvdmVyIGZpbGUgZGF0YSB3cml0aW5nIG91dCB0byB0ZW1wb3JhcnkgZmlsZS4KKyAgICB3aGlsZSAoICRieXRlc2xlZnQgKQorICAgIHsKKyAgICAgICAgJGJsb2Nrc2l6ZSA9ICRieXRlc2xlZnQgaWYgKCAkYnl0ZXNsZWZ0IDwgJGJsb2Nrc2l6ZSApOworICAgICAgICByZWFkIFNURElOLCAkdG1wLCAkYmxvY2tzaXplOworICAgICAgICBwcmludCAkZmggJHRtcDsKKyAgICAgICAgJGJ5dGVzbGVmdCAtPSAkYmxvY2tzaXplOworICAgIH0KKworICAgIGNsb3NlICRmaAorICAgICAgICBvciAocHJpbnQgIkUgZmFpbGVkIHRvIHdyaXRlIHRlbXBvcmFyeSwgJGZpbGVuYW1lOiAkIVxuIiksIHJldHVybjsKKworICAgICMgRW5zdXJlIHdlIGhhdmUgc29tZXRoaW5nIHNlbnNpYmxlIGZvciB0aGUgZmlsZSBtb2RlCisgICAgaWYgKCAkbW9kZSA9fiAvdT0oXHcrKS8gKQorICAgIHsKKyAgICAgICAgJG1vZGUgPSAkMTsKKyAgICB9IGVsc2UgeworICAgICAgICAkbW9kZSA9ICJydyI7CisgICAgfQorCisgICAgIyBTYXZlIHRoZSBmaWxlIGRhdGEgaW4gJHN0YXRlCisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfZmlsZW5hbWV9ID0gJGZpbGVuYW1lOworICAgICRzdGF0ZS0+e2VudHJpZXN9eyRzdGF0ZS0+e2RpcmVjdG9yeX0uJGRhdGF9e21vZGlmaWVkX21vZGV9ID0gJG1vZGU7CisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfaGFzaH0gPSBgZ2l0IGhhc2gtb2JqZWN0ICRmaWxlbmFtZWA7CisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfaGFzaH0gPX4gcy9ccy4qJC8vczsKKworICAgICMkbG9nLT5kZWJ1ZygicmVxX01vZGlmaWVkIDogZmlsZT0kZGF0YSBtb2RlPSRtb2RlIHNpemU9JHNpemUiKTsKK30KKworIyBVbmNoYW5nZWQgZmlsZW5hbWUgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiBuby4gVGVsbCB0aGUgc2VydmVyIHRoYXQgZmlsZW5hbWUgaGFzIG5vdCBiZWVuCisjICAgICBtb2RpZmllZCBpbiB0aGUgY2hlY2tlZCBvdXQgZGlyZWN0b3J5LiBUaGUgZmlsZW5hbWUgaXMgYSBmaWxlIHdpdGhpbiB0aGUKKyMgICAgIG1vc3QgcmVjZW50IGRpcmVjdG9yeSBzZW50IHdpdGggRGlyZWN0b3J5OyBpdCBtdXN0IG5vdCBjb250YWluIGAvJy4KK3N1YiByZXFfVW5jaGFuZ2VkCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICAkc3RhdGUtPntlbnRyaWVzfXskc3RhdGUtPntkaXJlY3Rvcnl9LiRkYXRhfXt1bmNoYW5nZWR9ID0gMTsKKworICAgICMkbG9nLT5kZWJ1ZygicmVxX1VuY2hhbmdlZCA6ICRkYXRhIik7Cit9CisKKyMgQXJndW1lbnQgdGV4dCBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBTYXZlIGFyZ3VtZW50IGZvciB1c2UgaW4gYSBzdWJzZXF1ZW50IGNvbW1hbmQuCisjICAgICBBcmd1bWVudHMgYWNjdW11bGF0ZSB1bnRpbCBhbiBhcmd1bWVudC11c2luZyBjb21tYW5kIGlzIGdpdmVuLCBhdCB3aGljaAorIyAgICAgcG9pbnQgdGhleSBhcmUgZm9yZ290dGVuLgorIyBBcmd1bWVudHggdGV4dCBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBBcHBlbmQgXG4gZm9sbG93ZWQgYnkgdGV4dCB0byB0aGUgY3VycmVudCBhcmd1bWVudAorIyAgICAgYmVpbmcgc2F2ZWQuCitzdWIgcmVxX0FyZ3VtZW50Cit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICAjIEFyZ3VtZW50eCBtZWFuczogYXBwZW5kIHRvIGxhc3QgQXJndW1lbnQgKHdpdGggYSBuZXdsaW5lIGluIGZyb250KQorCisgICAgJGxvZy0+ZGVidWcoIiRjbWQgOiAkZGF0YSIpOworCisgICAgaWYgKCAkY21kIGVxICdBcmd1bWVudHgnKSB7CisgICAgICAgICR7JHN0YXRlLT57YXJndW1lbnRzfX1bJCN7JHN0YXRlLT57YXJndW1lbnRzfX1dIC49ICJcbiIgLiAkZGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoIEB7JHN0YXRlLT57YXJndW1lbnRzfX0sICRkYXRhOworICAgIH0KK30KKworIyBleHBhbmQtbW9kdWxlcyBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IHllcy4gRXhwYW5kIHRoZSBtb2R1bGVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgaW4gdGhlCisjICAgICBhcmd1bWVudHMuIFJldHVybnMgdGhlIGRhdGEgaW4gTW9kdWxlLWV4cGFuc2lvbiByZXNwb25zZXMuIE5vdGUgdGhhdCB0aGUKKyMgICAgIHNlcnZlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyBpcyBjaGVja291dCBvciBleHBvcnQsIG5vdCBydGFnIG9yIHJkaWZmOyB0aGUKKyMgICAgIGxhdHRlciBkbyBub3QgYWNjZXNzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGh1cyBoYXZlIG5vIG5lZWQgdG8KKyMgICAgIGV4cGFuZCBtb2R1bGVzIG9uIHRoZSBjbGllbnQgc2lkZS4gRXhwYW5kIG1heSBub3QgYmUgdGhlIGJlc3Qgd29yZCBmb3IKKyMgICAgIHdoYXQgdGhpcyByZXF1ZXN0IGRvZXMuIEl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IHRlbGwgeW91IGFsbCB0aGUgZmlsZXMKKyMgICAgIGNvbnRhaW5lZCBpbiBhIG1vZHVsZSwgZm9yIGV4YW1wbGUuIEJhc2ljYWxseSBpdCBpcyBhIHdheSBvZiB0ZWxsaW5nIHlvdQorIyAgICAgd2hpY2ggd29ya2luZyBkaXJlY3RvcmllcyB0aGUgc2VydmVyIG5lZWRzIHRvIGtub3cgYWJvdXQgaW4gb3JkZXIgdG8KKyMgICAgIGhhbmRsZSBhIGNoZWNrb3V0IG9mIHRoZSBzcGVjaWZpZWQgbW9kdWxlcy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhhdCB0aGUKKyMgICAgIHNlcnZlciBoYXMgYSBtb2R1bGUgZGVmaW5lZCBieQorIyAgIGFsaWFzbW9kdWxlIC1hIDFkaXIKKyMgICAgIFRoYXQgaXMsIG9uZSBjYW4gY2hlY2sgb3V0IGFsaWFzbW9kdWxlIGFuZCBpdCB3aWxsIHRha2UgMWRpciBpbiB0aGUKKyMgICAgIHJlcG9zaXRvcnkgYW5kIGNoZWNrIGl0IG91dCB0byAxZGlyIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gTm93IHN1cHBvc2UKKyMgICAgIHRoZSBjbGllbnQgYWxyZWFkeSBoYXMgdGhpcyBtb2R1bGUgY2hlY2tlZCBvdXQgYW5kIGlzIHBsYW5uaW5nIG9uIHVzaW5nCisjICAgICB0aGUgY28gcmVxdWVzdCB0byB1cGRhdGUgaXQuIFdpdGhvdXQgdXNpbmcgZXhwYW5kLW1vZHVsZXMsIHRoZSBjbGllbnQKKyMgICAgIHdvdWxkIGhhdmUgdHdvIGJhZCBjaG9pY2VzOiBpdCBjb3VsZCBlaXRoZXIgc2VuZCBpbmZvcm1hdGlvbiBhYm91dCBhbGwKKyMgICAgIHdvcmtpbmcgZGlyZWN0b3JpZXMgdW5kZXIgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGljaCBjb3VsZCBiZQorIyAgICAgdW5uZWNlc3NhcmlseSBzbG93LCBvciBpdCBjb3VsZCBiZSBpZ25vcmFudCBvZiB0aGUgZmFjdCB0aGF0IGFsaWFzbW9kdWxlCisjICAgICBzdGFuZHMgZm9yIDFkaXIsIGFuZCBuZWdsZWN0IHRvIHNlbmQgaW5mb3JtYXRpb24gZm9yIDFkaXIsIHdoaWNoIHdvdWxkCisjICAgICBsZWFkIHRvIGluY29ycmVjdCBvcGVyYXRpb24uIFdpdGggZXhwYW5kLW1vZHVsZXMsIHRoZSBjbGllbnQgd291bGQgZmlyc3QKKyMgICAgIGFzayBmb3IgdGhlIG1vZHVsZSB0byBiZSBleHBhbmRlZDoKK3N1YiByZXFfZXhwYW5kbW9kdWxlcworeworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgYXJnc3BsaXQoKTsKKworICAgICRsb2ctPmRlYnVnKCJyZXFfZXhwYW5kbW9kdWxlcyA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApICk7CisKKyAgICB1bmxlc3MgKCByZWYgJHN0YXRlLT57YXJndW1lbnRzfSBlcSAiQVJSQVkiICkKKyAgICB7CisgICAgICAgIHByaW50ICJva1xuIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJG1vZHVsZSAoIEB7JHN0YXRlLT57YXJndW1lbnRzfX0gKQorICAgIHsKKyAgICAgICAgJGxvZy0+ZGVidWcoIlNFTkQgOiBNb2R1bGUtZXhwYW5zaW9uICRtb2R1bGUiKTsKKyAgICAgICAgcHJpbnQgIk1vZHVsZS1leHBhbnNpb24gJG1vZHVsZVxuIjsKKyAgICB9CisKKyAgICBwcmludCAib2tcbiI7CisgICAgc3RhdGVjbGVhbnVwKCk7Cit9CisKKyMgY28gXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiB5ZXMuIEdldCBmaWxlcyBmcm9tIHRoZSByZXBvc2l0b3J5LiBUaGlzIHVzZXMgYW55CisjICAgICBwcmV2aW91cyBBcmd1bWVudCwgRGlyZWN0b3J5LCBFbnRyeSwgb3IgTW9kaWZpZWQgcmVxdWVzdHMsIGlmIHRoZXkgaGF2ZQorIyAgICAgYmVlbiBzZW50LiBBcmd1bWVudHMgdG8gdGhpcyBjb21tYW5kIGFyZSBtb2R1bGUgbmFtZXM7IHRoZSBjbGllbnQgY2Fubm90CisjICAgICBrbm93IHdoYXQgZGlyZWN0b3JpZXMgdGhleSBjb3JyZXNwb25kIHRvIGV4Y2VwdCBieSAoMSkganVzdCBzZW5kaW5nIHRoZQorIyAgICAgY28gcmVxdWVzdCwgYW5kIHRoZW4gc2VlaW5nIHdoYXQgZGlyZWN0b3J5IG5hbWVzIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjayBpbgorIyAgICAgaXRzIHJlc3BvbnNlcywgYW5kICgyKSB0aGUgZXhwYW5kLW1vZHVsZXMgcmVxdWVzdC4KK3N1YiByZXFfY28KK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJjbyIpOworCisgICAgIyBQcm92aWRlIGxpc3Qgb2YgbW9kdWxlcywgaWYgLWMgd2FzIHVzZWQuCisgICAgaWYgKGV4aXN0cyAkc3RhdGUtPntvcHR9e2N9KSB7CisgICAgICAgIG15ICRzaG93cmVmID0gYGdpdCBzaG93LXJlZiAtLWhlYWRzYDsKKyAgICAgICAgZm9yIG15ICRsaW5lIChzcGxpdCAnXG4nLCAkc2hvd3JlZikgeworICAgICAgICAgICAgaWYgKCAkbGluZSA9fiBtJSByZWZzL2hlYWRzLyguKikkJSApIHsKKyAgICAgICAgICAgICAgICBwcmludCAiTSAkMVx0JDFcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIm9rXG4iOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBteSAkbW9kdWxlID0gJHN0YXRlLT57YXJnc31bMF07CisgICAgJHN0YXRlLT57bW9kdWxlfSA9ICRtb2R1bGU7CisgICAgbXkgJGNoZWNrb3V0X3BhdGggPSAkbW9kdWxlOworCisgICAgIyB1c2UgdGhlIHVzZXIgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiB3ZSdyZSBnaXZlbiBpdAorICAgICRjaGVja291dF9wYXRoID0gJHN0YXRlLT57b3B0fXtkfSBpZiAoIGV4aXN0cyAoICRzdGF0ZS0+e29wdH17ZH0gKSApOworCisgICAgJGxvZy0+ZGVidWcoInJlcV9jbyA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApICk7CisKKyAgICAkbG9nLT5pbmZvKCJDaGVja2luZyBvdXQgbW9kdWxlICckbW9kdWxlJyAoJHN0YXRlLT57Q1ZTUk9PVH0pIHRvICckY2hlY2tvdXRfcGF0aCciKTsKKworICAgICRFTlZ7R0lUX0RJUn0gPSAkc3RhdGUtPntDVlNST09UfSAuICIvIjsKKworICAgICMgR3JhYiBhIGhhbmRsZSB0byB0aGUgU1FMaXRlIGRiIGFuZCBkbyBhbnkgbmVjZXNzYXJ5IHVwZGF0ZXMKKyAgICBteSAkdXBkYXRlciA9IEdJVENWUzo6dXBkYXRlci0+bmV3KCRzdGF0ZS0+e0NWU1JPT1R9LCAkbW9kdWxlLCAkbG9nKTsKKyAgICAkdXBkYXRlci0+dXBkYXRlKCk7CisKKyAgICAkY2hlY2tvdXRfcGF0aCA9fiBzfC8kfHw7ICMgZ2V0IHJpZCBvZiB0cmFpbGluZyBzbGFzaGVzCisKKyAgICAjIEVjbGlwc2Ugc2VlbXMgdG8gbmVlZCB0aGUgQ2xlYXItc3RpY2t5IGNvbW1hbmQKKyAgICAjIHRvIHByZXBhcmUgdGhlICdFbnRyaWVzJyBmaWxlIGZvciB0aGUgbmV3IGRpcmVjdG9yeS4KKyAgICBwcmludCAiQ2xlYXItc3RpY2t5ICRjaGVja291dF9wYXRoL1xuIjsKKyAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJG1vZHVsZS9cbiI7CisgICAgcHJpbnQgIkNsZWFyLXN0YXRpYy1kaXJlY3RvcnkgJGNoZWNrb3V0X3BhdGgvXG4iOworICAgIHByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kbW9kdWxlL1xuIjsKKyAgICBwcmludCAiQ2xlYXItc3RpY2t5ICRjaGVja291dF9wYXRoL1xuIjsgIyB5ZXMsIHR3aWNlCisgICAgcHJpbnQgJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRtb2R1bGUvXG4iOworICAgIHByaW50ICJUZW1wbGF0ZSAkY2hlY2tvdXRfcGF0aC9cbiI7CisgICAgcHJpbnQgJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRtb2R1bGUvXG4iOworICAgIHByaW50ICIwXG4iOworCisgICAgIyBpbnN0cnVjdCB0aGUgY2xpZW50IHRoYXQgd2UncmUgY2hlY2tpbmcgb3V0IHRvICRjaGVja291dF9wYXRoCisgICAgcHJpbnQgIkUgY3ZzIGNoZWNrb3V0OiBVcGRhdGluZyAkY2hlY2tvdXRfcGF0aFxuIjsKKworICAgIG15ICVzZWVuZGlycyA9ICgpOworICAgIG15ICRsYXN0ZGlyID0nJzsKKworICAgICMgcmVjdXJzaXZlCisgICAgc3ViIHByZXBkaXIgeworICAgICAgIG15ICgkZGlyLCAkcmVwb2RpciwgJHJlbW90ZWRpciwgJHNlZW5kaXJzKSA9IEBfOworICAgICAgIG15ICRwYXJlbnQgPSBkaXJuYW1lKCRkaXIpOworICAgICAgICRkaXIgICAgICAgPX4gc3wvKyR8fDsKKyAgICAgICAkcmVwb2RpciAgID1+IHN8LyskfHw7CisgICAgICAgJHJlbW90ZWRpciA9fiBzfC8rJHx8OworICAgICAgICRwYXJlbnQgICAgPX4gc3wvKyR8fDsKKyAgICAgICAkbG9nLT5kZWJ1ZygiYW5ub3VuY2VkaXIgJGRpciwgJHJlcG9kaXIsICRyZW1vdGVkaXIiICk7CisKKyAgICAgICBpZiAoJHBhcmVudCBlcSAnLicgfHwgJHBhcmVudCBlcSAnLi8nKSB7CisgICAgICAgICAgICRwYXJlbnQgPSAnJzsKKyAgICAgICB9CisgICAgICAgIyByZWN1cnNlIHRvIGFubm91bmNlIHVuc2VlbiBwYXJlbnRzIGZpcnN0CisgICAgICAgaWYgKGxlbmd0aCgkcGFyZW50KSAmJiAhZXhpc3RzKCRzZWVuZGlycy0+eyRwYXJlbnR9KSkgeworICAgICAgICAgICBwcmVwZGlyKCRwYXJlbnQsICRyZXBvZGlyLCAkcmVtb3RlZGlyLCAkc2VlbmRpcnMpOworICAgICAgIH0KKyAgICAgICAjIEFubm91bmNlIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG1vZGlmeSBhdCB0aGUgcGFyZW50IGxldmVsCisgICAgICAgaWYgKCRwYXJlbnQpIHsKKyAgICAgICAgICAgcHJpbnQgIkUgY3ZzIGNoZWNrb3V0OiBVcGRhdGluZyAkcmVtb3RlZGlyLyRwYXJlbnRcbiI7CisgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgcHJpbnQgIkUgY3ZzIGNoZWNrb3V0OiBVcGRhdGluZyAkcmVtb3RlZGlyXG4iOworICAgICAgIH0KKyAgICAgICBwcmludCAiQ2xlYXItc3RpY2t5ICRyZW1vdGVkaXIvJHBhcmVudC9cbiI7CisgICAgICAgcHJpbnQgIiRyZXBvZGlyLyRwYXJlbnQvXG4iOworCisgICAgICAgcHJpbnQgIkNsZWFyLXN0YXRpYy1kaXJlY3RvcnkgJHJlbW90ZWRpci8kZGlyL1xuIjsKKyAgICAgICBwcmludCAiJHJlcG9kaXIvJGRpci9cbiI7CisgICAgICAgcHJpbnQgIkNsZWFyLXN0aWNreSAkcmVtb3RlZGlyLyRwYXJlbnQvXG4iOyAjIHllcywgdHdpY2UKKyAgICAgICBwcmludCAiJHJlcG9kaXIvJHBhcmVudC9cbiI7CisgICAgICAgcHJpbnQgIlRlbXBsYXRlICRyZW1vdGVkaXIvJGRpci9cbiI7CisgICAgICAgcHJpbnQgIiRyZXBvZGlyLyRkaXIvXG4iOworICAgICAgIHByaW50ICIwXG4iOworCisgICAgICAgJHNlZW5kaXJzLT57JGRpcn0gPSAxOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJGdpdCAoIEB7JHVwZGF0ZXItPmdldGhlYWR9ICkKKyAgICB7CisgICAgICAgICMgRG9uJ3Qgd2FudCB0byBjaGVjayBvdXQgZGVsZXRlZCBmaWxlcworICAgICAgICBuZXh0IGlmICggJGdpdC0+e2ZpbGVoYXNofSBlcSAiZGVsZXRlZCIgKTsKKworICAgICAgICBteSAkZnVsbE5hbWUgPSAkZ2l0LT57bmFtZX07CisgICAgICAgICggJGdpdC0+e25hbWV9LCAkZ2l0LT57ZGlyfSApID0gZmlsZW5hbWVzcGxpdCgkZ2l0LT57bmFtZX0pOworCisgICAgICAgaWYgKGxlbmd0aCgkZ2l0LT57ZGlyfSkgJiYgJGdpdC0+e2Rpcn0gbmUgJy4vJworICAgICAgICAgICAmJiAkZ2l0LT57ZGlyfSBuZSAkbGFzdGRpciApIHsKKyAgICAgICAgICAgdW5sZXNzIChleGlzdHMoJHNlZW5kaXJzeyRnaXQtPntkaXJ9fSkpIHsKKyAgICAgICAgICAgICAgIHByZXBkaXIoJGdpdC0+e2Rpcn0sICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kbW9kdWxlLyIsCisgICAgICAgICAgICAgICAgICAgICAgICRjaGVja291dF9wYXRoLCBcJXNlZW5kaXJzKTsKKyAgICAgICAgICAgICAgICRsYXN0ZGlyID0gJGdpdC0+e2Rpcn07CisgICAgICAgICAgICAgICAkc2VlbmRpcnN7JGdpdC0+e2Rpcn19ID0gMTsKKyAgICAgICAgICAgfQorICAgICAgICAgICBwcmludCAiRSBjdnMgY2hlY2tvdXQ6IFVwZGF0aW5nIC8kY2hlY2tvdXRfcGF0aC8kZ2l0LT57ZGlyfVxuIjsKKyAgICAgICB9CisKKyAgICAgICAgIyBtb2RpZmljYXRpb24gdGltZSBvZiB0aGlzIGZpbGUKKyAgICAgICAgcHJpbnQgIk1vZC10aW1lICRnaXQtPnttb2RpZmllZH1cbiI7CisKKyAgICAgICAgIyBwcmludCBzb21lIGluZm9ybWF0aW9uIHRvIHRoZSBjbGllbnQKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJGdpdC0+e2Rpcn0gKSBhbmQgJGdpdC0+e2Rpcn0gbmUgIi4vIiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIFUgJGNoZWNrb3V0X3BhdGgvJGdpdC0+e2Rpcn0kZ2l0LT57bmFtZX1cbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludCAiTSBVICRjaGVja291dF9wYXRoLyRnaXQtPntuYW1lfVxuIjsKKyAgICAgICAgfQorCisgICAgICAgIyBpbnN0cnVjdCBjbGllbnQgd2UncmUgc2VuZGluZyBhIGZpbGUgdG8gcHV0IGluIHRoaXMgcGF0aAorICAgICAgIHByaW50ICJDcmVhdGVkICRjaGVja291dF9wYXRoLyIgLiAoIGRlZmluZWQgKCAkZ2l0LT57ZGlyfSApIGFuZCAkZ2l0LT57ZGlyfSBuZSAiLi8iID8gJGdpdC0+e2Rpcn0gLiAiLyIgOiAiIiApIC4gIlxuIjsKKworICAgICAgIHByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kbW9kdWxlLyIgLiAoIGRlZmluZWQgKCAkZ2l0LT57ZGlyfSApIGFuZCAkZ2l0LT57ZGlyfSBuZSAiLi8iID8gJGdpdC0+e2Rpcn0gLiAiLyIgOiAiIiApIC4gIiRnaXQtPntuYW1lfVxuIjsKKworICAgICAgICAjIHRoaXMgaXMgYW4gImVudHJpZXMiIGxpbmUKKyAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmdWxsTmFtZSwic2hhMSIsJGdpdC0+e2ZpbGVoYXNofSk7CisgICAgICAgIHByaW50ICIvJGdpdC0+e25hbWV9LzEuJGdpdC0+e3JldmlzaW9ufS8vJGtvcHRzL1xuIjsKKyAgICAgICAgIyBwZXJtaXNzaW9ucworICAgICAgICBwcmludCAidT0kZ2l0LT57bW9kZX0sZz0kZ2l0LT57bW9kZX0sbz0kZ2l0LT57bW9kZX1cbiI7CisKKyAgICAgICAgIyB0cmFuc21pdCBmaWxlCisgICAgICAgIHRyYW5zbWl0ZmlsZSgkZ2l0LT57ZmlsZWhhc2h9KTsKKyAgICB9CisKKyAgICBwcmludCAib2tcbiI7CisKKyAgICBzdGF0ZWNsZWFudXAoKTsKK30KKworIyB1cGRhdGUgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiB5ZXMuIEFjdHVhbGx5IGRvIGEgY3ZzIHVwZGF0ZSBjb21tYW5kLiBUaGlzIHVzZXMgYW55CisjICAgICBwcmV2aW91cyBBcmd1bWVudCwgRGlyZWN0b3J5LCBFbnRyeSwgb3IgTW9kaWZpZWQgcmVxdWVzdHMsIGlmIHRoZXkgaGF2ZQorIyAgICAgYmVlbiBzZW50LiBUaGUgbGFzdCBEaXJlY3Rvcnkgc2VudCBzcGVjaWZpZXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGF0IHRoZQorIyAgICAgdGltZSBvZiB0aGUgb3BlcmF0aW9uLiBUaGUgLUkgb3B0aW9uIGlzIG5vdCB1c2VkLS1maWxlcyB3aGljaCB0aGUgY2xpZW50CisjICAgICBjYW4gZGVjaWRlIHdoZXRoZXIgdG8gaWdub3JlIGFyZSBub3QgbWVudGlvbmVkIGFuZCB0aGUgY2xpZW50IHNlbmRzIHRoZQorIyAgICAgUXVlc3Rpb25hYmxlIHJlcXVlc3QgZm9yIG90aGVycy4KK3N1YiByZXFfdXBkYXRlCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX3VwZGF0ZSA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApKTsKKworICAgIGFyZ3NwbGl0KCJ1cGRhdGUiKTsKKworICAgICMKKyAgICAjIEl0IG1heSBqdXN0IGJlIGEgY2xpZW50IGV4cGxvcmluZyB0aGUgYXZhaWxhYmxlIGhlYWRzL21vZHVsZXMKKyAgICAjIGluIHRoYXQgY2FzZSwgbGlzdCB0aGVtIGFzIHRvcCBsZXZlbCBkaXJlY3RvcmllcyBhbmQgbGVhdmUgaXQKKyAgICAjIGF0IHRoYXQuIEVjbGlwc2UgdXNlcyB0aGlzIHRlY2huaXF1ZSB0byBvZmZlciB5b3UgYSBsaXN0IG9mCisgICAgIyBwcm9qZWN0cyAoaGVhZHMgaW4gdGhpcyBjYXNlKSB0byBjaGVja291dC4KKyAgICAjCisgICAgaWYgKCRzdGF0ZS0+e21vZHVsZX0gZXEgJycpIHsKKyAgICAgICAgbXkgJHNob3dyZWYgPSBgZ2l0IHNob3ctcmVmIC0taGVhZHNgOworICAgICAgICBwcmludCAiRSBjdnMgdXBkYXRlOiBVcGRhdGluZyAuXG4iOworICAgICAgICBmb3IgbXkgJGxpbmUgKHNwbGl0ICdcbicsICRzaG93cmVmKSB7CisgICAgICAgICAgICBpZiAoICRsaW5lID1+IG0lIHJlZnMvaGVhZHMvKC4qKSQlICkgeworICAgICAgICAgICAgICAgIHByaW50ICJFIGN2cyB1cGRhdGU6IE5ldyBkaXJlY3RvcnkgYCQxJ1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcmludCAib2tcbiI7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworCisgICAgJHVwZGF0ZXItPnVwZGF0ZSgpOworCisgICAgYXJnc2Zyb21kaXIoJHVwZGF0ZXIpOworCisgICAgIyRsb2ctPmRlYnVnKCJ1cGRhdGUgc3RhdGUgOiAiIC4gRHVtcGVyKCRzdGF0ZSkpOworCisgICAgbXkgJGxhc3RfZGlybmFtZSA9ICIvLy8iOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICAkZmlsZW5hbWUgPSBmaWxlY2xlYW51cCgkZmlsZW5hbWUpOworCisgICAgICAgICRsb2ctPmRlYnVnKCJQcm9jZXNzaW5nIGZpbGUgJGZpbGVuYW1lIik7CisKKyAgICAgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LVF9IHx8ICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9ey1xfSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG15ICRjdXJfZGlybmFtZSA9IGRpcm5hbWUoJGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGlmICggJGN1cl9kaXJuYW1lIG5lICRsYXN0X2Rpcm5hbWUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICRsYXN0X2Rpcm5hbWUgPSAkY3VyX2Rpcm5hbWU7CisgICAgICAgICAgICAgICAgaWYgKCAkY3VyX2Rpcm5hbWUgZXEgIiIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJGN1cl9kaXJuYW1lID0gIi4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmludCAiRSBjdnMgdXBkYXRlOiBVcGRhdGluZyAkY3VyX2Rpcm5hbWVcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjIGlmIHdlIGhhdmUgYSAtQyB3ZSBzaG91bGQgcHJldGVuZCB3ZSBuZXZlciBzYXcgbW9kaWZpZWQgc3R1ZmYKKyAgICAgICAgaWYgKCBleGlzdHMgKCAkc3RhdGUtPntvcHR9e0N9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9oYXNofTsKKyAgICAgICAgICAgIGRlbGV0ZSAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfTsKKyAgICAgICAgICAgICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17dW5jaGFuZ2VkfSA9IDE7CisgICAgICAgIH0KKworICAgICAgICBteSAkbWV0YTsKKyAgICAgICAgaWYgKCBkZWZpbmVkKCRzdGF0ZS0+e29wdH17cn0pIGFuZCAkc3RhdGUtPntvcHR9e3J9ID1+IC9eMVwuKFxkKykvICkKKyAgICAgICAgeworICAgICAgICAgICAgJG1ldGEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUsICQxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgICMgSWYgLXAgd2FzIGdpdmVuLCAicHJpbnQiIHRoZSBjb250ZW50cyBvZiB0aGUgcmVxdWVzdGVkIHJldmlzaW9uLgorICAgICAgICBpZiAoIGV4aXN0cyAoICRzdGF0ZS0+e29wdH17cH0gKSApIHsKKyAgICAgICAgICAgIGlmICggZGVmaW5lZCAoICRtZXRhLT57cmV2aXNpb259ICkgKSB7CisgICAgICAgICAgICAgICAgJGxvZy0+aW5mbygiUHJpbnRpbmcgJyRmaWxlbmFtZScgcmV2aXNpb24gIiAuICRtZXRhLT57cmV2aXNpb259KTsKKworICAgICAgICAgICAgICAgIHRyYW5zbWl0ZmlsZSgkbWV0YS0+e2ZpbGVoYXNofSwgeyBwcmludCA9PiAxIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKwlpZiAoICEgZGVmaW5lZCAkbWV0YSApCisJeworCSAgICAkbWV0YSA9IHsKKwkgICAgICAgIG5hbWUgPT4gJGZpbGVuYW1lLAorCSAgICAgICAgcmV2aXNpb24gPT4gMCwKKwkgICAgICAgIGZpbGVoYXNoID0+ICdhZGRlZCcKKwkgICAgfTsKKwl9CisKKyAgICAgICAgbXkgJG9sZG1ldGEgPSAkbWV0YTsKKworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKyAgICAgICAgIyBJZiB0aGUgd29ya2luZyBjb3B5IGlzIGFuIG9sZCByZXZpc2lvbiwgbGV0cyBnZXQgdGhhdCB2ZXJzaW9uIHRvbyBmb3IgY29tcGFyaXNvbi4KKyAgICAgICAgaWYgKCBkZWZpbmVkKCR3cmV2KSBhbmQgJHdyZXYgIT0gJG1ldGEtPntyZXZpc2lvbn0gKQorICAgICAgICB7CisgICAgICAgICAgICAkb2xkbWV0YSA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwgJHdyZXYpOworICAgICAgICB9CisKKyAgICAgICAgIyRsb2ctPmRlYnVnKCJUYXJnZXQgcmV2aXNpb24gaXMgJG1ldGEtPntyZXZpc2lvbn0sIGN1cnJlbnQgd29ya2luZyByZXZpc2lvbiBpcyAkd3JldiIpOworCisgICAgICAgICMgRmlsZXMgYXJlIHVwIHRvIGRhdGUgaWYgdGhlIHdvcmtpbmcgY29weSBhbmQgcmVwbyBjb3B5IGhhdmUgdGhlIHNhbWUgcmV2aXNpb24sCisgICAgICAgICMgYW5kIHRoZSB3b3JraW5nIGNvcHkgaXMgdW5tb2RpZmllZCBfYW5kXyB0aGUgdXNlciBoYXNuJ3Qgc3BlY2lmaWVkIC1DCisgICAgICAgIG5leHQgaWYgKCBkZWZpbmVkICggJHdyZXYgKQorICAgICAgICAgICAgICAgICAgYW5kIGRlZmluZWQoJG1ldGEtPntyZXZpc2lvbn0pCisgICAgICAgICAgICAgICAgICBhbmQgJHdyZXYgPT0gJG1ldGEtPntyZXZpc2lvbn0KKyAgICAgICAgICAgICAgICAgIGFuZCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3VuY2hhbmdlZH0KKyAgICAgICAgICAgICAgICAgIGFuZCBub3QgZXhpc3RzICggJHN0YXRlLT57b3B0fXtDfSApICk7CisKKyAgICAgICAgIyBJZiB0aGUgd29ya2luZyBjb3B5IGFuZCByZXBvIGNvcHkgaGF2ZSB0aGUgc2FtZSByZXZpc2lvbiwKKyAgICAgICAgIyBidXQgdGhlIHdvcmtpbmcgY29weSBpcyBtb2RpZmllZCwgdGVsbCB0aGUgY2xpZW50IGl0J3MgbW9kaWZpZWQKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHdyZXYgKQorICAgICAgICAgICAgIGFuZCBkZWZpbmVkKCRtZXRhLT57cmV2aXNpb259KQorICAgICAgICAgICAgIGFuZCAkd3JldiA9PSAkbWV0YS0+e3JldmlzaW9ufQorICAgICAgICAgICAgIGFuZCBkZWZpbmVkKCRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH0pCisgICAgICAgICAgICAgYW5kIG5vdCBleGlzdHMgKCAkc3RhdGUtPntvcHR9e0N9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT5pbmZvKCJUZWxsIHRoZSBjbGllbnQgdGhlIGZpbGUgaXMgbW9kaWZpZWQiKTsKKyAgICAgICAgICAgIHByaW50ICJNVCB0ZXh0IE0gXG4iOworICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgIHByaW50ICJNVCBuZXdsaW5lXG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggJG1ldGEtPntmaWxlaGFzaH0gZXEgImRlbGV0ZWQiICkKKyAgICAgICAgeworICAgICAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRmaWxlbmFtZSwxKTsKKworICAgICAgICAgICAgJGxvZy0+aW5mbygiUmVtb3ZpbmcgJyRmaWxlbmFtZScgZnJvbSB3b3JraW5nIGNvcHkgKG5vIGxvbmdlciBpbiB0aGUgcmVwbykiKTsKKworICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIHVwZGF0ZTogYCRmaWxlbmFtZScgaXMgbm8gbG9uZ2VyIGluIHRoZSByZXBvc2l0b3J5XG4iOworICAgICAgICAgICAgIyBEb24ndCB3YW50IHRvIGFjdHVhbGx5IF9ET18gdGhlIHVwZGF0ZSBpZiAtbiBzcGVjaWZpZWQKKyAgICAgICAgICAgIHVubGVzcyAoICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9ey1ufSApIHsKKwkJcHJpbnQgIlJlbW92ZWQgJGRpcnBhcnRcbiI7CisJCXByaW50ICIkZmlsZXBhcnRcbiI7CisJICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZiAoIG5vdCBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9oYXNofSApCisJCW9yICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH0gZXEgJG9sZG1ldGEtPntmaWxlaGFzaH0KKwkJb3IgJG1ldGEtPntmaWxlaGFzaH0gZXEgJ2FkZGVkJyApCisgICAgICAgIHsKKyAgICAgICAgICAgICMgbm9ybWFsIHVwZGF0ZSwganVzdCBzZW5kIHRoZSBuZXcgcmV2aXNpb24gKGVpdGhlciBVPVVwZGF0ZSwKKyAgICAgICAgICAgICMgb3IgQT1BZGQsIG9yIFI9UmVtb3ZlKQorCSAgICBpZiAoIGRlZmluZWQoJHdyZXYpICYmICR3cmV2IDwgMCApCisJICAgIHsKKwkgICAgICAgICRsb2ctPmluZm8oIlRlbGwgdGhlIGNsaWVudCB0aGUgZmlsZSBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwiKTsKKwkJcHJpbnQgIk1UIHRleHQgUiBcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgbmV3bGluZVxuIjsKKwkJbmV4dDsKKwkgICAgfQorCSAgICBlbHNpZiAoICghZGVmaW5lZCgkd3JldikgfHwgJHdyZXYgPT0gMCkgJiYgKCFkZWZpbmVkKCRtZXRhLT57cmV2aXNpb259KSB8fCAkbWV0YS0+e3JldmlzaW9ufSA9PSAwKSApCisJICAgIHsKKwkgICAgICAgICRsb2ctPmluZm8oIlRlbGwgdGhlIGNsaWVudCB0aGUgZmlsZSBpcyBzY2hlZHVsZWQgZm9yIGFkZGl0aW9uIik7CisJCXByaW50ICJNVCB0ZXh0IEEgXG4iOworICAgICAgICAgICAgICAgIHByaW50ICJNVCBmbmFtZSAkZmlsZW5hbWVcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk1UIG5ld2xpbmVcbiI7CisJCW5leHQ7CisKKwkgICAgfQorCSAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAkbG9nLT5pbmZvKCJVcGRhdGluZyAnJGZpbGVuYW1lJyB0byAiLiRtZXRhLT57cmV2aXNpb259KTsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgK3VwZGF0ZWRcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk1UIHRleHQgVSBcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgbmV3bGluZVxuIjsKKwkJcHJpbnQgIk1UIC11cGRhdGVkXG4iOworCSAgICB9CisKKyAgICAgICAgICAgIG15ICggJGZpbGVwYXJ0LCAkZGlycGFydCApID0gZmlsZW5hbWVzcGxpdCgkZmlsZW5hbWUsMSk7CisKKwkgICAgIyBEb24ndCB3YW50IHRvIGFjdHVhbGx5IF9ET18gdGhlIHVwZGF0ZSBpZiAtbiBzcGVjaWZpZWQKKwkgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkKKwkgICAgeworCQlpZiAoIGRlZmluZWQgKCAkd3JldiApICkKKwkJeworCQkgICAgIyBpbnN0cnVjdCBjbGllbnQgd2UncmUgc2VuZGluZyBhIGZpbGUgdG8gcHV0IGluIHRoaXMgcGF0aCBhcyBhIHJlcGxhY2VtZW50CisJCSAgICBwcmludCAiVXBkYXRlLWV4aXN0aW5nICRkaXJwYXJ0XG4iOworCQkgICAgJGxvZy0+ZGVidWcoIlVwZGF0aW5nIGV4aXN0aW5nIGZpbGUgJ1VwZGF0ZS1leGlzdGluZyAkZGlycGFydCciKTsKKwkJfSBlbHNlIHsKKwkJICAgICMgaW5zdHJ1Y3QgY2xpZW50IHdlJ3JlIHNlbmRpbmcgYSBmaWxlIHRvIHB1dCBpbiB0aGlzIHBhdGggYXMgYSBuZXcgZmlsZQorCQkgICAgcHJpbnQgIkNsZWFyLXN0YXRpYy1kaXJlY3RvcnkgJGRpcnBhcnRcbiI7CisJCSAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZGlycGFydFxuIjsKKwkJICAgIHByaW50ICJDbGVhci1zdGlja3kgJGRpcnBhcnRcbiI7CisJCSAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZGlycGFydFxuIjsKKworCQkgICAgJGxvZy0+ZGVidWcoIkNyZWF0aW5nIG5ldyBmaWxlICdDcmVhdGVkICRkaXJwYXJ0JyIpOworCQkgICAgcHJpbnQgIkNyZWF0ZWQgJGRpcnBhcnRcbiI7CisJCX0KKwkJcHJpbnQgJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRzdGF0ZS0+e21vZHVsZX0vJGZpbGVuYW1lXG4iOworCisJCSMgdGhpcyBpcyBhbiAiZW50cmllcyIgbGluZQorCQlteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVuYW1lLCJzaGExIiwkbWV0YS0+e2ZpbGVoYXNofSk7CisJCSRsb2ctPmRlYnVnKCIvJGZpbGVwYXJ0LzEuJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy8iKTsKKwkJcHJpbnQgIi8kZmlsZXBhcnQvMS4kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzL1xuIjsKKworCQkjIHBlcm1pc3Npb25zCisJCSRsb2ctPmRlYnVnKCJTRU5EIDogdT0kbWV0YS0+e21vZGV9LGc9JG1ldGEtPnttb2RlfSxvPSRtZXRhLT57bW9kZX0iKTsKKwkJcHJpbnQgInU9JG1ldGEtPnttb2RlfSxnPSRtZXRhLT57bW9kZX0sbz0kbWV0YS0+e21vZGV9XG4iOworCisJCSMgdHJhbnNtaXQgZmlsZQorCQl0cmFuc21pdGZpbGUoJG1ldGEtPntmaWxlaGFzaH0pOworCSAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkbG9nLT5pbmZvKCJVcGRhdGluZyAnJGZpbGVuYW1lJyIpOworICAgICAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRtZXRhLT57bmFtZX0sMSk7CisKKyAgICAgICAgICAgIG15ICRtZXJnZURpciA9IHNldHVwVG1wRGlyKCk7CisKKyAgICAgICAgICAgIG15ICRmaWxlX2xvY2FsID0gJGZpbGVwYXJ0IC4gIi5taW5lIjsKKyAgICAgICAgICAgIG15ICRtZXJnZWRGaWxlID0gIiRtZXJnZURpci8kZmlsZV9sb2NhbCI7CisgICAgICAgICAgICBzeXN0ZW0oImxuIiwiLXMiLCRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9LCAkZmlsZV9sb2NhbCk7CisgICAgICAgICAgICBteSAkZmlsZV9vbGQgPSAkZmlsZXBhcnQgLiAiLiIgLiAkb2xkbWV0YS0+e3JldmlzaW9ufTsKKyAgICAgICAgICAgIHRyYW5zbWl0ZmlsZSgkb2xkbWV0YS0+e2ZpbGVoYXNofSwgeyB0YXJnZXRmaWxlID0+ICRmaWxlX29sZCB9KTsKKyAgICAgICAgICAgIG15ICRmaWxlX25ldyA9ICRmaWxlcGFydCAuICIuIiAuICRtZXRhLT57cmV2aXNpb259OworICAgICAgICAgICAgdHJhbnNtaXRmaWxlKCRtZXRhLT57ZmlsZWhhc2h9LCB7IHRhcmdldGZpbGUgPT4gJGZpbGVfbmV3IH0pOworCisgICAgICAgICAgICAjIHdlIG5lZWQgdG8gbWVyZ2Ugd2l0aCB0aGUgbG9jYWwgY2hhbmdlcyAoIE09c3VjY2Vzc2Z1bCBtZXJnZSwgQz1jb25mbGljdCBtZXJnZSApCisgICAgICAgICAgICAkbG9nLT5pbmZvKCJNZXJnaW5nICRmaWxlX2xvY2FsLCAkZmlsZV9vbGQsICRmaWxlX25ldyIpOworICAgICAgICAgICAgcHJpbnQgIk0gTWVyZ2luZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIDEuJG9sZG1ldGEtPntyZXZpc2lvbn0gYW5kIDEuJG1ldGEtPntyZXZpc2lvbn0gaW50byAkZmlsZW5hbWVcbiI7CisKKyAgICAgICAgICAgICRsb2ctPmRlYnVnKCJUZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBtZXJnZSBpcyAkbWVyZ2VEaXIiKTsKKworICAgICAgICAgICAgbXkgJHJldHVybiA9IHN5c3RlbSgiZ2l0IiwgIm1lcmdlLWZpbGUiLCAkZmlsZV9sb2NhbCwgJGZpbGVfb2xkLCAkZmlsZV9uZXcpOworICAgICAgICAgICAgJHJldHVybiA+Pj0gODsKKworICAgICAgICAgICAgY2xlYW51cFRtcERpcigpOworCisgICAgICAgICAgICBpZiAoICRyZXR1cm4gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJGxvZy0+aW5mbygiTWVyZ2VkIHN1Y2Nlc3NmdWxseSIpOworICAgICAgICAgICAgICAgIHByaW50ICJNIE0gJGZpbGVuYW1lXG4iOworICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCJNZXJnZWQgJGRpcnBhcnQiKTsKKworICAgICAgICAgICAgICAgICMgRG9uJ3Qgd2FudCB0byBhY3R1YWxseSBfRE9fIHRoZSB1cGRhdGUgaWYgLW4gc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJNZXJnZWQgJGRpcnBhcnRcbiI7CisgICAgICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZSIpOworICAgICAgICAgICAgICAgICAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWVcbiI7CisgICAgICAgICAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgiJGRpcnBhcnQvJGZpbGVwYXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiwkbWVyZ2VkRmlsZSk7CisgICAgICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCIvJGZpbGVwYXJ0LzEuJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy8iKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIi8kZmlsZXBhcnQvMS4kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzL1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNpZiAoICRyZXR1cm4gPT0gMSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJGxvZy0+aW5mbygiTWVyZ2VkIHdpdGggY29uZmxpY3RzIik7CisgICAgICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIHVwZGF0ZTogY29uZmxpY3RzIGZvdW5kIGluICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgICAgICBwcmludCAiTSBDICRmaWxlbmFtZVxuIjsKKworICAgICAgICAgICAgICAgICMgRG9uJ3Qgd2FudCB0byBhY3R1YWxseSBfRE9fIHRoZSB1cGRhdGUgaWYgLW4gc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJNZXJnZWQgJGRpcnBhcnRcbiI7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCIkZGlycGFydC8kZmlsZXBhcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiLCRtZXJnZWRGaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIi8kZmlsZXBhcnQvMS4kbWV0YS0+e3JldmlzaW9ufS8rLyRrb3B0cy9cbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICRsb2ctPndhcm4oIk1lcmdlIGZhaWxlZCIpOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICMgRG9uJ3Qgd2FudCB0byBhY3R1YWxseSBfRE9fIHRoZSB1cGRhdGUgaWYgLW4gc3BlY2lmaWVkCisgICAgICAgICAgICB1bmxlc3MgKCAkc3RhdGUtPntnbG9iYWxvcHRpb25zfXstbn0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICMgcGVybWlzc2lvbnMKKyAgICAgICAgICAgICAgICAkbG9nLT5kZWJ1ZygiU0VORCA6IHU9JG1ldGEtPnttb2RlfSxnPSRtZXRhLT57bW9kZX0sbz0kbWV0YS0+e21vZGV9Iik7CisgICAgICAgICAgICAgICAgcHJpbnQgInU9JG1ldGEtPnttb2RlfSxnPSRtZXRhLT57bW9kZX0sbz0kbWV0YS0+e21vZGV9XG4iOworCisgICAgICAgICAgICAgICAgIyB0cmFuc21pdCBmaWxlLCBmb3JtYXQgaXMgc2luZ2xlIGludGVnZXIgb24gYSBsaW5lIGJ5IGl0c2VsZiAoZmlsZQorICAgICAgICAgICAgICAgICMgc2l6ZSkgZm9sbG93ZWQgYnkgdGhlIGZpbGUgY29udGVudHMKKyAgICAgICAgICAgICAgICAjIFRPRE8gOiB3ZSBzaG91bGQgY29weSBmaWxlcyBpbiBibG9ja3MKKyAgICAgICAgICAgICAgICBteSAkZGF0YSA9IGBjYXQgJG1lcmdlZEZpbGVgOworICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCJGaWxlIHNpemUgOiAiIC4gbGVuZ3RoKCRkYXRhKSk7CisgICAgICAgICAgICAgICAgcHJpbnQgbGVuZ3RoKCRkYXRhKSAuICJcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgJGRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKworICAgIHByaW50ICJva1xuIjsKK30KKworc3ViIHJlcV9jaQoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgYXJnc3BsaXQoImNpIik7CisKKyAgICAjJGxvZy0+ZGVidWcoIlN0YXRlIDogIiAuIER1bXBlcigkc3RhdGUpKTsKKworICAgICRsb2ctPmluZm8oInJlcV9jaSA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApKTsKKworICAgIGlmICggJHN0YXRlLT57bWV0aG9kfSBlcSAncHNlcnZlcicgYW5kICRzdGF0ZS0+e3VzZXJ9IGVxICdhbm9ueW1vdXMnICkKKyAgICB7CisgICAgICAgIHByaW50ICJlcnJvciAxIGFub255bW91cyB1c2VyIGNhbm5vdCBjb21taXQgdmlhIHBzZXJ2ZXJcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKworICAgIGlmICggLWUgJHN0YXRlLT57Q1ZTUk9PVH0gLiAiL2luZGV4IiApCisgICAgeworICAgICAgICAkbG9nLT53YXJuKCJmaWxlICdpbmRleCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGdpdCByZXBvc2l0b3J5Iik7CisgICAgICAgIHByaW50ICJlcnJvciAxIEluZGV4IGFscmVhZHkgZXhpc3RzIGluIGdpdCByZXBvXG4iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgZXhpdDsKKyAgICB9CisKKyAgICAjIEdyYWIgYSBoYW5kbGUgdG8gdGhlIFNRTGl0ZSBkYiBhbmQgZG8gYW55IG5lY2Vzc2FyeSB1cGRhdGVzCisgICAgbXkgJHVwZGF0ZXIgPSBHSVRDVlM6OnVwZGF0ZXItPm5ldygkc3RhdGUtPntDVlNST09UfSwgJHN0YXRlLT57bW9kdWxlfSwgJGxvZyk7CisgICAgJHVwZGF0ZXItPnVwZGF0ZSgpOworCisgICAgIyBSZW1lbWJlciB3aGVyZSB0aGUgaGVhZCB3YXMgYXQgdGhlIGJlZ2lubmluZy4KKyAgICBteSAkcGFyZW50aGFzaCA9IGBnaXQgc2hvdy1yZWYgLXMgcmVmcy9oZWFkcy8kc3RhdGUtPnttb2R1bGV9YDsKKyAgICBjaG9tcCAkcGFyZW50aGFzaDsKKyAgICBpZiAoJHBhcmVudGhhc2ggIX4gL15bMC05YS1mXXs0MH0kLykgeworCSAgICBwcmludCAiZXJyb3IgMSBwc2VydmVyIGNhbm5vdCBmaW5kIHRoZSBjdXJyZW50IEhFQUQgb2YgbW9kdWxlIjsKKwkgICAgY2xlYW51cFdvcmtUcmVlKCk7CisJICAgIGV4aXQ7CisgICAgfQorCisgICAgc2V0dXBXb3JrVHJlZSgkcGFyZW50aGFzaCk7CisKKyAgICAkbG9nLT5pbmZvKCJMb2NrbGVzcyBjb21taXQgc3RhcnQsIGJhc2luZyBjb21taXQgb24gJyR3b3JrLT57d29ya0Rpcn0nLCBpbmRleCBmaWxlIGlzICckd29yay0+e2luZGV4fSciKTsKKworICAgICRsb2ctPmluZm8oIkNyZWF0ZWQgaW5kZXggJyR3b3JrLT57aW5kZXh9JyBmb3IgaGVhZCAkc3RhdGUtPnttb2R1bGV9IC0gZXhpdCBzdGF0dXMgJD8iKTsKKworICAgIG15IEBjb21taXR0ZWRmaWxlcyA9ICgpOworICAgIG15ICVvbGRtZXRhOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICBteSAkY29tbWl0dGVkZmlsZSA9ICRmaWxlbmFtZTsKKyAgICAgICAgJGZpbGVuYW1lID0gZmlsZWNsZWFudXAoJGZpbGVuYW1lKTsKKworICAgICAgICBuZXh0IHVubGVzcyAoIGV4aXN0cyAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSBvciBub3QgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXt1bmNoYW5nZWR9ICk7CisKKyAgICAgICAgbXkgJG1ldGEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUpOworCSRvbGRtZXRheyRmaWxlbmFtZX0gPSAkbWV0YTsKKworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRmaWxlbmFtZSk7CisKKwkjIGRvIGEgY2hlY2tvdXQgb2YgdGhlIGZpbGUgaWYgaXQgaXMgcGFydCBvZiB0aGlzIHRyZWUKKyAgICAgICAgaWYgKCR3cmV2KSB7CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdCcsICdjaGVja291dC1pbmRleCcsICctZicsICctdScsICRmaWxlbmFtZSk7CisgICAgICAgICAgICB1bmxlc3MgKCQ/ID09IDApIHsKKyAgICAgICAgICAgICAgICBkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0LWNoZWNrb3V0LWluZGV4IC1mIC11ICRmaWxlbmFtZSA6ICQhIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG15ICRhZGRmbGFnID0gMDsKKyAgICAgICAgbXkgJHJtZmxhZyA9IDA7CisgICAgICAgICRybWZsYWcgPSAxIGlmICggZGVmaW5lZCgkd3JldikgYW5kICR3cmV2IDwgMCApOworICAgICAgICAkYWRkZmxhZyA9IDEgdW5sZXNzICggLWUgJGZpbGVuYW1lICk7CisKKyAgICAgICAgIyBEbyB1cCB0byBkYXRlIGNoZWNraW5nCisgICAgICAgIHVubGVzcyAoICRhZGRmbGFnIG9yICR3cmV2ID09ICRtZXRhLT57cmV2aXNpb259IG9yICggJHJtZmxhZyBhbmQgLSR3cmV2ID09ICRtZXRhLT57cmV2aXNpb259ICkgKQorICAgICAgICB7CisgICAgICAgICAgICAjIGZhaWwgZXZlcnl0aGluZyBpZiBhbiB1cCB0byBkYXRlIGNoZWNrIGZhaWxzCisgICAgICAgICAgICBwcmludCAiZXJyb3IgMSBVcCB0byBkYXRlIGNoZWNrIGZhaWxlZCBmb3IgJGZpbGVuYW1lXG4iOworICAgICAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgICAgICBleGl0OworICAgICAgICB9CisKKyAgICAgICAgcHVzaCBAY29tbWl0dGVkZmlsZXMsICRjb21taXR0ZWRmaWxlOworICAgICAgICAkbG9nLT5pbmZvKCJDb21taXR0aW5nICRmaWxlbmFtZSIpOworCisgICAgICAgIHN5c3RlbSgibWtkaXIiLCItcCIsJGRpcnBhcnQpIHVubGVzcyAoIC1kICRkaXJwYXJ0ICk7CisKKyAgICAgICAgdW5sZXNzICggJHJtZmxhZyApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmRlYnVnKCJyZW5hbWUgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0gJGZpbGVuYW1lIik7CisgICAgICAgICAgICByZW5hbWUgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0sJGZpbGVuYW1lOworCisgICAgICAgICAgICAjIENhbGN1bGF0ZSBtb2RlcyB0byByZW1vdmUKKyAgICAgICAgICAgIG15ICRpbnZtb2RlID0gIiI7CisgICAgICAgICAgICBmb3JlYWNoICggcXcgKHIgdyB4KSApIHsgJGludm1vZGUgLj0gJF8gdW5sZXNzICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9tb2RlfSA9fiAvJF8vICk7IH0KKworICAgICAgICAgICAgJGxvZy0+ZGVidWcoImNobW9kIHUrIiAuICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfbW9kZX0gLiAiLSIgLiAkaW52bW9kZSAuICIgJGZpbGVuYW1lIik7CisgICAgICAgICAgICBzeXN0ZW0oImNobW9kIiwidSsiIC4gICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfbW9kZX0gLiAiLSIgLiAkaW52bW9kZSwgJGZpbGVuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggJHJtZmxhZyApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmluZm8oIlJlbW92aW5nIGZpbGUgJyRmaWxlbmFtZSciKTsKKyAgICAgICAgICAgIHVubGluaygkZmlsZW5hbWUpOworICAgICAgICAgICAgc3lzdGVtKCJnaXQiLCAidXBkYXRlLWluZGV4IiwgIi0tcmVtb3ZlIiwgJGZpbGVuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiAoICRhZGRmbGFnICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+aW5mbygiQWRkaW5nIGZpbGUgJyRmaWxlbmFtZSciKTsKKyAgICAgICAgICAgIHN5c3RlbSgiZ2l0IiwgInVwZGF0ZS1pbmRleCIsICItLWFkZCIsICRmaWxlbmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkbG9nLT5pbmZvKCJVcGRhdGluZyBmaWxlICckZmlsZW5hbWUnIik7CisgICAgICAgICAgICBzeXN0ZW0oImdpdCIsICJ1cGRhdGUtaW5kZXgiLCAkZmlsZW5hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgdW5sZXNzICggc2NhbGFyKEBjb21taXR0ZWRmaWxlcykgPiAwICkKKyAgICB7CisgICAgICAgIHByaW50ICJFIE5vIGZpbGVzIHRvIGNvbW1pdFxuIjsKKyAgICAgICAgcHJpbnQgIm9rXG4iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG15ICR0cmVlaGFzaCA9IGBnaXQgd3JpdGUtdHJlZWA7CisgICAgY2hvbXAgJHRyZWVoYXNoOworCisgICAgJGxvZy0+ZGVidWcoIlRyZWVoYXNoIDogJHRyZWVoYXNoLCBQYXJlbnRoYXNoIDogJHBhcmVudGhhc2giKTsKKworICAgICMgd3JpdGUgb3VyIGNvbW1pdCBtZXNzYWdlIG91dCBpZiB3ZSBoYXZlIG9uZSAuLi4KKyAgICBteSAoICRtc2dfZmgsICRtc2dfZmlsZW5hbWUgKSA9IHRlbXBmaWxlKCBESVIgPT4gJFRFTVBfRElSICk7CisgICAgcHJpbnQgJG1zZ19maCAkc3RhdGUtPntvcHR9e219OyMgaWYgKCBleGlzdHMgKCAkc3RhdGUtPntvcHR9e219ICkgKTsKKyAgICBpZiAoIGRlZmluZWQgKCAkY2ZnLT57Z2l0Y3ZzfXtjb21taXRtc2dhbm5vdGF0aW9ufSApICkgeworICAgICAgICBpZiAoJGNmZy0+e2dpdGN2c317Y29tbWl0bXNnYW5ub3RhdGlvbn0gIX4gL15ccyokLyApIHsKKyAgICAgICAgICAgIHByaW50ICRtc2dfZmggIlxuXG4iLiRjZmctPntnaXRjdnN9e2NvbW1pdG1zZ2Fubm90YXRpb259LiJcbiIKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ICRtc2dfZmggIlxuXG52aWEgZ2l0LUNWUyBlbXVsYXRvclxuIjsKKyAgICB9CisgICAgY2xvc2UgJG1zZ19maDsKKworICAgIG15ICRjb21taXRoYXNoID0gYGdpdCBjb21taXQtdHJlZSAkdHJlZWhhc2ggLXAgJHBhcmVudGhhc2ggPCAkbXNnX2ZpbGVuYW1lYDsKKyAgICBjaG9tcCgkY29tbWl0aGFzaCk7CisgICAgJGxvZy0+aW5mbygiQ29tbWl0IGhhc2ggOiAkY29tbWl0aGFzaCIpOworCisgICAgdW5sZXNzICggJGNvbW1pdGhhc2ggPX4gL1thLXpBLVowLTldezQwfS8gKQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiQ29tbWl0IGZhaWxlZCAoSW52YWxpZCBjb21taXQgaGFzaCkiKTsKKyAgICAgICAgcHJpbnQgImVycm9yIDEgQ29tbWl0IGZhaWxlZCAodW5rbm93biByZWFzb24pXG4iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgZXhpdDsKKyAgICB9CisKKwkjIyMgRW11bGF0ZSBnaXQtcmVjZWl2ZS1wYWNrIGJ5IHJ1bm5pbmcgaG9va3MvdXBkYXRlCisJbXkgQGhvb2sgPSAoICRFTlZ7R0lUX0RJUn0uJ2hvb2tzL3VwZGF0ZScsICJyZWZzL2hlYWRzLyRzdGF0ZS0+e21vZHVsZX0iLAorCQkJJHBhcmVudGhhc2gsICRjb21taXRoYXNoICk7CisJaWYoIC14ICRob29rWzBdICkgeworCQl1bmxlc3MoIHN5c3RlbSggQGhvb2sgKSA9PSAwICkKKwkJeworCQkJJGxvZy0+d2FybigiQ29tbWl0IGZhaWxlZCAodXBkYXRlIGhvb2sgZGVjbGluZWQgdG8gdXBkYXRlIHJlZikiKTsKKwkJCXByaW50ICJlcnJvciAxIENvbW1pdCBmYWlsZWQgKHVwZGF0ZSBob29rIGRlY2xpbmVkKVxuIjsKKwkJCWNsZWFudXBXb3JrVHJlZSgpOworCQkJZXhpdDsKKwkJfQorCX0KKworCSMjIyBVcGRhdGUgdGhlIHJlZgorCWlmIChzeXN0ZW0ocXcoZ2l0IHVwZGF0ZS1yZWYgLW0pLCAiY3Zzc2VydmVyIGNpIiwKKwkJCSJyZWZzL2hlYWRzLyRzdGF0ZS0+e21vZHVsZX0iLCAkY29tbWl0aGFzaCwgJHBhcmVudGhhc2gpKSB7CisJCSRsb2ctPndhcm4oInVwZGF0ZS1yZWYgZm9yICRzdGF0ZS0+e21vZHVsZX0gZmFpbGVkLiIpOworCQlwcmludCAiZXJyb3IgMSBDYW5ub3QgY29tbWl0IC0tIHVwZGF0ZSBmaXJzdFxuIjsKKwkJY2xlYW51cFdvcmtUcmVlKCk7CisJCWV4aXQ7CisJfQorCisJIyMjIEVtdWxhdGUgZ2l0LXJlY2VpdmUtcGFjayBieSBydW5uaW5nIGhvb2tzL3Bvc3QtcmVjZWl2ZQorCW15ICRob29rID0gJEVOVntHSVRfRElSfS4naG9va3MvcG9zdC1yZWNlaXZlJzsKKwlpZiggLXggJGhvb2sgKSB7CisJCW9wZW4obXkgJHBpcGUsICJ8ICRob29rIikgfHwgZGllICJjYW4ndCBmb3JrICQhIjsKKworCQlsb2NhbCAkU0lHe1BJUEV9ID0gc3ViIHsgZGllICdwaXBlIGJyb2tlJyB9OworCisJCXByaW50ICRwaXBlICIkcGFyZW50aGFzaCAkY29tbWl0aGFzaCByZWZzL2hlYWRzLyRzdGF0ZS0+e21vZHVsZX1cbiI7CisKKwkJY2xvc2UgJHBpcGUgfHwgZGllICJiYWQgcGlwZTogJCEgJD8iOworCX0KKworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworCSMjIyBUaGVuIGhvb2tzL3Bvc3QtdXBkYXRlCisJJGhvb2sgPSAkRU5We0dJVF9ESVJ9Lidob29rcy9wb3N0LXVwZGF0ZSc7CisJaWYgKC14ICRob29rKSB7CisJCXN5c3RlbSgkaG9vaywgInJlZnMvaGVhZHMvJHN0YXRlLT57bW9kdWxlfSIpOworCX0KKworICAgICMgZm9yZWFjaCBmaWxlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIC4uLgorICAgIGZvcmVhY2ggbXkgJGZpbGVuYW1lICggQGNvbW1pdHRlZGZpbGVzICkKKyAgICB7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbXkgJG1ldGEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUpOworCXVubGVzcyAoZGVmaW5lZCAkbWV0YS0+e3JldmlzaW9ufSkgeworCSAgJG1ldGEtPntyZXZpc2lvbn0gPSAxOworCX0KKworICAgICAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lLCAxKTsKKworICAgICAgICAkbG9nLT5kZWJ1ZygiQ2hlY2tlZC1pbiAkZGlycGFydCA6ICRmaWxlbmFtZSIpOworCisJcHJpbnQgIk0gJHN0YXRlLT57Q1ZTUk9PVH0vJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWUsdiAgPC0tICAkZGlycGFydCRmaWxlcGFydFxuIjsKKyAgICAgICAgaWYgKCBkZWZpbmVkICRtZXRhLT57ZmlsZWhhc2h9ICYmICRtZXRhLT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIG5ldyByZXZpc2lvbjogZGVsZXRlOyBwcmV2aW91cyByZXZpc2lvbjogMS4kb2xkbWV0YXskZmlsZW5hbWV9e3JldmlzaW9ufVxuIjsKKyAgICAgICAgICAgIHByaW50ICJSZW1vdmUtZW50cnkgJGRpcnBhcnRcbiI7CisgICAgICAgICAgICBwcmludCAiJGZpbGVuYW1lXG4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCRtZXRhLT57cmV2aXNpb259ID09IDEpIHsKKwkgICAgICAgIHByaW50ICJNIGluaXRpYWwgcmV2aXNpb246IDEuMVxuIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICBwcmludCAiTSBuZXcgcmV2aXNpb246IDEuJG1ldGEtPntyZXZpc2lvbn07IHByZXZpb3VzIHJldmlzaW9uOiAxLiRvbGRtZXRheyRmaWxlbmFtZX17cmV2aXNpb259XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnQgIkNoZWNrZWQtaW4gJGRpcnBhcnRcbiI7CisgICAgICAgICAgICBwcmludCAiJGZpbGVuYW1lXG4iOworICAgICAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlbmFtZSwic2hhMSIsJG1ldGEtPntmaWxlaGFzaH0pOworICAgICAgICAgICAgcHJpbnQgIi8kZmlsZXBhcnQvMS4kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzL1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgIHByaW50ICJva1xuIjsKK30KKworc3ViIHJlcV9zdGF0dXMKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJzdGF0dXMiKTsKKworICAgICRsb2ctPmluZm8oInJlcV9zdGF0dXMgOiAiIC4gKCBkZWZpbmVkKCRkYXRhKSA/ICRkYXRhIDogIltOVUxMXSIgKSk7CisgICAgIyRsb2ctPmRlYnVnKCJzdGF0dXMgc3RhdGUgOiAiIC4gRHVtcGVyKCRzdGF0ZSkpOworCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgICMgaWYgbm8gZmlsZXMgd2VyZSBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gd29yayBvdXQgd2hhdCBmaWxlcyB3ZSBzaG91bGQgYmUgcHJvdmlkaW5nIHN0YXR1cyBvbiAuLi4KKyAgICBhcmdzZnJvbWRpcigkdXBkYXRlcik7CisKKyAgICAjIGZvcmVhY2ggZmlsZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAuLi4KKyAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKKyAgICB7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbmV4dCBpZiBleGlzdHMoJHN0YXRlLT57b3B0fXtsfSkgJiYgaW5kZXgoJGZpbGVuYW1lLCAnLycsIGxlbmd0aCgkc3RhdGUtPntwcmVwZW5kZGlyfSkpID49IDA7CisKKyAgICAgICAgbXkgJG1ldGEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUpOworICAgICAgICBteSAkb2xkbWV0YSA9ICRtZXRhOworCisgICAgICAgIG15ICR3cmV2ID0gcmV2cGFyc2UoJGZpbGVuYW1lKTsKKworICAgICAgICAjIElmIHRoZSB3b3JraW5nIGNvcHkgaXMgYW4gb2xkIHJldmlzaW9uLCBsZXRzIGdldCB0aGF0IHZlcnNpb24gdG9vIGZvciBjb21wYXJpc29uLgorICAgICAgICBpZiAoIGRlZmluZWQoJHdyZXYpIGFuZCAkd3JldiAhPSAkbWV0YS0+e3JldmlzaW9ufSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRvbGRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkd3Jldik7CisgICAgICAgIH0KKworICAgICAgICAjIFRPRE8gOiBBbGwgcG9zc2libGUgc3RhdHVzZXMgYXJlbid0IHlldCBpbXBsZW1lbnRlZAorICAgICAgICBteSAkc3RhdHVzOworICAgICAgICAjIEZpbGVzIGFyZSB1cCB0byBkYXRlIGlmIHRoZSB3b3JraW5nIGNvcHkgYW5kIHJlcG8gY29weSBoYXZlIHRoZSBzYW1lIHJldmlzaW9uLCBhbmQgdGhlIHdvcmtpbmcgY29weSBpcyB1bm1vZGlmaWVkCisgICAgICAgICRzdGF0dXMgPSAiVXAtdG8tZGF0ZSIgaWYgKCBkZWZpbmVkICggJHdyZXYgKSBhbmQgZGVmaW5lZCgkbWV0YS0+e3JldmlzaW9ufSkgYW5kICR3cmV2ID09ICRtZXRhLT57cmV2aXNpb259CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3VuY2hhbmdlZH0gYW5kICggbm90IGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e2NvbmZsaWN0fSApIG9yICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17Y29uZmxpY3R9ICF+IC9eXCs9LyApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCBkZWZpbmVkKCRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH0pIGFuZCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2hhc2h9IGVxICRtZXRhLT57ZmlsZWhhc2h9ICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICMgTmVlZCBjaGVja291dCBpZiB0aGUgd29ya2luZyBjb3B5IGhhcyBhbiBvbGRlciByZXZpc2lvbiB0aGFuIHRoZSByZXBvIGNvcHksIGFuZCB0aGUgd29ya2luZyBjb3B5IGlzIHVubW9kaWZpZWQKKyAgICAgICAgJHN0YXR1cyB8fD0gIk5lZWRzIENoZWNrb3V0IiBpZiAoIGRlZmluZWQgKCAkd3JldiApIGFuZCBkZWZpbmVkICggJG1ldGEtPntyZXZpc2lvbn0gKSBhbmQgJG1ldGEtPntyZXZpc2lvbn0gPiAkd3JldgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17dW5jaGFuZ2VkfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAoIGRlZmluZWQoJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9oYXNofSkgYW5kICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH0gZXEgJG9sZG1ldGEtPntmaWxlaGFzaH0gKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAjIE5lZWQgY2hlY2tvdXQgaWYgaXQgZXhpc3RzIGluIHRoZSByZXBvIGJ1dCBkb2Vzbid0IGhhdmUgYSB3b3JraW5nIGNvcHkKKyAgICAgICAgJHN0YXR1cyB8fD0gIk5lZWRzIENoZWNrb3V0IiBpZiAoIG5vdCBkZWZpbmVkICggJHdyZXYgKSBhbmQgZGVmaW5lZCAoICRtZXRhLT57cmV2aXNpb259ICkgKTsKKworICAgICAgICAjIExvY2FsbHkgbW9kaWZpZWQgaWYgd29ya2luZyBjb3B5IGFuZCByZXBvIGNvcHkgaGF2ZSB0aGUgc2FtZSByZXZpc2lvbiBidXQgdGhlcmUgYXJlIGxvY2FsIGNoYW5nZXMKKyAgICAgICAgJHN0YXR1cyB8fD0gIkxvY2FsbHkgTW9kaWZpZWQiIGlmICggZGVmaW5lZCAoICR3cmV2ICkgYW5kIGRlZmluZWQoJG1ldGEtPntyZXZpc2lvbn0pIGFuZCAkd3JldiA9PSAkbWV0YS0+e3JldmlzaW9ufSBhbmQgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0gKTsKKworICAgICAgICAjIE5lZWRzIE1lcmdlIGlmIHdvcmtpbmcgY29weSByZXZpc2lvbiBpcyBsZXNzIHRoYW4gcmVwbyBjb3B5IGFuZCB0aGVyZSBhcmUgbG9jYWwgY2hhbmdlcworICAgICAgICAkc3RhdHVzIHx8PSAiTmVlZHMgTWVyZ2UiIGlmICggZGVmaW5lZCAoICR3cmV2ICkgYW5kIGRlZmluZWQgKCAkbWV0YS0+e3JldmlzaW9ufSApIGFuZCAkbWV0YS0+e3JldmlzaW9ufSA+ICR3cmV2IGFuZCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSApOworCisgICAgICAgICRzdGF0dXMgfHw9ICJMb2NhbGx5IEFkZGVkIiBpZiAoIGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3JldmlzaW9ufSApIGFuZCBub3QgZGVmaW5lZCAoICRtZXRhLT57cmV2aXNpb259ICkgKTsKKyAgICAgICAgJHN0YXR1cyB8fD0gIkxvY2FsbHkgUmVtb3ZlZCIgaWYgKCBkZWZpbmVkICggJHdyZXYgKSBhbmQgZGVmaW5lZCAoICRtZXRhLT57cmV2aXNpb259ICkgYW5kIC0kd3JldiA9PSAkbWV0YS0+e3JldmlzaW9ufSApOworICAgICAgICAkc3RhdHVzIHx8PSAiVW5yZXNvbHZlZCBDb25mbGljdCIgaWYgKCBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtjb25mbGljdH0gKSBhbmQgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtjb25mbGljdH0gPX4gL15cKz0vICk7CisgICAgICAgICRzdGF0dXMgfHw9ICJGaWxlIGhhZCBjb25mbGljdHMgb24gbWVyZ2UiIGlmICggMCApOworCisgICAgICAgICRzdGF0dXMgfHw9ICJVbmtub3duIjsKKworICAgICAgICBteSAoJGZpbGVwYXJ0KSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lKTsKKworICAgICAgICBwcmludCAiTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iOworICAgICAgICBwcmludCAiTSBGaWxlOiAkZmlsZXBhcnRcdFN0YXR1czogJHN0YXR1c1xuIjsKKyAgICAgICAgaWYgKCBkZWZpbmVkKCRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17cmV2aXNpb259KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIFdvcmtpbmcgcmV2aXNpb246XHQiIC4gJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtyZXZpc2lvbn0gLiAiXG4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQgIk0gV29ya2luZyByZXZpc2lvbjpcdE5vIGVudHJ5IGZvciAkZmlsZW5hbWVcbiI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBkZWZpbmVkKCRtZXRhLT57cmV2aXNpb259KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIFJlcG9zaXRvcnkgcmV2aXNpb246XHQxLiIgLiAkbWV0YS0+e3JldmlzaW9ufSAuICJcdCRzdGF0ZS0+e0NWU1JPT1R9LyRzdGF0ZS0+e21vZHVsZX0vJGZpbGVuYW1lLHZcbiI7CisgICAgICAgICAgICBwcmludCAiTSBTdGlja3kgVGFnOlx0XHQobm9uZSlcbiI7CisgICAgICAgICAgICBwcmludCAiTSBTdGlja3kgRGF0ZTpcdFx0KG5vbmUpXG4iOworICAgICAgICAgICAgcHJpbnQgIk0gU3RpY2t5IE9wdGlvbnM6XHRcdChub25lKVxuIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ICJNIFJlcG9zaXRvcnkgcmV2aXNpb246XHRObyByZXZpc2lvbiBjb250cm9sIGZpbGVcbiI7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIk1cbiI7CisgICAgfQorCisgICAgcHJpbnQgIm9rXG4iOworfQorCitzdWIgcmVxX2RpZmYKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJkaWZmIik7CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX2RpZmYgOiAiIC4gKCBkZWZpbmVkKCRkYXRhKSA/ICRkYXRhIDogIltOVUxMXSIgKSk7CisgICAgIyRsb2ctPmRlYnVnKCJzdGF0dXMgc3RhdGUgOiAiIC4gRHVtcGVyKCRzdGF0ZSkpOworCisgICAgbXkgKCRyZXZpc2lvbjEsICRyZXZpc2lvbjIpOworICAgIGlmICggZGVmaW5lZCAoICRzdGF0ZS0+e29wdH17cn0gKSBhbmQgcmVmICRzdGF0ZS0+e29wdH17cn0gZXEgIkFSUkFZIiApCisgICAgeworICAgICAgICAkcmV2aXNpb24xID0gJHN0YXRlLT57b3B0fXtyfVswXTsKKyAgICAgICAgJHJldmlzaW9uMiA9ICRzdGF0ZS0+e29wdH17cn1bMV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgJHJldmlzaW9uMSA9ICRzdGF0ZS0+e29wdH17cn07CisgICAgfQorCisgICAgJHJldmlzaW9uMSA9fiBzL14xXC4vLyBpZiAoIGRlZmluZWQgKCAkcmV2aXNpb24xICkgKTsKKyAgICAkcmV2aXNpb24yID1+IHMvXjFcLi8vIGlmICggZGVmaW5lZCAoICRyZXZpc2lvbjIgKSApOworCisgICAgJGxvZy0+ZGVidWcoIkRpZmZpbmcgcmV2aXNpb25zICIgLiAoIGRlZmluZWQoJHJldmlzaW9uMSkgPyAkcmV2aXNpb24xIDogIltOVUxMXSIgKSAuICIgYW5kICIgLiAoIGRlZmluZWQoJHJldmlzaW9uMikgPyAkcmV2aXNpb24yIDogIltOVUxMXSIgKSApOworCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgICMgaWYgbm8gZmlsZXMgd2VyZSBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gd29yayBvdXQgd2hhdCBmaWxlcyB3ZSBzaG91bGQgYmUgcHJvdmlkaW5nIHN0YXR1cyBvbiAuLi4KKyAgICBhcmdzZnJvbWRpcigkdXBkYXRlcik7CisKKyAgICAjIGZvcmVhY2ggZmlsZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAuLi4KKyAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKKyAgICB7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbXkgKCAkZmgsICRmaWxlMSwgJGZpbGUyLCAkbWV0YTEsICRtZXRhMiwgJGZpbGVkaWZmICk7CisKKyAgICAgICAgbXkgJHdyZXYgPSByZXZwYXJzZSgkZmlsZW5hbWUpOworCisgICAgICAgICMgV2UgbmVlZCBfc29tZXRoaW5nXyB0byBkaWZmIGFnYWluc3QKKyAgICAgICAgbmV4dCB1bmxlc3MgKCBkZWZpbmVkICggJHdyZXYgKSApOworCisgICAgICAgICMgaWYgd2UgaGF2ZSBhIC1yIHN3aXRjaCwgdXNlIGl0CisgICAgICAgIGlmICggZGVmaW5lZCAoICRyZXZpc2lvbjEgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICggdW5kZWYsICRmaWxlMSApID0gdGVtcGZpbGUoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCApOworICAgICAgICAgICAgJG1ldGExID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkcmV2aXNpb24xKTsKKyAgICAgICAgICAgIHVubGVzcyAoIGRlZmluZWQgKCAkbWV0YTEgKSBhbmQgJG1ldGExLT57ZmlsZWhhc2h9IG5lICJkZWxldGVkIiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnQgIkUgRmlsZSAkZmlsZW5hbWUgYXQgcmV2aXNpb24gMS4kcmV2aXNpb24xIGRvZXNuJ3QgZXhpc3RcbiI7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyYW5zbWl0ZmlsZSgkbWV0YTEtPntmaWxlaGFzaH0sIHsgdGFyZ2V0ZmlsZSA9PiAkZmlsZTEgfSk7CisgICAgICAgIH0KKyAgICAgICAgIyBvdGhlcndpc2Ugd2UganVzdCB1c2UgdGhlIHdvcmtpbmcgY29weSByZXZpc2lvbgorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICggdW5kZWYsICRmaWxlMSApID0gdGVtcGZpbGUoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCApOworICAgICAgICAgICAgJG1ldGExID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkd3Jldik7CisgICAgICAgICAgICB0cmFuc21pdGZpbGUoJG1ldGExLT57ZmlsZWhhc2h9LCB7IHRhcmdldGZpbGUgPT4gJGZpbGUxIH0pOworICAgICAgICB9CisKKyAgICAgICAgIyBpZiB3ZSBoYXZlIGEgc2Vjb25kIC1yIHN3aXRjaCwgdXNlIGl0IHRvbworICAgICAgICBpZiAoIGRlZmluZWQgKCAkcmV2aXNpb24yICkgKQorICAgICAgICB7CisgICAgICAgICAgICAoIHVuZGVmLCAkZmlsZTIgKSA9IHRlbXBmaWxlKCBESVIgPT4gJFRFTVBfRElSLCBPUEVOID0+IDAgKTsKKyAgICAgICAgICAgICRtZXRhMiA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwgJHJldmlzaW9uMik7CisKKyAgICAgICAgICAgIHVubGVzcyAoIGRlZmluZWQgKCAkbWV0YTIgKSBhbmQgJG1ldGEyLT57ZmlsZWhhc2h9IG5lICJkZWxldGVkIiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnQgIkUgRmlsZSAkZmlsZW5hbWUgYXQgcmV2aXNpb24gMS4kcmV2aXNpb24yIGRvZXNuJ3QgZXhpc3RcbiI7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJhbnNtaXRmaWxlKCRtZXRhMi0+e2ZpbGVoYXNofSwgeyB0YXJnZXRmaWxlID0+ICRmaWxlMiB9KTsKKyAgICAgICAgfQorICAgICAgICAjIG90aGVyd2lzZSB3ZSBqdXN0IHVzZSB0aGUgd29ya2luZyBjb3B5CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgJGZpbGUyID0gJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX07CisgICAgICAgIH0KKworICAgICAgICAjIGlmIHdlIGhhdmUgYmVlbiBnaXZlbiAtciwgYW5kIHdlIGRvbid0IGhhdmUgYSAkZmlsZTIgeWV0LCBsZXRzIGdldCBvbmUKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHJldmlzaW9uMSApIGFuZCBub3QgZGVmaW5lZCAoICRmaWxlMiApICkKKyAgICAgICAgeworICAgICAgICAgICAgKCB1bmRlZiwgJGZpbGUyICkgPSB0ZW1wZmlsZSggRElSID0+ICRURU1QX0RJUiwgT1BFTiA9PiAwICk7CisgICAgICAgICAgICAkbWV0YTIgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUsICR3cmV2KTsKKyAgICAgICAgICAgIHRyYW5zbWl0ZmlsZSgkbWV0YTItPntmaWxlaGFzaH0sIHsgdGFyZ2V0ZmlsZSA9PiAkZmlsZTIgfSk7CisgICAgICAgIH0KKworICAgICAgICAjIFdlIG5lZWQgdG8gaGF2ZSByZXRyaWV2ZWQgc29tZXRoaW5nIHVzZWZ1bAorICAgICAgICBuZXh0IHVubGVzcyAoIGRlZmluZWQgKCAkbWV0YTEgKSApOworCisgICAgICAgICMgRmlsZXMgdG8gZGF0ZSBpZiB0aGUgd29ya2luZyBjb3B5IGFuZCByZXBvIGNvcHkgaGF2ZSB0aGUgc2FtZSByZXZpc2lvbiwgYW5kIHRoZSB3b3JraW5nIGNvcHkgaXMgdW5tb2RpZmllZAorICAgICAgICBuZXh0IGlmICggbm90IGRlZmluZWQgKCAkbWV0YTIgKSBhbmQgJHdyZXYgPT0gJG1ldGExLT57cmV2aXNpb259CisgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAoICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXt1bmNoYW5nZWR9IGFuZCAoIG5vdCBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtjb25mbGljdH0gKSBvciAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e2NvbmZsaWN0fSAhfiAvXlwrPS8gKSApCisgICAgICAgICAgICAgICAgICAgICBvciAoIGRlZmluZWQoJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9oYXNofSkgYW5kICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH0gZXEgJG1ldGExLT57ZmlsZWhhc2h9ICkgKQorICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAjIEFwcGFyZW50bHkgd2Ugb25seSBzaG93IGRpZmZzIGZvciBsb2NhbGx5IG1vZGlmaWVkIGZpbGVzCisgICAgICAgIG5leHQgdW5sZXNzICggZGVmaW5lZCgkbWV0YTIpIG9yIGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSApICk7CisKKyAgICAgICAgcHJpbnQgIk0gSW5kZXg6ICRmaWxlbmFtZVxuIjsKKyAgICAgICAgcHJpbnQgIk0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsKKyAgICAgICAgcHJpbnQgIk0gUkNTIGZpbGU6ICRzdGF0ZS0+e0NWU1JPT1R9LyRzdGF0ZS0+e21vZHVsZX0vJGZpbGVuYW1lLHZcbiI7CisgICAgICAgIHByaW50ICJNIHJldHJpZXZpbmcgcmV2aXNpb24gMS4kbWV0YTEtPntyZXZpc2lvbn1cbiIgaWYgKCBkZWZpbmVkICggJG1ldGExICkgKTsKKyAgICAgICAgcHJpbnQgIk0gcmV0cmlldmluZyByZXZpc2lvbiAxLiRtZXRhMi0+e3JldmlzaW9ufVxuIiBpZiAoIGRlZmluZWQgKCAkbWV0YTIgKSApOworICAgICAgICBwcmludCAiTSBkaWZmICI7CisgICAgICAgIGZvcmVhY2ggbXkgJG9wdCAoIGtleXMgJXskc3RhdGUtPntvcHR9fSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggcmVmICRzdGF0ZS0+e29wdH17JG9wdH0gZXEgIkFSUkFZIiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkdmFsdWUgKCBAeyRzdGF0ZS0+e29wdH17JG9wdH19ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICItJG9wdCAkdmFsdWUgIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ICItJG9wdCAiOworICAgICAgICAgICAgICAgIHByaW50ICIkc3RhdGUtPntvcHR9eyRvcHR9ICIgaWYgKCBkZWZpbmVkICggJHN0YXRlLT57b3B0fXskb3B0fSApICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIiRmaWxlbmFtZVxuIjsKKworICAgICAgICAkbG9nLT5pbmZvKCJEaWZmaW5nICRmaWxlbmFtZSAtciAkbWV0YTEtPntyZXZpc2lvbn0gLXIgIiAuICggJG1ldGEyLT57cmV2aXNpb259IG9yICJ3b3JraW5nY29weSIgKSk7CisKKyAgICAgICAgKCAkZmgsICRmaWxlZGlmZiApID0gdGVtcGZpbGUgKCBESVIgPT4gJFRFTVBfRElSICk7CisKKyAgICAgICAgaWYgKCBleGlzdHMgJHN0YXRlLT57b3B0fXt1fSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5c3RlbSgiZGlmZiAtdSAtTCAnJGZpbGVuYW1lIHJldmlzaW9uIDEuJG1ldGExLT57cmV2aXNpb259JyAtTCAnJGZpbGVuYW1lICIgLiAoIGRlZmluZWQoJG1ldGEyLT57cmV2aXNpb259KSA/ICJyZXZpc2lvbiAxLiRtZXRhMi0+e3JldmlzaW9ufSIgOiAid29ya2luZyBjb3B5IiApIC4gIicgJGZpbGUxICRmaWxlMiA+ICRmaWxlZGlmZiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3lzdGVtKCJkaWZmICRmaWxlMSAkZmlsZTIgPiAkZmlsZWRpZmYiKTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICggPCRmaD4gKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCAiTSAkXyI7CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UgJGZoOworICAgIH0KKworICAgIHByaW50ICJva1xuIjsKK30KKworc3ViIHJlcV9sb2cKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJsb2ciKTsKKworICAgICRsb2ctPmRlYnVnKCJyZXFfbG9nIDogIiAuICggZGVmaW5lZCgkZGF0YSkgPyAkZGF0YSA6ICJbTlVMTF0iICkpOworICAgICMkbG9nLT5kZWJ1ZygibG9nIHN0YXRlIDogIiAuIER1bXBlcigkc3RhdGUpKTsKKworICAgIG15ICggJG1pbnJldiwgJG1heHJldiApOworICAgIGlmICggZGVmaW5lZCAoICRzdGF0ZS0+e29wdH17cn0gKSBhbmQgJHN0YXRlLT57b3B0fXtyfSA9fiAvKFtcZC5dKyk/KDo6PykoW1xkLl0rKT8vICkKKyAgICB7CisgICAgICAgIG15ICRjb250cm9sID0gJDI7CisgICAgICAgICRtaW5yZXYgPSAkMTsKKyAgICAgICAgJG1heHJldiA9ICQzOworICAgICAgICAkbWlucmV2ID1+IHMvXjFcLi8vIGlmICggZGVmaW5lZCAoICRtaW5yZXYgKSApOworICAgICAgICAkbWF4cmV2ID1+IHMvXjFcLi8vIGlmICggZGVmaW5lZCAoICRtYXhyZXYgKSApOworICAgICAgICAkbWlucmV2KysgaWYgKCBkZWZpbmVkKCRtaW5yZXYpIGFuZCAkY29udHJvbCBlcSAiOjoiICk7CisgICAgfQorCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgICMgaWYgbm8gZmlsZXMgd2VyZSBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gd29yayBvdXQgd2hhdCBmaWxlcyB3ZSBzaG91bGQgYmUgcHJvdmlkaW5nIHN0YXR1cyBvbiAuLi4KKyAgICBhcmdzZnJvbWRpcigkdXBkYXRlcik7CisKKyAgICAjIGZvcmVhY2ggZmlsZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAuLi4KKyAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKKyAgICB7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbXkgJGhlYWRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lKTsKKworICAgICAgICBteSAkcmV2aXNpb25zID0gJHVwZGF0ZXItPmdldGxvZygkZmlsZW5hbWUpOworICAgICAgICBteSAkdG90YWxyZXZpc2lvbnMgPSBzY2FsYXIoQCRyZXZpc2lvbnMpOworCisgICAgICAgIGlmICggZGVmaW5lZCAoICRtaW5yZXYgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmRlYnVnKCJSZW1vdmluZyByZXZpc2lvbnMgbGVzcyB0aGFuICRtaW5yZXYiKTsKKyAgICAgICAgICAgIHdoaWxlICggc2NhbGFyKEAkcmV2aXNpb25zKSA+IDAgYW5kICRyZXZpc2lvbnMtPlstMV17cmV2aXNpb259IDwgJG1pbnJldiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcG9wIEAkcmV2aXNpb25zOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICggZGVmaW5lZCAoICRtYXhyZXYgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmRlYnVnKCJSZW1vdmluZyByZXZpc2lvbnMgZ3JlYXRlciB0aGFuICRtYXhyZXYiKTsKKyAgICAgICAgICAgIHdoaWxlICggc2NhbGFyKEAkcmV2aXNpb25zKSA+IDAgYW5kICRyZXZpc2lvbnMtPlswXXtyZXZpc2lvbn0gPiAkbWF4cmV2ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzaGlmdCBAJHJldmlzaW9uczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG5leHQgdW5sZXNzICggc2NhbGFyKEAkcmV2aXNpb25zKSApOworCisgICAgICAgIHByaW50ICJNIFxuIjsKKyAgICAgICAgcHJpbnQgIk0gUkNTIGZpbGU6ICRzdGF0ZS0+e0NWU1JPT1R9LyRzdGF0ZS0+e21vZHVsZX0vJGZpbGVuYW1lLHZcbiI7CisgICAgICAgIHByaW50ICJNIFdvcmtpbmcgZmlsZTogJGZpbGVuYW1lXG4iOworICAgICAgICBwcmludCAiTSBoZWFkOiAxLiRoZWFkbWV0YS0+e3JldmlzaW9ufVxuIjsKKyAgICAgICAgcHJpbnQgIk0gYnJhbmNoOlxuIjsKKyAgICAgICAgcHJpbnQgIk0gbG9ja3M6IHN0cmljdFxuIjsKKyAgICAgICAgcHJpbnQgIk0gYWNjZXNzIGxpc3Q6XG4iOworICAgICAgICBwcmludCAiTSBzeW1ib2xpYyBuYW1lczpcbiI7CisgICAgICAgIHByaW50ICJNIGtleXdvcmQgc3Vic3RpdHV0aW9uOiBrdlxuIjsKKyAgICAgICAgcHJpbnQgIk0gdG90YWwgcmV2aXNpb25zOiAkdG90YWxyZXZpc2lvbnM7XHRzZWxlY3RlZCByZXZpc2lvbnM6ICIgLiBzY2FsYXIoQCRyZXZpc2lvbnMpIC4gIlxuIjsKKyAgICAgICAgcHJpbnQgIk0gZGVzY3JpcHRpb246XG4iOworCisgICAgICAgIGZvcmVhY2ggbXkgJHJldmlzaW9uICggQCRyZXZpc2lvbnMgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCAiTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOworICAgICAgICAgICAgcHJpbnQgIk0gcmV2aXNpb24gMS4kcmV2aXNpb24tPntyZXZpc2lvbn1cbiI7CisgICAgICAgICAgICAjIHJlZm9ybWF0IHRoZSBkYXRlIGZvciBsb2cgb3V0cHV0CisgICAgICAgICAgICAkcmV2aXNpb24tPnttb2RpZmllZH0gPSBzcHJpbnRmKCclMDRkLyUwMmQvJTAyZCAlcycsICQzLCAkREFURV9MSVNULT57JDJ9LCAkMSwgJDQgKSBpZiAoICRyZXZpc2lvbi0+e21vZGlmaWVkfSA9fiAvKFxkKylccysoXHcrKVxzKyhcZCspXHMrKFxTKykvIGFuZCBkZWZpbmVkKCREQVRFX0xJU1QtPnskMn0pICk7CisgICAgICAgICAgICAkcmV2aXNpb24tPnthdXRob3J9ID0gY3ZzX2F1dGhvcigkcmV2aXNpb24tPnthdXRob3J9KTsKKyAgICAgICAgICAgIHByaW50ICJNIGRhdGU6ICRyZXZpc2lvbi0+e21vZGlmaWVkfTsgIGF1dGhvcjogJHJldmlzaW9uLT57YXV0aG9yfTsgIHN0YXRlOiAiIC4gKCAkcmV2aXNpb24tPntmaWxlaGFzaH0gZXEgImRlbGV0ZWQiID8gImRlYWQiIDogIkV4cCIgKSAuICI7ICBsaW5lczogKzIgLTNcbiI7CisgICAgICAgICAgICBteSAkY29tbWl0bWVzc2FnZSA9ICR1cGRhdGVyLT5jb21taXRtZXNzYWdlKCRyZXZpc2lvbi0+e2NvbW1pdGhhc2h9KTsKKyAgICAgICAgICAgICRjb21taXRtZXNzYWdlID1+IHMvXi9NIC9tZzsKKyAgICAgICAgICAgIHByaW50ICRjb21taXRtZXNzYWdlIC4gIlxuIjsKKyAgICAgICAgfQorICAgICAgICBwcmludCAiTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsKKyAgICB9CisKKyAgICBwcmludCAib2tcbiI7Cit9CisKK3N1YiByZXFfYW5ub3RhdGUKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJhbm5vdGF0ZSIpOworCisgICAgJGxvZy0+aW5mbygicmVxX2Fubm90YXRlIDogIiAuICggZGVmaW5lZCgkZGF0YSkgPyAkZGF0YSA6ICJbTlVMTF0iICkpOworICAgICMkbG9nLT5kZWJ1Zygic3RhdHVzIHN0YXRlIDogIiAuIER1bXBlcigkc3RhdGUpKTsKKworICAgICMgR3JhYiBhIGhhbmRsZSB0byB0aGUgU1FMaXRlIGRiIGFuZCBkbyBhbnkgbmVjZXNzYXJ5IHVwZGF0ZXMKKyAgICBteSAkdXBkYXRlciA9IEdJVENWUzo6dXBkYXRlci0+bmV3KCRzdGF0ZS0+e0NWU1JPT1R9LCAkc3RhdGUtPnttb2R1bGV9LCAkbG9nKTsKKyAgICAkdXBkYXRlci0+dXBkYXRlKCk7CisKKyAgICAjIGlmIG5vIGZpbGVzIHdlcmUgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIHdvcmsgb3V0IHdoYXQgZmlsZXMgd2Ugc2hvdWxkIGJlIHByb3ZpZGluZyBhbm5vdGF0ZSBvbiAuLi4KKyAgICBhcmdzZnJvbWRpcigkdXBkYXRlcik7CisKKyAgICAjIHdlJ2xsIG5lZWQgYSB0ZW1wb3JhcnkgY2hlY2tvdXQgZGlyCisgICAgc2V0dXBXb3JrVHJlZSgpOworCisgICAgJGxvZy0+aW5mbygiVGVtcCBjaGVja291dGRpciBjcmVhdGlvbiBzdWNjZXNzZnVsLCBiYXNpbmcgYW5ub3RhdGUgc2Vzc2lvbiB3b3JrIG9uICckd29yay0+e3dvcmtEaXJ9JywgaW5kZXggZmlsZSBpcyAnJEVOVntHSVRfSU5ERVhfRklMRX0nIik7CisKKyAgICAjIGZvcmVhY2ggZmlsZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAuLi4KKyAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKKyAgICB7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbXkgJG1ldGEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUpOworCisgICAgICAgIG5leHQgdW5sZXNzICggJG1ldGEtPntyZXZpc2lvbn0gKTsKKworCSMgZ2V0IGFsbCB0aGUgY29tbWl0cyB0aGF0IHRoaXMgZmlsZSB3YXMgaW4KKwkjIGluIGRlbnNlIGZvcm1hdCAtLSBha2Egc2tpcCBkZWFkIHJldmlzaW9ucworICAgICAgICBteSAkcmV2aXNpb25zICAgPSAkdXBkYXRlci0+Z2V0aGlzdG9yeWRlbnNlKCRmaWxlbmFtZSk7CisJbXkgJGxhc3RzZWVuaW4gID0gJHJldmlzaW9ucy0+WzBdWzJdOworCisJIyBwb3B1bGF0ZSB0aGUgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIHRoZSBsYXRlc3QgY29tbWl0IHdlcmUgd2Ugc2F3CisJIyB0aGUgZmlsZSAtLSBidXQgZG8gaXQgY2hlYXBseSB3aXRob3V0IGNoZWNraW5nIG91dCBhbnkgZmlsZXMKKwkjIFRPRE86IGlmIHdlIGdvdCBhIHJldmlzaW9uIGZyb20gdGhlIGNsaWVudCwgdXNlIHRoYXQgaW5zdGVhZAorCSMgdG8gbG9vayB1cCB0aGUgY29tbWl0aGFzaCBpbiBzcWxpdGUgKHN0aWxsIGdvb2QgdG8gZGVmYXVsdCB0bworCSMgdGhlIGN1cnJlbnQgaGVhZCBhcyB3ZSBkbyBub3cpCisJc3lzdGVtKCJnaXQiLCAicmVhZC10cmVlIiwgJGxhc3RzZWVuaW4pOworCXVubGVzcyAoJD8gPT0gMCkKKwl7CisJICAgIHByaW50ICJFIGVycm9yIHJ1bm5pbmcgZ2l0LXJlYWQtdHJlZSAkbGFzdHNlZW5pbiAkRU5We0dJVF9JTkRFWF9GSUxFfSAkIVxuIjsKKwkgICAgcmV0dXJuOworCX0KKwkkbG9nLT5pbmZvKCJDcmVhdGVkIGluZGV4ICckRU5We0dJVF9JTkRFWF9GSUxFfScgd2l0aCBjb21taXQgJGxhc3RzZWVuaW4gLSBleGl0IHN0YXR1cyAkPyIpOworCisgICAgICAgICMgZG8gYSBjaGVja291dCBvZiB0aGUgZmlsZQorICAgICAgICBzeXN0ZW0oJ2dpdCcsICdjaGVja291dC1pbmRleCcsICctZicsICctdScsICRmaWxlbmFtZSk7CisgICAgICAgIHVubGVzcyAoJD8gPT0gMCkgeworICAgICAgICAgICAgcHJpbnQgIkUgZXJyb3IgcnVubmluZyBnaXQtY2hlY2tvdXQtaW5kZXggLWYgLXUgJGZpbGVuYW1lIDogJCFcbiI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAkbG9nLT5pbmZvKCJBbm5vdGF0ZSAkZmlsZW5hbWUiKTsKKworICAgICAgICAjIFByZXBhcmUgYSBmaWxlIHdpdGggdGhlIGNvbW1pdHMgZnJvbSB0aGUgbGluZWFyaXplZAorICAgICAgICAjIGhpc3RvcnkgdGhhdCBhbm5vdGF0ZSBzaG91bGQga25vdyBhYm91dC4gVGhpcyBwcmV2ZW50cworICAgICAgICAjIGdpdC1qc2Fubm90YXRlIHRlbGxpbmcgdXMgYWJvdXQgY29tbWl0cyB3ZSBhcmUgaGlkaW5nCisgICAgICAgICMgZnJvbSB0aGUgY2xpZW50LgorCisgICAgICAgIG15ICRhX2hpbnRzID0gIiR3b3JrLT57d29ya0Rpcn0vLmFubm90YXRlX2hpbnRzIjsKKyAgICAgICAgaWYgKCFvcGVuKEFOTk9UQVRFSElOVFMsICc+JywgJGFfaGludHMpKSB7CisgICAgICAgICAgICBwcmludCAiRSBmYWlsZWQgdG8gb3BlbiAnJGFfaGludHMnIGZvciB3cml0aW5nOiAkIVxuIjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKG15ICRpPTA7ICRpIDwgQCRyZXZpc2lvbnM7ICRpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50IEFOTk9UQVRFSElOVFMgJHJldmlzaW9ucy0+WyRpXVsyXTsKKyAgICAgICAgICAgIGlmICgkaSsxIDwgQCRyZXZpc2lvbnMpIHsgIyBoYXZlIHdlIGdvdCBhIHBhcmVudD8KKyAgICAgICAgICAgICAgICBwcmludCBBTk5PVEFURUhJTlRTICcgJyAuICRyZXZpc2lvbnMtPlskaSsxXVsyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50IEFOTk9UQVRFSElOVFMgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50IEFOTk9UQVRFSElOVFMgIlxuIjsKKyAgICAgICAgY2xvc2UgQU5OT1RBVEVISU5UUworICAgICAgICAgICAgb3IgKHByaW50ICJFIGZhaWxlZCB0byB3cml0ZSAkYV9oaW50czogJCFcbiIpLCByZXR1cm47CisKKyAgICAgICAgbXkgQGNtZCA9IChxdyhnaXQgYW5ub3RhdGUgLWwgLVMpLCAkYV9oaW50cywgJGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKCFvcGVuKEFOTk9UQVRFLCAiLXwiLCBAY21kKSkgeworICAgICAgICAgICAgcHJpbnQgIkUgZXJyb3IgaW52b2tpbmcgIi4gam9pbignICcsQGNtZCkgLiI6ICQhXG4iOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG15ICRtZXRhZGF0YSA9IHt9OworICAgICAgICBwcmludCAiRSBBbm5vdGF0aW9ucyBmb3IgJGZpbGVuYW1lXG4iOworICAgICAgICBwcmludCAiRSAqKioqKioqKioqKioqKipcbiI7CisgICAgICAgIHdoaWxlICggPEFOTk9UQVRFPiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtL14oW2EtekEtWjAtOV17NDB9KVx0XChbXlwpXSpcKSguKikkL2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXkgJGNvbW1pdGhhc2ggPSAkMTsKKyAgICAgICAgICAgICAgICBteSAkZGF0YSA9ICQyOworICAgICAgICAgICAgICAgIHVubGVzcyAoIGRlZmluZWQgKCAkbWV0YWRhdGEtPnskY29tbWl0aGFzaH0gKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGEtPnskY29tbWl0aGFzaH0gPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUsICRjb21taXRoYXNoKTsKKyAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9e2F1dGhvcn0gPSBjdnNfYXV0aG9yKCRtZXRhZGF0YS0+eyRjb21taXRoYXNofXthdXRob3J9KTsKKyAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9e21vZGlmaWVkfSA9IHNwcmludGYoIiUwMmQtJXMtJTAyZCIsICQxLCAkMiwgJDMpIGlmICggJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9e21vZGlmaWVkfSA9fiAvXihcZCspXHMoXHcrKVxzXGRcZChcZFxkKS8gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmKCJNIDEuJS01ZCAgICAgICglLThzICUxMHMpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9e3JldmlzaW9ufSwKKyAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9e2F1dGhvcn0sCisgICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YS0+eyRjb21taXRoYXNofXttb2RpZmllZH0sCisgICAgICAgICAgICAgICAgICAgICRkYXRhCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJGxvZy0+d2FybigiRXJyb3IgaW4gYW5ub3RhdGUgb3V0cHV0ISBMSU5FOiAkXyIpOworICAgICAgICAgICAgICAgIHByaW50ICJFIEFubm90YXRlIGVycm9yIFxuIjsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNsb3NlIEFOTk9UQVRFOworICAgIH0KKworICAgICMgZG9uZTsgZ2V0IG91dCBvZiB0aGUgdGVtcGRpcgorICAgIGNsZWFudXBXb3JrVHJlZSgpOworCisgICAgcHJpbnQgIm9rXG4iOworCit9CisKKyMgVGhpcyBtZXRob2QgdGFrZXMgdGhlIHN0YXRlLT57YXJndW1lbnRzfSBhcnJheSBhbmQgcHJvZHVjZXMgdHdvIG5ldyBhcnJheXMuCisjIFRoZSBmaXJzdCBpcyAkc3RhdGUtPnthcmdzfSB3aGljaCBpcyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgJy0tJyBhcmd1bWVudCwgYW5kCisjIHRoZSBzZWNvbmQgaXMgJHN0YXRlLT57ZmlsZXN9IHdoaWNoIGlzIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQuCitzdWIgYXJnc3BsaXQKK3sKKyAgICAkc3RhdGUtPnthcmdzfSA9IFtdOworICAgICRzdGF0ZS0+e2ZpbGVzfSA9IFtdOworICAgICRzdGF0ZS0+e29wdH0gPSB7fTsKKworICAgIHJldHVybiB1bmxlc3MoIGRlZmluZWQoJHN0YXRlLT57YXJndW1lbnRzfSkgYW5kIHJlZiAkc3RhdGUtPnthcmd1bWVudHN9IGVxICJBUlJBWSIgKTsKKworICAgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAgICBpZiAoIGRlZmluZWQoJHR5cGUpICkKKyAgICB7CisgICAgICAgIG15ICRvcHQgPSB7fTsKKyAgICAgICAgJG9wdCA9IHsgQSA9PiAwLCBOID0+IDAsIFAgPT4gMCwgUiA9PiAwLCBjID0+IDAsIGYgPT4gMCwgbCA9PiAwLCBuID0+IDAsIHAgPT4gMCwgcyA9PiAwLCByID0+IDEsIEQgPT4gMSwgZCA9PiAxLCBrID0+IDEsIGogPT4gMSwgfSBpZiAoICR0eXBlIGVxICJjbyIgKTsKKyAgICAgICAgJG9wdCA9IHsgdiA9PiAwLCBsID0+IDAsIFIgPT4gMCB9IGlmICggJHR5cGUgZXEgInN0YXR1cyIgKTsKKyAgICAgICAgJG9wdCA9IHsgQSA9PiAwLCBQID0+IDAsIEMgPT4gMCwgZCA9PiAwLCBmID0+IDAsIGwgPT4gMCwgUiA9PiAwLCBwID0+IDAsIGsgPT4gMSwgciA9PiAxLCBEID0+IDEsIGogPT4gMSwgSSA9PiAxLCBXID0+IDEgfSBpZiAoICR0eXBlIGVxICJ1cGRhdGUiICk7CisgICAgICAgICRvcHQgPSB7IGwgPT4gMCwgUiA9PiAwLCBrID0+IDEsIEQgPT4gMSwgRCA9PiAxLCByID0+IDIgfSBpZiAoICR0eXBlIGVxICJkaWZmIiApOworICAgICAgICAkb3B0ID0geyBjID0+IDAsIFIgPT4gMCwgbCA9PiAwLCBmID0+IDAsIEYgPT4gMSwgbSA9PiAxLCByID0+IDEgfSBpZiAoICR0eXBlIGVxICJjaSIgKTsKKyAgICAgICAgJG9wdCA9IHsgayA9PiAxLCBtID0+IDEgfSBpZiAoICR0eXBlIGVxICJhZGQiICk7CisgICAgICAgICRvcHQgPSB7IGYgPT4gMCwgbCA9PiAwLCBSID0+IDAgfSBpZiAoICR0eXBlIGVxICJyZW1vdmUiICk7CisgICAgICAgICRvcHQgPSB7IGwgPT4gMCwgYiA9PiAwLCBoID0+IDAsIFIgPT4gMCwgdCA9PiAwLCBOID0+IDAsIFMgPT4gMCwgciA9PiAxLCBkID0+IDEsIHMgPT4gMSwgdyA9PiAxIH0gaWYgKCAkdHlwZSBlcSAibG9nIiApOworCisKKyAgICAgICAgd2hpbGUgKCBzY2FsYXIgKCBAeyRzdGF0ZS0+e2FyZ3VtZW50c319ICkgPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbXkgJGFyZyA9IHNoaWZ0IEB7JHN0YXRlLT57YXJndW1lbnRzfX07CisKKyAgICAgICAgICAgIG5leHQgaWYgKCAkYXJnIGVxICItLSIgKTsKKyAgICAgICAgICAgIG5leHQgdW5sZXNzICggJGFyZyA9fiAvXFMvICk7CisKKyAgICAgICAgICAgICMgaWYgdGhlIGFyZ3VtZW50IGxvb2tzIGxpa2UgYSBzd2l0Y2gKKyAgICAgICAgICAgIGlmICggJGFyZyA9fiAvXi0oXHcpKC4qKS8gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICMgaWYgaXQncyBhIHN3aXRjaCB0aGF0IHRha2VzIGFuIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgaWYgKCAkb3B0LT57JDF9ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICMgSWYgdGhpcyBzd2l0Y2ggaGFzIGFscmVhZHkgYmVlbiBwcm92aWRlZAorICAgICAgICAgICAgICAgICAgICBpZiAoICRvcHQtPnskMX0gPiAxIGFuZCBleGlzdHMgKCAkc3RhdGUtPntvcHR9eyQxfSApICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57b3B0fXskMX0gPSBbICRzdGF0ZS0+e29wdH17JDF9IF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCgkMikgPiAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHN0YXRlLT57b3B0fXskMX19LCQyOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHN0YXRlLT57b3B0fXskMX19LCBzaGlmdCBAeyRzdGF0ZS0+e2FyZ3VtZW50c319OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGVyZSdzIGV4dHJhIGRhdGEgaW4gdGhlIGFyZywgdXNlIHRoYXQgYXMgdGhlIGFyZ3VtZW50IGZvciB0aGUgc3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCgkMikgPiAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdGUtPntvcHR9eyQxfSA9ICQyOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdGUtPntvcHR9eyQxfSA9IHNoaWZ0IEB7JHN0YXRlLT57YXJndW1lbnRzfX07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkc3RhdGUtPntvcHR9eyQxfSA9IHVuZGVmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdXNoIEB7JHN0YXRlLT57YXJnc319LCAkYXJnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG15ICRtb2RlID0gMDsKKworICAgICAgICBmb3JlYWNoIG15ICR2YWx1ZSAoIEB7JHN0YXRlLT57YXJndW1lbnRzfX0gKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoICR2YWx1ZSBlcSAiLS0iICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkbW9kZSsrOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoIEB7JHN0YXRlLT57YXJnc319LCAkdmFsdWUgaWYgKCAkbW9kZSA9PSAwICk7CisgICAgICAgICAgICBwdXNoIEB7JHN0YXRlLT57ZmlsZXN9fSwgJHZhbHVlIGlmICggJG1vZGUgPT0gMSApOworICAgICAgICB9CisgICAgfQorfQorCisjIFRoaXMgbWV0aG9kIHVzZXMgJHN0YXRlLT57ZGlyZWN0b3J5fSB0byBwb3B1bGF0ZSAkc3RhdGUtPnthcmdzfSB3aXRoIGEgbGlzdCBvZiBmaWxlbmFtZXMKK3N1YiBhcmdzZnJvbWRpcgoreworICAgIG15ICR1cGRhdGVyID0gc2hpZnQ7CisKKyAgICAkc3RhdGUtPnthcmdzfSA9IFtdIGlmICggc2NhbGFyKEB7JHN0YXRlLT57YXJnc319KSA9PSAxIGFuZCAkc3RhdGUtPnthcmdzfVswXSBlcSAiLiIgKTsKKworICAgIHJldHVybiBpZiAoIHNjYWxhciAoIEB7JHN0YXRlLT57YXJnc319ICkgPiAxICk7CisKKyAgICBteSBAZ2V0aGVhZCA9IEB7JHVwZGF0ZXItPmdldGhlYWR9OworCisgICAgIyBwdXNoIGFkZGVkIGZpbGVzCisgICAgZm9yZWFjaCBteSAkZmlsZSAoa2V5cyAleyRzdGF0ZS0+e2VudHJpZXN9fSkgeworCWlmICggZXhpc3RzICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlfXtyZXZpc2lvbn0gJiYKKwkJJHN0YXRlLT57ZW50cmllc317JGZpbGV9e3JldmlzaW9ufSA9PSAwICkKKwl7CisJICAgIHB1c2ggQGdldGhlYWQsIHsgbmFtZSA9PiAkZmlsZSwgZmlsZWhhc2ggPT4gJ2FkZGVkJyB9OworCX0KKyAgICB9CisKKyAgICBpZiAoIHNjYWxhcihAeyRzdGF0ZS0+e2FyZ3N9fSkgPT0gMSApCisgICAgeworICAgICAgICBteSAkYXJnID0gJHN0YXRlLT57YXJnc31bMF07CisgICAgICAgICRhcmcgLj0gJHN0YXRlLT57cHJlcGVuZGRpcn0gaWYgKCBkZWZpbmVkICggJHN0YXRlLT57cHJlcGVuZGRpcn0gKSApOworCisgICAgICAgICRsb2ctPmluZm8oIk9ubHkgb25lIGFyZyBzcGVjaWZpZWQsIGNoZWNraW5nIGZvciBkaXJlY3RvcnkgZXhwYW5zaW9uIG9uICckYXJnJyIpOworCisgICAgICAgIGZvcmVhY2ggbXkgJGZpbGUgKCBAZ2V0aGVhZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5leHQgaWYgKCAkZmlsZS0+e2ZpbGVoYXNofSBlcSAiZGVsZXRlZCIgYW5kIG5vdCBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGUtPntuYW1lfX0gKSApOworICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCAkZmlsZS0+e25hbWV9ID1+IC9eJGFyZ1wvLyBvciAkZmlsZS0+e25hbWV9IGVxICRhcmcgICk7CisgICAgICAgICAgICBwdXNoIEB7JHN0YXRlLT57YXJnc319LCAkZmlsZS0+e25hbWV9OworICAgICAgICB9CisKKyAgICAgICAgc2hpZnQgQHskc3RhdGUtPnthcmdzfX0gaWYgKCBzY2FsYXIoQHskc3RhdGUtPnthcmdzfX0pID4gMSApOworICAgIH0gZWxzZSB7CisgICAgICAgICRsb2ctPmluZm8oIk9ubHkgb25lIGFyZyBzcGVjaWZpZWQsIHBvcHVsYXRpbmcgZmlsZSBsaXN0IGF1dG9tYXRpY2FsbHkiKTsKKworICAgICAgICAkc3RhdGUtPnthcmdzfSA9IFtdOworCisgICAgICAgIGZvcmVhY2ggbXkgJGZpbGUgKCBAZ2V0aGVhZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5leHQgaWYgKCAkZmlsZS0+e2ZpbGVoYXNofSBlcSAiZGVsZXRlZCIgYW5kIG5vdCBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGUtPntuYW1lfX0gKSApOworICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCAkZmlsZS0+e25hbWV9ID1+IHMvXiRzdGF0ZS0+e3ByZXBlbmRkaXJ9Ly8gKTsKKyAgICAgICAgICAgIHB1c2ggQHskc3RhdGUtPnthcmdzfX0sICRmaWxlLT57bmFtZX07CisgICAgICAgIH0KKyAgICB9Cit9CisKKyMgVGhpcyBtZXRob2QgY2xlYW5zIHVwIHRoZSAkc3RhdGUgdmFyaWFibGUgYWZ0ZXIgYSBjb21tYW5kIHRoYXQgdXNlcyBhcmd1bWVudHMgaGFzIHJ1bgorc3ViIHN0YXRlY2xlYW51cAoreworICAgICRzdGF0ZS0+e2ZpbGVzfSA9IFtdOworICAgICRzdGF0ZS0+e2FyZ3N9ID0gW107CisgICAgJHN0YXRlLT57YXJndW1lbnRzfSA9IFtdOworICAgICRzdGF0ZS0+e2VudHJpZXN9ID0ge307Cit9CisKK3N1YiByZXZwYXJzZQoreworICAgIG15ICRmaWxlbmFtZSA9IHNoaWZ0OworCisgICAgcmV0dXJuIHVuZGVmIHVubGVzcyAoIGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3JldmlzaW9ufSApICk7CisKKyAgICByZXR1cm4gJDEgaWYgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3JldmlzaW9ufSA9fiAvXjFcLihcZCspLyApOworICAgIHJldHVybiAtJDEgaWYgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3JldmlzaW9ufSA9fiAvXi0xXC4oXGQrKS8gKTsKKworICAgIHJldHVybiB1bmRlZjsKK30KKworIyBUaGlzIG1ldGhvZCB0YWtlcyBhIGZpbGUgaGFzaCBhbmQgZG9lcyBhIENWUyAiZmlsZSB0cmFuc2ZlciIuICBJdHMKKyMgZXhhY3QgYmVoYXZpb3VyIGRlcGVuZHMgb24gYSBzZWNvbmQsIG9wdGlvbmFsIGhhc2ggdGFibGUgYXJndW1lbnQ6CisjIC0gSWYgJG9wdGlvbnMtPnt0YXJnZXRmaWxlfSwgZHVtcCB0aGUgY29udGVudHMgdG8gdGhhdCBmaWxlOworIyAtIElmICRvcHRpb25zLT57cHJpbnR9LCB1c2UgTS9NVCB0byB0cmFuc21pdCB0aGUgY29udGVudHMgb25lIGxpbmUKKyMgICBhdCBhIHRpbWU7CisjIC0gT3RoZXJ3aXNlLCB0cmFuc21pdCB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgZm9sbG93ZWQgYnkgdGhlIGZpbGUKKyMgICBjb250ZW50cy4KK3N1YiB0cmFuc21pdGZpbGUKK3sKKyAgICBteSAkZmlsZWhhc2ggPSBzaGlmdDsKKyAgICBteSAkb3B0aW9ucyA9IHNoaWZ0OworCisgICAgaWYgKCBkZWZpbmVkICggJGZpbGVoYXNoICkgYW5kICRmaWxlaGFzaCBlcSAiZGVsZXRlZCIgKQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiZmlsZWhhc2ggaXMgJ2RlbGV0ZWQnIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaWUgIk5lZWQgZmlsZWhhc2giIHVubGVzcyAoIGRlZmluZWQgKCAkZmlsZWhhc2ggKSBhbmQgJGZpbGVoYXNoID1+IC9eW2EtekEtWjAtOV17NDB9JC8gKTsKKworICAgIG15ICR0eXBlID0gYGdpdCBjYXQtZmlsZSAtdCAkZmlsZWhhc2hgOworICAgIGNob21wICR0eXBlOworCisgICAgZGllICggIkludmFsaWQgdHlwZSAnJHR5cGUnIChleHBlY3RlZCAnYmxvYicpIiApIHVubGVzcyAoIGRlZmluZWQgKCAkdHlwZSApIGFuZCAkdHlwZSBlcSAiYmxvYiIgKTsKKworICAgIG15ICRzaXplID0gYGdpdCBjYXQtZmlsZSAtcyAkZmlsZWhhc2hgOworICAgIGNob21wICRzaXplOworCisgICAgJGxvZy0+ZGVidWcoInRyYW5zbWl0ZmlsZSgkZmlsZWhhc2gpIHNpemU9JHNpemUsIHR5cGU9JHR5cGUiKTsKKworICAgIGlmICggb3BlbiBteSAkZmgsICctfCcsICJnaXQiLCAiY2F0LWZpbGUiLCAiYmxvYiIsICRmaWxlaGFzaCApCisgICAgeworICAgICAgICBpZiAoIGRlZmluZWQgKCAkb3B0aW9ucy0+e3RhcmdldGZpbGV9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBteSAkdGFyZ2V0ZmlsZSA9ICRvcHRpb25zLT57dGFyZ2V0ZmlsZX07CisgICAgICAgICAgICBvcGVuIE5FV0ZJTEUsICI+IiwgJHRhcmdldGZpbGUgb3IgZGllKCJDb3VsZG4ndCBvcGVuICckdGFyZ2V0ZmlsZScgZm9yIHdyaXRpbmcgOiAkISIpOworICAgICAgICAgICAgcHJpbnQgTkVXRklMRSAkXyB3aGlsZSAoIDwkZmg+ICk7CisgICAgICAgICAgICBjbG9zZSBORVdGSUxFIG9yIGRpZSgiRmFpbGVkIHRvIHdyaXRlICckdGFyZ2V0ZmlsZSc6ICQhIik7CisgICAgICAgIH0gZWxzaWYgKCBkZWZpbmVkICggJG9wdGlvbnMtPntwcmludH0gKSAmJiAkb3B0aW9ucy0+e3ByaW50fSApIHsKKyAgICAgICAgICAgIHdoaWxlICggPCRmaD4gKSB7CisgICAgICAgICAgICAgICAgaWYoIC9cblx6LyApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ00gJywgJF87CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ01UIHRleHQgJywgJF8sICJcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQgIiRzaXplXG4iOworICAgICAgICAgICAgcHJpbnQgd2hpbGUgKCA8JGZoPiApOworICAgICAgICB9CisgICAgICAgIGNsb3NlICRmaCBvciBkaWUgKCJDb3VsZG4ndCBjbG9zZSBmaWxlaGFuZGxlIGZvciB0cmFuc21pdGZpbGUoKTogJCEiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkaWUoIkNvdWxkbid0IGV4ZWN1dGUgZ2l0LWNhdC1maWxlIik7CisgICAgfQorfQorCisjIFRoaXMgbWV0aG9kIHRha2VzIGEgZmlsZSBuYW1lLCBhbmQgcmV0dXJucyAoICRkaXJwYXJ0LCAkZmlsZXBhcnQgKSB3aGljaAorIyByZWZlcnMgdG8gdGhlIGRpcmVjdG9yeSBwb3J0aW9uIGFuZCB0aGUgZmlsZSBwb3J0aW9uIG9mIHRoZSBmaWxlbmFtZQorIyByZXNwZWN0aXZlbHkKK3N1YiBmaWxlbmFtZXNwbGl0Cit7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisgICAgbXkgJGZpeGZvcmxvY2FsZGlyID0gc2hpZnQ7CisKKyAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9ICggJGZpbGVuYW1lLCAiLiIgKTsKKyAgICAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9ICggJDIsICQxICkgaWYgKCAkZmlsZW5hbWUgPX4gLyguKilcLyguKikvICk7CisgICAgJGRpcnBhcnQgLj0gIi8iOworCisgICAgaWYgKCAkZml4Zm9ybG9jYWxkaXIgKQorICAgIHsKKyAgICAgICAgJGRpcnBhcnQgPX4gcy9eJHN0YXRlLT57cHJlcGVuZGRpcn0vLzsKKyAgICB9CisKKyAgICByZXR1cm4gKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICk7Cit9CisKK3N1YiBmaWxlY2xlYW51cAoreworICAgIG15ICRmaWxlbmFtZSA9IHNoaWZ0OworCisgICAgcmV0dXJuIHVuZGVmIHVubGVzcyhkZWZpbmVkKCRmaWxlbmFtZSkpOworICAgIGlmICggJGZpbGVuYW1lID1+IC9eXC8vICkKKyAgICB7CisgICAgICAgIHByaW50ICJFIGFic29sdXRlIGZpbGVuYW1lcyAnJGZpbGVuYW1lJyBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlclxuIjsKKyAgICAgICAgcmV0dXJuIHVuZGVmOworICAgIH0KKworICAgICRmaWxlbmFtZSA9fiBzL15cLlwvLy9nOworICAgICRmaWxlbmFtZSA9ICRzdGF0ZS0+e3ByZXBlbmRkaXJ9IC4gJGZpbGVuYW1lOworICAgIHJldHVybiAkZmlsZW5hbWU7Cit9CisKK3N1YiB2YWxpZGF0ZUdpdERpcgoreworICAgIGlmKCAhZGVmaW5lZCgkc3RhdGUtPntDVlNST09UfSkgKQorICAgIHsKKyAgICAgICAgcHJpbnQgImVycm9yIDEgQ1ZTUk9PVCBub3Qgc3BlY2lmaWVkXG4iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgZXhpdDsKKyAgICB9CisgICAgaWYoICRFTlZ7R0lUX0RJUn0gbmUgKCRzdGF0ZS0+e0NWU1JPT1R9IC4gJy8nKSApCisgICAgeworICAgICAgICBwcmludCAiZXJyb3IgMSBJbnRlcm5hbGx5IGluY29uc2lzdGVudCBDVlNST09UXG4iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgZXhpdDsKKyAgICB9Cit9CisKKyMgU2V0dXAgd29ya2luZyBkaXJlY3RvcnkgaW4gYSB3b3JrIHRyZWUgd2l0aCB0aGUgcmVxdWVzdGVkIHZlcnNpb24KKyMgbG9hZGVkIGluIHRoZSBpbmRleC4KK3N1YiBzZXR1cFdvcmtUcmVlCit7CisgICAgbXkgKCR2ZXIpID0gQF87CisKKyAgICB2YWxpZGF0ZUdpdERpcigpOworCisgICAgaWYoICggZGVmaW5lZCgkd29yay0+e3N0YXRlfSkgJiYgJHdvcmstPntzdGF0ZX0gIT0gMSApIHx8CisgICAgICAgIGRlZmluZWQoJHdvcmstPnt0bXBEaXJ9KSApCisgICAgeworICAgICAgICAkbG9nLT53YXJuKCJCYWQgd29yayB0cmVlIHN0YXRlIG1hbmFnZW1lbnQiKTsKKyAgICAgICAgcHJpbnQgImVycm9yIDEgSW50ZXJuYWwgc2V0dXAgbXVsdGlwbGUgd29yayB0cmVlcyB3aXRob3V0IGNsZWFudXBcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKworICAgICR3b3JrLT57d29ya0Rpcn0gPSB0ZW1wZGlyICggRElSID0+ICRURU1QX0RJUiApOworCisgICAgaWYoICFkZWZpbmVkKCR3b3JrLT57aW5kZXh9KSApCisgICAgeworICAgICAgICAodW5kZWYsICR3b3JrLT57aW5kZXh9KSA9IHRlbXBmaWxlICggRElSID0+ICRURU1QX0RJUiwgT1BFTiA9PiAwICk7CisgICAgfQorCisgICAgY2hkaXIgJHdvcmstPnt3b3JrRGlyfSBvcgorICAgICAgICBkaWUgIlVuYWJsZSB0byBjaGRpciB0byAkd29yay0+e3dvcmtEaXJ9XG4iOworCisgICAgJGxvZy0+aW5mbygiU2V0dGluZyB1cCBHSVRfV09SS19UUkVFIGFzICcuJyBpbiAnJHdvcmstPnt3b3JrRGlyfScsIGluZGV4IGZpbGUgaXMgJyR3b3JrLT57aW5kZXh9JyIpOworCisgICAgJEVOVntHSVRfV09SS19UUkVFfSA9ICIuIjsKKyAgICAkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICR3b3JrLT57aW5kZXh9OworICAgICR3b3JrLT57c3RhdGV9ID0gMjsKKworICAgIGlmKCR2ZXIpCisgICAgeworICAgICAgICBzeXN0ZW0oImdpdCIsInJlYWQtdHJlZSIsJHZlcik7CisgICAgICAgIHVubGVzcyAoJD8gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiRXJyb3IgcnVubmluZyBnaXQtcmVhZC10cmVlIik7CisgICAgICAgICAgICBkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0LXJlYWQtdHJlZSAkdmVyIGluICR3b3JrLT57d29ya0Rpcn0gJCFcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgIyBlbHNlICMgcmVxX2Fubm90YXRlIHJlYWRzIHRyZWUgZm9yIGVhY2ggZmlsZQorfQorCisjIEVuc3VyZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBpbiBzb21lIGtpbmQgb2Ygd29ya2luZyBkaXJlY3RvcnksCisjIHdpdGggYSByZWNlbnQgdmVyc2lvbiBsb2FkZWQgaW4gdGhlIGluZGV4Lgorc3ViIGVuc3VyZVdvcmtUcmVlCit7CisgICAgaWYoIGRlZmluZWQoJHdvcmstPnt0bXBEaXJ9KSApCisgICAgeworICAgICAgICAkbG9nLT53YXJuKCJCYWQgd29yayB0cmVlIHN0YXRlIG1hbmFnZW1lbnQgW2Vuc3VyZVdvcmtUcmVlKCldIik7CisgICAgICAgIHByaW50ICJlcnJvciAxIEludGVybmFsIHNldHVwIG11bHRpcGxlIGRpcnMgd2l0aG91dCBjbGVhbnVwXG4iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgZXhpdDsKKyAgICB9CisgICAgaWYoICR3b3JrLT57c3RhdGV9ICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YWxpZGF0ZUdpdERpcigpOworCisgICAgaWYoICFkZWZpbmVkKCR3b3JrLT57ZW1wdHlEaXJ9KSApCisgICAgeworICAgICAgICAkd29yay0+e2VtcHR5RGlyfSA9IHRlbXBkaXIgKCBESVIgPT4gJFRFTVBfRElSLCBPUEVOID0+IDApOworICAgIH0KKyAgICBjaGRpciAkd29yay0+e2VtcHR5RGlyfSBvcgorICAgICAgICBkaWUgIlVuYWJsZSB0byBjaGRpciB0byAkd29yay0+e2VtcHR5RGlyfVxuIjsKKworICAgIG15ICR2ZXIgPSBgZ2l0IHNob3ctcmVmIC1zIHJlZnMvaGVhZHMvJHN0YXRlLT57bW9kdWxlfWA7CisgICAgY2hvbXAgJHZlcjsKKyAgICBpZiAoJHZlciAhfiAvXlswLTlhLWZdezQwfSQvKQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiRXJyb3IgZnJvbSBnaXQgc2hvdy1yZWYgLXMgcmVmcy9oZWFkJHN0YXRlLT57bW9kdWxlfSIpOworICAgICAgICBwcmludCAiZXJyb3IgMSBjYW5ub3QgZmluZCB0aGUgY3VycmVudCBIRUFEIG9mIG1vZHVsZSI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKworICAgIGlmKCAhZGVmaW5lZCgkd29yay0+e2luZGV4fSkgKQorICAgIHsKKyAgICAgICAgKHVuZGVmLCAkd29yay0+e2luZGV4fSkgPSB0ZW1wZmlsZSAoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCApOworICAgIH0KKworICAgICRFTlZ7R0lUX1dPUktfVFJFRX0gPSAiLiI7CisgICAgJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkd29yay0+e2luZGV4fTsKKyAgICAkd29yay0+e3N0YXRlfSA9IDE7CisKKyAgICBzeXN0ZW0oImdpdCIsInJlYWQtdHJlZSIsJHZlcik7CisgICAgdW5sZXNzICgkPyA9PSAwKQorICAgIHsKKyAgICAgICAgZGllICJFcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUgJHZlciAkIVxuIjsKKyAgICB9Cit9CisKKyMgQ2xlYW51cCB3b3JraW5nIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCBuZWVkZWQgYW55IGxvbmdlci4KK3N1YiBjbGVhbnVwV29ya1RyZWUKK3sKKyAgICBpZiggISAkd29yay0+e3N0YXRlfSApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hkaXIgIi8iIG9yIGRpZSAiVW5hYmxlIHRvIGNoZGlyICcvJ1xuIjsKKworICAgIGlmKCBkZWZpbmVkKCR3b3JrLT57d29ya0Rpcn0pICkKKyAgICB7CisgICAgICAgIHJtdHJlZSggJHdvcmstPnt3b3JrRGlyfSApOworICAgICAgICB1bmRlZiAkd29yay0+e3dvcmtEaXJ9OworICAgIH0KKyAgICB1bmRlZiAkd29yay0+e3N0YXRlfTsKK30KKworIyBTZXR1cCBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgKG5vdCBhIHdvcmtpbmcgdHJlZSksIHR5cGljYWxseSBmb3IKKyMgbWVyZ2luZyBkaXJ0eSBzdGF0ZSBhcyBpbiByZXFfdXBkYXRlLgorc3ViIHNldHVwVG1wRGlyCit7CisgICAgJHdvcmstPnt0bXBEaXJ9ID0gdGVtcGRpciAoIERJUiA9PiAkVEVNUF9ESVIgKTsKKyAgICBjaGRpciAkd29yay0+e3RtcERpcn0gb3IgZGllICJVbmFibGUgdG8gY2hkaXIgJHdvcmstPnt0bXBEaXJ9XG4iOworCisgICAgcmV0dXJuICR3b3JrLT57dG1wRGlyfTsKK30KKworIyBDbGVhbiB1cCBhIHByZXZpb3VzbHkgc2V0dXBUbXBEaXIuICBSZXN0b3JlIHByZXZpb3VzIHdvcmsgdHJlZSBpZgorIyBhcHByb3ByaWF0ZS4KK3N1YiBjbGVhbnVwVG1wRGlyCit7CisgICAgaWYgKCAhZGVmaW5lZCgkd29yay0+e3RtcERpcn0pICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oImNsZWFudXAgdG1wZGlyIHRoYXQgaGFzIG5vdCBiZWVuIHNldHVwIik7CisgICAgICAgIGRpZSAiQ2xlYW51cCB0bXBEaXIgdGhhdCBoYXMgbm90IGJlZW4gc2V0dXBcbiI7CisgICAgfQorICAgIGlmKCBkZWZpbmVkKCR3b3JrLT57c3RhdGV9KSApCisgICAgeworICAgICAgICBpZiggJHdvcmstPntzdGF0ZX0gPT0gMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoZGlyICR3b3JrLT57ZW1wdHlEaXJ9IG9yCisgICAgICAgICAgICAgICAgZGllICJVbmFibGUgdG8gY2hkaXIgdG8gJHdvcmstPntlbXB0eURpcn1cbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoICR3b3JrLT57c3RhdGV9ID09IDIgKQorICAgICAgICB7CisgICAgICAgICAgICBjaGRpciAkd29yay0+e3dvcmtEaXJ9IG9yCisgICAgICAgICAgICAgICAgZGllICJVbmFibGUgdG8gY2hkaXIgdG8gJHdvcmstPntlbXB0eURpcn1cbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJJbmNvbnNpc3RlbnQgd29yayBkaXIgc3RhdGUiKTsKKyAgICAgICAgICAgIGRpZSAiSW5jb25zaXN0ZW50IHdvcmsgZGlyIHN0YXRlXG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNoZGlyICIvIiBvciBkaWUgIlVuYWJsZSB0byBjaGRpciAnLydcbiI7CisgICAgfQorfQorCisjIEdpdmVuIGEgcGF0aCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGtvcHRzCisjIHRoYXQgc2hvdWxkIGdvIGludG8gdGhhdCBwYXRoJ3MgRW50cmllcyBsaW5lLiAgRm9yIGV4YW1wbGUsIGEgYmluYXJ5CisjIGZpbGUgc2hvdWxkIGdldCAta2IuCitzdWIga29wdHNfZnJvbV9wYXRoCit7CisgICAgbXkgKCRwYXRoLCAkc3JjVHlwZSwgJG5hbWUpID0gQF87CisKKyAgICBpZiAoIGRlZmluZWQgKCAkY2ZnLT57Z2l0Y3ZzfXt1c2VjcmxmYXR0cn0gKSBhbmQKKyAgICAgICAgICRjZmctPntnaXRjdnN9e3VzZWNybGZhdHRyfSA9fiAvXHMqKDF8dHJ1ZXx5ZXMpXHMqJC9pICkKKyAgICB7CisgICAgICAgIG15ICgkdmFsKSA9IGNoZWNrX2F0dHIoICJ0ZXh0IiwgJHBhdGggKTsKKyAgICAgICAgaWYgKCAkdmFsIGVxICJ1bnNwZWNpZmllZCIgKQorICAgICAgICB7CisgICAgICAgICAgICAkdmFsID0gY2hlY2tfYXR0ciggImNybGYiLCAkcGF0aCApOworICAgICAgICB9CisgICAgICAgIGlmICggJHZhbCBlcSAidW5zZXQiICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICIta2IiCisgICAgICAgIH0KKyAgICAgICAgZWxzaWYgKCBjaGVja19hdHRyKCAiZW9sIiwgJHBhdGggKSBuZSAidW5zcGVjaWZpZWQiIHx8CisgICAgICAgICAgICAgICAgJHZhbCBlcSAic2V0IiB8fCAkdmFsIGVxICJpbnB1dCIgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT5pbmZvKCJVbnJlY29nbml6ZWQgY2hlY2tfYXR0ciBjcmxmICRwYXRoIDogJHZhbCIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCBkZWZpbmVkICggJGNmZy0+e2dpdGN2c317YWxsYmluYXJ5fSApICkKKyAgICB7CisgICAgICAgIGlmKCAoJGNmZy0+e2dpdGN2c317YWxsYmluYXJ5fSA9fiAvXlxzKigxfHRydWV8eWVzKVxzKiQvaSkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIi1rYiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoICgkY2ZnLT57Z2l0Y3ZzfXthbGxiaW5hcnl9ID1+IC9eXHMqZ3Vlc3NccyokL2kpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICRzcmNUeXBlIGVxICJzaGExT3ItayIgJiYKKyAgICAgICAgICAgICAgICAhZGVmaW5lZCgkbmFtZSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG15ICgkcmV0KT0kc3RhdGUtPntlbnRyaWVzfXskcGF0aH17b3B0aW9uc307CisgICAgICAgICAgICAgICAgaWYoICFkZWZpbmVkKCRyZXQpICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRyZXQ9JHN0YXRlLT57b3B0fXtrfTsKKyAgICAgICAgICAgICAgICAgICAgaWYoZGVmaW5lZCgkcmV0KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgJHJldD0iLWskcmV0IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICRyZXQ9IiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoICEgKCRyZXQ9fi9eKHwta2J8LWtrdnwta2t2bHwta2t8LWtvfC1rdikkLykgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkUgQmFkIC1rIG9wdGlvblxuIjsKKyAgICAgICAgICAgICAgICAgICAgJGxvZy0+d2FybigiQmFkIC1rIG9wdGlvbjogJHJldCIpOworICAgICAgICAgICAgICAgICAgICBkaWUgIkVycm9yOiBCYWQgLWsgb3B0aW9uOiAkcmV0XG4iOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiAkcmV0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCBpc19iaW5hcnkoJHNyY1R5cGUsJG5hbWUpICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCIuLi4gYXMgYmluYXJ5Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiLWtiIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIi4uLiBhcyB0ZXh0Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICMgUmV0dXJuICIiIHRvIGdpdmUgbm8gc3BlY2lhbCB0cmVhdG1lbnQgdG8gYW55IHBhdGgKKyAgICByZXR1cm4gIiI7Cit9CisKK3N1YiBjaGVja19hdHRyCit7CisgICAgbXkgKCRhdHRyLCRwYXRoKSA9IEBfOworICAgIGVuc3VyZVdvcmtUcmVlKCk7CisgICAgaWYgKCBvcGVuIG15ICRmaCwgJy18JywgImdpdCIsICJjaGVjay1hdHRyIiwgJGF0dHIsICItLSIsICRwYXRoICkKKyAgICB7CisgICAgICAgIG15ICR2YWwgPSA8JGZoPjsKKyAgICAgICAgY2xvc2UgJGZoOworICAgICAgICAkdmFsID1+IHMvLio6IChbXjpcclxuXSopXHMqJC8kMS87CisgICAgICAgIHJldHVybiAkdmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gdW5kZWY7CisgICAgfQorfQorCisjIFRoaXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgaGV1cmlzdGljcyBhcyBjb252ZXJ0LmM6aXNfYmluYXJ5KCkgYW5kIHJlbGF0ZWQuCisjIE5vdGUgdGhhdCB0aGUgYmFyZSBDUiB0ZXN0IGlzIGRvbmUgYnkgY2FsbGVycyBpbiBjb252ZXJ0LmMuCitzdWIgaXNfYmluYXJ5Cit7CisgICAgbXkgKCRzcmNUeXBlLCRuYW1lKSA9IEBfOworICAgICRsb2ctPmRlYnVnKCJpc19iaW5hcnkoJHNyY1R5cGUsJG5hbWUpIik7CisKKyAgICAjIE1pbmltaXplIGFtb3VudCBvZiBpbnRlcnByZXRlZCBjb2RlIHJ1biBpbiB0aGUgaW5uZXIgcGVyLWNoYXJhY3RlcgorICAgICMgbG9vcCBmb3IgbGFyZ2UgZmlsZXMsIGJ5IHRvdGFsbGluZyBlYWNoIGNoYXJhY3RlciB2YWx1ZSBhbmQKKyAgICAjIHRoZW4gYW5hbHl6aW5nIHRoZSB0b3RhbHMuCisgICAgbXkgQGNvdW50czsKKyAgICBteSAkaTsKKyAgICBmb3IoJGk9MDskaTwyNTY7JGkrKykKKyAgICB7CisgICAgICAgICRjb3VudHNbJGldPTA7CisgICAgfQorCisgICAgbXkgJGZoID0gb3Blbl9ibG9iX29yX2RpZSgkc3JjVHlwZSwkbmFtZSk7CisgICAgbXkgJGxpbmU7CisgICAgd2hpbGUoIGRlZmluZWQoJGxpbmU9PCRmaD4pICkKKyAgICB7CisgICAgICAgICMgQW55ICdcMCcgYW5kIGJhcmUgQ1IgYXJlIGNvbnNpZGVyZWQgYmluYXJ5LgorICAgICAgICBpZiggJGxpbmUgPX4gL1wwfChcclteXG5dKS8gKQorICAgICAgICB7CisgICAgICAgICAgICBjbG9zZSgkZmgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICAjIENvdW50IHVwIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBsaW5lOgorICAgICAgICBteSAkbGVuPWxlbmd0aCgkbGluZSk7CisgICAgICAgIGZvcigkaT0wOyRpPCRsZW47JGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgJGNvdW50c1tvcmQoc3Vic3RyKCRsaW5lLCRpLDEpKV0rKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZSAkZmg7CisKKyAgICAjIERvbid0IGNvdW50IENSIGFuZCBMRiBhcyBlaXRoZXIgcHJpbnRhYmxlL25vbnByaW50YWJsZQorICAgICRjb3VudHNbb3JkKCJcbiIpXT0wOworICAgICRjb3VudHNbb3JkKCJcciIpXT0wOworCisgICAgIyBDYXRlZ29yaXplIGluZGl2aWR1YWwgY2hhcmFjdGVyIGNvdW50IGludG8gcHJpbnRhYmxlIGFuZCBub25wcmludGFibGU6CisgICAgbXkgJHByaW50YWJsZT0wOworICAgIG15ICRub25wcmludGFibGU9MDsKKyAgICBmb3IoJGk9MDskaTwyNTY7JGkrKykKKyAgICB7CisgICAgICAgIGlmKCAkaSA8IDMyICYmCisgICAgICAgICAgICAkaSAhPSBvcmQoIlxiIikgJiYKKyAgICAgICAgICAgICRpICE9IG9yZCgiXHQiKSAmJgorICAgICAgICAgICAgJGkgIT0gMDMzICYmICAgICAgICMgRVNDCisgICAgICAgICAgICAkaSAhPSAwMTQgKSAgICAgICAgIyBGRgorICAgICAgICB7CisgICAgICAgICAgICAkbm9ucHJpbnRhYmxlKz0kY291bnRzWyRpXTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggJGk9PTEyNyApICAjIERFTAorICAgICAgICB7CisgICAgICAgICAgICAkbm9ucHJpbnRhYmxlKz0kY291bnRzWyRpXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRwcmludGFibGUrPSRjb3VudHNbJGldOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICgkcHJpbnRhYmxlID4+IDcpIDwgJG5vbnByaW50YWJsZTsKK30KKworIyBSZXR1cm5zIG9wZW4gZmlsZSBoYW5kbGUuICBQb3NzaWJsZSBpbnZvY2F0aW9uczoKKyMgIC0gb3Blbl9ibG9iX29yX2RpZSgiZmlsZSIsJGZpbGVuYW1lKTsKKyMgIC0gb3Blbl9ibG9iX29yX2RpZSgic2hhMSIsJGZpbGVoYXNoKTsKK3N1YiBvcGVuX2Jsb2Jfb3JfZGllCit7CisgICAgbXkgKCRzcmNUeXBlLCRuYW1lKSA9IEBfOworICAgIG15ICgkZmgpOworICAgIGlmKCAkc3JjVHlwZSBlcSAiZmlsZSIgKQorICAgIHsKKyAgICAgICAgaWYoICFvcGVuICRmaCwiPCIsJG5hbWUgKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJVbmFibGUgdG8gb3BlbiBmaWxlICRuYW1lOiAkISIpOworICAgICAgICAgICAgZGllICJVbmFibGUgdG8gb3BlbiBmaWxlICRuYW1lOiAkIVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZiggJHNyY1R5cGUgZXEgInNoYTEiIHx8ICRzcmNUeXBlIGVxICJzaGExT3ItayIgKQorICAgIHsKKyAgICAgICAgdW5sZXNzICggZGVmaW5lZCAoICRuYW1lICkgYW5kICRuYW1lID1+IC9eW2EtekEtWjAtOV17NDB9JC8gKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJOZWVkIGZpbGVoYXNoIik7CisgICAgICAgICAgICBkaWUgIk5lZWQgZmlsZWhhc2hcbiI7CisgICAgICAgIH0KKworICAgICAgICBteSAkdHlwZSA9IGBnaXQgY2F0LWZpbGUgLXQgJG5hbWVgOworICAgICAgICBjaG9tcCAkdHlwZTsKKworICAgICAgICB1bmxlc3MgKCBkZWZpbmVkICggJHR5cGUgKSBhbmQgJHR5cGUgZXEgImJsb2IiICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiSW52YWxpZCB0eXBlICckdHlwZScgZm9yICckbmFtZSciKTsKKyAgICAgICAgICAgIGRpZSAoICJJbnZhbGlkIHR5cGUgJyR0eXBlJyAoZXhwZWN0ZWQgJ2Jsb2InKSIgKQorICAgICAgICB9CisKKyAgICAgICAgbXkgJHNpemUgPSBgZ2l0IGNhdC1maWxlIC1zICRuYW1lYDsKKyAgICAgICAgY2hvbXAgJHNpemU7CisKKyAgICAgICAgJGxvZy0+ZGVidWcoIm9wZW5fYmxvYl9vcl9kaWUoJG5hbWUpIHNpemU9JHNpemUsIHR5cGU9JHR5cGUiKTsKKworICAgICAgICB1bmxlc3MoIG9wZW4gJGZoLCAnLXwnLCAiZ2l0IiwgImNhdC1maWxlIiwgImJsb2IiLCAkbmFtZSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPndhcm4oIlVuYWJsZSB0byBvcGVuIHNoYTEgJG5hbWUiKTsKKyAgICAgICAgICAgIGRpZSAiVW5hYmxlIHRvIG9wZW4gc2hhMSAkbmFtZVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAkbG9nLT53YXJuKCJVbmtub3duIHR5cGUgb2YgYmxvYiBzb3VyY2U6ICRzcmNUeXBlIik7CisgICAgICAgIGRpZSAiVW5rbm93biB0eXBlIG9mIGJsb2Igc291cmNlOiAkc3JjVHlwZVxuIjsKKyAgICB9CisgICAgcmV0dXJuICRmaDsKK30KKworIyBHZW5lcmF0ZSBhIENWUyBhdXRob3IgbmFtZSBmcm9tIEdpdCBhdXRob3IgaW5mb3JtYXRpb24sIGJ5IHRha2luZyB0aGUgbG9jYWwKKyMgcGFydCBvZiB0aGUgZW1haWwgYWRkcmVzcyBhbmQgcmVwbGFjaW5nIGNoYXJhY3RlcnMgbm90IGluIHRoZSBQb3J0YWJsZQorIyBGaWxlbmFtZSBDaGFyYWN0ZXIgU2V0IChzZWUgSUVFRSBTdGQgMTAwMy4xLTIwMDEsIDMuMjc2KSBieSB1bmRlcnNjb3Jlcy4gQ1ZTCisjIExvZ2luIG5hbWVzIGFyZSBVbml4IGxvZ2luIG5hbWVzLCB3aGljaCBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byB0aGlzCisjIGNoYXJhY3RlciBzZXQuCitzdWIgY3ZzX2F1dGhvcgoreworICAgIG15ICRhdXRob3JfbGluZSA9IHNoaWZ0OworICAgIChteSAkYXV0aG9yKSA9ICRhdXRob3JfbGluZSA9fiAvPChbXkA+XSopLzsKKworICAgICRhdXRob3IgPX4gcy9bXi1hLXpBLVowLTlfLl0vXy9nOworICAgICRhdXRob3IgPX4gcy9eLS9fLzsKKworICAgICRhdXRob3I7Cit9CisKKworc3ViIGRlc2NyYW1ibGUKK3sKKyAgICAjIFRoaXMgdGFibGUgaXMgZnJvbSBzcmMvc2NyYW1ibGUuYyBpbiB0aGUgQ1ZTIHNvdXJjZQorICAgIG15IEBTSElGVFMgPSAoCisgICAgICAgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisgICAgICAgIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLAorICAgICAgICAxMTQsMTIwLCA1MywgNzksIDk2LDEwOSwgNzIsMTA4LCA3MCwgNjQsIDc2LCA2NywxMTYsIDc0LCA2OCwgODcsCisgICAgICAgIDExMSwgNTIsIDc1LDExOSwgNDksIDM0LCA4MiwgODEsIDk1LCA2NSwxMTIsIDg2LDExOCwxMTAsMTIyLDEwNSwKKyAgICAgICAgNDEsIDU3LCA4MywgNDMsIDQ2LDEwMiwgNDAsIDg5LCAzOCwxMDMsIDQ1LCA1MCwgNDIsMTIzLCA5MSwgMzUsCisgICAgICAgIDEyNSwgNTUsIDU0LCA2NiwxMjQsMTI2LCA1OSwgNDcsIDkyLCA3MSwxMTUsIDc4LCA4OCwxMDcsMTA2LCA1NiwKKyAgICAgICAgMzYsMTIxLDExNywxMDQsMTAxLDEwMCwgNjksIDczLCA5OSwgNjMsIDk0LCA5MywgMzksIDM3LCA2MSwgNDgsCisgICAgICAgIDU4LDExMywgMzIsIDkwLCA0NCwgOTgsIDYwLCA1MSwgMzMsIDk3LCA2MiwgNzcsIDg0LCA4MCwgODUsMjIzLAorICAgICAgICAyMjUsMjE2LDE4NywxNjYsMjI5LDE4OSwyMjIsMTg4LDE0MSwyNDksMTQ4LDIwMCwxODQsMTM2LDI0OCwxOTAsCisgICAgICAgIDE5OSwxNzAsMTgxLDIwNCwxMzgsMjMyLDIxOCwxODMsMjU1LDIzNCwyMjAsMjQ3LDIxMywyMDMsMjI2LDE5MywKKyAgICAgICAgMTc0LDE3MiwyMjgsMjUyLDIxNywyMDEsMTMxLDIzMCwxOTcsMjExLDE0NSwyMzgsMTYxLDE3OSwxNjAsMjEyLAorICAgICAgICAyMDcsMjIxLDI1NCwxNzMsMjAyLDE0NiwyMjQsMTUxLDE0MCwxOTYsMjA1LDEzMCwxMzUsMTMzLDE0MywyNDYsCisgICAgICAgIDE5MiwxNTksMjQ0LDIzOSwxODUsMTY4LDIxNSwxNDQsMTM5LDE2NSwxODAsMTU3LDE0NywxODYsMjE0LDE3NiwKKyAgICAgICAgMjI3LDIzMSwyMTksMTY5LDE3NSwxNTYsMjA2LDE5OCwxMjksMTY0LDE1MCwyMTAsMTU0LDE3NywxMzQsMTI3LAorICAgICAgICAxODIsMTI4LDE1OCwyMDgsMTYyLDEzMiwxNjcsMjA5LDE0OSwyNDEsMTUzLDI1MSwyMzcsMjM2LDE3MSwxOTUsCisgICAgICAgIDI0MywyMzMsMjUzLDI0MCwxOTQsMjUwLDE5MSwxNTUsMTQyLDEzNywyNDUsMjM1LDE2MywyNDIsMTc4LDE1MgorICAgICk7CisgICAgbXkgKCRzdHIpID0gQF87CisKKyAgICAjIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgdGhlIHNhbWUgcGFzc3dvcmQgZm9ybWF0IChBKSBoYXMgYmVlbgorICAgICMgdXNlZCBieSBDVlMgc2luY2UgdGhlIGJlZ2lubmluZyBvZiB0aW1lCisgICAgeworICAgICAgICBteSAkZm10ID0gc3Vic3RyKCRzdHIsIDAsIDEpOworICAgICAgICBkaWUgImludmFsaWQgcGFzc3dvcmQgZm9ybWF0IGAkZm10JyIgdW5sZXNzICRmbXQgZXEgJ0EnOworICAgIH0KKworICAgIG15IEBzdHIgPSB1bnBhY2sgIkMqIiwgc3Vic3RyKCRzdHIsIDEpOworICAgIG15ICRyZXQgPSBqb2luICcnLCBtYXAgeyBjaHIgJFNISUZUU1skX10gfSBAc3RyOworICAgIHJldHVybiAkcmV0OworfQorCisKK3BhY2thZ2UgR0lUQ1ZTOjpsb2c7CisKKyMjIyMKKyMjIyMgQ29weXJpZ2h0IFRoZSBPcGVuIFVuaXZlcnNpdHkgVUsgLSAyMDA2LgorIyMjIworIyMjIyBBdXRob3JzOiBNYXJ0eW4gU21pdGggICAgPG1hcnR5bkBjYXRhbHlzdC5uZXQubno+CisjIyMjICAgICAgICAgIE1hcnRpbiBMYW5naG9mZiA8bWFydGluQGxhcHRvcC5vcmc+CisjIyMjCisjIyMjCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKKz1oZWFkMSBOQU1FCisKK0dJVENWUzo6bG9nCisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIG1vZHVsZSBwcm92aWRlcyB2ZXJ5IGNydWRlIGxvZ2dpbmcgd2l0aCBhIHNpbWlsYXIgaW50ZXJmYWNlIHRvCitMb2c6OkxvZzRwZXJsCisKKz1oZWFkMSBNRVRIT0RTCisKKz1jdXQKKworPWhlYWQyIG5ldworCitDcmVhdGVzIGEgbmV3IGxvZyBvYmplY3QsIG9wdGlvbmFsbHkgeW91IGNhbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaGVyZSB0bworaW5kaWNhdGUgdGhlIGZpbGUgdG8gbG9nIHRvLiBJZiBubyBsb2cgZmlsZSBpcyBzcGVjaWZpZWQsIHlvdSBjYW4gc3BlY2lmeSBvbmUKK2xhdGVyIHdpdGggbWV0aG9kIHNldGZpbGUsIG9yIGluZGljYXRlIHlvdSBubyBsb25nZXIgd2FudCBsb2dnaW5nIHdpdGggbWV0aG9kCitub2ZpbGUuCisKK1VudGlsIG9uZSBvZiB0aGVzZSBtZXRob2RzIGlzIGNhbGxlZCwgYWxsIGxvZyBjYWxscyB3aWxsIGJ1ZmZlciBtZXNzYWdlcyByZWFkeQordG8gd3JpdGUgb3V0LgorCis9Y3V0CitzdWIgbmV3Cit7CisgICAgbXkgJGNsYXNzID0gc2hpZnQ7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisKKyAgICBteSAkc2VsZiA9IHt9OworCisgICAgYmxlc3MgJHNlbGYsICRjbGFzczsKKworICAgIGlmICggZGVmaW5lZCAoICRmaWxlbmFtZSApICkKKyAgICB7CisgICAgICAgIG9wZW4gJHNlbGYtPntmaH0sICI+PiIsICRmaWxlbmFtZSBvciBkaWUoIkNvdWxkbid0IG9wZW4gJyRmaWxlbmFtZScgZm9yIHdyaXRpbmcgOiAkISIpOworICAgIH0KKworICAgIHJldHVybiAkc2VsZjsKK30KKworPWhlYWQyIHNldGZpbGUKKworVGhpcyBtZXRob2RzIHRha2VzIGEgZmlsZW5hbWUsIGFuZCBhdHRlbXB0cyB0byBvcGVuIHRoYXQgZmlsZSBhcyB0aGUgbG9nIGZpbGUuCitJZiBzdWNjZXNzZnVsLCBhbGwgYnVmZmVyZWQgZGF0YSBpcyB3cml0dGVuIG91dCB0byB0aGUgZmlsZSwgYW5kIGFueSBmdXJ0aGVyCitsb2dnaW5nIGlzIHdyaXR0ZW4gZGlyZWN0bHkgdG8gdGhlIGZpbGUuCisKKz1jdXQKK3N1YiBzZXRmaWxlCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKKworICAgIGlmICggZGVmaW5lZCAoICRmaWxlbmFtZSApICkKKyAgICB7CisgICAgICAgIG9wZW4gJHNlbGYtPntmaH0sICI+PiIsICRmaWxlbmFtZSBvciBkaWUoIkNvdWxkbid0IG9wZW4gJyRmaWxlbmFtZScgZm9yIHdyaXRpbmcgOiAkISIpOworICAgIH0KKworICAgIHJldHVybiB1bmxlc3MgKCBkZWZpbmVkICggJHNlbGYtPntidWZmZXJ9ICkgYW5kIHJlZiAkc2VsZi0+e2J1ZmZlcn0gZXEgIkFSUkFZIiApOworCisgICAgd2hpbGUgKCBteSAkbGluZSA9IHNoaWZ0IEB7JHNlbGYtPntidWZmZXJ9fSApCisgICAgeworICAgICAgICBwcmludCB7JHNlbGYtPntmaH19ICRsaW5lOworICAgIH0KK30KKworPWhlYWQyIG5vZmlsZQorCitUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgbm8gbG9nZ2luZyBpcyBnb2luZyB0byBiZSB1c2VkLiBJdCBmbHVzaGVzIGFueSBlbnRyaWVzIGluCit0aGUgaW50ZXJuYWwgYnVmZmVyLCBhbmQgc2V0cyBhIGZsYWcgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgZGF0YSBpcyBwdXQgdGhlcmUuCisKKz1jdXQKK3N1YiBub2ZpbGUKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworCisgICAgJHNlbGYtPntub2xvZ30gPSAxOworCisgICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQgKCAkc2VsZi0+e2J1ZmZlcn0gKSBhbmQgcmVmICRzZWxmLT57YnVmZmVyfSBlcSAiQVJSQVkiICk7CisKKyAgICAkc2VsZi0+e2J1ZmZlcn0gPSBbXTsKK30KKworPWhlYWQyIF9sb2dvcGVuCisKK0ludGVybmFsIG1ldGhvZC4gUmV0dXJucyB0cnVlIGlmIHRoZSBsb2cgZmlsZSBpcyBvcGVuLCBmYWxzZSBvdGhlcndpc2UuCisKKz1jdXQKK3N1YiBfbG9nb3BlbgoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisKKyAgICByZXR1cm4gMSBpZiAoIGRlZmluZWQgKCAkc2VsZi0+e2ZofSApIGFuZCByZWYgJHNlbGYtPntmaH0gZXEgIkdMT0IiICk7CisgICAgcmV0dXJuIDA7Cit9CisKKz1oZWFkMiBkZWJ1ZyBpbmZvIHdhcm4gZmF0YWwKKworVGhlc2UgZm91ciBtZXRob2RzIGFyZSB3cmFwcGVycyB0byBfbG9nLiBUaGV5IHByb3ZpZGUgdGhlIGFjdHVhbCBpbnRlcmZhY2UgZm9yCitsb2dnaW5nIGRhdGEuCisKKz1jdXQKK3N1YiBkZWJ1ZyB7IG15ICRzZWxmID0gc2hpZnQ7ICRzZWxmLT5fbG9nKCJkZWJ1ZyIsIEBfKTsgfQorc3ViIGluZm8gIHsgbXkgJHNlbGYgPSBzaGlmdDsgJHNlbGYtPl9sb2coImluZm8iICwgQF8pOyB9CitzdWIgd2FybiAgeyBteSAkc2VsZiA9IHNoaWZ0OyAkc2VsZi0+X2xvZygid2FybiIgLCBAXyk7IH0KK3N1YiBmYXRhbCB7IG15ICRzZWxmID0gc2hpZnQ7ICRzZWxmLT5fbG9nKCJmYXRhbCIsIEBfKTsgfQorCis9aGVhZDIgX2xvZworCitUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCBjYWxsZWQgYnkgdGhlIGxvZ2dpbmcgZnVuY3Rpb25zLiBJdCBnZW5lcmF0ZXMgYQordGltZXN0YW1wIGFuZCBwdXNoZXMgdGhlIGxvZ2dlZCBsaW5lIGVpdGhlciB0byBmaWxlLCBvciBpbnRlcm5hbCBidWZmZXIuCisKKz1jdXQKK3N1YiBfbG9nCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkbGV2ZWwgPSBzaGlmdDsKKworICAgIHJldHVybiBpZiAoICRzZWxmLT57bm9sb2d9ICk7CisKKyAgICBteSBAdGltZSA9IGxvY2FsdGltZTsKKyAgICBteSAkdGltZXN0cmluZyA9IHNwcmludGYoIiU0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQgOiAlLTVzIiwKKyAgICAgICAgJHRpbWVbNV0gKyAxOTAwLAorICAgICAgICAkdGltZVs0XSArIDEsCisgICAgICAgICR0aW1lWzNdLAorICAgICAgICAkdGltZVsyXSwKKyAgICAgICAgJHRpbWVbMV0sCisgICAgICAgICR0aW1lWzBdLAorICAgICAgICB1YyAkbGV2ZWwsCisgICAgKTsKKworICAgIGlmICggJHNlbGYtPl9sb2dvcGVuICkKKyAgICB7CisgICAgICAgIHByaW50IHskc2VsZi0+e2ZofX0gJHRpbWVzdHJpbmcgLiAiIC0gIiAuIGpvaW4oIiAiLEBfKSAuICJcbiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaCBAeyRzZWxmLT57YnVmZmVyfX0sICR0aW1lc3RyaW5nIC4gIiAtICIgLiBqb2luKCIgIixAXykgLiAiXG4iOworICAgIH0KK30KKworPWhlYWQyIERFU1RST1kKKworVGhpcyBtZXRob2Qgc2ltcGx5IGNsb3NlcyB0aGUgZmlsZSBoYW5kbGUgaWYgb25lIGlzIG9wZW4KKworPWN1dAorc3ViIERFU1RST1kKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworCisgICAgaWYgKCAkc2VsZi0+X2xvZ29wZW4gKQorICAgIHsKKyAgICAgICAgY2xvc2UgJHNlbGYtPntmaH07CisgICAgfQorfQorCitwYWNrYWdlIEdJVENWUzo6dXBkYXRlcjsKKworIyMjIworIyMjIyBDb3B5cmlnaHQgVGhlIE9wZW4gVW5pdmVyc2l0eSBVSyAtIDIwMDYuCisjIyMjCisjIyMjIEF1dGhvcnM6IE1hcnR5biBTbWl0aCAgICA8bWFydHluQGNhdGFseXN0Lm5ldC5uej4KKyMjIyMgICAgICAgICAgTWFydGluIExhbmdob2ZmIDxtYXJ0aW5AbGFwdG9wLm9yZz4KKyMjIyMKKyMjIyMKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBEQkk7CisKKz1oZWFkMSBNRVRIT0RTCisKKz1jdXQKKworPWhlYWQyIG5ldworCis9Y3V0CitzdWIgbmV3Cit7CisgICAgbXkgJGNsYXNzID0gc2hpZnQ7CisgICAgbXkgJGNvbmZpZyA9IHNoaWZ0OworICAgIG15ICRtb2R1bGUgPSBzaGlmdDsKKyAgICBteSAkbG9nID0gc2hpZnQ7CisKKyAgICBkaWUgIk5lZWQgdG8gc3BlY2lmeSBhIGdpdCByZXBvc2l0b3J5IiB1bmxlc3MgKCBkZWZpbmVkKCRjb25maWcpIGFuZCAtZCAkY29uZmlnICk7CisgICAgZGllICJOZWVkIHRvIHNwZWNpZnkgYSBtb2R1bGUiIHVubGVzcyAoIGRlZmluZWQoJG1vZHVsZSkgKTsKKworICAgICRjbGFzcyA9IHJlZigkY2xhc3MpIHx8ICRjbGFzczsKKworICAgIG15ICRzZWxmID0ge307CisKKyAgICBibGVzcyAkc2VsZiwgJGNsYXNzOworCisgICAgJHNlbGYtPnt2YWxpZF90YWJsZXN9ID0geydyZXZpc2lvbicgPT4gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldmlzaW9uX2l4MScgPT4gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldmlzaW9uX2l4MicgPT4gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYWQnID0+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWFkX2l4MScgPT4gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMnID0+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21taXRtc2dzJyA9PiAxfTsKKworICAgICRzZWxmLT57bW9kdWxlfSA9ICRtb2R1bGU7CisgICAgJHNlbGYtPntnaXRfcGF0aH0gPSAkY29uZmlnIC4gIi8iOworCisgICAgJHNlbGYtPntsb2d9ID0gJGxvZzsKKworICAgIGRpZSAiR2l0IHJlcG8gJyRzZWxmLT57Z2l0X3BhdGh9JyBkb2Vzbid0IGV4aXN0IiB1bmxlc3MgKCAtZCAkc2VsZi0+e2dpdF9wYXRofSApOworCisgICAgJHNlbGYtPntkYmRyaXZlcn0gPSAkY2ZnLT57Z2l0Y3ZzfXskc3RhdGUtPnttZXRob2R9fXtkYmRyaXZlcn0gfHwKKyAgICAgICAgJGNmZy0+e2dpdGN2c317ZGJkcml2ZXJ9IHx8ICJTUUxpdGUiOworICAgICRzZWxmLT57ZGJuYW1lfSA9ICRjZmctPntnaXRjdnN9eyRzdGF0ZS0+e21ldGhvZH19e2RibmFtZX0gfHwKKyAgICAgICAgJGNmZy0+e2dpdGN2c317ZGJuYW1lfSB8fCAiJUdnaXRjdnMuJW0uc3FsaXRlIjsKKyAgICAkc2VsZi0+e2RidXNlcn0gPSAkY2ZnLT57Z2l0Y3ZzfXskc3RhdGUtPnttZXRob2R9fXtkYnVzZXJ9IHx8CisgICAgICAgICRjZmctPntnaXRjdnN9e2RidXNlcn0gfHwgIiI7CisgICAgJHNlbGYtPntkYnBhc3N9ID0gJGNmZy0+e2dpdGN2c317JHN0YXRlLT57bWV0aG9kfX17ZGJwYXNzfSB8fAorICAgICAgICAkY2ZnLT57Z2l0Y3ZzfXtkYnBhc3N9IHx8ICIiOworICAgICRzZWxmLT57ZGJ0YWJsZW5hbWVwcmVmaXh9ID0gJGNmZy0+e2dpdGN2c317JHN0YXRlLT57bWV0aG9kfX17ZGJ0YWJsZW5hbWVwcmVmaXh9IHx8CisgICAgICAgICRjZmctPntnaXRjdnN9e2RidGFibGVuYW1lcHJlZml4fSB8fCAiIjsKKyAgICBteSAlbWFwcGluZyA9ICggbSA9PiAkbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICBhID0+ICRzdGF0ZS0+e21ldGhvZH0sCisgICAgICAgICAgICAgICAgICAgIHUgPT4gZ2V0bG9naW4gfHwgZ2V0cHd1aWQoJDwpIHx8ICQ8LAorICAgICAgICAgICAgICAgICAgICBHID0+ICRzZWxmLT57Z2l0X3BhdGh9LAorICAgICAgICAgICAgICAgICAgICBnID0+IG1hbmdsZV9kaXJuYW1lKCRzZWxmLT57Z2l0X3BhdGh9KSwKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAkc2VsZi0+e2RibmFtZX0gPX4gcy8lKFttYXVHZ10pLyRtYXBwaW5neyQxfS9lZzsKKyAgICAkc2VsZi0+e2RidXNlcn0gPX4gcy8lKFttYXVHZ10pLyRtYXBwaW5neyQxfS9lZzsKKyAgICAkc2VsZi0+e2RidGFibGVuYW1lcHJlZml4fSA9fiBzLyUoW21hdUdnXSkvJG1hcHBpbmd7JDF9L2VnOworICAgICRzZWxmLT57ZGJ0YWJsZW5hbWVwcmVmaXh9ID0gbWFuZ2xlX3RhYmxlbmFtZSgkc2VsZi0+e2RidGFibGVuYW1lcHJlZml4fSk7CisKKyAgICBkaWUgIkludmFsaWQgY2hhciAnOicgaW4gZGJkcml2ZXIiIGlmICRzZWxmLT57ZGJkcml2ZXJ9ID1+IC86LzsKKyAgICBkaWUgIkludmFsaWQgY2hhciAnOycgaW4gZGJuYW1lIiBpZiAkc2VsZi0+e2RibmFtZX0gPX4gLzsvOworICAgICRzZWxmLT57ZGJofSA9IERCSS0+Y29ubmVjdCgiZGJpOiRzZWxmLT57ZGJkcml2ZXJ9OmRibmFtZT0kc2VsZi0+e2RibmFtZX0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+e2RidXNlcn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT57ZGJwYXNzfSk7CisgICAgZGllICJFcnJvciBjb25uZWN0aW5nIHRvIGRhdGFiYXNlXG4iIHVubGVzcyBkZWZpbmVkICRzZWxmLT57ZGJofTsKKworICAgICRzZWxmLT57dGFibGVzfSA9IHt9OworICAgIGZvcmVhY2ggbXkgJHRhYmxlICgga2V5cyAleyRzZWxmLT57ZGJofS0+dGFibGVfaW5mbyh1bmRlZix1bmRlZix1bmRlZiwnVEFCTEUnKS0+ZmV0Y2hhbGxfaGFzaHJlZignVEFCTEVfTkFNRScpfSApCisgICAgeworICAgICAgICAkc2VsZi0+e3RhYmxlc317JHRhYmxlfSA9IDE7CisgICAgfQorCisgICAgIyBDb25zdHJ1Y3QgdGhlIHJldmlzaW9uIHRhYmxlIGlmIHJlcXVpcmVkCisgICAgdW5sZXNzICggJHNlbGYtPnt0YWJsZXN9eyRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uIil9ICkKKyAgICB7CisgICAgICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJyZXZpc2lvbiIpOworICAgICAgICBteSAkaXgxbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uX2l4MSIpOworICAgICAgICBteSAkaXgybmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uX2l4MiIpOworICAgICAgICAkc2VsZi0+e2RiaH0tPmRvKCIKKyAgICAgICAgICAgIENSRUFURSBUQUJMRSAkdGFibGVuYW1lICgKKyAgICAgICAgICAgICAgICBuYW1lICAgICAgIFRFWFQgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgcmV2aXNpb24gICBJTlRFR0VSIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIGZpbGVoYXNoICAgVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICBjb21taXRoYXNoIFRFWFQgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgYXV0aG9yICAgICBURVhUIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIG1vZGlmaWVkICAgVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICBtb2RlICAgICAgIFRFWFQgTk9UIE5VTEwKKyAgICAgICAgICAgICkKKyAgICAgICAgIik7CisgICAgICAgICRzZWxmLT57ZGJofS0+ZG8oIgorICAgICAgICAgICAgQ1JFQVRFIElOREVYICRpeDFuYW1lCisgICAgICAgICAgICBPTiAkdGFibGVuYW1lIChuYW1lLHJldmlzaW9uKQorICAgICAgICAiKTsKKyAgICAgICAgJHNlbGYtPntkYmh9LT5kbygiCisgICAgICAgICAgICBDUkVBVEUgSU5ERVggJGl4Mm5hbWUKKyAgICAgICAgICAgIE9OICR0YWJsZW5hbWUgKG5hbWUsY29tbWl0aGFzaCkKKyAgICAgICAgIik7CisgICAgfQorCisgICAgIyBDb25zdHJ1Y3QgdGhlIGhlYWQgdGFibGUgaWYgcmVxdWlyZWQKKyAgICB1bmxlc3MgKCAkc2VsZi0+e3RhYmxlc317JHNlbGYtPnRhYmxlbmFtZSgiaGVhZCIpfSApCisgICAgeworICAgICAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiaGVhZCIpOworICAgICAgICBteSAkaXgxbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoImhlYWRfaXgxIik7CisgICAgICAgICRzZWxmLT57ZGJofS0+ZG8oIgorICAgICAgICAgICAgQ1JFQVRFIFRBQkxFICR0YWJsZW5hbWUgKAorICAgICAgICAgICAgICAgIG5hbWUgICAgICAgVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICByZXZpc2lvbiAgIElOVEVHRVIgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgZmlsZWhhc2ggICBURVhUIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIGNvbW1pdGhhc2ggVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICBhdXRob3IgICAgIFRFWFQgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgbW9kaWZpZWQgICBURVhUIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIG1vZGUgICAgICAgVEVYVCBOT1QgTlVMTAorICAgICAgICAgICAgKQorICAgICAgICAiKTsKKyAgICAgICAgJHNlbGYtPntkYmh9LT5kbygiCisgICAgICAgICAgICBDUkVBVEUgSU5ERVggJGl4MW5hbWUKKyAgICAgICAgICAgIE9OICR0YWJsZW5hbWUgKG5hbWUpCisgICAgICAgICIpOworICAgIH0KKworICAgICMgQ29uc3RydWN0IHRoZSBwcm9wZXJ0aWVzIHRhYmxlIGlmIHJlcXVpcmVkCisgICAgdW5sZXNzICggJHNlbGYtPnt0YWJsZXN9eyRzZWxmLT50YWJsZW5hbWUoInByb3BlcnRpZXMiKX0gKQorICAgIHsKKyAgICAgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInByb3BlcnRpZXMiKTsKKyAgICAgICAgJHNlbGYtPntkYmh9LT5kbygiCisgICAgICAgICAgICBDUkVBVEUgVEFCTEUgJHRhYmxlbmFtZSAoCisgICAgICAgICAgICAgICAga2V5ICAgICAgICBURVhUIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgICAgICAgICAgICAgIHZhbHVlICAgICAgVEVYVAorICAgICAgICAgICAgKQorICAgICAgICAiKTsKKyAgICB9CisKKyAgICAjIENvbnN0cnVjdCB0aGUgY29tbWl0bXNncyB0YWJsZSBpZiByZXF1aXJlZAorICAgIHVubGVzcyAoICRzZWxmLT57dGFibGVzfXskc2VsZi0+dGFibGVuYW1lKCJjb21taXRtc2dzIil9ICkKKyAgICB7CisgICAgICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJjb21taXRtc2dzIik7CisgICAgICAgICRzZWxmLT57ZGJofS0+ZG8oIgorICAgICAgICAgICAgQ1JFQVRFIFRBQkxFICR0YWJsZW5hbWUgKAorICAgICAgICAgICAgICAgIGtleSAgICAgICAgVEVYVCBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICAgICAgICAgICAgICB2YWx1ZSAgICAgIFRFWFQKKyAgICAgICAgICAgICkKKyAgICAgICAgIik7CisgICAgfQorCisgICAgcmV0dXJuICRzZWxmOworfQorCis9aGVhZDIgdGFibGVuYW1lCisKKz1jdXQKK3N1YiB0YWJsZW5hbWUKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gc2hpZnQ7CisKKyAgICBpZiAoZXhpc3RzICRzZWxmLT57dmFsaWRfdGFibGVzfXskbmFtZX0pIHsKKyAgICAgICAgcmV0dXJuICRzZWxmLT57ZGJ0YWJsZW5hbWVwcmVmaXh9IC4gJG5hbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHVuZGVmOworICAgIH0KK30KKworPWhlYWQyIHVwZGF0ZQorCis9Y3V0CitzdWIgdXBkYXRlCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKworICAgICMgZmlyc3QgbGV0cyBnZXQgdGhlIGNvbW1pdCBsaXN0CisgICAgJEVOVntHSVRfRElSfSA9ICRzZWxmLT57Z2l0X3BhdGh9OworCisgICAgbXkgJGNvbW1pdHNoYTEgPSBgZ2l0IHJldi1wYXJzZSAkc2VsZi0+e21vZHVsZX1gOworICAgIGNob21wICRjb21taXRzaGExOworCisgICAgbXkgJGNvbW1pdGluZm8gPSBgZ2l0IGNhdC1maWxlIGNvbW1pdCAkc2VsZi0+e21vZHVsZX0gMj4mMWA7CisgICAgdW5sZXNzICggJGNvbW1pdGluZm8gPX4gL3RyZWVccytbYS16QS1aMC05XXs0MH0vICkKKyAgICB7CisgICAgICAgIGRpZSgiSW52YWxpZCBtb2R1bGUgJyRzZWxmLT57bW9kdWxlfSciKTsKKyAgICB9CisKKworICAgIG15ICRnaXRfbG9nOworICAgIG15ICRsYXN0Y29tbWl0ID0gJHNlbGYtPl9nZXRfcHJvcCgibGFzdF9jb21taXQiKTsKKworICAgIGlmIChkZWZpbmVkICRsYXN0Y29tbWl0ICYmICRsYXN0Y29tbWl0IGVxICRjb21taXRzaGExKSB7ICMgdXAtdG8tZGF0ZQorICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgIyBTdGFydCBleGNsdXNpdmUgbG9jayBoZXJlLi4uCisgICAgJHNlbGYtPntkYmh9LT5iZWdpbl93b3JrKCkgb3IgZGllICJDYW5ub3QgbG9jayBkYXRhYmFzZSBmb3IgQkVHSU4iOworCisgICAgIyBUT0RPOiBsb2cgcHJvY2Vzc2luZyBpcyBtZW1vcnkgYm91bmQKKyAgICAjIGlmIHdlIGNhbiBwYXJzZSBpbnRvIGEgMm5kIGZpbGUgdGhhdCBpcyBpbiByZXZlcnNlIG9yZGVyCisgICAgIyB3ZSBjYW4gcHJvYmFibHkgZG8gc29tZXRoaW5nIHJlYWxseSBlZmZpY2llbnQKKyAgICBteSBAZ2l0X2xvZ19wYXJhbXMgPSAoJy0tcHJldHR5JywgJy0tcGFyZW50cycsICctLXRvcG8tb3JkZXInKTsKKworICAgIGlmIChkZWZpbmVkICRsYXN0Y29tbWl0KSB7CisgICAgICAgIHB1c2ggQGdpdF9sb2dfcGFyYW1zLCAiJGxhc3Rjb21taXQuLiRzZWxmLT57bW9kdWxlfSI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaCBAZ2l0X2xvZ19wYXJhbXMsICRzZWxmLT57bW9kdWxlfTsKKyAgICB9CisgICAgIyBnaXQtcmV2LWxpc3QgaXMgdGhlIGJhY2tlbmQgLyBwbHVtYmluZyB2ZXJzaW9uIG9mIGdpdC1sb2cKKyAgICBvcGVuKEdJVExPRywgJy18JywgJ2dpdCcsICdyZXYtbGlzdCcsIEBnaXRfbG9nX3BhcmFtcykgb3IgZGllICJDYW5ub3QgY2FsbCBnaXQtcmV2LWxpc3Q6ICQhIjsKKworICAgIG15IEBjb21taXRzOworCisgICAgbXkgJWNvbW1pdCA9ICgpOworCisgICAgd2hpbGUgKCA8R0lUTE9HPiApCisgICAgeworICAgICAgICBjaG9tcDsKKyAgICAgICAgaWYgKG0vXmNvbW1pdFxzKyguKikkLykgeworICAgICAgICAgICAgIyBvbiBeY29tbWl0IGxpbmVzIHB1dCB0aGUganVzdCBzZWVuIGNvbW1pdCBpbiB0aGUgc3RhY2sKKyAgICAgICAgICAgICMgYW5kIHByaW1lIHRoaW5ncyBmb3IgdGhlIG5leHQgb25lCisgICAgICAgICAgICBpZiAoa2V5cyAlY29tbWl0KSB7CisgICAgICAgICAgICAgICAgbXkgJWNvcHkgPSAlY29tbWl0OworICAgICAgICAgICAgICAgIHVuc2hpZnQgQGNvbW1pdHMsIFwlY29weTsKKyAgICAgICAgICAgICAgICAlY29tbWl0ID0gKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBteSBAcGFyZW50cyA9IHNwbGl0KG0vXHMrLywgJDEpOworICAgICAgICAgICAgJGNvbW1pdHtoYXNofSA9IHNoaWZ0IEBwYXJlbnRzOworICAgICAgICAgICAgJGNvbW1pdHtwYXJlbnRzfSA9IFxAcGFyZW50czsKKyAgICAgICAgfSBlbHNpZiAobS9eKFx3Kz8pOlxzKyguKikkLyAmJiAhZXhpc3RzKCRjb21taXR7bWVzc2FnZX0pKSB7CisgICAgICAgICAgICAjIG9uIHJmYzgyMi1saWtlIGxpbmVzIHNlZW4gYmVmb3JlIHdlIHNlZSBhbnkgbWVzc2FnZSwKKyAgICAgICAgICAgICMgbG93ZXJjYXNlIHRoZSBlbnRyeSBhbmQgcHV0IGl0IGluIHRoZSBoYXNoIGFzIGtleS12YWx1ZQorICAgICAgICAgICAgJGNvbW1pdHtsYygkMSl9ID0gJDI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAjIG1lc3NhZ2UgbGluZXMgLSBza2lwIGluaXRpYWwgZW1wdHkgbGluZQorICAgICAgICAgICAgIyBhbmQgdHJpbSB3aGl0ZXNwYWNlCisgICAgICAgICAgICBpZiAoIWV4aXN0cygkY29tbWl0e21lc3NhZ2V9KSAmJiBtL15ccyokLykgeworICAgICAgICAgICAgICAgICMgZGVmaW5lIGl0IHRvIG1hcmsgdGhlIGVuZCBvZiBoZWFkZXJzCisgICAgICAgICAgICAgICAgJGNvbW1pdHttZXNzYWdlfSA9ICcnOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzL15ccysvLzsgcy9ccyskLy87ICMgdHJpbSB3cworICAgICAgICAgICAgJGNvbW1pdHttZXNzYWdlfSAuPSAkXyAuICJcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgY2xvc2UgR0lUTE9HOworCisgICAgdW5zaGlmdCBAY29tbWl0cywgXCVjb21taXQgaWYgKCBrZXlzICVjb21taXQgKTsKKworICAgICMgTm93IGFsbCB0aGUgY29tbWl0cyBhcmUgaW4gdGhlIEBjb21taXRzIGJ1Y2tldAorICAgICMgb3JkZXJlZCBieSB0aW1lIERFU0MuIGZvciBlYWNoIGNvbW1pdCB0aGF0IG5lZWRzIHByb2Nlc3NpbmcsCisgICAgIyBkZXRlcm1pbmUgd2hldGhlciBpdCdzIGZvbGxvd2luZyB0aGUgbGFzdCBoZWFkIHdlJ3ZlIHNlZW4gb3IgaWYKKyAgICAjIGl0J3Mgb24gaXRzIG93biBicmFuY2gsIGdyYWIgYSBmaWxlIGxpc3QsIGFuZCBhZGQgd2hhdGV2ZXIncyBjaGFuZ2VkCisgICAgIyBOT1RFOiAkbGFzdGNvbW1pdCByZWZlcnMgdG8gdGhlIGxhc3QgY29tbWl0IGZyb20gcHJldmlvdXMgcnVuCisgICAgIyAgICAgICAkbGFzdHBpY2tlZCBpcyB0aGUgbGFzdCBjb21taXQgd2UgcGlja2VkIGluIHRoaXMgcnVuCisgICAgbXkgJGxhc3RwaWNrZWQ7CisgICAgbXkgJGhlYWQgPSB7fTsKKyAgICBpZiAoZGVmaW5lZCAkbGFzdGNvbW1pdCkgeworICAgICAgICAkbGFzdHBpY2tlZCA9ICRsYXN0Y29tbWl0OworICAgIH0KKworICAgIG15ICRjb21taXR0b3RhbCA9IHNjYWxhcihAY29tbWl0cyk7CisgICAgbXkgJGNvbW1pdGNvdW50ID0gMDsKKworICAgICMgTG9hZCB0aGUgaGVhZCB0YWJsZSBpbnRvICRoZWFkIChmb3IgY2FjaGVkIGxvb2t1cHMgZHVyaW5nIHRoZSB1cGRhdGUgcHJvY2VzcykKKyAgICBmb3JlYWNoIG15ICRmaWxlICggQHskc2VsZi0+Z2V0aGVhZCgpfSApCisgICAgeworICAgICAgICAkaGVhZC0+eyRmaWxlLT57bmFtZX19ID0gJGZpbGU7CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkY29tbWl0ICggQGNvbW1pdHMgKQorICAgIHsKKyAgICAgICAgJHNlbGYtPntsb2d9LT5kZWJ1ZygiR0lUQ1ZTOjp1cGRhdGVyIC0gUHJvY2Vzc2luZyBjb21taXQgJGNvbW1pdC0+e2hhc2h9ICgiIC4gKCsrJGNvbW1pdGNvdW50KSAuICIgb2YgJGNvbW1pdHRvdGFsKSIpOworICAgICAgICBpZiAoZGVmaW5lZCAkbGFzdHBpY2tlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkbGFzdHBpY2tlZCwgQHskY29tbWl0LT57cGFyZW50c319KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAjIHNraXAsIHdlJ2xsIHNlZSB0aGlzIGRlbHRhCisgICAgICAgICAgICAgICAgIyBhcyBwYXJ0IG9mIGEgbWVyZ2UgbGF0ZXIKKyAgICAgICAgICAgICAgICAjIHdhcm4gInNraXBwaW5nIG9mZi10cmFjayAgJGNvbW1pdC0+e2hhc2h9XG4iOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9IGVsc2lmIChAeyRjb21taXQtPntwYXJlbnRzfX0gPiAxKSB7CisgICAgICAgICAgICAgICAgIyBpdCBpcyBhIG1lcmdlIGNvbW1pdCwgZm9yIGVhY2ggcGFyZW50IHRoYXQgaXMKKyAgICAgICAgICAgICAgICAjIG5vdCAkbGFzdHBpY2tlZCwgc2VlIGlmIHdlIGNhbiBnZXQgYSBsb2cKKyAgICAgICAgICAgICAgICAjIGZyb20gdGhlIG1lcmdlLWJhc2UgdG8gdGhhdCBwYXJlbnQgdG8gcHV0IGl0CisgICAgICAgICAgICAgICAgIyBpbiB0aGUgbWVzc2FnZSBhcyBhIG1lcmdlIHN1bW1hcnkuCisgICAgICAgICAgICAgICAgbXkgQHBhcmVudHMgPSBAeyRjb21taXQtPntwYXJlbnRzfX07CisgICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyZW50IChAcGFyZW50cykgeworICAgICAgICAgICAgICAgICAgICAjIGdpdC1tZXJnZS1iYXNlIGNhbiBwb3RlbnRpYWxseSAoYnV0IHJhcmVseSkgdGhyb3cKKyAgICAgICAgICAgICAgICAgICAgIyBzZXZlcmFsIGNhbmRpZGF0ZSBtZXJnZSBiYXNlcy4gbGV0J3MgYXNzdW1lCisgICAgICAgICAgICAgICAgICAgICMgdGhhdCB0aGUgZmlyc3Qgb25lIGlzIHRoZSBiZXN0IG9uZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJlbnQgZXEgJGxhc3RwaWNrZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgIG15ICRiYXNlID0gZXZhbCB7CisJCQkgICAgc2FmZV9waXBlX2NhcHR1cmUoJ2dpdCcsICdtZXJnZS1iYXNlJywKKwkJCQkJCSAkbGFzdHBpY2tlZCwgJHBhcmVudCk7CisJCSAgICB9OworCQkgICAgIyBUaGUgdHdvIGJyYW5jaGVzIG1heSBub3QgYmUgcmVsYXRlZCBhdCBhbGwsCisJCSAgICAjIGluIHdoaWNoIGNhc2UgbWVyZ2UgYmFzZSBzaW1wbHkgZmFpbHMgdG8gZmluZAorCQkgICAgIyBhbnksIGJ1dCB0aGF0J3MgT2suCisJCSAgICBuZXh0IGlmICgkQCk7CisKKyAgICAgICAgICAgICAgICAgICAgY2hvbXAgJGJhc2U7CisgICAgICAgICAgICAgICAgICAgIGlmICgkYmFzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbXkgQG1lcmdlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcHJpbnQgIndhbnQgdG8gbG9nIGJldHdlZW4gICRiYXNlICRwYXJlbnQgXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgb3BlbihHSVRMT0csICctfCcsICdnaXQnLCAnbG9nJywgJy0tcHJldHR5PW1lZGl1bScsICIkYmFzZS4uJHBhcmVudCIpCisJCQkgIG9yIGRpZSAiQ2Fubm90IGNhbGwgZ2l0LWxvZzogJCEiOworICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG1lcmdlZGhhc2g7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoPEdJVExPRz4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9tcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZWQgJG1lcmdlZGhhc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0vXmNvbW1pdFxzKyguKykkLykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1lcmdlZGhhc2ggPSAkMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGdyYWIgdGhlIGZpcnN0IGxpbmUgdGhhdCBsb29rcyBub24tcmZjODIyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWthIGhhcyBjb250ZW50IGFmdGVyIGxlYWRpbmcgc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0vXlxzKyhcUy4qKSQvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkdGl0bGUgPSAkMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aXRsZSA9IHN1YnN0cigkdGl0bGUsMCwxMDApOyAjIHRydW5jYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0IEBtZXJnZWQsICIkbWVyZ2VkaGFzaCAkdGl0bGUiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYgJG1lcmdlZGhhc2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSBHSVRMT0c7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQG1lcmdlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21taXQtPnttZXJnZW1zZ30gPSAkY29tbWl0LT57bWVzc2FnZX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbW1pdC0+e21lcmdlbXNnfSAuPSAiXG5TdW1tYXJ5IG9mIG1lcmdlZCBjb21taXRzOlxuXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHN1bW1hcnkgKEBtZXJnZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbW1pdC0+e21lcmdlbXNnfSAuPSAiXHQkc3VtbWFyeVxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbW1pdC0+e21lcmdlbXNnfSAuPSAiXG5cbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmludCAiTWVzc2FnZSBmb3IgJGNvbW1pdC0+e2hhc2h9IFxuJGNvbW1pdC0+e21lcmdlbXNnfSI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjIGNvbnZlcnQgdGhlIGRhdGUgdG8gQ1ZTLWhhcHB5IGZvcm1hdAorICAgICAgICAkY29tbWl0LT57ZGF0ZX0gPSAiJDIgJDEgJDQgJDMgJDUiIGlmICggJGNvbW1pdC0+e2RhdGV9ID1+IC9eXHcrXHMrKFx3KylccysoXGQrKVxzKyhcZCs6XGQrOlxkKylccysoXGQrKVxzKyhbKy1dXGQrKSQvICk7CisKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJGxhc3RwaWNrZWQgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG15ICRmaWxlcGlwZSA9IG9wZW4oRklMRUxJU1QsICctfCcsICdnaXQnLCAnZGlmZi10cmVlJywgJy16JywgJy1yJywgJGxhc3RwaWNrZWQsICRjb21taXQtPntoYXNofSkgb3IgZGllKCJDYW5ub3QgY2FsbCBnaXQtZGlmZi10cmVlIDogJCEiKTsKKwkgICAgbG9jYWwgKCQvKSA9ICJcMCI7CisgICAgICAgICAgICB3aGlsZSAoIDxGSUxFTElTVD4gKQorICAgICAgICAgICAgeworCQljaG9tcDsKKyAgICAgICAgICAgICAgICB1bmxlc3MgKCAvXjpcZHs2fVxzK1xkezN9KFxkKVxkezJ9XHMrW2EtekEtWjAtOV17NDB9XHMrKFthLXpBLVowLTldezQwfSlccysoXHcpJC9vICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRpZSgiQ291bGRuJ3QgcHJvY2VzcyBnaXQtZGlmZi10cmVlIGxpbmUgOiAkXyIpOworICAgICAgICAgICAgICAgIH0KKwkJbXkgKCRtb2RlLCAkaGFzaCwgJGNoYW5nZSkgPSAoJDEsICQyLCAkMyk7CisJCW15ICRuYW1lID0gPEZJTEVMSVNUPjsKKwkJY2hvbXAoJG5hbWUpOworCisgICAgICAgICAgICAgICAgIyAkbG9nLT5kZWJ1ZygiRmlsZSBtb2RlPSRtb2RlLCBoYXNoPSRoYXNoLCBjaGFuZ2U9JGNoYW5nZSwgbmFtZT0kbmFtZSIpOworCisgICAgICAgICAgICAgICAgbXkgJGdpdF9wZXJtcyA9ICIiOworICAgICAgICAgICAgICAgICRnaXRfcGVybXMgLj0gInIiIGlmICggJG1vZGUgJiA0ICk7CisgICAgICAgICAgICAgICAgJGdpdF9wZXJtcyAuPSAidyIgaWYgKCAkbW9kZSAmIDIgKTsKKyAgICAgICAgICAgICAgICAkZ2l0X3Blcm1zIC49ICJ4IiBpZiAoICRtb2RlICYgMSApOworICAgICAgICAgICAgICAgICRnaXRfcGVybXMgPSAicnciIGlmICggJGdpdF9wZXJtcyBlcSAiIiApOworCisgICAgICAgICAgICAgICAgaWYgKCAkY2hhbmdlIGVxICJEIiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAjJGxvZy0+ZGVidWcoIkRFTEVURSAgICRuYW1lIik7CisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JG5hbWV9ID0geworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PiAkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uID0+ICRoZWFkLT57JG5hbWV9e3JldmlzaW9ufSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlaGFzaCA9PiAiZGVsZXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRoYXNoID0+ICRjb21taXQtPntoYXNofSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0+ICRjb21taXQtPntkYXRlfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9PiAkY29tbWl0LT57YXV0aG9yfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPT4gJGdpdF9wZXJtcywKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmluc2VydF9yZXYoJG5hbWUsICRoZWFkLT57JG5hbWV9e3JldmlzaW9ufSwgJGhhc2gsICRjb21taXQtPntoYXNofSwgJGNvbW1pdC0+e2RhdGV9LCAkY29tbWl0LT57YXV0aG9yfSwgJGdpdF9wZXJtcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2lmICggJGNoYW5nZSBlcSAiTSIgfHwgJGNoYW5nZSBlcSAiVCIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIyRsb2ctPmRlYnVnKCJNT0RJRklFRCAkbmFtZSIpOworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRuYW1lfSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT4gJG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9PiAkaGVhZC0+eyRuYW1lfXtyZXZpc2lvbn0gKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWhhc2ggPT4gJGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRoYXNoID0+ICRjb21taXQtPntoYXNofSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0+ICRjb21taXQtPntkYXRlfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9PiAkY29tbWl0LT57YXV0aG9yfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPT4gJGdpdF9wZXJtcywKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmluc2VydF9yZXYoJG5hbWUsICRoZWFkLT57JG5hbWV9e3JldmlzaW9ufSwgJGhhc2gsICRjb21taXQtPntoYXNofSwgJGNvbW1pdC0+e2RhdGV9LCAkY29tbWl0LT57YXV0aG9yfSwgJGdpdF9wZXJtcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2lmICggJGNoYW5nZSBlcSAiQSIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIyRsb2ctPmRlYnVnKCJBRERFRCAgICAkbmFtZSIpOworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRuYW1lfSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT4gJG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9PiAkaGVhZC0+eyRuYW1lfXtyZXZpc2lvbn0gPyAkaGVhZC0+eyRuYW1lfXtyZXZpc2lvbn0rMSA6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlaGFzaCA9PiAkaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdGhhc2ggPT4gJGNvbW1pdC0+e2hhc2h9LAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPT4gJGNvbW1pdC0+e2RhdGV9LAorICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0+ICRjb21taXQtPnthdXRob3J9LAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9PiAkZ2l0X3Blcm1zLAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAkc2VsZi0+aW5zZXJ0X3JldigkbmFtZSwgJGhlYWQtPnskbmFtZX17cmV2aXNpb259LCAkaGFzaCwgJGNvbW1pdC0+e2hhc2h9LCAkY29tbWl0LT57ZGF0ZX0sICRjb21taXQtPnthdXRob3J9LCAkZ2l0X3Blcm1zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJGxvZy0+d2FybigiVU5LTk9XTiBGSUxFIENIQU5HRSBtb2RlPSRtb2RlLCBoYXNoPSRoYXNoLCBjaGFuZ2U9JGNoYW5nZSwgbmFtZT0kbmFtZSIpOworICAgICAgICAgICAgICAgICAgICBkaWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2xvc2UgRklMRUxJU1Q7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAjIHRoaXMgaXMgdXNlZCB0byBkZXRlY3QgZmlsZXMgcmVtb3ZlZCBmcm9tIHRoZSByZXBvCisgICAgICAgICAgICBteSAkc2Vlbl9maWxlcyA9IHt9OworCisgICAgICAgICAgICBteSAkZmlsZXBpcGUgPSBvcGVuKEZJTEVMSVNULCAnLXwnLCAnZ2l0JywgJ2xzLXRyZWUnLCAnLXonLCAnLXInLCAkY29tbWl0LT57aGFzaH0pIG9yIGRpZSgiQ2Fubm90IGNhbGwgZ2l0LWxzLXRyZWUgOiAkISIpOworCSAgICBsb2NhbCAkLyA9ICJcMCI7CisgICAgICAgICAgICB3aGlsZSAoIDxGSUxFTElTVD4gKQorICAgICAgICAgICAgeworCQljaG9tcDsKKyAgICAgICAgICAgICAgICB1bmxlc3MgKCAvXihcZCspXHMrKFx3KylccysoW2EtekEtWjAtOV0rKVx0KC4qKSQvbyApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkaWUoIkNvdWxkbid0IHByb2Nlc3MgZ2l0LWxzLXRyZWUgbGluZSA6ICRfIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbXkgKCAkZ2l0X3Blcm1zLCAkZ2l0X3R5cGUsICRnaXRfaGFzaCwgJGdpdF9maWxlbmFtZSApID0gKCAkMSwgJDIsICQzLCAkNCApOworCisgICAgICAgICAgICAgICAgJHNlZW5fZmlsZXMtPnskZ2l0X2ZpbGVuYW1lfSA9IDE7CisKKyAgICAgICAgICAgICAgICBteSAoICRvbGRoYXNoLCAkb2xkcmV2aXNpb24sICRvbGRtb2RlICkgPSAoCisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGdpdF9maWxlbmFtZX17ZmlsZWhhc2h9LAorICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRnaXRfZmlsZW5hbWV9e3JldmlzaW9ufSwKKyAgICAgICAgICAgICAgICAgICAgJGhlYWQtPnskZ2l0X2ZpbGVuYW1lfXttb2RlfQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICBpZiAoICRnaXRfcGVybXMgPX4gL15cZFxkXGQoXGQpXGRcZC9vICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRnaXRfcGVybXMgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgJGdpdF9wZXJtcyAuPSAiciIgaWYgKCAkMSAmIDQgKTsKKyAgICAgICAgICAgICAgICAgICAgJGdpdF9wZXJtcyAuPSAidyIgaWYgKCAkMSAmIDIgKTsKKyAgICAgICAgICAgICAgICAgICAgJGdpdF9wZXJtcyAuPSAieCIgaWYgKCAkMSAmIDEgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkZ2l0X3Blcm1zID0gInJ3IjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIHVubGVzcyB0aGUgZmlsZSBleGlzdHMgd2l0aCB0aGUgc2FtZSBoYXNoLCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdCAuLi4KKyAgICAgICAgICAgICAgICB1bmxlc3MgKCBkZWZpbmVkKCRvbGRoYXNoKSBhbmQgJG9sZGhhc2ggZXEgJGdpdF9oYXNoIGFuZCBkZWZpbmVkKCRvbGRtb2RlKSBhbmQgJG9sZG1vZGUgZXEgJGdpdF9wZXJtcyApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBteSAkbmV3cmV2aXNpb24gPSAoICRvbGRyZXZpc2lvbiBvciAwICkgKyAxOworCisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGdpdF9maWxlbmFtZX0gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0+ICRnaXRfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9PiAkbmV3cmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlaGFzaCA9PiAkZ2l0X2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRoYXNoID0+ICRjb21taXQtPntoYXNofSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0+ICRjb21taXQtPntkYXRlfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9PiAkY29tbWl0LT57YXV0aG9yfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPT4gJGdpdF9wZXJtcywKKyAgICAgICAgICAgICAgICAgICAgfTsKKworCisgICAgICAgICAgICAgICAgICAgICRzZWxmLT5pbnNlcnRfcmV2KCRnaXRfZmlsZW5hbWUsICRuZXdyZXZpc2lvbiwgJGdpdF9oYXNoLCAkY29tbWl0LT57aGFzaH0sICRjb21taXQtPntkYXRlfSwgJGNvbW1pdC0+e2F1dGhvcn0sICRnaXRfcGVybXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsb3NlIEZJTEVMSVNUOworCisgICAgICAgICAgICAjIERldGVjdCBkZWxldGVkIGZpbGVzCisgICAgICAgICAgICBmb3JlYWNoIG15ICRmaWxlICgga2V5cyAlJGhlYWQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVubGVzcyAoIGV4aXN0cyAkc2Vlbl9maWxlcy0+eyRmaWxlfSBvciAkaGVhZC0+eyRmaWxlfXtmaWxlaGFzaH0gZXEgImRlbGV0ZWQiICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGZpbGV9e3JldmlzaW9ufSsrOworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXtmaWxlaGFzaH0gPSAiZGVsZXRlZCI7CisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGZpbGV9e2NvbW1pdGhhc2h9ID0gJGNvbW1pdC0+e2hhc2h9OworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXttb2RpZmllZH0gPSAkY29tbWl0LT57ZGF0ZX07CisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGZpbGV9e2F1dGhvcn0gPSAkY29tbWl0LT57YXV0aG9yfTsKKworICAgICAgICAgICAgICAgICAgICAkc2VsZi0+aW5zZXJ0X3JldigkZmlsZSwgJGhlYWQtPnskZmlsZX17cmV2aXNpb259LCAkaGVhZC0+eyRmaWxlfXtmaWxlaGFzaH0sICRjb21taXQtPntoYXNofSwgJGNvbW1pdC0+e2RhdGV9LCAkY29tbWl0LT57YXV0aG9yfSwgJGhlYWQtPnskZmlsZX17bW9kZX0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICMgRU5EIDogIkRldGVjdCBkZWxldGVkIGZpbGVzIgorICAgICAgICB9CisKKworICAgICAgICBpZiAoZXhpc3RzICRjb21taXQtPnttZXJnZW1zZ30pCisgICAgICAgIHsKKyAgICAgICAgICAgICRzZWxmLT5pbnNlcnRfbWVyZ2Vsb2coJGNvbW1pdC0+e2hhc2h9LCAkY29tbWl0LT57bWVyZ2Vtc2d9KTsKKyAgICAgICAgfQorCisgICAgICAgICRsYXN0cGlja2VkID0gJGNvbW1pdC0+e2hhc2h9OworCisgICAgICAgICRzZWxmLT5fc2V0X3Byb3AoImxhc3RfY29tbWl0IiwgJGNvbW1pdC0+e2hhc2h9KTsKKyAgICB9CisKKyAgICAkc2VsZi0+ZGVsZXRlX2hlYWQoKTsKKyAgICBmb3JlYWNoIG15ICRmaWxlICgga2V5cyAlJGhlYWQgKQorICAgIHsKKyAgICAgICAgJHNlbGYtPmluc2VydF9oZWFkKAorICAgICAgICAgICAgJGZpbGUsCisgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXtyZXZpc2lvbn0sCisgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXtmaWxlaGFzaH0sCisgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXtjb21taXRoYXNofSwKKyAgICAgICAgICAgICRoZWFkLT57JGZpbGV9e21vZGlmaWVkfSwKKyAgICAgICAgICAgICRoZWFkLT57JGZpbGV9e2F1dGhvcn0sCisgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXttb2RlfSwKKyAgICAgICAgKTsKKyAgICB9CisgICAgIyBpbnZhbGlkYXRlIHRoZSBnZXRoZWFkIGNhY2hlCisgICAgJHNlbGYtPntnZXRoZWFkX2NhY2hlfSA9IHVuZGVmOworCisKKyAgICAjIEVuZGluZyBleGNsdXNpdmUgbG9jayBoZXJlCisgICAgJHNlbGYtPntkYmh9LT5jb21taXQoKSBvciBkaWUgIkZhaWxlZCB0byBjb21taXQgY2hhbmdlcyB0byBTUUxpdGUiOworfQorCitzdWIgaW5zZXJ0X3JldgoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkcmV2aXNpb24gPSBzaGlmdDsKKyAgICBteSAkZmlsZWhhc2ggPSBzaGlmdDsKKyAgICBteSAkY29tbWl0aGFzaCA9IHNoaWZ0OworICAgIG15ICRtb2RpZmllZCA9IHNoaWZ0OworICAgIG15ICRhdXRob3IgPSBzaGlmdDsKKyAgICBteSAkbW9kZSA9IHNoaWZ0OworICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJyZXZpc2lvbiIpOworCisgICAgbXkgJGluc2VydF9yZXYgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJJTlNFUlQgSU5UTyAkdGFibGVuYW1lIChuYW1lLCByZXZpc2lvbiwgZmlsZWhhc2gsIGNvbW1pdGhhc2gsIG1vZGlmaWVkLCBhdXRob3IsIG1vZGUpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPykiLHt9LDEpOworICAgICRpbnNlcnRfcmV2LT5leGVjdXRlKCRuYW1lLCAkcmV2aXNpb24sICRmaWxlaGFzaCwgJGNvbW1pdGhhc2gsICRtb2RpZmllZCwgJGF1dGhvciwgJG1vZGUpOworfQorCitzdWIgaW5zZXJ0X21lcmdlbG9nCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAka2V5ID0gc2hpZnQ7CisgICAgbXkgJHZhbHVlID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoImNvbW1pdG1zZ3MiKTsKKworICAgIG15ICRpbnNlcnRfbWVyZ2Vsb2cgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJJTlNFUlQgSU5UTyAkdGFibGVuYW1lIChrZXksIHZhbHVlKSBWQUxVRVMgKD8sPykiLHt9LDEpOworICAgICRpbnNlcnRfbWVyZ2Vsb2ctPmV4ZWN1dGUoJGtleSwgJHZhbHVlKTsKK30KKworc3ViIGRlbGV0ZV9oZWFkCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiaGVhZCIpOworCisgICAgbXkgJGRlbGV0ZV9oZWFkID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiREVMRVRFIEZST00gJHRhYmxlbmFtZSIse30sMSk7CisgICAgJGRlbGV0ZV9oZWFkLT5leGVjdXRlKCk7Cit9CisKK3N1YiBpbnNlcnRfaGVhZAoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkcmV2aXNpb24gPSBzaGlmdDsKKyAgICBteSAkZmlsZWhhc2ggPSBzaGlmdDsKKyAgICBteSAkY29tbWl0aGFzaCA9IHNoaWZ0OworICAgIG15ICRtb2RpZmllZCA9IHNoaWZ0OworICAgIG15ICRhdXRob3IgPSBzaGlmdDsKKyAgICBteSAkbW9kZSA9IHNoaWZ0OworICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJoZWFkIik7CisKKyAgICBteSAkaW5zZXJ0X2hlYWQgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJJTlNFUlQgSU5UTyAkdGFibGVuYW1lIChuYW1lLCByZXZpc2lvbiwgZmlsZWhhc2gsIGNvbW1pdGhhc2gsIG1vZGlmaWVkLCBhdXRob3IsIG1vZGUpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPykiLHt9LDEpOworICAgICRpbnNlcnRfaGVhZC0+ZXhlY3V0ZSgkbmFtZSwgJHJldmlzaW9uLCAkZmlsZWhhc2gsICRjb21taXRoYXNoLCAkbW9kaWZpZWQsICRhdXRob3IsICRtb2RlKTsKK30KKworc3ViIF9oZWFkcmV2Cit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiaGVhZCIpOworCisgICAgbXkgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiU0VMRUNUIGZpbGVoYXNoLCByZXZpc2lvbiwgbW9kZSBGUk9NICR0YWJsZW5hbWUgV0hFUkUgbmFtZT0/Iix7fSwxKTsKKyAgICAkZGJfcXVlcnktPmV4ZWN1dGUoJGZpbGVuYW1lKTsKKyAgICBteSAoICRoYXNoLCAkcmV2aXNpb24sICRtb2RlICkgPSAkZGJfcXVlcnktPmZldGNocm93X2FycmF5OworCisgICAgcmV0dXJuICggJGhhc2gsICRyZXZpc2lvbiwgJG1vZGUgKTsKK30KKworc3ViIF9nZXRfcHJvcAoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGtleSA9IHNoaWZ0OworICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJwcm9wZXJ0aWVzIik7CisKKyAgICBteSAkZGJfcXVlcnkgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJTRUxFQ1QgdmFsdWUgRlJPTSAkdGFibGVuYW1lIFdIRVJFIGtleT0/Iix7fSwxKTsKKyAgICAkZGJfcXVlcnktPmV4ZWN1dGUoJGtleSk7CisgICAgbXkgKCAkdmFsdWUgKSA9ICRkYl9xdWVyeS0+ZmV0Y2hyb3dfYXJyYXk7CisKKyAgICByZXR1cm4gJHZhbHVlOworfQorCitzdWIgX3NldF9wcm9wCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAka2V5ID0gc2hpZnQ7CisgICAgbXkgJHZhbHVlID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInByb3BlcnRpZXMiKTsKKworICAgIG15ICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIlVQREFURSAkdGFibGVuYW1lIFNFVCB2YWx1ZT0/IFdIRVJFIGtleT0/Iix7fSwxKTsKKyAgICAkZGJfcXVlcnktPmV4ZWN1dGUoJHZhbHVlLCAka2V5KTsKKworICAgIHVubGVzcyAoICRkYl9xdWVyeS0+cm93cyApCisgICAgeworICAgICAgICAkZGJfcXVlcnkgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJJTlNFUlQgSU5UTyAkdGFibGVuYW1lIChrZXksIHZhbHVlKSBWQUxVRVMgKD8sPykiLHt9LDEpOworICAgICAgICAkZGJfcXVlcnktPmV4ZWN1dGUoJGtleSwgJHZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gJHZhbHVlOworfQorCis9aGVhZDIgZ2V0aGVhZAorCis9Y3V0CisKK3N1YiBnZXRoZWFkCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiaGVhZCIpOworCisgICAgcmV0dXJuICRzZWxmLT57Z2V0aGVhZF9jYWNoZX0gaWYgKCBkZWZpbmVkICggJHNlbGYtPntnZXRoZWFkX2NhY2hlfSApICk7CisKKyAgICBteSAkZGJfcXVlcnkgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJTRUxFQ1QgbmFtZSwgZmlsZWhhc2gsIG1vZGUsIHJldmlzaW9uLCBtb2RpZmllZCwgY29tbWl0aGFzaCwgYXV0aG9yIEZST00gJHRhYmxlbmFtZSBPUkRFUiBCWSBuYW1lIEFTQyIse30sMSk7CisgICAgJGRiX3F1ZXJ5LT5leGVjdXRlKCk7CisKKyAgICBteSAkdHJlZSA9IFtdOworICAgIHdoaWxlICggbXkgJGZpbGUgPSAkZGJfcXVlcnktPmZldGNocm93X2hhc2hyZWYgKQorICAgIHsKKyAgICAgICAgcHVzaCBAJHRyZWUsICRmaWxlOworICAgIH0KKworICAgICRzZWxmLT57Z2V0aGVhZF9jYWNoZX0gPSAkdHJlZTsKKworICAgIHJldHVybiAkdHJlZTsKK30KKworPWhlYWQyIGdldGxvZworCis9Y3V0CisKK3N1YiBnZXRsb2cKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRmaWxlbmFtZSA9IHNoaWZ0OworICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJyZXZpc2lvbiIpOworCisgICAgbXkgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiU0VMRUNUIG5hbWUsIGZpbGVoYXNoLCBhdXRob3IsIG1vZGUsIHJldmlzaW9uLCBtb2RpZmllZCwgY29tbWl0aGFzaCBGUk9NICR0YWJsZW5hbWUgV0hFUkUgbmFtZT0/IE9SREVSIEJZIHJldmlzaW9uIERFU0MiLHt9LDEpOworICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkZmlsZW5hbWUpOworCisgICAgbXkgJHRyZWUgPSBbXTsKKyAgICB3aGlsZSAoIG15ICRmaWxlID0gJGRiX3F1ZXJ5LT5mZXRjaHJvd19oYXNocmVmICkKKyAgICB7CisgICAgICAgIHB1c2ggQCR0cmVlLCAkZmlsZTsKKyAgICB9CisKKyAgICByZXR1cm4gJHRyZWU7Cit9CisKKz1oZWFkMiBnZXRtZXRhCisKK1RoaXMgZnVuY3Rpb24gdGFrZXMgYSBmaWxlbmFtZSAod2l0aCBwYXRoKSBhcmd1bWVudCBhbmQgcmV0dXJucyBhIGhhc2hyZWYgb2YKK21ldGFkYXRhIGZvciB0aGF0IGZpbGUuCisKKz1jdXQKKworc3ViIGdldG1ldGEKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRmaWxlbmFtZSA9IHNoaWZ0OworICAgIG15ICRyZXZpc2lvbiA9IHNoaWZ0OworICAgIG15ICR0YWJsZW5hbWVfcmV2ID0gJHNlbGYtPnRhYmxlbmFtZSgicmV2aXNpb24iKTsKKyAgICBteSAkdGFibGVuYW1lX2hlYWQgPSAkc2VsZi0+dGFibGVuYW1lKCJoZWFkIik7CisKKyAgICBteSAkZGJfcXVlcnk7CisgICAgaWYgKCBkZWZpbmVkKCRyZXZpc2lvbikgYW5kICRyZXZpc2lvbiA9fiAvXlxkKyQvICkKKyAgICB7CisgICAgICAgICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIlNFTEVDVCAqIEZST00gJHRhYmxlbmFtZV9yZXYgV0hFUkUgbmFtZT0/IEFORCByZXZpc2lvbj0/Iix7fSwxKTsKKyAgICAgICAgJGRiX3F1ZXJ5LT5leGVjdXRlKCRmaWxlbmFtZSwgJHJldmlzaW9uKTsKKyAgICB9CisgICAgZWxzaWYgKCBkZWZpbmVkKCRyZXZpc2lvbikgYW5kICRyZXZpc2lvbiA9fiAvXlthLXpBLVowLTldezQwfSQvICkKKyAgICB7CisgICAgICAgICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIlNFTEVDVCAqIEZST00gJHRhYmxlbmFtZV9yZXYgV0hFUkUgbmFtZT0/IEFORCBjb21taXRoYXNoPT8iLHt9LDEpOworICAgICAgICAkZGJfcXVlcnktPmV4ZWN1dGUoJGZpbGVuYW1lLCAkcmV2aXNpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIlNFTEVDVCAqIEZST00gJHRhYmxlbmFtZV9oZWFkIFdIRVJFIG5hbWU9PyIse30sMSk7CisgICAgICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkZmlsZW5hbWUpOworICAgIH0KKworICAgIHJldHVybiAkZGJfcXVlcnktPmZldGNocm93X2hhc2hyZWY7Cit9CisKKz1oZWFkMiBjb21taXRtZXNzYWdlCisKK3RoaXMgZnVuY3Rpb24gdGFrZXMgYSBjb21taXRoYXNoIGFuZCByZXR1cm5zIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhhdCBjb21taXQKKworPWN1dAorc3ViIGNvbW1pdG1lc3NhZ2UKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRjb21taXRoYXNoID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoImNvbW1pdG1zZ3MiKTsKKworICAgIGRpZSgiTmVlZCBjb21taXRoYXNoIikgdW5sZXNzICggZGVmaW5lZCgkY29tbWl0aGFzaCkgYW5kICRjb21taXRoYXNoID1+IC9eW2EtekEtWjAtOV17NDB9JC8gKTsKKworICAgIG15ICRkYl9xdWVyeTsKKyAgICAkZGJfcXVlcnkgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJTRUxFQ1QgdmFsdWUgRlJPTSAkdGFibGVuYW1lIFdIRVJFIGtleT0/Iix7fSwxKTsKKyAgICAkZGJfcXVlcnktPmV4ZWN1dGUoJGNvbW1pdGhhc2gpOworCisgICAgbXkgKCAkbWVzc2FnZSApID0gJGRiX3F1ZXJ5LT5mZXRjaHJvd19hcnJheTsKKworICAgIGlmICggZGVmaW5lZCAoICRtZXNzYWdlICkgKQorICAgIHsKKyAgICAgICAgJG1lc3NhZ2UgLj0gIiAiIGlmICggJG1lc3NhZ2UgPX4gL1xuJC8gKTsKKyAgICAgICAgcmV0dXJuICRtZXNzYWdlOworICAgIH0KKworICAgIG15IEBsaW5lcyA9IHNhZmVfcGlwZV9jYXB0dXJlKCJnaXQiLCAiY2F0LWZpbGUiLCAiY29tbWl0IiwgJGNvbW1pdGhhc2gpOworICAgIHNoaWZ0IEBsaW5lcyB3aGlsZSAoICRsaW5lc1swXSA9fiAvXFMvICk7CisgICAgJG1lc3NhZ2UgPSBqb2luKCIiLEBsaW5lcyk7CisgICAgJG1lc3NhZ2UgLj0gIiAiIGlmICggJG1lc3NhZ2UgPX4gL1xuJC8gKTsKKyAgICByZXR1cm4gJG1lc3NhZ2U7Cit9CisKKz1oZWFkMiBnZXRoaXN0b3J5CisKK1RoaXMgZnVuY3Rpb24gdGFrZXMgYSBmaWxlbmFtZSAod2l0aCBwYXRoKSBhcmd1bWVudCBhbmQgcmV0dXJucyBhbiBhcnJheW9mYXJyYXlzCitjb250YWluaW5nIHJldmlzaW9uLGZpbGVoYXNoLGNvbW1pdGhhc2ggb3JkZXJlZCBieSByZXZpc2lvbiBkZXNjZW5kaW5nCisKKz1jdXQKK3N1YiBnZXRoaXN0b3J5Cit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgicmV2aXNpb24iKTsKKworICAgIG15ICRkYl9xdWVyeTsKKyAgICAkZGJfcXVlcnkgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJTRUxFQ1QgcmV2aXNpb24sIGZpbGVoYXNoLCBjb21taXRoYXNoIEZST00gJHRhYmxlbmFtZSBXSEVSRSBuYW1lPT8gT1JERVIgQlkgcmV2aXNpb24gREVTQyIse30sMSk7CisgICAgJGRiX3F1ZXJ5LT5leGVjdXRlKCRmaWxlbmFtZSk7CisKKyAgICByZXR1cm4gJGRiX3F1ZXJ5LT5mZXRjaGFsbF9hcnJheXJlZjsKK30KKworPWhlYWQyIGdldGhpc3RvcnlkZW5zZQorCitUaGlzIGZ1bmN0aW9uIHRha2VzIGEgZmlsZW5hbWUgKHdpdGggcGF0aCkgYXJndW1lbnQgYW5kIHJldHVybnMgYW4gYXJyYXlvZmFycmF5cworY29udGFpbmluZyByZXZpc2lvbixmaWxlaGFzaCxjb21taXRoYXNoIG9yZGVyZWQgYnkgcmV2aXNpb24gZGVzY2VuZGluZy4KKworVGhpcyB2ZXJzaW9uIG9mIGdldGhpc3Rvcnkgc2tpcHMgZGVsZXRlZCBlbnRyaWVzIC0tIHNvIGl0IGlzIHVzZWZ1bCBmb3IgYW5ub3RhdGUuCitUaGUgJ2RlbnNlJyBwYXJ0IGlzIGEgcmVmZXJlbmNlIHRvIGEgJy0tZGVuc2UnIG9wdGlvbiBhdmFpbGFibGUgZm9yIGdpdC1yZXYtbGlzdAorYW5kIG90aGVyIGdpdCB0b29scyB0aGF0IGRlcGVuZCBvbiBpdC4KKworPWN1dAorc3ViIGdldGhpc3RvcnlkZW5zZQoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uIik7CisKKyAgICBteSAkZGJfcXVlcnk7CisgICAgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiU0VMRUNUIHJldmlzaW9uLCBmaWxlaGFzaCwgY29tbWl0aGFzaCBGUk9NICR0YWJsZW5hbWUgV0hFUkUgbmFtZT0/IEFORCBmaWxlaGFzaCE9J2RlbGV0ZWQnIE9SREVSIEJZIHJldmlzaW9uIERFU0MiLHt9LDEpOworICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkZmlsZW5hbWUpOworCisgICAgcmV0dXJuICRkYl9xdWVyeS0+ZmV0Y2hhbGxfYXJyYXlyZWY7Cit9CisKKz1oZWFkMiBpbl9hcnJheSgpCisKK2Zyb20gQXJyYXk6OlBBVCAtIG1pbWljcyB0aGUgaW5fYXJyYXkoKSBmdW5jdGlvbgorZm91bmQgaW4gUEhQLiBZdWNrIGJ1dCB3b3JrcyBmb3Igc21hbGwgYXJyYXlzLgorCis9Y3V0CitzdWIgaW5fYXJyYXkKK3sKKyAgICBteSAoJGNoZWNrLCBAYXJyYXkpID0gQF87CisgICAgbXkgJHJldHZhbCA9IDA7CisgICAgZm9yZWFjaCBteSAkdGVzdCAoQGFycmF5KXsKKyAgICAgICAgaWYoJGNoZWNrIGVxICR0ZXN0KXsKKyAgICAgICAgICAgICRyZXR2YWwgPSAgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gJHJldHZhbDsKK30KKworPWhlYWQyIHNhZmVfcGlwZV9jYXB0dXJlCisKK2FuIGFsdGVybmF0aXZlIHRvIGBjb21tYW5kYCB0aGF0IGFsbG93cyBpbnB1dCB0byBiZSBwYXNzZWQgYXMgYW4gYXJyYXkKK3RvIHdvcmsgYXJvdW5kIHNoZWxsIHByb2JsZW1zIHdpdGggd2VpcmQgY2hhcmFjdGVycyBpbiBhcmd1bWVudHMKKworPWN1dAorc3ViIHNhZmVfcGlwZV9jYXB0dXJlIHsKKworICAgIG15IEBvdXRwdXQ7CisKKyAgICBpZiAobXkgJHBpZCA9IG9wZW4gbXkgJGNoaWxkLCAnLXwnKSB7CisgICAgICAgIEBvdXRwdXQgPSAoPCRjaGlsZD4pOworICAgICAgICBjbG9zZSAkY2hpbGQgb3IgZGllIGpvaW4oJyAnLEBfKS4iOiAkISAkPyI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXhlYyhAXykgb3IgZGllICIkISAkPyI7ICMgZXhlYygpIGNhbiBmYWlsIHRoZSBleGVjdXRhYmxlIGNhbid0IGJlIGZvdW5kCisgICAgfQorICAgIHJldHVybiB3YW50YXJyYXkgPyBAb3V0cHV0IDogam9pbignJyxAb3V0cHV0KTsKK30KKworPWhlYWQyIG1hbmdsZV9kaXJuYW1lCisKK2NyZWF0ZSBhIHN0cmluZyBmcm9tIGEgZGlyZWN0b3J5IG5hbWUgdGhhdCBpcyBzdWl0YWJsZSB0byB1c2UgYXMKK3BhcnQgb2YgYSBmaWxlbmFtZSwgbWFpbmx5IGJ5IGNvbnZlcnRpbmcgYWxsIGNoYXJzIGV4Y2VwdCBcdy4tIHRvIF8KKworPWN1dAorc3ViIG1hbmdsZV9kaXJuYW1lIHsKKyAgICBteSAkZGlybmFtZSA9IHNoaWZ0OworICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCAkZGlybmFtZTsKKworICAgICRkaXJuYW1lID1+IHMvW15cdy4tXS9fL2c7CisKKyAgICByZXR1cm4gJGRpcm5hbWU7Cit9CisKKz1oZWFkMiBtYW5nbGVfdGFibGVuYW1lCisKK2NyZWF0ZSBhIHN0cmluZyBmcm9tIGEgdGhhdCBpcyBzdWl0YWJsZSB0byB1c2UgYXMgcGFydCBvZiBhbiBTUUwgdGFibGUKK25hbWUsIG1haW5seSBieSBjb252ZXJ0aW5nIGFsbCBjaGFycyBleGNlcHQgXHcgdG8gXworCis9Y3V0CitzdWIgbWFuZ2xlX3RhYmxlbmFtZSB7CisgICAgbXkgJHRhYmxlbmFtZSA9IHNoaWZ0OworICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCAkdGFibGVuYW1lOworCisgICAgJHRhYmxlbmFtZSA9fiBzL1teXHdfXS9fL2c7CisKKyAgICByZXR1cm4gJHRhYmxlbmFtZTsKK30KKworMTsKZGlmZiAtLWdpdCBhL2dpdC1kaWZmdG9vbC0taGVscGVyLnNoIGIvZ2l0LWRpZmZ0b29sLS1oZWxwZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2QwZmUwYwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1kaWZmdG9vbC0taGVscGVyLnNoCkBAIC0wLDAgKzEsODggQEAKKyMhL2Jpbi9zaAorIyBnaXQtZGlmZnRvb2wtLWhlbHBlciBpcyBhIEdJVF9FWFRFUk5BTF9ESUZGLWNvbXBhdGlibGUgZGlmZiB0b29sIGxhdW5jaGVyLgorIyBUaGlzIHNjcmlwdCBpcyB0eXBpY2FsbHkgbGF1bmNoZWQgYnkgdXNpbmcgdGhlICdnaXQgZGlmZnRvb2wnCisjIGNvbnZlbmllbmNlIGNvbW1hbmQuCisjCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBEYXZpZCBBZ3VpbGFyCisKK1RPT0xfTU9ERT1kaWZmCisuIGdpdC1tZXJnZXRvb2wtLWxpYgorCisjIGRpZmZ0b29sLnByb21wdCBjb250cm9scyB0aGUgZGVmYXVsdCBwcm9tcHQvbm8tcHJvbXB0IGJlaGF2aW9yCisjIGFuZCBpcyBvdmVycmlkZGVuIHdpdGggJEdJVF9ESUZGVE9PTCpfUFJPTVBULgorc2hvdWxkX3Byb21wdCAoKSB7CisJcHJvbXB0X21lcmdlPSQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2V0b29sLnByb21wdCB8fCBlY2hvIHRydWUpCisJcHJvbXB0PSQoZ2l0IGNvbmZpZyAtLWJvb2wgZGlmZnRvb2wucHJvbXB0IHx8IGVjaG8gJHByb21wdF9tZXJnZSkKKwlpZiB0ZXN0ICIkcHJvbXB0IiA9IHRydWUKKwl0aGVuCisJCXRlc3QgLXogIiRHSVRfRElGRlRPT0xfTk9fUFJPTVBUIgorCWVsc2UKKwkJdGVzdCAtbiAiJEdJVF9ESUZGVE9PTF9QUk9NUFQiCisJZmkKK30KKworIyBJbmRpY2F0ZXMgdGhhdCAtLWV4dGNtZD0uLi4gd2FzIHNwZWNpZmllZAordXNlX2V4dF9jbWQgKCkgeworCXRlc3QgLW4gIiRHSVRfRElGRlRPT0xfRVhUQ01EIgorfQorCitsYXVuY2hfbWVyZ2VfdG9vbCAoKSB7CisJIyBNZXJnZWQgaXMgdGhlIGZpbGVuYW1lIGFzIGl0IGFwcGVhcnMgaW4gdGhlIHdvcmsgdHJlZQorCSMgTG9jYWwgaXMgdGhlIGNvbnRlbnRzIG9mIGEvZmlsZW5hbWUKKwkjIFJlbW90ZSBpcyB0aGUgY29udGVudHMgb2YgYi9maWxlbmFtZQorCSMgQ3VzdG9tIG1lcmdlIHRvb2wgY29tbWFuZHMgbWlnaHQgdXNlICRCQVNFIHNvIHdlIHByb3ZpZGUgaXQKKwlNRVJHRUQ9IiQxIgorCUxPQ0FMPSIkMiIKKwlSRU1PVEU9IiQzIgorCUJBU0U9IiQxIgorCisJIyAkTE9DQUwgYW5kICRSRU1PVEUgYXJlIHRlbXBvcmFyeSBmaWxlcyBzbyBwcm9tcHQKKwkjIHRoZSB1c2VyIHdpdGggdGhlIHJlYWwgJE1FUkdFRCBuYW1lIGJlZm9yZSBsYXVuY2hpbmcgJG1lcmdlX3Rvb2wuCisJaWYgc2hvdWxkX3Byb21wdAorCXRoZW4KKwkJcHJpbnRmICJcblZpZXdpbmc6ICckTUVSR0VEJ1xuIgorCQlpZiB1c2VfZXh0X2NtZAorCQl0aGVuCisJCQlwcmludGYgIkxhdW5jaCAnJXMnIFtZL25dOiAiIFwKKwkJCQkiJEdJVF9ESUZGVE9PTF9FWFRDTUQiCisJCWVsc2UKKwkJCXByaW50ZiAiTGF1bmNoICclcycgW1kvbl06ICIgIiRtZXJnZV90b29sIgorCQlmaQorCQlpZiByZWFkIGFucyAmJiB0ZXN0ICIkYW5zIiA9IG4KKwkJdGhlbgorCQkJcmV0dXJuCisJCWZpCisJZmkKKworCWlmIHVzZV9leHRfY21kCisJdGhlbgorCQlleHBvcnQgQkFTRQorCQlldmFsICRHSVRfRElGRlRPT0xfRVhUQ01EICciJExPQ0FMIicgJyIkUkVNT1RFIicKKwllbHNlCisJCXJ1bl9tZXJnZV90b29sICIkbWVyZ2VfdG9vbCIKKwlmaQorfQorCitpZiAhIHVzZV9leHRfY21kCit0aGVuCisJaWYgdGVzdCAtbiAiJEdJVF9ESUZGX1RPT0wiCisJdGhlbgorCQltZXJnZV90b29sPSIkR0lUX0RJRkZfVE9PTCIKKwllbHNlCisJCW1lcmdlX3Rvb2w9IiQoZ2V0X21lcmdlX3Rvb2wpIiB8fCBleGl0CisJZmkKK2ZpCisKK2lmIHRlc3QgLW4gIiRHSVRfRElGRlRPT0xfRElSRElGRiIKK3RoZW4KKwlMT0NBTD0iJDEiCisJUkVNT1RFPSIkMiIKKwlydW5fbWVyZ2VfdG9vbCAiJG1lcmdlX3Rvb2wiIGZhbHNlCitlbHNlCisJIyBMYXVuY2ggdGhlIG1lcmdlIHRvb2wgb24gZWFjaCBwYXRoIHByb3ZpZGVkIGJ5ICdnaXQgZGlmZicKKwl3aGlsZSB0ZXN0ICQjIC1ndCA2CisJZG8KKwkJbGF1bmNoX21lcmdlX3Rvb2wgIiQxIiAiJDIiICIkNSIKKwkJc2hpZnQgNworCWRvbmUKK2ZpCmRpZmYgLS1naXQgYS9naXQtZGlmZnRvb2wucGVybCBiL2dpdC1kaWZmdG9vbC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkZDA0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZGlmZnRvb2wucGVybApAQCAtMCwwICsxLDQ3MSBAQAorIyEvdXNyL2Jpbi9wZXJsCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBEYXZpZCBBZ3VpbGFyCisjIENvcHlyaWdodCAoYykgMjAxMiBUaW0gSGVuaWdhbgorIworIyBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIEdJVF9FWFRFUk5BTF9ESUZGLWNvbXBhdGlibGUKKyMgZ2l0LWRpZmZ0b29sLS1oZWxwZXIgc2NyaXB0LgorIworIyBUaGlzIHNjcmlwdCBleHBvcnRzIEdJVF9FWFRFUk5BTF9ESUZGIGFuZCBHSVRfUEFHRVIgZm9yIHVzZSBieSBnaXQuCisjIFRoZSBHSVRfRElGRiogdmFyaWFibGVzIGFyZSBleHBvcnRlZCBmb3IgdXNlIGJ5IGdpdC1kaWZmdG9vbC0taGVscGVyLgorIworIyBBbnkgYXJndW1lbnRzIHRoYXQgYXJlIHVua25vd24gdG8gdGhpcyBzY3JpcHQgYXJlIGZvcndhcmRlZCB0byAnZ2l0IGRpZmYnLgorCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOwordXNlIEZpbGU6OkNvcHk7Cit1c2UgRmlsZTo6Q29tcGFyZTsKK3VzZSBGaWxlOjpGaW5kOwordXNlIEZpbGU6OnN0YXQ7Cit1c2UgRmlsZTo6UGF0aCBxdyhta3BhdGggcm10cmVlKTsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBkaXIpOwordXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIHBhc3NfdGhyb3VnaCk7Cit1c2UgR2l0OworCitzdWIgdXNhZ2UKK3sKKwlteSAkZXhpdGNvZGUgPSBzaGlmdDsKKwlwcmludCA8PCAnVVNBR0UnOwordXNhZ2U6IGdpdCBkaWZmdG9vbCBbLXR8LS10b29sPTx0b29sPl0gWy0tdG9vbC1oZWxwXQorICAgICAgICAgICAgICAgICAgICBbLXh8LS1leHRjbWQ9PGNtZD5dCisgICAgICAgICAgICAgICAgICAgIFstZ3wtLWd1aV0gWy0tbm8tZ3VpXQorICAgICAgICAgICAgICAgICAgICBbLS1wcm9tcHRdIFsteXwtLW5vLXByb21wdF0KKyAgICAgICAgICAgICAgICAgICAgWy1kfC0tZGlyLWRpZmZdCisgICAgICAgICAgICAgICAgICAgIFsnZ2l0IGRpZmYnIG9wdGlvbnNdCitVU0FHRQorCWV4aXQoJGV4aXRjb2RlKTsKK30KKworc3ViIGZpbmRfd29ya3RyZWUKK3sKKwlteSAoJHJlcG8pID0gQF87CisKKwkjIEdpdC0+cmVwb3NpdG9yeS0+d2NfcGF0aCgpIGRvZXMgbm90IGhvbm9yIGNoYW5nZXMgdG8gdGhlIHdvcmtpbmcKKwkjIHRyZWUgbG9jYXRpb24gbWFkZSBieSAkRU5We0dJVF9XT1JLX1RSRUV9IG9yIHRoZSAnY29yZS53b3JrdHJlZScKKwkjIGNvbmZpZyB2YXJpYWJsZS4KKwlteSAkd29ya3RyZWU7CisJbXkgJGVudl93b3JrdHJlZSA9ICRFTlZ7R0lUX1dPUktfVFJFRX07CisJbXkgJGNvcmVfd29ya3RyZWUgPSBHaXQ6OmNvbmZpZygnY29yZS53b3JrdHJlZScpOworCisJaWYgKGRlZmluZWQoJGVudl93b3JrdHJlZSkgYW5kIChsZW5ndGgoJGVudl93b3JrdHJlZSkgPiAwKSkgeworCQkkd29ya3RyZWUgPSAkZW52X3dvcmt0cmVlOworCX0gZWxzaWYgKGRlZmluZWQoJGNvcmVfd29ya3RyZWUpIGFuZCAobGVuZ3RoKCRjb3JlX3dvcmt0cmVlKSA+IDApKSB7CisJCSR3b3JrdHJlZSA9ICRjb3JlX3dvcmt0cmVlOworCX0gZWxzZSB7CisJCSR3b3JrdHJlZSA9ICRyZXBvLT53Y19wYXRoKCk7CisJfQorCisJcmV0dXJuICR3b3JrdHJlZTsKK30KKworc3ViIGZpbHRlcl90b29sX3NjcmlwdHMKK3sKKwlteSAoJHRvb2xzKSA9IEBfOworCWlmICgtZCAkXykgeworCQlpZiAoJF8gbmUgIi4iKSB7CisJCQkjIElnbm9yZSBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcworCQkJJEZpbGU6OkZpbmQ6OnBydW5lID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgoLWYgJF8pICYmICgkXyBuZSAiZGVmYXVsdHMiKSkgeworCQkJcHVzaChAJHRvb2xzLCAkXyk7CisJCX0KKwl9Cit9CisKK3N1YiBwcmludF90b29sX2hlbHAKK3sKKwlteSAoJGNtZCwgQGZvdW5kLCBAbm90Zm91bmQsIEB0b29scyk7CisJbXkgJGdpdHBhdGggPSBHaXQ6OmV4ZWNfcGF0aCgpOworCisJZmluZChzdWIgeyBmaWx0ZXJfdG9vbF9zY3JpcHRzKFxAdG9vbHMpIH0sICIkZ2l0cGF0aC9tZXJnZXRvb2xzIik7CisKKwlmb3JlYWNoIG15ICR0b29sIChAdG9vbHMpIHsKKwkJJGNtZCAgPSAiVE9PTF9NT0RFPWRpZmYiOworCQkkY21kIC49ICcgJiYgLiAiJChnaXQgLS1leGVjLXBhdGgpL2dpdC1tZXJnZXRvb2wtLWxpYiInOworCQkkY21kIC49ICIgJiYgZ2V0X21lcmdlX3Rvb2xfcGF0aCAkdG9vbCA+L2Rldi9udWxsIDI+JjEiOworCQkkY21kIC49ICIgJiYgY2FuX2RpZmYgPi9kZXYvbnVsbCAyPiYxIjsKKwkJaWYgKHN5c3RlbSgnc2gnLCAnLWMnLCAkY21kKSA9PSAwKSB7CisJCQlwdXNoKEBmb3VuZCwgJHRvb2wpOworCQl9IGVsc2UgeworCQkJcHVzaChAbm90Zm91bmQsICR0b29sKTsKKwkJfQorCX0KKworCXByaW50IDw8ICdFT0YnOworJ2dpdCBkaWZmdG9vbCAtLXRvb2w9PHRvb2w+JyBtYXkgYmUgc2V0IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorRU9GCisJcHJpbnQgIlx0JF9cbiIgZm9yIChzb3J0KEBmb3VuZCkpOworCisJcHJpbnQgPDwgJ0VPRic7CisKK1RoZSBmb2xsb3dpbmcgdG9vbHMgYXJlIHZhbGlkLCBidXQgbm90IGN1cnJlbnRseSBhdmFpbGFibGU6CitFT0YKKwlwcmludCAiXHQkX1xuIiBmb3IgKHNvcnQoQG5vdGZvdW5kKSk7CisKKwlwcmludCA8PCAnRU9GJzsKKworTk9URTogU29tZSBvZiB0aGUgdG9vbHMgbGlzdGVkIGFib3ZlIG9ubHkgd29yayBpbiBhIHdpbmRvd2VkCitlbnZpcm9ubWVudC4gSWYgcnVuIGluIGEgdGVybWluYWwtb25seSBzZXNzaW9uLCB0aGV5IHdpbGwgZmFpbC4KK0VPRgorCWV4aXQoMCk7Cit9CisKK3N1YiBleGl0X2NsZWFudXAKK3sKKwlteSAoJHRtcGRpciwgJHN0YXR1cykgPSBAXzsKKwlteSAkZXJybm8gPSAkITsKKwlybXRyZWUoJHRtcGRpcik7CisJaWYgKCRzdGF0dXMgYW5kICRlcnJubykgeworCQlteSAoJHBhY2thZ2UsICRmaWxlLCAkbGluZSkgPSBjYWxsZXIoKTsKKwkJd2FybiAiJGZpbGUgbGluZSAkbGluZTogJGVycm5vXG4iOworCX0KKwlleGl0KCRzdGF0dXMgfCAoJHN0YXR1cyA+PiA4KSk7Cit9CisKK3N1YiBzZXR1cF9kaXJfZGlmZgoreworCW15ICgkcmVwbywgJHdvcmtkaXIsICRzeW1saW5rcykgPSBAXzsKKworCSMgUnVuIHRoZSBkaWZmOyBleGl0IGltbWVkaWF0ZWx5IGlmIG5vIGRpZmYgZm91bmQKKwkjICdSZXBvc2l0b3J5JyBhbmQgJ1dvcmtpbmdDb3B5JyBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IHRvIGluc3VyZSB0aGF0CisJIyBpZiAkR0lUX0RJUiBhbmQgJEdJVF9XT1JLX1RSRUUgYXJlIHNldCBpbiBFTlYsIHRoZXkgYXJlIGFjdHVhbGx5IHVzZWQKKwkjIGJ5IEdpdC0+cmVwb3NpdG9yeS0+Y29tbWFuZCouCisJbXkgJHJlcG9fcGF0aCA9ICRyZXBvLT5yZXBvX3BhdGgoKTsKKwlteSAlcmVwb19hcmdzID0gKFJlcG9zaXRvcnkgPT4gJHJlcG9fcGF0aCwgV29ya2luZ0NvcHkgPT4gJHdvcmtkaXIpOworCW15ICRkaWZmcmVwbyA9IEdpdC0+cmVwb3NpdG9yeSglcmVwb19hcmdzKTsKKworCW15IEBnaXRhcmdzID0gKCdkaWZmJywgJy0tcmF3JywgJy0tbm8tYWJicmV2JywgJy16JywgQEFSR1YpOworCW15ICRkaWZmcnRuID0gJGRpZmZyZXBvLT5jb21tYW5kX29uZWxpbmUoQGdpdGFyZ3MpOworCWV4aXQoMCkgdW5sZXNzIGRlZmluZWQoJGRpZmZydG4pOworCisJIyBCdWlsZCBpbmRleCBpbmZvIGZvciBsZWZ0IGFuZCByaWdodCBzaWRlcyBvZiB0aGUgZGlmZgorCW15ICRzdWJtb2R1bGVfbW9kZSA9ICcxNjAwMDAnOworCW15ICRzeW1saW5rX21vZGUgPSAnMTIwMDAwJzsKKwlteSAkbnVsbF9tb2RlID0gJzAnIHggNjsKKwlteSAkbnVsbF9zaGExID0gJzAnIHggNDA7CisJbXkgJGxpbmRleCA9ICcnOworCW15ICRyaW5kZXggPSAnJzsKKwlteSAlc3VibW9kdWxlOworCW15ICVzeW1saW5rOworCW15IEB3b3JraW5nX3RyZWUgPSAoKTsKKwlteSBAcmF3ZGlmZiA9IHNwbGl0KCdcMCcsICRkaWZmcnRuKTsKKworCW15ICRpID0gMDsKKwl3aGlsZSAoJGkgPCAkI3Jhd2RpZmYpIHsKKwkJaWYgKCRyYXdkaWZmWyRpXSA9fiAvXjo6LykgeworCQkJd2FybiA8PCAnRU9GJzsKK0NvbWJpbmVkIGRpZmYgZm9ybWF0cyAoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpbgorZGlyZWN0b3J5IGRpZmYgbW9kZSAoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4KK0VPRgorCQkJZXhpdCgxKTsKKwkJfQorCisJCW15ICgkbG1vZGUsICRybW9kZSwgJGxzaGExLCAkcnNoYTEsICRzdGF0dXMpID0KKwkJCXNwbGl0KCcgJywgc3Vic3RyKCRyYXdkaWZmWyRpXSwgMSkpOworCQlteSAkc3JjX3BhdGggPSAkcmF3ZGlmZlskaSArIDFdOworCQlteSAkZHN0X3BhdGg7CisKKwkJaWYgKCRzdGF0dXMgPX4gL15bQ1JdLykgeworCQkJJGRzdF9wYXRoID0gJHJhd2RpZmZbJGkgKyAyXTsKKwkJCSRpICs9IDM7CisJCX0gZWxzZSB7CisJCQkkZHN0X3BhdGggPSAkc3JjX3BhdGg7CisJCQkkaSArPSAyOworCQl9CisKKwkJaWYgKCRsbW9kZSBlcSAkc3VibW9kdWxlX21vZGUgb3IgJHJtb2RlIGVxICRzdWJtb2R1bGVfbW9kZSkgeworCQkJJHN1Ym1vZHVsZXskc3JjX3BhdGh9e2xlZnR9ID0gJGxzaGExOworCQkJaWYgKCRsc2hhMSBuZSAkcnNoYTEpIHsKKwkJCQkkc3VibW9kdWxleyRkc3RfcGF0aH17cmlnaHR9ID0gJHJzaGExOworCQkJfSBlbHNlIHsKKwkJCQkkc3VibW9kdWxleyRkc3RfcGF0aH17cmlnaHR9ID0gIiRyc2hhMS1kaXJ0eSI7CisJCQl9CisJCQluZXh0OworCQl9CisKKwkJaWYgKCRsbW9kZSBlcSAkc3ltbGlua19tb2RlKSB7CisJCQkkc3ltbGlua3skc3JjX3BhdGh9e2xlZnR9ID0KKwkJCQkkZGlmZnJlcG8tPmNvbW1hbmRfb25lbGluZSgnc2hvdycsICIkbHNoYTEiKTsKKwkJfQorCisJCWlmICgkcm1vZGUgZXEgJHN5bWxpbmtfbW9kZSkgeworCQkJJHN5bWxpbmt7JGRzdF9wYXRofXtyaWdodH0gPQorCQkJCSRkaWZmcmVwby0+Y29tbWFuZF9vbmVsaW5lKCdzaG93JywgIiRyc2hhMSIpOworCQl9CisKKwkJaWYgKCRsbW9kZSBuZSAkbnVsbF9tb2RlIGFuZCAkc3RhdHVzICF+IC9eQy8pIHsKKwkJCSRsaW5kZXggLj0gIiRsbW9kZSAkbHNoYTFcdCRzcmNfcGF0aFwwIjsKKwkJfQorCisJCWlmICgkcm1vZGUgbmUgJG51bGxfbW9kZSkgeworCQkJaWYgKCRyc2hhMSBuZSAkbnVsbF9zaGExKSB7CisJCQkJJHJpbmRleCAuPSAiJHJtb2RlICRyc2hhMVx0JGRzdF9wYXRoXDAiOworCQkJfSBlbHNlIHsKKwkJCQlwdXNoKEB3b3JraW5nX3RyZWUsICRkc3RfcGF0aCk7CisJCQl9CisJCX0KKwl9CisKKwkjIFNldHVwIHRlbXAgZGlyZWN0b3JpZXMKKwlteSAkdG1wZGlyID0gdGVtcGRpcignZ2l0LWRpZmZ0b29sLlhYWFhYJywgQ0xFQU5VUCA9PiAwLCBUTVBESVIgPT4gMSk7CisJbXkgJGxkaXIgPSAiJHRtcGRpci9sZWZ0IjsKKwlteSAkcmRpciA9ICIkdG1wZGlyL3JpZ2h0IjsKKwlta3BhdGgoJGxkaXIpIG9yIGV4aXRfY2xlYW51cCgkdG1wZGlyLCAxKTsKKwlta3BhdGgoJHJkaXIpIG9yIGV4aXRfY2xlYW51cCgkdG1wZGlyLCAxKTsKKworCSMgSWYgJEdJVF9ESVIgaXMgbm90IHNldCBwcmlvciB0byBjYWxsaW5nICdnaXQgdXBkYXRlLWluZGV4JyBhbmQKKwkjICdnaXQgY2hlY2tvdXQtaW5kZXgnLCB0aGVuIHRob3NlIGNvbW1hbmRzIHdpbGwgZmFpbCBpZiBkaWZmdG9vbAorCSMgaXMgY2FsbGVkIGZyb20gYSBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgcmVwbyByb290LgorCW15ICRtdXN0X3Vuc2V0X2dpdF9kaXIgPSAwOworCWlmIChub3QgZGVmaW5lZCgkRU5We0dJVF9ESVJ9KSkgeworCQkkbXVzdF91bnNldF9naXRfZGlyID0gMTsKKwkJJEVOVntHSVRfRElSfSA9ICRyZXBvX3BhdGg7CisJfQorCisJIyBQb3B1bGF0ZSB0aGUgbGVmdCBhbmQgcmlnaHQgZGlyZWN0b3JpZXMgYmFzZWQgb24gZWFjaCBpbmRleCBmaWxlCisJbXkgKCRpbnBpcGUsICRjdHgpOworCSRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gIiR0bXBkaXIvbGluZGV4IjsKKwkoJGlucGlwZSwgJGN0eCkgPQorCQkkcmVwby0+Y29tbWFuZF9pbnB1dF9waXBlKHF3KHVwZGF0ZS1pbmRleCAteiAtLWluZGV4LWluZm8pKTsKKwlwcmludCgkaW5waXBlICRsaW5kZXgpOworCSRyZXBvLT5jb21tYW5kX2Nsb3NlX3BpcGUoJGlucGlwZSwgJGN0eCk7CisKKwlteSAkcmMgPSBzeXN0ZW0oJ2dpdCcsICdjaGVja291dC1pbmRleCcsICctLWFsbCcsICItLXByZWZpeD0kbGRpci8iKTsKKwlleGl0X2NsZWFudXAoJHRtcGRpciwgJHJjKSBpZiAkcmMgIT0gMDsKKworCSRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gIiR0bXBkaXIvcmluZGV4IjsKKwkoJGlucGlwZSwgJGN0eCkgPQorCQkkcmVwby0+Y29tbWFuZF9pbnB1dF9waXBlKHF3KHVwZGF0ZS1pbmRleCAteiAtLWluZGV4LWluZm8pKTsKKwlwcmludCgkaW5waXBlICRyaW5kZXgpOworCSRyZXBvLT5jb21tYW5kX2Nsb3NlX3BpcGUoJGlucGlwZSwgJGN0eCk7CisKKwkkcmMgPSBzeXN0ZW0oJ2dpdCcsICdjaGVja291dC1pbmRleCcsICctLWFsbCcsICItLXByZWZpeD0kcmRpci8iKTsKKwlleGl0X2NsZWFudXAoJHRtcGRpciwgJHJjKSBpZiAkcmMgIT0gMDsKKworCSMgSWYgJEdJVF9ESVIgd2FzIGV4cGxpY2l0bHkgc2V0IGp1c3QgZm9yIHRoZSB1cGRhdGUvY2hlY2tvdXQKKwkjIGNvbW1hbmRzLCB0aGVuIGl0IHNob3VsZCBiZSB1bnNldCBiZWZvcmUgY29udGludWluZy4KKwlkZWxldGUoJEVOVntHSVRfRElSfSkgaWYgKCRtdXN0X3Vuc2V0X2dpdF9kaXIpOworCWRlbGV0ZSgkRU5We0dJVF9JTkRFWF9GSUxFfSk7CisKKwkjIENoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IHNpbmNlIHRoZXkgYXJlCisJIyBub3QgcGFydCBvZiB0aGUgaW5kZXgKKwlmb3IgbXkgJGZpbGUgKEB3b3JraW5nX3RyZWUpIHsKKwkJbXkgJGRpciA9IGRpcm5hbWUoJGZpbGUpOworCQl1bmxlc3MgKC1kICIkcmRpci8kZGlyIikgeworCQkJbWtwYXRoKCIkcmRpci8kZGlyIikgb3IKKwkJCWV4aXRfY2xlYW51cCgkdG1wZGlyLCAxKTsKKwkJfQorCQlpZiAoJHN5bWxpbmtzKSB7CisJCQlzeW1saW5rKCIkd29ya2Rpci8kZmlsZSIsICIkcmRpci8kZmlsZSIpIG9yCisJCQlleGl0X2NsZWFudXAoJHRtcGRpciwgMSk7CisJCX0gZWxzZSB7CisJCQljb3B5KCIkd29ya2Rpci8kZmlsZSIsICIkcmRpci8kZmlsZSIpIG9yCisJCQlleGl0X2NsZWFudXAoJHRtcGRpciwgMSk7CisKKwkJCW15ICRtb2RlID0gc3RhdCgiJHdvcmtkaXIvJGZpbGUiKS0+bW9kZTsKKwkJCWNobW9kKCRtb2RlLCAiJHJkaXIvJGZpbGUiKSBvcgorCQkJZXhpdF9jbGVhbnVwKCR0bXBkaXIsIDEpOworCQl9CisJfQorCisJIyBDaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgcmVxdWlyZSBzcGVjaWFsIHRyZWF0bWVudC4gVGhpcyBsb29wIHdyaXRlcyBhCisJIyB0ZW1wb3JhcnkgZmlsZSB0byBib3RoIHRoZSBsZWZ0IGFuZCByaWdodCBkaXJlY3RvcmllcyB0byBzaG93IHRoZQorCSMgY2hhbmdlIGluIHRoZSByZWNvcmRlZCBTSEExIGZvciB0aGUgc3VibW9kdWxlLgorCWZvciBteSAkcGF0aCAoa2V5cyAlc3VibW9kdWxlKSB7CisJCW15ICRvazsKKwkJaWYgKGRlZmluZWQoJHN1Ym1vZHVsZXskcGF0aH17bGVmdH0pKSB7CisJCQkkb2sgPSB3cml0ZV90b19maWxlKCIkbGRpci8kcGF0aCIsCisJCQkJIlN1YnByb2plY3QgY29tbWl0ICRzdWJtb2R1bGV7JHBhdGh9e2xlZnR9Iik7CisJCX0KKwkJaWYgKGRlZmluZWQoJHN1Ym1vZHVsZXskcGF0aH17cmlnaHR9KSkgeworCQkJJG9rID0gd3JpdGVfdG9fZmlsZSgiJHJkaXIvJHBhdGgiLAorCQkJCSJTdWJwcm9qZWN0IGNvbW1pdCAkc3VibW9kdWxleyRwYXRofXtyaWdodH0iKTsKKwkJfQorCQlleGl0X2NsZWFudXAoJHRtcGRpciwgMSkgaWYgbm90ICRvazsKKwl9CisKKwkjIFN5bWJvbGljIGxpbmtzIHJlcXVpcmUgc3BlY2lhbCB0cmVhdG1lbnQuIFRoZSBzdGFuZGFyZCAiZ2l0IGRpZmYiCisJIyBzaG93cyBvbmx5IHRoZSBsaW5rIGl0c2VsZiwgbm90IHRoZSBjb250ZW50cyBvZiB0aGUgbGluayB0YXJnZXQuCisJIyBUaGlzIGxvb3AgcmVwbGljYXRlcyB0aGF0IGJlaGF2aW9yLgorCWZvciBteSAkcGF0aCAoa2V5cyAlc3ltbGluaykgeworCQlteSAkb2s7CisJCWlmIChkZWZpbmVkKCRzeW1saW5reyRwYXRofXtsZWZ0fSkpIHsKKwkJCSRvayA9IHdyaXRlX3RvX2ZpbGUoIiRsZGlyLyRwYXRoIiwKKwkJCQkJJHN5bWxpbmt7JHBhdGh9e2xlZnR9KTsKKwkJfQorCQlpZiAoZGVmaW5lZCgkc3ltbGlua3skcGF0aH17cmlnaHR9KSkgeworCQkJJG9rID0gd3JpdGVfdG9fZmlsZSgiJHJkaXIvJHBhdGgiLAorCQkJCQkkc3ltbGlua3skcGF0aH17cmlnaHR9KTsKKwkJfQorCQlleGl0X2NsZWFudXAoJHRtcGRpciwgMSkgaWYgbm90ICRvazsKKwl9CisKKwlyZXR1cm4gKCRsZGlyLCAkcmRpciwgJHRtcGRpciwgQHdvcmtpbmdfdHJlZSk7Cit9CisKK3N1YiB3cml0ZV90b19maWxlCit7CisJbXkgJHBhdGggPSBzaGlmdDsKKwlteSAkdmFsdWUgPSBzaGlmdDsKKworCSMgTWFrZSBzdXJlIHRoZSBwYXRoIHRvIHRoZSBmaWxlIGV4aXN0cworCW15ICRkaXIgPSBkaXJuYW1lKCRwYXRoKTsKKwl1bmxlc3MgKC1kICIkZGlyIikgeworCQlta3BhdGgoIiRkaXIiKSBvciByZXR1cm4gMDsKKwl9CisKKwkjIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzIGluIHRoYXQgbG9jYXRpb24sIGRlbGV0ZSBpdC4gIFRoaXMKKwkjIGlzIHJlcXVpcmVkIGluIHRoZSBjYXNlIG9mIHN5bWJvbGljIGxpbmtzLgorCXVubGluaygkcGF0aCk7CisKKwlvcGVuKG15ICRmaCwgJz4nLCAkcGF0aCkgb3IgcmV0dXJuIDA7CisJcHJpbnQoJGZoICR2YWx1ZSk7CisJY2xvc2UoJGZoKTsKKworCXJldHVybiAxOworfQorCitzdWIgbWFpbgoreworCSMgcGFyc2UgY29tbWFuZC1saW5lIG9wdGlvbnMuIGFsbCB1bnJlY29nbml6ZWQgb3B0aW9ucyBhbmQgYXJndW1lbnRzCisJIyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlICdnaXQgZGlmZicgY29tbWFuZC4KKwlteSAlb3B0cyA9ICgKKwkJZGlmZnRvb2xfY21kID0+IHVuZGVmLAorCQlkaXJkaWZmID0+IHVuZGVmLAorCQlleHRjbWQgPT4gdW5kZWYsCisJCWd1aSA9PiB1bmRlZiwKKwkJaGVscCA9PiB1bmRlZiwKKwkJcHJvbXB0ID0+IHVuZGVmLAorCQlzeW1saW5rcyA9PiAkXk8gbmUgJ2N5Z3dpbicgJiYKKwkJCQkkXk8gbmUgJ01TV2luMzInICYmICReTyBuZSAnbXN5cycsCisJCXRvb2xfaGVscCA9PiB1bmRlZiwKKwkpOworCUdldE9wdGlvbnMoJ2d8Z3VpIScgPT4gXCRvcHRze2d1aX0sCisJCSdkfGRpci1kaWZmJyA9PiBcJG9wdHN7ZGlyZGlmZn0sCisJCSdoJyA9PiBcJG9wdHN7aGVscH0sCisJCSdwcm9tcHQhJyA9PiBcJG9wdHN7cHJvbXB0fSwKKwkJJ3knID0+IHN1YiB7ICRvcHRze3Byb21wdH0gPSAwOyB9LAorCQknc3ltbGlua3MnID0+IFwkb3B0c3tzeW1saW5rc30sCisJCSduby1zeW1saW5rcycgPT4gc3ViIHsgJG9wdHN7c3ltbGlua3N9ID0gMDsgfSwKKwkJJ3R8dG9vbDpzJyA9PiBcJG9wdHN7ZGlmZnRvb2xfY21kfSwKKwkJJ3Rvb2wtaGVscCcgPT4gXCRvcHRze3Rvb2xfaGVscH0sCisJCSd4fGV4dGNtZDpzJyA9PiBcJG9wdHN7ZXh0Y21kfSk7CisKKwlpZiAoZGVmaW5lZCgkb3B0c3toZWxwfSkpIHsKKwkJdXNhZ2UoMCk7CisJfQorCWlmIChkZWZpbmVkKCRvcHRze3Rvb2xfaGVscH0pKSB7CisJCXByaW50X3Rvb2xfaGVscCgpOworCX0KKwlpZiAoZGVmaW5lZCgkb3B0c3tkaWZmdG9vbF9jbWR9KSkgeworCQlpZiAobGVuZ3RoKCRvcHRze2RpZmZ0b29sX2NtZH0pID4gMCkgeworCQkJJEVOVntHSVRfRElGRl9UT09MfSA9ICRvcHRze2RpZmZ0b29sX2NtZH07CisJCX0gZWxzZSB7CisJCQlwcmludCAiTm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+XG4iOworCQkJdXNhZ2UoMSk7CisJCX0KKwl9CisJaWYgKGRlZmluZWQoJG9wdHN7ZXh0Y21kfSkpIHsKKwkJaWYgKGxlbmd0aCgkb3B0c3tleHRjbWR9KSA+IDApIHsKKwkJCSRFTlZ7R0lUX0RJRkZUT09MX0VYVENNRH0gPSAkb3B0c3tleHRjbWR9OworCQl9IGVsc2UgeworCQkJcHJpbnQgIk5vIDxjbWQ+IGdpdmVuIGZvciAtLWV4dGNtZD08Y21kPlxuIjsKKwkJCXVzYWdlKDEpOworCQl9CisJfQorCWlmICgkb3B0c3tndWl9KSB7CisJCW15ICRndWl0b29sID0gR2l0Ojpjb25maWcoJ2RpZmYuZ3VpdG9vbCcpOworCQlpZiAobGVuZ3RoKCRndWl0b29sKSA+IDApIHsKKwkJCSRFTlZ7R0lUX0RJRkZfVE9PTH0gPSAkZ3VpdG9vbDsKKwkJfQorCX0KKworCSMgSW4gZGlyZWN0b3J5IGRpZmYgbW9kZSwgJ2dpdC1kaWZmdG9vbC0taGVscGVyJyBpcyBjYWxsZWQgb25jZQorCSMgdG8gY29tcGFyZSB0aGUgYS9iIGRpcmVjdG9yaWVzLiAgSW4gZmlsZSBkaWZmIG1vZGUsICdnaXQgZGlmZicKKwkjIHdpbGwgaW52b2tlIGEgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgJ2dpdC1kaWZmdG9vbC0taGVscGVyJyBmb3IKKwkjIGVhY2ggZmlsZSB0aGF0IGNoYW5nZWQuCisJaWYgKGRlZmluZWQoJG9wdHN7ZGlyZGlmZn0pKSB7CisJCWRpcl9kaWZmKCRvcHRze2V4dGNtZH0sICRvcHRze3N5bWxpbmtzfSk7CisJfSBlbHNlIHsKKwkJZmlsZV9kaWZmKCRvcHRze3Byb21wdH0pOworCX0KK30KKworc3ViIGRpcl9kaWZmCit7CisJbXkgKCRleHRjbWQsICRzeW1saW5rcykgPSBAXzsKKwlteSAkcmM7CisJbXkgJGVycm9yID0gMDsKKwlteSAkcmVwbyA9IEdpdC0+cmVwb3NpdG9yeSgpOworCW15ICR3b3JrZGlyID0gZmluZF93b3JrdHJlZSgkcmVwbyk7CisJbXkgKCRhLCAkYiwgJHRtcGRpciwgQHdvcmt0cmVlKSA9CisJCXNldHVwX2Rpcl9kaWZmKCRyZXBvLCAkd29ya2RpciwgJHN5bWxpbmtzKTsKKworCWlmIChkZWZpbmVkKCRleHRjbWQpKSB7CisJCSRyYyA9IHN5c3RlbSgkZXh0Y21kLCAkYSwgJGIpOworCX0gZWxzZSB7CisJCSRFTlZ7R0lUX0RJRkZUT09MX0RJUkRJRkZ9ID0gJ3RydWUnOworCQkkcmMgPSBzeXN0ZW0oJ2dpdCcsICdkaWZmdG9vbC0taGVscGVyJywgJGEsICRiKTsKKwl9CisJIyBJZiB0aGUgZGlmZiBpbmNsdWRpbmcgd29ya2luZyBjb3B5IGZpbGVzIGFuZCB0aG9zZQorCSMgZmlsZXMgd2VyZSBtb2RpZmllZCBkdXJpbmcgdGhlIGRpZmYsIHRoZW4gdGhlIGNoYW5nZXMKKwkjIHNob3VsZCBiZSBjb3BpZWQgYmFjayB0byB0aGUgd29ya2luZyB0cmVlLgorCSMgRG8gbm90IGNvcHkgYmFjayBmaWxlcyB3aGVuIHN5bWxpbmtzIGFyZSB1c2VkIGFuZCB0aGUKKwkjIGV4dGVybmFsIHRvb2wgZGlkIG5vdCByZXBsYWNlIHRoZSBvcmlnaW5hbCBsaW5rIHdpdGggYSBmaWxlLgorCWZvciBteSAkZmlsZSAoQHdvcmt0cmVlKSB7CisJCW5leHQgaWYgJHN5bWxpbmtzICYmIC1sICIkYi8kZmlsZSI7CisJCW5leHQgaWYgISAtZiAiJGIvJGZpbGUiOworCisJCW15ICRkaWZmID0gY29tcGFyZSgiJGIvJGZpbGUiLCAiJHdvcmtkaXIvJGZpbGUiKTsKKwkJaWYgKCRkaWZmID09IDApIHsKKwkJCW5leHQ7CisJCX0gZWxzaWYgKCRkaWZmID09IC0xKSB7CisJCQlteSAkZXJybXNnID0gIndhcm5pbmc6IENvdWxkIG5vdCBjb21wYXJlICI7CisJCQkkZXJybXNnICs9ICInJGIvJGZpbGUnIHdpdGggJyR3b3JrZGlyLyRmaWxlJ1xuIjsKKwkJCXdhcm4gJGVycm1zZzsKKwkJCSRlcnJvciA9IDE7CisJCX0gZWxzaWYgKCRkaWZmID09IDEpIHsKKwkJCW15ICRtb2RlID0gc3RhdCgiJGIvJGZpbGUiKS0+bW9kZTsKKwkJCWNvcHkoIiRiLyRmaWxlIiwgIiR3b3JrZGlyLyRmaWxlIikgb3IKKwkJCWV4aXRfY2xlYW51cCgkdG1wZGlyLCAxKTsKKworCQkJY2htb2QoJG1vZGUsICIkd29ya2Rpci8kZmlsZSIpIG9yCisJCQlleGl0X2NsZWFudXAoJHRtcGRpciwgMSk7CisJCX0KKwl9CisJaWYgKCRlcnJvcikgeworCQl3YXJuICJ3YXJuaW5nOiBUZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyR0bXBkaXInLlxuIjsKKwkJd2FybiAid2FybmluZzogWW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS5cbiI7CisJCWV4aXQoMSk7CisJfSBlbHNlIHsKKwkJZXhpdF9jbGVhbnVwKCR0bXBkaXIsICRyYyk7CisJfQorfQorCitzdWIgZmlsZV9kaWZmCit7CisJbXkgKCRwcm9tcHQpID0gQF87CisKKwlpZiAoZGVmaW5lZCgkcHJvbXB0KSkgeworCQlpZiAoJHByb21wdCkgeworCQkJJEVOVntHSVRfRElGRlRPT0xfUFJPTVBUfSA9ICd0cnVlJzsKKwkJfSBlbHNlIHsKKwkJCSRFTlZ7R0lUX0RJRkZUT09MX05PX1BST01QVH0gPSAndHJ1ZSc7CisJCX0KKwl9CisKKwkkRU5We0dJVF9QQUdFUn0gPSAnJzsKKwkkRU5We0dJVF9FWFRFUk5BTF9ESUZGfSA9ICdnaXQtZGlmZnRvb2wtLWhlbHBlcic7CisKKwkjIEFjdGl2ZVN0YXRlIFBlcmwgZm9yIFdpbjMyIGRvZXMgbm90IGltcGxlbWVudCBQT1NJWCBzZW1hbnRpY3Mgb2YKKwkjIGV4ZWMqIHN5c3RlbSBjYWxsLiBJdCBqdXN0IHNwYXducyB0aGUgZ2l2ZW4gZXhlY3V0YWJsZSBhbmQgZmluaXNoZXMKKwkjIHRoZSBzdGFydGluZyBwcm9ncmFtLCBleGl0aW5nIHdpdGggY29kZSAwLgorCSMgc3lzdGVtIHdpbGwgYXQgbGVhc3QgY2F0Y2ggdGhlIGVycm9ycyByZXR1cm5lZCBieSBnaXQgZGlmZiwKKwkjIGFsbG93aW5nIHRoZSBjYWxsZXIgb2YgZ2l0IGRpZmZ0b29sIGJldHRlciBoYW5kbGluZyBvZiBmYWlsdXJlcy4KKwlteSAkcmMgPSBzeXN0ZW0oJ2dpdCcsICdkaWZmJywgQEFSR1YpOworCWV4aXQoJHJjIHwgKCRyYyA+PiA4KSk7Cit9CisKK21haW4oKTsKZGlmZiAtLWdpdCBhL2dpdC1maWx0ZXItYnJhbmNoLnNoIGIvZ2l0LWZpbHRlci1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTc4ZTQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1maWx0ZXItYnJhbmNoLnNoCkBAIC0wLDAgKzEsNTE0IEBACisjIS9iaW4vc2gKKyMKKyMgUmV3cml0ZSByZXZpc2lvbiBoaXN0b3J5CisjIENvcHlyaWdodCAoYykgUGV0ciBCYXVkaXMsIDIwMDYKKyMgTWluaW1hbCBjaGFuZ2VzIHRvICJwb3J0IiBpdCB0byBjb3JlLWdpdCAoYykgSm9oYW5uZXMgU2NoaW5kZWxpbiwgMjAwNworIworIyBMZXRzIHlvdSByZXdyaXRlIHRoZSByZXZpc2lvbiBoaXN0b3J5IG9mIHRoZSBjdXJyZW50IGJyYW5jaCwgY3JlYXRpbmcKKyMgYSBuZXcgYnJhbmNoLiBZb3UgY2FuIHNwZWNpZnkgYSBudW1iZXIgb2YgZmlsdGVycyB0byBtb2RpZnkgdGhlIGNvbW1pdHMsCisjIGZpbGVzIGFuZCB0cmVlcy4KKworIyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3aWxsIGFsc28gYmUgYXZhaWxhYmxlIGluIHRoZSBjb21taXQgZmlsdGVyOgorCitmdW5jdGlvbnM9JChjYXQgPDwgXEVPRgord2FybiAoKSB7CisJZWNobyAiJCoiID4mMgorfQorCittYXAoKQoreworCSMgaWYgaXQgd2FzIG5vdCByZXdyaXR0ZW4sIHRha2UgdGhlIG9yaWdpbmFsCisJaWYgdGVzdCAtciAiJHdvcmtkaXIvLi4vbWFwLyQxIgorCXRoZW4KKwkJY2F0ICIkd29ya2Rpci8uLi9tYXAvJDEiCisJZWxzZQorCQllY2hvICIkMSIKKwlmaQorfQorCisjIGlmIHlvdSBydW4gJ3NraXBfY29tbWl0ICIkQCInIGluIGEgY29tbWl0IGZpbHRlciwgaXQgd2lsbCBwcmludAorIyB0aGUgKG1hcHBlZCkgcGFyZW50cywgZWZmZWN0aXZlbHkgc2tpcHBpbmcgdGhlIGNvbW1pdC4KKworc2tpcF9jb21taXQoKQoreworCXNoaWZ0OworCXdoaWxlIFsgLW4gIiQxIiBdOworCWRvCisJCXNoaWZ0OworCQltYXAgIiQxIjsKKwkJc2hpZnQ7CisJZG9uZTsKK30KKworIyBpZiB5b3UgcnVuICdnaXRfY29tbWl0X25vbl9lbXB0eV90cmVlICIkQCInIGluIGEgY29tbWl0IGZpbHRlciwKKyMgaXQgd2lsbCBza2lwIGNvbW1pdHMgdGhhdCBsZWF2ZSB0aGUgdHJlZSB1bnRvdWNoZWQsIGNvbW1pdCB0aGUgb3RoZXIuCitnaXRfY29tbWl0X25vbl9lbXB0eV90cmVlKCkKK3sKKwlpZiB0ZXN0ICQjID0gMyAmJiB0ZXN0ICIkMSIgPSAkKGdpdCByZXYtcGFyc2UgIiQzXnt0cmVlfSIpOyB0aGVuCisJCW1hcCAiJDMiCisJZWxzZQorCQlnaXQgY29tbWl0LXRyZWUgIiRAIgorCWZpCit9CisjIG92ZXJyaWRlIGRpZSgpOiB0aGlzIHZlcnNpb24gcHV0cyBpbiBhbiBleHRyYSBsaW5lIGJyZWFrLCBzbyB0aGF0CisjIHRoZSBwcm9ncmVzcyBpcyBzdGlsbCB2aXNpYmxlCisKK2RpZSgpCit7CisJZWNobyA+JjIKKwllY2hvICIkKiIgPiYyCisJZXhpdCAxCit9CitFT0YKKykKKworZXZhbCAiJGZ1bmN0aW9ucyIKKworIyBXaGVuIHBpcGVkIGEgY29tbWl0LCBvdXRwdXQgYSBzY3JpcHQgdG8gc2V0IHRoZSBpZGVudCBvZiBlaXRoZXIKKyMgImF1dGhvciIgb3IgImNvbW1pdHRlcgorCitzZXRfaWRlbnQgKCkgeworCWxpZD0iJChlY2hvICIkMSIgfCB0ciAiW0EtWl0iICJbYS16XSIpIgorCXVpZD0iJChlY2hvICIkMSIgfCB0ciAiW2Etel0iICJbQS1aXSIpIgorCXBpY2tfaWRfc2NyaXB0PScKKwkJL14nJGxpZCcgL3sKKwkJCXMvJ1wnJy8nXCcnXFwnXCdcJycvZworCQkJaAorCQkJcy9eJyRsaWQnIFwoW148XSpcKSA8W14+XSo+IC4qJC9cMS8KKwkJCXMvJ1wnJy8nXCcnXCdcJ1wnJy9nCisJCQlzLy4qL0dJVF8nJHVpZCdfTkFNRT0nXCcnJidcJyc7IGV4cG9ydCBHSVRfJyR1aWQnX05BTUUvcAorCisJCQlnCisJCQlzL14nJGxpZCcgW148XSogPFwoW14+XSpcKT4gLiokL1wxLworCQkJcy8nXCcnLydcJydcJ1wnXCcnL2cKKwkJCXMvLiovR0lUXyckdWlkJ19FTUFJTD0nXCcnJidcJyc7IGV4cG9ydCBHSVRfJyR1aWQnX0VNQUlML3AKKworCQkJZworCQkJcy9eJyRsaWQnIFtePF0qIDxbXj5dKj4gXCguKlwpJC9AXDEvCisJCQlzLydcJycvJ1wnJ1wnXCdcJycvZworCQkJcy8uKi9HSVRfJyR1aWQnX0RBVEU9J1wnJyYnXCcnOyBleHBvcnQgR0lUXyckdWlkJ19EQVRFL3AKKworCQkJcQorCQl9CisJJworCisJTEFORz1DIExDX0FMTD1DIHNlZCAtbmUgIiRwaWNrX2lkX3NjcmlwdCIKKwkjIEVuc3VyZSBub24tZW1wdHkgaWQgbmFtZS4KKwllY2hvICJjYXNlIFwiXCRHSVRfJHt1aWR9X05BTUVcIiBpbiBcIlwiKSBHSVRfJHt1aWR9X05BTUU9XCJcJHtHSVRfJHt1aWR9X0VNQUlMJSVAKn1cIiAmJiBleHBvcnQgR0lUXyR7dWlkfV9OQU1FOzsgZXNhYyIKK30KKworVVNBR0U9IlstLWVudi1maWx0ZXIgPGNvbW1hbmQ+XSBbLS10cmVlLWZpbHRlciA8Y29tbWFuZD5dCisJWy0taW5kZXgtZmlsdGVyIDxjb21tYW5kPl0gWy0tcGFyZW50LWZpbHRlciA8Y29tbWFuZD5dCisJWy0tbXNnLWZpbHRlciA8Y29tbWFuZD5dIFstLWNvbW1pdC1maWx0ZXIgPGNvbW1hbmQ+XQorCVstLXRhZy1uYW1lLWZpbHRlciA8Y29tbWFuZD5dIFstLXN1YmRpcmVjdG9yeS1maWx0ZXIgPGRpcmVjdG9yeT5dCisJWy0tb3JpZ2luYWwgPG5hbWVzcGFjZT5dIFstZCA8ZGlyZWN0b3J5Pl0gWy1mIHwgLS1mb3JjZV0KKwlbPHJldi1saXN0IG9wdGlvbnM+Li4uXSIKKworT1BUSU9OU19TUEVDPQorLiBnaXQtc2gtc2V0dXAKKworaWYgWyAiJChpc19iYXJlX3JlcG9zaXRvcnkpIiA9IGZhbHNlIF07IHRoZW4KKwlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSAncmV3cml0ZSBicmFuY2hlcycKK2ZpCisKK3RlbXBkaXI9LmdpdC1yZXdyaXRlCitmaWx0ZXJfZW52PQorZmlsdGVyX3RyZWU9CitmaWx0ZXJfaW5kZXg9CitmaWx0ZXJfcGFyZW50PQorZmlsdGVyX21zZz1jYXQKK2ZpbHRlcl9jb21taXQ9CitmaWx0ZXJfdGFnX25hbWU9CitmaWx0ZXJfc3ViZGlyPQorb3JpZ19uYW1lc3BhY2U9cmVmcy9vcmlnaW5hbC8KK2ZvcmNlPQorcHJ1bmVfZW1wdHk9CityZW1hcF90b19hbmNlc3Rvcj0KK3doaWxlIDoKK2RvCisJY2FzZSAiJDEiIGluCisJLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJLS1mb3JjZXwtZikKKwkJc2hpZnQKKwkJZm9yY2U9dAorCQljb250aW51ZQorCQk7OworCS0tcmVtYXAtdG8tYW5jZXN0b3IpCisJCSMgZGVwcmVjYXRlZCAoJHJlbWFwX3RvX2FuY2VzdG9yIGlzIHNldCBub3cgYXV0b21hdGljYWxseSkKKwkJc2hpZnQKKwkJcmVtYXBfdG9fYW5jZXN0b3I9dAorCQljb250aW51ZQorCQk7OworCS0tcHJ1bmUtZW1wdHkpCisJCXNoaWZ0CisJCXBydW5lX2VtcHR5PXQKKwkJY29udGludWUKKwkJOzsKKwktKikKKwkJOzsKKwkqKQorCQlicmVhazsKKwllc2FjCisKKwkjIGFsbCBzd2l0Y2hlcyB0YWtlIG9uZSBhcmd1bWVudAorCUFSRz0iJDEiCisJY2FzZSAiJCMiIGluIDEpIHVzYWdlIDs7IGVzYWMKKwlzaGlmdAorCU9QVEFSRz0iJDEiCisJc2hpZnQKKworCWNhc2UgIiRBUkciIGluCisJLWQpCisJCXRlbXBkaXI9IiRPUFRBUkciCisJCTs7CisJLS1lbnYtZmlsdGVyKQorCQlmaWx0ZXJfZW52PSIkT1BUQVJHIgorCQk7OworCS0tdHJlZS1maWx0ZXIpCisJCWZpbHRlcl90cmVlPSIkT1BUQVJHIgorCQk7OworCS0taW5kZXgtZmlsdGVyKQorCQlmaWx0ZXJfaW5kZXg9IiRPUFRBUkciCisJCTs7CisJLS1wYXJlbnQtZmlsdGVyKQorCQlmaWx0ZXJfcGFyZW50PSIkT1BUQVJHIgorCQk7OworCS0tbXNnLWZpbHRlcikKKwkJZmlsdGVyX21zZz0iJE9QVEFSRyIKKwkJOzsKKwktLWNvbW1pdC1maWx0ZXIpCisJCWZpbHRlcl9jb21taXQ9IiRmdW5jdGlvbnM7ICRPUFRBUkciCisJCTs7CisJLS10YWctbmFtZS1maWx0ZXIpCisJCWZpbHRlcl90YWdfbmFtZT0iJE9QVEFSRyIKKwkJOzsKKwktLXN1YmRpcmVjdG9yeS1maWx0ZXIpCisJCWZpbHRlcl9zdWJkaXI9IiRPUFRBUkciCisJCXJlbWFwX3RvX2FuY2VzdG9yPXQKKwkJOzsKKwktLW9yaWdpbmFsKQorCQlvcmlnX25hbWVzcGFjZT0kKGV4cHIgIiRPUFRBUkcvIiA6ICdcKC4qW14vXVwpLyokJykvCisJCTs7CisJKikKKwkJdXNhZ2UKKwkJOzsKKwllc2FjCitkb25lCisKK2Nhc2UgIiRwcnVuZV9lbXB0eSwkZmlsdGVyX2NvbW1pdCIgaW4KKywpCisJZmlsdGVyX2NvbW1pdD0nZ2l0IGNvbW1pdC10cmVlICIkQCInOzsKK3QsKQorCWZpbHRlcl9jb21taXQ9IiRmdW5jdGlvbnM7IicgZ2l0X2NvbW1pdF9ub25fZW1wdHlfdHJlZSAiJEAiJzs7CissKikKKwk7OworKikKKwlkaWUgIkNhbm5vdCBzZXQgLS1wcnVuZS1lbXB0eSBhbmQgLS1jb21taXQtZmlsdGVyIGF0IHRoZSBzYW1lIHRpbWUiCitlc2FjCisKK2Nhc2UgIiRmb3JjZSIgaW4KK3QpCisJcm0gLXJmICIkdGVtcGRpciIKKzs7CisnJykKKwl0ZXN0IC1kICIkdGVtcGRpciIgJiYKKwkJZGllICIkdGVtcGRpciBhbHJlYWR5IGV4aXN0cywgcGxlYXNlIHJlbW92ZSBpdCIKK2VzYWMKK21rZGlyIC1wICIkdGVtcGRpci90IiAmJgordGVtcGRpcj0iJChjZCAiJHRlbXBkaXIiOyBwd2QpIiAmJgorY2QgIiR0ZW1wZGlyL3QiICYmCit3b3JrZGlyPSIkKHB3ZCkiIHx8CitkaWUgIiIKKworIyBSZW1vdmUgdGVtcGRpciBvbiBleGl0Cit0cmFwICdjZCAuLi8uLjsgcm0gLXJmICIkdGVtcGRpciInIDAKKworT1JJR19HSVRfRElSPSIkR0lUX0RJUiIKK09SSUdfR0lUX1dPUktfVFJFRT0iJEdJVF9XT1JLX1RSRUUiCitPUklHX0dJVF9JTkRFWF9GSUxFPSIkR0lUX0lOREVYX0ZJTEUiCitHSVRfV09SS19UUkVFPS4KK2V4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUKKworIyBNYWtlIHN1cmUgcmVmcy9vcmlnaW5hbCBpcyBlbXB0eQorZ2l0IGZvci1lYWNoLXJlZiA+ICIkdGVtcGRpciIvYmFja3VwLXJlZnMgfHwgZXhpdAord2hpbGUgcmVhZCBzaGExIHR5cGUgbmFtZQorZG8KKwljYXNlICIkZm9yY2UsJG5hbWUiIGluCisJLCRvcmlnX25hbWVzcGFjZSopCisJCWRpZSAiQ2Fubm90IGNyZWF0ZSBhIG5ldyBiYWNrdXAuCitBIHByZXZpb3VzIGJhY2t1cCBhbHJlYWR5IGV4aXN0cyBpbiAkb3JpZ19uYW1lc3BhY2UKK0ZvcmNlIG92ZXJ3cml0aW5nIHRoZSBiYWNrdXAgd2l0aCAtZiIKKwk7OworCXQsJG9yaWdfbmFtZXNwYWNlKikKKwkJZ2l0IHVwZGF0ZS1yZWYgLWQgIiRuYW1lIiAkc2hhMQorCTs7CisJZXNhYworZG9uZSA8ICIkdGVtcGRpciIvYmFja3VwLXJlZnMKKworIyBUaGUgcmVmcyBzaG91bGQgYmUgdXBkYXRlZCBpZiB0aGVpciBoZWFkcyB3ZXJlIHJld3JpdHRlbgorZ2l0IHJldi1wYXJzZSAtLW5vLWZsYWdzIC0tcmV2cy1vbmx5IC0tc3ltYm9saWMtZnVsbC1uYW1lIFwKKwktLWRlZmF1bHQgSEVBRCAiJEAiID4gIiR0ZW1wZGlyIi9yYXctaGVhZHMgfHwgZXhpdAorc2VkIC1lICcvXl4vZCcgIiR0ZW1wZGlyIi9yYXctaGVhZHMgPiIkdGVtcGRpciIvaGVhZHMKKwordGVzdCAtcyAiJHRlbXBkaXIiL2hlYWRzIHx8CisJZGllICJXaGljaCByZWYgZG8geW91IHdhbnQgdG8gcmV3cml0ZT8iCisKK0dJVF9JTkRFWF9GSUxFPSIkKHB3ZCkvLi4vaW5kZXgiCitleHBvcnQgR0lUX0lOREVYX0ZJTEUKKworIyBtYXAgb2xkLT5uZXcgY29tbWl0IGlkcyBmb3IgcmV3cml0aW5nIHBhcmVudHMKK21rZGlyIC4uL21hcCB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgbWFwLyBkaXJlY3RvcnkiCisKKyMgd2UgbmVlZCAiLS0iIG9ubHkgaWYgdGhlcmUgYXJlIG5vIHBhdGggYXJndW1lbnRzIGluICRACitub25yZXZzPSQoZ2l0IHJldi1wYXJzZSAtLW5vLXJldnMgIiRAIikgfHwgZXhpdAoraWYgdGVzdCAteiAiJG5vbnJldnMiCit0aGVuCisJZGFzaGRhc2g9LS0KK2Vsc2UKKwlkYXNoZGFzaD0KKwlyZW1hcF90b19hbmNlc3Rvcj10CitmaQorCityZXZfYXJncz0kKGdpdCByZXYtcGFyc2UgLS1yZXZzLW9ubHkgIiRAIikKKworY2FzZSAiJGZpbHRlcl9zdWJkaXIiIGluCisiIikKKwlldmFsIHNldCAtLSAiJChnaXQgcmV2LXBhcnNlIC0tc3EgLS1uby1yZXZzICIkQCIpIgorCTs7CisqKQorCWV2YWwgc2V0IC0tICIkKGdpdCByZXYtcGFyc2UgLS1zcSAtLW5vLXJldnMgIiRAIiAkZGFzaGRhc2ggXAorCQkiJGZpbHRlcl9zdWJkaXIiKSIKKwk7OworZXNhYworCitnaXQgcmV2LWxpc3QgLS1yZXZlcnNlIC0tdG9wby1vcmRlciAtLWRlZmF1bHQgSEVBRCBcCisJLS1wYXJlbnRzIC0tc2ltcGxpZnktbWVyZ2VzICRyZXZfYXJncyAiJEAiID4gLi4vcmV2cyB8fAorCWRpZSAiQ291bGQgbm90IGdldCB0aGUgY29tbWl0cyIKK2NvbW1pdHM9JCh3YyAtbCA8Li4vcmV2cyB8IHRyIC1kICIgIikKKwordGVzdCAkY29tbWl0cyAtZXEgMCAmJiBkaWUgIkZvdW5kIG5vdGhpbmcgdG8gcmV3cml0ZSIKKworIyBSZXdyaXRlIHRoZSBjb21taXRzCisKK2dpdF9maWx0ZXJfYnJhbmNoX19jb21taXRfY291bnQ9MAord2hpbGUgcmVhZCBjb21taXQgcGFyZW50czsgZG8KKwlnaXRfZmlsdGVyX2JyYW5jaF9fY29tbWl0X2NvdW50PSQoKCRnaXRfZmlsdGVyX2JyYW5jaF9fY29tbWl0X2NvdW50KzEpKQorCXByaW50ZiAiXHJSZXdyaXRlICRjb21taXQgKCRnaXRfZmlsdGVyX2JyYW5jaF9fY29tbWl0X2NvdW50LyRjb21taXRzKSIKKworCWNhc2UgIiRmaWx0ZXJfc3ViZGlyIiBpbgorCSIiKQorCQlnaXQgcmVhZC10cmVlIC1pIC1tICRjb21taXQKKwkJOzsKKwkqKQorCQkjIFRoZSBjb21taXQgbWF5IG5vdCBoYXZlIHRoZSBzdWJkaXJlY3RvcnkgYXQgYWxsCisJCWVycj0kKGdpdCByZWFkLXRyZWUgLWkgLW0gJGNvbW1pdDoiJGZpbHRlcl9zdWJkaXIiIDI+JjEpIHx8IHsKKwkJCWlmICEgZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAkY29tbWl0OiIkZmlsdGVyX3N1YmRpciIKKwkJCXRoZW4KKwkJCQlybSAtZiAiJEdJVF9JTkRFWF9GSUxFIgorCQkJZWxzZQorCQkJCWVjaG8gPiYyICIkZXJyIgorCQkJCWZhbHNlCisJCQlmaQorCQl9CisJZXNhYyB8fCBkaWUgIkNvdWxkIG5vdCBpbml0aWFsaXplIHRoZSBpbmRleCIKKworCUdJVF9DT01NSVQ9JGNvbW1pdAorCWV4cG9ydCBHSVRfQ09NTUlUCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJGNvbW1pdCIgPi4uL2NvbW1pdCB8fAorCQlkaWUgIkNhbm5vdCByZWFkIGNvbW1pdCAkY29tbWl0IgorCisJZXZhbCAiJChzZXRfaWRlbnQgQVVUSE9SIDwuLi9jb21taXQpIiB8fAorCQlkaWUgInNldHRpbmcgYXV0aG9yIGZhaWxlZCBmb3IgY29tbWl0ICRjb21taXQiCisJZXZhbCAiJChzZXRfaWRlbnQgQ09NTUlUVEVSIDwuLi9jb21taXQpIiB8fAorCQlkaWUgInNldHRpbmcgY29tbWl0dGVyIGZhaWxlZCBmb3IgY29tbWl0ICRjb21taXQiCisJZXZhbCAiJGZpbHRlcl9lbnYiIDwgL2Rldi9udWxsIHx8CisJCWRpZSAiZW52IGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfZW52IgorCisJaWYgWyAiJGZpbHRlcl90cmVlIiBdOyB0aGVuCisJCWdpdCBjaGVja291dC1pbmRleCAtZiAtdSAtYSB8fAorCQkJZGllICJDb3VsZCBub3QgY2hlY2tvdXQgdGhlIGluZGV4IgorCQkjIGZpbGVzIHRoYXQgJGNvbW1pdCByZW1vdmVkIGFyZSBub3cgc3RpbGwgaW4gdGhlIHdvcmtpbmcgdHJlZTsKKwkJIyByZW1vdmUgdGhlbSwgZWxzZSB0aGV5IHdvdWxkIGJlIGFkZGVkIGFnYWluCisJCWdpdCBjbGVhbiAtZCAtcSAtZiAteAorCQlldmFsICIkZmlsdGVyX3RyZWUiIDwgL2Rldi9udWxsIHx8CisJCQlkaWUgInRyZWUgZmlsdGVyIGZhaWxlZDogJGZpbHRlcl90cmVlIgorCisJCSgKKwkJCWdpdCBkaWZmLWluZGV4IC1yIC0tbmFtZS1vbmx5IC0taWdub3JlLXN1Ym1vZHVsZXMgJGNvbW1pdCAmJgorCQkJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzCisJCSkgPiAiJHRlbXBkaXIiL3RyZWUtc3RhdGUgfHwgZXhpdAorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVwbGFjZSAtLXJlbW92ZSAtLXN0ZGluIFwKKwkJCTwgIiR0ZW1wZGlyIi90cmVlLXN0YXRlIHx8IGV4aXQKKwlmaQorCisJZXZhbCAiJGZpbHRlcl9pbmRleCIgPCAvZGV2L251bGwgfHwKKwkJZGllICJpbmRleCBmaWx0ZXIgZmFpbGVkOiAkZmlsdGVyX2luZGV4IgorCisJcGFyZW50c3RyPQorCWZvciBwYXJlbnQgaW4gJHBhcmVudHM7IGRvCisJCWZvciByZXBhcmVudCBpbiAkKG1hcCAiJHBhcmVudCIpOyBkbworCQkJcGFyZW50c3RyPSIkcGFyZW50c3RyIC1wICRyZXBhcmVudCIKKwkJZG9uZQorCWRvbmUKKwlpZiBbICIkZmlsdGVyX3BhcmVudCIgXTsgdGhlbgorCQlwYXJlbnRzdHI9IiQoZWNobyAiJHBhcmVudHN0ciIgfCBldmFsICIkZmlsdGVyX3BhcmVudCIpIiB8fAorCQkJCWRpZSAicGFyZW50IGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfcGFyZW50IgorCWZpCisKKwlzZWQgLWUgJzEsL14kL2QnIDwuLi9jb21taXQgfCBcCisJCWV2YWwgIiRmaWx0ZXJfbXNnIiA+IC4uL21lc3NhZ2UgfHwKKwkJCWRpZSAibXNnIGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfbXNnIgorCXdvcmtkaXI9JHdvcmtkaXIgQFNIRUxMX1BBVEhAIC1jICIkZmlsdGVyX2NvbW1pdCIgImdpdCBjb21taXQtdHJlZSIgXAorCQkkKGdpdCB3cml0ZS10cmVlKSAkcGFyZW50c3RyIDwgLi4vbWVzc2FnZSA+IC4uL21hcC8kY29tbWl0IHx8CisJCQlkaWUgImNvdWxkIG5vdCB3cml0ZSByZXdyaXR0ZW4gY29tbWl0IgorZG9uZSA8Li4vcmV2cworCisjIElmIHdlIGFyZSBmaWx0ZXJpbmcgZm9yIHBhdGhzLCBhcyBpbiB0aGUgY2FzZSBvZiBhIHN1YmRpcmVjdG9yeQorIyBmaWx0ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBzcGVjaWZpZWQgaGVhZCBpcyBub3QgaW4gdGhlIHNldCBvZgorIyByZXdyaXR0ZW4gY29tbWl0cywgYmVjYXVzZSBpdCB3YXMgcHJ1bmVkIGJ5IHRoZSByZXZpc2lvbiB3YWxrZXIuCisjIEFuY2VzdG9yIHJlbWFwcGluZyBmaXhlcyB0aGlzIGJ5IG1hcHBpbmcgdGhlc2UgaGVhZHMgdG8gdGhlIHVuaXF1ZQorIyBuZWFyZXN0IGFuY2VzdG9yIHRoYXQgc3Vydml2ZWQgdGhlIHBydW5pbmcuCisKK2lmIHRlc3QgIiRyZW1hcF90b19hbmNlc3RvciIgPSB0Cit0aGVuCisJd2hpbGUgcmVhZCByZWYKKwlkbworCQlzaGExPSQoZ2l0IHJldi1wYXJzZSAiJHJlZiJeMCkKKwkJdGVzdCAtZiAiJHdvcmtkaXIiLy4uL21hcC8kc2hhMSAmJiBjb250aW51ZQorCQlhbmNlc3Rvcj0kKGdpdCByZXYtbGlzdCAtLXNpbXBsaWZ5LW1lcmdlcyAtMSAiJHJlZiIgIiRAIikKKwkJdGVzdCAiJGFuY2VzdG9yIiAmJiBlY2hvICQobWFwICRhbmNlc3RvcikgPj4gIiR3b3JrZGlyIi8uLi9tYXAvJHNoYTEKKwlkb25lIDwgIiR0ZW1wZGlyIi9oZWFkcworZmkKKworIyBGaW5hbGx5IHVwZGF0ZSB0aGUgcmVmcworCitfeDQwPSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJworX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKK2VjaG8KK3doaWxlIHJlYWQgcmVmCitkbworCSMgYXZvaWQgcmV3cml0aW5nIGEgcmVmIHR3aWNlCisJdGVzdCAtZiAiJG9yaWdfbmFtZXNwYWNlJHJlZiIgJiYgY29udGludWUKKworCXNoYTE9JChnaXQgcmV2LXBhcnNlICIkcmVmIl4wKQorCXJld3JpdHRlbj0kKG1hcCAkc2hhMSkKKworCXRlc3QgJHNoYTEgPSAiJHJld3JpdHRlbiIgJiYKKwkJd2FybiAiV0FSTklORzogUmVmICckcmVmJyBpcyB1bmNoYW5nZWQiICYmCisJCWNvbnRpbnVlCisKKwljYXNlICIkcmV3cml0dGVuIiBpbgorCScnKQorCQllY2hvICJSZWYgJyRyZWYnIHdhcyBkZWxldGVkIgorCQlnaXQgdXBkYXRlLXJlZiAtbSAiZmlsdGVyLWJyYW5jaDogZGVsZXRlIiAtZCAiJHJlZiIgJHNoYTEgfHwKKwkJCWRpZSAiQ291bGQgbm90IGRlbGV0ZSAkcmVmIgorCTs7CisJJF94NDApCisJCWVjaG8gIlJlZiAnJHJlZicgd2FzIHJld3JpdHRlbiIKKwkJaWYgISBnaXQgdXBkYXRlLXJlZiAtbSAiZmlsdGVyLWJyYW5jaDogcmV3cml0ZSIgXAorCQkJCQkiJHJlZiIgJHJld3JpdHRlbiAkc2hhMSAyPi9kZXYvbnVsbDsgdGhlbgorCQkJaWYgdGVzdCAkKGdpdCBjYXQtZmlsZSAtdCAiJHJlZiIpID0gdGFnOyB0aGVuCisJCQkJaWYgdGVzdCAteiAiJGZpbHRlcl90YWdfbmFtZSI7IHRoZW4KKwkJCQkJd2FybiAiV0FSTklORzogWW91IHNhaWQgdG8gcmV3cml0ZSB0YWdnZWQgY29tbWl0cywgYnV0IG5vdCB0aGUgY29ycmVzcG9uZGluZyB0YWcuIgorCQkJCQl3YXJuICJXQVJOSU5HOiBQZXJoYXBzIHVzZSAnLS10YWctbmFtZS1maWx0ZXIgY2F0JyB0byByZXdyaXRlIHRoZSB0YWcuIgorCQkJCWZpCisJCQllbHNlCisJCQkJZGllICJDb3VsZCBub3QgcmV3cml0ZSAkcmVmIgorCQkJZmkKKwkJZmkKKwk7OworCSopCisJCSMgTkVFRFNXT1JLOiBwb3NzaWJseSBhZGQgLVdlcnJvciwgbWFraW5nIHRoaXMgYW4gZXJyb3IKKwkJd2FybiAiV0FSTklORzogJyRyZWYnIHdhcyByZXdyaXR0ZW4gaW50byBtdWx0aXBsZSBjb21taXRzOiIKKwkJd2FybiAiJHJld3JpdHRlbiIKKwkJd2FybiAiV0FSTklORzogUmVmICckcmVmJyBwb2ludHMgdG8gdGhlIGZpcnN0IG9uZSBub3cuIgorCQlyZXdyaXR0ZW49JChlY2hvICIkcmV3cml0dGVuIiB8IGhlYWQgLW4gMSkKKwkJZ2l0IHVwZGF0ZS1yZWYgLW0gImZpbHRlci1icmFuY2g6IHJld3JpdGUgdG8gZmlyc3QiIFwKKwkJCQkiJHJlZiIgJHJld3JpdHRlbiAkc2hhMSB8fAorCQkJZGllICJDb3VsZCBub3QgcmV3cml0ZSAkcmVmIgorCTs7CisJZXNhYworCWdpdCB1cGRhdGUtcmVmIC1tICJmaWx0ZXItYnJhbmNoOiBiYWNrdXAiICIkb3JpZ19uYW1lc3BhY2UkcmVmIiAkc2hhMSB8fAorCQkgZXhpdAorZG9uZSA8ICIkdGVtcGRpciIvaGVhZHMKKworIyBUT0RPOiBUaGlzIHNob3VsZCBwb3NzaWJseSBnbywgd2l0aCB0aGUgc2VtYW50aWNzIHRoYXQgYWxsIHBvc2l0aXZlIGdpdmVuCisjICAgICAgIHJlZnMgYXJlIHVwZGF0ZWQsIGFuZCB0aGVpciBvcmlnaW5hbCBoZWFkcyBzdG9yZWQgaW4gcmVmcy9vcmlnaW5hbC8KKyMgRmlsdGVyIHRhZ3MKKworaWYgWyAiJGZpbHRlcl90YWdfbmFtZSIgXTsgdGhlbgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUob2JqZWN0bmFtZSkgJShvYmplY3R0eXBlKSAlKHJlZm5hbWUpJyByZWZzL3RhZ3MgfAorCXdoaWxlIHJlYWQgc2hhMSB0eXBlIHJlZjsgZG8KKwkJcmVmPSIke3JlZiNyZWZzL3RhZ3MvfSIKKwkJIyBYWFg6IFJld3JpdGUgdGFnZ2VkIHRyZWVzIGFzIHdlbGw/CisJCWlmIFsgIiR0eXBlIiAhPSAiY29tbWl0IiAtYSAiJHR5cGUiICE9ICJ0YWciIF07IHRoZW4KKwkJCWNvbnRpbnVlOworCQlmaQorCisJCWlmIFsgIiR0eXBlIiA9ICJ0YWciIF07IHRoZW4KKwkJCSMgRGVyZWZlcmVuY2UgdG8gYSBjb21taXQKKwkJCXNoYTF0PSIkc2hhMSIKKwkJCXNoYTE9IiQoZ2l0IHJldi1wYXJzZSAtcSAiJHNoYTEiXntjb21taXR9KSIgfHwgY29udGludWUKKwkJZmkKKworCQlbIC1mICIuLi9tYXAvJHNoYTEiIF0gfHwgY29udGludWUKKwkJbmV3X3NoYTE9IiQoY2F0ICIuLi9tYXAvJHNoYTEiKSIKKwkJR0lUX0NPTU1JVD0iJHNoYTEiCisJCWV4cG9ydCBHSVRfQ09NTUlUCisJCW5ld19yZWY9IiQoZWNobyAiJHJlZiIgfCBldmFsICIkZmlsdGVyX3RhZ19uYW1lIikiIHx8CisJCQlkaWUgInRhZyBuYW1lIGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfdGFnX25hbWUiCisKKwkJZWNobyAiJHJlZiAtPiAkbmV3X3JlZiAoJHNoYTEgLT4gJG5ld19zaGExKSIKKworCQlpZiBbICIkdHlwZSIgPSAidGFnIiBdOyB0aGVuCisJCQluZXdfc2hhMT0kKCAoIHByaW50ZiAnb2JqZWN0ICVzXG50eXBlIGNvbW1pdFxudGFnICVzXG4nIFwKKwkJCQkJCSIkbmV3X3NoYTEiICIkbmV3X3JlZiIKKwkJCQlnaXQgY2F0LWZpbGUgdGFnICIkcmVmIiB8CisJCQkJc2VkIC1uIFwKKwkJCQkgICAgLWUgJzEsL14kL3sKKwkJCQkJICAvXm9iamVjdCAvZAorCQkJCQkgIC9edHlwZSAvZAorCQkJCQkgIC9edGFnIC9kCisJCQkJCX0nIFwKKwkJCQkgICAgLWUgJy9eLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0vcScgXAorCQkJCSAgICAtZSAncCcgKSB8CisJCQkJZ2l0IG1rdGFnKSB8fAorCQkJCWRpZSAiQ291bGQgbm90IGNyZWF0ZSBuZXcgdGFnIG9iamVjdCBmb3IgJHJlZiIKKwkJCWlmIGdpdCBjYXQtZmlsZSB0YWcgIiRyZWYiIHwgXAorCQkJICAgc2FuZV9ncmVwICdeLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4vZGV2L251bGwgMj4mMQorCQkJdGhlbgorCQkJCXdhcm4gImdwZyBzaWduYXR1cmUgc3RyaXBwZWQgZnJvbSB0YWcgb2JqZWN0ICRzaGExdCIKKwkJCWZpCisJCWZpCisKKwkJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvdGFncy8kbmV3X3JlZiIgIiRuZXdfc2hhMSIgfHwKKwkJCWRpZSAiQ291bGQgbm90IHdyaXRlIHRhZyAkbmV3X3JlZiIKKwlkb25lCitmaQorCitjZCAuLi8uLgorcm0gLXJmICIkdGVtcGRpciIKKwordHJhcCAtIDAKKwordW5zZXQgR0lUX0RJUiBHSVRfV09SS19UUkVFIEdJVF9JTkRFWF9GSUxFCit0ZXN0IC16ICIkT1JJR19HSVRfRElSIiB8fCB7CisJR0lUX0RJUj0iJE9SSUdfR0lUX0RJUiIgJiYgZXhwb3J0IEdJVF9ESVIKK30KK3Rlc3QgLXogIiRPUklHX0dJVF9XT1JLX1RSRUUiIHx8IHsKKwlHSVRfV09SS19UUkVFPSIkT1JJR19HSVRfV09SS19UUkVFIiAmJgorCWV4cG9ydCBHSVRfV09SS19UUkVFCit9Cit0ZXN0IC16ICIkT1JJR19HSVRfSU5ERVhfRklMRSIgfHwgeworCUdJVF9JTkRFWF9GSUxFPSIkT1JJR19HSVRfSU5ERVhfRklMRSIgJiYKKwlleHBvcnQgR0lUX0lOREVYX0ZJTEUKK30KKworaWYgWyAiJChpc19iYXJlX3JlcG9zaXRvcnkpIiA9IGZhbHNlIF07IHRoZW4KKwlnaXQgcmVhZC10cmVlIC11IC1tIEhFQUQgfHwgZXhpdAorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9naXQtZ3VpLy5naXRhdHRyaWJ1dGVzIGIvZ2l0LWd1aS8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QwN2MwCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxLDQgQEAKKyogICAgICAgICAgIHdoaXRlc3BhY2U9aW5kZW50LXdpdGgtbm9uLXRhYix0cmFpbGluZy1zcGFjZSxzcGFjZS1iZWZvcmUtdGFiLHRhYndpZHRoPTQKKyogICAgICAgICAgIGVuY29kaW5nPVVTLUFTQ0lJCitnaXQtZ3VpLnNoICBlbmNvZGluZz1VVEYtOAorL3BvLyoucG8gICAgZW5jb2Rpbmc9VVRGLTgKZGlmZiAtLWdpdCBhL2dpdC1ndWkvLmdpdGlnbm9yZSBiL2dpdC1ndWkvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDgzYjIxCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsOCBAQAorLkRTX1N0b3JlCitjb25maWcubWFrCitHaXQgR3VpLmFwcCoKK2dpdC1ndWkudGNsCitHSVQtVkVSU0lPTi1GSUxFCitHSVQtR1VJLVZBUlMKK2dpdC1ndWkKK2xpYi90Y2xJbmRleApkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9HSVQtVkVSU0lPTi1HRU4gYi9naXQtZ3VpL0dJVC1WRVJTSU9OLUdFTgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OWI2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9HSVQtVkVSU0lPTi1HRU4KQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisKK0dWRj1HSVQtVkVSU0lPTi1GSUxFCitERUZfVkVSPTAuMTcuR0lUR1VJCisKK0xGPScKKycKKwordHJlZV9zZWFyY2ggKCkKK3sKKwloZWFkPSQxCisJdHJlZT0kMgorCWZvciBwIGluICQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLW1heC1jb3VudD0xICRoZWFkIDI+L2Rldi9udWxsKQorCWRvCisJCXRlc3QgJHRyZWUgPSAkKGdpdCByZXYtcGFyc2UgJHBee3RyZWV9IDI+L2Rldi9udWxsKSAmJgorCQl2bj0kKGdpdCBkZXNjcmliZSAtLWFiYnJldj00ICRwIDI+L2Rldi9udWxsKSAmJgorCQljYXNlICIkdm4iIGluCisJCWdpdGd1aS1bMC05XSopIGVjaG8gJHZuOyBicmVhazs7CisJCWVzYWMKKwlkb25lCit9CisKKyMgQWx3YXlzIHVzZSB0aGUgdGFyYmFsbCB2ZXJzaW9uIGZpbGUgaWYgZm91bmQsIGp1c3QKKyMgaW4gY2FzZSB3ZSBhcmUgc29tZWhvdyBjb250YWluZWQgaW4gYSBsYXJnZXIgZ2l0CisjIHJlcG9zaXRvcnkgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IHRyYWNrIG91ciBzdGF0ZS4KKyMgKEF0IGxlYXN0IG9uZSBwYWNrYWdlIG1hbmFnZXIgaXMgZG9pbmcgdGhpcy4pCisjCisjIFdlIG1heSBiZSBhIHN1YnByb2plY3QsIHNvIHRyeSBsb29raW5nIGZvciB0aGUgbWVyZ2UKKyMgY29tbWl0IHRoYXQgc3VwcGxpZWQgdGhpcyBkaXJlY3RvcnkgY29udGVudCBpZiB3ZSBhcmUKKyMgbm90IGF0IHRoZSB0b3BsZXZlbC4gIFdlIHByb2JhYmx5IHdpbGwgYWx3YXlzIGJlIHRoZQorIyBzZWNvbmQgcGFyZW50IGluIHRoZSBjb21taXQsIGJ1dCB3ZSBzaG91bGRuJ3QgcmVseSBvbgorIyB0aGF0IGZhY3QuCisjCisjIElmIHdlIGFyZSBhdCB0aGUgdG9wbGV2ZWwgb3IgdGhlIG1lcmdlIGFzc3VtcHRpb24gZmFpbHMKKyMgdHJ5IGxvb2tpbmcgZm9yIGEgZ2l0Z3VpLSogdGFnLgorCitpZiB0ZXN0IC1mIHZlcnNpb24gJiYKKyAgIFZOPSQoY2F0IHZlcnNpb24pCit0aGVuCisJOiBoYXBweQorZWxpZiBwcmVmaXg9IiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4IDI+L2Rldi9udWxsKSIKKyAgIHRlc3QgLW4gIiRwcmVmaXgiICYmCisgICBoZWFkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCAtLSAuIDI+L2Rldi9udWxsKSAmJgorICAgdHJlZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIkhFQUQ6JHByZWZpeCIgMj4vZGV2L251bGwpICYmCisgICBWTj0kKHRyZWVfc2VhcmNoICRoZWFkICR0cmVlKQorICAgY2FzZSAiJFZOIiBpbgorICAgZ2l0Z3VpLVswLTldKikgOiBoYXBweSA7OworICAgKikgKGV4aXQgMSkgOzsKKyAgIGVzYWMKK3RoZW4KKwlWTj0kKGVjaG8gIiRWTiIgfCBzZWQgLWUgJ3MvXmdpdGd1aS0vLztzLy0vLi9nJyk7CitlbGlmIFZOPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgSEVBRCAyPi9kZXYvbnVsbCkgJiYKKyAgIGNhc2UgIiRWTiIgaW4KKyAgIGdpdGd1aS1bMC05XSopIDogaGFwcHkgOzsKKyAgICopIChleGl0IDEpIDs7CisgICBlc2FjCit0aGVuCisJVk49JChlY2hvICIkVk4iIHwgc2VkIC1lICdzL15naXRndWktLy87cy8tLy4vZycpOworZWxzZQorCVZOPSIkREVGX1ZFUiIKK2ZpCisKK2RpcnR5PSQoc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsKSB8fCBkaXJ0eT0KK2Nhc2UgIiRkaXJ0eSIgaW4KKycnKQorCTs7CisqKQorCVZOPSIkVk4tZGlydHkiIDs7Citlc2FjCisKK2lmIHRlc3QgLXIgJEdWRgordGhlbgorCVZDPSQoc2VkIC1lICdzL15HSVRHVUlfVkVSU0lPTiA9IC8vJyA8JEdWRikKK2Vsc2UKKwlWQz11bnNldAorZmkKK3Rlc3QgIiRWTiIgPSAiJFZDIiB8fCB7CisJZWNobyA+JjIgIkdJVEdVSV9WRVJTSU9OID0gJFZOIgorCWVjaG8gIkdJVEdVSV9WRVJTSU9OID0gJFZOIiA+JEdWRgorfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9NYWtlZmlsZSBiL2dpdC1ndWkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyYmE1YwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvTWFrZWZpbGUKQEAgLTAsMCArMSwzNDQgQEAKK2FsbDo6CisKKyMgRGVmaW5lIFY9MSB0byBoYXZlIGEgbW9yZSB2ZXJib3NlIGNvbXBpbGUuCisjCisjIERlZmluZSBOT19NU0dGTVQgaWYgeW91IGRvIG5vdCBoYXZlIG1zZ2ZtdCBmcm9tIHRoZSBHTlUgZ2V0dGV4dAorIyBwYWNrYWdlIGFuZCB3YW50IHRvIHVzZSBvdXIgcm91Z2ggcHVyZSBUY2wgcG8tPm1zZyB0cmFuc2xhdG9yLgorIyBUQ0xfUEFUSCBtdXN0IGJlIHZhaWxkIGZvciB0aGlzIHRvIHdvcmsuCisjCisKK0dJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCisJQCQoU0hFTExfUEFUSCkgLi9HSVQtVkVSU0lPTi1HRU4KKy1pbmNsdWRlIEdJVC1WRVJTSU9OLUZJTEUKKwordW5hbWVfUyA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtcyAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9PIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1vIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKK3VuYW1lX1IgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXIgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQorCitTQ1JJUFRfU0ggPSBnaXQtZ3VpLnNoCitHSVRHVUlfTUFJTiA6PSBnaXQtZ3VpCitHSVRHVUlfQlVJTFRfSU5TID0gZ2l0LWNpdG9vbAorQUxMX0xJQkZJTEVTID0gJCh3aWxkY2FyZCBsaWIvKi50Y2wpCitQUkVMT0FEX0ZJTEVTID0gbGliL2NsYXNzLnRjbAorTk9OVENMX0xJQkZJTEVTID0gXAorCWxpYi9naXQtZ3VpLmljbyBcCisJJCh3aWxkY2FyZCBsaWIvd2luMzJfKi5qcykgXAorI2VuZCBOT05UQ0xfTElCRklMRVMKKworaWZuZGVmIFNIRUxMX1BBVEgKKwlTSEVMTF9QQVRIID0gL2Jpbi9zaAorZW5kaWYKKworaWZuZGVmIGdpdGV4ZWNkaXIKKwlnaXRleGVjZGlyIDo9ICQoc2hlbGwgZ2l0IC0tZXhlYy1wYXRoKQorZW5kaWYKKworaWZuZGVmIHNoYXJlZGlyCitpZmVxIChnaXQtY29yZSwkKG5vdGRpciAkKGdpdGV4ZWNkaXIpKSkKKwlzaGFyZWRpciA6PSAkKGRpciAkKHBhdHN1YnN0ICUvLCUsJChkaXIgJChnaXRleGVjZGlyKSkpKXNoYXJlCitlbHNlCisJc2hhcmVkaXIgOj0gJChkaXIgJChnaXRleGVjZGlyKSlzaGFyZQorZW5kaWYKK2VuZGlmCisKK2lmbmRlZiBJTlNUQUxMCisJSU5TVEFMTCA9IGluc3RhbGwKK2VuZGlmCisKK1JNX1JGICAgICA/PSBybSAtcmYKK1JNRElSICAgICA/PSBybWRpcgorCitJTlNUQUxMX0QwID0gJChJTlNUQUxMKSAtZCAtbSA3NTUgIyBzcGFjZSBpcyByZXF1aXJlZCBoZXJlCitJTlNUQUxMX0QxID0KK0lOU1RBTExfUjAgPSAkKElOU1RBTEwpIC1tIDY0NCAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKK0lOU1RBTExfUjEgPQorSU5TVEFMTF9YMCA9ICQoSU5TVEFMTCkgLW0gNzU1ICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQorSU5TVEFMTF9YMSA9CitJTlNUQUxMX0EwID0gZmluZCAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKK0lOU1RBTExfQTEgPSB8IGNwaW8gLXB1ZAorSU5TVEFMTF9MMCA9IHJtIC1mICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQorSU5TVEFMTF9MMSA9ICYmIGxuICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQorSU5TVEFMTF9MMiA9CitJTlNUQUxMX0wzID0KKworUkVNT1ZFX0QwICA9ICQoUk1ESVIpICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQorUkVNT1ZFX0QxICA9IHx8IHRydWUKK1JFTU9WRV9GMCAgPSAkKFJNX1JGKSAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKK1JFTU9WRV9GMSAgPQorQ0xFQU5fRFNUICA9IHRydWUKKworaWZuZGVmIFYKKwlRVUlFVCAgICAgICAgICA9IEAKKwlRVUlFVF9HRU4gICAgICA9ICQoUVVJRVQpZWNobyAnICAgJyBHRU4gJyRAJyAmJgorCVFVSUVUX0lOREVYICAgID0gJChRVUlFVCllY2hvICcgICAnIElOREVYICQoZGlyICRAKSAmJgorCVFVSUVUX01TR0ZNVDAgID0gJChRVUlFVClwcmludGYgJyAgICBNU0dGTVQgJTEycyAnICRAICYmIHY9YAorCVFVSUVUX01TR0ZNVDEgID0gMj4mMWAgJiYgZWNobyAiJCR2IiB8IHNlZCAtZSAncy9mdXp6eSB0cmFuc2xhdGlvbnMvZnV6enkvJyB8IHNlZCAtZSAncy8gbWVzc2FnZXMqLy9nJworCVFVSUVUXzJERVZOVUxMID0gMj4vZGV2L251bGwKKworCUlOU1RBTExfRDAgPSBkaXI9CisJSU5TVEFMTF9EMSA9ICYmIGVjaG8gJyAnIERFU1QgJCRkaXIgJiYgJChJTlNUQUxMKSAtZCAtbSA3NTUgIiQkZGlyIgorCUlOU1RBTExfUjAgPSBzcmM9CisJSU5TVEFMTF9SMSA9ICYmIGVjaG8gJyAgICcgSU5TVEFMTCA2NDQgYGJhc2VuYW1lICQkc3JjYCAmJiAkKElOU1RBTEwpIC1tIDY0NCAkJHNyYworCUlOU1RBTExfWDAgPSBzcmM9CisJSU5TVEFMTF9YMSA9ICYmIGVjaG8gJyAgICcgSU5TVEFMTCA3NTUgYGJhc2VuYW1lICQkc3JjYCAmJiAkKElOU1RBTEwpIC1tIDc1NSAkJHNyYworCUlOU1RBTExfQTAgPSBzcmM9CisJSU5TVEFMTF9BMSA9ICYmIGVjaG8gJyAgICcgSU5TVEFMTCAnICAgJyBgYmFzZW5hbWUgIiQkc3JjImAgJiYgZmluZCAiJCRzcmMiIHwgY3BpbyAtcHVkCisKKwlJTlNUQUxMX0wwID0gZHN0PQorCUlOU1RBTExfTDEgPSAmJiBzcmM9CisJSU5TVEFMTF9MMiA9ICYmIGRzdD0KKwlJTlNUQUxMX0wzID0gJiYgZWNobyAnICAgJyAnTElOSyAgICAgICAnIGBiYXNlbmFtZSAiJCRkc3QiYCAnLT4nIGBiYXNlbmFtZSAiJCRzcmMiYCAmJiBybSAtZiAiJCRkc3QiICYmIGxuICIkJHNyYyIgIiQkZHN0IgorCisJQ0xFQU5fRFNUID0gZWNobyAnICcgVU5JTlNUQUxMCisJUkVNT1ZFX0QwID0gZGlyPQorCVJFTU9WRV9EMSA9ICYmIGVjaG8gJyAnIFJFTU9WRSAkJGRpciAmJiB0ZXN0IC1kICIkJGRpciIgJiYgJChSTURJUikgIiQkZGlyIiB8fCB0cnVlCisJUkVNT1ZFX0YwID0gZHN0PQorCVJFTU9WRV9GMSA9ICYmIGVjaG8gJyAgICcgUkVNT1ZFIGBiYXNlbmFtZSAiJCRkc3QiYCAmJiAkKFJNX1JGKSAiJCRkc3QiCitlbmRpZgorCitUQ0xUS19QQVRIID89IHdpc2gKK2lmZXEgKC4vLCQoZGlyICQoVENMVEtfUEFUSCkpKQorCVRDTF9QQVRIID89ICQoc3Vic3Qgd2lzaCx0Y2xzaCwkKFRDTFRLX1BBVEgpKQorZWxzZQorCVRDTF9QQVRIID89ICQoZGlyICQoVENMVEtfUEFUSCkpJChub3RkaXIgJChzdWJzdCB3aXNoLHRjbHNoLCQoVENMVEtfUEFUSCkpKQorZW5kaWYKKworaWZlcSAoJCh1bmFtZV9TKSxEYXJ3aW4pCisJVEtGUkFNRVdPUksgPSAvTGlicmFyeS9GcmFtZXdvcmtzL1RrLmZyYW1ld29yay9SZXNvdXJjZXMvV2lzaC5hcHAKKwlpZmVxICgkKHNoZWxsIGVjaG8gIiQodW5hbWVfUikiIHwgYXdrIC1GLiAne2lmICgkJDEgPj0gOSkgcHJpbnQgInkifScpXyQoc2hlbGwgdGVzdCAtZCAkKFRLRlJBTUVXT1JLKSB8fCBlY2hvIG4pLHlfbikKKwkJVEtGUkFNRVdPUksgPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Uay5mcmFtZXdvcmsvUmVzb3VyY2VzL1dpc2guYXBwCisJCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAkKFRLRlJBTUVXT1JLKSB8fCBlY2hvIG4pLG4pCisJCQlUS0ZSQU1FV09SSyA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1RrLmZyYW1ld29yay9SZXNvdXJjZXMvV2lzaFwgU2hlbGwuYXBwCisJCWVuZGlmCisJZW5kaWYKKwlUS0VYRUNVVEFCTEUgPSAkKHNoZWxsIGJhc2VuYW1lICIkKFRLRlJBTUVXT1JLKSIgLmFwcCkKK2VuZGlmCisKK2lmZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK1FVSUVUX0dFTiA9CitlbmRpZgorCistaW5jbHVkZSBjb25maWcubWFrCisKK0RFU1RESVJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFU1RESVIpKQorZ2l0ZXhlY2Rpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0ZXhlY2RpcikpCitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKK1RDTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xfUEFUSCkpCitUQ0xUS19QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xUS19QQVRIKSkKK1RDTFRLX1BBVEhfU0VEID0gJChzdWJzdCAnLCdcJycsJChzdWJzdCBcLFxcLCQoVENMVEtfUEFUSCkpKQorCitnZ19saWJkaXIgPz0gJChzaGFyZWRpcikvZ2l0LWd1aS9saWIKK2xpYmRpcl9TUSAgPSAkKHN1YnN0ICcsJ1wnJywkKGdnX2xpYmRpcikpCitsaWJkaXJfU0VEID0gJChzdWJzdCAnLCdcJycsJChzdWJzdCBcLFxcLCQoZ2dfbGliZGlyX3NlZF9pbikpKQorZXhlZGlyICAgICA9ICQoZGlyICQoZ2l0ZXhlY2Rpcikpc2hhcmUvZ2l0LWd1aS9saWIKKworR0lUR1VJX1NDUklQVCAgIDo9ICQkMAorR0lUR1VJX1JFTEFUSVZFIDo9CitHSVRHVUlfTUFDT1NYQVBQIDo9CisKK2lmZXEgKCQodW5hbWVfTyksQ3lnd2luKQorCUdJVEdVSV9TQ1JJUFQgOj0gYGN5Z3BhdGggLS13aW5kb3dzIC0tYWJzb2x1dGUgIiQoR0lUR1VJX1NDUklQVCkiYAorCisJIyBJcyB0aGlzIGEgQ3lnd2luIFRjbC9UayBiaW5hcnk/ICBJZiBzbyBpdCBrbm93cyBob3cgdG8gZG8KKwkjIFBPU0lYIHBhdGggdHJhbnNsYXRpb24ganVzdCBsaWtlIGN5Z3BhdGggZG9lcyBhbmQgd2UgbXVzdAorCSMga2VlcCBsaWJkaXIgaW4gUE9TSVggZm9ybWF0IHNvIEN5Z3dpbiBwYWNrYWdlcyBvZiBnaXQtZ3VpCisJIyB3b3JrIG5vIG1hdHRlciB3aGVyZSB0aGUgdXNlciBpbnN0YWxscyB0aGVtLgorCSMKKwlpZmVxICgkKHNoZWxsIGVjaG8gJ3B1dHMgW2ZpbGUgbm9ybWFsaXplIC9dJyB8ICckKFRDTF9QQVRIX1NRKScpLCQoc2hlbGwgY3lncGF0aCAtLW1peGVkIC0tYWJzb2x1dGUgLykpCisJCWdnX2xpYmRpcl9zZWRfaW4gOj0gJChnZ19saWJkaXIpCisJZWxzZQorCQlnZ19saWJkaXJfc2VkX2luIDo9ICQoc2hlbGwgY3lncGF0aCAtLXdpbmRvd3MgLS1hYnNvbHV0ZSAiJChnZ19saWJkaXIpIikKKwllbmRpZgorZWxzZQorCWlmZXEgKCQoZXhlZGlyKSwkKGdnX2xpYmRpcikpCisJCUdJVEdVSV9SRUxBVElWRSA6PSAxCisJZW5kaWYKKwlnZ19saWJkaXJfc2VkX2luIDo9ICQoZ2dfbGliZGlyKQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksRGFyd2luKQorCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAkKFRLRlJBTUVXT1JLKSAmJiBlY2hvIHkpLHkpCisJCUdJVEdVSV9NQUNPU1hBUFAgOj0gWWVzUGxlYXNlCisJZW5kaWYKK2VuZGlmCitpZm5lcSAoLCQoZmluZHN0cmluZyBNSU5HVywkKHVuYW1lX1MpKSkKKwlOT19NU0dGTVQ9MQorCUdJVEdVSV9XSU5ET1dTX1dSQVBQRVIgOj0gWWVzUGxlYXNlCisJR0lUR1VJX1JFTEFUSVZFIDo9IDEKK2VuZGlmCisKK2lmZGVmIEdJVEdVSV9NQUNPU1hBUFAKK0dJVEdVSV9NQUlOIDo9IGdpdC1ndWkudGNsCisKK2dpdC1ndWk6IEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTCisJJChRVUlFVF9HRU4pcm0gLWYgJEAgJEArICYmIFwKKwllY2hvICcjISQoU0hFTExfUEFUSF9TUSknID4kQCsgJiYgXAorCWVjaG8gJ2lmIHRlc3QgInokJCoiID0genZlcnNpb24gfHwnID4+JEArICYmIFwKKwllY2hvICcgICB0ZXN0ICJ6JCQqIiA9IHotLXZlcnNpb24nID4+JEArICYmIFwKKwllY2hvIHRoZW4gPj4kQCsgJiYgXAorCWVjaG8gJwknZWNobyBcJ2dpdC1ndWkgdmVyc2lvbiAnJChHSVRHVUlfVkVSU0lPTiknXCcgPj4kQCsgJiYgXAorCWVjaG8gZWxzZSA+PiRAKyAmJiBcCisJZWNobyAnCSdleGVjIFwnJyQobGliZGlyX1NRKS9HaXQgR3VpLmFwcC9Db250ZW50cy9NYWNPUy8kKHN1YnN0IFwsLCQoVEtFWEVDVVRBQkxFKSknXCcgXAorCQknIiQkMCIgIiQkQCInID4+JEArICYmIFwKKwllY2hvIGZpID4+JEArICYmIFwKKwljaG1vZCAreCAkQCsgJiYgXAorCW12ICRAKyAkQAorCitHaXRcIEd1aS5hcHA6IEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTIFwKKwkJbWFjb3N4L0luZm8ucGxpc3QgXAorCQltYWNvc3gvZ2l0LWd1aS5pY25zIFwKKwkJbWFjb3N4L0FwcE1haW4udGNsIFwKKwkJJChUS0ZSQU1FV09SSykvQ29udGVudHMvTWFjT1MvJChUS0VYRUNVVEFCTEUpCisJJChRVUlFVF9HRU4pcm0gLXJmICckQCcgJyRAJysgJiYgXAorCW1rZGlyIC1wICckQCcrL0NvbnRlbnRzL01hY09TICYmIFwKKwlta2RpciAtcCAnJEAnKy9Db250ZW50cy9SZXNvdXJjZXMvU2NyaXB0cyAmJiBcCisJY3AgJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgXCwsJChUS0ZSQU1FV09SSykvQ29udGVudHMvTWFjT1MvJChUS0VYRUNVVEFCTEUpKSknIFwKKwkJJyRAJysvQ29udGVudHMvTWFjT1MgJiYgXAorCWNwIG1hY29zeC9naXQtZ3VpLmljbnMgJyRAJysvQ29udGVudHMvUmVzb3VyY2VzICYmIFwKKwlzZWQgLWUgJ3MvQEBHSVRHVUlfVkVSU0lPTkBALyQoR0lUR1VJX1ZFUlNJT04pL2cnIFwKKwkJLWUgJ3MvQEBHSVRHVUlfVEtFWEVDVVRBQkxFQEAvJChUS0VYRUNVVEFCTEUpL2cnIFwKKwkJbWFjb3N4L0luZm8ucGxpc3QgXAorCQk+JyRAJysvQ29udGVudHMvSW5mby5wbGlzdCAmJiBcCisJc2VkIC1lICdzfEBAZ2l0ZXhlY2RpckBAfCQoZ2l0ZXhlY2Rpcl9TUSl8JyBcCisJCS1lICdzfEBAR0lUR1VJX0xJQkRJUkBAfCQobGliZGlyX1NFRCl8JyBcCisJCW1hY29zeC9BcHBNYWluLnRjbCBcCisJCT4nJEAnKy9Db250ZW50cy9SZXNvdXJjZXMvU2NyaXB0cy9BcHBNYWluLnRjbCAmJiBcCisJbXYgJyRAJysgJyRAJworZW5kaWYKKworaWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgorR0lUR1VJX01BSU4gOj0gZ2l0LWd1aS50Y2wKKworZ2l0LWd1aTogd2luZG93cy9naXQtZ3VpLnNoCisJY3AgJDwgJEAKK2VuZGlmCisKKyQoR0lUR1VJX01BSU4pOiBnaXQtZ3VpLnNoIEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTCisJJChRVUlFVF9HRU4pcm0gLWYgJEAgJEArICYmIFwKKwlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorCQktZSAnc3xAQFNIRUxMX1BBVEhAQHwkKFNIRUxMX1BBVEhfU1EpfCcgXAorCQktZSAnMSwzMHN8XiBhcmd2MD0kJDB8IGFyZ3YwPSQoR0lUR1VJX1NDUklQVCl8JyBcCisJCS1lICcxLDMwc3xeIGV4ZWMgd2lzaCB8IGV4ZWMgJ1wnJyQoVENMVEtfUEFUSF9TRUQpJ1wnJyB8JyBcCisJCS1lICdzL0BAR0lUR1VJX1ZFUlNJT05AQC8kKEdJVEdVSV9WRVJTSU9OKS9nJyBcCisJCS1lICdzfEBAR0lUR1VJX1JFTEFUSVZFQEB8JChHSVRHVUlfUkVMQVRJVkUpfCcgXAorCQktZSAnJChHSVRHVUlfUkVMQVRJVkUpc3xAQEdJVEdVSV9MSUJESVJAQHwkKGxpYmRpcl9TRUQpfCcgXAorCQlnaXQtZ3VpLnNoID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACisKK1hHRVRURVhUICAgPz0geGdldHRleHQKK2lmZGVmIE5PX01TR0ZNVAorCU1TR0ZNVCA/PSAkKFRDTF9QQVRIKSBwby9wbzJtc2cuc2gKK2Vsc2UKKwlNU0dGTVQgPz0gbXNnZm10CisJaWZuZXEgKCQoc2hlbGwgJChNU0dGTVQpIC0tdGNsIC1sIEMgLWQgLiAvZGV2L251bGwgMj4vZGV2L251bGw7IGVjaG8gJCQ/KSwwKQorCQlNU0dGTVQgOj0gJChUQ0xfUEFUSCkgcG8vcG8ybXNnLnNoCisJZW5kaWYKK2VuZGlmCisKK21zZ3NkaXIgICAgID0gJChnZ19saWJkaXIpL21zZ3MKK21zZ3NkaXJfU1EgID0gJChzdWJzdCAnLCdcJycsJChtc2dzZGlyKSkKK1BPX1RFTVBMQVRFID0gcG8vZ2l0LWd1aS5wb3QKK0FMTF9QT0ZJTEVTID0gJCh3aWxkY2FyZCBwby8qLnBvKQorQUxMX01TR0ZJTEVTID0gJChzdWJzdCAucG8sLm1zZywkKEFMTF9QT0ZJTEVTKSkKKworJChQT19URU1QTEFURSk6ICQoU0NSSVBUX1NIKSAkKEFMTF9MSUJGSUxFUykKKwkkKFhHRVRURVhUKSAta21jIC1MVGNsIC1vICRAICQoU0NSSVBUX1NIKSAkKEFMTF9MSUJGSUxFUykKK3VwZGF0ZS1wbzo6ICQoUE9fVEVNUExBVEUpCisJJChmb3JlYWNoIHAsICQoQUxMX1BPRklMRVMpLCBlY2hvIFVwZGF0aW5nICRwIDsgbXNnbWVyZ2UgLVUgJHAgJChQT19URU1QTEFURSkgOyApCiskKEFMTF9NU0dGSUxFUyk6ICUubXNnIDogJS5wbworCSQoUVVJRVRfTVNHRk1UMCkkKE1TR0ZNVCkgLS1zdGF0aXN0aWNzIC0tdGNsIC1sICQoYmFzZW5hbWUgJChub3RkaXIgJDwpKSAtZCAkKGRpciAkQCkgJDwgJChRVUlFVF9NU0dGTVQxKQorCitsaWIvdGNsSW5kZXg6ICQoQUxMX0xJQkZJTEVTKSBHSVQtR1VJLVZBUlMKKwkkKFFVSUVUX0lOREVYKWlmIGVjaG8gXAorCSAgJChmb3JlYWNoIHAsJChQUkVMT0FEX0ZJTEVTKSxzb3VyY2UgJHBcOykgXAorCSAgYXV0b19ta2luZGV4IGxpYiAnKi50Y2wnIFwKKwl8ICQoVENMX1BBVEgpICQoUVVJRVRfMkRFVk5VTEwpOyB0aGVuIDogb2s7IFwKKwllbHNlIFwKKwkgZWNobyAxPiYyICIgICAgKiAkKFRDTF9QQVRIKSBmYWlsZWQ7IHVzaW5nIHVub3B0aW1pemVkIGxvYWRpbmciOyBcCisJIHJtIC1mICRAIDsgXAorCSBlY2hvICcjIEF1dG9nZW5lcmF0ZWQgYnkgZ2l0LWd1aSBNYWtlZmlsZScgPiRAICYmIFwKKwkgZWNobyA+PiRAICYmIFwKKwkgJChmb3JlYWNoIHAsJChQUkVMT0FEX0ZJTEVTKSAkKEFMTF9MSUJGSUxFUyksZWNobyAnJChzdWJzdCBsaWIvLCwkcCknID4+JEAgJiYpIFwKKwkgZWNobyA+PiRAIDsgXAorCWZpCisKK1RSQUNLX1ZBUlMgPSBcCisJJChzdWJzdCAnLCdcJycsU0hFTExfUEFUSD0nJChTSEVMTF9QQVRIX1NRKScpIFwKKwkkKHN1YnN0ICcsJ1wnJyxUQ0xfUEFUSD0nJChUQ0xfUEFUSF9TUSknKSBcCisJJChzdWJzdCAnLCdcJycsVENMVEtfUEFUSD0nJChUQ0xUS19QQVRIX1NRKScpIFwKKwkkKHN1YnN0ICcsJ1wnJyxnaXRleGVjZGlyPSckKGdpdGV4ZWNkaXJfU1EpJykgXAorCSQoc3Vic3QgJywnXCcnLGdnX2xpYmRpcj0nJChsaWJkaXJfU1EpJykgXAorCUdJVEdVSV9NQUNPU1hBUFA9JChHSVRHVUlfTUFDT1NYQVBQKSBcCisjZW5kIFRSQUNLX1ZBUlMKKworR0lULUdVSS1WQVJTOiBGT1JDRQorCUBWQVJTPSckKFRSQUNLX1ZBUlMpJzsgXAorCWlmIHRlc3QgeCIkJFZBUlMiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gMT4mMiAiICAgICogbmV3IGxvY2F0aW9ucyBvciBUY2wvVGsgaW50ZXJwcmV0ZXIiOyBcCisJCWVjaG8gMT4kQCAiJCRWQVJTIjsgXAorCWZpCisKK2lmZGVmIEdJVEdVSV9NQUNPU1hBUFAKK2FsbDo6IGdpdC1ndWkgR2l0XCBHdWkuYXBwCitlbmRpZgoraWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgorYWxsOjogZ2l0LWd1aQorZW5kaWYKK2FsbDo6ICQoR0lUR1VJX01BSU4pIGxpYi90Y2xJbmRleCAkKEFMTF9NU0dGSUxFUykKKworaW5zdGFsbDogYWxsCisJJChRVUlFVCkkKElOU1RBTExfRDApJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJyAkKElOU1RBTExfRDEpCisJJChRVUlFVCkkKElOU1RBTExfWDApZ2l0LWd1aSAkKElOU1RBTExfWDEpICckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScKKwkkKFFVSUVUKSQoSU5TVEFMTF9YMClnaXQtZ3VpLS1hc2twYXNzICQoSU5TVEFMTF9YMSkgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJworCSQoUVVJRVQpJChmb3JlYWNoIHAsJChHSVRHVUlfQlVJTFRfSU5TKSwgJChJTlNUQUxMX0wwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKS8kcCcgJChJTlNUQUxMX0wxKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKS9naXQtZ3VpJyAkKElOU1RBTExfTDIpJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpLyRwJyAkKElOU1RBTExfTDMpICYmKSB0cnVlCitpZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCisJJChRVUlFVCkkKElOU1RBTExfUjApZ2l0LWd1aS50Y2wgJChJTlNUQUxMX1IxKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknCitlbmRpZgorCSQoUVVJRVQpJChJTlNUQUxMX0QwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJyAkKElOU1RBTExfRDEpCisJJChRVUlFVCkkKElOU1RBTExfUjApbGliL3RjbEluZGV4ICQoSU5TVEFMTF9SMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknCitpZmRlZiBHSVRHVUlfTUFDT1NYQVBQCisJJChRVUlFVCkkKElOU1RBTExfQTApJ0dpdCBHdWkuYXBwJyAkKElOU1RBTExfQTEpICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJworCSQoUVVJRVQpJChJTlNUQUxMX1gwKWdpdC1ndWkudGNsICQoSU5TVEFMTF9YMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknCitlbmRpZgorCSQoUVVJRVQpJChmb3JlYWNoIHAsJChBTExfTElCRklMRVMpICQoTk9OVENMX0xJQkZJTEVTKSwgJChJTlNUQUxMX1IwKSRwICQoSU5TVEFMTF9SMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknICYmKSB0cnVlCisJJChRVUlFVCkkKElOU1RBTExfRDApJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAkKElOU1RBTExfRDEpCisJJChRVUlFVCkkKGZvcmVhY2ggcCwkKEFMTF9NU0dGSUxFUyksICQoSU5TVEFMTF9SMCkkcCAkKElOU1RBTExfUjEpICckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScgJiYpIHRydWUKKwordW5pbnN0YWxsOgorCSQoUVVJRVQpJChDTEVBTl9EU1QpICckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScKKwkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvZ2l0LWd1aSAkKFJFTU9WRV9GMSkKKwkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvZ2l0LWd1aS0tYXNrcGFzcyAkKFJFTU9WRV9GMSkKKwkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoR0lUR1VJX0JVSUxUX0lOUyksICQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvJHAgJChSRU1PVkVfRjEpICYmKSB0cnVlCitpZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCisJJChRVUlFVCkkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknL2dpdC1ndWkudGNsICQoUkVNT1ZFX0YxKQorZW5kaWYKKwkkKFFVSUVUKSQoQ0xFQU5fRFNUKSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKScKKwkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJy90Y2xJbmRleCAkKFJFTU9WRV9GMSkKK2lmZGVmIEdJVEdVSV9NQUNPU1hBUFAKKwkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpL0dpdCBHdWkuYXBwJyAkKFJFTU9WRV9GMSkKKwkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJy9naXQtZ3VpLnRjbCAkKFJFTU9WRV9GMSkKK2VuZGlmCisJJChRVUlFVCkkKGZvcmVhY2ggcCwkKEFMTF9MSUJGSUxFUykgJChOT05UQ0xfTElCRklMRVMpLCAkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQobGliZGlyX1NRKScvJChub3RkaXIgJHApICQoUkVNT1ZFX0YxKSAmJikgdHJ1ZQorCSQoUVVJRVQpJChDTEVBTl9EU1QpICckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScKKwkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJy8kKG5vdGRpciAkcCkgJChSRU1PVkVfRjEpICYmKSB0cnVlCisJJChRVUlFVCkkKFJFTU9WRV9EMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknICQoUkVNT1ZFX0QxKQorCSQoUVVJRVQpJChSRU1PVkVfRDApJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAkKFJFTU9WRV9EMSkKKwkkKFFVSUVUKSQoUkVNT1ZFX0QwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJyAkKFJFTU9WRV9EMSkKKwkkKFFVSUVUKSQoUkVNT1ZFX0QwKWBkaXJuYW1lICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJ2AgJChSRU1PVkVfRDEpCisKK2Rpc3QtdmVyc2lvbjoKKwlAbWtkaXIgLXAgJChUQVJESVIpCisJQGVjaG8gJChHSVRHVUlfVkVSU0lPTikgPiAkKFRBUkRJUikvdmVyc2lvbgorCitjbGVhbjo6CisJJChSTV9SRikgJChHSVRHVUlfTUFJTikgbGliL3RjbEluZGV4IHBvLyoubXNnCisJJChSTV9SRikgR0lULVZFUlNJT04tRklMRSBHSVQtR1VJLVZBUlMKK2lmZGVmIEdJVEdVSV9NQUNPU1hBUFAKKwkkKFJNX1JGKSAnR2l0IEd1aS5hcHAnKiBnaXQtZ3VpCitlbmRpZgoraWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgorCSQoUk1fUkYpIGdpdC1ndWkKK2VuZGlmCisKKy5QSE9OWTogYWxsIGluc3RhbGwgdW5pbnN0YWxsIGRpc3QtdmVyc2lvbiBjbGVhbgorLlBIT05ZOiBGT1JDRQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS0tYXNrcGFzcyBiL2dpdC1ndWkvZ2l0LWd1aS0tYXNrcGFzcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ2l0LWd1aS0tYXNrcGFzcwpyZW5hbWUgdG8gZ2l0LWd1aS9naXQtZ3VpLS1hc2twYXNzCmRpZmYgLS1naXQgYS9naXQtZ3VpLnNoIGIvZ2l0LWd1aS9naXQtZ3VpLnNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBnaXQtZ3VpLnNoCnJlbmFtZSB0byBnaXQtZ3VpL2dpdC1ndWkuc2gKZGlmZiAtLWdpdCBhL2xpYi9hYm91dC50Y2wgYi9naXQtZ3VpL2xpYi9hYm91dC50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9hYm91dC50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2Fib3V0LnRjbApkaWZmIC0tZ2l0IGEvbGliL2JsYW1lLnRjbCBiL2dpdC1ndWkvbGliL2JsYW1lLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL2JsYW1lLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvYmxhbWUudGNsCmRpZmYgLS1naXQgYS9saWIvYnJhbmNoLnRjbCBiL2dpdC1ndWkvbGliL2JyYW5jaC50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9icmFuY2gudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9icmFuY2gudGNsCmRpZmYgLS1naXQgYS9saWIvYnJhbmNoX2NoZWNrb3V0LnRjbCBiL2dpdC1ndWkvbGliL2JyYW5jaF9jaGVja291dC50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9icmFuY2hfY2hlY2tvdXQudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9icmFuY2hfY2hlY2tvdXQudGNsCmRpZmYgLS1naXQgYS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wgYi9naXQtZ3VpL2xpYi9icmFuY2hfY3JlYXRlLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL2JyYW5jaF9jcmVhdGUudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9icmFuY2hfY3JlYXRlLnRjbApkaWZmIC0tZ2l0IGEvbGliL2JyYW5jaF9kZWxldGUudGNsIGIvZ2l0LWd1aS9saWIvYnJhbmNoX2RlbGV0ZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9icmFuY2hfZGVsZXRlLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvYnJhbmNoX2RlbGV0ZS50Y2wKZGlmZiAtLWdpdCBhL2xpYi9icmFuY2hfcmVuYW1lLnRjbCBiL2dpdC1ndWkvbGliL2JyYW5jaF9yZW5hbWUudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvYnJhbmNoX3JlbmFtZS50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2JyYW5jaF9yZW5hbWUudGNsCmRpZmYgLS1naXQgYS9saWIvYnJvd3Nlci50Y2wgYi9naXQtZ3VpL2xpYi9icm93c2VyLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL2Jyb3dzZXIudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9icm93c2VyLnRjbApkaWZmIC0tZ2l0IGEvbGliL2NoZWNrb3V0X29wLnRjbCBiL2dpdC1ndWkvbGliL2NoZWNrb3V0X29wLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL2NoZWNrb3V0X29wLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvY2hlY2tvdXRfb3AudGNsCmRpZmYgLS1naXQgYS9saWIvY2hvb3NlX2ZvbnQudGNsIGIvZ2l0LWd1aS9saWIvY2hvb3NlX2ZvbnQudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvY2hvb3NlX2ZvbnQudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9jaG9vc2VfZm9udC50Y2wKZGlmZiAtLWdpdCBhL2xpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wgYi9naXQtZ3VpL2xpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbApkaWZmIC0tZ2l0IGEvbGliL2Nob29zZV9yZXYudGNsIGIvZ2l0LWd1aS9saWIvY2hvb3NlX3Jldi50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9jaG9vc2VfcmV2LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvY2hvb3NlX3Jldi50Y2wKZGlmZiAtLWdpdCBhL2xpYi9jbGFzcy50Y2wgYi9naXQtZ3VpL2xpYi9jbGFzcy50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9jbGFzcy50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2NsYXNzLnRjbApkaWZmIC0tZ2l0IGEvbGliL2NvbW1pdC50Y2wgYi9naXQtZ3VpL2xpYi9jb21taXQudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvY29tbWl0LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvY29tbWl0LnRjbApkaWZmIC0tZ2l0IGEvbGliL2NvbnNvbGUudGNsIGIvZ2l0LWd1aS9saWIvY29uc29sZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9jb25zb2xlLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvY29uc29sZS50Y2wKZGlmZiAtLWdpdCBhL2xpYi9kYXRhYmFzZS50Y2wgYi9naXQtZ3VpL2xpYi9kYXRhYmFzZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9kYXRhYmFzZS50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2RhdGFiYXNlLnRjbApkaWZmIC0tZ2l0IGEvbGliL2RhdGUudGNsIGIvZ2l0LWd1aS9saWIvZGF0ZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9kYXRlLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvZGF0ZS50Y2wKZGlmZiAtLWdpdCBhL2xpYi9kaWZmLnRjbCBiL2dpdC1ndWkvbGliL2RpZmYudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvZGlmZi50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2RpZmYudGNsCmRpZmYgLS1naXQgYS9saWIvZW5jb2RpbmcudGNsIGIvZ2l0LWd1aS9saWIvZW5jb2RpbmcudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvZW5jb2RpbmcudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9lbmNvZGluZy50Y2wKZGlmZiAtLWdpdCBhL2xpYi9lcnJvci50Y2wgYi9naXQtZ3VpL2xpYi9lcnJvci50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9lcnJvci50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2Vycm9yLnRjbApkaWZmIC0tZ2l0IGEvbGliL2dpdC1ndWkuaWNvIGIvZ2l0LWd1aS9saWIvZ2l0LWd1aS5pY28Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9naXQtZ3VpLmljbwpyZW5hbWUgdG8gZ2l0LWd1aS9saWIvZ2l0LWd1aS5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2luZGV4LnRjbCBiL2dpdC1ndWkvbGliL2luZGV4LnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL2luZGV4LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvaW5kZXgudGNsCmRpZmYgLS1naXQgYS9saWIvbGluZS50Y2wgYi9naXQtZ3VpL2xpYi9saW5lLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL2xpbmUudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9saW5lLnRjbApkaWZmIC0tZ2l0IGEvbGliL2xvZ28udGNsIGIvZ2l0LWd1aS9saWIvbG9nby50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9sb2dvLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvbG9nby50Y2wKZGlmZiAtLWdpdCBhL2xpYi9tZXJnZS50Y2wgYi9naXQtZ3VpL2xpYi9tZXJnZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9tZXJnZS50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL21lcmdlLnRjbApkaWZmIC0tZ2l0IGEvbGliL21lcmdldG9vbC50Y2wgYi9naXQtZ3VpL2xpYi9tZXJnZXRvb2wudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvbWVyZ2V0b29sLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvbWVyZ2V0b29sLnRjbApkaWZmIC0tZ2l0IGEvbGliL29wdGlvbi50Y2wgYi9naXQtZ3VpL2xpYi9vcHRpb24udGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvb3B0aW9uLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvb3B0aW9uLnRjbApkaWZmIC0tZ2l0IGEvbGliL3JlbW90ZS50Y2wgYi9naXQtZ3VpL2xpYi9yZW1vdGUudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvcmVtb3RlLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvcmVtb3RlLnRjbApkaWZmIC0tZ2l0IGEvbGliL3JlbW90ZV9hZGQudGNsIGIvZ2l0LWd1aS9saWIvcmVtb3RlX2FkZC50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9yZW1vdGVfYWRkLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvcmVtb3RlX2FkZC50Y2wKZGlmZiAtLWdpdCBhL2xpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2wgYi9naXQtZ3VpL2xpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbApkaWZmIC0tZ2l0IGEvbGliL3NlYXJjaC50Y2wgYi9naXQtZ3VpL2xpYi9zZWFyY2gudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvc2VhcmNoLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvc2VhcmNoLnRjbApkaWZmIC0tZ2l0IGEvbGliL3Nob3J0Y3V0LnRjbCBiL2dpdC1ndWkvbGliL3Nob3J0Y3V0LnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3Nob3J0Y3V0LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvc2hvcnRjdXQudGNsCmRpZmYgLS1naXQgYS9saWIvc3BlbGxjaGVjay50Y2wgYi9naXQtZ3VpL2xpYi9zcGVsbGNoZWNrLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3NwZWxsY2hlY2sudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9zcGVsbGNoZWNrLnRjbApkaWZmIC0tZ2l0IGEvbGliL3NzaGtleS50Y2wgYi9naXQtZ3VpL2xpYi9zc2hrZXkudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvc3Noa2V5LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvc3Noa2V5LnRjbApkaWZmIC0tZ2l0IGEvbGliL3N0YXR1c19iYXIudGNsIGIvZ2l0LWd1aS9saWIvc3RhdHVzX2Jhci50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9zdGF0dXNfYmFyLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvc3RhdHVzX2Jhci50Y2wKZGlmZiAtLWdpdCBhL2xpYi90aGVtZWQudGNsIGIvZ2l0LWd1aS9saWIvdGhlbWVkLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3RoZW1lZC50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL3RoZW1lZC50Y2wKZGlmZiAtLWdpdCBhL2xpYi90b29scy50Y2wgYi9naXQtZ3VpL2xpYi90b29scy50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi90b29scy50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL3Rvb2xzLnRjbApkaWZmIC0tZ2l0IGEvbGliL3Rvb2xzX2RsZy50Y2wgYi9naXQtZ3VpL2xpYi90b29sc19kbGcudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvdG9vbHNfZGxnLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvdG9vbHNfZGxnLnRjbApkaWZmIC0tZ2l0IGEvbGliL3RyYW5zcG9ydC50Y2wgYi9naXQtZ3VpL2xpYi90cmFuc3BvcnQudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvdHJhbnNwb3J0LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvdHJhbnNwb3J0LnRjbApkaWZmIC0tZ2l0IGEvbGliL3dpbjMyLnRjbCBiL2dpdC1ndWkvbGliL3dpbjMyLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3dpbjMyLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvd2luMzIudGNsCmRpZmYgLS1naXQgYS9saWIvd2luMzJfc2hvcnRjdXQuanMgYi9naXQtZ3VpL2xpYi93aW4zMl9zaG9ydGN1dC5qcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3dpbjMyX3Nob3J0Y3V0LmpzCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi93aW4zMl9zaG9ydGN1dC5qcwpkaWZmIC0tZ2l0IGEvbWFjb3N4L0FwcE1haW4udGNsIGIvZ2l0LWd1aS9tYWNvc3gvQXBwTWFpbi50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1hY29zeC9BcHBNYWluLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9tYWNvc3gvQXBwTWFpbi50Y2wKZGlmZiAtLWdpdCBhL21hY29zeC9JbmZvLnBsaXN0IGIvZ2l0LWd1aS9tYWNvc3gvSW5mby5wbGlzdApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWFjb3N4L0luZm8ucGxpc3QKcmVuYW1lIHRvIGdpdC1ndWkvbWFjb3N4L0luZm8ucGxpc3QKZGlmZiAtLWdpdCBhL21hY29zeC9naXQtZ3VpLmljbnMgYi9naXQtZ3VpL21hY29zeC9naXQtZ3VpLmljbnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1hY29zeC9naXQtZ3VpLmljbnMKcmVuYW1lIHRvIGdpdC1ndWkvbWFjb3N4L2dpdC1ndWkuaWNucwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvLy5naXRpZ25vcmUgYi9naXQtZ3VpL3BvLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5Y2Y0NAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKyoubXNnCisqfgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9SRUFETUUgYi9naXQtZ3VpL3BvL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjU4MzdkCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9SRUFETUUKQEAgLTAsMCArMSwyNTEgQEAKK0xvY2FsaXppbmcgZ2l0LWd1aSBmb3IgeW91ciBsYW5ndWFnZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2hvcnQgbm90ZSBpcyB0byBoZWxwIHlvdSwgd2hvIHJlYWRzIGFuZCB3cml0ZXMgRW5nbGlzaCBhbmQgeW91cgorb3duIGxhbmd1YWdlLCBoZWxwIHVzIGdldHRpbmcgZ2l0LWd1aSBsb2NhbGl6ZWQgZm9yIG1vcmUgbGFuZ3VhZ2VzLiAgSXQKK2RvZXMgbm90IHRyeSB0byBiZSBhIGNvbXByZWhlbnNpdmUgbWFudWFsIG9mIEdOVSBnZXR0ZXh0LCB3aGljaCBpcyB0aGUKK2kxOG4gZnJhbWV3b3JrIHdlIHVzZSwgYnV0IHRyaWVzIHRvIGhlbHAgeW91IGdldCBzdGFydGVkIGJ5IGNvdmVyaW5nIHRoZQorYmFzaWNzIGFuZCBob3cgaXQgaXMgdXNlZCBpbiB0aGlzIHByb2plY3QuCisKKzEuIEdldHRpbmcgc3RhcnRlZC4KKworWW91IHdvdWxkIGZpcnN0IG5lZWQgdG8gaGF2ZSBhIHdvcmtpbmcgImdpdCIuICBZb3VyIGRpc3RyaWJ1dGlvbiBtYXkKK2hhdmUgaXQgYXMgImdpdC1jb3JlIiBwYWNrYWdlIChkbyBub3QgZ2V0ICJHTlUgSW50ZXJhY3RpdmUgVG9vbHMiIC0tCit0aGF0IGlzIGEgZGlmZmVyZW50ICJnaXQiKS4gIFlvdSB3b3VsZCBhbHNvIG5lZWQgR05VIGdldHRleHQgdG9vbGNoYWluCit0byB0ZXN0IHRoZSByZXN1bHRpbmcgdHJhbnNsYXRpb24gb3V0LiAgQWx0aG91Z2ggeW91IGNhbiB3b3JrIG9uIG1lc3NhZ2UKK3RyYW5zbGF0aW9uIGZpbGVzIHdpdGggYSByZWd1bGFyIHRleHQgZWRpdG9yLCBpdCBpcyBhIGdvb2QgaWRlYSB0byBoYXZlCitzcGVjaWFsaXplZCBzby1jYWxsZWQgInBvIGZpbGUgZWRpdG9ycyIgKGUuZy4gZW1hY3MgcG8tbW9kZSwgS0JhYmVsLAorcG9lZGl0LCBHVHJhbnNsYXRvciAtLS0gYW55IG9mIHRoZW0gd291bGQgd29yayB3ZWxsKS4gIFBsZWFzZSBpbnN0YWxsCit0aGVtLgorCitZb3Ugd291bGQgdGhlbiBuZWVkIHRvIGNsb25lIHRoZSBnaXQtZ3VpIHByb2plY3QgcmVwb3NpdG9yeSBhbmQgY3JlYXRlCithIGZlYXR1cmUgYnJhbmNoIHRvIGJlZ2luIHdvcmtpbmc6CisKKwkkIGdpdCBjbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L2dpdC1ndWkuZ2l0CisJJCBjZCBnaXQtZ3VpLmdpdAorCSQgZ2l0IGNoZWNrb3V0IC1iIG15LXRyYW5zbGF0aW9uCisKK1RoZSAiZ2l0IGNoZWNrb3V0IiBjb21tYW5kIGNyZWF0ZXMgYSBuZXcgYnJhbmNoIHRvIGtlZXAgeW91ciB3b3JrCitpc29sYXRlZCBhbmQgdG8gbWFrZSBpdCBzaW1wbGUgdG8gcG9zdCB5b3VyIHBhdGNoIHNlcmllcyB3aGVuCitjb21wbGV0ZWQuICBZb3Ugd2lsbCBiZSB3b3JraW5nIG9uIHRoaXMgYnJhbmNoLgorCisKKzIuIFN0YXJ0aW5nIGEgbmV3IGxhbmd1YWdlLgorCitJbiB0aGUgZ2l0LWd1aSBkaXJlY3RvcnkgaXMgYSBwby8gc3ViZGlyZWN0b3J5LiAgSXQgaGFzIGEgaGFuZGZ1bCBvZgorZmlsZXMgd2hvc2UgbmFtZXMgZW5kIHdpdGggIi5wbyIuICBJcyB0aGVyZSBhIGZpbGUgdGhhdCBoYXMgbWVzc2FnZXMKK2luIHlvdXIgbGFuZ3VhZ2U/CisKK0lmIHlvdSBkbyBub3Qga25vdyB3aGF0IHlvdXIgbGFuZ3VhZ2Ugc2hvdWxkIGJlIG5hbWVkLCB5b3UgbmVlZCB0byBmaW5kCitpdC4gIFRoaXMgY3VycmVudGx5IGZvbGxvd3MgSVNPIDYzOS0xIHR3byBsZXR0ZXIgY29kZXM6CisKKwlodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yL3BocC9jb2RlX2xpc3QucGhwCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHByZXBhcmluZyBhIHRyYW5zbGF0aW9uIGZvciBBZnJpa2FhbnMsIHRoZQorbGFuZ3VhZ2UgY29kZSBpcyAiYWYiLiAgSWYgdGhlcmUgYWxyZWFkeSBpcyBhIHRyYW5zbGF0aW9uIGZvciB5b3VyCitsYW5ndWFnZSwgeW91IGRvIG5vdCBoYXZlIHRvIHBlcmZvcm0gYW55IHN0ZXAgaW4gdGhpcyBzZWN0aW9uLCBidXQga2VlcAorcmVhZGluZywgYmVjYXVzZSB3ZSBhcmUgY292ZXJpbmcgdGhlIGJhc2ljcy4KKworSWYgeW91IGRpZCBub3QgZmluZCB5b3VyIGxhbmd1YWdlLCB5b3Ugd291bGQgbmVlZCB0byBzdGFydCBvbmUgeW91cnNlbGYuCitDb3B5IHBvL2dpdC1ndWkucG90IGZpbGUgdG8gcG8vYWYucG8gKHJlcGxhY2UgImFmIiB3aXRoIHRoZSBjb2RlIGZvcgoreW91ciBsYW5ndWFnZSkuICBFZGl0IHRoZSBmaXJzdCBzZXZlcmFsIGxpbmVzIHRvIG1hdGNoIGV4aXN0aW5nICoucG8KK2ZpbGVzIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBpcyBhIHRyYW5zbGF0aW9uIHRhYmxlIGZvciBnaXQtZ3VpIHByb2plY3QsCithbmQgeW91IGFyZSB0aGUgcHJpbWFyeSB0cmFuc2xhdG9yLiAgVGhlIHJlc3VsdCBvZiB5b3VyIGVkaXRpbmcgd291bGQKK2xvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgICMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBBZnJpa2FhbnMKKyAgICAjIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UKKyAgICAjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCisgICAgIyBZT1VSIE5BTUUgPFlPVVJARS1NQUlMLkFERFJFU1M+LCAyMDA3LgorICAgICMKKyAgICAjLCBmdXp6eQorICAgIG1zZ2lkICIiCisgICAgbXNnc3RyICIiCisgICAgIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorICAgICJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisgICAgIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA3LTI0IDIyOjE5KzAzMDBcbiIKKyAgICAiUE8tUmV2aXNpb24tRGF0ZTogMjAwNy0wNy0yNSAxODowMCswOTAwXG4iCisgICAgIkxhc3QtVHJhbnNsYXRvcjogWU9VUiBOQU1FIDxZT1VSQEUtTUFJTC5BRERSRVNTPlxuIgorICAgICJMYW5ndWFnZS1UZWFtOiBBZnJpa2FhbnNcbiIKKyAgICAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisgICAgIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworWW91IHdpbGwgZmluZCBtYW55IHBhaXJzIG9mIGEgIm1zZ2lkIiBsaW5lIGZvbGxvd2VkIGJ5IGEgIm1zZ3N0ciIgbGluZS4KK1RoZXNlIHBhaXJzIGRlZmluZSBob3cgbWVzc2FnZXMgaW4gZ2l0LWd1aSBhcHBsaWNhdGlvbiBhcmUgdHJhbnNsYXRlZCB0bworeW91ciBsYW5ndWFnZS4gIFlvdXIgcHJpbWFyaWx5IGpvYiBpcyB0byBmaWxsIGluIHRoZSBlbXB0eSBkb3VibGUgcXVvdGUKK3BhaXJzIG9uIG1zZ3N0ciBsaW5lcyB3aXRoIHRoZSB0cmFuc2xhdGlvbiBvZiB0aGUgc3RyaW5ncyBvbiB0aGVpcgorbWF0Y2hpbmcgbXNnaWQgbGluZXMuICBBIGZldyB0aXBzOgorCisgLSBDb250cm9sIGNoYXJhY3RlcnMsIHN1Y2ggYXMgbmV3bGluZXMsIGFyZSB3cml0dGVuIGluIGJhY2tzbGFzaAorICAgc2VxdWVuY2Ugc2ltaWxhciB0byBzdHJpbmcgbGl0ZXJhbHMgaW4gdGhlIEMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCisgICBXaGVuIHRoZSBzdHJpbmcgZ2l2ZW4gb24gYSBtc2dpZCBsaW5lIGhhcyBzdWNoIGEgYmFja3NsYXNoIHNlcXVlbmNlLAorICAgeW91IHdvdWxkIHR5cGljYWxseSB3YW50IHRvIGhhdmUgY29ycmVzcG9uZGluZyBvbmVzIGluIHRoZSBzdHJpbmcgb24KKyAgIHlvdXIgbXNnc3RyIGxpbmUuCisKKyAtIFNvbWUgbWVzc2FnZXMgY29udGFpbiBhbiBvcHRpb25hbCBjb250ZXh0IGluZGljYXRvciBhdCB0aGUgZW5kLAorICAgZm9yIGV4YW1wbGUgIkBAbm91biIgb3IgIkBAdmVyYiIuICBUaGlzIGluZGljYXRvciBhbGxvd3MgdGhlCisgICBzb2Z0d2FyZSB0byBzZWxlY3QgdGhlIGNvcnJlY3QgdHJhbnNsYXRpb24gZGVwZW5kaW5nIHVwb24gdGhlIHVzZS4KKyAgIFRoZSBpbmRpY2F0b3IgaXMgbm90IGFjdHVhbGx5IHBhcnQgb2YgdGhlIG1lc3NhZ2UgYW5kIHdpbGwgbm90CisgICBiZSBzaG93biB0byB0aGUgZW5kLXVzZXIuCisKKyAgIElmIHlvdXIgbGFuZ3VhZ2UgZG9lcyBub3QgcmVxdWlyZSBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiB5b3UKKyAgIHdpbGwgc3RpbGwgbmVlZCB0byB0cmFuc2xhdGUgYm90aCBtZXNzYWdlcy4KKworIC0gT2Z0ZW4gdGhlIG1lc3NhZ2VzIGJlaW5nIHRyYW5zbGF0ZWQgYXJlIGZvcm1hdCBzdHJpbmdzIGdpdmVuIHRvCisgICAicHJpbnRmKCkiLWxpa2UgZnVuY3Rpb25zLiAgTWFrZSBzdXJlICIlcyIsICIlZCIsIGFuZCAiJSUiIGluIHlvdXIKKyAgIHRyYW5zbGF0ZWQgbWVzc2FnZXMgbWF0Y2ggdGhlIG9yaWdpbmFsLgorCisgICBXaGVuIHlvdSBoYXZlIHRvIGNoYW5nZSB0aGUgb3JkZXIgb2Ygd29yZHMsIHlvdSBjYW4gYWRkICI8bnVtYmVyPiQiCisgICBiZXR3ZWVuICclJyBhbmQgdGhlIGNvbnZlcnNpb24gKCdzJywgJ2QnLCBldGMuKSB0byBzYXkgIjxudW1iZXI+LXRoCisgICBwYXJhbWV0ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcgaXMgdXNlZCBhdCB0aGlzIHBvaW50Ii4gIEZvciBleGFtcGxlLAorICAgaWYgdGhlIG9yaWdpbmFsIG1lc3NhZ2UgaXMgbGlrZSB0aGlzOgorCisJIkxlbmd0aCBpcyAlZCwgV2VpZ2h0IGlzICVkIgorCisgICBhbmQgaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB5b3VyIHRyYW5zbGF0aW9uIG5lZWRzIHRvIHNheSB3ZWlnaHQgZmlyc3QKKyAgIGFuZCB0aGVuIGxlbmd0aCwgeW91IGNhbiBzYXkgc29tZXRoaW5nIGxpa2U6CisKKwkiV0VJR0hUIElTICUyJGQsIExFTkdUSCBJUyAlMSRkIgorCisgICBBIGZvcm1hdCBzcGVjaWZpY2F0aW9uIHdpdGggYSAnKicgKGFzdGVyaXNrKSByZWZlcnMgdG8gKnR3byogYXJndW1lbnRzCisgICBpbnN0ZWFkIG9mIG9uZSwgaGVuY2UgdGhlIHN1Y2NlZWRpbmcgYXJndW1lbnQgbnVtYmVyIGlzIHR3byBoaWdoZXIKKyAgIGluc3RlYWQgb2Ygb25lLiBTbywgYSBtZXNzYWdlIGxpa2UgdGhpcworCisJIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCisKKyAgIGlzIGVxdWl2YWxlbnQgdG8KKworCSIlMSRzIC4uLiAlMiQqaSBvZiAlNCQqaSAlNiRzICglNyQzaSUlKSIKKworIC0gQSBsb25nIG1lc3NhZ2UgY2FuIGJlIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBsaW5lcyBieSBlbmRpbmcgdGhlCisgICBzdHJpbmcgd2l0aCBhIGRvdWJsZSBxdW90ZSwgYW5kIHN0YXJ0aW5nIGFub3RoZXIgc3RyaW5nIG9uIHRoZSBuZXh0CisgICBsaW5lIHdpdGggYW5vdGhlciBkb3VibGUgcXVvdGUuICBUaGV5IHdpbGwgYmUgY29uY2F0ZW5hdGVkIGluIHRoZQorICAgcmVzdWx0LiAgRm9yIGV4YW1wbGU6CisKKyAgICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisgICAjLCB0Y2wtZm9ybWF0CisgICBtc2dpZCAiIgorICAgIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorICAgIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorICAgbXNnc3RyICIiCisgICAiSEVSRSBZT1UgV0lMTCBXUklURSBZT1VSIFRSQU5TTEFUSU9OIE9GIFRIRSBBQk9WRSBMT05HICIKKyAgICJNRVNTQUdFIElOIFlPVVIgTEFOR1VBR0UuIgorCitZb3UgY2FuIHRlc3QgeW91ciB0cmFuc2xhdGlvbiBieSBydW5uaW5nICJtYWtlIGluc3RhbGwiLCB3aGljaCB3b3VsZAorY3JlYXRlIHBvL2FmLm1zZyBmaWxlIGFuZCBpbnN0YWxscyB0aGUgcmVzdWx0LCBhbmQgdGhlbiBydW5uaW5nIHRoZQorcmVzdWx0aW5nIGdpdC1ndWkgdW5kZXIgeW91ciBsb2NhbGU6CisKKwkkIG1ha2UgaW5zdGFsbAorCSQgTEFORz1hZiBnaXQtZ3VpCisKK1RoZXJlIGlzIGEgdHJpY2sgdG8gdGVzdCB5b3VyIHRyYW5zbGF0aW9uIHdpdGhvdXQgZmlyc3QgaW5zdGFsbGluZzoKKworCSQgbWFrZQorCSQgTEFORz1hZiAuL2dpdC1ndWkuc2gKKworV2hlbiB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgdHJhbnNsYXRpb24sIGNvbW1pdCB5b3VyIGNoYW5nZXMgdGhlbiBzdWJtaXQKK3lvdXIgcGF0Y2ggc2VyaWVzIHRvIHRoZSBtYWludGFpbmVyIGFuZCB0aGUgR2l0IG1haWxpbmcgbGlzdDoKKworCSQgZWRpdCBwby9hZi5wbworCS4uLiBiZSBzdXJlIHRvIHVwZGF0ZSBMYXN0LVRyYW5zbGF0b3I6IGFuZAorCS4uLiBQTy1SZXZpc2lvbi1EYXRlOiBsaW5lcy4KKwkkIGdpdCBhZGQgcG8vYWYucG8KKwkkIGdpdCBjb21taXQgLXMgLW0gJ2dpdC1ndWk6IGFkZGVkIEFmcmlrYWFucyB0cmFuc2xhdGlvbi4nCisJJCBnaXQgc2VuZC1lbWFpbCAtLXRvICdnaXRAdmdlci5rZXJuZWwub3JnJyBcCisJICAgLS1jYyAnUGF0IFRob3l0cyA8cGF0dGhveXRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4nIFwKKwkgICAtLXN1YmplY3QgJ2dpdC1ndWk6IEFmcmlrYWFucyB0cmFuc2xhdGlvbicgXAorCSAgIG1hc3Rlci4uCisKKworMy4gVXBkYXRpbmcgeW91ciB0cmFuc2xhdGlvbi4KKworVGhlcmUgbWF5IGFscmVhZHkgYmUgYSB0cmFuc2xhdGlvbiBmb3IgeW91ciBsYW5ndWFnZSwgYW5kIHlvdSBtYXkgd2FudAordG8gY29udHJpYnV0ZSBhbiB1cGRhdGUuICBUaGlzIG1heSBiZSBiZWNhdXNlIHlvdSB3b3VsZCB3YW50IHRvIGltcHJvdmUKK3RoZSB0cmFuc2xhdGlvbiBvZiBleGlzdGluZyBtZXNzYWdlcywgb3IgYmVjYXVzZSB0aGUgZ2l0LWd1aSBzb2Z0d2FyZQoraXRzZWxmIHdhcyB1cGRhdGVkIGFuZCB0aGVyZSBhcmUgbmV3IG1lc3NhZ2VzIHRoYXQgbmVlZCB0cmFuc2xhdGlvbi4KKworSW4gYW55IGNhc2UsIG1ha2Ugc3VyZSB5b3UgYXJlIHVwLXRvLWRhdGUgYmVmb3JlIHN0YXJ0aW5nIHlvdXIgd29yazoKKworCSQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSQgZ2l0IHB1bGwKKworSW4gdGhlIGZvcm1lciBjYXNlLCB5b3Ugd2lsbCBlZGl0IHBvL2FmLnBvIChhZ2FpbiwgcmVwbGFjZSAiYWYiIHdpdGgKK3lvdXIgbGFuZ3VhZ2UgY29kZSksIGFuZCBhZnRlciB0ZXN0aW5nIGFuZCB1cGRhdGluZyB0aGUgTGFzdC1UcmFuc2xhdG9yOgorYW5kIFBPLVJldmlzaW9uLURhdGU6IGxpbmVzLCAiYWRkL2NvbW1pdC9wdXNoIiBhcyBpbiB0aGUgcHJldmlvdXMKK3NlY3Rpb24uCisKK0J5IGNvbXBhcmluZyAiUE9ULUNyZWF0aW9uLURhdGU6IiBsaW5lIGluIHBvL2dpdC1ndWkucG90IGZpbGUgYW5kCitwby9hZi5wbyBmaWxlLCB5b3UgY2FuIHRlbGwgaWYgdGhlcmUgYXJlIG5ldyBtZXNzYWdlcyB0aGF0IG5lZWQgdG8gYmUKK3RyYW5zbGF0ZWQuICBZb3Ugd291bGQgbmVlZCB0aGUgR05VIGdldHRleHQgcGFja2FnZSB0byBwZXJmb3JtIHRoaXMKK3N0ZXAuCisKKwkkIG1zZ21lcmdlIC1VIHBvL2FmLnBvIHBvL2dpdC1ndWkucG90CisKK1RoaXMgdXBkYXRlcyBwby9hZi5wbyAoYWdhaW4sIHJlcGxhY2UgImFmIiB3aXRoIHlvdXIgbGFuZ3VhZ2UKK2NvZGUpIHNvIHRoYXQgaXQgY29udGFpbnMgbXNnaWQgbGluZXMgKGkuZS4gdGhlIG9yaWdpbmFsKSB0aGF0Cit5b3VyIHRyYW5zbGF0aW9uIGRpZCBub3QgaGF2ZSBiZWZvcmUuICBUaGVyZSBhcmUgYSBmZXcgdGhpbmdzIHRvCit3YXRjaCBvdXQgZm9yOgorCisgLSBUaGUgb3JpZ2luYWwgdGV4dCBpbiBFbmdsaXNoIG9mIGFuIG9sZGVyIG1lc3NhZ2UgeW91IGFscmVhZHkKKyAgIHRyYW5zbGF0ZWQgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQuICBZb3Ugd2lsbCBub3RpY2UgYSBjb21tZW50IGxpbmUKKyAgIHRoYXQgYmVnaW5zIHdpdGggIiMsIGZ1enp5IiBpbiBmcm9udCBvZiBzdWNoIGEgbWVzc2FnZS4gIG1zZ21lcmdlCisgICB0b29sIG1hZGUgaXRzIGJlc3QgZWZmb3J0IHRvIG1hdGNoIHlvdXIgb2xkIHRyYW5zbGF0aW9uIHdpdGggdGhlCisgICBtZXNzYWdlIGZyb20gdGhlIHVwZGF0ZWQgc29mdHdhcmUsIGJ1dCB5b3UgbWF5IGZpbmQgY2FzZXMgdGhhdCBpdAorICAgbWF0Y2hlZCB5b3VyIG9sZCB0cmFuc2xhdGVkIG1lc3NhZ2UgdG8gYSBuZXcgbXNnaWQgYW5kIHRoZSBwYWlyaW5nCisgICBkb2VzIG5vdCBtYWtlIGFueSBzZW5zZSAtLSB5b3Ugd291bGQgbmVlZCB0byBmaXggdGhlbSwgYW5kIHRoZW4KKyAgIHJlbW92ZSB0aGUgIiMsIGZ1enp5IiBsaW5lIGZyb20gdGhlIG1lc3NhZ2UgKHlvdXIgZml4ZWQgdHJhbnNsYXRpb24KKyAgIG9mIHRoZSBtZXNzYWdlIHdpbGwgbm90IGJlIHVzZWQgYmVmb3JlIHlvdSByZW1vdmUgdGhlIG1hcmtlcikuCisKKyAtIE5ldyBtZXNzYWdlcyBhZGRlZCB0byB0aGUgc29mdHdhcmUgd2lsbCBoYXZlIG1zZ3N0ciBsaW5lcyB3aXRoIGVtcHR5CisgICBzdHJpbmdzLiAgWW91IHdvdWxkIG5lZWQgdG8gdHJhbnNsYXRlIHRoZW0uCisKK1RoZSBwby9naXQtZ3VpLnBvdCBmaWxlIGlzIHVwZGF0ZWQgYnkgdGhlIGludGVybmF0aW9uYWxpemF0aW9uCitjb29yZGluYXRvciBmcm9tIHRpbWUgdG8gdGltZS4gIFlvdSBfY291bGRfIHVwZGF0ZSBpdCB5b3Vyc2VsZiwgYnV0Cit0cmFuc2xhdG9ycyBhcmUgZGlzY291cmFnZWQgZnJvbSBkb2luZyBzbyBiZWNhdXNlIHdlIHdvdWxkIHdhbnQgYWxsCitsYW5ndWFnZSB0ZWFtcyB0byBiZSB3b3JraW5nIG9mZiBvZiB0aGUgc2FtZSB2ZXJzaW9uIG9mIGdpdC1ndWkucG90LgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgc2VjdGlvbiBpcyBhIG5vdGUgdG8gdGhlIGludGVybmF0aW9uYWxpemF0aW9uIGNvb3JkaW5hdG9yLCBhbmQKK3RyYW5zbGF0b3JzIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGl0IHRvbyBtdWNoLgorCitUaGUgbWVzc2FnZSB0ZW1wbGF0ZSBmaWxlIHBvL2dpdC1ndWkucG90IG5lZWRzIHRvIGJlIGtlcHQgdXAgdG8gZGF0ZQorcmVsYXRpdmUgdG8gdGhlIHNvZnR3YXJlIHRoZSB0cmFuc2xhdGlvbnMgYXBwbHkgdG8sIGFuZCBpdCBpcyB0aGUKK3Jlc3BvbnNpYmlsaXR5IG9mIHRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBjb29yZGluYXRvci4KKworV2hlbiB1cGRhdGluZyBwby9naXQtZ3VpLnBvdCBmaWxlLCBob3dldmVyLCBfbmV2ZXJfIHJ1biAibXNnbWVyZ2UgLVUKK3BvL3h4LnBvIiBmb3IgaW5kaXZpZHVhbCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMsIHVubGVzcyB5b3UgYXJlIGFic29sdXRlbHkKK3N1cmUgdGhhdCB0aGVyZSBpcyBubyBvdXRzdGFuZGluZyB3b3JrIG9uIHRyYW5zbGF0aW9uIGZvciBsYW5ndWFnZSB4eC4KK0RvaW5nIHNvIHdpbGwgY3JlYXRlIHVubmVjZXNzYXJ5IG1lcmdlIGNvbmZsaWN0cyBhbmQgZm9yY2UgbmVlZGxlc3MKK3JlLXRyYW5zbGF0aW9uIG9uIHRyYW5zbGF0b3JzLiAgVGhlIHRyYW5zbGF0b3IgaG93ZXZlciBtYXkgbm90IGhhdmUgYWNjZXNzCit0byB0aGUgbXNnbWVyZ2UgdG9vbCwgaW4gd2hpY2ggY2FzZSB0aGUgY29vcmRpbmF0b3IgbWF5IHJ1biBpdCBmb3IgdGhlCit0cmFuc2xhdG9yIGFzIGEgc2VydmljZS4KKworQnV0IG1pc3Rha2VzIGRvIGhhcHBlbi4gIFN1cHBvc2UgYSB0cmFuc2xhdGlvbiB3YXMgYmFzZWQgb24gYW4gb2xkZXIKK3ZlcnNpb24gWCwgdGhlIFBPVCBmaWxlIHdhcyB1cGRhdGVkIGF0IHZlcnNpb24gWSBhbmQgdGhlbiBtc2dtZXJnZSB3YXMgcnVuCithdCB2ZXJzaW9uIFogZm9yIHRoZSBsYW5ndWFnZSwgYW5kIHRoZSB0cmFuc2xhdG9yIHNlbnQgaW4gYSBwYXRjaCBiYXNlZCBvbgordmVyc2lvbiBYOgorCisgICAgICAgICA/IHRyYW5zbGF0ZWQKKyAgICAgICAgLworICAgIC0tLVgtLS1ZLS0tWiAobWFzdGVyKQorCitUaGUgY29vcmRpbmF0b3IgY291bGQgcmVjb3ZlciBmcm9tIHN1Y2ggYSBtaXN0YWtlIGJ5IGZpcnN0IGFwcGx5aW5nIHRoZQorcGF0Y2ggdG8gWCwgcmVwbGFjZSB0aGUgdHJhbnNsYXRlZCBmaWxlIGluIFosIGFuZCB0aGVuIHJ1bm5pbmcgbXNnbWVyZ2UKK2FnYWluIGJhc2VkIG9uIHRoZSB1cGRhdGVkIFBPVCBmaWxlIGFuZCBjb21taXQgdGhlIHJlc3VsdC4gIFRoZSBzZXF1ZW5jZQord291bGQgbG9vayBsaWtlIHRoaXM6CisKKyAgICAkIGdpdCBjaGVja291dCBYCisgICAgJCBnaXQgYW0gLXMgeHgucGF0Y2gKKyAgICAkIGdpdCBjaGVja291dCBtYXN0ZXIKKyAgICAkIGdpdCBjaGVja291dCBIRUFEQHsxfSBwby94eC5wbworICAgICQgbXNnbWVyZ2UgLVUgcG8veHgucG8gcG8vZ2l0LWd1aS5wb3QKKyAgICAkIGdpdCBjb21taXQgLWMgSEVBREB7MX0gcG8veHgucG8KKworU3RhdGUgaW4gdGhlIG1lc3NhZ2UgdGhhdCB0aGUgdHJhbnNsYXRlZCBtZXNzYWdlcyBhcmUgYmFzZWQgb24gYSBzbGlnaHRseQorb2xkZXIgdmVyc2lvbiwgYW5kIG1zZ21lcmdlIHdhcyBydW4gdG8gaW5jb3Jwb3JhdGUgY2hhbmdlcyB0byBtZXNzYWdlCit0ZW1wbGF0ZXMgZnJvbSB0aGUgdXBkYXRlZCBQT1QgZmlsZS4gIFRoZSByZXN1bHQgbmVlZHMgdG8gYmUgZnVydGhlcgordHJhbnNsYXRlZCwgYnV0IGF0IGxlYXN0IHRoZSBtZXNzYWdlcyB0aGF0IHdlcmUgdXBkYXRlZCBieSB0aGUgcGF0Y2ggdGhhdAord2VyZSBub3QgY2hhbmdlZCBieSB0aGUgUE9UIHVwZGF0ZSB3aWxsIHN1cnZpdmUgdGhlIHByb2Nlc3MgYW5kIGRvIG5vdAorbmVlZCB0byBiZSByZS10cmFuc2xhdGVkLgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9kZS5wbyBiL2dpdC1ndWkvcG8vZGUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlYmZmMgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vZGUucG8KQEAgLTAsMCArMSwyNTkyIEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gR2VybWFuLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdCBwYWNrYWdlLgorIyBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+LCAyMDA3CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI2IDIyOjIyKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAxLTI2IDIyOjI1KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHZXJtYW5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjc5MyBnaXQtZ3VpLnNoOjgwNyBnaXQtZ3VpLnNoOjgyMCBnaXQtZ3VpLnNoOjkwMworIzogZ2l0LWd1aS5zaDo5MjIKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTogUHJvZ3JhbW1mZWhsZXIiCisKKyM6IGdpdC1ndWkuc2g6NzQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgIlVuZ8O8bHRpZ2UgWmVpY2hlbnNhdHotQW5nYWJlIGluICVzOiIKKworIzogZ2l0LWd1aS5zaDo3NzkKK21zZ2lkICJNYWluIEZvbnQiCittc2dzdHIgIlByb2dyYW1tc2NocmlmdGFydCIKKworIzogZ2l0LWd1aS5zaDo3ODAKK21zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKK21zZ3N0ciAiVmVyZ2xlaWNoLVNjaHJpZnRhcnQiCisKKyM6IGdpdC1ndWkuc2g6Nzk0Cittc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgorbXNnc3RyICJHaXQga2FubiBpbSBQQVRIIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iCisKKyM6IGdpdC1ndWkuc2g6ODIxCittc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCittc2dzdHIgIkdpdCBWZXJzaW9uc2FuZ2FiZSBrYW5uIG5pY2h0IGVya2FubnQgd2VyZGVuOiIKKworIzogZ2l0LWd1aS5zaDo4MzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCisiXG4iCisiJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKKyJcbiIKKyIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCisiXG4iCisiQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKK21zZ3N0ciAiIgorIkRpZSBWZXJzaW9uIHZvbiBHaXQga2FubiBuaWNodCBiZXN0aW1tdCB3ZXJkZW4uXG4iCisiXG4iCisiwrslc8KrIGJlaGF1cHRldCwgZXMgc2VpIFZlcnNpb24gwrslc8KrLlxuIgorIlxuIgorIiVzIGJlbsO2dGlndCBtaW5kZXN0ZW5zIEdpdCAxLjUuMCBvZGVyIGjDtmhlci5cbiIKKyJcbiIKKyJTb2xsIGFuZ2Vub21tZW4gd2VyZGVuLCDCuyVzwqsgc2VpIFZlcnNpb24gMS41LjA/XG4iCisKKyM6IGdpdC1ndWkuc2g6MTEyOAorbXNnaWQgIkdpdCBkaXJlY3Rvcnkgbm90IGZvdW5kOiIKK21zZ3N0ciAiR2l0LVZlcnplaWNobmlzIG5pY2h0IGdlZnVuZGVuOiIKKworIzogZ2l0LWd1aS5zaDoxMTQ2Cittc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKK21zZ3N0ciAiIgorIkVzIGtvbm50ZSBuaWNodCBpbiBkYXMgb2JlcnN0ZSBWZXJ6ZWljaG5pcyBkZXIgQXJiZWl0c2tvcGllIGdld2VjaHNlbHQgIgorIndlcmRlbjoiCisKKyM6IGdpdC1ndWkuc2g6MTE1NAorbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKK21zZ3N0ciAiQmxvw59lcyBQcm9qZWt0YXJjaGl2IGthbm4gbmljaHQgYmVudXR6dCB3ZXJkZW46IgorCisjOiBnaXQtZ3VpLnNoOjExNjIKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiS2VpbiBBcmJlaXRzdmVyemVpY2huaXMiCisKKyM6IGdpdC1ndWkuc2g6MTMzNCBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNgorbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCittc2dzdHIgIkRhdGVpc3RhdHVzIGFrdHVhbGlzaWVyZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MTM5MAorbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgIk5hY2ggZ2XDpG5kZXJ0ZW4gRGF0ZWllbiBzdWNoZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MTQ1NAorbXNnaWQgIkNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIkF1ZnJ1ZmVuIGRlciBFaW50cmFnZW4tVm9yYmVyZWl0ZW4tS29udHJvbGxlICjCu3ByZXBhcmUtY29tbWl0IGhvb2vCqykuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTQ3MQorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIiIKKyJFaW50cmFnZW4gYWJnZWxlaG50IGR1cmNoIEVpbnRyYWdlbi1Wb3JiZXJlaXRlbi1Lb250cm9sbGUgKMK7cHJlcGFyZS1jb21taXQgIgorImhvb2vCqykuIgorCisjOiBnaXQtZ3VpLnNoOjE2MjkgbGliL2Jyb3dzZXIudGNsOjI0NgorbXNnaWQgIlJlYWR5LiIKK21zZ3N0ciAiQmVyZWl0LiIKKworIzogZ2l0LWd1aS5zaDoxNzg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKK21zZ3N0ciAiTnVyICVzIHZvbiAlcyBEYXRlaWVuIHdlcmRlbiBhbmdlemVpZ3QuIgorCisjOiBnaXQtZ3VpLnNoOjE5MTMKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICJVbnZlcsOkbmRlcnQiCisKKyM6IGdpdC1ndWkuc2g6MTkxNQorbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJWZXLDpG5kZXJ0LCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKKworIzogZ2l0LWd1aS5zaDoxOTE2IGdpdC1ndWkuc2g6MTkyNAorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJCZXJlaXRnZXN0ZWxsdCB6dW0gRWludHJhZ2VuIgorCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIlRlaWx3ZWlzZSBiZXJlaXRnZXN0ZWxsdCB6dW0gRWludHJhZ2VuIgorCisjOiBnaXQtZ3VpLnNoOjE5MTggZ2l0LWd1aS5zaDoxOTI2Cittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCittc2dzdHIgIkJlcmVpdGdlc3RlbGx0IHp1bSBFaW50cmFnZW4sIGZlaGxlbmQiCisKKyM6IGdpdC1ndWkuc2g6MTkyMAorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJEYXRlaXR5cCBnZcOkbmRlcnQsIG5pY2h0IGJlcmVpdGdlc3RlbGx0IgorCisjOiBnaXQtZ3VpLnNoOjE5MjEKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgorbXNnc3RyICJEYXRlaXR5cCBnZcOkbmRlcnQsIGJlcmVpdGdlc3RlbGx0IgorCisjOiBnaXQtZ3VpLnNoOjE5MjMKK21zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIk5pY2h0IHVudGVyIFZlcnNpb25za29udHJvbGxlLCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKKworIzogZ2l0LWd1aS5zaDoxOTI4Cittc2dpZCAiTWlzc2luZyIKK21zZ3N0ciAiRmVobGVuZCIKKworIzogZ2l0LWd1aS5zaDoxOTI5Cittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgorbXNnc3RyICJCZXJlaXRnZXN0ZWxsdCB6dW0gTMO2c2NoZW4iCisKKyM6IGdpdC1ndWkuc2g6MTkzMAorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIEzDtnNjaGVuLCB0cm90emRlbSB2b3JoYW5kZW4iCisKKyM6IGdpdC1ndWkuc2g6MTkzMiBnaXQtZ3VpLnNoOjE5MzMgZ2l0LWd1aS5zaDoxOTM0IGdpdC1ndWkuc2g6MTkzNQorIzogZ2l0LWd1aS5zaDoxOTM2IGdpdC1ndWkuc2g6MTkzNworbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIktvbmZsaWt0YXVmbMO2c3VuZyBuw7Z0aWciCisKKyM6IGdpdC1ndWkuc2g6MTk3MgorbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIkdpdGsgd2lyZCBnZXN0YXJ0ZXQuLi4gYml0dGUgd2FydGVuLiIKKworIzogZ2l0LWd1aS5zaDoxOTg0Cittc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCittc2dzdHIgIkdpdGsga2FubiBpbSBQQVRIIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iCisKKyM6IGdpdC1ndWkuc2g6MjA0MworbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgorbXNnc3RyICLCu0dpdCBndWnCqyBrYW5uIGltIFBBVEggbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiIKKworIzogZ2l0LWd1aS5zaDoyNDU1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICJQcm9qZWt0YXJjaGl2IgorCisjOiBnaXQtZ3VpLnNoOjI0NTYKK21zZ2lkICJFZGl0IgorbXNnc3RyICJCZWFyYmVpdGVuIgorCisjOiBnaXQtZ3VpLnNoOjI0NTggbGliL2Nob29zZV9yZXYudGNsOjU2MQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiWndlaWciCisKKyM6IGdpdC1ndWkuc2g6MjQ2MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4Cittc2dpZCAiQ29tbWl0QEBub3VuIgorbXNnc3RyICJWZXJzaW9uIgorCisjOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIgorCisjOiBnaXQtZ3VpLnNoOjI0NjUgbGliL2Nob29zZV9yZXYudGNsOjU1NworbXNnaWQgIlJlbW90ZSIKK21zZ3N0ciAiRXh0ZXJuZSBBcmNoaXZlIgorCisjOiBnaXQtZ3VpLnNoOjI0NjgKK21zZ2lkICJUb29scyIKK21zZ3N0ciAiV2Vya3pldWdlIgorCisjOiBnaXQtZ3VpLnNoOjI0NzcKK21zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKK21zZ3N0ciAiQXJiZWl0c2tvcGllIGltIERhdGVpbWFuYWdlciIKKworIzogZ2l0LWd1aS5zaDoyNDgzCittc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCittc2dzdHIgIkFrdHVlbGxlbiBad2VpZyBkdXJjaGJsw6R0dGVybiIKKworIzogZ2l0LWd1aS5zaDoyNDg3Cittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKK21zZ3N0ciAiRWluZW4gWndlaWcgZHVyY2hibMOkdHRlcm4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjQ5MgorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCdzIEhpc3RvcnkiCittc2dzdHIgIkFrdHVlbGxlbiBad2VpZyBkYXJzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjI0OTYKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgorbXNnc3RyICJBbGxlIFp3ZWlnZSBkYXJzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjI1MDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAiWndlaWcgwrslc8KrIGR1cmNoYmzDpHR0ZXJuIgorCisjOiBnaXQtZ3VpLnNoOjI1MDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICJIaXN0b3JpZSB2b24gwrslc8KrIGRhcnN0ZWxsZW4iCisKKyM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICJEYXRlbmJhbmtzdGF0aXN0aWsiCisKKyM6IGdpdC1ndWkuc2g6MjUxMyBsaWIvZGF0YWJhc2UudGNsOjM0Cittc2dpZCAiQ29tcHJlc3MgRGF0YWJhc2UiCittc2dzdHIgIkRhdGVuYmFuayBrb21wcmltaWVyZW4iCisKKyM6IGdpdC1ndWkuc2g6MjUxNgorbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKK21zZ3N0ciAiRGF0ZW5iYW5rIMO8YmVycHLDvGZlbiIKKworIzogZ2l0LWd1aS5zaDoyNTIzIGdpdC1ndWkuc2g6MjUyNyBnaXQtZ3VpLnNoOjI1MzEgbGliL3Nob3J0Y3V0LnRjbDo4CisjOiBsaWIvc2hvcnRjdXQudGNsOjQwIGxpYi9zaG9ydGN1dC50Y2w6NzIKK21zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgorbXNnc3RyICJEZXNrdG9wLUljb24gZXJzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjI1MzkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKK21zZ2lkICJRdWl0IgorbXNnc3RyICJCZWVuZGVuIgorCisjOiBnaXQtZ3VpLnNoOjI1NDcKK21zZ2lkICJVbmRvIgorbXNnc3RyICJSw7xja2fDpG5naWciCisKKyM6IGdpdC1ndWkuc2g6MjU1MAorbXNnaWQgIlJlZG8iCittc2dzdHIgIldpZWRlcmhvbGVuIgorCisjOiBnaXQtZ3VpLnNoOjI1NTQgZ2l0LWd1aS5zaDozMTA5Cittc2dpZCAiQ3V0IgorbXNnc3RyICJBdXNzY2huZWlkZW4iCisKKyM6IGdpdC1ndWkuc2g6MjU1NyBnaXQtZ3VpLnNoOjMxMTIgZ2l0LWd1aS5zaDozMTg2IGdpdC1ndWkuc2g6MzI1OQorIzogbGliL2NvbnNvbGUudGNsOjY5Cittc2dpZCAiQ29weSIKK21zZ3N0ciAiS29waWVyZW4iCisKKyM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKK21zZ2lkICJQYXN0ZSIKK21zZ3N0ciAiRWluZsO8Z2VuIgorCisjOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAiTMO2c2NoZW4iCisKKyM6IGdpdC1ndWkuc2g6MjU2NyBnaXQtZ3VpLnNoOjMxMjIgZ2l0LWd1aS5zaDozMjYzIGxpYi9jb25zb2xlLnRjbDo3MQorbXNnaWQgIlNlbGVjdCBBbGwiCittc2dzdHIgIkFsbGUgYXVzd8OkaGxlbiIKKworIzogZ2l0LWd1aS5zaDoyNTc2Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICJFcnN0ZWxsZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU4MgorbXNnaWQgIkNoZWNrb3V0Li4uIgorbXNnc3RyICJVbXN0ZWxsZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU4OAorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAiVW1iZW5lbm5lbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTkzCittc2dpZCAiRGVsZXRlLi4uIgorbXNnc3RyICJMw7ZzY2hlbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTk4Cittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgIlp1csO8Y2tzZXR6ZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjYwOAorbXNnaWQgIkRvbmUiCittc2dzdHIgIkZlcnRpZyIKKworIzogZ2l0LWd1aS5zaDoyNjEwCittc2dpZCAiQ29tbWl0QEB2ZXJiIgorbXNnc3RyICJFaW50cmFnZW4iCisKKyM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKK21zZ2lkICJOZXcgQ29tbWl0IgorbXNnc3RyICJOZXVlIFZlcnNpb24iCisKKyM6IGdpdC1ndWkuc2g6MjYyNyBnaXQtZ3VpLnNoOjMwNTcKK21zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKK21zZ3N0ciAiTGV0enRlIG5hY2hiZXNzZXJuIgorCisjOiBnaXQtZ3VpLnNoOjI2MzcgZ2l0LWd1aS5zaDozMDExIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKK21zZ2lkICJSZXNjYW4iCittc2dzdHIgIk5ldSBsYWRlbiIKKworIzogZ2l0LWd1aS5zaDoyNjQzCittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICJadW0gRWludHJhZ2VuIGJlcmVpdHN0ZWxsZW4iCisKKyM6IGdpdC1ndWkuc2g6MjY0OQorbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgorbXNnc3RyICJHZcOkbmRlcnRlIERhdGVpZW4gYmVyZWl0c3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiQXVzIGRlciBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCisKKyM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICLDhG5kZXJ1bmdlbiB2ZXJ3ZXJmZW4iCisKKyM6IGdpdC1ndWkuc2g6MjY2OSBnaXQtZ3VpLnNoOjMzMTAgZ2l0LWd1aS5zaDozMzQxCittc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCittc2dzdHIgIldlbmlnZXIgWmVpbGVuIGFuemVpZ2VuIgorCisjOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQorbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgorbXNnc3RyICJNZWhyIFplaWxlbiBhbnplaWdlbiIKKworIzogZ2l0LWd1aS5zaDoyNjgwIGdpdC1ndWkuc2g6MzAyNCBnaXQtZ3VpLnNoOjMxMzMKK21zZ2lkICJTaWduIE9mZiIKK21zZ3N0ciAiQWJ6ZWljaG5lbiIKKworIzogZ2l0LWd1aS5zaDoyNjk2Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIkxva2FsZXMgWnVzYW1tZW5mw7xocmVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MDEKK21zZ2lkICJBYm9ydCBNZXJnZS4uLiIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGFiYnJlY2hlbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQorbXNnaWQgIkFkZC4uLiIKK21zZ3N0ciAiSGluenVmw7xnZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjcxNworbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIlZlcnNlbmRlbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzIxCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAiWndlaWcgbMO2c2NoZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjczMSBnaXQtZ3VpLnNoOjMyOTIKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICJPcHRpb25lbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzQyCittc2dpZCAiUmVtb3ZlLi4uIgorbXNnc3RyICJFbnRmZXJuZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc1MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCittc2dpZCAiSGVscCIKK21zZ3N0ciAiSGlsZmUiCisKKyM6IGdpdC1ndWkuc2g6Mjc1NSBnaXQtZ3VpLnNoOjI3NTkgbGliL2Fib3V0LnRjbDoxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgIsOcYmVyICVzIgorCisjOiBnaXQtZ3VpLnNoOjI3ODMKK21zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKK21zZ3N0ciAiT25saW5lLURva3VtZW50YXRpb24iCisKKyM6IGdpdC1ndWkuc2g6Mjc4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKK21zZ2lkICJTaG93IFNTSCBLZXkiCittc2dzdHIgIlNTSC1TY2hsw7xzc2VsIGFuemVpZ2VuIgorCisjOiBnaXQtZ3VpLnNoOjI4OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkZlaGxlcjogVmVyemVpY2huaXMgwrslc8KrIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW46IERhdGVpIG9kZXIgVmVyemVpY2huaXMgIgorIm5pY2h0IGdlZnVuZGVuIgorCisjOiBnaXQtZ3VpLnNoOjI5MjYKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgIkFrdHVlbGxlciBad2VpZzoiCisKKyM6IGdpdC1ndWkuc2g6Mjk0NworbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCittc2dzdHIgIkJlcmVpdHN0ZWxsdW5nICh6dW0gRWludHJhZ2VuKSIKKworIzogZ2l0LWd1aS5zaDoyOTY3Cittc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKK21zZ3N0ciAiTmljaHQgYmVyZWl0Z2VzdGVsbHRlIMOEbmRlcnVuZ2VuIgorCisjOiBnaXQtZ3VpLnNoOjMwMTcKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIgorbXNnc3RyICJBbGxlcyBiZXJlaXRzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjMwMzYgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MworbXNnaWQgIlB1c2giCittc2dzdHIgIlZlcnNlbmRlbiIKKworIzogZ2l0LWd1aS5zaDozMDcxCittc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkVyc3RlIFZlcnNpb25zYmVzY2hyZWlidW5nOiIKKworIzogZ2l0LWd1aS5zaDozMDcyCittc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk5hY2hnZWJlc3NlcnRlIEJlc2NocmVpYnVuZzoiCisKKyM6IGdpdC1ndWkuc2g6MzA3MworbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk5hY2hnZWJlc3NlcnRlIGVyc3RlIEJlc2NocmVpYnVuZzoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NAorbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJOYWNoZ2ViZXNzZXJ0ZSBadXNhbW1lbmbDvGhydW5ncy1CZXNjaHJlaWJ1bmc6IgorCisjOiBnaXQtZ3VpLnNoOjMwNzUKK21zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzLUJlc2NocmVpYnVuZzoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NgorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiVmVyc2lvbnNiZXNjaHJlaWJ1bmc6IgorCisjOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MworbXNnaWQgIkNvcHkgQWxsIgorbXNnc3RyICJBbGxlIGtvcGllcmVuIgorCisjOiBnaXQtZ3VpLnNoOjMxNDkgbGliL2JsYW1lLnRjbDoxMDQKK21zZ2lkICJGaWxlOiIKK21zZ3N0ciAiRGF0ZWk6IgorCisjOiBnaXQtZ3VpLnNoOjMyNTUKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICJBa3R1YWxpc2llcmVuIgorCisjOiBnaXQtZ3VpLnNoOjMyNzYKK21zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIlNjaHJpZnRncsO2w59lIHZlcmtsZWluZXJuIgorCisjOiBnaXQtZ3VpLnNoOjMyODAKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIlNjaHJpZnRncsO2w59lIHZlcmdyw7bDn2VybiIKKworIzogZ2l0LWd1aS5zaDozMjg4IGxpYi9ibGFtZS50Y2w6MjgxCittc2dpZCAiRW5jb2RpbmciCittc2dzdHIgIlplaWNoZW5rb2RpZXJ1bmciCisKKyM6IGdpdC1ndWkuc2g6MzI5OQorbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKK21zZ3N0ciAiS29udGV4dCBhbndlbmRlbi91bWtlaHJlbiIKKworIzogZ2l0LWd1aS5zaDozMzA0Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgorbXNnc3RyICJaZWlsZSBhbndlbmRlbi91bWtlaHJlbiIKKworIzogZ2l0LWd1aS5zaDozMzIzCittc2dpZCAiUnVuIE1lcmdlIFRvb2wiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWciCisKKyM6IGdpdC1ndWkuc2g6MzMyOAorbXNnaWQgIlVzZSBSZW1vdGUgVmVyc2lvbiIKK21zZ3N0ciAiRXh0ZXJuZSBWZXJzaW9uIGJlbnV0emVuIgorCisjOiBnaXQtZ3VpLnNoOjMzMzIKK21zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKK21zZ3N0ciAiTG9rYWxlIFZlcnNpb24gYmVudXR6ZW4iCisKKyM6IGdpdC1ndWkuc2g6MzMzNgorbXNnaWQgIlJldmVydCBUbyBCYXNlIgorbXNnc3RyICJVcnNwcsO8bmdsaWNoZSBWZXJzaW9uIGJlbnV0emVuIgorCisjOiBnaXQtZ3VpLnNoOjMzNTQKK21zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJEaWVzZSDDhG5kZXJ1bmdlbiBpbSBVbnRlcm1vZHVsIGRhcnN0ZWxsZW4iCisKKyM6IGdpdC1ndWkuc2g6MzM1OAorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIkFrdHVlbGxlbiBad2VpZyBpbSBVbnRlcm1vZHVsIGRhcnN0ZWxsZW4iCisKKyM6IGdpdC1ndWkuc2g6MzM2MgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiQWxsZSBad2VpZ2UgaW0gVW50ZXJtb2R1bCBkYXJzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjMzNjcKK21zZ2lkICJTdGFydCBnaXQgZ3VpIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIkdpdCBndWkgaW0gVW50ZXJtb2R1bCBzdGFydGVuIgorCisjOiBnaXQtZ3VpLnNoOjMzODkKK21zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCittc2dzdHIgIktvbnRleHQgYXVzIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKKworIzogZ2l0LWd1aS5zaDozMzkxCittc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKK21zZ3N0ciAiWmVpbGVuIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgorCisjOiBnaXQtZ3VpLnNoOjMzOTMKK21zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCittc2dzdHIgIlplaWxlIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgorCisjOiBnaXQtZ3VpLnNoOjMzOTYKK21zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCittc2dzdHIgIktvbnRleHQgenVyIEJlcmVpdHN0ZWxsdW5nIGhpbnp1ZsO8Z2VuIgorCisjOiBnaXQtZ3VpLnNoOjMzOTgKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICJaZWlsZW4genVyIEJlcmVpdHN0ZWxsdW5nIGhpbnp1ZsO8Z2VuIgorCisjOiBnaXQtZ3VpLnNoOjM0MDAKK21zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCittc2dzdHIgIlplaWxlIHp1ciBCZXJlaXRzdGVsbHVuZyBoaW56dWbDvGdlbiIKKworIzogZ2l0LWd1aS5zaDozNDI0Cittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJJbml0aWFsaXNpZXJlbi4uLiIKKworIzogZ2l0LWd1aS5zaDozNTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJcbiIKKyJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKKyJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKKyJieSAlczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk3DtmdsaWNoZXJ3ZWlzZSBnaWJ0IGVzIFByb2JsZW1lIG1pdCBtYW5jaGVuIFVtZ2VidW5nc3ZhcmlhYmxlbi5cbiIKKyJcbiIKKyJEaWUgZm9sZ2VuZGVuIFVtZ2VidW5nc3ZhcmlhYmxlbiBrw7ZubmVuIHZlcm11dGxpY2ggbmljaHQgXG4iCisidm9uICVzIGFuIEdpdCB3ZWl0ZXJnZWdlYmVuIHdlcmRlbjpcbiIKKyJcbiIKKworIzogZ2l0LWd1aS5zaDozNTcwCittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJEaWVzIGlzdCBlaW4gYmVrYW5udGVzIFByb2JsZW0gZGVyIFRjbC1WZXJzaW9uLCBkaWVcbiIKKyJpbiBDeWd3aW4gbWl0Z2VsaWVmZXJ0IHdpcmQuIgorCisjOiBnaXQtZ3VpLnNoOjM1NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgorImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgorInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCisifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJVbSBkZW4gTmFtZW4gwrslc8KrIHp1IMOkbmRlcm4sIHNvbGx0ZW4gU2llIGRpZSBcbiIKKyJnZXfDvG5zY2h0ZW4gV2VydGUgZsO8ciBkaWUgRWluc3RlbGx1bmcgdXNlci5uYW1lIHVuZCBcbiIKKyJ1c2VyLmVtYWlsIGluIElocmUgRGF0ZWkgfi8uZ2l0Y29uZmlnIGVpbmbDvGdlbi5cbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtIGVpbmUgZ3JhZmlzY2hlIE9iZXJmbMOkY2hlIGbDvHIgR2l0LiIKKworIzogbGliL2JsYW1lLnRjbDo3MgorbXNnaWQgIkZpbGUgVmlld2VyIgorbXNnc3RyICJEYXRlaS1Ccm93c2VyIgorCisjOiBsaWIvYmxhbWUudGNsOjc4Cittc2dpZCAiQ29tbWl0OiIKK21zZ3N0ciAiVmVyc2lvbjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjcxCittc2dpZCAiQ29weSBDb21taXQiCittc2dzdHIgIlZlcnNpb24ga29waWVyZW4iCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjc1Cittc2dpZCAiRmluZCBUZXh0Li4uIgorbXNnc3RyICJUZXh0IHN1Y2hlbi4uLiIKKworIzogbGliL2JsYW1lLnRjbDoyODQKK21zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgorbXNnc3RyICJWb2xsZSBLb3BpZS1Fcmtlbm51bmciCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg4Cittc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCittc2dzdHIgIkhpc3Rvcmllbi1Lb250ZXh0IGFuemVpZ2VuIgorCisjOiBsaWIvYmxhbWUudGNsOjI5MQorbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCittc2dzdHIgIkVsdGVybnZlcnNpb24gYW5ub3RpZXJlbiIKKworIzogbGliL2JsYW1lLnRjbDo0NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZWFkaW5nICVzLi4uIgorbXNnc3RyICIlcyBsZXNlbi4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1NTcKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiQW5ub3RpZXJ1bmdlbiBmw7xyIEtvcGllcmVuL1ZlcnNjaGllYmVuIHdlcmRlbiBnZWxhZGVuLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjU3NworbXNnaWQgImxpbmVzIGFubm90YXRlZCIKK21zZ3N0ciAiWmVpbGVuIGFubm90aWVydCIKKworIzogbGliL2JsYW1lLnRjbDo3NjkKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICJBbm5vdGllcnVuZ2VuIGbDvHIgdXJzcHLDvG5nbGljaGVuIE9ydCB3ZXJkZW4gZ2VsYWRlbi4uLiIKKworIzogbGliL2JsYW1lLnRjbDo3NzIKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAiQW5ub3RpZXJ1bmcgdm9sbHN0w6RuZGlnLiIKKworIzogbGliL2JsYW1lLnRjbDo4MDIKK21zZ2lkICJCdXN5IgorbXNnc3RyICJWZXJhcmJlaXR1bmcgbMOkdWZ0IgorCisjOiBsaWIvYmxhbWUudGNsOjgwMworbXNnaWQgIkFubm90YXRpb24gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuIgorbXNnc3RyICJBbm5vdGllcnVuZyBsw6R1ZnQgYmVyZWl0cy4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODQyCittc2dpZCAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiIKK21zZ3N0ciAiSW50ZW5zaXZlIEtvcGllLUVya2VubnVuZyBsw6R1ZnQuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6OTEwCittc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgorbXNnc3RyICJBbm5vdGllcnVuZyBsYWRlbi4uLiIKKworIzogbGliL2JsYW1lLnRjbDo5NjMKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTY3Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiRWludHJhZ2VuZGVyOiIKKworIzogbGliL2JsYW1lLnRjbDo5NzIKK21zZ2lkICJPcmlnaW5hbCBGaWxlOiIKK21zZ3N0ciAiVXJzcHLDvG5nbGljaGUgRGF0ZWk6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwMjAKK21zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCittc2dzdHIgIlp3ZWlnc3BpdHplICjCu0hFQUTCqykga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW46IgorCisjOiBsaWIvYmxhbWUudGNsOjEwNzUKK21zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKK21zZ3N0ciAiRWx0ZXJudmVyc2lvbiBrYW5uIG5pY2h0IGdlZnVuZGVuIHdlcmRlbjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA5MAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAiRWx0ZXJudmVyc2lvbiBrYW5uIG5pY2h0IGFuZ2V6ZWlndCB3ZXJkZW4iCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA5MSBsaWIvZGlmZi50Y2w6MzIwCittc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVzIFZlcmdsZWljaHM6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzEKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAiVXJzcHLDvG5nbGljaCB2b246IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzcKK21zZ2lkICJJbiBGaWxlOiIKK21zZ3N0ciAiSW4gRGF0ZWk6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyNDIKK21zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCittc2dzdHIgIktvcGllcnQgb2RlciB2ZXJzY2hvYmVuIGR1cmNoOiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTkKK21zZ2lkICJDaGVja291dCBCcmFuY2giCittc2dzdHIgIkF1ZiBad2VpZyB1bXN0ZWxsZW4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIzCittc2dpZCAiQ2hlY2tvdXQiCittc2dzdHIgIlVtc3RlbGxlbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjM1CisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMwIGxpYi9icm93c2VyLnRjbDoyODIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKKyM6IGxpYi9vcHRpb24udGNsOjEyNSBsaWIvcmVtb3RlX2FkZC50Y2w6MzIgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MgorIzogbGliL3Rvb2xzX2RsZy50Y2w6NDAgbGliL3Rvb2xzX2RsZy50Y2w6MjA0IGxpYi90b29sc19kbGcudGNsOjM1MgorIzogbGliL3RyYW5zcG9ydC50Y2w6MTA4Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBYmJyZWNoZW4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcgbGliL3Rvb2xzX2RsZy50Y2w6MzI4Cittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIlZlcnNpb24iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM2IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDoyODAKK21zZ2lkICJPcHRpb25zIgorbXNnc3RyICJPcHRpb25lbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzkgbGliL2JyYW5jaF9jcmVhdGUudGNsOjkyCittc2dpZCAiRmV0Y2ggVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICLDnGJlcm5haG1lendlaWcgYW5mb3JkZXJuIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NAorbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiVmVyYmluZHVuZyB6dSBsb2thbGVtIFp3ZWlnIGzDtnNlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIyCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAiWndlaWcgZXJzdGVsbGVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiTmV1ZW4gWndlaWcgZXJzdGVsbGVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkVyc3RlbGxlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQwCittc2dpZCAiQnJhbmNoIE5hbWUiCittc2dzdHIgIlp3ZWlnbmFtZSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQzIGxpYi9yZW1vdGVfYWRkLnRjbDozOSBsaWIvdG9vbHNfZGxnLnRjbDo1MAorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOYW1lOiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU4Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCittc2dzdHIgIlBhc3NlbmQgenUgw5xiZXJuYWhtZXp3ZWlnLU5hbWUiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgorbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgorbXNnc3RyICJBbmZhbmdzdmVyc2lvbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCittc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCittc2dzdHIgIkV4aXN0aWVyZW5kZW4gWndlaWcgYWt0dWFsaXNpZXJlbjoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorbXNnaWQgIk5vIgorbXNnc3RyICJOZWluIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKK21zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKK21zZ3N0ciAiTnVyIFNjaG5lbGx6dXNhbW1lbmbDvGhydW5nIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAiWnVyw7xja3NldHplbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIkFyYmVpdHNrb3BpZSB1bXN0ZWxsZW4gbmFjaCBFcnN0ZWxsZW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzEKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKK21zZ3N0ciAiQml0dGUgd8OkaGxlbiBTaWUgZWluZW4gw5xiZXJuYWhtZXp3ZWlnLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiw5xiZXJuYWhtZXp3ZWlnIMK7JXPCqyBpc3Qga2VpbiBad2VpZyBpbSBleHRlcm5lbiBQcm9qZWt0YXJjaGl2LiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1MyBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODYKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgorbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gWndlaWduYW1lbiBhbi4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgorbXNnc3RyICLCuyVzwqsgaXN0IGtlaW4genVsw6Rzc2lnZXIgWndlaWduYW1lLiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE1Cittc2dpZCAiRGVsZXRlIEJyYW5jaCIKK21zZ3N0ciAiWndlaWcgbMO2c2NoZW4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgIkxva2FsZW4gWndlaWcgbMO2c2NoZW4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNworbXNnaWQgIkxvY2FsIEJyYW5jaGVzIgorbXNnc3RyICJMb2thbGUgWndlaWdlIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTIKK21zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKK21zZ3N0ciAiTnVyIGzDtnNjaGVuLCB3ZW5uIHp1c2FtbWVuZ2Vmw7xocnQgbmFjaCIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICJJbW1lciAoS2VpbmUgWnVzYW1tZW5mw7xocnVuZ3NwcsO8ZnVuZykiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCittc2dzdHIgIkZvbGdlbmRlIFp3ZWlnZSBzaW5kIG5vY2ggbmljaHQgbWl0IMK7JXPCqyB6dXNhbW1lbmdlZsO8aHJ0OiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNworbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIlxuIgorIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisiRGFzIFdpZWRlcmhlcnN0ZWxsZW4gdm9uIGdlbMO2c2NodGVuIFp3ZWlnZW4gaXN0IG51ciBtaXQgZ3LDtsOfZXJlbSBBdWZ3YW5kICIKKyJtw7ZnbGljaC5cbiIKKyJcbiIKKyJTb2xsZW4gZGllIGF1c2dld8OkaGx0ZW4gWndlaWdlIGdlbMO2c2NodCB3ZXJkZW4/IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBMw7ZzY2hlbiBkZXIgWndlaWdlOlxuIgorIiVzIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIyCittc2dpZCAiUmVuYW1lIEJyYW5jaCIKK21zZ3N0ciAiWndlaWcgdW1iZW5lbm5lbiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI2Cittc2dpZCAiUmVuYW1lIgorbXNnc3RyICJVbWJlbmVubmVuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKK21zZ2lkICJCcmFuY2g6IgorbXNnc3RyICJad2VpZzoiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOQorbXNnaWQgIk5ldyBOYW1lOiIKK21zZ3N0ciAiTmV1ZXIgTmFtZToiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo3NQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKK21zZ3N0ciAiQml0dGUgd8OkaGxlbiBTaWUgZWluZW4gWndlaWcgenVtIHVtYmVuZW5uZW4uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIlp3ZWlnIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBVbWJlbmVubmVuIHZvbiDCuyVzwqsuIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTcKK21zZ2lkICJTdGFydGluZy4uLiIKK21zZ3N0ciAiU3RhcnRlbi4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2Cittc2dpZCAiRmlsZSBCcm93c2VyIgorbXNnc3RyICJEYXRlaS1Ccm93c2VyIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTI2IGxpYi9icm93c2VyLnRjbDoxNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nICVzLi4uIgorbXNnc3RyICIlcyBsYWRlbi4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE4NworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJbTmFjaCBvYmVuXSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2NyBsaWIvYnJvd3Nlci50Y2w6MjczCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAiRGF0ZWllbiBkZXMgWndlaWdzIGR1cmNoYmzDpHR0ZXJuIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4Cittc2dpZCAiQnJvd3NlIgorbXNnc3RyICJCbMOkdHRlcm4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgorbXNnc3RyICLDhG5kZXJ1bmdlbiDCuyVzwqsgdm9uIMK7JXPCqyBhbmZvcmRlcm4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICJGZWhsZXI6IMK7JXPCqyBrYW5uIG5pY2h0IGFscyBad2VpZyBvZGVyIFZlcnNpb24gZXJrYW5udCB3ZXJkZW4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCisjOiBsaWIvc3Noa2V5LnRjbDo1MworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJTY2hsaWXDn2VuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiWndlaWcgwrslc8KrIGV4aXN0aWVydCBuaWNodC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTk0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBzaW1wbGlmaWVkIGdpdC1wdWxsIGZvciAnJXMnLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRWlucmljaHRlbiBkZXIgdmVyZWluZmFjaHRlbiBnaXQtcHVsbCBmw7xyIMK7JXPCqy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKyJad2VpZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuXG4iCisiXG4iCisiWndlaWcga2FubiBuaWNodCBtaXQgwrslc8KrIHNjaG5lbGx6dXNhbW1lbmdlZsO8aHJ0IHdlcmRlbi4gUmVndWzDpHJlcyAiCisiWnVzYW1tZW5mw7xocmVuIGlzdCBub3R3ZW5kaWcuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzbWV0aG9kZSDCuyVzwqsgbmljaHQgdW50ZXJzdMO8dHp0LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgorbXNnc3RyICJBa3R1YWxpc2llcmVuIHZvbiDCuyVzwqsgZmVobGdlc2NobGFnZW4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAorbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKK21zZ3N0ciAiQmVyZWl0c3RlbGx1bmcgKMK7aW5kZXjCqykgaXN0IHp1ciBCZWFyYmVpdHVuZyBnZXNwZXJydCAowrtsb2NrZWTCqykuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiRGVyIGxldHp0ZSBnZWxhZGVuZSBTdGF0dXMgc3RpbW10IG5pY2h0IG1laHIgbWl0IGRlbSBQcm9qZWt0YXJjaGl2IMO8YmVyZWluLlxuIgorIlxuIgorIkVpbiBhbmRlcmVzIEdpdC1Qcm9ncmFtbSBoYXQgZGFzIFByb2pla3RhcmNoaXYgc2VpdCBkZW0gbGV0enRlbiBMYWRlbiAiCisiZ2XDpG5kZXJ0LiAgVm9yIGRlbSBXZWNoc2VsbiBkZXMgbG9rYWxlbiBad2VpZ3MgbXVzcyBuZXUgZ2VsYWRlbiB3ZXJkZW4uXG4iCisiXG4iCisiRXMgd2lyZCBnbGVpY2ggbmV1IGdlbGFkZW4uXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAiQXJiZWl0c2tvcGllIHVtc3RlbGxlbiBhdWYgwrslc8KrLi4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgorbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgorbXNnc3RyICJEYXRlaWVuIGFrdHVhbGlzaWVydCIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICIiCisiQXVmIFp3ZWlnIMK7JXPCqyB1bXN0ZWxsZW4gYWJnZWJyb2NoZW4gKFp1c2FtbWVuZsO8aHJlbiBkZXIgRGF0ZWllbiBpc3QgIgorIm5vdHdlbmRpZykuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NworbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgorbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gZGVyIERhdGVpZW4gaXN0IG5vdHdlbmRpZy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCittc2dzdHIgIkVzIHdpcmQgYXVmIFp3ZWlnIMK7JXPCqyB2ZXJibGllYmVuLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorIkRpZSBBcmJlaXRza29waWUgaXN0IG5pY2h0IGF1ZiBlaW5lbSBsb2thbGVuIFp3ZWlnLlxuIgorIlxuIgorIldlbm4gU2llIGF1ZiBlaW5lbSBad2VpZyBhcmJlaXRlbiBtw7ZjaHRlbiwgZXJzdGVsbGVuIFNpZSBiaXR0ZSBqZXR6dCBlaW5lbiAiCisiWndlaWcgbWl0IGRlciBBdXN3YWhsIMK7QWJnZXRyZW5udGUgQXJiZWl0c2tvcGllLVZlcnNpb27Cqy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIlVtZ2VzdGVsbHQgYXVmIMK7JXPCqy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAiWnVyw7xja3NldHplbiB2b24gwrslc8KrIG5hY2ggwrslc8KrIHdpcmQgZm9sZ2VuZGUgVmVyc2lvbmVuIHZlcndlcmZlbjoiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Cittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAiIgorIlZlcndvcmZlbmUgVmVyc2lvbmVuIGvDtm5uZW4gbnVyIG1pdCBncsO2w59lcmVtIEF1ZndhbmQgd2llZGVyaGVyZ2VzdGVsbHQgIgorIndlcmRlbi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgIsK7JXPCqyB6dXLDvGNrc2V0emVuPyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjcgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCittc2dpZCAiVmlzdWFsaXplIgorbXNnc3RyICJEYXJzdGVsbGVuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgorIlxuIgorIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCAiCisieW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCisiXG4iCisiVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCittc2dzdHIgIiIKKyJMb2thbGVyIFp3ZWlnIGthbm4gbmljaHQgZ2VzZXR6dCB3ZXJkZW4uXG4iCisiXG4iCisiRGllc2UgQXJiZWl0c2tvcGllIGlzdCBudXIgdGVpbHdlaXNlIHVtZ2VzdGVsbHQuIERpZSBEYXRlaWVuIHNpbmQga29ycmVrdCAiCisiYWt0dWFsaXNpZXJ0LCBhYmVyIGVpbmlnZSBpbnRlcm5lIEdpdC1EYXRlaWVuIGtvbm50ZW4gbmljaHQgZ2XDpG5kZXJ0ICIKKyJ3ZXJkZW4uXG4iCisiXG4iCisiRGllcyBpc3QgZWluIGludGVybmVyIFByb2dyYW1tZmVobGVyIHZvbiAlcy4gUHJvZ3JhbW0gd2lyZCBqZXR6dCBhYmdlYnJvY2hlbi4iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MzkKK21zZ2lkICJTZWxlY3QiCittc2dzdHIgIkF1c3fDpGhsZW4iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NTMKK21zZ2lkICJGb250IEZhbWlseSIKK21zZ3N0ciAiU2NocmlmdGZhbWlsaWUiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIlNjaHJpZnRncsO2w59lIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkxCittc2dpZCAiRm9udCBFeGFtcGxlIgorbXNnc3RyICJTY2hyaWZ0YmVpc3BpZWwiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTAzCittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyJEaWVzIGlzdCBlaW4gQmVpc3BpZWx0ZXh0LlxuIgorIldlbm4gSWhuZW4gZGllc2VyIFRleHQgZ2Vmw6RsbHQsIHNvbGx0ZW4gU2llIGRpZXNlIFNjaHJpZnRhcnQgd8OkaGxlbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICJHaXQgR3VpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg2Cittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICJOZXVlcyBQcm9qZWt0YXJjaGl2IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzCittc2dpZCAiTmV3Li4uIgorbXNnc3RyICJOZXUuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCittc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiUHJvamVrdGFyY2hpdiBrbG9uZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2Cittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIktsb25lbi4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE2Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICJQcm9qZWt0YXJjaGl2IMO2ZmZuZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE5Cittc2dpZCAiT3Blbi4uLiIKK21zZ3N0ciAiw5ZmZm5lbi4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKK21zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJadWxldHp0IGJlbnV0enRlIFByb2pla3RhcmNoaXZlIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzOAorbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgorbXNnc3RyICJadWxldHp0IGJlbnV0enRlcyBQcm9qZWt0YXJjaGl2IMO2ZmZuZW46IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJQcm9qZWt0YXJjaGl2IMK7JXPCqyBrb25udGUgbmljaHQgZXJzdGVsbHQgd2VyZGVuOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKK21zZ2lkICJEaXJlY3Rvcnk6IgorbXNnc3RyICJWZXJ6ZWljaG5pczoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAiR2l0IFByb2pla3RhcmNoaXYiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiVmVyemVpY2huaXMgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiRGF0ZWkgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjYKK21zZ2lkICJDbG9uZSIKK21zZ3N0ciAiS2xvbmVuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OQorbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCittc2dzdHIgIkhlcmt1bmZ0OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTAKK21zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKK21zZ3N0ciAiWmllbHZlcnplaWNobmlzOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKK21zZ2lkICJDbG9uZSBUeXBlOiIKK21zZ3N0ciAiQXJ0IGRlcyBLbG9uZW5zOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKK21zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCittc2dzdHIgIlN0YW5kYXJkIChzY2huZWxsLCB0ZWlsd2Vpc2UgcmVkdW5kYW50LCBIYXJkbGlua3MpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNAorbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKK21zZ3N0ciAiQWxsZXMga29waWVyZW4gKGxhbmdzYW1lciwgdm9sbGUgUmVkdW5kYW56KSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAiVmVya27DvHBmdCAoc2NobmVsbCwgbmljaHQgZW1wZm9obGVuLCBrZWluIEJhY2t1cCkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTU2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjAzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiS2VpbiBHaXQtUHJvamVrdGFyY2hpdiBpbiDCuyVzwqsgZ2VmdW5kZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MgorbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiU3RhbmRhcmQgaXN0IG51ciBmw7xyIGxva2FsZSBQcm9qZWt0YXJjaGl2ZSB2ZXJmw7xnYmFyLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJWZXJrbsO8cGZ0IGlzdCBudXIgZsO8ciBsb2thbGUgUHJvamVrdGFyY2hpdmUgdmVyZsO8Z2Jhci4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJQcm9qZWt0YXJjaGl2IMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4Cittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCittc2dzdHIgIkRlciBVcnNwcnVuZ3NvcnQga29ubnRlIG5pY2h0IGVpbmdlcmljaHRldCB3ZXJkZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiT2JqZWt0ZSB3ZXJkZW4gZ2V6w6RobHQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQxCittc2dpZCAiYnVja2V0cyIKK21zZ3N0ciAiQnVja2V0cyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCittc2dzdHIgIktvcGllbiB2b24gT2JqZWt0ZW4vSW5mby9BbHRlcm5hdGVzIGtvbm50ZW4gbmljaHQgZXJzdGVsbHQgd2VyZGVuOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgorbXNnc3RyICJWb24gwrslc8KrIGtvbm50ZSBuaWNodHMgZ2VrbG9udCB3ZXJkZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjkKK21zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCittc2dzdHIgIkRlciDCu21hc3RlcsKrLVp3ZWlnIHd1cmRlIG5vY2ggbmljaHQgaW5pdGlhbGlzaWVydC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2Cittc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKK21zZ3N0ciAiSGFyZGxpbmtzIG5pY2h0IHZlcmbDvGdiYXIuIFN0YXR0ZGVzc2VuIHdpcmQga29waWVydC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBmcm9tICVzIgorbXNnc3RyICJLb3BpZXJlbiB2b24gwrslc8KrIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQorbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKK21zZ3N0ciAiT2JqZWt0ZGF0ZW5iYW5rIGtvcGllcmVuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAorbXNnaWQgIktpQiIKK21zZ3N0ciAiS0IiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKK21zZ3N0ciAiT2JqZWt0IGthbm4gbmljaHQga29waWVydCB3ZXJkZW46ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NAorbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKK21zZ3N0ciAiT2JqZWt0ZSB2ZXJsaW5rZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk1Cittc2dpZCAib2JqZWN0cyIKK21zZ3N0ciAiT2JqZWt0ZSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKK21zZ3N0ciAiRsO8ciBPYmpla3Qga29ubnRlIGtlaW4gSGFyZGxpbmsgZXJzdGVsbHQgd2VyZGVuOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTgKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiWndlaWdlIHVuZCBPYmpla3RlIGtvbm50ZW4gbmljaHQgYW5nZWZvcmRlcnQgd2VyZGVuLiAgS29udHJvbGxpZXJlbiBTaWUgZGllICIKKyJBdXNnYWJlbiBhdWYgZGVyIEtvbnNvbGUgZsO8ciB3ZWl0ZXJlIEFuZ2FiZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2OQorbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIk1hcmtpZXJ1bmdlbiBrb25udGVuIG5pY2h0IGFuZ2Vmb3JkZXJ0IHdlcmRlbi4gIEtvbnRyb2xsaWVyZW4gU2llIGRpZSAiCisiQXVzZ2FiZW4gYXVmIGRlciBLb25zb2xlIGbDvHIgd2VpdGVyZSBBbmdhYmVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTMKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiRGllIFp3ZWlnc3BpdHplIChIRUFEKSBrb25udGUgbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiAgS29udHJvbGxpZXJlbiBTaWUgZGllICIKKyJBdXNnYWJlbiBhdWYgZGVyIEtvbnNvbGUgZsO8ciB3ZWl0ZXJlIEFuZ2FiZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICJWZXJ6ZWljaG5pcyDCuyVzwqsga2FubiBuaWNodCBhdWZnZXLDpHVtdCB3ZXJkZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAorbXNnaWQgIkNsb25lIGZhaWxlZC4iCittc2dzdHIgIktsb25lbiBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE1Cittc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgorbXNnc3RyICJLZWluIHZvcmVpbmdlc3RlbGx0ZXIgWndlaWcgZ2VmdW5kZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKK21zZ3N0ciAiwrslc8KrIHd1cmRlIG5pY2h0IGFscyBWZXJzaW9uIGdlZnVuZGVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKK21zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiQXJiZWl0c2tvcGllIGVyc3RlbGxlbiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzkgbGliL2luZGV4LnRjbDo2NyBsaWIvaW5kZXgudGNsOjEzMAorIzogbGliL2luZGV4LnRjbDoxOTgKK21zZ2lkICJmaWxlcyIKK21zZ3N0ciAiRGF0ZWllbiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKK21zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKK21zZ3N0ciAiRXJzdGVsbGVuIGRlciBBcmJlaXRza29waWUgZmVobGdlc2NobGFnZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKK21zZ2lkICJPcGVuIgorbXNnc3RyICLDlmZmbmVuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjEKK21zZ2lkICJSZXBvc2l0b3J5OiIKK21zZ3N0ciAiUHJvamVrdGFyY2hpdjoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJQcm9qZWt0YXJjaGl2IMK7JXPCqyBrb25udGUgbmljaHQgZ2XDtmZmbmV0IHdlcmRlbi4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MworbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgIkFiZ2V0cmVubnRlIEFyYmVpdHNrb3BpZS1WZXJzaW9uIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAiVmVyc2lvbiBSZWdleHAtQXVzZHJ1Y2s6IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzQKK21zZ2lkICJMb2NhbCBCcmFuY2giCittc2dzdHIgIkxva2FsZXIgWndlaWciCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3OQorbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiw5xiZXJuYWhtZXp3ZWlnIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAorbXNnaWQgIlRhZyIKK21zZ3N0ciAiTWFya2llcnVuZyIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlIFZlcnNpb246ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Cittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICJLZWluZSBWZXJzaW9uIGF1c2dld8OkaGx0LiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjM0NgorbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgorbXNnc3RyICJWZXJzaW9ucy1BdXNkcnVjayBpc3QgbGVlci4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzEKK21zZ2lkICJVcGRhdGVkIgorbXNnc3RyICJBa3R1YWxpc2llcnQiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTkKK21zZ2lkICJVUkwiCittc2dzdHIgIlVSTCIKKworIzogbGliL2NvbW1pdC50Y2w6OQorbXNnaWQgIiIKKyJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgorIlxuIgorIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCisidG8gYW1lbmQuXG4iCittc2dzdHIgIiIKKyJLZWluZSBWZXJzaW9uIHp1ciBOYWNoYmVzc2VydW5nIHZvcmhhbmRlbi5cbiIKKyJcbiIKKyJTaWUgc2luZCBkYWJlaSwgZGllIGVyc3RlIFZlcnNpb24genUgw7xiZXJ0cmFnZW4uIEVzIGdpYnQga2VpbmUgZXhpc3RpZXJlbmRlICIKKyJWZXJzaW9uLCBkaWUgU2llIG5hY2hiZXNzZXJuIGvDtm5udGVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxOAorbXNnaWQgIiIKKyJDYW5ub3QgYW1lbmQgd2hpbGUgbWVyZ2luZy5cbiIKKyJcbiIKKyJZb3UgYXJlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgdGhhdCBoYXMgbm90IGJlZW4gZnVsbHkgIgorImNvbXBsZXRlZC4gIFlvdSBjYW5ub3QgYW1lbmQgdGhlIHByaW9yIGNvbW1pdCB1bmxlc3MgeW91IGZpcnN0IGFib3J0IHRoZSAiCisiY3VycmVudCBtZXJnZSBhY3Rpdml0eS5cbiIKK21zZ3N0ciAiIgorIk5hY2hiZXNzZXJ1bmcgd8OkaHJlbiBadXNhbW1lbmbDvGhydW5nIG5pY2h0IG3DtmdsaWNoLlxuIgorIlxuIgorIlNpZSBoYWJlbiBkYXMgWnVzYW1tZW5mw7xocmVuIHZvbiBWZXJzaW9uZW4gYW5nZWZhbmdlbiwgYWJlciBub2NoIG5pY2h0ICIKKyJiZWVuZGV0LiBTaWUga8O2bm5lbiBrZWluZSB2b3JpZ2Ugw5xiZXJ0cmFndW5nIG5hY2hiZXNzZXJuLCBzb2xhbmdlIGVpbmUgIgorInVuZmVydGlnZSBadXNhbW1lbmbDvGhydW5nIGV4aXN0aWVydC4gRGF6dSBtw7xzc2VuIFNpZSBkaWUgWnVzYW1tZW5mw7xocnVuZyAiCisiYmVlbmRlbiBvZGVyIGFiYnJlY2hlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6NDgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCittc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBWZXJzaW9uc2RhdGVuIGbDvHIgTmFjaGJlc3Nlcm46IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgIkJlbnV0emVybmFtZSBrb25udGUgbmljaHQgYmVzdGltbXQgd2VyZGVuOiIKKworIzogbGliL2NvbW1pdC50Y2w6ODAKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IHZvbiBHSVRfQ09NTUlUVEVSX0lOREVOVDoiCisKKyM6IGxpYi9jb21taXQudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICJXYXJuaW5nOiBUY2wvVGsgdW50ZXJzdMO8dHp0IGRpZSBaZWljaGVuY29kaWVydW5nIMK7JXPCqyBuaWNodC4iCisKKyM6IGxpYi9jb21taXQudGNsOjE0OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJEZXIgbGV0enRlIGdlbGFkZW5lIFN0YXR1cyBzdGltbXQgbmljaHQgbWVociBtaXQgZGVtIFByb2pla3RhcmNoaXYgw7xiZXJlaW4uXG4iCisiXG4iCisiRWluIGFuZGVyZXMgR2l0LVByb2dyYW1tIGhhdCBkYXMgUHJvamVrdGFyY2hpdiBzZWl0IGRlbSBsZXR6dGVuIExhZGVuICIKKyJnZcOkbmRlcnQuICBWb3IgZGVtIEVpbnRyYWdlbiBlaW5lciBuZXVlbiBWZXJzaW9uIG11c3MgbmV1IGdlbGFkZW4gd2VyZGVuLlxuIgorIlxuIgorIkVzIHdpcmQgZ2xlaWNoIG5ldSBnZWxhZGVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKKyJiZWZvcmUgY29tbWl0dGluZy5cbiIKK21zZ3N0ciAiIgorIk5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4ga8O2bm5lbiBuaWNodCBlaW5nZXRyYWdlbiB3ZXJkZW4uXG4iCisiXG4iCisiRGllIERhdGVpIMK7JXPCqyBoYXQgbm9jaCBuaWNodCBhdWZnZWzDtnN0ZSBadXNhbW1lbmbDvGhydW5ncy1Lb25mbGlrdGUuIFNpZSAiCisibcO8c3NlbiBkaWVzZSBLb25mbGlrdGUgYXVmbMO2c2VuLCBiZXZvciBTaWUgZWludHJhZ2VuIGvDtm5uZW4uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKK21zZ3N0ciAiIgorIlVuYmVrYW5udGVyIERhdGVpenVzdGFuZCDCuyVzwqsuXG4iCisiXG4iCisiRGF0ZWkgwrslc8KrIGthbm4gbmljaHQgZWluZ2V0cmFnZW4gd2VyZGVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODgKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIktlaW5lIMOEbmRlcnVuZ2VuIHZvcmhhbmRlbiwgZGllIGVpbmdldHJhZ2VuIHdlcmRlbiBrw7ZubnRlbi5cbiIKKyJcbiIKKyJTaWUgbcO8c3NlbiBtaW5kZXN0ZW5zIGVpbmUgRGF0ZWkgYmVyZWl0c3RlbGxlbiwgYmV2b3IgU2llIGVpbnRyYWdlbiBrw7ZubmVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMDMKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICIiCisiQml0dGUgZ2ViZW4gU2llIGVpbmUgVmVyc2lvbnNiZXNjaHJlaWJ1bmcgZWluLlxuIgorIlxuIgorIkVpbmUgZ3V0ZSBWZXJzaW9uc2Jlc2NocmVpYnVuZyBlbnRow6RsdCBmb2xnZW5kZSBBYnNjaG5pdHRlOlxuIgorIlxuIgorIi0gRXJzdGUgWmVpbGU6IEVpbmUgWnVzYW1tZW5mYXNzdW5nLCB3YXMgbWFuIGdlbWFjaHQgaGF0LlxuIgorIlxuIgorIi0gWndlaXRlIFplaWxlOiBMZWVyemVpbGVcbiIKKyJcbiIKKyItIFJlc3Q6IEVpbmUgYXVzZsO8aHJsaWNoZSBCZXNjaHJlaWJ1bmcsIHdhcnVtIGRpZXNlIMOEbmRlcnVuZyBoaWxmcmVpY2ggaXN0LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzQKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAiQXVmcnVmZW4gZGVyIFZvci1FaW50cmFnZW4tS29udHJvbGxlICjCu3ByZS1jb21taXQgaG9va8KrKS4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjQ5Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCittc2dzdHIgIkVpbnRyYWdlbiBhYmdlbGVobnQgZHVyY2ggVm9yLUVpbnRyYWdlbi1Lb250cm9sbGUgKMK7cHJlLWNvbW1pdCBob29rwqspLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjcyCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIkF1ZnJ1ZmVuIGRlciBWZXJzaW9uc2Jlc2NocmVpYnVuZ3MtS29udHJvbGxlICjCu2NvbW1pdC1tZXNzYWdlIGhvb2vCqykuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI4NworbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgorbXNnc3RyICIiCisiRWludHJhZ2VuIGFiZ2VsZWhudCBkdXJjaCBWZXJzaW9uc2Jlc2NocmVpYnVuZ3MtS29udHJvbGxlICjCu2NvbW1pdC1tZXNzYWdlICIKKyJob29rwqspLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzAwCittc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgorbXNnc3RyICLDhG5kZXJ1bmdlbiBlaW50cmFnZW4uLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjMxNgorbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAid3JpdGUtdHJlZSBmZWhsZ2VzY2hsYWdlbjoiCisKKyM6IGxpYi9jb21taXQudGNsOjMxNyBsaWIvY29tbWl0LnRjbDozNjEgbGliL2NvbW1pdC50Y2w6MzgyCittc2dpZCAiQ29tbWl0IGZhaWxlZC4iCittc2dzdHIgIkVpbnRyYWdlbiBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGxpYi9jb21taXQudGNsOjMzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgIlZlcnNpb24gwrslc8KrIHNjaGVpbnQgYmVzY2jDpGRpZ3QgenUgc2VpbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiS2VpbmUgw4RuZGVydW5nZW4gZWluenV0cmFnZW4uXG4iCisiXG4iCisiRXMgZ2lidCBrZWluZSBnZcOkbmRlcnRlIERhdGVpIGJlaSBkaWVzZXIgVmVyc2lvbiB1bmQgZXMgd3VyZGUgYXVjaCBuaWNodHMgIgorInp1c2FtbWVuZ2Vmw7xocnQuXG4iCisiXG4iCisiRGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3aXJkIGRhaGVyIGpldHp0IG5ldSBnZWxhZGVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNDYKK21zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCittc2dzdHIgIktlaW5lIMOEbmRlcnVuZ2VuLCBkaWUgZWluZ2V0cmFnZW4gd2VyZGVuIGvDtm5uZW4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozNjAKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICJjb21taXQtdHJlZSBmZWhsZ2VzY2hsYWdlbjoiCisKKyM6IGxpYi9jb21taXQudGNsOjM4MQorbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKK21zZ3N0ciAidXBkYXRlLXJlZiBmZWhsZ2VzY2hsYWdlbjoiCisKKyM6IGxpYi9jb21taXQudGNsOjQ2OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKK21zZ3N0ciAiVmVyc2lvbiAlcyDDvGJlcnRyYWdlbjogJXMiCisKKyM6IGxpYi9jb25zb2xlLnRjbDo1OQorbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIlZlcmFyYmVpdHVuZy4gQml0dGUgd2FydGVuLi4uIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiRXJmb2xncmVpY2giCisKKyM6IGxpYi9jb25zb2xlLnRjbDoyMDAKK21zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCittc2dzdHIgIkZlaGxlcjogS29tbWFuZG8gZmVobGdlc2NobGFnZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKK21zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAiQW56YWhsIHVudmVya27DvHBmdGVyIE9iamVrdGUiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAiRmVzdHBsYXR0ZW5wbGF0eiB2b24gdW52ZXJrbsO8cGZ0ZW4gT2JqZWt0ZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKK21zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkFuemFobCBrb21wcmltaWVydGVyIE9iamVrdGUiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKK21zZ2lkICJOdW1iZXIgb2YgcGFja3MiCittc2dzdHIgIkFuemFobCBLb21wcmltaWVydW5nc2VpbmhlaXRlbiIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NworbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiRmVzdHBsYXR0ZW5wbGF0eiB2b24ga29tcHJpbWllcnRlbiBPYmpla3RlbiIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OAorbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCittc2dzdHIgIktvbXByaW1pZXJ0ZSBPYmpla3RlLCBkaWUgenVtIEF1ZnLDpHVtZW4gdm9yZ2VzZWhlbiBzaW5kIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ5Cittc2dpZCAiR2FyYmFnZSBmaWxlcyIKK21zZ3N0ciAiRGF0ZWllbiBpbSBNw7xsbGVpbWVyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiT2JqZWt0ZGF0ZW5iYW5rIGtvbXByaW1pZXJlbiIKKworIzogbGliL2RhdGFiYXNlLnRjbDo4MworbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgorbXNnc3RyICJEaWUgT2JqZWt0ZGF0ZW5iYW5rIGR1cmNoIMK7ZnNjay1vYmplY3Rzwqsgw7xiZXJwcsO8ZmVuIGxhc3NlbiIKKworIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgorIlxuIgorIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgorInRoZSBkYXRhYmFzZS5cbiIKKyJcbiIKKyJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKK21zZ3N0ciAiIgorIkRpZXNlcyBQcm9qZWt0YXJjaGl2IGVudGjDpGx0IHVuZ2Vmw6RociAlaSBuaWNodCB2ZXJrbsO8cGZ0ZSBPYmpla3RlLlxuIgorIlxuIgorIkbDvHIgZWluZSBvcHRpbWFsZSBQZXJmb3JtYW5jZSB3aXJkIGVtcGZvaGxlbiwgZGllIERhdGVuYmFuayBkZXMgUHJvamVrdGFyY2hpdnMgenUga29tcHJpbWllcmVuLlxuIgorIlxuIgorIlNvbGwgZGllIERhdGVuYmFuayBqZXR6dCBrb21wcmltaWVydCB3ZXJkZW4/IgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyBEYXR1bSB2b24gR2l0OiAlcyIKKworIzogbGliL2RpZmYudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgorIlxuIgorIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgorIlxuIgorIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKKyJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgorInRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAiIgorIktlaW5lIMOEbmRlcnVuZ2VuIGZlc3RzdGVsbGJhci5cbiIKKyJcbiIKKyLCuyVzwqsgZW50aMOkbHQga2VpbmUgw4RuZGVydW5nZW4uIFp3YXIgd3VyZGUgZGFzIMOEbmRlcnVuZ3NkYXR1bSBkaWVzZXIgRGF0ZWkgdm9uICIKKyJlaW5lbSBhbmRlcmVuIFByb2dyYW1tIG1vZGlmaXppZXJ0LCBhYmVyIGRlciBJbmhhbHQgZGVyIERhdGVpIGlzdCAiCisidW52ZXLDpG5kZXJ0LlxuIgorIlxuIgorIkRhcyBBcmJlaXRzdmVyemVpY2huaXMgd2lyZCBqZXR6dCBuZXUgZ2VsYWRlbiwgdW0gZGllc2Ugw4RuZGVydW5nIGJlaSBhbGxlbiAiCisiRGF0ZWllbiB6dSBwcsO8ZmVuLiIKKworIzogbGliL2RpZmYudGNsOjEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAiVmVyZ2xlaWNoIHZvbiDCuyVzwqsgbGFkZW4uLi4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMjUKK21zZ2lkICIiCisiTE9DQUw6IGRlbGV0ZWRcbiIKKyJSRU1PVEU6XG4iCittc2dzdHIgIiIKKyJMT0tBTDogZ2Vsw7ZzY2h0XG4iCisiQU5ERVJFUzpcbiIKKworIzogbGliL2RpZmYudGNsOjEzMAorbXNnaWQgIiIKKyJSRU1PVEU6IGRlbGV0ZWRcbiIKKyJMT0NBTDpcbiIKK21zZ3N0ciAiIgorIkFOREVSRVM6IGdlbMO2c2NodFxuIgorIkxPS0FMOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTM3Cittc2dpZCAiTE9DQUw6XG4iCittc2dzdHIgIkxPS0FMOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTQwCittc2dpZCAiUkVNT1RFOlxuIgorbXNnc3RyICJBTkRFUkVTOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjAyIGxpYi9kaWZmLnRjbDozMTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSAlcyIKK21zZ3N0ciAiRGF0ZWkgwrslc8KrIGthbm4gbmljaHQgYW5nZXplaWd0IHdlcmRlbiIKKworIzogbGliL2RpZmYudGNsOjIwMworbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCittc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBEYXRlaToiCisKKyM6IGxpYi9kaWZmLnRjbDoyMTAKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCittc2dzdHIgIkdpdC1Qcm9qZWt0YXJjaGl2IChVbnRlcnByb2pla3QpIgorCisjOiBsaWIvZGlmZi50Y2w6MjIyCittc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgorbXNnc3RyICIqIEJpbsOkcmRhdGVpIChJbmhhbHQgd2lyZCBuaWNodCBhbmdlemVpZ3QpIgorCisjOiBsaWIvZGlmZi50Y2w6MjI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKyIqIERhdGVpIG5pY2h0IHVudGVyIFZlcnNpb25za29udHJvbGxlLCBEYXRlaWdyw7bDn2UgJWQgQnl0ZXMuXG4iCisiKiBOdXIgZXJzdGUgJWQgQnl0ZXMgd2VyZGVuIGFuZ2V6ZWlndC5cbiIKKworIzogbGliL2RpZmYudGNsOjIzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKKyIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqIERhdGVpIG5pY2h0IHVudGVyIFZlcnNpb25za29udHJvbGxlLCBoaWVyIGFiZ2VzY2huaXR0ZW4gZHVyY2ggJXMuXG4iCisiKiBadW0gQW5zZWhlbiBkZXIgdm9sbHN0w6RuZGlnZW4gRGF0ZWkgZXh0ZXJuZW4gRWRpdG9yIGJlbnV0emVuLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6NDgyCittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBIZXJhdXNuZWhtZW4gZGVzIGdld8OkaGx0ZW4gS29udGV4dHMgYXVzIGRlciBCZXJlaXRzdGVsbHVuZy4iCisKKyM6IGxpYi9kaWZmLnRjbDo0ODkKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkZlaGxlciBiZWltIEJlcmVpdHN0ZWxsZW4gZGVzIGdld8OkaGx0ZW4gS29udGV4dHMuIgorCisjOiBsaWIvZGlmZi50Y2w6NTY4Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIkZlaGxlciBiZWltIEhlcmF1c25laG1lbiBkZXIgZ2V3w6RobHRlbiBaZWlsZSBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nLiIKKworIzogbGliL2RpZmYudGNsOjU3NgorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQmVyZWl0c3RlbGxlbiBkZXIgZ2V3w6RobHRlbiBaZWlsZS4iCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQzCittc2dpZCAiRGVmYXVsdCIKK21zZ3N0ciAiVm9yZWluc3RlbGx1bmciCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3lzdGVtICglcykiCittc2dzdHIgIlN5c3RlbXdlaXQgKCVzKSIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiQW5kZXJlIgorCisjOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE0Cittc2dpZCAiZXJyb3IiCittc2dzdHIgIkZlaGxlciIKKworIzogbGliL2Vycm9yLnRjbDozNgorbXNnaWQgIndhcm5pbmciCittc2dzdHIgIldhcm51bmciCisKKyM6IGxpYi9lcnJvci50Y2w6OTQKK21zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgorbXNnc3RyICIiCisiU2llIG3DvHNzZW4gZGllIG9iaWdlbiBGZWhsZXIgenVlcnN0IGJlaGViZW4sIGJldm9yIFNpZSBlaW50cmFnZW4ga8O2bm5lbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6NgorbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKK21zZ3N0ciAiQmVyZWl0c3RlbGx1bmcga2FubiBuaWNodCB3aWVkZXIgZnJlaWdlZ2ViZW4gd2VyZGVuLiIKKworIzogbGliL2luZGV4LnRjbDoxNQorbXNnaWQgIkluZGV4IEVycm9yIgorbXNnc3RyICJGZWhsZXIgaW4gQmVyZWl0c3RlbGx1bmciCisKKyM6IGxpYi9pbmRleC50Y2w6MTcKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCisicmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKK21zZ3N0ciAiIgorIkRhcyBBa3R1YWxpc2llcmVuIGRlciBHaXQtQmVyZWl0c3RlbGx1bmcgaXN0IGZlaGxnZXNjaGxhZ2VuLiBFaW5lIGFsbGdlbWVpbmUgIgorIkdpdC1Ba3R1YWxpc2llcnVuZyB3aXJkIGpldHp0IGdlc3RhcnRldCwgdW0gZ2l0LWd1aSB3aWVkZXIgbWl0IGdpdCB6dSAiCisic3luY2hyb25pc2llcmVuLiIKKworIzogbGliL2luZGV4LnRjbDoyOAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJGb3J0c2V0emVuIgorCisjOiBsaWIvaW5kZXgudGNsOjMxCittc2dpZCAiVW5sb2NrIEluZGV4IgorbXNnc3RyICJCZXJlaXRzdGVsbHVuZyBmcmVpZ2ViZW4iCisKKyM6IGxpYi9pbmRleC50Y2w6Mjg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgorbXNnc3RyICJEYXRlaSDCuyVzwqsgYXVzIGRlciBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzI4Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAiQmVyZWl0IHp1bSBFaW50cmFnZW4uIgorCisjOiBsaWIvaW5kZXgudGNsOjM0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiwrslc8KrIGhpbnp1ZsO8Z2VuLi4uIgorCisjOiBsaWIvaW5kZXgudGNsOjM5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgorbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiBEYXRlaSDCuyVzwqsgdmVyd2VyZmVuPyIKKworIzogbGliL2luZGV4LnRjbDo0MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGRlbiBnZXfDpGhsdGVuICVpIERhdGVpZW4gdmVyd2VyZmVuPyIKKworIzogbGliL2luZGV4LnRjbDo0MDgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyJBbGxlIG5pY2h0IGJlcmVpdGdlc3RlbGx0ZW4gw4RuZGVydW5nZW4gd2VyZGVuIGJlaW0gVmVyd2VyZmVuIHZlcmxvcmVuIGdlaGVuLiIKKworIzogbGliL2luZGV4LnRjbDo0MTEKK21zZ2lkICJEbyBOb3RoaW5nIgorbXNnc3RyICJOaWNodHMgdHVuIgorCisjOiBsaWIvaW5kZXgudGNsOjQyOQorbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKK21zZ3N0ciAiw4RuZGVydW5nZW4gaW4gZ2V3w6RobHRlbiBEYXRlaWVuIHZlcndlcmZlbiIKKworIzogbGliL2luZGV4LnRjbDo0MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgJXMiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluICVzIHZlcndlcmZlbiIKKworIzogbGliL21lcmdlLnRjbDoxMworbXNnaWQgIiIKKyJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIlp1c2FtbWVuZsO8aHJlbiBrYW5uIG5pY2h0IGdsZWljaHplaXRpZyBtaXQgTmFjaGJlc3Nlcm4gZHVyY2hnZWbDvGhydCB3ZXJkZW4uXG4iCisiXG4iCisiU2llIG3DvHNzZW4genVlcnN0IGRpZSBOYWNoYmVzc2VydW5ncy1WZXJzaW9uIGFic2NobGllw59lbiwgYmV2b3IgU2llICIKKyJ6dXNhbW1lbmbDvGhyZW4ga8O2bm5lbi5cbiIKKworIzogbGliL21lcmdlLnRjbDoyNworbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiRGVyIGxldHp0ZSBnZWxhZGVuZSBTdGF0dXMgc3RpbW10IG5pY2h0IG1laHIgbWl0IGRlbSBQcm9qZWt0YXJjaGl2IMO8YmVyZWluLlxuIgorIlxuIgorIkVpbiBhbmRlcmVzIEdpdC1Qcm9ncmFtbSBoYXQgZGFzIFByb2pla3RhcmNoaXYgc2VpdCBkZW0gbGV0enRlbiBMYWRlbiAiCisiZ2XDpG5kZXJ0LiAgVm9yIGVpbmVtIFp1c2FtbWVuZsO8aHJlbiBtdXNzIG5ldSBnZWxhZGVuIHdlcmRlbi5cbiIKKyJcbiIKKyJFcyB3aXJkIGdsZWljaCBuZXUgZ2VsYWRlbi5cbiIKKworIzogbGliL21lcmdlLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy5cbiIKKyJcbiIKKyJZb3UgbXVzdCByZXNvbHZlIHRoZW0sIHN0YWdlIHRoZSBmaWxlLCBhbmQgY29tbWl0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50ICIKKyJtZXJnZS4gIE9ubHkgdGhlbiBjYW4geW91IGJlZ2luIGFub3RoZXIgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJadXNhbW1lbmbDvGhydW5nIG1pdCBLb25mbGlrdGVuLlxuIgorIlxuIgorIkRpZSBEYXRlaSDCuyVzwqsgZW50aMOkbHQgS29uZmxpa3RlIGJlaW0gWnVzYW1tZW5mw7xocmVuLiBTaWUgbcO8c3NlbiBkaWVzZSAiCisiS29uZmxpa3RlIHBlciBIYW5kIGF1ZmzDtnNlbi4gQW5zY2hsaWXDn2VuZCBtw7xzc2VuIFNpZSBkaWUgRGF0ZWkgd2llZGVyICIKKyJiZXJlaXRzdGVsbGVuIHVuZCBlaW50cmFnZW4sIHVtIGRpZSBadXNhbW1lbmbDvGhydW5nIGFienVzY2hsaWXDn2VuLiBFcnN0ICIKKyJkYW5hY2gga2FubiBlaW5lIG5ldWUgWnVzYW1tZW5mw7xocnVuZyBiZWdvbm5lbiB3ZXJkZW4uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCisiXG4iCisiWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCisid2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorbXNnc3RyICIiCisiRXMgbGllZ2VuIMOEbmRlcnVuZ2VuIHZvci5cbiIKKyJcbiIKKyJEaWUgRGF0ZWkgwrslc8KrIHd1cmRlIGdlw6RuZGVydC4gIFNpZSBzb2xsdGVuIHp1ZXJzdCBkaWUgYmVyZWl0Z2VzdGVsbHRlICIKKyJWZXJzaW9uIGFic2NobGllw59lbiwgYmV2b3IgU2llIGVpbmUgWnVzYW1tZW5mw7xocnVuZyBiZWdpbm5lbi4gIE1pdCBkaWVzZXIgIgorIlJlaWhlbmZvbGdlIGvDtm5uZW4gU2llIG3DtmdsaWNoZSBLb25mbGlrdGUgYmVpbSBadXNhbW1lbmbDvGhyZW4gd2VzZW50bGljaCAiCisiZWluZmFjaGVyIGJlaGViZW4gb2RlciBhYmJyZWNoZW4uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIHZvbiAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIHZvbiAlcyB1bmQgJXMuLi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMxCittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBlcmZvbGdyZWljaCBhYmdlc2NobG9zc2VuLiIKKworIzogbGliL21lcmdlLnRjbDoxMzMKK21zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGZlaGxnZXNjaGxhZ2VuLiBLb25mbGlrdGF1ZmzDtnN1bmcgaXN0IG5vdHdlbmRpZy4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2UgSW50byAlcyIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGluIMK7JXPCqyIKKworIzogbGliL21lcmdlLnRjbDoxNzcKK21zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKK21zZ3N0ciAiWnVzYW1tZW56dWbDvGhyZW5kZSBWZXJzaW9uIgorCisjOiBsaWIvbWVyZ2UudGNsOjIxMgorbXNnaWQgIiIKKyJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorbXNnc3RyICIiCisiQWJicnVjaCBkZXIgTmFjaGJlc3NlcnVuZyBpc3QgbmljaHQgbcO2Z2xpY2guXG4iCisiXG4iCisiU2llIG3DvHNzZW4gZGllIE5hY2hiZXNzZXJ1bmcgZGVyIFZlcnNpb24gYWJzY2hsaWXDn2VuLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyMgorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorIlp1c2FtbWVuZsO8aHJlbiBhYmJyZWNoZW4/XG4iCisiXG4iCisiV2VubiBTaWUgYWJicmVjaGVuLCBnZWhlbiBhbGxlIG5vY2ggbmljaHQgZWluZ2V0cmFnZW5lbiDDhG5kZXJ1bmdlbiAiCisidmVybG9yZW4uXG4iCisiXG4iCisiWnVzYW1tZW5mw7xocmVuIGpldHp0IGFiYnJlY2hlbj8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjI4Cittc2dpZCAiIgorIlJlc2V0IGNoYW5nZXM/XG4iCisiXG4iCisiUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorbXNnc3RyICIiCisiw4RuZGVydW5nZW4genVyw7xja3NldHplbj9cbiIKKyJcbiIKKyJXZW5uIFNpZSB6dXLDvGNrc2V0emVuLCBnZWhlbiBhbGxlIG5vY2ggbmljaHQgZWluZ2V0cmFnZW5lbiDDhG5kZXJ1bmdlbiAiCisidmVybG9yZW4uXG4iCisiXG4iCisiw4RuZGVydW5nZW4gamV0enQgenVyw7xja3NldHplbj8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgIkFiYnJ1Y2giCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgIkRhdGVpZW4genVyw7xja2dlc2V0enQiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY3Cittc2dpZCAiQWJvcnQgZmFpbGVkLiIKK21zZ3N0ciAiQWJicnVjaCBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY5Cittc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgorbXNnc3RyICJBYmJydWNoIGR1cmNoZ2Vmw7xocnQuIEJlcmVpdC4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjgKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgorbXNnc3RyICJLb25mbGlrdCBkdXJjaCBCYXNpc3ZlcnNpb24gZXJzZXR6ZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo5Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCittc2dzdHIgIktvbmZsaWt0IGR1cmNoIGRpZXNlbiBad2VpZyBlcnNldHplbj8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAiS29uZmxpa3QgZHVyY2ggYW5kZXJlbiBad2VpZyBlcnNldHplbj8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vdGUgdGhhdCB0aGUgZGlmZiBzaG93cyBvbmx5IGNvbmZsaWN0aW5nIGNoYW5nZXMuXG4iCisiXG4iCisiJXMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiIKKyJcbiIKKyJUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdW5kb25lIG9ubHkgYnkgcmVzdGFydGluZyB0aGUgbWVyZ2UuIgorbXNnc3RyICIiCisiSGlud2VpczogRGVyIFZlcmdsZWljaCB6ZWlndCBudXIga29uZmxpa3R2ZXJ1cnNhY2hlbmRlIMOEbmRlcnVuZ2VuIGFuLlxuIgorIlxuIgorIsK7JXPCqyB3aXJkIMO8YmVyc2NocmllYmVuLlxuIgorIlxuIgorIkRpZXNlIE9wZXJhdGlvbiBrYW5uIG51ciByw7xja2fDpG5naWcgZ2VtYWNodCB3ZXJkZW4sIHdlbm4gZGllXG4iCisiWnVzYW1tZW5mw7xocnVuZyBlcm5ldXQgZ2VzdGFydGV0IHdpcmQuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorbXNnc3RyICJEYXRlaSDCuyVzwqsgaGF0IG5pY2h0IGF1ZmdlbMO2c3RlIEtvbmZsaWt0ZS4gVHJvdHpkZW0gYmVyZWl0c3RlbGxlbj8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgorbXNnc3RyICJBdWZsw7ZzdW5nIGhpbnp1Z2Vmw7xndCBmw7xyICVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDEKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSBkZWxldGlvbiBvciBsaW5rIGNvbmZsaWN0cyB1c2luZyBhIHRvb2wiCittc2dzdHIgIiIKKyJLb25mbGlrdGUgZHVyY2ggZ2Vsw7ZzY2h0ZSBEYXRlaWVuIG9kZXIgc3ltYm9saXNjaGUgTGlua3Mga8O2bm5lbiBuaWNodCBkdXJjaCAiCisiZGFzIFp1c2FtZW5mw7xocnVuZ3N3ZXJremV1ZyBnZWzDtnN0IHdlcmRlbi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgorbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIktvbmZsaWt0LURhdGVpIGV4aXN0aWVydCBuaWNodCIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR1VJIG1lcmdlIHRvb2w6ICclcyciCittc2dzdHIgIktlaW4gR1VJIFp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWc6IMK7JXPCqyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICJVbmJla2FubnRlcyBadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnOiDCuyVzwqsiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMwMworbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnIGzDpHVmdCBiZXJlaXRzLiBTb2xsIGVzIGFiZ2Vicm9jaGVuIHdlcmRlbj8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorIiVzIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gQWJydWZlbiBkZXIgRGF0ZWl2ZXJzaW9uZW46XG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnIGtvbm50ZSBuaWNodCBnZXN0YXJ0ZXQgd2VyZGVuOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcgc3RhcnRlbi4uLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6Mzc1IGxpYi9tZXJnZXRvb2wudGNsOjM4MworbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGxpYi9vcHRpb24udGNsOjExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBnbG9iYWxlIFplaWNoZW5rb2RpZXJ1bmcgwrslc8KrIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIEFyY2hpdi1aZWljaGVua29kaWVydW5nIMK7JXPCqyIKKworIzogbGliL29wdGlvbi50Y2w6MTE3Cittc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKK21zZ3N0ciAiVm9yZWluc3RlbGx1bmdlbiB3aWVkZXJoZXJzdGVsbGVuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjEKK21zZ2lkICJTYXZlIgorbXNnc3RyICJTcGVpY2hlcm4iCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgIlByb2pla3RhcmNoaXYgJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMgorbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCittc2dzdHIgIkdsb2JhbCAoQWxsZSBQcm9qZWt0YXJjaGl2ZSkiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzOAorbXNnaWQgIlVzZXIgTmFtZSIKK21zZ3N0ciAiQmVudXR6ZXJuYW1lIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzkKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICJFLU1haWwtQWRyZXNzZSIKKworIzogbGliL29wdGlvbi50Y2w6MTQxCittc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzLVZlcnNpb25lbiB6dXNhbW1lbmZhc3NlbiIKKworIzogbGliL29wdGlvbi50Y2w6MTQyCittc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgorbXNnc3RyICJBdXNmw7xocmxpY2hrZWl0IGRlciBadXNhbW1lbmbDvGhyZW4tTWVsZHVuZ2VuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDMKK21zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgorbXNnc3RyICJWZXJnbGVpY2hzc3RhdGlzdGlrIG5hY2ggWnVzYW1tZW5mw7xocmVuIGFuemVpZ2VuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDQKK21zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ2Cittc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKK21zZ3N0ciAiQXVmIERhdGVpw6RuZGVydW5nc2RhdHVtIHZlcmxhc3NlbiIKKworIzogbGliL29wdGlvbi50Y2w6MTQ3Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICLDnGJlcm5haG1lendlaWdlIGF1ZnLDpHVtZW4gd8OkaHJlbmQgQW5mb3JkZXJ1bmciCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICJQYXNzZW5kIHp1IMOcYmVybmFobWV6d2VpZyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ5Cittc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCittc2dzdHIgIktvcGllLUFubm90aWVyZW4gbnVyIGJlaSBnZcOkbmRlcnRlbiBEYXRlaWVuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAiTWluZGVzdHphaGwgWmVpY2hlbiBmw7xyIEtvcGllLUFubm90aWVyZW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MQorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICJBbnphaGwgVGFnZSBmw7xyIEhpc3Rvcmllbi1Lb250ZXh0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTIKK21zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgorbXNnc3RyICJBbnphaGwgZGVyIEtvbnRleHR6ZWlsZW4gYmVpbSBWZXJnbGVpY2giCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MworbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCittc2dzdHIgIlRleHRicmVpdGUgZGVyIFZlcnNpb25zYmVzY2hyZWlidW5nIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTQKK21zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCittc2dzdHIgIk5hbWVuc3ZvcnNjaGxhZyBmw7xyIG5ldWUgWndlaWdlIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTUKK21zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCittc2dzdHIgIlZvcmVpbmdlc3RlbGx0ZSBaZWljaGVua29kaWVydW5nIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMDMKK21zZ2lkICJDaGFuZ2UiCittc2dzdHIgIsOEbmRlcm4iCisKKyM6IGxpYi9vcHRpb24udGNsOjIzMAorbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgorbXNnc3RyICJXw7ZydGVyYnVjaCBSZWNodHNjaHJlaWJwcsO8ZnVuZzoiCisKKyM6IGxpYi9vcHRpb24udGNsOjI1NAorbXNnaWQgIkNoYW5nZSBGb250IgorbXNnc3RyICJTY2hyaWZ0YXJ0IMOkbmRlcm4iCisKKyM6IGxpYi9vcHRpb24udGNsOjI1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNob29zZSAlcyIKK21zZ3N0ciAiJXMgd8OkaGxlbiIKKworIzogbGliL29wdGlvbi50Y2w6MjY0Cittc2dpZCAicHQuIgorbXNnc3RyICJwdC4iCisKKyM6IGxpYi9vcHRpb24udGNsOjI3OAorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICJFaW5zdGVsbHVuZ2VuIgorCisjOiBsaWIvb3B0aW9uLnRjbDozMTQKK21zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgorbXNnc3RyICJPcHRpb25lbiBrb25udGVuIG5pY2h0IGdlc3BlaWNoZXJ0IHdlcmRlbjoiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxOQorbXNnaWQgIkFkZCBSZW1vdGUiCittc2dzdHIgIkV4dGVybmVzIEFyY2hpdiBoaW56dWbDvGdlbiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI0Cittc2dpZCAiQWRkIE5ldyBSZW1vdGUiCittc2dzdHIgIk5ldWVzIGV4dGVybmVzIEFyY2hpdiBoaW56dWbDvGdlbiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI4IGxpYi90b29sc19kbGcudGNsOjM2Cittc2dpZCAiQWRkIgorbXNnc3RyICJIaW56dWbDvGdlbiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjM3Cittc2dpZCAiUmVtb3RlIERldGFpbHMiCittc2dzdHIgIkVpbnplbGhlaXRlbiBkZXMgZXh0ZXJuZW4gQXJjaGl2cyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCittc2dpZCAiTG9jYXRpb246IgorbXNnc3RyICJBZHJlc3NlOiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjYyCittc2dpZCAiRnVydGhlciBBY3Rpb24iCittc2dzdHIgIldlaXRlcmUgQWt0aW9uIGpldHp0IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiR2xlaWNoIGFuZm9yZGVybiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjcxCittc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKK21zZ3N0ciAiRXh0ZXJuZXMgQXJjaGl2IGluaXRpYWxpc2llcmVuIHVuZCBkYWhpbiB2ZXJzZW5kZW4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NworbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCittc2dzdHIgIk5pY2h0cyB0dW4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDEKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgorbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gTmFtZW4gZGVzIGV4dGVybmVuIEFyY2hpdnMgYW4uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCittc2dzdHIgIsK7JXPCqyBpc3Qga2VpbiB6dWzDpHNzaWdlciBOYW1lIGVpbmVzIGV4dGVybmVuIEFyY2hpdnMuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSGluenVmw7xnZW4gZGVzIGV4dGVybmVuIEFyY2hpdnMgwrslc8KrIGF1cyBIZXJrdW5mdHNvcnQgwrslc8KrLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMyBsaWIvdHJhbnNwb3J0LnRjbDo2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmV0Y2ggJXMiCittc2dzdHIgIsK7JXPCqyBhbmZvcmRlcm4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyB0aGUgJXMiCittc2dzdHIgIsK7JXPCqyBhbmZvcmRlcm4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICJJbml0aWFsaXNpZXJlbiBlaW5lcyBleHRlcm5lbiBBcmNoaXZzIGFuIEFkcmVzc2Ugwrslc8KrIGlzdCBuaWNodCBtw7ZnbGljaC4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NjMKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicHVzaCAlcyIKK21zZ3N0ciAiwrslc8KrIHZlcnNlbmRlbi4uLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCittc2dzdHIgIkVpbnJpY2h0ZW4gdm9uIMK7JXPCqyBhbiDCuyVzwqsiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozNAorbXNnaWQgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCittc2dzdHIgIlp3ZWlnIGluIGV4dGVybmVtIEFyY2hpdiBsw7ZzY2hlbiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0NworbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKK21zZ3N0ciAiSW4gUHJvamVrdGFyY2hpdiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICJFeHRlcm5lcyBBcmNoaXY6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQorbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCittc2dzdHIgIkFkcmVzc2U6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Cittc2dpZCAiQnJhbmNoZXMiCittc2dzdHIgIlp3ZWlnZSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiTnVyIGzDtnNjaGVuLCB3ZW5uIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAiWnVzYW1tZW5nZWbDvGhydCBtaXQ6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgorbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKK21zZ3N0ciAiRsO8ciDCu1p1c2FtbWVuZsO8aHJlbiBtaXTCqyBtdXNzIGVpbiBad2VpZyBhbmdlZ2ViZW4gd2VyZGVuLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCittc2dzdHIgIiIKKyJGb2xnZW5kZSBad2VpZ2Ugc2luZCBub2NoIG5pY2h0IG1pdCDCuyVzwqsgenVzYW1tZW5nZWbDvGhydDpcbiIKKyJcbiIKKyIgLSAlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCisibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCittc2dzdHIgIiIKKyJFaW4gb2RlciBtZWhyZXJlIFp1c2FtbWVuZsO8aHJ1bmdlbiBzaW5kIGZlaGxnZXNjaGxhZ2VuLCBkYSBTaWUgbmljaHQgZGllICIKKyJub3R3ZW5kaWdlbiBWZXJzaW9uZW4gdm9yaGVyIGFuZ2Vmb3JkZXJ0IGhhYmVuLiAgU2llIHNvbGx0ZW4gdmVyc3VjaGVuLCAiCisienVlcnN0IHZvbiDCuyVzwqsgYW56dWZvcmRlcm4uIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNworbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKK21zZ3N0ciAiQml0dGUgd8OkaGxlbiBTaWUgbWluZGVzdGVucyBlaW5lbiBad2VpZywgZGVyIGdlbMO2c2NodCB3ZXJkZW4gc29sbC4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAiWndlaWdlIGF1ZiDCuyVzwqsgd2VyZGVuIGdlbMO2c2NodCIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTIKK21zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKK21zZ3N0ciAiS2VpbiBQcm9qZWt0YXJjaGl2IGF1c2dld8OkaGx0LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAiwrslc8KrIGxhZGVuLi4uIgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjMKK21zZ2lkICJSZW1vdmUgUmVtb3RlIgorbXNnc3RyICJFeHRlcm5lcyBBcmNoaXYgZW50ZmVybmVuIgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjgKK21zZ2lkICJQcnVuZSBmcm9tIgorbXNnc3RyICJBdWZyw6R1bWVuIHZvbiIKKworIzogbGliL3JlbW90ZS50Y2w6MTczCittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAiQW5mb3JkZXJuIHZvbiIKKworIzogbGliL3JlbW90ZS50Y2w6MjE1Cittc2dpZCAiUHVzaCB0byIKK21zZ3N0ciAiVmVyc2VuZGVuIG5hY2giCisKKyM6IGxpYi9zZWFyY2gudGNsOjIxCittc2dpZCAiRmluZDoiCittc2dzdHIgIlN1Y2hlbjoiCisKKyM6IGxpYi9zZWFyY2gudGNsOjIzCittc2dpZCAiTmV4dCIKK21zZ3N0ciAiTsOkY2hzdGVyIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNAorbXNnaWQgIlByZXYiCittc2dzdHIgIlZvcmlnZXIiCisKKyM6IGxpYi9zZWFyY2gudGNsOjI1Cittc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCittc2dzdHIgIkdyb8OfLS9LbGVpbnNjaHJlaWJ1bmcgdW50ZXJzY2hlaWRlbiIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlciBWZXJrbsO8cGZ1bmc6IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjEzNworbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlcyBJY29uczoiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NworbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIG5pY2h0IHVudGVyc3TDvHR6dCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Cittc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCittc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nIG5pY2h0IHZlcmbDvGdiYXIiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiVW5iZW51dHpiYXJlIEtvbmZpZ3VyYXRpb24gZGVyIFJlY2h0c2NocmVpYnByw7xmdW5nIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCittc2dzdHIgIlfDtnJ0ZXJidWNoIGF1ZiAlcyB6dXLDvGNrZ2VzZXR6dC4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIG1pdCBGZWhsZXIgYWJnZWJyb2NoZW4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAorbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJVbmJla2FubnRlcyBSZWNodHNjaHJlaWJwcsO8ZnVuZ3Nwcm9ncmFtbSIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgorbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgorbXNnc3RyICJLZWluZSBWb3JzY2hsw6RnZSIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAorbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiVW5lcndhcnRldGVzIEVPRiB2b20gUmVjaHRzY2hyZWlicHLDvGZ1bmdzcHJvZ3JhbW0iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmcgZmVobGdlc2NobGFnZW4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjMxCittc2dpZCAiTm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIktlaW5lIFNjaGzDvHNzZWwgZ2VmdW5kZW4uIgorCisjOiBsaWIvc3Noa2V5LnRjbDozNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCittc2dzdHIgIsOWZmZlbnRsaWNoZXIgU2NobMO8c3NlbCBnZWZ1bmRlbiBpbjogJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjQwCittc2dpZCAiR2VuZXJhdGUgS2V5IgorbXNnc3RyICJTY2hsw7xzc2VsIGVyemV1Z2VuIgorCisjOiBsaWIvc3Noa2V5LnRjbDo1NgorbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgorbXNnc3RyICJJbiBad2lzY2hlbmFibGFnZSBrb3BpZXJlbiIKKworIzogbGliL3NzaGtleS50Y2w6NzAKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiSWhyIE9wZW5TU0ggw7ZmZmVubGljaGVyIFNjaGzDvHNzZWwiCisKKyM6IGxpYi9zc2hrZXkudGNsOjc4Cittc2dpZCAiR2VuZXJhdGluZy4uLiIKK21zZ3N0ciAiRXJ6ZXVnZW4uLi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiS29ubnRlIMK7c3NoLWtleWdlbsKrIG5pY2h0IHN0YXJ0ZW46XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjExMQorbXNnaWQgIkdlbmVyYXRpb24gZmFpbGVkLiIKK21zZ3N0ciAiU2NobMO8c3NlbGVyemV1Z3VuZyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjExOAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIlNjaGzDvHNzZWxlcnpldWd1bmcgZXJmb2xncmVpY2gsIGFiZXIga2VpbmUgU2NobMO8c3NlbCBnZWZ1bmRlbi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjEyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKK21zZ3N0ciAiSWhyIFNjaGzDvHNzZWwgaXN0IGFiZ2VsZWd0IGluOiAlcyIKKworIzogbGliL3N0YXR1c19iYXIudGNsOjgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKK21zZ3N0ciAiJXMgLi4uICUqaSB2b24gJSppICVzICglM2klJSkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIyCittc2dpZCAiQWRkIFRvb2wiCittc2dzdHIgIldlcmt6ZXVnIGhpbnp1ZsO8Z2VuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAorbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgorbXNnc3RyICJOZXVlcyBLb21tYW5kbyBmw7xyIFdlcmt6ZXVnIGhpbnp1ZsO8Z2VuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMworbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAiR2xvYmFsIGhpbnp1ZsO8Z2VuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NQorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAiRWluemVsaGVpdGVuIGRlcyBXZXJremV1Z3MiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjQ4Cittc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCittc2dzdHIgIkJlbnV0emVuIFNpZSBlaW5lbiBTY2hyw6Rnc3RyaWNoIMK7L8KrLCB1bSBVbnRlcm1lbsO8cyB6dSBlcnN0ZWxsZW46IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo2MQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJLb21tYW5kbzoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjc0Cittc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKK21zZ3N0ciAiQmVzdMOkdGlndW5nc2ZyYWdlIHZvciBTdGFydGVuIGFuemVpZ2VuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4MAorbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgorbXNnc3RyICJCZW51dHplciBuYWNoIFZlcnNpb24gZnJhZ2VuIChzZXR6dCAkUkVWSVNJT04pIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4NQorbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgorbXNnc3RyICJCZW51dHplciBuYWNoIHp1c8OkdHpsaWNoZW4gQXJndW1lbnRlbiBmcmFnZW4gKHNldHp0ICRBUkdTKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKK21zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCittc2dzdHIgIktlaW4gQXVzZ2FiZWZlbnN0ZXIgemVpZ2VuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo5NworbXNnaWQgIlJ1biBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCAoJEZJTEVOQU1FIG5vdCBlbXB0eSkiCittc2dzdHIgIk51ciBzdGFydGVuLCB3ZW5uIGVpbiBWZXJnbGVpY2ggZ2V3w6RobHQgaXN0ICgkRklMRU5BTUUgaXN0IG5pY2h0IGxlZXIpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjEKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgorbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gV2Vya3pldWduYW1lbiBhbi4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIldlcmt6ZXVnIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCisiJXMiCittc2dzdHIgIiIKKyJXZXJremV1ZyBrb25udGUgbmljaHQgaGluenVnZWbDvGd0IHdlcmRlbjpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTkwCittc2dpZCAiUmVtb3ZlIFRvb2wiCittc2dzdHIgIldlcmt6ZXVnIGVudGZlcm5lbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk2Cittc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCittc2dzdHIgIldlcmt6ZXVna29tbWFuZG9zIGVudGZlcm5lbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjAwCittc2dpZCAiUmVtb3ZlIgorbXNnc3RyICJFbnRmZXJuZW4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIzNgorbXNnaWQgIihCbHVlIGRlbm90ZXMgcmVwb3NpdG9yeS1sb2NhbCB0b29scykiCittc2dzdHIgIihXZXJremV1Z2UgZsO8ciBsb2thbGVzIEFyY2hpdiB3ZXJkZW4gaW4gQmxhdSBhbmdlemVpZ3QpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW4gQ29tbWFuZDogJXMiCittc2dzdHIgIktvbW1hbmRvIGF1ZnJ1ZmVuOiAlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzExCittc2dpZCAiQXJndW1lbnRzIgorbXNnc3RyICJBcmd1bWVudGUiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjM0OAorbXNnaWQgIk9LIgorbXNnc3RyICJPayIKKworIzogbGliL3Rvb2xzLnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKK21zZ3N0ciAiVW0gwrslc8KrIHp1IHN0YXJ0ZW4sIG11c3MgZWluZSBEYXRlaSBhdXNnZXfDpGhsdCBzZWluLiIKKworIzogbGliL3Rvb2xzLnRjbDo5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgorbXNnc3RyICJXb2xsZW4gU2llICVzIHdpcmtsaWNoIHN0YXJ0ZW4/IgorCisjOiBsaWIvdG9vbHMudGNsOjExMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2w6ICVzIgorbXNnc3RyICJXZXJremV1ZzogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVubmluZzogJXMiCittc2dzdHIgIlN0YXJ0ZW46ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCittc2dzdHIgIldlcmt6ZXVnIGVyZm9sZ3JlaWNoIGFiZ2VzY2hsb3NzZW46ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKK21zZ3N0ciAiV2Vya3pldWcgZmVobGdlc2NobGFnZW46ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKK21zZ3N0ciAiTmV1ZSDDhG5kZXJ1bmdlbiB2b24gwrslc8KrIGhvbGVuIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAorIywgdGNsLWZvcm1hdAorbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKK21zZ3N0ciAiQXVmcsOkdW1lbiB2b24gwrslc8KrIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgorbXNnc3RyICLDnGJlcm5haG1lendlaWdlIGF1ZnLDpHVtZW4gdW5kIGVudGZlcm5lbiwgZGllIGluIMK7JXPCqyBnZWzDtnNjaHQgd3VyZGVuIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAiw4RuZGVydW5nZW4gbmFjaCDCuyVzwqsgdmVyc2VuZGVuIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKK21zZ3N0ciAiU3BpZWdlbG4gbmFjaCAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6ODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgorbXNnc3RyICIlcyAlcyBuYWNoICVzIHZlcnNlbmRlbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCittc2dpZCAiUHVzaCBCcmFuY2hlcyIKK21zZ3N0ciAiWndlaWdlIHZlcnNlbmRlbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTE0Cittc2dpZCAiU291cmNlIEJyYW5jaGVzIgorbXNnc3RyICJMb2thbGUgWndlaWdlIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzEKK21zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgorbXNnc3RyICJaaWVsLVByb2pla3RhcmNoaXYiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2OQorbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCittc2dzdHIgIk5ldHp3ZXJrLUVpbnN0ZWxsdW5nZW4iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3MQorbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorbXNnc3RyICIiCisiw5xiZXJzY2hyZWliZW4gdm9uIGV4aXN0aWVyZW5kZW4gWndlaWdlbiBlcnp3aW5nZW4gKGvDtm5udGUgw4RuZGVydW5nZW4gbMO2c2NoZW4pIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzUKK21zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKK21zZ3N0ciAiS29tcGFrdGVzIERhdGVuZm9ybWF0IGJlbnV0emVuIChmw7xyIGxhbmdzYW1lIE5ldHp2ZXJiaW5kdW5nZW4pIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzkKK21zZ2lkICJJbmNsdWRlIHRhZ3MiCittc2dzdHIgIk1pdCBNYXJraWVydW5nZW4gw7xiZXJ0cmFnZW4iCmRpZmYgLS1naXQgYS9wby9lbC5wbyBiL2dpdC1ndWkvcG8vZWwucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2VsLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2VsLnBvCmRpZmYgLS1naXQgYS9wby9mci5wbyBiL2dpdC1ndWkvcG8vZnIucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2ZyLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2ZyLnBvCmRpZmYgLS1naXQgYS9wby9naXQtZ3VpLnBvdCBiL2dpdC1ndWkvcG8vZ2l0LWd1aS5wb3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dpdC1ndWkucG90CnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dpdC1ndWkucG90CmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9NYWtlZmlsZSBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L01ha2VmaWxlCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L01ha2VmaWxlCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9kZS5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZGUucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2RlLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2RlLnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9lbC5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZWwucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2VsLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2VsLnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9mci5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZnIucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2ZyLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2ZyLnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9naXQtZ3VpLWdsb3NzYXJ5LnBvdCBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZ2l0LWd1aS1nbG9zc2FyeS5wb3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkucG90CnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkucG90CmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9naXQtZ3VpLWdsb3NzYXJ5LnR4dCBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZ2l0LWd1aS1nbG9zc2FyeS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkudHh0CnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkudHh0CmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9pdC5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvaXQucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2l0LnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2l0LnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9wdF9ici5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvcHRfYnIucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L3B0X2JyLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L3B0X2JyLnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS90eHQtdG8tcG90LnNoIGIvZ2l0LWd1aS9wby9nbG9zc2FyeS90eHQtdG8tcG90LnNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwby9nbG9zc2FyeS90eHQtdG8tcG90LnNoCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L3R4dC10by1wb3Quc2gKZGlmZiAtLWdpdCBhL3BvL2dsb3NzYXJ5L3poX2NuLnBvIGIvZ2l0LWd1aS9wby9nbG9zc2FyeS96aF9jbi5wbwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcG8vZ2xvc3NhcnkvemhfY24ucG8KcmVuYW1lIHRvIGdpdC1ndWkvcG8vZ2xvc3NhcnkvemhfY24ucG8KZGlmZiAtLWdpdCBhL3BvL2h1LnBvIGIvZ2l0LWd1aS9wby9odS5wbwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcG8vaHUucG8KcmVuYW1lIHRvIGdpdC1ndWkvcG8vaHUucG8KZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vaXQucG8gYi9naXQtZ3VpL3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZDhiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL2l0LnBvCkBAIC0wLDAgKzEsMjU5MSBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHRvIEl0YWxpYW4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgorIyBQYW9sbyBDaWFycm9jY2hpIDxwYW9sby5jaWFycm9jY2hpQGdtYWlsLmNvbT4sIDIwMDcKKyMgTWljaGVsZSBCYWxsYWJpbyA8YmFycmFfY3VkYUBrYXRhbWFpbC5jb20+LCAyMDA3LgorIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMS0yOCAxMDowNCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuIDx0cEBsaXN0cy5saW51eC5pdD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjc5MyBnaXQtZ3VpLnNoOjgwNyBnaXQtZ3VpLnNoOjgyMCBnaXQtZ3VpLnNoOjkwMworIzogZ2l0LWd1aS5zaDo5MjIKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTogZXJyb3JlIGdyYXZlIgorCisjOiBnaXQtZ3VpLnNoOjc0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgorbXNnc3RyICJDYXJhdHRlcmkgbm9uIHZhbGlkaSBzcGVjaWZpY2F0aSBpbiAlczoiCisKKyM6IGdpdC1ndWkuc2g6Nzc5Cittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJDYXJhdHRlcmkgcHJpbmNpcGFsaSIKKworIzogZ2l0LWd1aS5zaDo3ODAKK21zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKK21zZ3N0ciAiQ2FyYXR0ZXJpIHBlciBjb25mcm9udGkgZSB0ZXJtaW5hbGUiCisKKyM6IGdpdC1ndWkuc2g6Nzk0Cittc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGdpdCBuZWwgUEFUSCIKKworIzogZ2l0LWd1aS5zaDo4MjEKK21zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZGV0ZXJtaW5hcmUgbGEgdmVyc2lvbmUgZGkgR2l0OiIKKworIzogZ2l0LWd1aS5zaDo4MzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCisiXG4iCisiJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKKyJcbiIKKyIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCisiXG4iCisiQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKK21zZ3N0ciAiIgorIkxhIHZlcnNpb25lIGRpIEdpdCBub24gcHXDsiBlc3NlcmUgZGV0ZXJtaW5hdGEuXG4iCisiXG4iCisiJXMgcmlwb3J0YSBjaGUgbGEgdmVyc2lvbmUgw6ggJyVzJy5cbiIKKyJcbiIKKyIlcyByaWNoaWVkZSBhbG1lbm8gR2l0IDEuNS4wIG8gc3VwZXJpb3JlLlxuIgorIlxuIgorIkFzc3VtZXJlIGNoZSAnJXMnIHNpYSBhbGxhIHZlcnNpb25lIDEuNS4wP1xuIgorCisjOiBnaXQtZ3VpLnNoOjExMjgKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgIk5vbiB0cm92byBsYSBkaXJlY3RvcnkgZGkgZ2l0OiAiCisKKyM6IGdpdC1ndWkuc2g6MTE0NgorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIkltcG9zc2liaWxlIHNwb3N0YXJzaSBzdWxsYSBkaXJlY3RvcnkgcHJpbmNpcGFsZSBkZWwgcHJvZ2V0dG86IgorCisjOiBnaXQtZ3VpLnNoOjExNTQKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIkltcG9zc2liaWxlIHVzYXJlIHVuIGFyY2hpdmlvIHNlbnphIGRpcmVjdG9yeSBkaSBsYXZvcm86IgorCisjOiBnaXQtZ3VpLnNoOjExNjIKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiTmVzc3VuYSBkaXJlY3RvcnkgZGkgbGF2b3JvIgorCisjOiBnaXQtZ3VpLnNoOjEzMzQgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKK21zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgorbXNnc3RyICJDb250cm9sbG8gZGVsbG8gc3RhdG8gZGVpIGZpbGUgaW4gY29yc28uLi4iCisKKyM6IGdpdC1ndWkuc2g6MTM5MAorbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgIlJpY2VyY2EgZGkgZmlsZSBtb2RpZmljYXRpIGluIGNvcnNvLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE0NTQKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICJBdnZpbyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKKworIzogZ2l0LWd1aS5zaDoxNDcxCittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiUmV2aXNpb25lIHJpZml1dGF0YSBkYWwgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgorCisjOiBnaXQtZ3VpLnNoOjE2MjkgbGliL2Jyb3dzZXIudGNsOjI0NgorbXNnaWQgIlJlYWR5LiIKK21zZ3N0ciAiUHJvbnRvLiIKKworIzogZ2l0LWd1aS5zaDoxNzg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKK21zZ3N0ciAiU2FyYW5ubyBtb3N0cmF0aSBzb2xvICVzIGZpbGUgc3UgJXMuIgorCisjOiBnaXQtZ3VpLnNoOjE5MTMKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICJOb24gbW9kaWZpY2F0byIKKworIzogZ2l0LWd1aS5zaDoxOTE1Cittc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIk1vZGlmaWNhdG8sIG5vbiBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAiUHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIlBhcnRpIHByZXBhcmF0ZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICJQcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUsIG1hbmNhbnRlIgorCisjOiBnaXQtZ3VpLnNoOjE5MjAKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiVGlwbyBkaSBmaWxlIG1vZGlmaWNhdG8sIG5vbiBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MTkyMQorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCittc2dzdHIgIlRpcG8gZGkgZmlsZSBtb2RpZmljYXRvLCBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MTkyMworbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiTm9uIHRyYWNjaWF0bywgbm9uIHByZXBhcmF0byBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoxOTI4Cittc2dpZCAiTWlzc2luZyIKK21zZ3N0ciAiTWFuY2FudGUiCisKKyM6IGdpdC1ndWkuc2g6MTkyOQorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAiUHJlcGFyYXRvIHBlciBsYSByaW1vemlvbmUiCisKKyM6IGdpdC1ndWkuc2g6MTkzMAorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiUHJlcGFyYXRvIGFsbGEgcmltb3ppb25lLCBhbmNvcmEgcHJlc2VudGUiCisKKyM6IGdpdC1ndWkuc2g6MTkzMiBnaXQtZ3VpLnNoOjE5MzMgZ2l0LWd1aS5zaDoxOTM0IGdpdC1ndWkuc2g6MTkzNQorIzogZ2l0LWd1aS5zaDoxOTM2IGdpdC1ndWkuc2g6MTkzNworbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIlJpY2hpZWRlIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkiCisKKyM6IGdpdC1ndWkuc2g6MTk3MgorbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIkF2dmlvIGRpIGdpdGsuLi4gYXR0ZW5kZXJlLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE5ODQKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBnaXRrIG5lbCBQQVRIIgorCisjOiBnaXQtZ3VpLnNoOjIwNDMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBnaXQgZ3VpIG5lbCBQQVRIIgorCisjOiBnaXQtZ3VpLnNoOjI0NTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgorbXNnaWQgIlJlcG9zaXRvcnkiCittc2dzdHIgIkFyY2hpdmlvIgorCisjOiBnaXQtZ3VpLnNoOjI0NTYKK21zZ2lkICJFZGl0IgorbXNnc3RyICJNb2RpZmljYSIKKworIzogZ2l0LWd1aS5zaDoyNDU4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlJhbW8iCisKKyM6IGdpdC1ndWkuc2g6MjQ2MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4Cittc2dpZCAiQ29tbWl0QEBub3VuIgorbXNnc3RyICJSZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MjQ2NCBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAorbXNnaWQgIk1lcmdlIgorbXNnc3RyICJGdXNpb25lIChNZXJnZSkiCisKKyM6IGdpdC1ndWkuc2g6MjQ2NSBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3Cittc2dpZCAiUmVtb3RlIgorbXNnc3RyICJSZW1vdG8iCisKKyM6IGdpdC1ndWkuc2g6MjQ2OAorbXNnaWQgIlRvb2xzIgorbXNnc3RyICJBY2Nlc3NvcmkiCisKKyM6IGdpdC1ndWkuc2g6MjQ3NworbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgorbXNnc3RyICJFc3Bsb3JhIGNvcGlhIGRpIGxhdm9ybyIKKworIzogZ2l0LWd1aS5zaDoyNDgzCittc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCittc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRlbCByYW1vIGF0dHVhbGUiCisKKyM6IGdpdC1ndWkuc2g6MjQ4NworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRlbCByYW1vLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI0OTIKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGVsIHJhbW8gYXR0dWFsZSIKKworIzogZ2l0LWd1aS5zaDoyNDk2Cittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRpIHR1dHRpIGkgcmFtaSIKKworIzogZ2l0LWd1aS5zaDoyNTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCittc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRpICVzIgorCisjOiBnaXQtZ3VpLnNoOjI1MDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGkgJXMiCisKKyM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICJTdGF0aXN0aWNoZSBkZWxsJ2FyY2hpdmlvIgorCisjOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAorbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICJDb21wcmltaSBsJ2FyY2hpdmlvIgorCisjOiBnaXQtZ3VpLnNoOjI1MTYKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgIlZlcmlmaWNhIGwnYXJjaGl2aW8iCisKKyM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAiQ3JlYSBpY29uYSBkZXNrdG9wIgorCisjOiBnaXQtZ3VpLnNoOjI1MzkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKK21zZ2lkICJRdWl0IgorbXNnc3RyICJFc2NpIgorCisjOiBnaXQtZ3VpLnNoOjI1NDcKK21zZ2lkICJVbmRvIgorbXNnc3RyICJBbm51bGxhIgorCisjOiBnaXQtZ3VpLnNoOjI1NTAKK21zZ2lkICJSZWRvIgorbXNnc3RyICJSaXBldGkiCisKKyM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKK21zZ2lkICJDdXQiCittc2dzdHIgIlRhZ2xpYSIKKworIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5CisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICJDb3BpYSIKKworIzogZ2l0LWd1aS5zaDoyNTYwIGdpdC1ndWkuc2g6MzExNQorbXNnaWQgIlBhc3RlIgorbXNnc3RyICJJbmNvbGxhIgorCisjOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAiRWxpbWluYSIKKworIzogZ2l0LWd1aS5zaDoyNTY3IGdpdC1ndWkuc2g6MzEyMiBnaXQtZ3VpLnNoOjMyNjMgbGliL2NvbnNvbGUudGNsOjcxCittc2dpZCAiU2VsZWN0IEFsbCIKK21zZ3N0ciAiU2VsZXppb25hIHR1dHRvIgorCisjOiBnaXQtZ3VpLnNoOjI1NzYKK21zZ2lkICJDcmVhdGUuLi4iCittc2dzdHIgIkNyZWEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU4MgorbXNnaWQgIkNoZWNrb3V0Li4uIgorbXNnc3RyICJBdHRpdmEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU4OAorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAiUmlub21pbmEiCisKKyM6IGdpdC1ndWkuc2g6MjU5MworbXNnaWQgIkRlbGV0ZS4uLiIKK21zZ3N0ciAiRWxpbWluYS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTk4Cittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgIlJpcHJpc3RpbmEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjYwOAorbXNnaWQgIkRvbmUiCittc2dzdHIgIkZhdHRvIgorCisjOiBnaXQtZ3VpLnNoOjI2MTAKK21zZ2lkICJDb21taXRAQHZlcmIiCittc2dzdHIgIk51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoyNjE5IGdpdC1ndWkuc2g6MzA1MAorbXNnaWQgIk5ldyBDb21taXQiCittc2dzdHIgIk51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NworbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICJDb3JyZWdnaSBsJ3VsdGltYSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MjYzNyBnaXQtZ3VpLnNoOjMwMTEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQorbXNnaWQgIlJlc2NhbiIKK21zZ3N0ciAiQW5hbGl6emEgbnVvdmFtZW50ZSIKKworIzogZ2l0LWd1aS5zaDoyNjQzCittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICJQcmVwYXJhIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjI2NDkKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAiUHJlcGFyYSBpIGZpbGUgbW9kaWZpY2F0aSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUiCisKKyM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICJBbm51bGxhIG1vZGlmaWNoZSIKKworIzogZ2l0LWd1aS5zaDoyNjY5IGdpdC1ndWkuc2g6MzMxMCBnaXQtZ3VpLnNoOjMzNDEKK21zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKK21zZ3N0ciAiTW9zdHJhIG1lbm8gY29udGVzdG8iCisKKyM6IGdpdC1ndWkuc2g6MjY3MyBnaXQtZ3VpLnNoOjMzMTQgZ2l0LWd1aS5zaDozMzQ1Cittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgIk1vc3RyYSBwacO5IGNvbnRlc3RvIgorCisjOiBnaXQtZ3VpLnNoOjI2ODAgZ2l0LWd1aS5zaDozMDI0IGdpdC1ndWkuc2g6MzEzMworbXNnaWQgIlNpZ24gT2ZmIgorbXNnc3RyICJTaWduIE9mZiIKKworIzogZ2l0LWd1aS5zaDoyNjk2Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIkZ1c2lvbmUgbG9jYWxlLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MDEKK21zZ2lkICJBYm9ydCBNZXJnZS4uLiIKK21zZ3N0ciAiSW50ZXJyb21waSBmdXNpb25lLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MTMgZ2l0LWd1aS5zaDoyNzQxCittc2dpZCAiQWRkLi4uIgorbXNnc3RyICJBZ2dpdW5naS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzE3Cittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAiUHJvcGFnYS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzIxCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAiRWxpbWluYSByYW1vLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MzEgZ2l0LWd1aS5zaDozMjkyCittc2dpZCAiT3B0aW9ucy4uLiIKK21zZ3N0ciAiT3B6aW9uaS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzQyCittc2dpZCAiUmVtb3ZlLi4uIgorbXNnc3RyICJSaW11b3ZpLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAorbXNnaWQgIkhlbHAiCittc2dzdHIgIkFpdXRvIgorCisjOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3V0ICVzIgorbXNnc3RyICJJbmZvcm1hemlvbmkgc3UgJXMiCisKKyM6IGdpdC1ndWkuc2g6Mjc4MworbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgorbXNnc3RyICJEb2N1bWVudGF6aW9uZSBzdWwgd2ViIgorCisjOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Cittc2dpZCAiU2hvdyBTU0ggS2V5IgorbXNnc3RyICJNb3N0cmEgY2hhdmUgU1NIIgorCisjOiBnaXQtZ3VpLnNoOjI4OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImVycm9yZSBncmF2ZTogaW1wb3NzaWJpbGUgZWZmZXR0dWFyZSBsbyBzdGF0IGRlbCBwYXRoICVzOiBmaWxlIG8gZGlyZWN0b3J5ICIKKyJub24gdHJvdmF0YSIKKworIzogZ2l0LWd1aS5zaDoyOTI2Cittc2dpZCAiQ3VycmVudCBCcmFuY2g6IgorbXNnc3RyICJSYW1vIGF0dHVhbGU6IgorCisjOiBnaXQtZ3VpLnNoOjI5NDcKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICJNb2RpZmljaGUgcHJlcGFyYXRlIChzYXJhbm5vIG5lbGxhIG51b3ZhIHJldmlzaW9uZSkiCisKKyM6IGdpdC1ndWkuc2g6Mjk2NworbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCittc2dzdHIgIk1vZGlmaWNoZSBub24gcHJlcGFyYXRlIgorCisjOiBnaXQtZ3VpLnNoOjMwMTcKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIgorbXNnc3RyICJQcmVwYXJhIG1vZGlmaWNhdGkiCisKKyM6IGdpdC1ndWkuc2g6MzAzNiBsaWIvdHJhbnNwb3J0LnRjbDoxMDQgbGliL3RyYW5zcG9ydC50Y2w6MTkzCittc2dpZCAiUHVzaCIKK21zZ3N0ciAiUHJvcGFnYSAoUHVzaCkiCisKKyM6IGdpdC1ndWkuc2g6MzA3MQorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdnaW8gZGkgcmV2aXNpb25lIGluaXppYWxlOiIKKworIzogZ2l0LWd1aS5zaDozMDcyCittc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkaSByZXZpc2lvbmUgY29ycmV0dG86IgorCisjOiBnaXQtZ3VpLnNoOjMwNzMKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdnaW8gaW5pemlhbGUgZGkgcmV2aXNpb25lIGNvcnJldHRvOiIKKworIzogZ2l0LWd1aS5zaDozMDc0Cittc2dpZCAiQW1lbmRlZCBNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkaSBmdXNpb25lIGNvcnJldHRvOiIKKworIzogZ2l0LWd1aS5zaDozMDc1Cittc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdnaW8gZGkgZnVzaW9uZToiCisKKyM6IGdpdC1ndWkuc2g6MzA3NgorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTWVzc2FnZ2lvIGRpIHJldmlzaW9uZToiCisKKyM6IGdpdC1ndWkuc2g6MzEyNSBnaXQtZ3VpLnNoOjMyNjcgbGliL2NvbnNvbGUudGNsOjczCittc2dpZCAiQ29weSBBbGwiCittc2dzdHIgIkNvcGlhIHR1dHRvIgorCisjOiBnaXQtZ3VpLnNoOjMxNDkgbGliL2JsYW1lLnRjbDoxMDQKK21zZ2lkICJGaWxlOiIKK21zZ3N0ciAiRmlsZToiCisKKyM6IGdpdC1ndWkuc2g6MzI1NQorbXNnaWQgIlJlZnJlc2giCittc2dzdHIgIlJpbmZyZXNjYSIKKworIzogZ2l0LWd1aS5zaDozMjc2Cittc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICJEaW1pbnVpc2NpIGRpbWVuc2lvbmUgY2FyYXR0ZXJpIgorCisjOiBnaXQtZ3VpLnNoOjMyODAKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIkF1bWVudGEgZGltZW5zaW9uZSBjYXJhdHRlcmkiCisKKyM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICJDb2RpZmljYSIKKworIzogZ2l0LWd1aS5zaDozMjk5Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgorbXNnc3RyICJBcHBsaWNhL0ludmVydGkgc2V6aW9uZSIKKworIzogZ2l0LWd1aS5zaDozMzA0Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgorbXNnc3RyICJBcHBsaWNhL0ludmVydGkgcmlnYSIKKworIzogZ2l0LWd1aS5zaDozMzIzCittc2dpZCAiUnVuIE1lcmdlIFRvb2wiCittc2dzdHIgIkF2dmlhIHByb2dyYW1tYSBlc3Rlcm5vIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIgorCisjOiBnaXQtZ3VpLnNoOjMzMjgKK21zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCittc2dzdHIgIlVzYSB2ZXJzaW9uZSByZW1vdGEiCisKKyM6IGdpdC1ndWkuc2g6MzMzMgorbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICJVc2EgdmVyc2lvbmUgbG9jYWxlIgorCisjOiBnaXQtZ3VpLnNoOjMzMzYKK21zZ2lkICJSZXZlcnQgVG8gQmFzZSIKK21zZ3N0ciAiUml0b3JuYSBhbGxhIHJldmlzaW9uZSBjb211bmUiCisKKyM6IGdpdC1ndWkuc2g6MzM1NAorbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZpc3VhbGl6emEgcXVlc3RlIG1vZGlmaWNoZSBuZWwgc290dG9tb2R1bG8iCisKKyM6IGdpdC1ndWkuc2g6MzM1OAorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZpc3VhbGl6emEgbGEgY3Jvbm9sb2dpYSBkZWwgcmFtbyBhdHR1YWxlIG5lbCBzb3R0b21vZHVsbyIKKworIzogZ2l0LWd1aS5zaDozMzYyCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGkgdHV0dGkgaSByYW1pIG5lbCBzb3R0b21vZHVsbyIKKworIzogZ2l0LWd1aS5zaDozMzY3Cittc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJBdnZpYSBnaXQgZ3VpIG5lbCBzb3R0b21vZHVsbyIKKworIzogZ2l0LWd1aS5zaDozMzg5Cittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsYSBzZXppb25lIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjMzOTEKK21zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgorbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsZSBsaW5lZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDozMzkzCittc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgorbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsYSBsaW5lYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDozMzk2Cittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICJQcmVwYXJhIHNlemlvbmUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MzM5OAorbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCittc2dzdHIgIlByZXBhcmEgbGluZWUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MzQwMAorbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAiUHJlcGFyYSBsaW5lYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDozNDI0Cittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJJbml6aWFsaXp6YXppb25lLi4uIgorCisjOiBnaXQtZ3VpLnNoOjM1NDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisiUG9zc2liaWxpIHByb2JsZW1pIGNvbiBsZSB2YXJpYWJpbGkgZCdhbWJpZW50ZS5cbiIKKyJcbiIKKyJMZSBzZWd1ZW50aSB2YXJpYWJpbGkgZCdhbWJpZW50ZSBzYXJhbm5vIHByb2JhYmlsbWVudGVcbiIKKyJpZ25vcmF0ZSBkYSB0dXR0aSBpIHNvdHRvcHJvY2Vzc2kgZGkgR2l0IGF2dmlhdGlcbiIKKyJkYSAlczpcbiIKKyJcbiIKKworIzogZ2l0LWd1aS5zaDozNTcwCittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJDacOyIMOoIGRvdnV0byBhIHVuIHByb2JsZW1hIGNvbm9zY2l1dG9cbiIKKyJjYXVzYXRvIGRhbGwnZXNlZ3VpYmlsZSBUY2wgZGlzdHJpYnVpdG8gZGEgQ3lnd2luLiIKKworIzogZ2l0LWd1aS5zaDozNTc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkEgZ29vZCByZXBsYWNlbWVudCBmb3IgJXNcbiIKKyJpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmRcbiIKKyJ1c2VyLmVtYWlsIHNldHRpbmdzIGludG8geW91ciBwZXJzb25hbFxuIgorIn4vLmdpdGNvbmZpZyBmaWxlLlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiVW5hIGJ1b25hIGFsdGVybmF0aXZhIGEgJXNcbiIKKyJjb25zaXN0ZSBuZWxsJ2Fzc2VnbmFyZSB2YWxvcmkgYWxsZSB2YXJpYWJpbGkgZGkgY29uZmlndXJhemlvbmVcbiIKKyJ1c2VyLm5hbWUgZSB1c2VyLmVtYWlsIG5lbCB0dW8gZmlsZSB+Ly5naXRjb25maWcgcGVyc29uYWxlLlxuIgorCisjOiBsaWIvYWJvdXQudGNsOjI2Cittc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgorbXNnc3RyICJnaXQtZ3VpIC0gdW4naW50ZXJmYWNjaWEgZ3JhZmljYSBwZXIgR2l0LiIKKworIzogbGliL2JsYW1lLnRjbDo3MgorbXNnaWQgIkZpbGUgVmlld2VyIgorbXNnc3RyICJNb3N0cmEgZmlsZSIKKworIzogbGliL2JsYW1lLnRjbDo3OAorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIlJldmlzaW9uZToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjcxCittc2dpZCAiQ29weSBDb21taXQiCittc2dzdHIgIkNvcGlhIHJldmlzaW9uZSIKKworIzogbGliL2JsYW1lLnRjbDoyNzUKK21zZ2lkICJGaW5kIFRleHQuLi4iCittc2dzdHIgIlRyb3ZhIHRlc3RvLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjI4NAorbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCittc2dzdHIgIlJpY2VyY2EgYWNjdXJhdGEgZGVsbGUgY29waWUiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg4Cittc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCittc2dzdHIgIk1vc3RyYSBjb250ZXN0byBuZWxsYSBjcm9ub2xvZ2lhIgorCisjOiBsaWIvYmxhbWUudGNsOjI5MQorbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCittc2dzdHIgIkFubm90YSBsYSByZXZpc2lvbmUgcHJlY2VkZW50ZSIKKworIzogbGliL2JsYW1lLnRjbDo0NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZWFkaW5nICVzLi4uIgorbXNnc3RyICJMZXR0dXJhIGRpICVzLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjU1NworbXNnaWQgIkxvYWRpbmcgY29weS9tb3ZlIHRyYWNraW5nIGFubm90YXRpb25zLi4uIgorbXNnc3RyICJDYXJpY2FtZW50byBhbm5vdGF6aW9uaSBwZXIgY29waWUvc3Bvc3RhbWVudGkuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTc3Cittc2dpZCAibGluZXMgYW5ub3RhdGVkIgorbXNnc3RyICJsaW5lZSBhbm5vdGF0ZSIKKworIzogbGliL2JsYW1lLnRjbDo3NjkKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICJDYXJpY2FtZW50byBhbm5vdGF6aW9uaSBwZXIgcG9zaXppb25lIG9yaWdpbmFyaWEuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzcyCittc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCittc2dzdHIgIkFubm90YXppb25lIGNvbXBsZXRhdGEuIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMgorbXNnaWQgIkJ1c3kiCittc2dzdHIgIk9jY3VwYXRvIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMworbXNnaWQgIkFubm90YXRpb24gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuIgorbXNnc3RyICJJbCBwcm9jZXNzbyBkaSBhbm5vdGF6aW9uZSDDqCBnacOgIGluIGNvcnNvLiIKKworIzogbGliL2JsYW1lLnRjbDo4NDIKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICJSaWNlcmNhIGFjY3VyYXRhIGRlbGxlIGNvcGllIGluIGNvcnNvLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjkxMAorbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAiQ2FyaWNhbWVudG8gYW5ub3RhemlvbmkuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6OTYzCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0b3JlOiIKKworIzogbGliL2JsYW1lLnRjbDo5NjcKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJSZXZpc2lvbmUgY3JlYXRhIGRhOiIKKworIzogbGliL2JsYW1lLnRjbDo5NzIKK21zZ2lkICJPcmlnaW5hbCBGaWxlOiIKK21zZ3N0ciAiRmlsZSBvcmlnaW5hcmlvOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDIwCittc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGxhIHJldmlzaW9uZSBIRUFEOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDc1Cittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgbGEgcmV2aXNpb25lIHByZWNlZGVudGU6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTAKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCittc2dzdHIgIkltcG9zc2liaWxlIHZpc3VhbGl6emFyZSBsYSByZXZpc2lvbmUgcHJlY2VkZW50ZSIKKworIzogbGliL2JsYW1lLnRjbDoxMDkxIGxpYi9kaWZmLnRjbDozMjAKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICJFcnJvcmUgbmVsIGNhcmljYW1lbnRvIGRlbGxlIGRpZmZlcmVuemU6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzEKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAiSW4gb3JpZ2luZSBkYToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTIzNworbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICJOZWwgZmlsZToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MgorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAiQ29waWF0byBvIHNwb3N0YXRvIHF1aSBkYToiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Cittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICJBdHRpdmEgcmFtbyIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiQXR0aXZhIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgorIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFubnVsbGEiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcgbGliL3Rvb2xzX2RsZy50Y2w6MzI4Cittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIlJldmlzaW9uZSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI4MAorbXNnaWQgIk9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiUmVjdXBlcmEgZHVwbGljYXRvIGxvY2FsZSBkaSByYW1vIHJlbW90byIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDQKK21zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCittc2dzdHIgIlN0YWNjYSBkYSByYW1vIGxvY2FsZSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIyCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAiQ3JlYSByYW1vIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiQ3JlYSBudW92byByYW1vIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWEiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MAorbXNnaWQgIkJyYW5jaCBOYW1lIgorbXNnc3RyICJOb21lIGRlbCByYW1vIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbWU6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKK21zZ3N0ciAiQXBwYWlhIG5vbWUgZGVsIGR1cGxpY2F0byBsb2NhbGUgZGkgcmFtbyByZW1vdG8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgorbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgorbXNnc3RyICJSZXZpc2lvbmUgaW5pemlhbGUiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICJBZ2dpb3JuYSByYW1vIGVzaXN0ZW50ZToiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorbXNnaWQgIk5vIgorbXNnc3RyICJObyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCittc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCittc2dzdHIgIlNvbG8gZmFzdCBmb3J3YXJkIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAiUmlwcmlzdGluYSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIkF0dGl2YSBkb3BvIGxhIGNyZWF6aW9uZSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgorbXNnc3RyICJTY2VnbGllcmUgdW4gZHVwbGljYXRvIGxvY2FsZSBkaSByYW1vIHJlbW90byIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiIgorIklsIGR1cGxpY2F0byBsb2NhbGUgZGVsIHJhbW8gcmVtb3RvICVzIG5vbiDDqCB1biByYW1vIG5lbGwnYXJjaGl2aW8gcmVtb3RvLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1MyBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODYKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgorbXNnc3RyICJJbnNlcmlyZSB1biBub21lIHBlciBpbCByYW1vLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycgbm9uIMOoIHV0aWxpenphYmlsZSBjb21lIG5vbWUgZGkgcmFtby4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNQorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIkVsaW1pbmEgcmFtbyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIwCittc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiRWxpbWluYSByYW1vIGxvY2FsZSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Cittc2dpZCAiTG9jYWwgQnJhbmNoZXMiCittc2dzdHIgIlJhbWkgbG9jYWxpIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTIKK21zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKK21zZ3N0ciAiQ2FuY2VsbGEgc29sbyBzZSBmdXNvIGNvbiB1biBhbHRybyByYW1vIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKK21zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCittc2dzdHIgIlNlbXByZSAobm9uIHZlcmlmaWNhcmUgbGUgZnVzaW9uaSkiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCittc2dzdHIgIkkgcmFtaSBzZWd1ZW50aSBub24gc29ubyBzdGF0aSBmdXNpIGNvbXBsZXRhbWVudGUgaW4gJXM6IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE3Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyJSaXByaXN0aW5hcmUgcmFtaSBjYW5jZWxsYXRpIMOoIGRpZmZpY2lsZS5cbiIKKyJcbiIKKyJDYW5jZWxsYXJlIGkgcmFtaSBzZWxlemlvbmF0aT8iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGNhbmNlbGxhcmUgaSByYW1pOlxuIgorIiVzIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIyCittc2dpZCAiUmVuYW1lIEJyYW5jaCIKK21zZ3N0ciAiUmlub21pbmEgcmFtbyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI2Cittc2dpZCAiUmVuYW1lIgorbXNnc3RyICJSaW5vbWluYSIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM2Cittc2dpZCAiQnJhbmNoOiIKK21zZ3N0ciAiUmFtbzoiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOQorbXNnaWQgIk5ldyBOYW1lOiIKK21zZ3N0ciAiTnVvdm8gTm9tZToiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo3NQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKK21zZ3N0ciAiU2NlZ2xpZXJlIHVuIHJhbW8gZGEgcmlub21pbmFyZS4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiSWwgcmFtbyAnJXMnIGVzaXN0ZSBnacOgLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCittc2dzdHIgIkltcG9zc2liaWxlIHJpbm9taW5hcmUgJyVzJy4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICJBdnZpbyBpbiBjb3Jzby4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2Cittc2dpZCAiRmlsZSBCcm93c2VyIgorbXNnc3RyICJGaWxlIGJyb3dzZXIiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxMjYgbGliL2Jyb3dzZXIudGNsOjE0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgJXMuLi4iCittc2dzdHIgIkNhcmljYW1lbnRvICVzLi4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTg3Cittc2dpZCAiW1VwIFRvIFBhcmVudF0iCittc2dzdHIgIltEaXJlY3Rvcnkgc3VwZXJpb3JlXSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2NyBsaWIvYnJvd3Nlci50Y2w6MjczCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAiRXNwbG9yYSBpIGZpbGUgZGVsIHJhbW8iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKK21zZ2lkICJCcm93c2UiCittc2dzdHIgIkVzcGxvcmEiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgorbXNnc3RyICJSZWN1cGVybyAlcyBkYSAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgImVycm9yZSBncmF2ZTogaW1wb3NzaWJpbGUgcmlzb2x2ZXJlICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQorIzogbGliL3NzaGtleS50Y2w6NTMKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiQ2hpdWRpIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiSWwgcmFtbyAnJXMnIG5vbiBlc2lzdGUuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCittc2dzdHIgIkltcG9zc2liaWxlIGNvbmZpZ3VyYXJlIGdpdC1wdWxsIHNlbXBsaWZpY2F0byBwZXIgJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKyJJbCByYW1vICclcycgZXNpc3RlIGdpw6AuXG4iCisiXG4iCisiTm9uIHB1w7IgZWZmZXR0dWFyZSB1biAnZmFzdC1mb3J3YXJkJyBhICVzLlxuIgorIkUnIG5lY2Vzc2FyaWEgdW5hIGZ1c2lvbmUuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIkxhIHN0cmF0ZWdpYSBkaSBmdXNpb25lICclcycgbm9uIMOoIHN1cHBvcnRhdGEuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCittc2dzdHIgIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Cittc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgorbXNnc3RyICIiCisiTCdhcmVhIGRpIHByZXBhcmF6aW9uZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSAoaW5kaWNlKSDDqCBnacOgIGJsb2NjYXRhLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIkwndWx0aW1vIHN0YXRvIGFuYWxpenphdG8gbm9uIGNvcnJpc3BvbmRlIGFsbG8gc3RhdG8gZGVsbCdhcmNoaXZpby5cbiIKKyJcbiIKKyJVbiBhbHRybyBwcm9ncmFtbWEgR2l0IGhhIG1vZGlmaWNhdG8gcXVlc3RvIGFyY2hpdmlvIGRhbGwndWx0aW1hIGFuYWxpc2kuICIKKyJCaXNvZ25hIGVmZmV0dHVhcmUgdW5hIG51b3ZhIGFuYWxpc2kgcHJpbWEgZGkgcG90ZXIgY2FtYmlhcmUgaWwgcmFtbyAiCisiYXR0dWFsZS5cbiIKKyJcbiIKKyJMYSBudW92YSBhbmFsaXNpIGNvbWluY2Vyw6Agb3JhLlxuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyBhICclcycgaW4gY29yc28uLi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Cittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgImZpbGUgcHJlc2VudGkgbmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICJBdHRpdmF6aW9uZSBkaSAnJXMnIGZhbGxpdGEgKHJpY2hpZXN0YSB1bmEgZnVzaW9uZSBhIGxpdmVsbG8gZmlsZSkuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NworbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgorbXNnc3RyICJFJyByaWNoaWVzdGEgdW5hIGZ1c2lvbmUgYSBsaXZlbGxvIGZpbGUuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICJTaSByaW1hcnLDoCBzdWwgcmFtbyAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorIk5vbiBzaSDDqCBwacO5IHN1IHVuIHJhbW8gbG9jYWxlXG4iCisiXG4iCisiU2Ugc2kgdnVvbGUgcmltYW5lcmUgc3UgdW4gcmFtbywgY3JlYXJuZSB1bm8gb3JhIGEgcGFydGlyZSBkYSAnUXVlc3RhICIKKyJyZXZpc2lvbmUgYXR0aXZhIHN0YWNjYXRhJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIkF0dGl2YXppb25lIGRpICclcycgY29tcGxldGF0YS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAiIgorIlJpcHJpc3RpbmFyZSAnJXMnIGEgJyVzJyBjb21wb3J0ZXLDoCBsYSBwZXJkaXRhIGRlbGxlIHNlZ3VlbnRpIHJldmlzaW9uaToiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Cittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAiUmljb21wb3JyZSBsZSByZXZpc2lvbmkgcGVyZHV0ZSBwb3RyZWJiZSBub24gZXNzZXJlIHNlbXBsaWNlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAnJXMnPyIKK21zZ3N0ciAiUmlwcmlzdGluYXJlICclcyc/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIlZpc3VhbGl6emEiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIHByZXBhcmFyZSBpbCByYW1vIGF0dHVhbGUuXG4iCisiXG4iCisiUXVlc3RhIGRpcmVjdG9yeSBkaSBsYXZvcm8gw6ggc3RhdGEgY29udmVydGl0YSBzb2xvIHBhcnppYWxtZW50ZS4gSSBmaWxlIHNvbm8gIgorInN0YXRpIGFnZ2lvcm5hdGkgY29ycmV0dGFtZW50ZSwgbWEgbCdhZ2dpb3JuYW1lbnRvIGRpIHVuIGZpbGUgZGkgR2l0IGhhICIKKyJwcm9kb3R0byBkZWdsaSBlcnJvcmkuXG4iCisiXG4iCisiUXVlc3RvIG5vbiBzYXJlYmJlIGRvdnV0byBzdWNjZWRlcmUuICAlcyBvcmEgdGVybWluZXLDoCBzZW56YSBhbHRyZSBhemlvbmkuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Cittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJTZWxlemlvbmEiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NTMKK21zZ2lkICJGb250IEZhbWlseSIKK21zZ3N0ciAiRmFtaWdsaWEgZGkgY2FyYXR0ZXJpIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Cittc2dpZCAiRm9udCBTaXplIgorbXNnc3RyICJEaW1lbnNpb25lIGNhcmF0dGVyaSIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo5MQorbXNnaWQgIkZvbnQgRXhhbXBsZSIKK21zZ3N0ciAiRXNlbXBpbyBjYXJhdHRlcmkiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTAzCittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyJRdWVzdG8gw6ggdW4gdGVzdG8gZCdlc2VtcGlvLlxuIgorIlNlIHRpIHBpYWNlIHF1ZXN0byB0ZXN0bywgc2NlZ2xpIHF1ZXN0byBjYXJhdHRlcmUuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI4Cittc2dpZCAiR2l0IEd1aSIKK21zZ3N0ciAiR2l0IEd1aSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NgorbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiQ3JlYSBudW92byBhcmNoaXZpbyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MworbXNnaWQgIk5ldy4uLiIKK21zZ3N0ciAiTnVvdm8uLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCittc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiQ2xvbmEgYXJjaGl2aW8gZXNpc3RlbnRlIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgorbXNnaWQgIkNsb25lLi4uIgorbXNnc3RyICJDbG9uYS4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE2Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICJBcHJpIGFyY2hpdmlvIGVzaXN0ZW50ZSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTkKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICJBcHJpLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzMgorbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCittc2dzdHIgIkFyY2hpdmkgcmVjZW50aSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzgKK21zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKK21zZ3N0ciAiQXByaSBhcmNoaXZpbyByZWNlbnRlOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIGwnYXJjaGl2aW8gJXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5MQorbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIkRpcmVjdG9yeToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAiQXJjaGl2aW8gR2l0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkxhIGRpcmVjdG9yeSAlcyBlc2lzdGUgZ2nDoC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIklsIGZpbGUgJXMgZXNpc3RlIGdpw6AuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgorbXNnaWQgIkNsb25lIgorbXNnc3RyICJDbG9uYSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzkKK21zZ2lkICJTb3VyY2UgTG9jYXRpb246IgorbXNnc3RyICJQb3NpemlvbmUgc29yZ2VudGU6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MAorbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgorbXNnc3RyICJEaXJlY3RvcnkgZGkgZGVzdGluYXppb25lOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKK21zZ2lkICJDbG9uZSBUeXBlOiIKK21zZ3N0ciAiVGlwbyBkaSBjbG9uZToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4Cittc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorbXNnc3RyICJTdGFuZGFyZCAodmVsb2NlLCBzZW1pLXJpZG9uZGFudGUsIGNvbiBoYXJkbGluaykiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0Cittc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgorbXNnc3RyICJDb3BpYSBjb21wbGV0YSAocGnDuSBsZW50bywgYmFja3VwIHJpZG9uZGFudGUpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMAorbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgorbXNnc3RyICJTaGFyZWQgKGlsIHBpw7kgdmVsb2NlLCBub24gcmFjY29tYW5kYXRvLCBuZXNzdW4gYmFja3VwKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICIlcyBub24gw6ggdW4gYXJjaGl2aW8gR2l0LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTIKK21zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIlN0YW5kYXJkIMOoIGRpc3BvbmliaWxlIHNvbG8gcGVyIGFyY2hpdmkgbG9jYWxpLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJTaGFyZWQgw6ggZGlzcG9uaWJpbGUgc29sbyBwZXIgYXJjaGl2aSBsb2NhbGkuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiSWwgZmlsZS9kaXJlY3RvcnkgJXMgZXNpc3RlIGdpw6AuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyOAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjb25maWd1cmFyZSBvcmlnaW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ2FsY29sbyBvZ2dldHRpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQorbXNnaWQgImJ1Y2tldHMiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCittc2dzdHIgIkltcG9zc2liaWxlIGNvcGlhcmUgb2dnZXR0aS9pbmZvL2FsdGVybmF0ZTogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKK21zZ3N0ciAiTmllbnRlIGRhIGNsb25hcmUgZGEgJXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjkKK21zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCittc2dzdHIgIklsIHJhbW8gJ21hc3Rlcicgbm9uIMOoIHN0YXRvIGluaXppYWxpenphdG8uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNgorbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCittc2dzdHIgIkltcG9zc2liaWxlIHV0aWxpenphcmUgZ2xpIGhhcmRsaW5rLiBTaSByaWNvcnJlcsOgIGFsbGEgY29waWEuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAiQ2xvbmF6aW9uZSBkYSAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTkKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIkNvcGlhIGRlZ2xpIG9nZ2V0dGkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzYwCittc2dpZCAiS2lCIgorbXNnc3RyICJLaUIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY29waWFyZSBvZ2dldHRvOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIkNvbGxlZ2FtZW50byBvZ2dldHRpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NQorbXNnaWQgIm9iamVjdHMiCittc2dzdHIgIm9nZ2V0dGkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCittc2dzdHIgIkhhcmRsaW5rIGltcG9zc2liaWxlIHN1bGwnb2dnZXR0bzogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4Cittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIHJlY3VwZXJhcmUgcmFtaSBlIG9nZ2V0dGkuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSAiCisiY29uc29sZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODY5Cittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsZSBldGljaGV0dGUuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSAiCisiY29uc29sZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGRldGVybWluYXJlIEhFQUQuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSBjb25zb2xlLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmlwdWxpcmUgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA4Cittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAiQ2xvbmF6aW9uZSBub24gcml1c2NpdGEuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHRyb3ZhdG8gdW4gcmFtbyBwcmVkZWZpbml0by4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaXNvbHZlcmUgJXMgY29tZSB1bmEgcmV2aXNpb25lLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKK21zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiQ3JlYXppb25lIGRpcmVjdG9yeSBkaSBsYXZvcm8iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKKyM6IGxpYi9pbmRleC50Y2w6MTk4Cittc2dpZCAiZmlsZXMiCittc2dzdHIgImZpbGUiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTY4Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIkF0dGl2YXppb25lIGluaXppYWxlIG5vbiByaXVzY2l0YS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQorbXNnaWQgIk9wZW4iCittc2dzdHIgIkFwcmkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMQorbXNnaWQgIlJlcG9zaXRvcnk6IgorbXNnc3RyICJBcmNoaXZpbzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBhY2NlZGVyZSBhbGwnYXJjaGl2aW8gJXM6IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMKK21zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgorbXNnc3RyICJRdWVzdGEgcmV2aXNpb25lIGF0dGl2YSBzdGFjY2F0YSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjYwCittc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCittc2dzdHIgIkVzcHJlc3Npb25lIGRpIHJldmlzaW9uZToiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NAorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAiUmFtbyBsb2NhbGUiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3OQorbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiRHVwbGljYXRvIGxvY2FsZSBkaSByYW1vIHJlbW90byIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjg0IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzgKK21zZ2lkICJUYWciCittc2dzdHIgIkV0aWNoZXR0YSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgorbXNnc3RyICJSZXZpc2lvbmUgbm9uIHZhbGlkYTogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMzgKK21zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCittc2dzdHIgIk5lc3N1bmEgcmV2aXNpb25lIHNlbGV6aW9uYXRhLiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjM0NgorbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgorbXNnc3RyICJMJ2VzcHJlc3Npb25lIGRpIHJldmlzaW9uZSDDqCB2dW90YS4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzEKK21zZ2lkICJVcGRhdGVkIgorbXNnc3RyICJBZ2dpb3JuYXRvIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Cittc2dpZCAiVVJMIgorbXNnc3RyICJVUkwiCisKKyM6IGxpYi9jb21taXQudGNsOjkKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJcbiIKKyJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgorInRvIGFtZW5kLlxuIgorbXNnc3RyICIiCisiTm9uIGMnw6ggbmllbnRlIGRhIGNvcnJlZ2dlcmUuXG4iCisiXG4iCisiU3RhaSBwZXIgY3JlYXJlIGxhIHJldmlzaW9uZSBpbml6aWFsZS4gTm9uIGVzaXN0ZSB1bmEgcmV2aXNpb25lIHByZWNlZGVudGUgIgorImRhIGNvcnJlZ2dlcmUuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBlZmZldHR1YXJlIHVuYSBjb3JyZXppb25lIGR1cmFudGUgdW5hIGZ1c2lvbmUuXG4iCisiXG4iCisiSW4gcXVlc3RvIG1vbWVudG8gc2kgc3RhIGVmZmV0dHVhbmRvIHVuYSBmdXNpb25lIGNoZSBub24gw6ggc3RhdGEgZGVsIHR1dHRvICIKKyJjb21wbGV0YXRhLiBOb24gcHVvaSBjb3JyZWdnZXJlIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlIGEgbWVubyBjaGUgcHJpbWEgdHUgIgorIm5vbiBpbnRlcnJvbXBhIGwnb3BlcmF6aW9uZSBkaSBmdXNpb25lIGluIGNvcnNvLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDo0OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgaWwgY2FyaWNhbWVudG8gZGVpIGRhdGkgZGVsbGEgcmV2aXNpb25lIGRhIGNvcnJlZ2dlcmU6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgIkltcG9zc2liaWxlIG90dGVuZXJlIGxhIHR1YSBpZGVudGl0w6A6IgorCisjOiBsaWIvY29tbWl0LnRjbDo4MAorbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCittc2dzdHIgIkdJVF9DT01NSVRURVJfSURFTlQgbm9uIHZhbGlkYToiCisKKyM6IGxpYi9jb21taXQudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICJhdHRlbnppb25lOiBUY2wgbm9uIHN1cHBvcnRhIGxhIGNvZGlmaWNhICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiTCd1bHRpbW8gc3RhdG8gYW5hbGl6emF0byBub24gY29ycmlzcG9uZGUgYWxsbyBzdGF0byBkZWxsJ2FyY2hpdmlvLlxuIgorIlxuIgorIlVuIGFsdHJvIHByb2dyYW1tYSBHaXQgaGEgbW9kaWZpY2F0byBxdWVzdG8gYXJjaGl2aW8gZGFsbCd1bHRpbWEgYW5hbGlzaS4gIgorIkJpc29nbmEgZWZmZXR0dWFyZSB1bmEgbnVvdmEgYW5hbGlzaSBwcmltYSBkaSBwb3RlciBjcmVhcmUgdW5hIG51b3ZhICIKKyJyZXZpc2lvbmUuXG4iCisiXG4iCisiTGEgbnVvdmEgYW5hbGlzaSBjb21pbmNlcsOgIG9yYS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyJOb24gw6ggcG9zc2liaWxlIGNyZWFyZSB1bmEgcmV2aXNpb25lIGNvbiBmaWxlIG5vbiBzb3R0b3Bvc3RpIGEgZnVzaW9uZS5cbiIKKyJcbiIKKyJJbCBmaWxlICVzIHByZXNlbnRhIGRlaSBjb25mbGl0dGkuIERldmkgcmlzb2x2ZXJsaSBlIHByZXBhcmFyZSBpbCBmaWxlIHBlciAiCisiY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUgcHJpbWEgZGkgZWZmZXR0dWFyZSBxdWVzdGEgYXppb25lLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyJTdGF0byBkaSBmaWxlICVzIHNjb25vc2NpdXRvLlxuIgorIlxuIgorIlF1ZXN0byBwcm9ncmFtbWEgbm9uIHB1w7IgY3JlYXJlIHVuYSByZXZpc2lvbmUgY29udGVuZW50ZSBpbCBmaWxlICVzLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODgKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIk5lc3N1bmEgbW9kaWZpY2EgcGVyIGxhIG51b3ZhIHJldmlzaW9uZS5cbiIKKyJcbiIKKyJEZXZpIHByZXBhcmFyZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSBhbG1lbm8gMSBmaWxlIHByaW1hIGRpIGVmZmV0dHVhcmUgIgorInF1ZXN0YSBvcGVyYXppb25lLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMDMKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICIiCisiQmlzb2duYSBmb3JuaXJlIHVuIG1lc3NhZ2dpbyBkaSByZXZpc2lvbmUuXG4iCisiXG4iCisiVW4gYnVvbiBtZXNzYWdnaW8gZGkgcmV2aXNpb25lIGhhIGlsIHNlZ3VlbnRlIGZvcm1hdG86XG4iCisiXG4iCisiLSBQcmltYSBsaW5lYTogZGVzY3JpdmkgaW4gdW5hIGZyYXNlIGNpw7IgY2hlIGhhaSBmYXR0by5cbiIKKyItIFNlY29uZGEgbGluZWE6IHZ1b3RhLlxuIgorIi0gVGVyemEgbGluZWE6IHNwaWVnYSBhIGNvc2Egc2VydmUgbGEgdHVhIG1vZGlmaWNhLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzQKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAiQXZ2aW8gcHJlLWNvbW1pdCBob29rLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNDkKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAiUmV2aXNpb25lIHJpZml1dGF0YSBkYWwgcHJlLWNvbW1pdCBob29rLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjcyCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIkF2dmlvIGNvbW1pdC1tc2cgaG9vay4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6Mjg3Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIlJldmlzaW9uZSByaWZpdXRhdGEgZGFsIGNvbW1pdC1tc2cgaG9vay4iCisKKyM6IGxpYi9jb21taXQudGNsOjMwMAorbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKK21zZ3N0ciAiQXJjaGl2aWF6aW9uZSBtb2RpZmljaGUuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjMxNgorbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAid3JpdGUtdHJlZSBub24gcml1c2NpdG86IgorCisjOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgorbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9jb21taXQudGNsOjMzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgIkxhIHJldmlzaW9uZSAlcyBzZW1icmEgZXNzZXJlIGRhbm5lZ2dpYXRhIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzkKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJOZXNzdW5hIG1vZGlmaWNhIHBlciBsYSBudW92YSByZXZpc2lvbmUuXG4iCisiXG4iCisiUXVlc3RhIHJldmlzaW9uZSBub24gbW9kaWZpY2EgYWxjdW4gZmlsZSBlIG5vbiBlZmZldHR1YSBhbGN1bmEgZnVzaW9uZS5cbiIKKyJcbiIKKyJTaSBwcm9jZWRlcsOgIHN1Yml0byBhZCB1bmEgbnVvdmEgYW5hbGlzaS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzQ2Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIHBlciBsYSBudW92YSByZXZpc2lvbmUuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNjAKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICJjb21taXQtdHJlZSBub24gcml1c2NpdG86IgorCisjOiBsaWIvY29tbWl0LnRjbDozODEKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgInVwZGF0ZS1yZWYgbm9uIHJpdXNjaXRvOiIKKworIzogbGliL2NvbW1pdC50Y2w6NDY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgorbXNnc3RyICJDcmVhdGEgcmV2aXNpb25lICVzOiAlcyIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAiRWxhYm9yYXppb25lIGluIGNvcnNvLi4uIGF0dGVuZGVyZS4uLiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIlN1Y2Nlc3NvIgorCisjOiBsaWIvY29uc29sZS50Y2w6MjAwCittc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgorbXNnc3RyICJFcnJvcmU6IGNvbWFuZG8gbm9uIHJpdXNjaXRvIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIk51bWVybyBkaSBvZ2dldHRpIHNsZWdhdGkiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAiU3BhemlvIHN1IGRpc2NvIHV0aWxpenphdG8gZGEgb2dnZXR0aSBzbGVnYXRpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ1Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJOdW1lcm8gZGkgb2dnZXR0aSBpbXBhY2NoZXR0YXRpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgorbXNnc3RyICJOdW1lcm8gZGkgcGFjY2hldHRpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ3Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJTcGF6aW8gc3UgZGlzY28gdXRpbGl6emF0byBkYSBvZ2dldHRpIGltcGFjY2hldHRhdGkiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICJPZ2dldHRpIGltcGFjY2hldHRhdGkgY2hlIGF0dGVuZG9ubyBsYSBwb3RhdHVyYSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OQorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIkZpbGUgaW51dGlsaSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo3MgorbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIkNvbXByZXNzaW9uZSBkZWxsJ2FyY2hpdmlvIGluIGNvcnNvIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgIlZlcmlmaWNhIGRlbGwnYXJjaGl2aW8gY29uIGZzY2stb2JqZWN0cyBpbiBjb3JzbyIKKworIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgorIlxuIgorIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgorInRoZSBkYXRhYmFzZS5cbiIKKyJcbiIKKyJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKK21zZ3N0ciAiIgorIlF1ZXN0byBhcmNoaXZpbyBhdHR1YWxtZW50ZSBoYSBjaXJjYSAlaSBvZ2dldHRpIHNsZWdhdGkuXG4iCisiXG4iCisiUGVyIG1hbnRlbmVyZSBidW9uZSBwcmVzdGF6aW9uaSBzaSByYWNjb21hbmRhIGRpIGNvbXByaW1lcmUgbCdhcmNoaXZpby5cbiIKKyJcbiIKKyJDb21wcmltZXJlIGwnYXJjaGl2aW8gb3JhPyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAiR2l0IGhhIHJlc3RpdHVpdG8gdW5hIGRhdGEgbm9uIHZhbGlkYTogJXMiCisKKyM6IGxpYi9kaWZmLnRjbDo2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKKyJcbiIKKyJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCisidGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKKyJ0aGUgc2FtZSBzdGF0ZS4iCittc2dzdHIgIiIKKyJOb24gc29ubyBzdGF0ZSB0cm92YXRlIGRpZmZlcmVuemUuXG4iCisiXG4iCisiJXMgbm9uIGhhIG1vZGlmaWNoZS5cbiIKKyJcbiIKKyJMYSBkYXRhIGRpIG1vZGlmaWNhIGRpIHF1ZXN0byBmaWxlIMOoIHN0YXRhIGNhbWJpYXRhIGRhIHVuJ2FsdHJhICIKKyJhcHBsaWNhemlvbmUsIG1hIGlsIGNvbnRlbnV0byBkZWwgZmlsZSDDqCByaW1hc3RvIGludmFyaWF0by5cbiIKKyJcbiIKKyJTaSBwcm9jZWRlcsOgIGF1dG9tYXRpY2FtZW50ZSBhZCB1bmEgbnVvdmEgYW5hbGlzaSBwZXIgdHJvdmFyZSBhbHRyaSBmaWxlIGNoZSAiCisicG90cmViYmVybyBhdmVyZSBsbyBzdGVzc28gc3RhdG8uIgorCisjOiBsaWIvZGlmZi50Y2w6MTA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgorbXNnc3RyICJDYXJpY2FtZW50byBkZWxsZSBkaWZmZXJlbnplIGRpICVzLi4uIgorCisjOiBsaWIvZGlmZi50Y2w6MTI1Cittc2dpZCAiIgorIkxPQ0FMOiBkZWxldGVkXG4iCisiUkVNT1RFOlxuIgorbXNnc3RyICIiCisiTE9DQUxFOiBjYW5jZWxsYXRvXG4iCisiUkVNT1RPOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTMwCittc2dpZCAiIgorIlJFTU9URTogZGVsZXRlZFxuIgorIkxPQ0FMOlxuIgorbXNnc3RyICIiCisiUkVNT1RPOiBjYW5jZWxsYXRvXG4iCisiTE9DQUxFOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTM3Cittc2dpZCAiTE9DQUw6XG4iCittc2dzdHIgIkxPQ0FMRTpcbiIKKworIzogbGliL2RpZmYudGNsOjE0MAorbXNnaWQgIlJFTU9URTpcbiIKK21zZ3N0ciAiUkVNT1RPOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjAyIGxpYi9kaWZmLnRjbDozMTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdmlzdWFsaXp6YXJlICVzIgorCisjOiBsaWIvZGlmZi50Y2w6MjAzCittc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKK21zZ3N0ciAiRXJyb3JlIG5lbCBjYXJpY2FtZW50byBkZWwgZmlsZToiCisKKyM6IGxpYi9kaWZmLnRjbDoyMTAKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCittc2dzdHIgIkFyY2hpdmlvIEdpdCAoc290dG9wcm9nZXR0bykiCisKKyM6IGxpYi9kaWZmLnRjbDoyMjIKK21zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCittc2dzdHIgIiogRmlsZSBiaW5hcmlvIChpbCBjb250ZW51dG8gbm9uIHNhcsOgIG1vc3RyYXRvKS4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKKyIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKK21zZ3N0ciAiIgorIiogSWwgZmlsZSBub24gdHJhY2NpYXRvIMOoIGRpICVkIGJ5dGUuXG4iCisiKiBTYXJhbm5vIHZpc3VhbGl6emF0aSBzb2xvIGkgcHJpbWkgJWQgYnl0ZS5cbiIKKworIzogbGliL2RpZmYudGNsOjIzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKKyIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqICVzIG5vbiB2aXN1YWxpenphIGNvbXBsZXRhbWVudGUgcXVlc3RvIGZpbGUgbm9uIHRyYWNjaWF0by5cbiIKKyIqIFBlciB2aXN1YWxpenphcmUgaWwgZmlsZSBjb21wbGV0bywgdXNhcmUgdW4gcHJvZ3JhbW1hIGVzdGVybm8uXG4iCisKKyM6IGxpYi9kaWZmLnRjbDo0ODIKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGxhIHNlemlvbmUgc2NlbHRhIGRhbGxhIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9kaWZmLnRjbDo0ODkKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkltcG9zc2liaWxlIHByZXBhcmFyZSBsYSBzZXppb25lIHNjZWx0YSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9kaWZmLnRjbDo1NjgKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGxhIHJpZ2Egc2NlbHRhIGRhbGxhIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9kaWZmLnRjbDo1NzYKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIkltcG9zc2liaWxlIHByZXBhcmFyZSBsYSByaWdhIHNjZWx0YSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQzCittc2dpZCAiRGVmYXVsdCIKK21zZ3N0ciAiUHJlZGVmaW5pdG8iCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3lzdGVtICglcykiCittc2dzdHIgIkNvZGlmaWNhIGRpIHNpc3RlbWEgKCVzKSIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiQWx0cm8iCisKKyM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTQKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZXJyb3JlIgorCisjOiBsaWIvZXJyb3IudGNsOjM2Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiYXR0ZW56aW9uZSIKKworIzogbGliL2Vycm9yLnRjbDo5NAorbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCittc2dzdHIgIiIKKyJCaXNvZ25hIGNvcnJlZ2dlcmUgZ2xpIGVycm9yaSBzdWRkZXR0aSBwcmltYSBkaSBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9pbmRleC50Y2w6NgorbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2Jsb2NjYXJlIGwnYWNjZXNzbyBhbGwnaW5kaWNlIgorCisjOiBsaWIvaW5kZXgudGNsOjE1Cittc2dpZCAiSW5kZXggRXJyb3IiCittc2dzdHIgIkVycm9yZSBuZWxsJ2luZGljZSIKKworIzogbGliL2luZGV4LnRjbDoxNworbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvICIKKyJyZXN5bmNocm9uaXplIGdpdC1ndWkuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBsJ2luZGljZS4gT3JhIHNhcsOgIGF2dmlhdGEgdW5hIG51b3ZhIGFuYWxpc2kgY2hlICIKKyJhZ2dpb3JuZXLDoCBnaXQtZ3VpLiIKKworIzogbGliL2luZGV4LnRjbDoyOAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJDb250aW51YSIKKworIzogbGliL2luZGV4LnRjbDozMQorbXNnaWQgIlVubG9jayBJbmRleCIKK21zZ3N0ciAiU2Jsb2NjYSBsJ2FjY2Vzc28gYWxsJ2luZGljZSIKKworIzogbGliL2luZGV4LnRjbDoyODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgIiVzIG5vbiBmYXLDoCBwYXJ0ZSBkZWxsYSBwcm9zc2ltYSByZXZpc2lvbmUiCisKKyM6IGxpYi9pbmRleC50Y2w6MzI4Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAiUHJvbnRvIHBlciBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICJBZ2dpdW50YSBkaSAlcyBpbiBjb3JzbyIKKworIzogbGliL2luZGV4LnRjbDozOTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKK21zZ3N0ciAiQW5udWxsYXJlIGxlIG1vZGlmaWNoZSBuZWwgZmlsZSAlcz8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgorbXNnc3RyICJBbm51bGxhcmUgbGUgbW9kaWZpY2hlIGluIHF1ZXN0aSAlaSBmaWxlPyIKKworIzogbGliL2luZGV4LnRjbDo0MDgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyJUdXR0ZSBsZSBtb2RpZmljaGUgbm9uIHByZXBhcmF0ZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSBzYXJhbm5vIHBlcnNlIHBlciAiCisic2VtcHJlLiIKKworIzogbGliL2luZGV4LnRjbDo0MTEKK21zZ2lkICJEbyBOb3RoaW5nIgorbXNnc3RyICJOb24gZmFyZSBuaWVudGUiCisKKyM6IGxpYi9pbmRleC50Y2w6NDI5Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICJBbm51bGxvIGxlIG1vZGlmaWNoZSBuZWkgZmlsZSBzZWxlemlvbmF0aSIKKworIzogbGliL2luZGV4LnRjbDo0MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgJXMiCittc2dzdHIgIkFubnVsbG8gbGUgbW9kaWZpY2hlIGluICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzCittc2dpZCAiIgorIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgorbXNnc3RyICIiCisiTm9uIHBvc3NvIGVmZmV0dHVhcmUgZnVzaW9uaSBkdXJhbnRlIHVuYSBjb3JyZXppb25lLlxuIgorIlxuIgorIkJpc29nbmEgZmluaXJlIGRpIGNvcnJlZ2dlcmUgcXVlc3RhIHJldmlzaW9uZSBwcmltYSBkaSBpbml6aWFyZSB1bmEgIgorInF1YWx1bnF1ZSBmdXNpb25lLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJMJ3VsdGltbyBzdGF0byBhbmFsaXp6YXRvIG5vbiBjb3JyaXNwb25kZSBhbGxvIHN0YXRvIGRlbGwnYXJjaGl2aW8uXG4iCisiXG4iCisiVW4gYWx0cm8gcHJvZ3JhbW1hIEdpdCBoYSBtb2RpZmljYXRvIHF1ZXN0byBhcmNoaXZpbyBkYWxsJ3VsdGltYSBhbmFsaXNpLiIKKyJCaXNvZ25hIGVmZmV0dHVhcmUgdW5hIG51b3ZhIGFuYWxpc2kgcHJpbWEgZGkgcG90ZXIgZWZmZXR0dWFyZSB1bmEgZnVzaW9uZS5cbiIKKyJcbiIKKyJMYSBudW92YSBhbmFsaXNpIGNvbWluY2Vyw6Agb3JhLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIlNlaSBuZWwgbWV6em8gZGkgdW5hIGZ1c2lvbmUgY29uIGNvbmZsaXR0aS5cbiIKKyJcbiIKKyJJbCBmaWxlICVzIGhhIGRlaSBjb25mbGl0dGkuXG4iCisiXG4iCisiQmlzb2duYSByaXNvbHZlcmUgaSBjb25mbGl0dGksIHByZXBhcmFyZSBpbCBmaWxlIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIGVkICIKKyJpbmZpbmUgY3JlYXJsYSBwZXIgY29tcGxldGFyZSBsYSBmdXNpb25lIGF0dHVhbGUuIFNvbG8gYSBxdWVzdG8gcHVudG8gcG90cmFpICIKKyJpbml6aWFyZSB1bidhbHRyYSBmdXNpb25lLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKKyJcbiIKKyJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgorIlxuIgorIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgorIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKK21zZ3N0ciAiIgorIlNlaSBuZWwgbWV6em8gZGkgdW5hIG1vZGlmaWNhLlxuIgorIlxuIgorIklsIGZpbGUgJXMgw6ggc3RhdG8gbW9kaWZpY2F0by5cbiIKKyJcbiIKKyJCaXNvZ25hIGNvbXBsZXRhcmUgbGEgY3JlYXppb25lIGRlbGxhIHJldmlzaW9uZSBhdHR1YWxlIHByaW1hIGRpIGluaXppYXJlICIKKyJ1bmEgZnVzaW9uZS4gSW4gcXVlc3RvIG1vZG8gc2Fyw6AgcGnDuSBmYWNpbGUgaW50ZXJyb21wZXJlIHVuYSBmdXNpb25lIG5vbiAiCisicml1c2NpdGEsIG5lbCBjYXNvIGNlIG5lIGZvc3NlIGJpc29nbm8uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIGRpICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjEyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgorbXNnc3RyICJGdXNpb25lIGRpICVzIGUgJXMgaW4gY29yc28uLi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMxCittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIkZ1c2lvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMworbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICJGdXNpb25lIG5vbiByaXVzY2l0YS4gQmlzb2duYSByaXNvbHZlcmUgaSBjb25mbGl0dGkuIgorCisjOiBsaWIvbWVyZ2UudGNsOjE1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIEludG8gJXMiCittc2dzdHIgIkZ1c2lvbmUgaW4gJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc3Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgIlJldmlzaW9uZSBkYSBmb25kZXJlIgorCisjOiBsaWIvbWVyZ2UudGNsOjIxMgorbXNnaWQgIiIKKyJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSW50ZXJydXppb25lIGltcG9zc2liaWxlIGR1cmFudGUgdW5hIGNvcnJlemlvbmUuXG4iCisiXG4iCisiQmlzb2duYSBmaW5pcmUgZGkgY29ycmVnZ2VyZSBxdWVzdGEgcmV2aXNpb25lLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyMgorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorIkludGVycm9tcGVyZSBmdXNpb25lP1xuIgorIlxuIgorIkwnaW50ZXJydXppb25lIGRlbGxhIGZ1c2lvbmUgYXR0dWFsZSBjYXVzZXLDoCBsYSBwZXJkaXRhIGRpICpUVVRURSogbGUgIgorIm1vZGlmaWNoZSBub24gYW5jb3JhIHByZXNlbnRpIG5lbGwnYXJjaGl2aW8uXG4iCisiXG4iCisiQ29udGludWFyZSBjb24gbCdpbnRlcnJ1emlvbmUgZGVsbGEgZnVzaW9uZSBhdHR1YWxlPyIKKworIzogbGliL21lcmdlLnRjbDoyMjgKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyJSaXByaXN0aW5hcmUgbGEgcmV2aXNpb25lIGF0dHVhbGUgZSBhbm51bGxhcmUgbGUgbW9kaWZpY2hlP1xuIgorIlxuIgorIkwnYW5udWxsYW1lbnRvIGRlbGxlIG1vZGlmaWNoZSBjYXVzZXLDoCBsYSBwZXJkaXRhIGRpICpUVVRURSogbGUgbW9kaWZpY2hlICIKKyJub24gYW5jb3JhIHByZXNlbnRpIG5lbGwnYXJjaGl2aW8uXG4iCisiXG4iCisiQ29udGludWFyZSBjb24gbCdhbm51bGxhbWVudG8gZGVsbGUgbW9kaWZpY2hlIGF0dHVhbGk/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOQorbXNnaWQgIkFib3J0aW5nIgorbXNnc3RyICJJbnRlcnJ1emlvbmUiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgInJpcHJpc3Rpbm8gZmlsZSIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBmYWlsZWQuIgorbXNnc3RyICJJbnRlcnJ1emlvbmUgbm9uIHJpdXNjaXRhLiIKKworIzogbGliL21lcmdlLnRjbDoyNjkKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgIkludGVycnV6aW9uZSBjb21wbGV0YXRhLiBQcm9udG8uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAiSW1wb3JyZSBsYSByaXNvbHV6aW9uZSBhbGxhIHJldmlzaW9uZSBjb211bmU/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo5Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCittc2dzdHIgIkltcG9ycmUgbGEgcmlzb2x1emlvbmUgYWwgcmFtbyBhdHR1YWxlPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTAKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/IgorbXNnc3RyICJJbXBvcnJlIGxhIHJpc29sdXppb25lIGFsbCdhbHRybyByYW1vPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyJTaSBzdGFubm8gbW9zdHJhbmRvIHNvbG8gbGUgbW9kaWZpY2hlIGNvbiBjb25mbGl0dGkuXG4iCisiXG4iCisiJXMgc2Fyw6Agc292cmFzY3JpdHRvLlxuIgorIlxuIgorIlF1ZXN0YSBvcGVyYXppb25lIHB1w7IgZXNzZXJlIG1vZGlmaWNhdGEgc29sbyByaWNvbWluY2lhbmRvIGxhIGZ1c2lvbmUuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorbXNnc3RyICIiCisiSWwgZmlsZSAlcyBzZW1icmEgY29udGVuZXJlIGNvbmZsaXR0aSBub24gcmlzb2x0aSwgcHJlcGFyYXJlIHBlciBsYSBwcm9zc2ltYSAiCisicmV2aXNpb25lPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6NjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiCittc2dzdHIgIiIKKyJMYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIHBlciAlcyDDqCBwcmVwYXJhdGEgcGVyIGxhIHByb3NzaW1hIHJldmlzaW9uZSIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSByaXNvbHZlcmUgaSBjb25mbGl0dGkgcGVyIGNhbmNlbGxhemlvbmkgbyBsaW5rIGNvbiB1biAiCisicHJvZ3JhbW1hIGVzdGVybm8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgorbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIk5vbiBlc2lzdGUgdW4gZmlsZSBjb24gY29uZmxpdHRpLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR1VJIG1lcmdlIHRvb2w6ICclcyciCittc2dzdHIgIiclcycgbm9uIMOoIHVuYSBHVUkgcGVyIGxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciCittc2dzdHIgIklsIHByb2dyYW1tYSAnJXMnIG5vbiDDqCBzdXBwb3J0YXRvIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKK21zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKK21zZ3N0ciAiTGEgcmlzb2x1emlvbmUgZGVpIGNvbmZsaXR0aSDDqCBnacOgIGF2dmlhdGEsIHRlcm1pbmFybGE/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkVycm9yZTogcmV2aXNpb25lIG5vbiB0cm92YXRhOlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgYXZ2aWFyZSBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgIkF2dmlvIGRlbCBwcm9ncmFtbWEgcGVyIGxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgaW4gY29yc28uLi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKK21zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCittc2dzdHIgIlJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgbm9uIHJpdXNjaXRhLiIKKworIzogbGliL29wdGlvbi50Y2w6MTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgorbXNnc3RyICIiCisiTGEgY29kaWZpY2EgZGVpIGNhcmF0dGVyaSAnJXMnIHNwZWNpZmljYXRhIHBlciB0dXR0aSBnbGkgYXJjaGl2aSBub24gw6ggdmFsaWRhIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgorbXNnc3RyICIiCisiTGEgY29kaWZpY2EgZGVpIGNhcmF0dGVyaSAnJXMnIHNwZWNpZmljYXRhIHBlciBsJ2FyY2hpdmlvIGF0dHVhbGUgIG5vbiDDqCAiCisidmFsaWRhIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTcKK21zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgorbXNnc3RyICJSaXByaXN0aW5hIHZhbG9yaSBwcmVkZWZpbml0aSIKKworIzogbGliL29wdGlvbi50Y2w6MTIxCittc2dpZCAiU2F2ZSIKK21zZ3N0ciAiU2FsdmEiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgIkFyY2hpdmlvIGRpICVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzIKK21zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgorbXNnc3RyICJUdXR0aSBnbGkgYXJjaGl2aSIKKworIzogbGliL29wdGlvbi50Y2w6MTM4Cittc2dpZCAiVXNlciBOYW1lIgorbXNnc3RyICJOb21lIHV0ZW50ZSIKKworIzogbGliL29wdGlvbi50Y2w6MTM5Cittc2dpZCAiRW1haWwgQWRkcmVzcyIKK21zZ3N0ciAiSW5kaXJpenpvIEVtYWlsIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDEKK21zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKK21zZ3N0ciAiUmllcGlsb2dvIG5lbGxlIHJldmlzaW9uaSBkaSBmdXNpb25lIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDIKK21zZ2lkICJNZXJnZSBWZXJib3NpdHkiCittc2dzdHIgIlByb2xpc3NpdMOgIGRlbGxhIGZ1c2lvbmUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MworbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCittc2dzdHIgIk1vc3RyYSBzdGF0aXN0aWNoZSBkZWxsZSBkaWZmZXJlbnplIGRvcG8gbGEgZnVzaW9uZSIKKworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiVXNlIE1lcmdlIFRvb2wiCittc2dzdHIgIlByb2dyYW1tYSBkYSB1dGlsaXp6YXJlIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDYKK21zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgorbXNnc3RyICJGaWRhdGkgZGVsbGUgZGF0ZSBkaSBtb2RpZmljYSBkZWkgZmlsZSIKKworIzogbGliL29wdGlvbi50Y2w6MTQ3Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICIiCisiRWZmZXR0dWEgcG90YXR1cmEgZGVpIGR1cGxpY2F0aSBsb2NhbGkgZGkgcmFtaSByZW1vdGkgZHVyYW50ZSBpbCByZWN1cGVybyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ4Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCittc2dzdHIgIkFwcGFpYSBkdXBsaWNhdGkgbG9jYWxpIGRpIHJhbWkgcmVtb3RpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDkKK21zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKK21zZ3N0ciAiUmljZXJjYSBjb3BpZSBzb2xvIG5laSBmaWxlIG1vZGlmaWNhdGkiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MAorbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgorbXNnc3RyICJOdW1lcm8gbWluaW1vIGRpIGxldHRlcmUgY2hlIGF0dGl2YW5vIGxhIHJpY2VyY2EgZGVsbGUgY29waWUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MQorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICJHaW9ybmkgZGkgY29udGVzdG8gbmVsbGEgY3Jvbm9sb2dpYSBkZWxsZSBhbm5vdGF6aW9uaSIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAiTnVtZXJvIGRpIGxpbmVlIGRpIGNvbnRlc3RvIG5lbGxlIGRpZmZlcmVuemUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MworbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCittc2dzdHIgIkxhcmdoZXp6YSBkZWwgbWVzc2FnZ2lvIGRpIHJldmlzaW9uZSIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJNb2RlbGxvIHBlciBpbCBub21lIGRpIHVuIG51b3ZvIHJhbW8iCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NQorbXNnaWQgIkRlZmF1bHQgRmlsZSBDb250ZW50cyBFbmNvZGluZyIKK21zZ3N0ciAiQ29kaWZpY2EgcHJlZGVmaW5pdGEgcGVyIGlsIGNvbnRlbnV0byBkZWkgZmlsZSIKKworIzogbGliL29wdGlvbi50Y2w6MjAzCittc2dpZCAiQ2hhbmdlIgorbXNnc3RyICJDYW1iaWEiCisKKyM6IGxpYi9vcHRpb24udGNsOjIzMAorbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgorbXNnc3RyICJMaW5ndWEgZGl6aW9uYXJpbzoiCisKKyM6IGxpYi9vcHRpb24udGNsOjI1NAorbXNnaWQgIkNoYW5nZSBGb250IgorbXNnc3RyICJDYW1iaWEgY2FyYXR0ZXJpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIlNjZWdsaSAlcyIKKworIzogbGliL29wdGlvbi50Y2w6MjY0Cittc2dpZCAicHQuIgorbXNnc3RyICJwdC4iCisKKyM6IGxpYi9vcHRpb24udGNsOjI3OAorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXJlbnplIgorCisjOiBsaWIvb3B0aW9uLnRjbDozMTQKK21zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBzYWx2YXJlIGNvbXBsZXRhbWVudGUgbGUgb3B6aW9uaToiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2MworbXNnaWQgIlJlbW92ZSBSZW1vdGUiCittc2dzdHIgIlJpbXVvdmkgYXJjaGl2aW8gcmVtb3RvIgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjgKK21zZ2lkICJQcnVuZSBmcm9tIgorbXNnc3RyICJFZmZldHR1YSBwb3RhdHVyYSBkYSIKKworIzogbGliL3JlbW90ZS50Y2w6MTczCittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAiUmVjdXBlcmEgZGEiCisKKyM6IGxpYi9yZW1vdGUudGNsOjIxNQorbXNnaWQgIlB1c2ggdG8iCittc2dzdHIgIlByb3BhZ2EgdmVyc28iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxOQorbXNnaWQgIkFkZCBSZW1vdGUiCittc2dzdHIgIkFnZ2l1bmdpIGFyY2hpdmlvIHJlbW90byIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI0Cittc2dpZCAiQWRkIE5ldyBSZW1vdGUiCittc2dzdHIgIkFnZ2l1bmdpIG51b3ZvIGFyY2hpdmlvIHJlbW90byIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI4IGxpYi90b29sc19kbGcudGNsOjM2Cittc2dpZCAiQWRkIgorbXNnc3RyICJBZ2dpdW5naSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjM3Cittc2dpZCAiUmVtb3RlIERldGFpbHMiCittc2dzdHIgIkRldHRhZ2xpIHN1bGwnYXJjaGl2aW8gcmVtb3RvIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgIlBvc2l6aW9uZToiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MgorbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgorbXNnc3RyICJBbHRyYSBhemlvbmUiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2NQorbXNnaWQgIkZldGNoIEltbWVkaWF0ZWx5IgorbXNnc3RyICJSZWN1cGVyYSBzdWJpdG8iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3MQorbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCittc2dzdHIgIkluaXppYWxpenphIGwnYXJjaGl2aW8gcmVtb3RvIGUgcHJvcGFnYSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjc3Cittc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKK21zZ3N0ciAiTm9uIGZhcmUgYWx0cm8iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDEKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgorbXNnc3RyICJJbnNlcmlyZSB1biBub21lIHBlciBsJ2FyY2hpdmlvIHJlbW90by4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiJyVzJyBub24gw6ggdXRpbGl6emFiaWxlIGNvbWUgbm9tZSBkaSBhcmNoaXZpbyByZW1vdG8uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSBsJ2FyY2hpdmlvIHJlbW90byAnJXMnIHBvc3RvIGluICclcycuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzIGxpYi90cmFuc3BvcnQudGNsOjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmZXRjaCAlcyIKK21zZ3N0ciAicmVjdXBlcmEgZGEgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyB0aGUgJXMiCittc2dzdHIgIlJlY3VwZXJvICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgaW5pemlhbGl6emFyZSBsJ2FyY2hpdmlvIHBvc3RvIGluICclcycuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzIGxpYi90cmFuc3BvcnQudGNsOjI1IGxpYi90cmFuc3BvcnQudGNsOjYzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgInByb3BhZ2EgdmVyc28gJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgorbXNnc3RyICJJbXBvc3RvICVzIChpbiAlcykiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozNAorbXNnaWQgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCittc2dzdHIgIkVsaW1pbmEgcmFtbyByZW1vdG8iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIkRhIGFyY2hpdmlvIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUwIGxpYi90cmFuc3BvcnQudGNsOjEzNAorbXNnaWQgIlJlbW90ZToiCittc2dzdHIgIlJlbW90bzoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTQ5Cittc2dpZCAiQXJiaXRyYXJ5IExvY2F0aW9uOiIKK21zZ3N0ciAiUG9zaXppb25lIHNwZWNpZmljYToiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODQKK21zZ2lkICJCcmFuY2hlcyIKK21zZ3N0ciAiUmFtaSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiRWxpbWluYSBzb2xvIHNlIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAiRnVzbyBpbjoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCittc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgorbXNnc3RyICJTaSByaWNoaWVkZSB1biByYW1vIHBlciAnRnVzbyBpbicuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorIkkgcmFtaSBzZWd1ZW50aSBub24gc29ubyBzdGF0aSBmdXNpIGNvbXBsZXRhbWVudGUgaW4gJXM6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgdmVyaWZpY2FyZSB1bmEgbyBwacO5IGZ1c2lvbmk6IG1hbmNhbm8gbGUgcmV2aXNpb25pIG5lY2Vzc2FyaWUuICIKKyJQcm92YSBwcmltYSBhIHJlY3VwZXJhcmxlIGRhICVzLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgIlNjZWdsaWVyZSB1bm8gbyBwacO5IHJhbWkgZGEgY2FuY2VsbGFyZS4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAiQ2FuY2VsbGF6aW9uZSByYW1pIGRhICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgorbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICJOZXNzdW4gYXJjaGl2aW8gc2VsZXppb25hdG8uIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nICVzLi4uIgorbXNnc3RyICJBbmFsaXNpIGluIGNvcnNvICVzLi4uIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMQorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICJUcm92YToiCisKKyM6IGxpYi9zZWFyY2gudGNsOjIzCittc2dpZCAiTmV4dCIKK21zZ3N0ciAiU3VjYyIKKworIzogbGliL3NlYXJjaC50Y2w6MjQKK21zZ2lkICJQcmV2IgorbXNnc3RyICJQcmVjIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNQorbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgorbXNnc3RyICJEaXN0aW5ndWkgbWFpdXNjb2xlIgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKK21zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBzaG9ydGN1dDoiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBpY29uYToiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NworbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIkNvcnJldHRvcmUgb3J0b2dyYWZpY28gbm9uIHN1cHBvcnRhdG8iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJDb3JyZXppb25lIG9ydG9ncmFmaWNhIGluZGlzcG9uaWJpbGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiTGEgY29uZmlndXJhemlvbmUgZGVsIGNvcnJldHRvcmUgb3J0b2dyYWZpY28gbm9uIMOoIHZhbGlkYSIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgorbXNnc3RyICJJbCBkaXppb25hcmlvIMOoIHN0YXRvIHJlaW1wb3N0YXRvIHN1ICVzLiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjczCittc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKK21zZ3N0ciAiSWwgY29ycmV0dG9yZSBvcnRvZ3JhZmljbyBoYSByaXBvcnRhdG8gdW4gZXJyb3JlIGFsbCdhdnZpbyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIkNvcnJldHRvcmUgb3J0b2dyYWZpY28gbm9uIHJpY29ub3NjaXV0byIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgorbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgorbXNnc3RyICJOZXNzdW4gc3VnZ2VyaW1lbnRvIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Cittc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJJbCBjb3JyZXR0b3JlIG9ydG9ncmFmaWNvIGhhIG1hbmRhdG8gdW4gRU9GIGluYXNwZXR0YXRvIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCittc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCittc2dzdHIgIkVycm9yZSBuZWwgY29ycmV0dG9yZSBvcnRvZ3JhZmljbyIKKworIzogbGliL3NzaGtleS50Y2w6MzEKK21zZ2lkICJObyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAiQ2hpYXZpIG5vbiB0cm92YXRlLiIKKworIzogbGliL3NzaGtleS50Y2w6MzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgorbXNnc3RyICJDaGlhdmUgcHViYmxpY2EgdHJvdmF0YSBpbjogJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjQwCittc2dpZCAiR2VuZXJhdGUgS2V5IgorbXNnc3RyICJDcmVhIGNoaWF2ZSIKKworIzogbGliL3NzaGtleS50Y2w6NTYKK21zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKK21zZ3N0ciAiQ29waWEgbmVnbGkgYXBwdW50aSIKKworIzogbGliL3NzaGtleS50Y2w6NzAKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiTGEgdHVhIGNoaWF2ZSBwdWJibGljYSBPcGVuU1NIIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3OAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgIkNyZWF6aW9uZSBjaGlhdmUgaW4gY29yc28uLi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgYXZ2aWFyZSBzc2gta2V5Z2VuOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMTEKK21zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGxhIGNyZWF6aW9uZSBkZWxsYSBjaGlhdmUuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMTgKK21zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgorbXNnc3RyICJMYSBjaGlhdmUgw6ggc3RhdGEgY3JlYXRhIGNvbiBzdWNjZXNzbywgbWEgbm9uIMOoIHN0YXRhIHRyb3ZhdGEuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCittc2dzdHIgIkxhIGNoaWF2ZSDDqCBpbjogJXMiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiUxJHMgLi4uICU2JHM6ICUyJCppIGRpICU0JCppICglNyQzaSUlKSIKKworIzogbGliL3Rvb2xzLnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKK21zZ3N0ciAiQmlzb2duYSBzZWxlemlvbmFyZSB1biBmaWxlIHByaW1hIGRpIGVzZWd1aXJlICVzLiIKKworIzogbGliL3Rvb2xzLnRjbDo5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgorbXNnc3RyICJWdW9pIGRhdnZlcm8gZXNlZ3VpcmUgJXM/IgorCisjOiBsaWIvdG9vbHMudGNsOjExMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2w6ICVzIgorbXNnc3RyICJBY2Nlc3NvcmlvOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAiRXNlZ3VvOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgorbXNnc3RyICJJbCBwcm9ncmFtbWEgZXN0ZXJubyDDqCB0ZXJtaW5hdG8gY29uIHN1Y2Nlc3NvOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgIklsIHByb2dyYW1tYSBlc3Rlcm5vIGhhIHJpcG9ydGF0byB1biBlcnJvcmU6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICJBZ2dpdW5naSBhY2Nlc3NvcmlvIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAorbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgorbXNnc3RyICJBZ2dpdW5naSB1biBudW92byBjb21hbmRvIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMworbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAiQWdnaXVuZ2kgcGVyIHR1dHRpIGdsaSBhcmNoaXZpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NQorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAiRGV0dGFnbGkgc3VsbCdhY2Nlc3NvcmlvIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0OAorbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgorbXNnc3RyICJVdGlsaXp6YSBpbCBzZXBhcmF0b3JlICcvJyBwZXIgY3JlYXJlIHVuIGFsYmVybyBkaSBzb3R0b21lbnU6IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo2MQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJDb21hbmRvOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzQKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICJNb3N0cmEgdW5hIGZpbmVzdHJhIGRpIGRpYWxvZ28gcHJpbWEgZGVsbCdhdnZpbyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODAKK21zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKK21zZ3N0ciAiQ2hpZWRpIGFsbCd1dGVudGUgZGkgc2NlZ2xpZXJlIHVuYSByZXZpc2lvbmUgKGltcG9zdGEgJFJFVklTSU9OKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODUKK21zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKK21zZ3N0ciAiQ2hpZWRpIGFsbCd1dGVudGUgZGkgZm9ybmlyZSBhcmdvbWVudGkgYWdnaXVudGl2aSAoaW1wb3N0YSAkQVJHUykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjkyCittc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgorbXNnc3RyICJOb24gbW9zdHJhcmUgbGEgZmluZXN0cmEgZGkgY29tYW5kbyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTcKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICJBdnZpYSBzb2xvIHNlIMOoIHNlbGV6aW9uYXRhIHVuYSBkaWZmZXJlbnphICgkRklMRU5BTUUgbm9uIMOoIHZ1b3RvKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTIxCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKK21zZ3N0ciAiQmlzb2duYSBkYXJlIHVuIG5vbWUgYWxsJ2FjY2Vzc29yaW8uIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJMJ2FjY2Vzc29yaW8gJyVzJyBlc2lzdGUgZ2nDoC4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCisiJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBhZ2dpdW5nZXJlIGwnYWNjZXNzb3JpbzpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTkwCittc2dpZCAiUmVtb3ZlIFRvb2wiCittc2dzdHIgIlJpbXVvdmkgYWNjZXNzb3JpbyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk2Cittc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCittc2dzdHIgIlJpbXVvdmkgaSBjb21hbmRpIGFjY2Vzc29yaSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjAwCittc2dpZCAiUmVtb3ZlIgorbXNnc3RyICJSaW11b3ZpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoSWwgY29sb3JlIGJsdSBpbmRpY2EgYWNjZXNzb3JpIHBlciBsJ2FyY2hpdmlvIGxvY2FsZSkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKK21zZ3N0ciAiQXZ2aWEgaWwgY29tYW5kbzogJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjMxMQorbXNnaWQgIkFyZ3VtZW50cyIKK21zZ3N0ciAiQXJnb21lbnRpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDgKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgorbXNnc3RyICJSZWN1cGVybyBudW92ZSBtb2RpZmljaGUgZGEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicmVtb3RlIHBydW5lICVzIgorbXNnc3RyICJwb3RhdHVyYSByZW1vdGEgZGkgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCittc2dzdHIgIkVmZmV0dHVhIHBvdGF0dXJhIGRlaSBkdXBsaWNhdGkgbG9jYWxpIGRpIHJhbWkgcmVtb3RpIGNhbmNlbGxhdGkgZGEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgorbXNnc3RyICJQcm9wYWdhemlvbmUgbW9kaWZpY2hlIGEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWlycm9yaW5nIHRvICVzIgorbXNnc3RyICJNaXJyb3JpbmcgdmVyc28gJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAiUHJvcGFnYXppb25lICVzICVzIGEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwMAorbXNnaWQgIlB1c2ggQnJhbmNoZXMiCittc2dzdHIgIlByb3BhZ2EgcmFtaSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTE0Cittc2dpZCAiU291cmNlIEJyYW5jaGVzIgorbXNnc3RyICJSYW1pIGRpIG9yaWdpbmUiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEzMQorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIkFyY2hpdmlvIGRpIGRlc3RpbmF6aW9uZSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY5Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBkaSB0cmFzZmVyaW1lbnRvIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKK21zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKK21zZ3N0ciAiU292cmFzY3JpdmkgcmFtbyBlc2lzdGVudGUgKGFsY3VuZSBtb2RpZmljaGUgcG90cmViYmVybyBlc3NlcmUgcGVyc2UpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzUKK21zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKK21zZ3N0ciAiVXRpbGl6emEgJ3RoaW4gcGFjaycgKHBlciBjb25uZXNzaW9uaSBsZW50ZSkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQorbXNnaWQgIkluY2x1ZGUgdGFncyIKK21zZ3N0ciAiSW5jbHVkaSBldGljaGV0dGUiCmRpZmYgLS1naXQgYS9wby9qYS5wbyBiL2dpdC1ndWkvcG8vamEucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2phLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2phLnBvCmRpZmYgLS1naXQgYS9wby9uYi5wbyBiL2dpdC1ndWkvcG8vbmIucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL25iLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL25iLnBvCmRpZmYgLS1naXQgYS9wby9wbzJtc2cuc2ggYi9naXQtZ3VpL3BvL3BvMm1zZy5zaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcG8vcG8ybXNnLnNoCnJlbmFtZSB0byBnaXQtZ3VpL3BvL3BvMm1zZy5zaApkaWZmIC0tZ2l0IGEvcG8vcHRfYnIucG8gYi9naXQtZ3VpL3BvL3B0X2JyLnBvCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwby9wdF9ici5wbwpyZW5hbWUgdG8gZ2l0LWd1aS9wby9wdF9ici5wbwpkaWZmIC0tZ2l0IGEvcG8vcnUucG8gYi9naXQtZ3VpL3BvL3J1LnBvCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwby9ydS5wbwpyZW5hbWUgdG8gZ2l0LWd1aS9wby9ydS5wbwpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9zdi5wbyBiL2dpdC1ndWkvcG8vc3YucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiMDYzZgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vc3YucG8KQEAgLTAsMCArMSwyNjA1IEBACisjIFN3ZWRpc2ggdHJhbnNsYXRpb24gb2YgZ2l0LWd1aS4KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU2hhd24gUGVhcmNlLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdC1ndWkgcGFja2FnZS4KKyMKKyMgUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+LCAyMDA3LTIwMDguCisjIE1pa2FlbCBNYWdudXNzb24gPG1pa2FjaHVAZ21haWwuY29tPiwgMjAwOC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHN2XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTA5LTEyIDIxOjExKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA5LTEyIDIxOjEyKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPlxuIgorIkxhbmd1YWdlLVRlYW06IFN3ZWRpc2ggPHRwLXN2QGxpc3Rvci50cC1zdi5zZT5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQiCisKKyM6IGdpdC1ndWkuc2g6NzgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgIk9naWx0aWd0IHRlY2tlbnNuaXR0IGFuZ2l2ZXQgaSAlczoiCisKKyM6IGdpdC1ndWkuc2g6ODMxCittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJIdXZ1ZHRlY2tlbnNuaXR0IgorCisjOiBnaXQtZ3VpLnNoOjgzMgorbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgorbXNnc3RyICJEaWZmL2tvbnNvbHRlY2tlbnNuaXR0IgorCisjOiBnaXQtZ3VpLnNoOjg0NSBnaXQtZ3VpLnNoOjg1OSBnaXQtZ3VpLnNoOjg3MiBnaXQtZ3VpLnNoOjk1NSBnaXQtZ3VpLnNoOjk3NAorIzogZ2l0LWd1aS5zaDoyOTY0Cittc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCittc2dzdHIgImdpdC1ndWk6IMO2ZGVzZGlnZXJ0IGZlbCIKKworIzogZ2l0LWd1aS5zaDo4NDYKK21zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCittc2dzdHIgIkhpdHRhciBpbnRlIGdpdCBpIFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjg3MworbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgorbXNnc3RyICJLYW4gaW50ZSB0b2xrYSB2ZXJzaW9uc3N0csOkbmcgZnLDpW4gR2l0OiIKKworIzogZ2l0LWd1aS5zaDo4OTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCisiXG4iCisiJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKKyJcbiIKKyIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCisiXG4iCisiQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGF2Z8O2cmEgR2l0cyB2ZXJzaW9uLlxuIgorIlxuIgorIiVzIHPDpGdlciBhdHQgZGVzcyB2ZXJzaW9uIMOkciBcIiVzXCIuXG4iCisiXG4iCisiJXMga3LDpHZlciBtaW5zdCBHaXQgMS41LjAgZWxsZXIgc2VuYXJlLlxuIgorIlxuIgorIkFudGEgYXR0IFwiJXNcIiDDpHIgdmVyc2lvbiAxLjUuMD9cbiIKKworIzogZ2l0LWd1aS5zaDoxMTgwCittc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgorbXNnc3RyICJHaXQta2F0YWxvZ2VuIGhpdHRhZGVzIGludGU6IgorCisjOiBnaXQtZ3VpLnNoOjEyMDEKK21zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgorbXNnc3RyICJLYW4gaW50ZSBnw6UgdGlsbCBiw7ZyamFuIHDDpSBhcmJldHNrYXRhbG9nZW46IgorCisjOiBnaXQtZ3VpLnNoOjEyMDkKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIkthbiBpbnRlIGFudsOkbmRhIG5ha2V0IGFya2l2OiIKKworIzogZ2l0LWd1aS5zaDoxMjE3Cittc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIkluZ2VuIGFyYmV0c2thdGFsb2ciCisKKyM6IGdpdC1ndWkuc2g6MTM4OSBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNgorbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCittc2dzdHIgIlVwcGRhdGVyYXIgZmlsc3RhdHVzLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE0NDUKK21zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgorbXNnc3RyICJTw7ZrZXIgZWZ0ZXIgw6RuZHJhZGUgZmlsZXIuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTUwOQorbXNnaWQgIkNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIiIKKyJBbnJvcGFyIGtyb2tlbiBmw7ZyIGbDtnJiZXJlZGVsc2UgYXYgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAocHJlcGFyZS1jb21taXQtIgorIm1zZykuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTUyNgorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIiIKKyJJbmNoZWNrbmluZ2VuIGF2dmlzYWRlcyBhdiBrcm9rZW4gZsO2ciBmw7ZyYmVyZWRlbHNlIGF2IGluY2hlY2tuaW5nc21lZGRlbGFuZGUgIgorIihwcmVwYXJlLWNvbW1pdC1tc2cpLiIKKworIzogZ2l0LWd1aS5zaDoxNjg0IGxpYi9icm93c2VyLnRjbDoyNDYKK21zZ2lkICJSZWFkeS4iCittc2dzdHIgIktsYXIuIgorCisjOiBnaXQtZ3VpLnNoOjE4NDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXNwbGF5aW5nIG9ubHkgJXMgb2YgJXMgZmlsZXMuIgorbXNnc3RyICJWaXNhciBlbmRhc3QgJXMgYXYgJXMgZmlsZXIuIgorCisjOiBnaXQtZ3VpLnNoOjE5NjgKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICJPZsO2csOkbmRyYWRlIgorCisjOiBnaXQtZ3VpLnNoOjE5NzAKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiRsO2csOkbmRyYWRlLCBlaiBrw7ZhZGUiCisKKyM6IGdpdC1ndWkuc2g6MTk3MSBnaXQtZ3VpLnNoOjE5NzkKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAiS8O2YWRlIGbDtnIgaW5jaGVja25pbmciCisKKyM6IGdpdC1ndWkuc2g6MTk3MiBnaXQtZ3VpLnNoOjE5ODAKK21zZ2lkICJQb3J0aW9ucyBzdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAiRGVsYXIga8O2YWRlIGbDtnIgaW5jaGVja25pbmciCisKKyM6IGdpdC1ndWkuc2g6MTk3MyBnaXQtZ3VpLnNoOjE5ODEKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKK21zZ3N0ciAiS8O2YWRlIGbDtnIgaW5jaGVja25pbmcsIHNha25hZGUiCisKKyM6IGdpdC1ndWkuc2g6MTk3NQorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJGaWx0eXAgw6RuZHJhZCwgZWoga8O2YWRlIgorCisjOiBnaXQtZ3VpLnNoOjE5NzYKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgorbXNnc3RyICJGaWx0eXAgw6RuZHJhZCwga8O2YWRlIgorCisjOiBnaXQtZ3VpLnNoOjE5NzgKK21zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIkVqIHNww6VyYWRlLCBlaiBrw7ZhZGUiCisKKyM6IGdpdC1ndWkuc2g6MTk4MworbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIlNha25hZGUiCisKKyM6IGdpdC1ndWkuc2g6MTk4NAorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAiS8O2YWRlIGbDtnIgYm9ydHRhZ25pbmciCisKKyM6IGdpdC1ndWkuc2g6MTk4NQorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiS8O2YWRlIGbDtnIgYm9ydHRhZ25pbmcsIGZvcnRmYXJhbmRlIG7DpHJ2YXJhbmRlIgorCisjOiBnaXQtZ3VpLnNoOjE5ODcgZ2l0LWd1aS5zaDoxOTg4IGdpdC1ndWkuc2g6MTk4OSBnaXQtZ3VpLnNoOjE5OTAKKyM6IGdpdC1ndWkuc2g6MTk5MSBnaXQtZ3VpLnNoOjE5OTIKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJLcsOkdmVyIGtvbmZsaWt0aGFudGVyaW5nIGVmdGVyIHNhbW1hbnNsYWduaW5nIgorCisjOiBnaXQtZ3VpLnNoOjIwMjcKK21zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICJTdGFydGFyIGdpdGsuLi4gdsOkbnRhLi4uIgorCisjOiBnaXQtZ3VpLnNoOjIwMzkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKK21zZ3N0ciAiSGl0dGFkZSBpbnRlIGdpdGsgaSBQQVRILiIKKworIzogZ2l0LWd1aS5zaDoyMDk4Cittc2dpZCAiQ291bGRuJ3QgZmluZCBnaXQgZ3VpIGluIFBBVEgiCittc2dzdHIgIkhpdHRhZGUgaW50ZSBnaXQgZ3VpIGkgUEFUSC4iCisKKyM6IGdpdC1ndWkuc2g6MjUxNSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2Cittc2dpZCAiUmVwb3NpdG9yeSIKK21zZ3N0ciAiQXJraXYiCisKKyM6IGdpdC1ndWkuc2g6MjUxNgorbXNnaWQgIkVkaXQiCittc2dzdHIgIlJlZGlnZXJhIgorCisjOiBnaXQtZ3VpLnNoOjI1MTggbGliL2Nob29zZV9yZXYudGNsOjU2NgorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiR3JlbiIKKworIzogZ2l0LWd1aS5zaDoyNTIxIGxpYi9jaG9vc2VfcmV2LnRjbDo1NTMKK21zZ2lkICJDb21taXRAQG5vdW4iCittc2dzdHIgIkluY2hlY2tuaW5nIgorCisjOiBnaXQtZ3VpLnNoOjI1MjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAiU2zDpSBpaG9wIgorCisjOiBnaXQtZ3VpLnNoOjI1MjUgbGliL2Nob29zZV9yZXYudGNsOjU2MgorbXNnaWQgIlJlbW90ZSIKK21zZ3N0ciAiRmrDpHJyYXJraXYiCisKKyM6IGdpdC1ndWkuc2g6MjUyOAorbXNnaWQgIlRvb2xzIgorbXNnc3RyICJWZXJrdHlnIgorCisjOiBnaXQtZ3VpLnNoOjI1MzcKK21zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKK21zZ3N0ciAiVXRmb3Jza2EgYXJiZXRza29waWEiCisKKyM6IGdpdC1ndWkuc2g6MjU0MworbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgorbXNnc3RyICJCbMOkZGRyYSBpIGdyZW5lbnMgZmlsZXIiCisKKyM6IGdpdC1ndWkuc2g6MjU0NworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgIkJsw6RkZHJhIGZpbGVyIHDDpSBncmVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1NTIKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpc2VyYSBncmVuZW5zIGhpc3RvcmlrIgorCisjOiBnaXQtZ3VpLnNoOjI1NTYKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpc2VyYSBhbGxhIGdyZW5hcnMgaGlzdG9yaWsiCisKKyM6IGdpdC1ndWkuc2g6MjU2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgorbXNnc3RyICJCbMOkZGRyYSBpIGZpbGVyIGbDtnIgJXMiCisKKyM6IGdpdC1ndWkuc2g6MjU2NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCittc2dzdHIgIlZpc3VhbGlzZXJhIGhpc3RvcmlrIGbDtnIgJXMiCisKKyM6IGdpdC1ndWkuc2g6MjU3MCBsaWIvZGF0YWJhc2UudGNsOjQwIGxpYi9kYXRhYmFzZS50Y2w6NjYKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICJEYXRhYmFzc3RhdGlzdGlrIgorCisjOiBnaXQtZ3VpLnNoOjI1NzMgbGliL2RhdGFiYXNlLnRjbDozMworbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICJLb21wcmltZXJhIGRhdGFiYXMiCisKKyM6IGdpdC1ndWkuc2g6MjU3NgorbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKK21zZ3N0ciAiVmVyaWZpZXJhIGRhdGFiYXMiCisKKyM6IGdpdC1ndWkuc2g6MjU4MyBnaXQtZ3VpLnNoOjI1ODcgZ2l0LWd1aS5zaDoyNTkxIGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAiU2thcGEgc2tyaXZib3Jkc2lrb24iCisKKyM6IGdpdC1ndWkuc2g6MjU5OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE4OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5NgorbXNnaWQgIlF1aXQiCittc2dzdHIgIkF2c2x1dGEiCisKKyM6IGdpdC1ndWkuc2g6MjYwNworbXNnaWQgIlVuZG8iCittc2dzdHIgIsOFbmdyYSIKKworIzogZ2l0LWd1aS5zaDoyNjEwCittc2dpZCAiUmVkbyIKK21zZ3N0ciAiR8O2ciBvbSIKKworIzogZ2l0LWd1aS5zaDoyNjE0IGdpdC1ndWkuc2g6MzE5MAorbXNnaWQgIkN1dCIKK21zZ3N0ciAiS2xpcHAgdXQiCisKKyM6IGdpdC1ndWkuc2g6MjYxNyBnaXQtZ3VpLnNoOjMxOTMgZ2l0LWd1aS5zaDozMjY3IGdpdC1ndWkuc2g6MzM0MAorIzogbGliL2NvbnNvbGUudGNsOjY5Cittc2dpZCAiQ29weSIKK21zZ3N0ciAiS29waWVyYSIKKworIzogZ2l0LWd1aS5zaDoyNjIwIGdpdC1ndWkuc2g6MzE5NgorbXNnaWQgIlBhc3RlIgorbXNnc3RyICJLbGlzdHJhIGluIgorCisjOiBnaXQtZ3VpLnNoOjI2MjMgZ2l0LWd1aS5zaDozMTk5IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyOAorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOQorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAiVGEgYm9ydCIKKworIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzIwMyBnaXQtZ3VpLnNoOjMzNDQgbGliL2NvbnNvbGUudGNsOjcxCittc2dpZCAiU2VsZWN0IEFsbCIKK21zZ3N0ciAiTWFya2VyYSBhbGxhIgorCisjOiBnaXQtZ3VpLnNoOjI2MzYKK21zZ2lkICJDcmVhdGUuLi4iCittc2dzdHIgIlNrYXBhLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI2NDIKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAiQ2hlY2thIHV0Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI2NDgKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgIkJ5dCBuYW1uLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI2NTMKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIlRhIGJvcnQuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjY1OAorbXNnaWQgIlJlc2V0Li4uIgorbXNnc3RyICLDhXRlcnN0w6RsbC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNjY4Cittc2dpZCAiRG9uZSIKK21zZ3N0ciAiRsOkcmRpZyIKKworIzogZ2l0LWd1aS5zaDoyNjcwCittc2dpZCAiQ29tbWl0QEB2ZXJiIgorbXNnc3RyICJDaGVja2EgaW4iCisKKyM6IGdpdC1ndWkuc2g6MjY3OSBnaXQtZ3VpLnNoOjMxMzEKK21zZ2lkICJOZXcgQ29tbWl0IgorbXNnc3RyICJOeSBpbmNoZWNrbmluZyIKKworIzogZ2l0LWd1aS5zaDoyNjg3IGdpdC1ndWkuc2g6MzEzOAorbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICJMw6RnZyB0aWxsIGbDtnJlZ8OlZW5kZSBpbmNoZWNrbmluZyIKKworIzogZ2l0LWd1aS5zaDoyNjk3IGdpdC1ndWkuc2g6MzA5MiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEwMQorbXNnaWQgIlJlc2NhbiIKK21zZ3N0ciAiU8O2ayBww6Ugbnl0dCIKKworIzogZ2l0LWd1aS5zaDoyNzAzCittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICJLw7ZhIGbDtnIgaW5jaGVja25pbmciCisKKyM6IGdpdC1ndWkuc2g6MjcwOQorbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgorbXNnc3RyICJLw7ZhIMOkbmRyYWRlIGZpbGVyIGbDtnIgaW5jaGVja25pbmciCisKKyM6IGdpdC1ndWkuc2g6MjcxNQorbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCittc2dzdHIgIlRhIGJvcnQgZnLDpW4gaW5jaGVja25pbmdza8O2IgorCisjOiBnaXQtZ3VpLnNoOjI3MjEgbGliL2luZGV4LnRjbDo0MTUKK21zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgw6RuZHJpbmdhciIKKworIzogZ2l0LWd1aS5zaDoyNzI5IGdpdC1ndWkuc2g6MzM5MSBnaXQtZ3VpLnNoOjM0MjIKK21zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKK21zZ3N0ciAiVmlzYSBtaW5kcmUgc2FtbWFuaGFuZyIKKworIzogZ2l0LWd1aS5zaDoyNzMzIGdpdC1ndWkuc2g6MzM5NSBnaXQtZ3VpLnNoOjM0MjYKK21zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKK21zZ3N0ciAiVmlzYSBtZXIgc2FtbWFuaGFuZyIKKworIzogZ2l0LWd1aS5zaDoyNzQwIGdpdC1ndWkuc2g6MzEwNSBnaXQtZ3VpLnNoOjMyMTQKK21zZ2lkICJTaWduIE9mZiIKK21zZ3N0ciAiU2tyaXYgdW5kZXIiCisKKyM6IGdpdC1ndWkuc2g6Mjc1NgorbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgorbXNnc3RyICJMb2thbCBzYW1tYW5zbGFnbmluZy4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzYxCittc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCittc2dzdHIgIkF2YnJ5dCBzYW1tYW5zbGFnbmluZy4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzczIGdpdC1ndWkuc2g6MjgwMQorbXNnaWQgIkFkZC4uLiIKK21zZ3N0ciAiTMOkZ2cgdGlsbC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzc3Cittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAiU8OkbmQuLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc4MQorbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCittc2dzdHIgIlRhIGJvcnQgZ3Jlbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzkxIGdpdC1ndWkuc2g6MzM3MworbXNnaWQgIk9wdGlvbnMuLi4iCittc2dzdHIgIkFsdGVybmF0aXYuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjgwMgorbXNnaWQgIlJlbW92ZS4uLiIKK21zZ3N0ciAiVGEgYm9ydC4uLiIKKworIzogZ2l0LWd1aS5zaDoyODExIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKK21zZ2lkICJIZWxwIgorbXNnc3RyICJIasOkbHAiCisKKyM6IGdpdC1ndWkuc2g6MjgxNSBnaXQtZ3VpLnNoOjI4MTkgbGliL2Fib3V0LnRjbDoxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgIk9tICVzIgorCisjOiBnaXQtZ3VpLnNoOjI4NDMKK21zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKK21zZ3N0ciAiV2ViYmRva3VtZW50YXRpb24iCisKKyM6IGdpdC1ndWkuc2g6Mjg0NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKK21zZ2lkICJTaG93IFNTSCBLZXkiCittc2dzdHIgIlZpc2EgU1NILW55Y2tlbCIKKworIzogZ2l0LWd1aS5zaDoyOTY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyLDtmRlc2RpZ2VydDoga3VuZGUgaW50ZSB0YSBzdGF0dXMgcMOlIHPDtmt2w6RnZW4gJXM6IEZpbCBlbGxlciBrYXRhbG9nIHNha25hcyIKKworIzogZ2l0LWd1aS5zaDoyOTk3Cittc2dpZCAiQ3VycmVudCBCcmFuY2g6IgorbXNnc3RyICJBa3R1ZWxsIGdyZW46IgorCisjOiBnaXQtZ3VpLnNoOjMwMjMKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICJLw7ZhZGUgw6RuZHJpbmdhciAoa29tbWVyIGF0dCBjaGVja2FzIGluKSIKKworIzogZ2l0LWd1aS5zaDozMDQzCittc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKK21zZ3N0ciAiT2vDtmFkZSDDpG5kcmluZ2FyIgorCisjOiBnaXQtZ3VpLnNoOjMwOTgKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIgorbXNnc3RyICJLw7ZhIMOkbmRyYWRlIgorCisjOiBnaXQtZ3VpLnNoOjMxMTcgbGliL3RyYW5zcG9ydC50Y2w6MTA3IGxpYi90cmFuc3BvcnQudGNsOjE5NgorbXNnaWQgIlB1c2giCittc2dzdHIgIlPDpG5kIgorCisjOiBnaXQtZ3VpLnNoOjMxNTIKK21zZ2lkICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiSW5sZWRhbmRlIGluY2hlY2tuaW5nc21lZGRlbGFuZGU6IgorCisjOiBnaXQtZ3VpLnNoOjMxNTMKK21zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiVXTDtmthdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKKworIzogZ2l0LWd1aS5zaDozMTU0Cittc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiVXTDtmthdCBpbmxlZGFuZGUgaW5jaGVja25pbmdzbWVkZGVsYW5kZToiCisKKyM6IGdpdC1ndWkuc2g6MzE1NQorbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJVdMO2a2F0IGluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBzYW1tYW5zbGFnbmluZzoiCisKKyM6IGdpdC1ndWkuc2g6MzE1NgorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZSBmw7ZyIHNhbW1hbnNsYWduaW5nOiIKKworIzogZ2l0LWd1aS5zaDozMTU3Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJJbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKKworIzogZ2l0LWd1aS5zaDozMjA2IGdpdC1ndWkuc2g6MzM0OCBsaWIvY29uc29sZS50Y2w6NzMKK21zZ2lkICJDb3B5IEFsbCIKK21zZ3N0ciAiS29waWVyYSBhbGxhIgorCisjOiBnaXQtZ3VpLnNoOjMyMzAgbGliL2JsYW1lLnRjbDoxMDQKK21zZ2lkICJGaWxlOiIKK21zZ3N0ciAiRmlsOiIKKworIzogZ2l0LWd1aS5zaDozMzM2Cittc2dpZCAiUmVmcmVzaCIKK21zZ3N0ciAiVXBwZGF0ZXJhIgorCisjOiBnaXQtZ3VpLnNoOjMzNTcKK21zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIk1pbnNrYSB0ZWNrZW5zbml0dHNzdG9ybGVrIgorCisjOiBnaXQtZ3VpLnNoOjMzNjEKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIsOWa2EgdGVja2Vuc25pdHRzc3RvcmxlayIKKworIzogZ2l0LWd1aS5zaDozMzY5IGxpYi9ibGFtZS50Y2w6MjgxCittc2dpZCAiRW5jb2RpbmciCittc2dzdHIgIlRlY2tlbmtvZG5pbmciCisKKyM6IGdpdC1ndWkuc2g6MzM4MAorbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKK21zZ3N0ciAiQW52w6RuZC/DpXRlcnN0w6RsbCBkZWwiCisKKyM6IGdpdC1ndWkuc2g6MzM4NQorbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKK21zZ3N0ciAiQW52w6RuZC/DpXRlcnN0w6RsbCByYWQiCisKKyM6IGdpdC1ndWkuc2g6MzQwNAorbXNnaWQgIlJ1biBNZXJnZSBUb29sIgorbXNnc3RyICJTdGFydGEgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nIgorCisjOiBnaXQtZ3VpLnNoOjM0MDkKK21zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCittc2dzdHIgIkFudsOkbmQgdmVyc2lvbmVuIGZyw6VuIGZqw6RycmFya2l2ZXQiCisKKyM6IGdpdC1ndWkuc2g6MzQxMworbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICJBbnbDpG5kIGxva2FsYSB2ZXJzaW9uZW4iCisKKyM6IGdpdC1ndWkuc2g6MzQxNworbXNnaWQgIlJldmVydCBUbyBCYXNlIgorbXNnc3RyICLDhXRlcnN0w6RsbCB0aWxsIGJhc3ZlcnNpb25lbiIKKworIzogZ2l0LWd1aS5zaDozNDM1Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiVmlzdWFsaXNlcmEgw6RuZHJpbmdhcm5hIGkgdW5kZXJtb2R1bGVuIgorCisjOiBnaXQtZ3VpLnNoOjM0MzkKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWaXN1YWxpc2VyYSBncmVuZW5zIGhpc3RvcmlrIGkgdW5kZXJtb2R1bGVuIgorCisjOiBnaXQtZ3VpLnNoOjM0NDMKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZpc3VhbGlzZXJhIGFsbGEgZ3JlbmFycyBoaXN0b3JpayBpIHVuZGVybW9kdWxlbiIKKworIzogZ2l0LWd1aS5zaDozNDQ4Cittc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJTdGFydGEgZ2l0IGd1aSBpIHVuZGVybW9kdWxlbiIKKworIzogZ2l0LWd1aS5zaDozNDgzCittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICJUYSBib3J0IGRlbCB1ciBpbmNoZWNrbmluZ3Nrw7YiCisKKyM6IGdpdC1ndWkuc2g6MzQ4NQorbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCittc2dzdHIgIlRhIGJvcnQgcmFkZXIgdXIgaW5jaGVja25pbmdza8O2IgorCisjOiBnaXQtZ3VpLnNoOjM0ODcKK21zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCittc2dzdHIgIlRhIGJvcnQgcmFkIHVyIGluY2hlY2tuaW5nc2vDtiIKKworIzogZ2l0LWd1aS5zaDozNDkwCittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICJTdMOkbGwgZGVsIGkgaW5jaGVja25pbmdza8O2IgorCisjOiBnaXQtZ3VpLnNoOjM0OTIKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICJTdMOkbGwgcmFkZXIgaSBpbmNoZWNrbmluZ3Nrw7YiCisKKyM6IGdpdC1ndWkuc2g6MzQ5NAorbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAiU3TDpGxsIHJhZCBpIGluY2hlY2tuaW5nc2vDtiIKKworIzogZ2l0LWd1aS5zaDozNTE5Cittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJJbml0aWVyYXIuLi4iCisKKyM6IGdpdC1ndWkuc2g6MzY1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJQb3NzaWJsZSBlbnZpcm9ubWVudCBpc3N1ZXMgZXhpc3QuXG4iCisiXG4iCisiVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHByb2JhYmx5XG4iCisiZ29pbmcgdG8gYmUgaWdub3JlZCBieSBhbnkgR2l0IHN1YnByb2Nlc3MgcnVuXG4iCisiYnkgJXM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJEZXQgZmlubnMgbcO2amxpZ2EgcHJvYmxlbSBtZWQgbWlsasO2dmFyaWFibGVyLlxuIgorIlxuIgorIkbDtmxqYW5kZSBtaWxqw7Z2YXJpYWJsZXIga29tbWVyIHRyb2xpZ2VuIGF0dFxuIgorImlnbm9yZXJhcyBhdiBhbGxhIEdpdC11bmRlcnByb2Nlc3NlciBzb20ga8O2cnNcbiIKKyJhdiAlczpcbiIKKyJcbiIKKworIzogZ2l0LWd1aS5zaDozNjg3Cittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJEZXR0YSBiZXJvciBww6UgZXR0IGvDpG50IHByb2JsZW0gbWVkXG4iCisiVGNsLWJpbsOkcmVuIHNvbSBmw7ZsamVyIG1lZCBDeWd3aW4uIgorCisjOiBnaXQtZ3VpLnNoOjM2OTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgorImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgorInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCisifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJEdSBrYW4gZXJzw6R0dGEgJXNcbiIKKyJtZWQgYXR0IGzDpGdnYSBpbiB2w6RyZGVuIGbDtnIgaW5zdMOkbGxuaW5nYXJuYVxuIgorInVzZXIubmFtZSBvY2ggdXNlci5lbWFpbCBpIGRpbiBwZXJzb25saWdhXG4iCisifi8uZ2l0Y29uZmlnLWZpbC5cbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtIGV0dCBncmFmaXNrdCBhbnbDpG5kYXJncsOkbnNzbml0dCBmw7ZyIEdpdC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzIKK21zZ2lkICJGaWxlIFZpZXdlciIKK21zZ3N0ciAiRmlsdmlzYXJlIgorCisjOiBsaWIvYmxhbWUudGNsOjc4Cittc2dpZCAiQ29tbWl0OiIKK21zZ3N0ciAiSW5jaGVja25pbmc6IgorCisjOiBsaWIvYmxhbWUudGNsOjI3MQorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICJLb3BpZXJhIGluY2hlY2tuaW5nIgorCisjOiBsaWIvYmxhbWUudGNsOjI3NQorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAiU8O2ayB0ZXh0Li4uIgorCisjOiBsaWIvYmxhbWUudGNsOjI4NAorbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCittc2dzdHIgIkfDtnIgZnVsbCBrb3BpZXJpbmdzaWdlbmvDpG5uaW5nIgorCisjOiBsaWIvYmxhbWUudGNsOjI4OAorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICJWaXNhIGhpc3Rvcmlrc2FtbWFuaGFuZyIKKworIzogbGliL2JsYW1lLnRjbDoyOTEKK21zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgorbXNnc3RyICJLbGFuZHJhIGbDtnLDpGxkcmFpbmNoZWNrbmluZyIKKworIzogbGliL2JsYW1lLnRjbDo0NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZWFkaW5nICVzLi4uIgorbXNnc3RyICJMw6RzZXIgJXMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTgxCittc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIkzDpHNlciBhbm5vdGVyaW5nYXIgZsO2ciBrb3BpZXJpbmcvZmx5dHRuaW5nLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjYwMQorbXNnaWQgImxpbmVzIGFubm90YXRlZCIKK21zZ3N0ciAicmFkZXIgYW5ub3RlcmFkZSIKKworIzogbGliL2JsYW1lLnRjbDo3OTMKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICJMw6RzZXIgaW4gYW5ub3RlcmluZyBhdiBvcmlnaW5hbHBsYWNlcmluZy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo3OTYKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAiQW5ub3RlcmluZyBmdWxsYm9yZGFkLiIKKworIzogbGliL2JsYW1lLnRjbDo4MjYKK21zZ2lkICJCdXN5IgorbXNnc3RyICJVcHB0YWdlbiIKKworIzogbGliL2JsYW1lLnRjbDo4MjcKK21zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKK21zZ3N0ciAiQW5ub3RlcmluZ3Nwcm9jZXNzIGvDtnJzIHJlZGFuLiIKKworIzogbGliL2JsYW1lLnRjbDo4NjYKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICJLw7ZyIGdydW5kbGlnIGtvcGllcmluZ3NpZ2Vua8Okbm5pbmcuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6OTM0Cittc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgorbXNnc3RyICJMw6RzZXIgaW4gYW5ub3RlcmluZy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo5ODcKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJGw7ZyZmF0dGFyZToiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTkxCittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiSW5jaGVja2FyZToiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTk2Cittc2dpZCAiT3JpZ2luYWwgRmlsZToiCittc2dzdHIgIlVyc3BydW5nbGlnIGZpbDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA0NAorbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKK21zZ3N0ciAiSGl0dGFyIGludGUgaW5jaGVja25pbmcgZsO2ciBIRUFEOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDk5Cittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgIkhpdHRhciBpbnRlIGbDtnLDpGxkcmFpbmNoZWNrbmluZzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTExNAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAiS2FuIGludGUgdmlzYSBmw7Zyw6RsZGVyIgorCisjOiBsaWIvYmxhbWUudGNsOjExMTUgbGliL2RpZmYudGNsOjMyMworbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgIkZlbCB2aWQgaW5sw6RzbmluZyBhdiBkaWZmZXJlbnM6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyNTUKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAiVXJzcHJ1bmdsaWdlbiBhdjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI2MQorbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICJJIGZpbGVuOiIKKworIzogbGliL2JsYW1lLnRjbDoxMjY2Cittc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgorbXNnc3RyICJLb3BpZXJhZCBlbGxlciBmbHl0dGFkIGhpdCBhdjoiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE2IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIxCittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICJDaGVja2EgdXQgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjYKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiQ2hlY2thIHV0IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMCBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzcKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI4NgorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0NSBsaWIvbWVyZ2UudGNsOjE3MgorIzogbGliL29wdGlvbi50Y2w6MTI3IGxpYi9yZW1vdGVfYWRkLnRjbDozNCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQzCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0MSBsaWIvdG9vbHNfZGxnLnRjbDoyMDIgbGliL3Rvb2xzX2RsZy50Y2w6MzQ1CisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTEKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkF2YnJ5dCIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzUgbGliL2Jyb3dzZXIudGNsOjI5MSBsaWIvdG9vbHNfZGxnLnRjbDozMjEKK21zZ2lkICJSZXZpc2lvbiIKK21zZ3N0ciAiUmV2aXNpb24iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDoyODcKK21zZ2lkICJPcHRpb25zIgorbXNnc3RyICJBbHRlcm5hdGl2IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0MiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKK21zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCittc2dzdHIgIkjDpG10YSBzcMOlcmFuZGUgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDcKK21zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCittc2dzdHIgIktvcHBsYSBib3J0IGZyw6VuIGxva2FsIGdyZW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMworbXNnaWQgIkNyZWF0ZSBCcmFuY2giCittc2dzdHIgIlNrYXBhIGdyZW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyOAorbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgorbXNnc3RyICJTa2FwYSBueSBncmVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlNrYXBhIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDIKK21zZ2lkICJCcmFuY2ggTmFtZSIKK21zZ3N0ciAiTmFtbiBww6UgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQ0IGxpYi9yZW1vdGVfYWRkLnRjbDo0MSBsaWIvdG9vbHNfZGxnLnRjbDo1MQorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOYW1uOiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU3Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCittc2dzdHIgIkFudsOkbmQgbmFtbiBww6Ugc3DDpXJhZCBncmVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKK21zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKK21zZ3N0ciAiSW5sZWRhbmRlIHJldmlzaW9uIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKK21zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKK21zZ3N0ciAiVXBwZGF0ZXJhIGJlZmludGxpZyBncmVuOiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Cittc2dpZCAiTm8iCittc2dzdHIgIk5laiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCittc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCittc2dzdHIgIkVuZGFzdCBzbmFiYnNwb2xuaW5nIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NworbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgorbXNnc3RyICJDaGVja2EgdXQgbsOkciBza2FwYWQiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzIKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKK21zZ3N0ciAiVsOkbGogZW4gZ3JlbiBhdHQgc3DDpXJhLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiRGVuIHNww6VyYWRlIGdyZW5lbiAlcyDDpHIgaW50ZSBlbiBncmVuIGkgZmrDpHJyYXJraXZldC4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjkyCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiQW5nZSBldHQgbmFtbiBmw7ZyIGdyZW5lbi4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjUgbGliL2JyYW5jaF9yZW5hbWUudGNsOjExMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgorbXNnc3RyICJcIiVzXCIga2FuIGludGUgYW52w6RuZGFzIHNvbSBuYW1uIHDDpSBncmVuZW4uIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTYKK21zZ2lkICJEZWxldGUgQnJhbmNoIgorbXNnc3RyICJUYSBib3J0IGdyZW4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMQorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgIlRhIGJvcnQgbG9rYWwgZ3JlbiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM5Cittc2dpZCAiTG9jYWwgQnJhbmNoZXMiCittc2dzdHIgIkxva2FsYSBncmVuYXIiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MQorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgorbXNnc3RyICJUYSBiYXJhIGJvcnQgb20gc2FtbWFuc2xhZ2VuIG1lZCIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUzIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTIwCittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICJBbGx0aWQgKHV0ZsO2ciBpbnRlIHNhbW1hbnNsYWduaW5nc3Rlc3QpIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgorbXNnc3RyICJGw7ZsamFuZGUgZ3JlbmFyIMOkciBpbnRlIHRpbGwgZnVsbG8gc2FtbWFuc2xhZ25hIG1lZCAlczoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTgKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAiIgorIkRldCBrYW4gdmFyYSBzdsOlcnQgYXR0IMOldGVyc3TDpGxsYSBib3J0dGFnbmEgZ3JlbmFyLlxuIgorIlxuIgorIlRhIGJvcnQgZGUgdmFsZGEgZ3JlbmFybmE/IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIHRhIGJvcnQgZ3JlbmFyOlxuIgorIiVzIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTUgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIzCittc2dpZCAiUmVuYW1lIEJyYW5jaCIKK21zZ3N0ciAiQnl0IG5hbW4gcMOlIGdyZW4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyOAorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAiQnl0IG5hbW4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOAorbXNnaWQgIkJyYW5jaDoiCittc2dzdHIgIkdyZW46IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NDYKK21zZ2lkICJOZXcgTmFtZToiCittc2dzdHIgIk55dHQgbmFtbjoiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4MQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKK21zZ3N0ciAiVsOkbGogZW4gZ3JlbiBhdHQgYnl0YSBuYW1uIHDDpS4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMDIgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkdyZW5lbiBcIiVzXCIgZmlubnMgcmVkYW4uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBieXRhIG5hbW4gcMOlIFwiJXNcIi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICJTdGFydGFyLi4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjcKK21zZ2lkICJGaWxlIEJyb3dzZXIiCittc2dzdHIgIkZpbGJsw6RkZHJhcmUiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxMjYgbGliL2Jyb3dzZXIudGNsOjE0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgJXMuLi4iCittc2dzdHIgIkzDpHNlciAlcy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE4NworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJbVXBwIHRpbGwgZsO2csOkbGRlcl0iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNjkgbGliL2Jyb3dzZXIudGNsOjI3NgorbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCittc2dzdHIgIkJsw6RkZHJhIGZpbGVyIHDDpSBncmVuZW4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyODIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MDQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjcKK21zZ2lkICJCcm93c2UiCittc2dzdHIgIkJsw6RkZHJhIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAiSMOkbXRhciAlcyBmcsOlbiAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgIsO2ZGVzZGlnZXJ0OiBLdW5kZSBpbnRlIHNsw6UgdXBwICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMAorIzogbGliL3NzaGtleS50Y2w6NTUKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiU3TDpG5nIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyBpbnRlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICJLdW5kZSBpbnRlIGtvbmZpZ3VyZXJhIGbDtnJlbmtsYWQgZ2l0LXB1bGwgZsO2ciAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCisiXG4iCisiSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKKyJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAiIgorIkdyZW5lbiBcIiVzXCIgZmlubnMgcmVkYW4uXG4iCisiXG4iCisiRGVuIGthbiBpbnRlIHNuYWJic3BvbGFzIHRpbGwgJXMuXG4iCisiRW4gc2FtbWFuc2xhZ25pbmcga3LDpHZzLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJTYW1tYW5zbGFnbmluZ3NzdHJhdGVnaW4gXCIlc1wiIHN0w7ZkcyBpbnRlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCB1cHBkYXRlcmEgXCIlc1wiLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKK21zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCittc2dzdHIgIkvDtm9tcsOlZGV0IChpbmRleCkgw6RyIHJlZGFuIGzDpXN0LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIkRldCBzZW5hc3RlIGlubMOkc3RhIHRpbGxzdMOlbmRldCBtb3RzdmFyYXIgaW50ZSB0aWxsc3TDpW5kZXQgaSBhcmtpdmV0LlxuIgorIlxuIgorIkV0dCBhbm5hdCBHaXQtcHJvZ3JhbSBoYXIgw6RuZHJhdCBhcmtpdmV0IHNlZGFuIHNlbmFzdGUgYXZzw7ZrbmluZ2VuLiBEdSBtw6VzdGUgIgorInV0ZsO2cmEgZW4gbnkgc8O2a25pbmcgaW5uYW4gZGVuIGFrdHVlbGxhIGdyZW5lbiBrYW4gw6RuZHJhcy5cbiIKKyJcbiIKKyJTw7ZrbmluZ2VuIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgorbXNnc3RyICJVcHBkYXRlcmFyIGFyYmV0c2thdGFsb2dlbiB0aWxsIFwiJXNcIi4uLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKK21zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKK21zZ3N0ciAiZmlsZXIgdXRjaGVja2FkZSIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICJBdmJyeXRlciB1dGNoZWNrbmluZyBhdiBcIiVzXCIgKHNhbW1hbnNsYWduaW5nIHDDpSBmaWxuaXbDpSBrcsOkdnMpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKK21zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKK21zZ3N0ciAiU2FtbWFuc2xhZ25pbmcgcMOlIGZpbG5pdsOlIGtyw6R2cy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCittc2dzdHIgIlN0YW5uYXIgcMOlIGdyZW5lbiBcIiVzXCIuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgorbXNnaWQgIiIKKyJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKKyJDaGVja291dCcuIgorbXNnc3RyICIiCisiRHUgw6RyIGludGUgbMOkbmdyZSBww6UgZW4gbG9rYWwgZ3Jlbi5cbiIKKyJcbiIKKyJPbSBkdSB2aWxsZSB2YXJhIHDDpSBlbiBncmVuIHNrYXBhciBkdSBlbiBudSwgYmFzZXJhZCBww6UgXCJEZW5uYSBmcsOlbmtvcHBsYWRlICIKKyJ1dGNoZWNrbmluZ1wiLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDMgbGliL2NoZWNrb3V0X29wLnRjbDo1MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaGVja2VkIG91dCAnJXMnLiIKK21zZ3N0ciAiQ2hlY2thZGUgdXQgXCIlc1wiLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorbXNnc3RyICIiCisiT20gZHUgw6V0ZXJzdMOkbGxlciBcIiVzXCIgdGlsbCBcIiVzXCIgZ8OlciBmw7ZsamFuZGUgaW5jaGVja25pbmdhciBmw7ZybG9yYWRlOiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTcKK21zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgorbXNnc3RyICJEZXQga2Fuc2tlIGludGUgw6RyIHPDpSBlbmtlbHQgYXR0IMOldGVyc2thcGEgZsO2cmxvcmFkZSBpbmNoZWNrbmluZ2FyLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAnJXMnPyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxhIFwiJXNcIj8iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTY3IGxpYi9tZXJnZS50Y2w6MTY0IGxpYi90b29sc19kbGcudGNsOjMzNgorbXNnaWQgIlZpc3VhbGl6ZSIKK21zZ3N0ciAiVmlzdWFsaXNlcmEiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgc3TDpGxsYSBpbiBha3R1ZWxsIGdyZW4uXG4iCisiXG4iCisiQXJiZXRza2F0YWxvZ2VuIGhhciBiYXJhIHbDpHhsYXRzIGRlbHZpcy4gVmkgdXBwZGF0ZXJhZGUgZmlsZXJuYSB1dGFuICIKKyJwcm9ibGVtLCBtZW4ga3VuZGUgaW50ZSB1cHBkYXRlcmEgZW4gaW50ZXJuIGZpbCBpIEdpdC5cbiIKKyJcbiIKKyJEZXR0YSBza3VsbGUgaW50ZSBoYSBow6RudC4gJXMga29tbWVyIG51IHN0w6RuZ2FzIG9jaCBnZSB1cHAuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJWw6RsaiIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo1NQorbXNnaWQgIkZvbnQgRmFtaWx5IgorbXNnc3RyICJUZWNrZW5zbml0dHNmYW1pbGoiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIlN0b3JsZWsiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTMKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgIkV4ZW1wZWwiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTA1Cittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyJEZXR0YSDDpHIgZW4gZXhlbXBlbHRleHQuXG4iCisiT20gZHUgdHlja2VyIG9tIGRlbiBow6RyIHRleHRlbiBrYW4gZGVuIHZhcmEgZGl0dCB0ZWNrZW5zbml0dC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICJHaXQgR3VpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk0Cittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICJTa2FwYSBueXR0IGFya2l2IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzCittc2dpZCAiTmV3Li4uIgorbXNnc3RyICJOeXR0Li4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OAorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIktsb25hIGJlZmludGxpZ3QgYXJraXYiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExCittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIktsb25hLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExOCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTcKK21zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIsOWcHBuYSBiZWZpbnRsaWd0IGFya2l2IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyNAorbXNnaWQgIk9wZW4uLi4iCittc2dzdHIgIsOWcHBuYS4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzcKK21zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJTZW5hc3RlIGFya2l2ZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTQzCittc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCittc2dzdHIgIsOWcHBuYSB0aWRpZ2FyZSBhcmtpdjoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEgYXJraXZldCAlczoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk5Cittc2dpZCAiRGlyZWN0b3J5OiIKK21zZ3N0ciAiS2F0YWxvZzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDI5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTEKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAiR2l0YXJraXYiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDU0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiS2F0YWxvZ2VuICVzIGZpbm5zIHJlZGFuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiRmlsZW4gJXMgZmlubnMgcmVkYW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MworbXNnaWQgIkNsb25lIgorbXNnc3RyICJLbG9uYSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODYKK21zZ2lkICJTb3VyY2UgTG9jYXRpb246IgorbXNnc3RyICJQbGF0cyBmw7ZyIGvDpGxsa29kOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTUKK21zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKK21zZ3N0ciAiTcOlbGthdGFsb2c6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNQorbXNnaWQgIkNsb25lIFR5cGU6IgorbXNnc3RyICJUeXAgYXYga2xvbjoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTEwCittc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorbXNnc3RyICJTdGFuZGFyZCAoc25hYmIsIHNlbWlyZWR1bmRhbnQsIGjDpXJkYSBsw6Rua2FyKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTUKK21zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCittc2dzdHIgIkZ1bGwga29waWEgKGzDpW5nc2FtbWFyZSwgcmVkdW5kYW50IHPDpGtlcmhldHNrb3BpYSkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIwCittc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCittc2dzdHIgIkRlbGFkIChzbmFiYmFzdCwgcmVrb21tZW5kZXJhcyBlaiwgaW5nZW4gc8Oka2VyaGV0c2tvcGlhKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICJJbnRlIGV0dCBHaXRhcmtpdjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCittc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJTdGFuZGFyZCDDpHIgZW5kYXN0IHRpbGxnw6RuZ2xpZ3QgZsO2ciBsb2thbGEgYXJraXYuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NgorbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIkRlbGF0IMOkciBlbmRhc3QgdGlsbGfDpG5nbGlndCBmw7ZyIGxva2FsYSBhcmtpdi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJQbGF0c2VuICVzIGZpbm5zIHJlZGFuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBrb25maWd1cmVyYSB1cnNwcnVuZyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDAKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJSw6RrbmFyIG9iamVrdCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDEKK21zZ2lkICJidWNrZXRzIgorbXNnc3RyICJoaW5rYXIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGtvcGllcmEgb2JqZWt0L2luZm8vYWx0ZXJuYXRpdjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKK21zZ3N0ciAiSW5nZW50aW5nIGF0dCBrbG9uYSBmcsOlbiAlcy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOQorbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKK21zZ3N0ciAiR3JlbmVuIFwibWFzdGVyXCIgaGFyIGludGUgaW5pdGllcmF0cy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2Cittc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKK21zZ3N0ciAiSMOlcmRhIGzDpG5rYXIgw6RyIGludGUgdGlsbGfDpG5nbGlnYS4gRmFsbGVyIHRpbGxiYWthIHDDpSBrb3BpZXJpbmcuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAiS2xvbmFyIGZyw6VuICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQorbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKK21zZ3N0ciAiS29waWVyYXIgb2JqZWt0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAorbXNnaWQgIktpQiIKK21zZ3N0ciAiS2lCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgIkt1bmRlIGludGUga29waWVyYSBvYmpla3Q6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NAorbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKK21zZ3N0ciAiTMOkbmthciBvYmpla3QiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk1Cittc2dpZCAib2JqZWN0cyIKK21zZ3N0ciAib2JqZWt0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGjDpXJkbMOkbmthIG9iamVrdDogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4Cittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgZ3JlbmFyIG9jaCBvYmpla3QuIFNlIGtvbnNvbHV0ZGF0YSBmw7ZyIGRldGFsamVyLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKK21zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIkt1bmRlIGludGUgaMOkbXRhIHRhZ2dhci4gU2Uga29uc29sdXRkYXRhIGbDtnIgZGV0YWxqZXIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5MworbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIkt1bmRlIGludGUgYXZnw7ZyYSBIRUFELiBTZSBrb25zb2x1dGRhdGEgZsO2ciBkZXRhbGplci4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCittc2dzdHIgIkt1bmRlIGludGUgc3TDpGRhIHVwcCAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDgKK21zZ2lkICJDbG9uZSBmYWlsZWQuIgorbXNnc3RyICJLbG9uaW5nIG1pc3NseWNrYWRlcy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE1Cittc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgorbXNnc3RyICJIw6RtdGFkZSBpbmdlbiBzdGFuZGFyZGdyZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzbMOlIHVwcCAlcyB0aWxsIG7DpWdvbiBpbmNoZWNrbmluZy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Cittc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIlNrYXBhciBhcmJldHNrYXRhbG9nIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOSBsaWIvaW5kZXgudGNsOjcwIGxpYi9pbmRleC50Y2w6MTMzCisjOiBsaWIvaW5kZXgudGNsOjIwMQorbXNnaWQgImZpbGVzIgorbXNnc3RyICJmaWxlciIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKK21zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKK21zZ3N0ciAiSW5sZWRhbmRlIGZpbHV0Y2hlY2tuaW5nIG1pc3NseWNrYWRlcy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMgorbXNnaWQgIk9wZW4iCittc2dzdHIgIsOWcHBuYSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIyCittc2dpZCAiUmVwb3NpdG9yeToiCittc2dzdHIgIkFya2l2OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIGFya2l2ZXQgJXM6IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTIKK21zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgorbXNnc3RyICJEZW5uYSBmcsOlbmtvcHBsYWRlIHV0Y2hlY2tuaW5nIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAiUmV2aXNpb25zdXR0cnljazoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3MgorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAiTG9rYWwgZ3JlbiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc3Cittc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJTcMOlcmFuZGUgZ3JlbiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjgyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDMKK21zZ2lkICJUYWciCittc2dzdHIgIlRhZ2ciCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAiT2dpbHRpZyByZXZpc2lvbjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDIKK21zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCittc2dzdHIgIkluZ2VuIHJldmlzaW9uIHZhbGQuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgIlJldmlzaW9uc3V0dHJ5Y2tldCDDpHIgdG9tdC4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzYKK21zZ2lkICJVcGRhdGVkIgorbXNnc3RyICJVcHBkYXRlcmFkIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTY0Cittc2dpZCAiVVJMIgorbXNnc3RyICJXZWJiYWRyZXNzIgorCisjOiBsaWIvY29tbWl0LnRjbDo5Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiXG4iCisiWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKKyJ0byBhbWVuZC5cbiIKK21zZ3N0ciAiIgorIkRldCBmaW5ucyBpbmdlbnRpbmcgYXR0IHV0w7ZrYS5cbiIKKyJcbiIKKyJEdSBow6VsbGVyIHDDpSBhdHQgc2thcGEgZGVuIGlubGVkYW5kZSBpbmNoZWNrbmluZ2VuLiBEZXQgZmlubnMgaW5nZW4gdGlkaWdhcmUgIgorImluY2hlY2tuaW5nIGF0dCB1dMO2a2EuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisiS2FuIGludGUgdXTDtmthIHZpZCBzYW1tYW5zbGFnbmluZy5cbiIKKyJcbiIKKyJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4gc2FtbWFuc2xhZ25pbmcgc29tIGludGUgw6RyIGZ1bGxib3JkYWQuIER1IGthbiBpbnRlICIKKyJ1dMO2a2EgdGlkaWdhcmUgaW5jaGVja25pbmdhciBvbSBkdSBpbnRlIGbDtnJzdCBhdmJyeXRlciBkZW4gcMOlZ8OlZW5kZSAiCisic2FtbWFuc2xhZ25pbmdlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6NDgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCittc2dzdHIgIkZlbCB2aWQgaW5sw6RzbmluZyBhdiBpbmNoZWNrbmluZ3NkYXRhIGbDtnIgdXTDtmtuaW5nOiIKKworIzogbGliL2NvbW1pdC50Y2w6NzUKK21zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgorbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSBkaW4gaWRlbnRpdGV0OiIKKworIzogbGliL2NvbW1pdC50Y2w6ODAKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICJGZWxha3RpZyBHSVRfQ09NTUlUVEVSX0lERU5UOiIKKworIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgInZhcm5pbmc6IFRjbCBzdMO2ZGVyIGludGUgdGVja2Vua29kbmluZ2VuIFwiJXNcIi4iCisKKyM6IGxpYi9jb21taXQudGNsOjE0OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKKyJcbiIKKyJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKKyJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGR1IGthbiBnw7ZyYSBlbiBueSBpbmNoZWNrbmluZy5cbiIKKyJcbiIKKyJTw7ZrbmluZ2VuIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyJPc2FtbWFuc2xhZ25hIGZpbGVyIGthbiBpbnRlIGNoZWNrYXMgaW4uXG4iCisiXG4iCisiRmlsZW4gJXMgaGFyIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0ZXIuIER1IG3DpXN0ZSBsw7ZzYSBkZW0gb2NoIGvDtmEgZmlsZW4gIgorImlubmFuIGR1IGNoZWNrYXIgaW4gZGVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyJPa8OkbmQgZmlsc3RhdHVzICVzIHVwcHTDpGNrdC5cbiIKKyJcbiIKKyJGaWxlbiAlcyBrYW4gaW50ZSBjaGVja2FzIGluIGF2IHByb2dyYW1tZXQuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4OAorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorbXNnc3RyICIiCisiSW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4uXG4iCisiXG4iCisiRHUgbcOlc3RlIGvDtmEgw6V0bWluc3RvbmUgZW4gZmlsIGlubmFuIGR1IGthbiBjaGVja2EgaW4uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjIwMworbXNnaWQgIiIKKyJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKKyJcbiIKKyItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCisiLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKKyItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCittc2dzdHIgIiIKKyJBbmdlIGV0dCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlLlxuIgorIlxuIgorIkV0dCBicmEgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBoYXIgZsO2bGphbmRlIGZvcm1hdDpcbiIKKyJcbiIKKyItIEbDtnJzdGEgcmFkZW46IEJlc2tyaXYgaSBlbiBtZW5pbmcgdmFkIGR1IGdqb3JkZS5cbiIKKyItIEFuZHJhIHJhZGVuOiBUb21cbiIKKyItIEbDtmxqYW5kZSByYWRlcjogQmVza3JpdiB2YXJmw7ZyIGRldCBow6RyIMOkciBlbiBicmEgw6RuZHJpbmcuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjIzNAorbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgorbXNnc3RyICJBbnJvcGFyIGtyb2tlbiBmw7ZyZSBpbmNoZWNrbmluZyAocHJlLWNvbW1pdCkuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI0OQorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgorbXNnc3RyICJJbmNoZWNrbmluZ2VuIGF2dmlzYWRlcyBhdiBrcm9rZW4gZsO2cmUgaW5jaGVja25pbmcgKHByZS1jb21taXQpLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjcyCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIkFucm9wYXIga3Jva2VuIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAoY29tbWl0LW1zZykuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI4NworbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgorbXNnc3RyICJJbmNoZWNrbmluZyBhdnZpc2FkIGF2IGtyb2tlbiBmw7ZyIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgKGNvbW1pdC1tc2cpLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzAwCittc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgorbXNnc3RyICJDaGVja2FyIGluIMOkbmRyaW5nYXIuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjMxNgorbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAid3JpdGUtdHJlZSBtaXNzbHlja2FkZXM6IgorCisjOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgorbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICJJbmNoZWNrbmluZ2VuIG1pc3NseWNrYWRlcy4iCisKKyM6IGxpYi9jb21taXQudGNsOjMzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgIkluY2hlY2tuaW5nZW4gJXMgdmVya2FyIHZhcmEgdHJhc2lnIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzkKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJJbmdhIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbi5cbiIKKyJcbiIKKyJJbmdhIGZpbGVyIMOkbmRyYWRlcyBhdiBpbmNoZWNrbmluZ2VuIG9jaCBkZXQgdmFyIGludGUgZW4gc2FtbWFuc2xhZ25pbmcuXG4iCisiXG4iCisiRW4gc8O2a25pbmcga29tbWVyIGF0dCBzdGFydGFzIGF1dG9tYXRpc2t0IG51LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNDYKK21zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCittc2dzdHIgIkluZ2Egw6RuZHJpbmdhciBhdHQgY2hlY2thIGluLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzYwCittc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAiY29tbWl0LXRyZWUgbWlzc2x5Y2thZGVzOiIKKworIzogbGliL2NvbW1pdC50Y2w6MzgxCittc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgorbXNnc3RyICJ1cGRhdGUtcmVmIG1pc3NseWNrYWRlczoiCisKKyM6IGxpYi9jb21taXQudGNsOjQ2OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKK21zZ3N0ciAiU2thcGFkZSBpbmNoZWNrbmluZ2VuICVzOiAlcyIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAiQXJiZXRhci4uLiB2w6RudGEuLi4iCisKKyM6IGxpYi9jb25zb2xlLnRjbDoxODYKK21zZ2lkICJTdWNjZXNzIgorbXNnc3RyICJMeWNrYWRlcyIKKworIzogbGliL2NvbnNvbGUudGNsOjIwMAorbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKK21zZ3N0ciAiRmVsOiBLb21tYW5kbyBtaXNzbHlja2FkZXMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDIKK21zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAiQW50YWwgbMO2c2Egb2JqZWt0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkRpc2t1dHJ5bW1lIGFudsOkbnQgYXYgbMO2c2Egb2JqZWt0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJBbnRhbCBwYWNrYWRlIG9iamVrdCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NQorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAiQW50YWwgcGFrZXQiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkRpc2t1dHJ5bW1lIGFudsOkbnQgYXYgcGFja2FkZSBvYmpla3QiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICJQYWNrYWRlIG9iamVrdCBzb20gdsOkbnRhciBww6Ugc3TDpGRuaW5nIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ4Cittc2dpZCAiR2FyYmFnZSBmaWxlcyIKK21zZ3N0ciAiU2tyw6RwZmlsZXIiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKK21zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJLb21wcmltZXJhciBvYmpla3RkYXRhYmFzZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKK21zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKK21zZ3N0ciAiVmVyaWZpZXJhciBvYmpla3RkYXRhYmFzZW4gbWVkIGZzY2stb2JqZWN0cyIKKworIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgorIlxuIgorIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgorInRoZSBkYXRhYmFzZS5cbiIKKyJcbiIKKyJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKK21zZ3N0ciAiIgorIkFya2l2ZXQgaGFyIGbDtnIgbsOkcnZhcmFuZGUgb21rcmluZyAlaSBsw7ZzYSBvYmpla3QuXG4iCisiXG4iCisiRsO2ciBhdHQgYmliZWjDpWxsYSBvcHRpbWFsIHByZXN0YW5kYSByZWtvbW1lbmRlcmFzIGRldCDDpSBkZXQgYmVzdMOkbWRhc3RlIGF0dCAiCisiZHUga29tcHJpbWVyYXIgZGF0YWJhc2VuLlxuIgorIlxuIgorIktvbXByaW1lcmEgZGF0YWJhc2VuIG51PyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAiT2dpbHRpZ3QgZGF0dW0gZnLDpW4gR2l0OiAlcyIKKworIzogbGliL2RpZmYudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgorIlxuIgorIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgorIlxuIgorIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKKyJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgorInRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAiIgorIkhpdHRhZGUgaW5nYSBza2lsbG5hZGVyLlxuIgorIlxuIgorIiVzIGlubmVow6VsbGVyIGluZ2Egw6RuZHJpbmdhci5cbiIKKyJcbiIKKyJNb2RpZmllcmluZ3NkYXR1bSBmw7ZyIGZpbGVuIHVwcGRhdGVyYWRlcyBhdiBldHQgYW5uYXQgcHJvZ3JhbSwgbWVuICIKKyJpbm5laMOlbGxldCBpIGZpbGVuIGhhciBpbnRlIMOkbmRyYXRzLlxuIgorIlxuIgorIkVuIHPDtmtuaW5nIGtvbW1lciBhdXRvbWF0aXNrdCBhdHQgc3RhcnRhcyBmw7ZyIGF0dCBoaXR0YSBhbmRyYSBmaWxlciBzb20ga2FuICIKKyJ2YXJhIGkgc2FtbWEgdGlsbHN0w6VuZC4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCittc2dzdHIgIkzDpHNlciBkaWZmZXJlbnMgZsO2ciAlcy4uLiIKKworIzogbGliL2RpZmYudGNsOjEyNQorbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiIgorIkxPS0FMOiBib3J0dGFnZW5cbiIKKyJGSsOEUlI6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzAKK21zZ2lkICIiCisiUkVNT1RFOiBkZWxldGVkXG4iCisiTE9DQUw6XG4iCittc2dzdHIgIiIKKyJGSsOEUlI6IGJvcnR0YWdlblxuIgorIkxPS0FMOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTM3Cittc2dpZCAiTE9DQUw6XG4iCittc2dzdHIgIkxPS0FMOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTQwCittc2dpZCAiUkVNT1RFOlxuIgorbXNnc3RyICJGSsOEUlI6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgorbXNnc3RyICJLYW4gaW50ZSB2aXNhICVzIgorCisjOiBsaWIvZGlmZi50Y2w6MjAzCittc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKK21zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBhdiBmaWw6IgorCisjOiBsaWIvZGlmZi50Y2w6MjEwCittc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgorbXNnc3RyICJHaXRhcmtpdiAodW5kZXJwcm9qZWt0KSIKKworIzogbGliL2RpZmYudGNsOjIyMgorbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKK21zZ3N0ciAiKiBCaW7DpHJmaWwgKHZpc2FyIGludGUgaW5uZWjDpWxsZXQpLiIKKworIzogbGliL2RpZmYudGNsOjIyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgorIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgorbXNnc3RyICIiCisiKiBEZW4gb3Nww6VyYWRlIGZpbGVuIMOkciAlZCBieXRlLlxuIgorIiogVmlzYXIgZW5kYXN0IGlubGVkYW5kZSAlZCBieXRlLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgorIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKK21zZ3N0ciAiIgorIlxuIgorIiogRGVuIG9zcMOlcmFkZSBmaWxlbiBrbGlwcHRlcyBow6RyIGF2ICVzLlxuIgorIiogRsO2ciBhdHQgc2UgaGVsYSBmaWxlbiwgYW52w6RuZCBldHQgZXh0ZXJudCByZWRpZ2VyaW5nc3Byb2dyYW0uXG4iCisKKyM6IGxpYi9kaWZmLnRjbDo0ODUKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IGRlbiB2YWxkYSBkZWxlbiBmcsOlbiBrw7ZuLiIKKworIzogbGliL2RpZmYudGNsOjQ5MgorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCBkZW4gdmFsZGEgZGVsZW4gdGlsbCBrw7ZuLiIKKworIzogbGliL2RpZmYudGNsOjU3MQorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJLdW5kZSBpbnRlIHRhIGJvcnQgZGVuIHZhbGRhIHJhZGVuIGZyw6VuIGvDtm4uIgorCisjOiBsaWIvZGlmZi50Y2w6NTc5Cittc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIGRlbiB2YWxkYSByYWRlbiB0aWxsIGvDtm4uIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0MworbXNnaWQgIkRlZmF1bHQiCittc2dzdHIgIlN0YW5kYXJkIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN5c3RlbSAoJXMpIgorbXNnc3RyICJTeXN0ZW1ldHMgKCVzKSIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiQW5uYW4iCisKKyM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTYKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZmVsIgorCisjOiBsaWIvZXJyb3IudGNsOjM2Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAidmFybmluZyIKKworIzogbGliL2Vycm9yLnRjbDo5NgorbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCittc2dzdHIgIkR1IG3DpXN0ZSByw6R0dGEgdGlsbCBmZWxlbiBvdmFuIGlubmFuIGR1IGNoZWNrYXIgaW4uIgorCisjOiBsaWIvaW5kZXgudGNsOjYKK21zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCittc2dzdHIgIkt1bmRlIGludGUgbMOlc2EgdXBwIGluZGV4ZXQuIgorCisjOiBsaWIvaW5kZXgudGNsOjE3Cittc2dpZCAiSW5kZXggRXJyb3IiCittc2dzdHIgIkluZGV4ZmVsIgorCisjOiBsaWIvaW5kZXgudGNsOjE5Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMgbWVkIGF0dCB1cHBkYXRlcmEgR2l0aW5kZXhldC4gRW4gb21zw7ZrbmluZyBrb21tZXIgYXR0IHN0YXJ0YXMgIgorImF1dG9tYXRpc2t0IGbDtnIgYXR0IHN5bmtyb25pc2VyYSBvbSBnaXQtZ3VpLiIKKworIzogbGliL2luZGV4LnRjbDozMAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJGb3J0c8OkdHQiCisKKyM6IGxpYi9pbmRleC50Y2w6MzMKK21zZ2lkICJVbmxvY2sgSW5kZXgiCittc2dzdHIgIkzDpXMgdXBwIGluZGV4IgorCisjOiBsaWIvaW5kZXgudGNsOjI5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKK21zZ3N0ciAiVGFyIGJvcnQgJXMgZsO2ciBpbmNoZWNrbmluZ3Nrw7ZuIgorCisjOiBsaWIvaW5kZXgudGNsOjMzMQorbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCittc2dzdHIgIlJlZG8gYXR0IGNoZWNrYSBpbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgJXMiCisKKyM6IGxpYi9pbmRleC50Y2w6NDAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXJuYSBpIGZpbGVuICVzPyIKKworIzogbGliL2luZGV4LnRjbDo0MDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCittc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXJuYSBpIGRlc3NhICVpIGZpbGVyPyIKKworIzogbGliL2luZGV4LnRjbDo0MTEKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyJBbGxhIG9rw7ZhZGUgw6RuZHJpbmdhciBrb21tZXIgcGVybWFuZW50IGfDpSBmw7ZybG9yYWRlIHZpZCDDpXRlcnN0w6RsbG5pbmdlbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDE0Cittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAiR8O2ciBpbmdlbnRpbmciCisKKyM6IGxpYi9pbmRleC50Y2w6NDMyCittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICLDhXRlcnN0w6RsbGVyIHZhbGRhIGZpbGVyIgorCisjOiBsaWIvaW5kZXgudGNsOjQzNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyAlcyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxlciAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMworbXNnaWQgIiIKKyJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIHNsw6UgaWhvcCB2aWQgdXTDtmtuaW5nLlxuIgorIlxuIgorIkR1IG3DpXN0ZSBnw7ZyYSBmw6RyZGlnIHV0w7ZrbmluZ2VuIGF2IGluY2hlY2tuaW5nZW4gaW5uYW4gZHUgcMOlYsO2cmphciBuw6Vnb24gIgorInNsYWdzIHNhbW1hbnNsYWduaW5nLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKKyJcbiIKKyJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKKyJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGR1IGthbiB1dGbDtnJhIGVuIHNhbW1hbnNsYWduaW5nLlxuIgorIlxuIgorIlPDtmtuaW5nZW4ga29tbWVyIGF0dCBzdGFydGFzIGF1dG9tYXRpc2t0IG51LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIkR1IMOkciBtaXR0IGkgZW4gc2FtbWFuc2xhZ25pbmcgbWVkIGtvbmZsaWt0ZXIuXG4iCisiXG4iCisiRmlsZW4gJXMgaGFyIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0ZXIuXG4iCisiXG4iCisiRHUgbcOlc3RlIGzDtnNhIGRlbSwga8O2YSBmaWxlbiBvY2ggY2hlY2thIGluIGbDtnIgYXR0IGZ1bGxib3JkYSBkZW4gYWt0dWVsbGEgIgorInNhbW1hbnNsYWduaW5nZW4uIE7DpHIgZHUgZ2pvcnQgZGV0IGthbiBkdSBww6Viw7ZyamEgZW4gbnkgc2FtbWFuc2xhZ25pbmcuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCisiXG4iCisiWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCisid2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorbXNnc3RyICIiCisiRHUgw6RyIG1pdHQgaSBlbiDDpG5kcmluZy5cbiIKKyJcbiIKKyJGaWxlbiAlcyBoYXIgw6RuZHJpbmdhci5cbiIKKyJcbiIKKyJEdSBiw7ZyIGZ1bGxib3JkYSBkZW4gYWt0dWVsbGEgaW5jaGVja25pbmdlbiBpbm5hbiBkdSBww6Viw7ZyamFyIGVuICIKKyJzYW1tYW5zbGFnbmluZy4gT20gZHUgZ8O2ciBkZXQgYmxpciBkZXQgZW5rbGFyZSBhdHQgYXZicnl0YSBlbiBtaXNzbHlja2FkICIKKyJzYW1tYW5zbGFnbmluZywgb20gZGV0IHNrdWxsZSB2YXJhIG7DtmR2w6RuZGlndC5cbiIKKworIzogbGliL21lcmdlLnRjbDoxMDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBvZiAlcyIKK21zZ3N0ciAiJXMgYXYgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCittc2dzdHIgIlNsw6VyIGlob3AgJXMgb2NoICVzLi4uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMQorbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgorbXNnc3RyICJTYW1tYW5zbGFnbmluZ2VuIGF2c2x1dGFkZXMgZnJhbWfDpW5nc3Jpa3QuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMworbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICJTYW1tYW5zbGFnbmluZ2VuIG1pc3NseWNrYWRlcy4gRHUgbcOlc3RlIGzDtnNhIGtvbmZsaWt0ZXJuYS4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2UgSW50byAlcyIKK21zZ3N0ciAiU2zDpSBpaG9wIGkgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc3Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgIlJldmlzaW9uZXIgYXR0IHNsw6UgaWhvcCIKKworIzogbGliL21lcmdlLnRjbDoyMTIKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGF2YnJ5dGEgdmlkIHV0w7ZrbmluZy5cbiIKKyJcbiIKKyJEdSBtw6VzdGUgZ8O2cmEgZGlnIGbDpHJkaWcgbWVkIGF0dCB1dMO2a2EgaW5jaGVja25pbmdlbi5cbiIKKworIzogbGliL21lcmdlLnRjbDoyMjIKK21zZ2lkICIiCisiQWJvcnQgbWVyZ2U/XG4iCisiXG4iCisiQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCittc2dzdHIgIiIKKyJBdmJyeXQgc2FtbWFuc2xhZ25pbmc/XG4iCisiXG4iCisiT20gZHUgYXZicnl0ZXIgc2FtbWFuc2xhZ25pbmdlbiBrb21tZXIgKkFMTEEqIGVqIGluY2hlY2thZGUgw6RuZHJpbmdhciBhdHQgZ8OlICIKKyJmw7ZybG9yYWRlLlxuIgorIlxuIgorIkfDpSB2aWRhcmUgbWVkIGF0dCBhdmJyeXRhIGRlbiBha3R1ZWxsYSBzYW1tYW5zbGFnbmluZ2VuPyIKKworIzogbGliL21lcmdlLnRjbDoyMjgKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyLDhXRlcnN0w6RsbCDDpG5kcmluZ2FyP1xuIgorIlxuIgorIk9tIGR1IMOldGVyc3TDpGxsZXIgw6RuZHJpbmdhcm5hIGtvbW1lciAqQUxMQSogZWogaW5jaGVja2FkZSDDpG5kcmluZ2FyIGF0dCBnw6UgIgorImbDtnJsb3JhZGUuXG4iCisiXG4iCisiR8OlIHZpZGFyZSBtZWQgYXR0IMOldGVyc3TDpGxsYSBkZSBha3R1ZWxsYSDDpG5kcmluZ2FybmE/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOQorbXNnaWQgIkFib3J0aW5nIgorbXNnc3RyICJBdmJyeXRlciIKKworIzogbGliL21lcmdlLnRjbDoyMzkKK21zZ2lkICJmaWxlcyByZXNldCIKK21zZ3N0ciAiZmlsZXIgw6V0ZXJzdMOkbGxkYSIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBmYWlsZWQuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXZicnl0YS4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY5Cittc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgorbXNnc3RyICJBdmJyeXRuaW5nIGZ1bGxib3JkYWQuIFJlZG8uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAiVHZpbmdhIGzDtnNuaW5nIGF0dCBhbnbDpG5kYSBiYXN2ZXJzaW9uZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo5Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCittc2dzdHIgIlR2aW5nYSBsw7ZzbmluZyBhdHQgYW52w6RuZGEgZGVuIGFrdHVlbGxhIGdyZW5lbj8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAiVHZpbmdhIGzDtnNuaW5nIGF0dCBhbnbDpG5kYSBkZW4gYW5kcmEgZ3JlbmVuPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyJPYnNlcnZlcmEgYXR0IGRpZmZlbiBlbmRhc3QgdmlzYXIgZGUgw6RuZHJpbmdhciBzb20gc3TDpXIgaSBrb25mbGlrdC5cbiIKKyJcbiIKKyIlcyBrb21tZXIgYXR0IHNrcml2YXMgw7Z2ZXIuXG4iCisiXG4iCisiRHUgbcOlc3RlIHN0YXJ0YSBvbSBzYW1tYW5zbGFnbmluZ2VuIGbDtnIgYXR0IGfDtnJhIGRlbiBow6RyIG9wZXJhdGlvbmVuIG9nam9yZC4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCittc2dzdHIgIkZpbGVuICVzIHZlcmthciBpbm5laMOlbGxhIG9sw7ZzdGEga29uZmxpa3Rlci4gVmlsbCBkdSBrw7ZhIMOkbmTDpT8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgbMO2c25pbmcgZsO2ciAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICJLYW4gaW50ZSBsw7ZzYSBib3J0dGFnbmluZ3MtIGVsbGVyIGzDpG5ra29uZmxpa3RlciBtZWQgZXR0IHZlcmt0eWciCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgorbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIktvbmZsaWt0ZmlsIGV4aXN0ZXJhciBpbnRlIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAiSW50ZSBldHQgZ3JhZmlza3QgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nOiAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICJWZXJrdHlnZXQgXCIlc1wiIGbDtnIgc2FtbWFuc2xhZ25pbmcgc3TDtmRzIGludGUiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMwMworbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgorbXNnc3RyICJWZXJrdHlnZXQgZsO2ciBzYW1tYW5zbGFnbmluZyBrw7ZycyByZWRhbi4gVmlsbCBkdSBhdnNsdXRhIGRldD8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorIiVzIgorbXNnc3RyICIiCisiRmVsIHZpZCBow6RtdG5pbmcgYXYgdmVyc2lvbmVyOlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSBzdGFydGEgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgIkvDtnIgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nLi4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNzUgbGliL21lcmdldG9vbC50Y2w6MzgzCittc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgorbXNnc3RyICJWZXJrdHlnZXQgZsO2ciBzYW1tYW5zbGFnbmluZyBtaXNzbHlja2FkZXMuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCittc2dzdHIgIkRlbiBnbG9iYWxhIHRlY2tlbmtvZG5pbmdlbiBcIiVzXCIgw6RyIG9naWx0aWciCisKKyM6IGxpYi9vcHRpb24udGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCittc2dzdHIgIkFya2l2ZXRzIHRlY2tlbmtvZG5pbmcgXCIlc1wiIMOkciBvZ2lsdGlnIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTkKK21zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgorbXNnc3RyICLDhXRlcnN0w6RsbCBzdGFuZGFyZHbDpHJkZW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMworbXNnaWQgIlNhdmUiCittc2dzdHIgIlNwYXJhIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBSZXBvc2l0b3J5IgorbXNnc3RyICJBcmtpdmV0ICVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzQKK21zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgorbXNnc3RyICJHbG9iYWx0IChhbGxhIGFya2l2KSIKKworIzogbGliL29wdGlvbi50Y2w6MTQwCittc2dpZCAiVXNlciBOYW1lIgorbXNnc3RyICJBbnbDpG5kYXJuYW1uIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDEKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICJFLXBvc3RhZHJlc3MiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MworbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgorbXNnc3RyICJTdW1tZXJhIHNhbW1hbnNsYWduaW5nc2luY2hlY2tuaW5nYXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NAorbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKK21zZ3N0ciAiUHJhdHNhbWhldCBmw7ZyIHNhbW1hbnNsYWduaW5nYXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NQorbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCittc2dzdHIgIlZpc2EgZGlmZnN0YXRpc3RpayBlZnRlciBzYW1tYW5zbGFnbmluZyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ2Cittc2dpZCAiVXNlIE1lcmdlIFRvb2wiCittc2dzdHIgIkFudsOkbmQgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDgKK21zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgorbXNnc3RyICJMaXRhIHDDpSBmaWzDpG5kcmluZ3N0aWRzc3TDpG1wbGFyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDkKK21zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCittc2dzdHIgIlN0w6RkYSBzcMOlcmFkZSBncmVuYXIgdmlkIGjDpG10bmluZyIKKworIzogbGliL29wdGlvbi50Y2w6MTUwCittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCittc2dzdHIgIk1hdGNoYSBzcMOlcmFkZSBncmVuYXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MQorbXNnaWQgIlVzZSBUZXh0Y29udiBGb3IgRGlmZnMgYW5kIEJsYW1lcyIKK21zZ3N0ciAiQW52w6RuZCBUZXh0Y29udiBmw7ZyIGRpZmYgb2NoIGtsYW5kcmluZyIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCittc2dzdHIgIktsYW5kcmEga29waWVyaW5nIGJhcmEgaSDDpG5kcmFkZSBmaWxlciIKKworIzogbGliL29wdGlvbi50Y2w6MTUzCittc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCittc2dzdHIgIk1pbnN0YSBhbnRhbCB0ZWNrZW4gYXR0IGtsYW5kcmEga29waWVyaW5nIGbDtnIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NAorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICJIaXN0b3Jpa3JhZGllIGbDtnIga2xhbmRyaW5nIChkYWdhcikiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NQorbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCittc2dzdHIgIkFudGFsIHJhZGVyIHNhbW1hbmhhbmcgaSBkaWZmZXJlbnNlciIKKworIzogbGliL29wdGlvbi50Y2w6MTU2Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAiVGV4dGJyZWRkIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSIKKworIzogbGliL29wdGlvbi50Y2w6MTU3Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJNYWxsIGbDtnIgbmFtbiBww6UgbnlhIGdyZW5hciIKKworIzogbGliL29wdGlvbi50Y2w6MTU4Cittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICJTdGFuZGFyZHRlY2tlbmtvZG5pbmcgZsO2ciBmaWxpbm5laMOlbGwiCisKKyM6IGxpYi9vcHRpb24udGNsOjIwNAorbXNnaWQgIkNoYW5nZSIKK21zZ3N0ciAiw4RuZHJhIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMzEKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAiU3Rhdm5pbmdzb3JkbGlzdGE6IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNjEKK21zZ2lkICJDaGFuZ2UgRm9udCIKK21zZ3N0ciAiQnl0IHRlY2tlbnNuaXR0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIlbDpGxqICVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNzEKK21zZ2lkICJwdC4iCittc2dzdHIgInAuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyODUKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAiSW5zdMOkbGxuaW5nYXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjMyMgorbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCittc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IGhlbHQgc3BhcmEgYWx0ZXJuYXRpdjoiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyMAorbXNnaWQgIkFkZCBSZW1vdGUiCittc2dzdHIgIkzDpGdnIHRpbGwgZmrDpHJyYXJraXYiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNQorbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgorbXNnc3RyICJMw6RnZyB0aWxsIG55dHQgZmrDpHJyYXJraXYiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozMCBsaWIvdG9vbHNfZGxnLnRjbDozNworbXNnaWQgIkFkZCIKK21zZ3N0ciAiTMOkZ2cgdGlsbCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjM5Cittc2dpZCAiUmVtb3RlIERldGFpbHMiCittc2dzdHIgIkRldGFsamVyIGbDtnIgZmrDpHJyYXJraXYiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo1MAorbXNnaWQgIkxvY2F0aW9uOiIKK21zZ3N0ciAiUGxhdHM6IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjAKK21zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKK21zZ3N0ciAiWXR0ZXJsaWdhcmUgw6V0Z8OkcmQiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MworbXNnaWQgIkZldGNoIEltbWVkaWF0ZWx5IgorbXNnc3RyICJIw6RtdGEgb21lZGVsYmFydCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjY5Cittc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKK21zZ3N0ciAiSW5pdGllcmEgZmrDpHJyYXJraXYgb2NoIHPDpG5kIHRpbGwiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NQorbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCittc2dzdHIgIkfDtnIgaW5nZW50IG1lciBudSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgIkFuZ2UgZXR0IG5hbW4gZsO2ciBmasOkcnJhcmtpdmV0LiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjExMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgcmVtb3RlIG5hbWUuIgorbXNnc3RyICJcIiVzXCIga2FuIGludGUgYW52w6RuZGFzIHNvbSBuYW1uIHDDpSBmasOkcnJhcmtpdmV0LiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgZmrDpHJyYXJraXZldCBcIiVzXCIgcMOlIHBsYXRzZW4gXCIlc1wiLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMiBsaWIvdHJhbnNwb3J0LnRjbDo2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmV0Y2ggJXMiCittc2dzdHIgImjDpG10YSAlcyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKK21zZ3N0ciAiSMOkbXRhciAlcyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE1NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRvIG5vdCBrbm93IGhvdyB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgYXQgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgIlZldCBpbnRlIGh1ciBhcmtpdmV0IHDDpSBwbGF0c2VuIFwiJXNcIiBza2FsbCBpbml0aWVyYXMuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYyIGxpYi90cmFuc3BvcnQudGNsOjI1IGxpYi90cmFuc3BvcnQudGNsOjYzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgInPDpG5kICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKK21zZ3N0ciAiS29uZmlndXJlcmFyICVzIChww6UgJXMpIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICJUYSBib3J0IGdyZW4gZnLDpW4gZmrDpHJyYXJraXYiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDgKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIkZyw6VuIGFya2l2IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUxIGxpYi90cmFuc3BvcnQudGNsOjEzNAorbXNnaWQgIlJlbW90ZToiCittc2dzdHIgIkZqw6RycmFya2l2OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo3MiBsaWIvdHJhbnNwb3J0LnRjbDoxNTQKK21zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgorbXNnc3RyICJHb2R0eWNrbGlnIHBsYXRzOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4OAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICJHcmVuYXIiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEwCittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgIlRhIGVuZGFzdCBib3J0IG9tIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMgorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAiU2FtbWFuc2xhZ2VuIGk6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MworbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKK21zZ3N0ciAiRW4gZ3JlbiBrcsOkdnMgZsO2ciBcIlNhbW1hbnNsYWdlbiBpXCIuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBncmVuYXIgaGFyIGludGUgaGVsdCBzbGFnaXRzIHNhbW1hbiBpICVzOlxuIgorIlxuIgorIiAtICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKKyJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKK21zZ3N0ciAiIgorIkVuIGVsbGVyIGZsZXJhIGF2IHNhbW1hbnNsYWduaW5nc3Rlc3Rlcm5hIG1pc3NseWNrYWRlcyBlZnRlcnNvbSBkdSBpbnRlIGhhciAiCisiaMOkbXRhdCBkZSBuw7ZkdsOkbmRpZ2EgaW5jaGVja25pbmdhcm5hLiBGw7Zyc8O2ayBow6RtdGEgZnLDpW4gJXMgZsO2cnN0LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDgKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgIlbDpGxqIGVuIGVsbGVyIGZsZXJhIGdyZW5hciBhdHQgdGEgYm9ydC4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAiVGFyIGJvcnQgZ3JlbmFyIGZyw6VuICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MworbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICJJbmdldCBhcmtpdiBtYXJrZXJhdC4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCittc2dzdHIgIlPDtmtlciAlcy4uLiIKKworIzogbGliL3JlbW90ZS50Y2w6MTYzCittc2dpZCAiUmVtb3ZlIFJlbW90ZSIKK21zZ3N0ciAiVGEgYm9ydCBmasOkcnJhcmtpdiIKKworIzogbGliL3JlbW90ZS50Y2w6MTY4Cittc2dpZCAiUHJ1bmUgZnJvbSIKK21zZ3N0ciAiVGEgYm9ydCBmcsOlbiIKKworIzogbGliL3JlbW90ZS50Y2w6MTczCittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAiSMOkbXRhIGZyw6VuIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMTUKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICJTw6RuZCB0aWxsIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMgorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICJTw7ZrOiIKKworIzogbGliL3NlYXJjaC50Y2w6MjQKK21zZ2lkICJOZXh0IgorbXNnc3RyICJOw6RzdGEiCisKKyM6IGxpYi9zZWFyY2gudGNsOjI1Cittc2dpZCAiUHJldiIKK21zZ3N0ciAiRsO2cmVnIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNgorbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgorbXNnc3RyICJTa2lsaiBww6UgVkVSU0FMRVIvZ2VtZW5lciIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGdlbnbDpGc6IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjEzNworbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGlrb246IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKK21zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbHByb2dyYW1tZXQgc3TDtmRzIGludGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbCDDpHIgZWogdGlsbGfDpG5nbGlnIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKK21zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIk9naWx0aWcgaW5zdMOkbGxuaW5nIGbDtnIgc3Rhdm5pbmdza29udHJvbGwiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxlciBvcmRsaXN0YW4gdGlsbCAlcy4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIlN0YXZuaW5nc2tvbnRyb2xsIG1pc3NseWNrYWRlcyB0eXN0IHZpZCBzdGFydCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIlN0YXZuaW5nc2tvbnRyb2xscHJvZ3JhbW1ldCBrw6RubnMgaW50ZSBpZ2VuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Cittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgIkluZ2EgZsO2cnNsYWciCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIk92w6RudGF0IGZpbHNsdXQgZnLDpW4gc3Rhdm5pbmdza29udHJvbGwiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAiU3Rhdm5pbmdza29udHJvbGwgbWlzc2x5Y2thZGVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDozMQorbXNnaWQgIk5vIGtleXMgZm91bmQuIgorbXNnc3RyICJJbmdhIG55Y2tsYXIgaGl0dGFkZXMuIgorCisjOiBsaWIvc3Noa2V5LnRjbDozNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCittc2dzdHIgIkhpdHRhZGUgw7ZwcGVuIG55Y2tlbCBpOiAlcyIKKworIzogbGliL3NzaGtleS50Y2w6NDAKK21zZ2lkICJHZW5lcmF0ZSBLZXkiCittc2dzdHIgIlNrYXBhIG55Y2tlbCIKKworIzogbGliL3NzaGtleS50Y2w6NTgKK21zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKK21zZ3N0ciAiS29waWVyYSB0aWxsIFVya2xpcHAiCisKKyM6IGxpYi9zc2hrZXkudGNsOjcyCittc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCittc2dzdHIgIkRpbiDDtnBwbmEgT3BlblNTSC1ueWNrZWwiCisKKyM6IGxpYi9zc2hrZXkudGNsOjgwCittc2dpZCAiR2VuZXJhdGluZy4uLiIKK21zZ3N0ciAiU2thcGFyLi4uIgorCisjOiBsaWIvc3Noa2V5LnRjbDo4NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgc3RhcnRhIHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjExMworbXNnaWQgIkdlbmVyYXRpb24gZmFpbGVkLiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgc2thcGEuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjAKK21zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgorbXNnc3RyICJMeWNrYWRlcyBza2FwYSBueWNrZWxuLCBtZW4gaGl0dGFyIGludGUgbsOlZ29uIG55Y2tlbC4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjEyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKK21zZ3N0ciAiRGluIG55Y2tlbCBmaW5ucyBpOiAlcyIKKworIzogbGliL3N0YXR1c19iYXIudGNsOjg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKK21zZ3N0ciAiJXMuLi4gJSppIGF2ICUqaSAlcyAoJTNpJSUpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICJMw6RnZyB0aWxsIHZlcmt0eWciCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI4Cittc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCittc2dzdHIgIkzDpGdnIHRpbGwgbnl0dCB2ZXJrdHlnc2tvbW1hbmRvIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNAorbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAiTMOkZ2cgdGlsbCBnbG9iYWx0IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NgorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAiRGV0YWxqZXIgZsO2ciB2ZXJrdHlnIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0OQorbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgorbXNnc3RyICJBbnbDpG5kIFwiL1wiLWF2ZGVsYXJlIGbDtnIgYXR0IHNrYXBhIGV0dCB1bmRlcm1lbnl0csOkZDoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjYwCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIktvbW1hbmRvOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzEKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICJWaXNhIGRpYWxvZyBpbm5hbiBwcm9ncmFtbWV0IHN0YXJ0YXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjc3Cittc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCittc2dzdHIgIkJlIGFudsOkbmRhcmVuIHbDpGxqYSBlbiB2ZXJzaW9uIChzw6R0dGVyICRSRVZJU0lPTikiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjgyCittc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCittc2dzdHIgIkJlIGFudsOkbmRhcmVuIG9tIHl0dGVybGlnYXJlIHBhcmFtZXRyYXIgKHPDpHR0ZXIgJEFSR1MpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4OQorbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKK21zZ3N0ciAiVmlzYSBpbnRlIGtvbW1hbmRvdHMgdXRkYXRhZsO2bnN0ZXIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjk0Cittc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKK21zZ3N0ciAiS8O2ciBlbmRhc3Qgb20gZW4gZGlmZiBoYXIgbWFya2VyYXRzICgkRklMRU5BTUUgw6RyIGludGUgdG9tdCkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjExOAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgIkFuZ2UgZXR0IG5hbW4gZsO2ciB2ZXJrdHlnZXQuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJWZXJrdHlnZXQgXCIlc1wiIGZpbm5zIHJlZGFuLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgdmVya3R5Z2V0OlxuIgorIiVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxODcKK21zZ2lkICJSZW1vdmUgVG9vbCIKK21zZ3N0ciAiVGEgYm9ydCB2ZXJrdHlnIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTMKK21zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKK21zZ3N0ciAiVGEgYm9ydCB2ZXJrdHlnc2tvbW1hbmRvbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk4Cittc2dpZCAiUmVtb3ZlIgorbXNnc3RyICJUYSBib3J0IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzEKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoQmzDpXR0IGFuZ2VyIHZlcmt0eWcgbG9rYWxhIGbDtnIgYXJraXZldCkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKK21zZ3N0ciAiS8O2ciBrb21tYW5kb3Q6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMDYKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgIkFyZ3VtZW50IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDEKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYi90b29scy50Y2w6NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIkbDtnIgYXR0IHN0YXJ0YSAlcyBtw6VzdGUgZHUgdsOkbGphIGVuIGZpbC4iCisKKyM6IGxpYi90b29scy50Y2w6OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAiw4RyIGR1IHPDpGtlciBww6UgYXR0IGR1IHZpbGwgc3RhcnRhICVzPyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sOiAlcyIKK21zZ3N0ciAiVmVya3R5ZzogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVubmluZzogJXMiCittc2dzdHIgIkV4ZWt2ZXJhcjogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAiVmVya3R5Z2V0IGF2c2x1dGFkZXMgZnJhbWfDpW5nc3Jpa3Q6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKK21zZ3N0ciAiVmVya3R5Z2V0IG1pc3NseWNrYWRlczogJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgorbXNnc3RyICJIw6RtdGFyIG55YSDDpG5kcmluZ2FyIGZyw6VuICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAorIywgdGNsLWZvcm1hdAorbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKK21zZ3N0ciAiZmrDpHJyYm9ydHRhZ25pbmcgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCittc2dzdHIgIlRhciBib3J0IHNww6VyYW5kZSBncmVuYXIgc29tIHRhZ2l0cyBib3J0IGZyw6VuICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAiU8OkbmRlciDDpG5kcmluZ2FyIHRpbGwgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWlycm9yaW5nIHRvICVzIgorbXNnc3RyICJTcGVnbGFyIHRpbGwgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAiU8OkbmRlciAlcyAlcyB0aWxsICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDIKK21zZ2lkICJQdXNoIEJyYW5jaGVzIgorbXNnc3RyICJTw6RuZCBncmVuYXIiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjExNworbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAiS8OkbGxncmVuYXIiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEzMQorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIkRlc3RpbmF0aW9uc2Fya2l2IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzIKK21zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgorbXNnc3RyICLDlnZlcmbDtnJpbmdzYWx0ZXJuYXRpdiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTc0Cittc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCittc2dzdHIgIlR2aW5nYSDDtnZlcnNrcml2bmluZyBhdiBiZWZpbnRsaWcgZ3JlbiAoa2FuIGthc3RhIGJvcnQgw6RuZHJpbmdhcikiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3OAorbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgorbXNnc3RyICJBbnbDpG5kIHR1bnQgcGFrZXQgKGbDtnIgbMOlbmdzYW1tYSBuw6R0dmVya3NhbnNsdXRuaW5nYXIpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxODIKK21zZ2lkICJJbmNsdWRlIHRhZ3MiCittc2dzdHIgIlRhIG1lZCB0YWdnYXIiCisKKyN+IG1zZ2lkICJDYW5ub3QgdXNlIGZ1bm55IC5naXQgZGlyZWN0b3J5OiIKKyN+IG1zZ3N0ciAiS2FuIGludGUgYW52w6RuZGEgdW5kZXJsaWcgLmdpdC1rYXRhbG9nOiIKKworI34gbXNnaWQgIlByZWZlcmVuY2VzLi4uIgorI34gbXNnc3RyICJJbnN0w6RsbG5pbmdhci4uLiIKKworI34gbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgdGVzdC4pIgorI34gbXNnc3RyICJBbGx0aWQgKHV0ZsO2ciBpbnRlIHNhbW1hbnNsYWduaW5nc3Rlc3QpLiIKKworI34gbXNnaWQgIlVSTDoiCisjfiBtc2dzdHIgIldlYmJhZHJlc3M6IgorCisjfiBtc2dpZCAiRGVsZXRlIFJlbW90ZSBCcmFuY2giCisjfiBtc2dzdHIgIlRhIGJvcnQgZmrDpHJyZ3JlbiIKKworI34gbXNnaWQgIiIKKyN+ICJVbmFibGUgdG8gc3RhcnQgZ2l0azpcbiIKKyN+ICJcbiIKKyN+ICIlcyBkb2VzIG5vdCBleGlzdCIKKyN+IG1zZ3N0ciAiIgorI34gIkthbiBpbnRlIHN0YXJ0YSBnaXRrOlxuIgorI34gIlxuIgorI34gIiVzIGZpbm5zIGludGUiCisKKyN+IG1zZ2lkICJBcHBsZSIKKyN+IG1zZ3N0ciAiw4RwcGxlIgorCisjfiBtc2dpZCAiTm90IGNvbm5lY3RlZCB0byBhc3BlbGwiCisjfiBtc2dzdHIgIkludGUgYW5zbHV0ZW4gdGlsbCBhc3BlbGwiCmRpZmYgLS1naXQgYS9wby96aF9jbi5wbyBiL2dpdC1ndWkvcG8vemhfY24ucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL3poX2NuLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL3poX2NuLnBvCmRpZmYgLS1naXQgYS93aW5kb3dzL2dpdC1ndWkuc2ggYi9naXQtZ3VpL3dpbmRvd3MvZ2l0LWd1aS5zaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gd2luZG93cy9naXQtZ3VpLnNoCnJlbmFtZSB0byBnaXQtZ3VpL3dpbmRvd3MvZ2l0LWd1aS5zaApkaWZmIC0tZ2l0IGEvZ2l0LWluc3Rhd2ViLnNoIGIvZ2l0LWluc3Rhd2ViLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxYTFiMDUKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtaW5zdGF3ZWIuc2gKQEAgLTAsMCArMSw2NDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCisjCisKK1BFUkw9J0BAUEVSTEBAJworT1BUSU9OU19LRUVQREFTSERBU0g9CitPUFRJT05TX1NQRUM9IlwKK2dpdCBpbnN0YXdlYiBbb3B0aW9uc10gKC0tc3RhcnQgfCAtLXN0b3AgfCAtLXJlc3RhcnQpCistLQorbCxsb2NhbCAgICAgICAgb25seSBiaW5kIG9uIDEyNy4wLjAuMQorcCxwb3J0PSAgICAgICAgdGhlIHBvcnQgdG8gYmluZCB0bworZCxodHRwZD0gICAgICAgdGhlIGNvbW1hbmQgdG8gbGF1bmNoCitiLGJyb3dzZXI9ICAgICB0aGUgYnJvd3NlciB0byBsYXVuY2gKK20sbW9kdWxlLXBhdGg9IHRoZSBtb2R1bGUgcGF0aCAob25seSBuZWVkZWQgZm9yIGFwYWNoZTIpCisgQWN0aW9uCitzdG9wICAgICAgICAgICBzdG9wIHRoZSB3ZWIgc2VydmVyCitzdGFydCAgICAgICAgICBzdGFydCB0aGUgd2ViIHNlcnZlcgorcmVzdGFydCAgICAgICAgcmVzdGFydCB0aGUgd2ViIHNlcnZlcgorIgorCisuIGdpdC1zaC1zZXR1cAorCitmcWdpdGRpcj0iJEdJVF9ESVIiCitsb2NhbD0iJChnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBpbnN0YXdlYi5sb2NhbCkiCitodHRwZD0iJChnaXQgY29uZmlnIC0tZ2V0IGluc3Rhd2ViLmh0dHBkKSIKK3Jvb3Q9IiQoZ2l0IGNvbmZpZyAtLWdldCBpbnN0YXdlYi5naXR3ZWJkaXIpIgorcG9ydD0kKGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIucG9ydCkKK21vZHVsZV9wYXRoPSIkKGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIubW9kdWxlcGF0aCkiCithY3Rpb249ImJyb3dzZSIKKworY29uZj0iJEdJVF9ESVIvZ2l0d2ViL2h0dHBkLmNvbmYiCisKKyMgRGVmYXVsdHM6CisKKyMgaWYgaW5zdGFsbGVkLCBpdCBkb2Vzbid0IG5lZWQgZnVydGhlciBjb25maWd1cmF0aW9uIChtb2R1bGVfcGF0aCkKK3Rlc3QgLXogIiRodHRwZCIgJiYgaHR0cGQ9J2xpZ2h0dHBkIC1mJworCisjIERlZmF1bHQgaXMgQEBHSVRXRUJESVJAQAordGVzdCAteiAiJHJvb3QiICYmIHJvb3Q9J0BAR0lUV0VCRElSQEAnCisKKyMgYW55IHVudGFrZW4gbG9jYWwgcG9ydCB3aWxsIGRvLi4uCit0ZXN0IC16ICIkcG9ydCIgJiYgcG9ydD0xMjM0CisKK3Jlc29sdmVfZnVsbF9odHRwZCAoKSB7CisJY2FzZSAiJGh0dHBkIiBpbgorCSphcGFjaGUyKnwqbGlnaHR0cGQqfCpodHRwZCopCisJCSMgeWVzLCAqaHR0cGQqIGNvdmVycyAqbGlnaHR0cGQqIGFib3ZlLCBidXQgaXQgaXMgdGhlcmUgZm9yIGNsYXJpdHkKKwkJIyBlbnN1cmUgdGhhdCB0aGUgYXBhY2hlMi9saWdodHRwZCBjb21tYW5kIGVuZHMgd2l0aCAiLWYiCisJCWlmICEgZWNobyAiJGh0dHBkIiB8IHNhbmVfZ3JlcCAtLSAnLWYgKiQnID4vZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQlodHRwZD0iJGh0dHBkIC1mIgorCQlmaQorCQk7OworCSpwbGFja3VwKikKKwkJIyBzZXJ2ZXIgaXMgc3RhcnRlZCBieSBydW5uaW5nIHZpYSBnZW5lcmF0ZWQgZ2l0d2ViLnBzZ2kgaW4gJGZxZ2l0ZGlyL2dpdHdlYgorCQlmdWxsX2h0dHBkPSIkZnFnaXRkaXIvZ2l0d2ViL2dpdHdlYi5wc2dpIgorCQlodHRwZF9vbmx5PSIke2h0dHBkJSUgKn0iICMgY3V0IG9uIGZpcnN0IHNwYWNlCisJCXJldHVybgorCQk7OworCSp3ZWJyaWNrKikKKwkJIyBzZXJ2ZXIgaXMgc3RhcnRlZCBieSBydW5uaW5nIHZpYSBnZW5lcmF0ZWQgd2Vicmljay5yYiBpbgorCQkjICRmcWdpdGRpci9naXR3ZWIKKwkJZnVsbF9odHRwZD0iJGZxZ2l0ZGlyL2dpdHdlYi93ZWJyaWNrLnJiIgorCQlodHRwZF9vbmx5PSIke2h0dHBkJSUgKn0iICMgY3V0IG9uIGZpcnN0IHNwYWNlCisJCXJldHVybgorCQk7OworCWVzYWMKKworCWh0dHBkX29ubHk9IiQoZWNobyAkaHR0cGQgfCBjdXQgLWYxIC1kJyAnKSIKKwlpZiBjYXNlICIkaHR0cGRfb25seSIgaW4gLyopIDogOzsgKikgd2hpY2ggJGh0dHBkX29ubHkgPi9kZXYvbnVsbCAyPiYxOzsgZXNhYworCXRoZW4KKwkJZnVsbF9odHRwZD0kaHR0cGQKKwllbHNlCisJCSMgbWFueSBodHRwZHMgYXJlIGluc3RhbGxlZCBpbiAvdXNyL3NiaW4gb3IgL3Vzci9sb2NhbC9zYmluCisJCSMgdGhlc2UgZGF5cyBhbmQgdGhvc2UgYXJlIG5vdCBpbiBtb3N0IHVzZXJzICRQQVRIcworCQkjIGluIGFkZGl0aW9uLCB3ZSBtYXkgaGF2ZSBnZW5lcmF0ZWQgYSBzZXJ2ZXIgc2NyaXB0CisJCSMgaW4gJGZxZ2l0ZGlyL2dpdHdlYi4KKwkJZm9yIGkgaW4gL3Vzci9sb2NhbC9zYmluIC91c3Ivc2JpbiAiJHJvb3QiICIkZnFnaXRkaXIvZ2l0d2ViIgorCQlkbworCQkJaWYgdGVzdCAteCAiJGkvJGh0dHBkX29ubHkiCisJCQl0aGVuCisJCQkJZnVsbF9odHRwZD0kaS8kaHR0cGQKKwkJCQlyZXR1cm4KKwkJCWZpCisJCWRvbmUKKworCQllY2hvID4mMiAiJGh0dHBkX29ubHkgbm90IGZvdW5kLiBJbnN0YWxsICRodHRwZF9vbmx5IG9yIHVzZSIgXAorCQkgICAgICItLWh0dHBkIHRvIHNwZWNpZnkgYW5vdGhlciBodHRwZCBkYWVtb24uIgorCQlleGl0IDEKKwlmaQorfQorCitzdGFydF9odHRwZCAoKSB7CisJaWYgdGVzdCAtZiAiJGZxZ2l0ZGlyL3BpZCI7IHRoZW4KKwkJc2F5ICJJbnN0YW5jZSBhbHJlYWR5IHJ1bm5pbmcuIFJlc3RhcnRpbmcuLi4iCisJCXN0b3BfaHR0cGQKKwlmaQorCisJIyBoZXJlICRodHRwZCBzaG91bGQgaGF2ZSBhIG1lYW5pbmdmdWwgdmFsdWUKKwlyZXNvbHZlX2Z1bGxfaHR0cGQKKwlta2RpciAtcCAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seSIKKwljb25mPSIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5LmNvbmYiCisKKwkjIGdlbmVyYXRlIGNvcnJlY3QgY29uZmlnIGZpbGUgaWYgaXQgZG9lc24ndCBleGlzdAorCXRlc3QgLWYgIiRjb25mIiB8fCBjb25maWd1cmVfaHR0cGQKKwl0ZXN0IC1mICIkZnFnaXRkaXIvZ2l0d2ViL2dpdHdlYl9jb25maWcucGVybCIgfHwgZ2l0d2ViX2NvbmYKKworCSMgZG9uJ3QgcXVvdGUgJGZ1bGxfaHR0cGQsIHRoZXJlIGNhbiBiZSBhcmd1bWVudHMgdG8gaXQgKC1mKQorCWNhc2UgIiRodHRwZCIgaW4KKwkqbW9uZ29vc2UqfCpwbGFja3VwKikKKwkJI1RoZXNlIHNlcnZlcnMgZG9uJ3QgaGF2ZSBhIGRhZW1vbiBtb2RlIHNvIHdlJ2xsIGhhdmUgdG8gZm9yayBpdAorCQkkZnVsbF9odHRwZCAiJGNvbmYiICYKKwkJI1NhdmUgdGhlIHBpZCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSAod2UnbGwgcHJpbnQgaXQgbGF0ZXIpCisJCXBpZD0kIQorCisJCWlmIHRlc3QgJD8gIT0gMDsgdGhlbgorCQkJZWNobyAiQ291bGQgbm90IGV4ZWN1dGUgaHR0cCBkYWVtb24gJGh0dHBkLiIKKwkJCWV4aXQgMQorCQlmaQorCisJCWNhdCA+ICIkZnFnaXRkaXIvcGlkIiA8PEVPRgorJHBpZAorRU9GCisJCTs7CisJKikKKwkJJGZ1bGxfaHR0cGQgIiRjb25mIgorCQlpZiB0ZXN0ICQ/ICE9IDA7IHRoZW4KKwkJCWVjaG8gIkNvdWxkIG5vdCBleGVjdXRlIGh0dHAgZGFlbW9uICRodHRwZC4iCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKK3N0b3BfaHR0cGQgKCkgeworCXRlc3QgLWYgIiRmcWdpdGRpci9waWQiICYmIGtpbGwgJChjYXQgIiRmcWdpdGRpci9waWQiKQorCXJtIC1mICIkZnFnaXRkaXIvcGlkIgorfQorCitodHRwZF9pc19yZWFkeSAoKSB7CisJIiRQRVJMIiAtTUlPOjpTb2NrZXQ6OklORVQgLWUgIgorbG9jYWwgXCR8ID0gMTsgIyB0dXJuIG9uIGF1dG9mbHVzaAorZXhpdCBpZiAoSU86OlNvY2tldDo6SU5FVC0+bmV3KCcxMjcuMC4wLjE6JHBvcnQnKSk7CitwcmludCAnV2FpdGluZyBmb3IgXCckaHR0cGRcJyB0byBzdGFydCAuLic7CitkbyB7CisJcHJpbnQgJy4nOworCXNsZWVwKDEpOworfSB1bnRpbCAoSU86OlNvY2tldDo6SU5FVC0+bmV3KCcxMjcuMC4wLjE6JHBvcnQnKSk7CitwcmludCBxcSEgKGRvbmUpXG4hOworIgorfQorCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLS1zdG9wfHN0b3ApCisJCWFjdGlvbj0ic3RvcCIKKwkJOzsKKwktLXN0YXJ0fHN0YXJ0KQorCQlhY3Rpb249InN0YXJ0IgorCQk7OworCS0tcmVzdGFydHxyZXN0YXJ0KQorCQlhY3Rpb249InJlc3RhcnQiCisJCTs7CisJLWx8LS1sb2NhbCkKKwkJbG9jYWw9dHJ1ZQorCQk7OworCS1kfC0taHR0cGQpCisJCXNoaWZ0CisJCWh0dHBkPSIkMSIKKwkJOzsKKwktYnwtLWJyb3dzZXIpCisJCXNoaWZ0CisJCWJyb3dzZXI9IiQxIgorCQk7OworCS1wfC0tcG9ydCkKKwkJc2hpZnQKKwkJcG9ydD0iJDEiCisJCTs7CisJLW18LS1tb2R1bGUtcGF0aCkKKwkJc2hpZnQKKwkJbW9kdWxlX3BhdGg9IiQxIgorCQk7OworCS0tKQorCQk7OworCSopCisJCXVzYWdlCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK21rZGlyIC1wICIkR0lUX0RJUi9naXR3ZWIvdG1wIgorR0lUX0VYRUNfUEFUSD0iJChnaXQgLS1leGVjLXBhdGgpIgorR0lUX0RJUj0iJGZxZ2l0ZGlyIgorR0lUV0VCX0NPTkZJRz0iJGZxZ2l0ZGlyL2dpdHdlYi9naXR3ZWJfY29uZmlnLnBlcmwiCitleHBvcnQgR0lUX0VYRUNfUEFUSCBHSVRfRElSIEdJVFdFQl9DT05GSUcKKword2Vicmlja19jb25mICgpIHsKKwkjIHdlYnJpY2sgc2VlbXMgdG8gaGF2ZSBubyB3YXkgb2YgcGFzc2luZyBhcmJpdHJhcnkgZW52aXJvbm1lbnQKKwkjIHZhcmlhYmxlcyB0byB0aGUgdW5kZXJseWluZyBDR0kgZXhlY3V0YWJsZSwgc28gd2Ugd3JhcCB0aGUKKwkjIGFjdHVhbCBnaXR3ZWIuY2dpIHVzaW5nIGEgc2hlbGwgc2NyaXB0IHRvIGZvcmNlIGl0CisgIHdyYXBwZXI9IiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkL3dyYXBwZXIuc2giCisJY2F0ID4gIiR3cmFwcGVyIiA8PEVPRgorIyEvYmluL3NoCisjIHdlIHVzZSB0aGlzIHNoZWxsIHNjcmlwdCB3cmFwcGVyIGFyb3VuZCB0aGUgcmVhbCBnaXR3ZWIuY2dpIHNpbmNlCisjIHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgd2F5IHRvIHBhc3MgYXJiaXRyYXJ5IGVudmlyb25tZW50IHZhcmlhYmxlcworIyBpbnRvIHRoZSBDR0kgcHJvY2VzcworR0lUX0VYRUNfUEFUSD0kR0lUX0VYRUNfUEFUSCBHSVRfRElSPSRHSVRfRElSIEdJVFdFQl9DT05GSUc9JEdJVFdFQl9DT05GSUcKK2V4cG9ydCBHSVRfRVhFQ19QQVRIIEdJVF9ESVIgR0lUV0VCX0NPTkZJRworZXhlYyAkcm9vdC9naXR3ZWIuY2dpCitFT0YKKwljaG1vZCAreCAiJHdyYXBwZXIiCisKKwkjIFRoaXMgYXNzdW1lcyBfcnVieV8gaXMgaW4gdGhlIHVzZXIncyAkUEFUSC4gdGhhdCdzIF9vbmVfCisJIyBwb3J0YWJsZSB3YXkgdG8gcnVuIHJ1YnksIHdoaWNoIGNvdWxkIGJlIGluc3RhbGxlZCBhbnl3aGVyZSwgcmVhbGx5LgorCSMgZ2VuZXJhdGUgYSBzdGFuZGFsb25lIHNlcnZlciBzY3JpcHQgaW4gJGZxZ2l0ZGlyL2dpdHdlYi4KKwljYXQgPiIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZC5yYiIgPDxFT0YKKyMhL3Vzci9iaW4vZW52IHJ1YnkKK3JlcXVpcmUgJ3dlYnJpY2snCityZXF1aXJlICdsb2dnZXInCitvcHRpb25zID0geworICA6UG9ydCA9PiAkcG9ydCwKKyAgOkRvY3VtZW50Um9vdCA9PiAiJHJvb3QiLAorICA6TG9nZ2VyID0+IExvZ2dlci5uZXcoJyRmcWdpdGRpci9naXR3ZWIvZXJyb3IubG9nJyksCisgIDpBY2Nlc3NMb2cgPT4gWworICAgIFsgTG9nZ2VyLm5ldygnJGZxZ2l0ZGlyL2dpdHdlYi9hY2Nlc3MubG9nJyksCisgICAgICBXRUJyaWNrOjpBY2Nlc3NMb2c6OkNPTUJJTkVEX0xPR19GT1JNQVQgXQorICBdLAorICA6RGlyZWN0b3J5SW5kZXggPT4gWyJnaXR3ZWIuY2dpIl0sCisgIDpDR0lJbnRlcnByZXRlciA9PiAiJHdyYXBwZXIiLAorICA6U3RhcnRDYWxsYmFjayA9PiBsYW1iZGEgZG8KKyAgICBGaWxlLm9wZW4oIiRmcWdpdGRpci9waWQiLCAidyIpIHsgfGZ8IGYucHV0cyBQcm9jZXNzLnBpZCB9CisgIGVuZCwKKyAgOlNlcnZlclR5cGUgPT4gV0VCcmljazo6RGFlbW9uLAorfQorb3B0aW9uc1s6QmluZEFkZHJlc3NdID0gJzEyNy4wLjAuMScgaWYgIiRsb2NhbCIgPT0gInRydWUiCitzZXJ2ZXIgPSBXRUJyaWNrOjpIVFRQU2VydmVyLm5ldyhvcHRpb25zKQorWydJTlQnLCAnVEVSTSddLmVhY2ggZG8gfHNpZ25hbHwKKyAgdHJhcChzaWduYWwpIHtzZXJ2ZXIuc2h1dGRvd259CitlbmQKK3NlcnZlci5zdGFydAorRU9GCisJY2htb2QgK3ggIiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkLnJiIgorCSMgY29uZmlndXJhdGlvbiBpcyBlbWJlZGRlZCBpbiBzZXJ2ZXIgc2NyaXB0IGZpbGUsIHdlYnJpY2sucmIKKwlybSAtZiAiJGNvbmYiCit9CisKK2xpZ2h0dHBkX2NvbmYgKCkgeworCWNhdCA+ICIkY29uZiIgPDxFT0YKK3NlcnZlci5kb2N1bWVudC1yb290ID0gIiRyb290Igorc2VydmVyLnBvcnQgPSAkcG9ydAorc2VydmVyLm1vZHVsZXMgPSAoICJtb2Rfc2V0ZW52IiwgIm1vZF9jZ2kiICkKK3NlcnZlci5pbmRleGZpbGVzID0gKCAiZ2l0d2ViLmNnaSIgKQorc2VydmVyLnBpZC1maWxlID0gIiRmcWdpdGRpci9waWQiCitzZXJ2ZXIuZXJyb3Jsb2cgPSAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS9lcnJvci5sb2ciCisKKyMgdG8gZW5hYmxlLCBhZGQgIm1vZF9hY2Nlc3MiLCAibW9kX2FjY2Vzc2xvZyIgdG8gc2VydmVyLm1vZHVsZXMKKyMgdmFyaWFibGUgYWJvdmUgYW5kIHVuY29tbWVudCB0aGlzCisjYWNjZXNzbG9nLmZpbGVuYW1lID0gIiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkvYWNjZXNzLmxvZyIKKworc2V0ZW52LmFkZC1lbnZpcm9ubWVudCA9ICggIlBBVEgiID0+IGVudi5QQVRILCAiR0lUV0VCX0NPTkZJRyIgPT4gZW52LkdJVFdFQl9DT05GSUcgKQorCitjZ2kuYXNzaWduID0gKCAiLmNnaSIgPT4gIiIgKQorCisjIG1pbWV0eXBlIG1hcHBpbmcKK21pbWV0eXBlLmFzc2lnbiAgICAgICAgICAgICA9ICgKKyAgIi5wZGYiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3BkZiIsCisgICIuc2lnIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlIiwKKyAgIi5zcGwiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL2Z1dHVyZXNwbGFzaCIsCisgICIuY2xhc3MiICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLAorICAiLnBzIiAgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcG9zdHNjcmlwdCIsCisgICIudG9ycmVudCIgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQiLAorICAiLmR2aSIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1kdmkiLAorICAiLmd6IiAgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1nemlwIiwKKyAgIi5wYWMiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtbnMtcHJveHktYXV0b2NvbmZpZyIsCisgICIuc3dmIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIsCisgICIudGFyLmd6IiAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRneiIsCisgICIudGd6IiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRneiIsCisgICIudGFyIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRhciIsCisgICIuemlwIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi96aXAiLAorICAiLm1wMyIgICAgICAgICAgPT4gICAgICAiYXVkaW8vbXBlZyIsCisgICIubTN1IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1wZWd1cmwiLAorICAiLndtYSIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcy13bWEiLAorICAiLndheCIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcy13YXgiLAorICAiLm9nZyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vb2dnIiwKKyAgIi53YXYiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtd2F2IiwKKyAgIi5naWYiICAgICAgICAgID0+ICAgICAgImltYWdlL2dpZiIsCisgICIuanBnIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5qcGVnIiAgICAgICAgID0+ICAgICAgImltYWdlL2pwZWciLAorICAiLnBuZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvcG5nIiwKKyAgIi54Ym0iICAgICAgICAgID0+ICAgICAgImltYWdlL3gteGJpdG1hcCIsCisgICIueHBtIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXhwaXhtYXAiLAorICAiLnh3ZCIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14d2luZG93ZHVtcCIsCisgICIuY3NzIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2NzcyIsCisgICIuaHRtbCIgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorICAiLmh0bSIgICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKKyAgIi5qcyIgICAgICAgICAgID0+ICAgICAgInRleHQvamF2YXNjcmlwdCIsCisgICIuYXNjIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jIiAgICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmNwcCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIubG9nIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jb25mIiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLnRleHQiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIudHh0IiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5kdGQiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKKyAgIi54bWwiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKKyAgIi5tcGVnIiAgICAgICAgID0+ICAgICAgInZpZGVvL21wZWciLAorICAiLm1wZyIgICAgICAgICAgPT4gICAgICAidmlkZW8vbXBlZyIsCisgICIubW92IiAgICAgICAgICA9PiAgICAgICJ2aWRlby9xdWlja3RpbWUiLAorICAiLnF0IiAgICAgICAgICAgPT4gICAgICAidmlkZW8vcXVpY2t0aW1lIiwKKyAgIi5hdmkiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXN2aWRlbyIsCisgICIuYXNmIiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLWFzZiIsCisgICIuYXN4IiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLWFzZiIsCisgICIud212IiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLXdtdiIsCisgICIuYnoyIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAiLAorICAiLnRieiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIiwKKyAgIi50YXIuYnoyIiAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisgICIiICAgICAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIgorICkKK0VPRgorCXRlc3QgeCIkbG9jYWwiID0geHRydWUgJiYgZWNobyAnc2VydmVyLmJpbmQgPSAiMTI3LjAuMC4xIicgPj4gIiRjb25mIgorfQorCithcGFjaGUyX2NvbmYgKCkgeworCWlmIHRlc3QgLXogIiRtb2R1bGVfcGF0aCIKKwl0aGVuCisJCXRlc3QgLWQgIi91c3IvbGliL2h0dHBkL21vZHVsZXMiICYmCisJCQltb2R1bGVfcGF0aD0iL3Vzci9saWIvaHR0cGQvbW9kdWxlcyIKKwkJdGVzdCAtZCAiL3Vzci9saWIvYXBhY2hlMi9tb2R1bGVzIiAmJgorCQkJbW9kdWxlX3BhdGg9Ii91c3IvbGliL2FwYWNoZTIvbW9kdWxlcyIKKwlmaQorCWJpbmQ9CisJdGVzdCB4IiRsb2NhbCIgPSB4dHJ1ZSAmJiBiaW5kPScxMjcuMC4wLjE6JworCWVjaG8gJ3RleHQvY3NzIGNzcycgPiAiJGZxZ2l0ZGlyL21pbWUudHlwZXMiCisJY2F0ID4gIiRjb25mIiA8PEVPRgorU2VydmVyTmFtZSAiZ2l0LWluc3Rhd2ViIgorU2VydmVyUm9vdCAiJHJvb3QiCitEb2N1bWVudFJvb3QgIiRyb290IgorRXJyb3JMb2cgIiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkvZXJyb3IubG9nIgorQ3VzdG9tTG9nICIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5L2FjY2Vzcy5sb2ciIGNvbWJpbmVkCitQaWRGaWxlICIkZnFnaXRkaXIvcGlkIgorTGlzdGVuICRiaW5kJHBvcnQKK0VPRgorCisJZm9yIG1vZCBpbiBtaW1lIGRpciBlbnYgbG9nX2NvbmZpZworCWRvCisJCWlmIHRlc3QgLWUgJG1vZHVsZV9wYXRoL21vZF8ke21vZH0uc28KKwkJdGhlbgorCQkJZWNobyAiTG9hZE1vZHVsZSAke21vZH1fbW9kdWxlICIgXAorCQkJICAgICAiJG1vZHVsZV9wYXRoL21vZF8ke21vZH0uc28iID4+ICIkY29uZiIKKwkJZmkKKwlkb25lCisJY2F0ID4+ICIkY29uZiIgPDxFT0YKK1R5cGVzQ29uZmlnICIkZnFnaXRkaXIvbWltZS50eXBlcyIKK0RpcmVjdG9yeUluZGV4IGdpdHdlYi5jZ2kKK0VPRgorCisJIyBjaGVjayB0byBzZWUgaWYgRGVubmlzIFN0b3NiZXJnJ3MgbW9kX3BlcmwgY29tcGF0aWJpbGl0eSBwYXRjaAorCSMgKDwyMDA2MDYyMTEzMDcwOC5HY2JjNmU1Y0BsZW9ub3Yuc3Rvc2JlcmcubmV0PikgaGFzIGJlZW4gYXBwbGllZAorCWlmIHRlc3QgLWYgIiRtb2R1bGVfcGF0aC9tb2RfcGVybC5zbyIgJiYKKwkgICBzYW5lX2dyZXAgJ01PRF9QRVJMJyAiJHJvb3QvZ2l0d2ViLmNnaSIgPi9kZXYvbnVsbAorCXRoZW4KKwkJIyBmYXZvciBtb2RfcGVybCBpZiBhdmFpbGFibGUKKwkJY2F0ID4+ICIkY29uZiIgPDxFT0YKK0xvYWRNb2R1bGUgcGVybF9tb2R1bGUgJG1vZHVsZV9wYXRoL21vZF9wZXJsLnNvCitQZXJsUGFzc0VudiBHSVRfRElSCitQZXJsUGFzc0VudiBHSVRfRVhFQ19QQVRICitQZXJsUGFzc0VudiBHSVRXRUJfQ09ORklHCis8TG9jYXRpb24gL2dpdHdlYi5jZ2k+CisJU2V0SGFuZGxlciBwZXJsLXNjcmlwdAorCVBlcmxSZXNwb25zZUhhbmRsZXIgTW9kUGVybDo6UmVnaXN0cnkKKwlQZXJsT3B0aW9ucyArUGFyc2VIZWFkZXJzCisJT3B0aW9ucyArRXhlY0NHSQorPC9Mb2NhdGlvbj4KK0VPRgorCWVsc2UKKwkJIyBwbGFpbi1vbGQgQ0dJCisJCXJlc29sdmVfZnVsbF9odHRwZAorCQlsaXN0X21vZHM9JChlY2hvICIkZnVsbF9odHRwZCIgfCBzZWQgJ3MvLWYkLy1sLycpCisJCSRsaXN0X21vZHMgfCBzYW5lX2dyZXAgJ21vZF9jZ2lcLmMnID4vZGV2L251bGwgMj4mMSB8fCBcCisJCWlmIHRlc3QgLWYgIiRtb2R1bGVfcGF0aC9tb2RfY2dpLnNvIgorCQl0aGVuCisJCQllY2hvICJMb2FkTW9kdWxlIGNnaV9tb2R1bGUgJG1vZHVsZV9wYXRoL21vZF9jZ2kuc28iID4+ICIkY29uZiIKKwkJZWxzZQorCQkJJGxpc3RfbW9kcyB8IGdyZXAgJ21vZF9jZ2lkXC5jJyA+L2Rldi9udWxsIDI+JjEgfHwgXAorCQkJaWYgdGVzdCAtZiAiJG1vZHVsZV9wYXRoL21vZF9jZ2lkLnNvIgorCQkJdGhlbgorCQkJCWVjaG8gIkxvYWRNb2R1bGUgY2dpZF9tb2R1bGUgJG1vZHVsZV9wYXRoL21vZF9jZ2lkLnNvIiBcCisJCQkJCT4+ICIkY29uZiIKKwkJCWVsc2UKKwkJCQllY2hvICJZb3UgaGF2ZSBubyBDR0kgc3VwcG9ydCEiCisJCQkJZXhpdCAyCisJCQlmaQorCQkJZWNobyAiU2NyaXB0U29jayBsb2dzL2dpdHdlYi5zb2NrIiA+PiAiJGNvbmYiCisJCWZpCisJCWNhdCA+PiAiJGNvbmYiIDw8RU9GCitQYXNzRW52IEdJVF9ESVIKK1Bhc3NFbnYgR0lUX0VYRUNfUEFUSAorUGFzc0VudiBHSVRXRUJfQ09ORklHCitBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLmNnaQorPExvY2F0aW9uIC9naXR3ZWIuY2dpPgorCU9wdGlvbnMgK0V4ZWNDR0kKKzwvTG9jYXRpb24+CitFT0YKKwlmaQorfQorCittb25nb29zZV9jb25mKCkgeworCWNhdCA+ICIkY29uZiIgPDxFT0YKKyMgTW9uZ29vc2Ugd2ViIHNlcnZlciBjb25maWd1cmF0aW9uIGZpbGUuCisjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIGFuZCBlbXB0eSBsaW5lcyBhcmUgaWdub3JlZC4KKyMgRm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGV2ZXJ5IG9wdGlvbiwgdmlzaXQKKyMgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL21vbmdvb3NlL3dpa2kvTW9uZ29vc2VNYW51YWwKKworcm9vdAkJJHJvb3QKK3BvcnRzCQkkcG9ydAoraW5kZXhfZmlsZXMJZ2l0d2ViLmNnaQorI3NzbF9jZXJ0CSRmcWdpdGRpci9naXR3ZWIvc3NsX2NlcnQucGVtCitlcnJvcl9sb2cJJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS9lcnJvci5sb2cKK2FjY2Vzc19sb2cJJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS9hY2Nlc3MubG9nCisKKyNjZ2kgc2V0dXAKK2NnaV9lbnYJCVBBVEg9JFBBVEgsR0lUX0RJUj0kR0lUX0RJUixHSVRfRVhFQ19QQVRIPSRHSVRfRVhFQ19QQVRILEdJVFdFQl9DT05GSUc9JEdJVFdFQl9DT05GSUcKK2NnaV9pbnRlcnAJJFBFUkwKK2NnaV9leHQJCWNnaSxwbAorCisjIG1pbWV0eXBlIG1hcHBpbmcKK21pbWVfdHlwZXMJLmd6PWFwcGxpY2F0aW9uL3gtZ3ppcCwudGFyLmd6PWFwcGxpY2F0aW9uL3gtdGd6LC50Z3o9YXBwbGljYXRpb24veC10Z3osLnRhcj1hcHBsaWNhdGlvbi94LXRhciwuemlwPWFwcGxpY2F0aW9uL3ppcCwuZ2lmPWltYWdlL2dpZiwuanBnPWltYWdlL2pwZWcsLmpwZWc9aW1hZ2UvanBlZywucG5nPWltYWdlL3BuZywuY3NzPXRleHQvY3NzLC5odG1sPXRleHQvaHRtbCwuaHRtPXRleHQvaHRtbCwuanM9dGV4dC9qYXZhc2NyaXB0LC5jPXRleHQvcGxhaW4sLmNwcD10ZXh0L3BsYWluLC5sb2c9dGV4dC9wbGFpbiwuY29uZj10ZXh0L3BsYWluLC50ZXh0PXRleHQvcGxhaW4sLnR4dD10ZXh0L3BsYWluLC5kdGQ9dGV4dC94bWwsLmJ6Mj1hcHBsaWNhdGlvbi94LWJ6aXAsLnRiej1hcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIsLnRhci5iejI9YXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyCitFT0YKK30KKworcGxhY2t1cF9jb25mICgpIHsKKwkjIGdlbmVyYXRlIGEgc3RhbmRhbG9uZSAncGxhY2t1cCcgc2VydmVyIHNjcmlwdCBpbiAkZnFnaXRkaXIvZ2l0d2ViCisJIyB3aXRoIGVtYmVkZGVkIGNvbmZpZ3VyYXRpb247IGl0IGRvZXMgbm90IHVzZSAiJGNvbmYiIGZpbGUKKwljYXQgPiAiJGZxZ2l0ZGlyL2dpdHdlYi9naXR3ZWIucHNnaSIgPDxFT0YKKyMhJFBFUkwKKworIyBnaXR3ZWIgLSBzaW1wbGUgd2ViIGludGVyZmFjZSB0byB0cmFjayBjaGFuZ2VzIGluIGdpdCByZXBvc2l0b3JpZXMKKyMgICAgICAgICAgUFNHSSB3cmFwcGVyIGFuZCBzZXJ2ZXIgc3RhcnRlciAoc2VlIGh0dHA6Ly9wbGFja3Blcmwub3JnKQorCit1c2Ugc3RyaWN0OworCit1c2UgSU86OkhhbmRsZTsKK3VzZSBQbGFjazo6TUlNRTsKK3VzZSBQbGFjazo6QnVpbGRlcjsKK3VzZSBQbGFjazo6QXBwOjpXcmFwQ0dJOwordXNlIENHSTo6RW11bGF0ZTo6UFNHSSAwLjA3OyAjIG1pbmltdW0gdmVyc2lvbiByZXF1aXJlZCB0byB3b3JrIHdpdGggZ2l0d2ViCisKKyMgbWltZXR5cGUgbWFwcGluZyAoZnJvbSBsaWdodHRwZF9jb25mKQorUGxhY2s6Ok1JTUUtPmFkZF90eXBlKAorCSIucGRmIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wZGYiLAorCSIuc2lnIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlIiwKKwkiLnNwbCIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vZnV0dXJlc3BsYXNoIiwKKwkiLmNsYXNzIiAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKKwkiLnBzIiAgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcG9zdHNjcmlwdCIsCisJIi50b3JyZW50IiAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudCIsCisJIi5kdmkiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtZHZpIiwKKwkiLmd6IiAgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1nemlwIiwKKwkiLnBhYyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1ucy1wcm94eS1hdXRvY29uZmlnIiwKKwkiLnN3ZiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giLAorCSIudGFyLmd6IiAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRneiIsCisJIi50Z3oiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGd6IiwKKwkiLnRhciIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10YXIiLAorCSIuemlwIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi96aXAiLAorCSIubXAzIiAgICAgICAgICA9PiAgICAgICJhdWRpby9tcGVnIiwKKwkiLm0zdSIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcGVndXJsIiwKKwkiLndtYSIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcy13bWEiLAorCSIud2F4IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1zLXdheCIsCisJIi5vZ2ciICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL29nZyIsCisJIi53YXYiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtd2F2IiwKKwkiLmdpZiIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvZ2lmIiwKKwkiLmpwZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisJIi5qcGVnIiAgICAgICAgID0+ICAgICAgImltYWdlL2pwZWciLAorCSIucG5nIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9wbmciLAorCSIueGJtIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXhiaXRtYXAiLAorCSIueHBtIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXhwaXhtYXAiLAorCSIueHdkIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXh3aW5kb3dkdW1wIiwKKwkiLmNzcyIgICAgICAgICAgPT4gICAgICAidGV4dC9jc3MiLAorCSIuaHRtbCIgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorCSIuaHRtIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorCSIuanMiICAgICAgICAgICA9PiAgICAgICJ0ZXh0L2phdmFzY3JpcHQiLAorCSIuYXNjIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKwkiLmMiICAgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisJIi5jcHAiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorCSIubG9nIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKwkiLmNvbmYiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisJIi50ZXh0IiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorCSIudHh0IiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKwkiLmR0ZCIgICAgICAgICAgPT4gICAgICAidGV4dC94bWwiLAorCSIueG1sIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisJIi5tcGVnIiAgICAgICAgID0+ICAgICAgInZpZGVvL21wZWciLAorCSIubXBnIiAgICAgICAgICA9PiAgICAgICJ2aWRlby9tcGVnIiwKKwkiLm1vdiIgICAgICAgICAgPT4gICAgICAidmlkZW8vcXVpY2t0aW1lIiwKKwkiLnF0IiAgICAgICAgICAgPT4gICAgICAidmlkZW8vcXVpY2t0aW1lIiwKKwkiLmF2aSIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tc3ZpZGVvIiwKKwkiLmFzZiIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy1hc2YiLAorCSIuYXN4IiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLWFzZiIsCisJIi53bXYiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtd212IiwKKwkiLmJ6MiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwIiwKKwkiLnRieiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIiwKKwkiLnRhci5iejIiICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIiwKKwkiIiAgICAgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIKKyk7CisKK215IFwkYXBwID0gYnVpbGRlciB7CisJIyB0byBiZSBhYmxlIHRvIG92ZXJyaWRlIFwkU0lHe19fV0FSTl9ffSB0byBsb2cgYnVpbGQgdGltZSB3YXJuaW5ncworCXVzZSBDR0k6OkNhcnA7ICMgaXQgc2V0cyBcJFNJR3tfX1dBUk5fX30gaXRzZWxmCisKKwlteSBcJGxvZ2RpciA9ICIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5IjsKKwlvcGVuIG15IFwkYWNjZXNzX2xvZ19maCwgJz4+JywgIlwkbG9nZGlyL2FjY2Vzcy5sb2ciCisJCW9yIGRpZSAiQ291bGRuJ3Qgb3BlbiBhY2Nlc3MgbG9nICdcJGxvZ2Rpci9hY2Nlc3MubG9nJzogXCQhIjsKKwlvcGVuIG15IFwkZXJyb3JfbG9nX2ZoLCAgJz4+JywgIlwkbG9nZGlyL2Vycm9yLmxvZyIKKwkJb3IgZGllICJDb3VsZG4ndCBvcGVuIGVycm9yIGxvZyAnXCRsb2dkaXIvZXJyb3IubG9nJzogXCQhIjsKKworCVwkYWNjZXNzX2xvZ19maC0+YXV0b2ZsdXNoKDEpOworCVwkZXJyb3JfbG9nX2ZoLT5hdXRvZmx1c2goMSk7CisKKwkjIHJlZGlyZWN0IGJ1aWxkIHRpbWUgd2FybmluZ3MgdG8gZXJyb3IubG9nCisJXCRTSUd7J19fV0FSTl9fJ30gPSBzdWIgeworCQlteSBcJG1zZyA9IHNoaWZ0OworCQkjIHRpbWVzdGFtcCB3YXJuaW5nIGxpa2UgaW4gQ0dJOjpDYXJwOjp3YXJuCisJCW15IFwkc3RhbXAgPSBDR0k6OkNhcnA6OnN0YW1wKCk7CisJCVwkbXNnID1+IHMvXi9cJHN0YW1wL2dtOworCQlwcmludCBcJGVycm9yX2xvZ19maCBcJG1zZzsKKwl9OworCisJIyB3cml0ZSBlcnJvcnMgdG8gZXJyb3IubG9nLCBhY2Nlc3MgdG8gYWNjZXNzLmxvZworCWVuYWJsZSAnQWNjZXNzTG9nJywKKwkJZm9ybWF0ID0+ICJjb21iaW5lZCIsCisJCWxvZ2dlciA9PiBzdWIgeyBwcmludCBcJGFjY2Vzc19sb2dfZmggQF87IH07CisJZW5hYmxlIHN1YiB7CisJCW15IFwkYXBwID0gc2hpZnQ7CisJCXN1YiB7CisJCQlteSBcJGVudiA9IHNoaWZ0OworCQkJXCRlbnYtPnsncHNnaS5lcnJvcnMnfSA9IFwkZXJyb3JfbG9nX2ZoOworCQkJXCRhcHAtPihcJGVudik7CisJCX0KKwl9OworCSMgZ2l0d2ViIGN1cnJlbnRseSBkb2Vzbid0IHdvcmsgd2l0aCAkU0lHe0NITER9IHNldCB0byAnSUdOT1JFJywKKwkjIGJlY2F1c2UgaXQgdXNlcyAnY2xvc2UgJGZkIG9yIGRpZS4uLicgb24gcGlwZWQgZmlsZWhhbmRsZSAkZmgKKwkjICh3aGljaCBjYXVzZXMgdGhlIHBhcmVudCBwcm9jZXNzIHRvIHdhaXQgZm9yIGNoaWxkIHRvIGZpbmlzaCkuCisJZW5hYmxlX2lmIHsgXCRTSUd7J0NITEQnfSBlcSAnSUdOT1JFJyB9IHN1YiB7CisJCW15IFwkYXBwID0gc2hpZnQ7CisJCXN1YiB7CisJCQlteSBcJGVudiA9IHNoaWZ0OworCQkJbG9jYWwgXCRTSUd7J0NITEQnfSA9ICdERUZBVUxUJzsKKwkJCWxvY2FsIFwkU0lHeydDTEQnfSAgPSAnREVGQVVMVCc7CisJCQlcJGFwcC0+KFwkZW52KTsKKwkJfQorCX07CisJIyBzZXJ2ZSBzdGF0aWMgZmlsZXMsIGkuZS4gc3R5bGVzaGVldCwgaW1hZ2VzLCBzY3JpcHQKKwllbmFibGUgJ1N0YXRpYycsCisJCXBhdGggPT4gc3ViIHsgbSFcLihqc3xjc3N8cG5nKVwkISAmJiBzIV4vZ2l0d2ViLyEhIH0sCisJCXJvb3QgPT4gIiRyb290LyIsCisJCWVuY29kaW5nID0+ICd1dGYtOCc7ICMgZW5jb2RpbmcgZm9yICd0ZXh0L3BsYWluJyBmaWxlcworCSMgY29udmVydCBDR0kgYXBwbGljYXRpb24gdG8gUFNHSSBhcHAKKwlQbGFjazo6QXBwOjpXcmFwQ0dJLT5uZXcoc2NyaXB0ID0+ICIkcm9vdC9naXR3ZWIuY2dpIiktPnRvX2FwcDsKK307CisKKyMgbWFrZSBpdCBydW5uYWJsZSBhcyBzdGFuZGFsb25lIGFwcCwKKyMgbGlrZSBpdCB3b3VsZCBiZSBydW4gdmlhICdwbGFja3VwJyB1dGlsaXR5CitpZiAoY2FsbGVyKSB7CisJcmV0dXJuIFwkYXBwOworfSBlbHNlIHsKKwlyZXF1aXJlIFBsYWNrOjpSdW5uZXI7CisKKwlteSBcJHJ1bm5lciA9IFBsYWNrOjpSdW5uZXItPm5ldygpOworCVwkcnVubmVyLT5wYXJzZV9vcHRpb25zKHF3KC0tZW52IGRlcGxveW1lbnQgLS1wb3J0ICRwb3J0KSwKKwkJCQkiJGxvY2FsIiA/IHF3KC0taG9zdCAxMjcuMC4wLjEpIDogKCkpOworCVwkcnVubmVyLT5ydW4oXCRhcHApOworfQorX19FTkRfXworRU9GCisKKwljaG1vZCBhK3ggIiRmcWdpdGRpci9naXR3ZWIvZ2l0d2ViLnBzZ2kiCisJIyBjb25maWd1cmF0aW9uIGlzIGVtYmVkZGVkIGluIHNlcnZlciBzY3JpcHQgZmlsZSwgZ2l0d2ViLnBzZ2kKKwlybSAtZiAiJGNvbmYiCit9CisKK2dpdHdlYl9jb25mKCkgeworCWNhdCA+ICIkZnFnaXRkaXIvZ2l0d2ViL2dpdHdlYl9jb25maWcucGVybCIgPDxFT0YKKyMhL3Vzci9iaW4vcGVybAorb3VyIFwkcHJvamVjdHJvb3QgPSAiJChkaXJuYW1lICIkZnFnaXRkaXIiKSI7CitvdXIgXCRnaXRfdGVtcCA9ICIkZnFnaXRkaXIvZ2l0d2ViL3RtcCI7CitvdXIgXCRwcm9qZWN0c19saXN0ID0gXCRwcm9qZWN0cm9vdDsKKworXCRmZWF0dXJleydyZW1vdGVfaGVhZHMnfXsnZGVmYXVsdCd9ID0gWzFdOworRU9GCit9CisKK2NvbmZpZ3VyZV9odHRwZCgpIHsKKwljYXNlICIkaHR0cGQiIGluCisJKmxpZ2h0dHBkKikKKwkJbGlnaHR0cGRfY29uZgorCQk7OworCSphcGFjaGUyKnwqaHR0cGQqKQorCQlhcGFjaGUyX2NvbmYKKwkJOzsKKwl3ZWJyaWNrKQorCQl3ZWJyaWNrX2NvbmYKKwkJOzsKKwkqbW9uZ29vc2UqKQorCQltb25nb29zZV9jb25mCisJCTs7CisJKnBsYWNrdXAqKQorCQlwbGFja3VwX2NvbmYKKwkJOzsKKwkqKQorCQllY2hvICJVbmtub3duIGh0dHBkIHNwZWNpZmllZDogJGh0dHBkIgorCQlleGl0IDEKKwkJOzsKKwllc2FjCit9CisKK2Nhc2UgIiRhY3Rpb24iIGluCitzdG9wKQorCXN0b3BfaHR0cGQKKwlleGl0IDAKKwk7Oworc3RhcnQpCisJc3RhcnRfaHR0cGQKKwlleGl0IDAKKwk7OworcmVzdGFydCkKKwlzdG9wX2h0dHBkCisJc3RhcnRfaHR0cGQKKwlleGl0IDAKKwk7OworZXNhYworCitnaXR3ZWJfY29uZgorCityZXNvbHZlX2Z1bGxfaHR0cGQKK21rZGlyIC1wICIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5IgorY29uZj0iJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS5jb25mIgorCitjb25maWd1cmVfaHR0cGQKKworc3RhcnRfaHR0cGQKK3VybD1odHRwOi8vMTI3LjAuMC4xOiRwb3J0CisKK2lmIHRlc3QgLW4gIiRicm93c2VyIjsgdGhlbgorCWh0dHBkX2lzX3JlYWR5ICYmIGdpdCB3ZWItLWJyb3dzZSAtYiAiJGJyb3dzZXIiICR1cmwgfHwgZWNobyAkdXJsCitlbHNlCisJaHR0cGRfaXNfcmVhZHkgJiYgZ2l0IHdlYi0tYnJvd3NlIC1jICJpbnN0YXdlYi5icm93c2VyIiAkdXJsIHx8IGVjaG8gJHVybAorZmkKZGlmZiAtLWdpdCBhL2dpdC1sb3N0LWZvdW5kLnNoIGIvZ2l0LWxvc3QtZm91bmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGIzZThjNwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1sb3N0LWZvdW5kLnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorCitVU0FHRT0nJworU1VCRElSRUNUT1JZX09LPSdZZXMnCitPUFRJT05TX1NQRUM9CisuIGdpdC1zaC1zZXR1cAorCitlY2hvICJXQVJOSU5HOiAnJDAnIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgJ2dpdCBmc2NrIC0tbG9zdC1mb3VuZCciID4mMgorCitpZiBbICIkIyIgIT0gIjAiIF0KK3RoZW4KKyAgICB1c2FnZQorZmkKKworbGFmPSIkR0lUX0RJUi9sb3N0LWZvdW5kIgorcm0gLWZyICIkbGFmIiAmJiBta2RpciAtcCAiJGxhZi9jb21taXQiICIkbGFmL290aGVyIiB8fCBleGl0CisKK2dpdCBmc2NrIC0tZnVsbCAtLW5vLXJlZmxvZ3MgfAord2hpbGUgcmVhZCBkYW5nbGluZyB0eXBlIHNoYTEKK2RvCisJY2FzZSAiJGRhbmdsaW5nIiBpbgorCWRhbmdsaW5nKQorCQlpZiBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkc2hhMV4wIiA+L2Rldi9udWxsCisJCXRoZW4KKwkJCWRpcj0iJGxhZi9jb21taXQiCisJCQlnaXQgc2hvdy1icmFuY2ggIiRzaGExIgorCQllbHNlCisJCQlkaXI9IiRsYWYvb3RoZXIiCisJCWZpCisJCWVjaG8gIiRzaGExIiA+IiRkaXIvJHNoYTEiCisJCTs7CisJZXNhYworZG9uZQpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLW9jdG9wdXMuc2ggYi9naXQtbWVyZ2Utb2N0b3B1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NjQzZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LW1lcmdlLW9jdG9wdXMuc2gKQEAgLTAsMCArMSwxMDkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKyMgUmVzb2x2ZSB0d28gb3IgbW9yZSB0cmVlcy4KKyMKKworTEY9JworJworCitkaWUgKCkgeworICAgIGVjaG8gPiYyICIkKiIKKyAgICBleGl0IDEKK30KKworIyBUaGUgZmlyc3QgcGFyYW1ldGVycyB1cCB0byAtLSBhcmUgbWVyZ2UgYmFzZXM7IHRoZSByZXN0IGFyZSBoZWFkcy4KK2Jhc2VzPSBoZWFkPSByZW1vdGVzPSBzZXBfc2Vlbj0KK2ZvciBhcmcKK2RvCisJY2FzZSAiLCRzZXBfc2VlbiwkaGVhZCwkYXJnLCIgaW4KKwkqLC0tLCkKKwkJc2VwX3NlZW49eWVzCisJCTs7CisJLHllcywsKikKKwkJaGVhZD0kYXJnCisJCTs7CisJLHllcywqKQorCQlyZW1vdGVzPSIkcmVtb3RlcyRhcmcgIgorCQk7OworCSopCisJCWJhc2VzPSIkYmFzZXMkYXJnICIKKwkJOzsKKwllc2FjCitkb25lCisKKyMgUmVqZWN0IGlmIHRoaXMgaXMgbm90IGFuIE9jdG9wdXMgLS0gcmVzb2x2ZSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorY2FzZSAiJHJlbW90ZXMiIGluCis/KicgJz8qKQorCTs7CisqKQorCWV4aXQgMiA7OworZXNhYworCisjIE1SQyBpcyB0aGUgY3VycmVudCAibWVyZ2UgcmVmZXJlbmNlIGNvbW1pdCIKKyMgTVJUIGlzIHRoZSBjdXJyZW50ICJtZXJnZSByZXN1bHQgdHJlZSIKKworTVJDPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkaGVhZCkKK01SVD0kKGdpdCB3cml0ZS10cmVlKQorTk9OX0ZGX01FUkdFPTAKK09DVE9QVVNfRkFJTFVSRT0wCitmb3IgU0hBMSBpbiAkcmVtb3RlcworZG8KKwljYXNlICIkT0NUT1BVU19GQUlMVVJFIiBpbgorCTEpCisJCSMgV2UgYWxsb3cgb25seSBsYXN0IG9uZSB0byBoYXZlIGEgaGFuZC1yZXNvbHZhYmxlCisJCSMgY29uZmxpY3RzLiAgTGFzdCByb3VuZCBmYWlsZWQgYW5kIHdlIHN0aWxsIGhhZAorCQkjIGEgaGVhZCB0byBtZXJnZS4KKwkJZWNobyAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCisJCWVjaG8gIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gT2N0b3B1cy4iCisJCWV4aXQgMgorCWVzYWMKKworCWV2YWwgcHJldHR5X25hbWU9XCR7R0lUSEVBRF8kU0hBMTotJFNIQTF9CisJaWYgdGVzdCAiJFNIQTEiID0gIiRwcmV0dHlfbmFtZSIKKwl0aGVuCisJCVNIQTFfVVA9IiQoZWNobyAiJFNIQTEiIHwgdHIgYS16IEEtWikiCisJCWV2YWwgcHJldHR5X25hbWU9XCR7R0lUSEVBRF8kU0hBMV9VUDotJHByZXR0eV9uYW1lfQorCWZpCisJY29tbW9uPSQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgJFNIQTEgJE1SQykgfHwKKwkJZGllICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggJHByZXR0eV9uYW1lIgorCisJY2FzZSAiJExGJGNvbW1vbiRMRiIgaW4KKwkqIiRMRiRTSEExJExGIiopCisJCWVjaG8gIkFscmVhZHkgdXAtdG8tZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKKwkJY29udGludWUKKwkJOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkY29tbW9uLCROT05fRkZfTUVSR0UiID0gIiRNUkMsMCIKKwl0aGVuCisJCSMgVGhlIGZpcnN0IGhlYWQgYmVpbmcgbWVyZ2VkIHdhcyBhIGZhc3QtZm9yd2FyZC4KKwkJIyBBZHZhbmNlIE1SQyB0byB0aGUgaGVhZCBiZWluZyBtZXJnZWQsIGFuZCB1c2UgdGhhdAorCQkjIHRyZWUgYXMgdGhlIGludGVybWVkaWF0ZSByZXN1bHQgb2YgdGhlIG1lcmdlLgorCQkjIFdlIHN0aWxsIG5lZWQgdG8gY291bnQgdGhpcyBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQgc2V0LgorCisJCWVjaG8gIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorCQlnaXQgcmVhZC10cmVlIC11IC1tICRoZWFkICRTSEExIHx8IGV4aXQKKwkJTVJDPSRTSEExIE1SVD0kKGdpdCB3cml0ZS10cmVlKQorCQljb250aW51ZQorCWZpCisKKwlOT05fRkZfTUVSR0U9MQorCisJZWNobyAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKKwlnaXQgcmVhZC10cmVlIC11IC1tIC0tYWdncmVzc2l2ZSAgJGNvbW1vbiAkTVJUICRTSEExIHx8IGV4aXQgMgorCW5leHQ9JChnaXQgd3JpdGUtdHJlZSAyPi9kZXYvbnVsbCkKKwlpZiB0ZXN0ICQ/IC1uZSAwCisJdGhlbgorCQllY2hvICJTaW1wbGUgbWVyZ2UgZGlkIG5vdCB3b3JrLCB0cnlpbmcgYXV0b21hdGljIG1lcmdlLiIKKwkJZ2l0LW1lcmdlLWluZGV4IC1vIGdpdC1tZXJnZS1vbmUtZmlsZSAtYSB8fAorCQlPQ1RPUFVTX0ZBSUxVUkU9MQorCQluZXh0PSQoZ2l0IHdyaXRlLXRyZWUgMj4vZGV2L251bGwpCisJZmkKKworCU1SQz0iJE1SQyAkU0hBMSIKKwlNUlQ9JG5leHQKK2RvbmUKKworZXhpdCAiJE9DVE9QVVNfRkFJTFVSRSIKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZS1vbmUtZmlsZS5zaCBiL2dpdC1tZXJnZS1vbmUtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNjEyY2I4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LW1lcmdlLW9uZS1maWxlLnNoCkBAIC0wLDAgKzEsMTY1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSBMaW51cyBUb3J2YWxkcywgMjAwNQorIworIyBUaGlzIGlzIHRoZSBnaXQgcGVyLWZpbGUgbWVyZ2Ugc2NyaXB0LCBjYWxsZWQgd2l0aAorIworIyAgICQxIC0gb3JpZ2luYWwgZmlsZSBTSEExIChvciBlbXB0eSkKKyMgICAkMiAtIGZpbGUgaW4gYnJhbmNoMSBTSEExIChvciBlbXB0eSkKKyMgICAkMyAtIGZpbGUgaW4gYnJhbmNoMiBTSEExIChvciBlbXB0eSkKKyMgICAkNCAtIHBhdGhuYW1lIGluIHJlcG9zaXRvcnkKKyMgICAkNSAtIG9yaWdpbmFsIGZpbGUgbW9kZSAob3IgZW1wdHkpCisjICAgJDYgLSBmaWxlIGluIGJyYW5jaDEgbW9kZSAob3IgZW1wdHkpCisjICAgJDcgLSBmaWxlIGluIGJyYW5jaDIgbW9kZSAob3IgZW1wdHkpCisjCisjIEhhbmRsZSBzb21lIHRyaXZpYWwgY2FzZXMuLiBUaGUgX3JlYWxseV8gdHJpdmlhbCBjYXNlcyBoYXZlCisjIGJlZW4gaGFuZGxlZCBhbHJlYWR5IGJ5IGdpdCByZWFkLXRyZWUsIGJ1dCB0aGF0IG9uZSBkb2Vzbid0CisjIGRvIGFueSBtZXJnZXMgdGhhdCBtaWdodCBjaGFuZ2UgdGhlIHRyZWUgbGF5b3V0LgorCitVU0FHRT0nPG9yaWcgYmxvYj4gPG91ciBibG9iPiA8dGhlaXIgYmxvYj4gPHBhdGg+JworVVNBR0U9IiRVU0FHRSA8b3JpZyBtb2RlPiA8b3VyIG1vZGU+IDx0aGVpciBtb2RlPiIKK0xPTkdfVVNBR0U9IlVzYWdlOiBnaXQgbWVyZ2Utb25lLWZpbGUgJFVTQUdFCisKK0Jsb2IgaWRzIGFuZCBtb2RlcyBzaG91bGQgYmUgZW1wdHkgZm9yIG1pc3NpbmcgZmlsZXMuIgorCitTVUJESVJFQ1RPUllfT0s9WWVzCisuIGdpdC1zaC1zZXR1cAorY2RfdG9fdG9wbGV2ZWwKK3JlcXVpcmVfd29ya190cmVlCisKK2lmICEgdGVzdCAiJCMiIC1lcSA3Cit0aGVuCisJZWNobyAiJExPTkdfVVNBR0UiCisJZXhpdCAxCitmaQorCitjYXNlICIkezE6LS59JHsyOi0ufSR7MzotLn0iIGluCisjCisjIERlbGV0ZWQgaW4gYm90aCBvciBkZWxldGVkIGluIG9uZSBhbmQgdW5jaGFuZ2VkIGluIHRoZSBvdGhlcgorIworIiQxLi4iIHwgIiQxLiQxIiB8ICIkMSQxLiIpCisJaWYgWyAiJDIiIF07IHRoZW4KKwkJZWNobyAiUmVtb3ZpbmcgJDQiCisJZWxzZQorCQkjIHJlYWQtdHJlZSBjaGVja2VkIHRoYXQgaW5kZXggbWF0Y2hlcyBIRUFEIGFscmVhZHksCisJCSMgc28gd2Uga25vdyB3ZSBkbyBub3QgaGF2ZSB0aGlzIHBhdGggdHJhY2tlZC4KKwkJIyB0aGVyZSBtYXkgYmUgYW4gdW5yZWxhdGVkIHdvcmtpbmcgdHJlZSBmaWxlIGhlcmUsCisJCSMgd2hpY2ggd2Ugc2hvdWxkIGp1c3QgbGVhdmUgdW5tb2xlc3RlZC4gIE1ha2Ugc3VyZQorCQkjIHdlIGRvIG5vdCBoYXZlIGl0IGluIHRoZSBpbmRleCwgdGhvdWdoLgorCQlleGVjIGdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS0gIiQ0IgorCWZpCisJaWYgdGVzdCAtZiAiJDQiOyB0aGVuCisJCXJtIC1mIC0tICIkNCIgJiYKKwkJcm1kaXIgLXAgIiQoZXhwciAieiQ0IiA6ICd6XCguKlwpLycpIiAyPi9kZXYvbnVsbCB8fCA6CisJZmkgJiYKKwkJZXhlYyBnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tICIkNCIKKwk7OworCisjCisjIEFkZGVkIGluIG9uZS4KKyMKKyIuJDIuIikKKwkjIHRoZSBvdGhlciBzaWRlIGRpZCBub3QgYWRkIGFuZCB3ZSBhZGRlZCBzbyB0aGVyZSBpcyBub3RoaW5nCisJIyB0byBiZSBkb25lLCBleGNlcHQgbWFraW5nIHRoZSBwYXRoIG1lcmdlZC4KKwlleGVjIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gIiQ2IiAiJDIiICIkNCIKKwk7OworIi4uJDMiKQorCWVjaG8gIkFkZGluZyAkNCIKKwlpZiB0ZXN0IC1mICIkNCIKKwl0aGVuCisJCWVjaG8gIkVSUk9SOiB1bnRyYWNrZWQgJDQgaXMgb3ZlcndyaXR0ZW4gYnkgdGhlIG1lcmdlLiIKKwkJZXhpdCAxCisJZmkKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvICIkNyIgIiQzIiAiJDQiICYmCisJCWV4ZWMgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC0tICIkNCIKKwk7OworCisjCisjIEFkZGVkIGluIGJvdGgsIGlkZW50aWNhbGx5IChjaGVjayBmb3Igc2FtZSBwZXJtaXNzaW9ucykuCisjCisiLiQzJDIiKQorCWlmIFsgIiQ2IiAhPSAiJDciIF07IHRoZW4KKwkJZWNobyAiRVJST1I6IEZpbGUgJDQgYWRkZWQgaWRlbnRpY2FsbHkgaW4gYm90aCBicmFuY2hlcywiCisJCWVjaG8gIkVSUk9SOiBidXQgcGVybWlzc2lvbnMgY29uZmxpY3QgJDYtPiQ3LiIKKwkJZXhpdCAxCisJZmkKKwllY2hvICJBZGRpbmcgJDQiCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAiJDYiICIkMiIgIiQ0IiAmJgorCQlleGVjIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtLSAiJDQiCisJOzsKKworIworIyBNb2RpZmllZCBpbiBib3RoLCBidXQgZGlmZmVyZW50bHkuCisjCisiJDEkMiQzIiB8ICIuJDIkMyIpCisKKwljYXNlICIsJDYsJDcsIiBpbgorCSosMTIwMDAwLCopCisJCWVjaG8gIkVSUk9SOiAkNDogTm90IG1lcmdpbmcgc3ltYm9saWMgbGluayBjaGFuZ2VzLiIKKwkJZXhpdCAxCisJCTs7CisJKiwxNjAwMDAsKikKKwkJZWNobyAiRVJST1I6ICQ0OiBOb3QgbWVyZ2luZyBjb25mbGljdGluZyBzdWJtb2R1bGUgY2hhbmdlcy4iCisJCWV4aXQgMQorCQk7OworCWVzYWMKKworCXNyYzI9YGdpdC11bnBhY2stZmlsZSAkM2AKKwljYXNlICIkMSIgaW4KKwknJykKKwkJZWNobyAiQWRkZWQgJDQgaW4gYm90aCwgYnV0IGRpZmZlcmVudGx5LiIKKwkJIyBUaGlzIGV4dHJhY3RzIE9VUiBmaWxlIGluICRvcmlnLCBhbmQgdXNlcyBnaXQgYXBwbHkgdG8KKwkJIyByZW1vdmUgbGluZXMgdGhhdCBhcmUgdW5pcXVlIHRvIG91cnMuCisJCW9yaWc9YGdpdC11bnBhY2stZmlsZSAkMmAKKwkJc3owPWB3YyAtYyA8IiRvcmlnImAKKwkJQEBESUZGQEAgLXUgLUxhLyRvcmlnIC1MYi8kb3JpZyAkb3JpZyAkc3JjMiB8IGdpdCBhcHBseSAtLW5vLWFkZAorCQlzejE9YHdjIC1jIDwiJG9yaWciYAorCisJCSMgSWYgd2UgZG8gbm90IGhhdmUgZW5vdWdoIGNvbW1vbiBtYXRlcmlhbCwgaXQgaXMgbm90CisJCSMgd29ydGggdHJ5aW5nIHR3by1maWxlIG1lcmdlIHVzaW5nIGNvbW1vbiBzdWJzZWN0aW9ucy4KKwkJZXhwciAkc3owIFw8ICRzejEgXCogMiA+L2Rldi9udWxsIHx8IDogPiRvcmlnCisJCTs7CisJKikKKwkJZWNobyAiQXV0by1tZXJnaW5nICQ0IgorCQlvcmlnPWBnaXQtdW5wYWNrLWZpbGUgJDFgCisJCTs7CisJZXNhYworCisJIyBCZSBjYXJlZnVsIGZvciBmdW5ueSBmaWxlbmFtZSBzdWNoIGFzICItTCIgaW4gIiQ0Iiwgd2hpY2gKKwkjIHdvdWxkIGNvbmZ1c2UgIm1lcmdlIiBncmVhdGx5LgorCXNyYzE9YGdpdC11bnBhY2stZmlsZSAkMmAKKwlnaXQgbWVyZ2UtZmlsZSAiJHNyYzEiICIkb3JpZyIgIiRzcmMyIgorCXJldD0kPworCW1zZz0KKwlpZiBbICRyZXQgLW5lIDAgXTsgdGhlbgorCQltc2c9J2NvbnRlbnQgY29uZmxpY3QnCisJZmkKKworCSMgQ3JlYXRlIHRoZSB3b3JraW5nIHRyZWUgZmlsZSwgdXNpbmcgIm91ciB0cmVlIiB2ZXJzaW9uIGZyb20gdGhlCisJIyBpbmRleCwgYW5kIHRoZW4gc3RvcmUgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tc3RhZ2U9MiAtLSAiJDQiICYmIGNhdCAiJHNyYzEiID4iJDQiIHx8IGV4aXQgMQorCXJtIC1mIC0tICIkb3JpZyIgIiRzcmMxIiAiJHNyYzIiCisKKwlpZiBbICIkNiIgIT0gIiQ3IiBdOyB0aGVuCisJCWlmIFsgLW4gIiRtc2ciIF07IHRoZW4KKwkJCW1zZz0iJG1zZywgIgorCQlmaQorCQltc2c9IiR7bXNnfXBlcm1pc3Npb25zIGNvbmZsaWN0OiAkNS0+JDYsJDciCisJCXJldD0xCisJZmkKKwlpZiBbICIkMSIgPSAnJyBdOyB0aGVuCisJCXJldD0xCisJZmkKKworCWlmIFsgJHJldCAtbmUgMCBdOyB0aGVuCisJCWVjaG8gIkVSUk9SOiAkbXNnIGluICQ0IgorCQlleGl0IDEKKwlmaQorCWV4ZWMgZ2l0IHVwZGF0ZS1pbmRleCAtLSAiJDQiCisJOzsKKworKikKKwllY2hvICJFUlJPUjogJDQ6IE5vdCBoYW5kbGluZyBjYXNlICQxIC0+ICQyIC0+ICQzIgorCTs7Citlc2FjCitleGl0IDEKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZS1yZXNvbHZlLnNoIGIvZ2l0LW1lcmdlLXJlc29sdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzlkYTc0NwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1tZXJnZS1yZXNvbHZlLnNoCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgTGludXMgVG9ydmFsZHMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisjIFJlc29sdmUgdHdvIHRyZWVzLCB1c2luZyBlbmhhbmNlZCBtdWx0aS1iYXNlIHJlYWQtdHJlZS4KKworIyBUaGUgZmlyc3QgcGFyYW1ldGVycyB1cCB0byAtLSBhcmUgbWVyZ2UgYmFzZXM7IHRoZSByZXN0IGFyZSBoZWFkcy4KK2Jhc2VzPSBoZWFkPSByZW1vdGVzPSBzZXBfc2Vlbj0KK2ZvciBhcmcKK2RvCisJY2FzZSAiLCRzZXBfc2VlbiwkaGVhZCwkYXJnLCIgaW4KKwkqLC0tLCkKKwkJc2VwX3NlZW49eWVzCisJCTs7CisJLHllcywsKikKKwkJaGVhZD0kYXJnCisJCTs7CisJLHllcywqKQorCQlyZW1vdGVzPSIkcmVtb3RlcyRhcmcgIgorCQk7OworCSopCisJCWJhc2VzPSIkYmFzZXMkYXJnICIKKwkJOzsKKwllc2FjCitkb25lCisKKyMgR2l2ZSB1cCBpZiB3ZSBhcmUgZ2l2ZW4gdHdvIG9yIG1vcmUgcmVtb3RlcyAtLSBub3QgaGFuZGxpbmcgb2N0b3B1cy4KK2Nhc2UgIiRyZW1vdGVzIiBpbgorPyonICc/KikKKwlleGl0IDIgOzsKK2VzYWMKKworIyBHaXZlIHVwIGlmIHRoaXMgaXMgYSBiYXNlbGVzcyBtZXJnZS4KK2lmIHRlc3QgJycgPSAiJGJhc2VzIgordGhlbgorCWV4aXQgMgorZmkKKworZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2gKK2dpdCByZWFkLXRyZWUgLXUgLW0gLS1hZ2dyZXNzaXZlICRiYXNlcyAkaGVhZCAkcmVtb3RlcyB8fCBleGl0IDIKK2VjaG8gIlRyeWluZyBzaW1wbGUgbWVyZ2UuIgoraWYgcmVzdWx0X3RyZWU9JChnaXQgd3JpdGUtdHJlZSAyPi9kZXYvbnVsbCkKK3RoZW4KKwlleGl0IDAKK2Vsc2UKKwllY2hvICJTaW1wbGUgbWVyZ2UgZmFpbGVkLCB0cnlpbmcgQXV0b21hdGljIG1lcmdlLiIKKwlpZiBnaXQtbWVyZ2UtaW5kZXggLW8gZ2l0LW1lcmdlLW9uZS1maWxlIC1hCisJdGhlbgorCQlleGl0IDAKKwllbHNlCisJCWV4aXQgMQorCWZpCitmaQpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdldG9vbC0tbGliLnNoIGIvZ2l0LW1lcmdldG9vbC0tbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMTNhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtbWVyZ2V0b29sLS1saWIuc2gKQEAgLTAsMCArMSwyNTIgQEAKKyMhL2Jpbi9zaAorIyBnaXQtbWVyZ2V0b29sLS1saWIgaXMgYSBsaWJyYXJ5IGZvciBjb21tb24gbWVyZ2UgdG9vbCBmdW5jdGlvbnMKK2RpZmZfbW9kZSgpIHsKKwl0ZXN0ICIkVE9PTF9NT0RFIiA9IGRpZmYKK30KKworbWVyZ2VfbW9kZSgpIHsKKwl0ZXN0ICIkVE9PTF9NT0RFIiA9IG1lcmdlCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGggKCkgeworCWVjaG8gIiQxIgorfQorCitjaGVja191bmNoYW5nZWQgKCkgeworCWlmIHRlc3QgIiRNRVJHRUQiIC1udCAiJEJBQ0tVUCIKKwl0aGVuCisJCXN0YXR1cz0wCisJZWxzZQorCQl3aGlsZSB0cnVlCisJCWRvCisJCQllY2hvICIkTUVSR0VEIHNlZW1zIHVuY2hhbmdlZC4iCisJCQlwcmludGYgIldhcyB0aGUgbWVyZ2Ugc3VjY2Vzc2Z1bD8gW3kvbl0gIgorCQkJcmVhZCBhbnN3ZXIgfHwgcmV0dXJuIDEKKwkJCWNhc2UgIiRhbnN3ZXIiIGluCisJCQl5KnxZKikgc3RhdHVzPTA7IGJyZWFrIDs7CisJCQluKnxOKikgc3RhdHVzPTE7IGJyZWFrIDs7CisJCQllc2FjCisJCWRvbmUKKwlmaQorfQorCit2YWxpZF90b29sX2NvbmZpZyAoKSB7CisJaWYgdGVzdCAtbiAiJChnZXRfbWVyZ2VfdG9vbF9jbWQgIiQxIikiCisJdGhlbgorCQlyZXR1cm4gMAorCWVsc2UKKwkJcmV0dXJuIDEKKwlmaQorfQorCit2YWxpZF90b29sICgpIHsKKwlzZXR1cF90b29sICIkMSIgfHwgdmFsaWRfdG9vbF9jb25maWcgIiQxIgorfQorCitzZXR1cF90b29sICgpIHsKKwljYXNlICIkMSIgaW4KKwl2aW0qfGd2aW0qKQorCQl0b29sPXZpbQorCQk7OworCSopCisJCXRvb2w9IiQxIgorCQk7OworCWVzYWMKKwltZXJnZXRvb2xzPSIkKGdpdCAtLWV4ZWMtcGF0aCkvbWVyZ2V0b29scyIKKworCSMgTG9hZCB0aGUgZGVmYXVsdCBkZWZpbml0aW9ucworCS4gIiRtZXJnZXRvb2xzL2RlZmF1bHRzIgorCWlmICEgdGVzdCAtZiAiJG1lcmdldG9vbHMvJHRvb2wiCisJdGhlbgorCQlyZXR1cm4gMQorCWZpCisKKwkjIExvYWQgdGhlIHJlZGVmaW5lZCBmdW5jdGlvbnMKKwkuICIkbWVyZ2V0b29scy8kdG9vbCIKKworCWlmIG1lcmdlX21vZGUgJiYgISBjYW5fbWVyZ2UKKwl0aGVuCisJCWVjaG8gImVycm9yOiAnJHRvb2wnIGNhbiBub3QgYmUgdXNlZCB0byByZXNvbHZlIG1lcmdlcyIgPiYyCisJCWV4aXQgMQorCWVsaWYgZGlmZl9tb2RlICYmICEgY2FuX2RpZmYKKwl0aGVuCisJCWVjaG8gImVycm9yOiAnJHRvb2wnIGNhbiBvbmx5IGJlIHVzZWQgdG8gcmVzb2x2ZSBtZXJnZXMiID4mMgorCQlleGl0IDEKKwlmaQorCXJldHVybiAwCit9CisKK2dldF9tZXJnZV90b29sX2NtZCAoKSB7CisJIyBQcmludHMgdGhlIGN1c3RvbSBjb21tYW5kIGZvciBhIG1lcmdlIHRvb2wKKwltZXJnZV90b29sPSIkMSIKKwlpZiBkaWZmX21vZGUKKwl0aGVuCisJCWVjaG8gIiQoZ2l0IGNvbmZpZyBkaWZmdG9vbC4kbWVyZ2VfdG9vbC5jbWQgfHwKKwkJCWdpdCBjb25maWcgbWVyZ2V0b29sLiRtZXJnZV90b29sLmNtZCkiCisJZWxzZQorCQllY2hvICIkKGdpdCBjb25maWcgbWVyZ2V0b29sLiRtZXJnZV90b29sLmNtZCkiCisJZmkKK30KKworIyBFbnRyeSBwb2ludCBmb3IgcnVubmluZyB0b29scworcnVuX21lcmdlX3Rvb2wgKCkgeworCSMgSWYgR0lUX1BSRUZJWCBpcyBlbXB0eSB0aGVuIHdlIGNhbm5vdCB1c2UgaXQgaW4gdG9vbHMKKwkjIHRoYXQgZXhwZWN0IHRvIGJlIGFibGUgdG8gY2hkaXIoKSB0byBpdHMgdmFsdWUuCisJR0lUX1BSRUZJWD0ke0dJVF9QUkVGSVg6LS59CisJZXhwb3J0IEdJVF9QUkVGSVgKKworCW1lcmdlX3Rvb2xfcGF0aD0iJChnZXRfbWVyZ2VfdG9vbF9wYXRoICIkMSIpIiB8fCBleGl0CisJYmFzZV9wcmVzZW50PSIkMiIKKwlzdGF0dXM9MAorCisJIyBCcmluZyB0b29sLXNwZWNpZmljIGZ1bmN0aW9ucyBpbnRvIHNjb3BlCisJc2V0dXBfdG9vbCAiJDEiCisKKwlpZiBtZXJnZV9tb2RlCisJdGhlbgorCQlydW5fbWVyZ2VfY21kICIkMSIKKwllbHNlCisJCXJ1bl9kaWZmX2NtZCAiJDEiCisJZmkKKwlyZXR1cm4gJHN0YXR1cworfQorCisjIFJ1biBhIGVpdGhlciBhIGNvbmZpZ3VyZWQgb3IgYnVpbHQtaW4gZGlmZiB0b29sCitydW5fZGlmZl9jbWQgKCkgeworCW1lcmdlX3Rvb2xfY21kPSIkKGdldF9tZXJnZV90b29sX2NtZCAiJDEiKSIKKwlpZiB0ZXN0IC1uICIkbWVyZ2VfdG9vbF9jbWQiCisJdGhlbgorCQkoIGV2YWwgJG1lcmdlX3Rvb2xfY21kICkKKwkJc3RhdHVzPSQ/CisJCXJldHVybiAkc3RhdHVzCisJZWxzZQorCQlkaWZmX2NtZCAiJDEiCisJZmkKK30KKworIyBSdW4gYSBlaXRoZXIgYSBjb25maWd1cmVkIG9yIGJ1aWx0LWluIG1lcmdlIHRvb2wKK3J1bl9tZXJnZV9jbWQgKCkgeworCW1lcmdlX3Rvb2xfY21kPSIkKGdldF9tZXJnZV90b29sX2NtZCAiJDEiKSIKKwlpZiB0ZXN0IC1uICIkbWVyZ2VfdG9vbF9jbWQiCisJdGhlbgorCQl0cnVzdF9leGl0X2NvZGU9IiQoZ2l0IGNvbmZpZyAtLWJvb2wgXAorCQkJbWVyZ2V0b29sLiIkMSIudHJ1c3RFeGl0Q29kZSB8fCBlY2hvIGZhbHNlKSIKKwkJaWYgdGVzdCAiJHRydXN0X2V4aXRfY29kZSIgPSAiZmFsc2UiCisJCXRoZW4KKwkJCXRvdWNoICIkQkFDS1VQIgorCQkJKCBldmFsICRtZXJnZV90b29sX2NtZCApCisJCQlzdGF0dXM9JD8KKwkJCWNoZWNrX3VuY2hhbmdlZAorCQllbHNlCisJCQkoIGV2YWwgJG1lcmdlX3Rvb2xfY21kICkKKwkJCXN0YXR1cz0kPworCQlmaQorCQlyZXR1cm4gJHN0YXR1cworCWVsc2UKKwkJbWVyZ2VfY21kICIkMSIKKwlmaQorfQorCitsaXN0X21lcmdlX3Rvb2xfY2FuZGlkYXRlcyAoKSB7CisJaWYgbWVyZ2VfbW9kZQorCXRoZW4KKwkJdG9vbHM9InRvcnRvaXNlbWVyZ2UiCisJZWxzZQorCQl0b29scz0ia29tcGFyZSIKKwlmaQorCWlmIHRlc3QgLW4gIiRESVNQTEFZIgorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJEdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIKKwkJdGhlbgorCQkJdG9vbHM9Im1lbGQgb3BlbmRpZmYga2RpZmYzIHRrZGlmZiB4eGRpZmYgJHRvb2xzIgorCQllbHNlCisJCQl0b29scz0ib3BlbmRpZmYga2RpZmYzIHRrZGlmZiB4eGRpZmYgbWVsZCAkdG9vbHMiCisJCWZpCisJCXRvb2xzPSIkdG9vbHMgZ3ZpbWRpZmYgZGlmZnVzZSBlY21lcmdlIHA0bWVyZ2UgYXJheGlzIGJjMyBjb2RlY29tcGFyZSIKKwlmaQorCWNhc2UgIiR7VklTVUFMOi0kRURJVE9SfSIgaW4KKwkqdmltKikKKwkJdG9vbHM9IiR0b29scyB2aW1kaWZmIGVtZXJnZSIKKwkJOzsKKwkqKQorCQl0b29scz0iJHRvb2xzIGVtZXJnZSB2aW1kaWZmIgorCQk7OworCWVzYWMKK30KKworZ3Vlc3NfbWVyZ2VfdG9vbCAoKSB7CisJbGlzdF9tZXJnZV90b29sX2NhbmRpZGF0ZXMKKwllY2hvID4mMiAibWVyZ2UgdG9vbCBjYW5kaWRhdGVzOiAkdG9vbHMiCisKKwkjIExvb3Agb3ZlciBlYWNoIGNhbmRpZGF0ZSBhbmQgc3RvcCB3aGVuIGEgdmFsaWQgbWVyZ2UgdG9vbCBpcyBmb3VuZC4KKwlmb3IgaSBpbiAkdG9vbHMKKwlkbworCQltZXJnZV90b29sX3BhdGg9IiQodHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCAiJGkiKSIKKwkJaWYgdHlwZSAiJG1lcmdlX3Rvb2xfcGF0aCIgPi9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCWVjaG8gIiRpIgorCQkJcmV0dXJuIDAKKwkJZmkKKwlkb25lCisKKwllY2hvID4mMiAiTm8ga25vd24gbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIGF2YWlsYWJsZS4iCisJcmV0dXJuIDEKK30KKworZ2V0X2NvbmZpZ3VyZWRfbWVyZ2VfdG9vbCAoKSB7CisJIyBEaWZmIG1vZGUgZmlyc3QgdHJpZXMgZGlmZi50b29sIGFuZCBmYWxscyBiYWNrIHRvIG1lcmdlLnRvb2wuCisJIyBNZXJnZSBtb2RlIG9ubHkgY2hlY2tzIG1lcmdlLnRvb2wKKwlpZiBkaWZmX21vZGUKKwl0aGVuCisJCW1lcmdlX3Rvb2w9JChnaXQgY29uZmlnIGRpZmYudG9vbCB8fCBnaXQgY29uZmlnIG1lcmdlLnRvb2wpCisJZWxzZQorCQltZXJnZV90b29sPSQoZ2l0IGNvbmZpZyBtZXJnZS50b29sKQorCWZpCisJaWYgdGVzdCAtbiAiJG1lcmdlX3Rvb2wiICYmICEgdmFsaWRfdG9vbCAiJG1lcmdlX3Rvb2wiCisJdGhlbgorCQllY2hvID4mMiAiZ2l0IGNvbmZpZyBvcHRpb24gJFRPT0xfTU9ERS50b29sIHNldCB0byB1bmtub3duIHRvb2w6ICRtZXJnZV90b29sIgorCQllY2hvID4mMiAiUmVzZXR0aW5nIHRvIGRlZmF1bHQuLi4iCisJCXJldHVybiAxCisJZmkKKwllY2hvICIkbWVyZ2VfdG9vbCIKK30KKworZ2V0X21lcmdlX3Rvb2xfcGF0aCAoKSB7CisJIyBBIG1lcmdlIHRvb2wgaGFzIGJlZW4gc2V0LCBzbyB2ZXJpZnkgdGhhdCBpdCdzIHZhbGlkLgorCW1lcmdlX3Rvb2w9IiQxIgorCWlmICEgdmFsaWRfdG9vbCAiJG1lcmdlX3Rvb2wiCisJdGhlbgorCQllY2hvID4mMiAiVW5rbm93biBtZXJnZSB0b29sICRtZXJnZV90b29sIgorCQlleGl0IDEKKwlmaQorCWlmIGRpZmZfbW9kZQorCXRoZW4KKwkJbWVyZ2VfdG9vbF9wYXRoPSQoZ2l0IGNvbmZpZyBkaWZmdG9vbC4iJG1lcmdlX3Rvb2wiLnBhdGggfHwKKwkJCQkgIGdpdCBjb25maWcgbWVyZ2V0b29sLiIkbWVyZ2VfdG9vbCIucGF0aCkKKwllbHNlCisJCW1lcmdlX3Rvb2xfcGF0aD0kKGdpdCBjb25maWcgbWVyZ2V0b29sLiIkbWVyZ2VfdG9vbCIucGF0aCkKKwlmaQorCWlmIHRlc3QgLXogIiRtZXJnZV90b29sX3BhdGgiCisJdGhlbgorCQltZXJnZV90b29sX3BhdGg9IiQodHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCAiJG1lcmdlX3Rvb2wiKSIKKwlmaQorCWlmIHRlc3QgLXogIiQoZ2V0X21lcmdlX3Rvb2xfY21kICIkbWVyZ2VfdG9vbCIpIiAmJgorCQkhIHR5cGUgIiRtZXJnZV90b29sX3BhdGgiID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyA+JjIgIlRoZSAkVE9PTF9NT0RFIHRvb2wgJG1lcmdlX3Rvb2wgaXMgbm90IGF2YWlsYWJsZSBhcyJcCisJCQkgIickbWVyZ2VfdG9vbF9wYXRoJyIKKwkJZXhpdCAxCisJZmkKKwllY2hvICIkbWVyZ2VfdG9vbF9wYXRoIgorfQorCitnZXRfbWVyZ2VfdG9vbCAoKSB7CisJIyBDaGVjayBpZiBhIG1lcmdlIHRvb2wgaGFzIGJlZW4gY29uZmlndXJlZAorCW1lcmdlX3Rvb2w9IiQoZ2V0X2NvbmZpZ3VyZWRfbWVyZ2VfdG9vbCkiCisJIyBUcnkgdG8gZ3Vlc3MgYW4gYXBwcm9wcmlhdGUgbWVyZ2UgdG9vbCBpZiBubyB0b29sIGhhcyBiZWVuIHNldC4KKwlpZiB0ZXN0IC16ICIkbWVyZ2VfdG9vbCIKKwl0aGVuCisJCW1lcmdlX3Rvb2w9IiQoZ3Vlc3NfbWVyZ2VfdG9vbCkiIHx8IGV4aXQKKwlmaQorCWVjaG8gIiRtZXJnZV90b29sIgorfQpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdldG9vbC5zaCBiL2dpdC1tZXJnZXRvb2wuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzUwZTE4YQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1tZXJnZXRvb2wuc2gKQEAgLTAsMCArMSw0NjIgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHByb2dyYW0gcmVzb2x2ZXMgbWVyZ2UgY29uZmxpY3RzIGluIGdpdAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlb2RvcmUgWS4gVHMnbworIworIyBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCisjIGF0IHRoZSBkaXNjcmV0aW9uIG9mIEp1bmlvIEMgSGFtYW5vLgorIworCitVU0FHRT0nWy0tdG9vbD10b29sXSBbLS10b29sLWhlbHBdIFsteXwtLW5vLXByb21wdHwtLXByb21wdF0gW2ZpbGUgdG8gbWVyZ2VdIC4uLicKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKK09QVElPTlNfU1BFQz0KK1RPT0xfTU9ERT1tZXJnZQorLiBnaXQtc2gtc2V0dXAKKy4gZ2l0LW1lcmdldG9vbC0tbGliCityZXF1aXJlX3dvcmtfdHJlZQorCisjIFJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kZSByZWZsZWN0cyBhIHN5bWxpbmsKK2lzX3N5bWxpbmsgKCkgeworCXRlc3QgIiQxIiA9IDEyMDAwMAorfQorCitpc19zdWJtb2R1bGUgKCkgeworCXRlc3QgIiQxIiA9IDE2MDAwMAorfQorCitsb2NhbF9wcmVzZW50ICgpIHsKKwl0ZXN0IC1uICIkbG9jYWxfbW9kZSIKK30KKworcmVtb3RlX3ByZXNlbnQgKCkgeworCXRlc3QgLW4gIiRyZW1vdGVfbW9kZSIKK30KKworYmFzZV9wcmVzZW50ICgpIHsKKwl0ZXN0IC1uICIkYmFzZV9tb2RlIgorfQorCitjbGVhbnVwX3RlbXBfZmlsZXMgKCkgeworCWlmIHRlc3QgIiQxIiA9IC0tc2F2ZS1iYWNrdXAKKwl0aGVuCisJCXJtIC1yZiAtLSAiJE1FUkdFRC5vcmlnIgorCQl0ZXN0IC1lICIkQkFDS1VQIiAmJiBtdiAtLSAiJEJBQ0tVUCIgIiRNRVJHRUQub3JpZyIKKwkJcm0gLWYgLS0gIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIKKwllbHNlCisJCXJtIC1mIC0tICIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiICIkQkFDS1VQIgorCWZpCit9CisKK2Rlc2NyaWJlX2ZpbGUgKCkgeworCW1vZGU9IiQxIgorCWJyYW5jaD0iJDIiCisJZmlsZT0iJDMiCisKKwlwcmludGYgIiAgeyVzfTogIiAiJGJyYW5jaCIKKwlpZiB0ZXN0IC16ICIkbW9kZSIKKwl0aGVuCisJCWVjaG8gImRlbGV0ZWQiCisJZWxpZiBpc19zeW1saW5rICIkbW9kZSIKKwl0aGVuCisJCWVjaG8gImEgc3ltYm9saWMgbGluayAtPiAnJChjYXQgIiRmaWxlIiknIgorCWVsaWYgaXNfc3VibW9kdWxlICIkbW9kZSIKKwl0aGVuCisJCWVjaG8gInN1Ym1vZHVsZSBjb21taXQgJGZpbGUiCisJZWxpZiBiYXNlX3ByZXNlbnQKKwl0aGVuCisJCWVjaG8gIm1vZGlmaWVkIGZpbGUiCisJZWxzZQorCQllY2hvICJjcmVhdGVkIGZpbGUiCisJZmkKK30KKworcmVzb2x2ZV9zeW1saW5rX21lcmdlICgpIHsKKwl3aGlsZSB0cnVlCisJZG8KKwkJcHJpbnRmICJVc2UgKGwpb2NhbCBvciAocillbW90ZSwgb3IgKGEpYm9ydD8gIgorCQlyZWFkIGFucyB8fCByZXR1cm4gMQorCQljYXNlICIkYW5zIiBpbgorCQlbbExdKikKKwkJCWdpdCBjaGVja291dC1pbmRleCAtZiAtLXN0YWdlPTIgLS0gIiRNRVJHRUQiCisJCQlnaXQgYWRkIC0tICIkTUVSR0VEIgorCQkJY2xlYW51cF90ZW1wX2ZpbGVzIC0tc2F2ZS1iYWNrdXAKKwkJCXJldHVybiAwCisJCQk7OworCQlbclJdKikKKwkJCWdpdCBjaGVja291dC1pbmRleCAtZiAtLXN0YWdlPTMgLS0gIiRNRVJHRUQiCisJCQlnaXQgYWRkIC0tICIkTUVSR0VEIgorCQkJY2xlYW51cF90ZW1wX2ZpbGVzIC0tc2F2ZS1iYWNrdXAKKwkJCXJldHVybiAwCisJCQk7OworCQlbYUFdKikKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZG9uZQorfQorCityZXNvbHZlX2RlbGV0ZWRfbWVyZ2UgKCkgeworCXdoaWxlIHRydWUKKwlkbworCQlpZiBiYXNlX3ByZXNlbnQKKwkJdGhlbgorCQkJcHJpbnRmICJVc2UgKG0pb2RpZmllZCBvciAoZCllbGV0ZWQgZmlsZSwgb3IgKGEpYm9ydD8gIgorCQllbHNlCisJCQlwcmludGYgIlVzZSAoYylyZWF0ZWQgb3IgKGQpZWxldGVkIGZpbGUsIG9yIChhKWJvcnQ/ICIKKwkJZmkKKwkJcmVhZCBhbnMgfHwgcmV0dXJuIDEKKwkJY2FzZSAiJGFucyIgaW4KKwkJW21NY0NdKikKKwkJCWdpdCBhZGQgLS0gIiRNRVJHRUQiCisJCQljbGVhbnVwX3RlbXBfZmlsZXMgLS1zYXZlLWJhY2t1cAorCQkJcmV0dXJuIDAKKwkJCTs7CisJCVtkRF0qKQorCQkJZ2l0IHJtIC0tICIkTUVSR0VEIiA+IC9kZXYvbnVsbAorCQkJY2xlYW51cF90ZW1wX2ZpbGVzCisJCQlyZXR1cm4gMAorCQkJOzsKKwkJW2FBXSopCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworcmVzb2x2ZV9zdWJtb2R1bGVfbWVyZ2UgKCkgeworCXdoaWxlIHRydWUKKwlkbworCQlwcmludGYgIlVzZSAobClvY2FsIG9yIChyKWVtb3RlLCBvciAoYSlib3J0PyAiCisJCXJlYWQgYW5zIHx8IHJldHVybiAxCisJCWNhc2UgIiRhbnMiIGluCisJCVtsTF0qKQorCQkJaWYgISBsb2NhbF9wcmVzZW50CisJCQl0aGVuCisJCQkJaWYgdGVzdCAtbiAiJChnaXQgbHMtdHJlZSBIRUFEIC0tICIkTUVSR0VEIikiCisJCQkJdGhlbgorCQkJCQkjIExvY2FsIGlzbid0IHByZXNlbnQsIGJ1dCBpdCdzIGEgc3ViZGlyZWN0b3J5CisJCQkJCWdpdCBscy10cmVlIC0tZnVsbC1uYW1lIC1yIEhFQUQgLS0gIiRNRVJHRUQiIHwKKwkJCQkJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gfHwgZXhpdCAkPworCQkJCWVsc2UKKwkJCQkJdGVzdCAtZSAiJE1FUkdFRCIgJiYgbXYgLS0gIiRNRVJHRUQiICIkQkFDS1VQIgorCQkJCQlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlICIkTUVSR0VEIgorCQkJCQljbGVhbnVwX3RlbXBfZmlsZXMgLS1zYXZlLWJhY2t1cAorCQkJCWZpCisJCQllbGlmIGlzX3N1Ym1vZHVsZSAiJGxvY2FsX21vZGUiCisJCQl0aGVuCisJCQkJc3RhZ2Vfc3VibW9kdWxlICIkTUVSR0VEIiAiJGxvY2FsX3NoYTEiCisJCQllbHNlCisJCQkJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tc3RhZ2U9MiAtLSAiJE1FUkdFRCIKKwkJCQlnaXQgYWRkIC0tICIkTUVSR0VEIgorCQkJZmkKKwkJCXJldHVybiAwCisJCQk7OworCQlbclJdKikKKwkJCWlmICEgcmVtb3RlX3ByZXNlbnQKKwkJCXRoZW4KKwkJCQlpZiB0ZXN0IC1uICIkKGdpdCBscy10cmVlIE1FUkdFX0hFQUQgLS0gIiRNRVJHRUQiKSIKKwkJCQl0aGVuCisJCQkJCSMgUmVtb3RlIGlzbid0IHByZXNlbnQsIGJ1dCBpdCdzIGEgc3ViZGlyZWN0b3J5CisJCQkJCWdpdCBscy10cmVlIC0tZnVsbC1uYW1lIC1yIE1FUkdFX0hFQUQgLS0gIiRNRVJHRUQiIHwKKwkJCQkJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gfHwgZXhpdCAkPworCQkJCWVsc2UKKwkJCQkJdGVzdCAtZSAiJE1FUkdFRCIgJiYgbXYgLS0gIiRNRVJHRUQiICIkQkFDS1VQIgorCQkJCQlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlICIkTUVSR0VEIgorCQkJCWZpCisJCQllbGlmIGlzX3N1Ym1vZHVsZSAiJHJlbW90ZV9tb2RlIgorCQkJdGhlbgorCQkJCSEgaXNfc3VibW9kdWxlICIkbG9jYWxfbW9kZSIgJiYKKwkJCQl0ZXN0IC1lICIkTUVSR0VEIiAmJgorCQkJCW12IC0tICIkTUVSR0VEIiAiJEJBQ0tVUCIKKwkJCQlzdGFnZV9zdWJtb2R1bGUgIiRNRVJHRUQiICIkcmVtb3RlX3NoYTEiCisJCQllbHNlCisJCQkJdGVzdCAtZSAiJE1FUkdFRCIgJiYgbXYgLS0gIiRNRVJHRUQiICIkQkFDS1VQIgorCQkJCWdpdCBjaGVja291dC1pbmRleCAtZiAtLXN0YWdlPTMgLS0gIiRNRVJHRUQiCisJCQkJZ2l0IGFkZCAtLSAiJE1FUkdFRCIKKwkJCWZpCisJCQljbGVhbnVwX3RlbXBfZmlsZXMgLS1zYXZlLWJhY2t1cAorCQkJcmV0dXJuIDAKKwkJCTs7CisJCVthQV0qKQorCQkJcmV0dXJuIDEKKwkJCTs7CisJCWVzYWMKKwlkb25lCit9CisKK3N0YWdlX3N1Ym1vZHVsZSAoKSB7CisJcGF0aD0iJDEiCisJc3VibW9kdWxlX3NoYTE9IiQyIgorCW1rZGlyIC1wICIkcGF0aCIgfHwKKwlkaWUgImZhdGFsOiB1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGF0ICRwYXRoIgorCSMgRmluZCAkcGF0aCByZWxhdGl2ZSB0byB3b3JrIHRyZWUKKwl3b3JrX3RyZWVfcm9vdD0kKGNkX3RvX3RvcGxldmVsICYmIHB3ZCkKKwl3b3JrX3JlbF9wYXRoPSQoY2QgIiRwYXRoIiAmJgorCQlHSVRfV09SS19UUkVFPSIke3dvcmtfdHJlZV9yb290fSIgZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4CisJKQorCXRlc3QgLW4gIiR3b3JrX3JlbF9wYXRoIiB8fAorCWRpZSAiZmF0YWw6IHVuYWJsZSB0byBnZXQgcGF0aCBvZiBtb2R1bGUgJHBhdGggcmVsYXRpdmUgdG8gd29yayB0cmVlIgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZXBsYWNlIC0tY2FjaGVpbmZvIDE2MDAwMCAiJHN1Ym1vZHVsZV9zaGExIiAiJHt3b3JrX3JlbF9wYXRoJS99IiB8fCBkaWUKK30KKworY2hlY2tvdXRfc3RhZ2VkX2ZpbGUgKCkgeworCXRtcGZpbGU9JChleHByIFwKKwkJIiQoZ2l0IGNoZWNrb3V0LWluZGV4IC0tdGVtcCAtLXN0YWdlPSIkMSIgIiQyIiAyPi9kZXYvbnVsbCkiIFwKKwkJOiAnXChbXgldKlwpCScpCisKKwlpZiB0ZXN0ICQ/IC1lcSAwIC1hIC1uICIkdG1wZmlsZSIKKwl0aGVuCisJCW12IC0tICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXApJHRtcGZpbGUiICIkMyIKKwllbHNlCisJCT4iJDMiCisJZmkKK30KKworbWVyZ2VfZmlsZSAoKSB7CisJTUVSR0VEPSIkMSIKKworCWY9JChnaXQgbHMtZmlsZXMgLXUgLS0gIiRNRVJHRUQiKQorCWlmIHRlc3QgLXogIiRmIgorCXRoZW4KKwkJaWYgdGVzdCAhIC1mICIkTUVSR0VEIgorCQl0aGVuCisJCQllY2hvICIkTUVSR0VEOiBmaWxlIG5vdCBmb3VuZCIKKwkJZWxzZQorCQkJZWNobyAiJE1FUkdFRDogZmlsZSBkb2VzIG5vdCBuZWVkIG1lcmdpbmciCisJCWZpCisJCXJldHVybiAxCisJZmkKKworCWV4dD0iJCQkKGV4cHIgIiRNRVJHRUQiIDogJy4qXChcLlteL10qXCkkJykiCisJQkFDS1VQPSIuLyRNRVJHRUQuQkFDS1VQLiRleHQiCisJTE9DQUw9Ii4vJE1FUkdFRC5MT0NBTC4kZXh0IgorCVJFTU9URT0iLi8kTUVSR0VELlJFTU9URS4kZXh0IgorCUJBU0U9Ii4vJE1FUkdFRC5CQVNFLiRleHQiCisKKwliYXNlX21vZGU9JChnaXQgbHMtZmlsZXMgLXUgLS0gIiRNRVJHRUQiIHwgYXdrICd7aWYgKCQzPT0xKSBwcmludCAkMTt9JykKKwlsb2NhbF9tb2RlPSQoZ2l0IGxzLWZpbGVzIC11IC0tICIkTUVSR0VEIiB8IGF3ayAne2lmICgkMz09MikgcHJpbnQgJDE7fScpCisJcmVtb3RlX21vZGU9JChnaXQgbHMtZmlsZXMgLXUgLS0gIiRNRVJHRUQiIHwgYXdrICd7aWYgKCQzPT0zKSBwcmludCAkMTt9JykKKworCWlmIGlzX3N1Ym1vZHVsZSAiJGxvY2FsX21vZGUiIHx8IGlzX3N1Ym1vZHVsZSAiJHJlbW90ZV9tb2RlIgorCXRoZW4KKwkJZWNobyAiU3VibW9kdWxlIG1lcmdlIGNvbmZsaWN0IGZvciAnJE1FUkdFRCc6IgorCQlsb2NhbF9zaGExPSQoZ2l0IGxzLWZpbGVzIC11IC0tICIkTUVSR0VEIiB8IGF3ayAne2lmICgkMz09MikgcHJpbnQgJDI7fScpCisJCXJlbW90ZV9zaGExPSQoZ2l0IGxzLWZpbGVzIC11IC0tICIkTUVSR0VEIiB8IGF3ayAne2lmICgkMz09MykgcHJpbnQgJDI7fScpCisJCWRlc2NyaWJlX2ZpbGUgIiRsb2NhbF9tb2RlIiAibG9jYWwiICIkbG9jYWxfc2hhMSIKKwkJZGVzY3JpYmVfZmlsZSAiJHJlbW90ZV9tb2RlIiAicmVtb3RlIiAiJHJlbW90ZV9zaGExIgorCQlyZXNvbHZlX3N1Ym1vZHVsZV9tZXJnZQorCQlyZXR1cm4KKwlmaQorCisJbXYgLS0gIiRNRVJHRUQiICIkQkFDS1VQIgorCWNwIC0tICIkQkFDS1VQIiAiJE1FUkdFRCIKKworCWNoZWNrb3V0X3N0YWdlZF9maWxlIDEgIiRNRVJHRUQiICIkQkFTRSIKKwljaGVja291dF9zdGFnZWRfZmlsZSAyICIkTUVSR0VEIiAiJExPQ0FMIgorCWNoZWNrb3V0X3N0YWdlZF9maWxlIDMgIiRNRVJHRUQiICIkUkVNT1RFIgorCisJaWYgdGVzdCAteiAiJGxvY2FsX21vZGUiIC1vIC16ICIkcmVtb3RlX21vZGUiCisJdGhlbgorCQllY2hvICJEZWxldGVkIG1lcmdlIGNvbmZsaWN0IGZvciAnJE1FUkdFRCc6IgorCQlkZXNjcmliZV9maWxlICIkbG9jYWxfbW9kZSIgImxvY2FsIiAiJExPQ0FMIgorCQlkZXNjcmliZV9maWxlICIkcmVtb3RlX21vZGUiICJyZW1vdGUiICIkUkVNT1RFIgorCQlyZXNvbHZlX2RlbGV0ZWRfbWVyZ2UKKwkJcmV0dXJuCisJZmkKKworCWlmIGlzX3N5bWxpbmsgIiRsb2NhbF9tb2RlIiB8fCBpc19zeW1saW5rICIkcmVtb3RlX21vZGUiCisJdGhlbgorCQllY2hvICJTeW1ib2xpYyBsaW5rIG1lcmdlIGNvbmZsaWN0IGZvciAnJE1FUkdFRCc6IgorCQlkZXNjcmliZV9maWxlICIkbG9jYWxfbW9kZSIgImxvY2FsIiAiJExPQ0FMIgorCQlkZXNjcmliZV9maWxlICIkcmVtb3RlX21vZGUiICJyZW1vdGUiICIkUkVNT1RFIgorCQlyZXNvbHZlX3N5bWxpbmtfbWVyZ2UKKwkJcmV0dXJuCisJZmkKKworCWVjaG8gIk5vcm1hbCBtZXJnZSBjb25mbGljdCBmb3IgJyRNRVJHRUQnOiIKKwlkZXNjcmliZV9maWxlICIkbG9jYWxfbW9kZSIgImxvY2FsIiAiJExPQ0FMIgorCWRlc2NyaWJlX2ZpbGUgIiRyZW1vdGVfbW9kZSIgInJlbW90ZSIgIiRSRU1PVEUiCisJaWYgIiRwcm9tcHQiID0gdHJ1ZQorCXRoZW4KKwkJcHJpbnRmICJIaXQgcmV0dXJuIHRvIHN0YXJ0IG1lcmdlIHJlc29sdXRpb24gdG9vbCAoJXMpOiAiICIkbWVyZ2VfdG9vbCIKKwkJcmVhZCBhbnMgfHwgcmV0dXJuIDEKKwlmaQorCisJaWYgYmFzZV9wcmVzZW50CisJdGhlbgorCQlwcmVzZW50PXRydWUKKwllbHNlCisJCXByZXNlbnQ9ZmFsc2UKKwlmaQorCisJaWYgISBydW5fbWVyZ2VfdG9vbCAiJG1lcmdlX3Rvb2wiICIkcHJlc2VudCIKKwl0aGVuCisJCWVjaG8gIm1lcmdlIG9mICRNRVJHRUQgZmFpbGVkIiAxPiYyCisJCW12IC0tICIkQkFDS1VQIiAiJE1FUkdFRCIKKworCQlpZiB0ZXN0ICIkbWVyZ2Vfa2VlcF90ZW1wb3JhcmllcyIgPSAiZmFsc2UiCisJCXRoZW4KKwkJCWNsZWFudXBfdGVtcF9maWxlcworCQlmaQorCisJCXJldHVybiAxCisJZmkKKworCWlmIHRlc3QgIiRtZXJnZV9rZWVwX2JhY2t1cCIgPSAidHJ1ZSIKKwl0aGVuCisJCW12IC0tICIkQkFDS1VQIiAiJE1FUkdFRC5vcmlnIgorCWVsc2UKKwkJcm0gLS0gIiRCQUNLVVAiCisJZmkKKworCWdpdCBhZGQgLS0gIiRNRVJHRUQiCisJY2xlYW51cF90ZW1wX2ZpbGVzCisJcmV0dXJuIDAKK30KKworc2hvd190b29sX2hlbHAgKCkgeworCVRPT0xfTU9ERT1tZXJnZQorCWxpc3RfbWVyZ2VfdG9vbF9jYW5kaWRhdGVzCisJdW5hdmFpbGFibGU9IGF2YWlsYWJsZT0gTEY9JworJworCWZvciBpIGluICR0b29scworCWRvCisJCW1lcmdlX3Rvb2xfcGF0aD0kKHRyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGggIiRpIikKKwkJaWYgdHlwZSAiJG1lcmdlX3Rvb2xfcGF0aCIgPi9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCWF2YWlsYWJsZT0iJGF2YWlsYWJsZSRpJExGIgorCQllbHNlCisJCQl1bmF2YWlsYWJsZT0iJHVuYXZhaWxhYmxlJGkkTEYiCisJCWZpCisJZG9uZQorCWlmIHRlc3QgLW4gIiRhdmFpbGFibGUiCisJdGhlbgorCQllY2hvICInZ2l0IG1lcmdldG9vbCAtLXRvb2w9PHRvb2w+JyBtYXkgYmUgc2V0IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKwkJZWNobyAiJGF2YWlsYWJsZSIgfCBzb3J0IHwgc2VkIC1lICdzL14vCS8nCisJZWxzZQorCQllY2hvICJObyBzdWl0YWJsZSB0b29sIGZvciAnZ2l0IG1lcmdldG9vbCAtLXRvb2w9PHRvb2w+JyBmb3VuZC4iCisJZmkKKwlpZiB0ZXN0IC1uICIkdW5hdmFpbGFibGUiCisJdGhlbgorCQllY2hvCisJCWVjaG8gJ1RoZSBmb2xsb3dpbmcgdG9vbHMgYXJlIHZhbGlkLCBidXQgbm90IGN1cnJlbnRseSBhdmFpbGFibGU6JworCQllY2hvICIkdW5hdmFpbGFibGUiIHwgc29ydCB8IHNlZCAtZSAncy9eLwkvJworCWZpCisJaWYgdGVzdCAtbiAiJHVuYXZhaWxhYmxlJGF2YWlsYWJsZSIKKwl0aGVuCisJCWVjaG8KKwkJZWNobyAiU29tZSBvZiB0aGUgdG9vbHMgbGlzdGVkIGFib3ZlIG9ubHkgd29yayBpbiBhIHdpbmRvd2VkIgorCQllY2hvICJlbnZpcm9ubWVudC4gSWYgcnVuIGluIGEgdGVybWluYWwtb25seSBzZXNzaW9uLCB0aGV5IHdpbGwgZmFpbC4iCisJZmkKKwlleGl0IDAKK30KKworcHJvbXB0PSQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2V0b29sLnByb21wdCB8fCBlY2hvIHRydWUpCisKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktLXRvb2wtaGVscCkKKwkJc2hvd190b29sX2hlbHAKKwkJOzsKKwktdHwtLXRvb2wqKQorCQljYXNlICIkIywkMSIgaW4KKwkJKiwqPSopCisJCQltZXJnZV90b29sPSQoZXhwciAieiQxIiA6ICd6LVtePV0qPVwoLipcKScpCisJCQk7OworCQkxLCopCisJCQl1c2FnZSA7OworCQkqKQorCQkJbWVyZ2VfdG9vbD0iJDIiCisJCQlzaGlmdCA7OworCQllc2FjCisJCTs7CisJLXl8LS1uby1wcm9tcHQpCisJCXByb21wdD1mYWxzZQorCQk7OworCS0tcHJvbXB0KQorCQlwcm9tcHQ9dHJ1ZQorCQk7OworCS0tKQorCQlzaGlmdAorCQlicmVhaworCQk7OworCS0qKQorCQl1c2FnZQorCQk7OworCSopCisJCWJyZWFrCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK3Byb21wdF9hZnRlcl9mYWlsZWRfbWVyZ2UgKCkgeworCXdoaWxlIHRydWUKKwlkbworCQlwcmludGYgIkNvbnRpbnVlIG1lcmdpbmcgb3RoZXIgdW5yZXNvbHZlZCBwYXRocyAoeS9uKSA/ICIKKwkJcmVhZCBhbnMgfHwgcmV0dXJuIDEKKwkJY2FzZSAiJGFucyIgaW4KKwkJW3lZXSopCisJCQlyZXR1cm4gMAorCQkJOzsKKwkJW25OXSopCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworaWYgdGVzdCAteiAiJG1lcmdlX3Rvb2wiCit0aGVuCisJbWVyZ2VfdG9vbD0kKGdldF9tZXJnZV90b29sICIkbWVyZ2VfdG9vbCIpIHx8IGV4aXQKK2ZpCittZXJnZV9rZWVwX2JhY2t1cD0iJChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wua2VlcEJhY2t1cCB8fCBlY2hvIHRydWUpIgorbWVyZ2Vfa2VlcF90ZW1wb3Jhcmllcz0iJChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wua2VlcFRlbXBvcmFyaWVzIHx8IGVjaG8gZmFsc2UpIgorCitsYXN0X3N0YXR1cz0wCityb2xsdXBfc3RhdHVzPTAKK2ZpbGVzPQorCitpZiB0ZXN0ICQjIC1lcSAwCit0aGVuCisJY2RfdG9fdG9wbGV2ZWwKKworCWlmIHRlc3QgLWUgIiRHSVRfRElSL01FUkdFX1JSIgorCXRoZW4KKwkJZmlsZXM9JChnaXQgcmVyZXJlIHJlbWFpbmluZykKKwllbHNlCisJCWZpbGVzPSQoZ2l0IGxzLWZpbGVzIC11IHwgc2VkIC1lICdzL15bXgldKgkvLycgfCBzb3J0IC11KQorCWZpCitlbHNlCisJZmlsZXM9JChnaXQgbHMtZmlsZXMgLXUgLS0gIiRAIiB8IHNlZCAtZSAncy9eW14JXSoJLy8nIHwgc29ydCAtdSkKK2ZpCisKK2lmIHRlc3QgLXogIiRmaWxlcyIKK3RoZW4KKwllY2hvICJObyBmaWxlcyBuZWVkIG1lcmdpbmciCisJZXhpdCAwCitmaQorCitwcmludGYgIk1lcmdpbmc6XG4iCitwcmludGYgIiRmaWxlc1xuIgorCitJRlM9JworJworZm9yIGkgaW4gJGZpbGVzCitkbworCWlmIHRlc3QgJGxhc3Rfc3RhdHVzIC1uZSAwCisJdGhlbgorCQlwcm9tcHRfYWZ0ZXJfZmFpbGVkX21lcmdlIHx8IGV4aXQgMQorCWZpCisJcHJpbnRmICJcbiIKKwltZXJnZV9maWxlICIkaSIKKwlsYXN0X3N0YXR1cz0kPworCWlmIHRlc3QgJGxhc3Rfc3RhdHVzIC1uZSAwCisJdGhlbgorCQlyb2xsdXBfc3RhdHVzPTEKKwlmaQorZG9uZQorCitleGl0ICRyb2xsdXBfc3RhdHVzCmRpZmYgLS1naXQgYS9naXQtcDQucHkgYi9naXQtcDQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODgyYjFiYgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1wNC5weQpAQCAtMCwwICsxLDMxODMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBnaXQtcDQucHkgLS0gQSB0b29sIGZvciBiaWRpcmVjdGlvbmFsIG9wZXJhdGlvbiBiZXR3ZWVuIGEgUGVyZm9yY2UgZGVwb3QgYW5kIGdpdC4KKyMKKyMgQXV0aG9yOiBTaW1vbiBIYXVzbWFubiA8c2ltb25AbHN0LmRlPgorIyBDb3B5cmlnaHQ6IDIwMDcgU2ltb24gSGF1c21hbm4gPHNpbW9uQGxzdC5kZT4KKyMgICAgICAgICAgICAyMDA3IFRyb2xsdGVjaCBBU0EKKyMgTGljZW5zZTogTUlUIDxodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocD4KKyMKKworaW1wb3J0IG9wdHBhcnNlLCBzeXMsIG9zLCBtYXJzaGFsLCBzdWJwcm9jZXNzLCBzaGVsdmUKK2ltcG9ydCB0ZW1wZmlsZSwgZ2V0b3B0LCBvcy5wYXRoLCB0aW1lLCBwbGF0Zm9ybQoraW1wb3J0IHJlLCBzaHV0aWwKKwordmVyYm9zZSA9IEZhbHNlCisKKyMgT25seSBsYWJlbHMvdGFncyBtYXRjaGluZyB0aGlzIHdpbGwgYmUgaW1wb3J0ZWQvZXhwb3J0ZWQKK2RlZmF1bHRMYWJlbFJlZ2V4cCA9IHInW2EtekEtWjAtOV9cLS5dKyQnCisKK2RlZiBwNF9idWlsZF9jbWQoY21kKToKKyAgICAiIiJCdWlsZCBhIHN1aXRhYmxlIHA0IGNvbW1hbmQgbGluZS4KKworICAgIFRoaXMgY29uc29saWRhdGVzIGJ1aWxkaW5nIGFuZCByZXR1cm5pbmcgYSBwNCBjb21tYW5kIGxpbmUgaW50byBvbmUKKyAgICBsb2NhdGlvbi4gSXQgbWVhbnMgdGhhdCBob29raW5nIGludG8gdGhlIGVudmlyb25tZW50LCBvciBvdGhlciBjb25maWd1cmF0aW9uCisgICAgY2FuIGJlIGRvbmUgbW9yZSBlYXNpbHkuCisgICAgIiIiCisgICAgcmVhbF9jbWQgPSBbInA0Il0KKworICAgIHVzZXIgPSBnaXRDb25maWcoImdpdC1wNC51c2VyIikKKyAgICBpZiBsZW4odXNlcikgPiAwOgorICAgICAgICByZWFsX2NtZCArPSBbIi11Iix1c2VyXQorCisgICAgcGFzc3dvcmQgPSBnaXRDb25maWcoImdpdC1wNC5wYXNzd29yZCIpCisgICAgaWYgbGVuKHBhc3N3b3JkKSA+IDA6CisgICAgICAgIHJlYWxfY21kICs9IFsiLVAiLCBwYXNzd29yZF0KKworICAgIHBvcnQgPSBnaXRDb25maWcoImdpdC1wNC5wb3J0IikKKyAgICBpZiBsZW4ocG9ydCkgPiAwOgorICAgICAgICByZWFsX2NtZCArPSBbIi1wIiwgcG9ydF0KKworICAgIGhvc3QgPSBnaXRDb25maWcoImdpdC1wNC5ob3N0IikKKyAgICBpZiBsZW4oaG9zdCkgPiAwOgorICAgICAgICByZWFsX2NtZCArPSBbIi1IIiwgaG9zdF0KKworICAgIGNsaWVudCA9IGdpdENvbmZpZygiZ2l0LXA0LmNsaWVudCIpCisgICAgaWYgbGVuKGNsaWVudCkgPiAwOgorICAgICAgICByZWFsX2NtZCArPSBbIi1jIiwgY2xpZW50XQorCisKKyAgICBpZiBpc2luc3RhbmNlKGNtZCxiYXNlc3RyaW5nKToKKyAgICAgICAgcmVhbF9jbWQgPSAnICcuam9pbihyZWFsX2NtZCkgKyAnICcgKyBjbWQKKyAgICBlbHNlOgorICAgICAgICByZWFsX2NtZCArPSBjbWQKKyAgICByZXR1cm4gcmVhbF9jbWQKKworZGVmIGNoZGlyKGRpcik6CisgICAgIyBQNCB1c2VzIHRoZSBQV0QgZW52aXJvbm1lbnQgdmFyaWFibGUgcmF0aGVyIHRoYW4gZ2V0Y3dkKCkuIFNpbmNlIHdlJ3JlCisgICAgIyBub3QgdXNpbmcgdGhlIHNoZWxsLCB3ZSBoYXZlIHRvIHNldCBpdCBvdXJzZWx2ZXMuICBUaGlzIHBhdGggY291bGQKKyAgICAjIGJlIHJlbGF0aXZlLCBzbyBnbyB0aGVyZSBmaXJzdCwgdGhlbiBmaWd1cmUgb3V0IHdoZXJlIHdlIGVuZGVkIHVwLgorICAgIG9zLmNoZGlyKGRpcikKKyAgICBvcy5lbnZpcm9uWydQV0QnXSA9IG9zLmdldGN3ZCgpCisKK2RlZiBkaWUobXNnKToKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24obXNnKQorICAgIGVsc2U6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUobXNnICsgIlxuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworZGVmIHdyaXRlX3BpcGUoYywgc3RkaW4pOgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1dyaXRpbmcgcGlwZTogJXNcbicgJSBzdHIoYykpCisKKyAgICBleHBhbmQgPSBpc2luc3RhbmNlKGMsYmFzZXN0cmluZykKKyAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPWV4cGFuZCkKKyAgICBwaXBlID0gcC5zdGRpbgorICAgIHZhbCA9IHBpcGUud3JpdGUoc3RkaW4pCisgICAgcGlwZS5jbG9zZSgpCisgICAgaWYgcC53YWl0KCk6CisgICAgICAgIGRpZSgnQ29tbWFuZCBmYWlsZWQ6ICVzJyAlIHN0cihjKSkKKworICAgIHJldHVybiB2YWwKKworZGVmIHA0X3dyaXRlX3BpcGUoYywgc3RkaW4pOgorICAgIHJlYWxfY21kID0gcDRfYnVpbGRfY21kKGMpCisgICAgcmV0dXJuIHdyaXRlX3BpcGUocmVhbF9jbWQsIHN0ZGluKQorCitkZWYgcmVhZF9waXBlKGMsIGlnbm9yZV9lcnJvcj1GYWxzZSk6CisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnUmVhZGluZyBwaXBlOiAlc1xuJyAlIHN0cihjKSkKKworICAgIGV4cGFuZCA9IGlzaW5zdGFuY2UoYyxiYXNlc3RyaW5nKQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGMsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPWV4cGFuZCkKKyAgICBwaXBlID0gcC5zdGRvdXQKKyAgICB2YWwgPSBwaXBlLnJlYWQoKQorICAgIGlmIHAud2FpdCgpIGFuZCBub3QgaWdub3JlX2Vycm9yOgorICAgICAgICBkaWUoJ0NvbW1hbmQgZmFpbGVkOiAlcycgJSBzdHIoYykpCisKKyAgICByZXR1cm4gdmFsCisKK2RlZiBwNF9yZWFkX3BpcGUoYywgaWdub3JlX2Vycm9yPUZhbHNlKToKKyAgICByZWFsX2NtZCA9IHA0X2J1aWxkX2NtZChjKQorICAgIHJldHVybiByZWFkX3BpcGUocmVhbF9jbWQsIGlnbm9yZV9lcnJvcikKKworZGVmIHJlYWRfcGlwZV9saW5lcyhjKToKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdSZWFkaW5nIHBpcGU6ICVzXG4nICUgc3RyKGMpKQorCisgICAgZXhwYW5kID0gaXNpbnN0YW5jZShjLCBiYXNlc3RyaW5nKQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGMsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPWV4cGFuZCkKKyAgICBwaXBlID0gcC5zdGRvdXQKKyAgICB2YWwgPSBwaXBlLnJlYWRsaW5lcygpCisgICAgaWYgcGlwZS5jbG9zZSgpIG9yIHAud2FpdCgpOgorICAgICAgICBkaWUoJ0NvbW1hbmQgZmFpbGVkOiAlcycgJSBzdHIoYykpCisKKyAgICByZXR1cm4gdmFsCisKK2RlZiBwNF9yZWFkX3BpcGVfbGluZXMoYyk6CisgICAgIiIiU3BlY2lmaWNhbGx5IGludm9rZSBwNCBvbiB0aGUgY29tbWFuZCBzdXBwbGllZC4gIiIiCisgICAgcmVhbF9jbWQgPSBwNF9idWlsZF9jbWQoYykKKyAgICByZXR1cm4gcmVhZF9waXBlX2xpbmVzKHJlYWxfY21kKQorCitkZWYgcDRfaGFzX2NvbW1hbmQoY21kKToKKyAgICAiIiJBc2sgcDQgZm9yIGhlbHAgb24gdGhpcyBjb21tYW5kLiAgSWYgaXQgcmV0dXJucyBhbiBlcnJvciwgdGhlCisgICAgICAgY29tbWFuZCBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHZlcnNpb24gb2YgcDQuIiIiCisgICAgcmVhbF9jbWQgPSBwNF9idWlsZF9jbWQoWyJoZWxwIiwgY21kXSkKKyAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihyZWFsX2NtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICBwLmNvbW11bmljYXRlKCkKKyAgICByZXR1cm4gcC5yZXR1cm5jb2RlID09IDAKKworZGVmIHN5c3RlbShjbWQpOgorICAgIGV4cGFuZCA9IGlzaW5zdGFuY2UoY21kLGJhc2VzdHJpbmcpCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiZXhlY3V0aW5nICVzXG4iICUgc3RyKGNtZCkpCisgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGNtZCwgc2hlbGw9ZXhwYW5kKQorCitkZWYgcDRfc3lzdGVtKGNtZCk6CisgICAgIiIiU3BlY2lmaWNhbGx5IGludm9rZSBwNCBhcyB0aGUgc3lzdGVtIGNvbW1hbmQuICIiIgorICAgIHJlYWxfY21kID0gcDRfYnVpbGRfY21kKGNtZCkKKyAgICBleHBhbmQgPSBpc2luc3RhbmNlKHJlYWxfY21kLCBiYXNlc3RyaW5nKQorICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChyZWFsX2NtZCwgc2hlbGw9ZXhwYW5kKQorCitkZWYgcDRfaW50ZWdyYXRlKHNyYywgZGVzdCk6CisgICAgcDRfc3lzdGVtKFsiaW50ZWdyYXRlIiwgIi1EdCIsIHdpbGRjYXJkX2VuY29kZShzcmMpLCB3aWxkY2FyZF9lbmNvZGUoZGVzdCldKQorCitkZWYgcDRfc3luYyhmLCAqb3B0aW9ucyk6CisgICAgcDRfc3lzdGVtKFsic3luYyJdICsgbGlzdChvcHRpb25zKSArIFt3aWxkY2FyZF9lbmNvZGUoZildKQorCitkZWYgcDRfYWRkKGYpOgorICAgICMgZm9yY2libHkgYWRkIGZpbGUgbmFtZXMgd2l0aCB3aWxkY2FyZHMKKyAgICBpZiB3aWxkY2FyZF9wcmVzZW50KGYpOgorICAgICAgICBwNF9zeXN0ZW0oWyJhZGQiLCAiLWYiLCBmXSkKKyAgICBlbHNlOgorICAgICAgICBwNF9zeXN0ZW0oWyJhZGQiLCBmXSkKKworZGVmIHA0X2RlbGV0ZShmKToKKyAgICBwNF9zeXN0ZW0oWyJkZWxldGUiLCB3aWxkY2FyZF9lbmNvZGUoZildKQorCitkZWYgcDRfZWRpdChmKToKKyAgICBwNF9zeXN0ZW0oWyJlZGl0Iiwgd2lsZGNhcmRfZW5jb2RlKGYpXSkKKworZGVmIHA0X3JldmVydChmKToKKyAgICBwNF9zeXN0ZW0oWyJyZXZlcnQiLCB3aWxkY2FyZF9lbmNvZGUoZildKQorCitkZWYgcDRfcmVvcGVuKHR5cGUsIGYpOgorICAgIHA0X3N5c3RlbShbInJlb3BlbiIsICItdCIsIHR5cGUsIHdpbGRjYXJkX2VuY29kZShmKV0pCisKK2RlZiBwNF9tb3ZlKHNyYywgZGVzdCk6CisgICAgcDRfc3lzdGVtKFsibW92ZSIsICItayIsIHdpbGRjYXJkX2VuY29kZShzcmMpLCB3aWxkY2FyZF9lbmNvZGUoZGVzdCldKQorCisjCisjIENhbm9uaWNhbGl6ZSB0aGUgcDQgdHlwZSBhbmQgcmV0dXJuIGEgdHVwbGUgb2YgdGhlCisjIGJhc2UgdHlwZSwgcGx1cyBhbnkgbW9kaWZpZXJzLiAgU2VlICJwNCBoZWxwIGZpbGV0eXBlcyIKKyMgZm9yIGEgbGlzdCBhbmQgZXhwbGFuYXRpb24uCisjCitkZWYgc3BsaXRfcDRfdHlwZShwNHR5cGUpOgorCisgICAgcDRfZmlsZXR5cGVzX2hpc3RvcmljYWwgPSB7CisgICAgICAgICJjdGVtcG9iaiI6ICJiaW5hcnkrU3ciLAorICAgICAgICAiY3RleHQiOiAidGV4dCtDIiwKKyAgICAgICAgImN4dGV4dCI6ICJ0ZXh0K0N4IiwKKyAgICAgICAgImt0ZXh0IjogInRleHQrayIsCisgICAgICAgICJreHRleHQiOiAidGV4dCtreCIsCisgICAgICAgICJsdGV4dCI6ICJ0ZXh0K0YiLAorICAgICAgICAidGVtcG9iaiI6ICJiaW5hcnkrRlN3IiwKKyAgICAgICAgInViaW5hcnkiOiAiYmluYXJ5K0YiLAorICAgICAgICAidXJlc291cmNlIjogInJlc291cmNlK0YiLAorICAgICAgICAidXhiaW5hcnkiOiAiYmluYXJ5K0Z4IiwKKyAgICAgICAgInhiaW5hcnkiOiAiYmluYXJ5K3giLAorICAgICAgICAieGx0ZXh0IjogInRleHQrRngiLAorICAgICAgICAieHRlbXBvYmoiOiAiYmluYXJ5K1N3eCIsCisgICAgICAgICJ4dGV4dCI6ICJ0ZXh0K3giLAorICAgICAgICAieHVuaWNvZGUiOiAidW5pY29kZSt4IiwKKyAgICAgICAgInh1dGYxNiI6ICJ1dGYxNit4IiwKKyAgICB9CisgICAgaWYgcDR0eXBlIGluIHA0X2ZpbGV0eXBlc19oaXN0b3JpY2FsOgorICAgICAgICBwNHR5cGUgPSBwNF9maWxldHlwZXNfaGlzdG9yaWNhbFtwNHR5cGVdCisgICAgbW9kcyA9ICIiCisgICAgcyA9IHA0dHlwZS5zcGxpdCgiKyIpCisgICAgYmFzZSA9IHNbMF0KKyAgICBtb2RzID0gIiIKKyAgICBpZiBsZW4ocykgPiAxOgorICAgICAgICBtb2RzID0gc1sxXQorICAgIHJldHVybiAoYmFzZSwgbW9kcykKKworIworIyByZXR1cm4gdGhlIHJhdyBwNCB0eXBlIG9mIGEgZmlsZSAodGV4dCwgdGV4dCtrbywgZXRjKQorIworZGVmIHA0X3R5cGUoZmlsZSk6CisgICAgcmVzdWx0cyA9IHA0Q21kTGlzdChbImZzdGF0IiwgIi1UIiwgImhlYWRUeXBlIiwgZmlsZV0pCisgICAgcmV0dXJuIHJlc3VsdHNbMF1bJ2hlYWRUeXBlJ10KKworIworIyBHaXZlbiBhIHR5cGUgYmFzZSBhbmQgbW9kaWZpZXIsIHJldHVybiBhIHJlZ2V4cCBtYXRjaGluZworIyB0aGUga2V5d29yZHMgdGhhdCBjYW4gYmUgZXhwYW5kZWQgaW4gdGhlIGZpbGUKKyMKK2RlZiBwNF9rZXl3b3Jkc19yZWdleHBfZm9yX3R5cGUoYmFzZSwgdHlwZV9tb2RzKToKKyAgICBpZiBiYXNlIGluICgidGV4dCIsICJ1bmljb2RlIiwgImJpbmFyeSIpOgorICAgICAgICBrd29yZHMgPSBOb25lCisgICAgICAgIGlmICJrbyIgaW4gdHlwZV9tb2RzOgorICAgICAgICAgICAga3dvcmRzID0gJ0lkfEhlYWRlcicKKyAgICAgICAgZWxpZiAiayIgaW4gdHlwZV9tb2RzOgorICAgICAgICAgICAga3dvcmRzID0gJ0lkfEhlYWRlcnxBdXRob3J8RGF0ZXxEYXRlVGltZXxDaGFuZ2V8RmlsZXxSZXZpc2lvbicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHBhdHRlcm4gPSByIiIiCisgICAgICAgICAgICBcJCAgICAgICAgICAgICAgIyBTdGFydHMgd2l0aCBhIGRvbGxhciwgZm9sbG93ZWQgYnkuLi4KKyAgICAgICAgICAgICglcykgICAgICAgICAgICAjIG9uZSBvZiB0aGUga2V5d29yZHMsIGZvbGxvd2VkIGJ5Li4uCisgICAgICAgICAgICAoOlteJF0rKT8gICAgICAgIyBwb3NzaWJseSBhbiBvbGQgZXhwYW5zaW9uLCBmb2xsb3dlZCBieS4uLgorICAgICAgICAgICAgXCQgICAgICAgICAgICAgICMgYW5vdGhlciBkb2xsYXIKKyAgICAgICAgICAgICIiIiAlIGt3b3JkcworICAgICAgICByZXR1cm4gcGF0dGVybgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKyMKKyMgR2l2ZW4gYSBmaWxlLCByZXR1cm4gYSByZWdleHAgbWF0Y2hpbmcgdGhlIHBvc3NpYmxlCisjIFJDUyBrZXl3b3JkcyB0aGF0IHdpbGwgYmUgZXhwYW5kZWQsIG9yIE5vbmUgZm9yIGZpbGVzCisjIHdpdGgga3cgZXhwYW5zaW9uIHR1cm5lZCBvZmYuCisjCitkZWYgcDRfa2V5d29yZHNfcmVnZXhwX2Zvcl9maWxlKGZpbGUpOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBlbHNlOgorICAgICAgICAodHlwZV9iYXNlLCB0eXBlX21vZHMpID0gc3BsaXRfcDRfdHlwZShwNF90eXBlKGZpbGUpKQorICAgICAgICByZXR1cm4gcDRfa2V5d29yZHNfcmVnZXhwX2Zvcl90eXBlKHR5cGVfYmFzZSwgdHlwZV9tb2RzKQorCitkZWYgc2V0UDRFeGVjQml0KGZpbGUsIG1vZGUpOgorICAgICMgUmVvcGVucyBhbiBhbHJlYWR5IG9wZW4gZmlsZSBhbmQgY2hhbmdlcyB0aGUgZXhlY3V0ZSBiaXQgdG8gbWF0Y2gKKyAgICAjIHRoZSBleGVjdXRlIGJpdCBzZXR0aW5nIGluIHRoZSBwYXNzZWQgaW4gbW9kZS4KKworICAgIHA0VHlwZSA9ICIreCIKKworICAgIGlmIG5vdCBpc01vZGVFeGVjKG1vZGUpOgorICAgICAgICBwNFR5cGUgPSBnZXRQNE9wZW5lZFR5cGUoZmlsZSkKKyAgICAgICAgcDRUeXBlID0gcmUuc3ViKCdeKFtja3VdPyl4KC4qKScsICdcXDFcXDInLCBwNFR5cGUpCisgICAgICAgIHA0VHlwZSA9IHJlLnN1YignKC4qP1wrLio/KXgoLio/KScsICdcXDFcXDInLCBwNFR5cGUpCisgICAgICAgIGlmIHA0VHlwZVstMV0gPT0gIisiOgorICAgICAgICAgICAgcDRUeXBlID0gcDRUeXBlWzA6LTFdCisKKyAgICBwNF9yZW9wZW4ocDRUeXBlLCBmaWxlKQorCitkZWYgZ2V0UDRPcGVuZWRUeXBlKGZpbGUpOgorICAgICMgUmV0dXJucyB0aGUgcGVyZm9yY2UgZmlsZSB0eXBlIGZvciB0aGUgZ2l2ZW4gZmlsZS4KKworICAgIHJlc3VsdCA9IHA0X3JlYWRfcGlwZShbIm9wZW5lZCIsIHdpbGRjYXJkX2VuY29kZShmaWxlKV0pCisgICAgbWF0Y2ggPSByZS5tYXRjaCgiLipcKCguKylcKVxyPyQiLCByZXN1bHQpCisgICAgaWYgbWF0Y2g6CisgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKQorICAgIGVsc2U6CisgICAgICAgIGRpZSgiQ291bGQgbm90IGRldGVybWluZSBmaWxlIHR5cGUgZm9yICVzIChyZXN1bHQ6ICclcycpIiAlIChmaWxlLCByZXN1bHQpKQorCisjIFJldHVybiB0aGUgc2V0IG9mIGFsbCBwNCBsYWJlbHMKK2RlZiBnZXRQNExhYmVscyhkZXBvdFBhdGhzKToKKyAgICBsYWJlbHMgPSBzZXQoKQorICAgIGlmIGlzaW5zdGFuY2UoZGVwb3RQYXRocyxiYXNlc3RyaW5nKToKKyAgICAgICAgZGVwb3RQYXRocyA9IFtkZXBvdFBhdGhzXQorCisgICAgZm9yIGwgaW4gcDRDbWRMaXN0KFsibGFiZWxzIl0gKyBbIiVzLi4uIiAlIHAgZm9yIHAgaW4gZGVwb3RQYXRoc10pOgorICAgICAgICBsYWJlbCA9IGxbJ2xhYmVsJ10KKyAgICAgICAgbGFiZWxzLmFkZChsYWJlbCkKKworICAgIHJldHVybiBsYWJlbHMKKworIyBSZXR1cm4gdGhlIHNldCBvZiBhbGwgZ2l0IHRhZ3MKK2RlZiBnZXRHaXRUYWdzKCk6CisgICAgZ2l0VGFncyA9IHNldCgpCisgICAgZm9yIGxpbmUgaW4gcmVhZF9waXBlX2xpbmVzKFsiZ2l0IiwgInRhZyJdKToKKyAgICAgICAgdGFnID0gbGluZS5zdHJpcCgpCisgICAgICAgIGdpdFRhZ3MuYWRkKHRhZykKKyAgICByZXR1cm4gZ2l0VGFncworCitkZWYgZGlmZlRyZWVQYXR0ZXJuKCk6CisgICAgIyBUaGlzIGlzIGEgc2ltcGxlIGdlbmVyYXRvciBmb3IgdGhlIGRpZmYgdHJlZSByZWdleCBwYXR0ZXJuLiBUaGlzIGNvdWxkIGJlCisgICAgIyBhIGNsYXNzIHZhcmlhYmxlIGlmIHRoaXMgYW5kIHBhcnNlRGlmZlRyZWVFbnRyeSB3ZXJlIGEgcGFydCBvZiBhIGNsYXNzLgorICAgIHBhdHRlcm4gPSByZS5jb21waWxlKCc6KFxkKykgKFxkKykgKFx3KykgKFx3KykgKFtBLVpdKShcZCspP1x0KC4qPykoKFx0KC4qKSl8JCknKQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHlpZWxkIHBhdHRlcm4KKworZGVmIHBhcnNlRGlmZlRyZWVFbnRyeShlbnRyeSk6CisgICAgIiIiUGFyc2VzIGEgc2luZ2xlIGRpZmYgdHJlZSBlbnRyeSBpbnRvIGl0cyBjb21wb25lbnQgZWxlbWVudHMuCisKKyAgICBTZWUgZ2l0LWRpZmYtdHJlZSgxKSBtYW5wYWdlIGZvciBkZXRhaWxzIGFib3V0IHRoZSBmb3JtYXQgb2YgdGhlIGRpZmYKKyAgICBvdXRwdXQuIFRoaXMgbWV0aG9kIHJldHVybnMgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIGZvbGxvd2luZyBlbGVtZW50czoKKworICAgIHNyY19tb2RlIC0gVGhlIG1vZGUgb2YgdGhlIHNvdXJjZSBmaWxlCisgICAgZHN0X21vZGUgLSBUaGUgbW9kZSBvZiB0aGUgZGVzdGluYXRpb24gZmlsZQorICAgIHNyY19zaGExIC0gVGhlIHNoYTEgZm9yIHRoZSBzb3VyY2UgZmlsZQorICAgIGRzdF9zaGExIC0gVGhlIHNoYTEgZnIgdGhlIGRlc3RpbmF0aW9uIGZpbGUKKyAgICBzdGF0dXMgLSBUaGUgb25lIGxldHRlciBzdGF0dXMgb2YgdGhlIGRpZmYgKGkuZS4gJ0EnLCAnTScsICdEJywgZXRjKQorICAgIHN0YXR1c19zY29yZSAtIFRoZSBzY29yZSBmb3IgdGhlIHN0YXR1cyAoYXBwbGljYWJsZSBmb3IgJ0MnIGFuZCAnUicKKyAgICAgICAgICAgICAgICAgICBzdGF0dXNlcykuIFRoaXMgaXMgTm9uZSBpZiB0aGVyZSBpcyBubyBzY29yZS4KKyAgICBzcmMgLSBUaGUgcGF0aCBmb3IgdGhlIHNvdXJjZSBmaWxlLgorICAgIGRzdCAtIFRoZSBwYXRoIGZvciB0aGUgZGVzdGluYXRpb24gZmlsZS4gVGhpcyBpcyBvbmx5IHByZXNlbnQgZm9yCisgICAgICAgICAgY29weSBvciByZW5hbWVzLiBJZiBpdCBpcyBub3QgcHJlc2VudCwgdGhpcyBpcyBOb25lLgorCisgICAgSWYgdGhlIHBhdHRlcm4gaXMgbm90IG1hdGNoZWQsIE5vbmUgaXMgcmV0dXJuZWQuIiIiCisKKyAgICBtYXRjaCA9IGRpZmZUcmVlUGF0dGVybigpLm5leHQoKS5tYXRjaChlbnRyeSkKKyAgICBpZiBtYXRjaDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICdzcmNfbW9kZSc6IG1hdGNoLmdyb3VwKDEpLAorICAgICAgICAgICAgJ2RzdF9tb2RlJzogbWF0Y2guZ3JvdXAoMiksCisgICAgICAgICAgICAnc3JjX3NoYTEnOiBtYXRjaC5ncm91cCgzKSwKKyAgICAgICAgICAgICdkc3Rfc2hhMSc6IG1hdGNoLmdyb3VwKDQpLAorICAgICAgICAgICAgJ3N0YXR1cyc6IG1hdGNoLmdyb3VwKDUpLAorICAgICAgICAgICAgJ3N0YXR1c19zY29yZSc6IG1hdGNoLmdyb3VwKDYpLAorICAgICAgICAgICAgJ3NyYyc6IG1hdGNoLmdyb3VwKDcpLAorICAgICAgICAgICAgJ2RzdCc6IG1hdGNoLmdyb3VwKDEwKQorICAgICAgICB9CisgICAgcmV0dXJuIE5vbmUKKworZGVmIGlzTW9kZUV4ZWMobW9kZSk6CisgICAgIyBSZXR1cm5zIFRydWUgaWYgdGhlIGdpdmVuIGdpdCBtb2RlIHJlcHJlc2VudHMgYW4gZXhlY3V0YWJsZSBmaWxlLAorICAgICMgb3RoZXJ3aXNlIEZhbHNlLgorICAgIHJldHVybiBtb2RlWy0zOl0gPT0gIjc1NSIKKworZGVmIGlzTW9kZUV4ZWNDaGFuZ2VkKHNyY19tb2RlLCBkc3RfbW9kZSk6CisgICAgcmV0dXJuIGlzTW9kZUV4ZWMoc3JjX21vZGUpICE9IGlzTW9kZUV4ZWMoZHN0X21vZGUpCisKK2RlZiBwNENtZExpc3QoY21kLCBzdGRpbj1Ob25lLCBzdGRpbl9tb2RlPSd3K2InLCBjYj1Ob25lKToKKworICAgIGlmIGlzaW5zdGFuY2UoY21kLGJhc2VzdHJpbmcpOgorICAgICAgICBjbWQgPSAiLUcgIiArIGNtZAorICAgICAgICBleHBhbmQgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgY21kID0gWyItRyJdICsgY21kCisgICAgICAgIGV4cGFuZCA9IEZhbHNlCisKKyAgICBjbWQgPSBwNF9idWlsZF9jbWQoY21kKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIk9wZW5pbmcgcGlwZTogJXNcbiIgJSBzdHIoY21kKSkKKworICAgICMgVXNlIGEgdGVtcG9yYXJ5IGZpbGUgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGhvdXQKKyAgICAjIHN1YnByb2Nlc3MuY29tbXVuaWNhdGUoKSwgd2hpY2ggd291bGQgcHV0IGFub3RoZXIgY29weQorICAgICMgb2Ygc3Rkb3V0IGludG8gbWVtb3J5LgorICAgIHN0ZGluX2ZpbGUgPSBOb25lCisgICAgaWYgc3RkaW4gaXMgbm90IE5vbmU6CisgICAgICAgIHN0ZGluX2ZpbGUgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKHByZWZpeD0ncDQtc3RkaW4nLCBtb2RlPXN0ZGluX21vZGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3RkaW4sYmFzZXN0cmluZyk6CisgICAgICAgICAgICBzdGRpbl9maWxlLndyaXRlKHN0ZGluKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGkgaW4gc3RkaW46CisgICAgICAgICAgICAgICAgc3RkaW5fZmlsZS53cml0ZShpICsgJ1xuJykKKyAgICAgICAgc3RkaW5fZmlsZS5mbHVzaCgpCisgICAgICAgIHN0ZGluX2ZpbGUuc2VlaygwKQorCisgICAgcDQgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9ZXhwYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbl9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorCisgICAgcmVzdWx0ID0gW10KKyAgICB0cnk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBlbnRyeSA9IG1hcnNoYWwubG9hZChwNC5zdGRvdXQpCisgICAgICAgICAgICBpZiBjYiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjYihlbnRyeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChlbnRyeSkKKyAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBleGl0Q29kZSA9IHA0LndhaXQoKQorICAgIGlmIGV4aXRDb2RlICE9IDA6CisgICAgICAgIGVudHJ5ID0ge30KKyAgICAgICAgZW50cnlbInA0RXhpdENvZGUiXSA9IGV4aXRDb2RlCisgICAgICAgIHJlc3VsdC5hcHBlbmQoZW50cnkpCisKKyAgICByZXR1cm4gcmVzdWx0CisKK2RlZiBwNENtZChjbWQpOgorICAgIGxpc3QgPSBwNENtZExpc3QoY21kKQorICAgIHJlc3VsdCA9IHt9CisgICAgZm9yIGVudHJ5IGluIGxpc3Q6CisgICAgICAgIHJlc3VsdC51cGRhdGUoZW50cnkpCisgICAgcmV0dXJuIHJlc3VsdDsKKworZGVmIHA0V2hlcmUoZGVwb3RQYXRoKToKKyAgICBpZiBub3QgZGVwb3RQYXRoLmVuZHN3aXRoKCIvIik6CisgICAgICAgIGRlcG90UGF0aCArPSAiLyIKKyAgICBkZXBvdFBhdGggPSBkZXBvdFBhdGggKyAiLi4uIgorICAgIG91dHB1dExpc3QgPSBwNENtZExpc3QoWyJ3aGVyZSIsIGRlcG90UGF0aF0pCisgICAgb3V0cHV0ID0gTm9uZQorICAgIGZvciBlbnRyeSBpbiBvdXRwdXRMaXN0OgorICAgICAgICBpZiAiZGVwb3RGaWxlIiBpbiBlbnRyeToKKyAgICAgICAgICAgIGlmIGVudHJ5WyJkZXBvdEZpbGUiXSA9PSBkZXBvdFBhdGg6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gZW50cnkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbGlmICJkYXRhIiBpbiBlbnRyeToKKyAgICAgICAgICAgIGRhdGEgPSBlbnRyeS5nZXQoImRhdGEiKQorICAgICAgICAgICAgc3BhY2UgPSBkYXRhLmZpbmQoIiAiKQorICAgICAgICAgICAgaWYgZGF0YVs6c3BhY2VdID09IGRlcG90UGF0aDoKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBlbnRyeQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgaWYgb3V0cHV0ID09IE5vbmU6CisgICAgICAgIHJldHVybiAiIgorICAgIGlmIG91dHB1dFsiY29kZSJdID09ICJlcnJvciI6CisgICAgICAgIHJldHVybiAiIgorICAgIGNsaWVudFBhdGggPSAiIgorICAgIGlmICJwYXRoIiBpbiBvdXRwdXQ6CisgICAgICAgIGNsaWVudFBhdGggPSBvdXRwdXQuZ2V0KCJwYXRoIikKKyAgICBlbGlmICJkYXRhIiBpbiBvdXRwdXQ6CisgICAgICAgIGRhdGEgPSBvdXRwdXQuZ2V0KCJkYXRhIikKKyAgICAgICAgbGFzdFNwYWNlID0gZGF0YS5yZmluZCgiICIpCisgICAgICAgIGNsaWVudFBhdGggPSBkYXRhW2xhc3RTcGFjZSArIDE6XQorCisgICAgaWYgY2xpZW50UGF0aC5lbmRzd2l0aCgiLi4uIik6CisgICAgICAgIGNsaWVudFBhdGggPSBjbGllbnRQYXRoWzotM10KKyAgICByZXR1cm4gY2xpZW50UGF0aAorCitkZWYgY3VycmVudEdpdEJyYW5jaCgpOgorICAgIHJldHVybiByZWFkX3BpcGUoImdpdCBuYW1lLXJldiBIRUFEIikuc3BsaXQoIiAiKVsxXS5zdHJpcCgpCisKK2RlZiBpc1ZhbGlkR2l0RGlyKHBhdGgpOgorICAgIGlmIChvcy5wYXRoLmV4aXN0cyhwYXRoICsgIi9IRUFEIikKKyAgICAgICAgYW5kIG9zLnBhdGguZXhpc3RzKHBhdGggKyAiL3JlZnMiKSBhbmQgb3MucGF0aC5leGlzdHMocGF0aCArICIvb2JqZWN0cyIpKToKKyAgICAgICAgcmV0dXJuIFRydWU7CisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBwYXJzZVJldmlzaW9uKHJlZik6CisgICAgcmV0dXJuIHJlYWRfcGlwZSgiZ2l0IHJldi1wYXJzZSAlcyIgJSByZWYpLnN0cmlwKCkKKworZGVmIGJyYW5jaEV4aXN0cyhyZWYpOgorICAgIHJldiA9IHJlYWRfcGlwZShbImdpdCIsICJyZXYtcGFyc2UiLCAiLXEiLCAiLS12ZXJpZnkiLCByZWZdLAorICAgICAgICAgICAgICAgICAgICAgaWdub3JlX2Vycm9yPVRydWUpCisgICAgcmV0dXJuIGxlbihyZXYpID4gMAorCitkZWYgZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KGNvbW1pdCk6CisgICAgbG9nTWVzc2FnZSA9ICIiCisKKyAgICAjIyBmaXhtZTogdGl0bGUgaXMgZmlyc3QgbGluZSBvZiBjb21taXQsIG5vdCAxc3QgcGFyYWdyYXBoLgorICAgIGZvdW5kVGl0bGUgPSBGYWxzZQorICAgIGZvciBsb2cgaW4gcmVhZF9waXBlX2xpbmVzKCJnaXQgY2F0LWZpbGUgY29tbWl0ICVzIiAlIGNvbW1pdCk6CisgICAgICAgaWYgbm90IGZvdW5kVGl0bGU6CisgICAgICAgICAgIGlmIGxlbihsb2cpID09IDE6CisgICAgICAgICAgICAgICBmb3VuZFRpdGxlID0gVHJ1ZQorICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgbG9nTWVzc2FnZSArPSBsb2cKKyAgICByZXR1cm4gbG9nTWVzc2FnZQorCitkZWYgZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZyk6CisgICAgdmFsdWVzID0ge30KKyAgICBmb3IgbGluZSBpbiBsb2cuc3BsaXQoIlxuIik6CisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgbSA9IHJlLnNlYXJjaCAociJeICpcW2dpdC1wNDogKC4qKVxdJCIsIGxpbmUpCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBhc3NpZ25tZW50cyA9IG0uZ3JvdXAoMSkuc3BsaXQgKCc6JykKKyAgICAgICAgZm9yIGEgaW4gYXNzaWdubWVudHM6CisgICAgICAgICAgICB2YWxzID0gYS5zcGxpdCAoJz0nKQorICAgICAgICAgICAga2V5ID0gdmFsc1swXS5zdHJpcCgpCisgICAgICAgICAgICB2YWwgPSAoJz0nLmpvaW4gKHZhbHNbMTpdKSkuc3RyaXAoKQorICAgICAgICAgICAgaWYgdmFsLmVuZHN3aXRoICgnXCInKSBhbmQgdmFsLnN0YXJ0c3dpdGgoJyInKToKKyAgICAgICAgICAgICAgICB2YWwgPSB2YWxbMTotMV0KKworICAgICAgICAgICAgdmFsdWVzW2tleV0gPSB2YWwKKworICAgIHBhdGhzID0gdmFsdWVzLmdldCgiZGVwb3QtcGF0aHMiKQorICAgIGlmIG5vdCBwYXRoczoKKyAgICAgICAgcGF0aHMgPSB2YWx1ZXMuZ2V0KCJkZXBvdC1wYXRoIikKKyAgICBpZiBwYXRoczoKKyAgICAgICAgdmFsdWVzWydkZXBvdC1wYXRocyddID0gcGF0aHMuc3BsaXQoJywnKQorICAgIHJldHVybiB2YWx1ZXMKKworZGVmIGdpdEJyYW5jaEV4aXN0cyhicmFuY2gpOgorICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZ2l0IiwgInJldi1wYXJzZSIsIGJyYW5jaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSk7CisgICAgcmV0dXJuIHByb2Mud2FpdCgpID09IDA7CisKK19naXRDb25maWcgPSB7fQorZGVmIGdpdENvbmZpZyhrZXksIGFyZ3MgPSBOb25lKTogIyBzZXQgYXJncyB0byAiLS1ib29sIiwgZm9yIGluc3RhbmNlCisgICAgaWYgbm90IF9naXRDb25maWcuaGFzX2tleShrZXkpOgorICAgICAgICBhcmdzRmlsdGVyID0gIiIKKyAgICAgICAgaWYgYXJncyAhPSBOb25lOgorICAgICAgICAgICAgYXJnc0ZpbHRlciA9ICIlcyAiICUgYXJncworICAgICAgICBjbWQgPSAiZ2l0IGNvbmZpZyAlcyVzIiAlIChhcmdzRmlsdGVyLCBrZXkpCisgICAgICAgIF9naXRDb25maWdba2V5XSA9IHJlYWRfcGlwZShjbWQsIGlnbm9yZV9lcnJvcj1UcnVlKS5zdHJpcCgpCisgICAgcmV0dXJuIF9naXRDb25maWdba2V5XQorCitkZWYgZ2l0Q29uZmlnTGlzdChrZXkpOgorICAgIGlmIG5vdCBfZ2l0Q29uZmlnLmhhc19rZXkoa2V5KToKKyAgICAgICAgX2dpdENvbmZpZ1trZXldID0gcmVhZF9waXBlKCJnaXQgY29uZmlnIC0tZ2V0LWFsbCAlcyIgJSBrZXksIGlnbm9yZV9lcnJvcj1UcnVlKS5zdHJpcCgpLnNwbGl0KG9zLmxpbmVzZXApCisgICAgcmV0dXJuIF9naXRDb25maWdba2V5XQorCitkZWYgcDRCcmFuY2hlc0luR2l0KGJyYW5jaGVzQXJlSW5SZW1vdGVzID0gVHJ1ZSk6CisgICAgYnJhbmNoZXMgPSB7fQorCisgICAgY21kbGluZSA9ICJnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgIgorICAgIGlmIGJyYW5jaGVzQXJlSW5SZW1vdGVzOgorICAgICAgICBjbWRsaW5lICs9ICIgLS1yZW1vdGVzIgorICAgIGVsc2U6CisgICAgICAgIGNtZGxpbmUgKz0gIiAtLWJyYW5jaGVzIgorCisgICAgZm9yIGxpbmUgaW4gcmVhZF9waXBlX2xpbmVzKGNtZGxpbmUpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisKKyAgICAgICAgIyMgb25seSBpbXBvcnQgdG8gcDQvCisgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ3A0LycpIG9yIGxpbmUgPT0gInA0L0hFQUQiOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYnJhbmNoID0gbGluZQorCisgICAgICAgICMgc3RyaXAgb2ZmIHA0CisgICAgICAgIGJyYW5jaCA9IHJlLnN1YiAoIl5wNC8iLCAiIiwgbGluZSkKKworICAgICAgICBicmFuY2hlc1ticmFuY2hdID0gcGFyc2VSZXZpc2lvbihsaW5lKQorICAgIHJldHVybiBicmFuY2hlcworCitkZWYgZmluZFVwc3RyZWFtQnJhbmNoUG9pbnQoaGVhZCA9ICJIRUFEIik6CisgICAgYnJhbmNoZXMgPSBwNEJyYW5jaGVzSW5HaXQoKQorICAgICMgbWFwIGZyb20gZGVwb3QtcGF0aCB0byBicmFuY2ggbmFtZQorICAgIGJyYW5jaEJ5RGVwb3RQYXRoID0ge30KKyAgICBmb3IgYnJhbmNoIGluIGJyYW5jaGVzLmtleXMoKToKKyAgICAgICAgdGlwID0gYnJhbmNoZXNbYnJhbmNoXQorICAgICAgICBsb2cgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQodGlwKQorICAgICAgICBzZXR0aW5ncyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpCisgICAgICAgIGlmIHNldHRpbmdzLmhhc19rZXkoImRlcG90LXBhdGhzIik6CisgICAgICAgICAgICBwYXRocyA9ICIsIi5qb2luKHNldHRpbmdzWyJkZXBvdC1wYXRocyJdKQorICAgICAgICAgICAgYnJhbmNoQnlEZXBvdFBhdGhbcGF0aHNdID0gInJlbW90ZXMvcDQvIiArIGJyYW5jaAorCisgICAgc2V0dGluZ3MgPSBOb25lCisgICAgcGFyZW50ID0gMAorICAgIHdoaWxlIHBhcmVudCA8IDY1NTM1OgorICAgICAgICBjb21taXQgPSBoZWFkICsgIn4lcyIgJSBwYXJlbnQKKyAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KGNvbW1pdCkKKyAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKQorICAgICAgICBpZiBzZXR0aW5ncy5oYXNfa2V5KCJkZXBvdC1wYXRocyIpOgorICAgICAgICAgICAgcGF0aHMgPSAiLCIuam9pbihzZXR0aW5nc1siZGVwb3QtcGF0aHMiXSkKKyAgICAgICAgICAgIGlmIGJyYW5jaEJ5RGVwb3RQYXRoLmhhc19rZXkocGF0aHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbYnJhbmNoQnlEZXBvdFBhdGhbcGF0aHNdLCBzZXR0aW5nc10KKworICAgICAgICBwYXJlbnQgPSBwYXJlbnQgKyAxCisKKyAgICByZXR1cm4gWyIiLCBzZXR0aW5nc10KKworZGVmIGNyZWF0ZU9yVXBkYXRlQnJhbmNoZXNGcm9tT3JpZ2luKGxvY2FsUmVmUHJlZml4ID0gInJlZnMvcmVtb3Rlcy9wNC8iLCBzaWxlbnQ9VHJ1ZSk6CisgICAgaWYgbm90IHNpbGVudDoKKyAgICAgICAgcHJpbnQgKCJDcmVhdGluZy91cGRhdGluZyBicmFuY2goZXMpIGluICVzIGJhc2VkIG9uIG9yaWdpbiBicmFuY2goZXMpIgorICAgICAgICAgICAgICAgJSBsb2NhbFJlZlByZWZpeCkKKworICAgIG9yaWdpblByZWZpeCA9ICJvcmlnaW4vcDQvIgorCisgICAgZm9yIGxpbmUgaW4gcmVhZF9waXBlX2xpbmVzKCJnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgLS1yZW1vdGVzIik6CisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgKG5vdCBsaW5lLnN0YXJ0c3dpdGgob3JpZ2luUHJlZml4KSkgb3IgbGluZS5lbmRzd2l0aCgiSEVBRCIpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBoZWFkTmFtZSA9IGxpbmVbbGVuKG9yaWdpblByZWZpeCk6XQorICAgICAgICByZW1vdGVIZWFkID0gbG9jYWxSZWZQcmVmaXggKyBoZWFkTmFtZQorICAgICAgICBvcmlnaW5IZWFkID0gbGluZQorCisgICAgICAgIG9yaWdpbmFsID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChvcmlnaW5IZWFkKSkKKyAgICAgICAgaWYgKG5vdCBvcmlnaW5hbC5oYXNfa2V5KCdkZXBvdC1wYXRocycpCisgICAgICAgICAgICBvciBub3Qgb3JpZ2luYWwuaGFzX2tleSgnY2hhbmdlJykpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB1cGRhdGUgPSBGYWxzZQorICAgICAgICBpZiBub3QgZ2l0QnJhbmNoRXhpc3RzKHJlbW90ZUhlYWQpOgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAiY3JlYXRpbmcgJXMiICUgcmVtb3RlSGVhZAorICAgICAgICAgICAgdXBkYXRlID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2coZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KHJlbW90ZUhlYWQpKQorICAgICAgICAgICAgaWYgc2V0dGluZ3MuaGFzX2tleSgnY2hhbmdlJykgPiAwOgorICAgICAgICAgICAgICAgIGlmIHNldHRpbmdzWydkZXBvdC1wYXRocyddID09IG9yaWdpbmFsWydkZXBvdC1wYXRocyddOgorICAgICAgICAgICAgICAgICAgICBvcmlnaW5QNENoYW5nZSA9IGludChvcmlnaW5hbFsnY2hhbmdlJ10pCisgICAgICAgICAgICAgICAgICAgIHA0Q2hhbmdlID0gaW50KHNldHRpbmdzWydjaGFuZ2UnXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3JpZ2luUDRDaGFuZ2UgPiBwNENoYW5nZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICgiJXMgKCVzKSBpcyBuZXdlciB0aGFuICVzICglcykuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXBkYXRpbmcgcDQgYnJhbmNoIGZyb20gb3JpZ2luLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChvcmlnaW5IZWFkLCBvcmlnaW5QNENoYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVIZWFkLCBwNENoYW5nZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJJZ25vcmluZzogJXMgd2FzIGltcG9ydGVkIGZyb20gJXMgd2hpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIHdhcyBpbXBvcnRlZCBmcm9tICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAob3JpZ2luSGVhZCwgJywnLmpvaW4ob3JpZ2luYWxbJ2RlcG90LXBhdGhzJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlSGVhZCwgJywnLmpvaW4oc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10pKSkKKworICAgICAgICBpZiB1cGRhdGU6CisgICAgICAgICAgICBzeXN0ZW0oImdpdCB1cGRhdGUtcmVmICVzICVzIiAlIChyZW1vdGVIZWFkLCBvcmlnaW5IZWFkKSkKKworZGVmIG9yaWdpblA0QnJhbmNoZXNFeGlzdCgpOgorICAgICAgICByZXR1cm4gZ2l0QnJhbmNoRXhpc3RzKCJvcmlnaW4iKSBvciBnaXRCcmFuY2hFeGlzdHMoIm9yaWdpbi9wNCIpIG9yIGdpdEJyYW5jaEV4aXN0cygib3JpZ2luL3A0L21hc3RlciIpCisKK2RlZiBwNENoYW5nZXNGb3JQYXRocyhkZXBvdFBhdGhzLCBjaGFuZ2VSYW5nZSk6CisgICAgYXNzZXJ0IGRlcG90UGF0aHMKKyAgICBjbWQgPSBbJ2NoYW5nZXMnXQorICAgIGZvciBwIGluIGRlcG90UGF0aHM6CisgICAgICAgIGNtZCArPSBbIiVzLi4uJXMiICUgKHAsIGNoYW5nZVJhbmdlKV0KKyAgICBvdXRwdXQgPSBwNF9yZWFkX3BpcGVfbGluZXMoY21kKQorCisgICAgY2hhbmdlcyA9IHt9CisgICAgZm9yIGxpbmUgaW4gb3V0cHV0OgorICAgICAgICBjaGFuZ2VOdW0gPSBpbnQobGluZS5zcGxpdCgiICIpWzFdKQorICAgICAgICBjaGFuZ2VzW2NoYW5nZU51bV0gPSBUcnVlCisKKyAgICBjaGFuZ2VsaXN0ID0gY2hhbmdlcy5rZXlzKCkKKyAgICBjaGFuZ2VsaXN0LnNvcnQoKQorICAgIHJldHVybiBjaGFuZ2VsaXN0CisKK2RlZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIHByZWZpeCk6CisgICAgIyBUaGlzIG1ldGhvZCB0cmllcyB0byByZW1lZHkgYSBwb3RlbnRpYWwgbWl4ZWQtY2FzZSBpc3N1ZToKKyAgICAjCisgICAgIyBJZiBVc2VyQSBhZGRzICAvL2RlcG90L0RpckEvZmlsZTEKKyAgICAjIGFuZCBVc2VyQiBhZGRzIC8vZGVwb3QvZGlyYS9maWxlMgorICAgICMKKyAgICAjIHdlIG1heSBvciBtYXkgbm90IGhhdmUgYSBwcm9ibGVtLiBJZiB5b3UgaGF2ZSBjb3JlLmlnbm9yZWNhc2U9dHJ1ZSwKKyAgICAjIHdlIHRyZWF0IERpckEgYW5kIGRpcmEgYXMgdGhlIHNhbWUgZGlyZWN0b3J5CisgICAgaWdub3JlY2FzZSA9IGdpdENvbmZpZygiY29yZS5pZ25vcmVjYXNlIiwgIi0tYm9vbCIpID09ICJ0cnVlIgorICAgIGlmIGlnbm9yZWNhc2U6CisgICAgICAgIHJldHVybiBwYXRoLmxvd2VyKCkuc3RhcnRzd2l0aChwcmVmaXgubG93ZXIoKSkKKyAgICByZXR1cm4gcGF0aC5zdGFydHN3aXRoKHByZWZpeCkKKworZGVmIGdldENsaWVudFNwZWMoKToKKyAgICAiIiJMb29rIGF0IHRoZSBwNCBjbGllbnQgc3BlYywgY3JlYXRlIGEgVmlldygpIG9iamVjdCB0aGF0IGNvbnRhaW5zCisgICAgICAgYWxsIHRoZSBtYXBwaW5ncywgYW5kIHJldHVybiBpdC4iIiIKKworICAgIHNwZWNMaXN0ID0gcDRDbWRMaXN0KCJjbGllbnQgLW8iKQorICAgIGlmIGxlbihzcGVjTGlzdCkgIT0gMToKKyAgICAgICAgZGllKCdPdXRwdXQgZnJvbSAiY2xpZW50IC1vIiBpcyAlZCBsaW5lcywgZXhwZWN0aW5nIDEnICUKKyAgICAgICAgICAgIGxlbihzcGVjTGlzdCkpCisKKyAgICAjIGRpY3Rpb25hcnkgb2YgYWxsIGNsaWVudCBwYXJhbWV0ZXJzCisgICAgZW50cnkgPSBzcGVjTGlzdFswXQorCisgICAgIyBqdXN0IHRoZSBrZXlzIHRoYXQgc3RhcnQgd2l0aCAiVmlldyIKKyAgICB2aWV3X2tleXMgPSBbIGsgZm9yIGsgaW4gZW50cnkua2V5cygpIGlmIGsuc3RhcnRzd2l0aCgiVmlldyIpIF0KKworICAgICMgaG9sZCB0aGlzIG5ldyBWaWV3CisgICAgdmlldyA9IFZpZXcoKQorCisgICAgIyBhcHBlbmQgdGhlIGxpbmVzLCBpbiBvcmRlciwgdG8gdGhlIHZpZXcKKyAgICBmb3Igdmlld19udW0gaW4gcmFuZ2UobGVuKHZpZXdfa2V5cykpOgorICAgICAgICBrID0gIlZpZXclZCIgJSB2aWV3X251bQorICAgICAgICBpZiBrIG5vdCBpbiB2aWV3X2tleXM6CisgICAgICAgICAgICBkaWUoIkV4cGVjdGVkIHZpZXcga2V5ICVzIG1pc3NpbmciICUgaykKKyAgICAgICAgdmlldy5hcHBlbmQoZW50cnlba10pCisKKyAgICByZXR1cm4gdmlldworCitkZWYgZ2V0Q2xpZW50Um9vdCgpOgorICAgICIiIkdyYWIgdGhlIGNsaWVudCBkaXJlY3RvcnkuIiIiCisKKyAgICBvdXRwdXQgPSBwNENtZExpc3QoImNsaWVudCAtbyIpCisgICAgaWYgbGVuKG91dHB1dCkgIT0gMToKKyAgICAgICAgZGllKCdPdXRwdXQgZnJvbSAiY2xpZW50IC1vIiBpcyAlZCBsaW5lcywgZXhwZWN0aW5nIDEnICUgbGVuKG91dHB1dCkpCisKKyAgICBlbnRyeSA9IG91dHB1dFswXQorICAgIGlmICJSb290IiBub3QgaW4gZW50cnk6CisgICAgICAgIGRpZSgnQ2xpZW50IGhhcyBubyAiUm9vdCInKQorCisgICAgcmV0dXJuIGVudHJ5WyJSb290Il0KKworIworIyBQNCB3aWxkY2FyZHMgYXJlIG5vdCBhbGxvd2VkIGluIGZpbGVuYW1lcy4gIFA0IGNvbXBsYWlucworIyBpZiB5b3Ugc2ltcGx5IGFkZCB0aGVtLCBidXQgeW91IGNhbiBmb3JjZSBpdCB3aXRoICItZiIsIGluCisjIHdoaWNoIGNhc2UgaXQgdHJhbnNsYXRlcyB0aGVtIGludG8gJXh4IGVuY29kaW5nIGludGVybmFsbHkuCisjCitkZWYgd2lsZGNhcmRfZGVjb2RlKHBhdGgpOgorICAgICMgU2VhcmNoIGZvciBhbmQgZml4IGp1c3QgdGhlc2UgZm91ciBjaGFyYWN0ZXJzLiAgRG8gJSBsYXN0IHNvCisgICAgIyB0aGF0IGZpeGluZyBpdCBkb2VzIG5vdCBpbmFkdmVydGVudGx5IGNyZWF0ZSBuZXcgJS1lc2NhcGVzLgorICAgICMgQ2Fubm90IGhhdmUgKiBpbiBhIGZpbGVuYW1lIGluIHdpbmRvd3M7IHVudGVzdGVkIGFzIHRvCisgICAgIyB3aGF0IHA0IHdvdWxkIGRvIGluIHN1Y2ggYSBjYXNlLgorICAgIGlmIG5vdCBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAiV2luZG93cyI6CisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoIiUyQSIsICIqIikKKyAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIlMjMiLCAiIyIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIlNDAiLCAiQCIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIlMjUiLCAiJSIpCisgICAgcmV0dXJuIHBhdGgKKworZGVmIHdpbGRjYXJkX2VuY29kZShwYXRoKToKKyAgICAjIGRvICUgZmlyc3QgdG8gYXZvaWQgZG91YmxlLWVuY29kaW5nIHRoZSAlcyBpbnRyb2R1Y2VkIGhlcmUKKyAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIlIiwgIiUyNSIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIqIiwgIiUyQSIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIjIiwgIiUyMyIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCJAIiwgIiU0MCIpCisgICAgcmV0dXJuIHBhdGgKKworZGVmIHdpbGRjYXJkX3ByZXNlbnQocGF0aCk6CisgICAgcmV0dXJuIHBhdGgudHJhbnNsYXRlKE5vbmUsICIqI0AlIikgIT0gcGF0aAorCitjbGFzcyBDb21tYW5kOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi51c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIgorICAgICAgICBzZWxmLm5lZWRzR2l0ID0gVHJ1ZQorICAgICAgICBzZWxmLnZlcmJvc2UgPSBGYWxzZQorCitjbGFzcyBQNFVzZXJNYXA6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnVzZXJNYXBGcm9tUGVyZm9yY2VTZXJ2ZXIgPSBGYWxzZQorICAgICAgICBzZWxmLm15UDRVc2VySWQgPSBOb25lCisKKyAgICBkZWYgcDRVc2VySWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYubXlQNFVzZXJJZDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm15UDRVc2VySWQKKworICAgICAgICByZXN1bHRzID0gcDRDbWRMaXN0KCJ1c2VyIC1vIikKKyAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIGlmIHIuaGFzX2tleSgnVXNlcicpOgorICAgICAgICAgICAgICAgIHNlbGYubXlQNFVzZXJJZCA9IHJbJ1VzZXInXQorICAgICAgICAgICAgICAgIHJldHVybiByWydVc2VyJ10KKyAgICAgICAgZGllKCJDb3VsZCBub3QgZmluZCB5b3VyIHA0IHVzZXIgaWQiKQorCisgICAgZGVmIHA0VXNlcklzTWUoc2VsZiwgcDRVc2VyKToKKyAgICAgICAgIyByZXR1cm4gVHJ1ZSBpZiB0aGUgZ2l2ZW4gcDQgdXNlciBpcyBhY3R1YWxseSBtZQorICAgICAgICBtZSA9IHNlbGYucDRVc2VySWQoKQorICAgICAgICBpZiBub3QgcDRVc2VyIG9yIHA0VXNlciAhPSBtZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBnZXRVc2VyQ2FjaGVGaWxlbmFtZShzZWxmKToKKyAgICAgICAgaG9tZSA9IG9zLmVudmlyb24uZ2V0KCJIT01FIiwgb3MuZW52aXJvbi5nZXQoIlVTRVJQUk9GSUxFIikpCisgICAgICAgIHJldHVybiBob21lICsgIi8uZ2l0cDQtdXNlcmNhY2hlLnR4dCIKKworICAgIGRlZiBnZXRVc2VyTWFwRnJvbVBlcmZvcmNlU2VydmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnVzZXJNYXBGcm9tUGVyZm9yY2VTZXJ2ZXI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi51c2VycyA9IHt9CisgICAgICAgIHNlbGYuZW1haWxzID0ge30KKworICAgICAgICBmb3Igb3V0cHV0IGluIHA0Q21kTGlzdCgidXNlcnMiKToKKyAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQuaGFzX2tleSgiVXNlciIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLnVzZXJzW291dHB1dFsiVXNlciJdXSA9IG91dHB1dFsiRnVsbE5hbWUiXSArICIgPCIgKyBvdXRwdXRbIkVtYWlsIl0gKyAiPiIKKyAgICAgICAgICAgIHNlbGYuZW1haWxzW291dHB1dFsiRW1haWwiXV0gPSBvdXRwdXRbIlVzZXIiXQorCisKKyAgICAgICAgcyA9ICcnCisgICAgICAgIGZvciAoa2V5LCB2YWwpIGluIHNlbGYudXNlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIHMgKz0gIiVzXHQlc1xuIiAlIChrZXkuZXhwYW5kdGFicygxKSwgdmFsLmV4cGFuZHRhYnMoMSkpCisKKyAgICAgICAgb3BlbihzZWxmLmdldFVzZXJDYWNoZUZpbGVuYW1lKCksICJ3YiIpLndyaXRlKHMpCisgICAgICAgIHNlbGYudXNlck1hcEZyb21QZXJmb3JjZVNlcnZlciA9IFRydWUKKworICAgIGRlZiBsb2FkVXNlck1hcEZyb21DYWNoZShzZWxmKToKKyAgICAgICAgc2VsZi51c2VycyA9IHt9CisgICAgICAgIHNlbGYudXNlck1hcEZyb21QZXJmb3JjZVNlcnZlciA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhY2hlID0gb3BlbihzZWxmLmdldFVzZXJDYWNoZUZpbGVuYW1lKCksICJyYiIpCisgICAgICAgICAgICBsaW5lcyA9IGNhY2hlLnJlYWRsaW5lcygpCisgICAgICAgICAgICBjYWNoZS5jbG9zZSgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiXHQiKQorICAgICAgICAgICAgICAgIHNlbGYudXNlcnNbZW50cnlbMF1dID0gZW50cnlbMV0KKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBzZWxmLmdldFVzZXJNYXBGcm9tUGVyZm9yY2VTZXJ2ZXIoKQorCitjbGFzcyBQNERlYnVnKENvbW1hbmQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBbXQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gIkEgdG9vbCB0byBkZWJ1ZyB0aGUgb3V0cHV0IG9mIHA0IC1HLiIKKyAgICAgICAgc2VsZi5uZWVkc0dpdCA9IEZhbHNlCisKKyAgICBkZWYgcnVuKHNlbGYsIGFyZ3MpOgorICAgICAgICBqID0gMAorICAgICAgICBmb3Igb3V0cHV0IGluIHA0Q21kTGlzdChhcmdzKToKKyAgICAgICAgICAgIHByaW50ICdFbGVtZW50OiAlZCcgJSBqCisgICAgICAgICAgICBqICs9IDEKKyAgICAgICAgICAgIHByaW50IG91dHB1dAorICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBQNFJvbGxCYWNrKENvbW1hbmQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBbCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1sb2NhbCIsIGRlc3Q9InJvbGxiYWNrTG9jYWxCcmFuY2hlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICJBIHRvb2wgdG8gZGVidWcgdGhlIG11bHRpLWJyYW5jaCBpbXBvcnQuIERvbid0IHVzZSA6KSIKKyAgICAgICAgc2VsZi5yb2xsYmFja0xvY2FsQnJhbmNoZXMgPSBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgbWF4Q2hhbmdlID0gaW50KGFyZ3NbMF0pCisKKyAgICAgICAgaWYgInA0RXhpdENvZGUiIGluIHA0Q21kKCJjaGFuZ2VzIC1tIDEiKToKKyAgICAgICAgICAgIGRpZSgiUHJvYmxlbXMgZXhlY3V0aW5nIHA0Iik7CisKKyAgICAgICAgaWYgc2VsZi5yb2xsYmFja0xvY2FsQnJhbmNoZXM6CisgICAgICAgICAgICByZWZQcmVmaXggPSAicmVmcy9oZWFkcy8iCisgICAgICAgICAgICBsaW5lcyA9IHJlYWRfcGlwZV9saW5lcygiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIC0tYnJhbmNoZXMiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVmUHJlZml4ID0gInJlZnMvcmVtb3Rlcy8iCisgICAgICAgICAgICBsaW5lcyA9IHJlYWRfcGlwZV9saW5lcygiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIC0tcmVtb3RlcyIpCisKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBpZiBzZWxmLnJvbGxiYWNrTG9jYWxCcmFuY2hlcyBvciAobGluZS5zdGFydHN3aXRoKCJwNC8iKSBhbmQgbGluZSAhPSAicDQvSEVBRFxuIik6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgIHJlZiA9IHJlZlByZWZpeCArIGxpbmUKKyAgICAgICAgICAgICAgICBsb2cgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQocmVmKQorICAgICAgICAgICAgICAgIHNldHRpbmdzID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZykKKworICAgICAgICAgICAgICAgIGRlcG90UGF0aHMgPSBzZXR0aW5nc1snZGVwb3QtcGF0aHMnXQorICAgICAgICAgICAgICAgIGNoYW5nZSA9IHNldHRpbmdzWydjaGFuZ2UnXQorCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICBpZiBsZW4ocDRDbWQoImNoYW5nZXMgLW0gMSAiICArICcgJy5qb2luIChbJyVzLi4uQCVzJyAlIChwLCBtYXhDaGFuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIGRlcG90UGF0aHNdKSkpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJCcmFuY2ggJXMgZGlkIG5vdCBleGlzdCBhdCBjaGFuZ2UgJXMsIGRlbGV0aW5nLiIgJSAocmVmLCBtYXhDaGFuZ2UpCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgiZ2l0IHVwZGF0ZS1yZWYgLWQgJXMgYGdpdCByZXYtcGFyc2UgJXNgIiAlIChyZWYsIHJlZikpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICB3aGlsZSBjaGFuZ2UgYW5kIGludChjaGFuZ2UpID4gbWF4Q2hhbmdlOgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiJXMgaXMgYXQgJXMgOyByZXdpbmRpbmcgdG93YXJkcyAlcyIgJSAocmVmLCBjaGFuZ2UsIG1heENoYW5nZSkKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJnaXQgdXBkYXRlLXJlZiAlcyBcIiVzXlwiIiAlIChyZWYsIHJlZikpCisgICAgICAgICAgICAgICAgICAgIGxvZyA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChyZWYpCisgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzID0gIGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpCisKKworICAgICAgICAgICAgICAgICAgICBkZXBvdFBhdGhzID0gc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10KKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlID0gc2V0dGluZ3NbJ2NoYW5nZSddCisKKyAgICAgICAgICAgICAgICBpZiBjaGFuZ2VkOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiJXMgcmV3b3VuZCB0byAlcyIgJSAocmVmLCBjaGFuZ2UpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUDRTdWJtaXQoQ29tbWFuZCwgUDRVc2VyTWFwKToKKworICAgIGNvbmZsaWN0X2JlaGF2aW9yX2Nob2ljZXMgPSAoImFzayIsICJza2lwIiwgInF1aXQiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFA0VXNlck1hcC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tb3JpZ2luIiwgZGVzdD0ib3JpZ2luIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi1NIiwgZGVzdD0iZGV0ZWN0UmVuYW1lcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgICMgcHJlc2VydmUgdGhlIHVzZXIsIHJlcXVpcmVzIHJlbGV2YW50IHA0IHBlcm1pc3Npb25zCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tcHJlc2VydmUtdXNlciIsIGRlc3Q9InByZXNlcnZlVXNlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWV4cG9ydC1sYWJlbHMiLCBkZXN0PSJleHBvcnRMYWJlbHMiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1kcnktcnVuIiwgIi1uIiwgZGVzdD0iZHJ5X3J1biIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXByZXBhcmUtcDQtb25seSIsIGRlc3Q9InByZXBhcmVfcDRfb25seSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWNvbmZsaWN0IiwgZGVzdD0iY29uZmxpY3RfYmVoYXZpb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9c2VsZi5jb25mbGljdF9iZWhhdmlvcl9jaG9pY2VzKQorICAgICAgICBdCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAiU3VibWl0IGNoYW5nZXMgZnJvbSBnaXQgdG8gdGhlIHBlcmZvcmNlIGRlcG90LiIKKyAgICAgICAgc2VsZi51c2FnZSArPSAiIFtuYW1lIG9mIGdpdCBicmFuY2ggdG8gc3VibWl0IGludG8gcGVyZm9yY2UgZGVwb3RdIgorICAgICAgICBzZWxmLm9yaWdpbiA9ICIiCisgICAgICAgIHNlbGYuZGV0ZWN0UmVuYW1lcyA9IEZhbHNlCisgICAgICAgIHNlbGYucHJlc2VydmVVc2VyID0gZ2l0Q29uZmlnKCJnaXQtcDQucHJlc2VydmVVc2VyIikubG93ZXIoKSA9PSAidHJ1ZSIKKyAgICAgICAgc2VsZi5kcnlfcnVuID0gRmFsc2UKKyAgICAgICAgc2VsZi5wcmVwYXJlX3A0X29ubHkgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbmZsaWN0X2JlaGF2aW9yID0gTm9uZQorICAgICAgICBzZWxmLmlzV2luZG93cyA9IChwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAiV2luZG93cyIpCisgICAgICAgIHNlbGYuZXhwb3J0TGFiZWxzID0gRmFsc2UKKyAgICAgICAgc2VsZi5wNEhhc01vdmVDb21tYW5kID0gcDRfaGFzX2NvbW1hbmQoIm1vdmUiKQorCisgICAgZGVmIGNoZWNrKHNlbGYpOgorICAgICAgICBpZiBsZW4ocDRDbWRMaXN0KCJvcGVuZWQgLi4uIikpID4gMDoKKyAgICAgICAgICAgIGRpZSgiWW91IGhhdmUgZmlsZXMgb3BlbmVkIHdpdGggcGVyZm9yY2UhIENsb3NlIHRoZW0gYmVmb3JlIHN0YXJ0aW5nIHRoZSBzeW5jLiIpCisKKyAgICBkZWYgc2VwYXJhdGVfam9ic19mcm9tX2Rlc2NyaXB0aW9uKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICAiIiJFeHRyYWN0IGFuZCByZXR1cm4gYSBwb3NzaWJsZSBKb2JzIGZpZWxkIGluIHRoZSBjb21taXQKKyAgICAgICAgICAgbWVzc2FnZS4gIEl0IGdvZXMgaW50byBhIHNlcGFyYXRlIHNlY3Rpb24gaW4gdGhlIHA0IGNoYW5nZQorICAgICAgICAgICBzcGVjaWZpY2F0aW9uLgorCisgICAgICAgICAgIEEgam9icyBsaW5lIHN0YXJ0cyB3aXRoICJKb2JzOiIgYW5kIGxvb2tzIGxpa2UgYSBuZXcgZmllbGQKKyAgICAgICAgICAgaW4gYSBmb3JtLiAgVmFsdWVzIGFyZSB3aGl0ZS1zcGFjZSBzZXBhcmF0ZWQgb24gdGhlIHNhbWUKKyAgICAgICAgICAgbGluZSBvciBvbiBmb2xsb3dpbmcgbGluZXMgdGhhdCBzdGFydCB3aXRoIGEgdGFiLgorCisgICAgICAgICAgIFRoaXMgZG9lcyBub3QgcGFyc2UgYW5kIGV4dHJhY3QgdGhlIGZ1bGwgZ2l0IGNvbW1pdCBtZXNzYWdlCisgICAgICAgICAgIGxpa2UgYSBwNCBmb3JtLiAgSXQganVzdCBzZWVzIHRoZSBKb2JzOiBsaW5lIGFzIGEgbWFya2VyCisgICAgICAgICAgIHRvIHBhc3MgZXZlcnl0aGluZyBmcm9tIHRoZW4gb24gZGlyZWN0bHkgaW50byB0aGUgcDQgZm9ybSwKKyAgICAgICAgICAgYnV0IG91dHNpZGUgdGhlIGRlc2NyaXB0aW9uIHNlY3Rpb24uCisKKyAgICAgICAgICAgUmV0dXJuIGEgdHVwbGUgKHN0cmlwcGVkIGxvZyBtZXNzYWdlLCBqb2JzIHN0cmluZykuIiIiCisKKyAgICAgICAgbSA9IHJlLnNlYXJjaChyJ15Kb2JzOicsIG1lc3NhZ2UsIHJlLk1VTFRJTElORSkKKyAgICAgICAgaWYgbSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIChtZXNzYWdlLCBOb25lKQorCisgICAgICAgIGpvYnRleHQgPSBtZXNzYWdlW20uc3RhcnQoKTpdCisgICAgICAgIHN0cmlwcGVkX21lc3NhZ2UgPSBtZXNzYWdlWzptLnN0YXJ0KCldLnJzdHJpcCgpCisgICAgICAgIHJldHVybiAoc3RyaXBwZWRfbWVzc2FnZSwgam9idGV4dCkKKworICAgIGRlZiBwcmVwYXJlTG9nTWVzc2FnZShzZWxmLCB0ZW1wbGF0ZSwgbWVzc2FnZSwgam9icyk6CisgICAgICAgICIiIkVkaXRzIHRoZSB0ZW1wbGF0ZSByZXR1cm5lZCBmcm9tICJwNCBjaGFuZ2UgLW8iIHRvIGluc2VydAorICAgICAgICAgICB0aGUgbWVzc2FnZSBpbiB0aGUgRGVzY3JpcHRpb24gZmllbGQsIGFuZCB0aGUgam9icyB0ZXh0IGluCisgICAgICAgICAgIHRoZSBKb2JzIGZpZWxkLiIiIgorICAgICAgICByZXN1bHQgPSAiIgorCisgICAgICAgIGluRGVzY3JpcHRpb25TZWN0aW9uID0gRmFsc2UKKworICAgICAgICBmb3IgbGluZSBpbiB0ZW1wbGF0ZS5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBsaW5lICsgIlxuIgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGluRGVzY3JpcHRpb25TZWN0aW9uOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiRmlsZXM6Iikgb3IgbGluZS5zdGFydHN3aXRoKCJKb2JzOiIpOgorICAgICAgICAgICAgICAgICAgICBpbkRlc2NyaXB0aW9uU2VjdGlvbiA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICMgaW5zZXJ0IEpvYnMgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiBqb2JzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGpvYnMgKyAiXG4iCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJEZXNjcmlwdGlvbjoiKToKKyAgICAgICAgICAgICAgICAgICAgaW5EZXNjcmlwdGlvblNlY3Rpb24gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGxpbmUgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICBmb3IgbWVzc2FnZUxpbmUgaW4gbWVzc2FnZS5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgKz0gIlx0IiArIG1lc3NhZ2VMaW5lICsgIlxuIgorCisgICAgICAgICAgICByZXN1bHQgKz0gbGluZSArICJcbiIKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgcGF0Y2hSQ1NLZXl3b3JkcyhzZWxmLCBmaWxlLCBwYXR0ZXJuKToKKyAgICAgICAgIyBBdHRlbXB0IHRvIHphcCB0aGUgUkNTIGtleXdvcmRzIGluIGEgcDQgY29udHJvbGxlZCBmaWxlIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXR0ZXJuCisgICAgICAgIChoYW5kbGUsIG91dEZpbGVOYW1lKSA9IHRlbXBmaWxlLm1rc3RlbXAoZGlyPScuJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0RmlsZSA9IG9zLmZkb3BlbihoYW5kbGUsICJ3KyIpCisgICAgICAgICAgICBpbkZpbGUgPSBvcGVuKGZpbGUsICJyIikKKyAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUocGF0dGVybiwgcmUuVkVSQk9TRSkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGluRmlsZS5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBsaW5lID0gcmVnZXhwLnN1YihyJyRcMSQnLCBsaW5lKQorICAgICAgICAgICAgICAgIG91dEZpbGUud3JpdGUobGluZSkKKyAgICAgICAgICAgIGluRmlsZS5jbG9zZSgpCisgICAgICAgICAgICBvdXRGaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICMgRm9yY2libHkgb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBmaWxlCisgICAgICAgICAgICBvcy51bmxpbmsoZmlsZSkKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKG91dEZpbGVOYW1lLCBmaWxlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIGNsZWFudXAgb3VyIHRlbXBvcmFyeSBmaWxlCisgICAgICAgICAgICBvcy51bmxpbmsob3V0RmlsZU5hbWUpCisgICAgICAgICAgICBwcmludCAiRmFpbGVkIHRvIHN0cmlwIFJDUyBrZXl3b3JkcyBpbiAlcyIgJSBmaWxlCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHByaW50ICJQYXRjaGVkIHVwIFJDUyBrZXl3b3JkcyBpbiAlcyIgJSBmaWxlCisKKyAgICBkZWYgcDRVc2VyRm9yQ29tbWl0KHNlbGYsaWQpOgorICAgICAgICAjIFJldHVybiB0aGUgdHVwbGUgKHBlcmZvcmNlIHVzZXIsZ2l0IGVtYWlsKSBmb3IgYSBnaXZlbiBnaXQgY29tbWl0IGlkCisgICAgICAgIHNlbGYuZ2V0VXNlck1hcEZyb21QZXJmb3JjZVNlcnZlcigpCisgICAgICAgIGdpdEVtYWlsID0gcmVhZF9waXBlKCJnaXQgbG9nIC0tbWF4LWNvdW50PTEgLS1mb3JtYXQ9JyUlYWUnICVzIiAlIGlkKQorICAgICAgICBnaXRFbWFpbCA9IGdpdEVtYWlsLnN0cmlwKCkKKyAgICAgICAgaWYgbm90IHNlbGYuZW1haWxzLmhhc19rZXkoZ2l0RW1haWwpOgorICAgICAgICAgICAgcmV0dXJuIChOb25lLGdpdEVtYWlsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLmVtYWlsc1tnaXRFbWFpbF0sZ2l0RW1haWwpCisKKyAgICBkZWYgY2hlY2tWYWxpZFA0VXNlcnMoc2VsZixjb21taXRzKToKKyAgICAgICAgIyBjaGVjayBpZiBhbnkgZ2l0IGF1dGhvcnMgY2Fubm90IGJlIG1hcHBlZCB0byBwNCB1c2VycworICAgICAgICBmb3IgaWQgaW4gY29tbWl0czoKKyAgICAgICAgICAgICh1c2VyLGVtYWlsKSA9IHNlbGYucDRVc2VyRm9yQ29tbWl0KGlkKQorICAgICAgICAgICAgaWYgbm90IHVzZXI6CisgICAgICAgICAgICAgICAgbXNnID0gIkNhbm5vdCBmaW5kIHA0IHVzZXIgZm9yIGVtYWlsICVzIGluIGNvbW1pdCAlcy4iICUgKGVtYWlsLCBpZCkKKyAgICAgICAgICAgICAgICBpZiBnaXRDb25maWcoJ2dpdC1wNC5hbGxvd01pc3NpbmdQNFVzZXJzJykubG93ZXIoKSA9PSAidHJ1ZSI6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIlcyIgJSBtc2cKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkaWUoIkVycm9yOiAlc1xuU2V0IGdpdC1wNC5hbGxvd01pc3NpbmdQNFVzZXJzIHRvIHRydWUgdG8gYWxsb3cgdGhpcy4iICUgbXNnKQorCisgICAgZGVmIGxhc3RQNENoYW5nZWxpc3Qoc2VsZik6CisgICAgICAgICMgR2V0IGJhY2sgdGhlIGxhc3QgY2hhbmdlbGlzdCBudW1iZXIgc3VibWl0dGVkIGluIHRoaXMgY2xpZW50IHNwZWMuIFRoaXMKKyAgICAgICAgIyB0aGVuIGdldHMgdXNlZCB0byBwYXRjaCB1cCB0aGUgdXNlcm5hbWUgaW4gdGhlIGNoYW5nZS4gSWYgdGhlIHNhbWUKKyAgICAgICAgIyBjbGllbnQgc3BlYyBpcyBiZWluZyB1c2VkIGJ5IG11bHRpcGxlIHByb2Nlc3NlcyB0aGVuIHRoaXMgbWlnaHQgZ28KKyAgICAgICAgIyB3cm9uZy4KKyAgICAgICAgcmVzdWx0cyA9IHA0Q21kTGlzdCgiY2xpZW50IC1vIikgICAgICAgICMgZmluZCB0aGUgY3VycmVudCBjbGllbnQKKyAgICAgICAgY2xpZW50ID0gTm9uZQorICAgICAgICBmb3IgciBpbiByZXN1bHRzOgorICAgICAgICAgICAgaWYgci5oYXNfa2V5KCdDbGllbnQnKToKKyAgICAgICAgICAgICAgICBjbGllbnQgPSByWydDbGllbnQnXQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBjbGllbnQ6CisgICAgICAgICAgICBkaWUoImNvdWxkIG5vdCBnZXQgY2xpZW50IHNwZWMiKQorICAgICAgICByZXN1bHRzID0gcDRDbWRMaXN0KFsiY2hhbmdlcyIsICItYyIsIGNsaWVudCwgIi1tIiwgIjEiXSkKKyAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIGlmIHIuaGFzX2tleSgnY2hhbmdlJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJbJ2NoYW5nZSddCisgICAgICAgIGRpZSgiQ291bGQgbm90IGdldCBjaGFuZ2VsaXN0IG51bWJlciBmb3IgbGFzdCBzdWJtaXQgLSBjYW5ub3QgcGF0Y2ggdXAgdXNlciBkZXRhaWxzIikKKworICAgIGRlZiBtb2RpZnlDaGFuZ2VsaXN0VXNlcihzZWxmLCBjaGFuZ2VsaXN0LCBuZXdVc2VyKToKKyAgICAgICAgIyBmaXh1cCB0aGUgdXNlciBmaWVsZCBvZiBhIGNoYW5nZWxpc3QgYWZ0ZXIgaXQgaGFzIGJlZW4gc3VibWl0dGVkLgorICAgICAgICBjaGFuZ2VzID0gcDRDbWRMaXN0KCJjaGFuZ2UgLW8gJXMiICUgY2hhbmdlbGlzdCkKKyAgICAgICAgaWYgbGVuKGNoYW5nZXMpICE9IDE6CisgICAgICAgICAgICBkaWUoIkJhZCBvdXRwdXQgZnJvbSBwNCBjaGFuZ2UgbW9kaWZ5aW5nICVzIHRvIHVzZXIgJXMiICUKKyAgICAgICAgICAgICAgICAoY2hhbmdlbGlzdCwgbmV3VXNlcikpCisKKyAgICAgICAgYyA9IGNoYW5nZXNbMF0KKyAgICAgICAgaWYgY1snVXNlciddID09IG5ld1VzZXI6IHJldHVybiAgICMgbm90aGluZyB0byBkbworICAgICAgICBjWydVc2VyJ10gPSBuZXdVc2VyCisgICAgICAgIGlucHV0ID0gbWFyc2hhbC5kdW1wcyhjKQorCisgICAgICAgIHJlc3VsdCA9IHA0Q21kTGlzdCgiY2hhbmdlIC1mIC1pIiwgc3RkaW49aW5wdXQpCisgICAgICAgIGZvciByIGluIHJlc3VsdDoKKyAgICAgICAgICAgIGlmIHIuaGFzX2tleSgnY29kZScpOgorICAgICAgICAgICAgICAgIGlmIHJbJ2NvZGUnXSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICBkaWUoIkNvdWxkIG5vdCBtb2RpZnkgdXNlciBmaWVsZCBvZiBjaGFuZ2VsaXN0ICVzIHRvICVzOiVzIiAlIChjaGFuZ2VsaXN0LCBuZXdVc2VyLCByWydkYXRhJ10pKQorICAgICAgICAgICAgaWYgci5oYXNfa2V5KCdkYXRhJyk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlVwZGF0ZWQgdXNlciBmaWVsZCBmb3IgY2hhbmdlbGlzdCAlcyB0byAlcyIgJSAoY2hhbmdlbGlzdCwgbmV3VXNlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRpZSgiQ291bGQgbm90IG1vZGlmeSB1c2VyIGZpZWxkIG9mIGNoYW5nZWxpc3QgJXMgdG8gJXMiICUgKGNoYW5nZWxpc3QsIG5ld1VzZXIpKQorCisgICAgZGVmIGNhbkNoYW5nZUNoYW5nZWxpc3RzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIHA0IGFkbWluIG9yIHN1cGVyLXVzZXIgcGVybWlzc2lvbnMsIGVpdGhlciBvZgorICAgICAgICAjIHdoaWNoIGFyZSByZXF1aXJlZCB0byBtb2RpZnkgY2hhbmdlbGlzdHMuCisgICAgICAgIHJlc3VsdHMgPSBwNENtZExpc3QoWyJwcm90ZWN0cyIsIHNlbGYuZGVwb3RQYXRoXSkKKyAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIGlmIHIuaGFzX2tleSgncGVybScpOgorICAgICAgICAgICAgICAgIGlmIHJbJ3Blcm0nXSA9PSAnYWRtaW4nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIGlmIHJbJ3Blcm0nXSA9PSAnc3VwZXInOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIHByZXBhcmVTdWJtaXRUZW1wbGF0ZShzZWxmKToKKyAgICAgICAgIiIiUnVuICJwNCBjaGFuZ2UgLW8iIHRvIGdyYWIgYSBjaGFuZ2Ugc3BlY2lmaWNhdGlvbiB0ZW1wbGF0ZS4KKyAgICAgICAgICAgVGhpcyBkb2VzIG5vdCB1c2UgInA0IC1HIiwgYXMgaXQgaXMgbmljZSB0byBrZWVwIHRoZSBzdWJtaXNzaW9uCisgICAgICAgICAgIHRlbXBsYXRlIGluIG9yaWdpbmFsIG9yZGVyLCBzaW5jZSBhIGh1bWFuIG1pZ2h0IGVkaXQgaXQuCisKKyAgICAgICAgICAgUmVtb3ZlIGxpbmVzIGluIHRoZSBGaWxlcyBzZWN0aW9uIHRoYXQgc2hvdyBjaGFuZ2VzIHRvIGZpbGVzCisgICAgICAgICAgIG91dHNpZGUgdGhlIGRlcG90IHBhdGggd2UncmUgY29tbWl0dGluZyBpbnRvLiIiIgorCisgICAgICAgIHRlbXBsYXRlID0gIiIKKyAgICAgICAgaW5GaWxlc1NlY3Rpb24gPSBGYWxzZQorICAgICAgICBmb3IgbGluZSBpbiBwNF9yZWFkX3BpcGVfbGluZXMoWydjaGFuZ2UnLCAnLW8nXSk6CisgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCJcclxuIik6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXSArICJcbiIKKyAgICAgICAgICAgIGlmIGluRmlsZXNTZWN0aW9uOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiXHQiKToKKyAgICAgICAgICAgICAgICAgICAgIyBwYXRoIHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgdGFiCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBsaW5lWzE6XQorICAgICAgICAgICAgICAgICAgICBsYXN0VGFiID0gcGF0aC5yZmluZCgiXHQiKQorICAgICAgICAgICAgICAgICAgICBpZiBsYXN0VGFiICE9IC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhbOmxhc3RUYWJdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcDRQYXRoU3RhcnRzV2l0aChwYXRoLCBzZWxmLmRlcG90UGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbkZpbGVzU2VjdGlvbiA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiRmlsZXM6Iik6CisgICAgICAgICAgICAgICAgICAgIGluRmlsZXNTZWN0aW9uID0gVHJ1ZQorCisgICAgICAgICAgICB0ZW1wbGF0ZSArPSBsaW5lCisKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlCisKKyAgICBkZWYgZWRpdF90ZW1wbGF0ZShzZWxmLCB0ZW1wbGF0ZV9maWxlKToKKyAgICAgICAgIiIiSW52b2tlIHRoZSBlZGl0b3IgdG8gbGV0IHRoZSB1c2VyIGNoYW5nZSB0aGUgc3VibWlzc2lvbgorICAgICAgICAgICBtZXNzYWdlLiAgUmV0dXJuIHRydWUgaWYgb2theSB0byBjb250aW51ZSB3aXRoIHRoZSBzdWJtaXQuIiIiCisKKyAgICAgICAgIyBpZiBjb25maWd1cmVkIHRvIHNraXAgdGhlIGVkaXRpbmcgcGFydCwganVzdCBzdWJtaXQKKyAgICAgICAgaWYgZ2l0Q29uZmlnKCJnaXQtcDQuc2tpcFN1Ym1pdEVkaXQiKSA9PSAidHJ1ZSI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgbG9vayBhdCB0aGUgbW9kaWZpY2F0aW9uIHRpbWUsIHRvIGNoZWNrIGxhdGVyIGlmIHRoZSB1c2VyIHNhdmVkCisgICAgICAgICMgdGhlIGZpbGUKKyAgICAgICAgbXRpbWUgPSBvcy5zdGF0KHRlbXBsYXRlX2ZpbGUpLnN0X210aW1lCisKKyAgICAgICAgIyBpbnZva2UgdGhlIGVkaXRvcgorICAgICAgICBpZiBvcy5lbnZpcm9uLmhhc19rZXkoIlA0RURJVE9SIikgYW5kIChvcy5lbnZpcm9uLmdldCgiUDRFRElUT1IiKSAhPSAiIik6CisgICAgICAgICAgICBlZGl0b3IgPSBvcy5lbnZpcm9uLmdldCgiUDRFRElUT1IiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZWRpdG9yID0gcmVhZF9waXBlKCJnaXQgdmFyIEdJVF9FRElUT1IiKS5zdHJpcCgpCisgICAgICAgIHN5c3RlbShlZGl0b3IgKyAiICIgKyB0ZW1wbGF0ZV9maWxlKQorCisgICAgICAgICMgSWYgdGhlIGZpbGUgd2FzIG5vdCBzYXZlZCwgcHJvbXB0IHRvIHNlZSBpZiB0aGlzIHBhdGNoIHNob3VsZAorICAgICAgICAjIGJlIHNraXBwZWQuICBCdXQgc2tpcCB0aGlzIHZlcmlmaWNhdGlvbiBzdGVwIGlmIGNvbmZpZ3VyZWQgc28uCisgICAgICAgIGlmIGdpdENvbmZpZygiZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2siKSA9PSAidHJ1ZSI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgbW9kaWZpY2F0aW9uIHRpbWUgdXBkYXRlZCBtZWFucyB1c2VyIHNhdmVkIHRoZSBmaWxlCisgICAgICAgIGlmIG9zLnN0YXQodGVtcGxhdGVfZmlsZSkuc3RfbXRpbWUgPiBtdGltZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmF3X2lucHV0KCJTdWJtaXQgdGVtcGxhdGUgdW5jaGFuZ2VkLiBTdWJtaXQgYW55d2F5PyBbeV1lcywgW25dbyAoc2tpcCB0aGlzIHBhdGNoKSAiKQorICAgICAgICAgICAgaWYgcmVzcG9uc2UgPT0gJ3knOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiByZXNwb25zZSA9PSAnbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYXBwbHlDb21taXQoc2VsZiwgaWQpOgorICAgICAgICAiIiJBcHBseSBvbmUgY29tbWl0LCByZXR1cm4gVHJ1ZSBpZiBpdCBzdWNjZWVkZWQuIiIiCisKKyAgICAgICAgcHJpbnQgIkFwcGx5aW5nIiwgcmVhZF9waXBlKFsiZ2l0IiwgInNob3ciLCAiLXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWZvcm1hdD1mb3JtYXQ6JWggJXMiLCBpZF0pCisKKyAgICAgICAgKHA0VXNlciwgZ2l0RW1haWwpID0gc2VsZi5wNFVzZXJGb3JDb21taXQoaWQpCisKKyAgICAgICAgZGlmZiA9IHJlYWRfcGlwZV9saW5lcygiZ2l0IGRpZmYtdHJlZSAtciAlcyBcIiVzXlwiIFwiJXNcIiIgJSAoc2VsZi5kaWZmT3B0cywgaWQsIGlkKSkKKyAgICAgICAgZmlsZXNUb0FkZCA9IHNldCgpCisgICAgICAgIGZpbGVzVG9EZWxldGUgPSBzZXQoKQorICAgICAgICBlZGl0ZWRGaWxlcyA9IHNldCgpCisgICAgICAgIHB1cmVSZW5hbWVDb3B5ID0gc2V0KCkKKyAgICAgICAgZmlsZXNUb0NoYW5nZUV4ZWNCaXQgPSB7fQorCisgICAgICAgIGZvciBsaW5lIGluIGRpZmY6CisgICAgICAgICAgICBkaWZmID0gcGFyc2VEaWZmVHJlZUVudHJ5KGxpbmUpCisgICAgICAgICAgICBtb2RpZmllciA9IGRpZmZbJ3N0YXR1cyddCisgICAgICAgICAgICBwYXRoID0gZGlmZlsnc3JjJ10KKyAgICAgICAgICAgIGlmIG1vZGlmaWVyID09ICJNIjoKKyAgICAgICAgICAgICAgICBwNF9lZGl0KHBhdGgpCisgICAgICAgICAgICAgICAgaWYgaXNNb2RlRXhlY0NoYW5nZWQoZGlmZlsnc3JjX21vZGUnXSwgZGlmZlsnZHN0X21vZGUnXSk6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9DaGFuZ2VFeGVjQml0W3BhdGhdID0gZGlmZlsnZHN0X21vZGUnXQorICAgICAgICAgICAgICAgIGVkaXRlZEZpbGVzLmFkZChwYXRoKQorICAgICAgICAgICAgZWxpZiBtb2RpZmllciA9PSAiQSI6CisgICAgICAgICAgICAgICAgZmlsZXNUb0FkZC5hZGQocGF0aCkKKyAgICAgICAgICAgICAgICBmaWxlc1RvQ2hhbmdlRXhlY0JpdFtwYXRoXSA9IGRpZmZbJ2RzdF9tb2RlJ10KKyAgICAgICAgICAgICAgICBpZiBwYXRoIGluIGZpbGVzVG9EZWxldGU6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9EZWxldGUucmVtb3ZlKHBhdGgpCisgICAgICAgICAgICBlbGlmIG1vZGlmaWVyID09ICJEIjoKKyAgICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLmFkZChwYXRoKQorICAgICAgICAgICAgICAgIGlmIHBhdGggaW4gZmlsZXNUb0FkZDoKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNUb0FkZC5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgIGVsaWYgbW9kaWZpZXIgPT0gIkMiOgorICAgICAgICAgICAgICAgIHNyYywgZGVzdCA9IGRpZmZbJ3NyYyddLCBkaWZmWydkc3QnXQorICAgICAgICAgICAgICAgIHA0X2ludGVncmF0ZShzcmMsIGRlc3QpCisgICAgICAgICAgICAgICAgcHVyZVJlbmFtZUNvcHkuYWRkKGRlc3QpCisgICAgICAgICAgICAgICAgaWYgZGlmZlsnc3JjX3NoYTEnXSAhPSBkaWZmWydkc3Rfc2hhMSddOgorICAgICAgICAgICAgICAgICAgICBwNF9lZGl0KGRlc3QpCisgICAgICAgICAgICAgICAgICAgIHB1cmVSZW5hbWVDb3B5LmRpc2NhcmQoZGVzdCkKKyAgICAgICAgICAgICAgICBpZiBpc01vZGVFeGVjQ2hhbmdlZChkaWZmWydzcmNfbW9kZSddLCBkaWZmWydkc3RfbW9kZSddKToKKyAgICAgICAgICAgICAgICAgICAgcDRfZWRpdChkZXN0KQorICAgICAgICAgICAgICAgICAgICBwdXJlUmVuYW1lQ29weS5kaXNjYXJkKGRlc3QpCisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9DaGFuZ2VFeGVjQml0W2Rlc3RdID0gZGlmZlsnZHN0X21vZGUnXQorICAgICAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICAgICAgICAgIGVkaXRlZEZpbGVzLmFkZChkZXN0KQorICAgICAgICAgICAgZWxpZiBtb2RpZmllciA9PSAiUiI6CisgICAgICAgICAgICAgICAgc3JjLCBkZXN0ID0gZGlmZlsnc3JjJ10sIGRpZmZbJ2RzdCddCisgICAgICAgICAgICAgICAgaWYgc2VsZi5wNEhhc01vdmVDb21tYW5kOgorICAgICAgICAgICAgICAgICAgICBwNF9lZGl0KHNyYykgICAgICAgICMgc3JjIG11c3QgYmUgb3BlbiBiZWZvcmUgbW92ZQorICAgICAgICAgICAgICAgICAgICBwNF9tb3ZlKHNyYywgZGVzdCkgICMgb3BlbnMgZm9yIChtb3ZlL2RlbGV0ZSwgbW92ZS9hZGQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcDRfaW50ZWdyYXRlKHNyYywgZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgZGlmZlsnc3JjX3NoYTEnXSAhPSBkaWZmWydkc3Rfc2hhMSddOgorICAgICAgICAgICAgICAgICAgICAgICAgcDRfZWRpdChkZXN0KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHVyZVJlbmFtZUNvcHkuYWRkKGRlc3QpCisgICAgICAgICAgICAgICAgaWYgaXNNb2RlRXhlY0NoYW5nZWQoZGlmZlsnc3JjX21vZGUnXSwgZGlmZlsnZHN0X21vZGUnXSk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnA0SGFzTW92ZUNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwNF9lZGl0KGRlc3QpICAgIyB3aXRoIG1vdmU6IGFscmVhZHkgb3Blbiwgd3JpdGFibGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNUb0NoYW5nZUV4ZWNCaXRbZGVzdF0gPSBkaWZmWydkc3RfbW9kZSddCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucDRIYXNNb3ZlQ29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9EZWxldGUuYWRkKHNyYykKKyAgICAgICAgICAgICAgICBlZGl0ZWRGaWxlcy5hZGQoZGVzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGllKCJ1bmtub3duIG1vZGlmaWVyICVzIGZvciAlcyIgJSAobW9kaWZpZXIsIHBhdGgpKQorCisgICAgICAgIGRpZmZjbWQgPSAiZ2l0IGZvcm1hdC1wYXRjaCAtayAtLXN0ZG91dCBcIiVzXlwiLi5cIiVzXCIiICUgKGlkLCBpZCkKKyAgICAgICAgcGF0Y2hjbWQgPSBkaWZmY21kICsgIiB8IGdpdCBhcHBseSAiCisgICAgICAgIHRyeVBhdGNoQ21kID0gcGF0Y2hjbWQgKyAiLS1jaGVjayAtIgorICAgICAgICBhcHBseVBhdGNoQ21kID0gcGF0Y2hjbWQgKyAiLS1jaGVjayAtLWFwcGx5IC0iCisgICAgICAgIHBhdGNoX3N1Y2NlZWRlZCA9IFRydWUKKworICAgICAgICBpZiBvcy5zeXN0ZW0odHJ5UGF0Y2hDbWQpICE9IDA6CisgICAgICAgICAgICBmaXhlZF9yY3Nfa2V5d29yZHMgPSBGYWxzZQorICAgICAgICAgICAgcGF0Y2hfc3VjY2VlZGVkID0gRmFsc2UKKyAgICAgICAgICAgIHByaW50ICJVbmZvcnR1bmF0ZWx5IGFwcGx5aW5nIHRoZSBjaGFuZ2UgZmFpbGVkISIKKworICAgICAgICAgICAgIyBQYXRjaCBmYWlsZWQsIG1heWJlIGl0J3MganVzdCBSQ1Mga2V5d29yZCB3b2VzLiBMb29rIHRocm91Z2gKKyAgICAgICAgICAgICMgdGhlIHBhdGNoIHRvIHNlZSBpZiB0aGF0J3MgcG9zc2libGUuCisgICAgICAgICAgICBpZiBnaXRDb25maWcoImdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCIsIi0tYm9vbCIpID09ICJ0cnVlIjoKKyAgICAgICAgICAgICAgICBmaWxlID0gTm9uZQorICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBOb25lCisgICAgICAgICAgICAgICAga3dmaWxlcyA9IHt9CisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZWRpdGVkRmlsZXMgfCBmaWxlc1RvRGVsZXRlOgorICAgICAgICAgICAgICAgICAgICAjIGRpZCB0aGlzIGZpbGUncyBkZWx0YSBjb250YWluIFJDUyBrZXl3b3Jkcz8KKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHA0X2tleXdvcmRzX3JlZ2V4cF9mb3JfZmlsZShmaWxlKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgZmlsZSBpcyBhIHBvc3NpYmlsaXR5Li4ubG9vayBmb3IgUkNTIGtleXdvcmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhwID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5WRVJCT1NFKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9waXBlX2xpbmVzKFsiZ2l0IiwgImRpZmYiLCAiJXNeLi4lcyIgJSAoaWQsIGlkKSwgZmlsZV0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlZ2V4cC5zZWFyY2gobGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiZ290IGtleXdvcmQgbWF0Y2ggb24gJXMgaW4gJXMgaW4gJXMiICUgKHBhdHRlcm4sIGxpbmUsIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3ZmlsZXNbZmlsZV0gPSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBrd2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgInphcHBpbmcgJXMgd2l0aCAlcyIgJSAobGluZSxwYXR0ZXJuKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGNoUkNTS2V5d29yZHMoZmlsZSwga3dmaWxlc1tmaWxlXSkKKyAgICAgICAgICAgICAgICAgICAgZml4ZWRfcmNzX2tleXdvcmRzID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBmaXhlZF9yY3Nfa2V5d29yZHM6CisgICAgICAgICAgICAgICAgcHJpbnQgIlJldHJ5aW5nIHRoZSBwYXRjaCB3aXRoIFJDUyBrZXl3b3JkcyBjbGVhbmVkIHVwIgorICAgICAgICAgICAgICAgIGlmIG9zLnN5c3RlbSh0cnlQYXRjaENtZCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hfc3VjY2VlZGVkID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBwYXRjaF9zdWNjZWVkZWQ6CisgICAgICAgICAgICBmb3IgZiBpbiBlZGl0ZWRGaWxlczoKKyAgICAgICAgICAgICAgICBwNF9yZXZlcnQoZikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICMKKyAgICAgICAgIyBBcHBseSB0aGUgcGF0Y2ggZm9yIHJlYWwsIGFuZCBkbyBhZGQvZGVsZXRlLyt4IGhhbmRsaW5nLgorICAgICAgICAjCisgICAgICAgIHN5c3RlbShhcHBseVBhdGNoQ21kKQorCisgICAgICAgIGZvciBmIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICBwNF9hZGQoZikKKyAgICAgICAgZm9yIGYgaW4gZmlsZXNUb0RlbGV0ZToKKyAgICAgICAgICAgIHA0X3JldmVydChmKQorICAgICAgICAgICAgcDRfZGVsZXRlKGYpCisKKyAgICAgICAgIyBTZXQvY2xlYXIgZXhlY3V0YWJsZSBiaXRzCisgICAgICAgIGZvciBmIGluIGZpbGVzVG9DaGFuZ2VFeGVjQml0LmtleXMoKToKKyAgICAgICAgICAgIG1vZGUgPSBmaWxlc1RvQ2hhbmdlRXhlY0JpdFtmXQorICAgICAgICAgICAgc2V0UDRFeGVjQml0KGYsIG1vZGUpCisKKyAgICAgICAgIworICAgICAgICAjIEJ1aWxkIHA0IGNoYW5nZSBkZXNjcmlwdGlvbiwgc3RhcnRpbmcgd2l0aCB0aGUgY29udGVudHMKKyAgICAgICAgIyBvZiB0aGUgZ2l0IGNvbW1pdCBtZXNzYWdlLgorICAgICAgICAjCisgICAgICAgIGxvZ01lc3NhZ2UgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQoaWQpCisgICAgICAgIGxvZ01lc3NhZ2UgPSBsb2dNZXNzYWdlLnN0cmlwKCkKKyAgICAgICAgKGxvZ01lc3NhZ2UsIGpvYnMpID0gc2VsZi5zZXBhcmF0ZV9qb2JzX2Zyb21fZGVzY3JpcHRpb24obG9nTWVzc2FnZSkKKworICAgICAgICB0ZW1wbGF0ZSA9IHNlbGYucHJlcGFyZVN1Ym1pdFRlbXBsYXRlKCkKKyAgICAgICAgc3VibWl0VGVtcGxhdGUgPSBzZWxmLnByZXBhcmVMb2dNZXNzYWdlKHRlbXBsYXRlLCBsb2dNZXNzYWdlLCBqb2JzKQorCisgICAgICAgIGlmIHNlbGYucHJlc2VydmVVc2VyOgorICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSArPSAiXG4jIyMjIyMjIyBBY3R1YWwgdXNlciAlcywgbW9kaWZpZWQgYWZ0ZXIgY29tbWl0XG4iICUgcDRVc2VyCisKKyAgICAgICAgaWYgc2VsZi5jaGVja0F1dGhvcnNoaXAgYW5kIG5vdCBzZWxmLnA0VXNlcklzTWUocDRVc2VyKToKKyAgICAgICAgICAgIHN1Ym1pdFRlbXBsYXRlICs9ICIjIyMjIyMjIyBnaXQgYXV0aG9yICVzIGRvZXMgbm90IG1hdGNoIHlvdXIgcDQgYWNjb3VudC5cbiIgJSBnaXRFbWFpbAorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gIiMjIyMjIyMjIFVzZSBvcHRpb24gLS1wcmVzZXJ2ZS11c2VyIHRvIG1vZGlmeSBhdXRob3JzaGlwLlxuIgorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gIiMjIyMjIyMjIFZhcmlhYmxlIGdpdC1wNC5za2lwVXNlck5hbWVDaGVjayBoaWRlcyB0aGlzIG1lc3NhZ2UuXG4iCisKKyAgICAgICAgc2VwYXJhdG9yTGluZSA9ICIjIyMjIyMjIyBldmVyeXRoaW5nIGJlbG93IHRoaXMgbGluZSBpcyBqdXN0IHRoZSBkaWZmICMjIyMjIyNcbiIKKworICAgICAgICAjIGRpZmYKKyAgICAgICAgaWYgb3MuZW52aXJvbi5oYXNfa2V5KCJQNERJRkYiKToKKyAgICAgICAgICAgIGRlbChvcy5lbnZpcm9uWyJQNERJRkYiXSkKKyAgICAgICAgZGlmZiA9ICIiCisgICAgICAgIGZvciBlZGl0ZWRGaWxlIGluIGVkaXRlZEZpbGVzOgorICAgICAgICAgICAgZGlmZiArPSBwNF9yZWFkX3BpcGUoWydkaWZmJywgJy1kdScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmRfZW5jb2RlKGVkaXRlZEZpbGUpXSkKKworICAgICAgICAjIG5ldyBmaWxlIGRpZmYKKyAgICAgICAgbmV3ZGlmZiA9ICIiCisgICAgICAgIGZvciBuZXdGaWxlIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICBuZXdkaWZmICs9ICI9PT09IG5ldyBmaWxlID09PT1cbiIKKyAgICAgICAgICAgIG5ld2RpZmYgKz0gIi0tLSAvZGV2L251bGxcbiIKKyAgICAgICAgICAgIG5ld2RpZmYgKz0gIisrKyAlc1xuIiAlIG5ld0ZpbGUKKyAgICAgICAgICAgIGYgPSBvcGVuKG5ld0ZpbGUsICJyIikKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgbmV3ZGlmZiArPSAiKyIgKyBsaW5lCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIGNoYW5nZSBkZXNjcmlwdGlvbiBmaWxlOiBzdWJtaXRUZW1wbGF0ZSwgc2VwYXJhdG9yTGluZSwgZGlmZiwgbmV3ZGlmZgorICAgICAgICAoaGFuZGxlLCBmaWxlTmFtZSkgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgdG1wRmlsZSA9IG9zLmZkb3BlbihoYW5kbGUsICJ3KyIpCisgICAgICAgIGlmIHNlbGYuaXNXaW5kb3dzOgorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgPSBzdWJtaXRUZW1wbGF0ZS5yZXBsYWNlKCJcbiIsICJcclxuIikKKyAgICAgICAgICAgIHNlcGFyYXRvckxpbmUgPSBzZXBhcmF0b3JMaW5lLnJlcGxhY2UoIlxuIiwgIlxyXG4iKQorICAgICAgICAgICAgbmV3ZGlmZiA9IG5ld2RpZmYucmVwbGFjZSgiXG4iLCAiXHJcbiIpCisgICAgICAgIHRtcEZpbGUud3JpdGUoc3VibWl0VGVtcGxhdGUgKyBzZXBhcmF0b3JMaW5lICsgZGlmZiArIG5ld2RpZmYpCisgICAgICAgIHRtcEZpbGUuY2xvc2UoKQorCisgICAgICAgIGlmIHNlbGYucHJlcGFyZV9wNF9vbmx5OgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBMZWF2ZSB0aGUgcDQgdHJlZSBwcmVwYXJlZCwgYW5kIHRoZSBzdWJtaXQgdGVtcGxhdGUgYXJvdW5kCisgICAgICAgICAgICAjIGFuZCBsZXQgdGhlIHVzZXIgZGVjaWRlIHdoYXQgdG8gZG8gbmV4dAorICAgICAgICAgICAgIworICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgIHByaW50ICJQNCB3b3Jrc3BhY2UgcHJlcGFyZWQgZm9yIHN1Ym1pc3Npb24uIgorICAgICAgICAgICAgcHJpbnQgIlRvIHN1Ym1pdCBvciByZXZlcnQsIGdvIHRvIGNsaWVudCB3b3Jrc3BhY2UiCisgICAgICAgICAgICBwcmludCAiICAiICsgc2VsZi5jbGllbnRQYXRoCisgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgcHJpbnQgIlRvIHN1Ym1pdCwgdXNlIFwicDQgc3VibWl0XCIgdG8gd3JpdGUgYSBuZXcgZGVzY3JpcHRpb24sIgorICAgICAgICAgICAgcHJpbnQgIm9yIFwicDQgc3VibWl0IC1pICVzXCIgdG8gdXNlIHRoZSBvbmUgcHJlcGFyZWQgYnkiIFwKKyAgICAgICAgICAgICAgICAgICIgXCJnaXQgcDRcIi4iICUgZmlsZU5hbWUKKyAgICAgICAgICAgIHByaW50ICJZb3UgY2FuIGRlbGV0ZSB0aGUgZmlsZSBcIiVzXCIgd2hlbiBmaW5pc2hlZC4iICUgZmlsZU5hbWUKKworICAgICAgICAgICAgaWYgc2VsZi5wcmVzZXJ2ZVVzZXIgYW5kIHA0VXNlciBhbmQgbm90IHNlbGYucDRVc2VySXNNZShwNFVzZXIpOgorICAgICAgICAgICAgICAgIHByaW50ICJUbyBwcmVzZXJ2ZSBjaGFuZ2Ugb3duZXJzaGlwIGJ5IHVzZXIgJXMsIHlvdSBtdXN0XG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAiZG8gXCJwNCBjaGFuZ2UgLWYgPGNoYW5nZT5cIiBhZnRlciBzdWJtaXR0aW5nIGFuZFxuIiBcCisgICAgICAgICAgICAgICAgICAgICAgImVkaXQgdGhlIFVzZXIgZmllbGQuIgorICAgICAgICAgICAgaWYgcHVyZVJlbmFtZUNvcHk6CisgICAgICAgICAgICAgICAgcHJpbnQgIkFmdGVyIHN1Ym1pdHRpbmcsIHJlbmFtZWQgZmlsZXMgbXVzdCBiZSByZS1zeW5jZWQuIgorICAgICAgICAgICAgICAgIHByaW50ICJJbnZva2UgXCJwNCBzeW5jIC1mXCIgb24gZWFjaCBvZiB0aGVzZSBmaWxlczoiCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gcHVyZVJlbmFtZUNvcHk6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIgICIgKyBmCisKKyAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICBwcmludCAiVG8gcmV2ZXJ0IHRoZSBjaGFuZ2VzLCB1c2UgXCJwNCByZXZlcnQgLi4uXCIsIGFuZCBkZWxldGUiCisgICAgICAgICAgICBwcmludCAidGhlIHN1Ym1pdCB0ZW1wbGF0ZSBmaWxlIFwiJXNcIiIgJSBmaWxlTmFtZQorICAgICAgICAgICAgaWYgZmlsZXNUb0FkZDoKKyAgICAgICAgICAgICAgICBwcmludCAiU2luY2UgdGhlIGNvbW1pdCBhZGRzIG5ldyBmaWxlcywgdGhleSBtdXN0IGJlIGRlbGV0ZWQ6IgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIgICIgKyBmCisgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjCisgICAgICAgICMgTGV0IHRoZSB1c2VyIGVkaXQgdGhlIGNoYW5nZSBkZXNjcmlwdGlvbiwgdGhlbiBzdWJtaXQgaXQuCisgICAgICAgICMKKyAgICAgICAgaWYgc2VsZi5lZGl0X3RlbXBsYXRlKGZpbGVOYW1lKToKKyAgICAgICAgICAgICMgcmVhZCB0aGUgZWRpdGVkIG1lc3NhZ2UgYW5kIHN1Ym1pdAorICAgICAgICAgICAgcmV0ID0gVHJ1ZQorICAgICAgICAgICAgdG1wRmlsZSA9IG9wZW4oZmlsZU5hbWUsICJyYiIpCisgICAgICAgICAgICBtZXNzYWdlID0gdG1wRmlsZS5yZWFkKCkKKyAgICAgICAgICAgIHRtcEZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgPSBtZXNzYWdlWzptZXNzYWdlLmluZGV4KHNlcGFyYXRvckxpbmUpXQorICAgICAgICAgICAgaWYgc2VsZi5pc1dpbmRvd3M6CisgICAgICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgPSBzdWJtaXRUZW1wbGF0ZS5yZXBsYWNlKCJcclxuIiwgIlxuIikKKyAgICAgICAgICAgIHA0X3dyaXRlX3BpcGUoWydzdWJtaXQnLCAnLWknXSwgc3VibWl0VGVtcGxhdGUpCisKKyAgICAgICAgICAgIGlmIHNlbGYucHJlc2VydmVVc2VyOgorICAgICAgICAgICAgICAgIGlmIHA0VXNlcjoKKyAgICAgICAgICAgICAgICAgICAgIyBHZXQgbGFzdCBjaGFuZ2VsaXN0IG51bWJlci4gQ2Fubm90IGVhc2lseSBnZXQgaXQgZnJvbQorICAgICAgICAgICAgICAgICAgICAjIHRoZSBzdWJtaXQgY29tbWFuZCBvdXRwdXQgYXMgdGhlIG91dHB1dCBpcworICAgICAgICAgICAgICAgICAgICAjIHVubWFyc2hhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlbGlzdCA9IHNlbGYubGFzdFA0Q2hhbmdlbGlzdCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kaWZ5Q2hhbmdlbGlzdFVzZXIoY2hhbmdlbGlzdCwgcDRVc2VyKQorCisgICAgICAgICAgICAjIFRoZSByZW5hbWUvY29weSBoYXBwZW5lZCBieSBhcHBseWluZyBhIHBhdGNoIHRoYXQgY3JlYXRlZCBhCisgICAgICAgICAgICAjIG5ldyBmaWxlLiAgVGhpcyBsZWF2ZXMgaXQgd3JpdGFibGUsIHdoaWNoIGNvbmZ1c2VzIHA0LgorICAgICAgICAgICAgZm9yIGYgaW4gcHVyZVJlbmFtZUNvcHk6CisgICAgICAgICAgICAgICAgcDRfc3luYyhmLCAiLWYiKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHNraXAgdGhpcyBwYXRjaAorICAgICAgICAgICAgcmV0ID0gRmFsc2UKKyAgICAgICAgICAgIHByaW50ICJTdWJtaXNzaW9uIGNhbmNlbGxlZCwgdW5kb2luZyBwNCBjaGFuZ2VzLiIKKyAgICAgICAgICAgIGZvciBmIGluIGVkaXRlZEZpbGVzOgorICAgICAgICAgICAgICAgIHA0X3JldmVydChmKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXNUb0FkZDoKKyAgICAgICAgICAgICAgICBwNF9yZXZlcnQoZikKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZikKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzVG9EZWxldGU6CisgICAgICAgICAgICAgICAgcDRfcmV2ZXJ0KGYpCisKKyAgICAgICAgb3MucmVtb3ZlKGZpbGVOYW1lKQorICAgICAgICByZXR1cm4gcmV0CisKKyAgICAjIEV4cG9ydCBnaXQgdGFncyBhcyBwNCBsYWJlbHMuIENyZWF0ZSBhIHA0IGxhYmVsIGFuZCB0aGVuIHRhZworICAgICMgd2l0aCB0aGF0LgorICAgIGRlZiBleHBvcnRHaXRUYWdzKHNlbGYsIGdpdFRhZ3MpOgorICAgICAgICB2YWxpZExhYmVsUmVnZXhwID0gZ2l0Q29uZmlnKCJnaXQtcDQubGFiZWxFeHBvcnRSZWdleHAiKQorICAgICAgICBpZiBsZW4odmFsaWRMYWJlbFJlZ2V4cCkgPT0gMDoKKyAgICAgICAgICAgIHZhbGlkTGFiZWxSZWdleHAgPSBkZWZhdWx0TGFiZWxSZWdleHAKKyAgICAgICAgbSA9IHJlLmNvbXBpbGUodmFsaWRMYWJlbFJlZ2V4cCkKKworICAgICAgICBmb3IgbmFtZSBpbiBnaXRUYWdzOgorCisgICAgICAgICAgICBpZiBub3QgbS5tYXRjaChuYW1lKToKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAidGFnICVzIGRvZXMgbm90IG1hdGNoIHJlZ2V4cCAlcyIgJSAobmFtZSwgdmFsaWRMYWJlbFJlZ2V4cCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIEdldCB0aGUgcDQgY29tbWl0IHRoaXMgY29ycmVzcG9uZHMgdG8KKyAgICAgICAgICAgIGxvZ01lc3NhZ2UgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQobmFtZSkKKyAgICAgICAgICAgIHZhbHVlcyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2dNZXNzYWdlKQorCisgICAgICAgICAgICBpZiBub3QgdmFsdWVzLmhhc19rZXkoJ2NoYW5nZScpOgorICAgICAgICAgICAgICAgICMgYSB0YWcgcG9pbnRpbmcgdG8gc29tZXRoaW5nIG5vdCBzZW50IHRvIHA0OyBpZ25vcmUKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiZ2l0IHRhZyAlcyBkb2VzIG5vdCBnaXZlIGEgcDQgY29tbWl0IiAlIG5hbWUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjaGFuZ2VsaXN0ID0gdmFsdWVzWydjaGFuZ2UnXQorCisgICAgICAgICAgICAjIEdldCB0aGUgdGFnIGRldGFpbHMuCisgICAgICAgICAgICBpbkhlYWRlciA9IFRydWUKKyAgICAgICAgICAgIGlzQW5ub3RhdGVkID0gRmFsc2UKKyAgICAgICAgICAgIGJvZHkgPSBbXQorICAgICAgICAgICAgZm9yIGwgaW4gcmVhZF9waXBlX2xpbmVzKFsiZ2l0IiwgImNhdC1maWxlIiwgIi1wIiwgbmFtZV0pOgorICAgICAgICAgICAgICAgIGwgPSBsLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBpbkhlYWRlcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2gocid0YWdccysnLCBsKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5ub3RhdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbGlmIHJlLm1hdGNoKHInXHMqJCcsIGwpOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5IZWFkZXIgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChsKQorCisgICAgICAgICAgICBpZiBub3QgaXNBbm5vdGF0ZWQ6CisgICAgICAgICAgICAgICAgYm9keSA9IFsibGlnaHR3ZWlnaHQgdGFnIGltcG9ydGVkIGJ5IGdpdCBwNFxuIl0KKworICAgICAgICAgICAgIyBDcmVhdGUgdGhlIGxhYmVsIC0gdXNlIHRoZSBzYW1lIHZpZXcgYXMgdGhlIGNsaWVudCBzcGVjIHdlIGFyZSB1c2luZworICAgICAgICAgICAgY2xpZW50U3BlYyA9IGdldENsaWVudFNwZWMoKQorCisgICAgICAgICAgICBsYWJlbFRlbXBsYXRlICA9ICJMYWJlbDogJXNcbiIgJSBuYW1lCisgICAgICAgICAgICBsYWJlbFRlbXBsYXRlICs9ICJEZXNjcmlwdGlvbjpcbiIKKyAgICAgICAgICAgIGZvciBiIGluIGJvZHk6CisgICAgICAgICAgICAgICAgbGFiZWxUZW1wbGF0ZSArPSAiXHQiICsgYiArICJcbiIKKyAgICAgICAgICAgIGxhYmVsVGVtcGxhdGUgKz0gIlZpZXc6XG4iCisgICAgICAgICAgICBmb3IgbWFwcGluZyBpbiBjbGllbnRTcGVjLm1hcHBpbmdzOgorICAgICAgICAgICAgICAgIGxhYmVsVGVtcGxhdGUgKz0gIlx0JXNcbiIgJSBtYXBwaW5nLmRlcG90X3NpZGUucGF0aAorCisgICAgICAgICAgICBpZiBzZWxmLmRyeV9ydW46CisgICAgICAgICAgICAgICAgcHJpbnQgIldvdWxkIGNyZWF0ZSBwNCBsYWJlbCAlcyBmb3IgdGFnIiAlIG5hbWUKKyAgICAgICAgICAgIGVsaWYgc2VsZi5wcmVwYXJlX3A0X29ubHk6CisgICAgICAgICAgICAgICAgcHJpbnQgIk5vdCBjcmVhdGluZyBwNCBsYWJlbCAlcyBmb3IgdGFnIGR1ZSB0byBvcHRpb24iIFwKKyAgICAgICAgICAgICAgICAgICAgICAiIC0tcHJlcGFyZS1wNC1vbmx5IiAlIG5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcDRfd3JpdGVfcGlwZShbImxhYmVsIiwgIi1pIl0sIGxhYmVsVGVtcGxhdGUpCisKKyAgICAgICAgICAgICAgICAjIFVzZSB0aGUgbGFiZWwKKyAgICAgICAgICAgICAgICBwNF9zeXN0ZW0oWyJ0YWciLCAiLWwiLCBuYW1lXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsiJXNAJXMiICUgKG1hcHBpbmcuZGVwb3Rfc2lkZS5wYXRoLCBjaGFuZ2VsaXN0KSBmb3IgbWFwcGluZyBpbiBjbGllbnRTcGVjLm1hcHBpbmdzXSkKKworICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJjcmVhdGVkIHA0IGxhYmVsIGZvciB0YWcgJXMiICUgbmFtZQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICBzZWxmLm1hc3RlciA9IGN1cnJlbnRHaXRCcmFuY2goKQorICAgICAgICAgICAgaWYgbGVuKHNlbGYubWFzdGVyKSA9PSAwIG9yIG5vdCBnaXRCcmFuY2hFeGlzdHMoInJlZnMvaGVhZHMvJXMiICUgc2VsZi5tYXN0ZXIpOgorICAgICAgICAgICAgICAgIGRpZSgiRGV0ZWN0aW5nIGN1cnJlbnQgZ2l0IGJyYW5jaCBmYWlsZWQhIikKKyAgICAgICAgZWxpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgIHNlbGYubWFzdGVyID0gYXJnc1swXQorICAgICAgICAgICAgaWYgbm90IGJyYW5jaEV4aXN0cyhzZWxmLm1hc3Rlcik6CisgICAgICAgICAgICAgICAgZGllKCJCcmFuY2ggJXMgZG9lcyBub3QgZXhpc3QiICUgc2VsZi5tYXN0ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBhbGxvd1N1Ym1pdCA9IGdpdENvbmZpZygiZ2l0LXA0LmFsbG93U3VibWl0IikKKyAgICAgICAgaWYgbGVuKGFsbG93U3VibWl0KSA+IDAgYW5kIG5vdCBzZWxmLm1hc3RlciBpbiBhbGxvd1N1Ym1pdC5zcGxpdCgiLCIpOgorICAgICAgICAgICAgZGllKCIlcyBpcyBub3QgaW4gZ2l0LXA0LmFsbG93U3VibWl0IiAlIHNlbGYubWFzdGVyKQorCisgICAgICAgIFt1cHN0cmVhbSwgc2V0dGluZ3NdID0gZmluZFVwc3RyZWFtQnJhbmNoUG9pbnQoKQorICAgICAgICBzZWxmLmRlcG90UGF0aCA9IHNldHRpbmdzWydkZXBvdC1wYXRocyddWzBdCisgICAgICAgIGlmIGxlbihzZWxmLm9yaWdpbikgPT0gMDoKKyAgICAgICAgICAgIHNlbGYub3JpZ2luID0gdXBzdHJlYW0KKworICAgICAgICBpZiBzZWxmLnByZXNlcnZlVXNlcjoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNhbkNoYW5nZUNoYW5nZWxpc3RzKCk6CisgICAgICAgICAgICAgICAgZGllKCJDYW5ub3QgcHJlc2VydmUgdXNlciBuYW1lcyB3aXRob3V0IHA0IHN1cGVyLXVzZXIgb3IgYWRtaW4gcGVybWlzc2lvbnMiKQorCisgICAgICAgICMgaWYgbm90IHNldCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRyeSB0aGUgY29uZmlnIGZpbGUKKyAgICAgICAgaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciBpcyBOb25lOgorICAgICAgICAgICAgdmFsID0gZ2l0Q29uZmlnKCJnaXQtcDQuY29uZmxpY3QiKQorICAgICAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgICAgIGlmIHZhbCBub3QgaW4gc2VsZi5jb25mbGljdF9iZWhhdmlvcl9jaG9pY2VzOgorICAgICAgICAgICAgICAgICAgICBkaWUoIkludmFsaWQgdmFsdWUgJyVzJyBmb3IgY29uZmlnIGdpdC1wNC5jb25mbGljdCIgJSB2YWwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbCA9ICJhc2siCisgICAgICAgICAgICBzZWxmLmNvbmZsaWN0X2JlaGF2aW9yID0gdmFsCisKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIk9yaWdpbiBicmFuY2ggaXMgIiArIHNlbGYub3JpZ2luCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZGVwb3RQYXRoKSA9PSAwOgorICAgICAgICAgICAgcHJpbnQgIkludGVybmFsIGVycm9yOiBjYW5ub3QgbG9jYXRlIHBlcmZvcmNlIGRlcG90IHBhdGggZnJvbSBleGlzdGluZyBicmFuY2hlcyIKKyAgICAgICAgICAgIHN5cy5leGl0KDEyOCkKKworICAgICAgICBzZWxmLnVzZUNsaWVudFNwZWMgPSBGYWxzZQorICAgICAgICBpZiBnaXRDb25maWcoImdpdC1wNC51c2VjbGllbnRzcGVjIiwgIi0tYm9vbCIpID09ICJ0cnVlIjoKKyAgICAgICAgICAgIHNlbGYudXNlQ2xpZW50U3BlYyA9IFRydWUKKyAgICAgICAgaWYgc2VsZi51c2VDbGllbnRTcGVjOgorICAgICAgICAgICAgc2VsZi5jbGllbnRTcGVjRGlycyA9IGdldENsaWVudFNwZWMoKQorCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYzoKKyAgICAgICAgICAgICMgYWxsIGZpbGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgY2xpZW50IHNwZWMKKyAgICAgICAgICAgIHNlbGYuY2xpZW50UGF0aCA9IGdldENsaWVudFJvb3QoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jbGllbnRQYXRoID0gcDRXaGVyZShzZWxmLmRlcG90UGF0aCkKKworICAgICAgICBpZiBzZWxmLmNsaWVudFBhdGggPT0gIiI6CisgICAgICAgICAgICBkaWUoIkVycm9yOiBDYW5ub3QgbG9jYXRlIHBlcmZvcmNlIGNoZWNrb3V0IG9mICVzIGluIGNsaWVudCB2aWV3IiAlIHNlbGYuZGVwb3RQYXRoKQorCisgICAgICAgIHByaW50ICJQZXJmb3JjZSBjaGVja291dCBmb3IgZGVwb3QgcGF0aCAlcyBsb2NhdGVkIGF0ICVzIiAlIChzZWxmLmRlcG90UGF0aCwgc2VsZi5jbGllbnRQYXRoKQorICAgICAgICBzZWxmLm9sZFdvcmtpbmdEaXJlY3RvcnkgPSBvcy5nZXRjd2QoKQorCisgICAgICAgICMgZW5zdXJlIHRoZSBjbGllbnRQYXRoIGV4aXN0cworICAgICAgICBuZXdfY2xpZW50X2RpciA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmNsaWVudFBhdGgpOgorICAgICAgICAgICAgbmV3X2NsaWVudF9kaXIgPSBUcnVlCisgICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLmNsaWVudFBhdGgpCisKKyAgICAgICAgY2hkaXIoc2VsZi5jbGllbnRQYXRoKQorICAgICAgICBpZiBzZWxmLmRyeV9ydW46CisgICAgICAgICAgICBwcmludCAiV291bGQgc3luY2hyb25pemUgcDQgY2hlY2tvdXQgaW4gJXMiICUgc2VsZi5jbGllbnRQYXRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAiU3luY2hyb25pemluZyBwNCBjaGVja291dC4uLiIKKyAgICAgICAgICAgIGlmIG5ld19jbGllbnRfZGlyOgorICAgICAgICAgICAgICAgICMgb2xkIG9uZSB3YXMgZGVzdHJveWVkLCBhbmQgbWF5YmUgbm9ib2R5IHRvbGQgcDQKKyAgICAgICAgICAgICAgICBwNF9zeW5jKCIuLi4iLCAiLWYiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwNF9zeW5jKCIuLi4iKQorICAgICAgICBzZWxmLmNoZWNrKCkKKworICAgICAgICBjb21taXRzID0gW10KKyAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9waXBlX2xpbmVzKCJnaXQgcmV2LWxpc3QgLS1uby1tZXJnZXMgJXMuLiVzIiAlIChzZWxmLm9yaWdpbiwgc2VsZi5tYXN0ZXIpKToKKyAgICAgICAgICAgIGNvbW1pdHMuYXBwZW5kKGxpbmUuc3RyaXAoKSkKKyAgICAgICAgY29tbWl0cy5yZXZlcnNlKCkKKworICAgICAgICBpZiBzZWxmLnByZXNlcnZlVXNlciBvciAoZ2l0Q29uZmlnKCJnaXQtcDQuc2tpcFVzZXJOYW1lQ2hlY2siKSA9PSAidHJ1ZSIpOgorICAgICAgICAgICAgc2VsZi5jaGVja0F1dGhvcnNoaXAgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jaGVja0F1dGhvcnNoaXAgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5wcmVzZXJ2ZVVzZXI6CisgICAgICAgICAgICBzZWxmLmNoZWNrVmFsaWRQNFVzZXJzKGNvbW1pdHMpCisKKyAgICAgICAgIworICAgICAgICAjIEJ1aWxkIHVwIGEgc2V0IG9mIG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIGRpZmYgd2hlbgorICAgICAgICAjIHN1Ym1pdHRpbmcgZWFjaCBjb21taXQgdG8gcDQuCisgICAgICAgICMKKyAgICAgICAgaWYgc2VsZi5kZXRlY3RSZW5hbWVzOgorICAgICAgICAgICAgIyBjb21tYW5kLWxpbmUgLU0gYXJnCisgICAgICAgICAgICBzZWxmLmRpZmZPcHRzID0gIi1NIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJZiBub3QgZXhwbGljaXRseSBzZXQgY2hlY2sgdGhlIGNvbmZpZyB2YXJpYWJsZQorICAgICAgICAgICAgZGV0ZWN0UmVuYW1lcyA9IGdpdENvbmZpZygiZ2l0LXA0LmRldGVjdFJlbmFtZXMiKQorCisgICAgICAgICAgICBpZiBkZXRlY3RSZW5hbWVzLmxvd2VyKCkgPT0gImZhbHNlIiBvciBkZXRlY3RSZW5hbWVzID09ICIiOgorICAgICAgICAgICAgICAgIHNlbGYuZGlmZk9wdHMgPSAiIgorICAgICAgICAgICAgZWxpZiBkZXRlY3RSZW5hbWVzLmxvd2VyKCkgPT0gInRydWUiOgorICAgICAgICAgICAgICAgIHNlbGYuZGlmZk9wdHMgPSAiLU0iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZGlmZk9wdHMgPSAiLU0lcyIgJSBkZXRlY3RSZW5hbWVzCisKKyAgICAgICAgIyBubyBjb21tYW5kLWxpbmUgYXJnIGZvciAtQyBvciAtLWZpbmQtY29waWVzLWhhcmRlciwganVzdAorICAgICAgICAjIGNvbmZpZyB2YXJpYWJsZXMKKyAgICAgICAgZGV0ZWN0Q29waWVzID0gZ2l0Q29uZmlnKCJnaXQtcDQuZGV0ZWN0Q29waWVzIikKKyAgICAgICAgaWYgZGV0ZWN0Q29waWVzLmxvd2VyKCkgPT0gImZhbHNlIiBvciBkZXRlY3RDb3BpZXMgPT0gIiI6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsaWYgZGV0ZWN0Q29waWVzLmxvd2VyKCkgPT0gInRydWUiOgorICAgICAgICAgICAgc2VsZi5kaWZmT3B0cyArPSAiIC1DIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kaWZmT3B0cyArPSAiIC1DJXMiICUgZGV0ZWN0Q29waWVzCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnKCJnaXQtcDQuZGV0ZWN0Q29waWVzSGFyZGVyIiwgIi0tYm9vbCIpID09ICJ0cnVlIjoKKyAgICAgICAgICAgIHNlbGYuZGlmZk9wdHMgKz0gIiAtLWZpbmQtY29waWVzLWhhcmRlciIKKworICAgICAgICAjCisgICAgICAgICMgQXBwbHkgdGhlIGNvbW1pdHMsIG9uZSBhdCBhIHRpbWUuICBPbiBmYWlsdXJlLCBhc2sgaWYgc2hvdWxkCisgICAgICAgICMgY29udGludWUgdG8gdHJ5IHRoZSByZXN0IG9mIHRoZSBwYXRjaGVzLCBvciBxdWl0LgorICAgICAgICAjCisgICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgIHByaW50ICJXb3VsZCBhcHBseSIKKyAgICAgICAgYXBwbGllZCA9IFtdCisgICAgICAgIGxhc3QgPSBsZW4oY29tbWl0cykgLSAxCisgICAgICAgIGZvciBpLCBjb21taXQgaW4gZW51bWVyYXRlKGNvbW1pdHMpOgorICAgICAgICAgICAgaWYgc2VsZi5kcnlfcnVuOgorICAgICAgICAgICAgICAgIHByaW50ICIgIiwgcmVhZF9waXBlKFsiZ2l0IiwgInNob3ciLCAiLXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3JtYXQ9Zm9ybWF0OiVoICVzIiwgY29tbWl0XSkKKyAgICAgICAgICAgICAgICBvayA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb2sgPSBzZWxmLmFwcGx5Q29tbWl0KGNvbW1pdCkKKyAgICAgICAgICAgIGlmIG9rOgorICAgICAgICAgICAgICAgIGFwcGxpZWQuYXBwZW5kKGNvbW1pdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5wcmVwYXJlX3A0X29ubHkgYW5kIGkgPCBsYXN0OgorICAgICAgICAgICAgICAgICAgICBwcmludCAiUHJvY2Vzc2luZyBvbmx5IHRoZSBmaXJzdCBjb21taXQgZHVlIHRvIG9wdGlvbiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiIC0tcHJlcGFyZS1wNC1vbmx5IgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGkgPCBsYXN0OgorICAgICAgICAgICAgICAgICAgICBxdWl0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcHJvbXB0IGZvciB3aGF0IHRvIGRvLCBvciB1c2UgdGhlIG9wdGlvbi92YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciA9PSAiYXNrIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiV2hhdCBkbyB5b3Ugd2FudCB0byBkbz8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByYXdfaW5wdXQoIltzXWtpcCB0aGlzIGNvbW1pdCBidXQgYXBwbHkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGUgcmVzdCwgb3IgW3FddWl0PyAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZXNwb25zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciA9PSAic2tpcCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAicyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciA9PSAicXVpdCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAicSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllKCJVbmtub3duIGNvbmZsaWN0X2JlaGF2aW9yICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25mbGljdF9iZWhhdmlvcikKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVzcG9uc2VbMF0gPT0gInMiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJTa2lwcGluZyB0aGlzIGNvbW1pdCwgYnV0IGFwcGx5aW5nIHRoZSByZXN0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXNwb25zZVswXSA9PSAicSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlF1aXR0aW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aXQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgcXVpdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgY2hkaXIoc2VsZi5vbGRXb3JraW5nRGlyZWN0b3J5KQorCisgICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBzZWxmLnByZXBhcmVfcDRfb25seToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBsZW4oY29tbWl0cykgPT0gbGVuKGFwcGxpZWQpOgorICAgICAgICAgICAgcHJpbnQgIkFsbCBjb21taXRzIGFwcGxpZWQhIgorCisgICAgICAgICAgICBzeW5jID0gUDRTeW5jKCkKKyAgICAgICAgICAgIHN5bmMucnVuKFtdKQorCisgICAgICAgICAgICByZWJhc2UgPSBQNFJlYmFzZSgpCisgICAgICAgICAgICByZWJhc2UucmViYXNlKCkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbGVuKGFwcGxpZWQpID09IDA6CisgICAgICAgICAgICAgICAgcHJpbnQgIk5vIGNvbW1pdHMgYXBwbGllZC4iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICJBcHBsaWVkIG9ubHkgdGhlIGNvbW1pdHMgbWFya2VkIHdpdGggJyonOiIKKyAgICAgICAgICAgICAgICBmb3IgYyBpbiBjb21taXRzOgorICAgICAgICAgICAgICAgICAgICBpZiBjIGluIGFwcGxpZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFyID0gIioiCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFyID0gIiAiCisgICAgICAgICAgICAgICAgICAgIHByaW50IHN0YXIsIHJlYWRfcGlwZShbImdpdCIsICJzaG93IiwgIi1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3JtYXQ9Zm9ybWF0OiVoICVzIiwgIGNdKQorICAgICAgICAgICAgICAgIHByaW50ICJZb3Ugd2lsbCBoYXZlIHRvIGRvICdnaXQgcDQgc3luYycgYW5kIHJlYmFzZS4iCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnKCJnaXQtcDQuZXhwb3J0TGFiZWxzIiwgIi0tYm9vbCIpID09ICJ0cnVlIjoKKyAgICAgICAgICAgIHNlbGYuZXhwb3J0TGFiZWxzID0gVHJ1ZQorCisgICAgICAgIGlmIHNlbGYuZXhwb3J0TGFiZWxzOgorICAgICAgICAgICAgcDRMYWJlbHMgPSBnZXRQNExhYmVscyhzZWxmLmRlcG90UGF0aCkKKyAgICAgICAgICAgIGdpdFRhZ3MgPSBnZXRHaXRUYWdzKCkKKworICAgICAgICAgICAgbWlzc2luZ0dpdFRhZ3MgPSBnaXRUYWdzIC0gcDRMYWJlbHMKKyAgICAgICAgICAgIHNlbGYuZXhwb3J0R2l0VGFncyhtaXNzaW5nR2l0VGFncykKKworICAgICAgICAjIGV4aXQgd2l0aCBlcnJvciB1bmxlc3MgZXZlcnl0aGluZyBhcHBsaWVkIHBlcmZlY2x5CisgICAgICAgIGlmIGxlbihjb21taXRzKSAhPSBsZW4oYXBwbGllZCk6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBWaWV3KG9iamVjdCk6CisgICAgIiIiUmVwcmVzZW50IGEgcDQgdmlldyAoInA0IGhlbHAgdmlld3MiKSwgYW5kIG1hcCBmaWxlcyBpbiBhCisgICAgICAgcmVwbyBhY2NvcmRpbmcgdG8gdGhlIHZpZXcuIiIiCisKKyAgICBjbGFzcyBQYXRoKG9iamVjdCk6CisgICAgICAgICIiIkEgZGVwb3Qgb3IgY2xpZW50IHBhdGgsIHBvc3NpYmx5IGNvbnRhaW5pbmcgd2lsZGNhcmRzLgorICAgICAgICAgICBUaGUgb25seSBvbmUgc3VwcG9ydGVkIGlzIC4uLiBhdCB0aGUgZW5kLCBjdXJyZW50bHkuCisgICAgICAgICAgIEluaXRpYWxpemUgd2l0aCB0aGUgZnVsbCBwYXRoLCB3aXRoIC8vZGVwb3Qgb3IgLy9jbGllbnQuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGlzX2RlcG90KToKKyAgICAgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgICAgIHNlbGYuaXNfZGVwb3QgPSBpc19kZXBvdAorICAgICAgICAgICAgc2VsZi5maW5kX3dpbGRjYXJkcygpCisgICAgICAgICAgICAjIHJlbWVtYmVyIHRoZSBwcmVmaXggYml0LCB1c2VmdWwgZm9yIHJlbGF0aXZlIG1hcHBpbmdzCisgICAgICAgICAgICBtID0gcmUubWF0Y2goIigvL1teL10rLykiLCBzZWxmLnBhdGgpCisgICAgICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgICAgICBkaWUoIlBhdGggJXMgZG9lcyBub3Qgc3RhcnQgd2l0aCAvL3ByZWZpeC8iICUgc2VsZi5wYXRoKQorICAgICAgICAgICAgcHJlZml4ID0gbS5ncm91cCgxKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfZGVwb3Q6CisgICAgICAgICAgICAgICAgIyBzdHJpcCAvL2NsaWVudC8gb24gY2xpZW50IHBhdGhzCisgICAgICAgICAgICAgICAgc2VsZi5wYXRoID0gc2VsZi5wYXRoW2xlbihwcmVmaXgpOl0KKworICAgICAgICBkZWYgZmluZF93aWxkY2FyZHMoc2VsZik6CisgICAgICAgICAgICAiIiJNYWtlIHN1cmUgd2lsZGNhcmRzIGFyZSB2YWxpZCwgYW5kIHNldCB1cCBpbnRlcm5hbAorICAgICAgICAgICAgICAgdmFyaWFibGVzLiIiIgorCisgICAgICAgICAgICBzZWxmLmVuZHNfdHJpcGxlX2RvdCA9IEZhbHNlCisgICAgICAgICAgICAjIFRoZXJlIGFyZSB0aHJlZSB3aWxkY2FyZHMgYWxsb3dlZCBpbiBwNCB2aWV3cworICAgICAgICAgICAgIyAoc2VlICJwNCBoZWxwIHZpZXdzIikuICBUaGlzIGNvZGUga25vd3MgaG93IHRvCisgICAgICAgICAgICAjIGhhbmRsZSAiLi4uIiAob25seSBhdCB0aGUgZW5kKSwgYnV0IGNhbm5vdCBkZWFsIHdpdGgKKyAgICAgICAgICAgICMgIiUlbiIgb3IgIioiLiAgT25seSBjaGVjayB0aGUgZGVwb3Rfc2lkZSwgYXMgcDQgc2hvdWxkCisgICAgICAgICAgICAjIHZhbGlkYXRlIHRoYXQgdGhlIGNsaWVudF9zaWRlIG1hdGNoZXMgdG9vLgorICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHInJSVbMS05XScsIHNlbGYucGF0aCk6CisgICAgICAgICAgICAgICAgZGllKCJDYW4ndCBoYW5kbGUgJSVuIHdpbGRjYXJkcyBpbiB2aWV3OiAlcyIgJSBzZWxmLnBhdGgpCisgICAgICAgICAgICBpZiBzZWxmLnBhdGguZmluZCgiKiIpID49IDA6CisgICAgICAgICAgICAgICAgZGllKCJDYW4ndCBoYW5kbGUgKiB3aWxkY2FyZHMgaW4gdmlldzogJXMiICUgc2VsZi5wYXRoKQorICAgICAgICAgICAgdHJpcGxlX2RvdF9pbmRleCA9IHNlbGYucGF0aC5maW5kKCIuLi4iKQorICAgICAgICAgICAgaWYgdHJpcGxlX2RvdF9pbmRleCA+PSAwOgorICAgICAgICAgICAgICAgIGlmIHRyaXBsZV9kb3RfaW5kZXggIT0gbGVuKHNlbGYucGF0aCkgLSAzOgorICAgICAgICAgICAgICAgICAgICBkaWUoIkNhbiBoYW5kbGUgb25seSBzaW5nbGUgLi4uIHdpbGRjYXJkLCBhdCBlbmQ6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGgpCisgICAgICAgICAgICAgICAgc2VsZi5lbmRzX3RyaXBsZV9kb3QgPSBUcnVlCisKKyAgICAgICAgZGVmIGVuc3VyZV9jb21wYXRpYmxlKHNlbGYsIG90aGVyX3BhdGgpOgorICAgICAgICAgICAgIiIiTWFrZSBzdXJlIHRoZSB3aWxkY2FyZHMgYWdyZWUuIiIiCisgICAgICAgICAgICBpZiBzZWxmLmVuZHNfdHJpcGxlX2RvdCAhPSBvdGhlcl9wYXRoLmVuZHNfdHJpcGxlX2RvdDoKKyAgICAgICAgICAgICAgICAgZGllKCJCb3RoIHBhdGhzIG11c3QgZW5kIHdpdGggLi4uIGlmIGVpdGhlciBkb2VzO1xuIiArCisgICAgICAgICAgICAgICAgICAgICAicGF0aHM6ICVzICVzIiAlIChzZWxmLnBhdGgsIG90aGVyX3BhdGgucGF0aCkpCisKKyAgICAgICAgZGVmIG1hdGNoX3dpbGRjYXJkcyhzZWxmLCB0ZXN0X3BhdGgpOgorICAgICAgICAgICAgIiIiU2VlIGlmIHRoaXMgdGVzdF9wYXRoIG1hdGNoZXMgdXMsIGFuZCBmaWxsIGluIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgb2YgdGhlIHdpbGRjYXJkcyBpZiBzby4gIFJldHVybnMgYSB0dXBsZSBvZgorICAgICAgICAgICAgICAgKFRydWV8RmFsc2UsIHdpbGRjYXJkc1tdKS4gIEZvciBub3csIG9ubHkgdGhlIC4uLiBhdCBlbmQKKyAgICAgICAgICAgICAgIGlzIHN1cHBvcnRlZCwgc28gYXQgbW9zdCBvbmUgd2lsZGNhcmQuIiIiCisgICAgICAgICAgICBpZiBzZWxmLmVuZHNfdHJpcGxlX2RvdDoKKyAgICAgICAgICAgICAgICBkb3RsZXNzID0gc2VsZi5wYXRoWzotM10KKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGguc3RhcnRzd2l0aChkb3RsZXNzKToKKyAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmQgPSB0ZXN0X3BhdGhbbGVuKGRvdGxlc3MpOl0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChUcnVlLCBbIHdpbGRjYXJkIF0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHRlc3RfcGF0aCA9PSBzZWxmLnBhdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwgW10pCisgICAgICAgICAgICByZXR1cm4gKEZhbHNlLCBbXSkKKworICAgICAgICBkZWYgbWF0Y2goc2VsZiwgdGVzdF9wYXRoKToKKyAgICAgICAgICAgICIiIkp1c3QgcmV0dXJuIGlmIGl0IG1hdGNoZXM7IGRvbid0IGJvdGhlciB3aXRoIHRoZSB3aWxkY2FyZHMuIiIiCisgICAgICAgICAgICBiLCBfID0gc2VsZi5tYXRjaF93aWxkY2FyZHModGVzdF9wYXRoKQorICAgICAgICAgICAgcmV0dXJuIGIKKworICAgICAgICBkZWYgZmlsbF9pbl93aWxkY2FyZHMoc2VsZiwgd2lsZGNhcmRzKToKKyAgICAgICAgICAgICIiIlJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCwgd2l0aCB0aGUgd2lsZGNhcmRzIGZpbGxlZCBpbgorICAgICAgICAgICAgICAgaWYgdGhlcmUgYXJlIGFueS4iIiIKKyAgICAgICAgICAgIGlmIHNlbGYuZW5kc190cmlwbGVfZG90OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhdGhbOi0zXSArIHdpbGRjYXJkc1swXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKKyAgICBjbGFzcyBNYXBwaW5nKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXBvdF9zaWRlLCBjbGllbnRfc2lkZSwgb3ZlcmxheSwgZXhjbHVkZSk6CisgICAgICAgICAgICAjIGRlcG90X3NpZGUgaXMgd2l0aG91dCB0aGUgdHJhaWxpbmcgLy4uLiBpZiBpdCBoYWQgb25lCisgICAgICAgICAgICBzZWxmLmRlcG90X3NpZGUgPSBWaWV3LlBhdGgoZGVwb3Rfc2lkZSwgaXNfZGVwb3Q9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuY2xpZW50X3NpZGUgPSBWaWV3LlBhdGgoY2xpZW50X3NpZGUsIGlzX2RlcG90PUZhbHNlKQorICAgICAgICAgICAgc2VsZi5vdmVybGF5ID0gb3ZlcmxheSAgIyBzdGFydGVkIHdpdGggIisiCisgICAgICAgICAgICBzZWxmLmV4Y2x1ZGUgPSBleGNsdWRlICAjIHN0YXJ0ZWQgd2l0aCAiLSIKKyAgICAgICAgICAgIGFzc2VydCBub3QgKHNlbGYub3ZlcmxheSBhbmQgc2VsZi5leGNsdWRlKQorICAgICAgICAgICAgc2VsZi5kZXBvdF9zaWRlLmVuc3VyZV9jb21wYXRpYmxlKHNlbGYuY2xpZW50X3NpZGUpCisKKyAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICBjID0gIiAiCisgICAgICAgICAgICBpZiBzZWxmLm92ZXJsYXk6CisgICAgICAgICAgICAgICAgYyA9ICIrIgorICAgICAgICAgICAgaWYgc2VsZi5leGNsdWRlOgorICAgICAgICAgICAgICAgIGMgPSAiLSIKKyAgICAgICAgICAgIHJldHVybiAiVmlldy5NYXBwaW5nOiAlcyVzIC0+ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAoYywgc2VsZi5kZXBvdF9zaWRlLnBhdGgsIHNlbGYuY2xpZW50X3NpZGUucGF0aCkKKworICAgICAgICBkZWYgbWFwX2RlcG90X3RvX2NsaWVudChzZWxmLCBkZXBvdF9wYXRoKToKKyAgICAgICAgICAgICIiIkNhbGN1bGF0ZSB0aGUgY2xpZW50IHBhdGggaWYgdXNpbmcgdGhpcyBtYXBwaW5nIG9uIHRoZQorICAgICAgICAgICAgICAgZ2l2ZW4gZGVwb3QgcGF0aDsgZG9lcyBub3QgY29uc2lkZXIgdGhlIGVmZmVjdCBvZiBvdGhlcgorICAgICAgICAgICAgICAgbWFwcGluZ3MgaW4gYSB2aWV3LiAgRXZlbiBleGNsdWRlZCBtYXBwaW5ncyBhcmUgcmV0dXJuZWQuIiIiCisgICAgICAgICAgICBtYXRjaGVzLCB3aWxkY2FyZHMgPSBzZWxmLmRlcG90X3NpZGUubWF0Y2hfd2lsZGNhcmRzKGRlcG90X3BhdGgpCisgICAgICAgICAgICBpZiBub3QgbWF0Y2hlczoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgICAgIGNsaWVudF9wYXRoID0gc2VsZi5jbGllbnRfc2lkZS5maWxsX2luX3dpbGRjYXJkcyh3aWxkY2FyZHMpCisgICAgICAgICAgICByZXR1cm4gY2xpZW50X3BhdGgKKworICAgICMKKyAgICAjIFZpZXcgbWV0aG9kcworICAgICMKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubWFwcGluZ3MgPSBbXQorCisgICAgZGVmIGFwcGVuZChzZWxmLCB2aWV3X2xpbmUpOgorICAgICAgICAiIiJQYXJzZSBhIHZpZXcgbGluZSwgc3BsaXR0aW5nIGl0IGludG8gZGVwb3QgYW5kIGNsaWVudAorICAgICAgICAgICBzaWRlcy4gIEFwcGVuZCB0byBzZWxmLm1hcHBpbmdzLCBwcmVzZXJ2aW5nIG9yZGVyLiIiIgorCisgICAgICAgICMgU3BsaXQgdGhlIHZpZXcgbGluZSBpbnRvIGV4YWN0bHkgdHdvIHdvcmRzLiAgUDQgZW5mb3JjZXMKKyAgICAgICAgIyBzdHJ1Y3R1cmUgb24gdGhlc2UgbGluZXMgdGhhdCBzaW1wbGlmaWVzIHRoaXMgcXVpdGUgYSBiaXQuCisgICAgICAgICMKKyAgICAgICAgIyBFaXRoZXIgb3IgYm90aCB3b3JkcyBtYXkgYmUgZG91YmxlLXF1b3RlZC4KKyAgICAgICAgIyBTaW5nbGUgcXVvdGVzIGRvIG5vdCBtYXR0ZXIuCisgICAgICAgICMgRG91YmxlLXF1b3RlIG1hcmtzIGNhbm5vdCBvY2N1ciBpbnNpZGUgdGhlIHdvcmRzLgorICAgICAgICAjIEEgKyBvciAtIHByZWZpeCBpcyBhbHNvIGluc2lkZSB0aGUgcXVvdGVzLgorICAgICAgICAjIFRoZXJlIGFyZSBubyBxdW90ZXMgdW5sZXNzIHRoZXkgY29udGFpbiBhIHNwYWNlLgorICAgICAgICAjIFRoZSBsaW5lIGlzIGFscmVhZHkgd2hpdGUtc3BhY2Ugc3RyaXBwZWQuCisgICAgICAgICMgVGhlIHR3byB3b3JkcyBhcmUgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNwYWNlLgorICAgICAgICAjCisgICAgICAgIGlmIHZpZXdfbGluZVswXSA9PSAnIic6CisgICAgICAgICAgICAjIEZpcnN0IHdvcmQgaXMgZG91YmxlIHF1b3RlZC4gIEZpbmQgaXRzIGVuZC4KKyAgICAgICAgICAgIGNsb3NlX3F1b3RlX2luZGV4ID0gdmlld19saW5lLmZpbmQoJyInLCAxKQorICAgICAgICAgICAgaWYgY2xvc2VfcXVvdGVfaW5kZXggPD0gMDoKKyAgICAgICAgICAgICAgICBkaWUoIk5vIGZpcnN0LXdvcmQgY2xvc2luZyBxdW90ZSBmb3VuZDogJXMiICUgdmlld19saW5lKQorICAgICAgICAgICAgZGVwb3Rfc2lkZSA9IHZpZXdfbGluZVsxOmNsb3NlX3F1b3RlX2luZGV4XQorICAgICAgICAgICAgIyBza2lwIGNsb3NpbmcgcXVvdGUgYW5kIHNwYWNlCisgICAgICAgICAgICByaHNfaW5kZXggPSBjbG9zZV9xdW90ZV9pbmRleCArIDEgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGFjZV9pbmRleCA9IHZpZXdfbGluZS5maW5kKCIgIikKKyAgICAgICAgICAgIGlmIHNwYWNlX2luZGV4IDw9IDA6CisgICAgICAgICAgICAgICAgZGllKCJObyB3b3JkLXNwbGl0dGluZyBzcGFjZSBmb3VuZDogJXMiICUgdmlld19saW5lKQorICAgICAgICAgICAgZGVwb3Rfc2lkZSA9IHZpZXdfbGluZVswOnNwYWNlX2luZGV4XQorICAgICAgICAgICAgcmhzX2luZGV4ID0gc3BhY2VfaW5kZXggKyAxCisKKyAgICAgICAgaWYgdmlld19saW5lW3Joc19pbmRleF0gPT0gJyInOgorICAgICAgICAgICAgIyBTZWNvbmQgd29yZCBpcyBkb3VibGUgcXVvdGVkLiAgTWFrZSBzdXJlIHRoZXJlIGlzIGEKKyAgICAgICAgICAgICMgZG91YmxlIHF1b3RlIGF0IHRoZSBlbmQgdG9vLgorICAgICAgICAgICAgaWYgbm90IHZpZXdfbGluZS5lbmRzd2l0aCgnIicpOgorICAgICAgICAgICAgICAgIGRpZSgiVmlldyBsaW5lIHdpdGggcmhzIHF1b3RlIHNob3VsZCBlbmQgd2l0aCBvbmU6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgIHZpZXdfbGluZSkKKyAgICAgICAgICAgICMgc2tpcCB0aGUgcXVvdGVzCisgICAgICAgICAgICBjbGllbnRfc2lkZSA9IHZpZXdfbGluZVtyaHNfaW5kZXgrMTotMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsaWVudF9zaWRlID0gdmlld19saW5lW3Joc19pbmRleDpdCisKKyAgICAgICAgIyBwcmVmaXggKyBtZWFucyBvdmVybGF5IG9uIHByZXZpb3VzIG1hcHBpbmcKKyAgICAgICAgb3ZlcmxheSA9IEZhbHNlCisgICAgICAgIGlmIGRlcG90X3NpZGUuc3RhcnRzd2l0aCgiKyIpOgorICAgICAgICAgICAgb3ZlcmxheSA9IFRydWUKKyAgICAgICAgICAgIGRlcG90X3NpZGUgPSBkZXBvdF9zaWRlWzE6XQorCisgICAgICAgICMgcHJlZml4IC0gbWVhbnMgZXhjbHVkZSB0aGlzIHBhdGgKKyAgICAgICAgZXhjbHVkZSA9IEZhbHNlCisgICAgICAgIGlmIGRlcG90X3NpZGUuc3RhcnRzd2l0aCgiLSIpOgorICAgICAgICAgICAgZXhjbHVkZSA9IFRydWUKKyAgICAgICAgICAgIGRlcG90X3NpZGUgPSBkZXBvdF9zaWRlWzE6XQorCisgICAgICAgIG0gPSBWaWV3Lk1hcHBpbmcoZGVwb3Rfc2lkZSwgY2xpZW50X3NpZGUsIG92ZXJsYXksIGV4Y2x1ZGUpCisgICAgICAgIHNlbGYubWFwcGluZ3MuYXBwZW5kKG0pCisKKyAgICBkZWYgbWFwX2luX2NsaWVudChzZWxmLCBkZXBvdF9wYXRoKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBpbiB0aGUgY2xpZW50IHdoZXJlIHRoaXMKKyAgICAgICAgICAgZGVwb3QgZmlsZSBzaG91bGQgbGl2ZS4gIFJldHVybnMgIiIgaWYgdGhlIGZpbGUgc2hvdWxkCisgICAgICAgICAgIG5vdCBiZSBtYXBwZWQgaW4gdGhlIGNsaWVudC4iIiIKKworICAgICAgICBwYXRoc19maWxsZWQgPSBbXQorICAgICAgICBjbGllbnRfcGF0aCA9ICIiCisKKyAgICAgICAgIyBsb29rIGF0IGxhdGVyIGVudHJpZXMgZmlyc3QKKyAgICAgICAgZm9yIG0gaW4gc2VsZi5tYXBwaW5nc1s6Oi0xXToKKworICAgICAgICAgICAgIyBzZWUgd2hlcmUgd2lsbCB0aGlzIHBhdGggZW5kIHVwIGluIHRoZSBjbGllbnQKKyAgICAgICAgICAgIHAgPSBtLm1hcF9kZXBvdF90b19jbGllbnQoZGVwb3RfcGF0aCkKKworICAgICAgICAgICAgaWYgcCA9PSAiIjoKKyAgICAgICAgICAgICAgICAjIERlcG90IHBhdGggZG9lcyBub3QgYmVsb25nIGluIGNsaWVudC4gIE11c3QgcmVtZW1iZXIKKyAgICAgICAgICAgICAgICAjIHRoaXMsIGFzIHByZXZpb3VzIGl0ZW1zIHNob3VsZCBub3QgY2F1c2UgZmlsZXMgdG8KKyAgICAgICAgICAgICAgICAjIGV4aXN0IGluIHRoaXMgcGF0aCBlaXRoZXIuICBSZW1lbWJlciB0aGF0IHRoZSBsaXN0IGlzCisgICAgICAgICAgICAgICAgIyBiZWluZyB3YWxrZWQgZnJvbSB0aGUgZW5kLCB3aGljaCBoYXMgaGlnaGVyIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgIyBPdmVybGFwIG1hcHBpbmdzIGRvIG5vdCBleGNsdWRlIHByZXZpb3VzIG1hcHBpbmdzLgorICAgICAgICAgICAgICAgIGlmIG5vdCBtLm92ZXJsYXk6CisgICAgICAgICAgICAgICAgICAgIHBhdGhzX2ZpbGxlZC5hcHBlbmQobS5jbGllbnRfc2lkZSkKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgbWFwcGluZyBtYXRjaGVkOyBubyBuZWVkIHRvIHNlYXJjaCBhbnkgZnVydGhlci4KKyAgICAgICAgICAgICAgICAjIEJ1dCwgdGhlIG1hcHBpbmcgY291bGQgYmUgcmVqZWN0ZWQgaWYgdGhlIGNsaWVudCBwYXRoCisgICAgICAgICAgICAgICAgIyBoYXMgYWxyZWFkeSBiZWVuIGNsYWltZWQgYnkgYW4gZWFybGllciBtYXBwaW5nIChpLmUuCisgICAgICAgICAgICAgICAgIyBvbmUgbGF0ZXIgaW4gdGhlIGxpc3QsIHdoaWNoIHdlIGFyZSB3YWxraW5nIGJhY2t3YXJkcykuCisgICAgICAgICAgICAgICAgYWxyZWFkeV9tYXBwZWRfaW5fY2xpZW50ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBwYXRoc19maWxsZWQ6CisgICAgICAgICAgICAgICAgICAgICMgdGhpcyBpcyBWaWV3LlBhdGgubWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5tYXRjaChwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlfbWFwcGVkX2luX2NsaWVudCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGFscmVhZHlfbWFwcGVkX2luX2NsaWVudDoKKyAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHRoaXMgZmlsZSwgdW5sZXNzIGl0IGlzIGZyb20gYSBsaW5lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgIyBleHBsaWNpdGx5IHNhaWQgdG8gZXhjbHVkZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG0uZXhjbHVkZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9wYXRoID0gcAorCisgICAgICAgICAgICAgICAgIyBhIG1hdGNoLCBldmVuIGlmIHJlamVjdGVkLCBhbHdheXMgc3RvcHMgdGhlIHNlYXJjaAorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmV0dXJuIGNsaWVudF9wYXRoCisKK2NsYXNzIFA0U3luYyhDb21tYW5kLCBQNFVzZXJNYXApOgorICAgIGRlbGV0ZV9hY3Rpb25zID0gKCAiZGVsZXRlIiwgIm1vdmUvZGVsZXRlIiwgInB1cmdlIiApCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZikKKyAgICAgICAgUDRVc2VyTWFwLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYub3B0aW9ucyA9IFsKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1icmFuY2giLCBkZXN0PSJicmFuY2giKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1kZXRlY3QtYnJhbmNoZXMiLCBkZXN0PSJkZXRlY3RCcmFuY2hlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWNoYW5nZXNmaWxlIiwgZGVzdD0iY2hhbmdlc0ZpbGUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1zaWxlbnQiLCBkZXN0PSJzaWxlbnQiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1kZXRlY3QtbGFiZWxzIiwgZGVzdD0iZGV0ZWN0TGFiZWxzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0taW1wb3J0LWxhYmVscyIsIGRlc3Q9ImltcG9ydExhYmVscyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWltcG9ydC1sb2NhbCIsIGRlc3Q9ImltcG9ydEludG9SZW1vdGVzIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iSW1wb3J0IGludG8gcmVmcy9oZWFkcy8gLCBub3QgcmVmcy9yZW1vdGVzIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbWF4LWNoYW5nZXMiLCBkZXN0PSJtYXhDaGFuZ2VzIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0ta2VlcC1wYXRoIiwgZGVzdD0ia2VlcFJlcG9QYXRoIiwgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJLZWVwIGVudGlyZSBCUkFOQ0gvRElSL1NVQkRJUiBwcmVmaXggZHVyaW5nIGltcG9ydCIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXVzZS1jbGllbnQtc3BlYyIsIGRlc3Q9InVzZUNsaWVudFNwZWMiLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik9ubHkgc3luYyBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgUGVyZm9yY2UgQ2xpZW50IFNwZWMiKQorICAgICAgICBdCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAiIiJJbXBvcnRzIGZyb20gUGVyZm9yY2UgaW50byBhIGdpdCByZXBvc2l0b3J5LlxuCisgICAgZXhhbXBsZToKKyAgICAvL2RlcG90L215L3Byb2plY3QvIC0tIHRvIGltcG9ydCB0aGUgY3VycmVudCBoZWFkCisgICAgLy9kZXBvdC9teS9wcm9qZWN0L0BhbGwgLS0gdG8gaW1wb3J0IGV2ZXJ5dGhpbmcKKyAgICAvL2RlcG90L215L3Byb2plY3QvQDEsNiAtLSB0byBpbXBvcnQgb25seSBmcm9tIHJldmlzaW9uIDEgdG8gNgorCisgICAgKGEgLi4uIGlzIG5vdCBuZWVkZWQgaW4gdGhlIHBhdGggcDQgc3BlY2lmaWNhdGlvbiwgaXQncyBhZGRlZCBpbXBsaWNpdGx5KSIiIgorCisgICAgICAgIHNlbGYudXNhZ2UgKz0gIiAvL2RlcG90L3BhdGhbQHJldlJhbmdlXSIKKyAgICAgICAgc2VsZi5zaWxlbnQgPSBGYWxzZQorICAgICAgICBzZWxmLmNyZWF0ZWRCcmFuY2hlcyA9IHNldCgpCisgICAgICAgIHNlbGYuY29tbWl0dGVkQ2hhbmdlcyA9IHNldCgpCisgICAgICAgIHNlbGYuYnJhbmNoID0gIiIKKyAgICAgICAgc2VsZi5kZXRlY3RCcmFuY2hlcyA9IEZhbHNlCisgICAgICAgIHNlbGYuZGV0ZWN0TGFiZWxzID0gRmFsc2UKKyAgICAgICAgc2VsZi5pbXBvcnRMYWJlbHMgPSBGYWxzZQorICAgICAgICBzZWxmLmNoYW5nZXNGaWxlID0gIiIKKyAgICAgICAgc2VsZi5zeW5jV2l0aE9yaWdpbiA9IFRydWUKKyAgICAgICAgc2VsZi5pbXBvcnRJbnRvUmVtb3RlcyA9IFRydWUKKyAgICAgICAgc2VsZi5tYXhDaGFuZ2VzID0gIiIKKyAgICAgICAgc2VsZi5pc1dpbmRvd3MgPSAocGxhdGZvcm0uc3lzdGVtKCkgPT0gIldpbmRvd3MiKQorICAgICAgICBzZWxmLmtlZXBSZXBvUGF0aCA9IEZhbHNlCisgICAgICAgIHNlbGYuZGVwb3RQYXRocyA9IE5vbmUKKyAgICAgICAgc2VsZi5wNEJyYW5jaGVzSW5HaXQgPSBbXQorICAgICAgICBzZWxmLmNsb25lRXhjbHVkZSA9IFtdCisgICAgICAgIHNlbGYudXNlQ2xpZW50U3BlYyA9IEZhbHNlCisgICAgICAgIHNlbGYudXNlQ2xpZW50U3BlY19mcm9tX29wdGlvbnMgPSBGYWxzZQorICAgICAgICBzZWxmLmNsaWVudFNwZWNEaXJzID0gTm9uZQorICAgICAgICBzZWxmLnRlbXBCcmFuY2hlcyA9IFtdCisgICAgICAgIHNlbGYudGVtcEJyYW5jaExvY2F0aW9uID0gImdpdC1wNC10bXAiCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnKCJnaXQtcDQuc3luY0Zyb21PcmlnaW4iKSA9PSAiZmFsc2UiOgorICAgICAgICAgICAgc2VsZi5zeW5jV2l0aE9yaWdpbiA9IEZhbHNlCisKKyAgICAjIEZvcmNlIGEgY2hlY2twb2ludCBpbiBmYXN0LWltcG9ydCBhbmQgd2FpdCBmb3IgaXQgdG8gZmluaXNoCisgICAgZGVmIGNoZWNrcG9pbnQoc2VsZik6CisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJjaGVja3BvaW50XG5cbiIpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJwcm9ncmVzcyBjaGVja3BvaW50XG5cbiIpCisgICAgICAgIG91dCA9IHNlbGYuZ2l0T3V0cHV0LnJlYWRsaW5lKCkKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImNoZWNrcG9pbnQgZmluaXNoZWQ6ICIgKyBvdXQKKworICAgIGRlZiBleHRyYWN0RmlsZXNGcm9tQ29tbWl0KHNlbGYsIGNvbW1pdCk6CisgICAgICAgIHNlbGYuY2xvbmVFeGNsdWRlID0gW3JlLnN1YihyIlwuXC5cLiQiLCAiIiwgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5jbG9uZUV4Y2x1ZGVdCisgICAgICAgIGZpbGVzID0gW10KKyAgICAgICAgZm51bSA9IDAKKyAgICAgICAgd2hpbGUgY29tbWl0Lmhhc19rZXkoImRlcG90RmlsZSVzIiAlIGZudW0pOgorICAgICAgICAgICAgcGF0aCA9ICBjb21taXRbImRlcG90RmlsZSVzIiAlIGZudW1dCisKKyAgICAgICAgICAgIGlmIFtwIGZvciBwIGluIHNlbGYuY2xvbmVFeGNsdWRlCisgICAgICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChwYXRoLCBwKV06CisgICAgICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFtwIGZvciBwIGluIHNlbGYuZGVwb3RQYXRocworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgcCldCisgICAgICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICAgICAgZm51bSA9IGZudW0gKyAxCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZmlsZSA9IHt9CisgICAgICAgICAgICBmaWxlWyJwYXRoIl0gPSBwYXRoCisgICAgICAgICAgICBmaWxlWyJyZXYiXSA9IGNvbW1pdFsicmV2JXMiICUgZm51bV0KKyAgICAgICAgICAgIGZpbGVbImFjdGlvbiJdID0gY29tbWl0WyJhY3Rpb24lcyIgJSBmbnVtXQorICAgICAgICAgICAgZmlsZVsidHlwZSJdID0gY29tbWl0WyJ0eXBlJXMiICUgZm51bV0KKyAgICAgICAgICAgIGZpbGVzLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgZm51bSA9IGZudW0gKyAxCisgICAgICAgIHJldHVybiBmaWxlcworCisgICAgZGVmIHN0cmlwUmVwb1BhdGgoc2VsZiwgcGF0aCwgcHJlZml4ZXMpOgorICAgICAgICAiIiJXaGVuIHN0cmVhbWluZyBmaWxlcywgdGhpcyBpcyBjYWxsZWQgdG8gbWFwIGEgcDQgZGVwb3QgcGF0aAorICAgICAgICAgICB0byB3aGVyZSBpdCBzaG91bGQgZ28gaW4gZ2l0LiAgVGhlIHByZWZpeGVzIGFyZSBlaXRoZXIKKyAgICAgICAgICAgc2VsZi5kZXBvdFBhdGhzLCBvciBzZWxmLmJyYW5jaFByZWZpeGVzIGluIHRoZSBjYXNlIG9mCisgICAgICAgICAgIGJyYW5jaCBkZXRlY3Rpb24uIiIiCisKKyAgICAgICAgaWYgc2VsZi51c2VDbGllbnRTcGVjOgorICAgICAgICAgICAgIyBicmFuY2ggZGV0ZWN0aW9uIG1vdmVzIGZpbGVzIHVwIGEgbGV2ZWwgKHRoZSBicmFuY2ggbmFtZSkKKyAgICAgICAgICAgICMgZnJvbSB3aGF0IGNsaWVudCBzcGVjIGludGVycHJldGF0aW9uIGdpdmVzCisgICAgICAgICAgICBwYXRoID0gc2VsZi5jbGllbnRTcGVjRGlycy5tYXBfaW5fY2xpZW50KHBhdGgpCisgICAgICAgICAgICBpZiBzZWxmLmRldGVjdEJyYW5jaGVzOgorICAgICAgICAgICAgICAgIGZvciBiIGluIHNlbGYua25vd25CcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKGIgKyAiLyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhbbGVuKGIpKzE6XQorCisgICAgICAgIGVsaWYgc2VsZi5rZWVwUmVwb1BhdGg6CisgICAgICAgICAgICAjIFByZXNlcnZlIGV2ZXJ5dGhpbmcgaW4gcmVsYXRpdmUgcGF0aCBuYW1lIGV4Y2VwdCBsZWFkaW5nCisgICAgICAgICAgICAjIC8vZGVwb3QvOyBqdXN0IGxvb2sgYXQgZmlyc3QgcHJlZml4IGFzIHRoZXkgYWxsIHNob3VsZAorICAgICAgICAgICAgIyBiZSBpbiB0aGUgc2FtZSBkZXBvdC4KKyAgICAgICAgICAgIGRlcG90ID0gcmUuc3ViKCJeKC8vW14vXSsvKS4qIiwgcidcMScsIHByZWZpeGVzWzBdKQorICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChwYXRoLCBkZXBvdCk6CisgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhbbGVuKGRlcG90KTpdCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgcCk6CisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoW2xlbihwKTpdCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcGF0aCA9IHdpbGRjYXJkX2RlY29kZShwYXRoKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIHNwbGl0RmlsZXNJbnRvQnJhbmNoZXMoc2VsZiwgY29tbWl0KToKKyAgICAgICAgIiIiTG9vayBhdCBlYWNoIGRlcG90RmlsZSBpbiB0aGUgY29tbWl0IHRvIGZpZ3VyZSBvdXQgdG8gd2hhdAorICAgICAgICAgICBicmFuY2ggaXQgYmVsb25ncy4iIiIKKworICAgICAgICBicmFuY2hlcyA9IHt9CisgICAgICAgIGZudW0gPSAwCisgICAgICAgIHdoaWxlIGNvbW1pdC5oYXNfa2V5KCJkZXBvdEZpbGUlcyIgJSBmbnVtKToKKyAgICAgICAgICAgIHBhdGggPSAgY29tbWl0WyJkZXBvdEZpbGUlcyIgJSBmbnVtXQorICAgICAgICAgICAgZm91bmQgPSBbcCBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHMKKyAgICAgICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgcCldCisgICAgICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICAgICAgZm51bSA9IGZudW0gKyAxCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZmlsZSA9IHt9CisgICAgICAgICAgICBmaWxlWyJwYXRoIl0gPSBwYXRoCisgICAgICAgICAgICBmaWxlWyJyZXYiXSA9IGNvbW1pdFsicmV2JXMiICUgZm51bV0KKyAgICAgICAgICAgIGZpbGVbImFjdGlvbiJdID0gY29tbWl0WyJhY3Rpb24lcyIgJSBmbnVtXQorICAgICAgICAgICAgZmlsZVsidHlwZSJdID0gY29tbWl0WyJ0eXBlJXMiICUgZm51bV0KKyAgICAgICAgICAgIGZudW0gPSBmbnVtICsgMQorCisgICAgICAgICAgICAjIHN0YXJ0IHdpdGggdGhlIGZ1bGwgcmVsYXRpdmUgcGF0aCB3aGVyZSB0aGlzIGZpbGUgd291bGQKKyAgICAgICAgICAgICMgZ28gaW4gYSBwNCBjbGllbnQKKyAgICAgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYzoKKyAgICAgICAgICAgICAgICByZWxQYXRoID0gc2VsZi5jbGllbnRTcGVjRGlycy5tYXBfaW5fY2xpZW50KHBhdGgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlbFBhdGggPSBzZWxmLnN0cmlwUmVwb1BhdGgocGF0aCwgc2VsZi5kZXBvdFBhdGhzKQorCisgICAgICAgICAgICBmb3IgYnJhbmNoIGluIHNlbGYua25vd25CcmFuY2hlcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgIyBhZGQgYSB0cmFpbGluZyBzbGFzaCBzbyB0aGF0IGEgY29tbWl0IGludG8gcXQvNC4yZm9vCisgICAgICAgICAgICAgICAgIyBkb2Vzbid0IGVuZCB1cCBpbiBxdC80LjIsIGUuZy4KKyAgICAgICAgICAgICAgICBpZiByZWxQYXRoLnN0YXJ0c3dpdGgoYnJhbmNoICsgIi8iKToKKyAgICAgICAgICAgICAgICAgICAgaWYgYnJhbmNoIG5vdCBpbiBicmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzW2JyYW5jaF0gPSBbXQorICAgICAgICAgICAgICAgICAgICBicmFuY2hlc1ticmFuY2hdLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiBicmFuY2hlcworCisgICAgIyBvdXRwdXQgb25lIGZpbGUgZnJvbSB0aGUgUDQgc3RyZWFtCisgICAgIyAtIGhlbHBlciBmb3Igc3RyZWFtUDRGaWxlcworCisgICAgZGVmIHN0cmVhbU9uZVA0RmlsZShzZWxmLCBmaWxlLCBjb250ZW50cyk6CisgICAgICAgIHJlbFBhdGggPSBzZWxmLnN0cmlwUmVwb1BhdGgoZmlsZVsnZGVwb3RGaWxlJ10sIHNlbGYuYnJhbmNoUHJlZml4ZXMpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIHJlbFBhdGgpCisKKyAgICAgICAgKHR5cGVfYmFzZSwgdHlwZV9tb2RzKSA9IHNwbGl0X3A0X3R5cGUoZmlsZVsidHlwZSJdKQorCisgICAgICAgIGdpdF9tb2RlID0gIjEwMDY0NCIKKyAgICAgICAgaWYgIngiIGluIHR5cGVfbW9kczoKKyAgICAgICAgICAgIGdpdF9tb2RlID0gIjEwMDc1NSIKKyAgICAgICAgaWYgdHlwZV9iYXNlID09ICJzeW1saW5rIjoKKyAgICAgICAgICAgIGdpdF9tb2RlID0gIjEyMDAwMCIKKyAgICAgICAgICAgICMgcDQgcHJpbnQgb24gYSBzeW1saW5rIGNvbnRhaW5zICJ0YXJnZXRcbiI7IHJlbW92ZSB0aGUgbmV3bGluZQorICAgICAgICAgICAgZGF0YSA9ICcnLmpvaW4oY29udGVudHMpCisgICAgICAgICAgICBjb250ZW50cyA9IFtkYXRhWzotMV1dCisKKyAgICAgICAgaWYgdHlwZV9iYXNlID09ICJ1dGYxNiI6CisgICAgICAgICAgICAjIHA0IGRlbGl2ZXJzIGRpZmZlcmVudCB0ZXh0IGluIHRoZSBweXRob24gb3V0cHV0IHRvIC1HCisgICAgICAgICAgICAjIHRoYW4gaXQgZG9lcyB3aGVuIHVzaW5nICJwcmludCAtbyIsIG9yIG5vcm1hbCBwNCBjbGllbnQKKyAgICAgICAgICAgICMgb3BlcmF0aW9ucy4gIHV0ZjE2IGlzIGNvbnZlcnRlZCB0byBhc2NpaSBvciB1dGY4LCBwZXJoYXBzLgorICAgICAgICAgICAgIyBCdXQgYXNjaWkgdGV4dCBzYXZlZCBhcyAtdCB1dGYxNiBpcyBjb21wbGV0ZWx5IG1hbmdsZWQuCisgICAgICAgICAgICAjIEludm9rZSBwcmludCAtbyB0byBnZXQgdGhlIHJlYWwgY29udGVudHMuCisgICAgICAgICAgICB0ZXh0ID0gcDRfcmVhZF9waXBlKFsncHJpbnQnLCAnLXEnLCAnLW8nLCAnLScsIGZpbGVbJ2RlcG90RmlsZSddXSkKKyAgICAgICAgICAgIGNvbnRlbnRzID0gWyB0ZXh0IF0KKworICAgICAgICBpZiB0eXBlX2Jhc2UgPT0gImFwcGxlIjoKKyAgICAgICAgICAgICMgQXBwbGUgZmlsZXR5cGUgZmlsZXMgd2lsbCBiZSBzdHJlYW1lZCBhcyBhIGNvbmNhdGVuYXRpb24gb2YKKyAgICAgICAgICAgICMgaXRzIGFwcGxlZG91YmxlIGhlYWRlciBhbmQgdGhlIGNvbnRlbnRzLiAgVGhpcyBpcyB1c2VsZXNzCisgICAgICAgICAgICAjIG9uIGJvdGggbWFjcyBhbmQgbm9uLW1hY3MuICBJZiB1c2luZyAicHJpbnQgLXEgLW8geHgiLCBpdAorICAgICAgICAgICAgIyB3aWxsIGNyZWF0ZSAieHgiIHdpdGggdGhlIGRhdGEsIGFuZCAiJXh4IiB3aXRoIHRoZSBoZWFkZXIuCisgICAgICAgICAgICAjIFRoaXMgaXMgYWxzbyBub3QgdmVyeSB1c2VmdWwuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElkZWFsbHksIHNvbWVkYXksIHRoaXMgc2NyaXB0IGNhbiBsZWFybiBob3cgdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICMgYXBwbGVkb3VibGUgZmlsZXMgZGlyZWN0bHkgYW5kIGltcG9ydCB0aG9zZSB0byBnaXQsIGJ1dAorICAgICAgICAgICAgIyBub24tbWFjIG1hY2hpbmVzIGNhbiBuZXZlciBmaW5kIGEgdXNlIGZvciBhcHBsZSBmaWxldHlwZS4KKyAgICAgICAgICAgIHByaW50ICJcbklnbm9yaW5nIGFwcGxlIGZpbGV0eXBlIGZpbGUgJXMiICUgZmlsZVsnZGVwb3RGaWxlJ10KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgUGVyaGFwcyB3aW5kb3dzIHdhbnRzIHVuaWNvZGUsIHV0ZjE2IG5ld2xpbmVzIHRyYW5zbGF0ZWQgdG9vOworICAgICAgICAjIGJ1dCB0aGlzIGlzIG5vdCBkb2luZyBpdC4KKyAgICAgICAgaWYgc2VsZi5pc1dpbmRvd3MgYW5kIHR5cGVfYmFzZSA9PSAidGV4dCI6CisgICAgICAgICAgICBtYW5nbGVkID0gW10KKyAgICAgICAgICAgIGZvciBkYXRhIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoIlxyXG4iLCAiXG4iKQorICAgICAgICAgICAgICAgIG1hbmdsZWQuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICBjb250ZW50cyA9IG1hbmdsZWQKKworICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBub3QgdHJ5IHRvIGRlLW1hbmdsZSBrZXl3b3JkcyBvbiB1dGYxNiBmaWxlcywKKyAgICAgICAgIyBldmVuIHRob3VnaCBpbiB0aGVvcnkgc29tZWJvZHkgbWF5IHdhbnQgdGhhdC4KKyAgICAgICAgcGF0dGVybiA9IHA0X2tleXdvcmRzX3JlZ2V4cF9mb3JfdHlwZSh0eXBlX2Jhc2UsIHR5cGVfbW9kcykKKyAgICAgICAgaWYgcGF0dGVybjoKKyAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUocGF0dGVybiwgcmUuVkVSQk9TRSkKKyAgICAgICAgICAgIHRleHQgPSAnJy5qb2luKGNvbnRlbnRzKQorICAgICAgICAgICAgdGV4dCA9IHJlZ2V4cC5zdWIocickXDEkJywgdGV4dCkKKyAgICAgICAgICAgIGNvbnRlbnRzID0gWyB0ZXh0IF0KKworICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiTSAlcyBpbmxpbmUgJXNcbiIgJSAoZ2l0X21vZGUsIHJlbFBhdGgpKQorCisgICAgICAgICMgdG90YWwgbGVuZ3RoLi4uCisgICAgICAgIGxlbmd0aCA9IDAKKyAgICAgICAgZm9yIGQgaW4gY29udGVudHM6CisgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggKyBsZW4oZCkKKworICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiZGF0YSAlZFxuIiAlIGxlbmd0aCkKKyAgICAgICAgZm9yIGQgaW4gY29udGVudHM6CisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZShkKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiXG4iKQorCisgICAgZGVmIHN0cmVhbU9uZVA0RGVsZXRpb24oc2VsZiwgZmlsZSk6CisgICAgICAgIHJlbFBhdGggPSBzZWxmLnN0cmlwUmVwb1BhdGgoZmlsZVsncGF0aCddLCBzZWxmLmJyYW5jaFByZWZpeGVzKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiZGVsZXRlICVzXG4iICUgcmVsUGF0aCkKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoIkQgJXNcbiIgJSByZWxQYXRoKQorCisgICAgIyBoYW5kbGUgYW5vdGhlciBjaHVuayBvZiBzdHJlYW1pbmcgZGF0YQorICAgIGRlZiBzdHJlYW1QNEZpbGVzQ2Ioc2VsZiwgbWFyc2hhbGxlZCk6CisKKyAgICAgICAgaWYgbWFyc2hhbGxlZC5oYXNfa2V5KCdkZXBvdEZpbGUnKSBhbmQgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm86CisgICAgICAgICAgICAjIHN0YXJ0IG9mIGEgbmV3IGZpbGUgLSBvdXRwdXQgdGhlIG9sZCBvbmUgZmlyc3QKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtT25lUDRGaWxlKHNlbGYuc3RyZWFtX2ZpbGUsIHNlbGYuc3RyZWFtX2NvbnRlbnRzKQorICAgICAgICAgICAgc2VsZi5zdHJlYW1fZmlsZSA9IHt9CisgICAgICAgICAgICBzZWxmLnN0cmVhbV9jb250ZW50cyA9IFtdCisgICAgICAgICAgICBzZWxmLnN0cmVhbV9oYXZlX2ZpbGVfaW5mbyA9IEZhbHNlCisKKyAgICAgICAgIyBwaWNrIHVwIHRoZSBuZXcgZmlsZSBpbmZvcm1hdGlvbi4uLiBmb3IgdGhlCisgICAgICAgICMgJ2RhdGEnIGZpZWxkIHdlIG5lZWQgdG8gYXBwZW5kIHRvIG91ciBhcnJheQorICAgICAgICBmb3IgayBpbiBtYXJzaGFsbGVkLmtleXMoKToKKyAgICAgICAgICAgIGlmIGsgPT0gJ2RhdGEnOgorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2NvbnRlbnRzLmFwcGVuZChtYXJzaGFsbGVkWydkYXRhJ10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2ZpbGVba10gPSBtYXJzaGFsbGVkW2tdCisKKyAgICAgICAgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm8gPSBUcnVlCisKKyAgICAjIFN0cmVhbSBkaXJlY3RseSBmcm9tICJwNCBmaWxlcyIgaW50byAiZ2l0IGZhc3QtaW1wb3J0IgorICAgIGRlZiBzdHJlYW1QNEZpbGVzKHNlbGYsIGZpbGVzKToKKyAgICAgICAgZmlsZXNGb3JDb21taXQgPSBbXQorICAgICAgICBmaWxlc1RvUmVhZCA9IFtdCisgICAgICAgIGZpbGVzVG9EZWxldGUgPSBbXQorCisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgIyBpZiB1c2luZyBhIGNsaWVudCBzcGVjLCBvbmx5IGFkZCB0aGUgZmlsZXMgdGhhdCBoYXZlCisgICAgICAgICAgICAjIGEgcGF0aCBpbiB0aGUgY2xpZW50CisgICAgICAgICAgICBpZiBzZWxmLmNsaWVudFNwZWNEaXJzOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY2xpZW50U3BlY0RpcnMubWFwX2luX2NsaWVudChmWydwYXRoJ10pID09ICIiOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmaWxlc0ZvckNvbW1pdC5hcHBlbmQoZikKKyAgICAgICAgICAgIGlmIGZbJ2FjdGlvbiddIGluIHNlbGYuZGVsZXRlX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgZmlsZXNUb0RlbGV0ZS5hcHBlbmQoZikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZXNUb1JlYWQuYXBwZW5kKGYpCisKKyAgICAgICAgIyBkZWxldGVkIGZpbGVzLi4uCisgICAgICAgIGZvciBmIGluIGZpbGVzVG9EZWxldGU6CisgICAgICAgICAgICBzZWxmLnN0cmVhbU9uZVA0RGVsZXRpb24oZikKKworICAgICAgICBpZiBsZW4oZmlsZXNUb1JlYWQpID4gMDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtX2ZpbGUgPSB7fQorICAgICAgICAgICAgc2VsZi5zdHJlYW1fY29udGVudHMgPSBbXQorICAgICAgICAgICAgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm8gPSBGYWxzZQorCisgICAgICAgICAgICAjIGN1cnJ5IHNlbGYgYXJndW1lbnQKKyAgICAgICAgICAgIGRlZiBzdHJlYW1QNEZpbGVzQ2JTZWxmKGVudHJ5KToKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbVA0RmlsZXNDYihlbnRyeSkKKworICAgICAgICAgICAgZmlsZUFyZ3MgPSBbJyVzIyVzJyAlIChmWydwYXRoJ10sIGZbJ3JldiddKSBmb3IgZiBpbiBmaWxlc1RvUmVhZF0KKworICAgICAgICAgICAgcDRDbWRMaXN0KFsiLXgiLCAiLSIsICJwcmludCJdLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPWZpbGVBcmdzLAorICAgICAgICAgICAgICAgICAgICAgIGNiPXN0cmVhbVA0RmlsZXNDYlNlbGYpCisKKyAgICAgICAgICAgICMgZG8gdGhlIGxhc3QgY2h1bmsKKyAgICAgICAgICAgIGlmIHNlbGYuc3RyZWFtX2ZpbGUuaGFzX2tleSgnZGVwb3RGaWxlJyk6CisgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW1PbmVQNEZpbGUoc2VsZi5zdHJlYW1fZmlsZSwgc2VsZi5zdHJlYW1fY29udGVudHMpCisKKyAgICBkZWYgbWFrZV9lbWFpbChzZWxmLCB1c2VyaWQpOgorICAgICAgICBpZiB1c2VyaWQgaW4gc2VsZi51c2VyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnVzZXJzW3VzZXJpZF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiJXMgPGFAYj4iICUgdXNlcmlkCisKKyAgICAjIFN0cmVhbSBhIHA0IHRhZworICAgIGRlZiBzdHJlYW1UYWcoc2VsZiwgZ2l0U3RyZWFtLCBsYWJlbE5hbWUsIGxhYmVsRGV0YWlscywgY29tbWl0LCBlcG9jaCk6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAid3JpdGluZyB0YWcgJXMgZm9yIGNvbW1pdCAlcyIgJSAobGFiZWxOYW1lLCBjb21taXQpCisgICAgICAgIGdpdFN0cmVhbS53cml0ZSgidGFnICVzXG4iICUgbGFiZWxOYW1lKQorICAgICAgICBnaXRTdHJlYW0ud3JpdGUoImZyb20gJXNcbiIgJSBjb21taXQpCisKKyAgICAgICAgaWYgbGFiZWxEZXRhaWxzLmhhc19rZXkoJ093bmVyJyk6CisgICAgICAgICAgICBvd25lciA9IGxhYmVsRGV0YWlsc1siT3duZXIiXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3duZXIgPSBOb25lCisKKyAgICAgICAgIyBUcnkgdG8gdXNlIHRoZSBvd25lciBvZiB0aGUgcDQgbGFiZWwsIG9yIGZhaWxpbmcgdGhhdCwKKyAgICAgICAgIyB0aGUgY3VycmVudCBwNCB1c2VyIGlkLgorICAgICAgICBpZiBvd25lcjoKKyAgICAgICAgICAgIGVtYWlsID0gc2VsZi5tYWtlX2VtYWlsKG93bmVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW1haWwgPSBzZWxmLm1ha2VfZW1haWwoc2VsZi5wNFVzZXJJZCgpKQorICAgICAgICB0YWdnZXIgPSAiJXMgJXMgJXMiICUgKGVtYWlsLCBlcG9jaCwgc2VsZi50eikKKworICAgICAgICBnaXRTdHJlYW0ud3JpdGUoInRhZ2dlciAlc1xuIiAlIHRhZ2dlcikKKworICAgICAgICBwcmludCAibGFiZWxEZXRhaWxzPSIsbGFiZWxEZXRhaWxzCisgICAgICAgIGlmIGxhYmVsRGV0YWlscy5oYXNfa2V5KCdEZXNjcmlwdGlvbicpOgorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBsYWJlbERldGFpbHNbJ0Rlc2NyaXB0aW9uJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gJ0xhYmVsIGZyb20gZ2l0IHA0JworCisgICAgICAgIGdpdFN0cmVhbS53cml0ZSgiZGF0YSAlZFxuIiAlIGxlbihkZXNjcmlwdGlvbikpCisgICAgICAgIGdpdFN0cmVhbS53cml0ZShkZXNjcmlwdGlvbikKKyAgICAgICAgZ2l0U3RyZWFtLndyaXRlKCJcbiIpCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIGRldGFpbHMsIGZpbGVzLCBicmFuY2gsIHBhcmVudCA9ICIiKToKKyAgICAgICAgZXBvY2ggPSBkZXRhaWxzWyJ0aW1lIl0KKyAgICAgICAgYXV0aG9yID0gZGV0YWlsc1sidXNlciJdCisKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImNvbW1pdCBpbnRvICVzIiAlIGJyYW5jaAorCisgICAgICAgICMgc3RhcnQgd2l0aCByZWFkaW5nIGZpbGVzOyBpZiB0aGF0IGZhaWxzLCB3ZSBzaG91bGQgbm90CisgICAgICAgICMgY3JlYXRlIGEgY29tbWl0LgorICAgICAgICBuZXdfZmlsZXMgPSBbXQorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIFtwIGZvciBwIGluIHNlbGYuYnJhbmNoUHJlZml4ZXMgaWYgcDRQYXRoU3RhcnRzV2l0aChmWydwYXRoJ10sIHApXToKKyAgICAgICAgICAgICAgICBuZXdfZmlsZXMuYXBwZW5kIChmKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJZ25vcmluZyBmaWxlIG91dHNpZGUgb2YgcHJlZml4OiAlc1xuIiAlIGZbJ3BhdGgnXSkKKworICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiY29tbWl0ICVzXG4iICUgYnJhbmNoKQorIyAgICAgICAgZ2l0U3RyZWFtLndyaXRlKCJtYXJrIDolc1xuIiAlIGRldGFpbHNbImNoYW5nZSJdKQorICAgICAgICBzZWxmLmNvbW1pdHRlZENoYW5nZXMuYWRkKGludChkZXRhaWxzWyJjaGFuZ2UiXSkpCisgICAgICAgIGNvbW1pdHRlciA9ICIiCisgICAgICAgIGlmIGF1dGhvciBub3QgaW4gc2VsZi51c2VyczoKKyAgICAgICAgICAgIHNlbGYuZ2V0VXNlck1hcEZyb21QZXJmb3JjZVNlcnZlcigpCisgICAgICAgIGNvbW1pdHRlciA9ICIlcyAlcyAlcyIgJSAoc2VsZi5tYWtlX2VtYWlsKGF1dGhvciksIGVwb2NoLCBzZWxmLnR6KQorCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJjb21taXR0ZXIgJXNcbiIgJSBjb21taXR0ZXIpCisKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoImRhdGEgPDxFT1RcbiIpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKGRldGFpbHNbImRlc2MiXSkKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoIlxuW2dpdC1wNDogZGVwb3QtcGF0aHMgPSBcIiVzXCI6IGNoYW5nZSA9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLCcuam9pbihzZWxmLmJyYW5jaFByZWZpeGVzKSwgZGV0YWlsc1siY2hhbmdlIl0pKQorICAgICAgICBpZiBsZW4oZGV0YWlsc1snb3B0aW9ucyddKSA+IDA6CisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiOiBvcHRpb25zID0gJXMiICUgZGV0YWlsc1snb3B0aW9ucyddKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiXVxuRU9UXG5cbiIpCisKKyAgICAgICAgaWYgbGVuKHBhcmVudCkgPiAwOgorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJwYXJlbnQgJXMiICUgcGFyZW50CisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiZnJvbSAlc1xuIiAlIHBhcmVudCkKKworICAgICAgICBzZWxmLnN0cmVhbVA0RmlsZXMobmV3X2ZpbGVzKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGNoYW5nZSA9IGludChkZXRhaWxzWyJjaGFuZ2UiXSkKKworICAgICAgICBpZiBzZWxmLmxhYmVscy5oYXNfa2V5KGNoYW5nZSk6CisgICAgICAgICAgICBsYWJlbCA9IHNlbGYubGFiZWxzW2NoYW5nZV0KKyAgICAgICAgICAgIGxhYmVsRGV0YWlscyA9IGxhYmVsWzBdCisgICAgICAgICAgICBsYWJlbFJldmlzaW9ucyA9IGxhYmVsWzFdCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIkNoYW5nZSAlcyBpcyBsYWJlbGxlZCAlcyIgJSAoY2hhbmdlLCBsYWJlbERldGFpbHMpCisKKyAgICAgICAgICAgIGZpbGVzID0gcDRDbWRMaXN0KFsiZmlsZXMiXSArIFsiJXMuLi5AJXMiICUgKHAsIGNoYW5nZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuYnJhbmNoUHJlZml4ZXNdKQorCisgICAgICAgICAgICBpZiBsZW4oZmlsZXMpID09IGxlbihsYWJlbFJldmlzaW9ucyk6CisKKyAgICAgICAgICAgICAgICBjbGVhbmVkRmlsZXMgPSB7fQorICAgICAgICAgICAgICAgIGZvciBpbmZvIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmZvWyJhY3Rpb24iXSBpbiBzZWxmLmRlbGV0ZV9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgY2xlYW5lZEZpbGVzW2luZm9bImRlcG90RmlsZSJdXSA9IGluZm9bInJldiJdCisKKyAgICAgICAgICAgICAgICBpZiBjbGVhbmVkRmlsZXMgPT0gbGFiZWxSZXZpc2lvbnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtVGFnKHNlbGYuZ2l0U3RyZWFtLCAndGFnXyVzJyAlIGxhYmVsRGV0YWlsc1snbGFiZWwnXSwgbGFiZWxEZXRhaWxzLCBicmFuY2gsIGVwb2NoKQorCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJUYWcgJXMgZG9lcyBub3QgbWF0Y2ggd2l0aCBjaGFuZ2UgJXM6IGZpbGVzIGRvIG5vdCBtYXRjaC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobGFiZWxEZXRhaWxzWyJsYWJlbCJdLCBjaGFuZ2UpKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJUYWcgJXMgZG9lcyBub3QgbWF0Y2ggd2l0aCBjaGFuZ2UgJXM6IGZpbGUgY291bnQgaXMgZGlmZmVyZW50LiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxhYmVsRGV0YWlsc1sibGFiZWwiXSwgY2hhbmdlKSkKKworICAgICMgQnVpbGQgYSBkaWN0aW9uYXJ5IG9mIGNoYW5nZWxpc3RzIGFuZCBsYWJlbHMsIGZvciAiZGV0ZWN0LWxhYmVscyIgb3B0aW9uLgorICAgIGRlZiBnZXRMYWJlbHMoc2VsZik6CisgICAgICAgIHNlbGYubGFiZWxzID0ge30KKworICAgICAgICBsID0gcDRDbWRMaXN0KFsibGFiZWxzIl0gKyBbIiVzLi4uIiAlIHAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzXSkKKyAgICAgICAgaWYgbGVuKGwpID4gMCBhbmQgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgcHJpbnQgIkZpbmRpbmcgZmlsZXMgYmVsb25naW5nIHRvIGxhYmVscyBpbiAlcyIgJSBgc2VsZi5kZXBvdFBhdGhzYAorCisgICAgICAgIGZvciBvdXRwdXQgaW4gbDoKKyAgICAgICAgICAgIGxhYmVsID0gb3V0cHV0WyJsYWJlbCJdCisgICAgICAgICAgICByZXZpc2lvbnMgPSB7fQorICAgICAgICAgICAgbmV3ZXN0Q2hhbmdlID0gMAorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJRdWVyeWluZyBmaWxlcyBmb3IgbGFiZWwgJXMiICUgbGFiZWwKKyAgICAgICAgICAgIGZvciBmaWxlIGluIHA0Q21kTGlzdChbImZpbGVzIl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIiVzLi4uQCVzIiAlIChwLCBsYWJlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuZGVwb3RQYXRoc10pOgorICAgICAgICAgICAgICAgIHJldmlzaW9uc1tmaWxlWyJkZXBvdEZpbGUiXV0gPSBmaWxlWyJyZXYiXQorICAgICAgICAgICAgICAgIGNoYW5nZSA9IGludChmaWxlWyJjaGFuZ2UiXSkKKyAgICAgICAgICAgICAgICBpZiBjaGFuZ2UgPiBuZXdlc3RDaGFuZ2U6CisgICAgICAgICAgICAgICAgICAgIG5ld2VzdENoYW5nZSA9IGNoYW5nZQorCisgICAgICAgICAgICBzZWxmLmxhYmVsc1tuZXdlc3RDaGFuZ2VdID0gW291dHB1dCwgcmV2aXNpb25zXQorCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJMYWJlbCBjaGFuZ2VzOiAlcyIgJSBzZWxmLmxhYmVscy5rZXlzKCkKKworICAgICMgSW1wb3J0IHA0IGxhYmVscyBhcyBnaXQgdGFncy4gQSBkaXJlY3QgbWFwcGluZyBkb2VzIG5vdAorICAgICMgZXhpc3QsIHNvIGFzc3VtZSB0aGF0IGlmIGFsbCB0aGUgZmlsZXMgYXJlIGF0IHRoZSBzYW1lIHJldmlzaW9uCisgICAgIyB0aGVuIHdlIGNhbiB1c2UgdGhhdCwgb3IgaXQncyBzb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZCB3ZSBzaG91bGQKKyAgICAjIGp1c3QgaWdub3JlLgorICAgIGRlZiBpbXBvcnRQNExhYmVscyhzZWxmLCBzdHJlYW0sIHA0TGFiZWxzKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJpbXBvcnQgcDQgbGFiZWxzOiAiICsgJyAnLmpvaW4ocDRMYWJlbHMpCisKKyAgICAgICAgaWdub3JlZFA0TGFiZWxzID0gZ2l0Q29uZmlnTGlzdCgiZ2l0LXA0Lmlnbm9yZWRQNExhYmVscyIpCisgICAgICAgIHZhbGlkTGFiZWxSZWdleHAgPSBnaXRDb25maWcoImdpdC1wNC5sYWJlbEltcG9ydFJlZ2V4cCIpCisgICAgICAgIGlmIGxlbih2YWxpZExhYmVsUmVnZXhwKSA9PSAwOgorICAgICAgICAgICAgdmFsaWRMYWJlbFJlZ2V4cCA9IGRlZmF1bHRMYWJlbFJlZ2V4cAorICAgICAgICBtID0gcmUuY29tcGlsZSh2YWxpZExhYmVsUmVnZXhwKQorCisgICAgICAgIGZvciBuYW1lIGluIHA0TGFiZWxzOgorICAgICAgICAgICAgY29tbWl0Rm91bmQgPSBGYWxzZQorCisgICAgICAgICAgICBpZiBub3QgbS5tYXRjaChuYW1lKToKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAibGFiZWwgJXMgZG9lcyBub3QgbWF0Y2ggcmVnZXhwICVzIiAlIChuYW1lLHZhbGlkTGFiZWxSZWdleHApCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbmFtZSBpbiBpZ25vcmVkUDRMYWJlbHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbGFiZWxEZXRhaWxzID0gcDRDbWRMaXN0KFsnbGFiZWwnLCAiLW8iLCBuYW1lXSlbMF0KKworICAgICAgICAgICAgIyBnZXQgdGhlIG1vc3QgcmVjZW50IGNoYW5nZWxpc3QgZm9yIGVhY2ggZmlsZSBpbiB0aGlzIGxhYmVsCisgICAgICAgICAgICBjaGFuZ2UgPSBwNENtZChbImNoYW5nZXMiLCAiLW0iLCAiMSJdICsgWyIlcy4uLkAlcyIgJSAocCwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzXSkKKworICAgICAgICAgICAgaWYgY2hhbmdlLmhhc19rZXkoJ2NoYW5nZScpOgorICAgICAgICAgICAgICAgICMgZmluZCB0aGUgY29ycmVzcG9uZGluZyBnaXQgY29tbWl0OyB0YWtlIHRoZSBvbGRlc3QgY29tbWl0CisgICAgICAgICAgICAgICAgY2hhbmdlbGlzdCA9IGludChjaGFuZ2VbJ2NoYW5nZSddKQorICAgICAgICAgICAgICAgIGdpdENvbW1pdCA9IHJlYWRfcGlwZShbImdpdCIsICJyZXYtbGlzdCIsICItLW1heC1jb3VudD0xIiwKKyAgICAgICAgICAgICAgICAgICAgICItLXJldmVyc2UiLCAiOi9cW2dpdC1wNDouKmNoYW5nZSA9ICVkXF0iICUgY2hhbmdlbGlzdF0pCisgICAgICAgICAgICAgICAgaWYgbGVuKGdpdENvbW1pdCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgImNvdWxkIG5vdCBmaW5kIGdpdCBjb21taXQgZm9yIGNoYW5nZWxpc3QgJWQiICUgY2hhbmdlbGlzdAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGdpdENvbW1pdCA9IGdpdENvbW1pdC5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdEZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAjIENvbnZlcnQgZnJvbSBwNCB0aW1lIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0bXdoZW4gPSB0aW1lLnN0cnB0aW1lKGxhYmVsRGV0YWlsc1snVXBkYXRlJ10sICIlWS8lbS8lZCAlSDolTTolUyIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCBjb252ZXJ0IGxhYmVsIHRpbWUgJXMiICUgbGFiZWxEZXRhaWxbJ1VwZGF0ZSddCisgICAgICAgICAgICAgICAgICAgICAgICB0bXdoZW4gPSAxCisKKyAgICAgICAgICAgICAgICAgICAgd2hlbiA9IGludCh0aW1lLm1rdGltZSh0bXdoZW4pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbVRhZyhzdHJlYW0sIG5hbWUsIGxhYmVsRGV0YWlscywgZ2l0Q29tbWl0LCB3aGVuKQorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgInA0IGxhYmVsICVzIG1hcHBlZCB0byBnaXQgY29tbWl0ICVzIiAlIChuYW1lLCBnaXRDb21taXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJMYWJlbCAlcyBoYXMgbm8gY2hhbmdlbGlzdHMgLSBwb3NzaWJseSBkZWxldGVkPyIgJSBuYW1lCisKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXRGb3VuZDoKKyAgICAgICAgICAgICAgICAjIFdlIGNhbid0IGltcG9ydCB0aGlzIGxhYmVsOyBkb24ndCB0cnkgYWdhaW4gYXMgaXQgd2lsbCBnZXQgdmVyeQorICAgICAgICAgICAgICAgICMgZXhwZW5zaXZlIHJlcGVhdGVkbHkgZmV0Y2hpbmcgYWxsIHRoZSBmaWxlcyBmb3IgbGFiZWxzIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgICMgbmV2ZXIgYmUgaW1wb3J0ZWQuIElmIHRoZSBsYWJlbCBpcyBtb3ZlZCBpbiB0aGUgZnV0dXJlLCB0aGUKKyAgICAgICAgICAgICAgICAjIGlnbm9yZSB3aWxsIG5lZWQgdG8gYmUgcmVtb3ZlZCBtYW51YWxseS4KKyAgICAgICAgICAgICAgICBzeXN0ZW0oWyJnaXQiLCAiY29uZmlnIiwgIi0tYWRkIiwgImdpdC1wNC5pZ25vcmVkUDRMYWJlbHMiLCBuYW1lXSkKKworICAgIGRlZiBndWVzc1Byb2plY3ROYW1lKHNlbGYpOgorICAgICAgICBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHM6CisgICAgICAgICAgICBpZiBwLmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgcCA9IHBbOi0xXQorICAgICAgICAgICAgcCA9IHBbcC5zdHJpcCgpLnJmaW5kKCIvIikgKyAxOl0KKyAgICAgICAgICAgIGlmIG5vdCBwLmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICBwICs9ICIvIgorICAgICAgICAgICAgcmV0dXJuIHAKKworICAgIGRlZiBnZXRCcmFuY2hNYXBwaW5nKHNlbGYpOgorICAgICAgICBsb3N0QW5kRm91bmRCcmFuY2hlcyA9IHNldCgpCisKKyAgICAgICAgdXNlciA9IGdpdENvbmZpZygiZ2l0LXA0LmJyYW5jaFVzZXIiKQorICAgICAgICBpZiBsZW4odXNlcikgPiAwOgorICAgICAgICAgICAgY29tbWFuZCA9ICJicmFuY2hlcyAtdSAlcyIgJSB1c2VyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21tYW5kID0gImJyYW5jaGVzIgorCisgICAgICAgIGZvciBpbmZvIGluIHA0Q21kTGlzdChjb21tYW5kKToKKyAgICAgICAgICAgIGRldGFpbHMgPSBwNENtZChbImJyYW5jaCIsICItbyIsIGluZm9bImJyYW5jaCJdXSkKKyAgICAgICAgICAgIHZpZXdJZHggPSAwCisgICAgICAgICAgICB3aGlsZSBkZXRhaWxzLmhhc19rZXkoIlZpZXclcyIgJSB2aWV3SWR4KToKKyAgICAgICAgICAgICAgICBwYXRocyA9IGRldGFpbHNbIlZpZXclcyIgJSB2aWV3SWR4XS5zcGxpdCgiICIpCisgICAgICAgICAgICAgICAgdmlld0lkeCA9IHZpZXdJZHggKyAxCisgICAgICAgICAgICAgICAgIyByZXF1aXJlIHN0YW5kYXJkIC8vZGVwb3QvZm9vLy4uLiAvL2RlcG90L2Jhci8uLi4gbWFwcGluZworICAgICAgICAgICAgICAgIGlmIGxlbihwYXRocykgIT0gMiBvciBub3QgcGF0aHNbMF0uZW5kc3dpdGgoIi8uLi4iKSBvciBub3QgcGF0aHNbMV0uZW5kc3dpdGgoIi8uLi4iKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBwYXRoc1swXQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gcGF0aHNbMV0KKyAgICAgICAgICAgICAgICAjIyBIQUNLCisgICAgICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChzb3VyY2UsIHNlbGYuZGVwb3RQYXRoc1swXSkgYW5kIHA0UGF0aFN0YXJ0c1dpdGgoZGVzdGluYXRpb24sIHNlbGYuZGVwb3RQYXRoc1swXSk6CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZVtsZW4oc2VsZi5kZXBvdFBhdGhzWzBdKTotNF0KKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbltsZW4oc2VsZi5kZXBvdFBhdGhzWzBdKTotNF0KKworICAgICAgICAgICAgICAgICAgICBpZiBkZXN0aW5hdGlvbiBpbiBzZWxmLmtub3duQnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgInA0IGJyYW5jaCAlcyBkZWZpbmVzIGEgbWFwcGluZyBmcm9tICVzIHRvICVzIiAlIChpbmZvWyJicmFuY2giXSwgc291cmNlLCBkZXN0aW5hdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiYnV0IHRoZXJlIGV4aXN0cyBhbm90aGVyIG1hcHBpbmcgZnJvbSAlcyB0byAlcyBhbHJlYWR5ISIgJSAoc2VsZi5rbm93bkJyYW5jaGVzW2Rlc3RpbmF0aW9uXSwgZGVzdGluYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYua25vd25CcmFuY2hlc1tkZXN0aW5hdGlvbl0gPSBzb3VyY2UKKworICAgICAgICAgICAgICAgICAgICBsb3N0QW5kRm91bmRCcmFuY2hlcy5kaXNjYXJkKGRlc3RpbmF0aW9uKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHNvdXJjZSBub3QgaW4gc2VsZi5rbm93bkJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9zdEFuZEZvdW5kQnJhbmNoZXMuYWRkKHNvdXJjZSkKKworICAgICAgICAjIFBlcmZvcmNlIGRvZXMgbm90IHN0cmljdGx5IHJlcXVpcmUgYnJhbmNoZXMgdG8gYmUgZGVmaW5lZCwgc28gd2UgYWxzbworICAgICAgICAjIGNoZWNrIGdpdCBjb25maWcgZm9yIGEgYnJhbmNoIGxpc3QuCisgICAgICAgICMKKyAgICAgICAgIyBFeGFtcGxlIG9mIGJyYW5jaCBkZWZpbml0aW9uIGluIGdpdCBjb25maWcgZmlsZToKKyAgICAgICAgIyBbZ2l0LXA0XQorICAgICAgICAjICAgYnJhbmNoTGlzdD1tYWluOmJyYW5jaEEKKyAgICAgICAgIyAgIGJyYW5jaExpc3Q9bWFpbjpicmFuY2hCCisgICAgICAgICMgICBicmFuY2hMaXN0PWJyYW5jaEE6YnJhbmNoQworICAgICAgICBjb25maWdCcmFuY2hlcyA9IGdpdENvbmZpZ0xpc3QoImdpdC1wNC5icmFuY2hMaXN0IikKKyAgICAgICAgZm9yIGJyYW5jaCBpbiBjb25maWdCcmFuY2hlczoKKyAgICAgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgICAgICAoc291cmNlLCBkZXN0aW5hdGlvbikgPSBicmFuY2guc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgIHNlbGYua25vd25CcmFuY2hlc1tkZXN0aW5hdGlvbl0gPSBzb3VyY2UKKworICAgICAgICAgICAgICAgIGxvc3RBbmRGb3VuZEJyYW5jaGVzLmRpc2NhcmQoZGVzdGluYXRpb24pCisKKyAgICAgICAgICAgICAgICBpZiBzb3VyY2Ugbm90IGluIHNlbGYua25vd25CcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgbG9zdEFuZEZvdW5kQnJhbmNoZXMuYWRkKHNvdXJjZSkKKworCisgICAgICAgIGZvciBicmFuY2ggaW4gbG9zdEFuZEZvdW5kQnJhbmNoZXM6CisgICAgICAgICAgICBzZWxmLmtub3duQnJhbmNoZXNbYnJhbmNoXSA9IGJyYW5jaAorCisgICAgZGVmIGdldEJyYW5jaE1hcHBpbmdGcm9tR2l0QnJhbmNoZXMoc2VsZik6CisgICAgICAgIGJyYW5jaGVzID0gcDRCcmFuY2hlc0luR2l0KHNlbGYuaW1wb3J0SW50b1JlbW90ZXMpCisgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoZXMua2V5cygpOgorICAgICAgICAgICAgaWYgYnJhbmNoID09ICJtYXN0ZXIiOgorICAgICAgICAgICAgICAgIGJyYW5jaCA9ICJtYWluIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmFuY2ggPSBicmFuY2hbbGVuKHNlbGYucHJvamVjdE5hbWUpOl0KKyAgICAgICAgICAgIHNlbGYua25vd25CcmFuY2hlc1ticmFuY2hdID0gYnJhbmNoCisKKyAgICBkZWYgbGlzdEV4aXN0aW5nUDRHaXRCcmFuY2hlcyhzZWxmKToKKyAgICAgICAgIyBicmFuY2hlcyBob2xkcyBtYXBwaW5nIGZyb20gbmFtZSB0byBjb21taXQKKyAgICAgICAgYnJhbmNoZXMgPSBwNEJyYW5jaGVzSW5HaXQoc2VsZi5pbXBvcnRJbnRvUmVtb3RlcykKKyAgICAgICAgc2VsZi5wNEJyYW5jaGVzSW5HaXQgPSBicmFuY2hlcy5rZXlzKCkKKyAgICAgICAgZm9yIGJyYW5jaCBpbiBicmFuY2hlcy5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnRzW3NlbGYucmVmUHJlZml4ICsgYnJhbmNoXSA9IGJyYW5jaGVzW2JyYW5jaF0KKworICAgIGRlZiB1cGRhdGVPcHRpb25EaWN0KHNlbGYsIGQpOgorICAgICAgICBvcHRpb25fa2V5cyA9IHt9CisgICAgICAgIGlmIHNlbGYua2VlcFJlcG9QYXRoOgorICAgICAgICAgICAgb3B0aW9uX2tleXNbJ2tlZXBSZXBvUGF0aCddID0gMQorCisgICAgICAgIGRbIm9wdGlvbnMiXSA9ICcgJy5qb2luKHNvcnRlZChvcHRpb25fa2V5cy5rZXlzKCkpKQorCisgICAgZGVmIHJlYWRPcHRpb25zKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmtlZXBSZXBvUGF0aCA9IChkLmhhc19rZXkoJ29wdGlvbnMnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgKCdrZWVwUmVwb1BhdGgnIGluIGRbJ29wdGlvbnMnXSkpCisKKyAgICBkZWYgZ2l0UmVmRm9yQnJhbmNoKHNlbGYsIGJyYW5jaCk6CisgICAgICAgIGlmIGJyYW5jaCA9PSAibWFpbiI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWZQcmVmaXggKyAibWFzdGVyIgorCisgICAgICAgIGlmIGxlbihicmFuY2gpIDw9IDA6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmVmUHJlZml4ICsgc2VsZi5wcm9qZWN0TmFtZSArIGJyYW5jaAorCisgICAgZGVmIGdpdENvbW1pdEJ5UDRDaGFuZ2Uoc2VsZiwgcmVmLCBjaGFuZ2UpOgorICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAibG9va2luZyBpbiByZWYgIiArIHJlZiArICIgZm9yIGNoYW5nZSAlcyB1c2luZyBiaXNlY3QuLi4iICUgY2hhbmdlCisKKyAgICAgICAgZWFybGllc3RDb21taXQgPSAiIgorICAgICAgICBsYXRlc3RDb21taXQgPSBwYXJzZVJldmlzaW9uKHJlZikKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJ0cnlpbmc6IGVhcmxpZXN0ICVzIGxhdGVzdCAlcyIgJSAoZWFybGllc3RDb21taXQsIGxhdGVzdENvbW1pdCkKKyAgICAgICAgICAgIG5leHQgPSByZWFkX3BpcGUoImdpdCByZXYtbGlzdCAtLWJpc2VjdCAlcyAlcyIgJSAobGF0ZXN0Q29tbWl0LCBlYXJsaWVzdENvbW1pdCkpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGxlbihuZXh0KSA9PSAwOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgImFyZ2giCisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICAgICBsb2cgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQobmV4dCkKKyAgICAgICAgICAgIHNldHRpbmdzID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZykKKyAgICAgICAgICAgIGN1cnJlbnRDaGFuZ2UgPSBpbnQoc2V0dGluZ3NbJ2NoYW5nZSddKQorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJjdXJyZW50IGNoYW5nZSAlcyIgJSBjdXJyZW50Q2hhbmdlCisKKyAgICAgICAgICAgIGlmIGN1cnJlbnRDaGFuZ2UgPT0gY2hhbmdlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgImZvdW5kICVzIiAlIG5leHQKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4dAorCisgICAgICAgICAgICBpZiBjdXJyZW50Q2hhbmdlIDwgY2hhbmdlOgorICAgICAgICAgICAgICAgIGVhcmxpZXN0Q29tbWl0ID0gIl4lcyIgJSBuZXh0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxhdGVzdENvbW1pdCA9ICIlcyIgJSBuZXh0CisKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgaW1wb3J0TmV3QnJhbmNoKHNlbGYsIGJyYW5jaCwgbWF4Q2hhbmdlKToKKyAgICAgICAgIyBtYWtlIGZhc3QtaW1wb3J0IGZsdXNoIGFsbCBjaGFuZ2VzIHRvIGRpc2sgYW5kIHVwZGF0ZSB0aGUgcmVmcyB1c2luZyB0aGUgY2hlY2twb2ludAorICAgICAgICAjIGNvbW1hbmQgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgdGhlIGJyYW5jaCBwYXJlbnQgaW4gdGhlIGdpdCBoaXN0b3J5CisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJjaGVja3BvaW50XG5cbiIpOworICAgICAgICBzZWxmLmdpdFN0cmVhbS5mbHVzaCgpOworICAgICAgICBicmFuY2hQcmVmaXggPSBzZWxmLmRlcG90UGF0aHNbMF0gKyBicmFuY2ggKyAiLyIKKyAgICAgICAgcmFuZ2UgPSAiQDEsJXMiICUgbWF4Q2hhbmdlCisgICAgICAgICNwcmludCAicHJlZml4IiArIGJyYW5jaFByZWZpeAorICAgICAgICBjaGFuZ2VzID0gcDRDaGFuZ2VzRm9yUGF0aHMoW2JyYW5jaFByZWZpeF0sIHJhbmdlKQorICAgICAgICBpZiBsZW4oY2hhbmdlcykgPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmaXJzdENoYW5nZSA9IGNoYW5nZXNbMF0KKyAgICAgICAgI3ByaW50ICJmaXJzdCBjaGFuZ2UgaW4gYnJhbmNoOiAlcyIgJSBmaXJzdENoYW5nZQorICAgICAgICBzb3VyY2VCcmFuY2ggPSBzZWxmLmtub3duQnJhbmNoZXNbYnJhbmNoXQorICAgICAgICBzb3VyY2VEZXBvdFBhdGggPSBzZWxmLmRlcG90UGF0aHNbMF0gKyBzb3VyY2VCcmFuY2gKKyAgICAgICAgc291cmNlUmVmID0gc2VsZi5naXRSZWZGb3JCcmFuY2goc291cmNlQnJhbmNoKQorICAgICAgICAjcHJpbnQgInNvdXJjZSAiICsgc291cmNlQnJhbmNoCisKKyAgICAgICAgYnJhbmNoUGFyZW50Q2hhbmdlID0gaW50KHA0Q21kKFsiY2hhbmdlcyIsICItbSIsICIxIiwgIiVzLi4uQDEsJXMiICUgKHNvdXJjZURlcG90UGF0aCwgZmlyc3RDaGFuZ2UpXSlbImNoYW5nZSJdKQorICAgICAgICAjcHJpbnQgImJyYW5jaCBwYXJlbnQ6ICVzIiAlIGJyYW5jaFBhcmVudENoYW5nZQorICAgICAgICBnaXRQYXJlbnQgPSBzZWxmLmdpdENvbW1pdEJ5UDRDaGFuZ2Uoc291cmNlUmVmLCBicmFuY2hQYXJlbnRDaGFuZ2UpCisgICAgICAgIGlmIGxlbihnaXRQYXJlbnQpID4gMDoKKyAgICAgICAgICAgIHNlbGYuaW5pdGlhbFBhcmVudHNbc2VsZi5naXRSZWZGb3JCcmFuY2goYnJhbmNoKV0gPSBnaXRQYXJlbnQKKyAgICAgICAgICAgICNwcmludCAicGFyZW50IGdpdCBjb21taXQ6ICVzIiAlIGdpdFBhcmVudAorCisgICAgICAgIHNlbGYuaW1wb3J0Q2hhbmdlcyhjaGFuZ2VzKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNlYXJjaFBhcmVudChzZWxmLCBwYXJlbnQsIGJyYW5jaCwgdGFyZ2V0KToKKyAgICAgICAgcGFyZW50Rm91bmQgPSBGYWxzZQorICAgICAgICBmb3IgYmxvYiBpbiByZWFkX3BpcGVfbGluZXMoWyJnaXQiLCAicmV2LWxpc3QiLCAiLS1yZXZlcnNlIiwgIi0tbm8tbWVyZ2VzIiwgcGFyZW50XSk6CisgICAgICAgICAgICBibG9iID0gYmxvYi5zdHJpcCgpCisgICAgICAgICAgICBpZiBsZW4ocmVhZF9waXBlKFsiZ2l0IiwgImRpZmYtdHJlZSIsIGJsb2IsIHRhcmdldF0pKSA9PSAwOgorICAgICAgICAgICAgICAgIHBhcmVudEZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kIHBhcmVudCBvZiAlcyBpbiBjb21taXQgJXMiICUgKGJyYW5jaCwgYmxvYikKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBwYXJlbnRGb3VuZDoKKyAgICAgICAgICAgIHJldHVybiBibG9iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGltcG9ydENoYW5nZXMoc2VsZiwgY2hhbmdlcyk6CisgICAgICAgIGNudCA9IDEKKyAgICAgICAgZm9yIGNoYW5nZSBpbiBjaGFuZ2VzOgorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBwNENtZChbImRlc2NyaWJlIiwgc3RyKGNoYW5nZSldKQorICAgICAgICAgICAgc2VsZi51cGRhdGVPcHRpb25EaWN0KGRlc2NyaXB0aW9uKQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXHJJbXBvcnRpbmcgcmV2aXNpb24gJXMgKCVzJSUpIiAlIChjaGFuZ2UsIGNudCAqIDEwMCAvIGxlbihjaGFuZ2VzKSkpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICBjbnQgPSBjbnQgKyAxCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmRldGVjdEJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICBicmFuY2hlcyA9IHNlbGYuc3BsaXRGaWxlc0ludG9CcmFuY2hlcyhkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBicmFuY2hlcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIyBIQUNLICAtLWh3bgorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoUHJlZml4ID0gc2VsZi5kZXBvdFBhdGhzWzBdICsgYnJhbmNoICsgIi8iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJyYW5jaFByZWZpeGVzID0gWyBicmFuY2hQcmVmaXggXQorCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSAiIgorCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc0ZvckNvbW1pdCA9IGJyYW5jaGVzW2JyYW5jaF0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJicmFuY2ggaXMgJXMiICUgYnJhbmNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlZEJyYW5jaGVzLmFkZChicmFuY2gpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJyYW5jaCBub3QgaW4gc2VsZi5jcmVhdGVkQnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVkQnJhbmNoZXMuYWRkKGJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLmtub3duQnJhbmNoZXNbYnJhbmNoXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmVudCA9PSBicmFuY2g6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbEJyYW5jaCA9IHNlbGYucHJvamVjdE5hbWUgKyBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZnVsbEJyYW5jaCBub3QgaW4gc2VsZi5wNEJyYW5jaGVzSW5HaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlxuICAgIEltcG9ydGluZyBuZXcgYnJhbmNoICVzIiAlIGZ1bGxCcmFuY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5pbXBvcnROZXdCcmFuY2goYnJhbmNoLCBjaGFuZ2UgLSAxKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucDRCcmFuY2hlc0luR2l0LmFwcGVuZChmdWxsQnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJcbiAgICBSZXN1bWluZyB3aXRoIGNoYW5nZSAlcyIgJSBjaGFuZ2UpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJwYXJlbnQgZGV0ZXJtaW5lZCB0aHJvdWdoIGtub3duIGJyYW5jaGVzOiAlcyIgJSBwYXJlbnQKKworICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoID0gc2VsZi5naXRSZWZGb3JCcmFuY2goYnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi5naXRSZWZGb3JCcmFuY2gocGFyZW50KQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImxvb2tpbmcgZm9yIGluaXRpYWwgcGFyZW50IGZvciAlczsgY3VycmVudCBwYXJlbnQgaXMgJXMiICUgKGJyYW5jaCwgcGFyZW50KQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGFyZW50KSA9PSAwIGFuZCBicmFuY2ggaW4gc2VsZi5pbml0aWFsUGFyZW50czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLmluaXRpYWxQYXJlbnRzW2JyYW5jaF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5pbml0aWFsUGFyZW50c1ticmFuY2hdCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2IgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGFyZW50KSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEJyYW5jaCA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBCcmFuY2hMb2NhdGlvbiwgIiVkIiAlIChjaGFuZ2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNyZWF0aW5nIHRlbXBvcmFyeSBicmFuY2g6ICIgKyB0ZW1wQnJhbmNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXQoZGVzY3JpcHRpb24sIGZpbGVzRm9yQ29tbWl0LCB0ZW1wQnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVtcEJyYW5jaGVzLmFwcGVuZCh0ZW1wQnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2twb2ludCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvYiA9IHNlbGYuc2VhcmNoUGFyZW50KHBhcmVudCwgYnJhbmNoLCB0ZW1wQnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYmxvYjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdChkZXNjcmlwdGlvbiwgZmlsZXNGb3JDb21taXQsIGJyYW5jaCwgYmxvYikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiUGFyZW50IG9mICVzIG5vdCBmb3VuZC4gQ29tbWl0dGluZyBpbnRvIGhlYWQgb2YgJXMiICUgKGJyYW5jaCwgcGFyZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0KGRlc2NyaXB0aW9uLCBmaWxlc0ZvckNvbW1pdCwgYnJhbmNoLCBwYXJlbnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMgPSBzZWxmLmV4dHJhY3RGaWxlc0Zyb21Db21taXQoZGVzY3JpcHRpb24pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0KGRlc2NyaXB0aW9uLCBmaWxlcywgc2VsZi5icmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbFBhcmVudCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsUGFyZW50ID0gIiIKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIHByaW50IHNlbGYuZ2l0RXJyb3IucmVhZCgpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGRlZiBpbXBvcnRIZWFkUmV2aXNpb24oc2VsZiwgcmV2aXNpb24pOgorICAgICAgICBwcmludCAiRG9pbmcgaW5pdGlhbCBpbXBvcnQgb2YgJXMgZnJvbSByZXZpc2lvbiAlcyBpbnRvICVzIiAlICgnICcuam9pbihzZWxmLmRlcG90UGF0aHMpLCByZXZpc2lvbiwgc2VsZi5icmFuY2gpCisKKyAgICAgICAgZGV0YWlscyA9IHt9CisgICAgICAgIGRldGFpbHNbInVzZXIiXSA9ICJnaXQgcGVyZm9yY2UgaW1wb3J0IHVzZXIiCisgICAgICAgIGRldGFpbHNbImRlc2MiXSA9ICgiSW5pdGlhbCBpbXBvcnQgb2YgJXMgZnJvbSB0aGUgc3RhdGUgYXQgcmV2aXNpb24gJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKCcgJy5qb2luKHNlbGYuZGVwb3RQYXRocyksIHJldmlzaW9uKSkKKyAgICAgICAgZGV0YWlsc1siY2hhbmdlIl0gPSByZXZpc2lvbgorICAgICAgICBuZXdlc3RSZXZpc2lvbiA9IDAKKworICAgICAgICBmaWxlQ250ID0gMAorICAgICAgICBmaWxlQXJncyA9IFsiJXMuLi4lcyIgJSAocCxyZXZpc2lvbikgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzXQorCisgICAgICAgIGZvciBpbmZvIGluIHA0Q21kTGlzdChbImZpbGVzIl0gKyBmaWxlQXJncyk6CisKKyAgICAgICAgICAgIGlmICdjb2RlJyBpbiBpbmZvIGFuZCBpbmZvWydjb2RlJ10gPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJwNCByZXR1cm5lZCBhbiBlcnJvcjogJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaW5mb1snZGF0YSddKQorICAgICAgICAgICAgICAgIGlmIGluZm9bJ2RhdGEnXS5maW5kKCJtdXN0IHJlZmVyIHRvIGNsaWVudCIpID49IDA6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlRoaXMgcGFydGljdWxhciBwNCBlcnJvciBpcyBtaXNsZWFkaW5nLlxuIikKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiUGVyaGFwcyB0aGUgZGVwb3QgcGF0aCB3YXMgbWlzc3BlbGxlZC5cbiIpOworICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJEZXBvdCBwYXRoOiAgJXNcbiIgJSAiICIuam9pbihzZWxmLmRlcG90UGF0aHMpKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBpZiAncDRFeGl0Q29kZScgaW4gaW5mbzoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJwNCBleGl0Y29kZTogJXNcbiIgJSBpbmZvWydwNEV4aXRDb2RlJ10pCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworCisgICAgICAgICAgICBjaGFuZ2UgPSBpbnQoaW5mb1siY2hhbmdlIl0pCisgICAgICAgICAgICBpZiBjaGFuZ2UgPiBuZXdlc3RSZXZpc2lvbjoKKyAgICAgICAgICAgICAgICBuZXdlc3RSZXZpc2lvbiA9IGNoYW5nZQorCisgICAgICAgICAgICBpZiBpbmZvWyJhY3Rpb24iXSBpbiBzZWxmLmRlbGV0ZV9hY3Rpb25zOgorICAgICAgICAgICAgICAgICMgZG9uJ3QgaW5jcmVhc2UgdGhlIGZpbGUgY250LCBvdGhlcndpc2UgZGV0YWlsc1siZGVwb3RGaWxlMTIzIl0gd2lsbCBoYXZlIGdhcHMhCisgICAgICAgICAgICAgICAgI2ZpbGVDbnQgPSBmaWxlQ250ICsgMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBwcm9wIGluIFsiZGVwb3RGaWxlIiwgInJldiIsICJhY3Rpb24iLCAidHlwZSIgXToKKyAgICAgICAgICAgICAgICBkZXRhaWxzWyIlcyVzIiAlIChwcm9wLCBmaWxlQ250KV0gPSBpbmZvW3Byb3BdCisKKyAgICAgICAgICAgIGZpbGVDbnQgPSBmaWxlQ250ICsgMQorCisgICAgICAgIGRldGFpbHNbImNoYW5nZSJdID0gbmV3ZXN0UmV2aXNpb24KKworICAgICAgICAjIFVzZSB0aW1lIGZyb20gdG9wLW1vc3QgY2hhbmdlIHNvIHRoYXQgYWxsIGdpdCBwNCBjbG9uZXMgb2YKKyAgICAgICAgIyB0aGUgc2FtZSBwNCByZXBvIGhhdmUgdGhlIHNhbWUgY29tbWl0IFNIQTFzLgorICAgICAgICByZXMgPSBwNENtZExpc3QoImRlc2NyaWJlIC1zICVkIiAlIG5ld2VzdFJldmlzaW9uKQorICAgICAgICBuZXdlc3RUaW1lID0gTm9uZQorICAgICAgICBmb3IgciBpbiByZXM6CisgICAgICAgICAgICBpZiByLmhhc19rZXkoJ3RpbWUnKToKKyAgICAgICAgICAgICAgICBuZXdlc3RUaW1lID0gaW50KHJbJ3RpbWUnXSkKKyAgICAgICAgaWYgbmV3ZXN0VGltZSBpcyBOb25lOgorICAgICAgICAgICAgZGllKCJcImRlc2NyaWJlIC1zXCIgb24gbmV3ZXN0IGNoYW5nZSAlZCBkaWQgbm90IGdpdmUgYSB0aW1lIikKKyAgICAgICAgZGV0YWlsc1sidGltZSJdID0gbmV3ZXN0VGltZQorCisgICAgICAgIHNlbGYudXBkYXRlT3B0aW9uRGljdChkZXRhaWxzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNvbW1pdChkZXRhaWxzLCBzZWxmLmV4dHJhY3RGaWxlc0Zyb21Db21taXQoZGV0YWlscyksIHNlbGYuYnJhbmNoKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJJTyBlcnJvciB3aXRoIGdpdCBmYXN0LWltcG9ydC4gSXMgeW91ciBnaXQgdmVyc2lvbiByZWNlbnQgZW5vdWdoPyIKKyAgICAgICAgICAgIHByaW50IHNlbGYuZ2l0RXJyb3IucmVhZCgpCisKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIHNlbGYuZGVwb3RQYXRocyA9IFtdCisgICAgICAgIHNlbGYuY2hhbmdlUmFuZ2UgPSAiIgorICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnQgPSAiIgorICAgICAgICBzZWxmLnByZXZpb3VzRGVwb3RQYXRocyA9IFtdCisKKyAgICAgICAgIyBtYXAgZnJvbSBicmFuY2ggZGVwb3QgcGF0aCB0byBwYXJlbnQgYnJhbmNoCisgICAgICAgIHNlbGYua25vd25CcmFuY2hlcyA9IHt9CisgICAgICAgIHNlbGYuaW5pdGlhbFBhcmVudHMgPSB7fQorICAgICAgICBzZWxmLmhhc09yaWdpbiA9IG9yaWdpblA0QnJhbmNoZXNFeGlzdCgpCisgICAgICAgIGlmIG5vdCBzZWxmLnN5bmNXaXRoT3JpZ2luOgorICAgICAgICAgICAgc2VsZi5oYXNPcmlnaW4gPSBGYWxzZQorCisgICAgICAgIGlmIHNlbGYuaW1wb3J0SW50b1JlbW90ZXM6CisgICAgICAgICAgICBzZWxmLnJlZlByZWZpeCA9ICJyZWZzL3JlbW90ZXMvcDQvIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZWZQcmVmaXggPSAicmVmcy9oZWFkcy9wNC8iCisKKyAgICAgICAgaWYgc2VsZi5zeW5jV2l0aE9yaWdpbiBhbmQgc2VsZi5oYXNPcmlnaW46CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgcHJpbnQgIlN5bmNpbmcgd2l0aCBvcmlnaW4gZmlyc3QgYnkgY2FsbGluZyBnaXQgZmV0Y2ggb3JpZ2luIgorICAgICAgICAgICAgc3lzdGVtKCJnaXQgZmV0Y2ggb3JpZ2luIikKKworICAgICAgICBpZiBsZW4oc2VsZi5icmFuY2gpID09IDA6CisgICAgICAgICAgICBzZWxmLmJyYW5jaCA9IHNlbGYucmVmUHJlZml4ICsgIm1hc3RlciIKKyAgICAgICAgICAgIGlmIGdpdEJyYW5jaEV4aXN0cygicmVmcy9oZWFkcy9wNCIpIGFuZCBzZWxmLmltcG9ydEludG9SZW1vdGVzOgorICAgICAgICAgICAgICAgIHN5c3RlbSgiZ2l0IHVwZGF0ZS1yZWYgJXMgcmVmcy9oZWFkcy9wNCIgJSBzZWxmLmJyYW5jaCkKKyAgICAgICAgICAgICAgICBzeXN0ZW0oImdpdCBicmFuY2ggLUQgcDQiKTsKKyAgICAgICAgICAgICMgY3JlYXRlIGl0IC9hZnRlci8gaW1wb3J0aW5nLCB3aGVuIG1hc3RlciBleGlzdHMKKyAgICAgICAgICAgIGlmIG5vdCBnaXRCcmFuY2hFeGlzdHMoc2VsZi5yZWZQcmVmaXggKyAiSEVBRCIpIGFuZCBzZWxmLmltcG9ydEludG9SZW1vdGVzIGFuZCBnaXRCcmFuY2hFeGlzdHMoc2VsZi5icmFuY2gpOgorICAgICAgICAgICAgICAgIHN5c3RlbSgiZ2l0IHN5bWJvbGljLXJlZiAlc0hFQUQgJXMiICUgKHNlbGYucmVmUHJlZml4LCBzZWxmLmJyYW5jaCkpCisKKyAgICAgICAgIyBhY2NlcHQgZWl0aGVyIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uLCBvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWM6CisgICAgICAgICAgICAjIHdpbGwgdXNlIHRoaXMgYWZ0ZXIgY2xvbmUgdG8gc2V0IHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgc2VsZi51c2VDbGllbnRTcGVjX2Zyb21fb3B0aW9ucyA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGdpdENvbmZpZygiZ2l0LXA0LnVzZWNsaWVudHNwZWMiLCAiLS1ib29sIikgPT0gInRydWUiOgorICAgICAgICAgICAgICAgIHNlbGYudXNlQ2xpZW50U3BlYyA9IFRydWUKKyAgICAgICAgaWYgc2VsZi51c2VDbGllbnRTcGVjOgorICAgICAgICAgICAgc2VsZi5jbGllbnRTcGVjRGlycyA9IGdldENsaWVudFNwZWMoKQorCisgICAgICAgICMgVE9ETzogc2hvdWxkIGFsd2F5cyBsb29rIGF0IHByZXZpb3VzIGNvbW1pdHMsCisgICAgICAgICMgbWVyZ2Ugd2l0aCBwcmV2aW91cyBpbXBvcnRzLCBpZiBwb3NzaWJsZS4KKyAgICAgICAgaWYgYXJncyA9PSBbXToKKyAgICAgICAgICAgIGlmIHNlbGYuaGFzT3JpZ2luOgorICAgICAgICAgICAgICAgIGNyZWF0ZU9yVXBkYXRlQnJhbmNoZXNGcm9tT3JpZ2luKHNlbGYucmVmUHJlZml4LCBzZWxmLnNpbGVudCkKKyAgICAgICAgICAgIHNlbGYubGlzdEV4aXN0aW5nUDRHaXRCcmFuY2hlcygpCisKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLnA0QnJhbmNoZXNJbkdpdCkgPiAxOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkltcG9ydGluZyBmcm9tL2ludG8gbXVsdGlwbGUgYnJhbmNoZXMiCisgICAgICAgICAgICAgICAgc2VsZi5kZXRlY3RCcmFuY2hlcyA9IFRydWUKKworICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJicmFuY2hlczogJXMiICUgc2VsZi5wNEJyYW5jaGVzSW5HaXQKKworICAgICAgICAgICAgcDRDaGFuZ2UgPSAwCisgICAgICAgICAgICBmb3IgYnJhbmNoIGluIHNlbGYucDRCcmFuY2hlc0luR2l0OgorICAgICAgICAgICAgICAgIGxvZ01zZyA9ICBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQoc2VsZi5yZWZQcmVmaXggKyBicmFuY2gpCisKKyAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2dNc2cpCisKKyAgICAgICAgICAgICAgICBzZWxmLnJlYWRPcHRpb25zKHNldHRpbmdzKQorICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5oYXNfa2V5KCdkZXBvdC1wYXRocycpCisgICAgICAgICAgICAgICAgICAgIGFuZCBzZXR0aW5ncy5oYXNfa2V5ICgnY2hhbmdlJykpOgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBpbnQoc2V0dGluZ3NbJ2NoYW5nZSddKSArIDEKKyAgICAgICAgICAgICAgICAgICAgcDRDaGFuZ2UgPSBtYXgocDRDaGFuZ2UsIGNoYW5nZSkKKworICAgICAgICAgICAgICAgICAgICBkZXBvdFBhdGhzID0gc29ydGVkKHNldHRpbmdzWydkZXBvdC1wYXRocyddKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnByZXZpb3VzRGVwb3RQYXRocyA9PSBbXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXNEZXBvdFBhdGhzID0gZGVwb3RQYXRocworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwcmV2LCBjdXIpIGluIHppcChzZWxmLnByZXZpb3VzRGVwb3RQYXRocywgZGVwb3RQYXRocyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9saXN0ID0gcHJldi5zcGxpdCgiLyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xpc3QgPSBjdXIuc3BsaXQoIi8iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIG1pbihsZW4oY3VyX2xpc3QpLCBsZW4ocHJldl9saXN0KSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJfbGlzdFtpXSA8PiBwcmV2X2xpc3RbaV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5hcHBlbmQgKCIvIi5qb2luKGN1cl9saXN0WzppICsgMV0pKQorCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByZXZpb3VzRGVwb3RQYXRocyA9IHBhdGhzCisKKyAgICAgICAgICAgIGlmIHA0Q2hhbmdlID4gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmRlcG90UGF0aHMgPSBzb3J0ZWQoc2VsZi5wcmV2aW91c0RlcG90UGF0aHMpCisgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VSYW5nZSA9ICJAJXMsI2hlYWQiICUgcDRDaGFuZ2UKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kZXRlY3RCcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsUGFyZW50ID0gcGFyc2VSZXZpc2lvbihzZWxmLmJyYW5jaCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQgYW5kIG5vdCBzZWxmLmRldGVjdEJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiUGVyZm9ybWluZyBpbmNyZW1lbnRhbCBpbXBvcnQgaW50byAlcyBnaXQgYnJhbmNoIiAlIHNlbGYuYnJhbmNoCisKKyAgICAgICAgaWYgbm90IHNlbGYuYnJhbmNoLnN0YXJ0c3dpdGgoInJlZnMvIik6CisgICAgICAgICAgICBzZWxmLmJyYW5jaCA9ICJyZWZzL2hlYWRzLyIgKyBzZWxmLmJyYW5jaAorCisgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwIGFuZCBzZWxmLmRlcG90UGF0aHM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgcHJpbnQgIkRlcG90IHBhdGhzOiAlcyIgJSAnICcuam9pbihzZWxmLmRlcG90UGF0aHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmRlcG90UGF0aHMgYW5kIHNlbGYuZGVwb3RQYXRocyAhPSBhcmdzOgorICAgICAgICAgICAgICAgIHByaW50ICgicHJldmlvdXMgaW1wb3J0IHVzZWQgZGVwb3QgcGF0aCAlcyBhbmQgbm93ICVzIHdhcyBzcGVjaWZpZWQuICIKKyAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgZG9lc24ndCB3b3JrISIgJSAoJyAnLmpvaW4gKHNlbGYuZGVwb3RQYXRocyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJy5qb2luIChhcmdzKSkpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAgICAgc2VsZi5kZXBvdFBhdGhzID0gc29ydGVkKGFyZ3MpCisKKyAgICAgICAgcmV2aXNpb24gPSAiIgorICAgICAgICBzZWxmLnVzZXJzID0ge30KKworICAgICAgICAjIE1ha2Ugc3VyZSBubyByZXZpc2lvbiBzcGVjaWZpZXJzIGFyZSB1c2VkIHdoZW4gLS1jaGFuZ2VzZmlsZQorICAgICAgICAjIGlzIHNwZWNpZmllZC4KKyAgICAgICAgYmFkX2NoYW5nZXNmaWxlID0gRmFsc2UKKyAgICAgICAgaWYgbGVuKHNlbGYuY2hhbmdlc0ZpbGUpID4gMDoKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuZGVwb3RQYXRoczoKKyAgICAgICAgICAgICAgICBpZiBwLmZpbmQoIkAiKSA+PSAwIG9yIHAuZmluZCgiIyIpID49IDA6CisgICAgICAgICAgICAgICAgICAgIGJhZF9jaGFuZ2VzZmlsZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgYmFkX2NoYW5nZXNmaWxlOgorICAgICAgICAgICAgZGllKCJPcHRpb24gLS1jaGFuZ2VzZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCByZXZpc2lvbiBzcGVjaWZpZXJzIikKKworICAgICAgICBuZXdQYXRocyA9IFtdCisgICAgICAgIGZvciBwIGluIHNlbGYuZGVwb3RQYXRoczoKKyAgICAgICAgICAgIGlmIHAuZmluZCgiQCIpICE9IC0xOgorICAgICAgICAgICAgICAgIGF0SWR4ID0gcC5pbmRleCgiQCIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VSYW5nZSA9IHBbYXRJZHg6XQorICAgICAgICAgICAgICAgIGlmIHNlbGYuY2hhbmdlUmFuZ2UgPT0gIkBhbGwiOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVJhbmdlID0gIiIKKyAgICAgICAgICAgICAgICBlbGlmICcsJyBub3QgaW4gc2VsZi5jaGFuZ2VSYW5nZToKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gPSBzZWxmLmNoYW5nZVJhbmdlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlUmFuZ2UgPSAiIgorICAgICAgICAgICAgICAgIHAgPSBwWzphdElkeF0KKyAgICAgICAgICAgIGVsaWYgcC5maW5kKCIjIikgIT0gLTE6CisgICAgICAgICAgICAgICAgaGFzaElkeCA9IHAuaW5kZXgoIiMiKQorICAgICAgICAgICAgICAgIHJldmlzaW9uID0gcFtoYXNoSWR4Ol0KKyAgICAgICAgICAgICAgICBwID0gcFs6aGFzaElkeF0KKyAgICAgICAgICAgIGVsaWYgc2VsZi5wcmV2aW91c0RlcG90UGF0aHMgPT0gW106CisgICAgICAgICAgICAgICAgIyBwYXkgYXR0ZW50aW9uIHRvIGNoYW5nZXNmaWxlLCBpZiBnaXZlbiwgZWxzZSBpbXBvcnQKKyAgICAgICAgICAgICAgICAjIHRoZSBlbnRpcmUgcDQgdHJlZSBhdCB0aGUgaGVhZCByZXZpc2lvbgorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLmNoYW5nZXNGaWxlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9ICIjaGVhZCIKKworICAgICAgICAgICAgcCA9IHJlLnN1YiAoIlwuXC5cLiQiLCAiIiwgcCkKKyAgICAgICAgICAgIGlmIG5vdCBwLmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgcCArPSAiLyIKKworICAgICAgICAgICAgbmV3UGF0aHMuYXBwZW5kKHApCisKKyAgICAgICAgc2VsZi5kZXBvdFBhdGhzID0gbmV3UGF0aHMKKworICAgICAgICAjIC0tZGV0ZWN0LWJyYW5jaGVzIG1heSBjaGFuZ2UgdGhpcyBmb3IgZWFjaCBicmFuY2gKKyAgICAgICAgc2VsZi5icmFuY2hQcmVmaXhlcyA9IHNlbGYuZGVwb3RQYXRocworCisgICAgICAgIHNlbGYubG9hZFVzZXJNYXBGcm9tQ2FjaGUoKQorICAgICAgICBzZWxmLmxhYmVscyA9IHt9CisgICAgICAgIGlmIHNlbGYuZGV0ZWN0TGFiZWxzOgorICAgICAgICAgICAgc2VsZi5nZXRMYWJlbHMoKTsKKworICAgICAgICBpZiBzZWxmLmRldGVjdEJyYW5jaGVzOgorICAgICAgICAgICAgIyMgRklYTUUgLSB3aGF0J3MgYSBQNCBwcm9qZWN0TmFtZSA/CisgICAgICAgICAgICBzZWxmLnByb2plY3ROYW1lID0gc2VsZi5ndWVzc1Byb2plY3ROYW1lKCkKKworICAgICAgICAgICAgaWYgc2VsZi5oYXNPcmlnaW46CisgICAgICAgICAgICAgICAgc2VsZi5nZXRCcmFuY2hNYXBwaW5nRnJvbUdpdEJyYW5jaGVzKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5nZXRCcmFuY2hNYXBwaW5nKCkKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAicDQtZ2l0IGJyYW5jaGVzOiAlcyIgJSBzZWxmLnA0QnJhbmNoZXNJbkdpdAorICAgICAgICAgICAgICAgIHByaW50ICJpbml0aWFsIHBhcmVudHM6ICVzIiAlIHNlbGYuaW5pdGlhbFBhcmVudHMKKyAgICAgICAgICAgIGZvciBiIGluIHNlbGYucDRCcmFuY2hlc0luR2l0OgorICAgICAgICAgICAgICAgIGlmIGIgIT0gIm1hc3RlciI6CisKKyAgICAgICAgICAgICAgICAgICAgIyMgRklYTUUKKyAgICAgICAgICAgICAgICAgICAgYiA9IGJbbGVuKHNlbGYucHJvamVjdE5hbWUpOl0KKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZWRCcmFuY2hlcy5hZGQoYikKKworICAgICAgICBzZWxmLnR6ID0gIiUrMDNkJTAyZCIgJSAoLSB0aW1lLnRpbWV6b25lIC8gMzYwMCwgKCgtIHRpbWUudGltZXpvbmUgJSAzNjAwKSAvIDYwKSkKKworICAgICAgICBpbXBvcnRQcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbImdpdCIsICJmYXN0LWltcG9ydCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpOworICAgICAgICBzZWxmLmdpdE91dHB1dCA9IGltcG9ydFByb2Nlc3Muc3Rkb3V0CisgICAgICAgIHNlbGYuZ2l0U3RyZWFtID0gaW1wb3J0UHJvY2Vzcy5zdGRpbgorICAgICAgICBzZWxmLmdpdEVycm9yID0gaW1wb3J0UHJvY2Vzcy5zdGRlcnIKKworICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0SGVhZFJldmlzaW9uKHJldmlzaW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hhbmdlcyA9IFtdCisKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmNoYW5nZXNGaWxlKSA+IDA6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3BlbihzZWxmLmNoYW5nZXNGaWxlKS5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGNoYW5nZVNldCA9IHNldCgpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0OgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VTZXQuYWRkKGludChsaW5lKSkKKworICAgICAgICAgICAgICAgIGZvciBjaGFuZ2UgaW4gY2hhbmdlU2V0OgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGFuZ2UpCisKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLnNvcnQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGNhdGNoICJnaXQgcDQgc3luYyIgd2l0aCBubyBuZXcgYnJhbmNoZXMsIGluIGEgcmVwbyB0aGF0CisgICAgICAgICAgICAgICAgIyBkb2VzIG5vdCBoYXZlIGFueSBleGlzdGluZyBwNCBicmFuY2hlcworICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwIGFuZCBub3Qgc2VsZi5wNEJyYW5jaGVzSW5HaXQ6CisgICAgICAgICAgICAgICAgICAgIGRpZSgiTm8gcmVtb3RlIHA0IGJyYW5jaGVzLiAgUGVyaGFwcyB5b3UgbmV2ZXIgZGlkIFwiZ2l0IHA0IGNsb25lXCIgaW4gaGVyZS4iKTsKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJHZXR0aW5nIHA0IGNoYW5nZXMgZm9yICVzLi4uJXMiICUgKCcsICcuam9pbihzZWxmLmRlcG90UGF0aHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVJhbmdlKQorICAgICAgICAgICAgICAgIGNoYW5nZXMgPSBwNENoYW5nZXNGb3JQYXRocyhzZWxmLmRlcG90UGF0aHMsIHNlbGYuY2hhbmdlUmFuZ2UpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5tYXhDaGFuZ2VzKSA+IDA6CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgPSBjaGFuZ2VzWzptaW4oaW50KHNlbGYubWF4Q2hhbmdlcyksIGxlbihjaGFuZ2VzKSldCisKKyAgICAgICAgICAgIGlmIGxlbihjaGFuZ2VzKSA9PSAwOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIk5vIGNoYW5nZXMgdG8gaW1wb3J0ISIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50IGFuZCBub3Qgc2VsZi5kZXRlY3RCcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkltcG9ydCBkZXN0aW5hdGlvbjogJXMiICUgc2VsZi5icmFuY2gKKworICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlZEJyYW5jaGVzID0gc2V0KCkKKworICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0Q2hhbmdlcyhjaGFuZ2VzKQorCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgICAgICBwcmludCAiIgorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi51cGRhdGVkQnJhbmNoZXMpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlVwZGF0ZWQgYnJhbmNoZXM6ICIpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYiBpbiBzZWxmLnVwZGF0ZWRCcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIlcyAiICUgYikKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKworICAgICAgICBpZiBnaXRDb25maWcoImdpdC1wNC5pbXBvcnRMYWJlbHMiLCAiLS1ib29sIikgPT0gInRydWUiOgorICAgICAgICAgICAgc2VsZi5pbXBvcnRMYWJlbHMgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5pbXBvcnRMYWJlbHM6CisgICAgICAgICAgICBwNExhYmVscyA9IGdldFA0TGFiZWxzKHNlbGYuZGVwb3RQYXRocykKKyAgICAgICAgICAgIGdpdFRhZ3MgPSBnZXRHaXRUYWdzKCkKKworICAgICAgICAgICAgbWlzc2luZ1A0TGFiZWxzID0gcDRMYWJlbHMgLSBnaXRUYWdzCisgICAgICAgICAgICBzZWxmLmltcG9ydFA0TGFiZWxzKHNlbGYuZ2l0U3RyZWFtLCBtaXNzaW5nUDRMYWJlbHMpCisKKyAgICAgICAgc2VsZi5naXRTdHJlYW0uY2xvc2UoKQorICAgICAgICBpZiBpbXBvcnRQcm9jZXNzLndhaXQoKSAhPSAwOgorICAgICAgICAgICAgZGllKCJmYXN0LWltcG9ydCBmYWlsZWQ6ICVzIiAlIHNlbGYuZ2l0RXJyb3IucmVhZCgpKQorICAgICAgICBzZWxmLmdpdE91dHB1dC5jbG9zZSgpCisgICAgICAgIHNlbGYuZ2l0RXJyb3IuY2xvc2UoKQorCisgICAgICAgICMgQ2xlYW51cCB0ZW1wb3JhcnkgYnJhbmNoZXMgY3JlYXRlZCBkdXJpbmcgaW1wb3J0CisgICAgICAgIGlmIHNlbGYudGVtcEJyYW5jaGVzICE9IFtdOgorICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLnRlbXBCcmFuY2hlczoKKyAgICAgICAgICAgICAgICByZWFkX3BpcGUoImdpdCB1cGRhdGUtcmVmIC1kICVzIiAlIGJyYW5jaCkKKyAgICAgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgiR0lUX0RJUiIsICIuZ2l0IiksIHNlbGYudGVtcEJyYW5jaExvY2F0aW9uKSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBQNFJlYmFzZShDb21tYW5kKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gWworICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWltcG9ydC1sYWJlbHMiLCBkZXN0PSJpbXBvcnRMYWJlbHMiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgXQorICAgICAgICBzZWxmLmltcG9ydExhYmVscyA9IEZhbHNlCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAoIkZldGNoZXMgdGhlIGxhdGVzdCByZXZpc2lvbiBmcm9tIHBlcmZvcmNlIGFuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAicmViYXNlcyB0aGUgY3VycmVudCB3b3JrIChicmFuY2gpIGFnYWluc3QgaXQiKQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgc3luYyA9IFA0U3luYygpCisgICAgICAgIHN5bmMuaW1wb3J0TGFiZWxzID0gc2VsZi5pbXBvcnRMYWJlbHMKKyAgICAgICAgc3luYy5ydW4oW10pCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmViYXNlKCkKKworICAgIGRlZiByZWJhc2Uoc2VsZik6CisgICAgICAgIGlmIG9zLnN5c3RlbSgiZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2giKSAhPSAwOgorICAgICAgICAgICAgZGllKCJTb21lIGZpbGVzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgYXJlIG1vZGlmaWVkIGFuZCBkaWZmZXJlbnQgdGhhbiB3aGF0IGlzIGluIHlvdXIgaW5kZXguIFlvdSBjYW4gdXNlIGdpdCB1cGRhdGUtaW5kZXggPGZpbGVuYW1lPiB0byBicmluZyB0aGUgaW5kZXggdXAtdG8tZGF0ZSBvciBzdGFzaCBhd2F5IGFsbCB5b3VyIGNoYW5nZXMgd2l0aCBnaXQgc3Rhc2guIik7CisgICAgICAgIGlmIGxlbihyZWFkX3BpcGUoImdpdCBkaWZmLWluZGV4IEhFQUQgLS0iKSkgPiAwOgorICAgICAgICAgICAgZGllKCJZb3UgaGF2ZSB1bmNvbW1pdGVkIGNoYW5nZXMuIFBsZWFzZSBjb21taXQgdGhlbSBiZWZvcmUgcmViYXNpbmcgb3Igc3Rhc2ggdGhlbSBhd2F5IHdpdGggZ2l0IHN0YXNoLiIpOworCisgICAgICAgIFt1cHN0cmVhbSwgc2V0dGluZ3NdID0gZmluZFVwc3RyZWFtQnJhbmNoUG9pbnQoKQorICAgICAgICBpZiBsZW4odXBzdHJlYW0pID09IDA6CisgICAgICAgICAgICBkaWUoIkNhbm5vdCBmaW5kIHVwc3RyZWFtIGJyYW5jaHBvaW50IGZvciByZWJhc2UiKQorCisgICAgICAgICMgdGhlIGJyYW5jaHBvaW50IG1heSBiZSBwNC9mb29+Mywgc28gc3RyaXAgb2ZmIHRoZSBwYXJlbnQKKyAgICAgICAgdXBzdHJlYW0gPSByZS5zdWIoIn5bMC05XSskIiwgIiIsIHVwc3RyZWFtKQorCisgICAgICAgIHByaW50ICJSZWJhc2luZyB0aGUgY3VycmVudCBicmFuY2ggb250byAlcyIgJSB1cHN0cmVhbQorICAgICAgICBvbGRIZWFkID0gcmVhZF9waXBlKCJnaXQgcmV2LXBhcnNlIEhFQUQiKS5zdHJpcCgpCisgICAgICAgIHN5c3RlbSgiZ2l0IHJlYmFzZSAlcyIgJSB1cHN0cmVhbSkKKyAgICAgICAgc3lzdGVtKCJnaXQgZGlmZi10cmVlIC0tc3RhdCAtLXN1bW1hcnkgLU0gJXMgSEVBRCIgJSBvbGRIZWFkKQorICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBQNENsb25lKFA0U3luYyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBQNFN5bmMuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICJDcmVhdGVzIGEgbmV3IGdpdCByZXBvc2l0b3J5IGFuZCBpbXBvcnRzIGZyb20gUGVyZm9yY2UgaW50byBpdCIKKyAgICAgICAgc2VsZi51c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIC8vZGVwb3QvcGF0aFtAcmV2UmFuZ2VdIgorICAgICAgICBzZWxmLm9wdGlvbnMgKz0gWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZGVzdGluYXRpb24iLCBkZXN0PSJjbG9uZURlc3RpbmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJ3aGVyZSB0byBsZWF2ZSByZXN1bHQgb2YgdGhlIGNsb25lIiksCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS8iLCBkZXN0PSJjbG9uZUV4Y2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJhcHBlbmQiLCB0eXBlPSJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZXhjbHVkZSBkZXBvdCBwYXRoIiksCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1iYXJlIiwgZGVzdD0iY2xvbmVCYXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpLAorICAgICAgICBdCisgICAgICAgIHNlbGYuY2xvbmVEZXN0aW5hdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5uZWVkc0dpdCA9IEZhbHNlCisgICAgICAgIHNlbGYuY2xvbmVCYXJlID0gRmFsc2UKKworICAgICMgVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlICJhcHBlbmQiIGNsb25lRXhjbHVkZSBhY3Rpb24KKyAgICBkZWYgZW5zdXJlX3ZhbHVlKHNlbGYsIGF0dHIsIHZhbHVlKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgYXR0cikgb3IgZ2V0YXR0cihzZWxmLCBhdHRyKSBpcyBOb25lOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRyLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgYXR0cikKKworICAgIGRlZiBkZWZhdWx0RGVzdGluYXRpb24oc2VsZiwgYXJncyk6CisgICAgICAgICMjIFRPRE86IHVzZSBjb21tb24gcHJlZml4IG9mIGFyZ3M/CisgICAgICAgIGRlcG90UGF0aCA9IGFyZ3NbMF0KKyAgICAgICAgZGVwb3REaXIgPSByZS5zdWIoIihAW15AXSopJCIsICIiLCBkZXBvdFBhdGgpCisgICAgICAgIGRlcG90RGlyID0gcmUuc3ViKCIoI1teI10qKSQiLCAiIiwgZGVwb3REaXIpCisgICAgICAgIGRlcG90RGlyID0gcmUuc3ViKHIiXC5cLlwuJCIsICIiLCBkZXBvdERpcikKKyAgICAgICAgZGVwb3REaXIgPSByZS5zdWIociIvJCIsICIiLCBkZXBvdERpcikKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXQoZGVwb3REaXIpWzFdCisKKyAgICBkZWYgcnVuKHNlbGYsIGFyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgc2VsZi5rZWVwUmVwb1BhdGggYW5kIG5vdCBzZWxmLmNsb25lRGVzdGluYXRpb246CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJNdXN0IHNwZWNpZnkgZGVzdGluYXRpb24gZm9yIC0ta2VlcC1wYXRoXG4iKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBkZXBvdFBhdGhzID0gYXJncworCisgICAgICAgIGlmIG5vdCBzZWxmLmNsb25lRGVzdGluYXRpb24gYW5kIGxlbihkZXBvdFBhdGhzKSA+IDE6CisgICAgICAgICAgICBzZWxmLmNsb25lRGVzdGluYXRpb24gPSBkZXBvdFBhdGhzWy0xXQorICAgICAgICAgICAgZGVwb3RQYXRocyA9IGRlcG90UGF0aHNbOi0xXQorCisgICAgICAgIHNlbGYuY2xvbmVFeGNsdWRlID0gWyIvIitwIGZvciBwIGluIHNlbGYuY2xvbmVFeGNsdWRlXQorICAgICAgICBmb3IgcCBpbiBkZXBvdFBhdGhzOgorICAgICAgICAgICAgaWYgbm90IHAuc3RhcnRzd2l0aCgiLy8iKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBub3Qgc2VsZi5jbG9uZURlc3RpbmF0aW9uOgorICAgICAgICAgICAgc2VsZi5jbG9uZURlc3RpbmF0aW9uID0gc2VsZi5kZWZhdWx0RGVzdGluYXRpb24oYXJncykKKworICAgICAgICBwcmludCAiSW1wb3J0aW5nIGZyb20gJXMgaW50byAlcyIgJSAoJywgJy5qb2luKGRlcG90UGF0aHMpLCBzZWxmLmNsb25lRGVzdGluYXRpb24pCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuY2xvbmVEZXN0aW5hdGlvbik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLmNsb25lRGVzdGluYXRpb24pCisgICAgICAgIGNoZGlyKHNlbGYuY2xvbmVEZXN0aW5hdGlvbikKKworICAgICAgICBpbml0X2NtZCA9IFsgImdpdCIsICJpbml0IiBdCisgICAgICAgIGlmIHNlbGYuY2xvbmVCYXJlOgorICAgICAgICAgICAgaW5pdF9jbWQuYXBwZW5kKCItLWJhcmUiKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoaW5pdF9jbWQpCisKKyAgICAgICAgaWYgbm90IFA0U3luYy5ydW4oc2VsZiwgZGVwb3RQYXRocyk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5icmFuY2ggIT0gIm1hc3RlciI6CisgICAgICAgICAgICBpZiBzZWxmLmltcG9ydEludG9SZW1vdGVzOgorICAgICAgICAgICAgICAgIG1hc3RlcmJyYW5jaCA9ICJyZWZzL3JlbW90ZXMvcDQvbWFzdGVyIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtYXN0ZXJicmFuY2ggPSAicmVmcy9oZWFkcy9wNC9tYXN0ZXIiCisgICAgICAgICAgICBpZiBnaXRCcmFuY2hFeGlzdHMobWFzdGVyYnJhbmNoKToKKyAgICAgICAgICAgICAgICBzeXN0ZW0oImdpdCBicmFuY2ggbWFzdGVyICVzIiAlIG1hc3RlcmJyYW5jaCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5jbG9uZUJhcmU6CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgiZ2l0IGNoZWNrb3V0IC1mIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCBkZXRlY3QgbWFpbiBicmFuY2guIE5vIGNoZWNrb3V0L21hc3RlciBicmFuY2ggY3JlYXRlZC4iCisKKyAgICAgICAgIyBhdXRvLXNldCB0aGlzIHZhcmlhYmxlIGlmIGludm9rZWQgd2l0aCAtLXVzZS1jbGllbnQtc3BlYworICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWNfZnJvbV9vcHRpb25zOgorICAgICAgICAgICAgc3lzdGVtKCJnaXQgY29uZmlnIC0tYm9vbCBnaXQtcDQudXNlY2xpZW50c3BlYyB0cnVlIikKKworICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBQNEJyYW5jaGVzKENvbW1hbmQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBbIF0KKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICgiU2hvd3MgdGhlIGdpdCBicmFuY2hlcyB0aGF0IGhvbGQgaW1wb3J0cyBhbmQgdGhlaXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImNvcnJlc3BvbmRpbmcgcGVyZm9yY2UgZGVwb3QgcGF0aHMiKQorICAgICAgICBzZWxmLnZlcmJvc2UgPSBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgaWYgb3JpZ2luUDRCcmFuY2hlc0V4aXN0KCk6CisgICAgICAgICAgICBjcmVhdGVPclVwZGF0ZUJyYW5jaGVzRnJvbU9yaWdpbigpCisKKyAgICAgICAgY21kbGluZSA9ICJnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgIgorICAgICAgICBjbWRsaW5lICs9ICIgLS1yZW1vdGVzIgorCisgICAgICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcyhjbWRsaW5lKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKworICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgncDQvJykgb3IgbGluZSA9PSAicDQvSEVBRCI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGJyYW5jaCA9IGxpbmUKKworICAgICAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KCJyZWZzL3JlbW90ZXMvJXMiICUgYnJhbmNoKQorICAgICAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKQorCisgICAgICAgICAgICBwcmludCAiJXMgPD0gJXMgKCVzKSIgJSAoYnJhbmNoLCAiLCIuam9pbihzZXR0aW5nc1siZGVwb3QtcGF0aHMiXSksIHNldHRpbmdzWyJjaGFuZ2UiXSkKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgSGVscEZvcm1hdHRlcihvcHRwYXJzZS5JbmRlbnRlZEhlbHBGb3JtYXR0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgb3B0cGFyc2UuSW5kZW50ZWRIZWxwRm9ybWF0dGVyLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgZm9ybWF0X2Rlc2NyaXB0aW9uKHNlbGYsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgaWYgZGVzY3JpcHRpb246CisgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb24gKyAiXG4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiIKKworZGVmIHByaW50VXNhZ2UoY29tbWFuZHMpOgorICAgIHByaW50ICJ1c2FnZTogJXMgPGNvbW1hbmQ+IFtvcHRpb25zXSIgJSBzeXMuYXJndlswXQorICAgIHByaW50ICIiCisgICAgcHJpbnQgInZhbGlkIGNvbW1hbmRzOiAlcyIgJSAiLCAiLmpvaW4oY29tbWFuZHMpCisgICAgcHJpbnQgIiIKKyAgICBwcmludCAiVHJ5ICVzIDxjb21tYW5kPiAtLWhlbHAgZm9yIGNvbW1hbmQgc3BlY2lmaWMgaGVscC4iICUgc3lzLmFyZ3ZbMF0KKyAgICBwcmludCAiIgorCitjb21tYW5kcyA9IHsKKyAgICAiZGVidWciIDogUDREZWJ1ZywKKyAgICAic3VibWl0IiA6IFA0U3VibWl0LAorICAgICJjb21taXQiIDogUDRTdWJtaXQsCisgICAgInN5bmMiIDogUDRTeW5jLAorICAgICJyZWJhc2UiIDogUDRSZWJhc2UsCisgICAgImNsb25lIiA6IFA0Q2xvbmUsCisgICAgInJvbGxiYWNrIiA6IFA0Um9sbEJhY2ssCisgICAgImJyYW5jaGVzIiA6IFA0QnJhbmNoZXMKK30KKworCitkZWYgbWFpbigpOgorICAgIGlmIGxlbihzeXMuYXJndlsxOl0pID09IDA6CisgICAgICAgIHByaW50VXNhZ2UoY29tbWFuZHMua2V5cygpKQorICAgICAgICBzeXMuZXhpdCgyKQorCisgICAgY21kID0gIiIKKyAgICBjbWROYW1lID0gc3lzLmFyZ3ZbMV0KKyAgICB0cnk6CisgICAgICAgIGtsYXNzID0gY29tbWFuZHNbY21kTmFtZV0KKyAgICAgICAgY21kID0ga2xhc3MoKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcHJpbnQgInVua25vd24gY29tbWFuZCAlcyIgJSBjbWROYW1lCisgICAgICAgIHByaW50ICIiCisgICAgICAgIHByaW50VXNhZ2UoY29tbWFuZHMua2V5cygpKQorICAgICAgICBzeXMuZXhpdCgyKQorCisgICAgb3B0aW9ucyA9IGNtZC5vcHRpb25zCisgICAgY21kLmdpdGRpciA9IG9zLmVudmlyb24uZ2V0KCJHSVRfRElSIiwgTm9uZSkKKworICAgIGFyZ3MgPSBzeXMuYXJndlsyOl0KKworICAgIG9wdGlvbnMuYXBwZW5kKG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXZlcmJvc2UiLCAiLXYiLCBkZXN0PSJ2ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIikpCisgICAgaWYgY21kLm5lZWRzR2l0OgorICAgICAgICBvcHRpb25zLmFwcGVuZChvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1naXQtZGlyIiwgZGVzdD0iZ2l0ZGlyIikpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoY21kLnVzYWdlLnJlcGxhY2UoIiVwcm9nIiwgIiVwcm9nICIgKyBjbWROYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBjbWQuZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlciA9IEhlbHBGb3JtYXR0ZXIoKSkKKworICAgIChjbWQsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3ZbMjpdLCBjbWQpOworICAgIGdsb2JhbCB2ZXJib3NlCisgICAgdmVyYm9zZSA9IGNtZC52ZXJib3NlCisgICAgaWYgY21kLm5lZWRzR2l0OgorICAgICAgICBpZiBjbWQuZ2l0ZGlyID09IE5vbmU6CisgICAgICAgICAgICBjbWQuZ2l0ZGlyID0gb3MucGF0aC5hYnNwYXRoKCIuZ2l0IikKKyAgICAgICAgICAgIGlmIG5vdCBpc1ZhbGlkR2l0RGlyKGNtZC5naXRkaXIpOgorICAgICAgICAgICAgICAgIGNtZC5naXRkaXIgPSByZWFkX3BpcGUoImdpdCByZXYtcGFyc2UgLS1naXQtZGlyIikuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNtZC5naXRkaXIpOgorICAgICAgICAgICAgICAgICAgICBjZHVwID0gcmVhZF9waXBlKCJnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwIikuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oY2R1cCkgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hkaXIoY2R1cCk7CisKKyAgICAgICAgaWYgbm90IGlzVmFsaWRHaXREaXIoY21kLmdpdGRpcik6CisgICAgICAgICAgICBpZiBpc1ZhbGlkR2l0RGlyKGNtZC5naXRkaXIgKyAiLy5naXQiKToKKyAgICAgICAgICAgICAgICBjbWQuZ2l0ZGlyICs9ICIvLmdpdCIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGllKCJmYXRhbDogY2Fubm90IGxvY2F0ZSBnaXQgcmVwb3NpdG9yeSBhdCAlcyIgJSBjbWQuZ2l0ZGlyKQorCisgICAgICAgIG9zLmVudmlyb25bIkdJVF9ESVIiXSA9IGNtZC5naXRkaXIKKworICAgIGlmIG5vdCBjbWQucnVuKGFyZ3MpOgorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2dpdC1wYXJzZS1yZW1vdGUuc2ggYi9naXQtcGFyc2UtcmVtb3RlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NGIyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcGFyc2UtcmVtb3RlLnNoCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorCisjIGdpdC1scy1yZW1vdGUgY291bGQgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSBhIGdpdCBtYW5hZ2VkIHJlcG9zaXRvcnk7CisjIHRoaXMgd291bGQgZmFpbCBpbiB0aGF0IGNhc2UgYW5kIHdvdWxkIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UuCitHSVRfRElSPSQoZ2l0IHJldi1wYXJzZSAtcSAtLWdpdC1kaXIpIHx8IDo7CisKK2dldF9kZWZhdWx0X3JlbW90ZSAoKSB7CisJY3Vycl9icmFuY2g9JChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpCisJY3Vycl9icmFuY2g9IiR7Y3Vycl9icmFuY2gjcmVmcy9oZWFkcy99IgorCW9yaWdpbj0kKGdpdCBjb25maWcgLS1nZXQgImJyYW5jaC4kY3Vycl9icmFuY2gucmVtb3RlIikKKwllY2hvICR7b3JpZ2luOi1vcmlnaW59Cit9CisKK2dldF9yZW1vdGVfbWVyZ2VfYnJhbmNoICgpIHsKKwljYXNlICIkIyIgaW4KKwkwfDEpCisJICAgIG9yaWdpbj0iJDEiCisJICAgIGRlZmF1bHQ9JChnZXRfZGVmYXVsdF9yZW1vdGUpCisJICAgIHRlc3QgLXogIiRvcmlnaW4iICYmIG9yaWdpbj0kZGVmYXVsdAorCSAgICBjdXJyX2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkgJiYKKwkgICAgWyAiJG9yaWdpbiIgPSAiJGRlZmF1bHQiIF0gJiYKKwkgICAgZWNobyAkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUodXBzdHJlYW0pJyAkY3Vycl9icmFuY2gpCisJICAgIDs7CisJKikKKwkgICAgcmVwbz0kMQorCSAgICBzaGlmdAorCSAgICByZWY9JDEKKwkgICAgIyBGSVhNRTogSXQgc2hvdWxkIHJldHVybiB0aGUgdHJhY2tpbmcgYnJhbmNoCisJICAgICMgICAgICAgIEN1cnJlbnRseSBvbmx5IHdvcmtzIHdpdGggdGhlIGRlZmF1bHQgbWFwcGluZworCSAgICBjYXNlICIkcmVmIiBpbgorCSAgICArKikKKwkJcmVmPSQoZXhwciAieiRyZWYiIDogJ3orXCguKlwpJykKKwkJOzsKKwkgICAgZXNhYworCSAgICBleHByICJ6JHJlZiIgOiAnei4qOicgPi9kZXYvbnVsbCB8fCByZWY9IiR7cmVmfToiCisJICAgIHJlbW90ZT0kKGV4cHIgInokcmVmIiA6ICd6XChbXjpdKlwpOicpCisJICAgIGNhc2UgIiRyZW1vdGUiIGluCisJICAgICcnIHwgSEVBRCApIHJlbW90ZT1IRUFEIDs7CisJICAgIGhlYWRzLyopIHJlbW90ZT0ke3JlbW90ZSNoZWFkcy99IDs7CisJICAgIHJlZnMvaGVhZHMvKikgcmVtb3RlPSR7cmVtb3RlI3JlZnMvaGVhZHMvfSA7OworCSAgICByZWZzLyogfCB0YWdzLyogfCByZW1vdGVzLyogKSByZW1vdGU9CisJICAgIGVzYWMKKwkgICAgWyAtbiAiJHJlbW90ZSIgXSAmJiBjYXNlICIkcmVwbyIgaW4KKwkJLikKKwkJICAgIGVjaG8gInJlZnMvaGVhZHMvJHJlbW90ZSIKKwkJICAgIDs7CisJCSopCisJCSAgICBlY2hvICJyZWZzL3JlbW90ZXMvJHJlcG8vJHJlbW90ZSIKKwkJICAgIDs7CisJICAgIGVzYWMKKwllc2FjCit9CisKK2Vycm9yX29uX21pc3NpbmdfZGVmYXVsdF91cHN0cmVhbSAoKSB7CisJY21kPSIkMSIKKwlvcF90eXBlPSIkMiIKKwlvcF9wcmVwPSIkMyIKKwlleGFtcGxlPSIkNCIKKwlicmFuY2hfbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkKKwkjIElmIHRoZXJlJ3Mgb25seSBvbmUgcmVtb3RlLCB1c2UgdGhhdCBpbiB0aGUgc3VnZ2VzdGlvbgorCXJlbW90ZT0iPHJlbW90ZT4iCisJaWYgdGVzdCAkKGdpdCByZW1vdGUgfCB3YyAtbCkgPSAxCisJdGhlbgorCQlyZW1vdGU9JChnaXQgcmVtb3RlKQorCWZpCisKKwlpZiB0ZXN0IC16ICIkYnJhbmNoX25hbWUiCisJdGhlbgorCQllY2hvICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIFBsZWFzZSBzcGVjaWZ5IHdoaWNoCiticmFuY2ggeW91IHdhbnQgdG8gJG9wX3R5cGUgJG9wX3ByZXAuIFNlZSBnaXQtJHtjbWR9KDEpIGZvciBkZXRhaWxzLgorCisgICAgJGV4YW1wbGUKKyIKKwllbHNlCisJCWVjaG8gIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guCitQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gJG9wX3R5cGUgJG9wX3ByZXAuCitTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscworCisgICAgJGV4YW1wbGUKKworSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6CisKKyAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtICR7YnJhbmNoX25hbWUjcmVmcy9oZWFkcy99ICRyZW1vdGUvPGJyYW5jaD4KKyIKKwlmaQorCWV4aXQgMQorfQpkaWZmIC0tZ2l0IGEvZ2l0LXB1bGwuc2ggYi9naXQtcHVsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTEwMDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXB1bGwuc2gKQEAgLTAsMCArMSwyOTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKyMgRmV0Y2ggb25lIG9yIG1vcmUgcmVtb3RlIHJlZnMgYW5kIG1lcmdlIGl0L3RoZW0gaW50byB0aGUgY3VycmVudCBIRUFELgorCitVU0FHRT0nWy1uIHwgLS1uby1zdGF0XSBbLS1bbm8tXWNvbW1pdF0gWy0tW25vLV1zcXVhc2hdIFstLVtuby1dZmZdIFstcyBzdHJhdGVneV0uLi4gWzxmZXRjaC1vcHRpb25zPl0gPHJlcG8+IDxoZWFkPi4uLicKK0xPTkdfVVNBR0U9J0ZldGNoIG9uZSBvciBtb3JlIHJlbW90ZSByZWZzIGFuZCBtZXJnZSBpdC90aGVtIGludG8gdGhlIGN1cnJlbnQgSEVBRC4nCitTVUJESVJFQ1RPUllfT0s9WWVzCitPUFRJT05TX1NQRUM9CisuIGdpdC1zaC1zZXR1cAorLiBnaXQtc2gtaTE4bgorc2V0X3JlZmxvZ19hY3Rpb24gInB1bGwkezErICQqfSIKK3JlcXVpcmVfd29ya190cmVlX2V4aXN0cworY2RfdG9fdG9wbGV2ZWwKKworCitkaWVfY29uZmxpY3QgKCkgeworICAgIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgLXIgLS1pZ25vcmUtc3VibW9kdWxlcyBIRUFEIC0tCisgICAgaWYgWyAkKGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGFkdmljZS5yZXNvbHZlQ29uZmxpY3QgfHwgZWNobyB0cnVlKSA9ICJ0cnVlIiBdOyB0aGVuCisJZGllICIkKGdldHRleHQgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuCitQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nCithcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24sIG9yIHVzZSAnZ2l0IGNvbW1pdCAtYScuIikiCisgICAgZWxzZQorCWRpZSAiJChnZXR0ZXh0ICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIpIgorICAgIGZpCit9CisKK2RpZV9tZXJnZSAoKSB7CisgICAgaWYgWyAkKGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGFkdmljZS5yZXNvbHZlQ29uZmxpY3QgfHwgZWNobyB0cnVlKSA9ICJ0cnVlIiBdOyB0aGVuCisJZGllICIkKGdldHRleHQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLgorUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIpIgorICAgIGVsc2UKKwlkaWUgIiQoZ2V0dGV4dCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIikiCisgICAgZmkKK30KKwordGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiB8fCBkaWVfY29uZmxpY3QKK3Rlc3QgLWYgIiRHSVRfRElSL01FUkdFX0hFQUQiICYmIGRpZV9tZXJnZQorCitzdHJhdGVneV9hcmdzPSBkaWZmc3RhdD0gbm9fY29tbWl0PSBzcXVhc2g9IG5vX2ZmPSBmZl9vbmx5PQorbG9nX2FyZz0gdmVyYm9zaXR5PSBwcm9ncmVzcz0gcmVjdXJzZV9zdWJtb2R1bGVzPQorbWVyZ2VfYXJncz0gZWRpdD0KK2N1cnJfYnJhbmNoPSQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKQorY3Vycl9icmFuY2hfc2hvcnQ9IiR7Y3Vycl9icmFuY2gjcmVmcy9oZWFkcy99IgorcmViYXNlPSQoZ2l0IGNvbmZpZyAtLWJvb2wgYnJhbmNoLiRjdXJyX2JyYW5jaF9zaG9ydC5yZWJhc2UpCitpZiB0ZXN0IC16ICIkcmViYXNlIgordGhlbgorCXJlYmFzZT0kKGdpdCBjb25maWcgLS1ib29sIHB1bGwucmViYXNlKQorZmkKK2RyeV9ydW49Cit3aGlsZSA6CitkbworCWNhc2UgIiQxIiBpbgorCS1xfC0tcXVpZXQpCisJCXZlcmJvc2l0eT0iJHZlcmJvc2l0eSAtcSIgOzsKKwktdnwtLXZlcmJvc2UpCisJCXZlcmJvc2l0eT0iJHZlcmJvc2l0eSAtdiIgOzsKKwktLXByb2dyZXNzKQorCQlwcm9ncmVzcz0tLXByb2dyZXNzIDs7CisJLS1uby1wcm9ncmVzcykKKwkJcHJvZ3Jlc3M9LS1uby1wcm9ncmVzcyA7OworCS1ufC0tbm8tc3RhdHwtLW5vLXN1bW1hcnkpCisJCWRpZmZzdGF0PS0tbm8tc3RhdCA7OworCS0tc3RhdHwtLXN1bW1hcnkpCisJCWRpZmZzdGF0PS0tc3RhdCA7OworCS0tbG9nfC0tbm8tbG9nKQorCQlsb2dfYXJnPSQxIDs7CisJLS1uby1jfC0tbm8tY298LS1uby1jb218LS1uby1jb21tfC0tbm8tY29tbWl8LS1uby1jb21taXQpCisJCW5vX2NvbW1pdD0tLW5vLWNvbW1pdCA7OworCS0tY3wtLWNvfC0tY29tfC0tY29tbXwtLWNvbW1pfC0tY29tbWl0KQorCQlub19jb21taXQ9LS1jb21taXQgOzsKKwktZXwtLWVkaXQpCisJCWVkaXQ9LS1lZGl0IDs7CisJLS1uby1lZGl0KQorCQllZGl0PS0tbm8tZWRpdCA7OworCS0tc3F8LS1zcXV8LS1zcXVhfC0tc3F1YXN8LS1zcXVhc2gpCisJCXNxdWFzaD0tLXNxdWFzaCA7OworCS0tbm8tc3F8LS1uby1zcXV8LS1uby1zcXVhfC0tbm8tc3F1YXN8LS1uby1zcXVhc2gpCisJCXNxdWFzaD0tLW5vLXNxdWFzaCA7OworCS0tZmYpCisJCW5vX2ZmPS0tZmYgOzsKKwktLW5vLWZmKQorCQlub19mZj0tLW5vLWZmIDs7CisJLS1mZi1vbmx5KQorCQlmZl9vbmx5PS0tZmYtb25seSA7OworCS1zPSp8LS1zPSp8LS1zdD0qfC0tc3RyPSp8LS1zdHJhPSp8LS1zdHJhdD0qfC0tc3RyYXRlPSp8XAorCQktLXN0cmF0ZWc9KnwtLXN0cmF0ZWd5PSp8XAorCS1zfC0tc3wtLXN0fC0tc3RyfC0tc3RyYXwtLXN0cmF0fC0tc3RyYXRlfC0tc3RyYXRlZ3wtLXN0cmF0ZWd5KQorCQljYXNlICIkIywkMSIgaW4KKwkJKiwqPSopCisJCQlzdHJhdGVneT1gZXhwciAieiQxIiA6ICd6LVtePV0qPVwoLipcKSdgIDs7CisJCTEsKikKKwkJCXVzYWdlIDs7CisJCSopCisJCQlzdHJhdGVneT0iJDIiCisJCQlzaGlmdCA7OworCQllc2FjCisJCXN0cmF0ZWd5X2FyZ3M9IiR7c3RyYXRlZ3lfYXJnc30tcyAkc3RyYXRlZ3kgIgorCQk7OworCS1YKikKKwkJY2FzZSAiJCMsJDEiIGluCisJCTEsLVgpCisJCQl1c2FnZSA7OworCQkqLC1YKQorCQkJeHg9Ii1YICQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkMiIpIgorCQkJc2hpZnQgOzsKKwkJKiwqKQorCQkJeHg9JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiQxIikgOzsKKwkJZXNhYworCQltZXJnZV9hcmdzPSIkbWVyZ2VfYXJncyR4eCAiCisJCTs7CisJLXJ8LS1yfC0tcmV8LS1yZWJ8LS1yZWJhfC0tcmViYXN8LS1yZWJhc2UpCisJCXJlYmFzZT10cnVlCisJCTs7CisJLS1uby1yfC0tbm8tcmV8LS1uby1yZWJ8LS1uby1yZWJhfC0tbm8tcmViYXN8LS1uby1yZWJhc2UpCisJCXJlYmFzZT1mYWxzZQorCQk7OworCS0tcmVjdXJzZS1zdWJtb2R1bGVzKQorCQlyZWN1cnNlX3N1Ym1vZHVsZXM9LS1yZWN1cnNlLXN1Ym1vZHVsZXMKKwkJOzsKKwktLXJlY3Vyc2Utc3VibW9kdWxlcz0qKQorCQlyZWN1cnNlX3N1Ym1vZHVsZXM9IiQxIgorCQk7OworCS0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzKQorCQlyZWN1cnNlX3N1Ym1vZHVsZXM9LS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMKKwkJOzsKKwktLWR8LS1kcnwtLWRyeXwtLWRyeS18LS1kcnktcnwtLWRyeS1ydXwtLWRyeS1ydW4pCisJCWRyeV9ydW49LS1kcnktcnVuCisJCTs7CisJLWh8LS1oZWxwLWFsbCkKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQkjIFBhc3MgdGhydSBhbnl0aGluZyB0aGF0IG1heSBiZSBtZWFudCBmb3IgZmV0Y2guCisJCWJyZWFrCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK2Vycm9yX29uX25vX21lcmdlX2NhbmRpZGF0ZXMgKCkgeworCWV4ZWMgPiYyCisJZm9yIG9wdAorCWRvCisJCWNhc2UgIiRvcHQiIGluCisJCS10fC0tdHwtLXRhfC0tdGFnfC0tdGFncykKKwkJCWVjaG8gIkZldGNoaW5nIHRhZ3Mgb25seSwgeW91IHByb2JhYmx5IG1lYW50OiIKKwkJCWVjaG8gIiAgZ2l0IGZldGNoIC0tdGFncyIKKwkJCWV4aXQgMQorCQllc2FjCisJZG9uZQorCisJaWYgdGVzdCB0cnVlID0gIiRyZWJhc2UiCisJdGhlbgorCQlvcF90eXBlPXJlYmFzZQorCQlvcF9wcmVwPWFnYWluc3QKKwllbHNlCisJCW9wX3R5cGU9bWVyZ2UKKwkJb3BfcHJlcD13aXRoCisJZmkKKworCWN1cnJfYnJhbmNoPSR7Y3Vycl9icmFuY2gjcmVmcy9oZWFkcy99CisJdXBzdHJlYW09JChnaXQgY29uZmlnICJicmFuY2guJGN1cnJfYnJhbmNoLm1lcmdlIikKKwlyZW1vdGU9JChnaXQgY29uZmlnICJicmFuY2guJGN1cnJfYnJhbmNoLnJlbW90ZSIpCisKKwlpZiBbICQjIC1ndCAxIF07IHRoZW4KKwkJaWYgWyAiJHJlYmFzZSIgPSB0cnVlIF07IHRoZW4KKwkJCXByaW50ZiAiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0ICIKKwkJZWxzZQorCQkJcHJpbnRmICJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyAiCisJCWZpCisJCWVjaG8gImFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCisJCWVjaG8gIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm8iCisJCWVjaG8gIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIgorCWVsaWYgWyAkIyAtZ3QgMCBdICYmIFsgIiQxIiAhPSAiJHJlbW90ZSIgXTsgdGhlbgorCQllY2hvICJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyQxJywgYnV0IGRpZCBub3Qgc3BlY2lmeSIKKwkJZWNobyAiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGUiCisJCWVjaG8gImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorCWVsaWYgWyAteiAiJGN1cnJfYnJhbmNoIiAtbyAteiAiJHVwc3RyZWFtIiBdOyB0aGVuCisJCS4gZ2l0LXBhcnNlLXJlbW90ZQorCQllcnJvcl9vbl9taXNzaW5nX2RlZmF1bHRfdXBzdHJlYW0gInB1bGwiICRvcF90eXBlICRvcF9wcmVwIFwKKwkJCSJnaXQgcHVsbCA8cmVtb3RlPiA8YnJhbmNoPiIKKwllbHNlCisJCWVjaG8gIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gJG9wX3R5cGUgJG9wX3ByZXAgdGhlIHJlZiAnJHt1cHN0cmVhbSNyZWZzL2hlYWRzL30nIgorCQllY2hvICJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCisJZmkKKwlleGl0IDEKK30KKwordGVzdCB0cnVlID0gIiRyZWJhc2UiICYmIHsKKwlpZiAhIGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsCisJdGhlbgorCQkjIE9uIGFuIHVuYm9ybiBicmFuY2gKKwkJaWYgdGVzdCAtZiAiJEdJVF9ESVIvaW5kZXgiCisJCXRoZW4KKwkJCWRpZSAiJChnZXR0ZXh0ICJ1cGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXgiKSIKKwkJZmkKKwllbHNlCisJCXJlcXVpcmVfY2xlYW5fd29ya190cmVlICJwdWxsIHdpdGggcmViYXNlIiAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKKwlmaQorCW9sZHJlbW90ZXJlZj0gJiYKKwkuIGdpdC1wYXJzZS1yZW1vdGUgJiYKKwlyZW1vdGVyZWY9IiQoZ2V0X3JlbW90ZV9tZXJnZV9icmFuY2ggIiRAIiAyPi9kZXYvbnVsbCkiICYmCisJb2xkcmVtb3RlcmVmPSIkKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiRyZW1vdGVyZWYiKSIgJiYKKwlmb3IgcmVmbG9nIGluICQoZ2l0IHJldi1saXN0IC1nICRyZW1vdGVyZWYgMj4vZGV2L251bGwpCisJZG8KKwkJaWYgdGVzdCAiJHJlZmxvZyIgPSAiJChnaXQgbWVyZ2UtYmFzZSAkcmVmbG9nICRjdXJyX2JyYW5jaCkiCisJCXRoZW4KKwkJCW9sZHJlbW90ZXJlZj0iJHJlZmxvZyIKKwkJCWJyZWFrCisJCWZpCisJZG9uZQorfQorb3JpZ19oZWFkPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSBIRUFEKQorZ2l0IGZldGNoICR2ZXJib3NpdHkgJHByb2dyZXNzICRkcnlfcnVuICRyZWN1cnNlX3N1Ym1vZHVsZXMgLS11cGRhdGUtaGVhZC1vayAiJEAiIHx8IGV4aXQgMQordGVzdCAteiAiJGRyeV9ydW4iIHx8IGV4aXQgMAorCitjdXJyX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IEhFQUQpCitpZiB0ZXN0IC1uICIkb3JpZ19oZWFkIiAmJiB0ZXN0ICIkY3Vycl9oZWFkIiAhPSAiJG9yaWdfaGVhZCIKK3RoZW4KKwkjIFRoZSBmZXRjaCBpbnZvbHZlZCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2guCisKKwkjIFRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBmaWxlIGlzIHN0aWxsIGJhc2VkIG9uIHRoZQorCSMgJG9yaWdfaGVhZCBjb21taXQsIGJ1dCB3ZSBhcmUgbWVyZ2luZyBpbnRvICRjdXJyX2hlYWQuCisJIyBGaXJzdCB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB0byBtYXRjaCAkY3Vycl9oZWFkLgorCisJZXZhbF9nZXR0ZXh0bG4gIldhcm5pbmc6IGZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuCitXYXJuaW5nOiBmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbQorV2FybmluZzogY29tbWl0IFwkb3JpZ19oZWFkLiIgPiYyCisJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2gKKwlnaXQgcmVhZC10cmVlIC11IC1tICIkb3JpZ19oZWFkIiAiJGN1cnJfaGVhZCIgfHwKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS4KK0FmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb20KKyQgZ2l0IGRpZmYgXCRvcmlnX2hlYWQKK291dHB1dCwgcnVuCiskIGdpdCByZXNldCAtLWhhcmQKK3RvIHJlY292ZXIuIikiCisKK2ZpCisKK21lcmdlX2hlYWQ9JChzZWQgLWUgJy8Jbm90LWZvci1tZXJnZQkvZCcgXAorCS1lICdzLwkuKi8vJyAiJEdJVF9ESVIiL0ZFVENIX0hFQUQgfCBcCisJdHIgJ1wwMTInICcgJykKKworY2FzZSAiJG1lcmdlX2hlYWQiIGluCisnJykKKwllcnJvcl9vbl9ub19tZXJnZV9jYW5kaWRhdGVzICIkQCIKKwk7OworPyonICc/KikKKwlpZiB0ZXN0IC16ICIkb3JpZ19oZWFkIgorCXRoZW4KKwkJZGllICIkKGdldHRleHQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQiKSIKKwlmaQorCWlmIHRlc3QgdHJ1ZSA9ICIkcmViYXNlIgorCXRoZW4KKwkJZGllICIkKGdldHRleHQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIpIgorCWZpCisJOzsKK2VzYWMKKworaWYgdGVzdCAteiAiJG9yaWdfaGVhZCIKK3RoZW4KKwlnaXQgdXBkYXRlLXJlZiAtbSAiaW5pdGlhbCBwdWxsIiBIRUFEICRtZXJnZV9oZWFkICIkY3Vycl9oZWFkIiAmJgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCB8fCBleGl0IDEKKwlleGl0CitmaQorCitpZiB0ZXN0IHRydWUgPSAiJHJlYmFzZSIKK3RoZW4KKwlvPSQoZ2l0IHNob3ctYnJhbmNoIC0tbWVyZ2UtYmFzZSAkY3Vycl9icmFuY2ggJG1lcmdlX2hlYWQgJG9sZHJlbW90ZXJlZikKKwlpZiB0ZXN0ICIkb2xkcmVtb3RlcmVmIiA9ICIkbyIKKwl0aGVuCisJCXVuc2V0IG9sZHJlbW90ZXJlZgorCWZpCitmaQorCittZXJnZV9uYW1lPSQoZ2l0IGZtdC1tZXJnZS1tc2cgJGxvZ19hcmcgPCIkR0lUX0RJUi9GRVRDSF9IRUFEIikgfHwgZXhpdAorY2FzZSAiJHJlYmFzZSIgaW4KK3RydWUpCisJZXZhbD0iZ2l0LXJlYmFzZSAkZGlmZnN0YXQgJHN0cmF0ZWd5X2FyZ3MgJG1lcmdlX2FyZ3MiCisJZXZhbD0iJGV2YWwgLS1vbnRvICRtZXJnZV9oZWFkICR7b2xkcmVtb3RlcmVmOi0kbWVyZ2VfaGVhZH0iCisJOzsKKyopCisJZXZhbD0iZ2l0LW1lcmdlICRkaWZmc3RhdCAkbm9fY29tbWl0ICRlZGl0ICRzcXVhc2ggJG5vX2ZmICRmZl9vbmx5IgorCWV2YWw9IiRldmFsICAkbG9nX2FyZyAkc3RyYXRlZ3lfYXJncyAkbWVyZ2VfYXJncyAkdmVyYm9zaXR5ICRwcm9ncmVzcyIKKwlldmFsPSIkZXZhbCBcIlwkbWVyZ2VfbmFtZVwiIEhFQUQgJG1lcmdlX2hlYWQiCisJOzsKK2VzYWMKK2V2YWwgImV4ZWMgJGV2YWwiCmRpZmYgLS1naXQgYS9naXQtcXVpbHRpbXBvcnQuc2ggYi9naXQtcXVpbHRpbXBvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWE2YmEyYgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1xdWlsdGltcG9ydC5zaApAQCAtMCwwICsxLDEzOCBAQAorIyEvYmluL3NoCitPUFRJT05TX0tFRVBEQVNIREFTSD0KK09QVElPTlNfU1BFQz0iXAorZ2l0IHF1aWx0aW1wb3J0IFtvcHRpb25zXQorLS0KK24sZHJ5LXJ1biAgICAgZHJ5IHJ1bgorYXV0aG9yPSAgICAgICBhdXRob3IgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyBmb3IgcGF0Y2hlcyB3aXRob3V0IGFueQorcGF0Y2hlcz0gICAgICBwYXRoIHRvIHRoZSBxdWlsdCBzZXJpZXMgYW5kIHBhdGNoZXMKKyIKK1NVQkRJUkVDVE9SWV9PTj1ZZXMKKy4gZ2l0LXNoLXNldHVwCisKK2RyeV9ydW49IiIKK3F1aWx0X2F1dGhvcj0iIgord2hpbGUgdGVzdCAkIyAhPSAwCitkbworCWNhc2UgIiQxIiBpbgorCS0tYXV0aG9yKQorCQlzaGlmdAorCQlxdWlsdF9hdXRob3I9IiQxIgorCQk7OworCS1ufC0tZHJ5LXJ1bikKKwkJZHJ5X3J1bj0xCisJCTs7CisJLS1wYXRjaGVzKQorCQlzaGlmdAorCQlRVUlMVF9QQVRDSEVTPSIkMSIKKwkJOzsKKwktLSkKKwkJc2hpZnQKKwkJYnJlYWs7OworCSopCisJCXVzYWdlCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKKyMgUXVpbHQgQXV0aG9yCitpZiBbIC1uICIkcXVpbHRfYXV0aG9yIiBdIDsgdGhlbgorCXF1aWx0X2F1dGhvcl9uYW1lPSQoZXhwciAieiRxdWlsdF9hdXRob3IiIDogJ3pcKC4qW14gXVwpICo8LionKSAmJgorCXF1aWx0X2F1dGhvcl9lbWFpbD0kKGV4cHIgInokcXVpbHRfYXV0aG9yIiA6ICcuKjxcKFtePl0qXCknKSAmJgorCXRlc3QgJycgIT0gIiRxdWlsdF9hdXRob3JfbmFtZSIgJiYKKwl0ZXN0ICcnICE9ICIkcXVpbHRfYXV0aG9yX2VtYWlsIiB8fAorCWRpZSAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK2ZpCisKKyMgUXVpbHQgcGF0Y2ggZGlyZWN0b3J5Cis6ICR7UVVJTFRfUEFUQ0hFUzo9cGF0Y2hlc30KK2lmICEgWyAtZCAiJFFVSUxUX1BBVENIRVMiIF0gOyB0aGVuCisJZWNobyAiVGhlIFwiJFFVSUxUX1BBVENIRVNcIiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIgorCWV4aXQgMQorZmkKKworIyBUZW1wb3JhcnkgZGlyZWN0b3JpZXMKK3RtcF9kaXI9IiRHSVRfRElSIi9yZWJhc2UtYXBwbHkKK3RtcF9tc2c9IiR0bXBfZGlyL21zZyIKK3RtcF9wYXRjaD0iJHRtcF9kaXIvcGF0Y2giCit0bXBfaW5mbz0iJHRtcF9kaXIvaW5mbyIKKworCisjIEZpbmQgdGhlIGludGlhbCBjb21taXQKK2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKworbWtkaXIgJHRtcF9kaXIgfHwgZXhpdCAyCit3aGlsZSByZWFkIHBhdGNoX25hbWUgbGV2ZWwgZ2FyYmFnZSA8JjMKK2RvCisJY2FzZSAiJHBhdGNoX25hbWUiIGluICcnfCcjJyopIGNvbnRpbnVlOzsgZXNhYworCWNhc2UgIiRsZXZlbCIgaW4KKwktcCopCTs7CisJJyd8JyMnKikKKwkJbGV2ZWw9OzsKKwkqKQorCQllY2hvICJ1bmFibGUgdG8gcGFyc2UgcGF0Y2ggbGV2ZWwsIGlnbm9yaW5nIGl0LiIKKwkJbGV2ZWw9OzsKKwllc2FjCisJY2FzZSAiJGdhcmJhZ2UiIGluCisJJyd8JyMnKik7OworCSopCisJCWVjaG8gInRyYWlsaW5nIGdhcmJhZ2UgZm91bmQgaW4gc2VyaWVzIGZpbGU6ICRnYXJiYWdlIgorCQlleGl0IDE7OworCWVzYWMKKwlpZiAhIFsgLWYgIiRRVUlMVF9QQVRDSEVTLyRwYXRjaF9uYW1lIiBdIDsgdGhlbgorCQllY2hvICIkcGF0Y2hfbmFtZSBkb2Vzbid0IGV4aXN0LiBTa2lwcGluZy4iCisJCWNvbnRpbnVlCisJZmkKKwllY2hvICRwYXRjaF9uYW1lCisJZ2l0IG1haWxpbmZvICIkdG1wX21zZyIgIiR0bXBfcGF0Y2giIFwKKwkJPCIkUVVJTFRfUEFUQ0hFUy8kcGF0Y2hfbmFtZSIgPiIkdG1wX2luZm8iIHx8IGV4aXQgMworCXRlc3QgLXMgIiR0bXBfcGF0Y2giIHx8IHsKKwkJZWNobyAiUGF0Y2ggaXMgZW1wdHkuICBXYXMgaXQgc3BsaXQgd3Jvbmc/IgorCQlleGl0IDEKKwl9CisKKwkjIFBhcnNlIHRoZSBhdXRob3IgaW5mb3JtYXRpb24KKwlHSVRfQVVUSE9SX05BTUU9JChzZWQgLW5lICdzL0F1dGhvcjogLy9wJyAiJHRtcF9pbmZvIikKKwlHSVRfQVVUSE9SX0VNQUlMPSQoc2VkIC1uZSAncy9FbWFpbDogLy9wJyAiJHRtcF9pbmZvIikKKwlleHBvcnQgR0lUX0FVVEhPUl9OQU1FIEdJVF9BVVRIT1JfRU1BSUwKKwl3aGlsZSB0ZXN0IC16ICIkR0lUX0FVVEhPUl9FTUFJTCIgJiYgdGVzdCAteiAiJEdJVF9BVVRIT1JfTkFNRSIgOyBkbworCQlpZiBbIC1uICIkcXVpbHRfYXV0aG9yIiBdIDsgdGhlbgorCQkJR0lUX0FVVEhPUl9OQU1FPSIkcXVpbHRfYXV0aG9yX25hbWUiOworCQkJR0lUX0FVVEhPUl9FTUFJTD0iJHF1aWx0X2F1dGhvcl9lbWFpbCI7CisJCWVsaWYgWyAtbiAiJGRyeV9ydW4iIF07IHRoZW4KKwkJCWVjaG8gIk5vIGF1dGhvciBmb3VuZCBpbiAkcGF0Y2hfbmFtZSIgPiYyOworCQkJR0lUX0FVVEhPUl9OQU1FPSJkcnktcnVuLW5vdC1mb3VuZCI7CisJCQlHSVRfQVVUSE9SX0VNQUlMPSJkcnktcnVuLW5vdC1mb3VuZCI7CisJCWVsc2UKKwkJCWVjaG8gIk5vIGF1dGhvciBmb3VuZCBpbiAkcGF0Y2hfbmFtZSIgPiYyOworCQkJZWNobyAiLS0tIgorCQkJY2F0ICR0bXBfbXNnCisJCQlwcmludGYgIkF1dGhvcjogIjsKKwkJCXJlYWQgcGF0Y2hfYXV0aG9yCisKKwkJCWVjaG8gIiRwYXRjaF9hdXRob3IiCisKKwkJCXBhdGNoX2F1dGhvcl9uYW1lPSQoZXhwciAieiRwYXRjaF9hdXRob3IiIDogJ3pcKC4qW14gXVwpICo8LionKSAmJgorCQkJcGF0Y2hfYXV0aG9yX2VtYWlsPSQoZXhwciAieiRwYXRjaF9hdXRob3IiIDogJy4qPFwoW14+XSpcKScpICYmCisJCQl0ZXN0ICcnICE9ICIkcGF0Y2hfYXV0aG9yX25hbWUiICYmCisJCQl0ZXN0ICcnICE9ICIkcGF0Y2hfYXV0aG9yX2VtYWlsIiAmJgorCQkJR0lUX0FVVEhPUl9OQU1FPSIkcGF0Y2hfYXV0aG9yX25hbWUiICYmCisJCQlHSVRfQVVUSE9SX0VNQUlMPSIkcGF0Y2hfYXV0aG9yX2VtYWlsIgorCQlmaQorCWRvbmUKKwlHSVRfQVVUSE9SX0RBVEU9JChzZWQgLW5lICdzL0RhdGU6IC8vcCcgIiR0bXBfaW5mbyIpCisJU1VCSkVDVD0kKHNlZCAtbmUgJ3MvU3ViamVjdDogLy9wJyAiJHRtcF9pbmZvIikKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIFNVQkpFQ1QKKwlpZiBbIC16ICIkU1VCSkVDVCIgXSA7IHRoZW4KKwkJU1VCSkVDVD0kKGVjaG8gJHBhdGNoX25hbWUgfCBzZWQgLWUgJ3MvLnBhdGNoJC8vJykKKwlmaQorCisJaWYgWyAteiAiJGRyeV9ydW4iIF0gOyB0aGVuCisJCWdpdCBhcHBseSAtLWluZGV4IC1DMSAke2xldmVsOisiJGxldmVsIn0gIiR0bXBfcGF0Y2giICYmCisJCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJY29tbWl0PSQoIChlY2hvICIkU1VCSkVDVCI7IGVjaG87IGNhdCAiJHRtcF9tc2ciKSB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSAtcCAkY29tbWl0KSAmJgorCQlnaXQgdXBkYXRlLXJlZiAtbSAicXVpbHRpbXBvcnQ6ICRwYXRjaF9uYW1lIiBIRUFEICRjb21taXQgfHwgZXhpdCA0CisJZmkKK2RvbmUgMzwiJFFVSUxUX1BBVENIRVMvc2VyaWVzIgorcm0gLXJmICR0bXBfZGlyIHx8IGV4aXQgNQpkaWZmIC0tZ2l0IGEvZ2l0LXJlYmFzZS0tYW0uc2ggYi9naXQtcmViYXNlLS1hbS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTJlYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXJlYmFzZS0tYW0uc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBKdW5pbyBDIEhhbWFuby4KKyMKKworY2FzZSAiJGFjdGlvbiIgaW4KK2NvbnRpbnVlKQorCWdpdCBhbSAtLXJlc29sdmVkIC0tcmVzb2x2ZW1zZz0iJHJlc29sdmVtc2ciICYmCisJbW92ZV90b19vcmlnaW5hbF9icmFuY2gKKwlleGl0CisJOzsKK3NraXApCisJZ2l0IGFtIC0tc2tpcCAtLXJlc29sdmVtc2c9IiRyZXNvbHZlbXNnIiAmJgorCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCisJZXhpdAorCTs7Citlc2FjCisKK3Rlc3QgLW4gIiRyZWJhc2Vfcm9vdCIgJiYgcm9vdF9mbGFnPS0tcm9vdAorCitpZiB0ZXN0IC1uICIka2VlcF9lbXB0eSIKK3RoZW4KKwkjIHdlIGhhdmUgdG8gZG8gdGhpcyB0aGUgaGFyZCB3YXkuICBnaXQgZm9ybWF0LXBhdGNoIGNvbXBsZXRlbHkgc3F1YXNoZXMKKwkjIGVtcHR5IGNvbW1pdHMgYW5kIGV2ZW4gaWYgaXQgZGlkbid0IHRoZSBmb3JtYXQgZG9lc24ndCByZWFsbHkgbGVuZAorCSMgaXRzZWxmIHdlbGwgdG8gcmVjb3JkaW5nIGVtcHR5IHBhdGNoZXMuICBmb3J0dW5hdGVseSwgY2hlcnJ5LXBpY2sKKwkjIG1ha2VzIHRoaXMgZWFzeQorCWdpdCBjaGVycnktcGljayAtLWFsbG93LWVtcHR5ICIkcmV2aXNpb25zIgorZWxzZQorCWdpdCBmb3JtYXQtcGF0Y2ggLWsgLS1zdGRvdXQgLS1mdWxsLWluZGV4IC0taWdub3JlLWlmLWluLXVwc3RyZWFtIFwKKwkJLS1zcmMtcHJlZml4PWEvIC0tZHN0LXByZWZpeD1iLyBcCisJCS0tbm8tcmVuYW1lcyAkcm9vdF9mbGFnICIkcmV2aXNpb25zIiB8CisJZ2l0IGFtICRnaXRfYW1fb3B0IC0tcmViYXNpbmcgLS1yZXNvbHZlbXNnPSIkcmVzb2x2ZW1zZyIKK2ZpICYmIG1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCisKK3JldD0kPwordGVzdCAwICE9ICRyZXQgLWEgLWQgIiRzdGF0ZV9kaXIiICYmIHdyaXRlX2Jhc2ljX3N0YXRlCitleGl0ICRyZXQKZGlmZiAtLWdpdCBhL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoIGIvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5MDFkNQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCkBAIC0wLDAgKzEsOTcxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKworIyBTSE9SVCBERVNDUklQVElPTgorIworIyBUaGlzIHNjcmlwdCBtYWtlcyBpdCBlYXN5IHRvIGZpeCB1cCBjb21taXRzIGluIHRoZSBtaWRkbGUgb2YgYSBzZXJpZXMsCisjIGFuZCByZWFycmFuZ2UgY29tbWl0cy4KKyMKKyMgVGhlIG9yaWdpbmFsIGlkZWEgY29tZXMgZnJvbSBFcmljIFcuIEJpZWRlcm1hbiwgaW4KKyMgaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8yMjQwNworIworIyBUaGUgZmlsZSBjb250YWluaW5nIHJlYmFzZSBjb21tYW5kcywgY29tbWVudHMsIGFuZCBlbXB0eSBsaW5lcy4KKyMgVGhpcyBmaWxlIGlzIGNyZWF0ZWQgYnkgImdpdCByZWJhc2UgLWkiIHRoZW4gZWRpdGVkIGJ5IHRoZSB1c2VyLiAgQXMKKyMgdGhlIGxpbmVzIGFyZSBwcm9jZXNzZWQsIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZnJvbnQgb2YgdGhpcworIyBmaWxlIGFuZCB3cml0dGVuIHRvIHRoZSB0YWlsIG9mICRkb25lLgordG9kbz0iJHN0YXRlX2RpciIvZ2l0LXJlYmFzZS10b2RvCisKKyMgVGhlIHJlYmFzZSBjb21tYW5kIGxpbmVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLiAgQSBsaW5lCisjIGlzIG1vdmVkIGhlcmUgd2hlbiBpdCBpcyBmaXJzdCBoYW5kbGVkLCBiZWZvcmUgYW55IGFzc29jaWF0ZWQgdXNlcgorIyBhY3Rpb25zLgorZG9uZT0iJHN0YXRlX2RpciIvZG9uZQorCisjIFRoZSBjb21taXQgbWVzc2FnZSB0aGF0IGlzIHBsYW5uZWQgdG8gYmUgdXNlZCBmb3IgYW55IGNoYW5nZXMgdGhhdAorIyBuZWVkIHRvIGJlIGNvbW1pdHRlZCBmb2xsb3dpbmcgYSB1c2VyIGludGVyYWN0aW9uLgorbXNnPSIkc3RhdGVfZGlyIi9tZXNzYWdlCisKKyMgVGhlIGZpbGUgaW50byB3aGljaCBpcyBhY2N1bXVsYXRlZCB0aGUgc3VnZ2VzdGVkIGNvbW1pdCBtZXNzYWdlIGZvcgorIyBzcXVhc2gvZml4dXAgY29tbWFuZHMuICBXaGVuIHRoZSBmaXJzdCBvZiBhIHNlcmllcyBvZiBzcXVhc2gvZml4dXBzCisjIGlzIHNlZW4sIHRoZSBmaWxlIGlzIGNyZWF0ZWQgYW5kIHRoZSBjb21taXQgbWVzc2FnZSBmcm9tIHRoZQorIyBwcmV2aW91cyBjb21taXQgYW5kIGZyb20gdGhlIGZpcnN0IHNxdWFzaC9maXh1cCBjb21taXQgYXJlIHdyaXR0ZW4KKyMgdG8gaXQuICBUaGUgY29tbWl0IG1lc3NhZ2UgZm9yIGVhY2ggc3Vic2VxdWVudCBzcXVhc2gvZml4dXAgY29tbWl0CisjIGlzIGFwcGVuZGVkIHRvIHRoZSBmaWxlIGFzIGl0IGlzIHByb2Nlc3NlZC4KKyMKKyMgVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUgaXMgb2YgdGhlIGZvcm0KKyMgICAgICMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLgorIyB3aGVyZSAkY291bnQgaXMgdGhlIG51bWJlciBvZiBjb21taXRzIHdob3NlIG1lc3NhZ2VzIGhhdmUgYmVlbgorIyB3cml0dGVuIHRvIHRoZSBmaWxlIHNvIGZhciAoaW5jbHVkaW5nIHRoZSBpbml0aWFsICJwaWNrIiBjb21taXQpLgorIyBFYWNoIHRpbWUgdGhhdCBhIGNvbW1pdCBtZXNzYWdlIGlzIHByb2Nlc3NlZCwgdGhpcyBsaW5lIGlzIHJlYWQgYW5kCisjIHVwZGF0ZWQuICBJdCBpcyBkZWxldGVkIGp1c3QgYmVmb3JlIHRoZSBjb21iaW5lZCBjb21taXQgaXMgbWFkZS4KK3NxdWFzaF9tc2c9IiRzdGF0ZV9kaXIiL21lc3NhZ2Utc3F1YXNoCisKKyMgSWYgdGhlIGN1cnJlbnQgc2VyaWVzIG9mIHNxdWFzaC9maXh1cHMgaGFzIG5vdCB5ZXQgaW5jbHVkZWQgYSBzcXVhc2gKKyMgY29tbWFuZCwgdGhlbiB0aGlzIGZpbGUgZXhpc3RzIGFuZCBob2xkcyB0aGUgY29tbWl0IG1lc3NhZ2Ugb2YgdGhlCisjIG9yaWdpbmFsICJwaWNrIiBjb21taXQuICAoSWYgdGhlIHNlcmllcyBlbmRzIHdpdGhvdXQgYSAic3F1YXNoIgorIyBjb21tYW5kLCB0aGVuIHRoaXMgY2FuIGJlIHVzZWQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIHRoZSBjb21iaW5lZAorIyBjb21taXQgd2l0aG91dCBvcGVuaW5nIHRoZSBlZGl0b3IuKQorZml4dXBfbXNnPSIkc3RhdGVfZGlyIi9tZXNzYWdlLWZpeHVwCisKKyMgJHJld3JpdHRlbiBpcyB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSBjb250YWluaW5nIGZpbGVzIGZvciBlYWNoCisjIGNvbW1pdCB0aGF0IGlzIHJlYWNoYWJsZSBieSBhdCBsZWFzdCBvbmUgbWVyZ2UgYmFzZSBvZiAkaGVhZCBhbmQKKyMgJHVwc3RyZWFtLiBUaGV5IGFyZSBub3QgbmVjZXNzYXJpbHkgcmV3cml0dGVuLCBidXQgdGhlaXIgY2hpbGRyZW4KKyMgbWlnaHQgYmUuICBUaGlzIGVuc3VyZXMgdGhhdCBjb21taXRzIG9uIG1lcmdlZCwgYnV0IG90aGVyd2lzZQorIyB1bnJlbGF0ZWQgc2lkZSBicmFuY2hlcyBhcmUgbGVmdCBhbG9uZS4gKFRoaW5rICJYIiBpbiB0aGUgbWFuIHBhZ2UncworIyBleGFtcGxlLikKK3Jld3JpdHRlbj0iJHN0YXRlX2RpciIvcmV3cml0dGVuCisKK2Ryb3BwZWQ9IiRzdGF0ZV9kaXIiL2Ryb3BwZWQKKworIyBBIHNjcmlwdCB0byBzZXQgdGhlIEdJVF9BVVRIT1JfTkFNRSwgR0lUX0FVVEhPUl9FTUFJTCwgYW5kCisjIEdJVF9BVVRIT1JfREFURSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGNvbW1pdCB0aGF0IGlzIGN1cnJlbnRseQorIyBiZWluZyByZWJhc2VkLgorYXV0aG9yX3NjcmlwdD0iJHN0YXRlX2RpciIvYXV0aG9yLXNjcmlwdAorCisjIFdoZW4gYW4gImVkaXQiIHJlYmFzZSBjb21tYW5kIGlzIGJlaW5nIHByb2Nlc3NlZCwgdGhlIFNIQTEgb2YgdGhlCisjIGNvbW1pdCB0byBiZSBlZGl0ZWQgaXMgcmVjb3JkZWQgaW4gdGhpcyBmaWxlLiAgV2hlbiAiZ2l0IHJlYmFzZQorIyAtLWNvbnRpbnVlIiBpcyBleGVjdXRlZCwgaWYgdGhlcmUgYXJlIGFueSBzdGFnZWQgY2hhbmdlcyB0aGVuIHRoZXkKKyMgd2lsbCBiZSBhbWVuZGVkIHRvIHRoZSBIRUFEIGNvbW1pdCwgYnV0IG9ubHkgcHJvdmlkZWQgdGhlIEhFQUQKKyMgY29tbWl0IGlzIHN0aWxsIHRoZSBjb21taXQgdG8gYmUgZWRpdGVkLiAgV2hlbiBhbnkgb3RoZXIgcmViYXNlCisjIGNvbW1hbmQgaXMgcHJvY2Vzc2VkLCB0aGlzIGZpbGUgaXMgZGVsZXRlZC4KK2FtZW5kPSIkc3RhdGVfZGlyIi9hbWVuZAorCisjIEZvciB0aGUgcG9zdC1yZXdyaXRlIGhvb2ssIHdlIG1ha2UgYSBsaXN0IG9mIHJld3JpdHRlbiBjb21taXRzIGFuZAorIyB0aGVpciBuZXcgc2hhMXMuICBUaGUgcmV3cml0dGVuLXBlbmRpbmcgbGlzdCBrZWVwcyB0aGUgc2hhMXMgb2YKKyMgY29tbWl0cyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQsIGJ1dCBub3QgY29tbWl0dGVkIHlldCwKKyMgZS5nLiBiZWNhdXNlIHRoZXkgYXJlIHdhaXRpbmcgZm9yIGEgJ3NxdWFzaCcgY29tbWFuZC4KK3Jld3JpdHRlbl9saXN0PSIkc3RhdGVfZGlyIi9yZXdyaXR0ZW4tbGlzdAorcmV3cml0dGVuX3BlbmRpbmc9IiRzdGF0ZV9kaXIiL3Jld3JpdHRlbi1wZW5kaW5nCisKK0dJVF9DSEVSUllfUElDS19IRUxQPSIkcmVzb2x2ZW1zZyIKK2V4cG9ydCBHSVRfQ0hFUlJZX1BJQ0tfSEVMUAorCit3YXJuICgpIHsKKwlwcmludGYgJyVzXG4nICIkKiIgPiYyCit9CisKKyMgT3V0cHV0IHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlIHNwZWNpZmllZCBjb21taXQuCitjb21taXRfbWVzc2FnZSAoKSB7CisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDEiIHwgc2VkICIxLC9eJC9kIgorfQorCitvcmlnX3JlZmxvZ19hY3Rpb249IiRHSVRfUkVGTE9HX0FDVElPTiIKKworY29tbWVudF9mb3JfcmVmbG9nICgpIHsKKwljYXNlICIkb3JpZ19yZWZsb2dfYWN0aW9uIiBpbgorCScnfHJlYmFzZSopCisJCUdJVF9SRUZMT0dfQUNUSU9OPSJyZWJhc2UgLWkgKCQxKSIKKwkJZXhwb3J0IEdJVF9SRUZMT0dfQUNUSU9OCisJCTs7CisJZXNhYworfQorCitsYXN0X2NvdW50PQorbWFya19hY3Rpb25fZG9uZSAoKSB7CisJc2VkIC1lIDFxIDwgIiR0b2RvIiA+PiAiJGRvbmUiCisJc2VkIC1lIDFkIDwgIiR0b2RvIiA+PiAiJHRvZG8iLm5ldworCW12IC1mICIkdG9kbyIubmV3ICIkdG9kbyIKKwluZXdfY291bnQ9JChzYW5lX2dyZXAgLWMgJ15bXiNdJyA8ICIkZG9uZSIpCisJdG90YWw9JCgoJG5ld19jb3VudCskKHNhbmVfZ3JlcCAtYyAnXlteI10nIDwgIiR0b2RvIikpKQorCWlmIHRlc3QgIiRsYXN0X2NvdW50IiAhPSAiJG5ld19jb3VudCIKKwl0aGVuCisJCWxhc3RfY291bnQ9JG5ld19jb3VudAorCQlwcmludGYgIlJlYmFzaW5nICglZC8lZClcciIgJG5ld19jb3VudCAkdG90YWwKKwkJdGVzdCAteiAiJHZlcmJvc2UiIHx8IGVjaG8KKwlmaQorfQorCithcHBlbmRfdG9kb19oZWxwICgpIHsKKwljYXQgPj4gIiR0b2RvIiA8PCBFT0YKKyMKKyMgQ29tbWFuZHM6CisjICBwLCBwaWNrID0gdXNlIGNvbW1pdAorIyAgciwgcmV3b3JkID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlCisjICBlLCBlZGl0ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nCisjICBzLCBzcXVhc2ggPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdAorIyAgZiwgZml4dXAgPSBsaWtlICJzcXVhc2giLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlCisjICB4LCBleGVjID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbAorIworIyBUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLgorIworIyBJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC4KK0VPRgorfQorCittYWtlX3BhdGNoICgpIHsKKwlzaGExX2FuZF9wYXJlbnRzPSIkKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLTEgIiQxIikiCisJY2FzZSAiJHNoYTFfYW5kX3BhcmVudHMiIGluCisJPyonICc/KicgJz8qKQorCQlnaXQgZGlmZiAtLWNjICRzaGExX2FuZF9wYXJlbnRzCisJCTs7CisJPyonICc/KikKKwkJZ2l0IGRpZmYtdHJlZSAtcCAiJDFeISIKKwkJOzsKKwkqKQorCQllY2hvICJSb290IGNvbW1pdCIKKwkJOzsKKwllc2FjID4gIiRzdGF0ZV9kaXIiL3BhdGNoCisJdGVzdCAtZiAiJG1zZyIgfHwKKwkJY29tbWl0X21lc3NhZ2UgIiQxIiA+ICIkbXNnIgorCXRlc3QgLWYgIiRhdXRob3Jfc2NyaXB0IiB8fAorCQlnZXRfYXV0aG9yX2lkZW50X2Zyb21fY29tbWl0ICIkMSIgPiAiJGF1dGhvcl9zY3JpcHQiCit9CisKK2RpZV93aXRoX3BhdGNoICgpIHsKKwllY2hvICIkMSIgPiAiJHN0YXRlX2RpciIvc3RvcHBlZC1zaGEKKwltYWtlX3BhdGNoICIkMSIKKwlnaXQgcmVyZXJlCisJZGllICIkMiIKK30KKworZXhpdF93aXRoX3BhdGNoICgpIHsKKwllY2hvICIkMSIgPiAiJHN0YXRlX2RpciIvc3RvcHBlZC1zaGEKKwltYWtlX3BhdGNoICQxCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4gIiRhbWVuZCIKKwl3YXJuICJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoIgorCXdhcm4KKwl3YXJuICIJZ2l0IGNvbW1pdCAtLWFtZW5kIgorCXdhcm4KKwl3YXJuICJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW4iCisJd2FybgorCXdhcm4gIglnaXQgcmViYXNlIC0tY29udGludWUiCisJd2FybgorCWV4aXQgJDIKK30KKworZGllX2Fib3J0ICgpIHsKKwlybSAtcmYgIiRzdGF0ZV9kaXIiCisJZGllICIkMSIKK30KKworaGFzX2FjdGlvbiAoKSB7CisJc2FuZV9ncmVwICdeW14jXScgIiQxIiA+L2Rldi9udWxsCit9CisKK2lzX2VtcHR5X2NvbW1pdCgpIHsKKwl0cmVlPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJDEiXnt0cmVlfSAyPi9kZXYvbnVsbCB8fAorCQlkaWUgIiQxOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIikKKwlwdHJlZT0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiQxIl5ee3RyZWV9IDI+L2Rldi9udWxsIHx8CisJCXB0cmVlPTRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQpCisJdGVzdCAiJHRyZWUiID0gIiRwdHJlZSIKK30KKworIyBSdW4gY29tbWFuZCB3aXRoIEdJVF9BVVRIT1JfTkFNRSwgR0lUX0FVVEhPUl9FTUFJTCwgYW5kCisjIEdJVF9BVVRIT1JfREFURSBleHBvcnRlZCBmcm9tIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgorZG9fd2l0aF9hdXRob3IgKCkgeworCSgKKwkJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMIEdJVF9BVVRIT1JfREFURQorCQkiJEAiCisJKQorfQorCitnaXRfc2VxdWVuY2VfZWRpdG9yICgpIHsKKwlpZiB0ZXN0IC16ICIkR0lUX1NFUVVFTkNFX0VESVRPUiIKKwl0aGVuCisJCUdJVF9TRVFVRU5DRV9FRElUT1I9IiQoZ2l0IGNvbmZpZyBzZXF1ZW5jZS5lZGl0b3IpIgorCQlpZiBbIC16ICIkR0lUX1NFUVVFTkNFX0VESVRPUiIgXQorCQl0aGVuCisJCQlHSVRfU0VRVUVOQ0VfRURJVE9SPSIkKGdpdCB2YXIgR0lUX0VESVRPUikiIHx8IHJldHVybiAkPworCQlmaQorCWZpCisKKwlldmFsICIkR0lUX1NFUVVFTkNFX0VESVRPUiIgJyIkQCInCit9CisKK3BpY2tfb25lICgpIHsKKwlmZj0tLWZmCisKKwljYXNlICIkMSIgaW4gLW4pIHNoYTE9JDI7IGZmPSA7OyAqKSBzaGExPSQxIDs7IGVzYWMKKwljYXNlICIkZm9yY2VfcmViYXNlIiBpbiAnJykgOzsgPyopIGZmPSA7OyBlc2FjCisJb3V0cHV0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJHNoYTEgfHwgZGllICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKKworCWlmIGlzX2VtcHR5X2NvbW1pdCAiJHNoYTEiCisJdGhlbgorCQllbXB0eV9hcmdzPSItLWFsbG93LWVtcHR5IgorCWZpCisKKwl0ZXN0IC1kICIkcmV3cml0dGVuIiAmJgorCQlwaWNrX29uZV9wcmVzZXJ2aW5nX21lcmdlcyAiJEAiICYmIHJldHVybgorCW91dHB1dCBnaXQgY2hlcnJ5LXBpY2sgJGVtcHR5X2FyZ3MgJGZmICIkQCIKK30KKworcGlja19vbmVfcHJlc2VydmluZ19tZXJnZXMgKCkgeworCWZhc3RfZm9yd2FyZD10CisJY2FzZSAiJDEiIGluCisJLW4pCisJCWZhc3RfZm9yd2FyZD1mCisJCXNoYTE9JDIKKwkJOzsKKwkqKQorCQlzaGExPSQxCisJCTs7CisJZXNhYworCXNoYTE9JChnaXQgcmV2LXBhcnNlICRzaGExKQorCisJaWYgdGVzdCAtZiAiJHN0YXRlX2RpciIvY3VycmVudC1jb21taXQKKwl0aGVuCisJCWlmIHRlc3QgIiRmYXN0X2ZvcndhcmQiID0gdAorCQl0aGVuCisJCQl3aGlsZSByZWFkIGN1cnJlbnRfY29tbWl0CisJCQlkbworCQkJCWdpdCByZXYtcGFyc2UgSEVBRCA+ICIkcmV3cml0dGVuIi8kY3VycmVudF9jb21taXQKKwkJCWRvbmUgPCIkc3RhdGVfZGlyIi9jdXJyZW50LWNvbW1pdAorCQkJcm0gIiRzdGF0ZV9kaXIiL2N1cnJlbnQtY29tbWl0IHx8CisJCQlkaWUgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCisJCWZpCisJZmkKKworCWVjaG8gJHNoYTEgPj4gIiRzdGF0ZV9kaXIiL2N1cnJlbnQtY29tbWl0CisKKwkjIHJld3JpdGUgcGFyZW50czsgaWYgbm9uZSB3ZXJlIHJld3JpdHRlbiwgd2UgY2FuIGZhc3QtZm9yd2FyZC4KKwluZXdfcGFyZW50cz0KKwlwZW5kPSIgJChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0xICRzaGExIHwgY3V0IC1kJyAnIC1zIC1mMi0pIgorCWlmIHRlc3QgIiRwZW5kIiA9ICIgIgorCXRoZW4KKwkJcGVuZD0iIHJvb3QiCisJZmkKKwl3aGlsZSBbICIkcGVuZCIgIT0gIiIgXQorCWRvCisJCXA9JChleHByICIkcGVuZCIgOiAnIFwoW14gXSpcKScpCisJCXBlbmQ9IiR7cGVuZCMgJHB9IgorCisJCWlmIHRlc3QgLWYgIiRyZXdyaXR0ZW4iLyRwCisJCXRoZW4KKwkJCW5ld19wPSQoY2F0ICIkcmV3cml0dGVuIi8kcCkKKworCQkJIyBJZiB0aGUgdG9kbyByZW9yZGVyZWQgY29tbWl0cywgYW5kIG91ciBwYXJlbnQgaXMgbWFya2VkIGZvcgorCQkJIyByZXdyaXRpbmcsIGJ1dCBoYXNuJ3QgYmVlbiBnb3R0ZW4gdG8geWV0LCBhc3N1bWUgdGhlIHVzZXIgbWVhbnQgdG8KKwkJCSMgZHJvcCBpdCBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgSEVBRAorCQkJaWYgdGVzdCAteiAiJG5ld19wIgorCQkJdGhlbgorCQkJCW5ld19wPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCQkJZmkKKworCQkJdGVzdCAkcCAhPSAkbmV3X3AgJiYgZmFzdF9mb3J3YXJkPWYKKwkJCWNhc2UgIiRuZXdfcGFyZW50cyIgaW4KKwkJCSokbmV3X3AqKQorCQkJCTs7ICMgZG8gbm90aGluZzsgdGhhdCBwYXJlbnQgaXMgYWxyZWFkeSB0aGVyZQorCQkJKikKKwkJCQluZXdfcGFyZW50cz0iJG5ld19wYXJlbnRzICRuZXdfcCIKKwkJCQk7OworCQkJZXNhYworCQllbHNlCisJCQlpZiB0ZXN0IC1mICIkZHJvcHBlZCIvJHAKKwkJCXRoZW4KKwkJCQlmYXN0X2ZvcndhcmQ9ZgorCQkJCXJlcGxhY2VtZW50PSIkKGNhdCAiJGRyb3BwZWQiLyRwKSIKKwkJCQl0ZXN0IC16ICIkcmVwbGFjZW1lbnQiICYmIHJlcGxhY2VtZW50PXJvb3QKKwkJCQlwZW5kPSIgJHJlcGxhY2VtZW50JHBlbmQiCisJCQllbHNlCisJCQkJbmV3X3BhcmVudHM9IiRuZXdfcGFyZW50cyAkcCIKKwkJCWZpCisJCWZpCisJZG9uZQorCWNhc2UgJGZhc3RfZm9yd2FyZCBpbgorCXQpCisJCW91dHB1dCB3YXJuICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCisJCW91dHB1dCBnaXQgcmVzZXQgLS1oYXJkICRzaGExIHx8CisJCQlkaWUgIkNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJHNoYTEiCisJCTs7CisJZikKKwkJZmlyc3RfcGFyZW50PSQoZXhwciAiJG5ld19wYXJlbnRzIiA6ICcgXChbXiBdKlwpJykKKworCQlpZiBbICIkMSIgIT0gIi1uIiBdCisJCXRoZW4KKwkJCSMgZGV0YWNoIEhFQUQgdG8gY3VycmVudCBwYXJlbnQKKwkJCW91dHB1dCBnaXQgY2hlY2tvdXQgJGZpcnN0X3BhcmVudCAyPiAvZGV2L251bGwgfHwKKwkJCQlkaWUgIkNhbm5vdCBtb3ZlIEhFQUQgdG8gJGZpcnN0X3BhcmVudCIKKwkJZmkKKworCQljYXNlICIkbmV3X3BhcmVudHMiIGluCisJCScgJyonICcqKQorCQkJdGVzdCAiYSQxIiA9IGEtbiAmJiBkaWUgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKKworCQkJIyByZWRvIG1lcmdlCisJCQlhdXRob3Jfc2NyaXB0X2NvbnRlbnQ9JChnZXRfYXV0aG9yX2lkZW50X2Zyb21fY29tbWl0ICRzaGExKQorCQkJZXZhbCAiJGF1dGhvcl9zY3JpcHRfY29udGVudCIKKwkJCW1zZ19jb250ZW50PSIkKGNvbW1pdF9tZXNzYWdlICRzaGExKSIKKwkJCSMgTm8gcG9pbnQgaW4gbWVyZ2luZyB0aGUgZmlyc3QgcGFyZW50LCB0aGF0J3MgSEVBRAorCQkJbmV3X3BhcmVudHM9JHtuZXdfcGFyZW50cyMgJGZpcnN0X3BhcmVudH0KKwkJCWlmICEgZG9fd2l0aF9hdXRob3Igb3V0cHV0IFwKKwkJCQlnaXQgbWVyZ2UgLS1uby1mZiAke3N0cmF0ZWd5OistcyAkc3RyYXRlZ3l9IC1tIFwKKwkJCQkJIiRtc2dfY29udGVudCIgJG5ld19wYXJlbnRzCisJCQl0aGVuCisJCQkJcHJpbnRmICIlc1xuIiAiJG1zZ19jb250ZW50IiA+ICIkR0lUX0RJUiIvTUVSR0VfTVNHCisJCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCisJCQlmaQorCQkJZWNobyAiJHNoYTEgJChnaXQgcmV2LXBhcnNlIEhFQUReMCkiID4+ICIkcmV3cml0dGVuX2xpc3QiCisJCQk7OworCQkqKQorCQkJb3V0cHV0IGdpdCBjaGVycnktcGljayAiJEAiIHx8CisJCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKK30KKworbnRoX3N0cmluZyAoKSB7CisJY2FzZSAiJDEiIGluCisJKjFbMC05XXwqWzA0LTldKSBlY2hvICIkMSJ0aDs7CisJKjEpIGVjaG8gIiQxInN0OzsKKwkqMikgZWNobyAiJDEibmQ7OworCSozKSBlY2hvICIkMSJyZDs7CisJZXNhYworfQorCit1cGRhdGVfc3F1YXNoX21lc3NhZ2VzICgpIHsKKwlpZiB0ZXN0IC1mICIkc3F1YXNoX21zZyI7IHRoZW4KKwkJbXYgIiRzcXVhc2hfbXNnIiAiJHNxdWFzaF9tc2ciLmJhayB8fCBleGl0CisJCWNvdW50PSQoKCQoc2VkIC1uIFwKKwkJCS1lICIxcy9eIyBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgXCguKlwpIGNvbW1pdHNcLi9cMS9wIiBcCisJCQktZSAicSIgPCAiJHNxdWFzaF9tc2ciLmJhaykrMSkpCisJCXsKKwkJCWVjaG8gIiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLiIKKwkJCXNlZCAtZSAxZCAtZSAnMiwvXi4veworCQkJCS9eJC9kCisJCQl9JyA8IiRzcXVhc2hfbXNnIi5iYWsKKwkJfSA+IiRzcXVhc2hfbXNnIgorCWVsc2UKKwkJY29tbWl0X21lc3NhZ2UgSEVBRCA+ICIkZml4dXBfbXNnIiB8fCBkaWUgIkNhbm5vdCB3cml0ZSAkZml4dXBfbXNnIgorCQljb3VudD0yCisJCXsKKwkJCWVjaG8gIiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCisJCQllY2hvICIjIFRoZSBmaXJzdCBjb21taXQncyBtZXNzYWdlIGlzOiIKKwkJCWVjaG8KKwkJCWNhdCAiJGZpeHVwX21zZyIKKwkJfSA+IiRzcXVhc2hfbXNnIgorCWZpCisJY2FzZSAkMSBpbgorCXNxdWFzaCkKKwkJcm0gLWYgIiRmaXh1cF9tc2ciCisJCWVjaG8KKwkJZWNobyAiIyBUaGlzIGlzIHRoZSAkKG50aF9zdHJpbmcgJGNvdW50KSBjb21taXQgbWVzc2FnZToiCisJCWVjaG8KKwkJY29tbWl0X21lc3NhZ2UgJDIKKwkJOzsKKwlmaXh1cCkKKwkJZWNobworCQllY2hvICIjIFRoZSAkKG50aF9zdHJpbmcgJGNvdW50KSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorCQllY2hvCisJCWNvbW1pdF9tZXNzYWdlICQyIHwgc2VkIC1lICdzL14vIwkvJworCQk7OworCWVzYWMgPj4iJHNxdWFzaF9tc2ciCit9CisKK3BlZWtfbmV4dF9jb21tYW5kICgpIHsKKwlzZWQgLW4gLWUgIi9eIy9kIiAtZSAnL14kL2QnIC1lICJzLyAuKi8vcCIgLWUgInEiIDwgIiR0b2RvIgorfQorCisjIEEgc3F1YXNoL2ZpeHVwIGhhcyBmYWlsZWQuICBQcmVwYXJlIHRoZSBsb25nIHZlcnNpb24gb2YgdGhlIHNxdWFzaAorIyBjb21taXQgbWVzc2FnZSwgdGhlbiBkaWVfd2l0aF9wYXRjaC4gIFRoaXMgY29kZSBwYXRoIHJlcXVpcmVzIHRoZQorIyB1c2VyIHRvIGVkaXQgdGhlIGNvbWJpbmVkIGNvbW1pdCBtZXNzYWdlIGZvciBhbGwgY29tbWl0cyB0aGF0IGhhdmUKKyMgYmVlbiBzcXVhc2hlZC9maXhlZHVwIHNvIGZhci4gIFNvIGFsc28gZXJhc2UgdGhlIG9sZCBzcXVhc2gKKyMgbWVzc2FnZXMsIGVmZmVjdGl2ZWx5IGNhdXNpbmcgdGhlIGNvbWJpbmVkIGNvbW1pdCB0byBiZSB1c2VkIGFzIHRoZQorIyBuZXcgYmFzaXMgZm9yIGFueSBmdXJ0aGVyIHNxdWFzaC9maXh1cHMuICBBcmdzOiBzaGExIHJlc3QKK2RpZV9mYWlsZWRfc3F1YXNoKCkgeworCW12ICIkc3F1YXNoX21zZyIgIiRtc2ciIHx8IGV4aXQKKwlybSAtZiAiJGZpeHVwX21zZyIKKwljcCAiJG1zZyIgIiRHSVRfRElSIi9NRVJHRV9NU0cgfHwgZXhpdAorCXdhcm4KKwl3YXJuICJDb3VsZCBub3QgYXBwbHkgJDEuLi4gJDIiCisJZGllX3dpdGhfcGF0Y2ggJDEgIiIKK30KKworZmx1c2hfcmV3cml0dGVuX3BlbmRpbmcoKSB7CisJdGVzdCAtcyAiJHJld3JpdHRlbl9wZW5kaW5nIiB8fCByZXR1cm4KKwluZXdzaGExPSIkKGdpdCByZXYtcGFyc2UgSEVBRF4wKSIKKwlzZWQgInMvJC8gJG5ld3NoYTEvIiA8ICIkcmV3cml0dGVuX3BlbmRpbmciID4+ICIkcmV3cml0dGVuX2xpc3QiCisJcm0gLWYgIiRyZXdyaXR0ZW5fcGVuZGluZyIKK30KKworcmVjb3JkX2luX3Jld3JpdHRlbigpIHsKKwlvbGRzaGExPSIkKGdpdCByZXYtcGFyc2UgJDEpIgorCWVjaG8gIiRvbGRzaGExIiA+PiAiJHJld3JpdHRlbl9wZW5kaW5nIgorCisJY2FzZSAiJChwZWVrX25leHRfY29tbWFuZCkiIGluCisJc3F1YXNofHN8Zml4dXB8ZikKKwkJOzsKKwkqKQorCQlmbHVzaF9yZXdyaXR0ZW5fcGVuZGluZworCQk7OworCWVzYWMKK30KKworZG9fcGljayAoKSB7CisJaWYgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkc3F1YXNoX29udG8iCisJdGhlbgorCQkjIFNldCB0aGUgY29ycmVjdCBjb21taXQgbWVzc2FnZSBhbmQgYXV0aG9yIGluZm8gb24gdGhlCisJCSMgc2VudGluZWwgcm9vdCBiZWZvcmUgY2hlcnJ5LXBpY2tpbmcgdGhlIG9yaWdpbmFsIGNoYW5nZXMKKwkJIyB3aXRob3V0IGNvbW1pdHRpbmcgKC1uKS4gIEZpbmFsbHksIHVwZGF0ZSB0aGUgc2VudGluZWwgYWdhaW4KKwkJIyB0byBpbmNsdWRlIHRoZXNlIGNoYW5nZXMuICBJZiB0aGUgY2hlcnJ5LXBpY2sgcmVzdWx0cyBpbiBhCisJCSMgY29uZmxpY3QsIHRoaXMgbWVhbnMgb3VyIGJlaGF2aW91ciBpcyBzaW1pbGFyIHRvIGEgc3RhbmRhcmQKKwkJIyBmYWlsZWQgY2hlcnJ5LXBpY2sgZHVyaW5nIHJlYmFzZSwgd2l0aCBhIGRpcnR5IGluZGV4IHRvCisJCSMgcmVzb2x2ZSBiZWZvcmUgbWFudWFsbHkgcnVubmluZyBnaXQgY29tbWl0IC0tYW1lbmQgdGhlbiBnaXQKKwkJIyByZWJhc2UgLS1jb250aW51ZS4KKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtLWFtZW5kIFwKKwkJCSAgIC0tbm8tcG9zdC1yZXdyaXRlIC1uIC1xIC1DICQxICYmCisJCQlwaWNrX29uZSAtbiAkMSAmJgorCQkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYWxsb3ctZW1wdHktbWVzc2FnZSBcCisJCQkJICAgLS1hbWVuZCAtLW5vLXBvc3QtcmV3cml0ZSAtbiAtcSAtQyAkMSB8fAorCQkJZGllX3dpdGhfcGF0Y2ggJDEgIkNvdWxkIG5vdCBhcHBseSAkMS4uLiAkMiIKKwllbHNlCisJCXBpY2tfb25lICQxIHx8CisJCQlkaWVfd2l0aF9wYXRjaCAkMSAiQ291bGQgbm90IGFwcGx5ICQxLi4uICQyIgorCWZpCit9CisKK2RvX25leHQgKCkgeworCXJtIC1mICIkbXNnIiAiJGF1dGhvcl9zY3JpcHQiICIkYW1lbmQiIHx8IGV4aXQKKwlyZWFkIC1yIGNvbW1hbmQgc2hhMSByZXN0IDwgIiR0b2RvIgorCWNhc2UgIiRjb21tYW5kIiBpbgorCScjJyp8Jyd8bm9vcCkKKwkJbWFya19hY3Rpb25fZG9uZQorCQk7OworCXBpY2t8cCkKKwkJY29tbWVudF9mb3JfcmVmbG9nIHBpY2sKKworCQltYXJrX2FjdGlvbl9kb25lCisJCWRvX3BpY2sgJHNoYTEgIiRyZXN0IgorCQlyZWNvcmRfaW5fcmV3cml0dGVuICRzaGExCisJCTs7CisJcmV3b3JkfHIpCisJCWNvbW1lbnRfZm9yX3JlZmxvZyByZXdvcmQKKworCQltYXJrX2FjdGlvbl9kb25lCisJCWRvX3BpY2sgJHNoYTEgIiRyZXN0IgorCQlnaXQgY29tbWl0IC0tYW1lbmQgLS1uby1wb3N0LXJld3JpdGUgfHwgeworCQkJd2FybiAiQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyAkc2hhMS4uLiAkcmVzdCIKKwkJCXdhcm4gIlRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rIgorCQkJd2FybiAiZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlIGJlZm9yZSIKKwkJCXdhcm4gInlvdSBhcmUgYWJsZSB0byByZXdvcmQgdGhlIGNvbW1pdC4iCisJCQlleGl0X3dpdGhfcGF0Y2ggJHNoYTEgMQorCQl9CisJCXJlY29yZF9pbl9yZXdyaXR0ZW4gJHNoYTEKKwkJOzsKKwllZGl0fGUpCisJCWNvbW1lbnRfZm9yX3JlZmxvZyBlZGl0CisKKwkJbWFya19hY3Rpb25fZG9uZQorCQlkb19waWNrICRzaGExICIkcmVzdCIKKwkJd2FybiAiU3RvcHBlZCBhdCAkc2hhMS4uLiAkcmVzdCIKKwkJZXhpdF93aXRoX3BhdGNoICRzaGExIDAKKwkJOzsKKwlzcXVhc2h8c3xmaXh1cHxmKQorCQljYXNlICIkY29tbWFuZCIgaW4KKwkJc3F1YXNofHMpCisJCQlzcXVhc2hfc3R5bGU9c3F1YXNoCisJCQk7OworCQlmaXh1cHxmKQorCQkJc3F1YXNoX3N0eWxlPWZpeHVwCisJCQk7OworCQllc2FjCisJCWNvbW1lbnRfZm9yX3JlZmxvZyAkc3F1YXNoX3N0eWxlCisKKwkJdGVzdCAtZiAiJGRvbmUiICYmIGhhc19hY3Rpb24gIiRkb25lIiB8fAorCQkJZGllICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCisKKwkJbWFya19hY3Rpb25fZG9uZQorCQl1cGRhdGVfc3F1YXNoX21lc3NhZ2VzICRzcXVhc2hfc3R5bGUgJHNoYTEKKwkJYXV0aG9yX3NjcmlwdF9jb250ZW50PSQoZ2V0X2F1dGhvcl9pZGVudF9mcm9tX2NvbW1pdCBIRUFEKQorCQllY2hvICIkYXV0aG9yX3NjcmlwdF9jb250ZW50IiA+ICIkYXV0aG9yX3NjcmlwdCIKKwkJZXZhbCAiJGF1dGhvcl9zY3JpcHRfY29udGVudCIKKwkJaWYgISBwaWNrX29uZSAtbiAkc2hhMQorCQl0aGVuCisJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPiIkYW1lbmQiCisJCQlkaWVfZmFpbGVkX3NxdWFzaCAkc2hhMSAiJHJlc3QiCisJCWZpCisJCWNhc2UgIiQocGVla19uZXh0X2NvbW1hbmQpIiBpbgorCQlzcXVhc2h8c3xmaXh1cHxmKQorCQkJIyBUaGlzIGlzIGFuIGludGVybWVkaWF0ZSBjb21taXQ7IGl0cyBtZXNzYWdlIHdpbGwgb25seSBiZQorCQkJIyB1c2VkIGluIGNhc2Ugb2YgdHJvdWJsZS4gIFNvIHVzZSB0aGUgbG9uZyB2ZXJzaW9uOgorCQkJZG9fd2l0aF9hdXRob3Igb3V0cHV0IGdpdCBjb21taXQgLS1hbWVuZCAtLW5vLXZlcmlmeSAtRiAiJHNxdWFzaF9tc2ciIHx8CisJCQkJZGllX2ZhaWxlZF9zcXVhc2ggJHNoYTEgIiRyZXN0IgorCQkJOzsKKwkJKikKKwkJCSMgVGhpcyBpcyB0aGUgZmluYWwgY29tbWFuZCBvZiB0aGlzIHNxdWFzaC9maXh1cCBncm91cAorCQkJaWYgdGVzdCAtZiAiJGZpeHVwX21zZyIKKwkJCXRoZW4KKwkJCQlkb193aXRoX2F1dGhvciBnaXQgY29tbWl0IC0tYW1lbmQgLS1uby12ZXJpZnkgLUYgIiRmaXh1cF9tc2ciIHx8CisJCQkJCWRpZV9mYWlsZWRfc3F1YXNoICRzaGExICIkcmVzdCIKKwkJCWVsc2UKKwkJCQljcCAiJHNxdWFzaF9tc2ciICIkR0lUX0RJUiIvU1FVQVNIX01TRyB8fCBleGl0CisJCQkJcm0gLWYgIiRHSVRfRElSIi9NRVJHRV9NU0cKKwkJCQlkb193aXRoX2F1dGhvciBnaXQgY29tbWl0IC0tYW1lbmQgLS1uby12ZXJpZnkgLUYgIiRHSVRfRElSIi9TUVVBU0hfTVNHIC1lIHx8CisJCQkJCWRpZV9mYWlsZWRfc3F1YXNoICRzaGExICIkcmVzdCIKKwkJCWZpCisJCQlybSAtZiAiJHNxdWFzaF9tc2ciICIkZml4dXBfbXNnIgorCQkJOzsKKwkJZXNhYworCQlyZWNvcmRfaW5fcmV3cml0dGVuICRzaGExCisJCTs7CisJeHwiZXhlYyIpCisJCXJlYWQgLXIgY29tbWFuZCByZXN0IDwgIiR0b2RvIgorCQltYXJrX2FjdGlvbl9kb25lCisJCXByaW50ZiAnRXhlY3V0aW5nOiAlc1xuJyAiJHJlc3QiCisJCSMgImV4ZWMiIGNvbW1hbmQgZG9lc24ndCB0YWtlIGEgc2hhMSBpbiB0aGUgdG9kby1saXN0LgorCQkjID0+IGNhbid0IGp1c3QgdXNlICRzaGExIGhlcmUuCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+ICIkc3RhdGVfZGlyIi9zdG9wcGVkLXNoYQorCQkke1NIRUxMOi1AU0hFTExfUEFUSEB9IC1jICIkcmVzdCIgIyBBY3R1YWwgZXhlY3V0aW9uCisJCXN0YXR1cz0kPworCQkjIFJ1biBpbiBzdWJzaGVsbCBiZWNhdXNlIHJlcXVpcmVfY2xlYW5fd29ya190cmVlIGNhbiBkaWUuCisJCWRpcnR5PWYKKwkJKHJlcXVpcmVfY2xlYW5fd29ya190cmVlICJyZWJhc2UiIDI+L2Rldi9udWxsKSB8fCBkaXJ0eT10CisJCWlmIHRlc3QgIiRzdGF0dXMiIC1uZSAwCisJCXRoZW4KKwkJCXdhcm4gIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorCQkJdGVzdCAiJGRpcnR5IiA9IGYgfHwKKwkJCXdhcm4gImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorCisJCQl3YXJuICJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuIgorCQkJd2FybgorCQkJd2FybiAiCWdpdCByZWJhc2UgLS1jb250aW51ZSIKKwkJCXdhcm4KKwkJCWlmIHRlc3QgJHN0YXR1cyAtZXEgMTI3CQkjIGNvbW1hbmQgbm90IGZvdW5kCisJCQl0aGVuCisJCQkJc3RhdHVzPTEKKwkJCWZpCisJCQlleGl0ICIkc3RhdHVzIgorCQllbGlmIHRlc3QgIiRkaXJ0eSIgPSB0CisJCXRoZW4KKwkJCXdhcm4gIkV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICRyZXN0IgorCQkJd2FybiAiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCisJCQl3YXJuICJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW4iCisJCQl3YXJuCisJCQl3YXJuICIJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCQkJd2FybgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJKikKKwkJd2FybiAiVW5rbm93biBjb21tYW5kOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKKwkJZml4dG9kbz0iUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCisJCWlmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgIiRzaGExIiA+L2Rldi9udWxsCisJCXRoZW4KKwkJCWRpZV93aXRoX3BhdGNoICRzaGExICIkZml4dG9kbyIKKwkJZWxzZQorCQkJZGllICIkZml4dG9kbyIKKwkJZmkKKwkJOzsKKwllc2FjCisJdGVzdCAtcyAiJHRvZG8iICYmIHJldHVybgorCisJY29tbWVudF9mb3JfcmVmbG9nIGZpbmlzaCAmJgorCW5ld2hlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2FzZSAkaGVhZF9uYW1lIGluCisJcmVmcy8qKQorCQltZXNzYWdlPSIkR0lUX1JFRkxPR19BQ1RJT046ICRoZWFkX25hbWUgb250byAkb250byIgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgLW0gIiRtZXNzYWdlIiAkaGVhZF9uYW1lICRuZXdoZWFkICRvcmlnX2hlYWQgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiBcCisJCSAgLW0gIiRHSVRfUkVGTE9HX0FDVElPTjogcmV0dXJuaW5nIHRvICRoZWFkX25hbWUiIFwKKwkJICBIRUFEICRoZWFkX25hbWUKKwkJOzsKKwllc2FjICYmIHsKKwkJdGVzdCAhIC1mICIkc3RhdGVfZGlyIi92ZXJib3NlIHx8CisJCQlnaXQgZGlmZi10cmVlIC0tc3RhdCAkb3JpZ19oZWFkLi5IRUFECisJfSAmJgorCXsKKwkJdGVzdCAtcyAiJHJld3JpdHRlbl9saXN0IiAmJgorCQlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPXJlYmFzZSA8ICIkcmV3cml0dGVuX2xpc3QiIHx8CisJCXRydWUgIyB3ZSBkb24ndCBjYXJlIGlmIHRoaXMgY29weWluZyBmYWlsZWQKKwl9ICYmCisJaWYgdGVzdCAteCAiJEdJVF9ESVIiL2hvb2tzL3Bvc3QtcmV3cml0ZSAmJgorCQl0ZXN0IC1zICIkcmV3cml0dGVuX2xpc3QiOyB0aGVuCisJCSIkR0lUX0RJUiIvaG9va3MvcG9zdC1yZXdyaXRlIHJlYmFzZSA8ICIkcmV3cml0dGVuX2xpc3QiCisJCXRydWUgIyB3ZSBkb24ndCBjYXJlIGlmIHRoaXMgaG9vayBmYWlsZWQKKwlmaSAmJgorCXJtIC1yZiAiJHN0YXRlX2RpciIgJiYKKwlnaXQgZ2MgLS1hdXRvICYmCisJd2FybiAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCisKKwlleGl0Cit9CisKK2RvX3Jlc3QgKCkgeworCXdoaWxlIDoKKwlkbworCQlkb19uZXh0CisJZG9uZQorfQorCisjIHNraXAgcGlja2luZyBjb21taXRzIHdob3NlIHBhcmVudHMgYXJlIHVuY2hhbmdlZAorc2tpcF91bm5lY2Vzc2FyeV9waWNrcyAoKSB7CisJZmQ9MworCXdoaWxlIHJlYWQgLXIgY29tbWFuZCByZXN0CisJZG8KKwkJIyBmZD0zIG1lYW5zIHdlIHNraXAgdGhlIGNvbW1hbmQKKwkJY2FzZSAiJGZkLCRjb21tYW5kIiBpbgorCQkzLHBpY2t8MyxwKQorCQkJIyBwaWNrIGEgY29tbWl0IHdob3NlIHBhcmVudCBpcyBjdXJyZW50ICRvbnRvIC0+IHNraXAKKwkJCXNoYTE9JHtyZXN0JSUgKn0KKwkJCWNhc2UgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkc2hhMSJeKSIgaW4KKwkJCSIkb250byIqKQorCQkJCW9udG89JHNoYTEKKwkJCQk7OworCQkJKikKKwkJCQlmZD0xCisJCQkJOzsKKwkJCWVzYWMKKwkJCTs7CisJCTMsIyp8MywpCisJCQkjIGNvcHkgY29tbWVudHMKKwkJCTs7CisJCSopCisJCQlmZD0xCisJCQk7OworCQllc2FjCisJCXByaW50ZiAnJXNcbicgIiRjb21tYW5kJHtyZXN0OisgfSRyZXN0IiA+JiRmZAorCWRvbmUgPCIkdG9kbyIgPiIkdG9kby5uZXciIDM+PiIkZG9uZSIgJiYKKwltdiAtZiAiJHRvZG8iLm5ldyAiJHRvZG8iICYmCisJY2FzZSAiJChwZWVrX25leHRfY29tbWFuZCkiIGluCisJc3F1YXNofHN8Zml4dXB8ZikKKwkJcmVjb3JkX2luX3Jld3JpdHRlbiAiJG9udG8iCisJCTs7CisJZXNhYyB8fAorCWRpZSAiQ291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK30KKworIyBSZWFycmFuZ2UgdGhlIHRvZG8gbGlzdCB0aGF0IGhhcyBib3RoICJwaWNrIHNoYTEgbXNnIiBhbmQKKyMgInBpY2sgc2hhMSBmaXh1cCEvc3F1YXNoISBtc2ciIGFwcGVhcnMgaW4gaXQgc28gdGhhdCB0aGUgbGF0dGVyCisjIGNvbWVzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmb3JtZXIsIGFuZCBjaGFuZ2UgInBpY2siIHRvCisjICJmaXh1cCIvInNxdWFzaCIuCityZWFycmFuZ2Vfc3F1YXNoICgpIHsKKwkjIGV4dHJhY3QgZml4dXAhL3NxdWFzaCEgbGluZXMgYW5kIHJlc29sdmUgYW55IHJlZmVyZW5jZWQgc2hhMSdzCisJd2hpbGUgcmVhZCAtciBwaWNrIHNoYTEgbWVzc2FnZQorCWRvCisJCWNhc2UgIiRtZXNzYWdlIiBpbgorCQkic3F1YXNoISAiKnwiZml4dXAhICIqKQorCQkJYWN0aW9uPSIke21lc3NhZ2UlJSEqfSIKKwkJCXJlc3Q9IiR7bWVzc2FnZSMqISB9IgorCQkJZWNobyAiJHNoYTEgJGFjdGlvbiAkcmVzdCIKKwkJCSMgaWYgaXQncyBhIHNpbmdsZSB3b3JkLCB0cnkgdG8gcmVzb2x2ZSB0byBhIGZ1bGwgc2hhMSBhbmQKKwkJCSMgZW1pdCBhIHNlY29uZCBjb3B5LiBUaGlzIGFsbG93cyB1cyB0byBtYXRjaCBvbiBib3RoIG1lc3NhZ2UKKwkJCSMgYW5kIG9uIHNoYTEgcHJlZml4CisJCQlpZiB0ZXN0ICIke3Jlc3QjKiB9IiA9ICIkcmVzdCI7IHRoZW4KKwkJCQlmdWxsc2hhPSIkKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiRyZXN0IiAyPi9kZXYvbnVsbCkiCisJCQkJaWYgdGVzdCAtbiAiJGZ1bGxzaGEiOyB0aGVuCisJCQkJCSMgcHJlZml4IHRoZSBhY3Rpb24gdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBsaW5lIGFzCisJCQkJCSMgaW50ZW5kZWQgZm9yIGZ1bGwgc2hhMSBtYXRjaAorCQkJCQllY2hvICIkc2hhMSArJGFjdGlvbiAkZnVsbHNoYSIKKwkJCQlmaQorCQkJZmkKKwkJZXNhYworCWRvbmUgPiIkMS5zcSIgPCIkMSIKKwl0ZXN0IC1zICIkMS5zcSIgfHwgcmV0dXJuCisKKwl1c2VkPQorCXdoaWxlIHJlYWQgLXIgcGljayBzaGExIG1lc3NhZ2UKKwlkbworCQljYXNlICIgJHVzZWQiIGluCisJCSoiICRzaGExICIqKSBjb250aW51ZSA7OworCQllc2FjCisJCXByaW50ZiAnJXNcbicgIiRwaWNrICRzaGExICRtZXNzYWdlIgorCQl1c2VkPSIkdXNlZCRzaGExICIKKwkJd2hpbGUgcmVhZCAtciBzcXVhc2ggYWN0aW9uIG1zZ19jb250ZW50CisJCWRvCisJCQljYXNlICIgJHVzZWQiIGluCisJCQkqIiAkc3F1YXNoICIqKSBjb250aW51ZSA7OworCQkJZXNhYworCQkJZW1pdD0wCisJCQljYXNlICIkYWN0aW9uIiBpbgorCQkJKyopCisJCQkJYWN0aW9uPSIke2FjdGlvbiMrfSIKKwkJCQkjIGZ1bGwgc2hhMSBwcmVmaXggdGVzdAorCQkJCWNhc2UgIiRtc2dfY29udGVudCIgaW4gIiRzaGExIiopIGVtaXQ9MTs7IGVzYWMgOzsKKwkJCSopCisJCQkJIyBtZXNzYWdlIHByZWZpeCB0ZXN0CisJCQkJY2FzZSAiJG1lc3NhZ2UiIGluICIkbXNnX2NvbnRlbnQiKikgZW1pdD0xOzsgZXNhYyA7OworCQkJZXNhYworCQkJaWYgdGVzdCAkZW1pdCA9IDE7IHRoZW4KKwkJCQlwcmludGYgJyVzXG4nICIkYWN0aW9uICRzcXVhc2ggJGFjdGlvbiEgJG1zZ19jb250ZW50IgorCQkJCXVzZWQ9IiR1c2VkJHNxdWFzaCAiCisJCQlmaQorCQlkb25lIDwiJDEuc3EiCisJZG9uZSA+IiQxLnJlYXJyYW5nZWQiIDwiJDEiCisJY2F0ICIkMS5yZWFycmFuZ2VkIiA+IiQxIgorCXJtIC1mICIkMS5zcSIgIiQxLnJlYXJyYW5nZWQiCit9CisKKyMgQWRkIGNvbW1hbmRzIGFmdGVyIGEgcGljayBvciBhZnRlciBhIHNxdWFzaC9maXh1cCBzZXJpZQorIyBpbiB0aGUgdG9kbyBsaXN0LgorYWRkX2V4ZWNfY29tbWFuZHMgKCkgeworCXsKKwkJZmlyc3Q9dAorCQl3aGlsZSByZWFkIC1yIGluc24gcmVzdAorCQlkbworCQkJY2FzZSAkaW5zbiBpbgorCQkJcGljaykKKwkJCQl0ZXN0IC1uICIkZmlyc3QiIHx8CisJCQkJcHJpbnRmICIlcyIgIiRjbWQiCisJCQkJOzsKKwkJCWVzYWMKKwkJCXByaW50ZiAiJXMgJXNcbiIgIiRpbnNuIiAiJHJlc3QiCisJCQlmaXJzdD0KKwkJZG9uZQorCQlwcmludGYgIiVzIiAiJGNtZCIKKwl9IDwiJDEiID4iJDEubmV3IiAmJgorCW12ICIkMS5uZXciICIkMSIKK30KKworY2FzZSAiJGFjdGlvbiIgaW4KK2NvbnRpbnVlKQorCSMgZG8gd2UgaGF2ZSBhbnl0aGluZyB0byBjb21taXQ/CisJaWYgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEIC0tCisJdGhlbgorCQk6IE5vdGhpbmcgdG8gY29tbWl0IC0tIHNraXAgdGhpcworCWVsc2UKKwkJaWYgISB0ZXN0IC1mICIkYXV0aG9yX3NjcmlwdCIKKwkJdGhlbgorCQkJZGllICJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmUKK3NxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOgorCisgIGdpdCBjb21taXQgLS1hbWVuZAorCitJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOgorCisgIGdpdCBjb21taXQKKworSW4gYm90aCBjYXNlLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOgorCisgIGdpdCByZWJhc2UgLS1jb250aW51ZQorIgorCQlmaQorCQkuICIkYXV0aG9yX3NjcmlwdCIgfHwKKwkJCWRpZSAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCisJCWlmIHRlc3QgLWYgIiRhbWVuZCIKKwkJdGhlbgorCQkJY3VycmVudF9oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorCQkJdGVzdCAiJGN1cnJlbnRfaGVhZCIgPSAkKGNhdCAiJGFtZW5kIikgfHwKKwkJCWRpZSAiXAorWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbQorZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKKwkJCWRvX3dpdGhfYXV0aG9yIGdpdCBjb21taXQgLS1hbWVuZCAtLW5vLXZlcmlmeSAtRiAiJG1zZyIgLWUgfHwKKwkJCQlkaWUgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorCQllbHNlCisJCQlkb193aXRoX2F1dGhvciBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1GICIkbXNnIiAtZSB8fAorCQkJCWRpZSAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCisJCWZpCisJZmkKKworCXJlY29yZF9pbl9yZXdyaXR0ZW4gIiQoY2F0ICIkc3RhdGVfZGlyIi9zdG9wcGVkLXNoYSkiCisKKwlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSAicmViYXNlIgorCWRvX3Jlc3QKKwk7Oworc2tpcCkKKwlnaXQgcmVyZXJlIGNsZWFyCisKKwlkb19yZXN0CisJOzsKK2VkaXQtdG9kbykKKwlzZWQgLWUgJy9eIy9kJyA8ICIkdG9kbyIgPiAiJHRvZG8iLm5ldworCW12IC1mICIkdG9kbyIubmV3ICIkdG9kbyIKKwlhcHBlbmRfdG9kb19oZWxwCisJY2F0ID4+ICIkdG9kbyIgPDwgRU9GCisjCisjIFlvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLgorIyBUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOgorIyAgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisjCitFT0YKKworCWdpdF9zZXF1ZW5jZV9lZGl0b3IgIiR0b2RvIiB8fAorCQlkaWUgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKKworCWV4aXQKKwk7OworZXNhYworCitnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPi9kZXYvbnVsbCB8fAorCWRpZSAiWW91IG5lZWQgdG8gc2V0IHlvdXIgY29tbWl0dGVyIGluZm8gZmlyc3QiCisKK2NvbW1lbnRfZm9yX3JlZmxvZyBzdGFydAorCitpZiB0ZXN0ICEgLXogIiRzd2l0Y2hfdG8iCit0aGVuCisJb3V0cHV0IGdpdCBjaGVja291dCAiJHN3aXRjaF90byIgLS0gfHwKKwkJZGllICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK2ZpCisKK29yaWdfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgfHwgZGllICJObyBIRUFEPyIKK21rZGlyICIkc3RhdGVfZGlyIiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCisKKzogPiAiJHN0YXRlX2RpciIvaW50ZXJhY3RpdmUgfHwgZGllICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK3dyaXRlX2Jhc2ljX3N0YXRlCitpZiB0ZXN0IHQgPSAiJHByZXNlcnZlX21lcmdlcyIKK3RoZW4KKwlpZiB0ZXN0IC16ICIkcmViYXNlX3Jvb3QiCisJdGhlbgorCQlta2RpciAiJHJld3JpdHRlbiIgJiYKKwkJZm9yIGMgaW4gJChnaXQgbWVyZ2UtYmFzZSAtLWFsbCAkb3JpZ19oZWFkICR1cHN0cmVhbSkKKwkJZG8KKwkJCWVjaG8gJG9udG8gPiAiJHJld3JpdHRlbiIvJGMgfHwKKwkJCQlkaWUgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorCQlkb25lCisJZWxzZQorCQlta2RpciAiJHJld3JpdHRlbiIgJiYKKwkJZWNobyAkb250byA+ICIkcmV3cml0dGVuIi9yb290IHx8CisJCQlkaWUgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorCWZpCisJIyBObyBjaGVycnktcGljayBiZWNhdXNlIG91ciBmaXJzdCBwYXNzIGlzIHRvIGRldGVybWluZQorCSMgcGFyZW50cyB0byByZXdyaXRlIGFuZCBza2lwcGluZyBkcm9wcGVkIGNvbW1pdHMgd291bGQKKwkjIHByZW1hdHVyZWx5IGVuZCBvdXIgcHJvYmUKKwltZXJnZXNfb3B0aW9uPQorZWxzZQorCW1lcmdlc19vcHRpb249Ii0tbm8tbWVyZ2VzIC0tY2hlcnJ5LXBpY2siCitmaQorCitzaG9ydGhlYWQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJG9yaWdfaGVhZCkKK3Nob3J0b250bz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkb250bykKK2lmIHRlc3QgLXogIiRyZWJhc2Vfcm9vdCIKKwkjIHRoaXMgaXMgbm93IGVxdWl2YWxlbnQgdG8gISAteiAiJHVwc3RyZWFtIgordGhlbgorCXNob3J0dXBzdHJlYW09JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJHVwc3RyZWFtKQorCXJldmlzaW9ucz0kdXBzdHJlYW0uLi4kb3JpZ19oZWFkCisJc2hvcnRyZXZpc2lvbnM9JHNob3J0dXBzdHJlYW0uLiRzaG9ydGhlYWQKK2Vsc2UKKwlyZXZpc2lvbnM9JG9udG8uLi4kb3JpZ19oZWFkCisJc2hvcnRyZXZpc2lvbnM9JHNob3J0aGVhZAorZmkKK2dpdCByZXYtbGlzdCAkbWVyZ2VzX29wdGlvbiAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCBcCisJLS1hYmJyZXY9NyAtLXJldmVyc2UgLS1sZWZ0LXJpZ2h0IC0tdG9wby1vcmRlciBcCisJJHJldmlzaW9ucyB8IFwKKwlzZWQgLW4gInMvXj4vL3AiIHwKK3doaWxlIHJlYWQgLXIgc2hvcnRzaGExIHJlc3QKK2RvCisKKwlpZiB0ZXN0IC16ICIka2VlcF9lbXB0eSIgJiYgaXNfZW1wdHlfY29tbWl0ICRzaG9ydHNoYTEKKwl0aGVuCisJCWNvbW1lbnRfb3V0PSIjICIKKwllbHNlCisJCWNvbW1lbnRfb3V0PQorCWZpCisKKwlpZiB0ZXN0IHQgIT0gIiRwcmVzZXJ2ZV9tZXJnZXMiCisJdGhlbgorCQlwcmludGYgJyVzXG4nICIke2NvbW1lbnRfb3V0fXBpY2sgJHNob3J0c2hhMSAkcmVzdCIgPj4iJHRvZG8iCisJZWxzZQorCQlzaGExPSQoZ2l0IHJldi1wYXJzZSAkc2hvcnRzaGExKQorCQlpZiB0ZXN0IC16ICIkcmViYXNlX3Jvb3QiCisJCXRoZW4KKwkJCXByZXNlcnZlPXQKKwkJCWZvciBwIGluICQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtMSAkc2hhMSB8IGN1dCAtZCcgJyAtcyAtZjItKQorCQkJZG8KKwkJCQlpZiB0ZXN0IC1mICIkcmV3cml0dGVuIi8kcAorCQkJCXRoZW4KKwkJCQkJcHJlc2VydmU9ZgorCQkJCWZpCisJCQlkb25lCisJCWVsc2UKKwkJCXByZXNlcnZlPWYKKwkJZmkKKwkJaWYgdGVzdCBmID0gIiRwcmVzZXJ2ZSIKKwkJdGhlbgorCQkJdG91Y2ggIiRyZXdyaXR0ZW4iLyRzaGExCisJCQlwcmludGYgJyVzXG4nICIke2NvbW1lbnRfb3V0fXBpY2sgJHNob3J0c2hhMSAkcmVzdCIgPj4iJHRvZG8iCisJCWZpCisJZmkKK2RvbmUKKworIyBXYXRjaCBmb3IgY29tbWl0cyB0aGF0IGJlZW4gZHJvcHBlZCBieSAtLWNoZXJyeS1waWNrCitpZiB0ZXN0IHQgPSAiJHByZXNlcnZlX21lcmdlcyIKK3RoZW4KKwlta2RpciAiJGRyb3BwZWQiCisJIyBTYXZlIGFsbCBub24tY2hlcnJ5LXBpY2tlZCBjaGFuZ2VzCisJZ2l0IHJldi1saXN0ICRyZXZpc2lvbnMgLS1sZWZ0LXJpZ2h0IC0tY2hlcnJ5LXBpY2sgfCBcCisJCXNlZCAtbiAicy9ePi8vcCIgPiAiJHN0YXRlX2RpciIvbm90LWNoZXJyeS1waWNrcworCSMgTm93IGFsbCBjb21taXRzIGFuZCBub3RlIHdoaWNoIG9uZXMgYXJlIG1pc3NpbmcgaW4KKwkjIG5vdC1jaGVycnktcGlja3MgYW5kIGhlbmNlIGJlaW5nIGRyb3BwZWQKKwlnaXQgcmV2LWxpc3QgJHJldmlzaW9ucyB8CisJd2hpbGUgcmVhZCByZXYKKwlkbworCQlpZiB0ZXN0IC1mICIkcmV3cml0dGVuIi8kcmV2IC1hICIkKHNhbmVfZ3JlcCAiJHJldiIgIiRzdGF0ZV9kaXIiL25vdC1jaGVycnktcGlja3MpIiA9ICIiCisJCXRoZW4KKwkJCSMgVXNlIC1mMiBiZWNhdXNlIGlmIHJldi1saXN0IGlzIHRlbGxpbmcgdXMgdGhpcyBjb21taXQgaXMKKwkJCSMgbm90IHdvcnRod2hpbGUsIHdlIGRvbid0IHdhbnQgdG8gdHJhY2sgaXRzIG11bHRpcGxlIGhlYWRzLAorCQkJIyBqdXN0IHRoZSBoaXN0b3J5IG9mIGl0cyBmaXJzdC1wYXJlbnQgZm9yIG90aGVycyB0aGF0IHdpbGwKKwkJCSMgYmUgcmViYXNpbmcgb24gdG9wIG9mIGl0CisJCQlnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0xICRyZXYgfCBjdXQgLWQnICcgLXMgLWYyID4gIiRkcm9wcGVkIi8kcmV2CisJCQlzaG9ydD0kKGdpdCByZXYtbGlzdCAtMSAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9NyAkcmV2KQorCQkJc2FuZV9ncmVwIC12ICJeW2Etel1bYS16XSogJHNob3J0IiA8IiR0b2RvIiA+ICIke3RvZG99MiIgOyBtdiAiJHt0b2RvfTIiICIkdG9kbyIKKwkJCXJtICIkcmV3cml0dGVuIi8kcmV2CisJCWZpCisJZG9uZQorZmkKKwordGVzdCAtcyAiJHRvZG8iIHx8IGVjaG8gbm9vcCA+PiAiJHRvZG8iCit0ZXN0IC1uICIkYXV0b3NxdWFzaCIgJiYgcmVhcnJhbmdlX3NxdWFzaCAiJHRvZG8iCit0ZXN0IC1uICIkY21kIiAmJiBhZGRfZXhlY19jb21tYW5kcyAiJHRvZG8iCisKK2NhdCA+PiAiJHRvZG8iIDw8IEVPRgorCisjIFJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvCitFT0YKK2FwcGVuZF90b2RvX2hlbHAKK2NhdCA+PiAiJHRvZG8iIDw8IEVPRgorIworIyBIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLgorIworRU9GCisKK2lmIHRlc3QgLXogIiRrZWVwX2VtcHR5IgordGhlbgorCWVjaG8gIiMgTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiID4+IiR0b2RvIgorZmkKKworCitoYXNfYWN0aW9uICIkdG9kbyIgfHwKKwlkaWVfYWJvcnQgIk5vdGhpbmcgdG8gZG8iCisKK2NwICIkdG9kbyIgIiR0b2RvIi5iYWNrdXAKK2dpdF9zZXF1ZW5jZV9lZGl0b3IgIiR0b2RvIiB8fAorCWRpZV9hYm9ydCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorCitoYXNfYWN0aW9uICIkdG9kbyIgfHwKKwlkaWVfYWJvcnQgIk5vdGhpbmcgdG8gZG8iCisKK3Rlc3QgLWQgIiRyZXdyaXR0ZW4iIHx8IHRlc3QgLW4gIiRmb3JjZV9yZWJhc2UiIHx8IHNraXBfdW5uZWNlc3NhcnlfcGlja3MKKworb3V0cHV0IGdpdCBjaGVja291dCAkb250byB8fCBkaWVfYWJvcnQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK2dpdCB1cGRhdGUtcmVmIE9SSUdfSEVBRCAkb3JpZ19oZWFkCitkb19yZXN0CmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1tZXJnZS5zaCBiL2dpdC1yZWJhc2UtLW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMGYyY2YKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcmViYXNlLS1tZXJnZS5zaApAQCAtMCwwICsxLDE1MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBKdW5pbyBDIEhhbWFuby4KKyMKKworcHJlYz00CisKK3JlYWRfc3RhdGUgKCkgeworCW9udG9fbmFtZT0kKGNhdCAiJHN0YXRlX2RpciIvb250b19uYW1lKSAmJgorCWVuZD0kKGNhdCAiJHN0YXRlX2RpciIvZW5kKSAmJgorCW1zZ251bT0kKGNhdCAiJHN0YXRlX2RpciIvbXNnbnVtKQorfQorCitjb250aW51ZV9tZXJnZSAoKSB7CisJdGVzdCAtZCAiJHN0YXRlX2RpciIgfHwgZGllICIkc3RhdGVfZGlyIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKKworCXVubWVyZ2VkPSQoZ2l0IGxzLWZpbGVzIC11KQorCWlmIHRlc3QgLW4gIiR1bm1lcmdlZCIKKwl0aGVuCisJCWVjaG8gIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXgiCisJCWVjaG8gImRpZCB5b3UgZm9yZ2V0IHRvIHVzZSBnaXQgYWRkPyIKKwkJZGllICIkcmVzb2x2ZW1zZyIKKwlmaQorCisJY210PWBjYXQgIiRzdGF0ZV9kaXIvY3VycmVudCJgCisJaWYgISBnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0taWdub3JlLXN1Ym1vZHVsZXMgSEVBRCAtLQorCXRoZW4KKwkJaWYgISBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1DICIkY210IgorCQl0aGVuCisJCQllY2hvICJDb21taXQgZmFpbGVkLCBwbGVhc2UgZG8gbm90IGNhbGwgXCJnaXQgY29tbWl0XCIiCisJCQllY2hvICJkaXJlY3RseSwgYnV0IGluc3RlYWQgZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6ICIKKwkJCWRpZSAiJHJlc29sdmVtc2ciCisJCWZpCisJCWlmIHRlc3QgLXogIiRHSVRfUVVJRVQiCisJCXRoZW4KKwkJCXByaW50ZiAiQ29tbWl0dGVkOiAlMCR7cHJlY31kICIgJG1zZ251bQorCQlmaQorCQllY2hvICIkY210ICQoZ2l0IHJldi1wYXJzZSBIRUFEXjApIiA+PiAiJHN0YXRlX2Rpci9yZXdyaXR0ZW4iCisJZWxzZQorCQlpZiB0ZXN0IC16ICIkR0lUX1FVSUVUIgorCQl0aGVuCisJCQlwcmludGYgIkFscmVhZHkgYXBwbGllZDogJTAke3ByZWN9ZCAiICRtc2dudW0KKwkJZmkKKwlmaQorCXRlc3QgLXogIiRHSVRfUVVJRVQiICYmCisJR0lUX1BBR0VSPScnIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLTEgIiRjbXQiCisKKwkjIG9udG8gdGhlIG5leHQgcGF0Y2g6CisJbXNnbnVtPSQoKCRtc2dudW0gKyAxKSkKKwllY2hvICIkbXNnbnVtIiA+IiRzdGF0ZV9kaXIvbXNnbnVtIgorfQorCitjYWxsX21lcmdlICgpIHsKKwljbXQ9IiQoY2F0ICIkc3RhdGVfZGlyL2NtdC4kMSIpIgorCWVjaG8gIiRjbXQiID4gIiRzdGF0ZV9kaXIvY3VycmVudCIKKwloZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKwljbXRfbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPiAvZGV2L251bGwgfHwgZWNobyBIRUFEKQorCW1zZ251bT0kKGNhdCAiJHN0YXRlX2Rpci9tc2dudW0iKQorCWV2YWwgR0lUSEVBRF8kY210PSciJHtjbXRfbmFtZSMjcmVmcy9oZWFkcy99fiQoKCRlbmQgLSAkbXNnbnVtKSkiJworCWV2YWwgR0lUSEVBRF8kaGQ9JyRvbnRvX25hbWUnCisJZXhwb3J0IEdJVEhFQURfJGNtdCBHSVRIRUFEXyRoZAorCWlmIHRlc3QgLW4gIiRHSVRfUVVJRVQiCisJdGhlbgorCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTEgJiYgZXhwb3J0IEdJVF9NRVJHRV9WRVJCT1NJVFkKKwlmaQorCXRlc3QgLXogIiRzdHJhdGVneSIgJiYgc3RyYXRlZ3k9cmVjdXJzaXZlCisJZXZhbCAnZ2l0LW1lcmdlLSRzdHJhdGVneScgJHN0cmF0ZWd5X29wdHMgJyIkY210XiIgLS0gIiRoZCIgIiRjbXQiJworCXJ2PSQ/CisJY2FzZSAiJHJ2IiBpbgorCTApCisJCXVuc2V0IEdJVEhFQURfJGNtdCBHSVRIRUFEXyRoZAorCQlyZXR1cm4KKwkJOzsKKwkxKQorCQlnaXQgcmVyZXJlICRhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZQorCQlkaWUgIiRyZXNvbHZlbXNnIgorCQk7OworCTIpCisJCWVjaG8gIlN0cmF0ZWd5OiAkc3RyYXRlZ3kgZmFpbGVkLCB0cnkgYW5vdGhlciIgMT4mMgorCQlkaWUgIiRyZXNvbHZlbXNnIgorCQk7OworCSopCisJCWRpZSAiVW5rbm93biBleGl0IGNvZGUgKCRydikgZnJvbSBjb21tYW5kOiIgXAorCQkJImdpdC1tZXJnZS0kc3RyYXRlZ3kgJGNtdF4gLS0gSEVBRCAkY210IgorCQk7OworCWVzYWMKK30KKworZmluaXNoX3JiX21lcmdlICgpIHsKKwltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAorCWlmIHRlc3QgLXMgIiRzdGF0ZV9kaXIiL3Jld3JpdHRlbgorCXRoZW4KKwkJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1yZWJhc2UgPCIkc3RhdGVfZGlyIi9yZXdyaXR0ZW4KKwkJaWYgdGVzdCAteCAiJEdJVF9ESVIiL2hvb2tzL3Bvc3QtcmV3cml0ZQorCQl0aGVuCisJCQkiJEdJVF9ESVIiL2hvb2tzL3Bvc3QtcmV3cml0ZSByZWJhc2UgPCIkc3RhdGVfZGlyIi9yZXdyaXR0ZW4KKwkJZmkKKwlmaQorCXJtIC1yICIkc3RhdGVfZGlyIgorCXNheSBBbGwgZG9uZS4KK30KKworY2FzZSAiJGFjdGlvbiIgaW4KK2NvbnRpbnVlKQorCXJlYWRfc3RhdGUKKwljb250aW51ZV9tZXJnZQorCXdoaWxlIHRlc3QgIiRtc2dudW0iIC1sZSAiJGVuZCIKKwlkbworCQljYWxsX21lcmdlICIkbXNnbnVtIgorCQljb250aW51ZV9tZXJnZQorCWRvbmUKKwlmaW5pc2hfcmJfbWVyZ2UKKwlleGl0CisJOzsKK3NraXApCisJcmVhZF9zdGF0ZQorCWdpdCByZXJlcmUgY2xlYXIKKwltc2dudW09JCgoJG1zZ251bSArIDEpKQorCXdoaWxlIHRlc3QgIiRtc2dudW0iIC1sZSAiJGVuZCIKKwlkbworCQljYWxsX21lcmdlICIkbXNnbnVtIgorCQljb250aW51ZV9tZXJnZQorCWRvbmUKKwlmaW5pc2hfcmJfbWVyZ2UKKwlleGl0CisJOzsKK2VzYWMKKworbWtkaXIgLXAgIiRzdGF0ZV9kaXIiCitlY2hvICIkb250b19uYW1lIiA+ICIkc3RhdGVfZGlyL29udG9fbmFtZSIKK3dyaXRlX2Jhc2ljX3N0YXRlCisKK21zZ251bT0wCitmb3IgY210IGluIGBnaXQgcmV2LWxpc3QgLS1yZXZlcnNlIC0tbm8tbWVyZ2VzICIkcmV2aXNpb25zImAKK2RvCisJbXNnbnVtPSQoKCRtc2dudW0gKyAxKSkKKwllY2hvICIkY210IiA+ICIkc3RhdGVfZGlyL2NtdC4kbXNnbnVtIgorZG9uZQorCitlY2hvIDEgPiIkc3RhdGVfZGlyL21zZ251bSIKK2VjaG8gJG1zZ251bSA+IiRzdGF0ZV9kaXIvZW5kIgorCitlbmQ9JG1zZ251bQorbXNnbnVtPTEKKword2hpbGUgdGVzdCAiJG1zZ251bSIgLWxlICIkZW5kIgorZG8KKwljYWxsX21lcmdlICIkbXNnbnVtIgorCWNvbnRpbnVlX21lcmdlCitkb25lCisKK2ZpbmlzaF9yYl9tZXJnZQpkaWZmIC0tZ2l0IGEvZ2l0LXJlYmFzZS5zaCBiL2dpdC1yZWJhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjJmMWM3NgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1yZWJhc2Uuc2gKQEAgLTAsMCArMSw1NDQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8uCisjCisKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKK09QVElPTlNfS0VFUERBU0hEQVNIPQorT1BUSU9OU19TUEVDPSJcCitnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSBbPHVwc3RyZWFtPl0gWzxicmFuY2g+XQorZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gLS1yb290IFs8YnJhbmNoPl0KK2dpdC1yZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbworLS0KKyBBdmFpbGFibGUgb3B0aW9ucyBhcmUKK3YsdmVyYm9zZSEgICAgICAgICBkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtCitxLHF1aWV0ISAgICAgICAgICAgYmUgcXVpZXQuIGltcGxpZXMgLS1uby1zdGF0CitvbnRvPSEgICAgICAgICAgICAgcmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0KK3AscHJlc2VydmUtbWVyZ2VzISB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbQorcyxzdHJhdGVneT0hICAgICAgIHVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kKK25vLWZmISAgICAgICAgICAgICBjaGVycnktcGljayBhbGwgY29tbWl0cywgZXZlbiBpZiB1bmNoYW5nZWQKK20sbWVyZ2UhICAgICAgICAgICB1c2UgbWVyZ2luZyBzdHJhdGVnaWVzIHRvIHJlYmFzZQoraSxpbnRlcmFjdGl2ZSEgICAgIGxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlCit4LGV4ZWM9ISAgICAgICAgICAgYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QKK2ssa2VlcC1lbXB0eQkgICBwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UKK2YsZm9yY2UtcmViYXNlISAgICBmb3JjZSByZWJhc2UgZXZlbiBpZiBicmFuY2ggaXMgdXAgdG8gZGF0ZQorWCxzdHJhdGVneS1vcHRpb249ISBwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneQorc3RhdCEgICAgICAgICAgICAgIGRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0KK24sbm8tc3RhdCEgICAgICAgICBkbyBub3Qgc2hvdyBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0KK3ZlcmlmeSAgICAgICAgICAgICBhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuCityZXJlcmUtYXV0b3VwZGF0ZSAgYWxsb3cgcmVyZXJlIHRvIHVwZGF0ZSBpbmRleCB3aXRoIHJlc29sdmVkIGNvbmZsaWN0cworcm9vdCEgICAgICAgICAgICAgIHJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykKK2F1dG9zcXVhc2ggICAgICAgICBtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIHVuZGVyIC1pCitjb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSEgcGFzc2VkIHRvICdnaXQgYW0nCitpZ25vcmUtZGF0ZSEgICAgICAgcGFzc2VkIHRvICdnaXQgYW0nCit3aGl0ZXNwYWNlPSEgICAgICAgcGFzc2VkIHRvICdnaXQgYXBwbHknCitpZ25vcmUtd2hpdGVzcGFjZSEgcGFzc2VkIHRvICdnaXQgYXBwbHknCitDPSEgICAgICAgICAgICAgICAgcGFzc2VkIHRvICdnaXQgYXBwbHknCisgQWN0aW9uczoKK2NvbnRpbnVlISAgICAgICAgICBjb250aW51ZQorYWJvcnQhICAgICAgICAgICAgIGFib3J0IGFuZCBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaAorc2tpcCEgICAgICAgICAgICAgIHNraXAgY3VycmVudCBwYXRjaCBhbmQgY29udGludWUKK2VkaXQtdG9kbyEgICAgICAgICBlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZQorIgorLiBnaXQtc2gtc2V0dXAKKy4gZ2l0LXNoLWkxOG4KK3NldF9yZWZsb2dfYWN0aW9uIHJlYmFzZQorcmVxdWlyZV93b3JrX3RyZWVfZXhpc3RzCitjZF90b190b3BsZXZlbAorCitMRj0nCisnCitva190b19za2lwX3ByZV9yZWJhc2U9CityZXNvbHZlbXNnPSIKKyQoZ2V0dGV4dCAnV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIi4KK0lmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gImdpdCByZWJhc2UgLS1za2lwIiBpbnN0ZWFkLgorVG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcmViYXNpbmcsIHJ1biAiZ2l0IHJlYmFzZSAtLWFib3J0Ii4nKQorIgordW5zZXQgb250bworY21kPQorc3RyYXRlZ3k9CitzdHJhdGVneV9vcHRzPQorZG9fbWVyZ2U9CittZXJnZV9kaXI9IiRHSVRfRElSIi9yZWJhc2UtbWVyZ2UKK2FwcGx5X2Rpcj0iJEdJVF9ESVIiL3JlYmFzZS1hcHBseQordmVyYm9zZT0KK2RpZmZzdGF0PQordGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCByZWJhc2Uuc3RhdCkiID0gdHJ1ZSAmJiBkaWZmc3RhdD10CitnaXRfYW1fb3B0PQorcmViYXNlX3Jvb3Q9Citmb3JjZV9yZWJhc2U9CithbGxvd19yZXJlcmVfYXV0b3VwZGF0ZT0KKyMgTm9uLWVtcHR5IGlmIGEgcmViYXNlIHdhcyBpbiBwcm9ncmVzcyB3aGVuICdnaXQgcmViYXNlJyB3YXMgaW52b2tlZAoraW5fcHJvZ3Jlc3M9CisjIE9uZSBvZiB7YW0sIG1lcmdlLCBpbnRlcmFjdGl2ZX0KK3R5cGU9CisjIE9uZSBvZiB7IiRHSVRfRElSIi9yZWJhc2UtYXBwbHksICIkR0lUX0RJUiIvcmViYXNlLW1lcmdlfQorc3RhdGVfZGlyPQorIyBPbmUgb2YgeycnLCBjb250aW51ZSwgc2tpcCwgYWJvcnR9LCBhcyBwYXJzZWQgZnJvbSBjb21tYW5kIGxpbmUKK2FjdGlvbj0KK3ByZXNlcnZlX21lcmdlcz0KK2F1dG9zcXVhc2g9CitrZWVwX2VtcHR5PQordGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCByZWJhc2UuYXV0b3NxdWFzaCkiID0gInRydWUiICYmIGF1dG9zcXVhc2g9dAorCityZWFkX2Jhc2ljX3N0YXRlICgpIHsKKwloZWFkX25hbWU9JChjYXQgIiRzdGF0ZV9kaXIiL2hlYWQtbmFtZSkgJiYKKwlvbnRvPSQoY2F0ICIkc3RhdGVfZGlyIi9vbnRvKSAmJgorCSMgV2UgYWx3YXlzIHdyaXRlIHRvIG9yaWctaGVhZCwgYnV0IGludGVyYWN0aXZlIHJlYmFzZSB1c2VkIHRvIHdyaXRlIHRvCisJIyBoZWFkLiBGYWxsIGJhY2sgdG8gcmVhZGluZyBmcm9tIGhlYWQgdG8gY292ZXIgZm9yIHRoZSBjYXNlIHRoYXQgdGhlCisJIyB1c2VyIHVwZ3JhZGVkIGdpdCB3aXRoIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLgorCWlmIHRlc3QgLWYgIiRzdGF0ZV9kaXIiL29yaWctaGVhZAorCXRoZW4KKwkJb3JpZ19oZWFkPSQoY2F0ICIkc3RhdGVfZGlyIi9vcmlnLWhlYWQpCisJZWxzZQorCQlvcmlnX2hlYWQ9JChjYXQgIiRzdGF0ZV9kaXIiL2hlYWQpCisJZmkgJiYKKwlHSVRfUVVJRVQ9JChjYXQgIiRzdGF0ZV9kaXIiL3F1aWV0KSAmJgorCXRlc3QgLWYgIiRzdGF0ZV9kaXIiL3ZlcmJvc2UgJiYgdmVyYm9zZT10CisJdGVzdCAtZiAiJHN0YXRlX2RpciIvc3RyYXRlZ3kgJiYgc3RyYXRlZ3k9IiQoY2F0ICIkc3RhdGVfZGlyIi9zdHJhdGVneSkiCisJdGVzdCAtZiAiJHN0YXRlX2RpciIvc3RyYXRlZ3lfb3B0cyAmJgorCQlzdHJhdGVneV9vcHRzPSIkKGNhdCAiJHN0YXRlX2RpciIvc3RyYXRlZ3lfb3B0cykiCisJdGVzdCAtZiAiJHN0YXRlX2RpciIvYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgJiYKKwkJYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU9IiQoY2F0ICIkc3RhdGVfZGlyIi9hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSkiCit9CisKK3dyaXRlX2Jhc2ljX3N0YXRlICgpIHsKKwllY2hvICIkaGVhZF9uYW1lIiA+ICIkc3RhdGVfZGlyIi9oZWFkLW5hbWUgJiYKKwllY2hvICIkb250byIgPiAiJHN0YXRlX2RpciIvb250byAmJgorCWVjaG8gIiRvcmlnX2hlYWQiID4gIiRzdGF0ZV9kaXIiL29yaWctaGVhZCAmJgorCWVjaG8gIiRHSVRfUVVJRVQiID4gIiRzdGF0ZV9kaXIiL3F1aWV0ICYmCisJdGVzdCB0ID0gIiR2ZXJib3NlIiAmJiA6ID4gIiRzdGF0ZV9kaXIiL3ZlcmJvc2UKKwl0ZXN0IC1uICIkc3RyYXRlZ3kiICYmIGVjaG8gIiRzdHJhdGVneSIgPiAiJHN0YXRlX2RpciIvc3RyYXRlZ3kKKwl0ZXN0IC1uICIkc3RyYXRlZ3lfb3B0cyIgJiYgZWNobyAiJHN0cmF0ZWd5X29wdHMiID4gXAorCQkiJHN0YXRlX2RpciIvc3RyYXRlZ3lfb3B0cworCXRlc3QgLW4gIiRhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSIgJiYgZWNobyAiJGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlIiA+IFwKKwkJIiRzdGF0ZV9kaXIiL2FsbG93X3JlcmVyZV9hdXRvdXBkYXRlCit9CisKK291dHB1dCAoKSB7CisJY2FzZSAiJHZlcmJvc2UiIGluCisJJycpCisJCW91dHB1dD0kKCIkQCIgMj4mMSApCisJCXN0YXR1cz0kPworCQl0ZXN0ICRzdGF0dXMgIT0gMCAmJiBwcmludGYgIiVzXG4iICIkb3V0cHV0IgorCQlyZXR1cm4gJHN0YXR1cworCQk7OworCSopCisJCSIkQCIKKwkJOzsKKwllc2FjCit9CisKK21vdmVfdG9fb3JpZ2luYWxfYnJhbmNoICgpIHsKKwljYXNlICIkaGVhZF9uYW1lIiBpbgorCXJlZnMvKikKKwkJbWVzc2FnZT0icmViYXNlIGZpbmlzaGVkOiAkaGVhZF9uYW1lIG9udG8gJG9udG8iCisJCWdpdCB1cGRhdGUtcmVmIC1tICIkbWVzc2FnZSIgXAorCQkJJGhlYWRfbmFtZSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJG9yaWdfaGVhZCAmJgorCQlnaXQgc3ltYm9saWMtcmVmIFwKKwkJCS1tICJyZWJhc2UgZmluaXNoZWQ6IHJldHVybmluZyB0byAkaGVhZF9uYW1lIiBcCisJCQlIRUFEICRoZWFkX25hbWUgfHwKKwkJZGllICIkKGdldHRleHQgIkNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJGhlYWRfbmFtZSIpIgorCQk7OworCWVzYWMKK30KKworcnVuX3NwZWNpZmljX3JlYmFzZSAoKSB7CisJaWYgWyAiJGludGVyYWN0aXZlX3JlYmFzZSIgPSBpbXBsaWVkIF07IHRoZW4KKwkJR0lUX0VESVRPUj06CisJCWV4cG9ydCBHSVRfRURJVE9SCisJCWF1dG9zcXVhc2g9CisJZmkKKwkuIGdpdC1yZWJhc2UtLSR0eXBlCit9CisKK3J1bl9wcmVfcmViYXNlX2hvb2sgKCkgeworCWlmIHRlc3QgLXogIiRva190b19za2lwX3ByZV9yZWJhc2UiICYmCisJICAgdGVzdCAteCAiJEdJVF9ESVIvaG9va3MvcHJlLXJlYmFzZSIKKwl0aGVuCisJCSIkR0lUX0RJUi9ob29rcy9wcmUtcmViYXNlIiAkezErIiRAIn0gfHwKKwkJZGllICIkKGdldHRleHQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIikiCisJZmkKK30KKwordGVzdCAtZiAiJGFwcGx5X2RpciIvYXBwbHlpbmcgJiYKKwlkaWUgIiQoZ2V0dGV4dCAiSXQgbG9va3MgbGlrZSBnaXQtYW0gaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIikiCisKK2lmIHRlc3QgLWQgIiRhcHBseV9kaXIiCit0aGVuCisJdHlwZT1hbQorCXN0YXRlX2Rpcj0iJGFwcGx5X2RpciIKK2VsaWYgdGVzdCAtZCAiJG1lcmdlX2RpciIKK3RoZW4KKwlpZiB0ZXN0IC1mICIkbWVyZ2VfZGlyIi9pbnRlcmFjdGl2ZQorCXRoZW4KKwkJdHlwZT1pbnRlcmFjdGl2ZQorCQlpbnRlcmFjdGl2ZV9yZWJhc2U9ZXhwbGljaXQKKwllbHNlCisJCXR5cGU9bWVyZ2UKKwlmaQorCXN0YXRlX2Rpcj0iJG1lcmdlX2RpciIKK2ZpCit0ZXN0IC1uICIkdHlwZSIgJiYgaW5fcHJvZ3Jlc3M9dAorCit0b3RhbF9hcmdjPSQjCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLS1uby12ZXJpZnkpCisJCW9rX3RvX3NraXBfcHJlX3JlYmFzZT15ZXMKKwkJOzsKKwktLXZlcmlmeSkKKwkJb2tfdG9fc2tpcF9wcmVfcmViYXNlPQorCQk7OworCS0tY29udGludWV8LS1za2lwfC0tYWJvcnR8LS1lZGl0LXRvZG8pCisJCXRlc3QgJHRvdGFsX2FyZ2MgLWVxIDIgfHwgdXNhZ2UKKwkJYWN0aW9uPSR7MSMjLS19CisJCTs7CisJLS1vbnRvKQorCQl0ZXN0IDIgLWxlICIkIyIgfHwgdXNhZ2UKKwkJb250bz0iJDIiCisJCXNoaWZ0CisJCTs7CisJLXgpCisJCXRlc3QgMiAtbGUgIiQjIiB8fCB1c2FnZQorCQljbWQ9IiR7Y21kfWV4ZWMgJDIke0xGfSIKKwkJc2hpZnQKKwkJOzsKKwktaSkKKwkJaW50ZXJhY3RpdmVfcmViYXNlPWV4cGxpY2l0CisJCTs7CisJLWspCisJCWtlZXBfZW1wdHk9eWVzCisJCTs7CisJLXApCisJCXByZXNlcnZlX21lcmdlcz10CisJCXRlc3QgLXogIiRpbnRlcmFjdGl2ZV9yZWJhc2UiICYmIGludGVyYWN0aXZlX3JlYmFzZT1pbXBsaWVkCisJCTs7CisJLS1hdXRvc3F1YXNoKQorCQlhdXRvc3F1YXNoPXQKKwkJOzsKKwktLW5vLWF1dG9zcXVhc2gpCisJCWF1dG9zcXVhc2g9CisJCTs7CisJLU18LW0pCisJCWRvX21lcmdlPXQKKwkJOzsKKwktWCkKKwkJc2hpZnQKKwkJc3RyYXRlZ3lfb3B0cz0iJHN0cmF0ZWd5X29wdHMgJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIi0tJDEiKSIKKwkJZG9fbWVyZ2U9dAorCQl0ZXN0IC16ICIkc3RyYXRlZ3kiICYmIHN0cmF0ZWd5PXJlY3Vyc2l2ZQorCQk7OworCS1zKQorCQlzaGlmdAorCQlzdHJhdGVneT0iJDEiCisJCWRvX21lcmdlPXQKKwkJOzsKKwktbikKKwkJZGlmZnN0YXQ9CisJCTs7CisJLS1zdGF0KQorCQlkaWZmc3RhdD10CisJCTs7CisJLXYpCisJCXZlcmJvc2U9dAorCQlkaWZmc3RhdD10CisJCUdJVF9RVUlFVD0KKwkJOzsKKwktcSkKKwkJR0lUX1FVSUVUPXQKKwkJZ2l0X2FtX29wdD0iJGdpdF9hbV9vcHQgLXEiCisJCXZlcmJvc2U9CisJCWRpZmZzdGF0PQorCQk7OworCS0td2hpdGVzcGFjZSkKKwkJc2hpZnQKKwkJZ2l0X2FtX29wdD0iJGdpdF9hbV9vcHQgLS13aGl0ZXNwYWNlPSQxIgorCQljYXNlICIkMSIgaW4KKwkJZml4fHN0cmlwKQorCQkJZm9yY2VfcmViYXNlPXQKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwktLWlnbm9yZS13aGl0ZXNwYWNlKQorCQlnaXRfYW1fb3B0PSIkZ2l0X2FtX29wdCAkMSIKKwkJOzsKKwktLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlfC0taWdub3JlLWRhdGUpCisJCWdpdF9hbV9vcHQ9IiRnaXRfYW1fb3B0ICQxIgorCQlmb3JjZV9yZWJhc2U9dAorCQk7OworCS1DKQorCQlzaGlmdAorCQlnaXRfYW1fb3B0PSIkZ2l0X2FtX29wdCAtQyQxIgorCQk7OworCS0tcm9vdCkKKwkJcmViYXNlX3Jvb3Q9dAorCQk7OworCS1mfC0tbm8tZmYpCisJCWZvcmNlX3JlYmFzZT10CisJCTs7CisJLS1yZXJlcmUtYXV0b3VwZGF0ZXwtLW5vLXJlcmVyZS1hdXRvdXBkYXRlKQorCQlhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZT0iJDEiCisJCTs7CisJLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCit0ZXN0ICQjIC1ndCAyICYmIHVzYWdlCisKK2lmIHRlc3QgLW4gIiRjbWQiICYmCisgICB0ZXN0ICIkaW50ZXJhY3RpdmVfcmViYXNlIiAhPSBleHBsaWNpdAordGhlbgorCWRpZSAiJChnZXR0ZXh0ICJUaGUgLS1leGVjIG9wdGlvbiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24iKSIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY3Rpb24iCit0aGVuCisJdGVzdCAteiAiJGluX3Byb2dyZXNzIiAmJiBkaWUgIiQoZ2V0dGV4dCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIpIgorCSMgT25seSBpbnRlcmFjdGl2ZSByZWJhc2UgdXNlcyBkZXRhaWxlZCByZWZsb2cgbWVzc2FnZXMKKwlpZiB0ZXN0ICIkdHlwZSIgPSBpbnRlcmFjdGl2ZSAmJiB0ZXN0ICIkR0lUX1JFRkxPR19BQ1RJT04iID0gcmViYXNlCisJdGhlbgorCQlHSVRfUkVGTE9HX0FDVElPTj0icmViYXNlIC1pICgkYWN0aW9uKSIKKwkJZXhwb3J0IEdJVF9SRUZMT0dfQUNUSU9OCisJZmkKK2ZpCisKK2lmIHRlc3QgIiRhY3Rpb24iID0gImVkaXQtdG9kbyIgJiYgdGVzdCAiJHR5cGUiICE9ICJpbnRlcmFjdGl2ZSIKK3RoZW4KKwlkaWUgIiQoZ2V0dGV4dCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIikiCitmaQorCitjYXNlICIkYWN0aW9uIiBpbgorY29udGludWUpCisJIyBTYW5pdHkgY2hlY2sKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi9kZXYvbnVsbCB8fAorCQlkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IHJlYWQgSEVBRCIpIgorCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtc3VibW9kdWxlcyAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0taWdub3JlLXN1Ym1vZHVsZXMgfHwgeworCQllY2hvICIkKGdldHRleHQgIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlbgorbWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiKSIKKwkJZXhpdCAxCisJfQorCXJlYWRfYmFzaWNfc3RhdGUKKwlydW5fc3BlY2lmaWNfcmViYXNlCisJOzsKK3NraXApCisJb3V0cHV0IGdpdCByZXNldCAtLWhhcmQgSEVBRCB8fCBleGl0ICQ/CisJcmVhZF9iYXNpY19zdGF0ZQorCXJ1bl9zcGVjaWZpY19yZWJhc2UKKwk7OworYWJvcnQpCisJZ2l0IHJlcmVyZSBjbGVhcgorCXJlYWRfYmFzaWNfc3RhdGUKKwljYXNlICIkaGVhZF9uYW1lIiBpbgorCXJlZnMvKikKKwkJZ2l0IHN5bWJvbGljLXJlZiAtbSAicmViYXNlOiBhYm9ydGluZyIgSEVBRCAkaGVhZF9uYW1lIHx8CisJCWRpZSAiJChldmFsX2dldHRleHQgIkNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gXCRoZWFkX25hbWUiKSIKKwkJOzsKKwllc2FjCisJb3V0cHV0IGdpdCByZXNldCAtLWhhcmQgJG9yaWdfaGVhZAorCXJtIC1yICIkc3RhdGVfZGlyIgorCWV4aXQKKwk7OworZWRpdC10b2RvKQorCXJ1bl9zcGVjaWZpY19yZWJhc2UKKwk7OworZXNhYworCisjIE1ha2Ugc3VyZSBubyByZWJhc2UgaXMgaW4gcHJvZ3Jlc3MKK2lmIHRlc3QgLW4gIiRpbl9wcm9ncmVzcyIKK3RoZW4KKwlzdGF0ZV9kaXJfYmFzZT0ke3N0YXRlX2RpciMjKi99CisJY21kX2xpdmVfcmViYXNlPSJnaXQgcmViYXNlICgtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCkiCisJY21kX2NsZWFyX3N0YWxlX3JlYmFzZT0icm0gLWZyIFwiJHN0YXRlX2RpclwiIgorCWRpZSAiCiskKGV2YWxfZ2V0dGV4dCAnSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJHN0YXRlX2Rpcl9iYXNlIGRpcmVjdG9yeSwgYW5kCitJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZQorY2FzZSwgcGxlYXNlIHRyeQorCSRjbWRfbGl2ZV9yZWJhc2UKK0lmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2UKKwkkY21kX2NsZWFyX3N0YWxlX3JlYmFzZQorYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmcKK3ZhbHVhYmxlIHRoZXJlLicpIgorZmkKKworaWYgdGVzdCAtbiAiJHJlYmFzZV9yb290IiAmJiB0ZXN0IC16ICIkb250byIKK3RoZW4KKwl0ZXN0IC16ICIkaW50ZXJhY3RpdmVfcmViYXNlIiAmJiBpbnRlcmFjdGl2ZV9yZWJhc2U9aW1wbGllZAorZmkKKworaWYgdGVzdCAtbiAiJGludGVyYWN0aXZlX3JlYmFzZSIKK3RoZW4KKwl0eXBlPWludGVyYWN0aXZlCisJc3RhdGVfZGlyPSIkbWVyZ2VfZGlyIgorZWxpZiB0ZXN0IC1uICIkZG9fbWVyZ2UiCit0aGVuCisJdHlwZT1tZXJnZQorCXN0YXRlX2Rpcj0iJG1lcmdlX2RpciIKK2Vsc2UKKwl0eXBlPWFtCisJc3RhdGVfZGlyPSIkYXBwbHlfZGlyIgorZmkKKworaWYgdGVzdCAteiAiJHJlYmFzZV9yb290IgordGhlbgorCWNhc2UgIiQjIiBpbgorCTApCisJCWlmICEgdXBzdHJlYW1fbmFtZT0kKGdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgXAorCQkJLS12ZXJpZnkgLXEgQHt1cHN0cmVhbX0gMj4vZGV2L251bGwpCisJCXRoZW4KKwkJCS4gZ2l0LXBhcnNlLXJlbW90ZQorCQkJZXJyb3Jfb25fbWlzc2luZ19kZWZhdWx0X3Vwc3RyZWFtICJyZWJhc2UiICJyZWJhc2UiIFwKKwkJCQkiYWdhaW5zdCIgImdpdCByZWJhc2UgPGJyYW5jaD4iCisJCWZpCisJCTs7CisJKikJdXBzdHJlYW1fbmFtZT0iJDEiCisJCXNoaWZ0CisJCTs7CisJZXNhYworCXVwc3RyZWFtPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIke3Vwc3RyZWFtX25hbWV9XjAiYCB8fAorCWRpZSAiJChldmFsX2dldHRleHQgImludmFsaWQgdXBzdHJlYW0gXCR1cHN0cmVhbV9uYW1lIikiCisJdXBzdHJlYW1fYXJnPSIkdXBzdHJlYW1fbmFtZSIKK2Vsc2UKKwlpZiB0ZXN0IC16ICIkb250byIKKwl0aGVuCisJCWVtcHR5X3RyZWU9YGdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIC9kZXYvbnVsbGAKKwkJb250bz1gZ2l0IGNvbW1pdC10cmVlICRlbXB0eV90cmVlIDwvZGV2L251bGxgCisJCXNxdWFzaF9vbnRvPSIkb250byIKKwlmaQorCXVuc2V0IHVwc3RyZWFtX25hbWUKKwl1bnNldCB1cHN0cmVhbQorCXRlc3QgJCMgLWd0IDEgJiYgdXNhZ2UKKwl1cHN0cmVhbV9hcmc9LS1yb290CitmaQorCisjIE1ha2Ugc3VyZSB0aGUgYnJhbmNoIHRvIHJlYmFzZSBvbnRvIGlzIHZhbGlkLgorb250b19uYW1lPSR7b250by0iJHVwc3RyZWFtX25hbWUifQorY2FzZSAiJG9udG9fbmFtZSIgaW4KKyouLi4qKQorCWlmCWxlZnQ9JHtvbnRvX25hbWUlLi4uKn0gcmlnaHQ9JHtvbnRvX25hbWUjKi4uLn0gJiYKKwkJb250bz0kKGdpdCBtZXJnZS1iYXNlIC0tYWxsICR7bGVmdDotSEVBRH0gJHtyaWdodDotSEVBRH0pCisJdGhlbgorCQljYXNlICIkb250byIgaW4KKwkJPyoiJExGIj8qKQorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiXCRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIikiCisJCQk7OworCQknJykKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlwkb250b19uYW1lOiB0aGVyZSBpcyBubyBtZXJnZSBiYXNlIikiCisJCQk7OworCQllc2FjCisJZWxzZQorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJcJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIpIgorCWZpCisJOzsKKyopCisJb250bz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR7b250b19uYW1lfV4wIikgfHwKKwlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogXCRvbnRvX25hbWUiKSIKKwk7OworZXNhYworCisjIElmIHRoZSBicmFuY2ggdG8gcmViYXNlIGlzIGdpdmVuLCB0aGF0IGlzIHRoZSBicmFuY2ggd2Ugd2lsbCByZWJhc2UKKyMgJGJyYW5jaF9uYW1lIC0tIGJyYW5jaCBiZWluZyByZWJhc2VkLCBvciBIRUFEIChhbHJlYWR5IGRldGFjaGVkKQorIyAkb3JpZ19oZWFkIC0tIGNvbW1pdCBvYmplY3QgbmFtZSBvZiB0aXAgb2YgdGhlIGJyYW5jaCBiZWZvcmUgcmViYXNpbmcKKyMgJGhlYWRfbmFtZSAtLSByZWZzL2hlYWRzLzx0aGF0LWJyYW5jaD4gb3IgImRldGFjaGVkIEhFQUQiCitzd2l0Y2hfdG89CitjYXNlICIkIyIgaW4KKzEpCisJIyBJcyBpdCAicmViYXNlIG90aGVyICRicmFuY2huYW1lIiBvciAicmViYXNlIG90aGVyICRjb21taXQiPworCWJyYW5jaF9uYW1lPSIkMSIKKwlzd2l0Y2hfdG89IiQxIgorCisJaWYgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0tcXVpZXQgLS0gInJlZnMvaGVhZHMvJDEiICYmCisJICAgb3JpZ19oZWFkPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAicmVmcy9oZWFkcy8kMSIpCisJdGhlbgorCQloZWFkX25hbWU9InJlZnMvaGVhZHMvJDEiCisJZWxpZiBvcmlnX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkMSIpCisJdGhlbgorCQloZWFkX25hbWU9ImRldGFjaGVkIEhFQUQiCisJZWxzZQorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJmYXRhbDogbm8gc3VjaCBicmFuY2g6IFwkYnJhbmNoX25hbWUiKSIKKwlmaQorCTs7CiswKQorCSMgRG8gbm90IG5lZWQgdG8gc3dpdGNoIGJyYW5jaGVzLCB3ZSBhcmUgYWxyZWFkeSBvbiBpdC4KKwlpZiBicmFuY2hfbmFtZT1gZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEYAorCXRoZW4KKwkJaGVhZF9uYW1lPSRicmFuY2hfbmFtZQorCQlicmFuY2hfbmFtZT1gZXhwciAieiRicmFuY2hfbmFtZSIgOiAnenJlZnMvaGVhZHMvXCguKlwpJ2AKKwllbHNlCisJCWhlYWRfbmFtZT0iZGV0YWNoZWQgSEVBRCIKKwkJYnJhbmNoX25hbWU9SEVBRCA7IyBkZXRhY2hlZAorCWZpCisJb3JpZ19oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHticmFuY2hfbmFtZX1eMCIpIHx8IGV4aXQKKwk7OworKikKKwlkaWUgIkJVRzogdW5leHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRzIGxlZnQgdG8gcGFyc2UiCisJOzsKK2VzYWMKKworcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgInJlYmFzZSIgIiQoZ2V0dGV4dCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIpIgorCisjIE5vdyB3ZSBhcmUgcmViYXNpbmcgY29tbWl0cyAkdXBzdHJlYW0uLiRvcmlnX2hlYWQgKG9yIHdpdGggLS1yb290LAorIyBldmVyeXRoaW5nIGxlYWRpbmcgdXAgdG8gJG9yaWdfaGVhZCkgb24gdG9wIG9mICRvbnRvCisKKyMgQ2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgYmFzZWQgb24gJG9udG8gd2l0aCBsaW5lYXIgaGlzdG9yeSwKKyMgYnV0IHRoaXMgc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIHVwc3RyZWFtIGFuZCBvbnRvIGFyZSB0aGUgc2FtZQorIyBhbmQgaWYgdGhpcyBpcyBub3QgYW4gaW50ZXJhY3RpdmUgcmViYXNlLgorbWI9JChnaXQgbWVyZ2UtYmFzZSAiJG9udG8iICIkb3JpZ19oZWFkIikKK2lmIHRlc3QgIiR0eXBlIiAhPSBpbnRlcmFjdGl2ZSAmJiB0ZXN0ICIkdXBzdHJlYW0iID0gIiRvbnRvIiAmJgorCXRlc3QgIiRtYiIgPSAiJG9udG8iICYmCisJIyBsaW5lYXIgaGlzdG9yeT8KKwkhIChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzICIkb250byIuLiIkb3JpZ19oZWFkIiB8IHNhbmVfZ3JlcCAiIC4qICIpID4gL2Rldi9udWxsCit0aGVuCisJaWYgdGVzdCAteiAiJGZvcmNlX3JlYmFzZSIKKwl0aGVuCisJCSMgTGF6aWx5IHN3aXRjaCB0byB0aGUgdGFyZ2V0IGJyYW5jaCBpZiBuZWVkZWQuLi4KKwkJdGVzdCAteiAiJHN3aXRjaF90byIgfHwgZ2l0IGNoZWNrb3V0ICIkc3dpdGNoX3RvIiAtLQorCQlzYXkgIiQoZXZhbF9nZXR0ZXh0ICJDdXJyZW50IGJyYW5jaCBcJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIikiCisJCWV4aXQgMAorCWVsc2UKKwkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiQ3VycmVudCBicmFuY2ggXCRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIpIgorCWZpCitmaQorCisjIElmIGEgaG9vayBleGlzdHMsIGdpdmUgaXQgYSBjaGFuY2UgdG8gaW50ZXJydXB0CitydW5fcHJlX3JlYmFzZV9ob29rICIkdXBzdHJlYW1fYXJnIiAiJEAiCisKK2lmIHRlc3QgLW4gIiRkaWZmc3RhdCIKK3RoZW4KKwlpZiB0ZXN0IC1uICIkdmVyYm9zZSIKKwl0aGVuCisJCWVjaG8gIiQoZXZhbF9nZXR0ZXh0ICJDaGFuZ2VzIGZyb20gXCRtYiB0byBcJG9udG86IikiCisJZmkKKwkjIFdlIHdhbnQgY29sb3IgKGlmIHNldCksIGJ1dCBubyBwYWdlcgorCUdJVF9QQUdFUj0nJyBnaXQgZGlmZiAtLXN0YXQgLS1zdW1tYXJ5ICIkbWIiICIkb250byIKK2ZpCisKK3Rlc3QgIiR0eXBlIiA9IGludGVyYWN0aXZlICYmIHJ1bl9zcGVjaWZpY19yZWJhc2UKKworIyBEZXRhY2ggSEVBRCBhbmQgcmVzZXQgdGhlIHRyZWUKK3NheSAiJChnZXR0ZXh0ICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi4iKSIKK2dpdCBjaGVja291dCAtcSAiJG9udG9eMCIgfHwgZGllICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCitnaXQgdXBkYXRlLXJlZiBPUklHX0hFQUQgJG9yaWdfaGVhZAorCisjIElmIHRoZSAkb250byBpcyBhIHByb3BlciBkZXNjZW5kYW50IG9mIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCwgdGhlbgorIyB3ZSBqdXN0IGZhc3QtZm9yd2FyZGVkLgoraWYgdGVzdCAiJG1iIiA9ICIkb3JpZ19oZWFkIgordGhlbgorCXNheSAiJChldmFsX2dldHRleHQgIkZhc3QtZm9yd2FyZGVkIFwkYnJhbmNoX25hbWUgdG8gXCRvbnRvX25hbWUuIikiCisJbW92ZV90b19vcmlnaW5hbF9icmFuY2gKKwlleGl0IDAKK2ZpCisKK2lmIHRlc3QgLW4gIiRyZWJhc2Vfcm9vdCIKK3RoZW4KKwlyZXZpc2lvbnM9IiRvbnRvLi4kb3JpZ19oZWFkIgorZWxzZQorCXJldmlzaW9ucz0iJHVwc3RyZWFtLi4kb3JpZ19oZWFkIgorZmkKKworcnVuX3NwZWNpZmljX3JlYmFzZQpkaWZmIC0tZ2l0IGEvZ2l0LXJlbGluay5wZXJsIGIvZ2l0LXJlbGluay5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyOTI4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcmVsaW5rLnBlcmwKQEAgLTAsMCArMSwxNzMgQEAKKyMhL3Vzci9iaW4vcGVybAorIyBDb3B5cmlnaHQgMjAwNSwgUnlhbiBBbmRlcnNvbiA8cnlhbkBtaWNob25saW5lLmNvbT4KKyMgRGlzdHJpYnV0aW9uIHBlcm1pdHRlZCB1bmRlciB0aGUgR1BMIHYyLCBhcyBkaXN0cmlidXRlZAorIyBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIyBMYXRlciB2ZXJzaW9ucyBvZiB0aGUgR1BMIGF0IHRoZSBkaXNjcmV0aW9uIG9mIExpbnVzIFRvcnZhbGRzCisjCisjIFNjYW4gdHdvIGdpdCBvYmplY3QtdHJlZXMsIGFuZCBoYXJkbGluayBhbnkgY29tbW9uIG9iamVjdHMgYmV0d2VlbiB0aGVtLgorCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdldG9wdDo6TG9uZzsKKworc3ViIGdldF9jYW5vbmljYWxfZm9ybSgkKTsKK3N1YiBkb19zY2FuX2RpcmVjdG9yeSgkJCQpOworc3ViIGNvbXBhcmVfdHdvX2ZpbGVzKCQkKTsKK3N1YiB1c2FnZSgpOworc3ViIGxpbmtfdHdvX2ZpbGVzKCQkKTsKKworIyBzdGF0cworbXkgJHRvdGFsX2xpbmtlZCA9IDA7CitteSAkdG90YWxfYWxyZWFkeSA9IDA7CitteSAoJGxpbmtlZCwkYWxyZWFkeSk7CisKK215ICRmYWlsX29uX2RpZmZlcmVudF9zaXplcyA9IDA7CitteSAkaGVscCA9IDA7CitHZXRPcHRpb25zKCJzYWZlIiA9PiBcJGZhaWxfb25fZGlmZmVyZW50X3NpemVzLAorCSAgICJoZWxwIiA9PiBcJGhlbHApOworCit1c2FnZSgpIGlmICRoZWxwOworCitteSAoQGRpcnMpID0gQEFSR1Y7CisKK3VzYWdlKCkgaWYgKCFkZWZpbmVkICRkaXJzWzBdIHx8ICFkZWZpbmVkICRkaXJzWzFdKTsKKworJF8gPSBnZXRfY2Fub25pY2FsX2Zvcm0oJF8pIGZvcmVhY2ggKEBkaXJzKTsKKworbXkgJG1hc3Rlcl9kaXIgPSBwb3AgQGRpcnM7CisKK29wZW5kaXIoRCwkbWFzdGVyX2RpciAuICJvYmplY3RzLyIpCisJb3IgZGllICJGYWlsZWQgdG8gb3BlbiAkbWFzdGVyX2Rpci9vYmplY3RzLyA6ICQhIjsKKworbXkgQGhhc2hkaXJzID0gZ3JlcCB7ICgkXyBlcSAncGFjaycpIHx8IC9eWzAtOWEtZl17Mn0kLyB9IHJlYWRkaXIoRCk7CisKK2ZvcmVhY2ggbXkgJHJlcG8gKEBkaXJzKSB7CisJJGxpbmtlZCA9IDA7CisJJGFscmVhZHkgPSAwOworCXByaW50ZigiU2VhcmNoaW5nICclcycgYW5kICclcycgZm9yIGNvbW1vbiBvYmplY3RzIGFuZCBoYXJkbGlua2luZyB0aGVtLi4uXG4iLAorCQkkbWFzdGVyX2RpciwkcmVwbyk7CisKKwlmb3JlYWNoIG15ICRoYXNoZGlyIChAaGFzaGRpcnMpIHsKKwkJZG9fc2Nhbl9kaXJlY3RvcnkoJG1hc3Rlcl9kaXIsICRoYXNoZGlyLCAkcmVwbyk7CisJfQorCisJcHJpbnRmKCJMaW5rZWQgJWQgZmlsZXMsICVkIHdlcmUgYWxyZWFkeSBsaW5rZWQuXG4iLCRsaW5rZWQsICRhbHJlYWR5KTsKKworCSR0b3RhbF9saW5rZWQgKz0gJGxpbmtlZDsKKwkkdG90YWxfYWxyZWFkeSArPSAkYWxyZWFkeTsKK30KKworcHJpbnRmKCJUb3RhbHM6IExpbmtlZCAlZCBmaWxlcywgJWQgd2VyZSBhbHJlYWR5IGxpbmtlZC5cbiIsCisJJHRvdGFsX2xpbmtlZCwgJHRvdGFsX2FscmVhZHkpOworCisKK3N1YiBkb19zY2FuX2RpcmVjdG9yeSgkJCQpIHsKKwlteSAoJHNyY2RpciwgJHN1YmRpciwgJGRzdGRpcikgPSBAXzsKKworCW15ICRzZnVsbGRpciA9IHNwcmludGYoIiVzb2JqZWN0cy8lcy8iLCRzcmNkaXIsJHN1YmRpcik7CisJbXkgJGRmdWxsZGlyID0gc3ByaW50ZigiJXNvYmplY3RzLyVzLyIsJGRzdGRpciwkc3ViZGlyKTsKKworCW9wZW5kaXIoUywkc2Z1bGxkaXIpCisJCW9yIGRpZSAiRmFpbGVkIHRvIG9wZW5kaXIgJHNmdWxsZGlyOiAkISI7CisKKwlmb3JlYWNoIG15ICRmaWxlIChncmVwKCEvXC57MSwyfSQvLCByZWFkZGlyKFMpKSkgeworCQlteSAkc2ZpbGVuYW1lID0gJHNmdWxsZGlyIC4gJGZpbGU7CisJCW15ICRkZmlsZW5hbWUgPSAkZGZ1bGxkaXIgLiAkZmlsZTsKKworCQljb21wYXJlX3R3b19maWxlcygkc2ZpbGVuYW1lLCRkZmlsZW5hbWUpOworCisJfQorCWNsb3NlZGlyKFMpOworfQorCitzdWIgY29tcGFyZV90d29fZmlsZXMoJCQpIHsKKwlteSAoJHNmaWxlbmFtZSwgJGRmaWxlbmFtZSkgPSBAXzsKKworCSMgUGVybCdzIHN0YXQgcmV0dXJucyByZWxldmFudCBpbmZvcm1hdGlvbiBhcyBmb2xsb3dzOgorCSMgMCA9IGRldiBudW1iZXIKKwkjIDEgPSBpbm9kZSBudW1iZXIKKwkjIDcgPSBzaXplCisJbXkgQHNzdGF0aW5mbyA9IHN0YXQoJHNmaWxlbmFtZSk7CisJbXkgQGRzdGF0aW5mbyA9IHN0YXQoJGRmaWxlbmFtZSk7CisKKwlpZiAoQHNzdGF0aW5mbyA9PSAwICYmIEBkc3RhdGluZm8gPT0gMCkgeworCQlkaWUgc3ByaW50ZigiU3RhdCBvZiBib3RoICVzIGFuZCAlcyBmYWlsZWQ6ICVzXG4iLCRzZmlsZW5hbWUsICRkZmlsZW5hbWUsICQhKTsKKworCX0gZWxzaWYgKEBkc3RhdGluZm8gPT0gMCkgeworCQlyZXR1cm47CisJfQorCisJaWYgKCAoJHNzdGF0aW5mb1swXSA9PSAkZHN0YXRpbmZvWzBdKSAmJgorCSAgICAgKCRzc3RhdGluZm9bMV0gIT0gJGRzdGF0aW5mb1sxXSkpIHsKKwkJaWYgKCRzc3RhdGluZm9bN10gPT0gJGRzdGF0aW5mb1s3XSkgeworCQkJbGlua190d29fZmlsZXMoJHNmaWxlbmFtZSwgJGRmaWxlbmFtZSk7CisKKwkJfSBlbHNlIHsKKwkJCW15ICRlcnIgPSBzcHJpbnRmKCJFUlJPUjogRmlsZSBzaXplcyBhcmUgbm90IHRoZSBzYW1lLCBjYW5ub3QgcmVsaW5rICVzIHRvICVzLlxuIiwKKwkJCQkkc2ZpbGVuYW1lLCAkZGZpbGVuYW1lKTsKKwkJCWlmICgkZmFpbF9vbl9kaWZmZXJlbnRfc2l6ZXMpIHsKKwkJCQlkaWUgJGVycjsKKwkJCX0gZWxzZSB7CisJCQkJd2FybiAkZXJyOworCQkJfQorCQl9CisKKwl9IGVsc2lmICggKCRzc3RhdGluZm9bMF0gPT0gJGRzdGF0aW5mb1swXSkgJiYKKwkgICAgICgkc3N0YXRpbmZvWzFdID09ICRkc3RhdGluZm9bMV0pKSB7CisJCSRhbHJlYWR5Kys7CisJfQorfQorCitzdWIgZ2V0X2Nhbm9uaWNhbF9mb3JtKCQpIHsKKwlteSAkZGlyID0gc2hpZnQ7CisJbXkgJG9yaWdpbmFsID0gJGRpcjsKKworCWRpZSAiJGRpciBpcyBub3QgYSBkaXJlY3RvcnkuIiB1bmxlc3MgLWQgJGRpcjsKKworCSRkaXIgLj0gIi8iIHVubGVzcyAkZGlyID1+IG0jLyQjOworCSRkaXIgLj0gIi5naXQvIiB1bmxlc3MgJGRpciA9fiBtI1wuZ2l0LyQjOworCisJZGllICIkb3JpZ2luYWwgZG9lcyBub3QgaGF2ZSBhIC5naXQvIHN1YmRpcmVjdG9yeS5cbiIgdW5sZXNzIC1kICRkaXI7CisKKwlyZXR1cm4gJGRpcjsKK30KKworc3ViIGxpbmtfdHdvX2ZpbGVzKCQkKSB7CisJbXkgKCRzZmlsZW5hbWUsICRkZmlsZW5hbWUpID0gQF87CisJbXkgJHRtcGRuYW1lID0gc3ByaW50ZigiJXMub2xkIiwkZGZpbGVuYW1lKTsKKwlyZW5hbWUoJGRmaWxlbmFtZSwkdG1wZG5hbWUpCisJCW9yIGRpZSBzcHJpbnRmKCJGYWlsdXJlIHJlbmFtaW5nICVzIHRvICVzOiAlcyIsCisJCQkkZGZpbGVuYW1lLCAkdG1wZG5hbWUsICQhKTsKKworCWlmICghIGxpbmsoJHNmaWxlbmFtZSwkZGZpbGVuYW1lKSkgeworCQlteSAkZmFpbHR4dCA9ICIiOworCQl1bmxlc3MgKHJlbmFtZSgkdG1wZG5hbWUsJGRmaWxlbmFtZSkpIHsKKwkJCSRmYWlsdHh0ID0gc3ByaW50ZigKKwkJCQkiR2l0IFJlcG9zaXRvcnkgY29udGFpbmluZyAlcyBpcyBwcm9iYWJseSBjb3JydXB0ZWQsICIgLgorCQkJCSJwbGVhc2UgY29weSAnJXMnIHRvICclcycgdG8gZml4LlxuIiwKKwkJCQkkdG1wZG5hbWUsICRkZmlsZW5hbWUpOworCQl9CisKKwkJZGllIHNwcmludGYoIkZhaWxlZCB0byBsaW5rICVzIHRvICVzOiAlc1xuJXMiIC4KKwkJCSRzZmlsZW5hbWUsICRkZmlsZW5hbWUsCisJCQkkISwgJGRmaWxlbmFtZSwgJGZhaWx0eHQpOworCX0KKworCXVubGluaygkdG1wZG5hbWUpCisJCW9yIGRpZSBzcHJpbnRmKCJVbmxpbmsgb2YgJXMgZmFpbGVkOiAlc1xuIiwKKwkJCSRkZmlsZW5hbWUsICQhKTsKKworCSRsaW5rZWQrKzsKK30KKworCitzdWIgdXNhZ2UoKSB7CisJcHJpbnQoIlVzYWdlOiBnaXQgcmVsaW5rIFstLXNhZmVdIDxkaXI+Li4uIDxtYXN0ZXJfZGlyPiBcbiIpOworCXByaW50KCJBbGwgZGlyZWN0b3JpZXMgc2hvdWxkIGNvbnRhaW4gYSAuZ2l0L29iamVjdHMvIHN1YmRpcmVjdG9yeS5cbiIpOworCXByaW50KCJPcHRpb25zXG4iKTsKKwlwcmludCgiXHQtLXNhZmVcdCIgLgorCQkiU3RvcHMgaWYgdHdvIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBoYXNoIGV4aXN0IGJ1dCAiIC4KKwkJImhhdmUgZGlmZmVyZW50IHNpemVzLiAgRGVmYXVsdCBpcyB0byB3YXJuIGFuZCBjb250aW51ZS5cbiIpOworCWV4aXQoMSk7Cit9CmRpZmYgLS1naXQgYS9naXQtcmVtb3RlLXRlc3RnaXQucHkgYi9naXQtcmVtb3RlLXRlc3RnaXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzZWJkMgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1yZW1vdGUtdGVzdGdpdC5weQpAQCAtMCwwICsxLDI3MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgVGhpcyBjb21tYW5kIGlzIGEgc2ltcGxlIHJlbW90ZS1oZWxwZXIsIHRoYXQgaXMgdXNlZCBib3RoIGFzIGEKKyMgdGVzdGNhc2UgZm9yIHRoZSByZW1vdGUtaGVscGVyIGZ1bmN0aW9uYWxpdHksIGFuZCBhcyBhbiBleGFtcGxlIHRvCisjIHNob3cgcmVtb3RlLWhlbHBlciBhdXRob3JzIG9uZSBwb3NzaWJsZSBpbXBsZW1lbnRhdGlvbi4KKyMKKyMgVGhpcyBpcyBhIEdpdCA8LT4gR2l0IGltcG9ydGVyL2V4cG9ydGVyLCB0aGF0IHNpbXBseSB1c2VzIGdpdAorIyBmYXN0LWltcG9ydCBhbmQgZ2l0IGZhc3QtZXhwb3J0IHRvIGNvbnN1bWUgYW5kIHByb2R1Y2UgZmFzdC1pbXBvcnQKKyMgc3RyZWFtcy4KKyMKKyMgVG8gdW5kZXJzdGFuZCBiZXR0ZXIgdGhlIHdheSB0aGluZ3Mgd29yaywgb25lIGNhbiBhY3RpdmF0ZSBkZWJ1ZworIyB0cmFjZXMgYnkgc2V0dGluZyAodG8gYW55IHZhbHVlKSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCisjIEdJVF9UUkFOU1BPUlRfSEVMUEVSX0RFQlVHIGFuZCBHSVRfREVCVUdfVEVTVEdJVCwgdG8gc2VlIG1lc3NhZ2VzCisjIGZyb20gdGhlIHRyYW5zcG9ydC1oZWxwZXIgc2lkZSwgb3IgZnJvbSB0aGlzIGV4YW1wbGUgcmVtb3RlLWhlbHBlci4KKworIyBoYXNobGliIGlzIG9ubHkgYXZhaWxhYmxlIGluIHB5dGhvbiA+PSAyLjUKK3RyeToKKyAgICBpbXBvcnQgaGFzaGxpYgorICAgIF9kaWdlc3QgPSBoYXNobGliLnNoYTEKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgc2hhCisgICAgX2RpZ2VzdCA9IHNoYS5uZXcKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5nZXRlbnYoIkdJVFBZVEhPTkxJQiIsIi4iKSkKKworZnJvbSBnaXRfcmVtb3RlX2hlbHBlcnMudXRpbCBpbXBvcnQgZGllLCBkZWJ1Zywgd2FybgorZnJvbSBnaXRfcmVtb3RlX2hlbHBlcnMuZ2l0LnJlcG8gaW1wb3J0IEdpdFJlcG8KK2Zyb20gZ2l0X3JlbW90ZV9oZWxwZXJzLmdpdC5leHBvcnRlciBpbXBvcnQgR2l0RXhwb3J0ZXIKK2Zyb20gZ2l0X3JlbW90ZV9oZWxwZXJzLmdpdC5pbXBvcnRlciBpbXBvcnQgR2l0SW1wb3J0ZXIKK2Zyb20gZ2l0X3JlbW90ZV9oZWxwZXJzLmdpdC5ub25fbG9jYWwgaW1wb3J0IE5vbkxvY2FsR2l0CisKK2RlZiBnZXRfcmVwbyhhbGlhcywgdXJsKToKKyAgICAiIiJSZXR1cm5zIGEgZ2l0IHJlcG9zaXRvcnkgb2JqZWN0IGluaXRpYWxpemVkIGZvciB1c2FnZS4KKyAgICAiIiIKKworICAgIHJlcG8gPSBHaXRSZXBvKHVybCkKKyAgICByZXBvLmdldF9yZXZzKCkKKyAgICByZXBvLmdldF9oZWFkKCkKKworICAgIGhhc2hlciA9IF9kaWdlc3QoKQorICAgIGhhc2hlci51cGRhdGUocmVwby5wYXRoKQorICAgIHJlcG8uaGFzaCA9IGhhc2hlci5oZXhkaWdlc3QoKQorCisgICAgcmVwby5nZXRfYmFzZV9wYXRoID0gbGFtYmRhIGJhc2U6IG9zLnBhdGguam9pbigKKyAgICAgICAgYmFzZSwgJ2luZm8nLCAnZmFzdC1pbXBvcnQnLCByZXBvLmhhc2gpCisKKyAgICBwcmVmaXggPSAncmVmcy90ZXN0Z2l0LyVzLycgJSBhbGlhcworICAgIGRlYnVnKCJwcmVmaXg6ICclcyciLCBwcmVmaXgpCisKKyAgICByZXBvLmdpdGRpciA9IG9zLmVudmlyb25bIkdJVF9ESVIiXQorICAgIHJlcG8uYWxpYXMgPSBhbGlhcworICAgIHJlcG8ucHJlZml4ID0gcHJlZml4CisKKyAgICByZXBvLmV4cG9ydGVyID0gR2l0RXhwb3J0ZXIocmVwbykKKyAgICByZXBvLmltcG9ydGVyID0gR2l0SW1wb3J0ZXIocmVwbykKKyAgICByZXBvLm5vbl9sb2NhbCA9IE5vbkxvY2FsR2l0KHJlcG8pCisKKyAgICByZXR1cm4gcmVwbworCisKK2RlZiBsb2NhbF9yZXBvKHJlcG8sIHBhdGgpOgorICAgICIiIlJldHVybnMgYSBnaXQgcmVwb3NpdG9yeSBvYmplY3QgaW5pdGFsaXplZCBmb3IgdXNhZ2UuCisgICAgIiIiCisKKyAgICBsb2NhbCA9IEdpdFJlcG8ocGF0aCkKKworICAgIGxvY2FsLm5vbl9sb2NhbCA9IE5vbmUKKyAgICBsb2NhbC5naXRkaXIgPSByZXBvLmdpdGRpcgorICAgIGxvY2FsLmFsaWFzID0gcmVwby5hbGlhcworICAgIGxvY2FsLnByZWZpeCA9IHJlcG8ucHJlZml4CisgICAgbG9jYWwuaGFzaCA9IHJlcG8uaGFzaAorICAgIGxvY2FsLmdldF9iYXNlX3BhdGggPSByZXBvLmdldF9iYXNlX3BhdGgKKyAgICBsb2NhbC5leHBvcnRlciA9IEdpdEV4cG9ydGVyKGxvY2FsKQorICAgIGxvY2FsLmltcG9ydGVyID0gR2l0SW1wb3J0ZXIobG9jYWwpCisKKyAgICByZXR1cm4gbG9jYWwKKworCitkZWYgZG9fY2FwYWJpbGl0aWVzKHJlcG8sIGFyZ3MpOgorICAgICIiIlByaW50cyB0aGUgc3VwcG9ydGVkIGNhcGFiaWxpdGllcy4KKyAgICAiIiIKKworICAgIHByaW50ICJpbXBvcnQiCisgICAgcHJpbnQgImV4cG9ydCIKKyAgICBwcmludCAicmVmc3BlYyByZWZzL2hlYWRzLyo6JXMqIiAlIHJlcG8ucHJlZml4CisKKyAgICBkaXJuYW1lID0gcmVwby5nZXRfYmFzZV9wYXRoKHJlcG8uZ2l0ZGlyKQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcm5hbWUpOgorICAgICAgICBvcy5tYWtlZGlycyhkaXJuYW1lKQorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXJuYW1lLCAndGVzdGdpdC5tYXJrcycpCisKKyAgICBwcmludCAiKmV4cG9ydC1tYXJrcyAlcyIgJSBwYXRoCisgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgIHByaW50ICIqaW1wb3J0LW1hcmtzICVzIiAlIHBhdGgKKworICAgIHByaW50ICMgZW5kIGNhcGFiaWxpdGllcworCisKK2RlZiBkb19saXN0KHJlcG8sIGFyZ3MpOgorICAgICIiIkxpc3RzIGFsbCBrbm93biByZWZlcmVuY2VzLgorCisgICAgQnVnOiBUaGlzIHdpbGwgYWx3YXlzIHNldCB0aGUgcmVtb3RlIGhlYWQgdG8gbWFzdGVyIGZvciBub24tbG9jYWwKKyAgICByZXBvc2l0b3JpZXMsIHNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIGRldGVybWluaW5nIHdoYXQgdGhlIHJlbW90ZQorICAgIGhlYWQgaXMgYXQgY2xvbmUgdGltZS4KKyAgICAiIiIKKworICAgIGZvciByZWYgaW4gcmVwby5yZXZzOgorICAgICAgICBkZWJ1ZygiPyByZWZzL2hlYWRzLyVzIiwgcmVmKQorICAgICAgICBwcmludCAiPyByZWZzL2hlYWRzLyVzIiAlIHJlZgorCisgICAgaWYgcmVwby5oZWFkOgorICAgICAgICBkZWJ1ZygiQHJlZnMvaGVhZHMvJXMgSEVBRCIgJSByZXBvLmhlYWQpCisgICAgICAgIHByaW50ICJAcmVmcy9oZWFkcy8lcyBIRUFEIiAlIHJlcG8uaGVhZAorICAgIGVsc2U6CisgICAgICAgIGRlYnVnKCJAcmVmcy9oZWFkcy9tYXN0ZXIgSEVBRCIpCisgICAgICAgIHByaW50ICJAcmVmcy9oZWFkcy9tYXN0ZXIgSEVBRCIKKworICAgIHByaW50ICMgZW5kIGxpc3QKKworCitkZWYgdXBkYXRlX2xvY2FsX3JlcG8ocmVwbyk6CisgICAgIiIiVXBkYXRlcyAob3IgY2xvbmVzKSBhIGxvY2FsIHJlcG8uCisgICAgIiIiCisKKyAgICBpZiByZXBvLmxvY2FsOgorICAgICAgICByZXR1cm4gcmVwbworCisgICAgcGF0aCA9IHJlcG8ubm9uX2xvY2FsLmNsb25lKHJlcG8uZ2l0ZGlyKQorICAgIHJlcG8ubm9uX2xvY2FsLnVwZGF0ZShyZXBvLmdpdGRpcikKKyAgICByZXBvID0gbG9jYWxfcmVwbyhyZXBvLCBwYXRoKQorICAgIHJldHVybiByZXBvCisKKworZGVmIGRvX2ltcG9ydChyZXBvLCBhcmdzKToKKyAgICAiIiJFeHBvcnRzIGEgZmFzdC1pbXBvcnQgc3RyZWFtIGZyb20gdGVzdGdpdCBmb3IgZ2l0IHRvIGltcG9ydC4KKyAgICAiIiIKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBkaWUoIkltcG9ydCBuZWVkcyBleGFjdGx5IG9uZSByZWYiKQorCisgICAgaWYgbm90IHJlcG8uZ2l0ZGlyOgorICAgICAgICBkaWUoIk5lZWQgZ2l0ZGlyIHRvIGltcG9ydCIpCisKKyAgICByZWYgPSBhcmdzWzBdCisgICAgcmVmcyA9IFtyZWZdCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbGluZSA9PSAnXG4nOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnaW1wb3J0ICcpOgorICAgICAgICAgICAgZGllKCJFeHBlY3RlZCBpbXBvcnQgbGluZS4iKQorCisgICAgICAgICMgc3RyaXAgb2YgbGVhZGluZyAnaW1wb3J0ICcKKyAgICAgICAgcmVmID0gbGluZVs3Ol0uc3RyaXAoKQorICAgICAgICByZWZzLmFwcGVuZChyZWYpCisKKyAgICByZXBvID0gdXBkYXRlX2xvY2FsX3JlcG8ocmVwbykKKyAgICByZXBvLmV4cG9ydGVyLmV4cG9ydF9yZXBvKHJlcG8uZ2l0ZGlyLCByZWZzKQorCisgICAgcHJpbnQgImRvbmUiCisKKworZGVmIGRvX2V4cG9ydChyZXBvLCBhcmdzKToKKyAgICAiIiJJbXBvcnRzIGEgZmFzdC1pbXBvcnQgc3RyZWFtIGZyb20gZ2l0IHRvIHRlc3RnaXQuCisgICAgIiIiCisKKyAgICBpZiBub3QgcmVwby5naXRkaXI6CisgICAgICAgIGRpZSgiTmVlZCBnaXRkaXIgdG8gZXhwb3J0IikKKworICAgIHVwZGF0ZV9sb2NhbF9yZXBvKHJlcG8pCisgICAgY2hhbmdlZCA9IHJlcG8uaW1wb3J0ZXIuZG9faW1wb3J0KHJlcG8uZ2l0ZGlyKQorCisgICAgaWYgbm90IHJlcG8ubG9jYWw6CisgICAgICAgIHJlcG8ubm9uX2xvY2FsLnB1c2gocmVwby5naXRkaXIpCisKKyAgICBmb3IgcmVmIGluIGNoYW5nZWQ6CisgICAgICAgIHByaW50ICJvayAlcyIgJSByZWYKKyAgICBwcmludAorCisKK0NPTU1BTkRTID0geworICAgICdjYXBhYmlsaXRpZXMnOiBkb19jYXBhYmlsaXRpZXMsCisgICAgJ2xpc3QnOiBkb19saXN0LAorICAgICdpbXBvcnQnOiBkb19pbXBvcnQsCisgICAgJ2V4cG9ydCc6IGRvX2V4cG9ydCwKK30KKworCitkZWYgc2FuaXRpemUodmFsdWUpOgorICAgICIiIkNsZWFucyB1cCB0aGUgdXJsLgorICAgICIiIgorCisgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgndGVzdGdpdDo6Jyk6CisgICAgICAgIHZhbHVlID0gdmFsdWVbOTpdCisKKyAgICByZXR1cm4gdmFsdWUKKworCitkZWYgcmVhZF9vbmVfbGluZShyZXBvKToKKyAgICAiIiJSZWFkcyBhbmQgcHJvY2Vzc2VzIG9uZSBjb21tYW5kLgorICAgICIiIgorCisgICAgc2xlZXB5ID0gb3MuZW52aXJvbi5nZXQoIkdJVF9SRU1PVEVfVEVTVEdJVF9TTEVFUFkiKQorICAgIGlmIHNsZWVweToKKyAgICAgICAgZGVidWcoIlNsZWVwaW5nICVkIHNlYyBiZWZvcmUgcmVhZGxpbmUiICUgaW50KHNsZWVweSkpCisgICAgICAgIHRpbWUuc2xlZXAoaW50KHNsZWVweSkpCisKKyAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKKworICAgIGNtZGxpbmUgPSBsaW5lCisKKyAgICBpZiBub3QgY21kbGluZToKKyAgICAgICAgd2FybigiVW5leHBlY3RlZCBFT0YiKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGNtZGxpbmUgPSBjbWRsaW5lLnN0cmlwKCkuc3BsaXQoKQorICAgIGlmIG5vdCBjbWRsaW5lOgorICAgICAgICAjIEJsYW5rIGxpbmUgbWVhbnMgd2UncmUgYWJvdXQgdG8gcXVpdAorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGNtZCA9IGNtZGxpbmUucG9wKDApCisgICAgZGVidWcoIkdvdCBjb21tYW5kICclcycgd2l0aCBhcmdzICclcyciLCBjbWQsICcgJy5qb2luKGNtZGxpbmUpKQorCisgICAgaWYgY21kIG5vdCBpbiBDT01NQU5EUzoKKyAgICAgICAgZGllKCJVbmtub3duIGNvbW1hbmQsICVzIiwgY21kKQorCisgICAgZnVuYyA9IENPTU1BTkRTW2NtZF0KKyAgICBmdW5jKHJlcG8sIGNtZGxpbmUpCisgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBtYWluKGFyZ3MpOgorICAgICIiIlN0YXJ0cyBhIG5ldyByZW1vdGUgaGVscGVyIGZvciB0aGUgc3BlY2lmaWVkIHJlcG9zaXRvcnkuCisgICAgIiIiCisKKyAgICBpZiBsZW4oYXJncykgIT0gMzoKKyAgICAgICAgZGllKCJFeHBlY3RpbmcgZXhhY3RseSB0aHJlZSBhcmd1bWVudHMuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG9zLmdldGVudigiR0lUX0RFQlVHX1RFU1RHSVQiKToKKyAgICAgICAgaW1wb3J0IGdpdF9yZW1vdGVfaGVscGVycy51dGlsCisgICAgICAgIGdpdF9yZW1vdGVfaGVscGVycy51dGlsLkRFQlVHID0gVHJ1ZQorCisgICAgYWxpYXMgPSBzYW5pdGl6ZShhcmdzWzFdKQorICAgIHVybCA9IHNhbml0aXplKGFyZ3NbMl0pCisKKyAgICBpZiBub3QgYWxpYXMuaXNhbG51bSgpOgorICAgICAgICB3YXJuKCJub24tYWxudW0gYWxpYXMgJyVzJyIsIGFsaWFzKQorICAgICAgICBhbGlhcyA9ICJ0bXAiCisKKyAgICBhcmdzWzFdID0gYWxpYXMKKyAgICBhcmdzWzJdID0gdXJsCisKKyAgICByZXBvID0gZ2V0X3JlcG8oYWxpYXMsIHVybCkKKworICAgIGRlYnVnKCJHb3QgYXJndW1lbnRzICVzIiwgYXJnc1sxOl0pCisKKyAgICBtb3JlID0gVHJ1ZQorCisgICAgc3lzLnN0ZGluID0gb3MuZmRvcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgJ3InLCAwKQorICAgIHdoaWxlIChtb3JlKToKKyAgICAgICAgbW9yZSA9IHJlYWRfb25lX2xpbmUocmVwbykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL2dpdC1yZXBhY2suc2ggYi9naXQtcmVwYWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1NzkzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcmVwYWNrLnNoCkBAIC0wLDAgKzEsMTk0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IExpbnVzIFRvcnZhbGRzCisjCisKK09QVElPTlNfS0VFUERBU0hEQVNIPQorT1BUSU9OU19TUEVDPSJcCitnaXQgcmVwYWNrIFtvcHRpb25zXQorLS0KK2EgICAgICAgICAgICAgICBwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjaworQSAgICAgICAgICAgICAgIHNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UKK2QgICAgICAgICAgICAgICByZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQKK2YgICAgICAgICAgICAgICBwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cworRiAgICAgICAgICAgICAgIHBhc3MgLS1uby1yZXVzZS1vYmplY3QgdG8gZ2l0LXBhY2stb2JqZWN0cworbiAgICAgICAgICAgICAgIGRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbworcSxxdWlldCAgICAgICAgIGJlIHF1aWV0CitsICAgICAgICAgICAgICAgcGFzcyAtLWxvY2FsIHRvIGdpdC1wYWNrLW9iamVjdHMKK3VucGFjay11bnJlYWNoYWJsZT0gIHdpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMKKyBQYWNraW5nIGNvbnN0cmFpbnRzCit3aW5kb3c9ICAgICAgICAgc2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uCit3aW5kb3ctbWVtb3J5PSAgc2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQKK2RlcHRoPSAgICAgICAgICBsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgKK21heC1wYWNrLXNpemU9ICBtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZQorIgorU1VCRElSRUNUT1JZX09LPSdZZXMnCisuIGdpdC1zaC1zZXR1cAorCitub191cGRhdGVfaW5mbz0gYWxsX2ludG9fb25lPSByZW1vdmVfcmVkdW5kYW50PSB1bnBhY2tfdW5yZWFjaGFibGU9Citsb2NhbD0gbm9fcmV1c2U9IGV4dHJhPQord2hpbGUgdGVzdCAkIyAhPSAwCitkbworCWNhc2UgIiQxIiBpbgorCS1uKQlub191cGRhdGVfaW5mbz10IDs7CisJLWEpCWFsbF9pbnRvX29uZT10IDs7CisJLUEpCWFsbF9pbnRvX29uZT10CisJCXVucGFja191bnJlYWNoYWJsZT0tLXVucGFjay11bnJlYWNoYWJsZSA7OworCS0tdW5wYWNrLXVucmVhY2hhYmxlKQorCQl1bnBhY2tfdW5yZWFjaGFibGU9Ii0tdW5wYWNrLXVucmVhY2hhYmxlPSQyIjsgc2hpZnQgOzsKKwktZCkJcmVtb3ZlX3JlZHVuZGFudD10IDs7CisJLXEpCUdJVF9RVUlFVD10IDs7CisJLWYpCW5vX3JldXNlPS0tbm8tcmV1c2UtZGVsdGEgOzsKKwktRikJbm9fcmV1c2U9LS1uby1yZXVzZS1vYmplY3QgOzsKKwktbCkJbG9jYWw9LS1sb2NhbCA7OworCS0tbWF4LXBhY2stc2l6ZXwtLXdpbmRvd3wtLXdpbmRvdy1tZW1vcnl8LS1kZXB0aCkKKwkJZXh0cmE9IiRleHRyYSAkMT0kMiI7IHNoaWZ0IDs7CisJLS0pIHNoaWZ0OyBicmVhazs7CisJKikJdXNhZ2UgOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworY2FzZSAiYGdpdCBjb25maWcgLS1ib29sIHJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQgfHwgZWNobyB0cnVlYCIgaW4KK3RydWUpCisJZXh0cmE9IiRleHRyYSAtLWRlbHRhLWJhc2Utb2Zmc2V0IiA7OworZXNhYworCitQQUNLRElSPSIkR0lUX09CSkVDVF9ESVJFQ1RPUlkvcGFjayIKK1BBQ0tUTVA9IiRQQUNLRElSLy50bXAtJCQtcGFjayIKK3JtIC1mICIkUEFDS1RNUCItKgordHJhcCAncm0gLWYgIiRQQUNLVE1QIi0qJyAwIDEgMiAzIDE1CisKKyMgVGhlcmUgd2lsbCBiZSBtb3JlIHJlcGFja2luZyBzdHJhdGVnaWVzIHRvIGNvbWUuLi4KK2Nhc2UgIiwkYWxsX2ludG9fb25lLCIgaW4KKywsKQorCWFyZ3M9Jy0tdW5wYWNrZWQgLS1pbmNyZW1lbnRhbCcKKwk7OworLHQsKQorCWFyZ3M9IGV4aXN0aW5nPQorCWlmIFsgLWQgIiRQQUNLRElSIiBdOyB0aGVuCisJCWZvciBlIGluIGBjZCAiJFBBQ0tESVIiICYmIGZpbmQgLiAtdHlwZSBmIC1uYW1lICcqLnBhY2snIFwKKwkJCXwgc2VkIC1lICdzL15cLlwvLy8nIC1lICdzL1wucGFjayQvLydgCisJCWRvCisJCQlpZiBbIC1lICIkUEFDS0RJUi8kZS5rZWVwIiBdOyB0aGVuCisJCQkJOiBrZWVwCisJCQllbHNlCisJCQkJZXhpc3Rpbmc9IiRleGlzdGluZyAkZSIKKwkJCWZpCisJCWRvbmUKKwkJaWYgdGVzdCAtbiAiJGV4aXN0aW5nIiAtYSAtbiAiJHVucGFja191bnJlYWNoYWJsZSIgLWEgXAorCQkJLW4gIiRyZW1vdmVfcmVkdW5kYW50IgorCQl0aGVuCisJCQkjIFRoaXMgbWF5IGhhdmUgYXJiaXRyYXJ5IHVzZXIgYXJndW1lbnRzLCBzbyB3ZQorCQkJIyBoYXZlIHRvIHByb3RlY3QgaXQgYWdhaW5zdCB3aGl0ZXNwYWNlIHNwbGl0dGluZworCQkJIyB3aGVuIGl0IGdldHMgcnVuIGFzICJwYWNrLW9iamVjdHMgJGFyZ3MiIGxhdGVyLgorCQkJIyBGb3J0dW5hdGVseSwgd2Uga25vdyBpdCdzIGFuIGFwcHJveGlkYXRlLCBzbyB3ZQorCQkJIyBjYW4ganVzdCB1c2UgZG90cyBpbnN0ZWFkLgorCQkJYXJncz0iJGFyZ3MgJChlY2hvICIkdW5wYWNrX3VucmVhY2hhYmxlIiB8IHRyICcgJyAuKSIKKwkJZmkKKwlmaQorCTs7Citlc2FjCisKK21rZGlyIC1wICIkUEFDS0RJUiIgfHwgZXhpdAorCithcmdzPSIkYXJncyAkbG9jYWwgJHtHSVRfUVVJRVQ6Ky1xfSAkbm9fcmV1c2UkZXh0cmEiCituYW1lcz0kKGdpdCBwYWNrLW9iamVjdHMgLS1rZWVwLXRydWUtcGFyZW50cyAtLWhvbm9yLXBhY2sta2VlcCAtLW5vbi1lbXB0eSAtLWFsbCAtLXJlZmxvZyAkYXJncyA8L2Rldi9udWxsICIkUEFDS1RNUCIpIHx8CisJZXhpdCAxCitpZiBbIC16ICIkbmFtZXMiIF07IHRoZW4KKwlzYXkgTm90aGluZyBuZXcgdG8gcGFjay4KK2ZpCisKKyMgT2sgd2UgaGF2ZSBwcmVwYXJlZCBhbGwgbmV3IHBhY2tmaWxlcy4KKworIyBGaXJzdCBzZWUgaWYgdGhlcmUgYXJlIHBhY2tzIG9mIHRoZSBzYW1lIG5hbWUgYW5kIGlmIHNvCisjIGlmIHdlIGNhbiBtb3ZlIHRoZW0gb3V0IG9mIHRoZSB3YXkgKHRoaXMgY2FuIGhhcHBlbiBpZiB3ZQorIyByZXBhY2tlZCBpbW1lZGlhdGVseSBhZnRlciBwYWNraW5nIGZ1bGx5Lgorcm9sbGJhY2s9CitmYWlsZWQ9Citmb3IgbmFtZSBpbiAkbmFtZXMKK2RvCisJZm9yIHNmeCBpbiBwYWNrIGlkeAorCWRvCisJCWZpbGU9cGFjay0kbmFtZS4kc2Z4CisJCXRlc3QgLWYgIiRQQUNLRElSLyRmaWxlIiB8fCBjb250aW51ZQorCQlybSAtZiAiJFBBQ0tESVIvb2xkLSRmaWxlIiAmJgorCQltdiAiJFBBQ0tESVIvJGZpbGUiICIkUEFDS0RJUi9vbGQtJGZpbGUiIHx8IHsKKwkJCWZhaWxlZD10CisJCQlicmVhaworCQl9CisJCXJvbGxiYWNrPSIkcm9sbGJhY2sgJGZpbGUiCisJZG9uZQorCXRlc3QgLXogIiRmYWlsZWQiIHx8IGJyZWFrCitkb25lCisKKyMgSWYgcmVuYW1pbmcgZmFpbGVkIGZvciBhbnkgb2YgdGhlbSwgcm9sbCB0aGUgb25lcyB3ZSBoYXZlCisjIGFscmVhZHkgcmVuYW1lZCBiYWNrIHRvIHRoZWlyIG9yaWdpbmFsIG5hbWVzLgoraWYgdGVzdCAtbiAiJGZhaWxlZCIKK3RoZW4KKwlyb2xsYmFja19mYWlsdXJlPQorCWZvciBmaWxlIGluICRyb2xsYmFjaworCWRvCisJCW12ICIkUEFDS0RJUi9vbGQtJGZpbGUiICIkUEFDS0RJUi8kZmlsZSIgfHwKKwkJcm9sbGJhY2tfZmFpbHVyZT0iJHJvbGxiYWNrX2ZhaWx1cmUgJGZpbGUiCisJZG9uZQorCWlmIHRlc3QgLW4gIiRyb2xsYmFja19mYWlsdXJlIgorCXRoZW4KKwkJZWNobyA+JjIgIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5IgorCQllY2hvID4mMiAiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG8iCisJCWVjaG8gPiYyICJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIgorCQllY2hvID4mMiAiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIgorCQllY2hvID4mMiAiV0FSTklORzogYXR0ZW1wdCB0byByZW5hbWUgdGhlbSBiYWNrIHRvIHRoZWlyIgorCQllY2hvID4mMiAiV0FSTklORzogb3JpZ2luYWwgbmFtZXMgYWxzbyBmYWlsZWQuIgorCQllY2hvID4mMiAiV0FSTklORzogUGxlYXNlIHJlbmFtZSB0aGVtIGluICRQQUNLRElSIG1hbnVhbGx5OiIKKwkJZm9yIGZpbGUgaW4gJHJvbGxiYWNrX2ZhaWx1cmUKKwkJZG8KKwkJCWVjaG8gPiYyICJXQVJOSU5HOiAgIG9sZC0kZmlsZSAtPiAkZmlsZSIKKwkJZG9uZQorCWZpCisJZXhpdCAxCitmaQorCisjIE5vdyB0aGUgb25lcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIG91dCBvZiB0aGUgd2F5Li4uCitmdWxsYmFzZXM9Citmb3IgbmFtZSBpbiAkbmFtZXMKK2RvCisJZnVsbGJhc2VzPSIkZnVsbGJhc2VzIHBhY2stJG5hbWUiCisJY2htb2QgYS13ICIkUEFDS1RNUC0kbmFtZS5wYWNrIgorCWNobW9kIGEtdyAiJFBBQ0tUTVAtJG5hbWUuaWR4IgorCW12IC1mICIkUEFDS1RNUC0kbmFtZS5wYWNrIiAiJFBBQ0tESVIvcGFjay0kbmFtZS5wYWNrIiAmJgorCW12IC1mICIkUEFDS1RNUC0kbmFtZS5pZHgiICAiJFBBQ0tESVIvcGFjay0kbmFtZS5pZHgiIHx8CisJZXhpdAorZG9uZQorCisjIFJlbW92ZSB0aGUgIm9sZC0iIGZpbGVzCitmb3IgbmFtZSBpbiAkbmFtZXMKK2RvCisJcm0gLWYgIiRQQUNLRElSL29sZC1wYWNrLSRuYW1lLmlkeCIKKwlybSAtZiAiJFBBQ0tESVIvb2xkLXBhY2stJG5hbWUucGFjayIKK2RvbmUKKworIyBFbmQgb2YgcGFjayByZXBsYWNlbWVudC4KKworaWYgdGVzdCAiJHJlbW92ZV9yZWR1bmRhbnQiID0gdAordGhlbgorCSMgV2Uga25vdyAkZXhpc3RpbmcgYXJlIGFsbCByZWR1bmRhbnQuCisJaWYgWyAtbiAiJGV4aXN0aW5nIiBdCisJdGhlbgorCQkoIGNkICIkUEFDS0RJUiIgJiYKKwkJICBmb3IgZSBpbiAkZXhpc3RpbmcKKwkJICBkbworCQkJY2FzZSAiICRmdWxsYmFzZXMgIiBpbgorCQkJKiIgJGUgIiopIDs7CisJCQkqKQlybSAtZiAiJGUucGFjayIgIiRlLmlkeCIgIiRlLmtlZXAiIDs7CisJCQllc2FjCisJCSAgZG9uZQorCQkpCisJZmkKKwlnaXQgcHJ1bmUtcGFja2VkICR7R0lUX1FVSUVUOistcX0KK2ZpCisKK2Nhc2UgIiRub191cGRhdGVfaW5mbyIgaW4KK3QpIDogOzsKKyopIGdpdCB1cGRhdGUtc2VydmVyLWluZm8gOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2dpdC1yZXF1ZXN0LXB1bGwuc2ggYi9naXQtcmVxdWVzdC1wdWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1NjYwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcmVxdWVzdC1wdWxsLnNoCkBAIC0wLDAgKzEsMTUyIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IDIwMDUsIFJ5YW4gQW5kZXJzb24gPHJ5YW5AbWljaG9ubGluZS5jb20+CisjCisjIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KKyMgYXQgdGhlIGRpc2NyZXRpb24gb2YgTGludXMgVG9ydmFsZHMuCisKK1VTQUdFPSc8c3RhcnQ+IDx1cmw+IFs8ZW5kPl0nCitMT05HX1VTQUdFPSdTdW1tYXJpemVzIHRoZSBjaGFuZ2VzIGJldHdlZW4gdHdvIGNvbW1pdHMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCwKK2FuZCBpbmNsdWRlcyB0aGUgZ2l2ZW4gVVJMIGluIHRoZSBnZW5lcmF0ZWQgc3VtbWFyeS4nCitTVUJESVJFQ1RPUllfT0s9J1llcycKK09QVElPTlNfS0VFUERBU0hEQVNIPQorT1BUSU9OU19TUEVDPSdnaXQgcmVxdWVzdC1wdWxsIFtvcHRpb25zXSBzdGFydCB1cmwgW2VuZF0KKy0tCitwICAgIHNob3cgcGF0Y2ggdGV4dCBhcyB3ZWxsCisnCisKKy4gZ2l0LXNoLXNldHVwCisKK0dJVF9QQUdFUj0KK2V4cG9ydCBHSVRfUEFHRVIKKworcGF0Y2g9Cit3aGlsZQljYXNlICIkIyIgaW4gMCkgYnJlYWsgOzsgZXNhYworZG8KKwljYXNlICIkMSIgaW4KKwktcCkKKwkJcGF0Y2g9LXAgOzsKKwktLSkKKwkJc2hpZnQ7IGJyZWFrIDs7CisJLSopCisJCXVzYWdlIDs7CisJKikKKwkJYnJlYWsgOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworYmFzZT0kMSB1cmw9JDIgaGVhZD0kezMtSEVBRH0gc3RhdHVzPTAgYnJhbmNoX25hbWU9CisKK2hlYWRyZWY9JChnaXQgc3ltYm9saWMtcmVmIC1xICIkaGVhZCIpCitpZiBnaXQgc2hvdy1yZWYgLXEgLS12ZXJpZnkgIiRoZWFkcmVmIgordGhlbgorCWJyYW5jaF9uYW1lPSR7aGVhZHJlZiNyZWZzL2hlYWRzL30KKwlpZiB0ZXN0ICJ6JGJyYW5jaF9uYW1lIiA9ICJ6JGhlYWRyZWYiIHx8CisJCSEgZ2l0IGNvbmZpZyAiYnJhbmNoLiRicmFuY2hfbmFtZS5kZXNjcmlwdGlvbiIgPi9kZXYvbnVsbAorCXRoZW4KKwkJYnJhbmNoX25hbWU9CisJZmkKK2ZpCisKK3RhZ19uYW1lPSQoZ2l0IGRlc2NyaWJlIC0tZXhhY3QgIiRoZWFkXjAiIDI+L2Rldi9udWxsKQorCit0ZXN0IC1uICIkYmFzZSIgJiYgdGVzdCAtbiAiJHVybCIgfHwgdXNhZ2UKK2Jhc2VyZXY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkYmFzZSJeMCkgJiYKK2hlYWRyZXY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkaGVhZCJeMCkgfHwgZXhpdAorCittZXJnZV9iYXNlPSQoZ2l0IG1lcmdlLWJhc2UgJGJhc2VyZXYgJGhlYWRyZXYpIHx8CitkaWUgImZhdGFsOiBObyBjb21taXRzIGluIGNvbW1vbiBiZXR3ZWVuICRiYXNlIGFuZCAkaGVhZCIKKworIyAkaGVhZCBpcyB0aGUgdG9rZW4gZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBhbmQgJHRhZ19uYW1lLCBpZgorIyBleGlzdHMsIGlzIHRoZSB0YWcgd2UgYXJlIGdvaW5nIHRvIHNob3cgdGhlIGNvbW1pdCBpbmZvcm1hdGlvbiBmb3IuCisjIElmIHRoYXQgdGFnIGV4aXN0cyBhdCB0aGUgcmVtb3RlIGFuZCBpdCBwb2ludHMgYXQgdGhlIGNvbW1pdCwgdXNlIGl0LgorIyBPdGhlcndpc2UsIGlmIGEgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSBhcyAkaGVhZCBleGlzdHMgYXQgdGhlIHJlbW90ZQorIyBhbmQgdGhlaXIgdmFsdWVzIG1hdGNoLCB1c2UgdGhhdCBpbnN0ZWFkLgorIworIyBPdGhlcndpc2UgZmluZCBhIHJhbmRvbSByZWYgdGhhdCBtYXRjaGVzICRoZWFkcmV2LgorZmluZF9tYXRjaGluZ19yZWY9JworCXN1YiBhYmJyIHsKKwkJbXkgJHJlZiA9IHNoaWZ0OworCQlpZiAoJHJlZiA9fiBzfF5yZWZzL2hlYWRzL3x8IHx8ICRyZWYgPX4gc3xecmVmcy90YWdzL3x0YWdzL3wpIHsKKwkJCXJldHVybiAkcmVmOworCQl9IGVsc2UgeworCQkJcmV0dXJuICRyZWY7CisJCX0KKwl9CisKKwlteSAoJHRhZ2dlZCwgJGJyYW5jaCwgJGZvdW5kKTsKKwl3aGlsZSAoPFNURElOPikgeworCQlteSAoJHNoYTEsICRyZWYsICRkZXJlZikgPSAvXihcUyspXHMrKFxTKz8pKFxeXHtcfSk/JC87CisJCW5leHQgdW5sZXNzICgkc2hhMSBlcSAkQVJHVlsxXSk7CisJCSRmb3VuZCA9IGFiYnIoJHJlZik7CisJCWlmICgkZGVyZWYgJiYgJHJlZiBlcSAidGFncy8kQVJHVlsyXSIpIHsKKwkJCSR0YWdnZWQgPSAkZm91bmQ7CisJCQlsYXN0OworCQl9CisJCWlmICgkcmVmID1+IG18L1xRJEFSR1ZbMF1cRSR8KSB7CisJCQkkZXhhY3QgPSAkZm91bmQ7CisJCX0KKwl9CisJaWYgKCR0YWdnZWQpIHsKKwkJcHJpbnQgIiR0YWdnZWRcbiI7CisJfSBlbHNpZiAoJGV4YWN0KSB7CisJCXByaW50ICIkZXhhY3RcbiI7CisJfSBlbHNpZiAoJGZvdW5kKSB7CisJCXByaW50ICIkZm91bmRcbiI7CisJfQorJworCityZWY9JChnaXQgbHMtcmVtb3RlICIkdXJsIiB8IHBlcmwgLWUgIiRmaW5kX21hdGNoaW5nX3JlZiIgIiRoZWFkIiAiJGhlYWRyZXYiICIkdGFnX25hbWUiKQorCit1cmw9JChnaXQgbHMtcmVtb3RlIC0tZ2V0LXVybCAiJHVybCIpCisKK2dpdCBzaG93IC1zIC0tZm9ybWF0PSdUaGUgZm9sbG93aW5nIGNoYW5nZXMgc2luY2UgY29tbWl0ICVIOgorCisgICVzICglY2kpCisKK2FyZSBhdmFpbGFibGUgaW4gdGhlIGdpdCByZXBvc2l0b3J5IGF0OgorJyAkbWVyZ2VfYmFzZSAmJgorZWNobyAiICAkdXJsJHtyZWYrICRyZWZ9IiAmJgorZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JworZm9yIHlvdSB0byBmZXRjaCBjaGFuZ2VzIHVwIHRvICVIOgorCisgICVzICglY2kpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nICRoZWFkcmV2ICYmCisKK2lmIHRlc3QgLW4gIiRicmFuY2hfbmFtZSIKK3RoZW4KKwllY2hvICIoZnJvbSB0aGUgYnJhbmNoIGRlc2NyaXB0aW9uIGZvciAkYnJhbmNoX25hbWUgbG9jYWwgYnJhbmNoKSIKKwllY2hvCisJZ2l0IGNvbmZpZyAiYnJhbmNoLiRicmFuY2hfbmFtZS5kZXNjcmlwdGlvbiIKK2ZpICYmCisKK2lmIHRlc3QgLW4gIiR0YWdfbmFtZSIKK3RoZW4KKwlpZiB0ZXN0IC16ICIkcmVmIiB8fCB0ZXN0ICIkcmVmIiAhPSAidGFncy8kdGFnX25hbWUiCisJdGhlbgorCQllY2hvID4mMiAid2FybjogWW91IGxvY2FsbHkgaGF2ZSAkdGFnX25hbWUgYnV0IGl0IGRvZXMgbm90ICh5ZXQpIgorCQllY2hvID4mMiAid2FybjogYXBwZWFyIHRvIGJlIGF0ICR1cmwiCisJCWVjaG8gPiYyICJ3YXJuOiBEbyB5b3Ugd2FudCB0byBwdXNoIGl0IHRoZXJlLCBwZXJoYXBzPyIKKwlmaQorCWdpdCBjYXQtZmlsZSB0YWcgIiR0YWdfbmFtZSIgfAorCXNlZCAtbiAtZSAnMSwvXiQvZCcgLWUgJy9eLS0tLS1CRUdJTiBQR1AgL3EnIC1lIHAKKwllY2hvCitmaSAmJgorCitpZiB0ZXN0IC1uICIkYnJhbmNoX25hbWUiIHx8IHRlc3QgLW4gIiR0YWdfbmFtZSIKK3RoZW4KKwllY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZmkgJiYKKworZ2l0IHNob3J0bG9nIF4kYmFzZXJldiAkaGVhZHJldiAmJgorZ2l0IGRpZmYgLU0gLS1zdGF0IC0tc3VtbWFyeSAkcGF0Y2ggJG1lcmdlX2Jhc2UuLiRoZWFkcmV2IHx8IHN0YXR1cz0xCisKK2lmIHRlc3QgLXogIiRyZWYiCit0aGVuCisJZWNobyAid2FybjogTm8gYnJhbmNoIG9mICR1cmwgaXMgYXQ6IiA+JjIKKwlnaXQgc2hvdyAtcyAtLWZvcm1hdD0nd2FybjogICAlaDogJXMnICRoZWFkcmV2ID4mMgorCWVjaG8gIndhcm46IEFyZSB5b3Ugc3VyZSB5b3UgcHVzaGVkICckaGVhZCcgdGhlcmU/IiA+JjIKKwlzdGF0dXM9MQorZmkKK2V4aXQgJHN0YXR1cwpkaWZmIC0tZ2l0IGEvZ2l0LXNlbmQtZW1haWwucGVybCBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWVhNjZhMAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKQEAgLTAsMCArMSwxNDU1IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgQ29weXJpZ2h0IDIwMDIsMjAwNSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorIyBDb3B5cmlnaHQgMjAwNSBSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPgorIworIyBHUEwgdjIgKFNlZSBDT1BZSU5HKQorIworIyBQb3J0ZWQgdG8gc3VwcG9ydCBnaXQgIm1ib3giIGZvcm1hdCBmaWxlcyBieSBSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPgorIworIyBTZW5kcyBhIGNvbGxlY3Rpb24gb2YgZW1haWxzIHRvIHRoZSBnaXZlbiBlbWFpbCBhZGRyZXNzZXMsIGRpc3R1cmJpbmdseSBmYXN0LgorIworIyBTdXBwb3J0cyB0d28gZm9ybWF0czoKKyMgMS4gbWJveCBmb3JtYXQgZmlsZXMgKGlnbm9yaW5nIG1vc3QgaGVhZGVycyBhbmQgTUlNRSBmb3JtYXR0aW5nIC0gdGhpcyBpcyBkZXNpZ25lZCBmb3Igc2VuZGluZyBwYXRjaGVzKQorIyAyLiBUaGUgb3JpZ2luYWwgZm9ybWF0IHN1cHBvcnQgYnkgR3JlZydzIHNjcmlwdDoKKyMgICAgZmlyc3QgbGluZSBvZiB0aGUgbWVzc2FnZSBpcyB3aG8gdG8gQ0MsCisjICAgIGFuZCBzZWNvbmQgbGluZSBpcyB0aGUgc3ViamVjdCBvZiB0aGUgbWVzc2FnZS4KKyMKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBUZXJtOjpSZWFkTGluZTsKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgVGV4dDo6UGFyc2VXb3JkczsKK3VzZSBEYXRhOjpEdW1wZXI7Cit1c2UgVGVybTo6QU5TSUNvbG9yOwordXNlIEZpbGU6OlRlbXAgcXcvIHRlbXBkaXIgdGVtcGZpbGUgLzsKK3VzZSBGaWxlOjpTcGVjOjpGdW5jdGlvbnMgcXcoY2F0ZmlsZSk7Cit1c2UgRXJyb3IgcXcoOnRyeSk7Cit1c2UgR2l0OworCitHZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZSBxdy8gcGFzc190aHJvdWdoIC87CisKK3BhY2thZ2UgRmFrZVRlcm07CitzdWIgbmV3IHsKKwlteSAoJGNsYXNzLCAkcmVhc29uKSA9IEBfOworCXJldHVybiBibGVzcyBcJHJlYXNvbiwgc2hpZnQ7Cit9CitzdWIgcmVhZGxpbmUgeworCW15ICRzZWxmID0gc2hpZnQ7CisJZGllICJDYW5ub3QgdXNlIHJlYWRsaW5lIG9uIEZha2VUZXJtOiAkJHNlbGYiOworfQorcGFja2FnZSBtYWluOworCisKK3N1YiB1c2FnZSB7CisJcHJpbnQgPDxFT1Q7CitnaXQgc2VuZC1lbWFpbCBbb3B0aW9uc10gPGZpbGUgfCBkaXJlY3RvcnkgfCByZXYtbGlzdCBvcHRpb25zID4KKworICBDb21wb3Npbmc6CisgICAgLS1mcm9tICAgICAgICAgICAgICAgICAgPHN0cj4gICogRW1haWwgRnJvbToKKyAgICAtLVtuby1ddG8gICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBUbzoKKyAgICAtLVtuby1dY2MgICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBDYzoKKyAgICAtLVtuby1dYmNjICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBCY2M6CisgICAgLS1zdWJqZWN0ICAgICAgICAgICAgICAgPHN0cj4gICogRW1haWwgIlN1YmplY3Q6IgorICAgIC0taW4tcmVwbHktdG8gICAgICAgICAgIDxzdHI+ICAqIEVtYWlsICJJbi1SZXBseS1UbzoiCisgICAgLS1hbm5vdGF0ZSAgICAgICAgICAgICAgICAgICAgICogUmV2aWV3IGVhY2ggcGF0Y2ggdGhhdCB3aWxsIGJlIHNlbnQgaW4gYW4gZWRpdG9yLgorICAgIC0tY29tcG9zZSAgICAgICAgICAgICAgICAgICAgICAqIE9wZW4gYW4gZWRpdG9yIGZvciBpbnRyb2R1Y3Rpb24uCisgICAgLS04Yml0LWVuY29kaW5nICAgICAgICAgPHN0cj4gICogRW5jb2RpbmcgdG8gYXNzdW1lIDhiaXQgbWFpbHMgaWYgdW5kZWNsYXJlZAorCisgIFNlbmRpbmc6CisgICAgLS1lbnZlbG9wZS1zZW5kZXIgICAgICAgPHN0cj4gICogRW1haWwgZW52ZWxvcGUgc2VuZGVyLgorICAgIC0tc210cC1zZXJ2ZXIgICAgICAgPHN0cjppbnQ+ICAqIE91dGdvaW5nIFNNVFAgc2VydmVyIHRvIHVzZS4gVGhlIHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvcHRpb25hbC4gRGVmYXVsdCAnbG9jYWxob3N0Jy4KKyAgICAtLXNtdHAtc2VydmVyLW9wdGlvbiAgICA8c3RyPiAgKiBPdXRnb2luZyBTTVRQIHNlcnZlciBvcHRpb24gdG8gdXNlLgorICAgIC0tc210cC1zZXJ2ZXItcG9ydCAgICAgIDxpbnQ+ICAqIE91dGdvaW5nIFNNVFAgc2VydmVyIHBvcnQuCisgICAgLS1zbXRwLXVzZXIgICAgICAgICAgICAgPHN0cj4gICogVXNlcm5hbWUgZm9yIFNNVFAtQVVUSC4KKyAgICAtLXNtdHAtcGFzcyAgICAgICAgICAgICA8c3RyPiAgKiBQYXNzd29yZCBmb3IgU01UUC1BVVRIOyBub3QgbmVjZXNzYXJ5LgorICAgIC0tc210cC1lbmNyeXB0aW9uICAgICAgIDxzdHI+ICAqIHRscyBvciBzc2w7IGFueXRoaW5nIGVsc2UgZGlzYWJsZXMuCisgICAgLS1zbXRwLXNzbCAgICAgICAgICAgICAgICAgICAgICogRGVwcmVjYXRlZC4gVXNlICctLXNtdHAtZW5jcnlwdGlvbiBzc2wnLgorICAgIC0tc210cC1kb21haW4gICAgICAgICAgIDxzdHI+ICAqIFRoZSBkb21haW4gbmFtZSBzZW50IHRvIEhFTE8vRUhMTyBoYW5kc2hha2UKKyAgICAtLXNtdHAtZGVidWcgICAgICAgICAgICA8MHwxPiAgKiBEaXNhYmxlLCBlbmFibGUgTmV0OjpTTVRQIGRlYnVnLgorCisgIEF1dG9tYXRpbmc6CisgICAgLS1pZGVudGl0eSAgICAgICAgICAgICAgPHN0cj4gICogVXNlIHRoZSBzZW5kZW1haWwuPGlkPiBvcHRpb25zLgorICAgIC0tdG8tY21kICAgICAgICAgICAgICAgIDxzdHI+ICAqIEVtYWlsIFRvOiB2aWEgYDxzdHI+IFwkcGF0Y2hfcGF0aGAKKyAgICAtLWNjLWNtZCAgICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBDYzogdmlhIGA8c3RyPiBcJHBhdGNoX3BhdGhgCisgICAgLS1zdXBwcmVzcy1jYyAgICAgICAgICAgPHN0cj4gICogYXV0aG9yLCBzZWxmLCBzb2IsIGNjLCBjY2NtZCwgYm9keSwgYm9keWNjLCBhbGwuCisgICAgLS1bbm8tXXNpZ25lZC1vZmYtYnktY2MgICAgICAgICogU2VuZCB0byBTaWduZWQtb2ZmLWJ5OiBhZGRyZXNzZXMuIERlZmF1bHQgb24uCisgICAgLS1bbm8tXXN1cHByZXNzLWZyb20gICAgICAgICAgICogU2VuZCB0byBzZWxmLiBEZWZhdWx0IG9mZi4KKyAgICAtLVtuby1dY2hhaW4tcmVwbHktdG8gICAgICAgICAgKiBDaGFpbiBJbi1SZXBseS1UbzogZmllbGRzLiBEZWZhdWx0IG9mZi4KKyAgICAtLVtuby1ddGhyZWFkICAgICAgICAgICAgICAgICAgKiBVc2UgSW4tUmVwbHktVG86IGZpZWxkLiBEZWZhdWx0IG9uLgorCisgIEFkbWluaXN0ZXJpbmc6CisgICAgLS1jb25maXJtICAgICAgICAgICAgICAgPHN0cj4gICogQ29uZmlybSByZWNpcGllbnRzIGJlZm9yZSBzZW5kaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8sIGNjLCBjb21wb3NlLCBhbHdheXMsIG9yIG5ldmVyLgorICAgIC0tcXVpZXQgICAgICAgICAgICAgICAgICAgICAgICAqIE91dHB1dCBvbmUgbGluZSBvZiBpbmZvIHBlciBlbWFpbC4KKyAgICAtLWRyeS1ydW4gICAgICAgICAgICAgICAgICAgICAgKiBEb24ndCBhY3R1YWxseSBzZW5kIHRoZSBlbWFpbHMuCisgICAgLS1bbm8tXXZhbGlkYXRlICAgICAgICAgICAgICAgICogUGVyZm9ybSBwYXRjaCBzYW5pdHkgY2hlY2tzLiBEZWZhdWx0IG9uLgorICAgIC0tW25vLV1mb3JtYXQtcGF0Y2ggICAgICAgICAgICAqIHVuZGVyc3RhbmQgYW55IG5vbiBvcHRpb25hbCBhcmd1bWVudHMgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZ2l0IGZvcm1hdC1wYXRjaGAgb25lcy4KKyAgICAtLWZvcmNlICAgICAgICAgICAgICAgICAgICAgICAgKiBTZW5kIGV2ZW4gaWYgc2FmZXR5IGNoZWNrcyB3b3VsZCBwcmV2ZW50IGl0LgorCitFT1QKKwlleGl0KDEpOworfQorCisjIG1vc3QgbWFpbCBzZXJ2ZXJzIGdlbmVyYXRlIHRoZSBEYXRlOiBoZWFkZXIsIGJ1dCBub3QgYWxsLi4uCitzdWIgZm9ybWF0XzI4MjJfdGltZSB7CisJbXkgKCR0aW1lKSA9IEBfOworCW15IEBsb2NhbHRtID0gbG9jYWx0aW1lKCR0aW1lKTsKKwlteSBAZ210dG0gPSBnbXRpbWUoJHRpbWUpOworCW15ICRsb2NhbG1pbiA9ICRsb2NhbHRtWzFdICsgJGxvY2FsdG1bMl0gKiA2MDsKKwlteSAkZ210bWluID0gJGdtdHRtWzFdICsgJGdtdHRtWzJdICogNjA7CisJaWYgKCRsb2NhbHRtWzBdICE9ICRnbXR0bVswXSkgeworCQlkaWUgImxvY2FsIHpvbmUgZGlmZmVycyBmcm9tIEdNVCBieSBhIG5vbi1taW51dGUgaW50ZXJ2YWxcbiI7CisJfQorCWlmICgoKCRnbXR0bVs2XSArIDEpICUgNykgPT0gJGxvY2FsdG1bNl0pIHsKKwkJJGxvY2FsbWluICs9IDE0NDA7CisJfSBlbHNpZiAoKCgkZ210dG1bNl0gLSAxKSAlIDcpID09ICRsb2NhbHRtWzZdKSB7CisJCSRsb2NhbG1pbiAtPSAxNDQwOworCX0gZWxzaWYgKCRnbXR0bVs2XSAhPSAkbG9jYWx0bVs2XSkgeworCQlkaWUgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIjsKKwl9CisJbXkgJG9mZnNldCA9ICRsb2NhbG1pbiAtICRnbXRtaW47CisJbXkgJG9mZmhvdXIgPSAkb2Zmc2V0IC8gNjA7CisJbXkgJG9mZm1pbiA9IGFicygkb2Zmc2V0ICUgNjApOworCWlmIChhYnMoJG9mZmhvdXIpID49IDI0KSB7CisJCWRpZSAoImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIik7CisJfQorCisJcmV0dXJuIHNwcmludGYoIiVzLCAlMmQgJXMgJWQgJTAyZDolMDJkOiUwMmQgJXMlMDJkJTAyZCIsCisJCSAgICAgICBxdyhTdW4gTW9uIFR1ZSBXZWQgVGh1IEZyaSBTYXQpWyRsb2NhbHRtWzZdXSwKKwkJICAgICAgICRsb2NhbHRtWzNdLAorCQkgICAgICAgcXcoSmFuIEZlYiBNYXIgQXByIE1heSBKdW4KKwkJCSAgSnVsIEF1ZyBTZXAgT2N0IE5vdiBEZWMpWyRsb2NhbHRtWzRdXSwKKwkJICAgICAgICRsb2NhbHRtWzVdKzE5MDAsCisJCSAgICAgICAkbG9jYWx0bVsyXSwKKwkJICAgICAgICRsb2NhbHRtWzFdLAorCQkgICAgICAgJGxvY2FsdG1bMF0sCisJCSAgICAgICAoJG9mZnNldCA+PSAwKSA/ICcrJyA6ICctJywKKwkJICAgICAgIGFicygkb2ZmaG91ciksCisJCSAgICAgICAkb2ZmbWluLAorCQkgICAgICAgKTsKK30KKworbXkgJGhhdmVfZW1haWxfdmFsaWQgPSBldmFsIHsgcmVxdWlyZSBFbWFpbDo6VmFsaWQ7IDEgfTsKK215ICRoYXZlX21haWxfYWRkcmVzcyA9IGV2YWwgeyByZXF1aXJlIE1haWw6OkFkZHJlc3M7IDEgfTsKK215ICRzbXRwOworbXkgJGF1dGg7CisKKyMgVmFyaWFibGVzIHdlIGZpbGwgaW4gYXV0b21hdGljYWxseSwgb3IgdmlhIHByb21wdGluZzoKK215IChAdG8sJG5vX3RvLEBpbml0aWFsX3RvLEBjYywkbm9fY2MsQGluaXRpYWxfY2MsQGJjY2xpc3QsJG5vX2JjYyxAeGgsCisJJGluaXRpYWxfcmVwbHlfdG8sJGluaXRpYWxfc3ViamVjdCxAZmlsZXMsCisJJGF1dGhvciwkc2VuZGVyLCRzbXRwX2F1dGhwYXNzLCRhbm5vdGF0ZSwkY29tcG9zZSwkdGltZSk7CisKK215ICRlbnZlbG9wZV9zZW5kZXI7CisKKyMgRXhhbXBsZSByZXBseSB0bzoKKyMkaW5pdGlhbF9yZXBseV90byA9ICcnOyAjPDIwMDUwMjAzMTczMjA4LkdBMjM5NjRAZm9vYmFyLmNvbT4nOworCitteSAkcmVwbyA9IGV2YWwgeyBHaXQtPnJlcG9zaXRvcnkoKSB9OworbXkgQHJlcG8gPSAkcmVwbyA/ICgkcmVwbykgOiAoKTsKK215ICR0ZXJtID0gZXZhbCB7CisJJEVOVnsiR0lUX1NFTkRfRU1BSUxfTk9UVFkifQorCQk/IG5ldyBUZXJtOjpSZWFkTGluZSAnZ2l0LXNlbmQtZW1haWwnLCBcKlNURElOLCBcKlNURE9VVAorCQk6IG5ldyBUZXJtOjpSZWFkTGluZSAnZ2l0LXNlbmQtZW1haWwnOworfTsKK2lmICgkQCkgeworCSR0ZXJtID0gbmV3IEZha2VUZXJtICIkQDogZ29pbmcgbm9uLWludGVyYWN0aXZlIjsKK30KKworIyBCZWhhdmlvciBtb2RpZmljYXRpb24gdmFyaWFibGVzCitteSAoJHF1aWV0LCAkZHJ5X3J1bikgPSAoMCwgMCk7CitteSAkZm9ybWF0X3BhdGNoOworbXkgJGNvbXBvc2VfZmlsZW5hbWU7CitteSAkZm9yY2UgPSAwOworCisjIEhhbmRsZSBpbnRlcmFjdGl2ZSBlZGl0aW9uIG9mIGZpbGVzLgorbXkgJG11bHRpZWRpdDsKK215ICRlZGl0b3I7CisKK3N1YiBkb19lZGl0IHsKKwlpZiAoIWRlZmluZWQoJGVkaXRvcikpIHsKKwkJJGVkaXRvciA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKCd2YXInLCAnR0lUX0VESVRPUicpOworCX0KKwlpZiAoZGVmaW5lZCgkbXVsdGllZGl0KSAmJiAhJG11bHRpZWRpdCkgeworCQltYXAgeworCQkJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgJF8pOworCQkJaWYgKCgkPyAmIDEyNykgfHwgKCQ/ID4+IDgpKSB7CisJCQkJZGllKCJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciKTsKKwkJCX0KKwkJfSBAXzsKKwl9IGVsc2UgeworCQlzeXN0ZW0oJ3NoJywgJy1jJywgJGVkaXRvci4nICIkQCInLCAkZWRpdG9yLCBAXyk7CisJCWlmICgoJD8gJiAxMjcpIHx8ICgkPyA+PiA4KSkgeworCQkJZGllKCJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciKTsKKwkJfQorCX0KK30KKworIyBWYXJpYWJsZXMgd2l0aCBjb3JyZXNwb25kaW5nIGNvbmZpZyBzZXR0aW5ncworbXkgKCR0aHJlYWQsICRjaGFpbl9yZXBseV90bywgJHN1cHByZXNzX2Zyb20sICRzaWduZWRfb2ZmX2J5X2NjKTsKK215ICgkdG9fY21kLCAkY2NfY21kKTsKK215ICgkc210cF9zZXJ2ZXIsICRzbXRwX3NlcnZlcl9wb3J0LCBAc210cF9zZXJ2ZXJfb3B0aW9ucyk7CitteSAoJHNtdHBfYXV0aHVzZXIsICRzbXRwX2VuY3J5cHRpb24pOworbXkgKCRpZGVudGl0eSwgJGFsaWFzZmlsZXR5cGUsIEBhbGlhc19maWxlcywgJHNtdHBfZG9tYWluKTsKK215ICgkdmFsaWRhdGUsICRjb25maXJtKTsKK215IChAc3VwcHJlc3NfY2MpOworbXkgKCRhdXRvXzhiaXRfZW5jb2RpbmcpOworCitteSAoJGRlYnVnX25ldF9zbXRwKSA9IDA7CQkjIE5ldDo6U01UUCwgc2VlIHNlbmRfbWVzc2FnZSgpCisKK215ICRub3Rfc2V0X2J5X3VzZXIgPSAidHJ1ZSBidXQgbm90IHNldCBieSB0aGUgdXNlciI7CisKK215ICVjb25maWdfYm9vbF9zZXR0aW5ncyA9ICgKKyAgICAidGhyZWFkIiA9PiBbXCR0aHJlYWQsIDFdLAorICAgICJjaGFpbnJlcGx5dG8iID0+IFtcJGNoYWluX3JlcGx5X3RvLCAkbm90X3NldF9ieV91c2VyXSwKKyAgICAic3VwcHJlc3Nmcm9tIiA9PiBbXCRzdXBwcmVzc19mcm9tLCB1bmRlZl0sCisgICAgInNpZ25lZG9mZmJ5Y2MiID0+IFtcJHNpZ25lZF9vZmZfYnlfY2MsIHVuZGVmXSwKKyAgICAic2lnbmVkb2ZmY2MiID0+IFtcJHNpZ25lZF9vZmZfYnlfY2MsIHVuZGVmXSwgICAgICAjIERlcHJlY2F0ZWQKKyAgICAidmFsaWRhdGUiID0+IFtcJHZhbGlkYXRlLCAxXSwKKyAgICAibXVsdGllZGl0IiA9PiBbXCRtdWx0aWVkaXQsIHVuZGVmXQorKTsKKworbXkgJWNvbmZpZ19zZXR0aW5ncyA9ICgKKyAgICAic210cHNlcnZlciIgPT4gXCRzbXRwX3NlcnZlciwKKyAgICAic210cHNlcnZlcnBvcnQiID0+IFwkc210cF9zZXJ2ZXJfcG9ydCwKKyAgICAic210cHNlcnZlcm9wdGlvbiIgPT4gXEBzbXRwX3NlcnZlcl9vcHRpb25zLAorICAgICJzbXRwdXNlciIgPT4gXCRzbXRwX2F1dGh1c2VyLAorICAgICJzbXRwcGFzcyIgPT4gXCRzbXRwX2F1dGhwYXNzLAorICAgICJzbXRwZG9tYWluIiA9PiBcJHNtdHBfZG9tYWluLAorICAgICJ0byIgPT4gXEBpbml0aWFsX3RvLAorICAgICJ0b2NtZCIgPT4gXCR0b19jbWQsCisgICAgImNjIiA9PiBcQGluaXRpYWxfY2MsCisgICAgImNjY21kIiA9PiBcJGNjX2NtZCwKKyAgICAiYWxpYXNmaWxldHlwZSIgPT4gXCRhbGlhc2ZpbGV0eXBlLAorICAgICJiY2MiID0+IFxAYmNjbGlzdCwKKyAgICAic3VwcHJlc3NjYyIgPT4gXEBzdXBwcmVzc19jYywKKyAgICAiZW52ZWxvcGVzZW5kZXIiID0+IFwkZW52ZWxvcGVfc2VuZGVyLAorICAgICJjb25maXJtIiAgID0+IFwkY29uZmlybSwKKyAgICAiZnJvbSIgPT4gXCRzZW5kZXIsCisgICAgImFzc3VtZThiaXRlbmNvZGluZyIgPT4gXCRhdXRvXzhiaXRfZW5jb2RpbmcsCispOworCitteSAlY29uZmlnX3BhdGhfc2V0dGluZ3MgPSAoCisgICAgImFsaWFzZXNmaWxlIiA9PiBcQGFsaWFzX2ZpbGVzLAorKTsKKworIyBIZWxwIHVzZXJzIHByZXBhcmUgZm9yIDEuNy4wCitzdWIgY2hhaW5fcmVwbHlfdG8geworCWlmIChkZWZpbmVkICRjaGFpbl9yZXBseV90byAmJgorCSAgICAkY2hhaW5fcmVwbHlfdG8gZXEgJG5vdF9zZXRfYnlfdXNlcikgeworCQlwcmludCBTVERFUlIKKwkJICAgICJJbiBnaXQgMS43LjAsIHRoZSBkZWZhdWx0IGhhcyBjaGFuZ2VkIHRvIC0tbm8tY2hhaW4tcmVwbHktdG9cbiIgLgorCQkgICAgIlNldCBzZW5kZW1haWwuY2hhaW5yZXBseXRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gdHJ1ZSBpZlxuIiAuCisJCSAgICAieW91IHdhbnQgdG8ga2VlcCAtLWNoYWluLXJlcGx5LXRvIGFzIHlvdXIgZGVmYXVsdC5cbiI7CisJCSRjaGFpbl9yZXBseV90byA9IDA7CisJfQorCXJldHVybiAkY2hhaW5fcmVwbHlfdG87Cit9CisKKyMgSGFuZGxlIFVuY291dGggVGVybWluYXRpb24KK3N1YiBzaWduYWxfaGFuZGxlciB7CisKKwkjIE1ha2UgdGV4dCBub3JtYWwKKwlwcmludCBjb2xvcigicmVzZXQiKSwgIlxuIjsKKworCSMgU01UUCBwYXNzd29yZCBtYXNrZWQKKwlzeXN0ZW0gInN0dHkgZWNobyI7CisKKwkjIHRtcCBmaWxlcyBmcm9tIC0tY29tcG9zZQorCWlmIChkZWZpbmVkICRjb21wb3NlX2ZpbGVuYW1lKSB7CisJCWlmICgtZSAkY29tcG9zZV9maWxlbmFtZSkgeworCQkJcHJpbnQgIickY29tcG9zZV9maWxlbmFtZScgY29udGFpbnMgYW4gaW50ZXJtZWRpYXRlIHZlcnNpb24gb2YgdGhlIGVtYWlsIHlvdSB3ZXJlIGNvbXBvc2luZy5cbiI7CisJCX0KKwkJaWYgKC1lICgkY29tcG9zZV9maWxlbmFtZSAuICIuZmluYWwiKSkgeworCQkJcHJpbnQgIickY29tcG9zZV9maWxlbmFtZS5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorCQl9CisJfQorCisJZXhpdDsKK307CisKKyRTSUd7VEVSTX0gPSBcJnNpZ25hbF9oYW5kbGVyOworJFNJR3tJTlR9ICA9IFwmc2lnbmFsX2hhbmRsZXI7CisKKyMgQmVnaW4gYnkgYWNjdW11bGF0aW5nIGFsbCB0aGUgdmFyaWFibGVzIChkZWZpbmVkIGFib3ZlKSwgdGhhdCB3ZSB3aWxsIGVuZCB1cAorIyBuZWVkaW5nLCBmaXJzdCwgZnJvbSB0aGUgY29tbWFuZCBsaW5lOgorCitteSAkaGVscDsKK215ICRyYyA9IEdldE9wdGlvbnMoImgiID0+IFwkaGVscCwKKwkJICAgICJzZW5kZXJ8ZnJvbT1zIiA9PiBcJHNlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgImluLXJlcGx5LXRvPXMiID0+IFwkaW5pdGlhbF9yZXBseV90bywKKwkJICAgICJzdWJqZWN0PXMiID0+IFwkaW5pdGlhbF9zdWJqZWN0LAorCQkgICAgInRvPXMiID0+IFxAaW5pdGlhbF90bywKKwkJICAgICJ0by1jbWQ9cyIgPT4gXCR0b19jbWQsCisJCSAgICAibm8tdG8iID0+IFwkbm9fdG8sCisJCSAgICAiY2M9cyIgPT4gXEBpbml0aWFsX2NjLAorCQkgICAgIm5vLWNjIiA9PiBcJG5vX2NjLAorCQkgICAgImJjYz1zIiA9PiBcQGJjY2xpc3QsCisJCSAgICAibm8tYmNjIiA9PiBcJG5vX2JjYywKKwkJICAgICJjaGFpbi1yZXBseS10byEiID0+IFwkY2hhaW5fcmVwbHlfdG8sCisJCSAgICAic210cC1zZXJ2ZXI9cyIgPT4gXCRzbXRwX3NlcnZlciwKKwkJICAgICJzbXRwLXNlcnZlci1vcHRpb249cyIgPT4gXEBzbXRwX3NlcnZlcl9vcHRpb25zLAorCQkgICAgInNtdHAtc2VydmVyLXBvcnQ9cyIgPT4gXCRzbXRwX3NlcnZlcl9wb3J0LAorCQkgICAgInNtdHAtdXNlcj1zIiA9PiBcJHNtdHBfYXV0aHVzZXIsCisJCSAgICAic210cC1wYXNzOnMiID0+IFwkc210cF9hdXRocGFzcywKKwkJICAgICJzbXRwLXNzbCIgPT4gc3ViIHsgJHNtdHBfZW5jcnlwdGlvbiA9ICdzc2wnIH0sCisJCSAgICAic210cC1lbmNyeXB0aW9uPXMiID0+IFwkc210cF9lbmNyeXB0aW9uLAorCQkgICAgInNtdHAtZGVidWc6aSIgPT4gXCRkZWJ1Z19uZXRfc210cCwKKwkJICAgICJzbXRwLWRvbWFpbjpzIiA9PiBcJHNtdHBfZG9tYWluLAorCQkgICAgImlkZW50aXR5PXMiID0+IFwkaWRlbnRpdHksCisJCSAgICAiYW5ub3RhdGUiID0+IFwkYW5ub3RhdGUsCisJCSAgICAiY29tcG9zZSIgPT4gXCRjb21wb3NlLAorCQkgICAgInF1aWV0IiA9PiBcJHF1aWV0LAorCQkgICAgImNjLWNtZD1zIiA9PiBcJGNjX2NtZCwKKwkJICAgICJzdXBwcmVzcy1mcm9tISIgPT4gXCRzdXBwcmVzc19mcm9tLAorCQkgICAgInN1cHByZXNzLWNjPXMiID0+IFxAc3VwcHJlc3NfY2MsCisJCSAgICAic2lnbmVkLW9mZi1jY3xzaWduZWQtb2ZmLWJ5LWNjISIgPT4gXCRzaWduZWRfb2ZmX2J5X2NjLAorCQkgICAgImNvbmZpcm09cyIgPT4gXCRjb25maXJtLAorCQkgICAgImRyeS1ydW4iID0+IFwkZHJ5X3J1biwKKwkJICAgICJlbnZlbG9wZS1zZW5kZXI9cyIgPT4gXCRlbnZlbG9wZV9zZW5kZXIsCisJCSAgICAidGhyZWFkISIgPT4gXCR0aHJlYWQsCisJCSAgICAidmFsaWRhdGUhIiA9PiBcJHZhbGlkYXRlLAorCQkgICAgImZvcm1hdC1wYXRjaCEiID0+IFwkZm9ybWF0X3BhdGNoLAorCQkgICAgIjhiaXQtZW5jb2Rpbmc9cyIgPT4gXCRhdXRvXzhiaXRfZW5jb2RpbmcsCisJCSAgICAiZm9yY2UiID0+IFwkZm9yY2UsCisJICk7CisKK3VzYWdlKCkgaWYgJGhlbHA7Cit1bmxlc3MgKCRyYykgeworICAgIHVzYWdlKCk7Cit9CisKK2RpZSAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKKwlpZiAkZm9ybWF0X3BhdGNoIGFuZCBub3QgJHJlcG87CisKKyMgTm93LCBsZXQncyBmaWxsIGFueSB0aGF0IGFyZW4ndCBzZXQgaW4gd2l0aCBkZWZhdWx0czoKKworc3ViIHJlYWRfY29uZmlnIHsKKwlteSAoJHByZWZpeCkgPSBAXzsKKworCWZvcmVhY2ggbXkgJHNldHRpbmcgKGtleXMgJWNvbmZpZ19ib29sX3NldHRpbmdzKSB7CisJCW15ICR0YXJnZXQgPSAkY29uZmlnX2Jvb2xfc2V0dGluZ3N7JHNldHRpbmd9LT5bMF07CisJCSQkdGFyZ2V0ID0gR2l0Ojpjb25maWdfYm9vbChAcmVwbywgIiRwcmVmaXguJHNldHRpbmciKSB1bmxlc3MgKGRlZmluZWQgJCR0YXJnZXQpOworCX0KKworCWZvcmVhY2ggbXkgJHNldHRpbmcgKGtleXMgJWNvbmZpZ19wYXRoX3NldHRpbmdzKSB7CisJCW15ICR0YXJnZXQgPSAkY29uZmlnX3BhdGhfc2V0dGluZ3N7JHNldHRpbmd9OworCQlpZiAocmVmKCR0YXJnZXQpIGVxICJBUlJBWSIpIHsKKwkJCXVubGVzcyAoQCR0YXJnZXQpIHsKKwkJCQlteSBAdmFsdWVzID0gR2l0Ojpjb25maWdfcGF0aChAcmVwbywgIiRwcmVmaXguJHNldHRpbmciKTsKKwkJCQlAJHRhcmdldCA9IEB2YWx1ZXMgaWYgKEB2YWx1ZXMgJiYgZGVmaW5lZCAkdmFsdWVzWzBdKTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCSQkdGFyZ2V0ID0gR2l0Ojpjb25maWdfcGF0aChAcmVwbywgIiRwcmVmaXguJHNldHRpbmciKSB1bmxlc3MgKGRlZmluZWQgJCR0YXJnZXQpOworCQl9CisJfQorCisJZm9yZWFjaCBteSAkc2V0dGluZyAoa2V5cyAlY29uZmlnX3NldHRpbmdzKSB7CisJCW15ICR0YXJnZXQgPSAkY29uZmlnX3NldHRpbmdzeyRzZXR0aW5nfTsKKwkJbmV4dCBpZiAkc2V0dGluZyBlcSAidG8iIGFuZCBkZWZpbmVkICRub190bzsKKwkJbmV4dCBpZiAkc2V0dGluZyBlcSAiY2MiIGFuZCBkZWZpbmVkICRub19jYzsKKwkJbmV4dCBpZiAkc2V0dGluZyBlcSAiYmNjIiBhbmQgZGVmaW5lZCAkbm9fYmNjOworCQlpZiAocmVmKCR0YXJnZXQpIGVxICJBUlJBWSIpIHsKKwkJCXVubGVzcyAoQCR0YXJnZXQpIHsKKwkJCQlteSBAdmFsdWVzID0gR2l0Ojpjb25maWcoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIik7CisJCQkJQCR0YXJnZXQgPSBAdmFsdWVzIGlmIChAdmFsdWVzICYmIGRlZmluZWQgJHZhbHVlc1swXSk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkkJHRhcmdldCA9IEdpdDo6Y29uZmlnKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpIHVubGVzcyAoZGVmaW5lZCAkJHRhcmdldCk7CisJCX0KKwl9CisKKwlpZiAoIWRlZmluZWQgJHNtdHBfZW5jcnlwdGlvbikgeworCQlteSAkZW5jID0gR2l0Ojpjb25maWcoQHJlcG8sICIkcHJlZml4LnNtdHBlbmNyeXB0aW9uIik7CisJCWlmIChkZWZpbmVkICRlbmMpIHsKKwkJCSRzbXRwX2VuY3J5cHRpb24gPSAkZW5jOworCQl9IGVsc2lmIChHaXQ6OmNvbmZpZ19ib29sKEByZXBvLCAiJHByZWZpeC5zbXRwc3NsIikpIHsKKwkJCSRzbXRwX2VuY3J5cHRpb24gPSAnc3NsJzsKKwkJfQorCX0KK30KKworIyByZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBbc2VuZGVtYWlsICIkaWRlbnRpdHkiXSwgZmFsbCBiYWNrIG9uIFtzZW5kZW1haWxdCiskaWRlbnRpdHkgPSBHaXQ6OmNvbmZpZyhAcmVwbywgInNlbmRlbWFpbC5pZGVudGl0eSIpIHVubGVzcyAoZGVmaW5lZCAkaWRlbnRpdHkpOworcmVhZF9jb25maWcoInNlbmRlbWFpbC4kaWRlbnRpdHkiKSBpZiAoZGVmaW5lZCAkaWRlbnRpdHkpOworcmVhZF9jb25maWcoInNlbmRlbWFpbCIpOworCisjIGZhbGwgYmFjayBvbiBidWlsdGluIGJvb2wgZGVmYXVsdHMKK2ZvcmVhY2ggbXkgJHNldHRpbmcgKHZhbHVlcyAlY29uZmlnX2Jvb2xfc2V0dGluZ3MpIHsKKwkkeyRzZXR0aW5nLT5bMF19ID0gJHNldHRpbmctPlsxXSB1bmxlc3MgKGRlZmluZWQgKCR7JHNldHRpbmctPlswXX0pKTsKK30KKworIyAnZGVmYXVsdCcgZW5jcnlwdGlvbiBpcyBub25lIC0tIHRoaXMgb25seSBwcmV2ZW50cyBhIHdhcm5pbmcKKyRzbXRwX2VuY3J5cHRpb24gPSAnJyB1bmxlc3MgKGRlZmluZWQgJHNtdHBfZW5jcnlwdGlvbik7CisKKyMgU2V0IENDIHN1cHByZXNzaW9ucworbXkoJXN1cHByZXNzX2NjKTsKK2lmIChAc3VwcHJlc3NfY2MpIHsKKwlmb3JlYWNoIG15ICRlbnRyeSAoQHN1cHByZXNzX2NjKSB7CisJCWRpZSAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJGVudHJ5J1xuIgorCQkJdW5sZXNzICRlbnRyeSA9fiAvXig/OmFsbHxjY2NtZHxjY3xhdXRob3J8c2VsZnxzb2J8Ym9keXxib2R5Y2MpJC87CisJCSRzdXBwcmVzc19jY3skZW50cnl9ID0gMTsKKwl9Cit9CisKK2lmICgkc3VwcHJlc3NfY2N7J2FsbCd9KSB7CisJZm9yZWFjaCBteSAkZW50cnkgKHF3IChjY2NtZCBjYyBhdXRob3Igc2VsZiBzb2IgYm9keSBib2R5Y2MpKSB7CisJCSRzdXBwcmVzc19jY3skZW50cnl9ID0gMTsKKwl9CisJZGVsZXRlICRzdXBwcmVzc19jY3snYWxsJ307Cit9CisKKyMgSWYgZXhwbGljaXQgb2xkLXN0eWxlIG9uZXMgYXJlIHNwZWNpZmllZCwgdGhleSB0cnVtcCAtLXN1cHByZXNzLWNjLgorJHN1cHByZXNzX2NjeydzZWxmJ30gPSAkc3VwcHJlc3NfZnJvbSBpZiBkZWZpbmVkICRzdXBwcmVzc19mcm9tOworJHN1cHByZXNzX2Njeydzb2InfSA9ICEkc2lnbmVkX29mZl9ieV9jYyBpZiBkZWZpbmVkICRzaWduZWRfb2ZmX2J5X2NjOworCitpZiAoJHN1cHByZXNzX2Njeydib2R5J30pIHsKKwlmb3JlYWNoIG15ICRlbnRyeSAocXcgKHNvYiBib2R5Y2MpKSB7CisJCSRzdXBwcmVzc19jY3skZW50cnl9ID0gMTsKKwl9CisJZGVsZXRlICRzdXBwcmVzc19jY3snYm9keSd9OworfQorCisjIFNldCBjb25maXJtJ3MgZGVmYXVsdCB2YWx1ZQorbXkgJGNvbmZpcm1fdW5jb25maWd1cmVkID0gIWRlZmluZWQgJGNvbmZpcm07CitpZiAoJGNvbmZpcm1fdW5jb25maWd1cmVkKSB7CisJJGNvbmZpcm0gPSBzY2FsYXIgJXN1cHByZXNzX2NjID8gJ2NvbXBvc2UnIDogJ2F1dG8nOworfTsKK2RpZSAiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyRjb25maXJtJ1xuIgorCXVubGVzcyAkY29uZmlybSA9fiAvXig/OmF1dG98Y2N8Y29tcG9zZXxhbHdheXN8bmV2ZXIpLzsKKworIyBEZWJ1Z2dpbmcsIHByaW50IG91dCB0aGUgc3VwcHJlc3Npb25zLgoraWYgKDApIHsKKwlwcmludCAic3VwcHJlc3Npb25zOlxuIjsKKwlmb3JlYWNoIG15ICRlbnRyeSAoa2V5cyAlc3VwcHJlc3NfY2MpIHsKKwkJcHJpbnRmICIgICUtNXMgLT4gJHN1cHByZXNzX2NjeyRlbnRyeX1cbiIsICRlbnRyeTsKKwl9Cit9CisKK215ICgkcmVwb2F1dGhvciwgJHJlcG9jb21taXR0ZXIpOworKCRyZXBvYXV0aG9yKSA9IEdpdDo6aWRlbnRfcGVyc29uKEByZXBvLCAnYXV0aG9yJyk7CisoJHJlcG9jb21taXR0ZXIpID0gR2l0OjppZGVudF9wZXJzb24oQHJlcG8sICdjb21taXR0ZXInKTsKKworIyBWZXJpZnkgdGhlIHVzZXIgaW5wdXQKKworZm9yZWFjaCBteSAkZW50cnkgKEBpbml0aWFsX3RvKSB7CisJZGllICJDb21tYSBpbiAtLXRvIGVudHJ5OiAkZW50cnknXG4iIHVubGVzcyAkZW50cnkgIX4gbS8sLzsKK30KKworZm9yZWFjaCBteSAkZW50cnkgKEBpbml0aWFsX2NjKSB7CisJZGllICJDb21tYSBpbiAtLWNjIGVudHJ5OiAkZW50cnknXG4iIHVubGVzcyAkZW50cnkgIX4gbS8sLzsKK30KKworZm9yZWFjaCBteSAkZW50cnkgKEBiY2NsaXN0KSB7CisJZGllICJDb21tYSBpbiAtLWJjY2xpc3QgZW50cnk6ICRlbnRyeSdcbiIgdW5sZXNzICRlbnRyeSAhfiBtLywvOworfQorCitzdWIgcGFyc2VfYWRkcmVzc19saW5lIHsKKwlpZiAoJGhhdmVfbWFpbF9hZGRyZXNzKSB7CisJCXJldHVybiBtYXAgeyAkXy0+Zm9ybWF0IH0gTWFpbDo6QWRkcmVzcy0+cGFyc2UoJF9bMF0pOworCX0gZWxzZSB7CisJCXJldHVybiBzcGxpdF9hZGRycygkX1swXSk7CisJfQorfQorCitzdWIgc3BsaXRfYWRkcnMgeworCXJldHVybiBxdW90ZXdvcmRzKCdccyosXHMqJywgMSwgQF8pOworfQorCitteSAlYWxpYXNlczsKK215ICVwYXJzZV9hbGlhcyA9ICgKKwkjIG11bHRpbGluZSBmb3JtYXRzIGNhbiBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZQorCW11dHQgPT4gc3ViIHsgbXkgJGZoID0gc2hpZnQ7IHdoaWxlICg8JGZoPikgeworCQlpZiAoL15ccyphbGlhc1xzKyg/Oi1ncm91cFxzK1xTK1xzKykqKFxTKylccysoLiopJC8pIHsKKwkJCW15ICgkYWxpYXMsICRhZGRyKSA9ICgkMSwgJDIpOworCQkJJGFkZHIgPX4gcy8jLiokLy87ICMgbXV0dCBhbGxvd3MgIyBjb21tZW50cworCQkJICMgY29tbWFzIGRlbGltaXQgbXVsdGlwbGUgYWRkcmVzc2VzCisJCQkkYWxpYXNlc3skYWxpYXN9ID0gWyBzcGxpdF9hZGRycygkYWRkcikgXTsKKwkJfX19LAorCW1haWxyYyA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgd2hpbGUgKDwkZmg+KSB7CisJCWlmICgvXmFsaWFzXHMrKFxTKylccysoLiopJC8pIHsKKwkJCSMgc3BhY2VzIGRlbGltaXQgbXVsdGlwbGUgYWRkcmVzc2VzCisJCQkkYWxpYXNlc3skMX0gPSBbIHF1b3Rld29yZHMoJ1xzKycsIDAsICQyKSBdOworCQl9fX0sCisJcGluZSA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgbXkgJGY9J1x0W15cdF0qJzsKKwkgICAgICAgIGZvciAobXkgJHggPSAnJzsgZGVmaW5lZCgkeCk7ICR4ID0gJF8pIHsKKwkJCWNob21wICR4OworCQkgICAgICAgICR4IC49ICQxIHdoaWxlKGRlZmluZWQoJF8gPSA8JGZoPikgJiYgL14gKyguKikkLyk7CisJCQkkeCA9fiAvXihcUyspJGZcdFwoPyhbXlx0XSs/KVwpPyg6PyRmKXswLDJ9JC8gb3IgbmV4dDsKKwkJCSRhbGlhc2VzeyQxfSA9IFsgc3BsaXRfYWRkcnMoJDIpIF07CisJCX19LAorCWVsbSA9PiBzdWIgIHsgbXkgJGZoID0gc2hpZnQ7CisJCSAgICAgIHdoaWxlICg8JGZoPikgeworCQkJICBpZiAoL14oXFMrKVxzKz1ccytbXj1dKz1ccyhcUyspLykgeworCQkJICAgICAgbXkgKCRhbGlhcywgJGFkZHIpID0gKCQxLCAkMik7CisJCQkgICAgICAgJGFsaWFzZXN7JGFsaWFzfSA9IFsgc3BsaXRfYWRkcnMoJGFkZHIpIF07CisJCQkgIH0KKwkJICAgICAgfSB9LAorCisJZ251cyA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgd2hpbGUgKDwkZmg+KSB7CisJCWlmICgvXChkZWZpbmUtbWFpbC1hbGlhc1xzKyIoXFMrPykiXHMrIihcUys/KSJcKS8pIHsKKwkJCSRhbGlhc2VzeyQxfSA9IFsgJDIgXTsKKwkJfX19CispOworCitpZiAoQGFsaWFzX2ZpbGVzIGFuZCAkYWxpYXNmaWxldHlwZSBhbmQgZGVmaW5lZCAkcGFyc2VfYWxpYXN7JGFsaWFzZmlsZXR5cGV9KSB7CisJZm9yZWFjaCBteSAkZmlsZSAoQGFsaWFzX2ZpbGVzKSB7CisJCW9wZW4gbXkgJGZoLCAnPCcsICRmaWxlIG9yIGRpZSAib3BlbmluZyAkZmlsZTogJCFcbiI7CisJCSRwYXJzZV9hbGlhc3skYWxpYXNmaWxldHlwZX0tPigkZmgpOworCQljbG9zZSAkZmg7CisJfQorfQorCisoJHNlbmRlcikgPSBleHBhbmRfYWxpYXNlcygkc2VuZGVyKSBpZiBkZWZpbmVkICRzZW5kZXI7CisKKyMgcmV0dXJucyAxIGlmIHRoZSBjb25mbGljdCBtdXN0IGJlIHNvbHZlZCB1c2luZyBpdCBhcyBhIGZvcm1hdC1wYXRjaCBhcmd1bWVudAorc3ViIGNoZWNrX2ZpbGVfcmV2X2NvbmZsaWN0KCQpIHsKKwlyZXR1cm4gdW5sZXNzICRyZXBvOworCW15ICRmID0gc2hpZnQ7CisJdHJ5IHsKKwkJJHJlcG8tPmNvbW1hbmQoJ3Jldi1wYXJzZScsICctLXZlcmlmeScsICctLXF1aWV0JywgJGYpOworCQlpZiAoZGVmaW5lZCgkZm9ybWF0X3BhdGNoKSkgeworCQkJcmV0dXJuICRmb3JtYXRfcGF0Y2g7CisJCX0KKwkJZGllKDw8RU9GKTsKK0ZpbGUgJyRmJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHMKK3RvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uCisKKyAgICAqIFNheWluZyAiLi8kZiIgaWYgeW91IG1lYW4gYSBmaWxlOyBvcgorICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLgorRU9GCisJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggeworCQlyZXR1cm4gMDsKKwl9Cit9CisKKyMgTm93IHRoYXQgYWxsIHRoZSBkZWZhdWx0cyBhcmUgc2V0LCBwcm9jZXNzIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUKKyMgYXJndW1lbnRzIGFuZCBjb2xsZWN0IHVwIHRoZSBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgcHJvY2Vzc2VkLgorbXkgQHJldl9saXN0X29wdHM7Cit3aGlsZSAoZGVmaW5lZChteSAkZiA9IHNoaWZ0IEBBUkdWKSkgeworCWlmICgkZiBlcSAiLS0iKSB7CisJCXB1c2ggQHJldl9saXN0X29wdHMsICItLSIsIEBBUkdWOworCQlAQVJHViA9ICgpOworCX0gZWxzaWYgKC1kICRmIGFuZCAhY2hlY2tfZmlsZV9yZXZfY29uZmxpY3QoJGYpKSB7CisJCW9wZW5kaXIgbXkgJGRoLCAkZgorCQkJb3IgZGllICJGYWlsZWQgdG8gb3BlbmRpciAkZjogJCEiOworCisJCXB1c2ggQGZpbGVzLCBncmVwIHsgLWYgJF8gfSBtYXAgeyBjYXRmaWxlKCRmLCAkXykgfQorCQkJCXNvcnQgcmVhZGRpciAkZGg7CisJCWNsb3NlZGlyICRkaDsKKwl9IGVsc2lmICgoLWYgJGYgb3IgLXAgJGYpIGFuZCAhY2hlY2tfZmlsZV9yZXZfY29uZmxpY3QoJGYpKSB7CisJCXB1c2ggQGZpbGVzLCAkZjsKKwl9IGVsc2UgeworCQlwdXNoIEByZXZfbGlzdF9vcHRzLCAkZjsKKwl9Cit9CisKK2lmIChAcmV2X2xpc3Rfb3B0cykgeworCWRpZSAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKKwkJdW5sZXNzICRyZXBvOworCXB1c2ggQGZpbGVzLCAkcmVwby0+Y29tbWFuZCgnZm9ybWF0LXBhdGNoJywgJy1vJywgdGVtcGRpcihDTEVBTlVQID0+IDEpLCBAcmV2X2xpc3Rfb3B0cyk7Cit9CisKK2lmICgkdmFsaWRhdGUpIHsKKwlmb3JlYWNoIG15ICRmIChAZmlsZXMpIHsKKwkJdW5sZXNzICgtcCAkZikgeworCQkJbXkgJGVycm9yID0gdmFsaWRhdGVfcGF0Y2goJGYpOworCQkJJGVycm9yIGFuZCBkaWUgImZhdGFsOiAkZjogJGVycm9yXG53YXJuaW5nOiBubyBwYXRjaGVzIHdlcmUgc2VudFxuIjsKKwkJfQorCX0KK30KKworaWYgKEBmaWxlcykgeworCXVubGVzcyAoJHF1aWV0KSB7CisJCXByaW50ICRfLCJcbiIgZm9yIChAZmlsZXMpOworCX0KK30gZWxzZSB7CisJcHJpbnQgU1RERVJSICJcbk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcblxuIjsKKwl1c2FnZSgpOworfQorCitzdWIgZ2V0X3BhdGNoX3N1YmplY3QgeworCW15ICRmbiA9IHNoaWZ0OworCW9wZW4gKG15ICRmaCwgJzwnLCAkZm4pOworCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCW5leHQgdW5sZXNzICgkbGluZSA9fiAvXlN1YmplY3Q6ICguKikkLyk7CisJCWNsb3NlICRmaDsKKwkJcmV0dXJuICJHSVQ6ICQxXG4iOworCX0KKwljbG9zZSAkZmg7CisJZGllICJObyBzdWJqZWN0IGxpbmUgaW4gJGZuID8iOworfQorCitpZiAoJGNvbXBvc2UpIHsKKwkjIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG5lZWQgdG8gYmUgc2VjdXJlLCBidXQgd2Ugd2lsbCBtYWtlIGEgc21hbGwKKwkjIGVmZm9ydCB0byBoYXZlIGl0IGJlIHVuaXF1ZQorCSRjb21wb3NlX2ZpbGVuYW1lID0gKCRyZXBvID8KKwkJdGVtcGZpbGUoIi5naXRzZW5kZW1haWwubXNnLlhYWFhYWCIsIERJUiA9PiAkcmVwby0+cmVwb19wYXRoKCkpIDoKKwkJdGVtcGZpbGUoIi5naXRzZW5kZW1haWwubXNnLlhYWFhYWCIsIERJUiA9PiAiLiIpKVsxXTsKKwlvcGVuIG15ICRjLCAiPiIsICRjb21wb3NlX2ZpbGVuYW1lCisJCW9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJGNvbXBvc2VfZmlsZW5hbWU6ICQhIjsKKworCisJbXkgJHRwbF9zZW5kZXIgPSAkc2VuZGVyIHx8ICRyZXBvYXV0aG9yIHx8ICRyZXBvY29tbWl0dGVyIHx8ICcnOworCW15ICR0cGxfc3ViamVjdCA9ICRpbml0aWFsX3N1YmplY3QgfHwgJyc7CisJbXkgJHRwbF9yZXBseV90byA9ICRpbml0aWFsX3JlcGx5X3RvIHx8ICcnOworCisJcHJpbnQgJGMgPDxFT1Q7CitGcm9tICR0cGxfc2VuZGVyICMgVGhpcyBsaW5lIGlzIGlnbm9yZWQuCitHSVQ6IExpbmVzIGJlZ2lubmluZyBpbiAiR0lUOiIgd2lsbCBiZSByZW1vdmVkLgorR0lUOiBDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50cworR0lUOiBmb3IgdGhlIHBhdGNoIHlvdSBhcmUgd3JpdGluZy4KK0dJVDoKK0dJVDogQ2xlYXIgdGhlIGJvZHkgY29udGVudCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzZW5kIGEgc3VtbWFyeS4KK0Zyb206ICR0cGxfc2VuZGVyCitTdWJqZWN0OiAkdHBsX3N1YmplY3QKK0luLVJlcGx5LVRvOiAkdHBsX3JlcGx5X3RvCisKK0VPVAorCWZvciBteSAkZiAoQGZpbGVzKSB7CisJCXByaW50ICRjIGdldF9wYXRjaF9zdWJqZWN0KCRmKTsKKwl9CisJY2xvc2UgJGM7CisKKwlpZiAoJGFubm90YXRlKSB7CisJCWRvX2VkaXQoJGNvbXBvc2VfZmlsZW5hbWUsIEBmaWxlcyk7CisJfSBlbHNlIHsKKwkJZG9fZWRpdCgkY29tcG9zZV9maWxlbmFtZSk7CisJfQorCisJb3BlbiBteSAkYzIsICI+IiwgJGNvbXBvc2VfZmlsZW5hbWUgLiAiLmZpbmFsIgorCQlvciBkaWUgIkZhaWxlZCB0byBvcGVuICRjb21wb3NlX2ZpbGVuYW1lLmZpbmFsIDogIiAuICQhOworCisJb3BlbiAkYywgIjwiLCAkY29tcG9zZV9maWxlbmFtZQorCQlvciBkaWUgIkZhaWxlZCB0byBvcGVuICRjb21wb3NlX2ZpbGVuYW1lIDogIiAuICQhOworCisJbXkgJG5lZWRfOGJpdF9jdGUgPSBmaWxlX2hhc19ub25hc2NpaSgkY29tcG9zZV9maWxlbmFtZSk7CisJbXkgJGluX2JvZHkgPSAwOworCW15ICRzdW1tYXJ5X2VtcHR5ID0gMTsKKwl3aGlsZSg8JGM+KSB7CisJCW5leHQgaWYgbS9eR0lUOi87CisJCWlmICgkaW5fYm9keSkgeworCQkJJHN1bW1hcnlfZW1wdHkgPSAwIHVubGVzcyAoL15cbiQvKTsKKwkJfSBlbHNpZiAoL15cbiQvKSB7CisJCQkkaW5fYm9keSA9IDE7CisJCQlpZiAoJG5lZWRfOGJpdF9jdGUpIHsKKwkJCQlwcmludCAkYzIgIk1JTUUtVmVyc2lvbjogMS4wXG4iLAorCQkJCQkgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgIiwKKwkJCQkJICAgImNoYXJzZXQ9VVRGLThcbiIsCisJCQkJCSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIjsKKwkJCX0KKwkJfSBlbHNpZiAoL15NSU1FLVZlcnNpb246L2kpIHsKKwkJCSRuZWVkXzhiaXRfY3RlID0gMDsKKwkJfSBlbHNpZiAoL15TdWJqZWN0OlxzKiguKylccyokL2kpIHsKKwkJCSRpbml0aWFsX3N1YmplY3QgPSAkMTsKKwkJCW15ICRzdWJqZWN0ID0gJGluaXRpYWxfc3ViamVjdDsKKwkJCSRfID0gIlN1YmplY3Q6ICIgLgorCQkJCSgkc3ViamVjdCA9fiAvW15bOmFzY2lpOl1dLyA/CisJCQkJIHF1b3RlX3JmYzIwNDcoJHN1YmplY3QpIDoKKwkJCQkgJHN1YmplY3QpIC4KKwkJCQkiXG4iOworCQl9IGVsc2lmICgvXkluLVJlcGx5LVRvOlxzKiguKylccyokL2kpIHsKKwkJCSRpbml0aWFsX3JlcGx5X3RvID0gJDE7CisJCQluZXh0OworCQl9IGVsc2lmICgvXkZyb206XHMqKC4rKVxzKiQvaSkgeworCQkJJHNlbmRlciA9ICQxOworCQkJbmV4dDsKKwkJfSBlbHNpZiAoL14oPzpUb3xDY3xCY2MpOi9pKSB7CisJCQlwcmludCAiVG8vQ2MvQmNjIGZpZWxkcyBhcmUgbm90IGludGVycHJldGVkIHlldCwgdGhleSBoYXZlIGJlZW4gaWdub3JlZFxuIjsKKwkJCW5leHQ7CisJCX0KKwkJcHJpbnQgJGMyICRfOworCX0KKwljbG9zZSAkYzsKKwljbG9zZSAkYzI7CisKKwlpZiAoJHN1bW1hcnlfZW1wdHkpIHsKKwkJcHJpbnQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iOworCQkkY29tcG9zZSA9IC0xOworCX0KK30gZWxzaWYgKCRhbm5vdGF0ZSkgeworCWRvX2VkaXQoQGZpbGVzKTsKK30KKworc3ViIGFzayB7CisJbXkgKCRwcm9tcHQsICVhcmcpID0gQF87CisJbXkgJHZhbGlkX3JlID0gJGFyZ3t2YWxpZF9yZX07CisJbXkgJGRlZmF1bHQgPSAkYXJne2RlZmF1bHR9OworCW15ICRjb25maXJtX29ubHkgPSAkYXJne2NvbmZpcm1fb25seX07CisJbXkgJHJlc3A7CisJbXkgJGkgPSAwOworCXJldHVybiBkZWZpbmVkICRkZWZhdWx0ID8gJGRlZmF1bHQgOiB1bmRlZgorCQl1bmxlc3MgZGVmaW5lZCAkdGVybS0+SU4gYW5kIGRlZmluZWQgZmlsZW5vKCR0ZXJtLT5JTikgYW5kCisJCSAgICAgICBkZWZpbmVkICR0ZXJtLT5PVVQgYW5kIGRlZmluZWQgZmlsZW5vKCR0ZXJtLT5PVVQpOworCXdoaWxlICgkaSsrIDwgMTApIHsKKwkJJHJlc3AgPSAkdGVybS0+cmVhZGxpbmUoJHByb21wdCk7CisJCWlmICghZGVmaW5lZCAkcmVzcCkgeyAjIEVPRgorCQkJcHJpbnQgIlxuIjsKKwkJCXJldHVybiBkZWZpbmVkICRkZWZhdWx0ID8gJGRlZmF1bHQgOiB1bmRlZjsKKwkJfQorCQlpZiAoJHJlc3AgZXEgJycgYW5kIGRlZmluZWQgJGRlZmF1bHQpIHsKKwkJCXJldHVybiAkZGVmYXVsdDsKKwkJfQorCQlpZiAoIWRlZmluZWQgJHZhbGlkX3JlIG9yICRyZXNwID1+IC8kdmFsaWRfcmUvKSB7CisJCQlyZXR1cm4gJHJlc3A7CisJCX0KKwkJaWYgKCRjb25maXJtX29ubHkpIHsKKwkJCW15ICR5ZXNubyA9ICR0ZXJtLT5yZWFkbGluZSgiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVzZSA8JHJlc3A+IFt5L05dPyAiKTsKKwkJCWlmIChkZWZpbmVkICR5ZXNubyAmJiAkeWVzbm8gPX4gL3kvaSkgeworCQkJCXJldHVybiAkcmVzcDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gdW5kZWY7Cit9CisKK215ICVicm9rZW5fZW5jb2Rpbmc7CisKK3N1YiBmaWxlX2RlY2xhcmVzXzhiaXRfY3RlIHsKKwlteSAkZm4gPSBzaGlmdDsKKwlvcGVuIChteSAkZmgsICc8JywgJGZuKTsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQlsYXN0IGlmICgkbGluZSA9fiAvXiQvKTsKKwkJcmV0dXJuIDEgaWYgKCRsaW5lID1+IC9eQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogLio4Yml0LiokLyk7CisJfQorCWNsb3NlICRmaDsKKwlyZXR1cm4gMDsKK30KKworZm9yZWFjaCBteSAkZiAoQGZpbGVzKSB7CisJbmV4dCB1bmxlc3MgKGJvZHlfb3Jfc3ViamVjdF9oYXNfbm9uYXNjaWkoJGYpCisJCSAgICAgJiYgIWZpbGVfZGVjbGFyZXNfOGJpdF9jdGUoJGYpKTsKKwkkYnJva2VuX2VuY29kaW5neyRmfSA9IDE7Cit9CisKK2lmICghZGVmaW5lZCAkYXV0b184Yml0X2VuY29kaW5nICYmIHNjYWxhciAlYnJva2VuX2VuY29kaW5nKSB7CisJcHJpbnQgIlRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIDhiaXQsIGJ1dCBkbyBub3QgZGVjbGFyZSAiIC4KKwkJImEgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZy5cbiI7CisJZm9yZWFjaCBteSAkZiAoc29ydCBrZXlzICVicm9rZW5fZW5jb2RpbmcpIHsKKwkJcHJpbnQgIiAgICAkZlxuIjsKKwl9CisJJGF1dG9fOGJpdF9lbmNvZGluZyA9IGFzaygiV2hpY2ggOGJpdCBlbmNvZGluZyBzaG91bGQgSSBkZWNsYXJlIFtVVEYtOF0/ICIsCisJCQkJICBkZWZhdWx0ID0+ICJVVEYtOCIpOworfQorCitpZiAoISRmb3JjZSkgeworCWZvciBteSAkZiAoQGZpbGVzKSB7CisJCWlmIChnZXRfcGF0Y2hfc3ViamVjdCgkZikgPX4gL1xRKioqIFNVQkpFQ1QgSEVSRSAqKipcRS8pIHsKKwkJCWRpZSAiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuXHQkZlxuIgorCQkJCS4gImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiAiCisJCQkJLiAiUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgd2FudCB0byBzZW5kLlxuIjsKKwkJfQorCX0KK30KKworbXkgJHByb21wdGluZyA9IDA7CitpZiAoIWRlZmluZWQgJHNlbmRlcikgeworCSRzZW5kZXIgPSAkcmVwb2F1dGhvciB8fCAkcmVwb2NvbW1pdHRlciB8fCAnJzsKKwkkc2VuZGVyID0gYXNrKCJXaG8gc2hvdWxkIHRoZSBlbWFpbHMgYXBwZWFyIHRvIGJlIGZyb20/IFskc2VuZGVyXSAiLAorCSAgICAgICAgICAgICAgZGVmYXVsdCA9PiAkc2VuZGVyLAorCQkgICAgICB2YWxpZF9yZSA9PiBxci9cQC4qXC4vLCBjb25maXJtX29ubHkgPT4gMSk7CisJcHJpbnQgIkVtYWlscyB3aWxsIGJlIHNlbnQgZnJvbTogIiwgJHNlbmRlciwgIlxuIjsKKwkkcHJvbXB0aW5nKys7Cit9CisKK2lmICghQGluaXRpYWxfdG8gJiYgIWRlZmluZWQgJHRvX2NtZCkgeworCW15ICR0byA9IGFzaygiV2hvIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgdG8gKGlmIGFueSk/ICIsCisJCSAgICAgZGVmYXVsdCA9PiAiIiwKKwkJICAgICB2YWxpZF9yZSA9PiBxci9cQC4qXC4vLCBjb25maXJtX29ubHkgPT4gMSk7CisJcHVzaCBAaW5pdGlhbF90bywgcGFyc2VfYWRkcmVzc19saW5lKCR0bykgaWYgZGVmaW5lZCAkdG87ICMgc2FuaXRpemVkL3ZhbGlkYXRlZCBsYXRlcgorCSRwcm9tcHRpbmcrKzsKK30KKworc3ViIGV4cGFuZF9hbGlhc2VzIHsKKwlyZXR1cm4gbWFwIHsgZXhwYW5kX29uZV9hbGlhcygkXykgfSBAXzsKK30KKworbXkgJUVYUEFOREVEX0FMSUFTRVM7CitzdWIgZXhwYW5kX29uZV9hbGlhcyB7CisJbXkgJGFsaWFzID0gc2hpZnQ7CisJaWYgKCRFWFBBTkRFRF9BTElBU0VTeyRhbGlhc30pIHsKKwkJZGllICJmYXRhbDogYWxpYXMgJyRhbGlhcycgZXhwYW5kcyB0byBpdHNlbGZcbiI7CisJfQorCWxvY2FsICRFWFBBTkRFRF9BTElBU0VTeyRhbGlhc30gPSAxOworCXJldHVybiAkYWxpYXNlc3skYWxpYXN9ID8gZXhwYW5kX2FsaWFzZXMoQHskYWxpYXNlc3skYWxpYXN9fSkgOiAkYWxpYXM7Cit9CisKK0Bpbml0aWFsX3RvID0gZXhwYW5kX2FsaWFzZXMoQGluaXRpYWxfdG8pOworQGluaXRpYWxfdG8gPSAobWFwIHsgc2FuaXRpemVfYWRkcmVzcygkXykgfSBAaW5pdGlhbF90byk7CitAaW5pdGlhbF9jYyA9IGV4cGFuZF9hbGlhc2VzKEBpbml0aWFsX2NjKTsKK0BiY2NsaXN0ID0gZXhwYW5kX2FsaWFzZXMoQGJjY2xpc3QpOworCitpZiAoJHRocmVhZCAmJiAhZGVmaW5lZCAkaW5pdGlhbF9yZXBseV90byAmJiAkcHJvbXB0aW5nKSB7CisJJGluaXRpYWxfcmVwbHlfdG8gPSBhc2soCisJCSJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIiwKKwkJZGVmYXVsdCA9PiAiIiwKKwkJdmFsaWRfcmUgPT4gcXIvXEAuKlwuLywgY29uZmlybV9vbmx5ID0+IDEpOworfQoraWYgKGRlZmluZWQgJGluaXRpYWxfcmVwbHlfdG8pIHsKKwkkaW5pdGlhbF9yZXBseV90byA9fiBzL15ccyo8Py8vOworCSRpbml0aWFsX3JlcGx5X3RvID1+IHMvPj9ccyokLy87CisJJGluaXRpYWxfcmVwbHlfdG8gPSAiPCRpbml0aWFsX3JlcGx5X3RvPiIgaWYgJGluaXRpYWxfcmVwbHlfdG8gbmUgJyc7Cit9CisKK2lmICghZGVmaW5lZCAkc210cF9zZXJ2ZXIpIHsKKwlmb3JlYWNoIChxdyggL3Vzci9zYmluL3NlbmRtYWlsIC91c3IvbGliL3NlbmRtYWlsICkpIHsKKwkJaWYgKC14ICRfKSB7CisJCQkkc210cF9zZXJ2ZXIgPSAkXzsKKwkJCWxhc3Q7CisJCX0KKwl9CisJJHNtdHBfc2VydmVyIHx8PSAnbG9jYWxob3N0JzsgIyBjb3VsZCBiZSAxMjcuMC4wLjEsIHRvby4uLiAqc2hydWcqCit9CisKK2lmICgkY29tcG9zZSAmJiAkY29tcG9zZSA+IDApIHsKKwlAZmlsZXMgPSAoJGNvbXBvc2VfZmlsZW5hbWUgLiAiLmZpbmFsIiwgQGZpbGVzKTsKK30KKworIyBWYXJpYWJsZXMgd2Ugc2V0IGFzIHBhcnQgb2YgdGhlIGxvb3Agb3ZlciBmaWxlcworb3VyICgkbWVzc2FnZV9pZCwgJW1haWwsICRzdWJqZWN0LCAkcmVwbHlfdG8sICRyZWZlcmVuY2VzLCAkbWVzc2FnZSwKKwkkbmVlZHNfY29uZmlybSwgJG1lc3NhZ2VfbnVtLCAkYXNrX2RlZmF1bHQpOworCitzdWIgZXh0cmFjdF92YWxpZF9hZGRyZXNzIHsKKwlteSAkYWRkcmVzcyA9IHNoaWZ0OworCW15ICRsb2NhbF9wYXJ0X3JlZ2V4cCA9IHFyL1tePD4iXHNAXSsvOworCW15ICRkb21haW5fcmVnZXhwID0gcXIvW14uPD4iXHNAXSsoPzpcLlteLjw+IlxzQF0rKSsvOworCisJIyBjaGVjayBmb3IgYSBsb2NhbCBhZGRyZXNzOgorCXJldHVybiAkYWRkcmVzcyBpZiAoJGFkZHJlc3MgPX4gL14oJGxvY2FsX3BhcnRfcmVnZXhwKSQvKTsKKworCSRhZGRyZXNzID1+IHMvXlxzKjwoLiopPlxzKiQvJDEvOworCWlmICgkaGF2ZV9lbWFpbF92YWxpZCkgeworCQlyZXR1cm4gc2NhbGFyIEVtYWlsOjpWYWxpZC0+YWRkcmVzcygkYWRkcmVzcyk7CisJfSBlbHNlIHsKKwkJIyBsZXNzIHJvYnVzdC9jb3JyZWN0IHRoYW4gdGhlIG1vbnN0ZXIgcmVnZXhwIGluIEVtYWlsOjpWYWxpZCwKKwkJIyBidXQgc3RpbGwgZG9lcyBhIDk5JSBqb2IsIGFuZCBvbmUgbGVzcyBkZXBlbmRlbmN5CisJCSRhZGRyZXNzID1+IC8oJGxvY2FsX3BhcnRfcmVnZXhwXEAkZG9tYWluX3JlZ2V4cCkvOworCQlyZXR1cm4gJDE7CisJfQorfQorCisjIFVzdWFsbHkgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgYmVsb3cgaGVyZS4KKworIyB3ZSBtYWtlIGEgImZha2UiIG1lc3NhZ2UgaWQgYnkgdGFraW5nIHRoZSBjdXJyZW50IG51bWJlcgorIyBvZiBzZWNvbmRzIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgVW5peCB0aW1lIGFuZCB0YWNraW5nIG9uCisjIGEgcmFuZG9tIG51bWJlciB0byB0aGUgZW5kLCBpbiBjYXNlIHdlIGFyZSBjYWxsZWQgcXVpY2tlciB0aGFuCisjIDEgc2Vjb25kIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBjYWxsZWQuCisKKyMgV2UnbGwgc2V0dXAgYSB0ZW1wbGF0ZSBmb3IgdGhlIG1lc3NhZ2UgaWQsIHVzaW5nIHRoZSAiZnJvbSIgYWRkcmVzczoKKworbXkgKCRtZXNzYWdlX2lkX3N0YW1wLCAkbWVzc2FnZV9pZF9zZXJpYWwpOworc3ViIG1ha2VfbWVzc2FnZV9pZCB7CisJbXkgJHVuaXE7CisJaWYgKCFkZWZpbmVkICRtZXNzYWdlX2lkX3N0YW1wKSB7CisJCSRtZXNzYWdlX2lkX3N0YW1wID0gc3ByaW50ZigiJXMtJXMiLCB0aW1lLCAkJCk7CisJCSRtZXNzYWdlX2lkX3NlcmlhbCA9IDA7CisJfQorCSRtZXNzYWdlX2lkX3NlcmlhbCsrOworCSR1bmlxID0gIiRtZXNzYWdlX2lkX3N0YW1wLSRtZXNzYWdlX2lkX3NlcmlhbCI7CisKKwlteSAkZHVfcGFydDsKKwlmb3IgKCRzZW5kZXIsICRyZXBvY29tbWl0dGVyLCAkcmVwb2F1dGhvcikgeworCQkkZHVfcGFydCA9IGV4dHJhY3RfdmFsaWRfYWRkcmVzcyhzYW5pdGl6ZV9hZGRyZXNzKCRfKSk7CisJCWxhc3QgaWYgKGRlZmluZWQgJGR1X3BhcnQgYW5kICRkdV9wYXJ0IG5lICcnKTsKKwl9CisJaWYgKG5vdCBkZWZpbmVkICRkdV9wYXJ0IG9yICRkdV9wYXJ0IGVxICcnKSB7CisJCXJlcXVpcmUgU3lzOjpIb3N0bmFtZTsKKwkJJGR1X3BhcnQgPSAndXNlckAnIC4gU3lzOjpIb3N0bmFtZTo6aG9zdG5hbWUoKTsKKwl9CisJbXkgJG1lc3NhZ2VfaWRfdGVtcGxhdGUgPSAiPCVzLWdpdC1zZW5kLWVtYWlsLSVzPiI7CisJJG1lc3NhZ2VfaWQgPSBzcHJpbnRmKCRtZXNzYWdlX2lkX3RlbXBsYXRlLCAkdW5pcSwgJGR1X3BhcnQpOworCSNwcmludCAibmV3IG1lc3NhZ2UgaWQgPSAkbWVzc2FnZV9pZFxuIjsgIyBXYXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKK30KKworCisKKyR0aW1lID0gdGltZSAtIHNjYWxhciAkI2ZpbGVzOworCitzdWIgdW5xdW90ZV9yZmMyMDQ3IHsKKwlsb2NhbCAoJF8pID0gQF87CisJbXkgJGVuY29kaW5nOworCXN7PVw/KFteP10rKVw/cVw/KC4qPylcPz19eworCQkkZW5jb2RpbmcgPSAkMTsKKwkJbXkgJGUgPSAkMjsKKwkJJGUgPX4gcy9fLyAvZzsKKwkJJGUgPX4gcy89KFswLTlBLUZdezJ9KS9jaHIoaGV4KCQxKSkvZWc7CisJCSRlOworCX1lZzsKKwlyZXR1cm4gd2FudGFycmF5ID8gKCRfLCAkZW5jb2RpbmcpIDogJF87Cit9CisKK3N1YiBxdW90ZV9yZmMyMDQ3IHsKKwlsb2NhbCAkXyA9IHNoaWZ0OworCW15ICRlbmNvZGluZyA9IHNoaWZ0IHx8ICdVVEYtOCc7CisJcy8oW14tYS16QS1aMC05ISorXC9dKS9zcHJpbnRmKCI9JTAyWCIsIG9yZCgkMSkpL2VnOworCXMvKC4qKS89XD8kZW5jb2RpbmdcP3FcPyQxXD89LzsKKwlyZXR1cm4gJF87Cit9CisKK3N1YiBpc19yZmMyMDQ3X3F1b3RlZCB7CisJbXkgJHMgPSBzaGlmdDsKKwlteSAkdG9rZW4gPSBxci9bXl1bKCk8PkAsOzoiXC8/Lj0gXDAwMC1cMDM3XDE3Ny1cMzc3XSsvOworCW15ICRlbmNvZGVkX3RleHQgPSBxci9bIS0+QC1+XSsvOworCWxlbmd0aCgkcykgPD0gNzUgJiYKKwkkcyA9fiBtL14oPzoiW1s6YXNjaWk6XV0qInw9XD8kdG9rZW5cPyR0b2tlblw/JGVuY29kZWRfdGV4dFw/PSkkL287Cit9CisKKyMgdXNlIHRoZSBzaW1wbGVzdCBxdW90aW5nIGJlaW5nIGFibGUgdG8gaGFuZGxlIHRoZSByZWNpcGllbnQKK3N1YiBzYW5pdGl6ZV9hZGRyZXNzIHsKKwlteSAoJHJlY2lwaWVudCkgPSBAXzsKKwlteSAoJHJlY2lwaWVudF9uYW1lLCAkcmVjaXBpZW50X2FkZHIpID0gKCRyZWNpcGllbnQgPX4gL14oLio/KVxzKig8LiopLyk7CisKKwlpZiAobm90ICRyZWNpcGllbnRfbmFtZSkgeworCQlyZXR1cm4gJHJlY2lwaWVudDsKKwl9CisKKwkjIGlmIHJlY2lwaWVudF9uYW1lIGlzIGFscmVhZHkgcXVvdGVkLCBkbyBub3RoaW5nCisJaWYgKGlzX3JmYzIwNDdfcXVvdGVkKCRyZWNpcGllbnRfbmFtZSkpIHsKKwkJcmV0dXJuICRyZWNpcGllbnQ7CisJfQorCisJIyByZmMyMDQ3IGlzIG5lZWRlZCBpZiBhIG5vbi1hc2NpaSBjaGFyIGlzIGluY2x1ZGVkCisJaWYgKCRyZWNpcGllbnRfbmFtZSA9fiAvW15bOmFzY2lpOl1dLykgeworCQkkcmVjaXBpZW50X25hbWUgPX4gcy9eIiguKikiJC8kMS87CisJCSRyZWNpcGllbnRfbmFtZSA9IHF1b3RlX3JmYzIwNDcoJHJlY2lwaWVudF9uYW1lKTsKKwl9CisKKwkjIGRvdWJsZSBxdW90ZXMgYXJlIG5lZWRlZCBpZiBzcGVjaWFscyBvciBDVExzIGFyZSBpbmNsdWRlZAorCWVsc2lmICgkcmVjaXBpZW50X25hbWUgPX4gL1tdWygpPD5ALDs6XFwiLlwwMDAtXDAzN1wxNzddLykgeworCQkkcmVjaXBpZW50X25hbWUgPX4gcy8oWyJcXFxyXSkvXFwkMS9nOworCQkkcmVjaXBpZW50X25hbWUgPSBxcVsiJHJlY2lwaWVudF9uYW1lIl07CisJfQorCisJcmV0dXJuICIkcmVjaXBpZW50X25hbWUgJHJlY2lwaWVudF9hZGRyIjsKKworfQorCisjIFJldHVybnMgdGhlIGxvY2FsIEZ1bGx5IFF1YWxpZmllZCBEb21haW4gTmFtZSAoRlFETikgaWYgYXZhaWxhYmxlLgorIworIyBUaWdodGx5IGNvbmZpZ3VyZWQgTVRBYSByZXF1aXJlIHRoYXQgYSBjYWxsZXIgc2VuZHMgYSByZWFsIEROUworIyBkb21haW4gbmFtZSB0aGF0IGNvcnJlc3BvbmRzIHRoZSBJUCBhZGRyZXNzIGluIHRoZSBIRUxPL0VITE8KKyMgaGFuZHNoYWtlLiBUaGlzIGlzIHVzZWQgdG8gdmVyaWZ5IHRoZSBjb25uZWN0aW9uIGFuZCBwcmV2ZW50CisjIHNwYW1tZXJzIGZyb20gdHJ5aW5nIHRvIGhpZGUgdGhlaXIgaWRlbnRpdHkuIElmIHRoZSBETlMgYW5kIElQIGRvbid0CisjIG1hdGNoLCB0aGUgcmVjZWl2ZWluZyBNVEEgbWF5IGRlbnkgdGhlIGNvbm5lY3Rpb24uCisjCisjIEhlcmUgaXMgYSBkZW55IGV4YW1wbGUgb2YgTmV0OjpTTVRQIHdpdGggdGhlIGRlZmF1bHQgImxvY2FsaG9zdC5sb2NhbGRvbWFpbiIKKyMKKyMgTmV0OjpTTVRQPUdMT0IoMHgyNjdlYzI4KT4+PiBFSExPIGxvY2FsaG9zdC5sb2NhbGRvbWFpbgorIyBOZXQ6OlNNVFA9R0xPQigweDI2N2VjMjgpPDw8IDU1MCBFSExPIGFyZ3VtZW50IGRvZXMgbm90IG1hdGNoIGNhbGxpbmcgaG9zdAorIworIyBUaGlzIG1haWxkb21haW4qKCkgY29kZSBpcyBiYXNlZCBvbiBpZGVhcyBpbiBQZXJsIGxpYnJhcnkgVGVzdDo6UmVwb3J0ZXIKKyMgL3Vzci9zaGFyZS9wZXJsNS9UZXN0L1JlcG9ydGVyL01haWwvVXRpbC5wbSA9PT4gc3ViIF9tYWlsZG9tYWluICgpCisKK3N1YiB2YWxpZF9mcWRuIHsKKwlteSAkZG9tYWluID0gc2hpZnQ7CisJcmV0dXJuIGRlZmluZWQgJGRvbWFpbiAmJiAhKCReTyBlcSAnZGFyd2luJyAmJiAkZG9tYWluID1+IC9cLmxvY2FsJC8pICYmICRkb21haW4gPX4gL1wuLzsKK30KKworc3ViIG1haWxkb21haW5fbmV0IHsKKwlteSAkbWFpbGRvbWFpbjsKKworCWlmIChldmFsIHsgcmVxdWlyZSBOZXQ6OkRvbWFpbjsgMSB9KSB7CisJCW15ICRkb21haW4gPSBOZXQ6OkRvbWFpbjo6ZG9tYWlubmFtZSgpOworCQkkbWFpbGRvbWFpbiA9ICRkb21haW4gaWYgdmFsaWRfZnFkbigkZG9tYWluKTsKKwl9CisKKwlyZXR1cm4gJG1haWxkb21haW47Cit9CisKK3N1YiBtYWlsZG9tYWluX210YSB7CisJbXkgJG1haWxkb21haW47CisKKwlpZiAoZXZhbCB7IHJlcXVpcmUgTmV0OjpTTVRQOyAxIH0pIHsKKwkJZm9yIG15ICRob3N0IChxdyhtYWlsaG9zdCBsb2NhbGhvc3QpKSB7CisJCQlteSAkc210cCA9IE5ldDo6U01UUC0+bmV3KCRob3N0KTsKKwkJCWlmIChkZWZpbmVkICRzbXRwKSB7CisJCQkJbXkgJGRvbWFpbiA9ICRzbXRwLT5kb21haW47CisJCQkJJHNtdHAtPnF1aXQ7CisKKwkJCQkkbWFpbGRvbWFpbiA9ICRkb21haW4gaWYgdmFsaWRfZnFkbigkZG9tYWluKTsKKworCQkJCWxhc3QgaWYgJG1haWxkb21haW47CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gJG1haWxkb21haW47Cit9CisKK3N1YiBtYWlsZG9tYWluIHsKKwlyZXR1cm4gbWFpbGRvbWFpbl9uZXQoKSB8fCBtYWlsZG9tYWluX210YSgpIHx8ICdsb2NhbGhvc3QubG9jYWxkb21haW4nOworfQorCisjIFJldHVybnMgMSBpZiB0aGUgbWVzc2FnZSB3YXMgc2VudCwgYW5kIDAgb3RoZXJ3aXNlLgorIyBJbiBhY3R1YWxpdHksIHRoZSB3aG9sZSBwcm9ncmFtIGRpZXMgd2hlbiB0aGVyZQorIyBpcyBhbiBlcnJvciBzZW5kaW5nIGEgbWVzc2FnZS4KKworc3ViIHNlbmRfbWVzc2FnZSB7CisJbXkgQHJlY2lwaWVudHMgPSB1bmlxdWVfZW1haWxfbGlzdChAdG8pOworCUBjYyA9IChncmVwIHsgbXkgJGNjID0gZXh0cmFjdF92YWxpZF9hZGRyZXNzKCRfKTsKKwkJICAgICAgbm90IGdyZXAgeyAkY2MgZXEgJF8gfHwgJF8gPX4gLzxcUSR7Y2N9XEU+JC8gfSBAcmVjaXBpZW50cworCQkgICAgfQorCSAgICAgICBtYXAgeyBzYW5pdGl6ZV9hZGRyZXNzKCRfKSB9CisJICAgICAgIEBjYyk7CisJbXkgJHRvID0gam9pbiAoIixcblx0IiwgQHJlY2lwaWVudHMpOworCUByZWNpcGllbnRzID0gdW5pcXVlX2VtYWlsX2xpc3QoQHJlY2lwaWVudHMsQGNjLEBiY2NsaXN0KTsKKwlAcmVjaXBpZW50cyA9IChtYXAgeyBleHRyYWN0X3ZhbGlkX2FkZHJlc3MoJF8pIH0gQHJlY2lwaWVudHMpOworCW15ICRkYXRlID0gZm9ybWF0XzI4MjJfdGltZSgkdGltZSsrKTsKKwlteSAkZ2l0dmVyc2lvbiA9ICdAQEdJVF9WRVJTSU9OQEAnOworCWlmICgkZ2l0dmVyc2lvbiA9fiBtLy4uR0lUX1ZFUlNJT04uLi8pIHsKKwkgICAgJGdpdHZlcnNpb24gPSBHaXQ6OnZlcnNpb24oKTsKKwl9CisKKwlteSAkY2MgPSBqb2luKCIsXG5cdCIsIHVuaXF1ZV9lbWFpbF9saXN0KEBjYykpOworCW15ICRjY2xpbmUgPSAiIjsKKwlpZiAoJGNjIG5lICcnKSB7CisJCSRjY2xpbmUgPSAiXG5DYzogJGNjIjsKKwl9CisJbXkgJHNhbml0aXplZF9zZW5kZXIgPSBzYW5pdGl6ZV9hZGRyZXNzKCRzZW5kZXIpOworCW1ha2VfbWVzc2FnZV9pZCgpIHVubGVzcyBkZWZpbmVkKCRtZXNzYWdlX2lkKTsKKworCW15ICRoZWFkZXIgPSAiRnJvbTogJHNhbml0aXplZF9zZW5kZXIKK1RvOiAkdG8ke2NjbGluZX0KK1N1YmplY3Q6ICRzdWJqZWN0CitEYXRlOiAkZGF0ZQorTWVzc2FnZS1JZDogJG1lc3NhZ2VfaWQKK1gtTWFpbGVyOiBnaXQtc2VuZC1lbWFpbCAkZ2l0dmVyc2lvbgorIjsKKwlpZiAoJHJlcGx5X3RvKSB7CisKKwkJJGhlYWRlciAuPSAiSW4tUmVwbHktVG86ICRyZXBseV90b1xuIjsKKwkJJGhlYWRlciAuPSAiUmVmZXJlbmNlczogJHJlZmVyZW5jZXNcbiI7CisJfQorCWlmIChAeGgpIHsKKwkJJGhlYWRlciAuPSBqb2luKCJcbiIsIEB4aCkgLiAiXG4iOworCX0KKworCW15IEBzZW5kbWFpbF9wYXJhbWV0ZXJzID0gKCctaScsIEByZWNpcGllbnRzKTsKKwlteSAkcmF3X2Zyb20gPSAkc2FuaXRpemVkX3NlbmRlcjsKKwlpZiAoZGVmaW5lZCAkZW52ZWxvcGVfc2VuZGVyICYmICRlbnZlbG9wZV9zZW5kZXIgbmUgImF1dG8iKSB7CisJCSRyYXdfZnJvbSA9ICRlbnZlbG9wZV9zZW5kZXI7CisJfQorCSRyYXdfZnJvbSA9IGV4dHJhY3RfdmFsaWRfYWRkcmVzcygkcmF3X2Zyb20pOworCXVuc2hpZnQgKEBzZW5kbWFpbF9wYXJhbWV0ZXJzLAorCQkJJy1mJywgJHJhd19mcm9tKSBpZihkZWZpbmVkICRlbnZlbG9wZV9zZW5kZXIpOworCisJaWYgKCRuZWVkc19jb25maXJtICYmICEkZHJ5X3J1bikgeworCQlwcmludCAiXG4kaGVhZGVyXG4iOworCQlpZiAoJG5lZWRzX2NvbmZpcm0gZXEgImluZm9ybSIpIHsKKwkJCSRjb25maXJtX3VuY29uZmlndXJlZCA9IDA7ICMgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgZm9yIHRoZSByZXN0IG9mIHRoaXMgcnVuCisJCQkkYXNrX2RlZmF1bHQgPSAieSI7ICMgYXNzdW1lIHllcyBvbiBFT0Ygc2luY2UgdXNlciBoYXNuJ3QgZXhwbGljaXRseSBhc2tlZCBmb3IgY29uZmlybWF0aW9uCisJCQlwcmludCAiICAgIFRoZSBDYyBsaXN0IGFib3ZlIGhhcyBiZWVuIGV4cGFuZGVkIGJ5IGFkZGl0aW9uYWxcbiI7CisJCQlwcmludCAiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiI7CisJCQlwcmludCAiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiI7CisJCQlwcmludCAiICAgIFRoaXMgYmVoYXZpb3IgaXMgY29udHJvbGxlZCBieSB0aGUgc2VuZGVtYWlsLmNvbmZpcm1cbiI7CisJCQlwcmludCAiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiI7CisJCQlwcmludCAiXG4iOworCQkJcHJpbnQgIiAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcnVuICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAnLlxuIjsKKwkJCXByaW50ICIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iOworCQkJcHJpbnQgIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG5cbiI7CisJCX0KKwkJJF8gPSBhc2soIlNlbmQgdGhpcyBlbWFpbD8gKFt5XWVzfFtuXW98W3FddWl0fFthXWxsKTogIiwKKwkJICAgICAgICAgdmFsaWRfcmUgPT4gcXIvXig/Onllc3x5fG5vfG58cXVpdHxxfGFsbHxhKS9pLAorCQkgICAgICAgICBkZWZhdWx0ID0+ICRhc2tfZGVmYXVsdCk7CisJCWRpZSAiU2VuZCB0aGlzIGVtYWlsIHJlcGx5IHJlcXVpcmVkIiB1bmxlc3MgZGVmaW5lZCAkXzsKKwkJaWYgKC9ebi9pKSB7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNpZiAoL15xL2kpIHsKKwkJCWNsZWFudXBfY29tcG9zZV9maWxlcygpOworCQkJZXhpdCgwKTsKKwkJfSBlbHNpZiAoL15hL2kpIHsKKwkJCSRjb25maXJtID0gJ25ldmVyJzsKKwkJfQorCX0KKworCXVuc2hpZnQgKEBzZW5kbWFpbF9wYXJhbWV0ZXJzLCBAc210cF9zZXJ2ZXJfb3B0aW9ucyk7CisKKwlpZiAoJGRyeV9ydW4pIHsKKwkJIyBXZSBkb24ndCB3YW50IHRvIHNlbmQgdGhlIGVtYWlsLgorCX0gZWxzaWYgKCRzbXRwX3NlcnZlciA9fiBtI14vIykgeworCQlteSAkcGlkID0gb3BlbiBteSAkc20sICd8LSc7CisJCWRlZmluZWQgJHBpZCBvciBkaWUgJCE7CisJCWlmICghJHBpZCkgeworCQkJZXhlYygkc210cF9zZXJ2ZXIsIEBzZW5kbWFpbF9wYXJhbWV0ZXJzKSBvciBkaWUgJCE7CisJCX0KKwkJcHJpbnQgJHNtICIkaGVhZGVyXG4kbWVzc2FnZSI7CisJCWNsb3NlICRzbSBvciBkaWUgJCE7CisJfSBlbHNlIHsKKworCQlpZiAoIWRlZmluZWQgJHNtdHBfc2VydmVyKSB7CisJCQlkaWUgIlRoZSByZXF1aXJlZCBTTVRQIHNlcnZlciBpcyBub3QgcHJvcGVybHkgZGVmaW5lZC4iCisJCX0KKworCQlpZiAoJHNtdHBfZW5jcnlwdGlvbiBlcSAnc3NsJykgeworCQkJJHNtdHBfc2VydmVyX3BvcnQgfHw9IDQ2NTsgIyBzc210cAorCQkJcmVxdWlyZSBOZXQ6OlNNVFA6OlNTTDsKKwkJCSRzbXRwX2RvbWFpbiB8fD0gbWFpbGRvbWFpbigpOworCQkJJHNtdHAgfHw9IE5ldDo6U01UUDo6U1NMLT5uZXcoJHNtdHBfc2VydmVyLAorCQkJCQkJICAgICAgSGVsbG8gPT4gJHNtdHBfZG9tYWluLAorCQkJCQkJICAgICAgUG9ydCA9PiAkc210cF9zZXJ2ZXJfcG9ydCk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXF1aXJlIE5ldDo6U01UUDsKKwkJCSRzbXRwX2RvbWFpbiB8fD0gbWFpbGRvbWFpbigpOworCQkJJHNtdHAgfHw9IE5ldDo6U01UUC0+bmV3KChkZWZpbmVkICRzbXRwX3NlcnZlcl9wb3J0KQorCQkJCQkJID8gIiRzbXRwX3NlcnZlcjokc210cF9zZXJ2ZXJfcG9ydCIKKwkJCQkJCSA6ICRzbXRwX3NlcnZlciwKKwkJCQkJCSBIZWxsbyA9PiAkc210cF9kb21haW4sCisJCQkJCQkgRGVidWcgPT4gJGRlYnVnX25ldF9zbXRwKTsKKwkJCWlmICgkc210cF9lbmNyeXB0aW9uIGVxICd0bHMnICYmICRzbXRwKSB7CisJCQkJcmVxdWlyZSBOZXQ6OlNNVFA6OlNTTDsKKwkJCQkkc210cC0+Y29tbWFuZCgnU1RBUlRUTFMnKTsKKwkJCQkkc210cC0+cmVzcG9uc2UoKTsKKwkJCQlpZiAoJHNtdHAtPmNvZGUgPT0gMjIwKSB7CisJCQkJCSRzbXRwID0gTmV0OjpTTVRQOjpTU0wtPnN0YXJ0X1NTTCgkc210cCkKKwkJCQkJCW9yIGRpZSAiU1RBUlRUTFMgZmFpbGVkISAiLiRzbXRwLT5tZXNzYWdlOworCQkJCQkkc210cF9lbmNyeXB0aW9uID0gJyc7CisJCQkJCSMgU2VuZCBFSExPIGFnYWluIHRvIHJlY2VpdmUgZnJlc2gKKwkJCQkJIyBzdXBwb3J0ZWQgY29tbWFuZHMKKwkJCQkJJHNtdHAtPmhlbGxvKCRzbXRwX2RvbWFpbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGllICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgIi4kc210cC0+bWVzc2FnZTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoISRzbXRwKSB7CisJCQlkaWUgIlVuYWJsZSB0byBpbml0aWFsaXplIFNNVFAgcHJvcGVybHkuIENoZWNrIGNvbmZpZyBhbmQgdXNlIC0tc210cC1kZWJ1Zy4gIiwKKwkJCSAgICAiVkFMVUVTOiBzZXJ2ZXI9JHNtdHBfc2VydmVyICIsCisJCQkgICAgImVuY3J5cHRpb249JHNtdHBfZW5jcnlwdGlvbiAiLAorCQkJICAgICJoZWxsbz0kc210cF9kb21haW4iLAorCQkJICAgIGRlZmluZWQgJHNtdHBfc2VydmVyX3BvcnQgPyAiIHBvcnQ9JHNtdHBfc2VydmVyX3BvcnQiIDogIiI7CisJCX0KKworCQlpZiAoZGVmaW5lZCAkc210cF9hdXRodXNlcikgeworCQkJIyBXb3JrYXJvdW5kIEFVVEggUExBSU4vTE9HSU4gaW50ZXJhY3Rpb24gZGVmZWN0CisJCQkjIHdpdGggQXV0aGVuOjpTQVNMOjpDeXJ1cworCQkJZXZhbCB7CisJCQkJcmVxdWlyZSBBdXRoZW46OlNBU0w7CisJCQkJQXV0aGVuOjpTQVNMLT5pbXBvcnQocXcoUGVybCkpOworCQkJfTsKKworCQkJaWYgKCFkZWZpbmVkICRzbXRwX2F1dGhwYXNzKSB7CisKKwkJCQlzeXN0ZW0gInN0dHkgLWVjaG8iOworCisJCQkJZG8geworCQkJCQlwcmludCAiUGFzc3dvcmQ6ICI7CisJCQkJCSRfID0gPFNURElOPjsKKwkJCQkJcHJpbnQgIlxuIjsKKwkJCQl9IHdoaWxlICghZGVmaW5lZCAkXyk7CisKKwkJCQljaG9tcCgkc210cF9hdXRocGFzcyA9ICRfKTsKKworCQkJCXN5c3RlbSAic3R0eSBlY2hvIjsKKwkJCX0KKworCQkJJGF1dGggfHw9ICRzbXRwLT5hdXRoKCAkc210cF9hdXRodXNlciwgJHNtdHBfYXV0aHBhc3MgKSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7CisJCX0KKworCQkkc210cC0+bWFpbCggJHJhd19mcm9tICkgb3IgZGllICRzbXRwLT5tZXNzYWdlOworCQkkc210cC0+dG8oIEByZWNpcGllbnRzICkgb3IgZGllICRzbXRwLT5tZXNzYWdlOworCQkkc210cC0+ZGF0YSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7CisJCSRzbXRwLT5kYXRhc2VuZCgiJGhlYWRlclxuJG1lc3NhZ2UiKSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7CisJCSRzbXRwLT5kYXRhZW5kKCkgb3IgZGllICRzbXRwLT5tZXNzYWdlOworCQkkc210cC0+Y29kZSA9fiAvMjUwfDIwMC8gb3IgZGllICJGYWlsZWQgdG8gc2VuZCAkc3ViamVjdFxuIi4kc210cC0+bWVzc2FnZTsKKwl9CisJaWYgKCRxdWlldCkgeworCQlwcmludGYgKCgkZHJ5X3J1biA/ICJEcnktIiA6ICIiKS4iU2VudCAlc1xuIiwgJHN1YmplY3QpOworCX0gZWxzZSB7CisJCXByaW50ICgoJGRyeV9ydW4gPyAiRHJ5LSIgOiAiIikuIk9LLiBMb2cgc2F5czpcbiIpOworCQlpZiAoJHNtdHBfc2VydmVyICF+IG0jXi8jKSB7CisJCQlwcmludCAiU2VydmVyOiAkc210cF9zZXJ2ZXJcbiI7CisJCQlwcmludCAiTUFJTCBGUk9NOjwkcmF3X2Zyb20+XG4iOworCQkJZm9yZWFjaCBteSAkZW50cnkgKEByZWNpcGllbnRzKSB7CisJCQkgICAgcHJpbnQgIlJDUFQgVE86PCRlbnRyeT5cbiI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludCAiU2VuZG1haWw6ICRzbXRwX3NlcnZlciAiLmpvaW4oJyAnLEBzZW5kbWFpbF9wYXJhbWV0ZXJzKS4iXG4iOworCQl9CisJCXByaW50ICRoZWFkZXIsICJcbiI7CisJCWlmICgkc210cCkgeworCQkJcHJpbnQgIlJlc3VsdDogIiwgJHNtdHAtPmNvZGUsICcgJywKKwkJCQkoJHNtdHAtPm1lc3NhZ2UgPX4gL1xuKFteXG5dK1xuKSQvcyksICJcbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiUmVzdWx0OiBPS1xuIjsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCiskcmVwbHlfdG8gPSAkaW5pdGlhbF9yZXBseV90bzsKKyRyZWZlcmVuY2VzID0gJGluaXRpYWxfcmVwbHlfdG8gfHwgJyc7Ciskc3ViamVjdCA9ICRpbml0aWFsX3N1YmplY3Q7CiskbWVzc2FnZV9udW0gPSAwOworCitmb3JlYWNoIG15ICR0IChAZmlsZXMpIHsKKwlvcGVuIG15ICRmaCwgIjwiLCAkdCBvciBkaWUgImNhbid0IG9wZW4gZmlsZSAkdCI7CisKKwlteSAkYXV0aG9yID0gdW5kZWY7CisJbXkgJGF1dGhvcl9lbmNvZGluZzsKKwlteSAkaGFzX2NvbnRlbnRfdHlwZTsKKwlteSAkYm9keV9lbmNvZGluZzsKKwlAdG8gPSAoKTsKKwlAY2MgPSAoKTsKKwlAeGggPSAoKTsKKwlteSAkaW5wdXRfZm9ybWF0ID0gdW5kZWY7CisJbXkgQGhlYWRlciA9ICgpOworCSRtZXNzYWdlID0gIiI7CisJJG1lc3NhZ2VfbnVtKys7CisJIyBGaXJzdCB1bmZvbGQgbXVsdGlsaW5lIGhlYWRlciBmaWVsZHMKKwl3aGlsZSg8JGZoPikgeworCQlsYXN0IGlmIC9eXHMqJC87CisJCWlmICgvXlxzK1xTLyBhbmQgQGhlYWRlcikgeworCQkJY2hvbXAoJGhlYWRlclskI2hlYWRlcl0pOworCQkJcy9eXHMrLyAvOworCQkJJGhlYWRlclskI2hlYWRlcl0gLj0gJF87CisJICAgIH0gZWxzZSB7CisJCQlwdXNoKEBoZWFkZXIsICRfKTsKKwkJfQorCX0KKwkjIE5vdyBwYXJzZSB0aGUgaGVhZGVyCisJZm9yZWFjaChAaGVhZGVyKSB7CisJCWlmICgvXkZyb20gLykgeworCQkJJGlucHV0X2Zvcm1hdCA9ICdtYm94JzsKKwkJCW5leHQ7CisJCX0KKwkJY2hvbXA7CisJCWlmICghZGVmaW5lZCAkaW5wdXRfZm9ybWF0ICYmIC9eWy1BLVphLXpdKzpccy8pIHsKKwkJCSRpbnB1dF9mb3JtYXQgPSAnbWJveCc7CisJCX0KKworCQlpZiAoZGVmaW5lZCAkaW5wdXRfZm9ybWF0ICYmICRpbnB1dF9mb3JtYXQgZXEgJ21ib3gnKSB7CisJCQlpZiAoL15TdWJqZWN0OlxzKyguKikkLykgeworCQkJCSRzdWJqZWN0ID0gJDE7CisJCQl9CisJCQllbHNpZiAoL15Gcm9tOlxzKyguKikkLykgeworCQkJCSgkYXV0aG9yLCAkYXV0aG9yX2VuY29kaW5nKSA9IHVucXVvdGVfcmZjMjA0NygkMSk7CisJCQkJbmV4dCBpZiAkc3VwcHJlc3NfY2N7J2F1dGhvcid9OworCQkJCW5leHQgaWYgJHN1cHByZXNzX2NjeydzZWxmJ30gYW5kICRhdXRob3IgZXEgJHNlbmRlcjsKKwkJCQlwcmludGYoIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iLAorCQkJCQkkMSwgJF8pIHVubGVzcyAkcXVpZXQ7CisJCQkJcHVzaCBAY2MsICQxOworCQkJfQorCQkJZWxzaWYgKC9eVG86XHMrKC4qKSQvKSB7CisJCQkJZm9yZWFjaCBteSAkYWRkciAocGFyc2VfYWRkcmVzc19saW5lKCQxKSkgeworCQkJCQlwcmludGYoIihtYm94KSBBZGRpbmcgdG86ICVzIGZyb20gbGluZSAnJXMnXG4iLAorCQkJCQkJJGFkZHIsICRfKSB1bmxlc3MgJHF1aWV0OworCQkJCQlwdXNoIEB0bywgc2FuaXRpemVfYWRkcmVzcygkYWRkcik7CisJCQkJfQorCQkJfQorCQkJZWxzaWYgKC9eQ2M6XHMrKC4qKSQvKSB7CisJCQkJZm9yZWFjaCBteSAkYWRkciAocGFyc2VfYWRkcmVzc19saW5lKCQxKSkgeworCQkJCQlpZiAodW5xdW90ZV9yZmMyMDQ3KCRhZGRyKSBlcSAkc2VuZGVyKSB7CisJCQkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J3NlbGYnfSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J2NjJ30pOworCQkJCQl9CisJCQkJCXByaW50ZigiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIsCisJCQkJCQkkYWRkciwgJF8pIHVubGVzcyAkcXVpZXQ7CisJCQkJCXB1c2ggQGNjLCAkYWRkcjsKKwkJCQl9CisJCQl9CisJCQllbHNpZiAoL15Db250ZW50LXR5cGU6L2kpIHsKKwkJCQkkaGFzX2NvbnRlbnRfdHlwZSA9IDE7CisJCQkJaWYgKC9jaGFyc2V0PSI/KFteICJdKykvKSB7CisJCQkJCSRib2R5X2VuY29kaW5nID0gJDE7CisJCQkJfQorCQkJCXB1c2ggQHhoLCAkXzsKKwkJCX0KKwkJCWVsc2lmICgvXk1lc3NhZ2UtSWQ6ICguKikvaSkgeworCQkJCSRtZXNzYWdlX2lkID0gJDE7CisJCQl9CisJCQllbHNpZiAoIS9eRGF0ZTpccy8gJiYgL15bLUEtWmEtel0rOlxzK1xTLykgeworCQkJCXB1c2ggQHhoLCAkXzsKKwkJCX0KKworCQl9IGVsc2UgeworCQkJIyBJbiB0aGUgdHJhZGl0aW9uYWwKKwkJCSMgInNlbmQgbG90cyBvZiBlbWFpbCIgZm9ybWF0LAorCQkJIyBsaW5lIDEgPSBjYworCQkJIyBsaW5lIDIgPSBzdWJqZWN0CisJCQkjIFNvIGxldCdzIHN1cHBvcnQgdGhhdCwgdG9vLgorCQkJJGlucHV0X2Zvcm1hdCA9ICdsb3RzJzsKKwkJCWlmIChAY2MgPT0gMCAmJiAhJHN1cHByZXNzX2NjeydjYyd9KSB7CisJCQkJcHJpbnRmKCIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIsCisJCQkJCSRfLCAkXykgdW5sZXNzICRxdWlldDsKKwkJCQlwdXNoIEBjYywgJF87CisJCQl9IGVsc2lmICghZGVmaW5lZCAkc3ViamVjdCkgeworCQkJCSRzdWJqZWN0ID0gJF87CisJCQl9CisJCX0KKwl9CisJIyBOb3cgcGFyc2UgdGhlIG1lc3NhZ2UgYm9keQorCXdoaWxlKDwkZmg+KSB7CisJCSRtZXNzYWdlIC49ICAkXzsKKwkJaWYgKC9eKFNpZ25lZC1vZmYtYnl8Q2MpOiAoLiopJC9pKSB7CisJCQljaG9tcDsKKwkJCW15ICgkd2hhdCwgJGMpID0gKCQxLCAkMik7CisJCQljaG9tcCAkYzsKKwkJCWlmICgkYyBlcSAkc2VuZGVyKSB7CisJCQkJbmV4dCBpZiAoJHN1cHByZXNzX2NjeydzZWxmJ30pOworCQkJfSBlbHNlIHsKKwkJCQluZXh0IGlmICRzdXBwcmVzc19jY3snc29iJ30gYW5kICR3aGF0ID1+IC9TaWduZWQtb2ZmLWJ5L2k7CisJCQkJbmV4dCBpZiAkc3VwcHJlc3NfY2N7J2JvZHljYyd9IGFuZCAkd2hhdCA9fiAvQ2MvaTsKKwkJCX0KKwkJCXB1c2ggQGNjLCAkYzsKKwkJCXByaW50ZigiKGJvZHkpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIsCisJCQkJJGMsICRfKSB1bmxlc3MgJHF1aWV0OworCQl9CisJfQorCWNsb3NlICRmaDsKKworCXB1c2ggQHRvLCByZWNpcGllbnRzX2NtZCgidG8tY21kIiwgInRvIiwgJHRvX2NtZCwgJHQpCisJCWlmIGRlZmluZWQgJHRvX2NtZDsKKwlwdXNoIEBjYywgcmVjaXBpZW50c19jbWQoImNjLWNtZCIsICJjYyIsICRjY19jbWQsICR0KQorCQlpZiBkZWZpbmVkICRjY19jbWQgJiYgISRzdXBwcmVzc19jY3snY2NjbWQnfTsKKworCWlmICgkYnJva2VuX2VuY29kaW5neyR0fSAmJiAhJGhhc19jb250ZW50X3R5cGUpIHsKKwkJJGhhc19jb250ZW50X3R5cGUgPSAxOworCQlwdXNoIEB4aCwgIk1JTUUtVmVyc2lvbjogMS4wIiwKKwkJCSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9JGF1dG9fOGJpdF9lbmNvZGluZyIsCisJCQkiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCI7CisJCSRib2R5X2VuY29kaW5nID0gJGF1dG9fOGJpdF9lbmNvZGluZzsKKwl9CisKKwlpZiAoJGJyb2tlbl9lbmNvZGluZ3skdH0gJiYgIWlzX3JmYzIwNDdfcXVvdGVkKCRzdWJqZWN0KSkgeworCQkkc3ViamVjdCA9IHF1b3RlX3JmYzIwNDcoJHN1YmplY3QsICRhdXRvXzhiaXRfZW5jb2RpbmcpOworCX0KKworCWlmIChkZWZpbmVkICRhdXRob3IgYW5kICRhdXRob3IgbmUgJHNlbmRlcikgeworCQkkbWVzc2FnZSA9ICJGcm9tOiAkYXV0aG9yXG5cbiRtZXNzYWdlIjsKKwkJaWYgKGRlZmluZWQgJGF1dGhvcl9lbmNvZGluZykgeworCQkJaWYgKCRoYXNfY29udGVudF90eXBlKSB7CisJCQkJaWYgKCRib2R5X2VuY29kaW5nIGVxICRhdXRob3JfZW5jb2RpbmcpIHsKKwkJCQkJIyBvaywgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBlbmNvZGluZworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJIyB1aCBvaCwgd2Ugc2hvdWxkIHJlLWVuY29kZQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCSRoYXNfY29udGVudF90eXBlID0gMTsKKwkJCQlwdXNoIEB4aCwKKwkJCQkgICdNSU1FLVZlcnNpb246IDEuMCcsCisJCQkJICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSRhdXRob3JfZW5jb2RpbmciLAorCQkJCSAgJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQnOworCQkJfQorCQl9CisJfQorCisJJG5lZWRzX2NvbmZpcm0gPSAoCisJCSRjb25maXJtIGVxICJhbHdheXMiIG9yCisJCSgkY29uZmlybSA9fiAvXig/OmF1dG98Y2MpJC8gJiYgQGNjKSBvcgorCQkoJGNvbmZpcm0gPX4gL14oPzphdXRvfGNvbXBvc2UpJC8gJiYgJGNvbXBvc2UgJiYgJG1lc3NhZ2VfbnVtID09IDEpKTsKKwkkbmVlZHNfY29uZmlybSA9ICJpbmZvcm0iIGlmICgkbmVlZHNfY29uZmlybSAmJiAkY29uZmlybV91bmNvbmZpZ3VyZWQgJiYgQGNjKTsKKworCUB0byA9IChAaW5pdGlhbF90bywgQHRvKTsKKwlAY2MgPSAoQGluaXRpYWxfY2MsIEBjYyk7CisKKwlteSAkbWVzc2FnZV93YXNfc2VudCA9IHNlbmRfbWVzc2FnZSgpOworCisJIyBzZXQgdXAgZm9yIHRoZSBuZXh0IG1lc3NhZ2UKKwlpZiAoJHRocmVhZCAmJiAkbWVzc2FnZV93YXNfc2VudCAmJgorCQkoY2hhaW5fcmVwbHlfdG8oKSB8fCAhZGVmaW5lZCAkcmVwbHlfdG8gfHwgbGVuZ3RoKCRyZXBseV90bykgPT0gMCB8fAorCQkkbWVzc2FnZV9udW0gPT0gMSkpIHsKKwkJJHJlcGx5X3RvID0gJG1lc3NhZ2VfaWQ7CisJCWlmIChsZW5ndGggJHJlZmVyZW5jZXMgPiAwKSB7CisJCQkkcmVmZXJlbmNlcyAuPSAiXG4gJG1lc3NhZ2VfaWQiOworCQl9IGVsc2UgeworCQkJJHJlZmVyZW5jZXMgPSAiJG1lc3NhZ2VfaWQiOworCQl9CisJfQorCSRtZXNzYWdlX2lkID0gdW5kZWY7Cit9CisKKyMgRXhlY3V0ZSBhIGNvbW1hbmQgKGUuZy4gJHRvX2NtZCkgdG8gZ2V0IGEgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMKKyMgYW5kIHJldHVybiBhIHJlc3VsdHMgYXJyYXkKK3N1YiByZWNpcGllbnRzX2NtZCB7CisJbXkgKCRwcmVmaXgsICR3aGF0LCAkY21kLCAkZmlsZSkgPSBAXzsKKworCW15ICRzYW5pdGl6ZWRfc2VuZGVyID0gc2FuaXRpemVfYWRkcmVzcygkc2VuZGVyKTsKKwlteSBAYWRkcmVzc2VzID0gKCk7CisJb3BlbiBteSAkZmgsICIkY21kIFxRJGZpbGVcRSB8IgorCSAgICBvciBkaWUgIigkcHJlZml4KSBDb3VsZCBub3QgZXhlY3V0ZSAnJGNtZCciOworCXdoaWxlIChteSAkYWRkcmVzcyA9IDwkZmg+KSB7CisJCSRhZGRyZXNzID1+IHMvXlxzKi8vZzsKKwkJJGFkZHJlc3MgPX4gcy9ccyokLy9nOworCQkkYWRkcmVzcyA9IHNhbml0aXplX2FkZHJlc3MoJGFkZHJlc3MpOworCQluZXh0IGlmICgkYWRkcmVzcyBlcSAkc2FuaXRpemVkX3NlbmRlciBhbmQgJHN1cHByZXNzX2Zyb20pOworCQlwdXNoIEBhZGRyZXNzZXMsICRhZGRyZXNzOworCQlwcmludGYoIigkcHJlZml4KSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIsCisJCSAgICAgICAkd2hhdCwgJGFkZHJlc3MsICRjbWQpIHVubGVzcyAkcXVpZXQ7CisJCX0KKwljbG9zZSAkZmgKKwkgICAgb3IgZGllICIoJHByZWZpeCkgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyRjbWQnIjsKKwlyZXR1cm4gQGFkZHJlc3NlczsKK30KKworY2xlYW51cF9jb21wb3NlX2ZpbGVzKCk7CisKK3N1YiBjbGVhbnVwX2NvbXBvc2VfZmlsZXMgeworCXVubGluaygkY29tcG9zZV9maWxlbmFtZSwgJGNvbXBvc2VfZmlsZW5hbWUgLiAiLmZpbmFsIikgaWYgJGNvbXBvc2U7Cit9CisKKyRzbXRwLT5xdWl0IGlmICRzbXRwOworCitzdWIgdW5pcXVlX2VtYWlsX2xpc3QgeworCW15ICVzZWVuOworCW15IEBlbWFpbHM7CisKKwlmb3JlYWNoIG15ICRlbnRyeSAoQF8pIHsKKwkJaWYgKG15ICRjbGVhbiA9IGV4dHJhY3RfdmFsaWRfYWRkcmVzcygkZW50cnkpKSB7CisJCQkkc2VlbnskY2xlYW59IHx8PSAwOworCQkJbmV4dCBpZiAkc2VlbnskY2xlYW59Kys7CisJCQlwdXNoIEBlbWFpbHMsICRlbnRyeTsKKwkJfSBlbHNlIHsKKwkJCXByaW50IFNUREVSUiAiVzogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIiwKKwkJCQkJIiBmcm9tOiAkZW50cnlcbiI7CisJCX0KKwl9CisJcmV0dXJuIEBlbWFpbHM7Cit9CisKK3N1YiB2YWxpZGF0ZV9wYXRjaCB7CisJbXkgJGZuID0gc2hpZnQ7CisJb3BlbihteSAkZmgsICc8JywgJGZuKQorCQlvciBkaWUgInVuYWJsZSB0byBvcGVuICRmbjogJCFcbiI7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJaWYgKGxlbmd0aCgkbGluZSkgPiA5OTgpIHsKKwkJCXJldHVybiAiJC46IHBhdGNoIGNvbnRhaW5zIGEgbGluZSBsb25nZXIgdGhhbiA5OTggY2hhcmFjdGVycyI7CisJCX0KKwl9CisJcmV0dXJuIHVuZGVmOworfQorCitzdWIgZmlsZV9oYXNfbm9uYXNjaWkgeworCW15ICRmbiA9IHNoaWZ0OworCW9wZW4obXkgJGZoLCAnPCcsICRmbikKKwkJb3IgZGllICJ1bmFibGUgdG8gb3BlbiAkZm46ICQhXG4iOworCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCXJldHVybiAxIGlmICRsaW5lID1+IC9bXls6YXNjaWk6XV0vOworCX0KKwlyZXR1cm4gMDsKK30KKworc3ViIGJvZHlfb3Jfc3ViamVjdF9oYXNfbm9uYXNjaWkgeworCW15ICRmbiA9IHNoaWZ0OworCW9wZW4obXkgJGZoLCAnPCcsICRmbikKKwkJb3IgZGllICJ1bmFibGUgdG8gb3BlbiAkZm46ICQhXG4iOworCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCWxhc3QgaWYgJGxpbmUgPX4gL14kLzsKKwkJcmV0dXJuIDEgaWYgJGxpbmUgPX4gL15TdWJqZWN0LipbXls6YXNjaWk6XV0vOworCX0KKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQlyZXR1cm4gMSBpZiAkbGluZSA9fiAvW15bOmFzY2lpOl1dLzsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9naXQtc2gtaTE4bi5zaCBiL2dpdC1zaC1pMThuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMjdmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtc2gtaTE4bi5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisjCisjIFRoaXMgaXMgR2l0J3MgaW50ZXJmYWNlIHRvIGdldHRleHQuc2guIFNlZSBwby9SRUFETUUgZm9yIHVzYWdlCisjIGluc3RydWN0aW9ucy4KKworIyBFeHBvcnQgdGhlIFRFWFRET01BSU4qIGRhdGEgdGhhdCB3ZSBuZWVkIGZvciBHaXQKK1RFWFRET01BSU49Z2l0CitleHBvcnQgVEVYVERPTUFJTgoraWYgdGVzdCAteiAiJEdJVF9URVhURE9NQUlORElSIgordGhlbgorCVRFWFRET01BSU5ESVI9IkBATE9DQUxFRElSQEAiCitlbHNlCisJVEVYVERPTUFJTkRJUj0iJEdJVF9URVhURE9NQUlORElSIgorZmkKK2V4cG9ydCBURVhURE9NQUlORElSCisKKyMgRmlyc3QgZGVjaWRlIHdoYXQgc2NoZW1lIHRvIHVzZS4uLgorR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FPWZhbGx0aHJvdWdoCitpZiB0ZXN0IC1uICJAQFVTRV9HRVRURVhUX1NDSEVNRUBAIgordGhlbgorCUdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRT0iQEBVU0VfR0VUVEVYVF9TQ0hFTUVAQCIKK2VsaWYgdGVzdCAtbiAiJEdJVF9JTlRFUk5BTF9HRVRURVhUX1RFU1RfRkFMTEJBQ0tTIgordGhlbgorCTogbm8gcHJvYmluZyBuZWNlc3NhcnkKK2VsaWYgdGVzdCAtbiAiJEdJVF9HRVRURVhUX1BPSVNPTiIKK3RoZW4KKwlHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUU9cG9pc29uCitlbGlmIHR5cGUgZ2V0dGV4dC5zaCA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwkjIEdOVSBsaWJpbnRsJ3MgZ2V0dGV4dC5zaAorCUdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRT1nbnUKK2VsaWYgdGVzdCAiJChnZXR0ZXh0IC1oIDI+JjEpIiA9ICItaCIKK3RoZW4KKwkjIGdldHRleHQgYmluYXJ5IGV4aXN0cyBidXQgbm8gZ2V0dGV4dC5zaC4gbGlrZWx5IHRvIGJlIGEgZ2V0dGV4dAorCSMgYmluYXJ5IG9uIGEgU29sYXJpcyBvciBzb21ldGhpbmcgdGhhdCBpcyBub3QgR05VIGxpYmludGwgYW5kCisJIyBsYWNrIGV2YWxfZ2V0dGV4dC4KKwlHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUU9Z2V0dGV4dF93aXRob3V0X2V2YWxfZ2V0dGV4dAorZmkKK2V4cG9ydCBHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUKKworIyAuLi4gYW5kIHRoZW4gZm9sbG93IHRoYXQgZGVjaXNpb24uCitjYXNlICIkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIiBpbgorZ251KQorCSMgVXNlIGxpYmludGwncyBnZXR0ZXh0LnNoLCBvciBmYWxsIGJhY2sgdG8gRW5nbGlzaCBpZiB3ZSBjYW4ndC4KKwkuIGdldHRleHQuc2gKKwk7OworZ2V0dGV4dF93aXRob3V0X2V2YWxfZ2V0dGV4dCkKKwkjIFNvbGFyaXMgaGFzIGEgZ2V0dGV4dCgxKSBidXQgbm8gZXZhbF9nZXR0ZXh0KDEpCisJZXZhbF9nZXR0ZXh0ICgpIHsKKwkJZ2V0dGV4dCAiJDEiIHwgKAorCQkJZXhwb3J0IFBBVEggJChnaXQgc2gtaTE4bi0tZW52c3Vic3QgLS12YXJpYWJsZXMgIiQxIik7CisJCQlnaXQgc2gtaTE4bi0tZW52c3Vic3QgIiQxIgorCQkpCisJfQorCTs7Citwb2lzb24pCisJIyBFbWl0IGdhcmJhZ2Ugc28gdGhhdCB0ZXN0cyB0aGF0IGluY29ycmVjdGx5IHJlbHkgb24gdHJhbnNsYXRhYmxlCisJIyBzdHJpbmdzIHdpbGwgZmFpbC4KKwlnZXR0ZXh0ICgpIHsKKwkJcHJpbnRmICIlcyIgIiMgR0VUVEVYVCBQT0lTT04gIyIKKwl9CisKKwlldmFsX2dldHRleHQgKCkgeworCQlwcmludGYgIiVzIiAiIyBHRVRURVhUIFBPSVNPTiAjIgorCX0KKwk7OworKikKKwlnZXR0ZXh0ICgpIHsKKwkJcHJpbnRmICIlcyIgIiQxIgorCX0KKworCWV2YWxfZ2V0dGV4dCAoKSB7CisJCXByaW50ZiAiJXMiICIkMSIgfCAoCisJCQlleHBvcnQgUEFUSCAkKGdpdCBzaC1pMThuLS1lbnZzdWJzdCAtLXZhcmlhYmxlcyAiJDEiKTsKKwkJCWdpdCBzaC1pMThuLS1lbnZzdWJzdCAiJDEiCisJCSkKKwl9CisJOzsKK2VzYWMKKworIyBHaXQtc3BlY2lmaWMgd3JhcHBlciBmdW5jdGlvbnMKK2dldHRleHRsbiAoKSB7CisJZ2V0dGV4dCAiJDEiCisJZWNobworfQorCitldmFsX2dldHRleHRsbiAoKSB7CisJZXZhbF9nZXR0ZXh0ICIkMSIKKwllY2hvCit9CmRpZmYgLS1naXQgYS9naXQtc2gtc2V0dXAuc2ggYi9naXQtc2gtc2V0dXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwZTBiYwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zaC1zZXR1cC5zaApAQCAtMCwwICsxLDI3NiBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgaXMgaW5jbHVkZWQgaW4gY29tbWFuZHMgdGhhdCBlaXRoZXIgaGF2ZSB0byBiZSBydW4gZnJvbSB0aGUgdG9wbGV2ZWwKKyMgb2YgdGhlIHJlcG9zaXRvcnksIG9yIHdpdGggR0lUX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBwcm9wZXJseS4KKyMgSWYgdGhlIEdJVF9ESVIgZG9lcyBub3QgbG9vayBsaWtlIHRoZSByaWdodCBjb3JyZWN0IGdpdC1yZXBvc2l0b3J5LAorIyBpdCBkaWVzLgorCisjIEhhdmluZyB0aGlzIHZhcmlhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQgd291bGQgYnJlYWsgc2NyaXB0cyBiZWNhdXNlCisjIHlvdSB3b3VsZCBjYXVzZSAiY2QiIHRvIGJlIHRha2VuIHRvIHVuZXhwZWN0ZWQgcGxhY2VzLiAgSWYgeW91CisjIGxpa2UgQ0RQQVRILCBkZWZpbmUgaXQgZm9yIHlvdXIgaW50ZXJhY3RpdmUgc2hlbGwgc2Vzc2lvbnMgd2l0aG91dAorIyBleHBvcnRpbmcgaXQuCisjIEJ1dCB3ZSBwcm90ZWN0IG91cnNlbHZlcyBmcm9tIHN1Y2ggYSB1c2VyIG1pc3Rha2UgbmV2ZXJ0aGVsZXNzLgordW5zZXQgQ0RQQVRICisKKyMgU2ltaWxhcmx5IGZvciBJRlMKK3Vuc2V0IElGUworCitnaXRfYnJva2VuX3BhdGhfZml4ICgpIHsKKwljYXNlICI6JFBBVEg6IiBpbgorCSo6JDE6KikgOiBvayA7OworCSopCisJCVBBVEg9JCgKKwkJCVNBTkVfVE9PTF9QQVRIPSIkMSIKKwkJCUlGUz06IHBhdGg9IHNlcD0KKwkJCXNldCB4ICRQQVRICisJCQlzaGlmdAorCQkJZm9yIGVsZW0KKwkJCWRvCisJCQkJY2FzZSAiJFNBTkVfVE9PTF9QQVRIOiRlbGVtIiBpbgorCQkJCSg/KjovYmluIHwgPyo6L3Vzci9iaW4pCisJCQkJCXBhdGg9IiRwYXRoJHNlcCRTQU5FX1RPT0xfUEFUSCIKKwkJCQkJc2VwPToKKwkJCQkJU0FORV9UT09MX1BBVEg9CisJCQkJZXNhYworCQkJCXBhdGg9IiRwYXRoJHNlcCRlbGVtIgorCQkJCXNlcD06CisJCQlkb25lCisJCQllY2hvICIkcGF0aCIKKwkJKQorCQk7OworCWVzYWMKK30KKworIyBAQEJST0tFTl9QQVRIX0ZJWEBACisKK2RpZSAoKSB7CisJZGllX3dpdGhfc3RhdHVzIDEgIiRAIgorfQorCitkaWVfd2l0aF9zdGF0dXMgKCkgeworCXN0YXR1cz0kMQorCXNoaWZ0CisJZWNobyA+JjIgIiQqIgorCWV4aXQgIiRzdGF0dXMiCit9CisKK0dJVF9RVUlFVD0KKworc2F5ICgpIHsKKwlpZiB0ZXN0IC16ICIkR0lUX1FVSUVUIgorCXRoZW4KKwkJcHJpbnRmICclc1xuJyAiJCoiCisJZmkKK30KKworaWYgdGVzdCAtbiAiJE9QVElPTlNfU1BFQyI7IHRoZW4KKwl1c2FnZSgpIHsKKwkJIiQwIiAtaAorCQlleGl0IDEKKwl9CisKKwlwYXJzZW9wdF9leHRyYT0KKwlbIC1uICIkT1BUSU9OU19LRUVQREFTSERBU0giIF0gJiYKKwkJcGFyc2VvcHRfZXh0cmE9Ii0ta2VlcC1kYXNoZGFzaCIKKworCWV2YWwgIiQoCisJCWVjaG8gIiRPUFRJT05TX1NQRUMiIHwKKwkJCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAkcGFyc2VvcHRfZXh0cmEgLS0gIiRAIiB8fAorCQllY2hvIGV4aXQgJD8KKwkpIgorZWxzZQorCWRhc2hsZXNzPSQoYmFzZW5hbWUgIiQwIiB8IHNlZCAtZSAncy8tLyAvJykKKwl1c2FnZSgpIHsKKwkJZGllICJVc2FnZTogJGRhc2hsZXNzICRVU0FHRSIKKwl9CisKKwlpZiBbIC16ICIkTE9OR19VU0FHRSIgXQorCXRoZW4KKwkJTE9OR19VU0FHRT0iVXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCisJZWxzZQorCQlMT05HX1VTQUdFPSJVc2FnZTogJGRhc2hsZXNzICRVU0FHRQorCiskTE9OR19VU0FHRSIKKwlmaQorCisJY2FzZSAiJDEiIGluCisJCS1oKQorCQllY2hvICIkTE9OR19VU0FHRSIKKwkJZXhpdAorCWVzYWMKK2ZpCisKK3NldF9yZWZsb2dfYWN0aW9uKCkgeworCWlmIFsgLXogIiR7R0lUX1JFRkxPR19BQ1RJT046K3NldH0iIF0KKwl0aGVuCisJCUdJVF9SRUZMT0dfQUNUSU9OPSIkKiIKKwkJZXhwb3J0IEdJVF9SRUZMT0dfQUNUSU9OCisJZmkKK30KKworZ2l0X2VkaXRvcigpIHsKKwlpZiB0ZXN0IC16ICIke0dJVF9FRElUT1I6K3NldH0iCisJdGhlbgorCQlHSVRfRURJVE9SPSIkKGdpdCB2YXIgR0lUX0VESVRPUikiIHx8IHJldHVybiAkPworCWZpCisKKwlldmFsICIkR0lUX0VESVRPUiIgJyIkQCInCit9CisKK2dpdF9wYWdlcigpIHsKKwlpZiB0ZXN0IC10IDEKKwl0aGVuCisJCUdJVF9QQUdFUj0kKGdpdCB2YXIgR0lUX1BBR0VSKQorCWVsc2UKKwkJR0lUX1BBR0VSPWNhdAorCWZpCisJOiAke0xFU1M9LUZSU1h9CisJZXhwb3J0IExFU1MKKworCWV2YWwgIiRHSVRfUEFHRVIiICciJEAiJworfQorCitzYW5lX2dyZXAgKCkgeworCUdSRVBfT1BUSU9OUz0gTENfQUxMPUMgZ3JlcCAiJEAiCit9CisKK3NhbmVfZWdyZXAgKCkgeworCUdSRVBfT1BUSU9OUz0gTENfQUxMPUMgZWdyZXAgIiRAIgorfQorCitpc19iYXJlX3JlcG9zaXRvcnkgKCkgeworCWdpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkKK30KKworY2RfdG9fdG9wbGV2ZWwgKCkgeworCWNkdXA9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkgJiYKKwljZCAiJGNkdXAiIHx8IHsKKwkJZWNobyA+JjIgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCisJCWV4aXQgMQorCX0KK30KKworcmVxdWlyZV93b3JrX3RyZWVfZXhpc3RzICgpIHsKKwlpZiB0ZXN0ICJ6JChnaXQgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5KSIgIT0gemZhbHNlCisJdGhlbgorCQlkaWUgImZhdGFsOiAkMCBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKKwlmaQorfQorCityZXF1aXJlX3dvcmtfdHJlZSAoKSB7CisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLXdvcmstdHJlZSAyPi9kZXYvbnVsbCkiID0gdHJ1ZSB8fAorCWRpZSAiZmF0YWw6ICQwIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIgorfQorCityZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSAoKSB7CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4vZGV2L251bGwgfHwgZXhpdCAxCisJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaAorCWVycj0wCisKKwlpZiAhIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcworCXRoZW4KKwkJZWNobyA+JjIgIkNhbm5vdCAkMTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCisJCWVycj0xCisJZmkKKworCWlmICEgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCAtLWlnbm9yZS1zdWJtb2R1bGVzIEhFQUQgLS0KKwl0aGVuCisJCWlmIFsgJGVyciA9IDAgXQorCQl0aGVuCisJCSAgICBlY2hvID4mMiAiQ2Fubm90ICQxOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorCQllbHNlCisJCSAgICBlY2hvID4mMiAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorCQlmaQorCQllcnI9MQorCWZpCisKKwlpZiBbICRlcnIgPSAxIF0KKwl0aGVuCisJCXRlc3QgLW4gIiQyIiAmJiBlY2hvID4mMiAiJDIiCisJCWV4aXQgMQorCWZpCit9CisKK2dldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQgKCkgeworCXBpY2tfYXV0aG9yX3NjcmlwdD0nCisJL15hdXRob3IgL3sKKwkJcy8nXCcnLydcJydcXCdcJ1wnJy9nCisJCWgKKwkJcy9eYXV0aG9yIFwoW148XSpcKSA8W14+XSo+IC4qJC9cMS8KKwkJcy8uKi9HSVRfQVVUSE9SX05BTUU9J1wnJyYnXCcnL3AKKworCQlnCisJCXMvXmF1dGhvciBbXjxdKiA8XChbXj5dKlwpPiAuKiQvXDEvCisJCXMvLiovR0lUX0FVVEhPUl9FTUFJTD0nXCcnJidcJycvcAorCisJCWcKKwkJcy9eYXV0aG9yIFtePF0qIDxbXj5dKj4gXCguKlwpJC9AXDEvCisJCXMvLiovR0lUX0FVVEhPUl9EQVRFPSdcJycmJ1wnJy9wCisKKwkJcQorCX0KKwknCisJZW5jb2Rpbmc9JChnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgfHwgZWNobyBVVEYtOCkKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1yYXcgLS1lbmNvZGluZz0iJGVuY29kaW5nIiAiJDEiIC0tIHwKKwlMQU5HPUMgTENfQUxMPUMgc2VkIC1uZSAiJHBpY2tfYXV0aG9yX3NjcmlwdCIKK30KKworIyBDbGVhciByZXBvLWxvY2FsIEdJVF8qIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVXNlZnVsIHdoZW4gc3dpdGNoaW5nIHRvCisjIGFub3RoZXIgcmVwb3NpdG9yeSAoZS5nLiB3aGVuIGVudGVyaW5nIGEgc3VibW9kdWxlKS4gU2VlIGFsc28gdGhlIGVudgorIyBsaXN0IGluIGdpdF9jb25uZWN0KCkKK2NsZWFyX2xvY2FsX2dpdF9lbnYoKSB7CisJdW5zZXQgJChnaXQgcmV2LXBhcnNlIC0tbG9jYWwtZW52LXZhcnMpCit9CisKKworIyBQbGF0Zm9ybSBzcGVjaWZpYyB0d2Vha3MgdG8gd29yayBhcm91bmQgc29tZSBjb21tYW5kcworY2FzZSAkKHVuYW1lIC1zKSBpbgorKk1JTkdXKikKKwkjIFdpbmRvd3MgaGFzIGl0cyBvd24gKGluY29tcGF0aWJsZSkgc29ydCBhbmQgZmluZAorCXNvcnQgKCkgeworCQkvdXNyL2Jpbi9zb3J0ICIkQCIKKwl9CisJZmluZCAoKSB7CisJCS91c3IvYmluL2ZpbmQgIiRAIgorCX0KKwkjIGdpdCBzZWVzIFdpbmRvd3Mtc3R5bGUgcHdkCisJcHdkICgpIHsKKwkJYnVpbHRpbiBwd2QgLVcKKwl9CisJaXNfYWJzb2x1dGVfcGF0aCAoKSB7CisJCWNhc2UgIiQxIiBpbgorCQlbL1xcXSogfCBbQS1aYS16XToqKQorCQkJcmV0dXJuIDAgOzsKKwkJZXNhYworCQlyZXR1cm4gMQorCX0KKwk7OworKikKKwlpc19hYnNvbHV0ZV9wYXRoICgpIHsKKwkJY2FzZSAiJDEiIGluCisJCS8qKQorCQkJcmV0dXJuIDAgOzsKKwkJZXNhYworCQlyZXR1cm4gMQorCX0KK2VzYWMKKworIyBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdmFsaWQgcmVwb3NpdG9yeSBvZiBhIHZpbnRhZ2Ugd2UgdW5kZXJzdGFuZCwKKyMgaWYgd2UgcmVxdWlyZSB0byBiZSBpbiBhIGdpdCByZXBvc2l0b3J5LgoraWYgdGVzdCAteiAiJE5PTkdJVF9PSyIKK3RoZW4KKwlHSVRfRElSPSQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpIHx8IGV4aXQKKwlpZiBbIC16ICIkU1VCRElSRUNUT1JZX09LIiBdCisJdGhlbgorCQl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXApIiB8fCB7CisJCQlleGl0PSQ/CisJCQllY2hvID4mMiAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKKwkJCWV4aXQgJGV4aXQKKwkJfQorCWZpCisJdGVzdCAtbiAiJEdJVF9ESVIiICYmIEdJVF9ESVI9JChjZCAiJEdJVF9ESVIiICYmIHB3ZCkgfHwgeworCQllY2hvID4mMiAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCisJCWV4aXQgMQorCX0KKwk6ICR7R0lUX09CSkVDVF9ESVJFQ1RPUlk9IiRHSVRfRElSL29iamVjdHMifQorZmkKZGlmZiAtLWdpdCBhL2dpdC1zdGFzaC5zaCBiL2dpdC1zdGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYmVmZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXN0YXNoLnNoCkBAIC0wLDAgKzEsNTc3IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDA3LCBOYW5ha28gU2hpcmFpc2hpCisKK2Rhc2hsZXNzPSQoYmFzZW5hbWUgIiQwIiB8IHNlZCAtZSAncy8tLyAvJykKK1VTQUdFPSJsaXN0IFs8b3B0aW9ucz5dCisgICBvcjogJGRhc2hsZXNzIHNob3cgWzxzdGFzaD5dCisgICBvcjogJGRhc2hsZXNzIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XQorICAgb3I6ICRkYXNobGVzcyAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKyAgIG9yOiAkZGFzaGxlc3MgYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0KKyAgIG9yOiAkZGFzaGxlc3MgW3NhdmUgWy0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdCisJCSAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XV0KKyAgIG9yOiAkZGFzaGxlc3MgY2xlYXIiCisKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKK09QVElPTlNfU1BFQz0KK1NUQVJUX0RJUj1gcHdkYAorLiBnaXQtc2gtc2V0dXAKKy4gZ2l0LXNoLWkxOG4KK3JlcXVpcmVfd29ya190cmVlCitjZF90b190b3BsZXZlbAorCitUTVA9IiRHSVRfRElSLy5naXQtc3Rhc2guJCQiCitUTVBpbmRleD0ke0dJVF9JTkRFWF9GSUxFLSIkR0lUX0RJUi9pbmRleCJ9LnN0YXNoLiQkCit0cmFwICdybSAtZiAiJFRNUC0iKiAiJFRNUGluZGV4IicgMAorCityZWZfc3Rhc2g9cmVmcy9zdGFzaAorCitpZiBnaXQgY29uZmlnIC0tZ2V0LWNvbG9yYm9vbCBjb2xvci5pbnRlcmFjdGl2ZTsgdGhlbgorICAgICAgIGhlbHBfY29sb3I9IiQoZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBjb2xvci5pbnRlcmFjdGl2ZS5oZWxwICdyZWQgYm9sZCcpIgorICAgICAgIHJlc2V0X2NvbG9yPSIkKGdpdCBjb25maWcgLS1nZXQtY29sb3IgJycgcmVzZXQpIgorZWxzZQorICAgICAgIGhlbHBfY29sb3I9CisgICAgICAgcmVzZXRfY29sb3I9CitmaQorCitub19jaGFuZ2VzICgpIHsKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS1pZ25vcmUtc3VibW9kdWxlcyAtLSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcyAmJgorCSh0ZXN0IC16ICIkdW50cmFja2VkIiB8fCB0ZXN0IC16ICIkKHVudHJhY2tlZF9maWxlcykiKQorfQorCit1bnRyYWNrZWRfZmlsZXMgKCkgeworCWV4Y2xfb3B0PS0tZXhjbHVkZS1zdGFuZGFyZAorCXRlc3QgIiR1bnRyYWNrZWQiID0gImFsbCIgJiYgZXhjbF9vcHQ9CisJZ2l0IGxzLWZpbGVzIC1vIC16ICRleGNsX29wdAorfQorCitjbGVhcl9zdGFzaCAoKSB7CisJaWYgdGVzdCAkIyAhPSAwCisJdGhlbgorCQlkaWUgIiQoZ2V0dGV4dCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIikiCisJZmkKKwlpZiBjdXJyZW50PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkcmVmX3N0YXNoIDI+L2Rldi9udWxsKQorCXRoZW4KKwkJZ2l0IHVwZGF0ZS1yZWYgLWQgJHJlZl9zdGFzaCAkY3VycmVudAorCWZpCit9CisKK2NyZWF0ZV9zdGFzaCAoKSB7CisJc3Rhc2hfbXNnPSIkMSIKKwl1bnRyYWNrZWQ9IiQyIgorCisJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2gKKwlpZiBub19jaGFuZ2VzCisJdGhlbgorCQlleGl0IDAKKwlmaQorCisJIyBzdGF0ZSBvZiB0aGUgYmFzZSBjb21taXQKKwlpZiBiX2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKwl0aGVuCisJCWhlYWQ9JChnaXQgcmV2LWxpc3QgLS1vbmVsaW5lIC1uIDEgSEVBRCAtLSkKKwllbHNlCisJCWRpZSAiJChnZXR0ZXh0ICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIpIgorCWZpCisKKwlpZiBicmFuY2g9JChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpCisJdGhlbgorCQlicmFuY2g9JHticmFuY2gjcmVmcy9oZWFkcy99CisJZWxzZQorCQlicmFuY2g9JyhubyBicmFuY2gpJworCWZpCisJbXNnPSQocHJpbnRmICclczogJXMnICIkYnJhbmNoIiAiJGhlYWQiKQorCisJIyBzdGF0ZSBvZiB0aGUgaW5kZXgKKwlpX3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlpX2NvbW1pdD0kKHByaW50ZiAnaW5kZXggb24gJXNcbicgIiRtc2ciIHwKKwkJZ2l0IGNvbW1pdC10cmVlICRpX3RyZWUgLXAgJGJfY29tbWl0KSB8fAorCQlkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiKSIKKworCWlmIHRlc3QgLW4gIiR1bnRyYWNrZWQiCisJdGhlbgorCQkjIFVudHJhY2tlZCBmaWxlcyBhcmUgc3RvcmVkIGJ5IHRoZW1zZWx2ZXMgaW4gYSBwYXJlbnRsZXNzIGNvbW1pdCwgZm9yCisJCSMgZWFzZSBvZiB1bnBhY2tpbmcgbGF0ZXIuCisJCXVfY29tbWl0PSQoCisJCQl1bnRyYWNrZWRfZmlsZXMgfCAoCisJCQkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFPSIkVE1QaW5kZXgiCisJCQkJcm0gLWYgIiRUTVBpbmRleCIgJiYKKwkJCQlnaXQgdXBkYXRlLWluZGV4IC16IC0tYWRkIC0tcmVtb3ZlIC0tc3RkaW4gJiYKKwkJCQl1X3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJCQlwcmludGYgJ3VudHJhY2tlZCBmaWxlcyBvbiAlc1xuJyAiJG1zZyIgfCBnaXQgY29tbWl0LXRyZWUgJHVfdHJlZSAgJiYKKwkJCQlybSAtZiAiJFRNUGluZGV4IgorCQkpICkgfHwgZGllICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorCisJCXVudHJhY2tlZF9jb21taXRfb3B0aW9uPSItcCAkdV9jb21taXQiOworCWVsc2UKKwkJdW50cmFja2VkX2NvbW1pdF9vcHRpb249CisJZmkKKworCWlmIHRlc3QgLXogIiRwYXRjaF9tb2RlIgorCXRoZW4KKworCQkjIHN0YXRlIG9mIHRoZSB3b3JraW5nIHRyZWUKKwkJd190cmVlPSQoICgKKwkJCWdpdCByZWFkLXRyZWUgLS1pbmRleC1vdXRwdXQ9IiRUTVBpbmRleCIgLW0gJGlfdHJlZSAmJgorCQkJR0lUX0lOREVYX0ZJTEU9IiRUTVBpbmRleCIgJiYKKwkJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQkJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgLXogSEVBRCAtLSA+IiRUTVAtc3RhZ2VuYW1lcyIgJiYKKwkJCWdpdCB1cGRhdGUtaW5kZXggLXogLS1hZGQgLS1yZW1vdmUgLS1zdGRpbiA8IiRUTVAtc3RhZ2VuYW1lcyIgJiYKKwkJCWdpdCB3cml0ZS10cmVlICYmCisJCQlybSAtZiAiJFRNUGluZGV4IgorCQkpICkgfHwKKwkJCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIpIgorCisJZWxzZQorCisJCXJtIC1mICIkVE1QLWluZGV4IiAmJgorCQlHSVRfSU5ERVhfRklMRT0iJFRNUC1pbmRleCIgZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisKKwkJIyBmaW5kIG91dCB3aGF0IHRoZSB1c2VyIHdhbnRzCisJCUdJVF9JTkRFWF9GSUxFPSIkVE1QLWluZGV4IiBcCisJCQlnaXQgYWRkLS1pbnRlcmFjdGl2ZSAtLXBhdGNoPXN0YXNoIC0tICYmCisKKwkJIyBzdGF0ZSBvZiB0aGUgd29ya2luZyB0cmVlCisJCXdfdHJlZT0kKEdJVF9JTkRFWF9GSUxFPSIkVE1QLWluZGV4IiBnaXQgd3JpdGUtdHJlZSkgfHwKKwkJZGllICIkKGdldHRleHQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIikiCisKKwkJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEICR3X3RyZWUgLS0gPiIkVE1QLXBhdGNoIiAmJgorCQl0ZXN0IC1zICIkVE1QLXBhdGNoIiB8fAorCQlkaWUgIiQoZ2V0dGV4dCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIpIgorCisJCXJtIC1mICIkVE1QLWluZGV4IiB8fAorCQlkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiKSIKKworCWZpCisKKwkjIGNyZWF0ZSB0aGUgc3Rhc2gKKwlpZiB0ZXN0IC16ICIkc3Rhc2hfbXNnIgorCXRoZW4KKwkJc3Rhc2hfbXNnPSQocHJpbnRmICdXSVAgb24gJXMnICIkbXNnIikKKwllbHNlCisJCXN0YXNoX21zZz0kKHByaW50ZiAnT24gJXM6ICVzJyAiJGJyYW5jaCIgIiRzdGFzaF9tc2ciKQorCWZpCisJd19jb21taXQ9JChwcmludGYgJyVzXG4nICIkc3Rhc2hfbXNnIiB8CisJZ2l0IGNvbW1pdC10cmVlICR3X3RyZWUgLXAgJGJfY29tbWl0IC1wICRpX2NvbW1pdCAkdW50cmFja2VkX2NvbW1pdF9vcHRpb24pIHx8CisJZGllICIkKGdldHRleHQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIikiCit9CisKK3NhdmVfc3Rhc2ggKCkgeworCWtlZXBfaW5kZXg9CisJcGF0Y2hfbW9kZT0KKwl1bnRyYWNrZWQ9CisJd2hpbGUgdGVzdCAkIyAhPSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1rfC0ta2VlcC1pbmRleCkKKwkJCWtlZXBfaW5kZXg9dAorCQkJOzsKKwkJLS1uby1rZWVwLWluZGV4KQorCQkJa2VlcF9pbmRleD1uCisJCQk7OworCQktcHwtLXBhdGNoKQorCQkJcGF0Y2hfbW9kZT10CisJCQkjIG9ubHkgZGVmYXVsdCB0byBrZWVwIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBvdmVycmlkZQorCQkJdGVzdCAteiAiJGtlZXBfaW5kZXgiICYmIGtlZXBfaW5kZXg9dAorCQkJOzsKKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD10CisJCQk7OworCQktdXwtLWluY2x1ZGUtdW50cmFja2VkKQorCQkJdW50cmFja2VkPXVudHJhY2tlZAorCQkJOzsKKwkJLWF8LS1hbGwpCisJCQl1bnRyYWNrZWQ9YWxsCisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQlvcHRpb249IiQxIgorCQkJIyBUUkFOU0xBVE9SUzogJG9wdGlvbiBpcyBhbiBpbnZhbGlkIG9wdGlvbiwgbGlrZQorCQkJIyBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKwkJCSMgc2Vjb25kIGxpbmUgY29ycmVzcG9uZCB0byAiZXJyb3I6ICIuIFNvIHlvdSBzaG91bGQgbGluZQorCQkJIyB1cCB0aGUgc2Vjb25kIGxpbmUgd2l0aCBob3dldmVyIG1hbnkgY2hhcmFjdGVycyB0aGUKKwkJCSMgdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKwkJCSMgRW5nbGlzaCB0aGlzIGlzOgorCQkJIworCQkJIyAgICAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKwkJCSMgICAgZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6IC0tYmxhaC1ibGFoCisJCQkjICAgICAgICAgICBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICctLWJsYWgtYmxhaCcKKwkJCWV2YWxfZ2V0dGV4dGxuICJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogXCRvcHRpb24KKyAgICAgICBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICdcJG9wdGlvbiciCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJaWYgdGVzdCAtbiAiJHBhdGNoX21vZGUiICYmIHRlc3QgLW4gIiR1bnRyYWNrZWQiCisJdGhlbgorCSAgICBkaWUgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCisJZmkKKworCXN0YXNoX21zZz0iJCoiCisKKwlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAorCWlmIG5vX2NoYW5nZXMKKwl0aGVuCisJCXNheSAiJChnZXR0ZXh0ICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiKSIKKwkJZXhpdCAwCisJZmkKKwl0ZXN0IC1mICIkR0lUX0RJUi9sb2dzLyRyZWZfc3Rhc2giIHx8CisJCWNsZWFyX3N0YXNoIHx8IGRpZSAiJChnZXR0ZXh0ICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIpIgorCisJY3JlYXRlX3N0YXNoICIkc3Rhc2hfbXNnIiAkdW50cmFja2VkCisKKwkjIE1ha2Ugc3VyZSB0aGUgcmVmbG9nIGZvciBzdGFzaCBpcyBrZXB0LgorCTogPj4iJEdJVF9ESVIvbG9ncy8kcmVmX3N0YXNoIgorCisJZ2l0IHVwZGF0ZS1yZWYgLW0gIiRzdGFzaF9tc2ciICRyZWZfc3Rhc2ggJHdfY29tbWl0IHx8CisJCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiKSIKKwlzYXkgU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICIkc3Rhc2hfbXNnIgorCisJaWYgdGVzdCAteiAiJHBhdGNoX21vZGUiCisJdGhlbgorCQlnaXQgcmVzZXQgLS1oYXJkICR7R0lUX1FVSUVUOistcX0KKwkJdGVzdCAiJHVudHJhY2tlZCIgPSAiYWxsIiAmJiBDTEVBTl9YX09QVElPTj0teCB8fCBDTEVBTl9YX09QVElPTj0KKwkJaWYgdGVzdCAtbiAiJHVudHJhY2tlZCIKKwkJdGhlbgorCQkJZ2l0IGNsZWFuIC0tZm9yY2UgLS1xdWlldCAtZCAkQ0xFQU5fWF9PUFRJT04KKwkJZmkKKworCQlpZiB0ZXN0ICIka2VlcF9pbmRleCIgPSAidCIgJiYgdGVzdCAtbiAkaV90cmVlCisJCXRoZW4KKwkJCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSAkaV90cmVlCisJCWZpCisJZWxzZQorCQlnaXQgYXBwbHkgLVIgPCAiJFRNUC1wYXRjaCIgfHwKKwkJZGllICIkKGdldHRleHQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIpIgorCisJCWlmIHRlc3QgIiRrZWVwX2luZGV4IiAhPSAidCIKKwkJdGhlbgorCQkJZ2l0IHJlc2V0CisJCWZpCisJZmkKK30KKworaGF2ZV9zdGFzaCAoKSB7CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkcmVmX3N0YXNoID4vZGV2L251bGwgMj4mMQorfQorCitsaXN0X3N0YXNoICgpIHsKKwloYXZlX3N0YXNoIHx8IHJldHVybiAwCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWdkOiAlZ3MiIC1nICIkQCIgJHJlZl9zdGFzaCAtLQorfQorCitzaG93X3N0YXNoICgpIHsKKwlhc3NlcnRfc3Rhc2hfbGlrZSAiJEAiCisKKwlnaXQgZGlmZiAke0ZMQUdTOi0tLXN0YXR9ICRiX2NvbW1pdCAkd19jb21taXQKK30KKworIworIyBQYXJzZXMgdGhlIHJlbWFpbmluZyBvcHRpb25zIGxvb2tpbmcgZm9yIGZsYWdzIGFuZAorIyBhdCBtb3N0IG9uZSByZXZpc2lvbiBkZWZhdWx0aW5nIHRvICR7cmVmX3N0YXNofUB7MH0KKyMgaWYgbm9uZSBmb3VuZC4KKyMKKyMgRGVyaXZlcyByZWxhdGVkIHRyZWUgYW5kIGNvbW1pdCBvYmplY3RzIGZyb20gdGhlCisjIHJldmlzaW9uLCBpZiBvbmUgaXMgZm91bmQuCisjCisjIHN0YXNoIHJlY29yZHMgdGhlIHdvcmsgdHJlZSwgYW5kIGlzIGEgbWVyZ2UgYmV0d2VlbiB0aGUKKyMgYmFzZSBjb21taXQgKGZpcnN0IHBhcmVudCkgYW5kIHRoZSBpbmRleCB0cmVlIChzZWNvbmQgcGFyZW50KS4KKyMKKyMgICBSRVYgaXMgc2V0IHRvIHRoZSBzeW1ib2xpYyB2ZXJzaW9uIG9mIHRoZSBzcGVjaWZpZWQgc3Rhc2gtbGlrZSBjb21taXQKKyMgICBJU19TVEFTSF9MSUtFIGlzIG5vbi1ibGFuayBpZiAke1JFVn0gbG9va3MgbGlrZSBhIHN0YXNoCisjICAgSVNfU1RBU0hfUkVGIGlzIG5vbi1ibGFuayBpZiB0aGUgJHtSRVZ9IGxvb2tzIGxpa2UgYSBzdGFzaCByZWYKKyMgICBzIGlzIHNldCB0byB0aGUgU0hBMSBvZiB0aGUgc3Rhc2ggY29tbWl0CisjICAgd19jb21taXQgaXMgc2V0IHRvIHRoZSBjb21taXQgY29udGFpbmluZyB0aGUgd29ya2luZyB0cmVlCisjICAgYl9jb21taXQgaXMgc2V0IHRvIHRoZSBiYXNlIGNvbW1pdAorIyAgIGlfY29tbWl0IGlzIHNldCB0byB0aGUgY29tbWl0IGNvbnRhaW5pbmcgdGhlIGluZGV4IHRyZWUKKyMgICB1X2NvbW1pdCBpcyBzZXQgdG8gdGhlIGNvbW1pdCBjb250YWluaW5nIHRoZSB1bnRyYWNrZWQgZmlsZXMgdHJlZQorIyAgIHdfdHJlZSBpcyBzZXQgdG8gdGhlIHdvcmtpbmcgdHJlZQorIyAgIGJfdHJlZSBpcyBzZXQgdG8gdGhlIGJhc2UgdHJlZQorIyAgIGlfdHJlZSBpcyBzZXQgdG8gdGhlIGluZGV4IHRyZWUKKyMgICB1X3RyZWUgaXMgc2V0IHRvIHRoZSB1bnRyYWNrZWQgZmlsZXMgdHJlZQorIworIyAgIEdJVF9RVUlFVCBpcyBzZXQgdG8gdCBpZiAtcSBpcyBzcGVjaWZpZWQKKyMgICBJTkRFWF9PUFRJT04gaXMgc2V0IHRvIC0taW5kZXggaWYgLS1pbmRleCBpcyBzcGVjaWZpZWQuCisjICAgRkxBR1MgaXMgc2V0IHRvIHRoZSByZW1haW5pbmcgZmxhZ3MKKyMKKyMgZGllcyBpZjoKKyMgICAqIHRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQKKyMgICAqIG5vIHJldmlzaW9uIGlzIHNwZWNpZmllZCBhbmQgdGhlcmUgaXMgbm8gc3Rhc2ggc3RhY2sKKyMgICAqIGEgcmV2aXNpb24gaXMgc3BlY2lmaWVkIHdoaWNoIGNhbm5vdCBiZSByZXNvbHZlIHRvIGEgU0hBMQorIyAgICogYSBub24tZXhpc3RlbnQgc3Rhc2ggcmVmZXJlbmNlIGlzIHNwZWNpZmllZAorIworCitwYXJzZV9mbGFnc19hbmRfcmV2KCkKK3sKKwl0ZXN0ICIkUEFSU0VfQ0FDSEUiID0gIiQqIiAmJiByZXR1cm4gMCAjIG9wdGltaXNhdGlvbgorCVBBUlNFX0NBQ0hFPSIkKiIKKworCUlTX1NUQVNIX0xJS0U9CisJSVNfU1RBU0hfUkVGPQorCUlOREVYX09QVElPTj0KKwlzPQorCXdfY29tbWl0PQorCWJfY29tbWl0PQorCWlfY29tbWl0PQorCXVfY29tbWl0PQorCXdfdHJlZT0KKwliX3RyZWU9CisJaV90cmVlPQorCXVfdHJlZT0KKworCVJFVj0kKGdpdCByZXYtcGFyc2UgLS1uby1mbGFncyAtLXN5bWJvbGljICIkQCIpIHx8IGV4aXQgMQorCisJRkxBR1M9CisJZm9yIG9wdAorCWRvCisJCWNhc2UgIiRvcHQiIGluCisJCQktcXwtLXF1aWV0KQorCQkJCUdJVF9RVUlFVD0tdAorCQkJOzsKKwkJCS0taW5kZXgpCisJCQkJSU5ERVhfT1BUSU9OPS0taW5kZXgKKwkJCTs7CisJCQktKikKKwkJCQlGTEFHUz0iJHtGTEFHU30ke0ZMQUdTOisgfSRvcHQiCisJCQk7OworCQllc2FjCisJZG9uZQorCisJc2V0IC0tICRSRVYKKworCWNhc2UgJCMgaW4KKwkJMCkKKwkJCWhhdmVfc3Rhc2ggfHwgZGllICIkKGdldHRleHQgIk5vIHN0YXNoIGZvdW5kLiIpIgorCQkJc2V0IC0tICR7cmVmX3N0YXNofUB7MH0KKwkJOzsKKwkJMSkKKwkJCToKKwkJOzsKKwkJKikKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6IFwkUkVWIikiCisJCTs7CisJZXNhYworCisJUkVWPSQoZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tc3ltYm9saWMgLS12ZXJpZnkgJDEgMj4vZGV2L251bGwpIHx8IHsKKwkJcmVmZXJlbmNlPSIkMSIKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiXCRyZWZlcmVuY2UgaXMgbm90IHZhbGlkIHJlZmVyZW5jZSIpIgorCX0KKworCWlfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICRSRVZeMiAyPi9kZXYvbnVsbCkgJiYKKwlzZXQgLS0gJChnaXQgcmV2LXBhcnNlICRSRVYgJFJFVl4xICRSRVY6ICRSRVZeMTogJFJFVl4yOiAyPi9kZXYvbnVsbCkgJiYKKwlzPSQxICYmCisJd19jb21taXQ9JDEgJiYKKwliX2NvbW1pdD0kMiAmJgorCXdfdHJlZT0kMyAmJgorCWJfdHJlZT0kNCAmJgorCWlfdHJlZT0kNSAmJgorCUlTX1NUQVNIX0xJS0U9dCAmJgorCXRlc3QgIiRyZWZfc3Rhc2giID0gIiQoZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSAiJHtSRVYlQCp9IikiICYmCisJSVNfU1RBU0hfUkVGPXQKKworCXVfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICRSRVZeMyAyPi9kZXYvbnVsbCkgJiYKKwl1X3RyZWU9JChnaXQgcmV2LXBhcnNlICRSRVZeMzogMj4vZGV2L251bGwpCit9CisKK2lzX3N0YXNoX2xpa2UoKQoreworCXBhcnNlX2ZsYWdzX2FuZF9yZXYgIiRAIgorCXRlc3QgLW4gIiRJU19TVEFTSF9MSUtFIgorfQorCithc3NlcnRfc3Rhc2hfbGlrZSgpIHsKKwlpc19zdGFzaF9saWtlICIkQCIgfHwgeworCQlhcmdzPSIkKiIKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiJ1wkYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiKSIKKwl9Cit9CisKK2lzX3N0YXNoX3JlZigpIHsKKwlpc19zdGFzaF9saWtlICIkQCIgJiYgdGVzdCAtbiAiJElTX1NUQVNIX1JFRiIKK30KKworYXNzZXJ0X3N0YXNoX3JlZigpIHsKKwlpc19zdGFzaF9yZWYgIiRAIiB8fCB7CisJCWFyZ3M9IiQqIgorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICInXCRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiKSIKKwl9Cit9CisKK2FwcGx5X3N0YXNoICgpIHsKKworCWFzc2VydF9zdGFzaF9saWtlICIkQCIKKworCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoIHx8IGRpZSAiJChnZXR0ZXh0ICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIpIgorCisJIyBjdXJyZW50IGluZGV4IHN0YXRlCisJY190cmVlPSQoZ2l0IHdyaXRlLXRyZWUpIHx8CisJCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiKSIKKworCXVuc3Rhc2hlZF9pbmRleF90cmVlPQorCWlmIHRlc3QgLW4gIiRJTkRFWF9PUFRJT04iICYmIHRlc3QgIiRiX3RyZWUiICE9ICIkaV90cmVlIiAmJgorCQkJdGVzdCAiJGNfdHJlZSIgIT0gIiRpX3RyZWUiCisJdGhlbgorCQlnaXQgZGlmZi10cmVlIC0tYmluYXJ5ICRzXjJeLi4kc14yIHwgZ2l0IGFwcGx5IC0tY2FjaGVkCisJCXRlc3QgJD8gLW5lIDAgJiYKKwkJCWRpZSAiJChnZXR0ZXh0ICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIikiCisJCXVuc3Rhc2hlZF9pbmRleF90cmVlPSQoZ2l0IHdyaXRlLXRyZWUpIHx8CisJCQlkaWUgIiQoZ2V0dGV4dCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIpIgorCQlnaXQgcmVzZXQKKwlmaQorCisJaWYgdGVzdCAtbiAiJHVfdHJlZSIKKwl0aGVuCisJCUdJVF9JTkRFWF9GSUxFPSIkVE1QaW5kZXgiIGdpdC1yZWFkLXRyZWUgIiR1X3RyZWUiICYmCisJCUdJVF9JTkRFWF9GSUxFPSIkVE1QaW5kZXgiIGdpdCBjaGVja291dC1pbmRleCAtLWFsbCAmJgorCQlybSAtZiAiJFRNUGluZGV4IiB8fAorCQlkaWUgJ0NvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoJworCWZpCisKKwlldmFsICIKKwkJR0lUSEVBRF8kd190cmVlPSdTdGFzaGVkIGNoYW5nZXMnICYmCisJCUdJVEhFQURfJGNfdHJlZT0nVXBkYXRlZCB1cHN0cmVhbScgJiYKKwkJR0lUSEVBRF8kYl90cmVlPSdWZXJzaW9uIHN0YXNoIHdhcyBiYXNlZCBvbicgJiYKKwkJZXhwb3J0IEdJVEhFQURfJHdfdHJlZSBHSVRIRUFEXyRjX3RyZWUgR0lUSEVBRF8kYl90cmVlCisJIgorCisJaWYgdGVzdCAtbiAiJEdJVF9RVUlFVCIKKwl0aGVuCisJCUdJVF9NRVJHRV9WRVJCT1NJVFk9MCAmJiBleHBvcnQgR0lUX01FUkdFX1ZFUkJPU0lUWQorCWZpCisJaWYgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAkYl90cmVlIC0tICRjX3RyZWUgJHdfdHJlZQorCXRoZW4KKwkJIyBObyBjb25mbGljdAorCQlpZiB0ZXN0IC1uICIkdW5zdGFzaGVkX2luZGV4X3RyZWUiCisJCXRoZW4KKwkJCWdpdCByZWFkLXRyZWUgIiR1bnN0YXNoZWRfaW5kZXhfdHJlZSIKKwkJZWxzZQorCQkJYT0iJFRNUC1hZGRlZCIgJiYKKwkJCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9QSAkY190cmVlID4iJGEiICYmCisJCQlnaXQgcmVhZC10cmVlIC0tcmVzZXQgJGNfdHJlZSAmJgorCQkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXN0ZGluIDwiJGEiIHx8CisJCQkJZGllICIkKGdldHRleHQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIikiCisJCQlybSAtZiAiJGEiCisJCWZpCisJCXNxdWVsY2g9CisJCWlmIHRlc3QgLW4gIiRHSVRfUVVJRVQiCisJCXRoZW4KKwkJCXNxdWVsY2g9Jz4vZGV2L251bGwgMj4mMScKKwkJZmkKKwkJKGNkICIkU1RBUlRfRElSIiAmJiBldmFsICJnaXQgc3RhdHVzICRzcXVlbGNoIikgfHwgOgorCWVsc2UKKwkJIyBNZXJnZSBjb25mbGljdDsga2VlcCB0aGUgZXhpdCBzdGF0dXMgZnJvbSBtZXJnZS1yZWN1cnNpdmUKKwkJc3RhdHVzPSQ/CisJCWdpdCByZXJlcmUKKwkJaWYgdGVzdCAtbiAiJElOREVYX09QVElPTiIKKwkJdGhlbgorCQkJZ2V0dGV4dGxuICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iID4mMgorCQlmaQorCQlleGl0ICRzdGF0dXMKKwlmaQorfQorCitwb3Bfc3Rhc2goKSB7CisJYXNzZXJ0X3N0YXNoX3JlZiAiJEAiCisKKwlhcHBseV9zdGFzaCAiJEAiICYmCisJZHJvcF9zdGFzaCAiJEAiCit9CisKK2Ryb3Bfc3Rhc2ggKCkgeworCWFzc2VydF9zdGFzaF9yZWYgIiRAIgorCisJZ2l0IHJlZmxvZyBkZWxldGUgLS11cGRhdGVyZWYgLS1yZXdyaXRlICIke1JFVn0iICYmCisJCXNheSAiJChldmFsX2dldHRleHQgIkRyb3BwZWQgXCR7UkVWfSAoXCRzKSIpIiB8fAorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJcJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIpIgorCisJIyBjbGVhcl9zdGFzaCBpZiB3ZSBqdXN0IGRyb3BwZWQgdGhlIGxhc3Qgc3Rhc2ggZW50cnkKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkcmVmX3N0YXNoQHswfSIgPi9kZXYvbnVsbCAyPiYxIHx8IGNsZWFyX3N0YXNoCit9CisKK2FwcGx5X3RvX2JyYW5jaCAoKSB7CisJdGVzdCAtbiAiJDEiIHx8IGRpZSAiJChnZXR0ZXh0ICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiKSIKKwlicmFuY2g9JDEKKwlzaGlmdCAxCisKKwlzZXQgLS0gLS1pbmRleCAiJEAiCisJYXNzZXJ0X3N0YXNoX2xpa2UgIiRAIgorCisJZ2l0IGNoZWNrb3V0IC1iICRicmFuY2ggJFJFVl4gJiYKKwlhcHBseV9zdGFzaCAiJEAiICYmIHsKKwkJdGVzdCAteiAiJElTX1NUQVNIX1JFRiIgfHwgZHJvcF9zdGFzaCAiJEAiCisJfQorfQorCitQQVJTRV9DQUNIRT0nLS1ub3QtcGFyc2VkJworIyBUaGUgZGVmYXVsdCBjb21tYW5kIGlzICJzYXZlIiBpZiBub3RoaW5nIGJ1dCBvcHRpb25zIGFyZSBnaXZlbgorc2Vlbl9ub25fb3B0aW9uPQorZm9yIG9wdAorZG8KKwljYXNlICIkb3B0IiBpbgorCS0qKSA7OworCSopIHNlZW5fbm9uX29wdGlvbj10OyBicmVhayA7OworCWVzYWMKK2RvbmUKKwordGVzdCAtbiAiJHNlZW5fbm9uX29wdGlvbiIgfHwgc2V0ICJzYXZlIiAiJEAiCisKKyMgTWFpbiBjb21tYW5kIHNldAorY2FzZSAiJDEiIGluCitsaXN0KQorCXNoaWZ0CisJbGlzdF9zdGFzaCAiJEAiCisJOzsKK3Nob3cpCisJc2hpZnQKKwlzaG93X3N0YXNoICIkQCIKKwk7Oworc2F2ZSkKKwlzaGlmdAorCXNhdmVfc3Rhc2ggIiRAIgorCTs7CithcHBseSkKKwlzaGlmdAorCWFwcGx5X3N0YXNoICIkQCIKKwk7OworY2xlYXIpCisJc2hpZnQKKwljbGVhcl9zdGFzaCAiJEAiCisJOzsKK2NyZWF0ZSkKKwlpZiB0ZXN0ICQjIC1ndCAwICYmIHRlc3QgIiQxIiA9IGNyZWF0ZQorCXRoZW4KKwkJc2hpZnQKKwlmaQorCWNyZWF0ZV9zdGFzaCAiJCoiICYmIGVjaG8gIiR3X2NvbW1pdCIKKwk7OworZHJvcCkKKwlzaGlmdAorCWRyb3Bfc3Rhc2ggIiRAIgorCTs7Citwb3ApCisJc2hpZnQKKwlwb3Bfc3Rhc2ggIiRAIgorCTs7CiticmFuY2gpCisJc2hpZnQKKwlhcHBseV90b19icmFuY2ggIiRAIgorCTs7CisqKQorCWNhc2UgJCMgaW4KKwkwKQorCQlzYXZlX3N0YXNoICYmCisJCXNheSAiJChnZXR0ZXh0ICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiKSIKKwkJOzsKKwkqKQorCQl1c2FnZQorCWVzYWMKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEvZ2l0LXN1Ym1vZHVsZS5zaCBiL2dpdC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWI2YjExMAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwxMTMyIEBACisjIS9iaW4vc2gKKyMKKyMgZ2l0LXN1Ym1vZHVsZS5zaDogYWRkLCBpbml0LCB1cGRhdGUgb3IgbGlzdCBnaXQgc3VibW9kdWxlcworIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTGFycyBIamVtbGkKKworZGFzaGxlc3M9JChiYXNlbmFtZSAiJDAiIHwgc2VkIC1lICdzLy0vIC8nKQorVVNBR0U9IlstLXF1aWV0XSBhZGQgWy1iIGJyYW5jaF0gWy1mfC0tZm9yY2VdIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dIFstLV0gPHJlcG9zaXRvcnk+IFs8cGF0aD5dCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBzdGF0dXMgWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIGluaXQgWy0tXSBbPHBhdGg+Li4uXQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gdXBkYXRlIFstLWluaXRdIFstTnwtLW5vLWZldGNoXSBbLWZ8LS1mb3JjZV0gWy0tcmViYXNlXSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1tZXJnZV0gWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBzdW1tYXJ5IFstLWNhY2hlZHwtLWZpbGVzXSBbLS1zdW1tYXJ5LWxpbWl0IDxuPl0gW2NvbW1pdF0gWy0tXSBbPHBhdGg+Li4uXQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gZm9yZWFjaCBbLS1yZWN1cnNpdmVdIDxjb21tYW5kPgorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc3luYyBbLS1dIFs8cGF0aD4uLi5dIgorT1BUSU9OU19TUEVDPQorLiBnaXQtc2gtc2V0dXAKKy4gZ2l0LXNoLWkxOG4KKy4gZ2l0LXBhcnNlLXJlbW90ZQorcmVxdWlyZV93b3JrX3RyZWUKKworY29tbWFuZD0KK2JyYW5jaD0KK2ZvcmNlPQorcmVmZXJlbmNlPQorY2FjaGVkPQorcmVjdXJzaXZlPQoraW5pdD0KK2ZpbGVzPQorbm9mZXRjaD0KK3VwZGF0ZT0KK3ByZWZpeD0KKworIyBUaGUgZnVuY3Rpb24gdGFrZXMgYXQgbW9zdCAyIGFyZ3VtZW50cy4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZQorIyBVUkwgdGhhdCBuYXZpZ2F0ZXMgdG8gdGhlIHN1Ym1vZHVsZSBvcmlnaW4gcmVwby4gV2hlbiByZWxhdGl2ZSwgdGhpcyBVUkwKKyMgaXMgcmVsYXRpdmUgdG8gdGhlIHN1cGVycHJvamVjdCBvcmlnaW4gVVJMIHJlcG8uIFRoZSBzZWNvbmQgdXBfcGF0aAorIyBhcmd1bWVudCwgaWYgc3BlY2lmaWVkLCBpcyB0aGUgcmVsYXRpdmUgcGF0aCB0aGF0IG5hdmlnYXRlcworIyBmcm9tIHRoZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlIHRvIHRoZSBzdXBlcnByb2plY3Qgd29ya2luZyB0cmVlLgorIworIyBUaGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbiBpcyB0aGUgb3JpZ2luIFVSTCBvZiB0aGUgc3VibW9kdWxlLgorIworIyBUaGUgb3V0cHV0IHdpbGwgZWl0aGVyIGJlIGFuIGFic29sdXRlIFVSTCBvciBmaWxlc3lzdGVtIHBhdGggKGlmIHRoZQorIyBzdXBlcnByb2plY3Qgb3JpZ2luIFVSTCBpcyBhbiBhYnNvbHV0ZSBVUkwgb3IgZmlsZXN5c3RlbSBwYXRoLAorIyByZXNwZWN0aXZlbHkpIG9yIGEgcmVsYXRpdmUgZmlsZSBzeXN0ZW0gcGF0aCAoaWYgdGhlIHN1cGVycHJvamVjdAorIyBvcmlnaW4gVVJMIGlzIGEgcmVsYXRpdmUgZmlsZSBzeXN0ZW0gcGF0aCkuCisjCisjIFdoZW4gdGhlIG91dHB1dCBpcyBhIHJlbGF0aXZlIGZpbGUgc3lzdGVtIHBhdGgsIHRoZSBwYXRoIGlzIGVpdGhlcgorIyByZWxhdGl2ZSB0byB0aGUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZSwgaWYgdXBfcGF0aCBpcyBzcGVjaWZpZWQsIG9yIHRvCisjIHRoZSBzdXBlcnByb2plY3Qgd29ya2luZyB0cmVlIG90aGVyd2lzZS4KK3Jlc29sdmVfcmVsYXRpdmVfdXJsICgpCit7CisJcmVtb3RlPSQoZ2V0X2RlZmF1bHRfcmVtb3RlKQorCXJlbW90ZXVybD0kKGdpdCBjb25maWcgInJlbW90ZS4kcmVtb3RlLnVybCIpIHx8CisJCXJlbW90ZXVybD0kKHB3ZCkgIyB0aGUgcmVwb3NpdG9yeSBpcyBpdHMgb3duIGF1dGhvcml0YXRpdmUgdXBzdHJlYW0KKwl1cmw9IiQxIgorCXJlbW90ZXVybD0ke3JlbW90ZXVybCUvfQorCXNlcD0vCisJdXBfcGF0aD0iJDIiCisKKwljYXNlICIkcmVtb3RldXJsIiBpbgorCSo6KnwvKikKKwkJaXNfcmVsYXRpdmU9CisJCTs7CisJLi8qfC4uLyopCisJCWlzX3JlbGF0aXZlPXQKKwkJOzsKKwkqKQorCQlpc19yZWxhdGl2ZT10CisJCXJlbW90ZXVybD0iLi8kcmVtb3RldXJsIgorCQk7OworCWVzYWMKKworCXdoaWxlIHRlc3QgLW4gIiR1cmwiCisJZG8KKwkJY2FzZSAiJHVybCIgaW4KKwkJLi4vKikKKwkJCXVybD0iJHt1cmwjLi4vfSIKKwkJCWNhc2UgIiRyZW1vdGV1cmwiIGluCisJCQkqLyopCisJCQkJcmVtb3RldXJsPSIke3JlbW90ZXVybCUvKn0iCisJCQkJOzsKKwkJCSo6KikKKwkJCQlyZW1vdGV1cmw9IiR7cmVtb3RldXJsJToqfSIKKwkJCQlzZXA9OgorCQkJCTs7CisJCQkqKQorCQkJCWlmIHRlc3QgLXogIiRpc19yZWxhdGl2ZSIgfHwgdGVzdCAiLiIgPSAiJHJlbW90ZXVybCIKKwkJCQl0aGVuCisJCQkJCWRpZSAiJChldmFsX2dldHRleHQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJ1wkcmVtb3RldXJsJyIpIgorCQkJCWVsc2UKKwkJCQkJcmVtb3RldXJsPS4KKwkJCQlmaQorCQkJCTs7CisJCQllc2FjCisJCQk7OworCQkuLyopCisJCQl1cmw9IiR7dXJsIy4vfSIKKwkJCTs7CisJCSopCisJCQlicmVhazs7CisJCWVzYWMKKwlkb25lCisJcmVtb3RldXJsPSIkcmVtb3RldXJsJHNlcCR7dXJsJS99IgorCWVjaG8gIiR7aXNfcmVsYXRpdmU6KyR7dXBfcGF0aH19JHtyZW1vdGV1cmwjLi99IgorfQorCisjCisjIEdldCBzdWJtb2R1bGUgaW5mbyBmb3IgcmVnaXN0ZXJlZCBzdWJtb2R1bGVzCisjICRAID0gcGF0aCB0byBsaW1pdCBzdWJtb2R1bGUgbGlzdAorIworbW9kdWxlX2xpc3QoKQoreworCSgKKwkJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAtLXN0YWdlIC0tICIkQCIgfHwKKwkJZWNobyAidW5tYXRjaGVkIHBhdGhzcGVjIGV4aXN0cyIKKwkpIHwKKwlwZXJsIC1lICcKKwlteSAldW5tZXJnZWQgPSAoKTsKKwlteSAoJG51bGxfc2hhMSkgPSAoIjAiIHggNDApOworCW15IEBvdXQgPSAoKTsKKwlteSAkdW5tYXRjaGVkID0gMDsKKwl3aGlsZSAoPFNURElOPikgeworCQlpZiAoL151bm1hdGNoZWQgcGF0aHNwZWMvKSB7CisJCQkkdW5tYXRjaGVkID0gMTsKKwkJCW5leHQ7CisJCX0KKwkJY2hvbXA7CisJCW15ICgkbW9kZSwgJHNoYTEsICRzdGFnZSwgJHBhdGgpID0KKwkJCS9eKFswLTddKykgKFswLTlhLWZdezQwfSkgKFswLTNdKVx0KC4qKSQvOworCQluZXh0IHVubGVzcyAkbW9kZSBlcSAiMTYwMDAwIjsKKwkJaWYgKCRzdGFnZSBuZSAiMCIpIHsKKwkJCWlmICghJHVubWVyZ2VkeyRwYXRofSsrKSB7CisJCQkJcHVzaCBAb3V0LCAiJG1vZGUgJG51bGxfc2hhMSBVXHQkcGF0aFxuIjsKKwkJCX0KKwkJCW5leHQ7CisJCX0KKwkJcHVzaCBAb3V0LCAiJF9cbiI7CisJfQorCWlmICgkdW5tYXRjaGVkKSB7CisJCXByaW50ICIjdW5tYXRjaGVkXG4iOworCX0gZWxzZSB7CisJCXByaW50IGZvciAoQG91dCk7CisJfQorCScKK30KKworZGllX2lmX3VubWF0Y2hlZCAoKQoreworCWlmIHRlc3QgIiQxIiA9ICIjdW5tYXRjaGVkIgorCXRoZW4KKwkJZXhpdCAxCisJZmkKK30KKworIworIyBNYXAgc3VibW9kdWxlIHBhdGggdG8gc3VibW9kdWxlIG5hbWUKKyMKKyMgJDEgPSBwYXRoCisjCittb2R1bGVfbmFtZSgpCit7CisJIyBEbyB3ZSBoYXZlICJzdWJtb2R1bGUuPHNvbWV0aGluZz4ucGF0aCA9ICQxIiBkZWZpbmVkIGluIC5naXRtb2R1bGVzIGZpbGU/CisJc21fcGF0aD0iJDEiCisJcmU9JChwcmludGYgJyVzXG4nICIkMSIgfCBzZWQgLWUgJ3MvW10uW14kXFwqXS9cXCYvZycpCisJbmFtZT0kKCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tZ2V0LXJlZ2V4cCAnXnN1Ym1vZHVsZVwuLipcLnBhdGgkJyB8CisJCXNlZCAtbiAtZSAnc3xec3VibW9kdWxlXC5cKC4qXClcLnBhdGggJyIkcmUiJyR8XDF8cCcgKQorCXRlc3QgLXogIiRuYW1lIiAmJgorCWRpZSAiJChldmFsX2dldHRleHQgIk5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICdcJHNtX3BhdGgnIikiCisJZWNobyAiJG5hbWUiCit9CisKKyMKKyMgQ2xvbmUgYSBzdWJtb2R1bGUKKyMKKyMgUHJpb3IgdG8gY2FsbGluZywgY21kX3VwZGF0ZSBjaGVja3MgdGhhdCBhIHBvc3NpYmx5IGV4aXN0aW5nCisjIHBhdGggaXMgbm90IGEgZ2l0IHJlcG9zaXRvcnkuCisjIExpa2V3aXNlLCBjbWRfYWRkIGNoZWNrcyB0aGF0IHBhdGggZG9lcyBub3QgZXhpc3QgYXQgYWxsLAorIyBzaW5jZSBpdCBpcyB0aGUgbG9jYXRpb24gb2YgYSBuZXcgc3VibW9kdWxlLgorIworbW9kdWxlX2Nsb25lKCkKK3sKKwlzbV9wYXRoPSQxCisJdXJsPSQyCisJcmVmZXJlbmNlPSIkMyIKKwlxdWlldD0KKwlpZiB0ZXN0IC1uICIkR0lUX1FVSUVUIgorCXRoZW4KKwkJcXVpZXQ9LXEKKwlmaQorCisJZ2l0ZGlyPQorCWdpdGRpcl9iYXNlPQorCW5hbWU9JChtb2R1bGVfbmFtZSAiJHNtX3BhdGgiIDI+L2Rldi9udWxsKQorCXRlc3QgLW4gIiRuYW1lIiB8fCBuYW1lPSIkc21fcGF0aCIKKwliYXNlX25hbWU9JChkaXJuYW1lICIkbmFtZSIpCisKKwlnaXRkaXI9JChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikKKwlnaXRkaXJfYmFzZT0iJGdpdGRpci9tb2R1bGVzLyRiYXNlX25hbWUiCisJZ2l0ZGlyPSIkZ2l0ZGlyL21vZHVsZXMvJG5hbWUiCisKKwlpZiB0ZXN0IC1kICIkZ2l0ZGlyIgorCXRoZW4KKwkJbWtkaXIgLXAgIiRzbV9wYXRoIgorCQlybSAtZiAiJGdpdGRpci9pbmRleCIKKwllbHNlCisJCW1rZGlyIC1wICIkZ2l0ZGlyX2Jhc2UiCisJCSgKKwkJCWNsZWFyX2xvY2FsX2dpdF9lbnYKKwkJCWdpdCBjbG9uZSAkcXVpZXQgLW4gJHtyZWZlcmVuY2U6KyIkcmVmZXJlbmNlIn0gXAorCQkJCS0tc2VwYXJhdGUtZ2l0LWRpciAiJGdpdGRpciIgIiR1cmwiICIkc21fcGF0aCIKKwkJKSB8fAorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDbG9uZSBvZiAnXCR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJ1wkc21fcGF0aCcgZmFpbGVkIikiCisJZmkKKworCSMgV2UgYWxyZWFkeSBhcmUgYXQgdGhlIHJvb3Qgb2YgdGhlIHdvcmsgdHJlZSBidXQgY2RfdG9fdG9wbGV2ZWwgd2lsbAorCSMgcmVzb2x2ZSBhbnkgc3ltbGlua3MgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluICRQV0QKKwlhPSQoY2RfdG9fdG9wbGV2ZWwgJiYgY2QgIiRnaXRkaXIiICYmIHB3ZCkvCisJYj0kKGNkX3RvX3RvcGxldmVsICYmIGNkICIkc21fcGF0aCIgJiYgcHdkKS8KKwkjIG5vcm1hbGl6ZSBXaW5kb3dzLXN0eWxlIGFic29sdXRlIHBhdGhzIHRvIFBPU0lYLXN0eWxlIGFic29sdXRlIHBhdGhzCisJY2FzZSAkYSBpbiBbYS16QS1aXTovKikgYT0vJHthJSU6Kn0ke2EjKjp9IDs7IGVzYWMKKwljYXNlICRiIGluIFthLXpBLVpdOi8qKSBiPS8ke2IlJToqfSR7YiMqOn0gOzsgZXNhYworCSMgUmVtb3ZlIGFsbCBjb21tb24gbGVhZGluZyBkaXJlY3RvcmllcyBhZnRlciBhIHNhbml0eSBjaGVjaworCWlmIHRlc3QgIiR7YSMkYn0iICE9ICIkYSIgfHwgdGVzdCAiJHtiIyRhfSIgIT0gIiRiIjsgdGhlbgorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJHaXRkaXIgJ1wkYScgaXMgcGFydCBvZiB0aGUgc3VibW9kdWxlIHBhdGggJ1wkYicgb3IgdmljZSB2ZXJzYSIpIgorCWZpCisJd2hpbGUgdGVzdCAiJHthJSUvKn0iID0gIiR7YiUlLyp9IgorCWRvCisJCWE9JHthIyovfQorCQliPSR7YiMqL30KKwlkb25lCisJIyBOb3cgY2hvcCBvZmYgdGhlIHRyYWlsaW5nICcvJ3MgdGhhdCB3ZXJlIGFkZGVkIGluIHRoZSBiZWdpbm5pbmcKKwlhPSR7YSUvfQorCWI9JHtiJS99CisKKwkjIFR1cm4gZWFjaCBsZWFkaW5nICIqLyIgY29tcG9uZW50IGludG8gIi4uLyIKKwlyZWw9JChlY2hvICRiIHwgc2VkIC1lICdzfFteL11bXi9dKnwuLnxnJykKKwllY2hvICJnaXRkaXI6ICRyZWwvJGEiID4iJHNtX3BhdGgvLmdpdCIKKworCXJlbD0kKGVjaG8gJGEgfCBzZWQgLWUgJ3N8W14vXVteL10qfC4ufGcnKQorCShjbGVhcl9sb2NhbF9naXRfZW52OyBjZCAiJHNtX3BhdGgiICYmIEdJVF9XT1JLX1RSRUU9LiBnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgIiRyZWwvJGIiKQorfQorCisjCisjIEFkZCBhIG5ldyBzdWJtb2R1bGUgdG8gdGhlIHdvcmtpbmcgdHJlZSwgLmdpdG1vZHVsZXMgYW5kIHRoZSBpbmRleAorIworIyAkQCA9IHJlcG8gcGF0aAorIworIyBvcHRpb25hbCBicmFuY2ggaXMgc3RvcmVkIGluIGdsb2JhbCBicmFuY2ggdmFyaWFibGUKKyMKK2NtZF9hZGQoKQoreworCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gYWRkIi4KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1iIHwgLS1icmFuY2gpCisJCQljYXNlICIkMiIgaW4gJycpIHVzYWdlIDs7IGVzYWMKKwkJCWJyYW5jaD0kMgorCQkJc2hpZnQKKwkJCTs7CisJCS1mIHwgLS1mb3JjZSkKKwkJCWZvcmNlPSQxCisJCQk7OworCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPTEKKwkJCTs7CisJCS0tcmVmZXJlbmNlKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlyZWZlcmVuY2U9Ii0tcmVmZXJlbmNlPSQyIgorCQkJc2hpZnQKKwkJCTs7CisJCS0tcmVmZXJlbmNlPSopCisJCQlyZWZlcmVuY2U9IiQxIgorCQkJc2hpZnQKKwkJCTs7CisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlyZXBvPSQxCisJc21fcGF0aD0kMgorCisJaWYgdGVzdCAteiAiJHNtX3BhdGgiOyB0aGVuCisJCXNtX3BhdGg9JChlY2hvICIkcmVwbyIgfAorCQkJc2VkIC1lICdzfC8kfHwnIC1lICdzfDoqLypcLmdpdCR8fCcgLWUgJ3N8LipbLzpdfHxnJykKKwlmaQorCisJaWYgdGVzdCAteiAiJHJlcG8iIC1vIC16ICIkc21fcGF0aCI7IHRoZW4KKwkJdXNhZ2UKKwlmaQorCisJIyBhc3N1cmUgcmVwbyBpcyBhYnNvbHV0ZSBvciByZWxhdGl2ZSB0byBwYXJlbnQKKwljYXNlICIkcmVwbyIgaW4KKwkuLyp8Li4vKikKKwkJIyBkZXJlZmVyZW5jZSBzb3VyY2UgdXJsIHJlbGF0aXZlIHRvIHBhcmVudCdzIHVybAorCQlyZWFscmVwbz0kKHJlc29sdmVfcmVsYXRpdmVfdXJsICIkcmVwbyIpIHx8IGV4aXQKKwkJOzsKKwkqOip8LyopCisJCSMgYWJzb2x1dGUgdXJsCisJCXJlYWxyZXBvPSRyZXBvCisJCTs7CisJKikKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAicmVwbyBVUkw6ICdcJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iKSIKKwk7OworCWVzYWMKKworCSMgbm9ybWFsaXplIHBhdGg6CisJIyBtdWx0aXBsZSAvLzsgbGVhZGluZyAuLzsgLy4vOyAvLi4vOyB0cmFpbGluZyAvCisJc21fcGF0aD0kKHByaW50ZiAnJXMvXG4nICIkc21fcGF0aCIgfAorCQlzZWQgLWUgJworCQkJc3wvLyp8L3xnCisJCQlzfF5cKFwuL1wpKnx8CisJCQlzfC9cLi98L3xnCisJCQk6c3RhcnQKKwkJCXN8XChbXi9dKlwpL1wuXC4vfHwKKwkJCXRzdGFydAorCQkJc3wvKiR8fAorCQknKQorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggIiRzbV9wYXRoIiA+IC9kZXYvbnVsbCAyPiYxICYmCisJZGllICIkKGV2YWxfZ2V0dGV4dCAiJ1wkc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IikiCisKKwlpZiB0ZXN0IC16ICIkZm9yY2UiICYmICEgZ2l0IGFkZCAtLWRyeS1ydW4gLS1pZ25vcmUtbWlzc2luZyAiJHNtX3BhdGgiID4gL2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCWV2YWxfZ2V0dGV4dGxuICJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOgorXCRzbV9wYXRoCitVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iID4mMgorCQlleGl0IDEKKwlmaQorCisJIyBwZXJoYXBzIHRoZSBwYXRoIGV4aXN0cyBhbmQgaXMgYWxyZWFkeSBhIGdpdCByZXBvLCBlbHNlIGNsb25lIGl0CisJaWYgdGVzdCAtZSAiJHNtX3BhdGgiCisJdGhlbgorCQlpZiB0ZXN0IC1kICIkc21fcGF0aCIvLmdpdCAtbyAtZiAiJHNtX3BhdGgiLy5naXQKKwkJdGhlbgorCQkJZXZhbF9nZXR0ZXh0bG4gIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICdcJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKKwkJZWxzZQorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiJ1wkc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIikiCisJCWZpCisKKwllbHNlCisKKwkJbW9kdWxlX2Nsb25lICIkc21fcGF0aCIgIiRyZWFscmVwbyIgIiRyZWZlcmVuY2UiIHx8IGV4aXQKKwkJKAorCQkJY2xlYXJfbG9jYWxfZ2l0X2VudgorCQkJY2QgIiRzbV9wYXRoIiAmJgorCQkJIyBhc2ggZmFpbHMgdG8gd29yZHNwbGl0ICR7YnJhbmNoOistYiAiJGJyYW5jaCIuLi59CisJCQljYXNlICIkYnJhbmNoIiBpbgorCQkJJycpIGdpdCBjaGVja291dCAtZiAtcSA7OworCQkJPyopIGdpdCBjaGVja291dCAtZiAtcSAtQiAiJGJyYW5jaCIgIm9yaWdpbi8kYnJhbmNoIiA7OworCQkJZXNhYworCQkpIHx8IGRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJ1wkc21fcGF0aCciKSIKKwlmaQorCWdpdCBjb25maWcgc3VibW9kdWxlLiIkc21fcGF0aCIudXJsICIkcmVhbHJlcG8iCisKKwlnaXQgYWRkICRmb3JjZSAiJHNtX3BhdGgiIHx8CisJZGllICIkKGV2YWxfZ2V0dGV4dCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJ1wkc21fcGF0aCciKSIKKworCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLiIkc21fcGF0aCIucGF0aCAiJHNtX3BhdGgiICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuIiRzbV9wYXRoIi51cmwgIiRyZXBvIiAmJgorCWdpdCBhZGQgLS1mb3JjZSAuZ2l0bW9kdWxlcyB8fAorCWRpZSAiJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJ1wkc21fcGF0aCciKSIKK30KKworIworIyBFeGVjdXRlIGFuIGFyYml0cmFyeSBjb21tYW5kIHNlcXVlbmNlIGluIGVhY2ggY2hlY2tlZCBvdXQKKyMgc3VibW9kdWxlCisjCisjICRAID0gY29tbWFuZCB0byBleGVjdXRlCisjCitjbWRfZm9yZWFjaCgpCit7CisJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiBmb3JlYWNoIi4KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9MQorCQkJOzsKKwkJLS1yZWN1cnNpdmUpCisJCQlyZWN1cnNpdmU9MQorCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJdG9wbGV2ZWw9JChwd2QpCisKKwkjIGR1cCBzdGRpbiBzbyB0aGF0IGl0IGNhbiBiZSByZXN0b3JlZCB3aGVuIHJ1bm5pbmcgdGhlIGV4dGVybmFsCisJIyBjb21tYW5kIGluIHRoZSBzdWJzaGVsbCAoYW5kIGEgcmVjdXJzaXZlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbikKKwlleGVjIDM8JjAKKworCW1vZHVsZV9saXN0IHwKKwl3aGlsZSByZWFkIG1vZGUgc2hhMSBzdGFnZSBzbV9wYXRoCisJZG8KKwkJZGllX2lmX3VubWF0Y2hlZCAiJG1vZGUiCisJCWlmIHRlc3QgLWUgIiRzbV9wYXRoIi8uZ2l0CisJCXRoZW4KKwkJCXNheSAiJChldmFsX2dldHRleHQgIkVudGVyaW5nICdcJHByZWZpeFwkc21fcGF0aCciKSIKKwkJCW5hbWU9JChtb2R1bGVfbmFtZSAiJHNtX3BhdGgiKQorCQkJKAorCQkJCXByZWZpeD0iJHByZWZpeCRzbV9wYXRoLyIKKwkJCQljbGVhcl9sb2NhbF9naXRfZW52CisJCQkJIyB3ZSBtYWtlICRwYXRoIGF2YWlsYWJsZSB0byBzY3JpcHRzIC4uLgorCQkJCXBhdGg9JHNtX3BhdGgKKwkJCQljZCAiJHNtX3BhdGgiICYmCisJCQkJZXZhbCAiJEAiICYmCisJCQkJaWYgdGVzdCAtbiAiJHJlY3Vyc2l2ZSIKKwkJCQl0aGVuCisJCQkJCWNtZF9mb3JlYWNoICItLXJlY3Vyc2l2ZSIgIiRAIgorCQkJCWZpCisJCQkpIDwmMyAzPCYtIHx8CisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJTdG9wcGluZyBhdCAnXCRzbV9wYXRoJzsgc2NyaXB0IHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cy4iKSIKKwkJZmkKKwlkb25lCit9CisKKyMKKyMgUmVnaXN0ZXIgc3VibW9kdWxlcyBpbiAuZ2l0L2NvbmZpZworIworIyAkQCA9IHJlcXVlc3RlZCBwYXRocyAoZGVmYXVsdCB0byBhbGwpCisjCitjbWRfaW5pdCgpCit7CisJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiBpbml0Ii4KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9MQorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCW1vZHVsZV9saXN0ICIkQCIgfAorCXdoaWxlIHJlYWQgbW9kZSBzaGExIHN0YWdlIHNtX3BhdGgKKwlkbworCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIKKwkJbmFtZT0kKG1vZHVsZV9uYW1lICIkc21fcGF0aCIpIHx8IGV4aXQKKworCQkjIENvcHkgdXJsIHNldHRpbmcgd2hlbiBpdCBpcyBub3Qgc2V0IHlldAorCQlpZiB0ZXN0IC16ICIkKGdpdCBjb25maWcgInN1Ym1vZHVsZS4kbmFtZS51cmwiKSIKKwkJdGhlbgorCQkJdXJsPSQoZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuIiRuYW1lIi51cmwpCisJCQl0ZXN0IC16ICIkdXJsIiAmJgorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnXCRzbV9wYXRoJyBpbiAuZ2l0bW9kdWxlcyIpIgorCisJCQkjIFBvc3NpYmx5IGEgdXJsIHJlbGF0aXZlIHRvIHBhcmVudAorCQkJY2FzZSAiJHVybCIgaW4KKwkJCS4vKnwuLi8qKQorCQkJCXVybD0kKHJlc29sdmVfcmVsYXRpdmVfdXJsICIkdXJsIikgfHwgZXhpdAorCQkJCTs7CisJCQllc2FjCisJCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCAiJHVybCIgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICdcJHNtX3BhdGgnIikiCisKKwkJCXNheSAiJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSAnXCRuYW1lJyAoXCR1cmwpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJ1wkc21fcGF0aCciKSIKKwkJZmkKKworCQkjIENvcHkgInVwZGF0ZSIgc2V0dGluZyB3aGVuIGl0IGlzIG5vdCBzZXQgeWV0CisJCXVwZD0iJChnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS4iJG5hbWUiLnVwZGF0ZSkiCisJCXRlc3QgLXogIiR1cGQiIHx8CisJCXRlc3QgLW4gIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cGRhdGUpIiB8fAorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVwZGF0ZSAiJHVwZCIgfHwKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnXCRzbV9wYXRoJyIpIgorCWRvbmUKK30KKworIworIyBVcGRhdGUgZWFjaCBzdWJtb2R1bGUgcGF0aCB0byBjb3JyZWN0IHJldmlzaW9uLCB1c2luZyBjbG9uZSBhbmQgY2hlY2tvdXQgYXMgbmVlZGVkCisjCisjICRAID0gcmVxdWVzdGVkIHBhdGhzIChkZWZhdWx0IHRvIGFsbCkKKyMKK2NtZF91cGRhdGUoKQoreworCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gdXBkYXRlIi4KKwlvcmlnX2ZsYWdzPQorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQk7OworCQktaXwtLWluaXQpCisJCQlpbml0PTEKKwkJCTs7CisJCS1OfC0tbm8tZmV0Y2gpCisJCQlub2ZldGNoPTEKKwkJCTs7CisJCS1mfC0tZm9yY2UpCisJCQlmb3JjZT0kMQorCQkJOzsKKwkJLXJ8LS1yZWJhc2UpCisJCQl1cGRhdGU9InJlYmFzZSIKKwkJCTs7CisJCS0tcmVmZXJlbmNlKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlyZWZlcmVuY2U9Ii0tcmVmZXJlbmNlPSQyIgorCQkJb3JpZ19mbGFncz0iJG9yaWdfZmxhZ3MgJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiQxIikiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yZWZlcmVuY2U9KikKKwkJCXJlZmVyZW5jZT0iJDEiCisJCQk7OworCQktbXwtLW1lcmdlKQorCQkJdXBkYXRlPSJtZXJnZSIKKwkJCTs7CisJCS0tcmVjdXJzaXZlKQorCQkJcmVjdXJzaXZlPTEKKwkJCTs7CisJCS0tY2hlY2tvdXQpCisJCQl1cGRhdGU9ImNoZWNrb3V0IgorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlvcmlnX2ZsYWdzPSIkb3JpZ19mbGFncyAkKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJDEiKSIKKwkJc2hpZnQKKwlkb25lCisKKwlpZiB0ZXN0IC1uICIkaW5pdCIKKwl0aGVuCisJCWNtZF9pbml0ICItLSIgIiRAIiB8fCByZXR1cm4KKwlmaQorCisJY2xvbmVkX21vZHVsZXM9CisJbW9kdWxlX2xpc3QgIiRAIiB8IHsKKwllcnI9CisJd2hpbGUgcmVhZCBtb2RlIHNoYTEgc3RhZ2Ugc21fcGF0aAorCWRvCisJCWRpZV9pZl91bm1hdGNoZWQgIiRtb2RlIgorCQlpZiB0ZXN0ICIkc3RhZ2UiID0gVQorCQl0aGVuCisJCQllY2hvID4mMiAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICRzbV9wYXRoIgorCQkJY29udGludWUKKwkJZmkKKwkJbmFtZT0kKG1vZHVsZV9uYW1lICIkc21fcGF0aCIpIHx8IGV4aXQKKwkJdXJsPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cmwpCisJCWlmICEgdGVzdCAteiAiJHVwZGF0ZSIKKwkJdGhlbgorCQkJdXBkYXRlX21vZHVsZT0kdXBkYXRlCisJCWVsc2UKKwkJCXVwZGF0ZV9tb2R1bGU9JChnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVwZGF0ZSkKKwkJZmkKKworCQlpZiB0ZXN0ICIkdXBkYXRlX21vZHVsZSIgPSAibm9uZSIKKwkJdGhlbgorCQkJZWNobyAiU2tpcHBpbmcgc3VibW9kdWxlICckc21fcGF0aCciCisJCQljb250aW51ZQorCQlmaQorCisJCWlmIHRlc3QgLXogIiR1cmwiCisJCXRoZW4KKwkJCSMgT25seSBtZW50aW9uIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlcyB3aGVuIGl0cworCQkJIyBwYXRoIGhhdmUgYmVlbiBzcGVjaWZpZWQKKwkJCXRlc3QgIiQjIiAhPSAiMCIgJiYKKwkJCXNheSAiJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSBwYXRoICdcJHNtX3BhdGgnIG5vdCBpbml0aWFsaXplZAorTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iKSIKKwkJCWNvbnRpbnVlCisJCWZpCisKKwkJaWYgISB0ZXN0IC1kICIkc21fcGF0aCIvLmdpdCAtbyAtZiAiJHNtX3BhdGgiLy5naXQKKwkJdGhlbgorCQkJbW9kdWxlX2Nsb25lICIkc21fcGF0aCIgIiR1cmwiICIkcmVmZXJlbmNlInx8IGV4aXQKKwkJCWNsb25lZF9tb2R1bGVzPSIkY2xvbmVkX21vZHVsZXM7JG5hbWUiCisJCQlzdWJzaGExPQorCQllbHNlCisJCQlzdWJzaGExPSQoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRzbV9wYXRoIiAmJgorCQkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJ1wkc21fcGF0aCciKSIKKwkJZmkKKworCQlpZiB0ZXN0ICIkc3Vic2hhMSIgIT0gIiRzaGExIiAtbyAtbiAiJGZvcmNlIgorCQl0aGVuCisJCQlzdWJmb3JjZT0kZm9yY2UKKwkJCSMgSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgLWYgZmxhZyBhbmQgdGhlIHN1Ym1vZHVsZSBoYXMgbmV2ZXIgYmVlbiBjaGVja2VkIG91dAorCQkJaWYgdGVzdCAteiAiJHN1YnNoYTEiIC1hIC16ICIkZm9yY2UiCisJCQl0aGVuCisJCQkJc3ViZm9yY2U9Ii1mIgorCQkJZmkKKworCQkJaWYgdGVzdCAteiAiJG5vZmV0Y2giCisJCQl0aGVuCisJCQkJIyBSdW4gZmV0Y2ggb25seSBpZiAkc2hhMSBpc24ndCBwcmVzZW50IG9yIGl0CisJCQkJIyBpcyBub3QgcmVhY2hhYmxlIGZyb20gYSByZWYuCisJCQkJKGNsZWFyX2xvY2FsX2dpdF9lbnY7IGNkICIkc21fcGF0aCIgJiYKKwkJCQkJKCAocmV2PSQoZ2l0IHJldi1saXN0IC1uIDEgJHNoYTEgLS1ub3QgLS1hbGwgMj4vZGV2L251bGwpICYmCisJCQkJCSB0ZXN0IC16ICIkcmV2IikgfHwgZ2l0LWZldGNoKSkgfHwKKwkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJ1wkc21fcGF0aCciKSIKKwkJCWZpCisKKwkJCSMgSXMgdGhpcyBzb21ldGhpbmcgd2UganVzdCBjbG9uZWQ/CisJCQljYXNlICI7JGNsb25lZF9tb2R1bGVzOyIgaW4KKwkJCSoiOyRuYW1lOyIqKQorCQkJCSMgdGhlbiB0aGVyZSBpcyBubyBsb2NhbCBjaGFuZ2UgdG8gaW50ZWdyYXRlCisJCQkJdXBkYXRlX21vZHVsZT0gOzsKKwkJCWVzYWMKKworCQkJbXVzdF9kaWVfb25fZmFpbHVyZT0KKwkJCWNhc2UgIiR1cGRhdGVfbW9kdWxlIiBpbgorCQkJcmViYXNlKQorCQkJCWNvbW1hbmQ9ImdpdCByZWJhc2UiCisJCQkJZGllX21zZz0iJChldmFsX2dldHRleHQgIlVuYWJsZSB0byByZWJhc2UgJ1wkc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJ1wkc21fcGF0aCciKSIKKwkJCQlzYXlfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlIHBhdGggJ1wkc21fcGF0aCc6IHJlYmFzZWQgaW50byAnXCRzaGExJyIpIgorCQkJCW11c3RfZGllX29uX2ZhaWx1cmU9eWVzCisJCQkJOzsKKwkJCW1lcmdlKQorCQkJCWNvbW1hbmQ9ImdpdCBtZXJnZSIKKwkJCQlkaWVfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIG1lcmdlICdcJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICdcJHNtX3BhdGgnIikiCisJCQkJc2F5X21zZz0iJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSBwYXRoICdcJHNtX3BhdGgnOiBtZXJnZWQgaW4gJ1wkc2hhMSciKSIKKwkJCQltdXN0X2RpZV9vbl9mYWlsdXJlPXllcworCQkJCTs7CisJCQkqKQorCQkJCWNvbW1hbmQ9ImdpdCBjaGVja291dCAkc3ViZm9yY2UgLXEiCisJCQkJZGllX21zZz0iJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBjaGVja291dCAnXCRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnXCRzbV9wYXRoJyIpIgorCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRzbV9wYXRoJzogY2hlY2tlZCBvdXQgJ1wkc2hhMSciKSIKKwkJCQk7OworCQkJZXNhYworCisJCQlpZiAoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRzbV9wYXRoIiAmJiAkY29tbWFuZCAiJHNoYTEiKQorCQkJdGhlbgorCQkJCXNheSAiJHNheV9tc2ciCisJCQllbGlmIHRlc3QgLW4gIiRtdXN0X2RpZV9vbl9mYWlsdXJlIgorCQkJdGhlbgorCQkJCWRpZV93aXRoX3N0YXR1cyAyICIkZGllX21zZyIKKwkJCWVsc2UKKwkJCQllcnI9IiR7ZXJyfTskZGllX21zZyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJZmkKKworCQlpZiB0ZXN0IC1uICIkcmVjdXJzaXZlIgorCQl0aGVuCisJCQkoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRzbV9wYXRoIiAmJiBldmFsIGNtZF91cGRhdGUgIiRvcmlnX2ZsYWdzIikKKwkJCXJlcz0kPworCQkJaWYgdGVzdCAkcmVzIC1ndCAwCisJCQl0aGVuCisJCQkJZGllX21zZz0iJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJ1wkc21fcGF0aCciKSIKKwkJCQlpZiB0ZXN0ICRyZXMgLWVxIDEKKwkJCQl0aGVuCisJCQkJCWVycj0iJHtlcnJ9OyRkaWVfbXNnIgorCQkJCQljb250aW51ZQorCQkJCWVsc2UKKwkJCQkJZGllX3dpdGhfc3RhdHVzICRyZXMgIiRkaWVfbXNnIgorCQkJCWZpCisJCQlmaQorCQlmaQorCWRvbmUKKworCWlmIHRlc3QgLW4gIiRlcnIiCisJdGhlbgorCQlPSUZTPSRJRlMKKwkJSUZTPSc7JworCQlmb3IgZSBpbiAkZXJyCisJCWRvCisJCQlpZiB0ZXN0IC1uICIkZSIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiJGUiCisJCQlmaQorCQlkb25lCisJCUlGUz0kT0lGUworCQlleGl0IDEKKwlmaQorCX0KK30KKworc2V0X25hbWVfcmV2ICgpIHsKKwlyZXZuYW1lPSQoICgKKwkJY2xlYXJfbG9jYWxfZ2l0X2VudgorCQljZCAiJDEiICYmIHsKKwkJCWdpdCBkZXNjcmliZSAiJDIiIDI+L2Rldi9udWxsIHx8CisJCQlnaXQgZGVzY3JpYmUgLS10YWdzICIkMiIgMj4vZGV2L251bGwgfHwKKwkJCWdpdCBkZXNjcmliZSAtLWNvbnRhaW5zICIkMiIgMj4vZGV2L251bGwgfHwKKwkJCWdpdCBkZXNjcmliZSAtLWFsbCAtLWFsd2F5cyAiJDIiCisJCX0KKwkpICkKKwl0ZXN0IC16ICIkcmV2bmFtZSIgfHwgcmV2bmFtZT0iICgkcmV2bmFtZSkiCit9CisjCisjIFNob3cgY29tbWl0IHN1bW1hcnkgZm9yIHN1Ym1vZHVsZXMgaW4gaW5kZXggb3Igd29ya2luZyB0cmVlCisjCisjIElmICctLWNhY2hlZCcgaXMgZ2l2ZW4sIHNob3cgc3VtbWFyeSBiZXR3ZWVuIGluZGV4IGFuZCBnaXZlbiBjb21taXQsCisjIG9yIGJldHdlZW4gd29ya2luZyB0cmVlIGFuZCBnaXZlbiBjb21taXQKKyMKKyMgJEAgPSBbY29tbWl0IChkZWZhdWx0ICdIRUFEJyksXSByZXF1ZXN0ZWQgcGF0aHMgKGRlZmF1bHQgYWxsKQorIworY21kX3N1bW1hcnkoKSB7CisJc3VtbWFyeV9saW1pdD0tMQorCWZvcl9zdGF0dXM9CisJZGlmZl9jbWQ9ZGlmZi1pbmRleAorCisJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiBzdW1tYXJ5Ii4KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS0tY2FjaGVkKQorCQkJY2FjaGVkPSIkMSIKKwkJCTs7CisJCS0tZmlsZXMpCisJCQlmaWxlcz0iJDEiCisJCQk7OworCQktLWZvci1zdGF0dXMpCisJCQlmb3Jfc3RhdHVzPSIkMSIKKwkJCTs7CisJCS1ufC0tc3VtbWFyeS1saW1pdCkKKwkJCWlmIHN1bW1hcnlfbGltaXQ9JCgoJDIgKyAwKSkgMj4vZGV2L251bGwgJiYgdGVzdCAiJHN1bW1hcnlfbGltaXQiID0gIiQyIgorCQkJdGhlbgorCQkJCToKKwkJCWVsc2UKKwkJCQl1c2FnZQorCQkJZmkKKwkJCXNoaWZ0CisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJdGVzdCAkc3VtbWFyeV9saW1pdCA9IDAgJiYgcmV0dXJuCisKKwlpZiByZXY9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IC0tZGVmYXVsdCBIRUFEICR7MSsiJDEifSkKKwl0aGVuCisJCWhlYWQ9JHJldgorCQl0ZXN0ICQjID0gMCB8fCBzaGlmdAorCWVsaWYgdGVzdCAteiAiJDEiIC1vICIkMSIgPSAiSEVBRCIKKwl0aGVuCisJCSMgYmVmb3JlIHRoZSBmaXJzdCBjb21taXQ6IGNvbXBhcmUgd2l0aCBhbiBlbXB0eSB0cmVlCisJCWhlYWQ9JChnaXQgaGFzaC1vYmplY3QgLXcgLXQgdHJlZSAtLXN0ZGluIDwvZGV2L251bGwpCisJCXRlc3QgLXogIiQxIiB8fCBzaGlmdAorCWVsc2UKKwkJaGVhZD0iSEVBRCIKKwlmaQorCisJaWYgWyAtbiAiJGZpbGVzIiBdCisJdGhlbgorCQl0ZXN0IC1uICIkY2FjaGVkIiAmJgorCQlkaWUgIiQoZ2V0dGV4dCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIpIgorCQlkaWZmX2NtZD1kaWZmLWZpbGVzCisJCWhlYWQ9CisJZmkKKworCWNkX3RvX3RvcGxldmVsCisJIyBHZXQgbW9kaWZpZWQgbW9kdWxlcyBjYXJlZCBieSB1c2VyCisJbW9kdWxlcz0kKGdpdCAkZGlmZl9jbWQgJGNhY2hlZCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tcmF3ICRoZWFkIC0tICIkQCIgfAorCQlzYW5lX2VncmVwICdeOihbMC03XSogKT8xNjAwMDAnIHwKKwkJd2hpbGUgcmVhZCBtb2Rfc3JjIG1vZF9kc3Qgc2hhMV9zcmMgc2hhMV9kc3Qgc3RhdHVzIG5hbWUKKwkJZG8KKwkJCSMgQWx3YXlzIHNob3cgbW9kdWxlcyBkZWxldGVkIG9yIHR5cGUtY2hhbmdlZCAoYmxvYjwtPm1vZHVsZSkKKwkJCXRlc3QgJHN0YXR1cyA9IEQgLW8gJHN0YXR1cyA9IFQgJiYgZWNobyAiJG5hbWUiICYmIGNvbnRpbnVlCisJCQkjIEFsc28gc2hvdyBhZGRlZCBvciBtb2RpZmllZCBtb2R1bGVzIHdoaWNoIGFyZSBjaGVja2VkIG91dAorCQkJR0lUX0RJUj0iJG5hbWUvLmdpdCIgZ2l0LXJldi1wYXJzZSAtLWdpdC1kaXIgPi9kZXYvbnVsbCAyPiYxICYmCisJCQllY2hvICIkbmFtZSIKKwkJZG9uZQorCSkKKworCXRlc3QgLXogIiRtb2R1bGVzIiAmJiByZXR1cm4KKworCWdpdCAkZGlmZl9jbWQgJGNhY2hlZCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tcmF3ICRoZWFkIC0tICRtb2R1bGVzIHwKKwlzYW5lX2VncmVwICdeOihbMC03XSogKT8xNjAwMDAnIHwKKwljdXQgLWMyLSB8CisJd2hpbGUgcmVhZCBtb2Rfc3JjIG1vZF9kc3Qgc2hhMV9zcmMgc2hhMV9kc3Qgc3RhdHVzIG5hbWUKKwlkbworCQlpZiB0ZXN0IC16ICIkY2FjaGVkIiAmJgorCQkJdGVzdCAkc2hhMV9kc3QgPSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisJCXRoZW4KKwkJCWNhc2UgIiRtb2RfZHN0IiBpbgorCQkJMTYwMDAwKQorCQkJCXNoYTFfZHN0PSQoR0lUX0RJUj0iJG5hbWUvLmdpdCIgZ2l0IHJldi1wYXJzZSBIRUFEKQorCQkJCTs7CisJCQkxMDA2NDQgfCAxMDA3NTUgfCAxMjAwMDApCisJCQkJc2hhMV9kc3Q9JChnaXQgaGFzaC1vYmplY3QgJG5hbWUpCisJCQkJOzsKKwkJCTAwMDAwMCkKKwkJCQk7OyAjIHJlbW92ZWQKKwkJCSopCisJCQkJIyB1bmV4cGVjdGVkIHR5cGUKKwkJCQlldmFsX2dldHRleHRsbiAidW5leHBlY3RlZCBtb2RlIFwkbW9kX2RzdCIgPiYyCisJCQkJY29udGludWUgOzsKKwkJCWVzYWMKKwkJZmkKKwkJbWlzc2luZ19zcmM9CisJCW1pc3NpbmdfZHN0PQorCisJCXRlc3QgJG1vZF9zcmMgPSAxNjAwMDAgJiYKKwkJISBHSVRfRElSPSIkbmFtZS8uZ2l0IiBnaXQtcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICRzaGExX3NyY14wID4vZGV2L251bGwgJiYKKwkJbWlzc2luZ19zcmM9dAorCisJCXRlc3QgJG1vZF9kc3QgPSAxNjAwMDAgJiYKKwkJISBHSVRfRElSPSIkbmFtZS8uZ2l0IiBnaXQtcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICRzaGExX2RzdF4wID4vZGV2L251bGwgJiYKKwkJbWlzc2luZ19kc3Q9dAorCisJCXRvdGFsX2NvbW1pdHM9CisJCWNhc2UgIiRtaXNzaW5nX3NyYywkbWlzc2luZ19kc3QiIGluCisJCXQsKQorCQkJZXJybXNnPSIkKGV2YWxfZ2V0dGV4dCAiICBXYXJuOiBcJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCBcJHNoYTFfc3JjIikiCisJCQk7OworCQksdCkKKwkJCWVycm1zZz0iJChldmFsX2dldHRleHQgIiAgV2FybjogXCRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgXCRzaGExX2RzdCIpIgorCQkJOzsKKwkJdCx0KQorCQkJZXJybXNnPSIkKGV2YWxfZ2V0dGV4dCAiICBXYXJuOiBcJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgXCRzaGExX3NyYyBhbmQgXCRzaGExX2RzdCIpIgorCQkJOzsKKwkJKikKKwkJCWVycm1zZz0KKwkJCXRvdGFsX2NvbW1pdHM9JCgKKwkJCWlmIHRlc3QgJG1vZF9zcmMgPSAxNjAwMDAgLWEgJG1vZF9kc3QgPSAxNjAwMDAKKwkJCXRoZW4KKwkJCQlyYW5nZT0iJHNoYTFfc3JjLi4uJHNoYTFfZHN0IgorCQkJZWxpZiB0ZXN0ICRtb2Rfc3JjID0gMTYwMDAwCisJCQl0aGVuCisJCQkJcmFuZ2U9JHNoYTFfc3JjCisJCQllbHNlCisJCQkJcmFuZ2U9JHNoYTFfZHN0CisJCQlmaQorCQkJR0lUX0RJUj0iJG5hbWUvLmdpdCIgXAorCQkJZ2l0IHJldi1saXN0IC0tZmlyc3QtcGFyZW50ICRyYW5nZSAtLSB8IHdjIC1sCisJCQkpCisJCQl0b3RhbF9jb21taXRzPSIgKCQoKCR0b3RhbF9jb21taXRzICsgMCkpKSIKKwkJCTs7CisJCWVzYWMKKworCQlzaGExX2FiYnJfc3JjPSQoZWNobyAkc2hhMV9zcmMgfCBjdXQgLWMxLTcpCisJCXNoYTFfYWJicl9kc3Q9JChlY2hvICRzaGExX2RzdCB8IGN1dCAtYzEtNykKKwkJaWYgdGVzdCAkc3RhdHVzID0gVAorCQl0aGVuCisJCQlibG9iPSIkKGdldHRleHQgImJsb2IiKSIKKwkJCXN1Ym1vZHVsZT0iJChnZXR0ZXh0ICJzdWJtb2R1bGUiKSIKKwkJCWlmIHRlc3QgJG1vZF9kc3QgPSAxNjAwMDAKKwkJCXRoZW4KKwkJCQllY2hvICIqICRuYW1lICRzaGExX2FiYnJfc3JjKCRibG9iKS0+JHNoYTFfYWJicl9kc3QoJHN1Ym1vZHVsZSkkdG90YWxfY29tbWl0czoiCisJCQllbHNlCisJCQkJZWNobyAiKiAkbmFtZSAkc2hhMV9hYmJyX3NyYygkc3VibW9kdWxlKS0+JHNoYTFfYWJicl9kc3QoJGJsb2IpJHRvdGFsX2NvbW1pdHM6IgorCQkJZmkKKwkJZWxzZQorCQkJZWNobyAiKiAkbmFtZSAkc2hhMV9hYmJyX3NyYy4uLiRzaGExX2FiYnJfZHN0JHRvdGFsX2NvbW1pdHM6IgorCQlmaQorCQlpZiB0ZXN0IC1uICIkZXJybXNnIgorCQl0aGVuCisJCQkjIERvbid0IGdpdmUgZXJyb3IgbXNnIGZvciBtb2RpZmljYXRpb24gd2hvc2UgZHN0IGlzIG5vdCBzdWJtb2R1bGUKKwkJCSMgaS5lLiBkZWxldGVkIG9yIGNoYW5nZWQgdG8gYmxvYgorCQkJdGVzdCAkbW9kX2RzdCA9IDE2MDAwMCAmJiBlY2hvICIkZXJybXNnIgorCQllbHNlCisJCQlpZiB0ZXN0ICRtb2Rfc3JjID0gMTYwMDAwIC1hICRtb2RfZHN0ID0gMTYwMDAwCisJCQl0aGVuCisJCQkJbGltaXQ9CisJCQkJdGVzdCAkc3VtbWFyeV9saW1pdCAtZ3QgMCAmJiBsaW1pdD0iLSRzdW1tYXJ5X2xpbWl0IgorCQkJCUdJVF9ESVI9IiRuYW1lLy5naXQiIFwKKwkJCQlnaXQgbG9nICRsaW1pdCAtLXByZXR0eT0nZm9ybWF0OiAgJW0gJXMnIFwKKwkJCQktLWZpcnN0LXBhcmVudCAkc2hhMV9zcmMuLi4kc2hhMV9kc3QKKwkJCWVsaWYgdGVzdCAkbW9kX2RzdCA9IDE2MDAwMAorCQkJdGhlbgorCQkJCUdJVF9ESVI9IiRuYW1lLy5naXQiIFwKKwkJCQlnaXQgbG9nIC0tcHJldHR5PSdmb3JtYXQ6ICA+ICVzJyAtMSAkc2hhMV9kc3QKKwkJCWVsc2UKKwkJCQlHSVRfRElSPSIkbmFtZS8uZ2l0IiBcCisJCQkJZ2l0IGxvZyAtLXByZXR0eT0nZm9ybWF0OiAgPCAlcycgLTEgJHNoYTFfc3JjCisJCQlmaQorCQkJZWNobworCQlmaQorCQllY2hvCisJZG9uZSB8CisJaWYgdGVzdCAtbiAiJGZvcl9zdGF0dXMiOyB0aGVuCisJCWlmIFsgLW4gIiRmaWxlcyIgXTsgdGhlbgorCQkJZ2V0dGV4dGxuICIjIFN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorCQllbHNlCisJCQlnZXR0ZXh0bG4gIiMgU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKKwkJZmkKKwkJZWNobyAiIyIKKwkJc2VkIC1lICdzfF58IyB8JyAtZSAnc3xeIyAkfCN8JworCWVsc2UKKwkJY2F0CisJZmkKK30KKyMKKyMgTGlzdCBhbGwgc3VibW9kdWxlcywgcHJlZml4ZWQgd2l0aDoKKyMgIC0gc3VibW9kdWxlIG5vdCBpbml0aWFsaXplZAorIyAgKyBkaWZmZXJlbnQgcmV2aXNpb24gY2hlY2tlZCBvdXQKKyMKKyMgSWYgLS1jYWNoZWQgd2FzIHNwZWNpZmllZCB0aGUgcmV2aXNpb24gaW4gdGhlIGluZGV4IHdpbGwgYmUgcHJpbnRlZAorIyBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgcmV2aXNpb24uCisjCisjICRAID0gcmVxdWVzdGVkIHBhdGhzIChkZWZhdWx0IHRvIGFsbCkKKyMKK2NtZF9zdGF0dXMoKQoreworCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gc3RhdHVzIi4KKwlvcmlnX2ZsYWdzPQorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQk7OworCQktLWNhY2hlZCkKKwkJCWNhY2hlZD0xCisJCQk7OworCQktLXJlY3Vyc2l2ZSkKKwkJCXJlY3Vyc2l2ZT0xCisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCW9yaWdfZmxhZ3M9IiRvcmlnX2ZsYWdzICQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkMSIpIgorCQlzaGlmdAorCWRvbmUKKworCW1vZHVsZV9saXN0ICIkQCIgfAorCXdoaWxlIHJlYWQgbW9kZSBzaGExIHN0YWdlIHNtX3BhdGgKKwlkbworCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIKKwkJbmFtZT0kKG1vZHVsZV9uYW1lICIkc21fcGF0aCIpIHx8IGV4aXQKKwkJdXJsPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cmwpCisJCWRpc3BsYXlwYXRoPSIkcHJlZml4JHNtX3BhdGgiCisJCWlmIHRlc3QgIiRzdGFnZSIgPSBVCisJCXRoZW4KKwkJCXNheSAiVSRzaGExICRkaXNwbGF5cGF0aCIKKwkJCWNvbnRpbnVlCisJCWZpCisJCWlmIHRlc3QgLXogIiR1cmwiIHx8ICEgdGVzdCAtZCAiJHNtX3BhdGgiLy5naXQgLW8gLWYgIiRzbV9wYXRoIi8uZ2l0CisJCXRoZW4KKwkJCXNheSAiLSRzaGExICRkaXNwbGF5cGF0aCIKKwkJCWNvbnRpbnVlOworCQlmaQorCQlzZXRfbmFtZV9yZXYgIiRzbV9wYXRoIiAiJHNoYTEiCisJCWlmIGdpdCBkaWZmLWZpbGVzIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1xdWlldCAtLSAiJHNtX3BhdGgiCisJCXRoZW4KKwkJCXNheSAiICRzaGExICRkaXNwbGF5cGF0aCRyZXZuYW1lIgorCQllbHNlCisJCQlpZiB0ZXN0IC16ICIkY2FjaGVkIgorCQkJdGhlbgorCQkJCXNoYTE9JChjbGVhcl9sb2NhbF9naXRfZW52OyBjZCAiJHNtX3BhdGgiICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKwkJCQlzZXRfbmFtZV9yZXYgIiRzbV9wYXRoIiAiJHNoYTEiCisJCQlmaQorCQkJc2F5ICIrJHNoYTEgJGRpc3BsYXlwYXRoJHJldm5hbWUiCisJCWZpCisKKwkJaWYgdGVzdCAtbiAiJHJlY3Vyc2l2ZSIKKwkJdGhlbgorCQkJKAorCQkJCXByZWZpeD0iJGRpc3BsYXlwYXRoLyIKKwkJCQljbGVhcl9sb2NhbF9naXRfZW52CisJCQkJY2QgIiRzbV9wYXRoIiAmJgorCQkJCWV2YWwgY21kX3N0YXR1cyAiJG9yaWdfYXJncyIKKwkJCSkgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJ1wkc21fcGF0aCciKSIKKwkJZmkKKwlkb25lCit9CisjCisjIFN5bmMgcmVtb3RlIHVybHMgZm9yIHN1Ym1vZHVsZXMKKyMgVGhpcyBtYWtlcyB0aGUgdmFsdWUgZm9yIHJlbW90ZS4kcmVtb3RlLnVybCBtYXRjaCB0aGUgdmFsdWUKKyMgc3BlY2lmaWVkIGluIC5naXRtb2R1bGVzLgorIworY21kX3N5bmMoKQoreworCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQlzaGlmdAorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCWRvbmUKKwljZF90b190b3BsZXZlbAorCW1vZHVsZV9saXN0ICIkQCIgfAorCXdoaWxlIHJlYWQgbW9kZSBzaGExIHN0YWdlIHNtX3BhdGgKKwlkbworCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIKKwkJbmFtZT0kKG1vZHVsZV9uYW1lICIkc21fcGF0aCIpCisJCXVybD0kKGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1nZXQgc3VibW9kdWxlLiIkbmFtZSIudXJsKQorCisJCSMgUG9zc2libHkgYSB1cmwgcmVsYXRpdmUgdG8gcGFyZW50CisJCWNhc2UgIiR1cmwiIGluCisJCS4vKnwuLi8qKQorCQkJIyByZXdyaXRlIGZvby9iYXIgYXMgLi4vLi4gdG8gZmluZCBwYXRoIGZyb20KKwkJCSMgc3VibW9kdWxlIHdvcmsgdHJlZSB0byBzdXBlcnByb2plY3Qgd29yayB0cmVlCisJCQl1cF9wYXRoPSIkKGVjaG8gIiRzbV9wYXRoIiB8IHNlZCAicy9bXi9dW14vXSovLi4vZyIpIiAmJgorCQkJIyBndWFyYW50ZWUgYSB0cmFpbGluZyAvCisJCQl1cF9wYXRoPSR7dXBfcGF0aCUvfS8gJiYKKwkJCSMgcGF0aCBmcm9tIHN1Ym1vZHVsZSB3b3JrIHRyZWUgdG8gc3VibW9kdWxlIG9yaWdpbiByZXBvCisJCQlzdWJfb3JpZ2luX3VybD0kKHJlc29sdmVfcmVsYXRpdmVfdXJsICIkdXJsIiAiJHVwX3BhdGgiKSAmJgorCQkJIyBwYXRoIGZyb20gc3VwZXJwcm9qZWN0IHdvcmsgdHJlZSB0byBzdWJtb2R1bGUgb3JpZ2luIHJlcG8KKwkJCXN1cGVyX2NvbmZpZ191cmw9JChyZXNvbHZlX3JlbGF0aXZlX3VybCAiJHVybCIpIHx8IGV4aXQKKwkJCTs7CisJCSopCisJCQlzdWJfb3JpZ2luX3VybD0iJHVybCIKKwkJCXN1cGVyX2NvbmZpZ191cmw9IiR1cmwiCisJCQk7OworCQllc2FjCisKKwkJaWYgZ2l0IGNvbmZpZyAic3VibW9kdWxlLiRuYW1lLnVybCIgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorCQl0aGVuCisJCQlzYXkgIiQoZXZhbF9nZXR0ZXh0ICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICdcJG5hbWUnIikiCisJCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCAiJHN1cGVyX2NvbmZpZ191cmwiCisKKwkJCWlmIHRlc3QgLWUgIiRzbV9wYXRoIi8uZ2l0CisJCQl0aGVuCisJCQkoCisJCQkJY2xlYXJfbG9jYWxfZ2l0X2VudgorCQkJCWNkICIkc21fcGF0aCIKKwkJCQlyZW1vdGU9JChnZXRfZGVmYXVsdF9yZW1vdGUpCisJCQkJZ2l0IGNvbmZpZyByZW1vdGUuIiRyZW1vdGUiLnVybCAiJHN1Yl9vcmlnaW5fdXJsIgorCQkJKQorCQkJZmkKKwkJZmkKKwlkb25lCit9CisKKyMgVGhpcyBsb29wIHBhcnNlcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBmaW5kIHRoZQorIyBzdWJjb21tYW5kIG5hbWUgdG8gZGlzcGF0Y2guICBQYXJzaW5nIG9mIHRoZSBzdWJjb21tYW5kIHNwZWNpZmljCisjIG9wdGlvbnMgYXJlIHByaW1hcmlseSBkb25lIGJ5IHRoZSBzdWJjb21tYW5kIGltcGxlbWVudGF0aW9ucy4KKyMgU3ViY29tbWFuZCBzcGVjaWZpYyBvcHRpb25zIHN1Y2ggYXMgLS1icmFuY2ggYW5kIC0tY2FjaGVkIGFyZQorIyBwYXJzZWQgaGVyZSBhcyB3ZWxsLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKword2hpbGUgdGVzdCAkIyAhPSAwICYmIHRlc3QgLXogIiRjb21tYW5kIgorZG8KKwljYXNlICIkMSIgaW4KKwlhZGQgfCBmb3JlYWNoIHwgaW5pdCB8IHVwZGF0ZSB8IHN0YXR1cyB8IHN1bW1hcnkgfCBzeW5jKQorCQljb21tYW5kPSQxCisJCTs7CisJLXF8LS1xdWlldCkKKwkJR0lUX1FVSUVUPTEKKwkJOzsKKwktYnwtLWJyYW5jaCkKKwkJY2FzZSAiJDIiIGluCisJCScnKQorCQkJdXNhZ2UKKwkJCTs7CisJCWVzYWMKKwkJYnJhbmNoPSIkMiI7IHNoaWZ0CisJCTs7CisJLS1jYWNoZWQpCisJCWNhY2hlZD0iJDEiCisJCTs7CisJLS0pCisJCWJyZWFrCisJCTs7CisJLSopCisJCXVzYWdlCisJCTs7CisJKikKKwkJYnJlYWsKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworIyBObyBjb21tYW5kIHdvcmQgZGVmYXVsdHMgdG8gInN0YXR1cyIKK2lmIHRlc3QgLXogIiRjb21tYW5kIgordGhlbgorICAgIGlmIHRlc3QgJCMgPSAwCisgICAgdGhlbgorCWNvbW1hbmQ9c3RhdHVzCisgICAgZWxzZQorCXVzYWdlCisgICAgZmkKK2ZpCisKKyMgIi1iIGJyYW5jaCIgaXMgYWNjZXB0ZWQgb25seSBieSAiYWRkIgoraWYgdGVzdCAtbiAiJGJyYW5jaCIgJiYgdGVzdCAiJGNvbW1hbmQiICE9IGFkZAordGhlbgorCXVzYWdlCitmaQorCisjICItLWNhY2hlZCIgaXMgYWNjZXB0ZWQgb25seSBieSAic3RhdHVzIiBhbmQgInN1bW1hcnkiCitpZiB0ZXN0IC1uICIkY2FjaGVkIiAmJiB0ZXN0ICIkY29tbWFuZCIgIT0gc3RhdHVzIC1hICIkY29tbWFuZCIgIT0gc3VtbWFyeQordGhlbgorCXVzYWdlCitmaQorCisiY21kXyRjb21tYW5kIiAiJEAiCmRpZmYgLS1naXQgYS9naXQtc3ZuLnBlcmwgYi9naXQtc3ZuLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmQ1MjY2YwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zdm4ucGVybApAQCAtMCwwICsxLDIxMTQgQEAKKyMhL3Vzci9iaW4vcGVybAorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIEVyaWMgV29uZyA8bm9ybWFscGVyc29uQHloYnQubmV0PgorIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKK3VzZSA1LjAwODsKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7Cit1c2UgdmFycyBxdy8JJEFVVEhPUiAkVkVSU0lPTgorCQkkc2hhMSAkc2hhMV9zaG9ydCAkX3JldmlzaW9uICRfcmVwb3NpdG9yeQorCQkkX3EgJF9hdXRob3JzICRfYXV0aG9yc19wcm9nICV1c2Vycy87CiskQVVUSE9SID0gJ0VyaWMgV29uZyA8bm9ybWFscGVyc29uQHloYnQubmV0Pic7CiskVkVSU0lPTiA9ICdAQEdJVF9WRVJTSU9OQEAnOworCit1c2UgQ2FycCBxdy9jcm9hay87Cit1c2UgRGlnZXN0OjpNRDU7Cit1c2UgSU86OkZpbGUgcXcvLzsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdy9kaXJuYW1lIGJhc2VuYW1lLzsKK3VzZSBGaWxlOjpQYXRoIHF3L21rcGF0aC87Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBGaWxlOjpGaW5kOwordXNlIEdldG9wdDo6TG9uZyBxdy86Y29uZmlnIGdudV9nZXRvcHQgbm9faWdub3JlX2Nhc2UgYXV0b19hYmJyZXYvOwordXNlIElQQzo6T3BlbjM7Cit1c2UgTWVtb2l6ZTsKKwordXNlIEdpdDo6U1ZOOwordXNlIEdpdDo6U1ZOOjpFZGl0b3I7Cit1c2UgR2l0OjpTVk46OkZldGNoZXI7Cit1c2UgR2l0OjpTVk46OlJhOwordXNlIEdpdDo6U1ZOOjpQcm9tcHQ7Cit1c2UgR2l0OjpTVk46OkxvZzsKK3VzZSBHaXQ6OlNWTjo6TWlncmF0aW9uOworCit1c2UgR2l0OjpTVk46OlV0aWxzIHF3KAorCWZhdGFsCisJY2FuX2NvbXByZXNzCisJY2Fub25pY2FsaXplX3BhdGgKKwljYW5vbmljYWxpemVfdXJsCisJam9pbl9wYXRocworCWFkZF9wYXRoX3RvX3VybAorCWpvaW5fcGF0aHMKKyk7CisKK3VzZSBHaXQgcXcoCisJZ2l0X2NtZF90cnkKKwljb21tYW5kCisJY29tbWFuZF9vbmVsaW5lCisJY29tbWFuZF9ub2lzeQorCWNvbW1hbmRfb3V0cHV0X3BpcGUKKwljb21tYW5kX2Nsb3NlX3BpcGUKKwljb21tYW5kX2JpZGlfcGlwZQorCWNvbW1hbmRfY2xvc2VfYmlkaV9waXBlCispOworCitCRUdJTiB7CisJTWVtb2l6ZTo6bWVtb2l6ZSAnR2l0Ojpjb25maWcnOworCU1lbW9pemU6Om1lbW9pemUgJ0dpdDo6Y29uZmlnX2Jvb2wnOworfQorCisKKyMgRnJvbSB3aGljaCBzdWJkaXIgaGF2ZSB3ZSBiZWVuIGludm9rZWQ/CitteSAkY21kX2Rpcl9wcmVmaXggPSBldmFsIHsKKwljb21tYW5kX29uZWxpbmUoW3F3L3Jldi1wYXJzZSAtLXNob3ctcHJlZml4L10sIFNUREVSUiA9PiAwKQorfSB8fCAnJzsKKworbXkgJGdpdF9kaXJfdXNlcl9zZXQgPSAxIGlmIGRlZmluZWQgJEVOVntHSVRfRElSfTsKKyRFTlZ7R0lUX0RJUn0gfHw9ICcuZ2l0JzsKKyRHaXQ6OlNWTjo6UmE6Ol9sb2dfd2luZG93X3NpemUgPSAxMDA7CisKK2lmICghIGV4aXN0cyAkRU5We1NWTl9TU0h9ICYmIGV4aXN0cyAkRU5We0dJVF9TU0h9KSB7CisJJEVOVntTVk5fU1NIfSA9ICRFTlZ7R0lUX1NTSH07Cit9CisKK2lmIChleGlzdHMgJEVOVntTVk5fU1NIfSAmJiAkXk8gZXEgJ21zeXMnKSB7CisJJEVOVntTVk5fU1NIfSA9fiBzL1xcL1xcXFwvZzsKKwkkRU5We1NWTl9TU0h9ID1+IHMvKC4qKS8iJDEiLzsKK30KKworJEdpdDo6U1ZOOjpMb2c6OlRaID0gJEVOVntUWn07CiskRU5We1RafSA9ICdVVEMnOworJHwgPSAxOyAjIHVuYnVmZmVyIFNURE9VVAorCisjIEFsbCBTVk4gY29tbWFuZHMgZG8gaXQuICBPdGhlcndpc2Ugd2UgbWF5IGRpZSBvbiBTSUdQSVBFIHdoZW4gdGhlIHJlbW90ZQorIyByZXBvc2l0b3J5IGRlY2lkZXMgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gd2hpY2ggd2UgZXhwZWN0IHRvIGJlIGtlcHQgYWxpdmUuCiskU0lHe1BJUEV9ID0gJ0lHTk9SRSc7CisKKyMgR2l2ZW4gYSBkb3Qgc2VwYXJhdGVkIHZlcnNpb24gbnVtYmVyLCAic3VidHJhY3QiIGl0IGZyb20KKyMgdGhlIFNWTjo6Q29yZTo6VkVSU0lPTjsgbm9uLW5lZ2FpdGl2ZSByZXR1cm4gbWVhbnMgdGhlIFNWTjo6Q29yZQorIyBpcyBhdCBsZWFzdCBhdCB0aGUgdmVyc2lvbiB0aGUgY2FsbGVyIGFza2VkIGZvci4KK3N1YiBjb21wYXJlX3N2bl92ZXJzaW9uIHsKKwlteSAoQG91cnMpID0gc3BsaXQoL1wuLywgJFNWTjo6Q29yZTo6VkVSU0lPTik7CisJbXkgKEB0aGVpcnMpID0gc3BsaXQoL1wuLywgJF9bMF0pOworCW15ICgkaSwgJGRpZmYpOworCisJZm9yICgkaSA9IDA7ICRpIDwgQG91cnMgJiYgJGkgPCBAdGhlaXJzOyAkaSsrKSB7CisJCSRkaWZmID0gJG91cnNbJGldIC0gJHRoZWlyc1skaV07CisJCXJldHVybiAkZGlmZiBpZiAoJGRpZmYpOworCX0KKwlyZXR1cm4gMSBpZiAoJGkgPCBAb3Vycyk7CisJcmV0dXJuIC0xIGlmICgkaSA8IEB0aGVpcnMpOworCXJldHVybiAwOworfQorCitzdWIgX3JlcV9zdm4geworCXJlcXVpcmUgU1ZOOjpDb3JlOyAjIHVzZSgpLWluZyB0aGlzIGNhdXNlcyBzZWdmYXVsdHMgZm9yIG1lLi4uICpzaHJ1ZyoKKwlyZXF1aXJlIFNWTjo6UmE7CisJcmVxdWlyZSBTVk46OkRlbHRhOworCWlmICg6OmNvbXBhcmVfc3ZuX3ZlcnNpb24oJzEuMS4wJykgPCAwKSB7CisJCWZhdGFsICJOZWVkIFNWTjo6Q29yZSAxLjEuMCBvciBiZXR0ZXIgKGdvdCAkU1ZOOjpDb3JlOjpWRVJTSU9OKSI7CisJfQorfQorCiskc2hhMSA9IHFyL1thLWZcZF17NDB9LzsKKyRzaGExX3Nob3J0ID0gcXIvW2EtZlxkXXs0LDQwfS87CitteSAoJF9zdGRpbiwgJF9oZWxwLCAkX2VkaXQsCisJJF9tZXNzYWdlLCAkX2ZpbGUsICRfYnJhbmNoX2Rlc3QsCisJJF90ZW1wbGF0ZSwgJF9zaGFyZWQsCisJJF92ZXJzaW9uLCAkX2ZldGNoX2FsbCwgJF9ub19yZWJhc2UsICRfZmV0Y2hfcGFyZW50LAorCSRfbWVyZ2UsICRfc3RyYXRlZ3ksICRfcHJlc2VydmVfbWVyZ2VzLCAkX2RyeV9ydW4sICRfbG9jYWwsCisJJF9wcmVmaXgsICRfbm9fY2hlY2tvdXQsICRfdXJsLCAkX3ZlcmJvc2UsCisJJF9jb21taXRfdXJsLCAkX3RhZywgJF9tZXJnZV9pbmZvLCAkX2ludGVyYWN0aXZlKTsKKworIyBUaGlzIGlzIGEgcmVmYWN0b3JpbmcgYXJ0aWZhY3Qgc28gR2l0OjpTVk4gY2FuIGdldCBhdCB0aGlzIGdpdC1zdm4gc3dpdGNoLgorc3ViIG9wdF9wcmVmaXggeyByZXR1cm4gJF9wcmVmaXggfHwgJycgfQorCiskR2l0OjpTVk46OkZldGNoZXI6Ol9wbGFjZWhvbGRlcl9maWxlbmFtZSA9ICIuZ2l0aWdub3JlIjsKKyRfcSB8fD0gMDsKK215ICVyZW1vdGVfb3B0cyA9ICggJ3VzZXJuYW1lPXMnID0+IFwkR2l0OjpTVk46OlByb21wdDo6X3VzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAnY29uZmlnLWRpcj1zJyA9PiBcJEdpdDo6U1ZOOjpSYTo6Y29uZmlnX2RpciwKKyAgICAgICAgICAgICAgICAgICAgJ25vLWF1dGgtY2FjaGUnID0+IFwkR2l0OjpTVk46OlByb21wdDo6X25vX2F1dGhfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICdpZ25vcmUtcGF0aHM9cycgPT4gXCRHaXQ6OlNWTjo6RmV0Y2hlcjo6X2lnbm9yZV9yZWdleCwKKyAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZS1yZWZzPXMnID0+IFwkR2l0OjpTVk46OlJhOjpfaWdub3JlX3JlZnNfcmVnZXggKTsKK215ICVmY19vcHRzID0gKCAnZm9sbG93LXBhcmVudHxmb2xsb3chJyA9PiBcJEdpdDo6U1ZOOjpfZm9sbG93X3BhcmVudCwKKwkJJ2F1dGhvcnMtZmlsZXxBPXMnID0+IFwkX2F1dGhvcnMsCisJCSdhdXRob3JzLXByb2c9cycgPT4gXCRfYXV0aG9yc19wcm9nLAorCQkncmVwYWNrOmknID0+IFwkR2l0OjpTVk46Ol9yZXBhY2ssCisJCSdub01ldGFkYXRhJyA9PiBcJEdpdDo6U1ZOOjpfbm9fbWV0YWRhdGEsCisJCSd1c2VTdm1Qcm9wcycgPT4gXCRHaXQ6OlNWTjo6X3VzZV9zdm1fcHJvcHMsCisJCSd1c2VTdm5zeW5jUHJvcHMnID0+IFwkR2l0OjpTVk46Ol91c2Vfc3Zuc3luY19wcm9wcywKKwkJJ2xvZy13aW5kb3ctc2l6ZT1pJyA9PiBcJEdpdDo6U1ZOOjpSYTo6X2xvZ193aW5kb3dfc2l6ZSwKKwkJJ25vLWNoZWNrb3V0JyA9PiBcJF9ub19jaGVja291dCwKKwkJJ3F1aWV0fHErJyA9PiBcJF9xLAorCQkncmVwYWNrLWZsYWdzfHJlcGFjay1hcmdzfHJlcGFjay1vcHRzPXMnID0+CisJCSAgIFwkR2l0OjpTVk46Ol9yZXBhY2tfZmxhZ3MsCisJCSd1c2UtbG9nLWF1dGhvcicgPT4gXCRHaXQ6OlNWTjo6X3VzZV9sb2dfYXV0aG9yLAorCQknYWRkLWF1dGhvci1mcm9tJyA9PiBcJEdpdDo6U1ZOOjpfYWRkX2F1dGhvcl9mcm9tLAorCQknbG9jYWx0aW1lJyA9PiBcJEdpdDo6U1ZOOjpfbG9jYWx0aW1lLAorCQklcmVtb3RlX29wdHMgKTsKKworbXkgKCRfdHJ1bmssIEBfdGFncywgQF9icmFuY2hlcywgJF9zdGRsYXlvdXQpOworbXkgJWljdjsKK215ICVpbml0X29wdHMgPSAoICd0ZW1wbGF0ZT1zJyA9PiBcJF90ZW1wbGF0ZSwgJ3NoYXJlZDpzJyA9PiBcJF9zaGFyZWQsCisgICAgICAgICAgICAgICAgICAndHJ1bmt8VD1zJyA9PiBcJF90cnVuaywgJ3RhZ3N8dD1zQCcgPT4gXEBfdGFncywKKyAgICAgICAgICAgICAgICAgICdicmFuY2hlc3xiPXNAJyA9PiBcQF9icmFuY2hlcywgJ3ByZWZpeD1zJyA9PiBcJF9wcmVmaXgsCisgICAgICAgICAgICAgICAgICAnc3RkbGF5b3V0fHMnID0+IFwkX3N0ZGxheW91dCwKKyAgICAgICAgICAgICAgICAgICdtaW5pbWl6ZS11cmx8bSEnID0+IFwkR2l0OjpTVk46Ol9taW5pbWl6ZV91cmwsCisJCSAgJ25vLW1ldGFkYXRhJyA9PiBzdWIgeyAkaWN2e25vTWV0YWRhdGF9ID0gMSB9LAorCQkgICd1c2Utc3ZtLXByb3BzJyA9PiBzdWIgeyAkaWN2e3VzZVN2bVByb3BzfSA9IDEgfSwKKwkJICAndXNlLXN2bnN5bmMtcHJvcHMnID0+IHN1YiB7ICRpY3Z7dXNlU3Zuc3luY1Byb3BzfSA9IDEgfSwKKwkJICAncmV3cml0ZS1yb290PXMnID0+IHN1YiB7ICRpY3Z7cmV3cml0ZVJvb3R9ID0gJF9bMV0gfSwKKwkJICAncmV3cml0ZS11dWlkPXMnID0+IHN1YiB7ICRpY3Z7cmV3cml0ZVVVSUR9ID0gJF9bMV0gfSwKKyAgICAgICAgICAgICAgICAgICVyZW1vdGVfb3B0cyApOworbXkgJWNtdF9vcHRzID0gKCAnZWRpdHxlJyA9PiBcJF9lZGl0LAorCQkncm1kaXInID0+IFwkR2l0OjpTVk46OkVkaXRvcjo6X3JtZGlyLAorCQknZmluZC1jb3BpZXMtaGFyZGVyJyA9PiBcJEdpdDo6U1ZOOjpFZGl0b3I6Ol9maW5kX2NvcGllc19oYXJkZXIsCisJCSdsPWknID0+IFwkR2l0OjpTVk46OkVkaXRvcjo6X3JlbmFtZV9saW1pdCwKKwkJJ2NvcHktc2ltaWxhcml0eXxDPWknPT4gXCRHaXQ6OlNWTjo6RWRpdG9yOjpfY3Bfc2ltaWxhcml0eQorKTsKKworbXkgJWNtZCA9ICgKKwlmZXRjaCA9PiBbIFwmY21kX2ZldGNoLCAiRG93bmxvYWQgbmV3IHJldmlzaW9ucyBmcm9tIFNWTiIsCisJCQl7ICdyZXZpc2lvbnxyPXMnID0+IFwkX3JldmlzaW9uLAorCQkJICAnZmV0Y2gtYWxsfGFsbCcgPT4gXCRfZmV0Y2hfYWxsLAorCQkJICAncGFyZW50fHAnID0+IFwkX2ZldGNoX3BhcmVudCwKKwkJCSAgICVmY19vcHRzIH0gXSwKKwljbG9uZSA9PiBbIFwmY21kX2Nsb25lLCAiSW5pdGlhbGl6ZSBhbmQgZmV0Y2ggcmV2aXNpb25zIiwKKwkJCXsgJ3JldmlzaW9ufHI9cycgPT4gXCRfcmV2aXNpb24sCisJCQkgICdwcmVzZXJ2ZS1lbXB0eS1kaXJzJyA9PgorCQkJCVwkR2l0OjpTVk46OkZldGNoZXI6Ol9wcmVzZXJ2ZV9lbXB0eV9kaXJzLAorCQkJICAncGxhY2Vob2xkZXItZmlsZW5hbWU9cycgPT4KKwkJCQlcJEdpdDo6U1ZOOjpGZXRjaGVyOjpfcGxhY2Vob2xkZXJfZmlsZW5hbWUsCisJCQkgICAlZmNfb3B0cywgJWluaXRfb3B0cyB9IF0sCisJaW5pdCA9PiBbIFwmY21kX2luaXQsICJJbml0aWFsaXplIGEgcmVwbyBmb3IgdHJhY2tpbmciIC4KKwkJCSAgIiAocmVxdWlyZXMgVVJMIGFyZ3VtZW50KSIsCisJCQkgIFwlaW5pdF9vcHRzIF0sCisJJ211bHRpLWluaXQnID0+IFsgXCZjbWRfbXVsdGlfaW5pdCwKKwkgICAgICAgICAgICAgICAgICAiRGVwcmVjYXRlZCBhbGlhcyBmb3IgIi4KKwkJCSAgIickMCBpbml0IC1UPHRydW5rPiAtYjxicmFuY2hlcz4gLXQ8dGFncz4nIiwKKwkJCSAgXCVpbml0X29wdHMgXSwKKwlkY29tbWl0ID0+IFsgXCZjbWRfZGNvbW1pdCwKKwkgICAgICAgICAgICAgJ0NvbW1pdCBzZXZlcmFsIGRpZmZzIHRvIG1lcmdlIHdpdGggdXBzdHJlYW0nLAorCQkJeyAnbWVyZ2V8bXxNJyA9PiBcJF9tZXJnZSwKKwkJCSAgJ3N0cmF0ZWd5fHM9cycgPT4gXCRfc3RyYXRlZ3ksCisJCQkgICd2ZXJib3NlfHYnID0+IFwkX3ZlcmJvc2UsCisJCQkgICdkcnktcnVufG4nID0+IFwkX2RyeV9ydW4sCisJCQkgICdmZXRjaC1hbGx8YWxsJyA9PiBcJF9mZXRjaF9hbGwsCisJCQkgICdjb21taXQtdXJsPXMnID0+IFwkX2NvbW1pdF91cmwsCisJCQkgICdyZXZpc2lvbnxyPWknID0+IFwkX3JldmlzaW9uLAorCQkJICAnbm8tcmViYXNlJyA9PiBcJF9ub19yZWJhc2UsCisJCQkgICdtZXJnZWluZm89cycgPT4gXCRfbWVyZ2VfaW5mbywKKwkJCSAgJ2ludGVyYWN0aXZlfGknID0+IFwkX2ludGVyYWN0aXZlLAorCQkJJWNtdF9vcHRzLCAlZmNfb3B0cyB9IF0sCisJYnJhbmNoID0+IFsgXCZjbWRfYnJhbmNoLAorCSAgICAgICAgICAgICdDcmVhdGUgYSBicmFuY2ggaW4gdGhlIFNWTiByZXBvc2l0b3J5JywKKwkgICAgICAgICAgICB7ICdtZXNzYWdlfG09cycgPT4gXCRfbWVzc2FnZSwKKwkgICAgICAgICAgICAgICdkZXN0aW5hdGlvbnxkPXMnID0+IFwkX2JyYW5jaF9kZXN0LAorCSAgICAgICAgICAgICAgJ2RyeS1ydW58bicgPT4gXCRfZHJ5X3J1biwKKwkgICAgICAgICAgICAgICd0YWd8dCcgPT4gXCRfdGFnLAorCSAgICAgICAgICAgICAgJ3VzZXJuYW1lPXMnID0+IFwkR2l0OjpTVk46OlByb21wdDo6X3VzZXJuYW1lLAorCSAgICAgICAgICAgICAgJ2NvbW1pdC11cmw9cycgPT4gXCRfY29tbWl0X3VybCB9IF0sCisJdGFnID0+IFsgc3ViIHsgJF90YWcgPSAxOyBjbWRfYnJhbmNoKEBfKSB9LAorCSAgICAgICAgICdDcmVhdGUgYSB0YWcgaW4gdGhlIFNWTiByZXBvc2l0b3J5JywKKwkgICAgICAgICB7ICdtZXNzYWdlfG09cycgPT4gXCRfbWVzc2FnZSwKKwkgICAgICAgICAgICdkZXN0aW5hdGlvbnxkPXMnID0+IFwkX2JyYW5jaF9kZXN0LAorCSAgICAgICAgICAgJ2RyeS1ydW58bicgPT4gXCRfZHJ5X3J1biwKKwkgICAgICAgICAgICd1c2VybmFtZT1zJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol91c2VybmFtZSwKKwkgICAgICAgICAgICdjb21taXQtdXJsPXMnID0+IFwkX2NvbW1pdF91cmwgfSBdLAorCSdzZXQtdHJlZScgPT4gWyBcJmNtZF9zZXRfdHJlZSwKKwkgICAgICAgICAgICAgICAgIlNldCBhbiBTVk4gcmVwb3NpdG9yeSB0byBhIGdpdCB0cmVlLWlzaCIsCisJCQl7ICdzdGRpbicgPT4gXCRfc3RkaW4sICVjbXRfb3B0cywgJWZjX29wdHMsIH0gXSwKKwknY3JlYXRlLWlnbm9yZScgPT4gWyBcJmNtZF9jcmVhdGVfaWdub3JlLAorCQkJICAgICAnQ3JlYXRlIGEgLmdpdGlnbm9yZSBwZXIgc3ZuOmlnbm9yZScsCisJCQkgICAgIHsgJ3JldmlzaW9ufHI9aScgPT4gXCRfcmV2aXNpb24KKwkJCSAgICAgfSBdLAorCSdta2RpcnMnID0+IFsgXCZjbWRfbWtkaXJzICwKKwkgICAgICAgICAgICAgICJyZWNyZWF0ZSBlbXB0eSBkaXJlY3RvcmllcyBhZnRlciBhIGNoZWNrb3V0IiwKKwkgICAgICAgICAgICAgIHsgJ3JldmlzaW9ufHI9aScgPT4gXCRfcmV2aXNpb24gfSBdLAorICAgICAgICAncHJvcGdldCcgPT4gWyBcJmNtZF9wcm9wZ2V0LAorCQkgICAgICAgJ1ByaW50IHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9uIGEgZmlsZSBvciBkaXJlY3RvcnknLAorCQkgICAgICAgeyAncmV2aXNpb258cj1pJyA9PiBcJF9yZXZpc2lvbiB9IF0sCisgICAgICAgICdwcm9wbGlzdCcgPT4gWyBcJmNtZF9wcm9wbGlzdCwKKwkJICAgICAgICdMaXN0IGFsbCBwcm9wZXJ0aWVzIG9mIGEgZmlsZSBvciBkaXJlY3RvcnknLAorCQkgICAgICAgeyAncmV2aXNpb258cj1pJyA9PiBcJF9yZXZpc2lvbiB9IF0sCisJJ3Nob3ctaWdub3JlJyA9PiBbIFwmY21kX3Nob3dfaWdub3JlLCAiU2hvdyBzdm46aWdub3JlIGxpc3RpbmdzIiwKKwkJCXsgJ3JldmlzaW9ufHI9aScgPT4gXCRfcmV2aXNpb24KKwkJCX0gXSwKKwknc2hvdy1leHRlcm5hbHMnID0+IFsgXCZjbWRfc2hvd19leHRlcm5hbHMsICJTaG93IHN2bjpleHRlcm5hbHMgbGlzdGluZ3MiLAorCQkJeyAncmV2aXNpb258cj1pJyA9PiBcJF9yZXZpc2lvbgorCQkJfSBdLAorCSdtdWx0aS1mZXRjaCcgPT4gWyBcJmNtZF9tdWx0aV9mZXRjaCwKKwkgICAgICAgICAgICAgICAgICAgIkRlcHJlY2F0ZWQgYWxpYXMgZm9yICQwIGZldGNoIC0tYWxsIiwKKwkJCSAgIHsgJ3JldmlzaW9ufHI9cycgPT4gXCRfcmV2aXNpb24sICVmY19vcHRzIH0gXSwKKwknbWlncmF0ZScgPT4gWyBzdWIgeyB9LAorCSAgICAgICAgICAgICAgICMgbm8tb3AsIHdlIGF1dG9tYXRpY2FsbHkgcnVuIHRoaXMgYW55d2F5cywKKwkgICAgICAgICAgICAgICAnTWlncmF0ZSBjb25maWd1cmF0aW9uL21ldGFkYXRhL2xheW91dCBmcm9tCisJCSAgICAgICAgcHJldmlvdXMgdmVyc2lvbnMgb2YgZ2l0LXN2bicsCisgICAgICAgICAgICAgICAgICAgICAgIHsgJ21pbmltaXplJyA9PiBcJEdpdDo6U1ZOOjpNaWdyYXRpb246Ol9taW5pbWl6ZSwKKwkJCSAlcmVtb3RlX29wdHMgfSBdLAorCSdsb2cnID0+IFsgXCZHaXQ6OlNWTjo6TG9nOjpjbWRfc2hvd19sb2csICdTaG93IGNvbW1pdCBsb2dzJywKKwkJCXsgJ2xpbWl0PWknID0+IFwkR2l0OjpTVk46OkxvZzo6bGltaXQsCisJCQkgICdyZXZpc2lvbnxyPXMnID0+IFwkX3JldmlzaW9uLAorCQkJICAndmVyYm9zZXx2JyA9PiBcJEdpdDo6U1ZOOjpMb2c6OnZlcmJvc2UsCisJCQkgICdpbmNyZW1lbnRhbCcgPT4gXCRHaXQ6OlNWTjo6TG9nOjppbmNyZW1lbnRhbCwKKwkJCSAgJ29uZWxpbmUnID0+IFwkR2l0OjpTVk46OkxvZzo6b25lbGluZSwKKwkJCSAgJ3Nob3ctY29tbWl0JyA9PiBcJEdpdDo6U1ZOOjpMb2c6OnNob3dfY29tbWl0LAorCQkJICAnbm9uLXJlY3Vyc2l2ZScgPT4gXCRHaXQ6OlNWTjo6TG9nOjpub25fcmVjdXJzaXZlLAorCQkJICAnYXV0aG9ycy1maWxlfEE9cycgPT4gXCRfYXV0aG9ycywKKwkJCSAgJ2NvbG9yJyA9PiBcJEdpdDo6U1ZOOjpMb2c6OmNvbG9yLAorCQkJICAncGFnZXI9cycgPT4gXCRHaXQ6OlNWTjo6TG9nOjpwYWdlcgorCQkJfSBdLAorCSdmaW5kLXJldicgPT4gWyBcJmNtZF9maW5kX3JldiwKKwkgICAgICAgICAgICAgICAgIlRyYW5zbGF0ZSBiZXR3ZWVuIFNWTiByZXZpc2lvbiBudW1iZXJzIGFuZCB0cmVlLWlzaCIsCisJCQl7fSBdLAorCSdyZWJhc2UnID0+IFsgXCZjbWRfcmViYXNlLCAiRmV0Y2ggYW5kIHJlYmFzZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IiwKKwkJCXsgJ21lcmdlfG18TScgPT4gXCRfbWVyZ2UsCisJCQkgICd2ZXJib3NlfHYnID0+IFwkX3ZlcmJvc2UsCisJCQkgICdzdHJhdGVneXxzPXMnID0+IFwkX3N0cmF0ZWd5LAorCQkJICAnbG9jYWx8bCcgPT4gXCRfbG9jYWwsCisJCQkgICdmZXRjaC1hbGx8YWxsJyA9PiBcJF9mZXRjaF9hbGwsCisJCQkgICdkcnktcnVufG4nID0+IFwkX2RyeV9ydW4sCisJCQkgICdwcmVzZXJ2ZS1tZXJnZXN8cCcgPT4gXCRfcHJlc2VydmVfbWVyZ2VzLAorCQkJICAlZmNfb3B0cyB9IF0sCisJJ2NvbW1pdC1kaWZmJyA9PiBbIFwmY21kX2NvbW1pdF9kaWZmLAorCSAgICAgICAgICAgICAgICAgICAnQ29tbWl0IGEgZGlmZiBiZXR3ZWVuIHR3byB0cmVlcycsCisJCQl7ICdtZXNzYWdlfG09cycgPT4gXCRfbWVzc2FnZSwKKwkJCSAgJ2ZpbGV8Rj1zJyA9PiBcJF9maWxlLAorCQkJICAncmV2aXNpb258cj1zJyA9PiBcJF9yZXZpc2lvbiwKKwkJCSVjbXRfb3B0cyB9IF0sCisJJ2luZm8nID0+IFsgXCZjbWRfaW5mbywKKwkJICAgICJTaG93IGluZm8gYWJvdXQgdGhlIGxhdGVzdCBTVk4gcmV2aXNpb24KKwkJICAgICBvbiB0aGUgY3VycmVudCBicmFuY2giLAorCQkgICAgeyAndXJsJyA9PiBcJF91cmwsIH0gXSwKKwknYmxhbWUnID0+IFsgXCZHaXQ6OlNWTjo6TG9nOjpjbWRfYmxhbWUsCisJICAgICAgICAgICAgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIsCisJCSAgICB7ICdnaXQtZm9ybWF0JyA9PiBcJEdpdDo6U1ZOOjpMb2c6Ol9naXRfZm9ybWF0IH0gXSwKKwkncmVzZXQnID0+IFsgXCZjbWRfcmVzZXQsCisJCSAgICAgIlVuZG8gZmV0Y2hlcyBiYWNrIHRvIHRoZSBzcGVjaWZpZWQgU1ZOIHJldmlzaW9uIiwKKwkJICAgICB7ICdyZXZpc2lvbnxyPXMnID0+IFwkX3JldmlzaW9uLAorCQkgICAgICAgJ3BhcmVudHxwJyA9PiBcJF9mZXRjaF9wYXJlbnQgfSBdLAorCSdnYycgPT4gWyBcJmNtZF9nYywKKwkJICAiQ29tcHJlc3MgdW5oYW5kbGVkLmxvZyBmaWxlcyBpbiAuZ2l0L3N2biBhbmQgcmVtb3ZlICIgLgorCQkgICJpbmRleCBmaWxlcyBpbiAuZ2l0L3N2biIsCisJCXt9IF0sCispOworCit1c2UgVGVybTo6UmVhZExpbmU7CitwYWNrYWdlIEZha2VUZXJtOworc3ViIG5ldyB7CisJbXkgKCRjbGFzcywgJHJlYXNvbikgPSBAXzsKKwlyZXR1cm4gYmxlc3MgXCRyZWFzb24sIHNoaWZ0OworfQorc3ViIHJlYWRsaW5lIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCWRpZSAiQ2Fubm90IHVzZSByZWFkbGluZSBvbiBGYWtlVGVybTogJCRzZWxmIjsKK30KK3BhY2thZ2UgbWFpbjsKKworbXkgJHRlcm0gPSBldmFsIHsKKwkkRU5WeyJHSVRfU1ZOX05PVFRZIn0KKwkJPyBuZXcgVGVybTo6UmVhZExpbmUgJ2dpdC1zdm4nLCBcKlNURElOLCBcKlNURE9VVAorCQk6IG5ldyBUZXJtOjpSZWFkTGluZSAnZ2l0LXN2bic7Cit9OworaWYgKCRAKSB7CisJJHRlcm0gPSBuZXcgRmFrZVRlcm0gIiRAOiBnb2luZyBub24taW50ZXJhY3RpdmUiOworfQorCitteSAkY21kOworZm9yIChteSAkaSA9IDA7ICRpIDwgQEFSR1Y7ICRpKyspIHsKKwlpZiAoZGVmaW5lZCAkY21keyRBUkdWWyRpXX0pIHsKKwkJJGNtZCA9ICRBUkdWWyRpXTsKKwkJc3BsaWNlIEBBUkdWLCAkaSwgMTsKKwkJbGFzdDsKKwl9IGVsc2lmICgkQVJHVlskaV0gZXEgJ2hlbHAnKSB7CisJCSRjbWQgPSAkQVJHVlskaSsxXTsKKwkJdXNhZ2UoMCk7CisJfQorfTsKKworIyBtYWtlIHN1cmUgd2UncmUgYWx3YXlzIHJ1bm5pbmcgYXQgdGhlIHRvcC1sZXZlbCB3b3JraW5nIGRpcmVjdG9yeQordW5sZXNzICgkY21kICYmICRjbWQgPX4gLyg/OmNsb25lfGluaXR8bXVsdGktaW5pdCkkLykgeworCXVubGVzcyAoLWQgJEVOVntHSVRfRElSfSkgeworCQlpZiAoJGdpdF9kaXJfdXNlcl9zZXQpIHsKKwkJCWRpZSAiR0lUX0RJUj0kRU5We0dJVF9ESVJ9IGV4cGxpY2l0bHkgc2V0LCAiLAorCQkJICAgICJidXQgaXQgaXMgbm90IGEgZGlyZWN0b3J5XG4iOworCQl9CisJCW15ICRnaXRfZGlyID0gZGVsZXRlICRFTlZ7R0lUX0RJUn07CisJCW15ICRjZHVwID0gdW5kZWY7CisJCWdpdF9jbWRfdHJ5IHsKKwkJCSRjZHVwID0gY29tbWFuZF9vbmVsaW5lKHF3L3Jldi1wYXJzZSAtLXNob3ctY2R1cC8pOworCQkJJGdpdF9kaXIgPSAnLicgdW5sZXNzICgkY2R1cCk7CisJCQljaG9tcCAkY2R1cCBpZiAoJGNkdXApOworCQkJJGNkdXAgPSAiLiIgdW5sZXNzICgkY2R1cCAmJiBsZW5ndGggJGNkdXApOworCQl9ICJBbHJlYWR5IGF0IHRvcGxldmVsLCBidXQgJGdpdF9kaXIgbm90IGZvdW5kXG4iOworCQljaGRpciAkY2R1cCBvciBkaWUgIlVuYWJsZSB0byBjaGRpciB1cCB0byAnJGNkdXAnXG4iOworCQl1bmxlc3MgKC1kICRnaXRfZGlyKSB7CisJCQlkaWUgIiRnaXRfZGlyIHN0aWxsIG5vdCBmb3VuZCBhZnRlciBnb2luZyB0byAiLAorCQkJICAgICInJGNkdXAnXG4iOworCQl9CisJCSRFTlZ7R0lUX0RJUn0gPSAkZ2l0X2RpcjsKKwl9CisJJF9yZXBvc2l0b3J5ID0gR2l0LT5yZXBvc2l0b3J5KFJlcG9zaXRvcnkgPT4gJEVOVntHSVRfRElSfSk7Cit9CisKK215ICVvcHRzID0gJXskY21keyRjbWR9LT5bMl19IGlmIChkZWZpbmVkICRjbWQpOworCityZWFkX2dpdF9jb25maWcoXCVvcHRzKTsKK2lmICgkY21kICYmICgkY21kIGVxICdsb2cnIHx8ICRjbWQgZXEgJ2JsYW1lJykpIHsKKwlHZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZSgncGFzc190aHJvdWdoJyk7Cit9CitteSAkcnYgPSBHZXRPcHRpb25zKCVvcHRzLCAnaHxIJyA9PiBcJF9oZWxwLCAndmVyc2lvbnxWJyA9PiBcJF92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAnbWluaW1pemUtY29ubmVjdGlvbnMnID0+IFwkR2l0OjpTVk46Ok1pZ3JhdGlvbjo6X21pbmltaXplLAorICAgICAgICAgICAgICAgICAgICAnaWR8aT1zJyA9PiBcJEdpdDo6U1ZOOjpkZWZhdWx0X3JlZl9pZCwKKyAgICAgICAgICAgICAgICAgICAgJ3N2bi1yZW1vdGV8cmVtb3RlfFI9cycgPT4gc3ViIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJEdpdDo6U1ZOOjpub19yZXVzZV9leGlzdGluZyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICRHaXQ6OlNWTjo6ZGVmYXVsdF9yZXBvX2lkID0gJF9bMV0gfSk7CitleGl0IDEgaWYgKCEkcnYgJiYgJGNtZCAmJiAkY21kIG5lICdsb2cnKTsKKwordXNhZ2UoMCkgaWYgJF9oZWxwOwordmVyc2lvbigpIGlmICRfdmVyc2lvbjsKK3VzYWdlKDEpIHVubGVzcyBkZWZpbmVkICRjbWQ7Citsb2FkX2F1dGhvcnMoKSBpZiAkX2F1dGhvcnM7CitpZiAoZGVmaW5lZCAkX2F1dGhvcnNfcHJvZykgeworCSRfYXV0aG9yc19wcm9nID0gIiciIC4gRmlsZTo6U3BlYy0+cmVsMmFicygkX2F1dGhvcnNfcHJvZykgLiAiJyI7Cit9CisKK3VubGVzcyAoJGNtZCA9fiAvXig/OmNsb25lfGluaXR8bXVsdGktaW5pdHxjb21taXQtZGlmZikkLykgeworCUdpdDo6U1ZOOjpNaWdyYXRpb246Om1pZ3JhdGlvbl9jaGVjaygpOworfQorR2l0OjpTVk46OmluaXRfdmFycygpOworZXZhbCB7CisJR2l0OjpTVk46OnZlcmlmeV9yZW1vdGVzX3Nhbml0eSgpOworCSRjbWR7JGNtZH0tPlswXS0+KEBBUkdWKTsKKwlwb3N0X2ZldGNoX2NoZWNrb3V0KCk7Cit9OworZmF0YWwgJEAgaWYgJEA7CitleGl0IDA7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIHByaW1hcnkgZnVuY3Rpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiB1c2FnZSB7CisJbXkgJGV4aXQgPSBzaGlmdCB8fCAwOworCW15ICRmZCA9ICRleGl0ID8gXCpTVERFUlIgOiBcKlNURE9VVDsKKwlwcmludCAkZmQgPDwiIjsKK2dpdC1zdm4gLSBiaWRpcmVjdGlvbmFsIG9wZXJhdGlvbnMgYmV0d2VlbiBhIHNpbmdsZSBTdWJ2ZXJzaW9uIHRyZWUgYW5kIGdpdAorVXNhZ2U6IGdpdCBzdm4gPGNvbW1hbmQ+IFtvcHRpb25zXSBbYXJndW1lbnRzXVxuCisKKwlwcmludCAkZmQgIkF2YWlsYWJsZSBjb21tYW5kczpcbiIgdW5sZXNzICRjbWQ7CisKKwlmb3JlYWNoIChzb3J0IGtleXMgJWNtZCkgeworCQluZXh0IGlmICRjbWQgJiYgJGNtZCBuZSAkXzsKKwkJbmV4dCBpZiAvXm11bHRpLS87ICMgZG9uJ3Qgc2hvdyBkZXByZWNhdGVkIGNvbW1hbmRzCisJCXByaW50ICRmZCAnICAnLHBhY2soJ0ExNycsJF8pLCRjbWR7JF99LT5bMV0sIlxuIjsKKwkJZm9yZWFjaCAoc29ydCBrZXlzICV7JGNtZHskX30tPlsyXX0pIHsKKwkJCSMgbWl4ZWQtY2FzZSBvcHRpb25zIGFyZSBmb3IgLmdpdC9jb25maWcgb25seQorCQkJbmV4dCBpZiAvW0EtWl0vICYmIC9eW2Etel0rJC9pOworCQkJIyBwcmludHMgb3V0IGFyZ3VtZW50cyBhcyB0aGV5IHNob3VsZCBiZSBwYXNzZWQ6CisJCQlteSAkeCA9IHMjWzo9XXMkIyMgPyAnPGFyZz4nIDogcyNbOj1daSQjIyA/ICc8bnVtPicgOiAnJzsKKwkJCXByaW50ICRmZCAnICcgeCAyMSwgam9pbignLCAnLCBtYXAgeyBsZW5ndGggJF8gPiAxID8KKwkJCQkJCQkiLS0kXyIgOiAiLSRfIiB9CisJCQkJCQlzcGxpdCAvXHwvLCRfKSwiICR4XG4iOworCQl9CisJfQorCXByaW50ICRmZCA8PCIiOworXG5HSVRfU1ZOX0lEIG1heSBiZSBzZXQgaW4gdGhlIGVudmlyb25tZW50IG9yIHZpYSB0aGUgLS1pZC8taSBzd2l0Y2ggdG8gYW4KK2FyYml0cmFyeSBpZGVudGlmaWVyIGlmIHlvdSdyZSB0cmFja2luZyBtdWx0aXBsZSBTVk4gYnJhbmNoZXMvcmVwb3NpdG9yaWVzIGluCitvbmUgZ2l0IHJlcG9zaXRvcnkgYW5kIHdhbnQgdG8ga2VlcCB0aGVtIHNlcGFyYXRlLiAgU2VlIGdpdC1zdm4oMSkgZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorCisJZXhpdCAkZXhpdDsKK30KKworc3ViIHZlcnNpb24geworCTo6X3JlcV9zdm4oKTsKKwlwcmludCAiZ2l0LXN2biB2ZXJzaW9uICRWRVJTSU9OIChzdm4gJFNWTjo6Q29yZTo6VkVSU0lPTilcbiI7CisJZXhpdCAwOworfQorCitzdWIgYXNrIHsKKwlteSAoJHByb21wdCwgJWFyZykgPSBAXzsKKwlteSAkdmFsaWRfcmUgPSAkYXJne3ZhbGlkX3JlfTsKKwlteSAkZGVmYXVsdCA9ICRhcmd7ZGVmYXVsdH07CisJbXkgJHJlc3A7CisJbXkgJGkgPSAwOworCisJaWYgKCAhKCBkZWZpbmVkKCR0ZXJtLT5JTikKKyAgICAgICAgICAgICYmIGRlZmluZWQoIGZpbGVubygkdGVybS0+SU4pICkKKyAgICAgICAgICAgICYmIGRlZmluZWQoICR0ZXJtLT5PVVQgKQorICAgICAgICAgICAgJiYgZGVmaW5lZCggZmlsZW5vKCR0ZXJtLT5PVVQpICkgKSApeworCQlyZXR1cm4gZGVmaW5lZCgkZGVmYXVsdCkgPyAkZGVmYXVsdCA6IHVuZGVmOworCX0KKworCXdoaWxlICgkaSsrIDwgMTApIHsKKwkJJHJlc3AgPSAkdGVybS0+cmVhZGxpbmUoJHByb21wdCk7CisJCWlmICghZGVmaW5lZCAkcmVzcCkgeyAjIEVPRgorCQkJcHJpbnQgIlxuIjsKKwkJCXJldHVybiBkZWZpbmVkICRkZWZhdWx0ID8gJGRlZmF1bHQgOiB1bmRlZjsKKwkJfQorCQlpZiAoJHJlc3AgZXEgJycgYW5kIGRlZmluZWQgJGRlZmF1bHQpIHsKKwkJCXJldHVybiAkZGVmYXVsdDsKKwkJfQorCQlpZiAoIWRlZmluZWQgJHZhbGlkX3JlIG9yICRyZXNwID1+IC8kdmFsaWRfcmUvKSB7CisJCQlyZXR1cm4gJHJlc3A7CisJCX0KKwl9CisJcmV0dXJuIHVuZGVmOworfQorCitzdWIgZG9fZ2l0X2luaXRfZGIgeworCXVubGVzcyAoLWQgJEVOVntHSVRfRElSfSkgeworCQlteSBAaW5pdF9kYiA9ICgnaW5pdCcpOworCQlwdXNoIEBpbml0X2RiLCAiLS10ZW1wbGF0ZT0kX3RlbXBsYXRlIiBpZiBkZWZpbmVkICRfdGVtcGxhdGU7CisJCWlmIChkZWZpbmVkICRfc2hhcmVkKSB7CisJCQlpZiAoJF9zaGFyZWQgPX4gL1thLXpdLykgeworCQkJCXB1c2ggQGluaXRfZGIsICItLXNoYXJlZD0kX3NoYXJlZCI7CisJCQl9IGVsc2UgeworCQkJCXB1c2ggQGluaXRfZGIsICItLXNoYXJlZCI7CisJCQl9CisJCX0KKwkJY29tbWFuZF9ub2lzeShAaW5pdF9kYik7CisJCSRfcmVwb3NpdG9yeSA9IEdpdC0+cmVwb3NpdG9yeShSZXBvc2l0b3J5ID0+ICIuZ2l0Iik7CisJfQorCW15ICRzZXQ7CisJbXkgJHBmeCA9ICJzdm4tcmVtb3RlLiRHaXQ6OlNWTjo6ZGVmYXVsdF9yZXBvX2lkIjsKKwlmb3JlYWNoIG15ICRpIChrZXlzICVpY3YpIHsKKwkJZGllICInJHNldCcgYW5kICckaScgY2Fubm90IGJvdGggYmUgc2V0XG4iIGlmICRzZXQ7CisJCW5leHQgdW5sZXNzIGRlZmluZWQgJGljdnskaX07CisJCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICIkcGZ4LiRpIiwgJGljdnskaX0pOworCQkkc2V0ID0gJGk7CisJfQorCW15ICRpZ25vcmVfcGF0aHNfcmVnZXggPSBcJEdpdDo6U1ZOOjpGZXRjaGVyOjpfaWdub3JlX3JlZ2V4OworCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICIkcGZ4Lmlnbm9yZS1wYXRocyIsICQkaWdub3JlX3BhdGhzX3JlZ2V4KQorCQlpZiBkZWZpbmVkICQkaWdub3JlX3BhdGhzX3JlZ2V4OworCW15ICRpZ25vcmVfcmVmc19yZWdleCA9IFwkR2l0OjpTVk46OlJhOjpfaWdub3JlX3JlZnNfcmVnZXg7CisJY29tbWFuZF9ub2lzeSgnY29uZmlnJywgIiRwZnguaWdub3JlLXJlZnMiLCAkJGlnbm9yZV9yZWZzX3JlZ2V4KQorCQlpZiBkZWZpbmVkICQkaWdub3JlX3JlZnNfcmVnZXg7CisKKwlpZiAoZGVmaW5lZCAkR2l0OjpTVk46OkZldGNoZXI6Ol9wcmVzZXJ2ZV9lbXB0eV9kaXJzKSB7CisJCW15ICRmbmFtZSA9IFwkR2l0OjpTVk46OkZldGNoZXI6Ol9wbGFjZWhvbGRlcl9maWxlbmFtZTsKKwkJY29tbWFuZF9ub2lzeSgnY29uZmlnJywgIiRwZngucHJlc2VydmUtZW1wdHktZGlycyIsICd0cnVlJyk7CisJCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICIkcGZ4LnBsYWNlaG9sZGVyLWZpbGVuYW1lIiwgJCRmbmFtZSk7CisJfQorfQorCitzdWIgaW5pdF9zdWJkaXIgeworCW15ICRyZXBvX3BhdGggPSBzaGlmdCBvciByZXR1cm47CisJbWtwYXRoKFskcmVwb19wYXRoXSkgdW5sZXNzIC1kICRyZXBvX3BhdGg7CisJY2hkaXIgJHJlcG9fcGF0aCBvciBkaWUgIkNvdWxkbid0IGNoZGlyIHRvICRyZXBvX3BhdGg6ICQhXG4iOworCSRFTlZ7R0lUX0RJUn0gPSAnLmdpdCc7CisJJF9yZXBvc2l0b3J5ID0gR2l0LT5yZXBvc2l0b3J5KFJlcG9zaXRvcnkgPT4gJEVOVntHSVRfRElSfSk7Cit9CisKK3N1YiBjbWRfY2xvbmUgeworCW15ICgkdXJsLCAkcGF0aCkgPSBAXzsKKwlpZiAoIWRlZmluZWQgJHBhdGggJiYKKwkgICAgKGRlZmluZWQgJF90cnVuayB8fCBAX2JyYW5jaGVzIHx8IEBfdGFncyB8fAorCSAgICAgZGVmaW5lZCAkX3N0ZGxheW91dCkgJiYKKwkgICAgJHVybCAhfiBtI15bYS16XCtdKzovLyMpIHsKKwkJJHBhdGggPSAkdXJsOworCX0KKwkkcGF0aCA9IGJhc2VuYW1lKCR1cmwpIGlmICFkZWZpbmVkICRwYXRoIHx8ICFsZW5ndGggJHBhdGg7CisJbXkgJGF1dGhvcnNfYWJzb2x1dGUgPSAkX2F1dGhvcnMgPyBGaWxlOjpTcGVjLT5yZWwyYWJzKCRfYXV0aG9ycykgOiAiIjsKKwljbWRfaW5pdCgkdXJsLCAkcGF0aCk7CisJY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnc3ZuLmF1dGhvcnNmaWxlJywgJGF1dGhvcnNfYWJzb2x1dGUpCisJICAgIGlmICRfYXV0aG9yczsKKwlHaXQ6OlNWTjo6ZmV0Y2hfYWxsKCRHaXQ6OlNWTjo6ZGVmYXVsdF9yZXBvX2lkKTsKK30KKworc3ViIGNtZF9pbml0IHsKKwlpZiAoZGVmaW5lZCAkX3N0ZGxheW91dCkgeworCQkkX3RydW5rID0gJ3RydW5rJyBpZiAoIWRlZmluZWQgJF90cnVuayk7CisJCUBfdGFncyA9ICd0YWdzJyBpZiAoISBAX3RhZ3MpOworCQlAX2JyYW5jaGVzID0gJ2JyYW5jaGVzJyBpZiAoISBAX2JyYW5jaGVzKTsKKwl9CisJaWYgKGRlZmluZWQgJF90cnVuayB8fCBAX2JyYW5jaGVzIHx8IEBfdGFncykgeworCQlyZXR1cm4gY21kX211bHRpX2luaXQoQF8pOworCX0KKwlteSAkdXJsID0gc2hpZnQgb3IgZGllICJTVk4gcmVwb3NpdG9yeSBsb2NhdGlvbiByZXF1aXJlZCAiLAorCSAgICAgICAgICAgICAgICAgICAgICAgImFzIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50XG4iOworCSR1cmwgPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOworCWluaXRfc3ViZGlyKEBfKTsKKwlkb19naXRfaW5pdF9kYigpOworCisJaWYgKCRHaXQ6OlNWTjo6X21pbmltaXplX3VybCBlcSAndW5zZXQnKSB7CisJCSRHaXQ6OlNWTjo6X21pbmltaXplX3VybCA9IDA7CisJfQorCisJR2l0OjpTVk4tPmluaXQoJHVybCk7Cit9CisKK3N1YiBjbWRfZmV0Y2ggeworCWlmIChncmVwIC9eXGQrPS4vLCBAXykgeworCQlkaWUgIic8cmV2Pj08Y29tbWl0PicgZmV0Y2ggYXJndW1lbnRzIGFyZSAiLAorCQkgICAgIm5vIGxvbmdlciBzdXBwb3J0ZWQuXG4iOworCX0KKwlteSAoJHJlbW90ZSkgPSBAXzsKKwlpZiAoQF8gPiAxKSB7CisJCWRpZSAiVXNhZ2U6ICQwIGZldGNoIFstLWFsbF0gWy0tcGFyZW50XSBbc3ZuLXJlbW90ZV1cbiI7CisJfQorCSRHaXQ6OlNWTjo6bm9fcmV1c2VfZXhpc3RpbmcgPSB1bmRlZjsKKwlpZiAoJF9mZXRjaF9wYXJlbnQpIHsKKwkJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnKTsKKwkJdW5sZXNzICgkZ3MpIHsKKwkJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLAorCQkJICAgICJ3b3JraW5nIHRyZWUgaGlzdG9yeVxuIjsKKwkJfQorCSAgICAgICAgIyBqdXN0IGZldGNoLCBkb24ndCBjaGVja291dC4KKwkJJF9ub19jaGVja291dCA9ICd0cnVlJzsKKwkJJF9mZXRjaF9hbGwgPyAkZ3MtPmZldGNoX2FsbCA6ICRncy0+ZmV0Y2g7CisJfSBlbHNpZiAoJF9mZXRjaF9hbGwpIHsKKwkJY21kX211bHRpX2ZldGNoKCk7CisJfSBlbHNlIHsKKwkJJHJlbW90ZSB8fD0gJEdpdDo6U1ZOOjpkZWZhdWx0X3JlcG9faWQ7CisJCUdpdDo6U1ZOOjpmZXRjaF9hbGwoJHJlbW90ZSwgR2l0OjpTVk46OnJlYWRfYWxsX3JlbW90ZXMoKSk7CisJfQorfQorCitzdWIgY21kX3NldF90cmVlIHsKKwlteSAoQGNvbW1pdHMpID0gQF87CisJaWYgKCRfc3RkaW4gfHwgIUBjb21taXRzKSB7CisJCXByaW50ICJSZWFkaW5nIGZyb20gc3RkaW4uLi5cbiI7CisJCUBjb21taXRzID0gKCk7CisJCXdoaWxlICg8U1RESU4+KSB7CisJCQlpZiAoL1xiKCRzaGExX3Nob3J0KVxiL28pIHsKKwkJCQl1bnNoaWZ0IEBjb21taXRzLCAkMTsKKwkJCX0KKwkJfQorCX0KKwlteSBAcmV2czsKKwlmb3JlYWNoIG15ICRjIChAY29tbWl0cykgeworCQlteSBAdG1wID0gY29tbWFuZCgncmV2LXBhcnNlJywkYyk7CisJCWlmIChzY2FsYXIgQHRtcCA9PSAxKSB7CisJCQlwdXNoIEByZXZzLCAkdG1wWzBdOworCQl9IGVsc2lmIChzY2FsYXIgQHRtcCA+IDEpIHsKKwkJCXB1c2ggQHJldnMsIHJldmVyc2UoY29tbWFuZCgncmV2LWxpc3QnLEB0bXApKTsKKwkJfSBlbHNlIHsKKwkJCWZhdGFsICJGYWlsZWQgdG8gcmV2LXBhcnNlICRjIjsKKwkJfQorCX0KKwlteSAkZ3MgPSBHaXQ6OlNWTi0+bmV3OworCW15ICgkcl9sYXN0LCAkY210X2xhc3QpID0gJGdzLT5sYXN0X3Jldl9jb21taXQ7CisJJGdzLT5mZXRjaDsKKwlpZiAoZGVmaW5lZCAkZ3MtPntsYXN0X3Jldn0gJiYgJHJfbGFzdCAhPSAkZ3MtPntsYXN0X3Jldn0pIHsKKwkJZmF0YWwgIlRoZXJlIGFyZSBuZXcgcmV2aXNpb25zIHRoYXQgd2VyZSBmZXRjaGVkICIsCisJCSAgICAgICJhbmQgbmVlZCB0byBiZSBtZXJnZWQgKG9yIGFja25vd2xlZGdlZCkgIiwKKwkJICAgICAgImJlZm9yZSBjb21taXR0aW5nLlxubGFzdCByZXY6ICRyX2xhc3RcbiIsCisJCSAgICAgICIgY3VycmVudDogJGdzLT57bGFzdF9yZXZ9IjsKKwl9CisJJGdzLT5zZXRfdHJlZSgkXykgZm9yZWFjaCBAcmV2czsKKwlwcmludCAiRG9uZSBjb21taXR0aW5nICIsc2NhbGFyIEByZXZzLCIgcmV2aXNpb25zIHRvIFNWTlxuIjsKKwl1bmxpbmsgJGdzLT57aW5kZXh9OworfQorCitzdWIgc3BsaXRfbWVyZ2VfaW5mb19yYW5nZSB7CisJbXkgKCRyYW5nZSkgPSBAXzsKKwlpZiAoJHJhbmdlID1+IC8oXGQrKS0oXGQrKS8pIHsKKwkJcmV0dXJuIChpbnQoJDEpLCBpbnQoJDIpKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKGludCgkcmFuZ2UpLCBpbnQoJHJhbmdlKSk7CisJfQorfQorCitzdWIgY29tYmluZV9yYW5nZXMgeworCW15ICgkaW4pID0gQF87CisKKwlteSBAZm51bXMgPSAoKTsKKwlteSBAYXJyID0gc3BsaXQoLywvLCAkaW4pOworCWZvciBteSAkZWxlbWVudCAoQGFycikgeworCQlteSAoJHN0YXJ0LCAkZW5kKSA9IHNwbGl0X21lcmdlX2luZm9fcmFuZ2UoJGVsZW1lbnQpOworCQlwdXNoIEBmbnVtcywgJHN0YXJ0OworCX0KKworCW15IEBzb3J0ZWQgPSBAYXJyIFsgc29ydCB7CisJCSRmbnVtc1skYV0gPD0+ICRmbnVtc1skYl0KKwl9IDAuLiQjYXJyIF07CisKKwlteSBAcmV0dXJuID0gKCk7CisJbXkgJGxhc3QgPSAtMTsKKwlteSAkZmlyc3QgPSAtMTsKKwlmb3IgbXkgJGVsZW1lbnQgKEBzb3J0ZWQpIHsKKwkJbXkgKCRzdGFydCwgJGVuZCkgPSBzcGxpdF9tZXJnZV9pbmZvX3JhbmdlKCRlbGVtZW50KTsKKworCQlpZiAoJGxhc3QgPT0gLTEpIHsKKwkJCSRmaXJzdCA9ICRzdGFydDsKKwkJCSRsYXN0ID0gJGVuZDsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRzdGFydCA8PSAkbGFzdCsxKSB7CisJCQlpZiAoJGVuZCA+ICRsYXN0KSB7CisJCQkJJGxhc3QgPSAkZW5kOworCQkJfQorCQkJbmV4dDsKKwkJfQorCQlpZiAoJGZpcnN0ID09ICRsYXN0KSB7CisJCQlwdXNoIEByZXR1cm4sICIkZmlyc3QiOworCQl9IGVsc2UgeworCQkJcHVzaCBAcmV0dXJuLCAiJGZpcnN0LSRsYXN0IjsKKwkJfQorCQkkZmlyc3QgPSAkc3RhcnQ7CisJCSRsYXN0ID0gJGVuZDsKKwl9CisKKwlpZiAoJGZpcnN0ICE9IC0xKSB7CisJCWlmICgkZmlyc3QgPT0gJGxhc3QpIHsKKwkJCXB1c2ggQHJldHVybiwgIiRmaXJzdCI7CisJCX0gZWxzZSB7CisJCQlwdXNoIEByZXR1cm4sICIkZmlyc3QtJGxhc3QiOworCQl9CisJfQorCisJcmV0dXJuIGpvaW4oJywnLCBAcmV0dXJuKTsKK30KKworc3ViIG1lcmdlX3JldnNfaW50b19oYXNoIHsKKwlteSAoJGhhc2gsICRtaW5mbykgPSBAXzsKKwlteSBAbGluZXMgPSBzcGxpdCgnICcsICRtaW5mbyk7CisKKwlmb3IgbXkgJGxpbmUgKEBsaW5lcykgeworCQlteSAoJGJyYW5jaHBhdGgsICRyZXZzKSA9IHNwbGl0KC86LywgJGxpbmUpOworCisJCWlmIChleGlzdHMoJGhhc2gtPnskYnJhbmNocGF0aH0pKSB7CisJCQkjIE1lcmdlIHRoZSB0d28gcmV2aXNpb24gc2V0cworCQkJbXkgJGNvbWJpbmVkID0gIiRoYXNoLT57JGJyYW5jaHBhdGh9LCRyZXZzIjsKKwkJCSRoYXNoLT57JGJyYW5jaHBhdGh9ID0gY29tYmluZV9yYW5nZXMoJGNvbWJpbmVkKTsKKwkJfSBlbHNlIHsKKwkJCSMgSnVzdCBkbyByYW5nZSBjb21iaW5pbmcgZm9yIGNvbnNvbGlkYXRpb24KKwkJCSRoYXNoLT57JGJyYW5jaHBhdGh9ID0gY29tYmluZV9yYW5nZXMoJHJldnMpOworCQl9CisJfQorfQorCitzdWIgbWVyZ2VfbWVyZ2VfaW5mbyB7CisJbXkgKCRtZXJnZWluZm9fb25lLCAkbWVyZ2VpbmZvX3R3bykgPSBAXzsKKwlteSAlcmVzdWx0X2hhc2ggPSAoKTsKKworCW1lcmdlX3JldnNfaW50b19oYXNoKFwlcmVzdWx0X2hhc2gsICRtZXJnZWluZm9fb25lKTsKKwltZXJnZV9yZXZzX2ludG9faGFzaChcJXJlc3VsdF9oYXNoLCAkbWVyZ2VpbmZvX3R3byk7CisKKwlteSAkcmVzdWx0ID0gJyc7CisJIyBTb3J0IGJlbG93IGlzIGZvciBjb25zaXN0ZW5jeSdzIHNha2UKKwlmb3IgbXkgJGJyYW5jaG5hbWUgKHNvcnQga2V5cyglcmVzdWx0X2hhc2gpKSB7CisJCW15ICRyZXZsaXN0ID0gJHJlc3VsdF9oYXNoeyRicmFuY2huYW1lfTsKKwkJJHJlc3VsdCAuPSAiJGJyYW5jaG5hbWU6JHJldmxpc3RcbiIKKwl9CisJcmV0dXJuICRyZXN1bHQ7Cit9CisKK3N1YiBwb3B1bGF0ZV9tZXJnZV9pbmZvIHsKKwlteSAoJGQsICRncywgJHV1aWQsICRsaW5lYXJfcmVmcywgJHJld3JpdHRlbl9wYXJlbnQpID0gQF87CisKKwlteSAlcGFyZW50c2hhc2g7CisJcmVhZF9jb21taXRfcGFyZW50cyhcJXBhcmVudHNoYXNoLCAkZCk7CisJbXkgQHBhcmVudHMgPSBAeyRwYXJlbnRzaGFzaHskZH19OworCWlmICgkI3BhcmVudHMgPiAwKSB7CisJCSMgTWVyZ2UgY29tbWl0CisJCW15ICRhbGxfcGFyZW50c19vayA9IDE7CisJCW15ICRhZ2dyZWdhdGVfbWVyZ2VpbmZvID0gJyc7CisJCW15ICRyb290dXJsID0gJGdzLT5yZXBvc19yb290OworCisJCWlmIChkZWZpbmVkKCRyZXdyaXR0ZW5fcGFyZW50KSkgeworCQkJIyBSZXBsYWNlIGZpcnN0IHBhcmVudCB3aXRoIG5ld2x5LXJld3JpdHRlbiB2ZXJzaW9uCisJCQlzaGlmdCBAcGFyZW50czsKKwkJCXVuc2hpZnQgQHBhcmVudHMsICRyZXdyaXR0ZW5fcGFyZW50OworCQl9CisKKwkJZm9yZWFjaCBteSAkcGFyZW50IChAcGFyZW50cykgeworCQkJbXkgKCRicmFuY2h1cmwsICRzdm5yZXYsICRwYXJ1dWlkKSA9CisJCQkJY210X21ldGFkYXRhKCRwYXJlbnQpOworCisJCQl1bmxlc3MgKGRlZmluZWQoJHN2bnJldikpIHsKKwkJCQkjIFNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJlIHByZWZsaWdodCBjaGVjaworCQkJCWZhdGFsICJtZXJnZSBjb21taXQgJGQgaGFzIGFuY2VzdG9yICRwYXJlbnQsIGJ1dCB0aGF0IGNoYW5nZSAiCisgICAgICAgICAgICAgICAgICAgICAuImRvZXMgbm90IGhhdmUgZ2l0LXN2biBtZXRhZGF0YSEiOworCQkJfQorCQkJdW5sZXNzICgkYnJhbmNodXJsID1+IC9eXFEkcm9vdHVybFxFKC4qKS8pIHsKKwkJCQlmYXRhbCAiY29tbWl0ICRwYXJlbnQgZ2l0LXN2biBtZXRhZGF0YSBjaGFuZ2VkIG1pZC1ydW4hIjsKKwkJCX0KKwkJCW15ICRicmFuY2hwYXRoID0gJDE7CisKKwkJCW15ICRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCRicmFuY2h1cmwpOworCQkJbXkgKHVuZGVmLCB1bmRlZiwgJHByb3BzKSA9CisJCQkJJHJhLT5nZXRfZGlyKGNhbm9uaWNhbGl6ZV9wYXRoKCIuIiksICRzdm5yZXYpOworCQkJbXkgJHBhcl9tZXJnZWluZm8gPSAkcHJvcHMtPnsnc3ZuOm1lcmdlaW5mbyd9OworCQkJdW5sZXNzIChkZWZpbmVkICRwYXJfbWVyZ2VpbmZvKSB7CisJCQkJJHBhcl9tZXJnZWluZm8gPSAnJzsKKwkJCX0KKwkJCSMgTWVyZ2UgcHJldmlvdXMgbWVyZ2VpbmZvIHZhbHVlcworCQkJJGFnZ3JlZ2F0ZV9tZXJnZWluZm8gPQorCQkJCW1lcmdlX21lcmdlX2luZm8oJGFnZ3JlZ2F0ZV9tZXJnZWluZm8sCisJCQkJCQkJCSAkcGFyX21lcmdlaW5mbywgMCk7CisKKwkJCW5leHQgaWYgJHBhcmVudCBlcSAkcGFyZW50c1swXTsgIyBTa2lwIGZpcnN0IHBhcmVudAorCQkJIyBBZGQgbmV3IGNoYW5nZXMgYmVpbmcgcGxhY2VkIGluIHRyZWUgYnkgbWVyZ2UKKwkJCW15IEBjbWQgPSAocXcvcmV2LWxpc3QgLS1yZXZlcnNlLywKKwkJCQkJICAgJHBhcmVudCwgcXcvLS1ub3QvKTsKKwkJCWZvcmVhY2ggbXkgJHBhciAoQHBhcmVudHMpIHsKKwkJCQl1bmxlc3MgKCRwYXIgZXEgJHBhcmVudCkgeworCQkJCQlwdXNoIEBjbWQsICRwYXI7CisJCQkJfQorCQkJfQorCQkJbXkgQHJldnNpbiA9ICgpOworCQkJbXkgKCRyZXZsaXN0LCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQGNtZCk7CisJCQl3aGlsZSAoPCRyZXZsaXN0PikgeworCQkJCW15ICRpcmV2ID0gJF87CisJCQkJY2hvbXAgJGlyZXY7CisJCQkJbXkgKHVuZGVmLCAkY3N2bnJldiwgdW5kZWYpID0KKwkJCQkJY210X21ldGFkYXRhKCRpcmV2KTsKKwkJCQl1bmxlc3MgKGRlZmluZWQgJGNzdm5yZXYpIHsKKwkJCQkJIyBBIGNoaWxkIGlzIG1pc3NpbmcgU1ZOIGFubm90YXRpb25zLi4uCisJCQkJCSMgdGhpcyBtaWdodCBiZSBPSywgb3IgbWlnaHQgbm90IGJlLgorCQkJCQl3YXJuICJXOmNoaWxkICRpcmV2IGlzIG1lcmdlZCBpbnRvIHJldmlzaW9uICIKKwkJCQkJCSAuIiRkIGJ1dCBkb2VzIG5vdCBoYXZlIGdpdC1zdm4gbWV0YWRhdGEuICIKKwkJCQkJCSAuIlRoaXMgbWVhbnMgZ2l0LXN2biBjYW5ub3QgZGV0ZXJtaW5lIHRoZSAiCisJCQkJCQkgLiJzdm4gcmV2aXNpb24gbnVtYmVycyB0byBwbGFjZSBpbnRvIHRoZSAiCisJCQkJCQkgLiJzdm46bWVyZ2VpbmZvIHByb3BlcnR5LiBZb3UgbXVzdCBlbnN1cmUgIgorCQkJCQkJIC4iYSBicmFuY2ggaXMgZW50aXJlbHkgY29tbWl0dGVkIHRvICIKKwkJCQkJCSAuIlNWTiBiZWZvcmUgbWVyZ2luZyBpdCBpbiBvcmRlciBmb3IgIgorCQkJCQkJIC4ic3ZuOm1lcmdlaW5mbyBwb3B1bGF0aW9uIHRvIGZ1bmN0aW9uICIKKwkJCQkJCSAuInByb3Blcmx5IjsKKwkJCQl9CisJCQkJcHVzaCBAcmV2c2luLCAkY3N2bnJldjsKKwkJCX0KKwkJCWNvbW1hbmRfY2xvc2VfcGlwZSgkcmV2bGlzdCwgJGN0eCk7CisKKwkJCWxhc3QgdW5sZXNzICRhbGxfcGFyZW50c19vazsKKworCQkJIyBXZSBub3cgaGF2ZSBhIGxpc3Qgb2YgYWxsIFNWTiByZXZub3Mgd2hpY2ggYXJlCisJCQkjIG1lcmdlZCBieSB0aGlzIHBhcnRpY3VsYXIgcGFyZW50LiBJbnRlZ3JhdGUgdGhlbS4KKwkJCW5leHQgaWYgJCNyZXZzaW4gPT0gLTE7CisJCQlteSAkbmV3bWVyZ2VpbmZvID0gIiRicmFuY2hwYXRoOiIgLiBqb2luKCcsJywgQHJldnNpbik7CisJCQkkYWdncmVnYXRlX21lcmdlaW5mbyA9CisJCQkJbWVyZ2VfbWVyZ2VfaW5mbygkYWdncmVnYXRlX21lcmdlaW5mbywKKwkJCQkJCQkJICRuZXdtZXJnZWluZm8sIDEpOworCQl9CisJCWlmICgkYWxsX3BhcmVudHNfb2sgYW5kICRhZ2dyZWdhdGVfbWVyZ2VpbmZvKSB7CisJCQlyZXR1cm4gJGFnZ3JlZ2F0ZV9tZXJnZWluZm87CisJCX0KKwl9CisKKwlyZXR1cm4gdW5kZWY7Cit9CisKK3N1YiBkY29tbWl0X3JlYmFzZSB7CisJbXkgKCRpc19sYXN0LCAkY3VycmVudCwgJGZldGNoZWRfcmVmLCAkc3ZuX2Vycm9yKSA9IEBfOworCW15IEBkaWZmOworCisJaWYgKCRzdm5fZXJyb3IpIHsKKwkJcHJpbnQgU1RERVJSICJcbkVSUk9SIGZyb20gU1ZOOlxuIiwKKwkJCQkkc3ZuX2Vycm9yLT5leHBhbmRlZF9tZXNzYWdlLCAiXG4iOworCX0KKwl1bmxlc3MgKCRfbm9fcmViYXNlKSB7CisJCSMgd2UgYWx3YXlzIHdhbnQgdG8gcmViYXNlIGFnYWluc3QgdGhlIGN1cnJlbnQgSEVBRCwKKwkJIyBub3QgYW55IGhlYWQgdGhhdCB3YXMgcGFzc2VkIHRvIHVzCisJCUBkaWZmID0gY29tbWFuZCgnZGlmZi10cmVlJywgJGN1cnJlbnQsCisJICAgICAgICAgICAgICAgICAgICRmZXRjaGVkX3JlZiwgJy0tJyk7CisJCW15IEBmaW5pc2g7CisJCWlmIChAZGlmZikgeworCQkJQGZpbmlzaCA9IHJlYmFzZV9jbWQoKTsKKwkJCXByaW50IFNUREVSUiAiVzogJGN1cnJlbnQgYW5kICIsICRmZXRjaGVkX3JlZiwKKwkJCSAgICAgICAgICAgICAiIGRpZmZlciwgdXNpbmcgQGZpbmlzaDpcbiIsCisJCQkgICAgICAgICAgICAgam9pbigiXG4iLCBAZGlmZiksICJcbiI7CisJCX0gZWxzaWYgKCRpc19sYXN0KSB7CisJCQlwcmludCAiTm8gY2hhbmdlcyBiZXR3ZWVuICIsICRjdXJyZW50LCAiIGFuZCAiLAorCQkJICAgICAgJGZldGNoZWRfcmVmLAorCQkJICAgICAgIlxuUmVzZXR0aW5nIHRvIHRoZSBsYXRlc3QgIiwKKwkJCSAgICAgICRmZXRjaGVkX3JlZiwgIlxuIjsKKwkJCUBmaW5pc2ggPSBxdy9yZXNldCAtLW1peGVkLzsKKwkJfQorCQljb21tYW5kX25vaXN5KEBmaW5pc2gsICRmZXRjaGVkX3JlZikgaWYgQGZpbmlzaDsKKwl9CisJaWYgKCRzdm5fZXJyb3IpIHsKKwkJZGllICJFUlJPUjogTm90IGFsbCBjaGFuZ2VzIGhhdmUgYmVlbiBjb21taXR0ZWQgaW50byBTVk4iCisJCQkuKCRfbm9fcmViYXNlID8gIi5cbiIgOiAiLCBob3dldmVyIHRoZSBjb21taXR0ZWRcbiIKKwkJCS4ib25lcyAoaWYgYW55KSBzZWVtIHRvIGJlIHN1Y2Nlc3NmdWxseSBpbnRlZ3JhdGVkICIKKwkJCS4iaW50byB0aGUgd29ya2luZyB0cmVlLlxuIikKKwkJCS4iUGxlYXNlIHNlZSB0aGUgYWJvdmUgbWVzc2FnZXMgZm9yIGRldGFpbHMuXG4iOworCX0KKwlyZXR1cm4gQGRpZmY7Cit9CisKK3N1YiBjbWRfZGNvbW1pdCB7CisJbXkgJGhlYWQgPSBzaGlmdDsKKwljb21tYW5kX25vaXN5KHF3L3VwZGF0ZS1pbmRleCAtLXJlZnJlc2gvKTsKKwlnaXRfY21kX3RyeSB7IGNvbW1hbmRfb25lbGluZShxdy9kaWZmLWluZGV4IC0tcXVpZXQgSEVBRC8pIH0KKwkJJ0Nhbm5vdCBkY29tbWl0IHdpdGggYSBkaXJ0eSBpbmRleC4gIENvbW1pdCB5b3VyIGNoYW5nZXMgZmlyc3QsICcKKwkJLiAib3Igc3Rhc2ggdGhlbSB3aXRoIGBnaXQgc3Rhc2gnLlxuIjsKKwkkaGVhZCB8fD0gJ0hFQUQnOworCisJbXkgJG9sZF9oZWFkOworCWlmICgkaGVhZCBuZSAnSEVBRCcpIHsKKwkJJG9sZF9oZWFkID0gZXZhbCB7CisJCQljb21tYW5kX29uZWxpbmUoW3F3L3N5bWJvbGljLXJlZiAtcSBIRUFEL10pCisJCX07CisJCWlmICgkb2xkX2hlYWQpIHsKKwkJCSRvbGRfaGVhZCA9fiBze15yZWZzL2hlYWRzL317fTsKKwkJfSBlbHNlIHsKKwkJCSRvbGRfaGVhZCA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUocXcvcmV2LXBhcnNlIEhFQUQvKSB9OworCQl9CisJCWNvbW1hbmQoWydjaGVja291dCcsICRoZWFkXSwgU1RERVJSID0+IDApOworCX0KKworCW15IEByZWZzOworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJywgXEByZWZzKTsKKwl1bmxlc3MgKCRncykgeworCQlkaWUgIlVuYWJsZSB0byBkZXRlcm1pbmUgdXBzdHJlYW0gU1ZOIGluZm9ybWF0aW9uIGZyb20gIiwKKwkJICAgICIkaGVhZCBoaXN0b3J5LlxuUGVyaGFwcyB0aGUgcmVwb3NpdG9yeSBpcyBlbXB0eS4iOworCX0KKworCWlmIChkZWZpbmVkICRfY29tbWl0X3VybCkgeworCQkkdXJsID0gJF9jb21taXRfdXJsOworCX0gZWxzZSB7CisJCSR1cmwgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLAorCQkJICAgICAgInN2bi1yZW1vdGUuJGdzLT57cmVwb19pZH0uY29tbWl0dXJsIikgfTsKKwkJaWYgKCEkdXJsKSB7CisJCQkkdXJsID0gJGdzLT5mdWxsX3B1c2h1cmwKKwkJfQorCX0KKworCW15ICRsYXN0X3JldiA9ICRfcmV2aXNpb24gaWYgZGVmaW5lZCAkX3JldmlzaW9uOworCWlmICgkdXJsKSB7CisJCXByaW50ICJDb21taXR0aW5nIHRvICR1cmwgLi4uXG4iOworCX0KKwlteSAoJGxpbmVhcl9yZWZzLCAkcGFyZW50cykgPSBsaW5lYXJpemVfaGlzdG9yeSgkZ3MsIFxAcmVmcyk7CisJaWYgKCRfbm9fcmViYXNlICYmIHNjYWxhcihAJGxpbmVhcl9yZWZzKSA+IDEpIHsKKwkJd2FybiAiQXR0ZW1wdGluZyB0byBjb21taXQgbW9yZSB0aGFuIG9uZSBjaGFuZ2Ugd2hpbGUgIiwKKwkJICAgICAiLS1uby1yZWJhc2UgaXMgZW5hYmxlZC5cbiIsCisJCSAgICAgIklmIHRoZXNlIGNoYW5nZXMgZGVwZW5kIG9uIGVhY2ggb3RoZXIsIHJlLXJ1bm5pbmcgIiwKKwkJICAgICAid2l0aG91dCAtLW5vLXJlYmFzZSBtYXkgYmUgcmVxdWlyZWQuIgorCX0KKworCWlmIChkZWZpbmVkICRfaW50ZXJhY3RpdmUpeworCQlteSAkYXNrX2RlZmF1bHQgPSAieSI7CisJCWZvcmVhY2ggbXkgJGQgKEAkbGluZWFyX3JlZnMpeworCQkJbXkgKCRmaCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKHF3KHNob3cgLS1zdW1tYXJ5KSwgIiRkIik7CisJCQl3aGlsZSAoPCRmaD4peworCQkJCXByaW50ICRfOworCQkJfQorCQkJY29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7CisJCQkkXyA9IGFzaygiQ29tbWl0IHRoaXMgcGF0Y2ggdG8gU1ZOPyAoW3ldZXMgKGRlZmF1bHQpfFtuXW98W3FddWl0fFthXWxsKTogIiwKKwkJCSAgICAgICAgIHZhbGlkX3JlID0+IHFyL14oPzp5ZXN8eXxub3xufHF1aXR8cXxhbGx8YSkvaSwKKwkJCSAgICAgICAgIGRlZmF1bHQgPT4gJGFza19kZWZhdWx0KTsKKwkJCWRpZSAiQ29tbWl0IHRoaXMgcGF0Y2ggcmVwbHkgcmVxdWlyZWQiIHVubGVzcyBkZWZpbmVkICRfOworCQkJaWYgKC9eW25xXS9pKSB7CisJCQkJZXhpdCgwKTsKKwkJCX0gZWxzaWYgKC9eYS9pKSB7CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCX0KKworCW15ICRleHBlY3RfdXJsID0gJHVybDsKKworCW15ICRwdXNoX21lcmdlX2luZm8gPSBldmFsIHsKKwkJY29tbWFuZF9vbmVsaW5lKHF3L2NvbmZpZyAtLWdldCBzdm4ucHVzaG1lcmdlaW5mby8pCisJCX07CisJaWYgKG5vdCBkZWZpbmVkKCRwdXNoX21lcmdlX2luZm8pCisJCQlvciAkcHVzaF9tZXJnZV9pbmZvIGVxICJmYWxzZSIKKwkJCW9yICRwdXNoX21lcmdlX2luZm8gZXEgIm5vIgorCQkJb3IgJHB1c2hfbWVyZ2VfaW5mbyBlcSAibmV2ZXIiKSB7CisJCSRwdXNoX21lcmdlX2luZm8gPSAwOworCX0KKworCXVubGVzcyAoZGVmaW5lZCgkX21lcmdlX2luZm8pIHx8ICEgJHB1c2hfbWVyZ2VfaW5mbykgeworCQkjIFByZWZsaWdodCBjaGVjayBvZiBjaGFuZ2VzIHRvIGVuc3VyZSBubyBpc3N1ZXMgd2l0aCBtZXJnZWluZm8KKwkJIyBUaGlzIGluY2x1ZGVzIGNoZWNrIGZvciB1bmNvbW1pdHRlZC10by1TVk4gcGFyZW50cworCQkjIChvdGhlciB0aGFuIHRoZSBmaXJzdCBwYXJlbnQsIHdoaWNoIHdlIHdpbGwgaGFuZGxlKSwKKwkJIyBpbmZvcm1hdGlvbiBmcm9tIGRpZmZlcmVudCBTVk4gcmVwb3MsIGFuZCBwYXRocworCQkjIHdoaWNoIGFyZSBub3QgdW5kZXJuZWF0aCB0aGlzIHJlcG9zaXRvcnkgcm9vdC4KKwkJbXkgJHJvb3R1cmwgPSAkZ3MtPnJlcG9zX3Jvb3Q7CisJCWZvcmVhY2ggbXkgJGQgKEAkbGluZWFyX3JlZnMpIHsKKwkJCW15ICVwYXJlbnRzaGFzaDsKKwkJCXJlYWRfY29tbWl0X3BhcmVudHMoXCVwYXJlbnRzaGFzaCwgJGQpOworCQkJbXkgQHJlYWxwYXJlbnRzID0gQHskcGFyZW50c2hhc2h7JGR9fTsKKwkJCWlmICgkI3JlYWxwYXJlbnRzID4gMCkgeworCQkJCSMgTWVyZ2UgY29tbWl0CisJCQkJc2hpZnQgQHJlYWxwYXJlbnRzOyAjIFJlbW92ZS9pZ25vcmUgZmlyc3QgcGFyZW50CisJCQkJZm9yZWFjaCBteSAkcGFyZW50IChAcmVhbHBhcmVudHMpIHsKKwkJCQkJbXkgKCRicmFuY2h1cmwsICRzdm5yZXYsICRwYXJ1dWlkKSA9IGNtdF9tZXRhZGF0YSgkcGFyZW50KTsKKwkJCQkJdW5sZXNzIChkZWZpbmVkICRwYXJ1dWlkKSB7CisJCQkJCQkjIEEgcGFyZW50IGlzIG1pc3NpbmcgU1ZOIGFubm90YXRpb25zLi4uCisJCQkJCQkjIGFib3J0IHRoZSB3aG9sZSBvcGVyYXRpb24uCisJCQkJCQlmYXRhbCAiJHBhcmVudCBpcyBtZXJnZWQgaW50byByZXZpc2lvbiAkZCwgIgorCQkJCQkJCSAuImJ1dCBkb2VzIG5vdCBoYXZlIGdpdC1zdm4gbWV0YWRhdGEuICIKKwkJCQkJCQkgLiJFaXRoZXIgZGNvbW1pdCB0aGUgYnJhbmNoIG9yIHVzZSBhICIKKwkJCQkJCQkgLiJsb2NhbCBjaGVycnktcGljaywgRkYgbWVyZ2UsIG9yIHJlYmFzZSAiCisJCQkJCQkJIC4iaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBtZXJnZSBjb21taXQuIjsKKwkJCQkJfQorCisJCQkJCXVubGVzcyAoJHBhcnV1aWQgZXEgJHV1aWQpIHsKKwkJCQkJCSMgUGFyZW50IGhhcyBTVk4gbWV0YWRhdGEgZnJvbSBkaWZmZXJlbnQgcmVwb3NpdG9yeQorCQkJCQkJZmF0YWwgIm1lcmdlIHBhcmVudCAkcGFyZW50IGZvciBjaGFuZ2UgJGQgaGFzICIKKwkJCQkJCQkgLiJnaXQtc3ZuIHV1aWQgJHBhcnV1aWQsIHdoaWxlIGN1cnJlbnQgY2hhbmdlICIKKwkJCQkJCQkgLiJoYXMgdXVpZCAkdXVpZCEiOworCQkJCQl9CisKKwkJCQkJdW5sZXNzICgkYnJhbmNodXJsID1+IC9eXFEkcm9vdHVybFxFKC4qKS8pIHsKKwkJCQkJCSMgVGhpcyBicmFuY2ggaXMgdmVyeSBzdHJhbmdlIGluZGVlZC4KKwkJCQkJCWZhdGFsICJtZXJnZSBwYXJlbnQgJHBhcmVudCBmb3IgJGQgaXMgb24gYnJhbmNoICIKKwkJCQkJCQkgLiIkYnJhbmNodXJsLCB3aGljaCBpcyBub3QgdW5kZXIgdGhlICIKKwkJCQkJCQkgLiJnaXQtc3ZuIHJvb3QgJHJvb3R1cmwhIjsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCW15ICRyZXdyaXR0ZW5fcGFyZW50OworCW15ICRjdXJyZW50X2hlYWQgPSBjb21tYW5kX29uZWxpbmUocXcvcmV2LXBhcnNlIEhFQUQvKTsKKwlHaXQ6OlNWTjo6cmVtb3ZlX3VzZXJuYW1lKCRleHBlY3RfdXJsKTsKKwlpZiAoZGVmaW5lZCgkX21lcmdlX2luZm8pKSB7CisJCSRfbWVyZ2VfaW5mbyA9fiB0cnsgfXtcbn07CisJfQorCXdoaWxlICgxKSB7CisJCW15ICRkID0gc2hpZnQgQCRsaW5lYXJfcmVmcyBvciBsYXN0OworCQl1bmxlc3MgKGRlZmluZWQgJGxhc3RfcmV2KSB7CisJCQkodW5kZWYsICRsYXN0X3JldiwgdW5kZWYpID0gY210X21ldGFkYXRhKCIkZH4xIik7CisJCQl1bmxlc3MgKGRlZmluZWQgJGxhc3RfcmV2KSB7CisJCQkJZmF0YWwgIlVuYWJsZSB0byBleHRyYWN0IHJldmlzaW9uIGluZm9ybWF0aW9uICIsCisJCQkJICAgICAgImZyb20gY29tbWl0ICRkfjEiOworCQkJfQorCQl9CisJCWlmICgkX2RyeV9ydW4pIHsKKwkJCXByaW50ICJkaWZmLXRyZWUgJGR+MSAkZFxuIjsKKwkJfSBlbHNlIHsKKwkJCW15ICRjbXRfcmV2OworCisJCQl1bmxlc3MgKGRlZmluZWQoJF9tZXJnZV9pbmZvKSB8fCAhICRwdXNoX21lcmdlX2luZm8pIHsKKwkJCQkkX21lcmdlX2luZm8gPSBwb3B1bGF0ZV9tZXJnZV9pbmZvKCRkLCAkZ3MsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXVpZCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lYXJfcmVmcywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXdyaXR0ZW5fcGFyZW50KTsKKwkJCX0KKworCQkJbXkgJWVkX29wdHMgPSAoIHIgPT4gJGxhc3RfcmV2LAorCQkJICAgICAgICAgICAgICAgIGxvZyA9PiBnZXRfY29tbWl0X2VudHJ5KCRkKS0+e2xvZ30sCisJCQkgICAgICAgICAgICAgICAgcmEgPT4gR2l0OjpTVk46OlJhLT5uZXcoJHVybCksCisJCQkgICAgICAgICAgICAgICAgY29uZmlnID0+IFNWTjo6Q29yZTo6Y29uZmlnX2dldF9jb25maWcoCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAkR2l0OjpTVk46OlJhOjpjb25maWdfZGlyCisJCQkgICAgICAgICAgICAgICAgKSwKKwkJCSAgICAgICAgICAgICAgICB0cmVlX2EgPT4gIiRkfjEiLAorCQkJICAgICAgICAgICAgICAgIHRyZWVfYiA9PiAkZCwKKwkJCSAgICAgICAgICAgICAgICBlZGl0b3JfY2IgPT4gc3ViIHsKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNvbW1pdHRlZCByJF9bMF1cbiI7CisJCQkgICAgICAgICAgICAgICAgICAgICAgICRjbXRfcmV2ID0gJF9bMF07CisJCQkgICAgICAgICAgICAgICAgfSwKKwkJCQkJbWVyZ2VpbmZvID0+ICRfbWVyZ2VfaW5mbywKKwkJCSAgICAgICAgICAgICAgICBzdm5fcGF0aCA9PiAnJyk7CisKKwkJCW15ICRlcnJfaGFuZGxlciA9ICRTVk46OkVycm9yOjpoYW5kbGVyOworCQkJJFNWTjo6RXJyb3I6OmhhbmRsZXIgPSBzdWIgeworCQkJCW15ICRlcnIgPSBzaGlmdDsKKwkJCQlkY29tbWl0X3JlYmFzZSgxLCAkY3VycmVudF9oZWFkLCAkZ3MtPnJlZm5hbWUsCisJCQkJCSRlcnIpOworCQkJfTsKKworCQkJaWYgKCFHaXQ6OlNWTjo6RWRpdG9yLT5uZXcoXCVlZF9vcHRzKS0+YXBwbHlfZGlmZikgeworCQkJCXByaW50ICJObyBjaGFuZ2VzXG4kZH4xID09ICRkXG4iOworCQkJfSBlbHNpZiAoJHBhcmVudHMtPnskZH0gJiYgQHskcGFyZW50cy0+eyRkfX0pIHsKKwkJCQkkZ3MtPntpbmplY3RfcGFyZW50c19kY29tbWl0fS0+eyRjbXRfcmV2fSA9CisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbnRzLT57JGR9OworCQkJfQorCQkJJF9mZXRjaF9hbGwgPyAkZ3MtPmZldGNoX2FsbCA6ICRncy0+ZmV0Y2g7CisJCQkkU1ZOOjpFcnJvcjo6aGFuZGxlciA9ICRlcnJfaGFuZGxlcjsKKwkJCSRsYXN0X3JldiA9ICRjbXRfcmV2OworCQkJbmV4dCBpZiAkX25vX3JlYmFzZTsKKworCQkJbXkgQGRpZmYgPSBkY29tbWl0X3JlYmFzZShAJGxpbmVhcl9yZWZzID09IDAsICRkLAorCQkJCQkJJGdzLT5yZWZuYW1lLCB1bmRlZik7CisKKwkJCSRyZXdyaXR0ZW5fcGFyZW50ID0gY29tbWFuZF9vbmVsaW5lKHF3L3Jldi1wYXJzZS8sCisJCQkJCQkJJGdzLT5yZWZuYW1lKTsKKworCQkJaWYgKEBkaWZmKSB7CisJCQkJJGN1cnJlbnRfaGVhZCA9IGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UKKwkJCQkJCQkJSEVBRC8pOworCQkJCUByZWZzID0gKCk7CisJCQkJbXkgKCR1cmxfLCAkcmV2XywgJHV1aWRfLCAkZ3NfKSA9CisJCQkJICAgICAgICAgICAgICB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcsIFxAcmVmcyk7CisJCQkJbXkgKCRsaW5lYXJfcmVmc18sICRwYXJlbnRzXykgPQorCQkJCSAgICAgICAgICAgICAgbGluZWFyaXplX2hpc3RvcnkoJGdzXywgXEByZWZzKTsKKwkJCQlpZiAoc2NhbGFyKEAkbGluZWFyX3JlZnMpICE9CisJCQkJICAgIHNjYWxhcihAJGxpbmVhcl9yZWZzXykpIHsKKwkJCQkJZmF0YWwgIiMgb2YgcmV2aXNpb25zIGNoYW5nZWQgIiwKKwkJCQkJICAiXG5iZWZvcmU6XG4iLAorCQkJCQkgIGpvaW4oIlxuIiwgQCRsaW5lYXJfcmVmcyksCisJCQkJCSAgIlxuXG5hZnRlcjpcbiIsCisJCQkJCSAgam9pbigiXG4iLCBAJGxpbmVhcl9yZWZzXyksICJcbiIsCisJCQkJCSAgJ0lmIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBjb21taXQgJywKKwkJCQkJICAibWVyZ2VzLCB0cnkgcnVubmluZzpcblx0IiwKKwkJCQkJICAnZ2l0IHJlYmFzZSAtLWludGVyYWN0aXZlJywKKwkJCQkJICAnLS1wcmVzZXJ2ZS1tZXJnZXMgJywKKwkJCQkJICAkZ3MtPnJlZm5hbWUsCisJCQkJCSAgIlxuQmVmb3JlIGRjb21taXR0aW5nIjsKKwkJCQl9CisJCQkJaWYgKCR1cmxfIG5lICRleHBlY3RfdXJsKSB7CisJCQkJCWlmICgkdXJsXyBlcSAkZ3MtPm1ldGFkYXRhX3VybCkgeworCQkJCQkJcHJpbnQKKwkJCQkJCSAgIkFjY2VwdGluZyByZXdyaXR0ZW4gVVJMOiIsCisJCQkJCQkgICIgJHVybF9cbiI7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlmYXRhbAorCQkJCQkJICAiVVJMIG1pc21hdGNoIGFmdGVyIHJlYmFzZToiLAorCQkJCQkJICAiICR1cmxfICE9ICRleHBlY3RfdXJsIjsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoJHV1aWRfIG5lICR1dWlkKSB7CisJCQkJCWZhdGFsICJ1dWlkIG1pc21hdGNoIGFmdGVyIHJlYmFzZTogIiwKKwkJCQkJICAgICAgIiR1dWlkXyAhPSAkdXVpZCI7CisJCQkJfQorCQkJCSMgcmVtYXAgcGFyZW50cworCQkJCW15ICglcCwgQGwsICRpKTsKKwkJCQlmb3IgKCRpID0gMDsgJGkgPCBzY2FsYXIgQCRsaW5lYXJfcmVmczsgJGkrKykgeworCQkJCQlteSAkbmV3ID0gJGxpbmVhcl9yZWZzXy0+WyRpXSBvciBuZXh0OworCQkJCQkkcHskbmV3fSA9CisJCQkJCQkkcGFyZW50cy0+eyRsaW5lYXJfcmVmcy0+WyRpXX07CisJCQkJCXB1c2ggQGwsICRuZXc7CisJCQkJfQorCQkJCSRwYXJlbnRzID0gXCVwOworCQkJCSRsaW5lYXJfcmVmcyA9IFxAbDsKKwkJCQl1bmRlZiAkbGFzdF9yZXY7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoJG9sZF9oZWFkKSB7CisJCW15ICRuZXdfaGVhZCA9IGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UgSEVBRC8pOworCQlteSAkbmV3X2lzX3N5bWJvbGljID0gZXZhbCB7CisJCQljb21tYW5kX29uZWxpbmUocXcvc3ltYm9saWMtcmVmIC1xIEhFQUQvKTsKKwkJfTsKKwkJaWYgKCRuZXdfaXNfc3ltYm9saWMpIHsKKwkJCXByaW50ICJkY29tbWl0dGVkIHRoZSBicmFuY2ggIiwgJGhlYWQsICJcbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiZGNvbW1pdHRlZCBvbiBhIGRldGFjaGVkIEhFQUQgYmVjYXVzZSB5b3UgZ2F2ZSAiLAorCQkJICAgICAgImEgcmV2aXNpb24gYXJndW1lbnQuXG4iLAorCQkJICAgICAgIlRoZSByZXdyaXR0ZW4gY29tbWl0IGlzOiAiLCAkbmV3X2hlYWQsICJcbiI7CisJCX0KKwkJY29tbWFuZChbJ2NoZWNrb3V0JywgJG9sZF9oZWFkXSwgU1RERVJSID0+IDApOworCX0KKworCXVubGluayAkZ3MtPntpbmRleH07Cit9CisKK3N1YiBjbWRfYnJhbmNoIHsKKwlteSAoJGJyYW5jaF9uYW1lLCAkaGVhZCkgPSBAXzsKKworCXVubGVzcyAoZGVmaW5lZCAkYnJhbmNoX25hbWUgJiYgbGVuZ3RoICRicmFuY2hfbmFtZSkgeworCQlkaWUoKCRfdGFnID8gInRhZyIgOiAiYnJhbmNoIikgLiAiIG5hbWUgcmVxdWlyZWRcbiIpOworCX0KKwkkaGVhZCB8fD0gJ0hFQUQnOworCisJbXkgKHVuZGVmLCAkcmV2LCB1bmRlZiwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCRoZWFkKTsKKwlteSAkc3JjID0gJGdzLT5mdWxsX3B1c2h1cmw7CisKKwlteSAkcmVtb3RlID0gR2l0OjpTVk46OnJlYWRfYWxsX3JlbW90ZXMoKS0+eyRncy0+e3JlcG9faWR9fTsKKwlteSAkYWxsZ2xvYnMgPSAkcmVtb3RlLT57ICRfdGFnID8gJ3RhZ3MnIDogJ2JyYW5jaGVzJyB9OworCW15ICRnbG9iOworCWlmICgkI3skYWxsZ2xvYnN9ID09IDApIHsKKwkJJGdsb2IgPSAkYWxsZ2xvYnMtPlswXTsKKwl9IGVsc2UgeworCQl1bmxlc3MoZGVmaW5lZCAkX2JyYW5jaF9kZXN0KSB7CisJCQlkaWUgIk11bHRpcGxlICIsCisJCQkgICAgJF90YWcgPyAidGFnIiA6ICJicmFuY2giLAorCQkJICAgICIgcGF0aHMgZGVmaW5lZCBmb3IgU3VidmVyc2lvbiByZXBvc2l0b3J5LlxuIiwKKwkJICAgICAgICAgICAgIllvdSBtdXN0IHNwZWNpZnkgd2hlcmUgeW91IHdhbnQgdG8gY3JlYXRlIHRoZSAiLAorCQkgICAgICAgICAgICAkX3RhZyA/ICJ0YWciIDogImJyYW5jaCIsCisJCSAgICAgICAgICAgICIgd2l0aCB0aGUgLS1kZXN0aW5hdGlvbiBhcmd1bWVudC5cbiI7CisJCX0KKwkJZm9yZWFjaCBteSAkZyAoQHskYWxsZ2xvYnN9KSB7CisJCQlteSAkcmUgPSBHaXQ6OlNWTjo6RWRpdG9yOjpnbG9iMnBhdCgkZy0+e3BhdGh9LT57bGVmdH0pOworCQkJaWYgKCRfYnJhbmNoX2Rlc3QgPX4gLyRyZS8pIHsKKwkJCQkkZ2xvYiA9ICRnOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJdW5sZXNzIChkZWZpbmVkICRnbG9iKSB7CisJCQlteSAkZGVzdF9yZSA9IHFyL1xiXFEkX2JyYW5jaF9kZXN0XEVcYi87CisJCQlmb3JlYWNoIG15ICRnIChAeyRhbGxnbG9ic30pIHsKKwkJCQkkZy0+e3BhdGh9LT57bGVmdH0gPX4gLyRkZXN0X3JlLyBvciBuZXh0OworCQkJCWlmIChkZWZpbmVkICRnbG9iKSB7CisJCQkJCWRpZSAiQW1iaWd1b3VzIGRlc3RpbmF0aW9uOiAiLAorCQkJCQkgICAgJF9icmFuY2hfZGVzdCwgIlxubWF0Y2hlcyBib3RoICciLAorCQkJCQkgICAgJGdsb2ItPntwYXRofS0+e2xlZnR9LCAiJyBhbmQgJyIsCisJCQkJCSAgICAkZy0+e3BhdGh9LT57bGVmdH0sICInXG4iOworCQkJCX0KKwkJCQkkZ2xvYiA9ICRnOworCQkJfQorCQkJdW5sZXNzIChkZWZpbmVkICRnbG9iKSB7CisJCQkJZGllICJVbmtub3duICIsCisJCQkJICAgICRfdGFnID8gInRhZyIgOiAiYnJhbmNoIiwKKwkJCQkgICAgIiBkZXN0aW5hdGlvbiAkX2JyYW5jaF9kZXN0XG4iOworCQkJfQorCQl9CisJfQorCW15ICgkbGZ0LCAkcmd0KSA9IEB7ICRnbG9iLT57cGF0aH0gfXtxdy9sZWZ0IHJpZ2h0L307CisJbXkgJHVybDsKKwlpZiAoZGVmaW5lZCAkX2NvbW1pdF91cmwpIHsKKwkJJHVybCA9ICRfY29tbWl0X3VybDsKKwl9IGVsc2UgeworCQkkdXJsID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywKKwkJCSJzdm4tcmVtb3RlLiRncy0+e3JlcG9faWR9LmNvbW1pdHVybCIpIH07CisJCWlmICghJHVybCkgeworCQkJJHVybCA9ICRyZW1vdGUtPntwdXNodXJsfSB8fCAkcmVtb3RlLT57dXJsfTsKKwkJfQorCX0KKwlteSAkZHN0ID0gam9pbiAnLycsICR1cmwsICRsZnQsICRicmFuY2hfbmFtZSwgKCRyZ3QgfHwgKCkpOworCisJaWYgKCRkc3QgPX4gL15odHRwczovICYmICRzcmMgPX4gL15odHRwOi8pIHsKKwkJJHNyYz1+cy9eaHR0cDovaHR0cHM6LzsKKwl9CisKKwk6Ol9yZXFfc3ZuKCk7CisKKwlteSAkY3R4ID0gU1ZOOjpDbGllbnQtPm5ldygKKwkJYXV0aCAgICA9PiBHaXQ6OlNWTjo6UmE6Ol9hdXRoX3Byb3ZpZGVycygpLAorCQlsb2dfbXNnID0+IHN1YiB7CisJCQkkeyAkX1swXSB9ID0gZGVmaW5lZCAkX21lc3NhZ2UKKwkJCQk/ICRfbWVzc2FnZQorCQkJCTogJ0NyZWF0ZSAnIC4gKCRfdGFnID8gJ3RhZyAnIDogJ2JyYW5jaCAnICkKKwkJCQkuICRicmFuY2hfbmFtZTsKKwkJfSwKKwkpOworCisJZXZhbCB7CisJCSRjdHgtPmxzKCRkc3QsICdIRUFEJywgMCk7CisJfSBhbmQgZGllICJicmFuY2ggJHticmFuY2hfbmFtZX0gYWxyZWFkeSBleGlzdHNcbiI7CisKKwlwcmludCAiQ29weWluZyAke3NyY30gYXQgciR7cmV2fSB0byAke2RzdH0uLi5cbiI7CisJJGN0eC0+Y29weSgkc3JjLCAkcmV2LCAkZHN0KQorCQl1bmxlc3MgJF9kcnlfcnVuOworCisJJGdzLT5mZXRjaF9hbGw7Cit9CisKK3N1YiBjbWRfZmluZF9yZXYgeworCW15ICRyZXZpc2lvbl9vcl9oYXNoID0gc2hpZnQgb3IgZGllICJTVk4gb3IgZ2l0IHJldmlzaW9uIHJlcXVpcmVkICIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50XG4iOworCW15ICRyZXN1bHQ7CisJaWYgKCRyZXZpc2lvbl9vcl9oYXNoID1+IC9eclxkKyQvKSB7CisJCW15ICRoZWFkID0gc2hpZnQ7CisJCSRoZWFkIHx8PSAnSEVBRCc7CisJCW15IEByZWZzOworCQlteSAodW5kZWYsIHVuZGVmLCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCRoZWFkLCBcQHJlZnMpOworCQl1bmxlc3MgKCRncykgeworCQkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIsCisJCQkgICAgIiRoZWFkIGhpc3RvcnlcbiI7CisJCX0KKwkJbXkgJGRlc2lyZWRfcmV2aXNpb24gPSBzdWJzdHIoJHJldmlzaW9uX29yX2hhc2gsIDEpOworCQkkcmVzdWx0ID0gJGdzLT5yZXZfbWFwX2dldCgkZGVzaXJlZF9yZXZpc2lvbiwgJHV1aWQpOworCX0gZWxzZSB7CisJCW15ICh1bmRlZiwgJHJldiwgdW5kZWYpID0gY210X21ldGFkYXRhKCRyZXZpc2lvbl9vcl9oYXNoKTsKKwkJJHJlc3VsdCA9ICRyZXY7CisJfQorCXByaW50ICIkcmVzdWx0XG4iIGlmICRyZXN1bHQ7Cit9CisKK3N1YiBhdXRvX2NyZWF0ZV9lbXB0eV9kaXJlY3RvcmllcyB7CisJbXkgKCRncykgPSBAXzsKKwlteSAkdmFyID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywgJy0tYm9vbCcsCisJCQkJCSAic3ZuLXJlbW90ZS4kZ3MtPntyZXBvX2lkfS5hdXRvbWtkaXJzIikgfTsKKwkjIEJ5IGRlZmF1bHQsIGNyZWF0ZSBlbXB0eSBkaXJlY3RvcmllcyBieSBjb25zdWx0aW5nIHRoZSB1bmhhbmRsZWQgbG9nLAorCSMgYnV0IGFsbG93IHNldHRpbmcgaXQgdG8gJ2ZhbHNlJyB0byBza2lwIGl0LgorCXJldHVybiAhKCR2YXIgJiYgJHZhciBlcSAnZmFsc2UnKTsKK30KKworc3ViIGNtZF9yZWJhc2UgeworCWNvbW1hbmRfbm9pc3kocXcvdXBkYXRlLWluZGV4IC0tcmVmcmVzaC8pOworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJdW5sZXNzICgkZ3MpIHsKKwkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIsCisJCSAgICAid29ya2luZyB0cmVlIGhpc3RvcnlcbiI7CisJfQorCWlmICgkX2RyeV9ydW4pIHsKKwkJcHJpbnQgIlJlbW90ZSBCcmFuY2g6ICIgLiAkZ3MtPnJlZm5hbWUgLiAiXG4iOworCQlwcmludCAiU1ZOIFVSTDogIiAuICR1cmwgLiAiXG4iOworCQlyZXR1cm47CisJfQorCWlmIChjb21tYW5kKHF3L2RpZmYtaW5kZXggSEVBRCAtLS8pKSB7CisJCXByaW50IFNUREVSUiAiQ2Fubm90IHJlYmFzZSB3aXRoIHVuY29tbWl0ZWQgY2hhbmdlczpcbiI7CisJCWNvbW1hbmRfbm9pc3koJ3N0YXR1cycpOworCQlleGl0IDE7CisJfQorCXVubGVzcyAoJF9sb2NhbCkgeworCQkjIHJlYmFzZSB3aWxsIGNoZWNrb3V0IGZvciB1cywgc28gbm8gbmVlZCB0byBkbyBpdCBleHBsaWNpdGx5CisJCSRfbm9fY2hlY2tvdXQgPSAndHJ1ZSc7CisJCSRfZmV0Y2hfYWxsID8gJGdzLT5mZXRjaF9hbGwgOiAkZ3MtPmZldGNoOworCX0KKwljb21tYW5kX25vaXN5KHJlYmFzZV9jbWQoKSwgJGdzLT5yZWZuYW1lKTsKKwlpZiAoYXV0b19jcmVhdGVfZW1wdHlfZGlyZWN0b3JpZXMoJGdzKSkgeworCQkkZ3MtPm1rZW1wdHlkaXJzOworCX0KK30KKworc3ViIGNtZF9zaG93X2lnbm9yZSB7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnKTsKKwkkZ3MgfHw9IEdpdDo6U1ZOLT5uZXc7CisJbXkgJHIgPSAoZGVmaW5lZCAkX3JldmlzaW9uID8gJF9yZXZpc2lvbiA6ICRncy0+cmEtPmdldF9sYXRlc3RfcmV2bnVtKTsKKwkkZ3MtPnByb3Bfd2FsaygkZ3MtPnBhdGgsICRyLCBzdWIgeworCQlteSAoJGdzLCAkcGF0aCwgJHByb3BzKSA9IEBfOworCQlwcmludCBTVERPVVQgIlxuIyAkcGF0aFxuIjsKKwkJbXkgJHMgPSAkcHJvcHMtPnsnc3ZuOmlnbm9yZSd9IG9yIHJldHVybjsKKwkJJHMgPX4gcy9bXHJcbl0rL1xuL2c7CisJCSRzID1+IHMvXlxuKy8vOworCQljaG9tcCAkczsKKwkJJHMgPX4gcyNeIyRwYXRoI2dtOworCQlwcmludCBTVERPVVQgIiRzXG4iOworCX0pOworfQorCitzdWIgY21kX3Nob3dfZXh0ZXJuYWxzIHsKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCSRncyB8fD0gR2l0OjpTVk4tPm5ldzsKKwlteSAkciA9IChkZWZpbmVkICRfcmV2aXNpb24gPyAkX3JldmlzaW9uIDogJGdzLT5yYS0+Z2V0X2xhdGVzdF9yZXZudW0pOworCSRncy0+cHJvcF93YWxrKCRncy0+cGF0aCwgJHIsIHN1YiB7CisJCW15ICgkZ3MsICRwYXRoLCAkcHJvcHMpID0gQF87CisJCXByaW50IFNURE9VVCAiXG4jICRwYXRoXG4iOworCQlteSAkcyA9ICRwcm9wcy0+eydzdm46ZXh0ZXJuYWxzJ30gb3IgcmV0dXJuOworCQkkcyA9fiBzL1tcclxuXSsvXG4vZzsKKwkJY2hvbXAgJHM7CisJCSRzID1+IHMjXiMkcGF0aCNnbTsKKwkJcHJpbnQgU1RET1VUICIkc1xuIjsKKwl9KTsKK30KKworc3ViIGNtZF9jcmVhdGVfaWdub3JlIHsKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCSRncyB8fD0gR2l0OjpTVk4tPm5ldzsKKwlteSAkciA9IChkZWZpbmVkICRfcmV2aXNpb24gPyAkX3JldmlzaW9uIDogJGdzLT5yYS0+Z2V0X2xhdGVzdF9yZXZudW0pOworCSRncy0+cHJvcF93YWxrKCRncy0+cGF0aCwgJHIsIHN1YiB7CisJCW15ICgkZ3MsICRwYXRoLCAkcHJvcHMpID0gQF87CisJCSMgJHBhdGggaXMgb2YgdGhlIGZvcm0gL3BhdGgvdG8vZGlyLworCQkkcGF0aCA9ICcuJyAuICRwYXRoOworCQkjIFNWTiBjYW4gaGF2ZSBhdHRyaWJ1dGVzIG9uIGVtcHR5IGRpcmVjdG9yaWVzLAorCQkjIHdoaWNoIGdpdCB3b24ndCB0cmFjaworCQlta3BhdGgoWyRwYXRoXSkgdW5sZXNzIC1kICRwYXRoOworCQlteSAkaWdub3JlID0gJHBhdGggLiAnLmdpdGlnbm9yZSc7CisJCW15ICRzID0gJHByb3BzLT57J3N2bjppZ25vcmUnfSBvciByZXR1cm47CisJCW9wZW4oR0lUSUdOT1JFLCAnPicsICRpZ25vcmUpCisJCSAgb3IgZmF0YWwoIkZhaWxlZCB0byBvcGVuIGAkaWdub3JlJyBmb3Igd3JpdGluZzogJCEiKTsKKwkJJHMgPX4gcy9bXHJcbl0rL1xuL2c7CisJCSRzID1+IHMvXlxuKy8vOworCQljaG9tcCAkczsKKwkJIyBQcmVmaXggYWxsIHBhdHRlcm5zIHNvIHRoYXQgdGhlIGlnbm9yZSBkb2Vzbid0IGFwcGx5CisJCSMgdG8gc3ViLWRpcmVjdG9yaWVzLgorCQkkcyA9fiBzI14jLyNnbTsKKwkJcHJpbnQgR0lUSUdOT1JFICIkc1xuIjsKKwkJY2xvc2UoR0lUSUdOT1JFKQorCQkgIG9yIGZhdGFsKCJGYWlsZWQgdG8gY2xvc2UgYCRpZ25vcmUnOiAkISIpOworCQljb21tYW5kX25vaXN5KCdhZGQnLCAnLWYnLCAkaWdub3JlKTsKKwl9KTsKK30KKworc3ViIGNtZF9ta2RpcnMgeworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJJGdzIHx8PSBHaXQ6OlNWTi0+bmV3OworCSRncy0+bWtlbXB0eWRpcnMoJF9yZXZpc2lvbik7Cit9CisKKyMgZ2V0X3N2bnByb3BzKFBBVEgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgZm9yIGNtZF9wcm9wZ2V0IGFuZCBjbWRfcHJvcGxpc3QgYmVsb3cuCitzdWIgZ2V0X3N2bnByb3BzIHsKKwlteSAkcGF0aCA9IHNoaWZ0OworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJJGdzIHx8PSBHaXQ6OlNWTi0+bmV3OworCisJIyBwcmVmaXggVEhFIFBBVEggYnkgdGhlIHN1Yi1kaXJlY3RvcnkgZnJvbSB3aGljaCB0aGUgdXNlcgorCSMgaW52b2tlZCB1cy4KKwkkcGF0aCA9ICRjbWRfZGlyX3ByZWZpeCAuICRwYXRoOworCWZhdGFsKCJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAkcGF0aCIpIHVubGVzcyAtZSAkcGF0aDsKKwlteSAkaXNfZGlyID0gLWQgJHBhdGggPyAxIDogMDsKKwkkcGF0aCA9IGpvaW5fcGF0aHMoJGdzLT5wYXRoLCAkcGF0aCk7CisKKwkjIGNhbm9uaWNhbGl6ZSB0aGUgcGF0aCAob3RoZXJ3aXNlIGxpYnN2biB3aWxsIGFib3J0IG9yIGZhaWwgdG8KKwkjIGZpbmQgdGhlIGZpbGUpCisJJHBhdGggPSBjYW5vbmljYWxpemVfcGF0aCgkcGF0aCk7CisKKwlteSAkciA9IChkZWZpbmVkICRfcmV2aXNpb24gPyAkX3JldmlzaW9uIDogJGdzLT5yYS0+Z2V0X2xhdGVzdF9yZXZudW0pOworCW15ICRwcm9wczsKKwlpZiAoJGlzX2RpcikgeworCQkodW5kZWYsIHVuZGVmLCAkcHJvcHMpID0gJGdzLT5yYS0+Z2V0X2RpcigkcGF0aCwgJHIpOworCX0KKwllbHNlIHsKKwkJKHVuZGVmLCAkcHJvcHMpID0gJGdzLT5yYS0+Z2V0X2ZpbGUoJHBhdGgsICRyLCB1bmRlZik7CisJfQorCXJldHVybiAkcHJvcHM7Cit9CisKKyMgY21kX3Byb3BnZXQgKFBST1AsIFBBVEgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmludCB0aGUgU1ZOIHByb3BlcnR5IFBST1AgZm9yIFBBVEguCitzdWIgY21kX3Byb3BnZXQgeworCW15ICgkcHJvcCwgJHBhdGgpID0gQF87CisJJHBhdGggPSAnLicgaWYgbm90IGRlZmluZWQgJHBhdGg7CisJdXNhZ2UoMSkgaWYgbm90IGRlZmluZWQgJHByb3A7CisJbXkgJHByb3BzID0gZ2V0X3N2bnByb3BzKCRwYXRoKTsKKwlpZiAobm90IGRlZmluZWQgJHByb3BzLT57JHByb3B9KSB7CisJCWZhdGFsKCJgJHBhdGgnIGRvZXMgbm90IGhhdmUgYSBgJHByb3AnIFNWTiBwcm9wZXJ0eS4iKTsKKwl9CisJcHJpbnQgJHByb3BzLT57JHByb3B9IC4gIlxuIjsKK30KKworIyBjbWRfcHJvcGxpc3QgKFBBVEgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJpbnQgdGhlIGxpc3Qgb2YgU1ZOIHByb3BlcnRpZXMgZm9yIFBBVEguCitzdWIgY21kX3Byb3BsaXN0IHsKKwlteSAkcGF0aCA9IHNoaWZ0OworCSRwYXRoID0gJy4nIGlmIG5vdCBkZWZpbmVkICRwYXRoOworCW15ICRwcm9wcyA9IGdldF9zdm5wcm9wcygkcGF0aCk7CisJcHJpbnQgIlByb3BlcnRpZXMgb24gJyRwYXRoJzpcbiI7CisJZm9yZWFjaCAoc29ydCBrZXlzICV7JHByb3BzfSkgeworCQlwcmludCAiICAkX1xuIjsKKwl9Cit9CisKK3N1YiBjbWRfbXVsdGlfaW5pdCB7CisJbXkgJHVybCA9IHNoaWZ0OworCXVubGVzcyAoZGVmaW5lZCAkX3RydW5rIHx8IEBfYnJhbmNoZXMgfHwgQF90YWdzKSB7CisJCXVzYWdlKDEpOworCX0KKworCSRfcHJlZml4ID0gJycgdW5sZXNzIGRlZmluZWQgJF9wcmVmaXg7CisJaWYgKGRlZmluZWQgJHVybCkgeworCQkkdXJsID0gY2Fub25pY2FsaXplX3VybCgkdXJsKTsKKwkJaW5pdF9zdWJkaXIoQF8pOworCX0KKwlkb19naXRfaW5pdF9kYigpOworCWlmIChkZWZpbmVkICRfdHJ1bmspIHsKKwkJJF90cnVuayA9fiBzI14vKyMjOworCQlteSAkdHJ1bmtfcmVmID0gJ3JlZnMvcmVtb3Rlcy8nIC4gJF9wcmVmaXggLiAndHJ1bmsnOworCQkjIHRyeSBib3RoIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGxvb2t1cHM6CisJCW15ICRnc190cnVuayA9IGV2YWwgeyBHaXQ6OlNWTi0+bmV3KCR0cnVua19yZWYpIH07CisJCXVubGVzcyAoJGdzX3RydW5rKSB7CisJCQlteSAoJHRydW5rX3VybCwgJHRydW5rX3BhdGgpID0KKwkJCSAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZV9zdm5fdXJsKCR1cmwsICRfdHJ1bmspOworCQkJJGdzX3RydW5rID0gR2l0OjpTVk4tPmluaXQoJHRydW5rX3VybCwgJHRydW5rX3BhdGgsCisJCQkJCQkgICB1bmRlZiwgJHRydW5rX3JlZik7CisJCX0KKwl9CisJcmV0dXJuIHVubGVzcyBAX2JyYW5jaGVzIHx8IEBfdGFnczsKKwlteSAkcmEgPSAkdXJsID8gR2l0OjpTVk46OlJhLT5uZXcoJHVybCkgOiB1bmRlZjsKKwlmb3JlYWNoIG15ICRwYXRoIChAX2JyYW5jaGVzKSB7CisJCWNvbXBsZXRlX3VybF9sc19pbml0KCRyYSwgJHBhdGgsICctLWJyYW5jaGVzLy1iJywgJF9wcmVmaXgpOworCX0KKwlmb3JlYWNoIG15ICRwYXRoIChAX3RhZ3MpIHsKKwkJY29tcGxldGVfdXJsX2xzX2luaXQoJHJhLCAkcGF0aCwgJy0tdGFncy8tdCcsICRfcHJlZml4Lid0YWdzLycpOworCX0KK30KKworc3ViIGNtZF9tdWx0aV9mZXRjaCB7CisJJEdpdDo6U1ZOOjpub19yZXVzZV9leGlzdGluZyA9IHVuZGVmOworCW15ICRyZW1vdGVzID0gR2l0OjpTVk46OnJlYWRfYWxsX3JlbW90ZXMoKTsKKwlmb3JlYWNoIG15ICRyZXBvX2lkIChzb3J0IGtleXMgJSRyZW1vdGVzKSB7CisJCWlmICgkcmVtb3Rlcy0+eyRyZXBvX2lkfS0+e3VybH0pIHsKKwkJCUdpdDo6U1ZOOjpmZXRjaF9hbGwoJHJlcG9faWQsICRyZW1vdGVzKTsKKwkJfQorCX0KK30KKworIyB0aGlzIGNvbW1hbmQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IHJlcXVpcmVzIG5vIG1ldGFkYXRhCitzdWIgY21kX2NvbW1pdF9kaWZmIHsKKwlteSAoJHRhLCAkdGIsICR1cmwpID0gQF87CisJbXkgJHVzYWdlID0gIlVzYWdlOiAkMCBjb21taXQtZGlmZiAtcjxyZXZpc2lvbj4gIi4KKwkgICAgICAgICAgICAiPHRyZWUtaXNoPiA8dHJlZS1pc2g+IFs8VVJMPl0iOworCWZhdGFsKCR1c2FnZSkgaWYgKCFkZWZpbmVkICR0YSB8fCAhZGVmaW5lZCAkdGIpOworCW15ICRzdm5fcGF0aCA9ICcnOworCWlmICghZGVmaW5lZCAkdXJsKSB7CisJCW15ICRncyA9IGV2YWwgeyBHaXQ6OlNWTi0+bmV3IH07CisJCWlmICghJGdzKSB7CisJCQlmYXRhbCgiTmVlZGVkIFVSTCBvciB1c2FibGUgZ2l0LXN2biAtLWlkIGluICIsCisJCQkgICAgICAidGhlIGNvbW1hbmQtbGluZVxuIiwgJHVzYWdlKTsKKwkJfQorCQkkdXJsID0gJGdzLT51cmw7CisJCSRzdm5fcGF0aCA9ICRncy0+cGF0aDsKKwl9CisJdW5sZXNzIChkZWZpbmVkICRfcmV2aXNpb24pIHsKKwkJZmF0YWwoIi1yfC0tcmV2aXNpb24gaXMgYSByZXF1aXJlZCBhcmd1bWVudFxuIiwgJHVzYWdlKTsKKwl9CisJaWYgKGRlZmluZWQgJF9tZXNzYWdlICYmIGRlZmluZWQgJF9maWxlKSB7CisJCWZhdGFsKCJCb3RoIC0tbWVzc2FnZS8tbSBhbmQgLS1maWxlLy1GIHNwZWNpZmllZCAiLAorCQkgICAgICAiZm9yIHRoZSBjb21taXQgbWVzc2FnZS5cbiIsCisJCSAgICAgICJJIGhhdmUgbm8gaWRlYSB3aGF0IHlvdSBtZWFuIik7CisJfQorCWlmIChkZWZpbmVkICRfZmlsZSkgeworCQkkX21lc3NhZ2UgPSBmaWxlX3RvX3MoJF9maWxlKTsKKwl9IGVsc2UgeworCQkkX21lc3NhZ2UgfHw9IGdldF9jb21taXRfZW50cnkoJHRiKS0+e2xvZ307CisJfQorCW15ICRyYSB8fD0gR2l0OjpTVk46OlJhLT5uZXcoJHVybCk7CisJbXkgJHIgPSAkX3JldmlzaW9uOworCWlmICgkciBlcSAnSEVBRCcpIHsKKwkJJHIgPSAkcmEtPmdldF9sYXRlc3RfcmV2bnVtOworCX0gZWxzaWYgKCRyICF+IC9eXGQrJC8pIHsKKwkJZGllICJyZXZpc2lvbiBhcmd1bWVudDogJHIgbm90IHVuZGVyc3Rvb2QgYnkgZ2l0LXN2blxuIjsKKwl9CisJbXkgJWVkX29wdHMgPSAoIHIgPT4gJHIsCisJICAgICAgICAgICAgICAgIGxvZyA9PiAkX21lc3NhZ2UsCisJICAgICAgICAgICAgICAgIHJhID0+ICRyYSwKKwkgICAgICAgICAgICAgICAgdHJlZV9hID0+ICR0YSwKKwkgICAgICAgICAgICAgICAgdHJlZV9iID0+ICR0YiwKKwkgICAgICAgICAgICAgICAgZWRpdG9yX2NiID0+IHN1YiB7IHByaW50ICJDb21taXR0ZWQgciRfWzBdXG4iIH0sCisJICAgICAgICAgICAgICAgIHN2bl9wYXRoID0+ICRzdm5fcGF0aCApOworCWlmICghR2l0OjpTVk46OkVkaXRvci0+bmV3KFwlZWRfb3B0cyktPmFwcGx5X2RpZmYpIHsKKwkJcHJpbnQgIk5vIGNoYW5nZXNcbiR0YSA9PSAkdGJcbiI7CisJfQorfQorCisKK3N1YiBjbWRfaW5mbyB7CisJbXkgJHBhdGggPSBjYW5vbmljYWxpemVfcGF0aChkZWZpbmVkKCRfWzBdKSA/ICRfWzBdIDogIi4iKTsKKwlteSAkZnVsbHBhdGggPSBjYW5vbmljYWxpemVfcGF0aCgkY21kX2Rpcl9wcmVmaXggLiAkcGF0aCk7CisJaWYgKGV4aXN0cyAkX1sxXSkgeworCQlkaWUgIlRvbyBtYW55IGFyZ3VtZW50cyBzcGVjaWZpZWRcbiI7CisJfQorCisJbXkgKCRmaWxlX3R5cGUsICRkaWZmX3N0YXR1cykgPSBmaW5kX2ZpbGVfdHlwZV9hbmRfZGlmZl9zdGF0dXMoJHBhdGgpOworCisJaWYgKCEkZmlsZV90eXBlICYmICEkZGlmZl9zdGF0dXMpIHsKKwkJcHJpbnQgU1RERVJSICJzdm46ICckcGF0aCcgaXMgbm90IHVuZGVyIHZlcnNpb24gY29udHJvbFxuIjsKKwkJZXhpdCAxOworCX0KKworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJdW5sZXNzICgkZ3MpIHsKKwkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIsCisJCSAgICAid29ya2luZyB0cmVlIGhpc3RvcnlcbiI7CisJfQorCisJIyBjYW5vbmljYWxpemVfcGF0aCgpIHdpbGwgcmV0dXJuICIiIHRvIG1ha2UgbGlic3ZuIDEuNS54IGhhcHB5LAorCSRwYXRoID0gIi4iIGlmICRwYXRoIGVxICIiOworCisJbXkgJGZ1bGxfdXJsID0gY2Fub25pY2FsaXplX3VybCggYWRkX3BhdGhfdG9fdXJsKCAkdXJsLCAkZnVsbHBhdGggKSApOworCisJaWYgKCRfdXJsKSB7CisJCXByaW50ICIkZnVsbF91cmxcbiI7CisJCXJldHVybjsKKwl9CisKKwlteSAkcmVzdWx0ID0gIlBhdGg6ICRwYXRoXG4iOworCSRyZXN1bHQgLj0gIk5hbWU6ICIgLiBiYXNlbmFtZSgkcGF0aCkgLiAiXG4iIGlmICRmaWxlX3R5cGUgbmUgImRpciI7CisJJHJlc3VsdCAuPSAiVVJMOiAkZnVsbF91cmxcbiI7CisKKwlldmFsIHsKKwkJbXkgJHJlcG9zX3Jvb3QgPSAkZ3MtPnJlcG9zX3Jvb3Q7CisJCUdpdDo6U1ZOOjpyZW1vdmVfdXNlcm5hbWUoJHJlcG9zX3Jvb3QpOworCQkkcmVzdWx0IC49ICJSZXBvc2l0b3J5IFJvb3Q6ICIgLiBjYW5vbmljYWxpemVfdXJsKCRyZXBvc19yb290KSAuICJcbiI7CisJfTsKKwlpZiAoJEApIHsKKwkJJHJlc3VsdCAuPSAiUmVwb3NpdG9yeSBSb290OiAob2ZmbGluZSlcbiI7CisJfQorCTo6X3JlcV9zdm4oKTsKKwkkcmVzdWx0IC49ICJSZXBvc2l0b3J5IFVVSUQ6ICR1dWlkXG4iIHVubGVzcyAkZGlmZl9zdGF0dXMgZXEgIkEiICYmCisJCSg6OmNvbXBhcmVfc3ZuX3ZlcnNpb24oJzEuNS40JykgPD0gMCB8fCAkZmlsZV90eXBlIG5lICJkaXIiKTsKKwkkcmVzdWx0IC49ICJSZXZpc2lvbjogIiAuICgkZGlmZl9zdGF0dXMgZXEgIkEiID8gMCA6ICRyZXYpIC4gIlxuIjsKKworCSRyZXN1bHQgLj0gIk5vZGUgS2luZDogIiAuCisJCSAgICgkZmlsZV90eXBlIGVxICJkaXIiID8gImRpcmVjdG9yeSIgOiAiZmlsZSIpIC4gIlxuIjsKKworCW15ICRzY2hlZHVsZSA9ICRkaWZmX3N0YXR1cyBlcSAiQSIKKwkJICAgICAgID8gImFkZCIKKwkJICAgICAgIDogKCRkaWZmX3N0YXR1cyBlcSAiRCIgPyAiZGVsZXRlIiA6ICJub3JtYWwiKTsKKwkkcmVzdWx0IC49ICJTY2hlZHVsZTogJHNjaGVkdWxlXG4iOworCisJaWYgKCRkaWZmX3N0YXR1cyBlcSAiQSIpIHsKKwkJcHJpbnQgJHJlc3VsdCwgIlxuIjsKKwkJcmV0dXJuOworCX0KKworCW15ICgkbGNfYXV0aG9yLCAkbGNfcmV2LCAkbGNfZGF0ZV91dGMpOworCW15IEBhcmdzID0gR2l0OjpTVk46OkxvZzo6Z2l0X3N2bl9sb2dfY21kKCRyZXYsICRyZXYsICItLSIsICRmdWxscGF0aCk7CisJbXkgJGxvZyA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQGFyZ3MpOworCW15ICRlc2NfY29sb3IgPSBxci8oPzpcMDMzXFsoPzooPzpcZCs7KSpcZCopP20pKi87CisJd2hpbGUgKDwkbG9nPikgeworCQlpZiAoL14ke2VzY19jb2xvcn1hdXRob3IgKC4rKSA8W14+XSs+IChcZCspIChbXC1cK10/XGQrKSQvbykgeworCQkJJGxjX2F1dGhvciA9ICQxOworCQkJJGxjX2RhdGVfdXRjID0gR2l0OjpTVk46OkxvZzo6cGFyc2VfZ2l0X2RhdGUoJDIsICQzKTsKKwkJfSBlbHNpZiAoL14ke2VzY19jb2xvcn0gICAgKGdpdC1zdm4taWQ6LispJC9vKSB7CisJCQkodW5kZWYsICRsY19yZXYsIHVuZGVmKSA9IDo6ZXh0cmFjdF9tZXRhZGF0YSgkMSk7CisJCX0KKwl9CisJY2xvc2UgJGxvZzsKKworCUdpdDo6U1ZOOjpMb2c6OnNldF9sb2NhbF90aW1lem9uZSgpOworCisJJHJlc3VsdCAuPSAiTGFzdCBDaGFuZ2VkIEF1dGhvcjogJGxjX2F1dGhvclxuIjsKKwkkcmVzdWx0IC49ICJMYXN0IENoYW5nZWQgUmV2OiAkbGNfcmV2XG4iOworCSRyZXN1bHQgLj0gIkxhc3QgQ2hhbmdlZCBEYXRlOiAiIC4KKwkJICAgR2l0OjpTVk46OkxvZzo6Zm9ybWF0X3N2bl9kYXRlKCRsY19kYXRlX3V0YykgLiAiXG4iOworCisJaWYgKCRmaWxlX3R5cGUgbmUgImRpciIpIHsKKwkJbXkgJHRleHRfbGFzdF91cGRhdGVkX2RhdGUgPQorCQkgICAgKCRkaWZmX3N0YXR1cyBlcSAiRCIgPyAkbGNfZGF0ZV91dGMgOiAoc3RhdCAkcGF0aClbOV0pOworCQkkcmVzdWx0IC49CisJCSAgICAiVGV4dCBMYXN0IFVwZGF0ZWQ6ICIgLgorCQkgICAgR2l0OjpTVk46OkxvZzo6Zm9ybWF0X3N2bl9kYXRlKCR0ZXh0X2xhc3RfdXBkYXRlZF9kYXRlKSAuCisJCSAgICAiXG4iOworCQlteSAkY2hlY2tzdW07CisJCWlmICgkZGlmZl9zdGF0dXMgZXEgIkQiKSB7CisJCQlteSAoJGZoLCAkY3R4KSA9CisJCQkgICAgY29tbWFuZF9vdXRwdXRfcGlwZShxdyhjYXQtZmlsZSBibG9iKSwgIkhFQUQ6JHBhdGgiKTsKKwkJCWlmICgkZmlsZV90eXBlIGVxICJsaW5rIikgeworCQkJCW15ICRmaWxlX25hbWUgPSA8JGZoPjsKKwkJCQkkY2hlY2tzdW0gPSBtZDVzdW0oImxpbmsgJGZpbGVfbmFtZSIpOworCQkJfSBlbHNlIHsKKwkJCQkkY2hlY2tzdW0gPSBtZDVzdW0oJGZoKTsKKwkJCX0KKwkJCWNvbW1hbmRfY2xvc2VfcGlwZSgkZmgsICRjdHgpOworCQl9IGVsc2lmICgkZmlsZV90eXBlIGVxICJsaW5rIikgeworCQkJbXkgJGZpbGVfbmFtZSA9CisJCQkgICAgY29tbWFuZChxdyhjYXQtZmlsZSBibG9iKSwgIkhFQUQ6JHBhdGgiKTsKKwkJCSRjaGVja3N1bSA9CisJCQkgICAgbWQ1c3VtKCJsaW5rICIgLiAkZmlsZV9uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCW9wZW4gRklMRSwgIjwiLCAkcGF0aCBvciBkaWUgJCE7CisJCQkkY2hlY2tzdW0gPSBtZDVzdW0oXCpGSUxFKTsKKwkJCWNsb3NlIEZJTEUgb3IgZGllICQhOworCQl9CisJCSRyZXN1bHQgLj0gIkNoZWNrc3VtOiAiIC4gJGNoZWNrc3VtIC4gIlxuIjsKKwl9CisKKwlwcmludCAkcmVzdWx0LCAiXG4iOworfQorCitzdWIgY21kX3Jlc2V0IHsKKwlteSAkdGFyZ2V0ID0gc2hpZnQgfHwgJF9yZXZpc2lvbiBvciBkaWUgIlNWTiByZXZpc2lvbiByZXF1aXJlZFxuIjsKKwkkdGFyZ2V0ID0gJDEgaWYgJHRhcmdldCA9fiAvXnIoXGQrKSQvOworCSR0YXJnZXQgPX4gL15cZCskLyBvciBkaWUgIk51bWVyaWMgU1ZOIHJldmlzaW9uIGV4cGVjdGVkXG4iOworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJdW5sZXNzICgkZ3MpIHsKKwkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIuCisJCSAgICAiaGlzdG9yeVxuIjsKKwl9CisJbXkgKCRyLCAkYykgPSAkZ3MtPmZpbmRfcmV2X2JlZm9yZSgkdGFyZ2V0LCBub3QgJF9mZXRjaF9wYXJlbnQpOworCWRpZSAiQ2Fubm90IGZpbmQgU1ZOIHJldmlzaW9uICR0YXJnZXRcbiIgdW5sZXNzIGRlZmluZWQoJGMpOworCSRncy0+cmV2X21hcF9zZXQoJHIsICRjLCAncmVzZXQnLCAkdXVpZCk7CisJcHJpbnQgInIkciA9ICRjICgkZ3MtPntyZWZfaWR9KVxuIjsKK30KKworc3ViIGNtZF9nYyB7CisJaWYgKCFjYW5fY29tcHJlc3MoKSkgeworCQl3YXJuICJDb21wcmVzczo6WmxpYiBjb3VsZCBub3QgYmUgZm91bmQ7IHVuaGFuZGxlZC5sb2cgIiAuCisJCSAgICAgImZpbGVzIHdpbGwgbm90IGJlIGNvbXByZXNzZWQuXG4iOworCX0KKwlmaW5kKHsgd2FudGVkID0+IFwmZ2NfZGlyZWN0b3J5LCBub19jaGRpciA9PiAxfSwgIiRFTlZ7R0lUX0RJUn0vc3ZuIik7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyB1dGlsaXR5IGZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3N1YiByZWJhc2VfY21kIHsKKwlteSBAY21kID0gcXcvcmViYXNlLzsKKwlwdXNoIEBjbWQsICctdicgaWYgJF92ZXJib3NlOworCXB1c2ggQGNtZCwgcXcvLS1tZXJnZS8gaWYgJF9tZXJnZTsKKwlwdXNoIEBjbWQsICItLXN0cmF0ZWd5PSRfc3RyYXRlZ3kiIGlmICRfc3RyYXRlZ3k7CisJcHVzaCBAY21kLCAiLS1wcmVzZXJ2ZS1tZXJnZXMiIGlmICRfcHJlc2VydmVfbWVyZ2VzOworCUBjbWQ7Cit9CisKK3N1YiBwb3N0X2ZldGNoX2NoZWNrb3V0IHsKKwlyZXR1cm4gaWYgJF9ub19jaGVja291dDsKKwlyZXR1cm4gaWYgdmVyaWZ5X3JlZignSEVBRF4wJyk7CisJbXkgJGdzID0gJEdpdDo6U1ZOOjpfaGVhZCBvciByZXR1cm47CisKKwkjIGxvb2sgZm9yICJ0cnVuayIgcmVmIGlmIGl0IGV4aXN0cworCW15ICRyZW1vdGUgPSBHaXQ6OlNWTjo6cmVhZF9hbGxfcmVtb3RlcygpLT57JGdzLT57cmVwb19pZH19OworCW15ICRmZXRjaCA9ICRyZW1vdGUtPntmZXRjaH07CisJaWYgKCRmZXRjaCkgeworCQlmb3JlYWNoIG15ICRwIChrZXlzICUkZmV0Y2gpIHsKKwkJCWJhc2VuYW1lKCRmZXRjaC0+eyRwfSkgZXEgJ3RydW5rJyBvciBuZXh0OworCQkJJGdzID0gR2l0OjpTVk4tPm5ldygkZmV0Y2gtPnskcH0sICRncy0+e3JlcG9faWR9LCAkcCk7CisJCQlsYXN0OworCQl9CisJfQorCisJY29tbWFuZF9ub2lzeShxdyh1cGRhdGUtcmVmIEhFQUQpLCAkZ3MtPnJlZm5hbWUpOworCXJldHVybiB1bmxlc3MgdmVyaWZ5X3JlZignSEVBRF4wJyk7CisKKwlyZXR1cm4gaWYgJEVOVntHSVRfRElSfSAhfiBtI14oPzouKi8pP1wuZ2l0JCM7CisJbXkgJGluZGV4ID0gJEVOVntHSVRfSU5ERVhfRklMRX0gfHwgIiRFTlZ7R0lUX0RJUn0vaW5kZXgiOworCXJldHVybiBpZiAtZiAkaW5kZXg7CisKKwlyZXR1cm4gaWYgY29tbWFuZF9vbmVsaW5lKHF3L3Jldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUvKSBlcSAnZmFsc2UnOworCXJldHVybiBpZiBjb21tYW5kX29uZWxpbmUocXcvcmV2LXBhcnNlIC0taXMtaW5zaWRlLWdpdC1kaXIvKSBlcSAndHJ1ZSc7CisJY29tbWFuZF9ub2lzeShxdy9yZWFkLXRyZWUgLW0gLXUgLXYgSEVBRCBIRUFELyk7CisJcHJpbnQgU1RERVJSICJDaGVja2VkIG91dCBIRUFEOlxuICAiLAorCSAgICAgICAgICAgICAkZ3MtPmZ1bGxfdXJsLCAiIHIiLCAkZ3MtPmxhc3RfcmV2LCAiXG4iOworCWlmIChhdXRvX2NyZWF0ZV9lbXB0eV9kaXJlY3RvcmllcygkZ3MpKSB7CisJCSRncy0+bWtlbXB0eWRpcnMoJGdzLT5sYXN0X3Jldik7CisJfQorfQorCitzdWIgY29tcGxldGVfc3ZuX3VybCB7CisJbXkgKCR1cmwsICRwYXRoKSA9IEBfOworCSRwYXRoID0gY2Fub25pY2FsaXplX3BhdGgoJHBhdGgpOworCisJIyBJZiB0aGUgcGF0aCBpcyBub3QgYSBVUkwuLi4KKwlpZiAoJHBhdGggIX4gbSNeW2EtelwrXSs6Ly8jKSB7CisJCWlmICghZGVmaW5lZCAkdXJsIHx8ICR1cmwgIX4gbSNeW2EtelwrXSs6Ly8jKSB7CisJCQlmYXRhbCgiRTogJyRwYXRoJyBpcyBub3QgYSBjb21wbGV0ZSBVUkwgIiwKKwkJCSAgICAgICJhbmQgYSBzZXBhcmF0ZSBVUkwgaXMgbm90IHNwZWNpZmllZCIpOworCQl9CisJCXJldHVybiAoJHVybCwgJHBhdGgpOworCX0KKwlyZXR1cm4gKCRwYXRoLCAnJyk7Cit9CisKK3N1YiBjb21wbGV0ZV91cmxfbHNfaW5pdCB7CisJbXkgKCRyYSwgJHJlcG9fcGF0aCwgJHN3aXRjaCwgJHBmeCkgPSBAXzsKKwl1bmxlc3MgKCRyZXBvX3BhdGgpIHsKKwkJcHJpbnQgU1RERVJSICJXOiAkc3dpdGNoIG5vdCBzcGVjaWZpZWRcbiI7CisJCXJldHVybjsKKwl9CisJJHJlcG9fcGF0aCA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRyZXBvX3BhdGgpOworCWlmICgkcmVwb19wYXRoID1+IG0jXlthLXpcK10rOi8vIykgeworCQkkcmEgPSBHaXQ6OlNWTjo6UmEtPm5ldygkcmVwb19wYXRoKTsKKwkJJHJlcG9fcGF0aCA9ICcnOworCX0gZWxzZSB7CisJCSRyZXBvX3BhdGggPX4gcyNeLysjIzsKKwkJdW5sZXNzICgkcmEpIHsKKwkJCWZhdGFsKCJFOiAnJHJlcG9fcGF0aCcgaXMgbm90IGEgY29tcGxldGUgVVJMICIsCisJCQkgICAgICAiYW5kIGEgc2VwYXJhdGUgVVJMIGlzIG5vdCBzcGVjaWZpZWQiKTsKKwkJfQorCX0KKwlteSAkdXJsID0gJHJhLT51cmw7CisJbXkgJGdzID0gR2l0OjpTVk4tPmluaXQoJHVybCwgdW5kZWYsIHVuZGVmLCB1bmRlZiwgMSk7CisJbXkgJGsgPSAic3ZuLXJlbW90ZS4kZ3MtPntyZXBvX2lkfS51cmwiOworCW15ICRvcmlnX3VybCA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUocXcvY29uZmlnIC0tZ2V0LywgJGspIH07CisJaWYgKCRvcmlnX3VybCAmJiAoJG9yaWdfdXJsIG5lICRncy0+dXJsKSkgeworCQlkaWUgIiRrIGFscmVhZHkgc2V0OiAkb3JpZ191cmxcbiIsCisJCSAgICAid2FudGVkIHRvIHNldCB0bzogJGdzLT51cmxcbiI7CisJfQorCWNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJGssICRncy0+dXJsKSB1bmxlc3MgJG9yaWdfdXJsOworCisJbXkgJHJlbW90ZV9wYXRoID0gam9pbl9wYXRocyggJGdzLT5wYXRoLCAkcmVwb19wYXRoICk7CisJJHJlbW90ZV9wYXRoID1+IHN7JShbMC05QS1GXXsyfSl9e2NociBoZXgoJDEpfWllZzsKKwkkcmVtb3RlX3BhdGggPX4gcyNeLyMjZzsKKwkkcmVtb3RlX3BhdGggLj0gIi8qIiBpZiAkcmVtb3RlX3BhdGggIX4gL1wqLzsKKwlteSAoJG4pID0gKCRzd2l0Y2ggPX4gL14tLShcdyspLyk7CisJaWYgKGxlbmd0aCAkcGZ4ICYmICRwZnggIX4gbSMvJCMpIHsKKwkJZGllICItLXByZWZpeD0nJHBmeCcgbXVzdCBoYXZlIGEgdHJhaWxpbmcgc2xhc2ggJy8nXG4iOworCX0KKwljb21tYW5kX25vaXN5KCdjb25maWcnLAorCQkgICAgICAnLS1hZGQnLAorCSAgICAgICAgICAgICAgInN2bi1yZW1vdGUuJGdzLT57cmVwb19pZH0uJG4iLAorCSAgICAgICAgICAgICAgIiRyZW1vdGVfcGF0aDpyZWZzL3JlbW90ZXMvJHBmeCoiIC4KKwkgICAgICAgICAgICAgICAgKCcvKicgeCAoKCRyZW1vdGVfcGF0aCA9fiB0ci8qLyovKSAtIDEpKSApOworfQorCitzdWIgdmVyaWZ5X3JlZiB7CisJbXkgKCRyZWYpID0gQF87CisJZXZhbCB7IGNvbW1hbmRfb25lbGluZShbICdyZXYtcGFyc2UnLCAnLS12ZXJpZnknLCAkcmVmIF0sCisJICAgICAgICAgICAgICAgICAgICAgICB7IFNUREVSUiA9PiAwIH0pOyB9OworfQorCitzdWIgZ2V0X3RyZWVfZnJvbV90cmVlaXNoIHsKKwlteSAoJHRyZWVpc2gpID0gQF87CisJIyAkdHJlZWlzaCBjYW4gYmUgYSBzeW1ib2xpYyByZWYsIHRvbzoKKwlteSAkdHlwZSA9IGNvbW1hbmRfb25lbGluZShxdy9jYXQtZmlsZSAtdC8sICR0cmVlaXNoKTsKKwlteSAkZXhwZWN0ZWQ7CisJd2hpbGUgKCR0eXBlIGVxICd0YWcnKSB7CisJCSgkdHJlZWlzaCwgJHR5cGUpID0gY29tbWFuZChxdy9jYXQtZmlsZSB0YWcvLCAkdHJlZWlzaCk7CisJfQorCWlmICgkdHlwZSBlcSAnY29tbWl0JykgeworCQkkZXhwZWN0ZWQgPSAoZ3JlcCAvXnRyZWUgLywgY29tbWFuZChxdy9jYXQtZmlsZSBjb21taXQvLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHJlZWlzaCkpWzBdOworCQkoJGV4cGVjdGVkKSA9ICgkZXhwZWN0ZWQgPX4gL150cmVlICgkc2hhMSkkL28pOworCQlkaWUgIlVuYWJsZSB0byBnZXQgdHJlZSBmcm9tICR0cmVlaXNoXG4iIHVubGVzcyAkZXhwZWN0ZWQ7CisJfSBlbHNpZiAoJHR5cGUgZXEgJ3RyZWUnKSB7CisJCSRleHBlY3RlZCA9ICR0cmVlaXNoOworCX0gZWxzZSB7CisJCWRpZSAiJHRyZWVpc2ggaXMgYSAkdHlwZSwgZXhwZWN0ZWQgdHJlZSwgdGFnIG9yIGNvbW1pdFxuIjsKKwl9CisJcmV0dXJuICRleHBlY3RlZDsKK30KKworc3ViIGdldF9jb21taXRfZW50cnkgeworCW15ICgkdHJlZWlzaCkgPSBzaGlmdDsKKwlteSAlbG9nX2VudHJ5ID0gKCBsb2cgPT4gJycsIHRyZWUgPT4gZ2V0X3RyZWVfZnJvbV90cmVlaXNoKCR0cmVlaXNoKSApOworCW15ICRjb21taXRfZWRpdG1zZyA9ICIkRU5We0dJVF9ESVJ9L0NPTU1JVF9FRElUTVNHIjsKKwlteSAkY29tbWl0X21zZyA9ICIkRU5We0dJVF9ESVJ9L0NPTU1JVF9NU0ciOworCW9wZW4gbXkgJGxvZ19maCwgJz4nLCAkY29tbWl0X2VkaXRtc2cgb3IgY3JvYWsgJCE7CisKKwlteSAkdHlwZSA9IGNvbW1hbmRfb25lbGluZShxdy9jYXQtZmlsZSAtdC8sICR0cmVlaXNoKTsKKwlpZiAoJHR5cGUgZXEgJ2NvbW1pdCcgfHwgJHR5cGUgZXEgJ3RhZycpIHsKKwkJbXkgKCRtc2dfZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZSgnY2F0LWZpbGUnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlLCAkdHJlZWlzaCk7CisJCW15ICRpbl9tc2cgPSAwOworCQlteSAkYXV0aG9yOworCQlteSAkc2F3X2Zyb20gPSAwOworCQlteSAkbXNnYnVmID0gIiI7CisJCXdoaWxlICg8JG1zZ19maD4pIHsKKwkJCWlmICghJGluX21zZykgeworCQkJCSRpbl9tc2cgPSAxIGlmICgvXlxzKiQvKTsKKwkJCQkkYXV0aG9yID0gJDEgaWYgKC9eYXV0aG9yICguKj4pLyk7CisJCQl9IGVsc2lmICgvXmdpdC1zdm4taWQ6IC8pIHsKKwkJCQkjIHNraXAgdGhpcyBmb3Igbm93LCB3ZSByZWdlbmVyYXRlIHRoZQorCQkJCSMgY29ycmVjdCBvbmUgb24gcmUtZmV0Y2ggYW55d2F5cworCQkJCSMgVE9ETzogc2V0ICo6bWVyZ2UgcHJvcGVydGllcyBvciBsaWtlLi4uCisJCQl9IGVsc2UgeworCQkJCWlmICgvXkZyb206LyB8fCAvXlNpZ25lZC1vZmYtYnk6LykgeworCQkJCQkkc2F3X2Zyb20gPSAxOworCQkJCX0KKwkJCQkkbXNnYnVmIC49ICRfOworCQkJfQorCQl9CisJCSRtc2didWYgPX4gcy9ccyskLy9zOworCQlpZiAoJEdpdDo6U1ZOOjpfYWRkX2F1dGhvcl9mcm9tICYmIGRlZmluZWQoJGF1dGhvcikKKwkJICAgICYmICEkc2F3X2Zyb20pIHsKKwkJCSRtc2didWYgLj0gIlxuXG5Gcm9tOiAkYXV0aG9yIjsKKwkJfQorCQlwcmludCAkbG9nX2ZoICRtc2didWYgb3IgY3JvYWsgJCE7CisJCWNvbW1hbmRfY2xvc2VfcGlwZSgkbXNnX2ZoLCAkY3R4KTsKKwl9CisJY2xvc2UgJGxvZ19maCBvciBjcm9hayAkITsKKworCWlmICgkX2VkaXQgfHwgKCR0eXBlIGVxICd0cmVlJykpIHsKKwkJY2hvbXAobXkgJGVkaXRvciA9IGNvbW1hbmRfb25lbGluZShxdyh2YXIgR0lUX0VESVRPUikpKTsKKwkJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgJGNvbW1pdF9lZGl0bXNnKTsKKwl9CisJcmVuYW1lICRjb21taXRfZWRpdG1zZywgJGNvbW1pdF9tc2cgb3IgY3JvYWsgJCE7CisJeworCQlyZXF1aXJlIEVuY29kZTsKKwkJIyBTVk4gcmVxdWlyZXMgbWVzc2FnZXMgdG8gYmUgVVRGLTggd2hlbiBlbnRlcmluZyB0aGUgcmVwbworCQlsb2NhbCAkLzsKKwkJb3BlbiAkbG9nX2ZoLCAnPCcsICRjb21taXRfbXNnIG9yIGNyb2FrICQhOworCQliaW5tb2RlICRsb2dfZmg7CisJCWNob21wKCRsb2dfZW50cnl7bG9nfSA9IDwkbG9nX2ZoPik7CisKKwkJbXkgJGVuYyA9IEdpdDo6Y29uZmlnKCdpMThuLmNvbW1pdGVuY29kaW5nJykgfHwgJ1VURi04JzsKKwkJbXkgJG1zZyA9ICRsb2dfZW50cnl7bG9nfTsKKworCQlldmFsIHsgJG1zZyA9IEVuY29kZTo6ZGVjb2RlKCRlbmMsICRtc2csIDEpIH07CisJCWlmICgkQCkgeworCQkJZGllICJDb3VsZCBub3QgZGVjb2RlIGFzICRlbmM6XG4iLCAkbXNnLAorCQkJICAgICJcblBlcmhhcHMgeW91IG5lZWQgdG8gc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmdcbiI7CisJCX0KKworCQlldmFsIHsgJG1zZyA9IEVuY29kZTo6ZW5jb2RlKCdVVEYtOCcsICRtc2csIDEpIH07CisJCWRpZSAiQ291bGQgbm90IGVuY29kZSBhcyBVVEYtODpcbiRtc2dcbiIgaWYgJEA7CisKKwkJJGxvZ19lbnRyeXtsb2d9ID0gJG1zZzsKKworCQljbG9zZSAkbG9nX2ZoIG9yIGNyb2FrICQhOworCX0KKwl1bmxpbmsgJGNvbW1pdF9tc2c7CisJXCVsb2dfZW50cnk7Cit9CisKK3N1YiBzX3RvX2ZpbGUgeworCW15ICgkc3RyLCAkZmlsZSwgJG1vZGUpID0gQF87CisJb3BlbiBteSAkZmQsJz4nLCRmaWxlIG9yIGNyb2FrICQhOworCXByaW50ICRmZCAkc3RyLCJcbiIgb3IgY3JvYWsgJCE7CisJY2xvc2UgJGZkIG9yIGNyb2FrICQhOworCWNobW9kICgkbW9kZSAmfiB1bWFzaywgJGZpbGUpIGlmIChkZWZpbmVkICRtb2RlKTsKK30KKworc3ViIGZpbGVfdG9fcyB7CisJbXkgJGZpbGUgPSBzaGlmdDsKKwlvcGVuIG15ICRmZCwnPCcsJGZpbGUgb3IgY3JvYWsgIiQhOiBmaWxlOiAkZmlsZVxuIjsKKwlsb2NhbCAkLzsKKwlteSAkcmV0ID0gPCRmZD47CisJY2xvc2UgJGZkIG9yIGNyb2FrICQhOworCSRyZXQgPX4gcy9ccyokLy9zOworCXJldHVybiAkcmV0OworfQorCisjICc8c3ZuIHVzZXJuYW1lPiA9IHJlYWwtbmFtZSA8ZW1haWwgYWRkcmVzcz4nIG1hcHBpbmcgYmFzZWQgb24gZ2l0LXN2bmltcG9ydDoKK3N1YiBsb2FkX2F1dGhvcnMgeworCW9wZW4gbXkgJGF1dGhvcnMsICc8JywgJF9hdXRob3JzIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkX2F1dGhvcnMgJCFcbiI7CisJbXkgJGxvZyA9ICRjbWQgZXEgJ2xvZyc7CisJd2hpbGUgKDwkYXV0aG9ycz4pIHsKKwkJY2hvbXA7CisJCW5leHQgdW5sZXNzIC9eKC4rP3xcKG5vIGF1dGhvclwpKVxzKj1ccyooLis/KVxzKjwoLispPlxzKiQvOworCQlteSAoJHVzZXIsICRuYW1lLCAkZW1haWwpID0gKCQxLCAkMiwgJDMpOworCQlpZiAoJGxvZykgeworCQkJJEdpdDo6U1ZOOjpMb2c6OnJ1c2Vyc3siJG5hbWUgPCRlbWFpbD4ifSA9ICR1c2VyOworCQl9IGVsc2UgeworCQkJJHVzZXJzeyR1c2VyfSA9IFskbmFtZSwgJGVtYWlsXTsKKwkJfQorCX0KKwljbG9zZSAkYXV0aG9ycyBvciBjcm9hayAkITsKK30KKworIyBjb252ZXJ0IEdldE9wdDo6TG9uZyBzcGVjcyBmb3IgdXNlIGJ5IGdpdC1jb25maWcKK3N1YiByZWFkX2dpdF9jb25maWcgeworCW15ICRvcHRzID0gc2hpZnQ7CisJbXkgQGNvbmZpZ19vbmx5OworCWZvcmVhY2ggbXkgJG8gKGtleXMgJSRvcHRzKSB7CisJCSMgaWYgd2UgaGF2ZSBtaXhlZENhc2UgYW5kIGEgbG9uZyBvcHRpb24tb25seSwgdGhlbgorCQkjIGl0J3MgYSBjb25maWctb25seSB2YXJpYWJsZSB0aGF0IHdlIGRvbid0IG5lZWQgZm9yCisJCSMgdGhlIGNvbW1hbmQtbGluZS4KKwkJcHVzaCBAY29uZmlnX29ubHksICRvIGlmICgkbyA9fiAvW0EtWl0vICYmICRvID1+IC9eW2Etel0rJC9pKTsKKwkJbXkgJHYgPSAkb3B0cy0+eyRvfTsKKwkJbXkgKCRrZXkpID0gKCRvID1+IC9eKFthLXpBLVpcLV0rKS8pOworCQkka2V5ID1+IHMvLS8vZzsKKwkJbXkgJGFyZyA9ICdnaXQgY29uZmlnJzsKKwkJJGFyZyAuPSAnIC0taW50JyBpZiAoJG8gPX4gL1s6PV1pJC8pOworCQkkYXJnIC49ICcgLS1ib29sJyBpZiAoJG8gIX4gL1s6PV1bc2ZpXSQvKTsKKwkJaWYgKHJlZiAkdiBlcSAnQVJSQVknKSB7CisJCQljaG9tcChteSBAdG1wID0gYCRhcmcgLS1nZXQtYWxsIHN2bi4ka2V5YCk7CisJCQlAJHYgPSBAdG1wIGlmIEB0bXA7CisJCX0gZWxzZSB7CisJCQljaG9tcChteSAkdG1wID0gYCRhcmcgLS1nZXQgc3ZuLiRrZXlgKTsKKwkJCWlmICgkdG1wICYmICEoJGFyZyA9fiAvIC0tYm9vbC8gJiYgJHRtcCBlcSAnZmFsc2UnKSkgeworCQkJCSQkdiA9ICR0bXA7CisJCQl9CisJCX0KKwl9CisJZGVsZXRlIEAkb3B0c3tAY29uZmlnX29ubHl9IGlmIEBjb25maWdfb25seTsKK30KKworc3ViIGV4dHJhY3RfbWV0YWRhdGEgeworCW15ICRpZCA9IHNoaWZ0IG9yIHJldHVybiAodW5kZWYsIHVuZGVmLCB1bmRlZik7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkKSA9ICgkaWQgPX4gL15ccypnaXQtc3ZuLWlkOlxzKyguKilcQChcZCspCisJCQkJCQkJXHMoW2EtZlxkXC1dKykkL2l4KTsKKwlpZiAoIWRlZmluZWQgJHJldiB8fCAhJHV1aWQgfHwgISR1cmwpIHsKKwkJIyBzb21lIG9mIHRoZSBvcmlnaW5hbCByZXBvc2l0b3JpZXMgSSBtYWRlIGhhZAorCQkjIGlkZW50aWZpZXJzIGxpa2UgdGhpczoKKwkJKCRyZXYsICR1dWlkKSA9ICgkaWQgPX4vXlxzKmdpdC1zdm4taWQ6XHMoXGQrKVxAKFthLWZcZFwtXSspL2kpOworCX0KKwlyZXR1cm4gKCR1cmwsICRyZXYsICR1dWlkKTsKK30KKworc3ViIGNtdF9tZXRhZGF0YSB7CisJcmV0dXJuIGV4dHJhY3RfbWV0YWRhdGEoKGdyZXAoL15naXQtc3ZuLWlkOiAvLAorCQljb21tYW5kKHF3L2NhdC1maWxlIGNvbW1pdC8sIHNoaWZ0KSkpWy0xXSk7Cit9CisKK3N1YiBjbXRfc2hhMnJldl9iYXRjaCB7CisJbXkgJXMycjsKKwlteSAoJHBpZCwgJGluLCAkb3V0LCAkY3R4KSA9IGNvbW1hbmRfYmlkaV9waXBlKHF3L2NhdC1maWxlIC0tYmF0Y2gvKTsKKwlteSAkbGlzdCA9IHNoaWZ0OworCisJZm9yZWFjaCBteSAkc2hhIChAeyRsaXN0fSkgeworCQlteSAkZmlyc3QgPSAxOworCQlteSAkc2l6ZSA9IDA7CisJCXByaW50ICRvdXQgJHNoYSwgIlxuIjsKKworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGluPikgeworCQkJaWYgKCRmaXJzdCAmJiAkbGluZSA9fiAvXltbOnhkaWdpdDpdXXs0MH1cc21pc3NpbmckLykgeworCQkJCWxhc3Q7CisJCQl9IGVsc2lmICgkZmlyc3QgJiYKKwkJCSAgICAgICAkbGluZSA9fiAvXltbOnhkaWdpdDpdXXs0MH1cc2NvbW1pdFxzKFxkKykkLykgeworCQkJCSRmaXJzdCA9IDA7CisJCQkJJHNpemUgPSAkMTsKKwkJCQluZXh0OworCQkJfSBlbHNpZiAoJGxpbmUgPX4gL14oZ2l0LXN2bi1pZDogKS8pIHsKKwkJCQlteSAodW5kZWYsICRyZXYsIHVuZGVmKSA9CisJCQkJICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RfbWV0YWRhdGEoJGxpbmUpOworCQkJCSRzMnJ7JHNoYX0gPSAkcmV2OworCQkJfQorCisJCQkkc2l6ZSAtPSBsZW5ndGgoJGxpbmUpOworCQkJbGFzdCBpZiAoJHNpemUgPT0gMCk7CisJCX0KKwl9CisKKwljb21tYW5kX2Nsb3NlX2JpZGlfcGlwZSgkcGlkLCAkaW4sICRvdXQsICRjdHgpOworCisJcmV0dXJuIFwlczJyOworfQorCitzdWIgd29ya2luZ19oZWFkX2luZm8geworCW15ICgkaGVhZCwgJHJlZnMpID0gQF87CisJbXkgQGFyZ3MgPSBxdy9yZXYtbGlzdCAtLWZpcnN0LXBhcmVudCAtLXByZXR0eT1tZWRpdW0vOworCW15ICgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShAYXJncywgJGhlYWQpOworCW15ICRoYXNoOworCW15ICVtYXg7CisJd2hpbGUgKDwkZmg+KSB7CisJCWlmICggbXteY29tbWl0ICgkOjpzaGExKSR9ICkgeworCQkJdW5zaGlmdCBAJHJlZnMsICRoYXNoIGlmICRoYXNoIGFuZCAkcmVmczsKKwkJCSRoYXNoID0gJDE7CisJCQluZXh0OworCQl9CisJCW5leHQgdW5sZXNzIHN7XlxzKihnaXQtc3ZuLWlkOil9eyQxfTsKKwkJbXkgKCR1cmwsICRyZXYsICR1dWlkKSA9IGV4dHJhY3RfbWV0YWRhdGEoJF8pOworCQlpZiAoZGVmaW5lZCAkdXJsICYmIGRlZmluZWQgJHJldikgeworCQkJbmV4dCBpZiAkbWF4eyR1cmx9IGFuZCAkbWF4eyR1cmx9IDwgJHJldjsKKwkJCWlmIChteSAkZ3MgPSBHaXQ6OlNWTi0+ZmluZF9ieV91cmwoJHVybCkpIHsKKwkJCQlteSAkYyA9ICRncy0+cmV2X21hcF9nZXQoJHJldiwgJHV1aWQpOworCQkJCWlmICgkYyAmJiAkYyBlcSAkaGFzaCkgeworCQkJCQljbG9zZSAkZmg7ICMgYnJlYWsgdGhlIHBpcGUKKwkJCQkJcmV0dXJuICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKTsKKwkJCQl9IGVsc2UgeworCQkJCQkkbWF4eyR1cmx9IHx8PSAkZ3MtPnJldl9tYXBfbWF4OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKKwkodW5kZWYsIHVuZGVmLCB1bmRlZiwgdW5kZWYpOworfQorCitzdWIgcmVhZF9jb21taXRfcGFyZW50cyB7CisJbXkgKCRwYXJlbnRzLCAkYykgPSBAXzsKKwljaG9tcChteSAkcCA9IGNvbW1hbmRfb25lbGluZShxdy9yZXYtbGlzdCAtLXBhcmVudHMgLTEvLCAkYykpOworCSRwID1+IHMvXigkYylccyovLyBvciBkaWUgInJldi1saXN0IC0tcGFyZW50cyAtMSAkYyBmYWlsZWQhXG4iOworCUB7JHBhcmVudHMtPnskY319ID0gc3BsaXQoLyAvLCAkcCk7Cit9CisKK3N1YiBsaW5lYXJpemVfaGlzdG9yeSB7CisJbXkgKCRncywgJHJlZnMpID0gQF87CisJbXkgJXBhcmVudHM7CisJZm9yZWFjaCBteSAkYyAoQCRyZWZzKSB7CisJCXJlYWRfY29tbWl0X3BhcmVudHMoXCVwYXJlbnRzLCAkYyk7CisJfQorCisJbXkgQGxpbmVhcl9yZWZzOworCW15ICVza2lwID0gKCk7CisJbXkgJGxhc3Rfc3ZuX2NvbW1pdCA9ICRncy0+bGFzdF9jb21taXQ7CisJZm9yZWFjaCBteSAkYyAocmV2ZXJzZSBAJHJlZnMpIHsKKwkJbmV4dCBpZiAkYyBlcSAkbGFzdF9zdm5fY29tbWl0OworCQlsYXN0IGlmICRza2lweyRjfTsKKworCQl1bnNoaWZ0IEBsaW5lYXJfcmVmcywgJGM7CisJCSRza2lweyRjfSA9IDE7CisKKwkJIyB3ZSBvbmx5IHdhbnQgdGhlIGZpcnN0IHBhcmVudCB0byBkaWZmIGFnYWluc3QgZm9yIGxpbmVhcgorCQkjIGhpc3RvcnksIHdlIHNhdmUgdGhlIHJlc3QgdG8gaW5qZWN0IHdoZW4gd2UgZmluYWxpemUgdGhlCisJCSMgc3ZuIGNvbW1pdAorCQlteSAkZnBfYSA9IHZlcmlmeV9yZWYoIiRjfjEiKTsKKwkJbXkgJGZwX2IgPSBzaGlmdCBAeyRwYXJlbnRzeyRjfX0gaWYgJHBhcmVudHN7JGN9OworCQlpZiAoISRmcF9hIHx8ICEkZnBfYikgeworCQkJZGllICJDb21taXQgJGNcbiIsCisJCQkgICAgImhhcyBubyBwYXJlbnQgY29tbWl0LCBhbmQgdGhlcmVmb3JlICIsCisJCQkgICAgIm5vdGhpbmcgdG8gZGlmZiBhZ2FpbnN0LlxuIiwKKwkJCSAgICAiWW91IHNob3VsZCBiZSB3b3JraW5nIGZyb20gYSByZXBvc2l0b3J5ICIsCisJCQkgICAgIm9yaWdpbmFsbHkgY3JlYXRlZCBieSBnaXQtc3ZuXG4iOworCQl9CisJCWlmICgkZnBfYSBuZSAkZnBfYikgeworCQkJZGllICIkY34xID0gJGZwX2EsIGhvd2V2ZXIgcGFyc2luZyBjb21taXQgJGMgIiwKKwkJCSAgICAicmV2ZWFsZWQgdGhhdDpcbiRjfjEgPSAkZnBfYlxuQlVHIVxuIjsKKwkJfQorCisJCWZvcmVhY2ggbXkgJHAgKEB7JHBhcmVudHN7JGN9fSkgeworCQkJJHNraXB7JHB9ID0gMTsKKwkJfQorCX0KKwkoXEBsaW5lYXJfcmVmcywgXCVwYXJlbnRzKTsKK30KKworc3ViIGZpbmRfZmlsZV90eXBlX2FuZF9kaWZmX3N0YXR1cyB7CisJbXkgKCRwYXRoKSA9IEBfOworCXJldHVybiAoJ2RpcicsICcnKSBpZiAkcGF0aCBlcSAnJzsKKworCW15ICRkaWZmX291dHB1dCA9CisJICAgIGNvbW1hbmRfb25lbGluZShxdyhkaWZmIC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgLS0pLCAkcGF0aCkgfHwgIiI7CisJbXkgJGRpZmZfc3RhdHVzID0gKHNwbGl0KCcgJywgJGRpZmZfb3V0cHV0KSlbMF0gfHwgIiI7CisKKwlteSAkbHNfdHJlZSA9IGNvbW1hbmRfb25lbGluZShxdyhscy10cmVlIEhFQUQpLCAkcGF0aCkgfHwgIiI7CisKKwlyZXR1cm4gKHVuZGVmLCB1bmRlZikgaWYgISRkaWZmX3N0YXR1cyAmJiAhJGxzX3RyZWU7CisKKwlpZiAoJGRpZmZfc3RhdHVzIGVxICJBIikgeworCQlyZXR1cm4gKCJsaW5rIiwgJGRpZmZfc3RhdHVzKSBpZiAtbCAkcGF0aDsKKwkJcmV0dXJuICgiZGlyIiwgJGRpZmZfc3RhdHVzKSBpZiAtZCAkcGF0aDsKKwkJcmV0dXJuICgiZmlsZSIsICRkaWZmX3N0YXR1cyk7CisJfQorCisJbXkgJG1vZGUgPSAoc3BsaXQoJyAnLCAkbHNfdHJlZSkpWzBdIHx8ICIiOworCisJcmV0dXJuICgibGluayIsICRkaWZmX3N0YXR1cykgaWYgJG1vZGUgZXEgIjEyMDAwMCI7CisJcmV0dXJuICgiZGlyIiwgJGRpZmZfc3RhdHVzKSBpZiAkbW9kZSBlcSAiMDQwMDAwIjsKKwlyZXR1cm4gKCJmaWxlIiwgJGRpZmZfc3RhdHVzKTsKK30KKworc3ViIG1kNXN1bSB7CisJbXkgJGFyZyA9IHNoaWZ0OworCW15ICRyZWYgPSByZWYgJGFyZzsKKwlteSAkbWQ1ID0gRGlnZXN0OjpNRDUtPm5ldygpOworICAgICAgICBpZiAoJHJlZiBlcSAnR0xPQicgfHwgJHJlZiBlcSAnSU86OkZpbGUnIHx8ICRyZWYgZXEgJ0ZpbGU6OlRlbXAnKSB7CisJCSRtZDUtPmFkZGZpbGUoJGFyZykgb3IgY3JvYWsgJCE7CisJfSBlbHNpZiAoJHJlZiBlcSAnU0NBTEFSJykgeworCQkkbWQ1LT5hZGQoJCRhcmcpIG9yIGNyb2FrICQhOworCX0gZWxzaWYgKCEkcmVmKSB7CisJCSRtZDUtPmFkZCgkYXJnKSBvciBjcm9hayAkITsKKwl9IGVsc2UgeworCQlmYXRhbCAiQ2FuJ3QgcHJvdmlkZSBNRDUgaGFzaCBmb3IgdW5rbm93biByZWYgdHlwZTogJyIsICRyZWYsICInIjsKKwl9CisJcmV0dXJuICRtZDUtPmhleGRpZ2VzdCgpOworfQorCitzdWIgZ2NfZGlyZWN0b3J5IHsKKwlpZiAoY2FuX2NvbXByZXNzKCkgJiYgLWYgJF8gJiYgYmFzZW5hbWUoJF8pIGVxICJ1bmhhbmRsZWQubG9nIikgeworCQlteSAkb3V0X2ZpbGVuYW1lID0gJF8gLiAiLmd6IjsKKwkJb3BlbiBteSAkaW5fZmgsICI8IiwgJF8gb3IgZGllICJVbmFibGUgdG8gb3BlbiAkXzogJCFcbiI7CisJCWJpbm1vZGUgJGluX2ZoOworCQlteSAkZ3ogPSBDb21wcmVzczo6WmxpYjo6Z3pvcGVuKCRvdXRfZmlsZW5hbWUsICJhYiIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gb3BlbiAkb3V0X2ZpbGVuYW1lOiAkIVxuIjsKKworCQlteSAkcmVzOworCQl3aGlsZSAoJHJlcyA9IHN5c3JlYWQoJGluX2ZoLCBteSAkc3RyLCAxMDI0KSkgeworCQkJJGd6LT5nendyaXRlKCRzdHIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gd3JpdGU6ICIuJGd6LT5nemVycm9yKCkuIiFcbiI7CisJCX0KKwkJdW5saW5rICRfIG9yIGRpZSAidW5saW5rICRGaWxlOjpGaW5kOjpuYW1lOiAkIVxuIjsKKwl9IGVsc2lmICgtZiAkXyAmJiBiYXNlbmFtZSgkXykgZXEgImluZGV4IikgeworCQl1bmxpbmsgJF8gb3IgZGllICJ1bmxpbmsgJF86ICQhXG4iOworCX0KK30KKworX19FTkRfXworCitEYXRhIHN0cnVjdHVyZXM6CisKKworJHJlbW90ZXMgPSB7ICMgcmV0dXJuZWQgYnkgcmVhZF9hbGxfcmVtb3RlcygpCisJJ3N2bicgPT4geworCQkjIHN2bi1yZW1vdGUuc3ZuLnVybD1odHRwczovL3N2bi5tdXNpY3BkLm9yZworCQl1cmwgPT4gJ2h0dHBzOi8vc3ZuLm11c2ljcGQub3JnJywKKwkJIyBzdm4tcmVtb3RlLnN2bi5mZXRjaD1tcGQvdHJ1bms6dHJ1bmsKKwkJZmV0Y2ggPT4geworCQkJJ21wZC90cnVuaycgPT4gJ3RydW5rJywKKwkJfSwKKwkJIyBzdm4tcmVtb3RlLnN2bi50YWdzPW1wZC90YWdzLyo6dGFncy8qCisJCXRhZ3MgPT4geworCQkJcGF0aCA9PiB7CisJCQkJbGVmdCA9PiAnbXBkL3RhZ3MnLAorCQkJCXJpZ2h0ID0+ICcnLAorCQkJCXJlZ2V4ID0+IHFyIW1wZC90YWdzLyhbXi9dKykkISwKKwkJCQlnbG9iID0+ICd0YWdzLyonLAorCQkJfSwKKwkJCXJlZiA9PiB7CisJCQkJbGVmdCA9PiAndGFncycsCisJCQkJcmlnaHQgPT4gJycsCisJCQkJcmVnZXggPT4gcXIhdGFncy8oW14vXSspJCEsCisJCQkJZ2xvYiA9PiAndGFncy8qJywKKwkJCX0sCisJCX0KKwl9Cit9OworCiskbG9nX2VudHJ5IGhhc2hyZWYgYXMgcmV0dXJuZWQgYnkgbGlic3ZuX2xvZ19lbnRyeSgpCit7CisJbG9nID0+ICd3aGl0ZXNwYWNlLWZvcm1hdHRlZCBsb2cgZW50cnkKKycsCQkJCQkJIyB0cmFpbGluZyBuZXdsaW5lIGlzIHByZXNlcnZlZAorCXJldmlzaW9uID0+ICc4JywJCQkjIGludGVnZXIKKwlkYXRlID0+ICcyMDA0LTAyLTI0VDE3OjAxOjQ0LjEwODM0NVonLAkjIGNvbW1pdCBkYXRlCisJYXV0aG9yID0+ICdjb21taXR0ZXIgbmFtZScKK307CisKKworIyB0aGlzIGlzIGdlbmVyYXRlZCBieSBnZW5lcmF0ZV9kaWZmKCk7CitAbW9kcyA9IGFycmF5IG9mIGRpZmYtaW5kZXggbGluZSBoYXNoZXMsIGVhY2ggZWxlbWVudCByZXByZXNlbnRzIG9uZSBsaW5lCisJb2YgZGlmZi1pbmRleCBvdXRwdXQKKworZGlmZi1pbmRleCBsaW5lICgkbSBoYXNoKQoreworCW1vZGVfYSA9PiBmaXJzdCBjb2x1bW4gb2YgZGlmZi1pbmRleCBvdXRwdXQsIG5vIGxlYWRpbmcgJzonLAorCW1vZGVfYiA9PiBzZWNvbmQgY29sdW1uIG9mIGRpZmYtaW5kZXggb3V0cHV0LAorCXNoYTFfYiA9PiBzaGExc3VtIG9mIHRoZSBmaW5hbCBibG9iLAorCWNoZyA9PiBjaGFuZ2UgdHlwZSBbTUNSQURUXSwKKwlmaWxlX2EgPT4gb3JpZ2luYWwgZmlsZSBuYW1lIG9mIGEgZmlsZSAoaWZmIGNoZyBpcyAnQycgb3IgJ1InKQorCWZpbGVfYiA9PiBuZXcvY3VycmVudCBmaWxlIG5hbWUgb2YgYSBmaWxlIChhbnkgY2hnKQorfQorOworCisjIHJldHZhbCBvZiByZWFkX3VybF9wYXRoc3ssX2FsbH0oKTsKKyRsX21hcCA9IHsKKwkjIHJlcG9zaXRvcnkgcm9vdCB1cmwKKwknaHR0cHM6Ly9zdm4ubXVzaWNwZC5vcmcnID0+IHsKKwkJIyByZXBvc2l0b3J5IHBhdGggCQkjIEdJVF9TVk5fSUQKKwkJJ21wZC90cnVuaycJCT0+CSd0cnVuaycsCisJCSdtcGQvdGFncy8wLjExLjUnCT0+CSd0YWdzLzAuMTEuNScsCisJfSwKK30KKworTm90ZXM6CisJSSBkb24ndCB0cnVzdCB0aGUgZWFjaCgpIGZ1bmN0aW9uIG9uIHVubGVzcyBJIGNyZWF0ZWQgJWhhc2ggbXlzZWxmCisJYmVjYXVzZSB0aGUgaW50ZXJuYWwgaXRlcmF0b3IgbWF5IG5vdCBoYXZlIHN0YXJ0ZWQgYXQgYmFzZS4KZGlmZiAtLWdpdCBhL2dpdC13ZWItLWJyb3dzZS5zaCBiL2dpdC13ZWItLWJyb3dzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZTgyNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXdlYi0tYnJvd3NlLnNoCkBAIC0wLDAgKzEsMTkxIEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBwcm9ncmFtIGxhdW5jaCBhIHdlYiBicm93c2VyIG9uIHRoZSBodG1sIHBhZ2UKKyMgZGVzY3JpYmluZyBhIGdpdCBjb21tYW5kLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hyaXN0aWFuIENvdWRlcgorIyBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlb2RvcmUgWS4gVHMnbworIworIyBUaGlzIGZpbGUgaXMgaGVhdmlseSBzdG9sZW4gZnJvbSBnaXQtbWVyZ2V0b29sLnNoLCBieQorIyBUaGVvZG9yZSBZLiBUcydvICh0aGFua3MpIHRoYXQgaXM6CisjCisjIENvcHlyaWdodCAoYykgMjAwNiBUaGVvZG9yZSBZLiBUcydvCisjCisjIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KKyMgYXQgdGhlIGRpc2NyZXRpb24gb2YgSnVuaW8gQyBIYW1hbm8gb3IgYW55IG90aGVyIG9mZmljaWFsCisjIGdpdCBtYWludGFpbmVyLgorIworCitVU0FHRT0nWy0tYnJvd3Nlcj1icm93c2VyfC0tdG9vbD1icm93c2VyXSBbLS1jb25maWc9Y29uZi52YXJdIHVybC9maWxlIC4uLicKKworIyBUaGlzIG11c3QgYmUgY2FwYWJsZSBvZiBydW5uaW5nIG91dHNpZGUgb2YgZ2l0IGRpcmVjdG9yeSwgc28KKyMgdGhlIHZhbmlsbGEgZ2l0LXNoLXNldHVwIHNob3VsZCBub3QgYmUgdXNlZC4KK05PTkdJVF9PSz1ZZXMKKy4gZ2l0LXNoLXNldHVwCisKK3ZhbGlkX2N1c3RvbV90b29sKCkKK3sKKwlicm93c2VyX2NtZD0iJChnaXQgY29uZmlnICJicm93c2VyLiQxLmNtZCIpIgorCXRlc3QgLW4gIiRicm93c2VyX2NtZCIKK30KKwordmFsaWRfdG9vbCgpIHsKKwljYXNlICIkMSIgaW4KKwlmaXJlZm94IHwgaWNld2Vhc2VsIHwgc2VhbW9ua2V5IHwgaWNlYXBlIHwgXAorCWNocm9tZSB8IGdvb2dsZS1jaHJvbWUgfCBjaHJvbWl1bSB8IGNocm9taXVtLWJyb3dzZXIgfFwKKwlrb25xdWVyb3IgfCBvcGVyYSB8IHczbSB8IGVsaW5rcyB8IGxpbmtzIHwgbHlueCB8IGRpbGxvIHwgb3BlbiB8IHN0YXJ0KQorCQk7OyAjIGhhcHB5CisJKikKKwkJdmFsaWRfY3VzdG9tX3Rvb2wgIiQxIiB8fCByZXR1cm4gMQorCQk7OworCWVzYWMKK30KKworaW5pdF9icm93c2VyX3BhdGgoKSB7CisJYnJvd3Nlcl9wYXRoPSQoZ2l0IGNvbmZpZyAiYnJvd3Nlci4kMS5wYXRoIikKKwlpZiB0ZXN0IC16ICIkYnJvd3Nlcl9wYXRoIiAmJgorCSAgIHRlc3QgIiQxIiA9IGNocm9taXVtICYmCisJICAgdHlwZSBjaHJvbWl1bS1icm93c2VyID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJYnJvd3Nlcl9wYXRoPWNocm9taXVtLWJyb3dzZXIKKwlmaQorCTogJHticm93c2VyX3BhdGg6PSIkMSJ9Cit9CisKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktYnwtLWJyb3dzZXIqfC10fC0tdG9vbCopCisJCWNhc2UgIiQjLCQxIiBpbgorCQkqLCo9KikKKwkJCWJyb3dzZXI9YGV4cHIgInokMSIgOiAnei1bXj1dKj1cKC4qXCknYAorCQkJOzsKKwkJMSwqKQorCQkJdXNhZ2UgOzsKKwkJKikKKwkJCWJyb3dzZXI9IiQyIgorCQkJc2hpZnQgOzsKKwkJZXNhYworCQk7OworCS1jfC0tY29uZmlnKikKKwkJY2FzZSAiJCMsJDEiIGluCisJCSosKj0qKQorCQkJY29uZj1gZXhwciAieiQxIiA6ICd6LVtePV0qPVwoLipcKSdgCisJCQk7OworCQkxLCopCisJCQl1c2FnZSA7OworCQkqKQorCQkJY29uZj0iJDIiCisJCQlzaGlmdCA7OworCQllc2FjCisJCTs7CisJLS0pCisJCWJyZWFrCisJCTs7CisJLSopCisJCXVzYWdlCisJCTs7CisJKikKKwkJYnJlYWsKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKwordGVzdCAkIyA9IDAgJiYgdXNhZ2UKKworaWYgdGVzdCAteiAiJGJyb3dzZXIiCit0aGVuCisJZm9yIG9wdCBpbiAiJGNvbmYiICJ3ZWIuYnJvd3NlciIKKwlkbworCQl0ZXN0IC16ICIkb3B0IiAmJiBjb250aW51ZQorCQlicm93c2VyPSJgZ2l0IGNvbmZpZyAkb3B0YCIKKwkJdGVzdCAteiAiJGJyb3dzZXIiIHx8IGJyZWFrCisJZG9uZQorCWlmIHRlc3QgLW4gIiRicm93c2VyIiAmJiAhIHZhbGlkX3Rvb2wgIiRicm93c2VyIjsgdGhlbgorCQllY2hvID4mMiAiZ2l0IGNvbmZpZyBvcHRpb24gJG9wdCBzZXQgdG8gdW5rbm93biBicm93c2VyOiAkYnJvd3NlciIKKwkJZWNobyA+JjIgIlJlc2V0dGluZyB0byBkZWZhdWx0Li4uIgorCQl1bnNldCBicm93c2VyCisJZmkKK2ZpCisKK2lmIHRlc3QgLXogIiRicm93c2VyIiA7IHRoZW4KKwlpZiB0ZXN0IC1uICIkRElTUExBWSI7IHRoZW4KKwkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJmaXJlZm94IGljZXdlYXNlbCBnb29nbGUtY2hyb21lIGNocm9tZSBjaHJvbWl1bSBjaHJvbWl1bS1icm93c2VyIGtvbnF1ZXJvciBvcGVyYSBzZWFtb25rZXkgaWNlYXBlIHczbSBlbGlua3MgbGlua3MgbHlueCBkaWxsbyIKKwkJaWYgdGVzdCAiJEtERV9GVUxMX1NFU1NJT04iID0gInRydWUiOyB0aGVuCisJCQlicm93c2VyX2NhbmRpZGF0ZXM9ImtvbnF1ZXJvciAkYnJvd3Nlcl9jYW5kaWRhdGVzIgorCQlmaQorCWVsc2UKKwkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJ3M20gZWxpbmtzIGxpbmtzIGx5bngiCisJZmkKKwkjIFNFQ1VSSVRZU0VTU0lPTklEIGluZGljYXRlcyBhbiBPUyBYIEdVSSBsb2dpbiBzZXNzaW9uCisJaWYgdGVzdCAtbiAiJFNFQ1VSSVRZU0VTU0lPTklEIiBcCisJCS1vICIkVEVSTV9QUk9HUkFNIiA9ICJBcHBsZV9UZXJtaW5hbCIgOyB0aGVuCisJCWJyb3dzZXJfY2FuZGlkYXRlcz0ib3BlbiAkYnJvd3Nlcl9jYW5kaWRhdGVzIgorCWZpCisJIyAvYmluL3N0YXJ0IGluZGljYXRlcyBNaW5HVworCWlmIHRlc3QgLXggL2Jpbi9zdGFydDsgdGhlbgorCQlicm93c2VyX2NhbmRpZGF0ZXM9InN0YXJ0ICRicm93c2VyX2NhbmRpZGF0ZXMiCisJZmkKKworCWZvciBpIGluICRicm93c2VyX2NhbmRpZGF0ZXM7IGRvCisJCWluaXRfYnJvd3Nlcl9wYXRoICRpCisJCWlmIHR5cGUgIiRicm93c2VyX3BhdGgiID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJCWJyb3dzZXI9JGkKKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCXRlc3QgLXogIiRicm93c2VyIiAmJiBkaWUgIk5vIGtub3duIGJyb3dzZXIgYXZhaWxhYmxlLiIKK2Vsc2UKKwl2YWxpZF90b29sICIkYnJvd3NlciIgfHwgZGllICJVbmtub3duIGJyb3dzZXIgJyRicm93c2VyJy4iCisKKwlpbml0X2Jyb3dzZXJfcGF0aCAiJGJyb3dzZXIiCisKKwlpZiB0ZXN0IC16ICIkYnJvd3Nlcl9jbWQiICYmICEgdHlwZSAiJGJyb3dzZXJfcGF0aCIgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorCQlkaWUgIlRoZSBicm93c2VyICRicm93c2VyIGlzIG5vdCBhdmFpbGFibGUgYXMgJyRicm93c2VyX3BhdGgnLiIKKwlmaQorZmkKKworY2FzZSAiJGJyb3dzZXIiIGluCitmaXJlZm94fGljZXdlYXNlbHxzZWFtb25rZXl8aWNlYXBlKQorCSMgQ2hlY2sgdmVyc2lvbiBiZWNhdXNlIGZpcmVmb3ggPCAyLjAgZG9lcyBub3Qgc3VwcG9ydCAiLW5ldy10YWIiLgorCXZlcnM9JChleHByICIkKCRicm93c2VyX3BhdGggLXZlcnNpb24pIiA6ICcuKiBcKFswLTldWzAtOV0qXClcLi4qJykKKwlORVdUQUI9Jy1uZXctdGFiJworCXRlc3QgIiR2ZXJzIiAtbHQgMiAmJiBORVdUQUI9JycKKwkiJGJyb3dzZXJfcGF0aCIgJE5FV1RBQiAiJEAiICYKKwk7OworZ29vZ2xlLWNocm9tZXxjaHJvbWV8Y2hyb21pdW18Y2hyb21pdW0tYnJvd3NlcikKKwkjIE5vIG5lZWQgdG8gc3BlY2lmeSBuZXdUYWIuIEl0J3MgZGVmYXVsdCBpbiBjaHJvbWl1bQorCSIkYnJvd3Nlcl9wYXRoIiAiJEAiICYKKwk7Owora29ucXVlcm9yKQorCWNhc2UgIiQoYmFzZW5hbWUgIiRicm93c2VyX3BhdGgiKSIgaW4KKwlrb25xdWVyb3IpCisJCSMgSXQncyBzaW1wbGVyIHRvIHVzZSBrZm1jbGllbnQgdG8gb3BlbiBhIG5ldyB0YWIgaW4ga29ucXVlcm9yLgorCQlicm93c2VyX3BhdGg9IiQoZWNobyAiJGJyb3dzZXJfcGF0aCIgfCBzZWQgLWUgJ3Mva29ucXVlcm9yJC9rZm1jbGllbnQvJykiCisJCXR5cGUgIiRicm93c2VyX3BhdGgiID4gL2Rldi9udWxsIDI+JjEgfHwgZGllICJObyAnJGJyb3dzZXJfcGF0aCcgZm91bmQuIgorCQkiJGJyb3dzZXJfcGF0aCIgbmV3VGFiICIkQCIgJgorCQk7OworCWtmbWNsaWVudCkKKwkJIiRicm93c2VyX3BhdGgiIG5ld1RhYiAiJEAiICYKKwkJOzsKKwkqKQorCQkiJGJyb3dzZXJfcGF0aCIgIiRAIiAmCisJCTs7CisJZXNhYworCTs7Cit3M218ZWxpbmtzfGxpbmtzfGx5bnh8b3BlbikKKwkiJGJyb3dzZXJfcGF0aCIgIiRAIgorCTs7CitzdGFydCkKKwlleGVjICIkYnJvd3Nlcl9wYXRoIiAnIndlYi1icm93c2UiJyAiJEAiCisJOzsKK29wZXJhfGRpbGxvKQorCSIkYnJvd3Nlcl9wYXRoIiAiJEAiICYKKwk7OworKikKKwlpZiB0ZXN0IC1uICIkYnJvd3Nlcl9jbWQiOyB0aGVuCisJCSggZXZhbCAiJGJyb3dzZXJfY21kIFwiXCRAXCIiICkKKwlmaQorCTs7Citlc2FjCmRpZmYgLS1naXQgYS9naXQuYyBiL2dpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODhiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9naXQuYwpAQCAtMCwwICsxLDYwOCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAiaGVscC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworY29uc3QgY2hhciBnaXRfdXNhZ2Vfc3RyaW5nW10gPQorCSJnaXQgWy0tdmVyc2lvbl0gWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisJIiAgICAgICAgICAgWy1wfC0tcGFnaW5hdGV8LS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS1iYXJlXVxuIgorCSIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorCSIgICAgICAgICAgIFstYyBuYW1lPXZhbHVlXSBbLS1oZWxwXVxuIgorCSIgICAgICAgICAgIDxjb21tYW5kPiBbPGFyZ3M+XSI7CisKK2NvbnN0IGNoYXIgZ2l0X21vcmVfaW5mb19zdHJpbmdbXSA9CisJTl8oIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuIik7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RhcnR1cF9pbmZvIGdpdF9zdGFydHVwX2luZm87CitzdGF0aWMgaW50IHVzZV9wYWdlciA9IC0xOworc3RydWN0IHBhZ2VyX2NvbmZpZyB7CisJY29uc3QgY2hhciAqY21kOworCWludCB3YW50OworCWNoYXIgKnZhbHVlOworfTsKKworc3RhdGljIGludCBwYWdlcl9jb21tYW5kX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwYWdlcl9jb25maWcgKmMgPSBkYXRhOworCWlmICghcHJlZml4Y21wKHZhciwgInBhZ2VyLiIpICYmICFzdHJjbXAodmFyICsgNiwgYy0+Y21kKSkgeworCQlpbnQgYiA9IGdpdF9jb25maWdfbWF5YmVfYm9vbCh2YXIsIHZhbHVlKTsKKwkJaWYgKGIgPj0gMCkKKwkJCWMtPndhbnQgPSBiOworCQllbHNlIHsKKwkJCWMtPndhbnQgPSAxOworCQkJYy0+dmFsdWUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogcmV0dXJucyAwIGZvciAibm8gcGFnZXIiLCAxIGZvciAidXNlIHBhZ2VyIiwgYW5kIC0xIGZvciAibm90IHNwZWNpZmllZCIgKi8KK2ludCBjaGVja19wYWdlcl9jb25maWcoY29uc3QgY2hhciAqY21kKQoreworCXN0cnVjdCBwYWdlcl9jb25maWcgYzsKKwljLmNtZCA9IGNtZDsKKwljLndhbnQgPSAtMTsKKwljLnZhbHVlID0gTlVMTDsKKwlnaXRfY29uZmlnKHBhZ2VyX2NvbW1hbmRfY29uZmlnLCAmYyk7CisJaWYgKGMudmFsdWUpCisJCXBhZ2VyX3Byb2dyYW0gPSBjLnZhbHVlOworCXJldHVybiBjLndhbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1pdF9wYWdlcl9jaG9pY2Uodm9pZCkgeworCXN3aXRjaCAodXNlX3BhZ2VyKSB7CisJY2FzZSAwOgorCQlzZXRlbnYoIkdJVF9QQUdFUiIsICJjYXQiLCAxKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzZXR1cF9wYWdlcigpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX29wdGlvbnMoY29uc3QgY2hhciAqKiphcmd2LCBpbnQgKmFyZ2MsIGludCAqZW52Y2hhbmdlZCkKK3sKKwljb25zdCBjaGFyICoqb3JpZ19hcmd2ID0gKmFyZ3Y7CisKKwl3aGlsZSAoKmFyZ2MgPiAwKSB7CisJCWNvbnN0IGNoYXIgKmNtZCA9ICgqYXJndilbMF07CisJCWlmIChjbWRbMF0gIT0gJy0nKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogRm9yIGxlZ2FjeSByZWFzb25zLCB0aGUgInZlcnNpb24iIGFuZCAiaGVscCIKKwkJICogY29tbWFuZHMgY2FuIGJlIHdyaXR0ZW4gd2l0aCAiLS0iIHByZXBlbmRlZAorCQkgKiB0byBtYWtlIHRoZW0gbG9vayBsaWtlIGZsYWdzLgorCQkgKi8KKwkJaWYgKCFzdHJjbXAoY21kLCAiLS1oZWxwIikgfHwgIXN0cmNtcChjbWQsICItLXZlcnNpb24iKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIENoZWNrIHJlbWFpbmluZyBmbGFncy4KKwkJICovCisJCWlmICghcHJlZml4Y21wKGNtZCwgIi0tZXhlYy1wYXRoIikpIHsKKwkJCWNtZCArPSAxMTsKKwkJCWlmICgqY21kID09ICc9JykKKwkJCQlnaXRfc2V0X2FyZ3ZfZXhlY19wYXRoKGNtZCArIDEpOworCQkJZWxzZSB7CisJCQkJcHV0cyhnaXRfZXhlY19wYXRoKCkpOworCQkJCWV4aXQoMCk7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWh0bWwtcGF0aCIpKSB7CisJCQlwdXRzKHN5c3RlbV9wYXRoKEdJVF9IVE1MX1BBVEgpKTsKKwkJCWV4aXQoMCk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLW1hbi1wYXRoIikpIHsKKwkJCXB1dHMoc3lzdGVtX3BhdGgoR0lUX01BTl9QQVRIKSk7CisJCQlleGl0KDApOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1pbmZvLXBhdGgiKSkgeworCQkJcHV0cyhzeXN0ZW1fcGF0aChHSVRfSU5GT19QQVRIKSk7CisJCQlleGl0KDApOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLXAiKSB8fCAhc3RyY21wKGNtZCwgIi0tcGFnaW5hdGUiKSkgeworCQkJdXNlX3BhZ2VyID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbm8tcGFnZXIiKSkgeworCQkJdXNlX3BhZ2VyID0gMDsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbm8tcmVwbGFjZS1vYmplY3RzIikpIHsKKwkJCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKKwkJCXNldGVudihOT19SRVBMQUNFX09CSkVDVFNfRU5WSVJPTk1FTlQsICIxIiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWdpdC1kaXIiKSkgeworCQkJaWYgKCphcmdjIDwgMikgeworCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXIuXG4iICk7CisJCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCQl9CisJCQlzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgKCphcmd2KVsxXSwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCQkoKmFyZ3YpKys7CisJCQkoKmFyZ2MpLS07CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChjbWQsICItLWdpdC1kaXI9IikpIHsKKwkJCXNldGVudihHSVRfRElSX0VOVklST05NRU5ULCBjbWQgKyAxMCwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLW5hbWVzcGFjZSIpKSB7CisJCQlpZiAoKmFyZ2MgPCAyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJObyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlLlxuIiApOworCQkJCXVzYWdlKGdpdF91c2FnZV9zdHJpbmcpOworCQkJfQorCQkJc2V0ZW52KEdJVF9OQU1FU1BBQ0VfRU5WSVJPTk1FTlQsICgqYXJndilbMV0sIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQkJKCphcmd2KSsrOworCQkJKCphcmdjKS0tOworCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoY21kLCAiLS1uYW1lc3BhY2U9IikpIHsKKwkJCXNldGVudihHSVRfTkFNRVNQQUNFX0VOVklST05NRU5ULCBjbWQgKyAxMiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLXdvcmstdHJlZSIpKSB7CisJCQlpZiAoKmFyZ2MgPCAyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJObyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlLlxuIiApOworCQkJCXVzYWdlKGdpdF91c2FnZV9zdHJpbmcpOworCQkJfQorCQkJc2V0ZW52KEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsICgqYXJndilbMV0sIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQkJKCphcmd2KSsrOworCQkJKCphcmdjKS0tOworCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoY21kLCAiLS13b3JrLXRyZWU9IikpIHsKKwkJCXNldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5ULCBjbWQgKyAxMiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWJhcmUiKSkgeworCQkJc3RhdGljIGNoYXIgZ2l0X2RpcltQQVRIX01BWCsxXTsKKwkJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSAxOworCQkJc2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQsIGdldGN3ZChnaXRfZGlyLCBzaXplb2YoZ2l0X2RpcikpLCAwKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi1jIikpIHsKKwkJCWlmICgqYXJnYyA8IDIpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIiApOworCQkJCXVzYWdlKGdpdF91c2FnZV9zdHJpbmcpOworCQkJfQorCQkJZ2l0X2NvbmZpZ19wdXNoX3BhcmFtZXRlcigoKmFyZ3YpWzFdKTsKKwkJCSgqYXJndikrKzsKKwkJCSgqYXJnYyktLTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb246ICVzXG4iLCBjbWQpOworCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCX0KKworCQkoKmFyZ3YpKys7CisJCSgqYXJnYyktLTsKKwl9CisJcmV0dXJuICgqYXJndikgLSBvcmlnX2FyZ3Y7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2FsaWFzKGludCAqYXJnY3AsIGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlpbnQgZW52Y2hhbmdlZCA9IDAsIHJldCA9IDAsIHNhdmVkX2Vycm5vID0gZXJybm87CisJY29uc3QgY2hhciAqc3ViZGlyOworCWludCBjb3VudCwgb3B0aW9uX2NvdW50OworCWNvbnN0IGNoYXIgKipuZXdfYXJndjsKKwljb25zdCBjaGFyICphbGlhc19jb21tYW5kOworCWNoYXIgKmFsaWFzX3N0cmluZzsKKwlpbnQgdW51c2VkX25vbmdpdDsKKworCXN1YmRpciA9IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZ1bnVzZWRfbm9uZ2l0KTsKKworCWFsaWFzX2NvbW1hbmQgPSAoKmFyZ3YpWzBdOworCWFsaWFzX3N0cmluZyA9IGFsaWFzX2xvb2t1cChhbGlhc19jb21tYW5kKTsKKwlpZiAoYWxpYXNfc3RyaW5nKSB7CisJCWlmIChhbGlhc19zdHJpbmdbMF0gPT0gJyEnKSB7CisJCQljb25zdCBjaGFyICoqYWxpYXNfYXJndjsKKwkJCWludCBhcmdjID0gKmFyZ2NwLCBpOworCisJCQljb21taXRfcGFnZXJfY2hvaWNlKCk7CisKKwkJCS8qIGJ1aWxkIGFsaWFzX2FyZ3YgKi8KKwkJCWFsaWFzX2FyZ3YgPSB4bWFsbG9jKHNpemVvZigqYWxpYXNfYXJndikgKiAoYXJnYyArIDEpKTsKKwkJCWFsaWFzX2FyZ3ZbMF0gPSBhbGlhc19zdHJpbmcgKyAxOworCQkJZm9yIChpID0gMTsgaSA8IGFyZ2M7ICsraSkKKwkJCQlhbGlhc19hcmd2W2ldID0gKCphcmd2KVtpXTsKKwkJCWFsaWFzX2FyZ3ZbYXJnY10gPSBOVUxMOworCisJCQlyZXQgPSBydW5fY29tbWFuZF92X29wdChhbGlhc19hcmd2LCBSVU5fVVNJTkdfU0hFTEwpOworCQkJaWYgKHJldCA+PSAwKSAgIC8qIG5vcm1hbCBleGl0ICovCisJCQkJZXhpdChyZXQpOworCisJCQlkaWVfZXJybm8oIldoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIiwKKwkJCSAgICBhbGlhc19jb21tYW5kLCBhbGlhc19zdHJpbmcgKyAxKTsKKwkJfQorCQljb3VudCA9IHNwbGl0X2NtZGxpbmUoYWxpYXNfc3RyaW5nLCAmbmV3X2FyZ3YpOworCQlpZiAoY291bnQgPCAwKQorCQkJZGllKCJCYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIsIGFsaWFzX2NvbW1hbmQsCisJCQkgICAgc3BsaXRfY21kbGluZV9zdHJlcnJvcihjb3VudCkpOworCQlvcHRpb25fY291bnQgPSBoYW5kbGVfb3B0aW9ucygmbmV3X2FyZ3YsICZjb3VudCwgJmVudmNoYW5nZWQpOworCQlpZiAoZW52Y2hhbmdlZCkKKwkJCWRpZSgiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuIgorCQkJCSAiWW91IGNhbiB1c2UgJyFnaXQnIGluIHRoZSBhbGlhcyB0byBkbyB0aGlzLiIsCisJCQkJIGFsaWFzX2NvbW1hbmQpOworCQltZW1tb3ZlKG5ld19hcmd2IC0gb3B0aW9uX2NvdW50LCBuZXdfYXJndiwKKwkJCQljb3VudCAqIHNpemVvZihjaGFyICopKTsKKwkJbmV3X2FyZ3YgLT0gb3B0aW9uX2NvdW50OworCisJCWlmIChjb3VudCA8IDEpCisJCQlkaWUoImVtcHR5IGFsaWFzIGZvciAlcyIsIGFsaWFzX2NvbW1hbmQpOworCisJCWlmICghc3RyY21wKGFsaWFzX2NvbW1hbmQsIG5ld19hcmd2WzBdKSkKKwkJCWRpZSgicmVjdXJzaXZlIGFsaWFzOiAlcyIsIGFsaWFzX2NvbW1hbmQpOworCisJCXRyYWNlX2FyZ3ZfcHJpbnRmKG5ld19hcmd2LAorCQkJCSAgInRyYWNlOiBhbGlhcyBleHBhbnNpb246ICVzID0+IiwKKwkJCQkgIGFsaWFzX2NvbW1hbmQpOworCisJCW5ld19hcmd2ID0geHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyICopICoKKwkJCQkgICAgKGNvdW50ICsgKmFyZ2NwKSk7CisJCS8qIGluc2VydCBhZnRlciBjb21tYW5kIG5hbWUgKi8KKwkJbWVtY3B5KG5ld19hcmd2ICsgY291bnQsICphcmd2ICsgMSwgc2l6ZW9mKGNoYXIgKikgKiAqYXJnY3ApOworCisJCSphcmd2ID0gbmV3X2FyZ3Y7CisJCSphcmdjcCArPSBjb3VudCAtIDE7CisKKwkJcmV0ID0gMTsKKwl9CisKKwlpZiAoc3ViZGlyICYmIGNoZGlyKHN1YmRpcikpCisJCWRpZV9lcnJubygiQ2Fubm90IGNoYW5nZSB0byAnJXMnIiwgc3ViZGlyKTsKKworCWVycm5vID0gc2F2ZWRfZXJybm87CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFJVTl9TRVRVUAkJKDE8PDApCisjZGVmaW5lIFJVTl9TRVRVUF9HRU5UTFkJKDE8PDEpCisjZGVmaW5lIFVTRV9QQUdFUgkJKDE8PDIpCisvKgorICogcmVxdWlyZSB3b3JraW5nIHRyZWUgdG8gYmUgcHJlc2VudCAtLSBhbnl0aGluZyB1c2VzIHRoaXMgbmVlZHMKKyAqIFJVTl9TRVRVUCBmb3IgcmVhZGluZyBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisgKi8KKyNkZWZpbmUgTkVFRF9XT1JLX1RSRUUJCSgxPDwzKQorCitzdHJ1Y3QgY21kX3N0cnVjdCB7CisJY29uc3QgY2hhciAqY21kOworCWludCAoKmZuKShpbnQsIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKik7CisJaW50IG9wdGlvbjsKK307CisKK3N0YXRpYyBpbnQgcnVuX2J1aWx0aW4oc3RydWN0IGNtZF9zdHJ1Y3QgKnAsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgc3RhdHVzLCBoZWxwOworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IGNoYXIgKnByZWZpeDsKKworCXByZWZpeCA9IE5VTEw7CisJaGVscCA9IGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpOworCWlmICghaGVscCkgeworCQlpZiAocC0+b3B0aW9uICYgUlVOX1NFVFVQKQorCQkJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCQlpZiAocC0+b3B0aW9uICYgUlVOX1NFVFVQX0dFTlRMWSkgeworCQkJaW50IG5vbmdpdF9vazsKKwkJCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXRfb2spOworCQl9CisKKwkJaWYgKHVzZV9wYWdlciA9PSAtMSAmJiBwLT5vcHRpb24gJiAoUlVOX1NFVFVQIHwgUlVOX1NFVFVQX0dFTlRMWSkpCisJCQl1c2VfcGFnZXIgPSBjaGVja19wYWdlcl9jb25maWcocC0+Y21kKTsKKwkJaWYgKHVzZV9wYWdlciA9PSAtMSAmJiBwLT5vcHRpb24gJiBVU0VfUEFHRVIpCisJCQl1c2VfcGFnZXIgPSAxOworCisJCWlmICgocC0+b3B0aW9uICYgKFJVTl9TRVRVUCB8IFJVTl9TRVRVUF9HRU5UTFkpKSAmJgorCQkgICAgc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpIC8qIGdldF9naXRfZGlyKCkgbWF5IHNldCB1cCByZXBvLCBhdm9pZCB0aGF0ICovCisJCQl0cmFjZV9yZXBvX3NldHVwKHByZWZpeCk7CisJfQorCWNvbW1pdF9wYWdlcl9jaG9pY2UoKTsKKworCWlmICghaGVscCAmJiBwLT5vcHRpb24gJiBORUVEX1dPUktfVFJFRSkKKwkJc2V0dXBfd29ya190cmVlKCk7CisKKwl0cmFjZV9hcmd2X3ByaW50Zihhcmd2LCAidHJhY2U6IGJ1aWx0LWluOiBnaXQiKTsKKworCXN0YXR1cyA9IHAtPmZuKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIFNvbWVib2R5IGNsb3NlZCBzdGRvdXQ/ICovCisJaWYgKGZzdGF0KGZpbGVubyhzdGRvdXQpLCAmc3QpKQorCQlyZXR1cm4gMDsKKwkvKiBJZ25vcmUgd3JpdGUgZXJyb3JzIGZvciBwaXBlcyBhbmQgc29ja2V0cy4uICovCisJaWYgKFNfSVNGSUZPKHN0LnN0X21vZGUpIHx8IFNfSVNTT0NLKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKworCS8qIENoZWNrIGZvciBFTk9TUEMgYW5kIEVJTyBlcnJvcnMuLiAqLworCWlmIChmZmx1c2goc3Rkb3V0KSkKKwkJZGllX2Vycm5vKCJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIpOworCWlmIChmZXJyb3Ioc3Rkb3V0KSkKKwkJZGllKCJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0Iik7CisJaWYgKGZjbG9zZShzdGRvdXQpKQorCQlkaWVfZXJybm8oImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2ludGVybmFsX2NvbW1hbmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKmNtZCA9IGFyZ3ZbMF07CisJc3RhdGljIHN0cnVjdCBjbWRfc3RydWN0IGNvbW1hbmRzW10gPSB7CisJCXsgImFkZCIsIGNtZF9hZGQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgImFubm90YXRlIiwgY21kX2Fubm90YXRlLCBSVU5fU0VUVVAgfSwKKwkJeyAiYXBwbHkiLCBjbWRfYXBwbHksIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwkJeyAiYXJjaGl2ZSIsIGNtZF9hcmNoaXZlIH0sCisJCXsgImJpc2VjdC0taGVscGVyIiwgY21kX2Jpc2VjdF9faGVscGVyLCBSVU5fU0VUVVAgfSwKKwkJeyAiYmxhbWUiLCBjbWRfYmxhbWUsIFJVTl9TRVRVUCB9LAorCQl7ICJicmFuY2giLCBjbWRfYnJhbmNoLCBSVU5fU0VUVVAgfSwKKwkJeyAiYnVuZGxlIiwgY21kX2J1bmRsZSwgUlVOX1NFVFVQX0dFTlRMWSB9LAorCQl7ICJjYXQtZmlsZSIsIGNtZF9jYXRfZmlsZSwgUlVOX1NFVFVQIH0sCisJCXsgImNoZWNrLWF0dHIiLCBjbWRfY2hlY2tfYXR0ciwgUlVOX1NFVFVQIH0sCisJCXsgImNoZWNrLXJlZi1mb3JtYXQiLCBjbWRfY2hlY2tfcmVmX2Zvcm1hdCB9LAorCQl7ICJjaGVja291dCIsIGNtZF9jaGVja291dCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwkJeyAiY2hlY2tvdXQtaW5kZXgiLCBjbWRfY2hlY2tvdXRfaW5kZXgsCisJCQlSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRX0sCisJCXsgImNoZXJyeSIsIGNtZF9jaGVycnksIFJVTl9TRVRVUCB9LAorCQl7ICJjaGVycnktcGljayIsIGNtZF9jaGVycnlfcGljaywgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwkJeyAiY2xlYW4iLCBjbWRfY2xlYW4sIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgImNsb25lIiwgY21kX2Nsb25lIH0sCisJCXsgImNvbHVtbiIsIGNtZF9jb2x1bW4sIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwkJeyAiY29tbWl0IiwgY21kX2NvbW1pdCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwkJeyAiY29tbWl0LXRyZWUiLCBjbWRfY29tbWl0X3RyZWUsIFJVTl9TRVRVUCB9LAorCQl7ICJjb25maWciLCBjbWRfY29uZmlnLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJCXsgImNvdW50LW9iamVjdHMiLCBjbWRfY291bnRfb2JqZWN0cywgUlVOX1NFVFVQIH0sCisJCXsgImNyZWRlbnRpYWwiLCBjbWRfY3JlZGVudGlhbCwgUlVOX1NFVFVQX0dFTlRMWSB9LAorCQl7ICJkZXNjcmliZSIsIGNtZF9kZXNjcmliZSwgUlVOX1NFVFVQIH0sCisJCXsgImRpZmYiLCBjbWRfZGlmZiB9LAorCQl7ICJkaWZmLWZpbGVzIiwgY21kX2RpZmZfZmlsZXMsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgImRpZmYtaW5kZXgiLCBjbWRfZGlmZl9pbmRleCwgUlVOX1NFVFVQIH0sCisJCXsgImRpZmYtdHJlZSIsIGNtZF9kaWZmX3RyZWUsIFJVTl9TRVRVUCB9LAorCQl7ICJmYXN0LWV4cG9ydCIsIGNtZF9mYXN0X2V4cG9ydCwgUlVOX1NFVFVQIH0sCisJCXsgImZldGNoIiwgY21kX2ZldGNoLCBSVU5fU0VUVVAgfSwKKwkJeyAiZmV0Y2gtcGFjayIsIGNtZF9mZXRjaF9wYWNrLCBSVU5fU0VUVVAgfSwKKwkJeyAiZm10LW1lcmdlLW1zZyIsIGNtZF9mbXRfbWVyZ2VfbXNnLCBSVU5fU0VUVVAgfSwKKwkJeyAiZm9yLWVhY2gtcmVmIiwgY21kX2Zvcl9lYWNoX3JlZiwgUlVOX1NFVFVQIH0sCisJCXsgImZvcm1hdC1wYXRjaCIsIGNtZF9mb3JtYXRfcGF0Y2gsIFJVTl9TRVRVUCB9LAorCQl7ICJmc2NrIiwgY21kX2ZzY2ssIFJVTl9TRVRVUCB9LAorCQl7ICJmc2NrLW9iamVjdHMiLCBjbWRfZnNjaywgUlVOX1NFVFVQIH0sCisJCXsgImdjIiwgY21kX2djLCBSVU5fU0VUVVAgfSwKKwkJeyAiZ2V0LXRhci1jb21taXQtaWQiLCBjbWRfZ2V0X3Rhcl9jb21taXRfaWQgfSwKKwkJeyAiZ3JlcCIsIGNtZF9ncmVwLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJCXsgImhhc2gtb2JqZWN0IiwgY21kX2hhc2hfb2JqZWN0IH0sCisJCXsgImhlbHAiLCBjbWRfaGVscCB9LAorCQl7ICJpbmRleC1wYWNrIiwgY21kX2luZGV4X3BhY2ssIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwkJeyAiaW5pdCIsIGNtZF9pbml0X2RiIH0sCisJCXsgImluaXQtZGIiLCBjbWRfaW5pdF9kYiB9LAorCQl7ICJsb2ciLCBjbWRfbG9nLCBSVU5fU0VUVVAgfSwKKwkJeyAibHMtZmlsZXMiLCBjbWRfbHNfZmlsZXMsIFJVTl9TRVRVUCB9LAorCQl7ICJscy1yZW1vdGUiLCBjbWRfbHNfcmVtb3RlLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJCXsgImxzLXRyZWUiLCBjbWRfbHNfdHJlZSwgUlVOX1NFVFVQIH0sCisJCXsgIm1haWxpbmZvIiwgY21kX21haWxpbmZvIH0sCisJCXsgIm1haWxzcGxpdCIsIGNtZF9tYWlsc3BsaXQgfSwKKwkJeyAibWVyZ2UiLCBjbWRfbWVyZ2UsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgIm1lcmdlLWJhc2UiLCBjbWRfbWVyZ2VfYmFzZSwgUlVOX1NFVFVQIH0sCisJCXsgIm1lcmdlLWZpbGUiLCBjbWRfbWVyZ2VfZmlsZSwgUlVOX1NFVFVQX0dFTlRMWSB9LAorCQl7ICJtZXJnZS1pbmRleCIsIGNtZF9tZXJnZV9pbmRleCwgUlVOX1NFVFVQIH0sCisJCXsgIm1lcmdlLW91cnMiLCBjbWRfbWVyZ2Vfb3VycywgUlVOX1NFVFVQIH0sCisJCXsgIm1lcmdlLXJlY3Vyc2l2ZSIsIGNtZF9tZXJnZV9yZWN1cnNpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgIm1lcmdlLXJlY3Vyc2l2ZS1vdXJzIiwgY21kX21lcmdlX3JlY3Vyc2l2ZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwkJeyAibWVyZ2UtcmVjdXJzaXZlLXRoZWlycyIsIGNtZF9tZXJnZV9yZWN1cnNpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgIm1lcmdlLXN1YnRyZWUiLCBjbWRfbWVyZ2VfcmVjdXJzaXZlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCQl7ICJtZXJnZS10cmVlIiwgY21kX21lcmdlX3RyZWUsIFJVTl9TRVRVUCB9LAorCQl7ICJta3RhZyIsIGNtZF9ta3RhZywgUlVOX1NFVFVQIH0sCisJCXsgIm1rdHJlZSIsIGNtZF9ta3RyZWUsIFJVTl9TRVRVUCB9LAorCQl7ICJtdiIsIGNtZF9tdiwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwkJeyAibmFtZS1yZXYiLCBjbWRfbmFtZV9yZXYsIFJVTl9TRVRVUCB9LAorCQl7ICJub3RlcyIsIGNtZF9ub3RlcywgUlVOX1NFVFVQIH0sCisJCXsgInBhY2stb2JqZWN0cyIsIGNtZF9wYWNrX29iamVjdHMsIFJVTl9TRVRVUCB9LAorCQl7ICJwYWNrLXJlZHVuZGFudCIsIGNtZF9wYWNrX3JlZHVuZGFudCwgUlVOX1NFVFVQIH0sCisJCXsgInBhY2stcmVmcyIsIGNtZF9wYWNrX3JlZnMsIFJVTl9TRVRVUCB9LAorCQl7ICJwYXRjaC1pZCIsIGNtZF9wYXRjaF9pZCB9LAorCQl7ICJwZWVrLXJlbW90ZSIsIGNtZF9sc19yZW1vdGUsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwkJeyAicGlja2F4ZSIsIGNtZF9ibGFtZSwgUlVOX1NFVFVQIH0sCisJCXsgInBydW5lIiwgY21kX3BydW5lLCBSVU5fU0VUVVAgfSwKKwkJeyAicHJ1bmUtcGFja2VkIiwgY21kX3BydW5lX3BhY2tlZCwgUlVOX1NFVFVQIH0sCisJCXsgInB1c2giLCBjbWRfcHVzaCwgUlVOX1NFVFVQIH0sCisJCXsgInJlYWQtdHJlZSIsIGNtZF9yZWFkX3RyZWUsIFJVTl9TRVRVUCB9LAorCQl7ICJyZWNlaXZlLXBhY2siLCBjbWRfcmVjZWl2ZV9wYWNrIH0sCisJCXsgInJlZmxvZyIsIGNtZF9yZWZsb2csIFJVTl9TRVRVUCB9LAorCQl7ICJyZW1vdGUiLCBjbWRfcmVtb3RlLCBSVU5fU0VUVVAgfSwKKwkJeyAicmVtb3RlLWV4dCIsIGNtZF9yZW1vdGVfZXh0IH0sCisJCXsgInJlbW90ZS1mZCIsIGNtZF9yZW1vdGVfZmQgfSwKKwkJeyAicmVwbGFjZSIsIGNtZF9yZXBsYWNlLCBSVU5fU0VUVVAgfSwKKwkJeyAicmVwby1jb25maWciLCBjbWRfcmVwb19jb25maWcsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwkJeyAicmVyZXJlIiwgY21kX3JlcmVyZSwgUlVOX1NFVFVQIH0sCisJCXsgInJlc2V0IiwgY21kX3Jlc2V0LCBSVU5fU0VUVVAgfSwKKwkJeyAicmV2LWxpc3QiLCBjbWRfcmV2X2xpc3QsIFJVTl9TRVRVUCB9LAorCQl7ICJyZXYtcGFyc2UiLCBjbWRfcmV2X3BhcnNlIH0sCisJCXsgInJldmVydCIsIGNtZF9yZXZlcnQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgInJtIiwgY21kX3JtLCBSVU5fU0VUVVAgfSwKKwkJeyAic2VuZC1wYWNrIiwgY21kX3NlbmRfcGFjaywgUlVOX1NFVFVQIH0sCisJCXsgInNob3J0bG9nIiwgY21kX3Nob3J0bG9nLCBSVU5fU0VUVVBfR0VOVExZIHwgVVNFX1BBR0VSIH0sCisJCXsgInNob3ciLCBjbWRfc2hvdywgUlVOX1NFVFVQIH0sCisJCXsgInNob3ctYnJhbmNoIiwgY21kX3Nob3dfYnJhbmNoLCBSVU5fU0VUVVAgfSwKKwkJeyAic2hvdy1yZWYiLCBjbWRfc2hvd19yZWYsIFJVTl9TRVRVUCB9LAorCQl7ICJzdGFnZSIsIGNtZF9hZGQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgInN0YXR1cyIsIGNtZF9zdGF0dXMsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgInN0cmlwc3BhY2UiLCBjbWRfc3RyaXBzcGFjZSB9LAorCQl7ICJzeW1ib2xpYy1yZWYiLCBjbWRfc3ltYm9saWNfcmVmLCBSVU5fU0VUVVAgfSwKKwkJeyAidGFnIiwgY21kX3RhZywgUlVOX1NFVFVQIH0sCisJCXsgInRhci10cmVlIiwgY21kX3Rhcl90cmVlIH0sCisJCXsgInVucGFjay1maWxlIiwgY21kX3VucGFja19maWxlLCBSVU5fU0VUVVAgfSwKKwkJeyAidW5wYWNrLW9iamVjdHMiLCBjbWRfdW5wYWNrX29iamVjdHMsIFJVTl9TRVRVUCB9LAorCQl7ICJ1cGRhdGUtaW5kZXgiLCBjbWRfdXBkYXRlX2luZGV4LCBSVU5fU0VUVVAgfSwKKwkJeyAidXBkYXRlLXJlZiIsIGNtZF91cGRhdGVfcmVmLCBSVU5fU0VUVVAgfSwKKwkJeyAidXBkYXRlLXNlcnZlci1pbmZvIiwgY21kX3VwZGF0ZV9zZXJ2ZXJfaW5mbywgUlVOX1NFVFVQIH0sCisJCXsgInVwbG9hZC1hcmNoaXZlIiwgY21kX3VwbG9hZF9hcmNoaXZlIH0sCisJCXsgInVwbG9hZC1hcmNoaXZlLS13cml0ZXIiLCBjbWRfdXBsb2FkX2FyY2hpdmVfd3JpdGVyIH0sCisJCXsgInZhciIsIGNtZF92YXIsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwkJeyAidmVyaWZ5LXBhY2siLCBjbWRfdmVyaWZ5X3BhY2sgfSwKKwkJeyAidmVyaWZ5LXRhZyIsIGNtZF92ZXJpZnlfdGFnLCBSVU5fU0VUVVAgfSwKKwkJeyAidmVyc2lvbiIsIGNtZF92ZXJzaW9uIH0sCisJCXsgIndoYXRjaGFuZ2VkIiwgY21kX3doYXRjaGFuZ2VkLCBSVU5fU0VUVVAgfSwKKwkJeyAid3JpdGUtdHJlZSIsIGNtZF93cml0ZV90cmVlLCBSVU5fU0VUVVAgfSwKKwl9OworCWludCBpOworCXN0YXRpYyBjb25zdCBjaGFyIGV4dFtdID0gU1RSSVBfRVhURU5TSU9OOworCisJaWYgKHNpemVvZihleHQpID4gMSkgeworCQlpID0gc3RybGVuKGFyZ3ZbMF0pIC0gc3RybGVuKGV4dCk7CisJCWlmIChpID4gMCAmJiAhc3RyY21wKGFyZ3ZbMF0gKyBpLCBleHQpKSB7CisJCQljaGFyICphcmd2MCA9IHhzdHJkdXAoYXJndlswXSk7CisJCQlhcmd2WzBdID0gY21kID0gYXJndjA7CisJCQlhcmd2MFtpXSA9ICdcMCc7CisJCX0KKwl9CisKKwkvKiBUdXJuICJnaXQgY21kIC0taGVscCIgaW50byAiZ2l0IGhlbHAgY21kIiAqLworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLWhlbHAiKSkgeworCQlhcmd2WzFdID0gYXJndlswXTsKKwkJYXJndlswXSA9IGNtZCA9ICJoZWxwIjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tYW5kcyk7IGkrKykgeworCQlzdHJ1Y3QgY21kX3N0cnVjdCAqcCA9IGNvbW1hbmRzK2k7CisJCWlmIChzdHJjbXAocC0+Y21kLCBjbWQpKQorCQkJY29udGludWU7CisJCWV4aXQocnVuX2J1aWx0aW4ocCwgYXJnYywgYXJndikpOworCX0KK30KKworc3RhdGljIHZvaWQgZXhlY3ZfZGFzaGVkX2V4dGVybmFsKGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdHJidWYgY21kID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqdG1wOworCWludCBzdGF0dXM7CisKKwlpZiAodXNlX3BhZ2VyID09IC0xKQorCQl1c2VfcGFnZXIgPSBjaGVja19wYWdlcl9jb25maWcoYXJndlswXSk7CisJY29tbWl0X3BhZ2VyX2Nob2ljZSgpOworCisJc3RyYnVmX2FkZGYoJmNtZCwgImdpdC0lcyIsIGFyZ3ZbMF0pOworCisJLyoKKwkgKiBhcmd2WzBdIG11c3QgYmUgdGhlIGdpdCBjb21tYW5kLCBidXQgdGhlIGFyZ3YgYXJyYXkKKwkgKiBiZWxvbmdzIHRvIHRoZSBjYWxsZXIsIGFuZCBtYXkgYmUgcmV1c2VkIGluCisJICogc3Vic2VxdWVudCBsb29wIGl0ZXJhdGlvbnMuIFNhdmUgYXJndlswXSBhbmQKKwkgKiByZXN0b3JlIGl0IG9uIGVycm9yLgorCSAqLworCXRtcCA9IGFyZ3ZbMF07CisJYXJndlswXSA9IGNtZC5idWY7CisKKwl0cmFjZV9hcmd2X3ByaW50Zihhcmd2LCAidHJhY2U6IGV4ZWM6Iik7CisKKwkvKgorCSAqIGlmIHdlIGZhaWwgYmVjYXVzZSB0aGUgY29tbWFuZCBpcyBub3QgZm91bmQsIGl0IGlzCisJICogT0sgdG8gcmV0dXJuLiBPdGhlcndpc2UsIHdlIGp1c3QgcGFzcyBhbG9uZyB0aGUgc3RhdHVzIGNvZGUuCisJICovCisJc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkUgfCBSVU5fQ0xFQU5fT05fRVhJVCk7CisJaWYgKHN0YXR1cyA+PSAwIHx8IGVycm5vICE9IEVOT0VOVCkKKwkJZXhpdChzdGF0dXMpOworCisJYXJndlswXSA9IHRtcDsKKworCXN0cmJ1Zl9yZWxlYXNlKCZjbWQpOworfQorCitzdGF0aWMgaW50IHJ1bl9hcmd2KGludCAqYXJnY3AsIGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlpbnQgZG9uZV9hbGlhcyA9IDA7CisKKwl3aGlsZSAoMSkgeworCQkvKiBTZWUgaWYgaXQncyBhbiBpbnRlcm5hbCBjb21tYW5kICovCisJCWhhbmRsZV9pbnRlcm5hbF9jb21tYW5kKCphcmdjcCwgKmFyZ3YpOworCisJCS8qIC4uIHRoZW4gdHJ5IHRoZSBleHRlcm5hbCBvbmVzICovCisJCWV4ZWN2X2Rhc2hlZF9leHRlcm5hbCgqYXJndik7CisKKwkJLyogSXQgY291bGQgYmUgYW4gYWxpYXMgLS0gdGhpcyB3b3JrcyBhcm91bmQgdGhlIGluc2FuaXR5CisJCSAqIG9mIG92ZXJyaWRpbmcgImdpdCBsb2ciIHdpdGggImdpdCBzaG93IiBieSBoYXZpbmcKKwkJICogYWxpYXMubG9nID0gc2hvdworCQkgKi8KKwkJaWYgKGRvbmVfYWxpYXMgfHwgIWhhbmRsZV9hbGlhcyhhcmdjcCwgYXJndikpCisJCQlicmVhazsKKwkJZG9uZV9hbGlhcyA9IDE7CisJfQorCisJcmV0dXJuIGRvbmVfYWxpYXM7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKmNtZDsKKworCXN0YXJ0dXBfaW5mbyA9ICZnaXRfc3RhcnR1cF9pbmZvOworCisJY21kID0gZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKwlpZiAoIWNtZCkKKwkJY21kID0gImdpdC1oZWxwIjsKKworCWdpdF9zZXR1cF9nZXR0ZXh0KCk7CisKKwkvKgorCSAqICJnaXQteHh4eCIgaXMgdGhlIHNhbWUgYXMgImdpdCB4eHh4IiwgYnV0IHdlIG9idmlvdXNseToKKwkgKgorCSAqICAtIGNhbm5vdCB0YWtlIGZsYWdzIGluIGJldHdlZW4gdGhlICJnaXQiIGFuZCB0aGUgInh4eHgiLgorCSAqICAtIGNhbm5vdCBleGVjdXRlIGl0IGV4dGVybmFsbHkgKHNpbmNlIGl0IHdvdWxkIGp1c3QgZG8KKwkgKiAgICB0aGUgc2FtZSB0aGluZyBvdmVyIGFnYWluKQorCSAqCisJICogU28gd2UganVzdCBkaXJlY3RseSBjYWxsIHRoZSBpbnRlcm5hbCBjb21tYW5kIGhhbmRsZXIsIGFuZAorCSAqIGRpZSBpZiB0aGF0IG9uZSBjYW5ub3QgaGFuZGxlIGl0LgorCSAqLworCWlmICghcHJlZml4Y21wKGNtZCwgImdpdC0iKSkgeworCQljbWQgKz0gNDsKKwkJYXJndlswXSA9IGNtZDsKKwkJaGFuZGxlX2ludGVybmFsX2NvbW1hbmQoYXJnYywgYXJndik7CisJCWRpZSgiY2Fubm90IGhhbmRsZSAlcyBpbnRlcm5hbGx5IiwgY21kKTsKKwl9CisKKwkvKiBMb29rIGZvciBmbGFncy4uICovCisJYXJndisrOworCWFyZ2MtLTsKKwloYW5kbGVfb3B0aW9ucygmYXJndiwgJmFyZ2MsIE5VTEwpOworCWlmIChhcmdjID4gMCkgeworCQlpZiAoIXByZWZpeGNtcChhcmd2WzBdLCAiLS0iKSkKKwkJCWFyZ3ZbMF0gKz0gMjsKKwl9IGVsc2UgeworCQkvKiBUaGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIGNvbW1hbmQ7IGdpdmUgdGhlbSBoZWxwICovCisJCWNvbW1pdF9wYWdlcl9jaG9pY2UoKTsKKwkJcHJpbnRmKCJ1c2FnZTogJXNcblxuIiwgZ2l0X3VzYWdlX3N0cmluZyk7CisJCWxpc3RfY29tbW9uX2NtZHNfaGVscCgpOworCQlwcmludGYoIlxuJXNcbiIsIGdpdF9tb3JlX2luZm9fc3RyaW5nKTsKKwkJZXhpdCgxKTsKKwl9CisJY21kID0gYXJndlswXTsKKworCS8qCisJICogV2UgdXNlIFBBVEggdG8gZmluZCBnaXQgY29tbWFuZHMsIGJ1dCB3ZSBwcmVwZW5kIHNvbWUgaGlnaGVyCisJICogcHJlY2VkZW5jZSBwYXRoczogdGhlICItLWV4ZWMtcGF0aCIgb3B0aW9uLCB0aGUgR0lUX0VYRUNfUEFUSAorCSAqIGVudmlyb25tZW50LCBhbmQgdGhlICQoZ2l0ZXhlY2RpcikgZnJvbSB0aGUgTWFrZWZpbGUgYXQgYnVpbGQKKwkgKiB0aW1lLgorCSAqLworCXNldHVwX3BhdGgoKTsKKworCXdoaWxlICgxKSB7CisJCXN0YXRpYyBpbnQgZG9uZV9oZWxwID0gMDsKKwkJc3RhdGljIGludCB3YXNfYWxpYXMgPSAwOworCQl3YXNfYWxpYXMgPSBydW5fYXJndigmYXJnYywgJmFyZ3YpOworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJYnJlYWs7CisJCWlmICh3YXNfYWxpYXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiRXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAiCisJCQkJIiclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmRcbiIsCisJCQkJY21kLCBhcmd2WzBdKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKCFkb25lX2hlbHApIHsKKwkJCWNtZCA9IGFyZ3ZbMF0gPSBoZWxwX3Vua25vd25fY21kKGNtZCk7CisJCQlkb25lX2hlbHAgPSAxOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iLAorCQljbWQsIHN0cmVycm9yKGVycm5vKSk7CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2dpdC5zcGVjLmluIGIvZ2l0LnNwZWMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxZDUzNwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC5zcGVjLmluCkBAIC0wLDAgKzEsMzMwIEBACisjIFBhc3MgLS13aXRob3V0IGRvY3MgdG8gcnBtYnVpbGQgaWYgeW91IGRvbid0IHdhbnQgdGhlIGRvY3VtZW50YXRpb24KKworTmFtZTogCQlnaXQKK1ZlcnNpb246IAlAQFZFUlNJT05AQAorUmVsZWFzZTogCTElez9kaXN0fQorU3VtbWFyeTogIAlDb3JlIGdpdCB0b29scworTGljZW5zZTogCUdQTAorR3JvdXA6IAkJRGV2ZWxvcG1lbnQvVG9vbHMKK1VSTDogCQlodHRwOi8va2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC8KK1NvdXJjZTogCWh0dHA6Ly9rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0LyV7bmFtZX0tJXt2ZXJzaW9ufS50YXIuZ3oKK0J1aWxkUmVxdWlyZXM6CXpsaWItZGV2ZWwgPj0gMS4yLCBvcGVuc3NsLWRldmVsLCBjdXJsLWRldmVsLCBleHBhdC1kZXZlbCwgZ2V0dGV4dCAgJXshP193aXRob3V0X2RvY3M6LCB4bWx0bywgYXNjaWlkb2MgPiA2LjAuM30KK0J1aWxkUm9vdDoJJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LSV7cmVsZWFzZX0tcm9vdC0lKCV7X19pZF91fSAtbikKKworUmVxdWlyZXM6CXBlcmwtR2l0ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczoJemxpYiA+PSAxLjIsIHJzeW5jLCBsZXNzLCBvcGVuc3NoLWNsaWVudHMsIGV4cGF0CitQcm92aWRlczoJZ2l0LWNvcmUgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KK09ic29sZXRlczoJZ2l0LWNvcmUgPD0gMS41LjQuMgorT2Jzb2xldGVzOglnaXQtcDQKKworJWRlc2NyaXB0aW9uCitHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgordW51c3VhbGx5IHJpY2ggY29tbWFuZCBzZXQgdGhhdCBwcm92aWRlcyBib3RoIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucworYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KKworVGhlIGdpdCBycG0gaW5zdGFsbHMgdGhlIGNvcmUgdG9vbHMgd2l0aCBtaW5pbWFsIGRlcGVuZGVuY2llcy4gIFRvCitpbnN0YWxsIGFsbCBnaXQgcGFja2FnZXMsIGluY2x1ZGluZyB0b29scyBmb3IgaW50ZWdyYXRpbmcgd2l0aCBvdGhlcgorU0NNcywgaW5zdGFsbCB0aGUgZ2l0LWFsbCBtZXRhLXBhY2thZ2UuCisKKyVwYWNrYWdlIGFsbAorU3VtbWFyeToJTWV0YS1wYWNrYWdlIHRvIHB1bGwgaW4gYWxsIGdpdCB0b29scworR3JvdXA6CQlEZXZlbG9wbWVudC9Ub29scworUmVxdWlyZXM6CWdpdCA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQorUmVxdWlyZXM6CWdpdC1zdm4gPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KK1JlcXVpcmVzOglnaXQtY3ZzID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczoJZ2l0LWFyY2ggPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KK1JlcXVpcmVzOglnaXQtZW1haWwgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KK1JlcXVpcmVzOglnaXRrID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczoJZ2l0d2ViID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczoJZ2l0LWd1aSA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQorT2Jzb2xldGVzOglnaXQgPD0gMS41LjQuMgorCislZGVzY3JpcHRpb24gYWxsCitHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgordW51c3VhbGx5IHJpY2ggY29tbWFuZCBzZXQgdGhhdCBwcm92aWRlcyBib3RoIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucworYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KKworVGhpcyBpcyBhIGR1bW15IHBhY2thZ2Ugd2hpY2ggYnJpbmdzIGluIGFsbCBzdWJwYWNrYWdlcy4KKworJXBhY2thZ2Ugc3ZuCitTdW1tYXJ5OiAgICAgICAgR2l0IHRvb2xzIGZvciBpbXBvcnRpbmcgU3VidmVyc2lvbiByZXBvc2l0b3JpZXMKK0dyb3VwOiAgICAgICAgICBEZXZlbG9wbWVudC9Ub29scworUmVxdWlyZXM6ICAgICAgIGdpdCA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfSwgc3VidmVyc2lvbgorJWRlc2NyaXB0aW9uIHN2bgorR2l0IHRvb2xzIGZvciBpbXBvcnRpbmcgU3VidmVyc2lvbiByZXBvc2l0b3JpZXMuCisKKyVwYWNrYWdlIGN2cworU3VtbWFyeTogICAgICAgIEdpdCB0b29scyBmb3IgaW1wb3J0aW5nIENWUyByZXBvc2l0b3JpZXMKK0dyb3VwOiAgICAgICAgICBEZXZlbG9wbWVudC9Ub29scworUmVxdWlyZXM6ICAgICAgIGdpdCA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfSwgY3ZzLCBjdnNwcworJWRlc2NyaXB0aW9uIGN2cworR2l0IHRvb2xzIGZvciBpbXBvcnRpbmcgQ1ZTIHJlcG9zaXRvcmllcy4KKworJXBhY2thZ2UgYXJjaAorU3VtbWFyeTogICAgICAgIEdpdCB0b29scyBmb3IgaW1wb3J0aW5nIEFyY2ggcmVwb3NpdG9yaWVzCitHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvVG9vbHMKK1JlcXVpcmVzOiAgICAgICBnaXQgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0sIHRsYQorJWRlc2NyaXB0aW9uIGFyY2gKK0dpdCB0b29scyBmb3IgaW1wb3J0aW5nIEFyY2ggcmVwb3NpdG9yaWVzLgorCislcGFja2FnZSBlbWFpbAorU3VtbWFyeTogICAgICAgIEdpdCB0b29scyBmb3Igc2VuZGluZyBlbWFpbAorR3JvdXA6ICAgICAgICAgIERldmVsb3BtZW50L1Rvb2xzCitSZXF1aXJlczoJZ2l0ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CislZGVzY3JpcHRpb24gZW1haWwKK0dpdCB0b29scyBmb3Igc2VuZGluZyBlbWFpbC4KKworJXBhY2thZ2UgZ3VpCitTdW1tYXJ5OiAgICAgICAgR2l0IEdVSSB0b29sCitHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvVG9vbHMKK1JlcXVpcmVzOiAgICAgICBnaXQgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0sIHRrID49IDguNAorJWRlc2NyaXB0aW9uIGd1aQorR2l0IEdVSSB0b29sCisKKyVwYWNrYWdlIC1uIGdpdGsKK1N1bW1hcnk6ICAgICAgICBHaXQgcmV2aXNpb24gdHJlZSB2aXN1YWxpc2VyICgnZ2l0aycpCitHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvVG9vbHMKK1JlcXVpcmVzOiAgICAgICBnaXQgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0sIHRrID49IDguNAorJWRlc2NyaXB0aW9uIC1uIGdpdGsKK0dpdCByZXZpc2lvbiB0cmVlIHZpc3VhbGlzZXIgKCdnaXRrJykKKworJXBhY2thZ2UgLW4gZ2l0d2ViCitTdW1tYXJ5OglHaXQgd2ViIGludGVyZmFjZQorR3JvdXA6ICAgICAgICAgIERldmVsb3BtZW50L1Rvb2xzCitSZXF1aXJlczogICAgICAgZ2l0ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CislZGVzY3JpcHRpb24gLW4gZ2l0d2ViCitCcm93c2luZyBnaXQgcmVwb3NpdG9yeSBvbiB0aGUgd2ViCisKKyVwYWNrYWdlIC1uIHBlcmwtR2l0CitTdW1tYXJ5OiAgICAgICAgUGVybCBpbnRlcmZhY2UgdG8gR2l0CitHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvTGlicmFyaWVzCitSZXF1aXJlczogICAgICAgZ2l0ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczogICAgICAgcGVybCg6TU9EVUxFX0NPTVBBVF8lKGV2YWwgImAle19fcGVybH0gLVY6dmVyc2lvbmAiOyBlY2hvICR2ZXJzaW9uKSkKK0J1aWxkUmVxdWlyZXM6ICBwZXJsKEVycm9yKQorQnVpbGRSZXF1aXJlczogIHBlcmwoRXh0VXRpbHM6Ok1ha2VNYWtlcikKKworJWRlc2NyaXB0aW9uIC1uIHBlcmwtR2l0CitQZXJsIGludGVyZmFjZSB0byBHaXQKKworJWRlZmluZSBwYXRoX3NldHRpbmdzIEVUQ19HSVRDT05GSUc9L2V0Yy9naXRjb25maWcgcHJlZml4PSV7X3ByZWZpeH0gbWFuZGlyPSV7X21hbmRpcn0gaHRtbGRpcj0le19kb2NkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQorJXshP3B5dGhvbl9zaXRlbGliOiAlZ2xvYmFsIHB5dGhvbl9zaXRlbGliICUoJXtfX3B5dGhvbn0gLWMgImZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgZ2V0X3B5dGhvbl9saWI7IHByaW50IGdldF9weXRob25fbGliKCkiKX0KKworJXByZXAKKyVzZXR1cCAtcQorCislYnVpbGQKK21ha2UgJXtfc21wX21mbGFnc30gQ0ZMQUdTPSIkUlBNX09QVF9GTEFHUyIgXAorICAgICAle3BhdGhfc2V0dGluZ3N9IFwKKyAgICAgYWxsICV7IT9fd2l0aG91dF9kb2NzOiBkb2N9CisKKyVpbnN0YWxsCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCittYWtlICV7X3NtcF9tZmxhZ3N9IENGTEFHUz0iJFJQTV9PUFRfRkxBR1MiIERFU1RESVI9JFJQTV9CVUlMRF9ST09UIFwKKyAgICAgJXtwYXRoX3NldHRpbmdzfSBcCisgICAgIElOU1RBTExESVJTPXZlbmRvciBpbnN0YWxsICV7IT9fd2l0aG91dF9kb2NzOiBpbnN0YWxsLWRvY30KK3Rlc3QgISAtZCAkUlBNX0JVSUxEX1JPT1Qle3B5dGhvbl9zaXRlbGlifSB8fCBybSAtZnIgJFJQTV9CVUlMRF9ST09UJXtweXRob25fc2l0ZWxpYn0KK2ZpbmQgJFJQTV9CVUlMRF9ST09UIC10eXBlIGYgLW5hbWUgLnBhY2tsaXN0IC1leGVjIHJtIC1mIHt9ICc7JworZmluZCAkUlBNX0JVSUxEX1JPT1QgLXR5cGUgZiAtbmFtZSAnKi5icycgLWVtcHR5IC1leGVjIHJtIC1mIHt9ICc7JworZmluZCAkUlBNX0JVSUxEX1JPT1QgLXR5cGUgZiAtbmFtZSBwZXJsbG9jYWwucG9kIC1leGVjIHJtIC1mIHt9ICc7JworCisoZmluZCAkUlBNX0JVSUxEX1JPT1Qle19iaW5kaXJ9IC10eXBlIGYgfCBncmVwIC12RSAiYXJjaGltcG9ydHxzdm58Y3ZzfGVtYWlsfGdpdGt8Z2l0LWd1aXxnaXQtY2l0b29sIiB8IHNlZCAtZSBzQF4kUlBNX0JVSUxEX1JPT1RAQCkgICAgICAgICAgICAgICA+IGJpbi1tYW4tZG9jLWZpbGVzCisoZmluZCAkUlBNX0JVSUxEX1JPT1Qle19saWJleGVjZGlyfS9naXQtY29yZSAtdHlwZSBmIHwgZ3JlcCAtdkUgImFyY2hpbXBvcnR8c3ZufGN2c3xlbWFpbHxnaXRrfGdpdC1ndWl8Z2l0LWNpdG9vbCIgfCBzZWQgLWUgc0BeJFJQTV9CVUlMRF9ST09UQEApICAgICAgICAgICAgICAgPj4gYmluLW1hbi1kb2MtZmlsZXMKKyhmaW5kICRSUE1fQlVJTERfUk9PVCV7cGVybF92ZW5kb3JsaWJ9IC10eXBlIGYgfCBzZWQgLWUgc0BeJFJQTV9CVUlMRF9ST09UQEApID4+IHBlcmwtZmlsZXMKKyVpZiAleyE/X3dpdGhvdXRfZG9jczoxfTAKKyhmaW5kICRSUE1fQlVJTERfUk9PVCV7X21hbmRpcn0gJFJQTV9CVUlMRF9ST09UL0RvY3VtZW50YXRpb24gLXR5cGUgZiB8IGdyZXAgLXZFICJhcmNoaW1wb3J0fHN2bnxnaXQtY3ZzfGVtYWlsfGdpdGt8Z2l0LWd1aXxnaXQtY2l0b29sIiB8IHNlZCAtZSBzQF4kUlBNX0JVSUxEX1JPT1RAQCAtZSAncy8kLyovJyApID4+IGJpbi1tYW4tZG9jLWZpbGVzCislZWxzZQorcm0gLXJmICRSUE1fQlVJTERfUk9PVCV7X21hbmRpcn0KKyVlbmRpZgorcm0gLXJmICRSUE1fQlVJTERfUk9PVCV7X2RhdGFkaXJ9L2xvY2FsZQorCitta2RpciAtcCAkUlBNX0JVSUxEX1JPT1Qle19zeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZAoraW5zdGFsbCAtbSA2NDQgLVQgY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggJFJQTV9CVUlMRF9ST09UJXtfc3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uLmQvZ2l0CisKKyVjbGVhbgorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorCislZmlsZXMgLWYgYmluLW1hbi1kb2MtZmlsZXMKKyVkZWZhdHRyKC0scm9vdCxyb290KQorJXtfZGF0YWRpcn0vZ2l0LWNvcmUvCislZG9jIFJFQURNRSBDT1BZSU5HIERvY3VtZW50YXRpb24vKi50eHQKKyV7IT9fd2l0aG91dF9kb2NzOiAlZG9jIERvY3VtZW50YXRpb24vKi5odG1sIERvY3VtZW50YXRpb24vaG93dG99CisleyE/X3dpdGhvdXRfZG9jczogJWRvYyBEb2N1bWVudGF0aW9uL3RlY2huaWNhbH0KKyV7X3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kCisKKyVmaWxlcyBzdm4KKyVkZWZhdHRyKC0scm9vdCxyb290KQorJXtfbGliZXhlY2Rpcn0vZ2l0LWNvcmUvKnN2bioKKyVkb2MgRG9jdW1lbnRhdGlvbi8qc3ZuKi50eHQKKyV7IT9fd2l0aG91dF9kb2NzOiAle19tYW5kaXJ9L21hbjEvKnN2biouMSp9CisleyE/X3dpdGhvdXRfZG9jczogJWRvYyBEb2N1bWVudGF0aW9uLypzdm4qLmh0bWwgfQorCislZmlsZXMgY3ZzCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgRG9jdW1lbnRhdGlvbi8qZ2l0LWN2cyoudHh0Cisle19iaW5kaXJ9L2dpdC1jdnNzZXJ2ZXIKKyV7X2xpYmV4ZWNkaXJ9L2dpdC1jb3JlLypjdnMqCisleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW4xLypjdnMqLjEqfQorJXshP193aXRob3V0X2RvY3M6ICVkb2MgRG9jdW1lbnRhdGlvbi8qZ2l0LWN2cyouaHRtbCB9CisKKyVmaWxlcyBhcmNoCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKKyV7X2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1hcmNoaW1wb3J0CisleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW4xL2dpdC1hcmNoaW1wb3J0LjEqfQorJXshP193aXRob3V0X2RvY3M6ICVkb2MgRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC5odG1sIH0KKworJWZpbGVzIGVtYWlsCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgRG9jdW1lbnRhdGlvbi8qZW1haWwqLnR4dAorJXtfbGliZXhlY2Rpcn0vZ2l0LWNvcmUvKmVtYWlsKgorJXshP193aXRob3V0X2RvY3M6ICV7X21hbmRpcn0vbWFuMS8qZW1haWwqLjEqfQorJXshP193aXRob3V0X2RvY3M6ICVkb2MgRG9jdW1lbnRhdGlvbi8qZW1haWwqLmh0bWwgfQorCislZmlsZXMgZ3VpCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyV7X2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1ndWkKKyV7X2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1jaXRvb2wKKyV7X2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1ndWktLWFza3Bhc3MKKyV7X2RhdGFkaXJ9L2dpdC1ndWkvCisleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW4xL2dpdC1ndWkuMSp9CisleyE/X3dpdGhvdXRfZG9jczogJWRvYyBEb2N1bWVudGF0aW9uL2dpdC1ndWkuaHRtbH0KKyV7IT9fd2l0aG91dF9kb2NzOiAle19tYW5kaXJ9L21hbjEvZ2l0LWNpdG9vbC4xKn0KKyV7IT9fd2l0aG91dF9kb2NzOiAlZG9jIERvY3VtZW50YXRpb24vZ2l0LWNpdG9vbC5odG1sfQorCislZmlsZXMgLW4gZ2l0aworJWRlZmF0dHIoLSxyb290LHJvb3QpCislZG9jIERvY3VtZW50YXRpb24vKmdpdGsqLnR4dAorJXtfYmluZGlyfS8qZ2l0ayoKKyV7X2RhdGFkaXJ9L2dpdGsvCisleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW4xLypnaXRrKi4xKn0KKyV7IT9fd2l0aG91dF9kb2NzOiAlZG9jIERvY3VtZW50YXRpb24vKmdpdGsqLmh0bWwgfQorCislZmlsZXMgLW4gZ2l0d2ViCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgZ2l0d2ViL1JFQURNRSBnaXR3ZWIvSU5TVEFMTCBEb2N1bWVudGF0aW9uLypnaXR3ZWIqLnR4dAorJXtfZGF0YWRpcn0vZ2l0d2ViCisleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW4xLypnaXR3ZWIqLjEqfQorJXshP193aXRob3V0X2RvY3M6ICV7X21hbmRpcn0vbWFuNS8qZ2l0d2ViKi41Kn0KKyV7IT9fd2l0aG91dF9kb2NzOiAlZG9jIERvY3VtZW50YXRpb24vKmdpdHdlYiouaHRtbCB9CisKKyVmaWxlcyAtbiBwZXJsLUdpdCAtZiBwZXJsLWZpbGVzCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKworJWZpbGVzIGFsbAorIyBObyBmaWxlcyBmb3IgeW91IQorCislY2hhbmdlbG9nCisqIFN1biBTZXAgMTggMjAxMSBKYWt1YiBOYXJlYnNraSA8am5hcmViQGdtYWlsLmNvbT4KKy0gQWRkIGdpdHdlYiBtYW5wYWdlcyB0byAnZ2l0d2ViJyBzdWJwYWNrYWdlCisKKyogV2VkIEp1biAzMCAyMDEwIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0gQWRkICdnaXR3ZWInIHN1YnBhY2thZ2UuCisKKyogRnJpIE1hciAyNiAyMDEwIElhbiBXYXJkIENvbWZvcnQgPGljb21mb3J0QHN0YW5mb3JkLmVkdT4KKy0gU2hpcCBiYXNoIGNvbXBsZXRpb24gc3VwcG9ydCBmcm9tIGNvbnRyaWIvIGluIHRoZSBjb3JlIHBhY2thZ2UuCisKKyogU3VuIEphbiAzMSAyMDEwIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0gRG8gbm90IHVzZSAlZGVmaW5lIGluc2lkZSAleyE/Li4ufSBjb25zdHJ1Y3QuCisKKyogU2F0IEphbiAzMCAyMDEwIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0gV2UgZG9uJ3Qgc2hpcCBQeXRob24gYml0cyB1bnRpbCBhIHJlYWwgZm9yZWlnbiBzY20gaW50ZXJmYWNlIGNvbWVzLgorCisqIE1vbiBGZWIgMDQgMjAwOSBEYXZpZCBKLiBNZWxsb3IgPGRtZWxsb3JAd2hpc3RsaW5nY2F0LmNvbT4KKy0gZml4ZWQgYnJva2VuIGdpdCBoZWxwIC13IGFmdGVyIHJlbmFtaW5nIHRoZSBnaXQtY29yZSBwYWNrYWdlIHRvIGdpdC4KKworKiBGcmkgU2VwIDEyIDIwMDggUXV5IFRvbnRoYXQgPHF0b250aGF0QGdtYWlsLmNvbT4KKy0gbW92ZSBnaXQtY3Zzc2VydmVyIHRvIGJpbmRpci4KKworKiBTdW4gSnVuIDE1IDIwMDggSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLSBSZW1vdmUgY3VybCBmcm9tIFJlcXVpcmVzIGxpc3QuCisKKyogRnJpIEZlYiAxNSAyMDA4IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+CistIFJlbmFtZSBnaXQtY29yZSB0byBqdXN0IGdpdCBhbmQgcmVuYW1lIG1ldGEgcGFja2FnZSBmcm9tIGdpdCB0byBnaXQtYWxsLgorCisqIFN1biBGZWIgMDMgMjAwOCBKYW1lcyBCb3dlcyA8amJvd2VzQGRhbmdlcm91c2x5aW5jLmNvbT4KKy0gQWRkIGEgQnVpbGRSZXF1aXJlcyBmb3IgZ2V0dGV4dAorCisqIEZyaSBKYW4gMTEgMjAwOCBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CistIEluY2x1ZGUgZ2l0ayBtZXNzYWdlIGZpbGVzCisKKyogU3VuIEphbiAwNiAyMDA4IEphbWVzIEJvd2VzIDxqYm93ZXNAZGFuZ2Vyb3VzbHlpbmMuY29tPgorLSBNYWtlIHRoZSBtZXRhcGFja2FnZSByZXF1aXJlIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIHN1YnBhY2thZ2VzLgorCisqIFdlZCBEZWMgMTIgMjAwNyBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CistIEFkanVzdCBodG1sZGlyIHRvIHBvaW50IGF0IC91c3Ivc2hhcmUvZG9jL2dpdC1jb3JlLSR2ZXJzaW9uLworCisqIFN1biBKdWwgMTUgMjAwNyBTZWFuIEVzdGFicm9va3MgPHNlYW5sa21sQHN5bXBhdGljby5jYT4KKy0gUmVtb3ZlZCBwNGltcG9ydC4KKworKiBUdWUgSnVuIDI2IDIwMDcgUXV5IFRvbnRoYXQgPHF0b250aGF0QGdtYWlsLmNvbT4KKy0gRml4ZWQgcHJvYmxlbXMgbG9va2luZyBmb3Igd3JvbmcgbWFucGFnZXMuCisKKyogVGh1IEp1biAyMSAyMDA3IFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KKy0gQWRkZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyBmb3IgZ2l0LWd1aQorCisqIFR1ZSBNYXkgMTMgMjAwNyBRdXkgVG9udGhhdCA8cXRvbnRoYXRAZ21haWwuY29tPgorLSBBZGRlZCBsaWIgZmlsZXMgZm9yIGdpdC1ndWkKKy0gQWRkZWQgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwgKEFzIG5lZWRlZCBieSBHaXQgVXNlcnMgTWFudWFsKQorCisqIFR1ZSBNYXkgOCAyMDA3IFF1eSBUb250aGF0IDxxdG9udGhhdEBnbWFpbC5jb20+CistIEFkZGVkIGhvd3RvIGZpbGVzCisKKyogVHVlIE1hciAyNyAyMDA3IEV5Z2VuZSBSeWFiaW5raW4gPHJlYS1naXRAY29kZWxhYnMucnU+CistIEFkZGVkIHRoZSBnaXQtcDQgcGFja2FnZTogUGVyZm9yY2UgaW1wb3J0IHN0dWZmLgorCisqIE1vbiBGZWIgMTMgMjAwNyBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgorLSBVcGRhdGUgY29yZSBwYWNrYWdlIGRlc2NyaXB0aW9uIChHaXQgaXNuJ3QgYXMgc3R1cGlkIGFzIGl0IHVzZWQgdG8gYmUpCisKKyogTW9uIEZlYiAxMiAyMDA3IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KKy0gQWRkIGdpdC1ndWkgYW5kIGdpdC1jaXRvb2wuCisKKyogTW9uIE5vdiAxNCAyMDA1IEguIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPiAwLjk5LjlqLTEKKy0gQ2hhbmdlIHN1YnBhY2thZ2UgbmFtZXMgdG8gZ2l0LTxuYW1lPiBpbnN0ZWFkIG9mIGdpdC1jb3JlLTxuYW1lPgorLSBDcmVhdGUgZW1wdHkgcm9vdCBwYWNrYWdlIHdoaWNoIGJyaW5ncyBpbiBhbGwgc3VicGFja2FnZXMKKy0gUmVuYW1lIGdpdC10ayAtPiBnaXRrCisKKyogVGh1IE5vdiAxMCAyMDA1IENocmlzIFdyaWdodCA8Y2hyaXN3QG9zZGwub3JnPiAwLjk5LjlnLTEKKy0gemxpYiBkZXBlbmRlbmN5IGZpeAorLSBNaW5vciBjbGVhbnVwcyBmcm9tIHNwbGl0CistIE1vdmUgYXJjaCBpbXBvcnQgdG8gc2VwYXJhdGUgcGFja2FnZSBhcyB3ZWxsCisKKyogVHVlIFNlcCAyNyAyMDA1IEppbSBSYWRmb3JkIDxyYWRmb3JkQGJsYWNrYmVhbi5vcmc+CistIE1vdmUgcHJvZ3JhbXMgd2l0aCBub24tc3RhbmRhcmQgZGVwZW5kZW5jaWVzIChzdm4sIGN2cywgZW1haWwpCisgIGludG8gc2VwYXJhdGUgcGFja2FnZXMKKworKiBUdWUgU2VwIDI3IDIwMDUgSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+CistIHBhcmFsbGVsaXplIGJ1aWxkCistIENPUFRTIC0+IENGTEFHUworCisqIEZyaSBTZXAgMTYgMjAwNSBDaHJpcyBXcmlnaHQgPGNocmlzd0Bvc2RsLm9yZz4gMC45OS42LTEKKy0gdXBkYXRlIHRvIDAuOTkuNgorCisqIEZyaSBTZXAgMTYgMjAwNSBIb3JzdCBILiB2b24gQnJhbmQgPHZvbmJyYW5kQGluZi51dGZzbS5jbD4KKy0gTGludXMgbm90aWNlZCB0aGF0IGxlc3MgaXMgcmVxdWlyZWQsIGFkZGVkIHRvIHRoZSBkZXBlbmRlbmNpZXMKKworKiBTdW4gU2VwIDExIDIwMDUgSG9yc3QgSC4gdm9uIEJyYW5kIDx2b25icmFuZEBpbmYudXRmc20uY2w+CistIFVwZGF0ZWQgZGVwZW5kZW5jaWVzCistIERvbid0IGFzc3VtZSBtYW5wYWdlcyBhcmUgZ3ppcHBlZAorCisqIFRodSBBdWcgMTggMjAwNSBDaHJpcyBXcmlnaHQgPGNocmlzd0Bvc2RsLm9yZz4gMC45OS40LTQKKy0gZHJvcCBzaF91dGlscywgc2gtdXRpbHMsIGRpZmZ1dGlscywgbWt0ZW1wLCBhbmQgb3BlbnNzbCBSZXF1aXJlcworLSB1c2UgUlBNX09QVF9GTEFHUyBpbiBzcGVjIGZpbGUsIGRyb3AgcGF0Y2gwCisKKyogV2VkIEF1ZyAxNyAyMDA1IFRvbSAic3BvdCIgQ2FsbGF3YXkgPHRjYWxsYXdhQHJlZGhhdC5jb20+IDAuOTkuNC0zCistIHVzZSBkaXN0IHRhZyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYnJhbmNoZXMKKy0gdXNlIHJwbSBvcHRmbGFncyBieSBkZWZhdWx0IChwYXRjaDApCistIG93biAle19kYXRhZGlyfS9naXQtY29yZS8KKworKiBNb24gQXVnIDE1IDIwMDUgQ2hyaXMgV3JpZ2h0IDxjaHJpc3dAb3NkbC5vcmc+CistIHVwZGF0ZSBzcGVjIGZpbGUgdG8gZml4IEJ1aWxkcm9vdCwgUmVxdWlyZXMsIGFuZCBkcm9wIFZlbmRvcgorCisqIFN1biBBdWcgMDcgMjAwNSBIb3JzdCBILiB2b24gQnJhbmQgPHZvbmJyYW5kQGluZi51dGZzbS5jbD4KKy0gUmVkaWQgdGhlIGRlc2NyaXB0aW9uCistIEN1dCBvdmVybG9uZyBtYWtlIGxpbmUsIGxvb3NlbmVkIGNoYW5nZWxvZyBhIGJpdAorLSBJIHRoaW5rIEp1bmlvIChvciBwZXJoYXBzIE9TREw/KSBzaG91bGQgYmUgdmVuZG9yLi4uCisKKyogVGh1IEp1bCAxNCAyMDA1IEVyaWMgQmllZGVybWFuIDxlYmllZGVybUB4bWlzc2lvbi5jb20+CistIEFkZCB0aGUgbWFuIHBhZ2VzLCBhbmQgdGhlIC0td2l0aG91dCBkb2NzIGJ1aWxkIG9wdGlvbgorCisqIFdlZCBKdWwgNyAyMDA1IENocmlzIFdyaWdodCA8Y2hyaXNAb3NkbC5vcmc+CistIGluaXRpYWwgZ2l0IHNwZWMgZmlsZQpkaWZmIC0tZ2l0IGEvZ2l0X3JlbW90ZV9oZWxwZXJzLy5naXRpZ25vcmUgYi9naXRfcmVtb3RlX2hlbHBlcnMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjQ3ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0X3JlbW90ZV9oZWxwZXJzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisvYnVpbGQKKy9kaXN0CmRpZmYgLS1naXQgYS9naXRfcmVtb3RlX2hlbHBlcnMvTWFrZWZpbGUgYi9naXRfcmVtb3RlX2hlbHBlcnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiMDVkYwotLS0gL2Rldi9udWxsCisrKyBiL2dpdF9yZW1vdGVfaGVscGVycy9NYWtlZmlsZQpAQCAtMCwwICsxLDM5IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgZ2l0X3JlbW90ZV9oZWxwZXJzIHB5dGhvbiBzdXBwb3J0IG1vZHVsZXMKKyMKK3B5c2V0dXBmaWxlOj1zZXR1cC5weQorCisjIFNoZWxsIHF1b3RlIChkbyBub3QgdXNlICQoY2FsbCkgdG8gYWNjb21tb2RhdGUgYW5jaWVudCBzZXR1cHMpOworREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCisKK2lmbmRlZiBQWVRIT05fUEFUSAorCWlmZXEgKCQodW5hbWVfUyksRnJlZUJTRCkKKwkJUFlUSE9OX1BBVEggPSAvdXNyL2xvY2FsL2Jpbi9weXRob24KKwllbHNlCisJCVBZVEhPTl9QQVRIID0gL3Vzci9iaW4vcHl0aG9uCisJZW5kaWYKK2VuZGlmCitpZm5kZWYgcHJlZml4CisJcHJlZml4ID0gJChIT01FKQorZW5kaWYKK2lmbmRlZiBWCisJUVVJRVQgPSBACisJUVVJRVRTRVRVUCA9IC0tcXVpZXQKK2VuZGlmCisKK1BZTElCRElSPSQoc2hlbGwgJChQWVRIT05fUEFUSCkgLWMgXAorCSAiaW1wb3J0IHN5czsgXAorCSBwcmludCAnbGliL3B5dGhvbiVpLiVpL3NpdGUtcGFja2FnZXMnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0iKQorCithbGw6ICQocHlzZXR1cGZpbGUpCisJJChRVUlFVCkkKFBZVEhPTl9QQVRIKSAkKHB5c2V0dXBmaWxlKSAkKFFVSUVUU0VUVVApIGJ1aWxkCisKK2luc3RhbGw6ICQocHlzZXR1cGZpbGUpCisJJChQWVRIT05fUEFUSCkgJChweXNldHVwZmlsZSkgaW5zdGFsbCAtLXByZWZpeCAkKERFU1RESVJfU1EpJChwcmVmaXgpCisKK2luc3RsaWJkaXI6ICQocHlzZXR1cGZpbGUpCisJQGVjaG8gIiQoREVTVERJUl9TUSkkKHByZWZpeCkvJChQWUxJQkRJUikiCisKK2NsZWFuOgorCSQoUVVJRVQpJChQWVRIT05fUEFUSCkgJChweXNldHVwZmlsZSkgJChRVUlFVFNFVFVQKSBjbGVhbiAtYQorCSQoUk0pICoucHlvICoucHljCmRpZmYgLS1naXQgYS9naXRfcmVtb3RlX2hlbHBlcnMvX19pbml0X18ucHkgYi9naXRfcmVtb3RlX2hlbHBlcnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmNjljYgotLS0gL2Rldi9udWxsCisrKyBiL2dpdF9yZW1vdGVfaGVscGVycy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIiIiU3VwcG9ydCBsaWJyYXJ5IHBhY2thZ2UgZm9yIGdpdCByZW1vdGUgaGVscGVycy4KKworR2l0IHJlbW90ZSBoZWxwZXJzIGFyZSBoZWxwZXIgY29tbWFuZHMgdGhhdCBpbnRlcmZhY2VzIHdpdGggYSBub24tZ2l0CityZXBvc2l0b3J5IHRvIHByb3ZpZGUgYXV0b21hdGljIGltcG9ydCBvZiBub24tZ2l0IGhpc3RvcnkgaW50byBhIEdpdAorcmVwb3NpdG9yeS4KKworVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBzdXBwb3J0IGxpYnJhcnkgbmVlZGVkIGJ5IHRoZXNlIGhlbHBlcnMuLgorVGhlIGZvbGxvd2luZyBtb2R1bGVzIGFyZSBpbmNsdWRlZDoKKworLSBnaXQuZ2l0IC0gSW50ZXJhY3Rpb24gd2l0aCBHaXQgcmVwb3NpdG9yaWVzCisKKy0gdXRpbCAtIEdlbmVyYWwgdXRpbGl0eSBmdW5jdGlvbmFsaXR5IHVzZSBieSB0aGUgb3RoZXIgbW9kdWxlcyBpbgorICAgICAgICAgdGhpcyBwYWNrYWdlLCBhbmQgYWxzbyB1c2VkIGRpcmVjdGx5IGJ5IHRoZSBoZWxwZXJzLgorIiIiCmRpZmYgLS1naXQgYS9naXRfcmVtb3RlX2hlbHBlcnMvZ2l0L19faW5pdF9fLnB5IGIvZ2l0X3JlbW90ZV9oZWxwZXJzL2dpdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0X3JlbW90ZV9oZWxwZXJzL2dpdC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvZ2l0X3JlbW90ZV9oZWxwZXJzL2dpdC9leHBvcnRlci5weSBiL2dpdF9yZW1vdGVfaGVscGVycy9naXQvZXhwb3J0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlNWY5NgotLS0gL2Rldi9udWxsCisrKyBiL2dpdF9yZW1vdGVfaGVscGVycy9naXQvZXhwb3J0ZXIucHkKQEAgLTAsMCArMSw1OCBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworCitmcm9tIGdpdF9yZW1vdGVfaGVscGVycy51dGlsIGltcG9ydCBjaGVja19jYWxsCisKKworY2xhc3MgR2l0RXhwb3J0ZXIob2JqZWN0KToKKyAgICAiIiJBbiBleHBvcnRlciBmb3IgdGVzdGdpdCByZXBvc2l0b3JpZXMuCisKKyAgICBUaGUgZXhwb3J0ZXIgc2ltcGx5IGRlbGVnYXRlcyB0byBnaXQgZmFzdC1leHBvcnQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwbyk6CisgICAgICAgICIiIkNyZWF0ZXMgYSBuZXcgZXhwb3J0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgcmVwby4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5yZXBvID0gcmVwbworCisgICAgZGVmIGV4cG9ydF9yZXBvKHNlbGYsIGJhc2UsIHJlZnM9Tm9uZSk6CisgICAgICAgICIiIkV4cG9ydHMgYSBmYXN0LWV4cG9ydCBzdHJlYW0gZm9yIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisKKyAgICAgICAgU2ltcGx5IGRlbGVnYXRlcyB0byBnaXQgZmFzdC1lcHhvcnQgYW5kIHBpcGVzIGl0IHRocm91Z2ggc2VkCisgICAgICAgIHRvIG1ha2UgdGhlIHJlZnMgc2hvdyB1cCB1bmRlciB0aGUgcHJlZml4IHJhdGhlciB0aGFuIHRoZQorICAgICAgICBkZWZhdWx0IHJlZnMvaGVhZHMuIFRoaXMgaXMgdG8gZGVtb25zdHJhdGUgaG93IHRoZSBleHBvcnQKKyAgICAgICAgZGF0YSBjYW4gYmUgc3RvcmVkIHVuZGVyIGl0J3Mgb3duIHJlZiAodXNpbmcgdGhlIHJlZnNwZWMKKyAgICAgICAgY2FwYWJpbGl0eSkuCisKKyAgICAgICAgSWYgTm9uZSwgcmVmcyBkZWZhdWx0cyB0byBbIkhFQUQiXS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IHJlZnM6CisgICAgICAgICAgICByZWZzID0gWyJIRUFEIl0KKworICAgICAgICBkaXJuYW1lID0gc2VsZi5yZXBvLmdldF9iYXNlX3BhdGgoYmFzZSkKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oZGlybmFtZSwgJ3Rlc3RnaXQubWFya3MnKSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGlybmFtZSk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJuYW1lKQorCisgICAgICAgIHByaW50ICJmZWF0dXJlIHJlbGF0aXZlLW1hcmtzIgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGlybmFtZSwgJ2dpdC5tYXJrcycpKToKKyAgICAgICAgICAgIHByaW50ICJmZWF0dXJlIGltcG9ydC1tYXJrcz0lcy9naXQubWFya3MiICUgc2VsZi5yZXBvLmhhc2gKKyAgICAgICAgcHJpbnQgImZlYXR1cmUgZXhwb3J0LW1hcmtzPSVzL2dpdC5tYXJrcyIgJSBzZWxmLnJlcG8uaGFzaAorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworICAgICAgICBhcmdzID0gWyJnaXQiLCAiLS1naXQtZGlyPSIgKyBzZWxmLnJlcG8uZ2l0cGF0aCwgImZhc3QtZXhwb3J0IiwgIi0tZXhwb3J0LW1hcmtzPSIgKyBwYXRoXQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0taW1wb3J0LW1hcmtzPSIgKyBwYXRoKQorCisgICAgICAgIGFyZ3MuZXh0ZW5kKHJlZnMpCisKKyAgICAgICAgcDEgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICAgICAgYXJncyA9IFsic2VkIiwgInNfcmVmcy9oZWFkcy9fIiArIHNlbGYucmVwby5wcmVmaXggKyAiX2ciXQorCisgICAgICAgIGNoZWNrX2NhbGwoYXJncywgc3RkaW49cDEuc3Rkb3V0KQpkaWZmIC0tZ2l0IGEvZ2l0X3JlbW90ZV9oZWxwZXJzL2dpdC9naXQucHkgYi9naXRfcmVtb3RlX2hlbHBlcnMvZ2l0L2dpdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDdhMWJmCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0X3JlbW90ZV9oZWxwZXJzL2dpdC9naXQucHkKQEAgLTAsMCArMSw2NzggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiJGdW5jdGlvbmFsaXR5IGZvciBpbnRlcmFjdGluZyB3aXRoIEdpdCByZXBvc2l0b3JpZXMuCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGNsYXNzZXMgZm9yIGludGVyZmFjaW5nIHdpdGggYSBHaXQgcmVwb3NpdG9yeS4KKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKK2Zyb20gYmluYXNjaWkgaW1wb3J0IGhleGxpZnkKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gZ2l0X3JlbW90ZV9oZWxwZXJzLnV0aWwgaW1wb3J0IGRlYnVnLCBlcnJvciwgZGllLCBzdGFydF9jb21tYW5kLCBydW5fY29tbWFuZAorCisKK2RlZiBnZXRfZ2l0X2RpciAoKToKKyAgICAiIiJSZXR1cm4gdGhlIHBhdGggdG8gdGhlIEdJVF9ESVIgZm9yIHRoaXMgcmVwby4iIiIKKyAgICBhcmdzID0gKCJnaXQiLCAicmV2LXBhcnNlIiwgIi0tZ2l0LWRpciIpCisgICAgZXhpdF9jb2RlLCBvdXRwdXQsIGVycm9ycyA9IHJ1bl9jb21tYW5kKGFyZ3MpCisgICAgaWYgZXhpdF9jb2RlOgorICAgICAgICBkaWUoIkZhaWxlZCB0byByZXRyaWV2ZSBnaXQgZGlyIikKKyAgICBhc3NlcnQgbm90IGVycm9ycworICAgIHJldHVybiBvdXRwdXQuc3RyaXAoKQorCisKK2RlZiBwYXJzZV9naXRfY29uZmlnICgpOgorICAgICIiIlJldHVybiBhIGRpY3QgY29udGFpbmluZyB0aGUgcGFyc2VkIHZlcnNpb24gb2YgJ2dpdCBjb25maWcgLWwnLiIiIgorICAgIGV4aXRfY29kZSwgb3V0cHV0LCBlcnJvcnMgPSBydW5fY29tbWFuZCgoImdpdCIsICJjb25maWciLCAiLXoiLCAiLWwiKSkKKyAgICBpZiBleGl0X2NvZGU6CisgICAgICAgIGRpZSgiRmFpbGVkIHRvIHJldHJpZXZlIGdpdCBjb25maWd1cmF0aW9uIikKKyAgICBhc3NlcnQgbm90IGVycm9ycworICAgIHJldHVybiBkaWN0KFtlLnNwbGl0KCdcbicsIDEpIGZvciBlIGluIG91dHB1dC5zcGxpdCgiXDAiKSBpZiBlXSkKKworCitkZWYgZ2l0X2NvbmZpZ19ib29sICh2YWx1ZSk6CisgICAgIiIiQ29udmVydCB0aGUgZ2l2ZW4gZ2l0IGNvbmZpZyBzdHJpbmcgdmFsdWUgdG8gVHJ1ZSBvciBGYWxzZS4KKworICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIGdpdmVuIHN0cmluZyB3YXMgbm90IHJlY29nbml6ZWQgYXMgYQorICAgIGJvb2xlYW4gdmFsdWUuCisKKyAgICAiIiIKKyAgICBub3JtX3ZhbHVlID0gc3RyKHZhbHVlKS5zdHJpcCgpLmxvd2VyKCkKKyAgICBpZiBub3JtX3ZhbHVlIGluICgidHJ1ZSIsICIxIiwgInllcyIsICJvbiIsICIiKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBpZiBub3JtX3ZhbHVlIGluICgiZmFsc2UiLCAiMCIsICJubyIsICJvZmYiLCAibm9uZSIpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJGYWlsZWQgdG8gcGFyc2UgJyVzJyBpbnRvIGEgYm9vbGVhbiB2YWx1ZSIgJSAodmFsdWUpKQorCisKK2RlZiB2YWxpZF9naXRfcmVmIChyZWZfbmFtZSk6CisgICAgIiIiUmV0dXJuIFRydWUgaWZmIHRoZSBnaXZlbiByZWYgbmFtZSBpcyBhIHZhbGlkIGdpdCByZWYgbmFtZS4iIiIKKyAgICAjIFRoZSBmb2xsb3dpbmcgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHRoZSBnaXQgY2hlY2stcmVmLWZvcm1hdAorICAgICMgY29tbWFuZC4gIFRoZSBydWxlcyB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgZ2l0IGNoZWNrLXJlZi1mb3JtYXQoMSkKKyAgICAjIG1hbnVhbCBwYWdlLiAgVGhpcyBjb2RlIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIGNhbGwgdG8KKyAgICAjIGNoZWNrX3JlZm5hbWVfZm9ybWF0KCkgaW4gdGhlIGdpdCBsaWJyYXJ5LCB3aGVuIHN1Y2ggaXMgYXZhaWxhYmxlLgorICAgIGlmIHJlZl9uYW1lLmVuZHN3aXRoKCcvJykgb3IgXAorICAgICAgIHJlZl9uYW1lLnN0YXJ0c3dpdGgoJy4nKSBvciBcCisgICAgICAgcmVmX25hbWUuY291bnQoJy8uJykgb3IgXAorICAgICAgIHJlZl9uYW1lLmNvdW50KCcuLicpIG9yIFwKKyAgICAgICByZWZfbmFtZS5lbmRzd2l0aCgnLmxvY2snKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZm9yIGMgaW4gcmVmX25hbWU6CisgICAgICAgIGlmIG9yZChjKSA8IDB4MjAgb3Igb3JkKGMpID09IDB4N2Ygb3IgYyBpbiAiIH5eOj8qWyI6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIEdpdE9iamVjdEZldGNoZXIob2JqZWN0KToKKworICAgICIiIlByb3ZpZGUgcGFyc2VkIGFjY2VzcyB0byAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gnLgorCisgICAgVGhpcyBwcm92aWRlcyBhIHJlYWQtb25seSBpbnRlcmZhY2UgdG8gdGhlIEdpdCBvYmplY3QgZGF0YWJhc2UuCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgICIiIkluaXRpYXRlIGEgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoJyBzZXNzaW9uLiIiIgorICAgICAgICBzZWxmLnF1ZXVlID0gW10gICMgTGlzdCBvZiBvYmplY3QgbmFtZXMgdG8gYmUgc3VibWl0dGVkCisgICAgICAgIHNlbGYuaW5fdHJhbnNpdCA9IE5vbmUgICMgT2JqZWN0IG5hbWUgY3VycmVudGx5IGluIHRyYW5zaXQKKworICAgICAgICAjICdnaXQgY2F0LWZpbGUgLS1iYXRjaCcgcHJvZHVjZXMgYmluYXJ5IG91dHB1dCB3aGljaCBpcyBsaWtlbHkKKyAgICAgICAgIyB0byBiZSBjb3JydXB0ZWQgYnkgdGhlIGRlZmF1bHQgInJVIi1tb2RlIHBpcGUgb3BlbmVkIGJ5CisgICAgICAgICMgc3RhcnRfY29tbWFuZC4gIChNb2RlID09ICJyVSIgZG9lcyB1bml2ZXJzYWwgbmV3LWxpbmUKKyAgICAgICAgIyBjb252ZXJzaW9uLCB3aGljaCBtYW5nbGVzIGNhcnJpYWdlIHJldHVybnMuKSBUaGVyZWZvcmUsIHdlCisgICAgICAgICMgb3BlbiBhbiBleHBsaWNpdGx5IGJpbmFyeS1zYWZlIHBpcGUgZm9yIHRyYW5zZmVycmluZyB0aGUKKyAgICAgICAgIyBvdXRwdXQgZnJvbSAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gnLgorICAgICAgICBwaXBlX3JfZmQsIHBpcGVfd19mZCA9IG9zLnBpcGUoKQorICAgICAgICBwaXBlX3IgPSBvcy5mZG9wZW4ocGlwZV9yX2ZkLCAicmIiKQorICAgICAgICBwaXBlX3cgPSBvcy5mZG9wZW4ocGlwZV93X2ZkLCAid2IiKQorICAgICAgICBzZWxmLnByb2MgPSBzdGFydF9jb21tYW5kKCgiZ2l0IiwgImNhdC1maWxlIiwgIi0tYmF0Y2giKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBwaXBlX3cpCisgICAgICAgIHNlbGYuZiA9IHBpcGVfcgorCisgICAgZGVmIF9fZGVsX18gKHNlbGYpOgorICAgICAgICAiIiJWZXJpZnkgY29tcGxldGVkIGNvbW11bmljYXRpb24gd2l0aCAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gnLiIiIgorICAgICAgICBhc3NlcnQgbm90IHNlbGYucXVldWUKKyAgICAgICAgYXNzZXJ0IHNlbGYuaW5fdHJhbnNpdCBpcyBOb25lCisgICAgICAgIHNlbGYucHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAgIGFzc2VydCBzZWxmLnByb2Mud2FpdCgpID09IDAgICMgWmVybyBleGl0IGNvZGUKKyAgICAgICAgYXNzZXJ0IHNlbGYuZi5yZWFkKCkgPT0gIiIgICMgTm8gcmVtYWluaW5nIG91dHB1dAorCisgICAgZGVmIF9zdWJtaXRfbmV4dF9vYmplY3QgKHNlbGYpOgorICAgICAgICAiIiJTdWJtaXQgcXVldWUgaXRlbXMgdG8gdGhlICdnaXQgY2F0LWZpbGUgLS1iYXRjaCcgcHJvY2Vzcy4KKworICAgICAgICBJZiB0aGVyZSBhcmUgaXRlbXMgaW4gdGhlIHF1ZXVlLCBhbmQgdGhlcmUgaXMgY3VycmVudGx5IG5vIGl0ZW0KKyAgICAgICAgY3VycmVudGx5IGluICd0cmFuc2l0JywgdGhlbiBwb3AgdGhlIGZpcnN0IGl0ZW0gb2ZmIHRoZSBxdWV1ZSwKKyAgICAgICAgYW5kIHN1Ym1pdCBpdC4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5xdWV1ZSBhbmQgc2VsZi5pbl90cmFuc2l0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmluX3RyYW5zaXQgPSBzZWxmLnF1ZXVlLnBvcCgwKQorICAgICAgICAgICAgcHJpbnQgPj4gc2VsZi5wcm9jLnN0ZGluLCBzZWxmLmluX3RyYW5zaXRbMF0KKworICAgIGRlZiBwdXNoIChzZWxmLCBvYmosIGNhbGxiYWNrKToKKyAgICAgICAgIiIiUHVzaCB0aGUgZ2l2ZW4gb2JqZWN0IG5hbWUgb250byB0aGUgcXVldWUuCisKKyAgICAgICAgVGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlCisgICAgICAgIGJlIGNhbGxlZCBleGFjdGx5IG9uY2Ugd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKyAgICAgICAgLSBzZWxmIC0gdGhpcyBHaXRPYmplY3RGZXRjaGVyIGluc3RhbmNlCisgICAgICAgIC0gb2JqICAtIHRoZSBvYmplY3QgbmFtZSBwcm92aWRlZCB0byBwdXNoKCkKKyAgICAgICAgLSBzaGExIC0gdGhlIFNIQTEgb2YgdGhlIG9iamVjdCwgaWYgJ05vbmUnIG9iaiBpcyBtaXNzaW5nCisgICAgICAgIC0gdCAgICAtIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QgKHRhZy9jb21taXQvdHJlZS9ibG9iKQorICAgICAgICAtIHNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGluIGJ5dGVzCisgICAgICAgIC0gZGF0YSAtIHRoZSBvYmplY3QgY29udGVudHMKKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5xdWV1ZS5hcHBlbmQoKG9iaiwgY2FsbGJhY2spKQorICAgICAgICBzZWxmLl9zdWJtaXRfbmV4dF9vYmplY3QoKSAgIyAoUmUpc3RhcnQgcXVldWUgcHJvY2Vzc2luZworCisgICAgZGVmIHByb2Nlc3NfbmV4dF9lbnRyeSAoc2VsZik6CisgICAgICAgICIiIlJlYWQgdGhlIG5leHQgZW50cnkgb2ZmIHRoZSBxdWV1ZSBhbmQgaW52b2tlIGNhbGxiYWNrLiIiIgorICAgICAgICBvYmosIGNiID0gc2VsZi5pbl90cmFuc2l0CisgICAgICAgIHNlbGYuaW5fdHJhbnNpdCA9IE5vbmUKKyAgICAgICAgaGVhZGVyID0gc2VsZi5mLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgaGVhZGVyID09ICIlcyBtaXNzaW5nXG4iICUgKG9iaik6CisgICAgICAgICAgICBjYihzZWxmLCBvYmosIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2hhMSwgdCwgc2l6ZSA9IGhlYWRlci5zcGxpdCgiICIpCisgICAgICAgIGFzc2VydCBsZW4oc2hhMSkgPT0gNDAKKyAgICAgICAgYXNzZXJ0IHQgaW4gKCJ0YWciLCAiY29tbWl0IiwgInRyZWUiLCAiYmxvYiIpCisgICAgICAgIGFzc2VydCBzaXplLmVuZHN3aXRoKCJcbiIpCisgICAgICAgIHNpemUgPSBpbnQoc2l6ZS5zdHJpcCgpKQorICAgICAgICBkYXRhID0gc2VsZi5mLnJlYWQoc2l6ZSkKKyAgICAgICAgYXNzZXJ0IHNlbGYuZi5yZWFkKDEpID09ICJcbiIKKyAgICAgICAgY2Ioc2VsZiwgb2JqLCBzaGExLCB0LCBzaXplLCBkYXRhKQorICAgICAgICBzZWxmLl9zdWJtaXRfbmV4dF9vYmplY3QoKQorCisgICAgZGVmIHByb2Nlc3MgKHNlbGYpOgorICAgICAgICAiIiJQcm9jZXNzIHRoZSBjdXJyZW50IHF1ZXVlIHVudGlsIGVtcHR5LiIiIgorICAgICAgICB3aGlsZSBzZWxmLmluX3RyYW5zaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnByb2Nlc3NfbmV4dF9lbnRyeSgpCisKKyAgICAjIEhpZ2gtbGV2ZWwgY29udmVuaWVuY2UgbWV0aG9kczoKKworICAgIGRlZiBnZXRfc2hhMSAoc2VsZiwgb2Jqc3BlYyk6CisgICAgICAgICIiIlJldHVybiB0aGUgU0hBMSBvZiB0aGUgb2JqZWN0IHNwZWNpZmllZCBieSAnb2Jqc3BlYycuCisKKyAgICAgICAgUmV0dXJuIE5vbmUgaWYgJ29ianNwZWMnIGRvZXMgbm90IHNwZWNpZnkgYW4gZXhpc3Rpbmcgb2JqZWN0LgorCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBfT2JqSGFuZGxlcihvYmplY3QpOgorICAgICAgICAgICAgIiIiSGVscGVyIGNsYXNzIGZvciBnZXR0aW5nIHRoZSByZXR1cm5lZCBTSEExLiIiIgorICAgICAgICAgICAgZGVmIF9faW5pdF9fIChzZWxmLCBwYXJzZXIpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyID0gcGFyc2VyCisgICAgICAgICAgICAgICAgc2VsZi5zaGExID0gTm9uZQorCisgICAgICAgICAgICBkZWYgX19jYWxsX18gKHNlbGYsIHBhcnNlciwgb2JqLCBzaGExLCB0LCBzaXplLCBkYXRhKToKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBNYW55IHVudXNlZCBhcmd1bWVudHMuIENvdWxkIHRoaXMgYmUgY2hlYXBlcj8KKyAgICAgICAgICAgICAgICBhc3NlcnQgcGFyc2VyID09IHNlbGYucGFyc2VyCisgICAgICAgICAgICAgICAgc2VsZi5zaGExID0gc2hhMQorCisgICAgICAgIGhhbmRsZXIgPSBfT2JqSGFuZGxlcihzZWxmKQorICAgICAgICBzZWxmLnB1c2gob2Jqc3BlYywgaGFuZGxlcikKKyAgICAgICAgc2VsZi5wcm9jZXNzKCkKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIuc2hhMQorCisgICAgZGVmIG9wZW5fb2JqIChzZWxmLCBvYmpzcGVjKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZmlsZSBvYmplY3Qgd3JhcHBpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbmFtZWQgb2JqZWN0LgorCisgICAgICAgIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgLmNsb3NlKCkgb24gdGhlIHJldHVybmVkCisgICAgICAgIGZpbGUgb2JqZWN0LgorCisgICAgICAgIFJhaXNlIEtleUVycm9yIGlmICdvYmpzcGVjJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVwby4KKworICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgX09iakhhbmRsZXIob2JqZWN0KToKKyAgICAgICAgICAgICIiIkhlbHBlciBjbGFzcyBmb3IgcGFyc2luZyB0aGUgcmV0dXJuZWQgZ2l0IG9iamVjdC4iIiIKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgcGFyc2VyKToKKyAgICAgICAgICAgICAgICAiIiJTZXQgdXAgaGVscGVyLiIiIgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyID0gcGFyc2VyCisgICAgICAgICAgICAgICAgc2VsZi5jb250ZW50cyA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgICAgICBzZWxmLmVyciA9IE5vbmUKKworICAgICAgICAgICAgZGVmIF9fY2FsbF9fIChzZWxmLCBwYXJzZXIsIG9iaiwgc2hhMSwgdCwgc2l6ZSwgZGF0YSk6CisgICAgICAgICAgICAgICAgIiIiR2l0IG9iamVjdCBjYWxsYmFjayAoc2VlIEdpdE9iamVjdEZldGNoZXIgZG9jdW1lbnRhdGlvbikuIiIiCisgICAgICAgICAgICAgICAgYXNzZXJ0IHBhcnNlciA9PSBzZWxmLnBhcnNlcgorICAgICAgICAgICAgICAgIGlmIG5vdCBzaGExOiAgIyBNaXNzaW5nIG9iamVjdAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVyciA9ICJNaXNzaW5nIG9iamVjdCAnJXMnIiAlIG9iagorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBzaXplID09IGxlbihkYXRhKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRlbnRzLndyaXRlKGRhdGEpCisKKyAgICAgICAgaGFuZGxlciA9IF9PYmpIYW5kbGVyKHNlbGYpCisgICAgICAgIHNlbGYucHVzaChvYmpzcGVjLCBoYW5kbGVyKQorICAgICAgICBzZWxmLnByb2Nlc3MoKQorICAgICAgICBpZiBoYW5kbGVyLmVycjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGhhbmRsZXIuZXJyKQorICAgICAgICBoYW5kbGVyLmNvbnRlbnRzLnNlZWsoMCkKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIuY29udGVudHMKKworICAgIGRlZiB3YWxrX3RyZWUgKHNlbGYsIHRyZWVfb2Jqc3BlYywgY2FsbGJhY2ssIHByZWZpeCA9ICIiKToKKyAgICAgICAgIiIiUmVjdXJzaXZlbHkgd2FsayB0aGUgZ2l2ZW4gR2l0IHRyZWUgb2JqZWN0LgorCisgICAgICAgIFJlY3Vyc2l2ZWx5IHdhbGsgYWxsIHN1YnRyZWVzIG9mIHRoZSBnaXZlbiB0cmVlIG9iamVjdCwgYW5kCisgICAgICAgIGludm9rZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgcGFzc2luZyB0aHJlZSBhcmd1bWVudHM6CisgICAgICAgIChwYXRoLCBtb2RlLCBkYXRhKSB3aXRoIHRoZSBwYXRoLCBwZXJtaXNzaW9uIGJpdHMsIGFuZCBjb250ZW50cworICAgICAgICBvZiBhbGwgdGhlIGJsb2JzIGZvdW5kIGluIHRoZSBlbnRpcmUgdHJlZSBzdHJ1Y3R1cmUuCisKKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIF9PYmpIYW5kbGVyKG9iamVjdCk6CisgICAgICAgICAgICAiIiJIZWxwZXIgY2xhc3MgZm9yIHdhbGtpbmcgYSBnaXQgdHJlZSBzdHJ1Y3R1cmUuIiIiCisgICAgICAgICAgICBkZWYgX19pbml0X18gKHNlbGYsIHBhcnNlciwgY2IsIHBhdGgsIG1vZGUgPSBOb25lKToKKyAgICAgICAgICAgICAgICAiIiJTZXQgdXAgaGVscGVyLiIiIgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyID0gcGFyc2VyCisgICAgICAgICAgICAgICAgc2VsZi5jYiA9IGNiCisgICAgICAgICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICAgICAgICAgIHNlbGYubW9kZSA9IG1vZGUKKyAgICAgICAgICAgICAgICBzZWxmLmVyciA9IE5vbmUKKworICAgICAgICAgICAgZGVmIHBhcnNlX3RyZWUgKHNlbGYsIHRyZWVkYXRhKToKKyAgICAgICAgICAgICAgICAiIiJQYXJzZSB0cmVlIG9iamVjdCBkYXRhLCB5aWVsZCB0cmVlIGVudHJpZXMuCisKKyAgICAgICAgICAgICAgICBFYWNoIHRyZWUgZW50cnkgaXMgYSAzLXR1cGxlIChtb2RlLCBzaGExLCBwYXRoKQorCisgICAgICAgICAgICAgICAgc2VsZi5wYXRoIGlzIHByZXBlbmRlZCB0byBhbGwgcGF0aHMgeWllbGRlZAorICAgICAgICAgICAgICAgIGZyb20gdGhpcyBtZXRob2QuCisKKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICB3aGlsZSB0cmVlZGF0YToKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGludCh0cmVlZGF0YVs6Nl0sIDEwKQorICAgICAgICAgICAgICAgICAgICAjIFR1cm4gMTAweHh4IGludG8geHh4CisgICAgICAgICAgICAgICAgICAgIGlmIG1vZGUgPiAxMDAwMDA6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlIC09IDEwMDAwMAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgdHJlZWRhdGFbNl0gPT0gIiAiCisgICAgICAgICAgICAgICAgICAgIGkgPSB0cmVlZGF0YS5maW5kKCJcMCIsIDcpCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpID4gMAorICAgICAgICAgICAgICAgICAgICBwYXRoID0gdHJlZWRhdGFbNzppXQorICAgICAgICAgICAgICAgICAgICBzaGExID0gaGV4bGlmeSh0cmVlZGF0YVtpICsgMTogaSArIDIxXSkKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgKG1vZGUsIHNoYTEsIHNlbGYucGF0aCArIHBhdGgpCisgICAgICAgICAgICAgICAgICAgIHRyZWVkYXRhID0gdHJlZWRhdGFbaSArIDIxOl0KKworICAgICAgICAgICAgZGVmIF9fY2FsbF9fIChzZWxmLCBwYXJzZXIsIG9iaiwgc2hhMSwgdCwgc2l6ZSwgZGF0YSk6CisgICAgICAgICAgICAgICAgIiIiR2l0IG9iamVjdCBjYWxsYmFjayAoc2VlIEdpdE9iamVjdEZldGNoZXIgZG9jdW1lbnRhdGlvbikuIiIiCisgICAgICAgICAgICAgICAgYXNzZXJ0IHBhcnNlciA9PSBzZWxmLnBhcnNlcgorICAgICAgICAgICAgICAgIGlmIG5vdCBzaGExOiAgIyBNaXNzaW5nIG9iamVjdAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVyciA9ICJNaXNzaW5nIG9iamVjdCAnJXMnIiAlIChvYmopCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGFzc2VydCBzaXplID09IGxlbihkYXRhKQorICAgICAgICAgICAgICAgIGlmIHQgPT0gInRyZWUiOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnBhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGggKz0gIi8iCisgICAgICAgICAgICAgICAgICAgICMgUmVjdXJzZSBpbnRvIGFsbCBibG9icyBhbmQgc3VidHJlZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIG0sIHMsIHAgaW4gc2VsZi5wYXJzZV90cmVlKGRhdGEpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnB1c2gocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fKHNlbGYucGFyc2VyLCBzZWxmLmNiLCBwLCBtKSkKKyAgICAgICAgICAgICAgICBlbGlmIHQgPT0gImJsb2IiOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNiKHNlbGYucGF0aCwgc2VsZi5tb2RlLCBkYXRhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gb2JqZWN0IHR5cGUgJyVzJyIgJSAodCkpCisKKyAgICAgICAgc2VsZi5wdXNoKHRyZWVfb2Jqc3BlYywgX09iakhhbmRsZXIoc2VsZiwgY2FsbGJhY2ssIHByZWZpeCkpCisgICAgICAgIHNlbGYucHJvY2VzcygpCisKKworY2xhc3MgR2l0UmVmTWFwKG9iamVjdCk6CisKKyAgICAiIiJNYXAgR2l0IHJlZiBuYW1lcyB0byB0aGUgR2l0IG9iamVjdCBuYW1lcyB0aGV5IGN1cnJlbnRseSBwb2ludCB0by4KKworICAgIEJlaGF2ZXMgbGlrZSBhIGRpY3Rpb25hcnkgb2YgR2l0IHJlZiBuYW1lcyAtPiBHaXQgb2JqZWN0IG5hbWVzLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIG9ial9mZXRjaGVyKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEdpdCByZWYgLT4gb2JqZWN0IG1hcC4iIiIKKyAgICAgICAgc2VsZi5vYmpfZmV0Y2hlciA9IG9ial9mZXRjaGVyCisgICAgICAgIHNlbGYuX2NhY2hlID0ge30gICMgZGljdDogcmVmbmFtZSAtPiBvYmpuYW1lCisKKyAgICBkZWYgX2xvYWQgKHNlbGYsIHJlZik6CisgICAgICAgICIiIlJldHJpZXZlIHRoZSBvYmplY3QgY3VycmVudGx5IGJvdW5kIHRvIHRoZSBnaXZlbiByZWYuCisKKyAgICAgICAgVGhlIG5hbWUgb2YgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IHRoZSBnaXZlbiByZWYgaXMgc3RvcmVkCisgICAgICAgIGludG8gdGhpcyBtYXBwaW5nLCBhbmQgYWxzbyByZXR1cm5lZC4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgcmVmIG5vdCBpbiBzZWxmLl9jYWNoZToKKyAgICAgICAgICAgIHNlbGYuX2NhY2hlW3JlZl0gPSBzZWxmLm9ial9mZXRjaGVyLmdldF9zaGExKHJlZikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlW3JlZl0KKworICAgIGRlZiBfX2NvbnRhaW5zX18gKHNlbGYsIHJlZm5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZ2l2ZW4gcmVmbmFtZSBpcyBwcmVzZW50IGluIHRoaXMgY2FjaGUuIiIiCisgICAgICAgIHJldHVybiBib29sKHNlbGYuX2xvYWQocmVmbmFtZSkpCisKKyAgICBkZWYgX19nZXRpdGVtX18gKHNlbGYsIHJlZm5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGdpdCBvYmplY3QgbmFtZSBwb2ludGVkIHRvIGJ5IHRoZSBnaXZlbiByZWZuYW1lLiIiIgorICAgICAgICBjb21taXQgPSBzZWxmLl9sb2FkKHJlZm5hbWUpCisgICAgICAgIGlmIGNvbW1pdCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoIlVua25vd24gcmVmICclcyciICUgKHJlZm5hbWUpKQorICAgICAgICByZXR1cm4gY29tbWl0CisKKyAgICBkZWYgZ2V0IChzZWxmLCByZWZuYW1lLCBkZWZhdWx0ID0gTm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgZ2l0IG9iamVjdCBuYW1lIHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuIHJlZm5hbWUuIiIiCisgICAgICAgIGNvbW1pdCA9IHNlbGYuX2xvYWQocmVmbmFtZSkKKyAgICAgICAgaWYgY29tbWl0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICByZXR1cm4gY29tbWl0CisKKworY2xhc3MgR2l0RklDb21taXQob2JqZWN0KToKKworICAgICIiIkVuY2Fwc3VsYXRlIHRoZSBkYXRhIGluIGEgR2l0IGZhc3QtaW1wb3J0IGNvbW1pdCBjb21tYW5kLiIiIgorCisgICAgU0hBMVJFID0gcmUuY29tcGlsZShyJ15bMC05YS1mXXs0MH0kJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZV9tb2RlIChjbHMsIG1vZGUpOgorICAgICAgICAiIiJWZXJpZnkgdGhlIGdpdmVuIGdpdCBmaWxlIG1vZGUsIGFuZCByZXR1cm4gaXQgYXMgYSBzdHJpbmcuIiIiCisgICAgICAgIGFzc2VydCBtb2RlIGluICg2NDQsIDc1NSwgMTAwNjQ0LCAxMDA3NTUsIDEyMDAwMCkKKyAgICAgICAgcmV0dXJuICIlaSIgJSAobW9kZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZV9vYmpuYW1lIChjbHMsIG9iam5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGdpdmVuIG9iamVjdCBuYW1lIChvciBtYXJrIG51bWJlcikgYXMgYSBzdHJpbmcuIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqbmFtZSwgaW50KTogICMgT2JqZWN0IG5hbWUgaXMgYSBtYXJrIG51bWJlcgorICAgICAgICAgICAgYXNzZXJ0IG9iam5hbWUgPiAwCisgICAgICAgICAgICByZXR1cm4gIjolaSIgJSAob2JqbmFtZSkKKworICAgICAgICAjIE5vIGV4aXN0ZW5jZSBjaGVjayBpcyBkb25lLCBvbmx5IGNoZWNrcyBmb3IgdmFsaWQgZm9ybWF0CisgICAgICAgIGFzc2VydCBjbHMuU0hBMVJFLm1hdGNoKG9iam5hbWUpICAjIE9iamVjdCBuYW1lIGlzIHZhbGlkIFNIQTEKKyAgICAgICAgcmV0dXJuIG9iam5hbWUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBxdW90ZV9wYXRoIChjbHMsIHBhdGgpOgorICAgICAgICAiIiJSZXR1cm4gYSBxdW90ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gcGF0aC4iIiIKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgiXFwiLCAiXFxcXCIpCisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoIlxuIiwgIlxcbiIpCisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoJyInLCAnXFwiJykKKyAgICAgICAgcmV0dXJuICciJXMiJyAlIChwYXRoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhcnNlX3BhdGggKGNscywgcGF0aCk6CisgICAgICAgICIiIlZlcmlmeSB0aGF0IHRoZSBnaXZlbiBwYXRoIGlzIHZhbGlkLCBhbmQgcXVvdGUgaXQsIGlmIG5lZWRlZC4iIiIKKyAgICAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKHBhdGgsIGludCkgICMgQ2Fubm90IGJlIGEgbWFyayBudW1iZXIKKworICAgICAgICAjIFRoZXNlIGNoZWNrcyB2ZXJpZnkgdGhlIHJ1bGVzIG9uIHRoZSBmYXN0LWltcG9ydCBtYW4gcGFnZQorICAgICAgICBhc3NlcnQgbm90IHBhdGguY291bnQoIi8vIikKKyAgICAgICAgYXNzZXJ0IG5vdCBwYXRoLmVuZHN3aXRoKCIvIikKKyAgICAgICAgYXNzZXJ0IG5vdCBwYXRoLnN0YXJ0c3dpdGgoIi8iKQorICAgICAgICBhc3NlcnQgbm90IHBhdGguY291bnQoIi8uLyIpCisgICAgICAgIGFzc2VydCBub3QgcGF0aC5jb3VudCgiLy4uLyIpCisgICAgICAgIGFzc2VydCBub3QgcGF0aC5lbmRzd2l0aCgiLy4iKQorICAgICAgICBhc3NlcnQgbm90IHBhdGguZW5kc3dpdGgoIi8uLiIpCisgICAgICAgIGFzc2VydCBub3QgcGF0aC5zdGFydHN3aXRoKCIuLyIpCisgICAgICAgIGFzc2VydCBub3QgcGF0aC5zdGFydHN3aXRoKCIuLi8iKQorCisgICAgICAgIGlmIHBhdGguY291bnQoJyInKSArIHBhdGguY291bnQoJ1xuJykgKyBwYXRoLmNvdW50KCdcXCcpOgorICAgICAgICAgICAgcmV0dXJuIGNscy5xdW90ZV9wYXRoKHBhdGgpCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIG5hbWUsIGVtYWlsLCB0aW1lc3RhbXAsIHRpbWV6b25lLCBtZXNzYWdlKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEdpdCBmYXN0LWltcG9ydCBjb21taXQsIHdpdGggdGhlIGdpdmVuIG1ldGFkYXRhLiIiIgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZW1haWwgPSBlbWFpbAorICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcAorICAgICAgICBzZWxmLnRpbWV6b25lID0gdGltZXpvbmUKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxmLnBhdGhvcHMgPSBbXSAgIyBMaXN0IG9mIHBhdGggb3BlcmF0aW9ucyBpbiB0aGlzIGNvbW1pdAorCisgICAgZGVmIG1vZGlmeSAoc2VsZiwgbW9kZSwgYmxvYm5hbWUsIHBhdGgpOgorICAgICAgICAiIiJBZGQgYSBmaWxlIG1vZGlmaWNhdGlvbiB0byB0aGlzIEdpdCBmYXN0LWltcG9ydCBjb21taXQuIiIiCisgICAgICAgIHNlbGYucGF0aG9wcy5hcHBlbmQoKCJNIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9tb2RlKG1vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX29iam5hbWUoYmxvYm5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX3BhdGgocGF0aCkpKQorCisgICAgZGVmIGRlbGV0ZSAoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIkFkZCBhIGZpbGUgZGVsZXRpb24gdG8gdGhpcyBHaXQgZmFzdC1pbXBvcnQgY29tbWl0LiIiIgorICAgICAgICBzZWxmLnBhdGhvcHMuYXBwZW5kKCgiRCIsIHNlbGYucGFyc2VfcGF0aChwYXRoKSkpCisKKyAgICBkZWYgY29weSAoc2VsZiwgcGF0aCwgbmV3cGF0aCk6CisgICAgICAgICIiIkFkZCBhIGZpbGUgY29weSB0byB0aGlzIEdpdCBmYXN0LWltcG9ydCBjb21taXQuIiIiCisgICAgICAgIHNlbGYucGF0aG9wcy5hcHBlbmQoKCJDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9wYXRoKHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX3BhdGgobmV3cGF0aCkpKQorCisgICAgZGVmIHJlbmFtZSAoc2VsZiwgcGF0aCwgbmV3cGF0aCk6CisgICAgICAgICIiIkFkZCBhIGZpbGUgcmVuYW1lIHRvIHRoaXMgR2l0IGZhc3QtaW1wb3J0IGNvbW1pdC4iIiIKKyAgICAgICAgc2VsZi5wYXRob3BzLmFwcGVuZCgoIlIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX3BhdGgocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfcGF0aChuZXdwYXRoKSkpCisKKyAgICBkZWYgbm90ZSAoc2VsZiwgYmxvYm5hbWUsIGNvbW1pdCk6CisgICAgICAgICIiIkFkZCBhIG5vdGUgb2JqZWN0IHRvIHRoaXMgR2l0IGZhc3QtaW1wb3J0IGNvbW1pdC4iIiIKKyAgICAgICAgc2VsZi5wYXRob3BzLmFwcGVuZCgoIk4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX29iam5hbWUoYmxvYm5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX29iam5hbWUoY29tbWl0KSkpCisKKyAgICBkZWYgZGVsZXRlYWxsIChzZWxmKToKKyAgICAgICAgIiIiRGVsZXRlIGFsbCBmaWxlcyBpbiB0aGlzIEdpdCBmYXN0LWltcG9ydCBjb21taXQuIiIiCisgICAgICAgIHNlbGYucGF0aG9wcy5hcHBlbmQoImRlbGV0ZWFsbCIpCisKKworY2xhc3MgVGVzdEdpdEZJQ29tbWl0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIkdpdEZJQ29tbWl0IHNlbGZ0ZXN0cy4iIiIKKworICAgIGRlZiB0ZXN0X2Jhc2ljIChzZWxmKToKKyAgICAgICAgIiIiR2l0RklDb21taXQgYmFzaWMgc2VsZnRlc3RzLiIiIgorCisgICAgICAgIGRlZiBleHBlY3RfZmFpbCAobWV0aG9kLCBkYXRhKToKKyAgICAgICAgICAgICIiIlZlcmlmeSB0aGF0IHRoZSBtZXRob2QoZGF0YSkgcmFpc2VzIGFuIEFzc2VydGlvbkVycm9yLiIiIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1ldGhvZChkYXRhKQorICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkZhaWxlZCB0ZXN0IGZvciBpbnZhbGlkIGRhdGEgJyVzKCVzKSciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXRob2QuX19uYW1lX18sIHJlcHIoZGF0YSkpKQorCisgICAgZGVmIHRlc3RfcGFyc2VfbW9kZSAoc2VsZik6CisgICAgICAgICIiIkdpdEZJQ29tbWl0LnBhcnNlX21vZGUoKSBzZWxmdGVzdHMuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoR2l0RklDb21taXQucGFyc2VfbW9kZSg2NDQpLCAiNjQ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChHaXRGSUNvbW1pdC5wYXJzZV9tb2RlKDc1NSksICI3NTUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdpdEZJQ29tbWl0LnBhcnNlX21vZGUoMTAwNjQ0KSwgIjEwMDY0NCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoR2l0RklDb21taXQucGFyc2VfbW9kZSgxMDA3NTUpLCAiMTAwNzU1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChHaXRGSUNvbW1pdC5wYXJzZV9tb2RlKDEyMDAwMCksICIxMjAwMDAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2VfbW9kZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX21vZGUsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX21vZGUsIDYwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX21vZGUsICI2NDQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2VfbW9kZSwgImFiYyIpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9vYmpuYW1lIChzZWxmKToKKyAgICAgICAgIiIiR2l0RklDb21taXQucGFyc2Vfb2JqbmFtZSgpIHNlbGZ0ZXN0cy4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChHaXRGSUNvbW1pdC5wYXJzZV9vYmpuYW1lKDEpLCAiOjEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2Vfb2JqbmFtZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX29iam5hbWUsIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdpdEZJQ29tbWl0LnBhcnNlX29iam5hbWUoIjAxMjM0NTY3ODkiICogNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIjAxMjM0NTY3ODkiICogNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChHaXRGSUNvbW1pdC5wYXJzZV9vYmpuYW1lKCIyNDY4YWJjZGVmIiAqIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIyNDY4YWJjZGVmIiAqIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9vYmpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjZGVmZ2hpaiIgKiA0KQorCisgICAgZGVmIHRlc3RfcGFyc2VfcGF0aCAoc2VsZik6CisgICAgICAgICIiIkdpdEZJQ29tbWl0LnBhcnNlX3BhdGgoKSBzZWxmdGVzdHMuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoR2l0RklDb21taXQucGFyc2VfcGF0aCgiZm9vL2JhciIpLCAiZm9vL2JhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoR2l0RklDb21taXQucGFyc2VfcGF0aCgicGF0aC93aXRoXG4gYW5kIFwiIGluIGl0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyJwYXRoL3dpdGhcXG4gYW5kIFxcIiBpbiBpdCInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2VfcGF0aCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX3BhdGgsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9wYXRoLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX3BhdGgsICJmb28vL2JhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9wYXRoLCAiZm9vL2Jhci8iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2VfcGF0aCwgIi9mb28vYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX3BhdGgsICJmb28vLi9iYXIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2VfcGF0aCwgImZvby8uLi9iYXIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgR2l0RklDb21taXQucGFyc2VfcGF0aCwgImZvby9iYXIvLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9wYXRoLCAiZm9vL2Jhci8uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBHaXRGSUNvbW1pdC5wYXJzZV9wYXRoLCAiLi9mb28vYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIEdpdEZJQ29tbWl0LnBhcnNlX3BhdGgsICIuLi9mb28vYmFyIikKKworCitjbGFzcyBHaXRGYXN0SW1wb3J0KG9iamVjdCk6CisKKyAgICAiIiJFbmNhcHN1bGF0ZSBjb21tdW5pY2F0aW9uIHdpdGggZ2l0IGZhc3QtaW1wb3J0LiIiIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBmLCBvYmpfZmV0Y2hlciwgbGFzdF9tYXJrID0gMCk6CisgICAgICAgICIiIlNldCB1cCBzZWxmIHRvIGNvbW11bmljYXRlIHdpdGggYSBmYXN0LWltcG9ydCBwcm9jZXNzIHRocm91Z2ggZi4iIiIKKyAgICAgICAgc2VsZi5mID0gZiAgIyBGaWxlIG9iamVjdCB3aGVyZSBmYXN0LWltcG9ydCBzdHJlYW0gaXMgd3JpdHRlbgorICAgICAgICBzZWxmLm9ial9mZXRjaGVyID0gb2JqX2ZldGNoZXIgICMgR2l0T2JqZWN0RmV0Y2hlciBpbnN0YW5jZQorICAgICAgICBzZWxmLm5leHRfbWFyayA9IGxhc3RfbWFyayArIDEgICMgTmV4dCBtYXJrIG51bWJlcgorICAgICAgICBzZWxmLnJlZnMgPSBzZXQoKSAgIyBLZWVwIHRyYWNrIG9mIHRoZSByZWZuYW1lcyB3ZSd2ZSBzZWVuCisKKyAgICBkZWYgY29tbWVudCAoc2VsZiwgcyk6CisgICAgICAgICIiIldyaXRlIHRoZSBnaXZlbiBjb21tZW50IGluIHRoZSBmYXN0LWltcG9ydCBzdHJlYW0uIiIiCisgICAgICAgIGFzc2VydCAiXG4iIG5vdCBpbiBzLCAiTWFsZm9ybWVkIGNvbW1lbnQ6ICclcyciICUgKHMpCisgICAgICAgIHNlbGYuZi53cml0ZSgiIyAlc1xuIiAlIChzKSkKKworICAgIGRlZiBjb21taXQgKHNlbGYsIHJlZiwgY29tbWl0ZGF0YSk6CisgICAgICAgICIiIk1ha2UgYSBjb21taXQgb24gdGhlIGdpdmVuIHJlZiwgd2l0aCB0aGUgZ2l2ZW4gR2l0RklDb21taXQuCisKKyAgICAgICAgUmV0dXJuIHRoZSBtYXJrIG51bWJlciBpZGVudGlmeWluZyB0aGlzIGNvbW1pdC4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5mLndyaXRlKCIiIlwKK2NvbW1pdCAlKHJlZilzCittYXJrIDolKG1hcmspaQorY29tbWl0dGVyICUobmFtZSlzIDwlKGVtYWlsKXM+ICUodGltZXN0YW1wKWkgJSh0aW1lem9uZSlzCitkYXRhICUobXNnTGVuZ3RoKWkKKyUobXNnKXMKKyIiIiAlIHsKKyAgICAncmVmJzogcmVmLAorICAgICdtYXJrJzogc2VsZi5uZXh0X21hcmssCisgICAgJ25hbWUnOiBjb21taXRkYXRhLm5hbWUsCisgICAgJ2VtYWlsJzogY29tbWl0ZGF0YS5lbWFpbCwKKyAgICAndGltZXN0YW1wJzogY29tbWl0ZGF0YS50aW1lc3RhbXAsCisgICAgJ3RpbWV6b25lJzogY29tbWl0ZGF0YS50aW1lem9uZSwKKyAgICAnbXNnTGVuZ3RoJzogbGVuKGNvbW1pdGRhdGEubWVzc2FnZSksCisgICAgJ21zZyc6IGNvbW1pdGRhdGEubWVzc2FnZSwKK30pCisKKyAgICAgICAgaWYgcmVmIG5vdCBpbiBzZWxmLnJlZnM6CisgICAgICAgICAgICBzZWxmLnJlZnMuYWRkKHJlZikKKyAgICAgICAgICAgIHBhcmVudCA9IHJlZiArICJeMCIKKyAgICAgICAgICAgIGlmIHNlbGYub2JqX2ZldGNoZXIuZ2V0X3NoYTEocGFyZW50KToKKyAgICAgICAgICAgICAgICBzZWxmLmYud3JpdGUoImZyb20gJXNcbiIgJSAocGFyZW50KSkKKworICAgICAgICBmb3Igb3AgaW4gY29tbWl0ZGF0YS5wYXRob3BzOgorICAgICAgICAgICAgc2VsZi5mLndyaXRlKCIgIi5qb2luKG9wKSkKKyAgICAgICAgICAgIHNlbGYuZi53cml0ZSgiXG4iKQorICAgICAgICBzZWxmLmYud3JpdGUoIlxuIikKKyAgICAgICAgcmV0dmFsID0gc2VsZi5uZXh0X21hcmsKKyAgICAgICAgc2VsZi5uZXh0X21hcmsgKz0gMQorICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgYmxvYiAoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkltcG9ydCB0aGUgZ2l2ZW4gYmxvYi4KKworICAgICAgICBSZXR1cm4gdGhlIG1hcmsgbnVtYmVyIGlkZW50aWZ5aW5nIHRoaXMgYmxvYi4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5mLndyaXRlKCJibG9iXG5tYXJrIDolaVxuZGF0YSAlaVxuJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgKHNlbGYubmV4dF9tYXJrLCBsZW4oZGF0YSksIGRhdGEpKQorICAgICAgICByZXR2YWwgPSBzZWxmLm5leHRfbWFyaworICAgICAgICBzZWxmLm5leHRfbWFyayArPSAxCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiByZXNldCAoc2VsZiwgcmVmLCBvYmpuYW1lKToKKyAgICAgICAgIiIiUmVzZXQgdGhlIGdpdmVuIHJlZiB0byBwb2ludCBhdCB0aGUgZ2l2ZW4gR2l0IG9iamVjdC4iIiIKKyAgICAgICAgc2VsZi5mLndyaXRlKCJyZXNldCAlc1xuZnJvbSAlc1xuXG4iICUKKyAgICAgICAgICAgICAgICAgICAgIChyZWYsIEdpdEZJQ29tbWl0LnBhcnNlX29iam5hbWUob2JqbmFtZSkpKQorICAgICAgICBpZiByZWYgbm90IGluIHNlbGYucmVmczoKKyAgICAgICAgICAgIHNlbGYucmVmcy5hZGQocmVmKQorCisKK2NsYXNzIEdpdE5vdGVzKG9iamVjdCk6CisKKyAgICAiIiJFbmNhcHN1bGF0ZSBhY2Nlc3MgdG8gR2l0IG5vdGVzLgorCisgICAgU2ltdWxhdGVzIGEgZGljdGlvbmFyeSBvZiBvYmplY3QgbmFtZSAoU0hBMSkgLT4gR2l0IG5vdGUgbWFwcGluZ3MuCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgbm90ZXNfcmVmLCBvYmpfZmV0Y2hlcik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBHaXQgbm90ZXMgaW50ZXJmYWNlLCBib3VuZCB0byB0aGUgZ2l2ZW4gbm90ZXMgcmVmLiIiIgorICAgICAgICBzZWxmLm5vdGVzX3JlZiA9IG5vdGVzX3JlZgorICAgICAgICBzZWxmLm9ial9mZXRjaGVyID0gb2JqX2ZldGNoZXIgICMgVXNlZCB0byBnZXQgb2JqZWN0cyBmcm9tIHJlcG8KKyAgICAgICAgc2VsZi5pbXBvcnRzID0gW10gICMgbGlzdDogKG9iam5hbWUsIG5vdGUgZGF0YSBibG9iIG5hbWUpIHR1cGxlcworCisgICAgZGVmIF9fZGVsX18gKHNlbGYpOgorICAgICAgICAiIiJWZXJpZnkgdGhhdCBzZWxmLmNvbW1pdF9ub3RlcygpIHdhcyBjYWxsZWQgYmVmb3JlIGRlc3RydWN0aW9uLiIiIgorICAgICAgICBpZiBzZWxmLmltcG9ydHM6CisgICAgICAgICAgICBlcnJvcigiTWlzc2luZyBjYWxsIHRvIHNlbGYuY29tbWl0X25vdGVzKCkuIikKKyAgICAgICAgICAgIGVycm9yKCIlaSBub3RlcyBhcmUgbm90IGNvbW1pdHRlZCEiLCBsZW4oc2VsZi5pbXBvcnRzKSkKKworICAgIGRlZiBfbG9hZCAoc2VsZiwgb2JqbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgbm90ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZ2l0IG9iamVjdC4KKworICAgICAgICBUaGUgbm90ZSBkYXRhIGlzIHJldHVybmVkIGluIHN0cmluZyBmb3JtLiBJZiBubyBub3RlIGlzIGZvdW5kCisgICAgICAgIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LCBOb25lIGlzIHJldHVybmVkLgorCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gc2VsZi5vYmpfZmV0Y2hlci5vcGVuX29iaigiJXM6JXMiICUgKHNlbGYubm90ZXNfcmVmLCBvYmpuYW1lKSkKKyAgICAgICAgICAgIHJldCA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0ID0gTm9uZQorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgX19nZXRpdGVtX18gKHNlbGYsIG9iam5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5vdGUgY29udGVudHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBvYmplY3QuCisKKyAgICAgICAgUmFpc2UgS2V5RXJyb3IgaWYgZ2l2ZW4gb2JqZWN0IGhhcyBubyBhc3NvY2lhdGVkIG5vdGUuCisKKyAgICAgICAgIiIiCisgICAgICAgIGJsb2JkYXRhID0gc2VsZi5fbG9hZChvYmpuYW1lKQorICAgICAgICBpZiBibG9iZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoIk9iamVjdCAnJXMnIGhhcyBubyBub3RlIiAlIChvYmpuYW1lKSkKKyAgICAgICAgcmV0dXJuIGJsb2JkYXRhCisKKyAgICBkZWYgZ2V0IChzZWxmLCBvYmpuYW1lLCBkZWZhdWx0ID0gTm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgbm90ZSBjb250ZW50cyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG9iamVjdC4KKworICAgICAgICBSZXR1cm4gZ2l2ZW4gZGVmYXVsdCBpZiBnaXZlbiBvYmplY3QgaGFzIG5vIGFzc29jaWF0ZWQgbm90ZS4KKworICAgICAgICAiIiIKKyAgICAgICAgYmxvYmRhdGEgPSBzZWxmLl9sb2FkKG9iam5hbWUpCisgICAgICAgIGlmIGJsb2JkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICByZXR1cm4gYmxvYmRhdGEKKworICAgIGRlZiBpbXBvcnRfbm90ZSAoc2VsZiwgb2JqbmFtZSwgZGF0YSwgZ2ZpKToKKyAgICAgICAgIiIiVGVsbCBnaXQgZmFzdC1pbXBvcnQgdG8gc3RvcmUgZGF0YSBhcyBhIG5vdGUgZm9yIG9iam5hbWUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgdXNlcyB0aGUgZ2l2ZW4gR2l0RmFzdEltcG9ydCBvYmplY3QgdG8gY3JlYXRlIGEKKyAgICAgICAgYmxvYiBjb250YWluaW5nIHRoZSBnaXZlbiBub3RlIGRhdGEuICBBbHNvIGFuIGVudHJ5IG1hcHBpbmcgdGhlCisgICAgICAgIGdpdmVuIG9iamVjdCBuYW1lIHRvIHRoZSBjcmVhdGVkIGJsb2IgaXMgc3RvcmVkIHVudGlsCisgICAgICAgIGNvbW1pdF9ub3RlcygpIGlzIGNhbGxlZC4KKworICAgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2Qgb25seSB3b3JrcyBpZiBpdCBpcyBsYXRlciBmb2xsb3dlZCBieSBhCisgICAgICAgIGNhbGwgdG8gc2VsZi5jb21taXRfbm90ZXMoKSAod2hpY2ggcHJvZHVjZXMgdGhlIG5vdGUgY29tbWl0CisgICAgICAgIHRoYXQgcmVmZXJzIHRvIHRoZSBibG9iIHByb2R1Y2VkIGhlcmUpLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgZGF0YS5lbmRzd2l0aCgiXG4iKToKKyAgICAgICAgICAgIGRhdGEgKz0gIlxuIgorICAgICAgICBnZmkuY29tbWVudCgiSW1wb3J0aW5nIG5vdGUgZm9yIG9iamVjdCAlcyIgJSAob2JqbmFtZSkpCisgICAgICAgIG1hcmsgPSBnZmkuYmxvYihkYXRhKQorICAgICAgICBzZWxmLmltcG9ydHMuYXBwZW5kKChvYmpuYW1lLCBtYXJrKSkKKworICAgIGRlZiBjb21taXRfbm90ZXMgKHNlbGYsIGdmaSwgYXV0aG9yLCBtZXNzYWdlKToKKyAgICAgICAgIiIiUHJvZHVjZSBhIGdpdCBmYXN0LWltcG9ydCBub3RlIGNvbW1pdCBmb3IgdGhlIGltcG9ydGVkIG5vdGVzLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHVzZXMgdGhlIGdpdmVuIEdpdEZhc3RJbXBvcnQgb2JqZWN0IHRvIGNyZWF0ZSBhCisgICAgICAgIGNvbW1pdCBvbiB0aGUgbm90ZXMgcmVmLCBpbnRyb2R1Y2luZyB0aGUgbm90ZXMgcHJldmlvdXNseQorICAgICAgICBzdWJtaXR0ZWQgdG8gaW1wb3J0X25vdGUoKS4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuaW1wb3J0czoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBjb21taXRkYXRhID0gR2l0RklDb21taXQoYXV0aG9yWzBdLCBhdXRob3JbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnRpbWUoKSwgIjAwMDAiLCBtZXNzYWdlKQorICAgICAgICBmb3Igb2JqbmFtZSwgYmxvYm5hbWUgaW4gc2VsZi5pbXBvcnRzOgorICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob2JqbmFtZSwgaW50KSBhbmQgb2JqbmFtZSA+IDAKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJsb2JuYW1lLCBpbnQpIGFuZCBibG9ibmFtZSA+IDAKKyAgICAgICAgICAgIGNvbW1pdGRhdGEubm90ZShibG9ibmFtZSwgb2JqbmFtZSkKKyAgICAgICAgZ2ZpLmNvbW1pdChzZWxmLm5vdGVzX3JlZiwgY29tbWl0ZGF0YSkKKyAgICAgICAgc2VsZi5pbXBvcnRzID0gW10KKworCitjbGFzcyBHaXRDYWNoZWROb3RlcyhHaXROb3Rlcyk6CisKKyAgICAiIiJFbmNhcHN1bGF0ZSBhY2Nlc3MgdG8gR2l0IG5vdGVzIChjYWNoZWQgdmVyc2lvbikuCisKKyAgICBPbmx5IHVzZSB0aGlzIGNsYXNzIGlmIG5vIGNhY2hpbmcgaXMgZG9uZSBhdCBhIGhpZ2hlciBsZXZlbC4KKworICAgIFNpbXVsYXRlcyBhIGRpY3Rpb25hcnkgb2Ygb2JqZWN0IG5hbWUgKFNIQTEpIC0+IEdpdCBub3RlIG1hcHBpbmdzLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIG5vdGVzX3JlZiwgb2JqX2ZldGNoZXIpOgorICAgICAgICAiIiJTZXQgdXAgYSBjYWNoaW5nIHdyYXBwZXIgYXJvdW5kIEdpdE5vdGVzLiIiIgorICAgICAgICBHaXROb3Rlcy5fX2luaXRfXyhzZWxmLCBub3Rlc19yZWYsIG9ial9mZXRjaGVyKQorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9ICAjIENhY2hlOiBvYmplY3QgbmFtZSAtPiBub3RlIGRhdGEKKworICAgIGRlZiBfX2RlbF9fIChzZWxmKToKKyAgICAgICAgIiIiVmVyaWZ5IHRoYXQgR2l0Tm90ZXMnIGRlc3RydWN0b3IgaXMgY2FsbGVkLiIiIgorICAgICAgICBHaXROb3Rlcy5fX2RlbF9fKHNlbGYpCisKKyAgICBkZWYgX2xvYWQgKHNlbGYsIG9iam5hbWUpOgorICAgICAgICAiIiJFeHRlbmQgR2l0Tm90ZXMuX2xvYWQoKSB3aXRoIGEgbG9jYWwgb2JqbmFtZSAtPiBub3RlIGNhY2hlLiIiIgorICAgICAgICBpZiBvYmpuYW1lIG5vdCBpbiBzZWxmLl9jYWNoZToKKyAgICAgICAgICAgIHNlbGYuX2NhY2hlW29iam5hbWVdID0gR2l0Tm90ZXMuX2xvYWQoc2VsZiwgb2JqbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlW29iam5hbWVdCisKKyAgICBkZWYgaW1wb3J0X25vdGUgKHNlbGYsIG9iam5hbWUsIGRhdGEsIGdmaSk6CisgICAgICAgICIiIkV4dGVuZCBHaXROb3Rlcy5pbXBvcnRfbm90ZSgpIHdpdGggYSBsb2NhbCBvYmpuYW1lIC0+IG5vdGUgY2FjaGUuIiIiCisgICAgICAgIGlmIG5vdCBkYXRhLmVuZHN3aXRoKCJcbiIpOgorICAgICAgICAgICAgZGF0YSArPSAiXG4iCisgICAgICAgIGFzc2VydCBvYmpuYW1lIG5vdCBpbiBzZWxmLl9jYWNoZQorICAgICAgICBzZWxmLl9jYWNoZVtvYmpuYW1lXSA9IGRhdGEKKyAgICAgICAgR2l0Tm90ZXMuaW1wb3J0X25vdGUoc2VsZiwgb2JqbmFtZSwgZGF0YSwgZ2ZpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9naXRfcmVtb3RlX2hlbHBlcnMvZ2l0L2ltcG9ydGVyLnB5IGIvZ2l0X3JlbW90ZV9oZWxwZXJzL2dpdC9pbXBvcnRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzZiNTk1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0X3JlbW90ZV9oZWxwZXJzL2dpdC9pbXBvcnRlci5weQpAQCAtMCwwICsxLDY2IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gZ2l0X3JlbW90ZV9oZWxwZXJzLnV0aWwgaW1wb3J0IGNoZWNrX2NhbGwsIGNoZWNrX291dHB1dAorCisKK2NsYXNzIEdpdEltcG9ydGVyKG9iamVjdCk6CisgICAgIiIiQW4gaW1wb3J0ZXIgZm9yIHRlc3RnaXQgcmVwb3NpdG9yaWVzLgorCisgICAgVGhpcyBpbXBvcnRlciBzaW1wbHkgZGVsZWdhdGVzIHRvIGdpdCBmYXN0LWltcG9ydC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBvKToKKyAgICAgICAgIiIiQ3JlYXRlcyBhIG5ldyBpbXBvcnRlciBmb3IgdGhlIHNwZWNpZmllZCByZXBvLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLnJlcG8gPSByZXBvCisKKyAgICBkZWYgZ2V0X3JlZnMoc2VsZiwgZ2l0ZGlyKToKKyAgICAgICAgIiIiUmV0dXJucyBhIGRpY3Rpb25hcnkgd2l0aCByZWZzLgorICAgICAgICAiIiIKKyAgICAgICAgYXJncyA9IFsiZ2l0IiwgIi0tZ2l0LWRpcj0iICsgZ2l0ZGlyLCAiZm9yLWVhY2gtcmVmIiwgInJlZnMvaGVhZHMiXQorICAgICAgICBsaW5lcyA9IGNoZWNrX291dHB1dChhcmdzKS5zdHJpcCgpLnNwbGl0KCdcbicpCisgICAgICAgIHJlZnMgPSB7fQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIHZhbHVlLCBuYW1lID0gbGluZS5zcGxpdCgnICcpCisgICAgICAgICAgICBuYW1lID0gbmFtZS5zdHJpcCgnY29tbWl0XHQnKQorICAgICAgICAgICAgcmVmc1tuYW1lXSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZWZzCisKKyAgICBkZWYgZG9faW1wb3J0KHNlbGYsIGJhc2UpOgorICAgICAgICAiIiJJbXBvcnRzIGEgZmFzdC1pbXBvcnQgc3RyZWFtIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisKKyAgICAgICAgU2ltcGx5IGRlbGVnYXRlcyB0byBnaXQgZmFzdC1pbXBvcnQuCisgICAgICAgICIiIgorCisgICAgICAgIGRpcm5hbWUgPSBzZWxmLnJlcG8uZ2V0X2Jhc2VfcGF0aChiYXNlKQorICAgICAgICBpZiBzZWxmLnJlcG8ubG9jYWw6CisgICAgICAgICAgICBnaXRkaXIgPSBzZWxmLnJlcG8uZ2l0cGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ2l0ZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihkaXJuYW1lLCAnLmdpdCcpKQorICAgICAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihkaXJuYW1lLCAnZ2l0Lm1hcmtzJykpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcm5hbWUpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlybmFtZSkKKworICAgICAgICByZWZzX2JlZm9yZSA9IHNlbGYuZ2V0X3JlZnMoZ2l0ZGlyKQorCisgICAgICAgIGFyZ3MgPSBbImdpdCIsICItLWdpdC1kaXI9IiArIGdpdGRpciwgImZhc3QtaW1wb3J0IiwgIi0tcXVpZXQiLCAiLS1leHBvcnQtbWFya3M9IiArIHBhdGhdCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1pbXBvcnQtbWFya3M9IiArIHBhdGgpCisKKyAgICAgICAgY2hlY2tfY2FsbChhcmdzKQorCisgICAgICAgIHJlZnNfYWZ0ZXIgPSBzZWxmLmdldF9yZWZzKGdpdGRpcikKKworICAgICAgICBjaGFuZ2VkID0ge30KKworICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcmVmc19hZnRlci5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHJlZnNfYmVmb3JlLmdldChuYW1lKSA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBjaGFuZ2VkW25hbWVdID0gdmFsdWUKKworICAgICAgICByZXR1cm4gY2hhbmdlZApkaWZmIC0tZ2l0IGEvZ2l0X3JlbW90ZV9oZWxwZXJzL2dpdC9ub25fbG9jYWwucHkgYi9naXRfcmVtb3RlX2hlbHBlcnMvZ2l0L25vbl9sb2NhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzAwMjUwCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0X3JlbW90ZV9oZWxwZXJzL2dpdC9ub25fbG9jYWwucHkKQEAgLTAsMCArMSw2MSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIGdpdF9yZW1vdGVfaGVscGVycy51dGlsIGltcG9ydCBjaGVja19jYWxsLCBkaWUsIHdhcm4KKworCitjbGFzcyBOb25Mb2NhbEdpdChvYmplY3QpOgorICAgICIiIkhhbmRsZXIgdG8gaW50ZXJhY3Qgd2l0aCBub24tbG9jYWwgcmVwb3MuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwbyk6CisgICAgICAgICIiIkNyZWF0ZXMgYSBuZXcgbm9uLWxvY2FsIGhhbmRsZXIgZm9yIHRoZSBzcGVjaWZpZWQgcmVwby4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5yZXBvID0gcmVwbworCisgICAgZGVmIGNsb25lKHNlbGYsIGJhc2UpOgorICAgICAgICAiIiJDbG9uZXMgdGhlIG5vbi1sb2NhbCByZXBvIHRvIGJhc2UuCisKKyAgICAgICAgRG9lcyBub3RoaW5nIGlmIGEgY2xvbmUgYWxyZWFkeSBleGlzdHMuCisgICAgICAgICIiIgorCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5yZXBvLmdldF9iYXNlX3BhdGgoYmFzZSksICcuZ2l0JykKKworICAgICAgICAjIGFscmVhZHkgY2xvbmVkCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIHBhdGgKKworICAgICAgICBvcy5tYWtlZGlycyhwYXRoKQorICAgICAgICBhcmdzID0gWyJnaXQiLCAiY2xvbmUiLCAiLS1iYXJlIiwgIi0tcXVpZXQiLCBzZWxmLnJlcG8uZ2l0cGF0aCwgcGF0aF0KKworICAgICAgICBjaGVja19jYWxsKGFyZ3MpCisKKyAgICAgICAgcmV0dXJuIHBhdGgKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgYmFzZSk6CisgICAgICAgICIiIlVwZGF0ZXMgY2hlY2tvdXQgb2YgdGhlIG5vbi1sb2NhbCByZXBvIGluIGJhc2UuCisgICAgICAgICIiIgorCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5yZXBvLmdldF9iYXNlX3BhdGgoYmFzZSksICcuZ2l0JykKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICBkaWUoImNvdWxkIG5vdCBmaW5kIHJlcG8gYXQgJXMiLCBwYXRoKQorCisgICAgICAgIGFyZ3MgPSBbImdpdCIsICItLWdpdC1kaXI9IiArIHBhdGgsICJmZXRjaCIsICItLXF1aWV0Iiwgc2VsZi5yZXBvLmdpdHBhdGhdCisgICAgICAgIGNoZWNrX2NhbGwoYXJncykKKworICAgICAgICBhcmdzID0gWyJnaXQiLCAiLS1naXQtZGlyPSIgKyBwYXRoLCAidXBkYXRlLXJlZiIsICJyZWZzL2hlYWRzL21hc3RlciIsICJGRVRDSF9IRUFEIl0KKyAgICAgICAgY2hpbGQgPSBjaGVja19jYWxsKGFyZ3MpCisKKyAgICBkZWYgcHVzaChzZWxmLCBiYXNlKToKKyAgICAgICAgIiIiUHVzaGVzIGZyb20gdGhlIG5vbi1sb2NhbCByZXBvIHRvIGJhc2UuCisgICAgICAgICIiIgorCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5yZXBvLmdldF9iYXNlX3BhdGgoYmFzZSksICcuZ2l0JykKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICBkaWUoImNvdWxkIG5vdCBmaW5kIHJlcG8gYXQgJXMiLCBwYXRoKQorCisgICAgICAgIGFyZ3MgPSBbImdpdCIsICItLWdpdC1kaXI9IiArIHBhdGgsICJwdXNoIiwgIi0tcXVpZXQiLCBzZWxmLnJlcG8uZ2l0cGF0aCwgIi0tYWxsIl0KKyAgICAgICAgY2hpbGQgPSBjaGVja19jYWxsKGFyZ3MpCmRpZmYgLS1naXQgYS9naXRfcmVtb3RlX2hlbHBlcnMvZ2l0L3JlcG8ucHkgYi9naXRfcmVtb3RlX2hlbHBlcnMvZ2l0L3JlcG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNiZjhkNwotLS0gL2Rldi9udWxsCisrKyBiL2dpdF9yZW1vdGVfaGVscGVycy9naXQvcmVwby5weQpAQCAtMCwwICsxLDc2IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gZ2l0X3JlbW90ZV9oZWxwZXJzLnV0aWwgaW1wb3J0IGNoZWNrX2NhbGwKKworCitkZWYgc2FuaXRpemUocmV2LCBzZXA9J1x0Jyk6CisgICAgIiIiQ29udmVydHMgYSBmb3ItZWFjaC1yZWYgbGluZSB0byBhIG5hbWUvdmFsdWUgcGFpci4KKyAgICAiIiIKKworICAgIHNwbGl0cmV2ID0gcmV2LnNwbGl0KHNlcCkKKyAgICBicmFuY2h2YWwgPSBzcGxpdHJldlswXQorICAgIGJyYW5jaG5hbWUgPSBzcGxpdHJldlsxXS5zdHJpcCgpCisgICAgaWYgYnJhbmNobmFtZS5zdGFydHN3aXRoKCJyZWZzL2hlYWRzLyIpOgorICAgICAgICBicmFuY2huYW1lID0gYnJhbmNobmFtZVsxMTpdCisKKyAgICByZXR1cm4gYnJhbmNobmFtZSwgYnJhbmNodmFsCisKK2RlZiBpc19yZW1vdGUodXJsKToKKyAgICAiIiJDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGEgcmVtb3RlIHVybC4KKyAgICAiIiIKKworICAgIHByZWZpeGVzID0gWyJodHRwIiwgImZpbGUiLCAiZ2l0Il0KKworICAgIGZvciBwcmVmaXggaW4gcHJlZml4ZXM6CisgICAgICAgIGlmIHVybC5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBHaXRSZXBvKG9iamVjdCk6CisgICAgIiIiUmVwbyBvYmplY3QgcmVwcmVzZW50aW5nIGEgcmVwby4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBuZXcgcmVwbyBhdCB0aGUgZ2l2ZW4gcGF0aC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLmhlYWQgPSBOb25lCisgICAgICAgIHNlbGYucmV2bWFwID0ge30KKyAgICAgICAgc2VsZi5sb2NhbCA9IG5vdCBpc19yZW1vdGUoc2VsZi5wYXRoKQorCisgICAgICAgIGlmKHNlbGYucGF0aC5lbmRzd2l0aCgnLmdpdCcpKToKKyAgICAgICAgICAgIHNlbGYuZ2l0cGF0aCA9IHNlbGYucGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5naXRwYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGF0aCwgJy5naXQnKQorCisgICAgICAgIGlmIHNlbGYubG9jYWwgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmdpdHBhdGgpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5naXRwYXRoKQorCisgICAgZGVmIGdldF9yZXZzKHNlbGYpOgorICAgICAgICAiIiJGZXRjaGVzIGFsbCByZXZzIGZyb20gdGhlIHJlbW90ZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgYXJncyA9IFsiZ2l0IiwgImxzLXJlbW90ZSIsIHNlbGYuZ2l0cGF0aF0KKyAgICAgICAgcGF0aCA9ICIuY2FjaGVkX3JldnMiCisgICAgICAgIG9maWxlID0gb3BlbihwYXRoLCAidyIpCisKKyAgICAgICAgY2hlY2tfY2FsbChhcmdzLCBzdGRvdXQ9b2ZpbGUpCisgICAgICAgIG91dHB1dCA9IG9wZW4ocGF0aCkucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5yZXZtYXAgPSBkaWN0KHNhbml0aXplKGkpIGZvciBpIGluIG91dHB1dCkKKyAgICAgICAgaWYgIkhFQUQiIGluIHNlbGYucmV2bWFwOgorICAgICAgICAgICAgZGVsIHNlbGYucmV2bWFwWyJIRUFEIl0KKyAgICAgICAgc2VsZi5yZXZzID0gc2VsZi5yZXZtYXAua2V5cygpCisgICAgICAgIG9maWxlLmNsb3NlKCkKKworICAgIGRlZiBnZXRfaGVhZChzZWxmKToKKyAgICAgICAgIiIiRGV0ZXJtaW5lcyB0aGUgaGVhZCBvZiBhIGxvY2FsIHJlcG8uCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2FsOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmdpdHBhdGgsICJIRUFEIikKKyAgICAgICAgaGVhZCA9IG9wZW4ocGF0aCkucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmhlYWQsIF8gPSBzYW5pdGl6ZShoZWFkLCAnICcpCmRpZmYgLS1naXQgYS9naXRfcmVtb3RlX2hlbHBlcnMvc2V0dXAuY2ZnIGIvZ2l0X3JlbW90ZV9oZWxwZXJzL3NldHVwLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZmODg3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0X3JlbW90ZV9oZWxwZXJzL3NldHVwLmNmZwpAQCAtMCwwICsxLDMgQEAKK1tidWlsZF0KK2J1aWxkX3B1cmVsaWIgPSBidWlsZC9saWIKK2J1aWxkX3BsYXRsaWIgPSBidWlsZC9saWIKZGlmZiAtLWdpdCBhL2dpdF9yZW1vdGVfaGVscGVycy9zZXR1cC5weSBiL2dpdF9yZW1vdGVfaGVscGVycy9zZXR1cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDQzNGI2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0X3JlbW90ZV9oZWxwZXJzL3NldHVwLnB5CkBAIC0wLDAgKzEsMTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiJEaXN0dXRpbHMgYnVpbGQvaW5zdGFsbCBzY3JpcHQgZm9yIHRoZSBnaXRfcmVtb3RlX2hlbHBlcnMgcGFja2FnZS4iIiIKKworZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKKworc2V0dXAoCisgICAgbmFtZSA9ICdnaXRfcmVtb3RlX2hlbHBlcnMnLAorICAgIHZlcnNpb24gPSAnMC4xLjAnLAorICAgIGRlc2NyaXB0aW9uID0gJ0dpdCByZW1vdGUgaGVscGVyIHByb2dyYW0gZm9yIG5vbi1naXQgcmVwb3NpdG9yaWVzJywKKyAgICBsaWNlbnNlID0gJ0dQTHYyJywKKyAgICBhdXRob3IgPSAnVGhlIEdpdCBDb21tdW5pdHknLAorICAgIGF1dGhvcl9lbWFpbCA9ICdnaXRAdmdlci5rZXJuZWwub3JnJywKKyAgICB1cmwgPSAnaHR0cDovL3d3dy5naXQtc2NtLmNvbS8nLAorICAgIHBhY2thZ2VfZGlyID0geydnaXRfcmVtb3RlX2hlbHBlcnMnOiAnJ30sCisgICAgcGFja2FnZXMgPSBbJ2dpdF9yZW1vdGVfaGVscGVycycsICdnaXRfcmVtb3RlX2hlbHBlcnMuZ2l0J10sCispCmRpZmYgLS1naXQgYS9naXRfcmVtb3RlX2hlbHBlcnMvdXRpbC5weSBiL2dpdF9yZW1vdGVfaGVscGVycy91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYmIwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9naXRfcmVtb3RlX2hlbHBlcnMvdXRpbC5weQpAQCAtMCwwICsxLDI3NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIk1pc2MuIHVzZWZ1bCBmdW5jdGlvbmFsaXR5IHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhpcyBwYWNrYWdlLgorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSB1c2VkIGJ5IHRoZSBvdGhlciBtb2R1bGVzIGluCit0aGlzIHBhY2thZ2UuCisKKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCisKK3RyeToKKyAgICBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IENhbGxlZFByb2Nlc3NFcnJvcgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgZnJvbSBweXRob24yLjc6c3VicHJvY2Vzcy5weQorICAgICMgRXhjZXB0aW9uIGNsYXNzZXMgdXNlZCBieSB0aGlzIG1vZHVsZS4KKyAgICBjbGFzcyBDYWxsZWRQcm9jZXNzRXJyb3IoRXhjZXB0aW9uKToKKyAgICAgICAgIiIiVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gYSBwcm9jZXNzIHJ1biBieSBjaGVja19jYWxsKCkgcmV0dXJucworICAgICAgICBhIG5vbi16ZXJvIGV4aXQgc3RhdHVzLiAgVGhlIGV4aXQgc3RhdHVzIHdpbGwgYmUgc3RvcmVkIGluIHRoZQorICAgICAgICByZXR1cm5jb2RlIGF0dHJpYnV0ZS4iIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJldHVybmNvZGUsIGNtZCk6CisgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSByZXR1cm5jb2RlCisgICAgICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkIiAlIChzZWxmLmNtZCwgc2VsZi5yZXR1cm5jb2RlKQorCisKKyMgV2hldGhlciBvciBub3QgdG8gc2hvdyBkZWJ1ZyBtZXNzYWdlcworREVCVUcgPSBGYWxzZQorCitkZWYgbm90aWZ5KG1zZywgKmFyZ3MpOgorICAgICIiIlByaW50IGEgbWVzc2FnZSB0byBzdGRlcnIuIiIiCisgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgbXNnICUgYXJncworCitkZWYgZGVidWcgKG1zZywgKmFyZ3MpOgorICAgICIiIlByaW50IGEgZGVidWcgbWVzc2FnZSB0byBzdGRlcnIgd2hlbiBERUJVRyBpcyBlbmFibGVkLiIiIgorICAgIGlmIERFQlVHOgorICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCBtc2cgJSBhcmdzCisKK2RlZiBlcnJvciAobXNnLCAqYXJncyk6CisgICAgIiIiUHJpbnQgYW4gZXJyb3IgbWVzc2FnZSB0byBzdGRlcnIuIiIiCisgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIkVSUk9SOiIsIG1zZyAlIGFyZ3MKKworZGVmIHdhcm4obXNnLCAqYXJncyk6CisgICAgIiIiUHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RkZXJyLiIiIgorICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJ3YXJuaW5nOiIsIG1zZyAlIGFyZ3MKKworZGVmIGRpZSAobXNnLCAqYXJncyk6CisgICAgIiIiUHJpbnQgYXMgZXJyb3IgbWVzc2FnZSB0byBzdGRlcnIgYW5kIGV4aXQgdGhlIHByb2dyYW0uIiIiCisgICAgZXJyb3IobXNnLCAqYXJncykKKyAgICBzeXMuZXhpdCgxKQorCisKK2NsYXNzIFByb2dyZXNzSW5kaWNhdG9yKG9iamVjdCk6CisKKyAgICAiIiJTaW1wbGUgcHJvZ3Jlc3MgaW5kaWNhdG9yLgorCisgICAgRGlzcGxheWVkIGFzIGEgc3Bpbm5pbmcgY2hhcmFjdGVyIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgY3VzdG9taXplZAorICAgIGJ5IHBhc3NpbmcgY3VzdG9tIG1lc3NhZ2VzIHRoYXQgb3ZlcnJpZGVzIHRoZSBzcGlubmluZyBjaGFyYWN0ZXIuCisKKyAgICAiIiIKKworICAgIFN0YXRlcyA9ICgifCIsICIvIiwgIi0iLCAiXFwiKQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBwcmVmaXggPSAiIiwgZiA9IHN5cy5zdGRvdXQpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgUHJvZ3Jlc3NJbmRpY2F0b3IsIGJvdW5kIHRvIHRoZSBnaXZlbiBmaWxlIG9iamVjdC4iIiIKKyAgICAgICAgc2VsZi5uID0gMCAgIyBTaW1wbGUgcHJvZ3Jlc3MgY291bnRlcgorICAgICAgICBzZWxmLmYgPSBmICAjIFByb2dyZXNzIGlzIHdyaXR0ZW4gdG8gdGhpcyBmaWxlIG9iamVjdAorICAgICAgICBzZWxmLnByZXZfbGVuID0gMCAgIyBMZW5ndGggb2YgcHJldmlvdXMgbXNnICh0byBiZSBvdmVyd3JpdHRlbikKKyAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVmaXggICMgUHJlZml4IHByZXBlbmRlZCB0byBlYWNoIHByb2dyZXNzIG1lc3NhZ2UKKyAgICAgICAgc2VsZi5wcmVmaXhfbGVucyA9IFtdICMgU3RhY2sgb2YgcHJlZml4IHN0cmluZyBsZW5ndGhzCisKKyAgICBkZWYgcHVzaHByZWZpeCAoc2VsZiwgcHJlZml4KToKKyAgICAgICAgIiIiQXBwZW5kIHRoZSBnaXZlbiBwcmVmaXggb250byB0aGUgcHJlZml4IHN0YWNrLiIiIgorICAgICAgICBzZWxmLnByZWZpeF9sZW5zLmFwcGVuZChsZW4oc2VsZi5wcmVmaXgpKQorICAgICAgICBzZWxmLnByZWZpeCArPSBwcmVmaXgKKworICAgIGRlZiBwb3BwcmVmaXggKHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgdGhlIGxhc3QgcHJlZml4IGZyb20gdGhlIHByZWZpeCBzdGFjay4iIiIKKyAgICAgICAgcHJldl9sZW4gPSBzZWxmLnByZWZpeF9sZW5zLnBvcCgpCisgICAgICAgIHNlbGYucHJlZml4ID0gc2VsZi5wcmVmaXhbOnByZXZfbGVuXQorCisgICAgZGVmIF9fY2FsbF9fIChzZWxmLCBtc2cgPSBOb25lLCBsZiA9IEZhbHNlKToKKyAgICAgICAgIiIiSW5kaWNhdGUgcHJvZ3Jlc3MsIHBvc3NpYmx5IHdpdGggYSBjdXN0b20gbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSBzZWxmLlN0YXRlc1tzZWxmLm4gJSBsZW4oc2VsZi5TdGF0ZXMpXQorICAgICAgICBtc2cgPSBzZWxmLnByZWZpeCArIG1zZworICAgICAgICBwcmludCA+PiBzZWxmLmYsICJcciUtKnMiICUgKHNlbGYucHJldl9sZW4sIG1zZyksCisgICAgICAgIHNlbGYucHJldl9sZW4gPSBsZW4obXNnLmV4cGFuZHRhYnMoKSkKKyAgICAgICAgaWYgbGY6CisgICAgICAgICAgICBwcmludCA+PiBzZWxmLmYKKyAgICAgICAgICAgIHNlbGYucHJldl9sZW4gPSAwCisgICAgICAgIHNlbGYubiArPSAxCisKKyAgICBkZWYgZmluaXNoIChzZWxmLCBtc2cgPSAiZG9uZSIsIG5vcHJlZml4ID0gRmFsc2UpOgorICAgICAgICAiIiJGaW5hbGl6ZSBwcm9ncmVzcyBpbmRpY2F0aW9uIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG5vcHJlZml4OgorICAgICAgICAgICAgc2VsZi5wcmVmaXggPSAiIgorICAgICAgICBzZWxmKG1zZywgVHJ1ZSkKKworCitkZWYgc3RhcnRfY29tbWFuZCAoYXJncywgY3dkID0gTm9uZSwgc2hlbGwgPSBGYWxzZSwgYWRkX2VudiA9IE5vbmUsCisgICAgICAgICAgICAgICAgICAgc3RkaW4gPSBzdWJwcm9jZXNzLlBJUEUsIHN0ZG91dCA9IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICBzdGRlcnIgPSBzdWJwcm9jZXNzLlBJUEUpOgorICAgICIiIlN0YXJ0IHRoZSBnaXZlbiBjb21tYW5kLCBhbmQgcmV0dXJuIGEgc3VicHJvY2VzcyBvYmplY3QuCisKKyAgICBUaGlzIHByb3ZpZGVzIGEgc2ltcGxlciBpbnRlcmZhY2UgdG8gdGhlIHN1YnByb2Nlc3MgbW9kdWxlLgorCisgICAgIiIiCisgICAgZW52ID0gTm9uZQorICAgIGlmIGFkZF9lbnYgaXMgbm90IE5vbmU6CisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudi51cGRhdGUoYWRkX2VudikKKyAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCBidWZzaXplID0gMSwgc3RkaW4gPSBzdGRpbiwgc3Rkb3V0ID0gc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVyciA9IHN0ZGVyciwgY3dkID0gY3dkLCBzaGVsbCA9IHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudiA9IGVudiwgdW5pdmVyc2FsX25ld2xpbmVzID0gVHJ1ZSkKKworCitkZWYgcnVuX2NvbW1hbmQgKGFyZ3MsIGN3ZCA9IE5vbmUsIHNoZWxsID0gRmFsc2UsIGFkZF9lbnYgPSBOb25lLAorICAgICAgICAgICAgICAgICBmbGFnX2Vycm9yID0gVHJ1ZSk6CisgICAgIiIiUnVuIHRoZSBnaXZlbiBjb21tYW5kIHRvIGNvbXBsZXRpb24sIGFuZCByZXR1cm4gaXRzIHJlc3VsdHMuCisKKyAgICBUaGlzIHByb3ZpZGVzIGEgc2ltcGxlciBpbnRlcmZhY2UgdG8gdGhlIHN1YnByb2Nlc3MgbW9kdWxlLgorCisgICAgVGhlIHJlc3VsdHMgYXJlIGZvcm1hdHRlZCBhcyBhIDMtdHVwbGU6IChleGl0X2NvZGUsIG91dHB1dCwgZXJyb3JzKQorCisgICAgSWYgZmxhZ19lcnJvciBpcyBlbmFibGVkLCBFcnJvciBtZXNzYWdlcyB3aWxsIGJlIHByb2R1Y2VkIGlmIHRoZQorICAgIHN1YnByb2Nlc3MgdGVybWluYXRlZCB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlIGFuZC9vciBzdGRlcnIKKyAgICBvdXRwdXQuCisKKyAgICBUaGUgb3RoZXIgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24gdG8gc3RhcnRfY29tbWFuZCgpLgorCisgICAgIiIiCisgICAgcHJvY2VzcyA9IHN0YXJ0X2NvbW1hbmQoYXJncywgY3dkLCBzaGVsbCwgYWRkX2VudikKKyAgICAob3V0cHV0LCBlcnJvcnMpID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgZXhpdF9jb2RlID0gcHJvY2Vzcy5yZXR1cm5jb2RlCisgICAgaWYgZmxhZ19lcnJvciBhbmQgZXJyb3JzOgorICAgICAgICBlcnJvcigiJyVzJyByZXR1cm5lZCBlcnJvcnM6XG4tLS1cbiVzLS0tIiwgIiAiLmpvaW4oYXJncyksIGVycm9ycykKKyAgICBpZiBmbGFnX2Vycm9yIGFuZCBleGl0X2NvZGU6CisgICAgICAgIGVycm9yKCInJXMnIHJldHVybmVkIGV4aXQgY29kZSAlaSIsICIgIi5qb2luKGFyZ3MpLCBleGl0X2NvZGUpCisgICAgcmV0dXJuIChleGl0X2NvZGUsIG91dHB1dCwgZXJyb3JzKQorCisKKyMgZnJvbSBweXRob24yLjc6c3VicHJvY2Vzcy5weQorZGVmIGNhbGwoKnBvcGVuYXJncywgKiprd2FyZ3MpOgorICAgICIiIlJ1biBjb21tYW5kIHdpdGggYXJndW1lbnRzLiAgV2FpdCBmb3IgY29tbWFuZCB0byBjb21wbGV0ZSwgdGhlbgorICAgIHJldHVybiB0aGUgcmV0dXJuY29kZSBhdHRyaWJ1dGUuCisKKyAgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIFBvcGVuIGNvbnN0cnVjdG9yLiAgRXhhbXBsZToKKworICAgIHJldGNvZGUgPSBjYWxsKFsibHMiLCAiLWwiXSkKKyAgICAiIiIKKyAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbigqcG9wZW5hcmdzLCAqKmt3YXJncykud2FpdCgpCisKKworIyBmcm9tIHB5dGhvbjIuNzpzdWJwcm9jZXNzLnB5CitkZWYgY2hlY2tfY2FsbCgqcG9wZW5hcmdzLCAqKmt3YXJncyk6CisgICAgIiIiUnVuIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMuICBXYWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlLiAgSWYKKyAgICB0aGUgZXhpdCBjb2RlIHdhcyB6ZXJvIHRoZW4gcmV0dXJuLCBvdGhlcndpc2UgcmFpc2UKKyAgICBDYWxsZWRQcm9jZXNzRXJyb3IuICBUaGUgQ2FsbGVkUHJvY2Vzc0Vycm9yIG9iamVjdCB3aWxsIGhhdmUgdGhlCisgICAgcmV0dXJuIGNvZGUgaW4gdGhlIHJldHVybmNvZGUgYXR0cmlidXRlLgorCisgICAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBQb3BlbiBjb25zdHJ1Y3Rvci4gIEV4YW1wbGU6CisKKyAgICBjaGVja19jYWxsKFsibHMiLCAiLWwiXSkKKyAgICAiIiIKKyAgICByZXRjb2RlID0gY2FsbCgqcG9wZW5hcmdzLCAqKmt3YXJncykKKyAgICBpZiByZXRjb2RlOgorICAgICAgICBjbWQgPSBrd2FyZ3MuZ2V0KCJhcmdzIikKKyAgICAgICAgaWYgY21kIGlzIE5vbmU6CisgICAgICAgICAgICBjbWQgPSBwb3BlbmFyZ3NbMF0KKyAgICAgICAgcmFpc2UgQ2FsbGVkUHJvY2Vzc0Vycm9yKHJldGNvZGUsIGNtZCkKKyAgICByZXR1cm4gMAorCisKKyMgZnJvbSBweXRob24yLjc6c3VicHJvY2Vzcy5weQorZGVmIGNoZWNrX291dHB1dCgqcG9wZW5hcmdzLCAqKmt3YXJncyk6CisgICAgciIiIlJ1biBjb21tYW5kIHdpdGggYXJndW1lbnRzIGFuZCByZXR1cm4gaXRzIG91dHB1dCBhcyBhIGJ5dGUgc3RyaW5nLgorCisgICAgSWYgdGhlIGV4aXQgY29kZSB3YXMgbm9uLXplcm8gaXQgcmFpc2VzIGEgQ2FsbGVkUHJvY2Vzc0Vycm9yLiAgVGhlCisgICAgQ2FsbGVkUHJvY2Vzc0Vycm9yIG9iamVjdCB3aWxsIGhhdmUgdGhlIHJldHVybiBjb2RlIGluIHRoZSByZXR1cm5jb2RlCisgICAgYXR0cmlidXRlIGFuZCBvdXRwdXQgaW4gdGhlIG91dHB1dCBhdHRyaWJ1dGUuCisKKyAgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIFBvcGVuIGNvbnN0cnVjdG9yLiAgRXhhbXBsZToKKworICAgID4+PiBjaGVja19vdXRwdXQoWyJscyIsICItbCIsICIvZGV2L251bGwiXSkKKyAgICAnY3J3LXJ3LXJ3LSAxIHJvb3Qgcm9vdCAxLCAzIE9jdCAxOCAgMjAwNyAvZGV2L251bGxcbicKKworICAgIFRoZSBzdGRvdXQgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQgYXMgaXQgaXMgdXNlZCBpbnRlcm5hbGx5LgorICAgIFRvIGNhcHR1cmUgc3RhbmRhcmQgZXJyb3IgaW4gdGhlIHJlc3VsdCwgdXNlIHN0ZGVycj1TVERPVVQuCisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsiL2Jpbi9zaCIsICItYyIsCisgICAgLi4uICAgICAgICAgICAgICAgImxzIC1sIG5vbl9leGlzdGVudF9maWxlIDsgZXhpdCAwIl0sCisgICAgLi4uICAgICAgICAgICAgICBzdGRlcnI9U1RET1VUKQorICAgICdsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKKyAgICAiIiIKKyAgICBpZiAnc3Rkb3V0JyBpbiBrd2FyZ3M6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZG91dCBhcmd1bWVudCBub3QgYWxsb3dlZCwgaXQgd2lsbCBiZSBvdmVycmlkZGVuLicpCisgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgKnBvcGVuYXJncywgKiprd2FyZ3MpCisgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgcmV0Y29kZSA9IHByb2Nlc3MucG9sbCgpCisgICAgaWYgcmV0Y29kZToKKyAgICAgICAgY21kID0ga3dhcmdzLmdldCgiYXJncyIpCisgICAgICAgIGlmIGNtZCBpcyBOb25lOgorICAgICAgICAgICAgY21kID0gcG9wZW5hcmdzWzBdCisgICAgICAgIHJhaXNlIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKHJldGNvZGUsIGNtZCkKKyAgICByZXR1cm4gb3V0cHV0CisKKworZGVmIGZpbGVfcmVhZGVyX21ldGhvZCAobWlzc2luZ19vayA9IEZhbHNlKToKKyAgICAiIiJEZWNvcmF0b3IgZm9yIHNpbXBsaWZ5aW5nIHJlYWRpbmcgb2YgZmlsZXMuCisKKyAgICBJZiBtaXNzaW5nX29rIGlzIFRydWUsIGEgZmFpbHVyZSB0byBvcGVuIGEgZmlsZSBmb3IgcmVhZGluZyB3aWxsCisgICAgbm90IHJhaXNlIHRoZSB1c3VhbCBJT0Vycm9yLCBidXQgaW5zdGVhZCB0aGUgd3JhcHBlZCBtZXRob2Qgd2lsbCBiZQorICAgIGNhbGxlZCB3aXRoIGYgPT0gTm9uZS4gIFRoZSBtZXRob2QgbXVzdCBpbiB0aGlzIGNhc2UgcHJvcGVybHkKKyAgICBoYW5kbGUgZiA9PSBOb25lLgorCisgICAgIiIiCisgICAgZGVmIF93cmFwIChtZXRob2QpOgorICAgICAgICAiIiJUZWFjaCBnaXZlbiBtZXRob2QgdG8gaGFuZGxlIGJvdGggZmlsZW5hbWVzIGFuZCBmaWxlIG9iamVjdHMuCisKKyAgICAgICAgVGhlIGdpdmVuIG1ldGhvZCBtdXN0IHRha2UgYSBmaWxlIG9iamVjdCBhcyBpdHMgc2Vjb25kIGFyZ3VtZW50CisgICAgICAgICh0aGUgZmlyc3QgYXJndW1lbnQgYmVpbmcgJ3NlbGYnLCBvZiBjb3Vyc2UpLiAgVGhpcyBkZWNvcmF0b3IKKyAgICAgICAgd2lsbCB0YWtlIGEgZmlsZW5hbWUgZ2l2ZW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCBhbmQgcHJvbW90ZQorICAgICAgICBpdCB0byBhIGZpbGUgb2JqZWN0LgorCisgICAgICAgICIiIgorICAgICAgICBkZWYgX3dyYXBwZWRfbWV0aG9kIChzZWxmLCBmaWxlbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZW5hbWUsIGZpbGUpOgorICAgICAgICAgICAgICAgIGYgPSBmaWxlbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGlmIG1pc3Npbmdfb2s6CisgICAgICAgICAgICAgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kKHNlbGYsIGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZmlsZW5hbWUsIGZpbGUpIGFuZCBmOgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIF93cmFwcGVkX21ldGhvZAorICAgIHJldHVybiBfd3JhcAorCisKK2RlZiBmaWxlX3dyaXRlcl9tZXRob2QgKG1ldGhvZCk6CisgICAgIiIiRGVjb3JhdG9yIGZvciBzaW1wbGlmeWluZyB3cml0aW5nIG9mIGZpbGVzLgorCisgICAgRW5hYmxlcyB0aGUgZ2l2ZW4gbWV0aG9kIHRvIGhhbmRsZSBib3RoIGZpbGVuYW1lcyBhbmQgZmlsZSBvYmplY3RzLgorCisgICAgVGhlIGdpdmVuIG1ldGhvZCBtdXN0IHRha2UgYSBmaWxlIG9iamVjdCBhcyBpdHMgc2Vjb25kIGFyZ3VtZW50CisgICAgKHRoZSBmaXJzdCBhcmd1bWVudCBiZWluZyAnc2VsZicsIG9mIGNvdXJzZSkuICBUaGlzIGRlY29yYXRvciB3aWxsCisgICAgdGFrZSBhIGZpbGVuYW1lIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgYW5kIHByb21vdGUgaXQgdG8gYQorICAgIGZpbGUgb2JqZWN0LgorCisgICAgIiIiCisgICAgZGVmIF9uZXdfbWV0aG9kIChzZWxmLCBmaWxlbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgZmlsZSk6CisgICAgICAgICAgICBmID0gZmlsZW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBjb250YWluaW5nIGRpcmVjdG9yeSBleGlzdHMKKyAgICAgICAgICAgIHBhcmVudF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihwYXJlbnRfZGlyKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhwYXJlbnRfZGlyKQorICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIG1ldGhvZChzZWxmLCBmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxlbmFtZSwgZmlsZSk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgcmV0dXJuIF9uZXdfbWV0aG9kCmRpZmYgLS1naXQgYS9naXRrLWdpdC9NYWtlZmlsZSBiL2dpdGstZ2l0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjYwNDUKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9NYWtlZmlsZQpAQCAtMCwwICsxLDY3IEBACisjIFRoZSBkZWZhdWx0IHRhcmdldCBvZiB0aGlzIE1ha2VmaWxlIGlzLi4uCithbGw6OgorCitwcmVmaXggPz0gJChIT01FKQorYmluZGlyID89ICQocHJlZml4KS9iaW4KK3NoYXJlZGlyID89ICQocHJlZml4KS9zaGFyZQorZ2l0a19saWJkaXIgICA/PSAkKHNoYXJlZGlyKS9naXRrL2xpYgorbXNnc2RpciAgICA/PSAkKGdpdGtfbGliZGlyKS9tc2dzCittc2dzZGlyX1NRICA9ICQoc3Vic3QgJywnXCcnLCQobXNnc2RpcikpCisKK1RDTF9QQVRIID89IHRjbHNoCitUQ0xUS19QQVRIID89IHdpc2gKK0lOU1RBTEwgPz0gaW5zdGFsbAorUk0gPz0gcm0gLWYKKworREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCitiaW5kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGJpbmRpcikpCitUQ0xUS19QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xUS19QQVRIKSkKKworIyMgcG8tZmlsZSBjcmVhdGlvbiBydWxlcworWEdFVFRFWFQgICA/PSB4Z2V0dGV4dAoraWZkZWYgTk9fTVNHRk1UCisJTVNHRk1UID89ICQoVENMX1BBVEgpIHBvL3BvMm1zZy5zaAorZWxzZQorCU1TR0ZNVCA/PSBtc2dmbXQKKwlpZm5lcSAoJChzaGVsbCAkKE1TR0ZNVCkgLS10Y2wgLWwgQyAtZCAuIC9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgZWNobyAkJD8pLDApCisJCU1TR0ZNVCA6PSAkKFRDTF9QQVRIKSBwby9wbzJtc2cuc2gKKwllbmRpZgorZW5kaWYKKworUE9fVEVNUExBVEUgPSBwby9naXRrLnBvdAorQUxMX1BPRklMRVMgPSAkKHdpbGRjYXJkIHBvLyoucG8pCitBTExfTVNHRklMRVMgPSAkKHN1YnN0IC5wbywubXNnLCQoQUxMX1BPRklMRVMpKQorCitpZm5kZWYgVgorCVFVSUVUICAgICAgICAgID0gQAorCVFVSUVUX0dFTiAgICAgID0gJChRVUlFVCllY2hvICcgICAnIEdFTiAkQCAmJgorZW5kaWYKKworYWxsOjogZ2l0ay13aXNoICQoQUxMX01TR0ZJTEVTKQorCitpbnN0YWxsOjogYWxsCisJJChJTlNUQUxMKSAtbSA3NTUgZ2l0ay13aXNoICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJy9naXRrCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJworCSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChJTlNUQUxMKSAtbSA2NDQgJHAgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAmJikgdHJ1ZQorCit1bmluc3RhbGw6OgorCSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChSTSkgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJy8kKG5vdGRpciAkcCkgJiYpIHRydWUKKwkkKFJNKSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScvZ2l0aworCitjbGVhbjo6CisJJChSTSkgZ2l0ay13aXNoIHBvLyoubXNnCisKK2dpdGstd2lzaDogZ2l0aworCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxLDNzfF5leGVjIC4qICIkJDAifGV4ZWMgJChzdWJzdCB8LCdcfCcsJChUQ0xUS19QQVRIX1NRKSkgIiQkMCJ8JyA8Z2l0ayA+JEArICYmIFwKKwljaG1vZCAreCAkQCsgJiYgXAorCW12IC1mICRAKyAkQAorCiskKFBPX1RFTVBMQVRFKTogZ2l0aworCSQoWEdFVFRFWFQpIC1rbWMgLUxUY2wgLW8gJEAgZ2l0awordXBkYXRlLXBvOjogJChQT19URU1QTEFURSkKKwkkKGZvcmVhY2ggcCwgJChBTExfUE9GSUxFUyksIGVjaG8gVXBkYXRpbmcgJHAgOyBtc2dtZXJnZSAtVSAkcCAkKFBPX1RFTVBMQVRFKSA7ICkKKyQoQUxMX01TR0ZJTEVTKTogJS5tc2cgOiAlLnBvCisJQGVjaG8gR2VuZXJhdGluZyBjYXRhbG9nICRACisJJChNU0dGTVQpIC0tc3RhdGlzdGljcyAtLXRjbCAkPCAtbCAkKGJhc2VuYW1lICQobm90ZGlyICQ8KSkgLWQgJChkaXIgJEApCisKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L2dpdGsgYi9naXRrLWdpdC9naXRrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ5M2JkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9naXRrCkBAIC0wLDAgKzEsMTE4ODEgQEAKKyMhL2Jpbi9zaAorIyBUY2wgaWdub3JlcyB0aGUgbmV4dCBsaW5lIC0qLSB0Y2wgLSotIFwKK2V4ZWMgd2lzaCAiJDAiIC0tICIkQCIKKworIyBDb3B5cmlnaHQgwqkgMjAwNS0yMDExIFBhdWwgTWFja2VycmFzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IGl0IG1heSBiZSB1c2VkLCBjb3BpZWQsIG1vZGlmaWVkCisjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlLAorIyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitwYWNrYWdlIHJlcXVpcmUgVGsKKworcHJvYyBoYXN3b3JrdHJlZSB7fSB7CisgICAgcmV0dXJuIFtleHByIHtbZXhlYyBnaXQgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5XSA9PSAiZmFsc2UiICYmCisJCSAgW2V4ZWMgZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS1naXQtZGlyXSA9PSAiZmFsc2UifV0KK30KKworcHJvYyByZXBvbmFtZSB7fSB7CisgICAgZ2xvYmFsIGdpdGRpcgorICAgIHNldCBuIFtmaWxlIG5vcm1hbGl6ZSAkZ2l0ZGlyXQorICAgIGlmIHtbc3RyaW5nIG1hdGNoICIqLy5naXQiICRuXX0geworCXNldCBuIFtzdHJpbmcgcmFuZ2UgJG4gMCBlbmQtNV0KKyAgICB9CisgICAgcmV0dXJuIFtmaWxlIHRhaWwgJG5dCit9CisKK3Byb2MgZ2l0d29ya3RyZWUge30geworICAgIHZhcmlhYmxlIF9naXR3b3JrdHJlZQorICAgIGlmIHtbaW5mbyBleGlzdHMgX2dpdHdvcmt0cmVlXX0geworCXJldHVybiAkX2dpdHdvcmt0cmVlCisgICAgfQorICAgICMgdjEuNy4wIGludHJvZHVjZWQgLS1zaG93LXRvcGxldmVsIHRvIHJldHVybiB0aGUgY2Fub25pY2FsIHdvcmstdHJlZQorICAgIGlmIHtbY2F0Y2gge3NldCBfZ2l0d29ya3RyZWUgW2V4ZWMgZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWxdfV19IHsKKyAgICAgICAgIyB0cnkgdG8gc2V0IHdvcmsgdHJlZSBmcm9tIGVudmlyb25tZW50LCBjb3JlLndvcmt0cmVlIG9yIHVzZQorICAgICAgICAjIGNkdXAgdG8gb2J0YWluIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSB3b3JrdHJlZS4gSWYKKyAgICAgICAgIyBydW4gZnJvbSB0aGUgdG9wLCB0aGUgLi8gcHJlZml4IGVuc3VyZXMgbm9ybWFsaXplIGV4cGFuZHMgcHdkLgorICAgICAgICBpZiB7W2NhdGNoIHsgc2V0IF9naXR3b3JrdHJlZSAkZW52KEdJVF9XT1JLX1RSRUUpIH1dfSB7CisJICAgIGNhdGNoIHtzZXQgX2dpdHdvcmt0cmVlIFtleGVjIGdpdCBjb25maWcgLS1nZXQgY29yZS53b3JrdHJlZV19CisJICAgIGlmIHskX2dpdHdvcmt0cmVlIGVxICIifSB7CisJCXNldCBfZ2l0d29ya3RyZWUgW2ZpbGUgbm9ybWFsaXplIC4vW2V4ZWMgZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cF1dCisJICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gJF9naXR3b3JrdHJlZQorfQorCisjIEEgc2ltcGxlIHNjaGVkdWxlciBmb3IgY29tcHV0ZS1pbnRlbnNpdmUgc3R1ZmYuCisjIFRoZSBhaW0gaXMgdG8gbWFrZSBzdXJlIHRoYXQgZXZlbnQgaGFuZGxlcnMgZm9yIEdVSSBhY3Rpb25zIGNhbgorIyBydW4gYXQgbGVhc3QgZXZlcnkgNTAtMTAwIG1zLiAgVW5mb3J0dW5hdGVseSBmaWxlZXZlbnQgaGFuZGxlcnMgYXJlCisjIHJ1biBiZWZvcmUgWCBldmVudCBoYW5kbGVycywgc28gcmVhZGluZyBmcm9tIGEgZmFzdCBzb3VyY2UgY2FuCisjIG1ha2UgdGhlIEdVSSBjb21wbGV0ZWx5IHVucmVzcG9uc2l2ZS4KK3Byb2MgcnVuIGFyZ3MgeworICAgIGdsb2JhbCBpc29ucnVucSBydW5xIGN1cnJ1bnEKKworICAgIHNldCBzY3JpcHQgJGFyZ3MKKyAgICBpZiB7W2luZm8gZXhpc3RzIGlzb25ydW5xKCRzY3JpcHQpXX0gcmV0dXJuCisgICAgaWYgeyRydW5xIGVxIHt9ICYmICFbaW5mbyBleGlzdHMgY3VycnVucV19IHsKKwlhZnRlciBpZGxlIGRvcnVucQorICAgIH0KKyAgICBsYXBwZW5kIHJ1bnEgW2xpc3Qge30gJHNjcmlwdF0KKyAgICBzZXQgaXNvbnJ1bnEoJHNjcmlwdCkgMQorfQorCitwcm9jIGZpbGVydW4ge2ZkIHNjcmlwdH0geworICAgIGZpbGVldmVudCAkZmQgcmVhZGFibGUgW2xpc3QgZmlsZXJlYWRhYmxlICRmZCAkc2NyaXB0XQorfQorCitwcm9jIGZpbGVyZWFkYWJsZSB7ZmQgc2NyaXB0fSB7CisgICAgZ2xvYmFsIHJ1bnEgY3VycnVucQorCisgICAgZmlsZWV2ZW50ICRmZCByZWFkYWJsZSB7fQorICAgIGlmIHskcnVucSBlcSB7fSAmJiAhW2luZm8gZXhpc3RzIGN1cnJ1bnFdfSB7CisJYWZ0ZXIgaWRsZSBkb3J1bnEKKyAgICB9CisgICAgbGFwcGVuZCBydW5xIFtsaXN0ICRmZCAkc2NyaXB0XQorfQorCitwcm9jIG51a2VmaWxlIHtmZH0geworICAgIGdsb2JhbCBydW5xCisKKyAgICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICRydW5xXX0ge30geworCWlmIHtbbGluZGV4ICRydW5xICRpIDBdIGVxICRmZH0geworCSAgICBzZXQgcnVucSBbbHJlcGxhY2UgJHJ1bnEgJGkgJGldCisJfSBlbHNlIHsKKwkgICAgaW5jciBpCisJfQorICAgIH0KK30KKworcHJvYyBkb3J1bnEge30geworICAgIGdsb2JhbCBpc29ucnVucSBydW5xIGN1cnJ1bnEKKworICAgIHNldCB0c3RhcnQgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCB0MCAkdHN0YXJ0CisgICAgd2hpbGUge1tsbGVuZ3RoICRydW5xXSA+IDB9IHsKKwlzZXQgZmQgW2xpbmRleCAkcnVucSAwIDBdCisJc2V0IHNjcmlwdCBbbGluZGV4ICRydW5xIDAgMV0KKwlzZXQgY3VycnVucSBbbGluZGV4ICRydW5xIDBdCisJc2V0IHJ1bnEgW2xyYW5nZSAkcnVucSAxIGVuZF0KKwlzZXQgcmVwZWF0IFtldmFsICRzY3JpcHRdCisJdW5zZXQgY3VycnVucQorCXNldCB0MSBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisJc2V0IHQgW2V4cHIgeyR0MSAtICR0MH1dCisJaWYgeyRyZXBlYXQgbmUge30gJiYgJHJlcGVhdH0geworCSAgICBpZiB7JGZkIGVxIHt9IHx8ICRyZXBlYXQgPT0gMn0geworCQkjIHNjcmlwdCByZXR1cm5zIDEgaWYgaXQgd2FudHMgdG8gYmUgcmVhZGRlZAorCQkjIGZpbGUgcmVhZGVycyByZXR1cm4gMiBpZiB0aGV5IGNvdWxkIGRvIG1vcmUgc3RyYWlnaHQgYXdheQorCQlsYXBwZW5kIHJ1bnEgW2xpc3QgJGZkICRzY3JpcHRdCisJICAgIH0gZWxzZSB7CisJCWZpbGVldmVudCAkZmQgcmVhZGFibGUgW2xpc3QgZmlsZXJlYWRhYmxlICRmZCAkc2NyaXB0XQorCSAgICB9CisJfSBlbHNlaWYgeyRmZCBlcSB7fX0geworCSAgICB1bnNldCBpc29ucnVucSgkc2NyaXB0KQorCX0KKwlzZXQgdDAgJHQxCisJaWYgeyR0MSAtICR0c3RhcnQgPj0gODB9IGJyZWFrCisgICAgfQorICAgIGlmIHskcnVucSBuZSB7fX0geworCWFmdGVyIGlkbGUgZG9ydW5xCisgICAgfQorfQorCitwcm9jIHJlZ19pbnN0YW5jZSB7ZmR9IHsKKyAgICBnbG9iYWwgY29tbWZkIGxlZnRvdmVyIGxvZ2luc3RhbmNlCisKKyAgICBzZXQgaSBbaW5jciBsb2dpbnN0YW5jZV0KKyAgICBzZXQgY29tbWZkKCRpKSAkZmQKKyAgICBzZXQgbGVmdG92ZXIoJGkpIHt9CisgICAgcmV0dXJuICRpCit9CisKK3Byb2MgdW5tZXJnZWRfZmlsZXMge2ZpbGVzfSB7CisgICAgZ2xvYmFsIG5yX3VubWVyZ2VkCisKKyAgICAjIGZpbmQgdGhlIGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXMKKyAgICBzZXQgbWxpc3Qge30KKyAgICBzZXQgbnJfdW5tZXJnZWQgMAorICAgIGlmIHtbY2F0Y2ggeworCXNldCBmZCBbb3BlbiAifCBnaXQgbHMtZmlsZXMgLXUiIHJdCisgICAgfSBlcnJdfSB7CisJc2hvd19lcnJvciB7fSAuICJbbWMgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiJdICRlcnIiCisJZXhpdCAxCisgICAgfQorICAgIHdoaWxlIHtbZ2V0cyAkZmQgbGluZV0gPj0gMH0geworCXNldCBpIFtzdHJpbmcgZmlyc3QgIlx0IiAkbGluZV0KKwlpZiB7JGkgPCAwfSBjb250aW51ZQorCXNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIHskaSsxfV0gZW5kXQorCWlmIHtbbHNlYXJjaCAtZXhhY3QgJG1saXN0ICRmbmFtZV0gPj0gMH0gY29udGludWUKKwlpbmNyIG5yX3VubWVyZ2VkCisJaWYgeyRmaWxlcyBlcSB7fSB8fCBbcGF0aF9maWx0ZXIgJGZpbGVzICRmbmFtZV19IHsKKwkgICAgbGFwcGVuZCBtbGlzdCAkZm5hbWUKKwl9CisgICAgfQorICAgIGNhdGNoIHtjbG9zZSAkZmR9CisgICAgcmV0dXJuICRtbGlzdAorfQorCitwcm9jIHBhcnNldmlld2FyZ3Mge24gYXJnbGlzdH0geworICAgIGdsb2JhbCB2ZGF0ZW1vZGUgdm1lcmdlb25seSB2ZmxhZ3MgdmRmbGFncyB2cmV2cyB2ZmlsdGVyZWQgdm9yaWdhcmdzIGVudgorICAgIGdsb2JhbCB3b3JkZGlmZiBnaXRfdmVyc2lvbgorCisgICAgc2V0IHZkYXRlbW9kZSgkbikgMAorICAgIHNldCB2bWVyZ2Vvbmx5KCRuKSAwCisgICAgc2V0IGdsZmxhZ3Mge30KKyAgICBzZXQgZGlmZmFyZ3Mge30KKyAgICBzZXQgbmV4dGlzdmFsIDAKKyAgICBzZXQgcmV2YXJncyB7fQorICAgIHNldCBvcmlnYXJncyAkYXJnbGlzdAorICAgIHNldCBhbGxrbm93biAxCisgICAgc2V0IGZpbHRlcmVkIDAKKyAgICBzZXQgaSAtMQorICAgIGZvcmVhY2ggYXJnICRhcmdsaXN0IHsKKwlpbmNyIGkKKwlpZiB7JG5leHRpc3ZhbH0geworCSAgICBsYXBwZW5kIGdsZmxhZ3MgJGFyZworCSAgICBzZXQgbmV4dGlzdmFsIDAKKwkgICAgY29udGludWUKKwl9CisJc3dpdGNoIC1nbG9iIC0tICRhcmcgeworCSAgICAiLWQiIC0KKwkgICAgIi0tZGF0ZS1vcmRlciIgeworCQlzZXQgdmRhdGVtb2RlKCRuKSAxCisJCSMgcmVtb3ZlIGZyb20gb3JpZ2FyZ3MgaW4gY2FzZSB3ZSBoaXQgYW4gdW5rbm93biBvcHRpb24KKwkJc2V0IG9yaWdhcmdzIFtscmVwbGFjZSAkb3JpZ2FyZ3MgJGkgJGldCisJCWluY3IgaSAtMQorCSAgICB9CisJICAgICItW3B1YWJ3Y3JSQk1DXSIgLQorCSAgICAiLS1uby1yZW5hbWVzIiAtICItLWZ1bGwtaW5kZXgiIC0gIi0tYmluYXJ5IiAtICItLWFiYnJldj0qIiAtCisJICAgICItLWZpbmQtY29waWVzLWhhcmRlciIgLSAiLWwqIiAtICItLWV4dC1kaWZmIiAtICItLW5vLWV4dC1kaWZmIiAtCisJICAgICItLXNyYy1wcmVmaXg9KiIgLSAiLS1kc3QtcHJlZml4PSoiIC0gIi0tbm8tcHJlZml4IiAtCisJICAgICItTyoiIC0gIi0tdGV4dCIgLSAiLS1mdWxsLWRpZmYiIC0gIi0taWdub3JlLXNwYWNlLWF0LWVvbCIgLQorCSAgICAiLS1pZ25vcmUtc3BhY2UtY2hhbmdlIiAtICItVSoiIC0gIi0tdW5pZmllZD0qIiB7CisJCSMgVGhlc2UgcmVxdWVzdCBvciBhZmZlY3QgZGlmZiBvdXRwdXQsIHdoaWNoIHdlIGRvbid0IHdhbnQuCisJCSMgU29tZSBjb3VsZCBiZSB1c2VkIHRvIHNldCBvdXIgZGVmYXVsdHMgZm9yIGRpZmYgZGlzcGxheS4KKwkJbGFwcGVuZCBkaWZmYXJncyAkYXJnCisJICAgIH0KKwkgICAgIi0tcmF3IiAtICItLXBhdGNoLXdpdGgtcmF3IiAtICItLXBhdGNoLXdpdGgtc3RhdCIgLQorCSAgICAiLS1uYW1lLW9ubHkiIC0gIi0tbmFtZS1zdGF0dXMiIC0gIi0tY29sb3IiIC0KKwkgICAgIi0tbG9nLXNpemUiIC0gIi0tcHJldHR5PSoiIC0gIi0tZGVjb3JhdGUiIC0gIi0tYWJicmV2LWNvbW1pdCIgLQorCSAgICAiLS1jYyIgLSAiLXoiIC0gIi0taGVhZGVyIiAtICItLXBhcmVudHMiIC0gIi0tYm91bmRhcnkiIC0KKwkgICAgIi0tbm8tY29sb3IiIC0gIi1nIiAtICItLXdhbGstcmVmbG9ncyIgLSAiLS1uby13YWxrIiAtCisJICAgICItLXRpbWVzdGFtcCIgLSAicmVsYXRpdmUtZGF0ZSIgLSAiLS1kYXRlPSoiIC0gIi0tc3RkaW4iIC0KKwkgICAgIi0tb2JqZWN0cyIgLSAiLS1vYmplY3RzLWVkZ2UiIC0gIi0tcmV2ZXJzZSIgeworCQkjIFRoZXNlIGNhdXNlIG91ciBwYXJzaW5nIG9mIGdpdCBsb2cncyBvdXRwdXQgdG8gZmFpbCwgb3IgZWxzZQorCQkjIHRoZXkncmUgb3B0aW9ucyB3ZSB3YW50IHRvIHNldCBvdXJzZWx2ZXMsIHNvIGlnbm9yZSB0aGVtLgorCSAgICB9CisJICAgICItLWNvbG9yLXdvcmRzKiIgLSAiLS13b3JkLWRpZmY9Y29sb3IiIHsKKwkJIyBUaGVzZSB0cmlnZ2VyIGEgd29yZCBkaWZmIGluIHRoZSBjb25zb2xlIGludGVyZmFjZSwKKwkJIyBzbyBoZWxwIHRoZSB1c2VyIGJ5IGVuYWJsaW5nIG91ciBvd24gc3VwcG9ydAorCQlpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJGdpdF92ZXJzaW9uICIxLjcuMiJdID49IDB9IHsKKwkJICAgIHNldCB3b3JkZGlmZiBbbWMgIkNvbG9yIHdvcmRzIl0KKwkJfQorCSAgICB9CisJICAgICItLXdvcmQtZGlmZioiIHsKKwkJaWYge1twYWNrYWdlIHZjb21wYXJlICRnaXRfdmVyc2lvbiAiMS43LjIiXSA+PSAwfSB7CisJCSAgICBzZXQgd29yZGRpZmYgW21jICJNYXJrdXAgd29yZHMiXQorCQl9CisJICAgIH0KKwkgICAgIi0tc3RhdD0qIiAtICItLW51bXN0YXQiIC0gIi0tc2hvcnRzdGF0IiAtICItLXN1bW1hcnkiIC0KKwkgICAgIi0tY2hlY2siIC0gIi0tZXhpdC1jb2RlIiAtICItLXF1aWV0IiAtICItLXRvcG8tb3JkZXIiIC0KKwkgICAgIi0tZnVsbC1oaXN0b3J5IiAtICItLWRlbnNlIiAtICItLXNwYXJzZSIgLQorCSAgICAiLS1mb2xsb3ciIC0gIi0tbGVmdC1yaWdodCIgLSAiLS1lbmNvZGluZz0qIiB7CisJCSMgVGhlc2UgYXJlIGhhcm1sZXNzLCBhbmQgc29tZSBhcmUgZXZlbiB1c2VmdWwKKwkJbGFwcGVuZCBnbGZsYWdzICRhcmcKKwkgICAgfQorCSAgICAiLS1kaWZmLWZpbHRlcj0qIiAtICItLW5vLW1lcmdlcyIgLSAiLS11bnBhY2tlZCIgLQorCSAgICAiLS1tYXgtY291bnQ9KiIgLSAiLS1za2lwPSoiIC0gIi0tc2luY2U9KiIgLSAiLS1hZnRlcj0qIiAtCisJICAgICItLXVudGlsPSoiIC0gIi0tYmVmb3JlPSoiIC0gIi0tbWF4LWFnZT0qIiAtICItLW1pbi1hZ2U9KiIgLQorCSAgICAiLS1hdXRob3I9KiIgLSAiLS1jb21taXR0ZXI9KiIgLSAiLS1ncmVwPSoiIC0gIi1baUVdIiAtCisJICAgICItLXJlbW92ZS1lbXB0eSIgLSAiLS1maXJzdC1wYXJlbnQiIC0gIi0tY2hlcnJ5LXBpY2siIC0KKwkgICAgIi1TKiIgLSAiLS1waWNrYXhlLWFsbCIgLSAiLS1waWNrYXhlLXJlZ2V4IiAtCisJICAgICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iIHsKKwkJIyBUaGVzZSBtZWFuIHRoYXQgd2UgZ2V0IGEgc3Vic2V0IG9mIHRoZSBjb21taXRzCisJCXNldCBmaWx0ZXJlZCAxCisJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIH0KKwkgICAgIi1uIiB7CisJCSMgVGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBvbmx5IG9uZSB0aGF0IGhhcyBhIHZhbHVlIGFzIGEKKwkJIyBzZXBhcmF0ZSB3b3JkIGZvbGxvd2luZyBpdAorCQlzZXQgZmlsdGVyZWQgMQorCQlzZXQgbmV4dGlzdmFsIDEKKwkJbGFwcGVuZCBnbGZsYWdzICRhcmcKKwkgICAgfQorCSAgICAiLS1ub3QiIC0gIi0tYWxsIiB7CisJCWxhcHBlbmQgcmV2YXJncyAkYXJnCisJICAgIH0KKwkgICAgIi0tbWVyZ2UiIHsKKwkJc2V0IHZtZXJnZW9ubHkoJG4pIDEKKwkJIyBnaXQgcmV2LXBhcnNlIGRvZXNuJ3QgdW5kZXJzdGFuZCAtLW1lcmdlCisJCWxhcHBlbmQgcmV2YXJncyAtLWdpdGstc3ltbWV0cmljLWRpZmYtbWFya2VyIE1FUkdFX0hFQUQuLi5IRUFECisJICAgIH0KKwkgICAgIi0tbm8tcmVwbGFjZS1vYmplY3RzIiB7CisJCXNldCBlbnYoR0lUX05PX1JFUExBQ0VfT0JKRUNUUykgIjEiCisJICAgIH0KKwkgICAgIi0qIiB7CisJCSMgT3RoZXIgZmxhZyBhcmd1bWVudHMgaW5jbHVkaW5nIC08bj4KKwkJaWYge1tzdHJpbmcgaXMgZGlnaXQgLXN0cmljdCBbc3RyaW5nIHJhbmdlICRhcmcgMSBlbmRdXX0geworCQkgICAgc2V0IGZpbHRlcmVkIDEKKwkJfSBlbHNlIHsKKwkJICAgICMgYSBmbGFnIGFyZ3VtZW50IHRoYXQgd2UgZG9uJ3QgcmVjb2duaXplOworCQkgICAgIyB0aGF0IG1lYW5zIHdlIGNhbid0IG9wdGltaXplCisJCSAgICBzZXQgYWxsa25vd24gMAorCQl9CisJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIH0KKwkgICAgZGVmYXVsdCB7CisJCSMgTm9uLWZsYWcgYXJndW1lbnRzIHNwZWNpZnkgY29tbWl0cyBvciByYW5nZXMgb2YgY29tbWl0cworCQlpZiB7W3N0cmluZyBtYXRjaCAiKi4uLioiICRhcmddfSB7CisJCSAgICBsYXBwZW5kIHJldmFyZ3MgLS1naXRrLXN5bW1ldHJpYy1kaWZmLW1hcmtlcgorCQl9CisJCWxhcHBlbmQgcmV2YXJncyAkYXJnCisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCB2ZGZsYWdzKCRuKSAkZGlmZmFyZ3MKKyAgICBzZXQgdmZsYWdzKCRuKSAkZ2xmbGFncworICAgIHNldCB2cmV2cygkbikgJHJldmFyZ3MKKyAgICBzZXQgdmZpbHRlcmVkKCRuKSAkZmlsdGVyZWQKKyAgICBzZXQgdm9yaWdhcmdzKCRuKSAkb3JpZ2FyZ3MKKyAgICByZXR1cm4gJGFsbGtub3duCit9CisKK3Byb2MgcGFyc2V2aWV3cmV2cyB7dmlldyByZXZzfSB7CisgICAgZ2xvYmFsIHZwb3NpZHMgdm5lZ2lkcworCisgICAgaWYgeyRyZXZzIGVxIHt9fSB7CisJc2V0IHJldnMgSEVBRAorICAgIH0KKyAgICBpZiB7W2NhdGNoIHtzZXQgaWRzIFtldmFsIGV4ZWMgZ2l0IHJldi1wYXJzZSAkcmV2c119IGVycl19IHsKKwkjIHdlIGdldCBzdGRvdXQgZm9sbG93ZWQgYnkgc3RkZXJyIGluICRlcnIKKwkjIGZvciBhbiB1bmtub3duIHJldiwgZ2l0IHJldi1wYXJzZSBlY2hvZXMgaXQgYW5kIHRoZW4gZXJyb3JzIG91dAorCXNldCBlcnJsaW5lcyBbc3BsaXQgJGVyciAiXG4iXQorCXNldCBiYWRyZXYge30KKwlmb3Ige3NldCBsIDB9IHskbCA8IFtsbGVuZ3RoICRlcnJsaW5lc119IHtpbmNyIGx9IHsKKwkgICAgc2V0IGxpbmUgW2xpbmRleCAkZXJybGluZXMgJGxdCisJICAgIGlmIHshKFtzdHJpbmcgbGVuZ3RoICRsaW5lXSA9PSA0MCAmJiBbc3RyaW5nIGlzIHhkaWdpdCAkbGluZV0pfSB7CisJCWlmIHtbc3RyaW5nIG1hdGNoICJmYXRhbDoqIiAkbGluZV19IHsKKwkJICAgIGlmIHtbc3RyaW5nIG1hdGNoICJmYXRhbDogYW1iaWd1b3VzIGFyZ3VtZW50KiIgJGxpbmVdCisJCQkmJiAkYmFkcmV2IG5lIHt9fSB7CisJCQlpZiB7W2xsZW5ndGggJGJhZHJldl0gPT0gMX0geworCQkJICAgIHNldCBlcnIgInVua25vd24gcmV2aXNpb24gJGJhZHJldiIKKwkJCX0gZWxzZSB7CisJCQkgICAgc2V0IGVyciAidW5rbm93biByZXZpc2lvbnM6IFtqb2luICRiYWRyZXYgIiwgIl0iCisJCQl9CisJCSAgICB9IGVsc2UgeworCQkJc2V0IGVyciBbam9pbiBbbHJhbmdlICRlcnJsaW5lcyAkbCBlbmRdICJcbiJdCisJCSAgICB9CisJCSAgICBicmVhaworCQl9CisJCWxhcHBlbmQgYmFkcmV2ICRsaW5lCisJICAgIH0KKwl9CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6Il0gJGVyciIKKwlyZXR1cm4ge30KKyAgICB9CisgICAgc2V0IHJldCB7fQorICAgIHNldCBwb3Mge30KKyAgICBzZXQgbmVnIHt9CisgICAgc2V0IHNkbSAwCisgICAgZm9yZWFjaCBpZCBbc3BsaXQgJGlkcyAiXG4iXSB7CisJaWYgeyRpZCBlcSAiLS1naXRrLXN5bW1ldHJpYy1kaWZmLW1hcmtlciJ9IHsKKwkgICAgc2V0IHNkbSA0CisJfSBlbHNlaWYge1tzdHJpbmcgbWF0Y2ggIl4qIiAkaWRdfSB7CisJICAgIGlmIHskc2RtICE9IDF9IHsKKwkJbGFwcGVuZCByZXQgJGlkCisJCWlmIHskc2RtID09IDN9IHsKKwkJICAgIHNldCBzZG0gMAorCQl9CisJICAgIH0KKwkgICAgbGFwcGVuZCBuZWcgW3N0cmluZyByYW5nZSAkaWQgMSBlbmRdCisJfSBlbHNlIHsKKwkgICAgaWYgeyRzZG0gIT0gMn0geworCQlsYXBwZW5kIHJldCAkaWQKKwkgICAgfSBlbHNlIHsKKwkJbHNldCByZXQgZW5kICRpZC4uLltsaW5kZXggJHJldCBlbmRdCisJICAgIH0KKwkgICAgbGFwcGVuZCBwb3MgJGlkCisJfQorCWluY3Igc2RtIC0xCisgICAgfQorICAgIHNldCB2cG9zaWRzKCR2aWV3KSAkcG9zCisgICAgc2V0IHZuZWdpZHMoJHZpZXcpICRuZWcKKyAgICByZXR1cm4gJHJldAorfQorCisjIFN0YXJ0IG9mZiBhIGdpdCBsb2cgcHJvY2VzcyBhbmQgYXJyYW5nZSB0byByZWFkIGl0cyBvdXRwdXQKK3Byb2Mgc3RhcnRfcmV2X2xpc3Qge3ZpZXd9IHsKKyAgICBnbG9iYWwgc3RhcnRtc2VjcyBjb21taXRpZHggdmlld2NvbXBsZXRlIGN1cnZpZXcKKyAgICBnbG9iYWwgdGNsZW5jb2RpbmcKKyAgICBnbG9iYWwgdmlld2FyZ3Mgdmlld2FyZ3NjbWQgdmlld2ZpbGVzIHZmaWxlbGltaXQKKyAgICBnbG9iYWwgc2hvd2xvY2FsY2hhbmdlcworICAgIGdsb2JhbCB2aWV3YWN0aXZlIHZpZXdpbnN0YW5jZXMgdm1lcmdlb25seQorICAgIGdsb2JhbCBtYWluaGVhZGlkIHZpZXdtYWluaGVhZGlkIHZpZXdtYWluaGVhZGlkX29yaWcKKyAgICBnbG9iYWwgdmNhbm9wdCB2ZmxhZ3MgdnJldnMgdm9yaWdhcmdzCisgICAgZ2xvYmFsIHNob3dfbm90ZXMKKworICAgIHNldCBzdGFydG1zZWNzIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBzZXQgY29tbWl0aWR4KCR2aWV3KSAwCisgICAgIyB0aGVzZSBhcmUgc2V0IHRoaXMgd2F5IGZvciB0aGUgZXJyb3IgZXhpdHMKKyAgICBzZXQgdmlld2NvbXBsZXRlKCR2aWV3KSAxCisgICAgc2V0IHZpZXdhY3RpdmUoJHZpZXcpIDAKKyAgICB2YXJjaW5pdCAkdmlldworCisgICAgc2V0IGFyZ3MgJHZpZXdhcmdzKCR2aWV3KQorICAgIGlmIHskdmlld2FyZ3NjbWQoJHZpZXcpIG5lIHt9fSB7CisJaWYge1tjYXRjaCB7CisJICAgIHNldCBzdHIgW2V4ZWMgc2ggLWMgJHZpZXdhcmdzY21kKCR2aWV3KV0KKwl9IGVycl19IHsKKwkgICAgZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiJdICRlcnIiCisJICAgIHJldHVybiAwCisJfQorCXNldCBhcmdzIFtjb25jYXQgJGFyZ3MgW3NwbGl0ICRzdHIgIlxuIl1dCisgICAgfQorICAgIHNldCB2Y2Fub3B0KCR2aWV3KSBbcGFyc2V2aWV3YXJncyAkdmlldyAkYXJnc10KKworICAgIHNldCBmaWxlcyAkdmlld2ZpbGVzKCR2aWV3KQorICAgIGlmIHskdm1lcmdlb25seSgkdmlldyl9IHsKKwlzZXQgZmlsZXMgW3VubWVyZ2VkX2ZpbGVzICRmaWxlc10KKwlpZiB7JGZpbGVzIGVxIHt9fSB7CisJICAgIGdsb2JhbCBucl91bm1lcmdlZAorCSAgICBpZiB7JG5yX3VubWVyZ2VkID09IDB9IHsKKwkJZXJyb3JfcG9wdXAgW21jICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0XAorCQkJICAgICBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIl0KKwkgICAgfSBlbHNlIHsKKwkJZXJyb3JfcG9wdXAgW21jICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0XAorCQkJICAgICBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgbGltaXQuIl0KKwkgICAgfQorCSAgICByZXR1cm4gMAorCX0KKyAgICB9CisgICAgc2V0IHZmaWxlbGltaXQoJHZpZXcpICRmaWxlcworCisgICAgaWYgeyR2Y2Fub3B0KCR2aWV3KX0geworCXNldCByZXZzIFtwYXJzZXZpZXdyZXZzICR2aWV3ICR2cmV2cygkdmlldyldCisJaWYgeyRyZXZzIGVxIHt9fSB7CisJICAgIHJldHVybiAwCisJfQorCXNldCBhcmdzIFtjb25jYXQgJHZmbGFncygkdmlldykgJHJldnNdCisgICAgfSBlbHNlIHsKKwlzZXQgYXJncyAkdm9yaWdhcmdzKCR2aWV3KQorICAgIH0KKworICAgIGlmIHtbY2F0Y2ggeworCXNldCBmZCBbb3BlbiBbY29uY2F0IHwgZ2l0IGxvZyAtLW5vLWNvbG9yIC16IC0tcHJldHR5PXJhdyAkc2hvd19ub3RlcyBcCisJCQktLXBhcmVudHMgLS1ib3VuZGFyeSAkYXJncyAiLS0iICRmaWxlc10gcl0KKyAgICB9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiXSAkZXJyIgorCXJldHVybiAwCisgICAgfQorICAgIHNldCBpIFtyZWdfaW5zdGFuY2UgJGZkXQorICAgIHNldCB2aWV3aW5zdGFuY2VzKCR2aWV3KSBbbGlzdCAkaV0KKyAgICBzZXQgdmlld21haW5oZWFkaWQoJHZpZXcpICRtYWluaGVhZGlkCisgICAgc2V0IHZpZXdtYWluaGVhZGlkX29yaWcoJHZpZXcpICRtYWluaGVhZGlkCisgICAgaWYgeyRmaWxlcyBuZSB7fSAmJiAkbWFpbmhlYWRpZCBuZSB7fX0geworCWdldF92aWV3bWFpbmhlYWQgJHZpZXcKKyAgICB9CisgICAgaWYgeyRzaG93bG9jYWxjaGFuZ2VzICYmICR2aWV3bWFpbmhlYWRpZCgkdmlldykgbmUge319IHsKKwlpbnRlcmVzdGVkaW4gJHZpZXdtYWluaGVhZGlkKCR2aWV3KSBkb2RpZmZpbmRleAorICAgIH0KKyAgICBmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMCAtdHJhbnNsYXRpb24gbGYgLWVvZmNoYXIge30KKyAgICBpZiB7JHRjbGVuY29kaW5nICE9IHt9fSB7CisJZmNvbmZpZ3VyZSAkZmQgLWVuY29kaW5nICR0Y2xlbmNvZGluZworICAgIH0KKyAgICBmaWxlcnVuICRmZCBbbGlzdCBnZXRjb21taXRsaW5lcyAkZmQgJGkgJHZpZXcgMF0KKyAgICBub3didXN5ICR2aWV3IFttYyAiUmVhZGluZyJdCisgICAgc2V0IHZpZXdjb21wbGV0ZSgkdmlldykgMAorICAgIHNldCB2aWV3YWN0aXZlKCR2aWV3KSAxCisgICAgcmV0dXJuIDEKK30KKworcHJvYyBzdG9wX2luc3RhbmNlIHtpbnN0fSB7CisgICAgZ2xvYmFsIGNvbW1mZCBsZWZ0b3ZlcgorCisgICAgc2V0IGZkICRjb21tZmQoJGluc3QpCisgICAgY2F0Y2ggeworCXNldCBwaWQgW3BpZCAkZmRdCisKKwlpZiB7JDo6dGNsX3BsYXRmb3JtKHBsYXRmb3JtKSBlcSB7d2luZG93c319IHsKKwkgICAgZXhlYyBraWxsIC1mICRwaWQKKwl9IGVsc2UgeworCSAgICBleGVjIGtpbGwgJHBpZAorCX0KKyAgICB9CisgICAgY2F0Y2gge2Nsb3NlICRmZH0KKyAgICBudWtlZmlsZSAkZmQKKyAgICB1bnNldCBjb21tZmQoJGluc3QpCisgICAgdW5zZXQgbGVmdG92ZXIoJGluc3QpCit9CisKK3Byb2Mgc3RvcF9iYWNrZW5kcyB7fSB7CisgICAgZ2xvYmFsIGNvbW1mZAorCisgICAgZm9yZWFjaCBpbnN0IFthcnJheSBuYW1lcyBjb21tZmRdIHsKKwlzdG9wX2luc3RhbmNlICRpbnN0CisgICAgfQorfQorCitwcm9jIHN0b3BfcmV2X2xpc3Qge3ZpZXd9IHsKKyAgICBnbG9iYWwgdmlld2luc3RhbmNlcworCisgICAgZm9yZWFjaCBpbnN0ICR2aWV3aW5zdGFuY2VzKCR2aWV3KSB7CisJc3RvcF9pbnN0YW5jZSAkaW5zdAorICAgIH0KKyAgICBzZXQgdmlld2luc3RhbmNlcygkdmlldykge30KK30KKworcHJvYyByZXNldF9wZW5kaW5nX3NlbGVjdCB7c2VsaWR9IHsKKyAgICBnbG9iYWwgcGVuZGluZ19zZWxlY3QgbWFpbmhlYWRpZCBzZWxlY3RoZWFkaWQKKworICAgIGlmIHskc2VsaWQgbmUge319IHsKKwlzZXQgcGVuZGluZ19zZWxlY3QgJHNlbGlkCisgICAgfSBlbHNlaWYgeyRzZWxlY3RoZWFkaWQgbmUge319IHsKKwlzZXQgcGVuZGluZ19zZWxlY3QgJHNlbGVjdGhlYWRpZAorICAgIH0gZWxzZSB7CisJc2V0IHBlbmRpbmdfc2VsZWN0ICRtYWluaGVhZGlkCisgICAgfQorfQorCitwcm9jIGdldGNvbW1pdHMge3NlbGlkfSB7CisgICAgZ2xvYmFsIGNhbnYgY3VydmlldyBuZWVkX3JlZGlzcGxheSB2aWV3YWN0aXZlCisKKyAgICBpbml0bGF5b3V0CisgICAgaWYge1tzdGFydF9yZXZfbGlzdCAkY3Vydmlld119IHsKKwlyZXNldF9wZW5kaW5nX3NlbGVjdCAkc2VsaWQKKwlzaG93X3N0YXR1cyBbbWMgIlJlYWRpbmcgY29tbWl0cy4uLiJdCisJc2V0IG5lZWRfcmVkaXNwbGF5IDEKKyAgICB9IGVsc2UgeworCXNob3dfc3RhdHVzIFttYyAiTm8gY29tbWl0cyBzZWxlY3RlZCJdCisgICAgfQorfQorCitwcm9jIHVwZGF0ZWNvbW1pdHMge30geworICAgIGdsb2JhbCBjdXJ2aWV3IHZjYW5vcHQgdm9yaWdhcmdzIHZmaWxlbGltaXQgdmlld2luc3RhbmNlcworICAgIGdsb2JhbCB2aWV3YWN0aXZlIHZpZXdjb21wbGV0ZSB0Y2xlbmNvZGluZworICAgIGdsb2JhbCBzdGFydG1zZWNzIHNob3duZWFydGFncyBzaG93bG9jYWxjaGFuZ2VzCisgICAgZ2xvYmFsIG1haW5oZWFkaWQgdmlld21haW5oZWFkaWQgdmlld21haW5oZWFkaWRfb3JpZyBwZW5kaW5nX3NlbGVjdAorICAgIGdsb2JhbCBoYXN3b3JrdHJlZQorICAgIGdsb2JhbCB2YXJjaWQgdnBvc2lkcyB2bmVnaWRzIHZmbGFncyB2cmV2cworICAgIGdsb2JhbCBzaG93X25vdGVzCisKKyAgICBzZXQgaGFzd29ya3RyZWUgW2hhc3dvcmt0cmVlXQorICAgIHJlcmVhZHJlZnMKKyAgICBzZXQgdmlldyAkY3VydmlldworICAgIGlmIHskbWFpbmhlYWRpZCBuZSAkdmlld21haW5oZWFkaWRfb3JpZygkdmlldyl9IHsKKwlpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKKwkgICAgZG9oaWRlbG9jYWxjaGFuZ2VzCisJfQorCXNldCB2aWV3bWFpbmhlYWRpZCgkdmlldykgJG1haW5oZWFkaWQKKwlzZXQgdmlld21haW5oZWFkaWRfb3JpZygkdmlldykgJG1haW5oZWFkaWQKKwlpZiB7JHZmaWxlbGltaXQoJHZpZXcpIG5lIHt9fSB7CisJICAgIGdldF92aWV3bWFpbmhlYWQgJHZpZXcKKwl9CisgICAgfQorICAgIGlmIHskc2hvd2xvY2FsY2hhbmdlc30geworCWRvc2hvd2xvY2FsY2hhbmdlcworICAgIH0KKyAgICBpZiB7JHZjYW5vcHQoJHZpZXcpfSB7CisJc2V0IG9sZHBvcyAkdnBvc2lkcygkdmlldykKKwlzZXQgb2xkbmVnICR2bmVnaWRzKCR2aWV3KQorCXNldCByZXZzIFtwYXJzZXZpZXdyZXZzICR2aWV3ICR2cmV2cygkdmlldyldCisJaWYgeyRyZXZzIGVxIHt9fSB7CisJICAgIHJldHVybgorCX0KKwkjIG5vdGU6IGdldHRpbmcgdGhlIGRlbHRhIHdoZW4gbmVnYXRpdmUgcmVmcyBjaGFuZ2UgaXMgaGFyZCwKKwkjIGFuZCBjb3VsZCByZXF1aXJlIG11bHRpcGxlIGdpdCBsb2cgaW52b2NhdGlvbnMsIHNvIGluIHRoYXQKKwkjIGNhc2Ugd2UgYXNrIGdpdCBsb2cgZm9yIGFsbCB0aGUgY29tbWl0cyAobm90IGp1c3QgdGhlIGRlbHRhKQorCWlmIHskb2xkbmVnIGVxICR2bmVnaWRzKCR2aWV3KX0geworCSAgICBzZXQgbmV3cmV2cyB7fQorCSAgICBzZXQgbnBvcyAwCisJICAgICMgdGFrZSBvdXQgcG9zaXRpdmUgcmVmcyB0aGF0IHdlIGFza2VkIGZvciBiZWZvcmUgb3IKKwkgICAgIyB0aGF0IHdlIGhhdmUgYWxyZWFkeSBzZWVuCisJICAgIGZvcmVhY2ggcmV2ICRyZXZzIHsKKwkJaWYge1tzdHJpbmcgbGVuZ3RoICRyZXZdID09IDQwfSB7CisJCSAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRvbGRwb3MgJHJldl0gPCAwCisJCQkmJiAhW2luZm8gZXhpc3RzIHZhcmNpZCgkdmlldywkcmV2KV19IHsKKwkJCWxhcHBlbmQgbmV3cmV2cyAkcmV2CisJCQlpbmNyIG5wb3MKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIGxhcHBlbmQgJG5ld3JldnMgJHJldgorCQl9CisJICAgIH0KKwkgICAgaWYgeyRucG9zID09IDB9IHJldHVybgorCSAgICBzZXQgcmV2cyAkbmV3cmV2cworCSAgICBzZXQgdnBvc2lkcygkdmlldykgW2xzb3J0IC11bmlxdWUgW2NvbmNhdCAkb2xkcG9zICR2cG9zaWRzKCR2aWV3KV1dCisJfQorCXNldCBhcmdzIFtjb25jYXQgJHZmbGFncygkdmlldykgJHJldnMgLS1ub3QgJG9sZHBvc10KKyAgICB9IGVsc2UgeworCXNldCBhcmdzICR2b3JpZ2FyZ3MoJHZpZXcpCisgICAgfQorICAgIGlmIHtbY2F0Y2ggeworCXNldCBmZCBbb3BlbiBbY29uY2F0IHwgZ2l0IGxvZyAtLW5vLWNvbG9yIC16IC0tcHJldHR5PXJhdyAkc2hvd19ub3RlcyBcCisJCQktLXBhcmVudHMgLS1ib3VuZGFyeSAkYXJncyAiLS0iICR2ZmlsZWxpbWl0KCR2aWV3KV0gcl0KKyAgICB9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiXSAkZXJyIgorCXJldHVybgorICAgIH0KKyAgICBpZiB7JHZpZXdhY3RpdmUoJHZpZXcpID09IDB9IHsKKwlzZXQgc3RhcnRtc2VjcyBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgfQorICAgIHNldCBpIFtyZWdfaW5zdGFuY2UgJGZkXQorICAgIGxhcHBlbmQgdmlld2luc3RhbmNlcygkdmlldykgJGkKKyAgICBmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMCAtdHJhbnNsYXRpb24gbGYgLWVvZmNoYXIge30KKyAgICBpZiB7JHRjbGVuY29kaW5nICE9IHt9fSB7CisJZmNvbmZpZ3VyZSAkZmQgLWVuY29kaW5nICR0Y2xlbmNvZGluZworICAgIH0KKyAgICBmaWxlcnVuICRmZCBbbGlzdCBnZXRjb21taXRsaW5lcyAkZmQgJGkgJHZpZXcgMV0KKyAgICBpbmNyIHZpZXdhY3RpdmUoJHZpZXcpCisgICAgc2V0IHZpZXdjb21wbGV0ZSgkdmlldykgMAorICAgIHJlc2V0X3BlbmRpbmdfc2VsZWN0IHt9CisgICAgbm93YnVzeSAkdmlldyBbbWMgIlJlYWRpbmciXQorICAgIGlmIHskc2hvd25lYXJ0YWdzfSB7CisJZ2V0YWxsY29tbWl0cworICAgIH0KK30KKworcHJvYyByZWxvYWRjb21taXRzIHt9IHsKKyAgICBnbG9iYWwgY3VydmlldyB2aWV3Y29tcGxldGUgc2VsZWN0ZWRsaW5lIGN1cnJlbnRpZCB0aGlja2VybGluZQorICAgIGdsb2JhbCBzaG93bmVhcnRhZ3MgdHJlZWRpZmZzIGNvbW1pdGludGVyZXN0IGNhY2hlZF9jb21taXRyb3cKKyAgICBnbG9iYWwgdGFyZ2V0aWQKKworICAgIHNldCBzZWxpZCB7fQorICAgIGlmIHskc2VsZWN0ZWRsaW5lIG5lIHt9fSB7CisJc2V0IHNlbGlkICRjdXJyZW50aWQKKyAgICB9CisKKyAgICBpZiB7ISR2aWV3Y29tcGxldGUoJGN1cnZpZXcpfSB7CisJc3RvcF9yZXZfbGlzdCAkY3VydmlldworICAgIH0KKyAgICByZXNldHZhcmNzICRjdXJ2aWV3CisgICAgc2V0IHNlbGVjdGVkbGluZSB7fQorICAgIGNhdGNoIHt1bnNldCBjdXJyZW50aWR9CisgICAgY2F0Y2gge3Vuc2V0IHRoaWNrZXJsaW5lfQorICAgIGNhdGNoIHt1bnNldCB0cmVlZGlmZnN9CisgICAgcmVhZHJlZnMKKyAgICBjaGFuZ2VkcmVmcworICAgIGlmIHskc2hvd25lYXJ0YWdzfSB7CisJZ2V0YWxsY29tbWl0cworICAgIH0KKyAgICBjbGVhcl9kaXNwbGF5CisgICAgY2F0Y2gge3Vuc2V0IGNvbW1pdGludGVyZXN0fQorICAgIGNhdGNoIHt1bnNldCBjYWNoZWRfY29tbWl0cm93fQorICAgIGNhdGNoIHt1bnNldCB0YXJnZXRpZH0KKyAgICBzZXRjYW52c2Nyb2xsCisgICAgZ2V0Y29tbWl0cyAkc2VsaWQKKyAgICByZXR1cm4gMAorfQorCisjIFRoaXMgbWFrZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBwb3NpdGl2ZSBpbnRlZ2VyIHdoaWNoCisjIHNvcnRzIGFzIGEgc3RyaW5nIGluIG51bWVyaWNhbCBvcmRlcgorcHJvYyBzdHJyZXAge259IHsKKyAgICBpZiB7JG4gPCAxNn0geworCXJldHVybiBbZm9ybWF0ICIleCIgJG5dCisgICAgfSBlbHNlaWYgeyRuIDwgMjU2fSB7CisJcmV0dXJuIFtmb3JtYXQgInglLjJ4IiAkbl0KKyAgICB9IGVsc2VpZiB7JG4gPCA2NTUzNn0geworCXJldHVybiBbZm9ybWF0ICJ5JS40eCIgJG5dCisgICAgfQorICAgIHJldHVybiBbZm9ybWF0ICJ6JS44eCIgJG5dCit9CisKKyMgUHJvY2VkdXJlcyB1c2VkIGluIHJlb3JkZXJpbmcgY29tbWl0cyBmcm9tIGdpdCBsb2cgKHdpdGhvdXQKKyMgLS10b3BvLW9yZGVyKSBpbnRvIHRoZSBvcmRlciBmb3IgZGlzcGxheS4KKworcHJvYyB2YXJjaW5pdCB7dmlld30geworICAgIGdsb2JhbCB2YXJjc3RhcnQgdnVwcHRyIHZkb3ducHRyIHZsZWZ0cHRyIHZiYWNrcHRyIHZhcmN0b2sgdmFyY3JvdworICAgIGdsb2JhbCB2dG9rbW9kIHZhcmNtb2QgdnJvd21vZCB2YXJjaXggdmxhc3RpbnMKKworICAgIHNldCB2YXJjc3RhcnQoJHZpZXcpIHt7fX0KKyAgICBzZXQgdnVwcHRyKCR2aWV3KSB7MH0KKyAgICBzZXQgdmRvd25wdHIoJHZpZXcpIHswfQorICAgIHNldCB2bGVmdHB0cigkdmlldykgezB9CisgICAgc2V0IHZiYWNrcHRyKCR2aWV3KSB7MH0KKyAgICBzZXQgdmFyY3Rvaygkdmlldykge3t9fQorICAgIHNldCB2YXJjcm93KCR2aWV3KSB7e319CisgICAgc2V0IHZ0b2ttb2QoJHZpZXcpIHt9CisgICAgc2V0IHZhcmNtb2QoJHZpZXcpIDAKKyAgICBzZXQgdnJvd21vZCgkdmlldykgMAorICAgIHNldCB2YXJjaXgoJHZpZXcpIHt7fX0KKyAgICBzZXQgdmxhc3RpbnMoJHZpZXcpIHswfQorfQorCitwcm9jIHJlc2V0dmFyY3Mge3ZpZXd9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmNjb21taXRzIHBhcmVudHMgY2hpbGRyZW4gdnNlZWRjb3VudCBvcmRlcnRvaworICAgIGdsb2JhbCB2c2hvcnRpZHMKKworICAgIGZvcmVhY2ggdmlkIFthcnJheSBuYW1lcyB2YXJjaWQgJHZpZXcsKl0geworCXVuc2V0IHZhcmNpZCgkdmlkKQorCXVuc2V0IGNoaWxkcmVuKCR2aWQpCisJdW5zZXQgcGFyZW50cygkdmlkKQorICAgIH0KKyAgICBmb3JlYWNoIHZpZCBbYXJyYXkgbmFtZXMgdnNob3J0aWRzICR2aWV3LCpdIHsKKwl1bnNldCB2c2hvcnRpZHMoJHZpZCkKKyAgICB9CisgICAgIyBzb21lIGNvbW1pdHMgbWlnaHQgaGF2ZSBjaGlsZHJlbiBidXQgaGF2ZW4ndCBiZWVuIHNlZW4geWV0CisgICAgZm9yZWFjaCB2aWQgW2FycmF5IG5hbWVzIGNoaWxkcmVuICR2aWV3LCpdIHsKKwl1bnNldCBjaGlsZHJlbigkdmlkKQorICAgIH0KKyAgICBmb3JlYWNoIHZhIFthcnJheSBuYW1lcyB2YXJjY29tbWl0cyAkdmlldywqXSB7CisJdW5zZXQgdmFyY2NvbW1pdHMoJHZhKQorICAgIH0KKyAgICBmb3JlYWNoIHZkIFthcnJheSBuYW1lcyB2c2VlZGNvdW50ICR2aWV3LCpdIHsKKwl1bnNldCB2c2VlZGNvdW50KCR2ZCkKKyAgICB9CisgICAgY2F0Y2gge3Vuc2V0IG9yZGVydG9rfQorfQorCisjIHJldHVybnMgYSBsaXN0IG9mIHRoZSBjb21taXRzIHdpdGggbm8gY2hpbGRyZW4KK3Byb2Mgc2VlZHMge3Z9IHsKKyAgICBnbG9iYWwgdmRvd25wdHIgdmxlZnRwdHIgdmFyY3N0YXJ0CisKKyAgICBzZXQgcmV0IHt9CisgICAgc2V0IGEgW2xpbmRleCAkdmRvd25wdHIoJHYpIDBdCisgICAgd2hpbGUgeyRhICE9IDB9IHsKKwlsYXBwZW5kIHJldCBbbGluZGV4ICR2YXJjc3RhcnQoJHYpICRhXQorCXNldCBhIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkYV0KKyAgICB9CisgICAgcmV0dXJuICRyZXQKK30KKworcHJvYyBuZXd2YXJjIHt2aWV3IGlkfSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjdG9rIHBhcmVudHMgY2hpbGRyZW4gdmRhdGVtb2RlCisgICAgZ2xvYmFsIHZ1cHB0ciB2ZG93bnB0ciB2bGVmdHB0ciB2YmFja3B0ciB2YXJjcm93IHZhcmNpeCB2YXJjc3RhcnQKKyAgICBnbG9iYWwgY29tbWl0ZGF0YSBjb21taXRpbmZvIHZzZWVkY291bnQgdmFyY2NvbW1pdHMgdmxhc3RpbnMKKworICAgIHNldCBhIFtsbGVuZ3RoICR2YXJjdG9rKCR2aWV3KV0KKyAgICBzZXQgdmlkICR2aWV3LCRpZAorICAgIGlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJHZpZCldID09IDAgfHwgJHZkYXRlbW9kZSgkdmlldyl9IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJICAgIHBhcnNlY29tbWl0ICRpZCAkY29tbWl0ZGF0YSgkaWQpIDEKKwl9CisJc2V0IGNkYXRlIFtsaW5kZXggW2xpbmRleCAkY29tbWl0aW5mbygkaWQpIDRdIDBdCisJaWYgeyFbc3RyaW5nIGlzIGludGVnZXIgLXN0cmljdCAkY2RhdGVdfSB7CisJICAgIHNldCBjZGF0ZSAwCisJfQorCWlmIHshW2luZm8gZXhpc3RzIHZzZWVkY291bnQoJHZpZXcsJGNkYXRlKV19IHsKKwkgICAgc2V0IHZzZWVkY291bnQoJHZpZXcsJGNkYXRlKSAtMQorCX0KKwlzZXQgYyBbaW5jciB2c2VlZGNvdW50KCR2aWV3LCRjZGF0ZSldCisJc2V0IGNkYXRlIFtleHByIHskY2RhdGUgXiAweGZmZmZmZmZmfV0KKwlzZXQgdG9rICJzW3N0cnJlcCAkY2RhdGVdW3N0cnJlcCAkY10iCisgICAgfSBlbHNlIHsKKwlzZXQgdG9rIHt9CisgICAgfQorICAgIHNldCBrYSAwCisgICAgaWYge1tsbGVuZ3RoICRjaGlsZHJlbigkdmlkKV0gPiAwfSB7CisJc2V0IGtpZCBbbGluZGV4ICRjaGlsZHJlbigkdmlkKSBlbmRdCisJc2V0IGsgJHZhcmNpZCgkdmlldywka2lkKQorCWlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdmlldykgJGtdICR0b2tdID4gMH0geworCSAgICBzZXQga2kgJGtpZAorCSAgICBzZXQga2EgJGsKKwkgICAgc2V0IHRvayBbbGluZGV4ICR2YXJjdG9rKCR2aWV3KSAka10KKwl9CisgICAgfQorICAgIGlmIHska2EgIT0gMH0geworCXNldCBpIFtsc2VhcmNoIC1leGFjdCAkcGFyZW50cygkdmlldywka2kpICRpZF0KKwlzZXQgaiBbZXhwciB7W2xsZW5ndGggJHBhcmVudHMoJHZpZXcsJGtpKV0gLSAxIC0gJGl9XQorCWFwcGVuZCB0b2sgW3N0cnJlcCAkal0KKyAgICB9CisgICAgc2V0IGMgW2xpbmRleCAkdmxhc3RpbnMoJHZpZXcpICRrYV0KKyAgICBpZiB7JGMgPT0gMCB8fCBbc3RyaW5nIGNvbXBhcmUgJHRvayBbbGluZGV4ICR2YXJjdG9rKCR2aWV3KSAkY11dIDwgMH0geworCXNldCBjICRrYQorCXNldCBiIFtsaW5kZXggJHZkb3ducHRyKCR2aWV3KSAka2FdCisgICAgfSBlbHNlIHsKKwlzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdmlldykgJGNdCisgICAgfQorICAgIHdoaWxlIHskYiAhPSAwICYmIFtzdHJpbmcgY29tcGFyZSAkdG9rIFtsaW5kZXggJHZhcmN0b2soJHZpZXcpICRiXV0gPj0gMH0geworCXNldCBjICRiCisJc2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHZpZXcpICRjXQorICAgIH0KKyAgICBpZiB7JGMgPT0gJGthfSB7CisJbHNldCB2ZG93bnB0cigkdmlldykgJGthICRhCisJbGFwcGVuZCB2YmFja3B0cigkdmlldykgMAorICAgIH0gZWxzZSB7CisJbHNldCB2bGVmdHB0cigkdmlldykgJGMgJGEKKwlsYXBwZW5kIHZiYWNrcHRyKCR2aWV3KSAkYworICAgIH0KKyAgICBsc2V0IHZsYXN0aW5zKCR2aWV3KSAka2EgJGEKKyAgICBsYXBwZW5kIHZ1cHB0cigkdmlldykgJGthCisgICAgbGFwcGVuZCB2bGVmdHB0cigkdmlldykgJGIKKyAgICBpZiB7JGIgIT0gMH0geworCWxzZXQgdmJhY2twdHIoJHZpZXcpICRiICRhCisgICAgfQorICAgIGxhcHBlbmQgdmFyY3RvaygkdmlldykgJHRvaworICAgIGxhcHBlbmQgdmFyY3N0YXJ0KCR2aWV3KSAkaWQKKyAgICBsYXBwZW5kIHZkb3ducHRyKCR2aWV3KSAwCisgICAgbGFwcGVuZCB2YXJjcm93KCR2aWV3KSB7fQorICAgIGxhcHBlbmQgdmFyY2l4KCR2aWV3KSB7fQorICAgIHNldCB2YXJjY29tbWl0cygkdmlldywkYSkge30KKyAgICBsYXBwZW5kIHZsYXN0aW5zKCR2aWV3KSAwCisgICAgcmV0dXJuICRhCit9CisKK3Byb2Mgc3BsaXR2YXJjIHtwIHZ9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmNzdGFydCB2YXJjY29tbWl0cyB2YXJjdG9rIHZ0b2ttb2QKKyAgICBnbG9iYWwgdnVwcHRyIHZkb3ducHRyIHZsZWZ0cHRyIHZiYWNrcHRyIHZhcmNpeCB2YXJjcm93IHZsYXN0aW5zCisKKyAgICBzZXQgb2EgJHZhcmNpZCgkdiwkcCkKKyAgICBzZXQgb3RvayBbbGluZGV4ICR2YXJjdG9rKCR2KSAkb2FdCisgICAgc2V0IGFjICR2YXJjY29tbWl0cygkdiwkb2EpCisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2YXJjY29tbWl0cygkdiwkb2EpICRwXQorICAgIGlmIHskaSA8PSAwfSByZXR1cm4KKyAgICBzZXQgbmEgW2xsZW5ndGggJHZhcmN0b2soJHYpXQorICAgICMgIiUiIHNvcnRzIGJlZm9yZSAiMCIuLi4KKyAgICBzZXQgdG9rICIkb3RvayVbc3RycmVwICRpXSIKKyAgICBsYXBwZW5kIHZhcmN0b2soJHYpICR0b2sKKyAgICBsYXBwZW5kIHZhcmNyb3coJHYpIHt9CisgICAgbGFwcGVuZCB2YXJjaXgoJHYpIHt9CisgICAgc2V0IHZhcmNjb21taXRzKCR2LCRvYSkgW2xyYW5nZSAkYWMgMCBbZXhwciB7JGkgLSAxfV1dCisgICAgc2V0IHZhcmNjb21taXRzKCR2LCRuYSkgW2xyYW5nZSAkYWMgJGkgZW5kXQorICAgIGxhcHBlbmQgdmFyY3N0YXJ0KCR2KSAkcAorICAgIGZvcmVhY2ggaWQgJHZhcmNjb21taXRzKCR2LCRuYSkgeworCXNldCB2YXJjaWQoJHYsJGlkKSAkbmEKKyAgICB9CisgICAgbGFwcGVuZCB2ZG93bnB0cigkdikgW2xpbmRleCAkdmRvd25wdHIoJHYpICRvYV0KKyAgICBsYXBwZW5kIHZsYXN0aW5zKCR2KSBbbGluZGV4ICR2bGFzdGlucygkdikgJG9hXQorICAgIGxzZXQgdmRvd25wdHIoJHYpICRvYSAkbmEKKyAgICBsc2V0IHZsYXN0aW5zKCR2KSAkb2EgMAorICAgIGxhcHBlbmQgdnVwcHRyKCR2KSAkb2EKKyAgICBsYXBwZW5kIHZsZWZ0cHRyKCR2KSAwCisgICAgbGFwcGVuZCB2YmFja3B0cigkdikgMAorICAgIGZvciB7c2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHYpICRuYV19IHskYiAhPSAwfSB7c2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRiXX0geworCWxzZXQgdnVwcHRyKCR2KSAkYiAkbmEKKyAgICB9CisgICAgaWYge1tzdHJpbmcgY29tcGFyZSAkb3RvayAkdnRva21vZCgkdildIDw9IDB9IHsKKwltb2RpZnlfYXJjICR2ICRvYQorICAgIH0KK30KKworcHJvYyByZW51bWJlcnZhcmMge2Egdn0geworICAgIGdsb2JhbCBwYXJlbnRzIGNoaWxkcmVuIHZhcmN0b2sgdmFyY3N0YXJ0IHZhcmNjb21taXRzCisgICAgZ2xvYmFsIHZ1cHB0ciB2ZG93bnB0ciB2bGVmdHB0ciB2YmFja3B0ciB2bGFzdGlucyB2YXJjaWQgdnRva21vZCB2ZGF0ZW1vZGUKKworICAgIHNldCB0MSBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IHRvZG8ge30KKyAgICBzZXQgaXNyZWxhdGVkKCRhKSAxCisgICAgc2V0IGtpZGNoYW5nZWQoJGEpIDEKKyAgICBzZXQgbnRvdCAwCisgICAgd2hpbGUgeyRhICE9IDB9IHsKKwlpZiB7W2luZm8gZXhpc3RzIGlzcmVsYXRlZCgkYSldfSB7CisJICAgIGxhcHBlbmQgdG9kbyAkYQorCSAgICBzZXQgaWQgW2xpbmRleCAkdmFyY2NvbW1pdHMoJHYsJGEpIGVuZF0KKwkgICAgZm9yZWFjaCBwICRwYXJlbnRzKCR2LCRpZCkgeworCQlpZiB7W2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkcCldfSB7CisJCSAgICBzZXQgaXNyZWxhdGVkKCR2YXJjaWQoJHYsJHApKSAxCisJCX0KKwkgICAgfQorCX0KKwlpbmNyIG50b3QKKwlzZXQgYiBbbGluZGV4ICR2ZG93bnB0cigkdikgJGFdCisJaWYgeyRiID09IDB9IHsKKwkgICAgd2hpbGUgeyRhICE9IDB9IHsKKwkJc2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRhXQorCQlpZiB7JGIgIT0gMH0gYnJlYWsKKwkJc2V0IGEgW2xpbmRleCAkdnVwcHRyKCR2KSAkYV0KKwkgICAgfQorCX0KKwlzZXQgYSAkYgorICAgIH0KKyAgICBmb3JlYWNoIGEgJHRvZG8geworCWlmIHshW2luZm8gZXhpc3RzIGtpZGNoYW5nZWQoJGEpXX0gY29udGludWUKKwlzZXQgaWQgW2xpbmRleCAkdmFyY3N0YXJ0KCR2KSAkYV0KKwlpZiB7W2xsZW5ndGggJGNoaWxkcmVuKCR2LCRpZCldID4gMX0geworCSAgICBzZXQgY2hpbGRyZW4oJHYsJGlkKSBbbHNvcnQgLWNvbW1hbmQgW2xpc3QgdnRva2NtcCAkdl0gXAorCQkJCSAgICAgICRjaGlsZHJlbigkdiwkaWQpXQorCX0KKwlzZXQgb2xkdG9rIFtsaW5kZXggJHZhcmN0b2soJHYpICRhXQorCWlmIHshJHZkYXRlbW9kZSgkdil9IHsKKwkgICAgc2V0IHRvayB7fQorCX0gZWxzZSB7CisJICAgIHNldCB0b2sgJG9sZHRvaworCX0KKwlzZXQga2EgMAorCXNldCBraWQgW2xhc3RfcmVhbF9jaGlsZCAkdiwkaWRdCisJaWYgeyRraWQgbmUge319IHsKKwkgICAgc2V0IGsgJHZhcmNpZCgkdiwka2lkKQorCSAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRrXSAkdG9rXSA+IDB9IHsKKwkJc2V0IGtpICRraWQKKwkJc2V0IGthICRrCisJCXNldCB0b2sgW2xpbmRleCAkdmFyY3RvaygkdikgJGtdCisJICAgIH0KKwl9CisJaWYgeyRrYSAhPSAwfSB7CisJICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkcGFyZW50cygkdiwka2kpICRpZF0KKwkgICAgc2V0IGogW2V4cHIge1tsbGVuZ3RoICRwYXJlbnRzKCR2LCRraSldIC0gMSAtICRpfV0KKwkgICAgYXBwZW5kIHRvayBbc3RycmVwICRqXQorCX0KKwlpZiB7JHRvayBlcSAkb2xkdG9rfSB7CisJICAgIGNvbnRpbnVlCisJfQorCXNldCBpZCBbbGluZGV4ICR2YXJjY29tbWl0cygkdiwkYSkgZW5kXQorCWZvcmVhY2ggcCAkcGFyZW50cygkdiwkaWQpIHsKKwkgICAgaWYge1tpbmZvIGV4aXN0cyB2YXJjaWQoJHYsJHApXX0geworCQlzZXQga2lkY2hhbmdlZCgkdmFyY2lkKCR2LCRwKSkgMQorCSAgICB9IGVsc2UgeworCQlzZXQgc29ydGtpZHMoJHApIDEKKwkgICAgfQorCX0KKwlsc2V0IHZhcmN0b2soJHYpICRhICR0b2sKKwlzZXQgYiBbbGluZGV4ICR2dXBwdHIoJHYpICRhXQorCWlmIHskYiAhPSAka2F9IHsKKwkgICAgaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAka2FdICR2dG9rbW9kKCR2KV0gPCAwfSB7CisJCW1vZGlmeV9hcmMgJHYgJGthCisJICAgIH0KKwkgICAgaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYl0gJHZ0b2ttb2QoJHYpXSA8IDB9IHsKKwkJbW9kaWZ5X2FyYyAkdiAkYgorCSAgICB9CisJICAgIHNldCBjIFtsaW5kZXggJHZiYWNrcHRyKCR2KSAkYV0KKwkgICAgc2V0IGQgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRhXQorCSAgICBpZiB7JGMgPT0gMH0geworCQlsc2V0IHZkb3ducHRyKCR2KSAkYiAkZAorCSAgICB9IGVsc2UgeworCQlsc2V0IHZsZWZ0cHRyKCR2KSAkYyAkZAorCSAgICB9CisJICAgIGlmIHskZCAhPSAwfSB7CisJCWxzZXQgdmJhY2twdHIoJHYpICRkICRjCisJICAgIH0KKwkgICAgaWYge1tsaW5kZXggJHZsYXN0aW5zKCR2KSAkYl0gPT0gJGF9IHsKKwkJbHNldCB2bGFzdGlucygkdikgJGIgJGMKKwkgICAgfQorCSAgICBsc2V0IHZ1cHB0cigkdikgJGEgJGthCisJICAgIHNldCBjIFtsaW5kZXggJHZsYXN0aW5zKCR2KSAka2FdCisJICAgIGlmIHskYyA9PSAwIHx8IFwKKwkJICAgIFtzdHJpbmcgY29tcGFyZSAkdG9rIFtsaW5kZXggJHZhcmN0b2soJHYpICRjXV0gPCAwfSB7CisJCXNldCBjICRrYQorCQlzZXQgYiBbbGluZGV4ICR2ZG93bnB0cigkdikgJGthXQorCSAgICB9IGVsc2UgeworCQlzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdikgJGNdCisJICAgIH0KKwkgICAgd2hpbGUgeyRiICE9IDAgJiYgXAorCQkgICAgICBbc3RyaW5nIGNvbXBhcmUgJHRvayBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYl1dID49IDB9IHsKKwkJc2V0IGMgJGIKKwkJc2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRjXQorCSAgICB9CisJICAgIGlmIHskYyA9PSAka2F9IHsKKyAJCWxzZXQgdmRvd25wdHIoJHYpICRrYSAkYQorCQlsc2V0IHZiYWNrcHRyKCR2KSAkYSAwCisJICAgIH0gZWxzZSB7CisJCWxzZXQgdmxlZnRwdHIoJHYpICRjICRhCisJCWxzZXQgdmJhY2twdHIoJHYpICRhICRjCisJICAgIH0KKwkgICAgbHNldCB2bGVmdHB0cigkdikgJGEgJGIKKwkgICAgaWYgeyRiICE9IDB9IHsKKwkJbHNldCB2YmFja3B0cigkdikgJGIgJGEKKwkgICAgfQorCSAgICBsc2V0IHZsYXN0aW5zKCR2KSAka2EgJGEKKwl9CisgICAgfQorICAgIGZvcmVhY2ggaWQgW2FycmF5IG5hbWVzIHNvcnRraWRzXSB7CisJaWYge1tsbGVuZ3RoICRjaGlsZHJlbigkdiwkaWQpXSA+IDF9IHsKKwkgICAgc2V0IGNoaWxkcmVuKCR2LCRpZCkgW2xzb3J0IC1jb21tYW5kIFtsaXN0IHZ0b2tjbXAgJHZdIFwKKwkJCQkgICAgICAkY2hpbGRyZW4oJHYsJGlkKV0KKwl9CisgICAgfQorICAgIHNldCB0MiBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgI3B1dHMgInJlbnVtYmVydmFyYyBkaWQgW2xsZW5ndGggJHRvZG9dIG9mICRudG90IGFyY3MgaW4gW2V4cHIgeyR0Mi0kdDF9XW1zIgorfQorCisjIEZpeCB1cCB0aGUgZ3JhcGggYWZ0ZXIgd2UgaGF2ZSBmb3VuZCBvdXQgdGhhdCBpbiB2aWV3ICR2LAorIyAkcCAoYSBjb21taXQgdGhhdCB3ZSBoYXZlIGFscmVhZHkgc2VlbikgaXMgYWN0dWFsbHkgdGhlIHBhcmVudAorIyBvZiB0aGUgbGFzdCBjb21taXQgaW4gYXJjICRhLgorcHJvYyBmaXhfcmV2ZXJzYWwge3AgYSB2fSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjc3RhcnQgdmFyY3RvayB2dXBwdHIKKworICAgIHNldCBwYSAkdmFyY2lkKCR2LCRwKQorICAgIGlmIHskcCBuZSBbbGluZGV4ICR2YXJjc3RhcnQoJHYpICRwYV19IHsKKwlzcGxpdHZhcmMgJHAgJHYKKwlzZXQgcGEgJHZhcmNpZCgkdiwkcCkKKyAgICB9CisgICAgIyBzZWVkcyBhbHdheXMgbmVlZCB0byBiZSByZW51bWJlcmVkCisgICAgaWYge1tsaW5kZXggJHZ1cHB0cigkdikgJHBhXSA9PSAwIHx8CisJW3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRhXSBcCisJICAgICBbbGluZGV4ICR2YXJjdG9rKCR2KSAkcGFdXSA+IDB9IHsKKwlyZW51bWJlcnZhcmMgJHBhICR2CisgICAgfQorfQorCitwcm9jIGluc2VydHJvdyB7aWQgcCB2fSB7CisgICAgZ2xvYmFsIGNtaXRsaXN0ZWQgY2hpbGRyZW4gcGFyZW50cyB2YXJjaWQgdmFyY3RvayB2dG9rbW9kCisgICAgZ2xvYmFsIHZhcmNjb21taXRzIG9yZGVydG9rIGNvbW1pdGlkeCBudW1jb21taXRzIGN1cnZpZXcKKyAgICBnbG9iYWwgdGFyZ2V0aWQgdGFyZ2V0cm93IHZzaG9ydGlkcworCisgICAgcmVhZGNvbW1pdCAkaWQKKyAgICBzZXQgdmlkICR2LCRpZAorICAgIHNldCBjbWl0bGlzdGVkKCR2aWQpIDEKKyAgICBzZXQgY2hpbGRyZW4oJHZpZCkge30KKyAgICBzZXQgcGFyZW50cygkdmlkKSBbbGlzdCAkcF0KKyAgICBzZXQgYSBbbmV3dmFyYyAkdiAkaWRdCisgICAgc2V0IHZhcmNpZCgkdmlkKSAkYQorICAgIGxhcHBlbmQgdnNob3J0aWRzKCR2LFtzdHJpbmcgcmFuZ2UgJGlkIDAgM10pICRpZAorICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdICR2dG9rbW9kKCR2KV0gPCAwfSB7CisJbW9kaWZ5X2FyYyAkdiAkYQorICAgIH0KKyAgICBsYXBwZW5kIHZhcmNjb21taXRzKCR2LCRhKSAkaWQKKyAgICBzZXQgdnAgJHYsJHAKKyAgICBpZiB7W2xsZW5ndGggW2xhcHBlbmQgY2hpbGRyZW4oJHZwKSAkaWRdXSA+IDF9IHsKKwlzZXQgY2hpbGRyZW4oJHZwKSBbbHNvcnQgLWNvbW1hbmQgW2xpc3QgdnRva2NtcCAkdl0gJGNoaWxkcmVuKCR2cCldCisJY2F0Y2gge3Vuc2V0IG9yZGVydG9rfQorICAgIH0KKyAgICBmaXhfcmV2ZXJzYWwgJHAgJGEgJHYKKyAgICBpbmNyIGNvbW1pdGlkeCgkdikKKyAgICBpZiB7JHYgPT0gJGN1cnZpZXd9IHsKKwlzZXQgbnVtY29tbWl0cyAkY29tbWl0aWR4KCR2KQorCXNldGNhbnZzY3JvbGwKKwlpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXX0geworCSAgICBpZiB7IVtjb21lc19iZWZvcmUgJHRhcmdldGlkICRwXX0geworCQlpbmNyIHRhcmdldHJvdworCSAgICB9CisJfQorICAgIH0KK30KKworcHJvYyBpbnNlcnRmYWtlcm93IHtpZCBwfSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjY29tbWl0cyBwYXJlbnRzIGNoaWxkcmVuIGNtaXRsaXN0ZWQKKyAgICBnbG9iYWwgY29tbWl0aWR4IHZhcmN0b2sgdnRva21vZCB0YXJnZXRpZCB0YXJnZXRyb3cgY3VydmlldyBudW1jb21taXRzCisKKyAgICBzZXQgdiAkY3VydmlldworICAgIHNldCBhICR2YXJjaWQoJHYsJHApCisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2YXJjY29tbWl0cygkdiwkYSkgJHBdCisgICAgaWYgeyRpIDwgMH0geworCXB1dHMgIm9vcHM6IGluc2VydGZha2Vyb3cgY2FuJ3QgZmluZCBbc2hvcnRpZHMgJHBdIG9uIGFyYyAkYSIKKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGNoaWxkcmVuKCR2LCRpZCkge30KKyAgICBzZXQgcGFyZW50cygkdiwkaWQpIFtsaXN0ICRwXQorICAgIHNldCB2YXJjaWQoJHYsJGlkKSAkYQorICAgIGxhcHBlbmQgY2hpbGRyZW4oJHYsJHApICRpZAorICAgIHNldCBjbWl0bGlzdGVkKCR2LCRpZCkgMQorICAgIHNldCBudW1jb21taXRzIFtpbmNyIGNvbW1pdGlkeCgkdildCisgICAgIyBub3RlIHdlIGRlbGliZXJhdGVseSBkb24ndCB1cGRhdGUgdmFyY3N0YXJ0KCR2KSBldmVuIGlmICRpID09IDAKKyAgICBzZXQgdmFyY2NvbW1pdHMoJHYsJGEpIFtsaW5zZXJ0ICR2YXJjY29tbWl0cygkdiwkYSkgJGkgJGlkXQorICAgIG1vZGlmeV9hcmMgJHYgJGEgJGkKKyAgICBpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXX0geworCWlmIHshW2NvbWVzX2JlZm9yZSAkdGFyZ2V0aWQgJHBdfSB7CisJICAgIGluY3IgdGFyZ2V0cm93CisJfQorICAgIH0KKyAgICBzZXRjYW52c2Nyb2xsCisgICAgZHJhd3Zpc2libGUKK30KKworcHJvYyByZW1vdmVmYWtlcm93IHtpZH0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY2NvbW1pdHMgcGFyZW50cyBjaGlsZHJlbiBjb21taXRpZHgKKyAgICBnbG9iYWwgdmFyY3RvayB2dG9rbW9kIGNtaXRsaXN0ZWQgY3VycmVudGlkIHNlbGVjdGVkbGluZQorICAgIGdsb2JhbCB0YXJnZXRpZCBjdXJ2aWV3IG51bWNvbW1pdHMKKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgaWYge1tsbGVuZ3RoICRwYXJlbnRzKCR2LCRpZCldICE9IDF9IHsKKwlwdXRzICJvb3BzOiByZW1vdmVmYWtlcm93IFtzaG9ydGlkcyAkaWRdIGhhcyBbbGxlbmd0aCAkcGFyZW50cygkdiwkaWQpXSBwYXJlbnRzIgorCXJldHVybgorICAgIH0KKyAgICBzZXQgcCBbbGluZGV4ICRwYXJlbnRzKCR2LCRpZCkgMF0KKyAgICBzZXQgYSAkdmFyY2lkKCR2LCRpZCkKKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHZhcmNjb21taXRzKCR2LCRhKSAkaWRdCisgICAgaWYgeyRpIDwgMH0geworCXB1dHMgIm9vcHM6IHJlbW92ZWZha2Vyb3cgY2FuJ3QgZmluZCBbc2hvcnRpZHMgJGlkXSBvbiBhcmMgJGEiCisJcmV0dXJuCisgICAgfQorICAgIHVuc2V0IHZhcmNpZCgkdiwkaWQpCisgICAgc2V0IHZhcmNjb21taXRzKCR2LCRhKSBbbHJlcGxhY2UgJHZhcmNjb21taXRzKCR2LCRhKSAkaSAkaV0KKyAgICB1bnNldCBwYXJlbnRzKCR2LCRpZCkKKyAgICB1bnNldCBjaGlsZHJlbigkdiwkaWQpCisgICAgdW5zZXQgY21pdGxpc3RlZCgkdiwkaWQpCisgICAgc2V0IG51bWNvbW1pdHMgW2luY3IgY29tbWl0aWR4KCR2KSAtMV0KKyAgICBzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGNoaWxkcmVuKCR2LCRwKSAkaWRdCisgICAgaWYgeyRqID49IDB9IHsKKwlzZXQgY2hpbGRyZW4oJHYsJHApIFtscmVwbGFjZSAkY2hpbGRyZW4oJHYsJHApICRqICRqXQorICAgIH0KKyAgICBtb2RpZnlfYXJjICR2ICRhICRpCisgICAgaWYge1tpbmZvIGV4aXN0IGN1cnJlbnRpZF0gJiYgJGlkIGVxICRjdXJyZW50aWR9IHsKKwl1bnNldCBjdXJyZW50aWQKKwlzZXQgc2VsZWN0ZWRsaW5lIHt9CisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgdGFyZ2V0aWRdICYmICR0YXJnZXRpZCBlcSAkaWR9IHsKKwlzZXQgdGFyZ2V0aWQgJHAKKyAgICB9CisgICAgc2V0Y2FudnNjcm9sbAorICAgIGRyYXd2aXNpYmxlCit9CisKK3Byb2MgcmVhbF9jaGlsZHJlbiB7dnB9IHsKKyAgICBnbG9iYWwgY2hpbGRyZW4gbnVsbGlkIG51bGxpZDIKKworICAgIHNldCBraWRzIHt9CisgICAgZm9yZWFjaCBpZCAkY2hpbGRyZW4oJHZwKSB7CisJaWYgeyRpZCBuZSAkbnVsbGlkICYmICRpZCBuZSAkbnVsbGlkMn0geworCSAgICBsYXBwZW5kIGtpZHMgJGlkCisJfQorICAgIH0KKyAgICByZXR1cm4gJGtpZHMKK30KKworcHJvYyBmaXJzdF9yZWFsX2NoaWxkIHt2cH0geworICAgIGdsb2JhbCBjaGlsZHJlbiBudWxsaWQgbnVsbGlkMgorCisgICAgZm9yZWFjaCBpZCAkY2hpbGRyZW4oJHZwKSB7CisJaWYgeyRpZCBuZSAkbnVsbGlkICYmICRpZCBuZSAkbnVsbGlkMn0geworCSAgICByZXR1cm4gJGlkCisJfQorICAgIH0KKyAgICByZXR1cm4ge30KK30KKworcHJvYyBsYXN0X3JlYWxfY2hpbGQge3ZwfSB7CisgICAgZ2xvYmFsIGNoaWxkcmVuIG51bGxpZCBudWxsaWQyCisKKyAgICBzZXQga2lkcyAkY2hpbGRyZW4oJHZwKQorICAgIGZvciB7c2V0IGkgW2xsZW5ndGggJGtpZHNdfSB7W2luY3IgaSAtMV0gPj0gMH0ge30geworCXNldCBpZCBbbGluZGV4ICRraWRzICRpXQorCWlmIHskaWQgbmUgJG51bGxpZCAmJiAkaWQgbmUgJG51bGxpZDJ9IHsKKwkgICAgcmV0dXJuICRpZAorCX0KKyAgICB9CisgICAgcmV0dXJuIHt9Cit9CisKK3Byb2MgdnRva2NtcCB7diBhIGJ9IHsKKyAgICBnbG9iYWwgdmFyY3RvayB2YXJjaWQKKworICAgIHJldHVybiBbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJHZhcmNpZCgkdiwkYSldIFwKKwkJW2xpbmRleCAkdmFyY3RvaygkdikgJHZhcmNpZCgkdiwkYildXQorfQorCisjIFRoaXMgYXNzdW1lcyB0aGF0IGlmIGxpbSBpcyBub3QgZ2l2ZW4sIHRoZSBjYWxsZXIgaGFzIGNoZWNrZWQgdGhhdAorIyBhcmMgYSdzIHRva2VuIGlzIGxlc3MgdGhhbiAkdnRva21vZCgkdikKK3Byb2MgbW9kaWZ5X2FyYyB7diBhIHtsaW0ge319fSB7CisgICAgZ2xvYmFsIHZhcmN0b2sgdnRva21vZCB2YXJjbW9kIHZhcmNyb3cgdnVwcHRyIGN1cnZpZXcgdnJvd21vZCB2YXJjY29tbWl0cworCisgICAgaWYgeyRsaW0gbmUge319IHsKKwlzZXQgYyBbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdICR2dG9rbW9kKCR2KV0KKwlpZiB7JGMgPiAwfSByZXR1cm4KKwlpZiB7JGMgPT0gMH0geworCSAgICBzZXQgciBbbGluZGV4ICR2YXJjcm93KCR2KSAkYV0KKwkgICAgaWYgeyRyIG5lIHt9ICYmICR2cm93bW9kKCR2KSA8PSAkciArICRsaW19IHJldHVybgorCX0KKyAgICB9CisgICAgc2V0IHZ0b2ttb2QoJHYpIFtsaW5kZXggJHZhcmN0b2soJHYpICRhXQorICAgIHNldCB2YXJjbW9kKCR2KSAkYQorICAgIGlmIHskdiA9PSAkY3Vydmlld30geworCXdoaWxlIHskYSAhPSAwICYmIFtsaW5kZXggJHZhcmNyb3coJHYpICRhXSBlcSB7fX0geworCSAgICBzZXQgYSBbbGluZGV4ICR2dXBwdHIoJHYpICRhXQorCSAgICBzZXQgbGltIHt9CisJfQorCXNldCByIDAKKwlpZiB7JGEgIT0gMH0geworCSAgICBpZiB7JGxpbSBlcSB7fX0geworCQlzZXQgbGltIFtsbGVuZ3RoICR2YXJjY29tbWl0cygkdiwkYSldCisJICAgIH0KKwkgICAgc2V0IHIgW2V4cHIge1tsaW5kZXggJHZhcmNyb3coJHYpICRhXSArICRsaW19XQorCX0KKwlzZXQgdnJvd21vZCgkdikgJHIKKwl1bmRvbGF5b3V0ICRyCisgICAgfQorfQorCitwcm9jIHVwZGF0ZV9hcmNyb3dzIHt2fSB7CisgICAgZ2xvYmFsIHZ0b2ttb2QgdmFyY21vZCB2cm93bW9kIHZhcmNyb3cgY29tbWl0aWR4IGN1cnJlbnRpZCBzZWxlY3RlZGxpbmUKKyAgICBnbG9iYWwgdmFyY2lkIHZyb3dudW0gdmFyY29yZGVyIHZhcmNpeCB2YXJjY29tbWl0cworICAgIGdsb2JhbCB2dXBwdHIgdmRvd25wdHIgdmxlZnRwdHIgdmFyY3RvaworICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgcGFyZW50bGlzdCBjdXJ2aWV3IGNhY2hlZF9jb21taXRyb3cKKworICAgIGlmIHskdnJvd21vZCgkdikgPT0gJGNvbW1pdGlkeCgkdil9IHJldHVybgorICAgIGlmIHskdiA9PSAkY3Vydmlld30geworCWlmIHtbbGxlbmd0aCAkZGlzcGxheW9yZGVyXSA+ICR2cm93bW9kKCR2KX0geworCSAgICBzZXQgZGlzcGxheW9yZGVyIFtscmFuZ2UgJGRpc3BsYXlvcmRlciAwIFtleHByIHskdnJvd21vZCgkdikgLSAxfV1dCisJICAgIHNldCBwYXJlbnRsaXN0IFtscmFuZ2UgJHBhcmVudGxpc3QgMCBbZXhwciB7JHZyb3dtb2QoJHYpIC0gMX1dXQorCX0KKwljYXRjaCB7dW5zZXQgY2FjaGVkX2NvbW1pdHJvd30KKyAgICB9CisgICAgc2V0IG5hcmN0b3QgW2V4cHIge1tsbGVuZ3RoICR2YXJjdG9rKCR2KV0gLSAxfV0KKyAgICBzZXQgYSAkdmFyY21vZCgkdikKKyAgICB3aGlsZSB7JGEgIT0gMCAmJiBbbGluZGV4ICR2YXJjaXgoJHYpICRhXSBlcSB7fX0geworCSMgZ28gdXAgdGhlIHRyZWUgdW50aWwgd2UgZmluZCBzb21ldGhpbmcgdGhhdCBoYXMgYSByb3cgbnVtYmVyLAorCSMgb3Igd2UgZ2V0IHRvIGEgc2VlZAorCXNldCBhIFtsaW5kZXggJHZ1cHB0cigkdikgJGFdCisgICAgfQorICAgIGlmIHskYSA9PSAwfSB7CisJc2V0IGEgW2xpbmRleCAkdmRvd25wdHIoJHYpIDBdCisJaWYgeyRhID09IDB9IHJldHVybgorCXNldCB2cm93bnVtKCR2KSB7MH0KKwlzZXQgdmFyY29yZGVyKCR2KSBbbGlzdCAkYV0KKwlsc2V0IHZhcmNpeCgkdikgJGEgMAorCWxzZXQgdmFyY3JvdygkdikgJGEgMAorCXNldCBhcmNuIDAKKwlzZXQgcm93IDAKKyAgICB9IGVsc2UgeworCXNldCBhcmNuIFtsaW5kZXggJHZhcmNpeCgkdikgJGFdCisJaWYge1tsbGVuZ3RoICR2cm93bnVtKCR2KV0gPiAkYXJjbiArIDF9IHsKKwkgICAgc2V0IHZyb3dudW0oJHYpIFtscmFuZ2UgJHZyb3dudW0oJHYpIDAgJGFyY25dCisJICAgIHNldCB2YXJjb3JkZXIoJHYpIFtscmFuZ2UgJHZhcmNvcmRlcigkdikgMCAkYXJjbl0KKwl9CisJc2V0IHJvdyBbbGluZGV4ICR2YXJjcm93KCR2KSAkYV0KKyAgICB9CisgICAgd2hpbGUgezF9IHsKKwlzZXQgcCAkYQorCWluY3Igcm93IFtsbGVuZ3RoICR2YXJjY29tbWl0cygkdiwkYSldCisJIyBnbyBkb3duIGlmIHBvc3NpYmxlCisJc2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHYpICRhXQorCWlmIHskYiA9PSAwfSB7CisJICAgICMgaWYgbm90LCBnbyBsZWZ0LCBvciBnbyB1cCB1bnRpbCB3ZSBjYW4gZ28gbGVmdAorCSAgICB3aGlsZSB7JGEgIT0gMH0geworCQlzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdikgJGFdCisJCWlmIHskYiAhPSAwfSBicmVhaworCQlzZXQgYSBbbGluZGV4ICR2dXBwdHIoJHYpICRhXQorCSAgICB9CisJICAgIGlmIHskYSA9PSAwfSBicmVhaworCX0KKwlzZXQgYSAkYgorCWluY3IgYXJjbgorCWxhcHBlbmQgdnJvd251bSgkdikgJHJvdworCWxhcHBlbmQgdmFyY29yZGVyKCR2KSAkYQorCWxzZXQgdmFyY2l4KCR2KSAkYSAkYXJjbgorCWxzZXQgdmFyY3JvdygkdikgJGEgJHJvdworICAgIH0KKyAgICBzZXQgdnRva21vZCgkdikgW2xpbmRleCAkdmFyY3RvaygkdikgJHBdCisgICAgc2V0IHZhcmNtb2QoJHYpICRwCisgICAgc2V0IHZyb3dtb2QoJHYpICRyb3cKKyAgICBpZiB7W2luZm8gZXhpc3RzIGN1cnJlbnRpZF19IHsKKwlzZXQgc2VsZWN0ZWRsaW5lIFtyb3dvZmNvbW1pdCAkY3VycmVudGlkXQorICAgIH0KK30KKworIyBUZXN0IHdoZXRoZXIgdmlldyAkdiBjb250YWlucyBjb21taXQgJGlkCitwcm9jIGNvbW1pdGludmlldyB7aWQgdn0geworICAgIGdsb2JhbCB2YXJjaWQKKworICAgIHJldHVybiBbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRpZCldCit9CisKKyMgUmV0dXJuIHRoZSByb3cgbnVtYmVyIGZvciBjb21taXQgJGlkIGluIHRoZSBjdXJyZW50IHZpZXcKK3Byb2Mgcm93b2Zjb21taXQge2lkfSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjY29tbWl0cyB2YXJjcm93IGN1cnZpZXcgY2FjaGVkX2NvbW1pdHJvdworICAgIGdsb2JhbCB2YXJjdG9rIHZ0b2ttb2QKKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgaWYgeyFbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRpZCldfSB7CisJcHV0cyAib29wcyByb3dvZmNvbW1pdCBubyBhcmMgZm9yIFtzaG9ydGlkcyAkaWRdIgorCXJldHVybiB7fQorICAgIH0KKyAgICBzZXQgYSAkdmFyY2lkKCR2LCRpZCkKKyAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRhXSAkdnRva21vZCgkdildID49IDB9IHsKKwl1cGRhdGVfYXJjcm93cyAkdgorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9jb21taXRyb3coJGlkKV19IHsKKwlyZXR1cm4gJGNhY2hlZF9jb21taXRyb3coJGlkKQorICAgIH0KKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHZhcmNjb21taXRzKCR2LCRhKSAkaWRdCisgICAgaWYgeyRpIDwgMH0geworCXB1dHMgIm9vcHMgZGlkbid0IGZpbmQgY29tbWl0IFtzaG9ydGlkcyAkaWRdIGluIGFyYyAkYSIKKwlyZXR1cm4ge30KKyAgICB9CisgICAgaW5jciBpIFtsaW5kZXggJHZhcmNyb3coJHYpICRhXQorICAgIHNldCBjYWNoZWRfY29tbWl0cm93KCRpZCkgJGkKKyAgICByZXR1cm4gJGkKK30KKworIyBSZXR1cm5zIDEgaWYgYSBpcyBvbiBhbiBlYXJsaWVyIHJvdyB0aGFuIGIsIG90aGVyd2lzZSAwCitwcm9jIGNvbWVzX2JlZm9yZSB7YSBifSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjdG9rIGN1cnZpZXcKKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgaWYgeyRhIGVxICRiIHx8ICFbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRhKV0gfHwgXAorCSAgICAhW2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkYildfSB7CisJcmV0dXJuIDAKKyAgICB9CisgICAgaWYgeyR2YXJjaWQoJHYsJGEpICE9ICR2YXJjaWQoJHYsJGIpfSB7CisJcmV0dXJuIFtleHByIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJHZhcmNpZCgkdiwkYSldIFwKKwkJCSAgIFtsaW5kZXggJHZhcmN0b2soJHYpICR2YXJjaWQoJHYsJGIpXV0gPCAwfV0KKyAgICB9CisgICAgcmV0dXJuIFtleHByIHtbcm93b2Zjb21taXQgJGFdIDwgW3Jvd29mY29tbWl0ICRiXX1dCit9CisKK3Byb2MgYnNlYXJjaCB7bCBlbHR9IHsKKyAgICBpZiB7W2xsZW5ndGggJGxdID09IDAgfHwgJGVsdCA8PSBbbGluZGV4ICRsIDBdfSB7CisJcmV0dXJuIDAKKyAgICB9CisgICAgc2V0IGxvIDAKKyAgICBzZXQgaGkgW2xsZW5ndGggJGxdCisgICAgd2hpbGUgeyRoaSAtICRsbyA+IDF9IHsKKwlzZXQgbWlkIFtleHByIHtpbnQoKCRsbyArICRoaSkgLyAyKX1dCisJc2V0IHQgW2xpbmRleCAkbCAkbWlkXQorCWlmIHskZWx0IDwgJHR9IHsKKwkgICAgc2V0IGhpICRtaWQKKwl9IGVsc2VpZiB7JGVsdCA+ICR0fSB7CisJICAgIHNldCBsbyAkbWlkCisJfSBlbHNlIHsKKwkgICAgcmV0dXJuICRtaWQKKwl9CisgICAgfQorICAgIHJldHVybiAkbG8KK30KKworIyBNYWtlIHN1cmUgcm93cyAkc3RhcnQuLiRlbmQtMSBhcmUgdmFsaWQgaW4gZGlzcGxheW9yZGVyIGFuZCBwYXJlbnRsaXN0Citwcm9jIG1ha2VfZGlzcG9yZGVyIHtzdGFydCBlbmR9IHsKKyAgICBnbG9iYWwgdnJvd251bSBjdXJ2aWV3IGNvbW1pdGlkeCBkaXNwbGF5b3JkZXIgcGFyZW50bGlzdAorICAgIGdsb2JhbCB2YXJjY29tbWl0cyB2YXJjb3JkZXIgcGFyZW50cyB2cm93bW9kIHZhcmNyb3cKKyAgICBnbG9iYWwgZF92YWxpZF9zdGFydCBkX3ZhbGlkX2VuZAorCisgICAgaWYgeyRlbmQgPiAkdnJvd21vZCgkY3Vydmlldyl9IHsKKwl1cGRhdGVfYXJjcm93cyAkY3VydmlldworICAgIH0KKyAgICBzZXQgYWkgW2JzZWFyY2ggJHZyb3dudW0oJGN1cnZpZXcpICRzdGFydF0KKyAgICBzZXQgc3RhcnQgW2xpbmRleCAkdnJvd251bSgkY3VydmlldykgJGFpXQorICAgIHNldCBuYXJjIFtsbGVuZ3RoICR2cm93bnVtKCRjdXJ2aWV3KV0KKyAgICBmb3Ige3NldCByICRzdGFydH0geyRhaSA8ICRuYXJjICYmICRyIDwgJGVuZH0ge2luY3IgYWl9IHsKKwlzZXQgYSBbbGluZGV4ICR2YXJjb3JkZXIoJGN1cnZpZXcpICRhaV0KKwlzZXQgbCBbbGxlbmd0aCAkZGlzcGxheW9yZGVyXQorCXNldCBhbCBbbGxlbmd0aCAkdmFyY2NvbW1pdHMoJGN1cnZpZXcsJGEpXQorCWlmIHskbCA8ICRyICsgJGFsfSB7CisJICAgIGlmIHskbCA8ICRyfSB7CisJCXNldCBwYWQgW250aW1lcyBbZXhwciB7JHIgLSAkbH1dIHt9XQorCQlzZXQgZGlzcGxheW9yZGVyIFtjb25jYXQgJGRpc3BsYXlvcmRlciAkcGFkXQorCQlzZXQgcGFyZW50bGlzdCBbY29uY2F0ICRwYXJlbnRsaXN0ICRwYWRdCisJICAgIH0gZWxzZWlmIHskbCA+ICRyfSB7CisJCXNldCBkaXNwbGF5b3JkZXIgW2xyYW5nZSAkZGlzcGxheW9yZGVyIDAgW2V4cHIgeyRyIC0gMX1dXQorCQlzZXQgcGFyZW50bGlzdCBbbHJhbmdlICRwYXJlbnRsaXN0IDAgW2V4cHIgeyRyIC0gMX1dXQorCSAgICB9CisJICAgIGZvcmVhY2ggaWQgJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKSB7CisJCWxhcHBlbmQgZGlzcGxheW9yZGVyICRpZAorCQlsYXBwZW5kIHBhcmVudGxpc3QgJHBhcmVudHMoJGN1cnZpZXcsJGlkKQorCSAgICB9CisJfSBlbHNlaWYge1tsaW5kZXggJGRpc3BsYXlvcmRlciBbZXhwciB7JHIgKyAkYWwgLSAxfV1dIGVxIHt9fSB7CisJICAgIHNldCBpICRyCisJICAgIGZvcmVhY2ggaWQgJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKSB7CisJCWxzZXQgZGlzcGxheW9yZGVyICRpICRpZAorCQlsc2V0IHBhcmVudGxpc3QgJGkgJHBhcmVudHMoJGN1cnZpZXcsJGlkKQorCQlpbmNyIGkKKwkgICAgfQorCX0KKwlpbmNyIHIgJGFsCisgICAgfQorfQorCitwcm9jIGNvbW1pdG9ucm93IHtyb3d9IHsKKyAgICBnbG9iYWwgZGlzcGxheW9yZGVyCisKKyAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisgICAgaWYgeyRpZCBlcSB7fX0geworCW1ha2VfZGlzcG9yZGVyICRyb3cgW2V4cHIgeyRyb3cgKyAxfV0KKwlzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisgICAgfQorICAgIHJldHVybiAkaWQKK30KKworcHJvYyBjbG9zZXZhcmNzIHt2fSB7CisgICAgZ2xvYmFsIHZhcmN0b2sgdmFyY2NvbW1pdHMgdmFyY2lkIHBhcmVudHMgY2hpbGRyZW4KKyAgICBnbG9iYWwgY21pdGxpc3RlZCBjb21taXRpZHggdnRva21vZAorCisgICAgc2V0IG1pc3NpbmdfcGFyZW50cyAwCisgICAgc2V0IHNjcmlwdHMge30KKyAgICBzZXQgbmFyY3MgW2xsZW5ndGggJHZhcmN0b2soJHYpXQorICAgIGZvciB7c2V0IGEgMX0geyRhIDwgJG5hcmNzfSB7aW5jciBhfSB7CisJc2V0IGlkIFtsaW5kZXggJHZhcmNjb21taXRzKCR2LCRhKSBlbmRdCisJZm9yZWFjaCBwICRwYXJlbnRzKCR2LCRpZCkgeworCSAgICBpZiB7W2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkcCldfSBjb250aW51ZQorCSAgICAjIGFkZCBwIGFzIGEgbmV3IGNvbW1pdAorCSAgICBpbmNyIG1pc3NpbmdfcGFyZW50cworCSAgICBzZXQgY21pdGxpc3RlZCgkdiwkcCkgMAorCSAgICBzZXQgcGFyZW50cygkdiwkcCkge30KKwkgICAgaWYge1tsbGVuZ3RoICRjaGlsZHJlbigkdiwkcCldID09IDEgJiYKKwkJW2xsZW5ndGggJHBhcmVudHMoJHYsJGlkKV0gPT0gMX0geworCQlzZXQgYiAkYQorCSAgICB9IGVsc2UgeworCQlzZXQgYiBbbmV3dmFyYyAkdiAkcF0KKwkgICAgfQorCSAgICBzZXQgdmFyY2lkKCR2LCRwKSAkYgorCSAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRiXSAkdnRva21vZCgkdildIDwgMH0geworCQltb2RpZnlfYXJjICR2ICRiCisJICAgIH0KKwkgICAgbGFwcGVuZCB2YXJjY29tbWl0cygkdiwkYikgJHAKKwkgICAgaW5jciBjb21taXRpZHgoJHYpCisJICAgIHNldCBzY3JpcHRzIFtjaGVja19pbnRlcmVzdCAkcCAkc2NyaXB0c10KKwl9CisgICAgfQorICAgIGlmIHskbWlzc2luZ19wYXJlbnRzID4gMH0geworCWZvcmVhY2ggcyAkc2NyaXB0cyB7CisJICAgIGV2YWwgJHMKKwl9CisgICAgfQorfQorCisjIFVzZSAkcndpZCBhcyBhIHN1YnN0aXR1dGUgZm9yICRpZCwgaS5lLiByZXBhcmVudCAkaWQncyBjaGlsZHJlbiB0byAkcndpZAorIyBBc3N1bWVzIHdlIGFscmVhZHkgaGF2ZSBhbiBhcmMgZm9yICRyd2lkLgorcHJvYyByZXdyaXRlX2NvbW1pdCB7diBpZCByd2lkfSB7CisgICAgZ2xvYmFsIGNoaWxkcmVuIHBhcmVudHMgdmFyY2lkIHZhcmN0b2sgdnRva21vZCB2YXJjY29tbWl0cworCisgICAgZm9yZWFjaCBjaCAkY2hpbGRyZW4oJHYsJGlkKSB7CisJIyBtYWtlICRyd2lkIGJlICRjaCdzIHBhcmVudCBpbiBwbGFjZSBvZiAkaWQKKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHBhcmVudHMoJHYsJGNoKSAkaWRdCisJaWYgeyRpIDwgMH0geworCSAgICBwdXRzICJvb3BzIHJld3JpdGVfY29tbWl0IGRpZG4ndCBmaW5kICRpZCBpbiBwYXJlbnQgbGlzdCBmb3IgJGNoIgorCX0KKwlzZXQgcGFyZW50cygkdiwkY2gpIFtscmVwbGFjZSAkcGFyZW50cygkdiwkY2gpICRpICRpICRyd2lkXQorCSMgYWRkICRjaCB0byAkcndpZCdzIGNoaWxkcmVuIGFuZCBzb3J0IHRoZSBsaXN0IGlmIG5lY2Vzc2FyeQorCWlmIHtbbGxlbmd0aCBbbGFwcGVuZCBjaGlsZHJlbigkdiwkcndpZCkgJGNoXV0gPiAxfSB7CisJICAgIHNldCBjaGlsZHJlbigkdiwkcndpZCkgW2xzb3J0IC1jb21tYW5kIFtsaXN0IHZ0b2tjbXAgJHZdIFwKKwkJCQkJJGNoaWxkcmVuKCR2LCRyd2lkKV0KKwl9CisJIyBmaXggdGhlIGdyYXBoIGFmdGVyIGpvaW5pbmcgJGlkIHRvICRyd2lkCisJc2V0IGEgJHZhcmNpZCgkdiwkY2gpCisJZml4X3JldmVyc2FsICRyd2lkICRhICR2CisJIyBwYXJlbnRsaXN0IGlzIHdyb25nIGZvciB0aGUgbGFzdCBlbGVtZW50IG9mIGFyYyAkYQorCSMgZXZlbiBpZiBkaXNwbGF5b3JkZXIgaXMgcmlnaHQsIGhlbmNlIHRoZSAzcmQgYXJnIGhlcmUKKwltb2RpZnlfYXJjICR2ICRhIFtleHByIHtbbGxlbmd0aCAkdmFyY2NvbW1pdHMoJHYsJGEpXSAtIDF9XQorICAgIH0KK30KKworIyBNZWNoYW5pc20gZm9yIHJlZ2lzdGVyaW5nIGEgY29tbWFuZCB0byBiZSBleGVjdXRlZCB3aGVuIHdlIGNvbWUKKyMgYWNyb3NzIGEgcGFydGljdWxhciBjb21taXQuICBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBvbmx5IHRoZQorIyBwcmVmaXggb2YgdGhlIGNvbW1pdCBpcyBrbm93biwgdGhlIGNvbW1pdGludGVyZXN0IGFycmF5IGlzIG5vdworIyBpbmRleGVkIGJ5IHRoZSBmaXJzdCA0IGNoYXJhY3RlcnMgb2YgdGhlIElELiAgRWFjaCBlbGVtZW50IGlzIGEKKyMgbGlzdCBvZiBpZCwgY21kIHBhaXJzLgorcHJvYyBpbnRlcmVzdGVkaW4ge2lkIGNtZH0geworICAgIGdsb2JhbCBjb21taXRpbnRlcmVzdAorCisgICAgbGFwcGVuZCBjb21taXRpbnRlcmVzdChbc3RyaW5nIHJhbmdlICRpZCAwIDNdKSAkaWQgJGNtZAorfQorCitwcm9jIGNoZWNrX2ludGVyZXN0IHtpZCBzY3JpcHRzfSB7CisgICAgZ2xvYmFsIGNvbW1pdGludGVyZXN0CisKKyAgICBzZXQgcHJlZml4IFtzdHJpbmcgcmFuZ2UgJGlkIDAgM10KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNvbW1pdGludGVyZXN0KCRwcmVmaXgpXX0geworCXNldCBuZXdsaXN0IHt9CisJZm9yZWFjaCB7aSBzY3JpcHR9ICRjb21taXRpbnRlcmVzdCgkcHJlZml4KSB7CisJICAgIGlmIHtbc3RyaW5nIG1hdGNoICIkaSoiICRpZF19IHsKKwkJbGFwcGVuZCBzY3JpcHRzIFtzdHJpbmcgbWFwIFtsaXN0ICIlSSIgJGlkICIlUCIgJGldICRzY3JpcHRdCisJICAgIH0gZWxzZSB7CisJCWxhcHBlbmQgbmV3bGlzdCAkaSAkc2NyaXB0CisJICAgIH0KKwl9CisJaWYgeyRuZXdsaXN0IG5lIHt9fSB7CisJICAgIHNldCBjb21taXRpbnRlcmVzdCgkcHJlZml4KSAkbmV3bGlzdAorCX0gZWxzZSB7CisJICAgIHVuc2V0IGNvbW1pdGludGVyZXN0KCRwcmVmaXgpCisJfQorICAgIH0KKyAgICByZXR1cm4gJHNjcmlwdHMKK30KKworcHJvYyBnZXRjb21taXRsaW5lcyB7ZmQgaW5zdCB2aWV3IHVwZGF0aW5nfSAgeworICAgIGdsb2JhbCBjbWl0bGlzdGVkIGxlZnRvdmVyCisgICAgZ2xvYmFsIGNvbW1pdGlkeCBjb21taXRkYXRhIHZkYXRlbW9kZQorICAgIGdsb2JhbCBwYXJlbnRzIGNoaWxkcmVuIGN1cnZpZXcgaGx2aWV3CisgICAgZ2xvYmFsIGlkcGVuZGluZyBvcmRlcnRvaworICAgIGdsb2JhbCB2YXJjY29tbWl0cyB2YXJjaWQgdmFyY3RvayB2dG9rbW9kIHZmaWxlbGltaXQgdnNob3J0aWRzCisKKyAgICBzZXQgc3R1ZmYgW3JlYWQgJGZkIDUwMDAwMF0KKyAgICAjIGdpdCBsb2cgZG9lc24ndCB0ZXJtaW5hdGUgdGhlIGxhc3QgY29tbWl0IHdpdGggYSBudWxsLi4uCisgICAgaWYgeyRzdHVmZiA9PSB7fSAmJiAkbGVmdG92ZXIoJGluc3QpIG5lIHt9ICYmIFtlb2YgJGZkXX0geworCXNldCBzdHVmZiAiXDAiCisgICAgfQorICAgIGlmIHskc3R1ZmYgPT0ge319IHsKKwlpZiB7IVtlb2YgJGZkXX0geworCSAgICByZXR1cm4gMQorCX0KKwlnbG9iYWwgY29tbWZkIHZpZXdjb21wbGV0ZSB2aWV3YWN0aXZlIHZpZXduYW1lCisJZ2xvYmFsIHZpZXdpbnN0YW5jZXMKKwl1bnNldCBjb21tZmQoJGluc3QpCisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2aWV3aW5zdGFuY2VzKCR2aWV3KSAkaW5zdF0KKwlpZiB7JGkgPj0gMH0geworCSAgICBzZXQgdmlld2luc3RhbmNlcygkdmlldykgW2xyZXBsYWNlICR2aWV3aW5zdGFuY2VzKCR2aWV3KSAkaSAkaV0KKwl9CisJIyBzZXQgaXQgYmxvY2tpbmcgc28gd2Ugd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gdGVybWluYXRlCisJZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDEKKwlpZiB7W2NhdGNoIHtjbG9zZSAkZmR9IGVycl19IHsKKwkgICAgc2V0IGZ2IHt9CisJICAgIGlmIHskdmlldyAhPSAkY3Vydmlld30geworCQlzZXQgZnYgIiBmb3IgdGhlIFwiJHZpZXduYW1lKCR2aWV3KVwiIHZpZXciCisJICAgIH0KKwkgICAgaWYge1tzdHJpbmcgcmFuZ2UgJGVyciAwIDRdID09ICJ1c2FnZSJ9IHsKKwkJc2V0IGVyciAiR2l0azogZXJyb3IgcmVhZGluZyBjb21taXRzJGZ2OlwKKwkJCWJhZCBhcmd1bWVudHMgdG8gZ2l0IGxvZy4iCisJCWlmIHskdmlld25hbWUoJHZpZXcpIGVxICJDb21tYW5kIGxpbmUifSB7CisJCSAgICBhcHBlbmQgZXJyIFwKKwkJCSIgIChOb3RlOiBhcmd1bWVudHMgdG8gZ2l0ayBhcmUgcGFzc2VkIHRvIGdpdCBsb2dcCisJCQkgdG8gYWxsb3cgc2VsZWN0aW9uIG9mIGNvbW1pdHMgdG8gYmUgZGlzcGxheWVkLikiCisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGVyciAiRXJyb3IgcmVhZGluZyBjb21taXRzJGZ2OiAkZXJyIgorCSAgICB9CisJICAgIGVycm9yX3BvcHVwICRlcnIKKwl9CisJaWYge1tpbmNyIHZpZXdhY3RpdmUoJHZpZXcpIC0xXSA8PSAwfSB7CisJICAgIHNldCB2aWV3Y29tcGxldGUoJHZpZXcpIDEKKwkgICAgIyBDaGVjayBpZiB3ZSBoYXZlIHNlZW4gYW55IGlkcyBsaXN0ZWQgYXMgcGFyZW50cyB0aGF0IGhhdmVuJ3QKKwkgICAgIyBhcHBlYXJlZCBpbiB0aGUgbGlzdAorCSAgICBjbG9zZXZhcmNzICR2aWV3CisJICAgIG5vdGJ1c3kgJHZpZXcKKwl9CisJaWYgeyR2aWV3ID09ICRjdXJ2aWV3fSB7CisJICAgIHJ1biBjaGV3Y29tbWl0cworCX0KKwlyZXR1cm4gMAorICAgIH0KKyAgICBzZXQgc3RhcnQgMAorICAgIHNldCBnb3Rzb21lIDAKKyAgICBzZXQgc2NyaXB0cyB7fQorICAgIHdoaWxlIDEgeworCXNldCBpIFtzdHJpbmcgZmlyc3QgIlwwIiAkc3R1ZmYgJHN0YXJ0XQorCWlmIHskaSA8IDB9IHsKKwkgICAgYXBwZW5kIGxlZnRvdmVyKCRpbnN0KSBbc3RyaW5nIHJhbmdlICRzdHVmZiAkc3RhcnQgZW5kXQorCSAgICBicmVhaworCX0KKwlpZiB7JHN0YXJ0ID09IDB9IHsKKwkgICAgc2V0IGNtaXQgJGxlZnRvdmVyKCRpbnN0KQorCSAgICBhcHBlbmQgY21pdCBbc3RyaW5nIHJhbmdlICRzdHVmZiAwIFtleHByIHskaSAtIDF9XV0KKwkgICAgc2V0IGxlZnRvdmVyKCRpbnN0KSB7fQorCX0gZWxzZSB7CisJICAgIHNldCBjbWl0IFtzdHJpbmcgcmFuZ2UgJHN0dWZmICRzdGFydCBbZXhwciB7JGkgLSAxfV1dCisJfQorCXNldCBzdGFydCBbZXhwciB7JGkgKyAxfV0KKwlzZXQgaiBbc3RyaW5nIGZpcnN0ICJcbiIgJGNtaXRdCisJc2V0IG9rIDAKKwlzZXQgbGlzdGVkIDEKKwlpZiB7JGogPj0gMCAmJiBbc3RyaW5nIG1hdGNoICJjb21taXQgKiIgJGNtaXRdfSB7CisJICAgIHNldCBpZHMgW3N0cmluZyByYW5nZSAkY21pdCA3IFtleHByIHskaiAtIDF9XV0KKwkgICAgaWYge1tzdHJpbmcgbWF0Y2gge1stXjw+XSp9ICRpZHNdfSB7CisJCXN3aXRjaCAtLSBbc3RyaW5nIGluZGV4ICRpZHMgMF0geworCQkgICAgIi0iIHtzZXQgbGlzdGVkIDB9CisJCSAgICAiXiIge3NldCBsaXN0ZWQgMn0KKwkJICAgICI8IiB7c2V0IGxpc3RlZCAzfQorCQkgICAgIj4iIHtzZXQgbGlzdGVkIDR9CisJCX0KKwkJc2V0IGlkcyBbc3RyaW5nIHJhbmdlICRpZHMgMSBlbmRdCisJICAgIH0KKwkgICAgc2V0IG9rIDEKKwkgICAgZm9yZWFjaCBpZCAkaWRzIHsKKwkJaWYge1tzdHJpbmcgbGVuZ3RoICRpZF0gIT0gNDB9IHsKKwkJICAgIHNldCBvayAwCisJCSAgICBicmVhaworCQl9CisJICAgIH0KKwl9CisJaWYgeyEkb2t9IHsKKwkgICAgc2V0IHNob3J0Y21pdCAkY21pdAorCSAgICBpZiB7W3N0cmluZyBsZW5ndGggJHNob3J0Y21pdF0gPiA4MH0geworCQlzZXQgc2hvcnRjbWl0ICJbc3RyaW5nIHJhbmdlICRzaG9ydGNtaXQgMCA4MF0uLi4iCisJICAgIH0KKwkgICAgZXJyb3JfcG9wdXAgIlttYyAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6Il0geyRzaG9ydGNtaXR9IgorCSAgICBleGl0IDEKKwl9CisJc2V0IGlkIFtsaW5kZXggJGlkcyAwXQorCXNldCB2aWQgJHZpZXcsJGlkCisKKwlsYXBwZW5kIHZzaG9ydGlkcygkdmlldyxbc3RyaW5nIHJhbmdlICRpZCAwIDNdKSAkaWQKKworCWlmIHshJGxpc3RlZCAmJiAkdXBkYXRpbmcgJiYgIVtpbmZvIGV4aXN0cyB2YXJjaWQoJHZpZCldICYmCisJICAgICR2ZmlsZWxpbWl0KCR2aWV3KSBuZSB7fX0geworCSAgICAjIGdpdCBsb2cgZG9lc24ndCByZXdyaXRlIHBhcmVudHMgZm9yIHVubGlzdGVkIGNvbW1pdHMKKwkgICAgIyB3aGVuIGRvaW5nIHBhdGggbGltaXRpbmcsIHNvIHdvcmsgYXJvdW5kIHRoYXQgaGVyZQorCSAgICAjIGJ5IHdvcmtpbmcgb3V0IHRoZSByZXdyaXR0ZW4gcGFyZW50IHdpdGggZ2l0IHJldi1saXN0CisJICAgICMgYW5kIGlmIHdlIGFscmVhZHkga25vdyBhYm91dCBpdCwgdXNpbmcgdGhlIHJld3JpdHRlbgorCSAgICAjIHBhcmVudCBhcyBhIHN1YnN0aXR1dGUgcGFyZW50IGZvciAkaWQncyBjaGlsZHJlbi4KKwkgICAgaWYgeyFbY2F0Y2ggeworCQlzZXQgcndpZCBbZXhlYyBnaXQgcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1tYXgtY291bnQ9MSBcCisJCQkgICAgICAkaWQgLS0gJHZmaWxlbGltaXQoJHZpZXcpXQorCSAgICB9XX0geworCQlpZiB7JHJ3aWQgbmUge30gJiYgW2luZm8gZXhpc3RzIHZhcmNpZCgkdmlldywkcndpZCldfSB7CisJCSAgICAjIHVzZSAkcndpZCBpbiBwbGFjZSBvZiAkaWQKKwkJICAgIHJld3JpdGVfY29tbWl0ICR2aWV3ICRpZCAkcndpZAorCQkgICAgY29udGludWUKKwkJfQorCSAgICB9CisJfQorCisJc2V0IGEgMAorCWlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCR2aWQpXX0geworCSAgICBpZiB7JGNtaXRsaXN0ZWQoJHZpZCkgfHwgISRsaXN0ZWR9IGNvbnRpbnVlCisJICAgIHNldCBhICR2YXJjaWQoJHZpZCkKKwl9CisJaWYgeyRsaXN0ZWR9IHsKKwkgICAgc2V0IG9sZHMgW2xyYW5nZSAkaWRzIDEgZW5kXQorCX0gZWxzZSB7CisJICAgIHNldCBvbGRzIHt9CisJfQorCXNldCBjb21taXRkYXRhKCRpZCkgW3N0cmluZyByYW5nZSAkY21pdCBbZXhwciB7JGogKyAxfV0gZW5kXQorCXNldCBjbWl0bGlzdGVkKCR2aWQpICRsaXN0ZWQKKwlzZXQgcGFyZW50cygkdmlkKSAkb2xkcworCWlmIHshW2luZm8gZXhpc3RzIGNoaWxkcmVuKCR2aWQpXX0geworCSAgICBzZXQgY2hpbGRyZW4oJHZpZCkge30KKwl9IGVsc2VpZiB7JGEgPT0gMCAmJiBbbGxlbmd0aCAkY2hpbGRyZW4oJHZpZCldID09IDF9IHsKKwkgICAgc2V0IGsgW2xpbmRleCAkY2hpbGRyZW4oJHZpZCkgMF0KKwkgICAgaWYge1tsbGVuZ3RoICRwYXJlbnRzKCR2aWV3LCRrKV0gPT0gMSAmJgorCQkoISR2ZGF0ZW1vZGUoJHZpZXcpIHx8CisJCSAkdmFyY2lkKCR2aWV3LCRrKSA9PSBbbGxlbmd0aCAkdmFyY3RvaygkdmlldyldIC0gMSl9IHsKKwkJc2V0IGEgJHZhcmNpZCgkdmlldywkaykKKwkgICAgfQorCX0KKwlpZiB7JGEgPT0gMH0geworCSAgICAjIG5ldyBhcmMKKwkgICAgc2V0IGEgW25ld3ZhcmMgJHZpZXcgJGlkXQorCX0KKwlpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHZpZXcpICRhXSAkdnRva21vZCgkdmlldyldIDwgMH0geworCSAgICBtb2RpZnlfYXJjICR2aWV3ICRhCisJfQorCWlmIHshW2luZm8gZXhpc3RzIHZhcmNpZCgkdmlkKV19IHsKKwkgICAgc2V0IHZhcmNpZCgkdmlkKSAkYQorCSAgICBsYXBwZW5kIHZhcmNjb21taXRzKCR2aWV3LCRhKSAkaWQKKwkgICAgaW5jciBjb21taXRpZHgoJHZpZXcpCisJfQorCisJc2V0IGkgMAorCWZvcmVhY2ggcCAkb2xkcyB7CisJICAgIGlmIHskaSA9PSAwIHx8IFtsc2VhcmNoIC1leGFjdCAkb2xkcyAkcF0gPj0gJGl9IHsKKwkJc2V0IHZwICR2aWV3LCRwCisJCWlmIHtbbGxlbmd0aCBbbGFwcGVuZCBjaGlsZHJlbigkdnApICRpZF1dID4gMSAmJgorCQkgICAgW3Z0b2tjbXAgJHZpZXcgW2xpbmRleCAkY2hpbGRyZW4oJHZwKSBlbmQtMV0gJGlkXSA+IDB9IHsKKwkJICAgIHNldCBjaGlsZHJlbigkdnApIFtsc29ydCAtY29tbWFuZCBbbGlzdCB2dG9rY21wICR2aWV3XSBcCisJCQkJCSAgICRjaGlsZHJlbigkdnApXQorCQkgICAgY2F0Y2gge3Vuc2V0IG9yZGVydG9rfQorCQl9CisJCWlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCR2aWV3LCRwKV19IHsKKwkJICAgIGZpeF9yZXZlcnNhbCAkcCAkYSAkdmlldworCQl9CisJICAgIH0KKwkgICAgaW5jciBpCisJfQorCisJc2V0IHNjcmlwdHMgW2NoZWNrX2ludGVyZXN0ICRpZCAkc2NyaXB0c10KKwlzZXQgZ290c29tZSAxCisgICAgfQorICAgIGlmIHskZ290c29tZX0geworCWdsb2JhbCBudW1jb21taXRzIGhsdmlldworCisJaWYgeyR2aWV3ID09ICRjdXJ2aWV3fSB7CisJICAgIHNldCBudW1jb21taXRzICRjb21taXRpZHgoJHZpZXcpCisJICAgIHJ1biBjaGV3Y29tbWl0cworCX0KKwlpZiB7W2luZm8gZXhpc3RzIGhsdmlld10gJiYgJHZpZXcgPT0gJGhsdmlld30geworCSAgICAjIHdlIG5ldmVyIGFjdHVhbGx5IGdldCBoZXJlLi4uCisJICAgIHJ1biB2aGlnaGxpZ2h0bW9yZQorCX0KKwlmb3JlYWNoIHMgJHNjcmlwdHMgeworCSAgICBldmFsICRzCisJfQorICAgIH0KKyAgICByZXR1cm4gMgorfQorCitwcm9jIGNoZXdjb21taXRzIHt9IHsKKyAgICBnbG9iYWwgY3VydmlldyBobHZpZXcgdmlld2NvbXBsZXRlCisgICAgZ2xvYmFsIHBlbmRpbmdfc2VsZWN0CisKKyAgICBsYXlvdXRtb3JlCisgICAgaWYgeyR2aWV3Y29tcGxldGUoJGN1cnZpZXcpfSB7CisJZ2xvYmFsIGNvbW1pdGlkeCB2YXJjdG9rCisJZ2xvYmFsIG51bWNvbW1pdHMgc3RhcnRtc2VjcworCisJaWYge1tpbmZvIGV4aXN0cyBwZW5kaW5nX3NlbGVjdF19IHsKKwkgICAgdXBkYXRlCisJICAgIHJlc2V0X3BlbmRpbmdfc2VsZWN0IHt9CisKKwkgICAgaWYge1tjb21taXRpbnZpZXcgJHBlbmRpbmdfc2VsZWN0ICRjdXJ2aWV3XX0geworCQlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkcGVuZGluZ19zZWxlY3RdIDEKKwkgICAgfSBlbHNlIHsKKwkJc2V0IHJvdyBbZmlyc3RfcmVhbF9yb3ddCisJCXNlbGVjdGxpbmUgJHJvdyAxCisJICAgIH0KKwl9CisJaWYgeyRjb21taXRpZHgoJGN1cnZpZXcpID4gMH0geworCSAgICAjc2V0IG1zIFtleHByIHtbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdIC0gJHN0YXJ0bXNlY3N9XQorCSAgICAjcHV0cyAib3ZlcmFsbCAkbXMgbXMgZm9yICRudW1jb21taXRzIGNvbW1pdHMiCisJICAgICNwdXRzICJbbGxlbmd0aCAkdmFyY3RvaygkdmlldyldIGFyY3MsICRjb21taXRpZHgoJHZpZXcpIGNvbW1pdHMiCisJfSBlbHNlIHsKKwkgICAgc2hvd19zdGF0dXMgW21jICJObyBjb21taXRzIHNlbGVjdGVkIl0KKwl9CisJbm90YnVzeSBsYXlvdXQKKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworcHJvYyBkb19yZWFkY29tbWl0IHtpZH0geworICAgIGdsb2JhbCB0Y2xlbmNvZGluZworCisgICAgIyBJbnZva2UgZ2l0LWxvZyB0byBoYW5kbGUgYXV0b21hdGljIGVuY29kaW5nIGNvbnZlcnNpb24KKyAgICBzZXQgZmQgW29wZW4gW2NvbmNhdCB8IGdpdCBsb2cgLS1uby1jb2xvciAtLXByZXR0eT1yYXcgLTEgJGlkXSByXQorICAgICMgUmVhZCB0aGUgcmVzdWx0cyB1c2luZyBpMThuLmxvZ291dHB1dGVuY29kaW5nCisgICAgZmNvbmZpZ3VyZSAkZmQgLXRyYW5zbGF0aW9uIGxmIC1lb2ZjaGFyIHt9CisgICAgaWYgeyR0Y2xlbmNvZGluZyAhPSB7fX0geworCWZjb25maWd1cmUgJGZkIC1lbmNvZGluZyAkdGNsZW5jb2RpbmcKKyAgICB9CisgICAgc2V0IGNvbnRlbnRzIFtyZWFkICRmZF0KKyAgICBjbG9zZSAkZmQKKyAgICAjIFJlbW92ZSB0aGUgaGVhZGluZyBsaW5lCisgICAgcmVnc3ViIHteY29tbWl0IFswLTlhLWZdK1xufSAkY29udGVudHMge30gY29udGVudHMKKworICAgIHJldHVybiAkY29udGVudHMKK30KKworcHJvYyByZWFkY29tbWl0IHtpZH0geworICAgIGlmIHtbY2F0Y2gge3NldCBjb250ZW50cyBbZG9fcmVhZGNvbW1pdCAkaWRdfV19IHJldHVybgorICAgIHBhcnNlY29tbWl0ICRpZCAkY29udGVudHMgMQorfQorCitwcm9jIHBhcnNlY29tbWl0IHtpZCBjb250ZW50cyBsaXN0ZWR9IHsKKyAgICBnbG9iYWwgY29tbWl0aW5mbworCisgICAgc2V0IGluaGRyIDEKKyAgICBzZXQgY29tbWVudCB7fQorICAgIHNldCBoZWFkbGluZSB7fQorICAgIHNldCBhdW5hbWUge30KKyAgICBzZXQgYXVkYXRlIHt9CisgICAgc2V0IGNvbW5hbWUge30KKyAgICBzZXQgY29tZGF0ZSB7fQorICAgIHNldCBoZHJlbmQgW3N0cmluZyBmaXJzdCAiXG5cbiIgJGNvbnRlbnRzXQorICAgIGlmIHskaGRyZW5kIDwgMH0geworCSMgc2hvdWxkIG5ldmVyIGhhcHBlbi4uLgorCXNldCBoZHJlbmQgW3N0cmluZyBsZW5ndGggJGNvbnRlbnRzXQorICAgIH0KKyAgICBzZXQgaGVhZGVyIFtzdHJpbmcgcmFuZ2UgJGNvbnRlbnRzIDAgW2V4cHIgeyRoZHJlbmQgLSAxfV1dCisgICAgc2V0IGNvbW1lbnQgW3N0cmluZyByYW5nZSAkY29udGVudHMgW2V4cHIgeyRoZHJlbmQgKyAyfV0gZW5kXQorICAgIGZvcmVhY2ggbGluZSBbc3BsaXQgJGhlYWRlciAiXG4iXSB7CisJc2V0IGxpbmUgW3NwbGl0ICRsaW5lICIgIl0KKwlzZXQgdGFnIFtsaW5kZXggJGxpbmUgMF0KKwlpZiB7JHRhZyA9PSAiYXV0aG9yIn0geworCSAgICBzZXQgYXVkYXRlIFtscmFuZ2UgJGxpbmUgZW5kLTEgZW5kXQorCSAgICBzZXQgYXVuYW1lIFtqb2luIFtscmFuZ2UgJGxpbmUgMSBlbmQtMl0gIiAiXQorCX0gZWxzZWlmIHskdGFnID09ICJjb21taXR0ZXIifSB7CisJICAgIHNldCBjb21kYXRlIFtscmFuZ2UgJGxpbmUgZW5kLTEgZW5kXQorCSAgICBzZXQgY29tbmFtZSBbam9pbiBbbHJhbmdlICRsaW5lIDEgZW5kLTJdICIgIl0KKwl9CisgICAgfQorICAgIHNldCBoZWFkbGluZSB7fQorICAgICMgdGFrZSB0aGUgZmlyc3Qgbm9uLWJsYW5rIGxpbmUgb2YgdGhlIGNvbW1lbnQgYXMgdGhlIGhlYWRsaW5lCisgICAgc2V0IGhlYWRsaW5lIFtzdHJpbmcgdHJpbWxlZnQgJGNvbW1lbnRdCisgICAgc2V0IGkgW3N0cmluZyBmaXJzdCAiXG4iICRoZWFkbGluZV0KKyAgICBpZiB7JGkgPj0gMH0geworCXNldCBoZWFkbGluZSBbc3RyaW5nIHJhbmdlICRoZWFkbGluZSAwICRpXQorICAgIH0KKyAgICBzZXQgaGVhZGxpbmUgW3N0cmluZyB0cmltcmlnaHQgJGhlYWRsaW5lXQorICAgIHNldCBpIFtzdHJpbmcgZmlyc3QgIlxyIiAkaGVhZGxpbmVdCisgICAgaWYgeyRpID49IDB9IHsKKwlzZXQgaGVhZGxpbmUgW3N0cmluZyB0cmltcmlnaHQgW3N0cmluZyByYW5nZSAkaGVhZGxpbmUgMCAkaV1dCisgICAgfQorICAgIGlmIHshJGxpc3RlZH0geworCSMgZ2l0IGxvZyBpbmRlbnRzIHRoZSBjb21tZW50IGJ5IDQgc3BhY2VzOworCSMgaWYgd2UgZ290IHRoaXMgdmlhIGdpdCBjYXQtZmlsZSwgYWRkIHRoZSBpbmRlbnRhdGlvbgorCXNldCBuZXdjb21tZW50IHt9CisJZm9yZWFjaCBsaW5lIFtzcGxpdCAkY29tbWVudCAiXG4iXSB7CisJICAgIGFwcGVuZCBuZXdjb21tZW50ICIgICAgIgorCSAgICBhcHBlbmQgbmV3Y29tbWVudCAkbGluZQorCSAgICBhcHBlbmQgbmV3Y29tbWVudCAiXG4iCisJfQorCXNldCBjb21tZW50ICRuZXdjb21tZW50CisgICAgfQorICAgIHNldCBoYXNub3RlIFtzdHJpbmcgZmlyc3QgIlxuTm90ZXM6XG4iICRjb250ZW50c10KKyAgICBzZXQgY29tbWl0aW5mbygkaWQpIFtsaXN0ICRoZWFkbGluZSAkYXVuYW1lICRhdWRhdGUgXAorCQkJICAgICAkY29tbmFtZSAkY29tZGF0ZSAkY29tbWVudCAkaGFzbm90ZV0KK30KKworcHJvYyBnZXRjb21taXQge2lkfSB7CisgICAgZ2xvYmFsIGNvbW1pdGRhdGEgY29tbWl0aW5mbworCisgICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRkYXRhKCRpZCldfSB7CisJcGFyc2Vjb21taXQgJGlkICRjb21taXRkYXRhKCRpZCkgMQorICAgIH0gZWxzZSB7CisJcmVhZGNvbW1pdCAkaWQKKwlpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJICAgIHNldCBjb21taXRpbmZvKCRpZCkgW2xpc3QgW21jICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIl1dCisJfQorICAgIH0KKyAgICByZXR1cm4gMQorfQorCisjIEV4cGFuZCBhbiBhYmJyZXZpYXRlZCBjb21taXQgSUQgdG8gYSBsaXN0IG9mIGZ1bGwgNDAtY2hhciBJRHMgdGhhdCBtYXRjaAorIyBhbmQgYXJlIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgdmlldy4KKyMgVGhpcyBpcyBmYWlybHkgc2xvdy4uLgorcHJvYyBsb25naWQge3ByZWZpeH0geworICAgIGdsb2JhbCB2YXJjaWQgY3VydmlldyB2c2hvcnRpZHMKKworICAgIHNldCBpZHMge30KKyAgICBpZiB7W3N0cmluZyBsZW5ndGggJHByZWZpeF0gPj0gNH0geworCXNldCB2c2hvcnRpZCAkY3Vydmlldyxbc3RyaW5nIHJhbmdlICRwcmVmaXggMCAzXQorCWlmIHtbaW5mbyBleGlzdHMgdnNob3J0aWRzKCR2c2hvcnRpZCldfSB7CisJICAgIGZvcmVhY2ggaWQgJHZzaG9ydGlkcygkdnNob3J0aWQpIHsKKwkJaWYge1tzdHJpbmcgbWF0Y2ggIiRwcmVmaXgqIiAkaWRdfSB7CisJCSAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRpZHMgJGlkXSA8IDB9IHsKKwkJCWxhcHBlbmQgaWRzICRpZAorCQkJaWYge1tsbGVuZ3RoICRpZHNdID49IDJ9IGJyZWFrCisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCWZvcmVhY2ggbWF0Y2ggW2FycmF5IG5hbWVzIHZhcmNpZCAiJGN1cnZpZXcsJHByZWZpeCoiXSB7CisJICAgIGxhcHBlbmQgaWRzIFtsaW5kZXggW3NwbGl0ICRtYXRjaCAiLCJdIDFdCisJICAgIGlmIHtbbGxlbmd0aCAkaWRzXSA+PSAyfSBicmVhaworCX0KKyAgICB9CisgICAgcmV0dXJuICRpZHMKK30KKworcHJvYyByZWFkcmVmcyB7fSB7CisgICAgZ2xvYmFsIHRhZ2lkcyBpZHRhZ3MgaGVhZGlkcyBpZGhlYWRzIHRhZ29iamlkCisgICAgZ2xvYmFsIG90aGVycmVmaWRzIGlkb3RoZXJyZWZzIG1haW5oZWFkIG1haW5oZWFkaWQKKyAgICBnbG9iYWwgc2VsZWN0aGVhZCBzZWxlY3RoZWFkaWQKKyAgICBnbG9iYWwgaGlkZXJlbW90ZXMKKworICAgIGZvcmVhY2ggdiB7dGFnaWRzIGlkdGFncyBoZWFkaWRzIGlkaGVhZHMgb3RoZXJyZWZpZHMgaWRvdGhlcnJlZnN9IHsKKwljYXRjaCB7dW5zZXQgJHZ9CisgICAgfQorICAgIHNldCByZWZkIFtvcGVuIFtsaXN0IHwgZ2l0IHNob3ctcmVmIC1kXSByXQorICAgIHdoaWxlIHtbZ2V0cyAkcmVmZCBsaW5lXSA+PSAwfSB7CisJaWYge1tzdHJpbmcgaW5kZXggJGxpbmUgNDBdIG5lICIgIn0gY29udGludWUKKwlzZXQgaWQgW3N0cmluZyByYW5nZSAkbGluZSAwIDM5XQorCXNldCByZWYgW3N0cmluZyByYW5nZSAkbGluZSA0MSBlbmRdCisJaWYgeyFbc3RyaW5nIG1hdGNoICJyZWZzLyoiICRyZWZdfSBjb250aW51ZQorCXNldCBuYW1lIFtzdHJpbmcgcmFuZ2UgJHJlZiA1IGVuZF0KKwlpZiB7W3N0cmluZyBtYXRjaCAicmVtb3Rlcy8qIiAkbmFtZV19IHsKKwkgICAgaWYgeyFbc3RyaW5nIG1hdGNoICIqL0hFQUQiICRuYW1lXSAmJiAhJGhpZGVyZW1vdGVzfSB7CisJCXNldCBoZWFkaWRzKCRuYW1lKSAkaWQKKwkJbGFwcGVuZCBpZGhlYWRzKCRpZCkgJG5hbWUKKwkgICAgfQorCX0gZWxzZWlmIHtbc3RyaW5nIG1hdGNoICJoZWFkcy8qIiAkbmFtZV19IHsKKwkgICAgc2V0IG5hbWUgW3N0cmluZyByYW5nZSAkbmFtZSA2IGVuZF0KKwkgICAgc2V0IGhlYWRpZHMoJG5hbWUpICRpZAorCSAgICBsYXBwZW5kIGlkaGVhZHMoJGlkKSAkbmFtZQorCX0gZWxzZWlmIHtbc3RyaW5nIG1hdGNoICJ0YWdzLyoiICRuYW1lXX0geworCSAgICAjIHRoaXMgbGV0cyByZWZzL3RhZ3MvZm9vXnt9IG92ZXJ3cml0ZSByZWZzL3RhZ3MvZm9vLAorCSAgICAjIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCBzaW5jZSB0aGUgZm9ybWVyIGlzIHRoZSBjb21taXQgSUQKKwkgICAgc2V0IG5hbWUgW3N0cmluZyByYW5nZSAkbmFtZSA1IGVuZF0KKwkgICAgaWYge1tzdHJpbmcgbWF0Y2ggIipee30iICRuYW1lXX0geworCQlzZXQgbmFtZSBbc3RyaW5nIHJhbmdlICRuYW1lIDAgZW5kLTNdCisJICAgIH0gZWxzZSB7CisJCXNldCB0YWdvYmppZCgkbmFtZSkgJGlkCisJICAgIH0KKwkgICAgc2V0IHRhZ2lkcygkbmFtZSkgJGlkCisJICAgIGxhcHBlbmQgaWR0YWdzKCRpZCkgJG5hbWUKKwl9IGVsc2UgeworCSAgICBzZXQgb3RoZXJyZWZpZHMoJG5hbWUpICRpZAorCSAgICBsYXBwZW5kIGlkb3RoZXJyZWZzKCRpZCkgJG5hbWUKKwl9CisgICAgfQorICAgIGNhdGNoIHtjbG9zZSAkcmVmZH0KKyAgICBzZXQgbWFpbmhlYWQge30KKyAgICBzZXQgbWFpbmhlYWRpZCB7fQorICAgIGNhdGNoIHsKKwlzZXQgbWFpbmhlYWRpZCBbZXhlYyBnaXQgcmV2LXBhcnNlIEhFQURdCisJc2V0IHRoZWhlYWQgW2V4ZWMgZ2l0IHN5bWJvbGljLXJlZiBIRUFEXQorCWlmIHtbc3RyaW5nIG1hdGNoICJyZWZzL2hlYWRzLyoiICR0aGVoZWFkXX0geworCSAgICBzZXQgbWFpbmhlYWQgW3N0cmluZyByYW5nZSAkdGhlaGVhZCAxMSBlbmRdCisJfQorICAgIH0KKyAgICBzZXQgc2VsZWN0aGVhZGlkIHt9CisgICAgaWYgeyRzZWxlY3RoZWFkIG5lIHt9fSB7CisJY2F0Y2ggeworCSAgICBzZXQgc2VsZWN0aGVhZGlkIFtleGVjIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJHNlbGVjdGhlYWRdCisJfQorICAgIH0KK30KKworIyBza2lwIG92ZXIgZmFrZSBjb21taXRzCitwcm9jIGZpcnN0X3JlYWxfcm93IHt9IHsKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIgbnVtY29tbWl0cworCisgICAgZm9yIHtzZXQgcm93IDB9IHskcm93IDwgJG51bWNvbW1pdHN9IHtpbmNyIHJvd30geworCXNldCBpZCBbY29tbWl0b25yb3cgJHJvd10KKwlpZiB7JGlkIG5lICRudWxsaWQgJiYgJGlkIG5lICRudWxsaWQyfSB7CisJICAgIGJyZWFrCisJfQorICAgIH0KKyAgICByZXR1cm4gJHJvdworfQorCisjIHVwZGF0ZSB0aGluZ3MgZm9yIGEgaGVhZCBtb3ZlZCB0byBhIGNoaWxkIG9mIGl0cyBwcmV2aW91cyBsb2NhdGlvbgorcHJvYyBtb3ZlaGVhZCB7aWQgbmFtZX0geworICAgIGdsb2JhbCBoZWFkaWRzIGlkaGVhZHMKKworICAgIHJlbW92ZWhlYWQgJGhlYWRpZHMoJG5hbWUpICRuYW1lCisgICAgc2V0IGhlYWRpZHMoJG5hbWUpICRpZAorICAgIGxhcHBlbmQgaWRoZWFkcygkaWQpICRuYW1lCit9CisKKyMgdXBkYXRlIHRoaW5ncyB3aGVuIGEgaGVhZCBoYXMgYmVlbiByZW1vdmVkCitwcm9jIHJlbW92ZWhlYWQge2lkIG5hbWV9IHsKKyAgICBnbG9iYWwgaGVhZGlkcyBpZGhlYWRzCisKKyAgICBpZiB7JGlkaGVhZHMoJGlkKSBlcSAkbmFtZX0geworCXVuc2V0IGlkaGVhZHMoJGlkKQorICAgIH0gZWxzZSB7CisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRpZGhlYWRzKCRpZCkgJG5hbWVdCisJaWYgeyRpID49IDB9IHsKKwkgICAgc2V0IGlkaGVhZHMoJGlkKSBbbHJlcGxhY2UgJGlkaGVhZHMoJGlkKSAkaSAkaV0KKwl9CisgICAgfQorICAgIHVuc2V0IGhlYWRpZHMoJG5hbWUpCit9CisKK3Byb2MgdHRrX3RvcGxldmVsIHt3IGFyZ3N9IHsKKyAgICBnbG9iYWwgdXNlX3R0aworICAgIGV2YWwgW2xpbnNlcnQgJGFyZ3MgMCA6OnRvcGxldmVsICR3XQorICAgIGlmIHskdXNlX3R0a30geworICAgICAgICBwbGFjZSBbdHRrOjpmcmFtZSAkdy5fdG9wbGV2ZWxfYmFja2dyb3VuZF0gLXggMCAteSAwIC1yZWx3aWR0aCAxIC1yZWxoZWlnaHQgMQorICAgIH0KKyAgICByZXR1cm4gJHcKK30KKworcHJvYyBtYWtlX3RyYW5zaWVudCB7d2luZG93IG9yaWdpbn0geworICAgIGdsb2JhbCBoYXZlX3RrODUKKworICAgICMgSW4gTWFjT1MgVGsgOC40IHRyYW5zaWVudCBhcHBlYXJzIHRvIHdvcmsgYnkgc2V0dGluZworICAgICMgb3ZlcnJpZGVyZWRpcmVjdCwgd2hpY2ggaXMgdXR0ZXJseSB1c2VsZXNzLCBzaW5jZSB0aGUKKyAgICAjIHdpbmRvd3MgZ2V0IG5vIGJvcmRlciwgYW5kIGFyZSBub3QgZXZlbiBrZXB0IGFib3ZlCisgICAgIyB0aGUgcGFyZW50LgorICAgIGlmIHshJGhhdmVfdGs4NSAmJiBbdGsgd2luZG93aW5nc3lzdGVtXSBlcSB7YXF1YX19IHJldHVybgorCisgICAgd20gdHJhbnNpZW50ICR3aW5kb3cgJG9yaWdpbgorCisgICAgIyBXaW5kb3dzIGZhaWxzIHRvIHBsYWNlIHRyYW5zaWVudCB3aW5kb3dzIG5vcm1hbGx5LCBzbworICAgICMgc2NoZWR1bGUgYSBjYWxsYmFjayB0byBjZW50ZXIgdGhlbSBvbiB0aGUgcGFyZW50LgorICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSB7d2luMzJ9fSB7CisJYWZ0ZXIgaWRsZSBbbGlzdCB0azo6UGxhY2VXaW5kb3cgJHdpbmRvdyB3aWRnZXQgJG9yaWdpbl0KKyAgICB9Cit9CisKK3Byb2Mgc2hvd19lcnJvciB7dyB0b3AgbXNnIHttYyBtY319IHsKKyAgICBnbG9iYWwgTlMKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBOU119IHtzZXQgTlMgIiJ9CisgICAgaWYge1t3bSBzdGF0ZSAkdG9wXSBlcSAid2l0aGRyYXduIn0geyB3bSBkZWljb25pZnkgJHRvcCB9CisgICAgbWVzc2FnZSAkdy5tIC10ZXh0ICRtc2cgLWp1c3RpZnkgY2VudGVyIC1hc3BlY3QgNDAwCisgICAgcGFjayAkdy5tIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDIwIC1wYWR5IDIwCisgICAgJHtOU306OmJ1dHRvbiAkdy5vayAtZGVmYXVsdCBhY3RpdmUgLXRleHQgWyRtYyBPS10gLWNvbW1hbmQgImRlc3Ryb3kgJHRvcCIKKyAgICBwYWNrICR3Lm9rIC1zaWRlIGJvdHRvbSAtZmlsbCB4CisgICAgYmluZCAkdG9wIDxWaXNpYmlsaXR5PiAiZ3JhYiAkdG9wOyBmb2N1cyAkdG9wIgorICAgIGJpbmQgJHRvcCA8S2V5LVJldHVybj4gImRlc3Ryb3kgJHRvcCIKKyAgICBiaW5kICR0b3AgPEtleS1zcGFjZT4gICJkZXN0cm95ICR0b3AiCisgICAgYmluZCAkdG9wIDxLZXktRXNjYXBlPiAiZGVzdHJveSAkdG9wIgorICAgIHRrd2FpdCB3aW5kb3cgJHRvcAorfQorCitwcm9jIGVycm9yX3BvcHVwIHttc2cge293bmVyIC59fSB7CisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJ3aW4zMiJ9IHsKKyAgICAgICAgdGtfbWVzc2FnZUJveCAtaWNvbiBlcnJvciAtdHlwZSBvayAtdGl0bGUgW3dtIHRpdGxlIC5dIFwKKyAgICAgICAgICAgIC1wYXJlbnQgJG93bmVyIC1tZXNzYWdlICRtc2cKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgdyAuZXJyb3IKKyAgICAgICAgdHRrX3RvcGxldmVsICR3CisgICAgICAgIG1ha2VfdHJhbnNpZW50ICR3ICRvd25lcgorICAgICAgICBzaG93X2Vycm9yICR3ICR3ICRtc2cKKyAgICB9Cit9CisKK3Byb2MgY29uZmlybV9wb3B1cCB7bXNnIHtvd25lciAufX0geworICAgIGdsb2JhbCBjb25maXJtX29rIE5TCisgICAgc2V0IGNvbmZpcm1fb2sgMAorICAgIHNldCB3IC5jb25maXJtCisgICAgdHRrX3RvcGxldmVsICR3CisgICAgbWFrZV90cmFuc2llbnQgJHcgJG93bmVyCisgICAgbWVzc2FnZSAkdy5tIC10ZXh0ICRtc2cgLWp1c3RpZnkgY2VudGVyIC1hc3BlY3QgNDAwCisgICAgcGFjayAkdy5tIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDIwIC1wYWR5IDIwCisgICAgJHtOU306OmJ1dHRvbiAkdy5vayAtdGV4dCBbbWMgT0tdIC1jb21tYW5kICJzZXQgY29uZmlybV9vayAxOyBkZXN0cm95ICR3IgorICAgIHBhY2sgJHcub2sgLXNpZGUgbGVmdCAtZmlsbCB4CisgICAgJHtOU306OmJ1dHRvbiAkdy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gLWNvbW1hbmQgImRlc3Ryb3kgJHciCisgICAgcGFjayAkdy5jYW5jZWwgLXNpZGUgcmlnaHQgLWZpbGwgeAorICAgIGJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdyIKKyAgICBiaW5kICR3IDxLZXktUmV0dXJuPiAic2V0IGNvbmZpcm1fb2sgMTsgZGVzdHJveSAkdyIKKyAgICBiaW5kICR3IDxLZXktc3BhY2U+ICAic2V0IGNvbmZpcm1fb2sgMTsgZGVzdHJveSAkdyIKKyAgICBiaW5kICR3IDxLZXktRXNjYXBlPiAiZGVzdHJveSAkdyIKKyAgICB0azo6UGxhY2VXaW5kb3cgJHcgd2lkZ2V0ICRvd25lcgorICAgIHRrd2FpdCB3aW5kb3cgJHcKKyAgICByZXR1cm4gJGNvbmZpcm1fb2sKK30KKworcHJvYyBzZXRvcHRpb25zIHt9IHsKKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gbmUgIndpbjMyIn0geworICAgICAgICBvcHRpb24gYWRkICpQYW5lZHdpbmRvdy5zaG93SGFuZGxlIDEgc3RhcnR1cEZpbGUKKyAgICAgICAgb3B0aW9uIGFkZCAqUGFuZWR3aW5kb3cuc2FzaFJlbGllZiByYWlzZWQgc3RhcnR1cEZpbGUKKyAgICAgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIG5lICJhcXVhIn0geworICAgICAgICAgICAgb3B0aW9uIGFkZCAqTWVudS5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3B0aW9uIGFkZCAqTWVudS5UZWFyT2ZmIDAgc3RhcnR1cEZpbGUKKyAgICB9CisgICAgb3B0aW9uIGFkZCAqQnV0dG9uLmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqQ2hlY2tidXR0b24uZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKKyAgICBvcHRpb24gYWRkICpSYWRpb2J1dHRvbi5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKk1lbnVidXR0b24uZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKKyAgICBvcHRpb24gYWRkICpMYWJlbC5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKk1lc3NhZ2UuZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKKyAgICBvcHRpb24gYWRkICpFbnRyeS5mb250IHRleHRmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqVGV4dC5mb250IHRleHRmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqTGFiZWxmcmFtZS5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKlNwaW5ib3guZm9udCB0ZXh0Zm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKkxpc3Rib3guZm9udCBtYWluZm9udCBzdGFydHVwRmlsZQorfQorCisjIE1ha2UgYSBtZW51IGFuZCBzdWJtZW51cy4KKyMgbSBpcyB0aGUgd2luZG93IG5hbWUgZm9yIHRoZSBtZW51LCBpdGVtcyBpcyB0aGUgbGlzdCBvZiBtZW51IGl0ZW1zIHRvIGFkZC4KKyMgRWFjaCBpdGVtIGlzIGEgbGlzdCB7bWMgbGFiZWwgdHlwZSBkZXNjcmlwdGlvbiBvcHRpb25zLi4ufQorIyBtYyBpcyBpZ25vcmVkOyBpdCdzIHNvIHdlIGNhbiBwdXQgbWMgdGhlcmUgdG8gYWxlcnQgeGdldHRleHQKKyMgbGFiZWwgaXMgdGhlIHN0cmluZyB0aGF0IGFwcGVhcnMgaW4gdGhlIG1lbnUKKyMgdHlwZSBpcyBjYXNjYWRlLCBjb21tYW5kIG9yIHJhZGlvYnV0dG9uIChzaG91bGQgYWRkIGNoZWNrYnV0dG9uKQorIyBkZXNjcmlwdGlvbiBkZXBlbmRzIG9uIHR5cGU7IGl0J3MgdGhlIHN1Ymxpc3QgZm9yIGNhc2NhZGUsIHRoZQorIyBjb21tYW5kIHRvIGludm9rZSBmb3IgY29tbWFuZCwgb3Ige3ZhcmlhYmxlIHZhbHVlfSBmb3IgcmFkaW9idXR0b24KK3Byb2MgbWFrZW1lbnUge20gaXRlbXN9IHsKKyAgICBtZW51ICRtCisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxIHthcXVhfX0geworCXNldCBNZXRhMSBDbWQKKyAgICB9IGVsc2UgeworCXNldCBNZXRhMSBDdHJsCisgICAgfQorICAgIGZvcmVhY2ggaSAkaXRlbXMgeworCXNldCBuYW1lIFttYyBbbGluZGV4ICRpIDFdXQorCXNldCB0eXBlIFtsaW5kZXggJGkgMl0KKwlzZXQgdGhpbmcgW2xpbmRleCAkaSAzXQorCXNldCBwYXJhbXMgW2xpc3QgJHR5cGVdCisJaWYgeyRuYW1lIG5lIHt9fSB7CisJICAgIHNldCB1IFtzdHJpbmcgZmlyc3QgIiYiIFtzdHJpbmcgbWFwIHsmJiB4fSAkbmFtZV1dCisJICAgIGxhcHBlbmQgcGFyYW1zIC1sYWJlbCBbc3RyaW5nIG1hcCB7JiYgJiAmIHt9fSAkbmFtZV0KKwkgICAgaWYgeyR1ID49IDB9IHsKKwkJbGFwcGVuZCBwYXJhbXMgLXVuZGVybGluZSAkdQorCSAgICB9CisJfQorCXN3aXRjaCAtLSAkdHlwZSB7CisJICAgICJjYXNjYWRlIiB7CisJCXNldCBzdWJtZW51IFtzdHJpbmcgdG9sb3dlciBbc3RyaW5nIG1hcCB7JiAiIn0gW2xpbmRleCAkaSAxXV1dCisJCWxhcHBlbmQgcGFyYW1zIC1tZW51ICRtLiRzdWJtZW51CisJICAgIH0KKwkgICAgImNvbW1hbmQiIHsKKwkJbGFwcGVuZCBwYXJhbXMgLWNvbW1hbmQgJHRoaW5nCisJICAgIH0KKwkgICAgInJhZGlvYnV0dG9uIiB7CisJCWxhcHBlbmQgcGFyYW1zIC12YXJpYWJsZSBbbGluZGV4ICR0aGluZyAwXSBcCisJCSAgICAtdmFsdWUgW2xpbmRleCAkdGhpbmcgMV0KKwkgICAgfQorCX0KKwlzZXQgdGFpbCBbbHJhbmdlICRpIDQgZW5kXQorCXJlZ3N1YiAtYWxsIHtceU1ldGExXHl9ICR0YWlsICRNZXRhMSB0YWlsCisJZXZhbCAkbSBhZGQgJHBhcmFtcyAkdGFpbAorCWlmIHskdHlwZSBlcSAiY2FzY2FkZSJ9IHsKKwkgICAgbWFrZW1lbnUgJG0uJHN1Ym1lbnUgJHRoaW5nCisJfQorICAgIH0KK30KKworIyB0cmFuc2xhdGUgc3RyaW5nIGFuZCByZW1vdmUgYW1wZXJzYW5kcworcHJvYyBtY2Ege3N0cn0geworICAgIHJldHVybiBbc3RyaW5nIG1hcCB7JiYgJiAmIHt9fSBbbWMgJHN0cl1dCit9CisKK3Byb2MgbWFrZWRyb3BsaXN0IHt3IHZhcm5hbWUgYXJnc30geworICAgIGdsb2JhbCB1c2VfdHRrCisgICAgaWYgeyR1c2VfdHRrfSB7CisgICAgICAgIHNldCB3aWR0aCAwCisgICAgICAgIGZvcmVhY2ggbGFiZWwgJGFyZ3MgeworICAgICAgICAgICAgc2V0IGN4IFtzdHJpbmcgbGVuZ3RoICRsYWJlbF0KKyAgICAgICAgICAgIGlmIHskY3ggPiAkd2lkdGh9IHtzZXQgd2lkdGggJGN4fQorICAgICAgICB9CisJc2V0IGdtIFt0dGs6OmNvbWJvYm94ICR3IC13aWR0aCAkd2lkdGggLXN0YXRlIHJlYWRvbmx5XAorCQkgICAgLXRleHR2YXJpYWJsZSAkdmFybmFtZSAtdmFsdWVzICRhcmdzXQorICAgIH0gZWxzZSB7CisJc2V0IGdtIFtldmFsIFtsaW5zZXJ0ICRhcmdzIDAgdGtfb3B0aW9uTWVudSAkdyAkdmFybmFtZV1dCisgICAgfQorICAgIHJldHVybiAkZ20KK30KKworcHJvYyBtYWtld2luZG93IHt9IHsKKyAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MyBsaW5lc3BjIGNoYXJzcGMgY3RleHQgY2ZsaXN0IGNzY3JvbGwKKyAgICBnbG9iYWwgdGFic3RvcAorICAgIGdsb2JhbCBmaW5kdHlwZSBmaW5kdHlwZW1lbnUgZmluZGxvYyBmaW5kc3RyaW5nIGZzdHJpbmcgZ2VvbWV0cnkKKyAgICBnbG9iYWwgZW50cmllcyBzaGExZW50cnkgc2hhMXN0cmluZyBzaGExYnV0CisgICAgZ2xvYmFsIGRpZmZjb250ZXh0c3RyaW5nIGRpZmZjb250ZXh0CisgICAgZ2xvYmFsIGlnbm9yZXNwYWNlCisgICAgZ2xvYmFsIG1haW5jdXJzb3IgdGV4dGN1cnNvciBjdXJ0ZXh0Y3Vyc29yCisgICAgZ2xvYmFsIHJvd2N0eG1lbnUgZmFrZXJvd21lbnUgbWVyZ2VtYXggd3JhcGNvbW1lbnQKKyAgICBnbG9iYWwgaGlnaGxpZ2h0X2ZpbGVzIGdkdHR5cGUKKyAgICBnbG9iYWwgc2VhcmNoc3RyaW5nIHNzdHJpbmcKKyAgICBnbG9iYWwgYmdjb2xvciBmZ2NvbG9yIGJnbGlzdCBmZ2xpc3QgZGlmZmNvbG9ycyBzZWxlY3RiZ2NvbG9yCisgICAgZ2xvYmFsIGhlYWRjdHhtZW51IHByb2dyZXNzY2FudiBwcm9ncmVzc2l0ZW0gcHJvZ3Jlc3Njb29yZHMgc3RhdHVzdworICAgIGdsb2JhbCBmcHJvZ2l0ZW0gZnByb2djb29yZCBsYXN0cHJvZ3VwZGF0ZSBwcm9ndXBkYXRlcGVuZGluZworICAgIGdsb2JhbCBycHJvZ2l0ZW0gcnByb2djb29yZCByb3dudW1zZWwgbnVtY29tbWl0cworICAgIGdsb2JhbCBoYXZlX3RrODUgdXNlX3R0ayBOUworICAgIGdsb2JhbCBnaXRfdmVyc2lvbgorICAgIGdsb2JhbCB3b3JkZGlmZgorCisgICAgIyBUaGUgIm1jIiBhcmd1bWVudHMgaGVyZSBhcmUgcHVyZWx5IHNvIHRoYXQgeGdldHRleHQKKyAgICAjIHNlZXMgdGhlIGZvbGxvd2luZyBzdHJpbmcgYXMgbmVlZGluZyB0byBiZSB0cmFuc2xhdGVkCisgICAgc2V0IGZpbGUgeworCW1jICJGaWxlIiBjYXNjYWRlIHsKKwkgICAge21jICJVcGRhdGUiIGNvbW1hbmQgdXBkYXRlY29tbWl0cyAtYWNjZWxlcmF0b3IgRjV9CisJICAgIHttYyAiUmVsb2FkIiBjb21tYW5kIHJlbG9hZGNvbW1pdHMgLWFjY2VsZXJhdG9yIFNoaWZ0LUY1fQorCSAgICB7bWMgIlJlcmVhZCByZWZlcmVuY2VzIiBjb21tYW5kIHJlcmVhZHJlZnN9CisJICAgIHttYyAiTGlzdCByZWZlcmVuY2VzIiBjb21tYW5kIHNob3dyZWZzIC1hY2NlbGVyYXRvciBGMn0KKwkgICAge3h4ICIiIHNlcGFyYXRvcn0KKwkgICAge21jICJTdGFydCBnaXQgZ3VpIiBjb21tYW5kIHtleGVjIGdpdCBndWkgJn19CisJICAgIHt4eCAiIiBzZXBhcmF0b3J9CisJICAgIHttYyAiUXVpdCIgY29tbWFuZCBkb3F1aXQgLWFjY2VsZXJhdG9yIE1ldGExLVF9CisJfX0KKyAgICBzZXQgZWRpdCB7CisJbWMgIkVkaXQiIGNhc2NhZGUgeworCSAgICB7bWMgIlByZWZlcmVuY2VzIiBjb21tYW5kIGRvcHJlZnN9CisJfX0KKyAgICBzZXQgdmlldyB7CisJbWMgIlZpZXciIGNhc2NhZGUgeworCSAgICB7bWMgIk5ldyB2aWV3Li4uIiBjb21tYW5kIHtuZXd2aWV3IDB9IC1hY2NlbGVyYXRvciBTaGlmdC1GNH0KKwkgICAge21jICJFZGl0IHZpZXcuLi4iIGNvbW1hbmQgZWRpdHZpZXcgLXN0YXRlIGRpc2FibGVkIC1hY2NlbGVyYXRvciBGNH0KKwkgICAge21jICJEZWxldGUgdmlldyIgY29tbWFuZCBkZWx2aWV3IC1zdGF0ZSBkaXNhYmxlZH0KKwkgICAge3h4ICIiIHNlcGFyYXRvcn0KKwkgICAge21jICJBbGwgZmlsZXMiIHJhZGlvYnV0dG9uIHtzZWxlY3RlZHZpZXcgMH0gLWNvbW1hbmQge3Nob3d2aWV3IDB9fQorCX19CisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIG5lICJhcXVhIn0geworCXNldCBoZWxwIHsKKwltYyAiSGVscCIgY2FzY2FkZSB7CisJICAgIHttYyAiQWJvdXQgZ2l0ayIgY29tbWFuZCBhYm91dH0KKwkgICAge21jICJLZXkgYmluZGluZ3MiIGNvbW1hbmQga2V5c30KKwl9fQorCXNldCBiYXIgW2xpc3QgJGZpbGUgJGVkaXQgJHZpZXcgJGhlbHBdCisgICAgfSBlbHNlIHsKKwlwcm9jIDo6dGs6Om1hYzo6U2hvd1ByZWZlcmVuY2VzIHt9IHtkb3ByZWZzfQorCXByb2MgOjp0azo6bWFjOjpRdWl0IHt9IHtkb3F1aXR9CisJbHNldCBmaWxlIGVuZCBbbHJlcGxhY2UgW2xpbmRleCAkZmlsZSBlbmRdIGVuZC0xIGVuZF0KKwlzZXQgYXBwbGUgeworCXh4ICJBcHBsZSIgY2FzY2FkZSB7CisJICAgIHttYyAiQWJvdXQgZ2l0ayIgY29tbWFuZCBhYm91dH0KKwkgICAge3h4ICIiIHNlcGFyYXRvcn0KKwl9fQorCXNldCBoZWxwIHsKKwltYyAiSGVscCIgY2FzY2FkZSB7CisJICAgIHttYyAiS2V5IGJpbmRpbmdzIiBjb21tYW5kIGtleXN9CisJfX0KKwlzZXQgYmFyIFtsaXN0ICRhcHBsZSAkZmlsZSAkdmlldyAkaGVscF0KKyAgICB9CisgICAgbWFrZW1lbnUgLmJhciAkYmFyCisgICAgLiBjb25maWd1cmUgLW1lbnUgLmJhcgorCisgICAgaWYgeyR1c2VfdHRrfSB7CisgICAgICAgICMgY292ZXIgdGhlIG5vbi10aGVtZWQgdG9wbGV2ZWwgd2l0aCBhIHRoZW1lZCBmcmFtZS4KKyAgICAgICAgcGxhY2UgW3R0azo6ZnJhbWUgLl9tYWluX2JhY2tncm91bmRdIC14IDAgLXkgMCAtcmVsd2lkdGggMSAtcmVsaGVpZ2h0IDEKKyAgICB9CisKKyAgICAjIHRoZSBndWkgaGFzIHVwcGVyIGFuZCBsb3dlciBoYWxmLCBwYXJ0cyBvZiBhIHBhbmVkIHdpbmRvdy4KKyAgICAke05TfTo6cGFuZWR3aW5kb3cgLmN0b3AgLW9yaWVudCB2ZXJ0aWNhbAorCisgICAgIyBwb3NzaWJseSB1c2UgYXNzdW1lZCBnZW9tZXRyeQorICAgIGlmIHshW2luZm8gZXhpc3RzIGdlb21ldHJ5KHB3c2FzaDApXX0geworICAgICAgICBzZXQgZ2VvbWV0cnkodG9waGVpZ2h0KSBbZXhwciB7MTUgKiAkbGluZXNwY31dCisgICAgICAgIHNldCBnZW9tZXRyeSh0b3B3aWR0aCkgW2V4cHIgezgwICogJGNoYXJzcGN9XQorICAgICAgICBzZXQgZ2VvbWV0cnkoYm90aGVpZ2h0KSBbZXhwciB7MTUgKiAkbGluZXNwY31dCisgICAgICAgIHNldCBnZW9tZXRyeShib3R3aWR0aCkgW2V4cHIgezUwICogJGNoYXJzcGN9XQorICAgICAgICBzZXQgZ2VvbWV0cnkocHdzYXNoMCkgW2xpc3QgW2V4cHIgezQwICogJGNoYXJzcGN9XSAyXQorICAgICAgICBzZXQgZ2VvbWV0cnkocHdzYXNoMSkgW2xpc3QgW2V4cHIgezYwICogJGNoYXJzcGN9XSAyXQorICAgIH0KKworICAgICMgdGhlIHVwcGVyIGhhbGYgd2lsbCBoYXZlIGEgcGFuZWQgd2luZG93LCBhIHNjcm9sbCBiYXIgdG8gdGhlIHJpZ2h0LCBhbmQgc29tZSBzdHVmZiBiZWxvdworICAgICR7TlN9OjpmcmFtZSAudGYgLWhlaWdodCAkZ2VvbWV0cnkodG9waGVpZ2h0KSAtd2lkdGggJGdlb21ldHJ5KHRvcHdpZHRoKQorICAgICR7TlN9OjpmcmFtZSAudGYuaGlzdGZyYW1lCisgICAgJHtOU306OnBhbmVkd2luZG93IC50Zi5oaXN0ZnJhbWUucHdjbGlzdCAtb3JpZW50IGhvcml6b250YWwKKyAgICBpZiB7ISR1c2VfdHRrfSB7CisJLnRmLmhpc3RmcmFtZS5wd2NsaXN0IGNvbmZpZ3VyZSAtc2FzaHBhZCAwIC1oYW5kbGVzaXplIDQKKyAgICB9CisKKyAgICAjIGNyZWF0ZSB0aHJlZSBjYW52YXNlcworICAgIHNldCBjc2Nyb2xsIC50Zi5oaXN0ZnJhbWUuY3NiCisgICAgc2V0IGNhbnYgLnRmLmhpc3RmcmFtZS5wd2NsaXN0LmNhbnYKKyAgICBjYW52YXMgJGNhbnYgXAorCS1zZWxlY3RiYWNrZ3JvdW5kICRzZWxlY3RiZ2NvbG9yIFwKKwktYmFja2dyb3VuZCAkYmdjb2xvciAtYmQgMCBcCisJLXlzY3JvbGxpbmNyICRsaW5lc3BjIC15c2Nyb2xsY29tbWFuZCAic2Nyb2xsY2FudiAkY3Njcm9sbCIKKyAgICAudGYuaGlzdGZyYW1lLnB3Y2xpc3QgYWRkICRjYW52CisgICAgc2V0IGNhbnYyIC50Zi5oaXN0ZnJhbWUucHdjbGlzdC5jYW52MgorICAgIGNhbnZhcyAkY2FudjIgXAorCS1zZWxlY3RiYWNrZ3JvdW5kICRzZWxlY3RiZ2NvbG9yIFwKKwktYmFja2dyb3VuZCAkYmdjb2xvciAtYmQgMCAteXNjcm9sbGluY3IgJGxpbmVzcGMKKyAgICAudGYuaGlzdGZyYW1lLnB3Y2xpc3QgYWRkICRjYW52MgorICAgIHNldCBjYW52MyAudGYuaGlzdGZyYW1lLnB3Y2xpc3QuY2FudjMKKyAgICBjYW52YXMgJGNhbnYzIFwKKwktc2VsZWN0YmFja2dyb3VuZCAkc2VsZWN0Ymdjb2xvciBcCisJLWJhY2tncm91bmQgJGJnY29sb3IgLWJkIDAgLXlzY3JvbGxpbmNyICRsaW5lc3BjCisgICAgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IGFkZCAkY2FudjMKKyAgICBpZiB7JHVzZV90dGt9IHsKKwliaW5kIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCA8TWFwPiB7CisJICAgIGJpbmQgJVcgPE1hcD4ge30KKwkgICAgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2hwb3MgMSBbbGluZGV4ICQ6Omdlb21ldHJ5KHB3c2FzaDEpIDBdCisJICAgIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNocG9zIDAgW2xpbmRleCAkOjpnZW9tZXRyeShwd3Nhc2gwKSAwXQorCX0KKyAgICB9IGVsc2UgeworCWV2YWwgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2ggcGxhY2UgMCAkZ2VvbWV0cnkocHdzYXNoMCkKKwlldmFsIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNoIHBsYWNlIDEgJGdlb21ldHJ5KHB3c2FzaDEpCisgICAgfQorCisgICAgIyBhIHNjcm9sbCBiYXIgdG8gcnVsZSB0aGVtCisgICAgJHtOU306OnNjcm9sbGJhciAkY3Njcm9sbCAtY29tbWFuZCB7YWxsY2FudnMgeXZpZXd9CisgICAgaWYgeyEkdXNlX3R0a30geyRjc2Nyb2xsIGNvbmZpZ3VyZSAtaGlnaGxpZ2h0dGhpY2tuZXNzIDB9CisgICAgcGFjayAkY3Njcm9sbCAtc2lkZSByaWdodCAtZmlsbCB5CisgICAgYmluZCAudGYuaGlzdGZyYW1lLnB3Y2xpc3QgPENvbmZpZ3VyZT4ge3Jlc2l6ZWNsaXN0cGFuZXMgJVcgJXd9CisgICAgbGFwcGVuZCBiZ2xpc3QgJGNhbnYgJGNhbnYyICRjYW52MworICAgIHBhY2sgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IC1maWxsIGJvdGggLWV4cGFuZCAxIC1zaWRlIGxlZnQKKworICAgICMgd2UgaGF2ZSB0d28gYnV0dG9uIGJhcnMgYXQgYm90dG9tIG9mIHRvcCBmcmFtZS4gQmFyIDEKKyAgICAke05TfTo6ZnJhbWUgLnRmLmJhcgorICAgICR7TlN9OjpmcmFtZSAudGYubGJhciAtaGVpZ2h0IDE1CisKKyAgICBzZXQgc2hhMWVudHJ5IC50Zi5iYXIuc2hhMQorICAgIHNldCBlbnRyaWVzICRzaGExZW50cnkKKyAgICBzZXQgc2hhMWJ1dCAudGYuYmFyLnNoYTFsYWJlbAorICAgIGJ1dHRvbiAkc2hhMWJ1dCAtdGV4dCAiW21jICJTSEExIElEOiJdICIgLXN0YXRlIGRpc2FibGVkIC1yZWxpZWYgZmxhdCBcCisJLWNvbW1hbmQgZ290b2NvbW1pdCAtd2lkdGggOAorICAgICRzaGExYnV0IGNvbmYgLWRpc2FibGVkZm9yZWdyb3VuZCBbJHNoYTFidXQgY2dldCAtZm9yZWdyb3VuZF0KKyAgICBwYWNrIC50Zi5iYXIuc2hhMWxhYmVsIC1zaWRlIGxlZnQKKyAgICAke05TfTo6ZW50cnkgJHNoYTFlbnRyeSAtd2lkdGggNDAgLWZvbnQgdGV4dGZvbnQgLXRleHR2YXJpYWJsZSBzaGExc3RyaW5nCisgICAgdHJhY2UgYWRkIHZhcmlhYmxlIHNoYTFzdHJpbmcgd3JpdGUgc2hhMWNoYW5nZQorICAgIHBhY2sgJHNoYTFlbnRyeSAtc2lkZSBsZWZ0IC1wYWR5IDIKKworICAgIGltYWdlIGNyZWF0ZSBiaXRtYXAgYm0tbGVmdCAtZGF0YSB7CisJI2RlZmluZSBsZWZ0X3dpZHRoIDE2CisJI2RlZmluZSBsZWZ0X2hlaWdodCAxNgorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxlZnRfYml0c1tdID0geworCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4ZTAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MWMsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZiwgMHgwZSwgMHgwMCwgMHgxYywgMHgwMCwKKwkweDM4LCAweDAwLCAweDcwLCAweDAwLCAweGUwLCAweDAwLCAweGMwLCAweDAxfTsKKyAgICB9CisgICAgaW1hZ2UgY3JlYXRlIGJpdG1hcCBibS1yaWdodCAtZGF0YSB7CisJI2RlZmluZSByaWdodF93aWR0aCAxNgorCSNkZWZpbmUgcmlnaHRfaGVpZ2h0IDE2CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgcmlnaHRfYml0c1tdID0geworCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4ODAsIDB4MDMsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MWMsCisJMHgwMCwgMHgzOCwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZiwgMHgwMCwgMHgzOCwgMHgwMCwgMHgxYywKKwkweDAwLCAweDBlLCAweDAwLCAweDA3LCAweDgwLCAweDAzLCAweGMwLCAweDAxfTsKKyAgICB9CisgICAgJHtOU306OmJ1dHRvbiAudGYuYmFyLmxlZnRidXQgLWltYWdlIGJtLWxlZnQgLWNvbW1hbmQgZ29iYWNrIFwKKwktc3RhdGUgZGlzYWJsZWQgLXdpZHRoIDI2CisgICAgcGFjayAudGYuYmFyLmxlZnRidXQgLXNpZGUgbGVmdCAtZmlsbCB5CisgICAgJHtOU306OmJ1dHRvbiAudGYuYmFyLnJpZ2h0YnV0IC1pbWFnZSBibS1yaWdodCAtY29tbWFuZCBnb2ZvcncgXAorCS1zdGF0ZSBkaXNhYmxlZCAtd2lkdGggMjYKKyAgICBwYWNrIC50Zi5iYXIucmlnaHRidXQgLXNpZGUgbGVmdCAtZmlsbCB5CisKKyAgICAke05TfTo6bGFiZWwgLnRmLmJhci5yb3dsYWJlbCAtdGV4dCBbbWMgIlJvdyJdCisgICAgc2V0IHJvd251bXNlbCB7fQorICAgICR7TlN9OjpsYWJlbCAudGYuYmFyLnJvd251bSAtd2lkdGggNyAtdGV4dHZhcmlhYmxlIHJvd251bXNlbCBcCisJLXJlbGllZiBzdW5rZW4gLWFuY2hvciBlCisgICAgJHtOU306OmxhYmVsIC50Zi5iYXIucm93bGFiZWwyIC10ZXh0ICIvIgorICAgICR7TlN9OjpsYWJlbCAudGYuYmFyLm51bWNvbW1pdHMgLXdpZHRoIDcgLXRleHR2YXJpYWJsZSBudW1jb21taXRzIFwKKwktcmVsaWVmIHN1bmtlbiAtYW5jaG9yIGUKKyAgICBwYWNrIC50Zi5iYXIucm93bGFiZWwgLnRmLmJhci5yb3dudW0gLnRmLmJhci5yb3dsYWJlbDIgLnRmLmJhci5udW1jb21taXRzIFwKKwktc2lkZSBsZWZ0CisgICAgaWYgeyEkdXNlX3R0a30geworICAgICAgICBmb3JlYWNoIHcge3Jvd251bSBudW1jb21taXRzfSB7LnRmLmJhci4kdyBjb25maWd1cmUgLWZvbnQgdGV4dGZvbnR9CisgICAgfQorICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUKKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgc2VsZWN0ZWRsaW5lIHdyaXRlIHNlbGVjdGVkbGluZV9jaGFuZ2UKKworICAgICMgU3RhdHVzIGxhYmVsIGFuZCBwcm9ncmVzcyBiYXIKKyAgICBzZXQgc3RhdHVzdyAudGYuYmFyLnN0YXR1cworICAgICR7TlN9OjpsYWJlbCAkc3RhdHVzdyAtd2lkdGggMTUgLXJlbGllZiBzdW5rZW4KKyAgICBwYWNrICRzdGF0dXN3IC1zaWRlIGxlZnQgLXBhZHggNQorICAgIGlmIHskdXNlX3R0a30geworCXNldCBwcm9ncmVzc2NhbnYgW3R0azo6cHJvZ3Jlc3NiYXIgLnRmLmJhci5wcm9ncmVzc10KKyAgICB9IGVsc2UgeworCXNldCBoIFtleHByIHtbZm9udCBtZXRyaWNzIHVpZm9udCAtbGluZXNwYWNlXSArIDJ9XQorCXNldCBwcm9ncmVzc2NhbnYgLnRmLmJhci5wcm9ncmVzcworCWNhbnZhcyAkcHJvZ3Jlc3NjYW52IC1yZWxpZWYgc3Vua2VuIC1oZWlnaHQgJGggLWJvcmRlcndpZHRoIDIKKwlzZXQgcHJvZ3Jlc3NpdGVtIFskcHJvZ3Jlc3NjYW52IGNyZWF0ZSByZWN0IC0xIDAgMCAkaCAtZmlsbCBncmVlbl0KKwlzZXQgZnByb2dpdGVtIFskcHJvZ3Jlc3NjYW52IGNyZWF0ZSByZWN0IC0xIDAgMCAkaCAtZmlsbCB5ZWxsb3ddCisJc2V0IHJwcm9naXRlbSBbJHByb2dyZXNzY2FudiBjcmVhdGUgcmVjdCAtMSAwIDAgJGggLWZpbGwgcmVkXQorICAgIH0KKyAgICBwYWNrICRwcm9ncmVzc2NhbnYgLXNpZGUgcmlnaHQgLWV4cGFuZCAxIC1maWxsIHggLXBhZHggezAgMn0KKyAgICBzZXQgcHJvZ3Jlc3Njb29yZHMgezAgMH0KKyAgICBzZXQgZnByb2djb29yZCAwCisgICAgc2V0IHJwcm9nY29vcmQgMAorICAgIGJpbmQgJHByb2dyZXNzY2FudiA8Q29uZmlndXJlPiBhZGp1c3Rwcm9ncmVzcworICAgIHNldCBsYXN0cHJvZ3VwZGF0ZSBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IHByb2d1cGRhdGVwZW5kaW5nIDAKKworICAgICMgYnVpbGQgdXAgdGhlIGJvdHRvbSBiYXIgb2YgdXBwZXIgd2luZG93CisgICAgJHtOU306OmxhYmVsIC50Zi5sYmFyLmZsYWJlbCAtdGV4dCAiW21jICJGaW5kIl0gIgorICAgICR7TlN9OjpidXR0b24gLnRmLmxiYXIuZm5leHQgLXRleHQgW21jICJuZXh0Il0gLWNvbW1hbmQge2RvZmluZCAxIDF9CisgICAgJHtOU306OmJ1dHRvbiAudGYubGJhci5mcHJldiAtdGV4dCBbbWMgInByZXYiXSAtY29tbWFuZCB7ZG9maW5kIC0xIDF9CisgICAgJHtOU306OmxhYmVsIC50Zi5sYmFyLmZsYWIyIC10ZXh0ICIgW21jICJjb21taXQiXSAiCisgICAgcGFjayAudGYubGJhci5mbGFiZWwgLnRmLmxiYXIuZm5leHQgLnRmLmxiYXIuZnByZXYgLnRmLmxiYXIuZmxhYjIgXAorCS1zaWRlIGxlZnQgLWZpbGwgeQorICAgIHNldCBnZHR0eXBlIFttYyAiY29udGFpbmluZzoiXQorICAgIHNldCBnbSBbbWFrZWRyb3BsaXN0IC50Zi5sYmFyLmdkdHR5cGUgZ2R0dHlwZSBcCisJCVttYyAiY29udGFpbmluZzoiXSBcCisJCVttYyAidG91Y2hpbmcgcGF0aHM6Il0gXAorCQlbbWMgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6Il1dCisgICAgdHJhY2UgYWRkIHZhcmlhYmxlIGdkdHR5cGUgd3JpdGUgZ2R0dHlwZV9jaGFuZ2UKKyAgICBwYWNrIC50Zi5sYmFyLmdkdHR5cGUgLXNpZGUgbGVmdCAtZmlsbCB5CisKKyAgICBzZXQgZmluZHN0cmluZyB7fQorICAgIHNldCBmc3RyaW5nIC50Zi5sYmFyLmZpbmRzdHJpbmcKKyAgICBsYXBwZW5kIGVudHJpZXMgJGZzdHJpbmcKKyAgICAke05TfTo6ZW50cnkgJGZzdHJpbmcgLXdpZHRoIDMwIC10ZXh0dmFyaWFibGUgZmluZHN0cmluZworICAgIHRyYWNlIGFkZCB2YXJpYWJsZSBmaW5kc3RyaW5nIHdyaXRlIGZpbmRfY2hhbmdlCisgICAgc2V0IGZpbmR0eXBlIFttYyAiRXhhY3QiXQorICAgIHNldCBmaW5kdHlwZW1lbnUgW21ha2Vkcm9wbGlzdCAudGYubGJhci5maW5kdHlwZSBcCisJCQkgIGZpbmR0eXBlIFttYyAiRXhhY3QiXSBbbWMgIklnbkNhc2UiXSBbbWMgIlJlZ2V4cCJdXQorICAgIHRyYWNlIGFkZCB2YXJpYWJsZSBmaW5kdHlwZSB3cml0ZSBmaW5kY29tX2NoYW5nZQorICAgIHNldCBmaW5kbG9jIFttYyAiQWxsIGZpZWxkcyJdCisgICAgbWFrZWRyb3BsaXN0IC50Zi5sYmFyLmZpbmRsb2MgZmluZGxvYyBbbWMgIkFsbCBmaWVsZHMiXSBbbWMgIkhlYWRsaW5lIl0gXAorCVttYyAiQ29tbWVudHMiXSBbbWMgIkF1dGhvciJdIFttYyAiQ29tbWl0dGVyIl0KKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgZmluZGxvYyB3cml0ZSBmaW5kX2NoYW5nZQorICAgIHBhY2sgLnRmLmxiYXIuZmluZGxvYyAtc2lkZSByaWdodAorICAgIHBhY2sgLnRmLmxiYXIuZmluZHR5cGUgLXNpZGUgcmlnaHQKKyAgICBwYWNrICRmc3RyaW5nIC1zaWRlIGxlZnQgLWV4cGFuZCAxIC1maWxsIHgKKworICAgICMgRmluaXNoIHB1dHRpbmcgdGhlIHVwcGVyIGhhbGYgb2YgdGhlIHZpZXdlciB0b2dldGhlcgorICAgIHBhY2sgLnRmLmxiYXIgLWluIC50ZiAtc2lkZSBib3R0b20gLWZpbGwgeAorICAgIHBhY2sgLnRmLmJhciAtaW4gLnRmIC1zaWRlIGJvdHRvbSAtZmlsbCB4CisgICAgcGFjayAudGYuaGlzdGZyYW1lIC1maWxsIGJvdGggLXNpZGUgdG9wIC1leHBhbmQgMQorICAgIC5jdG9wIGFkZCAudGYKKyAgICBpZiB7ISR1c2VfdHRrfSB7CisJLmN0b3AgcGFuZWNvbmZpZ3VyZSAudGYgLWhlaWdodCAkZ2VvbWV0cnkodG9waGVpZ2h0KQorCS5jdG9wIHBhbmVjb25maWd1cmUgLnRmIC13aWR0aCAkZ2VvbWV0cnkodG9wd2lkdGgpCisgICAgfQorCisgICAgIyBub3cgYnVpbGQgdXAgdGhlIGJvdHRvbQorICAgICR7TlN9OjpwYW5lZHdpbmRvdyAucHdib3R0b20gLW9yaWVudCBob3Jpem9udGFsCisKKyAgICAjIGxvd2VyIGxlZnQsIGEgdGV4dCBib3ggb3ZlciBzZWFyY2ggYmFyLCBzY3JvbGwgYmFyIHRvIHRoZSByaWdodAorICAgICMgaWYgd2Uga25vdyB3aW5kb3cgaGVpZ2h0LCB0aGVuIHRoYXQgd2lsbCBzZXQgdGhlIGxvd2VyIHRleHQgaGVpZ2h0LCBvdGhlcndpc2UKKyAgICAjIHdlIHNldCBsb3dlciB0ZXh0IGhlaWdodCB3aGljaCB3aWxsIGRyaXZlIHdpbmRvdyBoZWlnaHQKKyAgICBpZiB7W2luZm8gZXhpc3RzIGdlb21ldHJ5KG1haW4pXX0geworCSR7TlN9OjpmcmFtZSAuYmxlZnQgLXdpZHRoICRnZW9tZXRyeShib3R3aWR0aCkKKyAgICB9IGVsc2UgeworCSR7TlN9OjpmcmFtZSAuYmxlZnQgLXdpZHRoICRnZW9tZXRyeShib3R3aWR0aCkgLWhlaWdodCAkZ2VvbWV0cnkoYm90aGVpZ2h0KQorICAgIH0KKyAgICAke05TfTo6ZnJhbWUgLmJsZWZ0LnRvcAorICAgICR7TlN9OjpmcmFtZSAuYmxlZnQubWlkCisgICAgJHtOU306OmZyYW1lIC5ibGVmdC5ib3R0b20KKworICAgICR7TlN9OjpidXR0b24gLmJsZWZ0LnRvcC5zZWFyY2ggLXRleHQgW21jICJTZWFyY2giXSAtY29tbWFuZCBkb3NlYXJjaAorICAgIHBhY2sgLmJsZWZ0LnRvcC5zZWFyY2ggLXNpZGUgbGVmdCAtcGFkeCA1CisgICAgc2V0IHNzdHJpbmcgLmJsZWZ0LnRvcC5zc3RyaW5nCisgICAgc2V0IHNlYXJjaHN0cmluZyAiIgorICAgICR7TlN9OjplbnRyeSAkc3N0cmluZyAtd2lkdGggMjAgLXRleHR2YXJpYWJsZSBzZWFyY2hzdHJpbmcKKyAgICBsYXBwZW5kIGVudHJpZXMgJHNzdHJpbmcKKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgc2VhcmNoc3RyaW5nIHdyaXRlIGluY3JzZWFyY2gKKyAgICBwYWNrICRzc3RyaW5nIC1zaWRlIGxlZnQgLWV4cGFuZCAxIC1maWxsIHgKKyAgICAke05TfTo6cmFkaW9idXR0b24gLmJsZWZ0Lm1pZC5kaWZmIC10ZXh0IFttYyAiRGlmZiJdIFwKKwktY29tbWFuZCBjaGFuZ2VkaWZmZGlzcCAtdmFyaWFibGUgZGlmZmVsaWRlIC12YWx1ZSB7MCAwfQorICAgICR7TlN9OjpyYWRpb2J1dHRvbiAuYmxlZnQubWlkLm9sZCAtdGV4dCBbbWMgIk9sZCB2ZXJzaW9uIl0gXAorCS1jb21tYW5kIGNoYW5nZWRpZmZkaXNwIC12YXJpYWJsZSBkaWZmZWxpZGUgLXZhbHVlIHswIDF9CisgICAgJHtOU306OnJhZGlvYnV0dG9uIC5ibGVmdC5taWQubmV3IC10ZXh0IFttYyAiTmV3IHZlcnNpb24iXSBcCisJLWNvbW1hbmQgY2hhbmdlZGlmZmRpc3AgLXZhcmlhYmxlIGRpZmZlbGlkZSAtdmFsdWUgezEgMH0KKyAgICAke05TfTo6bGFiZWwgLmJsZWZ0Lm1pZC5sYWJlbGRpZmZjb250ZXh0IC10ZXh0ICIgICAgICBbbWMgIkxpbmVzIG9mIGNvbnRleHQiXTogIgorICAgIHBhY2sgLmJsZWZ0Lm1pZC5kaWZmIC5ibGVmdC5taWQub2xkIC5ibGVmdC5taWQubmV3IC1zaWRlIGxlZnQKKyAgICBzcGluYm94IC5ibGVmdC5taWQuZGlmZmNvbnRleHQgLXdpZHRoIDUgXAorCS1mcm9tIDAgLWluY3JlbWVudCAxIC10byAxMDAwMDAwMCBcCisJLXZhbGlkYXRlIGFsbCAtdmFsaWRhdGVjb21tYW5kICJkaWZmY29udGV4dHZhbGlkYXRlICVQIiBcCisJLXRleHR2YXJpYWJsZSBkaWZmY29udGV4dHN0cmluZworICAgIC5ibGVmdC5taWQuZGlmZmNvbnRleHQgc2V0ICRkaWZmY29udGV4dAorICAgIHRyYWNlIGFkZCB2YXJpYWJsZSBkaWZmY29udGV4dHN0cmluZyB3cml0ZSBkaWZmY29udGV4dGNoYW5nZQorICAgIGxhcHBlbmQgZW50cmllcyAuYmxlZnQubWlkLmRpZmZjb250ZXh0CisgICAgcGFjayAuYmxlZnQubWlkLmxhYmVsZGlmZmNvbnRleHQgLmJsZWZ0Lm1pZC5kaWZmY29udGV4dCAtc2lkZSBsZWZ0CisgICAgJHtOU306OmNoZWNrYnV0dG9uIC5ibGVmdC5taWQuaWduc3BhY2UgLXRleHQgW21jICJJZ25vcmUgc3BhY2UgY2hhbmdlIl0gXAorCS1jb21tYW5kIGNoYW5nZWlnbm9yZXNwYWNlIC12YXJpYWJsZSBpZ25vcmVzcGFjZQorICAgIHBhY2sgLmJsZWZ0Lm1pZC5pZ25zcGFjZSAtc2lkZSBsZWZ0IC1wYWR4IDUKKworICAgIHNldCB3b3JkZGlmZiBbbWMgIkxpbmUgZGlmZiJdCisgICAgaWYge1twYWNrYWdlIHZjb21wYXJlICRnaXRfdmVyc2lvbiAiMS43LjIiXSA+PSAwfSB7CisJbWFrZWRyb3BsaXN0IC5ibGVmdC5taWQud29yZGRpZmYgd29yZGRpZmYgW21jICJMaW5lIGRpZmYiXSBcCisJICAgIFttYyAiTWFya3VwIHdvcmRzIl0gW21jICJDb2xvciB3b3JkcyJdCisJdHJhY2UgYWRkIHZhcmlhYmxlIHdvcmRkaWZmIHdyaXRlIGNoYW5nZXdvcmRkaWZmCisJcGFjayAuYmxlZnQubWlkLndvcmRkaWZmIC1zaWRlIGxlZnQgLXBhZHggNQorICAgIH0KKworICAgIHNldCBjdGV4dCAuYmxlZnQuYm90dG9tLmN0ZXh0CisgICAgdGV4dCAkY3RleHQgLWJhY2tncm91bmQgJGJnY29sb3IgLWZvcmVncm91bmQgJGZnY29sb3IgXAorCS1zdGF0ZSBkaXNhYmxlZCAtZm9udCB0ZXh0Zm9udCBcCisJLXlzY3JvbGxjb21tYW5kIHNjcm9sbHRleHQgLXdyYXAgbm9uZSBcCisJLXhzY3JvbGxjb21tYW5kICIuYmxlZnQuYm90dG9tLnNiaG9yaXpvbnRhbCBzZXQiCisgICAgaWYgeyRoYXZlX3RrODV9IHsKKwkkY3RleHQgY29uZiAtdGFic3R5bGUgd29yZHByb2Nlc3NvcgorICAgIH0KKyAgICAke05TfTo6c2Nyb2xsYmFyIC5ibGVmdC5ib3R0b20uc2IgLWNvbW1hbmQgIiRjdGV4dCB5dmlldyIKKyAgICAke05TfTo6c2Nyb2xsYmFyIC5ibGVmdC5ib3R0b20uc2Job3Jpem9udGFsIC1jb21tYW5kICIkY3RleHQgeHZpZXciIC1vcmllbnQgaAorICAgIHBhY2sgLmJsZWZ0LnRvcCAtc2lkZSB0b3AgLWZpbGwgeAorICAgIHBhY2sgLmJsZWZ0Lm1pZCAtc2lkZSB0b3AgLWZpbGwgeAorICAgIGdyaWQgJGN0ZXh0IC5ibGVmdC5ib3R0b20uc2IgLXN0aWNreSBuc2V3CisgICAgZ3JpZCAuYmxlZnQuYm90dG9tLnNiaG9yaXpvbnRhbCAtc3RpY2t5IGV3CisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgLmJsZWZ0LmJvdHRvbSAwIC13ZWlnaHQgMQorICAgIGdyaWQgcm93Y29uZmlndXJlIC5ibGVmdC5ib3R0b20gMCAtd2VpZ2h0IDEKKyAgICBncmlkIHJvd2NvbmZpZ3VyZSAuYmxlZnQuYm90dG9tIDEgLXdlaWdodCAwCisgICAgcGFjayAuYmxlZnQuYm90dG9tIC1zaWRlIHRvcCAtZmlsbCBib3RoIC1leHBhbmQgMQorICAgIGxhcHBlbmQgYmdsaXN0ICRjdGV4dAorICAgIGxhcHBlbmQgZmdsaXN0ICRjdGV4dAorCisgICAgJGN0ZXh0IHRhZyBjb25mIGNvbW1lbnQgLXdyYXAgJHdyYXBjb21tZW50CisgICAgJGN0ZXh0IHRhZyBjb25mIGZpbGVzZXAgLWZvbnQgdGV4dGZvbnRib2xkIC1iYWNrICIjYWFhYWFhIgorICAgICRjdGV4dCB0YWcgY29uZiBodW5rc2VwIC1mb3JlIFtsaW5kZXggJGRpZmZjb2xvcnMgMl0KKyAgICAkY3RleHQgdGFnIGNvbmYgZDAgLWZvcmUgW2xpbmRleCAkZGlmZmNvbG9ycyAwXQorICAgICRjdGV4dCB0YWcgY29uZiBkcmVzdWx0IC1mb3JlIFtsaW5kZXggJGRpZmZjb2xvcnMgMV0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTAgLWZvcmUgcmVkCisgICAgJGN0ZXh0IHRhZyBjb25mIG0xIC1mb3JlIGJsdWUKKyAgICAkY3RleHQgdGFnIGNvbmYgbTIgLWZvcmUgZ3JlZW4KKyAgICAkY3RleHQgdGFnIGNvbmYgbTMgLWZvcmUgcHVycGxlCisgICAgJGN0ZXh0IHRhZyBjb25mIG00IC1mb3JlIGJyb3duCisgICAgJGN0ZXh0IHRhZyBjb25mIG01IC1mb3JlICIjMDA5MDkwIgorICAgICRjdGV4dCB0YWcgY29uZiBtNiAtZm9yZSBtYWdlbnRhCisgICAgJGN0ZXh0IHRhZyBjb25mIG03IC1mb3JlICIjODA4MDAwIgorICAgICRjdGV4dCB0YWcgY29uZiBtOCAtZm9yZSAiIzAwOTAwMCIKKyAgICAkY3RleHQgdGFnIGNvbmYgbTkgLWZvcmUgIiNmZjAwODAiCisgICAgJGN0ZXh0IHRhZyBjb25mIG0xMCAtZm9yZSBjeWFuCisgICAgJGN0ZXh0IHRhZyBjb25mIG0xMSAtZm9yZSAiI2IwNzA3MCIKKyAgICAkY3RleHQgdGFnIGNvbmYgbTEyIC1mb3JlICIjNzBiMGYwIgorICAgICRjdGV4dCB0YWcgY29uZiBtMTMgLWZvcmUgIiM3MGYwYjAiCisgICAgJGN0ZXh0IHRhZyBjb25mIG0xNCAtZm9yZSAiI2YwYjA3MCIKKyAgICAkY3RleHQgdGFnIGNvbmYgbTE1IC1mb3JlICIjZmY3MGIwIgorICAgICRjdGV4dCB0YWcgY29uZiBtbWF4IC1mb3JlIGRhcmtncmV5CisgICAgc2V0IG1lcmdlbWF4IDE2CisgICAgJGN0ZXh0IHRhZyBjb25mIG1yZXN1bHQgLWZvbnQgdGV4dGZvbnRib2xkCisgICAgJGN0ZXh0IHRhZyBjb25mIG1zZXAgLWZvbnQgdGV4dGZvbnRib2xkCisgICAgJGN0ZXh0IHRhZyBjb25mIGZvdW5kIC1iYWNrIHllbGxvdworCisgICAgLnB3Ym90dG9tIGFkZCAuYmxlZnQKKyAgICBpZiB7ISR1c2VfdHRrfSB7CisJLnB3Ym90dG9tIHBhbmVjb25maWd1cmUgLmJsZWZ0IC13aWR0aCAkZ2VvbWV0cnkoYm90d2lkdGgpCisgICAgfQorCisgICAgIyBsb3dlciByaWdodAorICAgICR7TlN9OjpmcmFtZSAuYnJpZ2h0CisgICAgJHtOU306OmZyYW1lIC5icmlnaHQubW9kZQorICAgICR7TlN9OjpyYWRpb2J1dHRvbiAuYnJpZ2h0Lm1vZGUucGF0Y2ggLXRleHQgW21jICJQYXRjaCJdIFwKKwktY29tbWFuZCByZXNlbGVjdGxpbmUgLXZhcmlhYmxlIGNtaXRtb2RlIC12YWx1ZSAicGF0Y2giCisgICAgJHtOU306OnJhZGlvYnV0dG9uIC5icmlnaHQubW9kZS50cmVlIC10ZXh0IFttYyAiVHJlZSJdIFwKKwktY29tbWFuZCByZXNlbGVjdGxpbmUgLXZhcmlhYmxlIGNtaXRtb2RlIC12YWx1ZSAidHJlZSIKKyAgICBncmlkIC5icmlnaHQubW9kZS5wYXRjaCAuYnJpZ2h0Lm1vZGUudHJlZSAtc3RpY2t5IGV3CisgICAgcGFjayAuYnJpZ2h0Lm1vZGUgLXNpZGUgdG9wIC1maWxsIHgKKyAgICBzZXQgY2ZsaXN0IC5icmlnaHQuY2ZpbGVzCisgICAgc2V0IGluZGVudCBbZm9udCBtZWFzdXJlIG1haW5mb250ICJubiJdCisgICAgdGV4dCAkY2ZsaXN0IFwKKwktc2VsZWN0YmFja2dyb3VuZCAkc2VsZWN0Ymdjb2xvciBcCisJLWJhY2tncm91bmQgJGJnY29sb3IgLWZvcmVncm91bmQgJGZnY29sb3IgXAorCS1mb250IG1haW5mb250IFwKKwktdGFicyBbbGlzdCAkaW5kZW50IFtleHByIHsyICogJGluZGVudH1dXSBcCisJLXlzY3JvbGxjb21tYW5kICIuYnJpZ2h0LnNiIHNldCIgXAorCS1jdXJzb3IgWy4gY2dldCAtY3Vyc29yXSBcCisJLXNwYWNpbmcxIDEgLXNwYWNpbmczIDEKKyAgICBsYXBwZW5kIGJnbGlzdCAkY2ZsaXN0CisgICAgbGFwcGVuZCBmZ2xpc3QgJGNmbGlzdAorICAgICR7TlN9OjpzY3JvbGxiYXIgLmJyaWdodC5zYiAtY29tbWFuZCAiJGNmbGlzdCB5dmlldyIKKyAgICBwYWNrIC5icmlnaHQuc2IgLXNpZGUgcmlnaHQgLWZpbGwgeQorICAgIHBhY2sgJGNmbGlzdCAtc2lkZSBsZWZ0IC1maWxsIGJvdGggLWV4cGFuZCAxCisgICAgJGNmbGlzdCB0YWcgY29uZmlndXJlIGhpZ2hsaWdodCBcCisJLWJhY2tncm91bmQgWyRjZmxpc3QgY2dldCAtc2VsZWN0YmFja2dyb3VuZF0KKyAgICAkY2ZsaXN0IHRhZyBjb25maWd1cmUgYm9sZCAtZm9udCBtYWluZm9udGJvbGQKKworICAgIC5wd2JvdHRvbSBhZGQgLmJyaWdodAorICAgIC5jdG9wIGFkZCAucHdib3R0b20KKworICAgICMgcmVzdG9yZSB3aW5kb3cgd2lkdGggJiBoZWlnaHQgaWYga25vd24KKyAgICBpZiB7W2luZm8gZXhpc3RzIGdlb21ldHJ5KG1haW4pXX0geworCWlmIHtbc2NhbiAkZ2VvbWV0cnkobWFpbikgIiVkeCVkIiB3IGhdID49IDJ9IHsKKwkgICAgaWYgeyR3ID4gW3dpbmZvIHNjcmVlbndpZHRoIC5dfSB7CisJCXNldCB3IFt3aW5mbyBzY3JlZW53aWR0aCAuXQorCSAgICB9CisJICAgIGlmIHskaCA+IFt3aW5mbyBzY3JlZW5oZWlnaHQgLl19IHsKKwkJc2V0IGggW3dpbmZvIHNjcmVlbmhlaWdodCAuXQorCSAgICB9CisJICAgIHdtIGdlb21ldHJ5IC4gIiR7d314JGgiCisJfQorICAgIH0KKworICAgIGlmIHtbaW5mbyBleGlzdHMgZ2VvbWV0cnkoc3RhdGUpXSAmJiAkZ2VvbWV0cnkoc3RhdGUpIGVxICJ6b29tZWQifSB7CisgICAgICAgIHdtIHN0YXRlIC4gJGdlb21ldHJ5KHN0YXRlKQorICAgIH0KKworICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSB7YXF1YX19IHsKKyAgICAgICAgc2V0IE0xQiBNMQorICAgICAgICBzZXQgOjpCTSAiMyIKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgTTFCIENvbnRyb2wKKyAgICAgICAgc2V0IDo6Qk0gIjIiCisgICAgfQorCisgICAgaWYgeyR1c2VfdHRrfSB7CisgICAgICAgIGJpbmQgLmN0b3AgPE1hcD4geworICAgICAgICAgICAgYmluZCAlVyA8TWFwPiB7fQorICAgICAgICAgICAgJVcgc2FzaHBvcyAwICQ6Omdlb21ldHJ5KHRvcGhlaWdodCkKKyAgICAgICAgfQorICAgICAgICBiaW5kIC5wd2JvdHRvbSA8TWFwPiB7CisgICAgICAgICAgICBiaW5kICVXIDxNYXA+IHt9CisgICAgICAgICAgICAlVyBzYXNocG9zIDAgJDo6Z2VvbWV0cnkoYm90d2lkdGgpCisgICAgICAgIH0KKyAgICB9CisKKyAgICBiaW5kIC5wd2JvdHRvbSA8Q29uZmlndXJlPiB7cmVzaXplY2RldHBhbmVzICVXICV3fQorICAgIHBhY2sgLmN0b3AgLWZpbGwgYm90aCAtZXhwYW5kIDEKKyAgICBiaW5kYWxsIDwxPiB7c2VsY2FudmxpbmUgJVcgJXggJXl9CisgICAgI2JpbmRhbGwgPEIxLU1vdGlvbj4ge3NlbGNhbnZsaW5lICVXICV4ICV5fQorICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSA9PSAid2luMzIifSB7CisJYmluZCAuIDxNb3VzZVdoZWVsPiB7IHdpbmRvd3NfbW91c2V3aGVlbF9yZWRpcmVjdG9yICVXICVYICVZICVEIH0KKwliaW5kICRjdGV4dCA8TW91c2VXaGVlbD4geyB3aW5kb3dzX21vdXNld2hlZWxfcmVkaXJlY3RvciAlVyAlWCAlWSAlRCA7IGJyZWFrIH0KKyAgICB9IGVsc2UgeworCWJpbmRhbGwgPEJ1dHRvblJlbGVhc2UtND4gImFsbGNhbnZzIHl2aWV3IHNjcm9sbCAtNSB1bml0cyIKKwliaW5kYWxsIDxCdXR0b25SZWxlYXNlLTU+ICJhbGxjYW52cyB5dmlldyBzY3JvbGwgNSB1bml0cyIKKyAgICAgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJhcXVhIn0geworICAgICAgICAgICAgYmluZGFsbCA8TW91c2VXaGVlbD4geworICAgICAgICAgICAgICAgIHNldCBkZWx0YSBbZXhwciB7LSAoJUQpfV0KKyAgICAgICAgICAgICAgICBhbGxjYW52cyB5dmlldyBzY3JvbGwgJGRlbHRhIHVuaXRzCisgICAgICAgICAgICB9CisgICAgICAgICAgICBiaW5kYWxsIDxTaGlmdC1Nb3VzZVdoZWVsPiB7CisgICAgICAgICAgICAgICAgc2V0IGRlbHRhIFtleHByIHstICglRCl9XQorICAgICAgICAgICAgICAgICRjYW52IHh2aWV3IHNjcm9sbCAkZGVsdGEgdW5pdHMKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBiaW5kYWxsIDwkOjpCTT4gImNhbnZzY2FuIG1hcmsgJVcgJXggJXkiCisgICAgYmluZGFsbCA8QiQ6OkJNLU1vdGlvbj4gImNhbnZzY2FuIGRyYWd0byAlVyAleCAleSIKKyAgICBiaW5kIGFsbCA8JE0xQi1LZXktdz4ge2Rlc3Ryb3kgW3dpbmZvIHRvcGxldmVsICVXXX0KKyAgICBiaW5kIC4gPCRNMUItS2V5LXc+IGRvcXVpdAorICAgIGJpbmRrZXkgPEhvbWU+IHNlbGZpcnN0bGluZQorICAgIGJpbmRrZXkgPEVuZD4gc2VsbGFzdGxpbmUKKyAgICBiaW5kIC4gPEtleS1VcD4gInNlbG5leHRsaW5lIC0xIgorICAgIGJpbmQgLiA8S2V5LURvd24+ICJzZWxuZXh0bGluZSAxIgorICAgIGJpbmQgLiA8U2hpZnQtS2V5LVVwPiAiZG9maW5kIC0xIDAiCisgICAgYmluZCAuIDxTaGlmdC1LZXktRG93bj4gImRvZmluZCAxIDAiCisgICAgYmluZGtleSA8S2V5LVJpZ2h0PiAiZ29mb3J3IgorICAgIGJpbmRrZXkgPEtleS1MZWZ0PiAiZ29iYWNrIgorICAgIGJpbmQgLiA8S2V5LVByaW9yPiAic2VsbmV4dHBhZ2UgLTEiCisgICAgYmluZCAuIDxLZXktTmV4dD4gInNlbG5leHRwYWdlIDEiCisgICAgYmluZCAuIDwkTTFCLUhvbWU+ICJhbGxjYW52cyB5dmlldyBtb3ZldG8gMC4wIgorICAgIGJpbmQgLiA8JE0xQi1FbmQ+ICJhbGxjYW52cyB5dmlldyBtb3ZldG8gMS4wIgorICAgIGJpbmQgLiA8JE0xQi1LZXktVXA+ICJhbGxjYW52cyB5dmlldyBzY3JvbGwgLTEgdW5pdHMiCisgICAgYmluZCAuIDwkTTFCLUtleS1Eb3duPiAiYWxsY2FudnMgeXZpZXcgc2Nyb2xsIDEgdW5pdHMiCisgICAgYmluZCAuIDwkTTFCLUtleS1Qcmlvcj4gImFsbGNhbnZzIHl2aWV3IHNjcm9sbCAtMSBwYWdlcyIKKyAgICBiaW5kIC4gPCRNMUItS2V5LU5leHQ+ICJhbGxjYW52cyB5dmlldyBzY3JvbGwgMSBwYWdlcyIKKyAgICBiaW5ka2V5IDxLZXktRGVsZXRlPiAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAtMSBwYWdlcyIKKyAgICBiaW5ka2V5IDxLZXktQmFja1NwYWNlPiAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAtMSBwYWdlcyIKKyAgICBiaW5ka2V5IDxLZXktc3BhY2U+ICIkY3RleHQgeXZpZXcgc2Nyb2xsIDEgcGFnZXMiCisgICAgYmluZGtleSBwICJzZWxuZXh0bGluZSAtMSIKKyAgICBiaW5ka2V5IG4gInNlbG5leHRsaW5lIDEiCisgICAgYmluZGtleSB6ICJnb2JhY2siCisgICAgYmluZGtleSB4ICJnb2ZvcnciCisgICAgYmluZGtleSBrICJzZWxuZXh0bGluZSAtMSIKKyAgICBiaW5ka2V5IGogInNlbG5leHRsaW5lIDEiCisgICAgYmluZGtleSBoICJnb2JhY2siCisgICAgYmluZGtleSBsICJnb2ZvcnciCisgICAgYmluZGtleSBiIHByZXZmaWxlCisgICAgYmluZGtleSBkICIkY3RleHQgeXZpZXcgc2Nyb2xsIDE4IHVuaXRzIgorICAgIGJpbmRrZXkgdSAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAtMTggdW5pdHMiCisgICAgYmluZGtleSAvIHtmb2N1cyAkZnN0cmluZ30KKyAgICBiaW5ka2V5IDxLZXktS1BfRGl2aWRlPiB7Zm9jdXMgJGZzdHJpbmd9CisgICAgYmluZGtleSA8S2V5LVJldHVybj4ge2RvZmluZCAxIDF9CisgICAgYmluZGtleSA/IHtkb2ZpbmQgLTEgMX0KKyAgICBiaW5ka2V5IGYgbmV4dGZpbGUKKyAgICBiaW5kIC4gPEY1PiB1cGRhdGVjb21taXRzCisgICAgYmluZCAuIDxTaGlmdC1GNT4gcmVsb2FkY29tbWl0cworICAgIGJpbmQgLiA8RjI+IHNob3dyZWZzCisgICAgYmluZCAuIDxTaGlmdC1GND4ge25ld3ZpZXcgMH0KKyAgICBjYXRjaCB7IGJpbmQgLiA8U2hpZnQtS2V5LVhGODZfU3dpdGNoX1ZUXzQ+IHtuZXd2aWV3IDB9IH0KKyAgICBiaW5kIC4gPEY0PiBlZGl0X29yX25ld3ZpZXcKKyAgICBiaW5kIC4gPCRNMUItcT4gZG9xdWl0CisgICAgYmluZCAuIDwkTTFCLWY+IHtkb2ZpbmQgMSAxfQorICAgIGJpbmQgLiA8JE0xQi1nPiB7ZG9maW5kIDEgMH0KKyAgICBiaW5kIC4gPCRNMUItcj4gZG9zZWFyY2hiYWNrCisgICAgYmluZCAuIDwkTTFCLXM+IGRvc2VhcmNoCisgICAgYmluZCAuIDwkTTFCLWVxdWFsPiB7aW5jcmZvbnQgMX0KKyAgICBiaW5kIC4gPCRNMUItcGx1cz4ge2luY3Jmb250IDF9CisgICAgYmluZCAuIDwkTTFCLUtQX0FkZD4ge2luY3Jmb250IDF9CisgICAgYmluZCAuIDwkTTFCLW1pbnVzPiB7aW5jcmZvbnQgLTF9CisgICAgYmluZCAuIDwkTTFCLUtQX1N1YnRyYWN0PiB7aW5jcmZvbnQgLTF9CisgICAgd20gcHJvdG9jb2wgLiBXTV9ERUxFVEVfV0lORE9XIGRvcXVpdAorICAgIGJpbmQgLiA8RGVzdHJveT4ge3N0b3BfYmFja2VuZHN9CisgICAgYmluZCAuIDxCdXR0b24tMT4gImNsaWNrICVXIgorICAgIGJpbmQgJGZzdHJpbmcgPEtleS1SZXR1cm4+IHtkb2ZpbmQgMSAxfQorICAgIGJpbmQgJHNoYTFlbnRyeSA8S2V5LVJldHVybj4ge2dvdG9jb21taXQ7IGJyZWFrfQorICAgIGJpbmQgJHNoYTFlbnRyeSA8PFBhc3RlU2VsZWN0aW9uPj4gY2xlYXJzaGExCisgICAgYmluZCAkY2ZsaXN0IDwxPiB7c2VsX2ZsaXN0ICVXICV4ICV5OyBicmVha30KKyAgICBiaW5kICRjZmxpc3QgPEIxLU1vdGlvbj4ge3NlbF9mbGlzdCAlVyAleCAleTsgYnJlYWt9CisgICAgYmluZCAkY2ZsaXN0IDxCdXR0b25SZWxlYXNlLTE+IHt0cmVlY2xpY2sgJVcgJXggJXl9CisgICAgZ2xvYmFsIGN0eGJ1dAorICAgIGJpbmQgJGNmbGlzdCAkY3R4YnV0IHtwb3BfZmxpc3RfbWVudSAlVyAlWCAlWSAleCAleX0KKyAgICBiaW5kICRjdGV4dCAkY3R4YnV0IHtwb3BfZGlmZl9tZW51ICVXICVYICVZICV4ICV5fQorICAgIGJpbmQgJGN0ZXh0IDxCdXR0b24tMT4ge2ZvY3VzICVXfQorCisgICAgc2V0IG1haW5jdXJzb3IgWy4gY2dldCAtY3Vyc29yXQorICAgIHNldCB0ZXh0Y3Vyc29yIFskY3RleHQgY2dldCAtY3Vyc29yXQorICAgIHNldCBjdXJ0ZXh0Y3Vyc29yICR0ZXh0Y3Vyc29yCisKKyAgICBzZXQgcm93Y3R4bWVudSAucm93Y3R4bWVudQorICAgIG1ha2VtZW51ICRyb3djdHhtZW51IHsKKwl7bWMgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIgY29tbWFuZCB7ZGlmZnZzc2VsIDB9fQorCXttYyAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIiBjb21tYW5kIHtkaWZmdnNzZWwgMX19CisJe21jICJNYWtlIHBhdGNoIiBjb21tYW5kIG1rcGF0Y2h9CisJe21jICJDcmVhdGUgdGFnIiBjb21tYW5kIG1rdGFnfQorCXttYyAiV3JpdGUgY29tbWl0IHRvIGZpbGUiIGNvbW1hbmQgd3JpdGVjb21taXR9CisJe21jICJDcmVhdGUgbmV3IGJyYW5jaCIgY29tbWFuZCBta2JyYW5jaH0KKwl7bWMgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IiBjb21tYW5kIGNoZXJyeXBpY2t9CisJe21jICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIiBjb21tYW5kIHJlc2V0aGVhZH0KKwl7bWMgIk1hcmsgdGhpcyBjb21taXQiIGNvbW1hbmQgbWFya2hlcmV9CisJe21jICJSZXR1cm4gdG8gbWFyayIgY29tbWFuZCBnb3RvbWFya30KKwl7bWMgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIiBjb21tYW5kIGZpbmRfY29tbW9uX2Rlc2N9CisJe21jICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIgY29tbWFuZCBjb21wYXJlX2NvbW1pdHN9CisJe21jICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIgY29tbWFuZCB7ZGlmZnZzbWFyayAwfX0KKwl7bWMgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIiBjb21tYW5kIHtkaWZmdnNtYXJrIDF9fQorICAgIH0KKyAgICAkcm93Y3R4bWVudSBjb25maWd1cmUgLXRlYXJvZmYgMAorCisgICAgc2V0IGZha2Vyb3dtZW51IC5mYWtlcm93bWVudQorICAgIG1ha2VtZW51ICRmYWtlcm93bWVudSB7CisJe21jICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiIGNvbW1hbmQge2RpZmZ2c3NlbCAwfX0KKwl7bWMgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIgY29tbWFuZCB7ZGlmZnZzc2VsIDF9fQorCXttYyAiTWFrZSBwYXRjaCIgY29tbWFuZCBta3BhdGNofQorCXttYyAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiIGNvbW1hbmQge2RpZmZ2c21hcmsgMH19CisJe21jICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIgY29tbWFuZCB7ZGlmZnZzbWFyayAxfX0KKyAgICB9CisgICAgJGZha2Vyb3dtZW51IGNvbmZpZ3VyZSAtdGVhcm9mZiAwCisKKyAgICBzZXQgaGVhZGN0eG1lbnUgLmhlYWRjdHhtZW51CisgICAgbWFrZW1lbnUgJGhlYWRjdHhtZW51IHsKKwl7bWMgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIgY29tbWFuZCBjb2JyYW5jaH0KKwl7bWMgIlJlbW92ZSB0aGlzIGJyYW5jaCIgY29tbWFuZCBybWJyYW5jaH0KKyAgICB9CisgICAgJGhlYWRjdHhtZW51IGNvbmZpZ3VyZSAtdGVhcm9mZiAwCisKKyAgICBnbG9iYWwgZmxpc3RfbWVudQorICAgIHNldCBmbGlzdF9tZW51IC5mbGlzdGN0eG1lbnUKKyAgICBtYWtlbWVudSAkZmxpc3RfbWVudSB7CisJe21jICJIaWdobGlnaHQgdGhpcyB0b28iIGNvbW1hbmQge2ZsaXN0X2hsIDB9fQorCXttYyAiSGlnaGxpZ2h0IHRoaXMgb25seSIgY29tbWFuZCB7Zmxpc3RfaGwgMX19CisJe21jICJFeHRlcm5hbCBkaWZmIiBjb21tYW5kIHtleHRlcm5hbF9kaWZmfX0KKwl7bWMgIkJsYW1lIHBhcmVudCBjb21taXQiIGNvbW1hbmQge2V4dGVybmFsX2JsYW1lIDF9fQorICAgIH0KKyAgICAkZmxpc3RfbWVudSBjb25maWd1cmUgLXRlYXJvZmYgMAorCisgICAgZ2xvYmFsIGRpZmZfbWVudQorICAgIHNldCBkaWZmX21lbnUgLmRpZmZjdHhtZW51CisgICAgbWFrZW1lbnUgJGRpZmZfbWVudSB7CisJe21jICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiIGNvbW1hbmQgc2hvd19saW5lX3NvdXJjZX0KKwl7bWMgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIgY29tbWFuZCB7ZXh0ZXJuYWxfYmxhbWVfZGlmZn19CisgICAgfQorICAgICRkaWZmX21lbnUgY29uZmlndXJlIC10ZWFyb2ZmIDAKK30KKworIyBXaW5kb3dzIHNlbmRzIGFsbCBtb3VzZSB3aGVlbCBldmVudHMgdG8gdGhlIGN1cnJlbnQgZm9jdXNlZCB3aW5kb3csIG5vdAorIyB0aGUgb25lIHdoZXJlIHRoZSBtb3VzZSBob3ZlcnMsIHNvIGJpbmQgdGhvc2UgZXZlbnRzIGhlcmUgYW5kIHJlZGlyZWN0CisjIHRvIHRoZSBjb3JyZWN0IHdpbmRvdworcHJvYyB3aW5kb3dzX21vdXNld2hlZWxfcmVkaXJlY3RvciB7VyBYIFkgRH0geworICAgIGdsb2JhbCBjYW52IGNhbnYyIGNhbnYzCisgICAgc2V0IHcgW3dpbmZvIGNvbnRhaW5pbmcgLWRpc3BsYXlvZiAkVyAkWCAkWV0KKyAgICBpZiB7JHcgbmUgIiJ9IHsKKwlzZXQgdSBbZXhwciB7JEQgPCAwID8gNSA6IC01fV0KKwlpZiB7JHcgPT0gJGNhbnYgfHwgJHcgPT0gJGNhbnYyIHx8ICR3ID09ICRjYW52M30geworCSAgICBhbGxjYW52cyB5dmlldyBzY3JvbGwgJHUgdW5pdHMKKwl9IGVsc2UgeworCSAgICBjYXRjaCB7CisJCSR3IHl2aWV3IHNjcm9sbCAkdSB1bml0cworCSAgICB9CisJfQorICAgIH0KK30KKworIyBVcGRhdGUgcm93IG51bWJlciBsYWJlbCB3aGVuIHNlbGVjdGVkbGluZSBjaGFuZ2VzCitwcm9jIHNlbGVjdGVkbGluZV9jaGFuZ2Uge24xIG4yIG9wfSB7CisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSByb3dudW1zZWwKKworICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSB7CisJc2V0IHJvd251bXNlbCB7fQorICAgIH0gZWxzZSB7CisJc2V0IHJvd251bXNlbCBbZXhwciB7JHNlbGVjdGVkbGluZSArIDF9XQorICAgIH0KK30KKworIyBtb3VzZS0yIG1ha2VzIGFsbCB3aW5kb3dzIHNjYW4gdmVydGljYWxseSwgYnV0IG9ubHkgdGhlIG9uZQorIyB0aGUgY3Vyc29yIGlzIGluIHNjYW5zIGhvcml6b250YWxseQorcHJvYyBjYW52c2NhbiB7b3AgdyB4IHl9IHsKKyAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MworICAgIGZvcmVhY2ggYyBbbGlzdCAkY2FudiAkY2FudjIgJGNhbnYzXSB7CisJaWYgeyRjID09ICR3fSB7CisJICAgICRjIHNjYW4gJG9wICR4ICR5CisJfSBlbHNlIHsKKwkgICAgJGMgc2NhbiAkb3AgMCAkeQorCX0KKyAgICB9Cit9CisKK3Byb2Mgc2Nyb2xsY2FudiB7Y3Njcm9sbCBmMCBmMX0geworICAgICRjc2Nyb2xsIHNldCAkZjAgJGYxCisgICAgZHJhd3Zpc2libGUKKyAgICBmbHVzaGhpZ2hsaWdodHMKK30KKworIyB3aGVuIHdlIG1ha2UgYSBrZXkgYmluZGluZyBmb3IgdGhlIHRvcGxldmVsLCBtYWtlIHN1cmUKKyMgaXQgZG9lc24ndCBnZXQgdHJpZ2dlcmVkIHdoZW4gdGhhdCBrZXkgaXMgcHJlc3NlZCBpbiB0aGUKKyMgZmluZCBzdHJpbmcgZW50cnkgd2lkZ2V0LgorcHJvYyBiaW5ka2V5IHtldiBzY3JpcHR9IHsKKyAgICBnbG9iYWwgZW50cmllcworICAgIGJpbmQgLiAkZXYgJHNjcmlwdAorICAgIHNldCBlc2NyaXB0IFtiaW5kIEVudHJ5ICRldl0KKyAgICBpZiB7JGVzY3JpcHQgPT0ge319IHsKKwlzZXQgZXNjcmlwdCBbYmluZCBFbnRyeSA8S2V5Pl0KKyAgICB9CisgICAgZm9yZWFjaCBlICRlbnRyaWVzIHsKKwliaW5kICRlICRldiAiJGVzY3JpcHQ7IGJyZWFrIgorICAgIH0KK30KKworIyBzZXQgdGhlIGZvY3VzIGJhY2sgdG8gdGhlIHRvcGxldmVsIGZvciBhbnkgY2xpY2sgb3V0c2lkZQorIyB0aGUgZW50cnkgd2lkZ2V0cworcHJvYyBjbGljayB7d30geworICAgIGdsb2JhbCBjdGV4dCBlbnRyaWVzCisgICAgZm9yZWFjaCBlIFtjb25jYXQgJGVudHJpZXMgJGN0ZXh0XSB7CisJaWYgeyR3ID09ICRlfSByZXR1cm4KKyAgICB9CisgICAgZm9jdXMgLgorfQorCisjIEFkanVzdCB0aGUgcHJvZ3Jlc3MgYmFyIGZvciBhIGNoYW5nZSBpbiByZXF1ZXN0ZWQgZXh0ZW50IG9yIGNhbnZhcyBzaXplCitwcm9jIGFkanVzdHByb2dyZXNzIHt9IHsKKyAgICBnbG9iYWwgcHJvZ3Jlc3NjYW52IHByb2dyZXNzaXRlbSBwcm9ncmVzc2Nvb3JkcworICAgIGdsb2JhbCBmcHJvZ2l0ZW0gZnByb2djb29yZCBsYXN0cHJvZ3VwZGF0ZSBwcm9ndXBkYXRlcGVuZGluZworICAgIGdsb2JhbCBycHJvZ2l0ZW0gcnByb2djb29yZCB1c2VfdHRrCisKKyAgICBpZiB7JHVzZV90dGt9IHsKKwkkcHJvZ3Jlc3NjYW52IGNvbmZpZ3VyZSAtdmFsdWUgW2V4cHIge2ludCgkZnByb2djb29yZCAqIDEwMCl9XQorCXJldHVybgorICAgIH0KKworICAgIHNldCB3IFtleHByIHtbd2luZm8gd2lkdGggJHByb2dyZXNzY2Fudl0gLSA0fV0KKyAgICBzZXQgeDAgW2V4cHIgeyR3ICogW2xpbmRleCAkcHJvZ3Jlc3Njb29yZHMgMF19XQorICAgIHNldCB4MSBbZXhwciB7JHcgKiBbbGluZGV4ICRwcm9ncmVzc2Nvb3JkcyAxXX1dCisgICAgc2V0IGggW3dpbmZvIGhlaWdodCAkcHJvZ3Jlc3NjYW52XQorICAgICRwcm9ncmVzc2NhbnYgY29vcmRzICRwcm9ncmVzc2l0ZW0gJHgwIDAgJHgxICRoCisgICAgJHByb2dyZXNzY2FudiBjb29yZHMgJGZwcm9naXRlbSAwIDAgW2V4cHIgeyR3ICogJGZwcm9nY29vcmR9XSAkaAorICAgICRwcm9ncmVzc2NhbnYgY29vcmRzICRycHJvZ2l0ZW0gMCAwIFtleHByIHskdyAqICRycHJvZ2Nvb3JkfV0gJGgKKyAgICBzZXQgbm93IFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBpZiB7JG5vdyA+PSAkbGFzdHByb2d1cGRhdGUgKyAxMDB9IHsKKwlzZXQgcHJvZ3VwZGF0ZXBlbmRpbmcgMAorCXVwZGF0ZQorICAgIH0gZWxzZWlmIHshJHByb2d1cGRhdGVwZW5kaW5nfSB7CisJc2V0IHByb2d1cGRhdGVwZW5kaW5nIDEKKwlhZnRlciBbZXhwciB7JGxhc3Rwcm9ndXBkYXRlICsgMTAwIC0gJG5vd31dIGRvcHJvZ3VwZGF0ZQorICAgIH0KK30KKworcHJvYyBkb3Byb2d1cGRhdGUge30geworICAgIGdsb2JhbCBsYXN0cHJvZ3VwZGF0ZSBwcm9ndXBkYXRlcGVuZGluZworCisgICAgaWYgeyRwcm9ndXBkYXRlcGVuZGluZ30geworCXNldCBwcm9ndXBkYXRlcGVuZGluZyAwCisJc2V0IGxhc3Rwcm9ndXBkYXRlIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKwl1cGRhdGUKKyAgICB9Cit9CisKK3Byb2Mgc2F2ZXN0dWZmIHt3fSB7CisgICAgZ2xvYmFsIGNhbnYgY2FudjIgY2FudjMgbWFpbmZvbnQgdGV4dGZvbnQgdWlmb250IHRhYnN0b3AKKyAgICBnbG9iYWwgc3R1ZmZzYXZlZCBmaW5kbWVyZ2VmaWxlcyBtYXhncmFwaHBjdAorICAgIGdsb2JhbCBtYXh3aWR0aCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcworICAgIGdsb2JhbCB2aWV3bmFtZSB2aWV3ZmlsZXMgdmlld2FyZ3Mgdmlld2FyZ3NjbWQgdmlld3Blcm0gbmV4dHZpZXdudW0KKyAgICBnbG9iYWwgY21pdG1vZGUgd3JhcGNvbW1lbnQgZGF0ZXRpbWVmb3JtYXQgbGltaXRkaWZmcworICAgIGdsb2JhbCBjb2xvcnMgdWljb2xvciBiZ2NvbG9yIGZnY29sb3IgZGlmZmNvbG9ycyBkaWZmY29udGV4dCBzZWxlY3RiZ2NvbG9yCisgICAgZ2xvYmFsIGF1dG9zZWxlY3QgYXV0b3NlbGxlbiBleHRkaWZmdG9vbCBwZXJmaWxlX2F0dHJzIG1hcmtiZ2NvbG9yIHVzZV90dGsKKyAgICBnbG9iYWwgaGlkZXJlbW90ZXMgd2FudF90dGsKKworICAgIGlmIHskc3R1ZmZzYXZlZH0gcmV0dXJuCisgICAgaWYgeyFbd2luZm8gdmlld2FibGUgLl19IHJldHVybgorICAgIGNhdGNoIHsKKwlpZiB7W2ZpbGUgZXhpc3RzIH4vLmdpdGstbmV3XX0ge2ZpbGUgZGVsZXRlIC1mb3JjZSB+Ly5naXRrLW5ld30KKwlzZXQgZiBbb3BlbiAifi8uZ2l0ay1uZXciIHddCisJaWYgeyQ6OnRjbF9wbGF0Zm9ybShwbGF0Zm9ybSkgZXEge3dpbmRvd3N9fSB7CisJICAgIGZpbGUgYXR0cmlidXRlcyAifi8uZ2l0ay1uZXciIC1oaWRkZW4gdHJ1ZQorCX0KKwlwdXRzICRmIFtsaXN0IHNldCBtYWluZm9udCAkbWFpbmZvbnRdCisJcHV0cyAkZiBbbGlzdCBzZXQgdGV4dGZvbnQgJHRleHRmb250XQorCXB1dHMgJGYgW2xpc3Qgc2V0IHVpZm9udCAkdWlmb250XQorCXB1dHMgJGYgW2xpc3Qgc2V0IHRhYnN0b3AgJHRhYnN0b3BdCisJcHV0cyAkZiBbbGlzdCBzZXQgZmluZG1lcmdlZmlsZXMgJGZpbmRtZXJnZWZpbGVzXQorCXB1dHMgJGYgW2xpc3Qgc2V0IG1heGdyYXBocGN0ICRtYXhncmFwaHBjdF0KKwlwdXRzICRmIFtsaXN0IHNldCBtYXh3aWR0aCAkbWF4d2lkdGhdCisJcHV0cyAkZiBbbGlzdCBzZXQgY21pdG1vZGUgJGNtaXRtb2RlXQorCXB1dHMgJGYgW2xpc3Qgc2V0IHdyYXBjb21tZW50ICR3cmFwY29tbWVudF0KKwlwdXRzICRmIFtsaXN0IHNldCBhdXRvc2VsZWN0ICRhdXRvc2VsZWN0XQorCXB1dHMgJGYgW2xpc3Qgc2V0IGF1dG9zZWxsZW4gJGF1dG9zZWxsZW5dCisJcHV0cyAkZiBbbGlzdCBzZXQgc2hvd25lYXJ0YWdzICRzaG93bmVhcnRhZ3NdCisJcHV0cyAkZiBbbGlzdCBzZXQgaGlkZXJlbW90ZXMgJGhpZGVyZW1vdGVzXQorCXB1dHMgJGYgW2xpc3Qgc2V0IHNob3dsb2NhbGNoYW5nZXMgJHNob3dsb2NhbGNoYW5nZXNdCisJcHV0cyAkZiBbbGlzdCBzZXQgZGF0ZXRpbWVmb3JtYXQgJGRhdGV0aW1lZm9ybWF0XQorCXB1dHMgJGYgW2xpc3Qgc2V0IGxpbWl0ZGlmZnMgJGxpbWl0ZGlmZnNdCisJcHV0cyAkZiBbbGlzdCBzZXQgdWljb2xvciAkdWljb2xvcl0KKwlwdXRzICRmIFtsaXN0IHNldCB3YW50X3R0ayAkd2FudF90dGtdCisJcHV0cyAkZiBbbGlzdCBzZXQgYmdjb2xvciAkYmdjb2xvcl0KKwlwdXRzICRmIFtsaXN0IHNldCBmZ2NvbG9yICRmZ2NvbG9yXQorCXB1dHMgJGYgW2xpc3Qgc2V0IGNvbG9ycyAkY29sb3JzXQorCXB1dHMgJGYgW2xpc3Qgc2V0IGRpZmZjb2xvcnMgJGRpZmZjb2xvcnNdCisJcHV0cyAkZiBbbGlzdCBzZXQgbWFya2JnY29sb3IgJG1hcmtiZ2NvbG9yXQorCXB1dHMgJGYgW2xpc3Qgc2V0IGRpZmZjb250ZXh0ICRkaWZmY29udGV4dF0KKwlwdXRzICRmIFtsaXN0IHNldCBzZWxlY3RiZ2NvbG9yICRzZWxlY3RiZ2NvbG9yXQorCXB1dHMgJGYgW2xpc3Qgc2V0IGV4dGRpZmZ0b29sICRleHRkaWZmdG9vbF0KKwlwdXRzICRmIFtsaXN0IHNldCBwZXJmaWxlX2F0dHJzICRwZXJmaWxlX2F0dHJzXQorCisJcHV0cyAkZiAic2V0IGdlb21ldHJ5KG1haW4pIFt3bSBnZW9tZXRyeSAuXSIKKwlwdXRzICRmICJzZXQgZ2VvbWV0cnkoc3RhdGUpIFt3bSBzdGF0ZSAuXSIKKwlwdXRzICRmICJzZXQgZ2VvbWV0cnkodG9wd2lkdGgpIFt3aW5mbyB3aWR0aCAudGZdIgorCXB1dHMgJGYgInNldCBnZW9tZXRyeSh0b3BoZWlnaHQpIFt3aW5mbyBoZWlnaHQgLnRmXSIKKwlpZiB7JHVzZV90dGt9IHsKKwkgICAgcHV0cyAkZiAic2V0IGdlb21ldHJ5KHB3c2FzaDApIFwiWy50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNocG9zIDBdIDFcIiIKKwkgICAgcHV0cyAkZiAic2V0IGdlb21ldHJ5KHB3c2FzaDEpIFwiWy50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNocG9zIDFdIDFcIiIKKwl9IGVsc2UgeworCSAgICBwdXRzICRmICJzZXQgZ2VvbWV0cnkocHdzYXNoMCkgXCJbLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2ggY29vcmQgMF1cIiIKKwkgICAgcHV0cyAkZiAic2V0IGdlb21ldHJ5KHB3c2FzaDEpIFwiWy50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNoIGNvb3JkIDFdXCIiCisJfQorCXB1dHMgJGYgInNldCBnZW9tZXRyeShib3R3aWR0aCkgW3dpbmZvIHdpZHRoIC5ibGVmdF0iCisJcHV0cyAkZiAic2V0IGdlb21ldHJ5KGJvdGhlaWdodCkgW3dpbmZvIGhlaWdodCAuYmxlZnRdIgorCisJcHV0cyAtbm9uZXdsaW5lICRmICJzZXQgcGVybXZpZXdzIHsiCisJZm9yIHtzZXQgdiAwfSB7JHYgPCAkbmV4dHZpZXdudW19IHtpbmNyIHZ9IHsKKwkgICAgaWYgeyR2aWV3cGVybSgkdil9IHsKKwkJcHV0cyAkZiAie1tsaXN0ICR2aWV3bmFtZSgkdikgJHZpZXdmaWxlcygkdikgJHZpZXdhcmdzKCR2KSAkdmlld2FyZ3NjbWQoJHYpXX0iCisJICAgIH0KKwl9CisJcHV0cyAkZiAifSIKKwljbG9zZSAkZgorCWZpbGUgcmVuYW1lIC1mb3JjZSAifi8uZ2l0ay1uZXciICJ+Ly5naXRrIgorICAgIH0KKyAgICBzZXQgc3R1ZmZzYXZlZCAxCit9CisKK3Byb2MgcmVzaXplY2xpc3RwYW5lcyB7d2luIHd9IHsKKyAgICBnbG9iYWwgb2xkd2lkdGggdXNlX3R0aworICAgIGlmIHtbaW5mbyBleGlzdHMgb2xkd2lkdGgoJHdpbildfSB7CisJaWYgeyR1c2VfdHRrfSB7CisJICAgIHNldCBzMCBbJHdpbiBzYXNocG9zIDBdCisJICAgIHNldCBzMSBbJHdpbiBzYXNocG9zIDFdCisJfSBlbHNlIHsKKwkgICAgc2V0IHMwIFskd2luIHNhc2ggY29vcmQgMF0KKwkgICAgc2V0IHMxIFskd2luIHNhc2ggY29vcmQgMV0KKwl9CisJaWYgeyR3IDwgNjB9IHsKKwkgICAgc2V0IHNhc2gwIFtleHByIHtpbnQoJHcvMiAtIDIpfV0KKwkgICAgc2V0IHNhc2gxIFtleHByIHtpbnQoJHcqNS82IC0gMil9XQorCX0gZWxzZSB7CisJICAgIHNldCBmYWN0b3IgW2V4cHIgezEuMCAqICR3IC8gJG9sZHdpZHRoKCR3aW4pfV0KKwkgICAgc2V0IHNhc2gwIFtleHByIHtpbnQoJGZhY3RvciAqIFtsaW5kZXggJHMwIDBdKX1dCisJICAgIHNldCBzYXNoMSBbZXhwciB7aW50KCRmYWN0b3IgKiBbbGluZGV4ICRzMSAwXSl9XQorCSAgICBpZiB7JHNhc2gwIDwgMzB9IHsKKwkJc2V0IHNhc2gwIDMwCisJICAgIH0KKwkgICAgaWYgeyRzYXNoMSA8ICRzYXNoMCArIDIwfSB7CisJCXNldCBzYXNoMSBbZXhwciB7JHNhc2gwICsgMjB9XQorCSAgICB9CisJICAgIGlmIHskc2FzaDEgPiAkdyAtIDEwfSB7CisJCXNldCBzYXNoMSBbZXhwciB7JHcgLSAxMH1dCisJCWlmIHskc2FzaDAgPiAkc2FzaDEgLSAyMH0geworCQkgICAgc2V0IHNhc2gwIFtleHByIHskc2FzaDEgLSAyMH1dCisJCX0KKwkgICAgfQorCX0KKwlpZiB7JHVzZV90dGt9IHsKKwkgICAgJHdpbiBzYXNocG9zIDAgJHNhc2gwCisJICAgICR3aW4gc2FzaHBvcyAxICRzYXNoMQorCX0gZWxzZSB7CisJICAgICR3aW4gc2FzaCBwbGFjZSAwICRzYXNoMCBbbGluZGV4ICRzMCAxXQorCSAgICAkd2luIHNhc2ggcGxhY2UgMSAkc2FzaDEgW2xpbmRleCAkczEgMV0KKwl9CisgICAgfQorICAgIHNldCBvbGR3aWR0aCgkd2luKSAkdworfQorCitwcm9jIHJlc2l6ZWNkZXRwYW5lcyB7d2luIHd9IHsKKyAgICBnbG9iYWwgb2xkd2lkdGggdXNlX3R0aworICAgIGlmIHtbaW5mbyBleGlzdHMgb2xkd2lkdGgoJHdpbildfSB7CisJaWYgeyR1c2VfdHRrfSB7CisJICAgIHNldCBzMCBbJHdpbiBzYXNocG9zIDBdCisJfSBlbHNlIHsKKwkgICAgc2V0IHMwIFskd2luIHNhc2ggY29vcmQgMF0KKwl9CisJaWYgeyR3IDwgNjB9IHsKKwkgICAgc2V0IHNhc2gwIFtleHByIHtpbnQoJHcqMy80IC0gMil9XQorCX0gZWxzZSB7CisJICAgIHNldCBmYWN0b3IgW2V4cHIgezEuMCAqICR3IC8gJG9sZHdpZHRoKCR3aW4pfV0KKwkgICAgc2V0IHNhc2gwIFtleHByIHtpbnQoJGZhY3RvciAqIFtsaW5kZXggJHMwIDBdKX1dCisJICAgIGlmIHskc2FzaDAgPCA0NX0geworCQlzZXQgc2FzaDAgNDUKKwkgICAgfQorCSAgICBpZiB7JHNhc2gwID4gJHcgLSAxNX0geworCQlzZXQgc2FzaDAgW2V4cHIgeyR3IC0gMTV9XQorCSAgICB9CisJfQorCWlmIHskdXNlX3R0a30geworCSAgICAkd2luIHNhc2hwb3MgMCAkc2FzaDAKKwl9IGVsc2UgeworCSAgICAkd2luIHNhc2ggcGxhY2UgMCAkc2FzaDAgW2xpbmRleCAkczAgMV0KKwl9CisgICAgfQorICAgIHNldCBvbGR3aWR0aCgkd2luKSAkdworfQorCitwcm9jIGFsbGNhbnZzIGFyZ3MgeworICAgIGdsb2JhbCBjYW52IGNhbnYyIGNhbnYzCisgICAgZXZhbCAkY2FudiAkYXJncworICAgIGV2YWwgJGNhbnYyICRhcmdzCisgICAgZXZhbCAkY2FudjMgJGFyZ3MKK30KKworcHJvYyBiaW5kYWxsIHtldmVudCBhY3Rpb259IHsKKyAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MworICAgIGJpbmQgJGNhbnYgJGV2ZW50ICRhY3Rpb24KKyAgICBiaW5kICRjYW52MiAkZXZlbnQgJGFjdGlvbgorICAgIGJpbmQgJGNhbnYzICRldmVudCAkYWN0aW9uCit9CisKK3Byb2MgYWJvdXQge30geworICAgIGdsb2JhbCB1aWZvbnQgTlMKKyAgICBzZXQgdyAuYWJvdXQKKyAgICBpZiB7W3dpbmZvIGV4aXN0cyAkd119IHsKKwlyYWlzZSAkdworCXJldHVybgorICAgIH0KKyAgICB0dGtfdG9wbGV2ZWwgJHcKKyAgICB3bSB0aXRsZSAkdyBbbWMgIkFib3V0IGdpdGsiXQorICAgIG1ha2VfdHJhbnNpZW50ICR3IC4KKyAgICBtZXNzYWdlICR3Lm0gLXRleHQgW21jICIKK0dpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdAorCitDb3B5cmlnaHQgXHUwMGE5IDIwMDUtMjAxMSBQYXVsIE1hY2tlcnJhcworCitVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIl0gXAorCSAgICAtanVzdGlmeSBjZW50ZXIgLWFzcGVjdCA0MDAgLWJvcmRlciAyIC1iZyB3aGl0ZSAtcmVsaWVmIGdyb292ZQorICAgIHBhY2sgJHcubSAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeCAyIC1wYWR5IDIKKyAgICAke05TfTo6YnV0dG9uICR3Lm9rIC10ZXh0IFttYyAiQ2xvc2UiXSAtY29tbWFuZCAiZGVzdHJveSAkdyIgLWRlZmF1bHQgYWN0aXZlCisgICAgcGFjayAkdy5vayAtc2lkZSBib3R0b20KKyAgICBiaW5kICR3IDxWaXNpYmlsaXR5PiAiZm9jdXMgJHcub2siCisgICAgYmluZCAkdyA8S2V5LUVzY2FwZT4gImRlc3Ryb3kgJHciCisgICAgYmluZCAkdyA8S2V5LVJldHVybj4gImRlc3Ryb3kgJHciCisgICAgdGs6OlBsYWNlV2luZG93ICR3IHdpZGdldCAuCit9CisKK3Byb2Mga2V5cyB7fSB7CisgICAgZ2xvYmFsIE5TCisgICAgc2V0IHcgLmtleXMKKyAgICBpZiB7W3dpbmZvIGV4aXN0cyAkd119IHsKKwlyYWlzZSAkdworCXJldHVybgorICAgIH0KKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEge2FxdWF9fSB7CisJc2V0IE0xVCBDbWQKKyAgICB9IGVsc2UgeworCXNldCBNMVQgQ3RybAorICAgIH0KKyAgICB0dGtfdG9wbGV2ZWwgJHcKKyAgICB3bSB0aXRsZSAkdyBbbWMgIkdpdGsga2V5IGJpbmRpbmdzIl0KKyAgICBtYWtlX3RyYW5zaWVudCAkdyAuCisgICAgbWVzc2FnZSAkdy5tIC10ZXh0ICIKK1ttYyAiR2l0ayBrZXkgYmluZGluZ3M6Il0KKworW21jICI8JXMtUT4JCVF1aXQiICRNMVRdCitbbWMgIjwlcy1XPgkJQ2xvc2Ugd2luZG93IiAkTTFUXQorW21jICI8SG9tZT4JCU1vdmUgdG8gZmlyc3QgY29tbWl0Il0KK1ttYyAiPEVuZD4JCU1vdmUgdG8gbGFzdCBjb21taXQiXQorW21jICI8VXA+LCBwLCBrCU1vdmUgdXAgb25lIGNvbW1pdCJdCitbbWMgIjxEb3duPiwgbiwgaglNb3ZlIGRvd24gb25lIGNvbW1pdCJdCitbbWMgIjxMZWZ0PiwgeiwgaAlHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCJdCitbbWMgIjxSaWdodD4sIHgsIGwJR28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiXQorW21jICI8UGFnZVVwPglNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0Il0KK1ttYyAiPFBhZ2VEb3duPglNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiXQorW21jICI8JXMtSG9tZT4JU2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIgJE0xVF0KK1ttYyAiPCVzLUVuZD4JU2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIgJE0xVF0KK1ttYyAiPCVzLVVwPglTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiICRNMVRdCitbbWMgIjwlcy1Eb3duPglTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIgJE0xVF0KK1ttYyAiPCVzLVBhZ2VVcD4JU2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIiAkTTFUXQorW21jICI8JXMtUGFnZURvd24+CVNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIiAkTTFUXQorW21jICI8U2hpZnQtVXA+CUZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSJdCitbbWMgIjxTaGlmdC1Eb3duPglGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiXQorW21jICI8RGVsZXRlPiwgYglTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIl0KK1ttYyAiPEJhY2tzcGFjZT4JU2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSJdCitbbWMgIjxTcGFjZT4JCVNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSJdCitbbWMgInUJCVNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiXQorW21jICJkCQlTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiXQorW21jICI8JXMtRj4JCUZpbmQiICRNMVRdCitbbWMgIjwlcy1HPgkJTW92ZSB0byBuZXh0IGZpbmQgaGl0IiAkTTFUXQorW21jICI8UmV0dXJuPglNb3ZlIHRvIG5leHQgZmluZCBoaXQiXQorW21jICIvCQlGb2N1cyB0aGUgc2VhcmNoIGJveCJdCitbbWMgIj8JCU1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiXQorW21jICJmCQlTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSJdCitbbWMgIjwlcy1TPgkJU2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciICRNMVRdCitbbWMgIjwlcy1SPgkJU2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IiAkTTFUXQorW21jICI8JXMtS1ArPglJbmNyZWFzZSBmb250IHNpemUiICRNMVRdCitbbWMgIjwlcy1wbHVzPglJbmNyZWFzZSBmb250IHNpemUiICRNMVRdCitbbWMgIjwlcy1LUC0+CURlY3JlYXNlIGZvbnQgc2l6ZSIgJE0xVF0KK1ttYyAiPCVzLW1pbnVzPglEZWNyZWFzZSBmb250IHNpemUiICRNMVRdCitbbWMgIjxGNT4JCVVwZGF0ZSJdCisiIFwKKwkgICAgLWp1c3RpZnkgbGVmdCAtYmcgd2hpdGUgLWJvcmRlciAyIC1yZWxpZWYgZ3Jvb3ZlCisgICAgcGFjayAkdy5tIC1zaWRlIHRvcCAtZmlsbCBib3RoIC1wYWR4IDIgLXBhZHkgMgorICAgICR7TlN9OjpidXR0b24gJHcub2sgLXRleHQgW21jICJDbG9zZSJdIC1jb21tYW5kICJkZXN0cm95ICR3IiAtZGVmYXVsdCBhY3RpdmUKKyAgICBiaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQorICAgIHBhY2sgJHcub2sgLXNpZGUgYm90dG9tCisgICAgYmluZCAkdyA8VmlzaWJpbGl0eT4gImZvY3VzICR3Lm9rIgorICAgIGJpbmQgJHcgPEtleS1Fc2NhcGU+ICJkZXN0cm95ICR3IgorICAgIGJpbmQgJHcgPEtleS1SZXR1cm4+ICJkZXN0cm95ICR3IgorfQorCisjIFByb2NlZHVyZXMgZm9yIG1hbmlwdWxhdGluZyB0aGUgZmlsZSBsaXN0IHdpbmRvdyBhdCB0aGUKKyMgYm90dG9tIHJpZ2h0IG9mIHRoZSBvdmVyYWxsIHdpbmRvdy4KKworcHJvYyB0cmVldmlldyB7dyBsIG9wZW5sZXZzfSB7CisgICAgZ2xvYmFsIHRyZWVjb250ZW50cyB0cmVlZGlyb3BlbiB0cmVlaGVpZ2h0IHRyZWVwYXJlbnQgdHJlZWluZGV4CisKKyAgICBzZXQgaXggMAorICAgIHNldCB0cmVlaW5kZXgoKSAwCisgICAgc2V0IGxldiAwCisgICAgc2V0IHByZWZpeCB7fQorICAgIHNldCBwcmVmaXhlbmQgLTEKKyAgICBzZXQgcHJlZmVuZHN0YWNrIHt9CisgICAgc2V0IGh0c3RhY2sge30KKyAgICBzZXQgaHQgMAorICAgIHNldCB0cmVlY29udGVudHMoKSB7fQorICAgICR3IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIGZvcmVhY2ggZiAkbCB7CisJd2hpbGUge1tzdHJpbmcgcmFuZ2UgJGYgMCAkcHJlZml4ZW5kXSBuZSAkcHJlZml4fSB7CisJICAgIGlmIHskbGV2IDw9ICRvcGVubGV2c30geworCQkkdyBtYXJrIHNldCBlOiR0cmVlaW5kZXgoJHByZWZpeCkgImVuZCAtMWMiCisJCSR3IG1hcmsgZ3Jhdml0eSBlOiR0cmVlaW5kZXgoJHByZWZpeCkgbGVmdAorCSAgICB9CisJICAgIHNldCB0cmVlaGVpZ2h0KCRwcmVmaXgpICRodAorCSAgICBpbmNyIGh0IFtsaW5kZXggJGh0c3RhY2sgZW5kXQorCSAgICBzZXQgaHRzdGFjayBbbHJlcGxhY2UgJGh0c3RhY2sgZW5kIGVuZF0KKwkgICAgc2V0IHByZWZpeGVuZCBbbGluZGV4ICRwcmVmZW5kc3RhY2sgZW5kXQorCSAgICBzZXQgcHJlZmVuZHN0YWNrIFtscmVwbGFjZSAkcHJlZmVuZHN0YWNrIGVuZCBlbmRdCisJICAgIHNldCBwcmVmaXggW3N0cmluZyByYW5nZSAkcHJlZml4IDAgJHByZWZpeGVuZF0KKwkgICAgaW5jciBsZXYgLTEKKwl9CisJc2V0IHRhaWwgW3N0cmluZyByYW5nZSAkZiBbZXhwciB7JHByZWZpeGVuZCsxfV0gZW5kXQorCXdoaWxlIHtbc2V0IHNsYXNoIFtzdHJpbmcgZmlyc3QgIi8iICR0YWlsXV0gPj0gMH0geworCSAgICBsYXBwZW5kIGh0c3RhY2sgJGh0CisJICAgIHNldCBodCAwCisJICAgIGxhcHBlbmQgcHJlZmVuZHN0YWNrICRwcmVmaXhlbmQKKwkgICAgaW5jciBwcmVmaXhlbmQgW2V4cHIgeyRzbGFzaCArIDF9XQorCSAgICBzZXQgZCBbc3RyaW5nIHJhbmdlICR0YWlsIDAgJHNsYXNoXQorCSAgICBsYXBwZW5kIHRyZWVjb250ZW50cygkcHJlZml4KSAkZAorCSAgICBzZXQgb2xkcHJlZml4ICRwcmVmaXgKKwkgICAgYXBwZW5kIHByZWZpeCAkZAorCSAgICBzZXQgdHJlZWNvbnRlbnRzKCRwcmVmaXgpIHt9CisJICAgIHNldCB0cmVlaW5kZXgoJHByZWZpeCkgW2luY3IgaXhdCisJICAgIHNldCB0cmVlcGFyZW50KCRwcmVmaXgpICRvbGRwcmVmaXgKKwkgICAgc2V0IHRhaWwgW3N0cmluZyByYW5nZSAkdGFpbCBbZXhwciB7JHNsYXNoKzF9XSBlbmRdCisJICAgIGlmIHskbGV2IDw9ICRvcGVubGV2c30geworCQlzZXQgaHQgMQorCQlzZXQgdHJlZWRpcm9wZW4oJHByZWZpeCkgW2V4cHIgeyRsZXYgPCAkb3BlbmxldnN9XQorCQlzZXQgYm0gW2V4cHIgeyRsZXYgPT0gJG9wZW5sZXZzPyAidHJpLXJ0IjogInRyaS1kbiJ9XQorCQkkdyBtYXJrIHNldCBkOiRpeCAiZW5kIC0xYyIKKwkJJHcgbWFyayBncmF2aXR5IGQ6JGl4IGxlZnQKKwkJc2V0IHN0ciAiXG4iCisJCWZvciB7c2V0IGkgMH0geyRpIDwgJGxldn0ge2luY3IgaX0ge2FwcGVuZCBzdHIgIlx0In0KKwkJJHcgaW5zZXJ0IGVuZCAkc3RyCisJCSR3IGltYWdlIGNyZWF0ZSBlbmQgLWFsaWduIGNlbnRlciAtaW1hZ2UgJGJtIC1wYWR4IDEgXAorCQkgICAgLW5hbWUgYTokaXgKKwkJJHcgaW5zZXJ0IGVuZCAkZCBbaGlnaGxpZ2h0X3RhZyAkcHJlZml4XQorCQkkdyBtYXJrIHNldCBzOiRpeCAiZW5kIC0xYyIKKwkJJHcgbWFyayBncmF2aXR5IHM6JGl4IGxlZnQKKwkgICAgfQorCSAgICBpbmNyIGxldgorCX0KKwlpZiB7JHRhaWwgbmUge319IHsKKwkgICAgaWYgeyRsZXYgPD0gJG9wZW5sZXZzfSB7CisJCWluY3IgaHQKKwkJc2V0IHN0ciAiXG4iCisJCWZvciB7c2V0IGkgMH0geyRpIDwgJGxldn0ge2luY3IgaX0ge2FwcGVuZCBzdHIgIlx0In0KKwkJJHcgaW5zZXJ0IGVuZCAkc3RyCisJCSR3IGluc2VydCBlbmQgJHRhaWwgW2hpZ2hsaWdodF90YWcgJGZdCisJICAgIH0KKwkgICAgbGFwcGVuZCB0cmVlY29udGVudHMoJHByZWZpeCkgJHRhaWwKKwl9CisgICAgfQorICAgIHdoaWxlIHskaHRzdGFjayBuZSB7fX0geworCXNldCB0cmVlaGVpZ2h0KCRwcmVmaXgpICRodAorCWluY3IgaHQgW2xpbmRleCAkaHRzdGFjayBlbmRdCisJc2V0IGh0c3RhY2sgW2xyZXBsYWNlICRodHN0YWNrIGVuZCBlbmRdCisJc2V0IHByZWZpeGVuZCBbbGluZGV4ICRwcmVmZW5kc3RhY2sgZW5kXQorCXNldCBwcmVmZW5kc3RhY2sgW2xyZXBsYWNlICRwcmVmZW5kc3RhY2sgZW5kIGVuZF0KKwlzZXQgcHJlZml4IFtzdHJpbmcgcmFuZ2UgJHByZWZpeCAwICRwcmVmaXhlbmRdCisgICAgfQorICAgICR3IGNvbmYgLXN0YXRlIGRpc2FibGVkCit9CisKK3Byb2MgbGluZXRvZWx0IHtsfSB7CisgICAgZ2xvYmFsIHRyZWVoZWlnaHQgdHJlZWNvbnRlbnRzCisKKyAgICBzZXQgeSAyCisgICAgc2V0IHByZWZpeCB7fQorICAgIHdoaWxlIHsxfSB7CisJZm9yZWFjaCBlICR0cmVlY29udGVudHMoJHByZWZpeCkgeworCSAgICBpZiB7JHkgPT0gJGx9IHsKKwkJcmV0dXJuICIkcHJlZml4JGUiCisJICAgIH0KKwkgICAgc2V0IG4gMQorCSAgICBpZiB7W3N0cmluZyBpbmRleCAkZSBlbmRdIGVxICIvIn0geworCQlzZXQgbiAkdHJlZWhlaWdodCgkcHJlZml4JGUpCisJCWlmIHskeSArICRuID4gJGx9IHsKKwkJICAgIGFwcGVuZCBwcmVmaXggJGUKKwkJICAgIGluY3IgeQorCQkgICAgYnJlYWsKKwkJfQorCSAgICB9CisJICAgIGluY3IgeSAkbgorCX0KKyAgICB9Cit9CisKK3Byb2MgaGlnaGxpZ2h0X3RyZWUge3kgcHJlZml4fSB7CisgICAgZ2xvYmFsIHRyZWVoZWlnaHQgdHJlZWNvbnRlbnRzIGNmbGlzdAorCisgICAgZm9yZWFjaCBlICR0cmVlY29udGVudHMoJHByZWZpeCkgeworCXNldCBwYXRoICRwcmVmaXgkZQorCWlmIHtbaGlnaGxpZ2h0X3RhZyAkcGF0aF0gbmUge319IHsKKwkgICAgJGNmbGlzdCB0YWcgYWRkIGJvbGQgJHkuMCAiJHkuMCBsaW5lZW5kIgorCX0KKwlpbmNyIHkKKwlpZiB7W3N0cmluZyBpbmRleCAkZSBlbmRdIGVxICIvIiAmJiAkdHJlZWhlaWdodCgkcGF0aCkgPiAxfSB7CisJICAgIHNldCB5IFtoaWdobGlnaHRfdHJlZSAkeSAkcGF0aF0KKwl9CisgICAgfQorICAgIHJldHVybiAkeQorfQorCitwcm9jIHRyZWVjbG9zZWRpciB7dyBkaXJ9IHsKKyAgICBnbG9iYWwgdHJlZWRpcm9wZW4gdHJlZWhlaWdodCB0cmVlcGFyZW50IHRyZWVpbmRleAorCisgICAgc2V0IGl4ICR0cmVlaW5kZXgoJGRpcikKKyAgICAkdyBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICAkdyBkZWxldGUgczokaXggZTokaXgKKyAgICBzZXQgdHJlZWRpcm9wZW4oJGRpcikgMAorICAgICR3IGltYWdlIGNvbmZpZ3VyZSBhOiRpeCAtaW1hZ2UgdHJpLXJ0CisgICAgJHcgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICBzZXQgbiBbZXhwciB7MSAtICR0cmVlaGVpZ2h0KCRkaXIpfV0KKyAgICB3aGlsZSB7JGRpciBuZSB7fX0geworCWluY3IgdHJlZWhlaWdodCgkZGlyKSAkbgorCXNldCBkaXIgJHRyZWVwYXJlbnQoJGRpcikKKyAgICB9Cit9CisKK3Byb2MgdHJlZW9wZW5kaXIge3cgZGlyfSB7CisgICAgZ2xvYmFsIHRyZWVkaXJvcGVuIHRyZWVoZWlnaHQgdHJlZXBhcmVudCB0cmVlY29udGVudHMgdHJlZWluZGV4CisKKyAgICBzZXQgaXggJHRyZWVpbmRleCgkZGlyKQorICAgICR3IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgICR3IGltYWdlIGNvbmZpZ3VyZSBhOiRpeCAtaW1hZ2UgdHJpLWRuCisgICAgJHcgbWFyayBzZXQgZTokaXggczokaXgKKyAgICAkdyBtYXJrIGdyYXZpdHkgZTokaXggcmlnaHQKKyAgICBzZXQgbGV2IDAKKyAgICBzZXQgc3RyICJcbiIKKyAgICBzZXQgbiBbbGxlbmd0aCAkdHJlZWNvbnRlbnRzKCRkaXIpXQorICAgIGZvciB7c2V0IHggJGRpcn0geyR4IG5lIHt9fSB7c2V0IHggJHRyZWVwYXJlbnQoJHgpfSB7CisJaW5jciBsZXYKKwlhcHBlbmQgc3RyICJcdCIKKwlpbmNyIHRyZWVoZWlnaHQoJHgpICRuCisgICAgfQorICAgIGZvcmVhY2ggZSAkdHJlZWNvbnRlbnRzKCRkaXIpIHsKKwlzZXQgZGUgJGRpciRlCisJaWYge1tzdHJpbmcgaW5kZXggJGUgZW5kXSBlcSAiLyJ9IHsKKwkgICAgc2V0IGl5ICR0cmVlaW5kZXgoJGRlKQorCSAgICAkdyBtYXJrIHNldCBkOiRpeSBlOiRpeAorCSAgICAkdyBtYXJrIGdyYXZpdHkgZDokaXkgbGVmdAorCSAgICAkdyBpbnNlcnQgZTokaXggJHN0cgorCSAgICBzZXQgdHJlZWRpcm9wZW4oJGRlKSAwCisJICAgICR3IGltYWdlIGNyZWF0ZSBlOiRpeCAtYWxpZ24gY2VudGVyIC1pbWFnZSB0cmktcnQgLXBhZHggMSBcCisJCS1uYW1lIGE6JGl5CisJICAgICR3IGluc2VydCBlOiRpeCAkZSBbaGlnaGxpZ2h0X3RhZyAkZGVdCisJICAgICR3IG1hcmsgc2V0IHM6JGl5IGU6JGl4CisJICAgICR3IG1hcmsgZ3Jhdml0eSBzOiRpeSBsZWZ0CisJICAgIHNldCB0cmVlaGVpZ2h0KCRkZSkgMQorCX0gZWxzZSB7CisJICAgICR3IGluc2VydCBlOiRpeCAkc3RyCisJICAgICR3IGluc2VydCBlOiRpeCAkZSBbaGlnaGxpZ2h0X3RhZyAkZGVdCisJfQorICAgIH0KKyAgICAkdyBtYXJrIGdyYXZpdHkgZTokaXggcmlnaHQKKyAgICAkdyBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIHNldCB0cmVlZGlyb3BlbigkZGlyKSAxCisgICAgc2V0IHRvcCBbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggQDAsMF0gLl0gMF0KKyAgICBzZXQgaHQgWyR3IGNnZXQgLWhlaWdodF0KKyAgICBzZXQgbCBbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggczokaXhdIC5dIDBdCisgICAgaWYgeyRsIDwgJHRvcH0geworCSR3IHl2aWV3ICRsLjAKKyAgICB9IGVsc2VpZiB7JGwgKyAkbiArIDEgPiAkdG9wICsgJGh0fSB7CisJc2V0IHRvcCBbZXhwciB7JGwgKyAkbiArIDIgLSAkaHR9XQorCWlmIHskbCA8ICR0b3B9IHsKKwkgICAgc2V0IHRvcCAkbAorCX0KKwkkdyB5dmlldyAkdG9wLjAKKyAgICB9Cit9CisKK3Byb2MgdHJlZWNsaWNrIHt3IHggeX0geworICAgIGdsb2JhbCB0cmVlZGlyb3BlbiBjbWl0bW9kZSBjdGV4dCBjZmxpc3QgY2ZsaXN0X3RvcAorCisgICAgaWYgeyRjbWl0bW9kZSBuZSAidHJlZSJ9IHJldHVybgorICAgIGlmIHshW2luZm8gZXhpc3RzIGNmbGlzdF90b3BdfSByZXR1cm4KKyAgICBzZXQgbCBbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggIkAkeCwkeSJdICIuIl0gMF0KKyAgICAkY2ZsaXN0IHRhZyByZW1vdmUgaGlnaGxpZ2h0ICRjZmxpc3RfdG9wLjAgIiRjZmxpc3RfdG9wLjAgbGluZWVuZCIKKyAgICAkY2ZsaXN0IHRhZyBhZGQgaGlnaGxpZ2h0ICRsLjAgIiRsLjAgbGluZWVuZCIKKyAgICBzZXQgY2ZsaXN0X3RvcCAkbAorICAgIGlmIHskbCA9PSAxfSB7CisJJGN0ZXh0IHl2aWV3IDEuMAorCXJldHVybgorICAgIH0KKyAgICBzZXQgZSBbbGluZXRvZWx0ICRsXQorICAgIGlmIHtbc3RyaW5nIGluZGV4ICRlIGVuZF0gbmUgIi8ifSB7CisJc2hvd2ZpbGUgJGUKKyAgICB9IGVsc2VpZiB7JHRyZWVkaXJvcGVuKCRlKX0geworCXRyZWVjbG9zZWRpciAkdyAkZQorICAgIH0gZWxzZSB7CisJdHJlZW9wZW5kaXIgJHcgJGUKKyAgICB9Cit9CisKK3Byb2Mgc2V0ZmlsZWxpc3Qge2lkfSB7CisgICAgZ2xvYmFsIHRyZWVmaWxlbGlzdCBjZmxpc3QganVtcF90b19oZXJlCisKKyAgICB0cmVldmlldyAkY2ZsaXN0ICR0cmVlZmlsZWxpc3QoJGlkKSAwCisgICAgaWYgeyRqdW1wX3RvX2hlcmUgbmUge319IHsKKwlzZXQgZiBbbGluZGV4ICRqdW1wX3RvX2hlcmUgMF0KKwlpZiB7W2xzZWFyY2ggLWV4YWN0ICR0cmVlZmlsZWxpc3QoJGlkKSAkZl0gPj0gMH0geworCSAgICBzaG93ZmlsZSAkZgorCX0KKyAgICB9Cit9CisKK2ltYWdlIGNyZWF0ZSBiaXRtYXAgdHJpLXJ0IC1iYWNrZ3JvdW5kIGJsYWNrIC1mb3JlZ3JvdW5kIGJsdWUgLWRhdGEgeworICAgICNkZWZpbmUgdHJpLXJ0X3dpZHRoIDEzCisgICAgI2RlZmluZSB0cmktcnRfaGVpZ2h0IDEzCisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdHJpLXJ0X2JpdHNbXSA9IHsKKyAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDMwLCAweDAwLCAweDcwLCAweDAwLCAweGYwLCAweDAwLAorICAgICAgIDB4ZjAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgMHgwMCwgMHgwMH07Cit9IC1tYXNrZGF0YSB7CisgICAgI2RlZmluZSB0cmktcnQtbWFza193aWR0aCAxMworICAgICNkZWZpbmUgdHJpLXJ0LW1hc2tfaGVpZ2h0IDEzCisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdHJpLXJ0LW1hc2tfYml0c1tdID0geworICAgICAgIDB4MDgsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NzgsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4ZjgsIDB4MDEsCisgICAgICAgMHhmOCwgMHgwMywgMHhmOCwgMHgwMSwgMHhmOCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgxOCwgMHgwMCwKKyAgICAgICAweDA4LCAweDAwfTsKK30KK2ltYWdlIGNyZWF0ZSBiaXRtYXAgdHJpLWRuIC1iYWNrZ3JvdW5kIGJsYWNrIC1mb3JlZ3JvdW5kIGJsdWUgLWRhdGEgeworICAgICNkZWZpbmUgdHJpLWRuX3dpZHRoIDEzCisgICAgI2RlZmluZSB0cmktZG5faGVpZ2h0IDEzCisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdHJpLWRuX2JpdHNbXSA9IHsKKyAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDA3LCAweGY4LCAweDAzLAorICAgICAgIDB4ZjAsIDB4MDEsIDB4ZTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgMHgwMCwgMHgwMH07Cit9IC1tYXNrZGF0YSB7CisgICAgI2RlZmluZSB0cmktZG4tbWFza193aWR0aCAxMworICAgICNkZWZpbmUgdHJpLWRuLW1hc2tfaGVpZ2h0IDEzCisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdHJpLWRuLW1hc2tfYml0c1tdID0geworICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MWYsIDB4ZmUsIDB4MGYsIDB4ZmMsIDB4MDcsCisgICAgICAgMHhmOCwgMHgwMywgMHhmMCwgMHgwMSwgMHhlMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAweDAwLCAweDAwfTsKK30KKworaW1hZ2UgY3JlYXRlIGJpdG1hcCByZWZpY29uLVQgLWJhY2tncm91bmQgYmxhY2sgLWZvcmVncm91bmQgeWVsbG93IC1kYXRhIHsKKyAgICAjZGVmaW5lIHRhZ2ljb25fd2lkdGggMTMKKyAgICAjZGVmaW5lIHRhZ2ljb25faGVpZ2h0IDkKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciB0YWdpY29uX2JpdHNbXSA9IHsKKyAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA3LCAweGY4LCAweDA3LAorICAgICAgIDB4ZmMsIDB4MDcsIDB4ZjgsIDB4MDcsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworfSAtbWFza2RhdGEgeworICAgICNkZWZpbmUgdGFnaWNvbi1tYXNrX3dpZHRoIDEzCisgICAgI2RlZmluZSB0YWdpY29uLW1hc2tfaGVpZ2h0IDkKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciB0YWdpY29uLW1hc2tfYml0c1tdID0geworICAgICAgIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZjgsIDB4MGYsIDB4ZmMsIDB4MGYsCisgICAgICAgMHhmZSwgMHgwZiwgMHhmYywgMHgwZiwgMHhmOCwgMHgwZiwgMHhmMCwgMHgwZiwgMHgwMCwgMHgwMH07Cit9CitzZXQgcmVjdGRhdGEgeworICAgICNkZWZpbmUgaGVhZGljb25fd2lkdGggMTMKKyAgICAjZGVmaW5lIGhlYWRpY29uX2hlaWdodCA5CisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaGVhZGljb25fYml0c1tdID0geworICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDcsIDB4ZjgsIDB4MDcsCisgICAgICAgMHhmOCwgMHgwNywgMHhmOCwgMHgwNywgMHhmOCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07Cit9CitzZXQgcmVjdG1hc2sgeworICAgICNkZWZpbmUgaGVhZGljb24tbWFza193aWR0aCAxMworICAgICNkZWZpbmUgaGVhZGljb24tbWFza19oZWlnaHQgOQorICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYWRpY29uLW1hc2tfYml0c1tdID0geworICAgICAgIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MGYsIDB4ZmMsIDB4MGYsIDB4ZmMsIDB4MGYsCisgICAgICAgMHhmYywgMHgwZiwgMHhmYywgMHgwZiwgMHhmYywgMHgwZiwgMHhmYywgMHgwZiwgMHgwMCwgMHgwMH07Cit9CitpbWFnZSBjcmVhdGUgYml0bWFwIHJlZmljb24tSCAtYmFja2dyb3VuZCBibGFjayAtZm9yZWdyb3VuZCBncmVlbiBcCisgICAgLWRhdGEgJHJlY3RkYXRhIC1tYXNrZGF0YSAkcmVjdG1hc2sKK2ltYWdlIGNyZWF0ZSBiaXRtYXAgcmVmaWNvbi1vIC1iYWNrZ3JvdW5kIGJsYWNrIC1mb3JlZ3JvdW5kICIjZGRkZGZmIiBcCisgICAgLWRhdGEgJHJlY3RkYXRhIC1tYXNrZGF0YSAkcmVjdG1hc2sKKworcHJvYyBpbml0X2ZsaXN0IHtmaXJzdH0geworICAgIGdsb2JhbCBjZmxpc3QgY2ZsaXN0X3RvcCBkaWZmZmlsZXN0YXJ0CisKKyAgICAkY2ZsaXN0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgICRjZmxpc3QgZGVsZXRlIDAuMCBlbmQKKyAgICBpZiB7JGZpcnN0IG5lIHt9fSB7CisJJGNmbGlzdCBpbnNlcnQgZW5kICRmaXJzdAorCXNldCBjZmxpc3RfdG9wIDEKKwkkY2ZsaXN0IHRhZyBhZGQgaGlnaGxpZ2h0IDEuMCAiMS4wIGxpbmVlbmQiCisgICAgfSBlbHNlIHsKKwljYXRjaCB7dW5zZXQgY2ZsaXN0X3RvcH0KKyAgICB9CisgICAgJGNmbGlzdCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIHNldCBkaWZmZmlsZXN0YXJ0IHt9Cit9CisKK3Byb2MgaGlnaGxpZ2h0X3RhZyB7Zn0geworICAgIGdsb2JhbCBoaWdobGlnaHRfcGF0aHMKKworICAgIGZvcmVhY2ggcCAkaGlnaGxpZ2h0X3BhdGhzIHsKKwlpZiB7W3N0cmluZyBtYXRjaCAkcCAkZl19IHsKKwkgICAgcmV0dXJuICJib2xkIgorCX0KKyAgICB9CisgICAgcmV0dXJuIHt9Cit9CisKK3Byb2MgaGlnaGxpZ2h0X2ZpbGVsaXN0IHt9IHsKKyAgICBnbG9iYWwgY21pdG1vZGUgY2ZsaXN0CisKKyAgICAkY2ZsaXN0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIGlmIHskY21pdG1vZGUgbmUgInRyZWUifSB7CisJc2V0IGVuZCBbbGluZGV4IFtzcGxpdCBbJGNmbGlzdCBpbmRleCBlbmRdIC5dIDBdCisJZm9yIHtzZXQgbCAyfSB7JGwgPCAkZW5kfSB7aW5jciBsfSB7CisJICAgIHNldCBsaW5lIFskY2ZsaXN0IGdldCAkbC4wICIkbC4wIGxpbmVlbmQiXQorCSAgICBpZiB7W2hpZ2hsaWdodF90YWcgJGxpbmVdIG5lIHt9fSB7CisJCSRjZmxpc3QgdGFnIGFkZCBib2xkICRsLjAgIiRsLjAgbGluZWVuZCIKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCWhpZ2hsaWdodF90cmVlIDIge30KKyAgICB9CisgICAgJGNmbGlzdCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorfQorCitwcm9jIHVuaGlnaGxpZ2h0X2ZpbGVsaXN0IHt9IHsKKyAgICBnbG9iYWwgY2ZsaXN0CisKKyAgICAkY2ZsaXN0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgICRjZmxpc3QgdGFnIHJlbW92ZSBib2xkIDEuMCBlbmQKKyAgICAkY2ZsaXN0IGNvbmYgLXN0YXRlIGRpc2FibGVkCit9CisKK3Byb2MgYWRkX2ZsaXN0IHtmbH0geworICAgIGdsb2JhbCBjZmxpc3QKKworICAgICRjZmxpc3QgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgZm9yZWFjaCBmICRmbCB7CisJJGNmbGlzdCBpbnNlcnQgZW5kICJcbiIKKwkkY2ZsaXN0IGluc2VydCBlbmQgJGYgW2hpZ2hsaWdodF90YWcgJGZdCisgICAgfQorICAgICRjZmxpc3QgY29uZiAtc3RhdGUgZGlzYWJsZWQKK30KKworcHJvYyBzZWxfZmxpc3Qge3cgeCB5fSB7CisgICAgZ2xvYmFsIGN0ZXh0IGRpZmZmaWxlc3RhcnQgY2ZsaXN0IGNmbGlzdF90b3AgY21pdG1vZGUKKworICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSByZXR1cm4KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjZmxpc3RfdG9wXX0gcmV0dXJuCisgICAgc2V0IGwgW2xpbmRleCBbc3BsaXQgWyR3IGluZGV4ICJAJHgsJHkiXSAiLiJdIDBdCisgICAgJGNmbGlzdCB0YWcgcmVtb3ZlIGhpZ2hsaWdodCAkY2ZsaXN0X3RvcC4wICIkY2ZsaXN0X3RvcC4wIGxpbmVlbmQiCisgICAgJGNmbGlzdCB0YWcgYWRkIGhpZ2hsaWdodCAkbC4wICIkbC4wIGxpbmVlbmQiCisgICAgc2V0IGNmbGlzdF90b3AgJGwKKyAgICBpZiB7JGwgPT0gMX0geworCSRjdGV4dCB5dmlldyAxLjAKKyAgICB9IGVsc2UgeworCWNhdGNoIHskY3RleHQgeXZpZXcgW2xpbmRleCAkZGlmZmZpbGVzdGFydCBbZXhwciB7JGwgLSAyfV1dfQorICAgIH0KK30KKworcHJvYyBwb3BfZmxpc3RfbWVudSB7dyBYIFkgeCB5fSB7CisgICAgZ2xvYmFsIGN0ZXh0IGNmbGlzdCBjbWl0bW9kZSBmbGlzdF9tZW51IGZsaXN0X21lbnVfZmlsZQorICAgIGdsb2JhbCB0cmVlZGlmZnMgZGlmZmlkcworCisgICAgc3RvcGZpbmRpbmcKKyAgICBzZXQgbCBbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggIkAkeCwkeSJdICIuIl0gMF0KKyAgICBpZiB7JGwgPD0gMX0gcmV0dXJuCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHsKKwlzZXQgZSBbbGluZXRvZWx0ICRsXQorCWlmIHtbc3RyaW5nIGluZGV4ICRlIGVuZF0gZXEgIi8ifSByZXR1cm4KKyAgICB9IGVsc2UgeworCXNldCBlIFtsaW5kZXggJHRyZWVkaWZmcygkZGlmZmlkcykgW2V4cHIgeyRsLTJ9XV0KKyAgICB9CisgICAgc2V0IGZsaXN0X21lbnVfZmlsZSAkZQorICAgIHNldCB4ZGlmZnN0YXRlICJub3JtYWwiCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHsKKwlzZXQgeGRpZmZzdGF0ZSAiZGlzYWJsZWQiCisgICAgfQorICAgICMgRGlzYWJsZSAiRXh0ZXJuYWwgZGlmZiIgaXRlbSBpbiB0cmVlIG1vZGUKKyAgICAkZmxpc3RfbWVudSBlbnRyeWNvbmYgMiAtc3RhdGUgJHhkaWZmc3RhdGUKKyAgICB0a19wb3B1cCAkZmxpc3RfbWVudSAkWCAkWQorfQorCitwcm9jIGZpbmRfY3RleHRfZmlsZWluZm8ge2xpbmV9IHsKKyAgICBnbG9iYWwgY3RleHRfZmlsZV9uYW1lcyBjdGV4dF9maWxlX2xpbmVzCisKKyAgICBzZXQgb2sgW2JzZWFyY2ggJGN0ZXh0X2ZpbGVfbGluZXMgJGxpbmVdCisgICAgc2V0IHRsaW5lIFtsaW5kZXggJGN0ZXh0X2ZpbGVfbGluZXMgJG9rXQorCisgICAgaWYgeyRvayA+PSBbbGxlbmd0aCAkY3RleHRfZmlsZV9saW5lc10gfHwgJGxpbmUgPCAkdGxpbmV9IHsKKyAgICAgICAgcmV0dXJuIHt9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFtsaXN0IFtsaW5kZXggJGN0ZXh0X2ZpbGVfbmFtZXMgJG9rXSAkdGxpbmVdCisgICAgfQorfQorCitwcm9jIHBvcF9kaWZmX21lbnUge3cgWCBZIHggeX0geworICAgIGdsb2JhbCBjdGV4dCBkaWZmX21lbnUgZmxpc3RfbWVudV9maWxlCisgICAgZ2xvYmFsIGRpZmZfbWVudV90eHRwb3MgZGlmZl9tZW51X2xpbmUKKyAgICBnbG9iYWwgZGlmZl9tZW51X2ZpbGViYXNlCisKKyAgICBzZXQgZGlmZl9tZW51X3R4dHBvcyBbc3BsaXQgWyR3IGluZGV4ICJAJHgsJHkiXSAiLiJdCisgICAgc2V0IGRpZmZfbWVudV9saW5lIFtsaW5kZXggJGRpZmZfbWVudV90eHRwb3MgMF0KKyAgICAjIGRvbid0IHBvcCB1cCB0aGUgbWVudSBvbiBodW5rLXNlcGFyYXRvciBvciBmaWxlLXNlcGFyYXRvciBsaW5lcworICAgIGlmIHtbbHNlYXJjaCAtZ2xvYiBbJGN0ZXh0IHRhZyBuYW1lcyAkZGlmZl9tZW51X2xpbmUuMF0gIipzZXAiXSA+PSAwfSB7CisJcmV0dXJuCisgICAgfQorICAgIHN0b3BmaW5kaW5nCisgICAgc2V0IGYgW2ZpbmRfY3RleHRfZmlsZWluZm8gJGRpZmZfbWVudV9saW5lXQorICAgIGlmIHskZiBlcSB7fX0gcmV0dXJuCisgICAgc2V0IGZsaXN0X21lbnVfZmlsZSBbbGluZGV4ICRmIDBdCisgICAgc2V0IGRpZmZfbWVudV9maWxlYmFzZSBbbGluZGV4ICRmIDFdCisgICAgdGtfcG9wdXAgJGRpZmZfbWVudSAkWCAkWQorfQorCitwcm9jIGZsaXN0X2hsIHtvbmx5fSB7CisgICAgZ2xvYmFsIGZsaXN0X21lbnVfZmlsZSBmaW5kc3RyaW5nIGdkdHR5cGUKKworICAgIHNldCB4IFtzaGVsbHF1b3RlICRmbGlzdF9tZW51X2ZpbGVdCisgICAgaWYgeyRvbmx5IHx8ICRmaW5kc3RyaW5nIGVxIHt9IHx8ICRnZHR0eXBlIG5lIFttYyAidG91Y2hpbmcgcGF0aHM6Il19IHsKKwlzZXQgZmluZHN0cmluZyAkeAorICAgIH0gZWxzZSB7CisJYXBwZW5kIGZpbmRzdHJpbmcgIiAiICR4CisgICAgfQorICAgIHNldCBnZHR0eXBlIFttYyAidG91Y2hpbmcgcGF0aHM6Il0KK30KKworcHJvYyBnaXRrbmV3dG1wZGlyIHt9IHsKKyAgICBnbG9iYWwgZGlmZm51bSBnaXRrdG1wZGlyIGdpdGRpcgorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgZ2l0a3RtcGRpcl19IHsKKwlzZXQgZ2l0a3RtcGRpciBbZmlsZSBqb2luICRnaXRkaXIgW2Zvcm1hdCAiLmdpdGstdG1wLiVzIiBbcGlkXV1dCisJaWYge1tjYXRjaCB7ZmlsZSBta2RpciAkZ2l0a3RtcGRpcn0gZXJyXX0geworCSAgICBlcnJvcl9wb3B1cCAiW21jICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIgJGdpdGt0bXBkaXJdICRlcnIiCisJICAgIHVuc2V0IGdpdGt0bXBkaXIKKwkgICAgcmV0dXJuIHt9CisJfQorCXNldCBkaWZmbnVtIDAKKyAgICB9CisgICAgaW5jciBkaWZmbnVtCisgICAgc2V0IGRpZmZkaXIgW2ZpbGUgam9pbiAkZ2l0a3RtcGRpciAkZGlmZm51bV0KKyAgICBpZiB7W2NhdGNoIHtmaWxlIG1rZGlyICRkaWZmZGlyfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiICRkaWZmZGlyXSAkZXJyIgorCXJldHVybiB7fQorICAgIH0KKyAgICByZXR1cm4gJGRpZmZkaXIKK30KKworcHJvYyBzYXZlX2ZpbGVfZnJvbV9jb21taXQge2ZpbGVuYW1lIG91dHB1dCB3aGF0fSB7CisgICAgZ2xvYmFsIG51bGxmaWxlCisKKyAgICBpZiB7W2NhdGNoIHtleGVjIGdpdCBzaG93ICRmaWxlbmFtZSAtLSA+ICRvdXRwdXR9IGVycl19IHsKKwlpZiB7W3N0cmluZyBtYXRjaCAiZmF0YWw6IGJhZCByZXZpc2lvbiAqIiAkZXJyXX0geworCSAgICByZXR1cm4gJG51bGxmaWxlCisJfQorCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IiAkZmlsZW5hbWUgJHdoYXRdICRlcnIiCisJcmV0dXJuIHt9CisgICAgfQorICAgIHJldHVybiAkb3V0cHV0Cit9CisKK3Byb2MgZXh0ZXJuYWxfZGlmZl9nZXRfb25lX2ZpbGUge2RpZmZpZCBmaWxlbmFtZSBkaWZmZGlyfSB7CisgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyIG51bGxmaWxlCisgICAgZ2xvYmFsIHdvcmt0cmVlCisKKyAgICBpZiB7JGRpZmZpZCA9PSAkbnVsbGlkfSB7CisgICAgICAgIHNldCBkaWZmZmlsZSBbZmlsZSBqb2luICR3b3JrdHJlZSAkZmlsZW5hbWVdCisJaWYge1tmaWxlIGV4aXN0cyAkZGlmZmZpbGVdfSB7CisJICAgIHJldHVybiAkZGlmZmZpbGUKKwl9CisJcmV0dXJuICRudWxsZmlsZQorICAgIH0KKyAgICBpZiB7JGRpZmZpZCA9PSAkbnVsbGlkMn0geworICAgICAgICBzZXQgZGlmZmZpbGUgW2ZpbGUgam9pbiAkZGlmZmRpciAiXFtpbmRleFxdIFtmaWxlIHRhaWwgJGZpbGVuYW1lXSJdCisgICAgICAgIHJldHVybiBbc2F2ZV9maWxlX2Zyb21fY29tbWl0IDokZmlsZW5hbWUgJGRpZmZmaWxlIGluZGV4XQorICAgIH0KKyAgICBzZXQgZGlmZmZpbGUgW2ZpbGUgam9pbiAkZGlmZmRpciAiXFskZGlmZmlkXF0gW2ZpbGUgdGFpbCAkZmlsZW5hbWVdIl0KKyAgICByZXR1cm4gW3NhdmVfZmlsZV9mcm9tX2NvbW1pdCAkZGlmZmlkOiRmaWxlbmFtZSAkZGlmZmZpbGUgXAorCSAgICAgICAicmV2aXNpb24gJGRpZmZpZCJdCit9CisKK3Byb2MgZXh0ZXJuYWxfZGlmZiB7fSB7CisgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyCisgICAgZ2xvYmFsIGZsaXN0X21lbnVfZmlsZQorICAgIGdsb2JhbCBkaWZmaWRzCisgICAgZ2xvYmFsIGV4dGRpZmZ0b29sCisKKyAgICBpZiB7W2xsZW5ndGggJGRpZmZpZHNdID09IDF9IHsKKyAgICAgICAgIyBubyByZWZlcmVuY2UgY29tbWl0IGdpdmVuCisgICAgICAgIHNldCBkaWZmaWR0byBbbGluZGV4ICRkaWZmaWRzIDBdCisgICAgICAgIGlmIHskZGlmZmlkdG8gZXEgJG51bGxpZH0geworICAgICAgICAgICAgIyBkaWZmaW5nIHdvcmtpbmcgY29weSB3aXRoIGluZGV4CisgICAgICAgICAgICBzZXQgZGlmZmlkZnJvbSAkbnVsbGlkMgorICAgICAgICB9IGVsc2VpZiB7JGRpZmZpZHRvIGVxICRudWxsaWQyfSB7CisgICAgICAgICAgICAjIGRpZmZpbmcgaW5kZXggd2l0aCBIRUFECisgICAgICAgICAgICBzZXQgZGlmZmlkZnJvbSAiSEVBRCIKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICMgdXNlIGZpcnN0IHBhcmVudCBjb21taXQKKyAgICAgICAgICAgIGdsb2JhbCBwYXJlbnRsaXN0IHNlbGVjdGVkbGluZQorICAgICAgICAgICAgc2V0IGRpZmZpZGZyb20gW2xpbmRleCAkcGFyZW50bGlzdCAkc2VsZWN0ZWRsaW5lIDBdCisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgZGlmZmlkZnJvbSBbbGluZGV4ICRkaWZmaWRzIDBdCisgICAgICAgIHNldCBkaWZmaWR0byBbbGluZGV4ICRkaWZmaWRzIDFdCisgICAgfQorCisgICAgIyBtYWtlIHN1cmUgdGhhdCBzZXZlcmFsIGRpZmZzIHdvbnQgY29sbGlkZQorICAgIHNldCBkaWZmZGlyIFtnaXRrbmV3dG1wZGlyXQorICAgIGlmIHskZGlmZmRpciBlcSB7fX0gcmV0dXJuCisKKyAgICAjIGdhdGhlciBmaWxlcyB0byBkaWZmCisgICAgc2V0IGRpZmZmcm9tZmlsZSBbZXh0ZXJuYWxfZGlmZl9nZXRfb25lX2ZpbGUgJGRpZmZpZGZyb20gJGZsaXN0X21lbnVfZmlsZSAkZGlmZmRpcl0KKyAgICBzZXQgZGlmZnRvZmlsZSBbZXh0ZXJuYWxfZGlmZl9nZXRfb25lX2ZpbGUgJGRpZmZpZHRvICRmbGlzdF9tZW51X2ZpbGUgJGRpZmZkaXJdCisKKyAgICBpZiB7JGRpZmZmcm9tZmlsZSBuZSB7fSAmJiAkZGlmZnRvZmlsZSBuZSB7fX0geworICAgICAgICBzZXQgY21kIFtsaXN0IFtzaGVsbHNwbGl0ICRleHRkaWZmdG9vbF0gJGRpZmZmcm9tZmlsZSAkZGlmZnRvZmlsZV0KKyAgICAgICAgaWYge1tjYXRjaCB7c2V0IGZsIFtvcGVuIHwkY21kIHJdfSBlcnJdfSB7CisgICAgICAgICAgICBmaWxlIGRlbGV0ZSAtZm9yY2UgJGRpZmZkaXIKKyAgICAgICAgICAgIGVycm9yX3BvcHVwICIkZXh0ZGlmZnRvb2w6IFttYyAiY29tbWFuZCBmYWlsZWQ6Il0gJGVyciIKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZjb25maWd1cmUgJGZsIC1ibG9ja2luZyAwCisgICAgICAgICAgICBmaWxlcnVuICRmbCBbbGlzdCBkZWxldGVfYXRfZW9mICRmbCAkZGlmZmRpcl0KKyAgICAgICAgfQorICAgIH0KK30KKworcHJvYyBmaW5kX2h1bmtfYmxhbWVzcGVjIHtiYXNlIGxpbmV9IHsKKyAgICBnbG9iYWwgY3RleHQKKworICAgICMgRmluZCBhbmQgcGFyc2UgdGhlIGh1bmsgaGVhZGVyCisgICAgc2V0IHNfbGl4IFskY3RleHQgc2VhcmNoIC1iYWNrd2FyZHMgLXJlZ2V4cCBeQEAgIiRsaW5lLjAgbGluZWVuZCIgJGJhc2UuMF0KKyAgICBpZiB7JHNfbGl4IGVxIHt9fSByZXR1cm4KKworICAgIHNldCBzX2xpbmUgWyRjdGV4dCBnZXQgJHNfbGl4ICIkc19saXggKyAxIGxpbmVzIl0KKyAgICBpZiB7IVtyZWdleHAge15AQEAqKCggLVxkKygsXGQrKT8pKykgXCsoXGQrKSgsXGQrKT8gQEB9ICRzX2xpbmUgXAorCSAgICBzX2xpbmUgb2xkX3NwZWNzIG9zeiBvc3oxIG5ld19saW5lIG5zel19IHsKKwlyZXR1cm4KKyAgICB9CisKKyAgICAjIGJhc2UgbGluZXMgZm9yIHRoZSBwYXJlbnRzCisgICAgc2V0IGJhc2VfbGluZXMgW2xpc3QgJG5ld19saW5lXQorICAgIGZvcmVhY2ggb2xkX3NwZWMgW2xyYW5nZSBbc3BsaXQgJG9sZF9zcGVjcyAiICJdIDEgZW5kXSB7CisJaWYgeyFbcmVnZXhwIC0tIHstKFxkKykoLFxkKyk/fSAkb2xkX3NwZWMgXAorCSAgICAgICAgb2xkX3NwZWMgb2xkX2xpbmUgb3N6XX0geworCSAgICByZXR1cm4KKwl9CisJbGFwcGVuZCBiYXNlX2xpbmVzICRvbGRfbGluZQorICAgIH0KKworICAgICMgTm93IHNjYW4gdGhlIGxpbmVzIHRvIGRldGVybWluZSBvZmZzZXQgd2l0aGluIHRoZSBodW5rCisgICAgc2V0IG1heF9wYXJlbnQgW2V4cHIge1tsbGVuZ3RoICRiYXNlX2xpbmVzXS0yfV0KKyAgICBzZXQgZGxpbmUgMAorICAgIHNldCBzX2xubyBbbGluZGV4IFtzcGxpdCAkc19saXggIi4iXSAwXQorCisgICAgIyBEZXRlcm1pbmUgaWYgdGhlIGxpbmUgaXMgcmVtb3ZlZAorICAgIHNldCBjaHVuayBbJGN0ZXh0IGdldCAkbGluZS4wICIkbGluZS4xICsgJG1heF9wYXJlbnQgY2hhcnMiXQorICAgIGlmIHtbc3RyaW5nIG1hdGNoIHtbLSsgXSp9ICRjaHVua119IHsKKwlzZXQgcmVtb3ZlZF9pZHggW3N0cmluZyBmaXJzdCAiLSIgJGNodW5rXQorCSMgQ2hvb3NlIGEgcGFyZW50IGluZGV4CisJaWYgeyRyZW1vdmVkX2lkeCA+PSAwfSB7CisJICAgIHNldCBwYXJlbnQgJHJlbW92ZWRfaWR4CisJfSBlbHNlIHsKKwkgICAgc2V0IHVuY2hhbmdlZF9pZHggW3N0cmluZyBmaXJzdCAiICIgJGNodW5rXQorCSAgICBpZiB7JHVuY2hhbmdlZF9pZHggPj0gMH0geworCQlzZXQgcGFyZW50ICR1bmNoYW5nZWRfaWR4CisJICAgIH0gZWxzZSB7CisJCSMgYmxhbWUgdGhlIGN1cnJlbnQgY29tbWl0CisJCXNldCBwYXJlbnQgLTEKKwkgICAgfQorCX0KKwkjIHRoZW4gY291bnQgb3RoZXIgbGluZXMgdGhhdCBiZWxvbmcgdG8gaXQKKwlmb3Ige3NldCBpICRsaW5lfSB7W2luY3IgaSAtMV0gPiAkc19sbm99IHt9IHsKKwkgICAgc2V0IGNodW5rIFskY3RleHQgZ2V0ICRpLjAgIiRpLjEgKyAkbWF4X3BhcmVudCBjaGFycyJdCisJICAgICMgRGV0ZXJtaW5lIGlmIHRoZSBsaW5lIGlzIHJlbW92ZWQKKwkgICAgc2V0IHJlbW92ZWRfaWR4IFtzdHJpbmcgZmlyc3QgIi0iICRjaHVua10KKwkgICAgaWYgeyRwYXJlbnQgPj0gMH0geworCQlzZXQgY29kZSBbc3RyaW5nIGluZGV4ICRjaHVuayAkcGFyZW50XQorCQlpZiB7JGNvZGUgZXEgIi0iIHx8ICgkcmVtb3ZlZF9pZHggPCAwICYmICRjb2RlIG5lICIrIil9IHsKKwkJICAgIGluY3IgZGxpbmUKKwkJfQorCSAgICB9IGVsc2UgeworCQlpZiB7JHJlbW92ZWRfaWR4IDwgMH0geworCQkgICAgaW5jciBkbGluZQorCQl9CisJICAgIH0KKwl9CisJaW5jciBwYXJlbnQKKyAgICB9IGVsc2UgeworCXNldCBwYXJlbnQgMAorICAgIH0KKworICAgIGluY3IgZGxpbmUgW2xpbmRleCAkYmFzZV9saW5lcyAkcGFyZW50XQorICAgIHJldHVybiBbbGlzdCAkcGFyZW50ICRkbGluZV0KK30KKworcHJvYyBleHRlcm5hbF9ibGFtZV9kaWZmIHt9IHsKKyAgICBnbG9iYWwgY3VycmVudGlkIGNtaXRtb2RlCisgICAgZ2xvYmFsIGRpZmZfbWVudV90eHRwb3MgZGlmZl9tZW51X2xpbmUKKyAgICBnbG9iYWwgZGlmZl9tZW51X2ZpbGViYXNlIGZsaXN0X21lbnVfZmlsZQorCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHsKKwlzZXQgcGFyZW50X2lkeCAwCisJc2V0IGxpbmUgW2V4cHIgeyRkaWZmX21lbnVfbGluZSAtICRkaWZmX21lbnVfZmlsZWJhc2V9XQorICAgIH0gZWxzZSB7CisJc2V0IGhpbmZvIFtmaW5kX2h1bmtfYmxhbWVzcGVjICRkaWZmX21lbnVfZmlsZWJhc2UgJGRpZmZfbWVudV9saW5lXQorCWlmIHskaGluZm8gbmUge319IHsKKwkgICAgc2V0IHBhcmVudF9pZHggW2xpbmRleCAkaGluZm8gMF0KKwkgICAgc2V0IGxpbmUgW2xpbmRleCAkaGluZm8gMV0KKwl9IGVsc2UgeworCSAgICBzZXQgcGFyZW50X2lkeCAwCisJICAgIHNldCBsaW5lIDAKKwl9CisgICAgfQorCisgICAgZXh0ZXJuYWxfYmxhbWUgJHBhcmVudF9pZHggJGxpbmUKK30KKworIyBGaW5kIHRoZSBTSEExIElEIG9mIHRoZSBibG9iIGZvciBmaWxlICRmbmFtZSBpbiB0aGUgaW5kZXgKKyMgYXQgc3RhZ2UgMCBvciAyCitwcm9jIGluZGV4X3NoYTEge2ZuYW1lfSB7CisgICAgc2V0IGYgW29wZW4gW2xpc3QgfCBnaXQgbHMtZmlsZXMgLXMgJGZuYW1lXSByXQorICAgIHdoaWxlIHtbZ2V0cyAkZiBsaW5lXSA+PSAwfSB7CisJc2V0IGluZm8gW2xpbmRleCBbc3BsaXQgJGxpbmUgIlx0Il0gMF0KKwlzZXQgc3RhZ2UgW2xpbmRleCAkaW5mbyAyXQorCWlmIHskc3RhZ2UgZXEgIjAiIHx8ICRzdGFnZSBlcSAiMiJ9IHsKKwkgICAgY2xvc2UgJGYKKwkgICAgcmV0dXJuIFtsaW5kZXggJGluZm8gMV0KKwl9CisgICAgfQorICAgIGNsb3NlICRmCisgICAgcmV0dXJuIHt9Cit9CisKKyMgVHVybiBhbiBhYnNvbHV0ZSBwYXRoIGludG8gb25lIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorcHJvYyBtYWtlX3JlbGF0aXZlIHtmfSB7CisgICAgaWYge1tmaWxlIHBhdGh0eXBlICRmXSBlcSAicmVsYXRpdmUifSB7CisJcmV0dXJuICRmCisgICAgfQorICAgIHNldCBlbHRzIFtmaWxlIHNwbGl0ICRmXQorICAgIHNldCBoZXJlIFtmaWxlIHNwbGl0IFtwd2RdXQorICAgIHNldCBlaSAwCisgICAgc2V0IGhpIDAKKyAgICBzZXQgcmVzIHt9CisgICAgZm9yZWFjaCBkICRoZXJlIHsKKwlpZiB7JGVpIDwgJGhpIHx8ICRlaSA+PSBbbGxlbmd0aCAkZWx0c10gfHwgW2xpbmRleCAkZWx0cyAkZWldIG5lICRkfSB7CisJICAgIGxhcHBlbmQgcmVzICIuLiIKKwl9IGVsc2UgeworCSAgICBpbmNyIGVpCisJfQorCWluY3IgaGkKKyAgICB9CisgICAgc2V0IGVsdHMgW2NvbmNhdCAkcmVzIFtscmFuZ2UgJGVsdHMgJGVpIGVuZF1dCisgICAgcmV0dXJuIFtldmFsIGZpbGUgam9pbiAkZWx0c10KK30KKworcHJvYyBleHRlcm5hbF9ibGFtZSB7cGFyZW50X2lkeCB7bGluZSB7fX19IHsKKyAgICBnbG9iYWwgZmxpc3RfbWVudV9maWxlIGNkdXAKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIKKyAgICBnbG9iYWwgcGFyZW50bGlzdCBzZWxlY3RlZGxpbmUgY3VycmVudGlkCisKKyAgICBpZiB7JHBhcmVudF9pZHggPiAwfSB7CisJc2V0IGJhc2VfY29tbWl0IFtsaW5kZXggJHBhcmVudGxpc3QgJHNlbGVjdGVkbGluZSBbZXhwciB7JHBhcmVudF9pZHgtMX1dXQorICAgIH0gZWxzZSB7CisJc2V0IGJhc2VfY29tbWl0ICRjdXJyZW50aWQKKyAgICB9CisKKyAgICBpZiB7JGJhc2VfY29tbWl0IGVxIHt9IHx8ICRiYXNlX2NvbW1pdCBlcSAkbnVsbGlkIHx8ICRiYXNlX2NvbW1pdCBlcSAkbnVsbGlkMn0geworCWVycm9yX3BvcHVwIFttYyAiTm8gc3VjaCBjb21taXQiXQorCXJldHVybgorICAgIH0KKworICAgIHNldCBjbWRsaW5lIFtsaXN0IGdpdCBndWkgYmxhbWVdCisgICAgaWYgeyRsaW5lIG5lIHt9ICYmICRsaW5lID4gMX0geworCWxhcHBlbmQgY21kbGluZSAiLS1saW5lPSRsaW5lIgorICAgIH0KKyAgICBzZXQgZiBbZmlsZSBqb2luICRjZHVwICRmbGlzdF9tZW51X2ZpbGVdCisgICAgIyBVbmZvcnR1bmF0ZWx5IGl0IHNlZW1zIGdpdCBndWkgYmxhbWUgZG9lc24ndCBsaWtlCisgICAgIyBiZWluZyBnaXZlbiBhbiBhYnNvbHV0ZSBwYXRoLi4uCisgICAgc2V0IGYgW21ha2VfcmVsYXRpdmUgJGZdCisgICAgbGFwcGVuZCBjbWRsaW5lICRiYXNlX2NvbW1pdCAkZgorICAgIGlmIHtbY2F0Y2gge2V2YWwgZXhlYyAkY21kbGluZSAmfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIlttYyAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6Il0gJGVyciIKKyAgICB9Cit9CisKK3Byb2Mgc2hvd19saW5lX3NvdXJjZSB7fSB7CisgICAgZ2xvYmFsIGNtaXRtb2RlIGN1cnJlbnRpZCBwYXJlbnRzIGN1cnZpZXcgYmxhbWVzdHVmZiBibGFtZWluc3QKKyAgICBnbG9iYWwgZGlmZl9tZW51X2xpbmUgZGlmZl9tZW51X2ZpbGViYXNlIGZsaXN0X21lbnVfZmlsZQorICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMiBnaXRkaXIgY2R1cAorCisgICAgc2V0IGZyb21faW5kZXgge30KKyAgICBpZiB7JGNtaXRtb2RlIGVxICJ0cmVlIn0geworCXNldCBpZCAkY3VycmVudGlkCisJc2V0IGxpbmUgW2V4cHIgeyRkaWZmX21lbnVfbGluZSAtICRkaWZmX21lbnVfZmlsZWJhc2V9XQorICAgIH0gZWxzZSB7CisJc2V0IGggW2ZpbmRfaHVua19ibGFtZXNwZWMgJGRpZmZfbWVudV9maWxlYmFzZSAkZGlmZl9tZW51X2xpbmVdCisJaWYgeyRoIGVxIHt9fSByZXR1cm4KKwlzZXQgcGkgW2xpbmRleCAkaCAwXQorCWlmIHskcGkgPT0gMH0geworCSAgICBtYXJrX2N0ZXh0X2xpbmUgJGRpZmZfbWVudV9saW5lCisJICAgIHJldHVybgorCX0KKwlpbmNyIHBpIC0xCisJaWYgeyRjdXJyZW50aWQgZXEgJG51bGxpZH0geworCSAgICBpZiB7JHBpID4gMH0geworCQkjIG11c3QgYmUgYSBtZXJnZSBpbiBwcm9ncmVzcy4uLgorCQlpZiB7W2NhdGNoIHsKKwkJICAgICMgZ2V0IHRoZSBsYXN0IGxpbmUgZnJvbSAuZ2l0L01FUkdFX0hFQUQKKwkJICAgIHNldCBmIFtvcGVuIFtmaWxlIGpvaW4gJGdpdGRpciBNRVJHRV9IRUFEXSByXQorCQkgICAgc2V0IGlkIFtsaW5kZXggW3NwbGl0IFtyZWFkICRmXSAiXG4iXSBlbmQtMV0KKwkJICAgIGNsb3NlICRmCisJCX0gZXJyXX0geworCQkgICAgZXJyb3JfcG9wdXAgW21jICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIiAkZXJyXQorCQkgICAgcmV0dXJuCisJCX0KKwkgICAgfSBlbHNlaWYgeyRwYXJlbnRzKCRjdXJ2aWV3LCRjdXJyZW50aWQpIGVxICRudWxsaWQyfSB7CisJCSMgbmVlZCB0byBkbyB0aGUgYmxhbWUgZnJvbSB0aGUgaW5kZXgKKwkJaWYge1tjYXRjaCB7CisJCSAgICBzZXQgZnJvbV9pbmRleCBbaW5kZXhfc2hhMSAkZmxpc3RfbWVudV9maWxlXQorCQl9IGVycl19IHsKKwkJICAgIGVycm9yX3BvcHVwIFttYyAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiICRlcnJdCisJCSAgICByZXR1cm4KKwkJfQorCSAgICB9IGVsc2UgeworCQlzZXQgaWQgJHBhcmVudHMoJGN1cnZpZXcsJGN1cnJlbnRpZCkKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHNldCBpZCBbbGluZGV4ICRwYXJlbnRzKCRjdXJ2aWV3LCRjdXJyZW50aWQpICRwaV0KKwl9CisJc2V0IGxpbmUgW2xpbmRleCAkaCAxXQorICAgIH0KKyAgICBzZXQgYmxhbWVhcmdzIHt9CisgICAgaWYgeyRmcm9tX2luZGV4IG5lIHt9fSB7CisJbGFwcGVuZCBibGFtZWFyZ3MgfCBnaXQgY2F0LWZpbGUgYmxvYiAkZnJvbV9pbmRleAorICAgIH0KKyAgICBsYXBwZW5kIGJsYW1lYXJncyB8IGdpdCBibGFtZSAtcCAtTCRsaW5lLCsxCisgICAgaWYgeyRmcm9tX2luZGV4IG5lIHt9fSB7CisJbGFwcGVuZCBibGFtZWFyZ3MgLS1jb250ZW50cyAtCisgICAgfSBlbHNlIHsKKwlsYXBwZW5kIGJsYW1lYXJncyAkaWQKKyAgICB9CisgICAgbGFwcGVuZCBibGFtZWFyZ3MgLS0gW2ZpbGUgam9pbiAkY2R1cCAkZmxpc3RfbWVudV9maWxlXQorICAgIGlmIHtbY2F0Y2ggeworCXNldCBmIFtvcGVuICRibGFtZWFyZ3Mgcl0KKyAgICB9IGVycl19IHsKKwllcnJvcl9wb3B1cCBbbWMgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiICRlcnJdCisJcmV0dXJuCisgICAgfQorICAgIG5vd2J1c3kgYmxhbWluZyBbbWMgIlNlYXJjaGluZyJdCisgICAgZmNvbmZpZ3VyZSAkZiAtYmxvY2tpbmcgMAorICAgIHNldCBpIFtyZWdfaW5zdGFuY2UgJGZdCisgICAgc2V0IGJsYW1lc3R1ZmYoJGkpIHt9CisgICAgc2V0IGJsYW1laW5zdCAkaQorICAgIGZpbGVydW4gJGYgW2xpc3QgcmVhZF9saW5lX3NvdXJjZSAkZiAkaV0KK30KKworcHJvYyBzdG9wYmxhbWluZyB7fSB7CisgICAgZ2xvYmFsIGJsYW1laW5zdAorCisgICAgaWYge1tpbmZvIGV4aXN0cyBibGFtZWluc3RdfSB7CisJc3RvcF9pbnN0YW5jZSAkYmxhbWVpbnN0CisJdW5zZXQgYmxhbWVpbnN0CisJbm90YnVzeSBibGFtaW5nCisgICAgfQorfQorCitwcm9jIHJlYWRfbGluZV9zb3VyY2Uge2ZkIGluc3R9IHsKKyAgICBnbG9iYWwgYmxhbWVzdHVmZiBjdXJ2aWV3IGNvbW1mZCBibGFtZWluc3QgbnVsbGlkIG51bGxpZDIKKworICAgIHdoaWxlIHtbZ2V0cyAkZmQgbGluZV0gPj0gMH0geworCWxhcHBlbmQgYmxhbWVzdHVmZigkaW5zdCkgJGxpbmUKKyAgICB9CisgICAgaWYgeyFbZW9mICRmZF19IHsKKwlyZXR1cm4gMQorICAgIH0KKyAgICB1bnNldCBjb21tZmQoJGluc3QpCisgICAgdW5zZXQgYmxhbWVpbnN0CisgICAgbm90YnVzeSBibGFtaW5nCisgICAgZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDEKKyAgICBpZiB7W2NhdGNoIHtjbG9zZSAkZmR9IGVycl19IHsKKwllcnJvcl9wb3B1cCBbbWMgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIgJGVycl0KKwlyZXR1cm4gMAorICAgIH0KKworICAgIHNldCBmbmFtZSB7fQorICAgIHNldCBsaW5lIFtzcGxpdCBbbGluZGV4ICRibGFtZXN0dWZmKCRpbnN0KSAwXSAiICJdCisgICAgc2V0IGlkIFtsaW5kZXggJGxpbmUgMF0KKyAgICBzZXQgbG51bSBbbGluZGV4ICRsaW5lIDFdCisgICAgaWYge1tzdHJpbmcgbGVuZ3RoICRpZF0gPT0gNDAgJiYgW3N0cmluZyBpcyB4ZGlnaXQgJGlkXSAmJgorCVtzdHJpbmcgaXMgZGlnaXQgLXN0cmljdCAkbG51bV19IHsKKwkjIGxvb2sgZm9yICJmaWxlbmFtZSIgbGluZQorCWZvcmVhY2ggbCAkYmxhbWVzdHVmZigkaW5zdCkgeworCSAgICBpZiB7W3N0cmluZyBtYXRjaCAiZmlsZW5hbWUgKiIgJGxdfSB7CisJCXNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsIDkgZW5kXQorCQlicmVhaworCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7JGZuYW1lIG5lIHt9fSB7CisJIyBhbGwgbG9va3MgZ29vZCwgc2VsZWN0IGl0CisJaWYgeyRpZCBlcSAkbnVsbGlkfSB7CisJICAgICMgYmxhbWUgdXNlcyBhbGwtemVyb2VzIHRvIG1lYW4gbm90IGNvbW1pdHRlZCwKKwkgICAgIyB3aGljaCB3b3VsZCBtZWFuIGEgY2hhbmdlIGluIHRoZSBpbmRleAorCSAgICBzZXQgaWQgJG51bGxpZDIKKwl9CisJaWYge1tjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0geworCSAgICBzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkaWRdIDEgW2xpc3QgJGZuYW1lICRsbnVtXQorCX0gZWxzZSB7CisJICAgIGVycm9yX3BvcHVwIFttYyAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCBcCisJCQkgICAgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciIFtzaG9ydGlkcyAkaWRdXQorCX0KKyAgICB9IGVsc2UgeworCXB1dHMgIm9vcHMgY291bGRuJ3QgcGFyc2UgZ2l0IGJsYW1lIG91dHB1dCIKKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworIyBkZWxldGUgJGRpciB3aGVuIHdlIHNlZSBlb2Ygb24gJGYgKHByZXN1bWFibHkgYmVjYXVzZSB0aGUgY2hpbGQgaGFzIGV4aXRlZCkKK3Byb2MgZGVsZXRlX2F0X2VvZiB7ZiBkaXJ9IHsKKyAgICB3aGlsZSB7W2dldHMgJGYgbGluZV0gPj0gMH0ge30KKyAgICBpZiB7W2VvZiAkZl19IHsKKwlpZiB7W2NhdGNoIHtjbG9zZSAkZn0gZXJyXX0geworCSAgICBlcnJvcl9wb3B1cCAiW21jICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6Il0gJGVyciIKKwl9CisJZmlsZSBkZWxldGUgLWZvcmNlICRkaXIKKwlyZXR1cm4gMAorICAgIH0KKyAgICByZXR1cm4gMQorfQorCisjIEZ1bmN0aW9ucyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBzaGVsbC10eXBlIHF1b3RpbmcKKworcHJvYyBzaGVsbHF1b3RlIHtzdHJ9IHsKKyAgICBpZiB7IVtzdHJpbmcgbWF0Y2ggIipcWydcIlxcIFx0XSoiICRzdHJdfSB7CisJcmV0dXJuICRzdHIKKyAgICB9CisgICAgaWYgeyFbc3RyaW5nIG1hdGNoICIqXFsnXCJcXF0qIiAkc3RyXX0geworCXJldHVybiAiXCIkc3RyXCIiCisgICAgfQorICAgIGlmIHshW3N0cmluZyBtYXRjaCAiKicqIiAkc3RyXX0geworCXJldHVybiAiJyRzdHInIgorICAgIH0KKyAgICByZXR1cm4gIlwiW3N0cmluZyBtYXAge1wiIFxcXCIgXFwgXFxcXH0gJHN0cl1cIiIKK30KKworcHJvYyBzaGVsbGFyZ2xpc3Qge2x9IHsKKyAgICBzZXQgc3RyIHt9CisgICAgZm9yZWFjaCBhICRsIHsKKwlpZiB7JHN0ciBuZSB7fX0geworCSAgICBhcHBlbmQgc3RyICIgIgorCX0KKwlhcHBlbmQgc3RyIFtzaGVsbHF1b3RlICRhXQorICAgIH0KKyAgICByZXR1cm4gJHN0cgorfQorCitwcm9jIHNoZWxsZGVxdW90ZSB7c3RyfSB7CisgICAgc2V0IHJldCB7fQorICAgIHNldCB1c2VkIC0xCisgICAgd2hpbGUgezF9IHsKKwlpbmNyIHVzZWQKKwlpZiB7IVtyZWdleHAgLXN0YXJ0ICR1c2VkIC1pbmRpY2VzICJcWydcIlxcXFwgXHRdIiAkc3RyIGZpcnN0XX0geworCSAgICBhcHBlbmQgcmV0IFtzdHJpbmcgcmFuZ2UgJHN0ciAkdXNlZCBlbmRdCisJICAgIHNldCB1c2VkIFtzdHJpbmcgbGVuZ3RoICRzdHJdCisJICAgIGJyZWFrCisJfQorCXNldCBmaXJzdCBbbGluZGV4ICRmaXJzdCAwXQorCXNldCBjaCBbc3RyaW5nIGluZGV4ICRzdHIgJGZpcnN0XQorCWlmIHskZmlyc3QgPiAkdXNlZH0geworCSAgICBhcHBlbmQgcmV0IFtzdHJpbmcgcmFuZ2UgJHN0ciAkdXNlZCBbZXhwciB7JGZpcnN0IC0gMX1dXQorCSAgICBzZXQgdXNlZCAkZmlyc3QKKwl9CisJaWYgeyRjaCBlcSAiICIgfHwgJGNoIGVxICJcdCJ9IGJyZWFrCisJaW5jciB1c2VkCisJaWYgeyRjaCBlcSAiJyJ9IHsKKwkgICAgc2V0IGZpcnN0IFtzdHJpbmcgZmlyc3QgIiciICRzdHIgJHVzZWRdCisJICAgIGlmIHskZmlyc3QgPCAwfSB7CisJCWVycm9yICJ1bm1hdGNoZWQgc2luZ2xlLXF1b3RlIgorCSAgICB9CisJICAgIGFwcGVuZCByZXQgW3N0cmluZyByYW5nZSAkc3RyICR1c2VkIFtleHByIHskZmlyc3QgLSAxfV1dCisJICAgIHNldCB1c2VkICRmaXJzdAorCSAgICBjb250aW51ZQorCX0KKwlpZiB7JGNoIGVxICJcXCJ9IHsKKwkgICAgaWYgeyR1c2VkID49IFtzdHJpbmcgbGVuZ3RoICRzdHJdfSB7CisJCWVycm9yICJ0cmFpbGluZyBiYWNrc2xhc2giCisJICAgIH0KKwkgICAgYXBwZW5kIHJldCBbc3RyaW5nIGluZGV4ICRzdHIgJHVzZWRdCisJICAgIGNvbnRpbnVlCisJfQorCSMgaGVyZSBjaCA9PSAiXCIiCisJd2hpbGUgezF9IHsKKwkgICAgaWYgeyFbcmVnZXhwIC1zdGFydCAkdXNlZCAtaW5kaWNlcyAiXFtcIlxcXFxdIiAkc3RyIGZpcnN0XX0geworCQllcnJvciAidW5tYXRjaGVkIGRvdWJsZS1xdW90ZSIKKwkgICAgfQorCSAgICBzZXQgZmlyc3QgW2xpbmRleCAkZmlyc3QgMF0KKwkgICAgc2V0IGNoIFtzdHJpbmcgaW5kZXggJHN0ciAkZmlyc3RdCisJICAgIGlmIHskZmlyc3QgPiAkdXNlZH0geworCQlhcHBlbmQgcmV0IFtzdHJpbmcgcmFuZ2UgJHN0ciAkdXNlZCBbZXhwciB7JGZpcnN0IC0gMX1dXQorCQlzZXQgdXNlZCAkZmlyc3QKKwkgICAgfQorCSAgICBpZiB7JGNoIGVxICJcIiJ9IGJyZWFrCisJICAgIGluY3IgdXNlZAorCSAgICBhcHBlbmQgcmV0IFtzdHJpbmcgaW5kZXggJHN0ciAkdXNlZF0KKwkgICAgaW5jciB1c2VkCisJfQorICAgIH0KKyAgICByZXR1cm4gW2xpc3QgJHVzZWQgJHJldF0KK30KKworcHJvYyBzaGVsbHNwbGl0IHtzdHJ9IHsKKyAgICBzZXQgbCB7fQorICAgIHdoaWxlIHsxfSB7CisJc2V0IHN0ciBbc3RyaW5nIHRyaW1sZWZ0ICRzdHJdCisJaWYgeyRzdHIgZXEge319IGJyZWFrCisJc2V0IGRxIFtzaGVsbGRlcXVvdGUgJHN0cl0KKwlzZXQgbiBbbGluZGV4ICRkcSAwXQorCXNldCB3b3JkIFtsaW5kZXggJGRxIDFdCisJc2V0IHN0ciBbc3RyaW5nIHJhbmdlICRzdHIgJG4gZW5kXQorCWxhcHBlbmQgbCAkd29yZAorICAgIH0KKyAgICByZXR1cm4gJGwKK30KKworIyBDb2RlIHRvIGltcGxlbWVudCBtdWx0aXBsZSB2aWV3cworCitwcm9jIG5ld3ZpZXcge2lzaGlnaGxpZ2h0fSB7CisgICAgZ2xvYmFsIG5leHR2aWV3bnVtIG5ld3ZpZXduYW1lIG5ld2lzaGlnaGxpZ2h0CisgICAgZ2xvYmFsIHJldnRyZWVhcmdzIHZpZXdhcmdzY21kIG5ld3ZpZXdvcHRzIGN1cnZpZXcKKworICAgIHNldCBuZXdpc2hpZ2hsaWdodCAkaXNoaWdobGlnaHQKKyAgICBzZXQgdG9wIC5naXRrdmlldworICAgIGlmIHtbd2luZm8gZXhpc3RzICR0b3BdfSB7CisJcmFpc2UgJHRvcAorCXJldHVybgorICAgIH0KKyAgICBkZWNvZGVfdmlld19vcHRzICRuZXh0dmlld251bSAkcmV2dHJlZWFyZ3MKKyAgICBzZXQgbmV3dmlld25hbWUoJG5leHR2aWV3bnVtKSAiW21jICJWaWV3Il0gJG5leHR2aWV3bnVtIgorICAgIHNldCBuZXd2aWV3b3B0cygkbmV4dHZpZXdudW0scGVybSkgMAorICAgIHNldCBuZXd2aWV3b3B0cygkbmV4dHZpZXdudW0sY21kKSAgJHZpZXdhcmdzY21kKCRjdXJ2aWV3KQorICAgIHZpZXdlZGl0b3IgJHRvcCAkbmV4dHZpZXdudW0gW21jICJHaXRrIHZpZXcgZGVmaW5pdGlvbiJdCit9CisKK3NldCBrbm93bl92aWV3X29wdGlvbnMgeworICAgIHtwZXJtICAgICAgYiAgICAuICB7fSAgICAgICAgICAgICAgIHttYyAiUmVtZW1iZXIgdGhpcyB2aWV3In19CisgICAge3JlZmxhYmVsICBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6In19CisgICAge3JlZnMgICAgICB0MTUgIC4uIHt9ICAgICAgICAgICAgICAge21jICJCcmFuY2hlcyAmIHRhZ3M6In19CisgICAge2FsbHJlZnMgICBiICAgICouICItLWFsbCIgICAgICAgICAge21jICJBbGwgcmVmcyJ9fQorICAgIHticmFuY2hlcyAgYiAgICAuICAiLS1icmFuY2hlcyIgICAgIHttYyAiQWxsIChsb2NhbCkgYnJhbmNoZXMifX0KKyAgICB7dGFncyAgICAgIGIgICAgLiAgIi0tdGFncyIgICAgICAgICB7bWMgIkFsbCB0YWdzIn19CisgICAge3JlbW90ZXMgICBiICAgIC4gICItLXJlbW90ZXMiICAgICAge21jICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIn19CisgICAge2NvbW1pdGxibCBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6In19CisgICAge2F1dGhvciAgICB0MTUgIC4uICItLWF1dGhvcj0qIiAgICAge21jICJBdXRob3I6In19CisgICAge2NvbW1pdHRlciB0MTUgIC4gICItLWNvbW1pdHRlcj0qIiAge21jICJDb21taXR0ZXI6In19CisgICAge2xvZ2luZm8gICB0MTUgIC4uICItLWdyZXA9KiIgICAgICAge21jICJDb21taXQgTWVzc2FnZToifX0KKyAgICB7YWxsbWF0Y2ggIGIgICAgLi4gIi0tYWxsLW1hdGNoIiAgICB7bWMgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIn19CisgICAge2NoYW5nZXNfbCBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJDaGFuZ2VzIHRvIEZpbGVzOiJ9fQorICAgIHtwaWNrYXhlX3MgcjAgICAuICB7fSAgICAgICAgICAgICAgIHttYyAiRml4ZWQgU3RyaW5nIn19CisgICAge3BpY2theGVfdCByMSAgIC4gICItLXBpY2theGUtcmVnZXgiICB7bWMgIlJlZ3VsYXIgRXhwcmVzc2lvbiJ9fQorICAgIHtwaWNrYXhlICAgdDE1ICAuLiAiLVMqIiAgICAgICAgICAgIHttYyAiU2VhcmNoIHN0cmluZzoifX0KKyAgICB7ZGF0ZWxhYmVsIGwgICAgKyAge30gICAgICAgICAgICAgICB7bWMgIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAxNToyNzozOFwiKToifX0KKyAgICB7c2luY2UgICAgIHQxNSAgLi4gIHsiLS1zaW5jZT0qIiAiLS1hZnRlcj0qIn0gIHttYyAiU2luY2U6In19CisgICAge3VudGlsICAgICB0MTUgIC4gICB7Ii0tdW50aWw9KiIgIi0tYmVmb3JlPSoifSB7bWMgIlVudGlsOiJ9fQorICAgIHtsaW1pdF9sYmwgbCAgICArICB7fSAgICAgICAgICAgICAgIHttYyAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToifX0KKyAgICB7bGltaXQgICAgIHQxMCAgKi4gIi0tbWF4LWNvdW50PSoiICB7bWMgIk51bWJlciB0byBzaG93OiJ9fQorICAgIHtza2lwICAgICAgdDEwICAuICAiLS1za2lwPSoiICAgICAgIHttYyAiTnVtYmVyIHRvIHNraXA6In19CisgICAge21pc2NfbGJsICBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6In19CisgICAge2RvcmRlciAgICBiICAgICouIHsiLS1kYXRlLW9yZGVyIiAiLWQifSAgICAgIHttYyAiU3RyaWN0bHkgc29ydCBieSBkYXRlIn19CisgICAge2xyaWdodCAgICBiICAgIC4gICItLWxlZnQtcmlnaHQiICAge21jICJNYXJrIGJyYW5jaCBzaWRlcyJ9fQorICAgIHtmaXJzdCAgICAgYiAgICAuICAiLS1maXJzdC1wYXJlbnQiIHttYyAiTGltaXQgdG8gZmlyc3QgcGFyZW50In19CisgICAge3NtcGxoc3QgICBiICAgIC4gICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iICAge21jICJTaW1wbGUgaGlzdG9yeSJ9fQorICAgIHthcmdzICAgICAgdDUwICAqLiB7fSAgICAgICAgICAgICAgIHttYyAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoifX0KKyAgICB7YWxscGF0aHMgIHBhdGggKyAge30gICAgICAgICAgICAgICB7bWMgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6In19CisgICAge2NtZCAgICAgICB0NTA9ICsgIHt9ICAgICAgICAgICAgICAge21jICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiJ9fQorICAgIH0KKworIyBDb252ZXJ0ICRuZXd2aWV3b3B0cygkbiwgLi4uKSBpbnRvIGFyZ3MgZm9yIGdpdCBsb2cuCitwcm9jIGVuY29kZV92aWV3X29wdHMge259IHsKKyAgICBnbG9iYWwga25vd25fdmlld19vcHRpb25zIG5ld3ZpZXdvcHRzCisKKyAgICBzZXQgcmFyZ3MgW2xpc3RdCisgICAgZm9yZWFjaCBvcHQgJGtub3duX3ZpZXdfb3B0aW9ucyB7CisJc2V0IHBhdHRlcm5zIFtsaW5kZXggJG9wdCAzXQorCWlmIHskcGF0dGVybnMgZXEge319IGNvbnRpbnVlCisJc2V0IHBhdHRlcm4gW2xpbmRleCAkcGF0dGVybnMgMF0KKworCWlmIHtbbGluZGV4ICRvcHQgMV0gZXEgImIifSB7CisJICAgIHNldCB2YWwgJG5ld3ZpZXdvcHRzKCRuLFtsaW5kZXggJG9wdCAwXSkKKwkgICAgaWYgeyR2YWx9IHsKKwkJbGFwcGVuZCByYXJncyAkcGF0dGVybgorCSAgICB9CisJfSBlbHNlaWYge1tyZWdleHAge15yKFxkKykkfSBbbGluZGV4ICRvcHQgMV0gdHlwZSB2YWx1ZV19IHsKKwkgICAgcmVnZXhwIHteKC4qXyl9IFtsaW5kZXggJG9wdCAwXSB1c2VsZXNzdmFyIGJ1dHRvbl9pZAorCSAgICBzZXQgdmFsICRuZXd2aWV3b3B0cygkbiwkYnV0dG9uX2lkKQorCSAgICBpZiB7JHZhbCBlcSAkdmFsdWV9IHsKKwkJbGFwcGVuZCByYXJncyAkcGF0dGVybgorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgc2V0IHZhbCAkbmV3dmlld29wdHMoJG4sW2xpbmRleCAkb3B0IDBdKQorCSAgICBzZXQgdmFsIFtzdHJpbmcgdHJpbSAkdmFsXQorCSAgICBpZiB7JHZhbCBuZSB7fX0geworCQlzZXQgcGZpeCBbc3RyaW5nIHJhbmdlICRwYXR0ZXJuIDAgZW5kLTFdCisJCWxhcHBlbmQgcmFyZ3MgJHBmaXgkdmFsCisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCByYXJncyBbY29uY2F0ICRyYXJncyBbc2hlbGxzcGxpdCAkbmV3dmlld29wdHMoJG4scmVmcyldXQorICAgIHJldHVybiBbY29uY2F0ICRyYXJncyBbc2hlbGxzcGxpdCAkbmV3dmlld29wdHMoJG4sYXJncyldXQorfQorCisjIEZpbGwgJG5ld3ZpZXdvcHRzKCRuLCAuLi4pIGJhc2VkIG9uIGFyZ3MgZm9yIGdpdCBsb2cuCitwcm9jIGRlY29kZV92aWV3X29wdHMge24gdmlld19hcmdzfSB7CisgICAgZ2xvYmFsIGtub3duX3ZpZXdfb3B0aW9ucyBuZXd2aWV3b3B0cworCisgICAgZm9yZWFjaCBvcHQgJGtub3duX3ZpZXdfb3B0aW9ucyB7CisJc2V0IGlkIFtsaW5kZXggJG9wdCAwXQorCWlmIHtbbGluZGV4ICRvcHQgMV0gZXEgImIifSB7CisJICAgICMgQ2hlY2tib3hlcworCSAgICBzZXQgdmFsIDAKKyAgICAgICAgfSBlbHNlaWYge1tyZWdleHAge15yKFxkKykkfSBbbGluZGV4ICRvcHQgMV1dfSB7CisJICAgICMgUmFkaW9idXR0b25zCisJICAgIHJlZ2V4cCB7XiguKl8pfSAkaWQgdXNlbGVzc3ZhciBpZAorCSAgICBzZXQgdmFsIDAKKwl9IGVsc2UgeworCSAgICAjIFRleHQgZmllbGRzCisJICAgIHNldCB2YWwge30KKwl9CisJc2V0IG5ld3ZpZXdvcHRzKCRuLCRpZCkgJHZhbAorICAgIH0KKyAgICBzZXQgb2FyZ3MgW2xpc3RdCisgICAgc2V0IHJlZmFyZ3MgW2xpc3RdCisgICAgZm9yZWFjaCBhcmcgJHZpZXdfYXJncyB7CisJaWYge1tyZWdleHAgLS0ge14tKFswLTldKykkfSAkYXJnIGFyZyBjbnRdCisJICAgICYmICFbaW5mbyBleGlzdHMgZm91bmQobGltaXQpXX0geworCSAgICBzZXQgbmV3dmlld29wdHMoJG4sbGltaXQpICRjbnQKKwkgICAgc2V0IGZvdW5kKGxpbWl0KSAxCisJICAgIGNvbnRpbnVlCisJfQorCWNhdGNoIHsgdW5zZXQgdmFsIH0KKwlmb3JlYWNoIG9wdCAka25vd25fdmlld19vcHRpb25zIHsKKwkgICAgc2V0IGlkIFtsaW5kZXggJG9wdCAwXQorCSAgICBpZiB7W2luZm8gZXhpc3RzIGZvdW5kKCRpZCldfSBjb250aW51ZQorCSAgICBmb3JlYWNoIHBhdHRlcm4gW2xpbmRleCAkb3B0IDNdIHsKKwkJaWYgeyFbc3RyaW5nIG1hdGNoICRwYXR0ZXJuICRhcmddfSBjb250aW51ZQorCQlpZiB7W2xpbmRleCAkb3B0IDFdIGVxICJiIn0geworCQkgICAgIyBDaGVjayBidXR0b25zCisJCSAgICBzZXQgdmFsIDEKKwkJfSBlbHNlaWYge1tyZWdleHAge15yKFxkKykkfSBbbGluZGV4ICRvcHQgMV0gbWF0Y2ggbnVtXX0geworCQkgICAgIyBSYWRpbyBidXR0b25zCisJCSAgICByZWdleHAge14oLipfKX0gJGlkIHVzZWxlc3N2YXIgaWQKKwkJICAgIHNldCB2YWwgJG51bQorCQl9IGVsc2UgeworCQkgICAgIyBUZXh0IGlucHV0IGZpZWxkcworCQkgICAgc2V0IHNpemUgW3N0cmluZyBsZW5ndGggJHBhdHRlcm5dCisJCSAgICBzZXQgdmFsIFtzdHJpbmcgcmFuZ2UgJGFyZyBbZXhwciB7JHNpemUtMX1dIGVuZF0KKwkJfQorCQlzZXQgbmV3dmlld29wdHMoJG4sJGlkKSAkdmFsCisJCXNldCBmb3VuZCgkaWQpIDEKKwkJYnJlYWsKKwkgICAgfQorCSAgICBpZiB7W2luZm8gZXhpc3RzIHZhbF19IGJyZWFrCisJfQorCWlmIHtbaW5mbyBleGlzdHMgdmFsXX0gY29udGludWUKKwlpZiB7W3JlZ2V4cCB7Xi19ICRhcmddfSB7CisJICAgIGxhcHBlbmQgb2FyZ3MgJGFyZworCX0gZWxzZSB7CisJICAgIGxhcHBlbmQgcmVmYXJncyAkYXJnCisJfQorICAgIH0KKyAgICBzZXQgbmV3dmlld29wdHMoJG4scmVmcykgW3NoZWxsYXJnbGlzdCAkcmVmYXJnc10KKyAgICBzZXQgbmV3dmlld29wdHMoJG4sYXJncykgW3NoZWxsYXJnbGlzdCAkb2FyZ3NdCit9CisKK3Byb2MgZWRpdF9vcl9uZXd2aWV3IHt9IHsKKyAgICBnbG9iYWwgY3VydmlldworCisgICAgaWYgeyRjdXJ2aWV3ID4gMH0geworCWVkaXR2aWV3CisgICAgfSBlbHNlIHsKKwluZXd2aWV3IDAKKyAgICB9Cit9CisKK3Byb2MgZWRpdHZpZXcge30geworICAgIGdsb2JhbCBjdXJ2aWV3CisgICAgZ2xvYmFsIHZpZXduYW1lIHZpZXdwZXJtIG5ld3ZpZXduYW1lIG5ld3ZpZXdvcHRzCisgICAgZ2xvYmFsIHZpZXdhcmdzIHZpZXdhcmdzY21kCisKKyAgICBzZXQgdG9wIC5naXRrdmVkaXQtJGN1cnZpZXcKKyAgICBpZiB7W3dpbmZvIGV4aXN0cyAkdG9wXX0geworCXJhaXNlICR0b3AKKwlyZXR1cm4KKyAgICB9CisgICAgZGVjb2RlX3ZpZXdfb3B0cyAkY3VydmlldyAkdmlld2FyZ3MoJGN1cnZpZXcpCisgICAgc2V0IG5ld3ZpZXduYW1lKCRjdXJ2aWV3KSAgICAgICR2aWV3bmFtZSgkY3VydmlldykKKyAgICBzZXQgbmV3dmlld29wdHMoJGN1cnZpZXcscGVybSkgJHZpZXdwZXJtKCRjdXJ2aWV3KQorICAgIHNldCBuZXd2aWV3b3B0cygkY3VydmlldyxjbWQpICAkdmlld2FyZ3NjbWQoJGN1cnZpZXcpCisgICAgdmlld2VkaXRvciAkdG9wICRjdXJ2aWV3ICJbbWMgIkdpdGs6IGVkaXQgdmlldyJdICR2aWV3bmFtZSgkY3VydmlldykiCit9CisKK3Byb2Mgdmlld2VkaXRvciB7dG9wIG4gdGl0bGV9IHsKKyAgICBnbG9iYWwgbmV3dmlld25hbWUgbmV3dmlld29wdHMgdmlld2ZpbGVzIGJnY29sb3IKKyAgICBnbG9iYWwga25vd25fdmlld19vcHRpb25zIE5TCisKKyAgICB0dGtfdG9wbGV2ZWwgJHRvcAorICAgIHdtIHRpdGxlICR0b3AgW2NvbmNhdCAkdGl0bGUgW21jICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyJdXQorICAgIG1ha2VfdHJhbnNpZW50ICR0b3AgLgorCisgICAgIyBWaWV3IG5hbWUKKyAgICAke05TfTo6ZnJhbWUgJHRvcC5uZnIKKyAgICAke05TfTo6bGFiZWwgJHRvcC5ubCAtdGV4dCBbbWMgIlZpZXcgTmFtZSJdCisgICAgJHtOU306OmVudHJ5ICR0b3AubmFtZSAtd2lkdGggMjAgLXRleHR2YXJpYWJsZSBuZXd2aWV3bmFtZSgkbikKKyAgICBwYWNrICR0b3AubmZyIC1pbiAkdG9wIC1maWxsIHggLXBhZHkgNSAtcGFkeCAzCisgICAgcGFjayAkdG9wLm5sIC1pbiAkdG9wLm5mciAtc2lkZSBsZWZ0IC1wYWR4IHswIDV9CisgICAgcGFjayAkdG9wLm5hbWUgLWluICR0b3AubmZyIC1zaWRlIGxlZnQgLXBhZHggezAgMjV9CisKKyAgICAjIFZpZXcgb3B0aW9ucworICAgIHNldCBjZnJhbWUgJHRvcC5uZnIKKyAgICBzZXQgY2V4cGFuZCAwCisgICAgc2V0IGNudCAwCisgICAgZm9yZWFjaCBvcHQgJGtub3duX3ZpZXdfb3B0aW9ucyB7CisJc2V0IGlkIFtsaW5kZXggJG9wdCAwXQorCXNldCB0eXBlIFtsaW5kZXggJG9wdCAxXQorCXNldCBmbGFncyBbbGluZGV4ICRvcHQgMl0KKwlzZXQgdGl0bGUgW2V2YWwgW2xpbmRleCAkb3B0IDRdXQorCXNldCBseHBhZCAwCisKKwlpZiB7JGZsYWdzIGVxICIrIiB8fCAkZmxhZ3MgZXEgIioifSB7CisJICAgIHNldCBjZnJhbWUgJHRvcC5mciRjbnQKKwkgICAgaW5jciBjbnQKKwkgICAgJHtOU306OmZyYW1lICRjZnJhbWUKKwkgICAgcGFjayAkY2ZyYW1lIC1pbiAkdG9wIC1maWxsIHggLXBhZHkgMyAtcGFkeCAzCisJICAgIHNldCBjZXhwYW5kIFtleHByIHskZmxhZ3MgZXEgIioifV0KKyAgICAgICAgfSBlbHNlaWYgeyRmbGFncyBlcSAiLi4iIHx8ICRmbGFncyBlcSAiKi4ifSB7CisJICAgIHNldCBjZnJhbWUgJHRvcC5mciRjbnQKKwkgICAgaW5jciBjbnQKKwkgICAgJHtOU306OmZyYW1lICRjZnJhbWUKKwkgICAgcGFjayAkY2ZyYW1lIC1pbiAkdG9wIC1maWxsIHggLXBhZHkgMyAtcGFkeCBbbGlzdCAxNSAzXQorCSAgICBzZXQgY2V4cGFuZCBbZXhwciB7JGZsYWdzIGVxICIqLiJ9XQorCX0gZWxzZSB7CisJICAgIHNldCBseHBhZCA1CisJfQorCisJaWYgeyR0eXBlIGVxICJsIn0geworICAgICAgICAgICAgJHtOU306OmxhYmVsICRjZnJhbWUubF8kaWQgLXRleHQgJHRpdGxlCisgICAgICAgICAgICBwYWNrICRjZnJhbWUubF8kaWQgLWluICRjZnJhbWUgLXNpZGUgbGVmdCAtcGFkeSBbbGlzdCAzIDBdIC1hbmNob3IgdworCX0gZWxzZWlmIHskdHlwZSBlcSAiYiJ9IHsKKwkgICAgJHtOU306OmNoZWNrYnV0dG9uICRjZnJhbWUuY18kaWQgLXRleHQgJHRpdGxlIC12YXJpYWJsZSBuZXd2aWV3b3B0cygkbiwkaWQpCisJICAgIHBhY2sgJGNmcmFtZS5jXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSBsZWZ0IFwKKwkJLXBhZHggW2xpc3QgJGx4cGFkIDBdIC1leHBhbmQgJGNleHBhbmQgLWFuY2hvciB3CisJfSBlbHNlaWYge1tyZWdleHAge15yKFxkKykkfSAkdHlwZSB0eXBlIHN6XX0geworCSAgICByZWdleHAge14oLipfKX0gJGlkIHVzZWxlc3N2YXIgYnV0dG9uX2lkCisJICAgICR7TlN9OjpyYWRpb2J1dHRvbiAkY2ZyYW1lLmNfJGlkIC10ZXh0ICR0aXRsZSAtdmFyaWFibGUgbmV3dmlld29wdHMoJG4sJGJ1dHRvbl9pZCkgLXZhbHVlICRzegorCSAgICBwYWNrICRjZnJhbWUuY18kaWQgLWluICRjZnJhbWUgLXNpZGUgbGVmdCBcCisJCS1wYWR4IFtsaXN0ICRseHBhZCAwXSAtZXhwYW5kICRjZXhwYW5kIC1hbmNob3IgdworCX0gZWxzZWlmIHtbcmVnZXhwIHtedChcZCspJH0gJHR5cGUgdHlwZSBzel19IHsKKwkgICAgJHtOU306OmxhYmVsICRjZnJhbWUubF8kaWQgLXRleHQgJHRpdGxlCisJICAgICR7TlN9OjplbnRyeSAkY2ZyYW1lLmVfJGlkIC13aWR0aCAkc3ogLWJhY2tncm91bmQgJGJnY29sb3IgXAorCQktdGV4dHZhcmlhYmxlIG5ld3ZpZXdvcHRzKCRuLCRpZCkKKwkgICAgcGFjayAkY2ZyYW1lLmxfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIGxlZnQgLXBhZHggW2xpc3QgJGx4cGFkIDBdCisJICAgIHBhY2sgJGNmcmFtZS5lXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSBsZWZ0IC1leHBhbmQgMSAtZmlsbCB4CisJfSBlbHNlaWYge1tyZWdleHAge150KFxkKyk9JH0gJHR5cGUgdHlwZSBzel19IHsKKwkgICAgJHtOU306OmxhYmVsICRjZnJhbWUubF8kaWQgLXRleHQgJHRpdGxlCisJICAgICR7TlN9OjplbnRyeSAkY2ZyYW1lLmVfJGlkIC13aWR0aCAkc3ogLWJhY2tncm91bmQgJGJnY29sb3IgXAorCQktdGV4dHZhcmlhYmxlIG5ld3ZpZXdvcHRzKCRuLCRpZCkKKwkgICAgcGFjayAkY2ZyYW1lLmxfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIHRvcCAtcGFkeSBbbGlzdCAzIDBdIC1hbmNob3IgdworCSAgICBwYWNrICRjZnJhbWUuZV8kaWQgLWluICRjZnJhbWUgLXNpZGUgdG9wIC1maWxsIHgKKwl9IGVsc2VpZiB7JHR5cGUgZXEgInBhdGgifSB7CisJICAgICR7TlN9OjpsYWJlbCAkdG9wLmwgLXRleHQgJHRpdGxlCisJICAgIHBhY2sgJHRvcC5sIC1pbiAkdG9wIC1zaWRlIHRvcCAtcGFkeSBbbGlzdCAzIDBdIC1hbmNob3IgdyAtcGFkeCAzCisJICAgIHRleHQgJHRvcC50IC13aWR0aCA0MCAtaGVpZ2h0IDUgLWJhY2tncm91bmQgJGJnY29sb3IKKwkgICAgaWYge1tpbmZvIGV4aXN0cyB2aWV3ZmlsZXMoJG4pXX0geworCQlmb3JlYWNoIGYgJHZpZXdmaWxlcygkbikgeworCQkgICAgJHRvcC50IGluc2VydCBlbmQgJGYKKwkJICAgICR0b3AudCBpbnNlcnQgZW5kICJcbiIKKwkJfQorCQkkdG9wLnQgZGVsZXRlIHtlbmQgLSAxY30gZW5kCisJCSR0b3AudCBtYXJrIHNldCBpbnNlcnQgMC4wCisJICAgIH0KKwkgICAgcGFjayAkdG9wLnQgLWluICR0b3AgLXNpZGUgdG9wIC1wYWR5IFtsaXN0IDAgNV0gLWZpbGwgYm90aCAtZXhwYW5kIDEgLXBhZHggMworCX0KKyAgICB9CisKKyAgICAke05TfTo6ZnJhbWUgJHRvcC5idXRzCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMub2sgLXRleHQgW21jICJPSyJdIC1jb21tYW5kIFtsaXN0IG5ld3ZpZXdvayAkdG9wICRuXQorICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmFwcGx5IC10ZXh0IFttYyAiQXBwbHkgKEY1KSJdIC1jb21tYW5kIFtsaXN0IG5ld3ZpZXdvayAkdG9wICRuIDFdCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkdG9wXQorICAgIGJpbmQgJHRvcCA8Q29udHJvbC1SZXR1cm4+IFtsaXN0IG5ld3ZpZXdvayAkdG9wICRuXQorICAgIGJpbmQgJHRvcCA8RjU+IFtsaXN0IG5ld3ZpZXdvayAkdG9wICRuIDFdCisgICAgYmluZCAkdG9wIDxFc2NhcGU+IFtsaXN0IGRlc3Ryb3kgJHRvcF0KKyAgICBncmlkICR0b3AuYnV0cy5vayAkdG9wLmJ1dHMuYXBwbHkgJHRvcC5idXRzLmNhbgorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAwIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDEgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMiAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIHBhY2sgJHRvcC5idXRzIC1pbiAkdG9wIC1zaWRlIHRvcCAtZmlsbCB4CisgICAgZm9jdXMgJHRvcC50Cit9CisKK3Byb2MgZG92aWV3bWVudSB7bSBmaXJzdCBjbWQgb3AgYXJndn0geworICAgIHNldCBubWVudSBbJG0gaW5kZXggZW5kXQorICAgIGZvciB7c2V0IGkgJGZpcnN0fSB7JGkgPD0gJG5tZW51fSB7aW5jciBpfSB7CisJaWYge1skbSBlbnRyeWNnZXQgJGkgLWNvbW1hbmRdIGVxICRjbWR9IHsKKwkgICAgZXZhbCAkbSAkb3AgJGkgJGFyZ3YKKwkgICAgYnJlYWsKKwl9CisgICAgfQorfQorCitwcm9jIGFsbHZpZXdtZW51cyB7biBvcCBhcmdzfSB7CisgICAgIyBnbG9iYWwgdmlld2hsbWVudQorCisgICAgZG92aWV3bWVudSAuYmFyLnZpZXcgNSBbbGlzdCBzaG93dmlldyAkbl0gJG9wICRhcmdzCisgICAgIyBkb3ZpZXdtZW51ICR2aWV3aGxtZW51IDEgW2xpc3QgYWRkdmhpZ2hsaWdodCAkbl0gJG9wICRhcmdzCit9CisKK3Byb2MgbmV3dmlld29rIHt0b3AgbiB7YXBwbHkgMH19IHsKKyAgICBnbG9iYWwgbmV4dHZpZXdudW0gbmV3dmlld3Blcm0gbmV3dmlld25hbWUgbmV3aXNoaWdobGlnaHQKKyAgICBnbG9iYWwgdmlld25hbWUgdmlld2ZpbGVzIHZpZXdwZXJtIHNlbGVjdGVkdmlldyBjdXJ2aWV3CisgICAgZ2xvYmFsIHZpZXdhcmdzIHZpZXdhcmdzY21kIG5ld3ZpZXdvcHRzIHZpZXdobG1lbnUKKworICAgIGlmIHtbY2F0Y2ggeworCXNldCBuZXdhcmdzIFtlbmNvZGVfdmlld19vcHRzICRuXQorICAgIH0gZXJyXX0geworCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiJdICRlcnIiICR0b3AKKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGZpbGVzIHt9CisgICAgZm9yZWFjaCBmIFtzcGxpdCBbJHRvcC50IGdldCAwLjAgZW5kXSAiXG4iXSB7CisJc2V0IGZ0IFtzdHJpbmcgdHJpbSAkZl0KKwlpZiB7JGZ0IG5lIHt9fSB7CisJICAgIGxhcHBlbmQgZmlsZXMgJGZ0CisJfQorICAgIH0KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyB2aWV3ZmlsZXMoJG4pXX0geworCSMgY3JlYXRpbmcgYSBuZXcgdmlldworCWluY3IgbmV4dHZpZXdudW0KKwlzZXQgdmlld25hbWUoJG4pICRuZXd2aWV3bmFtZSgkbikKKwlzZXQgdmlld3Blcm0oJG4pICRuZXd2aWV3b3B0cygkbixwZXJtKQorCXNldCB2aWV3ZmlsZXMoJG4pICRmaWxlcworCXNldCB2aWV3YXJncygkbikgJG5ld2FyZ3MKKwlzZXQgdmlld2FyZ3NjbWQoJG4pICRuZXd2aWV3b3B0cygkbixjbWQpCisJYWRkdmlld21lbnUgJG4KKwlpZiB7ISRuZXdpc2hpZ2hsaWdodH0geworCSAgICBydW4gc2hvd3ZpZXcgJG4KKwl9IGVsc2UgeworCSAgICBydW4gYWRkdmhpZ2hsaWdodCAkbgorCX0KKyAgICB9IGVsc2UgeworCSMgZWRpdGluZyBhbiBleGlzdGluZyB2aWV3CisJc2V0IHZpZXdwZXJtKCRuKSAkbmV3dmlld29wdHMoJG4scGVybSkKKwlpZiB7JG5ld3ZpZXduYW1lKCRuKSBuZSAkdmlld25hbWUoJG4pfSB7CisJICAgIHNldCB2aWV3bmFtZSgkbikgJG5ld3ZpZXduYW1lKCRuKQorCSAgICBkb3ZpZXdtZW51IC5iYXIudmlldyA1IFtsaXN0IHNob3d2aWV3ICRuXSBcCisJCWVudHJ5Y29uZiBbbGlzdCAtbGFiZWwgJHZpZXduYW1lKCRuKV0KKwkgICAgIyBkb3ZpZXdtZW51ICR2aWV3aGxtZW51IDEgW2xpc3QgYWRkdmhpZ2hsaWdodCAkbl0gXAorCQkjIGVudHJ5Y29uZiBbbGlzdCAtbGFiZWwgJHZpZXduYW1lKCRuKSAtdmFsdWUgJHZpZXduYW1lKCRuKV0KKwl9CisJaWYgeyRmaWxlcyBuZSAkdmlld2ZpbGVzKCRuKSB8fCAkbmV3YXJncyBuZSAkdmlld2FyZ3MoJG4pIHx8IFwKKwkJJG5ld3ZpZXdvcHRzKCRuLGNtZCkgbmUgJHZpZXdhcmdzY21kKCRuKX0geworCSAgICBzZXQgdmlld2ZpbGVzKCRuKSAkZmlsZXMKKwkgICAgc2V0IHZpZXdhcmdzKCRuKSAkbmV3YXJncworCSAgICBzZXQgdmlld2FyZ3NjbWQoJG4pICRuZXd2aWV3b3B0cygkbixjbWQpCisJICAgIGlmIHskY3VydmlldyA9PSAkbn0geworCQlydW4gcmVsb2FkY29tbWl0cworCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7JGFwcGx5fSByZXR1cm4KKyAgICBjYXRjaCB7ZGVzdHJveSAkdG9wfQorfQorCitwcm9jIGRlbHZpZXcge30geworICAgIGdsb2JhbCBjdXJ2aWV3IHZpZXdwZXJtIGhsdmlldyBzZWxlY3RlZGhsdmlldworCisgICAgaWYgeyRjdXJ2aWV3ID09IDB9IHJldHVybgorICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAkaGx2aWV3ID09ICRjdXJ2aWV3fSB7CisJc2V0IHNlbGVjdGVkaGx2aWV3IFttYyAiTm9uZSJdCisJdW5zZXQgaGx2aWV3CisgICAgfQorICAgIGFsbHZpZXdtZW51cyAkY3VydmlldyBkZWxldGUKKyAgICBzZXQgdmlld3Blcm0oJGN1cnZpZXcpIDAKKyAgICBzaG93dmlldyAwCit9CisKK3Byb2MgYWRkdmlld21lbnUge259IHsKKyAgICBnbG9iYWwgdmlld25hbWUgdmlld2hsbWVudQorCisgICAgLmJhci52aWV3IGFkZCByYWRpb2J1dHRvbiAtbGFiZWwgJHZpZXduYW1lKCRuKSBcCisJLWNvbW1hbmQgW2xpc3Qgc2hvd3ZpZXcgJG5dIC12YXJpYWJsZSBzZWxlY3RlZHZpZXcgLXZhbHVlICRuCisgICAgIyR2aWV3aGxtZW51IGFkZCByYWRpb2J1dHRvbiAtbGFiZWwgJHZpZXduYW1lKCRuKSBcCisgICAgIwktY29tbWFuZCBbbGlzdCBhZGR2aGlnaGxpZ2h0ICRuXSAtdmFyaWFibGUgc2VsZWN0ZWRobHZpZXcKK30KKworcHJvYyBzaG93dmlldyB7bn0geworICAgIGdsb2JhbCBjdXJ2aWV3IGNhY2hlZF9jb21taXRyb3cgb3JkZXJ0b2sKKyAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHBhcmVudGxpc3Qgcm93aWRsaXN0IHJvd2lzb3B0IHJvd2ZpbmFsCisgICAgZ2xvYmFsIGNvbG9ybWFwIHJvd3RleHR4IG5leHRjb2xvciBjYW52eG1heAorICAgIGdsb2JhbCBudW1jb21taXRzIHZpZXdjb21wbGV0ZQorICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUgY3VycmVudGlkIGNhbnYgY2FudnkwCisgICAgZ2xvYmFsIHRyZWVkaWZmcworICAgIGdsb2JhbCBwZW5kaW5nX3NlbGVjdCBtYWluaGVhZGlkCisgICAgZ2xvYmFsIGNvbW1pdGlkeAorICAgIGdsb2JhbCBzZWxlY3RlZHZpZXcKKyAgICBnbG9iYWwgaGx2aWV3IHNlbGVjdGVkaGx2aWV3IGNvbW1pdGludGVyZXN0CisKKyAgICBpZiB7JG4gPT0gJGN1cnZpZXd9IHJldHVybgorICAgIHNldCBzZWxpZCB7fQorICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBzZXQgc3BhbiBbJGNhbnYgeXZpZXddCisgICAgc2V0IHl0b3AgW2V4cHIge1tsaW5kZXggJHNwYW4gMF0gKiAkeW1heH1dCisgICAgc2V0IHlib3QgW2V4cHIge1tsaW5kZXggJHNwYW4gMV0gKiAkeW1heH1dCisgICAgc2V0IHlzY3JlZW4gW2V4cHIgeygkeWJvdCAtICR5dG9wKSAvIDJ9XQorICAgIGlmIHskc2VsZWN0ZWRsaW5lIG5lIHt9fSB7CisJc2V0IHNlbGlkICRjdXJyZW50aWQKKwlzZXQgeSBbeWMgJHNlbGVjdGVkbGluZV0KKwlpZiB7JHl0b3AgPCAkeSAmJiAkeSA8ICR5Ym90fSB7CisJICAgIHNldCB5c2NyZWVuIFtleHByIHskeSAtICR5dG9wfV0KKwl9CisgICAgfSBlbHNlaWYge1tpbmZvIGV4aXN0cyBwZW5kaW5nX3NlbGVjdF19IHsKKwlzZXQgc2VsaWQgJHBlbmRpbmdfc2VsZWN0CisJdW5zZXQgcGVuZGluZ19zZWxlY3QKKyAgICB9CisgICAgdW5zZWxlY3RsaW5lCisgICAgbm9ybWFsbGluZQorICAgIGNhdGNoIHt1bnNldCB0cmVlZGlmZnN9CisgICAgY2xlYXJfZGlzcGxheQorICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAkaGx2aWV3ID09ICRufSB7CisJdW5zZXQgaGx2aWV3CisJc2V0IHNlbGVjdGVkaGx2aWV3IFttYyAiTm9uZSJdCisgICAgfQorICAgIGNhdGNoIHt1bnNldCBjb21taXRpbnRlcmVzdH0KKyAgICBjYXRjaCB7dW5zZXQgY2FjaGVkX2NvbW1pdHJvd30KKyAgICBjYXRjaCB7dW5zZXQgb3JkZXJ0b2t9CisKKyAgICBzZXQgY3VydmlldyAkbgorICAgIHNldCBzZWxlY3RlZHZpZXcgJG4KKyAgICAuYmFyLnZpZXcgZW50cnljb25mIFttY2EgIkVkaXQgdmlldy4uLiJdIC1zdGF0ZSBbZXhwciB7JG4gPT0gMD8gImRpc2FibGVkIjogIm5vcm1hbCJ9XQorICAgIC5iYXIudmlldyBlbnRyeWNvbmYgW21jYSAiRGVsZXRlIHZpZXciXSAtc3RhdGUgW2V4cHIgeyRuID09IDA/ICJkaXNhYmxlZCI6ICJub3JtYWwifV0KKworICAgIHJ1biByZWZpbGxfcmVmbGlzdAorICAgIGlmIHshW2luZm8gZXhpc3RzIHZpZXdjb21wbGV0ZSgkbildfSB7CisJZ2V0Y29tbWl0cyAkc2VsaWQKKwlyZXR1cm4KKyAgICB9CisKKyAgICBzZXQgZGlzcGxheW9yZGVyIHt9CisgICAgc2V0IHBhcmVudGxpc3Qge30KKyAgICBzZXQgcm93aWRsaXN0IHt9CisgICAgc2V0IHJvd2lzb3B0IHt9CisgICAgc2V0IHJvd2ZpbmFsIHt9CisgICAgc2V0IG51bWNvbW1pdHMgJGNvbW1pdGlkeCgkbikKKworICAgIGNhdGNoIHt1bnNldCBjb2xvcm1hcH0KKyAgICBjYXRjaCB7dW5zZXQgcm93dGV4dHh9CisgICAgc2V0IG5leHRjb2xvciAwCisgICAgc2V0IGNhbnZ4bWF4IFskY2FudiBjZ2V0IC13aWR0aF0KKyAgICBzZXQgY3VydmlldyAkbgorICAgIHNldCByb3cgMAorICAgIHNldGNhbnZzY3JvbGwKKyAgICBzZXQgeWYgMAorICAgIHNldCByb3cge30KKyAgICBpZiB7JHNlbGlkIG5lIHt9ICYmIFtjb21taXRpbnZpZXcgJHNlbGlkICRuXX0geworCXNldCByb3cgW3Jvd29mY29tbWl0ICRzZWxpZF0KKwkjIHRyeSB0byBnZXQgdGhlIHNlbGVjdGVkIHJvdyBpbiB0aGUgc2FtZSBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuCisJc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQorCXNldCB5dG9wIFtleHByIHtbeWMgJHJvd10gLSAkeXNjcmVlbn1dCisJaWYgeyR5dG9wIDwgMH0geworCSAgICBzZXQgeXRvcCAwCisJfQorCXNldCB5ZiBbZXhwciB7JHl0b3AgKiAxLjAgLyAkeW1heH1dCisgICAgfQorICAgIGFsbGNhbnZzIHl2aWV3IG1vdmV0byAkeWYKKyAgICBkcmF3dmlzaWJsZQorICAgIGlmIHskcm93IG5lIHt9fSB7CisJc2VsZWN0bGluZSAkcm93IDAKKyAgICB9IGVsc2VpZiB7ISR2aWV3Y29tcGxldGUoJG4pfSB7CisJcmVzZXRfcGVuZGluZ19zZWxlY3QgJHNlbGlkCisgICAgfSBlbHNlIHsKKwlyZXNldF9wZW5kaW5nX3NlbGVjdCB7fQorCisJaWYge1tjb21taXRpbnZpZXcgJHBlbmRpbmdfc2VsZWN0ICRjdXJ2aWV3XX0geworCSAgICBzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkcGVuZGluZ19zZWxlY3RdIDEKKwl9IGVsc2UgeworCSAgICBzZXQgcm93IFtmaXJzdF9yZWFsX3Jvd10KKwkgICAgaWYgeyRyb3cgPCAkbnVtY29tbWl0c30geworCQlzZWxlY3RsaW5lICRyb3cgMAorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7ISR2aWV3Y29tcGxldGUoJG4pfSB7CisJaWYgeyRudW1jb21taXRzID09IDB9IHsKKwkgICAgc2hvd19zdGF0dXMgW21jICJSZWFkaW5nIGNvbW1pdHMuLi4iXQorCX0KKyAgICB9IGVsc2VpZiB7JG51bWNvbW1pdHMgPT0gMH0geworCXNob3dfc3RhdHVzIFttYyAiTm8gY29tbWl0cyBzZWxlY3RlZCJdCisgICAgfQorfQorCisjIFN0dWZmIHJlbGF0aW5nIHRvIHRoZSBoaWdobGlnaHRpbmcgZmFjaWxpdHkKKworcHJvYyBpc2hpZ2hsaWdodGVkIHtpZH0geworICAgIGdsb2JhbCB2aGlnaGxpZ2h0cyBmaGlnaGxpZ2h0cyBuaGlnaGxpZ2h0cyByaGlnaGxpZ2h0cworCisgICAgaWYge1tpbmZvIGV4aXN0cyBuaGlnaGxpZ2h0cygkaWQpXSAmJiAkbmhpZ2hsaWdodHMoJGlkKSA+IDB9IHsKKwlyZXR1cm4gJG5oaWdobGlnaHRzKCRpZCkKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyB2aGlnaGxpZ2h0cygkaWQpXSAmJiAkdmhpZ2hsaWdodHMoJGlkKSA+IDB9IHsKKwlyZXR1cm4gJHZoaWdobGlnaHRzKCRpZCkKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBmaGlnaGxpZ2h0cygkaWQpXSAmJiAkZmhpZ2hsaWdodHMoJGlkKSA+IDB9IHsKKwlyZXR1cm4gJGZoaWdobGlnaHRzKCRpZCkKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyByaGlnaGxpZ2h0cygkaWQpXSAmJiAkcmhpZ2hsaWdodHMoJGlkKSA+IDB9IHsKKwlyZXR1cm4gJHJoaWdobGlnaHRzKCRpZCkKKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworcHJvYyBib2xkZW4ge2lkIGZvbnR9IHsKKyAgICBnbG9iYWwgY2FudiBsaW5laHRhZyBjdXJyZW50aWQgYm9sZGlkcyBuZWVkX3JlZGlzcGxheSBtYXJrZWRpZAorCisgICAgIyBuZWVkX3JlZGlzcGxheSA9IDEgbWVhbnMgdGhlIGRpc3BsYXkgaXMgc3RhbGUgYW5kIGFib3V0IHRvIGJlIHJlZHJhd24KKyAgICBpZiB7JG5lZWRfcmVkaXNwbGF5fSByZXR1cm4KKyAgICBsYXBwZW5kIGJvbGRpZHMgJGlkCisgICAgJGNhbnYgaXRlbWNvbmYgJGxpbmVodGFnKCRpZCkgLWZvbnQgJGZvbnQKKyAgICBpZiB7W2luZm8gZXhpc3RzIGN1cnJlbnRpZF0gJiYgJGlkIGVxICRjdXJyZW50aWR9IHsKKwkkY2FudiBkZWxldGUgc2Vjc2VsCisJc2V0IHQgW2V2YWwgJGNhbnYgY3JlYXRlIHJlY3QgWyRjYW52IGJib3ggJGxpbmVodGFnKCRpZCldIFwKKwkJICAgLW91dGxpbmUge3t9fSAtdGFncyBzZWNzZWwgXAorCQkgICAtZmlsbCBbJGNhbnYgY2dldCAtc2VsZWN0YmFja2dyb3VuZF1dCisJJGNhbnYgbG93ZXIgJHQKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBtYXJrZWRpZF0gJiYgJGlkIGVxICRtYXJrZWRpZH0geworCW1ha2VfaWRtYXJrICRpZAorICAgIH0KK30KKworcHJvYyBib2xkZW5fbmFtZSB7aWQgZm9udH0geworICAgIGdsb2JhbCBjYW52MiBsaW5lbnRhZyBjdXJyZW50aWQgYm9sZG5hbWVpZHMgbmVlZF9yZWRpc3BsYXkKKworICAgIGlmIHskbmVlZF9yZWRpc3BsYXl9IHJldHVybgorICAgIGxhcHBlbmQgYm9sZG5hbWVpZHMgJGlkCisgICAgJGNhbnYyIGl0ZW1jb25mICRsaW5lbnRhZygkaWQpIC1mb250ICRmb250CisgICAgaWYge1tpbmZvIGV4aXN0cyBjdXJyZW50aWRdICYmICRpZCBlcSAkY3VycmVudGlkfSB7CisJJGNhbnYyIGRlbGV0ZSBzZWNzZWwKKwlzZXQgdCBbZXZhbCAkY2FudjIgY3JlYXRlIHJlY3QgWyRjYW52MiBiYm94ICRsaW5lbnRhZygkaWQpXSBcCisJCSAgIC1vdXRsaW5lIHt7fX0gLXRhZ3Mgc2Vjc2VsIFwKKwkJICAgLWZpbGwgWyRjYW52MiBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXV0KKwkkY2FudjIgbG93ZXIgJHQKKyAgICB9Cit9CisKK3Byb2MgdW5ib2xkZW4ge30geworICAgIGdsb2JhbCBib2xkaWRzCisKKyAgICBzZXQgc3RpbGxib2xkIHt9CisgICAgZm9yZWFjaCBpZCAkYm9sZGlkcyB7CisJaWYgeyFbaXNoaWdobGlnaHRlZCAkaWRdfSB7CisJICAgIGJvbGRlbiAkaWQgbWFpbmZvbnQKKwl9IGVsc2UgeworCSAgICBsYXBwZW5kIHN0aWxsYm9sZCAkaWQKKwl9CisgICAgfQorICAgIHNldCBib2xkaWRzICRzdGlsbGJvbGQKK30KKworcHJvYyBhZGR2aGlnaGxpZ2h0IHtufSB7CisgICAgZ2xvYmFsIGhsdmlldyB2aWV3Y29tcGxldGUgY3VydmlldyB2aGxfZG9uZSBjb21taXRpZHgKKworICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XX0geworCWRlbHZoaWdobGlnaHQKKyAgICB9CisgICAgc2V0IGhsdmlldyAkbgorICAgIGlmIHskbiAhPSAkY3VydmlldyAmJiAhW2luZm8gZXhpc3RzIHZpZXdjb21wbGV0ZSgkbildfSB7CisJc3RhcnRfcmV2X2xpc3QgJG4KKyAgICB9CisgICAgc2V0IHZobF9kb25lICRjb21taXRpZHgoJGhsdmlldykKKyAgICBpZiB7JHZobF9kb25lID4gMH0geworCWRyYXd2aXNpYmxlCisgICAgfQorfQorCitwcm9jIGRlbHZoaWdobGlnaHQge30geworICAgIGdsb2JhbCBobHZpZXcgdmhpZ2hsaWdodHMKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGhsdmlld119IHJldHVybgorICAgIHVuc2V0IGhsdmlldworICAgIGNhdGNoIHt1bnNldCB2aGlnaGxpZ2h0c30KKyAgICB1bmJvbGRlbgorfQorCitwcm9jIHZoaWdobGlnaHRtb3JlIHt9IHsKKyAgICBnbG9iYWwgaGx2aWV3IHZobF9kb25lIGNvbW1pdGlkeCB2aGlnaGxpZ2h0cyBjdXJ2aWV3CisKKyAgICBzZXQgbWF4ICRjb21taXRpZHgoJGhsdmlldykKKyAgICBzZXQgdnIgW3Zpc2libGVyb3dzXQorICAgIHNldCByMCBbbGluZGV4ICR2ciAwXQorICAgIHNldCByMSBbbGluZGV4ICR2ciAxXQorICAgIGZvciB7c2V0IGkgJHZobF9kb25lfSB7JGkgPCAkbWF4fSB7aW5jciBpfSB7CisJc2V0IGlkIFtjb21taXRvbnJvdyAkaSAkaGx2aWV3XQorCWlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwkgICAgc2V0IHJvdyBbcm93b2Zjb21taXQgJGlkXQorCSAgICBpZiB7JHIwIDw9ICRyb3cgJiYgJHJvdyA8PSAkcjF9IHsKKwkJaWYgeyFbaGlnaGxpZ2h0ZWQgJHJvd119IHsKKwkJICAgIGJvbGRlbiAkaWQgbWFpbmZvbnRib2xkCisJCX0KKwkJc2V0IHZoaWdobGlnaHRzKCRpZCkgMQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgdmhsX2RvbmUgJG1heAorICAgIHJldHVybiAwCit9CisKK3Byb2MgYXNrdmhpZ2hsaWdodCB7cm93IGlkfSB7CisgICAgZ2xvYmFsIGhsdmlldyB2aGlnaGxpZ2h0cyBpZGRyYXduCisKKyAgICBpZiB7W2NvbW1pdGludmlldyAkaWQgJGhsdmlld119IHsKKwlpZiB7W2luZm8gZXhpc3RzIGlkZHJhd24oJGlkKV0gJiYgIVtpc2hpZ2hsaWdodGVkICRpZF19IHsKKwkgICAgYm9sZGVuICRpZCBtYWluZm9udGJvbGQKKwl9CisJc2V0IHZoaWdobGlnaHRzKCRpZCkgMQorICAgIH0gZWxzZSB7CisJc2V0IHZoaWdobGlnaHRzKCRpZCkgMAorICAgIH0KK30KKworcHJvYyBoZmlsZXNfY2hhbmdlIHt9IHsKKyAgICBnbG9iYWwgaGlnaGxpZ2h0X2ZpbGVzIGZpbGVoaWdobGlnaHQgZmhpZ2hsaWdodHMgZmhfc2VyaWFsCisgICAgZ2xvYmFsIGhpZ2hsaWdodF9wYXRocworCisgICAgaWYge1tpbmZvIGV4aXN0cyBmaWxlaGlnaGxpZ2h0XX0geworCSMgZGVsZXRlIHByZXZpb3VzIGhpZ2hsaWdodHMKKwljYXRjaCB7Y2xvc2UgJGZpbGVoaWdobGlnaHR9CisJdW5zZXQgZmlsZWhpZ2hsaWdodAorCWNhdGNoIHt1bnNldCBmaGlnaGxpZ2h0c30KKwl1bmJvbGRlbgorCXVuaGlnaGxpZ2h0X2ZpbGVsaXN0CisgICAgfQorICAgIHNldCBoaWdobGlnaHRfcGF0aHMge30KKyAgICBhZnRlciBjYW5jZWwgZG9fZmlsZV9obCAkZmhfc2VyaWFsCisgICAgaW5jciBmaF9zZXJpYWwKKyAgICBpZiB7JGhpZ2hsaWdodF9maWxlcyBuZSB7fX0geworCWFmdGVyIDMwMCBkb19maWxlX2hsICRmaF9zZXJpYWwKKyAgICB9Cit9CisKK3Byb2MgZ2R0dHlwZV9jaGFuZ2Uge25hbWUgaXggb3B9IHsKKyAgICBnbG9iYWwgZ2R0dHlwZSBoaWdobGlnaHRfZmlsZXMgZmluZHN0cmluZyBmaW5kcGF0dGVybgorCisgICAgc3RvcGZpbmRpbmcKKyAgICBpZiB7JGZpbmRzdHJpbmcgbmUge319IHsKKwlpZiB7JGdkdHR5cGUgZXEgW21jICJjb250YWluaW5nOiJdfSB7CisJICAgIGlmIHskaGlnaGxpZ2h0X2ZpbGVzIG5lIHt9fSB7CisJCXNldCBoaWdobGlnaHRfZmlsZXMge30KKwkJaGZpbGVzX2NoYW5nZQorCSAgICB9CisJICAgIGZpbmRjb21fY2hhbmdlCisJfSBlbHNlIHsKKwkgICAgaWYgeyRmaW5kcGF0dGVybiBuZSB7fX0geworCQlzZXQgZmluZHBhdHRlcm4ge30KKwkJZmluZGNvbV9jaGFuZ2UKKwkgICAgfQorCSAgICBzZXQgaGlnaGxpZ2h0X2ZpbGVzICRmaW5kc3RyaW5nCisJICAgIGhmaWxlc19jaGFuZ2UKKwl9CisJZHJhd3Zpc2libGUKKyAgICB9CisgICAgIyBlbmFibGUvZGlzYWJsZSBmaW5kdHlwZS9maW5kbG9jIG1lbnVzIHRvbworfQorCitwcm9jIGZpbmRfY2hhbmdlIHtuYW1lIGl4IG9wfSB7CisgICAgZ2xvYmFsIGdkdHR5cGUgZmluZHN0cmluZyBoaWdobGlnaHRfZmlsZXMKKworICAgIHN0b3BmaW5kaW5nCisgICAgaWYgeyRnZHR0eXBlIGVxIFttYyAiY29udGFpbmluZzoiXX0geworCWZpbmRjb21fY2hhbmdlCisgICAgfSBlbHNlIHsKKwlpZiB7JGhpZ2hsaWdodF9maWxlcyBuZSAkZmluZHN0cmluZ30geworCSAgICBzZXQgaGlnaGxpZ2h0X2ZpbGVzICRmaW5kc3RyaW5nCisJICAgIGhmaWxlc19jaGFuZ2UKKwl9CisgICAgfQorICAgIGRyYXd2aXNpYmxlCit9CisKK3Byb2MgZmluZGNvbV9jaGFuZ2UgYXJncyB7CisgICAgZ2xvYmFsIG5oaWdobGlnaHRzIGJvbGRuYW1laWRzCisgICAgZ2xvYmFsIGZpbmRwYXR0ZXJuIGZpbmR0eXBlIGZpbmRzdHJpbmcgZ2R0dHlwZQorCisgICAgc3RvcGZpbmRpbmcKKyAgICAjIGRlbGV0ZSBwcmV2aW91cyBoaWdobGlnaHRzLCBpZiBhbnkKKyAgICBmb3JlYWNoIGlkICRib2xkbmFtZWlkcyB7CisJYm9sZGVuX25hbWUgJGlkIG1haW5mb250CisgICAgfQorICAgIHNldCBib2xkbmFtZWlkcyB7fQorICAgIGNhdGNoIHt1bnNldCBuaGlnaGxpZ2h0c30KKyAgICB1bmJvbGRlbgorICAgIHVubWFya21hdGNoZXMKKyAgICBpZiB7JGdkdHR5cGUgbmUgW21jICJjb250YWluaW5nOiJdIHx8ICRmaW5kc3RyaW5nIGVxIHt9fSB7CisJc2V0IGZpbmRwYXR0ZXJuIHt9CisgICAgfSBlbHNlaWYgeyRmaW5kdHlwZSBlcSBbbWMgIlJlZ2V4cCJdfSB7CisJc2V0IGZpbmRwYXR0ZXJuICRmaW5kc3RyaW5nCisgICAgfSBlbHNlIHsKKwlzZXQgZSBbc3RyaW5nIG1hcCB7IioiICJcXCoiICI/IiAiXFw/IiAiXFsiICJcXFxbIiAiXFwiICJcXFxcIn0gXAorCQkgICAkZmluZHN0cmluZ10KKwlzZXQgZmluZHBhdHRlcm4gIiokZSoiCisgICAgfQorfQorCitwcm9jIG1ha2VwYXR0ZXJucyB7bH0geworICAgIHNldCByZXQge30KKyAgICBmb3JlYWNoIGUgJGwgeworCXNldCBlZSBbc3RyaW5nIG1hcCB7IioiICJcXCoiICI/IiAiXFw/IiAiXFsiICJcXFxbIiAiXFwiICJcXFxcIn0gJGVdCisJaWYge1tzdHJpbmcgaW5kZXggJGVlIGVuZF0gZXEgIi8ifSB7CisJICAgIGxhcHBlbmQgcmV0ICIkZWUqIgorCX0gZWxzZSB7CisJICAgIGxhcHBlbmQgcmV0ICRlZQorCSAgICBsYXBwZW5kIHJldCAiJGVlLyoiCisJfQorICAgIH0KKyAgICByZXR1cm4gJHJldAorfQorCitwcm9jIGRvX2ZpbGVfaGwge3NlcmlhbH0geworICAgIGdsb2JhbCBoaWdobGlnaHRfZmlsZXMgZmlsZWhpZ2hsaWdodCBoaWdobGlnaHRfcGF0aHMgZ2R0dHlwZSBmaGxfbGlzdAorICAgIGdsb2JhbCBjZHVwIGZpbmR0eXBlCisKKyAgICBpZiB7JGdkdHR5cGUgZXEgW21jICJ0b3VjaGluZyBwYXRoczoiXX0geworCSMgSWYgImV4YWN0IiBtYXRjaCB0aGVuIGNvbnZlcnQgYmFja3NsYXNoZXMgdG8gZm9yd2FyZCBzbGFzaGVzLgorCSMgTW9zdCB1c2VmdWwgdG8gc3VwcG9ydCBXaW5kb3dzLWZsYXZvdXJlZCBmaWxlIHBhdGhzLgorCWlmIHskZmluZHR5cGUgZXEgW21jICJFeGFjdCJdfSB7CisJICAgIHNldCBoaWdobGlnaHRfZmlsZXMgW3N0cmluZyBtYXAgeyJcXCIgIi8ifSAkaGlnaGxpZ2h0X2ZpbGVzXQorCX0KKwlpZiB7W2NhdGNoIHtzZXQgcGF0aHMgW3NoZWxsc3BsaXQgJGhpZ2hsaWdodF9maWxlc119XX0gcmV0dXJuCisJc2V0IGhpZ2hsaWdodF9wYXRocyBbbWFrZXBhdHRlcm5zICRwYXRoc10KKwloaWdobGlnaHRfZmlsZWxpc3QKKwlzZXQgcmVsYXRpdmVfcGF0aHMge30KKwlmb3JlYWNoIHBhdGggJHBhdGhzIHsKKwkgICAgbGFwcGVuZCByZWxhdGl2ZV9wYXRocyBbZmlsZSBqb2luICRjZHVwICRwYXRoXQorCX0KKwlzZXQgZ2R0YXJncyBbY29uY2F0IC0tICRyZWxhdGl2ZV9wYXRoc10KKyAgICB9IGVsc2VpZiB7JGdkdHR5cGUgZXEgW21jICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiJdfSB7CisJc2V0IGdkdGFyZ3MgW2xpc3QgIi1TJGhpZ2hsaWdodF9maWxlcyJdCisgICAgfSBlbHNlIHsKKwkjIG11c3QgYmUgImNvbnRhaW5pbmc6IiwgaS5lLiB3ZSdyZSBzZWFyY2hpbmcgY29tbWl0IGluZm8KKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGNtZCBbY29uY2F0IHwgZ2l0IGRpZmYtdHJlZSAtciAtcyAtLXN0ZGluICRnZHRhcmdzXQorICAgIHNldCBmaWxlaGlnaGxpZ2h0IFtvcGVuICRjbWQgcitdCisgICAgZmNvbmZpZ3VyZSAkZmlsZWhpZ2hsaWdodCAtYmxvY2tpbmcgMAorICAgIGZpbGVydW4gJGZpbGVoaWdobGlnaHQgcmVhZGZoaWdobGlnaHQKKyAgICBzZXQgZmhsX2xpc3Qge30KKyAgICBkcmF3dmlzaWJsZQorICAgIGZsdXNoaGlnaGxpZ2h0cworfQorCitwcm9jIGZsdXNoaGlnaGxpZ2h0cyB7fSB7CisgICAgZ2xvYmFsIGZpbGVoaWdobGlnaHQgZmhsX2xpc3QKKworICAgIGlmIHtbaW5mbyBleGlzdHMgZmlsZWhpZ2hsaWdodF19IHsKKwlsYXBwZW5kIGZobF9saXN0IHt9CisJcHV0cyAkZmlsZWhpZ2hsaWdodCAiIgorCWZsdXNoICRmaWxlaGlnaGxpZ2h0CisgICAgfQorfQorCitwcm9jIGFza2ZpbGVoaWdobGlnaHQge3JvdyBpZH0geworICAgIGdsb2JhbCBmaWxlaGlnaGxpZ2h0IGZoaWdobGlnaHRzIGZobF9saXN0CisKKyAgICBsYXBwZW5kIGZobF9saXN0ICRpZAorICAgIHNldCBmaGlnaGxpZ2h0cygkaWQpIC0xCisgICAgcHV0cyAkZmlsZWhpZ2hsaWdodCAkaWQKK30KKworcHJvYyByZWFkZmhpZ2hsaWdodCB7fSB7CisgICAgZ2xvYmFsIGZpbGVoaWdobGlnaHQgZmhpZ2hsaWdodHMgY3VydmlldyBpZGRyYXduCisgICAgZ2xvYmFsIGZobF9saXN0IGZpbmRfZGlybgorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgZmlsZWhpZ2hsaWdodF19IHsKKwlyZXR1cm4gMAorICAgIH0KKyAgICBzZXQgbnIgMAorICAgIHdoaWxlIHtbaW5jciBucl0gPD0gMTAwICYmIFtnZXRzICRmaWxlaGlnaGxpZ2h0IGxpbmVdID49IDB9IHsKKwlzZXQgbGluZSBbc3RyaW5nIHRyaW0gJGxpbmVdCisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRmaGxfbGlzdCAkbGluZV0KKwlpZiB7JGkgPCAwfSBjb250aW51ZQorCWZvciB7c2V0IGogMH0geyRqIDwgJGl9IHtpbmNyIGp9IHsKKwkgICAgc2V0IGlkIFtsaW5kZXggJGZobF9saXN0ICRqXQorCSAgICBzZXQgZmhpZ2hsaWdodHMoJGlkKSAwCisJfQorCXNldCBmaGxfbGlzdCBbbHJhbmdlICRmaGxfbGlzdCBbZXhwciB7JGkrMX1dIGVuZF0KKwlpZiB7JGxpbmUgZXEge319IGNvbnRpbnVlCisJaWYgeyFbY29tbWl0aW52aWV3ICRsaW5lICRjdXJ2aWV3XX0gY29udGludWUKKwlpZiB7W2luZm8gZXhpc3RzIGlkZHJhd24oJGxpbmUpXSAmJiAhW2lzaGlnaGxpZ2h0ZWQgJGxpbmVdfSB7CisJICAgIGJvbGRlbiAkbGluZSBtYWluZm9udGJvbGQKKwl9CisJc2V0IGZoaWdobGlnaHRzKCRsaW5lKSAxCisgICAgfQorICAgIGlmIHtbZW9mICRmaWxlaGlnaGxpZ2h0XX0geworCSMgc3RyYW5nZS4uLgorCXB1dHMgIm9vcHMsIGdpdCBkaWZmLXRyZWUgZGllZCIKKwljYXRjaCB7Y2xvc2UgJGZpbGVoaWdobGlnaHR9CisJdW5zZXQgZmlsZWhpZ2hsaWdodAorCXJldHVybiAwCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgZmluZF9kaXJuXX0geworCXJ1biBmaW5kbW9yZQorICAgIH0KKyAgICByZXR1cm4gMQorfQorCitwcm9jIGRvZXNtYXRjaCB7Zn0geworICAgIGdsb2JhbCBmaW5kdHlwZSBmaW5kcGF0dGVybgorCisgICAgaWYgeyRmaW5kdHlwZSBlcSBbbWMgIlJlZ2V4cCJdfSB7CisJcmV0dXJuIFtyZWdleHAgJGZpbmRwYXR0ZXJuICRmXQorICAgIH0gZWxzZWlmIHskZmluZHR5cGUgZXEgW21jICJJZ25DYXNlIl19IHsKKwlyZXR1cm4gW3N0cmluZyBtYXRjaCAtbm9jYXNlICRmaW5kcGF0dGVybiAkZl0KKyAgICB9IGVsc2UgeworCXJldHVybiBbc3RyaW5nIG1hdGNoICRmaW5kcGF0dGVybiAkZl0KKyAgICB9Cit9CisKK3Byb2MgYXNrZmluZGhpZ2hsaWdodCB7cm93IGlkfSB7CisgICAgZ2xvYmFsIG5oaWdobGlnaHRzIGNvbW1pdGluZm8gaWRkcmF3bgorICAgIGdsb2JhbCBmaW5kbG9jCisgICAgZ2xvYmFsIG1hcmtpbmdtYXRjaGVzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJZ2V0Y29tbWl0ICRpZAorICAgIH0KKyAgICBzZXQgaW5mbyAkY29tbWl0aW5mbygkaWQpCisgICAgc2V0IGlzYm9sZCAwCisgICAgc2V0IGZsZHR5cGVzIFtsaXN0IFttYyBIZWFkbGluZV0gW21jIEF1dGhvcl0gIiIgW21jIENvbW1pdHRlcl0gIiIgW21jIENvbW1lbnRzXV0KKyAgICBmb3JlYWNoIGYgJGluZm8gdHkgJGZsZHR5cGVzIHsKKwlpZiB7JHR5IGVxICIifSBjb250aW51ZQorCWlmIHsoJGZpbmRsb2MgZXEgW21jICJBbGwgZmllbGRzIl0gfHwgJGZpbmRsb2MgZXEgJHR5KSAmJgorCSAgICBbZG9lc21hdGNoICRmXX0geworCSAgICBpZiB7JHR5IGVxIFttYyAiQXV0aG9yIl19IHsKKwkJc2V0IGlzYm9sZCAyCisJCWJyZWFrCisJICAgIH0KKwkgICAgc2V0IGlzYm9sZCAxCisJfQorICAgIH0KKyAgICBpZiB7JGlzYm9sZCAmJiBbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXX0geworCWlmIHshW2lzaGlnaGxpZ2h0ZWQgJGlkXX0geworCSAgICBib2xkZW4gJGlkIG1haW5mb250Ym9sZAorCSAgICBpZiB7JGlzYm9sZCA+IDF9IHsKKwkJYm9sZGVuX25hbWUgJGlkIG1haW5mb250Ym9sZAorCSAgICB9CisJfQorCWlmIHskbWFya2luZ21hdGNoZXN9IHsKKwkgICAgbWFya3Jvd21hdGNoZXMgJHJvdyAkaWQKKwl9CisgICAgfQorICAgIHNldCBuaGlnaGxpZ2h0cygkaWQpICRpc2JvbGQKK30KKworcHJvYyBtYXJrcm93bWF0Y2hlcyB7cm93IGlkfSB7CisgICAgZ2xvYmFsIGNhbnYgY2FudjIgbGluZWh0YWcgbGluZW50YWcgY29tbWl0aW5mbyBmaW5kbG9jCisKKyAgICBzZXQgaGVhZGxpbmUgW2xpbmRleCAkY29tbWl0aW5mbygkaWQpIDBdCisgICAgc2V0IGF1dGhvciBbbGluZGV4ICRjb21taXRpbmZvKCRpZCkgMV0KKyAgICAkY2FudiBkZWxldGUgbWF0Y2gkcm93CisgICAgJGNhbnYyIGRlbGV0ZSBtYXRjaCRyb3cKKyAgICBpZiB7JGZpbmRsb2MgZXEgW21jICJBbGwgZmllbGRzIl0gfHwgJGZpbmRsb2MgZXEgW21jICJIZWFkbGluZSJdfSB7CisJc2V0IG0gW2ZpbmRtYXRjaGVzICRoZWFkbGluZV0KKwlpZiB7JG0gbmUge319IHsKKwkgICAgbWFya21hdGNoZXMgJGNhbnYgJHJvdyAkaGVhZGxpbmUgJGxpbmVodGFnKCRpZCkgJG0gXAorCQlbJGNhbnYgaXRlbWNnZXQgJGxpbmVodGFnKCRpZCkgLWZvbnRdICRyb3cKKwl9CisgICAgfQorICAgIGlmIHskZmluZGxvYyBlcSBbbWMgIkFsbCBmaWVsZHMiXSB8fCAkZmluZGxvYyBlcSBbbWMgIkF1dGhvciJdfSB7CisJc2V0IG0gW2ZpbmRtYXRjaGVzICRhdXRob3JdCisJaWYgeyRtIG5lIHt9fSB7CisJICAgIG1hcmttYXRjaGVzICRjYW52MiAkcm93ICRhdXRob3IgJGxpbmVudGFnKCRpZCkgJG0gXAorCQlbJGNhbnYyIGl0ZW1jZ2V0ICRsaW5lbnRhZygkaWQpIC1mb250XSAkcm93CisJfQorICAgIH0KK30KKworcHJvYyB2cmVsX2NoYW5nZSB7bmFtZSBpeCBvcH0geworICAgIGdsb2JhbCBoaWdobGlnaHRfcmVsYXRlZAorCisgICAgcmhpZ2hsaWdodF9ub25lCisgICAgaWYgeyRoaWdobGlnaHRfcmVsYXRlZCBuZSBbbWMgIk5vbmUiXX0geworCXJ1biBkcmF3dmlzaWJsZQorICAgIH0KK30KKworIyBwcmVwYXJlIGZvciB0ZXN0aW5nIHdoZXRoZXIgY29tbWl0cyBhcmUgZGVzY2VuZGVudHMgb3IgYW5jZXN0b3JzIG9mIGEKK3Byb2MgcmhpZ2hsaWdodF9zZWwge2F9IHsKKyAgICBnbG9iYWwgZGVzY2VuZGVudCBkZXNjX3RvZG8gYW5jZXN0b3IgYW5jX3RvZG8KKyAgICBnbG9iYWwgaGlnaGxpZ2h0X3JlbGF0ZWQKKworICAgIGNhdGNoIHt1bnNldCBkZXNjZW5kZW50fQorICAgIHNldCBkZXNjX3RvZG8gW2xpc3QgJGFdCisgICAgY2F0Y2gge3Vuc2V0IGFuY2VzdG9yfQorICAgIHNldCBhbmNfdG9kbyBbbGlzdCAkYV0KKyAgICBpZiB7JGhpZ2hsaWdodF9yZWxhdGVkIG5lIFttYyAiTm9uZSJdfSB7CisJcmhpZ2hsaWdodF9ub25lCisJcnVuIGRyYXd2aXNpYmxlCisgICAgfQorfQorCitwcm9jIHJoaWdobGlnaHRfbm9uZSB7fSB7CisgICAgZ2xvYmFsIHJoaWdobGlnaHRzCisKKyAgICBjYXRjaCB7dW5zZXQgcmhpZ2hsaWdodHN9CisgICAgdW5ib2xkZW4KK30KKworcHJvYyBpc19kZXNjZW5kZW50IHthfSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4gZGVzY2VuZGVudCBkZXNjX3RvZG8KKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgc2V0IGxhIFtyb3dvZmNvbW1pdCAkYV0KKyAgICBzZXQgdG9kbyAkZGVzY190b2RvCisgICAgc2V0IGxlZnRvdmVyIHt9CisgICAgc2V0IGRvbmUgMAorICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHRvZG9dfSB7aW5jciBpfSB7CisJc2V0IGRvIFtsaW5kZXggJHRvZG8gJGldCisJaWYge1tyb3dvZmNvbW1pdCAkZG9dIDwgJGxhfSB7CisJICAgIGxhcHBlbmQgbGVmdG92ZXIgJGRvCisJICAgIGNvbnRpbnVlCisJfQorCWZvcmVhY2ggbmsgJGNoaWxkcmVuKCR2LCRkbykgeworCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBkZXNjZW5kZW50KCRuayldfSB7CisJCXNldCBkZXNjZW5kZW50KCRuaykgMQorCQlsYXBwZW5kIHRvZG8gJG5rCisJCWlmIHskbmsgZXEgJGF9IHsKKwkJICAgIHNldCBkb25lIDEKKwkJfQorCSAgICB9CisJfQorCWlmIHskZG9uZX0geworCSAgICBzZXQgZGVzY190b2RvIFtjb25jYXQgJGxlZnRvdmVyIFtscmFuZ2UgJHRvZG8gW2V4cHIgeyRpKzF9XSBlbmRdXQorCSAgICByZXR1cm4KKwl9CisgICAgfQorICAgIHNldCBkZXNjZW5kZW50KCRhKSAwCisgICAgc2V0IGRlc2NfdG9kbyAkbGVmdG92ZXIKK30KKworcHJvYyBpc19hbmNlc3RvciB7YX0geworICAgIGdsb2JhbCBjdXJ2aWV3IHBhcmVudHMgYW5jZXN0b3IgYW5jX3RvZG8KKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgc2V0IGxhIFtyb3dvZmNvbW1pdCAkYV0KKyAgICBzZXQgdG9kbyAkYW5jX3RvZG8KKyAgICBzZXQgbGVmdG92ZXIge30KKyAgICBzZXQgZG9uZSAwCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdG9kb119IHtpbmNyIGl9IHsKKwlzZXQgZG8gW2xpbmRleCAkdG9kbyAkaV0KKwlpZiB7IVtjb21taXRpbnZpZXcgJGRvICR2XSB8fCBbcm93b2Zjb21taXQgJGRvXSA+ICRsYX0geworCSAgICBsYXBwZW5kIGxlZnRvdmVyICRkbworCSAgICBjb250aW51ZQorCX0KKwlmb3JlYWNoIG5wICRwYXJlbnRzKCR2LCRkbykgeworCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbmNlc3RvcigkbnApXX0geworCQlzZXQgYW5jZXN0b3IoJG5wKSAxCisJCWxhcHBlbmQgdG9kbyAkbnAKKwkJaWYgeyRucCBlcSAkYX0geworCQkgICAgc2V0IGRvbmUgMQorCQl9CisJICAgIH0KKwl9CisJaWYgeyRkb25lfSB7CisJICAgIHNldCBhbmNfdG9kbyBbY29uY2F0ICRsZWZ0b3ZlciBbbHJhbmdlICR0b2RvIFtleHByIHskaSsxfV0gZW5kXV0KKwkgICAgcmV0dXJuCisJfQorICAgIH0KKyAgICBzZXQgYW5jZXN0b3IoJGEpIDAKKyAgICBzZXQgYW5jX3RvZG8gJGxlZnRvdmVyCit9CisKK3Byb2MgYXNrcmVsaGlnaGxpZ2h0IHtyb3cgaWR9IHsKKyAgICBnbG9iYWwgZGVzY2VuZGVudCBoaWdobGlnaHRfcmVsYXRlZCBpZGRyYXduIHJoaWdobGlnaHRzCisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBhbmNlc3RvcgorCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHJldHVybgorICAgIHNldCBpc2JvbGQgMAorICAgIGlmIHskaGlnaGxpZ2h0X3JlbGF0ZWQgZXEgW21jICJEZXNjZW5kYW50Il0gfHwKKwkkaGlnaGxpZ2h0X3JlbGF0ZWQgZXEgW21jICJOb3QgZGVzY2VuZGFudCJdfSB7CisJaWYgeyFbaW5mbyBleGlzdHMgZGVzY2VuZGVudCgkaWQpXX0geworCSAgICBpc19kZXNjZW5kZW50ICRpZAorCX0KKwlpZiB7JGRlc2NlbmRlbnQoJGlkKSA9PSAoJGhpZ2hsaWdodF9yZWxhdGVkIGVxIFttYyAiRGVzY2VuZGFudCJdKX0geworCSAgICBzZXQgaXNib2xkIDEKKwl9CisgICAgfSBlbHNlaWYgeyRoaWdobGlnaHRfcmVsYXRlZCBlcSBbbWMgIkFuY2VzdG9yIl0gfHwKKwkgICAgICAkaGlnaGxpZ2h0X3JlbGF0ZWQgZXEgW21jICJOb3QgYW5jZXN0b3IiXX0geworCWlmIHshW2luZm8gZXhpc3RzIGFuY2VzdG9yKCRpZCldfSB7CisJICAgIGlzX2FuY2VzdG9yICRpZAorCX0KKwlpZiB7JGFuY2VzdG9yKCRpZCkgPT0gKCRoaWdobGlnaHRfcmVsYXRlZCBlcSBbbWMgIkFuY2VzdG9yIl0pfSB7CisJICAgIHNldCBpc2JvbGQgMQorCX0KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBpZGRyYXduKCRpZCldfSB7CisJaWYgeyRpc2JvbGQgJiYgIVtpc2hpZ2hsaWdodGVkICRpZF19IHsKKwkgICAgYm9sZGVuICRpZCBtYWluZm9udGJvbGQKKwl9CisgICAgfQorICAgIHNldCByaGlnaGxpZ2h0cygkaWQpICRpc2JvbGQKK30KKworIyBHcmFwaCBsYXlvdXQgZnVuY3Rpb25zCisKK3Byb2Mgc2hvcnRpZHMge2lkc30geworICAgIHNldCByZXMge30KKyAgICBmb3JlYWNoIGlkICRpZHMgeworCWlmIHtbbGxlbmd0aCAkaWRdID4gMX0geworCSAgICBsYXBwZW5kIHJlcyBbc2hvcnRpZHMgJGlkXQorCX0gZWxzZWlmIHtbcmVnZXhwIHteWzAtOWEtZl17NDB9JH0gJGlkXX0geworCSAgICBsYXBwZW5kIHJlcyBbc3RyaW5nIHJhbmdlICRpZCAwIDddCisJfSBlbHNlIHsKKwkgICAgbGFwcGVuZCByZXMgJGlkCisJfQorICAgIH0KKyAgICByZXR1cm4gJHJlcworfQorCitwcm9jIG50aW1lcyB7biBvfSB7CisgICAgc2V0IHJldCB7fQorICAgIHNldCBvIFtsaXN0ICRvXQorICAgIGZvciB7c2V0IG1hc2sgMX0geyRtYXNrIDw9ICRufSB7aW5jciBtYXNrICRtYXNrfSB7CisJaWYgeygkbiAmICRtYXNrKSAhPSAwfSB7CisJICAgIHNldCByZXQgW2NvbmNhdCAkcmV0ICRvXQorCX0KKwlzZXQgbyBbY29uY2F0ICRvICRvXQorICAgIH0KKyAgICByZXR1cm4gJHJldAorfQorCitwcm9jIG9yZGVydG9rZW4ge2lkfSB7CisgICAgZ2xvYmFsIG9yZGVydG9rIGN1cnZpZXcgdmFyY2lkIHZhcmNzdGFydCB2YXJjdG9rIGN1cnZpZXcgcGFyZW50cyBjaGlsZHJlbgorICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMgorCisgICAgaWYge1tpbmZvIGV4aXN0cyBvcmRlcnRvaygkaWQpXX0geworCXJldHVybiAkb3JkZXJ0b2soJGlkKQorICAgIH0KKyAgICBzZXQgb3JpZ2lkICRpZAorICAgIHNldCB0b2RvIHt9CisgICAgd2hpbGUgezF9IHsKKwlpZiB7W2luZm8gZXhpc3RzIHZhcmNpZCgkY3VydmlldywkaWQpXX0geworCSAgICBzZXQgYSAkdmFyY2lkKCRjdXJ2aWV3LCRpZCkKKwkgICAgc2V0IHAgW2xpbmRleCAkdmFyY3N0YXJ0KCRjdXJ2aWV3KSAkYV0KKwl9IGVsc2UgeworCSAgICBzZXQgcCBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkaWQpIDBdCisJfQorCWlmIHtbaW5mbyBleGlzdHMgb3JkZXJ0b2soJHApXX0geworCSAgICBzZXQgdG9rICRvcmRlcnRvaygkcCkKKwkgICAgYnJlYWsKKwl9CisJc2V0IGlkIFtmaXJzdF9yZWFsX2NoaWxkICRjdXJ2aWV3LCRwXQorCWlmIHskaWQgZXEge319IHsKKwkgICAgIyBpdCdzIGEgcm9vdAorCSAgICBzZXQgdG9rIFtsaW5kZXggJHZhcmN0b2soJGN1cnZpZXcpICR2YXJjaWQoJGN1cnZpZXcsJHApXQorCSAgICBicmVhaworCX0KKwlpZiB7W2xsZW5ndGggJHBhcmVudHMoJGN1cnZpZXcsJGlkKV0gPT0gMX0geworCSAgICBsYXBwZW5kIHRvZG8gW2xpc3QgJHAge31dCisJfSBlbHNlIHsKKwkgICAgc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCkgJHBdCisJICAgIGlmIHskaiA8IDB9IHsKKwkJcHV0cyAib29wcyBkaWRuJ3QgZmluZCBbc2hvcnRpZHMgJHBdIGluIHBhcmVudHMgb2YgW3Nob3J0aWRzICRpZF0iCisJICAgIH0KKwkgICAgbGFwcGVuZCB0b2RvIFtsaXN0ICRwIFtzdHJyZXAgJGpdXQorCX0KKyAgICB9CisgICAgZm9yIHtzZXQgaSBbbGxlbmd0aCAkdG9kb119IHtbaW5jciBpIC0xXSA+PSAwfSB7fSB7CisJc2V0IHAgW2xpbmRleCAkdG9kbyAkaSAwXQorCWFwcGVuZCB0b2sgW2xpbmRleCAkdG9kbyAkaSAxXQorCXNldCBvcmRlcnRvaygkcCkgJHRvaworICAgIH0KKyAgICBzZXQgb3JkZXJ0b2soJG9yaWdpZCkgJHRvaworICAgIHJldHVybiAkdG9rCit9CisKKyMgV29yayBvdXQgd2hlcmUgaWQgc2hvdWxkIGdvIGluIGlkbGlzdCBzbyB0aGF0IG9yZGVyLXRva2VuCisjIHZhbHVlcyBpbmNyZWFzZSBmcm9tIGxlZnQgdG8gcmlnaHQKK3Byb2MgaWRjb2wge2lkbGlzdCBpZCB7aSAwfX0geworICAgIHNldCB0IFtvcmRlcnRva2VuICRpZF0KKyAgICBpZiB7JGkgPCAwfSB7CisJc2V0IGkgMAorICAgIH0KKyAgICBpZiB7JGkgPj0gW2xsZW5ndGggJGlkbGlzdF0gfHwgJHQgPCBbb3JkZXJ0b2tlbiBbbGluZGV4ICRpZGxpc3QgJGldXX0geworCWlmIHskaSA+IFtsbGVuZ3RoICRpZGxpc3RdfSB7CisJICAgIHNldCBpIFtsbGVuZ3RoICRpZGxpc3RdCisJfQorCXdoaWxlIHtbaW5jciBpIC0xXSA+PSAwICYmICR0IDwgW29yZGVydG9rZW4gW2xpbmRleCAkaWRsaXN0ICRpXV19IHt9CisJaW5jciBpCisgICAgfSBlbHNlIHsKKwlpZiB7JHQgPiBbb3JkZXJ0b2tlbiBbbGluZGV4ICRpZGxpc3QgJGldXX0geworCSAgICB3aGlsZSB7W2luY3IgaV0gPCBbbGxlbmd0aCAkaWRsaXN0XSAmJgorCQkgICAkdCA+PSBbb3JkZXJ0b2tlbiBbbGluZGV4ICRpZGxpc3QgJGldXX0ge30KKwl9CisgICAgfQorICAgIHJldHVybiAkaQorfQorCitwcm9jIGluaXRsYXlvdXQge30geworICAgIGdsb2JhbCByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwgZGlzcGxheW9yZGVyIHBhcmVudGxpc3QKKyAgICBnbG9iYWwgbnVtY29tbWl0cyBjYW52eG1heCBjYW52CisgICAgZ2xvYmFsIG5leHRjb2xvcgorICAgIGdsb2JhbCBjb2xvcm1hcCByb3d0ZXh0eAorCisgICAgc2V0IG51bWNvbW1pdHMgMAorICAgIHNldCBkaXNwbGF5b3JkZXIge30KKyAgICBzZXQgcGFyZW50bGlzdCB7fQorICAgIHNldCBuZXh0Y29sb3IgMAorICAgIHNldCByb3dpZGxpc3Qge30KKyAgICBzZXQgcm93aXNvcHQge30KKyAgICBzZXQgcm93ZmluYWwge30KKyAgICBzZXQgY2FudnhtYXggWyRjYW52IGNnZXQgLXdpZHRoXQorICAgIGNhdGNoIHt1bnNldCBjb2xvcm1hcH0KKyAgICBjYXRjaCB7dW5zZXQgcm93dGV4dHh9CisgICAgc2V0Y2FudnNjcm9sbAorfQorCitwcm9jIHNldGNhbnZzY3JvbGwge30geworICAgIGdsb2JhbCBjYW52IGNhbnYyIGNhbnYzIG51bWNvbW1pdHMgbGluZXNwYyBjYW52eG1heCBjYW52eTAKKyAgICBnbG9iYWwgbGFzdHNjcm9sbHNldCBsYXN0c2Nyb2xscm93cworCisgICAgc2V0IHltYXggW2V4cHIgeyRjYW52eTAgKyAoJG51bWNvbW1pdHMgLSAwLjUpICogJGxpbmVzcGMgKyAyfV0KKyAgICAkY2FudiBjb25mIC1zY3JvbGxyZWdpb24gW2xpc3QgMCAwICRjYW52eG1heCAkeW1heF0KKyAgICAkY2FudjIgY29uZiAtc2Nyb2xscmVnaW9uIFtsaXN0IDAgMCAwICR5bWF4XQorICAgICRjYW52MyBjb25mIC1zY3JvbGxyZWdpb24gW2xpc3QgMCAwIDAgJHltYXhdCisgICAgc2V0IGxhc3RzY3JvbGxzZXQgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBsYXN0c2Nyb2xscm93cyAkbnVtY29tbWl0cworfQorCitwcm9jIHZpc2libGVyb3dzIHt9IHsKKyAgICBnbG9iYWwgY2FudiBudW1jb21taXRzIGxpbmVzcGMKKworICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBpZiB7JHltYXggZXEge30gfHwgJHltYXggPT0gMH0gcmV0dXJuCisgICAgc2V0IGYgWyRjYW52IHl2aWV3XQorICAgIHNldCB5MCBbZXhwciB7aW50KFtsaW5kZXggJGYgMF0gKiAkeW1heCl9XQorICAgIHNldCByMCBbZXhwciB7aW50KCgkeTAgLSAzKSAvICRsaW5lc3BjKSAtIDF9XQorICAgIGlmIHskcjAgPCAwfSB7CisJc2V0IHIwIDAKKyAgICB9CisgICAgc2V0IHkxIFtleHByIHtpbnQoW2xpbmRleCAkZiAxXSAqICR5bWF4KX1dCisgICAgc2V0IHIxIFtleHByIHtpbnQoKCR5MSAtIDMpIC8gJGxpbmVzcGMpICsgMX1dCisgICAgaWYgeyRyMSA+PSAkbnVtY29tbWl0c30geworCXNldCByMSBbZXhwciB7JG51bWNvbW1pdHMgLSAxfV0KKyAgICB9CisgICAgcmV0dXJuIFtsaXN0ICRyMCAkcjFdCit9CisKK3Byb2MgbGF5b3V0bW9yZSB7fSB7CisgICAgZ2xvYmFsIGNvbW1pdGlkeCB2aWV3Y29tcGxldGUgY3VydmlldworICAgIGdsb2JhbCBudW1jb21taXRzIHBlbmRpbmdfc2VsZWN0IGN1cnZpZXcKKyAgICBnbG9iYWwgbGFzdHNjcm9sbHNldCBsYXN0c2Nyb2xscm93cworCisgICAgaWYgeyRsYXN0c2Nyb2xscm93cyA8IDEwMCB8fCAkdmlld2NvbXBsZXRlKCRjdXJ2aWV3KSB8fAorCVtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10gLSAkbGFzdHNjcm9sbHNldCA+IDUwMH0geworCXNldGNhbnZzY3JvbGwKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBwZW5kaW5nX3NlbGVjdF0gJiYKKwlbY29tbWl0aW52aWV3ICRwZW5kaW5nX3NlbGVjdCAkY3Vydmlld119IHsKKwl1cGRhdGUKKwlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkcGVuZGluZ19zZWxlY3RdIDEKKyAgICB9CisgICAgZHJhd3Zpc2libGUKK30KKworIyBXaXRoIHBhdGggbGltaXRpbmcsIHdlIG1pZ2h0bid0IGdldCB0aGUgYWN0dWFsIEhFQUQgY29tbWl0LAorIyBzbyBhc2sgZ2l0IHJldi1saXN0IHdoYXQgaXMgdGhlIGZpcnN0IGFuY2VzdG9yIG9mIEhFQUQgdGhhdAorIyB0b3VjaGVzIGEgZmlsZSBpbiB0aGUgcGF0aCBsaW1pdC4KK3Byb2MgZ2V0X3ZpZXdtYWluaGVhZCB7dmlld30geworICAgIGdsb2JhbCB2aWV3bWFpbmhlYWRpZCB2ZmlsZWxpbWl0IHZpZXdpbnN0YW5jZXMgbWFpbmhlYWRpZAorCisgICAgY2F0Y2ggeworCXNldCByZmQgW29wZW4gW2NvbmNhdCB8IGdpdCByZXYtbGlzdCAtMSAkbWFpbmhlYWRpZCBcCisJCQkgICAtLSAkdmZpbGVsaW1pdCgkdmlldyldIHJdCisJc2V0IGogW3JlZ19pbnN0YW5jZSAkcmZkXQorCWxhcHBlbmQgdmlld2luc3RhbmNlcygkdmlldykgJGoKKwlmY29uZmlndXJlICRyZmQgLWJsb2NraW5nIDAKKwlmaWxlcnVuICRyZmQgW2xpc3QgZ2V0dmlld2hlYWQgJHJmZCAkaiAkdmlld10KKwlzZXQgdmlld21haW5oZWFkaWQoJGN1cnZpZXcpIHt9CisgICAgfQorfQorCisjIGdpdCByZXYtbGlzdCBzaG91bGQgZ2l2ZSB1cyBqdXN0IDEgbGluZSB0byB1c2UgYXMgdmlld21haW5oZWFkaWQoJHZpZXcpCitwcm9jIGdldHZpZXdoZWFkIHtmZCBpbnN0IHZpZXd9IHsKKyAgICBnbG9iYWwgdmlld21haW5oZWFkaWQgY29tbWZkIGN1cnZpZXcgdmlld2luc3RhbmNlcyBzaG93bG9jYWxjaGFuZ2VzCisKKyAgICBzZXQgaWQge30KKyAgICBpZiB7W2dldHMgJGZkIGxpbmVdIDwgMH0geworCWlmIHshW2VvZiAkZmRdfSB7CisJICAgIHJldHVybiAxCisJfQorICAgIH0gZWxzZWlmIHtbc3RyaW5nIGxlbmd0aCAkbGluZV0gPT0gNDAgJiYgW3N0cmluZyBpcyB4ZGlnaXQgJGxpbmVdfSB7CisJc2V0IGlkICRsaW5lCisgICAgfQorICAgIHNldCB2aWV3bWFpbmhlYWRpZCgkdmlldykgJGlkCisgICAgY2xvc2UgJGZkCisgICAgdW5zZXQgY29tbWZkKCRpbnN0KQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdmlld2luc3RhbmNlcygkdmlldykgJGluc3RdCisgICAgaWYgeyRpID49IDB9IHsKKwlzZXQgdmlld2luc3RhbmNlcygkdmlldykgW2xyZXBsYWNlICR2aWV3aW5zdGFuY2VzKCR2aWV3KSAkaSAkaV0KKyAgICB9CisgICAgaWYgeyRzaG93bG9jYWxjaGFuZ2VzICYmICRpZCBuZSB7fSAmJiAkdmlldyA9PSAkY3Vydmlld30geworCWRvc2hvd2xvY2FsY2hhbmdlcworICAgIH0KKyAgICByZXR1cm4gMAorfQorCitwcm9jIGRvc2hvd2xvY2FsY2hhbmdlcyB7fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgdmlld21haW5oZWFkaWQKKworICAgIGlmIHskdmlld21haW5oZWFkaWQoJGN1cnZpZXcpIGVxIHt9fSByZXR1cm4KKyAgICBpZiB7W2NvbW1pdGludmlldyAkdmlld21haW5oZWFkaWQoJGN1cnZpZXcpICRjdXJ2aWV3XX0geworCWRvZGlmZmluZGV4CisgICAgfSBlbHNlIHsKKwlpbnRlcmVzdGVkaW4gJHZpZXdtYWluaGVhZGlkKCRjdXJ2aWV3KSBkb2RpZmZpbmRleAorICAgIH0KK30KKworcHJvYyBkb2hpZGVsb2NhbGNoYW5nZXMge30geworICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMiBsc2VyaWFsIGN1cnZpZXcKKworICAgIGlmIHtbY29tbWl0aW52aWV3ICRudWxsaWQgJGN1cnZpZXddfSB7CisJcmVtb3ZlZmFrZXJvdyAkbnVsbGlkCisgICAgfQorICAgIGlmIHtbY29tbWl0aW52aWV3ICRudWxsaWQyICRjdXJ2aWV3XX0geworCXJlbW92ZWZha2Vyb3cgJG51bGxpZDIKKyAgICB9CisgICAgaW5jciBsc2VyaWFsCit9CisKKyMgc3Bhd24gb2ZmIGEgcHJvY2VzcyB0byBkbyBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFECitwcm9jIGRvZGlmZmluZGV4IHt9IHsKKyAgICBnbG9iYWwgbHNlcmlhbCBzaG93bG9jYWxjaGFuZ2VzIHZmaWxlbGltaXQgY3VydmlldworICAgIGdsb2JhbCBoYXN3b3JrdHJlZQorCisgICAgaWYgeyEkc2hvd2xvY2FsY2hhbmdlcyB8fCAhJGhhc3dvcmt0cmVlfSByZXR1cm4KKyAgICBpbmNyIGxzZXJpYWwKKyAgICBzZXQgY21kICJ8Z2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRCIKKyAgICBpZiB7JHZmaWxlbGltaXQoJGN1cnZpZXcpIG5lIHt9fSB7CisJc2V0IGNtZCBbY29uY2F0ICRjbWQgLS0gJHZmaWxlbGltaXQoJGN1cnZpZXcpXQorICAgIH0KKyAgICBzZXQgZmQgW29wZW4gJGNtZCByXQorICAgIGZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwCisgICAgc2V0IGkgW3JlZ19pbnN0YW5jZSAkZmRdCisgICAgZmlsZXJ1biAkZmQgW2xpc3QgcmVhZGRpZmZpbmRleCAkZmQgJGxzZXJpYWwgJGldCit9CisKK3Byb2MgcmVhZGRpZmZpbmRleCB7ZmQgc2VyaWFsIGluc3R9IHsKKyAgICBnbG9iYWwgdmlld21haW5oZWFkaWQgbnVsbGlkIG51bGxpZDIgY3VydmlldyBjb21taXRpbmZvIGNvbW1pdGRhdGEgbHNlcmlhbAorICAgIGdsb2JhbCB2ZmlsZWxpbWl0CisKKyAgICBzZXQgaXNkaWZmIDEKKyAgICBpZiB7W2dldHMgJGZkIGxpbmVdIDwgMH0geworCWlmIHshW2VvZiAkZmRdfSB7CisJICAgIHJldHVybiAxCisJfQorCXNldCBpc2RpZmYgMAorICAgIH0KKyAgICAjIHdlIG9ubHkgbmVlZCB0byBzZWUgb25lIGxpbmUgYW5kIHdlIGRvbid0IHJlYWxseSBjYXJlIHdoYXQgaXQgc2F5cy4uLgorICAgIHN0b3BfaW5zdGFuY2UgJGluc3QKKworICAgIGlmIHskc2VyaWFsICE9ICRsc2VyaWFsfSB7CisJcmV0dXJuIDAKKyAgICB9CisKKyAgICAjIG5vdyBzZWUgaWYgdGhlcmUgYXJlIGFueSBsb2NhbCBjaGFuZ2VzIG5vdCBjaGVja2VkIGluIHRvIHRoZSBpbmRleAorICAgIHNldCBjbWQgInxnaXQgZGlmZi1maWxlcyIKKyAgICBpZiB7JHZmaWxlbGltaXQoJGN1cnZpZXcpIG5lIHt9fSB7CisJc2V0IGNtZCBbY29uY2F0ICRjbWQgLS0gJHZmaWxlbGltaXQoJGN1cnZpZXcpXQorICAgIH0KKyAgICBzZXQgZmQgW29wZW4gJGNtZCByXQorICAgIGZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwCisgICAgc2V0IGkgW3JlZ19pbnN0YW5jZSAkZmRdCisgICAgZmlsZXJ1biAkZmQgW2xpc3QgcmVhZGRpZmZmaWxlcyAkZmQgJHNlcmlhbCAkaV0KKworICAgIGlmIHskaXNkaWZmICYmICFbY29tbWl0aW52aWV3ICRudWxsaWQyICRjdXJ2aWV3XX0geworCSMgYWRkIHRoZSBsaW5lIGZvciB0aGUgY2hhbmdlcyBpbiB0aGUgaW5kZXggdG8gdGhlIGdyYXBoCisJc2V0IGhsIFttYyAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIl0KKwlzZXQgY29tbWl0aW5mbygkbnVsbGlkMikgW2xpc3QgICRobCB7fSB7fSB7fSB7fSAiICAgICRobFxuIl0KKwlzZXQgY29tbWl0ZGF0YSgkbnVsbGlkMikgIlxuICAgICRobFxuIgorCWlmIHtbY29tbWl0aW52aWV3ICRudWxsaWQgJGN1cnZpZXddfSB7CisJICAgIHJlbW92ZWZha2Vyb3cgJG51bGxpZAorCX0KKwlpbnNlcnRmYWtlcm93ICRudWxsaWQyICR2aWV3bWFpbmhlYWRpZCgkY3VydmlldykKKyAgICB9IGVsc2VpZiB7ISRpc2RpZmYgJiYgW2NvbW1pdGludmlldyAkbnVsbGlkMiAkY3Vydmlld119IHsKKwlpZiB7W2NvbW1pdGludmlldyAkbnVsbGlkICRjdXJ2aWV3XX0geworCSAgICByZW1vdmVmYWtlcm93ICRudWxsaWQKKwl9CisJcmVtb3ZlZmFrZXJvdyAkbnVsbGlkMgorICAgIH0KKyAgICByZXR1cm4gMAorfQorCitwcm9jIHJlYWRkaWZmZmlsZXMge2ZkIHNlcmlhbCBpbnN0fSB7CisgICAgZ2xvYmFsIHZpZXdtYWluaGVhZGlkIG51bGxpZCBudWxsaWQyIGN1cnZpZXcKKyAgICBnbG9iYWwgY29tbWl0aW5mbyBjb21taXRkYXRhIGxzZXJpYWwKKworICAgIHNldCBpc2RpZmYgMQorICAgIGlmIHtbZ2V0cyAkZmQgbGluZV0gPCAwfSB7CisJaWYgeyFbZW9mICRmZF19IHsKKwkgICAgcmV0dXJuIDEKKwl9CisJc2V0IGlzZGlmZiAwCisgICAgfQorICAgICMgd2Ugb25seSBuZWVkIHRvIHNlZSBvbmUgbGluZSBhbmQgd2UgZG9uJ3QgcmVhbGx5IGNhcmUgd2hhdCBpdCBzYXlzLi4uCisgICAgc3RvcF9pbnN0YW5jZSAkaW5zdAorCisgICAgaWYgeyRzZXJpYWwgIT0gJGxzZXJpYWx9IHsKKwlyZXR1cm4gMAorICAgIH0KKworICAgIGlmIHskaXNkaWZmICYmICFbY29tbWl0aW52aWV3ICRudWxsaWQgJGN1cnZpZXddfSB7CisJIyBhZGQgdGhlIGxpbmUgZm9yIHRoZSBsb2NhbCBkaWZmIHRvIHRoZSBncmFwaAorCXNldCBobCBbbWMgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4Il0KKwlzZXQgY29tbWl0aW5mbygkbnVsbGlkKSBbbGlzdCAgJGhsIHt9IHt9IHt9IHt9ICIgICAgJGhsXG4iXQorCXNldCBjb21taXRkYXRhKCRudWxsaWQpICJcbiAgICAkaGxcbiIKKwlpZiB7W2NvbW1pdGludmlldyAkbnVsbGlkMiAkY3Vydmlld119IHsKKwkgICAgc2V0IHAgJG51bGxpZDIKKwl9IGVsc2UgeworCSAgICBzZXQgcCAkdmlld21haW5oZWFkaWQoJGN1cnZpZXcpCisJfQorCWluc2VydGZha2Vyb3cgJG51bGxpZCAkcAorICAgIH0gZWxzZWlmIHshJGlzZGlmZiAmJiBbY29tbWl0aW52aWV3ICRudWxsaWQgJGN1cnZpZXddfSB7CisJcmVtb3ZlZmFrZXJvdyAkbnVsbGlkCisgICAgfQorICAgIHJldHVybiAwCit9CisKK3Byb2MgbmV4dHVzZSB7aWQgcm93fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4KKworICAgIGlmIHtbaW5mbyBleGlzdHMgY2hpbGRyZW4oJGN1cnZpZXcsJGlkKV19IHsKKwlmb3JlYWNoIGtpZCAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSB7CisJICAgIGlmIHshW2NvbW1pdGludmlldyAka2lkICRjdXJ2aWV3XX0geworCQlyZXR1cm4gLTEKKwkgICAgfQorCSAgICBpZiB7W3Jvd29mY29tbWl0ICRraWRdID4gJHJvd30geworCQlyZXR1cm4gW3Jvd29mY29tbWl0ICRraWRdCisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwlyZXR1cm4gW3Jvd29mY29tbWl0ICRpZF0KKyAgICB9CisgICAgcmV0dXJuIC0xCit9CisKK3Byb2MgcHJldnVzZSB7aWQgcm93fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4KKworICAgIHNldCByZXQgLTEKKyAgICBpZiB7W2luZm8gZXhpc3RzIGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCldfSB7CisJZm9yZWFjaCBraWQgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgeworCSAgICBpZiB7IVtjb21taXRpbnZpZXcgJGtpZCAkY3Vydmlld119IGJyZWFrCisJICAgIGlmIHtbcm93b2Zjb21taXQgJGtpZF0gPCAkcm93fSB7CisJCXNldCByZXQgW3Jvd29mY29tbWl0ICRraWRdCisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiAkcmV0Cit9CisKK3Byb2MgbWFrZV9pZGxpc3Qge3Jvd30geworICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgcGFyZW50bGlzdCB1cGFycm93bGVuIGRvd25hcnJvd2xlbiBtaW5nYXBsZW4KKyAgICBnbG9iYWwgY29tbWl0aWR4IGN1cnZpZXcgY2hpbGRyZW4KKworICAgIHNldCByIFtleHByIHskcm93IC0gJG1pbmdhcGxlbiAtICRkb3duYXJyb3dsZW4gLSAxfV0KKyAgICBpZiB7JHIgPCAwfSB7CisJc2V0IHIgMAorICAgIH0KKyAgICBzZXQgcmEgW2V4cHIgeyRyb3cgLSAkZG93bmFycm93bGVufV0KKyAgICBpZiB7JHJhIDwgMH0geworCXNldCByYSAwCisgICAgfQorICAgIHNldCByYiBbZXhwciB7JHJvdyArICR1cGFycm93bGVufV0KKyAgICBpZiB7JHJiID4gJGNvbW1pdGlkeCgkY3Vydmlldyl9IHsKKwlzZXQgcmIgJGNvbW1pdGlkeCgkY3VydmlldykKKyAgICB9CisgICAgbWFrZV9kaXNwb3JkZXIgJHIgW2V4cHIgeyRyYiArIDF9XQorICAgIHNldCBpZHMge30KKyAgICBmb3Ige30geyRyIDwgJHJhfSB7aW5jciByfSB7CisJc2V0IG5leHRpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgW2V4cHIgeyRyICsgMX1dXQorCWZvcmVhY2ggcCBbbGluZGV4ICRwYXJlbnRsaXN0ICRyXSB7CisJICAgIGlmIHskcCBlcSAkbmV4dGlkfSBjb250aW51ZQorCSAgICBzZXQgcm4gW25leHR1c2UgJHAgJHJdCisJICAgIGlmIHskcm4gPj0gJHJvdyAmJgorCQkkcm4gPD0gJHIgKyAkZG93bmFycm93bGVuICsgJG1pbmdhcGxlbiArICR1cGFycm93bGVufSB7CisJCWxhcHBlbmQgaWRzIFtsaXN0IFtvcmRlcnRva2VuICRwXSAkcF0KKwkgICAgfQorCX0KKyAgICB9CisgICAgZm9yIHt9IHskciA8ICRyb3d9IHtpbmNyIHJ9IHsKKwlzZXQgbmV4dGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciBbZXhwciB7JHIgKyAxfV1dCisJZm9yZWFjaCBwIFtsaW5kZXggJHBhcmVudGxpc3QgJHJdIHsKKwkgICAgaWYgeyRwIGVxICRuZXh0aWR9IGNvbnRpbnVlCisJICAgIHNldCBybiBbbmV4dHVzZSAkcCAkcl0KKwkgICAgaWYgeyRybiA8IDAgfHwgJHJuID49ICRyb3d9IHsKKwkJbGFwcGVuZCBpZHMgW2xpc3QgW29yZGVydG9rZW4gJHBdICRwXQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisgICAgbGFwcGVuZCBpZHMgW2xpc3QgW29yZGVydG9rZW4gJGlkXSAkaWRdCisgICAgd2hpbGUgeyRyIDwgJHJifSB7CisJZm9yZWFjaCBwIFtsaW5kZXggJHBhcmVudGxpc3QgJHJdIHsKKwkgICAgc2V0IGZpcnN0a2lkIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRwKSAwXQorCSAgICBpZiB7W3Jvd29mY29tbWl0ICRmaXJzdGtpZF0gPCAkcm93fSB7CisJCWxhcHBlbmQgaWRzIFtsaXN0IFtvcmRlcnRva2VuICRwXSAkcF0KKwkgICAgfQorCX0KKwlpbmNyIHIKKwlzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyXQorCWlmIHskaWQgbmUge319IHsKKwkgICAgc2V0IGZpcnN0a2lkIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgMF0KKwkgICAgaWYgeyRmaXJzdGtpZCBuZSB7fSAmJiBbcm93b2Zjb21taXQgJGZpcnN0a2lkXSA8ICRyb3d9IHsKKwkJbGFwcGVuZCBpZHMgW2xpc3QgW29yZGVydG9rZW4gJGlkXSAkaWRdCisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCBpZGxpc3Qge30KKyAgICBmb3JlYWNoIGlkeCBbbHNvcnQgLXVuaXF1ZSAkaWRzXSB7CisJbGFwcGVuZCBpZGxpc3QgW2xpbmRleCAkaWR4IDFdCisgICAgfQorICAgIHJldHVybiAkaWRsaXN0Cit9CisKK3Byb2Mgcm93c2VxdWFsIHthIGJ9IHsKKyAgICB3aGlsZSB7W3NldCBpIFtsc2VhcmNoIC1leGFjdCAkYSB7fV1dID49IDB9IHsKKwlzZXQgYSBbbHJlcGxhY2UgJGEgJGkgJGldCisgICAgfQorICAgIHdoaWxlIHtbc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRiIHt9XV0gPj0gMH0geworCXNldCBiIFtscmVwbGFjZSAkYiAkaSAkaV0KKyAgICB9CisgICAgcmV0dXJuIFtleHByIHskYSBlcSAkYn1dCit9CisKK3Byb2MgbWFrZXVwbGluZSB7aWQgcm93IHJlbmQgY29sfSB7CisgICAgZ2xvYmFsIHJvd2lkbGlzdCB1cGFycm93bGVuIGRvd25hcnJvd2xlbiBtaW5nYXBsZW4KKworICAgIGZvciB7c2V0IHIgJHJlbmR9IHsxfSB7c2V0IHIgJHJzdGFydH0geworCXNldCByc3RhcnQgW3ByZXZ1c2UgJGlkICRyXQorCWlmIHskcnN0YXJ0IDwgMH0gcmV0dXJuCisJaWYgeyRyc3RhcnQgPCAkcm93fSBicmVhaworICAgIH0KKyAgICBpZiB7JHJzdGFydCArICR1cGFycm93bGVuICsgJG1pbmdhcGxlbiArICRkb3duYXJyb3dsZW4gPCAkcmVuZH0geworCXNldCByc3RhcnQgW2V4cHIgeyRyZW5kIC0gJHVwYXJyb3dsZW4gLSAxfV0KKyAgICB9CisgICAgZm9yIHtzZXQgciAkcnN0YXJ0fSB7W2luY3Igcl0gPD0gJHJvd30ge30geworCXNldCBpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICRyXQorCWlmIHskaWRsaXN0IG5lIHt9ICYmIFtsc2VhcmNoIC1leGFjdCAkaWRsaXN0ICRpZF0gPCAwfSB7CisJICAgIHNldCBjb2wgW2lkY29sICRpZGxpc3QgJGlkICRjb2xdCisJICAgIGxzZXQgcm93aWRsaXN0ICRyIFtsaW5zZXJ0ICRpZGxpc3QgJGNvbCAkaWRdCisJICAgIGNoYW5nZWRyb3cgJHIKKwl9CisgICAgfQorfQorCitwcm9jIGxheW91dHJvd3Mge3JvdyBlbmRyb3d9IHsKKyAgICBnbG9iYWwgcm93aWRsaXN0IHJvd2lzb3B0IHJvd2ZpbmFsIGRpc3BsYXlvcmRlcgorICAgIGdsb2JhbCB1cGFycm93bGVuIGRvd25hcnJvd2xlbiBtYXh3aWR0aCBtaW5nYXBsZW4KKyAgICBnbG9iYWwgY2hpbGRyZW4gcGFyZW50bGlzdAorICAgIGdsb2JhbCBjb21taXRpZHggdmlld2NvbXBsZXRlIGN1cnZpZXcKKworICAgIG1ha2VfZGlzcG9yZGVyIFtleHByIHskcm93IC0gMX1dIFtleHByIHskZW5kcm93ICsgJHVwYXJyb3dsZW59XQorICAgIHNldCBpZGxpc3Qge30KKyAgICBpZiB7JHJvdyA+IDB9IHsKKwlzZXQgcm0xIFtleHByIHskcm93IC0gMX1dCisJZm9yZWFjaCBpZCBbbGluZGV4ICRyb3dpZGxpc3QgJHJtMV0geworCSAgICBpZiB7JGlkIG5lIHt9fSB7CisJCWxhcHBlbmQgaWRsaXN0ICRpZAorCSAgICB9CisJfQorCXNldCBmaW5hbCBbbGluZGV4ICRyb3dmaW5hbCAkcm0xXQorICAgIH0KKyAgICBmb3Ige30geyRyb3cgPCAkZW5kcm93fSB7aW5jciByb3d9IHsKKwlzZXQgcm0xIFtleHByIHskcm93IC0gMX1dCisJaWYgeyRybTEgPCAwIHx8ICRpZGxpc3QgZXEge319IHsKKwkgICAgc2V0IGlkbGlzdCBbbWFrZV9pZGxpc3QgJHJvd10KKwkgICAgc2V0IGZpbmFsIDEKKwl9IGVsc2UgeworCSAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRybTFdCisJICAgIHNldCBjb2wgW2xzZWFyY2ggLWV4YWN0ICRpZGxpc3QgJGlkXQorCSAgICBzZXQgaWRsaXN0IFtscmVwbGFjZSAkaWRsaXN0ICRjb2wgJGNvbF0KKwkgICAgZm9yZWFjaCBwIFtsaW5kZXggJHBhcmVudGxpc3QgJHJtMV0geworCQlpZiB7W2xzZWFyY2ggLWV4YWN0ICRpZGxpc3QgJHBdIDwgMH0geworCQkgICAgc2V0IGNvbCBbaWRjb2wgJGlkbGlzdCAkcCAkY29sXQorCQkgICAgc2V0IGlkbGlzdCBbbGluc2VydCAkaWRsaXN0ICRjb2wgJHBdCisJCSAgICAjIGlmIG5vdCB0aGUgZmlyc3QgY2hpbGQsIHdlIGhhdmUgdG8gaW5zZXJ0IGEgbGluZSBnb2luZyB1cAorCQkgICAgaWYgeyRpZCBuZSBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkcCkgMF19IHsKKwkJCW1ha2V1cGxpbmUgJHAgJHJtMSAkcm93ICRjb2wKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10KKwkgICAgaWYgeyRyb3cgPiAkZG93bmFycm93bGVufSB7CisJCXNldCB0ZXJtcm93IFtleHByIHskcm93IC0gJGRvd25hcnJvd2xlbiAtIDF9XQorCQlmb3JlYWNoIHAgW2xpbmRleCAkcGFyZW50bGlzdCAkdGVybXJvd10geworCQkgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRpZGxpc3QgJHBdCisJCSAgICBpZiB7JGkgPCAwfSBjb250aW51ZQorCQkgICAgc2V0IG5yIFtuZXh0dXNlICRwICR0ZXJtcm93XQorCQkgICAgaWYgeyRuciA8IDAgfHwgJG5yID49ICRyb3cgKyAkbWluZ2FwbGVuICsgJHVwYXJyb3dsZW59IHsKKwkJCXNldCBpZGxpc3QgW2xyZXBsYWNlICRpZGxpc3QgJGkgJGldCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBzZXQgY29sIFtsc2VhcmNoIC1leGFjdCAkaWRsaXN0ICRpZF0KKwkgICAgaWYgeyRjb2wgPCAwfSB7CisJCXNldCBjb2wgW2lkY29sICRpZGxpc3QgJGlkXQorCQlzZXQgaWRsaXN0IFtsaW5zZXJ0ICRpZGxpc3QgJGNvbCAkaWRdCisJCWlmIHskY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSBuZSB7fX0geworCQkgICAgbWFrZXVwbGluZSAkaWQgJHJtMSAkcm93ICRjb2wKKwkJfQorCSAgICB9CisJICAgIHNldCByIFtleHByIHskcm93ICsgJHVwYXJyb3dsZW4gLSAxfV0KKwkgICAgaWYgeyRyIDwgJGNvbW1pdGlkeCgkY3Vydmlldyl9IHsKKwkJc2V0IHggJGNvbAorCQlmb3JlYWNoIHAgW2xpbmRleCAkcGFyZW50bGlzdCAkcl0geworCQkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkaWRsaXN0ICRwXSA+PSAwfSBjb250aW51ZQorCQkgICAgc2V0IGZrIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRwKSAwXQorCQkgICAgaWYge1tyb3dvZmNvbW1pdCAkZmtdIDwgJHJvd30geworCQkJc2V0IHggW2lkY29sICRpZGxpc3QgJHAgJHhdCisJCQlzZXQgaWRsaXN0IFtsaW5zZXJ0ICRpZGxpc3QgJHggJHBdCisJCSAgICB9CisJCX0KKwkJaWYge1tpbmNyIHJdIDwgJGNvbW1pdGlkeCgkY3Vydmlldyl9IHsKKwkJICAgIHNldCBwIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcl0KKwkJICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJGlkbGlzdCAkcF0gPCAwfSB7CisJCQlzZXQgZmsgW2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJHApIDBdCisJCQlpZiB7JGZrIG5lIHt9ICYmIFtyb3dvZmNvbW1pdCAkZmtdIDwgJHJvd30geworCQkJICAgIHNldCB4IFtpZGNvbCAkaWRsaXN0ICRwICR4XQorCQkJICAgIHNldCBpZGxpc3QgW2xpbnNlcnQgJGlkbGlzdCAkeCAkcF0KKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorCWlmIHskZmluYWwgJiYgISR2aWV3Y29tcGxldGUoJGN1cnZpZXcpICYmCisJICAgICRyb3cgKyAkdXBhcnJvd2xlbiArICRtaW5nYXBsZW4gKyAkZG93bmFycm93bGVuCisJCT49ICRjb21taXRpZHgoJGN1cnZpZXcpfSB7CisJICAgIHNldCBmaW5hbCAwCisJfQorCXNldCBsIFtsbGVuZ3RoICRyb3dpZGxpc3RdCisJaWYgeyRyb3cgPT0gJGx9IHsKKwkgICAgbGFwcGVuZCByb3dpZGxpc3QgJGlkbGlzdAorCSAgICBsYXBwZW5kIHJvd2lzb3B0IDAKKwkgICAgbGFwcGVuZCByb3dmaW5hbCAkZmluYWwKKwl9IGVsc2VpZiB7JHJvdyA8ICRsfSB7CisJICAgIGlmIHshW3Jvd3NlcXVhbCAkaWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XV19IHsKKwkJbHNldCByb3dpZGxpc3QgJHJvdyAkaWRsaXN0CisJCWNoYW5nZWRyb3cgJHJvdworCSAgICB9CisJICAgIGxzZXQgcm93ZmluYWwgJHJvdyAkZmluYWwKKwl9IGVsc2UgeworCSAgICBzZXQgcGFkIFtudGltZXMgW2V4cHIgeyRyb3cgLSAkbH1dIHt9XQorCSAgICBzZXQgcm93aWRsaXN0IFtjb25jYXQgJHJvd2lkbGlzdCAkcGFkXQorCSAgICBsYXBwZW5kIHJvd2lkbGlzdCAkaWRsaXN0CisJICAgIHNldCByb3dmaW5hbCBbY29uY2F0ICRyb3dmaW5hbCAkcGFkXQorCSAgICBsYXBwZW5kIHJvd2ZpbmFsICRmaW5hbAorCSAgICBzZXQgcm93aXNvcHQgW2NvbmNhdCAkcm93aXNvcHQgW250aW1lcyBbZXhwciB7JHJvdyAtICRsICsgMX1dIDBdXQorCX0KKyAgICB9CisgICAgcmV0dXJuICRyb3cKK30KKworcHJvYyBjaGFuZ2Vkcm93IHtyb3d9IHsKKyAgICBnbG9iYWwgZGlzcGxheW9yZGVyIGlkZHJhd24gcm93aXNvcHQgbmVlZF9yZWRpc3BsYXkKKworICAgIHNldCBsIFtsbGVuZ3RoICRyb3dpc29wdF0KKyAgICBpZiB7JHJvdyA8ICRsfSB7CisJbHNldCByb3dpc29wdCAkcm93IDAKKwlpZiB7JHJvdyArIDEgPCAkbH0geworCSAgICBsc2V0IHJvd2lzb3B0IFtleHByIHskcm93ICsgMX1dIDAKKwkgICAgaWYgeyRyb3cgKyAyIDwgJGx9IHsKKwkJbHNldCByb3dpc29wdCBbZXhwciB7JHJvdyArIDJ9XSAwCisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10KKyAgICBpZiB7W2luZm8gZXhpc3RzIGlkZHJhd24oJGlkKV19IHsKKwlzZXQgbmVlZF9yZWRpc3BsYXkgMQorICAgIH0KK30KKworcHJvYyBpbnNlcnRfcGFkIHtyb3cgY29sIG5wYWR9IHsKKyAgICBnbG9iYWwgcm93aWRsaXN0CisKKyAgICBzZXQgcGFkIFtudGltZXMgJG5wYWQge31dCisgICAgc2V0IGlkbGlzdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10KKyAgICBzZXQgYmVmIFtscmFuZ2UgJGlkbGlzdCAwIFtleHByIHskY29sIC0gMX1dXQorICAgIHNldCBhZnQgW2xyYW5nZSAkaWRsaXN0ICRjb2wgZW5kXQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkYWZ0IHt9XQorICAgIGlmIHskaSA+IDB9IHsKKwlzZXQgYWZ0IFtscmVwbGFjZSAkYWZ0ICRpICRpXQorICAgIH0KKyAgICBsc2V0IHJvd2lkbGlzdCAkcm93IFtjb25jYXQgJGJlZiAkcGFkICRhZnRdCisgICAgY2hhbmdlZHJvdyAkcm93Cit9CisKK3Byb2Mgb3B0aW1pemVfcm93cyB7cm93IGNvbCBlbmRyb3d9IHsKKyAgICBnbG9iYWwgcm93aWRsaXN0IHJvd2lzb3B0IGRpc3BsYXlvcmRlciBjdXJ2aWV3IGNoaWxkcmVuCisKKyAgICBpZiB7JHJvdyA8IDF9IHsKKwlzZXQgcm93IDEKKyAgICB9CisgICAgZm9yIHt9IHskcm93IDwgJGVuZHJvd30ge2luY3Igcm93OyBzZXQgY29sIDB9IHsKKwlpZiB7W2xpbmRleCAkcm93aXNvcHQgJHJvd119IGNvbnRpbnVlCisJc2V0IGhhc3BhZCAwCisJc2V0IHkwIFtleHByIHskcm93IC0gMX1dCisJc2V0IHltIFtleHByIHskcm93IC0gMn1dCisJc2V0IGlkbGlzdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10KKwlzZXQgcHJldmlkbGlzdCBbbGluZGV4ICRyb3dpZGxpc3QgJHkwXQorCWlmIHskaWRsaXN0IGVxIHt9IHx8ICRwcmV2aWRsaXN0IGVxIHt9fSBjb250aW51ZQorCWlmIHskeW0gPj0gMH0geworCSAgICBzZXQgcHByZXZpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICR5bV0KKwkgICAgaWYgeyRwcHJldmlkbGlzdCBlcSB7fX0gY29udGludWUKKwl9IGVsc2UgeworCSAgICBzZXQgcHByZXZpZGxpc3Qge30KKwl9CisJc2V0IHgwIC0xCisJc2V0IHhtIC0xCisJZm9yIHt9IHskY29sIDwgW2xsZW5ndGggJGlkbGlzdF19IHtpbmNyIGNvbH0geworCSAgICBzZXQgaWQgW2xpbmRleCAkaWRsaXN0ICRjb2xdCisJICAgIGlmIHtbbGluZGV4ICRwcmV2aWRsaXN0ICRjb2xdIGVxICRpZH0gY29udGludWUKKwkgICAgaWYgeyRpZCBlcSB7fX0geworCQlzZXQgaGFzcGFkIDEKKwkJY29udGludWUKKwkgICAgfQorCSAgICBzZXQgeDAgW2xzZWFyY2ggLWV4YWN0ICRwcmV2aWRsaXN0ICRpZF0KKwkgICAgaWYgeyR4MCA8IDB9IGNvbnRpbnVlCisJICAgIHNldCB6IFtleHByIHskeDAgLSAkY29sfV0KKwkgICAgc2V0IGlzYXJyb3cgMAorCSAgICBzZXQgejAge30KKwkgICAgaWYgeyR5bSA+PSAwfSB7CisJCXNldCB4bSBbbHNlYXJjaCAtZXhhY3QgJHBwcmV2aWRsaXN0ICRpZF0KKwkJaWYgeyR4bSA+PSAwfSB7CisJCSAgICBzZXQgejAgW2V4cHIgeyR4bSAtICR4MH1dCisJCX0KKwkgICAgfQorCSAgICBpZiB7JHowIGVxIHt9fSB7CisJCSMgaWYgcm93IHkwIGlzIHRoZSBmaXJzdCBjaGlsZCBvZiAkaWQgdGhlbiBpdCdzIG5vdCBhbiBhcnJvdworCQlpZiB7W2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSAwXSBuZQorCQkgICAgW2xpbmRleCAkZGlzcGxheW9yZGVyICR5MF19IHsKKwkJICAgIHNldCBpc2Fycm93IDEKKwkJfQorCSAgICB9CisJICAgIGlmIHshJGlzYXJyb3cgJiYgJGlkIG5lIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XSAmJgorCQlbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0IFtleHByIHskcm93KzF9XV0gJGlkXSA8IDB9IHsKKwkJc2V0IGlzYXJyb3cgMQorCSAgICB9CisJICAgICMgTG9va2luZyBhdCBsaW5lcyBmcm9tIHRoaXMgcm93IHRvIHRoZSBwcmV2aW91cyByb3csCisJICAgICMgbWFrZSB0aGVtIGdvIHN0cmFpZ2h0IHVwIGlmIHRoZXkgZW5kIGluIGFuIGFycm93IG9uCisJICAgICMgdGhlIHByZXZpb3VzIHJvdzsgb3RoZXJ3aXNlIG1ha2UgdGhlbSBnbyBzdHJhaWdodCB1cAorCSAgICAjIG9yIGF0IDQ1IGRlZ3JlZXMuCisJICAgIGlmIHskeiA8IC0xIHx8ICgkeiA8IDAgJiYgJGlzYXJyb3cpfSB7CisJCSMgTGluZSBjdXJyZW50bHkgZ29lcyBsZWZ0IHRvbyBtdWNoOworCQkjIGluc2VydCBwYWRzIGluIHRoZSBwcmV2aW91cyByb3csIHRoZW4gb3B0aW1pemUgaXQKKwkJc2V0IG5wYWQgW2V4cHIgey0xIC0gJHogKyAkaXNhcnJvd31dCisJCWluc2VydF9wYWQgJHkwICR4MCAkbnBhZAorCQlpZiB7JHkwID4gMH0geworCQkgICAgb3B0aW1pemVfcm93cyAkeTAgJHgwICRyb3cKKwkJfQorCQlzZXQgcHJldmlkbGlzdCBbbGluZGV4ICRyb3dpZGxpc3QgJHkwXQorCQlzZXQgeDAgW2xzZWFyY2ggLWV4YWN0ICRwcmV2aWRsaXN0ICRpZF0KKwkJc2V0IHogW2V4cHIgeyR4MCAtICRjb2x9XQorCQlpZiB7JHowIG5lIHt9fSB7CisJCSAgICBzZXQgcHByZXZpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICR5bV0KKwkJICAgIHNldCB4bSBbbHNlYXJjaCAtZXhhY3QgJHBwcmV2aWRsaXN0ICRpZF0KKwkJICAgIHNldCB6MCBbZXhwciB7JHhtIC0gJHgwfV0KKwkJfQorCSAgICB9IGVsc2VpZiB7JHogPiAxIHx8ICgkeiA+IDAgJiYgJGlzYXJyb3cpfSB7CisJCSMgTGluZSBjdXJyZW50bHkgZ29lcyByaWdodCB0b28gbXVjaDsKKwkJIyBpbnNlcnQgcGFkcyBpbiB0aGlzIGxpbmUKKwkJc2V0IG5wYWQgW2V4cHIgeyR6IC0gMSArICRpc2Fycm93fV0KKwkJaW5zZXJ0X3BhZCAkcm93ICRjb2wgJG5wYWQKKwkJc2V0IGlkbGlzdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10KKwkJaW5jciBjb2wgJG5wYWQKKwkJc2V0IHogW2V4cHIgeyR4MCAtICRjb2x9XQorCQlzZXQgaGFzcGFkIDEKKwkgICAgfQorCSAgICBpZiB7JHowIGVxIHt9ICYmICEkaXNhcnJvdyAmJiAkeW0gPj0gMH0geworCQkjIHRoaXMgbGluZSBsaW5rcyB0byBpdHMgZmlyc3QgY2hpbGQgb24gcm93ICRyb3ctMgorCQlzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICR5bV0KKwkJc2V0IHhjIFtsc2VhcmNoIC1leGFjdCAkcHByZXZpZGxpc3QgJGlkXQorCQlpZiB7JHhjID49IDB9IHsKKwkJICAgIHNldCB6MCBbZXhwciB7JHhjIC0gJHgwfV0KKwkJfQorCSAgICB9CisJICAgICMgYXZvaWQgbGluZXMgamlnZ2luZyBsZWZ0IHRoZW4gaW1tZWRpYXRlbHkgcmlnaHQKKwkgICAgaWYgeyR6MCBuZSB7fSAmJiAkeiA8IDAgJiYgJHowID4gMH0geworCQlpbnNlcnRfcGFkICR5MCAkeDAgMQorCQlpbmNyIHgwCisJCW9wdGltaXplX3Jvd3MgJHkwICR4MCAkcm93CisJCXNldCBwcmV2aWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkeTBdCisJICAgIH0KKwl9CisJaWYgeyEkaGFzcGFkfSB7CisJICAgICMgRmluZCB0aGUgZmlyc3QgY29sdW1uIHRoYXQgZG9lc24ndCBoYXZlIGEgbGluZSBnb2luZyByaWdodAorCSAgICBmb3Ige3NldCBjb2wgW2xsZW5ndGggJGlkbGlzdF19IHtbaW5jciBjb2wgLTFdID49IDB9IHt9IHsKKwkJc2V0IGlkIFtsaW5kZXggJGlkbGlzdCAkY29sXQorCQlpZiB7JGlkIGVxIHt9fSBicmVhaworCQlzZXQgeDAgW2xzZWFyY2ggLWV4YWN0ICRwcmV2aWRsaXN0ICRpZF0KKwkJaWYgeyR4MCA8IDB9IHsKKwkJICAgICMgY2hlY2sgaWYgdGhpcyBpcyB0aGUgbGluayB0byB0aGUgZmlyc3QgY2hpbGQKKwkJICAgIHNldCBraWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICR5MF0KKwkJICAgIGlmIHtbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkaWQpIDBdIGVxICRraWR9IHsKKwkJCSMgaXQgaXMsIHdvcmsgb3V0IG9mZnNldCB0byBjaGlsZAorCQkJc2V0IHgwIFtsc2VhcmNoIC1leGFjdCAkcHJldmlkbGlzdCAka2lkXQorCQkgICAgfQorCQl9CisJCWlmIHskeDAgPD0gJGNvbH0gYnJlYWsKKwkgICAgfQorCSAgICAjIEluc2VydCBhIHBhZCBhdCB0aGF0IGNvbHVtbiBhcyBsb25nIGFzIGl0IGhhcyBhIGxpbmUgYW5kCisJICAgICMgaXNuJ3QgdGhlIGxhc3QgY29sdW1uCisJICAgIGlmIHskeDAgPj0gMCAmJiBbaW5jciBjb2xdIDwgW2xsZW5ndGggJGlkbGlzdF19IHsKKwkJc2V0IGlkbGlzdCBbbGluc2VydCAkaWRsaXN0ICRjb2wge31dCisJCWxzZXQgcm93aWRsaXN0ICRyb3cgJGlkbGlzdAorCQljaGFuZ2Vkcm93ICRyb3cKKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3Byb2MgeGMge3JvdyBjb2x9IHsKKyAgICBnbG9iYWwgY2FudngwIGxpbmVzcGMKKyAgICByZXR1cm4gW2V4cHIgeyRjYW52eDAgKyAkY29sICogJGxpbmVzcGN9XQorfQorCitwcm9jIHljIHtyb3d9IHsKKyAgICBnbG9iYWwgY2FudnkwIGxpbmVzcGMKKyAgICByZXR1cm4gW2V4cHIgeyRjYW52eTAgKyAkcm93ICogJGxpbmVzcGN9XQorfQorCitwcm9jIGxpbmV3aWR0aCB7aWR9IHsKKyAgICBnbG9iYWwgdGhpY2tlcmxpbmUgbHRoaWNrbmVzcworCisgICAgc2V0IHdpZCAkbHRoaWNrbmVzcworICAgIGlmIHtbaW5mbyBleGlzdHMgdGhpY2tlcmxpbmVdICYmICRpZCBlcSAkdGhpY2tlcmxpbmV9IHsKKwlzZXQgd2lkIFtleHByIHsyICogJGx0aGlja25lc3N9XQorICAgIH0KKyAgICByZXR1cm4gJHdpZAorfQorCitwcm9jIHJvd3JhbmdlcyB7aWR9IHsKKyAgICBnbG9iYWwgY3VydmlldyBjaGlsZHJlbiB1cGFycm93bGVuIGRvd25hcnJvd2xlbgorICAgIGdsb2JhbCByb3dpZGxpc3QKKworICAgIHNldCBraWRzICRjaGlsZHJlbigkY3VydmlldywkaWQpCisgICAgaWYgeyRraWRzIGVxIHt9fSB7CisJcmV0dXJuIHt9CisgICAgfQorICAgIHNldCByZXQge30KKyAgICBsYXBwZW5kIGtpZHMgJGlkCisgICAgZm9yZWFjaCBjaGlsZCAka2lkcyB7CisJaWYgeyFbY29tbWl0aW52aWV3ICRjaGlsZCAkY3Vydmlld119IGJyZWFrCisJc2V0IHJvdyBbcm93b2Zjb21taXQgJGNoaWxkXQorCWlmIHshW2luZm8gZXhpc3RzIHByZXZdfSB7CisJICAgIGxhcHBlbmQgcmV0IFtleHByIHskcm93ICsgMX1dCisJfSBlbHNlIHsKKwkgICAgaWYgeyRyb3cgPD0gJHByZXZyb3d9IHsKKwkJcHV0cyAib29wcyBjaGlsZHJlbiBvZiBbc2hvcnRpZHMgJGlkXSBvdXQgb2Ygb3JkZXIgW3Nob3J0aWRzICRjaGlsZF0gJHJvdyA8PSBbc2hvcnRpZHMgJHByZXZdICRwcmV2cm93IgorCSAgICB9CisJICAgICMgc2VlIGlmIHRoZSBsaW5lIGV4dGVuZHMgdGhlIHdob2xlIHdheSBmcm9tIHByZXZyb3cgdG8gcm93CisJICAgIGlmIHskcm93ID4gJHByZXZyb3cgKyAkdXBhcnJvd2xlbiArICRkb3duYXJyb3dsZW4gJiYKKwkJW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCBcCisJCQkgICAgW2V4cHIge2ludCgoJHJvdyArICRwcmV2cm93KSAvIDIpfV1dICRpZF0gPCAwfSB7CisJCSMgaXQgZG9lc24ndCwgc2VlIHdoZXJlIGl0IGVuZHMKKwkJc2V0IHIgW2V4cHIgeyRwcmV2cm93ICsgJGRvd25hcnJvd2xlbn1dCisJCWlmIHtbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0ICRyXSAkaWRdIDwgMH0geworCQkgICAgd2hpbGUge1tpbmNyIHIgLTFdID4gJHByZXZyb3cgJiYKKwkJCSAgIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJdICRpZF0gPCAwfSB7fQorCQl9IGVsc2UgeworCQkgICAgd2hpbGUge1tpbmNyIHJdIDw9ICRyb3cgJiYKKwkJCSAgIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJdICRpZF0gPj0gMH0ge30KKwkJICAgIGluY3IgciAtMQorCQl9CisJCWxhcHBlbmQgcmV0ICRyCisJCSMgc2VlIHdoZXJlIGl0IHN0YXJ0cyB1cCBhZ2FpbgorCQlzZXQgciBbZXhwciB7JHJvdyAtICR1cGFycm93bGVufV0KKwkJaWYge1tsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJdICRpZF0gPCAwfSB7CisJCSAgICB3aGlsZSB7W2luY3Igcl0gPCAkcm93ICYmCisJCQkgICBbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0ICRyXSAkaWRdIDwgMH0ge30KKwkJfSBlbHNlIHsKKwkJICAgIHdoaWxlIHtbaW5jciByIC0xXSA+PSAkcHJldnJvdyAmJgorCQkJICAgW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcl0gJGlkXSA+PSAwfSB7fQorCQkgICAgaW5jciByCisJCX0KKwkJbGFwcGVuZCByZXQgJHIKKwkgICAgfQorCX0KKwlpZiB7JGNoaWxkIGVxICRpZH0geworCSAgICBsYXBwZW5kIHJldCAkcm93CisJfQorCXNldCBwcmV2ICRjaGlsZAorCXNldCBwcmV2cm93ICRyb3cKKyAgICB9CisgICAgcmV0dXJuICRyZXQKK30KKworcHJvYyBkcmF3bGluZXNlZyB7aWQgcm93IGVuZHJvdyBhcnJvd2xvd30geworICAgIGdsb2JhbCByb3dpZGxpc3QgZGlzcGxheW9yZGVyIGlkZHJhd24gbGluZXNlZ3MKKyAgICBnbG9iYWwgY2FudiBjb2xvcm1hcCBsaW5lc3BjIGN1cnZpZXcgbWF4bGluZWxlbiBwYXJlbnRsaXN0CisKKyAgICBzZXQgY29scyBbbGlzdCBbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0ICRyb3ddICRpZF1dCisgICAgc2V0IGxlIFtleHByIHskcm93ICsgMX1dCisgICAgc2V0IGFycm93aGlnaCAxCisgICAgd2hpbGUgezF9IHsKKwlzZXQgYyBbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0ICRsZV0gJGlkXQorCWlmIHskYyA8IDB9IHsKKwkgICAgaW5jciBsZSAtMQorCSAgICBicmVhaworCX0KKwlsYXBwZW5kIGNvbHMgJGMKKwlzZXQgeCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJGxlXQorCWlmIHskeCBlcSAkaWR9IHsKKwkgICAgc2V0IGFycm93aGlnaCAwCisJICAgIGJyZWFrCisJfQorCWlmIHtbaW5mbyBleGlzdHMgaWRkcmF3bigkeCldIHx8ICRsZSA9PSAkZW5kcm93fSB7CisJICAgIHNldCBjIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgW2V4cHIgeyRsZSsxfV1dICRpZF0KKwkgICAgaWYgeyRjID49IDB9IHsKKwkJbGFwcGVuZCBjb2xzICRjCisJCXNldCBhcnJvd2hpZ2ggMAorCSAgICB9CisJICAgIGJyZWFrCisJfQorCWluY3IgbGUKKyAgICB9CisgICAgaWYgeyRsZSA8PSAkcm93fSB7CisJcmV0dXJuICRyb3cKKyAgICB9CisKKyAgICBzZXQgbGluZXMge30KKyAgICBzZXQgaSAwCisgICAgc2V0IGpvaW5oaWdoIDAKKyAgICBpZiB7W2luZm8gZXhpc3RzIGxpbmVzZWdzKCRpZCldfSB7CisJc2V0IGxpbmVzICRsaW5lc2VncygkaWQpCisJZm9yZWFjaCBsaSAkbGluZXMgeworCSAgICBzZXQgcjAgW2xpbmRleCAkbGkgMF0KKwkgICAgaWYgeyRyMCA+ICRyb3d9IHsKKwkJaWYgeyRyMCA9PSAkbGUgJiYgW2xpbmRleCAkbGkgMV0gLSAkcm93IDw9ICRtYXhsaW5lbGVufSB7CisJCSAgICBzZXQgam9pbmhpZ2ggMQorCQl9CisJCWJyZWFrCisJICAgIH0KKwkgICAgaW5jciBpCisJfQorICAgIH0KKyAgICBzZXQgam9pbmxvdyAwCisgICAgaWYgeyRpID4gMH0geworCXNldCBsaSBbbGluZGV4ICRsaW5lcyBbZXhwciB7JGktMX1dXQorCXNldCByMSBbbGluZGV4ICRsaSAxXQorCWlmIHskcjEgPT0gJHJvdyAmJiAkbGUgLSBbbGluZGV4ICRsaSAwXSA8PSAkbWF4bGluZWxlbn0geworCSAgICBzZXQgam9pbmxvdyAxCisJfQorICAgIH0KKworICAgIHNldCB4IFtsaW5kZXggJGNvbHMgW2V4cHIgeyRsZSAtICRyb3d9XV0KKyAgICBzZXQgeHAgW2xpbmRleCAkY29scyBbZXhwciB7JGxlIC0gMSAtICRyb3d9XV0KKyAgICBzZXQgZGlyIFtleHByIHskeHAgLSAkeH1dCisgICAgaWYgeyRqb2luaGlnaH0geworCXNldCBpdGggW2xpbmRleCAkbGluZXMgJGkgMl0KKwlzZXQgY29vcmRzIFskY2FudiBjb29yZHMgJGl0aF0KKwlzZXQgYWggWyRjYW52IGl0ZW1jZ2V0ICRpdGggLWFycm93XQorCXNldCBhcnJvd2hpZ2ggW2V4cHIgeyRhaCBlcSAiZmlyc3QiIHx8ICRhaCBlcSAiYm90aCJ9XQorCXNldCB4MiBbbGluZGV4ICRjb2xzIFtleHByIHskbGUgKyAxIC0gJHJvd31dXQorCWlmIHskeDIgbmUge30gJiYgJHggLSAkeDIgPT0gJGRpcn0geworCSAgICBzZXQgY29vcmRzIFtscmFuZ2UgJGNvb3JkcyAwIGVuZC0yXQorCX0KKyAgICB9IGVsc2UgeworCXNldCBjb29yZHMgW2xpc3QgW3hjICRsZSAkeF0gW3ljICRsZV1dCisgICAgfQorICAgIGlmIHskam9pbmxvd30geworCXNldCBpdGwgW2xpbmRleCAkbGluZXMgW2V4cHIgeyRpLTF9XSAyXQorCXNldCBhbCBbJGNhbnYgaXRlbWNnZXQgJGl0bCAtYXJyb3ddCisJc2V0IGFycm93bG93IFtleHByIHskYWwgZXEgImxhc3QiIHx8ICRhbCBlcSAiYm90aCJ9XQorICAgIH0gZWxzZWlmIHskYXJyb3dsb3d9IHsKKwlpZiB7W2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCBbZXhwciB7JHJvdy0xfV1dICRpZF0gPj0gMCB8fAorCSAgICBbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcGFyZW50bGlzdCBbZXhwciB7JHJvdy0xfV1dICRpZF0gPj0gMH0geworCSAgICBzZXQgYXJyb3dsb3cgMAorCX0KKyAgICB9CisgICAgc2V0IGFycm93IFtsaW5kZXgge25vbmUgZmlyc3QgbGFzdCBib3RofSBbZXhwciB7JGFycm93aGlnaCArIDIqJGFycm93bG93fV1dCisgICAgZm9yIHtzZXQgeSAkbGV9IHtbaW5jciB5IC0xXSA+ICRyb3d9IHt9IHsKKwlzZXQgeCAkeHAKKwlzZXQgeHAgW2xpbmRleCAkY29scyBbZXhwciB7JHkgLSAxIC0gJHJvd31dXQorCXNldCBuZGlyIFtleHByIHskeHAgLSAkeH1dCisJaWYgeyRkaXIgIT0gJG5kaXIgfHwgJHhwIDwgMH0geworCSAgICBsYXBwZW5kIGNvb3JkcyBbeGMgJHkgJHhdIFt5YyAkeV0KKwl9CisJc2V0IGRpciAkbmRpcgorICAgIH0KKyAgICBpZiB7ISRqb2lubG93fSB7CisJaWYgeyR4cCA8IDB9IHsKKwkgICAgIyBqb2luIHBhcmVudCBsaW5lIHRvIGZpcnN0IGNoaWxkCisJICAgIHNldCBjaCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10KKwkgICAgc2V0IHhjIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10gJGNoXQorCSAgICBpZiB7JHhjIDwgMH0geworCQlwdXRzICJvb3BzOiBkcmF3bGluZXNlZzogY2hpbGQgJGNoIG5vdCBvbiByb3cgJHJvdyIKKwkgICAgfSBlbHNlaWYgeyR4YyAhPSAkeH0geworCQlpZiB7KCRhcnJvd2hpZ2ggJiYgJGxlID09ICRyb3cgKyAxKSB8fCAkZGlyID09IDB9IHsKKwkJICAgIHNldCBkIFtleHByIHtpbnQoMC41ICogJGxpbmVzcGMpfV0KKwkJICAgIHNldCB4MSBbeGMgJHJvdyAkeF0KKwkJICAgIGlmIHskeGMgPCAkeH0geworCQkJc2V0IHgyIFtleHByIHskeDEgLSAkZH1dCisJCSAgICB9IGVsc2UgeworCQkJc2V0IHgyIFtleHByIHskeDEgKyAkZH1dCisJCSAgICB9CisJCSAgICBzZXQgeTIgW3ljICRyb3ddCisJCSAgICBzZXQgeTEgW2V4cHIgeyR5MiArICRkfV0KKwkJICAgIGxhcHBlbmQgY29vcmRzICR4MSAkeTEgJHgyICR5MgorCQl9IGVsc2VpZiB7JHhjIDwgJHggLSAxfSB7CisJCSAgICBsYXBwZW5kIGNvb3JkcyBbeGMgJHJvdyBbZXhwciB7JHgtMX1dXSBbeWMgJHJvd10KKwkJfSBlbHNlaWYgeyR4YyA+ICR4ICsgMX0geworCQkgICAgbGFwcGVuZCBjb29yZHMgW3hjICRyb3cgW2V4cHIgeyR4KzF9XV0gW3ljICRyb3ddCisJCX0KKwkJc2V0IHggJHhjCisJICAgIH0KKwkgICAgbGFwcGVuZCBjb29yZHMgW3hjICRyb3cgJHhdIFt5YyAkcm93XQorCX0gZWxzZSB7CisJICAgIHNldCB4biBbeGMgJHJvdyAkeHBdCisJICAgIHNldCB5biBbeWMgJHJvd10KKwkgICAgbGFwcGVuZCBjb29yZHMgJHhuICR5bgorCX0KKwlpZiB7ISRqb2luaGlnaH0geworCSAgICBhc3NpZ25jb2xvciAkaWQKKwkgICAgc2V0IHQgWyRjYW52IGNyZWF0ZSBsaW5lICRjb29yZHMgLXdpZHRoIFtsaW5ld2lkdGggJGlkXSBcCisJCSAgICAgICAtZmlsbCAkY29sb3JtYXAoJGlkKSAtdGFncyBsaW5lcy4kaWQgLWFycm93ICRhcnJvd10KKwkgICAgJGNhbnYgbG93ZXIgJHQKKwkgICAgYmluZGxpbmUgJHQgJGlkCisJICAgIHNldCBsaW5lcyBbbGluc2VydCAkbGluZXMgJGkgW2xpc3QgJHJvdyAkbGUgJHRdXQorCX0gZWxzZSB7CisJICAgICRjYW52IGNvb3JkcyAkaXRoICRjb29yZHMKKwkgICAgaWYgeyRhcnJvdyBuZSAkYWh9IHsKKwkJJGNhbnYgaXRlbWNvbmYgJGl0aCAtYXJyb3cgJGFycm93CisJICAgIH0KKwkgICAgbHNldCBsaW5lcyAkaSAwICRyb3cKKwl9CisgICAgfSBlbHNlIHsKKwlzZXQgeG8gW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCBbZXhwciB7JHJvdyAtIDF9XV0gJGlkXQorCXNldCBuZGlyIFtleHByIHskeG8gLSAkeHB9XQorCXNldCBjbG93IFskY2FudiBjb29yZHMgJGl0bF0KKwlpZiB7JGRpciA9PSAkbmRpcn0geworCSAgICBzZXQgY2xvdyBbbHJhbmdlICRjbG93IDIgZW5kXQorCX0KKwlzZXQgY29vcmRzIFtjb25jYXQgJGNvb3JkcyAkY2xvd10KKwlpZiB7ISRqb2luaGlnaH0geworCSAgICBsc2V0IGxpbmVzIFtleHByIHskaS0xfV0gMSAkbGUKKwl9IGVsc2UgeworCSAgICAjIGNvYWxlc2NlIHR3byBwaWVjZXMKKwkgICAgJGNhbnYgZGVsZXRlICRpdGgKKwkgICAgc2V0IGIgW2xpbmRleCAkbGluZXMgW2V4cHIgeyRpLTF9XSAwXQorCSAgICBzZXQgZSBbbGluZGV4ICRsaW5lcyAkaSAxXQorCSAgICBzZXQgbGluZXMgW2xyZXBsYWNlICRsaW5lcyBbZXhwciB7JGktMX1dICRpIFtsaXN0ICRiICRlICRpdGxdXQorCX0KKwkkY2FudiBjb29yZHMgJGl0bCAkY29vcmRzCisJaWYgeyRhcnJvdyBuZSAkYWx9IHsKKwkgICAgJGNhbnYgaXRlbWNvbmYgJGl0bCAtYXJyb3cgJGFycm93CisJfQorICAgIH0KKworICAgIHNldCBsaW5lc2VncygkaWQpICRsaW5lcworICAgIHJldHVybiAkbGUKK30KKworcHJvYyBkcmF3cGFyZW50bGlua3Mge2lkIHJvd30geworICAgIGdsb2JhbCByb3dpZGxpc3QgY2FudiBjb2xvcm1hcCBjdXJ2aWV3IHBhcmVudGxpc3QKKyAgICBnbG9iYWwgaWRwb3MgbGluZXNwYworCisgICAgc2V0IHJvd2lkcyBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10KKyAgICBzZXQgY29sIFtsc2VhcmNoIC1leGFjdCAkcm93aWRzICRpZF0KKyAgICBpZiB7JGNvbCA8IDB9IHJldHVybgorICAgIHNldCBvbGRzIFtsaW5kZXggJHBhcmVudGxpc3QgJHJvd10KKyAgICBzZXQgcm93MiBbZXhwciB7JHJvdyArIDF9XQorICAgIHNldCB4IFt4YyAkcm93ICRjb2xdCisgICAgc2V0IHkgW3ljICRyb3ddCisgICAgc2V0IHkyIFt5YyAkcm93Ml0KKyAgICBzZXQgZCBbZXhwciB7aW50KDAuNSAqICRsaW5lc3BjKX1dCisgICAgc2V0IHltaWQgW2V4cHIgeyR5ICsgJGR9XQorICAgIHNldCBpZHMgW2xpbmRleCAkcm93aWRsaXN0ICRyb3cyXQorICAgICMgcm14ID0gcmlnaHQtbW9zdCBYIGNvb3JkIHVzZWQKKyAgICBzZXQgcm14IDAKKyAgICBmb3JlYWNoIHAgJG9sZHMgeworCXNldCBpIFtsc2VhcmNoIC1leGFjdCAkaWRzICRwXQorCWlmIHskaSA8IDB9IHsKKwkgICAgcHV0cyAib29wcywgcGFyZW50ICRwIG9mICRpZCBub3QgaW4gbGlzdCIKKwkgICAgY29udGludWUKKwl9CisJc2V0IHgyIFt4YyAkcm93MiAkaV0KKwlpZiB7JHgyID4gJHJteH0geworCSAgICBzZXQgcm14ICR4MgorCX0KKwlzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJHJvd2lkcyAkcF0KKwlpZiB7JGogPCAwfSB7CisJICAgICMgZHJhd2xpbmVzZWcgd2lsbCBkbyB0aGlzIG9uZSBmb3IgdXMKKwkgICAgY29udGludWUKKwl9CisJYXNzaWduY29sb3IgJHAKKwkjIHNob3VsZCBoYW5kbGUgZHVwbGljYXRlZCBwYXJlbnRzIGhlcmUuLi4KKwlzZXQgY29vcmRzIFtsaXN0ICR4ICR5XQorCWlmIHskaSAhPSAkY29sfSB7CisJICAgICMgaWYgYXR0YWNoaW5nIHRvIGEgdmVydGljYWwgc2VnbWVudCwgZHJhdyBhIHNtYWxsZXIKKwkgICAgIyBzbGFudCBmb3IgdmlzdWFsIGRpc3RpbmN0bmVzcworCSAgICBpZiB7JGkgPT0gJGp9IHsKKwkJaWYgeyRpIDwgJGNvbH0geworCQkgICAgbGFwcGVuZCBjb29yZHMgW2V4cHIgeyR4MiArICRkfV0gJHkgJHgyICR5bWlkCisJCX0gZWxzZSB7CisJCSAgICBsYXBwZW5kIGNvb3JkcyBbZXhwciB7JHgyIC0gJGR9XSAkeSAkeDIgJHltaWQKKwkJfQorCSAgICB9IGVsc2VpZiB7JGkgPCAkY29sICYmICRpIDwgJGp9IHsKKwkJIyBzZWdtZW50IHNsYW50cyB0b3dhcmRzIHVzIGFscmVhZHkKKwkJbGFwcGVuZCBjb29yZHMgW3hjICRyb3cgJGpdICR5CisJICAgIH0gZWxzZSB7CisJCWlmIHskaSA8ICRjb2wgLSAxfSB7CisJCSAgICBsYXBwZW5kIGNvb3JkcyBbZXhwciB7JHgyICsgJGxpbmVzcGN9XSAkeQorCQl9IGVsc2VpZiB7JGkgPiAkY29sICsgMX0geworCQkgICAgbGFwcGVuZCBjb29yZHMgW2V4cHIgeyR4MiAtICRsaW5lc3BjfV0gJHkKKwkJfQorCQlsYXBwZW5kIGNvb3JkcyAkeDIgJHkyCisJICAgIH0KKwl9IGVsc2UgeworCSAgICBsYXBwZW5kIGNvb3JkcyAkeDIgJHkyCisJfQorCXNldCB0IFskY2FudiBjcmVhdGUgbGluZSAkY29vcmRzIC13aWR0aCBbbGluZXdpZHRoICRwXSBcCisJCSAgIC1maWxsICRjb2xvcm1hcCgkcCkgLXRhZ3MgbGluZXMuJHBdCisJJGNhbnYgbG93ZXIgJHQKKwliaW5kbGluZSAkdCAkcAorICAgIH0KKyAgICBpZiB7JHJteCA+IFtsaW5kZXggJGlkcG9zKCRpZCkgMV19IHsKKwlsc2V0IGlkcG9zKCRpZCkgMSAkcm14CisJcmVkcmF3dGFncyAkaWQKKyAgICB9Cit9CisKK3Byb2MgZHJhd2xpbmVzIHtpZH0geworICAgIGdsb2JhbCBjYW52CisKKyAgICAkY2FudiBpdGVtY29uZiBsaW5lcy4kaWQgLXdpZHRoIFtsaW5ld2lkdGggJGlkXQorfQorCitwcm9jIGRyYXdjbWl0dGV4dCB7aWQgcm93IGNvbH0geworICAgIGdsb2JhbCBsaW5lc3BjIGNhbnYgY2FudjIgY2FudjMgZmdjb2xvciBjdXJ2aWV3CisgICAgZ2xvYmFsIGNtaXRsaXN0ZWQgY29tbWl0aW5mbyByb3dpZGxpc3QgcGFyZW50bGlzdAorICAgIGdsb2JhbCByb3d0ZXh0eCBpZHBvcyBpZHRhZ3MgaWRoZWFkcyBpZG90aGVycmVmcworICAgIGdsb2JhbCBsaW5laHRhZyBsaW5lbnRhZyBsaW5lZHRhZyBzZWxlY3RlZGxpbmUKKyAgICBnbG9iYWwgY2FudnhtYXggYm9sZGlkcyBib2xkbmFtZWlkcyBmZ2NvbG9yIG1hcmtlZGlkCisgICAgZ2xvYmFsIG1haW5oZWFkaWQgbnVsbGlkIG51bGxpZDIgY2lyY2xlaXRlbSBjaXJjbGVjb2xvcnMgY3R4YnV0CisKKyAgICAjIGxpc3RlZCBpcyAwIGZvciBib3VuZGFyeSwgMSBmb3Igbm9ybWFsLCAyIGZvciBuZWdhdGl2ZSwgMyBmb3IgbGVmdCwgNCBmb3IgcmlnaHQKKyAgICBzZXQgbGlzdGVkICRjbWl0bGlzdGVkKCRjdXJ2aWV3LCRpZCkKKyAgICBpZiB7JGlkIGVxICRudWxsaWR9IHsKKwlzZXQgb2ZpbGwgcmVkCisgICAgfSBlbHNlaWYgeyRpZCBlcSAkbnVsbGlkMn0geworCXNldCBvZmlsbCBncmVlbgorICAgIH0gZWxzZWlmIHskaWQgZXEgJG1haW5oZWFkaWR9IHsKKwlzZXQgb2ZpbGwgeWVsbG93CisgICAgfSBlbHNlIHsKKwlzZXQgb2ZpbGwgW2xpbmRleCAkY2lyY2xlY29sb3JzICRsaXN0ZWRdCisgICAgfQorICAgIHNldCB4IFt4YyAkcm93ICRjb2xdCisgICAgc2V0IHkgW3ljICRyb3ddCisgICAgc2V0IG9yYWQgW2V4cHIgeyRsaW5lc3BjIC8gM31dCisgICAgaWYgeyRsaXN0ZWQgPD0gMn0geworCXNldCB0IFskY2FudiBjcmVhdGUgb3ZhbCBbZXhwciB7JHggLSAkb3JhZH1dIFtleHByIHskeSAtICRvcmFkfV0gXAorCQkgICBbZXhwciB7JHggKyAkb3JhZCAtIDF9XSBbZXhwciB7JHkgKyAkb3JhZCAtIDF9XSBcCisJCSAgIC1maWxsICRvZmlsbCAtb3V0bGluZSAkZmdjb2xvciAtd2lkdGggMSAtdGFncyBjaXJjbGVdCisgICAgfSBlbHNlaWYgeyRsaXN0ZWQgPT0gM30geworCSMgdHJpYW5nbGUgcG9pbnRpbmcgbGVmdCBmb3IgbGVmdC1zaWRlIGNvbW1pdHMKKwlzZXQgdCBbJGNhbnYgY3JlYXRlIHBvbHlnb24gXAorCQkgICBbZXhwciB7JHggLSAkb3JhZH1dICR5IFwKKwkJICAgW2V4cHIgeyR4ICsgJG9yYWQgLSAxfV0gW2V4cHIgeyR5IC0gJG9yYWR9XSBcCisJCSAgIFtleHByIHskeCArICRvcmFkIC0gMX1dIFtleHByIHskeSArICRvcmFkIC0gMX1dIFwKKwkJICAgLWZpbGwgJG9maWxsIC1vdXRsaW5lICRmZ2NvbG9yIC13aWR0aCAxIC10YWdzIGNpcmNsZV0KKyAgICB9IGVsc2UgeworCSMgdHJpYW5nbGUgcG9pbnRpbmcgcmlnaHQgZm9yIHJpZ2h0LXNpZGUgY29tbWl0cworCXNldCB0IFskY2FudiBjcmVhdGUgcG9seWdvbiBcCisJCSAgIFtleHByIHskeCArICRvcmFkIC0gMX1dICR5IFwKKwkJICAgW2V4cHIgeyR4IC0gJG9yYWR9XSBbZXhwciB7JHkgLSAkb3JhZH1dIFwKKwkJICAgW2V4cHIgeyR4IC0gJG9yYWR9XSBbZXhwciB7JHkgKyAkb3JhZCAtIDF9XSBcCisJCSAgIC1maWxsICRvZmlsbCAtb3V0bGluZSAkZmdjb2xvciAtd2lkdGggMSAtdGFncyBjaXJjbGVdCisgICAgfQorICAgIHNldCBjaXJjbGVpdGVtKCRyb3cpICR0CisgICAgJGNhbnYgcmFpc2UgJHQKKyAgICAkY2FudiBiaW5kICR0IDwxPiB7c2VsY2FudmxpbmUge30gJXggJXl9CisgICAgc2V0IHJteCBbbGxlbmd0aCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd11dCisgICAgc2V0IG9sZHMgW2xpbmRleCAkcGFyZW50bGlzdCAkcm93XQorICAgIGlmIHskb2xkcyBuZSB7fX0geworCXNldCBuZXh0aWRzIFtsaW5kZXggJHJvd2lkbGlzdCBbZXhwciB7JHJvdyArIDF9XV0KKwlmb3JlYWNoIHAgJG9sZHMgeworCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJG5leHRpZHMgJHBdCisJICAgIGlmIHskaSA+ICRybXh9IHsKKwkJc2V0IHJteCAkaQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgeHQgW3hjICRyb3cgJHJteF0KKyAgICBzZXQgcm93dGV4dHgoJHJvdykgJHh0CisgICAgc2V0IGlkcG9zKCRpZCkgW2xpc3QgJHggJHh0ICR5XQorICAgIGlmIHtbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldIHx8IFtpbmZvIGV4aXN0cyBpZGhlYWRzKCRpZCldCisJfHwgW2luZm8gZXhpc3RzIGlkb3RoZXJyZWZzKCRpZCldfSB7CisJc2V0IHh0IFtkcmF3dGFncyAkaWQgJHggJHh0ICR5XQorICAgIH0KKyAgICBpZiB7W2xpbmRleCAkY29tbWl0aW5mbygkaWQpIDZdID4gMH0geworCXNldCB4dCBbZHJhd25vdGVzaWduICR4dCAkeV0KKyAgICB9CisgICAgc2V0IGhlYWRsaW5lIFtsaW5kZXggJGNvbW1pdGluZm8oJGlkKSAwXQorICAgIHNldCBuYW1lIFtsaW5kZXggJGNvbW1pdGluZm8oJGlkKSAxXQorICAgIHNldCBkYXRlIFtsaW5kZXggJGNvbW1pdGluZm8oJGlkKSAyXQorICAgIHNldCBkYXRlIFtmb3JtYXRkYXRlICRkYXRlXQorICAgIHNldCBmb250IG1haW5mb250CisgICAgc2V0IG5mb250IG1haW5mb250CisgICAgc2V0IGlzYm9sZCBbaXNoaWdobGlnaHRlZCAkaWRdCisgICAgaWYgeyRpc2JvbGQgPiAwfSB7CisJbGFwcGVuZCBib2xkaWRzICRpZAorCXNldCBmb250IG1haW5mb250Ym9sZAorCWlmIHskaXNib2xkID4gMX0geworCSAgICBsYXBwZW5kIGJvbGRuYW1laWRzICRpZAorCSAgICBzZXQgbmZvbnQgbWFpbmZvbnRib2xkCisJfQorICAgIH0KKyAgICBzZXQgbGluZWh0YWcoJGlkKSBbJGNhbnYgY3JlYXRlIHRleHQgJHh0ICR5IC1hbmNob3IgdyAtZmlsbCAkZmdjb2xvciBcCisJCQkgICAtdGV4dCAkaGVhZGxpbmUgLWZvbnQgJGZvbnQgLXRhZ3MgdGV4dF0KKyAgICAkY2FudiBiaW5kICRsaW5laHRhZygkaWQpICRjdHhidXQgInJvd21lbnUgJVggJVkgJGlkIgorICAgIHNldCBsaW5lbnRhZygkaWQpIFskY2FudjIgY3JlYXRlIHRleHQgMyAkeSAtYW5jaG9yIHcgLWZpbGwgJGZnY29sb3IgXAorCQkJICAgLXRleHQgJG5hbWUgLWZvbnQgJG5mb250IC10YWdzIHRleHRdCisgICAgc2V0IGxpbmVkdGFnKCRpZCkgWyRjYW52MyBjcmVhdGUgdGV4dCAzICR5IC1hbmNob3IgdyAtZmlsbCAkZmdjb2xvciBcCisJCQkgICAtdGV4dCAkZGF0ZSAtZm9udCBtYWluZm9udCAtdGFncyB0ZXh0XQorICAgIGlmIHskc2VsZWN0ZWRsaW5lID09ICRyb3d9IHsKKwltYWtlX3NlY3NlbCAkaWQKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBtYXJrZWRpZF0gJiYgJG1hcmtlZGlkIGVxICRpZH0geworCW1ha2VfaWRtYXJrICRpZAorICAgIH0KKyAgICBzZXQgeHIgW2V4cHIgeyR4dCArIFtmb250IG1lYXN1cmUgJGZvbnQgJGhlYWRsaW5lXX1dCisgICAgaWYgeyR4ciA+ICRjYW52eG1heH0geworCXNldCBjYW52eG1heCAkeHIKKwlzZXRjYW52c2Nyb2xsCisgICAgfQorfQorCitwcm9jIGRyYXdjbWl0cm93IHtyb3d9IHsKKyAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHJvd2lkbGlzdCBucm93c19kcmF3bgorICAgIGdsb2JhbCBpZGRyYXduIG1hcmtpbmdtYXRjaGVzCisgICAgZ2xvYmFsIGNvbW1pdGluZm8gbnVtY29tbWl0cworICAgIGdsb2JhbCBmaWxlaGlnaGxpZ2h0IGZoaWdobGlnaHRzIGZpbmRwYXR0ZXJuIG5oaWdobGlnaHRzCisgICAgZ2xvYmFsIGhsdmlldyB2aGlnaGxpZ2h0cworICAgIGdsb2JhbCBoaWdobGlnaHRfcmVsYXRlZCByaGlnaGxpZ2h0cworCisgICAgaWYgeyRyb3cgPj0gJG51bWNvbW1pdHN9IHJldHVybgorCisgICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQorICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAhW2luZm8gZXhpc3RzIHZoaWdobGlnaHRzKCRpZCldfSB7CisJYXNrdmhpZ2hsaWdodCAkcm93ICRpZAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGZpbGVoaWdobGlnaHRdICYmICFbaW5mbyBleGlzdHMgZmhpZ2hsaWdodHMoJGlkKV19IHsKKwlhc2tmaWxlaGlnaGxpZ2h0ICRyb3cgJGlkCisgICAgfQorICAgIGlmIHskZmluZHBhdHRlcm4gbmUge30gJiYgIVtpbmZvIGV4aXN0cyBuaGlnaGxpZ2h0cygkaWQpXX0geworCWFza2ZpbmRoaWdobGlnaHQgJHJvdyAkaWQKKyAgICB9CisgICAgaWYgeyRoaWdobGlnaHRfcmVsYXRlZCBuZSBbbWMgIk5vbmUiXSAmJiAhW2luZm8gZXhpc3RzIHJoaWdobGlnaHRzKCRpZCldfSB7CisJYXNrcmVsaGlnaGxpZ2h0ICRyb3cgJGlkCisgICAgfQorICAgIGlmIHshW2luZm8gZXhpc3RzIGlkZHJhd24oJGlkKV19IHsKKwlzZXQgY29sIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10gJGlkXQorCWlmIHskY29sIDwgMH0geworCSAgICBwdXRzICJvb3BzLCByb3cgJHJvdyBpZCAkaWQgbm90IGluIGxpc3QiCisJICAgIHJldHVybgorCX0KKwlpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJICAgIGdldGNvbW1pdCAkaWQKKwl9CisJYXNzaWduY29sb3IgJGlkCisJZHJhd2NtaXR0ZXh0ICRpZCAkcm93ICRjb2wKKwlzZXQgaWRkcmF3bigkaWQpIDEKKwlpbmNyIG5yb3dzX2RyYXduCisgICAgfQorICAgIGlmIHskbWFya2luZ21hdGNoZXN9IHsKKwltYXJrcm93bWF0Y2hlcyAkcm93ICRpZAorICAgIH0KK30KKworcHJvYyBkcmF3Y29tbWl0cyB7cm93IHtlbmRyb3cge319fSB7CisgICAgZ2xvYmFsIG51bWNvbW1pdHMgaWRkcmF3biBkaXNwbGF5b3JkZXIgY3VydmlldyBuZWVkX3JlZGlzcGxheQorICAgIGdsb2JhbCBwYXJlbnRsaXN0IHJvd2lkbGlzdCByb3dmaW5hbCB1cGFycm93bGVuIGRvd25hcnJvd2xlbiBucm93c19kcmF3bgorCisgICAgaWYgeyRyb3cgPCAwfSB7CisJc2V0IHJvdyAwCisgICAgfQorICAgIGlmIHskZW5kcm93IGVxIHt9fSB7CisJc2V0IGVuZHJvdyAkcm93CisgICAgfQorICAgIGlmIHskZW5kcm93ID49ICRudW1jb21taXRzfSB7CisJc2V0IGVuZHJvdyBbZXhwciB7JG51bWNvbW1pdHMgLSAxfV0KKyAgICB9CisKKyAgICBzZXQgcmwxIFtleHByIHskcm93IC0gJGRvd25hcnJvd2xlbiAtIDN9XQorICAgIGlmIHskcmwxIDwgMH0geworCXNldCBybDEgMAorICAgIH0KKyAgICBzZXQgcm8xIFtleHByIHskcm93IC0gM31dCisgICAgaWYgeyRybzEgPCAwfSB7CisJc2V0IHJvMSAwCisgICAgfQorICAgIHNldCByMiBbZXhwciB7JGVuZHJvdyArICR1cGFycm93bGVuICsgM31dCisgICAgaWYgeyRyMiA+ICRudW1jb21taXRzfSB7CisJc2V0IHIyICRudW1jb21taXRzCisgICAgfQorICAgIGZvciB7c2V0IHIgJHJsMX0geyRyIDwgJHIyfSB7aW5jciByfSB7CisJaWYge1tsaW5kZXggJHJvd2lkbGlzdCAkcl0gbmUge30gJiYgW2xpbmRleCAkcm93ZmluYWwgJHJdfSB7CisJICAgIGlmIHskcmwxIDwgJHJ9IHsKKwkJbGF5b3V0cm93cyAkcmwxICRyCisJICAgIH0KKwkgICAgc2V0IHJsMSBbZXhwciB7JHIgKyAxfV0KKwl9CisgICAgfQorICAgIGlmIHskcmwxIDwgJHJ9IHsKKwlsYXlvdXRyb3dzICRybDEgJHIKKyAgICB9CisgICAgb3B0aW1pemVfcm93cyAkcm8xIDAgJHIyCisgICAgaWYgeyRuZWVkX3JlZGlzcGxheSB8fCAkbnJvd3NfZHJhd24gPiAyMDAwfSB7CisJY2xlYXJfZGlzcGxheQorICAgIH0KKworICAgICMgbWFrZSB0aGUgbGluZXMgam9pbiB0byBhbHJlYWR5LWRyYXduIHJvd3MgZWl0aGVyIHNpZGUKKyAgICBzZXQgciBbZXhwciB7JHJvdyAtIDF9XQorICAgIGlmIHskciA8IDAgfHwgIVtpbmZvIGV4aXN0cyBpZGRyYXduKFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcl0pXX0geworCXNldCByICRyb3cKKyAgICB9CisgICAgc2V0IGVyIFtleHByIHskZW5kcm93ICsgMX1dCisgICAgaWYgeyRlciA+PSAkbnVtY29tbWl0cyB8fAorCSFbaW5mbyBleGlzdHMgaWRkcmF3bihbbGluZGV4ICRkaXNwbGF5b3JkZXIgJGVyXSldfSB7CisJc2V0IGVyICRlbmRyb3cKKyAgICB9CisgICAgZm9yIHt9IHskciA8PSAkZXJ9IHtpbmNyIHJ9IHsKKwlzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyXQorCXNldCB3YXNkcmF3biBbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXQorCWRyYXdjbWl0cm93ICRyCisJaWYgeyRyID09ICRlcn0gYnJlYWsKKwlzZXQgbmV4dGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciBbZXhwciB7JHIgKyAxfV1dCisJaWYgeyR3YXNkcmF3biAmJiBbaW5mbyBleGlzdHMgaWRkcmF3bigkbmV4dGlkKV19IGNvbnRpbnVlCisJZHJhd3BhcmVudGxpbmtzICRpZCAkcgorCisJc2V0IHJvd2lkcyBbbGluZGV4ICRyb3dpZGxpc3QgJHJdCisJZm9yZWFjaCBsaWQgJHJvd2lkcyB7CisJICAgIGlmIHskbGlkIGVxIHt9fSBjb250aW51ZQorCSAgICBpZiB7W2luZm8gZXhpc3RzIGxpbmVlbmQoJGxpZCldICYmICRsaW5lZW5kKCRsaWQpID4gJHJ9IGNvbnRpbnVlCisJICAgIGlmIHskbGlkIGVxICRpZH0geworCQkjIHNlZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBhbnkgb2YgaXRzIHBhcmVudHMKKwkJZm9yZWFjaCBwIFtsaW5kZXggJHBhcmVudGxpc3QgJHJdIHsKKwkJICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJHJvd2lkcyAkcF0gPCAwfSB7CisJCQkjIG1ha2UgdGhpcyBsaW5lIGV4dGVuZCB1cCB0byB0aGUgY2hpbGQKKwkJCXNldCBsaW5lZW5kKCRwKSBbZHJhd2xpbmVzZWcgJHAgJHIgJGVyIDBdCisJCSAgICB9CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGxpbmVlbmQoJGxpZCkgW2RyYXdsaW5lc2VnICRsaWQgJHIgJGVyIDFdCisJICAgIH0KKwl9CisgICAgfQorfQorCitwcm9jIHVuZG9sYXlvdXQge3Jvd30geworICAgIGdsb2JhbCB1cGFycm93bGVuIG1pbmdhcGxlbiBkb3duYXJyb3dsZW4KKyAgICBnbG9iYWwgcm93aWRsaXN0IHJvd2lzb3B0IHJvd2ZpbmFsIG5lZWRfcmVkaXNwbGF5CisKKyAgICBzZXQgciBbZXhwciB7JHJvdyAtICgkdXBhcnJvd2xlbiArICRtaW5nYXBsZW4gKyAkZG93bmFycm93bGVuKX1dCisgICAgaWYgeyRyIDwgMH0geworCXNldCByIDAKKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICRyb3dpZGxpc3RdID4gJHJ9IHsKKwlpbmNyIHIgLTEKKwlzZXQgcm93aWRsaXN0IFtscmFuZ2UgJHJvd2lkbGlzdCAwICRyXQorCXNldCByb3dmaW5hbCBbbHJhbmdlICRyb3dmaW5hbCAwICRyXQorCXNldCByb3dpc29wdCBbbHJhbmdlICRyb3dpc29wdCAwICRyXQorCXNldCBuZWVkX3JlZGlzcGxheSAxCisJcnVuIGRyYXd2aXNpYmxlCisgICAgfQorfQorCitwcm9jIGRyYXd2aXNpYmxlIHt9IHsKKyAgICBnbG9iYWwgY2FudiBsaW5lc3BjIGN1cnZpZXcgdnJvd21vZCBzZWxlY3RlZGxpbmUgdGFyZ2V0cm93IHRhcmdldGlkCisgICAgZ2xvYmFsIG5lZWRfcmVkaXNwbGF5IGNzY3JvbGwgbnVtY29tbWl0cworCisgICAgc2V0IGZzIFskY2FudiB5dmlld10KKyAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisgICAgaWYgeyR5bWF4IGVxIHt9IHx8ICR5bWF4ID09IDAgfHwgJG51bWNvbW1pdHMgPT0gMH0gcmV0dXJuCisgICAgc2V0IGYwIFtsaW5kZXggJGZzIDBdCisgICAgc2V0IGYxIFtsaW5kZXggJGZzIDFdCisgICAgc2V0IHkwIFtleHByIHtpbnQoJGYwICogJHltYXgpfV0KKyAgICBzZXQgeTEgW2V4cHIge2ludCgkZjEgKiAkeW1heCl9XQorCisgICAgaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRpZF19IHsKKwlpZiB7W2NvbW1pdGludmlldyAkdGFyZ2V0aWQgJGN1cnZpZXddfSB7CisJICAgIHNldCByIFtyb3dvZmNvbW1pdCAkdGFyZ2V0aWRdCisJICAgIGlmIHskciAhPSAkdGFyZ2V0cm93fSB7CisJCSMgRml4IHVwIHRoZSBzY3JvbGxyZWdpb24gYW5kIGNoYW5nZSB0aGUgc2Nyb2xsaW5nIHBvc2l0aW9uCisJCSMgbm93IHRoYXQgb3VyIHRhcmdldCByb3cgaGFzIG1vdmVkLgorCQlzZXQgZGlmZiBbZXhwciB7KCRyIC0gJHRhcmdldHJvdykgKiAkbGluZXNwY31dCisJCXNldCB0YXJnZXRyb3cgJHIKKwkJc2V0Y2FudnNjcm9sbAorCQlzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisJCWluY3IgeTAgJGRpZmYKKwkJaW5jciB5MSAkZGlmZgorCQlzZXQgZjAgW2V4cHIgeyR5MCAvICR5bWF4fV0KKwkJc2V0IGYxIFtleHByIHskeTEgLyAkeW1heH1dCisJCWFsbGNhbnZzIHl2aWV3IG1vdmV0byAkZjAKKwkJJGNzY3JvbGwgc2V0ICRmMCAkZjEKKwkJc2V0IG5lZWRfcmVkaXNwbGF5IDEKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHVuc2V0IHRhcmdldGlkCisJfQorICAgIH0KKworICAgIHNldCByb3cgW2V4cHIge2ludCgoJHkwIC0gMykgLyAkbGluZXNwYykgLSAxfV0KKyAgICBzZXQgZW5kcm93IFtleHByIHtpbnQoKCR5MSAtIDMpIC8gJGxpbmVzcGMpICsgMX1dCisgICAgaWYgeyRlbmRyb3cgPj0gJHZyb3dtb2QoJGN1cnZpZXcpfSB7CisJdXBkYXRlX2FyY3Jvd3MgJGN1cnZpZXcKKyAgICB9CisgICAgaWYgeyRzZWxlY3RlZGxpbmUgbmUge30gJiYKKwkkcm93IDw9ICRzZWxlY3RlZGxpbmUgJiYgJHNlbGVjdGVkbGluZSA8PSAkZW5kcm93fSB7CisJc2V0IHRhcmdldHJvdyAkc2VsZWN0ZWRsaW5lCisgICAgfSBlbHNlaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRpZF19IHsKKwlzZXQgdGFyZ2V0cm93IFtleHByIHtpbnQoKCRyb3cgKyAkZW5kcm93KSAvIDIpfV0KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRyb3ddfSB7CisJaWYgeyR0YXJnZXRyb3cgPj0gJG51bWNvbW1pdHN9IHsKKwkgICAgc2V0IHRhcmdldHJvdyBbZXhwciB7JG51bWNvbW1pdHMgLSAxfV0KKwl9CisJc2V0IHRhcmdldGlkIFtjb21taXRvbnJvdyAkdGFyZ2V0cm93XQorICAgIH0KKyAgICBkcmF3Y29tbWl0cyAkcm93ICRlbmRyb3cKK30KKworcHJvYyBjbGVhcl9kaXNwbGF5IHt9IHsKKyAgICBnbG9iYWwgaWRkcmF3biBsaW5lc2VncyBuZWVkX3JlZGlzcGxheSBucm93c19kcmF3bgorICAgIGdsb2JhbCB2aGlnaGxpZ2h0cyBmaGlnaGxpZ2h0cyBuaGlnaGxpZ2h0cyByaGlnaGxpZ2h0cworICAgIGdsb2JhbCBsaW5laHRhZyBsaW5lbnRhZyBsaW5lZHRhZyBib2xkaWRzIGJvbGRuYW1laWRzCisKKyAgICBhbGxjYW52cyBkZWxldGUgYWxsCisgICAgY2F0Y2gge3Vuc2V0IGlkZHJhd259CisgICAgY2F0Y2gge3Vuc2V0IGxpbmVzZWdzfQorICAgIGNhdGNoIHt1bnNldCBsaW5laHRhZ30KKyAgICBjYXRjaCB7dW5zZXQgbGluZW50YWd9CisgICAgY2F0Y2gge3Vuc2V0IGxpbmVkdGFnfQorICAgIHNldCBib2xkaWRzIHt9CisgICAgc2V0IGJvbGRuYW1laWRzIHt9CisgICAgY2F0Y2gge3Vuc2V0IHZoaWdobGlnaHRzfQorICAgIGNhdGNoIHt1bnNldCBmaGlnaGxpZ2h0c30KKyAgICBjYXRjaCB7dW5zZXQgbmhpZ2hsaWdodHN9CisgICAgY2F0Y2gge3Vuc2V0IHJoaWdobGlnaHRzfQorICAgIHNldCBuZWVkX3JlZGlzcGxheSAwCisgICAgc2V0IG5yb3dzX2RyYXduIDAKK30KKworcHJvYyBmaW5kY3Jvc3NpbmdzIHtpZH0geworICAgIGdsb2JhbCByb3dpZGxpc3QgcGFyZW50bGlzdCBudW1jb21taXRzIGRpc3BsYXlvcmRlcgorCisgICAgc2V0IGNyb3NzIHt9CisgICAgc2V0IGNjcm9zcyB7fQorICAgIGZvcmVhY2gge3MgZX0gW3Jvd3JhbmdlcyAkaWRdIHsKKwlpZiB7JGUgPj0gJG51bWNvbW1pdHN9IHsKKwkgICAgc2V0IGUgW2V4cHIgeyRudW1jb21taXRzIC0gMX1dCisJfQorCWlmIHskZSA8PSAkc30gY29udGludWUKKwlmb3Ige3NldCByb3cgJGV9IHtbaW5jciByb3cgLTFdID49ICRzfSB7fSB7CisJICAgIHNldCB4IFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10gJGlkXQorCSAgICBpZiB7JHggPCAwfSBicmVhaworCSAgICBzZXQgb2xkcyBbbGluZGV4ICRwYXJlbnRsaXN0ICRyb3ddCisJICAgIHNldCBraWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisJICAgIHNldCBraWR4IFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10gJGtpZF0KKwkgICAgaWYgeyRraWR4IDwgMH0gY29udGludWUKKwkgICAgc2V0IG5leHRyb3cgW2xpbmRleCAkcm93aWRsaXN0IFtleHByIHskcm93ICsgMX1dXQorCSAgICBmb3JlYWNoIHAgJG9sZHMgeworCQlzZXQgcHggW2xzZWFyY2ggLWV4YWN0ICRuZXh0cm93ICRwXQorCQlpZiB7JHB4IDwgMH0gY29udGludWUKKwkJaWYgeygka2lkeCA8ICR4ICYmICR4IDwgJHB4KSB8fCAoJHB4IDwgJHggJiYgJHggPCAka2lkeCl9IHsKKwkJICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJGNjcm9zcyAkcF0gPj0gMH0gY29udGludWUKKwkJICAgIGlmIHskeCA9PSAkcHggKyAoJGtpZHggPCAkcHg/IC0xOiAxKX0geworCQkJbGFwcGVuZCBjY3Jvc3MgJHAKKwkJICAgIH0gZWxzZWlmIHtbbHNlYXJjaCAtZXhhY3QgJGNyb3NzICRwXSA8IDB9IHsKKwkJCWxhcHBlbmQgY3Jvc3MgJHAKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gW2NvbmNhdCAkY2Nyb3NzIHt7fX0gJGNyb3NzXQorfQorCitwcm9jIGFzc2lnbmNvbG9yIHtpZH0geworICAgIGdsb2JhbCBjb2xvcm1hcCBjb2xvcnMgbmV4dGNvbG9yCisgICAgZ2xvYmFsIHBhcmVudHMgY2hpbGRyZW4gY2hpbGRyZW4gY3VydmlldworCisgICAgaWYge1tpbmZvIGV4aXN0cyBjb2xvcm1hcCgkaWQpXX0gcmV0dXJuCisgICAgc2V0IG5jb2xvcnMgW2xsZW5ndGggJGNvbG9yc10KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCldfSB7CisJc2V0IGtpZHMgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkKKyAgICB9IGVsc2UgeworCXNldCBraWRzIHt9CisgICAgfQorICAgIGlmIHtbbGxlbmd0aCAka2lkc10gPT0gMX0geworCXNldCBjaGlsZCBbbGluZGV4ICRraWRzIDBdCisJaWYge1tpbmZvIGV4aXN0cyBjb2xvcm1hcCgkY2hpbGQpXQorCSAgICAmJiBbbGxlbmd0aCAkcGFyZW50cygkY3VydmlldywkY2hpbGQpXSA9PSAxfSB7CisJICAgIHNldCBjb2xvcm1hcCgkaWQpICRjb2xvcm1hcCgkY2hpbGQpCisJICAgIHJldHVybgorCX0KKyAgICB9CisgICAgc2V0IGJhZGNvbG9ycyB7fQorICAgIHNldCBvcmlnYmFkIHt9CisgICAgZm9yZWFjaCB4IFtmaW5kY3Jvc3NpbmdzICRpZF0geworCWlmIHskeCBlcSB7fX0geworCSAgICAjIGRlbGltaXRlciBiZXR3ZWVuIGNvcm5lciBjcm9zc2luZ3MgYW5kIG90aGVyIGNyb3NzaW5ncworCSAgICBpZiB7W2xsZW5ndGggJGJhZGNvbG9yc10gPj0gJG5jb2xvcnMgLSAxfSBicmVhaworCSAgICBzZXQgb3JpZ2JhZCAkYmFkY29sb3JzCisJfQorCWlmIHtbaW5mbyBleGlzdHMgY29sb3JtYXAoJHgpXQorCSAgICAmJiBbbHNlYXJjaCAtZXhhY3QgJGJhZGNvbG9ycyAkY29sb3JtYXAoJHgpXSA8IDB9IHsKKwkgICAgbGFwcGVuZCBiYWRjb2xvcnMgJGNvbG9ybWFwKCR4KQorCX0KKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICRiYWRjb2xvcnNdID49ICRuY29sb3JzfSB7CisJc2V0IGJhZGNvbG9ycyAkb3JpZ2JhZAorICAgIH0KKyAgICBzZXQgb3JpZ2JhZCAkYmFkY29sb3JzCisgICAgaWYge1tsbGVuZ3RoICRiYWRjb2xvcnNdIDwgJG5jb2xvcnMgLSAxfSB7CisJZm9yZWFjaCBjaGlsZCAka2lkcyB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgY29sb3JtYXAoJGNoaWxkKV0KKwkJJiYgW2xzZWFyY2ggLWV4YWN0ICRiYWRjb2xvcnMgJGNvbG9ybWFwKCRjaGlsZCldIDwgMH0geworCQlsYXBwZW5kIGJhZGNvbG9ycyAkY29sb3JtYXAoJGNoaWxkKQorCSAgICB9CisJICAgIGZvcmVhY2ggcCAkcGFyZW50cygkY3VydmlldywkY2hpbGQpIHsKKwkJaWYge1tpbmZvIGV4aXN0cyBjb2xvcm1hcCgkcCldCisJCSAgICAmJiBbbHNlYXJjaCAtZXhhY3QgJGJhZGNvbG9ycyAkY29sb3JtYXAoJHApXSA8IDB9IHsKKwkJICAgIGxhcHBlbmQgYmFkY29sb3JzICRjb2xvcm1hcCgkcCkKKwkJfQorCSAgICB9CisJfQorCWlmIHtbbGxlbmd0aCAkYmFkY29sb3JzXSA+PSAkbmNvbG9yc30geworCSAgICBzZXQgYmFkY29sb3JzICRvcmlnYmFkCisJfQorICAgIH0KKyAgICBmb3Ige3NldCBpIDB9IHskaSA8PSAkbmNvbG9yc30ge2luY3IgaX0geworCXNldCBjIFtsaW5kZXggJGNvbG9ycyAkbmV4dGNvbG9yXQorCWlmIHtbaW5jciBuZXh0Y29sb3JdID49ICRuY29sb3JzfSB7CisJICAgIHNldCBuZXh0Y29sb3IgMAorCX0KKwlpZiB7W2xzZWFyY2ggLWV4YWN0ICRiYWRjb2xvcnMgJGNdfSBicmVhaworICAgIH0KKyAgICBzZXQgY29sb3JtYXAoJGlkKSAkYworfQorCitwcm9jIGJpbmRsaW5lIHt0IGlkfSB7CisgICAgZ2xvYmFsIGNhbnYKKworICAgICRjYW52IGJpbmQgJHQgPEVudGVyPiAibGluZWVudGVyICV4ICV5ICRpZCIKKyAgICAkY2FudiBiaW5kICR0IDxNb3Rpb24+ICJsaW5lbW90aW9uICV4ICV5ICRpZCIKKyAgICAkY2FudiBiaW5kICR0IDxMZWF2ZT4gImxpbmVsZWF2ZSAkaWQiCisgICAgJGNhbnYgYmluZCAkdCA8QnV0dG9uLTE+ICJsaW5lY2xpY2sgJXggJXkgJGlkIDEiCit9CisKK3Byb2MgZHJhd3RhZ3Mge2lkIHggeHQgeTF9IHsKKyAgICBnbG9iYWwgaWR0YWdzIGlkaGVhZHMgaWRvdGhlcnJlZnMgbWFpbmhlYWQKKyAgICBnbG9iYWwgbGluZXNwYyBsdGhpY2tuZXNzCisgICAgZ2xvYmFsIGNhbnYgcm93dGV4dHggY3VydmlldyBmZ2NvbG9yIGJnY29sb3IgY3R4YnV0CisKKyAgICBzZXQgbWFya3Mge30KKyAgICBzZXQgbnRhZ3MgMAorICAgIHNldCBuaGVhZHMgMAorICAgIGlmIHtbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldfSB7CisJc2V0IG1hcmtzICRpZHRhZ3MoJGlkKQorCXNldCBudGFncyBbbGxlbmd0aCAkbWFya3NdCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgaWRoZWFkcygkaWQpXX0geworCXNldCBtYXJrcyBbY29uY2F0ICRtYXJrcyAkaWRoZWFkcygkaWQpXQorCXNldCBuaGVhZHMgW2xsZW5ndGggJGlkaGVhZHMoJGlkKV0KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBpZG90aGVycmVmcygkaWQpXX0geworCXNldCBtYXJrcyBbY29uY2F0ICRtYXJrcyAkaWRvdGhlcnJlZnMoJGlkKV0KKyAgICB9CisgICAgaWYgeyRtYXJrcyBlcSB7fX0geworCXJldHVybiAkeHQKKyAgICB9CisKKyAgICBzZXQgZGVsdGEgW2V4cHIge2ludCgwLjUgKiAoJGxpbmVzcGMgLSAkbHRoaWNrbmVzcykpfV0KKyAgICBzZXQgeXQgW2V4cHIgeyR5MSAtIDAuNSAqICRsaW5lc3BjfV0KKyAgICBzZXQgeWIgW2V4cHIgeyR5dCArICRsaW5lc3BjIC0gMX1dCisgICAgc2V0IHh2YWxzIHt9CisgICAgc2V0IHd2YWxzIHt9CisgICAgc2V0IGkgLTEKKyAgICBmb3JlYWNoIHRhZyAkbWFya3MgeworCWluY3IgaQorCWlmIHskaSA+PSAkbnRhZ3MgJiYgJGkgPCAkbnRhZ3MgKyAkbmhlYWRzICYmICR0YWcgZXEgJG1haW5oZWFkfSB7CisJICAgIHNldCB3aWQgW2ZvbnQgbWVhc3VyZSBtYWluZm9udGJvbGQgJHRhZ10KKwl9IGVsc2UgeworCSAgICBzZXQgd2lkIFtmb250IG1lYXN1cmUgbWFpbmZvbnQgJHRhZ10KKwl9CisJbGFwcGVuZCB4dmFscyAkeHQKKwlsYXBwZW5kIHd2YWxzICR3aWQKKwlzZXQgeHQgW2V4cHIgeyR4dCArICRkZWx0YSArICR3aWQgKyAkbHRoaWNrbmVzcyArICRsaW5lc3BjfV0KKyAgICB9CisgICAgc2V0IHQgWyRjYW52IGNyZWF0ZSBsaW5lICR4ICR5MSBbbGluZGV4ICR4dmFscyBlbmRdICR5MSBcCisJICAgICAgIC13aWR0aCAkbHRoaWNrbmVzcyAtZmlsbCBibGFjayAtdGFncyB0YWcuJGlkXQorICAgICRjYW52IGxvd2VyICR0CisgICAgZm9yZWFjaCB0YWcgJG1hcmtzIHggJHh2YWxzIHdpZCAkd3ZhbHMgeworCXNldCB0YWdfcXVvdGVkIFtzdHJpbmcgbWFwIHslICUlfSAkdGFnXQorCXNldCB4bCBbZXhwciB7JHggKyAkZGVsdGF9XQorCXNldCB4ciBbZXhwciB7JHggKyAkZGVsdGEgKyAkd2lkICsgJGx0aGlja25lc3N9XQorCXNldCBmb250IG1haW5mb250CisJaWYge1tpbmNyIG50YWdzIC0xXSA+PSAwfSB7CisJICAgICMgZHJhdyBhIHRhZworCSAgICBzZXQgdCBbJGNhbnYgY3JlYXRlIHBvbHlnb24gJHggW2V4cHIgeyR5dCArICRkZWx0YX1dICR4bCAkeXQgXAorCQkgICAgICAgJHhyICR5dCAkeHIgJHliICR4bCAkeWIgJHggW2V4cHIgeyR5YiAtICRkZWx0YX1dIFwKKwkJICAgICAgIC13aWR0aCAxIC1vdXRsaW5lIGJsYWNrIC1maWxsIHllbGxvdyAtdGFncyB0YWcuJGlkXQorCSAgICAkY2FudiBiaW5kICR0IDwxPiBbbGlzdCBzaG93dGFnICR0YWdfcXVvdGVkIDFdCisJICAgIHNldCByb3d0ZXh0eChbcm93b2Zjb21taXQgJGlkXSkgW2V4cHIgeyR4ciArICRsaW5lc3BjfV0KKwl9IGVsc2UgeworCSAgICAjIGRyYXcgYSBoZWFkIG9yIG90aGVyIHJlZgorCSAgICBpZiB7W2luY3IgbmhlYWRzIC0xXSA+PSAwfSB7CisJCXNldCBjb2wgZ3JlZW4KKwkJaWYgeyR0YWcgZXEgJG1haW5oZWFkfSB7CisJCSAgICBzZXQgZm9udCBtYWluZm9udGJvbGQKKwkJfQorCSAgICB9IGVsc2UgeworCQlzZXQgY29sICIjZGRkZGZmIgorCSAgICB9CisJICAgIHNldCB4bCBbZXhwciB7JHhsIC0gJGRlbHRhLzJ9XQorCSAgICAkY2FudiBjcmVhdGUgcG9seWdvbiAkeCAkeXQgJHhyICR5dCAkeHIgJHliICR4ICR5YiBcCisJCS13aWR0aCAxIC1vdXRsaW5lIGJsYWNrIC1maWxsICRjb2wgLXRhZ3MgdGFnLiRpZAorCSAgICBpZiB7W3JlZ2V4cCB7XihyZW1vdGVzLy4qL3xyZW1vdGVzLyl9ICR0YWcgbWF0Y2ggcmVtb3RlcHJlZml4XX0geworCSAgICAgICAgc2V0IHJ3aWQgW2ZvbnQgbWVhc3VyZSBtYWluZm9udCAkcmVtb3RlcHJlZml4XQorCQlzZXQgeGkgW2V4cHIgeyR4ICsgMX1dCisJCXNldCB5dGkgW2V4cHIgeyR5dCArIDF9XQorCQlzZXQgeHJpIFtleHByIHskeCArICRyd2lkfV0KKwkJJGNhbnYgY3JlYXRlIHBvbHlnb24gJHhpICR5dGkgJHhyaSAkeXRpICR4cmkgJHliICR4aSAkeWIgXAorCQkJLXdpZHRoIDAgLWZpbGwgIiNmZmRkYWEiIC10YWdzIHRhZy4kaWQKKwkgICAgfQorCX0KKwlzZXQgdCBbJGNhbnYgY3JlYXRlIHRleHQgJHhsICR5MSAtYW5jaG9yIHcgLXRleHQgJHRhZyAtZmlsbCAkZmdjb2xvciBcCisJCSAgIC1mb250ICRmb250IC10YWdzIFtsaXN0IHRhZy4kaWQgdGV4dF1dCisJaWYgeyRudGFncyA+PSAwfSB7CisJICAgICRjYW52IGJpbmQgJHQgPDE+IFtsaXN0IHNob3d0YWcgJHRhZ19xdW90ZWQgMV0KKwl9IGVsc2VpZiB7JG5oZWFkcyA+PSAwfSB7CisJICAgICRjYW52IGJpbmQgJHQgJGN0eGJ1dCBbbGlzdCBoZWFkbWVudSAlWCAlWSAkaWQgJHRhZ19xdW90ZWRdCisJfQorICAgIH0KKyAgICByZXR1cm4gJHh0Cit9CisKK3Byb2MgZHJhd25vdGVzaWduIHt4dCB5fSB7CisgICAgZ2xvYmFsIGxpbmVzcGMgY2FudiBmZ2NvbG9yCisKKyAgICBzZXQgb3JhZCBbZXhwciB7JGxpbmVzcGMgLyAzfV0KKyAgICBzZXQgdCBbJGNhbnYgY3JlYXRlIHJlY3RhbmdsZSBbZXhwciB7JHh0IC0gJG9yYWR9XSBbZXhwciB7JHkgLSAkb3JhZH1dIFwKKwkgICAgICAgW2V4cHIgeyR4dCArICRvcmFkIC0gMX1dIFtleHByIHskeSArICRvcmFkIC0gMX1dIFwKKwkgICAgICAgLWZpbGwgeWVsbG93IC1vdXRsaW5lICRmZ2NvbG9yIC13aWR0aCAxIC10YWdzIGNpcmNsZV0KKyAgICBzZXQgeHQgW2V4cHIgeyR4dCArICRvcmFkICogM31dCisgICAgcmV0dXJuICR4dAorfQorCitwcm9jIHhjb29yZCB7aSBsZXZlbCBsbn0geworICAgIGdsb2JhbCBjYW52eDAgeHNwYzEgeHNwYzIKKworICAgIHNldCB4IFtleHByIHskY2FudngwICsgJGkgKiAkeHNwYzEoJGxuKX1dCisgICAgaWYgeyRpID4gMCAmJiAkaSA9PSAkbGV2ZWx9IHsKKwlzZXQgeCBbZXhwciB7JHggKyAwLjUgKiAoJHhzcGMyIC0gJHhzcGMxKCRsbikpfV0KKyAgICB9IGVsc2VpZiB7JGkgPiAkbGV2ZWx9IHsKKwlzZXQgeCBbZXhwciB7JHggKyAkeHNwYzIgLSAkeHNwYzEoJGxuKX1dCisgICAgfQorICAgIHJldHVybiAkeAorfQorCitwcm9jIHNob3dfc3RhdHVzIHttc2d9IHsKKyAgICBnbG9iYWwgY2FudiBmZ2NvbG9yCisKKyAgICBjbGVhcl9kaXNwbGF5CisgICAgJGNhbnYgY3JlYXRlIHRleHQgMyAzIC1hbmNob3IgbncgLXRleHQgJG1zZyAtZm9udCBtYWluZm9udCBcCisJLXRhZ3MgdGV4dCAtZmlsbCAkZmdjb2xvcgorfQorCisjIERvbid0IGNoYW5nZSB0aGUgdGV4dCBwYW5lIGN1cnNvciBpZiBpdCBpcyBjdXJyZW50bHkgdGhlIGhhbmQgY3Vyc29yLAorIyBzaG93aW5nIHRoYXQgd2UgYXJlIG92ZXIgYSBzaGExIElEIGxpbmsuCitwcm9jIHNldHRleHRjdXJzb3Ige2N9IHsKKyAgICBnbG9iYWwgY3RleHQgY3VydGV4dGN1cnNvcgorCisgICAgaWYge1skY3RleHQgY2dldCAtY3Vyc29yXSA9PSAkY3VydGV4dGN1cnNvcn0geworCSRjdGV4dCBjb25maWcgLWN1cnNvciAkYworICAgIH0KKyAgICBzZXQgY3VydGV4dGN1cnNvciAkYworfQorCitwcm9jIG5vd2J1c3kge3doYXQge25hbWUge319fSB7CisgICAgZ2xvYmFsIGlzYnVzeSBidXN5bmFtZSBzdGF0dXN3CisKKyAgICBpZiB7W2FycmF5IG5hbWVzIGlzYnVzeV0gZXEge319IHsKKwkuIGNvbmZpZyAtY3Vyc29yIHdhdGNoCisJc2V0dGV4dGN1cnNvciB3YXRjaAorICAgIH0KKyAgICBzZXQgaXNidXN5KCR3aGF0KSAxCisgICAgc2V0IGJ1c3luYW1lKCR3aGF0KSAkbmFtZQorICAgIGlmIHskbmFtZSBuZSB7fX0geworCSRzdGF0dXN3IGNvbmYgLXRleHQgJG5hbWUKKyAgICB9Cit9CisKK3Byb2Mgbm90YnVzeSB7d2hhdH0geworICAgIGdsb2JhbCBpc2J1c3kgbWFpbmN1cnNvciB0ZXh0Y3Vyc29yIGJ1c3luYW1lIHN0YXR1c3cKKworICAgIGNhdGNoIHsKKwl1bnNldCBpc2J1c3koJHdoYXQpCisJaWYgeyRidXN5bmFtZSgkd2hhdCkgbmUge30gJiYKKwkgICAgWyRzdGF0dXN3IGNnZXQgLXRleHRdIGVxICRidXN5bmFtZSgkd2hhdCl9IHsKKwkgICAgJHN0YXR1c3cgY29uZiAtdGV4dCB7fQorCX0KKyAgICB9CisgICAgaWYge1thcnJheSBuYW1lcyBpc2J1c3ldIGVxIHt9fSB7CisJLiBjb25maWcgLWN1cnNvciAkbWFpbmN1cnNvcgorCXNldHRleHRjdXJzb3IgJHRleHRjdXJzb3IKKyAgICB9Cit9CisKK3Byb2MgZmluZG1hdGNoZXMge2Z9IHsKKyAgICBnbG9iYWwgZmluZHR5cGUgZmluZHN0cmluZworICAgIGlmIHskZmluZHR5cGUgPT0gW21jICJSZWdleHAiXX0geworCXNldCBtYXRjaGVzIFtyZWdleHAgLWluZGljZXMgLWFsbCAtaW5saW5lICRmaW5kc3RyaW5nICRmXQorICAgIH0gZWxzZSB7CisJc2V0IGZzICRmaW5kc3RyaW5nCisJaWYgeyRmaW5kdHlwZSA9PSBbbWMgIklnbkNhc2UiXX0geworCSAgICBzZXQgZiBbc3RyaW5nIHRvbG93ZXIgJGZdCisJICAgIHNldCBmcyBbc3RyaW5nIHRvbG93ZXIgJGZzXQorCX0KKwlzZXQgbWF0Y2hlcyB7fQorCXNldCBpIDAKKwlzZXQgbCBbc3RyaW5nIGxlbmd0aCAkZnNdCisJd2hpbGUge1tzZXQgaiBbc3RyaW5nIGZpcnN0ICRmcyAkZiAkaV1dID49IDB9IHsKKwkgICAgbGFwcGVuZCBtYXRjaGVzIFtsaXN0ICRqIFtleHByIHskaiskbC0xfV1dCisJICAgIHNldCBpIFtleHByIHskaiArICRsfV0KKwl9CisgICAgfQorICAgIHJldHVybiAkbWF0Y2hlcworfQorCitwcm9jIGRvZmluZCB7e2Rpcm4gMX0ge3dyYXAgMX19IHsKKyAgICBnbG9iYWwgZmluZHN0cmluZyBmaW5kc3RhcnRsaW5lIGZpbmRjdXJsaW5lIHNlbGVjdGVkbGluZSBudW1jb21taXRzCisgICAgZ2xvYmFsIGdkdHR5cGUgZmlsZWhpZ2hsaWdodCBmaF9zZXJpYWwgZmluZF9kaXJuIGZpbmRhbGxvd3dyYXAKKworICAgIGlmIHtbaW5mbyBleGlzdHMgZmluZF9kaXJuXX0geworCWlmIHskZmluZF9kaXJuID09ICRkaXJufSByZXR1cm4KKwlzdG9wZmluZGluZworICAgIH0KKyAgICBmb2N1cyAuCisgICAgaWYgeyRmaW5kc3RyaW5nIGVxIHt9IHx8ICRudW1jb21taXRzID09IDB9IHJldHVybgorICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSB7CisJc2V0IGZpbmRzdGFydGxpbmUgW2xpbmRleCBbdmlzaWJsZXJvd3NdIFtleHByIHskZGlybiA8IDB9XV0KKyAgICB9IGVsc2UgeworCXNldCBmaW5kc3RhcnRsaW5lICRzZWxlY3RlZGxpbmUKKyAgICB9CisgICAgc2V0IGZpbmRjdXJsaW5lICRmaW5kc3RhcnRsaW5lCisgICAgbm93YnVzeSBmaW5kaW5nIFttYyAiU2VhcmNoaW5nIl0KKyAgICBpZiB7JGdkdHR5cGUgbmUgW21jICJjb250YWluaW5nOiJdICYmICFbaW5mbyBleGlzdHMgZmlsZWhpZ2hsaWdodF19IHsKKwlhZnRlciBjYW5jZWwgZG9fZmlsZV9obCAkZmhfc2VyaWFsCisJZG9fZmlsZV9obCAkZmhfc2VyaWFsCisgICAgfQorICAgIHNldCBmaW5kX2Rpcm4gJGRpcm4KKyAgICBzZXQgZmluZGFsbG93d3JhcCAkd3JhcAorICAgIHJ1biBmaW5kbW9yZQorfQorCitwcm9jIHN0b3BmaW5kaW5nIHt9IHsKKyAgICBnbG9iYWwgZmluZF9kaXJuIGZpbmRjdXJsaW5lIGZwcm9nY29vcmQKKworICAgIGlmIHtbaW5mbyBleGlzdHMgZmluZF9kaXJuXX0geworCXVuc2V0IGZpbmRfZGlybgorCXVuc2V0IGZpbmRjdXJsaW5lCisJbm90YnVzeSBmaW5kaW5nCisJc2V0IGZwcm9nY29vcmQgMAorCWFkanVzdHByb2dyZXNzCisgICAgfQorICAgIHN0b3BibGFtaW5nCit9CisKK3Byb2MgZmluZG1vcmUge30geworICAgIGdsb2JhbCBjb21taXRkYXRhIGNvbW1pdGluZm8gbnVtY29tbWl0cyBmaW5kcGF0dGVybiBmaW5kbG9jCisgICAgZ2xvYmFsIGZpbmRzdGFydGxpbmUgZmluZGN1cmxpbmUgZmluZGFsbG93d3JhcAorICAgIGdsb2JhbCBmaW5kX2Rpcm4gZ2R0dHlwZSBmaGlnaGxpZ2h0cyBmcHJvZ2Nvb3JkCisgICAgZ2xvYmFsIGN1cnZpZXcgdmFyY29yZGVyIHZyb3dudW0gdmFyY2NvbW1pdHMgdnJvd21vZAorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgZmluZF9kaXJuXX0geworCXJldHVybiAwCisgICAgfQorICAgIHNldCBmbGR0eXBlcyBbbGlzdCBbbWMgIkhlYWRsaW5lIl0gW21jICJBdXRob3IiXSAiIiBbbWMgIkNvbW1pdHRlciJdICIiIFttYyAiQ29tbWVudHMiXV0KKyAgICBzZXQgbCAkZmluZGN1cmxpbmUKKyAgICBzZXQgbW9yZXRvZG8gMAorICAgIGlmIHskZmluZF9kaXJuID4gMH0geworCWluY3IgbAorCWlmIHskbCA+PSAkbnVtY29tbWl0c30geworCSAgICBzZXQgbCAwCisJfQorCWlmIHskbCA8PSAkZmluZHN0YXJ0bGluZX0geworCSAgICBzZXQgbGltIFtleHByIHskZmluZHN0YXJ0bGluZSArIDF9XQorCX0gZWxzZSB7CisJICAgIHNldCBsaW0gJG51bWNvbW1pdHMKKwkgICAgc2V0IG1vcmV0b2RvICRmaW5kYWxsb3d3cmFwCisJfQorICAgIH0gZWxzZSB7CisJaWYgeyRsID09IDB9IHsKKwkgICAgc2V0IGwgJG51bWNvbW1pdHMKKwl9CisJaW5jciBsIC0xCisJaWYgeyRsID49ICRmaW5kc3RhcnRsaW5lfSB7CisJICAgIHNldCBsaW0gW2V4cHIgeyRmaW5kc3RhcnRsaW5lIC0gMX1dCisJfSBlbHNlIHsKKwkgICAgc2V0IGxpbSAtMQorCSAgICBzZXQgbW9yZXRvZG8gJGZpbmRhbGxvd3dyYXAKKwl9CisgICAgfQorICAgIHNldCBuIFtleHByIHsoJGxpbSAtICRsKSAqICRmaW5kX2Rpcm59XQorICAgIGlmIHskbiA+IDUwMH0geworCXNldCBuIDUwMAorCXNldCBtb3JldG9kbyAxCisgICAgfQorICAgIGlmIHskbCArICgkZmluZF9kaXJuID4gMD8gJG46IDEpID4gJHZyb3dtb2QoJGN1cnZpZXcpfSB7CisJdXBkYXRlX2FyY3Jvd3MgJGN1cnZpZXcKKyAgICB9CisgICAgc2V0IGZvdW5kIDAKKyAgICBzZXQgZG9tb3JlIDEKKyAgICBzZXQgYWkgW2JzZWFyY2ggJHZyb3dudW0oJGN1cnZpZXcpICRsXQorICAgIHNldCBhIFtsaW5kZXggJHZhcmNvcmRlcigkY3VydmlldykgJGFpXQorICAgIHNldCBhcm93IFtsaW5kZXggJHZyb3dudW0oJGN1cnZpZXcpICRhaV0KKyAgICBzZXQgaWRzIFtsaW5kZXggJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKV0KKyAgICBzZXQgYXJvd2VuZCBbZXhwciB7JGFyb3cgKyBbbGxlbmd0aCAkaWRzXX1dCisgICAgaWYgeyRnZHR0eXBlIGVxIFttYyAiY29udGFpbmluZzoiXX0geworCWZvciB7fSB7JG4gPiAwfSB7aW5jciBuIC0xOyBpbmNyIGwgJGZpbmRfZGlybn0geworCSAgICBpZiB7JGwgPCAkYXJvdyB8fCAkbCA+PSAkYXJvd2VuZH0geworCQlpbmNyIGFpICRmaW5kX2Rpcm4KKwkJc2V0IGEgW2xpbmRleCAkdmFyY29yZGVyKCRjdXJ2aWV3KSAkYWldCisJCXNldCBhcm93IFtsaW5kZXggJHZyb3dudW0oJGN1cnZpZXcpICRhaV0KKwkJc2V0IGlkcyBbbGluZGV4ICR2YXJjY29tbWl0cygkY3VydmlldywkYSldCisJCXNldCBhcm93ZW5kIFtleHByIHskYXJvdyArIFtsbGVuZ3RoICRpZHNdfV0KKwkgICAgfQorCSAgICBzZXQgaWQgW2xpbmRleCAkaWRzIFtleHByIHskbCAtICRhcm93fV1dCisJICAgICMgc2hvdWxkbid0IGhhcHBlbiB1bmxlc3MgZ2l0IGxvZyBkb2Vzbid0IGdpdmUgYWxsIHRoZSBjb21taXRzLi4uCisJICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGRhdGEoJGlkKV0gfHwKKwkJIVtkb2VzbWF0Y2ggJGNvbW1pdGRhdGEoJGlkKV19IHsKKwkJY29udGludWUKKwkgICAgfQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJCWdldGNvbW1pdCAkaWQKKwkgICAgfQorCSAgICBzZXQgaW5mbyAkY29tbWl0aW5mbygkaWQpCisJICAgIGZvcmVhY2ggZiAkaW5mbyB0eSAkZmxkdHlwZXMgeworCQlpZiB7JHR5IGVxICIifSBjb250aW51ZQorCQlpZiB7KCRmaW5kbG9jIGVxIFttYyAiQWxsIGZpZWxkcyJdIHx8ICRmaW5kbG9jIGVxICR0eSkgJiYKKwkJICAgIFtkb2VzbWF0Y2ggJGZdfSB7CisJCSAgICBzZXQgZm91bmQgMQorCQkgICAgYnJlYWsKKwkJfQorCSAgICB9CisJICAgIGlmIHskZm91bmR9IGJyZWFrCisJfQorICAgIH0gZWxzZSB7CisJZm9yIHt9IHskbiA+IDB9IHtpbmNyIG4gLTE7IGluY3IgbCAkZmluZF9kaXJufSB7CisJICAgIGlmIHskbCA8ICRhcm93IHx8ICRsID49ICRhcm93ZW5kfSB7CisJCWluY3IgYWkgJGZpbmRfZGlybgorCQlzZXQgYSBbbGluZGV4ICR2YXJjb3JkZXIoJGN1cnZpZXcpICRhaV0KKwkJc2V0IGFyb3cgW2xpbmRleCAkdnJvd251bSgkY3VydmlldykgJGFpXQorCQlzZXQgaWRzIFtsaW5kZXggJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKV0KKwkJc2V0IGFyb3dlbmQgW2V4cHIgeyRhcm93ICsgW2xsZW5ndGggJGlkc119XQorCSAgICB9CisJICAgIHNldCBpZCBbbGluZGV4ICRpZHMgW2V4cHIgeyRsIC0gJGFyb3d9XV0KKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgZmhpZ2hsaWdodHMoJGlkKV19IHsKKwkJIyB0aGlzIHNldHMgZmhpZ2hsaWdodHMoJGlkKSB0byAtMQorCQlhc2tmaWxlaGlnaGxpZ2h0ICRsICRpZAorCSAgICB9CisJICAgIGlmIHskZmhpZ2hsaWdodHMoJGlkKSA+IDB9IHsKKwkJc2V0IGZvdW5kICRkb21vcmUKKwkJYnJlYWsKKwkgICAgfQorCSAgICBpZiB7JGZoaWdobGlnaHRzKCRpZCkgPCAwfSB7CisJCWlmIHskZG9tb3JlfSB7CisJCSAgICBzZXQgZG9tb3JlIDAKKwkJICAgIHNldCBmaW5kY3VybGluZSBbZXhwciB7JGwgLSAkZmluZF9kaXJufV0KKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7JGZvdW5kIHx8ICgkZG9tb3JlICYmICEkbW9yZXRvZG8pfSB7CisJdW5zZXQgZmluZGN1cmxpbmUKKwl1bnNldCBmaW5kX2Rpcm4KKwlub3RidXN5IGZpbmRpbmcKKwlzZXQgZnByb2djb29yZCAwCisJYWRqdXN0cHJvZ3Jlc3MKKwlpZiB7JGZvdW5kfSB7CisJICAgIGZpbmRzZWxlY3RsaW5lICRsCisJfSBlbHNlIHsKKwkgICAgYmVsbAorCX0KKwlyZXR1cm4gMAorICAgIH0KKyAgICBpZiB7ISRkb21vcmV9IHsKKwlmbHVzaGhpZ2hsaWdodHMKKyAgICB9IGVsc2UgeworCXNldCBmaW5kY3VybGluZSBbZXhwciB7JGwgLSAkZmluZF9kaXJufV0KKyAgICB9CisgICAgc2V0IG4gW2V4cHIgeygkZmluZGN1cmxpbmUgLSAkZmluZHN0YXJ0bGluZSkgKiAkZmluZF9kaXJuIC0gMX1dCisgICAgaWYgeyRuIDwgMH0geworCWluY3IgbiAkbnVtY29tbWl0cworICAgIH0KKyAgICBzZXQgZnByb2djb29yZCBbZXhwciB7JG4gKiAxLjAgLyAkbnVtY29tbWl0c31dCisgICAgYWRqdXN0cHJvZ3Jlc3MKKyAgICByZXR1cm4gJGRvbW9yZQorfQorCitwcm9jIGZpbmRzZWxlY3RsaW5lIHtsfSB7CisgICAgZ2xvYmFsIGZpbmRsb2MgY29tbWVudGVuZCBjdGV4dCBmaW5kY3VybGluZSBtYXJraW5nbWF0Y2hlcyBnZHR0eXBlCisKKyAgICBzZXQgbWFya2luZ21hdGNoZXMgW2V4cHIgeyRnZHR0eXBlIGVxIFttYyAiY29udGFpbmluZzoiXX1dCisgICAgc2V0IGZpbmRjdXJsaW5lICRsCisgICAgc2VsZWN0bGluZSAkbCAxCisgICAgaWYgeyRtYXJraW5nbWF0Y2hlcyAmJgorCSgkZmluZGxvYyBlcSBbbWMgIkFsbCBmaWVsZHMiXSB8fCAkZmluZGxvYyBlcSBbbWMgIkNvbW1lbnRzIl0pfSB7CisJIyBoaWdobGlnaHQgdGhlIG1hdGNoZXMgaW4gdGhlIGNvbW1lbnRzCisJc2V0IGYgWyRjdGV4dCBnZXQgMS4wICRjb21tZW50ZW5kXQorCXNldCBtYXRjaGVzIFtmaW5kbWF0Y2hlcyAkZl0KKwlmb3JlYWNoIG1hdGNoICRtYXRjaGVzIHsKKwkgICAgc2V0IHN0YXJ0IFtsaW5kZXggJG1hdGNoIDBdCisJICAgIHNldCBlbmQgW2V4cHIge1tsaW5kZXggJG1hdGNoIDFdICsgMX1dCisJICAgICRjdGV4dCB0YWcgYWRkIGZvdW5kICIxLjAgKyAkc3RhcnQgYyIgIjEuMCArICRlbmQgYyIKKwl9CisgICAgfQorICAgIGRyYXd2aXNpYmxlCit9CisKKyMgbWFyayB0aGUgYml0cyBvZiBhIGhlYWRsaW5lIG9yIGF1dGhvciB0aGF0IG1hdGNoIGEgZmluZCBzdHJpbmcKK3Byb2MgbWFya21hdGNoZXMge2NhbnYgbCBzdHIgdGFnIG1hdGNoZXMgZm9udCByb3d9IHsKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lCisKKyAgICBzZXQgYmJveCBbJGNhbnYgYmJveCAkdGFnXQorICAgIHNldCB4MCBbbGluZGV4ICRiYm94IDBdCisgICAgc2V0IHkwIFtsaW5kZXggJGJib3ggMV0KKyAgICBzZXQgeTEgW2xpbmRleCAkYmJveCAzXQorICAgIGZvcmVhY2ggbWF0Y2ggJG1hdGNoZXMgeworCXNldCBzdGFydCBbbGluZGV4ICRtYXRjaCAwXQorCXNldCBlbmQgW2xpbmRleCAkbWF0Y2ggMV0KKwlpZiB7JHN0YXJ0ID4gJGVuZH0gY29udGludWUKKwlzZXQgeG9mZiBbZm9udCBtZWFzdXJlICRmb250IFtzdHJpbmcgcmFuZ2UgJHN0ciAwIFtleHByIHskc3RhcnQtMX1dXV0KKwlzZXQgeGxlbiBbZm9udCBtZWFzdXJlICRmb250IFtzdHJpbmcgcmFuZ2UgJHN0ciAwIFtleHByIHskZW5kfV1dXQorCXNldCB0IFskY2FudiBjcmVhdGUgcmVjdCBbZXhwciB7JHgwKyR4b2ZmfV0gJHkwIFwKKwkJICAgW2V4cHIgeyR4MCskeGxlbisyfV0gJHkxIFwKKwkJICAgLW91dGxpbmUge30gLXRhZ3MgW2xpc3QgbWF0Y2gkbCBtYXRjaGVzXSAtZmlsbCB5ZWxsb3ddCisJJGNhbnYgbG93ZXIgJHQKKwlpZiB7JHJvdyA9PSAkc2VsZWN0ZWRsaW5lfSB7CisJICAgICRjYW52IHJhaXNlICR0IHNlY3NlbAorCX0KKyAgICB9Cit9CisKK3Byb2MgdW5tYXJrbWF0Y2hlcyB7fSB7CisgICAgZ2xvYmFsIG1hcmtpbmdtYXRjaGVzCisKKyAgICBhbGxjYW52cyBkZWxldGUgbWF0Y2hlcworICAgIHNldCBtYXJraW5nbWF0Y2hlcyAwCisgICAgc3RvcGZpbmRpbmcKK30KKworcHJvYyBzZWxjYW52bGluZSB7dyB4IHl9IHsKKyAgICBnbG9iYWwgY2FudiBjYW52eTAgY3RleHQgbGluZXNwYworICAgIGdsb2JhbCByb3d0ZXh0eAorICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBpZiB7JHltYXggPT0ge319IHJldHVybgorICAgIHNldCB5ZnJhYyBbbGluZGV4IFskY2FudiB5dmlld10gMF0KKyAgICBzZXQgeSBbZXhwciB7JHkgKyAkeWZyYWMgKiAkeW1heH1dCisgICAgc2V0IGwgW2V4cHIge2ludCgoJHkgLSAkY2FudnkwKSAvICRsaW5lc3BjICsgMC41KX1dCisgICAgaWYgeyRsIDwgMH0geworCXNldCBsIDAKKyAgICB9CisgICAgaWYgeyR3IGVxICRjYW52fSB7CisJc2V0IHhtYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAyXQorCXNldCB4bGVmdCBbZXhwciB7W2xpbmRleCBbJGNhbnYgeHZpZXddIDBdICogJHhtYXh9XQorCWlmIHshW2luZm8gZXhpc3RzIHJvd3RleHR4KCRsKV0gfHwgJHhsZWZ0ICsgJHggPCAkcm93dGV4dHgoJGwpfSByZXR1cm4KKyAgICB9CisgICAgdW5tYXJrbWF0Y2hlcworICAgIHNlbGVjdGxpbmUgJGwgMQorfQorCitwcm9jIGNvbW1pdF9kZXNjcmlwdG9yIHtwfSB7CisgICAgZ2xvYmFsIGNvbW1pdGluZm8KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRwKV19IHsKKwlnZXRjb21taXQgJHAKKyAgICB9CisgICAgc2V0IGwgIi4uLiIKKyAgICBpZiB7W2xsZW5ndGggJGNvbW1pdGluZm8oJHApXSA+IDF9IHsKKwlzZXQgbCBbbGluZGV4ICRjb21taXRpbmZvKCRwKSAwXQorICAgIH0KKyAgICByZXR1cm4gIiRwICgkbClcbiIKK30KKworIyBhcHBlbmQgc29tZSB0ZXh0IHRvIHRoZSBjdGV4dCB3aWRnZXQsIGFuZCBtYWtlIGFueSBTSEExIElECisjIHRoYXQgd2Uga25vdyBhYm91dCBiZSBhIGNsaWNrYWJsZSBsaW5rLgorcHJvYyBhcHBlbmR3aXRobGlua3Mge3RleHQgdGFnc30geworICAgIGdsb2JhbCBjdGV4dCBsaW5rbnVtIGN1cnZpZXcKKworICAgIHNldCBzdGFydCBbJGN0ZXh0IGluZGV4ICJlbmQgLSAxYyJdCisgICAgJGN0ZXh0IGluc2VydCBlbmQgJHRleHQgJHRhZ3MKKyAgICBzZXQgbGlua3MgW3JlZ2V4cCAtaW5kaWNlcyAtYWxsIC1pbmxpbmUgeyg/OlxtfC1nKVswLTlhLWZdezYsNDB9XE19ICR0ZXh0XQorICAgIGZvcmVhY2ggbCAkbGlua3MgeworCXNldCBzIFtsaW5kZXggJGwgMF0KKwlzZXQgZSBbbGluZGV4ICRsIDFdCisJc2V0IGxpbmtpZCBbc3RyaW5nIHJhbmdlICR0ZXh0ICRzICRlXQorCWluY3IgZQorCSRjdGV4dCB0YWcgZGVsZXRlIGxpbmskbGlua251bQorCSRjdGV4dCB0YWcgYWRkIGxpbmskbGlua251bSAiJHN0YXJ0ICsgJHMgYyIgIiRzdGFydCArICRlIGMiCisJc2V0bGluayAkbGlua2lkIGxpbmskbGlua251bQorCWluY3IgbGlua251bQorICAgIH0KK30KKworcHJvYyBzZXRsaW5rIHtpZCBsa30geworICAgIGdsb2JhbCBjdXJ2aWV3IGN0ZXh0IHBlbmRpbmdsaW5rcworCisgICAgaWYge1tzdHJpbmcgcmFuZ2UgJGlkIDAgMV0gZXEgIi1nIn0geworICAgICAgc2V0IGlkIFtzdHJpbmcgcmFuZ2UgJGlkIDIgZW5kXQorICAgIH0KKworICAgIHNldCBrbm93biAwCisgICAgaWYge1tzdHJpbmcgbGVuZ3RoICRpZF0gPCA0MH0geworCXNldCBtYXRjaGVzIFtsb25naWQgJGlkXQorCWlmIHtbbGxlbmd0aCAkbWF0Y2hlc10gPiAwfSB7CisJICAgIGlmIHtbbGxlbmd0aCAkbWF0Y2hlc10gPiAxfSByZXR1cm4KKwkgICAgc2V0IGtub3duIDEKKwkgICAgc2V0IGlkIFtsaW5kZXggJG1hdGNoZXMgMF0KKwl9CisgICAgfSBlbHNlIHsKKwlzZXQga25vd24gW2NvbW1pdGludmlldyAkaWQgJGN1cnZpZXddCisgICAgfQorICAgIGlmIHska25vd259IHsKKwkkY3RleHQgdGFnIGNvbmYgJGxrIC1mb3JlZ3JvdW5kIGJsdWUgLXVuZGVybGluZSAxCisJJGN0ZXh0IHRhZyBiaW5kICRsayA8MT4gW2xpc3Qgc2VsYnlpZCAkaWRdCisJJGN0ZXh0IHRhZyBiaW5kICRsayA8RW50ZXI+IHtsaW5rY3Vyc29yICVXIDF9CisJJGN0ZXh0IHRhZyBiaW5kICRsayA8TGVhdmU+IHtsaW5rY3Vyc29yICVXIC0xfQorICAgIH0gZWxzZSB7CisJbGFwcGVuZCBwZW5kaW5nbGlua3MoJGlkKSAkbGsKKwlpbnRlcmVzdGVkaW4gJGlkIHttYWtlbGluayAlUH0KKyAgICB9Cit9CisKK3Byb2MgYXBwZW5kc2hvcnRsaW5rIHtpZCB7cHJlIHt9fSB7cG9zdCB7fX19IHsKKyAgICBnbG9iYWwgY3RleHQgbGlua251bQorCisgICAgJGN0ZXh0IGluc2VydCBlbmQgJHByZQorICAgICRjdGV4dCB0YWcgZGVsZXRlIGxpbmskbGlua251bQorICAgICRjdGV4dCBpbnNlcnQgZW5kIFtzdHJpbmcgcmFuZ2UgJGlkIDAgN10gbGluayRsaW5rbnVtCisgICAgJGN0ZXh0IGluc2VydCBlbmQgJHBvc3QKKyAgICBzZXRsaW5rICRpZCBsaW5rJGxpbmtudW0KKyAgICBpbmNyIGxpbmtudW0KK30KKworcHJvYyBtYWtlbGluayB7aWR9IHsKKyAgICBnbG9iYWwgcGVuZGluZ2xpbmtzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBwZW5kaW5nbGlua3MoJGlkKV19IHJldHVybgorICAgIGZvcmVhY2ggbGsgJHBlbmRpbmdsaW5rcygkaWQpIHsKKwlzZXRsaW5rICRpZCAkbGsKKyAgICB9CisgICAgdW5zZXQgcGVuZGluZ2xpbmtzKCRpZCkKK30KKworcHJvYyBsaW5rY3Vyc29yIHt3IGluY30geworICAgIGdsb2JhbCBsaW5rZW50ZXJjb3VudCBjdXJ0ZXh0Y3Vyc29yCisKKyAgICBpZiB7W2luY3IgbGlua2VudGVyY291bnQgJGluY10gPiAwfSB7CisJJHcgY29uZmlndXJlIC1jdXJzb3IgaGFuZDIKKyAgICB9IGVsc2UgeworCSR3IGNvbmZpZ3VyZSAtY3Vyc29yICRjdXJ0ZXh0Y3Vyc29yCisJaWYgeyRsaW5rZW50ZXJjb3VudCA8IDB9IHsKKwkgICAgc2V0IGxpbmtlbnRlcmNvdW50IDAKKwl9CisgICAgfQorfQorCitwcm9jIHZpZXduZXh0bGluZSB7ZGlyfSB7CisgICAgZ2xvYmFsIGNhbnYgbGluZXNwYworCisgICAgJGNhbnYgZGVsZXRlIGhvdmVyCisgICAgc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQorICAgIHNldCB3bm93IFskY2FudiB5dmlld10KKyAgICBzZXQgd3RvcCBbZXhwciB7W2xpbmRleCAkd25vdyAwXSAqICR5bWF4fV0KKyAgICBzZXQgbmV3dG9wIFtleHByIHskd3RvcCArICRkaXIgKiAkbGluZXNwY31dCisgICAgaWYgeyRuZXd0b3AgPCAwfSB7CisJc2V0IG5ld3RvcCAwCisgICAgfSBlbHNlaWYgeyRuZXd0b3AgPiAkeW1heH0geworCXNldCBuZXd0b3AgJHltYXgKKyAgICB9CisgICAgYWxsY2FudnMgeXZpZXcgbW92ZXRvIFtleHByIHskbmV3dG9wICogMS4wIC8gJHltYXh9XQorfQorCisjIGFkZCBhIGxpc3Qgb2YgdGFnIG9yIGJyYW5jaCBuYW1lcyBhdCBwb3NpdGlvbiBwb3MKKyMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG5hbWVzIGluc2VydGVkCitwcm9jIGFwcGVuZHJlZnMge3BvcyBpZHMgdmFyfSB7CisgICAgZ2xvYmFsIGN0ZXh0IGxpbmtudW0gY3VydmlldyAkdmFyIG1heHJlZnMKKworICAgIGlmIHtbY2F0Y2ggeyRjdGV4dCBpbmRleCAkcG9zfV19IHsKKwlyZXR1cm4gMAorICAgIH0KKyAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgJGN0ZXh0IGRlbGV0ZSAkcG9zICIkcG9zIGxpbmVlbmQiCisgICAgc2V0IHRhZ3Mge30KKyAgICBmb3JlYWNoIGlkICRpZHMgeworCWZvcmVhY2ggdGFnIFtzZXQgJHZhclwoJGlkXCldIHsKKwkgICAgbGFwcGVuZCB0YWdzIFtsaXN0ICR0YWcgJGlkXQorCX0KKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICR0YWdzXSA+ICRtYXhyZWZzfSB7CisJJGN0ZXh0IGluc2VydCAkcG9zICJbbWMgIm1hbnkiXSAoW2xsZW5ndGggJHRhZ3NdKSIKKyAgICB9IGVsc2UgeworCXNldCB0YWdzIFtsc29ydCAtaW5kZXggMCAtZGVjcmVhc2luZyAkdGFnc10KKwlzZXQgc2VwIHt9CisJZm9yZWFjaCB0aSAkdGFncyB7CisJICAgIHNldCBpZCBbbGluZGV4ICR0aSAxXQorCSAgICBzZXQgbGsgbGluayRsaW5rbnVtCisJICAgIGluY3IgbGlua251bQorCSAgICAkY3RleHQgdGFnIGRlbGV0ZSAkbGsKKwkgICAgJGN0ZXh0IGluc2VydCAkcG9zICRzZXAKKwkgICAgJGN0ZXh0IGluc2VydCAkcG9zIFtsaW5kZXggJHRpIDBdICRsaworCSAgICBzZXRsaW5rICRpZCAkbGsKKwkgICAgc2V0IHNlcCAiLCAiCisJfQorICAgIH0KKyAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICByZXR1cm4gW2xsZW5ndGggJHRhZ3NdCit9CisKKyMgY2FsbGVkIHdoZW4gd2UgaGF2ZSBmaW5pc2hlZCBjb21wdXRpbmcgdGhlIG5lYXJieSB0YWdzCitwcm9jIGRpc3BuZWFydGFncyB7ZGVsYXl9IHsKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lIGN1cnJlbnRpZCBzaG93bmVhcnRhZ3MgdGFncGhhc2UKKworICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9IHx8ICEkc2hvd25lYXJ0YWdzfSByZXR1cm4KKyAgICBhZnRlciBjYW5jZWwgZGlzcG5leHR0YWcKKyAgICBpZiB7JGRlbGF5fSB7CisJYWZ0ZXIgMjAwIGRpc3BuZXh0dGFnCisJc2V0IHRhZ3BoYXNlIC0xCisgICAgfSBlbHNlIHsKKwlhZnRlciBpZGxlIGRpc3BuZXh0dGFnCisJc2V0IHRhZ3BoYXNlIDAKKyAgICB9Cit9CisKK3Byb2MgZGlzcG5leHR0YWcge30geworICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUgY3VycmVudGlkIHNob3duZWFydGFncyB0YWdwaGFzZSBjdGV4dAorCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge30gfHwgISRzaG93bmVhcnRhZ3N9IHJldHVybgorICAgIHN3aXRjaCAtLSAkdGFncGhhc2UgeworCTAgeworCSAgICBzZXQgZHRhZ3MgW2Rlc2N0YWdzICRjdXJyZW50aWRdCisJICAgIGlmIHskZHRhZ3MgbmUge319IHsKKwkJYXBwZW5kcmVmcyBwcmVjZWRlcyAkZHRhZ3MgaWR0YWdzCisJICAgIH0KKwl9CisJMSB7CisJICAgIHNldCBhdGFncyBbYW5jdGFncyAkY3VycmVudGlkXQorCSAgICBpZiB7JGF0YWdzIG5lIHt9fSB7CisJCWFwcGVuZHJlZnMgZm9sbG93cyAkYXRhZ3MgaWR0YWdzCisJICAgIH0KKwl9CisJMiB7CisJICAgIHNldCBkaGVhZHMgW2Rlc2NoZWFkcyAkY3VycmVudGlkXQorCSAgICBpZiB7JGRoZWFkcyBuZSB7fX0geworCQlpZiB7W2FwcGVuZHJlZnMgYnJhbmNoICRkaGVhZHMgaWRoZWFkc10gPiAxCisJCSAgICAmJiBbJGN0ZXh0IGdldCAiYnJhbmNoIC0zYyJdIGVxICJoIn0geworCQkgICAgIyB0dXJuICJCcmFuY2giIGludG8gIkJyYW5jaGVzIgorCQkgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAorCQkgICAgJGN0ZXh0IGluc2VydCAiYnJhbmNoIC0yYyIgImVzIgorCQkgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYge1tpbmNyIHRhZ3BoYXNlXSA8PSAyfSB7CisJYWZ0ZXIgaWRsZSBkaXNwbmV4dHRhZworICAgIH0KK30KKworcHJvYyBtYWtlX3NlY3NlbCB7aWR9IHsKKyAgICBnbG9iYWwgbGluZWh0YWcgbGluZW50YWcgbGluZWR0YWcgY2FudiBjYW52MiBjYW52MworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgbGluZWh0YWcoJGlkKV19IHJldHVybgorICAgICRjYW52IGRlbGV0ZSBzZWNzZWwKKyAgICBzZXQgdCBbZXZhbCAkY2FudiBjcmVhdGUgcmVjdCBbJGNhbnYgYmJveCAkbGluZWh0YWcoJGlkKV0gLW91dGxpbmUge3t9fSBcCisJICAgICAgIC10YWdzIHNlY3NlbCAtZmlsbCBbJGNhbnYgY2dldCAtc2VsZWN0YmFja2dyb3VuZF1dCisgICAgJGNhbnYgbG93ZXIgJHQKKyAgICAkY2FudjIgZGVsZXRlIHNlY3NlbAorICAgIHNldCB0IFtldmFsICRjYW52MiBjcmVhdGUgcmVjdCBbJGNhbnYyIGJib3ggJGxpbmVudGFnKCRpZCldIC1vdXRsaW5lIHt7fX0gXAorCSAgICAgICAtdGFncyBzZWNzZWwgLWZpbGwgWyRjYW52MiBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXV0KKyAgICAkY2FudjIgbG93ZXIgJHQKKyAgICAkY2FudjMgZGVsZXRlIHNlY3NlbAorICAgIHNldCB0IFtldmFsICRjYW52MyBjcmVhdGUgcmVjdCBbJGNhbnYzIGJib3ggJGxpbmVkdGFnKCRpZCldIC1vdXRsaW5lIHt7fX0gXAorCSAgICAgICAtdGFncyBzZWNzZWwgLWZpbGwgWyRjYW52MyBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXV0KKyAgICAkY2FudjMgbG93ZXIgJHQKK30KKworcHJvYyBtYWtlX2lkbWFyayB7aWR9IHsKKyAgICBnbG9iYWwgbGluZWh0YWcgY2FudiBmZ2NvbG9yCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBsaW5laHRhZygkaWQpXX0gcmV0dXJuCisgICAgJGNhbnYgZGVsZXRlIG1hcmtpZAorICAgIHNldCB0IFtldmFsICRjYW52IGNyZWF0ZSByZWN0IFskY2FudiBiYm94ICRsaW5laHRhZygkaWQpXSBcCisJICAgICAgIC10YWdzIG1hcmtpZCAtb3V0bGluZSAkZmdjb2xvcl0KKyAgICAkY2FudiByYWlzZSAkdAorfQorCitwcm9jIHNlbGVjdGxpbmUge2wgaXNuZXcge2Rlc2lyZWRfbG9jIHt9fX0geworICAgIGdsb2JhbCBjYW52IGN0ZXh0IGNvbW1pdGluZm8gc2VsZWN0ZWRsaW5lCisgICAgZ2xvYmFsIGNhbnZ5MCBsaW5lc3BjIHBhcmVudHMgY2hpbGRyZW4gY3VydmlldworICAgIGdsb2JhbCBjdXJyZW50aWQgc2hhMWVudHJ5CisgICAgZ2xvYmFsIGNvbW1lbnRlbmQgaWR0YWdzIGxpbmtudW0KKyAgICBnbG9iYWwgbWVyZ2VtYXggbnVtY29tbWl0cyBwZW5kaW5nX3NlbGVjdAorICAgIGdsb2JhbCBjbWl0bW9kZSBzaG93bmVhcnRhZ3MgYWxsY29tbWl0cworICAgIGdsb2JhbCB0YXJnZXRyb3cgdGFyZ2V0aWQgbGFzdHNjcm9sbHJvd3MKKyAgICBnbG9iYWwgYXV0b3NlbGVjdCBhdXRvc2VsbGVuIGp1bXBfdG9faGVyZQorCisgICAgY2F0Y2gge3Vuc2V0IHBlbmRpbmdfc2VsZWN0fQorICAgICRjYW52IGRlbGV0ZSBob3ZlcgorICAgIG5vcm1hbGxpbmUKKyAgICB1bnNlbF9yZWZsaXN0CisgICAgc3RvcGZpbmRpbmcKKyAgICBpZiB7JGwgPCAwIHx8ICRsID49ICRudW1jb21taXRzfSByZXR1cm4KKyAgICBzZXQgaWQgW2NvbW1pdG9ucm93ICRsXQorICAgIHNldCB0YXJnZXRpZCAkaWQKKyAgICBzZXQgdGFyZ2V0cm93ICRsCisgICAgc2V0IHNlbGVjdGVkbGluZSAkbAorICAgIHNldCBjdXJyZW50aWQgJGlkCisgICAgaWYgeyRsYXN0c2Nyb2xscm93cyA8ICRudW1jb21taXRzfSB7CisJc2V0Y2FudnNjcm9sbAorICAgIH0KKworICAgIHNldCB5IFtleHByIHskY2FudnkwICsgJGwgKiAkbGluZXNwY31dCisgICAgc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQorICAgIHNldCB5dG9wIFtleHByIHskeSAtICRsaW5lc3BjIC0gMX1dCisgICAgc2V0IHlib3QgW2V4cHIgeyR5ICsgJGxpbmVzcGMgKyAxfV0KKyAgICBzZXQgd25vdyBbJGNhbnYgeXZpZXddCisgICAgc2V0IHd0b3AgW2V4cHIge1tsaW5kZXggJHdub3cgMF0gKiAkeW1heH1dCisgICAgc2V0IHdib3QgW2V4cHIge1tsaW5kZXggJHdub3cgMV0gKiAkeW1heH1dCisgICAgc2V0IHdoIFtleHByIHskd2JvdCAtICR3dG9wfV0KKyAgICBzZXQgbmV3dG9wICR3dG9wCisgICAgaWYgeyR5dG9wIDwgJHd0b3B9IHsKKwlpZiB7JHlib3QgPCAkd3RvcH0geworCSAgICBzZXQgbmV3dG9wIFtleHByIHskeSAtICR3aCAvIDIuMH1dCisJfSBlbHNlIHsKKwkgICAgc2V0IG5ld3RvcCAkeXRvcAorCSAgICBpZiB7JG5ld3RvcCA+ICR3dG9wIC0gJGxpbmVzcGN9IHsKKwkJc2V0IG5ld3RvcCBbZXhwciB7JHd0b3AgLSAkbGluZXNwY31dCisJICAgIH0KKwl9CisgICAgfSBlbHNlaWYgeyR5Ym90ID4gJHdib3R9IHsKKwlpZiB7JHl0b3AgPiAkd2JvdH0geworCSAgICBzZXQgbmV3dG9wIFtleHByIHskeSAtICR3aCAvIDIuMH1dCisJfSBlbHNlIHsKKwkgICAgc2V0IG5ld3RvcCBbZXhwciB7JHlib3QgLSAkd2h9XQorCSAgICBpZiB7JG5ld3RvcCA8ICR3dG9wICsgJGxpbmVzcGN9IHsKKwkJc2V0IG5ld3RvcCBbZXhwciB7JHd0b3AgKyAkbGluZXNwY31dCisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIHskbmV3dG9wICE9ICR3dG9wfSB7CisJaWYgeyRuZXd0b3AgPCAwfSB7CisJICAgIHNldCBuZXd0b3AgMAorCX0KKwlhbGxjYW52cyB5dmlldyBtb3ZldG8gW2V4cHIgeyRuZXd0b3AgKiAxLjAgLyAkeW1heH1dCisJZHJhd3Zpc2libGUKKyAgICB9CisKKyAgICBtYWtlX3NlY3NlbCAkaWQKKworICAgIGlmIHskaXNuZXd9IHsKKwlhZGR0b2hpc3RvcnkgW2xpc3Qgc2VsYnlpZCAkaWQgMF0gc2F2ZWNtaXRwb3MKKyAgICB9CisKKyAgICAkc2hhMWVudHJ5IGRlbGV0ZSAwIGVuZAorICAgICRzaGExZW50cnkgaW5zZXJ0IDAgJGlkCisgICAgaWYgeyRhdXRvc2VsZWN0fSB7CisJJHNoYTFlbnRyeSBzZWxlY3Rpb24gcmFuZ2UgMCAkYXV0b3NlbGxlbgorICAgIH0KKyAgICByaGlnaGxpZ2h0X3NlbCAkaWQKKworICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBjbGVhcl9jdGV4dAorICAgIHNldCBsaW5rbnVtIDAKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJZ2V0Y29tbWl0ICRpZAorICAgIH0KKyAgICBzZXQgaW5mbyAkY29tbWl0aW5mbygkaWQpCisgICAgc2V0IGRhdGUgW2Zvcm1hdGRhdGUgW2xpbmRleCAkaW5mbyAyXV0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiW21jICJBdXRob3IiXTogW2xpbmRleCAkaW5mbyAxXSAgJGRhdGVcbiIKKyAgICBzZXQgZGF0ZSBbZm9ybWF0ZGF0ZSBbbGluZGV4ICRpbmZvIDRdXQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJbbWMgIkNvbW1pdHRlciJdOiBbbGluZGV4ICRpbmZvIDNdICAkZGF0ZVxuIgorICAgIGlmIHtbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldfSB7CisJJGN0ZXh0IGluc2VydCBlbmQgW21jICJUYWdzOiJdCisJZm9yZWFjaCB0YWcgJGlkdGFncygkaWQpIHsKKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIiAkdGFnIgorCX0KKwkkY3RleHQgaW5zZXJ0IGVuZCAiXG4iCisgICAgfQorCisgICAgc2V0IGhlYWRlcnMge30KKyAgICBzZXQgb2xkcyAkcGFyZW50cygkY3VydmlldywkaWQpCisgICAgaWYge1tsbGVuZ3RoICRvbGRzXSA+IDF9IHsKKwlzZXQgbnAgMAorCWZvcmVhY2ggcCAkb2xkcyB7CisJICAgIGlmIHskbnAgPj0gJG1lcmdlbWF4fSB7CisJCXNldCB0YWcgbW1heAorCSAgICB9IGVsc2UgeworCQlzZXQgdGFnIG0kbnAKKwkgICAgfQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiW21jICJQYXJlbnQiXTogIiAkdGFnCisJICAgIGFwcGVuZHdpdGhsaW5rcyBbY29tbWl0X2Rlc2NyaXB0b3IgJHBdIHt9CisJICAgIGluY3IgbnAKKwl9CisgICAgfSBlbHNlIHsKKwlmb3JlYWNoIHAgJG9sZHMgeworCSAgICBhcHBlbmQgaGVhZGVycyAiW21jICJQYXJlbnQiXTogW2NvbW1pdF9kZXNjcmlwdG9yICRwXSIKKwl9CisgICAgfQorCisgICAgZm9yZWFjaCBjICRjaGlsZHJlbigkY3VydmlldywkaWQpIHsKKwlhcHBlbmQgaGVhZGVycyAiW21jICJDaGlsZCJdOiAgW2NvbW1pdF9kZXNjcmlwdG9yICRjXSIKKyAgICB9CisKKyAgICAjIG1ha2UgYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgU0hBMSBJRCBiZSBhIGNsaWNrYWJsZSBsaW5rCisgICAgYXBwZW5kd2l0aGxpbmtzICRoZWFkZXJzIHt9CisgICAgaWYgeyRzaG93bmVhcnRhZ3N9IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBhbGxjb21taXRzXX0geworCSAgICBnZXRhbGxjb21taXRzCisJfQorCSRjdGV4dCBpbnNlcnQgZW5kICJbbWMgIkJyYW5jaCJdOiAiCisJJGN0ZXh0IG1hcmsgc2V0IGJyYW5jaCAiZW5kIC0xYyIKKwkkY3RleHQgbWFyayBncmF2aXR5IGJyYW5jaCBsZWZ0CisJJGN0ZXh0IGluc2VydCBlbmQgIlxuW21jICJGb2xsb3dzIl06ICIKKwkkY3RleHQgbWFyayBzZXQgZm9sbG93cyAiZW5kIC0xYyIKKwkkY3RleHQgbWFyayBncmF2aXR5IGZvbGxvd3MgbGVmdAorCSRjdGV4dCBpbnNlcnQgZW5kICJcblttYyAiUHJlY2VkZXMiXTogIgorCSRjdGV4dCBtYXJrIHNldCBwcmVjZWRlcyAiZW5kIC0xYyIKKwkkY3RleHQgbWFyayBncmF2aXR5IHByZWNlZGVzIGxlZnQKKwkkY3RleHQgaW5zZXJ0IGVuZCAiXG4iCisJZGlzcG5lYXJ0YWdzIDEKKyAgICB9CisgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuIgorICAgIHNldCBjb21tZW50IFtsaW5kZXggJGluZm8gNV0KKyAgICBpZiB7W3N0cmluZyBmaXJzdCAiXHIiICRjb21tZW50XSA+PSAwfSB7CisJc2V0IGNvbW1lbnQgW3N0cmluZyBtYXAgeyJcciIgIlxuICAgICJ9ICRjb21tZW50XQorICAgIH0KKyAgICBhcHBlbmR3aXRobGlua3MgJGNvbW1lbnQge2NvbW1lbnR9CisKKyAgICAkY3RleHQgdGFnIHJlbW92ZSBmb3VuZCAxLjAgZW5kCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgc2V0IGNvbW1lbnRlbmQgWyRjdGV4dCBpbmRleCAiZW5kIC0gMWMiXQorCisgICAgc2V0IGp1bXBfdG9faGVyZSAkZGVzaXJlZF9sb2MKKyAgICBpbml0X2ZsaXN0IFttYyAiQ29tbWVudHMiXQorICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSB7CisJZ2V0dHJlZSAkaWQKKyAgICB9IGVsc2VpZiB7W2xsZW5ndGggJG9sZHNdIDw9IDF9IHsKKwlzdGFydGRpZmYgJGlkCisgICAgfSBlbHNlIHsKKwltZXJnZWRpZmYgJGlkCisgICAgfQorfQorCitwcm9jIHNlbGZpcnN0bGluZSB7fSB7CisgICAgdW5tYXJrbWF0Y2hlcworICAgIHNlbGVjdGxpbmUgMCAxCit9CisKK3Byb2Mgc2VsbGFzdGxpbmUge30geworICAgIGdsb2JhbCBudW1jb21taXRzCisgICAgdW5tYXJrbWF0Y2hlcworICAgIHNldCBsIFtleHByIHskbnVtY29tbWl0cyAtIDF9XQorICAgIHNlbGVjdGxpbmUgJGwgMQorfQorCitwcm9jIHNlbG5leHRsaW5lIHtkaXJ9IHsKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lCisgICAgZm9jdXMgLgorICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSByZXR1cm4KKyAgICBzZXQgbCBbZXhwciB7JHNlbGVjdGVkbGluZSArICRkaXJ9XQorICAgIHVubWFya21hdGNoZXMKKyAgICBzZWxlY3RsaW5lICRsIDEKK30KKworcHJvYyBzZWxuZXh0cGFnZSB7ZGlyfSB7CisgICAgZ2xvYmFsIGNhbnYgbGluZXNwYyBzZWxlY3RlZGxpbmUgbnVtY29tbWl0cworCisgICAgc2V0IGxwcCBbZXhwciB7KFt3aW5mbyBoZWlnaHQgJGNhbnZdIC0gMikgLyAkbGluZXNwY31dCisgICAgaWYgeyRscHAgPCAxfSB7CisJc2V0IGxwcCAxCisgICAgfQorICAgIGFsbGNhbnZzIHl2aWV3IHNjcm9sbCBbZXhwciB7JGRpciAqICRscHB9XSB1bml0cworICAgIGRyYXd2aXNpYmxlCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHJldHVybgorICAgIHNldCBsIFtleHByIHskc2VsZWN0ZWRsaW5lICsgJGRpciAqICRscHB9XQorICAgIGlmIHskbCA8IDB9IHsKKwlzZXQgbCAwCisgICAgfSBlbHNlaWYgeyRsID49ICRudW1jb21taXRzfSB7CisgICAgICAgIHNldCBsIFtleHByICRudW1jb21taXRzIC0gMV0KKyAgICB9CisgICAgdW5tYXJrbWF0Y2hlcworICAgIHNlbGVjdGxpbmUgJGwgMQorfQorCitwcm9jIHVuc2VsZWN0bGluZSB7fSB7CisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBjdXJyZW50aWQKKworICAgIHNldCBzZWxlY3RlZGxpbmUge30KKyAgICBjYXRjaCB7dW5zZXQgY3VycmVudGlkfQorICAgIGFsbGNhbnZzIGRlbGV0ZSBzZWNzZWwKKyAgICByaGlnaGxpZ2h0X25vbmUKK30KKworcHJvYyByZXNlbGVjdGxpbmUge30geworICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUKKworICAgIGlmIHskc2VsZWN0ZWRsaW5lIG5lIHt9fSB7CisJc2VsZWN0bGluZSAkc2VsZWN0ZWRsaW5lIDAKKyAgICB9Cit9CisKK3Byb2MgYWRkdG9oaXN0b3J5IHtjbWQge3NhdmVwcm9jIHt9fX0geworICAgIGdsb2JhbCBoaXN0b3J5IGhpc3RvcnlpbmRleCBjdXJ2aWV3CisKKyAgICB1bnNldF9wb3N2YXJzCisgICAgc2F2ZV9wb3NpdGlvbgorICAgIHNldCBlbHQgW2xpc3QgJGN1cnZpZXcgJGNtZCAkc2F2ZXByb2Mge31dCisgICAgaWYgeyRoaXN0b3J5aW5kZXggPiAwCisJJiYgW2xpbmRleCAkaGlzdG9yeSBbZXhwciB7JGhpc3RvcnlpbmRleCAtIDF9XV0gPT0gJGVsdH0geworCXJldHVybgorICAgIH0KKworICAgIGlmIHskaGlzdG9yeWluZGV4IDwgW2xsZW5ndGggJGhpc3RvcnldfSB7CisJc2V0IGhpc3RvcnkgW2xyZXBsYWNlICRoaXN0b3J5ICRoaXN0b3J5aW5kZXggZW5kICRlbHRdCisgICAgfSBlbHNlIHsKKwlsYXBwZW5kIGhpc3RvcnkgJGVsdAorICAgIH0KKyAgICBpbmNyIGhpc3RvcnlpbmRleAorICAgIGlmIHskaGlzdG9yeWluZGV4ID4gMX0geworCS50Zi5iYXIubGVmdGJ1dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICB9IGVsc2UgeworCS50Zi5iYXIubGVmdGJ1dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIH0KKyAgICAudGYuYmFyLnJpZ2h0YnV0IGNvbmYgLXN0YXRlIGRpc2FibGVkCit9CisKKyMgc2F2ZSB0aGUgc2Nyb2xsaW5nIHBvc2l0aW9uIG9mIHRoZSBkaWZmIGRpc3BsYXkgcGFuZQorcHJvYyBzYXZlX3Bvc2l0aW9uIHt9IHsKKyAgICBnbG9iYWwgaGlzdG9yeWluZGV4IGhpc3RvcnkKKworICAgIGlmIHskaGlzdG9yeWluZGV4IDwgMX0gcmV0dXJuCisgICAgc2V0IGhpIFtleHByIHskaGlzdG9yeWluZGV4IC0gMX1dCisgICAgc2V0IGZuIFtsaW5kZXggJGhpc3RvcnkgJGhpIDJdCisgICAgaWYgeyRmbiBuZSB7fX0geworCWxzZXQgaGlzdG9yeSAkaGkgMyBbZXZhbCAkZm5dCisgICAgfQorfQorCitwcm9jIHVuc2V0X3Bvc3ZhcnMge30geworICAgIGdsb2JhbCBsYXN0X3Bvc3ZhcnMKKworICAgIGlmIHtbaW5mbyBleGlzdHMgbGFzdF9wb3N2YXJzXX0geworCWZvcmVhY2gge3ZhciB2YWx9ICRsYXN0X3Bvc3ZhcnMgeworCSAgICBnbG9iYWwgJHZhcgorCSAgICBjYXRjaCB7dW5zZXQgJHZhcn0KKwl9CisJdW5zZXQgbGFzdF9wb3N2YXJzCisgICAgfQorfQorCitwcm9jIGdvZG8ge2VsdH0geworICAgIGdsb2JhbCBjdXJ2aWV3IGxhc3RfcG9zdmFycworCisgICAgc2V0IHZpZXcgW2xpbmRleCAkZWx0IDBdCisgICAgc2V0IGNtZCBbbGluZGV4ICRlbHQgMV0KKyAgICBzZXQgcHYgW2xpbmRleCAkZWx0IDNdCisgICAgaWYgeyRjdXJ2aWV3ICE9ICR2aWV3fSB7CisJc2hvd3ZpZXcgJHZpZXcKKyAgICB9CisgICAgdW5zZXRfcG9zdmFycworICAgIGZvcmVhY2gge3ZhciB2YWx9ICRwdiB7CisJZ2xvYmFsICR2YXIKKwlzZXQgJHZhciAkdmFsCisgICAgfQorICAgIHNldCBsYXN0X3Bvc3ZhcnMgJHB2CisgICAgZXZhbCAkY21kCit9CisKK3Byb2MgZ29iYWNrIHt9IHsKKyAgICBnbG9iYWwgaGlzdG9yeSBoaXN0b3J5aW5kZXgKKyAgICBmb2N1cyAuCisKKyAgICBpZiB7JGhpc3RvcnlpbmRleCA+IDF9IHsKKwlzYXZlX3Bvc2l0aW9uCisJaW5jciBoaXN0b3J5aW5kZXggLTEKKwlnb2RvIFtsaW5kZXggJGhpc3RvcnkgW2V4cHIgeyRoaXN0b3J5aW5kZXggLSAxfV1dCisJLnRmLmJhci5yaWdodGJ1dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICB9CisgICAgaWYgeyRoaXN0b3J5aW5kZXggPD0gMX0geworCS50Zi5iYXIubGVmdGJ1dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIH0KK30KKworcHJvYyBnb2Zvcncge30geworICAgIGdsb2JhbCBoaXN0b3J5IGhpc3RvcnlpbmRleAorICAgIGZvY3VzIC4KKworICAgIGlmIHskaGlzdG9yeWluZGV4IDwgW2xsZW5ndGggJGhpc3RvcnldfSB7CisJc2F2ZV9wb3NpdGlvbgorCXNldCBjbWQgW2xpbmRleCAkaGlzdG9yeSAkaGlzdG9yeWluZGV4XQorCWluY3IgaGlzdG9yeWluZGV4CisJZ29kbyAkY21kCisJLnRmLmJhci5sZWZ0YnV0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIH0KKyAgICBpZiB7JGhpc3RvcnlpbmRleCA+PSBbbGxlbmd0aCAkaGlzdG9yeV19IHsKKwkudGYuYmFyLnJpZ2h0YnV0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgfQorfQorCitwcm9jIGdldHRyZWUge2lkfSB7CisgICAgZ2xvYmFsIHRyZWVmaWxlbGlzdCB0cmVlaWRsaXN0IGRpZmZpZHMgZGlmZm1lcmdlaWQgdHJlZXBlbmRpbmcKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIKKworICAgIHNldCBkaWZmaWRzICRpZAorICAgIGNhdGNoIHt1bnNldCBkaWZmbWVyZ2VpZH0KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyB0cmVlZmlsZWxpc3QoJGlkKV19IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyB0cmVlcGVuZGluZ119IHsKKwkgICAgaWYgeyRpZCBlcSAkbnVsbGlkfSB7CisJCXNldCBjbWQgW2xpc3QgfCBnaXQgbHMtZmlsZXNdCisJICAgIH0gZWxzZWlmIHskaWQgZXEgJG51bGxpZDJ9IHsKKwkJc2V0IGNtZCBbbGlzdCB8IGdpdCBscy1maWxlcyAtLXN0YWdlIC10XQorCSAgICB9IGVsc2UgeworCQlzZXQgY21kIFtsaXN0IHwgZ2l0IGxzLXRyZWUgLXIgJGlkXQorCSAgICB9CisJICAgIGlmIHtbY2F0Y2gge3NldCBndGYgW29wZW4gJGNtZCByXX1dfSB7CisJCXJldHVybgorCSAgICB9CisJICAgIHNldCB0cmVlcGVuZGluZyAkaWQKKwkgICAgc2V0IHRyZWVmaWxlbGlzdCgkaWQpIHt9CisJICAgIHNldCB0cmVlaWRsaXN0KCRpZCkge30KKwkgICAgZmNvbmZpZ3VyZSAkZ3RmIC1ibG9ja2luZyAwIC1lbmNvZGluZyBiaW5hcnkKKwkgICAgZmlsZXJ1biAkZ3RmIFtsaXN0IGdldHRyZWVsaW5lICRndGYgJGlkXQorCX0KKyAgICB9IGVsc2UgeworCXNldGZpbGVsaXN0ICRpZAorICAgIH0KK30KKworcHJvYyBnZXR0cmVlbGluZSB7Z3RmIGlkfSB7CisgICAgZ2xvYmFsIHRyZWVmaWxlbGlzdCB0cmVlaWRsaXN0IHRyZWVwZW5kaW5nIGNtaXRtb2RlIGRpZmZpZHMgbnVsbGlkIG51bGxpZDIKKworICAgIHNldCBubCAwCisgICAgd2hpbGUge1tpbmNyIG5sXSA8PSAxMDAwICYmIFtnZXRzICRndGYgbGluZV0gPj0gMH0geworCWlmIHskZGlmZmlkcyBlcSAkbnVsbGlkfSB7CisJICAgIHNldCBmbmFtZSAkbGluZQorCX0gZWxzZSB7CisJICAgIHNldCBpIFtzdHJpbmcgZmlyc3QgIlx0IiAkbGluZV0KKwkgICAgaWYgeyRpIDwgMH0gY29udGludWUKKwkgICAgc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgW2V4cHIgeyRpKzF9XSBlbmRdCisJICAgIHNldCBsaW5lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgMCBbZXhwciB7JGktMX1dXQorCSAgICBpZiB7JGRpZmZpZHMgbmUgJG51bGxpZDIgJiYgW2xpbmRleCAkbGluZSAxXSBuZSAiYmxvYiJ9IGNvbnRpbnVlCisJICAgIHNldCBzaGExIFtsaW5kZXggJGxpbmUgMl0KKwkgICAgbGFwcGVuZCB0cmVlaWRsaXN0KCRpZCkgJHNoYTEKKwl9CisJaWYge1tzdHJpbmcgaW5kZXggJGZuYW1lIDBdIGVxICJcIiJ9IHsKKwkgICAgc2V0IGZuYW1lIFtsaW5kZXggJGZuYW1lIDBdCisJfQorCXNldCBmbmFtZSBbZW5jb2RpbmcgY29udmVydGZyb20gJGZuYW1lXQorCWxhcHBlbmQgdHJlZWZpbGVsaXN0KCRpZCkgJGZuYW1lCisgICAgfQorICAgIGlmIHshW2VvZiAkZ3RmXX0geworCXJldHVybiBbZXhwciB7JG5sID49IDEwMDA/IDI6IDF9XQorICAgIH0KKyAgICBjbG9zZSAkZ3RmCisgICAgdW5zZXQgdHJlZXBlbmRpbmcKKyAgICBpZiB7JGNtaXRtb2RlIG5lICJ0cmVlIn0geworCWlmIHshW2luZm8gZXhpc3RzIGRpZmZtZXJnZWlkXX0geworCSAgICBnZXR0cmVlZGlmZnMgJGRpZmZpZHMKKwl9CisgICAgfSBlbHNlaWYgeyRpZCBuZSAkZGlmZmlkc30geworCWdldHRyZWUgJGRpZmZpZHMKKyAgICB9IGVsc2UgeworCXNldGZpbGVsaXN0ICRpZAorICAgIH0KKyAgICByZXR1cm4gMAorfQorCitwcm9jIHNob3dmaWxlIHtmfSB7CisgICAgZ2xvYmFsIHRyZWVmaWxlbGlzdCB0cmVlaWRsaXN0IGRpZmZpZHMgbnVsbGlkIG51bGxpZDIKKyAgICBnbG9iYWwgY3RleHRfZmlsZV9uYW1lcyBjdGV4dF9maWxlX2xpbmVzCisgICAgZ2xvYmFsIGN0ZXh0IGNvbW1lbnRlbmQKKworICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdHJlZWZpbGVsaXN0KCRkaWZmaWRzKSAkZl0KKyAgICBpZiB7JGkgPCAwfSB7CisJcHV0cyAib29wcywgJGYgbm90IGluIGxpc3QgZm9yIGlkICRkaWZmaWRzIgorCXJldHVybgorICAgIH0KKyAgICBpZiB7JGRpZmZpZHMgZXEgJG51bGxpZH0geworCWlmIHtbY2F0Y2gge3NldCBiZiBbb3BlbiAkZiByXX0gZXJyXX0geworCSAgICBwdXRzICJvb3BzLCBjYW4ndCByZWFkICRmOiAkZXJyIgorCSAgICByZXR1cm4KKwl9CisgICAgfSBlbHNlIHsKKwlzZXQgYmxvYiBbbGluZGV4ICR0cmVlaWRsaXN0KCRkaWZmaWRzKSAkaV0KKwlpZiB7W2NhdGNoIHtzZXQgYmYgW29wZW4gW2NvbmNhdCB8IGdpdCBjYXQtZmlsZSBibG9iICRibG9iXSByXX0gZXJyXX0geworCSAgICBwdXRzICJvb3BzLCBlcnJvciByZWFkaW5nIGJsb2IgJGJsb2I6ICRlcnIiCisJICAgIHJldHVybgorCX0KKyAgICB9CisgICAgZmNvbmZpZ3VyZSAkYmYgLWJsb2NraW5nIDAgLWVuY29kaW5nIFtnZXRfcGF0aF9lbmNvZGluZyAkZl0KKyAgICBmaWxlcnVuICRiZiBbbGlzdCBnZXRibG9ibGluZSAkYmYgJGRpZmZpZHNdCisgICAgJGN0ZXh0IGNvbmZpZyAtc3RhdGUgbm9ybWFsCisgICAgY2xlYXJfY3RleHQgJGNvbW1lbnRlbmQKKyAgICBsYXBwZW5kIGN0ZXh0X2ZpbGVfbmFtZXMgJGYKKyAgICBsYXBwZW5kIGN0ZXh0X2ZpbGVfbGluZXMgW2xpbmRleCBbc3BsaXQgJGNvbW1lbnRlbmQgIi4iXSAwXQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiJGZcbiIgZmlsZXNlcAorICAgICRjdGV4dCBjb25maWcgLXN0YXRlIGRpc2FibGVkCisgICAgJGN0ZXh0IHl2aWV3ICRjb21tZW50ZW5kCisgICAgc2V0dGFicyAwCit9CisKK3Byb2MgZ2V0YmxvYmxpbmUge2JmIGlkfSB7CisgICAgZ2xvYmFsIGRpZmZpZHMgY21pdG1vZGUgY3RleHQKKworICAgIGlmIHskaWQgbmUgJGRpZmZpZHMgfHwgJGNtaXRtb2RlIG5lICJ0cmVlIn0geworCWNhdGNoIHtjbG9zZSAkYmZ9CisJcmV0dXJuIDAKKyAgICB9CisgICAgJGN0ZXh0IGNvbmZpZyAtc3RhdGUgbm9ybWFsCisgICAgc2V0IG5sIDAKKyAgICB3aGlsZSB7W2luY3IgbmxdIDw9IDEwMDAgJiYgW2dldHMgJGJmIGxpbmVdID49IDB9IHsKKwkkY3RleHQgaW5zZXJ0IGVuZCAiJGxpbmVcbiIKKyAgICB9CisgICAgaWYge1tlb2YgJGJmXX0geworCWdsb2JhbCBqdW1wX3RvX2hlcmUgY3RleHRfZmlsZV9uYW1lcyBjb21tZW50ZW5kCisKKwkjIGRlbGV0ZSBsYXN0IG5ld2xpbmUKKwkkY3RleHQgZGVsZXRlICJlbmQgLSAyYyIgImVuZCAtIDFjIgorCWNsb3NlICRiZgorCWlmIHskanVtcF90b19oZXJlIG5lIHt9ICYmCisJICAgIFtsaW5kZXggJGp1bXBfdG9faGVyZSAwXSBlcSBbbGluZGV4ICRjdGV4dF9maWxlX25hbWVzIDBdfSB7CisJICAgIHNldCBsbnVtIFtleHByIHtbbGluZGV4ICRqdW1wX3RvX2hlcmUgMV0gKworCQkJICAgIFtsaW5kZXggW3NwbGl0ICRjb21tZW50ZW5kIC5dIDBdfV0KKwkgICAgbWFya19jdGV4dF9saW5lICRsbnVtCisJfQorCSRjdGV4dCBjb25maWcgLXN0YXRlIGRpc2FibGVkCisJcmV0dXJuIDAKKyAgICB9CisgICAgJGN0ZXh0IGNvbmZpZyAtc3RhdGUgZGlzYWJsZWQKKyAgICByZXR1cm4gW2V4cHIgeyRubCA+PSAxMDAwPyAyOiAxfV0KK30KKworcHJvYyBtYXJrX2N0ZXh0X2xpbmUge2xudW19IHsKKyAgICBnbG9iYWwgY3RleHQgbWFya2JnY29sb3IKKworICAgICRjdGV4dCB0YWcgZGVsZXRlIG9tYXJrCisgICAgJGN0ZXh0IHRhZyBhZGQgb21hcmsgJGxudW0uMCAiJGxudW0uMCArIDEgbGluZSIKKyAgICAkY3RleHQgdGFnIGNvbmYgb21hcmsgLWJhY2tncm91bmQgJG1hcmtiZ2NvbG9yCisgICAgJGN0ZXh0IHNlZSAkbG51bS4wCit9CisKK3Byb2MgbWVyZ2VkaWZmIHtpZH0geworICAgIGdsb2JhbCBkaWZmbWVyZ2VpZAorICAgIGdsb2JhbCBkaWZmaWRzIHRyZWVkaWZmcworICAgIGdsb2JhbCBwYXJlbnRzIGN1cnZpZXcKKworICAgIHNldCBkaWZmbWVyZ2VpZCAkaWQKKyAgICBzZXQgZGlmZmlkcyAkaWQKKyAgICBzZXQgdHJlZWRpZmZzKCRpZCkge30KKyAgICBzZXQgbnAgW2xsZW5ndGggJHBhcmVudHMoJGN1cnZpZXcsJGlkKV0KKyAgICBzZXR0YWJzICRucAorICAgIGdldGJsb2JkaWZmcyAkaWQKK30KKworcHJvYyBzdGFydGRpZmYge2lkc30geworICAgIGdsb2JhbCB0cmVlZGlmZnMgZGlmZmlkcyB0cmVlcGVuZGluZyBkaWZmbWVyZ2VpZCBudWxsaWQgbnVsbGlkMgorCisgICAgc2V0dGFicyAxCisgICAgc2V0IGRpZmZpZHMgJGlkcworICAgIGNhdGNoIHt1bnNldCBkaWZmbWVyZ2VpZH0KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyB0cmVlZGlmZnMoJGlkcyldIHx8CisJW2xzZWFyY2ggLWV4YWN0ICRpZHMgJG51bGxpZF0gPj0gMCB8fAorCVtsc2VhcmNoIC1leGFjdCAkaWRzICRudWxsaWQyXSA+PSAwfSB7CisJaWYgeyFbaW5mbyBleGlzdHMgdHJlZXBlbmRpbmddfSB7CisJICAgIGdldHRyZWVkaWZmcyAkaWRzCisJfQorICAgIH0gZWxzZSB7CisJYWRkdG9jZmxpc3QgJGlkcworICAgIH0KK30KKworIyBJZiB0aGUgZmlsZW5hbWUgKG5hbWUpIGlzIHVuZGVyIGFueSBvZiB0aGUgcGFzc2VkIGZpbHRlciBwYXRocworIyB0aGVuIHJldHVybiB0cnVlIHRvIGluY2x1ZGUgdGhlIGZpbGUgaW4gdGhlIGxpc3RpbmcuCitwcm9jIHBhdGhfZmlsdGVyIHtmaWx0ZXIgbmFtZX0geworICAgIHNldCB3b3JrdHJlZSBbZ2l0d29ya3RyZWVdCisgICAgZm9yZWFjaCBwICRmaWx0ZXIgeworCXNldCBmcV9wIFtmaWxlIG5vcm1hbGl6ZSAkcF0KKwlzZXQgZnFfbiBbZmlsZSBub3JtYWxpemUgW2ZpbGUgam9pbiAkd29ya3RyZWUgJG5hbWVdXQorCWlmIHtbc3RyaW5nIG1hdGNoIFtmaWxlIG5vcm1hbGl6ZSAkZnFfcF0qICRmcV9uXX0geworCSAgICByZXR1cm4gMQorCX0KKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworcHJvYyBhZGR0b2NmbGlzdCB7aWRzfSB7CisgICAgZ2xvYmFsIHRyZWVkaWZmcworCisgICAgYWRkX2ZsaXN0ICR0cmVlZGlmZnMoJGlkcykKKyAgICBnZXRibG9iZGlmZnMgJGlkcworfQorCitwcm9jIGRpZmZjbWQge2lkcyBmbGFnc30geworICAgIGdsb2JhbCBsb2dfc2hvd3Jvb3QgbnVsbGlkIG51bGxpZDIKKworICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkaWRzICRudWxsaWRdCisgICAgc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRpZHMgJG51bGxpZDJdCisgICAgaWYgeyRpID49IDB9IHsKKwlpZiB7W2xsZW5ndGggJGlkc10gPiAxICYmICRqIDwgMH0geworCSAgICAjIGNvbXBhcmluZyB3b3JraW5nIGRpcmVjdG9yeSB3aXRoIHNvbWUgc3BlY2lmaWMgcmV2aXNpb24KKwkgICAgc2V0IGNtZCBbY29uY2F0IHwgZ2l0IGRpZmYtaW5kZXggJGZsYWdzXQorCSAgICBpZiB7JGkgPT0gMH0geworCQlsYXBwZW5kIGNtZCAtUiBbbGluZGV4ICRpZHMgMV0KKwkgICAgfSBlbHNlIHsKKwkJbGFwcGVuZCBjbWQgW2xpbmRleCAkaWRzIDBdCisJICAgIH0KKwl9IGVsc2UgeworCSAgICAjIGNvbXBhcmluZyB3b3JraW5nIGRpcmVjdG9yeSB3aXRoIGluZGV4CisJICAgIHNldCBjbWQgW2NvbmNhdCB8IGdpdCBkaWZmLWZpbGVzICRmbGFnc10KKwkgICAgaWYgeyRqID09IDF9IHsKKwkJbGFwcGVuZCBjbWQgLVIKKwkgICAgfQorCX0KKyAgICB9IGVsc2VpZiB7JGogPj0gMH0geworCXNldCBjbWQgW2NvbmNhdCB8IGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICRmbGFnc10KKwlpZiB7W2xsZW5ndGggJGlkc10gPiAxfSB7CisJICAgICMgY29tcGFyaW5nIGluZGV4IHdpdGggc3BlY2lmaWMgcmV2aXNpb24KKwkgICAgaWYgeyRqID09IDB9IHsKKwkJbGFwcGVuZCBjbWQgLVIgW2xpbmRleCAkaWRzIDFdCisJICAgIH0gZWxzZSB7CisJCWxhcHBlbmQgY21kIFtsaW5kZXggJGlkcyAwXQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgIyBjb21wYXJpbmcgaW5kZXggd2l0aCBIRUFECisJICAgIGxhcHBlbmQgY21kIEhFQUQKKwl9CisgICAgfSBlbHNlIHsKKwlpZiB7JGxvZ19zaG93cm9vdH0geworCSAgICBsYXBwZW5kIGZsYWdzIC0tcm9vdAorCX0KKwlzZXQgY21kIFtjb25jYXQgfCBnaXQgZGlmZi10cmVlIC1yICRmbGFncyAkaWRzXQorICAgIH0KKyAgICByZXR1cm4gJGNtZAorfQorCitwcm9jIGdldHRyZWVkaWZmcyB7aWRzfSB7CisgICAgZ2xvYmFsIHRyZWVkaWZmIHRyZWVwZW5kaW5nCisKKyAgICBpZiB7W2NhdGNoIHtzZXQgZ2R0ZiBbb3BlbiBbZGlmZmNtZCAkaWRzIHstLW5vLWNvbW1pdC1pZH1dIHJdfV19IHJldHVybgorCisgICAgc2V0IHRyZWVwZW5kaW5nICRpZHMKKyAgICBzZXQgdHJlZWRpZmYge30KKyAgICBmY29uZmlndXJlICRnZHRmIC1ibG9ja2luZyAwIC1lbmNvZGluZyBiaW5hcnkKKyAgICBmaWxlcnVuICRnZHRmIFtsaXN0IGdldHRyZWVkaWZmbGluZSAkZ2R0ZiAkaWRzXQorfQorCitwcm9jIGdldHRyZWVkaWZmbGluZSB7Z2R0ZiBpZHN9IHsKKyAgICBnbG9iYWwgdHJlZWRpZmYgdHJlZWRpZmZzIHRyZWVwZW5kaW5nIGRpZmZpZHMgZGlmZm1lcmdlaWQKKyAgICBnbG9iYWwgY21pdG1vZGUgdmZpbGVsaW1pdCBjdXJ2aWV3IGxpbWl0ZGlmZnMgcGVyZmlsZV9hdHRycworCisgICAgc2V0IG5yIDAKKyAgICBzZXQgc3VibGlzdCB7fQorICAgIHNldCBtYXggMTAwMAorICAgIGlmIHskcGVyZmlsZV9hdHRyc30geworCSMgY2FjaGVfZ2l0YXR0ciBpcyBzbG93LCBhbmQgZXZlbiBzbG93ZXIgb24gd2luMzIgd2hlcmUgd2UKKwkjIGhhdmUgdG8gaW52b2tlIGl0IGZvciBvbmx5IGFib3V0IDMwIHBhdGhzIGF0IGEgdGltZQorCXNldCBtYXggNTAwCisJaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dID09ICJ3aW4zMiJ9IHsKKwkgICAgc2V0IG1heCAxMjAKKwl9CisgICAgfQorICAgIHdoaWxlIHtbaW5jciBucl0gPD0gJG1heCAmJiBbZ2V0cyAkZ2R0ZiBsaW5lXSA+PSAwfSB7CisJc2V0IGkgW3N0cmluZyBmaXJzdCAiXHQiICRsaW5lXQorCWlmIHskaSA+PSAwfSB7CisJICAgIHNldCBmaWxlIFtzdHJpbmcgcmFuZ2UgJGxpbmUgW2V4cHIgeyRpKzF9XSBlbmRdCisJICAgIGlmIHtbc3RyaW5nIGluZGV4ICRmaWxlIDBdIGVxICJcIiJ9IHsKKwkJc2V0IGZpbGUgW2xpbmRleCAkZmlsZSAwXQorCSAgICB9CisJICAgIHNldCBmaWxlIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkZmlsZV0KKwkgICAgaWYgeyRmaWxlIG5lIFtsaW5kZXggJHRyZWVkaWZmIGVuZF19IHsKKwkJbGFwcGVuZCB0cmVlZGlmZiAkZmlsZQorCQlsYXBwZW5kIHN1Ymxpc3QgJGZpbGUKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgeyRwZXJmaWxlX2F0dHJzfSB7CisJY2FjaGVfZ2l0YXR0ciBlbmNvZGluZyAkc3VibGlzdAorICAgIH0KKyAgICBpZiB7IVtlb2YgJGdkdGZdfSB7CisJcmV0dXJuIFtleHByIHskbnIgPj0gJG1heD8gMjogMX1dCisgICAgfQorICAgIGNsb3NlICRnZHRmCisgICAgaWYgeyRsaW1pdGRpZmZzICYmICR2ZmlsZWxpbWl0KCRjdXJ2aWV3KSBuZSB7fX0geworCXNldCBmbGlzdCB7fQorCWZvcmVhY2ggZiAkdHJlZWRpZmYgeworCSAgICBpZiB7W3BhdGhfZmlsdGVyICR2ZmlsZWxpbWl0KCRjdXJ2aWV3KSAkZl19IHsKKwkJbGFwcGVuZCBmbGlzdCAkZgorCSAgICB9CisJfQorCXNldCB0cmVlZGlmZnMoJGlkcykgJGZsaXN0CisgICAgfSBlbHNlIHsKKwlzZXQgdHJlZWRpZmZzKCRpZHMpICR0cmVlZGlmZgorICAgIH0KKyAgICB1bnNldCB0cmVlcGVuZGluZworICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUiICYmIFtsbGVuZ3RoICRkaWZmaWRzXSA9PSAxfSB7CisJZ2V0dHJlZSAkZGlmZmlkcworICAgIH0gZWxzZWlmIHskaWRzICE9ICRkaWZmaWRzfSB7CisJaWYgeyFbaW5mbyBleGlzdHMgZGlmZm1lcmdlaWRdfSB7CisJICAgIGdldHRyZWVkaWZmcyAkZGlmZmlkcworCX0KKyAgICB9IGVsc2UgeworCWFkZHRvY2ZsaXN0ICRpZHMKKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworIyBlbXB0eSBzdHJpbmcgb3IgcG9zaXRpdmUgaW50ZWdlcgorcHJvYyBkaWZmY29udGV4dHZhbGlkYXRlIHt2fSB7CisgICAgcmV0dXJuIFtyZWdleHAge14ofFsxLTldWzAtOV0qKSR9ICR2XQorfQorCitwcm9jIGRpZmZjb250ZXh0Y2hhbmdlIHtuMSBuMiBvcH0geworICAgIGdsb2JhbCBkaWZmY29udGV4dHN0cmluZyBkaWZmY29udGV4dAorCisgICAgaWYge1tzdHJpbmcgaXMgaW50ZWdlciAtc3RyaWN0ICRkaWZmY29udGV4dHN0cmluZ119IHsKKwlpZiB7JGRpZmZjb250ZXh0c3RyaW5nID49IDB9IHsKKwkgICAgc2V0IGRpZmZjb250ZXh0ICRkaWZmY29udGV4dHN0cmluZworCSAgICByZXNlbGVjdGxpbmUKKwl9CisgICAgfQorfQorCitwcm9jIGNoYW5nZWlnbm9yZXNwYWNlIHt9IHsKKyAgICByZXNlbGVjdGxpbmUKK30KKworcHJvYyBjaGFuZ2V3b3JkZGlmZiB7bmFtZSBpeCBvcH0geworICAgIHJlc2VsZWN0bGluZQorfQorCitwcm9jIGdldGJsb2JkaWZmcyB7aWRzfSB7CisgICAgZ2xvYmFsIGJsb2JkaWZmZmQgZGlmZmlkcyBlbnYKKyAgICBnbG9iYWwgZGlmZmluaGRyIHRyZWVkaWZmcworICAgIGdsb2JhbCBkaWZmY29udGV4dAorICAgIGdsb2JhbCBpZ25vcmVzcGFjZQorICAgIGdsb2JhbCB3b3JkZGlmZgorICAgIGdsb2JhbCBsaW1pdGRpZmZzIHZmaWxlbGltaXQgY3VydmlldworICAgIGdsb2JhbCBkaWZmZW5jb2RpbmcgdGFyZ2V0bGluZSBkaWZmbnBhcmVudHMKKyAgICBnbG9iYWwgZ2l0X3ZlcnNpb24gY3VycmRpZmZzdWJtb2QKKworICAgIHNldCB0ZXh0Y29udiB7fQorICAgIGlmIHtbcGFja2FnZSB2Y29tcGFyZSAkZ2l0X3ZlcnNpb24gIjEuNi4xIl0gPj0gMH0geworCXNldCB0ZXh0Y29udiAiLS10ZXh0Y29udiIKKyAgICB9CisgICAgc2V0IHN1Ym1vZHVsZSB7fQorICAgIGlmIHtbcGFja2FnZSB2Y29tcGFyZSAkZ2l0X3ZlcnNpb24gIjEuNi42Il0gPj0gMH0geworCXNldCBzdWJtb2R1bGUgIi0tc3VibW9kdWxlIgorICAgIH0KKyAgICBzZXQgY21kIFtkaWZmY21kICRpZHMgIi1wICR0ZXh0Y29udiAkc3VibW9kdWxlICAtQyAtLWNjIC0tbm8tY29tbWl0LWlkIC1VJGRpZmZjb250ZXh0Il0KKyAgICBpZiB7JGlnbm9yZXNwYWNlfSB7CisJYXBwZW5kIGNtZCAiIC13IgorICAgIH0KKyAgICBpZiB7JHdvcmRkaWZmIG5lIFttYyAiTGluZSBkaWZmIl19IHsKKwlhcHBlbmQgY21kICIgLS13b3JkLWRpZmY9cG9yY2VsYWluIgorICAgIH0KKyAgICBpZiB7JGxpbWl0ZGlmZnMgJiYgJHZmaWxlbGltaXQoJGN1cnZpZXcpIG5lIHt9fSB7CisJc2V0IGNtZCBbY29uY2F0ICRjbWQgLS0gJHZmaWxlbGltaXQoJGN1cnZpZXcpXQorICAgIH0KKyAgICBpZiB7W2NhdGNoIHtzZXQgYmRmIFtvcGVuICRjbWQgcl19IGVycl19IHsKKwllcnJvcl9wb3B1cCBbbWMgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIiAkZXJyXQorCXJldHVybgorICAgIH0KKyAgICBzZXQgdGFyZ2V0bGluZSB7fQorICAgIHNldCBkaWZmbnBhcmVudHMgMAorICAgIHNldCBkaWZmaW5oZHIgMAorICAgIHNldCBkaWZmZW5jb2RpbmcgW2dldF9wYXRoX2VuY29kaW5nIHt9XQorICAgIGZjb25maWd1cmUgJGJkZiAtYmxvY2tpbmcgMCAtZW5jb2RpbmcgYmluYXJ5IC1lb2ZjaGFyIHt9CisgICAgc2V0IGJsb2JkaWZmZmQoJGlkcykgJGJkZgorICAgIHNldCBjdXJyZGlmZnN1Ym1vZCAiIgorICAgIGZpbGVydW4gJGJkZiBbbGlzdCBnZXRibG9iZGlmZmxpbmUgJGJkZiAkZGlmZmlkc10KK30KKworcHJvYyBzYXZlY21pdHBvcyB7fSB7CisgICAgZ2xvYmFsIGN0ZXh0IGNtaXRtb2RlCisKKyAgICBpZiB7JGNtaXRtb2RlIGVxICJ0cmVlIn0geworCXJldHVybiB7fQorICAgIH0KKyAgICByZXR1cm4gW2xpc3QgdGFyZ2V0X3Njcm9sbHBvcyBbJGN0ZXh0IGluZGV4IEAwLDBdXQorfQorCitwcm9jIHNhdmVjdGV4dHBvcyB7fSB7CisgICAgZ2xvYmFsIGN0ZXh0CisKKyAgICByZXR1cm4gW2xpc3QgdGFyZ2V0X3Njcm9sbHBvcyBbJGN0ZXh0IGluZGV4IEAwLDBdXQorfQorCitwcm9jIG1heWJlX3Njcm9sbF9jdGV4dCB7YXRlb2Z9IHsKKyAgICBnbG9iYWwgY3RleHQgdGFyZ2V0X3Njcm9sbHBvcworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgdGFyZ2V0X3Njcm9sbHBvc119IHJldHVybgorICAgIGlmIHshJGF0ZW9mfSB7CisJc2V0IG5saW5lcyBbZXhwciB7W3dpbmZvIGhlaWdodCAkY3RleHRdCisJCQkgIC8gW2ZvbnQgbWV0cmljcyB0ZXh0Zm9udCAtbGluZXNwYWNlXX1dCisJaWYge1skY3RleHQgY29tcGFyZSAiJHRhcmdldF9zY3JvbGxwb3MgKyAkbmxpbmVzIGxpbmVzIiA8PSBlbmRdfSByZXR1cm4KKyAgICB9CisgICAgJGN0ZXh0IHl2aWV3ICR0YXJnZXRfc2Nyb2xscG9zCisgICAgdW5zZXQgdGFyZ2V0X3Njcm9sbHBvcworfQorCitwcm9jIHNldGlubGlzdCB7dmFyIGkgdmFsfSB7CisgICAgZ2xvYmFsICR2YXIKKworICAgIHdoaWxlIHtbbGxlbmd0aCBbc2V0ICR2YXJdXSA8ICRpfSB7CisJbGFwcGVuZCAkdmFyIHt9CisgICAgfQorICAgIGlmIHtbbGxlbmd0aCBbc2V0ICR2YXJdXSA9PSAkaX0geworCWxhcHBlbmQgJHZhciAkdmFsCisgICAgfSBlbHNlIHsKKwlsc2V0ICR2YXIgJGkgJHZhbAorICAgIH0KK30KKworcHJvYyBtYWtlZGlmZmhkciB7Zm5hbWUgaWRzfSB7CisgICAgZ2xvYmFsIGN0ZXh0IGN1cmRpZmZzdGFydCB0cmVlZGlmZnMgZGlmZmVuY29kaW5nCisgICAgZ2xvYmFsIGN0ZXh0X2ZpbGVfbmFtZXMganVtcF90b19oZXJlIHRhcmdldGxpbmUgZGlmZmxpbmUKKworICAgIHNldCBmbmFtZSBbZW5jb2RpbmcgY29udmVydGZyb20gJGZuYW1lXQorICAgIHNldCBkaWZmZW5jb2RpbmcgW2dldF9wYXRoX2VuY29kaW5nICRmbmFtZV0KKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHRyZWVkaWZmcygkaWRzKSAkZm5hbWVdCisgICAgaWYgeyRpID49IDB9IHsKKwlzZXRpbmxpc3QgZGlmZmZpbGVzdGFydCAkaSAkY3VyZGlmZnN0YXJ0CisgICAgfQorICAgIGxzZXQgY3RleHRfZmlsZV9uYW1lcyBlbmQgJGZuYW1lCisgICAgc2V0IGwgW2V4cHIgeyg3OCAtIFtzdHJpbmcgbGVuZ3RoICRmbmFtZV0pIC8gMn1dCisgICAgc2V0IHBhZCBbc3RyaW5nIHJhbmdlICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiAxICRsXQorICAgICRjdGV4dCBpbnNlcnQgJGN1cmRpZmZzdGFydCAiJHBhZCAkZm5hbWUgJHBhZCIgZmlsZXNlcAorICAgIHNldCB0YXJnZXRsaW5lIHt9CisgICAgaWYgeyRqdW1wX3RvX2hlcmUgbmUge30gJiYgW2xpbmRleCAkanVtcF90b19oZXJlIDBdIGVxICRmbmFtZX0geworCXNldCB0YXJnZXRsaW5lIFtsaW5kZXggJGp1bXBfdG9faGVyZSAxXQorICAgIH0KKyAgICBzZXQgZGlmZmxpbmUgMAorfQorCitwcm9jIGdldGJsb2JkaWZmbGluZSB7YmRmIGlkc30geworICAgIGdsb2JhbCBkaWZmaWRzIGJsb2JkaWZmZmQgY3RleHQgY3VyZGlmZnN0YXJ0CisgICAgZ2xvYmFsIGRpZmZuZXh0aGVhZCBkaWZmbmV4dG5vdGUgZGlmZmZpbGVzdGFydAorICAgIGdsb2JhbCBjdGV4dF9maWxlX25hbWVzIGN0ZXh0X2ZpbGVfbGluZXMKKyAgICBnbG9iYWwgZGlmZmluaGRyIHRyZWVkaWZmcyBtZXJnZW1heCBkaWZmbnBhcmVudHMKKyAgICBnbG9iYWwgZGlmZmVuY29kaW5nIGp1bXBfdG9faGVyZSB0YXJnZXRsaW5lIGRpZmZsaW5lIGN1cnJkaWZmc3VibW9kCisgICAgZ2xvYmFsIHdvcmRkaWZmCisKKyAgICBzZXQgbnIgMAorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICB3aGlsZSB7W2luY3IgbnJdIDw9IDEwMDAgJiYgW2dldHMgJGJkZiBsaW5lXSA+PSAwfSB7CisJaWYgeyRpZHMgIT0gJGRpZmZpZHMgfHwgJGJkZiAhPSAkYmxvYmRpZmZmZCgkaWRzKX0geworCSAgICBjYXRjaCB7Y2xvc2UgJGJkZn0KKwkgICAgcmV0dXJuIDAKKwl9CisJaWYgeyFbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCA1ICJkaWZmICIgJGxpbmVdfSB7CisJICAgIGlmIHshW3JlZ2V4cCB7XmRpZmYgKC0tY2N8LS1naXQpIH0gJGxpbmUgbSB0eXBlXX0geworCQlzZXQgbGluZSBbZW5jb2RpbmcgY29udmVydGZyb20gJGxpbmVdCisJCSRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBodW5rc2VwCisJCWNvbnRpbnVlCisJICAgIH0KKwkgICAgIyBzdGFydCBvZiBhIG5ldyBmaWxlCisJICAgIHNldCBkaWZmaW5oZHIgMQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG4iCisJICAgIHNldCBjdXJkaWZmc3RhcnQgWyRjdGV4dCBpbmRleCAiZW5kIC0gMWMiXQorCSAgICBsYXBwZW5kIGN0ZXh0X2ZpbGVfbmFtZXMgIiIKKwkgICAgbGFwcGVuZCBjdGV4dF9maWxlX2xpbmVzIFtsaW5kZXggW3NwbGl0ICRjdXJkaWZmc3RhcnQgIi4iXSAwXQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG4iIGZpbGVzZXAKKworCSAgICBpZiB7JHR5cGUgZXEgIi0tY2MifSB7CisJCSMgc3RhcnQgb2YgYSBuZXcgZmlsZSBpbiBhIG1lcmdlIGRpZmYKKwkJc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgMTAgZW5kXQorCQlpZiB7W2xzZWFyY2ggLWV4YWN0ICR0cmVlZGlmZnMoJGlkcykgJGZuYW1lXSA8IDB9IHsKKwkJICAgIGxhcHBlbmQgdHJlZWRpZmZzKCRpZHMpICRmbmFtZQorCQkgICAgYWRkX2ZsaXN0IFtsaXN0ICRmbmFtZV0KKwkJfQorCisJICAgIH0gZWxzZSB7CisJCXNldCBsaW5lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgMTEgZW5kXQorCQkjIElmIHRoZSBuYW1lIGhhc24ndCBjaGFuZ2VkIHRoZSBsZW5ndGggd2lsbCBiZSBvZGQsCisJCSMgdGhlIG1pZGRsZSBjaGFyIHdpbGwgYmUgYSBzcGFjZSwgYW5kIHRoZSB0d28gYml0cyBlaXRoZXIKKwkJIyBzaWRlIHdpbGwgYmUgYS9uYW1lIGFuZCBiL25hbWUsIG9yICJhL25hbWUiIGFuZCAiYi9uYW1lIi4KKwkJIyBJZiB0aGUgbmFtZSBoYXMgY2hhbmdlZCB3ZSdsbCBnZXQgInJlbmFtZSBmcm9tIiBhbmQKKwkJIyAicmVuYW1lIHRvIiBvciAiY29weSBmcm9tIiBhbmQgImNvcHkgdG8iIGxpbmVzIGZvbGxvd2luZworCQkjIHRoaXMsIGFuZCB3ZSdsbCB1c2UgdGhlbSB0byBnZXQgdGhlIGZpbGVuYW1lcy4KKwkJIyBUaGlzIGNvbXBsZXhpdHkgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc3BhY2VzIGluIHRoZQorCQkjIGZpbGVuYW1lKHMpIGRvbid0IGdldCBlc2NhcGVkLgorCQlzZXQgbCBbc3RyaW5nIGxlbmd0aCAkbGluZV0KKwkJc2V0IGkgW2V4cHIgeyRsIC8gMn1dCisJCWlmIHshKCgkbCAmIDEpICYmIFtzdHJpbmcgaW5kZXggJGxpbmUgJGldIGVxICIgIiAmJgorCQkgICAgICBbc3RyaW5nIHJhbmdlICRsaW5lIDIgW2V4cHIgeyRpIC0gMX1dXSBlcSBcCisJCQkgIFtzdHJpbmcgcmFuZ2UgJGxpbmUgW2V4cHIgeyRpICsgM31dIGVuZF0pfSB7CisJCSAgICBjb250aW51ZQorCQl9CisJCSMgdW5lc2NhcGUgaWYgcXVvdGVkIGFuZCBjaG9wIG9mZiB0aGUgYS8gZnJvbSB0aGUgZnJvbnQKKwkJaWYge1tzdHJpbmcgaW5kZXggJGxpbmUgMF0gZXEgIlwiIn0geworCQkgICAgc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgW2xpbmRleCAkbGluZSAwXSAyIGVuZF0KKwkJfSBlbHNlIHsKKwkJICAgIHNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIDIgW2V4cHIgeyRpIC0gMX1dXQorCQl9CisJICAgIH0KKwkgICAgbWFrZWRpZmZoZHIgJGZuYW1lICRpZHMKKworCX0gZWxzZWlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMTYgIiogVW5tZXJnZWQgcGF0aCAiICRsaW5lXX0geworCSAgICBzZXQgZm5hbWUgW2VuY29kaW5nIGNvbnZlcnRmcm9tIFtzdHJpbmcgcmFuZ2UgJGxpbmUgMTYgZW5kXV0KKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuIgorCSAgICBzZXQgY3VyZGlmZnN0YXJ0IFskY3RleHQgaW5kZXggImVuZCAtIDFjIl0KKwkgICAgbGFwcGVuZCBjdGV4dF9maWxlX25hbWVzICRmbmFtZQorCSAgICBsYXBwZW5kIGN0ZXh0X2ZpbGVfbGluZXMgW2xpbmRleCBbc3BsaXQgJGN1cmRpZmZzdGFydCAiLiJdIDBdCisJICAgICRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBmaWxlc2VwCisJICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdHJlZWRpZmZzKCRpZHMpICRmbmFtZV0KKwkgICAgaWYgeyRpID49IDB9IHsKKwkJc2V0aW5saXN0IGRpZmZmaWxlc3RhcnQgJGkgJGN1cmRpZmZzdGFydAorCSAgICB9CisKKwl9IGVsc2VpZiB7IVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDIgIkBAIiAkbGluZV19IHsKKwkgICAgcmVnZXhwIHteQEArfSAkbGluZSBhdHMKKwkgICAgc2V0IGxpbmUgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRkaWZmZW5jb2RpbmcgJGxpbmVdCisJICAgICRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBodW5rc2VwCisJICAgIGlmIHtbcmVnZXhwIHsgXCsoXGQrKSxcZCsgQEB9ICRsaW5lIG0gbmxdfSB7CisJCXNldCBkaWZmbGluZSAkbmwKKwkgICAgfQorCSAgICBzZXQgZGlmZm5wYXJlbnRzIFtleHByIHtbc3RyaW5nIGxlbmd0aCAkYXRzXSAtIDF9XQorCSAgICBzZXQgZGlmZmluaGRyIDAKKworCX0gZWxzZWlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMTAgIlN1Ym1vZHVsZSAiICRsaW5lXX0geworCSAgICAjIHN0YXJ0IG9mIGEgbmV3IHN1Ym1vZHVsZQorCSAgICBpZiB7W3JlZ2V4cCAtaW5kaWNlcyAiXFswLTlhLWZcXStcXC5cXC4iICRsaW5lIG5hbWVlbmRdfSB7CisJCXNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIDEwIFtleHByIFtsaW5kZXggJG5hbWVlbmQgMF0gLSAyXV0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgMTAgW2V4cHIgW3N0cmluZyBmaXJzdCAiY29udGFpbnMgIiAkbGluZV0gLSAyXV0KKwkgICAgfQorCSAgICBpZiB7JGN1cnJkaWZmc3VibW9kICE9ICRmbmFtZX0geworCQkkY3RleHQgaW5zZXJ0IGVuZCAiXG4iOyAgICAgIyBBZGQgbmV3bGluZSBhZnRlciBjb21taXQgbWVzc2FnZQorCSAgICB9CisJICAgIHNldCBjdXJkaWZmc3RhcnQgWyRjdGV4dCBpbmRleCAiZW5kIC0gMWMiXQorCSAgICBsYXBwZW5kIGN0ZXh0X2ZpbGVfbmFtZXMgIiIKKwkgICAgaWYgeyRjdXJyZGlmZnN1Ym1vZCAhPSAkZm5hbWV9IHsKKwkJbGFwcGVuZCBjdGV4dF9maWxlX2xpbmVzICRmbmFtZQorCQltYWtlZGlmZmhkciAkZm5hbWUgJGlkcworCQlzZXQgY3VycmRpZmZzdWJtb2QgJGZuYW1lCisJCSRjdGV4dCBpbnNlcnQgZW5kICJcbiRsaW5lXG4iIGZpbGVzZXAKKwkgICAgfSBlbHNlIHsKKwkJJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iIGZpbGVzZXAKKwkgICAgfQorCX0gZWxzZWlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMyAiICA+IiAkbGluZV19IHsKKwkgICAgc2V0ICRjdXJyZGlmZnN1Ym1vZCAiIgorCSAgICBzZXQgbGluZSBbZW5jb2RpbmcgY29udmVydGZyb20gJGRpZmZlbmNvZGluZyAkbGluZV0KKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iIGRyZXN1bHQKKwl9IGVsc2VpZiB7IVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDMgIiAgPCIgJGxpbmVdfSB7CisJICAgIHNldCAkY3VycmRpZmZzdWJtb2QgIiIKKwkgICAgc2V0IGxpbmUgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRkaWZmZW5jb2RpbmcgJGxpbmVdCisJICAgICRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBkMAorCX0gZWxzZWlmIHskZGlmZmluaGRyfSB7CisJICAgIGlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMTIgInJlbmFtZSBmcm9tICIgJGxpbmVdfSB7CisJCXNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIDYgKyBbc3RyaW5nIGZpcnN0ICIgZnJvbSAiICRsaW5lXSBdIGVuZF0KKwkJaWYge1tzdHJpbmcgaW5kZXggJGZuYW1lIDBdIGVxICJcIiJ9IHsKKwkJICAgIHNldCBmbmFtZSBbbGluZGV4ICRmbmFtZSAwXQorCQl9CisJCXNldCBmbmFtZSBbZW5jb2RpbmcgY29udmVydGZyb20gJGZuYW1lXQorCQlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHRyZWVkaWZmcygkaWRzKSAkZm5hbWVdCisJCWlmIHskaSA+PSAwfSB7CisJCSAgICBzZXRpbmxpc3QgZGlmZmZpbGVzdGFydCAkaSAkY3VyZGlmZnN0YXJ0CisJCX0KKwkgICAgfSBlbHNlaWYgeyFbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCAxMCAkbGluZSAicmVuYW1lIHRvICJdIHx8CisJCSAgICAgICFbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCA4ICRsaW5lICJjb3B5IHRvICJdfSB7CisJCXNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIDQgKyBbc3RyaW5nIGZpcnN0ICIgdG8gIiAkbGluZV0gXSBlbmRdCisJCWlmIHtbc3RyaW5nIGluZGV4ICRmbmFtZSAwXSBlcSAiXCIifSB7CisJCSAgICBzZXQgZm5hbWUgW2xpbmRleCAkZm5hbWUgMF0KKwkJfQorCQltYWtlZGlmZmhkciAkZm5hbWUgJGlkcworCSAgICB9IGVsc2VpZiB7W3N0cmluZyBjb21wYXJlIC1sZW5ndGggMyAkbGluZSAiLS0tIl0gPT0gMH0geworCQkjIGRvIG5vdGhpbmcKKwkJY29udGludWUKKwkgICAgfSBlbHNlaWYge1tzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDMgJGxpbmUgIisrKyJdID09IDB9IHsKKwkJc2V0IGRpZmZpbmhkciAwCisJCWNvbnRpbnVlCisJICAgIH0KKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iIGZpbGVzZXAKKworCX0gZWxzZSB7CisJICAgIHNldCBsaW5lIFtzdHJpbmcgbWFwIHtceDFBIF5afSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkZGlmZmVuY29kaW5nICRsaW5lXV0KKwkgICAgIyBwYXJzZSB0aGUgcHJlZml4IC0gb25lICcgJywgJy0nIG9yICcrJyBmb3IgZWFjaCBwYXJlbnQKKwkgICAgc2V0IHByZWZpeCBbc3RyaW5nIHJhbmdlICRsaW5lIDAgW2V4cHIgeyRkaWZmbnBhcmVudHMgLSAxfV1dCisJICAgIHNldCB0YWcgW2V4cHIgeyRkaWZmbnBhcmVudHMgPiAxPyAibSI6ICJkIn1dCisJICAgIHNldCBkb3dvcmRzIFtleHByIHskd29yZGRpZmYgbmUgW21jICJMaW5lIGRpZmYiXSAmJiAkZGlmZm5wYXJlbnRzID09IDF9XQorCSAgICBzZXQgd29yZHNfcHJlX21hcmt1cCAiIgorCSAgICBzZXQgd29yZHNfcG9zdF9tYXJrdXAgIiIKKwkgICAgaWYge1tzdHJpbmcgdHJpbSAkcHJlZml4ICIgLSsiXSBlcSB7fX0geworCQkjIHByZWZpeCBvbmx5IGhhcyAiICIsICItIiBhbmQgIisiIGluIGl0OiBub3JtYWwgZGlmZiBsaW5lCisJCXNldCBudW0gW3N0cmluZyBmaXJzdCAiLSIgJHByZWZpeF0KKwkJaWYgeyRkb3dvcmRzfSB7CisJCSAgICBzZXQgbGluZSBbc3RyaW5nIHJhbmdlICRsaW5lIDEgZW5kXQorCQl9CisJCWlmIHskbnVtID49IDB9IHsKKwkJICAgICMgcmVtb3ZlZCBsaW5lLCBmaXJzdCBwYXJlbnQgd2l0aCBsaW5lIGlzICRudW0KKwkJICAgIGlmIHskbnVtID49ICRtZXJnZW1heH0geworCQkJc2V0IG51bSAibWF4IgorCQkgICAgfQorCQkgICAgaWYgeyRkb3dvcmRzICYmICR3b3JkZGlmZiBlcSBbbWMgIk1hcmt1cCB3b3JkcyJdfSB7CisJCQkkY3RleHQgaW5zZXJ0IGVuZCAiXFstJGxpbmUtXF0iICR0YWckbnVtCisJCSAgICB9IGVsc2UgeworCQkJJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lIiAkdGFnJG51bQorCQkgICAgfQorCQkgICAgaWYgeyEkZG93b3Jkc30geworCQkJJGN0ZXh0IGluc2VydCBlbmQgIlxuIiAkdGFnJG51bQorCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgc2V0IHRhZ3Mge30KKwkJICAgIGlmIHtbc3RyaW5nIGZpcnN0ICIrIiAkcHJlZml4XSA+PSAwfSB7CisJCQkjIGFkZGVkIGxpbmUKKwkJCWxhcHBlbmQgdGFncyAke3RhZ31yZXN1bHQKKwkJCWlmIHskZGlmZm5wYXJlbnRzID4gMX0geworCQkJICAgIHNldCBudW0gW3N0cmluZyBmaXJzdCAiICIgJHByZWZpeF0KKwkJCSAgICBpZiB7JG51bSA+PSAwfSB7CisJCQkJaWYgeyRudW0gPj0gJG1lcmdlbWF4fSB7CisJCQkJICAgIHNldCBudW0gIm1heCIKKwkJCQl9CisJCQkJbGFwcGVuZCB0YWdzIG0kbnVtCisJCQkgICAgfQorCQkJfQorCQkJc2V0IHdvcmRzX3ByZV9tYXJrdXAgInsrIgorCQkJc2V0IHdvcmRzX3Bvc3RfbWFya3VwICIrfSIKKwkJICAgIH0KKwkJICAgIGlmIHskdGFyZ2V0bGluZSBuZSB7fX0geworCQkJaWYgeyRkaWZmbGluZSA9PSAkdGFyZ2V0bGluZX0geworCQkJICAgIHNldCBzZWVoZXJlIFskY3RleHQgaW5kZXggImVuZCAtIDEgY2hhcnMiXQorCQkJICAgIHNldCB0YXJnZXRsaW5lIHt9CisJCQl9IGVsc2UgeworCQkJICAgIGluY3IgZGlmZmxpbmUKKwkJCX0KKwkJICAgIH0KKwkJICAgIGlmIHskZG93b3JkcyAmJiAkd29yZGRpZmYgZXEgW21jICJNYXJrdXAgd29yZHMiXX0geworCQkJJGN0ZXh0IGluc2VydCBlbmQgIiR3b3Jkc19wcmVfbWFya3VwJGxpbmUkd29yZHNfcG9zdF9tYXJrdXAiICR0YWdzCisJCSAgICB9IGVsc2UgeworCQkJJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lIiAkdGFncworCQkgICAgfQorCQkgICAgaWYgeyEkZG93b3Jkc30geworCQkJJGN0ZXh0IGluc2VydCBlbmQgIlxuIiAkdGFncworCQkgICAgfQorCQl9CisJICAgIH0gZWxzZWlmIHskZG93b3JkcyAmJiAkcHJlZml4IGVxICJ+In0geworCQkkY3RleHQgaW5zZXJ0IGVuZCAiXG4iIHt9CisJICAgIH0gZWxzZSB7CisJCSMgIlwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZSIsCisJCSMgb3Igc29tZXRoaW5nIGVsc2Ugd2UgZG9uJ3QgcmVjb2duaXplCisJCSRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBodW5rc2VwCisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgc2VlaGVyZV19IHsKKwltYXJrX2N0ZXh0X2xpbmUgW2xpbmRleCBbc3BsaXQgJHNlZWhlcmUgLl0gMF0KKyAgICB9CisgICAgbWF5YmVfc2Nyb2xsX2N0ZXh0IFtlb2YgJGJkZl0KKyAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICBpZiB7W2VvZiAkYmRmXX0geworCWNhdGNoIHtjbG9zZSAkYmRmfQorCXJldHVybiAwCisgICAgfQorICAgIHJldHVybiBbZXhwciB7JG5yID49IDEwMDA/IDI6IDF9XQorfQorCitwcm9jIGNoYW5nZWRpZmZkaXNwIHt9IHsKKyAgICBnbG9iYWwgY3RleHQgZGlmZmVsaWRlCisKKyAgICAkY3RleHQgdGFnIGNvbmYgZDAgLWVsaWRlIFtsaW5kZXggJGRpZmZlbGlkZSAwXQorICAgICRjdGV4dCB0YWcgY29uZiBkcmVzdWx0IC1lbGlkZSBbbGluZGV4ICRkaWZmZWxpZGUgMV0KK30KKworcHJvYyBoaWdobGlnaHRmaWxlIHtsb2MgY2xpbmV9IHsKKyAgICBnbG9iYWwgY3RleHQgY2ZsaXN0IGNmbGlzdF90b3AKKworICAgICRjdGV4dCB5dmlldyAkbG9jCisgICAgJGNmbGlzdCB0YWcgcmVtb3ZlIGhpZ2hsaWdodCAkY2ZsaXN0X3RvcC4wICIkY2ZsaXN0X3RvcC4wIGxpbmVlbmQiCisgICAgJGNmbGlzdCB0YWcgYWRkIGhpZ2hsaWdodCAkY2xpbmUuMCAiJGNsaW5lLjAgbGluZWVuZCIKKyAgICAkY2ZsaXN0IHNlZSAkY2xpbmUuMAorICAgIHNldCBjZmxpc3RfdG9wICRjbGluZQorfQorCitwcm9jIHByZXZmaWxlIHt9IHsKKyAgICBnbG9iYWwgZGlmZmZpbGVzdGFydCBjdGV4dCBjbWl0bW9kZQorCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHJldHVybgorICAgIHNldCBwcmV2IDAuMAorICAgIHNldCBwcmV2bGluZSAxCisgICAgc2V0IGhlcmUgWyRjdGV4dCBpbmRleCBAMCwwXQorICAgIGZvcmVhY2ggbG9jICRkaWZmZmlsZXN0YXJ0IHsKKwlpZiB7WyRjdGV4dCBjb21wYXJlICRsb2MgPj0gJGhlcmVdfSB7CisJICAgIGhpZ2hsaWdodGZpbGUgJHByZXYgJHByZXZsaW5lCisJICAgIHJldHVybgorCX0KKwlzZXQgcHJldiAkbG9jCisJaW5jciBwcmV2bGluZQorICAgIH0KKyAgICBoaWdobGlnaHRmaWxlICRwcmV2ICRwcmV2bGluZQorfQorCitwcm9jIG5leHRmaWxlIHt9IHsKKyAgICBnbG9iYWwgZGlmZmZpbGVzdGFydCBjdGV4dCBjbWl0bW9kZQorCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHJldHVybgorICAgIHNldCBoZXJlIFskY3RleHQgaW5kZXggQDAsMF0KKyAgICBzZXQgbGluZSAxCisgICAgZm9yZWFjaCBsb2MgJGRpZmZmaWxlc3RhcnQgeworCWluY3IgbGluZQorCWlmIHtbJGN0ZXh0IGNvbXBhcmUgJGxvYyA+ICRoZXJlXX0geworCSAgICBoaWdobGlnaHRmaWxlICRsb2MgJGxpbmUKKwkgICAgcmV0dXJuCisJfQorICAgIH0KK30KKworcHJvYyBjbGVhcl9jdGV4dCB7e2ZpcnN0IDEuMH19IHsKKyAgICBnbG9iYWwgY3RleHQgc21hcmt0b3Agc21hcmtib3QKKyAgICBnbG9iYWwgY3RleHRfZmlsZV9uYW1lcyBjdGV4dF9maWxlX2xpbmVzCisgICAgZ2xvYmFsIHBlbmRpbmdsaW5rcworCisgICAgc2V0IGwgW2xpbmRleCBbc3BsaXQgJGZpcnN0IC5dIDBdCisgICAgaWYgeyFbaW5mbyBleGlzdHMgc21hcmt0b3BdIHx8IFskY3RleHQgY29tcGFyZSAkZmlyc3QgPCAkc21hcmt0b3AuMF19IHsKKwlzZXQgc21hcmt0b3AgJGwKKyAgICB9CisgICAgaWYgeyFbaW5mbyBleGlzdHMgc21hcmtib3RdIHx8IFskY3RleHQgY29tcGFyZSAkZmlyc3QgPCAkc21hcmtib3QuMF19IHsKKwlzZXQgc21hcmtib3QgJGwKKyAgICB9CisgICAgJGN0ZXh0IGRlbGV0ZSAkZmlyc3QgZW5kCisgICAgaWYgeyRmaXJzdCBlcSAiMS4wIn0geworCWNhdGNoIHt1bnNldCBwZW5kaW5nbGlua3N9CisgICAgfQorICAgIHNldCBjdGV4dF9maWxlX25hbWVzIHt9CisgICAgc2V0IGN0ZXh0X2ZpbGVfbGluZXMge30KK30KKworcHJvYyBzZXR0YWJzIHt7Zmlyc3RhYiB7fX19IHsKKyAgICBnbG9iYWwgZmlyc3R0YWJzdG9wIHRhYnN0b3AgY3RleHQgaGF2ZV90azg1CisKKyAgICBpZiB7JGZpcnN0YWIgbmUge30gJiYgJGhhdmVfdGs4NX0geworCXNldCBmaXJzdHRhYnN0b3AgJGZpcnN0YWIKKyAgICB9CisgICAgc2V0IHcgW2ZvbnQgbWVhc3VyZSB0ZXh0Zm9udCAiMCJdCisgICAgaWYgeyRmaXJzdHRhYnN0b3AgIT0gMH0geworCSRjdGV4dCBjb25mIC10YWJzIFtsaXN0IFtleHByIHsoJGZpcnN0dGFic3RvcCArICR0YWJzdG9wKSAqICR3fV0gXAorCQkJICAgICAgIFtleHByIHsoJGZpcnN0dGFic3RvcCArIDIgKiAkdGFic3RvcCkgKiAkd31dXQorICAgIH0gZWxzZWlmIHskaGF2ZV90azg1IHx8ICR0YWJzdG9wICE9IDh9IHsKKwkkY3RleHQgY29uZiAtdGFicyBbZXhwciB7JHRhYnN0b3AgKiAkd31dCisgICAgfSBlbHNlIHsKKwkkY3RleHQgY29uZiAtdGFicyB7fQorICAgIH0KK30KKworcHJvYyBpbmNyc2VhcmNoIHtuYW1lIGl4IG9wfSB7CisgICAgZ2xvYmFsIGN0ZXh0IHNlYXJjaHN0cmluZyBzZWFyY2hkaXJuCisKKyAgICAkY3RleHQgdGFnIHJlbW92ZSBmb3VuZCAxLjAgZW5kCisgICAgaWYge1tjYXRjaCB7JGN0ZXh0IGluZGV4IGFuY2hvcn1dfSB7CisJIyBubyBhbmNob3Igc2V0LCB1c2Ugc3RhcnQgb2Ygc2VsZWN0aW9uLCBvciBvZiB2aXNpYmxlIGFyZWEKKwlzZXQgc2VsIFskY3RleHQgdGFnIHJhbmdlcyBzZWxdCisJaWYgeyRzZWwgbmUge319IHsKKwkgICAgJGN0ZXh0IG1hcmsgc2V0IGFuY2hvciBbbGluZGV4ICRzZWwgMF0KKwl9IGVsc2VpZiB7JHNlYXJjaGRpcm4gZXEgIi1mb3J3YXJkcyJ9IHsKKwkgICAgJGN0ZXh0IG1hcmsgc2V0IGFuY2hvciBAMCwwCisJfSBlbHNlIHsKKwkgICAgJGN0ZXh0IG1hcmsgc2V0IGFuY2hvciBAMCxbd2luZm8gaGVpZ2h0ICRjdGV4dF0KKwl9CisgICAgfQorICAgIGlmIHskc2VhcmNoc3RyaW5nIG5lIHt9fSB7CisJc2V0IGhlcmUgWyRjdGV4dCBzZWFyY2ggJHNlYXJjaGRpcm4gLS0gJHNlYXJjaHN0cmluZyBhbmNob3JdCisJaWYgeyRoZXJlIG5lIHt9fSB7CisJICAgICRjdGV4dCBzZWUgJGhlcmUKKwl9CisJc2VhcmNobWFya3Zpc2libGUgMQorICAgIH0KK30KKworcHJvYyBkb3NlYXJjaCB7fSB7CisgICAgZ2xvYmFsIHNzdHJpbmcgY3RleHQgc2VhcmNoc3RyaW5nIHNlYXJjaGRpcm4KKworICAgIGZvY3VzICRzc3RyaW5nCisgICAgJHNzdHJpbmcgaWN1cnNvciBlbmQKKyAgICBzZXQgc2VhcmNoZGlybiAtZm9yd2FyZHMKKyAgICBpZiB7JHNlYXJjaHN0cmluZyBuZSB7fX0geworCXNldCBzZWwgWyRjdGV4dCB0YWcgcmFuZ2VzIHNlbF0KKwlpZiB7JHNlbCBuZSB7fX0geworCSAgICBzZXQgc3RhcnQgIltsaW5kZXggJHNlbCAwXSArIDFjIgorCX0gZWxzZWlmIHtbY2F0Y2gge3NldCBzdGFydCBbJGN0ZXh0IGluZGV4IGFuY2hvcl19XX0geworCSAgICBzZXQgc3RhcnQgIkAwLDAiCisJfQorCXNldCBtYXRjaCBbJGN0ZXh0IHNlYXJjaCAtY291bnQgbWxlbiAtLSAkc2VhcmNoc3RyaW5nICRzdGFydF0KKwkkY3RleHQgdGFnIHJlbW92ZSBzZWwgMS4wIGVuZAorCWlmIHskbWF0Y2ggZXEge319IHsKKwkgICAgYmVsbAorCSAgICByZXR1cm4KKwl9CisJJGN0ZXh0IHNlZSAkbWF0Y2gKKwlzZXQgbWVuZCAiJG1hdGNoICsgJG1sZW4gYyIKKwkkY3RleHQgdGFnIGFkZCBzZWwgJG1hdGNoICRtZW5kCisJJGN0ZXh0IG1hcmsgdW5zZXQgYW5jaG9yCisgICAgfQorfQorCitwcm9jIGRvc2VhcmNoYmFjayB7fSB7CisgICAgZ2xvYmFsIHNzdHJpbmcgY3RleHQgc2VhcmNoc3RyaW5nIHNlYXJjaGRpcm4KKworICAgIGZvY3VzICRzc3RyaW5nCisgICAgJHNzdHJpbmcgaWN1cnNvciBlbmQKKyAgICBzZXQgc2VhcmNoZGlybiAtYmFja3dhcmRzCisgICAgaWYgeyRzZWFyY2hzdHJpbmcgbmUge319IHsKKwlzZXQgc2VsIFskY3RleHQgdGFnIHJhbmdlcyBzZWxdCisJaWYgeyRzZWwgbmUge319IHsKKwkgICAgc2V0IHN0YXJ0IFtsaW5kZXggJHNlbCAwXQorCX0gZWxzZWlmIHtbY2F0Y2gge3NldCBzdGFydCBbJGN0ZXh0IGluZGV4IGFuY2hvcl19XX0geworCSAgICBzZXQgc3RhcnQgQDAsW3dpbmZvIGhlaWdodCAkY3RleHRdCisJfQorCXNldCBtYXRjaCBbJGN0ZXh0IHNlYXJjaCAtYmFja3dhcmRzIC1jb3VudCBtbCAtLSAkc2VhcmNoc3RyaW5nICRzdGFydF0KKwkkY3RleHQgdGFnIHJlbW92ZSBzZWwgMS4wIGVuZAorCWlmIHskbWF0Y2ggZXEge319IHsKKwkgICAgYmVsbAorCSAgICByZXR1cm4KKwl9CisJJGN0ZXh0IHNlZSAkbWF0Y2gKKwlzZXQgbWVuZCAiJG1hdGNoICsgJG1sIGMiCisJJGN0ZXh0IHRhZyBhZGQgc2VsICRtYXRjaCAkbWVuZAorCSRjdGV4dCBtYXJrIHVuc2V0IGFuY2hvcgorICAgIH0KK30KKworcHJvYyBzZWFyY2htYXJrIHtmaXJzdCBsYXN0fSB7CisgICAgZ2xvYmFsIGN0ZXh0IHNlYXJjaHN0cmluZworCisgICAgc2V0IG1lbmQgJGZpcnN0LjAKKyAgICB3aGlsZSB7MX0geworCXNldCBtYXRjaCBbJGN0ZXh0IHNlYXJjaCAtY291bnQgbWxlbiAtLSAkc2VhcmNoc3RyaW5nICRtZW5kICRsYXN0LmVuZF0KKwlpZiB7JG1hdGNoIGVxIHt9fSBicmVhaworCXNldCBtZW5kICIkbWF0Y2ggKyAkbWxlbiBjIgorCSRjdGV4dCB0YWcgYWRkIGZvdW5kICRtYXRjaCAkbWVuZAorICAgIH0KK30KKworcHJvYyBzZWFyY2htYXJrdmlzaWJsZSB7ZG9hbGx9IHsKKyAgICBnbG9iYWwgY3RleHQgc21hcmt0b3Agc21hcmtib3QKKworICAgIHNldCB0b3BsaW5lIFtsaW5kZXggW3NwbGl0IFskY3RleHQgaW5kZXggQDAsMF0gLl0gMF0KKyAgICBzZXQgYm90bGluZSBbbGluZGV4IFtzcGxpdCBbJGN0ZXh0IGluZGV4IEAwLFt3aW5mbyBoZWlnaHQgJGN0ZXh0XV0gLl0gMF0KKyAgICBpZiB7JGRvYWxsIHx8ICRib3RsaW5lIDwgJHNtYXJrdG9wIHx8ICR0b3BsaW5lID4gJHNtYXJrYm90fSB7CisJIyBubyBvdmVybGFwIHdpdGggcHJldmlvdXMKKwlzZWFyY2htYXJrICR0b3BsaW5lICRib3RsaW5lCisJc2V0IHNtYXJrdG9wICR0b3BsaW5lCisJc2V0IHNtYXJrYm90ICRib3RsaW5lCisgICAgfSBlbHNlIHsKKwlpZiB7JHRvcGxpbmUgPCAkc21hcmt0b3B9IHsKKwkgICAgc2VhcmNobWFyayAkdG9wbGluZSBbZXhwciB7JHNtYXJrdG9wLTF9XQorCSAgICBzZXQgc21hcmt0b3AgJHRvcGxpbmUKKwl9CisJaWYgeyRib3RsaW5lID4gJHNtYXJrYm90fSB7CisJICAgIHNlYXJjaG1hcmsgW2V4cHIgeyRzbWFya2JvdCsxfV0gJGJvdGxpbmUKKwkgICAgc2V0IHNtYXJrYm90ICRib3RsaW5lCisJfQorICAgIH0KK30KKworcHJvYyBzY3JvbGx0ZXh0IHtmMCBmMX0geworICAgIGdsb2JhbCBzZWFyY2hzdHJpbmcKKworICAgIC5ibGVmdC5ib3R0b20uc2Igc2V0ICRmMCAkZjEKKyAgICBpZiB7JHNlYXJjaHN0cmluZyBuZSB7fX0geworCXNlYXJjaG1hcmt2aXNpYmxlIDAKKyAgICB9Cit9CisKK3Byb2Mgc2V0Y29vcmRzIHt9IHsKKyAgICBnbG9iYWwgbGluZXNwYyBjaGFyc3BjIGNhbnZ4MCBjYW52eTAKKyAgICBnbG9iYWwgeHNwYzEgeHNwYzIgbHRoaWNrbmVzcworCisgICAgc2V0IGxpbmVzcGMgW2ZvbnQgbWV0cmljcyBtYWluZm9udCAtbGluZXNwYWNlXQorICAgIHNldCBjaGFyc3BjIFtmb250IG1lYXN1cmUgbWFpbmZvbnQgIm0iXQorICAgIHNldCBjYW52eTAgW2V4cHIge2ludCgzICsgMC41ICogJGxpbmVzcGMpfV0KKyAgICBzZXQgY2FudngwIFtleHByIHtpbnQoMyArIDAuNSAqICRsaW5lc3BjKX1dCisgICAgc2V0IGx0aGlja25lc3MgW2V4cHIge2ludCgkbGluZXNwYyAvIDkpICsgMX1dCisgICAgc2V0IHhzcGMxKDApICRsaW5lc3BjCisgICAgc2V0IHhzcGMyICRsaW5lc3BjCit9CisKK3Byb2MgcmVkaXNwbGF5IHt9IHsKKyAgICBnbG9iYWwgY2FudgorICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUKKworICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBpZiB7JHltYXggZXEge30gfHwgJHltYXggPT0gMH0gcmV0dXJuCisgICAgc2V0IHNwYW4gWyRjYW52IHl2aWV3XQorICAgIGNsZWFyX2Rpc3BsYXkKKyAgICBzZXRjYW52c2Nyb2xsCisgICAgYWxsY2FudnMgeXZpZXcgbW92ZXRvIFtsaW5kZXggJHNwYW4gMF0KKyAgICBkcmF3dmlzaWJsZQorICAgIGlmIHskc2VsZWN0ZWRsaW5lIG5lIHt9fSB7CisJc2VsZWN0bGluZSAkc2VsZWN0ZWRsaW5lIDAKKwlhbGxjYW52cyB5dmlldyBtb3ZldG8gW2xpbmRleCAkc3BhbiAwXQorICAgIH0KK30KKworcHJvYyBwYXJzZWZvbnQge2Ygbn0geworICAgIGdsb2JhbCBmb250YXR0cgorCisgICAgc2V0IGZvbnRhdHRyKCRmLGZhbWlseSkgW2xpbmRleCAkbiAwXQorICAgIHNldCBzIFtsaW5kZXggJG4gMV0KKyAgICBpZiB7JHMgZXEge30gfHwgJHMgPT0gMH0geworCXNldCBzIDEwCisgICAgfSBlbHNlaWYgeyRzIDwgMH0geworCXNldCBzIFtleHByIHtpbnQoLSRzIC8gW3dpbmZvIGZwaXhlbHMgLiAxcF0gKyAwLjUpfV0KKyAgICB9CisgICAgc2V0IGZvbnRhdHRyKCRmLHNpemUpICRzCisgICAgc2V0IGZvbnRhdHRyKCRmLHdlaWdodCkgbm9ybWFsCisgICAgc2V0IGZvbnRhdHRyKCRmLHNsYW50KSByb21hbgorICAgIGZvcmVhY2ggc3R5bGUgW2xyYW5nZSAkbiAyIGVuZF0geworCXN3aXRjaCAtLSAkc3R5bGUgeworCSAgICAibm9ybWFsIiAtCisJICAgICJib2xkIiAgIHtzZXQgZm9udGF0dHIoJGYsd2VpZ2h0KSAkc3R5bGV9CisJICAgICJyb21hbiIgLQorCSAgICAiaXRhbGljIiB7c2V0IGZvbnRhdHRyKCRmLHNsYW50KSAkc3R5bGV9CisJfQorICAgIH0KK30KKworcHJvYyBmb250ZmxhZ3Mge2Yge2lzYm9sZCAwfX0geworICAgIGdsb2JhbCBmb250YXR0cgorCisgICAgcmV0dXJuIFtsaXN0IC1mYW1pbHkgJGZvbnRhdHRyKCRmLGZhbWlseSkgLXNpemUgJGZvbnRhdHRyKCRmLHNpemUpIFwKKwkJLXdlaWdodCBbZXhwciB7JGlzYm9sZD8gImJvbGQiOiAkZm9udGF0dHIoJGYsd2VpZ2h0KX1dIFwKKwkJLXNsYW50ICRmb250YXR0cigkZixzbGFudCldCit9CisKK3Byb2MgZm9udG5hbWUge2Z9IHsKKyAgICBnbG9iYWwgZm9udGF0dHIKKworICAgIHNldCBuIFtsaXN0ICRmb250YXR0cigkZixmYW1pbHkpICRmb250YXR0cigkZixzaXplKV0KKyAgICBpZiB7JGZvbnRhdHRyKCRmLHdlaWdodCkgZXEgImJvbGQifSB7CisJbGFwcGVuZCBuICJib2xkIgorICAgIH0KKyAgICBpZiB7JGZvbnRhdHRyKCRmLHNsYW50KSBlcSAiaXRhbGljIn0geworCWxhcHBlbmQgbiAiaXRhbGljIgorICAgIH0KKyAgICByZXR1cm4gJG4KK30KKworcHJvYyBpbmNyZm9udCB7aW5jfSB7CisgICAgZ2xvYmFsIG1haW5mb250IHRleHRmb250IGN0ZXh0IGNhbnYgY2ZsaXN0IHNob3dyZWZzdG9wCisgICAgZ2xvYmFsIHN0b3BwZWQgZW50cmllcyBmb250YXR0cgorCisgICAgdW5tYXJrbWF0Y2hlcworICAgIHNldCBzICRmb250YXR0cihtYWluZm9udCxzaXplKQorICAgIGluY3IgcyAkaW5jCisgICAgaWYgeyRzIDwgMX0geworCXNldCBzIDEKKyAgICB9CisgICAgc2V0IGZvbnRhdHRyKG1haW5mb250LHNpemUpICRzCisgICAgZm9udCBjb25maWcgbWFpbmZvbnQgLXNpemUgJHMKKyAgICBmb250IGNvbmZpZyBtYWluZm9udGJvbGQgLXNpemUgJHMKKyAgICBzZXQgbWFpbmZvbnQgW2ZvbnRuYW1lIG1haW5mb250XQorICAgIHNldCBzICRmb250YXR0cih0ZXh0Zm9udCxzaXplKQorICAgIGluY3IgcyAkaW5jCisgICAgaWYgeyRzIDwgMX0geworCXNldCBzIDEKKyAgICB9CisgICAgc2V0IGZvbnRhdHRyKHRleHRmb250LHNpemUpICRzCisgICAgZm9udCBjb25maWcgdGV4dGZvbnQgLXNpemUgJHMKKyAgICBmb250IGNvbmZpZyB0ZXh0Zm9udGJvbGQgLXNpemUgJHMKKyAgICBzZXQgdGV4dGZvbnQgW2ZvbnRuYW1lIHRleHRmb250XQorICAgIHNldGNvb3JkcworICAgIHNldHRhYnMKKyAgICByZWRpc3BsYXkKK30KKworcHJvYyBjbGVhcnNoYTEge30geworICAgIGdsb2JhbCBzaGExZW50cnkgc2hhMXN0cmluZworICAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkc2hhMXN0cmluZ10gPT0gNDB9IHsKKwkkc2hhMWVudHJ5IGRlbGV0ZSAwIGVuZAorICAgIH0KK30KKworcHJvYyBzaGExY2hhbmdlIHtuMSBuMiBvcH0geworICAgIGdsb2JhbCBzaGExc3RyaW5nIGN1cnJlbnRpZCBzaGExYnV0CisgICAgaWYgeyRzaGExc3RyaW5nID09IHt9CisJfHwgKFtpbmZvIGV4aXN0cyBjdXJyZW50aWRdICYmICRzaGExc3RyaW5nID09ICRjdXJyZW50aWQpfSB7CisJc2V0IHN0YXRlIGRpc2FibGVkCisgICAgfSBlbHNlIHsKKwlzZXQgc3RhdGUgbm9ybWFsCisgICAgfQorICAgIGlmIHtbJHNoYTFidXQgY2dldCAtc3RhdGVdID09ICRzdGF0ZX0gcmV0dXJuCisgICAgaWYgeyRzdGF0ZSA9PSAibm9ybWFsIn0geworCSRzaGExYnV0IGNvbmYgLXN0YXRlIG5vcm1hbCAtcmVsaWVmIHJhaXNlZCAtdGV4dCAiW21jICJHb3RvOiJdICIKKyAgICB9IGVsc2UgeworCSRzaGExYnV0IGNvbmYgLXN0YXRlIGRpc2FibGVkIC1yZWxpZWYgZmxhdCAtdGV4dCAiW21jICJTSEExIElEOiJdICIKKyAgICB9Cit9CisKK3Byb2MgZ290b2NvbW1pdCB7fSB7CisgICAgZ2xvYmFsIHNoYTFzdHJpbmcgdGFnaWRzIGhlYWRpZHMgY3VydmlldyB2YXJjaWQKKworICAgIGlmIHskc2hhMXN0cmluZyA9PSB7fQorCXx8IChbaW5mbyBleGlzdHMgY3VycmVudGlkXSAmJiAkc2hhMXN0cmluZyA9PSAkY3VycmVudGlkKX0gcmV0dXJuCisgICAgaWYge1tpbmZvIGV4aXN0cyB0YWdpZHMoJHNoYTFzdHJpbmcpXX0geworCXNldCBpZCAkdGFnaWRzKCRzaGExc3RyaW5nKQorICAgIH0gZWxzZWlmIHtbaW5mbyBleGlzdHMgaGVhZGlkcygkc2hhMXN0cmluZyldfSB7CisJc2V0IGlkICRoZWFkaWRzKCRzaGExc3RyaW5nKQorICAgIH0gZWxzZSB7CisJc2V0IGlkIFtzdHJpbmcgdG9sb3dlciAkc2hhMXN0cmluZ10KKwlpZiB7W3JlZ2V4cCB7XlswLTlhLWZdezQsMzl9JH0gJGlkXX0geworCSAgICBzZXQgbWF0Y2hlcyBbbG9uZ2lkICRpZF0KKwkgICAgaWYgeyRtYXRjaGVzIG5lIHt9fSB7CisJCWlmIHtbbGxlbmd0aCAkbWF0Y2hlc10gPiAxfSB7CisJCSAgICBlcnJvcl9wb3B1cCBbbWMgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIiAkaWRdCisJCSAgICByZXR1cm4KKwkJfQorCQlzZXQgaWQgW2xpbmRleCAkbWF0Y2hlcyAwXQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaWYge1tjYXRjaCB7c2V0IGlkIFtleGVjIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJHNoYTFzdHJpbmddfV19IHsKKwkJZXJyb3JfcG9wdXAgW21jICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iICRzaGExc3RyaW5nXQorCQlyZXR1cm4KKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYge1tjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0geworCXNlbGVjdGxpbmUgW3Jvd29mY29tbWl0ICRpZF0gMQorCXJldHVybgorICAgIH0KKyAgICBpZiB7W3JlZ2V4cCB7XlswLTlhLWZBLUZdezQsfSR9ICRzaGExc3RyaW5nXX0geworCXNldCBtc2cgW21jICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIgJHNoYTFzdHJpbmddCisgICAgfSBlbHNlIHsKKwlzZXQgbXNnIFttYyAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciICRzaGExc3RyaW5nXQorICAgIH0KKyAgICBlcnJvcl9wb3B1cCAkbXNnCit9CisKK3Byb2MgbGluZWVudGVyIHt4IHkgaWR9IHsKKyAgICBnbG9iYWwgaG92ZXJ4IGhvdmVyeSBob3ZlcmlkIGhvdmVydGltZXIKKyAgICBnbG9iYWwgY29tbWl0aW5mbyBjYW52CisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldICYmICFbZ2V0Y29tbWl0ICRpZF19IHJldHVybgorICAgIHNldCBob3ZlcnggJHgKKyAgICBzZXQgaG92ZXJ5ICR5CisgICAgc2V0IGhvdmVyaWQgJGlkCisgICAgaWYge1tpbmZvIGV4aXN0cyBob3ZlcnRpbWVyXX0geworCWFmdGVyIGNhbmNlbCAkaG92ZXJ0aW1lcgorICAgIH0KKyAgICBzZXQgaG92ZXJ0aW1lciBbYWZ0ZXIgNTAwIGxpbmVob3Zlcl0KKyAgICAkY2FudiBkZWxldGUgaG92ZXIKK30KKworcHJvYyBsaW5lbW90aW9uIHt4IHkgaWR9IHsKKyAgICBnbG9iYWwgaG92ZXJ4IGhvdmVyeSBob3ZlcmlkIGhvdmVydGltZXIKKworICAgIGlmIHtbaW5mbyBleGlzdHMgaG92ZXJpZF0gJiYgJGlkID09ICRob3ZlcmlkfSB7CisJc2V0IGhvdmVyeCAkeAorCXNldCBob3ZlcnkgJHkKKwlpZiB7W2luZm8gZXhpc3RzIGhvdmVydGltZXJdfSB7CisJICAgIGFmdGVyIGNhbmNlbCAkaG92ZXJ0aW1lcgorCX0KKwlzZXQgaG92ZXJ0aW1lciBbYWZ0ZXIgNTAwIGxpbmVob3Zlcl0KKyAgICB9Cit9CisKK3Byb2MgbGluZWxlYXZlIHtpZH0geworICAgIGdsb2JhbCBob3ZlcmlkIGhvdmVydGltZXIgY2FudgorCisgICAgaWYge1tpbmZvIGV4aXN0cyBob3ZlcmlkXSAmJiAkaWQgPT0gJGhvdmVyaWR9IHsKKwkkY2FudiBkZWxldGUgaG92ZXIKKwlpZiB7W2luZm8gZXhpc3RzIGhvdmVydGltZXJdfSB7CisJICAgIGFmdGVyIGNhbmNlbCAkaG92ZXJ0aW1lcgorCSAgICB1bnNldCBob3ZlcnRpbWVyCisJfQorCXVuc2V0IGhvdmVyaWQKKyAgICB9Cit9CisKK3Byb2MgbGluZWhvdmVyIHt9IHsKKyAgICBnbG9iYWwgaG92ZXJ4IGhvdmVyeSBob3ZlcmlkIGhvdmVydGltZXIKKyAgICBnbG9iYWwgY2FudiBsaW5lc3BjIGx0aGlja25lc3MKKyAgICBnbG9iYWwgY29tbWl0aW5mbworCisgICAgc2V0IHRleHQgW2xpbmRleCAkY29tbWl0aW5mbygkaG92ZXJpZCkgMF0KKyAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisgICAgaWYgeyR5bWF4ID09IHt9fSByZXR1cm4KKyAgICBzZXQgeWZyYWMgW2xpbmRleCBbJGNhbnYgeXZpZXddIDBdCisgICAgc2V0IHggW2V4cHIgeyRob3ZlcnggKyAyICogJGxpbmVzcGN9XQorICAgIHNldCB5IFtleHByIHskaG92ZXJ5ICsgJHlmcmFjICogJHltYXggLSAkbGluZXNwYyAvIDJ9XQorICAgIHNldCB4MCBbZXhwciB7JHggLSAyICogJGx0aGlja25lc3N9XQorICAgIHNldCB5MCBbZXhwciB7JHkgLSAyICogJGx0aGlja25lc3N9XQorICAgIHNldCB4MSBbZXhwciB7JHggKyBbZm9udCBtZWFzdXJlIG1haW5mb250ICR0ZXh0XSArIDIgKiAkbHRoaWNrbmVzc31dCisgICAgc2V0IHkxIFtleHByIHskeSArICRsaW5lc3BjICsgMiAqICRsdGhpY2tuZXNzfV0KKyAgICBzZXQgdCBbJGNhbnYgY3JlYXRlIHJlY3RhbmdsZSAkeDAgJHkwICR4MSAkeTEgXAorCSAgICAgICAtZmlsbCBcI2ZmZmY4MCAtb3V0bGluZSBibGFjayAtd2lkdGggMSAtdGFncyBob3Zlcl0KKyAgICAkY2FudiByYWlzZSAkdAorICAgIHNldCB0IFskY2FudiBjcmVhdGUgdGV4dCAkeCAkeSAtYW5jaG9yIG53IC10ZXh0ICR0ZXh0IC10YWdzIGhvdmVyIFwKKwkgICAgICAgLWZvbnQgbWFpbmZvbnRdCisgICAgJGNhbnYgcmFpc2UgJHQKK30KKworcHJvYyBjbGlja2lzb25hcnJvdyB7aWQgeX0geworICAgIGdsb2JhbCBsdGhpY2tuZXNzCisKKyAgICBzZXQgcmFuZ2VzIFtyb3dyYW5nZXMgJGlkXQorICAgIHNldCB0aHJlc2ggW2V4cHIgezIgKiAkbHRoaWNrbmVzcyArIDZ9XQorICAgIHNldCBuIFtleHByIHtbbGxlbmd0aCAkcmFuZ2VzXSAtIDF9XQorICAgIGZvciB7c2V0IGkgMX0geyRpIDwgJG59IHtpbmNyIGl9IHsKKwlzZXQgcm93IFtsaW5kZXggJHJhbmdlcyAkaV0KKwlpZiB7YWJzKFt5YyAkcm93XSAtICR5KSA8ICR0aHJlc2h9IHsKKwkgICAgcmV0dXJuICRpCisJfQorICAgIH0KKyAgICByZXR1cm4ge30KK30KKworcHJvYyBhcnJvd2p1bXAge2lkIG4geX0geworICAgIGdsb2JhbCBjYW52CisKKyAgICAjIDEgPC0+IDIsIDMgPC0+IDQsIGV0Yy4uLgorICAgIHNldCBuIFtleHByIHsoKCRuIC0gMSkgXiAxKSArIDF9XQorICAgIHNldCByb3cgW2xpbmRleCBbcm93cmFuZ2VzICRpZF0gJG5dCisgICAgc2V0IHl0IFt5YyAkcm93XQorICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBpZiB7JHltYXggZXEge30gfHwgJHltYXggPD0gMH0gcmV0dXJuCisgICAgc2V0IHZpZXcgWyRjYW52IHl2aWV3XQorICAgIHNldCB5c3BhbiBbZXhwciB7W2xpbmRleCAkdmlldyAxXSAtIFtsaW5kZXggJHZpZXcgMF19XQorICAgIHNldCB5ZnJhYyBbZXhwciB7JHl0IC8gJHltYXggLSAkeXNwYW4gLyAyfV0KKyAgICBpZiB7JHlmcmFjIDwgMH0geworCXNldCB5ZnJhYyAwCisgICAgfQorICAgIGFsbGNhbnZzIHl2aWV3IG1vdmV0byAkeWZyYWMKK30KKworcHJvYyBsaW5lY2xpY2sge3ggeSBpZCBpc25ld30geworICAgIGdsb2JhbCBjdGV4dCBjb21taXRpbmZvIGNoaWxkcmVuIGNhbnYgdGhpY2tlcmxpbmUgY3VydmlldworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkaWQpXSAmJiAhW2dldGNvbW1pdCAkaWRdfSByZXR1cm4KKyAgICB1bm1hcmttYXRjaGVzCisgICAgdW5zZWxlY3RsaW5lCisgICAgbm9ybWFsbGluZQorICAgICRjYW52IGRlbGV0ZSBob3ZlcgorICAgICMgZHJhdyB0aGlzIGxpbmUgdGhpY2tlciB0aGFuIG5vcm1hbAorICAgIHNldCB0aGlja2VybGluZSAkaWQKKyAgICBkcmF3bGluZXMgJGlkCisgICAgaWYgeyRpc25ld30geworCXNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKwlpZiB7JHltYXggZXEge319IHJldHVybgorCXNldCB5ZnJhYyBbbGluZGV4IFskY2FudiB5dmlld10gMF0KKwlzZXQgeSBbZXhwciB7JHkgKyAkeWZyYWMgKiAkeW1heH1dCisgICAgfQorICAgIHNldCBkaXJuIFtjbGlja2lzb25hcnJvdyAkaWQgJHldCisgICAgaWYgeyRkaXJuIG5lIHt9fSB7CisJYXJyb3dqdW1wICRpZCAkZGlybiAkeQorCXJldHVybgorICAgIH0KKworICAgIGlmIHskaXNuZXd9IHsKKwlhZGR0b2hpc3RvcnkgW2xpc3QgbGluZWNsaWNrICR4ICR5ICRpZCAwXSBzYXZlY3RleHRwb3MKKyAgICB9CisgICAgIyBmaWxsIHRoZSBkZXRhaWxzIHBhbmUgd2l0aCBpbmZvIGFib3V0IHRoaXMgbGluZQorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBjbGVhcl9jdGV4dAorICAgIHNldHRhYnMgMAorICAgICRjdGV4dCBpbnNlcnQgZW5kICJbbWMgIlBhcmVudCJdOlx0IgorICAgICRjdGV4dCBpbnNlcnQgZW5kICRpZCBsaW5rMAorICAgIHNldGxpbmsgJGlkIGxpbmswCisgICAgc2V0IGluZm8gJGNvbW1pdGluZm8oJGlkKQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcblx0W2xpbmRleCAkaW5mbyAwXVxuIgorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcdFttYyAiQXV0aG9yIl06XHRbbGluZGV4ICRpbmZvIDFdXG4iCisgICAgc2V0IGRhdGUgW2Zvcm1hdGRhdGUgW2xpbmRleCAkaW5mbyAyXV0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXHRbbWMgIkRhdGUiXTpcdCRkYXRlXG4iCisgICAgc2V0IGtpZHMgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkKKyAgICBpZiB7JGtpZHMgbmUge319IHsKKwkkY3RleHQgaW5zZXJ0IGVuZCAiXG5bbWMgIkNoaWxkcmVuIl06IgorCXNldCBpIDAKKwlmb3JlYWNoIGNoaWxkICRraWRzIHsKKwkgICAgaW5jciBpCisJICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGNoaWxkKV0gJiYgIVtnZXRjb21taXQgJGNoaWxkXX0gY29udGludWUKKwkgICAgc2V0IGluZm8gJGNvbW1pdGluZm8oJGNoaWxkKQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG5cdCIKKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgJGNoaWxkIGxpbmskaQorCSAgICBzZXRsaW5rICRjaGlsZCBsaW5rJGkKKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuXHRbbGluZGV4ICRpbmZvIDBdIgorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG5cdFttYyAiQXV0aG9yIl06XHRbbGluZGV4ICRpbmZvIDFdIgorCSAgICBzZXQgZGF0ZSBbZm9ybWF0ZGF0ZSBbbGluZGV4ICRpbmZvIDJdXQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG5cdFttYyAiRGF0ZSJdOlx0JGRhdGVcbiIKKwl9CisgICAgfQorICAgIG1heWJlX3Njcm9sbF9jdGV4dCAxCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgaW5pdF9mbGlzdCB7fQorfQorCitwcm9jIG5vcm1hbGxpbmUge30geworICAgIGdsb2JhbCB0aGlja2VybGluZQorICAgIGlmIHtbaW5mbyBleGlzdHMgdGhpY2tlcmxpbmVdfSB7CisJc2V0IGlkICR0aGlja2VybGluZQorCXVuc2V0IHRoaWNrZXJsaW5lCisJZHJhd2xpbmVzICRpZAorICAgIH0KK30KKworcHJvYyBzZWxieWlkIHtpZCB7aXNuZXcgMX19IHsKKyAgICBnbG9iYWwgY3VydmlldworICAgIGlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkaWRdICRpc25ldworICAgIH0KK30KKworcHJvYyBtc3RpbWUge30geworICAgIGdsb2JhbCBzdGFydG1zdGltZQorICAgIGlmIHshW2luZm8gZXhpc3RzIHN0YXJ0bXN0aW1lXX0geworCXNldCBzdGFydG1zdGltZSBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgfQorICAgIHJldHVybiBbZm9ybWF0ICIlLjNmIiBbZXhwciB7KFtjbG9jayBjbGljayAtbWlsbGlzZWNvbmRzXSAtICRzdGFydG1zdGltZSkgLyAxMDAwLjB9XV0KK30KKworcHJvYyByb3dtZW51IHt4IHkgaWR9IHsKKyAgICBnbG9iYWwgcm93Y3R4bWVudSBzZWxlY3RlZGxpbmUgcm93bWVudWlkIGN1cnZpZXcKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIgZmFrZXJvd21lbnUgbWFpbmhlYWQgbWFya2VkaWQKKworICAgIHN0b3BmaW5kaW5nCisgICAgc2V0IHJvd21lbnVpZCAkaWQKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fSB8fCBbcm93b2Zjb21taXQgJGlkXSBlcSAkc2VsZWN0ZWRsaW5lfSB7CisJc2V0IHN0YXRlIGRpc2FibGVkCisgICAgfSBlbHNlIHsKKwlzZXQgc3RhdGUgbm9ybWFsCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgbWFya2VkaWRdICYmICRtYXJrZWRpZCBuZSAkaWR9IHsKKwlzZXQgbXN0YXRlIG5vcm1hbAorICAgIH0gZWxzZSB7CisJc2V0IG1zdGF0ZSBkaXNhYmxlZAorICAgIH0KKyAgICBpZiB7JGlkIG5lICRudWxsaWQgJiYgJGlkIG5lICRudWxsaWQyfSB7CisJc2V0IG1lbnUgJHJvd2N0eG1lbnUKKwlpZiB7JG1haW5oZWFkIG5lIHt9fSB7CisJICAgICRtZW51IGVudHJ5Y29uZmlndXJlIDcgLWxhYmVsIFttYyAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiICRtYWluaGVhZF0gLXN0YXRlIG5vcm1hbAorCX0gZWxzZSB7CisJICAgICRtZW51IGVudHJ5Y29uZmlndXJlIDcgLWxhYmVsIFttYyAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiICRtYWluaGVhZF0gLXN0YXRlIGRpc2FibGVkCisJfQorCSRtZW51IGVudHJ5Y29uZmlndXJlIDkgLXN0YXRlICRtc3RhdGUKKwkkbWVudSBlbnRyeWNvbmZpZ3VyZSAxMCAtc3RhdGUgJG1zdGF0ZQorCSRtZW51IGVudHJ5Y29uZmlndXJlIDExIC1zdGF0ZSAkbXN0YXRlCisgICAgfSBlbHNlIHsKKwlzZXQgbWVudSAkZmFrZXJvd21lbnUKKyAgICB9CisgICAgJG1lbnUgZW50cnljb25maWd1cmUgW21jYSAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIl0gLXN0YXRlICRzdGF0ZQorICAgICRtZW51IGVudHJ5Y29uZmlndXJlIFttY2EgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyJdIC1zdGF0ZSAkc3RhdGUKKyAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSBbbWNhICJNYWtlIHBhdGNoIl0gLXN0YXRlICRzdGF0ZQorICAgICRtZW51IGVudHJ5Y29uZmlndXJlIFttY2EgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0Il0gLXN0YXRlICRtc3RhdGUKKyAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSBbbWNhICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyJdIC1zdGF0ZSAkbXN0YXRlCisgICAgdGtfcG9wdXAgJG1lbnUgJHggJHkKK30KKworcHJvYyBtYXJraGVyZSB7fSB7CisgICAgZ2xvYmFsIHJvd21lbnVpZCBtYXJrZWRpZCBjYW52CisKKyAgICBzZXQgbWFya2VkaWQgJHJvd21lbnVpZAorICAgIG1ha2VfaWRtYXJrICRtYXJrZWRpZAorfQorCitwcm9jIGdvdG9tYXJrIHt9IHsKKyAgICBnbG9iYWwgbWFya2VkaWQKKworICAgIGlmIHtbaW5mbyBleGlzdHMgbWFya2VkaWRdfSB7CisJc2VsYnlpZCAkbWFya2VkaWQKKyAgICB9Cit9CisKK3Byb2MgcmVwbGFjZV9ieV9raWRzIHtsIHJ9IHsKKyAgICBnbG9iYWwgY3VydmlldyBjaGlsZHJlbgorCisgICAgc2V0IGlkIFtjb21taXRvbnJvdyAkcl0KKyAgICBzZXQgbCBbbHJlcGxhY2UgJGwgMCAwXQorICAgIGZvcmVhY2gga2lkICRjaGlsZHJlbigkY3VydmlldywkaWQpIHsKKwlsYXBwZW5kIGwgW3Jvd29mY29tbWl0ICRraWRdCisgICAgfQorICAgIHJldHVybiBbbHNvcnQgLWludGVnZXIgLWRlY3JlYXNpbmcgLXVuaXF1ZSAkbF0KK30KKworcHJvYyBmaW5kX2NvbW1vbl9kZXNjIHt9IHsKKyAgICBnbG9iYWwgbWFya2VkaWQgcm93bWVudWlkIGN1cnZpZXcgY2hpbGRyZW4KKworICAgIGlmIHshW2luZm8gZXhpc3RzIG1hcmtlZGlkXX0gcmV0dXJuCisgICAgaWYgeyFbY29tbWl0aW52aWV3ICRtYXJrZWRpZCAkY3Vydmlld10gfHwKKwkhW2NvbW1pdGludmlldyAkcm93bWVudWlkICRjdXJ2aWV3XX0gcmV0dXJuCisgICAgI3NldCB0MSBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IGwxIFtsaXN0IFtyb3dvZmNvbW1pdCAkbWFya2VkaWRdXQorICAgIHNldCBsMiBbbGlzdCBbcm93b2Zjb21taXQgJHJvd21lbnVpZF1dCisgICAgd2hpbGUgMSB7CisJc2V0IHIxIFtsaW5kZXggJGwxIDBdCisJc2V0IHIyIFtsaW5kZXggJGwyIDBdCisJaWYgeyRyMSBlcSB7fSB8fCAkcjIgZXEge319IGJyZWFrCisJaWYgeyRyMSA9PSAkcjJ9IHsKKwkgICAgc2VsZWN0bGluZSAkcjEgMQorCSAgICBicmVhaworCX0KKwlpZiB7JHIxID4gJHIyfSB7CisJICAgIHNldCBsMSBbcmVwbGFjZV9ieV9raWRzICRsMSAkcjFdCisJfSBlbHNlIHsKKwkgICAgc2V0IGwyIFtyZXBsYWNlX2J5X2tpZHMgJGwyICRyMl0KKwl9CisgICAgfQorICAgICNzZXQgdDIgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgICNwdXRzICJ0b29rIFtleHByIHskdDItJHQxfV1tcyIKK30KKworcHJvYyBjb21wYXJlX2NvbW1pdHMge30geworICAgIGdsb2JhbCBtYXJrZWRpZCByb3dtZW51aWQgY3VydmlldyBjaGlsZHJlbgorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgbWFya2VkaWRdfSByZXR1cm4KKyAgICBpZiB7IVtjb21taXRpbnZpZXcgJG1hcmtlZGlkICRjdXJ2aWV3XX0gcmV0dXJuCisgICAgYWRkdG9oaXN0b3J5IFtsaXN0IGRvX2NtcF9jb21taXRzICRtYXJrZWRpZCAkcm93bWVudWlkXQorICAgIGRvX2NtcF9jb21taXRzICRtYXJrZWRpZCAkcm93bWVudWlkCit9CisKK3Byb2MgZ2V0cGF0Y2hpZCB7aWR9IHsKKyAgICBnbG9iYWwgcGF0Y2hpZHMKKworICAgIGlmIHshW2luZm8gZXhpc3RzIHBhdGNoaWRzKCRpZCldfSB7CisJc2V0IGNtZCBbZGlmZmNtZCBbbGlzdCAkaWRdIHstcCAtLXJvb3R9XQorCSMgdHJpbSBvZmYgdGhlIGluaXRpYWwgInwiCisJc2V0IGNtZCBbbHJhbmdlICRjbWQgMSBlbmRdCisJaWYge1tjYXRjaCB7CisJICAgIHNldCB4IFtldmFsIGV4ZWMgJGNtZCB8IGdpdCBwYXRjaC1pZF0KKwkgICAgc2V0IHBhdGNoaWRzKCRpZCkgW2xpbmRleCAkeCAwXQorCX1dfSB7CisJICAgIHNldCBwYXRjaGlkcygkaWQpICJlcnJvciIKKwl9CisgICAgfQorICAgIHJldHVybiAkcGF0Y2hpZHMoJGlkKQorfQorCitwcm9jIGRvX2NtcF9jb21taXRzIHthIGJ9IHsKKyAgICBnbG9iYWwgY3RleHQgY3VydmlldyBwYXJlbnRzIGNoaWxkcmVuIHBhdGNoaWRzIGNvbW1pdGluZm8KKworICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBjbGVhcl9jdGV4dAorICAgIGluaXRfZmxpc3Qge30KKyAgICBmb3Ige3NldCBpIDB9IHskaSA8IDEwMH0ge2luY3IgaX0geworCXNldCBza2lwYSAwCisJc2V0IHNraXBiIDAKKwlpZiB7W2xsZW5ndGggJHBhcmVudHMoJGN1cnZpZXcsJGEpXSA+IDF9IHsKKwkgICAgYXBwZW5kc2hvcnRsaW5rICRhIFttYyAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICJdICJcbiIKKwkgICAgc2V0IHNraXBhIDEKKwl9IGVsc2UgeworCSAgICBzZXQgcGF0Y2hhIFtnZXRwYXRjaGlkICRhXQorCX0KKwlpZiB7W2xsZW5ndGggJHBhcmVudHMoJGN1cnZpZXcsJGIpXSA+IDF9IHsKKwkgICAgYXBwZW5kc2hvcnRsaW5rICRiIFttYyAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICJdICJcbiIKKwkgICAgc2V0IHNraXBiIDEKKwl9IGVsc2UgeworCSAgICBzZXQgcGF0Y2hiIFtnZXRwYXRjaGlkICRiXQorCX0KKwlpZiB7ISRza2lwYSAmJiAhJHNraXBifSB7CisJICAgIHNldCBoZWFkYSBbbGluZGV4ICRjb21taXRpbmZvKCRhKSAwXQorCSAgICBzZXQgaGVhZGIgW2xpbmRleCAkY29tbWl0aW5mbygkYikgMF0KKwkgICAgaWYgeyRwYXRjaGEgZXEgImVycm9yIn0geworCQlhcHBlbmRzaG9ydGxpbmsgJGEgW21jICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiXSBcCisJCSAgICBbbWMgIiAtIHN0b3BwaW5nXG4iXQorCQlicmVhaworCSAgICB9CisJICAgIGlmIHskcGF0Y2hiIGVxICJlcnJvciJ9IHsKKwkJYXBwZW5kc2hvcnRsaW5rICRiIFttYyAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIl0gXAorCQkgICAgW21jICIgLSBzdG9wcGluZ1xuIl0KKwkJYnJlYWsKKwkgICAgfQorCSAgICBpZiB7JHBhdGNoYSBlcSAkcGF0Y2hifSB7CisJCWlmIHskaGVhZGEgZXEgJGhlYWRifSB7CisJCSAgICBhcHBlbmRzaG9ydGxpbmsgJGEgW21jICJDb21taXQgIl0KKwkJICAgIGFwcGVuZHNob3J0bGluayAkYiAiID09ICIgIiAgJGhlYWRhXG4iCisJCX0gZWxzZSB7CisJCSAgICBhcHBlbmRzaG9ydGxpbmsgJGEgW21jICJDb21taXQgIl0gIiAgJGhlYWRhXG4iCisJCSAgICBhcHBlbmRzaG9ydGxpbmsgJGIgW21jICIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiAgICAgICAiXSBcCisJCQkiICAkaGVhZGJcbiIKKwkJfQorCQlzZXQgc2tpcGEgMQorCQlzZXQgc2tpcGIgMQorCSAgICB9IGVsc2UgeworCQkkY3RleHQgaW5zZXJ0IGVuZCAiXG4iCisJCWFwcGVuZHNob3J0bGluayAkYSBbbWMgIkNvbW1pdCAiXSAiICAkaGVhZGFcbiIKKwkJYXBwZW5kc2hvcnRsaW5rICRiIFttYyAiIGRpZmZlcnMgZnJvbVxuICAgICAgICJdIFwKKwkJICAgICIgICRoZWFkYlxuIgorCQkkY3RleHQgaW5zZXJ0IGVuZCBbbWMgIkRpZmYgb2YgY29tbWl0czpcblxuIl0KKwkJJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisJCXVwZGF0ZQorCQlkaWZmY29tbWl0cyAkYSAkYgorCQlyZXR1cm4KKwkgICAgfQorCX0KKwlpZiB7JHNraXBhfSB7CisJICAgIHNldCBraWRzIFtyZWFsX2NoaWxkcmVuICRjdXJ2aWV3LCRhXQorCSAgICBpZiB7W2xsZW5ndGggJGtpZHNdICE9IDF9IHsKKwkJJGN0ZXh0IGluc2VydCBlbmQgIlxuIgorCQlhcHBlbmRzaG9ydGxpbmsgJGEgW21jICJDb21taXQgIl0gXAorCQkgICAgW21jICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIgW2xsZW5ndGggJGtpZHNdXQorCQlicmVhaworCSAgICB9CisJICAgIHNldCBhIFtsaW5kZXggJGtpZHMgMF0KKwl9CisJaWYgeyRza2lwYn0geworCSAgICBzZXQga2lkcyBbcmVhbF9jaGlsZHJlbiAkY3VydmlldywkYl0KKwkgICAgaWYge1tsbGVuZ3RoICRraWRzXSAhPSAxfSB7CisJCWFwcGVuZHNob3J0bGluayAkYiBbbWMgIkNvbW1pdCAiXSBcCisJCSAgICBbbWMgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIiBbbGxlbmd0aCAka2lkc11dCisJCWJyZWFrCisJICAgIH0KKwkgICAgc2V0IGIgW2xpbmRleCAka2lkcyAwXQorCX0KKyAgICB9CisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCit9CisKK3Byb2MgZGlmZmNvbW1pdHMge2EgYn0geworICAgIGdsb2JhbCBkaWZmY29udGV4dCBkaWZmaWRzIGJsb2JkaWZmZmQgZGlmZmluaGRyIGN1cnJkaWZmc3VibW9kCisKKyAgICBzZXQgdG1wZGlyIFtnaXRrbmV3dG1wZGlyXQorICAgIHNldCBmbmEgW2ZpbGUgam9pbiAkdG1wZGlyICJjb21taXQtW3N0cmluZyByYW5nZSAkYSAwIDddIl0KKyAgICBzZXQgZm5iIFtmaWxlIGpvaW4gJHRtcGRpciAiY29tbWl0LVtzdHJpbmcgcmFuZ2UgJGIgMCA3XSJdCisgICAgaWYge1tjYXRjaCB7CisJZXhlYyBnaXQgZGlmZi10cmVlIC1wIC0tcHJldHR5ICRhID4kZm5hCisJZXhlYyBnaXQgZGlmZi10cmVlIC1wIC0tcHJldHR5ICRiID4kZm5iCisgICAgfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgW21jICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIgJGVycl0KKwlyZXR1cm4KKyAgICB9CisgICAgaWYge1tjYXRjaCB7CisJc2V0IGZkIFtvcGVuICJ8IGRpZmYgLVUkZGlmZmNvbnRleHQgJGZuYSAkZm5iIiByXQorICAgIH0gZXJyXX0geworCWVycm9yX3BvcHVwIFttYyAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIgJGVycl0KKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGRpZmZpZHMgW2xpc3QgY29tbWl0cyAkYSAkYl0KKyAgICBzZXQgYmxvYmRpZmZmZCgkZGlmZmlkcykgJGZkCisgICAgc2V0IGRpZmZpbmhkciAwCisgICAgc2V0IGN1cnJkaWZmc3VibW9kICIiCisgICAgZmlsZXJ1biAkZmQgW2xpc3QgZ2V0YmxvYmRpZmZsaW5lICRmZCAkZGlmZmlkc10KK30KKworcHJvYyBkaWZmdnNzZWwge2Rpcm59IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIHNlbGVjdGVkbGluZQorCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHJldHVybgorICAgIGlmIHskZGlybn0geworCXNldCBvbGRpZCBbY29tbWl0b25yb3cgJHNlbGVjdGVkbGluZV0KKwlzZXQgbmV3aWQgJHJvd21lbnVpZAorICAgIH0gZWxzZSB7CisJc2V0IG9sZGlkICRyb3dtZW51aWQKKwlzZXQgbmV3aWQgW2NvbW1pdG9ucm93ICRzZWxlY3RlZGxpbmVdCisgICAgfQorICAgIGFkZHRvaGlzdG9yeSBbbGlzdCBkb3NlbGRpZmYgJG9sZGlkICRuZXdpZF0gc2F2ZWN0ZXh0cG9zCisgICAgZG9zZWxkaWZmICRvbGRpZCAkbmV3aWQKK30KKworcHJvYyBkaWZmdnNtYXJrIHtkaXJufSB7CisgICAgZ2xvYmFsIHJvd21lbnVpZCBtYXJrZWRpZAorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgbWFya2VkaWRdfSByZXR1cm4KKyAgICBpZiB7JGRpcm59IHsKKwlzZXQgb2xkaWQgJG1hcmtlZGlkCisJc2V0IG5ld2lkICRyb3dtZW51aWQKKyAgICB9IGVsc2UgeworCXNldCBvbGRpZCAkcm93bWVudWlkCisJc2V0IG5ld2lkICRtYXJrZWRpZAorICAgIH0KKyAgICBhZGR0b2hpc3RvcnkgW2xpc3QgZG9zZWxkaWZmICRvbGRpZCAkbmV3aWRdIHNhdmVjdGV4dHBvcworICAgIGRvc2VsZGlmZiAkb2xkaWQgJG5ld2lkCit9CisKK3Byb2MgZG9zZWxkaWZmIHtvbGRpZCBuZXdpZH0geworICAgIGdsb2JhbCBjdGV4dAorICAgIGdsb2JhbCBjb21taXRpbmZvCisKKyAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgY2xlYXJfY3RleHQKKyAgICBpbml0X2ZsaXN0IFttYyAiVG9wIl0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiW21jICJGcm9tIl0gIgorICAgICRjdGV4dCBpbnNlcnQgZW5kICRvbGRpZCBsaW5rMAorICAgIHNldGxpbmsgJG9sZGlkIGxpbmswCisgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuICAgICAiCisgICAgJGN0ZXh0IGluc2VydCBlbmQgW2xpbmRleCAkY29tbWl0aW5mbygkb2xkaWQpIDBdCisgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuXG5bbWMgIlRvIl0gICAiCisgICAgJGN0ZXh0IGluc2VydCBlbmQgJG5ld2lkIGxpbmsxCisgICAgc2V0bGluayAkbmV3aWQgbGluazEKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG4gICAgICIKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCBbbGluZGV4ICRjb21taXRpbmZvKCRuZXdpZCkgMF0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG4iCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgJGN0ZXh0IHRhZyByZW1vdmUgZm91bmQgMS4wIGVuZAorICAgIHN0YXJ0ZGlmZiBbbGlzdCAkb2xkaWQgJG5ld2lkXQorfQorCitwcm9jIG1rcGF0Y2gge30geworICAgIGdsb2JhbCByb3dtZW51aWQgY3VycmVudGlkIGNvbW1pdGluZm8gcGF0Y2h0b3AgcGF0Y2hudW0gTlMKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGN1cnJlbnRpZF19IHJldHVybgorICAgIHNldCBvbGRpZCAkY3VycmVudGlkCisgICAgc2V0IG9sZGhlYWQgW2xpbmRleCAkY29tbWl0aW5mbygkb2xkaWQpIDBdCisgICAgc2V0IG5ld2lkICRyb3dtZW51aWQKKyAgICBzZXQgbmV3aGVhZCBbbGluZGV4ICRjb21taXRpbmZvKCRuZXdpZCkgMF0KKyAgICBzZXQgdG9wIC5wYXRjaAorICAgIHNldCBwYXRjaHRvcCAkdG9wCisgICAgY2F0Y2gge2Rlc3Ryb3kgJHRvcH0KKyAgICB0dGtfdG9wbGV2ZWwgJHRvcAorICAgIG1ha2VfdHJhbnNpZW50ICR0b3AgLgorICAgICR7TlN9OjpsYWJlbCAkdG9wLnRpdGxlIC10ZXh0IFttYyAiR2VuZXJhdGUgcGF0Y2giXQorICAgIGdyaWQgJHRvcC50aXRsZSAtIC1wYWR5IDEwCisgICAgJHtOU306OmxhYmVsICR0b3AuZnJvbSAtdGV4dCBbbWMgIkZyb206Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5mcm9tc2hhMSAtd2lkdGggNDAKKyAgICAkdG9wLmZyb21zaGExIGluc2VydCAwICRvbGRpZAorICAgICR0b3AuZnJvbXNoYTEgY29uZiAtc3RhdGUgcmVhZG9ubHkKKyAgICBncmlkICR0b3AuZnJvbSAkdG9wLmZyb21zaGExIC1zdGlja3kgdworICAgICR7TlN9OjplbnRyeSAkdG9wLmZyb21oZWFkIC13aWR0aCA2MAorICAgICR0b3AuZnJvbWhlYWQgaW5zZXJ0IDAgJG9sZGhlYWQKKyAgICAkdG9wLmZyb21oZWFkIGNvbmYgLXN0YXRlIHJlYWRvbmx5CisgICAgZ3JpZCB4ICR0b3AuZnJvbWhlYWQgLXN0aWNreSB3CisgICAgJHtOU306OmxhYmVsICR0b3AudG8gLXRleHQgW21jICJUbzoiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLnRvc2hhMSAtd2lkdGggNDAKKyAgICAkdG9wLnRvc2hhMSBpbnNlcnQgMCAkbmV3aWQKKyAgICAkdG9wLnRvc2hhMSBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgJHRvcC50byAkdG9wLnRvc2hhMSAtc3RpY2t5IHcKKyAgICAke05TfTo6ZW50cnkgJHRvcC50b2hlYWQgLXdpZHRoIDYwCisgICAgJHRvcC50b2hlYWQgaW5zZXJ0IDAgJG5ld2hlYWQKKyAgICAkdG9wLnRvaGVhZCBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgeCAkdG9wLnRvaGVhZCAtc3RpY2t5IHcKKyAgICAke05TfTo6YnV0dG9uICR0b3AucmV2IC10ZXh0IFttYyAiUmV2ZXJzZSJdIC1jb21tYW5kIG1rcGF0Y2hyZXYKKyAgICBncmlkICR0b3AucmV2IHggLXBhZHkgMTAgLXBhZHggNQorICAgICR7TlN9OjpsYWJlbCAkdG9wLmZsYWIgLXRleHQgW21jICJPdXRwdXQgZmlsZToiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLmZuYW1lIC13aWR0aCA2MAorICAgICR0b3AuZm5hbWUgaW5zZXJ0IDAgW2ZpbGUgbm9ybWFsaXplICJwYXRjaCRwYXRjaG51bS5wYXRjaCJdCisgICAgaW5jciBwYXRjaG51bQorICAgIGdyaWQgJHRvcC5mbGFiICR0b3AuZm5hbWUgLXN0aWNreSB3CisgICAgJHtOU306OmZyYW1lICR0b3AuYnV0cworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmdlbiAtdGV4dCBbbWMgIkdlbmVyYXRlIl0gLWNvbW1hbmQgbWtwYXRjaGdvCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgbWtwYXRjaGNhbgorICAgIGJpbmQgJHRvcCA8S2V5LVJldHVybj4gbWtwYXRjaGdvCisgICAgYmluZCAkdG9wIDxLZXktRXNjYXBlPiBta3BhdGNoY2FuCisgICAgZ3JpZCAkdG9wLmJ1dHMuZ2VuICR0b3AuYnV0cy5jYW4KKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMCAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAxIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCAkdG9wLmJ1dHMgLSAtcGFkeSAxMCAtc3RpY2t5IGV3CisgICAgZm9jdXMgJHRvcC5mbmFtZQorfQorCitwcm9jIG1rcGF0Y2hyZXYge30geworICAgIGdsb2JhbCBwYXRjaHRvcAorCisgICAgc2V0IG9sZGlkIFskcGF0Y2h0b3AuZnJvbXNoYTEgZ2V0XQorICAgIHNldCBvbGRoZWFkIFskcGF0Y2h0b3AuZnJvbWhlYWQgZ2V0XQorICAgIHNldCBuZXdpZCBbJHBhdGNodG9wLnRvc2hhMSBnZXRdCisgICAgc2V0IG5ld2hlYWQgWyRwYXRjaHRvcC50b2hlYWQgZ2V0XQorICAgIGZvcmVhY2ggZSBbbGlzdCBmcm9tc2hhMSBmcm9taGVhZCB0b3NoYTEgdG9oZWFkXSBcCisJICAgIHYgW2xpc3QgJG5ld2lkICRuZXdoZWFkICRvbGRpZCAkb2xkaGVhZF0geworCSRwYXRjaHRvcC4kZSBjb25mIC1zdGF0ZSBub3JtYWwKKwkkcGF0Y2h0b3AuJGUgZGVsZXRlIDAgZW5kCisJJHBhdGNodG9wLiRlIGluc2VydCAwICR2CisJJHBhdGNodG9wLiRlIGNvbmYgLXN0YXRlIHJlYWRvbmx5CisgICAgfQorfQorCitwcm9jIG1rcGF0Y2hnbyB7fSB7CisgICAgZ2xvYmFsIHBhdGNodG9wIG51bGxpZCBudWxsaWQyCisKKyAgICBzZXQgb2xkaWQgWyRwYXRjaHRvcC5mcm9tc2hhMSBnZXRdCisgICAgc2V0IG5ld2lkIFskcGF0Y2h0b3AudG9zaGExIGdldF0KKyAgICBzZXQgZm5hbWUgWyRwYXRjaHRvcC5mbmFtZSBnZXRdCisgICAgc2V0IGNtZCBbZGlmZmNtZCBbbGlzdCAkb2xkaWQgJG5ld2lkXSAtcF0KKyAgICAjIHRyaW0gb2ZmIHRoZSBpbml0aWFsICJ8IgorICAgIHNldCBjbWQgW2xyYW5nZSAkY21kIDEgZW5kXQorICAgIGxhcHBlbmQgY21kID4kZm5hbWUgJgorICAgIGlmIHtbY2F0Y2gge2V2YWwgZXhlYyAkY21kfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6Il0gJGVyciIgJHBhdGNodG9wCisgICAgfQorICAgIGNhdGNoIHtkZXN0cm95ICRwYXRjaHRvcH0KKyAgICB1bnNldCBwYXRjaHRvcAorfQorCitwcm9jIG1rcGF0Y2hjYW4ge30geworICAgIGdsb2JhbCBwYXRjaHRvcAorCisgICAgY2F0Y2gge2Rlc3Ryb3kgJHBhdGNodG9wfQorICAgIHVuc2V0IHBhdGNodG9wCit9CisKK3Byb2MgbWt0YWcge30geworICAgIGdsb2JhbCByb3dtZW51aWQgbWt0YWd0b3AgY29tbWl0aW5mbyBOUworCisgICAgc2V0IHRvcCAubWFrZXRhZworICAgIHNldCBta3RhZ3RvcCAkdG9wCisgICAgY2F0Y2gge2Rlc3Ryb3kgJHRvcH0KKyAgICB0dGtfdG9wbGV2ZWwgJHRvcAorICAgIG1ha2VfdHJhbnNpZW50ICR0b3AgLgorICAgICR7TlN9OjpsYWJlbCAkdG9wLnRpdGxlIC10ZXh0IFttYyAiQ3JlYXRlIHRhZyJdCisgICAgZ3JpZCAkdG9wLnRpdGxlIC0gLXBhZHkgMTAKKyAgICAke05TfTo6bGFiZWwgJHRvcC5pZCAtdGV4dCBbbWMgIklEOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3Auc2hhMSAtd2lkdGggNDAKKyAgICAkdG9wLnNoYTEgaW5zZXJ0IDAgJHJvd21lbnVpZAorICAgICR0b3Auc2hhMSBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgJHRvcC5pZCAkdG9wLnNoYTEgLXN0aWNreSB3CisgICAgJHtOU306OmVudHJ5ICR0b3AuaGVhZCAtd2lkdGggNjAKKyAgICAkdG9wLmhlYWQgaW5zZXJ0IDAgW2xpbmRleCAkY29tbWl0aW5mbygkcm93bWVudWlkKSAwXQorICAgICR0b3AuaGVhZCBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgeCAkdG9wLmhlYWQgLXN0aWNreSB3CisgICAgJHtOU306OmxhYmVsICR0b3AudGxhYiAtdGV4dCBbbWMgIlRhZyBuYW1lOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3AudGFnIC13aWR0aCA2MAorICAgIGdyaWQgJHRvcC50bGFiICR0b3AudGFnIC1zdGlja3kgdworICAgICR7TlN9OjpsYWJlbCAkdG9wLm9wIC10ZXh0IFttYyAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiXQorICAgIGdyaWQgJHRvcC5vcCAtY29sdW1uc3BhbiAyIC1zdGlja3kgd2UKKyAgICAke05TfTo6bGFiZWwgJHRvcC5tbGFiIC10ZXh0IFttYyAiVGFnIG1lc3NhZ2U6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5tc2cgLXdpZHRoIDYwCisgICAgZ3JpZCAkdG9wLm1sYWIgJHRvcC5tc2cgLXN0aWNreSB3CisgICAgJHtOU306OmZyYW1lICR0b3AuYnV0cworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmdlbiAtdGV4dCBbbWMgIkNyZWF0ZSJdIC1jb21tYW5kIG1rdGFnZ28KKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCBta3RhZ2NhbgorICAgIGJpbmQgJHRvcCA8S2V5LVJldHVybj4gbWt0YWdnbworICAgIGJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gbWt0YWdjYW4KKyAgICBncmlkICR0b3AuYnV0cy5nZW4gJHRvcC5idXRzLmNhbgorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAwIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDEgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkICR0b3AuYnV0cyAtIC1wYWR5IDEwIC1zdGlja3kgZXcKKyAgICBmb2N1cyAkdG9wLnRhZworfQorCitwcm9jIGRvbWt0YWcge30geworICAgIGdsb2JhbCBta3RhZ3RvcCBlbnYgdGFnaWRzIGlkdGFncworCisgICAgc2V0IGlkIFskbWt0YWd0b3Auc2hhMSBnZXRdCisgICAgc2V0IHRhZyBbJG1rdGFndG9wLnRhZyBnZXRdCisgICAgc2V0IG1zZyBbJG1rdGFndG9wLm1zZyBnZXRdCisgICAgaWYgeyR0YWcgPT0ge319IHsKKwllcnJvcl9wb3B1cCBbbWMgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCJdICRta3RhZ3RvcAorCXJldHVybiAwCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgdGFnaWRzKCR0YWcpXX0geworCWVycm9yX3BvcHVwIFttYyAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIgJHRhZ10gJG1rdGFndG9wCisJcmV0dXJuIDAKKyAgICB9CisgICAgaWYge1tjYXRjaCB7CisJaWYgeyRtc2cgIT0ge319IHsKKwkgICAgZXhlYyBnaXQgdGFnIC1hIC1tICRtc2cgJHRhZyAkaWQKKwl9IGVsc2UgeworCSAgICBleGVjIGdpdCB0YWcgJHRhZyAkaWQKKwl9CisgICAgfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgY3JlYXRpbmcgdGFnOiJdICRlcnIiICRta3RhZ3RvcAorCXJldHVybiAwCisgICAgfQorCisgICAgc2V0IHRhZ2lkcygkdGFnKSAkaWQKKyAgICBsYXBwZW5kIGlkdGFncygkaWQpICR0YWcKKyAgICByZWRyYXd0YWdzICRpZAorICAgIGFkZGVkdGFnICRpZAorICAgIGRpc3BuZWFydGFncyAwCisgICAgcnVuIHJlZmlsbF9yZWZsaXN0CisgICAgcmV0dXJuIDEKK30KKworcHJvYyByZWRyYXd0YWdzIHtpZH0geworICAgIGdsb2JhbCBjYW52IGxpbmVodGFnIGlkcG9zIGN1cnJlbnRpZCBjdXJ2aWV3IGNtaXRsaXN0ZWQgbWFya2VkaWQKKyAgICBnbG9iYWwgY2FudnhtYXggaWRkcmF3biBjaXJjbGVpdGVtIG1haW5oZWFkaWQgY2lyY2xlY29sb3JzCisKKyAgICBpZiB7IVtjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0gcmV0dXJuCisgICAgaWYgeyFbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXX0gcmV0dXJuCisgICAgc2V0IHJvdyBbcm93b2Zjb21taXQgJGlkXQorICAgIGlmIHskaWQgZXEgJG1haW5oZWFkaWR9IHsKKwlzZXQgb2ZpbGwgeWVsbG93CisgICAgfSBlbHNlIHsKKwlzZXQgb2ZpbGwgW2xpbmRleCAkY2lyY2xlY29sb3JzICRjbWl0bGlzdGVkKCRjdXJ2aWV3LCRpZCldCisgICAgfQorICAgICRjYW52IGl0ZW1jb25mICRjaXJjbGVpdGVtKCRyb3cpIC1maWxsICRvZmlsbAorICAgICRjYW52IGRlbGV0ZSB0YWcuJGlkCisgICAgc2V0IHh0IFtldmFsIGRyYXd0YWdzICRpZCAkaWRwb3MoJGlkKV0KKyAgICAkY2FudiBjb29yZHMgJGxpbmVodGFnKCRpZCkgJHh0IFtsaW5kZXggJGlkcG9zKCRpZCkgMl0KKyAgICBzZXQgdGV4dCBbJGNhbnYgaXRlbWNnZXQgJGxpbmVodGFnKCRpZCkgLXRleHRdCisgICAgc2V0IGZvbnQgWyRjYW52IGl0ZW1jZ2V0ICRsaW5laHRhZygkaWQpIC1mb250XQorICAgIHNldCB4ciBbZXhwciB7JHh0ICsgW2ZvbnQgbWVhc3VyZSAkZm9udCAkdGV4dF19XQorICAgIGlmIHskeHIgPiAkY2FudnhtYXh9IHsKKwlzZXQgY2FudnhtYXggJHhyCisJc2V0Y2FudnNjcm9sbAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGN1cnJlbnRpZF0gJiYgJGN1cnJlbnRpZCA9PSAkaWR9IHsKKwltYWtlX3NlY3NlbCAkaWQKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBtYXJrZWRpZF0gJiYgJG1hcmtlZGlkIGVxICRpZH0geworCW1ha2VfaWRtYXJrICRpZAorICAgIH0KK30KKworcHJvYyBta3RhZ2NhbiB7fSB7CisgICAgZ2xvYmFsIG1rdGFndG9wCisKKyAgICBjYXRjaCB7ZGVzdHJveSAkbWt0YWd0b3B9CisgICAgdW5zZXQgbWt0YWd0b3AKK30KKworcHJvYyBta3RhZ2dvIHt9IHsKKyAgICBpZiB7IVtkb21rdGFnXX0gcmV0dXJuCisgICAgbWt0YWdjYW4KK30KKworcHJvYyB3cml0ZWNvbW1pdCB7fSB7CisgICAgZ2xvYmFsIHJvd21lbnVpZCB3cmNvbXRvcCBjb21taXRpbmZvIHdyY29tY21kIE5TCisKKyAgICBzZXQgdG9wIC53cml0ZWNvbW1pdAorICAgIHNldCB3cmNvbXRvcCAkdG9wCisgICAgY2F0Y2gge2Rlc3Ryb3kgJHRvcH0KKyAgICB0dGtfdG9wbGV2ZWwgJHRvcAorICAgIG1ha2VfdHJhbnNpZW50ICR0b3AgLgorICAgICR7TlN9OjpsYWJlbCAkdG9wLnRpdGxlIC10ZXh0IFttYyAiV3JpdGUgY29tbWl0IHRvIGZpbGUiXQorICAgIGdyaWQgJHRvcC50aXRsZSAtIC1wYWR5IDEwCisgICAgJHtOU306OmxhYmVsICR0b3AuaWQgLXRleHQgW21jICJJRDoiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLnNoYTEgLXdpZHRoIDQwCisgICAgJHRvcC5zaGExIGluc2VydCAwICRyb3dtZW51aWQKKyAgICAkdG9wLnNoYTEgY29uZiAtc3RhdGUgcmVhZG9ubHkKKyAgICBncmlkICR0b3AuaWQgJHRvcC5zaGExIC1zdGlja3kgdworICAgICR7TlN9OjplbnRyeSAkdG9wLmhlYWQgLXdpZHRoIDYwCisgICAgJHRvcC5oZWFkIGluc2VydCAwIFtsaW5kZXggJGNvbW1pdGluZm8oJHJvd21lbnVpZCkgMF0KKyAgICAkdG9wLmhlYWQgY29uZiAtc3RhdGUgcmVhZG9ubHkKKyAgICBncmlkIHggJHRvcC5oZWFkIC1zdGlja3kgdworICAgICR7TlN9OjpsYWJlbCAkdG9wLmNsYWIgLXRleHQgW21jICJDb21tYW5kOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3AuY21kIC13aWR0aCA2MCAtdGV4dHZhcmlhYmxlIHdyY29tY21kCisgICAgZ3JpZCAkdG9wLmNsYWIgJHRvcC5jbWQgLXN0aWNreSB3IC1wYWR5IDEwCisgICAgJHtOU306OmxhYmVsICR0b3AuZmxhYiAtdGV4dCBbbWMgIk91dHB1dCBmaWxlOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3AuZm5hbWUgLXdpZHRoIDYwCisgICAgJHRvcC5mbmFtZSBpbnNlcnQgMCBbZmlsZSBub3JtYWxpemUgImNvbW1pdC1bc3RyaW5nIHJhbmdlICRyb3dtZW51aWQgMCA2XSJdCisgICAgZ3JpZCAkdG9wLmZsYWIgJHRvcC5mbmFtZSAtc3RpY2t5IHcKKyAgICAke05TfTo6ZnJhbWUgJHRvcC5idXRzCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuZ2VuIC10ZXh0IFttYyAiV3JpdGUiXSAtY29tbWFuZCB3cmNvbWdvCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgd3Jjb21jYW4KKyAgICBiaW5kICR0b3AgPEtleS1SZXR1cm4+IHdyY29tZ28KKyAgICBiaW5kICR0b3AgPEtleS1Fc2NhcGU+IHdyY29tY2FuCisgICAgZ3JpZCAkdG9wLmJ1dHMuZ2VuICR0b3AuYnV0cy5jYW4KKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMCAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAxIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCAkdG9wLmJ1dHMgLSAtcGFkeSAxMCAtc3RpY2t5IGV3CisgICAgZm9jdXMgJHRvcC5mbmFtZQorfQorCitwcm9jIHdyY29tZ28ge30geworICAgIGdsb2JhbCB3cmNvbXRvcAorCisgICAgc2V0IGlkIFskd3Jjb210b3Auc2hhMSBnZXRdCisgICAgc2V0IGNtZCAiZWNobyAkaWQgfCBbJHdyY29tdG9wLmNtZCBnZXRdIgorICAgIHNldCBmbmFtZSBbJHdyY29tdG9wLmZuYW1lIGdldF0KKyAgICBpZiB7W2NhdGNoIHtleGVjIHNoIC1jICRjbWQgPiRmbmFtZSAmfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3Igd3JpdGluZyBjb21taXQ6Il0gJGVyciIgJHdyY29tdG9wCisgICAgfQorICAgIGNhdGNoIHtkZXN0cm95ICR3cmNvbXRvcH0KKyAgICB1bnNldCB3cmNvbXRvcAorfQorCitwcm9jIHdyY29tY2FuIHt9IHsKKyAgICBnbG9iYWwgd3Jjb210b3AKKworICAgIGNhdGNoIHtkZXN0cm95ICR3cmNvbXRvcH0KKyAgICB1bnNldCB3cmNvbXRvcAorfQorCitwcm9jIG1rYnJhbmNoIHt9IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIG1rYnJ0b3AgTlMKKworICAgIHNldCB0b3AgLm1ha2VicmFuY2gKKyAgICBjYXRjaCB7ZGVzdHJveSAkdG9wfQorICAgIHR0a190b3BsZXZlbCAkdG9wCisgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCisgICAgJHtOU306OmxhYmVsICR0b3AudGl0bGUgLXRleHQgW21jICJDcmVhdGUgbmV3IGJyYW5jaCJdCisgICAgZ3JpZCAkdG9wLnRpdGxlIC0gLXBhZHkgMTAKKyAgICAke05TfTo6bGFiZWwgJHRvcC5pZCAtdGV4dCBbbWMgIklEOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3Auc2hhMSAtd2lkdGggNDAKKyAgICAkdG9wLnNoYTEgaW5zZXJ0IDAgJHJvd21lbnVpZAorICAgICR0b3Auc2hhMSBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgJHRvcC5pZCAkdG9wLnNoYTEgLXN0aWNreSB3CisgICAgJHtOU306OmxhYmVsICR0b3AubmxhYiAtdGV4dCBbbWMgIk5hbWU6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5uYW1lIC13aWR0aCA0MAorICAgIGdyaWQgJHRvcC5ubGFiICR0b3AubmFtZSAtc3RpY2t5IHcKKyAgICAke05TfTo6ZnJhbWUgJHRvcC5idXRzCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuZ28gLXRleHQgW21jICJDcmVhdGUiXSAtY29tbWFuZCBbbGlzdCBta2JyZ28gJHRvcF0KKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCAiY2F0Y2gge2Rlc3Ryb3kgJHRvcH0iCisgICAgYmluZCAkdG9wIDxLZXktUmV0dXJuPiBbbGlzdCBta2JyZ28gJHRvcF0KKyAgICBiaW5kICR0b3AgPEtleS1Fc2NhcGU+ICJjYXRjaCB7ZGVzdHJveSAkdG9wfSIKKyAgICBncmlkICR0b3AuYnV0cy5nbyAkdG9wLmJ1dHMuY2FuCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDAgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMSAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgJHRvcC5idXRzIC0gLXBhZHkgMTAgLXN0aWNreSBldworICAgIGZvY3VzICR0b3AubmFtZQorfQorCitwcm9jIG1rYnJnbyB7dG9wfSB7CisgICAgZ2xvYmFsIGhlYWRpZHMgaWRoZWFkcworCisgICAgc2V0IG5hbWUgWyR0b3AubmFtZSBnZXRdCisgICAgc2V0IGlkIFskdG9wLnNoYTEgZ2V0XQorICAgIHNldCBjbWRhcmdzIHt9CisgICAgc2V0IG9sZF9pZCB7fQorICAgIGlmIHskbmFtZSBlcSB7fX0geworCWVycm9yX3BvcHVwIFttYyAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCJdICR0b3AKKwlyZXR1cm4KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBoZWFkaWRzKCRuYW1lKV19IHsKKwlpZiB7IVtjb25maXJtX3BvcHVwIFttYyBcCisJCSJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIgJG5hbWVdICR0b3BdfSB7CisJICAgIHJldHVybgorCX0KKwlzZXQgb2xkX2lkICRoZWFkaWRzKCRuYW1lKQorCWxhcHBlbmQgY21kYXJncyAtZgorICAgIH0KKyAgICBjYXRjaCB7ZGVzdHJveSAkdG9wfQorICAgIGxhcHBlbmQgY21kYXJncyAkbmFtZSAkaWQKKyAgICBub3didXN5IG5ld2JyYW5jaAorICAgIHVwZGF0ZQorICAgIGlmIHtbY2F0Y2ggeworCWV2YWwgZXhlYyBnaXQgYnJhbmNoICRjbWRhcmdzCisgICAgfSBlcnJdfSB7CisJbm90YnVzeSBuZXdicmFuY2gKKwllcnJvcl9wb3B1cCAkZXJyCisgICAgfSBlbHNlIHsKKwlub3RidXN5IG5ld2JyYW5jaAorCWlmIHskb2xkX2lkIG5lIHt9fSB7CisJICAgIG1vdmVoZWFkICRpZCAkbmFtZQorCSAgICBtb3ZlZGhlYWQgJGlkICRuYW1lCisJICAgIHJlZHJhd3RhZ3MgJG9sZF9pZAorCSAgICByZWRyYXd0YWdzICRpZAorCX0gZWxzZSB7CisJICAgIHNldCBoZWFkaWRzKCRuYW1lKSAkaWQKKwkgICAgbGFwcGVuZCBpZGhlYWRzKCRpZCkgJG5hbWUKKwkgICAgYWRkZWRoZWFkICRpZCAkbmFtZQorCSAgICByZWRyYXd0YWdzICRpZAorCX0KKwlkaXNwbmVhcnRhZ3MgMAorCXJ1biByZWZpbGxfcmVmbGlzdAorICAgIH0KK30KKworcHJvYyBleGVjX2NpdG9vbCB7dG9vbF9hcmdzIHtiYXNlaWQge319fSB7CisgICAgZ2xvYmFsIGNvbW1pdGluZm8gZW52CisKKyAgICBzZXQgc2F2ZV9lbnYgW2FycmF5IGdldCBlbnYgR0lUX0FVVEhPUl8qXQorCisgICAgaWYgeyRiYXNlaWQgbmUge319IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRiYXNlaWQpXX0geworCSAgICBnZXRjb21taXQgJGJhc2VpZAorCX0KKwlzZXQgYXV0aG9yIFtsaW5kZXggJGNvbW1pdGluZm8oJGJhc2VpZCkgMV0KKwlzZXQgZGF0ZSBbbGluZGV4ICRjb21taXRpbmZvKCRiYXNlaWQpIDJdCisJaWYge1tyZWdleHAge15ccyooXFMuKlxTfFxTKVxzKjwoLiopPlxzKiR9IFwKKwkgICAgICAgICAgICAkYXV0aG9yIGF1dGhvciBuYW1lIGVtYWlsXQorCSAgICAmJiAkZGF0ZSBuZSB7fX0geworCSAgICBzZXQgZW52KEdJVF9BVVRIT1JfTkFNRSkgJG5hbWUKKwkgICAgc2V0IGVudihHSVRfQVVUSE9SX0VNQUlMKSAkZW1haWwKKwkgICAgc2V0IGVudihHSVRfQVVUSE9SX0RBVEUpICRkYXRlCisJfQorICAgIH0KKworICAgIGV2YWwgZXhlYyBnaXQgY2l0b29sICR0b29sX2FyZ3MgJgorCisgICAgYXJyYXkgdW5zZXQgZW52IEdJVF9BVVRIT1JfKgorICAgIGFycmF5IHNldCBlbnYgJHNhdmVfZW52Cit9CisKK3Byb2MgY2hlcnJ5cGljayB7fSB7CisgICAgZ2xvYmFsIHJvd21lbnVpZCBjdXJ2aWV3CisgICAgZ2xvYmFsIG1haW5oZWFkIG1haW5oZWFkaWQKKyAgICBnbG9iYWwgZ2l0ZGlyCisKKyAgICBzZXQgb2xkaGVhZCBbZXhlYyBnaXQgcmV2LXBhcnNlIEhFQURdCisgICAgc2V0IGRoZWFkcyBbZGVzY2hlYWRzICRyb3dtZW51aWRdCisgICAgaWYgeyRkaGVhZHMgbmUge30gJiYgW2xzZWFyY2ggLWV4YWN0ICRkaGVhZHMgJG9sZGhlYWRdID49IDB9IHsKKwlzZXQgb2sgW2NvbmZpcm1fcG9wdXAgW21jICJDb21taXQgJXMgaXMgYWxyZWFkeVwKKwkJaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iIFwKKwkJCQkgICBbc3RyaW5nIHJhbmdlICRyb3dtZW51aWQgMCA3XSAkbWFpbmhlYWRdXQorCWlmIHshJG9rfSByZXR1cm4KKyAgICB9CisgICAgbm93YnVzeSBjaGVycnlwaWNrIFttYyAiQ2hlcnJ5LXBpY2tpbmciXQorICAgIHVwZGF0ZQorICAgICMgVW5mb3J0dW5hdGVseSBnaXQtY2hlcnJ5LXBpY2sgd3JpdGVzIHN0dWZmIHRvIHN0ZGVyciBldmVuIHdoZW4KKyAgICAjIG5vIGVycm9yIG9jY3VycywgYW5kIGV4ZWMgdGFrZXMgdGhhdCBhcyBhbiBpbmRpY2F0aW9uIG9mIGVycm9yLi4uCisgICAgaWYge1tjYXRjaCB7ZXhlYyBzaCAtYyAiZ2l0IGNoZXJyeS1waWNrIC1yICRyb3dtZW51aWQgMj4mMSJ9IGVycl19IHsKKwlub3RidXN5IGNoZXJyeXBpY2sKKwlpZiB7W3JlZ2V4cCAtbGluZSBcCisJCSB7RW50cnkgJyguKiknICh3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZXxub3QgdXB0b2RhdGUpfSBcCisJCSAkZXJyIG1zZyBmbmFtZV19IHsKKwkgICAgZXJyb3JfcG9wdXAgW21jICJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzXAorCQkJdG8gZmlsZSAnJXMnLlxuUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2hcCisJCQl5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iICRmbmFtZV0KKwl9IGVsc2VpZiB7W3JlZ2V4cCAtbGluZSBcCisJCSAgICAgICB7XihDT05GTElDVCBcKC4qXCk6fEF1dG9tYXRpYyBjaGVycnktcGljayBmYWlsZWR8ZXJyb3I6IGNvdWxkIG5vdCBhcHBseSl9IFwKKwkJICAgICAgICRlcnJdfSB7CisJICAgIGlmIHtbY29uZmlybV9wb3B1cCBbbWMgIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlXAorCQkJY29uZmxpY3QuXG5EbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0b1wKKwkJCXJlc29sdmUgaXQ/Il1dfSB7CisJCSMgRm9yY2UgY2l0b29sIHRvIHJlYWQgTUVSR0VfTVNHCisJCWZpbGUgZGVsZXRlIFtmaWxlIGpvaW4gJGdpdGRpciAiR0lUR1VJX01TRyJdCisJCWV4ZWNfY2l0b29sIHt9ICRyb3dtZW51aWQKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGVycm9yX3BvcHVwICRlcnIKKwl9CisJcnVuIHVwZGF0ZWNvbW1pdHMKKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IG5ld2hlYWQgW2V4ZWMgZ2l0IHJldi1wYXJzZSBIRUFEXQorICAgIGlmIHskbmV3aGVhZCBlcSAkb2xkaGVhZH0geworCW5vdGJ1c3kgY2hlcnJ5cGljaworCWVycm9yX3BvcHVwIFttYyAiTm8gY2hhbmdlcyBjb21taXR0ZWQiXQorCXJldHVybgorICAgIH0KKyAgICBhZGRuZXdjaGlsZCAkbmV3aGVhZCAkb2xkaGVhZAorICAgIGlmIHtbY29tbWl0aW52aWV3ICRvbGRoZWFkICRjdXJ2aWV3XX0geworCSMgWFhYIHRoaXMgaXNuJ3QgcmlnaHQgaWYgd2UgaGF2ZSBhIHBhdGggbGltaXQuLi4KKwlpbnNlcnRyb3cgJG5ld2hlYWQgJG9sZGhlYWQgJGN1cnZpZXcKKwlpZiB7JG1haW5oZWFkIG5lIHt9fSB7CisJICAgIG1vdmVoZWFkICRuZXdoZWFkICRtYWluaGVhZAorCSAgICBtb3ZlZGhlYWQgJG5ld2hlYWQgJG1haW5oZWFkCisJfQorCXNldCBtYWluaGVhZGlkICRuZXdoZWFkCisJcmVkcmF3dGFncyAkb2xkaGVhZAorCXJlZHJhd3RhZ3MgJG5ld2hlYWQKKwlzZWxieWlkICRuZXdoZWFkCisgICAgfQorICAgIG5vdGJ1c3kgY2hlcnJ5cGljaworfQorCitwcm9jIHJlc2V0aGVhZCB7fSB7CisgICAgZ2xvYmFsIG1haW5oZWFkIHJvd21lbnVpZCBjb25maXJtX29rIHJlc2V0dHlwZSBOUworCisgICAgc2V0IGNvbmZpcm1fb2sgMAorICAgIHNldCB3ICIuY29uZmlybXJlc2V0IgorICAgIHR0a190b3BsZXZlbCAkdworICAgIG1ha2VfdHJhbnNpZW50ICR3IC4KKyAgICB3bSB0aXRsZSAkdyBbbWMgIkNvbmZpcm0gcmVzZXQiXQorICAgICR7TlN9OjpsYWJlbCAkdy5tIC10ZXh0IFwKKwlbbWMgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iICRtYWluaGVhZCBbc3RyaW5nIHJhbmdlICRyb3dtZW51aWQgMCA3XV0KKyAgICBwYWNrICR3Lm0gLXNpZGUgdG9wIC1maWxsIHggLXBhZHggMjAgLXBhZHkgMjAKKyAgICAke05TfTo6bGFiZWxmcmFtZSAkdy5mIC10ZXh0IFttYyAiUmVzZXQgdHlwZToiXQorICAgIHNldCByZXNldHR5cGUgbWl4ZWQKKyAgICAke05TfTo6cmFkaW9idXR0b24gJHcuZi5zb2Z0IC12YWx1ZSBzb2Z0IC12YXJpYWJsZSByZXNldHR5cGUgXAorCS10ZXh0IFttYyAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiXQorICAgIGdyaWQgJHcuZi5zb2Z0IC1zdGlja3kgdworICAgICR7TlN9OjpyYWRpb2J1dHRvbiAkdy5mLm1peGVkIC12YWx1ZSBtaXhlZCAtdmFyaWFibGUgcmVzZXR0eXBlIFwKKwktdGV4dCBbbWMgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCJdCisgICAgZ3JpZCAkdy5mLm1peGVkIC1zdGlja3kgdworICAgICR7TlN9OjpyYWRpb2J1dHRvbiAkdy5mLmhhcmQgLXZhbHVlIGhhcmQgLXZhcmlhYmxlIHJlc2V0dHlwZSBcCisJLXRleHQgW21jICJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4oZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiXQorICAgIGdyaWQgJHcuZi5oYXJkIC1zdGlja3kgdworICAgIHBhY2sgJHcuZiAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeCA0CisgICAgJHtOU306OmJ1dHRvbiAkdy5vayAtdGV4dCBbbWMgT0tdIC1jb21tYW5kICJzZXQgY29uZmlybV9vayAxOyBkZXN0cm95ICR3IgorICAgIHBhY2sgJHcub2sgLXNpZGUgbGVmdCAtZmlsbCB4IC1wYWR4IDIwIC1wYWR5IDIwCisgICAgJHtOU306OmJ1dHRvbiAkdy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gLWNvbW1hbmQgImRlc3Ryb3kgJHciCisgICAgYmluZCAkdyA8S2V5LUVzY2FwZT4gW2xpc3QgZGVzdHJveSAkd10KKyAgICBwYWNrICR3LmNhbmNlbCAtc2lkZSByaWdodCAtZmlsbCB4IC1wYWR4IDIwIC1wYWR5IDIwCisgICAgYmluZCAkdyA8VmlzaWJpbGl0eT4gImdyYWIgJHc7IGZvY3VzICR3IgorICAgIHRrd2FpdCB3aW5kb3cgJHcKKyAgICBpZiB7ISRjb25maXJtX29rfSByZXR1cm4KKyAgICBpZiB7W2NhdGNoIHtzZXQgZmQgW29wZW4gXAorCSAgICBbbGlzdCB8IGdpdCByZXNldCAtLSRyZXNldHR5cGUgJHJvd21lbnVpZCAyPkAxXSByXX0gZXJyXX0geworCWVycm9yX3BvcHVwICRlcnIKKyAgICB9IGVsc2UgeworCWRvaGlkZWxvY2FsY2hhbmdlcworCWZpbGVydW4gJGZkIFtsaXN0IHJlYWRyZXNldHN0YXQgJGZkXQorCW5vd2J1c3kgcmVzZXQgW21jICJSZXNldHRpbmciXQorCXNlbGJ5aWQgJHJvd21lbnVpZAorICAgIH0KK30KKworcHJvYyByZWFkcmVzZXRzdGF0IHtmZH0geworICAgIGdsb2JhbCBtYWluaGVhZCBtYWluaGVhZGlkIHNob3dsb2NhbGNoYW5nZXMgcnByb2djb29yZAorCisgICAgaWYge1tnZXRzICRmZCBsaW5lXSA+PSAwfSB7CisJaWYge1tyZWdleHAgeyhbMC05XSspJSBcKChbMC05XSspLyhbMC05XSspXCl9ICRsaW5lIG1hdGNoIHAgbSBuXX0geworCSAgICBzZXQgcnByb2djb29yZCBbZXhwciB7MS4wICogJG0gLyAkbn1dCisJICAgIGFkanVzdHByb2dyZXNzCisJfQorCXJldHVybiAxCisgICAgfQorICAgIHNldCBycHJvZ2Nvb3JkIDAKKyAgICBhZGp1c3Rwcm9ncmVzcworICAgIG5vdGJ1c3kgcmVzZXQKKyAgICBpZiB7W2NhdGNoIHtjbG9zZSAkZmR9IGVycl19IHsKKwllcnJvcl9wb3B1cCAkZXJyCisgICAgfQorICAgIHNldCBvbGRoZWFkICRtYWluaGVhZGlkCisgICAgc2V0IG5ld2hlYWQgW2V4ZWMgZ2l0IHJldi1wYXJzZSBIRUFEXQorICAgIGlmIHskbmV3aGVhZCBuZSAkb2xkaGVhZH0geworCW1vdmVoZWFkICRuZXdoZWFkICRtYWluaGVhZAorCW1vdmVkaGVhZCAkbmV3aGVhZCAkbWFpbmhlYWQKKwlzZXQgbWFpbmhlYWRpZCAkbmV3aGVhZAorCXJlZHJhd3RhZ3MgJG9sZGhlYWQKKwlyZWRyYXd0YWdzICRuZXdoZWFkCisgICAgfQorICAgIGlmIHskc2hvd2xvY2FsY2hhbmdlc30geworCWRvc2hvd2xvY2FsY2hhbmdlcworICAgIH0KKyAgICByZXR1cm4gMAorfQorCisjIGNvbnRleHQgbWVudSBmb3IgYSBoZWFkCitwcm9jIGhlYWRtZW51IHt4IHkgaWQgaGVhZH0geworICAgIGdsb2JhbCBoZWFkbWVudWlkIGhlYWRtZW51aGVhZCBoZWFkY3R4bWVudSBtYWluaGVhZAorCisgICAgc3RvcGZpbmRpbmcKKyAgICBzZXQgaGVhZG1lbnVpZCAkaWQKKyAgICBzZXQgaGVhZG1lbnVoZWFkICRoZWFkCisgICAgc2V0IHN0YXRlIG5vcm1hbAorICAgIGlmIHtbc3RyaW5nIG1hdGNoICJyZW1vdGVzLyoiICRoZWFkXX0geworCXNldCBzdGF0ZSBkaXNhYmxlZAorICAgIH0KKyAgICBpZiB7JGhlYWQgZXEgJG1haW5oZWFkfSB7CisJc2V0IHN0YXRlIGRpc2FibGVkCisgICAgfQorICAgICRoZWFkY3R4bWVudSBlbnRyeWNvbmZpZ3VyZSAwIC1zdGF0ZSAkc3RhdGUKKyAgICAkaGVhZGN0eG1lbnUgZW50cnljb25maWd1cmUgMSAtc3RhdGUgJHN0YXRlCisgICAgdGtfcG9wdXAgJGhlYWRjdHhtZW51ICR4ICR5Cit9CisKK3Byb2MgY29icmFuY2gge30geworICAgIGdsb2JhbCBoZWFkbWVudWlkIGhlYWRtZW51aGVhZCBoZWFkaWRzCisgICAgZ2xvYmFsIHNob3dsb2NhbGNoYW5nZXMKKworICAgICMgY2hlY2sgdGhlIHRyZWUgaXMgY2xlYW4gZmlyc3Q/PworICAgIG5vd2J1c3kgY2hlY2tvdXQgW21jICJDaGVja2luZyBvdXQiXQorICAgIHVwZGF0ZQorICAgIGRvaGlkZWxvY2FsY2hhbmdlcworICAgIGlmIHtbY2F0Y2ggeworCXNldCBmZCBbb3BlbiBbbGlzdCB8IGdpdCBjaGVja291dCAkaGVhZG1lbnVoZWFkIDI+QDFdIHJdCisgICAgfSBlcnJdfSB7CisJbm90YnVzeSBjaGVja291dAorCWVycm9yX3BvcHVwICRlcnIKKwlpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKKwkgICAgZG9kaWZmaW5kZXgKKwl9CisgICAgfSBlbHNlIHsKKwlmaWxlcnVuICRmZCBbbGlzdCByZWFkY2hlY2tvdXRzdGF0ICRmZCAkaGVhZG1lbnVoZWFkICRoZWFkbWVudWlkXQorICAgIH0KK30KKworcHJvYyByZWFkY2hlY2tvdXRzdGF0IHtmZCBuZXdoZWFkIG5ld2hlYWRpZH0geworICAgIGdsb2JhbCBtYWluaGVhZCBtYWluaGVhZGlkIGhlYWRpZHMgc2hvd2xvY2FsY2hhbmdlcyBwcm9ncmVzc2Nvb3JkcworICAgIGdsb2JhbCB2aWV3bWFpbmhlYWRpZCBjdXJ2aWV3CisKKyAgICBpZiB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwlpZiB7W3JlZ2V4cCB7KFswLTldKyklIFwoKFswLTldKykvKFswLTldKylcKX0gJGxpbmUgbWF0Y2ggcCBtIG5dfSB7CisJICAgIHNldCBwcm9ncmVzc2Nvb3JkcyBbbGlzdCAwIFtleHByIHsxLjAgKiAkbSAvICRufV1dCisJICAgIGFkanVzdHByb2dyZXNzCisJfQorCXJldHVybiAxCisgICAgfQorICAgIHNldCBwcm9ncmVzc2Nvb3JkcyB7MCAwfQorICAgIGFkanVzdHByb2dyZXNzCisgICAgbm90YnVzeSBjaGVja291dAorICAgIGlmIHtbY2F0Y2gge2Nsb3NlICRmZH0gZXJyXX0geworCWVycm9yX3BvcHVwICRlcnIKKyAgICB9CisgICAgc2V0IG9sZG1haW5pZCAkbWFpbmhlYWRpZAorICAgIHNldCBtYWluaGVhZCAkbmV3aGVhZAorICAgIHNldCBtYWluaGVhZGlkICRuZXdoZWFkaWQKKyAgICBzZXQgdmlld21haW5oZWFkaWQoJGN1cnZpZXcpICRuZXdoZWFkaWQKKyAgICByZWRyYXd0YWdzICRvbGRtYWluaWQKKyAgICByZWRyYXd0YWdzICRuZXdoZWFkaWQKKyAgICBzZWxieWlkICRuZXdoZWFkaWQKKyAgICBpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKKwlkb2RpZmZpbmRleAorICAgIH0KK30KKworcHJvYyBybWJyYW5jaCB7fSB7CisgICAgZ2xvYmFsIGhlYWRtZW51aWQgaGVhZG1lbnVoZWFkIG1haW5oZWFkCisgICAgZ2xvYmFsIGlkaGVhZHMKKworICAgIHNldCBoZWFkICRoZWFkbWVudWhlYWQKKyAgICBzZXQgaWQgJGhlYWRtZW51aWQKKyAgICAjIHRoaXMgY2hlY2sgc2hvdWxkbid0IGJlIG5lZWRlZCBhbnkgbW9yZS4uLgorICAgIGlmIHskaGVhZCBlcSAkbWFpbmhlYWR9IHsKKwllcnJvcl9wb3B1cCBbbWMgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giXQorCXJldHVybgorICAgIH0KKyAgICBzZXQgZGhlYWRzIFtkZXNjaGVhZHMgJGlkXQorICAgIGlmIHtbbGxlbmd0aCAkZGhlYWRzXSA9PSAxICYmICRpZGhlYWRzKCRkaGVhZHMpIGVxICRoZWFkfSB7CisJIyB0aGUgc3R1ZmYgb24gdGhpcyBicmFuY2ggaXNuJ3Qgb24gYW55IG90aGVyIGJyYW5jaAorCWlmIHshW2NvbmZpcm1fcG9wdXAgW21jICJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlclwKKwkJCWJyYW5jaC5cblJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIgJGhlYWQgJGhlYWRdXX0gcmV0dXJuCisgICAgfQorICAgIG5vd2J1c3kgcm1icmFuY2gKKyAgICB1cGRhdGUKKyAgICBpZiB7W2NhdGNoIHtleGVjIGdpdCBicmFuY2ggLUQgJGhlYWR9IGVycl19IHsKKwlub3RidXN5IHJtYnJhbmNoCisJZXJyb3JfcG9wdXAgJGVycgorCXJldHVybgorICAgIH0KKyAgICByZW1vdmVoZWFkICRpZCAkaGVhZAorICAgIHJlbW92ZWRoZWFkICRpZCAkaGVhZAorICAgIHJlZHJhd3RhZ3MgJGlkCisgICAgbm90YnVzeSBybWJyYW5jaAorICAgIGRpc3BuZWFydGFncyAwCisgICAgcnVuIHJlZmlsbF9yZWZsaXN0Cit9CisKKyMgRGlzcGxheSBhIGxpc3Qgb2YgdGFncyBhbmQgaGVhZHMKK3Byb2Mgc2hvd3JlZnMge30geworICAgIGdsb2JhbCBzaG93cmVmc3RvcCBiZ2NvbG9yIGZnY29sb3Igc2VsZWN0Ymdjb2xvciBOUworICAgIGdsb2JhbCBiZ2xpc3QgZmdsaXN0IHJlZmxpc3RmaWx0ZXIgcmVmbGlzdCBtYWluY3Vyc29yCisKKyAgICBzZXQgdG9wIC5zaG93cmVmcworICAgIHNldCBzaG93cmVmc3RvcCAkdG9wCisgICAgaWYge1t3aW5mbyBleGlzdHMgJHRvcF19IHsKKwlyYWlzZSAkdG9wCisJcmVmaWxsX3JlZmxpc3QKKwlyZXR1cm4KKyAgICB9CisgICAgdHRrX3RvcGxldmVsICR0b3AKKyAgICB3bSB0aXRsZSAkdG9wIFttYyAiVGFncyBhbmQgaGVhZHM6ICVzIiBbZmlsZSB0YWlsIFtwd2RdXV0KKyAgICBtYWtlX3RyYW5zaWVudCAkdG9wIC4KKyAgICB0ZXh0ICR0b3AubGlzdCAtYmFja2dyb3VuZCAkYmdjb2xvciAtZm9yZWdyb3VuZCAkZmdjb2xvciBcCisJLXNlbGVjdGJhY2tncm91bmQgJHNlbGVjdGJnY29sb3IgLWZvbnQgbWFpbmZvbnQgXAorCS14c2Nyb2xsY29tbWFuZCAiJHRvcC54c2Igc2V0IiAteXNjcm9sbGNvbW1hbmQgIiR0b3AueXNiIHNldCIgXAorCS13aWR0aCAzMCAtaGVpZ2h0IDIwIC1jdXJzb3IgJG1haW5jdXJzb3IgXAorCS1zcGFjaW5nMSAxIC1zcGFjaW5nMyAxIC1zdGF0ZSBkaXNhYmxlZAorICAgICR0b3AubGlzdCB0YWcgY29uZmlndXJlIGhpZ2hsaWdodCAtYmFja2dyb3VuZCAkc2VsZWN0Ymdjb2xvcgorICAgIGxhcHBlbmQgYmdsaXN0ICR0b3AubGlzdAorICAgIGxhcHBlbmQgZmdsaXN0ICR0b3AubGlzdAorICAgICR7TlN9OjpzY3JvbGxiYXIgJHRvcC55c2IgLWNvbW1hbmQgIiR0b3AubGlzdCB5dmlldyIgLW9yaWVudCB2ZXJ0aWNhbAorICAgICR7TlN9OjpzY3JvbGxiYXIgJHRvcC54c2IgLWNvbW1hbmQgIiR0b3AubGlzdCB4dmlldyIgLW9yaWVudCBob3Jpem9udGFsCisgICAgZ3JpZCAkdG9wLmxpc3QgJHRvcC55c2IgLXN0aWNreSBuc2V3CisgICAgZ3JpZCAkdG9wLnhzYiB4IC1zdGlja3kgZXcKKyAgICAke05TfTo6ZnJhbWUgJHRvcC5mCisgICAgJHtOU306OmxhYmVsICR0b3AuZi5sIC10ZXh0ICJbbWMgIkZpbHRlciJdOiAiCisgICAgJHtOU306OmVudHJ5ICR0b3AuZi5lIC13aWR0aCAyMCAtdGV4dHZhcmlhYmxlIHJlZmxpc3RmaWx0ZXIKKyAgICBzZXQgcmVmbGlzdGZpbHRlciAiKiIKKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgcmVmbGlzdGZpbHRlciB3cml0ZSByZWZsaXN0ZmlsdGVyX2NoYW5nZQorICAgIHBhY2sgJHRvcC5mLmUgLXNpZGUgcmlnaHQgLWZpbGwgeCAtZXhwYW5kIDEKKyAgICBwYWNrICR0b3AuZi5sIC1zaWRlIGxlZnQKKyAgICBncmlkICR0b3AuZiAtIC1zdGlja3kgZXcgLXBhZHkgMgorICAgICR7TlN9OjpidXR0b24gJHRvcC5jbG9zZSAtY29tbWFuZCBbbGlzdCBkZXN0cm95ICR0b3BdIC10ZXh0IFttYyAiQ2xvc2UiXQorICAgIGJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gW2xpc3QgZGVzdHJveSAkdG9wXQorICAgIGdyaWQgJHRvcC5jbG9zZSAtCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcCAwIC13ZWlnaHQgMQorICAgIGdyaWQgcm93Y29uZmlndXJlICR0b3AgMCAtd2VpZ2h0IDEKKyAgICBiaW5kICR0b3AubGlzdCA8MT4ge2JyZWFrfQorICAgIGJpbmQgJHRvcC5saXN0IDxCMS1Nb3Rpb24+IHticmVha30KKyAgICBiaW5kICR0b3AubGlzdCA8QnV0dG9uUmVsZWFzZS0xPiB7c2VsX3JlZmxpc3QgJVcgJXggJXk7IGJyZWFrfQorICAgIHNldCByZWZsaXN0IHt9CisgICAgcmVmaWxsX3JlZmxpc3QKK30KKworcHJvYyBzZWxfcmVmbGlzdCB7dyB4IHl9IHsKKyAgICBnbG9iYWwgc2hvd3JlZnN0b3AgcmVmbGlzdCBoZWFkaWRzIHRhZ2lkcyBvdGhlcnJlZmlkcworCisgICAgaWYgeyFbd2luZm8gZXhpc3RzICRzaG93cmVmc3RvcF19IHJldHVybgorICAgIHNldCBsIFtsaW5kZXggW3NwbGl0IFskdyBpbmRleCAiQCR4LCR5Il0gIi4iXSAwXQorICAgIHNldCByZWYgW2xpbmRleCAkcmVmbGlzdCBbZXhwciB7JGwtMX1dXQorICAgIHNldCBuIFtsaW5kZXggJHJlZiAwXQorICAgIHN3aXRjaCAtLSBbbGluZGV4ICRyZWYgMV0geworCSJIIiB7c2VsYnlpZCAkaGVhZGlkcygkbil9CisJIlQiIHtzZWxieWlkICR0YWdpZHMoJG4pfQorCSJvIiB7c2VsYnlpZCAkb3RoZXJyZWZpZHMoJG4pfQorICAgIH0KKyAgICAkc2hvd3JlZnN0b3AubGlzdCB0YWcgYWRkIGhpZ2hsaWdodCAkbC4wICIkbC4wIGxpbmVlbmQiCit9CisKK3Byb2MgdW5zZWxfcmVmbGlzdCB7fSB7CisgICAgZ2xvYmFsIHNob3dyZWZzdG9wCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBzaG93cmVmc3RvcF0gfHwgIVt3aW5mbyBleGlzdHMgJHNob3dyZWZzdG9wXX0gcmV0dXJuCisgICAgJHNob3dyZWZzdG9wLmxpc3QgdGFnIHJlbW92ZSBoaWdobGlnaHQgMC4wIGVuZAorfQorCitwcm9jIHJlZmxpc3RmaWx0ZXJfY2hhbmdlIHtuMSBuMiBvcH0geworICAgIGdsb2JhbCByZWZsaXN0ZmlsdGVyCisKKyAgICBhZnRlciBjYW5jZWwgcmVmaWxsX3JlZmxpc3QKKyAgICBhZnRlciAyMDAgcmVmaWxsX3JlZmxpc3QKK30KKworcHJvYyByZWZpbGxfcmVmbGlzdCB7fSB7CisgICAgZ2xvYmFsIHJlZmxpc3QgcmVmbGlzdGZpbHRlciBzaG93cmVmc3RvcCBoZWFkaWRzIHRhZ2lkcyBvdGhlcnJlZmlkcworICAgIGdsb2JhbCBjdXJ2aWV3CisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBzaG93cmVmc3RvcF0gfHwgIVt3aW5mbyBleGlzdHMgJHNob3dyZWZzdG9wXX0gcmV0dXJuCisgICAgc2V0IHJlZnMge30KKyAgICBmb3JlYWNoIG4gW2FycmF5IG5hbWVzIGhlYWRpZHNdIHsKKwlpZiB7W3N0cmluZyBtYXRjaCAkcmVmbGlzdGZpbHRlciAkbl19IHsKKwkgICAgaWYge1tjb21taXRpbnZpZXcgJGhlYWRpZHMoJG4pICRjdXJ2aWV3XX0geworCQlsYXBwZW5kIHJlZnMgW2xpc3QgJG4gSF0KKwkgICAgfSBlbHNlIHsKKwkJaW50ZXJlc3RlZGluICRoZWFkaWRzKCRuKSB7cnVuIHJlZmlsbF9yZWZsaXN0fQorCSAgICB9CisJfQorICAgIH0KKyAgICBmb3JlYWNoIG4gW2FycmF5IG5hbWVzIHRhZ2lkc10geworCWlmIHtbc3RyaW5nIG1hdGNoICRyZWZsaXN0ZmlsdGVyICRuXX0geworCSAgICBpZiB7W2NvbW1pdGludmlldyAkdGFnaWRzKCRuKSAkY3Vydmlld119IHsKKwkJbGFwcGVuZCByZWZzIFtsaXN0ICRuIFRdCisJICAgIH0gZWxzZSB7CisJCWludGVyZXN0ZWRpbiAkdGFnaWRzKCRuKSB7cnVuIHJlZmlsbF9yZWZsaXN0fQorCSAgICB9CisJfQorICAgIH0KKyAgICBmb3JlYWNoIG4gW2FycmF5IG5hbWVzIG90aGVycmVmaWRzXSB7CisJaWYge1tzdHJpbmcgbWF0Y2ggJHJlZmxpc3RmaWx0ZXIgJG5dfSB7CisJICAgIGlmIHtbY29tbWl0aW52aWV3ICRvdGhlcnJlZmlkcygkbikgJGN1cnZpZXddfSB7CisJCWxhcHBlbmQgcmVmcyBbbGlzdCAkbiBvXQorCSAgICB9IGVsc2UgeworCQlpbnRlcmVzdGVkaW4gJG90aGVycmVmaWRzKCRuKSB7cnVuIHJlZmlsbF9yZWZsaXN0fQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgcmVmcyBbbHNvcnQgLWluZGV4IDAgJHJlZnNdCisgICAgaWYgeyRyZWZzIGVxICRyZWZsaXN0fSByZXR1cm4KKworICAgICMgVXBkYXRlIHRoZSBjb250ZW50cyBvZiAkc2hvd3JlZnN0b3AubGlzdCBhY2NvcmRpbmcgdG8gdGhlCisgICAgIyBkaWZmZXJlbmNlcyBiZXR3ZWVuICRyZWZsaXN0IChvbGQpIGFuZCAkcmVmcyAobmV3KQorICAgICRzaG93cmVmc3RvcC5saXN0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgICRzaG93cmVmc3RvcC5saXN0IGluc2VydCBlbmQgIlxuIgorICAgIHNldCBpIDAKKyAgICBzZXQgaiAwCisgICAgd2hpbGUgeyRpIDwgW2xsZW5ndGggJHJlZmxpc3RdIHx8ICRqIDwgW2xsZW5ndGggJHJlZnNdfSB7CisJaWYgeyRpIDwgW2xsZW5ndGggJHJlZmxpc3RdfSB7CisJICAgIGlmIHskaiA8IFtsbGVuZ3RoICRyZWZzXX0geworCQlzZXQgY21wIFtzdHJpbmcgY29tcGFyZSBbbGluZGV4ICRyZWZsaXN0ICRpIDBdIFwKKwkJCSAgICAgW2xpbmRleCAkcmVmcyAkaiAwXV0KKwkJaWYgeyRjbXAgPT0gMH0geworCQkgICAgc2V0IGNtcCBbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkcmVmbGlzdCAkaSAxXSBcCisJCQkJIFtsaW5kZXggJHJlZnMgJGogMV1dCisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGNtcCAtMQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgc2V0IGNtcCAxCisJfQorCXN3aXRjaCAtLSAkY21wIHsKKwkgICAgLTEgeworCQkkc2hvd3JlZnN0b3AubGlzdCBkZWxldGUgIltleHByIHskaisxfV0uMCIgIltleHByIHskaisyfV0uMCIKKwkJaW5jciBpCisJICAgIH0KKwkgICAgMCB7CisJCWluY3IgaQorCQlpbmNyIGoKKwkgICAgfQorCSAgICAxIHsKKwkJc2V0IGwgW2V4cHIgeyRqICsgMX1dCisJCSRzaG93cmVmc3RvcC5saXN0IGltYWdlIGNyZWF0ZSAkbC4wIC1hbGlnbiBiYXNlbGluZSBcCisJCSAgICAtaW1hZ2UgcmVmaWNvbi1bbGluZGV4ICRyZWZzICRqIDFdIC1wYWR4IDIKKwkJJHNob3dyZWZzdG9wLmxpc3QgaW5zZXJ0ICRsLjEgIltsaW5kZXggJHJlZnMgJGogMF1cbiIKKwkJaW5jciBqCisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCByZWZsaXN0ICRyZWZzCisgICAgIyBkZWxldGUgbGFzdCBuZXdsaW5lCisgICAgJHNob3dyZWZzdG9wLmxpc3QgZGVsZXRlIGVuZC0yYyBlbmQtMWMKKyAgICAkc2hvd3JlZnN0b3AubGlzdCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorfQorCisjIFN0dWZmIGZvciBmaW5kaW5nIG5lYXJieSB0YWdzCitwcm9jIGdldGFsbGNvbW1pdHMge30geworICAgIGdsb2JhbCBhbGxjb21taXRzIG5leHRhcmMgc2VlZHMgYWxsY2NhY2hlIGFsbGN3YWl0IGNhY2hlZGFyY3MgYWxsY3VwZGF0ZQorICAgIGdsb2JhbCBpZGhlYWRzIGlkdGFncyBpZG90aGVycmVmcyBhbGxwYXJlbnRzIHRhZ29iamlkCisgICAgZ2xvYmFsIGdpdGRpcgorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYWxsY29tbWl0c119IHsKKwlzZXQgbmV4dGFyYyAwCisJc2V0IGFsbGNvbW1pdHMgMAorCXNldCBzZWVkcyB7fQorCXNldCBhbGxjd2FpdCAwCisJc2V0IGNhY2hlZGFyY3MgMAorCXNldCBhbGxjY2FjaGUgW2ZpbGUgam9pbiAkZ2l0ZGlyICJnaXRrLmNhY2hlIl0KKwlpZiB7IVtjYXRjaCB7CisJICAgIHNldCBmIFtvcGVuICRhbGxjY2FjaGUgcl0KKwkgICAgc2V0IGFsbGN3YWl0IDEKKwkgICAgZ2V0Y2FjaGUgJGYKKwl9XX0gcmV0dXJuCisgICAgfQorCisgICAgaWYgeyRhbGxjd2FpdH0geworCXJldHVybgorICAgIH0KKyAgICBzZXQgY21kIFtsaXN0IHwgZ2l0IHJldi1saXN0IC0tcGFyZW50c10KKyAgICBzZXQgYWxsY3VwZGF0ZSBbZXhwciB7JHNlZWRzIG5lIHt9fV0KKyAgICBpZiB7ISRhbGxjdXBkYXRlfSB7CisJc2V0IGlkcyAiLS1hbGwiCisgICAgfSBlbHNlIHsKKwlzZXQgcmVmcyBbY29uY2F0IFthcnJheSBuYW1lcyBpZGhlYWRzXSBbYXJyYXkgbmFtZXMgaWR0YWdzXSBcCisJCSAgICAgIFthcnJheSBuYW1lcyBpZG90aGVycmVmc11dCisJc2V0IGlkcyB7fQorCXNldCB0YWdvYmpzIHt9CisJZm9yZWFjaCBuYW1lIFthcnJheSBuYW1lcyB0YWdvYmppZF0geworCSAgICBsYXBwZW5kIHRhZ29ianMgJHRhZ29iamlkKCRuYW1lKQorCX0KKwlmb3JlYWNoIGlkIFtsc29ydCAtdW5pcXVlICRyZWZzXSB7CisJICAgIGlmIHshW2luZm8gZXhpc3RzIGFsbHBhcmVudHMoJGlkKV0gJiYKKwkJW2xzZWFyY2ggLWV4YWN0ICR0YWdvYmpzICRpZF0gPCAwfSB7CisJCWxhcHBlbmQgaWRzICRpZAorCSAgICB9CisJfQorCWlmIHskaWRzIG5lIHt9fSB7CisJICAgIGZvcmVhY2ggaWQgJHNlZWRzIHsKKwkJbGFwcGVuZCBpZHMgIl4kaWQiCisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIHskaWRzIG5lIHt9fSB7CisJc2V0IGZkIFtvcGVuIFtjb25jYXQgJGNtZCAkaWRzXSByXQorCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwCisJaW5jciBhbGxjb21taXRzCisJbm93YnVzeSBhbGxjb21taXRzCisJZmlsZXJ1biAkZmQgW2xpc3QgZ2V0YWxsY2xpbmVzICRmZF0KKyAgICB9IGVsc2UgeworCWRpc3BuZWFydGFncyAwCisgICAgfQorfQorCisjIFNpbmNlIG1vc3QgY29tbWl0cyBoYXZlIDEgcGFyZW50IGFuZCAxIGNoaWxkLCB3ZSBncm91cCBzdHJpbmdzIG9mCisjIHN1Y2ggY29tbWl0cyBpbnRvICJhcmNzIiBqb2luaW5nIGJyYW5jaC9tZXJnZSBwb2ludHMgKEJNUHMpLCB3aGljaAorIyBhcmUgY29tbWl0cyB0aGF0IGVpdGhlciBkb24ndCBoYXZlIDEgcGFyZW50IG9yIGRvbid0IGhhdmUgMSBjaGlsZC4KKyMKKyMgYXJjbm9zKGlkKSAtIGluY29taW5nIGFyY3MgZm9yIEJNUCwgYXJjIHdlJ3JlIG9uIGZvciBvdGhlciBub2RlcworIyBhcmNvdXQoaWQpIC0gb3V0Z29pbmcgYXJjcyBmb3IgQk1QCisjIGFyY2lkcyhhKSAtIGxpc3Qgb2YgSURzIG9uIGFyYyBpbmNsdWRpbmcgZW5kIGJ1dCBub3Qgc3RhcnQKKyMgYXJjc3RhcnQoYSkgLSBCTVAgSUQgYXQgc3RhcnQgb2YgYXJjCisjIGFyY2VuZChhKSAtIEJNUCBJRCBhdCBlbmQgb2YgYXJjCisjIGdyb3dpbmcoYSkgLSBhcmMgYSBpcyBzdGlsbCBncm93aW5nCisjIGFyY3RhZ3MoYSkgLSBJRHMgb3V0IG9mIGFyY2lkcyAoZXhjbHVkaW5nIGVuZCkgdGhhdCBoYXZlIHRhZ3MKKyMgYXJjaGVhZHMoYSkgLSBJRHMgb3V0IG9mIGFyY2lkcyAoZXhjbHVkaW5nIGVuZCkgdGhhdCBoYXZlIGhlYWRzCisjIFRoZSBzdGFydCBvZiBhbiBhcmMgaXMgYXQgdGhlIGRlc2NlbmRlbnQgZW5kLCBzbyAiaW5jb21pbmciIG1lYW5zCisjIGNvbWluZyBmcm9tIGRlc2NlbmRlbnRzLCBhbmQgIm91dGdvaW5nIiBtZWFucyBnb2luZyB0b3dhcmRzIGFuY2VzdG9ycy4KKworcHJvYyBnZXRhbGxjbGluZXMge2ZkfSB7CisgICAgZ2xvYmFsIGFsbHBhcmVudHMgYWxsY2hpbGRyZW4gaWR0YWdzIGlkaGVhZHMgbmV4dGFyYworICAgIGdsb2JhbCBhcmNub3MgYXJjaWRzIGFyY3RhZ3MgYXJjb3V0IGFyY2VuZCBhcmNzdGFydCBhcmNoZWFkcyBncm93aW5nCisgICAgZ2xvYmFsIHNlZWRzIGFsbGNvbW1pdHMgY2FjaGVkYXJjcyBhbGxjdXBkYXRlCisKKyAgICBzZXQgbmlkIDAKKyAgICB3aGlsZSB7W2luY3IgbmlkXSA8PSAxMDAwICYmIFtnZXRzICRmZCBsaW5lXSA+PSAwfSB7CisJc2V0IGlkIFtsaW5kZXggJGxpbmUgMF0KKwlpZiB7W2luZm8gZXhpc3RzIGFsbHBhcmVudHMoJGlkKV19IHsKKwkgICAgIyBzZWVuIGl0IGFscmVhZHkKKwkgICAgY29udGludWUKKwl9CisJc2V0IGNhY2hlZGFyY3MgMAorCXNldCBvbGRzIFtscmFuZ2UgJGxpbmUgMSBlbmRdCisJc2V0IGFsbHBhcmVudHMoJGlkKSAkb2xkcworCWlmIHshW2luZm8gZXhpc3RzIGFsbGNoaWxkcmVuKCRpZCldfSB7CisJICAgIHNldCBhbGxjaGlsZHJlbigkaWQpIHt9CisJICAgIHNldCBhcmNub3MoJGlkKSB7fQorCSAgICBsYXBwZW5kIHNlZWRzICRpZAorCX0gZWxzZSB7CisJICAgIHNldCBhICRhcmNub3MoJGlkKQorCSAgICBpZiB7W2xsZW5ndGggJG9sZHNdID09IDEgJiYgW2xsZW5ndGggJGFdID09IDF9IHsKKwkJbGFwcGVuZCBhcmNpZHMoJGEpICRpZAorCQlpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCQkgICAgbGFwcGVuZCBhcmN0YWdzKCRhKSAkaWQKKwkJfQorCQlpZiB7W2luZm8gZXhpc3RzIGlkaGVhZHMoJGlkKV19IHsKKwkJICAgIGxhcHBlbmQgYXJjaGVhZHMoJGEpICRpZAorCQl9CisJCWlmIHtbaW5mbyBleGlzdHMgYWxscGFyZW50cygkb2xkcyldfSB7CisJCSAgICAjIHNlZW4gcGFyZW50IGFscmVhZHkKKwkJICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkb2xkcyldfSB7CisJCQlzcGxpdGFyYyAkb2xkcworCQkgICAgfQorCQkgICAgbGFwcGVuZCBhcmNpZHMoJGEpICRvbGRzCisJCSAgICBzZXQgYXJjZW5kKCRhKSAkb2xkcworCQkgICAgdW5zZXQgZ3Jvd2luZygkYSkKKwkJfQorCQlsYXBwZW5kIGFsbGNoaWxkcmVuKCRvbGRzKSAkaWQKKwkJbGFwcGVuZCBhcmNub3MoJG9sZHMpICRhCisJCWNvbnRpbnVlCisJICAgIH0KKwl9CisJZm9yZWFjaCBhICRhcmNub3MoJGlkKSB7CisJICAgIGxhcHBlbmQgYXJjaWRzKCRhKSAkaWQKKwkgICAgc2V0IGFyY2VuZCgkYSkgJGlkCisJICAgIHVuc2V0IGdyb3dpbmcoJGEpCisJfQorCisJc2V0IGFvIHt9CisJZm9yZWFjaCBwICRvbGRzIHsKKwkgICAgbGFwcGVuZCBhbGxjaGlsZHJlbigkcCkgJGlkCisJICAgIHNldCBhIFtpbmNyIG5leHRhcmNdCisJICAgIHNldCBhcmNzdGFydCgkYSkgJGlkCisJICAgIHNldCBhcmNoZWFkcygkYSkge30KKwkgICAgc2V0IGFyY3RhZ3MoJGEpIHt9CisJICAgIHNldCBhcmNoZWFkcygkYSkge30KKwkgICAgc2V0IGFyY2lkcygkYSkge30KKwkgICAgbGFwcGVuZCBhbyAkYQorCSAgICBzZXQgZ3Jvd2luZygkYSkgMQorCSAgICBpZiB7W2luZm8gZXhpc3RzIGFsbHBhcmVudHMoJHApXX0geworCQkjIHNlZW4gaXQgYWxyZWFkeSwgbWF5IG5lZWQgdG8gbWFrZSBhIG5ldyBicmFuY2gKKwkJaWYgeyFbaW5mbyBleGlzdHMgYXJjb3V0KCRwKV19IHsKKwkJICAgIHNwbGl0YXJjICRwCisJCX0KKwkJbGFwcGVuZCBhcmNpZHMoJGEpICRwCisJCXNldCBhcmNlbmQoJGEpICRwCisJCXVuc2V0IGdyb3dpbmcoJGEpCisJICAgIH0KKwkgICAgbGFwcGVuZCBhcmNub3MoJHApICRhCisJfQorCXNldCBhcmNvdXQoJGlkKSAkYW8KKyAgICB9CisgICAgaWYgeyRuaWQgPiAwfSB7CisJZ2xvYmFsIGNhY2hlZF9kaGVhZHMgY2FjaGVkX2R0YWdzIGNhY2hlZF9hdGFncworCWNhdGNoIHt1bnNldCBjYWNoZWRfZGhlYWRzfQorCWNhdGNoIHt1bnNldCBjYWNoZWRfZHRhZ3N9CisJY2F0Y2gge3Vuc2V0IGNhY2hlZF9hdGFnc30KKyAgICB9CisgICAgaWYgeyFbZW9mICRmZF19IHsKKwlyZXR1cm4gW2V4cHIgeyRuaWQgPj0gMTAwMD8gMjogMX1dCisgICAgfQorICAgIHNldCBjYWNoZW9rIDEKKyAgICBpZiB7W2NhdGNoIHsKKwlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMQorCWNsb3NlICRmZAorICAgIH0gZXJyXX0geworCSMgZ290IGFuIGVycm9yIHJlYWRpbmcgdGhlIGxpc3Qgb2YgY29tbWl0cworCSMgaWYgd2Ugd2VyZSB1cGRhdGluZywgdHJ5IHJlcmVhZGluZyB0aGUgd2hvbGUgdGhpbmcgYWdhaW4KKwlpZiB7JGFsbGN1cGRhdGV9IHsKKwkgICAgaW5jciBhbGxjb21taXRzIC0xCisJICAgIGRyb3BjYWNoZSAkZXJyCisJICAgIHJldHVybgorCX0KKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjtcCisJCWJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyB0YWcgaW5mb3JtYXRpb25cCisJICAgICAgICB3aWxsIGJlIGluY29tcGxldGUuIl1cbigkZXJyKSIKKwlzZXQgY2FjaGVvayAwCisgICAgfQorICAgIGlmIHtbaW5jciBhbGxjb21taXRzIC0xXSA9PSAwfSB7CisJbm90YnVzeSBhbGxjb21taXRzCisJaWYgeyRjYWNoZW9rfSB7CisJICAgIHJ1biBzYXZlY2FjaGUKKwl9CisgICAgfQorICAgIGRpc3BuZWFydGFncyAwCisgICAgcmV0dXJuIDAKK30KKworcHJvYyByZWNhbGNhcmMge2F9IHsKKyAgICBnbG9iYWwgYXJjdGFncyBhcmNoZWFkcyBhcmNpZHMgaWR0YWdzIGlkaGVhZHMKKworICAgIHNldCBhdCB7fQorICAgIHNldCBhaCB7fQorICAgIGZvcmVhY2ggaWQgW2xyYW5nZSAkYXJjaWRzKCRhKSAwIGVuZC0xXSB7CisJaWYge1tpbmZvIGV4aXN0cyBpZHRhZ3MoJGlkKV19IHsKKwkgICAgbGFwcGVuZCBhdCAkaWQKKwl9CisJaWYge1tpbmZvIGV4aXN0cyBpZGhlYWRzKCRpZCldfSB7CisJICAgIGxhcHBlbmQgYWggJGlkCisJfQorICAgIH0KKyAgICBzZXQgYXJjdGFncygkYSkgJGF0CisgICAgc2V0IGFyY2hlYWRzKCRhKSAkYWgKK30KKworcHJvYyBzcGxpdGFyYyB7cH0geworICAgIGdsb2JhbCBhcmNub3MgYXJjaWRzIG5leHRhcmMgYXJjdGFncyBhcmNoZWFkcyBpZHRhZ3MgaWRoZWFkcworICAgIGdsb2JhbCBhcmNzdGFydCBhcmNlbmQgYXJjb3V0IGFsbHBhcmVudHMgZ3Jvd2luZworCisgICAgc2V0IGEgJGFyY25vcygkcCkKKyAgICBpZiB7W2xsZW5ndGggJGFdICE9IDF9IHsKKwlwdXRzICJvb3BzIHNwbGl0YXJjIGNhbGxlZCBidXQgW2xsZW5ndGggJGFdIGFyY3MgYWxyZWFkeSIKKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGEgW2xpbmRleCAkYSAwXQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkYXJjaWRzKCRhKSAkcF0KKyAgICBpZiB7JGkgPCAwfSB7CisJcHV0cyAib29wcyBzcGxpdGFyYyAkcCBub3QgaW4gYXJjICRhIgorCXJldHVybgorICAgIH0KKyAgICBzZXQgbmEgW2luY3IgbmV4dGFyY10KKyAgICBpZiB7W2luZm8gZXhpc3RzIGFyY2VuZCgkYSldfSB7CisJc2V0IGFyY2VuZCgkbmEpICRhcmNlbmQoJGEpCisgICAgfSBlbHNlIHsKKwlzZXQgbCBbbGluZGV4ICRhbGxwYXJlbnRzKFtsaW5kZXggJGFyY2lkcygkYSkgZW5kXSkgMF0KKwlzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGFyY25vcygkbCkgJGFdCisJc2V0IGFyY25vcygkbCkgW2xyZXBsYWNlICRhcmNub3MoJGwpICRqICRqICRuYV0KKyAgICB9CisgICAgc2V0IHRhaWwgW2xyYW5nZSAkYXJjaWRzKCRhKSBbZXhwciB7JGkrMX1dIGVuZF0KKyAgICBzZXQgYXJjaWRzKCRhKSBbbHJhbmdlICRhcmNpZHMoJGEpIDAgJGldCisgICAgc2V0IGFyY2VuZCgkYSkgJHAKKyAgICBzZXQgYXJjc3RhcnQoJG5hKSAkcAorICAgIHNldCBhcmNvdXQoJHApICRuYQorICAgIHNldCBhcmNpZHMoJG5hKSAkdGFpbAorICAgIGlmIHtbaW5mbyBleGlzdHMgZ3Jvd2luZygkYSldfSB7CisJc2V0IGdyb3dpbmcoJG5hKSAxCisJdW5zZXQgZ3Jvd2luZygkYSkKKyAgICB9CisKKyAgICBmb3JlYWNoIGlkICR0YWlsIHsKKwlpZiB7W2xsZW5ndGggJGFyY25vcygkaWQpXSA9PSAxfSB7CisJICAgIHNldCBhcmNub3MoJGlkKSAkbmEKKwl9IGVsc2UgeworCSAgICBzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGFyY25vcygkaWQpICRhXQorCSAgICBzZXQgYXJjbm9zKCRpZCkgW2xyZXBsYWNlICRhcmNub3MoJGlkKSAkaiAkaiAkbmFdCisJfQorICAgIH0KKworICAgICMgcmVjb25zdHJ1Y3QgdGFncyBhbmQgaGVhZHMgbGlzdHMKKyAgICBpZiB7JGFyY3RhZ3MoJGEpIG5lIHt9IHx8ICRhcmNoZWFkcygkYSkgbmUge319IHsKKwlyZWNhbGNhcmMgJGEKKwlyZWNhbGNhcmMgJG5hCisgICAgfSBlbHNlIHsKKwlzZXQgYXJjdGFncygkbmEpIHt9CisJc2V0IGFyY2hlYWRzKCRuYSkge30KKyAgICB9Cit9CisKKyMgVXBkYXRlIHRoaW5ncyBmb3IgYSBuZXcgY29tbWl0IGFkZGVkIHRoYXQgaXMgYSBjaGlsZCBvZiBvbmUKKyMgZXhpc3RpbmcgY29tbWl0LiAgVXNlZCB3aGVuIGNoZXJyeS1waWNraW5nLgorcHJvYyBhZGRuZXdjaGlsZCB7aWQgcH0geworICAgIGdsb2JhbCBhbGxwYXJlbnRzIGFsbGNoaWxkcmVuIGlkdGFncyBuZXh0YXJjCisgICAgZ2xvYmFsIGFyY25vcyBhcmNpZHMgYXJjdGFncyBhcmNvdXQgYXJjZW5kIGFyY3N0YXJ0IGFyY2hlYWRzIGdyb3dpbmcKKyAgICBnbG9iYWwgc2VlZHMgYWxsY29tbWl0cworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYWxsY29tbWl0c10gfHwgIVtpbmZvIGV4aXN0cyBhcmNub3MoJHApXX0gcmV0dXJuCisgICAgc2V0IGFsbHBhcmVudHMoJGlkKSBbbGlzdCAkcF0KKyAgICBzZXQgYWxsY2hpbGRyZW4oJGlkKSB7fQorICAgIHNldCBhcmNub3MoJGlkKSB7fQorICAgIGxhcHBlbmQgc2VlZHMgJGlkCisgICAgbGFwcGVuZCBhbGxjaGlsZHJlbigkcCkgJGlkCisgICAgc2V0IGEgW2luY3IgbmV4dGFyY10KKyAgICBzZXQgYXJjc3RhcnQoJGEpICRpZAorICAgIHNldCBhcmNoZWFkcygkYSkge30KKyAgICBzZXQgYXJjdGFncygkYSkge30KKyAgICBzZXQgYXJjaWRzKCRhKSBbbGlzdCAkcF0KKyAgICBzZXQgYXJjZW5kKCRhKSAkcAorICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkcCldfSB7CisJc3BsaXRhcmMgJHAKKyAgICB9CisgICAgbGFwcGVuZCBhcmNub3MoJHApICRhCisgICAgc2V0IGFyY291dCgkaWQpIFtsaXN0ICRhXQorfQorCisjIFRoaXMgaW1wbGVtZW50cyBhIGNhY2hlIGZvciB0aGUgdG9wb2xvZ3kgaW5mb3JtYXRpb24uCisjIFRoZSBjYWNoZSBzYXZlcywgZm9yIGVhY2ggYXJjLCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgYXJjLAorIyB0aGUgaWRzIG9uIHRoZSBhcmMsIGFuZCB0aGUgb3V0Z29pbmcgYXJjcyBmcm9tIHRoZSBlbmQuCitwcm9jIHJlYWRjYWNoZSB7Zn0geworICAgIGdsb2JhbCBhcmNub3MgYXJjaWRzIGFyY291dCBhcmNzdGFydCBhcmNlbmQgYXJjdGFncyBhcmNoZWFkcyBuZXh0YXJjCisgICAgZ2xvYmFsIGlkdGFncyBpZGhlYWRzIGFsbHBhcmVudHMgY2FjaGVkYXJjcyBwb3NzaWJsZV9zZWVkcyBzZWVkcyBncm93aW5nCisgICAgZ2xvYmFsIGFsbGN3YWl0CisKKyAgICBzZXQgYSAkbmV4dGFyYworICAgIHNldCBsaW0gJGNhY2hlZGFyY3MKKyAgICBpZiB7JGxpbSAtICRhID4gNTAwfSB7CisJc2V0IGxpbSBbZXhwciB7JGEgKyA1MDB9XQorICAgIH0KKyAgICBpZiB7W2NhdGNoIHsKKwlpZiB7JGEgPT0gJGxpbX0geworCSAgICAjIGZpbmlzaCByZWFkaW5nIHRoZSBjYWNoZSBhbmQgc2V0dGluZyB1cCBhcmN0YWdzLCBldGMuCisJICAgIHNldCBsaW5lIFtnZXRzICRmXQorCSAgICBpZiB7JGxpbmUgbmUgIjEifSB7ZXJyb3IgImJhZCBmaW5hbCB2ZXJzaW9uIn0KKwkgICAgY2xvc2UgJGYKKwkgICAgZm9yZWFjaCBpZCBbYXJyYXkgbmFtZXMgaWR0YWdzXSB7CisJCWlmIHtbaW5mbyBleGlzdHMgYXJjbm9zKCRpZCldICYmIFtsbGVuZ3RoICRhcmNub3MoJGlkKV0gPT0gMSAmJgorCQkgICAgW2xsZW5ndGggJGFsbHBhcmVudHMoJGlkKV0gPT0gMX0geworCQkgICAgc2V0IGEgW2xpbmRleCAkYXJjbm9zKCRpZCkgMF0KKwkJICAgIGlmIHskYXJjdGFncygkYSkgZXEge319IHsKKwkJCXJlY2FsY2FyYyAkYQorCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgZm9yZWFjaCBpZCBbYXJyYXkgbmFtZXMgaWRoZWFkc10geworCQlpZiB7W2luZm8gZXhpc3RzIGFyY25vcygkaWQpXSAmJiBbbGxlbmd0aCAkYXJjbm9zKCRpZCldID09IDEgJiYKKwkJICAgIFtsbGVuZ3RoICRhbGxwYXJlbnRzKCRpZCldID09IDF9IHsKKwkJICAgIHNldCBhIFtsaW5kZXggJGFyY25vcygkaWQpIDBdCisJCSAgICBpZiB7JGFyY2hlYWRzKCRhKSBlcSB7fX0geworCQkJcmVjYWxjYXJjICRhCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBmb3JlYWNoIGlkIFtsc29ydCAtdW5pcXVlICRwb3NzaWJsZV9zZWVkc10geworCQlpZiB7JGFyY25vcygkaWQpIGVxIHt9fSB7CisJCSAgICBsYXBwZW5kIHNlZWRzICRpZAorCQl9CisJICAgIH0KKwkgICAgc2V0IGFsbGN3YWl0IDAKKwl9IGVsc2UgeworCSAgICB3aGlsZSB7W2luY3IgYV0gPD0gJGxpbX0geworCQlzZXQgbGluZSBbZ2V0cyAkZl0KKwkJaWYge1tsbGVuZ3RoICRsaW5lXSAhPSAzfSB7ZXJyb3IgImJhZCBsaW5lIn0KKwkJc2V0IHMgW2xpbmRleCAkbGluZSAwXQorCQlzZXQgYXJjc3RhcnQoJGEpICRzCisJCWxhcHBlbmQgYXJjb3V0KCRzKSAkYQorCQlpZiB7IVtpbmZvIGV4aXN0cyBhcmNub3MoJHMpXX0geworCQkgICAgbGFwcGVuZCBwb3NzaWJsZV9zZWVkcyAkcworCQkgICAgc2V0IGFyY25vcygkcykge30KKwkJfQorCQlzZXQgZSBbbGluZGV4ICRsaW5lIDFdCisJCWlmIHskZSBlcSB7fX0geworCQkgICAgc2V0IGdyb3dpbmcoJGEpIDEKKwkJfSBlbHNlIHsKKwkJICAgIHNldCBhcmNlbmQoJGEpICRlCisJCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBhcmNvdXQoJGUpXX0geworCQkJc2V0IGFyY291dCgkZSkge30KKwkJICAgIH0KKwkJfQorCQlzZXQgYXJjaWRzKCRhKSBbbGluZGV4ICRsaW5lIDJdCisJCWZvcmVhY2ggaWQgJGFyY2lkcygkYSkgeworCQkgICAgbGFwcGVuZCBhbGxwYXJlbnRzKCRzKSAkaWQKKwkJICAgIHNldCBzICRpZAorCQkgICAgbGFwcGVuZCBhcmNub3MoJGlkKSAkYQorCQl9CisJCWlmIHshW2luZm8gZXhpc3RzIGFsbHBhcmVudHMoJHMpXX0geworCQkgICAgc2V0IGFsbHBhcmVudHMoJHMpIHt9CisJCX0KKwkJc2V0IGFyY3RhZ3MoJGEpIHt9CisJCXNldCBhcmNoZWFkcygkYSkge30KKwkgICAgfQorCSAgICBzZXQgbmV4dGFyYyBbZXhwciB7JGEgLSAxfV0KKwl9CisgICAgfSBlcnJdfSB7CisJZHJvcGNhY2hlICRlcnIKKwlyZXR1cm4gMAorICAgIH0KKyAgICBpZiB7ISRhbGxjd2FpdH0geworCWdldGFsbGNvbW1pdHMKKyAgICB9CisgICAgcmV0dXJuICRhbGxjd2FpdAorfQorCitwcm9jIGdldGNhY2hlIHtmfSB7CisgICAgZ2xvYmFsIG5leHRhcmMgY2FjaGVkYXJjcyBwb3NzaWJsZV9zZWVkcworCisgICAgaWYge1tjYXRjaCB7CisJc2V0IGxpbmUgW2dldHMgJGZdCisJaWYge1tsbGVuZ3RoICRsaW5lXSAhPSAyIHx8IFtsaW5kZXggJGxpbmUgMF0gbmUgIjEifSB7ZXJyb3IgImJhZCB2ZXJzaW9uIn0KKwkjIG1ha2Ugc3VyZSBpdCdzIGFuIGludGVnZXIKKwlzZXQgY2FjaGVkYXJjcyBbZXhwciB7aW50KFtsaW5kZXggJGxpbmUgMV0pfV0KKwlpZiB7JGNhY2hlZGFyY3MgPCAwfSB7ZXJyb3IgImJhZCBudW1iZXIgb2YgYXJjcyJ9CisJc2V0IG5leHRhcmMgMAorCXNldCBwb3NzaWJsZV9zZWVkcyB7fQorCXJ1biByZWFkY2FjaGUgJGYKKyAgICB9IGVycl19IHsKKwlkcm9wY2FjaGUgJGVycgorICAgIH0KKyAgICByZXR1cm4gMAorfQorCitwcm9jIGRyb3BjYWNoZSB7ZXJyfSB7CisgICAgZ2xvYmFsIGFsbGN3YWl0IG5leHRhcmMgY2FjaGVkYXJjcyBzZWVkcworCisgICAgI3B1dHMgImRyb3BwaW5nIGNhY2hlICgkZXJyKSIKKyAgICBmb3JlYWNoIHYge2FyY25vcyBhcmNvdXQgYXJjaWRzIGFyY3N0YXJ0IGFyY2VuZCBncm93aW5nIFwKKwkJICAgYXJjdGFncyBhcmNoZWFkcyBhbGxwYXJlbnRzIGFsbGNoaWxkcmVufSB7CisJZ2xvYmFsICR2CisJY2F0Y2gge3Vuc2V0ICR2fQorICAgIH0KKyAgICBzZXQgYWxsY3dhaXQgMAorICAgIHNldCBuZXh0YXJjIDAKKyAgICBzZXQgY2FjaGVkYXJjcyAwCisgICAgc2V0IHNlZWRzIHt9CisgICAgZ2V0YWxsY29tbWl0cworfQorCitwcm9jIHdyaXRlY2FjaGUge2Z9IHsKKyAgICBnbG9iYWwgY2FjaGVhcmMgY2FjaGVkYXJjcyBhbGxjY2FjaGUKKyAgICBnbG9iYWwgYXJjc3RhcnQgYXJjZW5kIGFyY25vcyBhcmNpZHMgYXJjb3V0CisKKyAgICBzZXQgYSAkY2FjaGVhcmMKKyAgICBzZXQgbGltICRjYWNoZWRhcmNzCisgICAgaWYgeyRsaW0gLSAkYSA+IDEwMDB9IHsKKwlzZXQgbGltIFtleHByIHskYSArIDEwMDB9XQorICAgIH0KKyAgICBpZiB7W2NhdGNoIHsKKwl3aGlsZSB7W2luY3IgYV0gPD0gJGxpbX0geworCSAgICBpZiB7W2luZm8gZXhpc3RzIGFyY2VuZCgkYSldfSB7CisJCXB1dHMgJGYgW2xpc3QgJGFyY3N0YXJ0KCRhKSAkYXJjZW5kKCRhKSAkYXJjaWRzKCRhKV0KKwkgICAgfSBlbHNlIHsKKwkJcHV0cyAkZiBbbGlzdCAkYXJjc3RhcnQoJGEpIHt9ICRhcmNpZHMoJGEpXQorCSAgICB9CisJfQorICAgIH0gZXJyXX0geworCWNhdGNoIHtjbG9zZSAkZn0KKwljYXRjaCB7ZmlsZSBkZWxldGUgJGFsbGNjYWNoZX0KKwkjcHV0cyAid3JpdGluZyBjYWNoZSBmYWlsZWQgKCRlcnIpIgorCXJldHVybiAwCisgICAgfQorICAgIHNldCBjYWNoZWFyYyBbZXhwciB7JGEgLSAxfV0KKyAgICBpZiB7JGEgPiAkY2FjaGVkYXJjc30geworCXB1dHMgJGYgIjEiCisJY2xvc2UgJGYKKwlyZXR1cm4gMAorICAgIH0KKyAgICByZXR1cm4gMQorfQorCitwcm9jIHNhdmVjYWNoZSB7fSB7CisgICAgZ2xvYmFsIG5leHRhcmMgY2FjaGVkYXJjcyBjYWNoZWFyYyBhbGxjY2FjaGUKKworICAgIGlmIHskbmV4dGFyYyA9PSAkY2FjaGVkYXJjc30gcmV0dXJuCisgICAgc2V0IGNhY2hlYXJjIDAKKyAgICBzZXQgY2FjaGVkYXJjcyAkbmV4dGFyYworICAgIGNhdGNoIHsKKwlzZXQgZiBbb3BlbiAkYWxsY2NhY2hlIHddCisJcHV0cyAkZiBbbGlzdCAxICRjYWNoZWRhcmNzXQorCXJ1biB3cml0ZWNhY2hlICRmCisgICAgfQorfQorCisjIFJldHVybnMgMSBpZiBhIGlzIGFuIGFuY2VzdG9yIG9mIGIsIC0xIGlmIGIgaXMgYW4gYW5jZXN0b3Igb2YgYSwKKyMgb3IgMCBpZiBuZWl0aGVyIGlzIHRydWUuCitwcm9jIGFuY19vcl9kZXNjIHthIGJ9IHsKKyAgICBnbG9iYWwgYXJjb3V0IGFyY3N0YXJ0IGFyY2VuZCBhcmNub3MgY2FjaGVkX2lzYW5jCisKKyAgICBpZiB7JGFyY25vcygkYSkgZXEgJGFyY25vcygkYil9IHsKKwkjIEJvdGggYXJlIG9uIHRoZSBzYW1lIGFyYyhzKTsgZWl0aGVyIGJvdGggYXJlIHRoZSBzYW1lIEJNUCwKKwkjIG9yIGlmIG9uZSBpcyBub3QgYSBCTVAsIHRoZSBvdGhlciBpcyBhbHNvIG5vdCBhIEJNUCBvciBpcworCSMgdGhlIEJNUCBhdCBlbmQgb2YgdGhlIGFyYyAoYW5kIGl0IG9ubHkgaGFzIDEgaW5jb21pbmcgYXJjKS4KKwkjIE9yIGJvdGggY2FuIGJlIEJNUHMgd2l0aCBubyBpbmNvbWluZyBhcmNzLgorCWlmIHskYSBlcSAkYiB8fCAkYXJjbm9zKCRhKSBlcSB7fX0geworCSAgICByZXR1cm4gMAorCX0KKwkjIGFzc2VydCB7W2xsZW5ndGggJGFyY25vcygkYSldID09IDF9CisJc2V0IGFyYyBbbGluZGV4ICRhcmNub3MoJGEpIDBdCisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRhcmNpZHMoJGFyYykgJGFdCisJc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRhcmNpZHMoJGFyYykgJGJdCisJaWYgeyRpIDwgMCB8fCAkaSA+ICRqfSB7CisJICAgIHJldHVybiAxCisJfSBlbHNlIHsKKwkgICAgcmV0dXJuIC0xCisJfQorICAgIH0KKworICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkYSldfSB7CisJc2V0IGFyYyBbbGluZGV4ICRhcmNub3MoJGEpIDBdCisJaWYge1tpbmZvIGV4aXN0cyBhcmNlbmQoJGFyYyldfSB7CisJICAgIHNldCBhZW5kICRhcmNlbmQoJGFyYykKKwl9IGVsc2UgeworCSAgICBzZXQgYWVuZCB7fQorCX0KKwlzZXQgYSAkYXJjc3RhcnQoJGFyYykKKyAgICB9IGVsc2UgeworCXNldCBhZW5kICRhCisgICAgfQorICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkYildfSB7CisJc2V0IGFyYyBbbGluZGV4ICRhcmNub3MoJGIpIDBdCisJaWYge1tpbmZvIGV4aXN0cyBhcmNlbmQoJGFyYyldfSB7CisJICAgIHNldCBiZW5kICRhcmNlbmQoJGFyYykKKwl9IGVsc2UgeworCSAgICBzZXQgYmVuZCB7fQorCX0KKwlzZXQgYiAkYXJjc3RhcnQoJGFyYykKKyAgICB9IGVsc2UgeworCXNldCBiZW5kICRiCisgICAgfQorICAgIGlmIHskYSBlcSAkYmVuZH0geworCXJldHVybiAxCisgICAgfQorICAgIGlmIHskYiBlcSAkYWVuZH0geworCXJldHVybiAtMQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9pc2FuYygkYSwkYmVuZCldfSB7CisJaWYgeyRjYWNoZWRfaXNhbmMoJGEsJGJlbmQpfSB7CisJICAgIHJldHVybiAxCisJfQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9pc2FuYygkYiwkYWVuZCldfSB7CisJaWYgeyRjYWNoZWRfaXNhbmMoJGIsJGFlbmQpfSB7CisJICAgIHJldHVybiAtMQorCX0KKwlpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9pc2FuYygkYSwkYmVuZCldfSB7CisJICAgIHJldHVybiAwCisJfQorICAgIH0KKworICAgIHNldCB0b2RvIFtsaXN0ICRhICRiXQorICAgIHNldCBhbmMoJGEpIGEKKyAgICBzZXQgYW5jKCRiKSBiCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdG9kb119IHtpbmNyIGl9IHsKKwlzZXQgeCBbbGluZGV4ICR0b2RvICRpXQorCWlmIHskYW5jKCR4KSBlcSB7fX0geworCSAgICBjb250aW51ZQorCX0KKwlmb3JlYWNoIGFyYyAkYXJjbm9zKCR4KSB7CisJICAgIHNldCB4ZCAkYXJjc3RhcnQoJGFyYykKKwkgICAgaWYgeyR4ZCBlcSAkYmVuZH0geworCQlzZXQgY2FjaGVkX2lzYW5jKCRhLCRiZW5kKSAxCisJCXNldCBjYWNoZWRfaXNhbmMoJGIsJGFlbmQpIDAKKwkJcmV0dXJuIDEKKwkgICAgfSBlbHNlaWYgeyR4ZCBlcSAkYWVuZH0geworCQlzZXQgY2FjaGVkX2lzYW5jKCRiLCRhZW5kKSAxCisJCXNldCBjYWNoZWRfaXNhbmMoJGEsJGJlbmQpIDAKKwkJcmV0dXJuIC0xCisJICAgIH0KKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgYW5jKCR4ZCldfSB7CisJCXNldCBhbmMoJHhkKSAkYW5jKCR4KQorCQlsYXBwZW5kIHRvZG8gJHhkCisJICAgIH0gZWxzZWlmIHskYW5jKCR4ZCkgbmUgJGFuYygkeCl9IHsKKwkJc2V0IGFuYygkeGQpIHt9CisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCBjYWNoZWRfaXNhbmMoJGEsJGJlbmQpIDAKKyAgICBzZXQgY2FjaGVkX2lzYW5jKCRiLCRhZW5kKSAwCisgICAgcmV0dXJuIDAKK30KKworIyBUaGlzIGlkZW50aWZpZXMgd2hldGhlciAkZGVzYyBoYXMgYW4gYW5jZXN0b3IgdGhhdCBpcworIyBhIGdyb3dpbmcgdGlwIG9mIHRoZSBncmFwaCBhbmQgd2hpY2ggaXMgbm90IGFuIGFuY2VzdG9yIG9mICRhbmMKKyMgYW5kIHJldHVybnMgMCBpZiBzbyBhbmQgMSBpZiBub3QuCisjIElmIHdlIHN1YnNlcXVlbnRseSBkaXNjb3ZlciBhIHRhZyBvbiBzdWNoIGEgZ3Jvd2luZyB0aXAsIGFuZCB0aGF0CisjIHR1cm5zIG91dCB0byBiZSBhIGRlc2NlbmRlbnQgb2YgJGFuYyAod2hpY2ggaXQgY291bGQsIHNpbmNlIHdlCisjIGRvbid0IG5lY2Vzc2FyaWx5IHNlZSBjaGlsZHJlbiBiZWZvcmUgcGFyZW50cyksIHRoZW4gJGRlc2MKKyMgaXNuJ3QgYSBnb29kIGNob2ljZSB0byBkaXNwbGF5IGFzIGEgZGVzY2VuZGVudCB0YWcgb2YKKyMgJGFuYyAoc2luY2UgaXQgaXMgdGhlIGRlc2NlbmRlbnQgb2YgYW5vdGhlciB0YWcgd2hpY2ggaXMKKyMgYSBkZXNjZW5kZW50IG9mICRhbmMpLiAgU2ltaWxhcmx5LCAkYW5jIGlzbid0IGEgZ29vZCBjaG9pY2UgdG8KKyMgZGlzcGxheSBhcyBhIGFuY2VzdG9yIHRhZyBvZiAkZGVzYy4KKyMKK3Byb2MgaXNfY2VydGFpbiB7ZGVzYyBhbmN9IHsKKyAgICBnbG9iYWwgYXJjbm9zIGFyY291dCBhcmNzdGFydCBhcmNlbmQgZ3Jvd2luZyBwcm9ibGVtcworCisgICAgc2V0IGNlcnRhaW4ge30KKyAgICBpZiB7W2xsZW5ndGggJGFyY25vcygkYW5jKV0gPT0gMX0geworCSMgdGFncyBvbiB0aGUgc2FtZSBhcmMgYXJlIGNlcnRhaW4KKwlpZiB7JGFyY25vcygkZGVzYykgZXEgJGFyY25vcygkYW5jKX0geworCSAgICByZXR1cm4gMQorCX0KKwlpZiB7IVtpbmZvIGV4aXN0cyBhcmNvdXQoJGFuYyldfSB7CisJICAgICMgaWYgJGFuYyBpcyBwYXJ0d2F5IGFsb25nIGFuIGFyYywgdXNlIHRoZSBzdGFydCBvZiB0aGUgYXJjIGluc3RlYWQKKwkgICAgc2V0IGEgW2xpbmRleCAkYXJjbm9zKCRhbmMpIDBdCisJICAgIHNldCBhbmMgJGFyY3N0YXJ0KCRhKQorCX0KKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICRhcmNub3MoJGRlc2MpXSA+IDEgfHwgW2luZm8gZXhpc3RzIGFyY291dCgkZGVzYyldfSB7CisJc2V0IHggJGRlc2MKKyAgICB9IGVsc2UgeworCXNldCBhIFtsaW5kZXggJGFyY25vcygkZGVzYykgMF0KKwlzZXQgeCAkYXJjZW5kKCRhKQorICAgIH0KKyAgICBpZiB7JHggPT0gJGFuY30geworCXJldHVybiAxCisgICAgfQorICAgIHNldCBhbmNsaXN0IFtsaXN0ICR4XQorICAgIHNldCBkbCgkeCkgMQorICAgIHNldCBubmggMQorICAgIHNldCBuZ3Jvd2FuYyAwCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkYW5jbGlzdF0gJiYgKCRubmggPiAwIHx8ICRuZ3Jvd2FuYyA+IDApfSB7aW5jciBpfSB7CisJc2V0IHggW2xpbmRleCAkYW5jbGlzdCAkaV0KKwlpZiB7JGRsKCR4KX0geworCSAgICBpbmNyIG5uaCAtMQorCX0KKwlzZXQgZG9uZSgkeCkgMQorCWZvcmVhY2ggYSAkYXJjb3V0KCR4KSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgZ3Jvd2luZygkYSldfSB7CisJCWlmIHshW2luZm8gZXhpc3RzIGdyb3dhbmMoJHgpXSAmJiAkZGwoJHgpfSB7CisJCSAgICBzZXQgZ3Jvd2FuYygkeCkgMQorCQkgICAgaW5jciBuZ3Jvd2FuYworCQl9CisJICAgIH0gZWxzZSB7CisJCXNldCB5ICRhcmNlbmQoJGEpCisJCWlmIHtbaW5mbyBleGlzdHMgZGwoJHkpXX0geworCQkgICAgaWYgeyRkbCgkeSl9IHsKKwkJCWlmIHshJGRsKCR4KX0geworCQkJICAgIHNldCBkbCgkeSkgMAorCQkJICAgIGlmIHshW2luZm8gZXhpc3RzIGRvbmUoJHkpXX0geworCQkJCWluY3Igbm5oIC0xCisJCQkgICAgfQorCQkJICAgIGlmIHtbaW5mbyBleGlzdHMgZ3Jvd2FuYygkeCldfSB7CisJCQkJaW5jciBuZ3Jvd2FuYyAtMQorCQkJICAgIH0KKwkJCSAgICBzZXQgeGwgW2xpc3QgJHldCisJCQkgICAgZm9yIHtzZXQgayAwfSB7JGsgPCBbbGxlbmd0aCAkeGxdfSB7aW5jciBrfSB7CisJCQkJc2V0IHogW2xpbmRleCAkeGwgJGtdCisJCQkJZm9yZWFjaCBjICRhcmNvdXQoJHopIHsKKwkJCQkgICAgaWYge1tpbmZvIGV4aXN0cyBhcmNlbmQoJGMpXX0geworCQkJCQlzZXQgdiAkYXJjZW5kKCRjKQorCQkJCQlpZiB7W2luZm8gZXhpc3RzIGRsKCR2KV0gJiYgJGRsKCR2KX0geworCQkJCQkgICAgc2V0IGRsKCR2KSAwCisJCQkJCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBkb25lKCR2KV19IHsKKwkJCQkJCWluY3Igbm5oIC0xCisJCQkJCSAgICB9CisJCQkJCSAgICBpZiB7W2luZm8gZXhpc3RzIGdyb3dhbmMoJHYpXX0geworCQkJCQkJaW5jciBuZ3Jvd2FuYyAtMQorCQkJCQkgICAgfQorCQkJCQkgICAgbGFwcGVuZCB4bCAkdgorCQkJCQl9CisJCQkJICAgIH0KKwkJCQl9CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9IGVsc2VpZiB7JHkgZXEgJGFuYyB8fCAhJGRsKCR4KX0geworCQkgICAgc2V0IGRsKCR5KSAwCisJCSAgICBsYXBwZW5kIGFuY2xpc3QgJHkKKwkJfSBlbHNlIHsKKwkJICAgIHNldCBkbCgkeSkgMQorCQkgICAgbGFwcGVuZCBhbmNsaXN0ICR5CisJCSAgICBpbmNyIG5uaAorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIGZvcmVhY2ggeCBbYXJyYXkgbmFtZXMgZ3Jvd2FuY10geworCWlmIHskZGwoJHgpfSB7CisJICAgIHJldHVybiAwCisJfQorCXJldHVybiAwCisgICAgfQorICAgIHJldHVybiAxCit9CisKK3Byb2MgdmFsaWRhdGVfYXJjdGFncyB7YX0geworICAgIGdsb2JhbCBhcmN0YWdzIGlkdGFncworCisgICAgc2V0IGkgLTEKKyAgICBzZXQgbmEgJGFyY3RhZ3MoJGEpCisgICAgZm9yZWFjaCBpZCAkYXJjdGFncygkYSkgeworCWluY3IgaQorCWlmIHshW2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCSAgICBzZXQgbmEgW2xyZXBsYWNlICRuYSAkaSAkaV0KKwkgICAgaW5jciBpIC0xCisJfQorICAgIH0KKyAgICBzZXQgYXJjdGFncygkYSkgJG5hCit9CisKK3Byb2MgdmFsaWRhdGVfYXJjaGVhZHMge2F9IHsKKyAgICBnbG9iYWwgYXJjaGVhZHMgaWRoZWFkcworCisgICAgc2V0IGkgLTEKKyAgICBzZXQgbmEgJGFyY2hlYWRzKCRhKQorICAgIGZvcmVhY2ggaWQgJGFyY2hlYWRzKCRhKSB7CisJaW5jciBpCisJaWYgeyFbaW5mbyBleGlzdHMgaWRoZWFkcygkaWQpXX0geworCSAgICBzZXQgbmEgW2xyZXBsYWNlICRuYSAkaSAkaV0KKwkgICAgaW5jciBpIC0xCisJfQorICAgIH0KKyAgICBzZXQgYXJjaGVhZHMoJGEpICRuYQorfQorCisjIFJldHVybiB0aGUgbGlzdCBvZiBJRHMgdGhhdCBoYXZlIHRhZ3MgdGhhdCBhcmUgZGVzY2VuZGVudHMgb2YgaWQsCisjIGlnbm9yaW5nIElEcyB0aGF0IGFyZSBkZXNjZW5kZW50cyBvZiBJRHMgYWxyZWFkeSByZXBvcnRlZC4KK3Byb2MgZGVzY3RhZ3Mge2lkfSB7CisgICAgZ2xvYmFsIGFyY25vcyBhcmNzdGFydCBhcmNpZHMgYXJjdGFncyBpZHRhZ3MgYWxscGFyZW50cworICAgIGdsb2JhbCBncm93aW5nIGNhY2hlZF9kdGFncworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYWxscGFyZW50cygkaWQpXX0geworCXJldHVybiB7fQorICAgIH0KKyAgICBzZXQgdDEgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBhcmdpZCAkaWQKKyAgICBpZiB7W2xsZW5ndGggJGFyY25vcygkaWQpXSA9PSAxICYmIFtsbGVuZ3RoICRhbGxwYXJlbnRzKCRpZCldID09IDF9IHsKKwkjIHBhcnQtd2F5IGFsb25nIGFuIGFyYzsgY2hlY2sgdGhhdCBhcmMgZmlyc3QKKwlzZXQgYSBbbGluZGV4ICRhcmNub3MoJGlkKSAwXQorCWlmIHskYXJjdGFncygkYSkgbmUge319IHsKKwkgICAgdmFsaWRhdGVfYXJjdGFncyAkYQorCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJGlkXQorCSAgICBzZXQgdGlkIHt9CisJICAgIGZvcmVhY2ggdCAkYXJjdGFncygkYSkgeworCQlzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJHRdCisJCWlmIHskaiA+PSAkaX0gYnJlYWsKKwkJc2V0IHRpZCAkdAorCSAgICB9CisJICAgIGlmIHskdGlkIG5lIHt9fSB7CisJCXJldHVybiAkdGlkCisJICAgIH0KKwl9CisJc2V0IGlkICRhcmNzdGFydCgkYSkKKwlpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCSAgICByZXR1cm4gJGlkCisJfQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9kdGFncygkaWQpXX0geworCXJldHVybiAkY2FjaGVkX2R0YWdzKCRpZCkKKyAgICB9CisKKyAgICBzZXQgb3JpZ2lkICRpZAorICAgIHNldCB0b2RvIFtsaXN0ICRpZF0KKyAgICBzZXQgcXVldWVkKCRpZCkgMQorICAgIHNldCBuYyAxCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdG9kb10gJiYgJG5jID4gMH0ge2luY3IgaX0geworCXNldCBpZCBbbGluZGV4ICR0b2RvICRpXQorCXNldCBkb25lKCRpZCkgMQorCXNldCB0YSBbaW5mbyBleGlzdHMgaGFzdGFnZ2VkYW5jZXN0b3IoJGlkKV0KKwlpZiB7ISR0YX0geworCSAgICBpbmNyIG5jIC0xCisJfQorCSMgaWdub3JlIHRhZ3Mgb24gc3RhcnRpbmcgbm9kZQorCWlmIHshJHRhICYmICRpID4gMH0geworCSAgICBpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCQlzZXQgdGFnbG9jKCRpZCkgJGlkCisJCXNldCB0YSAxCisJICAgIH0gZWxzZWlmIHtbaW5mbyBleGlzdHMgY2FjaGVkX2R0YWdzKCRpZCldfSB7CisJCXNldCB0YWdsb2MoJGlkKSAkY2FjaGVkX2R0YWdzKCRpZCkKKwkJc2V0IHRhIDEKKwkgICAgfQorCX0KKwlmb3JlYWNoIGEgJGFyY25vcygkaWQpIHsKKwkgICAgc2V0IGQgJGFyY3N0YXJ0KCRhKQorCSAgICBpZiB7ISR0YSAmJiAkYXJjdGFncygkYSkgbmUge319IHsKKwkJdmFsaWRhdGVfYXJjdGFncyAkYQorCQlpZiB7JGFyY3RhZ3MoJGEpIG5lIHt9fSB7CisJCSAgICBsYXBwZW5kIHRhZ2xvYygkaWQpIFtsaW5kZXggJGFyY3RhZ3MoJGEpIGVuZF0KKwkJfQorCSAgICB9CisJICAgIGlmIHskdGEgfHwgJGFyY3RhZ3MoJGEpIG5lIHt9fSB7CisJCXNldCB0b21hcmsgW2xpc3QgJGRdCisJCWZvciB7c2V0IGogMH0geyRqIDwgW2xsZW5ndGggJHRvbWFya119IHtpbmNyIGp9IHsKKwkJICAgIHNldCBkZCBbbGluZGV4ICR0b21hcmsgJGpdCisJCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBoYXN0YWdnZWRhbmNlc3RvcigkZGQpXX0geworCQkJaWYge1tpbmZvIGV4aXN0cyBkb25lKCRkZCldfSB7CisJCQkgICAgZm9yZWFjaCBiICRhcmNub3MoJGRkKSB7CisJCQkJbGFwcGVuZCB0b21hcmsgJGFyY3N0YXJ0KCRiKQorCQkJICAgIH0KKwkJCSAgICBpZiB7W2luZm8gZXhpc3RzIHRhZ2xvYygkZGQpXX0geworCQkJCXVuc2V0IHRhZ2xvYygkZGQpCisJCQkgICAgfQorCQkJfSBlbHNlaWYge1tpbmZvIGV4aXN0cyBxdWV1ZWQoJGRkKV19IHsKKwkJCSAgICBpbmNyIG5jIC0xCisJCQl9CisJCQlzZXQgaGFzdGFnZ2VkYW5jZXN0b3IoJGRkKSAxCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBxdWV1ZWQoJGQpXX0geworCQlsYXBwZW5kIHRvZG8gJGQKKwkJc2V0IHF1ZXVlZCgkZCkgMQorCQlpZiB7IVtpbmZvIGV4aXN0cyBoYXN0YWdnZWRhbmNlc3RvcigkZCldfSB7CisJCSAgICBpbmNyIG5jCisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IHRhZ3Mge30KKyAgICBmb3JlYWNoIGlkIFthcnJheSBuYW1lcyB0YWdsb2NdIHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBoYXN0YWdnZWRhbmNlc3RvcigkaWQpXX0geworCSAgICBmb3JlYWNoIHQgJHRhZ2xvYygkaWQpIHsKKwkJaWYge1tsc2VhcmNoIC1leGFjdCAkdGFncyAkdF0gPCAwfSB7CisJCSAgICBsYXBwZW5kIHRhZ3MgJHQKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgdDIgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBsb29waXggJGkKKworICAgICMgcmVtb3ZlIHRhZ3MgdGhhdCBhcmUgZGVzY2VuZGVudHMgb2Ygb3RoZXIgdGFncworICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHRhZ3NdfSB7aW5jciBpfSB7CisJc2V0IGEgW2xpbmRleCAkdGFncyAkaV0KKwlmb3Ige3NldCBqIDB9IHskaiA8ICRpfSB7aW5jciBqfSB7CisJICAgIHNldCBiIFtsaW5kZXggJHRhZ3MgJGpdCisJICAgIHNldCByIFthbmNfb3JfZGVzYyAkYSAkYl0KKwkgICAgaWYgeyRyID09IDF9IHsKKwkJc2V0IHRhZ3MgW2xyZXBsYWNlICR0YWdzICRqICRqXQorCQlpbmNyIGogLTEKKwkJaW5jciBpIC0xCisJICAgIH0gZWxzZWlmIHskciA9PSAtMX0geworCQlzZXQgdGFncyBbbHJlcGxhY2UgJHRhZ3MgJGkgJGldCisJCWluY3IgaSAtMQorCQlicmVhaworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIHtbYXJyYXkgbmFtZXMgZ3Jvd2luZ10gbmUge319IHsKKwkjIGdyYXBoIGlzbid0IGZpbmlzaGVkLCBuZWVkIHRvIGNoZWNrIGlmIGFueSB0YWcgY291bGQgZ2V0CisJIyBlY2xpcHNlZCBieSBhbm90aGVyIHRhZyBjb21pbmcgbGF0ZXIuICBTaW1wbHkgaWdub3JlIGFueQorCSMgdGFncyB0aGF0IGNvdWxkIGxhdGVyIGdldCBlY2xpcHNlZC4KKwlzZXQgY3RhZ3Mge30KKwlmb3JlYWNoIHQgJHRhZ3MgeworCSAgICBpZiB7W2lzX2NlcnRhaW4gJHQgJG9yaWdpZF19IHsKKwkJbGFwcGVuZCBjdGFncyAkdAorCSAgICB9CisJfQorCWlmIHskdGFncyBlcSAkY3RhZ3N9IHsKKwkgICAgc2V0IGNhY2hlZF9kdGFncygkb3JpZ2lkKSAkdGFncworCX0gZWxzZSB7CisJICAgIHNldCB0YWdzICRjdGFncworCX0KKyAgICB9IGVsc2UgeworCXNldCBjYWNoZWRfZHRhZ3MoJG9yaWdpZCkgJHRhZ3MKKyAgICB9CisgICAgc2V0IHQzIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBpZiB7MCAmJiAkdDMgLSAkdDEgPj0gMTAwfSB7CisJcHV0cyAiaXRlcmF0aW5nIGRlc2NlbmRlbnRzICgkbG9vcGl4L1tsbGVuZ3RoICR0b2RvXSBub2RlcykgdG9va1wKKyAgICAJICAgIFtleHByIHskdDItJHQxfV0rW2V4cHIgeyR0My0kdDJ9XW1zLCAkbmMgY2FuZGlkYXRlcyBsZWZ0IgorICAgIH0KKyAgICByZXR1cm4gJHRhZ3MKK30KKworcHJvYyBhbmN0YWdzIHtpZH0geworICAgIGdsb2JhbCBhcmNub3MgYXJjaWRzIGFyY291dCBhcmNlbmQgYXJjdGFncyBpZHRhZ3MgYWxscGFyZW50cworICAgIGdsb2JhbCBncm93aW5nIGNhY2hlZF9hdGFncworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYWxscGFyZW50cygkaWQpXX0geworCXJldHVybiB7fQorICAgIH0KKyAgICBzZXQgdDEgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBhcmdpZCAkaWQKKyAgICBpZiB7W2xsZW5ndGggJGFyY25vcygkaWQpXSA9PSAxICYmIFtsbGVuZ3RoICRhbGxwYXJlbnRzKCRpZCldID09IDF9IHsKKwkjIHBhcnQtd2F5IGFsb25nIGFuIGFyYzsgY2hlY2sgdGhhdCBhcmMgZmlyc3QKKwlzZXQgYSBbbGluZGV4ICRhcmNub3MoJGlkKSAwXQorCWlmIHskYXJjdGFncygkYSkgbmUge319IHsKKwkgICAgdmFsaWRhdGVfYXJjdGFncyAkYQorCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJGlkXQorCSAgICBmb3JlYWNoIHQgJGFyY3RhZ3MoJGEpIHsKKwkJc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRhcmNpZHMoJGEpICR0XQorCQlpZiB7JGogPiAkaX0geworCQkgICAgcmV0dXJuICR0CisJCX0KKwkgICAgfQorCX0KKwlpZiB7IVtpbmZvIGV4aXN0cyBhcmNlbmQoJGEpXX0geworCSAgICByZXR1cm4ge30KKwl9CisJc2V0IGlkICRhcmNlbmQoJGEpCisJaWYge1tpbmZvIGV4aXN0cyBpZHRhZ3MoJGlkKV19IHsKKwkgICAgcmV0dXJuICRpZAorCX0KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBjYWNoZWRfYXRhZ3MoJGlkKV19IHsKKwlyZXR1cm4gJGNhY2hlZF9hdGFncygkaWQpCisgICAgfQorCisgICAgc2V0IG9yaWdpZCAkaWQKKyAgICBzZXQgdG9kbyBbbGlzdCAkaWRdCisgICAgc2V0IHF1ZXVlZCgkaWQpIDEKKyAgICBzZXQgdGFnbGlzdCB7fQorICAgIHNldCBuYyAxCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdG9kb10gJiYgJG5jID4gMH0ge2luY3IgaX0geworCXNldCBpZCBbbGluZGV4ICR0b2RvICRpXQorCXNldCBkb25lKCRpZCkgMQorCXNldCB0ZCBbaW5mbyBleGlzdHMgaGFzdGFnZ2VkZGVzY2VuZGVudCgkaWQpXQorCWlmIHshJHRkfSB7CisJICAgIGluY3IgbmMgLTEKKwl9CisJIyBpZ25vcmUgdGFncyBvbiBzdGFydGluZyBub2RlCisJaWYgeyEkdGQgJiYgJGkgPiAwfSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldfSB7CisJCXNldCB0YWdsb2MoJGlkKSAkaWQKKwkJc2V0IHRkIDEKKwkgICAgfSBlbHNlaWYge1tpbmZvIGV4aXN0cyBjYWNoZWRfYXRhZ3MoJGlkKV19IHsKKwkJc2V0IHRhZ2xvYygkaWQpICRjYWNoZWRfYXRhZ3MoJGlkKQorCQlzZXQgdGQgMQorCSAgICB9CisJfQorCWZvcmVhY2ggYSAkYXJjb3V0KCRpZCkgeworCSAgICBpZiB7ISR0ZCAmJiAkYXJjdGFncygkYSkgbmUge319IHsKKwkJdmFsaWRhdGVfYXJjdGFncyAkYQorCQlpZiB7JGFyY3RhZ3MoJGEpIG5lIHt9fSB7CisJCSAgICBsYXBwZW5kIHRhZ2xvYygkaWQpIFtsaW5kZXggJGFyY3RhZ3MoJGEpIDBdCisJCX0KKwkgICAgfQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBhcmNlbmQoJGEpXX0gY29udGludWUKKwkgICAgc2V0IGQgJGFyY2VuZCgkYSkKKwkgICAgaWYgeyR0ZCB8fCAkYXJjdGFncygkYSkgbmUge319IHsKKwkJc2V0IHRvbWFyayBbbGlzdCAkZF0KKwkJZm9yIHtzZXQgaiAwfSB7JGogPCBbbGxlbmd0aCAkdG9tYXJrXX0ge2luY3Igan0geworCQkgICAgc2V0IGRkIFtsaW5kZXggJHRvbWFyayAkal0KKwkJICAgIGlmIHshW2luZm8gZXhpc3RzIGhhc3RhZ2dlZGRlc2NlbmRlbnQoJGRkKV19IHsKKwkJCWlmIHtbaW5mbyBleGlzdHMgZG9uZSgkZGQpXX0geworCQkJICAgIGZvcmVhY2ggYiAkYXJjb3V0KCRkZCkgeworCQkJCWlmIHtbaW5mbyBleGlzdHMgYXJjZW5kKCRiKV19IHsKKwkJCQkgICAgbGFwcGVuZCB0b21hcmsgJGFyY2VuZCgkYikKKwkJCQl9CisJCQkgICAgfQorCQkJICAgIGlmIHtbaW5mbyBleGlzdHMgdGFnbG9jKCRkZCldfSB7CisJCQkJdW5zZXQgdGFnbG9jKCRkZCkKKwkJCSAgICB9CisJCQl9IGVsc2VpZiB7W2luZm8gZXhpc3RzIHF1ZXVlZCgkZGQpXX0geworCQkJICAgIGluY3IgbmMgLTEKKwkJCX0KKwkJCXNldCBoYXN0YWdnZWRkZXNjZW5kZW50KCRkZCkgMQorCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgcXVldWVkKCRkKV19IHsKKwkJbGFwcGVuZCB0b2RvICRkCisJCXNldCBxdWV1ZWQoJGQpIDEKKwkJaWYgeyFbaW5mbyBleGlzdHMgaGFzdGFnZ2VkZGVzY2VuZGVudCgkZCldfSB7CisJCSAgICBpbmNyIG5jCisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IHQyIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBzZXQgbG9vcGl4ICRpCisgICAgc2V0IHRhZ3Mge30KKyAgICBmb3JlYWNoIGlkIFthcnJheSBuYW1lcyB0YWdsb2NdIHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBoYXN0YWdnZWRkZXNjZW5kZW50KCRpZCldfSB7CisJICAgIGZvcmVhY2ggdCAkdGFnbG9jKCRpZCkgeworCQlpZiB7W2xzZWFyY2ggLWV4YWN0ICR0YWdzICR0XSA8IDB9IHsKKwkJICAgIGxhcHBlbmQgdGFncyAkdAorCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgIyByZW1vdmUgdGFncyB0aGF0IGFyZSBhbmNlc3RvcnMgb2Ygb3RoZXIgdGFncworICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHRhZ3NdfSB7aW5jciBpfSB7CisJc2V0IGEgW2xpbmRleCAkdGFncyAkaV0KKwlmb3Ige3NldCBqIDB9IHskaiA8ICRpfSB7aW5jciBqfSB7CisJICAgIHNldCBiIFtsaW5kZXggJHRhZ3MgJGpdCisJICAgIHNldCByIFthbmNfb3JfZGVzYyAkYSAkYl0KKwkgICAgaWYgeyRyID09IC0xfSB7CisJCXNldCB0YWdzIFtscmVwbGFjZSAkdGFncyAkaiAkal0KKwkJaW5jciBqIC0xCisJCWluY3IgaSAtMQorCSAgICB9IGVsc2VpZiB7JHIgPT0gMX0geworCQlzZXQgdGFncyBbbHJlcGxhY2UgJHRhZ3MgJGkgJGldCisJCWluY3IgaSAtMQorCQlicmVhaworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIHtbYXJyYXkgbmFtZXMgZ3Jvd2luZ10gbmUge319IHsKKwkjIGdyYXBoIGlzbid0IGZpbmlzaGVkLCBuZWVkIHRvIGNoZWNrIGlmIGFueSB0YWcgY291bGQgZ2V0CisJIyBlY2xpcHNlZCBieSBhbm90aGVyIHRhZyBjb21pbmcgbGF0ZXIuICBTaW1wbHkgaWdub3JlIGFueQorCSMgdGFncyB0aGF0IGNvdWxkIGxhdGVyIGdldCBlY2xpcHNlZC4KKwlzZXQgY3RhZ3Mge30KKwlmb3JlYWNoIHQgJHRhZ3MgeworCSAgICBpZiB7W2lzX2NlcnRhaW4gJG9yaWdpZCAkdF19IHsKKwkJbGFwcGVuZCBjdGFncyAkdAorCSAgICB9CisJfQorCWlmIHskdGFncyBlcSAkY3RhZ3N9IHsKKwkgICAgc2V0IGNhY2hlZF9hdGFncygkb3JpZ2lkKSAkdGFncworCX0gZWxzZSB7CisJICAgIHNldCB0YWdzICRjdGFncworCX0KKyAgICB9IGVsc2UgeworCXNldCBjYWNoZWRfYXRhZ3MoJG9yaWdpZCkgJHRhZ3MKKyAgICB9CisgICAgc2V0IHQzIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBpZiB7MCAmJiAkdDMgLSAkdDEgPj0gMTAwfSB7CisJcHV0cyAiaXRlcmF0aW5nIGFuY2VzdG9ycyAoJGxvb3BpeC9bbGxlbmd0aCAkdG9kb10gbm9kZXMpIHRvb2tcCisgICAgCSAgICBbZXhwciB7JHQyLSR0MX1dK1tleHByIHskdDMtJHQyfV1tcywgJG5jIGNhbmRpZGF0ZXMgbGVmdCIKKyAgICB9CisgICAgcmV0dXJuICR0YWdzCit9CisKKyMgUmV0dXJuIHRoZSBsaXN0IG9mIElEcyB0aGF0IGhhdmUgaGVhZHMgdGhhdCBhcmUgZGVzY2VuZGVudHMgb2YgaWQsCisjIGluY2x1ZGluZyBpZCBpdHNlbGYgaWYgaXQgaGFzIGEgaGVhZC4KK3Byb2MgZGVzY2hlYWRzIHtpZH0geworICAgIGdsb2JhbCBhcmNub3MgYXJjc3RhcnQgYXJjaWRzIGFyY2hlYWRzIGlkaGVhZHMgY2FjaGVkX2RoZWFkcworICAgIGdsb2JhbCBhbGxwYXJlbnRzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbGxwYXJlbnRzKCRpZCldfSB7CisJcmV0dXJuIHt9CisgICAgfQorICAgIHNldCBhcmV0IHt9CisgICAgaWYge1tsbGVuZ3RoICRhcmNub3MoJGlkKV0gPT0gMSAmJiBbbGxlbmd0aCAkYWxscGFyZW50cygkaWQpXSA9PSAxfSB7CisJIyBwYXJ0LXdheSBhbG9uZyBhbiBhcmM7IGNoZWNrIGl0IGZpcnN0CisJc2V0IGEgW2xpbmRleCAkYXJjbm9zKCRpZCkgMF0KKwlpZiB7JGFyY2hlYWRzKCRhKSBuZSB7fX0geworCSAgICB2YWxpZGF0ZV9hcmNoZWFkcyAkYQorCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJGlkXQorCSAgICBmb3JlYWNoIHQgJGFyY2hlYWRzKCRhKSB7CisJCXNldCBqIFtsc2VhcmNoIC1leGFjdCAkYXJjaWRzKCRhKSAkdF0KKwkJaWYgeyRqID4gJGl9IGJyZWFrCisJCWxhcHBlbmQgYXJldCAkdAorCSAgICB9CisJfQorCXNldCBpZCAkYXJjc3RhcnQoJGEpCisgICAgfQorICAgIHNldCBvcmlnaWQgJGlkCisgICAgc2V0IHRvZG8gW2xpc3QgJGlkXQorICAgIHNldCBzZWVuKCRpZCkgMQorICAgIHNldCByZXQge30KKyAgICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICR0b2RvXX0ge2luY3IgaX0geworCXNldCBpZCBbbGluZGV4ICR0b2RvICRpXQorCWlmIHtbaW5mbyBleGlzdHMgY2FjaGVkX2RoZWFkcygkaWQpXX0geworCSAgICBzZXQgcmV0IFtjb25jYXQgJHJldCAkY2FjaGVkX2RoZWFkcygkaWQpXQorCX0gZWxzZSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgaWRoZWFkcygkaWQpXX0geworCQlsYXBwZW5kIHJldCAkaWQKKwkgICAgfQorCSAgICBmb3JlYWNoIGEgJGFyY25vcygkaWQpIHsKKwkJaWYgeyRhcmNoZWFkcygkYSkgbmUge319IHsKKwkJICAgIHZhbGlkYXRlX2FyY2hlYWRzICRhCisJCSAgICBpZiB7JGFyY2hlYWRzKCRhKSBuZSB7fX0geworCQkJc2V0IHJldCBbY29uY2F0ICRyZXQgJGFyY2hlYWRzKCRhKV0KKwkJICAgIH0KKwkJfQorCQlzZXQgZCAkYXJjc3RhcnQoJGEpCisJCWlmIHshW2luZm8gZXhpc3RzIHNlZW4oJGQpXX0geworCQkgICAgbGFwcGVuZCB0b2RvICRkCisJCSAgICBzZXQgc2VlbigkZCkgMQorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCByZXQgW2xzb3J0IC11bmlxdWUgJHJldF0KKyAgICBzZXQgY2FjaGVkX2RoZWFkcygkb3JpZ2lkKSAkcmV0CisgICAgcmV0dXJuIFtjb25jYXQgJHJldCAkYXJldF0KK30KKworcHJvYyBhZGRlZHRhZyB7aWR9IHsKKyAgICBnbG9iYWwgYXJjbm9zIGFyY291dCBjYWNoZWRfZHRhZ3MgY2FjaGVkX2F0YWdzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhcmNub3MoJGlkKV19IHJldHVybgorICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkaWQpXX0geworCXJlY2FsY2FyYyBbbGluZGV4ICRhcmNub3MoJGlkKSAwXQorICAgIH0KKyAgICBjYXRjaCB7dW5zZXQgY2FjaGVkX2R0YWdzfQorICAgIGNhdGNoIHt1bnNldCBjYWNoZWRfYXRhZ3N9Cit9CisKK3Byb2MgYWRkZWRoZWFkIHtoaWQgaGVhZH0geworICAgIGdsb2JhbCBhcmNub3MgYXJjb3V0IGNhY2hlZF9kaGVhZHMKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY25vcygkaGlkKV19IHJldHVybgorICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkaGlkKV19IHsKKwlyZWNhbGNhcmMgW2xpbmRleCAkYXJjbm9zKCRoaWQpIDBdCisgICAgfQorICAgIGNhdGNoIHt1bnNldCBjYWNoZWRfZGhlYWRzfQorfQorCitwcm9jIHJlbW92ZWRoZWFkIHtoaWQgaGVhZH0geworICAgIGdsb2JhbCBjYWNoZWRfZGhlYWRzCisKKyAgICBjYXRjaCB7dW5zZXQgY2FjaGVkX2RoZWFkc30KK30KKworcHJvYyBtb3ZlZGhlYWQge2hpZCBoZWFkfSB7CisgICAgZ2xvYmFsIGFyY25vcyBhcmNvdXQgY2FjaGVkX2RoZWFkcworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjbm9zKCRoaWQpXX0gcmV0dXJuCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjb3V0KCRoaWQpXX0geworCXJlY2FsY2FyYyBbbGluZGV4ICRhcmNub3MoJGhpZCkgMF0KKyAgICB9CisgICAgY2F0Y2gge3Vuc2V0IGNhY2hlZF9kaGVhZHN9Cit9CisKK3Byb2MgY2hhbmdlZHJlZnMge30geworICAgIGdsb2JhbCBjYWNoZWRfZGhlYWRzIGNhY2hlZF9kdGFncyBjYWNoZWRfYXRhZ3MgY2FjaGVkX3RhZ2NvbnRlbnQKKyAgICBnbG9iYWwgYXJjdGFncyBhcmNoZWFkcyBhcmNub3MgYXJjb3V0IGlkaGVhZHMgaWR0YWdzCisKKyAgICBmb3JlYWNoIGlkIFtjb25jYXQgW2FycmF5IG5hbWVzIGlkaGVhZHNdIFthcnJheSBuYW1lcyBpZHRhZ3NdXSB7CisJaWYge1tpbmZvIGV4aXN0cyBhcmNub3MoJGlkKV0gJiYgIVtpbmZvIGV4aXN0cyBhcmNvdXQoJGlkKV19IHsKKwkgICAgc2V0IGEgW2xpbmRleCAkYXJjbm9zKCRpZCkgMF0KKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgZG9uZWFyYygkYSldfSB7CisJCXJlY2FsY2FyYyAkYQorCQlzZXQgZG9uZWFyYygkYSkgMQorCSAgICB9CisJfQorICAgIH0KKyAgICBjYXRjaCB7dW5zZXQgY2FjaGVkX3RhZ2NvbnRlbnR9CisgICAgY2F0Y2gge3Vuc2V0IGNhY2hlZF9kdGFnc30KKyAgICBjYXRjaCB7dW5zZXQgY2FjaGVkX2F0YWdzfQorICAgIGNhdGNoIHt1bnNldCBjYWNoZWRfZGhlYWRzfQorfQorCitwcm9jIHJlcmVhZHJlZnMge30geworICAgIGdsb2JhbCBpZHRhZ3MgaWRoZWFkcyBpZG90aGVycmVmcyBtYWluaGVhZGlkCisKKyAgICBzZXQgcmVmaWRzIFtjb25jYXQgW2FycmF5IG5hbWVzIGlkdGFnc10gXAorCQkgICAgW2FycmF5IG5hbWVzIGlkaGVhZHNdIFthcnJheSBuYW1lcyBpZG90aGVycmVmc11dCisgICAgZm9yZWFjaCBpZCAkcmVmaWRzIHsKKwlpZiB7IVtpbmZvIGV4aXN0cyByZWYoJGlkKV19IHsKKwkgICAgc2V0IHJlZigkaWQpIFtsaXN0cmVmcyAkaWRdCisJfQorICAgIH0KKyAgICBzZXQgb2xkbWFpbmhlYWQgJG1haW5oZWFkaWQKKyAgICByZWFkcmVmcworICAgIGNoYW5nZWRyZWZzCisgICAgc2V0IHJlZmlkcyBbbHNvcnQgLXVuaXF1ZSBbY29uY2F0ICRyZWZpZHMgW2FycmF5IG5hbWVzIGlkdGFnc10gXAorCQkJW2FycmF5IG5hbWVzIGlkaGVhZHNdIFthcnJheSBuYW1lcyBpZG90aGVycmVmc11dXQorICAgIGZvcmVhY2ggaWQgJHJlZmlkcyB7CisJc2V0IHYgW2xpc3RyZWZzICRpZF0KKwlpZiB7IVtpbmZvIGV4aXN0cyByZWYoJGlkKV0gfHwgJHJlZigkaWQpICE9ICR2fSB7CisJICAgIHJlZHJhd3RhZ3MgJGlkCisJfQorICAgIH0KKyAgICBpZiB7JG9sZG1haW5oZWFkIG5lICRtYWluaGVhZGlkfSB7CisJcmVkcmF3dGFncyAkb2xkbWFpbmhlYWQKKwlyZWRyYXd0YWdzICRtYWluaGVhZGlkCisgICAgfQorICAgIHJ1biByZWZpbGxfcmVmbGlzdAorfQorCitwcm9jIGxpc3RyZWZzIHtpZH0geworICAgIGdsb2JhbCBpZHRhZ3MgaWRoZWFkcyBpZG90aGVycmVmcworCisgICAgc2V0IHgge30KKyAgICBpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCXNldCB4ICRpZHRhZ3MoJGlkKQorICAgIH0KKyAgICBzZXQgeSB7fQorICAgIGlmIHtbaW5mbyBleGlzdHMgaWRoZWFkcygkaWQpXX0geworCXNldCB5ICRpZGhlYWRzKCRpZCkKKyAgICB9CisgICAgc2V0IHoge30KKyAgICBpZiB7W2luZm8gZXhpc3RzIGlkb3RoZXJyZWZzKCRpZCldfSB7CisJc2V0IHogJGlkb3RoZXJyZWZzKCRpZCkKKyAgICB9CisgICAgcmV0dXJuIFtsaXN0ICR4ICR5ICR6XQorfQorCitwcm9jIHNob3d0YWcge3RhZyBpc25ld30geworICAgIGdsb2JhbCBjdGV4dCBjYWNoZWRfdGFnY29udGVudCB0YWdpZHMgbGlua251bSB0YWdvYmppZAorCisgICAgaWYgeyRpc25ld30geworCWFkZHRvaGlzdG9yeSBbbGlzdCBzaG93dGFnICR0YWcgMF0gc2F2ZWN0ZXh0cG9zCisgICAgfQorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBjbGVhcl9jdGV4dAorICAgIHNldHRhYnMgMAorICAgIHNldCBsaW5rbnVtIDAKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjYWNoZWRfdGFnY29udGVudCgkdGFnKV19IHsKKwljYXRjaCB7CisgICAgICAgICAgIHNldCBjYWNoZWRfdGFnY29udGVudCgkdGFnKSBbZXhlYyBnaXQgY2F0LWZpbGUgdGFnICR0YWddCisJfQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF90YWdjb250ZW50KCR0YWcpXX0geworCXNldCB0ZXh0ICRjYWNoZWRfdGFnY29udGVudCgkdGFnKQorICAgIH0gZWxzZSB7CisJc2V0IHRleHQgIlttYyAiVGFnIl06ICR0YWdcblttYyAiSWQiXTogICR0YWdpZHMoJHRhZykiCisgICAgfQorICAgIGFwcGVuZHdpdGhsaW5rcyAkdGV4dCB7fQorICAgIG1heWJlX3Njcm9sbF9jdGV4dCAxCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgaW5pdF9mbGlzdCB7fQorfQorCitwcm9jIGRvcXVpdCB7fSB7CisgICAgZ2xvYmFsIHN0b3BwZWQKKyAgICBnbG9iYWwgZ2l0a3RtcGRpcgorCisgICAgc2V0IHN0b3BwZWQgMTAwCisgICAgc2F2ZXN0dWZmIC4KKyAgICBkZXN0cm95IC4KKworICAgIGlmIHtbaW5mbyBleGlzdHMgZ2l0a3RtcGRpcl19IHsKKwljYXRjaCB7ZmlsZSBkZWxldGUgLWZvcmNlICRnaXRrdG1wZGlyfQorICAgIH0KK30KKworcHJvYyBta2ZvbnRkaXNwIHtmb250IHRvcCB3aGljaH0geworICAgIGdsb2JhbCBmb250YXR0ciBmb250cHJlZiAkZm9udCBOUyB1c2VfdHRrCisKKyAgICBzZXQgZm9udHByZWYoJGZvbnQpIFtzZXQgJGZvbnRdCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLiR7Zm9udH1idXQgLXRleHQgJHdoaWNoIFwKKwktY29tbWFuZCBbbGlzdCBjaG9vc2Vmb250ICRmb250ICR3aGljaF0KKyAgICAke05TfTo6bGFiZWwgJHRvcC4kZm9udCAtcmVsaWVmIGZsYXQgLWZvbnQgJGZvbnQgXAorCS10ZXh0ICRmb250YXR0cigkZm9udCxmYW1pbHkpIC1qdXN0aWZ5IGxlZnQKKyAgICBncmlkIHggJHRvcC4ke2ZvbnR9YnV0ICR0b3AuJGZvbnQgLXN0aWNreSB3Cit9CisKK3Byb2MgY2hvb3NlZm9udCB7Zm9udCB3aGljaH0geworICAgIGdsb2JhbCBmb250cGFyYW0gZm9udGxpc3QgZm9udHRvcCBmb250YXR0cgorICAgIGdsb2JhbCBwcmVmc3RvcCBOUworCisgICAgc2V0IGZvbnRwYXJhbSh3aGljaCkgJHdoaWNoCisgICAgc2V0IGZvbnRwYXJhbShmb250KSAkZm9udAorICAgIHNldCBmb250cGFyYW0oZmFtaWx5KSBbZm9udCBhY3R1YWwgJGZvbnQgLWZhbWlseV0KKyAgICBzZXQgZm9udHBhcmFtKHNpemUpICRmb250YXR0cigkZm9udCxzaXplKQorICAgIHNldCBmb250cGFyYW0od2VpZ2h0KSAkZm9udGF0dHIoJGZvbnQsd2VpZ2h0KQorICAgIHNldCBmb250cGFyYW0oc2xhbnQpICRmb250YXR0cigkZm9udCxzbGFudCkKKyAgICBzZXQgdG9wIC5naXRrZm9udAorICAgIHNldCBmb250dG9wICR0b3AKKyAgICBpZiB7IVt3aW5mbyBleGlzdHMgJHRvcF19IHsKKwlmb250IGNyZWF0ZSBzYW1wbGUKKwlldmFsIGZvbnQgY29uZmlnIHNhbXBsZSBbZm9udCBhY3R1YWwgJGZvbnRdCisJdHRrX3RvcGxldmVsICR0b3AKKwltYWtlX3RyYW5zaWVudCAkdG9wICRwcmVmc3RvcAorCXdtIHRpdGxlICR0b3AgW21jICJHaXRrIGZvbnQgY2hvb3NlciJdCisJJHtOU306OmxhYmVsICR0b3AubCAtdGV4dHZhcmlhYmxlIGZvbnRwYXJhbSh3aGljaCkKKwlwYWNrICR0b3AubCAtc2lkZSB0b3AKKwlzZXQgZm9udGxpc3QgW2xzb3J0IFtmb250IGZhbWlsaWVzXV0KKwkke05TfTo6ZnJhbWUgJHRvcC5mCisJbGlzdGJveCAkdG9wLmYuZmFtIC1saXN0dmFyaWFibGUgZm9udGxpc3QgXAorCSAgICAteXNjcm9sbGNvbW1hbmQgW2xpc3QgJHRvcC5mLnNiIHNldF0KKwliaW5kICR0b3AuZi5mYW0gPDxMaXN0Ym94U2VsZWN0Pj4gc2VsZm9udGZhbQorCSR7TlN9OjpzY3JvbGxiYXIgJHRvcC5mLnNiIC1jb21tYW5kIFtsaXN0ICR0b3AuZi5mYW0geXZpZXddCisJcGFjayAkdG9wLmYuc2IgLXNpZGUgcmlnaHQgLWZpbGwgeQorCXBhY2sgJHRvcC5mLmZhbSAtc2lkZSBsZWZ0IC1maWxsIGJvdGggLWV4cGFuZCAxCisJcGFjayAkdG9wLmYgLXNpZGUgdG9wIC1maWxsIGJvdGggLWV4cGFuZCAxCisJJHtOU306OmZyYW1lICR0b3AuZworCXNwaW5ib3ggJHRvcC5nLnNpemUgLWZyb20gNCAtdG8gNDAgLXdpZHRoIDQgXAorCSAgICAtdGV4dHZhcmlhYmxlIGZvbnRwYXJhbShzaXplKSBcCisJICAgIC12YWxpZGF0ZWNvbW1hbmQge3N0cmluZyBpcyBpbnRlZ2VyIC1zdHJpY3QgJXN9CisJY2hlY2tidXR0b24gJHRvcC5nLmJvbGQgLXBhZHggNSBcCisJICAgIC1mb250IHt7VGltZXMgTmV3IFJvbWFufSAxMiBib2xkfSAtdGV4dCBbbWMgIkIiXSAtaW5kaWNhdG9yb24gMCBcCisJICAgIC12YXJpYWJsZSBmb250cGFyYW0od2VpZ2h0KSAtb252YWx1ZSBib2xkIC1vZmZ2YWx1ZSBub3JtYWwKKwljaGVja2J1dHRvbiAkdG9wLmcuaXRhbCAtcGFkeCA1IFwKKwkgICAgLWZvbnQge3tUaW1lcyBOZXcgUm9tYW59IDEyIGl0YWxpY30gLXRleHQgW21jICJJIl0gLWluZGljYXRvcm9uIDAgIFwKKwkgICAgLXZhcmlhYmxlIGZvbnRwYXJhbShzbGFudCkgLW9udmFsdWUgaXRhbGljIC1vZmZ2YWx1ZSByb21hbgorCXBhY2sgJHRvcC5nLnNpemUgJHRvcC5nLmJvbGQgJHRvcC5nLml0YWwgLXNpZGUgbGVmdAorCXBhY2sgJHRvcC5nIC1zaWRlIHRvcAorCWNhbnZhcyAkdG9wLmMgLXdpZHRoIDE1MCAtaGVpZ2h0IDUwIC1ib3JkZXIgMiAtcmVsaWVmIHN1bmsgXAorCSAgICAtYmFja2dyb3VuZCB3aGl0ZQorCSR0b3AuYyBjcmVhdGUgdGV4dCAxMDAgMjUgLWFuY2hvciBjZW50ZXIgLXRleHQgJHdoaWNoIC1mb250IHNhbXBsZSBcCisJICAgIC1maWxsIGJsYWNrIC10YWdzIHRleHQKKwliaW5kICR0b3AuYyA8Q29uZmlndXJlPiBbbGlzdCBjZW50ZXJ0ZXh0ICR0b3AuY10KKwlwYWNrICR0b3AuYyAtc2lkZSB0b3AgLWZpbGwgeAorCSR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKwkke05TfTo6YnV0dG9uICR0b3AuYnV0cy5vayAtdGV4dCBbbWMgIk9LIl0gLWNvbW1hbmQgZm9udG9rIC1kZWZhdWx0IGFjdGl2ZQorCSR7TlN9OjpidXR0b24gJHRvcC5idXRzLmNhbiAtdGV4dCBbbWMgIkNhbmNlbCJdIC1jb21tYW5kIGZvbnRjYW4gLWRlZmF1bHQgbm9ybWFsCisJYmluZCAkdG9wIDxLZXktUmV0dXJuPiBmb250b2sKKwliaW5kICR0b3AgPEtleS1Fc2NhcGU+IGZvbnRjYW4KKwlncmlkICR0b3AuYnV0cy5vayAkdG9wLmJ1dHMuY2FuCisJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDAgLXdlaWdodCAxIC11bmlmb3JtIGEKKwlncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMSAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorCXBhY2sgJHRvcC5idXRzIC1zaWRlIGJvdHRvbSAtZmlsbCB4CisJdHJhY2UgYWRkIHZhcmlhYmxlIGZvbnRwYXJhbSB3cml0ZSBjaGdfZm9udHBhcmFtCisgICAgfSBlbHNlIHsKKwlyYWlzZSAkdG9wCisJJHRvcC5jIGl0ZW1jb25mIHRleHQgLXRleHQgJHdoaWNoCisgICAgfQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkZm9udGxpc3QgJGZvbnRwYXJhbShmYW1pbHkpXQorICAgIGlmIHskaSA+PSAwfSB7CisJJHRvcC5mLmZhbSBzZWxlY3Rpb24gc2V0ICRpCisJJHRvcC5mLmZhbSBzZWUgJGkKKyAgICB9Cit9CisKK3Byb2MgY2VudGVydGV4dCB7d30geworICAgICR3IGNvb3JkcyB0ZXh0IFtleHByIHtbd2luZm8gd2lkdGggJHddIC8gMn1dIFtleHByIHtbd2luZm8gaGVpZ2h0ICR3XSAvIDJ9XQorfQorCitwcm9jIGZvbnRvayB7fSB7CisgICAgZ2xvYmFsIGZvbnRwYXJhbSBmb250cHJlZiBwcmVmc3RvcAorCisgICAgc2V0IGYgJGZvbnRwYXJhbShmb250KQorICAgIHNldCBmb250cHJlZigkZikgW2xpc3QgJGZvbnRwYXJhbShmYW1pbHkpICRmb250cGFyYW0oc2l6ZSldCisgICAgaWYgeyRmb250cGFyYW0od2VpZ2h0KSBlcSAiYm9sZCJ9IHsKKwlsYXBwZW5kIGZvbnRwcmVmKCRmKSAiYm9sZCIKKyAgICB9CisgICAgaWYgeyRmb250cGFyYW0oc2xhbnQpIGVxICJpdGFsaWMifSB7CisJbGFwcGVuZCBmb250cHJlZigkZikgIml0YWxpYyIKKyAgICB9CisgICAgc2V0IHcgJHByZWZzdG9wLm5vdGVib29rLmZvbnRzLiRmCisgICAgJHcgY29uZiAtdGV4dCAkZm9udHBhcmFtKGZhbWlseSkgLWZvbnQgJGZvbnRwcmVmKCRmKQorCisgICAgZm9udGNhbgorfQorCitwcm9jIGZvbnRjYW4ge30geworICAgIGdsb2JhbCBmb250dG9wIGZvbnRwYXJhbQorCisgICAgaWYge1tpbmZvIGV4aXN0cyBmb250dG9wXX0geworCWNhdGNoIHtkZXN0cm95ICRmb250dG9wfQorCWNhdGNoIHtmb250IGRlbGV0ZSBzYW1wbGV9CisJdW5zZXQgZm9udHRvcAorCXVuc2V0IGZvbnRwYXJhbQorICAgIH0KK30KKworaWYge1twYWNrYWdlIHZzYXRpc2ZpZXMgW3BhY2thZ2UgcHJvdmlkZSBUa10gOC42XX0geworICAgICMgSW4gVGsgOC42IHdlIGhhdmUgYSBuYXRpdmUgZm9udCBjaG9vc2VyIGRpYWxvZy4gT3ZlcndyaXRlIHRoZSBhYm92ZQorICAgICMgZnVuY3Rpb24gdG8gbWFrZSB1c2Ugb2YgaXQuCisgICAgcHJvYyBjaG9vc2Vmb250IHtmb250IHdoaWNofSB7CisJdGsgZm9udGNob29zZXIgY29uZmlndXJlIC10aXRsZSAkd2hpY2ggLWZvbnQgJGZvbnQgXAorCSAgICAtY29tbWFuZCBbbGlzdCBvbl9jaG9vc2Vmb250ICRmb250ICR3aGljaF0KKwl0ayBmb250Y2hvb3NlciBzaG93CisgICAgfQorICAgIHByb2Mgb25fY2hvb3NlZm9udCB7Zm9udCB3aGljaCBuZXdmb250fSB7CisJZ2xvYmFsIGZvbnRwYXJhbQorCXB1dHMgc3RkZXJyICIkZm9udCAkbmV3Zm9udCIKKwlhcnJheSBzZXQgZiBbZm9udCBhY3R1YWwgJG5ld2ZvbnRdCisJc2V0IGZvbnRwYXJhbSh3aGljaCkgJHdoaWNoCisJc2V0IGZvbnRwYXJhbShmb250KSAkZm9udAorCXNldCBmb250cGFyYW0oZmFtaWx5KSAkZigtZmFtaWx5KQorCXNldCBmb250cGFyYW0oc2l6ZSkgJGYoLXNpemUpCisJc2V0IGZvbnRwYXJhbSh3ZWlnaHQpICRmKC13ZWlnaHQpCisJc2V0IGZvbnRwYXJhbShzbGFudCkgJGYoLXNsYW50KQorCWZvbnRvaworICAgIH0KK30KKworcHJvYyBzZWxmb250ZmFtIHt9IHsKKyAgICBnbG9iYWwgZm9udHRvcCBmb250cGFyYW0KKworICAgIHNldCBpIFskZm9udHRvcC5mLmZhbSBjdXJzZWxlY3Rpb25dCisgICAgaWYgeyRpIG5lIHt9fSB7CisJc2V0IGZvbnRwYXJhbShmYW1pbHkpIFskZm9udHRvcC5mLmZhbSBnZXQgJGldCisgICAgfQorfQorCitwcm9jIGNoZ19mb250cGFyYW0ge3Ygc3ViIG9wfSB7CisgICAgZ2xvYmFsIGZvbnRwYXJhbQorCisgICAgZm9udCBjb25maWcgc2FtcGxlIC0kc3ViICRmb250cGFyYW0oJHN1YikKK30KKworIyBDcmVhdGUgYSBwcm9wZXJ0eSBzaGVldCB0YWIgcGFnZQorcHJvYyBjcmVhdGVfcHJlZnNfcGFnZSB7d30geworICAgIGdsb2JhbCBOUworICAgIHNldCBwYXJlbnQgW2pvaW4gW2xyYW5nZSBbc3BsaXQgJHcgLl0gMCBlbmQtMV0gLl0KKyAgICBpZiB7W3dpbmZvIGNsYXNzICRwYXJlbnRdIGVxICJUTm90ZWJvb2sifSB7CisJJHtOU306OmZyYW1lICR3CisgICAgfSBlbHNlIHsKKwkke05TfTo6bGFiZWxmcmFtZSAkdworICAgIH0KK30KKworcHJvYyBwcmVmc3BhZ2VfZ2VuZXJhbCB7bm90ZWJvb2t9IHsKKyAgICBnbG9iYWwgTlMgbWF4d2lkdGggbWF4Z3JhcGhwY3Qgc2hvd25lYXJ0YWdzIHNob3dsb2NhbGNoYW5nZXMKKyAgICBnbG9iYWwgdGFic3RvcCBsaW1pdGRpZmZzIGF1dG9zZWxlY3QgYXV0b3NlbGxlbiBleHRkaWZmdG9vbCBwZXJmaWxlX2F0dHJzCisgICAgZ2xvYmFsIGhpZGVyZW1vdGVzIHdhbnRfdHRrIGhhdmVfdHRrCisKKyAgICBzZXQgcGFnZSBbY3JlYXRlX3ByZWZzX3BhZ2UgJG5vdGVib29rLmdlbmVyYWxdCisKKyAgICAke05TfTo6bGFiZWwgJHBhZ2UubGRpc3AgLXRleHQgW21jICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiXQorICAgIGdyaWQgJHBhZ2UubGRpc3AgLSAtc3RpY2t5IHcgLXBhZHkgMTAKKyAgICAke05TfTo6bGFiZWwgJHBhZ2Uuc3BhY2VyIC10ZXh0ICIgIgorICAgICR7TlN9OjpsYWJlbCAkcGFnZS5tYXh3aWR0aGwgLXRleHQgW21jICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiXQorICAgIHNwaW5ib3ggJHBhZ2UubWF4d2lkdGggLWZyb20gMCAtdG8gMTAwIC13aWR0aCA0IC10ZXh0dmFyaWFibGUgbWF4d2lkdGgKKyAgICBncmlkICRwYWdlLnNwYWNlciAkcGFnZS5tYXh3aWR0aGwgJHBhZ2UubWF4d2lkdGggLXN0aWNreSB3CisgICAgJHtOU306OmxhYmVsICRwYWdlLm1heHBjdGwgLXRleHQgW21jICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIl0KKyAgICBzcGluYm94ICRwYWdlLm1heHBjdCAtZnJvbSAxIC10byAxMDAgLXdpZHRoIDQgLXRleHR2YXJpYWJsZSBtYXhncmFwaHBjdAorICAgIGdyaWQgeCAkcGFnZS5tYXhwY3RsICRwYWdlLm1heHBjdCAtc3RpY2t5IHcKKyAgICAke05TfTo6Y2hlY2tidXR0b24gJHBhZ2Uuc2hvd2xvY2FsIC10ZXh0IFttYyAiU2hvdyBsb2NhbCBjaGFuZ2VzIl0gXAorCS12YXJpYWJsZSBzaG93bG9jYWxjaGFuZ2VzCisgICAgZ3JpZCB4ICRwYWdlLnNob3dsb2NhbCAtc3RpY2t5IHcKKyAgICAke05TfTo6Y2hlY2tidXR0b24gJHBhZ2UuYXV0b3NlbGVjdCAtdGV4dCBbbWMgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiXSBcCisJLXZhcmlhYmxlIGF1dG9zZWxlY3QKKyAgICBzcGluYm94ICRwYWdlLmF1dG9zZWxsZW4gLWZyb20gMSAtdG8gNDAgLXdpZHRoIDQgLXRleHR2YXJpYWJsZSBhdXRvc2VsbGVuCisgICAgZ3JpZCB4ICRwYWdlLmF1dG9zZWxlY3QgJHBhZ2UuYXV0b3NlbGxlbiAtc3RpY2t5IHcKKyAgICAke05TfTo6Y2hlY2tidXR0b24gJHBhZ2UuaGlkZXJlbW90ZXMgLXRleHQgW21jICJIaWRlIHJlbW90ZSByZWZzIl0gXAorCS12YXJpYWJsZSBoaWRlcmVtb3RlcworICAgIGdyaWQgeCAkcGFnZS5oaWRlcmVtb3RlcyAtc3RpY2t5IHcKKworICAgICR7TlN9OjpsYWJlbCAkcGFnZS5kZGlzcCAtdGV4dCBbbWMgIkRpZmYgZGlzcGxheSBvcHRpb25zIl0KKyAgICBncmlkICRwYWdlLmRkaXNwIC0gLXN0aWNreSB3IC1wYWR5IDEwCisgICAgJHtOU306OmxhYmVsICRwYWdlLnRhYnN0b3BsIC10ZXh0IFttYyAiVGFiIHNwYWNpbmciXQorICAgIHNwaW5ib3ggJHBhZ2UudGFic3RvcCAtZnJvbSAxIC10byAyMCAtd2lkdGggNCAtdGV4dHZhcmlhYmxlIHRhYnN0b3AKKyAgICBncmlkIHggJHBhZ2UudGFic3RvcGwgJHBhZ2UudGFic3RvcCAtc3RpY2t5IHcKKyAgICAke05TfTo6Y2hlY2tidXR0b24gJHBhZ2UubnRhZyAtdGV4dCBbbWMgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MiXSBcCisJLXZhcmlhYmxlIHNob3duZWFydGFncworICAgIGdyaWQgeCAkcGFnZS5udGFnIC1zdGlja3kgdworICAgICR7TlN9OjpjaGVja2J1dHRvbiAkcGFnZS5sZGlmZiAtdGV4dCBbbWMgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyJdIFwKKwktdmFyaWFibGUgbGltaXRkaWZmcworICAgIGdyaWQgeCAkcGFnZS5sZGlmZiAtc3RpY2t5IHcKKyAgICAke05TfTo6Y2hlY2tidXR0b24gJHBhZ2UubGF0dHIgLXRleHQgW21jICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyJdIFwKKwktdmFyaWFibGUgcGVyZmlsZV9hdHRycworICAgIGdyaWQgeCAkcGFnZS5sYXR0ciAtc3RpY2t5IHcKKworICAgICR7TlN9OjplbnRyeSAkcGFnZS5leHRkaWZmdCAtdGV4dHZhcmlhYmxlIGV4dGRpZmZ0b29sCisgICAgJHtOU306OmZyYW1lICRwYWdlLmV4dGRpZmZmCisgICAgJHtOU306OmxhYmVsICRwYWdlLmV4dGRpZmZmLmwgLXRleHQgW21jICJFeHRlcm5hbCBkaWZmIHRvb2wiIF0KKyAgICAke05TfTo6YnV0dG9uICRwYWdlLmV4dGRpZmZmLmIgLXRleHQgW21jICJDaG9vc2UuLi4iXSAtY29tbWFuZCBjaG9vc2VfZXh0ZGlmZgorICAgIHBhY2sgJHBhZ2UuZXh0ZGlmZmYubCAkcGFnZS5leHRkaWZmZi5iIC1zaWRlIGxlZnQKKyAgICBwYWNrIGNvbmZpZ3VyZSAkcGFnZS5leHRkaWZmZi5sIC1wYWR4IDEwCisgICAgZ3JpZCB4ICRwYWdlLmV4dGRpZmZmICRwYWdlLmV4dGRpZmZ0IC1zdGlja3kgZXcKKworICAgICR7TlN9OjpsYWJlbCAkcGFnZS5sZ2VuIC10ZXh0IFttYyAiR2VuZXJhbCBvcHRpb25zIl0KKyAgICBncmlkICRwYWdlLmxnZW4gLSAtc3RpY2t5IHcgLXBhZHkgMTAKKyAgICAke05TfTo6Y2hlY2tidXR0b24gJHBhZ2Uud2FudF90dGsgLXZhcmlhYmxlIHdhbnRfdHRrIFwKKwktdGV4dCBbbWMgIlVzZSB0aGVtZWQgd2lkZ2V0cyJdCisgICAgaWYgeyRoYXZlX3R0a30geworCSR7TlN9OjpsYWJlbCAkcGFnZS50dGtfbm90ZSAtdGV4dCBbbWMgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiXQorICAgIH0gZWxzZSB7CisJJHtOU306OmxhYmVsICRwYWdlLnR0a19ub3RlIC10ZXh0IFttYyAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiXQorICAgIH0KKyAgICBncmlkIHggJHBhZ2Uud2FudF90dGsgJHBhZ2UudHRrX25vdGUgLXN0aWNreSB3CisgICAgcmV0dXJuICRwYWdlCit9CisKK3Byb2MgcHJlZnNwYWdlX2NvbG9ycyB7bm90ZWJvb2t9IHsKKyAgICBnbG9iYWwgTlMgdWljb2xvciBiZ2NvbG9yIGZnY29sb3IgY3RleHQgZGlmZmNvbG9ycyBzZWxlY3RiZ2NvbG9yIG1hcmtiZ2NvbG9yCisKKyAgICBzZXQgcGFnZSBbY3JlYXRlX3ByZWZzX3BhZ2UgJG5vdGVib29rLmNvbG9yc10KKworICAgICR7TlN9OjpsYWJlbCAkcGFnZS5jZGlzcCAtdGV4dCBbbWMgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIl0KKyAgICBncmlkICRwYWdlLmNkaXNwIC0gLXN0aWNreSB3IC1wYWR5IDEwCisgICAgbGFiZWwgJHBhZ2UudWkgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kICR1aWNvbG9yCisgICAgJHtOU306OmJ1dHRvbiAkcGFnZS51aWJ1dCAtdGV4dCBbbWMgIkludGVyZmFjZSJdIFwKKyAgICAgICAtY29tbWFuZCBbbGlzdCBjaG9vc2Vjb2xvciB1aWNvbG9yIHt9ICRwYWdlLnVpIFttYyAiaW50ZXJmYWNlIl0gc2V0dWldCisgICAgZ3JpZCB4ICRwYWdlLnVpYnV0ICRwYWdlLnVpIC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLmJnIC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCAkYmdjb2xvcgorICAgICR7TlN9OjpidXR0b24gJHBhZ2UuYmdidXQgLXRleHQgW21jICJCYWNrZ3JvdW5kIl0gXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIGJnY29sb3Ige30gJHBhZ2UuYmcgW21jICJiYWNrZ3JvdW5kIl0gc2V0YmddCisgICAgZ3JpZCB4ICRwYWdlLmJnYnV0ICRwYWdlLmJnIC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLmZnIC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCAkZmdjb2xvcgorICAgICR7TlN9OjpidXR0b24gJHBhZ2UuZmdidXQgLXRleHQgW21jICJGb3JlZ3JvdW5kIl0gXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIGZnY29sb3Ige30gJHBhZ2UuZmcgW21jICJmb3JlZ3JvdW5kIl0gc2V0ZmddCisgICAgZ3JpZCB4ICRwYWdlLmZnYnV0ICRwYWdlLmZnIC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLmRpZmZvbGQgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kIFtsaW5kZXggJGRpZmZjb2xvcnMgMF0KKyAgICAke05TfTo6YnV0dG9uICRwYWdlLmRpZmZvbGRidXQgLXRleHQgW21jICJEaWZmOiBvbGQgbGluZXMiXSBcCisJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3IgZGlmZmNvbG9ycyAwICRwYWdlLmRpZmZvbGQgW21jICJkaWZmIG9sZCBsaW5lcyJdIFwKKwkJICAgICAgW2xpc3QgJGN0ZXh0IHRhZyBjb25mIGQwIC1mb3JlZ3JvdW5kXV0KKyAgICBncmlkIHggJHBhZ2UuZGlmZm9sZGJ1dCAkcGFnZS5kaWZmb2xkIC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLmRpZmZuZXcgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kIFtsaW5kZXggJGRpZmZjb2xvcnMgMV0KKyAgICAke05TfTo6YnV0dG9uICRwYWdlLmRpZmZuZXdidXQgLXRleHQgW21jICJEaWZmOiBuZXcgbGluZXMiXSBcCisJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3IgZGlmZmNvbG9ycyAxICRwYWdlLmRpZmZuZXcgW21jICJkaWZmIG5ldyBsaW5lcyJdIFwKKwkJICAgICAgW2xpc3QgJGN0ZXh0IHRhZyBjb25mIGRyZXN1bHQgLWZvcmVncm91bmRdXQorICAgIGdyaWQgeCAkcGFnZS5kaWZmbmV3YnV0ICRwYWdlLmRpZmZuZXcgLXN0aWNreSB3CisgICAgbGFiZWwgJHBhZ2UuaHVua3NlcCAtcGFkeCA0MCAtcmVsaWVmIHN1bmsgLWJhY2tncm91bmQgW2xpbmRleCAkZGlmZmNvbG9ycyAyXQorICAgICR7TlN9OjpidXR0b24gJHBhZ2UuaHVua3NlcGJ1dCAtdGV4dCBbbWMgIkRpZmY6IGh1bmsgaGVhZGVyIl0gXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIGRpZmZjb2xvcnMgMiAkcGFnZS5odW5rc2VwIFwKKwkJICAgICAgW21jICJkaWZmIGh1bmsgaGVhZGVyIl0gXAorCQkgICAgICBbbGlzdCAkY3RleHQgdGFnIGNvbmYgaHVua3NlcCAtZm9yZWdyb3VuZF1dCisgICAgZ3JpZCB4ICRwYWdlLmh1bmtzZXBidXQgJHBhZ2UuaHVua3NlcCAtc3RpY2t5IHcKKyAgICBsYWJlbCAkcGFnZS5tYXJrYmdzZXAgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kICRtYXJrYmdjb2xvcgorICAgICR7TlN9OjpidXR0b24gJHBhZ2UubWFya2JnYnV0IC10ZXh0IFttYyAiTWFya2VkIGxpbmUgYmciXSBcCisJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3IgbWFya2JnY29sb3Ige30gJHBhZ2UubWFya2Jnc2VwIFwKKwkJICAgICAgW21jICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIl0gXAorCQkgICAgICBbbGlzdCAkY3RleHQgdGFnIGNvbmYgb21hcmsgLWJhY2tncm91bmRdXQorICAgIGdyaWQgeCAkcGFnZS5tYXJrYmdidXQgJHBhZ2UubWFya2Jnc2VwIC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLnNlbGJnc2VwIC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCAkc2VsZWN0Ymdjb2xvcgorICAgICR7TlN9OjpidXR0b24gJHBhZ2Uuc2VsYmdidXQgLXRleHQgW21jICJTZWxlY3QgYmciXSBcCisJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3Igc2VsZWN0Ymdjb2xvciB7fSAkcGFnZS5zZWxiZ3NlcCBbbWMgImJhY2tncm91bmQiXSBzZXRzZWxiZ10KKyAgICBncmlkIHggJHBhZ2Uuc2VsYmdidXQgJHBhZ2Uuc2VsYmdzZXAgLXN0aWNreSB3CisgICAgcmV0dXJuICRwYWdlCit9CisKK3Byb2MgcHJlZnNwYWdlX2ZvbnRzIHtub3RlYm9va30geworICAgIGdsb2JhbCBOUworICAgIHNldCBwYWdlIFtjcmVhdGVfcHJlZnNfcGFnZSAkbm90ZWJvb2suZm9udHNdCisgICAgJHtOU306OmxhYmVsICRwYWdlLmNmb250IC10ZXh0IFttYyAiRm9udHM6IHByZXNzIHRvIGNob29zZSJdCisgICAgZ3JpZCAkcGFnZS5jZm9udCAtIC1zdGlja3kgdyAtcGFkeSAxMAorICAgIG1rZm9udGRpc3AgbWFpbmZvbnQgJHBhZ2UgW21jICJNYWluIGZvbnQiXQorICAgIG1rZm9udGRpc3AgdGV4dGZvbnQgJHBhZ2UgW21jICJEaWZmIGRpc3BsYXkgZm9udCJdCisgICAgbWtmb250ZGlzcCB1aWZvbnQgJHBhZ2UgW21jICJVc2VyIGludGVyZmFjZSBmb250Il0KKyAgICByZXR1cm4gJHBhZ2UKK30KKworcHJvYyBkb3ByZWZzIHt9IHsKKyAgICBnbG9iYWwgbWF4d2lkdGggbWF4Z3JhcGhwY3QgdXNlX3R0ayBOUworICAgIGdsb2JhbCBvbGRwcmVmcyBwcmVmc3RvcCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcworICAgIGdsb2JhbCB1aWNvbG9yIGJnY29sb3IgZmdjb2xvciBjdGV4dCBkaWZmY29sb3JzIHNlbGVjdGJnY29sb3IgbWFya2JnY29sb3IKKyAgICBnbG9iYWwgdGFic3RvcCBsaW1pdGRpZmZzIGF1dG9zZWxlY3QgYXV0b3NlbGxlbiBleHRkaWZmdG9vbCBwZXJmaWxlX2F0dHJzCisgICAgZ2xvYmFsIGhpZGVyZW1vdGVzIHdhbnRfdHRrIGhhdmVfdHRrCisKKyAgICBzZXQgdG9wIC5naXRrcHJlZnMKKyAgICBzZXQgcHJlZnN0b3AgJHRvcAorICAgIGlmIHtbd2luZm8gZXhpc3RzICR0b3BdfSB7CisJcmFpc2UgJHRvcAorCXJldHVybgorICAgIH0KKyAgICBmb3JlYWNoIHYge21heHdpZHRoIG1heGdyYXBocGN0IHNob3duZWFydGFncyBzaG93bG9jYWxjaGFuZ2VzIFwKKwkJICAgbGltaXRkaWZmcyB0YWJzdG9wIHBlcmZpbGVfYXR0cnMgaGlkZXJlbW90ZXMgd2FudF90dGt9IHsKKwlzZXQgb2xkcHJlZnMoJHYpIFtzZXQgJHZdCisgICAgfQorICAgIHR0a190b3BsZXZlbCAkdG9wCisgICAgd20gdGl0bGUgJHRvcCBbbWMgIkdpdGsgcHJlZmVyZW5jZXMiXQorICAgIG1ha2VfdHJhbnNpZW50ICR0b3AgLgorCisgICAgaWYge1tzZXQgdXNlX25vdGVib29rIFtleHByIHskdXNlX3R0ayAmJiBbaW5mbyBjb21tYW5kIDo6dHRrOjpub3RlYm9va10gbmUgIiJ9XV19IHsKKwlzZXQgbm90ZWJvb2sgW3R0azo6bm90ZWJvb2sgJHRvcC5ub3RlYm9va10KKyAgICB9IGVsc2UgeworCXNldCBub3RlYm9vayBbJHtOU306OmZyYW1lICR0b3Aubm90ZWJvb2sgLWJvcmRlcndpZHRoIDAgLXJlbGllZiBmbGF0XQorICAgIH0KKworICAgIGxhcHBlbmQgcGFnZXMgW3ByZWZzcGFnZV9nZW5lcmFsICRub3RlYm9va10gW21jICJHZW5lcmFsIl0KKyAgICBsYXBwZW5kIHBhZ2VzIFtwcmVmc3BhZ2VfY29sb3JzICRub3RlYm9va10gW21jICJDb2xvcnMiXQorICAgIGxhcHBlbmQgcGFnZXMgW3ByZWZzcGFnZV9mb250cyAkbm90ZWJvb2tdIFttYyAiRm9udHMiXQorICAgIHNldCBjb2wgMAorICAgIGZvcmVhY2gge3BhZ2UgdGl0bGV9ICRwYWdlcyB7CisJaWYgeyR1c2Vfbm90ZWJvb2t9IHsKKwkgICAgJG5vdGVib29rIGFkZCAkcGFnZSAtdGV4dCAkdGl0bGUKKwl9IGVsc2UgeworCSAgICBzZXQgYnRuIFske05TfTo6YnV0dG9uICRub3RlYm9vay5iX1tzdHJpbmcgbWFwIHsuIFh9ICRwYWdlXSBcCisJCQkgLXRleHQgJHRpdGxlIC1jb21tYW5kIFtsaXN0IHJhaXNlICRwYWdlXV0KKwkgICAgJHBhZ2UgY29uZmlndXJlIC10ZXh0ICR0aXRsZQorCSAgICBncmlkICRidG4gLXJvdyAwIC1jb2x1bW4gW2luY3IgY29sXSAtc3RpY2t5IHcKKwkgICAgZ3JpZCAkcGFnZSAtcm93IDEgLWNvbHVtbiAwIC1zdGlja3kgbmV3cyAtY29sdW1uc3BhbiAxMDAKKwl9CisgICAgfQorCisgICAgaWYgeyEkdXNlX25vdGVib29rfSB7CisJZ3JpZCBjb2x1bW5jb25maWd1cmUgJG5vdGVib29rIDAgLXdlaWdodCAxCisJZ3JpZCByb3djb25maWd1cmUgJG5vdGVib29rIDEgLXdlaWdodCAxCisJcmFpc2UgW2xpbmRleCAkcGFnZXMgMF0KKyAgICB9CisKKyAgICBncmlkICRub3RlYm9vayAtc3RpY2t5IG5ld3MgLXBhZHggMiAtcGFkeSAyCisgICAgZ3JpZCByb3djb25maWd1cmUgJHRvcCAwIC13ZWlnaHQgMQorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AgMCAtd2VpZ2h0IDEKKworICAgICR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5vayAtdGV4dCBbbWMgIk9LIl0gLWNvbW1hbmQgcHJlZnNvayAtZGVmYXVsdCBhY3RpdmUKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCBwcmVmc2NhbiAtZGVmYXVsdCBub3JtYWwKKyAgICBiaW5kICR0b3AgPEtleS1SZXR1cm4+IHByZWZzb2sKKyAgICBiaW5kICR0b3AgPEtleS1Fc2NhcGU+IHByZWZzY2FuCisgICAgZ3JpZCAkdG9wLmJ1dHMub2sgJHRvcC5idXRzLmNhbgorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAwIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDEgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkICR0b3AuYnV0cyAtIC0gLXBhZHkgMTAgLXN0aWNreSBldworICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AgMiAtd2VpZ2h0IDEKKyAgICBiaW5kICR0b3AgPFZpc2liaWxpdHk+IFtsaXN0IGZvY3VzICR0b3AuYnV0cy5va10KK30KKworcHJvYyBjaG9vc2VfZXh0ZGlmZiB7fSB7CisgICAgZ2xvYmFsIGV4dGRpZmZ0b29sCisKKyAgICBzZXQgcHJvZyBbdGtfZ2V0T3BlbkZpbGUgLXRpdGxlIFttYyAiRXh0ZXJuYWwgZGlmZiB0b29sIl0gLW11bHRpcGxlIGZhbHNlXQorICAgIGlmIHskcHJvZyBuZSB7fX0geworCXNldCBleHRkaWZmdG9vbCAkcHJvZworICAgIH0KK30KKworcHJvYyBjaG9vc2Vjb2xvciB7diB2aSB3IHggY21kfSB7CisgICAgZ2xvYmFsICR2CisKKyAgICBzZXQgYyBbdGtfY2hvb3NlQ29sb3IgLWluaXRpYWxjb2xvciBbbGluZGV4IFtzZXQgJHZdICR2aV0gXAorCSAgICAgICAtdGl0bGUgW21jICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIiAkeF1dCisgICAgaWYgeyRjIGVxIHt9fSByZXR1cm4KKyAgICAkdyBjb25mIC1iYWNrZ3JvdW5kICRjCisgICAgbHNldCAkdiAkdmkgJGMKKyAgICBldmFsICRjbWQgJGMKK30KKworcHJvYyBzZXRzZWxiZyB7Y30geworICAgIGdsb2JhbCBiZ2xpc3QgY2ZsaXN0CisgICAgZm9yZWFjaCB3ICRiZ2xpc3QgeworCSR3IGNvbmZpZ3VyZSAtc2VsZWN0YmFja2dyb3VuZCAkYworICAgIH0KKyAgICAkY2ZsaXN0IHRhZyBjb25maWd1cmUgaGlnaGxpZ2h0IFwKKwktYmFja2dyb3VuZCBbJGNmbGlzdCBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXQorICAgIGFsbGNhbnZzIGl0ZW1jb25mIHNlY3NlbCAtZmlsbCAkYworfQorCisjIFRoaXMgc2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBhbmQgdGhlIGNvbG9yIHNjaGVtZSBmb3IgdGhlIHdob2xlIFVJLgorIyBGb3Igc29tZSByZWFzb24sIHRrX3NldFBhbGV0dGUgY2hvb3NlcyBhIG5hc3R5IGRhcmsgcmVkIGZvciBzZWxlY3RDb2xvcgorIyBpZiB3ZSBkb24ndCBzcGVjaWZ5IG9uZSBvdXJzZWx2ZXMsIHdoaWNoIG1ha2VzIHRoZSBjaGVja2J1dHRvbnMgYW5kCisjIHJhZGlvYnV0dG9ucyBsb29rIGJhZC4gIFRoaXMgY2hvb3NlcyB3aGl0ZSBmb3Igc2VsZWN0Q29sb3IgaWYgdGhlCisjIGJhY2tncm91bmQgY29sb3IgaXMgbGlnaHQsIG9yIGJsYWNrIGlmIGl0IGlzIGRhcmsuCitwcm9jIHNldHVpIHtjfSB7CisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJ3aW4zMiJ9IHsgcmV0dXJuIH0KKyAgICBzZXQgYmcgW3dpbmZvIHJnYiAuICRjXQorICAgIHNldCBzZWxjIGJsYWNrCisgICAgaWYge1tsaW5kZXggJGJnIDBdICsgMS41ICogW2xpbmRleCAkYmcgMV0gKyAwLjUgKiBbbGluZGV4ICRiZyAyXSA+IDEwMDAwMH0geworCXNldCBzZWxjIHdoaXRlCisgICAgfQorICAgIHRrX3NldFBhbGV0dGUgYmFja2dyb3VuZCAkYyBzZWxlY3RDb2xvciAkc2VsYworfQorCitwcm9jIHNldGJnIHtjfSB7CisgICAgZ2xvYmFsIGJnbGlzdAorCisgICAgZm9yZWFjaCB3ICRiZ2xpc3QgeworCSR3IGNvbmYgLWJhY2tncm91bmQgJGMKKyAgICB9Cit9CisKK3Byb2Mgc2V0Zmcge2N9IHsKKyAgICBnbG9iYWwgZmdsaXN0IGNhbnYKKworICAgIGZvcmVhY2ggdyAkZmdsaXN0IHsKKwkkdyBjb25mIC1mb3JlZ3JvdW5kICRjCisgICAgfQorICAgIGFsbGNhbnZzIGl0ZW1jb25mIHRleHQgLWZpbGwgJGMKKyAgICAkY2FudiBpdGVtY29uZiBjaXJjbGUgLW91dGxpbmUgJGMKKyAgICAkY2FudiBpdGVtY29uZiBtYXJraWQgLW91dGxpbmUgJGMKK30KKworcHJvYyBwcmVmc2NhbiB7fSB7CisgICAgZ2xvYmFsIG9sZHByZWZzIHByZWZzdG9wCisKKyAgICBmb3JlYWNoIHYge21heHdpZHRoIG1heGdyYXBocGN0IHNob3duZWFydGFncyBzaG93bG9jYWxjaGFuZ2VzIFwKKwkJICAgbGltaXRkaWZmcyB0YWJzdG9wIHBlcmZpbGVfYXR0cnMgaGlkZXJlbW90ZXMgd2FudF90dGt9IHsKKwlnbG9iYWwgJHYKKwlzZXQgJHYgJG9sZHByZWZzKCR2KQorICAgIH0KKyAgICBjYXRjaCB7ZGVzdHJveSAkcHJlZnN0b3B9CisgICAgdW5zZXQgcHJlZnN0b3AKKyAgICBmb250Y2FuCit9CisKK3Byb2MgcHJlZnNvayB7fSB7CisgICAgZ2xvYmFsIG1heHdpZHRoIG1heGdyYXBocGN0CisgICAgZ2xvYmFsIG9sZHByZWZzIHByZWZzdG9wIHNob3duZWFydGFncyBzaG93bG9jYWxjaGFuZ2VzCisgICAgZ2xvYmFsIGZvbnRwcmVmIG1haW5mb250IHRleHRmb250IHVpZm9udAorICAgIGdsb2JhbCBsaW1pdGRpZmZzIHRyZWVkaWZmcyBwZXJmaWxlX2F0dHJzCisgICAgZ2xvYmFsIGhpZGVyZW1vdGVzCisKKyAgICBjYXRjaCB7ZGVzdHJveSAkcHJlZnN0b3B9CisgICAgdW5zZXQgcHJlZnN0b3AKKyAgICBmb250Y2FuCisgICAgc2V0IGZvbnRjaGFuZ2VkIDAKKyAgICBpZiB7JG1haW5mb250IG5lICRmb250cHJlZihtYWluZm9udCl9IHsKKwlzZXQgbWFpbmZvbnQgJGZvbnRwcmVmKG1haW5mb250KQorCXBhcnNlZm9udCBtYWluZm9udCAkbWFpbmZvbnQKKwlldmFsIGZvbnQgY29uZmlndXJlIG1haW5mb250IFtmb250ZmxhZ3MgbWFpbmZvbnRdCisJZXZhbCBmb250IGNvbmZpZ3VyZSBtYWluZm9udGJvbGQgW2ZvbnRmbGFncyBtYWluZm9udCAxXQorCXNldGNvb3JkcworCXNldCBmb250Y2hhbmdlZCAxCisgICAgfQorICAgIGlmIHskdGV4dGZvbnQgbmUgJGZvbnRwcmVmKHRleHRmb250KX0geworCXNldCB0ZXh0Zm9udCAkZm9udHByZWYodGV4dGZvbnQpCisJcGFyc2Vmb250IHRleHRmb250ICR0ZXh0Zm9udAorCWV2YWwgZm9udCBjb25maWd1cmUgdGV4dGZvbnQgW2ZvbnRmbGFncyB0ZXh0Zm9udF0KKwlldmFsIGZvbnQgY29uZmlndXJlIHRleHRmb250Ym9sZCBbZm9udGZsYWdzIHRleHRmb250IDFdCisgICAgfQorICAgIGlmIHskdWlmb250IG5lICRmb250cHJlZih1aWZvbnQpfSB7CisJc2V0IHVpZm9udCAkZm9udHByZWYodWlmb250KQorCXBhcnNlZm9udCB1aWZvbnQgJHVpZm9udAorCWV2YWwgZm9udCBjb25maWd1cmUgdWlmb250IFtmb250ZmxhZ3MgdWlmb250XQorICAgIH0KKyAgICBzZXR0YWJzCisgICAgaWYgeyRzaG93bG9jYWxjaGFuZ2VzICE9ICRvbGRwcmVmcyhzaG93bG9jYWxjaGFuZ2VzKX0geworCWlmIHskc2hvd2xvY2FsY2hhbmdlc30geworCSAgICBkb3Nob3dsb2NhbGNoYW5nZXMKKwl9IGVsc2UgeworCSAgICBkb2hpZGVsb2NhbGNoYW5nZXMKKwl9CisgICAgfQorICAgIGlmIHskbGltaXRkaWZmcyAhPSAkb2xkcHJlZnMobGltaXRkaWZmcykgfHwKKwkoJHBlcmZpbGVfYXR0cnMgJiYgISRvbGRwcmVmcyhwZXJmaWxlX2F0dHJzKSl9IHsKKwkjIHRyZWVkaWZmcyBlbGVtZW50cyBhcmUgbGltaXRlZCBieSBwYXRoOworCSMgd29uJ3QgaGF2ZSBlbmNvZGluZ3MgY2FjaGVkIGlmIHBlcmZpbGVfYXR0cnMgd2FzIGp1c3QgdHVybmVkIG9uCisJY2F0Y2gge3Vuc2V0IHRyZWVkaWZmc30KKyAgICB9CisgICAgaWYgeyRmb250Y2hhbmdlZCB8fCAkbWF4d2lkdGggIT0gJG9sZHByZWZzKG1heHdpZHRoKQorCXx8ICRtYXhncmFwaHBjdCAhPSAkb2xkcHJlZnMobWF4Z3JhcGhwY3QpfSB7CisJcmVkaXNwbGF5CisgICAgfSBlbHNlaWYgeyRzaG93bmVhcnRhZ3MgIT0gJG9sZHByZWZzKHNob3duZWFydGFncykgfHwKKwkgICRsaW1pdGRpZmZzICE9ICRvbGRwcmVmcyhsaW1pdGRpZmZzKX0geworCXJlc2VsZWN0bGluZQorICAgIH0KKyAgICBpZiB7JGhpZGVyZW1vdGVzICE9ICRvbGRwcmVmcyhoaWRlcmVtb3Rlcyl9IHsKKwlyZXJlYWRyZWZzCisgICAgfQorfQorCitwcm9jIGZvcm1hdGRhdGUge2R9IHsKKyAgICBnbG9iYWwgZGF0ZXRpbWVmb3JtYXQKKyAgICBpZiB7JGQgbmUge319IHsKKwlzZXQgZCBbY2xvY2sgZm9ybWF0IFtsaW5kZXggJGQgMF0gLWZvcm1hdCAkZGF0ZXRpbWVmb3JtYXRdCisgICAgfQorICAgIHJldHVybiAkZAorfQorCisjIFRoaXMgbGlzdCBvZiBlbmNvZGluZyBuYW1lcyBhbmQgYWxpYXNlcyBpcyBkaXN0aWxsZWQgZnJvbQorIyBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzLgorIyBOb3QgYWxsIG9mIHRoZW0gYXJlIHN1cHBvcnRlZCBieSBUY2wuCitzZXQgZW5jb2RpbmdfYWxpYXNlcyB7CisgICAgeyBBTlNJX1gzLjQtMTk2OCBpc28taXItNiBBTlNJX1gzLjQtMTk4NiBJU09fNjQ2LmlydjoxOTkxIEFTQ0lJCisgICAgICBJU082NDYtVVMgVVMtQVNDSUkgdXMgSUJNMzY3IGNwMzY3IGNzQVNDSUkgfQorICAgIHsgSVNPLTEwNjQ2LVVURi0xIGNzSVNPMTA2NDZVVEYxIH0KKyAgICB7IElTT182NDYuYmFzaWM6MTk4MyByZWYgY3NJU082NDZiYXNpYzE5ODMgfQorICAgIHsgSU5WQVJJQU5UIGNzSU5WQVJJQU5UIH0KKyAgICB7IElTT182NDYuaXJ2OjE5ODMgaXNvLWlyLTIgaXJ2IGNzSVNPMkludGxSZWZWZXJzaW9uIH0KKyAgICB7IEJTXzQ3MzAgaXNvLWlyLTQgSVNPNjQ2LUdCIGdiIHVrIGNzSVNPNFVuaXRlZEtpbmdkb20gfQorICAgIHsgTkFUUy1TRUZJIGlzby1pci04LTEgY3NOQVRTU0VGSSB9CisgICAgeyBOQVRTLVNFRkktQUREIGlzby1pci04LTIgY3NOQVRTU0VGSUFERCB9CisgICAgeyBOQVRTLURBTk8gaXNvLWlyLTktMSBjc05BVFNEQU5PIH0KKyAgICB7IE5BVFMtREFOTy1BREQgaXNvLWlyLTktMiBjc05BVFNEQU5PQUREIH0KKyAgICB7IFNFTl84NTAyMDBfQiBpc28taXItMTAgRkkgSVNPNjQ2LUZJIElTTzY0Ni1TRSBzZSBjc0lTTzEwU3dlZGlzaCB9CisgICAgeyBTRU5fODUwMjAwX0MgaXNvLWlyLTExIElTTzY0Ni1TRTIgc2UyIGNzSVNPMTFTd2VkaXNoRm9yTmFtZXMgfQorICAgIHsgS1NfQ181NjAxLTE5ODcgaXNvLWlyLTE0OSBLU19DXzU2MDEtMTk4OSBLU0NfNTYwMSBrb3JlYW4gY3NLU0M1NjAxMTk4NyB9CisgICAgeyBJU08tMjAyMi1LUiBjc0lTTzIwMjJLUiB9CisgICAgeyBFVUMtS1IgY3NFVUNLUiB9CisgICAgeyBJU08tMjAyMi1KUCBjc0lTTzIwMjJKUCB9CisgICAgeyBJU08tMjAyMi1KUC0yIGNzSVNPMjAyMkpQMiB9CisgICAgeyBKSVNfQzYyMjAtMTk2OS1qcCBKSVNfQzYyMjAtMTk2OSBpc28taXItMTMga2F0YWthbmEgeDAyMDEtNworICAgICAgY3NJU08xM0pJU0M2MjIwanAgfQorICAgIHsgSklTX0M2MjIwLTE5Njktcm8gaXNvLWlyLTE0IGpwIElTTzY0Ni1KUCBjc0lTTzE0SklTQzYyMjBybyB9CisgICAgeyBJVCBpc28taXItMTUgSVNPNjQ2LUlUIGNzSVNPMTVJdGFsaWFuIH0KKyAgICB7IFBUIGlzby1pci0xNiBJU082NDYtUFQgY3NJU08xNlBvcnR1Z3Vlc2UgfQorICAgIHsgRVMgaXNvLWlyLTE3IElTTzY0Ni1FUyBjc0lTTzE3U3BhbmlzaCB9CisgICAgeyBncmVlazctb2xkIGlzby1pci0xOCBjc0lTTzE4R3JlZWs3T2xkIH0KKyAgICB7IGxhdGluLWdyZWVrIGlzby1pci0xOSBjc0lTTzE5TGF0aW5HcmVlayB9CisgICAgeyBESU5fNjYwMDMgaXNvLWlyLTIxIGRlIElTTzY0Ni1ERSBjc0lTTzIxR2VybWFuIH0KKyAgICB7IE5GX1pfNjItMDEwXygxOTczKSBpc28taXItMjUgSVNPNjQ2LUZSMSBjc0lTTzI1RnJlbmNoIH0KKyAgICB7IExhdGluLWdyZWVrLTEgaXNvLWlyLTI3IGNzSVNPMjdMYXRpbkdyZWVrMSB9CisgICAgeyBJU09fNTQyNyBpc28taXItMzcgY3NJU081NDI3Q3lyaWxsaWMgfQorICAgIHsgSklTX0M2MjI2LTE5NzggaXNvLWlyLTQyIGNzSVNPNDJKSVNDNjIyNjE5NzggfQorICAgIHsgQlNfdmlld2RhdGEgaXNvLWlyLTQ3IGNzSVNPNDdCU1ZpZXdkYXRhIH0KKyAgICB7IElOSVMgaXNvLWlyLTQ5IGNzSVNPNDlJTklTIH0KKyAgICB7IElOSVMtOCBpc28taXItNTAgY3NJU081MElOSVM4IH0KKyAgICB7IElOSVMtY3lyaWxsaWMgaXNvLWlyLTUxIGNzSVNPNTFJTklTQ3lyaWxsaWMgfQorICAgIHsgSVNPXzU0Mjc6MTk4MSBpc28taXItNTQgSVNPNTQyN0N5cmlsbGljMTk4MSB9CisgICAgeyBJU09fNTQyODoxOTgwIGlzby1pci01NSBjc0lTTzU0MjhHcmVlayB9CisgICAgeyBHQl8xOTg4LTgwIGlzby1pci01NyBjbiBJU082NDYtQ04gY3NJU081N0dCMTk4OCB9CisgICAgeyBHQl8yMzEyLTgwIGlzby1pci01OCBjaGluZXNlIGNzSVNPNThHQjIzMTI4MCB9CisgICAgeyBOU180NTUxLTEgaXNvLWlyLTYwIElTTzY0Ni1OTyBubyBjc0lTTzYwRGFuaXNoTm9yd2VnaWFuCisgICAgICBjc0lTTzYwTm9yd2VnaWFuMSB9CisgICAgeyBOU180NTUxLTIgSVNPNjQ2LU5PMiBpc28taXItNjEgbm8yIGNzSVNPNjFOb3J3ZWdpYW4yIH0KKyAgICB7IE5GX1pfNjItMDEwIGlzby1pci02OSBJU082NDYtRlIgZnIgY3NJU082OUZyZW5jaCB9CisgICAgeyB2aWRlb3RleC1zdXBwbCBpc28taXItNzAgY3NJU083MFZpZGVvdGV4U3VwcDEgfQorICAgIHsgUFQyIGlzby1pci04NCBJU082NDYtUFQyIGNzSVNPODRQb3J0dWd1ZXNlMiB9CisgICAgeyBFUzIgaXNvLWlyLTg1IElTTzY0Ni1FUzIgY3NJU084NVNwYW5pc2gyIH0KKyAgICB7IE1TWl83Nzk1LjMgaXNvLWlyLTg2IElTTzY0Ni1IVSBodSBjc0lTTzg2SHVuZ2FyaWFuIH0KKyAgICB7IEpJU19DNjIyNi0xOTgzIGlzby1pci04NyB4MDIwOCBKSVNfWDAyMDgtMTk4MyBjc0lTTzg3SklTWDAyMDggfQorICAgIHsgZ3JlZWs3IGlzby1pci04OCBjc0lTTzg4R3JlZWs3IH0KKyAgICB7IEFTTU9fNDQ5IElTT185MDM2IGFyYWJpYzcgaXNvLWlyLTg5IGNzSVNPODlBU01PNDQ5IH0KKyAgICB7IGlzby1pci05MCBjc0lTTzkwIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWEgaXNvLWlyLTkxIGpwLW9jci1hIGNzSVNPOTFKSVNDNjIyOTE5ODRhIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWIgaXNvLWlyLTkyIElTTzY0Ni1KUC1PQ1ItQiBqcC1vY3ItYgorICAgICAgY3NJU085MkpJU0M2Mjk5MTk4NGIgfQorICAgIHsgSklTX0M2MjI5LTE5ODQtYi1hZGQgaXNvLWlyLTkzIGpwLW9jci1iLWFkZCBjc0lTTzkzSklTNjIyOTE5ODRiYWRkIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWhhbmQgaXNvLWlyLTk0IGpwLW9jci1oYW5kIGNzSVNPOTRKSVM2MjI5MTk4NGhhbmQgfQorICAgIHsgSklTX0M2MjI5LTE5ODQtaGFuZC1hZGQgaXNvLWlyLTk1IGpwLW9jci1oYW5kLWFkZAorICAgICAgY3NJU085NUpJUzYyMjkxOTg0aGFuZGFkZCB9CisgICAgeyBKSVNfQzYyMjktMTk4NC1rYW5hIGlzby1pci05NiBjc0lTTzk2SklTQzYyMjkxOTg0a2FuYSB9CisgICAgeyBJU09fMjAzMy0xOTgzIGlzby1pci05OCBlMTNiIGNzSVNPMjAzMyB9CisgICAgeyBBTlNJX1gzLjExMC0xOTgzIGlzby1pci05OSBDU0FfVDUwMC0xOTgzIE5BUExQUyBjc0lTTzk5TkFQTFBTIH0KKyAgICB7IElTT184ODU5LTE6MTk4NyBpc28taXItMTAwIElTT184ODU5LTEgSVNPLTg4NTktMSBsYXRpbjEgbDEgSUJNODE5CisgICAgICBDUDgxOSBjc0lTT0xhdGluMSB9CisgICAgeyBJU09fODg1OS0yOjE5ODcgaXNvLWlyLTEwMSBJU09fODg1OS0yIElTTy04ODU5LTIgbGF0aW4yIGwyIGNzSVNPTGF0aW4yIH0KKyAgICB7IFQuNjEtN2JpdCBpc28taXItMTAyIGNzSVNPMTAyVDYxN2JpdCB9CisgICAgeyBULjYxLThiaXQgVC42MSBpc28taXItMTAzIGNzSVNPMTAzVDYxOGJpdCB9CisgICAgeyBJU09fODg1OS0zOjE5ODggaXNvLWlyLTEwOSBJU09fODg1OS0zIElTTy04ODU5LTMgbGF0aW4zIGwzIGNzSVNPTGF0aW4zIH0KKyAgICB7IElTT184ODU5LTQ6MTk4OCBpc28taXItMTEwIElTT184ODU5LTQgSVNPLTg4NTktNCBsYXRpbjQgbDQgY3NJU09MYXRpbjQgfQorICAgIHsgRUNNQS1jeXJpbGxpYyBpc28taXItMTExIEtPSTgtRSBjc0lTTzExMUVDTUFDeXJpbGxpYyB9CisgICAgeyBDU0FfWjI0My40LTE5ODUtMSBpc28taXItMTIxIElTTzY0Ni1DQSBjc2E3LTEgY2EgY3NJU08xMjFDYW5hZGlhbjEgfQorICAgIHsgQ1NBX1oyNDMuNC0xOTg1LTIgaXNvLWlyLTEyMiBJU082NDYtQ0EyIGNzYTctMiBjc0lTTzEyMkNhbmFkaWFuMiB9CisgICAgeyBDU0FfWjI0My40LTE5ODUtZ3IgaXNvLWlyLTEyMyBjc0lTTzEyM0NTQVoyNDM0MTk4NWdyIH0KKyAgICB7IElTT184ODU5LTY6MTk4NyBpc28taXItMTI3IElTT184ODU5LTYgSVNPLTg4NTktNiBFQ01BLTExNCBBU01PLTcwOAorICAgICAgYXJhYmljIGNzSVNPTGF0aW5BcmFiaWMgfQorICAgIHsgSVNPXzg4NTktNi1FIGNzSVNPODg1OTZFIElTTy04ODU5LTYtRSB9CisgICAgeyBJU09fODg1OS02LUkgY3NJU084ODU5NkkgSVNPLTg4NTktNi1JIH0KKyAgICB7IElTT184ODU5LTc6MTk4NyBpc28taXItMTI2IElTT184ODU5LTcgSVNPLTg4NTktNyBFTE9UXzkyOCBFQ01BLTExOAorICAgICAgZ3JlZWsgZ3JlZWs4IGNzSVNPTGF0aW5HcmVlayB9CisgICAgeyBULjEwMS1HMiBpc28taXItMTI4IGNzSVNPMTI4VDEwMUcyIH0KKyAgICB7IElTT184ODU5LTg6MTk4OCBpc28taXItMTM4IElTT184ODU5LTggSVNPLTg4NTktOCBoZWJyZXcKKyAgICAgIGNzSVNPTGF0aW5IZWJyZXcgfQorICAgIHsgSVNPXzg4NTktOC1FIGNzSVNPODg1OThFIElTTy04ODU5LTgtRSB9CisgICAgeyBJU09fODg1OS04LUkgY3NJU084ODU5OEkgSVNPLTg4NTktOC1JIH0KKyAgICB7IENTTl8zNjkxMDMgaXNvLWlyLTEzOSBjc0lTTzEzOUNTTjM2OTEwMyB9CisgICAgeyBKVVNfSS5CMS4wMDIgaXNvLWlyLTE0MSBJU082NDYtWVUganMgeXUgY3NJU08xNDFKVVNJQjEwMDIgfQorICAgIHsgSVNPXzY5MzctMi1hZGQgaXNvLWlyLTE0MiBjc0lTT1RleHRDb21tIH0KKyAgICB7IElFQ19QMjctMSBpc28taXItMTQzIGNzSVNPMTQzSUVDUDI3MSB9CisgICAgeyBJU09fODg1OS01OjE5ODggaXNvLWlyLTE0NCBJU09fODg1OS01IElTTy04ODU5LTUgY3lyaWxsaWMKKyAgICAgIGNzSVNPTGF0aW5DeXJpbGxpYyB9CisgICAgeyBKVVNfSS5CMS4wMDMtc2VyYiBpc28taXItMTQ2IHNlcmJpYW4gY3NJU08xNDZTZXJiaWFuIH0KKyAgICB7IEpVU19JLkIxLjAwMy1tYWMgbWFjZWRvbmlhbiBpc28taXItMTQ3IGNzSVNPMTQ3TWFjZWRvbmlhbiB9CisgICAgeyBJU09fODg1OS05OjE5ODkgaXNvLWlyLTE0OCBJU09fODg1OS05IElTTy04ODU5LTkgbGF0aW41IGw1IGNzSVNPTGF0aW41IH0KKyAgICB7IGdyZWVrLWNjaXR0IGlzby1pci0xNTAgY3NJU08xNTAgY3NJU08xNTBHcmVla0NDSVRUIH0KKyAgICB7IE5DX05DMDAtMTA6ODEgY3ViYSBpc28taXItMTUxIElTTzY0Ni1DVSBjc0lTTzE1MUN1YmEgfQorICAgIHsgSVNPXzY5MzctMi0yNSBpc28taXItMTUyIGNzSVNPNjkzN0FkZCB9CisgICAgeyBHT1NUXzE5NzY4LTc0IFNUX1NFVl8zNTgtODggaXNvLWlyLTE1MyBjc0lTTzE1M0dPU1QxOTc2ODc0IH0KKyAgICB7IElTT184ODU5LXN1cHAgaXNvLWlyLTE1NCBsYXRpbjEtMi01IGNzSVNPODg1OVN1cHAgfQorICAgIHsgSVNPXzEwMzY3LWJveCBpc28taXItMTU1IGNzSVNPMTAzNjdCb3ggfQorICAgIHsgSVNPLTg4NTktMTAgaXNvLWlyLTE1NyBsNiBJU09fODg1OS0xMDoxOTkyIGNzSVNPTGF0aW42IGxhdGluNiB9CisgICAgeyBsYXRpbi1sYXAgbGFwIGlzby1pci0xNTggY3NJU08xNThMYXAgfQorICAgIHsgSklTX1gwMjEyLTE5OTAgeDAyMTIgaXNvLWlyLTE1OSBjc0lTTzE1OUpJU1gwMjEyMTk5MCB9CisgICAgeyBEU18yMDg5IERTMjA4OSBJU082NDYtREsgZGsgY3NJU082NDZEYW5pc2ggfQorICAgIHsgdXMtZGsgY3NVU0RLIH0KKyAgICB7IGRrLXVzIGNzREtVUyB9CisgICAgeyBKSVNfWDAyMDEgWDAyMDEgY3NIYWxmV2lkdGhLYXRha2FuYSB9CisgICAgeyBLU0M1NjM2IElTTzY0Ni1LUiBjc0tTQzU2MzYgfQorICAgIHsgSVNPLTEwNjQ2LVVDUy0yIGNzVW5pY29kZSB9CisgICAgeyBJU08tMTA2NDYtVUNTLTQgY3NVQ1M0IH0KKyAgICB7IERFQy1NQ1MgZGVjIGNzREVDTUNTIH0KKyAgICB7IGhwLXJvbWFuOCByb21hbjggcjggY3NIUFJvbWFuOCB9CisgICAgeyBtYWNpbnRvc2ggbWFjIGNzTWFjaW50b3NoIH0KKyAgICB7IElCTTAzNyBjcDAzNyBlYmNkaWMtY3AtdXMgZWJjZGljLWNwLWNhIGViY2RpYy1jcC13dCBlYmNkaWMtY3AtbmwKKyAgICAgIGNzSUJNMDM3IH0KKyAgICB7IElCTTAzOCBFQkNESUMtSU5UIGNwMDM4IGNzSUJNMDM4IH0KKyAgICB7IElCTTI3MyBDUDI3MyBjc0lCTTI3MyB9CisgICAgeyBJQk0yNzQgRUJDRElDLUJFIENQMjc0IGNzSUJNMjc0IH0KKyAgICB7IElCTTI3NSBFQkNESUMtQlIgY3AyNzUgY3NJQk0yNzUgfQorICAgIHsgSUJNMjc3IEVCQ0RJQy1DUC1ESyBFQkNESUMtQ1AtTk8gY3NJQk0yNzcgfQorICAgIHsgSUJNMjc4IENQMjc4IGViY2RpYy1jcC1maSBlYmNkaWMtY3Atc2UgY3NJQk0yNzggfQorICAgIHsgSUJNMjgwIENQMjgwIGViY2RpYy1jcC1pdCBjc0lCTTI4MCB9CisgICAgeyBJQk0yODEgRUJDRElDLUpQLUUgY3AyODEgY3NJQk0yODEgfQorICAgIHsgSUJNMjg0IENQMjg0IGViY2RpYy1jcC1lcyBjc0lCTTI4NCB9CisgICAgeyBJQk0yODUgQ1AyODUgZWJjZGljLWNwLWdiIGNzSUJNMjg1IH0KKyAgICB7IElCTTI5MCBjcDI5MCBFQkNESUMtSlAta2FuYSBjc0lCTTI5MCB9CisgICAgeyBJQk0yOTcgY3AyOTcgZWJjZGljLWNwLWZyIGNzSUJNMjk3IH0KKyAgICB7IElCTTQyMCBjcDQyMCBlYmNkaWMtY3AtYXIxIGNzSUJNNDIwIH0KKyAgICB7IElCTTQyMyBjcDQyMyBlYmNkaWMtY3AtZ3IgY3NJQk00MjMgfQorICAgIHsgSUJNNDI0IGNwNDI0IGViY2RpYy1jcC1oZSBjc0lCTTQyNCB9CisgICAgeyBJQk00MzcgY3A0MzcgNDM3IGNzUEM4Q29kZVBhZ2U0MzcgfQorICAgIHsgSUJNNTAwIENQNTAwIGViY2RpYy1jcC1iZSBlYmNkaWMtY3AtY2ggY3NJQk01MDAgfQorICAgIHsgSUJNNzc1IGNwNzc1IGNzUEM3NzVCYWx0aWMgfQorICAgIHsgSUJNODUwIGNwODUwIDg1MCBjc1BDODUwTXVsdGlsaW5ndWFsIH0KKyAgICB7IElCTTg1MSBjcDg1MSA4NTEgY3NJQk04NTEgfQorICAgIHsgSUJNODUyIGNwODUyIDg1MiBjc1BDcDg1MiB9CisgICAgeyBJQk04NTUgY3A4NTUgODU1IGNzSUJNODU1IH0KKyAgICB7IElCTTg1NyBjcDg1NyA4NTcgY3NJQk04NTcgfQorICAgIHsgSUJNODYwIGNwODYwIDg2MCBjc0lCTTg2MCB9CisgICAgeyBJQk04NjEgY3A4NjEgODYxIGNwLWlzIGNzSUJNODYxIH0KKyAgICB7IElCTTg2MiBjcDg2MiA4NjIgY3NQQzg2MkxhdGluSGVicmV3IH0KKyAgICB7IElCTTg2MyBjcDg2MyA4NjMgY3NJQk04NjMgfQorICAgIHsgSUJNODY0IGNwODY0IGNzSUJNODY0IH0KKyAgICB7IElCTTg2NSBjcDg2NSA4NjUgY3NJQk04NjUgfQorICAgIHsgSUJNODY2IGNwODY2IDg2NiBjc0lCTTg2NiB9CisgICAgeyBJQk04NjggQ1A4NjggY3AtYXIgY3NJQk04NjggfQorICAgIHsgSUJNODY5IGNwODY5IDg2OSBjcC1nciBjc0lCTTg2OSB9CisgICAgeyBJQk04NzAgQ1A4NzAgZWJjZGljLWNwLXJvZWNlIGViY2RpYy1jcC15dSBjc0lCTTg3MCB9CisgICAgeyBJQk04NzEgQ1A4NzEgZWJjZGljLWNwLWlzIGNzSUJNODcxIH0KKyAgICB7IElCTTg4MCBjcDg4MCBFQkNESUMtQ3lyaWxsaWMgY3NJQk04ODAgfQorICAgIHsgSUJNODkxIGNwODkxIGNzSUJNODkxIH0KKyAgICB7IElCTTkwMyBjcDkwMyBjc0lCTTkwMyB9CisgICAgeyBJQk05MDQgY3A5MDQgOTA0IGNzSUJCTTkwNCB9CisgICAgeyBJQk05MDUgQ1A5MDUgZWJjZGljLWNwLXRyIGNzSUJNOTA1IH0KKyAgICB7IElCTTkxOCBDUDkxOCBlYmNkaWMtY3AtYXIyIGNzSUJNOTE4IH0KKyAgICB7IElCTTEwMjYgQ1AxMDI2IGNzSUJNMTAyNiB9CisgICAgeyBFQkNESUMtQVQtREUgY3NJQk1FQkNESUNBVERFIH0KKyAgICB7IEVCQ0RJQy1BVC1ERS1BIGNzRUJDRElDQVRERUEgfQorICAgIHsgRUJDRElDLUNBLUZSIGNzRUJDRElDQ0FGUiB9CisgICAgeyBFQkNESUMtREstTk8gY3NFQkNESUNES05PIH0KKyAgICB7IEVCQ0RJQy1ESy1OTy1BIGNzRUJDRElDREtOT0EgfQorICAgIHsgRUJDRElDLUZJLVNFIGNzRUJDRElDRklTRSB9CisgICAgeyBFQkNESUMtRkktU0UtQSBjc0VCQ0RJQ0ZJU0VBIH0KKyAgICB7IEVCQ0RJQy1GUiBjc0VCQ0RJQ0ZSIH0KKyAgICB7IEVCQ0RJQy1JVCBjc0VCQ0RJQ0lUIH0KKyAgICB7IEVCQ0RJQy1QVCBjc0VCQ0RJQ1BUIH0KKyAgICB7IEVCQ0RJQy1FUyBjc0VCQ0RJQ0VTIH0KKyAgICB7IEVCQ0RJQy1FUy1BIGNzRUJDRElDRVNBIH0KKyAgICB7IEVCQ0RJQy1FUy1TIGNzRUJDRElDRVNTIH0KKyAgICB7IEVCQ0RJQy1VSyBjc0VCQ0RJQ1VLIH0KKyAgICB7IEVCQ0RJQy1VUyBjc0VCQ0RJQ1VTIH0KKyAgICB7IFVOS05PV04tOEJJVCBjc1Vua25vd244QmlUIH0KKyAgICB7IE1ORU1PTklDIGNzTW5lbW9uaWMgfQorICAgIHsgTU5FTSBjc01uZW0gfQorICAgIHsgVklTQ0lJIGNzVklTQ0lJIH0KKyAgICB7IFZJUVIgY3NWSVFSIH0KKyAgICB7IEtPSTgtUiBjc0tPSThSIH0KKyAgICB7IElCTTAwODU4IENDU0lEMDA4NTggQ1AwMDg1OCBQQy1NdWx0aWxpbmd1YWwtODUwK2V1cm8gfQorICAgIHsgSUJNMDA5MjQgQ0NTSUQwMDkyNCBDUDAwOTI0IGViY2RpYy1MYXRpbjktLWV1cm8gfQorICAgIHsgSUJNMDExNDAgQ0NTSUQwMTE0MCBDUDAxMTQwIGViY2RpYy11cy0zNytldXJvIH0KKyAgICB7IElCTTAxMTQxIENDU0lEMDExNDEgQ1AwMTE0MSBlYmNkaWMtZGUtMjczK2V1cm8gfQorICAgIHsgSUJNMDExNDIgQ0NTSUQwMTE0MiBDUDAxMTQyIGViY2RpYy1kay0yNzcrZXVybyBlYmNkaWMtbm8tMjc3K2V1cm8gfQorICAgIHsgSUJNMDExNDMgQ0NTSUQwMTE0MyBDUDAxMTQzIGViY2RpYy1maS0yNzgrZXVybyBlYmNkaWMtc2UtMjc4K2V1cm8gfQorICAgIHsgSUJNMDExNDQgQ0NTSUQwMTE0NCBDUDAxMTQ0IGViY2RpYy1pdC0yODArZXVybyB9CisgICAgeyBJQk0wMTE0NSBDQ1NJRDAxMTQ1IENQMDExNDUgZWJjZGljLWVzLTI4NCtldXJvIH0KKyAgICB7IElCTTAxMTQ2IENDU0lEMDExNDYgQ1AwMTE0NiBlYmNkaWMtZ2ItMjg1K2V1cm8gfQorICAgIHsgSUJNMDExNDcgQ0NTSUQwMTE0NyBDUDAxMTQ3IGViY2RpYy1mci0yOTcrZXVybyB9CisgICAgeyBJQk0wMTE0OCBDQ1NJRDAxMTQ4IENQMDExNDggZWJjZGljLWludGVybmF0aW9uYWwtNTAwK2V1cm8gfQorICAgIHsgSUJNMDExNDkgQ0NTSUQwMTE0OSBDUDAxMTQ5IGViY2RpYy1pcy04NzErZXVybyB9CisgICAgeyBJQk0xMDQ3IElCTS0xMDQ3IH0KKyAgICB7IFBUQ1AxNTQgY3NQVENQMTU0IFBUMTU0IENQMTU0IEN5cmlsbGljLUFzaWFuIH0KKyAgICB7IEFtaWdhLTEyNTEgQW1pMTI1MSBBbWlnYTEyNTEgQW1pLTEyNTEgfQorICAgIHsgVU5JQ09ERS0xLTEgY3NVbmljb2RlMTEgfQorICAgIHsgQ0VTVS04IGNzQ0VTVS04IH0KKyAgICB7IEJPQ1UtMSBjc0JPQ1UtMSB9CisgICAgeyBVTklDT0RFLTEtMS1VVEYtNyBjc1VuaWNvZGUxMVVURjcgfQorICAgIHsgSVNPLTg4NTktMTQgaXNvLWlyLTE5OSBJU09fODg1OS0xNDoxOTk4IElTT184ODU5LTE0IGxhdGluOCBpc28tY2VsdGljCisgICAgICBsOCB9CisgICAgeyBJU08tODg1OS0xNSBJU09fODg1OS0xNSBMYXRpbi05IH0KKyAgICB7IElTTy04ODU5LTE2IGlzby1pci0yMjYgSVNPXzg4NTktMTY6MjAwMSBJU09fODg1OS0xNiBsYXRpbjEwIGwxMCB9CisgICAgeyBHQksgQ1A5MzYgTVM5MzYgd2luZG93cy05MzYgfQorICAgIHsgSklTX0VuY29kaW5nIGNzSklTRW5jb2RpbmcgfQorICAgIHsgU2hpZnRfSklTIE1TX0thbmppIGNzU2hpZnRKSVMgU2hpZnRKSVMgU2hpZnQtSklTIH0KKyAgICB7IEV4dGVuZGVkX1VOSVhfQ29kZV9QYWNrZWRfRm9ybWF0X2Zvcl9KYXBhbmVzZSBjc0VVQ1BrZEZtdEphcGFuZXNlCisgICAgICBFVUMtSlAgfQorICAgIHsgRXh0ZW5kZWRfVU5JWF9Db2RlX0ZpeGVkX1dpZHRoX2Zvcl9KYXBhbmVzZSBjc0VVQ0ZpeFdpZEphcGFuZXNlIH0KKyAgICB7IElTTy0xMDY0Ni1VQ1MtQmFzaWMgY3NVbmljb2RlQVNDSUkgfQorICAgIHsgSVNPLTEwNjQ2LVVuaWNvZGUtTGF0aW4xIGNzVW5pY29kZUxhdGluMSBJU08tMTA2NDYgfQorICAgIHsgSVNPLVVuaWNvZGUtSUJNLTEyNjEgY3NVbmljb2RlSUJNMTI2MSB9CisgICAgeyBJU08tVW5pY29kZS1JQk0tMTI2OCBjc1VuaWNvZGVJQk0xMjY4IH0KKyAgICB7IElTTy1Vbmljb2RlLUlCTS0xMjc2IGNzVW5pY29kZUlCTTEyNzYgfQorICAgIHsgSVNPLVVuaWNvZGUtSUJNLTEyNjQgY3NVbmljb2RlSUJNMTI2NCB9CisgICAgeyBJU08tVW5pY29kZS1JQk0tMTI2NSBjc1VuaWNvZGVJQk0xMjY1IH0KKyAgICB7IElTTy04ODU5LTEtV2luZG93cy0zLjAtTGF0aW4tMSBjc1dpbmRvd3MzMExhdGluMSB9CisgICAgeyBJU08tODg1OS0xLVdpbmRvd3MtMy4xLUxhdGluLTEgY3NXaW5kb3dzMzFMYXRpbjEgfQorICAgIHsgSVNPLTg4NTktMi1XaW5kb3dzLUxhdGluLTIgY3NXaW5kb3dzMzFMYXRpbjIgfQorICAgIHsgSVNPLTg4NTktOS1XaW5kb3dzLUxhdGluLTUgY3NXaW5kb3dzMzFMYXRpbjUgfQorICAgIHsgQWRvYmUtU3RhbmRhcmQtRW5jb2RpbmcgY3NBZG9iZVN0YW5kYXJkRW5jb2RpbmcgfQorICAgIHsgVmVudHVyYS1VUyBjc1ZlbnR1cmFVUyB9CisgICAgeyBWZW50dXJhLUludGVybmF0aW9uYWwgY3NWZW50dXJhSW50ZXJuYXRpb25hbCB9CisgICAgeyBQQzgtRGFuaXNoLU5vcndlZ2lhbiBjc1BDOERhbmlzaE5vcndlZ2lhbiB9CisgICAgeyBQQzgtVHVya2lzaCBjc1BDOFR1cmtpc2ggfQorICAgIHsgSUJNLVN5bWJvbHMgY3NJQk1TeW1ib2xzIH0KKyAgICB7IElCTS1UaGFpIGNzSUJNVGhhaSB9CisgICAgeyBIUC1MZWdhbCBjc0hQTGVnYWwgfQorICAgIHsgSFAtUGktZm9udCBjc0hQUGlGb250IH0KKyAgICB7IEhQLU1hdGg4IGNzSFBNYXRoOCB9CisgICAgeyBBZG9iZS1TeW1ib2wtRW5jb2RpbmcgY3NIUFBTTWF0aCB9CisgICAgeyBIUC1EZXNrVG9wIGNzSFBEZXNrdG9wIH0KKyAgICB7IFZlbnR1cmEtTWF0aCBjc1ZlbnR1cmFNYXRoIH0KKyAgICB7IE1pY3Jvc29mdC1QdWJsaXNoaW5nIGNzTWljcm9zb2Z0UHVibGlzaGluZyB9CisgICAgeyBXaW5kb3dzLTMxSiBjc1dpbmRvd3MzMUogfQorICAgIHsgR0IyMzEyIGNzR0IyMzEyIH0KKyAgICB7IEJpZzUgY3NCaWc1IH0KK30KKworcHJvYyB0Y2xfZW5jb2Rpbmcge2VuY30geworICAgIGdsb2JhbCBlbmNvZGluZ19hbGlhc2VzIHRjbF9lbmNvZGluZ19jYWNoZQorICAgIGlmIHtbaW5mbyBleGlzdHMgdGNsX2VuY29kaW5nX2NhY2hlKCRlbmMpXX0geworCXJldHVybiAkdGNsX2VuY29kaW5nX2NhY2hlKCRlbmMpCisgICAgfQorICAgIHNldCBuYW1lcyBbZW5jb2RpbmcgbmFtZXNdCisgICAgc2V0IGxjbmFtZXMgW3N0cmluZyB0b2xvd2VyICRuYW1lc10KKyAgICBzZXQgZW5jIFtzdHJpbmcgdG9sb3dlciAkZW5jXQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkbGNuYW1lcyAkZW5jXQorICAgIGlmIHskaSA8IDB9IHsKKwkjIGxvb2sgZm9yICJpc29ubm4iIGluc3RlYWQgb2YgImlzby1ubm4iIG9yICJpc29fbm5uIgorCWlmIHtbcmVnc3ViIHteKGlzb3xjcHxpYm18amlzKVstX119ICRlbmMge1wxfSBlbmN4XX0geworCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGxjbmFtZXMgJGVuY3hdCisJfQorICAgIH0KKyAgICBpZiB7JGkgPCAwfSB7CisJZm9yZWFjaCBsICRlbmNvZGluZ19hbGlhc2VzIHsKKwkgICAgc2V0IGxsIFtzdHJpbmcgdG9sb3dlciAkbF0KKwkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkbGwgJGVuY10gPCAwfSBjb250aW51ZQorCSAgICAjIGxvb2sgdGhyb3VnaCB0aGUgYWxpYXNlcyBmb3Igb25lIHRoYXQgdGNsIGtub3dzIGFib3V0CisJICAgIGZvcmVhY2ggZSAkbGwgeworCQlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGxjbmFtZXMgJGVdCisJCWlmIHskaSA8IDB9IHsKKwkJICAgIGlmIHtbcmVnc3ViIHteKGlzb3xjcHxpYm18amlzKVstX119ICRlIHtcMX0gZXhdfSB7CisJCQlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGxjbmFtZXMgJGV4XQorCQkgICAgfQorCQl9CisJCWlmIHskaSA+PSAwfSBicmVhaworCSAgICB9CisJICAgIGJyZWFrCisJfQorICAgIH0KKyAgICBzZXQgdGNsZW5jIHt9CisgICAgaWYgeyRpID49IDB9IHsKKwlzZXQgdGNsZW5jIFtsaW5kZXggJG5hbWVzICRpXQorICAgIH0KKyAgICBzZXQgdGNsX2VuY29kaW5nX2NhY2hlKCRlbmMpICR0Y2xlbmMKKyAgICByZXR1cm4gJHRjbGVuYworfQorCitwcm9jIGdpdGF0dHIge3BhdGggYXR0ciBkZWZhdWx0fSB7CisgICAgZ2xvYmFsIHBhdGhfYXR0cl9jYWNoZQorICAgIGlmIHtbaW5mbyBleGlzdHMgcGF0aF9hdHRyX2NhY2hlKCRhdHRyLCRwYXRoKV19IHsKKwlzZXQgciAkcGF0aF9hdHRyX2NhY2hlKCRhdHRyLCRwYXRoKQorICAgIH0gZWxzZSB7CisJc2V0IHIgInVuc3BlY2lmaWVkIgorCWlmIHshW2NhdGNoIHtzZXQgbGluZSBbZXhlYyBnaXQgY2hlY2stYXR0ciAkYXR0ciAtLSAkcGF0aF19XX0geworCSAgICByZWdleHAgIiguKik6ICRhdHRyOiAoLiopIiAkbGluZSBtIGYgcgorCX0KKwlzZXQgcGF0aF9hdHRyX2NhY2hlKCRhdHRyLCRwYXRoKSAkcgorICAgIH0KKyAgICBpZiB7JHIgZXEgInVuc3BlY2lmaWVkIn0geworCXJldHVybiAkZGVmYXVsdAorICAgIH0KKyAgICByZXR1cm4gJHIKK30KKworcHJvYyBjYWNoZV9naXRhdHRyIHthdHRyIHBhdGhsaXN0fSB7CisgICAgZ2xvYmFsIHBhdGhfYXR0cl9jYWNoZQorICAgIHNldCBuZXdsaXN0IHt9CisgICAgZm9yZWFjaCBwYXRoICRwYXRobGlzdCB7CisJaWYgeyFbaW5mbyBleGlzdHMgcGF0aF9hdHRyX2NhY2hlKCRhdHRyLCRwYXRoKV19IHsKKwkgICAgbGFwcGVuZCBuZXdsaXN0ICRwYXRoCisJfQorICAgIH0KKyAgICBzZXQgbGltIDEwMDAKKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gPT0gIndpbjMyIn0geworCSMgd2luZG93cyBoYXMgYSAzMmsgbGltaXQgb24gdGhlIGFyZ3VtZW50cyB0byBhIGNvbW1hbmQuLi4KKwlzZXQgbGltIDMwCisgICAgfQorICAgIHdoaWxlIHskbmV3bGlzdCBuZSB7fX0geworCXNldCBoZWFkIFtscmFuZ2UgJG5ld2xpc3QgMCBbZXhwciB7JGxpbSAtIDF9XV0KKwlzZXQgbmV3bGlzdCBbbHJhbmdlICRuZXdsaXN0ICRsaW0gZW5kXQorCWlmIHshW2NhdGNoIHtzZXQgcmxpc3QgW2V2YWwgZXhlYyBnaXQgY2hlY2stYXR0ciAkYXR0ciAtLSAkaGVhZF19XX0geworCSAgICBmb3JlYWNoIHJvdyBbc3BsaXQgJHJsaXN0ICJcbiJdIHsKKwkJaWYge1tyZWdleHAgIiguKik6ICRhdHRyOiAoLiopIiAkcm93IG0gcGF0aCB2YWx1ZV19IHsKKwkJICAgIGlmIHtbc3RyaW5nIGluZGV4ICRwYXRoIDBdIGVxICJcIiJ9IHsKKwkJCXNldCBwYXRoIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSBbbGluZGV4ICRwYXRoIDBdXQorCQkgICAgfQorCQkgICAgc2V0IHBhdGhfYXR0cl9jYWNoZSgkYXR0ciwkcGF0aCkgJHZhbHVlCisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3Byb2MgZ2V0X3BhdGhfZW5jb2Rpbmcge3BhdGh9IHsKKyAgICBnbG9iYWwgZ3VpX2VuY29kaW5nIHBlcmZpbGVfYXR0cnMKKyAgICBzZXQgdGNsX2VuYyAkZ3VpX2VuY29kaW5nCisgICAgaWYgeyRwYXRoIG5lIHt9ICYmICRwZXJmaWxlX2F0dHJzfSB7CisJc2V0IGVuYzIgW3RjbF9lbmNvZGluZyBbZ2l0YXR0ciAkcGF0aCBlbmNvZGluZyAkdGNsX2VuY11dCisJaWYgeyRlbmMyIG5lIHt9fSB7CisJICAgIHNldCB0Y2xfZW5jICRlbmMyCisJfQorICAgIH0KKyAgICByZXR1cm4gJHRjbF9lbmMKK30KKworIyBGaXJzdCBjaGVjayB0aGF0IFRjbC9UayBpcyByZWNlbnQgZW5vdWdoCitpZiB7W2NhdGNoIHtwYWNrYWdlIHJlcXVpcmUgVGsgOC40fSBlcnJdfSB7CisgICAgc2hvd19lcnJvciB7fSAuICJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cblwKKwkJICAgICBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIiBsaXN0CisgICAgZXhpdCAxCit9CisKKyMgVW5zZXQgR0lUX1RSQUNFIHZhciBpZiBzZXQKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEdJVF9UUkFDRSldIH0geworICAgIHVuc2V0IDo6ZW52KEdJVF9UUkFDRSkKK30KKworIyBkZWZhdWx0cy4uLgorc2V0IHdyY29tY21kICJnaXQgZGlmZi10cmVlIC0tc3RkaW4gLXAgLS1wcmV0dHkiCisKK3NldCBnaXRlbmNvZGluZyB7fQorY2F0Y2ggeworICAgIHNldCBnaXRlbmNvZGluZyBbZXhlYyBnaXQgY29uZmlnIC0tZ2V0IGkxOG4uY29tbWl0ZW5jb2RpbmddCit9CitjYXRjaCB7CisgICAgc2V0IGdpdGVuY29kaW5nIFtleGVjIGdpdCBjb25maWcgLS1nZXQgaTE4bi5sb2dvdXRwdXRlbmNvZGluZ10KK30KK2lmIHskZ2l0ZW5jb2RpbmcgPT0gIiJ9IHsKKyAgICBzZXQgZ2l0ZW5jb2RpbmcgInV0Zi04IgorfQorc2V0IHRjbGVuY29kaW5nIFt0Y2xfZW5jb2RpbmcgJGdpdGVuY29kaW5nXQoraWYgeyR0Y2xlbmNvZGluZyA9PSB7fX0geworICAgIHB1dHMgc3RkZXJyICJXYXJuaW5nOiBlbmNvZGluZyAkZ2l0ZW5jb2RpbmcgaXMgbm90IHN1cHBvcnRlZCBieSBUY2wvVGsiCit9CisKK3NldCBndWlfZW5jb2RpbmcgW2VuY29kaW5nIHN5c3RlbV0KK2NhdGNoIHsKKyAgICBzZXQgZW5jIFtleGVjIGdpdCBjb25maWcgLS1nZXQgZ3VpLmVuY29kaW5nXQorICAgIGlmIHskZW5jIG5lIHt9fSB7CisJc2V0IHRjbGVuYyBbdGNsX2VuY29kaW5nICRlbmNdCisJaWYgeyR0Y2xlbmMgbmUge319IHsKKwkgICAgc2V0IGd1aV9lbmNvZGluZyAkdGNsZW5jCisJfSBlbHNlIHsKKwkgICAgcHV0cyBzdGRlcnIgIldhcm5pbmc6IGVuY29kaW5nICRlbmMgaXMgbm90IHN1cHBvcnRlZCBieSBUY2wvVGsiCisJfQorICAgIH0KK30KKworc2V0IGxvZ19zaG93cm9vdCB0cnVlCitjYXRjaCB7CisgICAgc2V0IGxvZ19zaG93cm9vdCBbZXhlYyBnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBsb2cuc2hvd3Jvb3RdCit9CisKK2lmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAiYXF1YSJ9IHsKKyAgICBzZXQgbWFpbmZvbnQge3tMdWNpZGEgR3JhbmRlfSA5fQorICAgIHNldCB0ZXh0Zm9udCB7TW9uYWNvIDl9CisgICAgc2V0IHVpZm9udCB7e0x1Y2lkYSBHcmFuZGV9IDkgYm9sZH0KK30gZWxzZWlmIHshW2NhdGNoIHs6OnRrOjpwa2djb25maWcgZ2V0IGZvbnRzeXN0ZW19IHhmdF0gJiYgJHhmdCBlcSAieGZ0In0geworICAgICMgZm9udGNvbmZpZyEKKyAgICBzZXQgbWFpbmZvbnQge3NhbnMgOX0KKyAgICBzZXQgdGV4dGZvbnQge21vbm9zcGFjZSA5fQorICAgIHNldCB1aWZvbnQge3NhbnMgOSBib2xkfQorfSBlbHNlIHsKKyAgICBzZXQgbWFpbmZvbnQge0hlbHZldGljYSA5fQorICAgIHNldCB0ZXh0Zm9udCB7Q291cmllciA5fQorICAgIHNldCB1aWZvbnQge0hlbHZldGljYSA5IGJvbGR9Cit9CitzZXQgdGFic3RvcCA4CitzZXQgZmluZG1lcmdlZmlsZXMgMAorc2V0IG1heGdyYXBocGN0IDUwCitzZXQgbWF4d2lkdGggMTYKK3NldCByZXZsaXN0b3JkZXIgMAorc2V0IGZhc3RkYXRlIDAKK3NldCB1cGFycm93bGVuIDUKK3NldCBkb3duYXJyb3dsZW4gNQorc2V0IG1pbmdhcGxlbiAxMDAKK3NldCBjbWl0bW9kZSAicGF0Y2giCitzZXQgd3JhcGNvbW1lbnQgIm5vbmUiCitzZXQgc2hvd25lYXJ0YWdzIDEKK3NldCBoaWRlcmVtb3RlcyAwCitzZXQgbWF4cmVmcyAyMAorc2V0IG1heGxpbmVsZW4gMjAwCitzZXQgc2hvd2xvY2FsY2hhbmdlcyAxCitzZXQgbGltaXRkaWZmcyAxCitzZXQgZGF0ZXRpbWVmb3JtYXQgIiVZLSVtLSVkICVIOiVNOiVTIgorc2V0IGF1dG9zZWxlY3QgMQorc2V0IGF1dG9zZWxsZW4gNDAKK3NldCBwZXJmaWxlX2F0dHJzIDAKK3NldCB3YW50X3R0ayAxCisKK2lmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAiYXF1YSJ9IHsKKyAgICBzZXQgZXh0ZGlmZnRvb2wgIm9wZW5kaWZmIgorfSBlbHNlIHsKKyAgICBzZXQgZXh0ZGlmZnRvb2wgIm1lbGQiCit9CisKK3NldCBjb2xvcnMge2dyZWVuIHJlZCBibHVlIG1hZ2VudGEgZGFya2dyZXkgYnJvd24gb3JhbmdlfQoraWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJ3aW4zMiJ9IHsKKyAgICBzZXQgdWljb2xvciBTeXN0ZW1CdXR0b25GYWNlCisgICAgc2V0IGJnY29sb3IgU3lzdGVtV2luZG93CisgICAgc2V0IGZnY29sb3IgU3lzdGVtQnV0dG9uVGV4dAorICAgIHNldCBzZWxlY3RiZ2NvbG9yIFN5c3RlbUhpZ2hsaWdodAorfSBlbHNlIHsKKyAgICBzZXQgdWljb2xvciBncmV5ODUKKyAgICBzZXQgYmdjb2xvciB3aGl0ZQorICAgIHNldCBmZ2NvbG9yIGJsYWNrCisgICAgc2V0IHNlbGVjdGJnY29sb3IgZ3JheTg1Cit9CitzZXQgZGlmZmNvbG9ycyB7cmVkICIjMDBhMDAwIiBibHVlfQorc2V0IGRpZmZjb250ZXh0IDMKK3NldCBpZ25vcmVzcGFjZSAwCitzZXQgd29yZGRpZmYgIiIKK3NldCBtYXJrYmdjb2xvciAiI2UwZTBmZiIKKworc2V0IGNpcmNsZWNvbG9ycyB7d2hpdGUgYmx1ZSBncmF5IGJsdWUgYmx1ZX0KKworIyBidXR0b24gZm9yIHBvcHBpbmcgdXAgY29udGV4dCBtZW51cworaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJhcXVhIn0geworICAgIHNldCBjdHhidXQgPEJ1dHRvbi0yPgorfSBlbHNlIHsKKyAgICBzZXQgY3R4YnV0IDxCdXR0b24tMz4KK30KKworIyMgRm9yIG1zZ2NhdCBsb2FkaW5nLCBmaXJzdCBsb2NhdGUgdGhlIGluc3RhbGxhdGlvbiBsb2NhdGlvbi4KK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEdJVEtfTVNHU0RJUildIH0geworICAgICMjIE1zZ3NkaXIgd2FzIG1hbnVhbGx5IHNldCBpbiB0aGUgZW52aXJvbm1lbnQuCisgICAgc2V0IGdpdGtfbXNnc2RpciAkOjplbnYoR0lUS19NU0dTRElSKQorfSBlbHNlIHsKKyAgICAjIyBMZXQncyBndWVzcyB0aGUgcHJlZml4IGZyb20gYXJndjAuCisgICAgc2V0IGdpdGtfcHJlZml4IFtmaWxlIGRpcm5hbWUgW2ZpbGUgZGlybmFtZSBbZmlsZSBub3JtYWxpemUgJGFyZ3YwXV1dCisgICAgc2V0IGdpdGtfbGliZGlyIFtmaWxlIGpvaW4gJGdpdGtfcHJlZml4IHNoYXJlIGdpdGsgbGliXQorICAgIHNldCBnaXRrX21zZ3NkaXIgW2ZpbGUgam9pbiAkZ2l0a19saWJkaXIgbXNnc10KKyAgICB1bnNldCBnaXRrX3ByZWZpeAorfQorCisjIyBJbnRlcm5hdGlvbmFsaXphdGlvbiAoaTE4bikgdGhyb3VnaCBtc2djYXQgYW5kIGdldHRleHQuIFNlZQorIyMgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dldHRleHQvbWFudWFsL2h0bWxfbm9kZS9UY2wuaHRtbAorcGFja2FnZSByZXF1aXJlIG1zZ2NhdAorbmFtZXNwYWNlIGltcG9ydCA6Om1zZ2NhdDo6bWMKKyMjIEFuZCBldmVudHVhbGx5IGxvYWQgdGhlIGFjdHVhbCBtZXNzYWdlIGNhdGFsb2cKKzo6bXNnY2F0OjptY2xvYWQgJGdpdGtfbXNnc2RpcgorCitjYXRjaCB7c291cmNlIH4vLmdpdGt9CisKK3BhcnNlZm9udCBtYWluZm9udCAkbWFpbmZvbnQKK2V2YWwgZm9udCBjcmVhdGUgbWFpbmZvbnQgW2ZvbnRmbGFncyBtYWluZm9udF0KK2V2YWwgZm9udCBjcmVhdGUgbWFpbmZvbnRib2xkIFtmb250ZmxhZ3MgbWFpbmZvbnQgMV0KKworcGFyc2Vmb250IHRleHRmb250ICR0ZXh0Zm9udAorZXZhbCBmb250IGNyZWF0ZSB0ZXh0Zm9udCBbZm9udGZsYWdzIHRleHRmb250XQorZXZhbCBmb250IGNyZWF0ZSB0ZXh0Zm9udGJvbGQgW2ZvbnRmbGFncyB0ZXh0Zm9udCAxXQorCitwYXJzZWZvbnQgdWlmb250ICR1aWZvbnQKK2V2YWwgZm9udCBjcmVhdGUgdWlmb250IFtmb250ZmxhZ3MgdWlmb250XQorCitzZXR1aSAkdWljb2xvcgorCitzZXRvcHRpb25zCisKKyMgY2hlY2sgdGhhdCB3ZSBjYW4gZmluZCBhIC5naXQgZGlyZWN0b3J5IHNvbWV3aGVyZS4uLgoraWYge1tjYXRjaCB7c2V0IGdpdGRpciBbZXhlYyBnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcl19XX0geworICAgIHNob3dfZXJyb3Ige30gLiBbbWMgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iXQorICAgIGV4aXQgMQorfQorCitzZXQgc2VsZWN0aGVhZCB7fQorc2V0IHNlbGVjdGhlYWRpZCB7fQorCitzZXQgcmV2dHJlZWFyZ3Mge30KK3NldCBjbWRsaW5lX2ZpbGVzIHt9CitzZXQgaSAwCitzZXQgcmV2dHJlZWFyZ3NjbWQge30KK2ZvcmVhY2ggYXJnICRhcmd2IHsKKyAgICBzd2l0Y2ggLWdsb2IgLS0gJGFyZyB7CisJIiIgeyB9CisJIi0tIiB7CisJICAgIHNldCBjbWRsaW5lX2ZpbGVzIFtscmFuZ2UgJGFyZ3YgW2V4cHIgeyRpICsgMX1dIGVuZF0KKwkgICAgYnJlYWsKKwl9CisJIi0tc2VsZWN0LWNvbW1pdD0qIiB7CisJICAgIHNldCBzZWxlY3RoZWFkIFtzdHJpbmcgcmFuZ2UgJGFyZyAxNiBlbmRdCisJfQorCSItLWFyZ3NjbWQ9KiIgeworCSAgICBzZXQgcmV2dHJlZWFyZ3NjbWQgW3N0cmluZyByYW5nZSAkYXJnIDEwIGVuZF0KKwl9CisJZGVmYXVsdCB7CisJICAgIGxhcHBlbmQgcmV2dHJlZWFyZ3MgJGFyZworCX0KKyAgICB9CisgICAgaW5jciBpCit9CisKK2lmIHskc2VsZWN0aGVhZCBlcSAiSEVBRCJ9IHsKKyAgICBzZXQgc2VsZWN0aGVhZCB7fQorfQorCitpZiB7JGkgPj0gW2xsZW5ndGggJGFyZ3ZdICYmICRyZXZ0cmVlYXJncyBuZSB7fX0geworICAgICMgbm8gLS0gb24gY29tbWFuZCBsaW5lLCBidXQgc29tZSBhcmd1bWVudHMgKG90aGVyIHRoYW4gLS1hcmdzY21kKQorICAgIGlmIHtbY2F0Y2ggeworCXNldCBmIFtldmFsIGV4ZWMgZ2l0IHJldi1wYXJzZSAtLW5vLXJldnMgLS1uby1mbGFncyAkcmV2dHJlZWFyZ3NdCisJc2V0IGNtZGxpbmVfZmlsZXMgW3NwbGl0ICRmICJcbiJdCisJc2V0IG4gW2xsZW5ndGggJGNtZGxpbmVfZmlsZXNdCisJc2V0IHJldnRyZWVhcmdzIFtscmFuZ2UgJHJldnRyZWVhcmdzIDAgZW5kLSRuXQorCSMgVW5mb3J0dW5hdGVseSBnaXQgcmV2LXBhcnNlIGRvZXNuJ3QgcHJvZHVjZSBhbiBlcnJvciB3aGVuCisJIyBzb21ldGhpbmcgaXMgYm90aCBhIHJldmlzaW9uIGFuZCBhIGZpbGVuYW1lLiAgVG8gYmUgY29uc2lzdGVudAorCSMgd2l0aCBnaXQgbG9nIGFuZCBnaXQgcmV2LWxpc3QsIGNoZWNrIHJldnRyZWVhcmdzIGZvciBmaWxlbmFtZXMuCisJZm9yZWFjaCBhcmcgJHJldnRyZWVhcmdzIHsKKwkgICAgaWYge1tmaWxlIGV4aXN0cyAkYXJnXX0geworCQlzaG93X2Vycm9yIHt9IC4gW21jICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvblwKKwkJCQkgYW5kIGZpbGVuYW1lIiAkYXJnXQorCQlleGl0IDEKKwkgICAgfQorCX0KKyAgICB9IGVycl19IHsKKwkjIHVuZm9ydHVuYXRlbHkgd2UgZ2V0IGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIgaW4gJGVyciwKKwkjIHNvIGxvb2sgZm9yICJmYXRhbDoiLgorCXNldCBpIFtzdHJpbmcgZmlyc3QgImZhdGFsOiIgJGVycl0KKwlpZiB7JGkgPiAwfSB7CisJICAgIHNldCBlcnIgW3N0cmluZyByYW5nZSAkZXJyIFtleHByIHskaSArIDZ9XSBlbmRdCisJfQorCXNob3dfZXJyb3Ige30gLiAiW21jICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6Il1cbiRlcnIiCisJZXhpdCAxCisgICAgfQorfQorCitzZXQgbnVsbGlkICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorc2V0IG51bGxpZDIgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiCitzZXQgbnVsbGZpbGUgIi9kZXYvbnVsbCIKKworc2V0IGhhdmVfdGs4NSBbZXhwciB7W3BhY2thZ2UgdmNvbXBhcmUgJHRrX3ZlcnNpb24gIjguNSJdID49IDB9XQoraWYgeyFbaW5mbyBleGlzdHMgaGF2ZV90dGtdfSB7CisgICAgc2V0IGhhdmVfdHRrIFtsbGVuZ3RoIFtpbmZvIGNvbW1hbmRzIDo6dHRrOjpzdHlsZV1dCit9CitzZXQgdXNlX3R0ayBbZXhwciB7JGhhdmVfdHRrICYmICR3YW50X3R0a31dCitzZXQgTlMgW2V4cHIgeyR1c2VfdHRrID8gInR0ayIgOiAiIn1dCisKK3JlZ2V4cCB7XmdpdCB2ZXJzaW9uIChbXGQuXSpcZCl9IFtleGVjIGdpdCB2ZXJzaW9uXSBfIGdpdF92ZXJzaW9uCisKK3NldCBzaG93X25vdGVzIHt9CitpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJGdpdF92ZXJzaW9uICIxLjYuNi4yIl0gPj0gMH0geworICAgIHNldCBzaG93X25vdGVzICItLXNob3ctbm90ZXMiCit9CisKK3NldCBhcHBuYW1lICJnaXRrIgorCitzZXQgcnVucSB7fQorc2V0IGhpc3Rvcnkge30KK3NldCBoaXN0b3J5aW5kZXggMAorc2V0IGZoX3NlcmlhbCAwCitzZXQgbmhsX25hbWVzIHt9CitzZXQgaGlnaGxpZ2h0X3BhdGhzIHt9CitzZXQgZmluZHBhdHRlcm4ge30KK3NldCBzZWFyY2hkaXJuIC1mb3J3YXJkcworc2V0IGJvbGRpZHMge30KK3NldCBib2xkbmFtZWlkcyB7fQorc2V0IGRpZmZlbGlkZSB7MCAwfQorc2V0IG1hcmtpbmdtYXRjaGVzIDAKK3NldCBsaW5rZW50ZXJjb3VudCAwCitzZXQgbmVlZF9yZWRpc3BsYXkgMAorc2V0IG5yb3dzX2RyYXduIDAKK3NldCBmaXJzdHRhYnN0b3AgMAorCitzZXQgbmV4dHZpZXdudW0gMQorc2V0IGN1cnZpZXcgMAorc2V0IHNlbGVjdGVkdmlldyAwCitzZXQgc2VsZWN0ZWRobHZpZXcgW21jICJOb25lIl0KK3NldCBoaWdobGlnaHRfcmVsYXRlZCBbbWMgIk5vbmUiXQorc2V0IGhpZ2hsaWdodF9maWxlcyB7fQorc2V0IHZpZXdmaWxlcygwKSB7fQorc2V0IHZpZXdwZXJtKDApIDAKK3NldCB2aWV3YXJncygwKSB7fQorc2V0IHZpZXdhcmdzY21kKDApIHt9CisKK3NldCBzZWxlY3RlZGxpbmUge30KK3NldCBudW1jb21taXRzIDAKK3NldCBsb2dpbnN0YW5jZSAwCitzZXQgY21kbGluZW9rIDAKK3NldCBzdG9wcGVkIDAKK3NldCBzdHVmZnNhdmVkIDAKK3NldCBwYXRjaG51bSAwCitzZXQgbHNlcmlhbCAwCitzZXQgaGFzd29ya3RyZWUgW2hhc3dvcmt0cmVlXQorc2V0IGNkdXAge30KK2lmIHtbZXhwciB7W2V4ZWMgZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWVdID09ICJ0cnVlIn1dfSB7CisgICAgc2V0IGNkdXAgW2V4ZWMgZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cF0KK30KK3NldCB3b3JrdHJlZSBbZXhlYyBnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbF0KK3NldGNvb3JkcworbWFrZXdpbmRvdworY2F0Y2ggeworICAgIGltYWdlIGNyZWF0ZSBwaG90byBnaXRsb2dvICAgICAgLXdpZHRoIDE2IC1oZWlnaHQgMTYKKworICAgIGltYWdlIGNyZWF0ZSBwaG90byBnaXRsb2dvbWludXMgLXdpZHRoICA0IC1oZWlnaHQgIDIKKyAgICBnaXRsb2dvbWludXMgcHV0ICNDMDAwMDAgLXRvIDAgMCA0IDIKKyAgICBnaXRsb2dvIGNvcHkgZ2l0bG9nb21pbnVzIC10byAgMSA1CisgICAgZ2l0bG9nbyBjb3B5IGdpdGxvZ29taW51cyAtdG8gIDYgNQorICAgIGdpdGxvZ28gY29weSBnaXRsb2dvbWludXMgLXRvIDExIDUKKyAgICBpbWFnZSBkZWxldGUgZ2l0bG9nb21pbnVzCisKKyAgICBpbWFnZSBjcmVhdGUgcGhvdG8gZ2l0bG9nb3BsdXMgIC13aWR0aCAgNCAtaGVpZ2h0ICA0CisgICAgZ2l0bG9nb3BsdXMgIHB1dCAjMDA4MDAwIC10byAxIDAgMyA0CisgICAgZ2l0bG9nb3BsdXMgIHB1dCAjMDA4MDAwIC10byAwIDEgNCAzCisgICAgZ2l0bG9nbyBjb3B5IGdpdGxvZ29wbHVzICAtdG8gIDEgOQorICAgIGdpdGxvZ28gY29weSBnaXRsb2dvcGx1cyAgLXRvICA2IDkKKyAgICBnaXRsb2dvIGNvcHkgZ2l0bG9nb3BsdXMgIC10byAxMSA5CisgICAgaW1hZ2UgZGVsZXRlIGdpdGxvZ29wbHVzCisKKyAgICBpbWFnZSBjcmVhdGUgcGhvdG8gZ2l0bG9nbzMyICAgIC13aWR0aCAzMiAtaGVpZ2h0IDMyCisgICAgZ2l0bG9nbzMyIGNvcHkgZ2l0bG9nbyAtem9vbSAyIDIKKworICAgIHdtIGljb25waG90byAuIC1kZWZhdWx0IGdpdGxvZ28gZ2l0bG9nbzMyCit9CisjIHdhaXQgZm9yIHRoZSB3aW5kb3cgdG8gYmVjb21lIHZpc2libGUKK3Rrd2FpdCB2aXNpYmlsaXR5IC4KK3dtIHRpdGxlIC4gIiRhcHBuYW1lOiBbcmVwb25hbWVdIgordXBkYXRlCityZWFkcmVmcworCitpZiB7JGNtZGxpbmVfZmlsZXMgbmUge30gfHwgJHJldnRyZWVhcmdzIG5lIHt9IHx8ICRyZXZ0cmVlYXJnc2NtZCBuZSB7fX0geworICAgICMgY3JlYXRlIGEgdmlldyBmb3IgdGhlIGZpbGVzL2RpcnMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAgICBzZXQgY3VydmlldyAxCisgICAgc2V0IHNlbGVjdGVkdmlldyAxCisgICAgc2V0IG5leHR2aWV3bnVtIDIKKyAgICBzZXQgdmlld25hbWUoMSkgW21jICJDb21tYW5kIGxpbmUiXQorICAgIHNldCB2aWV3ZmlsZXMoMSkgJGNtZGxpbmVfZmlsZXMKKyAgICBzZXQgdmlld2FyZ3MoMSkgJHJldnRyZWVhcmdzCisgICAgc2V0IHZpZXdhcmdzY21kKDEpICRyZXZ0cmVlYXJnc2NtZAorICAgIHNldCB2aWV3cGVybSgxKSAwCisgICAgc2V0IHZkYXRlbW9kZSgxKSAwCisgICAgYWRkdmlld21lbnUgMQorICAgIC5iYXIudmlldyBlbnRyeWNvbmYgW21jYSAiRWRpdCB2aWV3Li4uIl0gLXN0YXRlIG5vcm1hbAorICAgIC5iYXIudmlldyBlbnRyeWNvbmYgW21jYSAiRGVsZXRlIHZpZXciXSAtc3RhdGUgbm9ybWFsCit9CisKK2lmIHtbaW5mbyBleGlzdHMgcGVybXZpZXdzXX0geworICAgIGZvcmVhY2ggdiAkcGVybXZpZXdzIHsKKwlzZXQgbiAkbmV4dHZpZXdudW0KKwlpbmNyIG5leHR2aWV3bnVtCisJc2V0IHZpZXduYW1lKCRuKSBbbGluZGV4ICR2IDBdCisJc2V0IHZpZXdmaWxlcygkbikgW2xpbmRleCAkdiAxXQorCXNldCB2aWV3YXJncygkbikgW2xpbmRleCAkdiAyXQorCXNldCB2aWV3YXJnc2NtZCgkbikgW2xpbmRleCAkdiAzXQorCXNldCB2aWV3cGVybSgkbikgMQorCWFkZHZpZXdtZW51ICRuCisgICAgfQorfQorCitpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIn0geworICAgIGZvY3VzIC1mb3JjZSAuCit9CisKK2dldGNvbW1pdHMge30KKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIG1vZGU6IHRjbAorIyBpbmRlbnQtdGFicy1tb2RlOiB0CisjIHRhYi13aWR0aDogOAorIyBFbmQ6CmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby8uZ2l0aWdub3JlIGIvZ2l0ay1naXQvcG8vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzU4ZGQxCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACisqLm1zZwpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vZGUucG8gYi9naXRrLWdpdC9wby9kZS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDE5NGEzCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vZGUucG8KQEAgLTAsMCArMSwxMjc4IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdGsgdG8gR2VybWFuLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgUGF1bCBNYWNrZXJyYXMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjCisjIENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT4sIDIwMDcuCisjIEZyZWRlcmlrIFNjaHdhcnplciA8c2Nod2FyemVyZkBnbWFpbC5jb20+LCAyMDA4LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNyAyMDoyMSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMS0yNyAyMDoyNyswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2VybWFuXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdGs6MTE1Cittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJMaXN0ZSBkZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gbmljaHQgZ2VmdW5kZW46IgorCisjOiBnaXRrOjI3NAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVyIFZlcnNpb25lbjoiCisKKyM6IGdpdGs6MzI5Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiBkZXMgLS1hcmdzY21kLUtvbW1hbmRvczoiCisKKyM6IGdpdGs6MzQyCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogRXMgd3VyZGUgLS1tZXJnZSBhbmdlZ2ViZW4sIGFiZXIgZXMgZXhpc3RpZXJlbiAiCisia2VpbmUgbmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4uIgorCisjOiBnaXRrOjM0NQorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogRXMgd3VyZGUgLS1tZXJnZSBhbmdlZ2ViZW4sIGFiZXIgZXMgc2luZCBrZWluZSAiCisibmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gaW4gZGVyIERhdGVpYXVzd2FobC4iCisKKyM6IGdpdGs6MzY3IGdpdGs6NTE0Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiDCu2dpdCBsb2fCqzoiCisKKyM6IGdpdGs6Mzg1IGdpdGs6NTMwCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGVzZW4iCisKKyM6IGdpdGs6NDQ1IGdpdGs6NDI2MQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiVmVyc2lvbmVuIHdlcmRlbiBnZWxlc2VuIC4uLiIKKworIzogZ2l0azo0NDggZ2l0azoxNTc4IGdpdGs6NDI2NAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIktlaW5lIFZlcnNpb25lbiBhdXNnZXfDpGhsdCIKKworIzogZ2l0azoxNDU0Cittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJBdXNnYWJlIHZvbiDCu2dpdCBsb2fCqyBrYW5uIG5pY2h0IGVya2FubnQgd2VyZGVuOiIKKworIzogZ2l0azoxNjc0Cittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiS2VpbmUgVmVyc2lvbnNpbmZvcm1hdGlvbiB2ZXJmw7xnYmFyIgorCisjOiBnaXRrOjE4MTYKK21zZ2lkICJtYyIKK21zZ3N0ciAibWMiCisKKyM6IGdpdGs6MTg1MSBnaXRrOjQwNTQgZ2l0azo5MDQ0IGdpdGs6MTA1ODUgZ2l0azoxMDgwNAorbXNnaWQgIk9LIgorbXNnc3RyICJPayIKKworIzogZ2l0azoxODUzIGdpdGs6NDA1NiBnaXRrOjg2MzQgZ2l0azo4NzEzIGdpdGs6ODgyOCBnaXRrOjg4NzcgZ2l0azo5MDQ2CisjOiBnaXRrOjEwNTg2IGdpdGs6MTA4MDUKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFiYnJlY2hlbiIKKworIzogZ2l0azoxOTc1Cittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJBa3R1YWxpc2llcmVuIgorCisjOiBnaXRrOjE5NzYKK21zZ2lkICJSZWxvYWQiCittc2dzdHIgIk5ldSBsYWRlbiIKKworIzogZ2l0azoxOTc3Cittc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCittc2dzdHIgIlp3ZWlnZSBuZXUgbGFkZW4iCisKKyM6IGdpdGs6MTk3OAorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiWndlaWdlL01hcmtpZXJ1bmdlbiBhdWZsaXN0ZW4iCisKKyM6IGdpdGs6MTk4MAorbXNnaWQgIlN0YXJ0IGdpdCBndWkiCittc2dzdHIgIsK7Z2l0IGd1acKrIHN0YXJ0ZW4iCisKKyM6IGdpdGs6MTk4MgorbXNnaWQgIlF1aXQiCittc2dzdHIgIkJlZW5kZW4iCisKKyM6IGdpdGs6MTk3NAorbXNnaWQgIkZpbGUiCittc2dzdHIgIkRhdGVpIgorCisjOiBnaXRrOjE5ODYKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAiRWluc3RlbGx1bmdlbiIKKworIzogZ2l0azoxOTg1Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiQmVhcmJlaXRlbiIKKworIzogZ2l0azoxOTkwCittc2dpZCAiTmV3IHZpZXcuLi4iCittc2dzdHIgIk5ldWUgQW5zaWNodCAuLi4iCisKKyM6IGdpdGs6MTk5MQorbXNnaWQgIkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiQW5zaWNodCBiZWFyYmVpdGVuIC4uLiIKKworIzogZ2l0azoxOTkyCittc2dpZCAiRGVsZXRlIHZpZXciCittc2dzdHIgIkFuc2ljaHQgZW50ZmVybmVuIgorCisjOiBnaXRrOjE5OTQKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgIkFsbGUgRGF0ZWllbiIKKworIzogZ2l0azoxOTg5IGdpdGs6MzgwOAorbXNnaWQgIlZpZXciCittc2dzdHIgIkFuc2ljaHQiCisKKyM6IGdpdGs6MTk5OSBnaXRrOjIwMDkgZ2l0azoyNzgwCittc2dpZCAiQWJvdXQgZ2l0ayIKK21zZ3N0ciAiw5xiZXIgZ2l0ayIKKworIzogZ2l0azoyMDAwIGdpdGs6MjAxNAorbXNnaWQgIktleSBiaW5kaW5ncyIKK21zZ3N0ciAiVGFzdGVua8O8cnplbCIKKworIzogZ2l0azoxOTk4IGdpdGs6MjAxMworbXNnaWQgIkhlbHAiCittc2dzdHIgIkhpbGZlIgorCisjOiBnaXRrOjIwOTEgZ2l0azo4MTEwCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIxMjIKK21zZ2lkICJSb3ciCittc2dzdHIgIlplaWxlIgorCisjOiBnaXRrOjIxNjAKK21zZ2lkICJGaW5kIgorbXNnc3RyICJTdWNoZSIKKworIzogZ2l0azoyMTYxCittc2dpZCAibmV4dCIKK21zZ3N0ciAibsOkY2hzdGUiCisKKyM6IGdpdGs6MjE2MgorbXNnaWQgInByZXYiCittc2dzdHIgInZvcmlnZSIKKworIzogZ2l0azoyMTYzCittc2dpZCAiY29tbWl0IgorbXNnc3RyICJWZXJzaW9uIG5hY2giCisKKyM6IGdpdGs6MjE2NiBnaXRrOjIxNjggZ2l0azo0NDIyIGdpdGs6NDQ0NSBnaXRrOjQ0NjkgZ2l0azo2NDEwIGdpdGs6NjQ4MgorIzogZ2l0azo2NTY2Cittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgIkJlc2NocmVpYnVuZzoiCisKKyM6IGdpdGs6MjE2OSBnaXRrOjMyOTAgZ2l0azozMjk1IGdpdGs6NDQ5NworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAiRGF0ZWllbjoiCisKKyM6IGdpdGs6MjE3MCBnaXRrOjQ1MDIKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAiw4RuZGVydW5nZW46IgorCisjOiBnaXRrOjIxNzkgZ2l0azoyMTgxCittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YWt0IgorCisjOiBnaXRrOjIxODEgZ2l0azo0NTc3IGdpdGs6NjM3OAorbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIktlaW4gR3Jvw58vS2xlaW4iCisKKyM6IGdpdGs6MjE4MSBnaXRrOjQ0NzEgZ2l0azo0NTc1IGdpdGs6NjM3NAorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiUmVnZXhwIgorCisjOiBnaXRrOjIxODMgZ2l0azoyMTg0IGdpdGs6NDU5NiBnaXRrOjQ2MjYgZ2l0azo0NjMzIGdpdGs6NjUwMiBnaXRrOjY1NzAKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJBbGxlIEZlbGRlciIKKworIzogZ2l0azoyMTg0IGdpdGs6NDU5NCBnaXRrOjQ2MjYgZ2l0azo2NDQxCittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIsOcYmVyc2NocmlmdCIKKworIzogZ2l0azoyMTg1IGdpdGs6NDU5NCBnaXRrOjY0NDEgZ2l0azo2NTcwIGdpdGs6NzAwMworbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJCZXNjaHJlaWJ1bmciCisKKyM6IGdpdGs6MjE4NSBnaXRrOjQ1OTQgZ2l0azo0NTk4IGdpdGs6NDYzMyBnaXRrOjY0NDEgZ2l0azo2OTM4IGdpdGs6ODI4NQorIzogZ2l0azo4MzAwCittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRvciIKKworIzogZ2l0azoyMTg1IGdpdGs6NDU5NCBnaXRrOjY0NDEgZ2l0azo2OTQwCittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICJFaW50cmFnZW5kZXIiCisKKyM6IGdpdGs6MjIxNgorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiU3VjaGVuIgorCisjOiBnaXRrOjIyMjQKK21zZ2lkICJEaWZmIgorbXNnc3RyICJWZXJnbGVpY2giCisKKyM6IGdpdGs6MjIyNgorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICJBbHRlIFZlcnNpb24iCisKKyM6IGdpdGs6MjIyOAorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJOZXVlIFZlcnNpb24iCisKKyM6IGdpdGs6MjIzMAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIktvbnRleHR6ZWlsZW4iCisKKyM6IGdpdGs6MjI0MAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIkxlZXJ6ZWljaGVuw6RuZGVydW5nZW4gaWdub3JpZXJlbiIKKworIzogZ2l0azoyMjk5Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIlBhdGNoIgorCisjOiBnaXRrOjIzMDEKK21zZ2lkICJUcmVlIgorbXNnc3RyICJCYXVtIgorCisjOiBnaXRrOjI0NTYgZ2l0azoyNDczCittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJWZXJnbGVpY2g6IGRpZXNlIC0+IGdld8OkaGx0ZSIKKworIzogZ2l0azoyNDU3IGdpdGs6MjQ3NAorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiVmVyZ2xlaWNoOiBnZXfDpGhsdGUgLT4gZGllc2UiCisKKyM6IGdpdGs6MjQ1OCBnaXRrOjI0NzUKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJQYXRjaCBlcnN0ZWxsZW4iCisKKyM6IGdpdGs6MjQ1OSBnaXRrOjg2OTIKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJNYXJraWVydW5nIGVyc3RlbGxlbiIKKworIzogZ2l0azoyNDYwIGdpdGs6ODgwOAorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJWZXJzaW9uIGluIERhdGVpIHNjaHJlaWJlbiIKKworIzogZ2l0azoyNDYxIGdpdGs6ODg2NQorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJOZXVlbiBad2VpZyBlcnN0ZWxsZW4iCisKKyM6IGdpdGs6MjQ2MgorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJEaWVzZSBWZXJzaW9uIHBmbMO8Y2tlbiIKKworIzogZ2l0azoyNDYzCittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiSEVBRC1ad2VpZyBhdWYgZGllc2UgVmVyc2lvbiB6dXLDvGNrc2V0emVuIgorCisjOiBnaXRrOjI0NjQKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJMZXNlemVpY2hlbiBzZXR6ZW4iCisKKyM6IGdpdGs6MjQ2NQorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJadW0gTGVzZXplaWNoZW4iCisKKyM6IGdpdGs6MjQ2NgorbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICJBYmvDtm1tbGluZyB2b24gTGVzZXplaWNoZW4gdW5kIGRpZXNlciBWZXJzaW9uIGZpbmRlbiIKKworIzogZ2l0azoyNDY3Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIk1pdCBMZXNlemVpY2hlbiB2ZXJnbGVpY2hlbiIKKworIzogZ2l0azoyNDgxCittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJBdWYgZGllc2VuIFp3ZWlnIHVtc3RlbGxlbiIKKworIzogZ2l0azoyNDgyCittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICJad2VpZyBsw7ZzY2hlbiIKKworIzogZ2l0azoyNDg5Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICJEaWVzZW4gYXVjaCBoZXJ2b3JoZWJlbiIKKworIzogZ2l0azoyNDkwCittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiTnVyIGRpZXNlbiBoZXJ2b3JoZWJlbiIKKworIzogZ2l0azoyNDkxCittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSIKKworIzogZ2l0azoyNDkyCittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQW5ub3RpZXJlbiBkZXIgRWx0ZXJudmVyc2lvbiIKKworIzogZ2l0azoyNDk5Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJIZXJrdW5mdCBkaWVzZXIgWmVpbGUgYW56ZWlnZW4iCisKKyM6IGdpdGs6MjUwMAorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRGllc2UgWmVpbGUgYW5ub3RpZXJlbiAowrtnaXQgZ3VpIGJsYW1lwqspIgorCisjOiBnaXRrOjI3ODIKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSBlaW5lIFZpc3VhbGlzaWVydW5nIGRlciBHaXQtSGlzdG9yaWVcbiIKKyJcbiIKKyJDb3B5cmlnaHQgXFx1MDBhOSAyMDA1LTIwMTAgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJCZW51dHp1bmcgdW5kIFdlaXRlcnZlcmJyZWl0dW5nIGdlbcOkw58gZGVuIEJlZGluZ3VuZ2VuIGRlciBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKKworIzogZ2l0azoyNzkwIGdpdGs6Mjg1NCBnaXRrOjkyMzAKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiU2NobGllw59lbiIKKworIzogZ2l0azoyODExCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIkdpdGstVGFzdGF0dXJiZWxlZ3VuZyIKKworIzogZ2l0azoyODE0Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJHaXRrLVRhc3RhdHVyYmVsZWd1bmc6IgorCisjOiBnaXRrOjI4MTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdEJlZW5kZW4iCisKKyM6IGdpdGs6MjgxNworbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPFBvczE+XHRcdFp1ciBuZXVlc3RlbiBWZXJzaW9uIHNwcmluZ2VuIgorCisjOiBnaXRrOjI4MTgKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kZT5cdFx0WnVyIMOkbHRlc3RlbiBWZXJzaW9uIHNwcmluZ2VuIgorCisjOiBnaXRrOjI4MTkKK21zZ2lkICI8VXA+LCBwLCBpXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxIb2NoPiwgcCwgaVx0TsOkY2hzdGUgbmV1ZXJlIFZlcnNpb24iCisKKyM6IGdpdGs6MjgyMAorbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxSdW50ZXI+LCBuLCBrXHROw6RjaHN0ZSDDpGx0ZXJlIFZlcnNpb24iCisKKyM6IGdpdGs6MjgyMQorbXNnaWQgIjxMZWZ0Piwgeiwgalx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMaW5rcz4sIHosIGpcdEVpbmUgVmVyc2lvbiB6dXLDvGNrZ2VoZW4iCisKKyM6IGdpdGs6MjgyMgorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmVjaHRzPiwgeCwgbFx0RWluZSBWZXJzaW9uIHdlaXRlcmdlaGVuIgorCisjOiBnaXRrOjI4MjMKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPEJpbGRIb2NoPlx0RWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjI4MjQKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxCaWxkUnVudGVyPlx0RWluZSBTZWl0ZSBuYWNoIHVudGVuIGJsw6R0dGVybiIKKworIzogZ2l0azoyODI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtUG9zMT5cdFp1bSBvYmVyZW4gRW5kZSBkZXIgVmVyc2lvbnNsaXN0ZSBibMOkdHRlcm4iCisKKyM6IGdpdGs6MjgyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kZT5cdFp1bSB1bnRlcmVuIEVuZGUgZGVyIFZlcnNpb25zbGlzdGUgYmzDpHR0ZXJuIgorCisjOiBnaXRrOjI4MjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1Ib2NoPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFplaWxlIG5hY2ggb2JlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MjgyOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1SdW50ZXI+XHRWZXJzaW9uc2xpc3RlIGVpbmUgWmVpbGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MjgyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1CaWxkSG9jaD5cdFZlcnNpb25zbGlzdGUgZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjI4MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLUJpbGRSdW50ZXI+XHRWZXJzaW9uc2xpc3RlIGVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MjgzMQorbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKK21zZ3N0ciAiPFVtc2NoYWx0LUhvY2g+XHRSw7xja3fDpHJ0cyBzdWNoZW4gKG5hY2ggb2JlbjsgbmV1ZXJlIFZlcnNpb25lbikiCisKKyM6IGdpdGs6MjgzMgorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8VW1zY2hhbHQtUnVudGVyPiBTdWNoZW4gKG5hY2ggdW50ZW47IMOkbHRlcmUgVmVyc2lvbmVuKSIKKworIzogZ2l0azoyODMzCittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxFbnRmPiwgYlx0XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjI4MzQKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEzDtnNjaHRhc3RlPlx0VmVyZ2xlaWNoIGVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKKworIzogZ2l0azoyODM1Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxMZWVydGFzdGU+XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIHVudGVuIGJsw6R0dGVybiIKKworIzogZ2l0azoyODM2Cittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdFZlcmdsZWljaCB1bSAxOCBaZWlsZW4gbmFjaCBvYmVuIGJsw6R0dGVybiIKKworIzogZ2l0azoyODM3Cittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0VmVyZ2xlaWNoIHVtIDE4IFplaWxlbiBuYWNoIHVudGVuIGJsw6R0dGVybiIKKworIzogZ2l0azoyODM4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRTdWNoZW4iCisKKyM6IGdpdGs6MjgzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRXZWl0ZXJzdWNoZW4iCisKKyM6IGdpdGs6Mjg0MAorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxFaW5nYWJldGFzdGU+XHRXZWl0ZXJzdWNoZW4iCisKKyM6IGdpdGs6Mjg0MQorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0VGFzdGF0dXJmb2t1cyBpbnMgU3VjaGZlbGQiCisKKyM6IGdpdGs6Mjg0MgorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRSw7xja3fDpHJ0cyB3ZWl0ZXJzdWNoZW4iCisKKyM6IGdpdGs6Mjg0MworbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0VmVyZ2xlaWNoIHp1ciBuw6RjaHN0ZW4gRGF0ZWkgYmzDpHR0ZXJuIgorCisjOiBnaXRrOjI4NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRXZWl0ZXJzdWNoZW4gaW0gVmVyZ2xlaWNoIgorCisjOiBnaXRrOjI4NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0UsO8Y2t3w6RydHMgd2VpdGVyc3VjaGVuIGltIFZlcmdsZWljaCIKKworIzogZ2l0azoyODQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU51bW1lcmJsb2NrLVBsdXM+XHRTY2hyaWZ0IHZlcmdyw7bDn2VybiIKKworIzogZ2l0azoyODQ3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1QbHVzPlx0U2NocmlmdCB2ZXJncsO2w59lcm4iCisKKyM6IGdpdGs6Mjg0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW1tZXJuYmxvY2stTWludXM+IFNjaHJpZnQgdmVya2xlaW5lcm4iCisKKyM6IGdpdGs6Mjg0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU1pbnVzPlx0U2NocmlmdCB2ZXJrbGVpbmVybiIKKworIzogZ2l0azoyODUwCittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0QWt0dWFsaXNpZXJlbiIKKworIzogZ2l0azozMzA1IGdpdGs6MzMxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgdGVtcG9yw6RyZW4gVmVyemVpY2huaXNzZXMgwrslc8KrOiIKKworIzogZ2l0azozMzI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkZlaGxlciBiZWltIEhvbGVuIHZvbiDCuyVzwqsgdm9uIMK7JXPCqzoiCisKKyM6IGdpdGs6MzM5MAorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiS29tbWFuZG8gZmVobGdlc2NobGFnZW46IgorCisjOiBnaXRrOjM1MzkKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiVmVyc2lvbiBuaWNodCBnZWZ1bmRlbiIKKworIzogZ2l0azozNTUzCittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiBLb21tYW5kbyBmZWhsZ2VzY2hsYWdlbjoiCisKKyM6IGdpdGs6MzU4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzLVNwaXR6ZSBrb25udGUgbmljaHQgZ2VsZXNlbiB3ZXJkZW46ICVzIgorCisjOiBnaXRrOjM1OTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gZGVyIEJlcmVpdHN0ZWxsdW5nICjCu2luZGV4wqspOiAlcyIKKworIzogZ2l0azozNjE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiwrtnaXQgYmxhbWXCqyBrb25udGUgbmljaHQgZ2VzdGFydGV0IHdlcmRlbjogJXMiCisKKyM6IGdpdGs6MzYyMCBnaXRrOjY0MDkKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIlN1Y2hlbiIKKworIzogZ2l0azozNjUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiDCu2dpdCBibGFtZcKrOiAlcyIKKworIzogZ2l0azozNjgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAiIgorIkRpZXNlIFplaWxlIHN0YW1tdCBhdXMgVmVyc2lvbiAlcywgZGllIG5pY2h0IGluIGRpZXNlciBBbnNpY2h0IGdlemVpZ3Qgd2lyZCIKKworIzogZ2l0azozNjk0Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSBmZWhsZ2VzY2hsYWdlbjoiCisKKyM6IGdpdGs6MzgxMgorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJHaXRrLUFuc2ljaHRlbiIKKworIzogZ2l0azozODE2Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJEaWVzZSBBbnNpY2h0IHNwZWljaGVybiIKKworIzogZ2l0azozODE3Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAiWndlaWdlL01hcmtpZXJ1bmdlbiAoZHVyY2ggTGVlcnplaWNoZW4gZ2V0cmVubnRlIExpc3RlKToiCisKKyM6IGdpdGs6MzgxOAorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIlp3ZWlnZS9NYXJraWVydW5nZW46IgorCisjOiBnaXRrOjM4MTkKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiQWxsZSBNYXJraWVydW5nZW4gdW5kIFp3ZWlnZSIKKworIzogZ2l0azozODIwCittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIkFsbGUgKGxva2FsZW4pIFp3ZWlnZSIKKworIzogZ2l0azozODIxCittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIkFsbGUgTWFya2llcnVuZ2VuIgorCisjOiBnaXRrOjM4MjIKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJBbGxlIMOcYmVybmFobWV6d2VpZ2UiCisKKyM6IGdpdGs6MzgyMworbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIlZlcnNpb25zaW5mb3JtYXRpb25lbiAocmVndWzDpHJlIEF1c2Ryw7xja2UpOiIKKworIzogZ2l0azozODI0Cittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0b3I6IgorCisjOiBnaXRrOjM4MjUKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJFaW50cmFnZW5kZXI6IgorCisjOiBnaXRrOjM4MjYKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlZlcnNpb25zYmVzY2hyZWlidW5nOiIKKworIzogZ2l0azozODI3Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIkFsbGUgVmVyc2lvbnNpbmZvcm1hdGlvbmVuLUtyaXRlcmllbiBlcmbDvGxsZW4iCisKKyM6IGdpdGs6MzgyOAorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICJEYXRlaWVuOiIKKworIzogZ2l0azozODI5Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJaZWljaGVua2V0dGUiCisKKyM6IGdpdGs6MzgzMAorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiUmVndWzDpHJlciBBdXNkcnVjayIKKworIzogZ2l0azozODMxCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIlN1Y2hhdXNkcnVjazoiCisKKyM6IGdpdGs6MzgzMgorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiRGF0dW0gKMK7MiB3ZWVrcyBhZ2/CqywgwrsyMDA5LTAzLTE3IDE1OjI3OjM4wqssIMK7TWFyY2ggMTcsIDIwMDkgMTU6Mjc6MzjCqykiCisKKyM6IGdpdGs6MzgzMworbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiVm9uOiIKKworIzogZ2l0azozODM0Cittc2dpZCAiVW50aWw6IgorbXNnc3RyICJCaXM6IgorCisjOiBnaXRrOjM4MzUKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiVmVyc2lvbnNhbnphaGwgYmVncmVuemVuIG9kZXIgZWluaWdlIMO8YmVyc3ByaW5nZW4gKGdhbnp6YWhsaWdlciBXZXJ0KToiCisKKyM6IGdpdGs6MzgzNgorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiQW56ZWlnZW46IgorCisjOiBnaXRrOjM4MzcKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIsOcYmVyc3ByaW5nZW46IgorCisjOiBnaXRrOjM4MzgKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJTb25zdGlnZXM6IgorCisjOiBnaXRrOjM4MzkKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIlN0cmVuZyBuYWNoIERhdHVtIHNvcnRpZXJlbiIKKworIzogZ2l0azozODQwCittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIlp3ZWlnLVNlaXRlbiBtYXJraWVyZW4iCisKKyM6IGdpdGs6Mzg0MQorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiQXVmIGVyc3RlIEVsdGVybnZlcnNpb24gYmVzY2hyw6Rua2VuIgorCisjOiBnaXRrOjM4NDIKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAiRWluZmFjaGUgSGlzdG9yaWUiCisKKyM6IGdpdGs6Mzg0MworbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJadXPDpHR6bGljaGUgQXJndW1lbnRlIGbDvHIgwrtnaXQgbG9nwqs6IgorCisjOiBnaXRrOjM4NDQKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAiRm9sZ2VuZGUgRGF0ZWllbiB1bmQgVmVyemVpY2huaXNzZSBhbnplaWdlbiAoZWluZSBwcm8gWmVpbGUpOiIKKworIzogZ2l0azozODQ1Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIlZlcnNpb25zbGlzdGUgZHVyY2ggZm9sZ2VuZGVzIEtvbW1hbmRvIGVyemV1Z2VuIGxhc3NlbjoiCisKKyM6IGdpdGs6Mzk2NworbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogQW5zaWNodCBiZWFyYmVpdGVuIgorCisjOiBnaXRrOjM5NzUKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAiLS0gQXVzd2FobCBkZXIgYW5nZXplaWd0ZW4gVmVyc2lvbmVuIgorCisjOiBnaXRrOjM5ODAKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIkFuc2ljaHRzbmFtZSIKKworIzogZ2l0azo0MDU1Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQW53ZW5kZW4gKEY1KSIKKworIzogZ2l0azo0MDkzCittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJGZWhsZXIgaW4gZGVuIGF1c2dld8OkaGx0ZW4gVmVyc2lvbmVuOiIKKworIzogZ2l0azo0MTQ2IGdpdGs6NDE5OCBnaXRrOjQ2NDYgZ2l0azo0NjYwIGdpdGs6NTkyMSBnaXRrOjExNTM0IGdpdGs6MTE1MzUKK21zZ2lkICJOb25lIgorbXNnc3RyICJLZWluZSIKKworIzogZ2l0azo0NTk0IGdpdGs6NjQ0MSBnaXRrOjgyODcgZ2l0azo4MzAyCittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRGF0dW0iCisKKyM6IGdpdGs6NDU5NCBnaXRrOjY0NDEKK21zZ2lkICJDRGF0ZSIKK21zZ3N0ciAiRWludHJhZ2VkYXR1bSIKKworIzogZ2l0azo0NzQzIGdpdGs6NDc0OAorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkFia8O2bW1saW5nIgorCisjOiBnaXRrOjQ3NDQKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiS2VpbiBBYmvDtm1tbGluZyIKKworIzogZ2l0azo0NzUxIGdpdGs6NDc1NgorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJWb3Jnw6RuZ2VyIgorCisjOiBnaXRrOjQ3NTIKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIktlaW4gVm9yZ8OkbmdlciIKKworIzogZ2l0azo1MDQyCittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4gYmVyZWl0Z2VzdGVsbHQsIGFiZXIgbmljaHQgZWluZ2V0cmFnZW4iCisKKyM6IGdpdGs6NTA3OAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4sIG5pY2h0IGJlcmVpdGdlc3RlbGx0IgorCisjOiBnaXRrOjY3NTkKK21zZ2lkICJtYW55IgorbXNnc3RyICJ2aWVsZSIKKworIzogZ2l0azo2OTQyCittc2dpZCAiVGFnczoiCittc2dzdHIgIk1hcmtpZXJ1bmdlbjoiCisKKyM6IGdpdGs6Njk1OSBnaXRrOjY5NjUgZ2l0azo4MjgwCittc2dpZCAiUGFyZW50IgorbXNnc3RyICJFbHRlcm4iCisKKyM6IGdpdGs6Njk3MAorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJLaW5kIgorCisjOiBnaXRrOjY5NzkKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlp3ZWlnIgorCisjOiBnaXRrOjY5ODIKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJGb2xndCBhdWYiCisKKyM6IGdpdGs6Njk4NQorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJWb3Jnw6RuZ2VyIHZvbiIKKworIzogZ2l0azo3NTIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlcyBWZXJnbGVpY2hzOiAlcyIKKworIzogZ2l0azo4MTA4Cittc2dpZCAiR290bzoiCittc2dzdHIgIkdlaGUgenU6IgorCisjOiBnaXRrOjgxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiS3VyemVyIFNIQTEtSGFzaHdlcnQgwrslc8KrIGlzdCBtZWhyZGV1dGlnIgorCisjOiBnaXRrOjgxMzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlZlcnNpb24gwrslc8KrIGlzdCB1bmJla2FubnQiCisKKyM6IGdpdGs6ODE0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJTSEExLUhhc2h3ZXJ0IMK7JXPCqyBpc3QgdW5iZWthbm50IgorCisjOiBnaXRrOjgxNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiVmVyc2lvbiDCuyVzwqsgd2lyZCBpbiBkZXIgYWt0dWVsbGVuIEFuc2ljaHQgbmljaHQgYW5nZXplaWd0IgorCisjOiBnaXRrOjgyOTAKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiS2luZGVyIgorCisjOiBnaXRrOjgzNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiWndlaWcgwrslc8KrIGhpZXJoZXIgenVyw7xja3NldHplbiIKKworIzogZ2l0azo4MzUwCittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIlp3ZWlnc3BpdHplIGlzdCBhYmdldHJlbm50OiBadXLDvGNrc2V0emVuIG5pY2h0IG3DtmdsaWNoIgorCisjOiBnaXRrOjg0NTkgZ2l0azo4NDY1Cittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiw5xiZXJzcHJpbmdlIFp1c2FtbWVuZsO8aHJ1bmdzLVZlcnNpb24gIgorCisjOiBnaXRrOjg0NzQgZ2l0azo4NDc5Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJGZWhsZXIgYmVpbSBIb2xlbiBkZXIgUGF0Y2gtSUQgZsO8ciAiCisKKyM6IGdpdGs6ODQ3NSBnaXRrOjg0ODAKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBBYmJydWNoLlxuIgorCisjOiBnaXRrOjg0ODUgZ2l0azo4NDg4IGdpdGs6ODQ5NiBnaXRrOjg1MTAgZ2l0azo4NTE5Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAiVmVyc2lvbiAiCisKKyM6IGdpdGs6ODQ4OQorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIGlzdCBkYXMgZ2xlaWNoZSBQYXRjaCB3aWVcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjg0OTcKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgaXN0IHVudGVyc2NoaWVkbGljaCB2b25cbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjg0OTkKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisiVmVyZ2xlaWNoIGRlciBWZXJzaW9uZW46XG4iCisiXG4iCisKKyM6IGdpdGs6ODUxMSBnaXRrOjg1MjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIGhhdCAlcyBLaW5kZXIuIEFiYnJ1Y2hcbiIKKworIzogZ2l0azo4NTM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgVmVyc2lvbiBpbiBEYXRlaTogJXMiCisKKyM6IGdpdGs6ODU0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIFZlcmdsZWljaGVuIGRlciBWZXJzaW9uZW46ICVzIgorCisjOiBnaXRrOjg1NzUKK21zZ2lkICJUb3AiCittc2dzdHIgIk9iZW4iCisKKyM6IGdpdGs6ODU3NgorbXNnaWQgIkZyb20iCittc2dzdHIgIlZvbiIKKworIzogZ2l0azo4NTgxCittc2dpZCAiVG8iCittc2dzdHIgImJpcyIKKworIzogZ2l0azo4NjA1Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIlBhdGNoIGVyc3RlbGxlbiIKKworIzogZ2l0azo4NjA3Cittc2dpZCAiRnJvbToiCittc2dzdHIgIlZvbjoiCisKKyM6IGdpdGs6ODYxNgorbXNnaWQgIlRvOiIKK21zZ3N0ciAiYmlzOiIKKworIzogZ2l0azo4NjI1Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiVW1nZWtlaHJ0IgorCisjOiBnaXRrOjg2MjcgZ2l0azo4ODIyCittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICJBdXNnYWJlZGF0ZWk6IgorCisjOiBnaXRrOjg2MzMKK21zZ2lkICJHZW5lcmF0ZSIKK21zZ3N0ciAiRXJ6ZXVnZW4iCisKKyM6IGdpdGs6ODY3MQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJ6ZXVnZW4gZGVzIFBhdGNoZXM6IgorCisjOiBnaXRrOjg2OTQgZ2l0azo4ODEwIGdpdGs6ODg2NworbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjg3MDMKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk1hcmtpZXJ1bmdzbmFtZToiCisKKyM6IGdpdGs6ODcwNgorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJFaW5lIE1hcmtpZXJ1bmdzYmVzY2hyZWlidW5nIGlzdCBvcHRpb25hbCIKKworIzogZ2l0azo4NzA4Cittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICJNYXJraWVydW5nc2Jlc2NocmVpYnVuZzoiCisKKyM6IGdpdGs6ODcxMiBnaXRrOjg4NzYKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkVyc3RlbGxlbiIKKworIzogZ2l0azo4NzMwCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJLZWluIE1hcmtpZXJ1bmdzbmFtZSBhbmdlZ2ViZW4iCisKKyM6IGdpdGs6ODczNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIk1hcmtpZXJ1bmcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKKworIzogZ2l0azo4NzQ0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlciBNYXJraWVydW5nOiIKKworIzogZ2l0azo4ODE5Cittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIktvbW1hbmRvOiIKKworIzogZ2l0azo4ODI3Cittc2dpZCAiV3JpdGUiCittc2dzdHIgIlNjaHJlaWJlbiIKKworIzogZ2l0azo4ODQ1Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIFZlcnNpb246IgorCisjOiBnaXRrOjg4NzIKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTmFtZToiCisKKyM6IGdpdGs6ODg5NQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBOYW1lbiBmw7xyIGRlbiBuZXVlbiBad2VpZyBhbi4iCisKKyM6IGdpdGs6ODkwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJad2VpZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIFNvbGwgZXIgw7xiZXJzY2hyaWViZW4gd2VyZGVuPyIKKworIzogZ2l0azo4OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIiIKKyJWZXJzaW9uIMK7JXPCqyBpc3QgYmVyZWl0cyBpbSBad2VpZyDCuyVzwqsgZW50aGFsdGVuIC0tIHRyb3R6ZGVtIGVybmV1dCBlaW50cmFnZW4/IgorCisjOiBnaXRrOjg5NzEKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiVmVyc2lvbiBwZmzDvGNrZW4iCisKKyM6IGdpdGs6ODk4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJQZmzDvGNrZW4gZmVobGdlc2NobGFnZW4sIGRhIG5vY2ggbG9rYWxlIMOEbmRlcnVuZ2VuIGluIERhdGVpIMK7JXPCq1xuIgorInZvcmxpZWdlbi4gQml0dGUgZGllc2Ugw4RuZGVydW5nZW4gZWludHJhZ2VuLCB6dXLDvGNrc2V0emVuIG9kZXJcbiIKKyJ6d2lzY2hlbnNwZWljaGVybiAowrtnaXQgc3Rhc2jCqykgdW5kIGRhbm4gZXJuZXV0IHZlcnN1Y2hlbi4iCisKKyM6IGdpdGs6ODk4NgorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIlBmbMO8Y2tlbiBmZWhsZ2VzY2hsYWdlbiwgZGEgZWluIFp1c2FtbWVuZsO8aHJ1bmdzLUtvbmZsaWt0IGF1ZmdldHJldGVuXG4iCisiaXN0LiBTb2xsIGRhcyBadXNhbW1lbmbDvGhydW5ncy1XZXJremV1ZyAowrtnaXQgY2l0b29swqspIGF1ZmdlcnVmZW5cbiIKKyJ3ZXJkZW4sIHVtIGRpZXNlbiBLb25mbGlrdCBhdWZ6dWzDtnNlbj8iCisKKyM6IGdpdGs6OTAwMgorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJLZWluZSDDhG5kZXJ1bmdlbiBlaW5nZXRyYWdlbiIKKworIzogZ2l0azo5MDI4Cittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiWnVyw7xja3NldHplbiBiZXN0w6R0aWdlbiIKKworIzogZ2l0azo5MDMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAiWndlaWcgwrslc8KrIGF1ZiDCuyVzwqsgenVyw7xja3NldHplbj8iCisKKyM6IGdpdGs6OTAzMgorbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICJBcnQgZGVzIFp1csO8Y2tzZXR6ZW5zOiIKKworIzogZ2l0azo5MDM1Cittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIkhhcm1sb3M6IEFyYmVpdHNrb3BpZSB1bmQgQmVyZWl0c3RlbGx1bmcgdW52ZXLDpG5kZXJ0IgorCisjOiBnaXRrOjkwMzgKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIiIKKyJHZW1pc2NodDogQXJiZWl0c2tvcGllIHVudmVyw6RuZGVydCxcbiIKKyJCZXJlaXRzdGVsbHVuZyB6dXLDvGNrZ2VzZXR6dCIKKworIzogZ2l0azo5MDQxCittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJIYXJ0OiBBcmJlaXRza29waWUgdW5kIEJlcmVpdHN0ZWxsdW5nXG4iCisiKEFsbGUgbG9rYWxlbiDDhG5kZXJ1bmdlbiB3ZXJkZW4gZ2Vsw7ZzY2h0KSIKKworIzogZ2l0azo5MDU4Cittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICJadXLDvGNrc2V0emVuIgorCisjOiBnaXRrOjkxMTgKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIlVtc3RlbGxlbiIKKworIzogZ2l0azo5MTcxCittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiIgorIkRlciBad2VpZywgYXVmIGRlbiBkaWUgQXJiZWl0c2tvcGllIG1vbWVudGFuIHVtZ2VzdGVsbHQgaXN0LCBrYW5uIG5pY2h0ICIKKyJnZWzDtnNjaHQgd2VyZGVuLiIKKworIzogZ2l0azo5MTc3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJEaWUgVmVyc2lvbmVuIGF1ZiBad2VpZyDCuyVzwqsgZXhpc3RpZXJlbiBhdWYga2VpbmVtIGFuZGVyZW4gWndlaWcuXG4iCisiWndlaWcgwrslc8KrIHRyb3R6ZGVtIGzDtnNjaGVuPyIKKworIzogZ2l0azo5MjA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJNYXJraWVydW5nZW4gdW5kIFp3ZWlnZTogJXMiCisKKyM6IGdpdGs6OTIyMworbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdGVybiIKKworIzogZ2l0azo5NTE4Cittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gTGVzZW4gZGVyIFN0cnVrdHVyaW5mb3JtYXRpb25lbjsgWndlaWdlIHVuZCBJbmZvcm1hdGlvbmVuIHp1ICIKKyJWb3Jnw6RuZ2VyL05hY2hmb2xnZXIgd2VyZGVuIHVudm9sbHN0w6RuZGlnIHNlaW4uIgorCisjOiBnaXRrOjEwNTA0Cittc2dpZCAiVGFnIgorbXNnc3RyICJNYXJraWVydW5nIgorCisjOiBnaXRrOjEwNTA0Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjEwNTU0Cittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIkdpdGstU2NocmlmdGVuIHfDpGhsZW4iCisKKyM6IGdpdGs6MTA1NzEKK21zZ2lkICJCIgorbXNnc3RyICJGIgorCisjOiBnaXRrOjEwNTc0Cittc2dpZCAiSSIKK21zZ3N0ciAiSyIKKworIzogZ2l0azoxMDY5MgorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIkdpdGstRWluc3RlbGx1bmdlbiIKKworIzogZ2l0azoxMDY5NAorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiQW56ZWlnZSBkZXIgVmVyc2lvbnNsaXN0ZSIKKworIzogZ2l0azoxMDY5NworbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAiTWF4aW1hbGUgR3JhcGhlbmJyZWl0ZSAoWmVpbGVuKSIKKworIzogZ2l0azoxMDcwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIk1heGltYWxlIEdyYXBoZW5icmVpdGUgKCUgZGVzIEZlbnN0ZXJzKSIKKworIzogZ2l0azoxMDcwMworbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTG9rYWxlIMOEbmRlcnVuZ2VuIGFuemVpZ2VuIgorCisjOiBnaXRrOjEwNzA2Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKK21zZ3N0ciAiU0hBMS1IYXNod2VydCBhdXRvbWF0aXNjaCBhdXN3w6RobGVuIgorCisjOiBnaXRrOjEwNzA5Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiRW50ZmVybnRlIFp3ZWlnZS9NYXJraWVydW5nZW4gYXVzYmxlbmRlbiIKKworIzogZ2l0azoxMDcxMworbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJBbnplaWdlIGRlcyBWZXJnbGVpY2hzIgorCisjOiBnaXRrOjEwNzE1Cittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIlRhYnVsYXRvcmJyZWl0ZSIKKworIzogZ2l0azoxMDcxOAorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MiCittc2dzdHIgIk5haGVsaWVnZW5kZSBNYXJraWVydW5nZW4gYW56ZWlnZW4iCisKKyM6IGdpdGs6MTA3MjEKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIlZlcmdsZWljaCBudXIgZsO8ciBhbmdlemVpZ3RlIFBmYWRlIgorCisjOiBnaXRrOjEwNzI0Cittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIlplaWNoZW5rb2RpZXJ1bmcgcHJvIERhdGVpIGVybWl0dGVsbiIKKworIzogZ2l0azoxMDczMCBnaXRrOjEwODE5Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICJFeHRlcm5lcyBEaWZmLVByb2dyYW1tIgorCisjOiBnaXRrOjEwNzMxCittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICJXw6RobGVuIC4uLiIKKworIzogZ2l0azoxMDczNgorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiQWxsZ2VtZWluZSBPcHRpb25lbiIKKworIzogZ2l0azoxMDczOQorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiQXVzc2VoZW4gZGVyIEJlbnV0emVyb2JlcmZsw6RjaGUgZHVyY2ggVGhlbWEgYmVzdGltbWVuIgorCisjOiBnaXRrOjEwNzQxCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKMOEbmRlcnVuZ2VuIHdlcmRlbiBlcnN0IG5hY2ggTmV1c3RhcnQgd2lya3NhbSkiCisKKyM6IGdpdGs6MTA3NDMKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKE1vbWVudGFuIG5pY2h0IHZlcmbDvGdiYXIpIgorCisjOiBnaXRrOjEwNzQ3Cittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkZhcmJlbjogS2xpY2tlbiB6dW0gV8OkaGxlbiIKKworIzogZ2l0azoxMDc1MAorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiQmVudXR6ZXJvYmVyZmzDpGNoZSIKKworIzogZ2l0azoxMDc1MQorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiQmVudXR6ZXJvYmVyZmzDpGNoZSIKKworIzogZ2l0azoxMDc1NAorbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIkhpbnRlcmdydW5kIgorCisjOiBnaXRrOjEwNzU1IGdpdGs6MTA3ODUKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJIaW50ZXJncnVuZCIKKworIzogZ2l0azoxMDc1OAorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIlZvcmRlcmdydW5kIgorCisjOiBnaXRrOjEwNzU5Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAiVm9yZGVyZ3J1bmQiCisKKyM6IGdpdGs6MTA3NjIKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIlZlcmdsZWljaDogQWx0ZSBaZWlsZW4iCisKKyM6IGdpdGs6MTA3NjMKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAiVmVyZ2xlaWNoIC0gQWx0ZSBaZWlsZW4iCisKKyM6IGdpdGs6MTA3NjcKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIlZlcmdsZWljaDogTmV1ZSBaZWlsZW4iCisKKyM6IGdpdGs6MTA3NjgKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAiVmVyZ2xlaWNoIC0gTmV1ZSBaZWlsZW4iCisKKyM6IGdpdGs6MTA3NzIKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiVmVyZ2xlaWNoOiDDhG5kZXJ1bmdzdGl0ZWwiCisKKyM6IGdpdGs6MTA3NzQKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJWZXJnbGVpY2ggLSDDhG5kZXJ1bmdzdGl0ZWwiCisKKyM6IGdpdGs6MTA3NzgKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiSGludGVyZ3J1bmQgZsO8ciBtYXJraWVydGUgWmVpbGUiCisKKyM6IGdpdGs6MTA3ODAKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICJIaW50ZXJncnVuZCBmw7xyIG1hcmtpZXJ0ZSBaZWlsZSIKKworIzogZ2l0azoxMDc4NAorbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiSGludGVyZ3J1bmRmYXJiZSBhdXN3w6RobGVuIgorCisjOiBnaXRrOjEwNzg4Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiU2NocmlmdGFydDogS2xpY2tlbiB6dW0gV8OkaGxlbiIKKworIzogZ2l0azoxMDc5MAorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAiUHJvZ3JhbW1zY2hyaWZ0YXJ0IgorCisjOiBnaXRrOjEwNzkxCittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIlNjaHJpZnRhcnQgZsO8ciBWZXJnbGVpY2giCisKKyM6IGdpdGs6MTA3OTIKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJCZXNjaHJpZnR1bmdlbiIKKworIzogZ2l0azoxMDgyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6IEZhcmJlIHfDpGhsZW4gZsO8ciAlcyIKKworIzogZ2l0azoxMTQzMworbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIktlaW4gR2l0LVByb2pla3RhcmNoaXYgZ2VmdW5kZW4uIgorCisjOiBnaXRrOjExNDM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKK21zZ3N0ciAiR2l0LVZlcnplaWNobmlzIMK7JXPCqyB3dXJkZSBuaWNodCBnZWZ1bmRlbi4iCisKKyM6IGdpdGs6MTE0ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIk1laHJkZXV0aWdlIEFuZ2FiZSDCuyVzwqs6IFNvd29obCBWZXJzaW9uIGFscyBhdWNoIERhdGVpbmFtZSBleGlzdGllcnQuIgorCisjOiBnaXRrOjExNDk2Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiRmFsc2NoZSBLb21tYW5kb3plaWxlbi1QYXJhbWV0ZXIgZsO8ciBnaXRrOiIKKworIzogZ2l0azoxMTU4NworbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAiS29tbWFuZG96ZWlsZSIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL2VzLnBvIGIvZ2l0ay1naXQvcG8vZXMucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3MWRkMAotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL2VzLnBvCkBAIC0wLDAgKzEsOTExIEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdGsKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggU2FudGlhZ28gR2FsYQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBTYW50aWFnbyBHYWxhIDxzYW50aWFnby5nYWxhQGdtYWlsLmNvbT4sIDIwMDguCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTEwLTE4IDIyOjAzKzExMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTAzLTI1IDExOjIwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFNhbnRpYWdvIEdhbGEgPHNhbnRpYWdvLmdhbGFAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFNwYW5pc2hcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0azoxMTMKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIkltcG9zaWJsZSBvYnRlbmVyIGxhIGxpc3RhIGRlIGFyY2hpdm9zIHBlbmRpZW50ZXMgZGUgZnVzacOzbjoiCisKKyM6IGdpdGs6MzQwCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiTm8gaGF5IGFyY2hpdm9zIHNlbGVjY2lvbmFkb3M6IHNlIHNlbGVjY2lvbsOzIGxhIG9wY2nDs24gLS1tZXJnZSBwZXJvIG5vIGhheSAiCisiYXJjaGl2b3MgcGVuZGllbnRlcyBkZSBmdXNpw7NuLiIKKworIzogZ2l0azozNDMKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIk5vIGhheSBhcmNoaXZvcyBzZWxlY2Npb25hZG9zOiBzZSBzZWxlY2Npb27DsyBsYSBvcGNpw7NuIC0tbWVyZ2UgcGVybyBsb3MgIgorImFyY2hpdm9zIGVzcGVjaWZpY2Fkb3Mgbm8gbmVjZXNpdGFuIGZ1c2nDs24uIgorCisjOiBnaXRrOjM3OAorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIkxleWVuZG8iCisKKyM6IGdpdGs6NDM4IGdpdGs6MzQ2MgorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiTGV5ZW5kbyByZXZpc2lvbmVzLi4uIgorCisjOiBnaXRrOjQ0MSBnaXRrOjE1MjggZ2l0azozNDY1Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiTm8gc2Ugc2VsZWNjaW9uYXJvbiByZXZpc2lvbmVzIgorCisjOiBnaXRrOjEzOTkKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIkVycm9yIGFuYWxpemFuZG8gbGEgc2FsaWRhIGRlIGdpdCBsb2c6IgorCisjOiBnaXRrOjE2MDUKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJGYWx0YSBpbmZvcm1hY2nDs24gc29icmUgbGFzIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MTcwOSBnaXRrOjE3MzEgZ2l0azozMjU5IGdpdGs6Nzc2NCBnaXRrOjkyOTMgZ2l0azo5NDY2Cittc2dpZCAiT0siCittc2dzdHIgIkFjZXB0YXIiCisKKyM6IGdpdGs6MTczMyBnaXRrOjMyNjAgZ2l0azo3NDM5IGdpdGs6NzUxMCBnaXRrOjc2MTMgZ2l0azo3NjYwIGdpdGs6Nzc2NgorIzogZ2l0azo5Mjk0IGdpdGs6OTQ2NworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQ2FuY2VsYXIiCisKKyM6IGdpdGs6MTgxMQorbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAiQWN0dWFsaXphciIKKworIzogZ2l0azoxODEzCittc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCittc2dzdHIgIlJlbGVlciByZWZlcmVuY2lhcyIKKworIzogZ2l0azoxODE0Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJMaXN0YSBkZSByZWZlcmVuY2lhcyIKKworIzogZ2l0azoxODE1Cittc2dpZCAiUXVpdCIKK21zZ3N0ciAiU2FsaXIiCisKKyM6IGdpdGs6MTgxMAorbXNnaWQgIkZpbGUiCittc2dzdHIgIkFyY2hpdm8iCisKKyM6IGdpdGs6MTgxOAorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXJlbmNpYXMiCisKKyM6IGdpdGs6MTgxNworbXNnaWQgIkVkaXQiCittc2dzdHIgIkVkaXRhciIKKworIzogZ2l0azoxODIxCittc2dpZCAiTmV3IHZpZXcuLi4iCittc2dzdHIgIk51ZXZhIHZpc3RhLi4uIgorCisjOiBnaXRrOjE4MjIKK21zZ2lkICJFZGl0IHZpZXcuLi4iCittc2dzdHIgIk1vZGlmaWNhciB2aXN0YS4uLiIKKworIzogZ2l0azoxODIzCittc2dpZCAiRGVsZXRlIHZpZXciCittc2dzdHIgIkVsaW1pbmFyIHZpc3RhIgorCisjOiBnaXRrOjE4MjUKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgIlRvZG9zIGxvcyBhcmNoaXZvcyIKKworIzogZ2l0azoxODIwIGdpdGs6MzE5NgorbXNnaWQgIlZpZXciCittc2dzdHIgIlZpc3RhIgorCisjOiBnaXRrOjE4MjggZ2l0azoyNDg3Cittc2dpZCAiQWJvdXQgZ2l0ayIKK21zZ3N0ciAiQWNlcmNhIGRlIGdpdGsiCisKKyM6IGdpdGs6MTgyOQorbXNnaWQgIktleSBiaW5kaW5ncyIKK21zZ3N0ciAiQ29tYmluYWNpb25lcyBkZSB0ZWNsYXMiCisKKyM6IGdpdGs6MTgyNworbXNnaWQgIkhlbHAiCittc2dzdHIgIkF5dWRhIgorCisjOiBnaXRrOjE4ODcKK21zZ2lkICJTSEExIElEOiAiCittc2dzdHIgIlNIQTEgSUQ6ICIKKworIzogZ2l0azoxOTE4Cittc2dpZCAiUm93IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTk0OQorbXNnaWQgIkZpbmQiCittc2dzdHIgIkJ1c2NhciIKKworIzogZ2l0azoxOTUwCittc2dpZCAibmV4dCIKK21zZ3N0ciAiPDwiCisKKyM6IGdpdGs6MTk1MQorbXNnaWQgInByZXYiCittc2dzdHIgIj4+IgorCisjOiBnaXRrOjE5NTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgInJldmlzacOzbiIKKworIzogZ2l0azoxOTU1IGdpdGs6MTk1NyBnaXRrOjM2MTcgZ2l0azozNjQwIGdpdGs6MzY2NCBnaXRrOjU1NTAgZ2l0azo1NjIxCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgInF1ZSBjb250aWVuZToiCisKKyM6IGdpdGs6MTk1OCBnaXRrOjI5NTQgZ2l0azoyOTU5IGdpdGs6MzY5MgorbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAicXVlIG1vZGlmaWNhIGxhIHJ1dGE6IgorCisjOiBnaXRrOjE5NTkgZ2l0azozNjk3Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgInF1ZSBhw7FhZGUvZWxpbWluYSBjYWRlbmE6IgorCisjOiBnaXRrOjE5NjggZ2l0azoxOTcwCittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YWN0byIKKworIzogZ2l0azoxOTcwIGdpdGs6Mzc3MyBnaXRrOjU1MTgKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICJOb01hecO6cyIKKworIzogZ2l0azoxOTcwIGdpdGs6MzY2NiBnaXRrOjM3NzEgZ2l0azo1NTE0Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJSZWdleCIKKworIzogZ2l0azoxOTcyIGdpdGs6MTk3MyBnaXRrOjM3OTIgZ2l0azozODIyIGdpdGs6MzgyOSBnaXRrOjU2NDEgZ2l0azo1NzA4Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiVG9kb3MgbG9zIGNhbXBvcyIKKworIzogZ2l0azoxOTczIGdpdGs6Mzc5MCBnaXRrOjM4MjIgZ2l0azo1NTgwCittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIlTDrXR1bG8iCisKKyM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azo1NTgwIGdpdGs6NTcwOCBnaXRrOjYxMDkKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiQ29tZW50YXJpb3MiCisKKyM6IGdpdGs6MTk3NCBnaXRrOjM3OTAgZ2l0azozNzk0IGdpdGs6MzgyOSBnaXRrOjU1ODAgZ2l0azo2MDQ1IGdpdGs6NzI4NQorIzogZ2l0azo3MzAwCittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRvciIKKworIzogZ2l0azoxOTc0IGdpdGs6Mzc5MCBnaXRrOjU1ODAgZ2l0azo2MDQ3Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjAwMworbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiQnVzY2FyIgorCisjOiBnaXRrOjIwMTAKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZlcmVuY2lhIgorCisjOiBnaXRrOjIwMTIKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc2nDs24gYW50aWd1YSIKKworIzogZ2l0azoyMDE0Cittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIlZlcnNpw7NuIG51ZXZhIgorCisjOiBnaXRrOjIwMTYKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJMw61uZWFzIGRlIGNvbnRleHRvIgorCisjOiBnaXRrOjIwMjYKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJJZ25vcmEgY2FtYmlvcyBkZSBlc3BhY2lhZG8iCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXJjaGUiCisKKyM6IGdpdGs6MjA4NgorbXNnaWQgIlRyZWUiCittc2dzdHIgIsOBcmJvbCIKKworIzogZ2l0azoyMjEzIGdpdGs6MjIyNgorbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZXJlbmNpYSBkZSBlc3RhIC0+IHNlbGVjY2lvbmFkYSIKKworIzogZ2l0azoyMjE0IGdpdGs6MjIyNworbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZXJlbmNpYSBkZSBzZWxlY2Npb25hZGEgLT4gZXN0YSIKKworIzogZ2l0azoyMjE1IGdpdGs6MjIyOAorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIkNyZWFyIHBhdGNoIgorCisjOiBnaXRrOjIyMTYgZ2l0azo3NDk0Cittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAiQ3JlYXIgZXRpcXVldGEiCisKKyM6IGdpdGs6MjIxNyBnaXRrOjc1OTMKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiRXNjcmliaXIgcmV2aXNpb25lcyBhIGFyY2hpdm8iCisKKyM6IGdpdGs6MjIxOCBnaXRrOjc2NDcKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiQ3JlYXIgbnVldmEgcmFtYSIKKworIzogZ2l0azoyMjE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIkHDsWFkaXIgZXN0YSByZXZpc2nDs24gYSBsYSByYW1hIGFjdHVhbCAoY2hlcnJ5LXBpY2spIgorCisjOiBnaXRrOjIyMjAKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJUcmFlciBsYSByYW1hIEhFQUQgYXF1w60iCisKKyM6IGdpdGs6MjIzNAorbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiQ2FtYmlhciBhIGVzdGEgcmFtYSIKKworIzogZ2l0azoyMjM1Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICJFbGltaW5hciBlc3RhIHJhbWEiCisKKyM6IGdpdGs6MjI0MgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiU2VsZWNjaW9uYXIgdGFtYmnDqW4iCisKKyM6IGdpdGs6MjI0MworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIlNlbGVjY2lvbmFyIHPDs2xvIgorCisjOiBnaXRrOjIyNDUKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjQ4OAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgXFx1MDBhOSAyMDA1LTIwMTAgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIHVuIHZpc3VhbGl6YWRvciBkZSByZXZpc2lvbmVzIHBhcmEgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNvIHkgcmVkaXN0cmlidWNpw7NuIHBlcm1pdGlkb3Mgc2Vnw7puIGxvcyB0w6lybWlub3MgZGUgbGEgTGljZW5jaWEgUMO6YmxpY2EgIgorIkdlbmVyYWwgZGUgR05VIChHTlUgR1BMKSIKKworIzogZ2l0azoyNDk2IGdpdGs6MjU1NyBnaXRrOjc5NDMKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiQ2VycmFyIgorCisjOiBnaXRrOjI1MTUKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiQ29tYmluYWNpb25lcyBkZSB0ZWNsYSBkZSBHaXRrIgorCisjOiBnaXRrOjI1MTcKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkNvbWJpbmFjaW9uZXMgZGUgdGVjbGEgZGUgR2l0azoiCisKKyM6IGdpdGs6MjUxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0U2FsaXIiCisKKyM6IGdpdGs6MjUyMAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdElyIGEgbGEgcHJpbWVyYSByZXZpc2nDs24iCisKKyM6IGdpdGs6MjUyMQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdElyIGEgbGEgw7psdGltYSByZXZpc2nDs24iCisKKyM6IGdpdGs6MjUyMgorbXNnaWQgIjxVcD4sIHAsIGlcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwPiwgcCwgaVx0U3ViaXIgdW5hIHJldmlzacOzbiIKKworIzogZ2l0azoyNTIzCittc2dpZCAiPERvd24+LCBuLCBrXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPERvd24+LCBuLCBrXHRCYWphciB1bmEgcmV2aXNpw7NuIgorCisjOiBnaXRrOjI1MjQKK21zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGVmdD4sIHosIGpcdFJldHJvY2VkZXIgZW4gbGEgaGlzdG9yaWEiCisKKyM6IGdpdGs6MjUyNQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmlnaHQ+LCB4LCBsXHRBdmFuemFyIGVuIGxhIGhpc3RvcmlhIgorCisjOiBnaXRrOjI1MjYKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdFN1YmlyIHVuYSBww6FnaW5hIGVuIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MjUyNworbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx0QmFqYXIgdW5hIHDDoWdpbmEgZW4gbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azoyNTI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdERlc3BsYXphcnNlIGFsIGluaWNpbyBkZSBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjI1MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdERlc3BsYXphcnNlIGFsIGZpbmFsIGRlIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MjUzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx0RGVzcGxhemFyIHVuYSBsw61uZWEgaGFjaWEgYXJyaWJhIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MjUzMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx0RGVzcGxhemFyIHVuYSBsw61uZWEgaGFjaWEgYWJham8gbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azoyNTMyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdERlc3BsYXphciB1bmEgcMOhZ2luYSBoYWNpYSBhcnJpYmEgbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azoyNTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdERlc3BsYXphciB1bmEgcMOhZ2luYSBoYWNpYSBhYmFqbyBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjI1MzQKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1VcD5cdEJ1c2NhciBoYWNpYSBhdHLDoXMgKGFycmliYSwgcmV2aXNpb25lcyBzaWd1aWVudGVzKSIKKworIzogZ2l0azoyNTM1Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1Eb3duPlx0QnVzY2FyIGhhY2lhIGFkZWxhbnRlIChhYmFqbywgcmV2aXNpb25lcyBhbnRlcmlvcmVzKSIKKworIzogZ2l0azoyNTM2Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHREZXNwbGF6YSBoYWNpYSBhcnJpYmEgdW5hIHDDoWdpbmEgbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MjUzNworbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8QmFja3NwYWNlPlx0RGVzcGxhemEgaGFjaWEgYXJyaWJhIHVuYSBww6FnaW5hIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjI1MzgKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPFNwYWNlPlx0XHREZXNwbGF6YSBoYWNpYSBhYmFqbyB1bmEgcMOhZ2luYSBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azoyNTM5Cittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdERlc3BsYXphIGhhY2lhIGFycmliYSAxOCBsw61uZWFzIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjI1NDAKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHREZXNwbGF6YSBoYWNpYSBhYmFqbyAxOCBsw61uZWFzIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjI1NDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdEJ1c2NhciIKKworIzogZ2l0azoyNTQyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdEJ1c2NhciBlbCBzaWd1aWVudGUiCisKKyM6IGdpdGs6MjU0MworbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHRCdXNjYXIgZWwgc2lndWllbnRlIgorCisjOiBnaXRrOjI1NDQKK21zZ2lkICIvXHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCwgb3IgcmVkbyBmaW5kIgorbXNnc3RyICIvXHRcdEJ1c2NhciBlbCBzaWd1aWVudGUsIG8gcmVpbmljaWFyIGxhIGLDunNxdWVkYSIKKworIzogZ2l0azoyNTQ1Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdEJ1c2NhciBlbCBhbnRlcmlvciIKKworIzogZ2l0azoyNTQ2Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHREZXNwbGF6YXIgbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMgYWwgYXJjaGl2byBzaWd1aWVudGUiCisKKyM6IGdpdGs6MjU0NworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdEJ1c2NhciBzaWd1aWVudGUgZW4gbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MjU0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRCdXNjYXIgYW50ZXJpb3IgZW4gbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MjU0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHRBdW1lbnRhciB0YW1hw7FvIGRlbCB0ZXh0byIKKworIzogZ2l0azoyNTUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx0QXVtZW50YXIgdGFtYcOxbyBkZWwgdGV4dG8iCisKKyM6IGdpdGs6MjU1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHREaXNtaW51aXIgdGFtYcOxbyBkZWwgdGV4dG8iCisKKyM6IGdpdGs6MjU1MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1pbnVzPlx0RGlzbWludWlyIHRhbWHDsW8gZGVsIHRleHRvIgorCisjOiBnaXRrOjI1NTMKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRBY3R1YWxpemFyIgorCisjOiBnaXRrOjMyMDAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRGVmaW5pY2nDs24gZGUgdmlzdGFzIGRlIEdpdGsiCisKKyM6IGdpdGs6MzIyNQorbXNnaWQgIk5hbWUiCittc2dzdHIgIk5vbWJyZSIKKworIzogZ2l0azozMjI4Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJSZWNvcmRhciBlc3RhIHZpc3RhIgorCisjOiBnaXRrOjMyMzIKK21zZ2lkICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgbG9nKToiCittc2dzdHIgIlJldmlzaW9uZXMgYSBpbmNsdWlyIChhcmd1bWVudG9zIGEgZ2l0IGxvZyk6IgorCisjOiBnaXRrOjMyMzkKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiQ29tYW5kbyBxdWUgZ2VuZXJhIG3DoXMgcmV2aXNpb25lcyBhIGluY2x1aXI6IgorCisjOiBnaXRrOjMyNDYKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAiSW50cm9kdWNpciBhcmNoaXZvcyB5IGRpcmVjdG9yaW9zIGEgaW5jbHVpciwgdW5vIHBvciBsw61uZWE6IgorCisjOiBnaXRrOjMyOTMKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIkVycm9yIGVuIGxvcyBhcmd1bWVudG9zIGRlIHNlbGVjY2nDs24gZGUgbGFzIHJldmlzaW9uZXM6IgorCisjOiBnaXRrOjMzNDcgZ2l0azozMzk5IGdpdGs6Mzg0MiBnaXRrOjM4NTYgZ2l0azo1MDYwIGdpdGs6MTAxNDEgZ2l0azoxMDE0MgorbXNnaWQgIk5vbmUiCittc2dzdHIgIk5pbmd1bm8iCisKKyM6IGdpdGs6Mzc5MCBnaXRrOjU1ODAgZ2l0azo3Mjg3IGdpdGs6NzMwMgorbXNnaWQgIkRhdGUiCittc2dzdHIgIkZlY2hhIgorCisjOiBnaXRrOjM3OTAgZ2l0azo1NTgwCittc2dpZCAiQ0RhdGUiCittc2dzdHIgIkZlY2hhIGRlIGNyZWFjacOzbiIKKworIzogZ2l0azozOTM5IGdpdGs6Mzk0NAorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkRlc2NlbmRpZW50ZSIKKworIzogZ2l0azozOTQwCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIk5vIGRlc2NlbmRpZW50ZSIKKworIzogZ2l0azozOTQ3IGdpdGs6Mzk1MgorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJBbnRlcGFzYWRvIgorCisjOiBnaXRrOjM5NDgKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIk5vIGFudGVwYXNhZG8iCisKKyM6IGdpdGs6NDE4NworbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiQ2FtYmlvcyBsb2NhbGVzIGHDsWFkaWRvcyBhbCDDrW5kaWNlIHBlcm8gc2luIGNvbXBsZXRhciByZXZpc2nDs24iCisKKyM6IGdpdGs6NDIyMAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJDYW1iaW9zIGxvY2FsZXMgc2luIGHDsWFkaXIgYWwgw61uZGljZSIKKworIzogZ2l0azo1NTQ5Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJCdXNjYW5kbyIKKworIzogZ2l0azo2MDQ5Cittc2dpZCAiVGFnczoiCittc2dzdHIgIkV0aXF1ZXRhczoiCisKKyM6IGdpdGs6NjA2NiBnaXRrOjYwNzIgZ2l0azo3MjgwCittc2dpZCAiUGFyZW50IgorbXNnc3RyICJQYWRyZSIKKworIzogZ2l0azo2MDc3Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkhpamEiCisKKyM6IGdpdGs6NjA4NgorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiUmFtYSIKKworIzogZ2l0azo2MDg5Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiU2lndWUtYSIKKworIzogZ2l0azo2MDkyCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlByZWNlZGUtYSIKKworIzogZ2l0azo2Mzc4Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBtZXJnZSBkaWZmczoiCittc2dzdHIgIkVycm9yIGFsIGxlZXIgbGFzIGRpZmVyZW5jaWFzIGRlIGZ1c2nDs246IgorCisjOiBnaXRrOjcxMTMKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiSXIgYToiCisKKyM6IGdpdGs6NzExNQorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExIElEOiIKKworIzogZ2l0azo3MTM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIkxhIGlkIFNIQTEgYWJyZXZpYWRhICVzIGVzIGFtYmlndWEiCisKKyM6IGdpdGs6NzE0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJMYSBpZCBTSEExICVzIGVzIGRlc2Nvbm9jaWRhIgorCisjOiBnaXRrOjcxNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkxhIGV0aXF1ZXRhL3JhbWEgJXMgZXMgZGVjb25vY2lkYSIKKworIzogZ2l0azo3MjkwCittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkhpamFzIgorCisjOiBnaXRrOjczNDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiUG9uZXIgbGEgcmFtYSAlcyBlbiBlc3RhIHJldmlzacOzbiIKKworIzogZ2l0azo3MzQ5Cittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIiIKKworIzogZ2l0azo3MzgxCittc2dpZCAiVG9wIgorbXNnc3RyICJPcmlnZW4iCisKKyM6IGdpdGs6NzM4MgorbXNnaWQgIkZyb20iCittc2dzdHIgIkRlIgorCisjOiBnaXRrOjczODcKK21zZ2lkICJUbyIKK21zZ3N0ciAiQSIKKworIzogZ2l0azo3NDEwCittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlbmVyYXIgcGFyY2hlIgorCisjOiBnaXRrOjc0MTIKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRGU6IgorCisjOiBnaXRrOjc0MjEKK21zZ2lkICJUbzoiCittc2dzdHIgIlBhcmE6IgorCisjOiBnaXRrOjc0MzAKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJJbnZlcnRpciIKKworIzogZ2l0azo3NDMyIGdpdGs6NzYwNworbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiRXNjcmliaXIgYSBhcmNoaXZvOiIKKworIzogZ2l0azo3NDM4Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyYXIiCisKKyM6IGdpdGs6NzQ3NAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRXJyb3IgZW4gbGEgY3JlYWNpw7NuIGRlbCBwYXJjaGU6IgorCisjOiBnaXRrOjc0OTYgZ2l0azo3NTk1IGdpdGs6NzY0OQorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjc1MDUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk5vbWJyZSBkZSBldGlxdWV0YToiCisKKyM6IGdpdGs6NzUwOSBnaXRrOjc2NTkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWFyIgorCisjOiBnaXRrOjc1MjQKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIk5vIHNlIGhhIGVzcGVjaWZpY2FkbyBldGlxdWV0YSIKKworIzogZ2l0azo3NTI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTGEgZXRpcXVldGEgXCIlc1wiIHlhIGV4aXN0ZSIKKworIzogZ2l0azo3NTM0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyb3IgYWwgY3JlYXIgbGEgZXRpcXVldGE6IgorCisjOiBnaXRrOjc2MDQKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiQ29tYW5kbzoiCisKKyM6IGdpdGs6NzYxMgorbXNnaWQgIldyaXRlIgorbXNnc3RyICJFc2NyaWJpciIKKworIzogZ2l0azo3NjI4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciByZXZpc2nDs246IgorCisjOiBnaXRrOjc2NTQKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTm9tYnJlOiIKKworIzogZ2l0azo3Njc0Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiRXNwZWNpZmlxdWUgdW4gbm9tYnJlIHBhcmEgbGEgbnVldmEgcmFtYSIKKworIzogZ2l0azo3NzAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIkxhIHJldmlzacOzbiAlcyB5YSBlc3TDoSBpbmNsdWlkYSBlbiBsYSByYW1hICVzIC0tIMK/Vm9sdmVyIGEgYXBsaWNhcmxhPyIKKworIzogZ2l0azo3NzA4Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIkVsaWdpZW5kbyByZXZpc2lvbmVzIChjaGVycnktcGlja2luZykiCisKKyM6IGdpdGs6NzcyMAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJObyBzZSBoYW4gZ3VhcmRhZG8gY2FtYmlvcyIKKworIzogZ2l0azo3NzQ1Cittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiQ29uZmlybWFyIGdpdCByZXNldCIKKworIzogZ2l0azo3NzQ3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAiwr9SZXBvbmVyIGxhIHJhbWEgJXMgYSAlcz8iCisKKyM6IGdpdGs6Nzc1MQorbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICJUaXBvIGRlIHJlcG9zaWNpw7NuOiIKKworIzogZ2l0azo3NzU1Cittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIlN1YXZlOiBObyBhbHRlcmEgbGEgY29waWEgZGUgdHJhYmFqbyBuaSBlbCDDrW5kaWNlIgorCisjOiBnaXRrOjc3NTgKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIk1peHRhOiBBY3R1YWxpemEgZWwgw61uZGljZSwgbm8gYWx0ZXJhIGxhIGNvcGlhIGRlIHRyYWJham8iCisKKyM6IGdpdGs6Nzc2MQorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiRHVyYTogQWN0dWFsaXphIGVsIMOtbmRpY2UgeSBsYSBjb3BpYSBkZSB0cmFiYWpvXG4iCisiKGFiYW5kb25hIFRPREFTIGxhcyBtb2RpZmljYWNpb25lcyBsb2NhbGVzKSIKKworIzogZ2l0azo3Nzc3Cittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICJSZXBvbmllbmRvIgorCisjOiBnaXRrOjc4MzQKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkNyZWFuZG8gY29waWEgZGUgdHJhYmFqbyIKKworIzogZ2l0azo3ODg1Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYm9ycmFyIGxhIHJhbWEgYWN0dWFsIgorCisjOiBnaXRrOjc4OTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkxhcyByZXZpc2lvbmVzIGRlIGxhIHJhbWEgJXMgbm8gZXN0w6FuIHByZXNlbnRlcyBlbiBvdHJhcyByYW1hcy5cbiIKKyLCv0JvcnJhciBsYSByYW1hICVzPyIKKworIzogZ2l0azo3OTIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJFdGlxdWV0YXMgeSByYW1hczogJXMiCisKKyM6IGdpdGs6NzkzNgorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJvIgorCisjOiBnaXRrOjgyMzAKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJFcnJvciBhbCBsZWVyIGxhIHRvcG9sb2fDrWEgZGUgcmV2aXNpb25lczogbGEgaW5mb3JtYWNpw7NuIHNvYnJlIGxhcyByYW1hcyB5ICIKKyJldGlxdWV0YXMgcHJlY2VkZW50ZXMgeSBzaWd1aWVudGVzIHNlcsOhIGluY29tcGxldGEuIgorCisjOiBnaXRrOjkyMTYKK21zZ2lkICJUYWciCittc2dzdHIgIkV0aXF1ZXRhIgorCisjOiBnaXRrOjkyMTYKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6OTI2MgorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTZWxlY3RvciBkZSB0aXBvZ3JhZsOtYXMgZ2l0ayIKKworIzogZ2l0azo5Mjc5Cittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azo5MjgyCittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azo5Mzc1Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyZW5jaWFzIGRlIGdpdGsiCisKKyM6IGdpdGs6OTM3NgorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9uZXMgZGUgdmlzdWFsaXphY2nDs24gZGUgbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azo5Mzc5Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJBbmNobyBtw6F4aW1vIGRlbCBncsOhZmljbyAoZW4gbMOtbmVhcykiCisKKyM6IGdpdGs6OTM4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIkFuY2hvIG3DoXhpbW8gZGVsIGdyw6FmaWNvIChlbiAlIGRlbCBwYW5lbCkiCisKKyM6IGdpdGs6OTM4OAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTW9zdHJhciBjYW1iaW9zIGxvY2FsZXMiCisKKyM6IGdpdGs6OTM5MworbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEiCittc2dzdHIgIlNlbGVjY2lvbmFyIGF1dG9tw6F0aWNhbWVudGUgU0hBMSBoYXNoIgorCisjOiBnaXRrOjkzOTgKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9uZXMgZGUgdmlzdWFsaXphY2nDs24gZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6OTQwMAorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJFc3BhY2lhZG8gZGUgdGFidWxhZG9yIgorCisjOiBnaXRrOjk0MDQKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzIgorbXNnc3RyICJNb3N0cmFyIGV0aXF1ZXRhcyBjZXJjYW5hcyIKKworIzogZ2l0azo5NDA5Cittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJMaW1pdGFyIGxhcyBkaWZlcmVuY2lhcyBhIGxhcyBydXRhcyBzZWxlY2Npb25hZGFzIgorCisjOiBnaXRrOjk0MTQKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjk0MjEKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIiIKKworIzogZ2l0azo5NDIzCittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTQyOAorbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJDb2xvcmVzOiBwdWxzZSBwYXJhIHNlbGVjY2lvbmFyIgorCisjOiBnaXRrOjk0MzEKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJGb25kbyIKKworIzogZ2l0azo5NDM1Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJpbWVyIHBsYW5vIgorCisjOiBnaXRrOjk0MzkKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IGzDrW5lYXMgdmllamFzIgorCisjOiBnaXRrOjk0NDQKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IGzDrW5lYXMgbnVldmFzIgorCisjOiBnaXRrOjk0NDkKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZjogY2FiZWNlcmEgZGUgZnJhZ21lbnRvIgorCisjOiBnaXRrOjk0NTUKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIkNvbG9yIGRlIGZvbmRvIGRlIGxhIHNlbGVjY2nDs24iCisKKyM6IGdpdGs6OTQ1OQorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIlRpcG9ncmFmw61hczogcHVsc2UgcGFyYSBlbGVnaXIiCisKKyM6IGdpdGs6OTQ2MQorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAiVGlwb2dyYWbDrWEgcHJpbmNpcGFsIgorCisjOiBnaXRrOjk0NjIKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiVGlwb2dyYWbDrWEgcGFyYSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azo5NDYzCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiVGlwb2dyYWbDrWEgcGFyYSBpbnRlcmZheiBkZSB1c3VhcmlvIgorCisjOiBnaXRrOjk0ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiBlbGVnaXIgY29sb3IgcGFyYSAlcyIKKworIzogZ2l0azo5OTM0Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisiRXN0YSB2ZXJzacOzbiBkZSBUY2wvVGsgZXMgZGVtYXNpYWRvIGFudGlndWEuXG4iCisiIEdpdGsgcmVxdWllcmUgVGNsL1RrIHZlcnNpw7NuIDguNCBvIHN1cGVyaW9yLiIKKworIzogZ2l0azoxMDA0NworbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIk5vIGhheSB1biByZXBvc2l0b3JpbyBnaXQgYXF1w60uIgorCisjOiBnaXRrOjEwMDUxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKK21zZ3N0ciAiTm8gaGF5IGRpcmVjdG9yaW8gZ2l0IFwiJXNcIi4iCisKKyM6IGdpdGs6MTAwOTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIiIKKyJBcmd1bWVudG8gYW1iaWd1bzogJyVzJyBlcyB0YW50byB1bmEgcmV2aXNpw7NuIGNvbW8gdW4gbm9tYnJlIGRlIGFyY2hpdm8iCisKKyM6IGdpdGs6MTAxMTAKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJBcmd1bWVudG9zIGluY29ycmVjdG9zIGEgR2l0azoiCisKKyM6IGdpdGs6MTAxNzAKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkzDrW5lYSBkZSBjb21hbmRvcyIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL2ZyLnBvIGIvZ2l0ay1naXQvcG8vZnIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3MGRkYwotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL2ZyLnBvCkBAIC0wLDAgKzEsMTI1NCBAQAorIyBGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIGdpdGsgcGFja2FnZQorIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjIFRyYW5zbGF0b3JzOgorIyBFbW1hbnVlbCBUcmlsbGF1ZCA8ZXRyaWxsYXVkQGdtYWlsLmNvbT4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGtcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDktMTAtMDUgMTU6MTYrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMTEtMTkgMjI6MTMrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogRW1tYW51ZWwgVHJpbGxhdWQgPGV0cmlsbGF1ZEBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogZ2l0QHZnZXIua2VybmVsLm9yZ1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtUG9lZGl0LUxhbmd1YWdlOiBGcmVuY2hcbiIKKyJYLVBvZWRpdC1Db3VudHJ5OiBGUkFOQ0VcbiIKKworIzogZ2l0azoxMTMKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGEgbGlzdGUgZGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzIDoiCisKKyM6IGdpdGs6MjY5Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJFcnJldXIgbG9ycyBkdSBwYXJjb3VycyBkZXMgcsOpdmlzaW9ucyA6IgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIkVycmV1ciDDoCBsJ2V4w6ljdXRpb24gZGUgbGEgY29tbWFuZGUgLS1hcmdzY21kIDoiCisKKyM6IGdpdGs6MzM3Cittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiQXVjdW4gZmljaGllciBzw6lsZWN0aW9ubsOpIDogLS1tZXJnZSBwcsOpY2lzw6ksIG1haXMgdG91cyBsZXMgZmljaGllcnMgc29udCAiCisiZnVzaW9ubsOpcy4iCisKKyMgRklYTUUgOiBhbcOpbGlvcmVyIGxhIHRyYWR1Y3Rpb24gZGUgJ2ZpbGUgbGltaXRlJworIzogZ2l0azozNDAKKyMsIGZ1enp5Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyJBdWN1biBmaWNoaWVyIHPDqWxlY3Rpb25uw6kgOiAtLW1lcmdlIHByw6ljaXPDqSBtYWlzIGF1Y3VuIGZpY2hpZXIgbm9uIGZ1c2lvbm7DqSAiCisibidlc3QgZGFucyBsYSBsaW1pdGUgZGVzIGZpY2hpZXJzLiIKKworIzogZ2l0azozNjIgZ2l0azo1MDkKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkVycmV1ciDDoCBsJ2V4w6ljdXRpb24gZGUgZ2l0IGxvZyA6IgorCisjOiBnaXRrOjM4MCBnaXRrOjUyNQorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIkxlY3R1cmUgZW4gY291cnMiCisKKyM6IGdpdGs6NDQwIGdpdGs6NDEyMworbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiTGVjdHVyZSBkZXMgY29tbWl0cy4uLiIKKworIzogZ2l0azo0NDMgZ2l0azoxNTYxIGdpdGs6NDEyNgorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIkF1Y3VuIGNvbW1pdCBzw6lsZWN0aW9ubsOpIgorCisjOiBnaXRrOjE0MzcKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSBsYSBzb3J0aWUgZGUgZ2l0IGxvZyA6IgorCisjOiBnaXRrOjE2NTcKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJBdWN1bmUgaW5mb3JtYXRpb24gZGlzcG9uaWJsZSBzdXIgbGUgY29tbWl0IgorCisjOiBnaXRrOjE3OTMgZ2l0azoxODE3IGdpdGs6MzkxNiBnaXRrOjg3ODYgZ2l0azoxMDMyMiBnaXRrOjEwNDk4Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjE4MTkgZ2l0azozOTE4IGdpdGs6ODM4MyBnaXRrOjg0NTcgZ2l0azo4NTY3IGdpdGs6ODYxNiBnaXRrOjg3ODgKKyM6IGdpdGs6MTAzMjMgZ2l0azoxMDQ5OQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQW5udWxlciIKKworIzogZ2l0azoxOTE5Cittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJNaXNlIMOgIGpvdXIiCisKKyM6IGdpdGs6MTkyMAorbXNnaWQgIlJlbG9hZCIKK21zZ3N0ciAiUmVjaGFyZ2VyIgorCisjOiBnaXRrOjE5MjEKK21zZ2lkICJSZXJlYWQgcmVmZXJlbmNlcyIKK21zZ3N0ciAiUmVsaXJlIGxlcyByw6lmw6lyZW5jZXMiCisKKyM6IGdpdGs6MTkyMgorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiTGlzdGVyIGxlcyByw6lmw6lyZW5jZXMiCisKKyM6IGdpdGs6MTkyNAorbXNnaWQgIlN0YXJ0IGdpdCBndWkiCittc2dzdHIgIkTDqW1hcnJlciBnaXQgZ3VpIgorCisjOiBnaXRrOjE5MjYKK21zZ2lkICJRdWl0IgorbXNnc3RyICJRdWl0dGVyIgorCisjOiBnaXRrOjE5MTgKK21zZ2lkICJGaWxlIgorbXNnc3RyICJGaWNoaWVyIgorCisjOiBnaXRrOjE5MzAKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHLDqWbDqXJlbmNlcyIKKworIzogZ2l0azoxOTI5Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiw4lkaXRlciIKKworIzogZ2l0azoxOTM0Cittc2dpZCAiTmV3IHZpZXcuLi4iCittc2dzdHIgIk5vdXZlbGxlIHZ1ZS4uLiIKKworIzogZ2l0azoxOTM1Cittc2dpZCAiRWRpdCB2aWV3Li4uIgorbXNnc3RyICLDiWRpdGVyIGxhIHZ1ZS4uLiIKKworIzogZ2l0azoxOTM2Cittc2dpZCAiRGVsZXRlIHZpZXciCittc2dzdHIgIlN1cHByaW1lciBsYSB2dWUiCisKKyM6IGdpdGs6MTkzOAorbXNnaWQgIkFsbCBmaWxlcyIKK21zZ3N0ciAiVG91cyBsZXMgZmljaGllcnMiCisKKyM6IGdpdGs6MTkzMyBnaXRrOjM2NzAKK21zZ2lkICJWaWV3IgorbXNnc3RyICJWdWUiCisKKyM6IGdpdGs6MTk0MyBnaXRrOjE5NTMgZ2l0azoyNjU0Cittc2dpZCAiQWJvdXQgZ2l0ayIKK21zZ3N0ciAiw4AgcHJvcG9zIGRlIGdpdGsiCisKKyM6IGdpdGs6MTk0NCBnaXRrOjE5NTgKK21zZ2lkICJLZXkgYmluZGluZ3MiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciIKKworIzogZ2l0azoxOTQyIGdpdGs6MTk1NworbXNnaWQgIkhlbHAiCittc2dzdHIgIkFpZGUiCisKKyM6IGdpdGs6MjAxOAorbXNnaWQgIlNIQTEgSUQ6ICIKK21zZ3N0ciAiSUQgU0hBMSA6IgorCisjOiBnaXRrOjIwNDkKK21zZ2lkICJSb3ciCittc2dzdHIgIkNvbG9ubmUiCisKKyM6IGdpdGs6MjA4MAorbXNnaWQgIkZpbmQiCittc2dzdHIgIlJlY2hlcmNoZSIKKworIzogZ2l0azoyMDgxCittc2dpZCAibmV4dCIKK21zZ3N0ciAic3VpdmFudCIKKworIzogZ2l0azoyMDgyCittc2dpZCAicHJldiIKK21zZ3N0ciAicHLDqWPDqWRlbnQiCisKKyM6IGdpdGs6MjA4MworbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IgorCisjOiBnaXRrOjIwODYgZ2l0azoyMDg4IGdpdGs6NDI4NCBnaXRrOjQzMDcgZ2l0azo0MzMxIGdpdGs6NjI3MiBnaXRrOjYzNDQKKyM6IGdpdGs6NjQyOAorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJjb250aWVudCA6IgorCisjOiBnaXRrOjIwODkgZ2l0azozMTYyIGdpdGs6MzE2NyBnaXRrOjQzNTkKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgImNoZW1pbnMgbW9kaWZpw6lzIDoiCisKKyM6IGdpdGs6MjA5MCBnaXRrOjQzNjQKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAiYWpvdXRlL3N1cHByaW1lIGxhIGNoYcOubmUgOiIKKworIzogZ2l0azoyMDk5IGdpdGs6MjEwMQorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJFeGFjdCIKKworIzogZ2l0azoyMTAxIGdpdGs6NDQzOSBnaXRrOjYyNDAKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICJJZ25vcmVyIGxhIGNhc3NlIgorCisjOiBnaXRrOjIxMDEgZ2l0azo0MzMzIGdpdGs6NDQzNyBnaXRrOjYyMzYKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIkV4cHJlc3Npb24gcsOpZ3VsacOocmUiCisKKyM6IGdpdGs6MjEwMyBnaXRrOjIxMDQgZ2l0azo0NDU4IGdpdGs6NDQ4OCBnaXRrOjQ0OTUgZ2l0azo2MzY0IGdpdGs6NjQzMgorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIlRvdXMgbGVzIGNoYW1wcyIKKworIzogZ2l0azoyMTA0IGdpdGs6NDQ1NiBnaXRrOjQ0ODggZ2l0azo2MzAzCittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIlN1cmxpZ25lciIKKworIzogZ2l0azoyMTA1IGdpdGs6NDQ1NiBnaXRrOjYzMDMgZ2l0azo2NDMyIGdpdGs6Njg2NgorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJDb21tZW50YWlyZXMiCisKKyM6IGdpdGs6MjEwNSBnaXRrOjQ0NTYgZ2l0azo0NDYwIGdpdGs6NDQ5NSBnaXRrOjYzMDMgZ2l0azo2ODAxIGdpdGs6ODA2MworIzogZ2l0azo4MDc4Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRldXIiCisKKyM6IGdpdGs6MjEwNSBnaXRrOjQ0NTYgZ2l0azo2MzAzIGdpdGs6NjgwMworbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiQXV0ZXVyIGR1IGNvbW1pdCIKKworIzogZ2l0azoyMTM0Cittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJSZWNoZXJjaGVyIgorCisjOiBnaXRrOjIxNDEKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZmIgorCisjOiBnaXRrOjIxNDMKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiQW5jaWVubmUgdmVyc2lvbiIKKworIzogZ2l0azoyMTQ1Cittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIk5vdXZlbGxlIHZlcnNpb24iCisKKyM6IGdpdGs6MjE0NworbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIkxpZ25lcyBkZSBjb250ZXh0ZSIKKworIzogZ2l0azoyMTU3Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JlciBsZXMgbW9kaWZpY2F0aW9ucyBkJ2VzcGFjZSIKKworIzogZ2l0azoyMjE1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIlBhdGNoIgorCisjOiBnaXRrOjIyMTcKK21zZ2lkICJUcmVlIgorbXNnc3RyICJBcmJyZSIKKworIzogZ2l0azoyMzYxIGdpdGs6MjM3OAorbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZiBlbnRyZSBjZWNpIGV0IGxhIHPDqWxlY3Rpb24iCisKKyM6IGdpdGs6MjM2MiBnaXRrOjIzNzkKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIkRpZmYgZW50cmUgc8OpbGVjdGlvbiBldCBjZWNpIgorCisjOiBnaXRrOjIzNjMgZ2l0azoyMzgwCittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiQ3LDqWVyIHBhdGNoIgorCisjOiBnaXRrOjIzNjQgZ2l0azo4NDQxCittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAiQ3LDqWVyIHRhZyIKKworIzogZ2l0azoyMzY1IGdpdGs6ODU0NworbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICLDiWNyaXJlIGxlIGNvbW1pdCBkYW5zIHVuIGZpY2hpZXIiCisKKyM6IGdpdGs6MjM2NiBnaXRrOjg2MDQKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBub3V2ZWxsZSBicmFuY2hlIgorCisjOiBnaXRrOjIzNjcKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiQ3VlaWxsaXIgKGNoZXJyeS1waWNrKSBjZSBjb21taXQiCisKKyM6IGdpdGs6MjM2OAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlLDqWluaXRpYWxpc2VyIGxhIGJyYW5jaGUgSEVBRCB2ZXJzIGNldCDDqXRhdCIKKworIzogZ2l0azoyMzY5Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiTWFycXVlciBjZSBjb21taXQiCisKKyM6IGdpdGs6MjM3MAorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJSZXRvdXJuZXIgw6AgbGEgbWFycXVlIgorCisjOiBnaXRrOjIzNzEKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiQ2hlcmNoZXIgbGUgZGVzY2VuZGFudCBkZSBjZWNpIGV0IGxlIG1hcnF1ZXIiCisKKyM6IGdpdGs6MjM3MgorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJDb21wYXJlciBhdmVjIGxlIGNvbW1pdCBtYXJxdcOpIgorCisjOiBnaXRrOjIzODYKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIlLDqWN1cMOpcmVyIGNldHRlIGJyYW5jaGUiCisKKyM6IGdpdGs6MjM4NworbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiU3VwcHJpbWVyIGNldHRlIGJyYW5jaGUiCisKKyM6IGdpdGs6MjM5NAorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiU3VybGlnbmVyIMOpZ2FsZW1lbnQgY2VjaSIKKworIzogZ2l0azoyMzk1Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiU3VybGlnbmVyIHNldWxlbWVudCBjZWNpIgorCisjOiBnaXRrOjIzOTYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJEaWZmIGV4dGVybmUiCisKKyM6IGdpdGs6MjM5NworbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIkJsw6JtZXIgbGUgY29tbWl0IHBhcmVudCIKKworIzogZ2l0azoyNDA0Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJNb250cmVyIGwnb3JpZ2luZSBkZSBjZXR0ZSBsaWduZSIKKworIzogZ2l0azoyNDA1Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICJFeMOpY3V0ZXIgZ2l0IGd1aSBibGFtZSBzdXIgY2V0dGUgbGlnbmUiCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgXFx1MDBhOSAyMDA1LTIwMTAgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIHZpc3VhbGlzYXRldXIgZGUgY29tbWl0IHBvdXIgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXRpbGlzYXRpb24gZXQgcmVkaXN0cmlidXRpb24gc291bWlzZXMgYXV4IHRlcm1lcyBkZSBsYSBHTlUgR2VuZXJhbCBQdWJsaWMgIgorIkxpY2Vuc2UiCisKKyM6IGdpdGs6MjY2NCBnaXRrOjI3MjYgZ2l0azo4OTY5Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkZlcm1lciIKKworIzogZ2l0azoyNjgzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciBkZSBHaXRrIgorCisjOiBnaXRrOjI2ODYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciBkZSBHaXRrIDoiCisKKyM6IGdpdGs6MjY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0UXVpdHRlciIKKworIzogZ2l0azoyNjg5Cittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8RMOpYnV0Plx0XHRBbGxlciBhdSBwcmVtaWVyIGNvbW1pdCIKKworIzogZ2l0azoyNjkwCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEZpbj5cdFx0QWxsZXIgYXUgZGVybmllciBjb21taXQiCisKKyM6IGdpdGs6MjY5MQorbXNnaWQgIjxVcD4sIHAsIGlcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPEhhdXQ+LCBwLCBpXHQgQWxsZXIgYXUgY29tbWl0IHN1aXZhbnQiCisKKyM6IGdpdGs6MjY5MgorbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxCYXM+LCBuLCBrXHQgQWxsZXIgYXUgY29tbWl0IHByw6ljw6lkZW50IgorCisjOiBnaXRrOjI2OTMKK21zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8R2F1Y2hlPiwgeiwgalx0UmVjdWxlciBkYW5zIGwnaGlzdG9yaXF1ZSIKKworIzogZ2l0azoyNjk0Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxEcm9pdGU+LCB4LCBsXHRBdmFuY2VyIGRhbnMgbCdoaXN0b3JpcXVlIgorCisjOiBnaXRrOjI2OTUKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MjY5NgorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx0RGVzY2VuZHJlIGQndW5lIHBhZ2UgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azoyNjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRMOpYnV0Plx0QWxsZXIgZW4gaGF1dCBkZSBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azoyNjk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHRBbGxlciBlbiBiYXMgZGUgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MjY5OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx0TW9udGVyIGQndW5lIGxpZ25lIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MjcwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx0RGVzY2VuZHJlIGQndW5lIGxpZ25lIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MjcwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHRNb250ZXIgZCd1bmUgcGFnZSBkYW5zIGxhIGxpc3RlIGRlcyBjb21taXRzIgorCisjOiBnaXRrOjI3MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx0RGVzY2VuZHJlIGQndW5lIHBhZ2UgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azoyNzAzCittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICIiCisiPFNoaWZ0LVVwPlx0UmVjaGVyY2hlIGVuIGFycmnDqHJlICh2ZXJzIGwnYXZhbnQsIGNvbW1pdHMgbGVzIHBsdXMgYW5jaWVucykiCisKKyM6IGdpdGs6MjcwNAorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICIiCisiPFNoaWZ0LURvd24+XHRSZWNoZXJjaGUgZW4gYXZhbnQgKHZlcnMgbCdhcnJpw6hyZSwgY29tbWl0IGxlcyBwbHVzIHLDqWNlbnRzKSIKKworIzogZ2l0azoyNzA1Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxTdXBwcmltZXI+LCBiXHRNb250ZXIgZCd1bmUgcGFnZSBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzA2Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHRNb250ZXIgZCd1bmUgcGFnZSBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzA3Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxFc3BhY2U+XHRcdERlc2NlbmRyZSBkJ3VuZSBwYWdlIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjI3MDgKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0TW9udGVyIGRlIDE4IGxpZ25lcyBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzA5Cittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0RGVzY2VuZHJlIGRlIDE4IGxpZ25lcyBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRSZWNoZXJjaGVyIgorCisjOiBnaXRrOjI3MTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0QWxsZXIgYXUgcsOpc3VsdGF0IGRlIHJlY2hlcmNoZSBzdWl2YW50IgorCisjOiBnaXRrOjI3MTIKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx0XHRBbGxlciBhdSByw6lzdWx0YXQgZGUgcmVjaGVyY2hlIHN1aXZhbnQiCisKKyM6IGdpdGs6MjcxMworbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0Rm9jdXMgc3VyIGxhIHpvbmUgZGUgcmVjaGVyY2hlIgorCisjOiBnaXRrOjI3MTQKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0QWxsZXIgYXUgcsOpc3VsdGF0IGRlIHJlY2hlcmNoZSBwcsOpY8OpZGVudCIKKworIzogZ2l0azoyNzE1Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRBbGxlciBhdSBwcm9jaGFpbiBmaWNoaWVyIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjI3MTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRBbGxlciBhdSByw6lzdWx0YXQgc3VpdmFudCBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdEFsbGVyIGF1IHLDqXN1bHRhdCBwcsOpY8OpZGVudCBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azoyNzE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdEF1Z21lbnRlciBsYSB0YWlsbGUgZGUgbGEgcG9saWNlIgorCisjOiBnaXRrOjI3MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHRBdWdtZW50ZXIgbGEgdGFpbGxlIGRlIGxhIHBvbGljZSIKKworIzogZ2l0azoyNzIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdERpbWludWVyIGxhIHRhaWxsZSBkZSBsYSBwb2xpY2UiCisKKyM6IGdpdGs6MjcyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1pbnVzPlx0RGltaW51ZXIgbGEgdGFpbGxlIGRlIGxhIHBvbGljZSIKKworIzogZ2l0azoyNzIyCittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0TWlzZSDDoCBqb3VyIgorCisjOiBnaXRrOjMxNzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiRXJyZXVyIGVuIG9idGVuYW50IFwiJXNcIiBkZSAlczoiCisKKyM6IGdpdGs6MzIzNCBnaXRrOjMyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgY3LDqWF0aW9uIGR1IHLDqXBlcnRvaXJlIHRlbXBvcmFpcmUgJXMgOiIKKworIzogZ2l0azozMjU1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICLDqWNoZWMgZGUgbGEgY29tbWFuZGUgOiIKKworIzogZ2l0azozNDAxCittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIkNvbW1pdCBpbmV4aXN0YW50IgorCisjOiBnaXRrOjM0MTUKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWUgOiDDqWNoZWMgZGUgbGEgY29tbWFuZGUgOiIKKworIzogZ2l0azozNDQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIGxlIGhlYWQgZGUgbGEgZnVzaW9uIDogJXMiCisKKyM6IGdpdGs6MzQ1NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJFcnJldXIgw6AgbGEgbGVjdHVyZSBkZSBsJ2luZGV4IDogJXMiCisKKyM6IGdpdGs6MzQ3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpbWFycmVyIGdpdCBibGFtZSA6ICVzIgorCisjOiBnaXRrOjM0ODIgZ2l0azo2MjcxCittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJSZWNoZXJjaGUgZW4gY291cnMiCisKKyM6IGdpdGs6MzUxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiRXJyZXVyIMOgIGwnZXjDqWN1dGlvbiBkZSBnaXQgYmxhbWUgOiAlcyIKKworIzogZ2l0azozNTQyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAiQ2V0dGUgbGlnbmUgZXN0IGlzc3VlIGR1IGNvbW1pdCAlcywgcXVpIG4nZXN0IHBhcyBkYW5zIGNldHRlIHZ1ZSIKKworIzogZ2l0azozNTU2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiw4ljaGVjIGRlIGwnb3V0aWwgZXh0ZXJuZSBkZSB2aXN1YWxpc2F0aW9uIGRlcyBkaWZmIgorCisjOiBnaXRrOjM2NzQKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRMOpZmluaXRpb24gZGVzIHZ1ZXMgZGUgR2l0ayIKKworIzogZ2l0azozNjc4Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJTZSBzb3V2ZW5pciBkZSBjZXR0ZSB2dWUiCisKKyM6IGdpdGs6MzY3OQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlLDqWbDqXJlbmNlcyAobGlzdGUgZCfDqWzDqW1lbnRzIHPDqXBhcsOpcyBwYXIgZGVzIGVzcGFjZXMpIDoiCisKKyM6IGdpdGs6MzY4MAorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIkJyYW5jaGVzICYgdGFncyA6IgorCisjOiBnaXRrOjM2ODEKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiVG91dGVzIGxlcyByw6lmw6lyZW5jZXMiCisKKyM6IGdpdGs6MzY4MgorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJUb3V0ZXMgbGVzIGJyYW5jaGVzIChsb2NhbGVzKSIKKworIzogZ2l0azozNjgzCittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIlRvdXMgbGVzIHRhZ3MiCisKKyM6IGdpdGs6MzY4NAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIlRvdXRlcyBsZXMgYnJhbmNoZXMgZGUgc3Vpdmkgw6AgZGlzdGFuY2UiCisKKyM6IGdpdGs6MzY4NQorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIkluZm8gc3VyIGxlcyBjb21taXRzIChleHByZXNzaW9ucyByw6lndWxpw6hyZXMpIDoiCisKKyM6IGdpdGs6MzY4NgorbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIkF1dGV1ciA6IgorCisjOiBnaXRrOjM2ODcKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJDb21taXRldXIgOiIKKworIzogZ2l0azozNjg4Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCA6IgorCisjOiBnaXRrOjM2ODkKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiQ29ycmVzcG9uZCDDoCB0b3VzIGxlcyBjcml0w6hyZXMgZCdJbmZvIHN1ciBsZXMgY29tbWl0cyIKKworIzogZ2l0azozNjkwCittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIkNoYW5nZW1lbnRzIGRlcyBmaWNoaWVycyA6IgorCisjOiBnaXRrOjM2OTEKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIkNoYcOubmUgRmlnw6llIgorCisjOiBnaXRrOjM2OTIKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIkV4cHJlc3Npb24gUsOpZ3VsacOocmUiCisKKyM6IGdpdGs6MzY5MworbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJSZWNoZXJjaGUgZGUgbGEgY2hhw65uZSA6IgorCisjOiBnaXRrOjM2OTQKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJEYXRlcyBkZXMgY29tbWl0cyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgIgorIjIwMDkgMTU6Mjc6MzhcIikgOiIKKworIzogZ2l0azozNjk1Cittc2dpZCAiU2luY2U6IgorbXNnc3RyICJEZSA6IgorCisjOiBnaXRrOjM2OTYKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIkp1c3F1J2F1IDoiCisKKyM6IGdpdGs6MzY5NworbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJMaW1pdGVyIGV0L291IHNhdXRlciB1biBjZXJ0YWluIG5vbWJyZSAoZW50aWVyIHBvc2l0aWYpIGRlIHLDqXZpc2lvbnMgOiIKKworIzogZ2l0azozNjk4Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICJOb21icmUgw6AgYWZmaWNoZXIgOiIKKworIzogZ2l0azozNjk5Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICJOb21icmUgw6Agc2F1dGVyIDoiCisKKyM6IGdpdGs6MzcwMAorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIk9wdGlvbnMgZGl2ZXJzZXMgOiIKKworIzogZ2l0azozNzAxCittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJUcmllciBwYXIgZGF0ZSIKKworIyBGSVhNRSA6IHRyYWR1Y3Rpb24gZGUgImJyYW5jaCBzaWRlcyIKKyM6IGdpdGs6MzcwMgorIywgZnV6enkKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiTWFycXVlciBsZXMgZXh0csOpbWl0w6lzIGRlcyBicmFuY2hlcyIKKworIzogZ2l0azozNzAzCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJMaW1pdGVyIGF1IHByZW1pZXIgYW5jw6p0cmUiCisKKyM6IGdpdGs6MzcwNAorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJIaXN0b3JpcXVlIHNpbXBsZSIKKworIzogZ2l0azozNzA1Cittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIkFyZ3VtZW50cyBzdXBwbMOpbWVudGFpcmVzIGRlIGdpdCBsb2cgOiIKKworIzogZ2l0azozNzA2Cittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIlNhaXNpciBsZXMgZmljaGllcnMgZXQgcsOpcGVydG9pcmVzIMOgIGluY2x1cmUsIHVuIHBhciBsaWduZSA6IgorCisjOiBnaXRrOjM3MDcKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiQ29tbWFuZGUgcG91ciBnw6luw6lyZXIgcGx1cyBkZSBjb21taXRzIMOgIGluY2x1cmUgOiIKKworIzogZ2l0azozODI5Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrIDogw6lkaXRlciBsYSB2dWUiCisKKyM6IGdpdGs6MzgzNworbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSBjcml0w6hyZSBwb3VyIGxhIHPDqWxlY3Rpb24gZGVzIHLDqXZpc2lvbnMiCisKKyM6IGdpdGs6Mzg0MgorbXNnaWQgIlZpZXcgTmFtZToiCittc2dzdHIgIk5vbSBkZSBsYSB2dWUgOiIKKworIzogZ2l0azozOTE3Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQXBwbGlxdWVyIChGNSkiCisKKyM6IGdpdGs6Mzk1NQorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRXJyZXVyIGRhbnMgbGVzIGFyZ3VtZW50cyBkZSBzw6lsZWN0aW9uIGRlcyBjb21taXRzIDoiCisKKyM6IGdpdGs6NDAwOCBnaXRrOjQwNjAgZ2l0azo0NTA4IGdpdGs6NDUyMiBnaXRrOjU3ODMgZ2l0azoxMTE5NiBnaXRrOjExMTk3Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiQXVjdW4iCisKKyM6IGdpdGs6NDQ1NiBnaXRrOjYzMDMgZ2l0azo4MDY1IGdpdGs6ODA4MAorbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdGUiCisKKyM6IGdpdGs6NDQ1NiBnaXRrOjYzMDMKK21zZ2lkICJDRGF0ZSIKK21zZ3N0ciAiQ0RhdGUiCisKKyM6IGdpdGs6NDYwNSBnaXRrOjQ2MTAKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJEZXNjZW5kYW50IgorCisjOiBnaXRrOjQ2MDYKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiUGFzIHVuIGRlc2NlbmRhbnQiCisKKyM6IGdpdGs6NDYxMyBnaXRrOjQ2MTgKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiQW5jw6p0cmUiCisKKyM6IGdpdGs6NDYxNAorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAiUGFzIHVuIGFuY8OqdHJlIgorCisjOiBnaXRrOjQ5MDQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIk1vZGlmaWNhdGlvbnMgbG9jYWxlcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdpbmRleCBtYWlzIG5vbiBjb21taXTDqWVzIgorCisjOiBnaXRrOjQ5NDAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBsb2NhbGVzIG5vbiBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdpbmRleCBldCBub24gY29tbWl0w6llcyIKKworIzogZ2l0azo2NjIxCittc2dpZCAibWFueSIKK21zZ3N0ciAibm9tYnJldXgiCisKKyM6IGdpdGs6NjgwNQorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJUYWdzIDoiCisKKyM6IGdpdGs6NjgyMiBnaXRrOjY4MjggZ2l0azo4MDU4Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJQYXJlbnQiCisKKyM6IGdpdGs6NjgzMworbXNnaWQgIkNoaWxkIgorbXNnc3RyICJFbmZhbnQiCisKKyM6IGdpdGs6Njg0MgorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiQnJhbmNoZSIKKworIzogZ2l0azo2ODQ1Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiU3VpdCIKKworIzogZ2l0azo2ODQ4Cittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlByw6ljw6hkZSIKKworIzogZ2l0azo3MzQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGRlcyBkaWZmIDogJXMiCisKKyM6IGdpdGs6Nzg4NgorbXNnaWQgIkdvdG86IgorbXNnc3RyICJBbGxlciDDoCA6IgorCisjOiBnaXRrOjc4ODgKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiSWQgU0hBMSA6IgorCisjOiBnaXRrOjc5MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiSWQgU0hBMSBjb3VydCAlcyBlc3QgYW1iaWd1IgorCisjOiBnaXRrOjc5MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIklkIFNIQTEgJXMgZXN0IGluY29ubnUiCisKKyM6IGdpdGs6NzkyNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJJZCBTSEExICVzIGVzdCBpbmNvbm51IgorCisjOiBnaXRrOjc5MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiTGEgcsOpdmlzaW9uICVzIG4nZXN0IHBhcyBkYW5zIGxhIHZ1ZSBjb3VyYW50ZSIKKworIzogZ2l0azo4MDY4Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkVuZmFudHMiCisKKyM6IGdpdGs6ODEyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSw6lpbml0aWFsaXNlciBsYSBicmFuY2hlICVzIHZlcnMgY2V0IMOpdGF0IgorCisjOiBnaXRrOjgxMjcKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiSGVhZCBkw6l0YWNow6kgOiBpbXBvc3NpYmxlIGRlIHLDqWluaXRpYWxpc2VyIgorCisjOiBnaXRrOjgyMzYgZ2l0azo4MjQyCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiw4l2aXRlciBsZSBjb21taXQgZGUgbGEgZnVzaW9uICIKKworIzogZ2l0azo4MjUxIGdpdGs6ODI1NgorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRXJyZXVyIMOgIGwnb2J0ZW50aW9uIGRlIGwnSUQgZHUgcGF0Y2ggcG91ciAiCisKKyM6IGdpdGs6ODI1MiBnaXRrOjgyNTcKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBhcnLDqnQgZW4gY291cnNcbiIKKworIzogZ2l0azo4MjYyIGdpdGs6ODI2NSBnaXRrOjgyNzMgZ2l0azo4MjgzIGdpdGs6ODI5MgorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkNvbW1pdCAiCisKKyM6IGdpdGs6ODI2NgorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiZXN0IGxlIG3Dqm1lIHBhdGNoIHF1ZSBcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjgyNzQKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgZGlmZsOocmUgZGVcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjgyNzYKK21zZ2lkICItIHN0b3BwaW5nXG4iCittc2dzdHIgIi0gYXJyw6p0IGVuIGNvdXJzXG4iCisKKyM6IGdpdGs6ODI4NCBnaXRrOjgyOTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiYSAlcyBlbmZhbnRzIC0gYXJyw6p0IGVuIGNvdXJzXG4iCisKKyM6IGdpdGs6ODMyNAorbXNnaWQgIlRvcCIKK21zZ3N0ciAiSGF1dCIKKworIzogZ2l0azo4MzI1Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAiRGUiCisKKyM6IGdpdGs6ODMzMAorbXNnaWQgIlRvIgorbXNnc3RyICLDgCIKKworIzogZ2l0azo4MzU0Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkfDqW7DqXJlciBsZSBwYXRjaCIKKworIzogZ2l0azo4MzU2Cittc2dpZCAiRnJvbToiCittc2dzdHIgIkRlIDoiCisKKyM6IGdpdGs6ODM2NQorbXNnaWQgIlRvOiIKK21zZ3N0ciAiw4AgOiIKKworIzogZ2l0azo4Mzc0Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiSW52ZXJzZXIiCisKKyM6IGdpdGs6ODM3NiBnaXRrOjg1NjEKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIkZpY2hpZXIgZGUgc29ydGllIDoiCisKKyM6IGdpdGs6ODM4MgorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHw6luw6lyZXIiCisKKyM6IGdpdGs6ODQyMAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRXJyZXVyIMOgIGxhIGNyw6lhdGlvbiBkdSBwYXRjaCA6IgorCisjOiBnaXRrOjg0NDMgZ2l0azo4NTQ5IGdpdGs6ODYwNgorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQgOiIKKworIzogZ2l0azo4NDUyCittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb20gZHUgVGFnIDoiCisKKyM6IGdpdGs6ODQ1NiBnaXRrOjg2MTUKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyw6llciIKKworIzogZ2l0azo4NDczCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJBdWN1biBub20gZGUgdGFnIHNww6ljaWZpw6kiCisKKyM6IGdpdGs6ODQ3NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkxlIHRhZyBcIiVzXCIgZXhpc3RlIGTDqWrDoCIKKworIzogZ2l0azo4NDgzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyZXVyIMOgIGxhIGNyw6lhdGlvbiBkdSB0YWcgOiIKKworIzogZ2l0azo4NTU4Cittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIkNvbW1hbmRlIDoiCisKKyM6IGdpdGs6ODU2NgorbXNnaWQgIldyaXRlIgorbXNnc3RyICLDiWNyaXJlIgorCisjOiBnaXRrOjg1ODQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkVycmV1ciDDoCBsJ2Vjcml0dXJlIGR1IGNvbW1pdCA6IgorCisjOiBnaXRrOjg2MTEKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTm9tIDoiCisKKyM6IGdpdGs6ODYzNAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIlZldWlsbGV6IHNww6ljaWZpZXIgdW4gbm9tIHBvdXIgbGEgbm91dmVsbGUgYnJhbmNoZSIKKworIzogZ2l0azo4NjM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIkxhIGJyYW5jaGUgJyVzJyBleGlzdGUgZMOpasOgLiDDiWNyYXNlcj8iCisKKyM6IGdpdGs6ODcwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICIiCisiTGUgQ29tbWl0ICVzIGVzdCBkw6lqw6AgaW5jbHVzIGRhbnMgbGEgYnJhbmNoZSAlcyAtLSBsZSByw6ktYXBwbGlxdWVyIG1hbGdyw6kgIgorInRvdXQ/IgorCisjOiBnaXRrOjg3MTAKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiQ3VlaWxsaXIgKENoZXJyeS1waWNraW5nKSIKKworIzogZ2l0azo4NzE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkxhIGN1ZWlsbGV0dGUgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkZSBtb2RpZmljYXRpb25zIGxvY2FsZXMgZHUgIgorImZpY2hpZXIgJyVzJy5cbiIKKyJWZXVpbGxleiBjb21taXRlciwgcsOpaW5pdGlhbGlzZXIgb3Ugc3Rhc2hlciB2b3MgY2hhbmdlbWVudHMgZXQgZXNzYXllciBkZSAiCisibm91dmVhdS4iCisKKyM6IGdpdGs6ODcyNQorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkxhIGN1ZWlsbGV0dGUgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkJ3VuIGNvbmZsaXQgbG9ycyBkJ3VuZSAiCisiZnVzaW9uLlxuIgorIlNvdWhhaXRlei12b3VzIGV4w6ljdXRlciBnaXQgY2l0b29sIHBvdXIgbGUgcsOpc291ZHJlID8iCisKKyM6IGdpdGs6ODc0MQorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJBdWN1biBjaGFuZ2VtZW50IGNvbW1pdMOpIgorCisjOiBnaXRrOjg3NjcKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25maXJtZXIgbGEgcsOpaW5pdGlhbGlzYXRpb24iCisKKyM6IGdpdGs6ODc2OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIlLDqWluaXRpYWxpc2VyIGxhIGJyYW5jaGUgJXMgw6AgJXM/IgorCisjOiBnaXRrOjg3NzMKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVHlwZSBkZSByw6lpbml0aWFsaXNhdGlvbiA6IgorCisjOiBnaXRrOjg3NzcKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiRG91Y2UgOiBMYWlzc2UgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBldCBsJ2luZGV4IGludGFjdHMiCisKKyM6IGdpdGs6ODc4MAorbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiIgorIkh5YnJpZGUgOiBMYWlzc2UgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBkYW5zIHNvbiDDqXRhdCBjb3VyYW50LCAiCisicsOpaW5pdGlhbGlzZSBsJ2luZGV4IgorCisjOiBnaXRrOjg3ODMKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkR1cmUgOiBSw6lpbml0aWFsaXNlIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgZXQgbCdpbmRleFxuIgorIihhYmFuZG9ubmUgVE9VUyBsZXMgY2hhbmdlbWVudHMgbG9jYXV4KSIKKworIzogZ2l0azo4ODAwCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICJSw6lpbml0aWFsaXNhdGlvbiIKKworIyBGaXhtZTogUsOpY3Vww6lyYXRpb24gZXN0LWlsIHZyYWltZW50IHVuZSBtYXV2YWlzZSB0cmFkdWN0aW9uPworIzogZ2l0azo4ODU3CisjLCBmdXp6eQorbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiUsOpY3Vww6lyYXRpb24iCisKKyM6IGdpdGs6ODkxMAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIkltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIGJyYW5jaGUgZW4gY291cnMiCisKKyM6IGdpdGs6ODkxNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiTGVzIGNvbW1pdHMgZGUgbGEgYnJhbmNoZSAlcyBuZSBzb250IGRhbnMgYXVjdW5lIGF1dHJlIGJyYW5jaGUuXG4iCisiVm91bGV6LXZvdXMgdnJhaW1lbnQgc3VwcHJpbWVyIGNldHRlIGJyYW5jaGUgJXMgPyIKKworIzogZ2l0azo4OTQ3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJUYWdzIGV0IGhlYWRzIDogJXMiCisKKyM6IGdpdGs6ODk2MgorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJlciIKKworIzogZ2l0azo5MjU3Cittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRXJyZXVyIMOgIGxhIGxlY3R1cmUgZGVzIGluZm9ybWF0aW9ucyBzdXIgbGEgdG9wb2xvZ2llIGRlcyBjb21taXRzLCBsZXMgIgorImluZm9ybWF0aW9ucyBzdXIgbGVzIGJyYW5jaGVzIGV0IGxlcyB0YWdzIHByw6ljw6lkZW50cy9zdWl2YW50cyBzZXJvbnQgIgorImluY29tcGzDqHRlcy4iCisKKyM6IGdpdGs6MTAyNDMKK21zZ2lkICJUYWciCittc2dzdHIgIlRhZyIKKworIzogZ2l0azoxMDI0MworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMDI5MQorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTw6lsZWN0ZXVyIGRlIHBvbGljZSBkZSBHaXRrIgorCisjOiBnaXRrOjEwMzA4Cittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMDMxMQorbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTA0MDcKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJQcsOpZsOpcmVuY2VzIGRlIEdpdGsiCisKKyM6IGdpdGs6MTA0MDkKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZCdhZmZpY2hhZ2UgZGUgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MTA0MTIKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIkxvbmd1ZXVyIG1heGltdW0gZHUgZ3JhcGhlIChsaWduZXMpIgorCisjIEZJWE1FIDogVHJhZHVjdGlvbiBzdGFuZGFyZCBkZSAicGFuZSI/CisjOiBnaXRrOjEwNDE2CisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIkxvbmd1ZXVyIG1heGltdW0gZHUgZ3JhcGhlICglIGR1IHBhbm5lYXUpIgorCisjOiBnaXRrOjEwNDIwCittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJNb250cmVyIGxlcyBjaGFuZ2VtZW50cyBsb2NhdXgiCisKKyM6IGdpdGs6MTA0MjMKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIgorbXNnc3RyICJTw6lsZWN0aW9uIGF1dG8uIGR1IFNIQTEiCisKKyM6IGdpdGs6MTA0MjcKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkJ2FmZmljaGFnZSBkZXMgZGlmZiIKKworIzogZ2l0azoxMDQyOQorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJUYWlsbGUgZGVzIHRhYnVsYXRpb25zIgorCisjOiBnaXRrOjEwNDMyCittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncyIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIHRhZ3MgbGVzIHBsdXMgcHJvY2hlcyIKKworIzogZ2l0azoxMDQzNQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIkNhY2hlciBsZXMgcmVmcyBkaXN0YW50ZXMiCisKKyM6IGdpdGs6MTA0MzgKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0ZXIgbGVzIGRpZmbDqXJlbmNlcyBhdXggY2hlbWlucyBsaXN0w6lzIgorCisjOiBnaXRrOjEwNDQxCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIlN1cHBvcnQgcG91ciB1biBlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgcGFyIGZpY2hpZXIiCisKKyM6IGdpdGs6MTA0NDcgZ2l0azoxMDUxMgorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiT3V0aWwgZGlmZiBleHRlcm5lIgorCisjOiBnaXRrOjEwNDQ5Cittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICJDaG9pc2lyLi4uIgorCisjOiBnaXRrOjEwNDU0Cittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkNvdWxldXJzIDogY2xpcXVlciBwb3VyIGNob2lzaXIiCisKKyM6IGdpdGs6MTA0NTcKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJBcnJpw6hyZS1wbGFuIgorCisjOiBnaXRrOjEwNDU4IGdpdGs6MTA0ODgKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJhcnJpw6hyZS1wbGFuIgorCisjOiBnaXRrOjEwNDYxCittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJlbWllciBwbGFuIgorCisjOiBnaXRrOjEwNDYyCittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAicHJlbWllciBwbGFuIgorCisjOiBnaXRrOjEwNDY1Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmIDogYW5jaWVubmVzIGxpZ25lcyIKKworIzogZ2l0azoxMDQ2NgorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZmIGFuY2llbm5lcyBsaWduZXMiCisKKyM6IGdpdGs6MTA0NzAKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmYgOiBub3V2ZWxsZXMgbGlnbmVzIgorCisjOiBnaXRrOjEwNDcxCittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgImRpZmYgbm91dmVsbGVzIGxpZ25lcyIKKworIzogZ2l0azoxMDQ3NQorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmIDogZW50w6p0ZSBkdSBodW5rIgorCisjOiBnaXRrOjEwNDc3Cittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiZGlmZiA6IGVudMOqdGUgZHUgaHVuayIKKworIzogZ2l0azoxMDQ4MQorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICJBcnJpw6hyZS1wbGFuIGRlIGxhIGxpZ25lIG1hcnF1w6llIgorCisjOiBnaXRrOjEwNDgzCittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAiQXJyacOocmUtcGxhbiBkZSBsYSBsaWduZSBtYXJxdcOpZSIKKworIzogZ2l0azoxMDQ4NworbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiU8OpbGVjdGlvbm5lciBsJ2FycmnDqHJlLXBsYW4iCisKKyM6IGdpdGs6MTA0OTEKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJQb2xpY2VzIDogY2xpcXVlciBwb3VyIGNob2lzaXIiCisKKyM6IGdpdGs6MTA0OTMKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlBvbGljZSBwcmluY2lwYWxlIgorCisjOiBnaXRrOjEwNDk0Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIlBvbGljZSBkJ2FmZmljaGFnZSBkZXMgZGlmZiIKKworIzogZ2l0azoxMDQ5NQorbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIlBvbGljZSBkZSBsJ2ludGVyZmFjZSB1dGlsaXNhdGV1ciIKKworIzogZ2l0azoxMDUyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGsgOiBjaG9pc2lyIGxhIGNvdWxldXIgZGUgJXMiCisKKyM6IGdpdGs6MTA5NzMKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJEw6lzb2zDqSwgZ2l0ayBuZSBwZXV0IMOqdHJlIGV4w6ljdXTDqSBhdmVjIGNldHRlIHZlcnNpb24gZGUgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpZXJ0IFRjbC9UayB2ZXJzaW9uIDguNCBvdSBzdXDDqXJpZXVyLiIKKworIzogZ2l0azoxMTEwMQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciB1biBkw6lww7R0IGdpdCBpY2kuIgorCisjOiBnaXRrOjExMTA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIHLDqXBlcnRvaXJlIGdpdCBcIiVzXCIuIgorCisjOiBnaXRrOjExMTUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJBcmd1bWVudCAnJXMnIGFtYmlndSA6IMOgIGxhIGZvaXMgdW5lIHLDqXZpc2lvbiBldCB1biBub20gZGUgZmljaGllciIKKworIzogZ2l0azoxMTE2NAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkFyZ3VtZW50cyBpbnZhbGlkZXMgcG91ciBnaXRrIDoiCisKKyM6IGdpdGs6MTEyNDkKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkxpZ25lIGRlIGNvbW1hbmRlIgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vaHUucG8gYi9naXRrLWdpdC9wby9odS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjYyYjYxCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vaHUucG8KQEAgLTAsMCArMSwxMjk1IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdGsgdG8gSHVuZ2FyaWFuLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgUGF1bCBNYWNrZXJyYXMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjCisjIExhc3psbyBQYXBwIDxsYXN6bG8ucGFwcEBhcmh1bmdhcnkuaHU+LCAyMDA5LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0xMi0xNCAxMzozMyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0xMi0xNCAxNDowNCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBMYXN6bG8gUGFwcCA8ZGpzemFwaUBhcmNobGludXgudXM+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSHVuZ2FyaWFuXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdGs6MTE1Cittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IGxldMO2bHRlbmkgYXogdW5tZXJnZWQgZsOhamwgbGlzdMOhdDoiCisKKyM6IGdpdGs6MjcxCittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCDDqXJ0ZWxtZXrDqXMga8O2emJlbjoiCisKKyM6IGdpdGs6MzI2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSB2w6lncmVoYWp0w6Fza29yIC0tYXJnc2NtZCBwYXJhbmNzOiIKKworIzogZ2l0azozMzkKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJOaW5jc2VuIGbDoWpsIGtpdsOhbGFzenR2YTogLS1tZXJnZSBtZWdhZHZlLCBkZSBlZ3lldGxlbiBmw6FqbCBzZW0gdW5tZXJnZWQuIgorCisjOiBnaXRrOjM0MgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiTmluY3NlbiBmw6FqbCBraXbDoWxhc3p0dmE6IC0tbWVyZ2UgbWVnYWR2YSwgZGUgbmluY3NlbmVrIHVubWVyZ2VkIGbDoWpsb2sgYSAiCisiZsOhamxvbiBiZWzDvGwgbGltaXQuIgorCisjOiBnaXRrOjM2NCBnaXRrOjUxMQorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBnaXQgbG9nIHbDqWdyZWhhanTDoXNhIGvDtnpiZW46IgorCisjOiBnaXRrOjM4MiBnaXRrOjUyNworbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIk9sdmFzw6FzIgorCisjOiBnaXRrOjQ0MiBnaXRrOjQyNTgKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkNvbW1pdG9rIG9sdmFzw6FzYSAuLi4iCisKKyM6IGdpdGs6NDQ1IGdpdGs6MTU3NSBnaXRrOjQyNjEKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJOaW5jc2VuIGNvbW1pdCBraXbDoWxhc3p0dmEiCisKKyM6IGdpdGs6MTQ1MQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiTmVtIGxlaGV0IMOpcnRlbG1lem5pIGEgZ2l0IGxvZyBraW1lbmV0w6l0OiIKKworIzogZ2l0azoxNjcxCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiTmluY3NlbiBlbMOpcmhldMWRIGNvbW1pdCBpbmZvcm3DoWNpw7MiCisKKyM6IGdpdGs6MTgxMworbXNnaWQgIm1jIgorbXNnc3RyICJtYyIKKworIzogZ2l0azoxODQ4IGdpdGs6NDA1MSBnaXRrOjkwMjkgZ2l0azoxMDU3MCBnaXRrOjEwNzg5Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjE4NTAgZ2l0azo0MDUzIGdpdGs6ODYyOSBnaXRrOjg3MDMgZ2l0azo4ODEzIGdpdGs6ODg2MiBnaXRrOjkwMzEKKyM6IGdpdGs6MTA1NzEgZ2l0azoxMDc5MAorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiVmlzc3phdm9uw6FzIgorCisjOiBnaXRrOjE5NzIKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIkZyaXNzaXTDqXMiCisKKyM6IGdpdGs6MTk3MworbXNnaWQgIlJlbG9hZCIKK21zZ3N0ciAiw5pqcmF0w7ZsdMOpcyIKKworIzogZ2l0azoxOTc0Cittc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCittc2dzdHIgIlJlZmVyZW5jacOhayDDumpyYW9sdmFzw6FzYSIKKworIzogZ2l0azoxOTc1Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJSZWZlcmVuY2nDoWsgbGlzdMOhesOhc2EiCisKKyM6IGdpdGs6MTk3NworbXNnaWQgIlN0YXJ0IGdpdCBndWkiCittc2dzdHIgIkdpdCBndWkgaW5kw610w6FzYSIKKworIzogZ2l0azoxOTc5Cittc2dpZCAiUXVpdCIKK21zZ3N0ciAiS2lsw6lww6lzIgorCisjOiBnaXRrOjE5NzEKK21zZ2lkICJGaWxlIgorbXNnc3RyICJGw6FqbCIKKworIzogZ2l0azoxOTgzCittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIkJlw6FsbMOtdMOhc29rIgorCisjOiBnaXRrOjE5ODIKK21zZ2lkICJFZGl0IgorbXNnc3RyICJTemVya2VzenTDqXMiCisKKyM6IGdpdGs6MTk4NworbXNnaWQgIk5ldyB2aWV3Li4uIgorbXNnc3RyICLDmmogbsOpemV0IC4uLiIKKworIzogZ2l0azoxOTg4Cittc2dpZCAiRWRpdCB2aWV3Li4uIgorbXNnc3RyICJOw6l6ZXQgc3plcmtlc3p0w6lzZSAuLi4iCisKKyM6IGdpdGs6MTk4OQorbXNnaWQgIkRlbGV0ZSB2aWV3IgorbXNnc3RyICJOw6l6ZXQgdMO2cmzDqXNlIgorCisjOiBnaXRrOjE5OTEKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgIk1pbmRlbiBmw6FqbCIKKworIzogZ2l0azoxOTg2IGdpdGs6MzgwNQorbXNnaWQgIlZpZXciCittc2dzdHIgIk7DqXpldCIKKworIzogZ2l0azoxOTk2IGdpdGs6MjAwNiBnaXRrOjI3NzcKK21zZ2lkICJBYm91dCBnaXRrIgorbXNnc3RyICJHaXRrIG7DqXZqZWd5IgorCisjOiBnaXRrOjE5OTcgZ2l0azoyMDExCittc2dpZCAiS2V5IGJpbmRpbmdzIgorbXNnc3RyICJCaWxsZW50ecWxa29tYmluw6FjacOzIgorCisjOiBnaXRrOjE5OTUgZ2l0azoyMDEwCittc2dpZCAiSGVscCIKK21zZ3N0ciAiU2Vnw610c8OpZyIKKworIzogZ2l0azoyMDg4Cittc2dpZCAiU0hBMSBJRDogIgorbXNnc3RyICJTSEExIElEOiAiCisKKyM6IGdpdGs6MjExOQorbXNnaWQgIlJvdyIKK21zZ3N0ciAiU29yIgorCisjOiBnaXRrOjIxNTcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJLZXJlc8OpcyIKKworIzogZ2l0azoyMTU4Cittc2dpZCAibmV4dCIKK21zZ3N0ciAia8O2dmV0a2V6xZEiCisKKyM6IGdpdGs6MjE1OQorbXNnaWQgInByZXYiCittc2dzdHIgImVsxZF6xZEiCisKKyM6IGdpdGs6MjE2MAorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IgorCisjOiBnaXRrOjIxNjMgZ2l0azoyMTY1IGdpdGs6NDQxOSBnaXRrOjQ0NDIgZ2l0azo0NDY2IGdpdGs6NjQwNyBnaXRrOjY0NzkKKyM6IGdpdGs6NjU2MworbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJ0YXJ0YWxtYXrDoXM6IgorCisjOiBnaXRrOjIxNjYgZ2l0azozMjg3IGdpdGs6MzI5MiBnaXRrOjQ0OTQKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgIsOpcmludGVuZMWRIMO6dHZvbmFsYWs6IgorCisjOiBnaXRrOjIxNjcgZ2l0azo0NDk5Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgInN0cmluZyBob3p6w6FhZMOhc2EvdMO2cmzDqXNlOiIKKworIzogZ2l0azoyMTc2IGdpdGs6MjE3OAorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJQb250b3MiCisKKyM6IGdpdGs6MjE3OCBnaXRrOjQ1NzQgZ2l0azo2Mzc1Cittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiS2lzL25hZ3kgYmV0xbEgbmVtIHN6w6Ftw610IgorCisjOiBnaXRrOjIxNzggZ2l0azo0NDY4IGdpdGs6NDU3MiBnaXRrOjYzNzEKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIlJlZ2V4cCIKKworIzogZ2l0azoyMTgwIGdpdGs6MjE4MSBnaXRrOjQ1OTMgZ2l0azo0NjIzIGdpdGs6NDYzMCBnaXRrOjY0OTkgZ2l0azo2NTY3Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiTWluZGVuIG1lesWRIgorCisjOiBnaXRrOjIxODEgZ2l0azo0NTkxIGdpdGs6NDYyMyBnaXRrOjY0MzgKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiRsWRY8OtbSIKKworIzogZ2l0azoyMTgyIGdpdGs6NDU5MSBnaXRrOjY0MzggZ2l0azo2NTY3IGdpdGs6NzAwMAorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJNZWdqZWd5esOpc2VrIgorCisjOiBnaXRrOjIxODIgZ2l0azo0NTkxIGdpdGs6NDU5NSBnaXRrOjQ2MzAgZ2l0azo2NDM4IGdpdGs6NjkzNSBnaXRrOjgyODAKKyM6IGdpdGs6ODI5NQorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiU3plcnrFkSIKKworIzogZ2l0azoyMTgyIGdpdGs6NDU5MSBnaXRrOjY0MzggZ2l0azo2OTM3Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICJDb21taXRvbMOzIgorCisjOiBnaXRrOjIyMTMKK21zZ2lkICJTZWFyY2giCittc2dzdHIgIktlcmVzw6lzIgorCisjOiBnaXRrOjIyMjEKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZmIgorCisjOiBnaXRrOjIyMjMKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiUsOpZ2kgdmVyemnDsyIKKworIzogZ2l0azoyMjI1Cittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIsOaaiB2ZXJ6acOzIgorCisjOiBnaXRrOjIyMjcKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJUYXJ0YWxtaSBzb3JvayIKKworIzogZ2l0azoyMjM3Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiU3BhY2UgdsOhbHTDoXMgbWVsbMWResOpc2UiCisKKyM6IGdpdGs6MjI5NgorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXRjaCIKKworIzogZ2l0azoyMjk4Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiVHJlZSIKKworIzogZ2l0azoyNDUzIGdpdGs6MjQ3MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZiBlemVrZXQgLT4ga2l2w6FsYXN6dG90dCIKKworIzogZ2l0azoyNDU0IGdpdGs6MjQ3MQorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBraXbDoWxhc3p0b3R0YWthdCAtPiBlenQiCisKKyM6IGdpdGs6MjQ1NSBnaXRrOjI0NzIKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJQYXRjaCBrw6lzesOtdMOpc2UiCisKKyM6IGdpdGs6MjQ1NiBnaXRrOjg2ODcKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJUYWcga8Opc3rDrXTDqXNlIgorCisjOiBnaXRrOjI0NTcgZ2l0azo4NzkzCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIkNvbW1pdCBmw6FsamJhIMOtcsOhc2EiCisKKyM6IGdpdGs6MjQ1OCBnaXRrOjg4NTAKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiw5pqIGJyYW5jaCBrw6lzesOtdMOpc2UiCisKKyM6IGdpdGs6MjQ1OQorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJDaGVycnktcGljayBlcnJlIGEgY29tbWl0cmEiCisKKyM6IGdpdGs6MjQ2MAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIkhFQUQgYnJhbmNoIMO6anJhaW5kw610w6FzYSBpZGUiCisKKyM6IGdpdGs6MjQ2MQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIkV6ZW4gY29tbWl0IG1lZ2plbMO2bMOpc2UiCisKKyM6IGdpdGs6MjQ2MgorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJWaXNzemF0w6lyw6lzIGEgbWVnamVsw7Zsw6lzaGV6IgorCisjOiBnaXRrOjI0NjMKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiVGFsw6FsZCBtZWcgZXplbiB1dMOzZG9rYXQgw6lzIGplbMO2bGQgbWVnIgorCisjOiBnaXRrOjI0NjQKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiw5Zzc3plaGFzb25sw610w6FzIGEgbWVnamVsw7ZsdCBjb21taXQtdGFsIgorCisjOiBnaXRrOjI0NzgKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkNoZWNrIG91dCBlenQgYSBicmFuY2hvdCIKKworIzogZ2l0azoyNDc5Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICJUw7Zyw7ZsZCBlenQgYSBicmFuY2gtb3QiCisKKyM6IGdpdGs6MjQ4NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiRW1lbGQga2kgZXp0IGlzIgorCisjOiBnaXRrOjI0ODcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJDc2FrIGV6dCBlbWVsZCBraSIKKworIzogZ2l0azoyNDg4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiS8O8bHPFkSBkaWZmIgorCisjOiBnaXRrOjI0ODkKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICJCbGFtZSBzesO8bMWRIGtvbW1pdHJhIgorCisjOiBnaXRrOjI0OTYKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIk11dGFzZCBtZWcgZW5uZWsgYSBzb3JuYWsgYXogZXJlZGV0w6l0IgorCisjOiBnaXRrOjI0OTcKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIkZ1dHRhc2QgYSBnaXQgZ3VpIGJsYW1lLXQgZXplbiBhIHNvcm9uIgorCisjOiBnaXRrOjI3NzkKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSBjb21taXQgbsOpemVnZXTFkSBhIGdpdGhlelxuIgorIlxuIgorIlN6ZXJ6xZFpIGpvZyBcXHUwMGE5IDIwMDUtMjAxMCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIkhhc3puw6FsZCDDqXMgdGVyamVzemQgYSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmZWx0w6l0ZWxlaSBtZWxsZXR0IgorCisjOiBnaXRrOjI3ODcgZ2l0azoyODUxIGdpdGs6OTIxNQorbXNnaWQgIkNsb3NlIgorbXNnc3RyICJCZXrDoXLDoXMiCisKKyM6IGdpdGs6MjgwOAorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJHaXRrLWJpbGxlbnR5xbEgaG96esOhcmVuZGVsw6lzIgorCisjOiBnaXRrOjI4MTEKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkdpdGstYmlsbGVudHnFsSBob3p6YcOhcmVuZGVsw6lzOiIKKworIzogZ2l0azoyODEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHRLaWzDqXDDqXMiCisKKyM6IGdpdGs6MjgxNAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPFBvczE+XHRcdEVsc8WRIGNvbW1pdGhveiIKKworIzogZ2l0azoyODE1Cittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZGU+XHRcdFV0b2xzw7MgY29tbWl0aG96IgorCisjOiBnaXRrOjI4MTYKK21zZ2lkICI8VXA+LCBwLCBpXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxIb2NoPiwgcCwgaVx0RWd5IGNvbW1pdHRhbCBmZWxqZWJiIgorCisjOiBnaXRrOjI4MTcKK21zZ2lkICI8RG93bj4sIG4sIGtcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8UnVudGVyPiwgbiwga1x0RWd5IGNvbW1pdHRhbCBsZWpqZWJiIgorCisjOiBnaXRrOjI4MTgKK21zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGlua3M+LCB6LCBqXHRWaXNzemEgYSBoaXN0b3J5IGxpc3TDoWJhIgorCisjOiBnaXRrOjI4MTkKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJlY2h0cz4sIHgsIGxcdEVsxZFyZSBhIGhpc3RvcnkgbGlzdMOhYmEiCisKKyM6IGdpdGs6MjgyMAorbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8QmlsZEhvY2g+XHRFZ3kgbGFwcGFsIGZlbGplYmIgYSBjb21taXQgbGlzdMOhYmEiCisKKyM6IGdpdGs6MjgyMQorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPEJpbGRSdW50ZXI+XHRFZ3kgbGFwcGFsIGxlamplYmIgYSBjb21taXQgbGlzdMOhYmEiCisKKyM6IGdpdGs6MjgyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLVBvczE+XHRHw7ZyZ2V0w6lzIGEgY29tbWl0IGxpc3RhIHRldGVqw6loZXoiCisKKyM6IGdpdGs6MjgyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kZT5cdEfDtnJnZXTDqXMgYSBjb21taXQgbGlzdGEgYWxqw6Fob3oiCisKKyM6IGdpdGs6MjgyNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLUhvY2g+XHRFZ3kgc29ycmFsIGZlbGplYmIgZ8O2cmdldMOpcyBhIGNvbW1pdCBsaXN0w6FiYW4iCisKKyM6IGdpdGs6MjgyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1SdW50ZXI+XHRFZ3kgc29ycmFsIGxlamplYmIgZ8O2cmdldMOpcyBhIGNvbW1pdCBsaXN0w6FiYW4iCisKKyM6IGdpdGs6MjgyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1CaWxkSG9jaD5cdEVneSBsYXBwYWwgZmVsamViYiBnw7ZyZ2V0w6lzIGEgY29tbWl0IGxpc3TDoWJhbiIKKworIzogZ2l0azoyODI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1CaWxkUnVudGVyPlx0RWd5IHNvcnJhbCBsZWpqZWJiIGfDtnJnZXTDqXMgYSBjb21taXQgbGlzdMOhYmFuIgorCisjOiBnaXRrOjI4MjgKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxVbXNjaGFsdC1Ib2NoPlx0S2VyZXPDqXMgdmlzc3phZmVsZSAoZmVsZmVsZSwgdXRvbHPDsyBjb21taXRvaykiCisKKyM6IGdpdGs6MjgyOQorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8VW1zY2hhbHQtUnVudGVyPlx0S2VyZXPDqXMgZWzFkXJlIChsZWZlbMOpOyBrb3LDoWJiaSBjb21taXRvaykiCisKKyM6IGdpdGs6MjgzMAorbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RW50Zj4sIGJcdFx0RWd5IGxhcHBhbCBmZWxqZWJiIGfDtnJnZXTDqXMgYSBkaWZmIG7DqXpldGJlbiIKKworIzogZ2l0azoyODMxCittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxMw7ZzY2h0YXN0ZT5cdEVneSBsYXBwYWwgZmVsamViYiBnw7ZyZ2V0w6lzIGEgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MjgzMgorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8TGVlcnRhc3RlPlx0RWd5IGxhcHBhbCBsZWpqZWJiIGfDtnJnZXTDqXMgYSBkaWZmIG7DqXpldGJlbiIKKworIzogZ2l0azoyODMzCittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdDE4IHNvcnJhbCBmZWxmZWzDqSBnw7ZyZ2V0w6lzIGRpZmYgbsOpemV0YmVuIgorCisjOiBnaXRrOjI4MzQKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHQxOCBzb3JyYWwgbGVqamViYiBnw7ZyZ2V0w6lzIGEgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MjgzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0S2VyZXPDqXMiCisKKyM6IGdpdGs6MjgzNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRLw7Z2ZXRrZXrFkSB0YWzDoWxhdGhveiIKKworIzogZ2l0azoyODM3Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPEVpbmdhYmV0YXN0ZT5cdEvDtnZldGtlesWRIHRhbMOhbGF0aG96IgorCisjOiBnaXRrOjI4MzgKK21zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgorbXNnc3RyICIvXHRcdEzDqXBqIGEga2VyZXPDqXNpIG1lesWRcmUiCisKKyM6IGdpdGs6MjgzOQorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRFbMWResWRIHRhbMOhbGF0aG96IgorCisjOiBnaXRrOjI4NDAKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdEvDtnZldGtlesWRIGbDoWpscmEgZ8O2cmdldMOpcyBkaWZmIG7DqXpldGJlbiIKKworIzogZ2l0azoyODQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0S8O2dmV0a2V6xZEgdGFsw6FsYXRyYSBrZXJlc8OpcyBkaWZmIG7DqXpldGJlbiIKKworIzogZ2l0azoyODQyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdEVsxZF6xZEgdGFsw6FsYXRyYSBrZXJlc8OpcyBkaWZmIG7DqXpldGJlbiIKKworIzogZ2l0azoyODQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU51bW1lcmJsb2NrLVBsdXM+XHRCZXTFsW3DqXJldCBuw7Z2ZWzDqXNlIgorCisjOiBnaXRrOjI4NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLVBsdXM+XHRCZXTFsW3DqXJldCBuw7Z2ZWzDqXNlIgorCisjOiBnaXRrOjI4NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtbWVybmJsb2NrLU1pbnVzPiBCZXTFsW3DqXJldCBjc8O2a2tlbnTDqXNlIgorCisjOiBnaXRrOjI4NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1NaW51cz5cdEJldMWxbcOpcmV0IGNzw7Zra2VudMOpc2UiCisKKyM6IGdpdGs6Mjg0NworbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEZyaXNzw610w6lzIgorCisjOiBnaXRrOjMzMDIgZ2l0azozMzExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGF6IGlkZWlnbGVuZXMga8O2bnl2dMOhciBsw6l0cmVob3rDoXNhIGvDtnpiZW4gJXM6IgorCisjOiBnaXRrOjMzMjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgXCIlc1wiIGxldMO2bHTDqXNlIGvDtnpiZW4gJXMtcsWRbDoiCisKKyM6IGdpdGs6MzM4NworbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAicGFyYW5jcyBoaWJhOiIKKworIzogZ2l0azozNTM2Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIk5pbmNzIGlseWVuIGNvbW1pdCIKKworIzogZ2l0azozNTUwCittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiBwYXJhbmNzIGhpYmE6IgorCisjOiBnaXRrOjM1ODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IGEgTWVyZ2UgaGVhZCBvbHZhc8Ohc2E6ICVzIgorCisjOiBnaXRrOjM1ODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYXogaW5kZXggb2x2YXPDoXNhIGvDtnpiZW46ICVzIgorCisjOiBnaXRrOjM2MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IGEgZ2l0IGJsYW1lIGluZMOtdMOhc2E6ICVzIgorCisjOiBnaXRrOjM2MTcgZ2l0azo2NDA2Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJLZXJlc8OpcyIKKworIzogZ2l0azozNjQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGdpdCBibGFtZSBmdXR0YXTDoXNhIGvDtnpiZW46ICVzIgorCisjOiBnaXRrOjM2NzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICIiCisiQSAlcyBjb21taXRiw7NsIHN6w6FybWF6aWsgYXogYSBzb3IsIGFtZWx5aWsgbmVtIHRhbMOhbGhhdMOzIGViYmVuIGEgbsOpemV0YmVuIgorCisjOiBnaXRrOjM2OTEKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJLw7xsc8WRIGRpZmYgbsOpemVnZXTFkSBoaWJhOiIKKworIzogZ2l0azozODA5Cittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkdpdGsgbsOpemV0IG1lZ2hhdMOhcm96w6FzYSIKKworIzogZ2l0azozODEzCittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJNYXJhZGogZW5uw6lsIGEgbsOpemV0bsOpbCIKKworIzogZ2l0azozODE0Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAiUmVmZXJlbmNpw6FrIChzesOza8O2enplbCB0YWdvbHQgbGlzdGEiCisKKyM6IGdpdGs6MzgxNQorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIkJyYW5jaC1layAmIHRhZ2VrOiIKKworIzogZ2l0azozODE2Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIk1pbmRlbiByZWYiCisKKyM6IGdpdGs6MzgxNworbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJNaW5kZW4gKGhlbHlpKSBicmFuY2giCisKKyM6IGdpdGs6MzgxOAorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJNaW5kZW4gdGFnIgorCisjOiBnaXRrOjM4MTkKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJNaW5kZW4gdMOhdm9saSBrw7Z2ZXTFkSBicmFuY2giCisKKyM6IGdpdGs6MzgyMAorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIkNvbW1pdCBJbmbDsyAocmVndWzDoXJpcyBraWZlamV6w6lzKToiCisKKyM6IGdpdGs6MzgyMQorbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIlN6ZXJ6xZE6IgorCisjOiBnaXRrOjM4MjIKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJDb21taXRvbMOzOiIKKworIzogZ2l0azozODIzCittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJDb21taXQgw7x6ZW5ldDoiCisKKyM6IGdpdGs6MzgyNAorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJFZ3llemlrIG1pbmVuIENvbW1pdCBJbmbDsyBmZWx0w6l0ZWxsZWwiCisKKyM6IGdpdGs6MzgyNQorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICJGw6FqbCB2w6FsdG96w6Fzb2s6IgorCisjOiBnaXRrOjM4MjYKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIkZpeCBTdHJpbmciCisKKyM6IGdpdGs6MzgyNworbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiUmVndWzDoXJpcyBraWZlamV6w6lzIgorCisjOiBnaXRrOjM4MjgKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiS2VyZXPDqXMgc3rDtnZlZzoiCisKKyM6IGdpdGs6MzgyOQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorIkNvbW1pdCBEw6F0dW1vayAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorCisjOiBnaXRrOjM4MzAKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIkV0dMWRbDoiCisKKyM6IGdpdGs6MzgzMQorbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiRWRkaWc6IgorCisjOiBnaXRrOjM4MzIKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiTGltaXTDoWx2YSDDqXMvdmFneSBraWhhZ3l2YSBlZ3kgYWRvdHQgc3rDoW3DuiByZXbDrXppw7N0IChwb3ppdMOtdiBlZ8Opc3opOiIKKworIzogZ2l0azozODMzCittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICJNdXRhdGFuZMOzIHN6w6FtOiIKKworIzogZ2l0azozODM0Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICJLaWhhZ3lhbmTDsyBzesOhbToiCisKKyM6IGdpdGs6MzgzNQorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIkvDvGzDtm5mw6lsZSBvcGNpw7NrOiIKKworIzogZ2l0azozODM2Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJTemlnb3LDuiByZW5kZXrDoXMgZMOhdHVtIGFsYXBqw6FuIgorCisjOiBnaXRrOjM4MzcKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiSmVsw7ZsamUgbWVnIGF6IMOhZ2FrYXQiCisKKyM6IGdpdGs6MzgzOAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiS29ybMOhdG96w6FzIGF6IGVsc8WRIHN6w7xsxZFyZSIKKworIzogZ2l0azozODM5Cittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkVneXN6ZXLFsSBoaXN0b3J5IgorCisjOiBnaXRrOjM4NDAKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiVG92w6FiYmkgYXJndW1lbnRvayBhIGdpdCBsb2ctaG96OiIKKworIzogZ2l0azozODQxCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkbDoWpsb2sgw6lzIGvDtm55dnTDoXJhayBiZWplZ3l6w6lzZSBhbWlrZXQgdGFydGFsbWF6LCBzb3JvbmvDqW50OiIKKworIzogZ2l0azozODQyCittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIlBhcmFuY3MgdMO2YmIgdGFydGFsbWF6w7MgY29tbWl0IGdlbmVyw6Fsw6Fzw6FyYToiCisKKyM6IGdpdGs6Mzk2NAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogc3plcmtlc3p0w6lzIG7DqXpldCIKKworIzogZ2l0azozOTcyCittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIGtyaXTDqXJpdW1vayBhIHJldsOtemnDs2sga2l2w6FsYXN6dMOhc8OhaG96IgorCisjOiBnaXRrOjM5NzcKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk7DqXpldCBuZXZlIgorCisjOiBnaXRrOjQwNTIKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICJBbGthbG1heiAoRjUpIgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGEgY29tbWl0IGFyZ3VtZW50dW1vayBraXbDoWxhc3p0w6FzYSBrw7Z6YmVuOiIKKworIzogZ2l0azo0MTQzIGdpdGs6NDE5NSBnaXRrOjQ2NDMgZ2l0azo0NjU3IGdpdGs6NTkxOCBnaXRrOjExNTE5IGdpdGs6MTE1MjAKK21zZ2lkICJOb25lIgorbXNnc3RyICJLZWluZSIKKworIzogZ2l0azo0NTkxIGdpdGs6NjQzOCBnaXRrOjgyODIgZ2l0azo4Mjk3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRMOhdHVtIgorCisjOiBnaXRrOjQ1OTEgZ2l0azo2NDM4Cittc2dpZCAiQ0RhdGUiCittc2dzdHIgIkTDoXR1bSIKKworIzogZ2l0azo0NzQwIGdpdGs6NDc0NQorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkxlc3rDoXJtYXpvdHQiCisKKyM6IGdpdGs6NDc0MQorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJOZW0gbGVzesOhcm1hem90dCIKKworIzogZ2l0azo0NzQ4IGdpdGs6NDc1MworbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJFbMWRZCIKKworIzogZ2l0azo0NzQ5Cittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJOZW0gZWzFkWQiCisKKyM6IGdpdGs6NTAzOQorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiIgorIkxva8OhbGlzIHbDoWx0b3p0YXTDoXNvaywgbWVseWVrIGJlIHZhbm5hayB0w6l2ZSBheiBpbmRleGJlLCBkZSBtw6lnIG5pbmNzZW5layAiCisiY29tbWl0b2x2YSIKKworIzogZ2l0azo1MDc1Cittc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCittc2dzdHIgIkxva8OhbGlzIG5lbSBjb21taXRvbHQgdsOhbHRvesOhc29rLCBuaW5jc2VuZWsgYmV0w6l2ZSBheiBpbmRleGJlIgorCisjOiBnaXRrOjY3NTYKK21zZ2lkICJtYW55IgorbXNnc3RyICJzb2siCisKKyM6IGdpdGs6NjkzOQorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJUYWdlazoiCisKKyM6IGdpdGs6Njk1NiBnaXRrOjY5NjIgZ2l0azo4Mjc1Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJFbHRlcm4iCisKKyM6IGdpdGs6Njk2NworbXNnaWQgIkNoaWxkIgorbXNnc3RyICJHeWVyZWsiCisKKyM6IGdpdGs6Njk3NgorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiw4FnIgorCisjOiBnaXRrOjY5NzkKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJLw7Z2ZXRrZXrFkWsiCisKKyM6IGdpdGs6Njk4MgorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJNZWdlbMWResWRayIKKworIzogZ2l0azo3NTE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGEgZGlmZi1layBsZXTDtmx0w6lzZSBrw7Z6YmVuOiAlcyIKKworIzogZ2l0azo4MTAzCittc2dpZCAiR290bzoiCittc2dzdHIgIk1lbmo6IgorCisjOiBnaXRrOjgxMDUKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRDoiCisKKyM6IGdpdGs6ODEyNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJSw7Z2aWQgU0hBMSBpZCAlcyBmw6lscmXDqXJ0aGV0xZEiCisKKyM6IGdpdGs6ODEzMQorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiQSh6KSAlcyByZXbDrXppw7MgbmVtIGlzbWVydCIKKworIzogZ2l0azo4MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlNIQTEgaWQgJXMgbmVtIGlzbWVydCIKKworIzogZ2l0azo4MTQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIkEoeikgJXMgcmV2w616acOzIG5pbmNzIGEgamVsZW5sZWdpIG7DqXpldGJlbiIKKworIzogZ2l0azo4Mjg1Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkd5ZXJla2VrIgorCisjOiBnaXRrOjgzNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiw4FsbMOtdHNkIHZpc3N6YSBhICVzIGJyYW5jaC1vdCBpZGUiCisKKyM6IGdpdGs6ODM0NQorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICJFbGvDvGzDtm7DrXRldHQgaGVhZDogbmVtIGxlaGV0IHZpc3N6YcOhbGzDrXRhbmkiCisKKyM6IGdpdGs6ODQ1NCBnaXRrOjg0NjAKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICJNZXJnZSBjb21taXQga2loYWd5w6FzYSAiCisKKyM6IGdpdGs6ODQ2OSBnaXRrOjg0NzQKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGEgcGF0Y2ggSUQgbWVnc3plcnrDqXNlIGvDtnpiZW4gYSBrw7Z2ZXRrZXrFkW7DqWwgIgorCisjOiBnaXRrOjg0NzAgZ2l0azo4NDc1Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIC0gYWJiYWhhZ3nDoXNcbiIKKworIzogZ2l0azo4NDgwIGdpdGs6ODQ4MyBnaXRrOjg0OTEgZ2l0azo4NTA1IGdpdGs6ODUxNAorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkNvbW1pdCAiCisKKyM6IGdpdGs6ODQ4NAorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIFVneWFuYXogYSBwYXRjaCBtaW50XG4iCisiICAgICAgICIKKworIzogZ2l0azo4NDkyCittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIGvDvGzDtm5iw7Z6aWsgaW5uZW50xZFsXG4iCisiICAgICAgICIKKworIzogZ2l0azo4NDk0Cittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkEgY29tbWl0b2sgZGlmZmplOlxuIgorIlxuIgorCisjOiBnaXRrOjg1MDYgZ2l0azo4NTE1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAlcyBneWVyZWtlIHZhbi4gYWJiYWhhZ3nDoXNcbiIKKworIzogZ2l0azo4NTM0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGEgY29tbWl0IGbDoWpsYmEgw61yw6FzYSBrw7Z6YmVuOiAlcyIKKworIzogZ2l0azo4NTQwCittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBjb21taXRvayBkaWZmZWzDqXNlIGvDtnpiZW46ICVzIgorCisjOiBnaXRrOjg1NzAKK21zZ2lkICJUb3AiCittc2dzdHIgIlRldGVqZSIKKworIzogZ2l0azo4NTcxCittc2dpZCAiRnJvbSIKK21zZ3N0ciAiSW5uZW4iCisKKyM6IGdpdGs6ODU3NgorbXNnaWQgIlRvIgorbXNnc3RyICJJZGUiCisKKyM6IGdpdGs6ODYwMAorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJQYXRjaCBnZW5lcsOhbMOhc2EiCisKKyM6IGdpdGs6ODYwMgorbXNnaWQgIkZyb206IgorbXNnc3RyICJJbm5lbjoiCisKKyM6IGdpdGs6ODYxMQorbXNnaWQgIlRvOiIKK21zZ3N0ciAiSWRlOiIKKworIzogZ2l0azo4NjIwCittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiVmlzc3phZmVsZSIKKworIzogZ2l0azo4NjIyIGdpdGs6ODgwNworbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiS2ltZW5ldGkgZsOhamw6IgorCisjOiBnaXRrOjg2MjgKK21zZ2lkICJHZW5lcmF0ZSIKK21zZ3N0ciAiR2VuZXLDoWzDoXMiCisKKyM6IGdpdGs6ODY2NgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpdCBhIHBhdGNoIGvDqXN6w610w6lzZSBrw7Z6YmVuOiIKKworIzogZ2l0azo4Njg5IGdpdGs6ODc5NSBnaXRrOjg4NTIKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo4Njk4Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJUYWcgbsOpdjoiCisKKyM6IGdpdGs6ODcwMiBnaXRrOjg4NjEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkzDqXRyZWhvesOhcyIKKworIzogZ2l0azo4NzE5Cittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJBIHRhZyBuZXZlIG5pbmNzZW4gbWVnYWR2YSIKKworIzogZ2l0azo4NzIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgVGFnIG3DoXIgbMOpdGV6aWsiCisKKyM6IGdpdGs6ODcyOQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGEgdGFnIGzDqXRyZWhvesOhc2Ega8O2emJlbjoiCisKKyM6IGdpdGs6ODgwNAorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJQYXJhbmNzOiIKKworIzogZ2l0azo4ODEyCittc2dpZCAiV3JpdGUiCittc2dzdHIgIsONcsOhcyIKKworIzogZ2l0azo4ODMwCittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGNvbW1pdCDDrXLDoXNhIGvDtnpiZW46IgorCisjOiBnaXRrOjg4NTcKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTsOpdjoiCisKKyM6IGdpdGs6ODg4MAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIkvDqXJlbSBhZGphIG1lZyBhIG5ldsOpdCBheiDDumogYnJhbmNoaG96IgorCisjOiBnaXRrOjg4ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiJXMgYnJhbmNoIG3DoXIgbMOpdGV6aWsuIEZlbMO8bMOtcmphPyIKKworIzogZ2l0azo4OTUxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIiIKKyIlcyBjb21taXQgbcOhciBiZW5uZSB2YW4gYSAlcyBicmFuY2hiYW4gLS0gYml6dG9zIGhvZ3kgw7pqcmEgY3NpbsOhbGphID8iCisiZWludHJhZ2VuPyIKKworIzogZ2l0azo4OTU2Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIkNoZXJyeS1waWNraW5nIgorCisjOiBnaXRrOjg5NjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiQ2hlcnJ5LXBpY2sgaGliYSB0w7ZydMOpbnQgbG9rw6FsaXMgdsOhbHRvdMOhc29rIG1pYXR0IGEgJyVzJyBmw6FqbGJhbi5cbiIKKyJLw6lyZW0gY29tbWl0b2xqYSwgaW5kw610c2Egw7pqcmEgdmFneSByZWp0c2UgZWwgYSB2w6FsdG96dGF0w6FzYWl0IMOpcyBwcsOzYsOhbGphICIKKyLDumpyYS4iCisKKyM6IGdpdGs6ODk3MQorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIGhpYmEgdMO2cnTDqW50IG1lcmdlIGtvbmZsaWt0dXMgbWlhdHQuXG4iCisiS8OtdsOhbmphIGZ1dHRhdG5pIGEgZ2l0IGNpdG9vbC10IGEgcHJvYmzDqW1hIG1lZ29sZMOhc8OhaG96PyIKKworIzogZ2l0azo4OTg3Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIk5pbmNzZW4gdsOhbHRvesOhcyBjb21taXRvbHZhIgorCisjOiBnaXRrOjkwMTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICLDmmpyYWluZMOtdMOhcyBtZWdlcsWRc8OtdMOpc2UiCisKKyM6IGdpdGs6OTAxNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIsOaanJhaW5kw610amEgYSAlcyBicmFuY2hvdCAlcy1pZz8iCisKKyM6IGdpdGs6OTAxNworbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICLDmmpyYWluZMOtdMOhcyB0w61wdXNhOiIKKworIzogZ2l0azo5MDIwCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIlNvZnQ6IEhhZ3lkIGEgd29ya2luZyB0cmVlLXQgw6lzIGF6IGluZGV4ZXQgw6lyaW50ZXRsZW7DvGwiCisKKyM6IGdpdGs6OTAyMworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiS2V2ZXJ0OiBIYWd5ZCBhIHdvcmtpbmcgdHJlZS10IMOpcmludGV0bGVuw7xsLCB0w7Zyw7ZsZCBheiBpbmRleGV0IgorCisjOiBnaXRrOjkwMjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkhhcmQ6IEluZMOtdHNkIMO6anJhIGEgd29ya2luZyB0cmVlLXQgw6lzIGF6IGluZGV4ZXRcbiIKKyIoTUlOREVOIGxva8OhbGlzIHbDoWx0b3rDoXMgZWxkb2LDoXNhKSIKKworIzogZ2l0azo5MDQzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLDmmpyYWluZMOtdMOhcyIKKworIzogZ2l0azo5MTAzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJLaXZlc3oiCisKKyM6IGdpdGs6OTE1NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIk5lbSBsZWhldCBhIGplbGVubGVnIGtpdmV0dCBicmFuY2gtb3QgdMO2csO2bG5pIgorCisjOiBnaXRrOjkxNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkEgJXMgYnJhbmNob24gdGFsw6FsaGF0w7MgY29tbWl0IG5lbSB0YWzDoWxoYXTDsyBtZWcgc2VtZWx5aWsgbcOhc2lrIGJyYW5jaG9uLlxuIgorIlTDqW55bGVnIHTDtnJsaSBhICVzIGJyYW5jaG90PyIKKworIzogZ2l0azo5MTkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJUYWdlayDDqXMgaGVhZGVrOiAlcyIKKworIzogZ2l0azo5MjA4Cittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJTesWxcsWRIgorCisjOiBnaXRrOjk1MDMKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJIaWJhIHTDtnJ0w6ludCBhIGNvbW1pdCB0b3BvbMOzZ2lhaSBpbmZvcm3DoWNpw7Mgb2x2YXPDoXNhIGvDtnpiZW47IGJyYW5jaCDDqXNhICIKKyJtZWdlbMWResWRL2vDtnZldGtlesWRIGluZm9ybcOhY2nDsyBuZW0gbGVzeiB0ZWxqZXMuIgorCisjOiBnaXRrOjEwNDg5Cittc2dpZCAiVGFnIgorbXNnc3RyICJUYWciCisKKyM6IGdpdGs6MTA0ODkKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6MTA1MzkKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiR2l0ay1iZXTFsSBraXbDoWxhc3p0w7MiCisKKyM6IGdpdGs6MTA1NTYKK21zZ2lkICJCIgorbXNnc3RyICJGIgorCisjOiBnaXRrOjEwNTU5Cittc2dpZCAiSSIKK21zZ3N0ciAiSyIKKworIzogZ2l0azoxMDY3NworbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIkdpdGsgYmXDoWxsw610w6Fzb2siCisKKyM6IGdpdGs6MTA2NzkKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkNvbW1pdCBsaXN0YSBraWplbHrDqXNpIG9wY2nDs2siCisKKyM6IGdpdGs6MTA2ODIKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIk1heGltw6FsaXMgZ3JhZmlrb24gc3rDqWxlc3PDqWcgKHNvcm9rKSIKKworIzogZ2l0azoxMDY4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIk1heGltw6FsaXMgZ3JhZmlrb24gc3rDqWxlc3PDqWcgKHTDoWJsZSAlLWplKSIKKworIzogZ2l0azoxMDY4OAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTXV0YXNkIGEgbG9rw6FsaXMgdsOhbHRvenRhdMOhc29rYXQiCisKKyM6IGdpdGs6MTA2OTEKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIgorbXNnc3RyICJTSEExIEF1dG9tYXRpa3VzIGtpdsOhbGFzenTDoXNhIgorCisjOiBnaXRrOjEwNjk0Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiQSB0w6F2b2xpIHJlZmVrIGVscmVqdMOpc2UiCisKKyM6IGdpdGs6MTA2OTgKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiRGlmZiBraWplbHrFkSBvcGNpw7NrIgorCisjOiBnaXRrOjEwNzAwCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIlRhYiBzb3Jrw7Z6IgorCisjOiBnaXRrOjEwNzAzCittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncyIKK21zZ3N0ciAiU3pvbXN6w6lkb3MgdGFnZWsga2lqZWx6w6lzZSIKKworIzogZ2l0azoxMDcwNgorbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiS29ybMOhdG96b3R0IGRpZmZlayBhIGtpbGlzdMOhem90dCDDunR2b25hbGFraG96IgorCisjOiBnaXRrOjEwNzA5Cittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIkbDoWpsb25rw6ludGkga8OzZG9sw6FzIHTDoW1nYXTDoXNhIgorCisjOiBnaXRrOjEwNzE1IGdpdGs6MTA4MDQKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIkvDvGxzxZEgZGlmZiBhbGthbG1hesOhcyIKKworIzogZ2l0azoxMDcxNgorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiVsOhbGFzemQgLi4uIgorCisjOiBnaXRrOjEwNzIxCittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICLDgWx0YWzDoW5vcyBvcGNpw7NrIgorCisjOiBnaXRrOjEwNzI0Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICJUw6ltw6F6b3R0IHZlesOpcmzFkWsgaGFzem7DoWxhdGEiCisKKyM6IGdpdGs6MTA3MjYKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIoYSB2w6FsdG96w6FzIMO6anJhaW5kw610w6FzdCBpZ8OpbnllbCkiCisKKyM6IGdpdGs6MTA3MjgKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKGplbGVubGVnIG5lbSBlbMOpcmhldMWRKSIKKworIzogZ2l0azoxMDczMgorbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJTesOtbmVrOiBueW9tamEgbWVnIGEga2l2w6FsYXN6dMOhc2hveiIKKworIzogZ2l0azoxMDczNQorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiSW50ZXJmw6lzeiIKKworIzogZ2l0azoxMDczNgorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiaW50ZXJmw6lzeiIKKworIzogZ2l0azoxMDczOQorbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIkjDoXR0w6lyIgorCisjOiBnaXRrOjEwNzQwIGdpdGs6MTA3NzAKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJow6F0dMOpciIKKworIzogZ2l0azoxMDc0MworbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIkVsxZF0w6lyIgorCisjOiBnaXRrOjEwNzQ0Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAiZWzFkXTDqXIiCisKKyM6IGdpdGs6MTA3NDcKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IHLDqWdpIHNvcm9rIgorCisjOiBnaXRrOjEwNzQ4Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgImRpZmYgcsOpZ2kgc29yb2siCisKKyM6IGdpdGs6MTA3NTIKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IMO6aiBzb3JvayIKKworIzogZ2l0azoxMDc1MworbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJkaWZmIC0gw7pqIHNvcm9rIgorCisjOiBnaXRrOjEwNzU3Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmY6IG5hZ3kgaGVhZGVyw7ZrIgorCisjOiBnaXRrOjEwNzU5Cittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiZGlmZiAtIG5hZ3kgaGVhZGVyw7ZrIgorCisjOiBnaXRrOjEwNzYzCittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIk1lZ2plbMO2bHQgc29yIGjDoXR0w6lyIgorCisjOiBnaXRrOjEwNzY1Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAibWVnamVsw7ZsdCBzb3IgaMOhdHTDqXIiCisKKyM6IGdpdGs6MTA3NjkKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIlbDoWxhc3N6b24gaMOhdHRlcmV0IgorCisjOiBnaXRrOjEwNzczCittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQmV0xbE6IG55b21qYSBtZWcgYSBraXbDoWxhc3p0w6FzaG96IgorCisjOiBnaXRrOjEwNzc1Cittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJGxZEgYmV0xbEiCisKKyM6IGdpdGs6MTA3NzYKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiRGlmZiBraWplbHrFkSBiZXTFsSIKKworIzogZ2l0azoxMDc3NworbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIkZlbGhhc3puw6Fsw7NpIGludGVyZsOpc3ogYmV0xbEiCisKKyM6IGdpdGs6MTA4MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiB2w6FsYXNzem9uIHN6w61udCBhICVzLXJhIgorCisjOiBnaXRrOjExNDE4Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiTmVtIHRhbMOhbGhhdMO8IGdpdCByZXBvc2l0b3J5IGl0dC4iCisKKyM6IGdpdGs6MTE0MjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorbXNnc3RyICJOZW0gdGFsw6FsaGF0w7MgYSBcIiVzXCIga8O2bnl2dMOhci4iCisKKyM6IGdpdGs6MTE0NjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIkbDqWxyZcOpcnRoZXTFkSBhcmd1bWVudHVtICclcyc6IHJldsOtemnDsyDDqXMgZsOhamxuw6l2IGlzIgorCisjOiBnaXRrOjExNDgxCittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiUm9zc3ogZ2l0ayBhcmd1bWVudHVtb2s6IgorCisjOiBnaXRrOjExNTcyCittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJQYXJhbmNzIHNvciIKKworI34gbXNnaWQgIlVzZSBhbGwgcmVmcyIKKyN+IG1zZ3N0ciAiSGFzem7DoWxkIGF6IMO2c3N6ZXMgcmVmZXJlbmNpw6F0IgorCisjfiBtc2dpZCAiTWF4IGNvdW50OiIKKyN+IG1zZ3N0ciAiTWF4LiBzesOhbToiCisKKyN+IG1zZ2lkICJTa2lwOiIKKyN+IG1zZ3N0ciAiS2loYWd5OiIKKworI34gbXNnaWQgIk5hbWUiCisjfiBtc2dzdHIgIk7DqXYiCisKKyN+IG1zZ2lkICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iCisjfiBtc2dzdHIgIlRhZy9IZWFkICVzIG5lbSBpc21lcnQiCisKKyN+IG1zZ2lkICItIHN0b3BwaW5nXG4iCisjfiBtc2dzdHIgIi0gYWJiYWhhZ3nDoXMuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisjfiAiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCisjfiBtc2dzdHIgIiIKKyN+ICJTYWpuw6FsanVrLCBkZSBhIGdpdGsgbmVtIGZ1dHRhdGhhdMOzIGV6emVsIGEgVGNsL1RrIHZlcnppw7N2YWwuXG4iCisjfiAiR2l0ayBmdXR0YXTDoXPDoWhveiBsZWdhbMOhYmIgVGNsL1RrIDguNCBzesO8a3PDqWdlcy4iCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9pdC5wbyBiL2dpdGstZ2l0L3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzBkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9pdC5wbwpAQCAtMCwwICsxLDEyNzYgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0aworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT4sIDIwMDguCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI4IDE4OjQwKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAxLTI4IDE4OjQxKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1pY2hlbGUgQmFsbGFiaW8gPGJhcnJhX2N1ZGFAa2F0YW1haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEl0YWxpYW5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0azoxMTUKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIkltcG9zc2liaWxlIG90dGVuZXJlIGwnZWxlbmNvIGRlaSBmaWxlIGluIGF0dGVzYSBkaSBmdXNpb25lOiIKKworIzogZ2l0azoyNzQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGxlIHJldmlzaW9uaToiCisKKyM6IGdpdGs6MzI5Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRXJyb3JlIG5lbGwnZXNlY3V6aW9uZSBkZWwgY29tYW5kbyBzcGVjaWZpY2F0byBjb24gLS1hcmdzY21kOiIKKworIzogZ2l0azozNDIKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJOZXNzdW4gZmlsZSBzZWxlemlvbmF0bzogw6ggc3RhdGEgc3BlY2lmaWNhdGEgbCdvcHppb25lIC0tbWVyZ2UgbWEgbm9uIGNpICIKKyJzb25vIGZpbGUgaW4gYXR0ZXNhIGRpIGZ1c2lvbmUuIgorCisjOiBnaXRrOjM0NQorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiTmVzc3VuIGZpbGUgc2VsZXppb25hdG86IMOoIHN0YXRhIHNwZWNpZmljYXRhIGwnb3B6aW9uZSAtLW1lcmdlIG1hIGkgZmlsZSAiCisic3BlY2lmaWNhdGkgbm9uIHNvbm8gaW4gYXR0ZXNhIGRpIGZ1c2lvbmUuIgorCisjOiBnaXRrOjM2NyBnaXRrOjUxNAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiRXJyb3JlIG5lbGwnZXNlY3V6aW9uZSBkaSBnaXQgbG9nOiIKKworIzogZ2l0azozODUgZ2l0azo1MzAKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMZXR0dXJhIGluIGNvcnNvIgorCisjOiBnaXRrOjQ0NSBnaXRrOjQyNjEKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkxldHR1cmEgZGVsbGUgcmV2aXNpb25pIGluIGNvcnNvLi4uIgorCisjOiBnaXRrOjQ0OCBnaXRrOjE1NzggZ2l0azo0MjY0Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiTmVzc3VuYSByZXZpc2lvbmUgc2VsZXppb25hdGEiCisKKyM6IGdpdGs6MTQ1NAorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZWxhYm9yYXJlIGkgZGF0aSBkaSBnaXQgbG9nOiIKKworIzogZ2l0azoxNjc0Cittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiTmVzc3VuYSBpbmZvcm1hemlvbmUgZGlzcG9uaWJpbGUgc3VsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjE4MTYKK21zZ2lkICJtYyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjE4NTEgZ2l0azo0MDU0IGdpdGs6OTA0NCBnaXRrOjEwNTg1IGdpdGs6MTA4MDQKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGdpdGs6MTg1MyBnaXRrOjQwNTYgZ2l0azo4NjM0IGdpdGs6ODcxMyBnaXRrOjg4MjggZ2l0azo4ODc3IGdpdGs6OTA0NgorIzogZ2l0azoxMDU4NiBnaXRrOjEwODA1Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBbm51bGxhIgorCisjOiBnaXRrOjE5NzUKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIkFnZ2lvcm5hIgorCisjOiBnaXRrOjE5NzYKK21zZ2lkICJSZWxvYWQiCittc2dzdHIgIlJpY2FyaWNhIgorCisjOiBnaXRrOjE5NzcKK21zZ2lkICJSZXJlYWQgcmVmZXJlbmNlcyIKK21zZ3N0ciAiUmlsZWdnaSByaWZlcmltZW50aSIKKworIzogZ2l0azoxOTc4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJFbGVuY2EgcmlmZXJpbWVudGkiCisKKyM6IGdpdGs6MTk4MAorbXNnaWQgIlN0YXJ0IGdpdCBndWkiCittc2dzdHIgIkF2dmlhIGdpdCBndWkiCisKKyM6IGdpdGs6MTk4MgorbXNnaWQgIlF1aXQiCittc2dzdHIgIkVzY2kiCisKKyM6IGdpdGs6MTk3NAorbXNnaWQgIkZpbGUiCittc2dzdHIgIkZpbGUiCisKKyM6IGdpdGs6MTk4NgorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXJlbnplIgorCisjOiBnaXRrOjE5ODUKK21zZ2lkICJFZGl0IgorbXNnc3RyICJNb2RpZmljYSIKKworIzogZ2l0azoxOTkwCittc2dpZCAiTmV3IHZpZXcuLi4iCittc2dzdHIgIk51b3ZhIHZpc3RhLi4uIgorCisjOiBnaXRrOjE5OTEKK21zZ2lkICJFZGl0IHZpZXcuLi4iCittc2dzdHIgIk1vZGlmaWNhIHZpc3RhLi4uIgorCisjOiBnaXRrOjE5OTIKK21zZ2lkICJEZWxldGUgdmlldyIKK21zZ3N0ciAiRWxpbWluYSB2aXN0YSIKKworIzogZ2l0azoxOTk0Cittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICJUdXR0aSBpIGZpbGUiCisKKyM6IGdpdGs6MTk4OSBnaXRrOjM4MDgKK21zZ2lkICJWaWV3IgorbXNnc3RyICJWaXN0YSIKKworIzogZ2l0azoxOTk5IGdpdGs6MjAwOSBnaXRrOjI3ODAKK21zZ2lkICJBYm91dCBnaXRrIgorbXNnc3RyICJJbmZvcm1hemlvbmkgc3UgZ2l0ayIKKworIzogZ2l0azoyMDAwIGdpdGs6MjAxNAorbXNnaWQgIktleSBiaW5kaW5ncyIKK21zZ3N0ciAiU2NvcmNpYXRvaWUgZGEgdGFzdGllcmEiCisKKyM6IGdpdGs6MTk5OCBnaXRrOjIwMTMKK21zZ2lkICJIZWxwIgorbXNnc3RyICJBaXV0byIKKworIzogZ2l0azoyMDkxIGdpdGs6ODExMAorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExIElEOiIKKworIzogZ2l0azoyMTIyCittc2dpZCAiUm93IgorbXNnc3RyICJSaWdhIgorCisjOiBnaXRrOjIxNjAKK21zZ2lkICJGaW5kIgorbXNnc3RyICJUcm92YSIKKworIzogZ2l0azoyMTYxCittc2dpZCAibmV4dCIKK21zZ3N0ciAic3VjYyIKKworIzogZ2l0azoyMTYyCittc2dpZCAicHJldiIKK21zZ3N0ciAicHJlYyIKKworIzogZ2l0azoyMTYzCittc2dpZCAiY29tbWl0IgorbXNnc3RyICJyZXZpc2lvbmUiCisKKyM6IGdpdGs6MjE2NiBnaXRrOjIxNjggZ2l0azo0NDIyIGdpdGs6NDQ0NSBnaXRrOjQ0NjkgZ2l0azo2NDEwIGdpdGs6NjQ4MgorIzogZ2l0azo2NTY2Cittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgImNvbnRlbmVudGU6IgorCisjOiBnaXRrOjIxNjkgZ2l0azozMjkwIGdpdGs6MzI5NSBnaXRrOjQ0OTcKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgImNoZSByaWd1YXJkYSBpIHBlcmNvcnNpOiIKKworIzogZ2l0azoyMTcwIGdpdGs6NDUwMgorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICJjaGUgYWdnaXVuZ2UvcmltdW92ZSBsYSBzdHJpbmdhOiIKKworIzogZ2l0azoyMTc5IGdpdGs6MjE4MQorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJFc2F0dG8iCisKKyM6IGdpdGs6MjE4MSBnaXRrOjQ1NzcgZ2l0azo2Mzc4Cittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIxODEgZ2l0azo0NDcxIGdpdGs6NDU3NSBnaXRrOjYzNzQKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIiIKKworIzogZ2l0azoyMTgzIGdpdGs6MjE4NCBnaXRrOjQ1OTYgZ2l0azo0NjI2IGdpdGs6NDYzMyBnaXRrOjY1MDIgZ2l0azo2NTcwCittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiVHV0dGkgaSBjYW1waSIKKworIzogZ2l0azoyMTg0IGdpdGs6NDU5NCBnaXRrOjQ2MjYgZ2l0azo2NDQxCittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIlRpdG9sbyIKKworIzogZ2l0azoyMTg1IGdpdGs6NDU5NCBnaXRrOjY0NDEgZ2l0azo2NTcwIGdpdGs6NzAwMworbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJDb21tZW50aSIKKworIzogZ2l0azoyMTg1IGdpdGs6NDU5NCBnaXRrOjQ1OTggZ2l0azo0NjMzIGdpdGs6NjQ0MSBnaXRrOjY5MzggZ2l0azo4Mjg1CisjOiBnaXRrOjgzMDAKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIkF1dG9yZSIKKworIzogZ2l0azoyMTg1IGdpdGs6NDU5NCBnaXRrOjY0NDEgZ2l0azo2OTQwCittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICJSZXZpc2lvbmUgY3JlYXRhIGRhIgorCisjOiBnaXRrOjIyMTYKK21zZ2lkICJTZWFyY2giCittc2dzdHIgIkNlcmNhIgorCisjOiBnaXRrOjIyMjQKK21zZ2lkICJEaWZmIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjIyNgorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICJWZWNjaGlhIHZlcnNpb25lIgorCisjOiBnaXRrOjIyMjgKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAiTnVvdmEgdmVyc2lvbmUiCisKKyM6IGdpdGs6MjIzMAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIkxpbmVlIGRpIGNvbnRlc3RvIgorCisjOiBnaXRrOjIyNDAKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJJZ25vcmEgbW9kaWZpY2hlIGFnbGkgc3BhemkiCisKKyM6IGdpdGs6MjI5OQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJNb2RpZmljaGUiCisKKyM6IGdpdGs6MjMwMQorbXNnaWQgIlRyZWUiCittc2dzdHIgIkRpcmVjdG9yeSIKKworIzogZ2l0azoyNDU2IGdpdGs6MjQ3MworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZiBxdWVzdG8gLT4gc2VsZXppb25hdG8iCisKKyM6IGdpdGs6MjQ1NyBnaXRrOjI0NzQKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIkRpZmYgc2VsZXppb25hdG8gLT4gcXVlc3RvIgorCisjOiBnaXRrOjI0NTggZ2l0azoyNDc1Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiQ3JlYSBwYXRjaCIKKworIzogZ2l0azoyNDU5IGdpdGs6ODY5MgorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyZWEgZXRpY2hldHRhIgorCisjOiBnaXRrOjI0NjAgZ2l0azo4ODA4Cittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIlNjcml2aSByZXZpc2lvbmUgaW4gdW4gZmlsZSIKKworIzogZ2l0azoyNDYxIGdpdGs6ODg2NQorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJDcmVhIHVuIG51b3ZvIHJhbW8iCisKKyM6IGdpdGs6MjQ2MgorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJQb3J0YSBxdWVzdGEgcmV2aXNpb25lIGluIGNpbWEgYWwgcmFtbyBhdHR1YWxlIgorCisjOiBnaXRrOjI0NjMKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJBZ2dpb3JuYSBpbCByYW1vIEhFQUQgYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjI0NjQKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJTZWduYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjI0NjUKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiVG9ybmEgYWxsYSByZXZpc2lvbmUgc2VnbmF0YSIKKworIzogZ2l0azoyNDY2Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIlRyb3ZhIGlsIGRpc2NlbmRlbnRlIGRpIHF1ZXN0YSByZXZpc2lvbmUgZSBkaSBxdWVsbGEgc2VnbmF0YSIKKworIzogZ2l0azoyNDY3Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIkNvbmZyb250YSBjb24gbGEgcmV2aXNpb25lIHNlZ25hdGEiCisKKyM6IGdpdGs6MjQ4MQorbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiQXR0aXZhIHF1ZXN0byByYW1vIgorCisjOiBnaXRrOjI0ODIKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIkVsaW1pbmEgcXVlc3RvIHJhbW8iCisKKyM6IGdpdGs6MjQ4OQorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiRXZpZGVuemlhIGFuY2hlIHF1ZXN0byIKKworIzogZ2l0azoyNDkwCittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiRXZpZGVuemlhIHNvbG8gcXVlc3RvIgorCisjOiBnaXRrOjI0OTEKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJWaXN1YWxpenphIGRpZmZlcmVuemUgaW4gdW4gYWx0cm8gcHJvZ3JhbW1hIgorCisjOiBnaXRrOjI0OTIKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICJBbm5vdGEgbGEgcmV2aXNpb25lIHByZWNlZGVudGUiCisKKyM6IGdpdGs6MjQ5OQorbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiTW9zdHJhIGxhIHByb3ZlbmllbnphIGRpIHF1ZXN0YSByaWdhIgorCisjOiBnaXRrOjI1MDAKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIkVzZWd1aSBnaXQgZ3VpIGJsYW1lIHN1IHF1ZXN0YSByaWdhIgorCisjOiBnaXRrOjI3ODIKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSB1biB2aXN1YWxpenphdG9yZSBkaSByZXZpc2lvbmkgcGVyIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCBcXHUwMGE5IDIwMDUtMjAxMCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlV0aWxpenpvIGUgcmVkaXN0cmlidXppb25lIHBlcm1lc3NpIHNvdHRvIGkgdGVybWluaSBkZWxsYSBHTlUgR2VuZXJhbCBQdWJsaWMgIgorIkxpY2Vuc2UiCisKKyM6IGdpdGs6Mjc5MCBnaXRrOjI4NTQgZ2l0azo5MjMwCittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkNoaXVkaSIKKworIzogZ2l0azoyODExCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIlNjb3JjaWF0b2llIGRhIHRhc3RpZXJhIGRpIEdpdGsiCisKKyM6IGdpdGs6MjgxNAorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAiU2NvcmNpYXRvaWUgZGEgdGFzdGllcmEgZGkgR2l0azoiCisKKyM6IGdpdGs6MjgxNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0RXNjaSIKKworIzogZ2l0azoyODE3Cittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx0VmFpIGFsbGEgcHJpbWEgcmV2aXNpb25lIgorCisjOiBnaXRrOjI4MTgKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHRWYWkgYWxsJ3VsdGltYSByZXZpc2lvbmUiCisKKyM6IGdpdGs6MjgxOQorbXNnaWQgIjxVcD4sIHAsIGlcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFN1PiwgcCwgaVx0VmFpIHBpw7kgaW4gYWx0byBkaSB1bmEgcmV2aXNpb25lIgorCisjOiBnaXRrOjI4MjAKK21zZ2lkICI8RG93bj4sIG4sIGtcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8R2nDuT4sIG4sIGtcdFZhaSBwacO5IGluIGJhc3NvIGRpIHVuYSByZXZpc2lvbmUiCisKKyM6IGdpdGs6MjgyMQorbXNnaWQgIjxMZWZ0Piwgeiwgalx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxTaW5pc3RyYT4sIHosIGpcdFRvcm5hIGluZGlldHJvIG5lbGxhIGNyb25vbG9naWEiCisKKyM6IGdpdGs6MjgyMgorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8RGVzdHJhPiwgeCwgbFx0VmFpIGF2YW50aSBuZWxsYSBjcm9ub2xvZ2lhIgorCisjOiBnaXRrOjI4MjMKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2luYVN1Plx0VmFpIHBpw7kgaW4gYWx0byBkaSB1bmEgcGFnaW5hIG5lbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKKworIzogZ2l0azoyODI0Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICIiCisiPFBhZ2luYUdpw7k+XHRWYWkgcGnDuSBpbiBiYXNzbyBkaSB1bmEgcGFnaW5hIG5lbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKKworIzogZ2l0azoyODI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdFNjb3JyaSBhbGxhIGNpbWEgZGVsbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjI4MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdFNjb3JyaSBhbGxhIGZpbmUgZGVsbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjI4MjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1TdT5cdFNjb3JyaSBsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkgaW4gYWx0byBkaSB1bmEgcmlnYSIKKworIzogZ2l0azoyODI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLUdpw7k+XHRTY29ycmkgbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIGluIGJhc3NvIGRpIHVuYSByaWdhIgorCisjOiBnaXRrOjI4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnaW5hU3U+XHRTY29ycmkgbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIGluIGFsdG8gZGkgdW5hIHBhZ2luYSIKKworIzogZ2l0azoyODMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdpbmFHacO5Plx0U2NvcnJpIGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSBpbiBiYXNzbyBkaSB1bmEgcGFnaW5hIgorCisjOiBnaXRrOjI4MzEKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1TdT5cdFRyb3ZhIGFsbCdpbmRpZXRybyAodmVyc28gbCdhbHRvLCByZXZpc2lvbmkgc3VjY2Vzc2l2ZSkiCisKKyM6IGdpdGs6MjgzMgorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtR2nDuT5cdFRyb3ZhIGluIGF2YW50aSAodmVyc28gaWwgYmFzc28sIHJldmlzaW9uaSBwcmVjZWRlbnRpKSIKKworIzogZ2l0azoyODMzCittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBhbHRvIGRpIHVuYSBwYWdpbmEiCisKKyM6IGdpdGs6MjgzNAorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8QmFja3NwYWNlPlx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYWx0byBkaSB1bmEgcGFnaW5hIgorCisjOiBnaXRrOjI4MzUKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPFNwYXppbz5cdFx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYmFzc28gZGkgdW5hIHBhZ2luYSIKKworIzogZ2l0azoyODM2Cittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGluIGFsdG8gZGkgMTggbGluZWUiCisKKyM6IGdpdGs6MjgzNworbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGluIGJhc3NvIGRpIDE4IGxpbmVlIgorCisjOiBnaXRrOjI4MzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdFRyb3ZhIgorCisjOiBnaXRrOjI4MzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0VHJvdmEgaW4gYXZhbnRpIgorCisjOiBnaXRrOjI4NDAKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8SW52aW8+XHRUcm92YSBpbiBhdmFudGkiCisKKyM6IGdpdGs6Mjg0MQorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0Q3Vyc29yZSBuZWwgYm94IGRpIHJpY2VyY2EiCisKKyM6IGdpdGs6Mjg0MgorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRUcm92YSBhbGwnaW5kaWV0cm8iCisKKyM6IGdpdGs6Mjg0MworbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgYWwgZmlsZSBzdWNjZXNzaXZvIgorCisjOiBnaXRrOjI4NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRDZXJjYSBpbiBhdmFudGkgbmVsbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSIKKworIzogZ2l0azoyODQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdENlcmNhIGFsbCdpbmRpZXRybyBuZWxsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIgorCisjOiBnaXRrOjI4NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx0QXVtZW50YSBkaW1lbnNpb25lIGNhcmF0dGVyZSIKKworIzogZ2l0azoyODQ3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wacO5Plx0QXVtZW50YSBkaW1lbnNpb25lIGNhcmF0dGVyZSIKKworIzogZ2l0azoyODQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdERpbWludWlzY2kgZGltZW5zaW9uZSBjYXJhdHRlcmUiCisKKyM6IGdpdGs6Mjg0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1lbm8+XHREaW1pbnVpc2NpIGRpbWVuc2lvbmUgY2FyYXR0ZXJlIgorCisjOiBnaXRrOjI4NTAKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRBZ2dpb3JuYSIKKworIzogZ2l0azozMzA1IGdpdGs6MzMxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSBjcmVhemlvbmUgZGVsbGEgZGlyZWN0b3J5IHRlbXBvcmFuZWEgJXM6IgorCisjOiBnaXRrOjMzMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGxldHR1cmEgZGkgXCIlc1wiIGRhICVzOiIKKworIzogZ2l0azozMzkwCittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb21hbmRvOiIKKworIzogZ2l0azozNTM5Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIlJldmlzaW9uZSBpbmVzaXN0ZW50ZSIKKworIzogZ2l0azozNTUzCittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiBpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb21hbmRvOiIKKworIzogZ2l0azozNTg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgbGVnZ2VyZSBtZXJnZSBoZWFkOiAlcyIKKworIzogZ2l0azozNTkyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGwnaW5kaWNlOiAlcyIKKworIzogZ2l0azozNjE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozNjIwIGdpdGs6NjQwOQorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAiUmljZXJjYSBpbiBjb3JzbyIKKworIzogZ2l0azozNjUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJFcnJvcmUgbmVsbCdlc2VjdXppb25lIGRpIGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6MzY4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIlF1ZWxsYSByaWdhIHByb3ZpZW5lIGRhbGxhIHJldmlzaW9uZSAlcywgbm9uIHByZXNlbnRlIGluIHF1ZXN0YSB2aXN0YSIKKworIzogZ2l0azozNjk0Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgdmlzdWFsaXp6YXRvcmUgZGkgZGlmZmVyZW56ZToiCisKKyM6IGdpdGs6MzgxMgorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJTY2VsdGEgdmlzdGEgR2l0ayIKKworIzogZ2l0azozODE2Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJSaWNvcmRhIHF1ZXN0YSB2aXN0YSIKKworIzogZ2l0azozODE3Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAiUmlmZXJpbWVudGkgKGxpc3RhIGRpIGVsZW1lbnRpIHNlcGFyYXRpIGRhIHNwYXppKSIKKworIzogZ2l0azozODE4Cittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAiUmFtaSBlZCBldGljaGV0dGUiCisKKyM6IGdpdGs6MzgxOQorbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICJUdXR0aSBpIHJpZmVyaW1lbnRpIgorCisjOiBnaXRrOjM4MjAKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiVHV0dGkgaSByYW1pIChsb2NhbGkpIgorCisjOiBnaXRrOjM4MjEKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAiVHV0dGUgbGUgZXRpY2hldHRlIgorCisjOiBnaXRrOjM4MjIKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJUdXR0aSBpIHJhbWkgcmVtb3RpIgorCisjOiBnaXRrOjM4MjMKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJJbmZvcm1hemlvbmkgc3VsbGEgcmV2aXNpb25lIChlc3ByZXNzaW9uaSByZWdvbGFyaSk6IgorCisjOiBnaXRrOjM4MjQKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcmU6IgorCisjOiBnaXRrOjM4MjUKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJSZXZpc2lvbmUgY3JlYXRhIGRhOiIKKworIzogZ2l0azozODI2Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdnaW8gZGkgcmV2aXNpb25lOiIKKworIzogZ2l0azozODI3Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIlJpc3BvbmRlIGEgdHV0dGkgaSBjcml0ZXJpIGRpIHJpY2VyY2Egc3VsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjM4MjgKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAiTW9kaWZpY2hlIGFpIGZpbGU6IgorCisjOiBnaXRrOjM4MjkKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIlN0cmluZ2EgZmlzc2EiCisKKyM6IGdpdGs6MzgzMAorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiRXNwcmVzc2lvbmUgcmVnb2xhcmUiCisKKyM6IGdpdGs6MzgzMQorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJDZXJjYSBzdHJpbmdhOiIKKworIzogZ2l0azozODMyCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisiRGF0ZSBkaSByZXZpc2lvbmUgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsICIKKyIyMDA5IDE1OjI3OjM4XCIpOiIKKworIzogZ2l0azozODMzCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJEYToiCisKKyM6IGdpdGs6MzgzNAorbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiQToiCisKKyM6IGdpdGs6MzgzNQorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJMaW1pdGEgZS9vIHNhbHRhIE4gcmV2aXNpb25pIChpbnRlcm8gcG9zaXRpdm8pOiIKKworIzogZ2l0azozODM2Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICJOdW1lcm8gZGkgcmV2aXNpb25pIGRhIG1vc3RyYXJlOiIKKworIzogZ2l0azozODM3Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICJOdW1lcm8gZGkgcmV2aXNpb25pIGRhIHNhbHRhcmU6IgorCisjOiBnaXRrOjM4MzgKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJBbHRyZSBvcHppb25pOiIKKworIzogZ2l0azozODM5Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJPcmRpbmEgc29sbyBwZXIgZGF0YSIKKworIzogZ2l0azozODQwCittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIlNlZ25hIGkgbGF0aSBkZWwgcmFtbyIKKworIzogZ2l0azozODQxCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJMaW1pdGEgYWwgcHJpbW8gZ2VuaXRvcmUiCisKKyM6IGdpdGs6Mzg0MgorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJDcm9ub2xvZ2lhIHNlbXBsaWZpY2F0YSIKKworIzogZ2l0azozODQzCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIlVsdGVyaW9yaSBhcmdvbWVudGkgZGEgcGFzc2FyZSBhIGdpdCBsb2c6IgorCisjOiBnaXRrOjM4NDQKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAiSW5zZXJpcmUgZmlsZSBlIGRpcmVjdG9yeSBkYSBpbmNsdWRlcmUsIHVubyBwZXIgcmlnYToiCisKKyM6IGdpdGs6Mzg0NQorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJDb21hbmRvIGNoZSBnZW5lcmEgYWx0cmUgcmV2aXNpb25pIGRhIHZpc3VhbGl6emFyZToiCisKKyM6IGdpdGs6Mzk2NworbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogbW9kaWZpY2EgdmlzdGEiCisKKyM6IGdpdGs6Mzk3NQorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSBjcml0ZXJpIHBlciBsYSBzY2VsdGEgZGVsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjM5ODAKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk5vbWUgdmlzdGEiCisKKyM6IGdpdGs6NDA1NQorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIkFwcGxpY2EgKEY1KSIKKworIzogZ2l0azo0MDkzCittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJFcnJvcmUgbmVnbGkgYXJnb21lbnRpIGRpIHNlbGV6aW9uZSBkZWxsZSByZXZpc2lvbmk6IgorCisjOiBnaXRrOjQxNDYgZ2l0azo0MTk4IGdpdGs6NDY0NiBnaXRrOjQ2NjAgZ2l0azo1OTIxIGdpdGs6MTE1MzQgZ2l0azoxMTUzNQorbXNnaWQgIk5vbmUiCittc2dzdHIgIk5lc3N1bm8iCisKKyM6IGdpdGs6NDU5NCBnaXRrOjY0NDEgZ2l0azo4Mjg3IGdpdGs6ODMwMgorbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdGEiCisKKyM6IGdpdGs6NDU5NCBnaXRrOjY0NDEKK21zZ2lkICJDRGF0ZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQ3NDMgZ2l0azo0NzQ4Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAiRGlzY2VuZGVudGUiCisKKyM6IGdpdGs6NDc0NAorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJOb24gZGlzY2VuZGVudGUiCisKKyM6IGdpdGs6NDc1MSBnaXRrOjQ3NTYKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiQXNjZW5kZW50ZSIKKworIzogZ2l0azo0NzUyCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJOb24gYXNjZW5kZW50ZSIKKworIzogZ2l0azo1MDQyCittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJNb2RpZmljaGUgbG9jYWxpIHByZXNlbnRpIG5lbGwnaW5kaWNlIG1hIG5vbiBuZWxsJ2FyY2hpdmlvIgorCisjOiBnaXRrOjUwNzgKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTW9kaWZpY2hlIGxvY2FsaSBub24gcHJlc2VudGkgbsOpIG5lbGwnYXJjaGl2aW8gbsOpIG5lbGwnaW5kaWNlIgorCisjOiBnaXRrOjY3NTkKK21zZ2lkICJtYW55IgorbXNnc3RyICJtb2x0aSIKKworIzogZ2l0azo2OTQyCittc2dpZCAiVGFnczoiCittc2dzdHIgIkV0aWNoZXR0ZToiCisKKyM6IGdpdGs6Njk1OSBnaXRrOjY5NjUgZ2l0azo4MjgwCittc2dpZCAiUGFyZW50IgorbXNnc3RyICJHZW5pdG9yZSIKKworIzogZ2l0azo2OTcwCittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkZpZ2xpbyIKKworIzogZ2l0azo2OTc5Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJSYW1vIgorCisjOiBnaXRrOjY5ODIKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJTZWd1ZSIKKworIzogZ2l0azo2OTg1Cittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlByZWNlZGUiCisKKyM6IGdpdGs6NzUyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJFcnJvcmUgbmVsbGEgbGV0dHVyYSBkZWxsZSBkaWZmZXJlbnplOiIKKworIzogZ2l0azo4MTA4Cittc2dpZCAiR290bzoiCittc2dzdHIgIlZhaSBhOiIKKworIzogZ2l0azo4MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIkxhIFNIQTEgaWQgYWJicmV2aWF0YSAlcyDDqCBhbWJpZ3VhIgorCisjOiBnaXRrOjgxMzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkxhIHJldmlzaW9uZSAlcyDDqCBzY29ub3NjaXV0YSIKKworIzogZ2l0azo4MTQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkxhIFNIQTEgaWQgJXMgw6ggc2Nvbm9zY2l1dGEiCisKKyM6IGdpdGs6ODE0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgbm9uIMOoIHByZXNlbnRlIG5lbGxhIHZpc3RhIGF0dHVhbGUiCisKKyM6IGdpdGs6ODI5MAorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJGaWdsaSIKKworIzogZ2l0azo4MzQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIkFnZ2lvcm5hIGlsIHJhbW8gJXMgYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjgzNTAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiTmVzc3VuIHJhbW8gYXR0aXZvOiByZXNldCBpbXBvc3NpYmlsZSIKKworIzogZ2l0azo4NDU5IGdpdGs6ODQ2NQorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgIlNhbHRvIGxhIHJldmlzaW9uZSBkaSBmdXNpb25lICIKKworIzogZ2l0azo4NDc0IGdpdGs6ODQ3OQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGlkZW50aWZpY2F6aW9uZSBkZWxsYSBwYXRjaCBwZXIgIgorCisjOiBnaXRrOjg0NzUgZ2l0azo4NDgwCittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIC0gZmluZVxuIgorCisjOiBnaXRrOjg0ODUgZ2l0azo4NDg4IGdpdGs6ODQ5NiBnaXRrOjg1MTAgZ2l0azo4NTE5Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAiTGEgcmV2aXNpb25lICIKKworIzogZ2l0azo4NDg5Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgaGEgbGUgc3Rlc3NlIGRpZmZlcmVuemUgZGlcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjg0OTcKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgw6ggZGl2ZXJzYSBkYVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODQ5OQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJEaWZmZXJlbnplIHRyYSBsZSByZXZpc2lvbmk6XG4iCisiXG4iCisKKyM6IGdpdGs6ODUxMSBnaXRrOjg1MjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIGhhICVzIGZpZ2xpIC0gZmluZVxuIgorCisjOiBnaXRrOjg1MzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIHNjcml0dHVyYSBkZWxsYSByZXZpc2lvbmUgbmVsIGZpbGU6ICVzIgorCisjOiBnaXRrOjg1NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJFcnJvcmUgbmVsbGUgZGlmZmVyZW56ZSB0cmEgbGUgcmV2aXNpb25pOiAlcyIKKworIzogZ2l0azo4NTc1Cittc2dpZCAiVG9wIgorbXNnc3RyICJJbml6aW8iCisKKyM6IGdpdGs6ODU3NgorbXNnaWQgIkZyb20iCittc2dzdHIgIkRhIgorCisjOiBnaXRrOjg1ODEKK21zZ2lkICJUbyIKK21zZ3N0ciAiQSIKKworIzogZ2l0azo4NjA1Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlbmVyYSBwYXRjaCIKKworIzogZ2l0azo4NjA3Cittc2dpZCAiRnJvbToiCittc2dzdHIgIkRhOiIKKworIzogZ2l0azo4NjE2Cittc2dpZCAiVG86IgorbXNnc3RyICJBOiIKKworIzogZ2l0azo4NjI1Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiSW52ZXJ0aSIKKworIzogZ2l0azo4NjI3IGdpdGs6ODgyMgorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiU2NyaXZpIHN1bCBmaWxlOiIKKworIzogZ2l0azo4NjMzCittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyYSIKKworIzogZ2l0azo4NjcxCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgY3JlYXppb25lIGRlbGxhIHBhdGNoOiIKKworIzogZ2l0azo4Njk0IGdpdGs6ODgxMCBnaXRrOjg4NjcKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo4NzAzCittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb21lIGV0aWNoZXR0YToiCisKKyM6IGdpdGs6ODcwNgorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJJbCBtZXNzYWdnaW8gZGVsbCdldGljaGV0dGEgw6ggb3B6aW9uYWxlIgorCisjOiBnaXRrOjg3MDgKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkZWxsJ2V0aWNoZXR0YToiCisKKyM6IGdpdGs6ODcxMiBnaXRrOjg4NzYKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWEiCisKKyM6IGdpdGs6ODczMAorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiTmVzc3VuYSBldGljaGV0dGEgc3BlY2lmaWNhdGEiCisKKyM6IGdpdGs6ODczNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkwnZXRpY2hldHRhIFwiJXNcIiBlc2lzdGUgZ2nDoCIKKworIzogZ2l0azo4NzQ0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGNyZWF6aW9uZSBkZWxsJ2V0aWNoZXR0YToiCisKKyM6IGdpdGs6ODgxOQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJDb21hbmRvOiIKKworIzogZ2l0azo4ODI3Cittc2dpZCAiV3JpdGUiCittc2dzdHIgIlNjcml2aSIKKworIzogZ2l0azo4ODQ1Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgc2NyaXR0dXJhIGRlbGxhIHJldmlzaW9uZToiCisKKyM6IGdpdGs6ODg3MgorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOb21lOiIKKworIzogZ2l0azo4ODk1Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiU3BlY2lmaWNhcmUgdW4gbm9tZSBwZXIgaWwgbnVvdm8gcmFtbyIKKworIzogZ2l0azo4OTAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIklsIHJhbW8gJyVzJyBlc2lzdGUgZ2nDoC4gU292cmFzY3JpdmVyZT8iCisKKyM6IGdpdGs6ODk2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgw6ggZ2nDoCBpbmNsdXNhIG5lbCByYW1vICVzIC0tIGFwcGxpY2FybGEgZGkgbnVvdm8/IgorCisjOiBnaXRrOjg5NzEKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjg5ODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgY2hlcnJ5LXBpY2sgcGVyY2jDqSBpbCBmaWxlICclcycgw6ggc3RhdG8gbW9kaWZpY2F0byAiCisibmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9yby5cbiIKKyJQcmltYSBkaSByaXByb3ZhcmUsIGJpc29nbmEgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUsIGFubnVsbGFyZSBsZSAiCisibW9kaWZpY2hlIG8gdXNhcmUgJ2dpdCBzdGFzaCcuIgorCisjOiBnaXRrOjg5ODYKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBjaGVycnktcGljayBhIGNhdXNhIGRpIHVuIGNvbmZsaXR0byBuZWxsYSBmdXNpb25lLlxuIgorIlZ1b2kgYXZ2aWFyZSBnaXQgY2l0b29sIHBlciByaXNvbHZlcmxvPyIKKworIzogZ2l0azo5MDAyCittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EgYXJjaGl2aWF0YSIKKworIzogZ2l0azo5MDI4Cittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiQ29uZmVybWEgZ2l0IHJlc2V0IgorCisjOiBnaXRrOjkwMzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICJBZ2dpb3JuYXJlIGlsIHJhbW8gJXMgYSAlcz8iCisKKyM6IGdpdGs6OTAzMgorbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICJUaXBvIGRpIGFnZ2lvcm5hbWVudG86IgorCisjOiBnaXRrOjkwMzUKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiU29mdDogTGFzY2lhIGxhIGRpcmVjb3J5IGRpIGxhdm9ybyBlIGwnaW5kaWNlIGNvbWUgc29ubyIKKworIzogZ2l0azo5MDM4Cittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICJNaXhlZDogTGFzY2lhIGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gY29tZSDDqCwgYWdnaW9ybmEgbCdpbmRpY2UiCisKKyM6IGdpdGs6OTA0MQorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiSGFyZDogQWdnaW9ybmEgbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyBlIGwnaW5kaWNlXG4iCisiKGFiYmFuZG9uYSBUVVRURSBsZSBtb2RpZmljaGUgbG9jYWxpKSIKKworIzogZ2l0azo5MDU4Cittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICJnaXQgcmVzZXQgaW4gY29yc28iCisKKyM6IGdpdGs6OTExOAorbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiQXR0aXZhemlvbmUgaW4gY29yc28iCisKKyM6IGdpdGs6OTE3MQorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIkltcG9zc2liaWxlIGNhbmNlbGxhcmUgaWwgcmFtbyBhdHR1YWxtZW50ZSBhdHRpdm8iCisKKyM6IGdpdGs6OTE3NworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiTGUgcmV2aXNpb25pIG5lbCByYW1vICVzIG5vbiBzb25vIHByZXNlbnRpIHN1IGFsdHJpIHJhbWkuXG4iCisiQ2FuY2VsbGFyZSBpbCByYW1vICVzPyIKKworIzogZ2l0azo5MjA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJFdGljaGV0dGUgZSByYW1pOiAlcyIKKworIzogZ2l0azo5MjIzCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0cm8iCisKKyM6IGdpdGs6OTUxOAorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGxhIHRvcG9sb2dpYSBkZWxsZSByZXZpc2lvbmk6IGxlIGluZm9ybWF6aW9uaSBzdWwgIgorInJhbW8gZSBsZSBldGljaGV0dGUgcHJlY2VkZW50aSBlIHNlZ3VlbnRpIHNhcmFubm8gaW5jb21wbGV0ZS4iCisKKyM6IGdpdGs6MTA1MDQKK21zZ2lkICJUYWciCittc2dzdHIgIkV0aWNoZXR0YSIKKworIzogZ2l0azoxMDUwNAorbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMDU1NAorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTY2VsdGEgY2FyYXR0ZXJpIGdpdGsiCisKKyM6IGdpdGs6MTA1NzEKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjEwNTc0Cittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMDY5MgorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcmVuemUgZ2l0ayIKKworIzogZ2l0azoxMDY5NAorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSB2aXN1YWxpenphemlvbmUgZGVsbCdlbGVuY28gcmV2aXNpb25pIgorCisjOiBnaXRrOjEwNjk3Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJMYXJnaGV6emEgbWFzc2ltYSBkZWwgZ3JhZmljbyAoaW4gbGluZWUpIgorCisjOiBnaXRrOjEwNzAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTGFyZ2hlenphIG1hc3NpbWEgZGVsIGdyYWZpY28gKCUgZGVsIHBhbm5lbGxvKSIKKworIzogZ2l0azoxMDcwMworbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTW9zdHJhIG1vZGlmaWNoZSBsb2NhbGkiCisKKyM6IGdpdGs6MTA3MDYKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIgorbXNnc3RyICJTZWxlemlvbmEgYXV0b21hdGljYW1lbnRlIFNIQTEgaGFzaCIKKworIzogZ2l0azoxMDcwOQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIk5hc2NvbmRpIGkgcmlmZXJpbWVudGkgcmVtb3RpIgorCisjOiBnaXRrOjEwNzEzCittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgZGkgdmlzdWFsaXp6YXppb25lIGRlbGxlIGRpZmZlcmVuemUiCisKKyM6IGdpdGs6MTA3MTUKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiU3BhemlhdHVyYSB0YWJ1bGF6aW9uaSIKKworIzogZ2l0azoxMDcxOAorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MiCittc2dzdHIgIk1vc3RyYSBldGljaGV0dGUgdmljaW5lIgorCisjOiBnaXRrOjEwNzIxCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJMaW1pdGEgbGUgZGlmZmVyZW56ZSBhaSBwZXJjb3JzaSBlbGVuY2F0aSIKKworIzogZ2l0azoxMDcyNAorbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICJBdHRpdmEgY29kaWZpY2EgZmlsZSBwZXIgZmlsZSIKKworIzogZ2l0azoxMDczMCBnaXRrOjEwODE5Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICJWaXN1YWxpenphdG9yZSBkaSBkaWZmZXJlbnplIgorCisjOiBnaXRrOjEwNzMxCittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICJTY2VnbGkuLi4iCisKKyM6IGdpdGs6MTA3MzYKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgZ2VuZXJhbGkiCisKKyM6IGdpdGs6MTA3MzkKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIlV0aWxpenphIGludGVyZmFjY2lhIGEgdGVtYSIKKworIzogZ2l0azoxMDc0MQorbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCittc2dzdHIgIih1bmEgbW9kaWZpY2EgcmljaGllZGUgaWwgcmlhdnZpbykiCisKKyM6IGdpdGs6MTA3NDMKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKG1vbWVudGFuZWFtZW50ZSBub24gZGlzcG9uaWJpbGUpIgorCisjOiBnaXRrOjEwNzQ3Cittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkNvbG9yaTogcHJlbWVyZSBwZXIgc2NlZ2xpZXJlIgorCisjOiBnaXRrOjEwNzUwCittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICJJbnRlcmZhY2NpYSIKKworIzogZ2l0azoxMDc1MQorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiaW50ZXJmYWNjaWEiCisKKyM6IGdpdGs6MTA3NTQKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJTZm9uZG8iCisKKyM6IGdpdGs6MTA3NTUgZ2l0azoxMDc4NQorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgInNmb25kbyIKKworIzogZ2l0azoxMDc1OAorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIlByaW1vIHBpYW5vIgorCisjOiBnaXRrOjEwNzU5Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAicHJpbW8gcGlhbm8iCisKKyM6IGdpdGs6MTA3NjIKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IHZlY2NoaWUgbGluZWUiCisKKyM6IGdpdGs6MTA3NjMKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAidmVjY2hpZSBsaW5lZSIKKworIzogZ2l0azoxMDc2NworbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiRGlmZjogbnVvdmUgbGluZWUiCisKKyM6IGdpdGs6MTA3NjgKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAibnVvdmUgbGluZWUiCisKKyM6IGdpdGs6MTA3NzIKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZjogaW50ZXN0YXppb25lIGRlbGxhIHNlemlvbmUiCisKKyM6IGdpdGs6MTA3NzQKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJpbnRlc3RhemlvbmUgZGVsbGEgc2V6aW9uZSIKKworIzogZ2l0azoxMDc3OAorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICJTZm9uZG8gcmlnYSBzZWxlemlvbmF0YSIKKworIzogZ2l0azoxMDc4MAorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgInNmb25kbyByaWdhIHNlbGV6aW9uYXRhIgorCisjOiBnaXRrOjEwNzg0Cittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJTZm9uZG8iCisKKyM6IGdpdGs6MTA3ODgKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJDYXJhdHRlcmU6IHByZW1lcmUgcGVyIHNjZWdsaWVyZSIKKworIzogZ2l0azoxMDc5MAorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAiQ2FyYXR0ZXJlIHByaW5jaXBhbGUiCisKKyM6IGdpdGs6MTA3OTEKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiQ2FyYXR0ZXJlIHBlciBkaWZmZXJlbnplIgorCisjOiBnaXRrOjEwNzkyCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiQ2FyYXR0ZXJlIHBlciBpbnRlcmZhY2NpYSB1dGVudGUiCisKKyM6IGdpdGs6MTA4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiBzY2VnbGllcmUgdW4gY29sb3JlIHBlciAlcyIKKworIzogZ2l0azoxMTQzMworbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIkFyY2hpdmlvIGdpdCBub24gdHJvdmF0by4iCisKKyM6IGdpdGs6MTE0MzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorbXNnc3RyICJEaXJlY3RvcnkgZ2l0IFwiJXNcIiBub24gdHJvdmF0YS4iCisKKyM6IGdpdGs6MTE0ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIkFyZ29tZW50byBhbWJpZ3VvOiAnJXMnIMOoIHNpYSByZXZpc2lvbmUgY2hlIG5vbWUgZGkgZmlsZSIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkdpdGs6IGFyZ29tZW50aSBlcnJhdGk6IgorCisjOiBnaXRrOjExNTg3Cittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJMaW5lYSBkaSBjb21hbmRvIgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vamEucG8gYi9naXRrLWdpdC9wby9qYS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjQ3MDUxCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vamEucG8KQEAgLTAsMCArMSwxMjU1IEBACisjIEphcGFuZXNlIHRyYW5zbGF0aW9ucyBmb3IgZ2l0ayBwYWNrYWdlLgorIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBQYXVsIE1hY2tlcnJhcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIworIyBNaXphciA8bWl6YXIuanBAZ21haWwuY29tPiwgMjAwOS4KKyMgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiwgMjAwOS4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGtcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDktMTEtMDQgMDA6MDgrMDkwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMTEtMDYgMDE6NDUrMDkwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWl6YXIgPG1pemFyLmpwQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBKYXBhbmVzZVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisKKyM6IGdpdGs6MTEzCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICLjg57jg7zjgrjjgZXjgozjgabjgYTjgarjgYTjg5XjgqHjgqTjg6vjga7jg6rjgrnjg4jjgpLlj5blvpfjgafjgY3jgb7jgZvjgpM6IgorCisjOiBnaXRrOjI2OQorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAi44Oq44OT44K444On44Oz6Kej5p6Q44Ko44Op44O8OiIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICItLWFyZ3NjbWQg44Kz44Oe44Oz44OJ5a6f6KGM44Ko44Op44O8OiIKKworIzogZ2l0azozMzcKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyLjg5XjgqHjgqTjg6vmnKrpgbjmip46IC0tbWVyZ2Ug44GM5oyH5a6a44GV44KM44G+44GX44Gf44GM44CB44Oe44O844K444GV44KM44Gm44GE44Gq44GE44OV44Kh44Kk44Or44Gv44GC44KKIgorIuOBvuOBm+OCk+OAgiIKKworIzogZ2l0azozNDAKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIuODleOCoeOCpOODq+acqumBuOaKnjogLS1tZXJnZSDjgYzmjIflrprjgZXjgozjgb7jgZfjgZ/jgYzjgIHjg5XjgqHjgqTjg6vliLbpmZDlhoXjgavjg57jg7zjgrjjgZXjgozjgabjgYTjgaoiCisi44GE44OV44Kh44Kk44Or44Gv44GC44KK44G+44Gb44KT44CCIgorCisjOiBnaXRrOjM2MiBnaXRrOjUwOQorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiZ2l0IGxvZyDlrp/ooYzjgqjjg6njg7w6IgorCisjOiBnaXRrOjM4MCBnaXRrOjUyNQorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIuiqreOBv+i+vOOBv+S4rSIKKworIzogZ2l0azo0NDAgZ2l0azo0MTMyCittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICLjgrPjg5/jg4Pjg4joqq3jgb/ovrzjgb/kuK0uLi4iCisKKyM6IGdpdGs6NDQzIGdpdGs6MTU2MSBnaXRrOjQxMzUKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jjgYzpgbjmip7jgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyM6IGdpdGs6MTQzNworbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiZ2l0IGxvZyDjga7lh7rlipvjgpLop6PmnpDjgafjgY3jgb7jgZvjgpM6IgorCisjOiBnaXRrOjE2NTcKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICLmnInlirnjgarjgrPjg5/jg4Pjg4jjga7mg4XloLHjgYzjgYLjgorjgb7jgZvjgpMiCisKKyM6IGdpdGs6MTc5MAorbXNnaWQgIm1jIgorbXNnc3RyICJtYyIKKworIzogZ2l0azoxODE3IGdpdGs6MzkyNSBnaXRrOjg4NDIgZ2l0azoxMDM3OCBnaXRrOjEwNTU4Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjE4MTkgZ2l0azozOTI3IGdpdGs6ODQzOSBnaXRrOjg1MTMgZ2l0azo4NjIzIGdpdGs6ODY3MiBnaXRrOjg4NDQKKyM6IGdpdGs6MTAzNzkgZ2l0azoxMDU1OQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi44Kt44Oj44Oz44K744OrIgorCisjOiBnaXRrOjE5MTkKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIuabtOaWsCIKKworIzogZ2l0azoxOTIwCittc2dpZCAiUmVsb2FkIgorbXNnc3RyICLjg6rjg63jg7zjg4kiCisKKyM6IGdpdGs6MTkyMQorbXNnaWQgIlJlcmVhZCByZWZlcmVuY2VzIgorbXNnc3RyICLjg6rjg5XjgqHjg6zjg7PjgrnjgpLlho3oqq3jgb/ovrzjgb8iCisKKyM6IGdpdGs6MTkyMgorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAi44Oq44OV44Kh44Os44Oz44K544Oq44K544OI44KS6KGo56S6IgorCisjOiBnaXRrOjE5MjQKK21zZ2lkICJTdGFydCBnaXQgZ3VpIgorbXNnc3RyICJnaXQgZ3VpIOOBrumWi+WniyIKKworIzogZ2l0azoxOTI2Cittc2dpZCAiUXVpdCIKK21zZ3N0ciAi57WC5LqGIgorCisjOiBnaXRrOjE5MTgKK21zZ2lkICJGaWxlIgorbXNnc3RyICLjg5XjgqHjgqTjg6siCisKKyM6IGdpdGs6MTkzMAorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICLoqK3lrpoiCisKKyM6IGdpdGs6MTkyOQorbXNnaWQgIkVkaXQiCittc2dzdHIgIue3qOmbhiIKKworIzogZ2l0azoxOTM0Cittc2dpZCAiTmV3IHZpZXcuLi4iCittc2dzdHIgIuaWsOimj+ODk+ODpeODvC4uLiIKKworIzogZ2l0azoxOTM1Cittc2dpZCAiRWRpdCB2aWV3Li4uIgorbXNnc3RyICLjg5Pjg6Xjg7znt6jpm4YuLi4iCisKKyM6IGdpdGs6MTkzNgorbXNnaWQgIkRlbGV0ZSB2aWV3IgorbXNnc3RyICLjg5Pjg6Xjg7zliYrpmaQiCisKKyM6IGdpdGs6MTkzOAorbXNnaWQgIkFsbCBmaWxlcyIKK21zZ3N0ciAi5YWo44Gm44Gu44OV44Kh44Kk44OrIgorCisjOiBnaXRrOjE5MzMgZ2l0azozNjc5Cittc2dpZCAiVmlldyIKK21zZ3N0ciAi44OT44Ol44O8IgorCisjOiBnaXRrOjE5NDMgZ2l0azoxOTUzIGdpdGs6MjY1NgorbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgImdpdGsg44Gr44Gk44GE44GmIgorCisjOiBnaXRrOjE5NDQgZ2l0azoxOTU4Cittc2dpZCAiS2V5IGJpbmRpbmdzIgorbXNnc3RyICLjgq3jg7zjg5DjgqTjg7Pjg4fjgqPjg7PjgrAiCisKKyM6IGdpdGs6MTk0MiBnaXRrOjE5NTcKK21zZ2lkICJIZWxwIgorbXNnc3RyICLjg5jjg6vjg5ciCisKKyM6IGdpdGs6MjAxOAorbXNnaWQgIlNIQTEgSUQ6ICIKK21zZ3N0ciAiU0hBMSBJRDogIgorCisjOiBnaXRrOjIwNDkKK21zZ2lkICJSb3ciCittc2dzdHIgIuihjCIKKworIzogZ2l0azoyMDgwCittc2dpZCAiRmluZCIKK21zZ3N0ciAi5qSc57SiIgorCisjOiBnaXRrOjIwODEKK21zZ2lkICJuZXh0IgorbXNnc3RyICLmrKEiCisKKyM6IGdpdGs6MjA4MgorbXNnaWQgInByZXYiCittc2dzdHIgIuWJjSIKKworIzogZ2l0azoyMDgzCittc2dpZCAiY29tbWl0IgorbXNnc3RyICLjgrPjg5/jg4Pjg4giCisKKyM6IGdpdGs6MjA4NiBnaXRrOjIwODggZ2l0azo0MjkzIGdpdGs6NDMxNiBnaXRrOjQzNDAgZ2l0azo2MjgxIGdpdGs6NjM1MworIzogZ2l0azo2NDM3Cittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgIuWQq+OCgDoiCisKKyM6IGdpdGs6MjA4OSBnaXRrOjMxNjQgZ2l0azozMTY5IGdpdGs6NDM2OAorbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAi44OR44K544Gu5LiA6YOoOiIKKworIzogZ2l0azoyMDkwIGdpdGs6NDM3MworbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICLov73liqAv6Zmk5Y6744GZ44KL5paH5a2X5YiXOiIKKworIzogZ2l0azoyMDk5IGdpdGs6MjEwMQorbXNnaWQgIkV4YWN0IgorbXNnc3RyICLoi7HlrZfjga7lpKflsI/jgpLljLrliKXjgZnjgosiCisKKyM6IGdpdGs6MjEwMSBnaXRrOjQ0NDggZ2l0azo2MjQ5Cittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAi6Iux5a2X44Gu5aSn5bCP44KS5Yy65Yil44GX44Gq44GEIgorCisjOiBnaXRrOjIxMDEgZ2l0azo0MzQyIGdpdGs6NDQ0NiBnaXRrOjYyNDUKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIuato+imj+ihqOePviIKKworIzogZ2l0azoyMTAzIGdpdGs6MjEwNCBnaXRrOjQ0NjcgZ2l0azo0NDk3IGdpdGs6NDUwNCBnaXRrOjYzNzMgZ2l0azo2NDQxCittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAi5YWo44Gm44Gu6aCF55uuIgorCisjOiBnaXRrOjIxMDQgZ2l0azo0NDY1IGdpdGs6NDQ5NyBnaXRrOjYzMTIKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAi44OY44OD44OJ44Op44Kk44OzIgorCisjOiBnaXRrOjIxMDUgZ2l0azo0NDY1IGdpdGs6NjMxMiBnaXRrOjY0NDEgZ2l0azo2ODc1Cittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIuOCs+ODoeODs+ODiCIKKworIzogZ2l0azoyMTA1IGdpdGs6NDQ2NSBnaXRrOjQ0NjkgZ2l0azo0NTA0IGdpdGs6NjMxMiBnaXRrOjY4MTAgZ2l0azo4MDkxCisjOiBnaXRrOjgxMDYKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIuS9nOiAhSIKKworIzogZ2l0azoyMTA1IGdpdGs6NDQ2NSBnaXRrOjYzMTIgZ2l0azo2ODEyCittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jogIUiCisKKyM6IGdpdGs6MjEzNAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAi5qSc57SiIgorCisjOiBnaXRrOjIxNDEKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZmIgorCisjOiBnaXRrOjIxNDMKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAi5pen44OQ44O844K444On44OzIgorCisjOiBnaXRrOjIxNDUKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAi5paw44OQ44O844K444On44OzIgorCisjOiBnaXRrOjIxNDcKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICLmlofohIjooYzmlbAiCisKKyM6IGdpdGs6MjE1NworbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIuepuueZveOBrumBleOBhOOCkueEoeimliIKKworIzogZ2l0azoyMjE1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIuODkeODg+ODgSIKKworIzogZ2l0azoyMjE3Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAi44OE44Oq44O8IgorCisjOiBnaXRrOjIzNjEgZ2l0azoyMzc4Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICLjgZPjgozjgajpgbjmip7jgZfjgZ/jgrPjg5/jg4Pjg4jjga5kaWZm44KS6KaL44KLIgorCisjOiBnaXRrOjIzNjIgZ2l0azoyMzc5Cittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICLpgbjmip7jgZfjgZ/jgrPjg5/jg4Pjg4jjgajjgZPjgozjga5kaWZm44KS6KaL44KLIgorCisjOiBnaXRrOjIzNjMgZ2l0azoyMzgwCittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAi44OR44OD44OB5L2c5oiQIgorCisjOiBnaXRrOjIzNjQgZ2l0azo4NDk3Cittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAi44K/44Kw55Sf5oiQIgorCisjOiBnaXRrOjIzNjUgZ2l0azo4NjAzCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIuOCs+ODn+ODg+ODiOOCkuODleOCoeOCpOODq+OBq+abuOOBjeWHuuOBmSIKKworIzogZ2l0azoyMzY2IGdpdGs6ODY2MAorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICLmlrDopo/jg5bjg6njg7Pjg4HnlJ/miJAiCisKKyM6IGdpdGs6MjM2NworbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICLjgZPjga7jgrPjg5/jg4Pjg4jjgpLjg4Hjgqfjg6rjg7zjg5Tjg4Pjgq/jgZnjgosiCisKKyM6IGdpdGs6MjM2OAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIuODluODqeODs+ODgeOBrkhFQUTjgpLjgZPjgZPjgavjg6rjgrvjg4Pjg4jjgZnjgosiCisKKyM6IGdpdGs6MjM2OQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIuOBk+OBruOCs+ODn+ODg+ODiOOBq+ODnuODvOOCr+OCkuOBpOOBkeOCiyIKKworIzogZ2l0azoyMzcwCittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIuODnuODvOOCr+OCkuS7mOOBkeOBn+aJgOOBq+aIu+OCiyIKKworIzogZ2l0azoyMzcxCittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIuOBk+OCjOOBqOODnuODvOOCr+OCkuOBpOOBkeOBn+aJgOOBqOOBruWtkOWtq+OCkuimi+OBpOOBkeOCiyIKKworIzogZ2l0azoyMzcyCittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIuODnuODvOOCr+OCkuS7mOOBkeOBn+OCs+ODn+ODg+ODiOOBqOavlOi8g+OBmeOCiyIKKworIzogZ2l0azoyMzg2Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICLjgZPjga7jg5bjg6njg7Pjg4HjgpLjg4Hjgqfjg4Pjgq/jgqLjgqbjg4jjgZnjgosiCisKKyM6IGdpdGs6MjM4NworbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi44GT44Gu44OW44Op44Oz44OB44KS6Zmk5Y6744GZ44KLIgorCisjOiBnaXRrOjIzOTQKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIuOBk+OCjOOCguODj+OCpOODqeOCpOODiOOBleOBm+OCiyIKKworIzogZ2l0azoyMzk1Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAi44GT44KM44Gg44GR44KS44OP44Kk44Op44Kk44OI44GV44Gb44KLIgorCisjOiBnaXRrOjIzOTYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICLlpJbpg6hkaWZm44OE44O844OrIgorCisjOiBnaXRrOjIzOTcKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICLopqrjgrPjg5/jg4Pjg4jjgYvjgokgYmxhbWUg44KS44GL44GR44KLIgorCisjOiBnaXRrOjI0MDQKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIuOBk+OBruihjOOBruWHuuiHquOCkuihqOekuuOBmeOCiyIKKworIzogZ2l0azoyNDA1Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICLjgZPjga7ooYzjgasgZ2l0IGd1aSDjgacgYmxhbWUg44KS44GL44GR44KLIgorCisjOiBnaXRrOjI2NTgKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSBnaXTjgrPjg5/jg4Pjg4jjg5Pjg6Xjg7zjgqJcbiIKKyJcbiIKKyJDb3B5cmlnaHQgXFx1MDBhOSAyMDA1LTIwMTAgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyLkvb/nlKjjgYrjgojjgbPlho3phY3luIPjga8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug44Gr5b6T44Gj44Gm44GP44Gg44GV44GEIgorCisjOiBnaXRrOjI2NjYgZ2l0azoyNzI4IGdpdGs6OTAyNQorbXNnaWQgIkNsb3NlIgorbXNnc3RyICLplonjgZjjgosiCisKKyM6IGdpdGs6MjY4NQorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJHaXRrIOOCreODvOODkOOCpOODs+ODh+OCo+ODs+OCsCIKKworIzogZ2l0azoyNjg4Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJHaXRrIOOCreODvOODkOOCpOODs+ODh+OCo+ODs+OCsDoiCisKKyM6IGdpdGs6MjY5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx057WC5LqGIgorCisjOiBnaXRrOjI2OTEKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHTmnIDliJ3jga7jgrPjg5/jg4Pjg4jjgavnp7vli5UiCisKKyM6IGdpdGs6MjY5MgorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdOacgOW+jOOBruOCs+ODn+ODg+ODiOOBq+enu+WLlSIKKworIzogZ2l0azoyNjkzCittc2dpZCAiPFVwPiwgcCwgaVx0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8VXA+LCBwLCBpXHTkuIDjgaTkuIrjga7jgrPjg5/jg4Pjg4jjgavnp7vli5UiCisKKyM6IGdpdGs6MjY5NAorbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwga1x05LiA44Gk5LiL44Gu44Kz44Of44OD44OI44Gr56e75YuVIgorCisjOiBnaXRrOjI2OTUKK21zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGVmdD4sIHosIGpcdOWxpeattOOBruWJjeOBq+aIu+OCiyIKKworIzogZ2l0azoyNjk2Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSaWdodD4sIHgsIGxcdOWxpeattOOBruasoeOBuOmAsuOCgCIKKworIzogZ2l0azoyNjk3Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlVXA+XHTjgrPjg5/jg4Pjg4jjg6rjgrnjg4jjga7kuIDjgaTkuIrjga7jg5rjg7zjgrjjgavnp7vli5UiCisKKyM6IGdpdGs6MjY5OAorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiA44Gk5LiL44Gu44Oa44O844K444Gr56e75YuVIgorCisjOiBnaXRrOjI2OTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Ib21lPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiA55Wq5LiK44Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjI3MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4gOeVquS4i+OBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azoyNzAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXA+XHTjgrPjg5/jg4Pjg4jjg6rjgrnjg4jjga7kuIDjgaTkuIvjga7ooYzjgavjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MjcwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiA44Gk5LiL44Gu6KGM44Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjI3MDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZVVwPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiK44Gu44Oa44O844K444Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjI3MDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiL44Gu44Oa44O844K444Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjI3MDUKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1VcD5cdOW+jOaWueOCkuaknOe0oiAo5LiK5pa544Gu44O75paw44GX44GE44Kz44Of44OD44OIKSIKKworIzogZ2l0azoyNzA2Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1Eb3duPlx05YmN5pa544KS5qSc57Si77yI5LiL5pa544Gu44O75Y+k44GE44Kz44Of44OD44OI77yJIgorCisjOiBnaXRrOjI3MDcKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPERlbGV0ZT4sIGJcdGRpZmbnlLvpnaLjgpLkuIrjga7jg5rjg7zjgrjjgavjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MjcwOAorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8QmFja3NwYWNlPlx0ZGlmZueUu+mdouOCkuS4iuOBruODmuODvOOCuOOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azoyNzA5Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxTcGFjZT5cdFx0ZGlmZueUu+mdouOCkuS4i+OBruODmuODvOOCuOOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azoyNzEwCittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdGRpZmbnlLvpnaLjgpLkuIrjgasxOOihjOOCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azoyNzExCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0ZGlmZueUu+mdouOCkuS4i+OBqzE46KGM44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjI3MTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdOaknOe0oiIKKworIzogZ2l0azoyNzEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdOasoeOCkuaknOe0ouOBl+OBpuenu+WLlSIKKworIzogZ2l0azoyNzE0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdOasoeOCkuaknOe0ouOBl+OBpuenu+WLlSIKKworIzogZ2l0azoyNzE1Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHTmpJzntKLjg5zjg4Pjgq/jgrnjgavjg5Xjgqnjg7zjgqvjgrkiCisKKyM6IGdpdGs6MjcxNgorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHTliY3jgpLmpJzntKLjgZfjgabnp7vli5UiCisKKyM6IGdpdGs6MjcxNworbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx05qyh44Gu44OV44Kh44Kk44Or44GrZGlmZueUu+mdouOCkuOCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azoyNzE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0ZGlmZueUu+mdouOBruasoeOCkuaknOe0oiIKKworIzogZ2l0azoyNzE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdGRpZmbnlLvpnaLjga7liY3jgpLmpJzntKIiCisKKyM6IGdpdGs6MjcyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHTmloflrZfjgrXjgqTjgrrjgpLmi6HlpKciCisKKyM6IGdpdGs6MjcyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdOaWh+Wtl+OCteOCpOOCuuOCkuaLoeWkpyIKKworIzogZ2l0azoyNzIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdOaWh+Wtl+OCteOCpOOCuuOCkue4ruWwjyIKKworIzogZ2l0azoyNzIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHTmloflrZfjgrXjgqTjgrrjgpLnuK7lsI8iCisKKyM6IGdpdGs6MjcyNAorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdOabtOaWsCIKKworIzogZ2l0azozMTc5IGdpdGs6MzE4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICLkuIDmmYLjg4fjgqPjg6zjgq/jg4jjg6ogJXMg55Sf5oiQ5pmC44Ko44Op44O8OiIKKworIzogZ2l0azozMjAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIlwiJXNcIiDjga7jgqjjg6njg7zjgYwgJXMg44Gr55m655SfOiIKKworIzogZ2l0azozMjY0Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICLjgrPjg57jg7Pjg4nlpLHmlZc6IgorCisjOiBnaXRrOjM0MTAKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAi44Gd44Gu44KI44GG44Gq44Kz44Of44OD44OI44Gv44GC44KK44G+44Gb44KTIgorCisjOiBnaXRrOjM0MjQKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6IOOCs+ODnuODs+ODieWkseaVlzoiCisKKyM6IGdpdGs6MzQ1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIuODnuODvOOCuOOBmeOCiyBIRUFEIOOCkuiqreOBv+i+vOOCgeOBvuOBm+OCkzogJXMiCisKKyM6IGdpdGs6MzQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICLjgqTjg7Pjg4fjg4Pjgq/jgrnoqq3jgb/ovrzjgb/jgqjjg6njg7w6ICVzIgorCisjOiBnaXRrOjM0ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJnaXQgYmxhbWUg44KS5aeL44KB44KJ44KM44G+44Gb44KTOiAlcyIKKworIzogZ2l0azozNDkxIGdpdGs6NjI4MAorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAi5qSc57Si5LitIgorCisjOiBnaXRrOjM1MjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgImdpdCBibGFtZSDlrp/ooYzjgqjjg6njg7w6ICVzIgorCisjOiBnaXRrOjM1NTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICLjgrPjg5/jg4Pjg4ggJXMg44Gr55Sx5p2l44GZ44KL44Gd44Gu6KGM44Gv44CB44GT44Gu44OT44Ol44O844Gr6KGo56S644GV44KM44Gm44GE44G+44Gb44KTIgorCisjOiBnaXRrOjM1NjUKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICLlpJbpg6hkaWZm44OT44Ol44O844Ki44GM5aSx5pWXOiIKKworIzogZ2l0azozNjgzCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkdpdGsg44OT44Ol44O85a6a576pIgorCisjOiBnaXRrOjM2ODcKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIuOBk+OBruODk+ODpeODvOOCkuiomOaGtuOBmeOCiyIKKworIzogZ2l0azozNjg4Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAi44Oq44OV44Kh44Os44Oz44K577yI44K544Oa44O844K55Yy65YiH44KK44Gu44Oq44K544OI77yJOiIKKworIzogZ2l0azozNjg5Cittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAi44OW44Op44Oz44OB77yG44K/44KwOiIKKworIzogZ2l0azozNjkwCittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIuWFqOOBpuOBruODquODleOCoeODrOODs+OCuSIKKworIzogZ2l0azozNjkxCittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIuWFqOOBpuOBru+8iOODreODvOOCq+ODq+OBqu+8ieODluODqeODs+ODgSIKKworIzogZ2l0azozNjkyCittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIuWFqOOBpuOBruOCv+OCsCIKKworIzogZ2l0azozNjkzCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi5YWo44Gm44Gu44Oq44Oi44O844OI6L+96Leh44OW44Op44Oz44OBIgorCisjOiBnaXRrOjM2OTQKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jmg4XloLHvvIjmraPopo/ooajnj77vvIk6IgorCisjOiBnaXRrOjM2OTUKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICLkvZzogIU6IgorCisjOiBnaXRrOjM2OTYKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jogIU6IgorCisjOiBnaXRrOjM2OTcKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIuOCs+ODn+ODg+ODiOODoeODg+OCu+ODvOOCuDoiCisKKyM6IGdpdGs6MzY5OAorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jmg4XloLHjga7lhajjgabjga7mnaHku7bjgavkuIDoh7QiCisKKyM6IGdpdGs6MzY5OQorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICLlpInmm7TjgZfjgZ/jg5XjgqHjgqTjg6s6IgorCisjOiBnaXRrOjM3MDAKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIuWbuuWumuaWh+Wtl+WIlyIKKworIzogZ2l0azozNzAxCittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICLmraPopo/ooajnj74iCisKKyM6IGdpdGs6MzcwMgorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICLmpJzntKLmloflrZfliJc6IgorCisjOiBnaXRrOjM3MDMKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyLjgrPjg5/jg4Pjg4jml6XmmYIgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKKworIzogZ2l0azozNzA0Cittc2dpZCAiU2luY2U6IgorbXNnc3RyICLmnJ/plpPjga7lp4vjgoE6IgorCisjOiBnaXRrOjM3MDUKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIuacn+mWk+OBrue1guOCj+OCijoiCisKKyM6IGdpdGs6MzcwNgorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICLliLbpmZDjg7vnnIHnlaXjgZnjgovjg6rjg5Pjgrjjg6fjg7Pjga7mlbDvvIjmraPjga7mlbTmlbDvvIk6IgorCisjOiBnaXRrOjM3MDcKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIuihqOekuuOBmeOCi+aVsDoiCisKKyM6IGdpdGs6MzcwOAorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAi55yB55Wl44GZ44KL5pWwOiIKKworIzogZ2l0azozNzA5Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAi44Gd44Gu5LuW44Gu44Kq44OX44K344On44OzOiIKKworIzogZ2l0azozNzEwCittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICLljrPlr4bjgavml6Xku5jpoIbjgafkuKbjgbPmm7/jgYgiCisKKyM6IGdpdGs6MzcxMQorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICLlgbTmnp3jg57jg7zjgq8iCisKKyM6IGdpdGs6MzcxMgorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAi5pyA5Yid44Gu6Kaq44Gr5Yi26ZmQIgorCisjOiBnaXRrOjM3MTMKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAi57Ch5piT44Gq5bGl5q20IgorCisjOiBnaXRrOjM3MTQKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiZ2l0IGxvZyDjgbjjga7ov73liqDjga7lvJXmlbA6IgorCisjOiBnaXRrOjM3MTUKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAi5ZCr44G+44KM44KL44OV44Kh44Kk44Or44O744OH44Kj44Os44Kv44OI44Oq44KS5LiA6KGM44GU44Go44Gr5YWl5YqbOiIKKworIzogZ2l0azozNzE2Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIuOCs+ODn+ODg+ODiOi/veWKoOOCs+ODnuODs+ODiToiCisKKyM6IGdpdGs6MzgzOAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azog44OT44Ol44O857eo6ZuGIgorCisjOiBnaXRrOjM4NDYKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAi4oCVIOODquODk+OCuOODp+ODs+OBrumBuOaKnuadoeS7tiIKKworIzogZ2l0azozODUxCittc2dpZCAiVmlldyBOYW1lOiIKK21zZ3N0ciAi44OT44Ol44O85ZCNOiIKKworIzogZ2l0azozOTI2Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAi6YGp55SoIChGNSkiCisKKyM6IGdpdGs6Mzk2NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAi44Kz44Of44OD44OI6YG45oqe5byV5pWw44Gu44Ko44Op44O8OiIKKworIzogZ2l0azo0MDE3IGdpdGs6NDA2OSBnaXRrOjQ1MTcgZ2l0azo0NTMxIGdpdGs6NTc5MiBnaXRrOjExMjYzIGdpdGs6MTEyNjQKK21zZ2lkICJOb25lIgorbXNnc3RyICLnhKHjgZciCisKKyM6IGdpdGs6NDQ2NSBnaXRrOjYzMTIgZ2l0azo4MDkzIGdpdGs6ODEwOAorbXNnaWQgIkRhdGUiCittc2dzdHIgIuaXpeS7mCIKKworIzogZ2l0azo0NDY1IGdpdGs6NjMxMgorbXNnaWQgIkNEYXRlIgorbXNnc3RyICLkvZzmiJDml6UiCisKKyM6IGdpdGs6NDYxNCBnaXRrOjQ2MTkKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICLlrZDlrasiCisKKyM6IGdpdGs6NDYxNQorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICLpnZ7lrZDlrasiCisKKyM6IGdpdGs6NDYyMiBnaXRrOjQ2MjcKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAi56WW5YWIIgorCisjOiBnaXRrOjQ2MjMKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIumdnuelluWFiCIKKworIzogZ2l0azo0OTEzCittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICLjgrnjg4bjg7zjgrjjgZXjgozjgZ/jgIHjgrPjg5/jg4Pjg4jliY3jga7jg63jg7zjgqvjg6vjgarlpInmm7QiCisKKyM6IGdpdGs6NDk0OQorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICLjgrnjg4bjg7zjgrjjgZXjgozjgabjgYTjgarjgYTjgIHjgrPjg5/jg4Pjg4jliY3jga7jg63jg7zjgqvjg6vjgarlpInmm7QiCisKKyM6IGdpdGs6NjYzMAorbXNnaWQgIm1hbnkiCittc2dzdHIgIuWkmuaVsCIKKworIzogZ2l0azo2ODE0Cittc2dpZCAiVGFnczoiCittc2dzdHIgIuOCv+OCsDoiCisKKyM6IGdpdGs6NjgzMSBnaXRrOjY4MzcgZ2l0azo4MDg2Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICLopqoiCisKKyM6IGdpdGs6Njg0MgorbXNnaWQgIkNoaWxkIgorbXNnc3RyICLlrZAiCisKKyM6IGdpdGs6Njg1MQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAi44OW44Op44Oz44OBIgorCisjOiBnaXRrOjY4NTQKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICLkuIvkvY0iCisKKyM6IGdpdGs6Njg1NworbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICLkuIrkvY0iCisKKyM6IGdpdGs6NzM1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJkaWZm5Y+W5b6X44Ko44Op44O8OiAlcyIKKworIzogZ2l0azo3OTE0Cittc2dpZCAiR290bzoiCittc2dzdHIgIkdvdG86IgorCisjOiBnaXRrOjc5MTYKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRDoiCisKKyM6IGdpdGs6NzkzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICIlcyDjgpLlkKvjgoAgU0hBMSBJRCDjga/opIfmlbDlrZjlnKjjgZfjgb7jgZkiCisKKyM6IGdpdGs6Nzk0MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAi44Oq44OT44K444On44OzICVzIOOBr+S4jeaYjuOBp+OBmSIKKworIzogZ2l0azo3OTUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlNIQTEgaWQgJXMg44Gv5LiN5piO44Gn44GZIgorCisjOiBnaXRrOjc5NTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAi44Oq44OT44K444On44OzICVzIOOBr+ePvuWcqOOBruODk+ODpeODvOOBq+OBr+OBguOCiuOBvuOBm+OCkyIKKworIzogZ2l0azo4MDk2Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIuWtkCIKKworIzogZ2l0azo4MTUzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIiVzIOODluODqeODs+ODgeOCkuOBk+OBk+OBq+ODquOCu+ODg+ODiOOBmeOCiyIKKworIzogZ2l0azo4MTU1Cittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIuWIh+OCiumbouOBleOCjOOBn0hFQUQ6IOODquOCu+ODg+ODiOOBp+OBjeOBvuOBm+OCkyIKKworIzogZ2l0azo4MjY0IGdpdGs6ODI3MAorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgIuOCs+ODn+ODg+ODiOODnuODvOOCuOOCkuOCueOCreODg+ODlzogIgorCisjOiBnaXRrOjgyNzkgZ2l0azo4Mjg0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICLjg5Hjg4Pjg4Hlj5blvpfjgqjjg6njg7w6IElEICIKKworIzogZ2l0azo4MjgwIGdpdGs6ODI4NQorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIOWBnOatolxuIgorCisjOiBnaXRrOjgyOTAgZ2l0azo4MjkzIGdpdGs6ODMwMSBnaXRrOjgzMTQgZ2l0azo4MzIzCittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAi44Kz44Of44OD44OIICIKKworIzogZ2l0azo4Mjk0Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIg44Gv5LiL6KiY44Gu44OR44OD44OB44Go5ZCM562JXG4iCisiICAgICAgICIKKworIzogZ2l0azo4MzAyCittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIOS4i+iomOOBi+OCieOBrmRpZmZcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjgzMDQKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisi44Kz44Of44OD44OI44GuZGlmZjpcbiIKKyJcbiIKKworIzogZ2l0azo4MzE1IGdpdGs6ODMyNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIg44Gr44GvICVzIOOBruWtkOOBjOOBguOCiuOBvuOBmSAtIOWBnOatolxuIgorCisjOiBnaXRrOjgzNDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAi44OV44Kh44Kk44Or44G444Gu44Kz44Of44OD44OI5pu444GN5Ye644GX44Ko44Op44O8OiAlcyIKKworIzogZ2l0azo4MzUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAi44Kz44Of44OD44OI44GuZGlmZuWun+ihjOOCqOODqeODvDogJXMiCisKKyM6IGdpdGs6ODM4MAorbXNnaWQgIlRvcCIKK21zZ3N0ciAiVG9wIgorCisjOiBnaXRrOjgzODEKK21zZ2lkICJGcm9tIgorbXNnc3RyICJGcm9tIgorCisjOiBnaXRrOjgzODYKK21zZ2lkICJUbyIKK21zZ3N0ciAiVG8iCisKKyM6IGdpdGs6ODQxMAorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICLjg5Hjg4Pjg4HnlJ/miJAiCisKKyM6IGdpdGs6ODQxMgorbXNnaWQgIkZyb206IgorbXNnc3RyICJGcm9tOiIKKworIzogZ2l0azo4NDIxCittc2dpZCAiVG86IgorbXNnc3RyICJUbzoiCisKKyM6IGdpdGs6ODQzMAorbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIumAhiIKKworIzogZ2l0azo4NDMyIGdpdGs6ODYxNworbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAi5Ye65Yqb44OV44Kh44Kk44OrOiIKKworIzogZ2l0azo4NDM4Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIueUn+aIkCIKKworIzogZ2l0azo4NDc2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICLjg5Hjg4Pjg4HnlJ/miJDjgqjjg6njg7w6IgorCisjOiBnaXRrOjg0OTkgZ2l0azo4NjA1IGdpdGs6ODY2MgorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjg1MDgKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIuOCv+OCsOWQjToiCisKKyM6IGdpdGs6ODUxMiBnaXRrOjg2NzEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIueUn+aIkCIKKworIzogZ2l0azo4NTI5Cittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICLjgr/jgrDjga7lkI3np7DjgYzmjIflrprjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyM6IGdpdGs6ODUzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIuOCv+OCsCBcIiVzXCIg44Gv5pei44Gr5a2Y5Zyo44GX44G+44GZIgorCisjOiBnaXRrOjg1MzkKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICLjgr/jgrDnlJ/miJDjgqjjg6njg7w6IgorCisjOiBnaXRrOjg2MTQKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAi44Kz44Oe44Oz44OJOiIKKworIzogZ2l0azo4NjIyCittc2dpZCAiV3JpdGUiCittc2dzdHIgIuabuOOBjeWHuuOBlyIKKworIzogZ2l0azo4NjQwCittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jmm7jjgY3lh7rjgZfjgqjjg6njg7w6IgorCisjOiBnaXRrOjg2NjcKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAi5ZCN5YmNOiIKKworIzogZ2l0azo4NjkwCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi5paw44GX44GE44OW44Op44Oz44OB44Gu5ZCN5YmN44KS5oyH5a6a44GX44Gm44GP44Gg44GV44GEIgorCisjOiBnaXRrOjg2OTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAi44OW44Op44Oz44OBICclcycg44Gv5pei44Gr5a2Y5Zyo44GX44G+44GZ44CC5LiK5pu444GN44GX44G+44GZ44GL77yfIgorCisjOiBnaXRrOjg3NjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorIuOCs+ODn+ODg+ODiCAlcyDjga/ml6Ljgavjg5bjg6njg7Pjg4EgJXMg44Gr5ZCr44G+44KM44Gm44GE44G+44GZIOKAlSDmnKzlvZPjgavjgZPjgozjgpLlho3pgannlKjjgZfjgb7jgZnjgYvvvJ8iCisKKyM6IGdpdGs6ODc2NgorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICLjg4Hjgqfjg6rjg7zjg5Tjg4Pjgq/kuK0iCisKKyM6IGdpdGs6ODc3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyLjg5XjgqHjgqTjg6sgJyVzJyDjga7jg63jg7zjgqvjg6vjgarlpInmm7Tjga7jgZ/jgoHjgavjg4Hjgqfjg6rjg7zjg5Tjg4Pjgq/jga/lpLHmlZfjgZfjgb7jgZfjgZ/jgIJcbiIKKyLjgYLjgarjgZ/jga7lpInmm7TjgasgY29tbWl0LCByZXNldCwgc3Rhc2gg44Gu44GE44Ga44KM44GL44KS6KGM44Gj44Gm44GL44KJ44KE44KK55u044GX44Gm44GP44Gg44GVIgorIuOBhOOAgiIKKworIzogZ2l0azo4NzgxCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisi44Oe44O844K444Gu6KGd56qB44Gr44KI44Gj44Gm44OB44Kn44Oq44O844OU44OD44Kv44Gv5aSx5pWX44GX44G+44GX44Gf44CCXG4iCisi44GT44Gu6Kej5rG644Gu44Gf44KB44GrIGdpdCBjaXRvb2wg44KS5a6f6KGM44GX44Gf44GE44Gn44GZ44GL77yfIgorCisjOiBnaXRrOjg3OTcKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAi5L2V44Gu5aSJ5pu044KC44Kz44Of44OD44OI44GV44KM44Gm44GE44G+44Gb44KTIgorCisjOiBnaXRrOjg4MjMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICLnorroqo3jgpLlj5bjgormtojjgZkiCisKKyM6IGdpdGs6ODgyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIuODluODqeODs+ODgSAlcyDjgpIgJXMg44Gr44Oq44K744OD44OI44GX44G+44GZ44GL77yfIgorCisjOiBnaXRrOjg4MjkKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiUmVzZXQg44K/44Kk44OXOiIKKworIzogZ2l0azo4ODMzCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIlNvZnQ6IOS9nOalreODhOODquODvOOCguOCpOODs+ODh+ODg+OCr+OCueOCguOBneOBruOBvuOBvuOBq+OBmeOCiyIKKworIzogZ2l0azo4ODM2Cittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICJNaXhlZDog5L2c5qWt44OE44Oq44O844KS44Gd44Gu44G+44G+44Gr44GX44Gm44CB44Kk44Oz44OH44OD44Kv44K544KS44Oq44K744OD44OIIgorCisjOiBnaXRrOjg4MzkKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkhhcmQ6IOS9nOalreODhOODquODvOOChOOCpOODs+ODh+ODg+OCr+OCueOCkuODquOCu+ODg+ODiFxuIgorIu+8iOOAjOWFqOOBpuOBruOAjeODreODvOOCq+ODq+OBquWkieabtOOCkuegtOajhO+8iSIKKworIzogZ2l0azo4ODU2Cittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLjg6rjgrvjg4Pjg4jkuK0iCisKKyM6IGdpdGs6ODkxMworbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAi44OB44Kn44OD44Kv44Ki44Km44OIIgorCisjOiBnaXRrOjg5NjYKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICLnj77lnKjjg4Hjgqfjg4Pjgq/jgqLjgqbjg4jjgZXjgozjgabjgYTjgovjg5bjg6njg7Pjg4HjgpLliYrpmaTjgZnjgovjgZPjgajjga/jgafjgY3jgb7jgZvjgpMiCisKKyM6IGdpdGs6ODk3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisi44OW44Op44Oz44OBICVzIOOBq+OBr+S7luOBruODluODqeODs+ODgeOBq+WtmOWcqOOBl+OBquOBhOOCs+ODn+ODg+ODiOOBjOOBguOCiuOBvuOBmeOAglxuIgorIuacrOW9k+OBq+ODluODqeODs+ODgSAlcyDjgpLliYrpmaTjgZfjgb7jgZnjgYvvvJ8iCisKKyM6IGdpdGs6OTAwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAi44K/44Kw44GoSEVBRDogJXMiCisKKyM6IGdpdGs6OTAxOAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAi44OV44Kj44Or44K/44O8IgorCisjOiBnaXRrOjkzMTMKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyLjgrPjg5/jg4Pjg4jmp4vpgKDmg4XloLHoqq3jgb/ovrzjgb/jgqjjg6njg7w7IOODluODqeODs+ODgeWPiuOBs+S4iuS9jS/kuIvkvY3jga7jgr/jgrDmg4XloLHjgYzkuI3lrozlhajjgafjgYLjgosiCisi44KI44GG44Gn44GZ44CCIgorCisjOiBnaXRrOjEwMjk5Cittc2dpZCAiVGFnIgorbXNnc3RyICLjgr/jgrAiCisKKyM6IGdpdGs6MTAyOTkKK21zZ2lkICJJZCIKK21zZ3N0ciAiSUQiCisKKyM6IGdpdGs6MTAzNDcKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiR2l0ayDjg5Xjgqnjg7Pjg4jpgbjmip4iCisKKyM6IGdpdGs6MTAzNjQKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjEwMzY3Cittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMDQ2MworbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIkdpdGsg6Kit5a6aIgorCisjOiBnaXRrOjEwNDY1Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jjg6rjgrnjg4jooajnpLrjgqrjg5fjgrfjg6fjg7MiCisKKyM6IGdpdGs6MTA0NjgKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIuacgOWkp+OCsOODqeODleW5he+8iOe3muOBruacrOaVsO+8iSIKKworIzogZ2l0azoxMDQ3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIuacgOWkp+OCsOODqeODleW5he+8iOODmuOCpOODs+OBq+WvvuOBmeOCi++8he+8iSIKKworIzogZ2l0azoxMDQ3NgorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAi44Ot44O844Kr44Or44Gq5aSJ5pu044KS6KGo56S6IgorCisjOiBnaXRrOjEwNDc5Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKK21zZ3N0ciAiU0hBMSDjga7oh6rli5Xpgbjmip4iCisKKyM6IGdpdGs6MTA0ODMKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiZGlmZuihqOekuuOCquODl+OCt+ODp+ODsyIKKworIzogZ2l0azoxMDQ4NQorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICLjgr/jg5bnqbrnmb3luYUiCisKKyM6IGdpdGs6MTA0ODgKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzIgorbXNnc3RyICLov5HjgY/jga7jgr/jgrDjgpLooajnpLrjgZnjgosiCisKKyM6IGdpdGs6MTA0OTEKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICLjg6rjg6Ljg7zjg4jjg6rjg5XjgqHjg6zjg7PjgrnjgpLpmqDjgZkiCisKKyM6IGdpdGs6MTA0OTQKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgImRpZmYg44KS44Oq44K544OI44Gu44OR44K544Gr5Yi26ZmQIgorCisjOiBnaXRrOjEwNDk3Cittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIuODleOCoeOCpOODq+OBlOOBqOOBruOCqOODs+OCs+ODvOODh+OCo+ODs+OCsOOBruOCteODneODvOODiCIKKworIzogZ2l0azoxMDUwMyBnaXRrOjEwNTcyCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICLlpJbpg6hkaWZm44OE44O844OrIgorCisjOiBnaXRrOjEwNTA1Cittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICLpgbjmip4uLi4iCisKKyM6IGdpdGs6MTA1MTAKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAi6ImyOiDjg5zjgr/jg7PjgpLmirzjgZfjgabpgbjmip4iCisKKyM6IGdpdGs6MTA1MTMKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIuOCpOODs+OCv+ODvOODleOCp+OCpOOCuSIKKworIzogZ2l0azoxMDUxNAorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAi44Kk44Oz44K/44O844OV44Kn44Kk44K5IgorCisjOiBnaXRrOjEwNTE3Cittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAi6IOM5pmvIgorCisjOiBnaXRrOjEwNTE4IGdpdGs6MTA1NDgKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICLog4zmma8iCisKKyM6IGdpdGs6MTA1MjEKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICLliY3mma8iCisKKyM6IGdpdGs6MTA1MjIKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICLliY3mma8iCisKKyM6IGdpdGs6MTA1MjUKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IOaXp+ODkOODvOOCuOODp+ODsyIKKworIzogZ2l0azoxMDUyNgorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZmIOaXp+ODkOODvOOCuOODp+ODsyIKKworIzogZ2l0azoxMDUzMAorbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiRGlmZjog5paw44OQ44O844K444On44OzIgorCisjOiBnaXRrOjEwNTMxCittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgImRpZmYg5paw44OQ44O844K444On44OzIgorCisjOiBnaXRrOjEwNTM1Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmY6IGh1bmvjg5jjg4Pjg4AiCisKKyM6IGdpdGs6MTA1MzcKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZmIGh1bmvjg5jjg4Pjg4AiCisKKyM6IGdpdGs6MTA1NDEKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAi44Oe44O844Kv6KGM44Gu6IOM5pmvIgorCisjOiBnaXRrOjEwNTQzCittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAi44Oe44O844Kv6KGM44Gu6IOM5pmvIgorCisjOiBnaXRrOjEwNTQ3Cittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICLpgbjmip7jga7og4zmma8iCisKKyM6IGdpdGs6MTA1NTEKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICLjg5Xjgqnjg7Pjg4g6IOODnOOCv+ODs+OCkuaKvOOBl+OBpumBuOaKniIKKworIzogZ2l0azoxMDU1MworbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAi5Li744OV44Kp44Oz44OIIgorCisjOiBnaXRrOjEwNTU0Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIkRpZmbooajnpLrnlKjjg5Xjgqnjg7Pjg4giCisKKyM6IGdpdGs6MTA1NTUKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJVSeeUqOODleOCqeODs+ODiCIKKworIzogZ2l0azoxMDU4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6IOOAjCVz44CNIOOBruiJsuOCkumBuOaKniIKKworIzogZ2l0azoxMTE2OAorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIuOBk+OBk+OBq+OBr2dpdOODquODneOCuOODiOODquOBjOOBguOCiuOBvuOBm+OCk+OAgiIKKworIzogZ2l0azoxMTE3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCittc2dzdHIgImdpdOODh+OCo+ODrOOCr+ODiOODqiBcIiVzXCIg44KS6KaL44Gk44GR44KJ44KM44G+44Gb44KT44CCIgorCisjOiBnaXRrOjExMjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICLjgYLjgYTjgb7jgYTjgarlvJXmlbAgJyVzJzog44Oq44OT44K444On44Oz44Go44OV44Kh44Kk44Or5ZCN44Gu5Lih5pa544Gr6Kej6YeI44Gn44GN44G+44GZIgorCisjOiBnaXRrOjExMjMxCittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiZ2l0a+OBuOOBruS4jeato+OBquW8leaVsDoiCisKKyM6IGdpdGs6MTEzMTYKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIuOCs+ODnuODs+ODieihjCIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL3BvMm1zZy5zaCBiL2dpdGstZ2l0L3BvL3BvMm1zZy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjMyNDhlCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vcG8ybXNnLnNoCkBAIC0wLDAgKzEsMTMzIEBACisjIS9iaW4vc2gKKyMgVGNsIGlnbm9yZXMgdGhlIG5leHQgbGluZSAtKi0gdGNsIC0qLSBcCitleGVjIHRjbHNoICIkMCIgLS0gIiRAIgorCisjIFRoaXMgaXMgYSByZWFsbHkgc3R1cGlkIHByb2dyYW0sIHdoaWNoIHNlcnZlcyBhcyBhbiBhbHRlcm5hdGl2ZSB0bworIyBtc2dmbXQuICBJdCBfb25seV8gdHJhbnNsYXRlcyB0byBUY2wgbW9kZSwgZG9lcyBfbm90XyB2YWxpZGF0ZSB0aGUKKyMgaW5wdXQsIGFuZCBkb2VzIF9ub3RfIG91dHB1dCBhbnkgc3RhdGlzdGljcy4KKworcHJvYyB1MmEge3N9IHsKKwlzZXQgcmVzICIiCisJZm9yZWFjaCBpIFtzcGxpdCAkcyAiIl0geworCQlzY2FuICRpICVjIGMKKwkJaWYgeyRjPDEyOH0geworCQkJIyBlc2NhcGUgJ1snLCAnXCcgYW5kICddJworCQkJaWYgeyRjID09IDB4NWIgfHwgJGMgPT0gMHg1ZH0geworCQkJCWFwcGVuZCByZXMgIlxcIgorCQkJfQorCQkJYXBwZW5kIHJlcyAkaQorCQl9IGVsc2UgeworCQkJYXBwZW5kIHJlcyBcXHVbZm9ybWF0ICUwNC40eCAkY10KKwkJfQorCX0KKwlyZXR1cm4gJHJlcworfQorCitzZXQgb3V0cHV0X2RpcmVjdG9yeSAiLiIKK3NldCBsYW5nICJkdW1teSIKK3NldCBmaWxlcyBbbGlzdF0KK3NldCBzaG93X3N0YXRpc3RpY3MgMAorCisjIHBhcnNlIG9wdGlvbnMKK2ZvciB7c2V0IGkgMH0geyRpIDwgJGFyZ2N9IHtpbmNyIGl9IHsKKwlzZXQgYXJnIFtsaW5kZXggJGFyZ3YgJGldCisJaWYgeyRhcmcgPT0gIi0tc3RhdGlzdGljcyJ9IHsKKwkJaW5jciBzaG93X3N0YXRpc3RpY3MKKwkJY29udGludWUKKwl9CisJaWYgeyRhcmcgPT0gIi0tdGNsIn0geworCQkjIHdlIGtub3cKKwkJY29udGludWUKKwl9CisJaWYgeyRhcmcgPT0gIi1sIn0geworCQlpbmNyIGkKKwkJc2V0IGxhbmcgW2xpbmRleCAkYXJndiAkaV0KKwkJY29udGludWUKKwl9CisJaWYgeyRhcmcgPT0gIi1kIn0geworCQlpbmNyIGkKKwkJc2V0IHRtcCBbbGluZGV4ICRhcmd2ICRpXQorCQlyZWdzdWIgIlxbXi9cXSQiICR0bXAgIiYvIiBvdXRwdXRfZGlyZWN0b3J5CisJCWNvbnRpbnVlCisJfQorCWxhcHBlbmQgZmlsZXMgJGFyZworfQorCitwcm9jIGZsdXNoX21zZyB7fSB7CisJZ2xvYmFsIG1zZ2lkIG1zZ3N0ciBtb2RlIGxhbmcgb3V0IGZ1enp5CisJZ2xvYmFsIHRyYW5zbGF0ZWRfY291bnQgZnV6enlfY291bnQgbm90X3RyYW5zbGF0ZWRfY291bnQKKworCWlmIHshW2luZm8gZXhpc3RzIG1zZ2lkXSB8fCAkbW9kZSA9PSAiIn0geworCQlyZXR1cm4KKwl9CisJc2V0IG1vZGUgIiIKKwlpZiB7JGZ1enp5ID09IDF9IHsKKwkJaW5jciBmdXp6eV9jb3VudAorCQlzZXQgZnV6enkgMAorCQlyZXR1cm4KKwl9CisKKwlpZiB7JG1zZ2lkID09ICIifSB7CisJCXNldCBwcmVmaXggInNldCA6Om1zZ2NhdDo6aGVhZGVyIgorCX0gZWxzZSB7CisJCWlmIHskbXNnc3RyID09ICIifSB7CisJCQlpbmNyIG5vdF90cmFuc2xhdGVkX2NvdW50CisJCQlyZXR1cm4KKwkJfQorCQlzZXQgcHJlZml4ICI6Om1zZ2NhdDo6bWNzZXQgJGxhbmcgXCJbdTJhICRtc2dpZF1cIiIKKwkJaW5jciB0cmFuc2xhdGVkX2NvdW50CisJfQorCisJcHV0cyAkb3V0ICIkcHJlZml4IFwiW3UyYSAkbXNnc3RyXVwiIgorfQorCitzZXQgZnV6enkgMAorc2V0IHRyYW5zbGF0ZWRfY291bnQgMAorc2V0IGZ1enp5X2NvdW50IDAKK3NldCBub3RfdHJhbnNsYXRlZF9jb3VudCAwCitmb3JlYWNoIGZpbGUgJGZpbGVzIHsKKwlyZWdzdWIgIl4uKi9cKFxbXi9cXSpcKVwucG8kIiAkZmlsZSAiJG91dHB1dF9kaXJlY3RvcnlcXDEubXNnIiBvdXRmaWxlCisJc2V0IGluIFtvcGVuICRmaWxlICJyIl0KKwlmY29uZmlndXJlICRpbiAtZW5jb2RpbmcgdXRmLTgKKwlzZXQgb3V0IFtvcGVuICRvdXRmaWxlICJ3Il0KKworCXNldCBtb2RlICIiCisJd2hpbGUge1tnZXRzICRpbiBsaW5lXSA+PSAwfSB7CisJCWlmIHtbcmVnZXhwICJeIyIgJGxpbmVdfSB7CisJCQlpZiB7W3JlZ2V4cCAiLCBmdXp6eSIgJGxpbmVdfSB7CisJCQkJc2V0IGZ1enp5IDEKKwkJCX0gZWxzZSB7CisJCQkJZmx1c2hfbXNnCisJCQl9CisJCQljb250aW51ZQorCQl9IGVsc2VpZiB7W3JlZ2V4cCAiXm1zZ2lkIFwiKC4qKVwiJCIgJGxpbmUgZHVtbXkgbWF0Y2hdfSB7CisJCQlmbHVzaF9tc2cKKwkJCXNldCBtc2dpZCAkbWF0Y2gKKwkJCXNldCBtb2RlICJtc2dpZCIKKwkJfSBlbHNlaWYge1tyZWdleHAgIl5tc2dzdHIgXCIoLiopXCIkIiAkbGluZSBkdW1teSBtYXRjaF19IHsKKwkJCXNldCBtc2dzdHIgJG1hdGNoCisJCQlzZXQgbW9kZSAibXNnc3RyIgorCQl9IGVsc2VpZiB7JGxpbmUgPT0gIiJ9IHsKKwkJCWZsdXNoX21zZworCQl9IGVsc2VpZiB7W3JlZ2V4cCAiXlwiKC4qKVwiJCIgJGxpbmUgZHVtbXkgbWF0Y2hdfSB7CisJCQlpZiB7JG1vZGUgPT0gIm1zZ2lkIn0geworCQkJCWFwcGVuZCBtc2dpZCAkbWF0Y2gKKwkJCX0gZWxzZWlmIHskbW9kZSA9PSAibXNnc3RyIn0geworCQkJCWFwcGVuZCBtc2dzdHIgJG1hdGNoCisJCQl9IGVsc2UgeworCQkJCXB1dHMgc3RkZXJyICJJIGRvIG5vdCBrbm93IHdoYXQgdG8gZG86ICRtYXRjaCIKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXB1dHMgc3RkZXJyICJDYW5ub3QgaGFuZGxlICRsaW5lIgorCQl9CisJfQorCWZsdXNoX21zZworCWNsb3NlICRpbgorCWNsb3NlICRvdXQKK30KKworaWYgeyRzaG93X3N0YXRpc3RpY3N9IHsKKwlwdXRzIFtjb25jYXQgIiR0cmFuc2xhdGVkX2NvdW50IHRyYW5zbGF0ZWQgbWVzc2FnZXMsICIgXAorCQkiJGZ1enp5X2NvdW50IGZ1enp5IG9uZXMsICIgXAorCQkiJG5vdF90cmFuc2xhdGVkX2NvdW50IHVudHJhbnNsYXRlZCBvbmVzLiJdCit9CmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9wdF9ici5wbyBiL2dpdGstZ2l0L3BvL3B0X2JyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODZlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9wdF9ici5wbwpAQCAtMCwwICsxLDEyNzcgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBCcmF6aWxpYW4gUG9ydHVndWVzZS4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IFBhdWwgTWFja2VycmFzLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMKKyMgQWxleGFuZHJlIEVyd2luIEl0dG5lciA8YWxleGFuZHJlQGl0dG5lci5jb20uYnI+LCAyMDEwLgorIworIywgZnV6enkKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGtcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDEtMjYgMTU6NDctMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMTItMDYgMjM6MzktMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQWxleGFuZHJlIEVyd2luIEl0dG5lciA8YWxleGFuZHJlQGl0dG5lci5jb20uYnI+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQnJhemlsaWFuIFBvcnR1Z3Vlc2UgPD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0azoxMTUKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBvYnRlciBhIGxpc3RhIGRvcyBhcnF1aXZvcyBuw6NvIG1lc2NsYWRvczoiCisKKyM6IGdpdGs6Mjc0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJFcnJvIGFvIGludGVycHJldGFyIHJldmlzw7VlczoiCisKKyM6IGdpdGs6MzMwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRXJybyBhbyBleGVjdXRhciBvIGNvbWFuZG8tLWFyZ3NjbWQ6IgorCisjOiBnaXRrOjM0MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIk5lbmh1bSBhcnF1aXZvIGZvaSBzZWxlY2lvbmFkbzogLS1tZXJnZSBlc3BlY2lmaWNhZG8gbWFzIG7Do28gaMOhIGFycXVpdm9zIG7Do28tIgorIm1lc2NsYWRvcy4iCisKKyM6IGdpdGs6MzQ2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyJOZW5odW0gYXJxdWl2byBmb2kgc2VsZWNpb25hZG86IC0tbWVyZ2UgZXNwZWNpZmljYWRvIG1hcyBuw6NvIGjDoSBhcnF1aXZvcyBuw6NvLSIKKyJtZXNjbGFkb3MgZGVudHJvIGRvcyBsaW1pdGVzLiIKKworIzogZ2l0azozNjggZ2l0azo1MTYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkVycm8gYW8gZXhlY3V0YXIgZ2l0IGxvZzoiCisKKyM6IGdpdGs6Mzg2IGdpdGs6NTMyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGVuZG8iCisKKyM6IGdpdGs6NDQ2IGdpdGs6NDI3MQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiTGVuZG8gcmV2aXPDtWVzLi4uIgorCisjOiBnaXRrOjQ0OSBnaXRrOjE1ODAgZ2l0azo0Mjc0Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiTmVuaHVtYSByZXZpc8OjbyBmb2kgc2VsZWNpb25hZGEiCisKKyM6IGdpdGs6MTQ1NgorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGludGVycHJldGFyIGEgc2HDrWRhIGRvIFwiZ2l0IGxvZ1wiOiIKKworIzogZ2l0azoxNjc2Cittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiTsOjbyBow6EgaW5mb3JtYcOnw7VlcyBkaXNwb27DrXZlaXMgc29icmUgYSByZXZpc8OjbyIKKworIzogZ2l0azoxODE4Cittc2dpZCAibWMiCittc2dzdHIgIm1jIgorCisjOiBnaXRrOjE4NTMgZ2l0azo0MDY0IGdpdGs6OTA2NyBnaXRrOjEwNjA3IGdpdGs6MTA4MTcKK21zZ2lkICJPSyIKK21zZ3N0ciAiT2siCisKKyM6IGdpdGs6MTg1NSBnaXRrOjQwNjYgZ2l0azo4NjU3IGdpdGs6ODczNiBnaXRrOjg4NTEgZ2l0azo4OTAwIGdpdGs6OTA2OQorIzogZ2l0azoxMDYwOCBnaXRrOjEwODE4Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJDYW5jZWxhciIKKworIzogZ2l0azoxOTgwCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJBdHVhbGl6YXIiCisKKyM6IGdpdGs6MTk4MQorbXNnaWQgIlJlbG9hZCIKK21zZ3N0ciAiUmVjYXJyZWdhciIKKworIzogZ2l0azoxOTgyCittc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCittc2dzdHIgIkxlciBhcyByZWZlcsOqbmNpYXMgbm92YW1lbnRlIgorCisjOiBnaXRrOjE5ODMKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIkxpc3RhciByZWZlcsOqbmNpYXMiCisKKyM6IGdpdGs6MTk4NQorbXNnaWQgIlN0YXJ0IGdpdCBndWkiCittc2dzdHIgIkluaWNpYXIgR2l0IEdVSSIKKworIzogZ2l0azoxOTg3Cittc2dpZCAiUXVpdCIKK21zZ3N0ciAiU2FpciIKKworIzogZ2l0azoxOTc5Cittc2dpZCAiRmlsZSIKK21zZ3N0ciAiQXJxdWl2byIKKworIzogZ2l0azoxOTkxCittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcsOqbmNpYXMiCisKKyM6IGdpdGs6MTk5MAorbXNnaWQgIkVkaXQiCittc2dzdHIgIkVkaXRhciIKKworIzogZ2l0azoxOTk1Cittc2dpZCAiTmV3IHZpZXcuLi4iCittc2dzdHIgIk5vdmEgdmlzdGEuLi4iCisKKyM6IGdpdGs6MTk5NgorbXNnaWQgIkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiRWRpdGFyIHZpc3RhLi4uIgorCisjOiBnaXRrOjE5OTcKK21zZ2lkICJEZWxldGUgdmlldyIKK21zZ3N0ciAiQXBhZ2FyIHZpc3RhIgorCisjOiBnaXRrOjE5OTkKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgIlRvZG9zIG9zIGFycXVpdm9zIgorCisjOiBnaXRrOjE5OTQgZ2l0azozODE3Cittc2dpZCAiVmlldyIKK21zZ3N0ciAiRXhpYmlyIgorCisjOiBnaXRrOjIwMDQgZ2l0azoyMDE0IGdpdGs6Mjc4NworbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgIlNvYnJlIG8gZ2l0ayIKKworIzogZ2l0azoyMDA1IGdpdGs6MjAxOQorbXNnaWQgIktleSBiaW5kaW5ncyIKK21zZ3N0ciAiQXRhbGhvcyBkZSB0ZWNsYWRvIgorCisjOiBnaXRrOjIwMDMgZ2l0azoyMDE4Cittc2dpZCAiSGVscCIKK21zZ3N0ciAiQWp1ZGEiCisKKyM6IGdpdGs6MjA5NiBnaXRrOjgxMzIKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRDoiCisKKyM6IGdpdGs6MjEyNworbXNnaWQgIlJvdyIKK21zZ3N0ciAiTGluaGEiCisKKyM6IGdpdGs6MjE2NQorbXNnaWQgIkZpbmQiCittc2dzdHIgIkVuY29udHJhciIKKworIzogZ2l0azoyMTY2Cittc2dpZCAibmV4dCIKK21zZ3N0ciAiUHLDs3hpbW8iCisKKyM6IGdpdGs6MjE2NworbXNnaWQgInByZXYiCittc2dzdHIgIkFudGVyaW9yIgorCisjOiBnaXRrOjIxNjgKK21zZ2lkICJjb21taXQiCittc2dzdHIgIlJldmlzw6NvIgorCisjOiBnaXRrOjIxNzEgZ2l0azoyMTczIGdpdGs6NDQzMiBnaXRrOjQ0NTUgZ2l0azo0NDc5IGdpdGs6NjQyMCBnaXRrOjY0OTIKKyM6IGdpdGs6NjU3NgorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJjb250ZW5kbzoiCisKKyM6IGdpdGs6MjE3NCBnaXRrOjMyOTggZ2l0azozMzAzIGdpdGs6NDUwNworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAiZW52b2x2ZW5kbyBvcyBjYW1pbmhvczoiCisKKyM6IGdpdGs6MjE3NSBnaXRrOjQ1MTIKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAiQWRpY2lvbmFuZG8vcmVtb3ZlbmRvIHRleHRvOiIKKworIzogZ2l0azoyMTg0IGdpdGs6MjE4NgorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJFeGF0YW1lbnRlIgorCisjOiBnaXRrOjIxODYgZ2l0azo0NTg3IGdpdGs6NjM4OAorbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIklnbm9yYXIgbWFpw7pzY3VsYXMvbWluw7pzY3VsYXMiCisKKyM6IGdpdGs6MjE4NiBnaXRrOjQ0ODEgZ2l0azo0NTg1IGdpdGs6NjM4NAorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiRXhwcmVzc8OjbyByZWd1bGFyIgorCisjOiBnaXRrOjIxODggZ2l0azoyMTg5IGdpdGs6NDYwNiBnaXRrOjQ2MzYgZ2l0azo0NjQzIGdpdGs6NjUxMiBnaXRrOjY1ODAKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJUb2RvcyBvcyBjYW1wb3MiCisKKyM6IGdpdGs6MjE4OSBnaXRrOjQ2MDQgZ2l0azo0NjM2IGdpdGs6NjQ1MQorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICJBc3N1bnRvIgorCisjOiBnaXRrOjIxOTAgZ2l0azo0NjA0IGdpdGs6NjQ1MSBnaXRrOjY1ODAgZ2l0azo3MDEzCittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIkRlc2NyacOnw6NvIGRhIHJldmlzw6NvIgorCisjOiBnaXRrOjIxOTAgZ2l0azo0NjA0IGdpdGs6NDYwOCBnaXRrOjQ2NDMgZ2l0azo2NDUxIGdpdGs6Njk0OCBnaXRrOjgzMDcKKyM6IGdpdGs6ODMyMgorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiQXV0b3IiCisKKyM6IGdpdGs6MjE5MCBnaXRrOjQ2MDQgZ2l0azo2NDUxIGdpdGs6Njk1MAorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiUmV2aXNvciIKKworIzogZ2l0azoyMjIxCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJCdXNjYXIiCisKKyM6IGdpdGs6MjIyOQorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmVyZW7Dp2FzIgorCisjOiBnaXRrOjIyMzEKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc8OjbyBhbnRpZ2EiCisKKyM6IGdpdGs6MjIzMworbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJWZXJzw6NvIG5vdmEiCisKKyM6IGdpdGs6MjIzNQorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIk7Dum1lcm8gZGUgbGluaGFzIGRlIGNvbnRleHRvIgorCisjOiBnaXRrOjIyNDUKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJJZ25vcmFyIG11ZGFuw6dhcyBkZSBjYWl4YSIKKworIzogZ2l0azoyMzA0Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIkRpZmVyZW7Dp2FzIgorCisjOiBnaXRrOjIzMDYKK21zZ2lkICJUcmVlIgorbXNnc3RyICLDgXJ2b3JlIgorCisjOiBnaXRrOjI0NjMgZ2l0azoyNDgwCittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJDb21wYXJhciBlc3RhIHJldmlzw6NvIGNvbSBhIHNlbGVjaW9uYWRhIgorCisjOiBnaXRrOjI0NjQgZ2l0azoyNDgxCittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJDb21wYXJhciBhIHJldmlzw6NvIHNlbGVjaW9uYWRhIGNvbSBlc3RhIgorCisjOiBnaXRrOjI0NjUgZ2l0azoyNDgyCittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiQ3JpYXIgcGF0Y2giCisKKyM6IGdpdGs6MjQ2NiBnaXRrOjg3MTUKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJDcmlhciBldGlxdWV0YSIKKworIzogZ2l0azoyNDY3IGdpdGs6ODgzMQorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJTYWx2YXIgcmV2aXPDo28gcGFyYSB1bSBhcnF1aXZvIgorCisjOiBnaXRrOjI0NjggZ2l0azo4ODg4Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIkNyaWFyIG5vdm8gcmFtbyIKKworIzogZ2l0azoyNDY5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIkZhemVyIGNoZXJyeS1waWNrIGRlc3RhIHJldmlzw6NvIgorCisjOiBnaXRrOjI0NzAKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSZWRlZmluaXIgSEVBRCBwYXJhIGPDoSIKKworIzogZ2l0azoyNDcxCittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiTWFyY2FyIGVzdGEgcmV2aXPDo28iCisKKyM6IGdpdGs6MjQ3MgorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJWb2x0YXIgw6AgbWFyY2EiCisKKyM6IGdpdGs6MjQ3MworbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICJFbmNvbnRyYXIgZGVzY2VuZGVudGUgZSBtYXJjYXIiCisKKyM6IGdpdGs6MjQ3NAorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJDb21wYXJhciBjb20gYSByZXZpc8OjbyBtYXJjYWRhIgorCisjOiBnaXRrOjI0ODgKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkVmZXR1YXIgY2hlY2tvdXQgZGVzdGUgcmFtbyIKKworIzogZ2l0azoyNDg5Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICJFeGNsdWlyIGVzdGUgcmFtbyIKKworIzogZ2l0azoyNDk2Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICJNYXJjYXIgZXN0ZSB0YW1iw6ltIgorCisjOiBnaXRrOjI0OTcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJNYXJjYXIgYXBlbmFzIGVzdGUiCisKKyM6IGdpdGs6MjQ5OAorbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIkRpZmYgZXh0ZXJubyIKKworIzogZ2l0azoyNDk5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQW5vdGFyIHJldmlzw6NvIGFudGVyaW9yIgorCisjOiBnaXRrOjI1MDYKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIkV4aWJpciBvcmlnZW0gZGVzdGEgbGluaGEiCisKKyM6IGdpdGs6MjUwNworbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRXhlY3V0YXIgJ2dpdCBibGFtZScgbmVzdGEgbGluaGEiCisKKyM6IGdpdGs6Mjc4OQorbXNnaWQgIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiXG4iCisiR2l0ayAtIHVtIHZpc3VhbGl6YWRvciBkZSByZXZpc8O1ZXMgcGFyYSBvIGdpdCBcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqk5IDIwMDUtMjAxMCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzbyBlIGRpc3RyaWJ1acOnw6NvIHNlZ3VuZG8gb3MgdGVybW9zIGRhIExpY2Vuw6dhIFDDumJsaWNhIEdlcmFsIEdOVSIKKworIzogZ2l0azoyNzk3IGdpdGs6Mjg2MiBnaXRrOjkyNTMKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiRmVjaGFyIgorCisjOiBnaXRrOjI4MTgKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiQXRhbGhvcyBkZSB0ZWNsYWRvIgorCisjOiBnaXRrOjI4MjEKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkF0YWxob3MgZGUgdGVjbGFkbzoiCisKKyM6IGdpdGs6MjgyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0U2FpciIKKworIzogZ2l0azoyODI0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdEZlY2hhciBqYW5lbGEiCisKKyM6IGdpdGs6MjgyNQorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdElyIHBhcmEgYSBwcmltZWlyYSByZXZpc8OjbyIKKworIzogZ2l0azoyODI2Cittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0SXIgcGFyYSBhIMO6bHRpbWEgcmV2aXPDo28iCisKKyM6IGdpdGs6MjgyNworbXNnaWQgIjxVcD4sIHAsIGlcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwPiwgcCwgaVx0SXIgcGFyYSB1bWEgcmV2aXPDo28gYWNpbWEiCisKKyM6IGdpdGs6MjgyOAorbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwga1x0SXIgcGFyYSB1bWEgcmV2aXPDo28gYWJhaXhvIgorCisjOiBnaXRrOjI4MjkKK21zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGVmdD4sIHosIGpcdFZvbHRhciBubyBoaXN0w7NyaWNvIgorCisjOiBnaXRrOjI4MzAKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJpZ2h0PiwgeCwgbFx0QXZhbsOnYXIgbm8gaGlzdMOzcmljbyIKKworIzogZ2l0azoyODMxCittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlVXA+XHRTdWJpciB1bWEgcMOhZ2luYSBuYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MjgzMgorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx0RGVzY2VyIHVtYSBww6FnaW5hIG5hIGxpc3RhIGRlIHJldmlzw7VlcyIKKworIzogZ2l0azoyODMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdFJvbGFyIHBhcmEgbyBpbsOtY2lvIGRhIGxpc3RhIGRlIHJldmlzw7VlcyIKKworIzogZ2l0azoyODM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHRSb2xhciBwYXJhIG8gZmluYWwgZGEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBnaXRrOjI4MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcD5cdFJvbGFyIHVtYSBsaW5oYSBhY2ltYSBuYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MjgzNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx0Um9sYXIgdW1hIGxpbmhhIGFiYWl4byBuYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MjgzNworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHRSb2xhciB1bWEgcMOhZ2luYSBhY2ltYSBuYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MjgzOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZURvd24+XHRSb2xhciB1bWEgcMOhZ2luYSBhYmFpeG8gbmEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBnaXRrOjI4MzkKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1VcD5cdFByb2N1cmFyIHByw7N4aW1hIChyZXZpc8O1ZXMgbWFzIHJlY2VudGVzKSIKKworIzogZ2l0azoyODQwCittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1Eb3duPlx0UHJvY3VyYXIgYW50ZXJpb3IgKHJldmlzw7VlcyBtYWlzIGFudGlnYXMpIgorCisjOiBnaXRrOjI4NDEKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPERlbGV0ZT4sIGJcdFJvbGEgYWx0ZXJhw6fDtWVzIHVtYSBww6FnaW5hIGFjaW1hIgorCisjOiBnaXRrOjI4NDIKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdFJvbGFyIGFsdGVyYcOnw7VlcyB1bWEgcMOhZ2luYSBhYmFpeG8iCisKKyM6IGdpdGs6Mjg0MworbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8U3BhY2U+XHRcdFJvbGFyIGFsdGVyYcOnw7VlcyB1bWEgcMOhZ2luYSBhYmFpeG8iCisKKyM6IGdpdGs6Mjg0NAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRSb2xhciBhbHRlcmHDp8O1ZXMgMTggbGluaGFzIGFjaW1hIgorCisjOiBnaXRrOjI4NDUKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHRSb2xhciBhbHRlcmHDp8O1ZXMgMTggbGluaGFzIGFiYWl4byIKKworIzogZ2l0azoyODQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRQcm9jdXJhciIKKworIzogZ2l0azoyODQ3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdElyIHBhcmEgYSBwcsOzeGltYSBvY29ycsOqbmNpYSIKKworIzogZ2l0azoyODQ4Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdElyIHBhcmEgYSBwcsOzeGltYSBvY29ycsOqbmNpYSIKKworIzogZ2l0azoyODQ5Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRQb3IgZm9jbyBuYSBjYWl4YSBkZSBidXNjYSIKKworIzogZ2l0azoyODUwCittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdElyIHBhcmEgYSBvY29ycsOqbmNpYSBhbnRlcmlvciIKKworIzogZ2l0azoyODUxCittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRSb2xhciBhbHRlcmHDp8O1ZXMgcGFyYSBvIHByw7N4aW1vIGFycXVpdm8iCisKKyM6IGdpdGs6Mjg1MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdFByb2N1cmFyIGEgcHLDs3hpbWEgb2NvcnLDqm5jaWEgbmEgbGlzdGEgZGUgYWx0ZXJhw6fDtWVzIgorCisjOiBnaXRrOjI4NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0UHJvY3VyYXIgb2NvcnLDqm5jaWEgYW50ZXJpb3IgbmEgbGlzdGEgZGUgYWx0ZXJhw6fDtWVzIgorCisjOiBnaXRrOjI4NTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx0QXVtZW50YXIgdGFtYW5obyBkYSBmb250ZSIKKworIzogZ2l0azoyODU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx0QXVtZW50YXIgdGFtYW5obyBkYSBmb250ZSIKKworIzogZ2l0azoyODU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdFJlZHV6aXIgdGFtYW5obyBkYSBmb250ZSIKKworIzogZ2l0azoyODU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHRSZWR1emlyIHRhbWFuaG8gZGEgZm9udGUiCisKKyM6IGdpdGs6Mjg1OAorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEF0dWFsaXphciIKKworIzogZ2l0azozMzEzIGdpdGs6MzMyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJFcnJvIGFvIGNyaWFyIG8gZGlyZXTDs3JpbyB0ZW1wb3LDoXJpbyAlczoiCisKKyM6IGdpdGs6MzMzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJFcnJvIGFvIGxlciBcIiVzXCIgZGUgJXM6IgorCisjOiBnaXRrOjMzOTgKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgIk8gY29tYW5kbyBmYWxob3U6IgorCisjOiBnaXRrOjM1NDcKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiUmV2aXPDo28gbsOjbyBlbmNvbnRyYWRhIgorCisjOiBnaXRrOjM1NjEKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgIkNvbWFuZG8gJ2dpdCBndWkgYmxhbWUnIGZhbGhvdToiCisKKyM6IGdpdGs6MzU5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIkltcG9zc8OtdmVsIGxlciBtZXJnZSBoZWFkOiAlcyIKKworIzogZ2l0azozNjAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkVycm8gYW8gbGVyIG8gw61uZGljZTogJXMiCisKKyM6IGdpdGs6MzYyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBpbmNpYXIgbyAnZ2l0IGJsYW1lJzogJXMiCisKKyM6IGdpdGs6MzYyOCBnaXRrOjY0MTkKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIlByb2N1cmFuZG8iCisKKyM6IGdpdGs6MzY2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiRXJybyBhbyBleGVjdXRhciAnZ2l0IGJsYW1lJzogJXMiCisKKyM6IGdpdGs6MzY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIkVzdGEgbGluaGEgdmVtIGRhIHJldmlzw6NvICVzLCBxdWUgbsOjbyBlc3TDoSBuZXN0YSB2aXN0YSIKKworIzogZ2l0azozNzAyCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiRXJybyBkbyB2aXN1YWxpemFkb3IgZGUgYWx0ZXJhw6fDtWVzIGV4dGVybm86IgorCisjOiBnaXRrOjM4MjAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRGVmaW5pciB2aXN0YSIKKworIzogZ2l0azozODI0Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJMZW1icmFyIGVzdGEgdmlzdGEiCisKKyM6IGdpdGs6MzgyNQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlJlZmVyw6puY2lhcyAoc2VwYXJhciBhIGxpc3RhIGNvbSB1bSBlc3Bhw6dvKToiCisKKyM6IGdpdGs6MzgyNgorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIlJhbW9zICYgZXRpcXVldGFzOiIKKworIzogZ2l0azozODI3Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIlRvZGFzIGFzIHJlZmVyw6puY2lhcyIKKworIzogZ2l0azozODI4Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIlRvZG9zIG9zIHJhbW9zIGxvY2FpcyIKKworIzogZ2l0azozODI5Cittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIlRvZGFzIGFzIGV0aXF1ZXRhcyIKKworIzogZ2l0azozODMwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiVG9kb3Mgb3MgcmFtb3MgZGUgcmFzdHJlaW8iCisKKyM6IGdpdGs6MzgzMQorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIkluZm9ybWHDp8O1ZXMgZGEgcmV2aXPDo28gKGV4cHJlc3PDtWVzIHJlZ3VsYXJlcyk6IgorCisjOiBnaXRrOjM4MzIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcjoiCisKKyM6IGdpdGs6MzgzMworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIlJldmlzb3I6IgorCisjOiBnaXRrOjM4MzQKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkRlc2NyacOnw6NvIGRhIHJldmlzw6NvOiIKKworIzogZ2l0azozODM1Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIkNvaW5jaWRpciB0b2RvcyBvcyBjcml0w6lyaW9zIGRlIGluZm9ybWHDp8O1ZXMgZGEgcmV2aXPDo28iCisKKyM6IGdpdGs6MzgzNgorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICJNdWRhbsOnYXMgcGFyYSBvcyBhcnF1aXZvczoiCisKKyM6IGdpdGs6MzgzNworbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAiVGV4dG8gZml4byIKKworIzogZ2l0azozODM4Cittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICJFeHByZXNzw6NvIHJlZ3VsYXIiCisKKyM6IGdpdGs6MzgzOQorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJUZXh0byBkZSBidXNjYSIKKworIzogZ2l0azozODQwCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisiRGF0YXMgZGUgcmV2aXPDo28gKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKKworIzogZ2l0azozODQxCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJEZXNkZToiCisKKyM6IGdpdGs6Mzg0MgorbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiQXTDqToiCisKKyM6IGdpdGs6Mzg0MworbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJMaW1pdGFyIGUvb3UgaWdub3JhciB1bSBuw7ptZXJvIGRlIHJldmlzw7VlcyAoaW50ZWlybyBwb3NpdGl2byk6IgorCisjOiBnaXRrOjM4NDQKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIk7Dum1lcm8gcGFyYSBtb3N0cmFyOiIKKworIzogZ2l0azozODQ1Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICJOw7ptZXJvIHBhcmEgaWdub3JhcjoiCisKKyM6IGdpdGs6Mzg0NgorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIk9ww6fDtWVzIGRpdmVyc2FzOiIKKworIzogZ2l0azozODQ3Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJPcmRlbmFyIGVzdHJpdGFtZW50ZSBwZWxhIGRhdGEiCisKKyM6IGdpdGs6Mzg0OAorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICJNYXJjYXIgb3MgZG9pcyBsYWRvcyBkbyByYW1vIgorCisjOiBnaXRrOjM4NDkKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIkxpbWl0YXIgYW8gcHJpbWVpcm8gYW50ZWNlc3NvciIKKworIzogZ2l0azozODUwCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkhpc3TDs3JpY28gc2ltcGxpZmljYWRvIgorCisjOiBnaXRrOjM4NTEKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiQXJndW1lbnRvcyBhZGljaW9uYWlzIHBhcmEgbyAnZ2l0IGxvZyc6IgorCisjOiBnaXRrOjM4NTIKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAiQXJxdWl2b3MgZSBkaXJldMOzcmlvcyBwYXJhIGluY2x1aXIsIHVtIHBvciBsaW5oYSIKKworIzogZ2l0azozODUzCittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIkNvbWFuZG8gcGFyYSBnZXJhciBtYWlzIHJldmlzw7VlcyBwYXJhIGluY2x1aXI6IgorCisjOiBnaXRrOjM5NzcKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IGVkaXRhciB2aXN0YSIKKworIzogZ2l0azozOTg1Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIGNyaXTDqXJpb3MgcGFyYSBzZWxlY2lvbmFyIHJldmlzw7VlcyIKKworIzogZ2l0azozOTkwCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJOb21lIGRhIHZpc3RhIgorCisjOiBnaXRrOjQwNjUKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICJBcGxpY2FyIChGNSkiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRXJybyBub3MgYXJndW1lbnRvcyBkZSBzZWxlw6fDo28gZGUgcmV2aXPDtWVzOiIKKworIzogZ2l0azo0MTU2IGdpdGs6NDIwOCBnaXRrOjQ2NTYgZ2l0azo0NjcwIGdpdGs6NTkzMSBnaXRrOjExNTUxIGdpdGs6MTE1NTIKK21zZ2lkICJOb25lIgorbXNnc3RyICJOZW5odW0iCisKKyM6IGdpdGs6NDYwNCBnaXRrOjY0NTEgZ2l0azo4MzA5IGdpdGs6ODMyNAorbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdGEiCisKKyM6IGdpdGs6NDYwNCBnaXRrOjY0NTEKK21zZ2lkICJDRGF0ZSIKK21zZ3N0ciAiRGF0YVIiCisKKyM6IGdpdGs6NDc1MyBnaXRrOjQ3NTgKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJEZXNjZW5kZW50ZSBkZSIKKworIzogZ2l0azo0NzU0Cittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIk7Do28gZGVzY2VuZGVudGUgZGUiCisKKyM6IGdpdGs6NDc2MSBnaXRrOjQ3NjYKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiQW50ZWNlc3NvciBkZSIKKworIzogZ2l0azo0NzYyCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJOw6NvIGFudGVjZXNzb3IgZGUiCisKKyM6IGdpdGs6NTA1MgorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiTXVkYW7Dp2FzIGxvY2FpcyBtYXJjYWRhcywgcG9yw6ltIG7Do28gc2FsdmFzIgorCisjOiBnaXRrOjUwODgKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTXVkYW7Dp2FzIGxvY2FpcyBuw6NvIG1hcmNhZGFzIgorCisjOiBnaXRrOjY3NjkKK21zZ2lkICJtYW55IgorbXNnc3RyICJtdWl0YXMiCisKKyM6IGdpdGs6Njk1MgorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJFdGlxdWV0YXM6IgorCisjOiBnaXRrOjY5NjkgZ2l0azo2OTc1IGdpdGs6ODMwMgorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiQW50ZWNlc3NvciIKKworIzogZ2l0azo2OTgwCittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkRlc2NlbmRlbnRlIgorCisjOiBnaXRrOjY5ODkKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlJhbW8iCisKKyM6IGdpdGs6Njk5MgorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIlNlZ3VlIgorCisjOiBnaXRrOjY5OTUKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiUHJlY2VkZSIKKworIzogZ2l0azo3NTMyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkVycm8gYW8gb2J0ZXIgZGlmZXJlbsOnYXM6ICVzIgorCisjOiBnaXRrOjgxMzAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiSXIgcGFyYToiCisKKyM6IGdpdGs6ODE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJPIGlkIFNIQTEgJXMgw6kgYW1iw61ndW8iCisKKyM6IGdpdGs6ODE1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiUmV2aXPDo28gJXMgZGVzY29uaGVjaWRhIgorCisjOiBnaXRrOjgxNjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiSWQgU0hBMSAlcyBkZXNjb25oZWNpZG8iCisKKyM6IGdpdGs6ODE3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJBIHJldmlzw6NvICVzIG7Do28gZXN0w6EgbmEgdmlzdGEgYXR1YWwiCisKKyM6IGdpdGs6ODMxMgorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJEZXNjZW5kZW50ZXMiCisKKyM6IGdpdGs6ODM3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSZWRlZmluaXIgcmFtbyAlcyBwYXJhIGVzdGUgcG9udG8iCisKKyM6IGdpdGs6ODM3MgorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICJEZXRhY2hlZCBoZWFkOiBpbXBvc3PDrXZlbCByZWRlZmluaXIiCisKKyM6IGdpdGs6ODQ4MSBnaXRrOjg0ODcKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICJTYWx0YW5kbyByZXZpc8OjbyBkZSBtZXNjbGFnZW0iCisKKyM6IGdpdGs6ODQ5NiBnaXRrOjg1MDEKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkVycm8gYW8gb2J0ZXIgcGF0Y2ggSUQgcGFyYSIKKworIzogZ2l0azo4NDk3IGdpdGs6ODUwMgorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIi0gcGFyYW5kb1xuIgorCisjOiBnaXRrOjg1MDcgZ2l0azo4NTEwIGdpdGs6ODUxOCBnaXRrOjg1MzIgZ2l0azo4NTQxCittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAiUmV2aXPDo28iCisKKyM6IGdpdGs6ODUxMQorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiw6kgbyBtZXNtbyBwYXRjaCBxdWVcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjg1MTkKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgImRpZmVyZSBkZSIKKworIzogZ2l0azo4NTIxCittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRpZmVyZW7Dp2EgZGUgcmV2aXPDtWVzOlxuIgorIlxuIgorCisjOiBnaXRrOjg1MzMgZ2l0azo4NTQyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgInBvc3N1aSAlcyBkZXNjZW5kZW50ZXMgLSBwYXJhbmRvXG4iCisKKyM6IGdpdGs6ODU2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICJFcnJvIGFvIHNhbHZhciByZXZpc8OjbyBwYXJhIG8gYXJxdWl2bzogJXMiCisKKyM6IGdpdGs6ODU2NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkVycm8gYW8gY29tcGFyYXIgcmV2aXPDtWVzOiAlcyIKKworIzogZ2l0azo4NTk4Cittc2dpZCAiVG9wIgorbXNnc3RyICJJbsOtY2lvIgorCisjOiBnaXRrOjg1OTkKK21zZ2lkICJGcm9tIgorbXNnc3RyICJEZSIKKworIzogZ2l0azo4NjA0Cittc2dpZCAiVG8iCittc2dzdHIgIlBhcmEiCisKKyM6IGdpdGs6ODYyOAorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJHZXJhciBwYXRjaCIKKworIzogZ2l0azo4NjMwCittc2dpZCAiRnJvbToiCittc2dzdHIgIkRlOiIKKworIzogZ2l0azo4NjM5Cittc2dpZCAiVG86IgorbXNnc3RyICJQYXJhOiIKKworIzogZ2l0azo4NjQ4Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiSW52ZXJ0ZXIiCisKKyM6IGdpdGs6ODY1MCBnaXRrOjg4NDUKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIkFycXVpdm8gZGUgc2HDrWRhOiIKKworIzogZ2l0azo4NjU2Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlcmFyIgorCisjOiBnaXRrOjg2OTQKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkVycm8gYW8gY3JpYXIgcGF0Y2g6IgorCisjOiBnaXRrOjg3MTcgZ2l0azo4ODMzIGdpdGs6ODg5MAorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjg3MjYKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk5vbWUgZGEgZXRpcXVldGE6IgorCisjOiBnaXRrOjg3MjkKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAiQSBkZXNjcmnDp8OjbyBkYSBldGlxdWV0YSDDqSBvcGNpb25hbCIKKworIzogZ2l0azo4NzMxCittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICJEZXNjcmnDp8OjbyBkYSBldGlxdWV0YSIKKworIzogZ2l0azo4NzM1IGdpdGs6ODg5OQorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiQ3JpYXIiCisKKyM6IGdpdGs6ODc1MworbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiTm9tZSBkYSBldGlxdWV0YSBuw6NvIGluZGljYWRvIgorCisjOiBnaXRrOjg3NTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJFdGlxdWV0YSBcIiVzXCIgasOhIGV4aXN0ZSIKKworIzogZ2l0azo4NzY3Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJybyBhbyBjcmlhciBldGlxdWV0YToiCisKKyM6IGdpdGs6ODg0MgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJDb21hbmRvOiIKKworIzogZ2l0azo4ODUwCittc2dpZCAiV3JpdGUiCittc2dzdHIgIkV4cG9ydGFyIgorCisjOiBnaXRrOjg4NjgKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkVycm8gYW8gZXhwb3J0YXIgcmV2aXPDo28iCisKKyM6IGdpdGs6ODg5NQorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOb21lOiIKKworIzogZ2l0azo4OTE4Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiSW5kaXF1ZSB1bSBub21lIHBhcmEgbyBub3ZvIHJhbW8iCisKKyM6IGdpdGs6ODkyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJPIHJhbW8gXCIlc1wiIGrDoSBleGlzdGUuIFNvYnJlc2NyZXZlcj8iCisKKyM6IGdpdGs6ODk4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICJSZXZpc8OjbyAlcyBqw6EgaW5jbHVzYSBubyByYW1vICVzIC0tIHZvY8OqIHJlYWxtZW50ZSBkZXNlamEgcmVhcGxpY8OhLWxhPyIKKworIzogZ2l0azo4OTk0Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIkNoZXJyeS1waWNraW5nIgorCisjOiBnaXRrOjkwMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiTyBjaGVycnktcGljayBmYWxob3UgcG9ycXVlIG8gYXJxdWl2byBcIiVzXCIgcG9zc3VpIG11ZGFuw6dhcyBsb2NhaXMuXG4iCisiU2FsdmUgYSB1bWEgcmV2aXPDo28sIHJlZGVmaW5hIG91IGFybWF6ZW5lIChzdGFzaCkgc3VhcyBtdWRhbsOnYXMgZSB0ZW50ZSAiCisibm92YW1lbnRlLiIKKworIzogZ2l0azo5MDA5Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiTyBjaGVycnktcGljayBmYWxob3UgcG9ycXVlIGhvdXZlIHVtIGNvbmZsaXRvIG5hIG1lc2NsYWdlbS5cbiIKKyJFeGVjdXRhciBvICdnaXQgY2l0b29sJyBwYXJhIHJlc29sdsOqLWxvPyIKKworIzogZ2l0azo5MDI1Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIk5lbmh1bWEgcmV2aXPDo28gZm9pIHNhbHZhIgorCisjOiBnaXRrOjkwNTEKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25maXJtYXIgcmVkZWZpbmnDp8OjbyIKKworIzogZ2l0azo5MDUzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAiVm9jw6ogcmVhbG1lbnRlIGRlc2VqYSByZWRlZmluaXIgbyByYW1vICVzIHBhcmEgJXM/IgorCisjOiBnaXRrOjkwNTUKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVGlwbyBkZSByZWRlZmluacOnw6NvIgorCisjOiBnaXRrOjkwNTgKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiU29mdDogZGVpeGEgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGUgbyDDrW5kaWNlIGludG9jYWRvcyIKKworIzogZ2l0azo5MDYxCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICJNaXN0bzogRGVpeGEgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGludG9jYWRhLCByZWRlZmluZSBvIMOtbmRpY2UiCisKKyM6IGdpdGs6OTA2NAorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiSGFyZDogUmVkZWZpbmUgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGUgbyDDrW5kaWNlXG4iCisiKGRlc2NhcnRhIFRPREFTIGFzIG11ZGFuw6dhcyBsb2NhaXMpIgorCisjOiBnaXRrOjkwODEKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIlJlZGVmaW5pbmRvIgorCisjOiBnaXRrOjkxNDEKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkFicmluZG8iCisKKyM6IGdpdGs6OTE5NAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIkltcG9zc8OtdmVsIGV4Y2x1aXIgbyByYW1vIGF0dWFsbWVudGUgYWJlcnRvIgorCisjOiBnaXRrOjkyMDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkFzIHJldmlzw7VlcyBkbyByYW1vIFwiJXNcIiBuw6NvIGV4aXN0ZW0gZW0gbmVuaHVtIG91dHJvIHJhbW8uXG4iCisiVm9jw6ogcmVhbG1lbnRlIGRlc2VqYSBleGNsdWlyIHJhbW8gXCIlc1wiPyIKKworIzogZ2l0azo5MjMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJSZWZlcsOqbmNpYXM6ICVzIgorCisjOiBnaXRrOjkyNDYKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRybyIKKworIzogZ2l0azo5NTQxCittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRXJybyBhbyBsZXIgYSB0b3BvbG9naWEgZGFzIHJldmlzw7VlczsgYXMgaW5mb3JtYcOnw7VlcyBkb3MgcmFtb3MgZSBldGlxdWV0YXMgIgorImFudGVjZXNzb3Jhcy9zdWNlc3NvcmFzIGVzdGFyw6NvIGluY29tcGxldGFzIgorCisjOiBnaXRrOjEwNTI3Cittc2dpZCAiVGFnIgorbXNnc3RyICJFdGlxdWV0YSIKKworIzogZ2l0azoxMDUyNworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMDU3NgorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTZWxlY2lvbmFyIGZvbnRlcyBkbyBHaXRrIgorCisjOiBnaXRrOjEwNTkzCittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMDU5NgorbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTA3MTQKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXLDqm5jaWFzIGRvIEdpdGsiCisKKyM6IGdpdGs6MTA3MTYKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9ww6fDtWVzIGRhIGxpc3RhIGRlIHJldmlzw7VlcyIKKworIzogZ2l0azoxMDcxOQorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAiTGFyZ3VyYSBtw6F4aW1hIGRvIGdyYWZvIChsaW5oYXMpIgorCisjOiBnaXRrOjEwNzIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTGFyZ3VyYSBtw6F4aW1hIGRvIGdyYWZvICglIGRvIHBhaW5lbCkiCisKKyM6IGdpdGs6MTA3MjUKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIkV4aWJpciBtdWRhbsOnYXMgbG9jYWlzIgorCisjOiBnaXRrOjEwNzI4Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKK21zZ3N0ciAiU2VsZWNpb25hciBvIFNIQTEgYXV0b21hdGljYW1lbnRlIgorCisjOiBnaXRrOjEwNzMxCittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiT2N1bHRhciByZWZlcsOqbmNpYXMgcmVtb3RhcyIKKworIzogZ2l0azoxMDczNQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBkZSBleGliacOnw6NvIGRhcyBhbHRlcmHDp8O1ZXMiCisKKyM6IGdpdGs6MTA3MzcKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiRXNwYcOnb3MgcG9yIHRhYnVsYcOnw6NvIgorCisjOiBnaXRrOjEwNzQwCittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncyIKK21zZ3N0ciAiRXhpYmlyIGV0aXF1ZXRhcyBwcsOzeGltYXMiCisKKyM6IGdpdGs6MTA3NDMKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0YXIgZGlmZXJlbsOnYXMgYW9zIGNhbWluaG9zIGxpc3RhZG9zIgorCisjOiBnaXRrOjEwNzQ2Cittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIlVzYXIgY29kaWZpY2HDp8O1ZXMgZGlzdGludGFzIHBvciBhcnF1aXZvIgorCisjOiBnaXRrOjEwNzUyIGdpdGs6MTA4MzIKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIkZlcnJhbWVudGEgJ2RpZmYnIGV4dGVybmEiCisKKyM6IGdpdGs6MTA3NTMKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIlNlbGVjaW9uYXIuLi4iCisKKyM6IGdpdGs6MTA3NTgKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIk9ww6fDtWVzIGdlcmFpcyIKKworIzogZ2l0azoxMDc2MQorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiVXNhciB0ZW1hcyBwYXJhIGFzIGphbmVsYXMiCisKKyM6IGdpdGs6MTA3NjMKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIoZXhpZ2UgcmVpbmljaWFsaXphw6fDo28pIgorCisjOiBnaXRrOjEwNzY1Cittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIihhdHVhbG1lbnRlIGluZGlzcG9uw612ZWwpIgorCisjOiBnaXRrOjEwNzY5Cittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkNvcmVzOiBjbGlxdWUgcGFyYSBlc2NvbGhlciIKKworIzogZ2l0azoxMDc3MgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiSW50ZXJmYWNlIgorCisjOiBnaXRrOjEwNzczCittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICJpbnRlcmZhY2UiCisKKyM6IGdpdGs6MTA3NzYKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJTZWd1bmRvIHBsYW5vIgorCisjOiBnaXRrOjEwNzc3IGdpdGs6MTA4MDcKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJzZWd1bmRvIHBsYW5vIgorCisjOiBnaXRrOjEwNzgwCittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJpbWVpcm8gcGxhbm8iCisKKyM6IGdpdGs6MTA3ODEKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJwcmltZWlybyBwbGFubyIKKworIzogZ2l0azoxMDc4NAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZjogbGluaGFzIGV4Y2x1w61kYXMiCisKKyM6IGdpdGs6MTA3ODUKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAibGluaGFzIGV4Y2x1w61kYXMiCisKKyM6IGdpdGs6MTA3ODkKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IGxpbmhhcyBhZGljaW9uYWRhcyIKKworIzogZ2l0azoxMDc5MAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJsaW5oYXMgYWRpY2lvbmFkYXMiCisKKyM6IGdpdGs6MTA3OTQKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZjogY2FiZcOnYWxobyBkbyBibG9jbyIKKworIzogZ2l0azoxMDc5NgorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgImNhYmXDp2FsaG8gZG8gYmxvY28iCisKKyM6IGdpdGs6MTA4MDAKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiMsK6IHBsYW5vIGRhIGxpbmhhIG1hcmNhZGEiCisKKyM6IGdpdGs6MTA4MDIKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICJzZWd1bmRvIHBsYW5vIGRhIGxpbmhhIG1hcmNhZGEiCisKKyM6IGdpdGs6MTA4MDYKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIjLCuiBwbGFubyBkYSBzZWxlw6fDo28iCisKKyM6IGdpdGs6MTA4MTAKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJGb250ZXM6IGNsaXF1ZSBwYXJhIGVzY29saGVyIgorCisjOiBnaXRrOjEwODEyCittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJGb250ZSBwcmluY2lwYWwiCisKKyM6IGdpdGs6MTA4MTMKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiRm9udGUgZGEgbGlzdGEgZGUgbXVkYW7Dp2FzIgorCisjOiBnaXRrOjEwODE0Cittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiRm9udGUgZGEgaW50ZXJmYWNlIgorCisjOiBnaXRrOjEwODQyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azogc2VsZWNpb25hciBjb3IgcGFyYSAlcyIKKworIzogZ2l0azoxMTQ0NQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIk7Do28gaMOhIG5lbmh1bSByZXBvc2l0w7NyaW8gZ2l0IGFxdWkuIgorCisjOiBnaXRrOjExNDQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKK21zZ3N0ciAiSW1wb3Nzw612ZWwgZW5jb250cmFyIG8gZGlyZXTDs3JpbyBnaXQgXCIlc1wiLiIKKworIzogZ2l0azoxMTQ5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAiIgorIk8gYXJndW1lbnRvIFwiJXNcIiDDqSBhbWLDrWd1byAoZXNwZWNpZmljYSB0YW50byB1bWEgcmV2aXPDo28gZSB1bSBub21lIGRlICIKKyJhcnF1aXZvKSIKKworIzogZ2l0azoxMTUwOAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkFyZ3VtZW50b3MgaW5jb3JyZXRvcyBwYXJhIG8gZ2l0azoiCisKKyM6IGdpdGs6MTE2MDQKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkxpbmhhIGRlIGNvbWFuZG8iCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9ydS5wbyBiL2dpdGstZ2l0L3BvL3J1LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODczMDMKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9ydS5wbwpAQCAtMCwwICsxLDEwODUgQEAKKyMKKyMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBSdXNzaWFuLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNC0yNCAxNjowMCswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wNC0yNCAxNjowMCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbGV4IFJpZXNlbiA8cmFhLmxrbWxAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFJ1c3NpYW5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0azoxMTMKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIiIKKyLQndC10LLQvtC30LzQvtC20L3QviDQv9C+0LvRg9GH0LjRgtGMINGB0L/QuNGB0L7QuiDRhNCw0LnQu9C+0LIg0L3QtdC30LDQstC10YDRiNGR0L3QvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjzoiCisKKyM6IGdpdGs6MjY4Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LIg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQtSDQstC10YDRgdC40Lg6IgorCisjOiBnaXRrOjMyMworbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQutC+0LzQsNC90LTRiyDQt9Cw0LTQsNC90L3QvtC5IC0tYXJnc2NtZDoiCisKKyM6IGdpdGs6MzM2Cittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisi0KTQsNC50LvRiyDQvdC1INCy0YvQsdGA0LDQvdGLOiDRg9C60LDQt9Cw0L0gLS1tZXJnZSwg0L3QviDQvdC1INCx0YvQu9C+INC90LDQudC00LXQvdC+INC90Lgg0L7QtNC90L7Qs9C+INGE0LDQudC70LAgIgorItCz0LTQtSDRjdGC0LAg0L7Qv9C10YDQsNGG0LjRjyDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0LfQsNCy0LXRgNGI0LXQvdCwLiIKKworIzogZ2l0azozMzkKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorItCk0LDQudC70Ysg0L3QtSDQstGL0LHRgNCw0L3Rizog0YPQutCw0LfQsNC9IC0tbWVyZ2UsINC90L4g0LIg0YDQsNC80LrQsNGFINGD0LrQsNC30LDQvdC90L7Qs9C+ICIKKyLQvtCz0YDQsNC90LjRh9C10L3QuNGPINC90LAg0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIg0L3QtdGCINC90Lgg0L7QtNC90L7Qs9C+ICIKKyLQs9C00LUg0Y3RgtCwINC+0L/QtdGA0LDRhtC40Y8g0LTQvtC70LbQvdCwINCx0YvRgtGMINC30LDQstC10YDRiNC10L3QsC4iCisKKyM6IGdpdGs6MzYxIGdpdGs6NTA4Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNC/0YPRgdC60LAgZ2l0IGxvZzoiCisKKyM6IGdpdGs6Mzc5Cittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAi0KfRgtC10L3QuNC1IgorCisjOiBnaXRrOjQzOSBnaXRrOjQwMjEKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgItCn0YLQtdC90LjQtSDQstC10YDRgdC40LkuLi4iCisKKyM6IGdpdGs6NDQyIGdpdGs6MTU2MCBnaXRrOjQwMjQKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICLQndC40YfQtdCz0L4g0L3QtSDQstGL0LHRgNCw0L3QviIKKworIzogZ2l0azoxNDM2Cittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0L7QsdGA0LDQsdC+0YLQutC4INCy0YvQstC+0LTQsCDQutC+0LzQsNC90LTRiyBnaXQgbG9nOiIKKworIzogZ2l0azoxNjU2Cittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAi0J3QtdGCINC40L3RhNC+0YDQvNCw0YbQuNC4INC+INGB0L7RgdGC0L7Rj9C90LjQuCIKKworIzogZ2l0azoxNzkxIGdpdGs6MTgxNSBnaXRrOjM4MTQgZ2l0azo4NDc4IGdpdGs6MTAwMTQgZ2l0azoxMDE4NgorbXNnaWQgIk9LIgorbXNnc3RyICJPayIKKworIzogZ2l0azoxODE3IGdpdGs6MzgxNiBnaXRrOjgwNzggZ2l0azo4MTUyIGdpdGs6ODI1OSBnaXRrOjgzMDggZ2l0azo4NDgwCisjOiBnaXRrOjEwMDE1IGdpdGs6MTAxODcKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgItCe0YLQvNC10L3QsCIKKworIzogZ2l0azoxOTE1Cittc2dpZCAiVXBkYXRlIgorbXNnc3RyICLQntCx0L3QvtCy0LjRgtGMIgorCisjOiBnaXRrOjE5MTYKK21zZ2lkICJSZWxvYWQiCittc2dzdHIgItCf0LXRgNC10YfQuNGC0LDRgtGMIgorCisjOiBnaXRrOjE5MTcKK21zZ2lkICJSZXJlYWQgcmVmZXJlbmNlcyIKK21zZ3N0ciAi0J7QsdC90L7QstC40YLRjCDRgdC/0LjRgdC+0Log0YHRgdGL0LvQvtC6IgorCisjOiBnaXRrOjE5MTgKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgItCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0LoiCisKKyM6IGdpdGs6MTkyMAorbXNnaWQgIlN0YXJ0IGdpdCBndWkiCittc2dzdHIgItCX0LDQv9GD0YHRgtC40YLRjCBnaXQgZ3VpIgorCisjOiBnaXRrOjE5MjIKK21zZ2lkICJRdWl0IgorbXNnc3RyICLQl9Cw0LLQtdGA0YjQuNGC0YwiCisKKyM6IGdpdGs6MTkxNAorbXNnaWQgIkZpbGUiCittc2dzdHIgItCk0LDQudC7IgorCisjOiBnaXRrOjE5MjUKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBnaXRrOjE5MjQKK21zZ2lkICJFZGl0IgorbXNnc3RyICLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCIKKworIzogZ2l0azoxOTI4Cittc2dpZCAiTmV3IHZpZXcuLi4iCittc2dzdHIgItCd0L7QstC+0LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUuLi4iCisKKyM6IGdpdGs6MTkyOQorbXNnaWQgIkVkaXQgdmlldy4uLiIKK21zZ3N0ciAi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUuLi4iCisKKyM6IGdpdGs6MTkzMAorbXNnaWQgIkRlbGV0ZSB2aWV3IgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSIKKworIzogZ2l0azoxOTMyCittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICLQktGB0LUg0YTQsNC50LvRiyIKKworIzogZ2l0azoxOTI3IGdpdGs6MzYyNgorbXNnaWQgIlZpZXciCittc2dzdHIgItCf0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IgorCisjOiBnaXRrOjE5MzUgZ2l0azoyNjA5Cittc2dpZCAiQWJvdXQgZ2l0ayIKK21zZ3N0ciAi0J4gZ2l0ayIKKworIzogZ2l0azoxOTM2Cittc2dpZCAiS2V5IGJpbmRpbmdzIgorbXNnc3RyICLQndCw0LfQvdCw0YfQtdC90LjRjyDQutC70LDQstC40LDRgtGD0YDRiyIKKworIzogZ2l0azoxOTM0Cittc2dpZCAiSGVscCIKK21zZ3N0ciAi0J/QvtC00YHQutCw0LfQutCwIgorCisjOiBnaXRrOjE5OTQKK21zZ2lkICJTSEExIElEOiAiCittc2dzdHIgIlNIQTE6IgorCisjOiBnaXRrOjIwMjUKK21zZ2lkICJSb3ciCittc2dzdHIgItCh0YLRgNC+0LrQsCIKKworIzogZ2l0azoyMDU2Cittc2dpZCAiRmluZCIKK21zZ3N0ciAi0J/QvtC40YHQuiIKKworIzogZ2l0azoyMDU3Cittc2dpZCAibmV4dCIKK21zZ3N0ciAi0KHQu9C10LQuIgorCisjOiBnaXRrOjIwNTgKK21zZ2lkICJwcmV2IgorbXNnc3RyICLQn9GA0LXQtC4iCisKKyM6IGdpdGs6MjA1OQorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAi0YHQvtGB0YLQvtGP0L3QuNC1IgorCisjOiBnaXRrOjIwNjIgZ2l0azoyMDY0IGdpdGs6NDE3OSBnaXRrOjQyMDIgZ2l0azo0MjI2IGdpdGs6NjE2NCBnaXRrOjYyMzYKKyM6IGdpdGs6NjMyMAorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICLRgdC+0LTQtdGA0LbQsNGJ0LXQtToiCisKKyM6IGdpdGs6MjA2NSBnaXRrOjMxMTcgZ2l0azozMTIyIGdpdGs6NDI1NAorbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAi0LrQsNGB0LDRgtC10LvRjNC90L4g0YTQsNC50LvQvtCyOiIKKworIzogZ2l0azoyMDY2IGdpdGs6NDI1OQorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICLQtNC+0LHQsNCy0LjQsi/Rg9C00LDQu9C40LIg0YHRgtGA0L7QutGDOiIKKworIzogZ2l0azoyMDc1IGdpdGs6MjA3NworbXNnaWQgIkV4YWN0IgorbXNnc3RyICLQotC+0YfQvdC+IgorCisjOiBnaXRrOjIwNzcgZ2l0azo0MzM0IGdpdGs6NjEzMgorbXNnaWQgIklnbkNhc2UiCittc2dzdHIgItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQsdC+0LvRjNGI0LjQtS/QvNCw0LvQtdC90YzQutC40LUiCisKKyM6IGdpdGs6MjA3NyBnaXRrOjQyMjggZ2l0azo0MzMyIGdpdGs6NjEyOAorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAi0KDQtdCz0YPQu9GP0YDQvdGL0LUg0LLRi9GA0LDQttC10L3QuNGPIgorCisjOiBnaXRrOjIwNzkgZ2l0azoyMDgwIGdpdGs6NDM1MyBnaXRrOjQzODMgZ2l0azo0MzkwIGdpdGs6NjI1NiBnaXRrOjYzMjQKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICLQktC+INCy0YHQtdGFINC/0L7Qu9GP0YUiCisKKyM6IGdpdGs6MjA4MCBnaXRrOjQzNTEgZ2l0azo0MzgzIGdpdGs6NjE5NQorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICLQl9Cw0LPQvtC70L7QstC+0LoiCisKKyM6IGdpdGs6MjA4MSBnaXRrOjQzNTEgZ2l0azo2MTk1IGdpdGs6NjMyNCBnaXRrOjY3MzcKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuCIKKworIzogZ2l0azoyMDgxIGdpdGs6NDM1MSBnaXRrOjQzNTUgZ2l0azo0MzkwIGdpdGs6NjE5NSBnaXRrOjY2NzIgZ2l0azo3OTIzCisjOiBnaXRrOjc5MzgKK21zZ2lkICJBdXRob3IiCittc2dzdHIgItCQ0LLRgtC+0YAiCisKKyM6IGdpdGs6MjA4MSBnaXRrOjQzNTEgZ2l0azo2MTk1IGdpdGs6NjY3NAorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAi0KHQvtGF0YDQsNC90LjQstGI0LjQuSDRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGdpdGs6MjExMAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAi0J3QsNC50YLQuCIKKworIzogZ2l0azoyMTE3Cittc2dpZCAiRGlmZiIKK21zZ3N0ciAi0KHRgNCw0LLQvdC40YLRjCIKKworIzogZ2l0azoyMTE5Cittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgItCh0YLQsNGA0LDRjyDQstC10YDRgdC40Y8iCisKKyM6IGdpdGs6MjEyMQorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICLQndC+0LLQsNGPINCy0LXRgNGB0LjRjyIKKworIzogZ2l0azoyMTIzCittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAi0KHRgtGA0L7QuiDQutC+0L3RgtC10LrRgdGC0LAiCisKKyM6IGdpdGs6MjEzMworbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQv9GA0L7QsdC10LvRiyIKKworIzogZ2l0azoyMTkxCittc2dpZCAiUGF0Y2giCittc2dzdHIgItCf0LDRgtGHIgorCisjOiBnaXRrOjIxOTMKK21zZ2lkICJUcmVlIgorbXNnc3RyICLQpNCw0LnQu9GLIgorCisjOiBnaXRrOjIzMjYgZ2l0azoyMzM5Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICLQodGA0LDQstC90LjRgtGMINGN0YLQviDRgdC+0YHRgtC+0Y/QvdC40LUg0YEg0LLRi9C00LXQu9C10L3QvdGL0LwiCisKKyM6IGdpdGs6MjMyNyBnaXRrOjIzNDAKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgItCh0YDQsNCy0L3QuNGC0Ywg0LLRi9C00LXQu9C10L3QvdC+0LUg0YEg0Y3RgtC40Lwg0YHQvtGB0YLQvtGP0L3QuNC10LwiCisKKyM6IGdpdGs6MjMyOCBnaXRrOjIzNDEKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQv9Cw0YLRhyIKKworIzogZ2l0azoyMzI5IGdpdGs6ODEzNgorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINC80LXRgtC60YMiCisKKyM6IGdpdGs6MjMzMCBnaXRrOjgyMzkKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAi0KHQvtGF0YDQsNC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDRhNCw0LnQuyIKKworIzogZ2l0azoyMzMxIGdpdGs6ODI5NgorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQstC10YLQstGMIgorCisjOiBnaXRrOjIzMzIKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAi0KHQutC+0L/QuNGA0L7QstCw0YLRjCDRjdGC0L4g0YHQvtGB0YLQvtGP0L3QuNC1IgorCisjOiBnaXRrOjIzMzMKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLQo9GB0YLQsNC90L7QstC40YLRjCBIRUFEINC90LAg0Y3RgtC+INGB0L7RgdGC0L7Rj9C90LjQtSIKKworIzogZ2l0azoyMzQ3Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQvdCwINGN0YLRgyDQstC10YLQstGMIgorCisjOiBnaXRrOjIzNDgKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgItCj0LTQsNC70LjRgtGMINGN0YLRgyDQstC10YLQstGMIgorCisjOiBnaXRrOjIzNTUKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgItCf0L7QtNGB0LLQtdGC0LjRgtGMINGN0YLQvtGCINGC0L7QttC1IgorCisjOiBnaXRrOjIzNTYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICLQn9C+0LTRgdCy0LXRgtC40YLRjCDRgtC+0LvRjNC60L4g0Y3RgtC+0YIiCisKKyM6IGdpdGs6MjM1NworbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCDRgdGA0LDQstC90LXQvdC40Y8iCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgItCQ0L3QvdC+0YLQuNGA0L7QstCw0YLRjCDRgNC+0LTQuNGC0LXQu9GM0YHQutC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1IgorCisjOiBnaXRrOjIzNjUKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7Rh9C90LjQuiDRjdGC0L7QuSDRgdGC0YDQvtC60LgiCisKKyM6IGdpdGs6MjM2NgorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAi0JfQsNC/0YPRgdGC0LjRgtGMIGdpdCBndWkgYmxhbWUg0LTQu9GPINGN0YLQvtC5INGB0YLRgNC+0LrQuCIKKworIzogZ2l0azoyNjExCittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCBcXHUwMGE5IDIwMDUtMjAxMCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0g0L/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtGB0LzQvtGC0YDQsCDQuNGB0YLQvtGA0LjQuCDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIgR2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisi0JjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0Lgg0YDQsNGB0L/RgNC+0YHRgtGA0LDQvdC10L3QuNC1INGB0L7Qs9C70LDRgdC90L4g0YPRgdC70L7QstC40Y/QvCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKKworIzogZ2l0azoyNjE5IGdpdGs6MjY4MSBnaXRrOjg2NjEKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAi0JfQsNC60YDRi9GC0YwiCisKKyM6IGdpdGs6MjYzOAorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICLQndCw0LfQvdCw0YfQtdC90LjRjyDQutC70LDQstC40LDRgtGD0YDRiyDQsiBHaXRrIgorCisjOiBnaXRrOjI2NDEKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgItCd0LDQt9C90LDRh9C10L3QuNGPINC60LvQsNCy0LjQsNGC0YPRgNGLINCyIEdpdGs6IgorCisjOiBnaXRrOjI2NDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdNCX0LDQstC10YDRiNC40YLRjCIKKworIzogZ2l0azoyNjQ0Cittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx00J/QtdGA0LXQudGC0Lgg0Log0L/QtdGA0LLQvtC80YMg0YHQvtGB0YLQvtGP0L3QuNGOIgorCisjOiBnaXRrOjI2NDUKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHTQn9C10YDQtdC50YLQuCDQuiDQv9C+0YHQu9C10LTQvdC10LzRgyDRgdC+0YHRgtC+0Y/QvdC40Y4iCisKKyM6IGdpdGs6MjY0NgorbXNnaWQgIjxVcD4sIHAsIGlcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwPiwgcCwgaVx00J/QtdGA0LXQudGC0Lgg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0YHQvtGB0YLQvtGP0L3QuNGOIgorCisjOiBnaXRrOjI2NDcKK21zZ2lkICI8RG93bj4sIG4sIGtcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8RG93bj4sIG4sIGtcdNCf0LXRgNC10LnRgtC4INC6INC/0YDQtdC00YvQtNGD0YnQtdC80YMg0YHQvtGB0YLQvtGP0L3QuNGOIgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGVmdD4sIHosIGpcdNCf0L7QutCw0LfQsNGC0Ywg0YDQsNC90LXQtSDQv9C+0YHQtdGJ0ZHQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGdpdGs6MjY0OQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmlnaHQ+LCB4LCBsXHTQn9C+0LrQsNC30LDRgtGMINGB0LvQtdC00YPRjtGJ0LXQtSDQv9C+0YHQtdGJ0ZHQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGdpdGs6MjY1MAorbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx00J/QtdGA0LXQudGC0Lgg0L3QsCDRgdGC0YDQsNC90LjRhtGDINCy0YvRiNC1INCyINGB0L/QuNGB0LrQtSDRgdC+0YHRgtC+0Y/QvdC40LkiCisKKyM6IGdpdGs6MjY1MQorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx00J/QtdGA0LXQudGC0Lgg0L3QsCDRgdGC0YDQsNC90LjRhtGDINC90LjQttC1INCyINGB0L/QuNGB0LrQtSDRgdC+0YHRgtC+0Y/QvdC40LkiCisKKyM6IGdpdGs6MjY1MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHTQn9C+0LrQsNC30LDRgtGMINC90LDRh9Cw0LvQviDRgdC/0LjRgdC60LAg0YHQvtGB0YLQvtGP0L3QuNC5IgorCisjOiBnaXRrOjI2NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdNCf0L7QutCw0LfQsNGC0Ywg0LrQvtC90LXRhiDRgdC/0LjRgdC60LAg0YHQvtGB0YLQvtGP0L3QuNC5IgorCisjOiBnaXRrOjI2NTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcD5cdNCf0YDQvtCy0LXRgNC90YPRgtGMINGB0L/QuNGB0L7QuiDRgdC+0YHRgtC+0Y/QvdC40Lkg0LLQstC10YDRhSIKKworIzogZ2l0azoyNjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLURvd24+XHTQn9GA0L7QstC10YDQvdGD0YLRjCDRgdC/0LjRgdC+0Log0YHQvtGB0YLQvtGP0L3QuNC5INCy0L3QuNC3IgorCisjOiBnaXRrOjI2NTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZVVwPlx00J/RgNC+0LLQtdGA0L3Rg9GC0Ywg0YHQv9C40YHQvtC6INGB0L7RgdGC0L7Rj9C90LjQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLQstC10YDRhSIKKworIzogZ2l0azoyNjU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdNCf0YDQvtCy0LXRgNC90YPRgtGMINGB0L/QuNGB0L7QuiDRgdC+0YHRgtC+0Y/QvdC40Lkg0L3QsCDRgdGC0YDQsNC90LjRhtGDINCy0L3QuNC3IgorCisjOiBnaXRrOjI2NTgKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIiIKKyI8U2hpZnQtVXA+XHTQn9C+0LjRgdC6INCyINC+0LHRgNCw0YLQvdC+0Lwg0L/QvtGA0Y/QtNC60LUgKNCy0LLQtdGA0YUsINGB0YDQtdC00Lgg0L3QvtCy0YvRhSDRgdC+0YHRgtC+0Y/QvdC40LkpIgorCisjOiBnaXRrOjI2NTkKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LURvd24+XHTQn9C+0LjRgdC6ICjQstC90LjQtywg0YHRgNC10LTQuCDRgdGC0LDRgNGL0YUg0YHQvtGB0YLQvtGP0L3QuNC5KSIKKworIzogZ2l0azoyNjYwCittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHTQn9GA0L7QutGA0YPRgtC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC90LAg0YHRgtGA0LDQvdC40YbRgyDQstGL0YjQtSIKKworIzogZ2l0azoyNjYxCittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHTQn9GA0L7QutGA0YPRgtC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC90LAg0YHRgtGA0LDQvdC40YbRgyDQstGL0YjQtSIKKworIzogZ2l0azoyNjYyCittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxMZWVydGFzdGU+XHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCDRgdGC0YDQsNC90LjRhtGDINC90LjQttC1IgorCisjOiBnaXRrOjI2NjMKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwIDE4INGB0YLRgNC+0Log0LLQstC10YDRhSIKKworIzogZ2l0azoyNjY0Cittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwIDE4INGB0YLRgNC+0Log0LLQvdC40LciCisKKyM6IGdpdGs6MjY2NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx00J/QvtC40YHQuiIKKworIzogZ2l0azoyNjY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdNCf0LXRgNC10LnRgtC4INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINC90LDQudC00LXQvdC90L7QvNGDINGB0L7RgdGC0L7Rj9C90LjRjiIKKworIzogZ2l0azoyNjY3Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdNCf0LXRgNC10LnRgtC4INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINC90LDQudC00LXQvdC90L7QvNGDINGB0L7RgdGC0L7Rj9C90LjRjiIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHTQn9C10YDQtdC50YLQuCDQuiDQv9C+0LvRjiDQv9C+0LjRgdC60LAiCisKKyM6IGdpdGs6MjY2OQorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHTQn9C10YDQtdC50YLQuCDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQvNGDINC90LDQudC00LXQvdC90L7QvNGDINGB0L7RgdGC0L7Rj9C90LjRjiIKKworIzogZ2l0azoyNjcwCittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHTQn9GA0L7QutGA0YPRgtC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINGE0LDQudC70YMiCisKKyM6IGdpdGs6MjY3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdNCf0YDQvtC00L7Qu9C20LjRgtGMINC/0L7QuNGB0Log0LIg0YHQv9C40YHQutC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azoyNjcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdNCf0LXRgNC10LnRgtC4INC6INC/0YDQtdC00YvQtNGD0YnQtdC80YMg0L3QsNC50LTQtdC90L3QvtC80YMg0YLQtdC60YHRgtGDINCyINGB0L/QuNGB0LrQtSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MjY3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHTQo9Cy0LXQu9C40YfQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azoyNjc0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx00KPQstC10LvQuNGH0LjRgtGMINGA0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAiCisKKyM6IGdpdGs6MjY3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHTQo9C80LXQvdGM0YjQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azoyNjc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHTQo9C80LXQvdGM0YjQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azoyNjc3Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx00J7QsdC90L7QstC40YLRjCIKKworIzogZ2l0azozMTMyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8gXCIlc1wiINC40LcgJXM6IgorCisjOiBnaXRrOjMxODkgZ2l0azozMTk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINCy0YDQtdC80LXQvdC90L7Qs9C+INC60LDRgtCw0LvQvtCz0LAgJXM6IgorCisjOiBnaXRrOjMyMTEKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQutC+0LzQsNC90LTRizoiCisKKyM6IGdpdGs6MzM1NworbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICLQodC+0YHRgtC+0Y/QvdC40LUg0L3QtSDQvdCw0LnQtNC10L3QviIKKworIzogZ2l0azozMzcxCittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiDQvtGI0LjQsdC60LAg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LrQvtC80LDQvdC00Ys6IgorCisjOiBnaXRrOjM0MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0YfRgtC10L3QuNGPIE1FUkdFX0hFQUQ6ICVzIgorCisjOiBnaXRrOjM0MTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGH0YLQtdC90LjRjyDQuNC90LTQtdC60YHQsDogJXMiCisKKyM6IGdpdGs6MzQzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM0MzggZ2l0azo2MTYzCittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICLQn9C+0LjRgdC6IgorCisjOiBnaXRrOjM0NzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM0OTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICIiCisi0K3RgtCwINGB0YLRgNC+0LrQsCDQv9GA0LjQvdCw0LTQu9C10LbQuNGCINGB0L7RgdGC0L7Rj9C90LjRjiAlcywg0LrQvtGC0L7RgNC+0LUg0L3QtSDQv9C+0LrQsNC30LDQvdC+INCyINGN0YLQvtC8ICIKKyLQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuCIKKworIzogZ2l0azozNTEyCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC/0YDQvtCz0YDQsNC80LzRiyDRgdGA0LDQstC90LXQvdC40Y86IgorCisjOiBnaXRrOjM2MzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiR2l0ayDQvtC/0YDQtdC00LXQu9C10L3QuNC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC5IgorCisjOiBnaXRrOjM2MzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgItCX0LDQv9C+0LzQvdC40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSIKKworIzogZ2l0azozNjM1Cittc2dpZCAiQ29tbWl0cyB0byBpbmNsdWRlIChhcmd1bWVudHMgdG8gZ2l0IGxvZyk6IgorbXNnc3RyICLQktC60LvRjtGH0LjRgtGMINGB0L7RgdGC0L7Rj9C90LjRjyAo0LDRgNCz0YPQvNC10L3RgtGLINC00LvRjyBnaXQtbG9nKToiCisKKyM6IGdpdGs6MzYzNgorbXNnaWQgIlVzZSBhbGwgcmVmcyIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCy0YHQtSDQstC10YLQstC4IgorCisjOiBnaXRrOjM2MzcKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgItCh0YLRgNC+0LPQsNGPINGB0L7RgNGC0LjRgNC+0LLQutCwINC/0L4g0LTQsNGC0LUiCisKKyM6IGdpdGs6MzYzOAorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICLQntGC0LzQtdGC0LjRgtGMINGB0YLQvtGA0L7QvdGLINCy0LXRgtCy0LXQuSIKKworIzogZ2l0azozNjM5Cittc2dpZCAiU2luY2UgZGF0ZToiCittc2dzdHIgItChINC00LDRgtGLOiIKKworIzogZ2l0azozNjQwCittc2dpZCAiVW50aWwgZGF0ZToiCittc2dzdHIgItCf0L4g0LTQsNGC0YM6IgorCisjOiBnaXRrOjM2NDEKK21zZ2lkICJNYXggY291bnQ6IgorbXNnc3RyICLQnNCw0LrRgS4g0LrQvtC70LjRh9C10YHRgtCy0L46IgorCisjOiBnaXRrOjM2NDIKK21zZ2lkICJTa2lwOiIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0YLQuNGC0Yw6IgorCisjOiBnaXRrOjM2NDMKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgItCe0LPRgNCw0L3QuNGH0LjRgtGMINC/0LXRgNCy0YvQvCDQv9GA0LXQtNC60L7QvCIKKworIzogZ2l0azozNjQ0Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgItCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdCw0Y8g0LrQvtC80LDQvdC00LAg0LTQu9GPINGB0L/QuNGB0LrQsCDRgdC+0YHRgtC+0Y/QvdC40Lk6IgorCisjOiBnaXRrOjM3NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICLQmNC80Y8iCisKKyM6IGdpdGs6MzgwMQorbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICLQpNCw0LnQu9GLINC4INC60LDRgtCw0LvQvtCz0Lgg0LTQu9GPINC+0LPRgNCw0L3QuNGH0LXQvdC40Y8g0LjRgdGC0L7RgNC40LgsINC/0L4g0L7QtNC90L7QvNGDINC90LAg0YHRgtGA0L7QutGDOiIKKworIzogZ2l0azozODE1Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMIChGNSkiCisKKyM6IGdpdGs6Mzg1MworbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCyINC/0LDRgNCw0LzQtdGC0YDQsNGFINCy0YvQsdC+0YDQsCDRgdC+0YHRgtC+0Y/QvdC40Lk6IgorCisjOiBnaXRrOjM5MDYgZ2l0azozOTU4IGdpdGs6NDQwMyBnaXRrOjQ0MTcgZ2l0azo1Njc1IGdpdGs6MTA4NjcgZ2l0azoxMDg2OAorbXNnaWQgIk5vbmUiCittc2dzdHIgItCd0Lgg0L7QtNC90L7Qs9C+IgorCisjOiBnaXRrOjQzNTEgZ2l0azo2MTk1IGdpdGs6NzkyNSBnaXRrOjc5NDAKK21zZ2lkICJEYXRlIgorbXNnc3RyICLQlNCw0YLQsCIKKworIzogZ2l0azo0MzUxIGdpdGs6NjE5NQorbXNnaWQgIkNEYXRlIgorbXNnc3RyICLQlNCw0YLQsCDQstCy0L7QtNCwIgorCisjOiBnaXRrOjQ1MDAgZ2l0azo0NTA1Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAi0J/QvtGA0L7QttC00ZHQvdC90L7QtSIKKworIzogZ2l0azo0NTAxCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgItCd0LUg0L/QvtGA0L7QttC00ZHQvdC90L7QtSIKKworIzogZ2l0azo0NTA4IGdpdGs6NDUxMworbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICLQn9GA0LXQtNC+0LoiCisKKyM6IGdpdGs6NDUwOQorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAi0J3QtSDQv9GA0LXQtNC+0LoiCisKKyM6IGdpdGs6NDc5OQorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPINC30LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDQvdC90YvQtSDQsiDQuNC90LTQtdC60YHQtSwg0L3QviDQvdC1INGB0L7RhdGA0LDQvdGR0L3QvdGL0LUiCisKKyM6IGdpdGs6NDgzNQorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8g0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSwg0L3QtSDQt9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0L3QvdGL0LUg0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGdpdGs6NjY3NgorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICLQotCw0LPQuDoiCisKKyM6IGdpdGs6NjY5MyBnaXRrOjY2OTkgZ2l0azo3OTE4Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICLQn9GA0LXQtNC+0LoiCisKKyM6IGdpdGs6NjcwNAorbXNnaWQgIkNoaWxkIgorbXNnc3RyICLQn9C+0YLQvtC80L7QuiIKKworIzogZ2l0azo2NzEzCittc2dpZCAiQnJhbmNoIgorbXNnc3RyICLQktC10YLQstGMIgorCisjOiBnaXRrOjY3MTYKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICLQodC70LXQtNGD0LXRgiDQt9CwIgorCisjOiBnaXRrOjY3MTkKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAi0J/RgNC10LTRiNC10YHRgtCy0YPQtdGCIgorCisjOiBnaXRrOjcyMTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyDQuNC30LzQtdC90LXQvdC40Lk6ICVzIgorCisjOiBnaXRrOjc3NTEKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Lo6IgorCisjOiBnaXRrOjc3NTMKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRDoiCisKKyM6IGdpdGs6Nzc3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICLQodC+0LrRgNCw0YnRkdC90L3Ri9C5IFNIQTEg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAgJXMg0L3QtdC+0LTQvdC+0LfQvdCw0YfQtdC9IgorCisjOiBnaXRrOjc3ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiU0hBMSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCAlcyDQvdC1INC90LDQudC00LXQvSIKKworIzogZ2l0azo3Nzg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICLQnNC10YLQutCwINC40LvQuCDQstC10YLQstGMICVzINC90LUg0L3QsNC50LTQtdC90LAiCisKKyM6IGdpdGs6NzkyOAorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICLQn9C+0YLQvtC80LrQuCIKKworIzogZ2l0azo3OTg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgItCj0YHRgtCw0L3QvtCy0LjRgtGMINCy0LXRgtCy0YwgJXMg0L3QsCDRjdGC0L4g0YHQvtGB0YLQvtGP0L3QuNC1IgorCisjOiBnaXRrOjc5ODcKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAi0KHQvtGB0YLQvtGP0L3QuNC1INC90LUg0L/RgNC40L3QsNC00LvQtdC20LjRgiDQvdC4INC+0LTQvdC+0Lkg0LLQtdGC0LLQuCwg0L/QtdGA0LXRhdC+0LQg0L3QtdCy0L7Qt9C80L7QttC10L0iCisKKyM6IGdpdGs6ODAxOQorbXNnaWQgIlRvcCIKK21zZ3N0ciAi0JLQtdGA0YUiCisKKyM6IGdpdGs6ODAyMAorbXNnaWQgIkZyb20iCittc2dzdHIgItCe0YIiCisKKyM6IGdpdGs6ODAyNQorbXNnaWQgIlRvIgorbXNnc3RyICLQlNC+IgorCisjOiBnaXRrOjgwNDkKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0L/QsNGC0YciCisKKyM6IGdpdGs6ODA1MQorbXNnaWQgIkZyb206IgorbXNnc3RyICLQntGCOiIKKworIzogZ2l0azo4MDYwCittc2dpZCAiVG86IgorbXNnc3RyICLQlNC+OiIKKworIzogZ2l0azo4MDY5Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAi0JIg0L7QsdGA0LDRgtC90L7QvCDQv9C+0YDRj9C00LrQtSIKKworIzogZ2l0azo4MDcxIGdpdGs6ODI1MworbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAi0KTQsNC50Lsg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPOiIKKworIzogZ2l0azo4MDc3Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgItCh0L7Qt9C00LDRgtGMIgorCisjOiBnaXRrOjgxMTUKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINC/0LDRgtGH0LA6IgorCisjOiBnaXRrOjgxMzggZ2l0azo4MjQxIGdpdGs6ODI5OAorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjgxNDcKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgItCY0LzRjyDQvNC10YLQutC4OiIKKworIzogZ2l0azo4MTUxIGdpdGs6ODMwNworbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0YwiCisKKyM6IGdpdGs6ODE2OAorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi0J3QtSDQt9Cw0LTQsNC90L4g0LjQvNGPINC80LXRgtC60LgiCisKKyM6IGdpdGs6ODE3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgItCc0LXRgtC60LAgXCIlc1wiINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogZ2l0azo4MTc4Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGB0L7Qt9C00LDQvdC40Y8g0LzQtdGC0LrQuDoiCisKKyM6IGdpdGs6ODI1MAorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICLQmtC+0LzQsNC90LTQsDoiCisKKyM6IGdpdGs6ODI1OAorbXNnaWQgIldyaXRlIgorbXNnc3RyICLQl9Cw0L/QuNGB0YwiCisKKyM6IGdpdGs6ODI3NgorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGB0L7RhdGA0LDQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjzoiCisKKyM6IGdpdGs6ODMwMworbXNnaWQgIk5hbWU6IgorbXNnc3RyICLQmNC80Y86IgorCisjOiBnaXRrOjgzMjYKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICLQo9C60LDQttC40YLQtSDQuNC80Y8g0LTQu9GPINC90L7QstC+0Lkg0LLQtdGC0LLQuCIKKworIzogZ2l0azo4MzMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgItCS0LXRgtCy0YwgJyVzJyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuINCf0LXRgNC10L/QuNGB0LDRgtGMPyIKKworIzogZ2l0azo4Mzk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIiIKKyLQodC+0YHRgtC+0Y/QvdC40LUgJXMg0YPQttC1INC/0YDQuNC90LDQtNC70LXQttC40YIg0LLQtdGC0LLQuCAlcy4g0J/RgNC+0LTQvtC70LbQuNGC0Ywg0L7Qv9C10YDQsNGG0LjRjj8iCisKKyM6IGdpdGs6ODQwMgorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azo4NDExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorItCa0L7Qv9C40YDQvtCy0LDQvdC40LUg0L3QtdCy0L7Qt9C80L7QttC90L4g0LjQty3Qt9CwINC40LfQvNC10L3QtdC90LjQuSDQsiDRhNCw0LnQu9C1ICclcycuXG4iCisi0KHQvtGF0YDQsNC90LjRgtC1INC40LvQuCDQvtGC0LzQtdC90LjRgtC1INC40LfQvNC10L3QtdC90LjRjyDQuCDQv9C+0LLRgtC+0YDQuNGC0LUg0L7Qv9C10YDQsNGG0LjRji4iCisKKyM6IGdpdGs6ODQxNworbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorItCa0L7Qv9C40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INC90LXQstC+0LfQvNC+0LbQvdC+INC40Lct0LfQsCDQvdC10LfQsNCy0LXRgNGI0ZHQvdC90L7QuSDQvtC/0LXRgNCw0YbQuNC4ICIKKyLRgdC70LjRj9C90LjRjy5cbtCX0LDQv9GD0YHRgtC40YLRjCBnaXQgY2l0b29sINC00LvRjyDQt9Cw0LLQtdGA0YjQtdC90LjRjyDRjdGC0L7QuSDQvtC/0LXRgNCw0YbQuNC4PyIKKworIzogZ2l0azo4NDMzCittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjyDQvdC1INGB0L7RhdGA0LDQvdC10L3RiyIKKworIzogZ2l0azo4NDU5Cittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAi0J/QvtC00YLQstC10YDQtNC40YLQtSDQvtC/0LXRgNCw0YbQuNGOINC/0LXRgNC10YXQvtC00LAiCisKKyM6IGdpdGs6ODQ2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgItCj0YHRgtCw0L3QvtCy0LjRgtGMINCy0LXRgtCy0YwgJXMg0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LUgJXM/IgorCisjOiBnaXRrOjg0NjUKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAi0KLQuNC/INC+0L/QtdGA0LDRhtC40Lgg0L/QtdGA0LXRhdC+0LTQsDoiCisKKyM6IGdpdGs6ODQ2OQorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICLQm9GR0LPQutC40Lk6INC+0YHRgtCw0LLQuNGC0Ywg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0Lgg0LjQvdC00LXQutGBINC90LXQuNC30LzQtdC90L3Ri9C80LgiCisKKyM6IGdpdGs6ODQ3MgorbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiIgorItCh0LzQtdGI0LDQvdC90YvQuTog0L7RgdGC0LDQstC40YLRjCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQvdC10LjQt9C80LXQvdC90YvQvCwg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBnaXRrOjg0NzUKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorItCW0LXRgdGC0LrQuNC5OiDQv9C10YDQtdC/0LjRgdCw0YLRjCDQuNC90LTQtdC60YEg0Lgg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LNcbiIKKyIo0LLRgdC1INC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C4INCx0YPQtNGD0YIg0L/QvtGC0LXRgNGP0L3RiykiCisKKyM6IGdpdGs6ODQ5MgorbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAi0KPRgdGC0LDQvdC+0LLQutCwIgorCisjOiBnaXRrOjg1NDkKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgItCf0LXRgNC10YXQvtC0IgorCisjOiBnaXRrOjg2MDIKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICLQkNC60YLQuNCy0L3QsNGPINCy0LXRgtCy0Ywg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGD0LTQsNC70LXQvdCwIgorCisjOiBnaXRrOjg2MDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorItCh0L7RgdGC0L7Rj9C90LjRjyDQstC10YLQstC4ICVzINCx0L7Qu9GM0YjQtSDQvdC1INC/0YDQuNC90LDQtNC70LXQttCw0YIg0L3QuNC60LDQutC+0Lkg0LTRgNGD0LPQvtC5INCy0LXRgtCy0LguXG4iCisi0JTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YPQtNCw0LvQuNGC0Ywg0LLQtdGC0LLRjCAlcz8iCisKKyM6IGdpdGs6ODYzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAi0JzQtdGC0LrQuCDQuCDQstC10YLQstC4OiAlcyIKKworIzogZ2l0azo4NjU0Cittc2dpZCAiRmlsdGVyIgorbXNnc3RyICLQpNC40LvRjNGC0YDQvtCy0LDRgtGMIgorCisjOiBnaXRrOjg5NDkKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyLQntGI0LjQsdC60LAg0YfRgtC10L3QuNGPINC40YHRgtC+0YDQuNC4INC/0YDQvtC10LrRgtCwOyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQviDQstC10YLQstGP0YUg0Lgg0YHQvtGB0YLQvtGP0L3QuNGP0YUgIgorItCy0L7QutGA0YPQsyDQvNC10YLQvtC6ICjQtNC+L9C/0L7RgdC70LUpINC80L7QttC10YIg0LHRi9GC0Ywg0L3QtdC/0L7Qu9C90L7QuS4iCisKKyM6IGdpdGs6OTkzNQorbXNnaWQgIlRhZyIKK21zZ3N0ciAi0JzQtdGC0LrQsCIKKworIzogZ2l0azo5OTM1Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjk5ODMKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAi0KjRgNC40YTRgiBHaXRrIgorCisjOiBnaXRrOjEwMDAwCittc2dpZCAiQiIKK21zZ3N0ciAi0JYiCisKKyM6IGdpdGs6MTAwMDMKK21zZ2lkICJJIgorbXNnc3RyICLQmiIKKworIzogZ2l0azoxMDA5OAorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCBHaXRrIgorCisjOiBnaXRrOjEwMTAwCittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICLQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC60LDQt9CwINGB0L/QuNGB0LrQsCDRgdC+0YHRgtC+0Y/QvdC40LkiCisKKyM6IGdpdGs6MTAxMDMKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgItCc0LDQutGBLiDRiNC40YDQuNC90LAg0LPRgNCw0YTQsCAo0YHRgtGA0L7QuikiCisKKyM6IGdpdGs6MTAxMDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICLQnNCw0LrRgS4g0YjQuNGA0LjQvdCwINCz0YDQsNGE0LAgKCUg0YjQuNGA0LjQvdGLINC/0LDQvdC10LvQuCkiCisKKyM6IGdpdGs6MTAxMTEKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgItCf0L7QutCw0LfRi9Cy0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBnaXRrOjEwMTE0Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKK21zZ3N0ciAi0JLRi9C00LXQu9C40YLRjCBTSEExIgorCisjOiBnaXRrOjEwMTE4Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LrQsNC30LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXRrOjEwMTIwCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgItCo0LjRgNC40L3QsCDRgtCw0LHRg9C70Y/RhtC40LgiCisKKyM6IGdpdGs6MTAxMjMKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzIgorbXNnc3RyICLQn9C+0LrQsNC30YvQstCw0YLRjCDQsdC70LjQt9C60LjQtSDQvNC10YLQutC4IgorCisjOiBnaXRrOjEwMTI2Cittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICLQntCz0YDQsNC90LjRh9C40YLRjCDQv9C+0LrQsNC3INC40LfQvNC10L3QtdC90LjQuSDQstGL0LHRgNCw0L3QvdGL0LzQuCDRhNCw0LnQu9Cw0LzQuCIKKworIzogZ2l0azoxMDEyOQorbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICLQn9C+0LTQtNC10YDQttC60LAg0LrQvtC00LjRgNC+0LLQvtC6INCyINC+0YLQtNC10LvRjNC90YvRhSDRhNCw0LnQu9Cw0YUiCisKKyM6IGdpdGs6MTAxMzUKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCDQtNC70Y8g0L/QvtC60LDQt9CwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azoxMDEzNworbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAi0JLRi9Cx0LXRgNC40YLQtS4uLiIKKworIzogZ2l0azoxMDE0MgorbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICLQptCy0LXRgtCwOiDQvdCw0LbQvNC40YLQtSDQtNC70Y8g0LLRi9Cx0L7RgNCwIgorCisjOiBnaXRrOjEwMTQ1Cittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAi0KTQvtC9IgorCisjOiBnaXRrOjEwMTQ2IGdpdGs6MTAxNzYKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICLRhNC+0L0iCisKKyM6IGdpdGs6MTAxNDkKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICLQn9C10YDQtdC00L3QuNC5INC/0LvQsNC9IgorCisjOiBnaXRrOjEwMTUwCittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAi0L/QtdGA0LXQtNC90LjQuSDQv9C70LDQvSIKKworIzogZ2l0azoxMDE1MworbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPOiDRgdGC0LDRgNGL0Lkg0YLQtdC60YHRgiIKKworIzogZ2l0azoxMDE1NAorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICLRgdGC0LDRgNGL0Lkg0YLQtdC60YHRgiDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGdpdGs6MTAxNTgKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjzog0L3QvtCy0YvQuSDRgtC10LrRgdGCIgorCisjOiBnaXRrOjEwMTU5Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgItC90L7QstGL0Lkg0YLQtdC60YHRgiDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGdpdGs6MTAxNjMKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPOiDQt9Cw0LPQvtC70L7QstC+0Log0LHQu9C+0LrQsCIKKworIzogZ2l0azoxMDE2NQorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgItC30LDQs9C+0LvQvtCy0L7QuiDQsdC70L7QutCwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azoxMDE2OQorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICLQpNC+0L0g0LLRi9Cx0YDQsNC90L3QvtC5INGB0YLRgNC+0LrQuCIKKworIzogZ2l0azoxMDE3MQorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgItGE0L7QvSDQstGL0LHRgNCw0L3QvdC+0Lkg0YHRgtGA0L7QutC4IgorCisjOiBnaXRrOjEwMTc1Cittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICLQktGL0LHQtdGA0LjRgtC1INGE0L7QvSIKKworIzogZ2l0azoxMDE3OQorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgItCo0YDQuNGE0YI6INC90LDQttC80LjRgtC1INC00LvRjyDQstGL0LHQvtGA0LAiCisKKyM6IGdpdGs6MTAxODEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgItCe0YHQvdC+0LLQvdC+0Lkg0YjRgNC40YTRgiIKKworIzogZ2l0azoxMDE4MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICLQqNGA0LjRhNGCINC/0L7QutCw0LfQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MTAxODMKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICLQqNGA0LjRhNGCINC40L3RgtC10YDRhNC10LnRgdCwIgorCisjOiBnaXRrOjEwMjEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azog0LLRi9Cx0LXRgNC40YLQtSDRhtCy0LXRgiDQtNC70Y8gJXMiCisKKyM6IGdpdGs6MTA2NTYKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyLQmiDRgdC+0LbQsNC70LXQvdC40Y4gZ2l0ayDQvdC1INC80L7QttC10YIg0YDQsNCx0L7RgtCw0YLRjCDRgSDRjdGC0L7QuSDQstC10YDRgdC40LkgVGNsL1RrLlxuIgorItCi0YDQtdCx0YPQtdGC0YHRjyDQutCw0Log0LzQuNC90LjQvNGD0LwgVGNsL1RrIDguNC4iCisKKyM6IGdpdGs6MTA3NzMKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJHaXQt0YDQtdC/0L7Qt9C40YLQsNGA0LjQuSDQvdC1INC90LDQudC00LXQvSDQsiDRgtC10LrRg9GJ0LXQvCDQutCw0YLQsNC70L7Qs9C1LiIKKworIzogZ2l0azoxMDc3NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCittc2dzdHIgIkdpdC3RgNC10L/QvtC30LjRgtCw0YDQuNC5IFwiJXNcIiDQvdC1INC90LDQudC00LXQvS4iCisKKyM6IGdpdGs6MTA4MjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgItCd0LXQvtC00L3QvtC30L3QsNGH0L3Ri9C5INCw0YDQs9GD0LzQtdC90YIgJyVzJzog0YHRg9GJ0LXRgdGC0LLRg9C10YIg0LrQsNC6INCy0LXRgNGB0LjRjyDQuCDQuNC80Y8g0YTQsNC50LvQsCIKKworIzogZ2l0azoxMDgzNgorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90YvQtSDQsNGA0LPRg9C80LXQvdGC0Ysg0LTQu9GPIGdpdGs6IgorCisjOiBnaXRrOjEwODk2Cittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICLQmtC+0LzQsNC90LTQvdCw0Y8g0YHRgtGA0L7QutCwIgorCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9zdi5wbyBiL2dpdGstZ2l0L3BvL3N2LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMDdhMmUKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9zdi5wbwpAQCAtMCwwICsxLDEzMDIgQEAKKyMgU3dlZGlzaCB0cmFuc2xhdGlvbiBmb3IgZ2l0aworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBQYXVsIE1hY2tlcnJhcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIworIyBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4sIDIwMDgtMjAxMC4KKyMgTWlrYWVsIE1hZ251c3NvbiA8bWlrYWNodUBnbWFpbC5jb20+LCAyMDA4LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogc3ZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDktMTIgMjE6MTQrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDktMTIgMjE6MTYrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8dHAtc3ZAbGlzdG9yLnRwLXN2LnNlPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCIKKworIzogZ2l0azoxMTUKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIkt1bmRlIGludGUgaMOkbXRhIGxpc3RhIMO2dmVyIGVqIHNhbW1hbnNsYWduYSBmaWxlcjoiCisKKyM6IGdpdGs6Mjc0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJGZWwgdmlkIHRvbGtuaW5nIGF2IHJldmlzaW9uZXI6IgorCisjOiBnaXRrOjMzMAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIkZlbCB2aWQga8O2cm5pbmcgYXYgLS1hcmdzY21kLWtvbW1hbmRvOiIKKworIzogZ2l0azozNDMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJJbmdhIGZpbGVyIHZhbGRlczogLS1tZXJnZSBhbmdhdnMgbWVuIGRldCBmaW5ucyBpbmdhIGZpbGVyIHNvbSBpbnRlIGhhciAiCisic2xhZ2l0cyBzYW1tYW4uIgorCisjOiBnaXRrOjM0NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiSW5nYSBmaWxlciB2YWxkZXM6IC0tbWVyZ2UgYW5nYXZzIG1lbiBkZXQgZmlubnMgaW5nYSBmaWxlciBpbm9tICIKKyJmaWxiZWdyw6Ruc25pbmdlbi4iCisKKyM6IGdpdGs6MzY4IGdpdGs6NTE2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJGZWwgdmlkIGvDtnJuaW5nIGF2IGdpdCBsb2c6IgorCisjOiBnaXRrOjM4NiBnaXRrOjUzMgorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIkzDpHNlciIKKworIzogZ2l0azo0NDYgZ2l0azo0MjcxCittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJMw6RzZXIgaW5jaGVja25pbmdhci4uLiIKKworIzogZ2l0azo0NDkgZ2l0azoxNTgwIGdpdGs6NDI3NAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIkluZ2EgaW5jaGVja25pbmdhciBtYXJrZXJhZGUiCisKKyM6IGdpdGs6MTQ1NgorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiS2FuIGludGUgdG9sa2EgdXRkYXRhIGZyw6VuIGdpdCBsb2c6IgorCisjOiBnaXRrOjE2NzYKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJJbmdlbiBpbmNoZWNrbmluZ3NpbmZvcm1hdGlvbiDDpHIgdGlsbGfDpG5nbGlnIgorCisjOiBnaXRrOjE4MTgKK21zZ2lkICJtYyIKK21zZ3N0ciAibWMiCisKKyM6IGdpdGs6MTg1MyBnaXRrOjQwNjQgZ2l0azo5MDY3IGdpdGs6MTA2MDcgZ2l0azoxMDgxNworbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ2l0azoxODU1IGdpdGs6NDA2NiBnaXRrOjg2NTcgZ2l0azo4NzM2IGdpdGs6ODg1MSBnaXRrOjg5MDAgZ2l0azo5MDY5CisjOiBnaXRrOjEwNjA4IGdpdGs6MTA4MTgKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkF2YnJ5dCIKKworIzogZ2l0azoxOTgwCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJVcHBkYXRlcmEiCisKKyM6IGdpdGs6MTk4MQorbXNnaWQgIlJlbG9hZCIKK21zZ3N0ciAiTGFkZGEgb20iCisKKyM6IGdpdGs6MTk4MgorbXNnaWQgIlJlcmVhZCByZWZlcmVuY2VzIgorbXNnc3RyICJMw6RzIG9tIHJlZmVyZW5zZXIiCisKKyM6IGdpdGs6MTk4MworbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiVmlzYSByZWZlcmVuc2VyIgorCisjOiBnaXRrOjE5ODUKK21zZ2lkICJTdGFydCBnaXQgZ3VpIgorbXNnc3RyICJTdGFydGEgZ2l0IGd1aSIKKworIzogZ2l0azoxOTg3Cittc2dpZCAiUXVpdCIKK21zZ3N0ciAiQXZzbHV0YSIKKworIzogZ2l0azoxOTc5Cittc2dpZCAiRmlsZSIKK21zZ3N0ciAiQXJraXYiCisKKyM6IGdpdGs6MTk5MQorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICJJbnN0w6RsbG5pbmdhciIKKworIzogZ2l0azoxOTkwCittc2dpZCAiRWRpdCIKK21zZ3N0ciAiUmVkaWdlcmEiCisKKyM6IGdpdGs6MTk5NQorbXNnaWQgIk5ldyB2aWV3Li4uIgorbXNnc3RyICJOeSB2eS4uLiIKKworIzogZ2l0azoxOTk2Cittc2dpZCAiRWRpdCB2aWV3Li4uIgorbXNnc3RyICLDhG5kcmEgdnkuLi4iCisKKyM6IGdpdGs6MTk5NworbXNnaWQgIkRlbGV0ZSB2aWV3IgorbXNnc3RyICJUYSBib3J0IHZ5IgorCisjOiBnaXRrOjE5OTkKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgIkFsbGEgZmlsZXIiCisKKyM6IGdpdGs6MTk5NCBnaXRrOjM4MTcKK21zZ2lkICJWaWV3IgorbXNnc3RyICJWaXNhIgorCisjOiBnaXRrOjIwMDQgZ2l0azoyMDE0IGdpdGs6Mjc4NworbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgIk9tIGdpdGsiCisKKyM6IGdpdGs6MjAwNSBnaXRrOjIwMTkKK21zZ2lkICJLZXkgYmluZGluZ3MiCittc2dzdHIgIlRhbmdlbnRib3Jkc2JpbmRuaW5nYXIiCisKKyM6IGdpdGs6MjAwMyBnaXRrOjIwMTgKK21zZ2lkICJIZWxwIgorbXNnc3RyICJIasOkbHAiCisKKyM6IGdpdGs6MjA5NiBnaXRrOjgxMzIKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMS1pZDoiCisKKyM6IGdpdGs6MjEyNworbXNnaWQgIlJvdyIKK21zZ3N0ciAiUmFkIgorCisjOiBnaXRrOjIxNjUKK21zZ2lkICJGaW5kIgorbXNnc3RyICJTw7ZrIgorCisjOiBnaXRrOjIxNjYKK21zZ2lkICJuZXh0IgorbXNnc3RyICJuw6RzdGEiCisKKyM6IGdpdGs6MjE2NworbXNnaWQgInByZXYiCittc2dzdHIgImbDtnJlZyIKKworIzogZ2l0azoyMTY4Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJpbmNoZWNrbmluZyIKKworIzogZ2l0azoyMTcxIGdpdGs6MjE3MyBnaXRrOjQ0MzIgZ2l0azo0NDU1IGdpdGs6NDQ3OSBnaXRrOjY0MjAgZ2l0azo2NDkyCisjOiBnaXRrOjY1NzYKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAic29tIGlubmVow6VsbGVyOiIKKworIzogZ2l0azoyMTc0IGdpdGs6MzI5OCBnaXRrOjMzMDMgZ2l0azo0NTA3Cittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJzb20gcsO2ciBzw7ZrdsOkZzoiCisKKyM6IGdpdGs6MjE3NSBnaXRrOjQ1MTIKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAic29tIGzDpGdnZXIvdGlsbCB0YXIgYm9ydCBzdHLDpG5nOiIKKworIzogZ2l0azoyMTg0IGdpdGs6MjE4NgorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJFeGFrdCIKKworIzogZ2l0azoyMTg2IGdpdGs6NDU4NyBnaXRrOjYzODgKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICJJZ25WZXJzYWxlciIKKworIzogZ2l0azoyMTg2IGdpdGs6NDQ4MSBnaXRrOjQ1ODUgZ2l0azo2Mzg0Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJSZWcudXR0ci4iCisKKyM6IGdpdGs6MjE4OCBnaXRrOjIxODkgZ2l0azo0NjA2IGdpdGs6NDYzNiBnaXRrOjQ2NDMgZ2l0azo2NTEyIGdpdGs6NjU4MAorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIkFsbGEgZsOkbHQiCisKKyM6IGdpdGs6MjE4OSBnaXRrOjQ2MDQgZ2l0azo0NjM2IGdpdGs6NjQ1MQorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICJSdWJyaWsiCisKKyM6IGdpdGs6MjE5MCBnaXRrOjQ2MDQgZ2l0azo2NDUxIGdpdGs6NjU4MCBnaXRrOjcwMTMKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiS29tbWVudGFyZXIiCisKKyM6IGdpdGs6MjE5MCBnaXRrOjQ2MDQgZ2l0azo0NjA4IGdpdGs6NDY0MyBnaXRrOjY0NTEgZ2l0azo2OTQ4IGdpdGs6ODMwNworIzogZ2l0azo4MzIyCittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJGw7ZyZmF0dGFyZSIKKworIzogZ2l0azoyMTkwIGdpdGs6NDYwNCBnaXRrOjY0NTEgZ2l0azo2OTUwCittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICJJbmNoZWNrYXJlIgorCisjOiBnaXRrOjIyMjEKK21zZ2lkICJTZWFyY2giCittc2dzdHIgIlPDtmsiCisKKyM6IGdpdGs6MjIyOQorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmYiCisKKyM6IGdpdGs6MjIzMQorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICJHYW1tYWwgdmVyc2lvbiIKKworIzogZ2l0azoyMjMzCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIk55IHZlcnNpb24iCisKKyM6IGdpdGs6MjIzNQorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIlJhZGVyIHNhbW1hbmhhbmciCisKKyM6IGdpdGs6MjI0NQorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIklnbm9yZXJhIMOkbmRyaW5nYXIgaSBibGFua3N0ZWciCisKKyM6IGdpdGs6MjMwNAorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXRjaCIKKworIzogZ2l0azoyMzA2Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiVHLDpGQiCisKKyM6IGdpdGs6MjQ2MyBnaXRrOjI0ODAKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIkRpZmYgZGVubmEgLT4gbWFya2VyYWQiCisKKyM6IGdpdGs6MjQ2NCBnaXRrOjI0ODEKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIkRpZmYgbWFya2VyYWQgLT4gZGVubmEiCisKKyM6IGdpdGs6MjQ2NSBnaXRrOjI0ODIKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJTa2FwYSBwYXRjaCIKKworIzogZ2l0azoyNDY2IGdpdGs6ODcxNQorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIlNrYXBhIHRhZ2ciCisKKyM6IGdpdGs6MjQ2NyBnaXRrOjg4MzEKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiU2tyaXYgaW5jaGVja25pbmcgdGlsbCBmaWwiCisKKyM6IGdpdGs6MjQ2OCBnaXRrOjg4ODgKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiU2thcGEgbnkgZ3JlbiIKKworIzogZ2l0azoyNDY5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIlBsb2NrYSBkZW5uYSBpbmNoZWNrbmluZyIKKworIzogZ2l0azoyNDcwCittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgSEVBRC1ncmVuZW4gaGl0IgorCisjOiBnaXRrOjI0NzEKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJNYXJrZXJhIGRlbm5hIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI0NzIKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiw4V0ZXJnw6UgdGlsbCBtYXJrZXJpbmciCisKKyM6IGdpdGs6MjQ3MworbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICJIaXR0YSBlZnRlcmbDtmxqYXJlIHRpbGwgZGVubmEgb2NoIG1hcmtlcmEiCisKKyM6IGdpdGs6MjQ3NAorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJKw6RtZsO2ciBtZWQgbWFya2VyYWQgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MjQ4OAorbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiQ2hlY2thIHV0IGRlbm5hIGdyZW4iCisKKyM6IGdpdGs6MjQ4OQorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiVGEgYm9ydCBkZW5uYSBncmVuIgorCisjOiBnaXRrOjI0OTYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIk1hcmtlcmEgw6R2ZW4gZGV0dGEiCisKKyM6IGdpdGs6MjQ5NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIk1hcmtlcmEgYmFyYSBkZXR0YSIKKworIzogZ2l0azoyNDk4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiRXh0ZXJuIGRpZmYiCisKKyM6IGdpdGs6MjQ5OQorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIktsYW5kcmEgZsO2csOkbGRyYWluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI1MDYKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIlZpc2EgdXJzcHJ1bmdldCBmw7ZyIGRlbiBow6RyIHJhZGVuIgorCisjOiBnaXRrOjI1MDcKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIkvDtnIgZ2l0IGd1aSBibGFtZSBww6UgZGVuIGjDpHIgcmFkZW4iCisKKyM6IGdpdGs6Mjc4OQorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqk5IDIwMDUtMjAxMCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gZW4gaW5jaGVja25pbmdzdmlzYXJlIGbDtnIgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpOSAyMDA1LTIwMTAgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJBbnbDpG5kIG9jaCB2aWRhcmVmw7ZybWVkbGEgZW5saWd0IHZpbGxrb3JlbiBpIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorCisjOiBnaXRrOjI3OTcgZ2l0azoyODYyIGdpdGs6OTI1MworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJTdMOkbmciCisKKyM6IGdpdGs6MjgxOAorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJUYW5nZW50Ym9yZHNiaW5kbmluZ2FyIGbDtnIgR2l0ayIKKworIzogZ2l0azoyODIxCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJUYW5nZW50Ym9yZHNiaW5kbmluZ2FyIGbDtnIgR2l0azoiCisKKyM6IGdpdGs6MjgyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0QXZzbHV0YSIKKworIzogZ2l0azoyODI0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdFN0w6RuZyBmw7Zuc3RlciIKKworIzogZ2l0azoyODI1Cittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx0R8OlIHRpbGwgZsO2cnN0YSBpbmNoZWNrbmluZyIKKworIzogZ2l0azoyODI2Cittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0R8OlIHRpbGwgc2lzdGEgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MjgyNworbXNnaWQgIjxVcD4sIHAsIGlcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwcD4sIHAsIGlcdEfDpSBlbiBpbmNoZWNrbmluZyB1cHAiCisKKyM6IGdpdGs6MjgyOAorbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxOZWQ+LCBuLCBrXHRHw6UgZW4gaW5jaGVja25pbmcgbmVkIgorCisjOiBnaXRrOjI4MjkKK21zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8VsOkbnN0ZXI+LCB6LCBqXHRHw6UgYmFrw6V0IGkgaGlzdG9yaWtlbiIKKworIzogZ2l0azoyODMwCittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxIw7ZnZXI+LCB4LCBsXHRHw6UgZnJhbcOldCBpIGhpc3RvcmlrZW4iCisKKyM6IGdpdGs6MjgzMQorbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0R8OlIHVwcCBlbiBzaWRhIGkgaW5jaGVja25pbmdzbGlzdGFuIgorCisjOiBnaXRrOjI4MzIKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdEfDpSBuZWQgZW4gc2lkYSBpIGluY2hlY2tuaW5nc2xpc3RhbiIKKworIzogZ2l0azoyODMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdFJ1bGxhIHRpbGwgYsO2cmphbiBhdiBpbmNoZWNrbmluZ3NsaXN0YW4iCisKKyM6IGdpdGs6MjgzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx0UnVsbGEgdGlsbCBzbHV0ZXQgYXYgaW5jaGVja25pbmdzbGlzdGFuIgorCisjOiBnaXRrOjI4MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcHA+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gdXBwIGV0dCBzdGVnIgorCisjOiBnaXRrOjI4MzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtTmVkPlx0UnVsbGEgaW5jaGVja25pbmdzbGlzdGFuIG5lZCBldHQgc3RlZyIKKworIzogZ2l0azoyODM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiB1cHAgZW4gc2lkYSIKKworIzogZ2l0azoyODM4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiBuZWQgZW4gc2lkYSIKKworIzogZ2l0azoyODM5Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2tpZnQtVXBwPlx0U8O2ayBiYWvDpXQgKHVwcMOldCwgc2VuYXJlIGluY2hlY2tuaW5nYXIpIgorCisjOiBnaXRrOjI4NDAKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNraWZ0LU5lZD5cdFPDtmsgZnJhbcOldCAobmVkw6V0LCB0aWRpZ2FyZSBpbmNoZWNrbmluZ2FyKSIKKworIzogZ2l0azoyODQxCittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgorCisjOiBnaXRrOjI4NDIKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJha3N0ZWc+XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgorCisjOiBnaXRrOjI4NDMKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPEJsYW5rc3RlZz5cdFJ1bGxhIGRpZmZ2aXNuaW5nZW4gbmVkIGVuIHNpZGEiCisKKyM6IGdpdGs6Mjg0NAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCAxOCByYWRlciIKKworIzogZ2l0azoyODQ1Cittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0UnVsbGEgZGlmZnZpc25pbmdlbiBuZWQgMTggcmFkZXIiCisKKyM6IGdpdGs6Mjg0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0U8O2ayIKKworIzogZ2l0azoyODQ3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdEfDpSB0aWxsIG7DpHN0YSBzw7ZrdHLDpGZmIgorCisjOiBnaXRrOjI4NDgKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiIKKworIzogZ2l0azoyODQ5Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRGb2t1c2VyYSBzw7ZrcnV0YW4iCisKKyM6IGdpdGs6Mjg1MAorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRHw6UgdGlsbCBmw7ZyZWfDpWVuZGUgc8O2a3Ryw6RmZiIKKworIzogZ2l0azoyODUxCittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHRpbGwgbsOkc3RhIGZpbCIKKworIzogZ2l0azoyODUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYgaSBkaWZmdmlzbmluZ2VuIgorCisjOiBnaXRrOjI4NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0R8OlIHRpbGwgZsO2cmVnw6VlbmRlIHPDtmt0csOkZmYgaSBkaWZmdmlzbmluZ2VuIgorCisjOiBnaXRrOjI4NTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtKz5cdMOWa2EgdGVja2Vuc3RvcmxlayIKKworIzogZ2l0azoyODU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx0w5ZrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjI4NTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtLT5cdE1pbnNrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjI4NTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdE1pbnNrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjI4NTgKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRVcHBkYXRlcmEiCisKKyM6IGdpdGs6MzMxMyBnaXRrOjMzMjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRmVsIHZpZCBza2FwYW5kZSBhdiB0ZW1wb3LDpHIga2F0YWxvZyAlczoiCisKKyM6IGdpdGs6MzMzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJGZWwgdmlkIGjDpG10bmluZyBhdiAgXCIlc1wiIGZyw6VuICVzOiIKKworIzogZ2l0azozMzk4Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJrb21tYW5kbyBtaXNzbHlja2FkZXM6IgorCisjOiBnaXRrOjM1NDcKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiSW5jaGVja25pbmcgc2FrbmFzIgorCisjOiBnaXRrOjM1NjEKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6IGtvbW1hbmRvIG1pc3NseWNrYWRlczoiCisKKyM6IGdpdGs6MzU5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIkt1bmRlIGludGUgbMOkc2Egc2FtbWFuc2xhZ25pbmdzaHV2dWQ6ICVzIgorCisjOiBnaXRrOjM2MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBhdiBpbmRleDogJXMiCisKKyM6IGdpdGs6MzYyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIkt1bmRlIGludGUgc3RhcnRhIGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6MzYyOCBnaXRrOjY0MTkKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIlPDtmtlciIKKworIzogZ2l0azozNjYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJGZWwgdmlkIGvDtnJuaW5nIGF2IGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6MzY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIlJhZGVuIGtvbW1lciBmcsOlbiBpbmNoZWNrbmluZ2VuICVzLCBzb20gaW50ZSBmaW5ucyBpIGRlbm5hIHZ5IgorCisjOiBnaXRrOjM3MDIKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJFeHRlcm50IGRpZmYtdmVya3R5ZyBtaXNzbHlja2FkZXM6IgorCisjOiBnaXRrOjM4MjAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRGVmaW5pdGlvbiBhdiBHaXRrLXZ5IgorCisjOiBnaXRrOjM4MjQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlNwYXJhIGRlbm5hIHZ5IgorCisjOiBnaXRrOjM4MjUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSZWZlcmVuc2VyIChibGFua3N0ZWdzYXZkZWxhZCBsaXN0YSk6IgorCisjOiBnaXRrOjM4MjYKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJHcmVuYXIgJiB0YWdnYXI6IgorCisjOiBnaXRrOjM4MjcKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiQWxsYSByZWZlcmVuc2VyIgorCisjOiBnaXRrOjM4MjgKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiQWxsYSAobG9rYWxhKSBncmVuYXIiCisKKyM6IGdpdGs6MzgyOQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJBbGxhIHRhZ2dhciIKKworIzogZ2l0azozODMwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiQWxsYSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIgorCisjOiBnaXRrOjM4MzEKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJJbmNoZWNrbmluZ3NpbmZvIChyZWd1bGrDpHJhIHV0dHJ5Y2spOiIKKworIzogZ2l0azozODMyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiRsO2cmZhdHRhcmU6IgorCisjOiBnaXRrOjM4MzMKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJJbmNoZWNrYXJlOiIKKworIzogZ2l0azozODM0Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJJbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKKworIzogZ2l0azozODM1Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIk1vdHN2YXJhciBhbGxhIGtyaXRlcmllciBmw7ZyIGluY2hlY2tuaW5nc2luZm8iCisKKyM6IGdpdGs6MzgzNgorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICLDhG5kcmluZ2FyIGF2IGZpbGVyOiIKKworIzogZ2l0azozODM3Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJGYXN0IHN0csOkbmciCisKKyM6IGdpdGs6MzgzOAorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiUmVndWxqw6RydCB1dHRyeWNrIgorCisjOiBnaXRrOjM4MzkKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiU8O2a3N0csOkbmc6IgorCisjOiBnaXRrOjM4NDAKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJJbmNoZWNraW5nc2RhdHVtIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCisKKyM6IGdpdGs6Mzg0MQorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiRnLDpW46IgorCisjOiBnaXRrOjM4NDIKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIlRpbGw6IgorCisjOiBnaXRrOjM4NDMKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiQmVncsOkbnNhIG9jaC9lbGxlciBob3BwYSDDtnZlciBldHQgYW50YWwgcmV2aXNpb25lciAocG9zaXRpdnQgaGVsdGFsKToiCisKKyM6IGdpdGs6Mzg0NAorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiQW50YWwgYXR0IHZpc2E6IgorCisjOiBnaXRrOjM4NDUKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIkFudGFsIGF0dCBob3BwYSDDtnZlcjoiCisKKyM6IGdpdGs6Mzg0NgorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIkRpdmVyc2UgYWx0ZXJuYXRpdjoiCisKKyM6IGdpdGs6Mzg0NworbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAiU3RyaWt0IGRhdHVtc29ydGVyaW5nIgorCisjOiBnaXRrOjM4NDgKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiTWFya2VyYSBzaWRvZ3JlbmFyIgorCisjOiBnaXRrOjM4NDkKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIkJlZ3LDpG5zYSB0aWxsIGbDtnJzdGEgZsO2csOkbGRlciIKKworIzogZ2l0azozODUwCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkVua2VsIGhpc3RvcmlrIgorCisjOiBnaXRrOjM4NTEKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiWXR0ZXJsaWdhcmUgYXJndW1lbnQgdGlsbCBnaXQgbG9nOiIKKworIzogZ2l0azozODUyCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkFuZ2UgZmlsZXIgb2NoIGthdGFsb2dlciBhdHQgdGEgbWVkLCBlbiBwZXIgcmFkOiIKKworIzogZ2l0azozODUzCittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIktvbW1hbmRvIGbDtnIgYXR0IGdlbmVyZXJhIGZsZXIgaW5jaGVja25pbmdhciBhdHQgdGEgbWVkOiIKKworIzogZ2l0azozOTc3Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiByZWRpZ2VyYSB2eSIKKworIzogZ2l0azozOTg1Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIiAtIGtyaXRlcmllciBmw7ZyIHZhbCBhdiByZXZpc2lvbmVyIgorCisjOiBnaXRrOjM5OTAKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk5hbW4gcMOlIHZ5IgorCisjOiBnaXRrOjQwNjUKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICJBbnbDpG5kIChGNSkiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRmVsIGkgYXJndW1lbnQgZsO2ciB2YWwgYXYgaW5jaGVja25pbmdhcjoiCisKKyM6IGdpdGs6NDE1NiBnaXRrOjQyMDggZ2l0azo0NjU2IGdpdGs6NDY3MCBnaXRrOjU5MzEgZ2l0azoxMTU1MSBnaXRrOjExNTUyCittc2dpZCAiTm9uZSIKK21zZ3N0ciAiSW5nZXQiCisKKyM6IGdpdGs6NDYwNCBnaXRrOjY0NTEgZ2l0azo4MzA5IGdpdGs6ODMyNAorbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdHVtIgorCisjOiBnaXRrOjQ2MDQgZ2l0azo2NDUxCittc2dpZCAiQ0RhdGUiCittc2dzdHIgIlNrYXBhdCBkYXR1bSIKKworIzogZ2l0azo0NzUzIGdpdGs6NDc1OAorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkF2a29tbGluZyIKKworIzogZ2l0azo0NzU0Cittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIkludGUgYXZrb21saW5nIgorCisjOiBnaXRrOjQ3NjEgZ2l0azo0NzY2Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgIkbDtnJmYWRlciIKKworIzogZ2l0azo0NzYyCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJJbnRlIGbDtnJmYWRlciIKKworIzogZ2l0azo1MDUyCittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJMb2thbGEgw6RuZHJpbmdhciBzcGFyYWRlIGkgaW5kZXhldCBtZW4gaW50ZSBpbmNoZWNrYWRlIgorCisjOiBnaXRrOjUwODgKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTG9rYWxhIMOkbmRyaW5nYXIsIGVqIHNwYXJhZGUgaSBpbmRleGV0IgorCisjOiBnaXRrOjY3NjkKK21zZ2lkICJtYW55IgorbXNnc3RyICJtw6VuZ2EiCisKKyM6IGdpdGs6Njk1MgorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJUYWdnYXI6IgorCisjOiBnaXRrOjY5NjkgZ2l0azo2OTc1IGdpdGs6ODMwMgorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiRsO2csOkbGRlciIKKworIzogZ2l0azo2OTgwCittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkJhcm4iCisKKyM6IGdpdGs6Njk4OQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiR3JlbiIKKworIzogZ2l0azo2OTkyCittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiRsO2bGplciIKKworIzogZ2l0azo2OTk1Cittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIkbDtnJlZ8OlciIKKworIzogZ2l0azo3NTMyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkZlbCB2aWQgaMOkbXRuaW5nIGF2IGRpZmY6ICVzIgorCisjOiBnaXRrOjgxMzAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiR8OlIHRpbGw6IgorCisjOiBnaXRrOjgxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiRsO2cmtvcnRhdCBTSEExLWlkICVzIMOkciB0dmV0eWRpZ3QiCisKKyM6IGdpdGs6ODE1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiUmV2aXNpb25lbiAlcyDDpHIgaW50ZSBrw6RuZCIKKworIzogZ2l0azo4MTY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlNIQS1pZDp0ICVzIMOkciBpbnRlIGvDpG50IgorCisjOiBnaXRrOjgxNzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiUmV2aXNpb25lbiAlcyBmaW5ucyBpbnRlIGkgZGVuIG51dmFyYW5kZSB2eW4iCisKKyM6IGdpdGs6ODMxMgorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJCYXJuIgorCisjOiBnaXRrOjgzNzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgZ3JlbmVuICVzIGhpdCIKKworIzogZ2l0azo4MzcyCittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIkZyw6Vua29wcGxhZCBoZWFkOiBrYW4gaW50ZSDDpXRlcnN0w6RsbGEiCisKKyM6IGdpdGs6ODQ4MSBnaXRrOjg0ODcKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICJIb3BwYXIgw7Z2ZXIgc2FtbWFuc2xhZ25pbmdzaW5jaGVja25pbmcgIgorCisjOiBnaXRrOjg0OTYgZ2l0azo4NTAxCittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJGZWwgdmlkIGjDpG10bmluZyBhdiBwYXRjaC1pZCBmw7ZyICIKKworIzogZ2l0azo4NDk3IGdpdGs6ODUwMgorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIHN0YW5uYXJcbiIKKworIzogZ2l0azo4NTA3IGdpdGs6ODUxMCBnaXRrOjg1MTggZ2l0azo4NTMyIGdpdGs6ODU0MQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkluY2hlY2tuaW5nICIKKworIzogZ2l0azo4NTExCittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgw6RyIHNhbW1hIHBhdGNoIHNvbVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODUxOQorbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBza2lsamVyIHNpZyBmcsOlblxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6ODUyMQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJTa2lsbG5hZCBtZWxsYW4gaW5jaGVja25pbmdhcjpcbiIKKyJcbiIKKworIzogZ2l0azo4NTMzIGdpdGs6ODU0MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgaGFyICVzIGJhcm4gLSBzdGFubmFyXG4iCisKKyM6IGdpdGs6ODU2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBpbmNoZWNrbmluZyB0aWxsIGZpbDogJXMiCisKKyM6IGdpdGs6ODU2NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkZlbCB2aWQgasOkbWbDtnJlbHNlIGF2IGluY2hlY2tuaW5nYXI6ICVzIgorCisjOiBnaXRrOjg1OTgKK21zZ2lkICJUb3AiCittc2dzdHIgIlRvcHAiCisKKyM6IGdpdGs6ODU5OQorbXNnaWQgIkZyb20iCittc2dzdHIgIkZyw6VuIgorCisjOiBnaXRrOjg2MDQKK21zZ2lkICJUbyIKK21zZ3N0ciAiVGlsbCIKKworIzogZ2l0azo4NjI4Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlbmVyZXJhIHBhdGNoIgorCisjOiBnaXRrOjg2MzAKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRnLDpW46IgorCisjOiBnaXRrOjg2MzkKK21zZ2lkICJUbzoiCittc2dzdHIgIlRpbGw6IgorCisjOiBnaXRrOjg2NDgKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJWw6RuZCIKKworIzogZ2l0azo4NjUwIGdpdGs6ODg0NQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiVXRkYXRhZmlsOiIKKworIzogZ2l0azo4NjU2Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyZXJhIgorCisjOiBnaXRrOjg2OTQKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkZlbCB2aWQgZ2VuZXJlcmluZyBhdiBwYXRjaDoiCisKKyM6IGdpdGs6ODcxNyBnaXRrOjg4MzMgZ2l0azo4ODkwCittc2dpZCAiSUQ6IgorbXNnc3RyICJJZDoiCisKKyM6IGdpdGs6ODcyNgorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAiVGFnZ25hbW46IgorCisjOiBnaXRrOjg3MjkKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAiVGFnZ21lZGRlbGFuZGV0IMOkciB2YWxmcml0dCIKKworIzogZ2l0azo4NzMxCittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICJUYWdnbWVkZGVsYW5kZToiCisKKyM6IGdpdGs6ODczNSBnaXRrOjg4OTkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlNrYXBhIgorCisjOiBnaXRrOjg3NTMKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIkluZ2V0IHRhZ2duYW1uIGFuZ2F2cyIKKworIzogZ2l0azo4NzU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiVGFnZ2VuIFwiJXNcIiBmaW5ucyByZWRhbiIKKworIzogZ2l0azo4NzY3Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRmVsIHZpZCBza2FwYW5kZSBhdiB0YWdnOiIKKworIzogZ2l0azo4ODQyCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIktvbW1hbmRvOiIKKworIzogZ2l0azo4ODUwCittc2dpZCAiV3JpdGUiCittc2dzdHIgIlNrcml2IgorCisjOiBnaXRrOjg4NjgKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkZlbCB2aWQgc2tyaXZuaW5nIGF2IGluY2hlY2tuaW5nOiIKKworIzogZ2l0azo4ODk1Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5hbW46IgorCisjOiBnaXRrOjg5MTgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJBbmdlIGV0dCBuYW1uIGbDtnIgZGVuIG55YSBncmVuZW4iCisKKyM6IGdpdGs6ODkyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJHcmVuZW4gXCIlc1wiIGZpbm5zIHJlZGFuLiBTa3JpdmEgw7Z2ZXI/IgorCisjOiBnaXRrOjg5ODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorIkluY2hlY2tuaW5nZW4gJXMgZmlubnMgcmVkYW4gcMOlIGdyZW5lbiAlcyAtLSBza2FsbCBkZW4gdmVya2xpZ2VuIGFwcGxpY2VyYXMgIgorInDDpSBueXR0PyIKKworIzogZ2l0azo4OTk0Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIlBsb2NrYXIiCisKKyM6IGdpdGs6OTAwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJDaGVycnktcGljayBtaXNzbHlja2FkZXMgcMOlIGdydW5kIGF2IGxva2FsYSDDpG5kcmluZ2FyIGkgZmlsZW4gXCIlc1wiLlxuIgorIkNoZWNrYSBpbiwgw6V0ZXJzdMOkbGwgZWxsZXIgc3BhcmEgdW5kYW4gKHN0YXNoKSBkaW5hIMOkbmRyaW5nYXIgb2NoIGbDtnJzw7ZrICIKKyJpZ2VuLiIKKworIzogZ2l0azo5MDA5Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiQ2hlcnJ5LXBpY2sgbWlzc2x5Y2thZGVzIHDDpSBncnVuZCBhdiBlbiBzYW1tYW5zbGFnbmluZ3Nrb25mbGlrdC5cbiIKKyJWaWxsIGR1IGvDtnJhIGdpdCBjaXRvb2wgZsO2ciBhdHQgbMO2c2EgZGVuPyIKKworIzogZ2l0azo5MDI1Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIkluZ2Egw6RuZHJpbmdhciBpbmNoZWNrYWRlIgorCisjOiBnaXRrOjkwNTEKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJCZWtyw6RmdGEgw6V0ZXJzdMOkbGxuaW5nIgorCisjOiBnaXRrOjkwNTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICLDhXRlcnN0w6RsbGEgZ3JlbmVuICVzIHRpbGwgJXM/IgorCisjOiBnaXRrOjkwNTUKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVHlwIGF2IMOldGVyc3TDpGxsbmluZzoiCisKKyM6IGdpdGs6OTA1OAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJNanVrOiBSw7ZyIGludGUgdXRjaGVja25pbmcgb2NoIGluZGV4IgorCisjOiBnaXRrOjkwNjEKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIkJsYW5kYWQ6IFLDtnIgaW50ZSB1dGNoZWNrbmluZywgw6V0ZXJzdMOkbGwgaW5kZXgiCisKKyM6IGdpdGs6OTA2NAorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiSMOlcmQ6IMOFdGVyc3TDpGxsIHV0Y2hlY2tuaW5nIG9jaCBpbmRleFxuIgorIihmw7Zya2FzdGFyIEFMTEEgbG9rYWxhIMOkbmRyaW5nYXIpIgorCisjOiBnaXRrOjkwODEKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIsOFdGVyc3TDpGxsZXIiCisKKyM6IGdpdGs6OTE0MQorbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiQ2hlY2thciB1dCIKKworIzogZ2l0azo5MTk0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiS2FuIGludGUgdGEgYm9ydCBkZW4ganVzdCBudSB1dGNoZWNrYWRlIGdyZW5lbiIKKworIzogZ2l0azo5MjAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJJbmNoZWNrbmluZ2FybmEgcMOlIGdyZW5lbiAlcyBleGlzdGVyYXIgaW50ZSBww6UgbsOlZ29uIGFubmFuIGdyZW4uXG4iCisiVmlsbCBkdSB2ZXJrbGlnZW4gdGEgYm9ydCBncmVuZW4gJXM/IgorCisjOiBnaXRrOjkyMzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIlRhZ2dhciBvY2ggaHV2dWRlbjogJXMiCisKKyM6IGdpdGs6OTI0NgorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdGVyIgorCisjOiBnaXRrOjk1NDEKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJGZWwgdmlkIGzDpHNuaW5nIGF2IGluZm9ybWF0aW9uIG9tIGluY2hlY2tuaW5nc3RvcG9sb2dpOyBpbmZvcm1hdGlvbiBvbSAiCisiZ3JlbmFyIG9jaCBmw7ZyZWfDpWVuZGUvc2VuYXJlIHRhZ2dhciBrb21tZXIgaW50ZSB2YXJhIGtvbXBsZXR0LiIKKworIzogZ2l0azoxMDUyNworbXNnaWQgIlRhZyIKK21zZ3N0ciAiVGFnZyIKKworIzogZ2l0azoxMDUyNworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMDU3NgorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJUZWNrZW5zbml0dHN2w6RsamFyZSBmw7ZyIEdpdGsiCisKKyM6IGdpdGs6MTA1OTMKK21zZ2lkICJCIgorbXNnc3RyICJGIgorCisjOiBnaXRrOjEwNTk2Cittc2dpZCAiSSIKK21zZ3N0ciAiSyIKKworIzogZ2l0azoxMDcxNAorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIkluc3TDpGxsbmluZ2FyIGbDtnIgR2l0ayIKKworIzogZ2l0azoxMDcxNgorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGluY2hlY2tuaW5nc2xpc3R2eSIKKworIzogZ2l0azoxMDcxOQorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAiTWF4aW1hbCBncmFmYnJlZGQgKHJhZGVyKSIKKworIzogZ2l0azoxMDcyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIk1heGltYWwgZ3JhZmJyZWRkICglIGF2IHJ1dGEpIgorCisjOiBnaXRrOjEwNzI1Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJWaXNhIGxva2FsYSDDpG5kcmluZ2FyIgorCisjOiBnaXRrOjEwNzI4Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKK21zZ3N0ciAiVsOkbGogU0hBMSBhdXRvbWF0aXNrdCIKKworIzogZ2l0azoxMDczMQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIkTDtmxqIGZqw6Ryci1yZWZlcmVuc2VyIgorCisjOiBnaXRrOjEwNzM1Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBkaWZmdnkiCisKKyM6IGdpdGs6MTA3MzcKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiQmxhbmtzdGVnIGbDtnIgdGFidWxhdG9ydGVja2VuIgorCisjOiBnaXRrOjEwNzQwCittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncyIKK21zZ3N0ciAiVmlzYSBuw6RybGlnZ2FuZGUgdGFnZ2FyIgorCisjOiBnaXRrOjEwNzQzCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJCZWdyw6Ruc2EgZGlmZiB0aWxsIGxpc3RhZGUgc8O2a3bDpGdhciIKKworIzogZ2l0azoxMDc0NgorbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICJTdMO2ZCBmw7ZyIGZpbHNwZWNpZmlrYSB0ZWNrZW5rb2RuaW5nYXIiCisKKyM6IGdpdGs6MTA3NTIgZ2l0azoxMDgzMgorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiRXh0ZXJudCBkaWZmLXZlcmt0eWciCisKKyM6IGdpdGs6MTA3NTMKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIlbDpGxqLi4uIgorCisjOiBnaXRrOjEwNzU4Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJBbGxtw6RubmEgaW5zdMOkbGxuaW5nYXIiCisKKyM6IGdpdGs6MTA3NjEKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIkFudsOkbmQgdGVtYSBww6UgZsO2bnN0ZXJlbGVtZW50IgorCisjOiBnaXRrOjEwNzYzCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKMOkbmRyaW5nZW4ga3LDpHZlciBvbXN0YXJ0KSIKKworIzogZ2l0azoxMDc2NQorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIoZsO2ciBuw6RydmFyYW5kZSBpbnRlIHRpbGxnw6RuZ2xpZ3QpIgorCisjOiBnaXRrOjEwNzY5Cittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkbDpHJnZXI6IHRyeWNrIGbDtnIgYXR0IHbDpGxqYSIKKworIzogZ2l0azoxMDc3MgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiR3LDpG5zc25pdHQiCisKKyM6IGdpdGs6MTA3NzMKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgImdyw6Ruc3NuaXR0IgorCisjOiBnaXRrOjEwNzc2Cittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiQmFrZ3J1bmQiCisKKyM6IGdpdGs6MTA3NzcgZ2l0azoxMDgwNworbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgImJha2dydW5kIgorCisjOiBnaXRrOjEwNzgwCittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiRsO2cmdydW5kIgorCisjOiBnaXRrOjEwNzgxCittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAiZsO2cmdydW5kIgorCisjOiBnaXRrOjEwNzg0Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmOiBnYW1sYSByYWRlciIKKworIzogZ2l0azoxMDc4NQorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZmIGdhbWxhIHJhZGVyIgorCisjOiBnaXRrOjEwNzg5Cittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiBueWEgcmFkZXIiCisKKyM6IGdpdGs6MTA3OTAKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAiZGlmZiBueWEgcmFkZXIiCisKKyM6IGdpdGs6MTA3OTQKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZjogZGVsaHV2dWQiCisKKyM6IGdpdGs6MTA3OTYKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZmIGRlbGh1dnVkIgorCisjOiBnaXRrOjEwODAwCittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIk1hcmtlcmFkIHJhZCBiYWtncnVuZCIKKworIzogZ2l0azoxMDgwMgorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgIm1hcmtlcmFkIHJhZCBiYWtncnVuZCIKKworIzogZ2l0azoxMDgwNgorbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiTWFya2VyYWQgYmFrZ3J1bmQiCisKKyM6IGdpdGs6MTA4MTAKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJUZWNrZW5zbml0dDogdHJ5Y2sgZsO2ciBhdHQgdsOkbGphIgorCisjOiBnaXRrOjEwODEyCittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJIdXZ1ZHRlY2tlbnNuaXR0IgorCisjOiBnaXRrOjEwODEzCittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIlRlY2tlbnNuaXR0IGbDtnIgZGlmZnZpc25pbmciCisKKyM6IGdpdGs6MTA4MTQKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJUZWNrZW5zbml0dCBmw7ZyIGFudsOkbmRhcmdyw6Ruc3NuaXR0IgorCisjOiBnaXRrOjEwODQyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azogdsOkbGogZsOkcmcgZsO2ciAlcyIKKworIzogZ2l0azoxMTQ0NQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIkhpdHRhciBpbmdldCBnaXQtYXJraXYgaMOkci4iCisKKyM6IGdpdGs6MTE0NDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorbXNnc3RyICJIaXR0YXIgaW50ZSBnaXQta2F0YWxvZ2VuIFwiJXNcIi4iCisKKyM6IGdpdGs6MTE0OTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIlR2ZXR5ZGlndCBhcmd1bWVudCBcIiVzXCI6IGLDpWRlIHJldmlzaW9uIG9jaCBmaWxuYW1uIgorCisjOiBnaXRrOjExNTA4Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiRmVsYWt0aWdhIGFyZ3VtZW50IHRpbGwgZ2l0azoiCisKKyM6IGdpdGs6MTE2MDQKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIktvbW1hbmRvcmFkIgorCisjfiBtc2dpZCAiU0hBMSBJRDogIgorI34gbXNnc3RyICJTSEExLWlkOiAiCisKKyN+IG1zZ2lkICItIHN0b3BwaW5nXG4iCisjfiBtc2dzdHIgIi0gc3Rhbm5hclxuIgorCisjfiBtc2dpZCAiIgorI34gIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorI34gIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorI34gbXNnc3RyICIiCisjfiAiR2l0ayBrYW4gdHl2w6RyciBpbnRlIGvDtnJhIG1lZCBkZW5uYSB2ZXJzaW9uIGF2IFRjbC9Uay5cbiIKKyN+ICIgR2l0ayBrcsOkdmVyIMOldG1pbnN0b25lIFRjbC9UayA4LjQuIgorCisjfiBtc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgorI34gbXNnc3RyICJUYWdnL2h1dnVkICVzIMOkciBva8OkbnQiCisKKyN+IG1zZ2lkICIvXHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCwgb3IgcmVkbyBmaW5kIgorI34gbXNnc3RyICIvXHRcdEfDpSB0aWxsIG7DpHN0YSBzw7ZrdHLDpGZmLCBlbGxlciBzw7ZrIHDDpSBueXR0IgorCisjfiBtc2dpZCAiTmFtZSIKKyN+IG1zZ3N0ciAiTmFtbiIKZGlmZiAtLWdpdCBhL2dpdHdlYi9JTlNUQUxMIGIvZ2l0d2ViL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NTQwNgotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9JTlNUQUxMCkBAIC0wLDAgKzEsMzMyIEBACitHSVQgd2ViIEludGVyZmFjZSAoZ2l0d2ViKSBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXJzdCB5b3UgaGF2ZSB0byBnZW5lcmF0ZSBnaXR3ZWIuY2dpIGZyb20gZ2l0d2ViLnBlcmwgdXNpbmcKKyJtYWtlIGdpdHdlYiIsIHRoZW4gIm1ha2UgaW5zdGFsbC1naXR3ZWIiIGFwcHJvcHJpYXRlIGZpbGVzCisoZ2l0d2ViLmNnaSwgZ2l0d2ViLmpzLCBnaXR3ZWIuY3NzLCBnaXQtbG9nby5wbmcgYW5kIGdpdC1mYXZpY29uLnBuZykKK3RvIHRoZWlyIGRlc3RpbmF0aW9uLiBGb3IgZXhhbXBsZSBpZiBnaXQgd2FzIChvciBpcykgaW5zdGFsbGVkIHdpdGgKKy91c3IgcHJlZml4IGFuZCBnaXR3ZWJkaXIgaXMgL3Zhci93d3cvY2dpLWJpbiwgeW91IGNhbiBkbworCisJJCBtYWtlIHByZWZpeD0vdXNyIGdpdHdlYiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSMgbWFrZSBnaXR3ZWJkaXI9L3Zhci93d3cvY2dpLWJpbiBpbnN0YWxsLWdpdHdlYiAgICAgOyMgYXMgcm9vdAorCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdXNlIGF1dG9jb25mIGdlbmVyYXRlZCAuL2NvbmZpZ3VyZSBzY3JpcHQgdG8KK3NldCB1cCBwYXRoIHRvIGdpdCBiaW5hcmllcyAodmlhIGNvbmZpZy5tYWsuYXV0b2dlbiksIHNvIHlvdSBjYW4gd3JpdGUKK2luc3RlYWQKKworCSQgbWFrZSBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSQgLi9jb25maWd1cmUgLS1wcmVmaXg9L3VzciAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSQgbWFrZSBnaXR3ZWIgICAgICAgICAgICAgICAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSMgbWFrZSBnaXR3ZWJkaXI9L3Zhci93d3cvY2dpLWJpbiBcCisJICAgICAgIGluc3RhbGwtZ2l0d2ViICAgICAgICAgICAgICAgIDsjIGFzIHJvb3QKKworVGhlIGFib3ZlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHlvdXIgd2ViIHNlcnZlciBpcyBjb25maWd1cmVkIHRvIHJ1bgorW2V4ZWN1dGFibGVdIGZpbGVzIGluIC92YXIvd3d3L2NnaS1iaW4vIGFzIHNlcnZlciBzY3JpcHRzIChhcyBDR0kKK3NjcmlwdHMpLgorCisKK1JlcXVpcmVtZW50cworLS0tLS0tLS0tLS0tCisKKyAtIENvcmUgZ2l0IHRvb2xzCisgLSBQZXJsCisgLSBQZXJsIG1vZHVsZXM6IENHSSwgRW5jb2RlLCBGY250bCwgRmlsZTo6RmluZCwgRmlsZTo6QmFzZW5hbWUuCisgLSB3ZWIgc2VydmVyCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9uYWwgUGVybCBtb2R1bGVzIGFyZSByZXF1aXJlZCBmb3IgZXh0cmEgZmVhdHVyZXMKKyAtIERpZ2VzdDo6TUQ1IC0gZm9yIGdyYXZhdGFyIHN1cHBvcnQKKyAtIENHSTo6RmFzdCBhbmQgRkNHSSAtIGZvciBydW5uaW5nIGdpdHdlYiBhcyBGYXN0Q0dJIHNjcmlwdAorIC0gSFRNTDo6VGFnQ2xvdWQgLSBmb3IgZmFuY3kgdGFnIGNsb3VkIGluIHByb2plY3QgbGlzdCB2aWV3CisgLSBIVFRQOjpEYXRlIG9yIFRpbWU6OlBhcnNlRGF0ZSAtIHRvIHN1cHBvcnQgSWYtTW9kaWZpZWQtU2luY2UgZm9yIGZlZWRzCisKKworQnVpbGQgdGltZSBjb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VlIGFsc28gIkhvdyB0byBjb25maWd1cmUgZ2l0d2ViIGZvciB5b3VyIGxvY2FsIHN5c3RlbSIgc2VjdGlvbiBiZWxvdy4KKworLSBUaGVyZSBhcmUgbWFueSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3aGljaCBhZmZlY3QgYnVpbGRpbmcgb2YKKyAgZ2l0d2ViLmNnaTsgc2VlICJkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGdpdHdlYiIgc2VjdGlvbiBpbiBtYWluCisgICh0b3AgZGlyKSBNYWtlZmlsZSwgYW5kIGluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgZ2l0d2ViIHRhcmdldC4KKworICBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGlzIHdoZXJlIHRvIGZpbmQgdGhlIGdpdCB3cmFwcGVyIGJpbmFyeS4gR2l0d2ViCisgIHRyaWVzIHRvIGZpbmQgdGhlIGdpdCB3cmFwcGVyIGF0ICQoYmluZGlyKS9naXQsIHNvIHlvdSBoYXZlIHRvIHNldCAkYmluZGlyCisgIHdoZW4gYnVpbGRpbmcgZ2l0d2ViLmNnaSwgb3IgJHByZWZpeCBmcm9tIHdoaWNoICRiaW5kaXIgaXMgZGVyaXZlZC4gSWYKKyAgeW91IGJ1aWxkIGFuZCBpbnN0YWxsIGdpdHdlYiB0b2dldGhlciB3aXRoIHRoZSByZXN0IG9mIHRoZSBnaXQgc3VpdGUsCisgIHRoZXJlIHNob3VsZCBiZSBubyBwcm9ibGVtcy4gT3RoZXJ3aXNlLCBpZiBnaXQgd2FzIGZvciBleGFtcGxlCisgIGluc3RhbGxlZCBmcm9tIGEgYmluYXJ5IHBhY2thZ2UsIHlvdSBoYXZlIHRvIHNldCAkcHJlZml4IChvciAkYmluZGlyKQorICBhY2NvcmRpbmdseS4KKworLSBBbm90aGVyIGltcG9ydGFudCBpc3N1ZSBpcyB3aGVyZSBhcmUgZ2l0IHJlcG9zaXRvcmllcyB5b3Ugd2FudCB0byBtYWtlCisgIGF2YWlsYWJsZSB0byBnaXR3ZWIuIEJ5IGRlZmF1bHQgZ2l0d2ViIHNlYXJjaGVzIGZvciByZXBvc2l0b3JpZXMgdW5kZXIKKyAgL3B1Yi9naXQ7IGlmIHlvdSB3YW50IHRvIGhhdmUgcHJvamVjdHMgc29tZXdoZXJlIGVsc2UsIGxpa2UgL2hvbWUvZ2l0LAorICB1c2UgR0lUV0VCX1BST0pFQ1RST09UIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAgQnkgZGVmYXVsdCBhbGwgZ2l0IHJlcG9zaXRvcmllcyB1bmRlciBwcm9qZWN0cm9vdCBhcmUgdmlzaWJsZSBhbmQKKyAgYXZhaWxhYmxlIHRvIGdpdHdlYi4gVGhlIGxpc3Qgb2YgcHJvamVjdHMgaXMgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgYnkKKyAgc2Nhbm5pbmcgdGhlIHByb2plY3Ryb290IGRpcmVjdG9yeSBmb3IgZ2l0IHJlcG9zaXRvcmllcy4gVGhpcyBjYW4gYmUKKyAgY2hhbmdlZCAoY29uZmlndXJlZCkgYXMgZGVzY3JpYmVkIGluICJHaXR3ZWIgcmVwb3NpdG9yaWVzIiBzZWN0aW9uCisgIGJlbG93LgorCisgIE5vdGUgdGhhdCBnaXR3ZWIgZGVhbHMgZGlyZWN0bHkgd2l0aCB0aGUgb2JqZWN0IGRhdGFiYXNlLCBhbmQgZG9lcyBub3QKKyAgbmVlZCBhIHdvcmtpbmcgZGlyZWN0b3J5OyB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBpcyB0aGUgbmFtZSBvZiBpdHMKKyAgcmVwb3NpdG9yeSBvYmplY3QgZGF0YWJhc2UsIHVzdWFsbHkgcHJvamVjdG5hbWUuZ2l0IGZvciBiYXJlCisgIHJlcG9zaXRvcmllcy4gSWYgeW91IHdhbnQgdG8gcHJvdmlkZSBnaXR3ZWIgYWNjZXNzIHRvIG5vbi1iYXJlIChsaXZlKQorICByZXBvc2l0b3JpZXMsIHlvdSBjYW4gbWFrZSBwcm9qZWN0bmFtZS5naXQgYSBzeW1ib2xpYyBsaW5rIHVuZGVyCisgIHByb2plY3Ryb290IGxpbmtpbmcgdG8gcHJvamVjdG5hbWUvLmdpdCAoYnV0IGl0IGlzIGp1c3QKKyAgYSBzdWdnZXN0aW9uKS4KKworLSBZb3UgY2FuIGNvbnRyb2wgd2hlcmUgZ2l0d2ViIHRyaWVzIHRvIGZpbmQgaXRzIG1haW4gQ1NTIHN0eWxlIGZpbGUsCisgIGl0cyBKYXZhU2NyaXB0IGZpbGUsIGl0cyBmYXZpY29uIGFuZCBsb2dvIHdpdGggdGhlIEdJVFdFQl9DU1MsIEdJVFdFQl9KUworICBHSVRXRUJfRkFWSUNPTiBhbmQgR0lUV0VCX0xPR08gYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuIEJ5IGRlZmF1bHQKKyAgZ2l0d2ViIHRyaWVzIHRvIGZpbmQgdGhlbSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgZ2l0d2ViLmNnaSBzY3JpcHQuCisKKy0gWW91IGNhbiBvcHRpb25hbGx5IGdlbmVyYXRlIG1pbmlmaWVkIHZlcnNpb25zIG9mIGdpdHdlYi5qcyBhbmQgZ2l0d2ViLmNzcworICBieSBkZWZpbmluZyB0aGUgSlNNSU4gYW5kIENTU01JTiBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gQnkgZGVmYXVsdAorICB0aGUgbm9uLW1pbmlmaWVkIHZlcnNpb25zIHdpbGwgYmUgdXNlZC4gTk9URTogaWYgeW91IGVuYWJsZSB0aGlzIG9wdGlvbiwKKyAgc3Vic3RpdHV0ZSBnaXR3ZWIubWluLmpzIGFuZCBnaXR3ZWIubWluLmNzcyBmb3IgYWxsIHVzZXMgb2YgZ2l0d2ViLmpzIGFuZAorICBnaXR3ZWIuY3NzIGluIHRoZSBoZWxwIGZpbGVzLgorCisKK0hvdyB0byBjb25maWd1cmUgZ2l0d2ViIGZvciB5b3VyIGxvY2FsIHN5c3RlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gc3BlY2lmeSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdoZW4gYnVpbGRpbmcgR0lUOgorCisgKiBHSVRfQklORElSCisgICBQb2ludHMgd2hlcmUgdG8gZmluZCB0aGUgZ2l0IGV4ZWN1dGFibGUuICBZb3Ugc2hvdWxkIHNldCBpdCB1cCB0bworICAgdGhlIHBsYWNlIHdoZXJlIHRoZSBnaXQgYmluYXJ5IHdhcyBpbnN0YWxsZWQgKHVzdWFsbHkgL3Vzci9iaW4pIGlmIHlvdQorICAgZG9uJ3QgaW5zdGFsbCBnaXQgZnJvbSBzb3VyY2VzIHRvZ2V0aGVyIHdpdGggZ2l0d2ViLiAgW0RlZmF1bHQ6ICQoYmluZGlyKV0KKyAqIEdJVFdFQl9TSVRFTkFNRQorICAgU2hvd24gaW4gdGhlIHRpdGxlIG9mIGFsbCBnZW5lcmF0ZWQgcGFnZXMsIGRlZmF1bHRzIHRvIHRoZSBzZXJ2ZXIgbmFtZQorICAgKFNFUlZFUl9OQU1FIENHSSBlbnZpcm9ubWVudCB2YXJpYWJsZSkgaWYgbm90IHNldC4gW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfUFJPSkVDVFJPT1QKKyAgIFRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIHByb2plY3RzIHNob3duIGJ5IGdpdHdlYi4gTXVzdCBiZSBzZXQKKyAgIGNvcnJlY3RseSBmb3IgZ2l0d2ViIHRvIGZpbmQgcmVwb3NpdG9yaWVzIHRvIGRpc3BsYXkuICBTZWUgYWxzbworICAgIkdpdHdlYiByZXBvc2l0b3JpZXMiIGluIHRoZSBJTlNUQUxMIGZpbGUgZm9yIGdpdHdlYi4gIFtEZWZhdWx0OiAvcHViL2dpdF0KKyAqIEdJVFdFQl9QUk9KRUNUX01BWERFUFRICisgICBUaGUgZmlsZXN5c3RlbSB0cmF2ZXJzaW5nIGxpbWl0IGZvciBnZXR0aW5nIHRoZSBwcm9qZWN0IGxpc3Q7IHRoZSBudW1iZXIKKyAgIGlzIHRha2VuIGFzIGRlcHRoIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0cm9vdC4gIEl0IGlzIHVzZWQgd2hlbgorICAgR0lUV0VCX0xJU1QgaXMgYSBkaXJlY3RvcnkgKG9yIGlzIG5vdCBzZXQ7IHRoZW4gcHJvamVjdCByb290IGlzIHVzZWQpLgorICAgVGhpcyBpcyBtZWFudCB0byBzcGVlZCB1cCBwcm9qZWN0IGxpc3Rpbmcgb24gbGFyZ2Ugd29yayB0cmVlcyBieSBsaW1pdGluZworICAgc2VhcmNoIGRlcHRoLiAgW0RlZmF1bHQ6IDIwMDddCisgKiBHSVRXRUJfTElTVAorICAgUG9pbnRzIHRvIGEgZGlyZWN0b3J5IHRvIHNjYW4gZm9yIHByb2plY3RzIChkZWZhdWx0cyB0byBwcm9qZWN0IHJvb3QKKyAgIGlmIG5vdCBzZXQgLyBpZiBlbXB0eSkgb3IgdG8gYSBmaWxlIHdpdGggZXhwbGljaXQgbGlzdGluZyBvZiBwcm9qZWN0cworICAgKHRvZ2V0aGVyIHdpdGggcHJvamVjdHMnIG93bmVyc2hpcCkuIFNlZSAiR2VuZXJhdGluZyBwcm9qZWN0cyBsaXN0CisgICB1c2luZyBnaXR3ZWIiIGluIElOU1RBTEwgZmlsZSBmb3IgZ2l0d2ViIHRvIGZpbmQgb3V0IGhvdyB0byBnZW5lcmF0ZQorICAgc3VjaCBmaWxlIGZyb20gc2NhbiBvZiBhIGRpcmVjdG9yeS4gW05vIGRlZmF1bHQsIHdoaWNoIG1lYW5zIHVzZSByb290CisgICBkaXJlY3RvcnkgZm9yIHByb2plY3RzXQorICogR0lUV0VCX0VYUE9SVF9PSworICAgU2hvdyByZXBvc2l0b3J5IG9ubHkgaWYgdGhpcyBmaWxlIGV4aXN0cyAoaW4gcmVwb3NpdG9yeSkuICBPbmx5CisgICBlZmZlY3RpdmUgaWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdHJ1ZS4gIFtObyBkZWZhdWx0IC8gTm90IHNldF0KKyAqIEdJVFdFQl9TVFJJQ1RfRVhQT1JUCisgICBPbmx5IGFsbG93IHZpZXdpbmcgb2YgcmVwb3NpdG9yaWVzIGFsc28gc2hvd24gb24gdGhlIG92ZXJ2aWV3IHBhZ2UuCisgICBUaGlzIGZvciBleGFtcGxlIG1ha2VzIEdJVFdFQl9FWFBPUlRfT0sgdG8gZGVjaWRlIGlmIHJlcG9zaXRvcnkgaXMKKyAgIGF2YWlsYWJsZSBhbmQgbm90IG9ubHkgaWYgaXQgaXMgc2hvd24uICBJZiBHSVRXRUJfTElTVCBwb2ludHMgdG8KKyAgIGZpbGUgd2l0aCBsaXN0IG9mIHByb2plY3QsIG9ubHkgdGhvc2UgcmVwb3NpdG9yaWVzIGxpc3RlZCB3b3VsZCBiZQorICAgYXZhaWxhYmxlIGZvciBnaXR3ZWIuICBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9IT01FVEVYVAorICAgUG9pbnRzIHRvIGFuIC5odG1sIGZpbGUgd2hpY2ggaXMgaW5jbHVkZWQgb24gdGhlIGdpdHdlYiBwcm9qZWN0CisgICBvdmVydmlldyBwYWdlICgncHJvamVjdHNfbGlzdCcgdmlldyksIGlmIGl0IGV4aXN0cy4gIFJlbGF0aXZlIHRvCisgICBnaXR3ZWIuY2dpIHNjcmlwdC4gIFtEZWZhdWx0OiBpbmRleHRleHQuaHRtbF0KKyAqIEdJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkcKKyAgIGh0bWwgc25pcHBldCB0byBpbmNsdWRlIGluIHRoZSA8aGVhZD4gc2VjdGlvbiBvZiBlYWNoIHBhZ2UuIFtObyBkZWZhdWx0XQorICogR0lUV0VCX1NJVEVfSEVBREVSCisgICBGaWxlbmFtZSBvZiBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCB0b3Agb2YgZWFjaCBwYWdlLiAgUmVsYXRpdmUgdG8KKyAgIGdpdHdlYi5jZ2kgc2NyaXB0LiAgW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfU0lURV9GT09URVIKKyAgIEZpbGVuYW1lIG9mIGh0bWwgdGV4dCB0byBpbmNsdWRlIGF0IGJvdHRvbSBvZiBlYWNoIHBhZ2UuICBSZWxhdGl2ZSB0bworICAgZ2l0d2ViLmNnaSBzY3JpcHQuICBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9IT01FX0xJTktfU1RSCisgICBTdHJpbmcgb2YgdGhlIGhvbWUgbGluayBvbiB0b3Agb2YgYWxsIHBhZ2VzLCBsZWFkaW5nIHRvICRob21lX2xpbmsKKyAgICh1c3VhbGx5IG1haW4gZ2l0d2ViIHBhZ2UsIHdoaWNoIG1lYW5zIHByb2plY3RzIGxpc3QpLiAgVXNlZCBhcyBmaXJzdAorICAgcGFydCBvZiBnaXR3ZWIgdmlldyAiYnJlYWRjcnVtYiB0cmFpbCI6IDxob21lPiAvIDxwcm9qZWN0PiAvIDx2aWV3Pi4KKyAgIFtEZWZhdWx0OiBwcm9qZWN0c10KKyAqIEdJVFdFQl9TSVRFTkFNRQorICAgTmFtZSBvZiB5b3VyIHNpdGUgb3Igb3JnYW5pemF0aW9uIHRvIGFwcGVhciBpbiBwYWdlIHRpdGxlcy4gIFNldCBpdAorICAgdG8gc29tZXRoaW5nIGRlc2NyaXB0aXZlIGZvciBjbGVhcmVyIGJvb2ttYXJrcyBldGMuICBJZiBub3Qgc2V0CisgICAoaWYgZW1wdHkpIGdpdHdlYiB1c2VzICIkU0VSVkVSX05BTUUgR2l0Iiwgb3IgIlVudGl0bGVkIEdpdCIgaWYKKyAgIFNFUlZFUl9OQU1FIENHSSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IChlLmcuIGlmIHJ1bm5pbmcKKyAgIGdpdHdlYiBhcyBzdGFuZGFsb25lIHNjcmlwdCkuICBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9CQVNFX1VSTAorICAgR2l0IGJhc2UgVVJMcyB1c2VkIGZvciBVUkwgdG8gd2hlcmUgZmV0Y2ggcHJvamVjdCBmcm9tLCBpLmUuIGZ1bGwKKyAgIFVSTCBpcyAiJGdpdF9iYXNlX3VybC8kcHJvamVjdCIuICBTaG93biBvbiBwcm9qZWN0cyBzdW1tYXJ5IHBhZ2UuCisgICBSZXBvc2l0b3J5IFVSTCBmb3IgcHJvamVjdCBjYW4gYmUgYWxzbyBjb25maWd1cmVkIHBlciByZXBvc2l0b3J5OyB0aGlzCisgICB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgVVJMcyBjb21wb3NlZCBmcm9tIGJhc2UgVVJMIGFuZCBhIHByb2plY3QgbmFtZS4KKyAgIE5vdGUgdGhhdCB5b3UgY2FuIHNldHVwIG11bHRpcGxlIGJhc2UgVVJMcyAoZm9yIGV4YW1wbGUgb25lIGZvcgorICAgZ2l0Oi8vIHByb3RvY29sIGFjY2VzcywgYW5vdGhlciBmb3IgaHR0cDovLyBhY2Nlc3MpIGZyb20gdGhlIGdpdHdlYgorICAgY29uZmlnIGZpbGUuICBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9DU1MKKyAgIFBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHB1dCBnaXR3ZWIuY3NzIG9uIHlvdXIgd2ViIHNlcnZlcgorICAgKG9yIHRvIGJlIG1vcmUgZ2VuZXJpYywgdGhlIFVSSSBvZiBnaXR3ZWIgc3R5bGVzaGVldCkuICBSZWxhdGl2ZSB0byB0aGUKKyAgIGJhc2UgVVJJIG9mIGdpdHdlYi4gIE5vdGUgdGhhdCB5b3UgY2FuIHNldHVwIG11bHRpcGxlIHN0eWxlc2hlZXRzIGZyb20KKyAgIHRoZSBnaXR3ZWIgY29uZmlnIGZpbGUuICBbRGVmYXVsdDogc3RhdGljL2dpdHdlYi5jc3MgKG9yCisgICBzdGF0aWMvZ2l0d2ViLm1pbi5jc3MgaWYgdGhlIENTU01JTiB2YXJpYWJsZSBpcyBkZWZpbmVkIC8gQ1NTIG1pbmlmaWVyCisgICBpcyB1c2VkKV0KKyAqIEdJVFdFQl9KUworICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0IGdpdHdlYi5qcyBvbiB5b3VyIHdlYiBzZXJ2ZXIKKyAgIChvciB0byBiZSBtb3JlIGdlbmVyaWMgVVJJIG9mIEphdmFTY3JpcHQgY29kZSB1c2VkIGJ5IGdpdHdlYikuCisgICBSZWxhdGl2ZSB0byBiYXNlIFVSSSBvZiBnaXR3ZWIuICBbRGVmYXVsdDogc3RhdGljL2dpdHdlYi5qcyAob3IKKyAgIHN0YXRpYy9naXR3ZWIubWluLmpzIGlmIEpTTUlOIGJ1aWxkIHZhcmlhYmxlIGlzIGRlZmluZWQgLyBKYXZhU2NyaXB0CisgICBtaW5pZmllciBpcyB1c2VkKV0KKyAqIENTU01JTiwgSlNNSU4KKyAgIEludm9jYXRpb24gb2YgYSBDU1MgbWluaWZpZXIgb3IgYSBKYXZhU2NyaXB0IG1pbmlmaWVyLCByZXNwZWN0aXZlbHksCisgICB3b3JraW5nIGFzIGEgZmlsdGVyIChzb3VyY2Ugb24gc3RhbmRhcmQgaW5wdXQsIG1pbmlmaWVkIHJlc3VsdCBvbgorICAgc3RhbmRhcmQgb3V0cHV0KS4gIElmIHNldCwgaXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIG1pbmlmaWVkIHZlcnNpb24gb2YKKyAgICdzdGF0aWMvZ2l0d2ViLmNzcycgb3IgJ3N0YXRpYy9naXR3ZWIuanMnLCByZXNwZWN0aXZlbHkuICAqTm90ZSogdGhhdAorICAgbWluaWZpZWQgZmlsZXMgd291bGQgaGF2ZSAqLm1pbi5jc3MgYW5kICoubWluLmpzIGV4dGVuc2lvbiwgd2hpY2ggaXMKKyAgIGltcG9ydGFudCBpZiB5b3UgYWxzbyBzZXQgR0lUV0VCX0NTUyBhbmQvb3IgR0lUV0VCX0pTLiAgW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfTE9HTworICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0IGdpdC1sb2dvLnBuZyBvbiB5b3VyIHdlYiBzZXJ2ZXIKKyAgIChvciB0byBiZSBtb3JlIGdlbmVyaWMgVVJJIG9mIGxvZ28sIDcyeDI3IHNpemUsIGRpc3BsYXllZCBpbiB0b3AgcmlnaHQKKyAgIGNvcm5lciBvZiBlYWNoIGdpdHdlYiBwYWdlLCBhbmQgdXNlZCBhcyBsb2dvIGZvciBBdG9tIGZlZWQpLiAgUmVsYXRpdmUKKyAgIHRvIGJhc2UgVVJJIG9mIGdpdHdlYi4gIFtEZWZhdWx0OiBzdGF0aWMvZ2l0LWxvZ28ucG5nXQorICogR0lUV0VCX0ZBVklDT04KKyAgIFBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHB1dCBnaXQtZmF2aWNvbi5wbmcgb24geW91ciB3ZWIgc2VydmVyCisgICAob3IgdG8gYmUgbW9yZSBnZW5lcmljIFVSSSBvZiBmYXZpY29uLCBhc3N1bWVkIHRvIGJlIGltYWdlL3BuZyB0eXBlOworICAgd2ViIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBmYXZpY29ucyAod2Vic2l0ZSBpY29ucykgbWF5IGRpc3BsYXkgdGhlbQorICAgaW4gdGhlIGJyb3dzZXIncyBVUkwgYmFyIGFuZCBuZXh0IHRvIHNpdGUgbmFtZSBpbiBib29rbWFya3MpLiAgUmVsYXRpdmUKKyAgIHRvIGJhc2UgVVJJIG9mIGdpdHdlYi4gIFtEZWZhdWx0OiBzdGF0aWMvZ2l0LWZhdmljb24ucG5nXQorICogR0lUV0VCX0NPTkZJRworICAgVGhpcyBQZXJsIGZpbGUgd2lsbCBiZSBsb2FkZWQgdXNpbmcgJ2RvJyBhbmQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55CisgICBvZiB0aGUgb3B0aW9ucyBhYm92ZSBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgb3B0aW9ucyAtLSBzZWUgdGhlICJSdW50aW1lCisgICBnaXR3ZWIgY29uZmlndXJhdGlvbiIgc2VjdGlvbiBiZWxvdywgYW5kIHRvcCBvZiAnZ2l0d2ViLmNnaScgZm9yIHRoZWlyCisgICBmdWxsIGxpc3QgYW5kIGRlc2NyaXB0aW9uLiAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdJVFdFQl9DT05GSUcKKyAgIGlzIHNldCB3aGVuIGdpdHdlYi5jZ2kgaXMgZXhlY3V0ZWQsIHRoZW4gdGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZQorICAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBsb2FkZWQgaW5zdGVhZCBvZiB0aGUgZmlsZSBzcGVjaWZpZWQKKyAgIHdoZW4gZ2l0d2ViLmNnaSB3YXMgY3JlYXRlZC4gIFtEZWZhdWx0OiBnaXR3ZWJfY29uZmlnLnBlcmxdCisgKiBHSVRXRUJfQ09ORklHX1NZU1RFTQorICAgVGhpcyBQZXJsIGZpbGUgd2lsbCBiZSBsb2FkZWQgdXNpbmcgJ2RvJyBhcyBhIGZhbGxiYWNrIGlmIEdJVFdFQl9DT05GSUcKKyAgIGRvZXMgbm90IGV4aXN0LiAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdJVFdFQl9DT05GSUdfU1lTVEVNIGlzIHNldAorICAgd2hlbiBnaXR3ZWIuY2dpIGlzIGV4ZWN1dGVkLCB0aGVuIHRoZSBmaWxlIHNwZWNpZmllZCBpbiB0aGUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlIHdpbGwgYmUgbG9hZGVkIGluc3RlYWQgb2YgdGhlIGZpbGUgc3BlY2lmaWVkIHdoZW4gZ2l0d2ViLmNnaSB3YXMKKyAgIGNyZWF0ZWQuICBbRGVmYXVsdDogL2V0Yy9naXR3ZWIuY29uZl0KKyAqIEhJR0hMSUdIVF9CSU4KKyAgIFBhdGggdG8gdGhlIGhpZ2hsaWdodCBleGVjdXRhYmxlIHRvIHVzZSAobXVzdCBiZSB0aGUgb25lIGZyb20KKyAgIGh0dHA6Ly93d3cuYW5kcmUtc2ltb24uZGUgZHVlIHRvIGFzc3VtcHRpb25zIGFib3V0IHBhcmFtZXRlcnMgYW5kIG91dHB1dCkuCisgICBVc2VmdWwgaWYgaGlnaGxpZ2h0IGlzIG5vdCBpbnN0YWxsZWQgb24geW91ciB3ZWJzZXJ2ZXIncyBQQVRILgorICAgW0RlZmF1bHQ6IGhpZ2hsaWdodF0KKworQnVpbGQgZXhhbXBsZQorfn5+fn5+fn5+fn5+fgorCistIFRvIGluc3RhbGwgZ2l0d2ViIHRvIC92YXIvd3d3L2NnaS1iaW4vZ2l0d2ViLywgd2hlbiBnaXQgd3JhcHBlcgorICBpcyBpbnN0YWxsZWQgYXQgL3Vzci9sb2NhbC9iaW4vZ2l0LCB0aGUgcmVwb3NpdG9yaWVzIChwcm9qZWN0cykKKyAgd2Ugd2FudCB0byBkaXNwbGF5IGFyZSB1bmRlciAvaG9tZS9sb2NhbC9zY20sIGFuZCB5b3UgZG8gbm90IHVzZQorICBtaW5pZmllcnMsIHlvdSBjYW4gZG8KKworCW1ha2UgR0lUV0VCX1BST0pFQ1RST09UPSIvaG9tZS9sb2NhbC9zY20iIFwKKwkgICAgIEdJVFdFQl9KUz0iZ2l0d2ViL3N0YXRpYy9naXR3ZWIuanMiIFwKKwkgICAgIEdJVFdFQl9DU1M9ImdpdHdlYi9zdGF0aWMvZ2l0d2ViLmNzcyIgXAorCSAgICAgR0lUV0VCX0xPR089ImdpdHdlYi9zdGF0aWMvZ2l0LWxvZ28ucG5nIiBcCisJICAgICBHSVRXRUJfRkFWSUNPTj0iZ2l0d2ViL3N0YXRpYy9naXQtZmF2aWNvbi5wbmciIFwKKwkgICAgIGJpbmRpcj0vdXNyL2xvY2FsL2JpbiBcCisJICAgICBnaXR3ZWIKKworCW1ha2UgZ2l0d2ViZGlyPS92YXIvd3d3L2NnaS1iaW4vZ2l0d2ViIGluc3RhbGwtZ2l0d2ViCisKKworR2l0d2ViIGNvbmZpZyBmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0KKworU2VlIGFsc28gIlJ1bnRpbWUgZ2l0d2ViIGNvbmZpZ3VyYXRpb24iIHNlY3Rpb24gaW4gUkVBRE1FIGZpbGUKK2ZvciBnaXR3ZWIgKGluIGdpdHdlYi9SRUFETUUpLCBhbmQgZ2l0d2ViLmNvbmYoNSkgbWFucGFnZS4KKworLSBZb3UgY2FuIGNvbmZpZ3VyZSBnaXR3ZWIgZnVydGhlciB1c2luZyB0aGUgcGVyLWluc3RhbmNlIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGU7CisgIGJ5IGRlZmF1bHQgdGhpcyBpcyBhIGZpbGUgbmFtZWQgZ2l0d2ViX2NvbmZpZy5wZXJsIGluIHRoZSBzYW1lIHBsYWNlIGFzCisgIGdpdHdlYi5jZ2kgc2NyaXB0LiBZb3UgY2FuIGNvbnRyb2wgdGhlIGRlZmF1bHQgcGxhY2UgZm9yIHRoZSBjb25maWcgZmlsZQorICB1c2luZyB0aGUgR0lUV0VCX0NPTkZJRyBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBhbmQgeW91IGNhbiBzZXQgaXQKKyAgdXNpbmcgdGhlIEdJVFdFQl9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUuIElmIHRoaXMgZmlsZSBkb2VzIG5vdAorICBleGlzdCwgZ2l0d2ViIGxvb2tzIGZvciBhIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSwgbm9ybWFsbHkKKyAgL2V0Yy9naXR3ZWIuY29uZi4gWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgdXNpbmcgdGhlCisgIEdJVFdFQl9DT05GSUdfU1lTVEVNIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGFuZCBvdmVycmlkZSBpdAorICB0aHJvdWdoIHRoZSBHSVRXRUJfQ09ORklHX1NZU1RFTSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICBOb3RlIHRoYXQgaWYgcGVyLWluc3RhbmNlIGNvbmZpZ3VyYXRpb24gZmlsZSBleGlzdHMsIHRoZW4gc3lzdGVtLXdpZGUKKyAgY29uZmlndXJhdGlvbiBpcyBfbm90IHVzZWQgYXQgYWxsXy4gIFRoaXMgaXMgcXVpdGUgdW50eXBpY2FsIGFuZCBzdXByaXNpbmcKKyAgYmVoYXZpb3IuICBPbiB0aGUgb3RoZXIgaGFuZCBjaGFuZ2luZyBjdXJyZW50IGJlaGF2aW9yIHdvdWxkIGJyZWFrIGJhY2t3YXJkcworICBjb21wYXRpYmlsaXR5IGFuZCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGNoYW5nZXMgaW4gZ2l0d2ViIGJlaGF2aW9yLgorICBUaGVyZWZvcmUgZ2l0d2ViIGFsc28gbG9va3MgZm9yIGNvbW1vbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUsCisgIG5vcm1hbGx5IC9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mIChzZXQgZHVyaW5nIGJ1aWxkIHRpbWUgdXNpbmcgYnVpbGQgdGltZQorICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIEdJVFdFQl9DT05GSUdfQ09NTU9OLCBzZXQgaXQgYXQgcnVudGltZSB1c2luZworICBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUpLiAgU2V0dGluZ3MgZnJvbSBwZXItaW5zdGFuY2Ugb3IKKyAgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlIG92ZXJyaWRlIHRob3NlIGZyb20gY29tbW9uIHN5c3RlbS13aWRlCisgIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworLSBUaGUgZ2l0d2ViIGNvbmZpZyBmaWxlIGlzIGEgZnJhZ21lbnQgb2YgcGVybCBjb2RlLiBZb3UgY2FuIHNldCB2YXJpYWJsZXMKKyAgdXNpbmcgIm91ciAkdmFyaWFibGUgPSB2YWx1ZSI7IHRleHQgZnJvbSAiIyIgY2hhcmFjdGVyIHVudGlsIHRoZSBlbmQKKyAgb2YgYSBsaW5lIGlzIGlnbm9yZWQuIFNlZSBwZXJsc3luKDEpIGZvciBkZXRhaWxzLgorCisgIFNlZSB0aGUgdG9wIG9mIGdpdHdlYi5wZXJsIGZpbGUgZm9yIGV4YW1wbGVzIG9mIGN1c3RvbWl6YWJsZSBvcHRpb25zLgorCitDb25maWcgZmlsZSBleGFtcGxlCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RvIGVuYWJsZSBibGFtZSwgcGlja2F4ZSBzZWFyY2gsIGFuZCBzbmFwc2hvdCBzdXBwb3J0LCB3aGlsZSBhbGxvd2luZworaW5kaXZpZHVhbCBwcm9qZWN0cyB0byB0dXJuIHRoZW0gb2ZmLCBwdXQgdGhlIGZvbGxvd2luZyBpbiB5b3VyCitHSVRXRUJfQ09ORklHIGZpbGU6CisKKwkkZmVhdHVyZXsnYmxhbWUnfXsnZGVmYXVsdCd9ID0gWzFdOworCSRmZWF0dXJleydibGFtZSd9eydvdmVycmlkZSd9ID0gMTsKKworCSRmZWF0dXJleydwaWNrYXhlJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkkZmVhdHVyZXsncGlja2F4ZSd9eydvdmVycmlkZSd9ID0gMTsKKworCSRmZWF0dXJleydzbmFwc2hvdCd9eydkZWZhdWx0J30gPSBbJ3ppcCcsICd0Z3onXTsKKwkkZmVhdHVyZXsnc25hcHNob3QnfXsnb3ZlcnJpZGUnfSA9IDE7CisKK0lmIHlvdSBhbGxvdyBvdmVycmlkaW5nIGZvciB0aGUgc25hcHNob3QgZmVhdHVyZSwgeW91IGNhbiBzcGVjaWZ5IHdoaWNoCitzbmFwc2hvdCBmb3JtYXRzIGFyZSBnbG9iYWxseSBkaXNhYmxlZC4gWW91IGNhbiBhbHNvIGFkZCBhbnkgY29tbWFuZCBsaW5lCitvcHRpb25zIHlvdSB3YW50IChzdWNoIGFzIHNldHRpbmcgdGhlIGNvbXByZXNzaW9uIGxldmVsKS4gRm9yIGluc3RhbmNlLAoreW91IGNhbiBkaXNhYmxlIFppcCBjb21wcmVzc2VkIHNuYXBzaG90cyBhbmQgc2V0IEdaaXAgdG8gcnVuIGF0IGxldmVsIDYgYnkKK2FkZGluZyB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHlvdXIgJEdJVFdFQl9DT05GSUc6CisKKwkka25vd25fc25hcHNob3RfZm9ybWF0c3snemlwJ317J2Rpc2FibGVkJ30gPSAxOworCSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd0Z3onfXsnY29tcHJlc3Nvcid9ID0gWydnemlwJywnLTYnXTsKKworCitHaXR3ZWIgcmVwb3NpdG9yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQgZ2l0d2ViIHNob3dzIGFsbCBnaXQgcmVwb3NpdG9yaWVzIHVuZGVyIHNpbmdsZSBjb21tb24gcmVwb3NpdG9yeQorcm9vdCBvbiBhIGxvY2FsIGZpbGVzeXN0ZW07IHNlZSBkZXNjcmlwdGlvbiBvZiBHSVRXRUJfUFJPSkVDVFJPT1QgYnVpbGQtdGltZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhYm92ZSAoYW5kIGFsc28gb2YgR0lUV0VCX0xJU1QpLgorCitNb3JlIGFkdmFuY2VkIHVzYWdlLCBsaWtlIGxpbWl0aW5nIGFjY2VzcyBvciB2aXNpYmlsaXR5IG9mIHJlcG9zaXRvcmllcyBhbmQKK21hbmFnaW5nIG11bHRpcGxlIHJvb3RzIGFyZSBkZXNjcmliZWQgb24gZ2l0d2ViIG1hbnBhZ2UuCisKKworRXhhbXBsZSB3ZWIgc2VydmVyIGNvbmZpZ3VyYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NlZSBhbHNvICJXZWJzZXJ2ZXIgY29uZmlndXJhdGlvbiIgYW5kICJBZHZhbmNlZCB3ZWIgc2VydmVyIHNldHVwIiBzZWN0aW9ucworaW4gZ2l0d2ViKDEpIG1hbnBhZ2UuCisKKworLSBBcGFjaGUyLCBnaXR3ZWIgaW5zdGFsbGVkIGFzIENHSSBzY3JpcHQsCisgIHVuZGVyIC92YXIvd3d3L2NnaS1iaW4vCisKKwlTY3JpcHRBbGlhcyAvY2dpLWJpbi8gIi92YXIvd3d3L2NnaS1iaW4vIgorCisJPERpcmVjdG9yeSAiL3Zhci93d3cvY2dpLWJpbiI+CisJICAgIE9wdGlvbnMgSW5kZXhlcyBGb2xsb3dTeW1saW5rcyBFeGVjQ0dJCisJICAgIEFsbG93T3ZlcnJpZGUgTm9uZQorCSAgICBPcmRlciBhbGxvdyxkZW55CisJICAgIEFsbG93IGZyb20gYWxsCisJPC9EaXJlY3Rvcnk+CisKKy0gQXBhY2hlMiwgZ2l0d2ViIGluc3RhbGxlZCBhcyBtb2RfcGVybCBsZWdhY3kgc2NyaXB0LAorICB1bmRlciAvdmFyL3d3dy9wZXJsLworCisJQWxpYXMgL3BlcmwgIi92YXIvd3d3L3BlcmwiCisKKwk8RGlyZWN0b3J5ICIvdmFyL3d3dy9wZXJsIj4KKwkgICAgU2V0SGFuZGxlciBwZXJsLXNjcmlwdAorCSAgICBQZXJsUmVzcG9uc2VIYW5kbGVyIE1vZFBlcmw6OlJlZ2lzdHJ5CisJICAgIFBlcmxPcHRpb25zICtQYXJzZUhlYWRlcnMKKwkgICAgT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bWxpbmtzICtFeGVjQ0dJCisJICAgIEFsbG93T3ZlcnJpZGUgTm9uZQorCSAgICBPcmRlciBhbGxvdyxkZW55CisJICAgIEFsbG93IGZyb20gYWxsCisJPC9EaXJlY3Rvcnk+CmRpZmYgLS1naXQgYS9naXR3ZWIvTWFrZWZpbGUgYi9naXR3ZWIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxOTRkMAotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9NYWtlZmlsZQpAQCAtMCwwICsxLDE5NSBAQAorIyBUaGUgZGVmYXVsdCB0YXJnZXQgb2YgdGhpcyBNYWtlZmlsZSBpcy4uLgorYWxsOjoKKworIyBEZWZpbmUgVj0xIHRvIGhhdmUgYSBtb3JlIHZlcmJvc2UgY29tcGlsZS4KKyMKKyMgRGVmaW5lIEpTTUlOIHRvIHBvaW50IHRvIEphdmFTY3JpcHQgbWluaWZpZXIgdGhhdCBmdW5jdGlvbnMgYXMKKyMgYSBmaWx0ZXIgdG8gaGF2ZSBzdGF0aWMvZ2l0d2ViLmpzIG1pbmlmaWVkLgorIworIyBEZWZpbmUgQ1NTTUlOIHRvIHBvaW50IHRvIGEgQ1NTIG1pbmlmaWVyIGluIG9yZGVyIHRvIGdlbmVyYXRlIGEgbWluaWZpZWQKKyMgdmVyc2lvbiBvZiBzdGF0aWMvZ2l0d2ViLmNzcworIworCitwcmVmaXggPz0gJChIT01FKQorYmluZGlyID89ICQocHJlZml4KS9iaW4KK2dpdHdlYmRpciA/PSAvdmFyL3d3dy9jZ2ktYmluCisKK1JNID89IHJtIC1mCitJTlNUQUxMID89IGluc3RhbGwKKworIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGdpdHdlYgorR0lUV0VCX0NPTkZJRyA9IGdpdHdlYl9jb25maWcucGVybAorR0lUV0VCX0NPTkZJR19TWVNURU0gPSAvZXRjL2dpdHdlYi5jb25mCitHSVRXRUJfQ09ORklHX0NPTU1PTiA9IC9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mCitHSVRXRUJfSE9NRV9MSU5LX1NUUiA9IHByb2plY3RzCitHSVRXRUJfU0lURU5BTUUgPQorR0lUV0VCX1BST0pFQ1RST09UID0gL3B1Yi9naXQKK0dJVFdFQl9QUk9KRUNUX01BWERFUFRIID0gMjAwNworR0lUV0VCX0VYUE9SVF9PSyA9CitHSVRXRUJfU1RSSUNUX0VYUE9SVCA9CitHSVRXRUJfQkFTRV9VUkwgPQorR0lUV0VCX0xJU1QgPQorR0lUV0VCX0hPTUVURVhUID0gaW5kZXh0ZXh0Lmh0bWwKK0dJVFdFQl9DU1MgPSBzdGF0aWMvZ2l0d2ViLmNzcworR0lUV0VCX0xPR08gPSBzdGF0aWMvZ2l0LWxvZ28ucG5nCitHSVRXRUJfRkFWSUNPTiA9IHN0YXRpYy9naXQtZmF2aWNvbi5wbmcKK0dJVFdFQl9KUyA9IHN0YXRpYy9naXR3ZWIuanMKK0dJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkcgPQorR0lUV0VCX1NJVEVfSEVBREVSID0KK0dJVFdFQl9TSVRFX0ZPT1RFUiA9CitISUdITElHSFRfQklOID0gaGlnaGxpZ2h0CisKKyMgaW5jbHVkZSB1c2VyIGNvbmZpZworLWluY2x1ZGUgLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi9jb25maWcubWFrCistaW5jbHVkZSBjb25maWcubWFrCisKKyMgZGV0ZXJtaW5lIHZlcnNpb24KKy4uL0dJVC1WRVJTSU9OLUZJTEU6IC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFCisJJChRVUlFVF9TVUJESVIwKS4uLyAkKFFVSUVUX1NVQkRJUjEpIEdJVC1WRVJTSU9OLUZJTEUKKworLWluY2x1ZGUgLi4vR0lULVZFUlNJT04tRklMRQorCisjIyMgQnVpbGQgcnVsZXMKKworU0hFTExfUEFUSCA/PSAkKFNIRUxMKQorUEVSTF9QQVRIICA/PSAvdXNyL2Jpbi9wZXJsCisKKyMgU2hlbGwgcXVvdGU7CitiaW5kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGJpbmRpcikpIycKK2dpdHdlYmRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0d2ViZGlyKSkjJworZ2l0d2Vic3RhdGljZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXR3ZWJkaXIpL3N0YXRpYykjJworU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpIycKK1BFUkxfUEFUSF9TUSAgPSAkKHN1YnN0ICcsJ1wnJywkKFBFUkxfUEFUSCkpIycKK0RFU1RESVJfU1EgICAgPSAkKHN1YnN0ICcsJ1wnJywkKERFU1RESVIpKSMnCisKKyMgUXVpZXQgZ2VuZXJhdGlvbiAodW5sZXNzIFY9MSkKK1FVSUVUX1NVQkRJUjAgID0gKyQoTUFLRSkgLUMgIyBzcGFjZSB0byBzZXBhcmF0ZSAtQyBhbmQgc3ViZGlyCitRVUlFVF9TVUJESVIxICA9CisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHcpLHcpCitQUklOVF9ESVIgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorZWxzZSAjICJtYWtlIC13IgorTk9fU1VCRElSID0gOgorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK2lmbmRlZiBWCisJUVVJRVQgICAgICAgICAgPSBACisJUVVJRVRfR0VOICAgICAgPSAkKFFVSUVUKWVjaG8gJyAgICcgR0VOICRAOworCVFVSUVUX1NVQkRJUjAgID0gK0BzdWJkaXI9CisJUVVJRVRfU1VCRElSMSAgPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCisJICAgICAgICAgICAgICAgICAkKE1BS0UpICQoUFJJTlRfRElSKSAtQyAkJHN1YmRpcgorCWV4cG9ydCBWCisJZXhwb3J0IFFVSUVUCisJZXhwb3J0IFFVSUVUX0dFTgorCWV4cG9ydCBRVUlFVF9TVUJESVIwCisJZXhwb3J0IFFVSUVUX1NVQkRJUjEKK2VuZGlmCitlbmRpZgorCithbGw6OiBnaXR3ZWIuY2dpIHN0YXRpYy9naXR3ZWIuanMKKworR0lUV0VCX1BST0dSQU1TID0gZ2l0d2ViLmNnaQorCitpZmRlZiBKU01JTgorR0lUV0VCX0ZJTEVTICs9IHN0YXRpYy9naXR3ZWIubWluLmpzCitHSVRXRUJfSlMgPSBzdGF0aWMvZ2l0d2ViLm1pbi5qcworYWxsOjogc3RhdGljL2dpdHdlYi5taW4uanMKK3N0YXRpYy9naXR3ZWIubWluLmpzOiBzdGF0aWMvZ2l0d2ViLmpzIEdJVFdFQi1CVUlMRC1PUFRJT05TCisJJChRVUlFVF9HRU4pJChKU01JTikgPCQ8ID4kQAorZWxzZQorR0lUV0VCX0ZJTEVTICs9IHN0YXRpYy9naXR3ZWIuanMKK2VuZGlmCisKK2lmZGVmIENTU01JTgorR0lUV0VCX0ZJTEVTICs9IHN0YXRpYy9naXR3ZWIubWluLmNzcworR0lUV0VCX0NTUyA9IHN0YXRpYy9naXR3ZWIubWluLmNzcworYWxsOjogc3RhdGljL2dpdHdlYi5taW4uY3NzCitzdGF0aWMvZ2l0d2ViLm1pbi5jc3M6IHN0YXRpYy9naXR3ZWIuY3NzIEdJVFdFQi1CVUlMRC1PUFRJT05TCisJJChRVUlFVF9HRU4pJChDU1NNSU4pIDwkPCA+JEAKK2Vsc2UKK0dJVFdFQl9GSUxFUyArPSBzdGF0aWMvZ2l0d2ViLmNzcworZW5kaWYKKworR0lUV0VCX0ZJTEVTICs9IHN0YXRpYy9naXQtbG9nby5wbmcgc3RhdGljL2dpdC1mYXZpY29uLnBuZworCisjIEphdmFTY3JpcHQgZmlsZXMgdGhhdCBhcmUgY29tcG9zZWQgKGNvbmNhdGVuYXRlZCkgdG8gZm9ybSBnaXR3ZWIuanMKKyMKKyMganMvbGliL2NvbW1vbi1saWIuanMgc2hvdWxkIGJlIGFsd2F5cyBmaXJzdCwgdGhlbiBqcy9saWIvKi5qcywKKyMgdGhlbiB0aGUgcmVzdCBvZiBmaWxlczsganMvZ2l0d2ViLmpzIHNob3VsZCBiZSBsYXN0IChpZiBpdCBleGlzdHMpCitHSVRXRUJfSlNMSUJfRklMRVMgKz0gc3RhdGljL2pzL2xpYi9jb21tb24tbGliLmpzCitHSVRXRUJfSlNMSUJfRklMRVMgKz0gc3RhdGljL2pzL2xpYi9kYXRldGltZS5qcworR0lUV0VCX0pTTElCX0ZJTEVTICs9IHN0YXRpYy9qcy9saWIvY29va2llcy5qcworR0lUV0VCX0pTTElCX0ZJTEVTICs9IHN0YXRpYy9qcy9qYXZhc2NyaXB0LWRldGVjdGlvbi5qcworR0lUV0VCX0pTTElCX0ZJTEVTICs9IHN0YXRpYy9qcy9hZGp1c3QtdGltZXpvbmUuanMKK0dJVFdFQl9KU0xJQl9GSUxFUyArPSBzdGF0aWMvanMvYmxhbWVfaW5jcmVtZW50YWwuanMKKworCitHSVRXRUJfUkVQTEFDRSA9IFwKKwktZSAnc3wrK0dJVF9WRVJTSU9OKyt8JChHSVRfVkVSU0lPTil8ZycgXAorCS1lICdzfCsrR0lUX0JJTkRJUisrfCQoYmluZGlyKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfQ09ORklHKyt8JChHSVRXRUJfQ09ORklHKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfQ09ORklHX1NZU1RFTSsrfCQoR0lUV0VCX0NPTkZJR19TWVNURU0pfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9DT05GSUdfQ09NTU9OKyt8JChHSVRXRUJfQ09ORklHX0NPTU1PTil8ZycgXAorCS1lICdzfCsrR0lUV0VCX0hPTUVfTElOS19TVFIrK3wkKEdJVFdFQl9IT01FX0xJTktfU1RSKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfU0lURU5BTUUrK3wkKEdJVFdFQl9TSVRFTkFNRSl8ZycgXAorCS1lICdzfCsrR0lUV0VCX1BST0pFQ1RST09UKyt8JChHSVRXRUJfUFJPSkVDVFJPT1QpfGcnIFwKKwktZSAnc3wiKytHSVRXRUJfUFJPSkVDVF9NQVhERVBUSCsrInwkKEdJVFdFQl9QUk9KRUNUX01BWERFUFRIKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfRVhQT1JUX09LKyt8JChHSVRXRUJfRVhQT1JUX09LKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfU1RSSUNUX0VYUE9SVCsrfCQoR0lUV0VCX1NUUklDVF9FWFBPUlQpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9CQVNFX1VSTCsrfCQoR0lUV0VCX0JBU0VfVVJMKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfTElTVCsrfCQoR0lUV0VCX0xJU1QpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9IT01FVEVYVCsrfCQoR0lUV0VCX0hPTUVURVhUKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfQ1NTKyt8JChHSVRXRUJfQ1NTKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfTE9HTysrfCQoR0lUV0VCX0xPR08pfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9GQVZJQ09OKyt8JChHSVRXRUJfRkFWSUNPTil8ZycgXAorCS1lICdzfCsrR0lUV0VCX0pTKyt8JChHSVRXRUJfSlMpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkcrK3wkKEdJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkcpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9TSVRFX0hFQURFUisrfCQoR0lUV0VCX1NJVEVfSEVBREVSKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfU0lURV9GT09URVIrK3wkKEdJVFdFQl9TSVRFX0ZPT1RFUil8ZycgXAorCS1lICdzfCsrSElHSExJR0hUX0JJTisrfCQoSElHSExJR0hUX0JJTil8ZycKKworR0lUV0VCLUJVSUxELU9QVElPTlM6IEZPUkNFCisJQHJtIC1mICRAKworCUBlY2hvICJ4IiAnJChQRVJMX1BBVEhfU1EpJyAkKEdJVFdFQl9SRVBMQUNFKSAiJChKU01JTil8JChDU1NNSU4pIiA+JEArCisJQGNtcCAtcyAkQCsgJEAgJiYgcm0gLWYgJEArIHx8IG12IC1mICRAKyAkQAorCitnaXR3ZWIuY2dpOiBnaXR3ZWIucGVybCBHSVRXRUItQlVJTEQtT1BUSU9OUworCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxc3wjIS4qcGVybHwjISQoUEVSTF9QQVRIX1NRKXwnIFwKKwkJJChHSVRXRUJfUkVQTEFDRSkgJDwgPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKKworc3RhdGljL2dpdHdlYi5qczogJChHSVRXRUJfSlNMSUJfRklMRVMpCisJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKKwljYXQgJF4gPiRAKyAmJiBcCisJbXYgJEArICRACisKKyMjIyBUZXN0aW5nIHJ1bGVzCisKK3Rlc3Q6CisJJChNQUtFKSAtQyAuLi90IGdpdHdlYi10ZXN0CisKK3Rlc3QtaW5zdGFsbGVkOgorCUdJVFdFQl9URVNUX0lOU1RBTExFRD0nJChERVNURElSX1NRKSQoZ2l0d2ViZGlyX1NRKScgXAorCQkkKE1BS0UpIC1DIC4uL3QgZ2l0d2ViLXRlc3QKKworIyMjIEluc3RhbGxhdGlvbiBydWxlcworCitpbnN0YWxsOiBhbGwKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQoZ2l0d2ViZGlyX1NRKScKKwkkKElOU1RBTEwpIC1tIDc1NSAkKEdJVFdFQl9QUk9HUkFNUykgJyQoREVTVERJUl9TUSkkKGdpdHdlYmRpcl9TUSknCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKGdpdHdlYnN0YXRpY2Rpcl9TUSknCisJJChJTlNUQUxMKSAtbSA2NDQgJChHSVRXRUJfRklMRVMpICckKERFU1RESVJfU1EpJChnaXR3ZWJzdGF0aWNkaXJfU1EpJworCisjIyMgQ2xlYW5pbmcgcnVsZXMKKworY2xlYW46CisJJChSTSkgZ2l0d2ViLmNnaSBzdGF0aWMvZ2l0d2ViLmpzIFwKKwkJc3RhdGljL2dpdHdlYi5taW4uanMgc3RhdGljL2dpdHdlYi5taW4uY3NzIFwKKwkJR0lUV0VCLUJVSUxELU9QVElPTlMKKworLlBIT05ZOiBhbGwgY2xlYW4gaW5zdGFsbCB0ZXN0IHRlc3QtaW5zdGFsbGVkIC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFIEZPUkNFCisKZGlmZiAtLWdpdCBhL2dpdHdlYi9SRUFETUUgYi9naXR3ZWIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTQ3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvUkVBRE1FCkBAIC0wLDAgKzEsNzMgQEAKK0dJVCB3ZWIgSW50ZXJmYWNlCis9PT09PT09PT09PT09PT09PQorCitUaGUgb25lIHdvcmtpbmcgb246CisgIGh0dHA6Ly9naXQua2VybmVsLm9yZy8KKworRnJvbSB0aGUgZ2l0IHZlcnNpb24gMS40LjAgZ2l0d2ViIGlzIGJ1bmRsZWQgd2l0aCBnaXQuCisKKworQnVpbGQgdGltZSBnaXR3ZWIgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlcmUgYXJlIG1hbnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2hpY2ggYWZmZWN0IGJ1aWxkaW5nIGdpdHdlYiAoYW1vbmcKK290aGVycyBjcmVhdGluZyBnaXR3ZWIuY2dpIG91dCBvZiBnaXR3ZWIucGVybCBieSByZXBsYWNpbmcgcGxhY2Vob2xkZXJzIHN1Y2gKK2FzIGArK0dJVF9CSU5ESVIrK2AgYnkgdGhlaXIgYnVpbGQtdGltZSB2YWx1ZXMpLgorCitCdWlsZGluZyBhbmQgaW5zdGFsbGluZyBnaXR3ZWIgaXMgZGVzY3JpYmVkIGluIGdpdHdlYidzIElOU1RBTEwgZmlsZQorKGluICdnaXR3ZWIvSU5TVEFMTCcpLgorCisKK1J1bnRpbWUgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dpdHdlYiBvYnRhaW5zIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIHRoZSBmb2xsb3dpbmcgc291cmNlcyBpbiB0aGUKK2ZvbGxvd2luZyBvcmRlcjoKKworMS4gYnVpbHQtaW4gdmFsdWVzIChzb21lIHNldCBkdXJpbmcgYnVpbGQgc3RhZ2UpLAorMi4gY29tbW9uIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSAoYEdJVFdFQl9DT05GSUdfQ09NTU9OYCwKKyAgIGRlZmF1bHRzIHRvICcvZXRjL2dpdHdlYi1jb21tb24uY29uZicpLAorMy4gZWl0aGVyIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uIGZpbGUgKGBHSVRXRUJfQ09ORklHYCwgZGVmYXVsdHMgdG8KKyAgICdnaXR3ZWJfY29uZmlnLnBlcmwnIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgaW5zdGFsbGVkIGdpdHdlYiksCisgICBvciBpZiBpdCBkb2VzIG5vdCBleGlzdHMgdGhlbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgIChgR0lUV0VCX0NPTkZJR19TWVNURU1gLCBkZWZhdWx0cyB0byAnL2V0Yy9naXR3ZWIuY29uZicpLgorCitWYWx1ZXMgb2J0YWluZWQgaW4gbGF0ZXIgY29uZmlndXJhdGlvbiBmaWxlcyBvdmVycmlkZSB2YWx1ZXMgb2J0YWluZWQgZWFybGllcgoraW4gYWJvdmUgc2VxdWVuY2UuCisKK1lvdSBjYW4gcmVhZCBkZWZhdWx0cyBpbiBzeXN0ZW0td2lkZSBHSVRXRUJfQ09ORklHX1NZU1RFTSBmcm9tIEdJVFdFQl9DT05GSUcKK2J5IGFkZGluZworCisgIHJlYWRfY29uZmlnX2ZpbGUoJEdJVFdFQl9DT05GSUdfU1lTVEVNKTsKKworYXQgdmVyeSBiZWdpbm5pbmcgb2YgcGVyLWluc3RhbmNlIEdJVFdFQl9DT05GSUcgZmlsZS4gIEluIHRoaXMgY2FzZQorc2V0dGluZ3MgaW4gc2FpZCBwZXItaW5zdGFuY2UgZmlsZSB3aWxsIG92ZXJyaWRlIHNldHRpbmdzIGZyb20KK3N5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZS4gIE5vdGUgdGhhdCByZWFkX2NvbmZpZ19maWxlIGNoZWNrcworaXRzZWxmIHRoYXQgdGhlICRHSVRXRUJfQ09ORklHX1NZU1RFTSBmaWxlIGV4aXN0cy4KKworVGhlIG1vc3Qgbm90YWJsZSB0aGluZyB0aGF0IGlzIG5vdCBjb25maWd1cmFibGUgYXQgY29tcGlsZSB0aW1lIGFyZSB0aGUKK29wdGlvbmFsIGZlYXR1cmVzLCBzdG9yZWQgaW4gdGhlICclZmVhdHVyZXMnIHZhcmlhYmxlLgorCitVbHRpbWF0ZSBkZXNjcmlwdGlvbiBvbiBob3cgdG8gcmVjb25maWd1cmUgdGhlIGRlZmF1bHQgZmVhdHVyZXMgc2V0dGluZworaW4geW91ciBgR0lUV0VCX0NPTkZJR2Agb3IgcGVyLXByb2plY3QgaW4gYHByb2plY3QuZ2l0L2NvbmZpZ2AgY2FuIGJlIGZvdW5kCithcyBjb21tZW50cyBpbnNpZGUgJ2dpdHdlYi5jZ2knLgorCitTZWUgYWxzbyBnaXR3ZWIuY29uZig1KSBtYW5wYWdlLgorCisKK1dlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHaXR3ZWIgY2FuIGJlIHJ1biBhcyBDR0kgc2NyaXB0LCBhcyBsZWdhY3kgbW9kX3BlcmwgYXBwbGljYXRpb24gKHVzaW5nCitNb2RQZXJsOjpSZWdpc3RyeSksIGFuZCBhcyBGYXN0Q0dJIHNjcmlwdC4gIFlvdSBjYW4gZmluZCBzb21lIHNpbXBsZSBleGFtcGxlcworaW4gIkV4YW1wbGUgd2ViIHNlcnZlciBjb25maWd1cmF0aW9uIiBzZWN0aW9uIGluIElOU1RBTEwgZmlsZSBmb3IgZ2l0d2ViIChpbgorZ2l0d2ViL0lOU1RBTEwpLgorCitTZWUgIldlYnNlcnZlciBjb25maWd1cmF0aW9uIiBhbmQgIkFkdmFuY2VkIHdlYiBzZXJ2ZXIgc2V0dXAiIHNlY3Rpb25zIGluCitnaXR3ZWIoMSkgbWFucGFnZS4KKworCitBVVRIT1JTCistLS0tLS0tCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnk6CisgIEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4KKworQW55IGNvbW1lbnQvcXVlc3Rpb24vY29uY2VybiB0bzoKKyAgR2l0IG1haWxpbmcgbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4KZGlmZiAtLWdpdCBhL2dpdHdlYi9naXR3ZWIucGVybCBiL2dpdHdlYi9naXR3ZWIucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMGVkOWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCkBAIC0wLDAgKzEsODMwMCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgZ2l0d2ViIC0gc2ltcGxlIHdlYiBpbnRlcmZhY2UgdG8gdHJhY2sgY2hhbmdlcyBpbiBnaXQgcmVwb3NpdG9yaWVzCisjCisjIChDKSAyMDA1LTIwMDYsIEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4KKyMgKEMpIDIwMDUsIENocmlzdGlhbiBHaWVya2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MgorCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIENHSSBxdyg6c3RhbmRhcmQgOmVzY2FwZUhUTUwgLW5vc3RpY2t5KTsKK3VzZSBDR0k6OlV0aWwgcXcodW5lc2NhcGUpOwordXNlIENHSTo6Q2FycCBxdyhmYXRhbHNUb0Jyb3dzZXIgc2V0X21lc3NhZ2UpOwordXNlIEVuY29kZTsKK3VzZSBGY250bCAnOm1vZGUnOwordXNlIEZpbGU6OkZpbmQgcXcoKTsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdyhiYXNlbmFtZSk7Cit1c2UgVGltZTo6SGlSZXMgcXcoZ2V0dGltZW9mZGF5IHR2X2ludGVydmFsKTsKK2Jpbm1vZGUgU1RET1VULCAnOnV0ZjgnOworCitvdXIgJHQwID0gWyBnZXR0aW1lb2ZkYXkoKSBdOworb3VyICRudW1iZXJfb2ZfZ2l0X2NtZHMgPSAwOworCitCRUdJTiB7CisJQ0dJLT5jb21waWxlKCkgaWYgJEVOVnsnTU9EX1BFUkwnfTsKK30KKworb3VyICR2ZXJzaW9uID0gIisrR0lUX1ZFUlNJT04rKyI7CisKK291ciAoJG15X3VybCwgJG15X3VyaSwgJGJhc2VfdXJsLCAkcGF0aF9pbmZvLCAkaG9tZV9saW5rKTsKK3N1YiBldmFsdWF0ZV91cmkgeworCW91ciAkY2dpOworCisJb3VyICRteV91cmwgPSAkY2dpLT51cmwoKTsKKwlvdXIgJG15X3VyaSA9ICRjZ2ktPnVybCgtYWJzb2x1dGUgPT4gMSk7CisKKwkjIEJhc2UgVVJMIGZvciByZWxhdGl2ZSBVUkxzIGluIGdpdHdlYiAoJGxvZ28sICRmYXZpY29uLCAuLi4pLAorCSMgbmVlZGVkIGFuZCB1c2VkIG9ubHkgZm9yIFVSTHMgd2l0aCBub25lbXB0eSBQQVRIX0lORk8KKwlvdXIgJGJhc2VfdXJsID0gJG15X3VybDsKKworCSMgV2hlbiB0aGUgc2NyaXB0IGlzIHVzZWQgYXMgRGlyZWN0b3J5SW5kZXgsIHRoZSBVUkwgZG9lcyBub3QgY29udGFpbiB0aGUgbmFtZQorCSMgb2YgdGhlIHNjcmlwdCBmaWxlIGl0c2VsZiwgYW5kICRjZ2ktPnVybCgpIGZhaWxzIHRvIHN0cmlwIFBBVEhfSU5GTywgc28gd2UKKwkjIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLiBXZSBtYWtlICRwYXRoX2luZm8gZ2xvYmFsIGJlY2F1c2UgaXQncyBhbHNvIHVzZWQKKwkjIGxhdGVyIG9uLgorCSMKKwkjIEFub3RoZXIgaXNzdWUgd2l0aCB0aGUgc2NyaXB0IGJlaW5nIHRoZSBEaXJlY3RvcnlJbmRleCBpcyB0aGF0IHRoZSByZXN1bHRpbmcKKwkjICRteV91cmwgZGF0YSBpcyBub3QgdGhlIGZ1bGwgc2NyaXB0IFVSTDogdGhpcyBpcyBnb29kLCBiZWNhdXNlIHdlIHdhbnQKKwkjIGdlbmVyYXRlZCBsaW5rcyB0byBrZWVwIGltcGx5aW5nIHRoZSBzY3JpcHQgbmFtZSBpZiBpdCB3YXNuJ3QgZXhwbGljaXRseQorCSMgaW5kaWNhdGVkIGluIHRoZSBVUkwgd2UncmUgaGFuZGxpbmcsIGJ1dCBpdCBtZWFucyB0aGF0ICRteV91cmwgY2Fubm90IGJlIHVzZWQKKwkjIGFzIGJhc2UgVVJMLgorCSMgVGhlcmVmb3JlLCBpZiB3ZSBuZWVkZWQgdG8gc3RyaXAgUEFUSF9JTkZPLCB0aGVuIHdlIGtub3cgdGhhdCB3ZSBoYXZlCisJIyB0byBidWlsZCB0aGUgYmFzZSBVUkwgb3Vyc2VsdmVzOgorCW91ciAkcGF0aF9pbmZvID0gZGVjb2RlX3V0ZjgoJEVOVnsiUEFUSF9JTkZPIn0pOworCWlmICgkcGF0aF9pbmZvKSB7CisJCSMgJHBhdGhfaW5mbyBoYXMgYWxyZWFkeSBiZWVuIFVSTC1kZWNvZGVkIGJ5IHRoZSB3ZWIgc2VydmVyLCBidXQKKwkJIyAkbXlfdXJsIGFuZCAkbXlfdXJpIGhhdmUgbm90LiBVUkwtZGVjb2RlIHRoZW0gc28gd2UgY2FuIHByb3Blcmx5CisJCSMgc3RyaXAgJHBhdGhfaW5mby4KKwkJJG15X3VybCA9IHVuZXNjYXBlKCRteV91cmwpOworCQkkbXlfdXJpID0gdW5lc2NhcGUoJG15X3VyaSk7CisJCWlmICgkbXlfdXJsID1+IHMsXFEkcGF0aF9pbmZvXEUkLCwgJiYKKwkJICAgICRteV91cmkgPX4gcyxcUSRwYXRoX2luZm9cRSQsLCAmJgorCQkgICAgZGVmaW5lZCAkRU5WeydTQ1JJUFRfTkFNRSd9KSB7CisJCQkkYmFzZV91cmwgPSAkY2dpLT51cmwoLWJhc2UgPT4gMSkgLiAkRU5WeydTQ1JJUFRfTkFNRSd9OworCQl9CisJfQorCisJIyB0YXJnZXQgb2YgdGhlIGhvbWUgbGluayBvbiB0b3Agb2YgYWxsIHBhZ2VzCisJb3VyICRob21lX2xpbmsgPSAkbXlfdXJpIHx8ICIvIjsKK30KKworIyBjb3JlIGdpdCBleGVjdXRhYmxlIHRvIHVzZQorIyB0aGlzIGNhbiBqdXN0IGJlICJnaXQiIGlmIHlvdXIgd2Vic2VydmVyIGhhcyBhIHNlbnNpYmxlIFBBVEgKK291ciAkR0lUID0gIisrR0lUX0JJTkRJUisrL2dpdCI7CisKKyMgYWJzb2x1dGUgZnMtcGF0aCB3aGljaCB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgcHJvamVjdCBwYXRoCisjb3VyICRwcm9qZWN0cm9vdCA9ICIvcHViL3NjbSI7CitvdXIgJHByb2plY3Ryb290ID0gIisrR0lUV0VCX1BST0pFQ1RST09UKysiOworCisjIGZzIHRyYXZlcnNpbmcgbGltaXQgZm9yIGdldHRpbmcgcHJvamVjdCBsaXN0CisjIHRoZSBudW1iZXIgaXMgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Ryb290CitvdXIgJHByb2plY3RfbWF4ZGVwdGggPSAiKytHSVRXRUJfUFJPSkVDVF9NQVhERVBUSCsrIjsKKworIyBzdHJpbmcgb2YgdGhlIGhvbWUgbGluayBvbiB0b3Agb2YgYWxsIHBhZ2VzCitvdXIgJGhvbWVfbGlua19zdHIgPSAiKytHSVRXRUJfSE9NRV9MSU5LX1NUUisrIjsKKworIyBuYW1lIG9mIHlvdXIgc2l0ZSBvciBvcmdhbml6YXRpb24gdG8gYXBwZWFyIGluIHBhZ2UgdGl0bGVzCisjIHJlcGxhY2UgdGhpcyB3aXRoIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlIGZvciBjbGVhcmVyIGJvb2ttYXJrcworb3VyICRzaXRlX25hbWUgPSAiKytHSVRXRUJfU0lURU5BTUUrKyIKKyAgICAgICAgICAgICAgICAgfHwgKCRFTlZ7J1NFUlZFUl9OQU1FJ30gfHwgIlVudGl0bGVkIikgLiAiIEdpdCI7CisKKyMgaHRtbCBzbmlwcGV0IHRvIGluY2x1ZGUgaW4gdGhlIDxoZWFkPiBzZWN0aW9uIG9mIGVhY2ggcGFnZQorb3VyICRzaXRlX2h0bWxfaGVhZF9zdHJpbmcgPSAiKytHSVRXRUJfU0lURV9IVE1MX0hFQURfU1RSSU5HKysiOworIyBmaWxlbmFtZSBvZiBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCB0b3Agb2YgZWFjaCBwYWdlCitvdXIgJHNpdGVfaGVhZGVyID0gIisrR0lUV0VCX1NJVEVfSEVBREVSKysiOworIyBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCBob21lIHBhZ2UKK291ciAkaG9tZV90ZXh0ID0gIisrR0lUV0VCX0hPTUVURVhUKysiOworIyBmaWxlbmFtZSBvZiBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCBib3R0b20gb2YgZWFjaCBwYWdlCitvdXIgJHNpdGVfZm9vdGVyID0gIisrR0lUV0VCX1NJVEVfRk9PVEVSKysiOworCisjIFVSSSBvZiBzdHlsZXNoZWV0cworb3VyIEBzdHlsZXNoZWV0cyA9ICgiKytHSVRXRUJfQ1NTKysiKTsKKyMgVVJJIG9mIGEgc2luZ2xlIHN0eWxlc2hlZXQsIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIGluIEdJVFdFQl9DT05GSUcuCitvdXIgJHN0eWxlc2hlZXQgPSB1bmRlZjsKKyMgVVJJIG9mIEdJVCBsb2dvICg3MngyNyBzaXplKQorb3VyICRsb2dvID0gIisrR0lUV0VCX0xPR08rKyI7CisjIFVSSSBvZiBHSVQgZmF2aWNvbiwgYXNzdW1lZCB0byBiZSBpbWFnZS9wbmcgdHlwZQorb3VyICRmYXZpY29uID0gIisrR0lUV0VCX0ZBVklDT04rKyI7CisjIFVSSSBvZiBnaXR3ZWIuanMgKEphdmFTY3JpcHQgY29kZSBmb3IgZ2l0d2ViKQorb3VyICRqYXZhc2NyaXB0ID0gIisrR0lUV0VCX0pTKysiOworCisjIFVSSSBhbmQgbGFiZWwgKHRpdGxlKSBvZiBHSVQgbG9nbyBsaW5rCisjb3VyICRsb2dvX3VybCA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy8iOworI291ciAkbG9nb19sYWJlbCA9ICJnaXQgZG9jdW1lbnRhdGlvbiI7CitvdXIgJGxvZ29fdXJsID0gImh0dHA6Ly9naXQtc2NtLmNvbS8iOworb3VyICRsb2dvX2xhYmVsID0gImdpdCBob21lcGFnZSI7CisKKyMgc291cmNlIG9mIHByb2plY3RzIGxpc3QKK291ciAkcHJvamVjdHNfbGlzdCA9ICIrK0dJVFdFQl9MSVNUKysiOworCisjIHRoZSB3aWR0aCAoaW4gY2hhcmFjdGVycykgb2YgdGhlIHByb2plY3RzIGxpc3QgIkRlc2NyaXB0aW9uIiBjb2x1bW4KK291ciAkcHJvamVjdHNfbGlzdF9kZXNjcmlwdGlvbl93aWR0aCA9IDI1OworCisjIGdyb3VwIHByb2plY3RzIGJ5IGNhdGVnb3J5IG9uIHRoZSBwcm9qZWN0cyBsaXN0CisjIChlbmFibGVkIGlmIHRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRydWUpCitvdXIgJHByb2plY3RzX2xpc3RfZ3JvdXBfY2F0ZWdvcmllcyA9IDA7CisKKyMgZGVmYXVsdCBjYXRlZ29yeSBpZiBub25lIHNwZWNpZmllZAorIyAobGVhdmUgdGhlIGVtcHR5IHN0cmluZyBmb3Igbm8gY2F0ZWdvcnkpCitvdXIgJHByb2plY3RfbGlzdF9kZWZhdWx0X2NhdGVnb3J5ID0gIiI7CisKKyMgZGVmYXVsdCBvcmRlciBvZiBwcm9qZWN0cyBsaXN0CisjIHZhbGlkIHZhbHVlcyBhcmUgbm9uZSwgcHJvamVjdCwgZGVzY3IsIG93bmVyLCBhbmQgYWdlCitvdXIgJGRlZmF1bHRfcHJvamVjdHNfb3JkZXIgPSAicHJvamVjdCI7CisKKyMgc2hvdyByZXBvc2l0b3J5IG9ubHkgaWYgdGhpcyBmaWxlIGV4aXN0cworIyAob25seSBlZmZlY3RpdmUgaWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdHJ1ZSkKK291ciAkZXhwb3J0X29rID0gIisrR0lUV0VCX0VYUE9SVF9PSysrIjsKKworIyBkb24ndCBnZW5lcmF0ZSBhZ2UgY29sdW1uIG9uIHRoZSBwcm9qZWN0cyBsaXN0IHBhZ2UKK291ciAkb21pdF9hZ2VfY29sdW1uID0gMDsKKworIyBkb24ndCBnZW5lcmF0ZSBpbmZvcm1hdGlvbiBhYm91dCBvd25lcnMgb2YgcmVwb3NpdG9yaWVzCitvdXIgJG9taXRfb3duZXI9MDsKKworIyBzaG93IHJlcG9zaXRvcnkgb25seSBpZiB0aGlzIHN1YnJvdXRpbmUgcmV0dXJucyB0cnVlCisjIHdoZW4gZ2l2ZW4gdGhlIHBhdGggdG8gdGhlIHByb2plY3QsIGZvciBleGFtcGxlOgorIyAgICBzdWIgeyByZXR1cm4gLWUgIiRfWzBdL2dpdC1kYWVtb24tZXhwb3J0LW9rIjsgfQorb3VyICRleHBvcnRfYXV0aF9ob29rID0gdW5kZWY7CisKKyMgb25seSBhbGxvdyB2aWV3aW5nIG9mIHJlcG9zaXRvcmllcyBhbHNvIHNob3duIG9uIHRoZSBvdmVydmlldyBwYWdlCitvdXIgJHN0cmljdF9leHBvcnQgPSAiKytHSVRXRUJfU1RSSUNUX0VYUE9SVCsrIjsKKworIyBsaXN0IG9mIGdpdCBiYXNlIFVSTHMgdXNlZCBmb3IgVVJMIHRvIHdoZXJlIGZldGNoIHByb2plY3QgZnJvbSwKKyMgaS5lLiBmdWxsIFVSTCBpcyAiJGdpdF9iYXNlX3VybC8kcHJvamVjdCIKK291ciBAZ2l0X2Jhc2VfdXJsX2xpc3QgPSBncmVwIHsgJF8gbmUgJycgfSAoIisrR0lUV0VCX0JBU0VfVVJMKysiKTsKKworIyBkZWZhdWx0IGJsb2JfcGxhaW4gbWltZXR5cGUgYW5kIGRlZmF1bHQgY2hhcnNldCBmb3IgdGV4dC9wbGFpbiBibG9iCitvdXIgJGRlZmF1bHRfYmxvYl9wbGFpbl9taW1ldHlwZSA9ICd0ZXh0L3BsYWluJzsKK291ciAkZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQgID0gdW5kZWY7CisKKyMgZmlsZSB0byB1c2UgZm9yIGd1ZXNzaW5nIE1JTUUgdHlwZXMgYmVmb3JlIHRyeWluZyAvZXRjL21pbWUudHlwZXMKKyMgKHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGdpdCByZXBvc2l0b3J5KQorb3VyICRtaW1ldHlwZXNfZmlsZSA9IHVuZGVmOworCisjIGFzc3VtZSB0aGlzIGNoYXJzZXQgaWYgbGluZSBjb250YWlucyBub24tVVRGLTggY2hhcmFjdGVyczsKKyMgaXQgc2hvdWxkIGJlIHZhbGlkIGVuY29kaW5nIChzZWUgRW5jb2Rpbmc6OlN1cHBvcnRlZCgzcG0pIGZvciBsaXN0KSwKKyMgZm9yIHdoaWNoIGVuY29kaW5nIGFsbCBieXRlIHNlcXVlbmNlcyBhcmUgdmFsaWQsIGZvciBleGFtcGxlCisjICdpc28tODg1OS0xJyBha2EgJ2xhdGluMScgKGl0IGlzIGRlY29kZWQgd2l0aG91dCBjaGVja2luZywgc28gaXQKKyMgY291bGQgYmUgZXZlbiAndXRmLTgnIGZvciB0aGUgb2xkIGJlaGF2aW9yKQorb3VyICRmYWxsYmFja19lbmNvZGluZyA9ICdsYXRpbjEnOworCisjIHJlbmFtZSBkZXRlY3Rpb24gb3B0aW9ucyBmb3IgZ2l0LWRpZmYgYW5kIGdpdC1kaWZmLXRyZWUKKyMgLSBkZWZhdWx0IGlzICctTScsIHdpdGggdGhlIGNvc3QgcHJvcG9ydGlvbmFsIHRvCisjICAgKG51bWJlciBvZiByZW1vdmVkIGZpbGVzKSAqIChudW1iZXIgb2YgbmV3IGZpbGVzKS4KKyMgLSBtb3JlIGNvc3RseSBpcyAnLUMnICh3aGljaCBpbXBsaWVzICctTScpLCB3aXRoIHRoZSBjb3N0IHByb3BvcnRpb25hbCB0bworIyAgIChudW1iZXIgb2YgY2hhbmdlZCBmaWxlcyArIG51bWJlciBvZiByZW1vdmVkIGZpbGVzKSAqIChudW1iZXIgb2YgbmV3IGZpbGVzKQorIyAtIGV2ZW4gbW9yZSBjb3N0bHkgaXMgJy1DJywgJy0tZmluZC1jb3BpZXMtaGFyZGVyJyB3aXRoIGNvc3QKKyMgICAobnVtYmVyIG9mIGZpbGVzIGluIHRoZSBvcmlnaW5hbCB0cmVlKSAqIChudW1iZXIgb2YgbmV3IGZpbGVzKQorIyAtIG9uZSBtaWdodCB3YW50IHRvIGluY2x1ZGUgJy1CJyBvcHRpb24sIGUuZy4gJy1CJywgJy1NJworb3VyIEBkaWZmX29wdHMgPSAoJy1NJyk7ICMgdGFrZW4gZnJvbSBnaXRfY29tbWl0CisKKyMgRGlzYWJsZXMgZmVhdHVyZXMgdGhhdCB3b3VsZCBhbGxvdyByZXBvc2l0b3J5IG93bmVycyB0byBpbmplY3Qgc2NyaXB0IGludG8KKyMgdGhlIGdpdHdlYiBkb21haW4uCitvdXIgJHByZXZlbnRfeHNzID0gMDsKKworIyBQYXRoIHRvIHRoZSBoaWdobGlnaHQgZXhlY3V0YWJsZSB0byB1c2UgKG11c3QgYmUgdGhlIG9uZSBmcm9tCisjIGh0dHA6Ly93d3cuYW5kcmUtc2ltb24uZGUgZHVlIHRvIGFzc3VtcHRpb25zIGFib3V0IHBhcmFtZXRlcnMgYW5kIG91dHB1dCkuCisjIFVzZWZ1bCBpZiBoaWdobGlnaHQgaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyIHdlYnNlcnZlcidzIFBBVEguCisjIFtEZWZhdWx0OiBoaWdobGlnaHRdCitvdXIgJGhpZ2hsaWdodF9iaW4gPSAiKytISUdITElHSFRfQklOKysiOworCisjIGluZm9ybWF0aW9uIGFib3V0IHNuYXBzaG90IGZvcm1hdHMgdGhhdCBnaXR3ZWIgaXMgY2FwYWJsZSBvZiBzZXJ2aW5nCitvdXIgJWtub3duX3NuYXBzaG90X2Zvcm1hdHMgPSAoCisJIyBuYW1lID0+IHsKKwkjIAknZGlzcGxheScgPT4gZGlzcGxheSBuYW1lLAorCSMgCSd0eXBlJyA9PiBtaW1lIHR5cGUsCisJIyAJJ3N1ZmZpeCcgPT4gZmlsZW5hbWUgc3VmZml4LAorCSMgCSdmb3JtYXQnID0+IC0tZm9ybWF0IGZvciBnaXQtYXJjaGl2ZSwKKwkjIAknY29tcHJlc3NvcicgPT4gW2NvbXByZXNzb3IgY29tbWFuZCBhbmQgYXJndW1lbnRzXQorCSMgCSAgICAgICAgICAgICAgICAoYXJyYXkgcmVmZXJlbmNlLCBvcHRpb25hbCkKKwkjIAknZGlzYWJsZWQnID0+IGJvb2xlYW4gKG9wdGlvbmFsKX0KKwkjCisJJ3RneicgPT4geworCQknZGlzcGxheScgPT4gJ3Rhci5neicsCisJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC1nemlwJywKKwkJJ3N1ZmZpeCcgPT4gJy50YXIuZ3onLAorCQknZm9ybWF0JyA9PiAndGFyJywKKwkJJ2NvbXByZXNzb3InID0+IFsnZ3ppcCcsICctbiddfSwKKworCSd0YnoyJyA9PiB7CisJCSdkaXNwbGF5JyA9PiAndGFyLmJ6MicsCisJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC1iemlwMicsCisJCSdzdWZmaXgnID0+ICcudGFyLmJ6MicsCisJCSdmb3JtYXQnID0+ICd0YXInLAorCQknY29tcHJlc3NvcicgPT4gWydiemlwMiddfSwKKworCSd0eHonID0+IHsKKwkJJ2Rpc3BsYXknID0+ICd0YXIueHonLAorCQkndHlwZScgPT4gJ2FwcGxpY2F0aW9uL3gteHonLAorCQknc3VmZml4JyA9PiAnLnRhci54eicsCisJCSdmb3JtYXQnID0+ICd0YXInLAorCQknY29tcHJlc3NvcicgPT4gWyd4eiddLAorCQknZGlzYWJsZWQnID0+IDF9LAorCisJJ3ppcCcgPT4geworCQknZGlzcGxheScgPT4gJ3ppcCcsCisJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC16aXAnLAorCQknc3VmZml4JyA9PiAnLnppcCcsCisJCSdmb3JtYXQnID0+ICd6aXAnfSwKKyk7CisKKyMgQWxpYXNlcyBzbyB3ZSB1bmRlcnN0YW5kIG9sZCBnaXR3ZWIuc25hcHNob3QgdmFsdWVzIGluIHJlcG9zaXRvcnkKKyMgY29uZmlndXJhdGlvbi4KK291ciAla25vd25fc25hcHNob3RfZm9ybWF0X2FsaWFzZXMgPSAoCisJJ2d6aXAnICA9PiAndGd6JywKKwknYnppcDInID0+ICd0YnoyJywKKwkneHonICAgID0+ICd0eHonLAorCisJIyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBsZWdhY3kgZ2l0d2ViIGNvbmZpZyBzdXBwb3J0CisJJ3gtZ3ppcCcgPT4gdW5kZWYsICdneicgPT4gdW5kZWYsCisJJ3gtYnppcDInID0+IHVuZGVmLCAnYnoyJyA9PiB1bmRlZiwKKwkneC16aXAnID0+IHVuZGVmLCAnJyA9PiB1bmRlZiwKKyk7CisKKyMgUGl4ZWwgc2l6ZXMgZm9yIGljb25zIGFuZCBhdmF0YXJzLiBJZiB0aGUgZGVmYXVsdCBmb250IHNpemVzIG9yIGxpbmVoZWlnaHRzCisjIGFyZSBjaGFuZ2VkLCBpdCBtYXkgYmUgYXBwcm9wcmlhdGUgdG8gY2hhbmdlIHRoZXNlIHZhbHVlcyB0b28gdmlhCisjICRHSVRXRUJfQ09ORklHLgorb3VyICVhdmF0YXJfc2l6ZSA9ICgKKwknZGVmYXVsdCcgPT4gMTYsCisJJ2RvdWJsZScgID0+IDMyCispOworCisjIFVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGxvYWQgdGhhdCB3ZSB3aWxsIHN0aWxsIHJlc3BvbmQgdG8gZ2l0d2ViIHF1ZXJpZXMuCisjIElmIHNlcnZlciBsb2FkIGV4Y2VlZCB0aGlzIHZhbHVlIHRoZW4gcmV0dXJuICI1MDMgc2VydmVyIGJ1c3kiIGVycm9yLgorIyBJZiBnaXR3ZWIgY2Fubm90IGRldGVybWluZWQgc2VydmVyIGxvYWQsIGl0IGlzIHRha2VuIHRvIGJlIDAuCisjIExlYXZlIGl0IHVuZGVmaW5lZCAob3Igc2V0IHRvICd1bmRlZicpIHRvIHR1cm4gb2ZmIGxvYWQgY2hlY2tpbmcuCitvdXIgJG1heGxvYWQgPSAzMDA7CisKKyMgY29uZmlndXJhdGlvbiBmb3IgJ2hpZ2hsaWdodCcgKGh0dHA6Ly93d3cuYW5kcmUtc2ltb24uZGUvKQorIyBtYXRjaCBieSBiYXNlbmFtZQorb3VyICVoaWdobGlnaHRfYmFzZW5hbWUgPSAoCisJIydQcm9ncmFtJyA9PiAncHknLAorCSMnTGlicmFyeScgPT4gJ3B5JywKKwknU0NvbnN0cnVjdCcgPT4gJ3B5JywgIyBTQ29ucyBlcXVpdmFsZW50IG9mIE1ha2VmaWxlCisJJ01ha2VmaWxlJyA9PiAnbWFrZScsCispOworIyBtYXRjaCBieSBleHRlbnNpb24KK291ciAlaGlnaGxpZ2h0X2V4dCA9ICgKKwkjIG1haW4gZXh0ZW5zaW9ucywgZGVmaW5pbmcgbmFtZSBvZiBzeW50YXg7CisJIyBzZWUgZmlsZXMgaW4gL3Vzci9zaGFyZS9oaWdobGlnaHQvbGFuZ0RlZnMvIGRpcmVjdG9yeQorCW1hcCB7ICRfID0+ICRfIH0KKwkJcXcocHkgYyBjcHAgcmIgamF2YSBjc3MgcGhwIHNoIHBsIGpzIHRleCBiaWIgeG1sIGF3ayBiYXQgaW5pIHNwZWMgdGNsIHNxbCBtYWtlKSwKKwkjIGFsdGVybmF0ZSBleHRlbnNpb25zLCBzZWUgL2V0Yy9oaWdobGlnaHQvZmlsZXR5cGVzLmNvbmYKKwknaCcgPT4gJ2MnLAorCW1hcCB7ICRfID0+ICdzaCcgIH0gcXcoYmFzaCB6c2gga3NoKSwKKwltYXAgeyAkXyA9PiAnY3BwJyB9IHF3KGN4eCBjKysgY2MpLAorCW1hcCB7ICRfID0+ICdwaHAnIH0gcXcocGhwMyBwaHA0IHBocDUgcGhwcyksCisJbWFwIHsgJF8gPT4gJ3BsJyAgfSBxdyhwZXJsIHBtKSwgIyBwZXJoYXBzIGFsc28gJ2NnaScKKwltYXAgeyAkXyA9PiAnbWFrZSd9IHF3KG1hayBtayksCisJbWFwIHsgJF8gPT4gJ3htbCcgfSBxdyh4aHRtbCBodG1sIGh0bSksCispOworCisjIFlvdSBkZWZpbmUgc2l0ZS13aWRlIGZlYXR1cmUgZGVmYXVsdHMgaGVyZTsgb3ZlcnJpZGUgdGhlbSB3aXRoCisjICRHSVRXRUJfQ09ORklHIGFzIG5lY2Vzc2FyeS4KK291ciAlZmVhdHVyZSA9ICgKKwkjIGZlYXR1cmUgPT4geworCSMgCSdzdWInID0+IGZlYXR1cmUtc3ViIChzdWJyb3V0aW5lKSwKKwkjIAknb3ZlcnJpZGUnID0+IGFsbG93LW92ZXJyaWRlIChib29sZWFuKSwKKwkjIAknZGVmYXVsdCcgPT4gWyBkZWZhdWx0IG9wdGlvbnMuLi5dIChhcnJheSByZWZlcmVuY2UpfQorCSMKKwkjIGlmIGZlYXR1cmUgaXMgb3ZlcnJpZGFibGUgKGl0IG1lYW5zIHRoYXQgYWxsb3ctb3ZlcnJpZGUgaGFzIHRydWUgdmFsdWUpLAorCSMgdGhlbiBmZWF0dXJlLXN1YiB3aWxsIGJlIGNhbGxlZCB3aXRoIGRlZmF1bHQgb3B0aW9ucyBhcyBwYXJhbWV0ZXJzOworCSMgcmV0dXJuIHZhbHVlIG9mIGZlYXR1cmUtc3ViIGluZGljYXRlcyBpZiB0byBlbmFibGUgc3BlY2lmaWVkIGZlYXR1cmUKKwkjCisJIyBpZiB0aGVyZSBpcyBubyAnc3ViJyBrZXkgKG5vIGZlYXR1cmUtc3ViKSwgdGhlbiBmZWF0dXJlIGNhbm5vdCBiZQorCSMgb3ZlcnJpZGRlbgorCSMKKwkjIHVzZSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoPGZlYXR1cmU+KSB0byByZXRyaWV2ZSB0aGUgPGZlYXR1cmU+IHZhbHVlCisJIyAoYW4gYXJyYXkpIG9yIGdpdHdlYl9jaGVja19mZWF0dXJlKDxmZWF0dXJlPikgdG8gY2hlY2sgaWYgPGZlYXR1cmU+CisJIyBpcyBlbmFibGVkCisKKwkjIEVuYWJsZSB0aGUgJ2JsYW1lJyBibG9iIHZpZXcsIHNob3dpbmcgdGhlIGxhc3QgY29tbWl0IHRoYXQgbW9kaWZpZWQKKwkjIGVhY2ggbGluZSBpbiB0aGUgZmlsZS4gVGhpcyBjYW4gYmUgdmVyeSBDUFUtaW50ZW5zaXZlLgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2JsYW1lJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnYmxhbWUnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLmJsYW1lID0gMHwxOworCSdibGFtZScgPT4geworCQknc3ViJyA9PiBzdWIgeyBmZWF0dXJlX2Jvb2woJ2JsYW1lJywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIEVuYWJsZSB0aGUgJ3NuYXBzaG90JyBsaW5rLCBwcm92aWRpbmcgYSBjb21wcmVzc2VkIGFyY2hpdmUgb2YgYW55CisJIyB0cmVlLiBUaGlzIGNhbiBwb3RlbnRpYWxseSBnZW5lcmF0ZSBoaWdoIHRyYWZmaWMgaWYgeW91IGhhdmUgbGFyZ2UKKwkjIHByb2plY3QuCisKKwkjIFZhbHVlIGlzIGEgbGlzdCBvZiBmb3JtYXRzIGRlZmluZWQgaW4gJWtub3duX3NuYXBzaG90X2Zvcm1hdHMgdGhhdAorCSMgeW91IHdpc2ggdG8gb2ZmZXIuCisJIyBUbyBkaXNhYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydzbmFwc2hvdCd9eydkZWZhdWx0J30gPSBbXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnc25hcHNob3QnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcsIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZm9ybWF0cyBvciAibm9uZSIKKwkjIHRvIGRpc2FibGUuICBFeGFtcGxlOiBnaXR3ZWIuc25hcHNob3QgPSB0YnoyLHppcDsKKwknc25hcHNob3QnID0+IHsKKwkJJ3N1YicgPT4gXCZmZWF0dXJlX3NuYXBzaG90LAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbJ3RneiddfSwKKworCSMgRW5hYmxlIHRleHQgc2VhcmNoLCB3aGljaCB3aWxsIGxpc3QgdGhlIGNvbW1pdHMgd2hpY2ggbWF0Y2ggYXV0aG9yLAorCSMgY29tbWl0dGVyIG9yIGNvbW1pdCB0ZXh0IHRvIGEgZ2l2ZW4gc3RyaW5nLiAgRW5hYmxlZCBieSBkZWZhdWx0LgorCSMgUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCSMKKwkjIE5vdGUgdGhhdCB0aGlzIGNvbnRyb2xzIGFsbCBzZWFyY2ggZmVhdHVyZXMsIHdoaWNoIG1lYW5zIHRoYXQgaWYKKwkjIGl0IGlzIGRpc2FibGVkLCB0aGVuICdncmVwJyBhbmQgJ3BpY2theGUnIHNlYXJjaCB3b3VsZCBhbHNvIGJlCisJIyBkaXNhYmxlZC4KKwknc2VhcmNoJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsxXX0sCisKKwkjIEVuYWJsZSBncmVwIHNlYXJjaCwgd2hpY2ggd2lsbCBsaXN0IHRoZSBmaWxlcyBpbiBjdXJyZW50bHkgc2VsZWN0ZWQKKwkjIHRyZWUgY29udGFpbmluZyB0aGUgZ2l2ZW4gc3RyaW5nLiBFbmFibGVkIGJ5IGRlZmF1bHQuIFRoaXMgY2FuIGJlCisJIyBwb3RlbnRpYWxseSBDUFUtaW50ZW5zaXZlLCBvZiBjb3Vyc2UuCisJIyBOb3RlIHRoYXQgeW91IG5lZWQgdG8gaGF2ZSAnc2VhcmNoJyBmZWF0dXJlIGVuYWJsZWQgdG9vLgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2dyZXAnfXsnZGVmYXVsdCd9ID0gWzFdOworCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydncmVwJ317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5ncmVwID0gMHwxOworCSdncmVwJyA9PiB7CisJCSdzdWInID0+IHN1YiB7IGZlYXR1cmVfYm9vbCgnZ3JlcCcsIEBfKSB9LAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMV19LAorCisJIyBFbmFibGUgdGhlIHBpY2theGUgc2VhcmNoLCB3aGljaCB3aWxsIGxpc3QgdGhlIGNvbW1pdHMgdGhhdCBtb2RpZmllZAorCSMgYSBnaXZlbiBzdHJpbmcgaW4gYSBmaWxlLiBUaGlzIGNhbiBiZSBwcmFjdGljYWwgYW5kIHF1aXRlIGZhc3RlcgorCSMgYWx0ZXJuYXRpdmUgdG8gJ2JsYW1lJywgYnV0IHN0aWxsIHBvdGVudGlhbGx5IENQVS1pbnRlbnNpdmUuCisJIyBOb3RlIHRoYXQgeW91IG5lZWQgdG8gaGF2ZSAnc2VhcmNoJyBmZWF0dXJlIGVuYWJsZWQgdG9vLgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3BpY2theGUnfXsnZGVmYXVsdCd9ID0gWzFdOworCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydwaWNrYXhlJ317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5waWNrYXhlID0gMHwxOworCSdwaWNrYXhlJyA9PiB7CisJCSdzdWInID0+IHN1YiB7IGZlYXR1cmVfYm9vbCgncGlja2F4ZScsIEBfKSB9LAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMV19LAorCisJIyBFbmFibGUgc2hvd2luZyBzaXplIG9mIGJsb2JzIGluIGEgJ3RyZWUnIHZpZXcsIGluIGEgc2VwYXJhdGUKKwkjIGNvbHVtbiwgc2ltaWxhciB0byB3aGF0ICdscyAtbCcgZG9lcy4gIFRoaXMgY29zdCBhIGJpdCBvZiBJTy4KKworCSMgVG8gZGlzYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnc2hvdy1zaXplcyd9eydkZWZhdWx0J30gPSBbMF07CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3Nob3ctc2l6ZXMnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLnNob3dzaXplcyA9IDB8MTsKKwknc2hvdy1zaXplcycgPT4geworCQknc3ViJyA9PiBzdWIgeyBmZWF0dXJlX2Jvb2woJ3Nob3dzaXplcycsIEBfKSB9LAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMV19LAorCisJIyBNYWtlIGdpdHdlYiB1c2UgYW4gYWx0ZXJuYXRpdmUgZm9ybWF0IG9mIHRoZSBVUkxzIHdoaWNoIGNhbiBiZQorCSMgbW9yZSByZWFkYWJsZSBhbmQgbmF0dXJhbC1sb29raW5nOiBwcm9qZWN0IG5hbWUgaXMgZW1iZWRkZWQKKwkjIGRpcmVjdGx5IGluIHRoZSBwYXRoIGFuZCB0aGUgcXVlcnkgc3RyaW5nIGNvbnRhaW5zIG90aGVyCisJIyBhdXhpbGlhcnkgaW5mb3JtYXRpb24uIEFsbCBnaXR3ZWIgaW5zdGFsbGF0aW9ucyByZWNvZ25pemUKKwkjIFVSTCBpbiBlaXRoZXIgZm9ybWF0OyB0aGlzIGNvbmZpZ3VyZXMgaW4gd2hpY2ggZm9ybWF0cyBnaXR3ZWIKKwkjIGdlbmVyYXRlcyBsaW5rcy4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydwYXRoaW5mbyd9eydkZWZhdWx0J30gPSBbMV07CisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisKKwkjIE5vdGUgdGhhdCB5b3Ugd2lsbCBuZWVkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiBDU1MsCisJIyBmYXZpY29uLCBsb2dvIGFuZCBwb3NzaWJseSBvdGhlciBmaWxlcyB0byBhbiBhYnNvbHV0ZSBVUkwuIEFsc28sCisJIyBpZiBnaXR3ZWIuY2dpIHNlcnZlcyBhcyB5b3VyIGluZGV4ZmlsZSwgeW91IHdpbGwgbmVlZCB0byBmb3JjZQorCSMgJG15X3VyaSB0byBjb250YWluIHRoZSBzY3JpcHQgbmFtZSBpbiB5b3VyICRHSVRXRUJfQ09ORklHLgorCSdwYXRoaW5mbycgPT4geworCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMF19LAorCisJIyBNYWtlIGdpdHdlYiBjb25zaWRlciBwcm9qZWN0cyBpbiBwcm9qZWN0IHJvb3Qgc3ViZGlyZWN0b3JpZXMKKwkjIHRvIGJlIGZvcmtzIG9mIGV4aXN0aW5nIHByb2plY3RzLiBHaXZlbiBwcm9qZWN0ICRwcm9qbmFtZS5naXQsCisJIyBwcm9qZWN0cyBtYXRjaGluZyAkcHJvam5hbWUvKi5naXQgd2lsbCBub3QgYmUgc2hvd24gaW4gdGhlIG1haW4KKwkjIHByb2plY3RzIGxpc3QsIGluc3RlYWQgYSAnKycgbWFyayB3aWxsIGJlIGFkZGVkIHRvICRwcm9qbmFtZQorCSMgdGhlcmUgYW5kIGEgJ2ZvcmtzJyB2aWV3IHdpbGwgYmUgZW5hYmxlZCBmb3IgdGhlIHByb2plY3QsIGxpc3RpbmcKKwkjIGFsbCB0aGUgZm9ya3MuIElmIHByb2plY3QgbGlzdCBpcyB0YWtlbiBmcm9tIGEgZmlsZSwgZm9ya3MgaGF2ZQorCSMgdG8gYmUgbGlzdGVkIGFmdGVyIHRoZSBtYWluIHByb2plY3QuCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnZm9ya3MnfXsnZGVmYXVsdCd9ID0gWzFdOworCSMgUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCSdmb3JrcycgPT4geworCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMF19LAorCisJIyBJbnNlcnQgY3VzdG9tIGxpbmtzIHRvIHRoZSBhY3Rpb24gYmFyIG9mIGFsbCBwcm9qZWN0IHBhZ2VzLgorCSMgVGhpcyBlbmFibGVzIHlvdSBtYWlubHkgdG8gbGluayB0byB0aGlyZC1wYXJ0eSBzY3JpcHRzIGludGVncmF0aW5nCisJIyBpbnRvIGdpdHdlYjsgZS5nLiBnaXQtYnJvd3NlciBmb3IgZ3JhcGhpY2FsIGhpc3RvcnkgcmVwcmVzZW50YXRpb24KKwkjIG9yIGN1c3RvbSB3ZWItYmFzZWQgcmVwb3NpdG9yeSBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UuCisKKwkjIFRoZSAnZGVmYXVsdCcgdmFsdWUgY29uc2lzdHMgb2YgYSBsaXN0IG9mIHRyaXBsZXRzIGluIHRoZSBmb3JtCisJIyAobGFiZWwsIGxpbmssIHBvc2l0aW9uKSB3aGVyZSBwb3NpdGlvbiBpcyB0aGUgbGFiZWwgYWZ0ZXIgd2hpY2gKKwkjIHRvIGluc2VydCB0aGUgbGluayBhbmQgbGluayBpcyBhIGZvcm1hdCBzdHJpbmcgd2hlcmUgJW4gZXhwYW5kcworCSMgdG8gdGhlIHByb2plY3QgbmFtZSwgJWYgdG8gdGhlIHByb2plY3QgcGF0aCB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0sCisJIyAlaCB0byB0aGUgY3VycmVudCBoYXNoIChoIGdpdHdlYiBwYXJhbWV0ZXIpIGFuZCAlYiB0byB0aGUgY3VycmVudAorCSMgaGFzaCBiYXNlIChoYiBnaXR3ZWIgcGFyYW1ldGVyKTsgJSUgZXhwYW5kcyB0byAlLgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRyBlLmcuCisJIyAkZmVhdHVyZXsnYWN0aW9ucyd9eydkZWZhdWx0J30gPSBbKCdncmFwaGljbG9nJywKKwkjIAknL2dpdC1icm93c2VyL2J5LWNvbW1pdC5odG1sP3I9JW4nLCAnc3VtbWFyeScpXTsKKwkjIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKwknYWN0aW9ucycgPT4geworCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbXX0sCisKKwkjIEFsbG93IGdpdHdlYiBzY2FuIHByb2plY3QgY29udGVudCB0YWdzIG9mIHByb2plY3QgcmVwb3NpdG9yeSwKKwkjIGFuZCBkaXNwbGF5IHRoZSBwb3B1bGFyIFdlYiAyLjAtaXNoICJ0YWcgY2xvdWQiIG5lYXIgdGhlIHByb2plY3RzCisJIyBsaXN0LiAgTm90ZSB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIENPTVBMRVRFTFkgZGlmZmVyZW50IGZyb20gdGhlCisJIyBub3JtYWwgR2l0IHRhZ3MuCisKKwkjIGdpdHdlYiBieSBpdHNlbGYgY2FuIHNob3cgZXhpc3RpbmcgdGFncywgYnV0IGl0IGRvZXMgbm90IGhhbmRsZQorCSMgdGFnZ2luZyBpdHNlbGY7IHlvdSBuZWVkIHRvIGRvIGl0IGV4dGVybmFsbHksIG91dHNpZGUgZ2l0d2ViLgorCSMgVGhlIGZvcm1hdCBpcyBkZXNjcmliZWQgaW4gZ2l0X2dldF9wcm9qZWN0X2N0YWdzKCkgc3Vicm91dGluZS4KKwkjIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBIVE1MOjpUYWdDbG91ZCBQZXJsIG1vZHVsZSB0byBnZXQKKwkjIGEgcHJldHR5IHRhZyBjbG91ZCBpbnN0ZWFkIG9mIGp1c3QgYSBsaXN0IG9mIHRhZ3MuCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnY3RhZ3MnfXsnZGVmYXVsdCd9ID0gWzFdOworCSMgUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCisJIyBJbiB0aGUgZnV0dXJlIHdoZXRoZXIgY3RhZ3MgZWRpdGluZyBpcyBlbmFibGVkIG1pZ2h0IGRlcGVuZAorCSMgb24gdGhlIHZhbHVlLCBidXQgdXNpbmcgMSBzaG91bGQgYWx3YXlzIG1lYW4gbm8gZWRpdGluZyBvZiBjdGFncy4KKwknY3RhZ3MnID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhdGNoZXMgaW4gYSBwYXRjaHNldCBnZW5lcmF0ZWQgaW4gcGF0Y2gKKwkjIHZpZXcuIFNldCB0aGlzIHRvIDAgb3IgdW5kZWYgdG8gZGlzYWJsZSBwYXRjaCB2aWV3LCBvciB0byBhCisJIyBuZWdhdGl2ZSBudW1iZXIgdG8gcmVtb3ZlIGFueSBsaW1pdC4KKworCSMgVG8gZGlzYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsncGF0Y2hlcyd9eydkZWZhdWx0J30gPSBbMF07CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3BhdGNoZXMnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLnBhdGNoZXMgPSAwfG47CisJIyB3aGVyZSBuIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXRjaGVzIGFsbG93ZWQgaW4gYSBwYXRjaHNldC4KKwkncGF0Y2hlcycgPT4geworCQknc3ViJyA9PiBcJmZlYXR1cmVfcGF0Y2hlcywKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzE2XX0sCisKKwkjIEF2YXRhciBzdXBwb3J0LiBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCB2aWV3cyBzdWNoIGFzCisJIyBzaG9ydGxvZyBvciBjb21taXQgd2lsbCBkaXNwbGF5IGFuIGF2YXRhciBhc3NvY2lhdGVkIHdpdGgKKwkjIHRoZSBlbWFpbCBvZiB0aGUgY29tbWl0dGVyKHMpIGFuZC9vciBhdXRob3IocykuCisKKwkjIEN1cnJlbnRseSBhdmFpbGFibGUgcHJvdmlkZXJzIGFyZSBncmF2YXRhciBhbmQgcGljb24uCisJIyBJZiBhbiB1bmtub3duIHByb3ZpZGVyIGlzIHNwZWNpZmllZCwgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisKKwkjIEdyYXZhdGFyIGRlcGVuZHMgb24gRGlnZXN0OjpNRDUuCisJIyBQaWNvbiBjdXJyZW50bHkgcmVsaWVzIG9uIHRoZSBpbmRpYW5hLmVkdSBkYXRhYmFzZS4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydhdmF0YXInfXsnZGVmYXVsdCd9ID0gWyc8cHJvdmlkZXI+J107CisJIyB3aGVyZSA8cHJvdmlkZXI+IGlzIGVpdGhlciBncmF2YXRhciBvciBwaWNvbi4KKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnYXZhdGFyJ317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5hdmF0YXIgPSA8cHJvdmlkZXI+OworCSdhdmF0YXInID0+IHsKKwkJJ3N1YicgPT4gXCZmZWF0dXJlX2F2YXRhciwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWycnXX0sCisKKwkjIEVuYWJsZSBkaXNwbGF5aW5nIGhvdyBtdWNoIHRpbWUgYW5kIGhvdyBtYW55IGdpdCBjb21tYW5kcworCSMgaXQgdG9vayB0byBnZW5lcmF0ZSBhbmQgZGlzcGxheSBwYWdlLiAgRGlzYWJsZWQgYnkgZGVmYXVsdC4KKwkjIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKwkndGltZWQnID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgRW5hYmxlIHR1cm5pbmcgc29tZSBsaW5rcyBpbnRvIGxpbmtzIHRvIGFjdGlvbnMgd2hpY2ggcmVxdWlyZQorCSMgSmF2YVNjcmlwdCB0byBydW4gKGxpa2UgJ2JsYW1lX2luY3JlbWVudGFsJykuICBOb3QgZW5hYmxlZCBieQorCSMgZGVmYXVsdC4gIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCisJJ2phdmFzY3JpcHQtYWN0aW9ucycgPT4geworCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMF19LAorCisJIyBFbmFibGUgYW5kIGNvbmZpZ3VyZSBhYmlsaXR5IHRvIGNoYW5nZSBjb21tb24gdGltZXpvbmUgZm9yIGRhdGVzCisJIyBpbiBnaXR3ZWIgb3V0cHV0IHZpYSBKYXZhU2NyaXB0LiAgRW5hYmxlZCBieSBkZWZhdWx0LgorCSMgUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCSdqYXZhc2NyaXB0LXRpbWV6b25lJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsKKwkJCSdsb2NhbCcsICAgICAjIGRlZmF1bHQgdGltZXpvbmU6ICd1dGMnLCAnbG9jYWwnLCBvciAnKC18KylISE1NJyBmb3JtYXQsCisJCQkgICAgICAgICAgICAgIyBvciB1bmRlZiB0byB0dXJuIG9mZiB0aGlzIGZlYXR1cmUKKwkJCSdnaXR3ZWJfdHonLCAjIG5hbWUgb2YgY29va2llIHdoZXJlIHRvIHN0b3JlIHNlbGVjdGVkIHRpbWV6b25lCisJCQknZGF0ZXRpbWUnLCAgIyBDU1MgY2xhc3MgdXNlZCB0byBtYXJrIHVwIGRhdGVzIGZvciBtYW5pcHVsYXRpb24KKwkJXX0sCisKKwkjIFN5bnRheCBoaWdobGlnaHRpbmcgc3VwcG9ydC4gVGhpcyBpcyBiYXNlZCBvbiBEYW5pZWwgU3ZlbnNzb24ncworCSMgYW5kIFNoYW0gQ2h1a291cnkncyB3b3JrIGluIGdpdHdlYi14bW1zMi5naXQuCisJIyBJdCByZXF1aXJlcyB0aGUgJ2hpZ2hsaWdodCcgcHJvZ3JhbSBwcmVzZW50IGluICRQQVRILAorCSMgYW5kIHRoZXJlZm9yZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2hpZ2hsaWdodCd9eydkZWZhdWx0J30gPSBbMV07CisKKwknaGlnaGxpZ2h0JyA9PiB7CisJCSdzdWInID0+IHN1YiB7IGZlYXR1cmVfYm9vbCgnaGlnaGxpZ2h0JywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIEVuYWJsZSBkaXNwbGF5aW5nIG9mIHJlbW90ZSBoZWFkcyBpbiB0aGUgaGVhZHMgbGlzdAorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3JlbW90ZV9oZWFkcyd9eydkZWZhdWx0J30gPSBbMV07CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3JlbW90ZV9oZWFkcyd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIucmVtb3RlX2hlYWRzID0gMHwxOworCSdyZW1vdGVfaGVhZHMnID0+IHsKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdyZW1vdGVfaGVhZHMnLCBAXykgfSwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKyk7CisKK3N1YiBnaXR3ZWJfZ2V0X2ZlYXR1cmUgeworCW15ICgkbmFtZSkgPSBAXzsKKwlyZXR1cm4gdW5sZXNzIGV4aXN0cyAkZmVhdHVyZXskbmFtZX07CisJbXkgKCRzdWIsICRvdmVycmlkZSwgQGRlZmF1bHRzKSA9ICgKKwkJJGZlYXR1cmV7JG5hbWV9eydzdWInfSwKKwkJJGZlYXR1cmV7JG5hbWV9eydvdmVycmlkZSd9LAorCQlAeyRmZWF0dXJleyRuYW1lfXsnZGVmYXVsdCd9fSk7CisJIyBwcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIHBvc3NpYmxlIG9ubHkgaWYgd2UgaGF2ZSBwcm9qZWN0CisJb3VyICRnaXRfZGlyOyAjIGdsb2JhbCB2YXJpYWJsZSwgZGVjbGFyZWQgbGF0ZXIKKwlpZiAoISRvdmVycmlkZSB8fCAhZGVmaW5lZCAkZ2l0X2RpcikgeworCQlyZXR1cm4gQGRlZmF1bHRzOworCX0KKwlpZiAoIWRlZmluZWQgJHN1YikgeworCQl3YXJuICJmZWF0dXJlICRuYW1lIGlzIG5vdCBvdmVycmlkYWJsZSI7CisJCXJldHVybiBAZGVmYXVsdHM7CisJfQorCXJldHVybiAkc3ViLT4oQGRlZmF1bHRzKTsKK30KKworIyBBIHdyYXBwZXIgdG8gY2hlY2sgaWYgYSBnaXZlbiBmZWF0dXJlIGlzIGVuYWJsZWQuCisjIFdpdGggdGhpcywgeW91IGNhbiBzYXkKKyMKKyMgICBteSAkYm9vbF9mZWF0ID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2Jvb2xfZmVhdCcpOworIyAgIGdpdHdlYl9jaGVja19mZWF0dXJlKCdib29sX2ZlYXQnKSBvciBzb21lY29kZTsKKyMKKyMgaW5zdGVhZCBvZgorIworIyAgIG15ICgkYm9vbF9mZWF0KSA9IGdpdHdlYl9nZXRfZmVhdHVyZSgnYm9vbF9mZWF0Jyk7CisjICAgKGdpdHdlYl9nZXRfZmVhdHVyZSgnYm9vbF9mZWF0JykpWzBdIG9yIHNvbWVjb2RlOworIworc3ViIGdpdHdlYl9jaGVja19mZWF0dXJlIHsKKwlyZXR1cm4gKGdpdHdlYl9nZXRfZmVhdHVyZShAXykpWzBdOworfQorCisKK3N1YiBmZWF0dXJlX2Jvb2wgeworCW15ICRrZXkgPSBzaGlmdDsKKwlteSAoJHZhbCkgPSBnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCRrZXksICctLWJvb2wnKTsKKworCWlmICghZGVmaW5lZCAkdmFsKSB7CisJCXJldHVybiAoJF9bMF0pOworCX0gZWxzaWYgKCR2YWwgZXEgJ3RydWUnKSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNpZiAoJHZhbCBlcSAnZmFsc2UnKSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitzdWIgZmVhdHVyZV9zbmFwc2hvdCB7CisJbXkgKEBmbXRzKSA9IEBfOworCisJbXkgKCR2YWwpID0gZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygnc25hcHNob3QnKTsKKworCWlmICgkdmFsKSB7CisJCUBmbXRzID0gKCR2YWwgZXEgJ25vbmUnID8gKCkgOiBzcGxpdCAvXHMqWyxcc11ccyovLCAkdmFsKTsKKwl9CisKKwlyZXR1cm4gQGZtdHM7Cit9CisKK3N1YiBmZWF0dXJlX3BhdGNoZXMgeworCW15IEB2YWwgPSAoZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygncGF0Y2hlcycsICctLWludCcpKTsKKworCWlmIChAdmFsKSB7CisJCXJldHVybiBAdmFsOworCX0KKworCXJldHVybiAoJF9bMF0pOworfQorCitzdWIgZmVhdHVyZV9hdmF0YXIgeworCW15IEB2YWwgPSAoZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygnYXZhdGFyJykpOworCisJcmV0dXJuIEB2YWwgPyBAdmFsIDogQF87Cit9CisKKyMgY2hlY2tpbmcgSEVBRCBmaWxlIHdpdGggLWUgaXMgZnJhZ2lsZSBpZiB0aGUgcmVwb3NpdG9yeSB3YXMKKyMgaW5pdGlhbGl6ZWQgbG9uZyB0aW1lIGFnbyAoaS5lLiBzeW1saW5rIEhFQUQpIGFuZCB3YXMgcGFjay1yZWYnZWQKKyMgYW5kIHRoZW4gcHJ1bmVkLgorc3ViIGNoZWNrX2hlYWRfbGluayB7CisJbXkgKCRkaXIpID0gQF87CisJbXkgJGhlYWRmaWxlID0gIiRkaXIvSEVBRCI7CisJcmV0dXJuICgoLWUgJGhlYWRmaWxlKSB8fAorCQkoLWwgJGhlYWRmaWxlICYmIHJlYWRsaW5rKCRoZWFkZmlsZSkgPX4gL15yZWZzXC9oZWFkc1wvLykpOworfQorCitzdWIgY2hlY2tfZXhwb3J0X29rIHsKKwlteSAoJGRpcikgPSBAXzsKKwlyZXR1cm4gKGNoZWNrX2hlYWRfbGluaygkZGlyKSAmJgorCQkoISRleHBvcnRfb2sgfHwgLWUgIiRkaXIvJGV4cG9ydF9vayIpICYmCisJCSghJGV4cG9ydF9hdXRoX2hvb2sgfHwgJGV4cG9ydF9hdXRoX2hvb2stPigkZGlyKSkpOworfQorCisjIHByb2Nlc3MgYWx0ZXJuYXRlIG5hbWVzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisjIGZpbHRlciBvdXQgdW5zdXBwb3J0ZWQgKHVua25vd24pIHNuYXBzaG90IGZvcm1hdHMKK3N1YiBmaWx0ZXJfc25hcHNob3RfZm10cyB7CisJbXkgQGZtdHMgPSBAXzsKKworCUBmbXRzID0gbWFwIHsKKwkJZXhpc3RzICRrbm93bl9zbmFwc2hvdF9mb3JtYXRfYWxpYXNlc3skX30gPworCQkgICAgICAgJGtub3duX3NuYXBzaG90X2Zvcm1hdF9hbGlhc2VzeyRffSA6ICRffSBAZm10czsKKwlAZm10cyA9IGdyZXAgeworCQlleGlzdHMgJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JF99ICYmCisJCSEka25vd25fc25hcHNob3RfZm9ybWF0c3skX317J2Rpc2FibGVkJ319IEBmbXRzOworfQorCisjIElmIGl0IGlzIHNldCB0byBjb2RlIHJlZmVyZW5jZSwgaXQgaXMgY29kZSB0aGF0IGl0IGlzIHRvIGJlIHJ1biBvbmNlIHBlcgorIyByZXF1ZXN0LCBhbGxvd2luZyB1cGRhdGluZyBjb25maWd1cmF0aW9ucyB0aGF0IGNoYW5nZSB3aXRoIGVhY2ggcmVxdWVzdCwKKyMgd2hpbGUgcnVubmluZyBvdGhlciBjb2RlIGluIGNvbmZpZyBmaWxlIG9ubHkgb25jZS4KKyMKKyMgT3RoZXJ3aXNlLCBpZiBpdCBpcyBmYWxzZSB0aGVuIGdpdHdlYiB3b3VsZCBwcm9jZXNzIGNvbmZpZyBmaWxlIG9ubHkgb25jZTsKKyMgaWYgaXQgaXMgdHJ1ZSB0aGVuIGdpdHdlYiBjb25maWcgd291bGQgYmUgcnVuIGZvciBlYWNoIHJlcXVlc3QuCitvdXIgJHBlcl9yZXF1ZXN0X2NvbmZpZyA9IDE7CisKKyMgcmVhZCBhbmQgcGFyc2UgZ2l0d2ViIGNvbmZpZyBmaWxlIGdpdmVuIGJ5IGl0cyBwYXJhbWV0ZXIuCisjIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiByZWNvdmVyYWJsZSBlcnJvciwgYWxsb3dpbmcKKyMgdG8gY2hhaW4gdGhpcyBzdWJyb3V0aW5lLCB1c2luZyBmaXJzdCBmaWxlIHRoYXQgZXhpc3RzLgorIyBkaWVzIG9uIGVycm9ycyBkdXJpbmcgcGFyc2luZyBjb25maWcgZmlsZSwgYXMgaXQgaXMgdW5yZWNvdmVyYWJsZS4KK3N1YiByZWFkX2NvbmZpZ19maWxlIHsKKwlteSAkZmlsZW5hbWUgPSBzaGlmdDsKKwlyZXR1cm4gdW5sZXNzIGRlZmluZWQgJGZpbGVuYW1lOworCSMgZGllIGlmIHRoZXJlIGFyZSBlcnJvcnMgcGFyc2luZyBjb25maWcgZmlsZQorCWlmICgtZSAkZmlsZW5hbWUpIHsKKwkJZG8gJGZpbGVuYW1lOworCQlkaWUgJEAgaWYgJEA7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm47Cit9CisKK291ciAoJEdJVFdFQl9DT05GSUcsICRHSVRXRUJfQ09ORklHX1NZU1RFTSwgJEdJVFdFQl9DT05GSUdfQ09NTU9OKTsKK3N1YiBldmFsdWF0ZV9naXR3ZWJfY29uZmlnIHsKKwlvdXIgJEdJVFdFQl9DT05GSUcgPSAkRU5WeydHSVRXRUJfQ09ORklHJ30gfHwgIisrR0lUV0VCX0NPTkZJRysrIjsKKwlvdXIgJEdJVFdFQl9DT05GSUdfU1lTVEVNID0gJEVOVnsnR0lUV0VCX0NPTkZJR19TWVNURU0nfSB8fCAiKytHSVRXRUJfQ09ORklHX1NZU1RFTSsrIjsKKwlvdXIgJEdJVFdFQl9DT05GSUdfQ09NTU9OID0gJEVOVnsnR0lUV0VCX0NPTkZJR19DT01NT04nfSB8fCAiKytHSVRXRUJfQ09ORklHX0NPTU1PTisrIjsKKworCSMgUHJvdGVjdCBhZ2FpbnMgZHVwbGljYXRpb25zIG9mIGZpbGUgbmFtZXMsIHRvIG5vdCByZWFkIGNvbmZpZyB0d2ljZS4KKwkjIE9ubHkgb25lIG9mICRHSVRXRUJfQ09ORklHIGFuZCAkR0lUV0VCX0NPTkZJR19TWVNURU0gaXMgdXNlZCwgc28KKwkjIHRoZXJlIHBvc3NpYmlsaXR5IG9mIGR1cGxpY2F0aW9uIG9mIGZpbGVuYW1lIHRoZXJlIGRvZXNuJ3QgbWF0dGVyLgorCSRHSVRXRUJfQ09ORklHID0gIiIgICAgICAgIGlmICgkR0lUV0VCX0NPTkZJRyBlcSAkR0lUV0VCX0NPTkZJR19DT01NT04pOworCSRHSVRXRUJfQ09ORklHX1NZU1RFTSA9ICIiIGlmICgkR0lUV0VCX0NPTkZJR19TWVNURU0gZXEgJEdJVFdFQl9DT05GSUdfQ09NTU9OKTsKKworCSMgQ29tbW9uIHN5c3RlbS13aWRlIHNldHRpbmdzIGZvciBjb252ZW5pZW5jZS4KKwkjIFRob3NlIHNldHRpbmdzIGNhbiBiZSBvdnZlcnJpZGVuIGJ5IEdJVFdFQl9DT05GSUcgb3IgR0lUV0VCX0NPTkZJR19TWVNURU0uCisJcmVhZF9jb25maWdfZmlsZSgkR0lUV0VCX0NPTkZJR19DT01NT04pOworCisJIyBVc2UgZmlyc3QgY29uZmlnIGZpbGUgdGhhdCBleGlzdHMuICBUaGlzIG1lYW5zIHVzZSB0aGUgcGVyLWluc3RhbmNlCisJIyBHSVRXRUJfQ09ORklHIGlmIGV4aXN0cywgb3RoZXJ3aXNlIHVzZSBHSVRXRUJfU1lTVEVNX0NPTkZJRy4KKwlyZWFkX2NvbmZpZ19maWxlKCRHSVRXRUJfQ09ORklHKSBhbmQgcmV0dXJuOworCXJlYWRfY29uZmlnX2ZpbGUoJEdJVFdFQl9DT05GSUdfU1lTVEVNKTsKK30KKworIyBHZXQgbG9hZGF2ZyBvZiBzeXN0ZW0sIHRvIGNvbXBhcmUgYWdhaW5zdCAkbWF4bG9hZC4KKyMgQ3VycmVudGx5IGl0IHJlcXVpcmVzICcvcHJvYy9sb2FkYXZnJyBwcmVzZW50IHRvIGdldCBsb2FkYXZnOworIyBpZiBpdCBpcyBub3QgcHJlc2VudCBpdCByZXR1cm5zIDAsIHdoaWNoIG1lYW5zIG5vIGxvYWQgY2hlY2tpbmcuCitzdWIgZ2V0X2xvYWRhdmcgeworCWlmKCAtZSAnL3Byb2MvbG9hZGF2ZycgKXsKKwkJb3BlbiBteSAkZmQsICc8JywgJy9wcm9jL2xvYWRhdmcnCisJCQlvciByZXR1cm4gMDsKKwkJbXkgQGxvYWQgPSBzcGxpdCgvXHMrLywgc2NhbGFyIDwkZmQ+KTsKKwkJY2xvc2UgJGZkOworCisJCSMgVGhlIGZpcnN0IHRocmVlIGNvbHVtbnMgbWVhc3VyZSBDUFUgYW5kIElPIHV0aWxpemF0aW9uIG9mIHRoZSBsYXN0IG9uZSwKKwkJIyBmaXZlLCBhbmQgMTAgbWludXRlIHBlcmlvZHMuICBUaGUgZm91cnRoIGNvbHVtbiBzaG93cyB0aGUgbnVtYmVyIG9mCisJCSMgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2Vzc2VzIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiB0aGUgbS9uCisJCSMgZm9ybWF0LiAgVGhlIGxhc3QgY29sdW1uIGRpc3BsYXlzIHRoZSBsYXN0IHByb2Nlc3MgSUQgdXNlZC4KKwkJcmV0dXJuICRsb2FkWzBdIHx8IDA7CisJfQorCSMgYWRkaXRpb25hbCBjaGVja3MgZm9yIGxvYWQgYXZlcmFnZSBzaG91bGQgZ28gaGVyZSBmb3IgdGhpbmdzIHRoYXQgZG9uJ3QgZXhwb3J0CisJIyAvcHJvYy9sb2FkYXZnCisKKwlyZXR1cm4gMDsKK30KKworIyB2ZXJzaW9uIG9mIHRoZSBjb3JlIGdpdCBiaW5hcnkKK291ciAkZ2l0X3ZlcnNpb247CitzdWIgZXZhbHVhdGVfZ2l0X3ZlcnNpb24geworCW91ciAkZ2l0X3ZlcnNpb24gPSBxeCgiJEdJVCIgLS12ZXJzaW9uKSA9fiBtL2dpdCB2ZXJzaW9uICguKikkLyA/ICQxIDogInVua25vd24iOworCSRudW1iZXJfb2ZfZ2l0X2NtZHMrKzsKK30KKworc3ViIGNoZWNrX2xvYWRhdmcgeworCWlmIChkZWZpbmVkICRtYXhsb2FkICYmIGdldF9sb2FkYXZnKCkgPiAkbWF4bG9hZCkgeworCQlkaWVfZXJyb3IoNTAzLCAiVGhlIGxvYWQgYXZlcmFnZSBvbiB0aGUgc2VydmVyIGlzIHRvbyBoaWdoIik7CisJfQorfQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgaW5wdXQgdmFsaWRhdGlvbiBhbmQgZGlzcGF0Y2gKKworIyBpbnB1dCBwYXJhbWV0ZXJzIGNhbiBiZSBjb2xsZWN0ZWQgZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyAocHJlc2VudGx5LCBDR0kKKyMgYW5kIFBBVEhfSU5GTyksIHNvIHdlIGRlZmluZSBhbiAlaW5wdXRfcGFyYW1zIGhhc2ggdGhhdCBjb2xsZWN0cyB0aGVtIGFsbAorIyB0b2dldGhlciBkdXJpbmcgdmFsaWRhdGlvbjogdGhpcyBhbGxvd3Mgc3Vic2VxdWVudCB1c2VzIChlLmcuIGhyZWYoKSkgdG8gYmUKKyMgYWdub3N0aWMgb2YgdGhlIHBhcmFtZXRlciBvcmlnaW4KKworb3VyICVpbnB1dF9wYXJhbXMgPSAoKTsKKworIyBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBzdG9yZWQgd2l0aCB0aGUgbG9uZyBwYXJhbWV0ZXIgbmFtZSBhcyBrZXkuIFRoaXMgd2lsbAorIyBhbHNvIGJlIHVzZWQgaW4gdGhlIGhyZWYgc3Vicm91dGluZSB0byBjb252ZXJ0IHBhcmFtZXRlcnMgdG8gdGhlaXIgQ0dJCisjIGVxdWl2YWxlbnQsIGFuZCBzaW5jZSB0aGUgaHJlZigpIHVzYWdlIGlzIHRoZSBtb3N0IGZyZXF1ZW50IG9uZSwgd2Ugc3RvcmUKKyMgdGhlIG5hbWUgLT4gQ0dJIGtleSBtYXBwaW5nIGhlcmUsIGluc3RlYWQgb2YgdGhlIHJldmVyc2UuCisjCisjIFhYWDogV2FybmluZzogSWYgeW91IHRvdWNoIHRoaXMsIGNoZWNrIHRoZSBzZWFyY2ggZm9ybSBmb3IgdXBkYXRpbmcsCisjIHRvby4KKworb3VyIEBjZ2lfcGFyYW1fbWFwcGluZyA9ICgKKwlwcm9qZWN0ID0+ICJwIiwKKwlhY3Rpb24gPT4gImEiLAorCWZpbGVfbmFtZSA9PiAiZiIsCisJZmlsZV9wYXJlbnQgPT4gImZwIiwKKwloYXNoID0+ICJoIiwKKwloYXNoX3BhcmVudCA9PiAiaHAiLAorCWhhc2hfYmFzZSA9PiAiaGIiLAorCWhhc2hfcGFyZW50X2Jhc2UgPT4gImhwYiIsCisJcGFnZSA9PiAicGciLAorCW9yZGVyID0+ICJvIiwKKwlzZWFyY2h0ZXh0ID0+ICJzIiwKKwlzZWFyY2h0eXBlID0+ICJzdCIsCisJc25hcHNob3RfZm9ybWF0ID0+ICJzZiIsCisJZXh0cmFfb3B0aW9ucyA9PiAib3B0IiwKKwlzZWFyY2hfdXNlX3JlZ2V4cCA9PiAic3IiLAorCWN0YWcgPT4gImJ5X3RhZyIsCisJZGlmZl9zdHlsZSA9PiAiZHMiLAorCXByb2plY3RfZmlsdGVyID0+ICJwZiIsCisJIyB0aGlzIG11c3QgYmUgbGFzdCBlbnRyeSAoZm9yIG1hbmlwdWxhdGlvbiBmcm9tIEphdmFTY3JpcHQpCisJamF2YXNjcmlwdCA9PiAianMiCispOworb3VyICVjZ2lfcGFyYW1fbWFwcGluZyA9IEBjZ2lfcGFyYW1fbWFwcGluZzsKKworIyB3ZSB3aWxsIGFsc28gbmVlZCB0byBrbm93IHRoZSBwb3NzaWJsZSBhY3Rpb25zLCBmb3IgdmFsaWRhdGlvbgorb3VyICVhY3Rpb25zID0gKAorCSJibGFtZSIgPT4gXCZnaXRfYmxhbWUsCisJImJsYW1lX2luY3JlbWVudGFsIiA9PiBcJmdpdF9ibGFtZV9pbmNyZW1lbnRhbCwKKwkiYmxhbWVfZGF0YSIgPT4gXCZnaXRfYmxhbWVfZGF0YSwKKwkiYmxvYmRpZmYiID0+IFwmZ2l0X2Jsb2JkaWZmLAorCSJibG9iZGlmZl9wbGFpbiIgPT4gXCZnaXRfYmxvYmRpZmZfcGxhaW4sCisJImJsb2IiID0+IFwmZ2l0X2Jsb2IsCisJImJsb2JfcGxhaW4iID0+IFwmZ2l0X2Jsb2JfcGxhaW4sCisJImNvbW1pdGRpZmYiID0+IFwmZ2l0X2NvbW1pdGRpZmYsCisJImNvbW1pdGRpZmZfcGxhaW4iID0+IFwmZ2l0X2NvbW1pdGRpZmZfcGxhaW4sCisJImNvbW1pdCIgPT4gXCZnaXRfY29tbWl0LAorCSJmb3JrcyIgPT4gXCZnaXRfZm9ya3MsCisJImhlYWRzIiA9PiBcJmdpdF9oZWFkcywKKwkiaGlzdG9yeSIgPT4gXCZnaXRfaGlzdG9yeSwKKwkibG9nIiA9PiBcJmdpdF9sb2csCisJInBhdGNoIiA9PiBcJmdpdF9wYXRjaCwKKwkicGF0Y2hlcyIgPT4gXCZnaXRfcGF0Y2hlcywKKwkicmVtb3RlcyIgPT4gXCZnaXRfcmVtb3RlcywKKwkicnNzIiA9PiBcJmdpdF9yc3MsCisJImF0b20iID0+IFwmZ2l0X2F0b20sCisJInNlYXJjaCIgPT4gXCZnaXRfc2VhcmNoLAorCSJzZWFyY2hfaGVscCIgPT4gXCZnaXRfc2VhcmNoX2hlbHAsCisJInNob3J0bG9nIiA9PiBcJmdpdF9zaG9ydGxvZywKKwkic3VtbWFyeSIgPT4gXCZnaXRfc3VtbWFyeSwKKwkidGFnIiA9PiBcJmdpdF90YWcsCisJInRhZ3MiID0+IFwmZ2l0X3RhZ3MsCisJInRyZWUiID0+IFwmZ2l0X3RyZWUsCisJInNuYXBzaG90IiA9PiBcJmdpdF9zbmFwc2hvdCwKKwkib2JqZWN0IiA9PiBcJmdpdF9vYmplY3QsCisJIyB0aG9zZSBiZWxvdyBkb24ndCBuZWVkICRwcm9qZWN0CisJIm9wbWwiID0+IFwmZ2l0X29wbWwsCisJInByb2plY3RfbGlzdCIgPT4gXCZnaXRfcHJvamVjdF9saXN0LAorCSJwcm9qZWN0X2luZGV4IiA9PiBcJmdpdF9wcm9qZWN0X2luZGV4LAorKTsKKworIyBmaW5hbGx5LCB3ZSBoYXZlIHRoZSBoYXNoIG9mIGFsbG93ZWQgZXh0cmFfb3B0aW9ucyBmb3IgdGhlIGNvbW1hbmRzIHRoYXQKKyMgYWxsb3cgdGhlbQorb3VyICVhbGxvd2VkX29wdGlvbnMgPSAoCisJIi0tbm8tbWVyZ2VzIiA9PiBbIHF3KHJzcyBhdG9tIGxvZyBzaG9ydGxvZyBoaXN0b3J5KSBdLAorKTsKKworIyBmaWxsICVpbnB1dF9wYXJhbXMgd2l0aCB0aGUgQ0dJIHBhcmFtZXRlcnMuIEFsbCB2YWx1ZXMgZXhjZXB0IGZvciAnb3B0JworIyBzaG91bGQgYmUgc2luZ2xlIHZhbHVlcywgYnV0IG9wdCBjYW4gYmUgYW4gYXJyYXkuIFdlIHNob3VsZCBwcm9iYWJseQorIyBidWlsZCBhbiBhcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIG11bHRpLXZhbHVlZCwgYnV0IHNpbmNlIGZvciB0aGUgdGltZQorIyBiZWluZyBpdCdzIG9ubHkgdGhpcyBvbmUsIHdlIGp1c3Qgc2luZ2xlIGl0IG91dAorc3ViIGV2YWx1YXRlX3F1ZXJ5X3BhcmFtcyB7CisJb3VyICRjZ2k7CisKKwl3aGlsZSAobXkgKCRuYW1lLCAkc3ltYm9sKSA9IGVhY2ggJWNnaV9wYXJhbV9tYXBwaW5nKSB7CisJCWlmICgkc3ltYm9sIGVxICdvcHQnKSB7CisJCQkkaW5wdXRfcGFyYW1zeyRuYW1lfSA9IFsgbWFwIHsgZGVjb2RlX3V0ZjgoJF8pIH0gJGNnaS0+cGFyYW0oJHN5bWJvbCkgXTsKKwkJfSBlbHNlIHsKKwkJCSRpbnB1dF9wYXJhbXN7JG5hbWV9ID0gZGVjb2RlX3V0ZjgoJGNnaS0+cGFyYW0oJHN5bWJvbCkpOworCQl9CisJfQorfQorCisjIG5vdyByZWFkIFBBVEhfSU5GTyBhbmQgdXBkYXRlIHRoZSBwYXJhbWV0ZXIgbGlzdCBmb3IgbWlzc2luZyBwYXJhbWV0ZXJzCitzdWIgZXZhbHVhdGVfcGF0aF9pbmZvIHsKKwlyZXR1cm4gaWYgZGVmaW5lZCAkaW5wdXRfcGFyYW1zeydwcm9qZWN0J307CisJcmV0dXJuIGlmICEkcGF0aF9pbmZvOworCSRwYXRoX2luZm8gPX4gcyxeLyssLDsKKwlyZXR1cm4gaWYgISRwYXRoX2luZm87CisKKwkjIGZpbmQgd2hpY2ggcGFydCBvZiBQQVRIX0lORk8gaXMgcHJvamVjdAorCW15ICRwcm9qZWN0ID0gJHBhdGhfaW5mbzsKKwkkcHJvamVjdCA9fiBzLC8rJCwsOworCXdoaWxlICgkcHJvamVjdCAmJiAhY2hlY2tfaGVhZF9saW5rKCIkcHJvamVjdHJvb3QvJHByb2plY3QiKSkgeworCQkkcHJvamVjdCA9fiBzLC8qW14vXSokLCw7CisJfQorCXJldHVybiB1bmxlc3MgJHByb2plY3Q7CisJJGlucHV0X3BhcmFtc3sncHJvamVjdCd9ID0gJHByb2plY3Q7CisKKwkjIGRvIG5vdCBjaGFuZ2UgYW55IHBhcmFtZXRlcnMgaWYgYW4gYWN0aW9uIGlzIGdpdmVuIHVzaW5nIHRoZSBxdWVyeSBzdHJpbmcKKwlyZXR1cm4gaWYgJGlucHV0X3BhcmFtc3snYWN0aW9uJ307CisJJHBhdGhfaW5mbyA9fiBzLF5cUSRwcm9qZWN0XEUvKiwsOworCisJIyBuZXh0LCBjaGVjayBpZiB3ZSBoYXZlIGFuIGFjdGlvbgorCW15ICRhY3Rpb24gPSAkcGF0aF9pbmZvOworCSRhY3Rpb24gPX4gcywvLiokLCw7CisJaWYgKGV4aXN0cyAkYWN0aW9uc3skYWN0aW9ufSkgeworCQkkcGF0aF9pbmZvID1+IHMsXiRhY3Rpb24vKiwsOworCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSA9ICRhY3Rpb247CisJfQorCisJIyBsaXN0IG9mIGFjdGlvbnMgdGhhdCB3YW50IGhhc2hfYmFzZSBpbnN0ZWFkIG9mIGhhc2gsIGJ1dCBjYW4gaGF2ZSBubworCSMgcGF0aG5hbWUgKGYpIHBhcmFtZXRlcgorCW15IEB3YW50c19iYXNlID0gKAorCQkndHJlZScsCisJCSdoaXN0b3J5JywKKwkpOworCisJIyB3ZSB3YW50IHRvIGNhdGNoLCBhbW9uZyBvdGhlcnMKKwkjIFskaGFzaF9wYXJlbnRfYmFzZVs6JGZpbGVfcGFyZW50XS4uXSRoYXNoX3BhcmVudFs6JGZpbGVfbmFtZV0KKwlteSAoJHBhcmVudHJlZm5hbWUsICRwYXJlbnRwYXRobmFtZSwgJHJlZm5hbWUsICRwYXRobmFtZSkgPQorCQkoJHBhdGhfaW5mbyA9fiAvXig/OiguKz8pKD86OiguKykpP1wuXC4pPyhbXjpdKz8pPyg/OjooLispKT8kLyk7CisKKwkjIGZpcnN0LCBhbmFseXplIHRoZSAnY3VycmVudCcgcGFydAorCWlmIChkZWZpbmVkICRwYXRobmFtZSkgeworCQkjIHdlIGdvdCAiYnJhbmNoOmZpbGVuYW1lIiBvciAiYnJhbmNoOmRpci8iCisJCSMgd2UgY291bGQgdXNlIGdpdF9nZXRfdHlwZShicmFuY2g6cGF0aG5hbWUpLCBidXQ6CisJCSMgLSBpdCBuZWVkcyAkZ2l0X2RpcgorCQkjIC0gaXQgZG9lcyBhIGdpdCgpIGNhbGwKKwkJIyAtIHRoZSBjb252ZW50aW9uIG9mIHRlcm1pbmF0aW5nIGRpcmVjdG9yaWVzIHdpdGggYSBzbGFzaAorCQkjICAgbWFrZXMgaXQgc3VwZXJmbHVvdXMKKwkJIyAtIGVtYmVkZGluZyB0aGUgYWN0aW9uIGluIHRoZSBQQVRIX0lORk8gd291bGQgbWFrZSBpdCBldmVuCisJCSMgICBtb3JlIHN1cGVyZmx1b3VzCisJCSRwYXRobmFtZSA9fiBzLF4vKywsOworCQlpZiAoISRwYXRobmFtZSB8fCBzdWJzdHIoJHBhdGhuYW1lLCAtMSkgZXEgIi8iKSB7CisJCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSB8fD0gInRyZWUiOworCQkJJHBhdGhuYW1lID1+IHMsLyQsLDsKKwkJfSBlbHNlIHsKKwkJCSMgdGhlIGRlZmF1bHQgYWN0aW9uIGRlcGVuZHMgb24gd2hldGhlciB3ZSBoYWQgcGFyZW50IGluZm8KKwkJCSMgb3Igbm90CisJCQlpZiAoJHBhcmVudHJlZm5hbWUpIHsKKwkJCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSB8fD0gImJsb2JkaWZmX3BsYWluIjsKKwkJCX0gZWxzZSB7CisJCQkJJGlucHV0X3BhcmFtc3snYWN0aW9uJ30gfHw9ICJibG9iX3BsYWluIjsKKwkJCX0KKwkJfQorCQkkaW5wdXRfcGFyYW1zeydoYXNoX2Jhc2UnfSB8fD0gJHJlZm5hbWU7CisJCSRpbnB1dF9wYXJhbXN7J2ZpbGVfbmFtZSd9IHx8PSAkcGF0aG5hbWU7CisJfSBlbHNpZiAoZGVmaW5lZCAkcmVmbmFtZSkgeworCQkjIHdlIGdvdCAiYnJhbmNoIi4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gY2hvb3NlIGlmIHdlIGhhdmUgdG8KKwkJIyBzZXQgaGFzaCBvciBoYXNoX2Jhc2UuCisJCSMKKwkJIyBNb3N0IG9mIHRoZSBhY3Rpb25zIHdpdGhvdXQgYSBwYXRobmFtZSBvbmx5IHdhbnQgaGFzaCB0byBiZQorCQkjIHNldCwgZXhjZXB0IGZvciB0aGUgb25lcyBzcGVjaWZpZWQgaW4gQHdhbnRzX2Jhc2UgdGhhdCB3YW50CisJCSMgaGFzaF9iYXNlIGluc3RlYWQuIEl0IHNob3VsZCBhbHNvIGJlIG5vdGVkIHRoYXQgaGFuZC1jcmFmdGVkCisJCSMgbGlua3MgaGF2aW5nICdoaXN0b3J5JyBhcyBhbiBhY3Rpb24gYW5kIG5vIHBhdGhuYW1lIG9yIGhhc2gKKwkJIyBzZXQgd2lsbCBmYWlsLCBidXQgdGhhdCBoYXBwZW5zIHJlZ2FyZGxlc3Mgb2YgUEFUSF9JTkZPLgorCQlpZiAoZGVmaW5lZCAkcGFyZW50cmVmbmFtZSkgeworCQkJIyBpZiB0aGVyZSBpcyBwYXJlbnQgbGV0IHRoZSBkZWZhdWx0IGJlICdzaG9ydGxvZycgYWN0aW9uCisJCQkjIChmb3IgaHR0cDovL2dpdC5leGFtcGxlLmNvbS9yZXBvLmdpdC9BLi5CIGxpbmtzKTsgaWYgdGhlcmUKKwkJCSMgaXMgbm8gcGFyZW50LCBkaXNwYXRjaCB3aWxsIGRldGVjdCB0eXBlIG9mIG9iamVjdCBhbmQgc2V0CisJCQkjIGFjdGlvbiBhcHByb3ByaWF0ZWx5IGlmIHJlcXVpcmVkIChpZiBhY3Rpb24gaXMgbm90IHNldCkKKwkJCSRpbnB1dF9wYXJhbXN7J2FjdGlvbid9IHx8PSAic2hvcnRsb2ciOworCQl9CisJCWlmICgkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSAmJgorCQkgICAgZ3JlcCB7ICRfIGVxICRpbnB1dF9wYXJhbXN7J2FjdGlvbid9IH0gQHdhbnRzX2Jhc2UpIHsKKwkJCSRpbnB1dF9wYXJhbXN7J2hhc2hfYmFzZSd9IHx8PSAkcmVmbmFtZTsKKwkJfSBlbHNlIHsKKwkJCSRpbnB1dF9wYXJhbXN7J2hhc2gnfSB8fD0gJHJlZm5hbWU7CisJCX0KKwl9CisKKwkjIG5leHQsIGhhbmRsZSB0aGUgJ3BhcmVudCcgcGFydCwgaWYgcHJlc2VudAorCWlmIChkZWZpbmVkICRwYXJlbnRyZWZuYW1lKSB7CisJCSMgYSBtaXNzaW5nIHBhdGhzcGVjIGRlZmF1bHRzIHRvIHRoZSAnY3VycmVudCcgZmlsZW5hbWUsIGFsbG93aW5nIGUuZy4KKwkJIyBzb21lcHJvamVjdC9ibG9iZGlmZi9vbGRyZXYuLm5ld3JldjovZmlsZW5hbWUKKwkJaWYgKCRwYXJlbnRwYXRobmFtZSkgeworCQkJJHBhcmVudHBhdGhuYW1lID1+IHMsXi8rLCw7CisJCQkkcGFyZW50cGF0aG5hbWUgPX4gcywvJCwsOworCQkJJGlucHV0X3BhcmFtc3snZmlsZV9wYXJlbnQnfSB8fD0gJHBhcmVudHBhdGhuYW1lOworCQl9IGVsc2UgeworCQkJJGlucHV0X3BhcmFtc3snZmlsZV9wYXJlbnQnfSB8fD0gJGlucHV0X3BhcmFtc3snZmlsZV9uYW1lJ307CisJCX0KKwkJIyB3ZSBhc3N1bWUgdGhhdCBoYXNoX3BhcmVudF9iYXNlIGlzIHdhbnRlZCBpZiBhIHBhdGggd2FzIHNwZWNpZmllZCwKKwkJIyBvciBpZiB0aGUgYWN0aW9uIHdhbnRzIGhhc2hfYmFzZSBpbnN0ZWFkIG9mIGhhc2gKKwkJaWYgKGRlZmluZWQgJGlucHV0X3BhcmFtc3snZmlsZV9wYXJlbnQnfSB8fAorCQkJZ3JlcCB7ICRfIGVxICRpbnB1dF9wYXJhbXN7J2FjdGlvbid9IH0gQHdhbnRzX2Jhc2UpIHsKKwkJCSRpbnB1dF9wYXJhbXN7J2hhc2hfcGFyZW50X2Jhc2UnfSB8fD0gJHBhcmVudHJlZm5hbWU7CisJCX0gZWxzZSB7CisJCQkkaW5wdXRfcGFyYW1zeydoYXNoX3BhcmVudCd9IHx8PSAkcGFyZW50cmVmbmFtZTsKKwkJfQorCX0KKworCSMgZm9yIHRoZSBzbmFwc2hvdCBhY3Rpb24sIHdlIGFsbG93IFVSTHMgaW4gdGhlIGZvcm0KKwkjICRwcm9qZWN0L3NuYXBzaG90LyRoYXNoLmV4dAorCSMgd2hlcmUgLmV4dCBkZXRlcm1pbmVzIHRoZSBzbmFwc2hvdCBhbmQgZ2V0cyByZW1vdmVkIGZyb20gdGhlCisJIyBwYXNzZWQgJHJlZm5hbWUgdG8gcHJvdmlkZSB0aGUgJGhhc2guCisJIworCSMgVG8gYmUgYWJsZSB0byB0ZWxsIHRoYXQgJHJlZm5hbWUgaW5jbHVkZXMgdGhlIGZvcm1hdCBleHRlbnNpb24sIHdlCisJIyByZXF1aXJlIHRoZSBmb2xsb3dpbmcgdHdvIGNvbmRpdGlvbnMgdG8gYmUgc2F0aXNmaWVkOgorCSMgLSB0aGUgaGFzaCBpbnB1dCBwYXJhbWV0ZXIgTVVTVCBoYXZlIGJlZW4gc2V0IGZyb20gdGhlICRyZWZuYW1lIHBhcnQKKwkjICAgb2YgdGhlIFVSTCAoaS5lLiB0aGV5IG11c3QgYmUgZXF1YWwpCisJIyAtIHRoZSBzbmFwc2hvdCBmb3JtYXQgTVVTVCBOT1QgaGF2ZSBiZWVuIGRlZmluZWQgYWxyZWFkeSAoZS5nLiBmcm9tCisJIyAgIENHSSBwYXJhbWV0ZXIgc2YpCisJIyBJdCdzIGFsc28gdXNlbGVzcyB0byB0cnkgYW55IG1hdGNoaW5nIHVubGVzcyAkcmVmbmFtZSBoYXMgYSBkb3QsCisJIyBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28KKwlpZiAoZGVmaW5lZCAkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSAmJgorCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSBlcSAnc25hcHNob3QnICYmCisJCWRlZmluZWQgJHJlZm5hbWUgJiYgaW5kZXgoJHJlZm5hbWUsICcuJykgIT0gLTEgJiYKKwkJJHJlZm5hbWUgZXEgJGlucHV0X3BhcmFtc3snaGFzaCd9ICYmCisJCSFkZWZpbmVkICRpbnB1dF9wYXJhbXN7J3NuYXBzaG90X2Zvcm1hdCd9KSB7CisJCSMgV2UgbG9vcCBvdmVyIHRoZSBrbm93biBzbmFwc2hvdCBmb3JtYXRzLCBjaGVja2luZyBmb3IKKwkJIyBleHRlbnNpb25zLiBBbGxvd2VkIGV4dGVuc2lvbnMgYXJlIGJvdGggdGhlIGRlZmluZWQgc3VmZml4CisJCSMgKHdoaWNoIGluY2x1ZGVzIHRoZSBpbml0aWFsIGRvdCBhbHJlYWR5KSBhbmQgdGhlIHNuYXBzaG90CisJCSMgZm9ybWF0IGtleSBpdHNlbGYsIHdpdGggYSBwcmVwZW5kZWQgZG90CisJCXdoaWxlIChteSAoJGZtdCwgJG9wdCkgPSBlYWNoICVrbm93bl9zbmFwc2hvdF9mb3JtYXRzKSB7CisJCQlteSAkaGFzaCA9ICRyZWZuYW1lOworCQkJdW5sZXNzICgkaGFzaCA9fiBzLyhcUSRvcHQtPnsnc3VmZml4J31cRXxcUS4kZm10XEUpJC8vKSB7CisJCQkJbmV4dDsKKwkJCX0KKwkJCW15ICRzZnggPSAkMTsKKwkJCSMgYSB2YWxpZCBzdWZmaXggd2FzIGZvdW5kLCBzbyBzZXQgdGhlIHNuYXBzaG90IGZvcm1hdAorCQkJIyBhbmQgcmVzZXQgdGhlIGhhc2ggcGFyYW1ldGVyCisJCQkkaW5wdXRfcGFyYW1zeydzbmFwc2hvdF9mb3JtYXQnfSA9ICRmbXQ7CisJCQkkaW5wdXRfcGFyYW1zeydoYXNoJ30gPSAkaGFzaDsKKwkJCSMgd2UgYWxzbyBzZXQgdGhlIGZvcm1hdCBzdWZmaXggdG8gdGhlIG9uZSByZXF1ZXN0ZWQKKwkJCSMgaW4gdGhlIFVSTDogdGhpcyB3YXkgYSByZXF1ZXN0IGZvciBlLmcuIC50Z3ogcmV0dXJucworCQkJIyBhIC50Z3ogaW5zdGVhZCBvZiBhIC50YXIuZ3oKKwkJCSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmbXR9eydzdWZmaXgnfSA9ICRzZng7CisJCQlsYXN0OworCQl9CisJfQorfQorCitvdXIgKCRhY3Rpb24sICRwcm9qZWN0LCAkZmlsZV9uYW1lLCAkZmlsZV9wYXJlbnQsICRoYXNoLCAkaGFzaF9wYXJlbnQsICRoYXNoX2Jhc2UsCisgICAgICRoYXNoX3BhcmVudF9iYXNlLCBAZXh0cmFfb3B0aW9ucywgJHBhZ2UsICRzZWFyY2h0eXBlLCAkc2VhcmNoX3VzZV9yZWdleHAsCisgICAgICRzZWFyY2h0ZXh0LCAkc2VhcmNoX3JlZ2V4cCwgJHByb2plY3RfZmlsdGVyKTsKK3N1YiBldmFsdWF0ZV9hbmRfdmFsaWRhdGVfcGFyYW1zIHsKKwlvdXIgJGFjdGlvbiA9ICRpbnB1dF9wYXJhbXN7J2FjdGlvbid9OworCWlmIChkZWZpbmVkICRhY3Rpb24pIHsKKwkJaWYgKCF2YWxpZGF0ZV9hY3Rpb24oJGFjdGlvbikpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGFjdGlvbiBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCSMgcGFyYW1ldGVycyB3aGljaCBhcmUgcGF0aG5hbWVzCisJb3VyICRwcm9qZWN0ID0gJGlucHV0X3BhcmFtc3sncHJvamVjdCd9OworCWlmIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCWlmICghdmFsaWRhdGVfcHJvamVjdCgkcHJvamVjdCkpIHsKKwkJCXVuZGVmICRwcm9qZWN0OworCQkJZGllX2Vycm9yKDQwNCwgIk5vIHN1Y2ggcHJvamVjdCIpOworCQl9CisJfQorCisJb3VyICRwcm9qZWN0X2ZpbHRlciA9ICRpbnB1dF9wYXJhbXN7J3Byb2plY3RfZmlsdGVyJ307CisJaWYgKGRlZmluZWQgJHByb2plY3RfZmlsdGVyKSB7CisJCWlmICghdmFsaWRhdGVfcGF0aG5hbWUoJHByb2plY3RfZmlsdGVyKSkgeworCQkJZGllX2Vycm9yKDQwNCwgIkludmFsaWQgcHJvamVjdF9maWx0ZXIgcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwlvdXIgJGZpbGVfbmFtZSA9ICRpbnB1dF9wYXJhbXN7J2ZpbGVfbmFtZSd9OworCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJaWYgKCF2YWxpZGF0ZV9wYXRobmFtZSgkZmlsZV9uYW1lKSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgZmlsZSBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciAkZmlsZV9wYXJlbnQgPSAkaW5wdXRfcGFyYW1zeydmaWxlX3BhcmVudCd9OworCWlmIChkZWZpbmVkICRmaWxlX3BhcmVudCkgeworCQlpZiAoIXZhbGlkYXRlX3BhdGhuYW1lKCRmaWxlX3BhcmVudCkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGZpbGUgcGFyZW50IHBhcmFtZXRlciIpOworCQl9CisJfQorCisJIyBwYXJhbWV0ZXJzIHdoaWNoIGFyZSByZWZuYW1lcworCW91ciAkaGFzaCA9ICRpbnB1dF9wYXJhbXN7J2hhc2gnfTsKKwlpZiAoZGVmaW5lZCAkaGFzaCkgeworCQlpZiAoIXZhbGlkYXRlX3JlZm5hbWUoJGhhc2gpKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBoYXNoIHBhcmFtZXRlciIpOworCQl9CisJfQorCisJb3VyICRoYXNoX3BhcmVudCA9ICRpbnB1dF9wYXJhbXN7J2hhc2hfcGFyZW50J307CisJaWYgKGRlZmluZWQgJGhhc2hfcGFyZW50KSB7CisJCWlmICghdmFsaWRhdGVfcmVmbmFtZSgkaGFzaF9wYXJlbnQpKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBoYXNoIHBhcmVudCBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciAkaGFzaF9iYXNlID0gJGlucHV0X3BhcmFtc3snaGFzaF9iYXNlJ307CisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSkgeworCQlpZiAoIXZhbGlkYXRlX3JlZm5hbWUoJGhhc2hfYmFzZSkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGhhc2ggYmFzZSBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciBAZXh0cmFfb3B0aW9ucyA9IEB7JGlucHV0X3BhcmFtc3snZXh0cmFfb3B0aW9ucyd9fTsKKwkjIEBleHRyYV9vcHRpb25zIGlzIGFsd2F5cyBkZWZpbmVkLCBzaW5jZSBpdCBjYW4gb25seSBiZSAoY3VycmVudGx5KSBzZXQgZnJvbQorCSMgQ0dJLCBhbmQgJGNnaS0+cGFyYW0oKSByZXR1cm5zIHRoZSBlbXB0eSBhcnJheSBpbiBhcnJheSBjb250ZXh0IGlmIHRoZSBwYXJhbQorCSMgaXMgbm90IHNldAorCWZvcmVhY2ggbXkgJG9wdCAoQGV4dHJhX29wdGlvbnMpIHsKKwkJaWYgKG5vdCBleGlzdHMgJGFsbG93ZWRfb3B0aW9uc3skb3B0fSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgb3B0aW9uIHBhcmFtZXRlciIpOworCQl9CisJCWlmIChub3QgZ3JlcCgvXiRhY3Rpb24kLywgQHskYWxsb3dlZF9vcHRpb25zeyRvcHR9fSkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIG9wdGlvbiBwYXJhbWV0ZXIgZm9yIHRoaXMgYWN0aW9uIik7CisJCX0KKwl9CisKKwlvdXIgJGhhc2hfcGFyZW50X2Jhc2UgPSAkaW5wdXRfcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ307CisJaWYgKGRlZmluZWQgJGhhc2hfcGFyZW50X2Jhc2UpIHsKKwkJaWYgKCF2YWxpZGF0ZV9yZWZuYW1lKCRoYXNoX3BhcmVudF9iYXNlKSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgaGFzaCBwYXJlbnQgYmFzZSBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCSMgb3RoZXIgcGFyYW1ldGVycworCW91ciAkcGFnZSA9ICRpbnB1dF9wYXJhbXN7J3BhZ2UnfTsKKwlpZiAoZGVmaW5lZCAkcGFnZSkgeworCQlpZiAoJHBhZ2UgPX4gbS9bXjAtOV0vKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBwYWdlIHBhcmFtZXRlciIpOworCQl9CisJfQorCisJb3VyICRzZWFyY2h0eXBlID0gJGlucHV0X3BhcmFtc3snc2VhcmNodHlwZSd9OworCWlmIChkZWZpbmVkICRzZWFyY2h0eXBlKSB7CisJCWlmICgkc2VhcmNodHlwZSA9fiBtL1teYS16XS8pIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIHNlYXJjaHR5cGUgcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwlvdXIgJHNlYXJjaF91c2VfcmVnZXhwID0gJGlucHV0X3BhcmFtc3snc2VhcmNoX3VzZV9yZWdleHAnfTsKKworCW91ciAkc2VhcmNodGV4dCA9ICRpbnB1dF9wYXJhbXN7J3NlYXJjaHRleHQnfTsKKwlvdXIgJHNlYXJjaF9yZWdleHA7CisJaWYgKGRlZmluZWQgJHNlYXJjaHRleHQpIHsKKwkJaWYgKGxlbmd0aCgkc2VhcmNodGV4dCkgPCAyKSB7CisJCQlkaWVfZXJyb3IoNDAzLCAiQXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgYXJlIHJlcXVpcmVkIGZvciBzZWFyY2ggcGFyYW1ldGVyIik7CisJCX0KKwkJaWYgKCRzZWFyY2hfdXNlX3JlZ2V4cCkgeworCQkJJHNlYXJjaF9yZWdleHAgPSAkc2VhcmNodGV4dDsKKwkJCWlmICghZXZhbCB7IHFyLyRzZWFyY2hfcmVnZXhwLzsgMTsgfSkgeworCQkJCShteSAkZXJyb3IgPSAkQCkgPX4gcy8gYXQgXFMrIGxpbmUgXGQrLipcbj8vLzsKKwkJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBzZWFyY2ggcmVnZXhwICckc2VhcmNoX3JlZ2V4cCciLAorCQkJCSAgICAgICAgICBlc2NfaHRtbCgkZXJyb3IpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRzZWFyY2hfcmVnZXhwID0gcXVvdGVtZXRhICRzZWFyY2h0ZXh0OworCQl9CisJfQorfQorCisjIHBhdGggdG8gdGhlIGN1cnJlbnQgZ2l0IHJlcG9zaXRvcnkKK291ciAkZ2l0X2RpcjsKK3N1YiBldmFsdWF0ZV9naXRfZGlyIHsKKwlvdXIgJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwcm9qZWN0IiBpZiAkcHJvamVjdDsKK30KKworb3VyIChAc25hcHNob3RfZm10cywgJGdpdF9hdmF0YXIpOworc3ViIGNvbmZpZ3VyZV9naXR3ZWJfZmVhdHVyZXMgeworCSMgbGlzdCBvZiBzdXBwb3J0ZWQgc25hcHNob3QgZm9ybWF0cworCW91ciBAc25hcHNob3RfZm10cyA9IGdpdHdlYl9nZXRfZmVhdHVyZSgnc25hcHNob3QnKTsKKwlAc25hcHNob3RfZm10cyA9IGZpbHRlcl9zbmFwc2hvdF9mbXRzKEBzbmFwc2hvdF9mbXRzKTsKKworCSMgY2hlY2sgdGhhdCB0aGUgYXZhdGFyIGZlYXR1cmUgaXMgc2V0IHRvIGEga25vd24gcHJvdmlkZXIgbmFtZSwKKwkjIGFuZCBmb3IgZWFjaCBwcm92aWRlciBjaGVjayBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuCisJIyBpZiB0aGUgcHJvdmlkZXIgbmFtZSBpcyBpbnZhbGlkIG9yIHRoZSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBtZXQsCisJIyByZXNldCAkZ2l0X2F2YXRhciB0byB0aGUgZW1wdHkgc3RyaW5nLgorCW91ciAoJGdpdF9hdmF0YXIpID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdhdmF0YXInKTsKKwlpZiAoJGdpdF9hdmF0YXIgZXEgJ2dyYXZhdGFyJykgeworCQkkZ2l0X2F2YXRhciA9ICcnIHVubGVzcyAoZXZhbCB7IHJlcXVpcmUgRGlnZXN0OjpNRDU7IDE7IH0pOworCX0gZWxzaWYgKCRnaXRfYXZhdGFyIGVxICdwaWNvbicpIHsKKwkJIyBubyBkZXBlbmRlbmNpZXMKKwl9IGVsc2UgeworCQkkZ2l0X2F2YXRhciA9ICcnOworCX0KK30KKworIyBjdXN0b20gZXJyb3IgaGFuZGxlcjogJ2RpZSA8bWVzc2FnZT4nIGlzIEludGVybmFsIFNlcnZlciBFcnJvcgorc3ViIGhhbmRsZV9lcnJvcnNfaHRtbCB7CisJbXkgJG1zZyA9IHNoaWZ0OyAjIGl0IGlzIGFscmVhZHkgSFRNTCBlc2NhcGVkCisKKwkjIHRvIGF2b2lkIGluZmluaXRlIGxvb3Agd2hlcmUgZXJyb3Igb2NjdXJzIGluIGRpZV9lcnJvciwKKwkjIGNoYW5nZSBoYW5kbGVyIHRvIGRlZmF1bHQgaGFuZGxlciwgZGlzYWJsaW5nIGhhbmRsZV9lcnJvcnNfaHRtbAorCXNldF9tZXNzYWdlKCJFcnJvciBvY2N1cmVkIHdoZW4gaW5zaWRlIGRpZV9lcnJvcjpcbiRtc2ciKTsKKworCSMgeW91IGNhbm5vdCBqdW1wIG91dCBvZiBkaWVfZXJyb3Igd2hlbiBjYWxsZWQgYXMgZXJyb3IgaGFuZGxlcjsKKwkjIHRoZSBzdWJyb3V0aW5lIHNldCB2aWEgQ0dJOjpDYXJwOjpzZXRfbWVzc2FnZSBpcyBjYWxsZWQgX2FmdGVyXworCSMgSFRUUCBoZWFkZXJzIGFyZSBhbHJlYWR5IHdyaXR0ZW4sIHNvIGl0IGNhbm5vdCB3cml0ZSB0aGVtIGl0c2VsZgorCWRpZV9lcnJvcih1bmRlZiwgdW5kZWYsICRtc2csIC1lcnJvcl9oYW5kbGVyID0+IDEsIC1ub19odHRwX2hlYWRlciA9PiAxKTsKK30KK3NldF9tZXNzYWdlKFwmaGFuZGxlX2Vycm9yc19odG1sKTsKKworIyBkaXNwYXRjaAorc3ViIGRpc3BhdGNoIHsKKwlpZiAoIWRlZmluZWQgJGFjdGlvbikgeworCQlpZiAoZGVmaW5lZCAkaGFzaCkgeworCQkJJGFjdGlvbiA9IGdpdF9nZXRfdHlwZSgkaGFzaCk7CisJCQkkYWN0aW9uIG9yIGRpZV9lcnJvcig0MDQsICJPYmplY3QgZG9lcyBub3QgZXhpc3QiKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkaGFzaF9iYXNlICYmIGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkJJGFjdGlvbiA9IGdpdF9nZXRfdHlwZSgiJGhhc2hfYmFzZTokZmlsZV9uYW1lIik7CisJCQkkYWN0aW9uIG9yIGRpZV9lcnJvcig0MDQsICJGaWxlIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIpOworCQl9IGVsc2lmIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCQkkYWN0aW9uID0gJ3N1bW1hcnknOworCQl9IGVsc2UgeworCQkJJGFjdGlvbiA9ICdwcm9qZWN0X2xpc3QnOworCQl9CisJfQorCWlmICghZGVmaW5lZCgkYWN0aW9uc3skYWN0aW9ufSkpIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gYWN0aW9uIik7CisJfQorCWlmICgkYWN0aW9uICF+IG0vXig/Om9wbWx8cHJvamVjdF9saXN0fHByb2plY3RfaW5kZXgpJC8gJiYKKwkgICAgISRwcm9qZWN0KSB7CisJCWRpZV9lcnJvcig0MDAsICJQcm9qZWN0IG5lZWRlZCIpOworCX0KKwkkYWN0aW9uc3skYWN0aW9ufS0+KCk7Cit9CisKK3N1YiByZXNldF90aW1lciB7CisJb3VyICR0MCA9IFsgZ2V0dGltZW9mZGF5KCkgXQorCQlpZiBkZWZpbmVkICR0MDsKKwlvdXIgJG51bWJlcl9vZl9naXRfY21kcyA9IDA7Cit9CisKK291ciAkZmlyc3RfcmVxdWVzdCA9IDE7CitzdWIgcnVuX3JlcXVlc3QgeworCXJlc2V0X3RpbWVyKCk7CisKKwlldmFsdWF0ZV91cmkoKTsKKwlpZiAoJGZpcnN0X3JlcXVlc3QpIHsKKwkJZXZhbHVhdGVfZ2l0d2ViX2NvbmZpZygpOworCQlldmFsdWF0ZV9naXRfdmVyc2lvbigpOworCX0KKwlpZiAoJHBlcl9yZXF1ZXN0X2NvbmZpZykgeworCQlpZiAocmVmKCRwZXJfcmVxdWVzdF9jb25maWcpIGVxICdDT0RFJykgeworCQkJJHBlcl9yZXF1ZXN0X2NvbmZpZy0+KCk7CisJCX0gZWxzaWYgKCEkZmlyc3RfcmVxdWVzdCkgeworCQkJZXZhbHVhdGVfZ2l0d2ViX2NvbmZpZygpOworCQl9CisJfQorCWNoZWNrX2xvYWRhdmcoKTsKKworCSMgJHByb2plY3Ryb290IGFuZCAkcHJvamVjdHNfbGlzdCBtaWdodCBiZSBzZXQgaW4gZ2l0d2ViIGNvbmZpZyBmaWxlCisJJHByb2plY3RzX2xpc3QgfHw9ICRwcm9qZWN0cm9vdDsKKworCWV2YWx1YXRlX3F1ZXJ5X3BhcmFtcygpOworCWV2YWx1YXRlX3BhdGhfaW5mbygpOworCWV2YWx1YXRlX2FuZF92YWxpZGF0ZV9wYXJhbXMoKTsKKwlldmFsdWF0ZV9naXRfZGlyKCk7CisKKwljb25maWd1cmVfZ2l0d2ViX2ZlYXR1cmVzKCk7CisKKwlkaXNwYXRjaCgpOworfQorCitvdXIgJGlzX2xhc3RfcmVxdWVzdCA9IHN1YiB7IDEgfTsKK291ciAoJHByZV9kaXNwYXRjaF9ob29rLCAkcG9zdF9kaXNwYXRjaF9ob29rLCAkcHJlX2xpc3Rlbl9ob29rKTsKK291ciAkQ0dJID0gJ0NHSSc7CitvdXIgJGNnaTsKK3N1YiBjb25maWd1cmVfYXNfZmNnaSB7CisJcmVxdWlyZSBDR0k6OkZhc3Q7CisJb3VyICRDR0kgPSAnQ0dJOjpGYXN0JzsKKworCW15ICRyZXF1ZXN0X251bWJlciA9IDA7CisJIyBsZXQgZWFjaCBjaGlsZCBzZXJ2aWNlIDEwMCByZXF1ZXN0cworCW91ciAkaXNfbGFzdF9yZXF1ZXN0ID0gc3ViIHsgKyskcmVxdWVzdF9udW1iZXIgPiAxMDAgfTsKK30KK3N1YiBldmFsdWF0ZV9hcmd2IHsKKwlteSAkc2NyaXB0X25hbWUgPSAkRU5WeydTQ1JJUFRfTkFNRSd9IHx8ICRFTlZ7J1NDUklQVF9GSUxFTkFNRSd9IHx8IF9fRklMRV9fOworCWNvbmZpZ3VyZV9hc19mY2dpKCkKKwkJaWYgJHNjcmlwdF9uYW1lID1+IC9cLmZjZ2kkLzsKKworCXJldHVybiB1bmxlc3MgKEBBUkdWKTsKKworCXJlcXVpcmUgR2V0b3B0OjpMb25nOworCUdldG9wdDo6TG9uZzo6R2V0T3B0aW9ucygKKwkJJ2Zhc3RjZ2l8ZmNnaXxmJyA9PiBcJmNvbmZpZ3VyZV9hc19mY2dpLAorCQknbnByb2N8bj1pJyA9PiBzdWIgeworCQkJbXkgKCRhcmcsICR2YWwpID0gQF87CisJCQlyZXR1cm4gdW5sZXNzIGV2YWwgeyByZXF1aXJlIEZDR0k6OlByb2NNYW5hZ2VyOyAxOyB9OworCQkJbXkgJHByb2NfbWFuYWdlciA9IEZDR0k6OlByb2NNYW5hZ2VyLT5uZXcoeworCQkJCW5fcHJvY2Vzc2VzID0+ICR2YWwsCisJCQl9KTsKKwkJCW91ciAkcHJlX2xpc3Rlbl9ob29rICAgID0gc3ViIHsgJHByb2NfbWFuYWdlci0+cG1fbWFuYWdlKCkgICAgICAgIH07CisJCQlvdXIgJHByZV9kaXNwYXRjaF9ob29rICA9IHN1YiB7ICRwcm9jX21hbmFnZXItPnBtX3ByZV9kaXNwYXRjaCgpICB9OworCQkJb3VyICRwb3N0X2Rpc3BhdGNoX2hvb2sgPSBzdWIgeyAkcHJvY19tYW5hZ2VyLT5wbV9wb3N0X2Rpc3BhdGNoKCkgfTsKKwkJfSwKKwkpOworfQorCitzdWIgcnVuIHsKKwlldmFsdWF0ZV9hcmd2KCk7CisKKwkkZmlyc3RfcmVxdWVzdCA9IDE7CisJJHByZV9saXN0ZW5faG9vay0+KCkKKwkJaWYgJHByZV9saXN0ZW5faG9vazsKKworIFJFUVVFU1Q6CisJd2hpbGUgKCRjZ2kgPSAkQ0dJLT5uZXcoKSkgeworCQkkcHJlX2Rpc3BhdGNoX2hvb2stPigpCisJCQlpZiAkcHJlX2Rpc3BhdGNoX2hvb2s7CisKKwkJcnVuX3JlcXVlc3QoKTsKKworCQkkcG9zdF9kaXNwYXRjaF9ob29rLT4oKQorCQkJaWYgJHBvc3RfZGlzcGF0Y2hfaG9vazsKKwkJJGZpcnN0X3JlcXVlc3QgPSAwOworCisJCWxhc3QgUkVRVUVTVCBpZiAoJGlzX2xhc3RfcmVxdWVzdC0+KCkpOworCX0KKworIERPTkVfR0lUV0VCOgorCTE7Cit9CisKK3J1bigpOworCitpZiAoZGVmaW5lZCBjYWxsZXIpIHsKKwkjIHdyYXBwZWQgaW4gYSBzdWJyb3V0aW5lIHByb2Nlc3NpbmcgcmVxdWVzdHMsCisJIyBlLmcuIG1vZF9wZXJsIHdpdGggTW9kUGVybDo6UmVnaXN0cnksIG9yIFBTR0kgd2l0aCBQbGFjazo6QXBwOjpXcmFwQ0dJCisJcmV0dXJuOworfSBlbHNlIHsKKwkjIHB1cmUgQ0dJIHNjcmlwdCwgc2VydmluZyBzaW5nbGUgcmVxdWVzdAorCWV4aXQ7Cit9CisKKyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjIGFjdGlvbiBsaW5rcworCisjIHBvc3NpYmxlIHZhbHVlcyBvZiBleHRyYSBvcHRpb25zCisjIC1mdWxsID0+IDB8MSAgICAgIC0gdXNlIGFic29sdXRlL2Z1bGwgVVJMICgkbXlfdXJpLyRteV91cmwgYXMgYmFzZSkKKyMgLXJlcGxheSA9PiAxICAgICAgLSBzdGFydCBmcm9tIGEgY3VycmVudCB2aWV3IChyZXBsYXkgd2l0aCBtb2RpZmljYXRpb25zKQorIyAtcGF0aF9pbmZvID0+IDB8MSAtIGRvbid0IHVzZS91c2UgcGF0aF9pbmZvIFVSTCAoaWYgcG9zc2libGUpCisjIC1hbmNob3IgPT4gQU5DSE9SIC0gYWRkICNBTkNIT1IgdG8gZW5kIG9mIFVSTCwgaW1wbGllcyAtcmVwbGF5IGlmIHVzZWQgYWxvbmUKK3N1YiBocmVmIHsKKwlteSAlcGFyYW1zID0gQF87CisJIyBkZWZhdWx0IGlzIHRvIHVzZSAtYWJzb2x1dGUgdXJsKCkgaS5lLiAkbXlfdXJpCisJbXkgJGhyZWYgPSAkcGFyYW1zey1mdWxsfSA/ICRteV91cmwgOiAkbXlfdXJpOworCisJIyBpbXBsaWNpdCAtcmVwbGF5LCBtdXN0IGJlIGZpcnN0IG9mIGltcGxpY2l0IHBhcmFtcworCSRwYXJhbXN7LXJlcGxheX0gPSAxIGlmIChrZXlzICVwYXJhbXMgPT0gMSAmJiAkcGFyYW1zey1hbmNob3J9KTsKKworCSRwYXJhbXN7J3Byb2plY3QnfSA9ICRwcm9qZWN0IHVubGVzcyBleGlzdHMgJHBhcmFtc3sncHJvamVjdCd9OworCisJaWYgKCRwYXJhbXN7LXJlcGxheX0pIHsKKwkJd2hpbGUgKG15ICgkbmFtZSwgJHN5bWJvbCkgPSBlYWNoICVjZ2lfcGFyYW1fbWFwcGluZykgeworCQkJaWYgKCFleGlzdHMgJHBhcmFtc3skbmFtZX0pIHsKKwkJCQkkcGFyYW1zeyRuYW1lfSA9ICRpbnB1dF9wYXJhbXN7JG5hbWV9OworCQkJfQorCQl9CisJfQorCisJbXkgJHVzZV9wYXRoaW5mbyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdwYXRoaW5mbycpOworCWlmIChkZWZpbmVkICRwYXJhbXN7J3Byb2plY3QnfSAmJgorCSAgICAoZXhpc3RzICRwYXJhbXN7LXBhdGhfaW5mb30gPyAkcGFyYW1zey1wYXRoX2luZm99IDogJHVzZV9wYXRoaW5mbykpIHsKKwkJIyB0cnkgdG8gcHV0IGFzIG1hbnkgcGFyYW1ldGVycyBhcyBwb3NzaWJsZSBpbiBQQVRIX0lORk86CisJCSMgICAtIHByb2plY3QgbmFtZQorCQkjICAgLSBhY3Rpb24KKwkJIyAgIC0gaGFzaF9wYXJlbnQgb3IgaGFzaF9wYXJlbnRfYmFzZTovZmlsZV9wYXJlbnQKKwkJIyAgIC0gaGFzaCBvciBoYXNoX2Jhc2U6L2ZpbGVuYW1lCisJCSMgICAtIHRoZSBzbmFwc2hvdF9mb3JtYXQgYXMgYW4gYXBwcm9wcmlhdGUgc3VmZml4CisKKwkJIyBXaGVuIHRoZSBzY3JpcHQgaXMgdGhlIHJvb3QgRGlyZWN0b3J5SW5kZXggZm9yIHRoZSBkb21haW4sCisJCSMgJGhyZWYgaGVyZSB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZSBodHRwOi8vZ2l0d2ViLmV4YW1wbGUuY29tLworCQkjIFRodXMsIHdlIHN0cmlwIGFueSB0cmFpbGluZyAvIGZyb20gJGhyZWYsIHRvIHNwYXJlIHVzIGRvdWJsZQorCQkjIHNsYXNoZXMgaW4gdGhlIGZpbmFsIFVSTAorCQkkaHJlZiA9fiBzLC8kLCw7CisKKwkJIyBUaGVuIGFkZCB0aGUgcHJvamVjdCBuYW1lLCBpZiBwcmVzZW50CisJCSRocmVmIC49ICIvIi5lc2NfcGF0aF9pbmZvKCRwYXJhbXN7J3Byb2plY3QnfSk7CisJCWRlbGV0ZSAkcGFyYW1zeydwcm9qZWN0J307CisKKwkJIyBzaW5jZSB3ZSBkZXN0cnVjdGl2ZWx5IGFic29yYiBwYXJhbWV0ZXJzLCB3ZSBrZWVwIHRoaXMKKwkJIyBib29sZWFuIHRoYXQgcmVtZW1iZXJzIGlmIHdlJ3JlIGhhbmRsaW5nIGEgc25hcHNob3QKKwkJbXkgJGlzX3NuYXBzaG90ID0gJHBhcmFtc3snYWN0aW9uJ30gZXEgJ3NuYXBzaG90JzsKKworCQkjIFN1bW1hcnkganVzdCB1c2VzIHRoZSBwcm9qZWN0IHBhdGggVVJMLCBhbnkgb3RoZXIgYWN0aW9uIGlzCisJCSMgYWRkZWQgdG8gdGhlIFVSTAorCQlpZiAoZGVmaW5lZCAkcGFyYW1zeydhY3Rpb24nfSkgeworCQkJJGhyZWYgLj0gIi8iLmVzY19wYXRoX2luZm8oJHBhcmFtc3snYWN0aW9uJ30pCisJCQkJdW5sZXNzICRwYXJhbXN7J2FjdGlvbid9IGVxICdzdW1tYXJ5JzsKKwkJCWRlbGV0ZSAkcGFyYW1zeydhY3Rpb24nfTsKKwkJfQorCisJCSMgTmV4dCwgd2UgcHV0IGhhc2hfcGFyZW50X2Jhc2U6L2ZpbGVfcGFyZW50Li5oYXNoX2Jhc2U6L2ZpbGVfbmFtZSwKKwkJIyBzdHJpcHBpbmcgbm9uZXhpc3RlbnQgb3IgdXNlbGVzcyBwaWVjZXMKKwkJJGhyZWYgLj0gIi8iIGlmICgkcGFyYW1zeydoYXNoX2Jhc2UnfSB8fCAkcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ30KKwkJCXx8ICRwYXJhbXN7J2hhc2hfcGFyZW50J30gfHwgJHBhcmFtc3snaGFzaCd9KTsKKwkJaWYgKGRlZmluZWQgJHBhcmFtc3snaGFzaF9iYXNlJ30pIHsKKwkJCWlmIChkZWZpbmVkICRwYXJhbXN7J2hhc2hfcGFyZW50X2Jhc2UnfSkgeworCQkJCSRocmVmIC49IGVzY19wYXRoX2luZm8oJHBhcmFtc3snaGFzaF9wYXJlbnRfYmFzZSd9KTsKKwkJCQkjIHNraXAgdGhlIGZpbGVfcGFyZW50IGlmIGl0J3MgdGhlIHNhbWUgYXMgdGhlIGZpbGVfbmFtZQorCQkJCWlmIChkZWZpbmVkICRwYXJhbXN7J2ZpbGVfcGFyZW50J30pIHsKKwkJCQkJaWYgKGRlZmluZWQgJHBhcmFtc3snZmlsZV9uYW1lJ30gJiYgJHBhcmFtc3snZmlsZV9wYXJlbnQnfSBlcSAkcGFyYW1zeydmaWxlX25hbWUnfSkgeworCQkJCQkJZGVsZXRlICRwYXJhbXN7J2ZpbGVfcGFyZW50J307CisJCQkJCX0gZWxzaWYgKCRwYXJhbXN7J2ZpbGVfcGFyZW50J30gIX4gL1wuXC4vKSB7CisJCQkJCQkkaHJlZiAuPSAiOi8iLmVzY19wYXRoX2luZm8oJHBhcmFtc3snZmlsZV9wYXJlbnQnfSk7CisJCQkJCQlkZWxldGUgJHBhcmFtc3snZmlsZV9wYXJlbnQnfTsKKwkJCQkJfQorCQkJCX0KKwkJCQkkaHJlZiAuPSAiLi4iOworCQkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoX3BhcmVudCd9OworCQkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ307CisJCQl9IGVsc2lmIChkZWZpbmVkICRwYXJhbXN7J2hhc2hfcGFyZW50J30pIHsKKwkJCQkkaHJlZiAuPSBlc2NfcGF0aF9pbmZvKCRwYXJhbXN7J2hhc2hfcGFyZW50J30pLiAiLi4iOworCQkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoX3BhcmVudCd9OworCQkJfQorCisJCQkkaHJlZiAuPSBlc2NfcGF0aF9pbmZvKCRwYXJhbXN7J2hhc2hfYmFzZSd9KTsKKwkJCWlmIChkZWZpbmVkICRwYXJhbXN7J2ZpbGVfbmFtZSd9ICYmICRwYXJhbXN7J2ZpbGVfbmFtZSd9ICF+IC9cLlwuLykgeworCQkJCSRocmVmIC49ICI6LyIuZXNjX3BhdGhfaW5mbygkcGFyYW1zeydmaWxlX25hbWUnfSk7CisJCQkJZGVsZXRlICRwYXJhbXN7J2ZpbGVfbmFtZSd9OworCQkJfQorCQkJZGVsZXRlICRwYXJhbXN7J2hhc2gnfTsKKwkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoX2Jhc2UnfTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkcGFyYW1zeydoYXNoJ30pIHsKKwkJCSRocmVmIC49IGVzY19wYXRoX2luZm8oJHBhcmFtc3snaGFzaCd9KTsKKwkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoJ307CisJCX0KKworCQkjIElmIHRoZSBhY3Rpb24gd2FzIGEgc25hcHNob3QsIHdlIGNhbiBhYnNvcmIgdGhlCisJCSMgc25hcHNob3RfZm9ybWF0IHBhcmFtZXRlciB0b28KKwkJaWYgKCRpc19zbmFwc2hvdCkgeworCQkJbXkgJGZtdCA9ICRwYXJhbXN7J3NuYXBzaG90X2Zvcm1hdCd9OworCQkJIyBzbmFwc2hvdF9mb3JtYXQgc2hvdWxkIGFsd2F5cyBiZSBkZWZpbmVkIHdoZW4gaHJlZigpCisJCQkjIGlzIGNhbGxlZCwgYnV0IGp1c3QgaW4gY2FzZSBzb21lIGNvZGUgZm9yZ2V0cywgd2UKKwkJCSMgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0CisJCQkkZm10IHx8PSAkc25hcHNob3RfZm10c1swXTsKKwkJCSRocmVmIC49ICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmbXR9eydzdWZmaXgnfTsKKwkJCWRlbGV0ZSAkcGFyYW1zeydzbmFwc2hvdF9mb3JtYXQnfTsKKwkJfQorCX0KKworCSMgbm93IGVuY29kZSB0aGUgcGFyYW1ldGVycyBleHBsaWNpdGx5CisJbXkgQHJlc3VsdCA9ICgpOworCWZvciAobXkgJGkgPSAwOyAkaSA8IEBjZ2lfcGFyYW1fbWFwcGluZzsgJGkgKz0gMikgeworCQlteSAoJG5hbWUsICRzeW1ib2wpID0gKCRjZ2lfcGFyYW1fbWFwcGluZ1skaV0sICRjZ2lfcGFyYW1fbWFwcGluZ1skaSsxXSk7CisJCWlmIChkZWZpbmVkICRwYXJhbXN7JG5hbWV9KSB7CisJCQlpZiAocmVmKCRwYXJhbXN7JG5hbWV9KSBlcSAiQVJSQVkiKSB7CisJCQkJZm9yZWFjaCBteSAkcGFyIChAeyRwYXJhbXN7JG5hbWV9fSkgeworCQkJCQlwdXNoIEByZXN1bHQsICRzeW1ib2wgLiAiPSIgLiBlc2NfcGFyYW0oJHBhcik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlwdXNoIEByZXN1bHQsICRzeW1ib2wgLiAiPSIgLiBlc2NfcGFyYW0oJHBhcmFtc3skbmFtZX0pOworCQkJfQorCQl9CisJfQorCSRocmVmIC49ICI/IiAuIGpvaW4oJzsnLCBAcmVzdWx0KSBpZiBzY2FsYXIgQHJlc3VsdDsKKworCSMgZmluYWwgdHJhbnNmb3JtYXRpb246IHRyYWlsaW5nIHNwYWNlcyBtdXN0IGJlIGVzY2FwZWQgKFVSSS1lbmNvZGVkKQorCSRocmVmID1+IHMvKFxzKykkL0NHSTo6ZXNjYXBlKCQxKS9lOworCisJaWYgKCRwYXJhbXN7LWFuY2hvcn0pIHsKKwkJJGhyZWYgLj0gIiMiLmVzY19wYXJhbSgkcGFyYW1zey1hbmNob3J9KTsKKwl9CisKKwlyZXR1cm4gJGhyZWY7Cit9CisKKworIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyMgdmFsaWRhdGlvbiwgcXVvdGluZy91bnF1b3RpbmcgYW5kIGVzY2FwaW5nCisKK3N1YiB2YWxpZGF0ZV9hY3Rpb24geworCW15ICRpbnB1dCA9IHNoaWZ0IHx8IHJldHVybiB1bmRlZjsKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGV4aXN0cyAkYWN0aW9uc3skaW5wdXR9OworCXJldHVybiAkaW5wdXQ7Cit9CisKK3N1YiB2YWxpZGF0ZV9wcm9qZWN0IHsKKwlteSAkaW5wdXQgPSBzaGlmdCB8fCByZXR1cm4gdW5kZWY7CisJaWYgKCF2YWxpZGF0ZV9wYXRobmFtZSgkaW5wdXQpIHx8CisJCSEoLWQgIiRwcm9qZWN0cm9vdC8kaW5wdXQiKSB8fAorCQkhY2hlY2tfZXhwb3J0X29rKCIkcHJvamVjdHJvb3QvJGlucHV0IikgfHwKKwkJKCRzdHJpY3RfZXhwb3J0ICYmICFwcm9qZWN0X2luX2xpc3QoJGlucHV0KSkpIHsKKwkJcmV0dXJuIHVuZGVmOworCX0gZWxzZSB7CisJCXJldHVybiAkaW5wdXQ7CisJfQorfQorCitzdWIgdmFsaWRhdGVfcGF0aG5hbWUgeworCW15ICRpbnB1dCA9IHNoaWZ0IHx8IHJldHVybiB1bmRlZjsKKworCSMgbm8gJy4nIG9yICcuLicgYXMgZWxlbWVudHMgb2YgcGF0aCwgaS5lLiBubyAnLicgbm9yICcuLicKKwkjIGF0IHRoZSBiZWdpbm5pbmcsIGF0IHRoZSBlbmQsIGFuZCBiZXR3ZWVuIHNsYXNoZXMuCisJIyBhbHNvIHRoaXMgY2F0Y2hlcyBkb3VibGVkIHNsYXNoZXMKKwlpZiAoJGlucHV0ID1+IG0hKF58LykofFwufFwuXC4pKC98JCkhKSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisJIyBubyBudWxsIGNoYXJhY3RlcnMKKwlpZiAoJGlucHV0ID1+IG0hXDAhKSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisJcmV0dXJuICRpbnB1dDsKK30KKworc3ViIHZhbGlkYXRlX3JlZm5hbWUgeworCW15ICRpbnB1dCA9IHNoaWZ0IHx8IHJldHVybiB1bmRlZjsKKworCSMgdGV4dHVhbCBoYXNoZXMgYXJlIE8uSy4KKwlpZiAoJGlucHV0ID1+IG0vXlswLTlhLWZBLUZdezQwfSQvKSB7CisJCXJldHVybiAkaW5wdXQ7CisJfQorCSMgaXQgbXVzdCBiZSBjb3JyZWN0IHBhdGhuYW1lCisJJGlucHV0ID0gdmFsaWRhdGVfcGF0aG5hbWUoJGlucHV0KQorCQlvciByZXR1cm4gdW5kZWY7CisJIyByZXN0cmljdGlvbnMgb24gcmVmIG5hbWUgYWNjb3JkaW5nIHRvIGdpdC1jaGVjay1yZWYtZm9ybWF0CisJaWYgKCRpbnB1dCA9fiBtISgvXC58XC5cLnxbXDAwMC1cMDQwXDE3NyB+Xjo/KlxbXXwvJCkhKSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisJcmV0dXJuICRpbnB1dDsKK30KKworIyBkZWNvZGUgc2VxdWVuY2VzIG9mIG9jdGV0cyBpbiB1dGY4IGludG8gUGVybCdzIGludGVybmFsIGZvcm0sCisjIHdoaWNoIGlzIHV0Zi04IHdpdGggdXRmOCBmbGFnIHNldCBpZiBuZWVkZWQuICBnaXR3ZWIgd3JpdGVzIG91dAorIyBpbiB1dGYtOCB0aGFua3MgdG8gImJpbm1vZGUgU1RET1VULCAnOnV0ZjgnIiBhdCBiZWdpbm5pbmcKK3N1YiB0b191dGY4IHsKKwlteSAkc3RyID0gc2hpZnQ7CisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisKKwlpZiAodXRmODo6aXNfdXRmOCgkc3RyKSB8fCB1dGY4OjpkZWNvZGUoJHN0cikpIHsKKwkJcmV0dXJuICRzdHI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGRlY29kZSgkZmFsbGJhY2tfZW5jb2RpbmcsICRzdHIsIEVuY29kZTo6RkJfREVGQVVMVCk7CisJfQorfQorCisjIHF1b3RlIHVuc2FmZSBjaGFycywgYnV0IGtlZXAgdGhlIHNsYXNoLCBldmVuIHdoZW4gaXQncyBub3QKKyMgY29ycmVjdCwgYnV0IHF1b3RlZCBzbGFzaGVzIGxvb2sgdG9vIGhvcnJpYmxlIGluIGJvb2ttYXJrcworc3ViIGVzY19wYXJhbSB7CisJbXkgJHN0ciA9IHNoaWZ0OworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCSRzdHIgPX4gcy8oW15BLVphLXowLTlcLV8ufigpXC86QCBdKykvQ0dJOjplc2NhcGUoJDEpL2VnOworCSRzdHIgPX4gcy8gL1wrL2c7CisJcmV0dXJuICRzdHI7Cit9CisKKyMgdGhlIHF1b3RpbmcgcnVsZXMgZm9yIHBhdGhfaW5mbyBmcmFnbWVudCBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50CitzdWIgZXNjX3BhdGhfaW5mbyB7CisJbXkgJHN0ciA9IHNoaWZ0OworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCisJIyBwYXRoX2luZm8gZG9lc24ndCB0cmVhdCAnKycgYXMgc3BhY2UgKHNwZWNpYWxseSksIGJ1dCAnPycgbXVzdCBiZSBlc2NhcGVkCisJJHN0ciA9fiBzLyhbXkEtWmEtejAtOVwtXy5+KCk7XC87OkAmPSArXSspL0NHSTo6ZXNjYXBlKCQxKS9lZzsKKworCXJldHVybiAkc3RyOworfQorCisjIHF1b3RlIHVuc2FmZSBjaGFycyBpbiB3aG9sZSBVUkwsIHNvIHNvbWUgY2hhcmFjdGVycyBjYW5ub3QgYmUgcXVvdGVkCitzdWIgZXNjX3VybCB7CisJbXkgJHN0ciA9IHNoaWZ0OworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCSRzdHIgPX4gcy8oW15BLVphLXowLTlcLV8ufigpO1wvOz86QCY9IF0rKS9DR0k6OmVzY2FwZSgkMSkvZWc7CisJJHN0ciA9fiBzLyAvXCsvZzsKKwlyZXR1cm4gJHN0cjsKK30KKworIyBxdW90ZSB1bnNhZmUgY2hhcmFjdGVycyBpbiBIVE1MIGF0dHJpYnV0ZXMKK3N1YiBlc2NfYXR0ciB7CisKKwkjIGZvciBYSFRNTCBjb25mb3JtYW5jZSBlc2NhcGluZyAnIicgdG8gJyZxdW90OycgaXMgbm90IGVub3VnaAorCXJldHVybiBlc2NfaHRtbChAXyk7Cit9CisKKyMgcmVwbGFjZSBpbnZhbGlkIHV0ZjggY2hhcmFjdGVyIHdpdGggU1VCU1RJVFVUSU9OIHNlcXVlbmNlCitzdWIgZXNjX2h0bWwgeworCW15ICRzdHIgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisKKwkkc3RyID0gdG9fdXRmOCgkc3RyKTsKKwkkc3RyID0gJGNnaS0+ZXNjYXBlSFRNTCgkc3RyKTsKKwlpZiAoJG9wdHN7Jy1uYnNwJ30pIHsKKwkJJHN0ciA9fiBzLyAvJm5ic3A7L2c7CisJfQorCSRzdHIgPX4gc3woW1s6Y250cmw6XV0pfCgoJDEgbmUgIlx0IikgPyBxdW90X2NlYygkMSkgOiAkMSl8ZWc7CisJcmV0dXJuICRzdHI7Cit9CisKKyMgcXVvdGUgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCBlc2NhcGUgZmlsZW5hbWUgdG8gSFRNTAorc3ViIGVzY19wYXRoIHsKKwlteSAkc3RyID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCisJJHN0ciA9IHRvX3V0ZjgoJHN0cik7CisJJHN0ciA9ICRjZ2ktPmVzY2FwZUhUTUwoJHN0cik7CisJaWYgKCRvcHRzeyctbmJzcCd9KSB7CisJCSRzdHIgPX4gcy8gLyZuYnNwOy9nOworCX0KKwkkc3RyID1+IHN8KFtbOmNudHJsOl1dKXxxdW90X2NlYygkMSl8ZWc7CisJcmV0dXJuICRzdHI7Cit9CisKKyMgU2FuaXRpemUgZm9yIHVzZSBpbiBYSFRNTCArIGFwcGxpY2F0aW9uL3htbCt4aHRtICh2YWxpZCBYTUwgMS4wKQorc3ViIHNhbml0aXplIHsKKwlteSAkc3RyID0gc2hpZnQ7CisKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJHN0cjsKKworCSRzdHIgPSB0b191dGY4KCRzdHIpOworCSRzdHIgPX4gc3woW1s6Y250cmw6XV0pfCgkMSA9fiAvW1x0XG5ccl0vID8gJDEgOiBxdW90X2NlYygkMSkpfGVnOworCXJldHVybiAkc3RyOworfQorCisjIE1ha2UgY29udHJvbCBjaGFyYWN0ZXJzICJwcmludGFibGUiLCB1c2luZyBjaGFyYWN0ZXIgZXNjYXBlIGNvZGVzIChDRUMpCitzdWIgcXVvdF9jZWMgeworCW15ICRjbnRybCA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisJbXkgJWVzID0gKCAjIGNoYXJhY3RlciBlc2NhcGUgY29kZXMsIGFrYSBlc2NhcGUgc2VxdWVuY2VzCisJCSJcdCIgPT4gJ1x0JywgICAjIHRhYiAgICAgICAgICAgIChIVCkKKwkJIlxuIiA9PiAnXG4nLCAgICMgbGluZSBmZWVkICAgICAgKExGKQorCQkiXHIiID0+ICdccicsICAgIyBjYXJyaWdlIHJldHVybiAoQ1IpCisJCSJcZiIgPT4gJ1xmJywgICAjIGZvcm0gZmVlZCAgICAgIChGRikKKwkJIlxiIiA9PiAnXGInLCAgICMgYmFja3NwYWNlICAgICAgKEJTKQorCQkiXGEiID0+ICdcYScsICAgIyBhbGFybSAoYmVsbCkgICAoQkVMKQorCQkiXGUiID0+ICdcZScsICAgIyBlc2NhcGUgICAgICAgICAoRVNDKQorCQkiXDAxMyIgPT4gJ1x2JywgIyB2ZXJ0aWNhbCB0YWIgICAoVlQpCisJCSJcMDAwIiA9PiAnXDAnLCAjIG51bCBjaGFyYWN0ZXIgIChOVUwpCisJKTsKKwlteSAkY2hyID0gKCAoZXhpc3RzICRlc3skY250cmx9KQorCQkgICAgPyAkZXN7JGNudHJsfQorCQkgICAgOiBzcHJpbnRmKCdcJTJ4Jywgb3JkKCRjbnRybCkpICk7CisJaWYgKCRvcHRzey1ub2h0bWx9KSB7CisJCXJldHVybiAkY2hyOworCX0gZWxzZSB7CisJCXJldHVybiAiPHNwYW4gY2xhc3M9XCJjbnRybFwiPiRjaHI8L3NwYW4+IjsKKwl9Cit9CisKKyMgQWx0ZXJuYXRpdmVseSB1c2UgdW5pY29kZSBjb250cm9sIHBpY3R1cmVzIGNvZGVwb2ludHMsCisjIFVuaWNvZGUgInByaW50YWJsZSByZXByZXNlbnRhdGlvbiIgKFBSKQorc3ViIHF1b3RfdXByIHsKKwlteSAkY250cmwgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCisJbXkgJGNociA9IHNwcmludGYoJyYjJTA0ZDsnLCAweDI0MDArb3JkKCRjbnRybCkpOworCWlmICgkb3B0c3stbm9odG1sfSkgeworCQlyZXR1cm4gJGNocjsKKwl9IGVsc2UgeworCQlyZXR1cm4gIjxzcGFuIGNsYXNzPVwiY250cmxcIj4kY2hyPC9zcGFuPiI7CisJfQorfQorCisjIGdpdCBtYXkgcmV0dXJuIHF1b3RlZCBhbmQgZXNjYXBlZCBmaWxlbmFtZXMKK3N1YiB1bnF1b3RlIHsKKwlteSAkc3RyID0gc2hpZnQ7CisKKwlzdWIgdW5xIHsKKwkJbXkgJHNlcSA9IHNoaWZ0OworCQlteSAlZXMgPSAoICMgY2hhcmFjdGVyIGVzY2FwZSBjb2RlcywgYWthIGVzY2FwZSBzZXF1ZW5jZXMKKwkJCSd0JyA9PiAiXHQiLCAgICMgdGFiICAgICAgICAgICAgKEhULCBUQUIpCisJCQknbicgPT4gIlxuIiwgICAjIG5ld2xpbmUgICAgICAgIChOTCkKKwkJCSdyJyA9PiAiXHIiLCAgICMgcmV0dXJuICAgICAgICAgKENSKQorCQkJJ2YnID0+ICJcZiIsICAgIyBmb3JtIGZlZWQgICAgICAoRkYpCisJCQknYicgPT4gIlxiIiwgICAjIGJhY2tzcGFjZSAgICAgIChCUykKKwkJCSdhJyA9PiAiXGEiLCAgICMgYWxhcm0gKGJlbGwpICAgKEJFTCkKKwkJCSdlJyA9PiAiXGUiLCAgICMgZXNjYXBlICAgICAgICAgKEVTQykKKwkJCSd2JyA9PiAiXDAxMyIsICMgdmVydGljYWwgdGFiICAgKFZUKQorCQkpOworCisJCWlmICgkc2VxID1+IG0vXlswLTddezEsM30kLykgeworCQkJIyBvY3RhbCBjaGFyIHNlcXVlbmNlCisJCQlyZXR1cm4gY2hyKG9jdCgkc2VxKSk7CisJCX0gZWxzaWYgKGV4aXN0cyAkZXN7JHNlcX0pIHsKKwkJCSMgQyBlc2NhcGUgc2VxdWVuY2UsIGFrYSBjaGFyYWN0ZXIgZXNjYXBlIGNvZGUKKwkJCXJldHVybiAkZXN7JHNlcX07CisJCX0KKwkJIyBxdW90ZWQgb3JkaW5hcnkgY2hhcmFjdGVyCisJCXJldHVybiAkc2VxOworCX0KKworCWlmICgkc3RyID1+IG0vXiIoLiopIiQvKSB7CisJCSMgbmVlZHMgdW5xdW90aW5nCisJCSRzdHIgPSAkMTsKKwkJJHN0ciA9fiBzL1xcKFteMC03XXxbMC03XXsxLDN9KS91bnEoJDEpL2VnOworCX0KKwlyZXR1cm4gJHN0cjsKK30KKworIyBlc2NhcGUgdGFicyAoY29udmVydCB0YWJzIHRvIHNwYWNlcykKK3N1YiB1bnRhYmlmeSB7CisJbXkgJGxpbmUgPSBzaGlmdDsKKworCXdoaWxlICgobXkgJHBvcyA9IGluZGV4KCRsaW5lLCAiXHQiKSkgIT0gLTEpIHsKKwkJaWYgKG15ICRjb3VudCA9ICg4IC0gKCRwb3MgJSA4KSkpIHsKKwkJCW15ICRzcGFjZXMgPSAnICcgeCAkY291bnQ7CisJCQkkbGluZSA9fiBzL1x0LyRzcGFjZXMvOworCQl9CisJfQorCisJcmV0dXJuICRsaW5lOworfQorCitzdWIgcHJvamVjdF9pbl9saXN0IHsKKwlteSAkcHJvamVjdCA9IHNoaWZ0OworCW15IEBsaXN0ID0gZ2l0X2dldF9wcm9qZWN0c19saXN0KCk7CisJcmV0dXJuIEBsaXN0ICYmIHNjYWxhcihncmVwIHsgJF8tPnsncGF0aCd9IGVxICRwcm9qZWN0IH0gQGxpc3QpOworfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBIVE1MIGF3YXJlIHN0cmluZyBtYW5pcHVsYXRpb24KKworIyBUcnkgdG8gY2hvcCBnaXZlbiBzdHJpbmcgb24gYSB3b3JkIGJvdW5kYXJ5IGJldHdlZW4gcG9zaXRpb24KKyMgJGxlbiBhbmQgJGxlbiskYWRkX2xlbi4gSWYgdGhlcmUgaXMgbm8gd29yZCBib3VuZGFyeSB0aGVyZSwKKyMgY2hvcCBhdCAkbGVuKyRhZGRfbGVuLiBEbyBub3QgY2hvcCBpZiBjaG9wcGVkIHBhcnQgcGx1cyBlbGxpcHNpcworIyAobWFya2luZyBjaG9wcGVkIHBhcnQpIHdvdWxkIGJlIGxvbmdlciB0aGFuIGdpdmVuIHN0cmluZy4KK3N1YiBjaG9wX3N0ciB7CisJbXkgJHN0ciA9IHNoaWZ0OworCW15ICRsZW4gPSBzaGlmdDsKKwlteSAkYWRkX2xlbiA9IHNoaWZ0IHx8IDEwOworCW15ICR3aGVyZSA9IHNoaWZ0IHx8ICdyaWdodCc7ICMgJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnCisKKwkjIE1ha2Ugc3VyZSBwZXJsIGtub3dzIGl0IGlzIHV0ZjggZW5jb2RlZCBzbyB3ZSBkb24ndAorCSMgY3V0IGluIHRoZSBtaWRkbGUgb2YgYSB1dGY4IG11bHRpYnl0ZSBjaGFyLgorCSRzdHIgPSB0b191dGY4KCRzdHIpOworCisJIyBhbGxvdyBvbmx5ICRsZW4gY2hhcnMsIGJ1dCBkb24ndCBjdXQgYSB3b3JkIGlmIGl0IHdvdWxkIGZpdCBpbiAkYWRkX2xlbgorCSMgaWYgaXQgZG9lc24ndCBmaXQsIGN1dCBpdCBpZiBpdCdzIHN0aWxsIGxvbmdlciB0aGFuIHRoZSBkb3RzIHdlIHdvdWxkIGFkZAorCSMgcmVtb3ZlIGNob3BwZWQgY2hhcmFjdGVyIGVudGl0aWVzIGVudGlyZWx5CisKKwkjIHdoZW4gY2hvcHBpbmcgaW4gdGhlIG1pZGRsZSwgZGlzdHJpYnV0ZSAkbGVuIGludG8gbGVmdCBhbmQgcmlnaHQgcGFydAorCSMgcmV0dXJuIGVhcmx5IGlmIGNob3BwaW5nIHdvdWxkbid0IG1ha2Ugc3RyaW5nIHNob3J0ZXIKKwlpZiAoJHdoZXJlIGVxICdjZW50ZXInKSB7CisJCXJldHVybiAkc3RyIGlmICgkbGVuICsgNSA+PSBsZW5ndGgoJHN0cikpOyAjIGZpbGxlciBpcyBsZW5ndGggNQorCQkkbGVuID0gaW50KCRsZW4vMik7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRzdHIgaWYgKCRsZW4gKyA0ID49IGxlbmd0aCgkc3RyKSk7ICMgZmlsbGVyIGlzIGxlbmd0aCA0CisJfQorCisJIyByZWdleHBzOiBlbmRpbmcgYW5kIGJlZ2lubmluZyB3aXRoIHdvcmQgcGFydCB1cCB0byAkYWRkX2xlbgorCW15ICRlbmRyZSA9IHFyLy57JGxlbn1cd3swLCRhZGRfbGVufS87CisJbXkgJGJlZ3JlID0gcXIvXHd7MCwkYWRkX2xlbn0ueyRsZW59LzsKKworCWlmICgkd2hlcmUgZXEgJ2xlZnQnKSB7CisJCSRzdHIgPX4gbS9eKC4qPykoJGJlZ3JlKSQvOworCQlteSAoJGxlYWQsICRib2R5KSA9ICgkMSwgJDIpOworCQlpZiAobGVuZ3RoKCRsZWFkKSA+IDQpIHsKKwkJCSRsZWFkID0gIiAuLi4iOworCQl9CisJCXJldHVybiAiJGxlYWQkYm9keSI7CisKKwl9IGVsc2lmICgkd2hlcmUgZXEgJ2NlbnRlcicpIHsKKwkJJHN0ciA9fiBtL14oJGVuZHJlKSguKikkLzsKKwkJbXkgKCRsZWZ0LCAkc3RyKSAgPSAoJDEsICQyKTsKKwkJJHN0ciA9fiBtL14oLio/KSgkYmVncmUpJC87CisJCW15ICgkbWlkLCAkcmlnaHQpID0gKCQxLCAkMik7CisJCWlmIChsZW5ndGgoJG1pZCkgPiA1KSB7CisJCQkkbWlkID0gIiAuLi4gIjsKKwkJfQorCQlyZXR1cm4gIiRsZWZ0JG1pZCRyaWdodCI7CisKKwl9IGVsc2UgeworCQkkc3RyID1+IG0vXigkZW5kcmUpKC4qKSQvOworCQlteSAkYm9keSA9ICQxOworCQlteSAkdGFpbCA9ICQyOworCQlpZiAobGVuZ3RoKCR0YWlsKSA+IDQpIHsKKwkJCSR0YWlsID0gIi4uLiAiOworCQl9CisJCXJldHVybiAiJGJvZHkkdGFpbCI7CisJfQorfQorCisjIHRha2VzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBjaG9wX3N0ciwgYnV0IGFsc28gd3JhcHMgYSA8c3Bhbj4gYXJvdW5kIHRoZQorIyByZXN1bHQgd2l0aCBhIHRpdGxlIGF0dHJpYnV0ZSBpZiBpdCBkb2VzIGdldCBjaG9wcGVkLiBBZGRpdGlvbmFsbHksIHRoZQorIyBzdHJpbmcgaXMgSFRNTC1lc2NhcGVkLgorc3ViIGNob3BfYW5kX2VzY2FwZV9zdHIgeworCW15ICgkc3RyKSA9IEBfOworCisJbXkgJGNob3BwZWQgPSBjaG9wX3N0cihAXyk7CisJJHN0ciA9IHRvX3V0ZjgoJHN0cik7CisJaWYgKCRjaG9wcGVkIGVxICRzdHIpIHsKKwkJcmV0dXJuIGVzY19odG1sKCRjaG9wcGVkKTsKKwl9IGVsc2UgeworCQkkc3RyID1+IHMvW1s6Y250cmw6XV0vPy9nOworCQlyZXR1cm4gJGNnaS0+c3Bhbih7LXRpdGxlPT4kc3RyfSwgZXNjX2h0bWwoJGNob3BwZWQpKTsKKwl9Cit9CisKKyMgSGlnaGxpZ2h0IHNlbGVjdGVkIGZyYWdtZW50cyBvZiBzdHJpbmcsIHVzaW5nIGdpdmVuIENTUyBjbGFzcywKKyMgYW5kIGVzY2FwZSBIVE1MLiAgSXQgaXMgYXNzdW1lZCB0aGF0IGZyYWdtZW50cyBkbyBub3Qgb3ZlcmxhcC4KKyMgUmVnaW9ucyBhcmUgcGFzc2VkIGFzIGxpc3Qgb2YgcGFpcnMgKGFycmF5IHJlZmVyZW5jZXMpLgorIworIyBFeGFtcGxlOiBlc2NfaHRtbF9obF9yZWdpb25zKCJmb29iYXIiLCAibWFyayIsIFsgMCwgMyBdKSByZXR1cm5zCisjICc8c3BhbiBjbGFzcz0ibWFyayI+Zm9vPC9zcGFuPmJhcicKK3N1YiBlc2NfaHRtbF9obF9yZWdpb25zIHsKKwlteSAoJHN0ciwgJGNzc19jbGFzcywgQHNlbCkgPSBAXzsKKwlteSAlb3B0cyA9IGdyZXAgeyByZWYoJF8pIG5lICdBUlJBWScgfSBAc2VsOworCUBzZWwgICAgID0gZ3JlcCB7IHJlZigkXykgZXEgJ0FSUkFZJyB9IEBzZWw7CisJcmV0dXJuIGVzY19odG1sKCRzdHIsICVvcHRzKSB1bmxlc3MgQHNlbDsKKworCW15ICRvdXQgPSAnJzsKKwlteSAkcG9zID0gMDsKKworCWZvciBteSAkcyAoQHNlbCkgeworCQlteSAoJGJlZ2luLCAkZW5kKSA9IEAkczsKKworCQkjIERvbid0IGNyZWF0ZSBlbXB0eSA8c3Bhbj4gZWxlbWVudHMuCisJCW5leHQgaWYgJGVuZCA8PSAkYmVnaW47CisKKwkJbXkgJGVzY2FwZWQgPSBlc2NfaHRtbChzdWJzdHIoJHN0ciwgJGJlZ2luLCAkZW5kIC0gJGJlZ2luKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAlb3B0cyk7CisKKwkJJG91dCAuPSBlc2NfaHRtbChzdWJzdHIoJHN0ciwgJHBvcywgJGJlZ2luIC0gJHBvcyksICVvcHRzKQorCQkJaWYgKCRiZWdpbiAtICRwb3MgPiAwKTsKKwkJJG91dCAuPSAkY2dpLT5zcGFuKHstY2xhc3MgPT4gJGNzc19jbGFzc30sICRlc2NhcGVkKTsKKworCQkkcG9zID0gJGVuZDsKKwl9CisJJG91dCAuPSBlc2NfaHRtbChzdWJzdHIoJHN0ciwgJHBvcyksICVvcHRzKQorCQlpZiAoJHBvcyA8IGxlbmd0aCgkc3RyKSk7CisKKwlyZXR1cm4gJG91dDsKK30KKworIyByZXR1cm4gcG9zaXRpb25zIG9mIGJlZ2lubmluZyBhbmQgZW5kIG9mIGVhY2ggbWF0Y2gKK3N1YiBtYXRjaHBvc19saXN0IHsKKwlteSAoJHN0ciwgJHJlZ2V4cCkgPSBAXzsKKwlyZXR1cm4gdW5sZXNzIChkZWZpbmVkICRzdHIgJiYgZGVmaW5lZCAkcmVnZXhwKTsKKworCW15IEBtYXRjaGVzOworCXdoaWxlICgkc3RyID1+IC8kcmVnZXhwL2cpIHsKKwkJcHVzaCBAbWF0Y2hlcywgWyQtWzBdLCAkK1swXV07CisJfQorCXJldHVybiBAbWF0Y2hlczsKK30KKworIyBoaWdobGlnaHQgbWF0Y2ggKGlmIGFueSksIGFuZCBlc2NhcGUgSFRNTAorc3ViIGVzY19odG1sX21hdGNoX2hsIHsKKwlteSAoJHN0ciwgJHJlZ2V4cCkgPSBAXzsKKwlyZXR1cm4gZXNjX2h0bWwoJHN0cikgdW5sZXNzIGRlZmluZWQgJHJlZ2V4cDsKKworCW15IEBtYXRjaGVzID0gbWF0Y2hwb3NfbGlzdCgkc3RyLCAkcmVnZXhwKTsKKwlyZXR1cm4gZXNjX2h0bWwoJHN0cikgdW5sZXNzIEBtYXRjaGVzOworCisJcmV0dXJuIGVzY19odG1sX2hsX3JlZ2lvbnMoJHN0ciwgJ21hdGNoJywgQG1hdGNoZXMpOworfQorCisKKyMgaGlnaGxpZ2h0IG1hdGNoIChpZiBhbnkpIG9mIHNob3J0ZW5lZCBzdHJpbmcsIGFuZCBlc2NhcGUgSFRNTAorc3ViIGVzY19odG1sX21hdGNoX2hsX2Nob3BwZWQgeworCW15ICgkc3RyLCAkY2hvcHBlZCwgJHJlZ2V4cCkgPSBAXzsKKwlyZXR1cm4gZXNjX2h0bWxfbWF0Y2hfaGwoJHN0ciwgJHJlZ2V4cCkgdW5sZXNzIGRlZmluZWQgJGNob3BwZWQ7CisKKwlteSBAbWF0Y2hlcyA9IG1hdGNocG9zX2xpc3QoJHN0ciwgJHJlZ2V4cCk7CisJcmV0dXJuIGVzY19odG1sKCRjaG9wcGVkKSB1bmxlc3MgQG1hdGNoZXM7CisKKwkjIGZpbHRlciBtYXRjaGVzIHNvIHRoYXQgd2UgbWFyayBjaG9wcGVkIHN0cmluZworCW15ICR0YWlsID0gIi4uLiAiOyAjIHNlZSBjaG9wX3N0cgorCXVubGVzcyAoJGNob3BwZWQgPX4gcy9cUSR0YWlsXEUkLy8pIHsKKwkJJHRhaWwgPSAnJzsKKwl9CisJbXkgJGNob3BfbGVuID0gbGVuZ3RoKCRjaG9wcGVkKTsKKwlteSAkdGFpbF9sZW4gPSBsZW5ndGgoJHRhaWwpOworCW15IEBmaWx0ZXJlZDsKKworCWZvciBteSAkbSAoQG1hdGNoZXMpIHsKKwkJaWYgKCRtLT5bMF0gPiAkY2hvcF9sZW4pIHsKKwkJCXB1c2ggQGZpbHRlcmVkLCBbICRjaG9wX2xlbiwgJGNob3BfbGVuICsgJHRhaWxfbGVuIF0gaWYgKCR0YWlsX2xlbiA+IDApOworCQkJbGFzdDsKKwkJfSBlbHNpZiAoJG0tPlsxXSA+ICRjaG9wX2xlbikgeworCQkJcHVzaCBAZmlsdGVyZWQsIFsgJG0tPlswXSwgJGNob3BfbGVuICsgJHRhaWxfbGVuIF07CisJCQlsYXN0OworCQl9CisJCXB1c2ggQGZpbHRlcmVkLCAkbTsKKwl9CisKKwlyZXR1cm4gZXNjX2h0bWxfaGxfcmVnaW9ucygkY2hvcHBlZCAuICR0YWlsLCAnbWF0Y2gnLCBAZmlsdGVyZWQpOworfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBmdW5jdGlvbnMgcmV0dXJuaW5nIHNob3J0IHN0cmluZ3MKKworIyBDU1MgY2xhc3MgZm9yIGdpdmVuIGFnZSB2YWx1ZSAoaW4gc2Vjb25kcykKK3N1YiBhZ2VfY2xhc3MgeworCW15ICRhZ2UgPSBzaGlmdDsKKworCWlmICghZGVmaW5lZCAkYWdlKSB7CisJCXJldHVybiAibm9hZ2UiOworCX0gZWxzaWYgKCRhZ2UgPCA2MCo2MCoyKSB7CisJCXJldHVybiAiYWdlMCI7CisJfSBlbHNpZiAoJGFnZSA8IDYwKjYwKjI0KjIpIHsKKwkJcmV0dXJuICJhZ2UxIjsKKwl9IGVsc2UgeworCQlyZXR1cm4gImFnZTIiOworCX0KK30KKworIyBjb252ZXJ0IGFnZSBpbiBzZWNvbmRzIHRvICJubiB1bml0cyBhZ28iIHN0cmluZworc3ViIGFnZV9zdHJpbmcgeworCW15ICRhZ2UgPSBzaGlmdDsKKwlteSAkYWdlX3N0cjsKKworCWlmICgkYWdlID4gNjAqNjAqMjQqMzY1KjIpIHsKKwkJJGFnZV9zdHIgPSAoaW50ICRhZ2UvNjAvNjAvMjQvMzY1KTsKKwkJJGFnZV9zdHIgLj0gIiB5ZWFycyBhZ28iOworCX0gZWxzaWYgKCRhZ2UgPiA2MCo2MCoyNCooMzY1LzEyKSoyKSB7CisJCSRhZ2Vfc3RyID0gaW50ICRhZ2UvNjAvNjAvMjQvKDM2NS8xMik7CisJCSRhZ2Vfc3RyIC49ICIgbW9udGhzIGFnbyI7CisJfSBlbHNpZiAoJGFnZSA+IDYwKjYwKjI0KjcqMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlLzYwLzYwLzI0Lzc7CisJCSRhZ2Vfc3RyIC49ICIgd2Vla3MgYWdvIjsKKwl9IGVsc2lmICgkYWdlID4gNjAqNjAqMjQqMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlLzYwLzYwLzI0OworCQkkYWdlX3N0ciAuPSAiIGRheXMgYWdvIjsKKwl9IGVsc2lmICgkYWdlID4gNjAqNjAqMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlLzYwLzYwOworCQkkYWdlX3N0ciAuPSAiIGhvdXJzIGFnbyI7CisJfSBlbHNpZiAoJGFnZSA+IDYwKjIpIHsKKwkJJGFnZV9zdHIgPSBpbnQgJGFnZS82MDsKKwkJJGFnZV9zdHIgLj0gIiBtaW4gYWdvIjsKKwl9IGVsc2lmICgkYWdlID4gMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlOworCQkkYWdlX3N0ciAuPSAiIHNlYyBhZ28iOworCX0gZWxzZSB7CisJCSRhZ2Vfc3RyIC49ICIgcmlnaHQgbm93IjsKKwl9CisJcmV0dXJuICRhZ2Vfc3RyOworfQorCit1c2UgY29uc3RhbnQgeworCVNfSUZJTlZBTElEID0+IDAwMzAwMDAsCisJU19JRkdJVExJTksgPT4gMDE2MDAwMCwKK307CisKKyMgc3VibW9kdWxlL3N1YnByb2plY3QsIGEgY29tbWl0IG9iamVjdCByZWZlcmVuY2UKK3N1YiBTX0lTR0lUTElOSyB7CisJbXkgJG1vZGUgPSBzaGlmdDsKKworCXJldHVybiAoKCRtb2RlICYgU19JRk1UKSA9PSBTX0lGR0lUTElOSykKK30KKworIyBjb252ZXJ0IGZpbGUgbW9kZSBpbiBvY3RhbCB0byBzeW1ib2xpYyBmaWxlIG1vZGUgc3RyaW5nCitzdWIgbW9kZV9zdHIgeworCW15ICRtb2RlID0gb2N0IHNoaWZ0OworCisJaWYgKFNfSVNHSVRMSU5LKCRtb2RlKSkgeworCQlyZXR1cm4gJ20tLS0tLS0tLS0nOworCX0gZWxzaWYgKFNfSVNESVIoJG1vZGUgJiBTX0lGTVQpKSB7CisJCXJldHVybiAnZHJ3eHIteHIteCc7CisJfSBlbHNpZiAoU19JU0xOSygkbW9kZSkpIHsKKwkJcmV0dXJuICdscnd4cnd4cnd4JzsKKwl9IGVsc2lmIChTX0lTUkVHKCRtb2RlKSkgeworCQkjIGdpdCBjYXJlcyBvbmx5IGFib3V0IHRoZSBleGVjdXRhYmxlIGJpdAorCQlpZiAoJG1vZGUgJiBTX0lYVVNSKSB7CisJCQlyZXR1cm4gJy1yd3hyLXhyLXgnOworCQl9IGVsc2UgeworCQkJcmV0dXJuICctcnctci0tci0tJzsKKwkJfTsKKwl9IGVsc2UgeworCQlyZXR1cm4gJy0tLS0tLS0tLS0nOworCX0KK30KKworIyBjb252ZXJ0IGZpbGUgbW9kZSBpbiBvY3RhbCB0byBmaWxlIHR5cGUgc3RyaW5nCitzdWIgZmlsZV90eXBlIHsKKwlteSAkbW9kZSA9IHNoaWZ0OworCisJaWYgKCRtb2RlICF+IG0vXlswLTddKyQvKSB7CisJCXJldHVybiAkbW9kZTsKKwl9IGVsc2UgeworCQkkbW9kZSA9IG9jdCAkbW9kZTsKKwl9CisKKwlpZiAoU19JU0dJVExJTksoJG1vZGUpKSB7CisJCXJldHVybiAic3VibW9kdWxlIjsKKwl9IGVsc2lmIChTX0lTRElSKCRtb2RlICYgU19JRk1UKSkgeworCQlyZXR1cm4gImRpcmVjdG9yeSI7CisJfSBlbHNpZiAoU19JU0xOSygkbW9kZSkpIHsKKwkJcmV0dXJuICJzeW1saW5rIjsKKwl9IGVsc2lmIChTX0lTUkVHKCRtb2RlKSkgeworCQlyZXR1cm4gImZpbGUiOworCX0gZWxzZSB7CisJCXJldHVybiAidW5rbm93biI7CisJfQorfQorCisjIGNvbnZlcnQgZmlsZSBtb2RlIGluIG9jdGFsIHRvIGZpbGUgdHlwZSBkZXNjcmlwdGlvbiBzdHJpbmcKK3N1YiBmaWxlX3R5cGVfbG9uZyB7CisJbXkgJG1vZGUgPSBzaGlmdDsKKworCWlmICgkbW9kZSAhfiBtL15bMC03XSskLykgeworCQlyZXR1cm4gJG1vZGU7CisJfSBlbHNlIHsKKwkJJG1vZGUgPSBvY3QgJG1vZGU7CisJfQorCisJaWYgKFNfSVNHSVRMSU5LKCRtb2RlKSkgeworCQlyZXR1cm4gInN1Ym1vZHVsZSI7CisJfSBlbHNpZiAoU19JU0RJUigkbW9kZSAmIFNfSUZNVCkpIHsKKwkJcmV0dXJuICJkaXJlY3RvcnkiOworCX0gZWxzaWYgKFNfSVNMTksoJG1vZGUpKSB7CisJCXJldHVybiAic3ltbGluayI7CisJfSBlbHNpZiAoU19JU1JFRygkbW9kZSkpIHsKKwkJaWYgKCRtb2RlICYgU19JWFVTUikgeworCQkJcmV0dXJuICJleGVjdXRhYmxlIjsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAiZmlsZSI7CisJCX07CisJfSBlbHNlIHsKKwkJcmV0dXJuICJ1bmtub3duIjsKKwl9Cit9CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyMgZnVuY3Rpb25zIHJldHVybmluZyBzaG9ydCBIVE1MIGZyYWdtZW50cywgb3IgdHJhbnNmb3JtaW5nIEhUTUwgZnJhZ21lbnRzCisjIyB3aGljaCBkb24ndCBiZWxvbmcgdG8gb3RoZXIgc2VjdGlvbnMKKworIyBmb3JtYXQgbGluZSBvZiBjb21taXQgbWVzc2FnZS4KK3N1YiBmb3JtYXRfbG9nX2xpbmVfaHRtbCB7CisJbXkgJGxpbmUgPSBzaGlmdDsKKworCSRsaW5lID0gZXNjX2h0bWwoJGxpbmUsIC1uYnNwPT4xKTsKKwkkbGluZSA9fiBze1xiKFswLTlhLWZBLUZdezgsNDB9KVxifXsKKwkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJvYmplY3QiLCBoYXNoPT4kMSksCisJCQkJCS1jbGFzcyA9PiAidGV4dCJ9LCAkMSk7CisJfWVnOworCisJcmV0dXJuICRsaW5lOworfQorCisjIGZvcm1hdCBtYXJrZXIgb2YgcmVmcyBwb2ludGluZyB0byBnaXZlbiBvYmplY3QKKworIyB0aGUgZGVzdGluYXRpb24gYWN0aW9uIGlzIGNob3NlbiBiYXNlZCBvbiBvYmplY3QgdHlwZSBhbmQgY3VycmVudCBjb250ZXh0OgorIyAtIGZvciBhbm5vdGF0ZWQgdGFncywgd2UgY2hvb3NlIHRoZSB0YWcgdmlldyB1bmxlc3MgaXQncyB0aGUgY3VycmVudCB2aWV3CisjICAgYWxyZWFkeSwgaW4gd2hpY2ggY2FzZSB3ZSBnbyB0byBzaG9ydGxvZyB2aWV3CisjIC0gZm9yIG90aGVyIHJlZnMsIHdlIGtlZXAgdGhlIGN1cnJlbnQgdmlldyBpZiB3ZSdyZSBpbiBoaXN0b3J5LCBzaG9ydGxvZyBvcgorIyAgIGxvZyB2aWV3LCBhbmQgc2VsZWN0IHNob3J0bG9nIG90aGVyd2lzZQorc3ViIGZvcm1hdF9yZWZfbWFya2VyIHsKKwlteSAoJHJlZnMsICRpZCkgPSBAXzsKKwlteSAkbWFya2VycyA9ICcnOworCisJaWYgKGRlZmluZWQgJHJlZnMtPnskaWR9KSB7CisJCWZvcmVhY2ggbXkgJHJlZiAoQHskcmVmcy0+eyRpZH19KSB7CisJCQkjIHRoaXMgY29kZSBleHBsb2l0cyB0aGUgZmFjdCB0aGF0IG5vbi1saWdodHdlaWdodCB0YWdzIGFyZSB0aGUKKwkJCSMgb25seSBpbmRpcmVjdCBvYmplY3RzLCBhbmQgdGhhdCB0aGV5IGFyZSB0aGUgb25seSBvYmplY3RzIGZvciB3aGljaAorCQkJIyB3ZSB3YW50IHRvIHVzZSB0YWcgaW5zdGVhZCBvZiBzaG9ydGxvZyBhcyBhY3Rpb24KKwkJCW15ICgkdHlwZSwgJG5hbWUpID0gcXcoKTsKKwkJCW15ICRpbmRpcmVjdCA9ICgkcmVmID1+IHMvXF5ce1x9JC8vKTsKKwkJCSMgZS5nLiB0YWdzL3YyLjYuMTEgb3IgaGVhZHMvbmV4dAorCQkJaWYgKCRyZWYgPX4gbSFeKC4qPylzPy8oLiopJCEpIHsKKwkJCQkkdHlwZSA9ICQxOworCQkJCSRuYW1lID0gJDI7CisJCQl9IGVsc2UgeworCQkJCSR0eXBlID0gInJlZiI7CisJCQkJJG5hbWUgPSAkcmVmOworCQkJfQorCisJCQlteSAkY2xhc3MgPSAkdHlwZTsKKwkJCSRjbGFzcyAuPSAiIGluZGlyZWN0IiBpZiAkaW5kaXJlY3Q7CisKKwkJCW15ICRkZXN0X2FjdGlvbiA9ICJzaG9ydGxvZyI7CisKKwkJCWlmICgkaW5kaXJlY3QpIHsKKwkJCQkkZGVzdF9hY3Rpb24gPSAidGFnIiB1bmxlc3MgJGFjdGlvbiBlcSAidGFnIjsKKwkJCX0gZWxzaWYgKCRhY3Rpb24gPX4gL14oaGlzdG9yeXwoc2hvcnQpP2xvZykkLykgeworCQkJCSRkZXN0X2FjdGlvbiA9ICRhY3Rpb247CisJCQl9CisKKwkJCW15ICRkZXN0ID0gIiI7CisJCQkkZGVzdCAuPSAicmVmcy8iIHVubGVzcyAkcmVmID1+IG0hXnJlZnMvITsKKwkJCSRkZXN0IC49ICRyZWY7CisKKwkJCW15ICRsaW5rID0gJGNnaS0+YSh7CisJCQkJLWhyZWYgPT4gaHJlZigKKwkJCQkJYWN0aW9uPT4kZGVzdF9hY3Rpb24sCisJCQkJCWhhc2g9PiRkZXN0CisJCQkJKX0sICRuYW1lKTsKKworCQkJJG1hcmtlcnMgLj0gIiA8c3BhbiBjbGFzcz1cIiIuZXNjX2F0dHIoJGNsYXNzKS4iXCIgdGl0bGU9XCIiLmVzY19hdHRyKCRyZWYpLiJcIj4iIC4KKwkJCQkkbGluayAuICI8L3NwYW4+IjsKKwkJfQorCX0KKworCWlmICgkbWFya2VycykgeworCQlyZXR1cm4gJyA8c3BhbiBjbGFzcz0icmVmcyI+Jy4gJG1hcmtlcnMgLiAnPC9zcGFuPic7CisJfSBlbHNlIHsKKwkJcmV0dXJuICIiOworCX0KK30KKworIyBmb3JtYXQsIHBlcmhhcHMgc2hvcnRlbmVkIGFuZCB3aXRoIG1hcmtlcnMsIHRpdGxlIGxpbmUKK3N1YiBmb3JtYXRfc3ViamVjdF9odG1sIHsKKwlteSAoJGxvbmcsICRzaG9ydCwgJGhyZWYsICRleHRyYSkgPSBAXzsKKwkkZXh0cmEgPSAnJyB1bmxlc3MgZGVmaW5lZCgkZXh0cmEpOworCisJaWYgKGxlbmd0aCgkc2hvcnQpIDwgbGVuZ3RoKCRsb25nKSkgeworCQkkbG9uZyA9fiBzL1tbOmNudHJsOl1dLz8vZzsKKwkJcmV0dXJuICRjZ2ktPmEoey1ocmVmID0+ICRocmVmLCAtY2xhc3MgPT4gImxpc3Qgc3ViamVjdCIsCisJCSAgICAgICAgICAgICAgICAtdGl0bGUgPT4gdG9fdXRmOCgkbG9uZyl9LAorCQkgICAgICAgZXNjX2h0bWwoJHNob3J0KSkgLiAkZXh0cmE7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRjZ2ktPmEoey1ocmVmID0+ICRocmVmLCAtY2xhc3MgPT4gImxpc3Qgc3ViamVjdCJ9LAorCQkgICAgICAgZXNjX2h0bWwoJGxvbmcpKSAuICRleHRyYTsKKwl9Cit9CisKKyMgUmF0aGVyIHRoYW4gcmVjb21wdXRpbmcgdGhlIHVybCBmb3IgYW4gZW1haWwgbXVsdGlwbGUgdGltZXMsIHdlIGNhY2hlIGl0CisjIGFmdGVyIHRoZSBmaXJzdCBoaXQuIFRoaXMgZ2l2ZXMgYSB2aXNpYmxlIGJlbmVmaXQgaW4gdmlld3Mgd2hlcmUgdGhlIGF2YXRhcgorIyBmb3IgdGhlIHNhbWUgZW1haWwgaXMgdXNlZCByZXBlYXRlZGx5IChlLmcuIHNob3J0bG9nKS4KKyMgVGhlIGNhY2hlIGlzIHNoYXJlZCBieSBhbGwgYXZhdGFyIGVuZ2luZXMgKGN1cnJlbnRseSBncmF2YXRhciBvbmx5KSwgd2hpY2gKKyMgYXJlIGZyZWUgdG8gdXNlIGl0IGFzIHByZWZlcnJlZC4gU2luY2Ugb25seSBvbmUgYXZhdGFyIGVuZ2luZSBpcyB1c2VkIGZvciBhbnkKKyMgZ2l2ZW4gcGFnZSwgdGhlcmUncyBubyByaXNrIGZvciBjYWNoZSBjb25mbGljdHMuCitvdXIgJWF2YXRhcl9jYWNoZSA9ICgpOworCisjIENvbXB1dGUgdGhlIHBpY29uIHVybCBmb3IgYSBnaXZlbiBlbWFpbCwgYnkgdXNpbmcgdGhlIHBpY29uIHNlYXJjaCBzZXJ2aWNlIG92ZXIgYXQKKyMgaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9waWNvbnMvc2VhcmNoLmh0bWwKK3N1YiBwaWNvbl91cmwgeworCW15ICRlbWFpbCA9IGxjIHNoaWZ0OworCWlmICghJGF2YXRhcl9jYWNoZXskZW1haWx9KSB7CisJCW15ICgkdXNlciwgJGRvbWFpbikgPSBzcGxpdCgnQCcsICRlbWFpbCk7CisJCSRhdmF0YXJfY2FjaGV7JGVtYWlsfSA9CisJCQkiaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9jZ2ktcHViL2tpbnpsZXIvcGljb25zZWFyY2guY2dpLyIgLgorCQkJIiRkb21haW4vJHVzZXIvIiAuCisJCQkidXNlcnMrZG9tYWlucyt1bmtub3duL3VwL3NpbmdsZSI7CisJfQorCXJldHVybiAkYXZhdGFyX2NhY2hleyRlbWFpbH07Cit9CisKKyMgQ29tcHV0ZSB0aGUgZ3JhdmF0YXIgdXJsIGZvciBhIGdpdmVuIGVtYWlsLCBpZiBpdCdzIG5vdCBpbiB0aGUgY2FjaGUgYWxyZWFkeS4KKyMgR3JhdmF0YXIgc3RvcmVzIG9ubHkgdGhlIHBhcnQgb2YgdGhlIFVSTCBiZWZvcmUgdGhlIHNpemUsIHNpbmNlIHRoYXQncyB0aGUKKyMgb25lIGNvbXB1dGF0aW9uYWxseSBtb3JlIGV4cGVuc2l2ZS4gVGhpcyBhbHNvIGFsbG93cyByZXVzZSBvZiB0aGUgY2FjaGUgZm9yCisjIGRpZmZlcmVudCBzaXplcyAoZm9yIHRoaXMgcGFydGljdWxhciBlbmdpbmUpLgorc3ViIGdyYXZhdGFyX3VybCB7CisJbXkgJGVtYWlsID0gbGMgc2hpZnQ7CisJbXkgJHNpemUgPSBzaGlmdDsKKwkkYXZhdGFyX2NhY2hleyRlbWFpbH0gfHw9CisJCSJodHRwOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIvIiAuCisJCQlEaWdlc3Q6Ok1ENTo6bWQ1X2hleCgkZW1haWwpIC4gIj9zPSI7CisJcmV0dXJuICRhdmF0YXJfY2FjaGV7JGVtYWlsfSAuICRzaXplOworfQorCisjIEluc2VydCBhbiBhdmF0YXIgZm9yIHRoZSBnaXZlbiAkZW1haWwgYXQgdGhlIGdpdmVuICRzaXplIGlmIHRoZSBmZWF0dXJlCisjIGlzIGVuYWJsZWQuCitzdWIgZ2l0X2dldF9hdmF0YXIgeworCW15ICgkZW1haWwsICVvcHRzKSA9IEBfOworCW15ICRwcmVfd2hpdGUgID0gKCRvcHRzey1wYWRfYmVmb3JlfSA/ICImbmJzcDsiIDogIiIpOworCW15ICRwb3N0X3doaXRlID0gKCRvcHRzey1wYWRfYWZ0ZXJ9ICA/ICImbmJzcDsiIDogIiIpOworCSRvcHRzey1zaXplfSB8fD0gJ2RlZmF1bHQnOworCW15ICRzaXplID0gJGF2YXRhcl9zaXpleyRvcHRzey1zaXplfX0gfHwgJGF2YXRhcl9zaXpleydkZWZhdWx0J307CisJbXkgJHVybCA9ICIiOworCWlmICgkZ2l0X2F2YXRhciBlcSAnZ3JhdmF0YXInKSB7CisJCSR1cmwgPSBncmF2YXRhcl91cmwoJGVtYWlsLCAkc2l6ZSk7CisJfSBlbHNpZiAoJGdpdF9hdmF0YXIgZXEgJ3BpY29uJykgeworCQkkdXJsID0gcGljb25fdXJsKCRlbWFpbCk7CisJfQorCSMgT3RoZXIgcHJvdmlkZXJzIGNhbiBiZSBhZGRlZCBieSBleHRlbmRpbmcgdGhlIGlmIGNoYWluLCBkZWZpbmluZyAkdXJsCisJIyBhcyBuZWVkZWQuIElmIG5vIHZhcmlhbnQgcHV0cyBzb21ldGhpbmcgaW4gJHVybCwgd2UgYXNzdW1lIGF2YXRhcnMKKwkjIGFyZSBjb21wbGV0ZWx5IGRpc2FibGVkL3VuYXZhaWxhYmxlLgorCWlmICgkdXJsKSB7CisJCXJldHVybiAkcHJlX3doaXRlIC4KKwkJICAgICAgICI8aW1nIHdpZHRoPVwiJHNpemVcIiAiIC4KKwkJICAgICAgICAgICAgImNsYXNzPVwiYXZhdGFyXCIgIiAuCisJCSAgICAgICAgICAgICJzcmM9XCIiLmVzY191cmwoJHVybCkuIlwiICIgLgorCQkJICAgICJhbHQ9XCJcIiAiIC4KKwkJICAgICAgICIvPiIgLiAkcG9zdF93aGl0ZTsKKwl9IGVsc2UgeworCQlyZXR1cm4gIiI7CisJfQorfQorCitzdWIgZm9ybWF0X3NlYXJjaF9hdXRob3IgeworCW15ICgkYXV0aG9yLCAkc2VhcmNodHlwZSwgJGRpc3BsYXl0ZXh0KSA9IEBfOworCW15ICRoYXZlX3NlYXJjaCA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdzZWFyY2gnKTsKKworCWlmICgkaGF2ZV9zZWFyY2gpIHsKKwkJbXkgJHBlcmZvcm1lZCA9ICIiOworCQlpZiAoJHNlYXJjaHR5cGUgZXEgJ2F1dGhvcicpIHsKKwkJCSRwZXJmb3JtZWQgPSAiYXV0aG9yZWQiOworCQl9IGVsc2lmICgkc2VhcmNodHlwZSBlcSAnY29tbWl0dGVyJykgeworCQkJJHBlcmZvcm1lZCA9ICJjb21taXR0ZWQiOworCQl9CisKKwkJcmV0dXJuICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2VhcmNoIiwgaGFzaD0+JGhhc2gsCisJCQkJc2VhcmNodGV4dD0+JGF1dGhvciwKKwkJCQlzZWFyY2h0eXBlPT4kc2VhcmNodHlwZSksIGNsYXNzPT4ibGlzdCIsCisJCQkJdGl0bGU9PiJTZWFyY2ggZm9yIGNvbW1pdHMgJHBlcmZvcm1lZCBieSAkYXV0aG9yIn0sCisJCQkJJGRpc3BsYXl0ZXh0KTsKKworCX0gZWxzZSB7CisJCXJldHVybiAkZGlzcGxheXRleHQ7CisJfQorfQorCisjIGZvcm1hdCB0aGUgYXV0aG9yIG5hbWUgb2YgdGhlIGdpdmVuIGNvbW1pdCB3aXRoIHRoZSBnaXZlbiB0YWcKKyMgdGhlIGF1dGhvciBuYW1lIGlzIGNob3BwZWQgYW5kIGVzY2FwZWQgYWNjb3JkaW5nIHRvIHRoZSBvdGhlcgorIyBvcHRpb25hbCBwYXJhbWV0ZXJzIChzZWUgY2hvcF9zdHIpLgorc3ViIGZvcm1hdF9hdXRob3JfaHRtbCB7CisJbXkgJHRhZyA9IHNoaWZ0OworCW15ICRjbyA9IHNoaWZ0OworCW15ICRhdXRob3IgPSBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjby0+eydhdXRob3JfbmFtZSd9LCBAXyk7CisJcmV0dXJuICI8JHRhZyBjbGFzcz1cImF1dGhvclwiPiIgLgorCSAgICAgICBmb3JtYXRfc2VhcmNoX2F1dGhvcigkY28tPnsnYXV0aG9yX25hbWUnfSwgImF1dGhvciIsCisJCSAgICAgICBnaXRfZ2V0X2F2YXRhcigkY28tPnsnYXV0aG9yX2VtYWlsJ30sIC1wYWRfYWZ0ZXIgPT4gMSkgLgorCQkgICAgICAgJGF1dGhvcikgLgorCSAgICAgICAiPC8kdGFnPiI7Cit9CisKKyMgZm9ybWF0IGdpdCBkaWZmIGhlYWRlciBsaW5lLCBpLmUuICJkaWZmIC0tKGdpdHxjb21iaW5lZHxjYykgLi4uIgorc3ViIGZvcm1hdF9naXRfZGlmZl9oZWFkZXJfbGluZSB7CisJbXkgJGxpbmUgPSBzaGlmdDsKKwlteSAkZGlmZmluZm8gPSBzaGlmdDsKKwlteSAoJGZyb20sICR0bykgPSBAXzsKKworCWlmICgkZGlmZmluZm8tPnsnbnBhcmVudHMnfSkgeworCQkjIGNvbWJpbmVkIGRpZmYKKwkJJGxpbmUgPX4gcyFeKGRpZmYgKC4qPykgKSI/LiokISQxITsKKwkJaWYgKCR0by0+eydocmVmJ30pIHsKKwkJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmID0+ICR0by0+eydocmVmJ30sIC1jbGFzcyA9PiAicGF0aCJ9LAorCQkJICAgICAgICAgICAgICAgICBlc2NfcGF0aCgkdG8tPnsnZmlsZSd9KSk7CisJCX0gZWxzZSB7ICMgZmlsZSB3YXMgZGVsZXRlZCAobm8gaHJlZikKKwkJCSRsaW5lIC49IGVzY19wYXRoKCR0by0+eydmaWxlJ30pOworCQl9CisJfSBlbHNlIHsKKwkJIyAib3JkaW5hcnkiIGRpZmYKKwkJJGxpbmUgPX4gcyFeKGRpZmYgKC4qPykgKSI/YS8uKiQhJDEhOworCQlpZiAoJGZyb20tPnsnaHJlZid9KSB7CisJCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZiA9PiAkZnJvbS0+eydocmVmJ30sIC1jbGFzcyA9PiAicGF0aCJ9LAorCQkJICAgICAgICAgICAgICAgICAnYS8nIC4gZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9KSk7CisJCX0gZWxzZSB7ICMgZmlsZSB3YXMgYWRkZWQgKG5vIGhyZWYpCisJCQkkbGluZSAuPSAnYS8nIC4gZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9KTsKKwkJfQorCQkkbGluZSAuPSAnICc7CisJCWlmICgkdG8tPnsnaHJlZid9KSB7CisJCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZiA9PiAkdG8tPnsnaHJlZid9LCAtY2xhc3MgPT4gInBhdGgifSwKKwkJCSAgICAgICAgICAgICAgICAgJ2IvJyAuIGVzY19wYXRoKCR0by0+eydmaWxlJ30pKTsKKwkJfSBlbHNlIHsgIyBmaWxlIHdhcyBkZWxldGVkCisJCQkkbGluZSAuPSAnYi8nIC4gZXNjX3BhdGgoJHRvLT57J2ZpbGUnfSk7CisJCX0KKwl9CisKKwlyZXR1cm4gIjxkaXYgY2xhc3M9XCJkaWZmIGhlYWRlclwiPiRsaW5lPC9kaXY+XG4iOworfQorCisjIGZvcm1hdCBleHRlbmRlZCBkaWZmIGhlYWRlciBsaW5lLCBiZWZvcmUgcGF0Y2ggaXRzZWxmCitzdWIgZm9ybWF0X2V4dGVuZGVkX2RpZmZfaGVhZGVyX2xpbmUgeworCW15ICRsaW5lID0gc2hpZnQ7CisJbXkgJGRpZmZpbmZvID0gc2hpZnQ7CisJbXkgKCRmcm9tLCAkdG8pID0gQF87CisKKwkjIG1hdGNoIDxwYXRoPgorCWlmICgkbGluZSA9fiBzIV4oKGNvcHl8cmVuYW1lKSBmcm9tICkuKiQhJDEhICYmICRmcm9tLT57J2hyZWYnfSkgeworCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZj0+JGZyb20tPnsnaHJlZid9LCAtY2xhc3M9PiJwYXRoIn0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9KSk7CisJfQorCWlmICgkbGluZSA9fiBzIV4oKGNvcHl8cmVuYW1lKSB0byApLiokISQxISAmJiAkdG8tPnsnaHJlZid9KSB7CisJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmPT4kdG8tPnsnaHJlZid9LCAtY2xhc3M9PiJwYXRoIn0sCisJCSAgICAgICAgICAgICAgICAgZXNjX3BhdGgoJHRvLT57J2ZpbGUnfSkpOworCX0KKwkjIG1hdGNoIHNpbmdsZSA8bW9kZT4KKwlpZiAoJGxpbmUgPX4gbS9ccyhcZHs2fSkkLykgeworCQkkbGluZSAuPSAnPHNwYW4gY2xhc3M9ImluZm8iPiAoJyAuCisJCSAgICAgICAgIGZpbGVfdHlwZV9sb25nKCQxKSAuCisJCSAgICAgICAgICcpPC9zcGFuPic7CisJfQorCSMgbWF0Y2ggPGhhc2g+CisJaWYgKCRsaW5lID1+IG0vXmluZGV4IFswLTlhLWZBLUZdezQwfSxbMC05YS1mQS1GXXs0MH0vKSB7CisJCSMgY2FuIG1hdGNoIG9ubHkgZm9yIGNvbWJpbmVkIGRpZmYKKwkJJGxpbmUgPSAnaW5kZXggJzsKKwkJZm9yIChteSAkaSA9IDA7ICRpIDwgJGRpZmZpbmZvLT57J25wYXJlbnRzJ307ICRpKyspIHsKKwkJCWlmICgkZnJvbS0+eydocmVmJ31bJGldKSB7CisJCQkJJGxpbmUgLj0gJGNnaS0+YSh7LWhyZWY9PiRmcm9tLT57J2hyZWYnfVskaV0sCisJCQkJICAgICAgICAgICAgICAgICAgLWNsYXNzPT4iaGFzaCJ9LAorCQkJCSAgICAgICAgICAgICAgICAgc3Vic3RyKCRkaWZmaW5mby0+eydmcm9tX2lkJ31bJGldLDAsNykpOworCQkJfSBlbHNlIHsKKwkJCQkkbGluZSAuPSAnMCcgeCA3OworCQkJfQorCQkJIyBzZXBhcmF0b3IKKwkJCSRsaW5lIC49ICcsJyBpZiAoJGkgPCAkZGlmZmluZm8tPnsnbnBhcmVudHMnfSAtIDEpOworCQl9CisJCSRsaW5lIC49ICcuLic7CisJCWlmICgkdG8tPnsnaHJlZid9KSB7CisJCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZj0+JHRvLT57J2hyZWYnfSwgLWNsYXNzPT4iaGFzaCJ9LAorCQkJICAgICAgICAgICAgICAgICBzdWJzdHIoJGRpZmZpbmZvLT57J3RvX2lkJ30sMCw3KSk7CisJCX0gZWxzZSB7CisJCQkkbGluZSAuPSAnMCcgeCA3OworCQl9CisKKwl9IGVsc2lmICgkbGluZSA9fiBtL15pbmRleCBbMC05YS1mQS1GXXs0MH0uLlswLTlhLWZBLUZdezQwfS8pIHsKKwkJIyBjYW4gbWF0Y2ggb25seSBmb3Igb3JkaW5hcnkgZGlmZgorCQlteSAoJGZyb21fbGluaywgJHRvX2xpbmspOworCQlpZiAoJGZyb20tPnsnaHJlZid9KSB7CisJCQkkZnJvbV9saW5rID0gJGNnaS0+YSh7LWhyZWY9PiRmcm9tLT57J2hyZWYnfSwgLWNsYXNzPT4iaGFzaCJ9LAorCQkJICAgICAgICAgICAgICAgICAgICAgc3Vic3RyKCRkaWZmaW5mby0+eydmcm9tX2lkJ30sMCw3KSk7CisJCX0gZWxzZSB7CisJCQkkZnJvbV9saW5rID0gJzAnIHggNzsKKwkJfQorCQlpZiAoJHRvLT57J2hyZWYnfSkgeworCQkJJHRvX2xpbmsgPSAkY2dpLT5hKHstaHJlZj0+JHRvLT57J2hyZWYnfSwgLWNsYXNzPT4iaGFzaCJ9LAorCQkJICAgICAgICAgICAgICAgICAgIHN1YnN0cigkZGlmZmluZm8tPnsndG9faWQnfSwwLDcpKTsKKwkJfSBlbHNlIHsKKwkJCSR0b19saW5rID0gJzAnIHggNzsKKwkJfQorCQlteSAoJGZyb21faWQsICR0b19pZCkgPSAoJGRpZmZpbmZvLT57J2Zyb21faWQnfSwgJGRpZmZpbmZvLT57J3RvX2lkJ30pOworCQkkbGluZSA9fiBzISRmcm9tX2lkXC5cLiR0b19pZCEkZnJvbV9saW5rLi4kdG9fbGluayE7CisJfQorCisJcmV0dXJuICRsaW5lIC4gIjxici8+XG4iOworfQorCisjIGZvcm1hdCBmcm9tLWZpbGUvdG8tZmlsZSBkaWZmIGhlYWRlcgorc3ViIGZvcm1hdF9kaWZmX2Zyb21fdG9faGVhZGVyIHsKKwlteSAoJGZyb21fbGluZSwgJHRvX2xpbmUsICRkaWZmaW5mbywgJGZyb20sICR0bywgQHBhcmVudHMpID0gQF87CisJbXkgJGxpbmU7CisJbXkgJHJlc3VsdCA9ICcnOworCisJJGxpbmUgPSAkZnJvbV9saW5lOworCSNhc3NlcnQoJGxpbmUgPX4gbS9eLS0tLykgaWYgREVCVUc7CisJIyBubyBleHRyYSBmb3JtYXR0aW5nIGZvciAiXi0tLSAvZGV2L251bGwiCisJaWYgKCEgJGRpZmZpbmZvLT57J25wYXJlbnRzJ30pIHsKKwkJIyBvcmRpbmFyeSAoc2luZ2xlIHBhcmVudCkgZGlmZgorCQlpZiAoJGxpbmUgPX4gbSFeLS0tICI/YS8hKSB7CisJCQlpZiAoJGZyb20tPnsnaHJlZid9KSB7CisJCQkJJGxpbmUgPSAnLS0tIGEvJyAuCisJCQkJICAgICAgICAkY2dpLT5hKHstaHJlZj0+JGZyb20tPnsnaHJlZid9LCAtY2xhc3M9PiJwYXRoIn0sCisJCQkJICAgICAgICAgICAgICAgIGVzY19wYXRoKCRmcm9tLT57J2ZpbGUnfSkpOworCQkJfSBlbHNlIHsKKwkJCQkkbGluZSA9ICctLS0gYS8nIC4KKwkJCQkgICAgICAgIGVzY19wYXRoKCRmcm9tLT57J2ZpbGUnfSk7CisJCQl9CisJCX0KKwkJJHJlc3VsdCAuPSBxcSE8ZGl2IGNsYXNzPSJkaWZmIGZyb21fZmlsZSI+JGxpbmU8L2Rpdj5cbiE7CisKKwl9IGVsc2UgeworCQkjIGNvbWJpbmVkIGRpZmYgKG1lcmdlIGNvbW1pdCkKKwkJZm9yIChteSAkaSA9IDA7ICRpIDwgJGRpZmZpbmZvLT57J25wYXJlbnRzJ307ICRpKyspIHsKKwkJCWlmICgkZnJvbS0+eydocmVmJ31bJGldKSB7CisJCQkJJGxpbmUgPSAnLS0tICcgLgorCQkJCSAgICAgICAgJGNnaS0+YSh7LWhyZWY9PmhyZWYoYWN0aW9uPT4iYmxvYmRpZmYiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9wYXJlbnQ9PiRkaWZmaW5mby0+eydmcm9tX2lkJ31bJGldLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9wYXJlbnRfYmFzZT0+JHBhcmVudHNbJGldLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXJlbnQ9PiRmcm9tLT57J2ZpbGUnfVskaV0sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZmluZm8tPnsndG9faWQnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiR0by0+eydmaWxlJ30pLAorCQkJCSAgICAgICAgICAgICAgICAgLWNsYXNzPT4icGF0aCIsCisJCQkJICAgICAgICAgICAgICAgICAtdGl0bGU9PiJkaWZmIiAuICgkaSsxKX0sCisJCQkJICAgICAgICAgICAgICAgICRpKzEpIC4KKwkJCQkgICAgICAgICcvJyAuCisJCQkJICAgICAgICAkY2dpLT5hKHstaHJlZj0+JGZyb20tPnsnaHJlZid9WyRpXSwgLWNsYXNzPT4icGF0aCJ9LAorCQkJCSAgICAgICAgICAgICAgICBlc2NfcGF0aCgkZnJvbS0+eydmaWxlJ31bJGldKSk7CisJCQl9IGVsc2UgeworCQkJCSRsaW5lID0gJy0tLSAvZGV2L251bGwnOworCQkJfQorCQkJJHJlc3VsdCAuPSBxcSE8ZGl2IGNsYXNzPSJkaWZmIGZyb21fZmlsZSI+JGxpbmU8L2Rpdj5cbiE7CisJCX0KKwl9CisKKwkkbGluZSA9ICR0b19saW5lOworCSNhc3NlcnQoJGxpbmUgPX4gbS9eXCtcK1wrLykgaWYgREVCVUc7CisJIyBubyBleHRyYSBmb3JtYXR0aW5nIGZvciAiXisrKyAvZGV2L251bGwiCisJaWYgKCRsaW5lID1+IG0hXlwrXCtcKyAiP2IvISkgeworCQlpZiAoJHRvLT57J2hyZWYnfSkgeworCQkJJGxpbmUgPSAnKysrIGIvJyAuCisJCQkgICAgICAgICRjZ2ktPmEoey1ocmVmPT4kdG8tPnsnaHJlZid9LCAtY2xhc3M9PiJwYXRoIn0sCisJCQkgICAgICAgICAgICAgICAgZXNjX3BhdGgoJHRvLT57J2ZpbGUnfSkpOworCQl9IGVsc2UgeworCQkJJGxpbmUgPSAnKysrIGIvJyAuCisJCQkgICAgICAgIGVzY19wYXRoKCR0by0+eydmaWxlJ30pOworCQl9CisJfQorCSRyZXN1bHQgLj0gcXEhPGRpdiBjbGFzcz0iZGlmZiB0b19maWxlIj4kbGluZTwvZGl2PlxuITsKKworCXJldHVybiAkcmVzdWx0OworfQorCisjIGNyZWF0ZSBub3RlIGZvciBwYXRjaCBzaW1wbGlmaWVkIGJ5IGNvbWJpbmVkIGRpZmYKK3N1YiBmb3JtYXRfZGlmZl9jY19zaW1wbGlmaWVkIHsKKwlteSAoJGRpZmZpbmZvLCBAcGFyZW50cykgPSBAXzsKKwlteSAkcmVzdWx0ID0gJyc7CisKKwkkcmVzdWx0IC49ICI8ZGl2IGNsYXNzPVwiZGlmZiBoZWFkZXJcIj4iIC4KKwkgICAgICAgICAgICJkaWZmIC0tY2MgIjsKKwlpZiAoIWlzX2RlbGV0ZWQoJGRpZmZpbmZvKSkgeworCQkkcmVzdWx0IC49ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmZpbmZvLT57J3RvX2lkJ30sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmaW5mby0+eyd0b19maWxlJ30pLAorCQkgICAgICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAicGF0aCJ9LAorCQkgICAgICAgICAgICAgICAgICAgZXNjX3BhdGgoJGRpZmZpbmZvLT57J3RvX2ZpbGUnfSkpOworCX0gZWxzZSB7CisJCSRyZXN1bHQgLj0gZXNjX3BhdGgoJGRpZmZpbmZvLT57J3RvX2ZpbGUnfSk7CisJfQorCSRyZXN1bHQgLj0gIjwvZGl2PlxuIiAuICMgY2xhc3M9ImRpZmYgaGVhZGVyIgorCSAgICAgICAgICAgIjxkaXYgY2xhc3M9XCJkaWZmIG5vZGlmZmVyZW5jZXNcIj4iIC4KKwkgICAgICAgICAgICJTaW1wbGUgbWVyZ2UiIC4KKwkgICAgICAgICAgICI8L2Rpdj5cbiI7ICMgY2xhc3M9ImRpZmYgbm9kaWZmZXJlbmNlcyIKKworCXJldHVybiAkcmVzdWx0OworfQorCitzdWIgZGlmZl9saW5lX2NsYXNzIHsKKwlteSAoJGxpbmUsICRmcm9tLCAkdG8pID0gQF87CisKKwkjIG9yZGluYXJ5IGRpZmYKKwlteSAkbnVtX3NpZ24gPSAxOworCSMgY29tYmluZWQgZGlmZgorCWlmICgkZnJvbSAmJiAkdG8gJiYgcmVmKCRmcm9tLT57J2hyZWYnfSkgZXEgIkFSUkFZIikgeworCQkkbnVtX3NpZ24gPSBzY2FsYXIgQHskZnJvbS0+eydocmVmJ319OworCX0KKworCW15IEBkaWZmX2xpbmVfY2xhc3NpZmllciA9ICgKKwkJeyByZWdleHAgPT4gcXIvXlxAXEB7JG51bV9zaWdufSAvLCBjbGFzcyA9PiAiY2h1bmtfaGVhZGVyIn0sCisJCXsgcmVnZXhwID0+IHFyL15cXC8sICAgICAgICAgICAgICAgY2xhc3MgPT4gImluY29tcGxldGUiICB9LAorCQl7IHJlZ2V4cCA9PiBxci9eIHskbnVtX3NpZ259LywgICAgIGNsYXNzID0+ICJjdHgiIH0sCisJCSMgY2xhc3NpZmllciBmb3IgY29udGV4dCBtdXN0IGNvbWUgYmVmb3JlIGNsYXNzaWZpZXIgYWRkL3JlbSwKKwkJIyBvciB3ZSB3b3VsZCBoYXZlIHRvIHVzZSBtb3JlIGNvbXBsaWNhdGVkIHJlZ2V4cCwgZm9yIGV4YW1wbGUKKwkJIyBxci8oPz0gezAsJG19XCspWysgXXskbnVtX3NpZ259Lywgd2hlcmUgJG0gPSAkbnVtX3NpZ24gLSAxOworCQl7IHJlZ2V4cCA9PiBxci9eWysgXXskbnVtX3NpZ259LywgICBjbGFzcyA9PiAiYWRkIiB9LAorCQl7IHJlZ2V4cCA9PiBxci9eWy0gXXskbnVtX3NpZ259LywgICBjbGFzcyA9PiAicmVtIiB9LAorCSk7CisJZm9yIG15ICRjbHNmeSAoQGRpZmZfbGluZV9jbGFzc2lmaWVyKSB7CisJCXJldHVybiAkY2xzZnktPnsnY2xhc3MnfQorCQkJaWYgKCRsaW5lID1+ICRjbHNmeS0+eydyZWdleHAnfSk7CisJfQorCisJIyBmYWxsYmFjaworCXJldHVybiAiIjsKK30KKworIyBhc3N1bWVzIHRoYXQgJGZyb20gYW5kICR0byBhcmUgZGVmaW5lZCBhbmQgY29ycmVjdGx5IGZpbGxlZCwKKyMgYW5kIHRoYXQgJGxpbmUgaG9sZHMgYSBsaW5lIG9mIGNodW5rIGhlYWRlciBmb3IgdW5pZmllZCBkaWZmCitzdWIgZm9ybWF0X3VuaWRpZmZfY2h1bmtfaGVhZGVyIHsKKwlteSAoJGxpbmUsICRmcm9tLCAkdG8pID0gQF87CisKKwlteSAoJGZyb21fdGV4dCwgJGZyb21fc3RhcnQsICRmcm9tX2xpbmVzLCAkdG9fdGV4dCwgJHRvX3N0YXJ0LCAkdG9fbGluZXMsICRzZWN0aW9uKSA9CisJCSRsaW5lID1+IG0vXlxAezJ9ICgtKFxkKykoPzosKFxkKykpPykgKFwrKFxkKykoPzosKFxkKykpPykgXEB7Mn0oLiopJC87CisKKwkkZnJvbV9saW5lcyA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb21fbGluZXM7CisJJHRvX2xpbmVzICAgPSAwIHVubGVzcyBkZWZpbmVkICR0b19saW5lczsKKworCWlmICgkZnJvbS0+eydocmVmJ30pIHsKKwkJJGZyb21fdGV4dCA9ICRjZ2ktPmEoey1ocmVmPT4iJGZyb20tPnsnaHJlZid9I2wkZnJvbV9zdGFydCIsCisJCSAgICAgICAgICAgICAgICAgICAgIC1jbGFzcz0+Imxpc3QifSwgJGZyb21fdGV4dCk7CisJfQorCWlmICgkdG8tPnsnaHJlZid9KSB7CisJCSR0b190ZXh0ICAgPSAkY2dpLT5hKHstaHJlZj0+IiR0by0+eydocmVmJ30jbCR0b19zdGFydCIsCisJCSAgICAgICAgICAgICAgICAgICAgIC1jbGFzcz0+Imxpc3QifSwgJHRvX3RleHQpOworCX0KKwkkbGluZSA9ICI8c3BhbiBjbGFzcz1cImNodW5rX2luZm9cIj5AQCAkZnJvbV90ZXh0ICR0b190ZXh0IEBAPC9zcGFuPiIgLgorCSAgICAgICAgIjxzcGFuIGNsYXNzPVwic2VjdGlvblwiPiIgLiBlc2NfaHRtbCgkc2VjdGlvbiwgLW5ic3A9PjEpIC4gIjwvc3Bhbj4iOworCXJldHVybiAkbGluZTsKK30KKworIyBhc3N1bWVzIHRoYXQgJGZyb20gYW5kICR0byBhcmUgZGVmaW5lZCBhbmQgY29ycmVjdGx5IGZpbGxlZCwKKyMgYW5kIHRoYXQgJGxpbmUgaG9sZHMgYSBsaW5lIG9mIGNodW5rIGhlYWRlciBmb3IgY29tYmluZWQgZGlmZgorc3ViIGZvcm1hdF9jY19kaWZmX2NodW5rX2hlYWRlciB7CisJbXkgKCRsaW5lLCAkZnJvbSwgJHRvKSA9IEBfOworCisJbXkgKCRwcmVmaXgsICRyYW5nZXMsICRzZWN0aW9uKSA9ICRsaW5lID1+IG0vXihcQCspICguKj8pIFxAKyguKikkLzsKKwlteSAoQGZyb21fdGV4dCwgQGZyb21fc3RhcnQsIEBmcm9tX25saW5lcywgJHRvX3RleHQsICR0b19zdGFydCwgJHRvX25saW5lcyk7CisKKwlAZnJvbV90ZXh0ID0gc3BsaXQoJyAnLCAkcmFuZ2VzKTsKKwlmb3IgKG15ICRpID0gMDsgJGkgPCBAZnJvbV90ZXh0OyArKyRpKSB7CisJCSgkZnJvbV9zdGFydFskaV0sICRmcm9tX25saW5lc1skaV0pID0KKwkJCShzcGxpdCgnLCcsIHN1YnN0cigkZnJvbV90ZXh0WyRpXSwgMSkpLCAwKTsKKwl9CisKKwkkdG9fdGV4dCAgID0gcG9wIEBmcm9tX3RleHQ7CisJJHRvX3N0YXJ0ICA9IHBvcCBAZnJvbV9zdGFydDsKKwkkdG9fbmxpbmVzID0gcG9wIEBmcm9tX25saW5lczsKKworCSRsaW5lID0gIjxzcGFuIGNsYXNzPVwiY2h1bmtfaW5mb1wiPiRwcmVmaXggIjsKKwlmb3IgKG15ICRpID0gMDsgJGkgPCBAZnJvbV90ZXh0OyArKyRpKSB7CisJCWlmICgkZnJvbS0+eydocmVmJ31bJGldKSB7CisJCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZj0+IiRmcm9tLT57J2hyZWYnfVskaV0jbCRmcm9tX3N0YXJ0WyRpXSIsCisJCQkgICAgICAgICAgICAgICAgICAtY2xhc3M9PiJsaXN0In0sICRmcm9tX3RleHRbJGldKTsKKwkJfSBlbHNlIHsKKwkJCSRsaW5lIC49ICRmcm9tX3RleHRbJGldOworCQl9CisJCSRsaW5lIC49ICIgIjsKKwl9CisJaWYgKCR0by0+eydocmVmJ30pIHsKKwkJJGxpbmUgLj0gJGNnaS0+YSh7LWhyZWY9PiIkdG8tPnsnaHJlZid9I2wkdG9fc3RhcnQiLAorCQkgICAgICAgICAgICAgICAgICAtY2xhc3M9PiJsaXN0In0sICR0b190ZXh0KTsKKwl9IGVsc2UgeworCQkkbGluZSAuPSAkdG9fdGV4dDsKKwl9CisJJGxpbmUgLj0gIiAkcHJlZml4PC9zcGFuPiIgLgorCSAgICAgICAgICI8c3BhbiBjbGFzcz1cInNlY3Rpb25cIj4iIC4gZXNjX2h0bWwoJHNlY3Rpb24sIC1uYnNwPT4xKSAuICI8L3NwYW4+IjsKKwlyZXR1cm4gJGxpbmU7Cit9CisKKyMgcHJvY2VzcyBwYXRjaCAoZGlmZikgbGluZSAobm90IHRvIGJlIHVzZWQgZm9yIGRpZmYgaGVhZGVycyksCisjIHJldHVybmluZyBIVE1MLWZvcm1hdHRlZCAoYnV0IG5vdCB3cmFwcGVkKSBsaW5lLgorIyBJZiB0aGUgbGluZSBpcyBwYXNzZWQgYXMgYSByZWZlcmVuY2UsIGl0IGlzIHRyZWF0ZWQgYXMgSFRNTCBhbmQgbm90CisjIGVzY19odG1sKCknZWQuCitzdWIgZm9ybWF0X2RpZmZfbGluZSB7CisJbXkgKCRsaW5lLCAkZGlmZl9jbGFzcywgJGZyb20sICR0bykgPSBAXzsKKworCWlmIChyZWYoJGxpbmUpKSB7CisJCSRsaW5lID0gJCRsaW5lOworCX0gZWxzZSB7CisJCWNob21wICRsaW5lOworCQkkbGluZSA9IHVudGFiaWZ5KCRsaW5lKTsKKworCQlpZiAoJGZyb20gJiYgJHRvICYmICRsaW5lID1+IG0vXlxAezJ9IC8pIHsKKwkJCSRsaW5lID0gZm9ybWF0X3VuaWRpZmZfY2h1bmtfaGVhZGVyKCRsaW5lLCAkZnJvbSwgJHRvKTsKKwkJfSBlbHNpZiAoJGZyb20gJiYgJHRvICYmICRsaW5lID1+IG0vXlxAezN9LykgeworCQkJJGxpbmUgPSBmb3JtYXRfY2NfZGlmZl9jaHVua19oZWFkZXIoJGxpbmUsICRmcm9tLCAkdG8pOworCQl9IGVsc2UgeworCQkJJGxpbmUgPSBlc2NfaHRtbCgkbGluZSwgLW5ic3A9PjEpOworCQl9CisJfQorCisJbXkgJGRpZmZfY2xhc3NlcyA9ICJkaWZmIjsKKwkkZGlmZl9jbGFzc2VzIC49ICIgJGRpZmZfY2xhc3MiIGlmICgkZGlmZl9jbGFzcyk7CisJJGxpbmUgPSAiPGRpdiBjbGFzcz1cIiRkaWZmX2NsYXNzZXNcIj4kbGluZTwvZGl2PlxuIjsKKworCXJldHVybiAkbGluZTsKK30KKworIyBHZW5lcmF0ZXMgdW5kZWYgb3Igc29tZXRoaW5nIGxpa2UgIl9zbmFwc2hvdF8iIG9yICJzbmFwc2hvdCAoX3RiejJfIF96aXBfKSIsCisjIGxpbmtlZC4gIFBhc3MgdGhlIGhhc2ggb2YgdGhlIHRyZWUvY29tbWl0IHRvIHNuYXBzaG90Lgorc3ViIGZvcm1hdF9zbmFwc2hvdF9saW5rcyB7CisJbXkgKCRoYXNoKSA9IEBfOworCW15ICRudW1fZm10cyA9IEBzbmFwc2hvdF9mbXRzOworCWlmICgkbnVtX2ZtdHMgPiAxKSB7CisJCSMgQSBwYXJlbnRoZXNpemVkIGxpc3Qgb2YgbGlua3MgYmVhcmluZyBmb3JtYXQgbmFtZXMuCisJCSMgZS5nLiAic25hcHNob3QgKF90YXIuZ3pfIF96aXBfKSIKKwkJcmV0dXJuICJzbmFwc2hvdCAoIiAuIGpvaW4oJyAnLCBtYXAKKwkJCSRjZ2ktPmEoeworCQkJCS1ocmVmID0+IGhyZWYoCisJCQkJCWFjdGlvbj0+InNuYXBzaG90IiwKKwkJCQkJaGFzaD0+JGhhc2gsCisJCQkJCXNuYXBzaG90X2Zvcm1hdD0+JF8KKwkJCQkpCisJCQl9LCAka25vd25fc25hcHNob3RfZm9ybWF0c3skX317J2Rpc3BsYXknfSkKKwkJLCBAc25hcHNob3RfZm10cykgLiAiKSI7CisJfSBlbHNpZiAoJG51bV9mbXRzID09IDEpIHsKKwkJIyBBIHNpbmdsZSAic25hcHNob3QiIGxpbmsgd2hvc2UgdG9vbHRpcCBiZWFycyB0aGUgZm9ybWF0IG5hbWUuCisJCSMgaS5lLiAiX3NuYXBzaG90XyIKKwkJbXkgKCRmbXQpID0gQHNuYXBzaG90X2ZtdHM7CisJCXJldHVybgorCQkJJGNnaS0+YSh7CisJCQkJLWhyZWYgPT4gaHJlZigKKwkJCQkJYWN0aW9uPT4ic25hcHNob3QiLAorCQkJCQloYXNoPT4kaGFzaCwKKwkJCQkJc25hcHNob3RfZm9ybWF0PT4kZm10CisJCQkJKSwKKwkJCQktdGl0bGUgPT4gImluIGZvcm1hdDogJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZtdH17J2Rpc3BsYXknfSIKKwkJCX0sICJzbmFwc2hvdCIpOworCX0gZWxzZSB7ICMgJG51bV9mbXRzID09IDAKKwkJcmV0dXJuIHVuZGVmOworCX0KK30KKworIyMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIyMgZnVuY3Rpb25zIHJldHVybmluZyB2YWx1ZXMgdG8gYmUgcGFzc2VkLCBwZXJoYXBzIGFmdGVyIHNvbWUKKyMjIHRyYW5zZm9ybWF0aW9uLCB0byBvdGhlciBmdW5jdGlvbnM7IGUuZy4gcmV0dXJuaW5nIGFyZ3VtZW50cyB0byBocmVmKCkKKworIyByZXR1cm5zIGhhc2ggdG8gYmUgcGFzc2VkIHRvIGhyZWYgdG8gZ2VuZXJhdGUgZ2l0d2ViIFVSTAorIyBpbiAtdGl0bGUga2V5IGl0IHJldHVybnMgZGVzY3JpcHRpb24gb2YgbGluaworc3ViIGdldF9mZWVkX2luZm8geworCW15ICRmb3JtYXQgPSBzaGlmdCB8fCAnQXRvbSc7CisJbXkgJXJlcyA9IChhY3Rpb24gPT4gbGMoJGZvcm1hdCkpOworCisJIyBmZWVkIGxpbmtzIGFyZSBwb3NzaWJsZSBvbmx5IGZvciBwcm9qZWN0IHZpZXdzCisJcmV0dXJuIHVubGVzcyAoZGVmaW5lZCAkcHJvamVjdCk7CisJIyBzb21lIHZpZXdzIHNob3VsZCBsaW5rIHRvIE9QTUwsIG9yIHRvIGdlbmVyaWMgcHJvamVjdCBmZWVkLAorCSMgb3IgZG9uJ3QgaGF2ZSBzcGVjaWZpYyBmZWVkIHlldCAoc28gdGhleSBzaG91bGQgdXNlIGdlbmVyaWMpCisJcmV0dXJuIGlmICghJGFjdGlvbiB8fCAkYWN0aW9uID1+IC9eKD86dGFnc3xoZWFkc3xmb3Jrc3x0YWd8c2VhcmNoKSQveCk7CisKKwlteSAkYnJhbmNoOworCSMgYnJhbmNoZXMgcmVmcyB1c2VzICdyZWZzL2hlYWRzLycgcHJlZml4IChmdWxsbmFtZSkgdG8gZGlmZmVyZW50aWF0ZQorCSMgZnJvbSB0YWcgbGlua3M7IHRoaXMgYWxzbyBtYWtlcyBwb3NzaWJsZSB0byBkZXRlY3QgYnJhbmNoIGxpbmtzCisJaWYgKChkZWZpbmVkICRoYXNoX2Jhc2UgJiYgJGhhc2hfYmFzZSA9fiBtIV5yZWZzL2hlYWRzLyguKikkISkgfHwKKwkgICAgKGRlZmluZWQgJGhhc2ggICAgICAmJiAkaGFzaCAgICAgID1+IG0hXnJlZnMvaGVhZHMvKC4qKSQhKSkgeworCQkkYnJhbmNoID0gJDE7CisJfQorCSMgZmluZCBsb2cgdHlwZSBmb3IgZmVlZCBkZXNjcmlwdGlvbiAodGl0bGUpCisJbXkgJHR5cGUgPSAnbG9nJzsKKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSR0eXBlICA9ICJoaXN0b3J5IG9mICRmaWxlX25hbWUiOworCQkkdHlwZSAuPSAiLyIgaWYgKCRhY3Rpb24gZXEgJ3RyZWUnKTsKKwkJJHR5cGUgLj0gIiBvbiAnJGJyYW5jaCciIGlmIChkZWZpbmVkICRicmFuY2gpOworCX0gZWxzZSB7CisJCSR0eXBlID0gImxvZyBvZiAkYnJhbmNoIiBpZiAoZGVmaW5lZCAkYnJhbmNoKTsKKwl9CisKKwkkcmVzey10aXRsZX0gPSAkdHlwZTsKKwkkcmVzeydoYXNoJ30gPSAoZGVmaW5lZCAkYnJhbmNoID8gInJlZnMvaGVhZHMvJGJyYW5jaCIgOiB1bmRlZik7CisJJHJlc3snZmlsZV9uYW1lJ30gPSAkZmlsZV9uYW1lOworCisJcmV0dXJuICVyZXM7Cit9CisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMjIGdpdCB1dGlsaXR5IHN1YnJvdXRpbmVzLCBpbnZva2luZyBnaXQgY29tbWFuZHMKKworIyByZXR1cm5zIHBhdGggdG8gdGhlIGNvcmUgZ2l0IGV4ZWN1dGFibGUgYW5kIHRoZSAtLWdpdC1kaXIgcGFyYW1ldGVyIGFzIGxpc3QKK3N1YiBnaXRfY21kIHsKKwkkbnVtYmVyX29mX2dpdF9jbWRzKys7CisJcmV0dXJuICRHSVQsICctLWdpdC1kaXI9Jy4kZ2l0X2RpcjsKK30KKworIyBxdW90ZSB0aGUgZ2l2ZW4gYXJndW1lbnRzIGZvciBwYXNzaW5nIHRoZW0gdG8gdGhlIHNoZWxsCisjIHF1b3RlX2NvbW1hbmQoImNvbW1hbmQiLCAiYXJnIDEiLCAiYXJnIHdpdGggJyBhbmQgISBjaGFyYWN0ZXJzIikKKyMgPT4gIidjb21tYW5kJyAnYXJnIDEnICdhcmcgd2l0aCAnXCcnIGFuZCAnXCEnIGNoYXJhY3RlcnMnIgorIyBUcnkgdG8gYXZvaWQgdXNpbmcgdGhpcyBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZS4KK3N1YiBxdW90ZV9jb21tYW5kIHsKKwlyZXR1cm4gam9pbignICcsCisJCW1hcCB7IG15ICRhID0gJF87ICRhID1+IHMvKFsnIV0pLydcXCQxJy9nOyAiJyRhJyIgfSBAXyApOworfQorCisjIGdldCBIRUFEIHJlZiBvZiBnaXZlbiBwcm9qZWN0IGFzIGhhc2gKK3N1YiBnaXRfZ2V0X2hlYWRfaGFzaCB7CisJcmV0dXJuIGdpdF9nZXRfZnVsbF9oYXNoKHNoaWZ0LCAnSEVBRCcpOworfQorCitzdWIgZ2l0X2dldF9mdWxsX2hhc2ggeworCXJldHVybiBnaXRfZ2V0X2hhc2goQF8pOworfQorCitzdWIgZ2l0X2dldF9zaG9ydF9oYXNoIHsKKwlyZXR1cm4gZ2l0X2dldF9oYXNoKEBfLCAnLS1zaG9ydD03Jyk7Cit9CisKK3N1YiBnaXRfZ2V0X2hhc2ggeworCW15ICgkcHJvamVjdCwgJGhhc2gsIEBvcHRpb25zKSA9IEBfOworCW15ICRvX2dpdF9kaXIgPSAkZ2l0X2RpcjsKKwlteSAkcmV0dmFsID0gdW5kZWY7CisJJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwcm9qZWN0IjsKKwlpZiAob3BlbiBteSAkZmQsICctfCcsIGdpdF9jbWQoKSwgJ3Jldi1wYXJzZScsCisJICAgICctLXZlcmlmeScsICctcScsIEBvcHRpb25zLCAkaGFzaCkgeworCQkkcmV0dmFsID0gPCRmZD47CisJCWNob21wICRyZXR2YWwgaWYgZGVmaW5lZCAkcmV0dmFsOworCQljbG9zZSAkZmQ7CisJfQorCWlmIChkZWZpbmVkICRvX2dpdF9kaXIpIHsKKwkJJGdpdF9kaXIgPSAkb19naXRfZGlyOworCX0KKwlyZXR1cm4gJHJldHZhbDsKK30KKworIyBnZXQgdHlwZSBvZiBnaXZlbiBvYmplY3QKK3N1YiBnaXRfZ2V0X3R5cGUgeworCW15ICRoYXNoID0gc2hpZnQ7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAnLXQnLCAkaGFzaCBvciByZXR1cm47CisJbXkgJHR5cGUgPSA8JGZkPjsKKwljbG9zZSAkZmQgb3IgcmV0dXJuOworCWNob21wICR0eXBlOworCXJldHVybiAkdHlwZTsKK30KKworIyByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24KK291ciAkY29uZmlnX2ZpbGUgPSAnJzsKK291ciAlY29uZmlnOworCisjIHN0b3JlIG11bHRpcGxlIHZhbHVlcyBmb3Igc2luZ2xlIGtleSBhcyBhbm9ueW1vdXMgYXJyYXkgcmVmZXJlbmNlCisjIHNpbmdsZSB2YWx1ZXMgc3RvcmVkIGRpcmVjdGx5IGluIHRoZSBoYXNoLCBub3QgYXMgWyA8dmFsdWU+IF0KK3N1YiBoYXNoX3NldF9tdWx0aSB7CisJbXkgKCRoYXNoLCAka2V5LCAkdmFsdWUpID0gQF87CisKKwlpZiAoIWV4aXN0cyAkaGFzaC0+eyRrZXl9KSB7CisJCSRoYXNoLT57JGtleX0gPSAkdmFsdWU7CisJfSBlbHNpZiAoIXJlZiAkaGFzaC0+eyRrZXl9KSB7CisJCSRoYXNoLT57JGtleX0gPSBbICRoYXNoLT57JGtleX0sICR2YWx1ZSBdOworCX0gZWxzZSB7CisJCXB1c2ggQHskaGFzaC0+eyRrZXl9fSwgJHZhbHVlOworCX0KK30KKworIyByZXR1cm4gaGFzaCBvZiBnaXQgcHJvamVjdCBjb25maWd1cmF0aW9uCisjIG9wdGlvbmFsbHkgbGltaXRlZCB0byBzb21lIHNlY3Rpb24sIGUuZy4gJ2dpdHdlYicKK3N1YiBnaXRfcGFyc2VfcHJvamVjdF9jb25maWcgeworCW15ICRzZWN0aW9uX3JlZ2V4cCA9IHNoaWZ0OworCW15ICVjb25maWc7CisKKwlsb2NhbCAkLyA9ICJcMCI7CisKKwlvcGVuIG15ICRmaCwgIi18IiwgZ2l0X2NtZCgpLCAiY29uZmlnIiwgJy16JywgJy1sJywKKwkJb3IgcmV0dXJuOworCisJd2hpbGUgKG15ICRrZXl2YWwgPSA8JGZoPikgeworCQljaG9tcCAka2V5dmFsOworCQlteSAoJGtleSwgJHZhbHVlKSA9IHNwbGl0KC9cbi8sICRrZXl2YWwsIDIpOworCisJCWhhc2hfc2V0X211bHRpKFwlY29uZmlnLCAka2V5LCAkdmFsdWUpCisJCQlpZiAoIWRlZmluZWQgJHNlY3Rpb25fcmVnZXhwIHx8ICRrZXkgPX4gL14oPzokc2VjdGlvbl9yZWdleHApXC4vbyk7CisJfQorCWNsb3NlICRmaDsKKworCXJldHVybiAlY29uZmlnOworfQorCisjIGNvbnZlcnQgY29uZmlnIHZhbHVlIHRvIGJvb2xlYW46ICd0cnVlJyBvciAnZmFsc2UnCisjIG5vIHZhbHVlLCBudW1iZXIgPiAwLCAndHJ1ZScgYW5kICd5ZXMnIHZhbHVlcyBhcmUgdHJ1ZQorIyByZXN0IG9mIHZhbHVlcyBhcmUgdHJlYXRlZCBhcyBmYWxzZSAobmV2ZXIgYXMgZXJyb3IpCitzdWIgY29uZmlnX3RvX2Jvb2wgeworCW15ICR2YWwgPSBzaGlmdDsKKworCXJldHVybiAxIGlmICFkZWZpbmVkICR2YWw7ICAgICAgICAgICAgICMgc2VjdGlvbi5rZXkKKworCSMgc3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQorCSR2YWwgPX4gcy9eXHMrLy87CisJJHZhbCA9fiBzL1xzKyQvLzsKKworCXJldHVybiAoKCR2YWwgPX4gL15cZCskLyAmJiAkdmFsKSB8fCAgICMgc2VjdGlvbi5rZXkgPSAxCisJICAgICAgICAoJHZhbCA9fiAvXig/OnRydWV8eWVzKSQvaSkpOyAgIyBzZWN0aW9uLmtleSA9IHRydWUKK30KKworIyBjb252ZXJ0IGNvbmZpZyB2YWx1ZSB0byBzaW1wbGUgZGVjaW1hbCBudW1iZXIKKyMgYW4gb3B0aW9uYWwgdmFsdWUgc3VmZml4IG9mICdrJywgJ20nLCBvciAnZycgd2lsbCBjYXVzZSB0aGUgdmFsdWUKKyMgdG8gYmUgbXVsdGlwbGllZCBieSAxMDI0LCAxMDQ4NTc2LCBvciAxMDczNzQxODI0CitzdWIgY29uZmlnX3RvX2ludCB7CisJbXkgJHZhbCA9IHNoaWZ0OworCisJIyBzdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCisJJHZhbCA9fiBzL15ccysvLzsKKwkkdmFsID1+IHMvXHMrJC8vOworCisJaWYgKG15ICgkbnVtLCAkdW5pdCkgPSAoJHZhbCA9fiAvXihbMC05XSopKFtrbWddKSQvaSkpIHsKKwkJJHVuaXQgPSBsYygkdW5pdCk7CisJCSMgdW5rbm93biB1bml0IGlzIHRyZWF0ZWQgYXMgMQorCQlyZXR1cm4gJG51bSAqICgkdW5pdCBlcSAnZycgPyAxMDczNzQxODI0IDoKKwkJICAgICAgICAgICAgICAgJHVuaXQgZXEgJ20nID8gICAgMTA0ODU3NiA6CisJCSAgICAgICAgICAgICAgICR1bml0IGVxICdrJyA/ICAgICAgIDEwMjQgOiAxKTsKKwl9CisJcmV0dXJuICR2YWw7Cit9CisKKyMgY29udmVydCBjb25maWcgdmFsdWUgdG8gYXJyYXkgcmVmZXJlbmNlLCBpZiBuZWVkZWQKK3N1YiBjb25maWdfdG9fbXVsdGkgeworCW15ICR2YWwgPSBzaGlmdDsKKworCXJldHVybiByZWYoJHZhbCkgPyAkdmFsIDogKGRlZmluZWQoJHZhbCkgPyBbICR2YWwgXSA6IFtdKTsKK30KKworc3ViIGdpdF9nZXRfcHJvamVjdF9jb25maWcgeworCW15ICgka2V5LCAkdHlwZSkgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkZ2l0X2RpcjsKKworCSMga2V5IHNhbml0eSBjaGVjaworCXJldHVybiB1bmxlc3MgKCRrZXkpOworCSMgb25seSBzdWJzZWN0aW9uLCBpZiBleGlzdHMsIGlzIGNhc2Ugc2Vuc2l0aXZlLAorCSMgYW5kIG5vdCBsb3dlcmNhc2VkIGJ5ICdnaXQgY29uZmlnIC16IC1sJworCWlmIChteSAoJGhpLCAkbWksICRsbykgPSAoJGtleSA9fiAvXihbXi5dKilcLiguKilcLihbXi5dKikkLykpIHsKKwkJJGtleSA9IGpvaW4oIi4iLCBsYygkaGkpLCAkbWksIGxjKCRsbykpOworCX0gZWxzZSB7CisJCSRrZXkgPSBsYygka2V5KTsKKwl9CisJJGtleSA9fiBzL15naXR3ZWJcLi8vOworCXJldHVybiBpZiAoJGtleSA9fiBtL1xXLyk7CisKKwkjIHR5cGUgc2FuaXR5IGNoZWNrCisJaWYgKGRlZmluZWQgJHR5cGUpIHsKKwkJJHR5cGUgPX4gcy9eLS0vLzsKKwkJJHR5cGUgPSB1bmRlZgorCQkJdW5sZXNzICgkdHlwZSBlcSAnYm9vbCcgfHwgJHR5cGUgZXEgJ2ludCcpOworCX0KKworCSMgZ2V0IGNvbmZpZworCWlmICghZGVmaW5lZCAkY29uZmlnX2ZpbGUgfHwKKwkgICAgJGNvbmZpZ19maWxlIG5lICIkZ2l0X2Rpci9jb25maWciKSB7CisJCSVjb25maWcgPSBnaXRfcGFyc2VfcHJvamVjdF9jb25maWcoJ2dpdHdlYicpOworCQkkY29uZmlnX2ZpbGUgPSAiJGdpdF9kaXIvY29uZmlnIjsKKwl9CisKKwkjIGNoZWNrIGlmIGNvbmZpZyB2YXJpYWJsZSAoa2V5KSBleGlzdHMKKwlyZXR1cm4gdW5sZXNzIGV4aXN0cyAkY29uZmlneyJnaXR3ZWIuJGtleSJ9OworCisJIyBlbnN1cmUgZ2l2ZW4gdHlwZQorCWlmICghZGVmaW5lZCAkdHlwZSkgeworCQlyZXR1cm4gJGNvbmZpZ3siZ2l0d2ViLiRrZXkifTsKKwl9IGVsc2lmICgkdHlwZSBlcSAnYm9vbCcpIHsKKwkJIyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiAnZ2l0IGNvbmZpZyAtLWJvb2wnIHJldHVybnMgdHJ1ZS9mYWxzZQorCQlyZXR1cm4gY29uZmlnX3RvX2Jvb2woJGNvbmZpZ3siZ2l0d2ViLiRrZXkifSkgPyAndHJ1ZScgOiAnZmFsc2UnOworCX0gZWxzaWYgKCR0eXBlIGVxICdpbnQnKSB7CisJCXJldHVybiBjb25maWdfdG9faW50KCRjb25maWd7ImdpdHdlYi4ka2V5In0pOworCX0KKwlyZXR1cm4gJGNvbmZpZ3siZ2l0d2ViLiRrZXkifTsKK30KKworIyBnZXQgaGFzaCBvZiBnaXZlbiBwYXRoIGF0IGdpdmVuIHJlZgorc3ViIGdpdF9nZXRfaGFzaF9ieV9wYXRoIHsKKwlteSAkYmFzZSA9IHNoaWZ0OworCW15ICRwYXRoID0gc2hpZnQgfHwgcmV0dXJuIHVuZGVmOworCW15ICR0eXBlID0gc2hpZnQ7CisKKwkkcGF0aCA9fiBzLC8rJCwsOworCisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImxzLXRyZWUiLCAkYmFzZSwgIi0tIiwgJHBhdGgKKwkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWxzLXRyZWUgZmFpbGVkIik7CisJbXkgJGxpbmUgPSA8JGZkPjsKKwljbG9zZSAkZmQgb3IgcmV0dXJuIHVuZGVmOworCisJaWYgKCFkZWZpbmVkICRsaW5lKSB7CisJCSMgdGhlcmUgaXMgbm8gdHJlZSBvciBoYXNoIGdpdmVuIGJ5ICRwYXRoIGF0ICRiYXNlCisJCXJldHVybiB1bmRlZjsKKwl9CisKKwkjJzEwMDY0NCBibG9iIDBmYTNmM2E2NmZiNmExMzdmNmVjMmMxOTM1MWVkNGQ4MDcwNzBmZmEJcGFuaWMuYycKKwkkbGluZSA9fiBtL14oWzAtOV0rKSAoLispIChbMC05YS1mQS1GXXs0MH0pXHQvOworCWlmIChkZWZpbmVkICR0eXBlICYmICR0eXBlIG5lICQyKSB7CisJCSMgdHlwZSBkb2Vzbid0IG1hdGNoCisJCXJldHVybiB1bmRlZjsKKwl9CisJcmV0dXJuICQzOworfQorCisjIGdldCBwYXRoIG9mIGVudHJ5IHdpdGggZ2l2ZW4gaGFzaCBhdCBnaXZlbiB0cmVlLWlzaCAocmVmKQorIyB1c2VkIHRvIGdldCAnZnJvbScgZmlsZW5hbWUgZm9yIGNvbWJpbmVkIGRpZmYgKG1lcmdlIGNvbW1pdCkgZm9yIHJlbmFtZXMKK3N1YiBnaXRfZ2V0X3BhdGhfYnlfaGFzaCB7CisJbXkgJGJhc2UgPSBzaGlmdCB8fCByZXR1cm47CisJbXkgJGhhc2ggPSBzaGlmdCB8fCByZXR1cm47CisKKwlsb2NhbCAkLyA9ICJcMCI7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAibHMtdHJlZSIsICctcicsICctdCcsICcteicsICRiYXNlCisJCW9yIHJldHVybiB1bmRlZjsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQljaG9tcCAkbGluZTsKKworCQkjJzA0MDAwMCB0cmVlIDU5NTU5NmE2YTkxMTdkZGJhOWZlMzc5YjZiMDEyYjU1OGJhYzg0MjMJZ2l0d2ViJworCQkjJzEwMDY0NCBibG9iIGUwMmU5MGYwNDI5YmUwZDJhNjliNzY1NzExMDFmMjBiOGY3NTUzMGYJZ2l0d2ViL1JFQURNRScKKwkJaWYgKCRsaW5lID1+IG0vKD86WzAtOV0rKSAoPzouKykgJGhhc2hcdCguKykkLykgeworCQkJY2xvc2UgJGZkOworCQkJcmV0dXJuICQxOworCQl9CisJfQorCWNsb3NlICRmZDsKKwlyZXR1cm4gdW5kZWY7Cit9CisKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIGdpdCB1dGlsaXR5IGZ1bmN0aW9ucywgZGlyZWN0bHkgYWNjZXNzaW5nIGdpdCByZXBvc2l0b3J5CisKKyMgZ2V0IHRoZSB2YWx1ZSBvZiBjb25maWcgdmFyaWFibGUgZWl0aGVyIGZyb20gZmlsZSBuYW1lZCBhcyB0aGUgdmFyaWFibGUKKyMgaXRzZWxmIGluIHRoZSByZXBvc2l0b3J5ICgkR0lUX0RJUi8kbmFtZSBmaWxlKSwgb3IgZnJvbSBnaXR3ZWIuJG5hbWUKKyMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpbiB0aGUgcmVwb3NpdG9yeSBjb25maWcgZmlsZS4KK3N1YiBnaXRfZ2V0X2ZpbGVfb3JfcHJvamVjdF9jb25maWcgeworCW15ICgkcGF0aCwgJG5hbWUpID0gQF87CisKKwkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHBhdGgiOworCW9wZW4gbXkgJGZkLCAnPCcsICIkZ2l0X2Rpci8kbmFtZSIKKwkJb3IgcmV0dXJuIGdpdF9nZXRfcHJvamVjdF9jb25maWcoJG5hbWUpOworCW15ICRjb25mID0gPCRmZD47CisJY2xvc2UgJGZkOworCWlmIChkZWZpbmVkICRjb25mKSB7CisJCWNob21wICRjb25mOworCX0KKwlyZXR1cm4gJGNvbmY7Cit9CisKK3N1YiBnaXRfZ2V0X3Byb2plY3RfZGVzY3JpcHRpb24geworCW15ICRwYXRoID0gc2hpZnQ7CisJcmV0dXJuIGdpdF9nZXRfZmlsZV9vcl9wcm9qZWN0X2NvbmZpZygkcGF0aCwgJ2Rlc2NyaXB0aW9uJyk7Cit9CisKK3N1YiBnaXRfZ2V0X3Byb2plY3RfY2F0ZWdvcnkgeworCW15ICRwYXRoID0gc2hpZnQ7CisJcmV0dXJuIGdpdF9nZXRfZmlsZV9vcl9wcm9qZWN0X2NvbmZpZygkcGF0aCwgJ2NhdGVnb3J5Jyk7Cit9CisKKworIyBzdXBwb3J0ZWQgZm9ybWF0czoKKyMgKiAkR0lUX0RJUi9jdGFncy88dGFnbmFtZT4gZmlsZSAoaW4gJ2N0YWdzJyBzdWJkaXJlY3RvcnkpCisjICAgLSBpZiBpdHMgY29udGVudHMgaXMgYSBudW1iZXIsIHVzZSBpdCBhcyB0YWcgd2VpZ2h0LAorIyAgIC0gb3RoZXJ3aXNlIGFkZCBhIHRhZyB3aXRoIHdlaWdodCAxCisjICogJEdJVF9ESVIvY3RhZ3MgZmlsZSwgZWFjaCBsaW5lIGlzIGEgdGFnICh3aXRoIHdlaWdodCAxKQorIyAgIHRoZSBzYW1lIHZhbHVlIG11bHRpcGxlIHRpbWVzIGluY3JlYXNlcyB0YWcgd2VpZ2h0CisjICogYGdpdHdlYi5jdGFnJyBtdWx0aS12YWx1ZWQgcmVwbyBjb25maWcgdmFyaWFibGUKK3N1YiBnaXRfZ2V0X3Byb2plY3RfY3RhZ3MgeworCW15ICRwcm9qZWN0ID0gc2hpZnQ7CisJbXkgJGN0YWdzID0ge307CisKKwkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHByb2plY3QiOworCWlmIChvcGVuZGlyIG15ICRkaCwgIiRnaXRfZGlyL2N0YWdzIikgeworCQlteSBAZmlsZXMgPSBncmVwIHsgLWYgJF8gfSBtYXAgeyAiJGdpdF9kaXIvY3RhZ3MvJF8iIH0gcmVhZGRpcigkZGgpOworCQlmb3JlYWNoIG15ICR0YWdmaWxlIChAZmlsZXMpIHsKKwkJCW9wZW4gbXkgJGN0LCAnPCcsICR0YWdmaWxlCisJCQkJb3IgbmV4dDsKKwkJCW15ICR2YWwgPSA8JGN0PjsKKwkJCWNob21wICR2YWwgaWYgJHZhbDsKKwkJCWNsb3NlICRjdDsKKworCQkJKG15ICRjdGFnID0gJHRhZ2ZpbGUpID1+IHMjLiovIyM7CisJCQlpZiAoJHZhbCA9fiAvXlxkKyQvKSB7CisJCQkJJGN0YWdzLT57JGN0YWd9ID0gJHZhbDsKKwkJCX0gZWxzZSB7CisJCQkJJGN0YWdzLT57JGN0YWd9ID0gMTsKKwkJCX0KKwkJfQorCQljbG9zZWRpciAkZGg7CisKKwl9IGVsc2lmIChvcGVuIG15ICRmaCwgJzwnLCAiJGdpdF9kaXIvY3RhZ3MiKSB7CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCQljaG9tcCAkbGluZTsKKwkJCSRjdGFncy0+eyRsaW5lfSsrIGlmICRsaW5lOworCQl9CisJCWNsb3NlICRmaDsKKworCX0gZWxzZSB7CisJCW15ICR0YWdsaXN0ID0gY29uZmlnX3RvX211bHRpKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ2N0YWcnKSk7CisJCWZvcmVhY2ggbXkgJHRhZyAoQCR0YWdsaXN0KSB7CisJCQkkY3RhZ3MtPnskdGFnfSsrOworCQl9CisJfQorCisJcmV0dXJuICRjdGFnczsKK30KKworIyByZXR1cm4gaGFzaCwgd2hlcmUga2V5cyBhcmUgY29udGVudCB0YWdzICgnY3RhZ3MnKSwKKyMgYW5kIHZhbHVlcyBhcmUgc3VtIG9mIHdlaWdodHMgb2YgZ2l2ZW4gdGFnIGluIGV2ZXJ5IHByb2plY3QKK3N1YiBnaXRfZ2F0aGVyX2FsbF9jdGFncyB7CisJbXkgJHByb2plY3RzID0gc2hpZnQ7CisJbXkgJGN0YWdzID0ge307CisKKwlmb3JlYWNoIG15ICRwIChAJHByb2plY3RzKSB7CisJCWZvcmVhY2ggbXkgJGN0IChrZXlzICV7JHAtPnsnY3RhZ3MnfX0pIHsKKwkJCSRjdGFncy0+eyRjdH0gKz0gJHAtPnsnY3RhZ3MnfS0+eyRjdH07CisJCX0KKwl9CisKKwlyZXR1cm4gJGN0YWdzOworfQorCitzdWIgZ2l0X3BvcHVsYXRlX3Byb2plY3RfdGFnY2xvdWQgeworCW15ICRjdGFncyA9IHNoaWZ0OworCisJIyBGaXJzdCwgbWVyZ2UgZGlmZmVyZW50LWNhc2VkIHRhZ3M7IHRhZ3Mgdm90ZSBvbiBjYXNpbmcKKwlteSAlY3RhZ3NfbGM7CisJZm9yZWFjaCAoa2V5cyAlJGN0YWdzKSB7CisJCSRjdGFnc19sY3tsYyAkX30tPntjb3VudH0gKz0gJGN0YWdzLT57JF99OworCQlpZiAobm90ICRjdGFnc19sY3tsYyAkX30tPnt0b3Bjb3VudH0KKwkJICAgIG9yICRjdGFnc19sY3tsYyAkX30tPnt0b3Bjb3VudH0gPCAkY3RhZ3MtPnskX30pIHsKKwkJCSRjdGFnc19sY3tsYyAkX30tPnt0b3Bjb3VudH0gPSAkY3RhZ3MtPnskX307CisJCQkkY3RhZ3NfbGN7bGMgJF99LT57dG9wbmFtZX0gPSAkXzsKKwkJfQorCX0KKworCW15ICRjbG91ZDsKKwlteSAkbWF0Y2hlZCA9ICRpbnB1dF9wYXJhbXN7J2N0YWcnfTsKKwlpZiAoZXZhbCB7IHJlcXVpcmUgSFRNTDo6VGFnQ2xvdWQ7IDE7IH0pIHsKKwkJJGNsb3VkID0gSFRNTDo6VGFnQ2xvdWQtPm5ldzsKKwkJZm9yZWFjaCBteSAkY3RhZyAoc29ydCBrZXlzICVjdGFnc19sYykgeworCQkJIyBQYWQgdGhlIHRpdGxlIHdpdGggc3BhY2VzIHNvIHRoYXQgdGhlIGNsb3VkIGxvb2tzCisJCQkjIGxlc3MgY3JhbW1lZC4KKwkJCW15ICR0aXRsZSA9IGVzY19odG1sKCRjdGFnc19sY3skY3RhZ30tPnt0b3BuYW1lfSk7CisJCQkkdGl0bGUgPX4gcy8gLyZuYnNwOy9nOworCQkJJHRpdGxlID1+IHMvXi8mbmJzcDsvZzsKKwkJCSR0aXRsZSA9fiBzLyQvJm5ic3A7L2c7CisJCQlpZiAoZGVmaW5lZCAkbWF0Y2hlZCAmJiAkbWF0Y2hlZCBlcSAkY3RhZykgeworCQkJCSR0aXRsZSA9IHFxKDxzcGFuIGNsYXNzPSJtYXRjaCI+JHRpdGxlPC9zcGFuPik7CisJCQl9CisJCQkkY2xvdWQtPmFkZCgkdGl0bGUsIGhyZWYocHJvamVjdD0+dW5kZWYsIGN0YWc9PiRjdGFnKSwKKwkJCSAgICAgICAgICAgICRjdGFnc19sY3skY3RhZ30tPntjb3VudH0pOworCQl9CisJfSBlbHNlIHsKKwkJJGNsb3VkID0ge307CisJCWZvcmVhY2ggbXkgJGN0YWcgKGtleXMgJWN0YWdzX2xjKSB7CisJCQlteSAkdGl0bGUgPSBlc2NfaHRtbCgkY3RhZ3NfbGN7JGN0YWd9LT57dG9wbmFtZX0sIC1uYnNwPT4xKTsKKwkJCWlmIChkZWZpbmVkICRtYXRjaGVkICYmICRtYXRjaGVkIGVxICRjdGFnKSB7CisJCQkJJHRpdGxlID0gcXEoPHNwYW4gY2xhc3M9Im1hdGNoIj4kdGl0bGU8L3NwYW4+KTsKKwkJCX0KKwkJCSRjbG91ZC0+eyRjdGFnfXtjb3VudH0gPSAkY3RhZ3NfbGN7JGN0YWd9LT57Y291bnR9OworCQkJJGNsb3VkLT57JGN0YWd9e2N0YWd9ID0KKwkJCQkkY2dpLT5hKHstaHJlZj0+aHJlZihwcm9qZWN0PT51bmRlZiwgY3RhZz0+JGN0YWcpfSwgJHRpdGxlKTsKKwkJfQorCX0KKwlyZXR1cm4gJGNsb3VkOworfQorCitzdWIgZ2l0X3Nob3dfcHJvamVjdF90YWdjbG91ZCB7CisJbXkgKCRjbG91ZCwgJGNvdW50KSA9IEBfOworCWlmIChyZWYgJGNsb3VkIGVxICdIVE1MOjpUYWdDbG91ZCcpIHsKKwkJcmV0dXJuICRjbG91ZC0+aHRtbF9hbmRfY3NzKCRjb3VudCk7CisJfSBlbHNlIHsKKwkJbXkgQHRhZ3MgPSBzb3J0IHsgJGNsb3VkLT57JGF9LT57J2NvdW50J30gPD0+ICRjbG91ZC0+eyRifS0+eydjb3VudCd9IH0ga2V5cyAlJGNsb3VkOworCQlyZXR1cm4KKwkJCSc8ZGl2IGlkPSJodG1sdGFnY2xvdWQiJy4oJHByb2plY3QgPyAnJyA6ICcgYWxpZ249ImNlbnRlciInKS4nPicgLgorCQkJam9pbiAoJywgJywgbWFwIHsKKwkJCQkkY2xvdWQtPnskX30tPnsnY3RhZyd9CisJCQl9IHNwbGljZShAdGFncywgMCwgJGNvdW50KSkgLgorCQkJJzwvZGl2Pic7CisJfQorfQorCitzdWIgZ2l0X2dldF9wcm9qZWN0X3VybF9saXN0IHsKKwlteSAkcGF0aCA9IHNoaWZ0OworCisJJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwYXRoIjsKKwlvcGVuIG15ICRmZCwgJzwnLCAiJGdpdF9kaXIvY2xvbmV1cmwiCisJCW9yIHJldHVybiB3YW50YXJyYXkgPworCQlAeyBjb25maWdfdG9fbXVsdGkoZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygndXJsJykpIH0gOgorCQkgICBjb25maWdfdG9fbXVsdGkoZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygndXJsJykpOworCW15IEBnaXRfcHJvamVjdF91cmxfbGlzdCA9IG1hcCB7IGNob21wOyAkXyB9IDwkZmQ+OworCWNsb3NlICRmZDsKKworCXJldHVybiB3YW50YXJyYXkgPyBAZ2l0X3Byb2plY3RfdXJsX2xpc3QgOiBcQGdpdF9wcm9qZWN0X3VybF9saXN0OworfQorCitzdWIgZ2l0X2dldF9wcm9qZWN0c19saXN0IHsKKwlteSAkZmlsdGVyID0gc2hpZnQgfHwgJyc7CisJbXkgJHBhcmFub2lkID0gc2hpZnQ7CisJbXkgQGxpc3Q7CisKKwlpZiAoLWQgJHByb2plY3RzX2xpc3QpIHsKKwkJIyBzZWFyY2ggaW4gZGlyZWN0b3J5CisJCW15ICRkaXIgPSAkcHJvamVjdHNfbGlzdDsKKwkJIyByZW1vdmUgdGhlIHRyYWlsaW5nICIvIgorCQkkZGlyID1+IHMhLyskISE7CisJCW15ICRwZnhsZW4gPSBsZW5ndGgoIiRkaXIiKTsKKwkJbXkgJHBmeGRlcHRoID0gKCRkaXIgPX4gdHIhLyEhKTsKKwkJIyB3aGVuIGZpbHRlcmluZywgc2VhcmNoIG9ubHkgZ2l2ZW4gc3ViZGlyZWN0b3J5CisJCWlmICgkZmlsdGVyICYmICEkcGFyYW5vaWQpIHsKKwkJCSRkaXIgLj0gIi8kZmlsdGVyIjsKKwkJCSRkaXIgPX4gcyEvKyQhITsKKwkJfQorCisJCUZpbGU6OkZpbmQ6OmZpbmQoeworCQkJZm9sbG93X2Zhc3QgPT4gMSwgIyBmb2xsb3cgc3ltYm9saWMgbGlua3MKKwkJCWZvbGxvd19za2lwID0+IDIsICMgaWdub3JlIGR1cGxpY2F0ZXMKKwkJCWRhbmdsaW5nX3N5bWxpbmtzID0+IDAsICMgaWdub3JlIGRhbmdsaW5nIHN5bWxpbmtzLCBzaWxlbnRseQorCQkJd2FudGVkID0+IHN1YiB7CisJCQkJIyBnbG9iYWwgdmFyaWFibGVzCisJCQkJb3VyICRwcm9qZWN0X21heGRlcHRoOworCQkJCW91ciAkcHJvamVjdHJvb3Q7CisJCQkJIyBza2lwIHByb2plY3QtbGlzdCB0b3BsZXZlbCwgaWYgd2UgZ2V0IGl0LgorCQkJCXJldHVybiBpZiAobSFeWy8uXSQhKTsKKwkJCQkjIG9ubHkgZGlyZWN0b3JpZXMgY2FuIGJlIGdpdCByZXBvc2l0b3JpZXMKKwkJCQlyZXR1cm4gdW5sZXNzICgtZCAkXyk7CisJCQkJIyBkb24ndCB0cmF2ZXJzZSB0b28gZGVlcCAoRmluZCBpcyBzdXBlciBzbG93IG9uIG9zIHgpCisJCQkJIyAkcHJvamVjdF9tYXhkZXB0aCBleGNsdWRlcyBkZXB0aCBvZiAkcHJvamVjdHJvb3QKKwkJCQlpZiAoKCRGaWxlOjpGaW5kOjpuYW1lID1+IHRyIS8hISkgLSAkcGZ4ZGVwdGggPiAkcHJvamVjdF9tYXhkZXB0aCkgeworCQkJCQkkRmlsZTo6RmluZDo6cHJ1bmUgPSAxOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJbXkgJHBhdGggPSBzdWJzdHIoJEZpbGU6OkZpbmQ6Om5hbWUsICRwZnhsZW4gKyAxKTsKKwkJCQkjIHBhcmFub2lkbHkgb25seSBmaWx0ZXIgaGVyZQorCQkJCWlmICgkcGFyYW5vaWQgJiYgJGZpbHRlciAmJiAkcGF0aCAhfiBtIV5cUSRmaWx0ZXJcRS8hKSB7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCSMgd2UgY2hlY2sgcmVsYXRlZCBmaWxlIGluICRwcm9qZWN0cm9vdAorCQkJCWlmIChjaGVja19leHBvcnRfb2soIiRwcm9qZWN0cm9vdC8kcGF0aCIpKSB7CisJCQkJCXB1c2ggQGxpc3QsIHsgcGF0aCA9PiAkcGF0aCB9OworCQkJCQkkRmlsZTo6RmluZDo6cHJ1bmUgPSAxOworCQkJCX0KKwkJCX0sCisJCX0sICIkZGlyIik7CisKKwl9IGVsc2lmICgtZiAkcHJvamVjdHNfbGlzdCkgeworCQkjIHJlYWQgZnJvbSBmaWxlKHVybC1lbmNvZGVkKToKKwkJIyAnZ2l0JTJGZ2l0LmdpdCBMaW51cytUb3J2YWxkcycKKwkJIyAnbGlicyUyRmtsaWJjJTJGa2xpYmMuZ2l0IEguK1BldGVyK0FudmluJworCQkjICdsaW51eCUyRmhvdHBsdWclMkZ1ZGV2LmdpdCBHcmVnK0tyb2FoLUhhcnRtYW4nCisJCW9wZW4gbXkgJGZkLCAnPCcsICRwcm9qZWN0c19saXN0IG9yIHJldHVybjsKKwlQUk9KRUNUOgorCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJGxpbmU7CisJCQlteSAoJHBhdGgsICRvd25lcikgPSBzcGxpdCAnICcsICRsaW5lOworCQkJJHBhdGggPSB1bmVzY2FwZSgkcGF0aCk7CisJCQkkb3duZXIgPSB1bmVzY2FwZSgkb3duZXIpOworCQkJaWYgKCFkZWZpbmVkICRwYXRoKSB7CisJCQkJbmV4dDsKKwkJCX0KKwkJCSMgaWYgJGZpbHRlciBpcyBycG92aWRlZCwgY2hlY2sgaWYgJHBhdGggYmVnaW5zIHdpdGggJGZpbHRlcgorCQkJaWYgKCRmaWx0ZXIgJiYgJHBhdGggIX4gbSFeXFEkZmlsdGVyXEUvISkgeworCQkJCW5leHQ7CisJCQl9CisJCQlpZiAoY2hlY2tfZXhwb3J0X29rKCIkcHJvamVjdHJvb3QvJHBhdGgiKSkgeworCQkJCW15ICRwciA9IHsKKwkJCQkJcGF0aCA9PiAkcGF0aAorCQkJCX07CisJCQkJaWYgKCRvd25lcikgeworCQkJCQkkcHItPnsnb3duZXInfSA9IHRvX3V0ZjgoJG93bmVyKTsKKwkJCQl9CisJCQkJcHVzaCBAbGlzdCwgJHByOworCQkJfQorCQl9CisJCWNsb3NlICRmZDsKKwl9CisJcmV0dXJuIEBsaXN0OworfQorCisjIHdyaXR0ZW4gd2l0aCBoZWxwIG9mIFRyZWU6OlRyaWUgbW9kdWxlIChQZXJsIEFydGlzdGljIExpY2Vuc2UsIEdQTCBjb21wYXRpYmlsZSkKKyMgYXMgc2lkZSBlZmZlY3RzIGl0IHNldHMgJ2ZvcmtzJyBmaWVsZCB0byBsaXN0IG9mIGZvcmtzIGZvciBmb3JrZWQgcHJvamVjdHMKK3N1YiBmaWx0ZXJfZm9ya3NfZnJvbV9wcm9qZWN0c19saXN0IHsKKwlteSAkcHJvamVjdHMgPSBzaGlmdDsKKworCW15ICV0cmllOyAjIHByZWZpeCB0cmVlIG9mIGRpcmVjdG9yaWVzIChwYXRoIGNvbXBvbmVudHMpCisJIyBnZW5lcmF0ZSB0cmllIG91dCBvZiB0aG9zZSBkaXJlY3RvcmllcyB0aGF0IG1pZ2h0IGNvbnRhaW4gZm9ya3MKKwlmb3JlYWNoIG15ICRwciAoQCRwcm9qZWN0cykgeworCQlteSAkcGF0aCA9ICRwci0+eydwYXRoJ307CisJCSRwYXRoID1+IHMvXC5naXQkLy87ICAgICAgIyBmb3JrcyBvZiAncmVwby5naXQnIGFyZSBpbiAncmVwby8nIGRpcmVjdG9yeQorCQluZXh0IGlmICgkcGF0aCA9fiBtIS8kISk7ICMgc2tpcCBub24tYmFyZSByZXBvc2l0b3JpZXMsIGUuZy4gJ3JlcG8vLmdpdCcKKwkJbmV4dCB1bmxlc3MgKCRwYXRoKTsgICAgICAjIHNraXAgJy5naXQnIHJlcG9zaXRvcnk6IHRlc3RzLCBnaXQtaW5zdGF3ZWIKKwkJbmV4dCB1bmxlc3MgKC1kICIkcHJvamVjdHJvb3QvJHBhdGgiKTsgIyBjb250YWluaW5nIGRpcmVjdG9yeSBleGlzdHMKKwkJJHByLT57J2ZvcmtzJ30gPSBbXTsgICAgICAjIHRoZXJlIGNhbiBiZSAwIG9yIG1vcmUgZm9ya3Mgb2YgcHJvamVjdAorCisJCSMgYWRkIHRvIHRyaWUKKwkJbXkgQGRpcnMgPSBzcGxpdCgnLycsICRwYXRoKTsKKwkJIyB3YWxrIHRoZSB0cmllLCB1bnRpbCBlaXRoZXIgcnVucyBvdXQgb2YgY29tcG9uZW50cyBvciBvdXQgb2YgdHJpZQorCQlteSAkcmVmID0gXCV0cmllOworCQl3aGlsZSAoc2NhbGFyIEBkaXJzICYmCisJCSAgICAgICBleGlzdHMoJHJlZi0+eyRkaXJzWzBdfSkpIHsKKwkJCSRyZWYgPSAkcmVmLT57c2hpZnQgQGRpcnN9OworCQl9CisJCSMgY3JlYXRlIHJlc3Qgb2YgdHJpZSBzdHJ1Y3R1cmUgZnJvbSByZXN0IG9mIGNvbXBvbmVudHMKKwkJZm9yZWFjaCBteSAkZGlyIChAZGlycykgeworCQkJJHJlZiA9ICRyZWYtPnskZGlyfSA9IHt9OworCQl9CisJCSMgY3JlYXRlIGVuZCBtYXJrZXIsIHN0b3JlICRwciBhcyBhIGRhdGEKKwkJJHJlZi0+eycnfSA9ICRwciBpZiAoIWV4aXN0cyAkcmVmLT57Jyd9KTsKKwl9CisKKwkjIGZpbHRlciBvdXQgZm9ya3MsIGJ5IGZpbmRpbmcgc2hvcnRlc3QgcHJlZml4IG1hdGNoIGZvciBwYXRocworCW15IEBmaWx0ZXJlZDsKKyBQUk9KRUNUOgorCWZvcmVhY2ggbXkgJHByIChAJHByb2plY3RzKSB7CisJCSMgdHJpZSBsb29rdXAKKwkJbXkgJHJlZiA9IFwldHJpZTsKKwlESVI6CisJCWZvcmVhY2ggbXkgJGRpciAoc3BsaXQoJy8nLCAkcHItPnsncGF0aCd9KSkgeworCQkJaWYgKGV4aXN0cyAkcmVmLT57Jyd9KSB7CisJCQkJIyBmb3VuZCBbc2hvcnRlc3RdIHByZWZpeCwgaXMgYSBmb3JrIC0gc2tpcCBpdAorCQkJCXB1c2ggQHskcmVmLT57Jyd9eydmb3Jrcyd9fSwgJHByOworCQkJCW5leHQgUFJPSkVDVDsKKwkJCX0KKwkJCWlmICghZXhpc3RzICRyZWYtPnskZGlyfSkgeworCQkJCSMgbm90IGluIHRyaWUsIGNhbm5vdCBoYXZlIHByZWZpeCwgbm90IGEgZm9yaworCQkJCXB1c2ggQGZpbHRlcmVkLCAkcHI7CisJCQkJbmV4dCBQUk9KRUNUOworCQkJfQorCQkJIyBJZiB0aGUgZGlyIGlzIHRoZXJlLCB3ZSBqdXN0IHdhbGsgb25lIHN0ZXAgZG93biB0aGUgdHJpZS4KKwkJCSRyZWYgPSAkcmVmLT57JGRpcn07CisJCX0KKwkJIyB3ZSByYW4gb3V0IG9mIHRyaWUKKwkJIyAoc2hvdWxkbid0IGhhcHBlbjogaXQncyBlaXRoZXIgbm8gbWF0Y2gsIG9yIGVuZCBtYXJrZXIpCisJCXB1c2ggQGZpbHRlcmVkLCAkcHI7CisJfQorCisJcmV0dXJuIEBmaWx0ZXJlZDsKK30KKworIyBub3RlOiBmaWxsX3Byb2plY3RfbGlzdF9pbmZvIG11c3QgYmUgcnVuIGZpcnN0LAorIyBmb3IgJ2Rlc2NyX2xvbmcnIGFuZCAnY3RhZ3MnIHRvIGJlIGZpbGxlZAorc3ViIHNlYXJjaF9wcm9qZWN0c19saXN0IHsKKwlteSAoJHByb2psaXN0LCAlb3B0cykgPSBAXzsKKwlteSAkdGFnZmlsdGVyICA9ICRvcHRzeyd0YWdmaWx0ZXInfTsKKwlteSAkc2VhcmNoX3JlID0gJG9wdHN7J3NlYXJjaF9yZWdleHAnfTsKKworCXJldHVybiBAJHByb2psaXN0CisJCXVubGVzcyAoJHRhZ2ZpbHRlciB8fCAkc2VhcmNoX3JlKTsKKworCSMgc2VhcmNoaW5nIHByb2plY3RzIHJlcXVpcmUgZmlsbGluZyB0byBiZSBydW4gYmVmb3JlIGl0OworCWZpbGxfcHJvamVjdF9saXN0X2luZm8oJHByb2psaXN0LAorCSAgICAgICAgICAgICAgICAgICAgICAgJHRhZ2ZpbHRlciAgPyAnY3RhZ3MnIDogKCksCisJICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoX3JlID8gKCdwYXRoJywgJ2Rlc2NyJykgOiAoKSk7CisJbXkgQHByb2plY3RzOworIFBST0pFQ1Q6CisJZm9yZWFjaCBteSAkcHIgKEAkcHJvamxpc3QpIHsKKworCQlpZiAoJHRhZ2ZpbHRlcikgeworCQkJbmV4dCB1bmxlc3MgcmVmKCRwci0+eydjdGFncyd9KSBlcSAnSEFTSCc7CisJCQluZXh0IHVubGVzcworCQkJCWdyZXAgeyBsYygkXykgZXEgbGMoJHRhZ2ZpbHRlcikgfSBrZXlzICV7JHByLT57J2N0YWdzJ319OworCQl9CisKKwkJaWYgKCRzZWFyY2hfcmUpIHsKKwkJCW5leHQgdW5sZXNzCisJCQkJJHByLT57J3BhdGgnfSA9fiAvJHNlYXJjaF9yZS8gfHwKKwkJCQkkcHItPnsnZGVzY3JfbG9uZyd9ID1+IC8kc2VhcmNoX3JlLzsKKwkJfQorCisJCXB1c2ggQHByb2plY3RzLCAkcHI7CisJfQorCisJcmV0dXJuIEBwcm9qZWN0czsKK30KKworb3VyICRnaXR3ZWJfcHJvamVjdF9vd25lciA9IHVuZGVmOworc3ViIGdpdF9nZXRfcHJvamVjdF9saXN0X2Zyb21fZmlsZSB7CisKKwlyZXR1cm4gaWYgKGRlZmluZWQgJGdpdHdlYl9wcm9qZWN0X293bmVyKTsKKworCSRnaXR3ZWJfcHJvamVjdF9vd25lciA9IHt9OworCSMgcmVhZCBmcm9tIGZpbGUgKHVybC1lbmNvZGVkKToKKwkjICdnaXQlMkZnaXQuZ2l0IExpbnVzK1RvcnZhbGRzJworCSMgJ2xpYnMlMkZrbGliYyUyRmtsaWJjLmdpdCBILitQZXRlcitBbnZpbicKKwkjICdsaW51eCUyRmhvdHBsdWclMkZ1ZGV2LmdpdCBHcmVnK0tyb2FoLUhhcnRtYW4nCisJaWYgKC1mICRwcm9qZWN0c19saXN0KSB7CisJCW9wZW4obXkgJGZkLCAnPCcsICRwcm9qZWN0c19saXN0KTsKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJbXkgKCRwciwgJG93KSA9IHNwbGl0ICcgJywgJGxpbmU7CisJCQkkcHIgPSB1bmVzY2FwZSgkcHIpOworCQkJJG93ID0gdW5lc2NhcGUoJG93KTsKKwkJCSRnaXR3ZWJfcHJvamVjdF9vd25lci0+eyRwcn0gPSB0b191dGY4KCRvdyk7CisJCX0KKwkJY2xvc2UgJGZkOworCX0KK30KKworc3ViIGdpdF9nZXRfcHJvamVjdF9vd25lciB7CisJbXkgJHByb2plY3QgPSBzaGlmdDsKKwlteSAkb3duZXI7CisKKwlyZXR1cm4gdW5kZWYgdW5sZXNzICRwcm9qZWN0OworCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcHJvamVjdCI7CisKKwlpZiAoIWRlZmluZWQgJGdpdHdlYl9wcm9qZWN0X293bmVyKSB7CisJCWdpdF9nZXRfcHJvamVjdF9saXN0X2Zyb21fZmlsZSgpOworCX0KKworCWlmIChleGlzdHMgJGdpdHdlYl9wcm9qZWN0X293bmVyLT57JHByb2plY3R9KSB7CisJCSRvd25lciA9ICRnaXR3ZWJfcHJvamVjdF9vd25lci0+eyRwcm9qZWN0fTsKKwl9CisJaWYgKCFkZWZpbmVkICRvd25lcil7CisJCSRvd25lciA9IGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ293bmVyJyk7CisJfQorCWlmICghZGVmaW5lZCAkb3duZXIpIHsKKwkJJG93bmVyID0gZ2V0X2ZpbGVfb3duZXIoIiRnaXRfZGlyIik7CisJfQorCisJcmV0dXJuICRvd25lcjsKK30KKworc3ViIGdpdF9nZXRfbGFzdF9hY3Rpdml0eSB7CisJbXkgKCRwYXRoKSA9IEBfOworCW15ICRmZDsKKworCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcGF0aCI7CisJb3BlbigkZmQsICItfCIsIGdpdF9jbWQoKSwgJ2Zvci1lYWNoLXJlZicsCisJICAgICAnLS1mb3JtYXQ9JShjb21taXR0ZXIpJywKKwkgICAgICctLXNvcnQ9LWNvbW1pdHRlcmRhdGUnLAorCSAgICAgJy0tY291bnQ9MScsCisJICAgICAncmVmcy9oZWFkcycpIG9yIHJldHVybjsKKwlteSAkbW9zdF9yZWNlbnQgPSA8JGZkPjsKKwljbG9zZSAkZmQgb3IgcmV0dXJuOworCWlmIChkZWZpbmVkICRtb3N0X3JlY2VudCAmJgorCSAgICAkbW9zdF9yZWNlbnQgPX4gLyAoXGQrKSBbLStdWzAxXVxkXGRcZCQvKSB7CisJCW15ICR0aW1lc3RhbXAgPSAkMTsKKwkJbXkgJGFnZSA9IHRpbWUgLSAkdGltZXN0YW1wOworCQlyZXR1cm4gKCRhZ2UsIGFnZV9zdHJpbmcoJGFnZSkpOworCX0KKwlyZXR1cm4gKHVuZGVmLCB1bmRlZik7Cit9CisKKyMgSW1wbGVtZW50YXRpb24gbm90ZTogd2hlbiBhIHNpbmdsZSByZW1vdGUgaXMgd2FudGVkLCB3ZSBjYW5ub3QgdXNlICdnaXQKKyMgcmVtb3RlIHNob3cgLW4nIGJlY2F1c2UgdGhhdCBjb21tYW5kIGFsd2F5cyB3b3JrIChhc3N1bWluZyBpdCdzIGEgcmVtb3RlIFVSTAorIyBpZiBpdCdzIG5vdCBkZWZpbmVkKSwgYW5kIHdlIGNhbm5vdCB1c2UgJ2dpdCByZW1vdGUgc2hvdycgYmVjYXVzZSB0aGF0IHdvdWxkCisjIHRyeSB0byBtYWtlIGEgbmV0d29yayByb3VuZHRyaXAuIFNvIHRoZSBvbmx5IHdheSB0byBmaW5kIGlmIHRoYXQgcGFydGljdWxhcgorIyByZW1vdGUgaXMgZGVmaW5lZCBpcyB0byB3YWxrIHRoZSBsaXN0IHByb3ZpZGVkIGJ5ICdnaXQgcmVtb3RlIC12JyBhbmQgc3RvcCBpZgorIyBhbmQgd2hlbiB3ZSBmaW5kIHdoYXQgd2Ugd2FudC4KK3N1YiBnaXRfZ2V0X3JlbW90ZXNfbGlzdCB7CisJbXkgJHdhbnRlZCA9IHNoaWZ0OworCW15ICVyZW1vdGVzID0gKCk7CisKKwlvcGVuIG15ICRmZCwgJy18JyAsIGdpdF9jbWQoKSwgJ3JlbW90ZScsICctdic7CisJcmV0dXJuIHVubGVzcyAkZmQ7CisJd2hpbGUgKG15ICRyZW1vdGUgPSA8JGZkPikgeworCQljaG9tcCAkcmVtb3RlOworCQkkcmVtb3RlID1+IHMhXHQoLio/KVxzK1woKFx3KylcKSQhITsKKwkJbmV4dCBpZiAkd2FudGVkIGFuZCBub3QgJHJlbW90ZSBlcSAkd2FudGVkOworCQlteSAoJHVybCwgJGtleSkgPSAoJDEsICQyKTsKKworCQkkcmVtb3Rlc3skcmVtb3RlfSB8fD0geyAnaGVhZHMnID0+ICgpIH07CisJCSRyZW1vdGVzeyRyZW1vdGV9eyRrZXl9ID0gJHVybDsKKwl9CisJY2xvc2UgJGZkIG9yIHJldHVybjsKKwlyZXR1cm4gd2FudGFycmF5ID8gJXJlbW90ZXMgOiBcJXJlbW90ZXM7Cit9CisKKyMgVGFrZXMgYSBoYXNoIG9mIHJlbW90ZXMgYXMgZmlyc3QgcGFyYW1ldGVyIGFuZCBmaWxscyBpdCBieSBhZGRpbmcgdGhlCisjIGF2YWlsYWJsZSByZW1vdGUgaGVhZHMgZm9yIGVhY2ggb2YgdGhlIGluZGljYXRlZCByZW1vdGVzLgorc3ViIGZpbGxfcmVtb3RlX2hlYWRzIHsKKwlteSAkcmVtb3RlcyA9IHNoaWZ0OworCW15IEBoZWFkcyA9IG1hcCB7ICJyZW1vdGVzLyRfIiB9IGtleXMgJSRyZW1vdGVzOworCW15IEByZW1vdGVoZWFkcyA9IGdpdF9nZXRfaGVhZHNfbGlzdCh1bmRlZiwgQGhlYWRzKTsKKwlmb3JlYWNoIG15ICRyZW1vdGUgKGtleXMgJSRyZW1vdGVzKSB7CisJCSRyZW1vdGVzLT57JHJlbW90ZX17J2hlYWRzJ30gPSBbIGdyZXAgeworCQkJJF8tPnsnbmFtZSd9ID1+IHMhXiRyZW1vdGUvISEKKwkJCX0gQHJlbW90ZWhlYWRzIF07CisJfQorfQorCitzdWIgZ2l0X2dldF9yZWZlcmVuY2VzIHsKKwlteSAkdHlwZSA9IHNoaWZ0IHx8ICIiOworCW15ICVyZWZzOworCSMgNWRjMDFjNTk1ZTZjNmVjOWNjZGE0ZjZmNjljMTMxYzBkZDk0NWY4YyByZWZzL3RhZ3MvdjIuNi4xMQorCSMgYzM5YWUwN2YzOTM4MDZjY2Y0MDZlZjk2NmU5YTE1YWZjNDNjYzM2YSByZWZzL3RhZ3MvdjIuNi4xMV57fQorCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJzaG93LXJlZiIsICItLWRlcmVmZXJlbmNlIiwKKwkJKCR0eXBlID8gKCItLSIsICJyZWZzLyR0eXBlIikgOiAoKSkgIyB1c2UgLS0gPHBhdHRlcm4+IGlmICR0eXBlCisJCW9yIHJldHVybjsKKworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCWNob21wICRsaW5lOworCQlpZiAoJGxpbmUgPX4gbSFeKFswLTlhLWZBLUZdezQwfSlcc3JlZnMvKCR0eXBlLiopJCEpIHsKKwkJCWlmIChkZWZpbmVkICRyZWZzeyQxfSkgeworCQkJCXB1c2ggQHskcmVmc3skMX19LCAkMjsKKwkJCX0gZWxzZSB7CisJCQkJJHJlZnN7JDF9ID0gWyAkMiBdOworCQkJfQorCQl9CisJfQorCWNsb3NlICRmZCBvciByZXR1cm47CisJcmV0dXJuIFwlcmVmczsKK30KKworc3ViIGdpdF9nZXRfcmV2X25hbWVfdGFncyB7CisJbXkgJGhhc2ggPSBzaGlmdCB8fCByZXR1cm4gdW5kZWY7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAibmFtZS1yZXYiLCAiLS10YWdzIiwgJGhhc2gKKwkJb3IgcmV0dXJuOworCW15ICRuYW1lX3JldiA9IDwkZmQ+OworCWNsb3NlICRmZDsKKworCWlmICgkbmFtZV9yZXYgPX4gbXxeJGhhc2ggdGFncy8oLiopJHwpIHsKKwkJcmV0dXJuICQxOworCX0gZWxzZSB7CisJCSMgY2F0Y2hlcyBhbHNvICckaGFzaCB1bmRlZmluZWQnIG91dHB1dAorCQlyZXR1cm4gdW5kZWY7CisJfQorfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBwYXJzZSB0byBoYXNoIGZ1bmN0aW9ucworCitzdWIgcGFyc2VfZGF0ZSB7CisJbXkgJGVwb2NoID0gc2hpZnQ7CisJbXkgJHR6ID0gc2hpZnQgfHwgIi0wMDAwIjsKKworCW15ICVkYXRlOworCW15IEBtb250aHMgPSAoIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIik7CisJbXkgQGRheXMgPSAoIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIpOworCW15ICgkc2VjLCAkbWluLCAkaG91ciwgJG1kYXksICRtb24sICR5ZWFyLCAkd2RheSwgJHlkYXkpID0gZ210aW1lKCRlcG9jaCk7CisJJGRhdGV7J2hvdXInfSA9ICRob3VyOworCSRkYXRleydtaW51dGUnfSA9ICRtaW47CisJJGRhdGV7J21kYXknfSA9ICRtZGF5OworCSRkYXRleydkYXknfSA9ICRkYXlzWyR3ZGF5XTsKKwkkZGF0ZXsnbW9udGgnfSA9ICRtb250aHNbJG1vbl07CisJJGRhdGV7J3JmYzI4MjInfSAgID0gc3ByaW50ZiAiJXMsICVkICVzICU0ZCAlMDJkOiUwMmQ6JTAyZCArMDAwMCIsCisJICAgICAgICAgICAgICAgICAgICAgJGRheXNbJHdkYXldLCAkbWRheSwgJG1vbnRoc1skbW9uXSwgMTkwMCskeWVhciwgJGhvdXIgLCRtaW4sICRzZWM7CisJJGRhdGV7J21kYXktdGltZSd9ID0gc3ByaW50ZiAiJWQgJXMgJTAyZDolMDJkIiwKKwkgICAgICAgICAgICAgICAgICAgICAkbWRheSwgJG1vbnRoc1skbW9uXSwgJGhvdXIgLCRtaW47CisJJGRhdGV7J2lzby04NjAxJ30gID0gc3ByaW50ZiAiJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmRaIiwKKwkgICAgICAgICAgICAgICAgICAgICAxOTAwKyR5ZWFyLCAxKyRtb24sICRtZGF5LCAkaG91ciAsJG1pbiwgJHNlYzsKKworCW15ICgkdHpfc2lnbiwgJHR6X2hvdXIsICR0el9taW4pID0KKwkJKCR0eiA9fiBtL14oWy0rXSkoXGRcZCkoXGRcZCkkLyk7CisJJHR6X3NpZ24gPSAoJHR6X3NpZ24gZXEgJy0nID8gLTEgOiArMSk7CisJbXkgJGxvY2FsID0gJGVwb2NoICsgJHR6X3NpZ24qKCgoJHR6X2hvdXIqNjApICsgJHR6X21pbikqNjApOworCSgkc2VjLCAkbWluLCAkaG91ciwgJG1kYXksICRtb24sICR5ZWFyLCAkd2RheSwgJHlkYXkpID0gZ210aW1lKCRsb2NhbCk7CisJJGRhdGV7J2hvdXJfbG9jYWwnfSA9ICRob3VyOworCSRkYXRleydtaW51dGVfbG9jYWwnfSA9ICRtaW47CisJJGRhdGV7J3R6X2xvY2FsJ30gPSAkdHo7CisJJGRhdGV7J2lzby10eid9ID0gc3ByaW50ZigiJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQgJXMiLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgMTkwMCskeWVhciwgJG1vbisxLCAkbWRheSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICRob3VyLCAkbWluLCAkc2VjLCAkdHopOworCXJldHVybiAlZGF0ZTsKK30KKworc3ViIHBhcnNlX3RhZyB7CisJbXkgJHRhZ19pZCA9IHNoaWZ0OworCW15ICV0YWc7CisJbXkgQGNvbW1lbnQ7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAidGFnIiwgJHRhZ19pZCBvciByZXR1cm47CisJJHRhZ3snaWQnfSA9ICR0YWdfaWQ7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJY2hvbXAgJGxpbmU7CisJCWlmICgkbGluZSA9fiBtL15vYmplY3QgKFswLTlhLWZBLUZdezQwfSkkLykgeworCQkJJHRhZ3snb2JqZWN0J30gPSAkMTsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gbS9edHlwZSAoLispJC8pIHsKKwkJCSR0YWd7J3R5cGUnfSA9ICQxOworCQl9IGVsc2lmICgkbGluZSA9fiBtL150YWcgKC4rKSQvKSB7CisJCQkkdGFneyduYW1lJ30gPSAkMTsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gbS9edGFnZ2VyICguKikgKFswLTldKykgKC4qKSQvKSB7CisJCQkkdGFneydhdXRob3InfSA9ICQxOworCQkJJHRhZ3snYXV0aG9yX2Vwb2NoJ30gPSAkMjsKKwkJCSR0YWd7J2F1dGhvcl90eid9ID0gJDM7CisJCQlpZiAoJHRhZ3snYXV0aG9yJ30gPX4gbS9eKFtePF0rKSA8KFtePl0qKT4vKSB7CisJCQkJJHRhZ3snYXV0aG9yX25hbWUnfSAgPSAkMTsKKwkJCQkkdGFneydhdXRob3JfZW1haWwnfSA9ICQyOworCQkJfSBlbHNlIHsKKwkJCQkkdGFneydhdXRob3JfbmFtZSd9ID0gJHRhZ3snYXV0aG9yJ307CisJCQl9CisJCX0gZWxzaWYgKCRsaW5lID1+IG0vLS1CRUdJTi8pIHsKKwkJCXB1c2ggQGNvbW1lbnQsICRsaW5lOworCQkJbGFzdDsKKwkJfSBlbHNpZiAoJGxpbmUgZXEgIiIpIHsKKwkJCWxhc3Q7CisJCX0KKwl9CisJcHVzaCBAY29tbWVudCwgPCRmZD47CisJJHRhZ3snY29tbWVudCd9ID0gXEBjb21tZW50OworCWNsb3NlICRmZCBvciByZXR1cm47CisJaWYgKCFkZWZpbmVkICR0YWd7J25hbWUnfSkgeworCQlyZXR1cm4KKwl9OworCXJldHVybiAldGFnCit9CisKK3N1YiBwYXJzZV9jb21taXRfdGV4dCB7CisJbXkgKCRjb21taXRfdGV4dCwgJHdpdGhwYXJlbnRzKSA9IEBfOworCW15IEBjb21taXRfbGluZXMgPSBzcGxpdCAnXG4nLCAkY29tbWl0X3RleHQ7CisJbXkgJWNvOworCisJcG9wIEBjb21taXRfbGluZXM7ICMgUmVtb3ZlICdcMCcKKworCWlmICghIEBjb21taXRfbGluZXMpIHsKKwkJcmV0dXJuOworCX0KKworCW15ICRoZWFkZXIgPSBzaGlmdCBAY29tbWl0X2xpbmVzOworCWlmICgkaGVhZGVyICF+IG0vXlswLTlhLWZBLUZdezQwfS8pIHsKKwkJcmV0dXJuOworCX0KKwkoJGNveydpZCd9LCBteSBAcGFyZW50cykgPSBzcGxpdCAnICcsICRoZWFkZXI7CisJd2hpbGUgKG15ICRsaW5lID0gc2hpZnQgQGNvbW1pdF9saW5lcykgeworCQlsYXN0IGlmICRsaW5lIGVxICJcbiI7CisJCWlmICgkbGluZSA9fiBtL150cmVlIChbMC05YS1mQS1GXXs0MH0pJC8pIHsKKwkJCSRjb3sndHJlZSd9ID0gJDE7CisJCX0gZWxzaWYgKCghZGVmaW5lZCAkd2l0aHBhcmVudHMpICYmICgkbGluZSA9fiBtL15wYXJlbnQgKFswLTlhLWZBLUZdezQwfSkkLykpIHsKKwkJCXB1c2ggQHBhcmVudHMsICQxOworCQl9IGVsc2lmICgkbGluZSA9fiBtL15hdXRob3IgKC4qKSAoWzAtOV0rKSAoLiopJC8pIHsKKwkJCSRjb3snYXV0aG9yJ30gPSB0b191dGY4KCQxKTsKKwkJCSRjb3snYXV0aG9yX2Vwb2NoJ30gPSAkMjsKKwkJCSRjb3snYXV0aG9yX3R6J30gPSAkMzsKKwkJCWlmICgkY297J2F1dGhvcid9ID1+IG0vXihbXjxdKykgPChbXj5dKik+LykgeworCQkJCSRjb3snYXV0aG9yX25hbWUnfSAgPSAkMTsKKwkJCQkkY297J2F1dGhvcl9lbWFpbCd9ID0gJDI7CisJCQl9IGVsc2UgeworCQkJCSRjb3snYXV0aG9yX25hbWUnfSA9ICRjb3snYXV0aG9yJ307CisJCQl9CisJCX0gZWxzaWYgKCRsaW5lID1+IG0vXmNvbW1pdHRlciAoLiopIChbMC05XSspICguKikkLykgeworCQkJJGNveydjb21taXR0ZXInfSA9IHRvX3V0ZjgoJDEpOworCQkJJGNveydjb21taXR0ZXJfZXBvY2gnfSA9ICQyOworCQkJJGNveydjb21taXR0ZXJfdHonfSA9ICQzOworCQkJaWYgKCRjb3snY29tbWl0dGVyJ30gPX4gbS9eKFtePF0rKSA8KFtePl0qKT4vKSB7CisJCQkJJGNveydjb21taXR0ZXJfbmFtZSd9ICA9ICQxOworCQkJCSRjb3snY29tbWl0dGVyX2VtYWlsJ30gPSAkMjsKKwkJCX0gZWxzZSB7CisJCQkJJGNveydjb21taXR0ZXJfbmFtZSd9ID0gJGNveydjb21taXR0ZXInfTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIWRlZmluZWQgJGNveyd0cmVlJ30pIHsKKwkJcmV0dXJuOworCX07CisJJGNveydwYXJlbnRzJ30gPSBcQHBhcmVudHM7CisJJGNveydwYXJlbnQnfSA9ICRwYXJlbnRzWzBdOworCisJZm9yZWFjaCBteSAkdGl0bGUgKEBjb21taXRfbGluZXMpIHsKKwkJJHRpdGxlID1+IHMvXiAgICAvLzsKKwkJaWYgKCR0aXRsZSBuZSAiIikgeworCQkJJGNveyd0aXRsZSd9ID0gY2hvcF9zdHIoJHRpdGxlLCA4MCwgNSk7CisJCQkjIHJlbW92ZSBsZWFkaW5nIHN0dWZmIG9mIG1lcmdlcyB0byBtYWtlIHRoZSBpbnRlcmVzdGluZyBwYXJ0IHZpc2libGUKKwkJCWlmIChsZW5ndGgoJHRpdGxlKSA+IDUwKSB7CisJCQkJJHRpdGxlID1+IHMvXkF1dG9tYXRpYyAvLzsKKwkJCQkkdGl0bGUgPX4gcy9ebWVyZ2UgKG9mfHdpdGgpIC9NZXJnZSAuLi4gL2k7CisJCQkJaWYgKGxlbmd0aCgkdGl0bGUpID4gNTApIHsKKwkJCQkJJHRpdGxlID1+IHMvKGh0dHB8cnN5bmMpOlwvXC8vLzsKKwkJCQl9CisJCQkJaWYgKGxlbmd0aCgkdGl0bGUpID4gNTApIHsKKwkJCQkJJHRpdGxlID1+IHMvKG1hc3Rlcnx3d3d8cnN5bmMpXC4vLzsKKwkJCQl9CisJCQkJaWYgKGxlbmd0aCgkdGl0bGUpID4gNTApIHsKKwkJCQkJJHRpdGxlID1+IHMva2VybmVsLm9yZzo/Ly87CisJCQkJfQorCQkJCWlmIChsZW5ndGgoJHRpdGxlKSA+IDUwKSB7CisJCQkJCSR0aXRsZSA9fiBzL1wvcHViXC9zY20vLzsKKwkJCQl9CisJCQl9CisJCQkkY297J3RpdGxlX3Nob3J0J30gPSBjaG9wX3N0cigkdGl0bGUsIDUwLCA1KTsKKwkJCWxhc3Q7CisJCX0KKwl9CisJaWYgKCEgZGVmaW5lZCAkY297J3RpdGxlJ30gfHwgJGNveyd0aXRsZSd9IGVxICIiKSB7CisJCSRjb3sndGl0bGUnfSA9ICRjb3sndGl0bGVfc2hvcnQnfSA9ICcobm8gY29tbWl0IG1lc3NhZ2UpJzsKKwl9CisJIyByZW1vdmUgYWRkZWQgc3BhY2VzCisJZm9yZWFjaCBteSAkbGluZSAoQGNvbW1pdF9saW5lcykgeworCQkkbGluZSA9fiBzL14gICAgLy87CisJfQorCSRjb3snY29tbWVudCd9ID0gXEBjb21taXRfbGluZXM7CisKKwlteSAkYWdlID0gdGltZSAtICRjb3snY29tbWl0dGVyX2Vwb2NoJ307CisJJGNveydhZ2UnfSA9ICRhZ2U7CisJJGNveydhZ2Vfc3RyaW5nJ30gPSBhZ2Vfc3RyaW5nKCRhZ2UpOworCW15ICgkc2VjLCAkbWluLCAkaG91ciwgJG1kYXksICRtb24sICR5ZWFyLCAkd2RheSwgJHlkYXkpID0gZ210aW1lKCRjb3snY29tbWl0dGVyX2Vwb2NoJ30pOworCWlmICgkYWdlID4gNjAqNjAqMjQqNyoyKSB7CisJCSRjb3snYWdlX3N0cmluZ19kYXRlJ30gPSBzcHJpbnRmICIlNGktJTAydS0lMDJpIiwgMTkwMCArICR5ZWFyLCAkbW9uKzEsICRtZGF5OworCQkkY297J2FnZV9zdHJpbmdfYWdlJ30gPSAkY297J2FnZV9zdHJpbmcnfTsKKwl9IGVsc2UgeworCQkkY297J2FnZV9zdHJpbmdfZGF0ZSd9ID0gJGNveydhZ2Vfc3RyaW5nJ307CisJCSRjb3snYWdlX3N0cmluZ19hZ2UnfSA9IHNwcmludGYgIiU0aS0lMDJ1LSUwMmkiLCAxOTAwICsgJHllYXIsICRtb24rMSwgJG1kYXk7CisJfQorCXJldHVybiAlY287Cit9CisKK3N1YiBwYXJzZV9jb21taXQgeworCW15ICgkY29tbWl0X2lkKSA9IEBfOworCW15ICVjbzsKKworCWxvY2FsICQvID0gIlwwIjsKKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJyZXYtbGlzdCIsCisJCSItLXBhcmVudHMiLAorCQkiLS1oZWFkZXIiLAorCQkiLS1tYXgtY291bnQ9MSIsCisJCSRjb21taXRfaWQsCisJCSItLSIsCisJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1yZXYtbGlzdCBmYWlsZWQiKTsKKwklY28gPSBwYXJzZV9jb21taXRfdGV4dCg8JGZkPiwgMSk7CisJY2xvc2UgJGZkOworCisJcmV0dXJuICVjbzsKK30KKworc3ViIHBhcnNlX2NvbW1pdHMgeworCW15ICgkY29tbWl0X2lkLCAkbWF4Y291bnQsICRza2lwLCAkZmlsZW5hbWUsIEBhcmdzKSA9IEBfOworCW15IEBjb3M7CisKKwkkbWF4Y291bnQgfHw9IDE7CisJJHNraXAgfHw9IDA7CisKKwlsb2NhbCAkLyA9ICJcMCI7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAicmV2LWxpc3QiLAorCQkiLS1oZWFkZXIiLAorCQlAYXJncywKKwkJKCItLW1heC1jb3VudD0iIC4gJG1heGNvdW50KSwKKwkJKCItLXNraXA9IiAuICRza2lwKSwKKwkJQGV4dHJhX29wdGlvbnMsCisJCSRjb21taXRfaWQsCisJCSItLSIsCisJCSgkZmlsZW5hbWUgPyAoJGZpbGVuYW1lKSA6ICgpKQorCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtcmV2LWxpc3QgZmFpbGVkIik7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJbXkgJWNvID0gcGFyc2VfY29tbWl0X3RleHQoJGxpbmUpOworCQlwdXNoIEBjb3MsIFwlY287CisJfQorCWNsb3NlICRmZDsKKworCXJldHVybiB3YW50YXJyYXkgPyBAY29zIDogXEBjb3M7Cit9CisKKyMgcGFyc2UgbGluZSBvZiBnaXQtZGlmZi10cmVlICJyYXciIG91dHB1dAorc3ViIHBhcnNlX2RpZmZ0cmVlX3Jhd19saW5lIHsKKwlteSAkbGluZSA9IHNoaWZ0OworCW15ICVyZXM7CisKKwkjICc6MTAwNjQ0IDEwMDY0NCAwM2IyMTgyNjBlOTliNzhjNmRmMGVkMzc4ZTU5ZWQ5MjA1Y2NjOTZkIDNiOTNkNWU3Y2M3ZjdkZDRlYmVkMTNhNWNjMWE0YWQ5NzZmYzk0ZDggTQlscy1maWxlcy5jJworCSMgJzoxMDA2NDQgMTAwNjQ0IDdmOTI4MTk4NTA4Njk3MWQzODc3YWNhMjc3MDRmMmFhZjljNDQ4Y2UgYmMxOTBlYmM3MWJiZDkyM2YyYjcyOGU1MDU0MDhmNWU1NGJkMDczYSBNCXJldi10cmVlLmMnCisJaWYgKCRsaW5lID1+IG0vXjooWzAtN117Nn0pIChbMC03XXs2fSkgKFswLTlhLWZBLUZdezQwfSkgKFswLTlhLWZBLUZdezQwfSkgKC4pKFswLTldezAsM30pXHQoLiopJC8pIHsKKwkJJHJlc3snZnJvbV9tb2RlJ30gPSAkMTsKKwkJJHJlc3sndG9fbW9kZSd9ID0gJDI7CisJCSRyZXN7J2Zyb21faWQnfSA9ICQzOworCQkkcmVzeyd0b19pZCd9ID0gJDQ7CisJCSRyZXN7J3N0YXR1cyd9ID0gJDU7CisJCSRyZXN7J3NpbWlsYXJpdHknfSA9ICQ2OworCQlpZiAoJHJlc3snc3RhdHVzJ30gZXEgJ1InIHx8ICRyZXN7J3N0YXR1cyd9IGVxICdDJykgeyAjIHJlbmFtZWQgb3IgY29waWVkCisJCQkoJHJlc3snZnJvbV9maWxlJ30sICRyZXN7J3RvX2ZpbGUnfSkgPSBtYXAgeyB1bnF1b3RlKCRfKSB9IHNwbGl0KCJcdCIsICQ3KTsKKwkJfSBlbHNlIHsKKwkJCSRyZXN7J2Zyb21fZmlsZSd9ID0gJHJlc3sndG9fZmlsZSd9ID0gJHJlc3snZmlsZSd9ID0gdW5xdW90ZSgkNyk7CisJCX0KKwl9CisJIyAnOjoxMDA3NTUgMTAwNzU1IDEwMDc1NSA2MGU3OWNhMWIwMWJjOGIwNTdhYmUxN2RkYWI0ODQ2OTlhN2Y1ZmRiIDk0MDY3Y2M1ZjczMzg4ZjMzNzIyZDUyYWUwMmY0NDY5MmJjMDc0OTAgOTQwNjdjYzVmNzMzODhmMzM3MjJkNTJhZTAyZjQ0NjkyYmMwNzQ5MCBNUglnaXQtZ3VpL2dpdC1ndWkuc2gnCisJIyBjb21iaW5lZCBkaWZmIChmb3IgbWVyZ2UgY29tbWl0KQorCWVsc2lmICgkbGluZSA9fiBzL14oOjorKSgoPzpbMC03XXs2fSApKykoKD86WzAtOWEtZkEtRl17NDB9ICkrKShbYS16QS1aXSspXHQoLiopJC8vKSB7CisJCSRyZXN7J25wYXJlbnRzJ30gID0gbGVuZ3RoKCQxKTsKKwkJJHJlc3snZnJvbV9tb2RlJ30gPSBbIHNwbGl0KCcgJywgJDIpIF07CisJCSRyZXN7J3RvX21vZGUnfSA9IHBvcCBAeyRyZXN7J2Zyb21fbW9kZSd9fTsKKwkJJHJlc3snZnJvbV9pZCd9ID0gWyBzcGxpdCgnICcsICQzKSBdOworCQkkcmVzeyd0b19pZCd9ID0gcG9wIEB7JHJlc3snZnJvbV9pZCd9fTsKKwkJJHJlc3snc3RhdHVzJ30gPSBbIHNwbGl0KCcnLCAkNCkgXTsKKwkJJHJlc3sndG9fZmlsZSd9ID0gdW5xdW90ZSgkNSk7CisJfQorCSMgJ2M1MTJiNTIzNDcyNDg1YWVmNGZmZjllNTdiMjI5ZDlkMjQzYzk2N2YnCisJZWxzaWYgKCRsaW5lID1+IG0vXihbMC05YS1mQS1GXXs0MH0pJC8pIHsKKwkJJHJlc3snY29tbWl0J30gPSAkMTsKKwl9CisKKwlyZXR1cm4gd2FudGFycmF5ID8gJXJlcyA6IFwlcmVzOworfQorCisjIHdyYXBwZXI6IHJldHVybiBwYXJzZWQgbGluZSBvZiBnaXQtZGlmZi10cmVlICJyYXciIG91dHB1dAorIyAodGhlIGFyZ3VtZW50IG1pZ2h0IGJlIHJhdyBsaW5lLCBvciBwYXJzZWQgaW5mbykKK3N1YiBwYXJzZWRfZGlmZnRyZWVfbGluZSB7CisJbXkgJGxpbmVfb3JfcmVmID0gc2hpZnQ7CisKKwlpZiAocmVmKCRsaW5lX29yX3JlZikgZXEgIkhBU0giKSB7CisJCSMgcHJlLXBhcnNlZCAob3IgZ2VuZXJhdGVkIGJ5IGhhbmQpCisJCXJldHVybiAkbGluZV9vcl9yZWY7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHBhcnNlX2RpZmZ0cmVlX3Jhd19saW5lKCRsaW5lX29yX3JlZik7CisJfQorfQorCisjIHBhcnNlIGxpbmUgb2YgZ2l0LWxzLXRyZWUgb3V0cHV0CitzdWIgcGFyc2VfbHNfdHJlZV9saW5lIHsKKwlteSAkbGluZSA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisJbXkgJXJlczsKKworCWlmICgkb3B0c3snLWwnfSkgeworCQkjJzEwMDY0NCBibG9iIDBmYTNmM2E2NmZiNmExMzdmNmVjMmMxOTM1MWVkNGQ4MDcwNzBmZmEgICAxNjcxNwlwYW5pYy5jJworCQkkbGluZSA9fiBtL14oWzAtOV0rKSAoLispIChbMC05YS1mQS1GXXs0MH0pICsoLXxbMC05XSspXHQoLispJC9zOworCisJCSRyZXN7J21vZGUnfSA9ICQxOworCQkkcmVzeyd0eXBlJ30gPSAkMjsKKwkJJHJlc3snaGFzaCd9ID0gJDM7CisJCSRyZXN7J3NpemUnfSA9ICQ0OworCQlpZiAoJG9wdHN7Jy16J30pIHsKKwkJCSRyZXN7J25hbWUnfSA9ICQ1OworCQl9IGVsc2UgeworCQkJJHJlc3snbmFtZSd9ID0gdW5xdW90ZSgkNSk7CisJCX0KKwl9IGVsc2UgeworCQkjJzEwMDY0NCBibG9iIDBmYTNmM2E2NmZiNmExMzdmNmVjMmMxOTM1MWVkNGQ4MDcwNzBmZmEJcGFuaWMuYycKKwkJJGxpbmUgPX4gbS9eKFswLTldKykgKC4rKSAoWzAtOWEtZkEtRl17NDB9KVx0KC4rKSQvczsKKworCQkkcmVzeydtb2RlJ30gPSAkMTsKKwkJJHJlc3sndHlwZSd9ID0gJDI7CisJCSRyZXN7J2hhc2gnfSA9ICQzOworCQlpZiAoJG9wdHN7Jy16J30pIHsKKwkJCSRyZXN7J25hbWUnfSA9ICQ0OworCQl9IGVsc2UgeworCQkJJHJlc3snbmFtZSd9ID0gdW5xdW90ZSgkNCk7CisJCX0KKwl9CisKKwlyZXR1cm4gd2FudGFycmF5ID8gJXJlcyA6IFwlcmVzOworfQorCisjIGdlbmVyYXRlcyBfdHdvXyBoYXNoZXMsIHJlZmVyZW5jZXMgdG8gd2hpY2ggYXJlIHBhc3NlZCBhcyAyIGFuZCAzIGFyZ3VtZW50CitzdWIgcGFyc2VfZnJvbV90b19kaWZmaW5mbyB7CisJbXkgKCRkaWZmaW5mbywgJGZyb20sICR0bywgQHBhcmVudHMpID0gQF87CisKKwlpZiAoJGRpZmZpbmZvLT57J25wYXJlbnRzJ30pIHsKKwkJIyBjb21iaW5lZCBkaWZmCisJCSRmcm9tLT57J2ZpbGUnfSA9IFtdOworCQkkZnJvbS0+eydocmVmJ30gPSBbXTsKKwkJZmlsbF9mcm9tX2ZpbGVfaW5mbygkZGlmZmluZm8sIEBwYXJlbnRzKQorCQkJdW5sZXNzIGV4aXN0cyAkZGlmZmluZm8tPnsnZnJvbV9maWxlJ307CisJCWZvciAobXkgJGkgPSAwOyAkaSA8ICRkaWZmaW5mby0+eyducGFyZW50cyd9OyAkaSsrKSB7CisJCQkkZnJvbS0+eydmaWxlJ31bJGldID0KKwkJCQlkZWZpbmVkICRkaWZmaW5mby0+eydmcm9tX2ZpbGUnfVskaV0gPworCQkJCSAgICAgICAgJGRpZmZpbmZvLT57J2Zyb21fZmlsZSd9WyRpXSA6CisJCQkJICAgICAgICAkZGlmZmluZm8tPnsndG9fZmlsZSd9OworCQkJaWYgKCRkaWZmaW5mby0+eydzdGF0dXMnfVskaV0gbmUgIkEiKSB7ICMgbm90IG5ldyAoYWRkZWQpIGZpbGUKKwkJCQkkZnJvbS0+eydocmVmJ31bJGldID0gaHJlZihhY3Rpb249PiJibG9iIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRwYXJlbnRzWyRpXSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZmluZm8tPnsnZnJvbV9pZCd9WyRpXSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRmcm9tLT57J2ZpbGUnfVskaV0pOworCQkJfSBlbHNlIHsKKwkJCQkkZnJvbS0+eydocmVmJ31bJGldID0gdW5kZWY7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkjIG9yZGluYXJ5IChub3QgY29tYmluZWQpIGRpZmYKKwkJJGZyb20tPnsnZmlsZSd9ID0gJGRpZmZpbmZvLT57J2Zyb21fZmlsZSd9OworCQlpZiAoJGRpZmZpbmZvLT57J3N0YXR1cyd9IG5lICJBIikgeyAjIG5vdCBuZXcgKGFkZGVkKSBmaWxlCisJCQkkZnJvbS0+eydocmVmJ30gPSBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoX2Jhc2U9PiRoYXNoX3BhcmVudCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmZpbmZvLT57J2Zyb21faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZnJvbS0+eydmaWxlJ30pOworCQl9IGVsc2UgeworCQkJZGVsZXRlICRmcm9tLT57J2hyZWYnfTsKKwkJfQorCX0KKworCSR0by0+eydmaWxlJ30gPSAkZGlmZmluZm8tPnsndG9fZmlsZSd9OworCWlmICghaXNfZGVsZXRlZCgkZGlmZmluZm8pKSB7ICMgZmlsZSBleGlzdHMgaW4gcmVzdWx0CisJCSR0by0+eydocmVmJ30gPSBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoX2Jhc2U9PiRoYXNoLAorCQkgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZmluZm8tPnsndG9faWQnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kdG8tPnsnZmlsZSd9KTsKKwl9IGVsc2UgeworCQlkZWxldGUgJHRvLT57J2hyZWYnfTsKKwl9Cit9CisKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIHBhcnNlIHRvIGFycmF5IG9mIGhhc2hlcyBmdW5jdGlvbnMKKworc3ViIGdpdF9nZXRfaGVhZHNfbGlzdCB7CisJbXkgKCRsaW1pdCwgQGNsYXNzZXMpID0gQF87CisJQGNsYXNzZXMgPSAoJ2hlYWRzJykgdW5sZXNzIEBjbGFzc2VzOworCW15IEBwYXR0ZXJucyA9IG1hcCB7ICJyZWZzLyRfIiB9IEBjbGFzc2VzOworCW15IEBoZWFkc2xpc3Q7CisKKwlvcGVuIG15ICRmZCwgJy18JywgZ2l0X2NtZCgpLCAnZm9yLWVhY2gtcmVmJywKKwkJKCRsaW1pdCA/ICctLWNvdW50PScuKCRsaW1pdCsxKSA6ICgpKSwgJy0tc29ydD0tY29tbWl0dGVyZGF0ZScsCisJCSctLWZvcm1hdD0lKG9iamVjdG5hbWUpICUocmVmbmFtZSkgJShzdWJqZWN0KSUwMCUoY29tbWl0dGVyKScsCisJCUBwYXR0ZXJucworCQlvciByZXR1cm47CisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJbXkgJXJlZl9pdGVtOworCisJCWNob21wICRsaW5lOworCQlteSAoJHJlZmluZm8sICRjb21taXR0ZXJpbmZvKSA9IHNwbGl0KC9cMC8sICRsaW5lKTsKKwkJbXkgKCRoYXNoLCAkbmFtZSwgJHRpdGxlKSA9IHNwbGl0KCcgJywgJHJlZmluZm8sIDMpOworCQlteSAoJGNvbW1pdHRlciwgJGVwb2NoLCAkdHopID0KKwkJCSgkY29tbWl0dGVyaW5mbyA9fiAvXiguKikgKFswLTldKykgKC4qKSQvKTsKKwkJJHJlZl9pdGVteydmdWxsbmFtZSd9ICA9ICRuYW1lOworCQkkbmFtZSA9fiBzIV5yZWZzLyg/OmhlYWR8cmVtb3RlKXMvISE7CisKKwkJJHJlZl9pdGVteyduYW1lJ30gID0gJG5hbWU7CisJCSRyZWZfaXRlbXsnaWQnfSAgICA9ICRoYXNoOworCQkkcmVmX2l0ZW17J3RpdGxlJ30gPSAkdGl0bGUgfHwgJyhubyBjb21taXQgbWVzc2FnZSknOworCQkkcmVmX2l0ZW17J2Vwb2NoJ30gPSAkZXBvY2g7CisJCWlmICgkZXBvY2gpIHsKKwkJCSRyZWZfaXRlbXsnYWdlJ30gPSBhZ2Vfc3RyaW5nKHRpbWUgLSAkcmVmX2l0ZW17J2Vwb2NoJ30pOworCQl9IGVsc2UgeworCQkJJHJlZl9pdGVteydhZ2UnfSA9ICJ1bmtub3duIjsKKwkJfQorCisJCXB1c2ggQGhlYWRzbGlzdCwgXCVyZWZfaXRlbTsKKwl9CisJY2xvc2UgJGZkOworCisJcmV0dXJuIHdhbnRhcnJheSA/IEBoZWFkc2xpc3QgOiBcQGhlYWRzbGlzdDsKK30KKworc3ViIGdpdF9nZXRfdGFnc19saXN0IHsKKwlteSAkbGltaXQgPSBzaGlmdDsKKwlteSBAdGFnc2xpc3Q7CisKKwlvcGVuIG15ICRmZCwgJy18JywgZ2l0X2NtZCgpLCAnZm9yLWVhY2gtcmVmJywKKwkJKCRsaW1pdCA/ICctLWNvdW50PScuKCRsaW1pdCsxKSA6ICgpKSwgJy0tc29ydD0tY3JlYXRvcmRhdGUnLAorCQknLS1mb3JtYXQ9JShvYmplY3RuYW1lKSAlKG9iamVjdHR5cGUpICUocmVmbmFtZSkgJy4KKwkJJyUoKm9iamVjdG5hbWUpICUoKm9iamVjdHR5cGUpICUoc3ViamVjdCklMDAlKGNyZWF0b3IpJywKKwkJJ3JlZnMvdGFncycKKwkJb3IgcmV0dXJuOworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCW15ICVyZWZfaXRlbTsKKworCQljaG9tcCAkbGluZTsKKwkJbXkgKCRyZWZpbmZvLCAkY3JlYXRvcmluZm8pID0gc3BsaXQoL1wwLywgJGxpbmUpOworCQlteSAoJGlkLCAkdHlwZSwgJG5hbWUsICRyZWZpZCwgJHJlZnR5cGUsICR0aXRsZSkgPSBzcGxpdCgnICcsICRyZWZpbmZvLCA2KTsKKwkJbXkgKCRjcmVhdG9yLCAkZXBvY2gsICR0eikgPQorCQkJKCRjcmVhdG9yaW5mbyA9fiAvXiguKikgKFswLTldKykgKC4qKSQvKTsKKwkJJHJlZl9pdGVteydmdWxsbmFtZSd9ID0gJG5hbWU7CisJCSRuYW1lID1+IHMhXnJlZnMvdGFncy8hITsKKworCQkkcmVmX2l0ZW17J3R5cGUnfSA9ICR0eXBlOworCQkkcmVmX2l0ZW17J2lkJ30gPSAkaWQ7CisJCSRyZWZfaXRlbXsnbmFtZSd9ID0gJG5hbWU7CisJCWlmICgkdHlwZSBlcSAidGFnIikgeworCQkJJHJlZl9pdGVteydzdWJqZWN0J30gPSAkdGl0bGU7CisJCQkkcmVmX2l0ZW17J3JlZnR5cGUnfSA9ICRyZWZ0eXBlOworCQkJJHJlZl9pdGVteydyZWZpZCd9ICAgPSAkcmVmaWQ7CisJCX0gZWxzZSB7CisJCQkkcmVmX2l0ZW17J3JlZnR5cGUnfSA9ICR0eXBlOworCQkJJHJlZl9pdGVteydyZWZpZCd9ICAgPSAkaWQ7CisJCX0KKworCQlpZiAoJHR5cGUgZXEgInRhZyIgfHwgJHR5cGUgZXEgImNvbW1pdCIpIHsKKwkJCSRyZWZfaXRlbXsnZXBvY2gnfSA9ICRlcG9jaDsKKwkJCWlmICgkZXBvY2gpIHsKKwkJCQkkcmVmX2l0ZW17J2FnZSd9ID0gYWdlX3N0cmluZyh0aW1lIC0gJHJlZl9pdGVteydlcG9jaCd9KTsKKwkJCX0gZWxzZSB7CisJCQkJJHJlZl9pdGVteydhZ2UnfSA9ICJ1bmtub3duIjsKKwkJCX0KKwkJfQorCisJCXB1c2ggQHRhZ3NsaXN0LCBcJXJlZl9pdGVtOworCX0KKwljbG9zZSAkZmQ7CisKKwlyZXR1cm4gd2FudGFycmF5ID8gQHRhZ3NsaXN0IDogXEB0YWdzbGlzdDsKK30KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyMgZmlsZXN5c3RlbS1yZWxhdGVkIGZ1bmN0aW9ucworCitzdWIgZ2V0X2ZpbGVfb3duZXIgeworCW15ICRwYXRoID0gc2hpZnQ7CisKKwlteSAoJGRldiwgJGlubywgJG1vZGUsICRubGluaywgJHN0X3VpZCwgJHN0X2dpZCwgJHJkZXYsICRzaXplKSA9IHN0YXQoJHBhdGgpOworCW15ICgkbmFtZSwgJHBhc3N3ZCwgJHVpZCwgJGdpZCwgJHF1b3RhLCAkY29tbWVudCwgJGdjb3MsICRkaXIsICRzaGVsbCkgPSBnZXRwd3VpZCgkc3RfdWlkKTsKKwlpZiAoIWRlZmluZWQgJGdjb3MpIHsKKwkJcmV0dXJuIHVuZGVmOworCX0KKwlteSAkb3duZXIgPSAkZ2NvczsKKwkkb3duZXIgPX4gcy9bLDtdLiokLy87CisJcmV0dXJuIHRvX3V0ZjgoJG93bmVyKTsKK30KKworIyBhc3N1bWUgdGhhdCBmaWxlIGV4aXN0cworc3ViIGluc2VydF9maWxlIHsKKwlteSAkZmlsZW5hbWUgPSBzaGlmdDsKKworCW9wZW4gbXkgJGZkLCAnPCcsICRmaWxlbmFtZTsKKwlwcmludCBtYXAgeyB0b191dGY4KCRfKSB9IDwkZmQ+OworCWNsb3NlICRmZDsKK30KKworIyMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIyMgbWltZXR5cGUgcmVsYXRlZCBmdW5jdGlvbnMKKworc3ViIG1pbWV0eXBlX2d1ZXNzX2ZpbGUgeworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCW15ICRtaW1lbWFwID0gc2hpZnQ7CisJLXIgJG1pbWVtYXAgb3IgcmV0dXJuIHVuZGVmOworCisJbXkgJW1pbWVtYXA7CisJb3BlbihteSAkbWgsICc8JywgJG1pbWVtYXApIG9yIHJldHVybiB1bmRlZjsKKwl3aGlsZSAoPCRtaD4pIHsKKwkJbmV4dCBpZiBtL14jLzsgIyBza2lwIGNvbW1lbnRzCisJCW15ICgkbWltZXR5cGUsIEBleHRzKSA9IHNwbGl0KC9ccysvKTsKKwkJZm9yZWFjaCBteSAkZXh0IChAZXh0cykgeworCQkJJG1pbWVtYXB7JGV4dH0gPSAkbWltZXR5cGU7CisJCX0KKwl9CisJY2xvc2UoJG1oKTsKKworCSRmaWxlbmFtZSA9fiAvXC4oW14uXSopJC87CisJcmV0dXJuICRtaW1lbWFweyQxfTsKK30KKworc3ViIG1pbWV0eXBlX2d1ZXNzIHsKKwlteSAkZmlsZW5hbWUgPSBzaGlmdDsKKwlteSAkbWltZTsKKwkkZmlsZW5hbWUgPX4gL1wuLyBvciByZXR1cm4gdW5kZWY7CisKKwlpZiAoJG1pbWV0eXBlc19maWxlKSB7CisJCW15ICRmaWxlID0gJG1pbWV0eXBlc19maWxlOworCQlpZiAoJGZpbGUgIX4gbSFeLyEpIHsgIyBpZiBpdCBpcyByZWxhdGl2ZSBwYXRoCisJCQkjIGl0IGlzIHJlbGF0aXZlIHRvIHByb2plY3QKKwkJCSRmaWxlID0gIiRwcm9qZWN0cm9vdC8kcHJvamVjdC8kZmlsZSI7CisJCX0KKwkJJG1pbWUgPSBtaW1ldHlwZV9ndWVzc19maWxlKCRmaWxlbmFtZSwgJGZpbGUpOworCX0KKwkkbWltZSB8fD0gbWltZXR5cGVfZ3Vlc3NfZmlsZSgkZmlsZW5hbWUsICcvZXRjL21pbWUudHlwZXMnKTsKKwlyZXR1cm4gJG1pbWU7Cit9CisKK3N1YiBibG9iX21pbWV0eXBlIHsKKwlteSAkZmQgPSBzaGlmdDsKKwlteSAkZmlsZW5hbWUgPSBzaGlmdDsKKworCWlmICgkZmlsZW5hbWUpIHsKKwkJbXkgJG1pbWUgPSBtaW1ldHlwZV9ndWVzcygkZmlsZW5hbWUpOworCQkkbWltZSBhbmQgcmV0dXJuICRtaW1lOworCX0KKworCSMganVzdCBpbiBjYXNlCisJcmV0dXJuICRkZWZhdWx0X2Jsb2JfcGxhaW5fbWltZXR5cGUgdW5sZXNzICRmZDsKKworCWlmICgtVCAkZmQpIHsKKwkJcmV0dXJuICd0ZXh0L3BsYWluJzsKKwl9IGVsc2lmICghICRmaWxlbmFtZSkgeworCQlyZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CisJfSBlbHNpZiAoJGZpbGVuYW1lID1+IG0vXC5wbmckL2kpIHsKKwkJcmV0dXJuICdpbWFnZS9wbmcnOworCX0gZWxzaWYgKCRmaWxlbmFtZSA9fiBtL1wuZ2lmJC9pKSB7CisJCXJldHVybiAnaW1hZ2UvZ2lmJzsKKwl9IGVsc2lmICgkZmlsZW5hbWUgPX4gbS9cLmpwZT9nJC9pKSB7CisJCXJldHVybiAnaW1hZ2UvanBlZyc7CisJfSBlbHNlIHsKKwkJcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOworCX0KK30KKworc3ViIGJsb2JfY29udGVudHR5cGUgeworCW15ICgkZmQsICRmaWxlX25hbWUsICR0eXBlKSA9IEBfOworCisJJHR5cGUgfHw9IGJsb2JfbWltZXR5cGUoJGZkLCAkZmlsZV9uYW1lKTsKKwlpZiAoJHR5cGUgZXEgJ3RleHQvcGxhaW4nICYmIGRlZmluZWQgJGRlZmF1bHRfdGV4dF9wbGFpbl9jaGFyc2V0KSB7CisJCSR0eXBlIC49ICI7IGNoYXJzZXQ9JGRlZmF1bHRfdGV4dF9wbGFpbl9jaGFyc2V0IjsKKwl9CisKKwlyZXR1cm4gJHR5cGU7Cit9CisKKyMgZ3Vlc3MgZmlsZSBzeW50YXggZm9yIHN5bnRheCBoaWdobGlnaHRpbmc7IHJldHVybiB1bmRlZiBpZiBubyBoaWdobGlnaHRpbmcKKyMgdGhlIG5hbWUgb2Ygc3ludGF4IGNhbiAoaW4gdGhlIGZ1dHVyZSkgZGVwZW5kIG9uIHN5bnRheCBoaWdobGlnaHRlciB1c2VkCitzdWIgZ3Vlc3NfZmlsZV9zeW50YXggeworCW15ICgkaGlnaGxpZ2h0LCAkbWltZXR5cGUsICRmaWxlX25hbWUpID0gQF87CisJcmV0dXJuIHVuZGVmIHVubGVzcyAoJGhpZ2hsaWdodCAmJiBkZWZpbmVkICRmaWxlX25hbWUpOworCW15ICRiYXNlbmFtZSA9IGJhc2VuYW1lKCRmaWxlX25hbWUsICcuaW4nKTsKKwlyZXR1cm4gJGhpZ2hsaWdodF9iYXNlbmFtZXskYmFzZW5hbWV9CisJCWlmIGV4aXN0cyAkaGlnaGxpZ2h0X2Jhc2VuYW1leyRiYXNlbmFtZX07CisKKwkkYmFzZW5hbWUgPX4gL1wuKFteLl0qKSQvOworCW15ICRleHQgPSAkMSBvciByZXR1cm4gdW5kZWY7CisJcmV0dXJuICRoaWdobGlnaHRfZXh0eyRleHR9CisJCWlmIGV4aXN0cyAkaGlnaGxpZ2h0X2V4dHskZXh0fTsKKworCXJldHVybiB1bmRlZjsKK30KKworIyBydW4gaGlnaGxpZ2h0ZXIgYW5kIHJldHVybiBGRCBvZiBpdHMgb3V0cHV0LAorIyBvciByZXR1cm4gb3JpZ2luYWwgRkQgaWYgbm8gaGlnaGxpZ2h0aW5nCitzdWIgcnVuX2hpZ2hsaWdodGVyIHsKKwlteSAoJGZkLCAkaGlnaGxpZ2h0LCAkc3ludGF4KSA9IEBfOworCXJldHVybiAkZmQgdW5sZXNzICgkaGlnaGxpZ2h0ICYmIGRlZmluZWQgJHN5bnRheCk7CisKKwljbG9zZSAkZmQ7CisJb3BlbiAkZmQsIHF1b3RlX2NvbW1hbmQoZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAiYmxvYiIsICRoYXNoKS4iIHwgIi4KKwkgICAgICAgICAgcXVvdGVfY29tbWFuZCgkaGlnaGxpZ2h0X2JpbikuCisJICAgICAgICAgICIgLS1yZXBsYWNlLXRhYnM9OCAtLWZyYWdtZW50IC0tc3ludGF4ICRzeW50YXggfCIKKwkJb3IgZGllX2Vycm9yKDUwMCwgIkNvdWxkbid0IG9wZW4gZmlsZSBvciBydW4gc3ludGF4IGhpZ2hsaWdodGVyIik7CisJcmV0dXJuICRmZDsKK30KKworIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyMgZnVuY3Rpb25zIHByaW50aW5nIEhUTUw6IGhlYWRlciwgZm9vdGVyLCBlcnJvciBwYWdlCisKK3N1YiBnZXRfcGFnZV90aXRsZSB7CisJbXkgJHRpdGxlID0gdG9fdXRmOCgkc2l0ZV9uYW1lKTsKKworCXVubGVzcyAoZGVmaW5lZCAkcHJvamVjdCkgeworCQlpZiAoZGVmaW5lZCAkcHJvamVjdF9maWx0ZXIpIHsKKwkJCSR0aXRsZSAuPSAiIC0gcHJvamVjdHMgaW4gJyIgLiBlc2NfcGF0aCgkcHJvamVjdF9maWx0ZXIpIC4gIiciOworCQl9CisJCXJldHVybiAkdGl0bGU7CisJfQorCSR0aXRsZSAuPSAiIC0gIiAuIHRvX3V0ZjgoJHByb2plY3QpOworCisJcmV0dXJuICR0aXRsZSB1bmxlc3MgKGRlZmluZWQgJGFjdGlvbik7CisJJHRpdGxlIC49ICIvJGFjdGlvbiI7ICMgJGFjdGlvbiBpcyBVUy1BU0NJSSAoN2JpdCBBU0NJSSkKKworCXJldHVybiAkdGl0bGUgdW5sZXNzIChkZWZpbmVkICRmaWxlX25hbWUpOworCSR0aXRsZSAuPSAiIC0gIiAuIGVzY19wYXRoKCRmaWxlX25hbWUpOworCWlmICgkYWN0aW9uIGVxICJ0cmVlIiAmJiAkZmlsZV9uYW1lICF+IG18LyR8KSB7CisJCSR0aXRsZSAuPSAiLyI7CisJfQorCisJcmV0dXJuICR0aXRsZTsKK30KKworc3ViIGdldF9jb250ZW50X3R5cGVfaHRtbCB7CisJIyByZXF1aXJlIGV4cGxpY2l0IHN1cHBvcnQgZnJvbSB0aGUgVUEgaWYgd2UgYXJlIHRvIHNlbmQgdGhlIHBhZ2UgYXMKKwkjICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnLCBvdGhlcndpc2Ugc2VuZCBpdCBhcyBwbGFpbiBvbGQgJ3RleHQvaHRtbCcuCisJIyB3ZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSBNU0lFIHNvbWV0aW1lcyBnbG9icyAnKi8qJywgcHJldGVuZGluZyB0bworCSMgc3VwcG9ydCB4aHRtbCt4bWwgYnV0IGNob2tpbmcgd2hlbiBpdCBnZXRzIHdoYXQgaXQgYXNrZWQgZm9yLgorCWlmIChkZWZpbmVkICRjZ2ktPmh0dHAoJ0hUVFBfQUNDRVBUJykgJiYKKwkgICAgJGNnaS0+aHR0cCgnSFRUUF9BQ0NFUFQnKSA9fiBtLygsfDt8XHN8XilhcHBsaWNhdGlvblwveGh0bWxcK3htbCgsfDt8XHN8JCkvICYmCisJICAgICRjZ2ktPkFjY2VwdCgnYXBwbGljYXRpb24veGh0bWwreG1sJykgIT0gMCkgeworCQlyZXR1cm4gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCc7CisJfSBlbHNlIHsKKwkJcmV0dXJuICd0ZXh0L2h0bWwnOworCX0KK30KKworc3ViIHByaW50X2ZlZWRfbWV0YSB7CisJaWYgKGRlZmluZWQgJHByb2plY3QpIHsKKwkJbXkgJWhyZWZfcGFyYW1zID0gZ2V0X2ZlZWRfaW5mbygpOworCQlpZiAoIWV4aXN0cyAkaHJlZl9wYXJhbXN7Jy10aXRsZSd9KSB7CisJCQkkaHJlZl9wYXJhbXN7Jy10aXRsZSd9ID0gJ2xvZyc7CisJCX0KKworCQlmb3JlYWNoIG15ICRmb3JtYXQgKHF3KFJTUyBBdG9tKSkgeworCQkJbXkgJHR5cGUgPSBsYygkZm9ybWF0KTsKKwkJCW15ICVsaW5rX2F0dHIgPSAoCisJCQkJJy1yZWwnID0+ICdhbHRlcm5hdGUnLAorCQkJCSctdGl0bGUnID0+IGVzY19hdHRyKCIkcHJvamVjdCAtICRocmVmX3BhcmFtc3snLXRpdGxlJ30gLSAkZm9ybWF0IGZlZWQiKSwKKwkJCQknLXR5cGUnID0+ICJhcHBsaWNhdGlvbi8kdHlwZSt4bWwiCisJCQkpOworCisJCQkkaHJlZl9wYXJhbXN7J2V4dHJhX29wdGlvbnMnfSA9IHVuZGVmOworCQkJJGhyZWZfcGFyYW1zeydhY3Rpb24nfSA9ICR0eXBlOworCQkJJGxpbmtfYXR0cnsnLWhyZWYnfSA9IGhyZWYoJWhyZWZfcGFyYW1zKTsKKwkJCXByaW50ICI8bGluayAiLgorCQkJICAgICAgInJlbD1cIiRsaW5rX2F0dHJ7Jy1yZWwnfVwiICIuCisJCQkgICAgICAidGl0bGU9XCIkbGlua19hdHRyeyctdGl0bGUnfVwiICIuCisJCQkgICAgICAiaHJlZj1cIiRsaW5rX2F0dHJ7Jy1ocmVmJ31cIiAiLgorCQkJICAgICAgInR5cGU9XCIkbGlua19hdHRyeyctdHlwZSd9XCIgIi4KKwkJCSAgICAgICIvPlxuIjsKKworCQkJJGhyZWZfcGFyYW1zeydleHRyYV9vcHRpb25zJ30gPSAnLS1uby1tZXJnZXMnOworCQkJJGxpbmtfYXR0cnsnLWhyZWYnfSA9IGhyZWYoJWhyZWZfcGFyYW1zKTsKKwkJCSRsaW5rX2F0dHJ7Jy10aXRsZSd9IC49ICcgKG5vIG1lcmdlcyknOworCQkJcHJpbnQgIjxsaW5rICIuCisJCQkgICAgICAicmVsPVwiJGxpbmtfYXR0cnsnLXJlbCd9XCIgIi4KKwkJCSAgICAgICJ0aXRsZT1cIiRsaW5rX2F0dHJ7Jy10aXRsZSd9XCIgIi4KKwkJCSAgICAgICJocmVmPVwiJGxpbmtfYXR0cnsnLWhyZWYnfVwiICIuCisJCQkgICAgICAidHlwZT1cIiRsaW5rX2F0dHJ7Jy10eXBlJ31cIiAiLgorCQkJICAgICAgIi8+XG4iOworCQl9CisKKwl9IGVsc2UgeworCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgcHJvamVjdHMgbGlzdCIgJy4KKwkJICAgICAgICdocmVmPSIlcyIgdHlwZT0idGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIgLz4nLiJcbiIsCisJCSAgICAgICBlc2NfYXR0cigkc2l0ZV9uYW1lKSwgaHJlZihwcm9qZWN0PT51bmRlZiwgYWN0aW9uPT4icHJvamVjdF9pbmRleCIpKTsKKwkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIHByb2plY3RzIGZlZWRzIiAnLgorCQkgICAgICAgJ2hyZWY9IiVzIiB0eXBlPSJ0ZXh0L3gtb3BtbCIgLz4nLiJcbiIsCisJCSAgICAgICBlc2NfYXR0cigkc2l0ZV9uYW1lKSwgaHJlZihwcm9qZWN0PT51bmRlZiwgYWN0aW9uPT4ib3BtbCIpKTsKKwl9Cit9CisKK3N1YiBwcmludF9oZWFkZXJfbGlua3MgeworCW15ICRzdGF0dXMgPSBzaGlmdDsKKworCSMgcHJpbnQgb3V0IGVhY2ggc3R5bGVzaGVldCB0aGF0IGV4aXN0LCBwcm92aWRpbmcgYmFja3dhcmRzIGNhcGFiaWxpdHkKKwkjIGZvciB0aG9zZSBwZW9wbGUgd2hvIGRlZmluZWQgJHN0eWxlc2hlZXQgaW4gYSBjb25maWcgZmlsZQorCWlmIChkZWZpbmVkICRzdHlsZXNoZWV0KSB7CisJCXByaW50ICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLmVzY191cmwoJHN0eWxlc2hlZXQpLiciLz4nLiJcbiI7CisJfSBlbHNlIHsKKwkJZm9yZWFjaCBteSAkc3R5bGVzaGVldCAoQHN0eWxlc2hlZXRzKSB7CisJCQluZXh0IHVubGVzcyAkc3R5bGVzaGVldDsKKwkJCXByaW50ICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLmVzY191cmwoJHN0eWxlc2hlZXQpLiciLz4nLiJcbiI7CisJCX0KKwl9CisJcHJpbnRfZmVlZF9tZXRhKCkKKwkJaWYgKCRzdGF0dXMgZXEgJzIwMCBPSycpOworCWlmIChkZWZpbmVkICRmYXZpY29uKSB7CisJCXByaW50IHFxKDxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iKS5lc2NfdXJsKCRmYXZpY29uKS5xcSgiIHR5cGU9ImltYWdlL3BuZyIgLz5cbik7CisJfQorfQorCitzdWIgcHJpbnRfbmF2X2JyZWFkY3J1bWJzX3BhdGggeworCW15ICRkaXJwcmVmaXggPSB1bmRlZjsKKwl3aGlsZSAobXkgJHBhcnQgPSBzaGlmdCkgeworCQkkZGlycHJlZml4IC49ICIvIiBpZiBkZWZpbmVkICRkaXJwcmVmaXg7CisJCSRkaXJwcmVmaXggLj0gJHBhcnQ7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdCA9PiB1bmRlZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0X2ZpbHRlciA9PiAkZGlycHJlZml4LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9PiAicHJvamVjdF9saXN0Iil9LAorCQkJICAgICAgZXNjX2h0bWwoJHBhcnQpKSAuICIgLyAiOworCX0KK30KKworc3ViIHByaW50X25hdl9icmVhZGNydW1icyB7CisJbXkgJW9wdHMgPSBAXzsKKworCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGVzY191cmwoJGhvbWVfbGluayl9LCAkaG9tZV9saW5rX3N0cikgLiAiIC8gIjsKKwlpZiAoZGVmaW5lZCAkcHJvamVjdCkgeworCQlteSBAZGlybmFtZSA9IHNwbGl0ICcvJywgJHByb2plY3Q7CisJCW15ICRwcm9qZWN0YmFzZW5hbWUgPSBwb3AgQGRpcm5hbWU7CisJCXByaW50X25hdl9icmVhZGNydW1ic19wYXRoKEBkaXJuYW1lKTsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzdW1tYXJ5Iil9LCBlc2NfaHRtbCgkcHJvamVjdGJhc2VuYW1lKSk7CisJCWlmIChkZWZpbmVkICRhY3Rpb24pIHsKKwkJCW15ICRhY3Rpb25fcHJpbnQgPSAkYWN0aW9uIDsKKwkJCWlmIChkZWZpbmVkICRvcHRzey1hY3Rpb25fZXh0cmF9KSB7CisJCQkJJGFjdGlvbl9wcmludCA9ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kYWN0aW9uKX0sCisJCQkJCSRhY3Rpb24pOworCQkJfQorCQkJcHJpbnQgIiAvICRhY3Rpb25fcHJpbnQiOworCQl9CisJCWlmIChkZWZpbmVkICRvcHRzey1hY3Rpb25fZXh0cmF9KSB7CisJCQlwcmludCAiIC8gJG9wdHN7LWFjdGlvbl9leHRyYX0iOworCQl9CisJCXByaW50ICJcbiI7CisJfSBlbHNpZiAoZGVmaW5lZCAkcHJvamVjdF9maWx0ZXIpIHsKKwkJcHJpbnRfbmF2X2JyZWFkY3J1bWJzX3BhdGgoc3BsaXQgJy8nLCAkcHJvamVjdF9maWx0ZXIpOworCX0KK30KKworc3ViIHByaW50X3NlYXJjaF9mb3JtIHsKKwlpZiAoIWRlZmluZWQgJHNlYXJjaHRleHQpIHsKKwkJJHNlYXJjaHRleHQgPSAiIjsKKwl9CisJbXkgJHNlYXJjaF9oYXNoOworCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UpIHsKKwkJJHNlYXJjaF9oYXNoID0gJGhhc2hfYmFzZTsKKwl9IGVsc2lmIChkZWZpbmVkICRoYXNoKSB7CisJCSRzZWFyY2hfaGFzaCA9ICRoYXNoOworCX0gZWxzZSB7CisJCSRzZWFyY2hfaGFzaCA9ICJIRUFEIjsKKwl9CisJbXkgJGFjdGlvbiA9ICRteV91cmk7CisJbXkgJHVzZV9wYXRoaW5mbyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdwYXRoaW5mbycpOworCWlmICgkdXNlX3BhdGhpbmZvKSB7CisJCSRhY3Rpb24gLj0gIi8iLmVzY191cmwoJHByb2plY3QpOworCX0KKwlwcmludCAkY2dpLT5zdGFydGZvcm0oLW1ldGhvZCA9PiAiZ2V0IiwgLWFjdGlvbiA9PiAkYWN0aW9uKSAuCisJICAgICAgIjxkaXYgY2xhc3M9XCJzZWFyY2hcIj5cbiIgLgorCSAgICAgICghJHVzZV9wYXRoaW5mbyAmJgorCSAgICAgICRjZ2ktPmlucHV0KHstbmFtZT0+InAiLCAtdmFsdWU9PiRwcm9qZWN0LCAtdHlwZT0+ImhpZGRlbiJ9KSAuICJcbiIpIC4KKwkgICAgICAkY2dpLT5pbnB1dCh7LW5hbWU9PiJhIiwgLXZhbHVlPT4ic2VhcmNoIiwgLXR5cGU9PiJoaWRkZW4ifSkgLiAiXG4iIC4KKwkgICAgICAkY2dpLT5pbnB1dCh7LW5hbWU9PiJoIiwgLXZhbHVlPT4kc2VhcmNoX2hhc2gsIC10eXBlPT4iaGlkZGVuIn0pIC4gIlxuIiAuCisJICAgICAgJGNnaS0+cG9wdXBfbWVudSgtbmFtZSA9PiAnc3QnLCAtZGVmYXVsdCA9PiAnY29tbWl0JywKKwkgICAgICAgICAgICAgICAgICAgICAgIC12YWx1ZXMgPT4gWydjb21taXQnLCAnZ3JlcCcsICdhdXRob3InLCAnY29tbWl0dGVyJywgJ3BpY2theGUnXSkgLgorCSAgICAgICRjZ2ktPnN1cCgkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InNlYXJjaF9oZWxwIil9LCAiPyIpKSAuCisJICAgICAgIiBzZWFyY2g6XG4iLAorCSAgICAgICRjZ2ktPnRleHRmaWVsZCgtbmFtZSA9PiAicyIsIC12YWx1ZSA9PiAkc2VhcmNodGV4dCwgLW92ZXJyaWRlID0+IDEpIC4gIlxuIiAuCisJICAgICAgIjxzcGFuIHRpdGxlPVwiRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uXCI+IiAuCisJICAgICAgJGNnaS0+Y2hlY2tib3goLW5hbWUgPT4gJ3NyJywgLXZhbHVlID0+IDEsIC1sYWJlbCA9PiAncmUnLAorCSAgICAgICAgICAgICAgICAgICAgIC1jaGVja2VkID0+ICRzZWFyY2hfdXNlX3JlZ2V4cCkgLgorCSAgICAgICI8L3NwYW4+IiAuCisJICAgICAgIjwvZGl2PiIgLgorCSAgICAgICRjZ2ktPmVuZF9mb3JtKCkgLiAiXG4iOworfQorCitzdWIgZ2l0X2hlYWRlcl9odG1sIHsKKwlteSAkc3RhdHVzID0gc2hpZnQgfHwgIjIwMCBPSyI7CisJbXkgJGV4cGlyZXMgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCisJbXkgJHRpdGxlID0gZ2V0X3BhZ2VfdGl0bGUoKTsKKwlteSAkY29udGVudF90eXBlID0gZ2V0X2NvbnRlbnRfdHlwZV9odG1sKCk7CisJcHJpbnQgJGNnaS0+aGVhZGVyKC10eXBlPT4kY29udGVudF90eXBlLCAtY2hhcnNldCA9PiAndXRmLTgnLAorCSAgICAgICAgICAgICAgICAgICAtc3RhdHVzPT4gJHN0YXR1cywgLWV4cGlyZXMgPT4gJGV4cGlyZXMpCisJCXVubGVzcyAoJG9wdHN7Jy1ub19odHRwX2hlYWRlcid9KTsKKwlteSAkbW9kX3BlcmxfdmVyc2lvbiA9ICRFTlZ7J01PRF9QRVJMJ30gPyAiICRFTlZ7J01PRF9QRVJMJ30iIDogJyc7CisJcHJpbnQgPDxFT0Y7Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbi1VUyIgbGFuZz0iZW4tVVMiPgorPCEtLSBnaXQgd2ViIGludGVyZmFjZSB2ZXJzaW9uICR2ZXJzaW9uLCAoQykgMjAwNS0yMDA2LCBLYXkgU2lldmVycyA8a2F5LnNpZXZlcnNcQHZyZnkub3JnPiwgQ2hyaXN0aWFuIEdpZXJrZSAtLT4KKzwhLS0gZ2l0IGNvcmUgYmluYXJpZXMgdmVyc2lvbiAkZ2l0X3ZlcnNpb24gLS0+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0iJGNvbnRlbnRfdHlwZTsgY2hhcnNldD11dGYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJnaXR3ZWIvJHZlcnNpb24gZ2l0LyRnaXRfdmVyc2lvbiRtb2RfcGVybF92ZXJzaW9uIi8+Cis8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9ImluZGV4LCBub2ZvbGxvdyIvPgorPHRpdGxlPiR0aXRsZTwvdGl0bGU+CitFT0YKKwkjIHRoZSBzdHlsZXNoZWV0LCBmYXZpY29uIGV0YyB1cmxzIHdvbid0IHdvcmsgY29ycmVjdGx5IHdpdGggcGF0aF9pbmZvCisJIyB1bmxlc3Mgd2Ugc2V0IHRoZSBhcHByb3ByaWF0ZSBiYXNlIFVSTAorCWlmICgkRU5WeydQQVRIX0lORk8nfSkgeworCQlwcmludCAiPGJhc2UgaHJlZj1cIiIuZXNjX3VybCgkYmFzZV91cmwpLiJcIiAvPlxuIjsKKwl9CisJcHJpbnRfaGVhZGVyX2xpbmtzKCRzdGF0dXMpOworCisJaWYgKGRlZmluZWQgJHNpdGVfaHRtbF9oZWFkX3N0cmluZykgeworCQlwcmludCB0b191dGY4KCRzaXRlX2h0bWxfaGVhZF9zdHJpbmcpOworCX0KKworCXByaW50ICI8L2hlYWQ+XG4iIC4KKwkgICAgICAiPGJvZHk+XG4iOworCisJaWYgKGRlZmluZWQgJHNpdGVfaGVhZGVyICYmIC1mICRzaXRlX2hlYWRlcikgeworCQlpbnNlcnRfZmlsZSgkc2l0ZV9oZWFkZXIpOworCX0KKworCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9oZWFkZXJcIj5cbiI7CisJaWYgKGRlZmluZWQgJGxvZ28pIHsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gZXNjX3VybCgkbG9nb191cmwpLAorCQkgICAgICAgICAgICAgICAtdGl0bGUgPT4gJGxvZ29fbGFiZWx9LAorCQkgICAgICAgICAgICAgICRjZ2ktPmltZyh7LXNyYyA9PiBlc2NfdXJsKCRsb2dvKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIC13aWR0aCA9PiA3MiwgLWhlaWdodCA9PiAyNywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIC1hbHQgPT4gImdpdCIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxvZ28ifSkpOworCX0KKwlwcmludF9uYXZfYnJlYWRjcnVtYnMoJW9wdHMpOworCXByaW50ICI8L2Rpdj5cbiI7CisKKwlteSAkaGF2ZV9zZWFyY2ggPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnc2VhcmNoJyk7CisJaWYgKGRlZmluZWQgJHByb2plY3QgJiYgJGhhdmVfc2VhcmNoKSB7CisJCXByaW50X3NlYXJjaF9mb3JtKCk7CisJfQorfQorCitzdWIgZ2l0X2Zvb3Rlcl9odG1sIHsKKwlteSAkZmVlZF9jbGFzcyA9ICdyc3NfbG9nbyc7CisKKwlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfZm9vdGVyXCI+XG4iOworCWlmIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCW15ICRkZXNjciA9IGdpdF9nZXRfcHJvamVjdF9kZXNjcmlwdGlvbigkcHJvamVjdCk7CisJCWlmIChkZWZpbmVkICRkZXNjcikgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2Zvb3Rlcl90ZXh0XCI+IiAuIGVzY19odG1sKCRkZXNjcikgLiAiPC9kaXY+XG4iOworCQl9CisKKwkJbXkgJWhyZWZfcGFyYW1zID0gZ2V0X2ZlZWRfaW5mbygpOworCQlpZiAoISVocmVmX3BhcmFtcykgeworCQkJJGZlZWRfY2xhc3MgLj0gJyBnZW5lcmljJzsKKwkJfQorCQkkaHJlZl9wYXJhbXN7Jy10aXRsZSd9IHx8PSAnbG9nJzsKKworCQlmb3JlYWNoIG15ICRmb3JtYXQgKHF3KFJTUyBBdG9tKSkgeworCQkJJGhyZWZfcGFyYW1zeydhY3Rpb24nfSA9IGxjKCRmb3JtYXQpOworCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZiglaHJlZl9wYXJhbXMpLAorCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gIiRocmVmX3BhcmFtc3snLXRpdGxlJ30gJGZvcm1hdCBmZWVkIiwKKwkJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICRmZWVkX2NsYXNzfSwgJGZvcm1hdCkuIlxuIjsKKwkJfQorCisJfSBlbHNlIHsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT51bmRlZiwgYWN0aW9uPT4ib3BtbCIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF9maWx0ZXIgPT4gJHByb2plY3RfZmlsdGVyKSwKKwkJICAgICAgICAgICAgICAtY2xhc3MgPT4gJGZlZWRfY2xhc3N9LCAiT1BNTCIpIC4gIiAiOworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJwcm9qZWN0X2luZGV4IiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0X2ZpbHRlciA9PiAkcHJvamVjdF9maWx0ZXIpLAorCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAkZmVlZF9jbGFzc30sICJUWFQiKSAuICJcbiI7CisJfQorCXByaW50ICI8L2Rpdj5cbiI7ICMgY2xhc3M9InBhZ2VfZm9vdGVyIgorCisJaWYgKGRlZmluZWQgJHQwICYmIGdpdHdlYl9jaGVja19mZWF0dXJlKCd0aW1lZCcpKSB7CisJCXByaW50ICI8ZGl2IGlkPVwiZ2VuZXJhdGluZ19pbmZvXCI+XG4iOworCQlwcmludCAnVGhpcyBwYWdlIHRvb2sgJy4KKwkJICAgICAgJzxzcGFuIGlkPSJnZW5lcmF0aW5nX3RpbWUiIGNsYXNzPSJ0aW1lX3NwYW4iPicuCisJCSAgICAgIHR2X2ludGVydmFsKCR0MCwgWyBnZXR0aW1lb2ZkYXkoKSBdKS4KKwkJICAgICAgJyBzZWNvbmRzIDwvc3Bhbj4nLgorCQkgICAgICAnIGFuZCAnLgorCQkgICAgICAnPHNwYW4gaWQ9ImdlbmVyYXRpbmdfY21kIj4nLgorCQkgICAgICAkbnVtYmVyX29mX2dpdF9jbWRzLgorCQkgICAgICAnPC9zcGFuPiBnaXQgY29tbWFuZHMgJy4KKwkJICAgICAgIiB0byBnZW5lcmF0ZS5cbiI7CisJCXByaW50ICI8L2Rpdj5cbiI7ICMgY2xhc3M9InBhZ2VfZm9vdGVyIgorCX0KKworCWlmIChkZWZpbmVkICRzaXRlX2Zvb3RlciAmJiAtZiAkc2l0ZV9mb290ZXIpIHsKKwkJaW5zZXJ0X2ZpbGUoJHNpdGVfZm9vdGVyKTsKKwl9CisKKwlwcmludCBxcSE8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIhLmVzY191cmwoJGphdmFzY3JpcHQpLnFxISI+PC9zY3JpcHQ+XG4hOworCWlmIChkZWZpbmVkICRhY3Rpb24gJiYKKwkgICAgJGFjdGlvbiBlcSAnYmxhbWVfaW5jcmVtZW50YWwnKSB7CisJCXByaW50IHFxITxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5cbiEuCisJCSAgICAgIHFxIXN0YXJ0QmxhbWUoIiEuIGhyZWYoYWN0aW9uPT4iYmxhbWVfZGF0YSIsIC1yZXBsYXk9PjEpIC5xcSEiLFxuIS4KKwkJICAgICAgcXEhICAgICAgICAgICAiIS4gaHJlZigpIC5xcSEiKTtcbiEuCisJCSAgICAgIHFxITwvc2NyaXB0PlxuITsKKwl9IGVsc2UgeworCQlteSAoJGpzdGltZXpvbmUsICR0el9jb29raWUsICRkYXRldGltZV9jbGFzcykgPQorCQkJZ2l0d2ViX2dldF9mZWF0dXJlKCdqYXZhc2NyaXB0LXRpbWV6b25lJyk7CisKKwkJcHJpbnQgcXEhPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPlxuIS4KKwkJICAgICAgcXEhd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiE7CisJCWlmIChnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnamF2YXNjcmlwdC1hY3Rpb25zJykpIHsKKwkJCXByaW50IHFxIQlmaXhMaW5rcygpO1xuITsKKwkJfQorCQlpZiAoJGpzdGltZXpvbmUgJiYgJHR6X2Nvb2tpZSAmJiAkZGF0ZXRpbWVfY2xhc3MpIHsKKwkJCXByaW50IHFxIQl2YXIgdHpfY29va2llID0geyBuYW1lOiAnJHR6X2Nvb2tpZScsIGV4cGlyZXM6IDE0LCBwYXRoOiAnLycgfTtcbiEuICMgaW4gZGF5cworCQkJICAgICAgcXEhCW9ubG9hZFRaU2V0dXAoJyRqc3RpbWV6b25lJywgdHpfY29va2llLCAnJGRhdGV0aW1lX2NsYXNzJyk7XG4hOworCQl9CisJCXByaW50IHFxIX07XG4hLgorCQkgICAgICBxcSE8L3NjcmlwdD5cbiE7CisJfQorCisJcHJpbnQgIjwvYm9keT5cbiIgLgorCSAgICAgICI8L2h0bWw+IjsKK30KKworIyBkaWVfZXJyb3IoPGh0dHBfc3RhdHVzX2NvZGU+LCA8ZXJyb3JfbWVzc2FnZT5bLCA8ZGV0YWlsZWRfaHRtbF9kZXNjcmlwdGlvbj5dKQorIyBFeGFtcGxlOiBkaWVfZXJyb3IoNDA0LCAnSGFzaCBub3QgZm91bmQnKQorIyBCeSBjb252ZW50aW9uLCB1c2UgdGhlIGZvbGxvd2luZyBzdGF0dXMgY29kZXMgKGFzIGRlZmluZWQgaW4gUkZDIDI2MTYpOgorIyA0MDA6IEludmFsaWQgb3IgbWlzc2luZyBDR0kgcGFyYW1ldGVycywgb3IKKyMgICAgICByZXF1ZXN0ZWQgb2JqZWN0IGV4aXN0cyBidXQgaGFzIHdyb25nIHR5cGUuCisjIDQwMzogUmVxdWVzdGVkIGZlYXR1cmUgKGxpa2UgInBpY2theGUiIG9yICJzbmFwc2hvdCIpIG5vdCBlbmFibGVkIG9uCisjICAgICAgdGhpcyBzZXJ2ZXIgb3IgcHJvamVjdC4KKyMgNDA0OiBSZXF1ZXN0ZWQgb2JqZWN0L3JldmlzaW9uL3Byb2plY3QgZG9lc24ndCBleGlzdC4KKyMgNTAwOiBUaGUgc2VydmVyIGlzbid0IGNvbmZpZ3VyZWQgcHJvcGVybHksIG9yCisjICAgICAgYW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQgKGUuZy4gZmFpbGVkIGFzc2VydGlvbnMgY2F1c2VkIGJ5IGJ1Z3MpLCBvcgorIyAgICAgIGFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQgKGUuZy4gdGhlIGdpdCBiaW5hcnkgZGllZCB1bmV4cGVjdGVkbHkpLgorIyA1MDM6IFRoZSBzZXJ2ZXIgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlIChiZWNhdXNlIGl0IGlzIG92ZXJsb2FkZWQsCisjICAgICAgb3IgZG93biBmb3IgbWFpbnRlbmFuY2UpLiAgR2VuZXJhbGx5LCB0aGlzIGlzIGEgdGVtcG9yYXJ5IHN0YXRlLgorc3ViIGRpZV9lcnJvciB7CisJbXkgJHN0YXR1cyA9IHNoaWZ0IHx8IDUwMDsKKwlteSAkZXJyb3IgPSBlc2NfaHRtbChzaGlmdCkgfHwgIkludGVybmFsIFNlcnZlciBFcnJvciI7CisJbXkgJGV4dHJhID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKworCW15ICVodHRwX3Jlc3BvbnNlcyA9ICgKKwkJNDAwID0+ICc0MDAgQmFkIFJlcXVlc3QnLAorCQk0MDMgPT4gJzQwMyBGb3JiaWRkZW4nLAorCQk0MDQgPT4gJzQwNCBOb3QgRm91bmQnLAorCQk1MDAgPT4gJzUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLAorCQk1MDMgPT4gJzUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlJywKKwkpOworCWdpdF9oZWFkZXJfaHRtbCgkaHR0cF9yZXNwb25zZXN7JHN0YXR1c30sIHVuZGVmLCAlb3B0cyk7CisJcHJpbnQgPDxFT0Y7Cis8ZGl2IGNsYXNzPSJwYWdlX2JvZHkiPgorPGJyIC8+PGJyIC8+Ciskc3RhdHVzIC0gJGVycm9yCis8YnIgLz4KK0VPRgorCWlmIChkZWZpbmVkICRleHRyYSkgeworCQlwcmludCAiPGhyIC8+XG4iIC4KKwkJICAgICAgIiRleHRyYVxuIjsKKwl9CisJcHJpbnQgIjwvZGl2PlxuIjsKKworCWdpdF9mb290ZXJfaHRtbCgpOworCWdvdG8gRE9ORV9HSVRXRUIKKwkJdW5sZXNzICgkb3B0c3snLWVycm9yX2hhbmRsZXInfSk7Cit9CisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMjIGZ1bmN0aW9ucyBwcmludGluZyBvciBvdXRwdXR0aW5nIEhUTUw6IG5hdmlnYXRpb24KKworc3ViIGdpdF9wcmludF9wYWdlX25hdiB7CisJbXkgKCRjdXJyZW50LCAkc3VwcHJlc3MsICRoZWFkLCAkdHJlZWhlYWQsICR0cmVlYmFzZSwgJGV4dHJhKSA9IEBfOworCSRleHRyYSA9ICcnIGlmICFkZWZpbmVkICRleHRyYTsgIyBwYWdlciBvciBmb3JtYXRzCisKKwlteSBAbmF2cyA9IHF3KHN1bW1hcnkgc2hvcnRsb2cgbG9nIGNvbW1pdCBjb21taXRkaWZmIHRyZWUpOworCWlmICgkc3VwcHJlc3MpIHsKKwkJQG5hdnMgPSBncmVwIHsgJF8gbmUgJHN1cHByZXNzIH0gQG5hdnM7CisJfQorCisJbXkgJWFyZyA9IG1hcCB7ICRfID0+IHthY3Rpb249PiRffSB9IEBuYXZzOworCWlmIChkZWZpbmVkICRoZWFkKSB7CisJCWZvciAocXcoY29tbWl0IGNvbW1pdGRpZmYpKSB7CisJCQkkYXJneyRffXsnaGFzaCd9ID0gJGhlYWQ7CisJCX0KKwkJaWYgKCRjdXJyZW50ID1+IG0vXih0cmVlIHwgbG9nIHwgc2hvcnRsb2cgfCBjb21taXQgfCBjb21taXRkaWZmIHwgc2VhcmNoKSQveCkgeworCQkJZm9yIChxdyhzaG9ydGxvZyBsb2cpKSB7CisJCQkJJGFyZ3skX317J2hhc2gnfSA9ICRoZWFkOworCQkJfQorCQl9CisJfQorCisJJGFyZ3sndHJlZSd9eydoYXNoJ30gPSAkdHJlZWhlYWQgaWYgZGVmaW5lZCAkdHJlZWhlYWQ7CisJJGFyZ3sndHJlZSd9eydoYXNoX2Jhc2UnfSA9ICR0cmVlYmFzZSBpZiBkZWZpbmVkICR0cmVlYmFzZTsKKworCW15IEBhY3Rpb25zID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdhY3Rpb25zJyk7CisJbXkgJXJlcGwgPSAoCisJCSclJyA9PiAnJScsCisJCSduJyA9PiAkcHJvamVjdCwgICAgICAgICAjIHByb2plY3QgbmFtZQorCQknZicgPT4gJGdpdF9kaXIsICAgICAgICAgIyBwcm9qZWN0IHBhdGggd2l0aGluIGZpbGVzeXN0ZW0KKwkJJ2gnID0+ICR0cmVlaGVhZCB8fCAnJywgICMgY3VycmVudCBoYXNoICgnaCcgcGFyYW1ldGVyKQorCQknYicgPT4gJHRyZWViYXNlIHx8ICcnLCAgIyBoYXNoIGJhc2UgKCdoYicgcGFyYW1ldGVyKQorCSk7CisJd2hpbGUgKEBhY3Rpb25zKSB7CisJCW15ICgkbGFiZWwsICRsaW5rLCAkcG9zKSA9IHNwbGljZShAYWN0aW9ucywwLDMpOworCQkjIGluc2VydAorCQlAbmF2cyA9IG1hcCB7ICRfIGVxICRwb3MgPyAoJF8sICRsYWJlbCkgOiAkXyB9IEBuYXZzOworCQkjIG11bmNoIG11bmNoCisJCSRsaW5rID1+IHMvJShbJW5maGJdKS8kcmVwbHskMX0vZzsKKwkJJGFyZ3skbGFiZWx9eydfaHJlZid9ID0gJGxpbms7CisJfQorCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX25hdlwiPlxuIiAuCisJCShqb2luICIgfCAiLAorCQkgbWFwIHsgJF8gZXEgJGN1cnJlbnQgPworCQkgICAgICAgJF8gOiAkY2dpLT5hKHstaHJlZiA9PiAoJGFyZ3skX317X2hyZWZ9ID8gJGFyZ3skX317X2hyZWZ9IDogaHJlZigleyRhcmd7JF99fSkpfSwgIiRfIikKKwkJIH0gQG5hdnMpOworCXByaW50ICI8YnIvPlxuJGV4dHJhPGJyLz5cbiIgLgorCSAgICAgICI8L2Rpdj5cbiI7Cit9CisKKyMgcmV0dXJucyBhIHN1Ym1lbnUgZm9yIHRoZSBuYWdpdmF0aW9uIG9mIHRoZSByZWZzIHZpZXdzICh0YWdzLCBoZWFkcywKKyMgcmVtb3Rlcykgd2l0aCB0aGUgY3VycmVudCB2aWV3IGRpc2FibGVkIGFuZCB0aGUgcmVtb3RlcyB2aWV3IG9ubHkKKyMgYXZhaWxhYmxlIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQKK3N1YiBmb3JtYXRfcmVmX3ZpZXdzIHsKKwlteSAoJGN1cnJlbnQpID0gQF87CisJbXkgQHJlZl92aWV3cyA9IHF3e3RhZ3MgaGVhZHN9OworCXB1c2ggQHJlZl92aWV3cywgJ3JlbW90ZXMnIGlmIGdpdHdlYl9jaGVja19mZWF0dXJlKCdyZW1vdGVfaGVhZHMnKTsKKwlyZXR1cm4gam9pbiAiIHwgIiwgbWFwIHsKKwkJJF8gZXEgJGN1cnJlbnQgPyAkXyA6CisJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kXyl9LCAkXykKKwl9IEByZWZfdmlld3MKK30KKworc3ViIGZvcm1hdF9wYWdpbmdfbmF2IHsKKwlteSAoJGFjdGlvbiwgJHBhZ2UsICRoYXNfbmV4dF9saW5rKSA9IEBfOworCW15ICRwYWdpbmdfbmF2OworCisKKwlpZiAoJHBhZ2UgPiAwKSB7CisJCSRwYWdpbmdfbmF2IC49CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PnVuZGVmKX0sICJmaXJzdCIpIC4KKwkJCSIgJnNkb3Q7ICIgLgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBwYWdlPT4kcGFnZS0xKSwKKwkJCSAgICAgICAgIC1hY2Nlc3NrZXkgPT4gInAiLCAtdGl0bGUgPT4gIkFsdC1wIn0sICJwcmV2Iik7CisJfSBlbHNlIHsKKwkJJHBhZ2luZ19uYXYgLj0gImZpcnN0ICZzZG90OyBwcmV2IjsKKwl9CisKKwlpZiAoJGhhc19uZXh0X2xpbmspIHsKKwkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgIiAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlKzEpLAorCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAibiIsIC10aXRsZSA9PiAiQWx0LW4ifSwgIm5leHQiKTsKKwl9IGVsc2UgeworCQkkcGFnaW5nX25hdiAuPSAiICZzZG90OyBuZXh0IjsKKwl9CisKKwlyZXR1cm4gJHBhZ2luZ19uYXY7Cit9CisKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIGZ1bmN0aW9ucyBwcmludGluZyBvciBvdXRwdXR0aW5nIEhUTUw6IGRpdgorCitzdWIgZ2l0X3ByaW50X2hlYWRlcl9kaXYgeworCW15ICgkYWN0aW9uLCAkdGl0bGUsICRoYXNoLCAkaGFzaF9iYXNlKSA9IEBfOworCW15ICVhcmdzID0gKCk7CisKKwkkYXJnc3snYWN0aW9uJ30gPSAkYWN0aW9uOworCSRhcmdzeydoYXNoJ30gPSAkaGFzaCBpZiAkaGFzaDsKKwkkYXJnc3snaGFzaF9iYXNlJ30gPSAkaGFzaF9iYXNlIGlmICRoYXNoX2Jhc2U7CisKKwlwcmludCAiPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuIiAuCisJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZiglYXJncyksIC1jbGFzcyA9PiAidGl0bGUifSwKKwkgICAgICAkdGl0bGUgPyAkdGl0bGUgOiAkYWN0aW9uKSAuCisJICAgICAgIlxuPC9kaXY+XG4iOworfQorCitzdWIgZm9ybWF0X3JlcG9fdXJsIHsKKwlteSAoJG5hbWUsICR1cmwpID0gQF87CisJcmV0dXJuICI8dHIgY2xhc3M9XCJtZXRhZGF0YV91cmxcIj48dGQ+JG5hbWU8L3RkPjx0ZD4kdXJsPC90ZD48L3RyPlxuIjsKK30KKworIyBHcm91cCBvdXRwdXQgYnkgcGxhY2luZyBpdCBpbiBhIERJViBlbGVtZW50IGFuZCBhZGRpbmcgYSBoZWFkZXIuCisjIE9wdGlvbnMgZm9yIHN0YXJ0X2RpdigpIGNhbiBiZSBwcm92aWRlZCBieSBwYXNzaW5nIGEgaGFzaCByZWZlcmVuY2UgYXMgdGhlCisjIGZpcnN0IHBhcmFtZXRlciB0byB0aGUgZnVuY3Rpb24uCisjIE9wdGlvbnMgdG8gZ2l0X3ByaW50X2hlYWRlcl9kaXYoKSBjYW4gYmUgcHJvdmlkZWQgYnkgcGFzc2luZyBhbiBhcnJheQorIyByZWZlcmVuY2UuIFRoaXMgbXVzdCBmb2xsb3cgdGhlIG9wdGlvbnMgdG8gc3RhcnRfZGl2IGlmIHRoZXkgYXJlIHByZXNlbnQuCisjIFRoZSBjb250ZW50IGNhbiBiZSBhIHNjYWxhciwgd2hpY2ggaXMgb3V0cHV0IGFzLWlzLCBhIHNjYWxhciByZWZlcmVuY2UsIHdoaWNoCisjIGlzIG91dHB1dCBhZnRlciBodG1sIGVzY2FwaW5nLCBhbiBJTyBoYW5kbGUgcGFzc2VkIGVpdGhlciBhcyAqaGFuZGxlIG9yCisjICpoYW5kbGV7SU99LCBvciBhIGZ1bmN0aW9uIHJlZmVyZW5jZS4gSW4gdGhlIGxhdHRlciBjYXNlIGFsbCBmb2xsb3dpbmcKKyMgcGFyYW1ldGVycyB3aWxsIGJlIHRha2VuIGFzIGFyZ3VtZW50IHRvIHRoZSBjb250ZW50IGZ1bmN0aW9uIGNhbGwuCitzdWIgZ2l0X3ByaW50X3NlY3Rpb24geworCW15ICgkZGl2X2FyZ3MsICRoZWFkZXJfYXJncywgJGNvbnRlbnQpOworCW15ICRhcmcgPSBzaGlmdDsKKwlpZiAocmVmKCRhcmcpIGVxICdIQVNIJykgeworCQkkZGl2X2FyZ3MgPSAkYXJnOworCQkkYXJnID0gc2hpZnQ7CisJfQorCWlmIChyZWYoJGFyZykgZXEgJ0FSUkFZJykgeworCQkkaGVhZGVyX2FyZ3MgPSAkYXJnOworCQkkYXJnID0gc2hpZnQ7CisJfQorCSRjb250ZW50ID0gJGFyZzsKKworCXByaW50ICRjZ2ktPnN0YXJ0X2RpdigkZGl2X2FyZ3MpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KEAkaGVhZGVyX2FyZ3MpOworCisJaWYgKHJlZigkY29udGVudCkgZXEgJ0NPREUnKSB7CisJCSRjb250ZW50LT4oQF8pOworCX0gZWxzaWYgKHJlZigkY29udGVudCkgZXEgJ1NDQUxBUicpIHsKKwkJcHJpbnQgZXNjX2h0bWwoJCRjb250ZW50KTsKKwl9IGVsc2lmIChyZWYoJGNvbnRlbnQpIGVxICdHTE9CJyBvciByZWYoJGNvbnRlbnQpIGVxICdJTzo6SGFuZGxlJykgeworCQlwcmludCA8JGNvbnRlbnQ+OworCX0gZWxzaWYgKCFyZWYoJGNvbnRlbnQpICYmIGRlZmluZWQoJGNvbnRlbnQpKSB7CisJCXByaW50ICRjb250ZW50OworCX0KKworCXByaW50ICRjZ2ktPmVuZF9kaXY7Cit9CisKK3N1YiBmb3JtYXRfdGltZXN0YW1wX2h0bWwgeworCW15ICRkYXRlID0gc2hpZnQ7CisJbXkgJHN0cnRpbWUgPSAkZGF0ZS0+eydyZmMyODIyJ307CisKKwlteSAodW5kZWYsIHVuZGVmLCAkZGF0ZXRpbWVfY2xhc3MpID0KKwkJZ2l0d2ViX2dldF9mZWF0dXJlKCdqYXZhc2NyaXB0LXRpbWV6b25lJyk7CisJaWYgKCRkYXRldGltZV9jbGFzcykgeworCQkkc3RydGltZSA9IHFxITxzcGFuIGNsYXNzPSIkZGF0ZXRpbWVfY2xhc3MiPiRzdHJ0aW1lPC9zcGFuPiE7CisJfQorCisJbXkgJGxvY2FsdGltZV9mb3JtYXQgPSAnKCUwMmQ6JTAyZCAlcyknOworCWlmICgkZGF0ZS0+eydob3VyX2xvY2FsJ30gPCA2KSB7CisJCSRsb2NhbHRpbWVfZm9ybWF0ID0gJyg8c3BhbiBjbGFzcz0iYXRuaWdodCI+JTAyZDolMDJkPC9zcGFuPiAlcyknOworCX0KKwkkc3RydGltZSAuPSAnICcgLgorCSAgICAgICAgICAgIHNwcmludGYoJGxvY2FsdGltZV9mb3JtYXQsCisJICAgICAgICAgICAgICAgICAgICAkZGF0ZS0+eydob3VyX2xvY2FsJ30sICRkYXRlLT57J21pbnV0ZV9sb2NhbCd9LCAkZGF0ZS0+eyd0el9sb2NhbCd9KTsKKworCXJldHVybiAkc3RydGltZTsKK30KKworIyBPdXRwdXRzIHRoZSBhdXRob3IgbmFtZSBhbmQgZGF0ZSBpbiBsb25nIGZvcm0KK3N1YiBnaXRfcHJpbnRfYXV0aG9yc2hpcCB7CisJbXkgJGNvID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKwlteSAkdGFnID0gJG9wdHN7LXRhZ30gfHwgJ2Rpdic7CisJbXkgJGF1dGhvciA9ICRjby0+eydhdXRob3JfbmFtZSd9OworCisJbXkgJWFkID0gcGFyc2VfZGF0ZSgkY28tPnsnYXV0aG9yX2Vwb2NoJ30sICRjby0+eydhdXRob3JfdHonfSk7CisJcHJpbnQgIjwkdGFnIGNsYXNzPVwiYXV0aG9yX2RhdGVcIj4iIC4KKwkgICAgICBmb3JtYXRfc2VhcmNoX2F1dGhvcigkYXV0aG9yLCAiYXV0aG9yIiwgZXNjX2h0bWwoJGF1dGhvcikpIC4KKwkgICAgICAiIFsiLmZvcm1hdF90aW1lc3RhbXBfaHRtbChcJWFkKS4iXSIuCisJICAgICAgZ2l0X2dldF9hdmF0YXIoJGNvLT57J2F1dGhvcl9lbWFpbCd9LCAtcGFkX2JlZm9yZSA9PiAxKSAuCisJICAgICAgIjwvJHRhZz5cbiI7Cit9CisKKyMgT3V0cHV0cyB0YWJsZSByb3dzIGNvbnRhaW5pbmcgdGhlIGZ1bGwgYXV0aG9yIG9yIGNvbW1pdHRlciBpbmZvcm1hdGlvbiwKKyMgaW4gdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgJ2NvbW1pdCcgdmlldyAoJiBzaW1pbGFyKS4KKyMgUGFyYW1ldGVycyBhcmUgYSBjb21taXQgaGFzaCByZWZlcmVuY2UsIGZvbGxvd2VkIGJ5IHRoZSBsaXN0IG9mIHBlb3BsZQorIyB0byBvdXRwdXQgaW5mb3JtYXRpb24gZm9yLiBJZiB0aGUgbGlzdCBpcyBlbXB0eSBpdCBkZWZhdWx0cyB0byBib3RoCisjIGF1dGhvciBhbmQgY29tbWl0dGVyLgorc3ViIGdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MgeworCW15ICRjbyA9IHNoaWZ0OworCSMgdG9vIGJhZCB3ZSBjYW4ndCB1c2UgQHBlb3BsZSA9IEBfIHx8ICgnYXV0aG9yJywgJ2NvbW1pdHRlcicpCisJbXkgQHBlb3BsZSA9IEBfOworCUBwZW9wbGUgPSAoJ2F1dGhvcicsICdjb21taXR0ZXInKSB1bmxlc3MgQHBlb3BsZTsKKwlmb3JlYWNoIG15ICR3aG8gKEBwZW9wbGUpIHsKKwkJbXkgJXdkID0gcGFyc2VfZGF0ZSgkY28tPnsiJHt3aG99X2Vwb2NoIn0sICRjby0+eyIke3dob31fdHoifSk7CisJCXByaW50ICI8dHI+PHRkPiR3aG88L3RkPjx0ZD4iIC4KKwkJICAgICAgZm9ybWF0X3NlYXJjaF9hdXRob3IoJGNvLT57IiR7d2hvfV9uYW1lIn0sICR3aG8sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY19odG1sKCRjby0+eyIke3dob31fbmFtZSJ9KSkgLiAiICIgLgorCQkgICAgICBmb3JtYXRfc2VhcmNoX2F1dGhvcigkY28tPnsiJHt3aG99X2VtYWlsIn0sICR3aG8sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY19odG1sKCI8IiAuICRjby0+eyIke3dob31fZW1haWwifSAuICI+IikpIC4KKwkJICAgICAgIjwvdGQ+PHRkIHJvd3NwYW49XCIyXCI+IiAuCisJCSAgICAgIGdpdF9nZXRfYXZhdGFyKCRjby0+eyIke3dob31fZW1haWwifSwgLXNpemUgPT4gJ2RvdWJsZScpIC4KKwkJICAgICAgIjwvdGQ+PC90cj5cbiIgLgorCQkgICAgICAiPHRyPiIgLgorCQkgICAgICAiPHRkPjwvdGQ+PHRkPiIgLgorCQkgICAgICBmb3JtYXRfdGltZXN0YW1wX2h0bWwoXCV3ZCkgLgorCQkgICAgICAiPC90ZD4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KK30KKworc3ViIGdpdF9wcmludF9wYWdlX3BhdGggeworCW15ICRuYW1lID0gc2hpZnQ7CisJbXkgJHR5cGUgPSBzaGlmdDsKKwlteSAkaGIgPSBzaGlmdDsKKworCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX3BhdGhcIj4iOworCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2hfYmFzZT0+JGhiKSwKKwkgICAgICAgICAgICAgIC10aXRsZSA9PiAndHJlZSByb290J30sIHRvX3V0ZjgoIlskcHJvamVjdF0iKSk7CisJcHJpbnQgIiAvICI7CisJaWYgKGRlZmluZWQgJG5hbWUpIHsKKwkJbXkgQGRpcm5hbWUgPSBzcGxpdCAnLycsICRuYW1lOworCQlteSAkYmFzZW5hbWUgPSBwb3AgQGRpcm5hbWU7CisJCW15ICRmdWxsbmFtZSA9ICcnOworCisJCWZvcmVhY2ggbXkgJGRpciAoQGRpcm5hbWUpIHsKKwkJCSRmdWxsbmFtZSAuPSAoJGZ1bGxuYW1lID8gJy8nIDogJycpIC4gJGRpcjsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGZpbGVfbmFtZT0+JGZ1bGxuYW1lLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYiksCisJCQkgICAgICAgICAgICAgIC10aXRsZSA9PiAkZnVsbG5hbWV9LCBlc2NfcGF0aCgkZGlyKSk7CisJCQlwcmludCAiIC8gIjsKKwkJfQorCQlpZiAoZGVmaW5lZCAkdHlwZSAmJiAkdHlwZSBlcSAnYmxvYicpIHsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGIpLAorCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gJG5hbWV9LCBlc2NfcGF0aCgkYmFzZW5hbWUpKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkdHlwZSAmJiAkdHlwZSBlcSAndHJlZScpIHsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGIpLAorCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gJG5hbWV9LCBlc2NfcGF0aCgkYmFzZW5hbWUpKTsKKwkJCXByaW50ICIgLyAiOworCQl9IGVsc2UgeworCQkJcHJpbnQgZXNjX3BhdGgoJGJhc2VuYW1lKTsKKwkJfQorCX0KKwlwcmludCAiPGJyLz48L2Rpdj5cbiI7Cit9CisKK3N1YiBnaXRfcHJpbnRfbG9nIHsKKwlteSAkbG9nID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKworCWlmICgkb3B0c3snLXJlbW92ZV90aXRsZSd9KSB7CisJCSMgcmVtb3ZlIHRpdGxlLCBpLmUuIGZpcnN0IGxpbmUgb2YgbG9nCisJCXNoaWZ0IEAkbG9nOworCX0KKwkjIHJlbW92ZSBsZWFkaW5nIGVtcHR5IGxpbmVzCisJd2hpbGUgKGRlZmluZWQgJGxvZy0+WzBdICYmICRsb2ctPlswXSBlcSAiIikgeworCQlzaGlmdCBAJGxvZzsKKwl9CisKKwkjIHByaW50IGxvZworCW15ICRza2lwX2JsYW5rX2xpbmUgPSAwOworCWZvcmVhY2ggbXkgJGxpbmUgKEAkbG9nKSB7CisJCWlmICgkbGluZSA9fiBtL15ccyooW0EtWl1bLUEtWmEtel0qLVtCYl15fENbQ2NdKTogLykgeworCQkJaWYgKCEgJG9wdHN7Jy1yZW1vdmVfc2lnbm9mZid9KSB7CisJCQkJcHJpbnQgIjxzcGFuIGNsYXNzPVwic2lnbm9mZlwiPiIgLiBlc2NfaHRtbCgkbGluZSkgLiAiPC9zcGFuPjxici8+XG4iOworCQkJCSRza2lwX2JsYW5rX2xpbmUgPSAxOworCQkJfQorCQkJbmV4dDsKKwkJfQorCisJCWlmICgkbGluZSA9fiBtLFxzKihbYS16XSpsaW5rKTogKGh0dHBzPzovL1xTKyksaSkgeworCQkJaWYgKCEgJG9wdHN7Jy1yZW1vdmVfc2lnbm9mZid9KSB7CisJCQkJcHJpbnQgIjxzcGFuIGNsYXNzPVwic2lnbm9mZlwiPiIgLiBlc2NfaHRtbCgkMSkgLiAiOiAiIC4KKwkJCQkJIjxhIGhyZWY9XCIiIC4gZXNjX2h0bWwoJDIpIC4gIlwiPiIgLiBlc2NfaHRtbCgkMikgLiAiPC9hPiIgLgorCQkJCQkiPC9zcGFuPjxici8+XG4iOworCQkJCSRza2lwX2JsYW5rX2xpbmUgPSAxOworCQkJfQorCQkJbmV4dDsKKwkJfQorCisJCSMgcHJpbnQgb25seSBvbmUgZW1wdHkgbGluZQorCQkjIGRvIG5vdCBwcmludCBlbXB0eSBsaW5lIGFmdGVyIHNpZ25vZmYKKwkJaWYgKCRsaW5lIGVxICIiKSB7CisJCQluZXh0IGlmICgkc2tpcF9ibGFua19saW5lKTsKKwkJCSRza2lwX2JsYW5rX2xpbmUgPSAxOworCQl9IGVsc2UgeworCQkJJHNraXBfYmxhbmtfbGluZSA9IDA7CisJCX0KKworCQlwcmludCBmb3JtYXRfbG9nX2xpbmVfaHRtbCgkbGluZSkgLiAiPGJyLz5cbiI7CisJfQorCisJaWYgKCRvcHRzeyctZmluYWxfZW1wdHlfbGluZSd9KSB7CisJCSMgZW5kIHdpdGggc2luZ2xlIGVtcHR5IGxpbmUKKwkJcHJpbnQgIjxici8+XG4iIHVubGVzcyAkc2tpcF9ibGFua19saW5lOworCX0KK30KKworIyByZXR1cm4gbGluayB0YXJnZXQgKHdoYXQgbGluayBwb2ludHMgdG8pCitzdWIgZ2l0X2dldF9saW5rX3RhcmdldCB7CisJbXkgJGhhc2ggPSBzaGlmdDsKKwlteSAkbGlua190YXJnZXQ7CisKKwkjIHJlYWQgbGluaworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJjYXQtZmlsZSIsICJibG9iIiwgJGhhc2gKKwkJb3IgcmV0dXJuOworCXsKKwkJbG9jYWwgJC8gPSB1bmRlZjsKKwkJJGxpbmtfdGFyZ2V0ID0gPCRmZD47CisJfQorCWNsb3NlICRmZAorCQlvciByZXR1cm47CisKKwlyZXR1cm4gJGxpbmtfdGFyZ2V0OworfQorCisjIGdpdmVuIGxpbmsgdGFyZ2V0LCBhbmQgdGhlIGRpcmVjdG9yeSAoYmFzZWRpcikgdGhlIGxpbmsgaXMgaW4sCisjIHJldHVybiB0YXJnZXQgb2YgbGluayByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5ICh0b3AgdHJlZSk7CisjIHJldHVybiB1bmRlZiBpZiBpdCBpcyBub3QgcG9zc2libGUgKGluY2x1ZGluZyBhYnNvbHV0ZSBsaW5rcykuCitzdWIgbm9ybWFsaXplX2xpbmtfdGFyZ2V0IHsKKwlteSAoJGxpbmtfdGFyZ2V0LCAkYmFzZWRpcikgPSBAXzsKKworCSMgYWJzb2x1dGUgc3ltbGlua3MgKGJlZ2lubmluZyB3aXRoICcvJykgY2Fubm90IGJlIG5vcm1hbGl6ZWQKKwlyZXR1cm4gaWYgKHN1YnN0cigkbGlua190YXJnZXQsIDAsIDEpIGVxICcvJyk7CisKKwkjIG5vcm1hbGl6ZSBsaW5rIHRhcmdldCB0byBwYXRoIGZyb20gdG9wIChyb290KSB0cmVlIChkaXIpCisJbXkgJHBhdGg7CisJaWYgKCRiYXNlZGlyKSB7CisJCSRwYXRoID0gJGJhc2VkaXIgLiAnLycgLiAkbGlua190YXJnZXQ7CisJfSBlbHNlIHsKKwkJIyB3ZSBhcmUgaW4gdG9wIChyb290KSB0cmVlIChkaXIpCisJCSRwYXRoID0gJGxpbmtfdGFyZ2V0OworCX0KKworCSMgcmVtb3ZlIC8vLCAvLi8sIGFuZCAvLi4vCisJbXkgQHBhdGhfcGFydHM7CisJZm9yZWFjaCBteSAkcGFydCAoc3BsaXQoJy8nLCAkcGF0aCkpIHsKKwkJIyBkaXNjYXJkICcuJyBhbmQgJycKKwkJbmV4dCBpZiAoISRwYXJ0IHx8ICRwYXJ0IGVxICcuJyk7CisJCSMgaGFuZGxlICcuLicKKwkJaWYgKCRwYXJ0IGVxICcuLicpIHsKKwkJCWlmIChAcGF0aF9wYXJ0cykgeworCQkJCXBvcCBAcGF0aF9wYXJ0czsKKwkJCX0gZWxzZSB7CisJCQkJIyBsaW5rIGxlYWRzIG91dHNpZGUgcmVwb3NpdG9yeSAob3V0c2lkZSB0b3AgZGlyKQorCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXB1c2ggQHBhdGhfcGFydHMsICRwYXJ0OworCQl9CisJfQorCSRwYXRoID0gam9pbignLycsIEBwYXRoX3BhcnRzKTsKKworCXJldHVybiAkcGF0aDsKK30KKworIyBwcmludCB0cmVlIGVudHJ5IChyb3cgb2YgZ2l0X3RyZWUpLCBidXQgd2l0aG91dCBlbmNvbXBhc3NpbmcgPHRyPiBlbGVtZW50CitzdWIgZ2l0X3ByaW50X3RyZWVfZW50cnkgeworCW15ICgkdCwgJGJhc2VkaXIsICRoYXNoX2Jhc2UsICRoYXZlX2JsYW1lKSA9IEBfOworCisJbXkgJWJhc2Vfa2V5ID0gKCk7CisJJGJhc2Vfa2V5eydoYXNoX2Jhc2UnfSA9ICRoYXNoX2Jhc2UgaWYgZGVmaW5lZCAkaGFzaF9iYXNlOworCisJIyBUaGUgZm9ybWF0IG9mIGEgdGFibGUgcm93IGlzOiBtb2RlIGxpc3QgbGluay4gIFdoZXJlIG1vZGUgaXMKKwkjIHRoZSBtb2RlIG9mIHRoZSBlbnRyeSwgbGlzdCBpcyB0aGUgbmFtZSBvZiB0aGUgZW50cnksIGFuIGhyZWYsCisJIyBhbmQgbGluayBpcyB0aGUgYWN0aW9uIGxpbmtzIG9mIHRoZSBlbnRyeS4KKworCXByaW50ICI8dGQgY2xhc3M9XCJtb2RlXCI+IiAuIG1vZGVfc3RyKCR0LT57J21vZGUnfSkgLiAiPC90ZD5cbiI7CisJaWYgKGV4aXN0cyAkdC0+eydzaXplJ30pIHsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cInNpemVcIj4kdC0+eydzaXplJ308L3RkPlxuIjsKKwl9CisJaWYgKCR0LT57J3R5cGUnfSBlcSAiYmxvYiIpIHsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpc3RcIj4iIC4KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiR0LT57J2hhc2gnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iLCAlYmFzZV9rZXkpLAorCQkJICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJHQtPnsnbmFtZSd9KSk7CisJCWlmIChTX0lTTE5LKG9jdCAkdC0+eydtb2RlJ30pKSB7CisJCQlteSAkbGlua190YXJnZXQgPSBnaXRfZ2V0X2xpbmtfdGFyZ2V0KCR0LT57J2hhc2gnfSk7CisJCQlpZiAoJGxpbmtfdGFyZ2V0KSB7CisJCQkJbXkgJG5vcm1fdGFyZ2V0ID0gbm9ybWFsaXplX2xpbmtfdGFyZ2V0KCRsaW5rX3RhcmdldCwgJGJhc2VkaXIpOworCQkJCWlmIChkZWZpbmVkICRub3JtX3RhcmdldCkgeworCQkJCQlwcmludCAiIC0+ICIgLgorCQkJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Im9iamVjdCIsIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRub3JtX3RhcmdldCksCisJCQkJCSAgICAgICAgICAgICAgIC10aXRsZSA9PiAkbm9ybV90YXJnZXR9LCBlc2NfcGF0aCgkbGlua190YXJnZXQpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludCAiIC0+ICIgLiBlc2NfcGF0aCgkbGlua190YXJnZXQpOworCQkJCX0KKwkJCX0KKwkJfQorCQlwcmludCAiPC90ZD5cbiI7CisJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaD0+JHQtPnsnaGFzaCd9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9IiwgJWJhc2Vfa2V5KX0sCisJCSAgICAgICAgICAgICAgImJsb2IiKTsKKwkJaWYgKCRoYXZlX2JsYW1lKSB7CisJCQlwcmludCAiIHwgIiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lIiwgaGFzaD0+JHQtPnsnaGFzaCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIsICViYXNlX2tleSl9LAorCQkJICAgICAgICAgICAgICAiYmxhbWUiKTsKKwkJfQorCQlpZiAoZGVmaW5lZCAkaGFzaF9iYXNlKSB7CisJCQlwcmludCAiIHwgIiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiR0LT57J2hhc2gnfSwgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iKX0sCisJCQkgICAgICAgICAgICAgICJoaXN0b3J5Iik7CisJCX0KKwkJcHJpbnQgIiB8ICIgLgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iX3BsYWluIiwgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIpfSwKKwkJCSAgICAgICAgInJhdyIpOworCQlwcmludCAiPC90ZD5cbiI7CisKKwl9IGVsc2lmICgkdC0+eyd0eXBlJ30gZXEgInRyZWUiKSB7CisJCXByaW50ICI8dGQgY2xhc3M9XCJsaXN0XCI+IjsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JHQtPnsnaGFzaCd9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9IiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlYmFzZV9rZXkpfSwKKwkJICAgICAgICAgICAgICBlc2NfcGF0aCgkdC0+eyduYW1lJ30pKTsKKwkJcHJpbnQgIjwvdGQ+XG4iOworCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiR0LT57J2hhc2gnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWJhc2Vfa2V5KX0sCisJCSAgICAgICAgICAgICAgInRyZWUiKTsKKwkJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSkgeworCQkJcHJpbnQgIiB8ICIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIpfSwKKwkJCSAgICAgICAgICAgICAgImhpc3RvcnkiKTsKKwkJfQorCQlwcmludCAiPC90ZD5cbiI7CisJfSBlbHNlIHsKKwkJIyB1bmtub3duIG9iamVjdDogd2UgY2FuIG9ubHkgcHJlc2VudCBoaXN0b3J5IGZvciBpdAorCQkjICh0aGlzIGluY2x1ZGVzICdjb21taXQnIG9iamVjdCwgaS5lLiBzdWJtb2R1bGUgc3VwcG9ydCkKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpc3RcIj4iIC4KKwkJICAgICAgZXNjX3BhdGgoJHQtPnsnbmFtZSd9KSAuCisJCSAgICAgICI8L3RkPlxuIjsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQlpZiAoZGVmaW5lZCAkaGFzaF9iYXNlKSB7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9Iil9LAorCQkJICAgICAgICAgICAgICAiaGlzdG9yeSIpOworCQl9CisJCXByaW50ICI8L3RkPlxuIjsKKwl9Cit9CisKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIGZ1bmN0aW9ucyBwcmludGluZyBsYXJnZSBmcmFnbWVudHMgb2YgSFRNTAorCisjIGdldCBwcmUtaW1hZ2UgZmlsZW5hbWVzIGZvciBtZXJnZSAoY29tYmluZWQpIGRpZmYKK3N1YiBmaWxsX2Zyb21fZmlsZV9pbmZvIHsKKwlteSAoJGRpZmYsIEBwYXJlbnRzKSA9IEBfOworCisJJGRpZmYtPnsnZnJvbV9maWxlJ30gPSBbIF07CisJJGRpZmYtPnsnZnJvbV9maWxlJ31bJGRpZmYtPnsnbnBhcmVudHMnfSAtIDFdID0gdW5kZWY7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgJGRpZmYtPnsnbnBhcmVudHMnfTsgJGkrKykgeworCQlpZiAoJGRpZmYtPnsnc3RhdHVzJ31bJGldIGVxICdSJyB8fAorCQkgICAgJGRpZmYtPnsnc3RhdHVzJ31bJGldIGVxICdDJykgeworCQkJJGRpZmYtPnsnZnJvbV9maWxlJ31bJGldID0KKwkJCQlnaXRfZ2V0X3BhdGhfYnlfaGFzaCgkcGFyZW50c1skaV0sICRkaWZmLT57J2Zyb21faWQnfVskaV0pOworCQl9CisJfQorCisJcmV0dXJuICRkaWZmOworfQorCisjIGlzIGN1cnJlbnQgcmF3IGRpZmZ0cmVlIGxpbmUgb2YgZmlsZSBkZWxldGlvbgorc3ViIGlzX2RlbGV0ZWQgeworCW15ICRkaWZmaW5mbyA9IHNoaWZ0OworCisJcmV0dXJuICRkaWZmaW5mby0+eyd0b19pZCd9IGVxICgnMCcgeCA0MCk7Cit9CisKKyMgZG9lcyBwYXRjaCBjb3JyZXNwb25kIHRvIFtwcmV2aW91c10gZGlmZnRyZWUgcmF3IGxpbmUKKyMgJGRpZmZpbmZvICAtIGhhc2hyZWYgb2YgcGFyc2VkIHJhdyBkaWZmIGZvcm1hdAorIyAkcGF0Y2hpbmZvIC0gaGFzaHJlZiBvZiBwYXJzZWQgcGF0Y2ggZGlmZiBmb3JtYXQKKyMgICAgICAgICAgICAgICh0aGUgc2FtZSBrZXlzIGFzIGluICRkaWZmaW5mbykKK3N1YiBpc19wYXRjaF9zcGxpdCB7CisJbXkgKCRkaWZmaW5mbywgJHBhdGNoaW5mbykgPSBAXzsKKworCXJldHVybiBkZWZpbmVkICRkaWZmaW5mbyAmJiBkZWZpbmVkICRwYXRjaGluZm8KKwkJJiYgJGRpZmZpbmZvLT57J3RvX2ZpbGUnfSBlcSAkcGF0Y2hpbmZvLT57J3RvX2ZpbGUnfTsKK30KKworCitzdWIgZ2l0X2RpZmZ0cmVlX2JvZHkgeworCW15ICgkZGlmZnRyZWUsICRoYXNoLCBAcGFyZW50cykgPSBAXzsKKwlteSAoJHBhcmVudCkgPSAkcGFyZW50c1swXTsKKwlteSAkaGF2ZV9ibGFtZSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdibGFtZScpOworCXByaW50ICI8ZGl2IGNsYXNzPVwibGlzdF9oZWFkXCI+XG4iOworCWlmICgkI3skZGlmZnRyZWV9ID4gMTApIHsKKwkJcHJpbnQoKCQjeyRkaWZmdHJlZX0gKyAxKSAuICIgZmlsZXMgY2hhbmdlZDpcbiIpOworCX0KKwlwcmludCAiPC9kaXY+XG4iOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cIiIgLgorCSAgICAgIChAcGFyZW50cyA+IDEgPyAiY29tYmluZWQgIiA6ICIiKSAuCisJICAgICAgImRpZmZfdHJlZVwiPlxuIjsKKworCSMgaGVhZGVyIG9ubHkgZm9yIGNvbWJpbmVkIGRpZmYgaW4gJ2NvbW1pdGRpZmYnIHZpZXcKKwlteSAkaGFzX2hlYWRlciA9IEAkZGlmZnRyZWUgJiYgQHBhcmVudHMgPiAxICYmICRhY3Rpb24gZXEgJ2NvbW1pdGRpZmYnOworCWlmICgkaGFzX2hlYWRlcikgeworCQkjIHRhYmxlIGhlYWRlcgorCQlwcmludCAiPHRoZWFkPjx0cj5cbiIgLgorCQkgICAgICAgIjx0aD48L3RoPjx0aD48L3RoPlxuIjsgIyBmaWxlbmFtZSwgcGF0Y2hOIGxpbmsKKwkJZm9yIChteSAkaSA9IDA7ICRpIDwgQHBhcmVudHM7ICRpKyspIHsKKwkJCW15ICRwYXIgPSAkcGFyZW50c1skaV07CisJCQlwcmludCAiPHRoPiIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGhhc2gsIGhhc2hfcGFyZW50PT4kcGFyKSwKKwkJCSAgICAgICAgICAgICAgIC10aXRsZSA9PiAnY29tbWl0ZGlmZiB0byBwYXJlbnQgbnVtYmVyICcgLgorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAoJGkrMSkgLiAnOiAnIC4gc3Vic3RyKCRwYXIsMCw3KX0sCisJCQkgICAgICAgICAgICAgICRpKzEpIC4KKwkJCSAgICAgICImbmJzcDs8L3RoPlxuIjsKKwkJfQorCQlwcmludCAiPC90cj48L3RoZWFkPlxuPHRib2R5PlxuIjsKKwl9CisKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlteSAkcGF0Y2hubyA9IDA7CisJZm9yZWFjaCBteSAkbGluZSAoQHskZGlmZnRyZWV9KSB7CisJCW15ICRkaWZmID0gcGFyc2VkX2RpZmZ0cmVlX2xpbmUoJGxpbmUpOworCisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisKKwkJaWYgKGV4aXN0cyAkZGlmZi0+eyducGFyZW50cyd9KSB7ICMgY29tYmluZWQgZGlmZgorCisJCQlmaWxsX2Zyb21fZmlsZV9pbmZvKCRkaWZmLCBAcGFyZW50cykKKwkJCQl1bmxlc3MgZXhpc3RzICRkaWZmLT57J2Zyb21fZmlsZSd9OworCisJCQlpZiAoIWlzX2RlbGV0ZWQoJGRpZmYpKSB7CisJCQkJIyBmaWxlIGV4aXN0cyBpbiB0aGUgcmVzdWx0IChjaGlsZCkgY29tbWl0CisJCQkJcHJpbnQgIjx0ZD4iIC4KKwkJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoKSwKKwkJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LCBlc2NfcGF0aCgkZGlmZi0+eyd0b19maWxlJ30pKSAuCisJCQkJICAgICAgIjwvdGQ+XG4iOworCQkJfSBlbHNlIHsKKwkJCQlwcmludCAiPHRkPiIgLgorCQkJCSAgICAgIGVzY19wYXRoKCRkaWZmLT57J3RvX2ZpbGUnfSkgLgorCQkJCSAgICAgICI8L3RkPlxuIjsKKwkJCX0KKworCQkJaWYgKCRhY3Rpb24gZXEgJ2NvbW1pdGRpZmYnKSB7CisJCQkJIyBsaW5rIHRvIHBhdGNoCisJCQkJJHBhdGNobm8rKzsKKwkJCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCQkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLWFuY2hvcj0+InBhdGNoJHBhdGNobm8iKX0sCisJCQkJICAgICAgICAgICAgICAicGF0Y2giKSAuCisJCQkJICAgICAgIiB8ICIgLgorCQkJCSAgICAgICI8L3RkPlxuIjsKKwkJCX0KKworCQkJbXkgJGhhc19oaXN0b3J5ID0gMDsKKwkJCW15ICRub3RfZGVsZXRlZCA9IDA7CisJCQlmb3IgKG15ICRpID0gMDsgJGkgPCAkZGlmZi0+eyducGFyZW50cyd9OyAkaSsrKSB7CisJCQkJbXkgJGhhc2hfcGFyZW50ID0gJHBhcmVudHNbJGldOworCQkJCW15ICRmcm9tX2hhc2ggPSAkZGlmZi0+eydmcm9tX2lkJ31bJGldOworCQkJCW15ICRmcm9tX3BhdGggPSAkZGlmZi0+eydmcm9tX2ZpbGUnfVskaV07CisJCQkJbXkgJHN0YXR1cyA9ICRkaWZmLT57J3N0YXR1cyd9WyRpXTsKKworCQkJCSRoYXNfaGlzdG9yeSB8fD0gKCRzdGF0dXMgbmUgJ0EnKTsKKwkJCQkkbm90X2RlbGV0ZWQgfHw9ICgkc3RhdHVzIG5lICdEJyk7CisKKwkJCQlpZiAoJHN0YXR1cyBlcSAnQScpIHsKKwkJCQkJcHJpbnQgIjx0ZCAgY2xhc3M9XCJsaW5rXCIgYWxpZ249XCJyaWdodFwiPiB8IDwvdGQ+XG4iOworCQkJCX0gZWxzaWYgKCRzdGF0dXMgZXEgJ0QnKSB7CisJCQkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCQkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZnJvbV9oYXNoLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZyb21fcGF0aCl9LAorCQkJCQkgICAgICAgICAgICAgICJibG9iIiAuICgkaSsxKSkgLgorCQkJCQkgICAgICAiIHwgPC90ZD5cbiI7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKCRkaWZmLT57J3RvX2lkJ30gZXEgJGZyb21faGFzaCkgeworCQkJCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmsgbm9jaGFuZ2VcIj4iOworCQkJCQl9IGVsc2UgeworCQkJCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQkJCQl9CisJCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYmRpZmYiLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9wYXJlbnQ9PiRmcm9tX2hhc2gsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX3BhcmVudF9iYXNlPT4kaGFzaF9wYXJlbnQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30sCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXJlbnQ9PiRmcm9tX3BhdGgpfSwKKwkJCQkJICAgICAgICAgICAgICAiZGlmZiIgLiAoJGkrMSkpIC4KKwkJCQkJICAgICAgIiB8IDwvdGQ+XG4iOworCQkJCX0KKwkJCX0KKworCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQkJaWYgKCRub3RfZGVsZXRlZCkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoKX0sCisJCQkJICAgICAgICAgICAgICAiYmxvYiIpOworCQkJCXByaW50ICIgfCAiIGlmICgkaGFzX2hpc3RvcnkpOworCQkJfQorCQkJaWYgKCRoYXNfaGlzdG9yeSkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gpfSwKKwkJCQkgICAgICAgICAgICAgICJoaXN0b3J5Iik7CisJCQl9CisJCQlwcmludCAiPC90ZD5cbiI7CisKKwkJCXByaW50ICI8L3RyPlxuIjsKKwkJCW5leHQ7ICMgaW5zdGVhZCBvZiAnZWxzZScgY2xhdXNlLCB0byBhdm9pZCBleHRyYSBpbmRlbnQKKwkJfQorCQkjIGVsc2Ugb3JkaW5hcnkgZGlmZgorCisJCW15ICgkdG9fbW9kZV9vY3QsICR0b19tb2RlX3N0ciwgJHRvX2ZpbGVfdHlwZSk7CisJCW15ICgkZnJvbV9tb2RlX29jdCwgJGZyb21fbW9kZV9zdHIsICRmcm9tX2ZpbGVfdHlwZSk7CisJCWlmICgkZGlmZi0+eyd0b19tb2RlJ30gbmUgKCcwJyB4IDYpKSB7CisJCQkkdG9fbW9kZV9vY3QgPSBvY3QgJGRpZmYtPnsndG9fbW9kZSd9OworCQkJaWYgKFNfSVNSRUcoJHRvX21vZGVfb2N0KSkgeyAjIG9ubHkgZm9yIHJlZ3VsYXIgZmlsZQorCQkJCSR0b19tb2RlX3N0ciA9IHNwcmludGYoIiUwNG8iLCAkdG9fbW9kZV9vY3QgJiAwNzc3KTsgIyBwZXJtaXNzaW9uIGJpdHMKKwkJCX0KKwkJCSR0b19maWxlX3R5cGUgPSBmaWxlX3R5cGUoJGRpZmYtPnsndG9fbW9kZSd9KTsKKwkJfQorCQlpZiAoJGRpZmYtPnsnZnJvbV9tb2RlJ30gbmUgKCcwJyB4IDYpKSB7CisJCQkkZnJvbV9tb2RlX29jdCA9IG9jdCAkZGlmZi0+eydmcm9tX21vZGUnfTsKKwkJCWlmIChTX0lTUkVHKCRmcm9tX21vZGVfb2N0KSkgeyAjIG9ubHkgZm9yIHJlZ3VsYXIgZmlsZQorCQkJCSRmcm9tX21vZGVfc3RyID0gc3ByaW50ZigiJTA0byIsICRmcm9tX21vZGVfb2N0ICYgMDc3Nyk7ICMgcGVybWlzc2lvbiBiaXRzCisJCQl9CisJCQkkZnJvbV9maWxlX3R5cGUgPSBmaWxlX3R5cGUoJGRpZmYtPnsnZnJvbV9tb2RlJ30pOworCQl9CisKKwkJaWYgKCRkaWZmLT57J3N0YXR1cyd9IGVxICJBIikgeyAjIGNyZWF0ZWQKKwkJCW15ICRtb2RlX2NobmcgPSAiPHNwYW4gY2xhc3M9XCJmaWxlX3N0YXR1cyBuZXdcIj5bbmV3ICR0b19maWxlX3R5cGUiOworCQkJJG1vZGVfY2huZyAgIC49ICIgd2l0aCBtb2RlOiAkdG9fbW9kZV9zdHIiIGlmICR0b19tb2RlX3N0cjsKKwkJCSRtb2RlX2NobmcgICAuPSAiXTwvc3Bhbj4iOworCQkJcHJpbnQgIjx0ZD4iOworCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJGRpZmYtPnsnZmlsZSd9KSk7CisJCQlwcmludCAiPC90ZD5cbiI7CisJCQlwcmludCAiPHRkPiRtb2RlX2Nobmc8L3RkPlxuIjsKKwkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJCWlmICgkYWN0aW9uIGVxICdjb21taXRkaWZmJykgeworCQkJCSMgbGluayB0byBwYXRjaAorCQkJCSRwYXRjaG5vKys7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtYW5jaG9yPT4icGF0Y2gkcGF0Y2hubyIpfSwKKwkJCQkgICAgICAgICAgICAgICJwYXRjaCIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0KKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkgICAgICAgICAgICAgICJibG9iIik7CisJCQlwcmludCAiPC90ZD5cbiI7CisKKwkJfSBlbHNpZiAoJGRpZmYtPnsnc3RhdHVzJ30gZXEgIkQiKSB7ICMgZGVsZXRlZAorCQkJbXkgJG1vZGVfY2huZyA9ICI8c3BhbiBjbGFzcz1cImZpbGVfc3RhdHVzIGRlbGV0ZWRcIj5bZGVsZXRlZCAkZnJvbV9maWxlX3R5cGVdPC9zcGFuPiI7CisJCQlwcmludCAiPHRkPiI7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eydmcm9tX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JHBhcmVudCwgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pLAorCQkJICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCRkaWZmLT57J2ZpbGUnfSkpOworCQkJcHJpbnQgIjwvdGQ+XG4iOworCQkJcHJpbnQgIjx0ZD4kbW9kZV9jaG5nPC90ZD5cbiI7CisJCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCQlpZiAoJGFjdGlvbiBlcSAnY29tbWl0ZGlmZicpIHsKKwkJCQkjIGxpbmsgdG8gcGF0Y2gKKwkJCQkkcGF0Y2hubysrOworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLWFuY2hvcj0+InBhdGNoJHBhdGNobm8iKX0sCisJCQkJICAgICAgICAgICAgICAicGF0Y2giKSAuCisJCQkJICAgICAgIiB8ICI7CisJCQl9CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eydmcm9tX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JHBhcmVudCwgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgImJsb2IiKSAuICIgfCAiOworCQkJaWYgKCRoYXZlX2JsYW1lKSB7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibGFtZSIsIGhhc2hfYmFzZT0+JHBhcmVudCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkJICAgICAgICAgICAgICAiYmxhbWUiKSAuICIgfCAiOworCQkJfQorCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgaGFzaF9iYXNlPT4kcGFyZW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSl9LAorCQkJICAgICAgICAgICAgICAiaGlzdG9yeSIpOworCQkJcHJpbnQgIjwvdGQ+XG4iOworCisJCX0gZWxzaWYgKCRkaWZmLT57J3N0YXR1cyd9IGVxICJNIiB8fCAkZGlmZi0+eydzdGF0dXMnfSBlcSAiVCIpIHsgIyBtb2RpZmllZCwgb3IgdHlwZSBjaGFuZ2VkCisJCQlteSAkbW9kZV9jaG5nZSA9ICIiOworCQkJaWYgKCRkaWZmLT57J2Zyb21fbW9kZSd9ICE9ICRkaWZmLT57J3RvX21vZGUnfSkgeworCQkJCSRtb2RlX2NobmdlID0gIjxzcGFuIGNsYXNzPVwiZmlsZV9zdGF0dXMgbW9kZV9jaG5nZVwiPltjaGFuZ2VkIjsKKwkJCQlpZiAoJGZyb21fZmlsZV90eXBlIG5lICR0b19maWxlX3R5cGUpIHsKKwkJCQkJJG1vZGVfY2huZ2UgLj0gIiBmcm9tICRmcm9tX2ZpbGVfdHlwZSB0byAkdG9fZmlsZV90eXBlIjsKKwkJCQl9CisJCQkJaWYgKCgkZnJvbV9tb2RlX29jdCAmIDA3NzcpICE9ICgkdG9fbW9kZV9vY3QgJiAwNzc3KSkgeworCQkJCQlpZiAoJGZyb21fbW9kZV9zdHIgJiYgJHRvX21vZGVfc3RyKSB7CisJCQkJCQkkbW9kZV9jaG5nZSAuPSAiIG1vZGU6ICRmcm9tX21vZGVfc3RyLT4kdG9fbW9kZV9zdHIiOworCQkJCQl9IGVsc2lmICgkdG9fbW9kZV9zdHIpIHsKKwkJCQkJCSRtb2RlX2NobmdlIC49ICIgbW9kZTogJHRvX21vZGVfc3RyIjsKKwkJCQkJfQorCQkJCX0KKwkJCQkkbW9kZV9jaG5nZSAuPSAiXTwvc3Bhbj5cbiI7CisJCQl9CisJCQlwcmludCAiPHRkPiI7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLCBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSksCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LCBlc2NfcGF0aCgkZGlmZi0+eydmaWxlJ30pKTsKKwkJCXByaW50ICI8L3RkPlxuIjsKKwkJCXByaW50ICI8dGQ+JG1vZGVfY2huZ2U8L3RkPlxuIjsKKwkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJCWlmICgkYWN0aW9uIGVxICdjb21taXRkaWZmJykgeworCQkJCSMgbGluayB0byBwYXRjaAorCQkJCSRwYXRjaG5vKys7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtYW5jaG9yPT4icGF0Y2gkcGF0Y2hubyIpfSwKKwkJCQkgICAgICAgICAgICAgICJwYXRjaCIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0gZWxzaWYgKCRkaWZmLT57J3RvX2lkJ30gbmUgJGRpZmYtPnsnZnJvbV9pZCd9KSB7CisJCQkJIyAiY29tbWl0IiB2aWV3IGFuZCBtb2RpZmllZCBmaWxlIChub3Qgb25sdSBtb2RlIGNoYW5nZWQpCisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iZGlmZiIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LCBoYXNoX3BhcmVudD0+JGRpZmYtPnsnZnJvbV9pZCd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwgaGFzaF9wYXJlbnRfYmFzZT0+JHBhcmVudCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkJICAgICAgICAgICAgICAiZGlmZiIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0KKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkgICAgICAgICAgICAgICAiYmxvYiIpIC4gIiB8ICI7CisJCQlpZiAoJGhhdmVfYmxhbWUpIHsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lIiwgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkJICAgICAgICAgICAgICAiYmxhbWUiKSAuICIgfCAiOworCQkJfQorCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgImhpc3RvcnkiKTsKKwkJCXByaW50ICI8L3RkPlxuIjsKKworCQl9IGVsc2lmICgkZGlmZi0+eydzdGF0dXMnfSBlcSAiUiIgfHwgJGRpZmYtPnsnc3RhdHVzJ30gZXEgIkMiKSB7ICMgcmVuYW1lZCBvciBjb3BpZWQKKwkJCW15ICVzdGF0dXNfbmFtZSA9ICgnUicgPT4gJ21vdmVkJywgJ0MnID0+ICdjb3BpZWQnKTsKKwkJCW15ICRuc3RhdHVzID0gJHN0YXR1c19uYW1leyRkaWZmLT57J3N0YXR1cyd9fTsKKwkJCW15ICRtb2RlX2NobmcgPSAiIjsKKwkJCWlmICgkZGlmZi0+eydmcm9tX21vZGUnfSAhPSAkZGlmZi0+eyd0b19tb2RlJ30pIHsKKwkJCQkjIG1vZGUgYWxzbyBmb3IgZGlyZWN0b3JpZXMsIHNvIHdlIGNhbm5vdCB1c2UgJHRvX21vZGVfc3RyCisJCQkJJG1vZGVfY2huZyA9IHNwcmludGYoIiwgbW9kZTogJTA0byIsICR0b19tb2RlX29jdCAmIDA3NzcpOworCQkJfQorCQkJcHJpbnQgIjx0ZD4iIC4KKwkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2hfYmFzZT0+JGhhc2gsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sIGZpbGVfbmFtZT0+JGRpZmYtPnsndG9fZmlsZSd9KSwKKwkJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCRkaWZmLT57J3RvX2ZpbGUnfSkpIC4gIjwvdGQ+XG4iIC4KKwkJCSAgICAgICI8dGQ+PHNwYW4gY2xhc3M9XCJmaWxlX3N0YXR1cyAkbnN0YXR1c1wiPlskbnN0YXR1cyBmcm9tICIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaF9iYXNlPT4kcGFyZW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZi0+eydmcm9tX2lkJ30sIGZpbGVfbmFtZT0+JGRpZmYtPnsnZnJvbV9maWxlJ30pLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJGRpZmYtPnsnZnJvbV9maWxlJ30pKSAuCisJCQkgICAgICAiIHdpdGggIiAuIChpbnQgJGRpZmYtPnsnc2ltaWxhcml0eSd9KSAuICIlIHNpbWlsYXJpdHkkbW9kZV9jaG5nXTwvc3Bhbj48L3RkPlxuIiAuCisJCQkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCQlpZiAoJGFjdGlvbiBlcSAnY29tbWl0ZGlmZicpIHsKKwkJCQkjIGxpbmsgdG8gcGF0Y2gKKwkJCQkkcGF0Y2hubysrOworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLWFuY2hvcj0+InBhdGNoJHBhdGNobm8iKX0sCisJCQkJICAgICAgICAgICAgICAicGF0Y2giKSAuCisJCQkJICAgICAgIiB8ICI7CisJCQl9IGVsc2lmICgkZGlmZi0+eyd0b19pZCd9IG5lICRkaWZmLT57J2Zyb21faWQnfSkgeworCQkJCSMgImNvbW1pdCIgdmlldyBhbmQgbW9kaWZpZWQgZmlsZSAobm90IG9ubHkgcHVyZSByZW5hbWUgb3IgY29weSkKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JkaWZmIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sIGhhc2hfcGFyZW50PT4kZGlmZi0+eydmcm9tX2lkJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLCBoYXNoX3BhcmVudF9iYXNlPT4kcGFyZW50LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30sIGZpbGVfcGFyZW50PT4kZGlmZi0+eydmcm9tX2ZpbGUnfSl9LAorCQkJCSAgICAgICAgICAgICAgImRpZmYiKSAuCisJCQkJICAgICAgIiB8ICI7CisJCQl9CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRwYXJlbnQsIGZpbGVfbmFtZT0+JGRpZmYtPnsndG9fZmlsZSd9KX0sCisJCQkgICAgICAgICAgICAgICJibG9iIikgLiAiIHwgIjsKKwkJCWlmICgkaGF2ZV9ibGFtZSkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWUiLCBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30pfSwKKwkJCQkgICAgICAgICAgICAgICJibGFtZSIpIC4gIiB8ICI7CisJCQl9CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsndG9fZmlsZSd9KX0sCisJCQkgICAgICAgICAgICAgICJoaXN0b3J5Iik7CisJCQlwcmludCAiPC90ZD5cbiI7CisKKwkJfSAjIHdlIHNob3VsZCBub3QgZW5jb3VudGVyIFVubWVyZ2VkIChVKSBvciBVbmtub3duIChYKSBzdGF0dXMKKwkJcHJpbnQgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90Ym9keT4iIGlmICRoYXNfaGVhZGVyOworCXByaW50ICI8L3RhYmxlPlxuIjsKK30KKworIyBQcmludCBjb250ZXh0IGxpbmVzIGFuZCB0aGVuIHJlbS9hZGQgbGluZXMgaW4gYSBzaWRlLWJ5LXNpZGUgbWFubmVyLgorc3ViIHByaW50X3NpZGVieXNpZGVfZGlmZl9saW5lcyB7CisJbXkgKCRjdHgsICRyZW0sICRhZGQpID0gQF87CisKKwkjIHByaW50IGNvbnRleHQgYmxvY2sgYmVmb3JlIGFkZC9yZW0gYmxvY2sKKwlpZiAoQCRjdHgpIHsKKwkJcHJpbnQgam9pbiAnJywKKwkJCSc8ZGl2IGNsYXNzPSJjaHVua19ibG9jayBjdHgiPicsCisJCQkJJzxkaXYgY2xhc3M9Im9sZCI+JywKKwkJCQlAJGN0eCwKKwkJCQknPC9kaXY+JywKKwkJCQknPGRpdiBjbGFzcz0ibmV3Ij4nLAorCQkJCUAkY3R4LAorCQkJCSc8L2Rpdj4nLAorCQkJJzwvZGl2Pic7CisJfQorCisJaWYgKCFAJGFkZCkgeworCQkjIHB1cmUgcmVtb3ZhbAorCQlwcmludCBqb2luICcnLAorCQkJJzxkaXYgY2xhc3M9ImNodW5rX2Jsb2NrIHJlbSI+JywKKwkJCQknPGRpdiBjbGFzcz0ib2xkIj4nLAorCQkJCUAkcmVtLAorCQkJCSc8L2Rpdj4nLAorCQkJJzwvZGl2Pic7CisJfSBlbHNpZiAoIUAkcmVtKSB7CisJCSMgcHVyZSBhZGRpdGlvbgorCQlwcmludCBqb2luICcnLAorCQkJJzxkaXYgY2xhc3M9ImNodW5rX2Jsb2NrIGFkZCI+JywKKwkJCQknPGRpdiBjbGFzcz0ibmV3Ij4nLAorCQkJCUAkYWRkLAorCQkJCSc8L2Rpdj4nLAorCQkJJzwvZGl2Pic7CisJfSBlbHNlIHsKKwkJcHJpbnQgam9pbiAnJywKKwkJCSc8ZGl2IGNsYXNzPSJjaHVua19ibG9jayBjaGciPicsCisJCQkJJzxkaXYgY2xhc3M9Im9sZCI+JywKKwkJCQlAJHJlbSwKKwkJCQknPC9kaXY+JywKKwkJCQknPGRpdiBjbGFzcz0ibmV3Ij4nLAorCQkJCUAkYWRkLAorCQkJCSc8L2Rpdj4nLAorCQkJJzwvZGl2Pic7CisJfQorfQorCisjIFByaW50IGNvbnRleHQgbGluZXMgYW5kIHRoZW4gcmVtL2FkZCBsaW5lcyBpbiBpbmxpbmUgbWFubmVyLgorc3ViIHByaW50X2lubGluZV9kaWZmX2xpbmVzIHsKKwlteSAoJGN0eCwgJHJlbSwgJGFkZCkgPSBAXzsKKworCXByaW50IEAkY3R4LCBAJHJlbSwgQCRhZGQ7Cit9CisKKyMgRm9ybWF0IHJlbW92ZWQgYW5kIGFkZGVkIGxpbmUsIG1hcmsgY2hhbmdlZCBwYXJ0IGFuZCBIVE1MLWZvcm1hdCB0aGVtLgorIyBJbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBjb250cmliL2RpZmYtaGlnaGxpZ2h0CitzdWIgZm9ybWF0X3JlbV9hZGRfbGluZXNfcGFpciB7CisJbXkgKCRyZW0sICRhZGQsICRudW1fcGFyZW50cykgPSBAXzsKKworCSMgV2UgbmVlZCB0byB1bnRhYmlmeSBsaW5lcyBiZWZvcmUgc3BsaXQoKSdpbmcgdGhlbTsKKwkjIG90aGVyd2lzZSBvZmZzZXRzIHdvdWxkIGJlIGludmFsaWQuCisJY2hvbXAgJHJlbTsKKwljaG9tcCAkYWRkOworCSRyZW0gPSB1bnRhYmlmeSgkcmVtKTsKKwkkYWRkID0gdW50YWJpZnkoJGFkZCk7CisKKwlteSBAcmVtID0gc3BsaXQoLy8sICRyZW0pOworCW15IEBhZGQgPSBzcGxpdCgvLywgJGFkZCk7CisJbXkgKCRlc2NfcmVtLCAkZXNjX2FkZCk7CisJIyBJZ25vcmUgbGVhZGluZyArLy0gY2hhcmFjdGVycyBmb3IgZWFjaCBwYXJlbnQuCisJbXkgKCRwcmVmaXhfbGVuLCAkc3VmZml4X2xlbikgPSAoJG51bV9wYXJlbnRzLCAwKTsKKwlteSAoJHByZWZpeF9oYXNfbm9uc3BhY2UsICRzdWZmaXhfaGFzX25vbnNwYWNlKTsKKworCW15ICRzaG9ydGVyID0gKEByZW0gPCBAYWRkKSA/IEByZW0gOiBAYWRkOworCXdoaWxlICgkcHJlZml4X2xlbiA8ICRzaG9ydGVyKSB7CisJCWxhc3QgaWYgKCRyZW1bJHByZWZpeF9sZW5dIG5lICRhZGRbJHByZWZpeF9sZW5dKTsKKworCQkkcHJlZml4X2hhc19ub25zcGFjZSA9IDEgaWYgKCRyZW1bJHByZWZpeF9sZW5dICF+IC9ccy8pOworCQkkcHJlZml4X2xlbisrOworCX0KKworCXdoaWxlICgkcHJlZml4X2xlbiArICRzdWZmaXhfbGVuIDwgJHNob3J0ZXIpIHsKKwkJbGFzdCBpZiAoJHJlbVstMSAtICRzdWZmaXhfbGVuXSBuZSAkYWRkWy0xIC0gJHN1ZmZpeF9sZW5dKTsKKworCQkkc3VmZml4X2hhc19ub25zcGFjZSA9IDEgaWYgKCRyZW1bLTEgLSAkc3VmZml4X2xlbl0gIX4gL1xzLyk7CisJCSRzdWZmaXhfbGVuKys7CisJfQorCisJIyBNYXJrIGxpbmVzIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIGVhY2ggb3RoZXIsIGJ1dCBoYXZlIHNvbWUgY29tbW9uCisJIyBwYXJ0IHRoYXQgaXNuJ3Qgd2hpdGVzcGFjZS4gIElmIGxpbmVzIGFyZSBjb21wbGV0ZWx5IGRpZmZlcmVudCwgZG9uJ3QKKwkjIG1hcmsgdGhlbSBiZWNhdXNlIHRoYXQgd291bGQgbWFrZSBvdXRwdXQgdW5yZWFkYWJsZSwgZXNwZWNpYWxseSBpZgorCSMgZGlmZiBjb25zaXN0cyBvZiBtdWx0aXBsZSBsaW5lcy4KKwlpZiAoJHByZWZpeF9oYXNfbm9uc3BhY2UgfHwgJHN1ZmZpeF9oYXNfbm9uc3BhY2UpIHsKKwkJJGVzY19yZW0gPSBlc2NfaHRtbF9obF9yZWdpb25zKCRyZW0sICdtYXJrZWQnLAorCQkgICAgICAgIFskcHJlZml4X2xlbiwgQHJlbSAtICRzdWZmaXhfbGVuXSwgLW5ic3A9PjEpOworCQkkZXNjX2FkZCA9IGVzY19odG1sX2hsX3JlZ2lvbnMoJGFkZCwgJ21hcmtlZCcsCisJCSAgICAgICAgWyRwcmVmaXhfbGVuLCBAYWRkIC0gJHN1ZmZpeF9sZW5dLCAtbmJzcD0+MSk7CisJfSBlbHNlIHsKKwkJJGVzY19yZW0gPSBlc2NfaHRtbCgkcmVtLCAtbmJzcD0+MSk7CisJCSRlc2NfYWRkID0gZXNjX2h0bWwoJGFkZCwgLW5ic3A9PjEpOworCX0KKworCXJldHVybiBmb3JtYXRfZGlmZl9saW5lKFwkZXNjX3JlbSwgJ3JlbScpLAorCSAgICAgICBmb3JtYXRfZGlmZl9saW5lKFwkZXNjX2FkZCwgJ2FkZCcpOworfQorCisjIEhUTUwtZm9ybWF0IGRpZmYgY29udGV4dCwgcmVtb3ZlZCBhbmQgYWRkZWQgbGluZXMuCitzdWIgZm9ybWF0X2N0eF9yZW1fYWRkX2xpbmVzIHsKKwlteSAoJGN0eCwgJHJlbSwgJGFkZCwgJG51bV9wYXJlbnRzKSA9IEBfOworCW15IChAbmV3X2N0eCwgQG5ld19yZW0sIEBuZXdfYWRkKTsKKwlteSAkY2FuX2hpZ2hsaWdodCA9IDA7CisJbXkgJGlzX2NvbWJpbmVkID0gKCRudW1fcGFyZW50cyA+IDEpOworCisJIyBIaWdobGlnaHQgaWYgZXZlcnkgcmVtb3ZlZCBsaW5lIGhhcyBhIGNvcnJlc3BvbmRpbmcgYWRkZWQgbGluZS4KKwlpZiAoQCRhZGQgPiAwICYmIEAkYWRkID09IEAkcmVtKSB7CisJCSRjYW5faGlnaGxpZ2h0ID0gMTsKKworCQkjIEhpZ2hsaWdodCBsaW5lcyBpbiBjb21iaW5lZCBkaWZmIG9ubHkgaWYgdGhlIGNodW5rIGNvbnRhaW5zCisJCSMgZGlmZiBiZXR3ZWVuIHRoZSBzYW1lIHZlcnNpb24sIGUuZy4KKwkJIworCQkjICAgIC0gYQorCQkjICAgLSAgYgorCQkjICAgICsgYworCQkjICAgKyAgZAorCQkjCisJCSMgT3RoZXJ3aXNlIHRoZSBoaWdobGlnaHRsaW5nIHdvdWxkIGJlIGNvbmZ1c2luZy4KKwkJaWYgKCRpc19jb21iaW5lZCkgeworCQkJZm9yIChteSAkaSA9IDA7ICRpIDwgQCRhZGQ7ICRpKyspIHsKKwkJCQlteSAkcHJlZml4X3JlbSA9IHN1YnN0cigkcmVtLT5bJGldLCAwLCAkbnVtX3BhcmVudHMpOworCQkJCW15ICRwcmVmaXhfYWRkID0gc3Vic3RyKCRhZGQtPlskaV0sIDAsICRudW1fcGFyZW50cyk7CisKKwkJCQkkcHJlZml4X3JlbSA9fiBzLy0vKy9nOworCisJCQkJaWYgKCRwcmVmaXhfcmVtIG5lICRwcmVmaXhfYWRkKSB7CisJCQkJCSRjYW5faGlnaGxpZ2h0ID0gMDsKKwkJCQkJbGFzdDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoJGNhbl9oaWdobGlnaHQpIHsKKwkJZm9yIChteSAkaSA9IDA7ICRpIDwgQCRhZGQ7ICRpKyspIHsKKwkJCW15ICgkbGluZV9yZW0sICRsaW5lX2FkZCkgPSBmb3JtYXRfcmVtX2FkZF9saW5lc19wYWlyKAorCQkJICAgICAgICAkcmVtLT5bJGldLCAkYWRkLT5bJGldLCAkbnVtX3BhcmVudHMpOworCQkJcHVzaCBAbmV3X3JlbSwgJGxpbmVfcmVtOworCQkJcHVzaCBAbmV3X2FkZCwgJGxpbmVfYWRkOworCQl9CisJfSBlbHNlIHsKKwkJQG5ld19yZW0gPSBtYXAgeyBmb3JtYXRfZGlmZl9saW5lKCRfLCAncmVtJykgfSBAJHJlbTsKKwkJQG5ld19hZGQgPSBtYXAgeyBmb3JtYXRfZGlmZl9saW5lKCRfLCAnYWRkJykgfSBAJGFkZDsKKwl9CisKKwlAbmV3X2N0eCA9IG1hcCB7IGZvcm1hdF9kaWZmX2xpbmUoJF8sICdjdHgnKSB9IEAkY3R4OworCisJcmV0dXJuIChcQG5ld19jdHgsIFxAbmV3X3JlbSwgXEBuZXdfYWRkKTsKK30KKworIyBQcmludCBjb250ZXh0IGxpbmVzIGFuZCB0aGVuIHJlbS9hZGQgbGluZXMuCitzdWIgcHJpbnRfZGlmZl9saW5lcyB7CisJbXkgKCRjdHgsICRyZW0sICRhZGQsICRkaWZmX3N0eWxlLCAkbnVtX3BhcmVudHMpID0gQF87CisJbXkgJGlzX2NvbWJpbmVkID0gJG51bV9wYXJlbnRzID4gMTsKKworCSgkY3R4LCAkcmVtLCAkYWRkKSA9IGZvcm1hdF9jdHhfcmVtX2FkZF9saW5lcygkY3R4LCAkcmVtLCAkYWRkLAorCSAgICAgICAgJG51bV9wYXJlbnRzKTsKKworCWlmICgkZGlmZl9zdHlsZSBlcSAnc2lkZWJ5c2lkZScgJiYgISRpc19jb21iaW5lZCkgeworCQlwcmludF9zaWRlYnlzaWRlX2RpZmZfbGluZXMoJGN0eCwgJHJlbSwgJGFkZCk7CisJfSBlbHNlIHsKKwkJIyBkZWZhdWx0ICdpbmxpbmUnIHN0eWxlIGFuZCB1bmtub3duIHN0eWxlcworCQlwcmludF9pbmxpbmVfZGlmZl9saW5lcygkY3R4LCAkcmVtLCAkYWRkKTsKKwl9Cit9CisKK3N1YiBwcmludF9kaWZmX2NodW5rIHsKKwlteSAoJGRpZmZfc3R5bGUsICRudW1fcGFyZW50cywgJGZyb20sICR0bywgQGNodW5rKSA9IEBfOworCW15IChAY3R4LCBAcmVtLCBAYWRkKTsKKworCSMgVGhlIGNsYXNzIG9mIHRoZSBwcmV2aW91cyBsaW5lLgorCW15ICRwcmV2X2NsYXNzID0gJyc7CisKKwlyZXR1cm4gdW5sZXNzIEBjaHVuazsKKworCSMgaW5jb21wbGV0ZSBsYXN0IGxpbmUgbWlnaHQgYmUgYW1vbmcgcmVtb3ZlZCBvciBhZGRlZCBsaW5lcywKKwkjIG9yIGJvdGgsIG9yIGFtb25nIGNvbnRleHQgbGluZXM6IGZpbmQgd2hpY2gKKwlmb3IgKG15ICRpID0gMTsgJGkgPCBAY2h1bms7ICRpKyspIHsKKwkJaWYgKCRjaHVua1skaV1bMF0gZXEgJ2luY29tcGxldGUnKSB7CisJCQkkY2h1bmtbJGldWzBdID0gJGNodW5rWyRpLTFdWzBdOworCQl9CisJfQorCisJIyBndWFyZGlhbgorCXB1c2ggQGNodW5rLCBbIiIsICIiXTsKKworCWZvcmVhY2ggbXkgJGxpbmVfaW5mbyAoQGNodW5rKSB7CisJCW15ICgkY2xhc3MsICRsaW5lKSA9IEAkbGluZV9pbmZvOworCisJCSMgcHJpbnQgY2h1bmsgaGVhZGVycworCQlpZiAoJGNsYXNzICYmICRjbGFzcyBlcSAnY2h1bmtfaGVhZGVyJykgeworCQkJcHJpbnQgZm9ybWF0X2RpZmZfbGluZSgkbGluZSwgJGNsYXNzLCAkZnJvbSwgJHRvKTsKKwkJCW5leHQ7CisJCX0KKworCQkjIyBwcmludCBmcm9tIGFjY3VtdWxhdG9yIHdoZW4gaGF2ZSBzb21lIGFkZC9yZW0gbGluZXMgb3IgZW5kCisJCSMgb2YgY2h1bmsgKGZsdXNoIGNvbnRleHQgbGluZXMpLCBvciB3aGVuIGhhdmUgYWRkIGFuZCByZW0KKwkJIyBsaW5lcyBhbmQgbmV3IGJsb2NrIGlzIHJlYWNoZWQgKG90aGVyd2lzZSBhZGQvcmVtIGxpbmVzIGNvdWxkCisJCSMgYmUgcmVvcmRlcmVkKQorCQlpZiAoISRjbGFzcyB8fCAoKEByZW0gfHwgQGFkZCkgJiYgJGNsYXNzIGVxICdjdHgnKSB8fAorCQkgICAgKEByZW0gJiYgQGFkZCAmJiAkY2xhc3MgbmUgJHByZXZfY2xhc3MpKSB7CisJCQlwcmludF9kaWZmX2xpbmVzKFxAY3R4LCBcQHJlbSwgXEBhZGQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAkZGlmZl9zdHlsZSwgJG51bV9wYXJlbnRzKTsKKwkJCUBjdHggPSBAcmVtID0gQGFkZCA9ICgpOworCQl9CisKKwkJIyMgYWRkaW5nIGxpbmVzIHRvIGFjY3VtdWxhdG9yCisJCSMgZ3VhcmRpYW4gdmFsdWUKKwkJbGFzdCB1bmxlc3MgJGxpbmU7CisJCSMgcmVtLCBhZGQgb3IgY2hhbmdlCisJCWlmICgkY2xhc3MgZXEgJ3JlbScpIHsKKwkJCXB1c2ggQHJlbSwgJGxpbmU7CisJCX0gZWxzaWYgKCRjbGFzcyBlcSAnYWRkJykgeworCQkJcHVzaCBAYWRkLCAkbGluZTsKKwkJfQorCQkjIGNvbnRleHQgbGluZQorCQlpZiAoJGNsYXNzIGVxICdjdHgnKSB7CisJCQlwdXNoIEBjdHgsICRsaW5lOworCQl9CisKKwkJJHByZXZfY2xhc3MgPSAkY2xhc3M7CisJfQorfQorCitzdWIgZ2l0X3BhdGNoc2V0X2JvZHkgeworCW15ICgkZmQsICRkaWZmX3N0eWxlLCAkZGlmZnRyZWUsICRoYXNoLCBAaGFzaF9wYXJlbnRzKSA9IEBfOworCW15ICgkaGFzaF9wYXJlbnQpID0gJGhhc2hfcGFyZW50c1swXTsKKworCW15ICRpc19jb21iaW5lZCA9IChAaGFzaF9wYXJlbnRzID4gMSk7CisJbXkgJHBhdGNoX2lkeCA9IDA7CisJbXkgJHBhdGNoX251bWJlciA9IDA7CisJbXkgJHBhdGNoX2xpbmU7CisJbXkgJGRpZmZpbmZvOworCW15ICR0b19uYW1lOworCW15ICglZnJvbSwgJXRvKTsKKwlteSBAY2h1bms7ICMgZm9yIHNpZGUtYnktc2lkZSBkaWZmCisKKwlwcmludCAiPGRpdiBjbGFzcz1cInBhdGNoc2V0XCI+XG4iOworCisJIyBza2lwIHRvIGZpcnN0IHBhdGNoCisJd2hpbGUgKCRwYXRjaF9saW5lID0gPCRmZD4pIHsKKwkJY2hvbXAgJHBhdGNoX2xpbmU7CisKKwkJbGFzdCBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eZGlmZiAvKTsKKwl9CisKKyBQQVRDSDoKKwl3aGlsZSAoJHBhdGNoX2xpbmUpIHsKKworCQkjIHBhcnNlICJnaXQgZGlmZiIgaGVhZGVyIGxpbmUKKwkJaWYgKCRwYXRjaF9saW5lID1+IG0vXmRpZmYgLS1naXQgKFwiKD86W15cXFwiXSooPzpcXC5bXlxcXCJdKikqKVwifFteICJdKikgKC4qKSQvKSB7CisJCQkjICQxIGlzIGZyb21fbmFtZSwgd2hpY2ggd2UgZG8gbm90IHVzZQorCQkJJHRvX25hbWUgPSB1bnF1b3RlKCQyKTsKKwkJCSR0b19uYW1lID1+IHMhXmIvISE7CisJCX0gZWxzaWYgKCRwYXRjaF9saW5lID1+IG0vXmRpZmYgLS0oY2N8Y29tYmluZWQpICgiPy4qIj8pJC8pIHsKKwkJCSMgJDEgaXMgJ2NjJyBvciAnY29tYmluZWQnLCB3aGljaCB3ZSBkbyBub3QgdXNlCisJCQkkdG9fbmFtZSA9IHVucXVvdGUoJDIpOworCQl9IGVsc2UgeworCQkJJHRvX25hbWUgPSB1bmRlZjsKKwkJfQorCisJCSMgY2hlY2sgaWYgY3VycmVudCBwYXRjaCBiZWxvbmcgdG8gY3VycmVudCByYXcgbGluZQorCQkjIGFuZCBwYXJzZSByYXcgZ2l0LWRpZmYgbGluZSBpZiBuZWVkZWQKKwkJaWYgKGlzX3BhdGNoX3NwbGl0KCRkaWZmaW5mbywgeyAndG9fZmlsZScgPT4gJHRvX25hbWUgfSkpIHsKKwkJCSMgdGhpcyBpcyBjb250aW51YXRpb24gb2YgYSBzcGxpdCBwYXRjaAorCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYXRjaCBjb250XCI+XG4iOworCQl9IGVsc2UgeworCQkJIyBhZHZhbmNlIHJhdyBnaXQtZGlmZiBvdXRwdXQgaWYgbmVlZGVkCisJCQkkcGF0Y2hfaWR4KysgaWYgZGVmaW5lZCAkZGlmZmluZm87CisKKwkJCSMgcmVhZCBhbmQgcHJlcGFyZSBwYXRjaCBpbmZvcm1hdGlvbgorCQkJJGRpZmZpbmZvID0gcGFyc2VkX2RpZmZ0cmVlX2xpbmUoJGRpZmZ0cmVlLT5bJHBhdGNoX2lkeF0pOworCisJCQkjIGNvbXBhY3QgY29tYmluZWQgZGlmZiBvdXRwdXQgY2FuIGhhdmUgc29tZSBwYXRjaGVzIHNraXBwZWQKKwkJCSMgZmluZCB3aGljaCBwYXRjaCAodXNpbmcgcGF0aG5hbWUgb2YgcmVzdWx0KSB3ZSBhcmUgYXQgbm93OworCQkJaWYgKCRpc19jb21iaW5lZCkgeworCQkJCXdoaWxlICgkdG9fbmFtZSBuZSAkZGlmZmluZm8tPnsndG9fZmlsZSd9KSB7CisJCQkJCXByaW50ICI8ZGl2IGNsYXNzPVwicGF0Y2hcIiBpZD1cInBhdGNoIi4gKCRwYXRjaF9pZHgrMSkgLiJcIj5cbiIgLgorCQkJCQkgICAgICBmb3JtYXRfZGlmZl9jY19zaW1wbGlmaWVkKCRkaWZmaW5mbywgQGhhc2hfcGFyZW50cykgLgorCQkJCQkgICAgICAiPC9kaXY+XG4iOyAgIyBjbGFzcz0icGF0Y2giCisKKwkJCQkJJHBhdGNoX2lkeCsrOworCQkJCQkkcGF0Y2hfbnVtYmVyKys7CisKKwkJCQkJbGFzdCBpZiAkcGF0Y2hfaWR4ID4gJCMkZGlmZnRyZWU7CisJCQkJCSRkaWZmaW5mbyA9IHBhcnNlZF9kaWZmdHJlZV9saW5lKCRkaWZmdHJlZS0+WyRwYXRjaF9pZHhdKTsKKwkJCQl9CisJCQl9CisKKwkJCSMgbW9kaWZpZXMgJWZyb20sICV0byBoYXNoZXMKKwkJCXBhcnNlX2Zyb21fdG9fZGlmZmluZm8oJGRpZmZpbmZvLCBcJWZyb20sIFwldG8sIEBoYXNoX3BhcmVudHMpOworCisJCQkjIHRoaXMgaXMgZmlyc3QgcGF0Y2ggZm9yIHJhdyBkaWZmdHJlZSBsaW5lIHdpdGggJHBhdGNoX2lkeCBpbmRleAorCQkJIyB3ZSBpbmRleCBAJGRpZmZ0cmVlIGFycmF5IGZyb20gMCwgYnV0IG51bWJlciBwYXRjaGVzIGZyb20gMQorCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYXRjaFwiIGlkPVwicGF0Y2giLiAoJHBhdGNoX2lkeCsxKSAuIlwiPlxuIjsKKwkJfQorCisJCSMgZ2l0IGRpZmYgaGVhZGVyCisJCSNhc3NlcnQoJHBhdGNoX2xpbmUgPX4gbS9eZGlmZiAvKSBpZiBERUJVRzsKKwkJI2Fzc2VydCgkcGF0Y2hfbGluZSAhfiBtISQvJCEpIGlmIERFQlVHOyAjIGlzIGNob21wLWVkCisJCSRwYXRjaF9udW1iZXIrKzsKKwkJIyBwcmludCAiZ2l0IGRpZmYiIGhlYWRlcgorCQlwcmludCBmb3JtYXRfZ2l0X2RpZmZfaGVhZGVyX2xpbmUoJHBhdGNoX2xpbmUsICRkaWZmaW5mbywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwlZnJvbSwgXCV0byk7CisKKwkJIyBwcmludCBleHRlbmRlZCBkaWZmIGhlYWRlcgorCQlwcmludCAiPGRpdiBjbGFzcz1cImRpZmYgZXh0ZW5kZWRfaGVhZGVyXCI+XG4iOworCUVYVEVOREVEX0hFQURFUjoKKwkJd2hpbGUgKCRwYXRjaF9saW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRwYXRjaF9saW5lOworCisJCQlsYXN0IEVYVEVOREVEX0hFQURFUiBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eLS0tIHxeZGlmZiAvKTsKKworCQkJcHJpbnQgZm9ybWF0X2V4dGVuZGVkX2RpZmZfaGVhZGVyX2xpbmUoJHBhdGNoX2xpbmUsICRkaWZmaW5mbywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwlZnJvbSwgXCV0byk7CisJCX0KKwkJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0iZGlmZiBleHRlbmRlZF9oZWFkZXIiCisKKwkJIyBmcm9tLWZpbGUvdG8tZmlsZSBkaWZmIGhlYWRlcgorCQlpZiAoISAkcGF0Y2hfbGluZSkgeworCQkJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGF0Y2giCisJCQlsYXN0IFBBVENIOworCQl9CisJCW5leHQgUEFUQ0ggaWYgKCRwYXRjaF9saW5lID1+IG0vXmRpZmYgLyk7CisJCSNhc3NlcnQoJHBhdGNoX2xpbmUgPX4gbS9eLS0tLykgaWYgREVCVUc7CisKKwkJbXkgJGxhc3RfcGF0Y2hfbGluZSA9ICRwYXRjaF9saW5lOworCQkkcGF0Y2hfbGluZSA9IDwkZmQ+OworCQljaG9tcCAkcGF0Y2hfbGluZTsKKwkJI2Fzc2VydCgkcGF0Y2hfbGluZSA9fiBtL15cK1wrXCsvKSBpZiBERUJVRzsKKworCQlwcmludCBmb3JtYXRfZGlmZl9mcm9tX3RvX2hlYWRlcigkbGFzdF9wYXRjaF9saW5lLCAkcGF0Y2hfbGluZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpZmZpbmZvLCBcJWZyb20sIFwldG8sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBoYXNoX3BhcmVudHMpOworCisJCSMgdGhlIHBhdGNoIGl0c2VsZgorCUxJTkU6CisJCXdoaWxlICgkcGF0Y2hfbGluZSA9IDwkZmQ+KSB7CisJCQljaG9tcCAkcGF0Y2hfbGluZTsKKworCQkJbmV4dCBQQVRDSCBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eZGlmZiAvKTsKKworCQkJbXkgJGNsYXNzID0gZGlmZl9saW5lX2NsYXNzKCRwYXRjaF9saW5lLCBcJWZyb20sIFwldG8pOworCisJCQlpZiAoJGNsYXNzIGVxICdjaHVua19oZWFkZXInKSB7CisJCQkJcHJpbnRfZGlmZl9jaHVuaygkZGlmZl9zdHlsZSwgc2NhbGFyIEBoYXNoX3BhcmVudHMsIFwlZnJvbSwgXCV0bywgQGNodW5rKTsKKwkJCQlAY2h1bmsgPSAoKTsKKwkJCX0KKworCQkJcHVzaCBAY2h1bmssIFsgJGNsYXNzLCAkcGF0Y2hfbGluZSBdOworCQl9CisKKwl9IGNvbnRpbnVlIHsKKwkJaWYgKEBjaHVuaykgeworCQkJcHJpbnRfZGlmZl9jaHVuaygkZGlmZl9zdHlsZSwgc2NhbGFyIEBoYXNoX3BhcmVudHMsIFwlZnJvbSwgXCV0bywgQGNodW5rKTsKKwkJCUBjaHVuayA9ICgpOworCQl9CisJCXByaW50ICI8L2Rpdj5cbiI7ICMgY2xhc3M9InBhdGNoIgorCX0KKworCSMgZm9yIGNvbXBhY3QgY29tYmluZWQgKC0tY2MpIGZvcm1hdCwgd2l0aCBjaHVuayBhbmQgcGF0Y2ggc2ltcGxpZmljYXRpb24KKwkjIHRoZSBwYXRjaHNldCBtaWdodCBiZSBlbXB0eSwgYnV0IHRoZXJlIG1pZ2h0IGJlIHVucHJvY2Vzc2VkIHJhdyBsaW5lcworCWZvciAoKyskcGF0Y2hfaWR4IGlmICRwYXRjaF9udW1iZXIgPiAwOworCSAgICAgJHBhdGNoX2lkeCA8IEAkZGlmZnRyZWU7CisJICAgICArKyRwYXRjaF9pZHgpIHsKKwkJIyByZWFkIGFuZCBwcmVwYXJlIHBhdGNoIGluZm9ybWF0aW9uCisJCSRkaWZmaW5mbyA9IHBhcnNlZF9kaWZmdHJlZV9saW5lKCRkaWZmdHJlZS0+WyRwYXRjaF9pZHhdKTsKKworCQkjIGdlbmVyYXRlIGFuY2hvciBmb3IgInBhdGNoIiBsaW5rcyBpbiBkaWZmdHJlZSAvIHdoYXRjaGFuZ2VkIHBhcnQKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYXRjaFwiIGlkPVwicGF0Y2giLiAoJHBhdGNoX2lkeCsxKSAuIlwiPlxuIiAuCisJCSAgICAgIGZvcm1hdF9kaWZmX2NjX3NpbXBsaWZpZWQoJGRpZmZpbmZvLCBAaGFzaF9wYXJlbnRzKSAuCisJCSAgICAgICI8L2Rpdj5cbiI7ICAjIGNsYXNzPSJwYXRjaCIKKworCQkkcGF0Y2hfbnVtYmVyKys7CisJfQorCisJaWYgKCRwYXRjaF9udW1iZXIgPT0gMCkgeworCQlpZiAoQGhhc2hfcGFyZW50cyA+IDEpIHsKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwiZGlmZiBub2RpZmZlcmVuY2VzXCI+VHJpdmlhbCBtZXJnZTwvZGl2PlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwiZGlmZiBub2RpZmZlcmVuY2VzXCI+Tm8gZGlmZmVyZW5jZXMgZm91bmQ8L2Rpdj5cbiI7CisJCX0KKwl9CisKKwlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYXRjaHNldCIKK30KKworIyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLgorCitzdWIgZ2l0X3Byb2plY3Rfc2VhcmNoX2Zvcm0geworCW15ICgkc2VhcmNodGV4dCwgJHNlYXJjaF91c2VfcmVnZXhwKSA9IEBfOworCisJbXkgJGxpbWl0ID0gJyc7CisJaWYgKCRwcm9qZWN0X2ZpbHRlcikgeworCQkkbGltaXQgPSAiIGluICckcHJvamVjdF9maWx0ZXIvJyI7CisJfQorCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwcm9qc2VhcmNoXCI+XG4iOworCXByaW50ICRjZ2ktPnN0YXJ0Zm9ybSgtbWV0aG9kID0+ICdnZXQnLCAtYWN0aW9uID0+ICRteV91cmkpIC4KKwkgICAgICAkY2dpLT5oaWRkZW4oLW5hbWUgPT4gJ2EnLCAtdmFsdWUgPT4gJ3Byb2plY3RfbGlzdCcpICAuICJcbiI7CisJcHJpbnQgJGNnaS0+aGlkZGVuKC1uYW1lID0+ICdwZicsIC12YWx1ZSA9PiAkcHJvamVjdF9maWx0ZXIpLiAiXG4iCisJCWlmIChkZWZpbmVkICRwcm9qZWN0X2ZpbHRlcik7CisJcHJpbnQgJGNnaS0+dGV4dGZpZWxkKC1uYW1lID0+ICdzJywgLXZhbHVlID0+ICRzZWFyY2h0ZXh0LAorCSAgICAgICAgICAgICAgICAgICAgICAtdGl0bGUgPT4gIlNlYXJjaCBwcm9qZWN0IGJ5IG5hbWUgYW5kIGRlc2NyaXB0aW9uJGxpbWl0IiwKKwkgICAgICAgICAgICAgICAgICAgICAgLXNpemUgPT4gNjApIC4gIlxuIiAuCisJICAgICAgIjxzcGFuIHRpdGxlPVwiRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uXCI+IiAuCisJICAgICAgJGNnaS0+Y2hlY2tib3goLW5hbWUgPT4gJ3NyJywgLXZhbHVlID0+IDEsIC1sYWJlbCA9PiAncmUnLAorCSAgICAgICAgICAgICAgICAgICAgIC1jaGVja2VkID0+ICRzZWFyY2hfdXNlX3JlZ2V4cCkgLgorCSAgICAgICI8L3NwYW4+XG4iIC4KKwkgICAgICAkY2dpLT5zdWJtaXQoLW5hbWUgPT4gJ2J0blMnLCAtdmFsdWUgPT4gJ1NlYXJjaCcpIC4KKwkgICAgICAkY2dpLT5lbmRfZm9ybSgpIC4gIlxuIiAuCisJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0ID0+IHVuZGVmLCBzZWFyY2h0ZXh0ID0+IHVuZGVmLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF9maWx0ZXIgPT4gJHByb2plY3RfZmlsdGVyKX0sCisJICAgICAgICAgICAgICBlc2NfaHRtbCgiTGlzdCBhbGwgcHJvamVjdHMkbGltaXQiKSkgLiAiPGJyIC8+XG4iOworCXByaW50ICI8L2Rpdj5cbiI7Cit9CisKKyMgZW50cnkgZm9yIGdpdmVuIEBrZXlzIG5lZWRzIGZpbGxpbmcgaWYgYXQgbGVhc3Qgb25lIG9mIGtleXMgaW4gbGlzdAorIyBpcyBub3QgcHJlc2VudCBpbiAlJHByb2plY3RfaW5mbworc3ViIHByb2plY3RfaW5mb19uZWVkc19maWxsaW5nIHsKKwlteSAoJHByb2plY3RfaW5mbywgQGtleXMpID0gQF87CisKKwkjIHJldHVybiBMaXN0OjpNb3JlVXRpbHM6OmFueSB7ICFleGlzdHMgJHByb2plY3RfaW5mby0+eyRffSB9IEBrZXlzOworCWZvcmVhY2ggbXkgJGtleSAoQGtleXMpIHsKKwkJaWYgKCFleGlzdHMgJHByb2plY3RfaW5mby0+eyRrZXl9KSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKyMgZmlsbHMgcHJvamVjdCBsaXN0IGluZm8gKGFnZSwgZGVzY3JpcHRpb24sIG93bmVyLCBjYXRlZ29yeSwgZm9ya3MsIGV0Yy4pCisjIGZvciBlYWNoIHByb2plY3QgaW4gdGhlIGxpc3QsIHJlbW92aW5nIGludmFsaWQgcHJvamVjdHMgZnJvbQorIyByZXR1cm5lZCBsaXN0LCBvciBmaWxsIG9ubHkgc3BlY2lmaWVkIGluZm8uCisjCisjIEludmFsaWQgcHJvamVjdHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcmV0dXJuZWQgbGlzdCBpZiBhbmQgb25seSBpZiB5b3UKKyMgYXNrICdhZ2UnIG9yICdhZ2Vfc3RyaW5nJyB0byBiZSBmaWxsZWQsIGJlY2F1c2UgdGhleSBhcmUgdGhlIG9ubHkgZmllbGRzCisjIHRoYXQgcnVuIHVuY29uZGl0aW9uYWxseSBnaXQgY29tbWFuZCB0aGF0IHJlcXVpcmVzIHJlcG9zaXRvcnksIGFuZAorIyB0aGVyZWZvcmUgZG8gYWx3YXlzIGNoZWNrIGlmIHByb2plY3QgcmVwb3NpdG9yeSBpcyBpbnZhbGlkLgorIworIyBVU0FHRToKKyMgKiBmaWxsX3Byb2plY3RfbGlzdF9pbmZvKFxAcHJvamVjdF9saXN0LCAnZGVzY3JfbG9uZycsICdjdGFncycpCisjICAgZW5zdXJlcyB0aGF0ICdkZXNjcl9sb25nJyBhbmQgJ2N0YWdzJyBmaWVsZHMgYXJlIGZpbGxlZAorIyAqIEBwcm9qZWN0X2xpc3QgPSBmaWxsX3Byb2plY3RfbGlzdF9pbmZvKFxAcHJvamVjdF9saXN0KQorIyAgIGVuc3VyZXMgdGhhdCBhbGwgZmllbGRzIGFyZSBmaWxsZWQgKGFuZCBpbnZhbGlkIHByb2plY3RzIHJlbW92ZWQpCisjCisjIE5PVEU6IG1vZGlmaWVzICRwcm9qbGlzdCwgYnV0IGRvZXMgbm90IHJlbW92ZSBlbnRyaWVzIGZyb20gaXQKK3N1YiBmaWxsX3Byb2plY3RfbGlzdF9pbmZvIHsKKwlteSAoJHByb2psaXN0LCBAd2FudGVkX2tleXMpID0gQF87CisJbXkgQHByb2plY3RzOworCW15ICRmaWx0ZXJfc2V0ID0gc3ViIHsgcmV0dXJuIEBfOyB9OworCWlmIChAd2FudGVkX2tleXMpIHsKKwkJbXkgJXdhbnRlZF9rZXlzID0gbWFwIHsgJF8gPT4gMSB9IEB3YW50ZWRfa2V5czsKKwkJJGZpbHRlcl9zZXQgPSBzdWIgeyByZXR1cm4gZ3JlcCB7ICR3YW50ZWRfa2V5c3skX30gfSBAXzsgfTsKKwl9CisKKwlteSAkc2hvd19jdGFncyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdjdGFncycpOworIFBST0pFQ1Q6CisJZm9yZWFjaCBteSAkcHIgKEAkcHJvamxpc3QpIHsKKwkJaWYgKHByb2plY3RfaW5mb19uZWVkc19maWxsaW5nKCRwciwgJGZpbHRlcl9zZXQtPignYWdlJywgJ2FnZV9zdHJpbmcnKSkpIHsKKwkJCW15IChAYWN0aXZpdHkpID0gZ2l0X2dldF9sYXN0X2FjdGl2aXR5KCRwci0+eydwYXRoJ30pOworCQkJdW5sZXNzIChAYWN0aXZpdHkpIHsKKwkJCQluZXh0IFBST0pFQ1Q7CisJCQl9CisJCQkoJHByLT57J2FnZSd9LCAkcHItPnsnYWdlX3N0cmluZyd9KSA9IEBhY3Rpdml0eTsKKwkJfQorCQlpZiAocHJvamVjdF9pbmZvX25lZWRzX2ZpbGxpbmcoJHByLCAkZmlsdGVyX3NldC0+KCdkZXNjcicsICdkZXNjcl9sb25nJykpKSB7CisJCQlteSAkZGVzY3IgPSBnaXRfZ2V0X3Byb2plY3RfZGVzY3JpcHRpb24oJHByLT57J3BhdGgnfSkgfHwgIiI7CisJCQkkZGVzY3IgPSB0b191dGY4KCRkZXNjcik7CisJCQkkcHItPnsnZGVzY3JfbG9uZyd9ID0gJGRlc2NyOworCQkJJHByLT57J2Rlc2NyJ30gPSBjaG9wX3N0cigkZGVzY3IsICRwcm9qZWN0c19saXN0X2Rlc2NyaXB0aW9uX3dpZHRoLCA1KTsKKwkJfQorCQlpZiAocHJvamVjdF9pbmZvX25lZWRzX2ZpbGxpbmcoJHByLCAkZmlsdGVyX3NldC0+KCdvd25lcicpKSkgeworCQkJJHByLT57J293bmVyJ30gPSBnaXRfZ2V0X3Byb2plY3Rfb3duZXIoIiRwci0+eydwYXRoJ30iKSB8fCAiIjsKKwkJfQorCQlpZiAoJHNob3dfY3RhZ3MgJiYKKwkJICAgIHByb2plY3RfaW5mb19uZWVkc19maWxsaW5nKCRwciwgJGZpbHRlcl9zZXQtPignY3RhZ3MnKSkpIHsKKwkJCSRwci0+eydjdGFncyd9ID0gZ2l0X2dldF9wcm9qZWN0X2N0YWdzKCRwci0+eydwYXRoJ30pOworCQl9CisJCWlmICgkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzICYmCisJCSAgICBwcm9qZWN0X2luZm9fbmVlZHNfZmlsbGluZygkcHIsICRmaWx0ZXJfc2V0LT4oJ2NhdGVnb3J5JykpKSB7CisJCQlteSAkY2F0ID0gZ2l0X2dldF9wcm9qZWN0X2NhdGVnb3J5KCRwci0+eydwYXRoJ30pIHx8CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcm9qZWN0X2xpc3RfZGVmYXVsdF9jYXRlZ29yeTsKKwkJCSRwci0+eydjYXRlZ29yeSd9ID0gdG9fdXRmOCgkY2F0KTsKKwkJfQorCisJCXB1c2ggQHByb2plY3RzLCAkcHI7CisJfQorCisJcmV0dXJuIEBwcm9qZWN0czsKK30KKworc3ViIHNvcnRfcHJvamVjdHNfbGlzdCB7CisJbXkgKCRwcm9qbGlzdCwgJG9yZGVyKSA9IEBfOworCW15IEBwcm9qZWN0czsKKworCW15ICVvcmRlcl9pbmZvID0gKAorCQlwcm9qZWN0ID0+IHsga2V5ID0+ICdwYXRoJywgdHlwZSA9PiAnc3RyJyB9LAorCQlkZXNjciA9PiB7IGtleSA9PiAnZGVzY3JfbG9uZycsIHR5cGUgPT4gJ3N0cicgfSwKKwkJb3duZXIgPT4geyBrZXkgPT4gJ293bmVyJywgdHlwZSA9PiAnc3RyJyB9LAorCQlhZ2UgPT4geyBrZXkgPT4gJ2FnZScsIHR5cGUgPT4gJ251bScgfQorCSk7CisJbXkgJG9pID0gJG9yZGVyX2luZm97JG9yZGVyfTsKKwlyZXR1cm4gQCRwcm9qbGlzdCB1bmxlc3MgZGVmaW5lZCAkb2k7CisJaWYgKCRvaS0+eyd0eXBlJ30gZXEgJ3N0cicpIHsKKwkJQHByb2plY3RzID0gc29ydCB7JGEtPnskb2ktPnsna2V5J319IGNtcCAkYi0+eyRvaS0+eydrZXknfX19IEAkcHJvamxpc3Q7CisJfSBlbHNlIHsKKwkJQHByb2plY3RzID0gc29ydCB7JGEtPnskb2ktPnsna2V5J319IDw9PiAkYi0+eyRvaS0+eydrZXknfX19IEAkcHJvamxpc3Q7CisJfQorCisJcmV0dXJuIEBwcm9qZWN0czsKK30KKworIyByZXR1cm5zIGEgaGFzaCBvZiBjYXRlZ29yaWVzLCBjb250YWluaW5nIHRoZSBsaXN0IG9mIHByb2plY3QKKyMgYmVsb25naW5nIHRvIGVhY2ggY2F0ZWdvcnkKK3N1YiBidWlsZF9wcm9qbGlzdF9ieV9jYXRlZ29yeSB7CisJbXkgKCRwcm9qbGlzdCwgJGZyb20sICR0bykgPSBAXzsKKwlteSAlY2F0ZWdvcmllczsKKworCSRmcm9tID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbTsKKwkkdG8gPSAkIyRwcm9qbGlzdCBpZiAoIWRlZmluZWQgJHRvIHx8ICQjJHByb2psaXN0IDwgJHRvKTsKKworCWZvciAobXkgJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7CisJCW15ICRwciA9ICRwcm9qbGlzdC0+WyRpXTsKKwkJcHVzaCBAeyRjYXRlZ29yaWVzeyAkcHItPnsnY2F0ZWdvcnknfSB9fSwgJHByOworCX0KKworCXJldHVybiB3YW50YXJyYXkgPyAlY2F0ZWdvcmllcyA6IFwlY2F0ZWdvcmllczsKK30KKworIyBwcmludCAnc29ydCBieScgPHRoPiBlbGVtZW50LCBnZW5lcmF0aW5nICdzb3J0IGJ5ICRuYW1lJyByZXBsYXkgbGluaworIyBpZiB0aGF0IG9yZGVyIGlzIG5vdCBzZWxlY3RlZAorc3ViIHByaW50X3NvcnRfdGggeworCXByaW50IGZvcm1hdF9zb3J0X3RoKEBfKTsKK30KKworc3ViIGZvcm1hdF9zb3J0X3RoIHsKKwlteSAoJG5hbWUsICRvcmRlciwgJGhlYWRlcikgPSBAXzsKKwlteSAkc29ydF90aCA9ICIiOworCSRoZWFkZXIgfHw9IHVjZmlyc3QoJG5hbWUpOworCisJaWYgKCRvcmRlciBlcSAkbmFtZSkgeworCQkkc29ydF90aCAuPSAiPHRoPiRoZWFkZXI8L3RoPlxuIjsKKwl9IGVsc2UgeworCQkkc29ydF90aCAuPSAiPHRoPiIgLgorCQkgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIG9yZGVyPT4kbmFtZSksCisJCSAgICAgICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAiaGVhZGVyIn0sICRoZWFkZXIpIC4KKwkJICAgICAgICAgICAgIjwvdGg+XG4iOworCX0KKworCXJldHVybiAkc29ydF90aDsKK30KKworc3ViIGdpdF9wcm9qZWN0X2xpc3Rfcm93cyB7CisJbXkgKCRwcm9qbGlzdCwgJGZyb20sICR0bywgJGNoZWNrX2ZvcmtzKSA9IEBfOworCisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjJHByb2psaXN0IGlmICghZGVmaW5lZCAkdG8gfHwgJCMkcHJvamxpc3QgPCAkdG8pOworCisJbXkgJGFsdGVybmF0ZSA9IDE7CisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJHByID0gJHByb2psaXN0LT5bJGldOworCisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisKKwkJaWYgKCRjaGVja19mb3JrcykgeworCQkJcHJpbnQgIjx0ZD4iOworCQkJaWYgKCRwci0+eydmb3Jrcyd9KSB7CisJCQkJbXkgJG5mb3JrcyA9IHNjYWxhciBAeyRwci0+eydmb3Jrcyd9fTsKKwkJCQlpZiAoJG5mb3JrcyA+IDApIHsKKwkJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJmb3JrcyIpLAorCQkJCQkgICAgICAgICAgICAgICAtdGl0bGUgPT4gIiRuZm9ya3MgZm9ya3MifSwgIisiKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludCAkY2dpLT5zcGFuKHstdGl0bGUgPT4gIiRuZm9ya3MgZm9ya3MifSwgIisiKTsKKwkJCQl9CisJCQl9CisJCQlwcmludCAiPC90ZD5cbiI7CisJCX0KKwkJcHJpbnQgIjx0ZD4iIC4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJzdW1tYXJ5IiksCisJCSAgICAgICAgICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LAorCQkgICAgICAgICAgICAgICAgICAgICAgIGVzY19odG1sX21hdGNoX2hsKCRwci0+eydwYXRoJ30sICRzZWFyY2hfcmVnZXhwKSkgLgorCQkgICAgICAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkPiIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+InN1bW1hcnkiKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0IiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgLXRpdGxlID0+ICRwci0+eydkZXNjcl9sb25nJ319LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoX3JlZ2V4cAorCQkgICAgICAgICAgICAgICAgICAgICAgICA/IGVzY19odG1sX21hdGNoX2hsX2Nob3BwZWQoJHByLT57J2Rlc2NyX2xvbmcnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwci0+eydkZXNjcid9LCAkc2VhcmNoX3JlZ2V4cCkKKwkJICAgICAgICAgICAgICAgICAgICAgICAgOiBlc2NfaHRtbCgkcHItPnsnZGVzY3InfSkpIC4KKwkJICAgICAgIjwvdGQ+XG4iOworCQl1bmxlc3MgKCRvbWl0X293bmVyKSB7CisJCSAgICAgICAgcHJpbnQgIjx0ZD48aT4iIC4gY2hvcF9hbmRfZXNjYXBlX3N0cigkcHItPnsnb3duZXInfSwgMTUpIC4gIjwvaT48L3RkPlxuIjsKKwkJfQorCQl1bmxlc3MgKCRvbWl0X2FnZV9jb2x1bW4pIHsKKwkJICAgICAgICBwcmludCAiPHRkIGNsYXNzPVwiIi4gYWdlX2NsYXNzKCRwci0+eydhZ2UnfSkgLiAiXCI+IiAuCisJCSAgICAgICAgICAgIChkZWZpbmVkICRwci0+eydhZ2Vfc3RyaW5nJ30gPyAkcHItPnsnYWdlX3N0cmluZyd9IDogIk5vIGNvbW1pdHMiKSAuICI8L3RkPlxuIjsKKwkJfQorCQlwcmludCI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+JHByLT57J3BhdGgnfSwgYWN0aW9uPT4ic3VtbWFyeSIpfSwgInN1bW1hcnkiKSAgIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+InNob3J0bG9nIil9LCAic2hvcnRsb2ciKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJsb2ciKX0sICJsb2ciKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJ0cmVlIil9LCAidHJlZSIpIC4KKwkJICAgICAgKCRwci0+eydmb3Jrcyd9ID8gIiB8ICIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+ImZvcmtzIil9LCAiZm9ya3MiKSA6ICcnKSAuCisJCSAgICAgICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9Cit9CisKK3N1YiBnaXRfcHJvamVjdF9saXN0X2JvZHkgeworCSMgYWN0dWFsbHkgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJHByb2psaXN0LCAkb3JkZXIsICRmcm9tLCAkdG8sICRleHRyYSwgJG5vX2hlYWRlcikgPSBAXzsKKwlteSBAcHJvamVjdHMgPSBAJHByb2psaXN0OworCisJbXkgJGNoZWNrX2ZvcmtzID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2ZvcmtzJyk7CisJbXkgJHNob3dfY3RhZ3MgID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2N0YWdzJyk7CisJbXkgJHRhZ2ZpbHRlciA9ICRzaG93X2N0YWdzID8gJGlucHV0X3BhcmFtc3snY3RhZyd9IDogdW5kZWY7CisJJGNoZWNrX2ZvcmtzID0gdW5kZWYKKwkJaWYgKCR0YWdmaWx0ZXIgfHwgJHNlYXJjaF9yZWdleHApOworCisJIyBmaWx0ZXJpbmcgb3V0IGZvcmtzIGJlZm9yZSBmaWxsaW5nIGluZm8gYWxsb3dzIHRvIGRvIGxlc3Mgd29yaworCUBwcm9qZWN0cyA9IGZpbHRlcl9mb3Jrc19mcm9tX3Byb2plY3RzX2xpc3QoXEBwcm9qZWN0cykKKwkJaWYgKCRjaGVja19mb3Jrcyk7CisJIyBzZWFyY2hfcHJvamVjdHNfbGlzdCBwcmUtZmlsbHMgcmVxdWlyZWQgaW5mbworCUBwcm9qZWN0cyA9IHNlYXJjaF9wcm9qZWN0c19saXN0KFxAcHJvamVjdHMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlYXJjaF9yZWdleHAnID0+ICRzZWFyY2hfcmVnZXhwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YWdmaWx0ZXInICA9PiAkdGFnZmlsdGVyKQorCQlpZiAoJHRhZ2ZpbHRlciB8fCAkc2VhcmNoX3JlZ2V4cCk7CisJIyBmaWxsIHRoZSByZXN0CisJbXkgQGFsbF9maWVsZHMgPSAoJ2Rlc2NyJywgJ2Rlc2NyX2xvbmcnLCAnY3RhZ3MnLCAnY2F0ZWdvcnknKTsKKwlwdXNoIEBhbGxfZmllbGRzLCAoJ2FnZScsICdhZ2Vfc3RyaW5nJykgdW5sZXNzKCRvbWl0X2FnZV9jb2x1bW4pOworCXB1c2ggQGFsbF9maWVsZHMsICdvd25lcicgdW5sZXNzKCRvbWl0X293bmVyKTsKKwlAcHJvamVjdHMgPSBmaWxsX3Byb2plY3RfbGlzdF9pbmZvKFxAcHJvamVjdHMsIEBhbGxfZmllbGRzKTsKKworCSRvcmRlciB8fD0gJGRlZmF1bHRfcHJvamVjdHNfb3JkZXI7CisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjcHJvamVjdHMgaWYgKCFkZWZpbmVkICR0byB8fCAkI3Byb2plY3RzIDwgJHRvKTsKKworCSMgc2hvcnQgY2lyY3VpdAorCWlmICgkZnJvbSA+ICR0bykgeworCQlwcmludCAiPGNlbnRlcj5cbiIuCisJCSAgICAgICI8Yj5ObyBzdWNoIHByb2plY3RzIGZvdW5kPC9iPjxiciAvPlxuIi4KKwkJICAgICAgIkNsaWNrICIuJGNnaS0+YSh7LWhyZWY9PmhyZWYocHJvamVjdD0+dW5kZWYpfSwiaGVyZSIpLiIgdG8gdmlldyBhbGwgcHJvamVjdHM8YnIgLz5cbiIuCisJCSAgICAgICI8L2NlbnRlcj5cbjxiciAvPlxuIjsKKwkJcmV0dXJuOworCX0KKworCUBwcm9qZWN0cyA9IHNvcnRfcHJvamVjdHNfbGlzdChcQHByb2plY3RzLCAkb3JkZXIpOworCisJaWYgKCRzaG93X2N0YWdzKSB7CisJCW15ICRjdGFncyA9IGdpdF9nYXRoZXJfYWxsX2N0YWdzKFxAcHJvamVjdHMpOworCQlteSAkY2xvdWQgPSBnaXRfcG9wdWxhdGVfcHJvamVjdF90YWdjbG91ZCgkY3RhZ3MpOworCQlwcmludCBnaXRfc2hvd19wcm9qZWN0X3RhZ2Nsb3VkKCRjbG91ZCwgNjQpOworCX0KKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJwcm9qZWN0X2xpc3RcIj5cbiI7CisJdW5sZXNzICgkbm9faGVhZGVyKSB7CisJCXByaW50ICI8dHI+XG4iOworCQlpZiAoJGNoZWNrX2ZvcmtzKSB7CisJCQlwcmludCAiPHRoPjwvdGg+XG4iOworCQl9CisJCXByaW50X3NvcnRfdGgoJ3Byb2plY3QnLCAkb3JkZXIsICdQcm9qZWN0Jyk7CisJCXByaW50X3NvcnRfdGgoJ2Rlc2NyJywgJG9yZGVyLCAnRGVzY3JpcHRpb24nKTsKKwkJcHJpbnRfc29ydF90aCgnb3duZXInLCAkb3JkZXIsICdPd25lcicpIHVubGVzcyAkb21pdF9vd25lcjsKKwkJcHJpbnRfc29ydF90aCgnYWdlJywgJG9yZGVyLCAnTGFzdCBDaGFuZ2UnKSB1bmxlc3MgJG9taXRfYWdlX2NvbHVtbjsKKwkJcHJpbnQgIjx0aD48L3RoPlxuIiAuICMgZm9yIGxpbmtzCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisKKwlpZiAoJHByb2plY3RzX2xpc3RfZ3JvdXBfY2F0ZWdvcmllcykgeworCQkjIG9ubHkgZGlzcGxheSBjYXRlZ29yaWVzIHdpdGggcHJvamVjdHMgaW4gdGhlICRmcm9tLSR0byB3aW5kb3cKKwkJQHByb2plY3RzID0gc29ydCB7JGEtPnsnY2F0ZWdvcnknfSBjbXAgJGItPnsnY2F0ZWdvcnknfX0gQHByb2plY3RzWyRmcm9tLi4kdG9dOworCQlteSAlY2F0ZWdvcmllcyA9IGJ1aWxkX3Byb2psaXN0X2J5X2NhdGVnb3J5KFxAcHJvamVjdHMsICRmcm9tLCAkdG8pOworCQlmb3JlYWNoIG15ICRjYXQgKHNvcnQga2V5cyAlY2F0ZWdvcmllcykgeworCQkJdW5sZXNzICgkY2F0IGVxICIiKSB7CisJCQkJcHJpbnQgIjx0cj5cbiI7CisJCQkJaWYgKCRjaGVja19mb3JrcykgeworCQkJCQlwcmludCAiPHRkPjwvdGQ+XG4iOworCQkJCX0KKwkJCQlwcmludCAiPHRkIGNsYXNzPVwiY2F0ZWdvcnlcIiBjb2xzcGFuPVwiNVwiPiIuZXNjX2h0bWwoJGNhdCkuIjwvdGQ+XG4iOworCQkJCXByaW50ICI8L3RyPlxuIjsKKwkJCX0KKworCQkJZ2l0X3Byb2plY3RfbGlzdF9yb3dzKCRjYXRlZ29yaWVzeyRjYXR9LCB1bmRlZiwgdW5kZWYsICRjaGVja19mb3Jrcyk7CisJCX0KKwl9IGVsc2UgeworCQlnaXRfcHJvamVjdF9saXN0X3Jvd3MoXEBwcm9qZWN0cywgJGZyb20sICR0bywgJGNoZWNrX2ZvcmtzKTsKKwl9CisKKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjx0cj5cbiI7CisJCWlmICgkY2hlY2tfZm9ya3MpIHsKKwkJCXByaW50ICI8dGQ+PC90ZD5cbiI7CisJCX0KKwkJcHJpbnQgIjx0ZCBjb2xzcGFuPVwiNVwiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKK3N1YiBnaXRfbG9nX2JvZHkgeworCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJGNvbW1pdGxpc3QsICRmcm9tLCAkdG8sICRyZWZzLCAkZXh0cmEpID0gQF87CisKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGNvbW1pdGxpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JGNvbW1pdGxpc3R9IDwgJHRvKTsKKworCWZvciAobXkgJGkgPSAwOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdC0+WyRpXX07CisJCW5leHQgaWYgISVjbzsKKwkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsCisJCSAgICAgICAgICAgICAgICI8c3BhbiBjbGFzcz1cImFnZVwiPiRjb3snYWdlX3N0cmluZyd9PC9zcGFuPiIgLgorCQkgICAgICAgICAgICAgICBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwKKwkJICAgICAgICAgICAgICAgJGNvbW1pdCk7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCisJCSAgICAgICI8ZGl2IGNsYXNzPVwibG9nX2xpbmtcIj5cbiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpfSwgImNvbW1pdCIpIC4KKwkJICAgICAgIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmYiLCBoYXNoPT4kY29tbWl0KX0sICJjb21taXRkaWZmIikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb21taXQsIGhhc2hfYmFzZT0+JGNvbW1pdCl9LCAidHJlZSIpIC4KKwkJICAgICAgIjxici8+XG4iIC4KKwkJICAgICAgIjwvZGl2PlxuIjsKKwkJICAgICAgZ2l0X3ByaW50X2F1dGhvcnNoaXAoXCVjbywgLXRhZyA9PiAnc3BhbicpOworCQkgICAgICBwcmludCAiPGJyLz5cbjwvZGl2PlxuIjsKKworCQlwcmludCAiPGRpdiBjbGFzcz1cImxvZ19ib2R5XCI+XG4iOworCQlnaXRfcHJpbnRfbG9nKCRjb3snY29tbWVudCd9LCAtZmluYWxfZW1wdHlfbGluZT0+IDEpOworCQlwcmludCAiPC9kaXY+XG4iOworCX0KKwlpZiAoJGV4dHJhKSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9uYXZcIj5cbiI7CisJCXByaW50ICIkZXh0cmFcbiI7CisJCXByaW50ICI8L2Rpdj5cbiI7CisJfQorfQorCitzdWIgZ2l0X3Nob3J0bG9nX2JvZHkgeworCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJGNvbW1pdGxpc3QsICRmcm9tLCAkdG8sICRyZWZzLCAkZXh0cmEpID0gQF87CisKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGNvbW1pdGxpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JGNvbW1pdGxpc3R9IDwgJHRvKTsKKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJzaG9ydGxvZ1wiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlmb3IgKG15ICRpID0gJGZyb207ICRpIDw9ICR0bzsgJGkrKykgeworCQlteSAlY28gPSAleyRjb21taXRsaXN0LT5bJGldfTsKKwkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKwkJIyBnaXRfc3VtbWFyeSgpIHVzZWQgcHJpbnQgIjx0ZD48aT4kY297J2FnZV9zdHJpbmcnfTwvaT48L3RkPlxuIiAuCisJCXByaW50ICI8dGQgdGl0bGU9XCIkY297J2FnZV9zdHJpbmdfYWdlJ31cIj48aT4kY297J2FnZV9zdHJpbmdfZGF0ZSd9PC9pPjwvdGQ+XG4iIC4KKwkJICAgICAgZm9ybWF0X2F1dGhvcl9odG1sKCd0ZCcsIFwlY28sIDEwKSAuICI8dGQ+IjsKKwkJcHJpbnQgZm9ybWF0X3N1YmplY3RfaHRtbCgkY297J3RpdGxlJ30sICRjb3sndGl0bGVfc2hvcnQnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpLCAkcmVmKTsKKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY29tbWl0KX0sICJjb21taXQiKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmIiwgaGFzaD0+JGNvbW1pdCl9LCAiY29tbWl0ZGlmZiIpIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY29tbWl0LCBoYXNoX2Jhc2U9PiRjb21taXQpfSwgInRyZWUiKTsKKwkJbXkgJHNuYXBzaG90X2xpbmtzID0gZm9ybWF0X3NuYXBzaG90X2xpbmtzKCRjb21taXQpOworCQlpZiAoZGVmaW5lZCAkc25hcHNob3RfbGlua3MpIHsKKwkJCXByaW50ICIgfCAiIC4gJHNuYXBzaG90X2xpbmtzOworCQl9CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJaWYgKGRlZmluZWQgJGV4dHJhKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiNFwiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKK3N1YiBnaXRfaGlzdG9yeV9ib2R5IHsKKwkjIFdhcm5pbmc6IGFzc3VtZXMgY29uc3RhbnQgdHlwZSAoYmxvYiBvciB0cmVlKSBkdXJpbmcgaGlzdG9yeQorCW15ICgkY29tbWl0bGlzdCwgJGZyb20sICR0bywgJHJlZnMsICRleHRyYSwKKwkgICAgJGZpbGVfbmFtZSwgJGZpbGVfaGFzaCwgJGZ0eXBlKSA9IEBfOworCisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjeyRjb21taXRsaXN0fSB1bmxlc3MgKGRlZmluZWQgJHRvICYmICR0byA8PSAkI3skY29tbWl0bGlzdH0pOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cImhpc3RvcnlcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdC0+WyRpXX07CisJCWlmICghJWNvKSB7CisJCQluZXh0OworCQl9CisJCW15ICRjb21taXQgPSAkY297J2lkJ307CisKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKKworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCQlwcmludCAiPHRkIHRpdGxlPVwiJGNveydhZ2Vfc3RyaW5nX2FnZSd9XCI+PGk+JGNveydhZ2Vfc3RyaW5nX2RhdGUnfTwvaT48L3RkPlxuIiAuCisJIyBzaG9ydGxvZzogICBmb3JtYXRfYXV0aG9yX2h0bWwoJ3RkJywgXCVjbywgMTApCisJCSAgICAgIGZvcm1hdF9hdXRob3JfaHRtbCgndGQnLCBcJWNvLCAxNSwgMykgLiAiPHRkPiI7CisJCSMgb3JpZ2luYWxseSBnaXRfaGlzdG9yeSB1c2VkIGNob3Bfc3RyKCRjb3sndGl0bGUnfSwgNTApCisJCXByaW50IGZvcm1hdF9zdWJqZWN0X2h0bWwoJGNveyd0aXRsZSd9LCAkY297J3RpdGxlX3Nob3J0J30sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY29tbWl0KSwgJHJlZik7CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kZnR5cGUsIGhhc2hfYmFzZT0+JGNvbW1pdCwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sICRmdHlwZSkgLiAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0ZGlmZiIsIGhhc2g9PiRjb21taXQpfSwgImNvbW1pdGRpZmYiKTsKKworCQlpZiAoJGZ0eXBlIGVxICdibG9iJykgeworCQkJbXkgJGJsb2JfY3VycmVudCA9ICRmaWxlX2hhc2g7CisJCQlteSAkYmxvYl9wYXJlbnQgID0gZ2l0X2dldF9oYXNoX2J5X3BhdGgoJGNvbW1pdCwgJGZpbGVfbmFtZSk7CisJCQlpZiAoZGVmaW5lZCAkYmxvYl9jdXJyZW50ICYmIGRlZmluZWQgJGJsb2JfcGFyZW50ICYmCisJCQkJCSRibG9iX2N1cnJlbnQgbmUgJGJsb2JfcGFyZW50KSB7CisJCQkJcHJpbnQgIiB8ICIgLgorCQkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JkaWZmIiwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kYmxvYl9jdXJyZW50LCBoYXNoX3BhcmVudD0+JGJsb2JfcGFyZW50LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwgaGFzaF9wYXJlbnRfYmFzZT0+JGNvbW1pdCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRmaWxlX25hbWUpfSwKKwkJCQkJICAgICAgICAiZGlmZiB0byBjdXJyZW50Iik7CisJCQl9CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjx0cj5cbiIgLgorCQkgICAgICAiPHRkIGNvbHNwYW49XCI0XCI+JGV4dHJhPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3RhYmxlPlxuIjsKK30KKworc3ViIGdpdF90YWdzX2JvZHkgeworCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJHRhZ2xpc3QsICRmcm9tLCAkdG8sICRleHRyYSkgPSBAXzsKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JHRhZ2xpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JHRhZ2xpc3R9IDwgJHRvKTsKKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJ0YWdzXCI+XG4iOworCW15ICRhbHRlcm5hdGUgPSAxOworCWZvciAobXkgJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7CisJCW15ICRlbnRyeSA9ICR0YWdsaXN0LT5bJGldOworCQlteSAldGFnID0gJSRlbnRyeTsKKwkJbXkgJGNvbW1lbnQgPSAkdGFneydzdWJqZWN0J307CisJCW15ICRjb21tZW50X3Nob3J0OworCQlpZiAoZGVmaW5lZCAkY29tbWVudCkgeworCQkJJGNvbW1lbnRfc2hvcnQgPSBjaG9wX3N0cigkY29tbWVudCwgMzAsIDUpOworCQl9CisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisJCWlmIChkZWZpbmVkICR0YWd7J2FnZSd9KSB7CisJCQlwcmludCAiPHRkPjxpPiR0YWd7J2FnZSd9PC9pPjwvdGQ+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ZD48L3RkPlxuIjsKKwkJfQorCQlwcmludCAiPHRkPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+JHRhZ3sncmVmdHlwZSd9LCBoYXNoPT4kdGFneydyZWZpZCd9KSwKKwkJICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0IG5hbWUifSwgZXNjX2h0bWwoJHRhZ3snbmFtZSd9KSkgLgorCQkgICAgICAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkPiI7CisJCWlmIChkZWZpbmVkICRjb21tZW50KSB7CisJCQlwcmludCBmb3JtYXRfc3ViamVjdF9odG1sKCRjb21tZW50LCAkY29tbWVudF9zaG9ydCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZihhY3Rpb249PiJ0YWciLCBoYXNoPT4kdGFneydpZCd9KSk7CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cInNlbGZsaW5rXCI+IjsKKwkJaWYgKCR0YWd7J3R5cGUnfSBlcSAidGFnIikgeworCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0YWciLCBoYXNoPT4kdGFneydpZCd9KX0sICJ0YWciKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICImbmJzcDsiOworCQl9CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiR0YWd7J3JlZnR5cGUnfSwgaGFzaD0+JHRhZ3sncmVmaWQnfSl9LCAkdGFneydyZWZ0eXBlJ30pOworCQlpZiAoJHRhZ3sncmVmdHlwZSd9IGVxICJjb21taXQiKSB7CisJCQlwcmludCAiIHwgIiAuICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2hvcnRsb2ciLCBoYXNoPT4kdGFneydmdWxsbmFtZSd9KX0sICJzaG9ydGxvZyIpIC4KKwkJCSAgICAgICIgfCAiIC4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJsb2ciLCBoYXNoPT4kdGFneydmdWxsbmFtZSd9KX0sICJsb2ciKTsKKwkJfSBlbHNpZiAoJHRhZ3sncmVmdHlwZSd9IGVxICJibG9iIikgeworCQkJcHJpbnQgIiB8ICIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JfcGxhaW4iLCBoYXNoPT4kdGFneydyZWZpZCd9KX0sICJyYXciKTsKKwkJfQorCQlwcmludCAiPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj4iOworCX0KKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjx0cj5cbiIgLgorCQkgICAgICAiPHRkIGNvbHNwYW49XCI1XCI+JGV4dHJhPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3RhYmxlPlxuIjsKK30KKworc3ViIGdpdF9oZWFkc19ib2R5IHsKKwkjIHVzZXMgZ2xvYmFsIHZhcmlhYmxlICRwcm9qZWN0CisJbXkgKCRoZWFkbGlzdCwgJGhlYWRfYXQsICRmcm9tLCAkdG8sICRleHRyYSkgPSBAXzsKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGhlYWRsaXN0fSBpZiAoIWRlZmluZWQgJHRvIHx8ICQjeyRoZWFkbGlzdH0gPCAkdG8pOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cImhlYWRzXCI+XG4iOworCW15ICRhbHRlcm5hdGUgPSAxOworCWZvciAobXkgJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7CisJCW15ICRlbnRyeSA9ICRoZWFkbGlzdC0+WyRpXTsKKwkJbXkgJXJlZiA9ICUkZW50cnk7CisJCW15ICRjdXJyID0gZGVmaW5lZCAkaGVhZF9hdCAmJiAkcmVmeydpZCd9IGVxICRoZWFkX2F0OworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCQlwcmludCAiPHRkPjxpPiRyZWZ7J2FnZSd9PC9pPjwvdGQ+XG4iIC4KKwkJICAgICAgKCRjdXJyID8gIjx0ZCBjbGFzcz1cImN1cnJlbnRfaGVhZFwiPiIgOiAiPHRkPiIpIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzaG9ydGxvZyIsIGhhc2g9PiRyZWZ7J2Z1bGxuYW1lJ30pLAorCQkgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QgbmFtZSJ9LGVzY19odG1sKCRyZWZ7J25hbWUnfSkpIC4KKwkJICAgICAgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzaG9ydGxvZyIsIGhhc2g9PiRyZWZ7J2Z1bGxuYW1lJ30pfSwgInNob3J0bG9nIikgLiAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ibG9nIiwgaGFzaD0+JHJlZnsnZnVsbG5hbWUnfSl9LCAibG9nIikgLiAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRyZWZ7J2Z1bGxuYW1lJ30sIGhhc2hfYmFzZT0+JHJlZnsnZnVsbG5hbWUnfSl9LCAidHJlZSIpIC4KKwkJICAgICAgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+IjsKKwl9CisJaWYgKGRlZmluZWQgJGV4dHJhKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiM1wiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKKyMgRGlzcGxheSBhIHNpbmdsZSByZW1vdGUgYmxvY2sKK3N1YiBnaXRfcmVtb3RlX2Jsb2NrIHsKKwlteSAoJHJlbW90ZSwgJHJkYXRhLCAkbGltaXQsICRoZWFkKSA9IEBfOworCisJbXkgJGhlYWRzID0gJHJkYXRhLT57J2hlYWRzJ307CisJbXkgJGZldGNoID0gJHJkYXRhLT57J2ZldGNoJ307CisJbXkgJHB1c2ggPSAkcmRhdGEtPnsncHVzaCd9OworCisJbXkgJHVybHNfdGFibGUgPSAiPHRhYmxlIGNsYXNzPVwicHJvamVjdHNfbGlzdFwiPlxuIiA7CisKKwlpZiAoZGVmaW5lZCAkZmV0Y2gpIHsKKwkJaWYgKCRmZXRjaCBlcSAkcHVzaCkgeworCQkJJHVybHNfdGFibGUgLj0gZm9ybWF0X3JlcG9fdXJsKCJVUkwiLCAkZmV0Y2gpOworCQl9IGVsc2UgeworCQkJJHVybHNfdGFibGUgLj0gZm9ybWF0X3JlcG9fdXJsKCJGZXRjaCBVUkwiLCAkZmV0Y2gpOworCQkJJHVybHNfdGFibGUgLj0gZm9ybWF0X3JlcG9fdXJsKCJQdXNoIFVSTCIsICRwdXNoKSBpZiBkZWZpbmVkICRwdXNoOworCQl9CisJfSBlbHNpZiAoZGVmaW5lZCAkcHVzaCkgeworCQkkdXJsc190YWJsZSAuPSBmb3JtYXRfcmVwb191cmwoIlB1c2ggVVJMIiwgJHB1c2gpOworCX0gZWxzZSB7CisJCSR1cmxzX3RhYmxlIC49IGZvcm1hdF9yZXBvX3VybCgiIiwgIk5vIHJlbW90ZSBVUkwiKTsKKwl9CisKKwkkdXJsc190YWJsZSAuPSAiPC90YWJsZT5cbiI7CisKKwlteSAkZG90czsKKwlpZiAoZGVmaW5lZCAkbGltaXQgJiYgJGxpbWl0IDwgQCRoZWFkcykgeworCQkkZG90cyA9ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4icmVtb3RlcyIsIGhhc2g9PiRyZW1vdGUpfSwgIi4uLiIpOworCX0KKworCXByaW50ICR1cmxzX3RhYmxlOworCWdpdF9oZWFkc19ib2R5KCRoZWFkcywgJGhlYWQsIDAsICRsaW1pdCwgJGRvdHMpOworfQorCisjIERpc3BsYXkgYSBsaXN0IG9mIHJlbW90ZSBuYW1lcyB3aXRoIHRoZSByZXNwZWN0aXZlIGZldGNoIGFuZCBwdXNoIFVSTHMKK3N1YiBnaXRfcmVtb3Rlc19saXN0IHsKKwlteSAoJHJlbW90ZWRhdGEsICRsaW1pdCkgPSBAXzsKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwiaGVhZHNcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJbXkgQHJlbW90ZXMgPSBzb3J0IGtleXMgJSRyZW1vdGVkYXRhOworCisJbXkgJGxpbWl0ZWQgPSAkbGltaXQgJiYgJGxpbWl0IDwgQHJlbW90ZXM7CisKKwkkI3JlbW90ZXMgPSAkbGltaXQgLSAxIGlmICRsaW1pdGVkOworCisJd2hpbGUgKG15ICRyZW1vdGUgPSBzaGlmdCBAcmVtb3RlcykgeworCQlteSAkcmRhdGEgPSAkcmVtb3RlZGF0YS0+eyRyZW1vdGV9OworCQlteSAkZmV0Y2ggPSAkcmRhdGEtPnsnZmV0Y2gnfTsKKwkJbXkgJHB1c2ggPSAkcmRhdGEtPnsncHVzaCd9OworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCQlwcmludCAiPHRkPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZj0+IGhyZWYoYWN0aW9uPT4ncmVtb3RlcycsIGhhc2g9PiRyZW1vdGUpLAorCQkJICAgICAgIC1jbGFzcz0+ICJsaXN0IG5hbWUifSxlc2NfaHRtbCgkcmVtb3RlKSkgLgorCQkgICAgICAiPC90ZD4iOworCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCQkgICAgICAoZGVmaW5lZCAkZmV0Y2ggPyAkY2dpLT5hKHstaHJlZj0+ICRmZXRjaH0sICJmZXRjaCIpIDogImZldGNoIikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgIChkZWZpbmVkICRwdXNoID8gJGNnaS0+YSh7LWhyZWY9PiAkcHVzaH0sICJwdXNoIikgOiAicHVzaCIpIC4KKwkJICAgICAgIjwvdGQ+IjsKKworCQlwcmludCAiPC90cj5cbiI7CisJfQorCisJaWYgKCRsaW1pdGVkKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiM1wiPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InJlbW90ZXMiKX0sICIuLi4iKSAuCisJCSAgICAgICI8L3RkPlxuIiAuICI8L3RyPlxuIjsKKwl9CisKKwlwcmludCAiPC90YWJsZT4iOworfQorCisjIERpc3BsYXkgcmVtb3RlIGhlYWRzIGdyb3VwZWQgYnkgcmVtb3RlLCB1bmxlc3MgdGhlcmUgYXJlIHRvbyBtYW55CisjIHJlbW90ZXMsIGluIHdoaWNoIGNhc2Ugd2Ugb25seSBkaXNwbGF5IHRoZSByZW1vdGUgbmFtZXMKK3N1YiBnaXRfcmVtb3Rlc19ib2R5IHsKKwlteSAoJHJlbW90ZWRhdGEsICRsaW1pdCwgJGhlYWQpID0gQF87CisJaWYgKCRsaW1pdCBhbmQgJGxpbWl0IDwga2V5cyAlJHJlbW90ZWRhdGEpIHsKKwkJZ2l0X3JlbW90ZXNfbGlzdCgkcmVtb3RlZGF0YSwgJGxpbWl0KTsKKwl9IGVsc2UgeworCQlmaWxsX3JlbW90ZV9oZWFkcygkcmVtb3RlZGF0YSk7CisJCXdoaWxlIChteSAoJHJlbW90ZSwgJHJkYXRhKSA9IGVhY2ggJSRyZW1vdGVkYXRhKSB7CisJCQlnaXRfcHJpbnRfc2VjdGlvbih7LWNsYXNzPT4icmVtb3RlIiwgLWlkPT4kcmVtb3RlfSwKKwkJCQlbInJlbW90ZXMiLCAkcmVtb3RlLCAkcmVtb3RlXSwgc3ViIHsKKwkJCQkJZ2l0X3JlbW90ZV9ibG9jaygkcmVtb3RlLCAkcmRhdGEsICRsaW1pdCwgJGhlYWQpOworCQkJCX0pOworCQl9CisJfQorfQorCitzdWIgZ2l0X3NlYXJjaF9tZXNzYWdlIHsKKwlteSAlY28gPSBAXzsKKworCW15ICRncmVwdHlwZTsKKwlpZiAoJHNlYXJjaHR5cGUgZXEgJ2NvbW1pdCcpIHsKKwkJJGdyZXB0eXBlID0gIi0tZ3JlcD0iOworCX0gZWxzaWYgKCRzZWFyY2h0eXBlIGVxICdhdXRob3InKSB7CisJCSRncmVwdHlwZSA9ICItLWF1dGhvcj0iOworCX0gZWxzaWYgKCRzZWFyY2h0eXBlIGVxICdjb21taXR0ZXInKSB7CisJCSRncmVwdHlwZSA9ICItLWNvbW1pdHRlcj0iOworCX0KKwkkZ3JlcHR5cGUgLj0gJHNlYXJjaHRleHQ7CisJbXkgQGNvbW1pdGxpc3QgPSBwYXJzZV9jb21taXRzKCRoYXNoLCAxMDEsICgxMDAgKiAkcGFnZSksIHVuZGVmLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ3JlcHR5cGUsICctLXJlZ2V4cC1pZ25vcmUtY2FzZScsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hfdXNlX3JlZ2V4cCA/ICctLWV4dGVuZGVkLXJlZ2V4cCcgOiAnLS1maXhlZC1zdHJpbmdzJyk7CisKKwlteSAkcGFnaW5nX25hdiA9ICcnOworCWlmICgkcGFnZSA+IDApIHsKKwkJJHBhZ2luZ19uYXYgLj0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+dW5kZWYpfSwKKwkJCSAgICAgICAgImZpcnN0IikgLgorCQkJIiAmc2RvdDsgIiAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlLTEpLAorCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAicCIsIC10aXRsZSA9PiAiQWx0LXAifSwgInByZXYiKTsKKwl9IGVsc2UgeworCQkkcGFnaW5nX25hdiAuPSAiZmlyc3QgJnNkb3Q7IHByZXYiOworCX0KKwlteSAkbmV4dF9saW5rID0gJyc7CisJaWYgKCQjY29tbWl0bGlzdCA+PSAxMDApIHsKKwkJJG5leHRfbGluayA9CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlKzEpLAorCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAibiIsIC10aXRsZSA9PiAiQWx0LW4ifSwgIm5leHQiKTsKKwkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgJG5leHRfbGluayI7CisJfSBlbHNlIHsKKwkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgbmV4dCI7CisJfQorCisJZ2l0X2hlYWRlcl9odG1sKCk7CisKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoYXNoLCRjb3sndHJlZSd9LCRoYXNoLCAkcGFnaW5nX25hdik7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSksICRoYXNoKTsKKwlpZiAoJHBhZ2UgPT0gMCAmJiAhQGNvbW1pdGxpc3QpIHsKKwkJcHJpbnQgIjxwPk5vIG1hdGNoLjwvcD5cbiI7CisJfSBlbHNlIHsKKwkJZ2l0X3NlYXJjaF9ncmVwX2JvZHkoXEBjb21taXRsaXN0LCAwLCA5OSwgJG5leHRfbGluayk7CisJfQorCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfc2VhcmNoX2NoYW5nZXMgeworCW15ICVjbyA9IEBfOworCisJbG9jYWwgJC8gPSAiXG4iOworCW9wZW4gbXkgJGZkLCAnLXwnLCBnaXRfY21kKCksICctLW5vLXBhZ2VyJywgJ2xvZycsIEBkaWZmX29wdHMsCisJCSctLXByZXR0eT1mb3JtYXQ6JUgnLCAnLS1uby1hYmJyZXYnLCAnLS1yYXcnLCAiLVMkc2VhcmNodGV4dCIsCisJCSgkc2VhcmNoX3VzZV9yZWdleHAgPyAnLS1waWNrYXhlLXJlZ2V4JyA6ICgpKQorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWxvZyBmYWlsZWQiKTsKKworCWdpdF9oZWFkZXJfaHRtbCgpOworCisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGFzaCwkY297J3RyZWUnfSwkaGFzaCk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSksICRoYXNoKTsKKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJwaWNrYXhlIHNlYXJjaFwiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwl1bmRlZiAlY287CisJbXkgQGZpbGVzOworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCWNob21wICRsaW5lOworCQluZXh0IHVubGVzcyAkbGluZTsKKworCQlteSAlc2V0ID0gcGFyc2VfZGlmZnRyZWVfcmF3X2xpbmUoJGxpbmUpOworCQlpZiAoZGVmaW5lZCAkc2V0eydjb21taXQnfSkgeworCQkJIyBmaW5pc2ggcHJldmlvdXMgY29tbWl0CisJCQlpZiAoJWNvKSB7CisJCQkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJCQkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCQkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNveydpZCd9KX0sCisJCQkJICAgICAgICAgICAgICAiY29tbWl0IikgLgorCQkJCSAgICAgICIgfCAiIC4KKwkJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY297J3RyZWUnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGNveydpZCd9KX0sCisJCQkJICAgICAgICAgICAgICAidHJlZSIpIC4KKwkJCQkgICAgICAiPC90ZD5cbiIgLgorCQkJCSAgICAgICI8L3RyPlxuIjsKKwkJCX0KKworCQkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQkJfQorCQkJJGFsdGVybmF0ZSBePSAxOworCQkJJWNvID0gcGFyc2VfY29tbWl0KCRzZXR7J2NvbW1pdCd9KTsKKwkJCW15ICRhdXRob3IgPSBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjb3snYXV0aG9yX25hbWUnfSwgMTUsIDUpOworCQkJcHJpbnQgIjx0ZCB0aXRsZT1cIiRjb3snYWdlX3N0cmluZ19hZ2UnfVwiPjxpPiRjb3snYWdlX3N0cmluZ19kYXRlJ308L2k+PC90ZD5cbiIgLgorCQkJICAgICAgIjx0ZD48aT4kYXV0aG9yPC9pPjwvdGQ+XG4iIC4KKwkJCSAgICAgICI8dGQ+IiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb3snaWQnfSksCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCBzdWJqZWN0In0sCisJCQkgICAgICAgICAgICAgIGNob3BfYW5kX2VzY2FwZV9zdHIoJGNveyd0aXRsZSd9LCA1MCkgLiAiPGJyLz4iKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkc2V0eyd0b19pZCd9KSB7CisJCQluZXh0IGlmICgkc2V0eyd0b19pZCd9ID1+IG0vXjB7NDB9JC8pOworCisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoX2Jhc2U9PiRjb3snaWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JHNldHsndG9faWQnfSwgZmlsZV9uYW1lPT4kc2V0eyd0b19maWxlJ30pLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwKKwkJCSAgICAgICAgICAgICAgIjxzcGFuIGNsYXNzPVwibWF0Y2hcIj4iIC4gZXNjX3BhdGgoJHNldHsnZmlsZSd9KSAuICI8L3NwYW4+IikgLgorCQkJICAgICAgIjxici8+XG4iOworCQl9CisJfQorCWNsb3NlICRmZDsKKworCSMgZmluaXNoIGxhc3QgY29tbWl0ICh3YXJuaW5nOiByZXBldGl0aW9uISkKKwlpZiAoJWNvKSB7CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNveydpZCd9KX0sCisJCSAgICAgICAgICAgICAgImNvbW1pdCIpIC4KKwkJICAgICAgIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY297J3RyZWUnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRjb3snaWQnfSl9LAorCQkgICAgICAgICAgICAgICJ0cmVlIikgLgorCQkgICAgICAiPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCisJcHJpbnQgIjwvdGFibGU+XG4iOworCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfc2VhcmNoX2ZpbGVzIHsKKwlteSAlY28gPSBAXzsKKworCWxvY2FsICQvID0gIlxuIjsKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAnZ3JlcCcsICctbicsICcteicsCisJCSRzZWFyY2hfdXNlX3JlZ2V4cCA/ICgnLUUnLCAnLWknKSA6ICctRicsCisJCSRzZWFyY2h0ZXh0LCAkY297J3RyZWUnfQorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWdyZXAgZmFpbGVkIik7CisKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKworCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2gsJGNveyd0cmVlJ30sJGhhc2gpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkaGFzaCk7CisKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwiZ3JlcF9zZWFyY2hcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJbXkgJG1hdGNoZXMgPSAwOworCW15ICRsYXN0ZmlsZSA9ICcnOworCW15ICRmaWxlX2hyZWY7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJY2hvbXAgJGxpbmU7CisJCW15ICgkZmlsZSwgJGxubywgJGx0ZXh0LCAkYmluYXJ5KTsKKwkJbGFzdCBpZiAoJG1hdGNoZXMrKyA+IDEwMDApOworCQlpZiAoJGxpbmUgPX4gL15CaW5hcnkgZmlsZSAoLispIG1hdGNoZXMkLykgeworCQkJJGZpbGUgPSAkMTsKKwkJCSRiaW5hcnkgPSAxOworCQl9IGVsc2UgeworCQkJKCRmaWxlLCAkbG5vLCAkbHRleHQpID0gc3BsaXQoL1wwLywgJGxpbmUsIDMpOworCQkJJGZpbGUgPX4gcy9eJGNveyd0cmVlJ306Ly87CisJCX0KKwkJaWYgKCRmaWxlIG5lICRsYXN0ZmlsZSkgeworCQkJJGxhc3RmaWxlIGFuZCBwcmludCAiPC90ZD48L3RyPlxuIjsKKwkJCWlmICgkYWx0ZXJuYXRlKyspIHsKKwkJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQkJfQorCQkJJGZpbGVfaHJlZiA9IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2hfYmFzZT0+JGNveydpZCd9LAorCQkJICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZSk7CisJCQlwcmludCAiPHRkIGNsYXNzPVwibGlzdFwiPiIuCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gJGZpbGVfaHJlZiwgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCRmaWxlKSk7CisJCQlwcmludCAiPC90ZD48dGQ+XG4iOworCQkJJGxhc3RmaWxlID0gJGZpbGU7CisJCX0KKwkJaWYgKCRiaW5hcnkpIHsKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwiYmluYXJ5XCI+QmluYXJ5IGZpbGU8L2Rpdj5cbiI7CisJCX0gZWxzZSB7CisJCQkkbHRleHQgPSB1bnRhYmlmeSgkbHRleHQpOworCQkJaWYgKCRsdGV4dCA9fiBtL14oLiopKCRzZWFyY2hfcmVnZXhwKSguKikkL2kpIHsKKwkJCQkkbHRleHQgPSBlc2NfaHRtbCgkMSwgLW5ic3A9PjEpOworCQkJCSRsdGV4dCAuPSAnPHNwYW4gY2xhc3M9Im1hdGNoIj4nOworCQkJCSRsdGV4dCAuPSBlc2NfaHRtbCgkMiwgLW5ic3A9PjEpOworCQkJCSRsdGV4dCAuPSAnPC9zcGFuPic7CisJCQkJJGx0ZXh0IC49IGVzY19odG1sKCQzLCAtbmJzcD0+MSk7CisJCQl9IGVsc2UgeworCQkJCSRsdGV4dCA9IGVzY19odG1sKCRsdGV4dCwgLW5ic3A9PjEpOworCQkJfQorCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwcmVcIj4iIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiAkZmlsZV9ocmVmLicjbCcuJGxubywKKwkJCQkgICAgICAgIC1jbGFzcyA9PiAibGluZW5yIn0sIHNwcmludGYoJyU0aScsICRsbm8pKSAuCisJCQkJJyAnIC4gICRsdGV4dCAuICI8L2Rpdj5cbiI7CisJCX0KKwl9CisJaWYgKCRsYXN0ZmlsZSkgeworCQlwcmludCAiPC90ZD48L3RyPlxuIjsKKwkJaWYgKCRtYXRjaGVzID4gMTAwMCkgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJkaWZmIG5vZGlmZmVyZW5jZXNcIj5Ub28gbWFueSBtYXRjaGVzLCBsaXN0aW5nIHRyaW1tZWQ8L2Rpdj5cbiI7CisJCX0KKwl9IGVsc2UgeworCQlwcmludCAiPGRpdiBjbGFzcz1cImRpZmYgbm9kaWZmZXJlbmNlc1wiPk5vIG1hdGNoZXMgZm91bmQ8L2Rpdj5cbiI7CisJfQorCWNsb3NlICRmZDsKKworCXByaW50ICI8L3RhYmxlPlxuIjsKKworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X3NlYXJjaF9ncmVwX2JvZHkgeworCW15ICgkY29tbWl0bGlzdCwgJGZyb20sICR0bywgJGV4dHJhKSA9IEBfOworCSRmcm9tID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbTsKKwkkdG8gPSAkI3skY29tbWl0bGlzdH0gaWYgKCFkZWZpbmVkICR0byB8fCAkI3skY29tbWl0bGlzdH0gPCAkdG8pOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cImNvbW1pdF9zZWFyY2hcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdC0+WyRpXX07CisJCWlmICghJWNvKSB7CisJCQluZXh0OworCQl9CisJCW15ICRjb21taXQgPSAkY297J2lkJ307CisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisJCXByaW50ICI8dGQgdGl0bGU9XCIkY297J2FnZV9zdHJpbmdfYWdlJ31cIj48aT4kY297J2FnZV9zdHJpbmdfZGF0ZSd9PC9pPjwvdGQ+XG4iIC4KKwkJICAgICAgZm9ybWF0X2F1dGhvcl9odG1sKCd0ZCcsIFwlY28sIDE1LCA1KSAuCisJCSAgICAgICI8dGQ+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNveydpZCd9KSwKKwkJICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0IHN1YmplY3QifSwKKwkJICAgICAgICAgICAgICBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjb3sndGl0bGUnfSwgNTApIC4gIjxici8+Iik7CisJCW15ICRjb21tZW50ID0gJGNveydjb21tZW50J307CisJCWZvcmVhY2ggbXkgJGxpbmUgKEAkY29tbWVudCkgeworCQkJaWYgKCRsaW5lID1+IG0vXiguKj8pKCRzZWFyY2hfcmVnZXhwKSguKikkL2kpIHsKKwkJCQlteSAoJGxlYWQsICRtYXRjaCwgJHRyYWlsKSA9ICgkMSwgJDIsICQzKTsKKwkJCQkkbWF0Y2ggPSBjaG9wX3N0cigkbWF0Y2gsIDcwLCA1LCAnY2VudGVyJyk7CisJCQkJbXkgJGNvbnRleHRsZW4gPSBpbnQoKDgwIC0gbGVuZ3RoKCRtYXRjaCkpLzIpOworCQkJCSRjb250ZXh0bGVuID0gMzAgaWYgKCRjb250ZXh0bGVuID4gMzApOworCQkJCSRsZWFkICA9IGNob3Bfc3RyKCRsZWFkLCAgJGNvbnRleHRsZW4sIDEwLCAnbGVmdCcpOworCQkJCSR0cmFpbCA9IGNob3Bfc3RyKCR0cmFpbCwgJGNvbnRleHRsZW4sIDEwLCAncmlnaHQnKTsKKworCQkJCSRsZWFkICA9IGVzY19odG1sKCRsZWFkKTsKKwkJCQkkbWF0Y2ggPSBlc2NfaHRtbCgkbWF0Y2gpOworCQkJCSR0cmFpbCA9IGVzY19odG1sKCR0cmFpbCk7CisKKwkJCQlwcmludCAiJGxlYWQ8c3BhbiBjbGFzcz1cIm1hdGNoXCI+JG1hdGNoPC9zcGFuPiR0cmFpbDxiciAvPiI7CisJCQl9CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY297J2lkJ30pfSwgImNvbW1pdCIpIC4KKwkJICAgICAgIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmYiLCBoYXNoPT4kY297J2lkJ30pfSwgImNvbW1pdGRpZmYiKSAuCisJCSAgICAgICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JGNveyd0cmVlJ30sIGhhc2hfYmFzZT0+JGNveydpZCd9KX0sICJ0cmVlIik7CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJaWYgKGRlZmluZWQgJGV4dHJhKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiM1wiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKKyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjIGFjdGlvbnMKKworc3ViIGdpdF9wcm9qZWN0X2xpc3QgeworCW15ICRvcmRlciA9ICRpbnB1dF9wYXJhbXN7J29yZGVyJ307CisJaWYgKGRlZmluZWQgJG9yZGVyICYmICRvcmRlciAhfiBtL25vbmV8cHJvamVjdHxkZXNjcnxvd25lcnxhZ2UvKSB7CisJCWRpZV9lcnJvcig0MDAsICJVbmtub3duIG9yZGVyIHBhcmFtZXRlciIpOworCX0KKworCW15IEBsaXN0ID0gZ2l0X2dldF9wcm9qZWN0c19saXN0KCRwcm9qZWN0X2ZpbHRlciwgJHN0cmljdF9leHBvcnQpOworCWlmICghQGxpc3QpIHsKKwkJZGllX2Vycm9yKDQwNCwgIk5vIHByb2plY3RzIGZvdW5kIik7CisJfQorCisJZ2l0X2hlYWRlcl9odG1sKCk7CisJaWYgKGRlZmluZWQgJGhvbWVfdGV4dCAmJiAtZiAkaG9tZV90ZXh0KSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwiaW5kZXhfaW5jbHVkZVwiPlxuIjsKKwkJaW5zZXJ0X2ZpbGUoJGhvbWVfdGV4dCk7CisJCXByaW50ICI8L2Rpdj5cbiI7CisJfQorCisJZ2l0X3Byb2plY3Rfc2VhcmNoX2Zvcm0oJHNlYXJjaHRleHQsICRzZWFyY2hfdXNlX3JlZ2V4cCk7CisJZ2l0X3Byb2plY3RfbGlzdF9ib2R5KFxAbGlzdCwgJG9yZGVyKTsKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9mb3JrcyB7CisJbXkgJG9yZGVyID0gJGlucHV0X3BhcmFtc3snb3JkZXInfTsKKwlpZiAoZGVmaW5lZCAkb3JkZXIgJiYgJG9yZGVyICF+IG0vbm9uZXxwcm9qZWN0fGRlc2NyfG93bmVyfGFnZS8pIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gb3JkZXIgcGFyYW1ldGVyIik7CisJfQorCisJbXkgJGZpbHRlciA9ICRwcm9qZWN0OworCSRmaWx0ZXIgPX4gcy9cLmdpdCQvLzsKKwlteSBAbGlzdCA9IGdpdF9nZXRfcHJvamVjdHNfbGlzdCgkZmlsdGVyKTsKKwlpZiAoIUBsaXN0KSB7CisJCWRpZV9lcnJvcig0MDQsICJObyBmb3JrcyBmb3VuZCIpOworCX0KKworCWdpdF9oZWFkZXJfaHRtbCgpOworCWdpdF9wcmludF9wYWdlX25hdignJywnJyk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3N1bW1hcnknLCAiJHByb2plY3QgZm9ya3MiKTsKKwlnaXRfcHJvamVjdF9saXN0X2JvZHkoXEBsaXN0LCAkb3JkZXIpOworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X3Byb2plY3RfaW5kZXggeworCW15IEBwcm9qZWN0cyA9IGdpdF9nZXRfcHJvamVjdHNfbGlzdCgkcHJvamVjdF9maWx0ZXIsICRzdHJpY3RfZXhwb3J0KTsKKwlpZiAoIUBwcm9qZWN0cykgeworCQlkaWVfZXJyb3IoNDA0LCAiTm8gcHJvamVjdHMgZm91bmQiKTsKKwl9CisKKwlwcmludCAkY2dpLT5oZWFkZXIoCisJCS10eXBlID0+ICd0ZXh0L3BsYWluJywKKwkJLWNoYXJzZXQgPT4gJ3V0Zi04JywKKwkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4gJ2lubGluZTsgZmlsZW5hbWU9ImluZGV4LmF1eCInKTsKKworCWZvcmVhY2ggbXkgJHByIChAcHJvamVjdHMpIHsKKwkJaWYgKCFleGlzdHMgJHByLT57J293bmVyJ30pIHsKKwkJCSRwci0+eydvd25lcid9ID0gZ2l0X2dldF9wcm9qZWN0X293bmVyKCIkcHItPnsncGF0aCd9Iik7CisJCX0KKworCQlteSAoJHBhdGgsICRvd25lcikgPSAoJHByLT57J3BhdGgnfSwgJHByLT57J293bmVyJ30pOworCQkjIHF1b3RlIGFzIGluIENHSTo6VXRpbDo6ZW5jb2RlLCBidXQga2VlcCB0aGUgc2xhc2gsIGFuZCB1c2UgJysnIGZvciAnICcKKwkJJHBhdGggID1+IHMvKFteYS16QS1aMC05Xy5cLVwvIF0pL3NwcmludGYoIiUlJTAyWCIsIG9yZCgkMSkpL2VnOworCQkkb3duZXIgPX4gcy8oW15hLXpBLVowLTlfLlwtXC8gXSkvc3ByaW50ZigiJSUlMDJYIiwgb3JkKCQxKSkvZWc7CisJCSRwYXRoICA9fiBzLyAvXCsvZzsKKwkJJG93bmVyID1+IHMvIC9cKy9nOworCisJCXByaW50ICIkcGF0aCAkb3duZXJcbiI7CisJfQorfQorCitzdWIgZ2l0X3N1bW1hcnkgeworCW15ICRkZXNjciA9IGdpdF9nZXRfcHJvamVjdF9kZXNjcmlwdGlvbigkcHJvamVjdCkgfHwgIm5vbmUiOworCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgiSEVBRCIpOworCW15ICVjZCA9ICVjbyA/IHBhcnNlX2RhdGUoJGNveydjb21taXR0ZXJfZXBvY2gnfSwgJGNveydjb21taXR0ZXJfdHonfSkgOiAoKTsKKwlteSAkaGVhZCA9ICRjb3snaWQnfTsKKwlteSAkcmVtb3RlX2hlYWRzID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3JlbW90ZV9oZWFkcycpOworCisJbXkgJG93bmVyID0gZ2l0X2dldF9wcm9qZWN0X293bmVyKCRwcm9qZWN0KTsKKworCW15ICRyZWZzID0gZ2l0X2dldF9yZWZlcmVuY2VzKCk7CisJIyBUaGVzZSBnZXRfKl9saXN0IGZ1bmN0aW9ucyByZXR1cm4gb25lIG1vcmUgdG8gYWxsb3cgdXMgdG8gc2VlIGlmCisJIyB0aGVyZSBhcmUgbW9yZSAuLi4KKwlteSBAdGFnbGlzdCAgPSBnaXRfZ2V0X3RhZ3NfbGlzdCgxNik7CisJbXkgQGhlYWRsaXN0ID0gZ2l0X2dldF9oZWFkc19saXN0KDE2KTsKKwlteSAlcmVtb3RlZGF0YSA9ICRyZW1vdGVfaGVhZHMgPyBnaXRfZ2V0X3JlbW90ZXNfbGlzdCgpIDogKCk7CisJbXkgQGZvcmtsaXN0OworCW15ICRjaGVja19mb3JrcyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdmb3JrcycpOworCisJaWYgKCRjaGVja19mb3JrcykgeworCQkjIGZpbmQgZm9ya3Mgb2YgYSBwcm9qZWN0CisJCW15ICRmaWx0ZXIgPSAkcHJvamVjdDsKKwkJJGZpbHRlciA9fiBzL1wuZ2l0JC8vOworCQlAZm9ya2xpc3QgPSBnaXRfZ2V0X3Byb2plY3RzX2xpc3QoJGZpbHRlcik7CisJCSMgZmlsdGVyIG91dCBmb3JrcyBvZiBmb3JrcworCQlAZm9ya2xpc3QgPSBmaWx0ZXJfZm9ya3NfZnJvbV9wcm9qZWN0c19saXN0KFxAZm9ya2xpc3QpCisJCQlpZiAoQGZvcmtsaXN0KTsKKwl9CisKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJ3N1bW1hcnknLCcnLCAkaGVhZCk7CisKKwlwcmludCAiPGRpdiBjbGFzcz1cInRpdGxlXCI+Jm5ic3A7PC9kaXY+XG4iOworCXByaW50ICI8dGFibGUgY2xhc3M9XCJwcm9qZWN0c19saXN0XCI+XG4iIC4KKwkgICAgICAiPHRyIGlkPVwibWV0YWRhdGFfZGVzY1wiPjx0ZD5kZXNjcmlwdGlvbjwvdGQ+PHRkPiIgLiBlc2NfaHRtbCgkZGVzY3IpIC4gIjwvdGQ+PC90cj5cbiI7CisgICAgICAgIHVubGVzcyAoJG9taXRfb3duZXIpIHsKKwkgICAgICAgIHByaW50ICAiPHRyIGlkPVwibWV0YWRhdGFfb3duZXJcIj48dGQ+b3duZXI8L3RkPjx0ZD4iIC4gZXNjX2h0bWwoJG93bmVyKSAuICI8L3RkPjwvdHI+XG4iOworICAgICAgICB9CisJaWYgKGRlZmluZWQgJGNkeydyZmMyODIyJ30pIHsKKwkJcHJpbnQgIjx0ciBpZD1cIm1ldGFkYXRhX2xjaGFuZ2VcIj48dGQ+bGFzdCBjaGFuZ2U8L3RkPiIgLgorCQkgICAgICAiPHRkPiIuZm9ybWF0X3RpbWVzdGFtcF9odG1sKFwlY2QpLiI8L3RkPjwvdHI+XG4iOworCX0KKworCSMgdXNlIHBlciBwcm9qZWN0IGdpdCBVUkwgbGlzdCBpbiAkcHJvamVjdHJvb3QvJHByb2plY3QvY2xvbmV1cmwKKwkjIG9yIG1ha2UgcHJvamVjdCBnaXQgVVJMIGZyb20gZ2l0IGJhc2UgVVJMIGFuZCBwcm9qZWN0IG5hbWUKKwlteSAkdXJsX3RhZyA9ICJVUkwiOworCW15IEB1cmxfbGlzdCA9IGdpdF9nZXRfcHJvamVjdF91cmxfbGlzdCgkcHJvamVjdCk7CisJQHVybF9saXN0ID0gbWFwIHsgIiRfLyRwcm9qZWN0IiB9IEBnaXRfYmFzZV91cmxfbGlzdCB1bmxlc3MgQHVybF9saXN0OworCWZvcmVhY2ggbXkgJGdpdF91cmwgKEB1cmxfbGlzdCkgeworCQluZXh0IHVubGVzcyAkZ2l0X3VybDsKKwkJcHJpbnQgZm9ybWF0X3JlcG9fdXJsKCR1cmxfdGFnLCAkZ2l0X3VybCk7CisJCSR1cmxfdGFnID0gIiI7CisJfQorCisJIyBUYWcgY2xvdWQKKwlteSAkc2hvd19jdGFncyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdjdGFncycpOworCWlmICgkc2hvd19jdGFncykgeworCQlteSAkY3RhZ3MgPSBnaXRfZ2V0X3Byb2plY3RfY3RhZ3MoJHByb2plY3QpOworCQlpZiAoJSRjdGFncykgeworCQkJIyB3aXRob3V0IGFiaWxpdHkgdG8gYWRkIHRhZ3MsIGRvbid0IHNob3cgaWYgdGhlcmUgYXJlIG5vbmUKKwkJCW15ICRjbG91ZCA9IGdpdF9wb3B1bGF0ZV9wcm9qZWN0X3RhZ2Nsb3VkKCRjdGFncyk7CisJCQlwcmludCAiPHRyIGlkPVwibWV0YWRhdGFfY3RhZ3NcIj4iIC4KKwkJCSAgICAgICI8dGQ+Y29udGVudCB0YWdzPC90ZD4iIC4KKwkJCSAgICAgICI8dGQ+Ii5naXRfc2hvd19wcm9qZWN0X3RhZ2Nsb3VkKCRjbG91ZCwgNDgpLiI8L3RkPiIgLgorCQkJICAgICAgIjwvdHI+XG4iOworCQl9CisJfQorCisJcHJpbnQgIjwvdGFibGU+XG4iOworCisJIyBJZiBYU1MgcHJldmVudGlvbiBpcyBvbiwgd2UgZG9uJ3QgaW5jbHVkZSBSRUFETUUuaHRtbC4KKwkjIFRPRE86IEFsbG93IGEgcmVhZG1lIGluIHNvbWUgc2FmZSBmb3JtYXQuCisJaWYgKCEkcHJldmVudF94c3MgJiYgLXMgIiRwcm9qZWN0cm9vdC8kcHJvamVjdC9SRUFETUUuaHRtbCIpIHsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZVwiPnJlYWRtZTwvZGl2PlxuIiAuCisJCSAgICAgICI8ZGl2IGNsYXNzPVwicmVhZG1lXCI+XG4iOworCQlpbnNlcnRfZmlsZSgiJHByb2plY3Ryb290LyRwcm9qZWN0L1JFQURNRS5odG1sIik7CisJCXByaW50ICJcbjwvZGl2PlxuIjsgIyBjbGFzcz0icmVhZG1lIgorCX0KKworCSMgd2UgbmVlZCB0byByZXF1ZXN0IG9uZSBtb3JlIHRoYW4gMTYgKDAuLjE1KSB0byBjaGVjayBpZgorCSMgdGhvc2UgMTYgYXJlIGFsbAorCW15IEBjb21taXRsaXN0ID0gJGhlYWQgPyBwYXJzZV9jb21taXRzKCRoZWFkLCAxNykgOiAoKTsKKwlpZiAoQGNvbW1pdGxpc3QpIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3Nob3J0bG9nJyk7CisJCWdpdF9zaG9ydGxvZ19ib2R5KFxAY29tbWl0bGlzdCwgMCwgMTUsICRyZWZzLAorCQkgICAgICAgICAgICAgICAgICAkI2NvbW1pdGxpc3QgPD0gIDE1ID8gdW5kZWYgOgorCQkgICAgICAgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InNob3J0bG9nIil9LCAiLi4uIikpOworCX0KKworCWlmIChAdGFnbGlzdCkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdigndGFncycpOworCQlnaXRfdGFnc19ib2R5KFxAdGFnbGlzdCwgMCwgMTUsCisJCSAgICAgICAgICAgICAgJCN0YWdsaXN0IDw9ICAxNSA/IHVuZGVmIDoKKwkJICAgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRhZ3MiKX0sICIuLi4iKSk7CisJfQorCisJaWYgKEBoZWFkbGlzdCkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdignaGVhZHMnKTsKKwkJZ2l0X2hlYWRzX2JvZHkoXEBoZWFkbGlzdCwgJGhlYWQsIDAsIDE1LAorCQkgICAgICAgICAgICAgICAkI2hlYWRsaXN0IDw9IDE1ID8gdW5kZWYgOgorCQkgICAgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImhlYWRzIil9LCAiLi4uIikpOworCX0KKworCWlmICglcmVtb3RlZGF0YSkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdigncmVtb3RlcycpOworCQlnaXRfcmVtb3Rlc19ib2R5KFwlcmVtb3RlZGF0YSwgMTUsICRoZWFkKTsKKwl9CisKKwlpZiAoQGZvcmtsaXN0KSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdmb3JrcycpOworCQlnaXRfcHJvamVjdF9saXN0X2JvZHkoXEBmb3JrbGlzdCwgJ2FnZScsIDAsIDE1LAorCQkgICAgICAgICAgICAgICAgICAgICAgJCNmb3JrbGlzdCA8PSAxNSA/IHVuZGVmIDoKKwkJICAgICAgICAgICAgICAgICAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iZm9ya3MiKX0sICIuLi4iKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICdub19oZWFkZXInKTsKKwl9CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF90YWcgeworCW15ICV0YWcgPSBwYXJzZV90YWcoJGhhc2gpOworCisJaWYgKCEgJXRhZykgeworCQlkaWVfZXJyb3IoNDA0LCAiVW5rbm93biB0YWcgb2JqZWN0Iik7CisJfQorCisJbXkgJGhlYWQgPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJZ2l0X2hlYWRlcl9odG1sKCk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGVhZCx1bmRlZiwkaGVhZCk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCR0YWd7J25hbWUnfSksICRoYXNoKTsKKwlwcmludCAiPGRpdiBjbGFzcz1cInRpdGxlX3RleHRcIj5cbiIgLgorCSAgICAgICI8dGFibGUgY2xhc3M9XCJvYmplY3RfaGVhZGVyXCI+XG4iIC4KKwkgICAgICAiPHRyPlxuIiAuCisJICAgICAgIjx0ZD5vYmplY3Q8L3RkPlxuIiAuCisJICAgICAgIjx0ZD4iIC4gJGNnaS0+YSh7LWNsYXNzID0+ICJsaXN0IiwgLWhyZWYgPT4gaHJlZihhY3Rpb249PiR0YWd7J3R5cGUnfSwgaGFzaD0+JHRhZ3snb2JqZWN0J30pfSwKKwkgICAgICAgICAgICAgICAgICAgICAgICR0YWd7J29iamVjdCd9KSAuICI8L3RkPlxuIiAuCisJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiR0YWd7J3R5cGUnfSwgaGFzaD0+JHRhZ3snb2JqZWN0J30pfSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWd7J3R5cGUnfSkgLiAiPC90ZD5cbiIgLgorCSAgICAgICI8L3RyPlxuIjsKKwlpZiAoZGVmaW5lZCgkdGFneydhdXRob3InfSkpIHsKKwkJZ2l0X3ByaW50X2F1dGhvcnNoaXBfcm93cyhcJXRhZywgJ2F1dGhvcicpOworCX0KKwlwcmludCAiPC90YWJsZT5cblxuIiAuCisJICAgICAgIjwvZGl2PlxuIjsKKwlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfYm9keVwiPiI7CisJbXkgJGNvbW1lbnQgPSAkdGFneydjb21tZW50J307CisJZm9yZWFjaCBteSAkbGluZSAoQCRjb21tZW50KSB7CisJCWNob21wICRsaW5lOworCQlwcmludCBlc2NfaHRtbCgkbGluZSwgLW5ic3A9PjEpIC4gIjxici8+XG4iOworCX0KKwlwcmludCAiPC9kaXY+XG4iOworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X2JsYW1lX2NvbW1vbiB7CisJbXkgJGZvcm1hdCA9IHNoaWZ0IHx8ICdwb3JjZWxhaW4nOworCWlmICgkZm9ybWF0IGVxICdwb3JjZWxhaW4nICYmICRpbnB1dF9wYXJhbXN7J2phdmFzY3JpcHQnfSkgeworCQkkZm9ybWF0ID0gJ2luY3JlbWVudGFsJzsKKwkJJGFjdGlvbiA9ICdibGFtZV9pbmNyZW1lbnRhbCc7ICMgZm9yIHBhZ2UgdGl0bGUgZXRjCisJfQorCisJIyBwZXJtaXNzaW9ucworCWdpdHdlYl9jaGVja19mZWF0dXJlKCdibGFtZScpCisJCW9yIGRpZV9lcnJvcig0MDMsICJCbGFtZSB2aWV3IG5vdCBhbGxvd2VkIik7CisKKwkjIGVycm9yIGNoZWNraW5nCisJZGllX2Vycm9yKDQwMCwgIk5vIGZpbGUgbmFtZSBnaXZlbiIpIHVubGVzcyAkZmlsZV9uYW1lOworCSRoYXNoX2Jhc2UgfHw9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwlkaWVfZXJyb3IoNDA0LCAiQ291bGRuJ3QgZmluZCBiYXNlIGNvbW1pdCIpIHVubGVzcyAkaGFzaF9iYXNlOworCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaF9iYXNlKQorCQlvciBkaWVfZXJyb3IoNDA0LCAiQ29tbWl0IG5vdCBmb3VuZCIpOworCW15ICRmdHlwZSA9ICJibG9iIjsKKwlpZiAoIWRlZmluZWQgJGhhc2gpIHsKKwkJJGhhc2ggPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkaGFzaF9iYXNlLCAkZmlsZV9uYW1lLCAiYmxvYiIpCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiRXJyb3IgbG9va2luZyB1cCBmaWxlIik7CisJfSBlbHNlIHsKKwkJJGZ0eXBlID0gZ2l0X2dldF90eXBlKCRoYXNoKTsKKwkJaWYgKCRmdHlwZSAhfiAiYmxvYiIpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJPYmplY3QgaXMgbm90IGEgYmxvYiIpOworCQl9CisJfQorCisJbXkgJGZkOworCWlmICgkZm9ybWF0IGVxICdpbmNyZW1lbnRhbCcpIHsKKwkJIyBnZXQgZmlsZSBjb250ZW50cyAoYXMgYmFzZSkKKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgJ2NhdC1maWxlJywgJ2Jsb2InLCAkaGFzaAorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWNhdC1maWxlIGZhaWxlZCIpOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2RhdGEnKSB7CisJCSMgcnVuIGdpdC1ibGFtZSAtLWluY3JlbWVudGFsCisJCW9wZW4gJGZkLCAiLXwiLCBnaXRfY21kKCksICJibGFtZSIsICItLWluY3JlbWVudGFsIiwKKwkJCSRoYXNoX2Jhc2UsICItLSIsICRmaWxlX25hbWUKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1ibGFtZSAtLWluY3JlbWVudGFsIGZhaWxlZCIpOworCX0gZWxzZSB7CisJCSMgcnVuIGdpdC1ibGFtZSAtLXBvcmNlbGFpbgorCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiYmxhbWUiLCAnLXAnLAorCQkJJGhhc2hfYmFzZSwgJy0tJywgJGZpbGVfbmFtZQorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWJsYW1lIC0tcG9yY2VsYWluIGZhaWxlZCIpOworCX0KKworCSMgaW5jcmVtZW50YWwgYmxhbWUgZGF0YSByZXR1cm5zIGVhcmx5CisJaWYgKCRmb3JtYXQgZXEgJ2RhdGEnKSB7CisJCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJCS10eXBlPT4idGV4dC9wbGFpbiIsIC1jaGFyc2V0ID0+ICJ1dGYtOCIsCisJCQktc3RhdHVzPT4gIjIwMCBPSyIpOworCQlsb2NhbCAkfCA9IDE7ICMgb3V0cHV0IGF1dG9mbHVzaAorCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJcHJpbnQgdG9fdXRmOCgkbGluZSk7CisJCX0KKwkJY2xvc2UgJGZkCisJCQlvciBwcmludCAiRVJST1IgJCFcbiI7CisKKwkJcHJpbnQgJ0VORCc7CisJCWlmIChkZWZpbmVkICR0MCAmJiBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgndGltZWQnKSkgeworCQkJcHJpbnQgJyAnLgorCQkJICAgICAgdHZfaW50ZXJ2YWwoJHQwLCBbIGdldHRpbWVvZmRheSgpIF0pLgorCQkJICAgICAgJyAnLiRudW1iZXJfb2ZfZ2l0X2NtZHM7CisJCX0KKwkJcHJpbnQgIlxuIjsKKworCQlyZXR1cm47CisJfQorCisJIyBwYWdlIGhlYWRlcgorCWdpdF9oZWFkZXJfaHRtbCgpOworCW15ICRmb3JtYXRzX25hdiA9CisJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIC1yZXBsYXk9PjEpfSwKKwkJICAgICAgICAiYmxvYiIpIC4KKwkJIiB8ICI7CisJaWYgKCRmb3JtYXQgZXEgJ2luY3JlbWVudGFsJykgeworCQkkZm9ybWF0c19uYXYgLj0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWUiLCBqYXZhc2NyaXB0PT4wLCAtcmVwbGF5PT4xKX0sCisJCQkgICAgICAgICJibGFtZSIpIC4gIiAobm9uLWluY3JlbWVudGFsKSI7CisJfSBlbHNlIHsKKwkJJGZvcm1hdHNfbmF2IC49CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lX2luY3JlbWVudGFsIiwgLXJlcGxheT0+MSl9LAorCQkJICAgICAgICAiYmxhbWUiKSAuICIgKGluY3JlbWVudGFsKSI7CisJfQorCSRmb3JtYXRzX25hdiAuPQorCQkiIHwgIiAuCisJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIC1yZXBsYXk9PjEpfSwKKwkJICAgICAgICAiaGlzdG9yeSIpIC4KKwkJIiB8ICIgLgorCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+JGFjdGlvbiwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCisJCSAgICAgICAgIkhFQUQiKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoYXNoX2Jhc2UsJGNveyd0cmVlJ30sJGhhc2hfYmFzZSwgJGZvcm1hdHNfbmF2KTsKKwlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSwgJGhhc2hfYmFzZSk7CisJZ2l0X3ByaW50X3BhZ2VfcGF0aCgkZmlsZV9uYW1lLCAkZnR5cGUsICRoYXNoX2Jhc2UpOworCisJIyBwYWdlIGJvZHkKKwlpZiAoJGZvcm1hdCBlcSAnaW5jcmVtZW50YWwnKSB7CisJCXByaW50ICI8bm9zY3JpcHQ+XG48ZGl2IGNsYXNzPVwiZXJyb3JcIj48Y2VudGVyPjxiPlxuIi4KKwkJICAgICAgIlRoaXMgcGFnZSByZXF1aXJlcyBKYXZhU2NyaXB0IHRvIHJ1bi5cbiBVc2UgIi4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PidibGFtZScsamF2YXNjcmlwdD0+MCwtcmVwbGF5PT4xKX0sCisJCSAgICAgICAgICAgICAgJ3RoaXMgcGFnZScpLgorCQkgICAgICAiIGluc3RlYWQuXG4iLgorCQkgICAgICAiPC9iPjwvY2VudGVyPjwvZGl2PlxuPC9ub3NjcmlwdD5cbiI7CisKKwkJcHJpbnQgcXEhPGRpdiBpZD0icHJvZ3Jlc3NfYmFyIiBzdHlsZT0id2lkdGg6IDEwMCU7IGJhY2tncm91bmQtY29sb3I6IHllbGxvdyI+PC9kaXY+XG4hOworCX0KKworCXByaW50IHFxITxkaXYgY2xhc3M9InBhZ2VfYm9keSI+XG4hOworCXByaW50IHFxITxkaXYgaWQ9InByb2dyZXNzX2luZm8iPi4uLiAvIC4uLjwvZGl2PlxuIQorCQlpZiAoJGZvcm1hdCBlcSAnaW5jcmVtZW50YWwnKTsKKwlwcmludCBxcSE8dGFibGUgaWQ9ImJsYW1lX3RhYmxlIiBjbGFzcz0iYmxhbWUiIHdpZHRoPSIxMDAlIj5cbiEuCisJICAgICAgI3FxITxjb2wgd2lkdGg9IjUuNWVtIiAvPjxjb2wgd2lkdGg9IjIuNWVtIiAvPjxjb2wgd2lkdGg9IioiIC8+XG4hLgorCSAgICAgIHFxITx0aGVhZD5cbiEuCisJICAgICAgcXEhPHRyPjx0aD5Db21taXQ8L3RoPjx0aD5MaW5lPC90aD48dGg+RGF0YTwvdGg+PC90cj5cbiEuCisJICAgICAgcXEhPC90aGVhZD5cbiEuCisJICAgICAgcXEhPHRib2R5PlxuITsKKworCW15IEByZXZfY29sb3IgPSBxdyhsaWdodCBkYXJrKTsKKwlteSAkbnVtX2NvbG9ycyA9IHNjYWxhcihAcmV2X2NvbG9yKTsKKwlteSAkY3VycmVudF9jb2xvciA9IDA7CisKKwlpZiAoJGZvcm1hdCBlcSAnaW5jcmVtZW50YWwnKSB7CisJCW15ICRjb2xvcl9jbGFzcyA9ICRyZXZfY29sb3JbJGN1cnJlbnRfY29sb3JdOworCisJCSNjb250ZW50cyBvZiBhIGZpbGUKKwkJbXkgJGxpbmVuciA9IDA7CisJTElORToKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJJGxpbmVucisrOworCisJCQlwcmludCBxcSE8dHIgaWQ9ImwkbGluZW5yIiBjbGFzcz0iJGNvbG9yX2NsYXNzIj4hLgorCQkJICAgICAgcXEhPHRkIGNsYXNzPSJzaGExIj48YSBocmVmPSIiPiA8L2E+PC90ZD4hLgorCQkJICAgICAgcXEhPHRkIGNsYXNzPSJsaW5lbnIiPiEuCisJCQkgICAgICBxcSE8YSBjbGFzcz0ibGluZW5yIiBocmVmPSIiPiRsaW5lbnI8L2E+PC90ZD4hOworCQkJcHJpbnQgcXEhPHRkIGNsYXNzPSJwcmUiPiEgLiBlc2NfaHRtbCgkbGluZSkgLiAiPC90ZD5cbiI7CisJCQlwcmludCBxcSE8L3RyPlxuITsKKwkJfQorCisJfSBlbHNlIHsgIyBwb3JjZWxhaW4sIGkuZS4gb3JkaW5hcnkgYmxhbWUKKwkJbXkgJW1ldGFpbmZvID0gKCk7ICMgc2F2ZXMgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0cworCisJCSMgYmxhbWUgZGF0YQorCUxJTkU6CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCQljaG9tcCAkbGluZTsKKwkJCSMgdGhlIGhlYWRlcjogPFNIQS0xPiA8c3JjIGxpbmVubz4gPGRzdCBsaW5lbm8+IFs8bGluZXMgaW4gZ3JvdXA+XQorCQkJIyBubyA8bGluZXMgaW4gZ3JvdXA+IGZvciBzdWJzZXF1ZW50IGxpbmVzIGluIGdyb3VwIG9mIGxpbmVzCisJCQlteSAoJGZ1bGxfcmV2LCAkb3JpZ19saW5lbm8sICRsaW5lbm8sICRncm91cF9zaXplKSA9CisJCQkgICAoJGxpbmUgPX4gL14oWzAtOWEtZl17NDB9KSAoXGQrKSAoXGQrKSg/OiAoXGQrKSk/JC8pOworCQkJaWYgKCFleGlzdHMgJG1ldGFpbmZveyRmdWxsX3Jldn0pIHsKKwkJCQkkbWV0YWluZm97JGZ1bGxfcmV2fSA9IHsgJ25wcmV2aW91cycgPT4gMCB9OworCQkJfQorCQkJbXkgJG1ldGEgPSAkbWV0YWluZm97JGZ1bGxfcmV2fTsKKwkJCW15ICRkYXRhOworCQkJd2hpbGUgKCRkYXRhID0gPCRmZD4pIHsKKwkJCQljaG9tcCAkZGF0YTsKKwkJCQlsYXN0IGlmICgkZGF0YSA9fiBzL15cdC8vKTsgIyBjb250ZW50cyBvZiBsaW5lCisJCQkJaWYgKCRkYXRhID1+IC9eKFxTKykoPzogKC4qKSk/JC8pIHsKKwkJCQkJJG1ldGEtPnskMX0gPSAkMiB1bmxlc3MgZXhpc3RzICRtZXRhLT57JDF9OworCQkJCX0KKwkJCQlpZiAoJGRhdGEgPX4gL15wcmV2aW91cyAvKSB7CisJCQkJCSRtZXRhLT57J25wcmV2aW91cyd9Kys7CisJCQkJfQorCQkJfQorCQkJbXkgJHNob3J0X3JldiA9IHN1YnN0cigkZnVsbF9yZXYsIDAsIDgpOworCQkJbXkgJGF1dGhvciA9ICRtZXRhLT57J2F1dGhvcid9OworCQkJbXkgJWRhdGUgPQorCQkJCXBhcnNlX2RhdGUoJG1ldGEtPnsnYXV0aG9yLXRpbWUnfSwgJG1ldGEtPnsnYXV0aG9yLXR6J30pOworCQkJbXkgJGRhdGUgPSAkZGF0ZXsnaXNvLXR6J307CisJCQlpZiAoJGdyb3VwX3NpemUpIHsKKwkJCQkkY3VycmVudF9jb2xvciA9ICgkY3VycmVudF9jb2xvciArIDEpICUgJG51bV9jb2xvcnM7CisJCQl9CisJCQlteSAkdHJfY2xhc3MgPSAkcmV2X2NvbG9yWyRjdXJyZW50X2NvbG9yXTsKKwkJCSR0cl9jbGFzcyAuPSAnIGJvdW5kYXJ5JyBpZiAoZXhpc3RzICRtZXRhLT57J2JvdW5kYXJ5J30pOworCQkJJHRyX2NsYXNzIC49ICcgbm8tcHJldmlvdXMnIGlmICgkbWV0YS0+eyducHJldmlvdXMnfSA9PSAwKTsKKwkJCSR0cl9jbGFzcyAuPSAnIG11bHRpcGxlLXByZXZpb3VzJyBpZiAoJG1ldGEtPnsnbnByZXZpb3VzJ30gPiAxKTsKKwkJCXByaW50ICI8dHIgaWQ9XCJsJGxpbmVub1wiIGNsYXNzPVwiJHRyX2NsYXNzXCI+XG4iOworCQkJaWYgKCRncm91cF9zaXplKSB7CisJCQkJcHJpbnQgIjx0ZCBjbGFzcz1cInNoYTFcIiI7CisJCQkJcHJpbnQgIiB0aXRsZT1cIiIuIGVzY19odG1sKCRhdXRob3IpIC4gIiwgJGRhdGVcIiI7CisJCQkJcHJpbnQgIiByb3dzcGFuPVwiJGdyb3VwX3NpemVcIiIgaWYgKCRncm91cF9zaXplID4gMSk7CisJCQkJcHJpbnQgIj4iOworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRmdWxsX3JldiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LAorCQkJCSAgICAgICAgICAgICAgZXNjX2h0bWwoJHNob3J0X3JldikpOworCQkJCWlmICgkZ3JvdXBfc2l6ZSA+PSAyKSB7CisJCQkJCW15IEBhdXRob3JfaW5pdGlhbHMgPSAoJGF1dGhvciA9fiAvXGIoW1s6dXBwZXI6XV0pXEIvZyk7CisJCQkJCWlmIChAYXV0aG9yX2luaXRpYWxzKSB7CisJCQkJCQlwcmludCAiPGJyIC8+IiAuCisJCQkJCQkgICAgICBlc2NfaHRtbChqb2luKCcnLCBAYXV0aG9yX2luaXRpYWxzKSk7CisJCQkJCQkjICAgICAgICAgICBvciBqb2luKCcuJywgLi4uKQorCQkJCQl9CisJCQkJfQorCQkJCXByaW50ICI8L3RkPlxuIjsKKwkJCX0KKwkJCSMgJ3ByZXZpb3VzJyA8c2hhMSBvZiBwYXJlbnQgY29tbWl0PiA8ZmlsZW5hbWUgYXQgY29tbWl0PgorCQkJaWYgKGV4aXN0cyAkbWV0YS0+eydwcmV2aW91cyd9ICYmCisJCQkgICAgJG1ldGEtPnsncHJldmlvdXMnfSA9fiAvXihbYS1mQS1GMC05XXs0MH0pICguKikkLykgeworCQkJCSRtZXRhLT57J3BhcmVudCd9ID0gJDE7CisJCQkJJG1ldGEtPnsnZmlsZV9wYXJlbnQnfSA9IHVucXVvdGUoJDIpOworCQkJfQorCQkJbXkgJGxpbmVucl9jb21taXQgPQorCQkJCWV4aXN0cygkbWV0YS0+eydwYXJlbnQnfSkgPworCQkJCSRtZXRhLT57J3BhcmVudCd9IDogJGZ1bGxfcmV2OworCQkJbXkgJGxpbmVucl9maWxlbmFtZSA9CisJCQkJZXhpc3RzKCRtZXRhLT57J2ZpbGVfcGFyZW50J30pID8KKwkJCQkkbWV0YS0+eydmaWxlX3BhcmVudCd9IDogdW5xdW90ZSgkbWV0YS0+eydmaWxlbmFtZSd9KTsKKwkJCW15ICRibGFtZWQgPSBocmVmKGFjdGlvbiA9PiAnYmxhbWUnLAorCQkJICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lID0+ICRsaW5lbnJfZmlsZW5hbWUsCisJCQkgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2UgPT4gJGxpbmVucl9jb21taXQpOworCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmVuclwiPiI7CisJCQlwcmludCAkY2dpLT5hKHsgLWhyZWYgPT4gIiRibGFtZWQjbCRvcmlnX2xpbmVubyIsCisJCQkgICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaW5lbnIiIH0sCisJCQkgICAgICAgICAgICAgIGVzY19odG1sKCRsaW5lbm8pKTsKKwkJCXByaW50ICI8L3RkPiI7CisJCQlwcmludCAiPHRkIGNsYXNzPVwicHJlXCI+IiAuIGVzY19odG1sKCRkYXRhKSAuICI8L3RkPlxuIjsKKwkJCXByaW50ICI8L3RyPlxuIjsKKwkJfSAjIGVuZCB3aGlsZQorCisJfQorCisJIyBmb290ZXIKKwlwcmludCAiPC90Ym9keT5cbiIuCisJICAgICAgIjwvdGFibGU+XG4iOyAjIGNsYXNzPSJibGFtZSIKKwlwcmludCAiPC9kaXY+XG4iOyAgICMgY2xhc3M9ImJsYW1lX2JvZHkiCisJY2xvc2UgJGZkCisJCW9yIHByaW50ICJSZWFkaW5nIGJsb2IgZmFpbGVkXG4iOworCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfYmxhbWUgeworCWdpdF9ibGFtZV9jb21tb24oKTsKK30KKworc3ViIGdpdF9ibGFtZV9pbmNyZW1lbnRhbCB7CisJZ2l0X2JsYW1lX2NvbW1vbignaW5jcmVtZW50YWwnKTsKK30KKworc3ViIGdpdF9ibGFtZV9kYXRhIHsKKwlnaXRfYmxhbWVfY29tbW9uKCdkYXRhJyk7Cit9CisKK3N1YiBnaXRfdGFncyB7CisJbXkgJGhlYWQgPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJZ2l0X2hlYWRlcl9odG1sKCk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGVhZCx1bmRlZiwkaGVhZCxmb3JtYXRfcmVmX3ZpZXdzKCd0YWdzJykpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdzdW1tYXJ5JywgJHByb2plY3QpOworCisJbXkgQHRhZ3NsaXN0ID0gZ2l0X2dldF90YWdzX2xpc3QoKTsKKwlpZiAoQHRhZ3NsaXN0KSB7CisJCWdpdF90YWdzX2JvZHkoXEB0YWdzbGlzdCk7CisJfQorCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X2hlYWRzIHsKKwlteSAkaGVhZCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoZWFkLHVuZGVmLCRoZWFkLGZvcm1hdF9yZWZfdmlld3MoJ2hlYWRzJykpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdzdW1tYXJ5JywgJHByb2plY3QpOworCisJbXkgQGhlYWRzbGlzdCA9IGdpdF9nZXRfaGVhZHNfbGlzdCgpOworCWlmIChAaGVhZHNsaXN0KSB7CisJCWdpdF9oZWFkc19ib2R5KFxAaGVhZHNsaXN0LCAkaGVhZCk7CisJfQorCWdpdF9mb290ZXJfaHRtbCgpOworfQorCisjIHVzZWQgYm90aCBmb3Igc2luZ2xlIHJlbW90ZSB2aWV3IGFuZCBmb3IgbGlzdCBvZiBhbGwgdGhlIHJlbW90ZXMKK3N1YiBnaXRfcmVtb3RlcyB7CisJZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3JlbW90ZV9oZWFkcycpCisJCW9yIGRpZV9lcnJvcig0MDMsICJSZW1vdGUgaGVhZHMgdmlldyBpcyBkaXNhYmxlZCIpOworCisJbXkgJGhlYWQgPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJbXkgJHJlbW90ZSA9ICRpbnB1dF9wYXJhbXN7J2hhc2gnfTsKKworCW15ICRyZW1vdGVkYXRhID0gZ2l0X2dldF9yZW1vdGVzX2xpc3QoJHJlbW90ZSk7CisJZGllX2Vycm9yKDUwMCwgIlVuYWJsZSB0byBnZXQgcmVtb3RlIGluZm9ybWF0aW9uIikgdW5sZXNzIGRlZmluZWQgJHJlbW90ZWRhdGE7CisKKwl1bmxlc3MgKCUkcmVtb3RlZGF0YSkgeworCQlkaWVfZXJyb3IoNDA0LCBkZWZpbmVkICRyZW1vdGUgPworCQkJIlJlbW90ZSAkcmVtb3RlIG5vdCBmb3VuZCIgOgorCQkJIk5vIHJlbW90ZXMgZm91bmQiKTsKKwl9CisKKwlnaXRfaGVhZGVyX2h0bWwodW5kZWYsIHVuZGVmLCAtYWN0aW9uX2V4dHJhID0+ICRyZW1vdGUpOworCWdpdF9wcmludF9wYWdlX25hdignJywgJycsICAkaGVhZCwgdW5kZWYsICRoZWFkLAorCQlmb3JtYXRfcmVmX3ZpZXdzKCRyZW1vdGUgPyAnJyA6ICdyZW1vdGVzJykpOworCisJZmlsbF9yZW1vdGVfaGVhZHMoJHJlbW90ZWRhdGEpOworCWlmIChkZWZpbmVkICRyZW1vdGUpIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3JlbW90ZXMnLCAiJHJlbW90ZSByZW1vdGUgZm9yICRwcm9qZWN0Iik7CisJCWdpdF9yZW1vdGVfYmxvY2soJHJlbW90ZSwgJHJlbW90ZWRhdGEtPnskcmVtb3RlfSwgdW5kZWYsICRoZWFkKTsKKwl9IGVsc2UgeworCQlnaXRfcHJpbnRfaGVhZGVyX2Rpdignc3VtbWFyeScsICIkcHJvamVjdCByZW1vdGVzIik7CisJCWdpdF9yZW1vdGVzX2JvZHkoJHJlbW90ZWRhdGEsIHVuZGVmLCAkaGVhZCk7CisJfQorCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfYmxvYl9wbGFpbiB7CisJbXkgJHR5cGUgPSBzaGlmdDsKKwlteSAkZXhwaXJlczsKKworCWlmICghZGVmaW5lZCAkaGFzaCkgeworCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQlteSAkYmFzZSA9ICRoYXNoX2Jhc2UgfHwgZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCQkJJGhhc2ggPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkYmFzZSwgJGZpbGVfbmFtZSwgImJsb2IiKQorCQkJCW9yIGRpZV9lcnJvcig0MDQsICJDYW5ub3QgZmluZCBmaWxlIik7CisJCX0gZWxzZSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiTm8gZmlsZSBuYW1lIGRlZmluZWQiKTsKKwkJfQorCX0gZWxzaWYgKCRoYXNoID1+IG0vXlswLTlhLWZBLUZdezQwfSQvKSB7CisJCSMgYmxvYnMgZGVmaW5lZCBieSBub24tdGV4dHVhbCBoYXNoIGlkJ3MgY2FuIGJlIGNhY2hlZAorCQkkZXhwaXJlcyA9ICIrMWQiOworCX0KKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJjYXQtZmlsZSIsICJibG9iIiwgJGhhc2gKKwkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWNhdC1maWxlIGJsb2IgJyRoYXNoJyBmYWlsZWQiKTsKKworCSMgY29udGVudC10eXBlIChjYW4gaW5jbHVkZSBjaGFyc2V0KQorCSR0eXBlID0gYmxvYl9jb250ZW50dHlwZSgkZmQsICRmaWxlX25hbWUsICR0eXBlKTsKKworCSMgInNhdmUgYXMiIGZpbGVuYW1lLCBldmVuIHdoZW4gbm8gJGZpbGVfbmFtZSBpcyBnaXZlbgorCW15ICRzYXZlX2FzID0gIiRoYXNoIjsKKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSRzYXZlX2FzID0gJGZpbGVfbmFtZTsKKwl9IGVsc2lmICgkdHlwZSA9fiBtL150ZXh0XC8vKSB7CisJCSRzYXZlX2FzIC49ICcudHh0JzsKKwl9CisKKwkjIFdpdGggWFNTIHByZXZlbnRpb24gb24sIGJsb2JzIG9mIGFsbCB0eXBlcyBleGNlcHQgYSBmZXcga25vd24gc2FmZQorCSMgb25lcyBhcmUgc2VydmVkIHdpdGggIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQiIHRvIG1ha2Ugc3VyZQorCSMgdGhleSBkb24ndCBydW4gaW4gb3VyIHNlY3VyaXR5IGRvbWFpbi4gIEZvciBjZXJ0YWluIGltYWdlIHR5cGVzLAorCSMgYmxvYiB2aWV3IHdyaXRlcyBhbiA8aW1nPiB0YWcgcmVmZXJyaW5nIHRvIGJsb2JfcGxhaW4gdmlldywgYW5kIHdlCisJIyB3YW50IHRvIGJlIHN1cmUgbm90IHRvIGJyZWFrIHRoYXQgYnkgc2VydmluZyB0aGUgaW1hZ2UgYXMgYW4KKwkjIGF0dGFjaG1lbnQgKHRob3VnaCBGaXJlZm94IDMgZG9lc24ndCBzZWVtIHRvIGNhcmUpLgorCW15ICRzYW5kYm94ID0gJHByZXZlbnRfeHNzICYmCisJCSR0eXBlICF+IG0hXig/OnRleHQvW2Etel0rfGltYWdlLyg/OmdpZnxwbmd8anBlZykpKD86WyA7XXwkKSE7CisKKwkjIHNlcnZlIHRleHQvKiBhcyB0ZXh0L3BsYWluCisJaWYgKCRwcmV2ZW50X3hzcyAmJgorCSAgICAoJHR5cGUgPX4gbSFedGV4dC9bYS16XStcYiguKikkISB8fAorCSAgICAgKCR0eXBlID1+IG0hXlthLXpdKy9bYS16XVwreG1sXGIoLiopJCEgJiYgLVQgJGZkKSkpIHsKKwkJbXkgJHJlc3QgPSAkMTsKKwkJJHJlc3QgPSBkZWZpbmVkICRyZXN0ID8gJHJlc3QgOiAnJzsKKwkJJHR5cGUgPSAidGV4dC9wbGFpbiRyZXN0IjsKKwl9CisKKwlwcmludCAkY2dpLT5oZWFkZXIoCisJCS10eXBlID0+ICR0eXBlLAorCQktZXhwaXJlcyA9PiAkZXhwaXJlcywKKwkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4KKwkJCSgkc2FuZGJveCA/ICdhdHRhY2htZW50JyA6ICdpbmxpbmUnKQorCQkJLiAnOyBmaWxlbmFtZT0iJyAuICRzYXZlX2FzIC4gJyInKTsKKwlsb2NhbCAkLyA9IHVuZGVmOworCWJpbm1vZGUgU1RET1VULCAnOnJhdyc7CisJcHJpbnQgPCRmZD47CisJYmlubW9kZSBTVERPVVQsICc6dXRmOCc7ICMgYXMgc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgZ2l0d2ViLmNnaQorCWNsb3NlICRmZDsKK30KKworc3ViIGdpdF9ibG9iIHsKKwlteSAkZXhwaXJlczsKKworCWlmICghZGVmaW5lZCAkaGFzaCkgeworCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQlteSAkYmFzZSA9ICRoYXNoX2Jhc2UgfHwgZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCQkJJGhhc2ggPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkYmFzZSwgJGZpbGVfbmFtZSwgImJsb2IiKQorCQkJCW9yIGRpZV9lcnJvcig0MDQsICJDYW5ub3QgZmluZCBmaWxlIik7CisJCX0gZWxzZSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiTm8gZmlsZSBuYW1lIGRlZmluZWQiKTsKKwkJfQorCX0gZWxzaWYgKCRoYXNoID1+IG0vXlswLTlhLWZBLUZdezQwfSQvKSB7CisJCSMgYmxvYnMgZGVmaW5lZCBieSBub24tdGV4dHVhbCBoYXNoIGlkJ3MgY2FuIGJlIGNhY2hlZAorCQkkZXhwaXJlcyA9ICIrMWQiOworCX0KKworCW15ICRoYXZlX2JsYW1lID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2JsYW1lJyk7CisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImNhdC1maWxlIiwgImJsb2IiLCAkaGFzaAorCQlvciBkaWVfZXJyb3IoNTAwLCAiQ291bGRuJ3QgY2F0ICRmaWxlX25hbWUsICRoYXNoIik7CisJbXkgJG1pbWV0eXBlID0gYmxvYl9taW1ldHlwZSgkZmQsICRmaWxlX25hbWUpOworCSMgdXNlICdibG9iX3BsYWluJyAoYWthICdyYXcnKSB2aWV3IGZvciBmaWxlcyB0aGF0IGNhbm5vdCBiZSBkaXNwbGF5ZWQKKwlpZiAoJG1pbWV0eXBlICF+IG0hXig/OnRleHQvfGltYWdlLyg/OmdpZnxwbmd8anBlZykkKSEgJiYgLUIgJGZkKSB7CisJCWNsb3NlICRmZDsKKwkJcmV0dXJuIGdpdF9ibG9iX3BsYWluKCRtaW1ldHlwZSk7CisJfQorCSMgd2UgY2FuIGhhdmUgYmxhbWUgb25seSBmb3IgdGV4dC8qIG1pbWV0eXBlCisJJGhhdmVfYmxhbWUgJiY9ICgkbWltZXR5cGUgPX4gbSFedGV4dC8hKTsKKworCW15ICRoaWdobGlnaHQgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnaGlnaGxpZ2h0Jyk7CisJbXkgJHN5bnRheCA9IGd1ZXNzX2ZpbGVfc3ludGF4KCRoaWdobGlnaHQsICRtaW1ldHlwZSwgJGZpbGVfbmFtZSk7CisJJGZkID0gcnVuX2hpZ2hsaWdodGVyKCRmZCwgJGhpZ2hsaWdodCwgJHN5bnRheCkKKwkJaWYgJHN5bnRheDsKKworCWdpdF9oZWFkZXJfaHRtbCh1bmRlZiwgJGV4cGlyZXMpOworCW15ICRmb3JtYXRzX25hdiA9ICcnOworCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UgJiYgKG15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaF9iYXNlKSkpIHsKKwkJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkJaWYgKCRoYXZlX2JsYW1lKSB7CisJCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWUiLCAtcmVwbGF5PT4xKX0sCisJCQkJCSAgICAgICAgImJsYW1lIikgLgorCQkJCQkiIHwgIjsKKwkJCX0KKwkJCSRmb3JtYXRzX25hdiAuPQorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIC1yZXBsYXk9PjEpfSwKKwkJCQkgICAgICAgICJoaXN0b3J5IikgLgorCQkJCSIgfCAiIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JfcGxhaW4iLCAtcmVwbGF5PT4xKX0sCisJCQkJICAgICAgICAicmF3IikgLgorCQkJCSIgfCAiIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4iSEVBRCIsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LAorCQkJCSAgICAgICAgIkhFQUQiKTsKKwkJfSBlbHNlIHsKKwkJCSRmb3JtYXRzX25hdiAuPQorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIC1yZXBsYXk9PjEpfSwKKwkJCQkgICAgICAgICJyYXciKTsKKwkJfQorCQlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoYXNoX2Jhc2UsJGNveyd0cmVlJ30sJGhhc2hfYmFzZSwgJGZvcm1hdHNfbmF2KTsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSksICRoYXNoX2Jhc2UpOworCX0gZWxzZSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9uYXZcIj5cbiIgLgorCQkgICAgICAiPGJyLz48YnIvPjwvZGl2PlxuIiAuCisJCSAgICAgICI8ZGl2IGNsYXNzPVwidGl0bGVcIj4iLmVzY19odG1sKCRoYXNoKS4iPC9kaXY+XG4iOworCX0KKwlnaXRfcHJpbnRfcGFnZV9wYXRoKCRmaWxlX25hbWUsICJibG9iIiwgJGhhc2hfYmFzZSk7CisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2JvZHlcIj5cbiI7CisJaWYgKCRtaW1ldHlwZSA9fiBtIV5pbWFnZS8hKSB7CisJCXByaW50IHFxITxpbWcgdHlwZT0iIS5lc2NfYXR0cigkbWltZXR5cGUpLnFxISIhOworCQlpZiAoJGZpbGVfbmFtZSkgeworCQkJcHJpbnQgcXEhIGFsdD0iIS5lc2NfYXR0cigkZmlsZV9uYW1lKS5xcSEiIHRpdGxlPSIhLmVzY19hdHRyKCRmaWxlX25hbWUpLnFxISIhOworCQl9CisJCXByaW50IHFxISBzcmM9IiEgLgorCQkgICAgICBocmVmKGFjdGlvbj0+ImJsb2JfcGxhaW4iLCBoYXNoPT4kaGFzaCwKKwkJICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSkgLgorCQkgICAgICBxcSEiIC8+XG4hOworCX0gZWxzZSB7CisJCW15ICRucjsKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJJG5yKys7CisJCQkkbGluZSA9IHVudGFiaWZ5KCRsaW5lKTsKKwkJCXByaW50ZiBxcSE8ZGl2IGNsYXNzPSJwcmUiPjxhIGlkPSJsJWkiIGhyZWY9IiVzI2wlaSIgY2xhc3M9ImxpbmVuciI+JTRpPC9hPiAlczwvZGl2PlxuISwKKwkJCSAgICAgICAkbnIsIGVzY19hdHRyKGhyZWYoLXJlcGxheSA9PiAxKSksICRuciwgJG5yLAorCQkJICAgICAgICRzeW50YXggPyBzYW5pdGl6ZSgkbGluZSkgOiBlc2NfaHRtbCgkbGluZSwgLW5ic3A9PjEpOworCQl9CisJfQorCWNsb3NlICRmZAorCQlvciBwcmludCAiUmVhZGluZyBibG9iIGZhaWxlZC5cbiI7CisJcHJpbnQgIjwvZGl2PiI7CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfdHJlZSB7CisJaWYgKCFkZWZpbmVkICRoYXNoX2Jhc2UpIHsKKwkJJGhhc2hfYmFzZSA9ICJIRUFEIjsKKwl9CisJaWYgKCFkZWZpbmVkICRoYXNoKSB7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCSRoYXNoID0gZ2l0X2dldF9oYXNoX2J5X3BhdGgoJGhhc2hfYmFzZSwgJGZpbGVfbmFtZSwgInRyZWUiKTsKKwkJfSBlbHNlIHsKKwkJCSRoYXNoID0gJGhhc2hfYmFzZTsKKwkJfQorCX0KKwlkaWVfZXJyb3IoNDA0LCAiTm8gc3VjaCB0cmVlIikgdW5sZXNzIGRlZmluZWQoJGhhc2gpOworCisJbXkgJHNob3dfc2l6ZXMgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnc2hvdy1zaXplcycpOworCW15ICRoYXZlX2JsYW1lID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2JsYW1lJyk7CisKKwlteSBAZW50cmllcyA9ICgpOworCXsKKwkJbG9jYWwgJC8gPSAiXDAiOworCQlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAibHMtdHJlZSIsICcteicsCisJCQkoJHNob3dfc2l6ZXMgPyAnLWwnIDogKCkpLCBAZXh0cmFfb3B0aW9ucywgJGhhc2gKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1scy10cmVlIGZhaWxlZCIpOworCQlAZW50cmllcyA9IG1hcCB7IGNob21wOyAkXyB9IDwkZmQ+OworCQljbG9zZSAkZmQKKwkJCW9yIGRpZV9lcnJvcig0MDQsICJSZWFkaW5nIHRyZWUgZmFpbGVkIik7CisJfQorCisJbXkgJHJlZnMgPSBnaXRfZ2V0X3JlZmVyZW5jZXMoKTsKKwlteSAkcmVmID0gZm9ybWF0X3JlZl9tYXJrZXIoJHJlZnMsICRoYXNoX2Jhc2UpOworCWdpdF9oZWFkZXJfaHRtbCgpOworCW15ICRiYXNlZGlyID0gJyc7CisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJiAobXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoX2Jhc2UpKSkgeworCQlteSBAdmlld3NfbmF2ID0gKCk7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCXB1c2ggQHZpZXdzX25hdiwKKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCAtcmVwbGF5PT4xKX0sCisJCQkJICAgICAgICAiaGlzdG9yeSIpLAorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiJIRUFEIiwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCisJCQkJICAgICAgICAiSEVBRCIpLAorCQl9CisJCW15ICRzbmFwc2hvdF9saW5rcyA9IGZvcm1hdF9zbmFwc2hvdF9saW5rcygkaGFzaCk7CisJCWlmIChkZWZpbmVkICRzbmFwc2hvdF9saW5rcykgeworCQkJIyBGSVhNRTogU2hvdWxkIGJlIGF2YWlsYWJsZSB3aGVuIHdlIGhhdmUgbm8gaGFzaCBiYXNlIGFzIHdlbGwuCisJCQlwdXNoIEB2aWV3c19uYXYsICRzbmFwc2hvdF9saW5rczsKKwkJfQorCQlnaXRfcHJpbnRfcGFnZV9uYXYoJ3RyZWUnLCcnLCAkaGFzaF9iYXNlLCB1bmRlZiwgdW5kZWYsCisJCSAgICAgICAgICAgICAgICAgICBqb2luKCcgfCAnLCBAdmlld3NfbmF2KSk7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwgJGhhc2hfYmFzZSk7CisJfSBlbHNlIHsKKwkJdW5kZWYgJGhhc2hfYmFzZTsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX25hdlwiPlxuIjsKKwkJcHJpbnQgIjxici8+PGJyLz48L2Rpdj5cbiI7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVcIj4iLmVzY19odG1sKCRoYXNoKS4iPC9kaXY+XG4iOworCX0KKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSRiYXNlZGlyID0gJGZpbGVfbmFtZTsKKwkJaWYgKCRiYXNlZGlyIG5lICcnICYmIHN1YnN0cigkYmFzZWRpciwgLTEpIG5lICcvJykgeworCQkJJGJhc2VkaXIgLj0gJy8nOworCQl9CisJCWdpdF9wcmludF9wYWdlX3BhdGgoJGZpbGVfbmFtZSwgJ3RyZWUnLCAkaGFzaF9iYXNlKTsKKwl9CisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2JvZHlcIj5cbiI7CisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cInRyZWVcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJIyAnLi4nICh0b3AgZGlyZWN0b3J5KSBsaW5rIGlmIHBvc3NpYmxlCisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJgorCSAgICBkZWZpbmVkICRmaWxlX25hbWUgJiYgJGZpbGVfbmFtZSA9fiBtIVteL10rJCEpIHsKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKworCQlteSAkdXAgPSAkZmlsZV9uYW1lOworCQkkdXAgPX4gcyEvP1teL10rJCEhOworCQl1bmRlZiAkdXAgdW5sZXNzICR1cDsKKwkJIyBiYXNlZCBvbiBnaXRfcHJpbnRfdHJlZV9lbnRyeQorCQlwcmludCAnPHRkIGNsYXNzPSJtb2RlIj4nIC4gbW9kZV9zdHIoJzA0MDAwMCcpIC4gIjwvdGQ+XG4iOworCQlwcmludCAnPHRkIGNsYXNzPSJzaXplIj4mbmJzcDs8L3RkPicuIlxuIiBpZiAkc2hvd19zaXplczsKKwkJcHJpbnQgJzx0ZCBjbGFzcz0ibGlzdCI+JzsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kdXApfSwKKwkJICAgICAgICAgICAgICAiLi4iKTsKKwkJcHJpbnQgIjwvdGQ+XG4iOworCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPjwvdGQ+XG4iOworCisJCXByaW50ICI8L3RyPlxuIjsKKwl9CisJZm9yZWFjaCBteSAkbGluZSAoQGVudHJpZXMpIHsKKwkJbXkgJXQgPSBwYXJzZV9sc190cmVlX2xpbmUoJGxpbmUsIC16ID0+IDEsIC1sID0+ICRzaG93X3NpemVzKTsKKworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCisJCWdpdF9wcmludF90cmVlX2VudHJ5KFwldCwgJGJhc2VkaXIsICRoYXNoX2Jhc2UsICRoYXZlX2JsYW1lKTsKKworCQlwcmludCAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3RhYmxlPlxuIiAuCisJICAgICAgIjwvZGl2PiI7CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBzbmFwc2hvdF9uYW1lIHsKKwlteSAoJHByb2plY3QsICRoYXNoKSA9IEBfOworCisJIyBwYXRoL3RvL3Byb2plY3QuZ2l0ICAtPiBwcm9qZWN0CisJIyBwYXRoL3RvL3Byb2plY3QvLmdpdCAtPiBwcm9qZWN0CisJbXkgJG5hbWUgPSB0b191dGY4KCRwcm9qZWN0KTsKKwkkbmFtZSA9fiBzLChbXi9dKS8qXC5naXQkLCQxLDsKKwkkbmFtZSA9IGJhc2VuYW1lKCRuYW1lKTsKKwkjIHNhbml0aXplIG5hbWUKKwkkbmFtZSA9fiBzL1tbOmNudHJsOl1dLz8vZzsKKworCW15ICR2ZXIgPSAkaGFzaDsKKwlpZiAoJGhhc2ggPX4gL15bMC05YS1mQS1GXSskLykgeworCQkjIHNob3J0ZW4gU0hBLTEgaGFzaAorCQlteSAkZnVsbF9oYXNoID0gZ2l0X2dldF9mdWxsX2hhc2goJHByb2plY3QsICRoYXNoKTsKKwkJaWYgKCRmdWxsX2hhc2ggPX4gL14kaGFzaC8gJiYgbGVuZ3RoKCRoYXNoKSA+IDcpIHsKKwkJCSR2ZXIgPSBnaXRfZ2V0X3Nob3J0X2hhc2goJHByb2plY3QsICRoYXNoKTsKKwkJfQorCX0gZWxzaWYgKCRoYXNoID1+IG0hXnJlZnMvdGFncy8oLiopJCEpIHsKKwkJIyB0YWdzIGRvbid0IG5lZWQgc2hvcnRlbmVkIFNIQS0xIGhhc2gKKwkJJHZlciA9ICQxOworCX0gZWxzZSB7CisJCSMgYnJhbmNoZXMgYW5kIG90aGVyIG5lZWQgc2hvcnRlbmVkIFNIQS0xIGhhc2gKKwkJaWYgKCRoYXNoID1+IG0hXnJlZnMvKD86aGVhZHN8cmVtb3RlcykvKC4qKSQhKSB7CisJCQkkdmVyID0gJDE7CisJCX0KKwkJJHZlciAuPSAnLScgLiBnaXRfZ2V0X3Nob3J0X2hhc2goJHByb2plY3QsICRoYXNoKTsKKwl9CisJIyBpbiBjYXNlIG9mIGhpZXJhcmNoaWNhbCBicmFuY2ggbmFtZXMKKwkkdmVyID1+IHMhLyEuIWc7CisKKwkjIG5hbWUgPSBwcm9qZWN0LXZlcnNpb25fc3RyaW5nCisJJG5hbWUgPSAiJG5hbWUtJHZlciI7CisKKwlyZXR1cm4gd2FudGFycmF5ID8gKCRuYW1lLCAkbmFtZSkgOiAkbmFtZTsKK30KKworc3ViIGV4aXRfaWZfdW5tb2RpZmllZF9zaW5jZSB7CisJbXkgKCRsYXRlc3RfZXBvY2gpID0gQF87CisJb3VyICRjZ2k7CisKKwlteSAkaWZfbW9kaWZpZWQgPSAkY2dpLT5odHRwKCdJRl9NT0RJRklFRF9TSU5DRScpOworCWlmIChkZWZpbmVkICRpZl9tb2RpZmllZCkgeworCQlteSAkc2luY2U7CisJCWlmIChldmFsIHsgcmVxdWlyZSBIVFRQOjpEYXRlOyAxOyB9KSB7CisJCQkkc2luY2UgPSBIVFRQOjpEYXRlOjpzdHIydGltZSgkaWZfbW9kaWZpZWQpOworCQl9IGVsc2lmIChldmFsIHsgcmVxdWlyZSBUaW1lOjpQYXJzZURhdGU7IDE7IH0pIHsKKwkJCSRzaW5jZSA9IFRpbWU6OlBhcnNlRGF0ZTo6cGFyc2VkYXRlKCRpZl9tb2RpZmllZCwgR01UID0+IDEpOworCQl9CisJCWlmIChkZWZpbmVkICRzaW5jZSAmJiAkbGF0ZXN0X2Vwb2NoIDw9ICRzaW5jZSkgeworCQkJbXkgJWxhdGVzdF9kYXRlID0gcGFyc2VfZGF0ZSgkbGF0ZXN0X2Vwb2NoKTsKKwkJCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJCQktbGFzdF9tb2RpZmllZCA9PiAkbGF0ZXN0X2RhdGV7J3JmYzI4MjInfSwKKwkJCQktc3RhdHVzID0+ICczMDQgTm90IE1vZGlmaWVkJyk7CisJCQlnb3RvIERPTkVfR0lUV0VCOworCQl9CisJfQorfQorCitzdWIgZ2l0X3NuYXBzaG90IHsKKwlteSAkZm9ybWF0ID0gJGlucHV0X3BhcmFtc3snc25hcHNob3RfZm9ybWF0J307CisJaWYgKCFAc25hcHNob3RfZm10cykgeworCQlkaWVfZXJyb3IoNDAzLCAiU25hcHNob3RzIG5vdCBhbGxvd2VkIik7CisJfQorCSMgZGVmYXVsdCB0byBmaXJzdCBzdXBwb3J0ZWQgc25hcHNob3QgZm9ybWF0CisJJGZvcm1hdCB8fD0gJHNuYXBzaG90X2ZtdHNbMF07CisJaWYgKCRmb3JtYXQgIX4gbS9eW2EtejAtOV0rJC8pIHsKKwkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgc25hcHNob3QgZm9ybWF0IHBhcmFtZXRlciIpOworCX0gZWxzaWYgKCFleGlzdHMoJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH0pKSB7CisJCWRpZV9lcnJvcig0MDAsICJVbmtub3duIHNuYXBzaG90IGZvcm1hdCIpOworCX0gZWxzaWYgKCRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydkaXNhYmxlZCd9KSB7CisJCWRpZV9lcnJvcig0MDMsICJTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiKTsKKwl9IGVsc2lmICghZ3JlcCgkXyBlcSAkZm9ybWF0LCBAc25hcHNob3RfZm10cykpIHsKKwkJZGllX2Vycm9yKDQwMywgIlVuc3VwcG9ydGVkIHNuYXBzaG90IGZvcm1hdCIpOworCX0KKworCW15ICR0eXBlID0gZ2l0X2dldF90eXBlKCIkaGFzaF57fSIpOworCWlmICghJHR5cGUpIHsKKwkJZGllX2Vycm9yKDQwNCwgJ09iamVjdCBkb2VzIG5vdCBleGlzdCcpOworCX0gIGVsc2lmICgkdHlwZSBlcSAnYmxvYicpIHsKKwkJZGllX2Vycm9yKDQwMCwgJ09iamVjdCBpcyBub3QgYSB0cmVlLWlzaCcpOworCX0KKworCW15ICgkbmFtZSwgJHByZWZpeCkgPSBzbmFwc2hvdF9uYW1lKCRwcm9qZWN0LCAkaGFzaCk7CisJbXkgJGZpbGVuYW1lID0gIiRuYW1lJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J3N1ZmZpeCd9IjsKKworCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaCk7CisJZXhpdF9pZl91bm1vZGlmaWVkX3NpbmNlKCRjb3snY29tbWl0dGVyX2Vwb2NoJ30pIGlmICVjbzsKKworCW15ICRjbWQgPSBxdW90ZV9jb21tYW5kKAorCQlnaXRfY21kKCksICdhcmNoaXZlJywKKwkJIi0tZm9ybWF0PSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydmb3JtYXQnfSIsCisJCSItLXByZWZpeD0kcHJlZml4LyIsICRoYXNoKTsKKwlpZiAoZXhpc3RzICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydjb21wcmVzc29yJ30pIHsKKwkJJGNtZCAuPSAnIHwgJyAuIHF1b3RlX2NvbW1hbmQoQHska25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnY29tcHJlc3Nvcid9fSk7CisJfQorCisJJGZpbGVuYW1lID1+IHMvKFsiXFxdKS9cXCQxL2c7CisJbXkgJWxhdGVzdF9kYXRlOworCWlmICglY28pIHsKKwkJJWxhdGVzdF9kYXRlID0gcGFyc2VfZGF0ZSgkY297J2NvbW1pdHRlcl9lcG9jaCd9LCAkY297J2NvbW1pdHRlcl90eid9KTsKKwl9CisKKwlwcmludCAkY2dpLT5oZWFkZXIoCisJCS10eXBlID0+ICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eyd0eXBlJ30sCisJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+ICdpbmxpbmU7IGZpbGVuYW1lPSInIC4gJGZpbGVuYW1lIC4gJyInLAorCQklY28gPyAoLWxhc3RfbW9kaWZpZWQgPT4gJGxhdGVzdF9kYXRleydyZmMyODIyJ30pIDogKCksCisJCS1zdGF0dXMgPT4gJzIwMCBPSycpOworCisJb3BlbiBteSAkZmQsICItfCIsICRjbWQKKwkJb3IgZGllX2Vycm9yKDUwMCwgIkV4ZWN1dGUgZ2l0LWFyY2hpdmUgZmFpbGVkIik7CisJYmlubW9kZSBTVERPVVQsICc6cmF3JzsKKwlwcmludCA8JGZkPjsKKwliaW5tb2RlIFNURE9VVCwgJzp1dGY4JzsgIyBhcyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBnaXR3ZWIuY2dpCisJY2xvc2UgJGZkOworfQorCitzdWIgZ2l0X2xvZ19nZW5lcmljIHsKKwlteSAoJGZtdF9uYW1lLCAkYm9keV9zdWJyLCAkYmFzZSwgJHBhcmVudCwgJGZpbGVfbmFtZSwgJGZpbGVfaGFzaCkgPSBAXzsKKworCW15ICRoZWFkID0gZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCWlmICghZGVmaW5lZCAkYmFzZSkgeworCQkkYmFzZSA9ICRoZWFkOworCX0KKwlpZiAoIWRlZmluZWQgJHBhZ2UpIHsKKwkJJHBhZ2UgPSAwOworCX0KKwlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygpOworCisJbXkgJGNvbW1pdF9oYXNoID0gJGJhc2U7CisJaWYgKGRlZmluZWQgJHBhcmVudCkgeworCQkkY29tbWl0X2hhc2ggPSAiJHBhcmVudC4uJGJhc2UiOworCX0KKwlteSBAY29tbWl0bGlzdCA9CisJCXBhcnNlX2NvbW1pdHMoJGNvbW1pdF9oYXNoLCAxMDEsICgxMDAgKiAkcGFnZSksCisJCSAgICAgICAgICAgICAgZGVmaW5lZCAkZmlsZV9uYW1lID8gKCRmaWxlX25hbWUsICItLWZ1bGwtaGlzdG9yeSIpIDogKCkpOworCisJbXkgJGZ0eXBlOworCWlmICghZGVmaW5lZCAkZmlsZV9oYXNoICYmIGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkjIHNvbWUgY29tbWl0cyBjb3VsZCBoYXZlIGRlbGV0ZWQgZmlsZSBpbiBxdWVzdGlvbiwKKwkJIyBhbmQgbm90IGhhdmUgaXQgaW4gdHJlZSwgYnV0IG9uZSBvZiB0aGVtIGhhcyB0byBoYXZlIGl0CisJCWZvciAobXkgJGkgPSAwOyAkaSA8IEBjb21taXRsaXN0OyAkaSsrKSB7CisJCQkkZmlsZV9oYXNoID0gZ2l0X2dldF9oYXNoX2J5X3BhdGgoJGNvbW1pdGxpc3RbJGldeydpZCd9LCAkZmlsZV9uYW1lKTsKKwkJCWxhc3QgaWYgZGVmaW5lZCAkZmlsZV9oYXNoOworCQl9CisJfQorCWlmIChkZWZpbmVkICRmaWxlX2hhc2gpIHsKKwkJJGZ0eXBlID0gZ2l0X2dldF90eXBlKCRmaWxlX2hhc2gpOworCX0KKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lICYmICFkZWZpbmVkICRmdHlwZSkgeworCQlkaWVfZXJyb3IoNTAwLCAiVW5rbm93biB0eXBlIG9mIG9iamVjdCIpOworCX0KKwlteSAlY287CisJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQklY28gPSBwYXJzZV9jb21taXQoJGJhc2UpCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiVW5rbm93biBjb21taXQgb2JqZWN0Iik7CisJfQorCisKKwlteSAkcGFnaW5nX25hdiA9IGZvcm1hdF9wYWdpbmdfbmF2KCRmbXRfbmFtZSwgJHBhZ2UsICQjY29tbWl0bGlzdCA+PSAxMDApOworCW15ICRuZXh0X2xpbmsgPSAnJzsKKwlpZiAoJCNjb21taXRsaXN0ID49IDEwMCkgeworCQkkbmV4dF9saW5rID0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+JHBhZ2UrMSksCisJCQkgICAgICAgICAtYWNjZXNza2V5ID0+ICJuIiwgLXRpdGxlID0+ICJBbHQtbiJ9LCAibmV4dCIpOworCX0KKwlteSAkcGF0Y2hfbWF4ID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdwYXRjaGVzJyk7CisJaWYgKCRwYXRjaF9tYXggJiYgIWRlZmluZWQgJGZpbGVfbmFtZSkgeworCQlpZiAoJHBhdGNoX21heCA8IDAgfHwgQGNvbW1pdGxpc3QgPD0gJHBhdGNoX21heCkgeworCQkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgIiAuCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJwYXRjaGVzIiwgLXJlcGxheT0+MSl9LAorCQkJCQkicGF0Y2hlcyIpOworCQl9CisJfQorCisJZ2l0X2hlYWRlcl9odG1sKCk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCRmbXRfbmFtZSwnJywgJGhhc2gsJGhhc2gsJGhhc2gsICRwYWdpbmdfbmF2KTsKKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkYmFzZSk7CisJfSBlbHNlIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3N1bW1hcnknLCAkcHJvamVjdCkKKwl9CisJZ2l0X3ByaW50X3BhZ2VfcGF0aCgkZmlsZV9uYW1lLCAkZnR5cGUsICRoYXNoX2Jhc2UpCisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpOworCisJJGJvZHlfc3Vici0+KFxAY29tbWl0bGlzdCwgMCwgOTksICRyZWZzLCAkbmV4dF9saW5rLAorCSAgICAgICAgICAgICAkZmlsZV9uYW1lLCAkZmlsZV9oYXNoLCAkZnR5cGUpOworCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfbG9nIHsKKwlnaXRfbG9nX2dlbmVyaWMoJ2xvZycsIFwmZ2l0X2xvZ19ib2R5LAorCSAgICAgICAgICAgICAgICAkaGFzaCwgJGhhc2hfcGFyZW50KTsKK30KKworc3ViIGdpdF9jb21taXQgeworCSRoYXNoIHx8PSAkaGFzaF9iYXNlIHx8ICJIRUFEIjsKKwlteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2gpCisJICAgIG9yIGRpZV9lcnJvcig0MDQsICJVbmtub3duIGNvbW1pdCBvYmplY3QiKTsKKworCW15ICRwYXJlbnQgID0gJGNveydwYXJlbnQnfTsKKwlteSAkcGFyZW50cyA9ICRjb3sncGFyZW50cyd9OyAjIGxpc3RyZWYKKworCSMgd2UgbmVlZCB0byBwcmVwYXJlICRmb3JtYXRzX25hdiBiZWZvcmUgYW55IHBhcmFtZXRlciBtdW5naW5nCisJbXkgJGZvcm1hdHNfbmF2OworCWlmICghZGVmaW5lZCAkcGFyZW50KSB7CisJCSMgLS1yb290IGNvbW1pdGRpZmYKKwkJJGZvcm1hdHNfbmF2IC49ICcoaW5pdGlhbCknOworCX0gZWxzaWYgKEAkcGFyZW50cyA9PSAxKSB7CisJCSMgc2luZ2xlIHBhcmVudCBjb21taXQKKwkJJGZvcm1hdHNfbmF2IC49CisJCQknKHBhcmVudDogJyAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRwYXJlbnQpfSwKKwkJCSAgICAgICAgZXNjX2h0bWwoc3Vic3RyKCRwYXJlbnQsIDAsIDcpKSkgLgorCQkJJyknOworCX0gZWxzZSB7CisJCSMgbWVyZ2UgY29tbWl0CisJCSRmb3JtYXRzX25hdiAuPQorCQkJJyhtZXJnZTogJyAuCisJCQlqb2luKCcgJywgbWFwIHsKKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kXyl9LAorCQkJCSAgICAgICAgZXNjX2h0bWwoc3Vic3RyKCRfLCAwLCA3KSkpOworCQkJfSBAJHBhcmVudHMgKSAuCisJCQknKSc7CisJfQorCWlmIChnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncGF0Y2hlcycpICYmIEAkcGFyZW50cyA8PSAxKSB7CisJCSRmb3JtYXRzX25hdiAuPSAiIHwgIiAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InBhdGNoIiwgLXJlcGxheT0+MSl9LAorCQkJCSJwYXRjaCIpOworCX0KKworCWlmICghZGVmaW5lZCAkcGFyZW50KSB7CisJCSRwYXJlbnQgPSAiLS1yb290IjsKKwl9CisJbXkgQGRpZmZ0cmVlOworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJkaWZmLXRyZWUiLCAnLXInLCAiLS1uby1jb21taXQtaWQiLAorCQlAZGlmZl9vcHRzLAorCQkoQCRwYXJlbnRzIDw9IDEgPyAkcGFyZW50IDogJy1jJyksCisJCSRoYXNoLCAiLS0iCisJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1kaWZmLXRyZWUgZmFpbGVkIik7CisJQGRpZmZ0cmVlID0gbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CisJY2xvc2UgJGZkIG9yIGRpZV9lcnJvcig0MDQsICJSZWFkaW5nIGdpdC1kaWZmLXRyZWUgZmFpbGVkIik7CisKKwkjIG5vbi10ZXh0dWFsIGhhc2ggaWQncyBjYW4gYmUgY2FjaGVkCisJbXkgJGV4cGlyZXM7CisJaWYgKCRoYXNoID1+IG0vXlswLTlhLWZBLUZdezQwfSQvKSB7CisJCSRleHBpcmVzID0gIisxZCI7CisJfQorCW15ICRyZWZzID0gZ2l0X2dldF9yZWZlcmVuY2VzKCk7CisJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY297J2lkJ30pOworCisJZ2l0X2hlYWRlcl9odG1sKHVuZGVmLCAkZXhwaXJlcyk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCdjb21taXQnLCAnJywKKwkgICAgICAgICAgICAgICAgICAgJGhhc2gsICRjb3sndHJlZSd9LCAkaGFzaCwKKwkgICAgICAgICAgICAgICAgICAgJGZvcm1hdHNfbmF2KTsKKworCWlmIChkZWZpbmVkICRjb3sncGFyZW50J30pIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdGRpZmYnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwgJGhhc2gpOworCX0gZWxzZSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCd0cmVlJywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSAuICRyZWYsICRjb3sndHJlZSd9LCAkaGFzaCk7CisJfQorCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCisJICAgICAgIjx0YWJsZSBjbGFzcz1cIm9iamVjdF9oZWFkZXJcIj5cbiI7CisJZ2l0X3ByaW50X2F1dGhvcnNoaXBfcm93cyhcJWNvKTsKKwlwcmludCAiPHRyPjx0ZD5jb21taXQ8L3RkPjx0ZCBjbGFzcz1cInNoYTFcIj4kY297J2lkJ308L3RkPjwvdHI+XG4iOworCXByaW50ICI8dHI+IiAuCisJICAgICAgIjx0ZD50cmVlPC90ZD4iIC4KKwkgICAgICAiPHRkIGNsYXNzPVwic2hhMVwiPiIgLgorCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb3sndHJlZSd9LCBoYXNoX2Jhc2U9PiRoYXNoKSwKKwkgICAgICAgICAgICAgICBjbGFzcyA9PiAibGlzdCJ9LCAkY297J3RyZWUnfSkgLgorCSAgICAgICI8L3RkPiIgLgorCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JGNveyd0cmVlJ30sIGhhc2hfYmFzZT0+JGhhc2gpfSwKKwkgICAgICAgICAgICAgICJ0cmVlIik7CisJbXkgJHNuYXBzaG90X2xpbmtzID0gZm9ybWF0X3NuYXBzaG90X2xpbmtzKCRoYXNoKTsKKwlpZiAoZGVmaW5lZCAkc25hcHNob3RfbGlua3MpIHsKKwkJcHJpbnQgIiB8ICIgLiAkc25hcHNob3RfbGlua3M7CisJfQorCXByaW50ICI8L3RkPiIgLgorCSAgICAgICI8L3RyPlxuIjsKKworCWZvcmVhY2ggbXkgJHBhciAoQCRwYXJlbnRzKSB7CisJCXByaW50ICI8dHI+IiAuCisJCSAgICAgICI8dGQ+cGFyZW50PC90ZD4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cInNoYTFcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kcGFyKSwKKwkJICAgICAgICAgICAgICAgY2xhc3MgPT4gImxpc3QifSwgJHBhcikgLgorCQkgICAgICAiPC90ZD4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kcGFyKX0sICJjb21taXQiKSAuCisJCSAgICAgICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmIiwgaGFzaD0+JGhhc2gsIGhhc2hfcGFyZW50PT4kcGFyKX0sICJkaWZmIikgLgorCQkgICAgICAiPC90ZD4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT4iLgorCSAgICAgICI8L2Rpdj5cbiI7CisKKwlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfYm9keVwiPlxuIjsKKwlnaXRfcHJpbnRfbG9nKCRjb3snY29tbWVudCd9KTsKKwlwcmludCAiPC9kaXY+XG4iOworCisJZ2l0X2RpZmZ0cmVlX2JvZHkoXEBkaWZmdHJlZSwgJGhhc2gsIEAkcGFyZW50cyk7CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9vYmplY3QgeworCSMgb2JqZWN0IGlzIGRlZmluZWQgYnk6CisJIyAtIGhhc2ggb3IgaGFzaF9iYXNlIGFsb25lCisJIyAtIGhhc2hfYmFzZSBhbmQgZmlsZV9uYW1lCisJbXkgJHR5cGU7CisKKwkjIC0gaGFzaCBvciBoYXNoX2Jhc2UgYWxvbmUKKwlpZiAoJGhhc2ggfHwgKCRoYXNoX2Jhc2UgJiYgIWRlZmluZWQgJGZpbGVfbmFtZSkpIHsKKwkJbXkgJG9iamVjdF9pZCA9ICRoYXNoIHx8ICRoYXNoX2Jhc2U7CisKKwkJb3BlbiBteSAkZmQsICItfCIsIHF1b3RlX2NvbW1hbmQoCisJCQlnaXRfY21kKCksICdjYXQtZmlsZScsICctdCcsICRvYmplY3RfaWQpIC4gJyAyPiAvZGV2L251bGwnCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiT2JqZWN0IGRvZXMgbm90IGV4aXN0Iik7CisJCSR0eXBlID0gPCRmZD47CisJCWNob21wICR0eXBlOworCQljbG9zZSAkZmQKKwkJCW9yIGRpZV9lcnJvcig0MDQsICJPYmplY3QgZG9lcyBub3QgZXhpc3QiKTsKKworCSMgLSBoYXNoX2Jhc2UgYW5kIGZpbGVfbmFtZQorCX0gZWxzaWYgKCRoYXNoX2Jhc2UgJiYgZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSRmaWxlX25hbWUgPX4gcywvKyQsLDsKKworCQlzeXN0ZW0oZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAnLWUnLCAkaGFzaF9iYXNlKSA9PSAwCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiQmFzZSBvYmplY3QgZG9lcyBub3QgZXhpc3QiKTsKKworCQkjIGhlcmUgZXJyb3JzIHNob3VsZCBub3QgaGFwZW4KKwkJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImxzLXRyZWUiLCAkaGFzaF9iYXNlLCAiLS0iLCAkZmlsZV9uYW1lCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtbHMtdHJlZSBmYWlsZWQiKTsKKwkJbXkgJGxpbmUgPSA8JGZkPjsKKwkJY2xvc2UgJGZkOworCisJCSMnMTAwNjQ0IGJsb2IgMGZhM2YzYTY2ZmI2YTEzN2Y2ZWMyYzE5MzUxZWQ0ZDgwNzA3MGZmYQlwYW5pYy5jJworCQl1bmxlc3MgKCRsaW5lICYmICRsaW5lID1+IG0vXihbMC05XSspICguKykgKFswLTlhLWZBLUZdezQwfSlcdC8pIHsKKwkJCWRpZV9lcnJvcig0MDQsICJGaWxlIG9yIGRpcmVjdG9yeSBmb3IgZ2l2ZW4gYmFzZSBkb2VzIG5vdCBleGlzdCIpOworCQl9CisJCSR0eXBlID0gJDI7CisJCSRoYXNoID0gJDM7CisJfSBlbHNlIHsKKwkJZGllX2Vycm9yKDQwMCwgIk5vdCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZmluZCBvYmplY3QiKTsKKwl9CisKKwlwcmludCAkY2dpLT5yZWRpcmVjdCgtdXJpID0+IGhyZWYoYWN0aW9uPT4kdHlwZSwgLWZ1bGw9PjEsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRoYXNoLCBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSksCisJICAgICAgICAgICAgICAgICAgICAgLXN0YXR1cyA9PiAnMzAyIEZvdW5kJyk7Cit9CisKK3N1YiBnaXRfYmxvYmRpZmYgeworCW15ICRmb3JtYXQgPSBzaGlmdCB8fCAnaHRtbCc7CisJbXkgJGRpZmZfc3R5bGUgPSAkaW5wdXRfcGFyYW1zeydkaWZmX3N0eWxlJ30gfHwgJ2lubGluZSc7CisKKwlteSAkZmQ7CisJbXkgQGRpZmZ0cmVlOworCW15ICVkaWZmaW5mbzsKKwlteSAkZXhwaXJlczsKKworCSMgcHJlcGFyaW5nICRmZCBhbmQgJWRpZmZpbmZvIGZvciBnaXRfcGF0Y2hzZXRfYm9keQorCSMgbmV3IHN0eWxlIFVSSQorCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UgJiYgZGVmaW5lZCAkaGFzaF9wYXJlbnRfYmFzZSkgeworCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQkjIHJlYWQgcmF3IG91dHB1dAorCQkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImRpZmYtdHJlZSIsICctcicsIEBkaWZmX29wdHMsCisJCQkJJGhhc2hfcGFyZW50X2Jhc2UsICRoYXNoX2Jhc2UsCisJCQkJIi0tIiwgKGRlZmluZWQgJGZpbGVfcGFyZW50ID8gJGZpbGVfcGFyZW50IDogKCkpLCAkZmlsZV9uYW1lCisJCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWRpZmYtdHJlZSBmYWlsZWQiKTsKKwkJCUBkaWZmdHJlZSA9IG1hcCB7IGNob21wOyAkXyB9IDwkZmQ+OworCQkJY2xvc2UgJGZkCisJCQkJb3IgZGllX2Vycm9yKDQwNCwgIlJlYWRpbmcgZ2l0LWRpZmYtdHJlZSBmYWlsZWQiKTsKKwkJCUBkaWZmdHJlZQorCQkJCW9yIGRpZV9lcnJvcig0MDQsICJCbG9iIGRpZmYgbm90IGZvdW5kIik7CisKKwkJfSBlbHNpZiAoZGVmaW5lZCAkaGFzaCAmJgorCQkgICAgICAgICAkaGFzaCA9fiAvWzAtOWEtZkEtRl17NDB9LykgeworCQkJIyB0cnkgdG8gZmluZCBmaWxlbmFtZSBmcm9tICRoYXNoCisKKwkJCSMgcmVhZCBmaWx0ZXJlZCByYXcgb3V0cHV0CisJCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiZGlmZi10cmVlIiwgJy1yJywgQGRpZmZfb3B0cywKKwkJCQkkaGFzaF9wYXJlbnRfYmFzZSwgJGhhc2hfYmFzZSwgIi0tIgorCQkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1kaWZmLXRyZWUgZmFpbGVkIik7CisJCQlAZGlmZnRyZWUgPQorCQkJCSMgJzoxMDA2NDQgMTAwNjQ0IDAzYjIxODI2Li4uIDNiOTNkNWU3Li4uIE0JbHMtZmlsZXMuYycKKwkJCQkjICRoYXNoID09IHRvX2lkCisJCQkJZ3JlcCB7IC9eOlswLTddezZ9IFswLTddezZ9IFswLTlhLWZBLUZdezQwfSAkaGFzaC8gfQorCQkJCW1hcCB7IGNob21wOyAkXyB9IDwkZmQ+OworCQkJY2xvc2UgJGZkCisJCQkJb3IgZGllX2Vycm9yKDQwNCwgIlJlYWRpbmcgZ2l0LWRpZmYtdHJlZSBmYWlsZWQiKTsKKwkJCUBkaWZmdHJlZQorCQkJCW9yIGRpZV9lcnJvcig0MDQsICJCbG9iIGRpZmYgbm90IGZvdW5kIik7CisKKwkJfSBlbHNlIHsKKwkJCWRpZV9lcnJvcig0MDAsICJNaXNzaW5nIG9uZSBvZiB0aGUgYmxvYiBkaWZmIHBhcmFtZXRlcnMiKTsKKwkJfQorCisJCWlmIChAZGlmZnRyZWUgPiAxKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiQW1iaWd1b3VzIGJsb2IgZGlmZiBzcGVjaWZpY2F0aW9uIik7CisJCX0KKworCQklZGlmZmluZm8gPSBwYXJzZV9kaWZmdHJlZV9yYXdfbGluZSgkZGlmZnRyZWVbMF0pOworCQkkZmlsZV9wYXJlbnQgfHw9ICRkaWZmaW5mb3snZnJvbV9maWxlJ30gfHwgJGZpbGVfbmFtZTsKKwkJJGZpbGVfbmFtZSAgIHx8PSAkZGlmZmluZm97J3RvX2ZpbGUnfTsKKworCQkkaGFzaF9wYXJlbnQgfHw9ICRkaWZmaW5mb3snZnJvbV9pZCd9OworCQkkaGFzaCAgICAgICAgfHw9ICRkaWZmaW5mb3sndG9faWQnfTsKKworCQkjIG5vbi10ZXh0dWFsIGhhc2ggaWQncyBjYW4gYmUgY2FjaGVkCisJCWlmICgkaGFzaF9iYXNlID1+IG0vXlswLTlhLWZBLUZdezQwfSQvICYmCisJCSAgICAkaGFzaF9wYXJlbnRfYmFzZSA9fiBtL15bMC05YS1mQS1GXXs0MH0kLykgeworCQkJJGV4cGlyZXMgPSAnKzFkJzsKKwkJfQorCisJCSMgb3BlbiBwYXRjaCBvdXRwdXQKKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImRpZmYtdHJlZSIsICctcicsIEBkaWZmX29wdHMsCisJCQknLXAnLCAoJGZvcm1hdCBlcSAnaHRtbCcgPyAiLS1mdWxsLWluZGV4IiA6ICgpKSwKKwkJCSRoYXNoX3BhcmVudF9iYXNlLCAkaGFzaF9iYXNlLAorCQkJIi0tIiwgKGRlZmluZWQgJGZpbGVfcGFyZW50ID8gJGZpbGVfcGFyZW50IDogKCkpLCAkZmlsZV9uYW1lCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCX0KKworCSMgb2xkL2xlZ2FjeSBzdHlsZSBVUkkgLS0gbm90IGdlbmVyYXRlZCBhbnltb3JlIHNpbmNlIDEuNC4zLgorCWlmICghJWRpZmZpbmZvKSB7CisJCWRpZV9lcnJvcignNDA0IE5vdCBGb3VuZCcsICJNaXNzaW5nIG9uZSBvZiB0aGUgYmxvYiBkaWZmIHBhcmFtZXRlcnMiKQorCX0KKworCSMgaGVhZGVyCisJaWYgKCRmb3JtYXQgZXEgJ2h0bWwnKSB7CisJCW15ICRmb3JtYXRzX25hdiA9CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JkaWZmX3BsYWluIiwgLXJlcGxheT0+MSl9LAorCQkJICAgICAgICAicmF3Iik7CisJCSRmb3JtYXRzX25hdiAuPSBkaWZmX3N0eWxlX25hdigkZGlmZl9zdHlsZSk7CisJCWdpdF9oZWFkZXJfaHRtbCh1bmRlZiwgJGV4cGlyZXMpOworCQlpZiAoZGVmaW5lZCAkaGFzaF9iYXNlICYmIChteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2hfYmFzZSkpKSB7CisJCQlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoYXNoX2Jhc2UsJGNveyd0cmVlJ30sJGhhc2hfYmFzZSwgJGZvcm1hdHNfbmF2KTsKKwkJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkaGFzaF9iYXNlKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9uYXZcIj48YnIvPiRmb3JtYXRzX25hdjxici8+PC9kaXY+XG4iOworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZVwiPiIuZXNjX2h0bWwoIiRoYXNoIHZzICRoYXNoX3BhcmVudCIpLiI8L2Rpdj5cbiI7CisJCX0KKwkJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkJZ2l0X3ByaW50X3BhZ2VfcGF0aCgkZmlsZV9uYW1lLCAiYmxvYiIsICRoYXNoX2Jhc2UpOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX3BhdGhcIj48L2Rpdj5cbiI7CisJCX0KKworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ3BsYWluJykgeworCQlwcmludCAkY2dpLT5oZWFkZXIoCisJCQktdHlwZSA9PiAndGV4dC9wbGFpbicsCisJCQktY2hhcnNldCA9PiAndXRmLTgnLAorCQkJLWV4cGlyZXMgPT4gJGV4cGlyZXMsCisJCQktY29udGVudF9kaXNwb3NpdGlvbiA9PiAnaW5saW5lOyBmaWxlbmFtZT0iJyAuICIkZmlsZV9uYW1lIiAuICcucGF0Y2giJyk7CisKKwkJcHJpbnQgIlgtR2l0LVVybDogIiAuICRjZ2ktPnNlbGZfdXJsKCkgLiAiXG5cbiI7CisKKwl9IGVsc2UgeworCQlkaWVfZXJyb3IoNDAwLCAiVW5rbm93biBibG9iZGlmZiBmb3JtYXQiKTsKKwl9CisKKwkjIHBhdGNoCisJaWYgKCRmb3JtYXQgZXEgJ2h0bWwnKSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9ib2R5XCI+XG4iOworCisJCWdpdF9wYXRjaHNldF9ib2R5KCRmZCwgJGRpZmZfc3R5bGUsCisJCSAgICAgICAgICAgICAgICAgIFsgXCVkaWZmaW5mbyBdLCAkaGFzaF9iYXNlLCAkaGFzaF9wYXJlbnRfYmFzZSk7CisJCWNsb3NlICRmZDsKKworCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYWdlX2JvZHkiCisJCWdpdF9mb290ZXJfaHRtbCgpOworCisJfSBlbHNlIHsKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCSRsaW5lID1+IHMhYS8oJGhhc2h8JGhhc2hfcGFyZW50KSEnYS8nLmVzY19wYXRoKCRkaWZmaW5mb3snZnJvbV9maWxlJ30pIWVnOworCQkJJGxpbmUgPX4gcyFiLygkaGFzaHwkaGFzaF9wYXJlbnQpISdiLycuZXNjX3BhdGgoJGRpZmZpbmZveyd0b19maWxlJ30pIWVnOworCisJCQlwcmludCAkbGluZTsKKworCQkJbGFzdCBpZiAkbGluZSA9fiBtIV5cK1wrXCshOworCQl9CisJCWxvY2FsICQvID0gdW5kZWY7CisJCXByaW50IDwkZmQ+OworCQljbG9zZSAkZmQ7CisJfQorfQorCitzdWIgZ2l0X2Jsb2JkaWZmX3BsYWluIHsKKwlnaXRfYmxvYmRpZmYoJ3BsYWluJyk7Cit9CisKKyMgYXNzdW1lcyB0aGF0IGl0IGlzIGFkZGVkIGFzIGxhdGVyIHBhcnQgb2YgYWxyZWFkeSBleGlzdGluZyBuYXZpZ2F0aW9uLAorIyBzbyBpdCByZXR1cm5zICJ8IGZvbyB8IGJhciIgcmF0aGVyIHRoYW4ganVzdCAiZm9vIHwgYmFyIgorc3ViIGRpZmZfc3R5bGVfbmF2IHsKKwlteSAoJGRpZmZfc3R5bGUsICRpc19jb21iaW5lZCkgPSBAXzsKKwkkZGlmZl9zdHlsZSB8fD0gJ2lubGluZSc7CisKKwlyZXR1cm4gIiIgaWYgKCRpc19jb21iaW5lZCk7CisKKwlteSBAc3R5bGVzID0gKGlubGluZSA9PiAnaW5saW5lJywgJ3NpZGVieXNpZGUnID0+ICdzaWRlIGJ5IHNpZGUnKTsKKwlteSAlc3R5bGVzID0gQHN0eWxlczsKKwlAc3R5bGVzID0KKwkJQHN0eWxlc1sgbWFwIHsgJF8gKiAyIH0gMC4uJCNzdHlsZXMvMiBdOworCisJcmV0dXJuIGpvaW4gJycsCisJCW1hcCB7ICIgfCAiLiRfIH0KKwkJbWFwIHsKKwkJCSRfIGVxICRkaWZmX3N0eWxlID8gJHN0eWxlc3skX30gOgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBkaWZmX3N0eWxlID0+ICRfKX0sICRzdHlsZXN7JF99KQorCQl9IEBzdHlsZXM7Cit9CisKK3N1YiBnaXRfY29tbWl0ZGlmZiB7CisJbXkgJXBhcmFtcyA9IEBfOworCW15ICRmb3JtYXQgPSAkcGFyYW1zey1mb3JtYXR9IHx8ICdodG1sJzsKKwlteSAkZGlmZl9zdHlsZSA9ICRpbnB1dF9wYXJhbXN7J2RpZmZfc3R5bGUnfSB8fCAnaW5saW5lJzsKKworCW15ICgkcGF0Y2hfbWF4KSA9IGdpdHdlYl9nZXRfZmVhdHVyZSgncGF0Y2hlcycpOworCWlmICgkZm9ybWF0IGVxICdwYXRjaCcpIHsKKwkJZGllX2Vycm9yKDQwMywgIlBhdGNoIHZpZXcgbm90IGFsbG93ZWQiKSB1bmxlc3MgJHBhdGNoX21heDsKKwl9CisKKwkkaGFzaCB8fD0gJGhhc2hfYmFzZSB8fCAiSEVBRCI7CisJbXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoKQorCSAgICBvciBkaWVfZXJyb3IoNDA0LCAiVW5rbm93biBjb21taXQgb2JqZWN0Iik7CisKKwkjIGNob29zZSBmb3JtYXQgZm9yIGNvbW1pdGRpZmYgZm9yIG1lcmdlCisJaWYgKCEgZGVmaW5lZCAkaGFzaF9wYXJlbnQgJiYgQHskY297J3BhcmVudHMnfX0gPiAxKSB7CisJCSRoYXNoX3BhcmVudCA9ICctLWNjJzsKKwl9CisJIyB3ZSBuZWVkIHRvIHByZXBhcmUgJGZvcm1hdHNfbmF2IGJlZm9yZSBhbG1vc3QgYW55IHBhcmFtZXRlciBtdW5naW5nCisJbXkgJGZvcm1hdHNfbmF2OworCWlmICgkZm9ybWF0IGVxICdodG1sJykgeworCQkkZm9ybWF0c19uYXYgPQorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmX3BsYWluIiwgLXJlcGxheT0+MSl9LAorCQkJICAgICAgICAicmF3Iik7CisJCWlmICgkcGF0Y2hfbWF4ICYmIEB7JGNveydwYXJlbnRzJ319IDw9IDEpIHsKKwkJCSRmb3JtYXRzX25hdiAuPSAiIHwgIiAuCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJwYXRjaCIsIC1yZXBsYXk9PjEpfSwKKwkJCQkJInBhdGNoIik7CisJCX0KKwkJJGZvcm1hdHNfbmF2IC49IGRpZmZfc3R5bGVfbmF2KCRkaWZmX3N0eWxlLCBAeyRjb3sncGFyZW50cyd9fSA+IDEpOworCisJCWlmIChkZWZpbmVkICRoYXNoX3BhcmVudCAmJgorCQkgICAgJGhhc2hfcGFyZW50IG5lICctYycgJiYgJGhhc2hfcGFyZW50IG5lICctLWNjJykgeworCQkJIyBjb21taXRkaWZmIHdpdGggdHdvIGNvbW1pdHMgZ2l2ZW4KKwkJCW15ICRoYXNoX3BhcmVudF9zaG9ydCA9ICRoYXNoX3BhcmVudDsKKwkJCWlmICgkaGFzaF9wYXJlbnQgPX4gbS9eWzAtOWEtZkEtRl17NDB9JC8pIHsKKwkJCQkkaGFzaF9wYXJlbnRfc2hvcnQgPSBzdWJzdHIoJGhhc2hfcGFyZW50LCAwLCA3KTsKKwkJCX0KKwkJCSRmb3JtYXRzX25hdiAuPQorCQkJCScgKGZyb20nOworCQkJZm9yIChteSAkaSA9IDA7ICRpIDwgQHskY297J3BhcmVudHMnfX07ICRpKyspIHsKKwkJCQlpZiAoJGNveydwYXJlbnRzJ31bJGldIGVxICRoYXNoX3BhcmVudCkgeworCQkJCQkkZm9ybWF0c19uYXYgLj0gJyBwYXJlbnQgJyAuICgkaSsxKTsKKwkJCQkJbGFzdDsKKwkJCQl9CisJCQl9CisJCQkkZm9ybWF0c19uYXYgLj0gJzogJyAuCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGhhc2hfcGFyZW50LCBoYXNoX2Jhc2U9PnVuZGVmKX0sCisJCQkJICAgICAgICBlc2NfaHRtbCgkaGFzaF9wYXJlbnRfc2hvcnQpKSAuCisJCQkJJyknOworCQl9IGVsc2lmICghJGNveydwYXJlbnQnfSkgeworCQkJIyAtLXJvb3QgY29tbWl0ZGlmZgorCQkJJGZvcm1hdHNfbmF2IC49ICcgKGluaXRpYWwpJzsKKwkJfSBlbHNpZiAoc2NhbGFyIEB7JGNveydwYXJlbnRzJ319ID09IDEpIHsKKwkJCSMgc2luZ2xlIHBhcmVudCBjb21taXQKKwkJCSRmb3JtYXRzX25hdiAuPQorCQkJCScgKHBhcmVudDogJyAuCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGNveydwYXJlbnQnfSwgaGFzaF9iYXNlPT51bmRlZil9LAorCQkJCSAgICAgICAgZXNjX2h0bWwoc3Vic3RyKCRjb3sncGFyZW50J30sIDAsIDcpKSkgLgorCQkJCScpJzsKKwkJfSBlbHNlIHsKKwkJCSMgbWVyZ2UgY29tbWl0CisJCQlpZiAoJGhhc2hfcGFyZW50IGVxICctLWNjJykgeworCQkJCSRmb3JtYXRzX25hdiAuPSAnIHwgJyAuCisJCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kaGFzaCwgaGFzaF9wYXJlbnQ9PictYycpfSwKKwkJCQkJICAgICAgICAnY29tYmluZWQnKTsKKwkJCX0gZWxzZSB7ICMgJGhhc2hfcGFyZW50IGVxICctYycKKwkJCQkkZm9ybWF0c19uYXYgLj0gJyB8ICcgLgorCQkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGhhc2gsIGhhc2hfcGFyZW50PT4nLS1jYycpfSwKKwkJCQkJICAgICAgICAnY29tcGFjdCcpOworCQkJfQorCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJJyAobWVyZ2U6ICcgLgorCQkJCWpvaW4oJyAnLCBtYXAgeworCQkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JF8sIGhhc2hfYmFzZT0+dW5kZWYpfSwKKwkJCQkJICAgICAgICBlc2NfaHRtbChzdWJzdHIoJF8sIDAsIDcpKSk7CisJCQkJfSBAeyRjb3sncGFyZW50cyd9fSApIC4KKwkJCQknKSc7CisJCX0KKwl9CisKKwlteSAkaGFzaF9wYXJlbnRfcGFyYW0gPSAkaGFzaF9wYXJlbnQ7CisJaWYgKCFkZWZpbmVkICRoYXNoX3BhcmVudF9wYXJhbSkgeworCQkjIC0tY2MgZm9yIG11bHRpcGxlIHBhcmVudHMsIC0tcm9vdCBmb3IgcGFyZW50bGVzcworCQkkaGFzaF9wYXJlbnRfcGFyYW0gPQorCQkJQHskY297J3BhcmVudHMnfX0gPiAxID8gJy0tY2MnIDogJGNveydwYXJlbnQnfSB8fCAnLS1yb290JzsKKwl9CisKKwkjIHJlYWQgY29tbWl0ZGlmZgorCW15ICRmZDsKKwlteSBAZGlmZnRyZWU7CisJaWYgKCRmb3JtYXQgZXEgJ2h0bWwnKSB7CisJCW9wZW4gJGZkLCAiLXwiLCBnaXRfY21kKCksICJkaWZmLXRyZWUiLCAnLXInLCBAZGlmZl9vcHRzLAorCQkJIi0tbm8tY29tbWl0LWlkIiwgIi0tcGF0Y2gtd2l0aC1yYXciLCAiLS1mdWxsLWluZGV4IiwKKwkJCSRoYXNoX3BhcmVudF9wYXJhbSwgJGhhc2gsICItLSIKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1kaWZmLXRyZWUgZmFpbGVkIik7CisKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJIyBlbXB0eSBsaW5lIGVuZHMgcmF3IHBhcnQgb2YgZGlmZi10cmVlIG91dHB1dAorCQkJbGFzdCB1bmxlc3MgJGxpbmU7CisJCQlwdXNoIEBkaWZmdHJlZSwgc2NhbGFyIHBhcnNlX2RpZmZ0cmVlX3Jhd19saW5lKCRsaW5lKTsKKwkJfQorCisJfSBlbHNpZiAoJGZvcm1hdCBlcSAncGxhaW4nKSB7CisJCW9wZW4gJGZkLCAiLXwiLCBnaXRfY21kKCksICJkaWZmLXRyZWUiLCAnLXInLCBAZGlmZl9vcHRzLAorCQkJJy1wJywgJGhhc2hfcGFyZW50X3BhcmFtLCAkaGFzaCwgIi0tIgorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWRpZmYtdHJlZSBmYWlsZWQiKTsKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdwYXRjaCcpIHsKKwkJIyBGb3IgY29tbWl0IHJhbmdlcywgd2UgbGltaXQgdGhlIG91dHB1dCB0byB0aGUgbnVtYmVyIG9mCisJCSMgcGF0Y2hlcyBzcGVjaWZpZWQgaW4gdGhlICdwYXRjaGVzJyBmZWF0dXJlLgorCQkjIEZvciBzaW5nbGUgY29tbWl0cywgd2UgbGltaXQgdGhlIG91dHB1dCB0byBhIHNpbmdsZSBwYXRjaCwKKwkJIyBkaXZlcmdpbmcgZnJvbSB0aGUgZ2l0LWZvcm1hdC1wYXRjaCBkZWZhdWx0LgorCQlteSBAY29tbWl0X3NwZWMgPSAoKTsKKwkJaWYgKCRoYXNoX3BhcmVudCkgeworCQkJaWYgKCRwYXRjaF9tYXggPiAwKSB7CisJCQkJcHVzaCBAY29tbWl0X3NwZWMsICItJHBhdGNoX21heCI7CisJCQl9CisJCQlwdXNoIEBjb21taXRfc3BlYywgJy1uJywgIiRoYXNoX3BhcmVudC4uJGhhc2giOworCQl9IGVsc2UgeworCQkJaWYgKCRwYXJhbXN7LXNpbmdsZX0pIHsKKwkJCQlwdXNoIEBjb21taXRfc3BlYywgJy0xJzsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCRwYXRjaF9tYXggPiAwKSB7CisJCQkJCXB1c2ggQGNvbW1pdF9zcGVjLCAiLSRwYXRjaF9tYXgiOworCQkJCX0KKwkJCQlwdXNoIEBjb21taXRfc3BlYywgIi1uIjsKKwkJCX0KKwkJCXB1c2ggQGNvbW1pdF9zcGVjLCAnLS1yb290JywgJGhhc2g7CisJCX0KKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImZvcm1hdC1wYXRjaCIsIEBkaWZmX29wdHMsCisJCQknLS1lbmNvZGluZz11dGY4JywgJy0tc3Rkb3V0JywgQGNvbW1pdF9zcGVjCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtZm9ybWF0LXBhdGNoIGZhaWxlZCIpOworCX0gZWxzZSB7CisJCWRpZV9lcnJvcig0MDAsICJVbmtub3duIGNvbW1pdGRpZmYgZm9ybWF0Iik7CisJfQorCisJIyBub24tdGV4dHVhbCBoYXNoIGlkJ3MgY2FuIGJlIGNhY2hlZAorCW15ICRleHBpcmVzOworCWlmICgkaGFzaCA9fiBtL15bMC05YS1mQS1GXXs0MH0kLykgeworCQkkZXhwaXJlcyA9ICIrMWQiOworCX0KKworCSMgd3JpdGUgY29tbWl0IG1lc3NhZ2UKKwlpZiAoJGZvcm1hdCBlcSAnaHRtbCcpIHsKKwkJbXkgJHJlZnMgPSBnaXRfZ2V0X3JlZmVyZW5jZXMoKTsKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY297J2lkJ30pOworCisJCWdpdF9oZWFkZXJfaHRtbCh1bmRlZiwgJGV4cGlyZXMpOworCQlnaXRfcHJpbnRfcGFnZV9uYXYoJ2NvbW1pdGRpZmYnLCcnLCAkaGFzaCwkY297J3RyZWUnfSwkaGFzaCwgJGZvcm1hdHNfbmF2KTsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAkcmVmLCAkaGFzaCk7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCisJCSAgICAgICI8dGFibGUgY2xhc3M9XCJvYmplY3RfaGVhZGVyXCI+XG4iOworCQlnaXRfcHJpbnRfYXV0aG9yc2hpcF9yb3dzKFwlY28pOworCQlwcmludCAiPC90YWJsZT4iLgorCQkgICAgICAiPC9kaXY+XG4iOworCQlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfYm9keVwiPlxuIjsKKwkJaWYgKEB7JGNveydjb21tZW50J319ID4gMSkgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJsb2dcIj5cbiI7CisJCQlnaXRfcHJpbnRfbG9nKCRjb3snY29tbWVudCd9LCAtZmluYWxfZW1wdHlfbGluZT0+IDEsIC1yZW1vdmVfdGl0bGUgPT4gMSk7CisJCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJsb2ciCisJCX0KKworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ3BsYWluJykgeworCQlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygidGFncyIpOworCQlteSAkdGFnbmFtZSA9IGdpdF9nZXRfcmV2X25hbWVfdGFncygkaGFzaCk7CisJCW15ICRmaWxlbmFtZSA9IGJhc2VuYW1lKCRwcm9qZWN0KSAuICItJGhhc2gucGF0Y2giOworCisJCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJCS10eXBlID0+ICd0ZXh0L3BsYWluJywKKwkJCS1jaGFyc2V0ID0+ICd1dGYtOCcsCisJCQktZXhwaXJlcyA9PiAkZXhwaXJlcywKKwkJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+ICdpbmxpbmU7IGZpbGVuYW1lPSInIC4gIiRmaWxlbmFtZSIgLiAnIicpOworCQlteSAlYWQgPSBwYXJzZV9kYXRlKCRjb3snYXV0aG9yX2Vwb2NoJ30sICRjb3snYXV0aG9yX3R6J30pOworCQlwcmludCAiRnJvbTogIiAuIHRvX3V0ZjgoJGNveydhdXRob3InfSkgLiAiXG4iOworCQlwcmludCAiRGF0ZTogJGFkeydyZmMyODIyJ30gKCRhZHsndHpfbG9jYWwnfSlcbiI7CisJCXByaW50ICJTdWJqZWN0OiAiIC4gdG9fdXRmOCgkY297J3RpdGxlJ30pIC4gIlxuIjsKKworCQlwcmludCAiWC1HaXQtVGFnOiAkdGFnbmFtZVxuIiBpZiAkdGFnbmFtZTsKKwkJcHJpbnQgIlgtR2l0LVVybDogIiAuICRjZ2ktPnNlbGZfdXJsKCkgLiAiXG5cbiI7CisKKwkJZm9yZWFjaCBteSAkbGluZSAoQHskY297J2NvbW1lbnQnfX0pIHsKKwkJCXByaW50IHRvX3V0ZjgoJGxpbmUpIC4gIlxuIjsKKwkJfQorCQlwcmludCAiLS0tXG5cbiI7CisJfSBlbHNpZiAoJGZvcm1hdCBlcSAncGF0Y2gnKSB7CisJCW15ICRmaWxlbmFtZSA9IGJhc2VuYW1lKCRwcm9qZWN0KSAuICItJGhhc2gucGF0Y2giOworCisJCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJCS10eXBlID0+ICd0ZXh0L3BsYWluJywKKwkJCS1jaGFyc2V0ID0+ICd1dGYtOCcsCisJCQktZXhwaXJlcyA9PiAkZXhwaXJlcywKKwkJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+ICdpbmxpbmU7IGZpbGVuYW1lPSInIC4gIiRmaWxlbmFtZSIgLiAnIicpOworCX0KKworCSMgd3JpdGUgcGF0Y2gKKwlpZiAoJGZvcm1hdCBlcSAnaHRtbCcpIHsKKwkJbXkgJHVzZV9wYXJlbnRzID0gIWRlZmluZWQgJGhhc2hfcGFyZW50IHx8CisJCQkkaGFzaF9wYXJlbnQgZXEgJy1jJyB8fCAkaGFzaF9wYXJlbnQgZXEgJy0tY2MnOworCQlnaXRfZGlmZnRyZWVfYm9keShcQGRpZmZ0cmVlLCAkaGFzaCwKKwkJICAgICAgICAgICAgICAgICAgJHVzZV9wYXJlbnRzID8gQHskY297J3BhcmVudHMnfX0gOiAkaGFzaF9wYXJlbnQpOworCQlwcmludCAiPGJyLz5cbiI7CisKKwkJZ2l0X3BhdGNoc2V0X2JvZHkoJGZkLCAkZGlmZl9zdHlsZSwKKwkJICAgICAgICAgICAgICAgICAgXEBkaWZmdHJlZSwgJGhhc2gsCisJCSAgICAgICAgICAgICAgICAgICR1c2VfcGFyZW50cyA/IEB7JGNveydwYXJlbnRzJ319IDogJGhhc2hfcGFyZW50KTsKKwkJY2xvc2UgJGZkOworCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYWdlX2JvZHkiCisJCWdpdF9mb290ZXJfaHRtbCgpOworCisJfSBlbHNpZiAoJGZvcm1hdCBlcSAncGxhaW4nKSB7CisJCWxvY2FsICQvID0gdW5kZWY7CisJCXByaW50IDwkZmQ+OworCQljbG9zZSAkZmQKKwkJCW9yIHByaW50ICJSZWFkaW5nIGdpdC1kaWZmLXRyZWUgZmFpbGVkXG4iOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ3BhdGNoJykgeworCQlsb2NhbCAkLyA9IHVuZGVmOworCQlwcmludCA8JGZkPjsKKwkJY2xvc2UgJGZkCisJCQlvciBwcmludCAiUmVhZGluZyBnaXQtZm9ybWF0LXBhdGNoIGZhaWxlZFxuIjsKKwl9Cit9CisKK3N1YiBnaXRfY29tbWl0ZGlmZl9wbGFpbiB7CisJZ2l0X2NvbW1pdGRpZmYoLWZvcm1hdCA9PiAncGxhaW4nKTsKK30KKworIyBmb3JtYXQtcGF0Y2gtc3R5bGUgcGF0Y2hlcworc3ViIGdpdF9wYXRjaCB7CisJZ2l0X2NvbW1pdGRpZmYoLWZvcm1hdCA9PiAncGF0Y2gnLCAtc2luZ2xlID0+IDEpOworfQorCitzdWIgZ2l0X3BhdGNoZXMgeworCWdpdF9jb21taXRkaWZmKC1mb3JtYXQgPT4gJ3BhdGNoJyk7Cit9CisKK3N1YiBnaXRfaGlzdG9yeSB7CisJZ2l0X2xvZ19nZW5lcmljKCdoaXN0b3J5JywgXCZnaXRfaGlzdG9yeV9ib2R5LAorCSAgICAgICAgICAgICAgICAkaGFzaF9iYXNlLCAkaGFzaF9wYXJlbnRfYmFzZSwKKwkgICAgICAgICAgICAgICAgJGZpbGVfbmFtZSwgJGhhc2gpOworfQorCitzdWIgZ2l0X3NlYXJjaCB7CisJJHNlYXJjaHR5cGUgfHw9ICdjb21taXQnOworCisJIyBjaGVjayBpZiBhcHByb3ByaWF0ZSBmZWF0dXJlcyBhcmUgZW5hYmxlZAorCWdpdHdlYl9jaGVja19mZWF0dXJlKCdzZWFyY2gnKQorCQlvciBkaWVfZXJyb3IoNDAzLCAiU2VhcmNoIGlzIGRpc2FibGVkIik7CisJaWYgKCRzZWFyY2h0eXBlIGVxICdwaWNrYXhlJykgeworCQkjIHBpY2theGUgbWF5IHRha2UgYWxsIHJlc291cmNlcyBvZiB5b3VyIGJveCBhbmQgcnVuIGZvciBzZXZlcmFsIG1pbnV0ZXMKKwkJIyB3aXRoIGV2ZXJ5IHF1ZXJ5IC0gc28gZGVjaWRlIGJ5IHlvdXJzZWxmIGhvdyBwdWJsaWMgeW91IG1ha2UgdGhpcyBmZWF0dXJlCisJCWdpdHdlYl9jaGVja19mZWF0dXJlKCdwaWNrYXhlJykKKwkJCW9yIGRpZV9lcnJvcig0MDMsICJQaWNrYXhlIHNlYXJjaCBpcyBkaXNhYmxlZCIpOworCX0KKwlpZiAoJHNlYXJjaHR5cGUgZXEgJ2dyZXAnKSB7CisJCSMgZ3JlcCBzZWFyY2ggbWlnaHQgYmUgcG90ZW50aWFsbHkgQ1BVLWludGVuc2l2ZSwgdG9vCisJCWdpdHdlYl9jaGVja19mZWF0dXJlKCdncmVwJykKKwkJCW9yIGRpZV9lcnJvcig0MDMsICJHcmVwIHNlYXJjaCBpcyBkaXNhYmxlZCIpOworCX0KKworCWlmICghZGVmaW5lZCAkc2VhcmNodGV4dCkgeworCQlkaWVfZXJyb3IoNDAwLCAiVGV4dCBmaWVsZCBpcyBlbXB0eSIpOworCX0KKwlpZiAoIWRlZmluZWQgJGhhc2gpIHsKKwkJJGhhc2ggPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJfQorCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaCk7CisJaWYgKCElY28pIHsKKwkJZGllX2Vycm9yKDQwNCwgIlVua25vd24gY29tbWl0IG9iamVjdCIpOworCX0KKwlpZiAoIWRlZmluZWQgJHBhZ2UpIHsKKwkJJHBhZ2UgPSAwOworCX0KKworCWlmICgkc2VhcmNodHlwZSBlcSAnY29tbWl0JyB8fAorCSAgICAkc2VhcmNodHlwZSBlcSAnYXV0aG9yJyB8fAorCSAgICAkc2VhcmNodHlwZSBlcSAnY29tbWl0dGVyJykgeworCQlnaXRfc2VhcmNoX21lc3NhZ2UoJWNvKTsKKwl9IGVsc2lmICgkc2VhcmNodHlwZSBlcSAncGlja2F4ZScpIHsKKwkJZ2l0X3NlYXJjaF9jaGFuZ2VzKCVjbyk7CisJfSBlbHNpZiAoJHNlYXJjaHR5cGUgZXEgJ2dyZXAnKSB7CisJCWdpdF9zZWFyY2hfZmlsZXMoJWNvKTsKKwl9IGVsc2UgeworCQlkaWVfZXJyb3IoNDAwLCAiVW5rbm93biBzZWFyY2ggdHlwZSIpOworCX0KK30KKworc3ViIGdpdF9zZWFyY2hfaGVscCB7CisJZ2l0X2hlYWRlcl9odG1sKCk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGFzaCwkaGFzaCwkaGFzaCk7CisJcHJpbnQgPDxFT1Q7Cis8cD48c3Ryb25nPlBhdHRlcm48L3N0cm9uZz4gaXMgYnkgZGVmYXVsdCBhIG5vcm1hbCBzdHJpbmcgdGhhdCBpcyBtYXRjaGVkIHByZWNpc2VseSAoYnV0IHdpdGhvdXQKK3JlZ2FyZCB0byBjYXNlLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgcGlja2F4ZSkuIEhvd2V2ZXIsIHdoZW4geW91IGNoZWNrIHRoZSA8ZW0+cmU8L2VtPiBjaGVja2JveCwKK3RoZSBwYXR0ZXJuIGVudGVyZWQgaXMgcmVjb2duaXplZCBhcyB0aGUgUE9TSVggZXh0ZW5kZWQKKzxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVndWxhcl9leHByZXNzaW9uIj5yZWd1bGFyIGV4cHJlc3Npb248L2E+IChhbHNvIGNhc2UKK2luc2Vuc2l0aXZlKS48L3A+Cis8ZGw+Cis8ZHQ+PGI+Y29tbWl0PC9iPjwvZHQ+Cis8ZGQ+VGhlIGNvbW1pdCBtZXNzYWdlcyBhbmQgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbiB3aWxsIGJlIHNjYW5uZWQgZm9yIHRoZSBnaXZlbiBwYXR0ZXJuLjwvZGQ+CitFT1QKKwlteSAkaGF2ZV9ncmVwID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2dyZXAnKTsKKwlpZiAoJGhhdmVfZ3JlcCkgeworCQlwcmludCA8PEVPVDsKKzxkdD48Yj5ncmVwPC9iPjwvZHQ+Cis8ZGQ+QWxsIGZpbGVzIGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdHJlZSAoSEVBRCB1bmxlc3MgeW91IGFyZSBleHBsaWNpdGx5IGJyb3dzaW5nCisgICAgYSBkaWZmZXJlbnQgb25lKSBhcmUgc2VhcmNoZWQgZm9yIHRoZSBnaXZlbiBwYXR0ZXJuLiBPbiBsYXJnZSB0cmVlcywgdGhpcyBzZWFyY2ggY2FuIHRha2UKK2Egd2hpbGUgYW5kIHB1dCBzb21lIHN0cmFpbiBvbiB0aGUgc2VydmVyLCBzbyBwbGVhc2UgdXNlIGl0IHdpdGggc29tZSBjb25zaWRlcmF0aW9uLiBOb3RlIHRoYXQKK2R1ZSB0byBnaXQtZ3JlcCBwZWN1bGlhcml0eSwgY3VycmVudGx5IGlmIHJlZ2V4cCBtb2RlIGlzIHR1cm5lZCBvZmYsIHRoZSBtYXRjaGVzIGFyZQorY2FzZS1zZW5zaXRpdmUuPC9kZD4KK0VPVAorCX0KKwlwcmludCA8PEVPVDsKKzxkdD48Yj5hdXRob3I8L2I+PC9kdD4KKzxkZD5OYW1lIGFuZCBlLW1haWwgb2YgdGhlIGNoYW5nZSBhdXRob3IgYW5kIGRhdGUgb2YgYmlydGggb2YgdGhlIHBhdGNoIHdpbGwgYmUgc2Nhbm5lZCBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uPC9kZD4KKzxkdD48Yj5jb21taXR0ZXI8L2I+PC9kdD4KKzxkZD5OYW1lIGFuZCBlLW1haWwgb2YgdGhlIGNvbW1pdHRlciBhbmQgZGF0ZSBvZiBjb21taXQgd2lsbCBiZSBzY2FubmVkIGZvciB0aGUgZ2l2ZW4gcGF0dGVybi48L2RkPgorRU9UCisJbXkgJGhhdmVfcGlja2F4ZSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdwaWNrYXhlJyk7CisJaWYgKCRoYXZlX3BpY2theGUpIHsKKwkJcHJpbnQgPDxFT1Q7Cis8ZHQ+PGI+cGlja2F4ZTwvYj48L2R0PgorPGRkPkFsbCBjb21taXRzIHRoYXQgY2F1c2VkIHRoZSBzdHJpbmcgdG8gYXBwZWFyIG9yIGRpc2FwcGVhciBmcm9tIGFueSBmaWxlIChjaGFuZ2VzIHRoYXQKK2FkZGVkLCByZW1vdmVkIG9yICJtb2RpZmllZCIgdGhlIHN0cmluZykgd2lsbCBiZSBsaXN0ZWQuIFRoaXMgc2VhcmNoIGNhbiB0YWtlIGEgd2hpbGUgYW5kCit0YWtlcyBhIGxvdCBvZiBzdHJhaW4gb24gdGhlIHNlcnZlciwgc28gcGxlYXNlIHVzZSBpdCB3aXNlbHkuIE5vdGUgdGhhdCBzaW5jZSB5b3UgbWF5IGJlCitpbnRlcmVzdGVkIGV2ZW4gaW4gY2hhbmdlcyBqdXN0IGNoYW5naW5nIHRoZSBjYXNlIGFzIHdlbGwsIHRoaXMgc2VhcmNoIGlzIGNhc2Ugc2Vuc2l0aXZlLjwvZGQ+CitFT1QKKwl9CisJcHJpbnQgIjwvZGw+XG4iOworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X3Nob3J0bG9nIHsKKwlnaXRfbG9nX2dlbmVyaWMoJ3Nob3J0bG9nJywgXCZnaXRfc2hvcnRsb2dfYm9keSwKKwkgICAgICAgICAgICAgICAgJGhhc2gsICRoYXNoX3BhcmVudCk7Cit9CisKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIGZlZWRzIChSU1MsIEF0b207IE9QTUwpCisKK3N1YiBnaXRfZmVlZCB7CisJbXkgJGZvcm1hdCA9IHNoaWZ0IHx8ICdhdG9tJzsKKwlteSAkaGF2ZV9ibGFtZSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdibGFtZScpOworCisJIyBBdG9tOiBodHRwOi8vd3d3LmF0b21lbmFibGVkLm9yZy9kZXZlbG9wZXJzL3N5bmRpY2F0aW9uLworCSMgUlNTOiAgaHR0cDovL3d3dy5ub3Rlc3RpcHMuY29tLzgwMjU2QjNBMDA3RjI2OTIvMS9OQU1PNVA5VVBRCisJaWYgKCRmb3JtYXQgbmUgJ3JzcycgJiYgJGZvcm1hdCBuZSAnYXRvbScpIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gd2ViIGZlZWQgZm9ybWF0Iik7CisJfQorCisJIyBsb2cvZmVlZCBvZiBjdXJyZW50IChIRUFEKSBicmFuY2gsIGxvZyBvZiBnaXZlbiBicmFuY2gsIGhpc3Rvcnkgb2YgZmlsZS9kaXJlY3RvcnkKKwlteSAkaGVhZCA9ICRoYXNoIHx8ICdIRUFEJzsKKwlteSBAY29tbWl0bGlzdCA9IHBhcnNlX2NvbW1pdHMoJGhlYWQsIDE1MCwgMCwgJGZpbGVfbmFtZSk7CisKKwlteSAlbGF0ZXN0X2NvbW1pdDsKKwlteSAlbGF0ZXN0X2RhdGU7CisJbXkgJGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi8kZm9ybWF0K3htbCI7CisJaWYgKGRlZmluZWQgJGNnaS0+aHR0cCgnSFRUUF9BQ0NFUFQnKSAmJgorCQkgJGNnaS0+QWNjZXB0KCd0ZXh0L3htbCcpID4gJGNnaS0+QWNjZXB0KCRjb250ZW50X3R5cGUpKSB7CisJCSMgYnJvd3NlciAoZmVlZCByZWFkZXIpIHByZWZlcnMgdGV4dC94bWwKKwkJJGNvbnRlbnRfdHlwZSA9ICd0ZXh0L3htbCc7CisJfQorCWlmIChkZWZpbmVkKCRjb21taXRsaXN0WzBdKSkgeworCQklbGF0ZXN0X2NvbW1pdCA9ICV7JGNvbW1pdGxpc3RbMF19OworCQlteSAkbGF0ZXN0X2Vwb2NoID0gJGxhdGVzdF9jb21taXR7J2NvbW1pdHRlcl9lcG9jaCd9OworCQlleGl0X2lmX3VubW9kaWZpZWRfc2luY2UoJGxhdGVzdF9lcG9jaCk7CisJCSVsYXRlc3RfZGF0ZSA9IHBhcnNlX2RhdGUoJGxhdGVzdF9lcG9jaCwgJGxhdGVzdF9jb21taXR7J2NvbW1pdHRlcl90eid9KTsKKwl9CisJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQktdHlwZSA9PiAkY29udGVudF90eXBlLAorCQktY2hhcnNldCA9PiAndXRmLTgnLAorCQklbGF0ZXN0X2RhdGUgPyAoLWxhc3RfbW9kaWZpZWQgPT4gJGxhdGVzdF9kYXRleydyZmMyODIyJ30pIDogKCksCisJCS1zdGF0dXMgPT4gJzIwMCBPSycpOworCisJIyBPcHRpbWl6YXRpb246IHNraXAgZ2VuZXJhdGluZyB0aGUgYm9keSBpZiBjbGllbnQgYXNrcyBvbmx5CisJIyBmb3IgTGFzdC1Nb2RpZmllZCBkYXRlLgorCXJldHVybiBpZiAoJGNnaS0+cmVxdWVzdF9tZXRob2QoKSBlcSAnSEVBRCcpOworCisJIyBoZWFkZXIgdmFyaWFibGVzCisJbXkgJHRpdGxlID0gIiRzaXRlX25hbWUgLSAkcHJvamVjdC8kYWN0aW9uIjsKKwlteSAkZmVlZF90eXBlID0gJ2xvZyc7CisJaWYgKGRlZmluZWQgJGhhc2gpIHsKKwkJJHRpdGxlIC49ICIgLSAnJGhhc2gnIjsKKwkJJGZlZWRfdHlwZSA9ICdicmFuY2ggbG9nJzsKKwkJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkJJHRpdGxlIC49ICIgOjogJGZpbGVfbmFtZSI7CisJCQkkZmVlZF90eXBlID0gJ2hpc3RvcnknOworCQl9CisJfSBlbHNpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSR0aXRsZSAuPSAiIC0gJGZpbGVfbmFtZSI7CisJCSRmZWVkX3R5cGUgPSAnaGlzdG9yeSc7CisJfQorCSR0aXRsZSAuPSAiICRmZWVkX3R5cGUiOworCW15ICRkZXNjciA9IGdpdF9nZXRfcHJvamVjdF9kZXNjcmlwdGlvbigkcHJvamVjdCk7CisJaWYgKGRlZmluZWQgJGRlc2NyKSB7CisJCSRkZXNjciA9IGVzY19odG1sKCRkZXNjcik7CisJfSBlbHNlIHsKKwkJJGRlc2NyID0gIiRwcm9qZWN0ICIgLgorCQkgICAgICAgICAoJGZvcm1hdCBlcSAncnNzJyA/ICdSU1MnIDogJ0F0b20nKSAuCisJCSAgICAgICAgICIgZmVlZCI7CisJfQorCW15ICRvd25lciA9IGdpdF9nZXRfcHJvamVjdF9vd25lcigkcHJvamVjdCk7CisJJG93bmVyID0gZXNjX2h0bWwoJG93bmVyKTsKKworCSNoZWFkZXIKKwlteSAkYWx0X3VybDsKKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSRhbHRfdXJsID0gaHJlZigtZnVsbD0+MSwgYWN0aW9uPT4iaGlzdG9yeSIsIGhhc2g9PiRoYXNoLCBmaWxlX25hbWU9PiRmaWxlX25hbWUpOworCX0gZWxzaWYgKGRlZmluZWQgJGhhc2gpIHsKKwkJJGFsdF91cmwgPSBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJsb2ciLCBoYXNoPT4kaGFzaCk7CisJfSBlbHNlIHsKKwkJJGFsdF91cmwgPSBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJzdW1tYXJ5Iik7CisJfQorCXByaW50IHFxITw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4hOworCWlmICgkZm9ybWF0IGVxICdyc3MnKSB7CisJCXByaW50IDw8WE1MOworPHJzcyB2ZXJzaW9uPSIyLjAiIHhtbG5zOmNvbnRlbnQ9Imh0dHA6Ly9wdXJsLm9yZy9yc3MvMS4wL21vZHVsZXMvY29udGVudC8iPgorPGNoYW5uZWw+CitYTUwKKwkJcHJpbnQgIjx0aXRsZT4kdGl0bGU8L3RpdGxlPlxuIiAuCisJCSAgICAgICI8bGluaz4kYWx0X3VybDwvbGluaz5cbiIgLgorCQkgICAgICAiPGRlc2NyaXB0aW9uPiRkZXNjcjwvZGVzY3JpcHRpb24+XG4iIC4KKwkJICAgICAgIjxsYW5ndWFnZT5lbjwvbGFuZ3VhZ2U+XG4iIC4KKwkJICAgICAgIyBwcm9qZWN0IG93bmVyIGlzIHJlc3BvbnNpYmxlIGZvciAnZWRpdG9yaWFsJyBjb250ZW50CisJCSAgICAgICI8bWFuYWdpbmdFZGl0b3I+JG93bmVyPC9tYW5hZ2luZ0VkaXRvcj5cbiI7CisJCWlmIChkZWZpbmVkICRsb2dvIHx8IGRlZmluZWQgJGZhdmljb24pIHsKKwkJCSMgcHJlZmVyIHRoZSBsb2dvIHRvIHRoZSBmYXZpY29uLCBzaW5jZSBSU1MKKwkJCSMgZG9lc24ndCBhbGxvdyBib3RoCisJCQlteSAkaW1nID0gZXNjX3VybCgkbG9nbyB8fCAkZmF2aWNvbik7CisJCQlwcmludCAiPGltYWdlPlxuIiAuCisJCQkgICAgICAiPHVybD4kaW1nPC91cmw+XG4iIC4KKwkJCSAgICAgICI8dGl0bGU+JHRpdGxlPC90aXRsZT5cbiIgLgorCQkJICAgICAgIjxsaW5rPiRhbHRfdXJsPC9saW5rPlxuIiAuCisJCQkgICAgICAiPC9pbWFnZT5cbiI7CisJCX0KKwkJaWYgKCVsYXRlc3RfZGF0ZSkgeworCQkJcHJpbnQgIjxwdWJEYXRlPiRsYXRlc3RfZGF0ZXsncmZjMjgyMid9PC9wdWJEYXRlPlxuIjsKKwkJCXByaW50ICI8bGFzdEJ1aWxkRGF0ZT4kbGF0ZXN0X2RhdGV7J3JmYzI4MjInfTwvbGFzdEJ1aWxkRGF0ZT5cbiI7CisJCX0KKwkJcHJpbnQgIjxnZW5lcmF0b3I+Z2l0d2ViIHYuJHZlcnNpb24vJGdpdF92ZXJzaW9uPC9nZW5lcmF0b3I+XG4iOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2F0b20nKSB7CisJCXByaW50IDw8WE1MOworPGZlZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+CitYTUwKKwkJcHJpbnQgIjx0aXRsZT4kdGl0bGU8L3RpdGxlPlxuIiAuCisJCSAgICAgICI8c3VidGl0bGU+JGRlc2NyPC9zdWJ0aXRsZT5cbiIgLgorCQkgICAgICAnPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9InRleHQvaHRtbCIgaHJlZj0iJyAuCisJCSAgICAgICRhbHRfdXJsIC4gJyIgLz4nIC4gIlxuIiAuCisJCSAgICAgICc8bGluayByZWw9InNlbGYiIHR5cGU9IicgLiAkY29udGVudF90eXBlIC4gJyIgaHJlZj0iJyAuCisJCSAgICAgICRjZ2ktPnNlbGZfdXJsKCkgLiAnIiAvPicgLiAiXG4iIC4KKwkJICAgICAgIjxpZD4iIC4gaHJlZigtZnVsbD0+MSkgLiAiPC9pZD5cbiIgLgorCQkgICAgICAjIHVzZSBwcm9qZWN0IG93bmVyIGZvciBmZWVkIGF1dGhvcgorCQkgICAgICAiPGF1dGhvcj48bmFtZT4kb3duZXI8L25hbWU+PC9hdXRob3I+XG4iOworCQlpZiAoZGVmaW5lZCAkZmF2aWNvbikgeworCQkJcHJpbnQgIjxpY29uPiIgLiBlc2NfdXJsKCRmYXZpY29uKSAuICI8L2ljb24+XG4iOworCQl9CisJCWlmIChkZWZpbmVkICRsb2dvKSB7CisJCQkjIG5vdCB0d2ljZSBhcyB3aWRlIGFzIHRhbGw6IDcyIHggMjcgcGl4ZWxzCisJCQlwcmludCAiPGxvZ28+IiAuIGVzY191cmwoJGxvZ28pIC4gIjwvbG9nbz5cbiI7CisJCX0KKwkJaWYgKCEgJWxhdGVzdF9kYXRlKSB7CisJCQkjIGR1bW15IGRhdGUgdG8ga2VlcCB0aGUgZmVlZCB2YWxpZCB1bnRpbCBjb21taXRzIHRyaWNrbGUgaW46CisJCQlwcmludCAiPHVwZGF0ZWQ+MTk3MC0wMS0wMVQwMDowMDowMFo8L3VwZGF0ZWQ+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx1cGRhdGVkPiRsYXRlc3RfZGF0ZXsnaXNvLTg2MDEnfTwvdXBkYXRlZD5cbiI7CisJCX0KKwkJcHJpbnQgIjxnZW5lcmF0b3IgdmVyc2lvbj0nJHZlcnNpb24vJGdpdF92ZXJzaW9uJz5naXR3ZWI8L2dlbmVyYXRvcj5cbiI7CisJfQorCisJIyBjb250ZW50cworCWZvciAobXkgJGkgPSAwOyAkaSA8PSAkI2NvbW1pdGxpc3Q7ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdFskaV19OworCQlteSAkY29tbWl0ID0gJGNveydpZCd9OworCQkjIHdlIHJlYWQgMTUwLCB3ZSBhbHdheXMgc2hvdyAzMCBhbmQgdGhlIG9uZXMgbW9yZSByZWNlbnQgdGhhbiA0OCBob3VycworCQlpZiAoKCRpID49IDIwKSAmJiAoKHRpbWUgLSAkY297J2F1dGhvcl9lcG9jaCd9KSA+IDQ4KjYwKjYwKSkgeworCQkJbGFzdDsKKwkJfQorCQlteSAlY2QgPSBwYXJzZV9kYXRlKCRjb3snYXV0aG9yX2Vwb2NoJ30sICRjb3snYXV0aG9yX3R6J30pOworCisJCSMgZ2V0IGxpc3Qgb2YgY2hhbmdlZCBmaWxlcworCQlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiZGlmZi10cmVlIiwgJy1yJywgQGRpZmZfb3B0cywKKwkJCSRjb3sncGFyZW50J30gfHwgIi0tcm9vdCIsCisJCQkkY297J2lkJ30sICItLSIsIChkZWZpbmVkICRmaWxlX25hbWUgPyAkZmlsZV9uYW1lIDogKCkpCisJCQlvciBuZXh0OworCQlteSBAZGlmZnRyZWUgPSBtYXAgeyBjaG9tcDsgJF8gfSA8JGZkPjsKKwkJY2xvc2UgJGZkCisJCQlvciBuZXh0OworCisJCSMgcHJpbnQgZWxlbWVudCAoZW50cnksIGl0ZW0pCisJCW15ICRjb191cmwgPSBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJjb21taXRkaWZmIiwgaGFzaD0+JGNvbW1pdCk7CisJCWlmICgkZm9ybWF0IGVxICdyc3MnKSB7CisJCQlwcmludCAiPGl0ZW0+XG4iIC4KKwkJCSAgICAgICI8dGl0bGU+IiAuIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAiPC90aXRsZT5cbiIgLgorCQkJICAgICAgIjxhdXRob3I+IiAuIGVzY19odG1sKCRjb3snYXV0aG9yJ30pIC4gIjwvYXV0aG9yPlxuIiAuCisJCQkgICAgICAiPHB1YkRhdGU+JGNkeydyZmMyODIyJ308L3B1YkRhdGU+XG4iIC4KKwkJCSAgICAgICI8Z3VpZCBpc1Blcm1hTGluaz1cInRydWVcIj4kY29fdXJsPC9ndWlkPlxuIiAuCisJCQkgICAgICAiPGxpbms+JGNvX3VybDwvbGluaz5cbiIgLgorCQkJICAgICAgIjxkZXNjcmlwdGlvbj4iIC4gZXNjX2h0bWwoJGNveyd0aXRsZSd9KSAuICI8L2Rlc2NyaXB0aW9uPlxuIiAuCisJCQkgICAgICAiPGNvbnRlbnQ6ZW5jb2RlZD4iIC4KKwkJCSAgICAgICI8IVtDREFUQVtcbiI7CisJCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2F0b20nKSB7CisJCQlwcmludCAiPGVudHJ5PlxuIiAuCisJCQkgICAgICAiPHRpdGxlIHR5cGU9XCJodG1sXCI+IiAuIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAiPC90aXRsZT5cbiIgLgorCQkJICAgICAgIjx1cGRhdGVkPiRjZHsnaXNvLTg2MDEnfTwvdXBkYXRlZD5cbiIgLgorCQkJICAgICAgIjxhdXRob3I+XG4iIC4KKwkJCSAgICAgICIgIDxuYW1lPiIgLiBlc2NfaHRtbCgkY297J2F1dGhvcl9uYW1lJ30pIC4gIjwvbmFtZT5cbiI7CisJCQlpZiAoJGNveydhdXRob3JfZW1haWwnfSkgeworCQkJCXByaW50ICIgIDxlbWFpbD4iIC4gZXNjX2h0bWwoJGNveydhdXRob3JfZW1haWwnfSkgLiAiPC9lbWFpbD5cbiI7CisJCQl9CisJCQlwcmludCAiPC9hdXRob3I+XG4iIC4KKwkJCSAgICAgICMgdXNlIGNvbW1pdHRlciBmb3IgY29udHJpYnV0b3IKKwkJCSAgICAgICI8Y29udHJpYnV0b3I+XG4iIC4KKwkJCSAgICAgICIgIDxuYW1lPiIgLiBlc2NfaHRtbCgkY297J2NvbW1pdHRlcl9uYW1lJ30pIC4gIjwvbmFtZT5cbiI7CisJCQlpZiAoJGNveydjb21taXR0ZXJfZW1haWwnfSkgeworCQkJCXByaW50ICIgIDxlbWFpbD4iIC4gZXNjX2h0bWwoJGNveydjb21taXR0ZXJfZW1haWwnfSkgLiAiPC9lbWFpbD5cbiI7CisJCQl9CisJCQlwcmludCAiPC9jb250cmlidXRvcj5cbiIgLgorCQkJICAgICAgIjxwdWJsaXNoZWQ+JGNkeydpc28tODYwMSd9PC9wdWJsaXNoZWQ+XG4iIC4KKwkJCSAgICAgICI8bGluayByZWw9XCJhbHRlcm5hdGVcIiB0eXBlPVwidGV4dC9odG1sXCIgaHJlZj1cIiRjb191cmxcIiAvPlxuIiAuCisJCQkgICAgICAiPGlkPiRjb191cmw8L2lkPlxuIiAuCisJCQkgICAgICAiPGNvbnRlbnQgdHlwZT1cInhodG1sXCIgeG1sOmJhc2U9XCIiIC4gZXNjX3VybCgkbXlfdXJsKSAuICJcIj5cbiIgLgorCQkJICAgICAgIjxkaXYgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+XG4iOworCQl9CisJCW15ICRjb21tZW50ID0gJGNveydjb21tZW50J307CisJCXByaW50ICI8cHJlPlxuIjsKKwkJZm9yZWFjaCBteSAkbGluZSAoQCRjb21tZW50KSB7CisJCQkkbGluZSA9IGVzY19odG1sKCRsaW5lKTsKKwkJCXByaW50ICIkbGluZVxuIjsKKwkJfQorCQlwcmludCAiPC9wcmU+PHVsPlxuIjsKKwkJZm9yZWFjaCBteSAkZGlmZnRyZWVfbGluZSAoQGRpZmZ0cmVlKSB7CisJCQlteSAlZGlmZnRyZWUgPSBwYXJzZV9kaWZmdHJlZV9yYXdfbGluZSgkZGlmZnRyZWVfbGluZSk7CisJCQluZXh0IGlmICEkZGlmZnRyZWV7J2Zyb21faWQnfTsKKworCQkJbXkgJGZpbGUgPSAkZGlmZnRyZWV7J2ZpbGUnfSB8fCAkZGlmZnRyZWV7J3RvX2ZpbGUnfTsKKworCQkJcHJpbnQgIjxsaT4iIC4KKwkJCSAgICAgICJbIiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJibG9iZGlmZiIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmdHJlZXsndG9faWQnfSwgaGFzaF9wYXJlbnQ9PiRkaWZmdHJlZXsnZnJvbV9pZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRjb3snaWQnfSwgaGFzaF9wYXJlbnRfYmFzZT0+JGNveydwYXJlbnQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZSwgZmlsZV9wYXJlbnQ9PiRkaWZmdHJlZXsnZnJvbV9maWxlJ30pLAorCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gImRpZmYifSwgJ0QnKTsKKwkJCWlmICgkaGF2ZV9ibGFtZSkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLWZ1bGw9PjEsIGFjdGlvbj0+ImJsYW1lIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGUsIGhhc2hfYmFzZT0+JGNvbW1pdCksCisJCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gImJsYW1lIn0sICdCJyk7CisJCQl9CisJCQkjIGlmIHRoaXMgaXMgbm90IGEgZmVlZCBvZiBhIGZpbGUgaGlzdG9yeQorCQkJaWYgKCFkZWZpbmVkICRmaWxlX25hbWUgfHwgJGZpbGVfbmFtZSBuZSAkZmlsZSkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLWZ1bGw9PjEsIGFjdGlvbj0+Imhpc3RvcnkiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZSwgaGFzaD0+JGNvbW1pdCksCisJCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gImhpc3RvcnkifSwgJ0gnKTsKKwkJCX0KKwkJCSRmaWxlID0gZXNjX3BhdGgoJGZpbGUpOworCQkJcHJpbnQgIl0gIi4KKwkJCSAgICAgICIkZmlsZTwvbGk+XG4iOworCQl9CisJCWlmICgkZm9ybWF0IGVxICdyc3MnKSB7CisJCQlwcmludCAiPC91bD5dXT5cbiIgLgorCQkJICAgICAgIjwvY29udGVudDplbmNvZGVkPlxuIiAuCisJCQkgICAgICAiPC9pdGVtPlxuIjsKKwkJfSBlbHNpZiAoJGZvcm1hdCBlcSAnYXRvbScpIHsKKwkJCXByaW50ICI8L3VsPlxuPC9kaXY+XG4iIC4KKwkJCSAgICAgICI8L2NvbnRlbnQ+XG4iIC4KKwkJCSAgICAgICI8L2VudHJ5PlxuIjsKKwkJfQorCX0KKworCSMgZW5kIG9mIGZlZWQKKwlpZiAoJGZvcm1hdCBlcSAncnNzJykgeworCQlwcmludCAiPC9jaGFubmVsPlxuPC9yc3M+XG4iOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2F0b20nKSB7CisJCXByaW50ICI8L2ZlZWQ+XG4iOworCX0KK30KKworc3ViIGdpdF9yc3MgeworCWdpdF9mZWVkKCdyc3MnKTsKK30KKworc3ViIGdpdF9hdG9tIHsKKwlnaXRfZmVlZCgnYXRvbScpOworfQorCitzdWIgZ2l0X29wbWwgeworCW15IEBsaXN0ID0gZ2l0X2dldF9wcm9qZWN0c19saXN0KCRwcm9qZWN0X2ZpbHRlciwgJHN0cmljdF9leHBvcnQpOworCWlmICghQGxpc3QpIHsKKwkJZGllX2Vycm9yKDQwNCwgIk5vIHByb2plY3RzIGZvdW5kIik7CisJfQorCisJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQktdHlwZSA9PiAndGV4dC94bWwnLAorCQktY2hhcnNldCA9PiAndXRmLTgnLAorCQktY29udGVudF9kaXNwb3NpdGlvbiA9PiAnaW5saW5lOyBmaWxlbmFtZT0ib3BtbC54bWwiJyk7CisKKwlteSAkdGl0bGUgPSBlc2NfaHRtbCgkc2l0ZV9uYW1lKTsKKwlteSAkZmlsdGVyID0gIiB3aXRoaW4gc3ViZGlyZWN0b3J5ICI7CisJaWYgKGRlZmluZWQgJHByb2plY3RfZmlsdGVyKSB7CisJCSRmaWx0ZXIgLj0gZXNjX2h0bWwoJHByb2plY3RfZmlsdGVyKTsKKwl9IGVsc2UgeworCQkkZmlsdGVyID0gIiI7CisJfQorCXByaW50IDw8WE1MOworPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxvcG1sIHZlcnNpb249IjEuMCI+Cis8aGVhZD4KKyAgPHRpdGxlPiR0aXRsZSBPUE1MIEV4cG9ydCRmaWx0ZXI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8b3V0bGluZSB0ZXh0PSJnaXQgUlNTIGZlZWRzIj4KK1hNTAorCisJZm9yZWFjaCBteSAkcHIgKEBsaXN0KSB7CisJCW15ICVwcm9qID0gJSRwcjsKKwkJbXkgJGhlYWQgPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvansncGF0aCd9KTsKKwkJaWYgKCFkZWZpbmVkICRoZWFkKSB7CisJCQluZXh0OworCQl9CisJCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcHJvansncGF0aCd9IjsKKwkJbXkgJWNvID0gcGFyc2VfY29tbWl0KCRoZWFkKTsKKwkJaWYgKCElY28pIHsKKwkJCW5leHQ7CisJCX0KKworCQlteSAkcGF0aCA9IGVzY19odG1sKGNob3Bfc3RyKCRwcm9qeydwYXRoJ30sIDI1LCA1KSk7CisJCW15ICRyc3MgID0gaHJlZigncHJvamVjdCcgPT4gJHByb2p7J3BhdGgnfSwgJ2FjdGlvbicgPT4gJ3JzcycsIC1mdWxsID0+IDEpOworCQlteSAkaHRtbCA9IGhyZWYoJ3Byb2plY3QnID0+ICRwcm9qeydwYXRoJ30sICdhY3Rpb24nID0+ICdzdW1tYXJ5JywgLWZ1bGwgPT4gMSk7CisJCXByaW50ICI8b3V0bGluZSB0eXBlPVwicnNzXCIgdGV4dD1cIiRwYXRoXCIgdGl0bGU9XCIkcGF0aFwiIHhtbFVybD1cIiRyc3NcIiBodG1sVXJsPVwiJGh0bWxcIi8+XG4iOworCX0KKwlwcmludCA8PFhNTDsKKzwvb3V0bGluZT4KKzwvYm9keT4KKzwvb3BtbD4KK1hNTAorfQpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9naXQtZmF2aWNvbi5wbmcgYi9naXR3ZWIvc3RhdGljL2dpdC1mYXZpY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWUzNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL3N0YXRpYy9naXQtZmF2aWNvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9naXQtbG9nby5wbmcgYi9naXR3ZWIvc3RhdGljL2dpdC1sb2dvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGVkZTJlCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL3N0YXRpYy9naXQtbG9nby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9naXR3ZWIuY3NzIGIvZ2l0d2ViL3N0YXRpYy9naXR3ZWIuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODZkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2dpdHdlYi5jc3MKQEAgLTAsMCArMSw2ODEgQEAKK2JvZHkgeworCWZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogc21hbGw7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMXB4OworCW1hcmdpbjogMTBweDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOworCWNvbG9yOiAjMDAwMDAwOworfQorCithIHsKKwljb2xvcjogIzAwMDBjYzsKK30KKworYTpob3ZlciwgYTp2aXNpdGVkLCBhOmFjdGl2ZSB7CisJY29sb3I6ICM4ODAwMDA7Cit9CisKK3NwYW4uY250cmwgeworCWJvcmRlcjogZGFzaGVkICNhYWFhYWE7CisJYm9yZGVyLXdpZHRoOiAxcHg7CisJcGFkZGluZzogMHB4IDJweCAwcHggMnB4OworCW1hcmdpbjogIDBweCAycHggMHB4IDJweDsKK30KKworaW1nLmxvZ28geworCWZsb2F0OiByaWdodDsKKwlib3JkZXItd2lkdGg6IDBweDsKK30KKworaW1nLmF2YXRhciB7CisJdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworYS5saXN0IGltZy5hdmF0YXIgeworCWJvcmRlci1zdHlsZTogbm9uZTsKK30KKworZGl2LnBhZ2VfaGVhZGVyIHsKKwloZWlnaHQ6IDI1cHg7CisJcGFkZGluZzogOHB4OworCWZvbnQtc2l6ZTogMTUwJTsKKwlmb250LXdlaWdodDogYm9sZDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZDlkOGQxOworfQorCitkaXYucGFnZV9oZWFkZXIgYTp2aXNpdGVkLCBhLmhlYWRlciB7CisJY29sb3I6ICMwMDAwY2M7Cit9CisKK2Rpdi5wYWdlX2hlYWRlciBhOmhvdmVyIHsKKwljb2xvcjogIzg4MDAwMDsKK30KKworZGl2LnBhZ2VfbmF2IHsKKwlwYWRkaW5nOiA4cHg7Cit9CisKK2Rpdi5wYWdlX25hdiBhOnZpc2l0ZWQgeworCWNvbG9yOiAjMDAwMGNjOworfQorCitkaXYucGFnZV9wYXRoIHsKKwlwYWRkaW5nOiA4cHg7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMHB4IDBweCAxcHg7Cit9CisKK2Rpdi5wYWdlX2Zvb3RlciB7CisJaGVpZ2h0OiAxN3B4OworCXBhZGRpbmc6IDRweCA4cHg7CisJYmFja2dyb3VuZC1jb2xvcjogI2Q5ZDhkMTsKK30KKworZGl2LnBhZ2VfZm9vdGVyX3RleHQgeworCWZsb2F0OiBsZWZ0OworCWNvbG9yOiAjNTU1NTU1OworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworZGl2I2dlbmVyYXRpbmdfaW5mbyB7CisJbWFyZ2luOiA0cHg7CisJZm9udC1zaXplOiBzbWFsbGVyOworCXRleHQtYWxpZ246IGNlbnRlcjsKKwljb2xvcjogIzUwNTA1MDsKK30KKworZGl2LnBhZ2VfYm9keSB7CisJcGFkZGluZzogOHB4OworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK2Rpdi50aXRsZSwgYS50aXRsZSB7CisJZGlzcGxheTogYmxvY2s7CisJcGFkZGluZzogNnB4IDhweDsKKwlmb250LXdlaWdodDogYm9sZDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWRlY2U2OworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwljb2xvcjogIzAwMDAwMDsKK30KKworZGl2LnJlYWRtZSB7CisJcGFkZGluZzogOHB4OworfQorCithLnRpdGxlOmhvdmVyIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZDlkOGQxOworfQorCitkaXYudGl0bGVfdGV4dCB7CisJcGFkZGluZzogNnB4IDBweDsKKwlib3JkZXI6IHNvbGlkICNkOWQ4ZDE7CisJYm9yZGVyLXdpZHRoOiAwcHggMHB4IDFweDsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitkaXYubG9nX2JvZHkgeworCXBhZGRpbmc6IDhweCA4cHggOHB4IDE1MHB4OworfQorCitzcGFuLmFnZSB7CisJcG9zaXRpb246IHJlbGF0aXZlOworCWZsb2F0OiBsZWZ0OworCXdpZHRoOiAxNDJweDsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uc2lnbm9mZiB7CisJY29sb3I6ICM4ODg4ODg7Cit9CisKK2Rpdi5sb2dfbGluayB7CisJcGFkZGluZzogMHB4IDhweDsKKwlmb250LXNpemU6IDcwJTsKKwlmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKwlmb250LXN0eWxlOiBub3JtYWw7CisJcG9zaXRpb246IHJlbGF0aXZlOworCWZsb2F0OiBsZWZ0OworCXdpZHRoOiAxMzZweDsKK30KKworZGl2Lmxpc3RfaGVhZCB7CisJcGFkZGluZzogNnB4IDhweCA0cHg7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMXB4IDBweCAwcHg7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCisuYXV0aG9yX2RhdGUsIC5hdXRob3IgeworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworZGl2LmF1dGhvcl9kYXRlIHsKKwlwYWRkaW5nOiA4cHg7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMHB4IDBweCAxcHggMHB4OworfQorCithLmxpc3QgeworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwljb2xvcjogIzAwMDAwMDsKK30KKworYS5zdWJqZWN0LCBhLm5hbWUgeworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCit0YWJsZS50YWdzIGEuc3ViamVjdCB7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworYS5saXN0OmhvdmVyIHsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKwljb2xvcjogIzg4MDAwMDsKK30KKworYS50ZXh0IHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6ICMwMDAwY2M7Cit9CisKK2EudGV4dDp2aXNpdGVkIHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6ICM4ODAwMDA7Cit9CisKK2EudGV4dDpob3ZlciB7CisJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisJY29sb3I6ICM4ODAwMDA7Cit9CisKK3RhYmxlIHsKKwlwYWRkaW5nOiA4cHggNHB4OworCWJvcmRlci1zcGFjaW5nOiAwOworfQorCit0YWJsZS5kaWZmX3RyZWUgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3RhYmxlLmNvbWJpbmVkLmRpZmZfdHJlZSB0aCB7CisJdGV4dC1hbGlnbjogY2VudGVyOworfQorCit0YWJsZS5jb21iaW5lZC5kaWZmX3RyZWUgdGQgeworCXBhZGRpbmctcmlnaHQ6IDI0cHg7Cit9CisKK3RhYmxlLmNvbWJpbmVkLmRpZmZfdHJlZSB0aC5saW5rLAordGFibGUuY29tYmluZWQuZGlmZl90cmVlIHRkLmxpbmsgeworCXBhZGRpbmc6IDBweCAycHg7Cit9CisKK3RhYmxlLmNvbWJpbmVkLmRpZmZfdHJlZSB0ZC5ub2NoYW5nZSBhIHsKKwljb2xvcjogIzY2NjZmZjsKK30KKwordGFibGUuY29tYmluZWQuZGlmZl90cmVlIHRkLm5vY2hhbmdlIGE6aG92ZXIsCit0YWJsZS5jb21iaW5lZC5kaWZmX3RyZWUgdGQubm9jaGFuZ2UgYTp2aXNpdGVkIHsKKwljb2xvcjogI2QwNjY2NjsKK30KKwordGFibGUuYmxhbWUgeworCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Cit9CisKK3RhYmxlLmJsYW1lIHRkIHsKKwlwYWRkaW5nOiAwcHggNXB4OworCWZvbnQtc2l6ZTogMTAwJTsKKwl2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0aCB7CisJcGFkZGluZzogMnB4IDVweDsKKwlmb250LXNpemU6IDEwMCU7CisJdGV4dC1hbGlnbjogbGVmdDsKK30KKworLyogZG8gbm90IGNoYW5nZSByb3cgc3R5bGUgb24gaG92ZXIgZm9yICdibGFtZScgdmlldyAqLwordHIubGlnaHQsCit0YWJsZS5ibGFtZSAubGlnaHQ6aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cit9CisKK3RyLmRhcmssCit0YWJsZS5ibGFtZSAuZGFyazpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjZmMDsKK30KKworLyogY3VycmVudGx5IGJvdGggdXNlIHRoZSBzYW1lLCBidXQgaXQgY2FuIGNoYW5nZSAqLwordHIubGlnaHQ6aG92ZXIsCit0ci5kYXJrOmhvdmVyIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWRlY2U2OworfQorCisvKiBib3VuZGFyeSBjb21taXRzIGluICdibGFtZScgdmlldyAqLworLyogYW5kIGNvbW1pdHMgd2l0aG91dCAicHJldmlvdXMiICovCit0ci5ib3VuZGFyeSB0ZC5zaGExLAordHIubm8tcHJldmlvdXMgdGQubGluZW5yIHsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworLyogZm9yICdibGFtZV9pbmNyZW1lbnRhbCcsIGR1cmluZyBwcm9jZXNzaW5nICovCit0ci5jb2xvcjEgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmZmY2OyB9Cit0ci5jb2xvcjIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmZmOyB9Cit0ci5jb2xvcjMgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNmY2OyB9CisKK3RkIHsKKwlwYWRkaW5nOiAycHggNXB4OworCWZvbnQtc2l6ZTogMTAwJTsKKwl2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZC5saW5rLCB0ZC5zZWxmbGluayB7CisJcGFkZGluZzogMnB4IDVweDsKKwlmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKwlmb250LXNpemU6IDcwJTsKK30KKwordGQuc2VsZmxpbmsgeworCXBhZGRpbmctcmlnaHQ6IDBweDsKK30KKwordGQuc2hhMSB7CisJZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworLmVycm9yIHsKKwljb2xvcjogcmVkOworCWJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKK30KKwordGQuY3VycmVudF9oZWFkIHsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKwordGQuY2F0ZWdvcnkgeworCWJhY2tncm91bmQtY29sb3I6ICNkOWQ4ZDE7CisJYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDAwMDA7CisJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMDAwMDAwOworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCit0YWJsZS5kaWZmX3RyZWUgc3Bhbi5maWxlX3N0YXR1cy5uZXcgeworCWNvbG9yOiAjMDA4MDAwOworfQorCit0YWJsZS5kaWZmX3RyZWUgc3Bhbi5maWxlX3N0YXR1cy5kZWxldGVkIHsKKwljb2xvcjogI2MwMDAwMDsKK30KKwordGFibGUuZGlmZl90cmVlIHNwYW4uZmlsZV9zdGF0dXMubW92ZWQsCit0YWJsZS5kaWZmX3RyZWUgc3Bhbi5maWxlX3N0YXR1cy5tb2RlX2NobmdlIHsKKwljb2xvcjogIzc3Nzc3NzsKK30KKwordGFibGUuZGlmZl90cmVlIHNwYW4uZmlsZV9zdGF0dXMuY29waWVkIHsKKyAgY29sb3I6ICM3MGEwNzA7Cit9CisKKy8qIG5vYWdlOiAiTm8gY29tbWl0cyIgKi8KK3RhYmxlLnByb2plY3RfbGlzdCB0ZC5ub2FnZSB7CisJY29sb3I6ICM4MDgwODA7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCisvKiBhZ2UyOiA2MCo2MCoyNCoyIDw9IGFnZSAqLwordGFibGUucHJvamVjdF9saXN0IHRkLmFnZTIsIHRhYmxlLmJsYW1lIHRkLmFnZTIgeworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLyogYWdlMTogNjAqNjAqMiA8PSBhZ2UgPCA2MCo2MCoyNCoyICovCit0YWJsZS5wcm9qZWN0X2xpc3QgdGQuYWdlMSB7CisJY29sb3I6ICMwMDk5MDA7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCit0YWJsZS5ibGFtZSB0ZC5hZ2UxIHsKKwljb2xvcjogIzAwOTkwMDsKKwliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworLyogYWdlMDogYWdlIDwgNjAqNjAqMiAqLwordGFibGUucHJvamVjdF9saXN0IHRkLmFnZTAgeworCWNvbG9yOiAjMDA5OTAwOworCWZvbnQtc3R5bGU6IGl0YWxpYzsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKwordGFibGUuYmxhbWUgdGQuYWdlMCB7CisJY29sb3I6ICMwMDk5MDA7CisJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3RkLnByZSwgZGl2LnByZSwgZGl2LmRpZmYgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisJZm9udC1zaXplOiAxMnB4OworCXdoaXRlLXNwYWNlOiBwcmU7Cit9CisKK3RkLm1vZGUgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKKy8qIHByb2dyZXNzIG9mIGJsYW1lX2ludGVyYWN0aXZlICovCitkaXYjcHJvZ3Jlc3NfYmFyIHsKKwloZWlnaHQ6IDJweDsKKwltYXJnaW4tYm90dG9tOiAtMnB4OworCWJhY2tncm91bmQtY29sb3I6ICNkOGQ5ZDA7Cit9CitkaXYjcHJvZ3Jlc3NfaW5mbyB7CisJZmxvYXQ6IHJpZ2h0OworCXRleHQtYWxpZ246IHJpZ2h0OworfQorCisvKiBmb3JtYXQgb2YgKG9wdGlvbmFsKSBvYmplY3RzIHNpemUgaW4gJ3RyZWUnIHZpZXcgKi8KK3RkLnNpemUgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisJdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy8qIHN0eWxpbmcgb2YgZGlmZnMgKHBhdGNoc2V0cyk6IGNvbW1pdGRpZmYgYW5kIGJsb2JkaWZmIHZpZXdzICovCitkaXYuZGlmZi5oZWFkZXIsCitkaXYuZGlmZi5leHRlbmRlZF9oZWFkZXIgeworCXdoaXRlLXNwYWNlOiBub3JtYWw7Cit9CisKK2Rpdi5kaWZmLmhlYWRlciB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWRlY2U2OworCisJbWFyZ2luLXRvcDogNHB4OworCXBhZGRpbmc6IDRweCAwcHggMnB4IDBweDsKKwlib3JkZXI6IHNvbGlkICNkOWQ4ZDE7CisJYm9yZGVyLXdpZHRoOiAxcHggMHB4IDFweCAwcHg7Cit9CisKK2Rpdi5kaWZmLmhlYWRlciBhLnBhdGggeworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCitkaXYuZGlmZi5leHRlbmRlZF9oZWFkZXIsCitkaXYuZGlmZi5leHRlbmRlZF9oZWFkZXIgYS5wYXRoLAorZGl2LmRpZmYuZXh0ZW5kZWRfaGVhZGVyIGEuaGFzaCB7CisJY29sb3I6ICM3Nzc3Nzc7Cit9CisKK2Rpdi5kaWZmLmV4dGVuZGVkX2hlYWRlciAuaW5mbyB7CisJY29sb3I6ICNiMGIwYjA7Cit9CisKK2Rpdi5kaWZmLmV4dGVuZGVkX2hlYWRlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjVlZTsKKwlwYWRkaW5nOiAycHggMHB4IDJweCAwcHg7Cit9CisKK2Rpdi5kaWZmIGEubGlzdCwKK2Rpdi5kaWZmIGEucGF0aCwKK2Rpdi5kaWZmIGEuaGFzaCB7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCitkaXYuZGlmZiBhLmxpc3Q6aG92ZXIsCitkaXYuZGlmZiBhLnBhdGg6aG92ZXIsCitkaXYuZGlmZiBhLmhhc2g6aG92ZXIgeworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCitkaXYuZGlmZi50b19maWxlIGEucGF0aCwKK2Rpdi5kaWZmLnRvX2ZpbGUgeworCWNvbG9yOiAjMDA3MDAwOworfQorCitkaXYuZGlmZi5hZGQgeworCWNvbG9yOiAjMDA4ODAwOworfQorCitkaXYuZGlmZi5hZGQgc3Bhbi5tYXJrZWQgeworCWJhY2tncm91bmQtY29sb3I6ICNhYWZmYWE7Cit9CisKK2Rpdi5kaWZmLmZyb21fZmlsZSBhLnBhdGgsCitkaXYuZGlmZi5mcm9tX2ZpbGUgeworCWNvbG9yOiAjYWEwMDAwOworfQorCitkaXYuZGlmZi5yZW0geworCWNvbG9yOiAjY2MwMDAwOworfQorCitkaXYuZGlmZi5yZW0gc3Bhbi5tYXJrZWQgeworCWJhY2tncm91bmQtY29sb3I6ICNmZmFhYWE7Cit9CisKK2Rpdi5kaWZmLmNodW5rX2hlYWRlciBhLAorZGl2LmRpZmYuY2h1bmtfaGVhZGVyIHsKKwljb2xvcjogIzk5MDA5OTsKK30KKworZGl2LmRpZmYuY2h1bmtfaGVhZGVyIHsKKwlib3JkZXI6IGRvdHRlZCAjZmZlMGZmOworCWJvcmRlci13aWR0aDogMXB4IDBweCAwcHggMHB4OworCW1hcmdpbi10b3A6IDJweDsKK30KKworZGl2LmRpZmYuY2h1bmtfaGVhZGVyIHNwYW4uY2h1bmtfaW5mbyB7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZmZWVmZjsKK30KKworZGl2LmRpZmYuY2h1bmtfaGVhZGVyIHNwYW4uc2VjdGlvbiB7CisJY29sb3I6ICNhYTIyYWE7Cit9CisKK2Rpdi5kaWZmLmluY29tcGxldGUgeworCWNvbG9yOiAjY2NjY2NjOworfQorCitkaXYuZGlmZi5ub2RpZmZlcmVuY2VzIHsKKwlmb250LXdlaWdodDogYm9sZDsKKwljb2xvcjogIzYwMDAwMDsKK30KKworLyogc2lkZS1ieS1zaWRlIGRpZmYgKi8KK2Rpdi5jaHVua19ibG9jayB7CisJb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworZGl2LmNodW5rX2Jsb2NrIGRpdi5vbGQgeworCWZsb2F0OiBsZWZ0OworCXdpZHRoOiA1MCU7CisJb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworZGl2LmNodW5rX2Jsb2NrIGRpdi5uZXcgeworCW1hcmdpbi1sZWZ0OiA1MCU7CisJd2lkdGg6IDUwJTsKK30KKworZGl2LmNodW5rX2Jsb2NrLnJlbSBkaXYub2xkIGRpdi5kaWZmLnJlbSB7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjVmNTsKK30KK2Rpdi5jaHVua19ibG9jay5hZGQgZGl2Lm5ldyBkaXYuZGlmZi5hZGQgeworCWJhY2tncm91bmQtY29sb3I6ICNmOGZmZjg7Cit9CitkaXYuY2h1bmtfYmxvY2suY2hnIGRpdiAgICAgZGl2LmRpZmYgeworCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZjA7Cit9CitkaXYuY2h1bmtfYmxvY2suY3R4IGRpdiAgICAgZGl2LmRpZmYuY3R4IHsKKwljb2xvcjogIzQwNDA0MDsKK30KKworCitkaXYuaW5kZXhfaW5jbHVkZSB7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMHB4IDBweCAxcHg7CisJcGFkZGluZzogMTJweCA4cHg7Cit9CisKK2Rpdi5zZWFyY2ggeworCWZvbnQtc2l6ZTogMTAwJTsKKwlmb250LXdlaWdodDogbm9ybWFsOworCW1hcmdpbjogNHB4IDhweDsKKwlmbG9hdDogcmlnaHQ7CisJdG9wOiA1NnB4OworCXJpZ2h0OiAxMnB4Cit9CisKK2Rpdi5wcm9qc2VhcmNoIHsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJbWFyZ2luOiAyMHB4IDBweDsKK30KKworZGl2LnByb2pzZWFyY2ggZm9ybSB7CisJbWFyZ2luLWJvdHRvbTogMnB4OworfQorCit0ZC5saW5lbnIgeworCXRleHQtYWxpZ246IHJpZ2h0OworfQorCithLmxpbmVuciB7CisJY29sb3I6ICM5OTk5OTk7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lCit9CisKK2EucnNzX2xvZ28geworCWZsb2F0OiByaWdodDsKKwlwYWRkaW5nOiAzcHggMHB4OworCXdpZHRoOiAzNXB4OworCWxpbmUtaGVpZ2h0OiAxMHB4OworCWJvcmRlcjogMXB4IHNvbGlkOworCWJvcmRlci1jb2xvcjogI2ZjYzdhNSAjN2QzMzAyICMzZTFhMDEgI2ZmOTU0ZTsKKwljb2xvcjogI2ZmZmZmZjsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmY2NjAwOworCWZvbnQtd2VpZ2h0OiBib2xkOworCWZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogNzAlOworCXRleHQtYWxpZ246IGNlbnRlcjsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKK2EucnNzX2xvZ286aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNlZTU1MDA7Cit9CisKK2EucnNzX2xvZ28uZ2VuZXJpYyB7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZmODgwMDsKK30KKworYS5yc3NfbG9nby5nZW5lcmljOmhvdmVyIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWU3NzAwOworfQorCitzcGFuLnJlZnMgc3BhbiB7CisJcGFkZGluZzogMHB4IDRweDsKKwlmb250LXNpemU6IDcwJTsKKwlmb250LXdlaWdodDogbm9ybWFsOworCWJvcmRlcjogMXB4IHNvbGlkOworCWJhY2tncm91bmQtY29sb3I6ICNmZmFhZmY7CisJYm9yZGVyLWNvbG9yOiAjZmZjY2ZmICNmZjAwZWUgI2ZmMDBlZSAjZmZjY2ZmOworfQorCitzcGFuLnJlZnMgc3BhbiBhIHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6IGluaGVyaXQ7Cit9CisKK3NwYW4ucmVmcyBzcGFuIGE6aG92ZXIgeworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCitzcGFuLnJlZnMgc3Bhbi5pbmRpcmVjdCB7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLnJlZnMgc3Bhbi5yZWYgeworCWJhY2tncm91bmQtY29sb3I6ICNhYWFhZmY7CisJYm9yZGVyLWNvbG9yOiAjY2NjY2ZmICMwMDMzY2MgIzAwMzNjYyAjY2NjY2ZmOworfQorCitzcGFuLnJlZnMgc3Bhbi50YWcgeworCWJhY2tncm91bmQtY29sb3I6ICNmZmZmYWE7CisJYm9yZGVyLWNvbG9yOiAjZmZmZmNjICNmZmVlMDAgI2ZmZWUwMCAjZmZmZmNjOworfQorCitzcGFuLnJlZnMgc3Bhbi5oZWFkIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjYWFmZmFhOworCWJvcmRlci1jb2xvcjogI2NjZmZjYyAjMDBjYzMzICMwMGNjMzMgI2NjZmZjYzsKK30KKworc3Bhbi5hdG5pZ2h0IHsKKwljb2xvcjogI2NjMDAwMDsKK30KKworc3Bhbi5tYXRjaCB7CisJY29sb3I6ICNlMDAwMDA7Cit9CisKK2Rpdi5iaW5hcnkgeworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworZGl2LnJlbW90ZSB7CisJbWFyZ2luOiAuNWVtOworCWJvcmRlcjogMXB4IHNvbGlkICNkOWQ4ZDE7CisJZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisvKiBKYXZhU2NyaXB0LWJhc2VkIHRpbWV6b25lIG1hbmlwdWxhdGlvbiAqLworCisucG9wdXAgeyAvKiB0aW1lem9uZSBzZWxlY3Rpb24gVUkgKi8KKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJLyogInRvcDogMDsgcmlnaHQ6IDA7IiB3b3VsZCBiZSBiZXR0ZXIsIGlmIG5vdCBmb3IgYnVncyBpbiBicm93c2VycyAqLworCXRvcDogMDsgbGVmdDogMDsKKwlib3JkZXI6IDFweCBzb2xpZDsKKwlwYWRkaW5nOiAycHg7CisJYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDsKKwlmb250LXN0eWxlOiBub3JtYWw7CisJY29sb3I6ICMwMDAwMDA7CisJY3Vyc29yOiBhdXRvOworfQorCisuY2xvc2UtYnV0dG9uIHsgLyogY2xvc2UgdGltZXpvbmUgc2VsZWN0aW9uIFVJIHdpdGhvdXQgc2VsZWN0aW5nICovCisJLyogZmxvYXQgZG9lc24ndCB3b3JrIHdpdGhpbiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgY29udGFpbmVyLAorCSAqIGlmIHdpZHRoIG9mIGNvbnRhaW5lciBpcyBub3Qgc2V0IGV4cGxpY2l0bHkgKi8KKwkvKiBmbG9hdDogcmlnaHQ7ICovCisJcG9zaXRpb246IGFic29sdXRlOworCXRvcDogMHB4OyByaWdodDogMHB4OworCWJvcmRlcjogIDFweCBzb2xpZCBncmVlbjsKKwltYXJnaW46ICAxcHggMXB4IDFweCAxcHg7CisJcGFkZGluZy1ib3R0b206IDJweDsKKwl3aWR0aDogICAgIDEycHg7CisJaGVpZ2h0OiAgICAxMHB4OworCWZvbnQtc2l6ZTogIDlweDsKKwlmb250LXdlaWdodDogYm9sZDsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjBmMDsKKwljdXJzb3I6IHBvaW50ZXI7Cit9CisKKworLyogU3R5bGUgZGVmaW5pdGlvbiBnZW5lcmF0ZWQgYnkgaGlnaGxpZ2h0IDIuNC41LCBodHRwOi8vd3d3LmFuZHJlLXNpbW9uLmRlLyAqLworCisvKiBIaWdobGlnaHRpbmcgdGhlbWUgZGVmaW5pdGlvbjogKi8KKworLm51bSAgICB7IGNvbG9yOiMyOTI4ZmY7IH0KKy5lc2MgICAgeyBjb2xvcjojZmYwMGZmOyB9Cisuc3RyICAgIHsgY29sb3I6I2ZmMDAwMDsgfQorLmRzdHIgICB7IGNvbG9yOiM4MTgxMDA7IH0KKy5zbGMgICAgeyBjb2xvcjojODM4MTgzOyBmb250LXN0eWxlOml0YWxpYzsgfQorLmNvbSAgICB7IGNvbG9yOiM4MzgxODM7IGZvbnQtc3R5bGU6aXRhbGljOyB9CisuZGlyICAgIHsgY29sb3I6IzAwODIwMDsgfQorLnN5bSAgICB7IGNvbG9yOiMwMDAwMDA7IH0KKy5saW5lICAgeyBjb2xvcjojNTU1NTU1OyB9Cisua3dhICAgIHsgY29sb3I6IzAwMDAwMDsgZm9udC13ZWlnaHQ6Ym9sZDsgfQorLmt3YiAgICB7IGNvbG9yOiM4MzAwMDA7IH0KKy5rd2MgICAgeyBjb2xvcjojMDAwMDAwOyBmb250LXdlaWdodDpib2xkOyB9Cisua3dkICAgIHsgY29sb3I6IzAxMDE4MTsgfQpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9qcy9SRUFETUUgYi9naXR3ZWIvc3RhdGljL2pzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQ2MGVkCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL3N0YXRpYy9qcy9SRUFETUUKQEAgLTAsMCArMSwyMCBAQAorR0lUIHdlYiBpbnRlcmZhY2UgKGdpdHdlYikgLSBKYXZhU2NyaXB0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkaXJlY3RvcnkgaG9sZHMgSmF2YVNjcmlwdCBjb2RlIHVzZWQgYnkgZ2l0d2ViIChHSVQgd2ViIGludGVyZmFjZSkuCitTY3JpcHRzIGZyb20gdGhlcmUgd291bGQgYmUgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIGluIHRoZSBvcmRlciBzcGVjaWZpZWQKK2J5IGdpdHdlYi9NYWtlZmlsZSBpbnRvIGdpdHdlYi9zdGF0aWMvZ2l0d2ViLmpzLCBkdXJpbmcgYnVpbGRpbmcgb2YKK2dpdHdlYi9naXR3ZWIuY2dpIChkdXJpbmcgZ2l0d2ViIGJ1aWxkaW5nKS4gIFRoZSByZXN1bHRpbmcgZmlsZSAob3IgaXRzCittaW5pZmljYXRpb24pIHdvdWxkIHRoZW4gYmUgaW5zdGFsbGVkIC8gZGVwbG95ZWQgdG9nZXRoZXIgd2l0aCBnaXR3ZWIuCisKK1NjcmlwdHMgaW4gJ2xpYi8nIHN1YmRpcmVjdG9yeSBjb21wb3NlIGdlbmVyaWMgSmF2YVNjcmlwdCBsaWJyYXJ5LAorcHJvdmlkaW5nIGZlYXR1cmVzIHJlcXVpcmVkIGJ5IGdpdHdlYiBidXQgaW4gbm8gd2F5IGxpbWl0ZWQgdG8gZ2l0d2ViCitvbmx5LiAgSW4gdGhlIGZ1dHVyZSB0aG9zZSBzY3JpcHRzIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IHNvbWUgSmF2YVNjcmlwdAorbGlicmFyeSAvIGZyYW1ld29yaywgbGlrZSBlLmcuIGpRdWVyeSwgWVVJLCBQcm90b3R5cGUsIE1vb1Rvb2xzLCBEb2pvLAorRXh0SlMsIFNjcmlwdC5hY3Vsby51cyBvciBTcHJvdXRDb3JlLgorCitBbGwgc2NyaXB0cyB0aGF0IG1hbmlwdWxhdGUgZ2l0d2ViIG91dHB1dCBzaG91bGQgYmUgcHV0IG91dHNpZGUgJ2xpYi8nLAorZGlyZWN0bHkgaW4gdGhpcyBkaXJlY3RvcnkgKCdnaXR3ZWIvc3RhdGljL2pzLycpLiAgVGhvc2Ugc2NyaXB0cyB3b3VsZAoraGF2ZSB0byBiZSByZXdyaXR0ZW4gaWYgZ2l0d2ViIG1vdmVzIHRvIHVzaW5nIHNvbWUgSmF2YVNjcmlwdCBsaWJyYXJ5LgorCitTZWUgYWxzbyBjb21tZW50cyBpbiBnaXR3ZWIvTWFrZWZpbGUuCmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2pzL2FkanVzdC10aW1lem9uZS5qcyBiL2dpdHdlYi9zdGF0aWMvanMvYWRqdXN0LXRpbWV6b25lLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNjc3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2pzL2FkanVzdC10aW1lem9uZS5qcwpAQCAtMCwwICsxLDMzMCBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDExLCBKb2huICdXYXJ0aG9nOScgSGF3bGV5IDx3YXJ0aG9nOUBlYWdsZXNjcmFnLm5ldD4KKy8vICAgICAgICAgICAgICAgMjAxMSwgSmFrdWIgTmFyZWJza2kgPGpuYXJlYkBnbWFpbC5jb20+CisKKy8qKgorICogQGZpbGVPdmVydmlldyBNYW5pcHVsYXRlIGRhdGVzIGluIGdpdHdlYiBvdXRwdXQsIGFkanVzdGluZyB0aW1lem9uZQorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisvKioKKyAqIEdldCBjb21tb24gdGltZXpvbmUsIGFkZCBVSSBmb3IgY2hhbmdpbmcgdGltZXpvbmVzLCBhbmQgYWRqdXN0CisgKiBkYXRlcyB0byB1c2UgcmVxdWVzdGVkIGNvbW1vbiB0aW1lem9uZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgb25sb2FkIGV2ZW50IChhZGRlZCB0byB3aW5kb3cub25sb2FkKS4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gdHpEZWZhdWx0OiBkZWZhdWx0IHRpbWV6b25lLCBpZiB0aGVyZSBpcyBubyBjb29raWUKKyAqIEBwYXJhbSB7T2JqZWN0fSB0ekNvb2tpZUluZm86IG9iamVjdCBsaXRlcmFsIHdpdGggaW5mbyBhYm91dCBjb29raWUgdG8gc3RvcmUgdGltZXpvbmUKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ekNvb2tpZUluZm8ubmFtZTogbmFtZSBvZiBjb29raWUgdG8gc3RvcmUgdGltZXpvbmUKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ekNsYXNzTmFtZTogZGVub3RlcyBlbGVtZW50cyB3aXRoIGRhdGUgdG8gYmUgYWRqdXN0ZWQKKyAqLworZnVuY3Rpb24gb25sb2FkVFpTZXR1cCh0ekRlZmF1bHQsIHR6Q29va2llSW5mbywgdHpDbGFzc05hbWUpIHsKKwl2YXIgdHpDb29raWVUWiA9IGdldENvb2tpZSh0ekNvb2tpZUluZm8ubmFtZSwgdHpDb29raWVJbmZvKTsKKwl2YXIgdHogPSB0ekRlZmF1bHQ7CisKKwlpZiAodHpDb29raWVUWikgeworCQkvLyBzZXQgdGltZXpvbmUgdG8gdmFsdWUgc2F2ZWQgaW4gYSBjb29raWUKKwkJdHogPSB0ekNvb2tpZVRaOworCQkvLyByZWZyZXNoIGNvb2tpZSwgc28gaXRzIGV4cGlyYXRpb24gY291bnRzIGZyb20gbGFzdCB1c2Ugb2YgZ2l0d2ViCisJCXNldENvb2tpZSh0ekNvb2tpZUluZm8ubmFtZSwgdHpDb29raWVUWiwgdHpDb29raWVJbmZvKTsKKwl9CisKKwkvLyBhZGQgVUkgZm9yIGNoYW5naW5nIHRpbWV6b25lCisJYWRkQ2hhbmdlVFoodHosIHR6Q29va2llSW5mbywgdHpDbGFzc05hbWUpOworCisJLy8gc2VydmVyLXNpZGUgb2YgZ2l0d2ViIHByb2R1Y2VzIGRhdGV0aW1lIGluIFVUQywKKwkvLyBzbyBpZiB0eiBpcyAndXRjJyB0aGVyZSBpcyBubyBuZWVkIGZvciBjaGFuZ2VzCisJdmFyIG5vY2hhbmdlID0gdHogPT09ICd1dGMnOworCisJLy8gYWRqdXN0IGRhdGVzIHRvIHVzZSBzcGVjaWZpZWQgY29tbW9uIHRpbWV6b25lCisJZml4RGF0ZXRpbWVUWih0eiwgdHpDbGFzc05hbWUsIG5vY2hhbmdlKTsKK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBDaGFuZ2luZyBkYXRlcyB0byB1c2UgcmVxdWVzdGVkIHRpbWV6b25lICovCisKKy8qKgorICogUmVwbGFjZSBSRkMtMjgyMiBkYXRlcyBjb250YWluZWQgaW4gU1BBTiBlbGVtZW50cyB3aXRoIHR6Q2xhc3NOYW1lCisgKiBDU1MgY2xhc3Mgd2l0aCBlcXVpdmFsZW50IGRhdGVzIGluIGdpdmVuIHRpbWV6b25lLgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ejogbnVtZXJpYyB0aW1lem9uZSBpbiAnKC18KylISE1NJyBmb3JtYXQsIG9yICd1dGMnLCBvciAnbG9jYWwnCisgKiBAcGFyYW0ge1N0cmluZ30gdHpDbGFzc05hbWU6IHNwZWNpZmllcyBlbGVtZW50cyB0byBiZSBjaGFuZ2VkCisgKiBAcGFyYW0ge0Jvb2xlYW59IG5vY2hhbmdlOiBtYXJrdXAgZm9yIHRpbWV6b25lIGNoYW5nZSwgYnV0IGRvbid0IGNoYW5nZSBpdAorICovCitmdW5jdGlvbiBmaXhEYXRldGltZVRaKHR6LCB0ekNsYXNzTmFtZSwgbm9jaGFuZ2UpIHsKKwkvLyBzYW5pdHkgY2hlY2ssIG1ldGhvZCBzaG91bGQgYmUgZW5zdXJlZCBieSBjb21tb24tbGliLmpzCisJaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSB7CisJCXJldHVybjsKKwl9CisKKwkvLyB0cmFuc2xhdGUgdG8gdGltZXpvbmUgaW4gJygtfCspSEhNTScgZm9ybWF0CisJdHogPSBub3JtYWxpemVUaW1lem9uZUluZm8odHopOworCisJLy8gTk9URTogcmVzdWx0IG9mIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgc2hvdWxkIHByb2JhYmx5IGJlIGNhY2hlZAorCXZhciBjbGFzc2VzRm91bmQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHR6Q2xhc3NOYW1lLCAic3BhbiIpOworCWZvciAodmFyIGkgPSAwLCBsZW4gPSBjbGFzc2VzRm91bmQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKwkJdmFyIGN1ckVsZW1lbnQgPSBjbGFzc2VzRm91bmRbaV07CisKKwkJY3VyRWxlbWVudC50aXRsZSA9ICdDbGljayB0byBjaGFuZ2UgdGltZXpvbmUnOworCQlpZiAoIW5vY2hhbmdlKSB7CisJCQkvLyB3ZSB1c2UgKi5maXJzdENoaWxkLmRhdGEgKFczQyBET00pIGluc3RlYWQgb2YgKi5pbm5lckhUTUwKKwkJCS8vIGFzIHRoZSBsYXR0ZXIgZG9lc24ndCBhbHdheXMgd29yayBldmVyeXdoZXJlIGluIGV2ZXJ5IGJyb3dzZXIKKwkJCXZhciBlcG9jaCA9IHBhcnNlUkZDMjgyMkRhdGUoY3VyRWxlbWVudC5maXJzdENoaWxkLmRhdGEpOworCQkJdmFyIGFkanVzdGVkID0gZm9ybWF0RGF0ZVJGQzI4ODIoZXBvY2gsIHR6KTsKKworCQkJY3VyRWxlbWVudC5maXJzdENoaWxkLmRhdGEgPSBhZGp1c3RlZDsKKwkJfQorCX0KK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBBZGRpbmcgdHJpZ2dlcnMsIGdlbmVyYXRpbmcgdGltZXpvbmUgbWVudSwgZGlzcGxheWluZyBhbmQgaGlkaW5nICovCisKKy8qKgorICogQWRkcyB0cmlnZ2VycyBmb3IgVUkgdG8gY2hhbmdlIGNvbW1vbiB0aW1lem9uZSB1c2VkIGZvciBkYXRlcyBpbgorICogZ2l0d2ViIG91dHB1dDogaXQgbWFya3MgdXAgYW5kL29yIGNyZWF0ZXMgaXRlbSB0byBjbGljayB0byBpbnZva2UKKyAqIHRpbWV6b25lIGNoYW5nZSBVSSwgY3JlYXRlcyB0aW1lem9uZSBVSSBmcmFnbWVudCB0byBiZSBhdHRhY2hlZCwKKyAqIGFuZCBpbnN0YWxscyBhcHByb3ByaWF0ZSBvbmNsaWNrIHRyaWdnZXIgKHZpYSBldmVudCBkZWxlZ2F0aW9uKS4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gdHpTZWxlY3RlZDogcHJlLXNlbGVjdGVkIHRpbWV6b25lLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1dGMnIG9yICdsb2NhbCcgb3IgJygtfCspSEhNTScKKyAqIEBwYXJhbSB7T2JqZWN0fSB0ekNvb2tpZUluZm86IG9iamVjdCBsaXRlcmFsIHdpdGggaW5mbyBhYm91dCBjb29raWUgdG8gc3RvcmUgdGltZXpvbmUKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ekNsYXNzTmFtZTogc3BlY2lmaWVzIGVsZW1lbnRzIHRvIGluc3RhbGwgdHJpZ2dlcgorICovCitmdW5jdGlvbiBhZGRDaGFuZ2VUWih0elNlbGVjdGVkLCB0ekNvb2tpZUluZm8sIHR6Q2xhc3NOYW1lKSB7CisJLy8gbWFrZSBsaW5rIHRvIHRpbWV6b25lIFVJIGRpc2NvdmVyYWJsZQorCWFkZENzc1J1bGUoJy4nK3R6Q2xhc3NOYW1lICsgJzpob3ZlcicsCisJICAgICAgICAgICAndGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGN1cnNvcjogaGVscDsnKTsKKworCS8vIGNyZWF0ZSBmb3JtIGZvciBzZWxlY3RpbmcgdGltZXpvbmUgKHRvIGJlIHNhdmVkIGluIGEgY29va2llKQorCXZhciB0elNlbGVjdEZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCXR6U2VsZWN0RnJhZ21lbnQgPSBjcmVhdGVDaGFuZ2VUWkZvcm0odHpTZWxlY3RGcmFnbWVudCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6U2VsZWN0ZWQsIHR6Q29va2llSW5mbywgdHpDbGFzc05hbWUpOworCisJLy8gZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyIGZvciB0aW1lem9uZSBzZWxlY3Rpb24gVUkgKGNsaWNraW5nIG9uIGVudHJ5KQorCS8vIHNlZSBodHRwOi8vd3d3Lm5jem9ubGluZS5uZXQvYmxvZy8yMDA5LzA2LzMwL2V2ZW50LWRlbGVnYXRpb24taW4tamF2YXNjcmlwdC8KKwkvLyBhc3N1bWVzIHRoYXQgdGhlcmUgaXMgbm8gZXhpc3RpbmcgZG9jdW1lbnQub25jbGljayBoYW5kbGVyCisJZG9jdW1lbnQub25jbGljayA9IGZ1bmN0aW9uIG9uY2xpY2tIYW5kbGVyKGV2ZW50KSB7CisJCS8vSUUgZG9lc24ndCBwYXNzIGluIHRoZSBldmVudCBvYmplY3QKKwkJZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7CisKKwkJLy9JRSB1c2VzIHNyY0VsZW1lbnQgYXMgdGhlIHRhcmdldAorCQl2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7CisKKwkJc3dpdGNoICh0YXJnZXQuY2xhc3NOYW1lKSB7CisJCWNhc2UgdHpDbGFzc05hbWU6CisJCQkvLyBkb24ndCBkaXNwbGF5IHRpbWV6b25lIG1lbnUgaWYgaXQgaXMgYWxyZWFkeSBkaXNwbGF5ZWQKKwkJCWlmICh0elNlbGVjdEZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkgeworCQkJCWRpc3BsYXlDaGFuZ2VUWkZvcm0odGFyZ2V0LCB0elNlbGVjdEZyYWdtZW50KTsKKwkJCX0KKwkJCWJyZWFrOworCQl9IC8vIGVuZCBzd2l0Y2gKKwl9OworfQorCisvKioKKyAqIENyZWF0ZSBEb2N1bWVudEZyYWdtZW50IHdpdGggVUkgZm9yIGNoYW5naW5nIGNvbW1vbiB0aW1lem9uZSBpbgorICogd2hpY2ggZGF0ZXMgYXJlIHNob3duIGluLgorICoKKyAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gZG9jdW1lbnRGcmFnbWVudDogd2hlcmUgYXR0YWNoIFVJCisgKiBAcGFyYW0ge1N0cmluZ30gdHpTZWxlY3RlZDogZGVmYXVsdCAocHJlLXNlbGVjdGVkKSB0aW1lem9uZQorICogQHBhcmFtIHtPYmplY3R9IHR6Q29va2llSW5mbzogb2JqZWN0IGxpdGVyYWwgd2l0aCBpbmZvIGFib3V0IGNvb2tpZSB0byBzdG9yZSB0aW1lem9uZQorICogQHJldHVybnMge0RvY3VtZW50RnJhZ21lbnR9CisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUNoYW5nZVRaRm9ybShkb2N1bWVudEZyYWdtZW50LCB0elNlbGVjdGVkLCB0ekNvb2tpZUluZm8sIHR6Q2xhc3NOYW1lKSB7CisJdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCWRpdi5jbGFzc05hbWUgPSAncG9wdXAnOworCisJLyogJzxkaXYgY2xhc3M9ImNsb3NlLWJ1dHRvbiIgdGl0bGU9IihjbGljayBvbiB0aGlzIGJveCB0byBjbG9zZSkiPlg8L2Rpdj4nICovCisJdmFyIGNsb3NlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisJY2xvc2VCdXR0b24uY2xhc3NOYW1lID0gJ2Nsb3NlLWJ1dHRvbic7CisJY2xvc2VCdXR0b24udGl0bGUgPSAnKGNsaWNrIG9uIHRoaXMgYm94IHRvIGNsb3NlKSc7CisJY2xvc2VCdXR0b24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1gnKSk7CisJY2xvc2VCdXR0b24ub25jbGljayA9IGNsb3NlVFpGb3JtSGFuZGxlcihkb2N1bWVudEZyYWdtZW50LCB0ekNsYXNzTmFtZSk7CisJZGl2LmFwcGVuZENoaWxkKGNsb3NlQnV0dG9uKTsKKworCS8qICdTZWxlY3QgdGltZXpvbmU6IDxiciBjbGVhcj0iYWxsIj4nICovCisJZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdTZWxlY3QgdGltZXpvbmU6ICcpKTsKKwl2YXIgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpOworCWJyLmNsZWFyID0gJ2FsbCc7CisJZGl2LmFwcGVuZENoaWxkKGJyKTsKKworCS8qICc8c2VsZWN0IG5hbWU9InR6b2Zmc2V0Ij4KKwkgKiAgICAuLi4KKwkgKiAgICA8b3B0aW9uIHZhbHVlPSItMDcwMCI+VVRDLTA3OjAwPC9vcHRpb24+CisJICogICAgPG9wdGlvbiB2YWx1ZT0iLTA2MDAiPlVUQy0wNjowMDwvb3B0aW9uPgorCSAqICAgIC4uLgorCSAqICA8L3NlbGVjdD4nICovCisJdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOworCXNlbGVjdC5uYW1lID0gInR6b2Zmc2V0IjsKKwkvL3NlbGVjdC5zdHlsZS5jbGVhciA9ICdhbGwnOworCXNlbGVjdC5hcHBlbmRDaGlsZChnZW5lcmF0ZVRaT3B0aW9ucyh0elNlbGVjdGVkKSk7CisJc2VsZWN0Lm9uY2hhbmdlID0gc2VsZWN0VFpIYW5kbGVyKGRvY3VtZW50RnJhZ21lbnQsIHR6Q29va2llSW5mbywgdHpDbGFzc05hbWUpOworCWRpdi5hcHBlbmRDaGlsZChzZWxlY3QpOworCisJZG9jdW1lbnRGcmFnbWVudC5hcHBlbmRDaGlsZChkaXYpOworCisJcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQ7Cit9CisKKworLyoqCisgKiBIaWRlIChyZW1vdmUgZnJvbSBET00pIHRpbWV6b25lIGNoYW5nZSBVSSwgZW5zdXJpbmcgdGhhdCBpdCBpcyBub3QKKyAqIGdhcmJhZ2UgY29sbGVjdGVkIGFuZCB0aGF0IGl0IGNhbiBiZSByZS1lbmFibGVkIGxhdGVyLgorICoKKyAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gZG9jdW1lbnRGcmFnbWVudDogY29udGFpbnMgZGV0YWNoZWQgVUkKKyAqIEBwYXJhbSB7SFRNTFNlbGVjdEVsZW1lbnR9IHRhcmdldDogc2VsZWN0IGVsZW1lbnQgaW5zaWRlIG9mIFVJCisgKiBAcGFyYW0ge1N0cmluZ30gdHpDbGFzc05hbWU6IHNwZWNpZmllcyBlbGVtZW50IHdoZXJlIFVJIHdhcyBpbnN0YWxsZWQKKyAqIEByZXR1cm5zIHtEb2N1bWVudEZyYWdtZW50fSBkb2N1bWVudEZyYWdtZW50CisgKi8KK2Z1bmN0aW9uIHJlbW92ZUNoYW5nZVRaRm9ybShkb2N1bWVudEZyYWdtZW50LCB0YXJnZXQsIHR6Q2xhc3NOYW1lKSB7CisJLy8gZmluZCBjb250YWluaW5nIGVsZW1lbnQsIHdoZXJlIHdlIGFwcGVuZGVkIHRpbWV6b25lIHNlbGVjdGlvbiBVSQorCS8vIGB0YXJnZXQnIGlzIHNvbWV3aGVyZSBpbnNpZGUgdGltZXpvbmUgbWVudQorCXZhciBjb250YWluZXIgPSB0YXJnZXQucGFyZW50Tm9kZSwgcG9wdXAgPSB0YXJnZXQ7CisJd2hpbGUgKGNvbnRhaW5lciAmJgorCSAgICAgICBjb250YWluZXIuY2xhc3NOYW1lICE9PSB0ekNsYXNzTmFtZSkgeworCQlwb3B1cCA9IGNvbnRhaW5lcjsKKwkJY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7CisJfQorCS8vIHNhZmV0eSBjaGVjayBpZiB3ZSBmb3VuZCBjb3JyZWN0IGNvbnRhaW5lciwKKwkvLyBhbmQgaWYgaXQgaXNuJ3QgZGVsZXRlZCBhbHJlYWR5CisJaWYgKCFjb250YWluZXIgfHwgIXBvcHVwIHx8CisJICAgIGNvbnRhaW5lci5jbGFzc05hbWUgIT09IHR6Q2xhc3NOYW1lIHx8CisJICAgIHBvcHVwLmNsYXNzTmFtZSAgICAgIT09ICdwb3B1cCcpIHsKKwkJcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQ7CisJfQorCisJLy8gdGltZXpvbmUgc2VsZWN0aW9uIFVJIHdhcyBhcHBlbmRlZCBhcyBsYXN0IGNoaWxkCisJLy8gc2VlIGFsc28gZGlzcGxheUNoYW5nZVRaRm9ybSBmdW5jdGlvbgorCXZhciByZW1vdmVkID0gcG9wdXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwb3B1cCk7CisJaWYgKGRvY3VtZW50RnJhZ21lbnQuZmlyc3RDaGlsZCAhPT0gcmVtb3ZlZCkgeyAvLyB0aGUgb25seSBjaGlsZAorCQkvLyByZS1hcHBlbmQgaXQgc28gaXQgd291bGQgYmUgYXZhaWxhYmxlIGZvciBuZXh0IHRpbWUKKwkJZG9jdW1lbnRGcmFnbWVudC5hcHBlbmRDaGlsZChyZW1vdmVkKTsKKwl9CisJLy8gYWxsIG9mIGlubGluZSBzdHlsZSB3YXMgYWRkZWQgYnkgdGhpcyBzY3JpcHQKKwkvLyBpdCBpcyBub3QgcmVhbGx5IG5lZWRlZCB0byByZW1vdmUgaXQsIGJ1dCBpdCBpcyBhIGdvb2QgcHJhY3RpY2UKKwljb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpOworCisJcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQ7Cit9CisKKworLyoqCisgKiBEaXNwbGF5IFVJIGZvciBjaGFuZ2luZyBjb21tb24gdGltZXpvbmUgZm9yIGRhdGVzIGluIGdpdHdlYiBvdXRwdXQuCisgKiBUbyBiZSB1c2VkIGZyb20gJ29uY2xpY2snIGV2ZW50IGhhbmRsZXIuCisgKgorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0OiB3aGVyZSB0byBpbnN0YWxsL2Rpc3BsYXkgVUkKKyAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gdHpTZWxlY3RGcmFnbWVudDogdGltZXpvbmUgc2VsZWN0aW9uIFVJCisgKi8KK2Z1bmN0aW9uIGRpc3BsYXlDaGFuZ2VUWkZvcm0odGFyZ2V0LCB0elNlbGVjdEZyYWdtZW50KSB7CisJLy8gZm9yIGFic29sdXRlIHBvc2l0aW9uaW5nIHRvIGJlIHJlbGF0ZWQgdG8gdGFyZ2V0IGVsZW1lbnQKKwl0YXJnZXQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworCXRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CisKKwkvLyBzaG93L2Rpc3BsYXkgVUkgZm9yIGNoYW5naW5nIHRpbWV6b25lCisJdGFyZ2V0LmFwcGVuZENoaWxkKHR6U2VsZWN0RnJhZ21lbnQpOworfQorCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIExpc3Qgb2YgdGltZXpvbmVzIGZvciB0aW1lem9uZSBzZWxlY3Rpb24gbWVudSAqLworCisvKioKKyAqIEdlbmVyYXRlIGxpc3Qgb2YgdGltZXpvbmVzIGZvciBjcmVhdGluZyB0aW1lem9uZSBzZWxlY3QgVUkKKyAqCisgKiBAcmV0dXJucyB7T2JqZWN0W119IGxpc3Qgb2YgZS5nLiB7IHZhbHVlOiAnKzAxMDAnLCBkZXNjcjogJ0dNVCswMTowMCcgfQorICovCitmdW5jdGlvbiBnZW5lcmF0ZVRaTGlzdCgpIHsKKwl2YXIgdGltZXpvbmVzID0gWworCQl7IHZhbHVlOiAidXRjIiwgICBkZXNjcjogIlVUQy9HTVQifSwKKwkJeyB2YWx1ZTogImxvY2FsIiwgZGVzY3I6ICJMb2NhbCAocGVyIGJyb3dzZXIpIn0KKwldOworCisJLy8gZ2VuZXJhdGUgYWxsIGZ1bGwgaG91ciB0aW1lem9uZXMgKG5vIGZyYWN0aW9uYWwgdGltZXpvbmVzKQorCWZvciAodmFyIHggPSAtMTIsIGlkeCA9IHRpbWV6b25lcy5sZW5ndGg7IHggPD0gKzE0OyB4KyssIGlkeCsrKSB7CisJCXZhciBob3VycyA9ICh4ID49IDAgPyAnKycgOiAnLScpICsgcGFkTGVmdCh4ID49MCA/IHggOiAteCwgMik7CisJCXRpbWV6b25lc1tpZHhdID0geyB2YWx1ZTogaG91cnMgKyAnMDAnLCBkZXNjcjogJ1VUQycgKyBob3VycyArICc6MDAnfTsKKwkJaWYgKHggPT09IDApIHsKKwkJCXRpbWV6b25lc1tpZHhdLmRlc2NyID0gJ1VUQ1x1MDBCMTAwOjAwJzsgLy8gJ1VUQyZwbHVzbW47MDA6MDAnCisJCX0KKwl9CisKKwlyZXR1cm4gdGltZXpvbmVzOworfQorCisvKioKKyAqIEdlbmVyYXRlIDxvcHRpb25zPiBlbGVtZW50cyBmb3IgdGltZXpvbmUgc2VsZWN0IFVJCisgKgorICogQHBhcmFtIHtTdHJpbmd9IHR6U2VsZWN0ZWQ6IGRlZmF1bHQgdGltZXpvbmUKKyAqIEByZXR1cm5zIHtEb2N1bWVudEZyYWdtZW50fSBsaXN0IG9mIG9wdGlvbnMgZWxlbWVudHMgdG8gYXBwZW5kQ2hpbGQKKyAqLworZnVuY3Rpb24gZ2VuZXJhdGVUWk9wdGlvbnModHpTZWxlY3RlZCkgeworCXZhciBlbGVtcyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKwl2YXIgdGltZXpvbmVzID0gZ2VuZXJhdGVUWkxpc3QoKTsKKworCWZvciAodmFyIGkgPSAwLCBsZW4gPSB0aW1lem9uZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKwkJdmFyIHR6b25lID0gdGltZXpvbmVzW2ldOworCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisJCWlmICh0em9uZS52YWx1ZSA9PT0gdHpTZWxlY3RlZCkgeworCQkJb3B0aW9uLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7CisJCX0KKwkJb3B0aW9uLnZhbHVlID0gdHpvbmUudmFsdWU7CisJCW9wdGlvbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0em9uZS5kZXNjcikpOworCisJCWVsZW1zLmFwcGVuZENoaWxkKG9wdGlvbik7CisJfQorCisJcmV0dXJuIGVsZW1zOworfQorCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIEV2ZW50IGhhbmRsZXJzIGFuZC9vciB0aGVpciBnZW5lcmF0b3JzICovCisKKy8qKgorICogQ3JlYXRlIGV2ZW50IGhhbmRsZXIgdGhhdCBzZWxlY3QgdGltZXpvbmUgYW5kIGNsb3NlcyB0aW1lem9uZSBzZWxlY3QgVUkuCisgKiBUbyBiZSB1c2VkIGFzICQoJ3NlbGVjdFtuYW1lPSJ0enNlbGVjdCJdJykub25jaGFuZ2UgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IHR6U2VsZWN0RnJhZ21lbnQ6IHRpbWV6b25lIHNlbGVjdGlvbiBVSQorICogQHBhcmFtIHtPYmplY3R9IHR6Q29va2llSW5mbzogb2JqZWN0IGxpdGVyYWwgd2l0aCBpbmZvIGFib3V0IGNvb2tpZSB0byBzdG9yZSB0aW1lem9uZQorICogQHBhcmFtIHtTdHJpbmd9IHR6Q29va2llSW5mby5uYW1lOiBuYW1lIG9mIGNvb2tpZSB0byBzYXZlIHJlc3VsdCBvZiBzZWxlY3Rpb24KKyAqIEBwYXJhbSB7U3RyaW5nfSB0ekNsYXNzTmFtZTogc3BlY2lmaWVzIGVsZW1lbnQgd2hlcmUgVUkgd2FzIGluc3RhbGxlZAorICogQHJldHVybnMge0Z1bmN0aW9ufSBldmVudCBoYW5kbGVyCisgKi8KK2Z1bmN0aW9uIHNlbGVjdFRaSGFuZGxlcih0elNlbGVjdEZyYWdtZW50LCB0ekNvb2tpZUluZm8sIHR6Q2xhc3NOYW1lKSB7CisJLy9yZXR1cm4gZnVuY3Rpb24gc2VsZWN0VFooZXZlbnQpIHsKKwlyZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7CisJCWV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50OworCQl2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7CisKKwkJdmFyIHNlbGVjdGVkID0gdGFyZ2V0Lm9wdGlvbnMuaXRlbSh0YXJnZXQuc2VsZWN0ZWRJbmRleCk7CisJCXJlbW92ZUNoYW5nZVRaRm9ybSh0elNlbGVjdEZyYWdtZW50LCB0YXJnZXQsIHR6Q2xhc3NOYW1lKTsKKworCQlpZiAoc2VsZWN0ZWQpIHsKKwkJCXNlbGVjdGVkLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7CisJCQlzZXRDb29raWUodHpDb29raWVJbmZvLm5hbWUsIHNlbGVjdGVkLnZhbHVlLCB0ekNvb2tpZUluZm8pOworCQkJZml4RGF0ZXRpbWVUWihzZWxlY3RlZC52YWx1ZSwgdHpDbGFzc05hbWUpOworCQl9CisJfTsKK30KKworLyoqCisgKiBDcmVhdGUgZXZlbnQgaGFuZGxlciB0aGF0IGNsb3NlcyB0aW1lem9uZSBzZWxlY3QgVUkuCisgKiBUbyBiZSB1c2VkIGUuZy4gYXMgJCgnLmNsb3NlYnV0dG9uJykub25jbGljayBoYW5kbGVyLgorICoKKyAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gdHpTZWxlY3RGcmFnbWVudDogdGltZXpvbmUgc2VsZWN0aW9uIFVJCisgKiBAcGFyYW0ge1N0cmluZ30gdHpDbGFzc05hbWU6IHNwZWNpZmllcyBlbGVtZW50IHdoZXJlIFVJIHdhcyBpbnN0YWxsZWQKKyAqIEByZXR1cm5zIHtGdW5jdGlvbn0gZXZlbnQgaGFuZGxlcgorICovCitmdW5jdGlvbiBjbG9zZVRaRm9ybUhhbmRsZXIodHpTZWxlY3RGcmFnbWVudCwgdHpDbGFzc05hbWUpIHsKKwkvL3JldHVybiBmdW5jdGlvbiBjbG9zZVRaRm9ybShldmVudCkgeworCXJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHsKKwkJZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7CisJCXZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDsKKworCQlyZW1vdmVDaGFuZ2VUWkZvcm0odHpTZWxlY3RGcmFnbWVudCwgdGFyZ2V0LCB0ekNsYXNzTmFtZSk7CisJfTsKK30KKworLyogZW5kIG9mIGFkanVzdC10aW1lem9uZS5qcyAqLwpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9qcy9ibGFtZV9pbmNyZW1lbnRhbC5qcyBiL2dpdHdlYi9zdGF0aWMvanMvYmxhbWVfaW5jcmVtZW50YWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2ZWI1MAotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9zdGF0aWMvanMvYmxhbWVfaW5jcmVtZW50YWwuanMKQEAgLTAsMCArMSw2OTIgQEAKKy8vIENvcHlyaWdodCAoQykgMjAwNywgRnJlZHJpayBLdWl2aW5lbiA8ZnJla3VpQGdtYWlsLmNvbT4KKy8vICAgICAgICAgICAgICAgMjAwNywgUGV0ciBCYXVkaXMgPHBhc2t5QHN1c2UuY3o+CisvLyAgICAgICAgICAyMDA4LTIwMTEsIEpha3ViIE5hcmVic2tpIDxqbmFyZWJAZ21haWwuY29tPgorCisvKioKKyAqIEBmaWxlT3ZlcnZpZXcgSmF2YVNjcmlwdCBzaWRlIG9mIEFqYXgteSAnYmxhbWVfaW5jcmVtZW50YWwnIHZpZXcgaW4gZ2l0d2ViCisgKiBAbGljZW5zZSBHUEx2MiBvciBsYXRlcgorICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyoKKyAqIFRoaXMgY29kZSB1c2VzIERPTSBtZXRob2RzIGluc3RlYWQgb2YgKG5vbnN0YW5kYXJkKSBpbm5lckhUTUwKKyAqIHRvIG1vZGlmeSBwYWdlLgorICoKKyAqIGlubmVySFRNTCBpcyBub24tc3RhbmRhcmQgSUUgZXh0ZW5zaW9uLCB0aG91Z2ggc3VwcG9ydGVkIGJ5IG1vc3QKKyAqIGJyb3dzZXJzOyBob3dldmVyIEZpcmVmb3ggdXAgdG8gdmVyc2lvbiAxLjUgZGlkbid0IGltcGxlbWVudCBpdCBpbgorICogYSBzdHJpY3QgbW9kZSAoYXBwbGljYXRpb24veG1sK3hodG1sIG1pbWV0eXBlKS4KKyAqCisgKiBBbHNvIG15IHNpbXBsZSBiZW5jaG1hcmtzIHNob3cgdGhhdCB1c2luZyBlbGVtLmZpcnN0Q2hpbGQuZGF0YSA9CisgKiAnY29udGVudCcgaXMgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gZWxlbS5pbm5lckhUTUwgPSAnY29udGVudCcuICBJdAorICogaXMgaG93ZXZlciBtb3JlIGZyYWdpbGUgKHRleHQgZWxlbWVudCBmcmFnbWVudCBtdXN0IGV4aXN0cyksIGFuZAorICogbGVzcyBmZWF0dXJlLXJpY2ggKHdlIGNhbm5vdCBhZGQgSFRNTCkuCisgKgorICogTm90ZSB0aGF0IERPTSAyIEhUTUwgaXMgcHJlZmVycmVkIG92ZXIgZ2VuZXJpYyBET00gMiBDb3JlOyB0aGUKKyAqIGVxdWl2YWxlbnQgdXNpbmcgRE9NIDIgQ29yZSBpcyB1c3VhbGx5IHNob3duIGluIGNvbW1lbnRzLgorICovCisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiB1dGlsaXR5L2hlbHBlciBmdW5jdGlvbnMgKGFuZCB2YXJpYWJsZXMpICovCisKK3ZhciBwcm9qZWN0VXJsOyAvLyBwYXJ0aWFsIHF1ZXJ5ICsgc2VwYXJhdG9yICgnPycgb3IgJzsnKQorCisvLyAnY29tbWl0cycgaXMgYW4gYXNzb2NpYXRpdmUgbWFwLiBJdCBtYXBzIFNIQTFzIHRvIENvbW1pdCBvYmplY3RzLgordmFyIGNvbW1pdHMgPSB7fTsKKworLyoqCisgKiBjb25zdHJ1Y3RvciBmb3IgQ29tbWl0IG9iamVjdHMsIHVzZWQgaW4gJ2JsYW1lJworICogQGNsYXNzIFJlcHJlc2VudHMgYSBibGFtZWQgY29tbWl0CisgKiBAcGFyYW0ge1N0cmluZ30gc2hhMTogU0hBLTEgaWRlbnRpZmllciBvZiBhIGNvbW1pdAorICovCitmdW5jdGlvbiBDb21taXQoc2hhMSkgeworCWlmICh0aGlzIGluc3RhbmNlb2YgQ29tbWl0KSB7CisJCXRoaXMuc2hhMSA9IHNoYTE7CisJCXRoaXMubnByZXZpb3VzID0gMDsgLyogbnVtYmVyIG9mICdwcmV2aW91cycsIGVmZmVjdGl2ZSBwYXJlbnRzICovCisJfSBlbHNlIHsKKwkJcmV0dXJuIG5ldyBDb21taXQoc2hhMSk7CisJfQorfQorCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIHByb2dyZXNzIGluZm8sIHRpbWluZywgZXJyb3IgcmVwb3J0aW5nICovCisKK3ZhciBibGFtZWRMaW5lcyA9IDA7Cit2YXIgdG90YWxMaW5lcyAgPSAnPz8/JzsKK3ZhciBkaXZfcHJvZ3Jlc3NfYmFyOwordmFyIGRpdl9wcm9ncmVzc19pbmZvOworCisvKioKKyAqIERldGVjdHMgaG93IG1hbnkgbGluZXMgZG9lcyBhIGJsYW1lZCBmaWxlIGhhdmUsCisgKiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgaW4gcHJvZ3Jlc3MgaW5mbworICoKKyAqIEByZXR1cm5zIHtOdW1iZXJ8U3RyaW5nfSBOdW1iZXIgb2YgbGluZXMgaW4gZmlsZSwgb3Igc3RyaW5nICcuLi4nCisgKi8KK2Z1bmN0aW9uIGNvdW50TGluZXMoKSB7CisJdmFyIHRhYmxlID0KKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYW1lX3RhYmxlJykgfHwKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RhYmxlJylbMF07CisKKwlpZiAodGFibGUpIHsKKwkJcmV0dXJuIHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpLmxlbmd0aCAtIDE7IC8vIGZvciBoZWFkZXIKKwl9IGVsc2UgeworCQlyZXR1cm4gJy4uLic7CisJfQorfQorCisvKioKKyAqIHVwZGF0ZSBwcm9ncmVzcyBpbmZvIGFuZCBsZW5ndGggKHdpZHRoKSBvZiBwcm9ncmVzcyBiYXIKKyAqCisgKiBAZ2xvYmFscyBkaXZfcHJvZ3Jlc3NfaW5mbywgZGl2X3Byb2dyZXNzX2JhciwgYmxhbWVkTGluZXMsIHRvdGFsTGluZXMKKyAqLworZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3NJbmZvKCkgeworCWlmICghZGl2X3Byb2dyZXNzX2luZm8pIHsKKwkJZGl2X3Byb2dyZXNzX2luZm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZ3Jlc3NfaW5mbycpOworCX0KKwlpZiAoIWRpdl9wcm9ncmVzc19iYXIpIHsKKwkJZGl2X3Byb2dyZXNzX2JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9ncmVzc19iYXInKTsKKwl9CisJaWYgKCFkaXZfcHJvZ3Jlc3NfaW5mbyAmJiAhZGl2X3Byb2dyZXNzX2JhcikgeworCQlyZXR1cm47CisJfQorCisJdmFyIHBlcmNlbnRhZ2UgPSBNYXRoLmZsb29yKDEwMC4wKmJsYW1lZExpbmVzL3RvdGFsTGluZXMpOworCisJaWYgKGRpdl9wcm9ncmVzc19pbmZvKSB7CisJCWRpdl9wcm9ncmVzc19pbmZvLmZpcnN0Q2hpbGQuZGF0YSAgPSBibGFtZWRMaW5lcyArICcgLyAnICsgdG90YWxMaW5lcyArCisJCQknICgnICsgcGFkTGVmdFN0cihwZXJjZW50YWdlLCAzLCAnXHUwMEEwJykgKyAnJSknOworCX0KKworCWlmIChkaXZfcHJvZ3Jlc3NfYmFyKSB7CisJCS8vZGl2X3Byb2dyZXNzX2Jhci5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3dpZHRoOiAnK3BlcmNlbnRhZ2UrJyU7Jyk7CisJCWRpdl9wcm9ncmVzc19iYXIuc3R5bGUud2lkdGggPSBwZXJjZW50YWdlICsgJyUnOworCX0KK30KKworCit2YXIgdF9pbnRlcnZhbF9zZXJ2ZXIgPSAnJzsKK3ZhciBjbWRzX3NlcnZlciA9ICcnOwordmFyIHQwID0gbmV3IERhdGUoKTsKKworLyoqCisgKiB3cml0ZSBob3cgbXVjaCBpdCB0b29rIHRvIGdlbmVyYXRlIGRhdGEsIGFuZCB0byBydW4gc2NyaXB0CisgKgorICogQGdsb2JhbHMgdDAsIHRfaW50ZXJ2YWxfc2VydmVyLCBjbWRzX3NlcnZlcgorICovCitmdW5jdGlvbiB3cml0ZVRpbWVJbnRlcnZhbCgpIHsKKwl2YXIgaW5mb190aW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlbmVyYXRpbmdfdGltZScpOworCWlmICghaW5mb190aW1lIHx8ICF0X2ludGVydmFsX3NlcnZlcikgeworCQlyZXR1cm47CisJfQorCXZhciB0MSA9IG5ldyBEYXRlKCk7CisJaW5mb190aW1lLmZpcnN0Q2hpbGQuZGF0YSArPSAnICsgKCcgKworCQl0X2ludGVydmFsX3NlcnZlciArICcgc2VjIHNlcnZlciBibGFtZV9kYXRhIC8gJyArCisJCSh0MS5nZXRUaW1lKCkgLSB0MC5nZXRUaW1lKCkpLzEwMDAgKyAnIHNlYyBjbGllbnQgSmF2YVNjcmlwdCknOworCisJdmFyIGluZm9fY21kcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZW5lcmF0aW5nX2NtZCcpOworCWlmICghaW5mb190aW1lIHx8ICFjbWRzX3NlcnZlcikgeworCQlyZXR1cm47CisJfQorCWluZm9fY21kcy5maXJzdENoaWxkLmRhdGEgKz0gJyArICcgKyBjbWRzX3NlcnZlcjsKK30KKworLyoqCisgKiBzaG93IGFuIGVycm9yIG1lc3NhZ2UgYWxlcnQgdG8gdXNlciB3aXRoaW4gcGFnZSAoaW4gcHJvZ3Jlc3MgaW5mbyBhcmVhKQorICogQHBhcmFtIHtTdHJpbmd9IHN0cjogcGxhaW4gdGV4dCBlcnJvciBtZXNzYWdlIChubyBIVE1MKQorICoKKyAqIEBnbG9iYWxzIGRpdl9wcm9ncmVzc19pbmZvCisgKi8KK2Z1bmN0aW9uIGVycm9ySW5mbyhzdHIpIHsKKwlpZiAoIWRpdl9wcm9ncmVzc19pbmZvKSB7CisJCWRpdl9wcm9ncmVzc19pbmZvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzX2luZm8nKTsKKwl9CisJaWYgKGRpdl9wcm9ncmVzc19pbmZvKSB7CisJCWRpdl9wcm9ncmVzc19pbmZvLmNsYXNzTmFtZSA9ICdlcnJvcic7CisJCWRpdl9wcm9ncmVzc19pbmZvLmZpcnN0Q2hpbGQuZGF0YSA9IHN0cjsKKwl9Cit9CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworLyogY29sb3Jpbmcgcm93cyBkdXJpbmcgYmxhbWVfZGF0YSAoZ2l0IGJsYW1lIC0taW5jcmVtZW50YWwpIHJ1biAqLworCisvKioKKyAqIHVzZWQgdG8gZXh0cmFjdCBOIGZyb20gJ2NvbG9yTicsIHdoZXJlIE4gaXMgYSBudW1iZXIsCisgKiBAY29uc3RhbnQKKyAqLwordmFyIGNvbG9yUmUgPSAvXGJjb2xvcihbMC05XSopXGIvOworCisvKioKKyAqIHJldHVybiBOIGlmIDx0ciBjbGFzcz0iY29sb3JOIj4sIG90aGVyd2lzZSByZXR1cm4gbnVsbAorICogKHNvbWUgYnJvd3NlcnMgcmVxdWlyZSBDU1MgY2xhc3MgbmFtZXMgdG8gYmVnaW4gd2l0aCBsZXR0ZXIpCisgKgorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdHI6IHRhYmxlIHJvdyBlbGVtZW50IHRvIGNoZWNrCisgKiBAcGFyYW0ge1N0cmluZ30gdHIuY2xhc3NOYW1lOiAnY2xhc3MnIGF0dHJpYnV0ZSBvZiB0ciBlbGVtZW50CisgKiBAcmV0dXJucyB7TnVtYmVyfG51bGx9IE4gaWYgdHIuY2xhc3NOYW1lID09ICdjb2xvck4nLCBvdGhlcndpc2UgbnVsbAorICoKKyAqIEBnbG9iYWxzIGNvbG9yUmUKKyAqLworZnVuY3Rpb24gZ2V0Q29sb3JObyh0cikgeworCWlmICghdHIpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCXZhciBjbGFzc05hbWUgPSB0ci5jbGFzc05hbWU7CisJaWYgKGNsYXNzTmFtZSkgeworCQl2YXIgbWF0Y2ggPSBjb2xvclJlLmV4ZWMoY2xhc3NOYW1lKTsKKwkJaWYgKG1hdGNoKSB7CisJCQlyZXR1cm4gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsKKwkJfQorCX0KKwlyZXR1cm4gbnVsbDsKK30KKwordmFyIGNvbG9yc0ZyZXEgPSBbMCwgMCwgMF07CisvKioKKyAqIHJldHVybiBvbmUgb2YgZ2l2ZW4gcG9zc2libGUgY29sb3JzIChjdXJyZW50bHkgbGVhc3QgdXNlZCBvbmUpCisgKiBleGFtcGxlOiBjaG9vc2VDb2xvck5vRnJvbSgyLCAzKSByZXR1cm5zIDIgb3IgMworICoKKyAqIEBwYXJhbSB7TnVtYmVyW119IGFyZ3VtZW50czogb25lIG9yIG1vcmUgbnVtYmVycworICogICAgICAgIGFzc3VtZXMgdGhhdCAgMSA8PSBhcmd1bWVudHNbaV0gPD0gY29sb3JzRnJlcS5sZW5ndGgKKyAqIEByZXR1cm5zIHtOdW1iZXJ9IExlYXN0IHVzZWQgY29sb3IgbnVtYmVyIGZyb20gYXJndW1lbnRzCisgKiBAZ2xvYmFscyBjb2xvcnNGcmVxCisgKi8KK2Z1bmN0aW9uIGNob29zZUNvbG9yTm9Gcm9tKCkgeworCS8vIGNob29zZSB0aGUgY29sb3Igd2hpY2ggaXMgbGVhc3QgdXNlZAorCXZhciBjb2xvck5vID0gYXJndW1lbnRzWzBdOworCWZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJCWlmIChjb2xvcnNGcmVxW2FyZ3VtZW50c1tpXS0xXSA8IGNvbG9yc0ZyZXFbY29sb3JOby0xXSkgeworCQkJY29sb3JObyA9IGFyZ3VtZW50c1tpXTsKKwkJfQorCX0KKwljb2xvcnNGcmVxW2NvbG9yTm8tMV0rKzsKKwlyZXR1cm4gY29sb3JObzsKK30KKworLyoqCisgKiBnaXZlbiB0d28gbmVpZ2hib3IgPHRyPiBlbGVtZW50cywgZmluZCBjb2xvciB3aGljaCB3b3VsZCBiZSBkaWZmZXJlbnQKKyAqIGZyb20gY29sb3Igb2YgYm90aCBvZiBuZWlnaGJvcnM7IHVzZWQgdG8gMy1jb2xvciBibGFtZSB0YWJsZQorICoKKyAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRyX3ByZXYKKyAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRyX25leHQKKyAqIEByZXR1cm5zIHtOdW1iZXJ9IGNvbG9yIG51bWJlciBOIHN1Y2ggdGhhdAorICogY29sb3JOICE9IHRyX3ByZXYuY2xhc3NOYW1lICYmIGNvbG9yTiAhPSB0cl9uZXh0LmNsYXNzTmFtZQorICovCitmdW5jdGlvbiBmaW5kQ29sb3JObyh0cl9wcmV2LCB0cl9uZXh0KSB7CisJdmFyIGNvbG9yX3ByZXYgPSBnZXRDb2xvck5vKHRyX3ByZXYpOworCXZhciBjb2xvcl9uZXh0ID0gZ2V0Q29sb3JObyh0cl9uZXh0KTsKKworCisJLy8gbmVpdGhlciBvZiBuZWlnaGJvcnMgaGFzIGNvbG9yIHNldAorCS8vIFRIRU4gd2UgY2FuIHVzZSBhbnkgb2YgMyBwb3NzaWJsZSBjb2xvcnMKKwlpZiAoIWNvbG9yX3ByZXYgJiYgIWNvbG9yX25leHQpIHsKKwkJcmV0dXJuIGNob29zZUNvbG9yTm9Gcm9tKDEsMiwzKTsKKwl9CisKKwkvLyBlaXRoZXIgYm90aCBuZWlnaGJvcnMgaGF2ZSB0aGUgc2FtZSBjb2xvciwKKwkvLyBvciBvbmx5IG9uZSBvZiBuZWlnaGJvcnMgaGF2ZSBjb2xvciBzZXQKKwkvLyBUSEVOIHdlIGNhbiB1c2UgYW55IGNvbG9yIGV4Y2VwdCBnaXZlbgorCXZhciBjb2xvcjsKKwlpZiAoY29sb3JfcHJldiA9PT0gY29sb3JfbmV4dCkgeworCQljb2xvciA9IGNvbG9yX3ByZXY7IC8vID0gY29sb3JfbmV4dDsKKwl9IGVsc2UgaWYgKCFjb2xvcl9wcmV2KSB7CisJCWNvbG9yID0gY29sb3JfbmV4dDsKKwl9IGVsc2UgaWYgKCFjb2xvcl9uZXh0KSB7CisJCWNvbG9yID0gY29sb3JfcHJldjsKKwl9CisJaWYgKGNvbG9yKSB7CisJCXJldHVybiBjaG9vc2VDb2xvck5vRnJvbSgoY29sb3IgJSAzKSArIDEsICgoY29sb3IrMSkgJSAzKSArIDEpOworCX0KKworCS8vIG5laWdoYm9ycyBoYXZlIGRpZmZlcmVudCBjb2xvcnMKKwkvLyBUSEVOIHRoZXJlIGlzIG9ubHkgb25lIGNvbG9yIGxlZnQKKwlyZXR1cm4gKDMgLSAoKGNvbG9yX3ByZXYgKyBjb2xvcl9uZXh0KSAlIDMpKTsKK30KKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBjb2xvcmluZyByb3dzIGxpa2UgJ2JsYW1lJyBhZnRlciAnYmxhbWVfZGF0YScgZmluaXNoZXMgKi8KKworLyoqCisgKiByZXR1cm5zIHRydWUgaWYgZ2l2ZW4gcm93IGVsZW1lbnQgKHRyKSBpcyBmaXJzdCBpbiBjb21taXQgZ3JvdXAKKyAqIHRvIGJlIHVzZWQgb25seSBhZnRlciAnYmxhbWVfZGF0YScgZmluaXNoZXMgKGFmdGVyIHByb2Nlc3NpbmcpCisgKgorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdHI6IHRhYmxlIHJvdworICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgVFIgaXMgZmlyc3QgaW4gY29tbWl0IGdyb3VwCisgKi8KK2Z1bmN0aW9uIGlzU3RhcnRPZkdyb3VwKHRyKSB7CisJcmV0dXJuIHRyLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID09PSAnc2hhMSc7Cit9CisKKy8qKgorICogY2hhbmdlIGNvbG9ycyB0byB1c2UgemVicmEgY29sb3JpbmcgKDIgY29sb3JzKSBpbnN0ZWFkIG9mIDMgY29sb3JzCisgKiBjb25jYXRlbmF0ZSBuZWlnaGJvciBjb21taXQgZ3JvdXBzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBjb21taXQKKyAqCisgKiBAZ2xvYmFscyBjb2xvclJlCisgKi8KK2Z1bmN0aW9uIGZpeENvbG9yc0FuZEdyb3VwcygpIHsKKwl2YXIgY29sb3JDbGFzc2VzID0gWydsaWdodCcsICdkYXJrJ107CisJdmFyIGxpbmVudW0gPSAxOworCXZhciB0ciwgcHJldl9ncm91cDsKKwl2YXIgY29sb3JDbGFzcyA9IDA7CisJdmFyIHRhYmxlID0KKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYW1lX3RhYmxlJykgfHwKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RhYmxlJylbMF07CisKKwl3aGlsZSAoKHRyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2wnK2xpbmVudW0pKSkgeworCS8vIGluZGV4IG9yaWdpbiBpcyAwLCB3aGljaCBpcyB0YWJsZSBoZWFkZXI7IHN0YXJ0IGZyb20gMQorCS8vd2hpbGUgKCh0ciA9IHRhYmxlLnJvd3NbbGluZW51bV0pKSB7IC8vIDwtIGl0IGlzIHNsb3dlcgorCQlpZiAoaXNTdGFydE9mR3JvdXAodHIsIGxpbmVudW0sIGRvY3VtZW50KSkgeworCQkJaWYgKHByZXZfZ3JvdXAgJiYKKwkJCSAgICBwcmV2X2dyb3VwLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ocmVmID09PQorCQkJICAgICAgICAgICAgdHIuZmlyc3RDaGlsZC5maXJzdENoaWxkLmhyZWYpIHsKKwkJCQkvLyB3ZSBoYXZlIHRvIGNvbmNhdGVuYXRlIGdyb3VwcworCQkJCXZhciBwcmV2X3Jvd3MgPSBwcmV2X2dyb3VwLmZpcnN0Q2hpbGQucm93U3BhbiB8fCAxOworCQkJCXZhciBjdXJyX3Jvd3MgPSAgICAgICAgIHRyLmZpcnN0Q2hpbGQucm93U3BhbiB8fCAxOworCQkJCXByZXZfZ3JvdXAuZmlyc3RDaGlsZC5yb3dTcGFuID0gcHJldl9yb3dzICsgY3Vycl9yb3dzOworCQkJCS8vdHIucmVtb3ZlQ2hpbGQodHIuZmlyc3RDaGlsZCk7CisJCQkJdHIuZGVsZXRlQ2VsbCgwKTsgLy8gRE9NMiBIVE1MIHdheQorCQkJfSBlbHNlIHsKKwkJCQljb2xvckNsYXNzID0gKGNvbG9yQ2xhc3MgKyAxKSAlIDI7CisJCQkJcHJldl9ncm91cCA9IHRyOworCQkJfQorCQl9CisJCXZhciB0cl9jbGFzcyA9IHRyLmNsYXNzTmFtZTsKKwkJdHIuY2xhc3NOYW1lID0gdHJfY2xhc3MucmVwbGFjZShjb2xvclJlLCBjb2xvckNsYXNzZXNbY29sb3JDbGFzc10pOworCQlsaW5lbnVtKys7CisJfQorfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogbWFpbiBwYXJ0OiBwYXJzaW5nIHJlc3BvbnNlICovCisKKy8qKgorICogRnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIGJsYW1lIGVudHJ5LCBhcyBzb29uIGFzIGl0IGZpbmlzaGVzLgorICogSXQgdXBkYXRlcyBwYWdlIHZpYSBET00gbWFuaXB1bGF0aW9uLCBhZGRpbmcgc2hhMSBpbmZvLCBldGMuCisgKgorICogQHBhcmFtIHtDb21taXR9IGNvbW1pdDogYmxhbWVkIGNvbW1pdAorICogQHBhcmFtIHtPYmplY3R9IGdyb3VwOiBvYmplY3QgcmVwcmVzZW50aW5nIGdyb3VwIG9mIGxpbmVzLAorICogICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBibGFtZSB0aGUgc2FtZSBjb21taXQgKGJsYW1lIGVudHJ5KQorICoKKyAqIEBnbG9iYWxzIGJsYW1lZExpbmVzCisgKi8KK2Z1bmN0aW9uIGhhbmRsZUxpbmUoY29tbWl0LCBncm91cCkgeworCS8qCisJICAgVGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBIVE1MIGZyYWdtZW50IHdlIGFyZSB3b3JraW5nCisJICAgd2l0aDoKKworCSAgIDx0ciBpZD0ibDEyMyIgY2xhc3M9IiI+CisJICAgICA8dGQgY2xhc3M9InNoYTEiIHRpdGxlPSIiPjxhIGhyZWY9IiI+IDwvYT48L3RkPgorCSAgICAgPHRkIGNsYXNzPSJsaW5lbnIiPjxhIGNsYXNzPSJsaW5lbnIiIGhyZWY9IiI+MTIzPC9hPjwvdGQ+CisJICAgICA8dGQgY2xhc3M9InByZSI+IyB0aW1lcyAobXkgZXh0MyBkb2VzbiYjMzk7dCkuPC90ZD4KKwkgICA8L3RyPgorCSovCisKKwl2YXIgcmVzbGluZSA9IGdyb3VwLnJlc2xpbmU7CisKKwkvLyBmb3JtYXQgZGF0ZSBhbmQgdGltZSBzdHJpbmcgb25seSBvbmNlIHBlciBjb21taXQKKwlpZiAoIWNvbW1pdC5pbmZvKSB7CisJCS8qIGUuZy4gJ0theSBTaWV2ZXJzLCAyMDA1LTA4LTA3IDIxOjQ5OjQ2ICswMjAwJyAqLworCQljb21taXQuaW5mbyA9IGNvbW1pdC5hdXRob3IgKyAnLCAnICsKKwkJCWZvcm1hdERhdGVJU09Mb2NhbChjb21taXQuYXV0aG9yVGltZSwgY29tbWl0LmF1dGhvclRpbWV6b25lKTsKKwl9CisKKwkvLyBjb2xvciBkZXBlbmRzIG9uIGdyb3VwIG9mIGxpbmVzLCBub3Qgb25seSBvbiBibGFtZWQgY29tbWl0CisJdmFyIGNvbG9yTm8gPSBmaW5kQ29sb3JObygKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2wnKyhyZXNsaW5lLTEpKSwKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2wnKyhyZXNsaW5lK2dyb3VwLm51bWxpbmVzKSkKKwkpOworCisJLy8gbG9vcCBvdmVyIGxpbmVzIGluIGNvbW1pdCBncm91cAorCWZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAubnVtbGluZXM7IGkrKywgcmVzbGluZSsrKSB7CisJCXZhciB0ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsJytyZXNsaW5lKTsKKwkJaWYgKCF0cikgeworCQkJYnJlYWs7CisJCX0KKwkJLyoKKwkJCTx0ciBpZD0ibDEyMyIgY2xhc3M9IiI+CisJCQkgIDx0ZCBjbGFzcz0ic2hhMSIgdGl0bGU9IiI+PGEgaHJlZj0iIj4gPC9hPjwvdGQ+CisJCQkgIDx0ZCBjbGFzcz0ibGluZW5yIj48YSBjbGFzcz0ibGluZW5yIiBocmVmPSIiPjEyMzwvYT48L3RkPgorCQkJICA8dGQgY2xhc3M9InByZSI+IyB0aW1lcyAobXkgZXh0MyBkb2VzbiYjMzk7dCkuPC90ZD4KKwkJCTwvdHI+CisJCSovCisJCXZhciB0ZF9zaGExICA9IHRyLmZpcnN0Q2hpbGQ7CisJCXZhciBhX3NoYTEgICA9IHRkX3NoYTEuZmlyc3RDaGlsZDsKKwkJdmFyIGFfbGluZW5yID0gdGRfc2hhMS5uZXh0U2libGluZy5maXJzdENoaWxkOworCisJCS8qIDx0ciBpZD0ibDEyMyIgY2xhc3M9IiI+ICovCisJCXZhciB0cl9jbGFzcyA9ICcnOworCQlpZiAoY29sb3JObyAhPT0gbnVsbCkgeworCQkJdHJfY2xhc3MgPSAnY29sb3InK2NvbG9yTm87CisJCX0KKwkJaWYgKGNvbW1pdC5ib3VuZGFyeSkgeworCQkJdHJfY2xhc3MgKz0gJyBib3VuZGFyeSc7CisJCX0KKwkJaWYgKGNvbW1pdC5ucHJldmlvdXMgPT09IDApIHsKKwkJCXRyX2NsYXNzICs9ICcgbm8tcHJldmlvdXMnOworCQl9IGVsc2UgaWYgKGNvbW1pdC5ucHJldmlvdXMgPiAxKSB7CisJCQl0cl9jbGFzcyArPSAnIG11bHRpcGxlLXByZXZpb3VzJzsKKwkJfQorCQl0ci5jbGFzc05hbWUgPSB0cl9jbGFzczsKKworCQkvKiA8dGQgY2xhc3M9InNoYTEiIHRpdGxlPSI/IiByb3dzcGFuPSI/Ij48YSBocmVmPSI/Ij4/PC9hPjwvdGQ+ICovCisJCWlmIChpID09PSAwKSB7CisJCQl0ZF9zaGExLnRpdGxlID0gY29tbWl0LmluZm87CisJCQl0ZF9zaGExLnJvd1NwYW4gPSBncm91cC5udW1saW5lczsKKworCQkJYV9zaGExLmhyZWYgPSBwcm9qZWN0VXJsICsgJ2E9Y29tbWl0O2g9JyArIGNvbW1pdC5zaGExOworCQkJaWYgKGFfc2hhMS5maXJzdENoaWxkKSB7CisJCQkJYV9zaGExLmZpcnN0Q2hpbGQuZGF0YSA9IGNvbW1pdC5zaGExLnN1YnN0cigwLCA4KTsKKwkJCX0gZWxzZSB7CisJCQkJYV9zaGExLmFwcGVuZENoaWxkKAorCQkJCQlkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb21taXQuc2hhMS5zdWJzdHIoMCwgOCkpKTsKKwkJCX0KKwkJCWlmIChncm91cC5udW1saW5lcyA+PSAyKSB7CisJCQkJdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCQkJCXZhciBiciAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTsKKwkJCQl2YXIgbWF0Y2ggPSBjb21taXQuYXV0aG9yLm1hdGNoKC9cYihbQS1aXSlcQi9nKTsKKwkJCQlpZiAobWF0Y2gpIHsKKwkJCQkJdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgKKwkJCQkJCQltYXRjaC5qb2luKCcnKSk7CisJCQkJfQorCQkJCWlmIChiciAmJiB0ZXh0KSB7CisJCQkJCXZhciBlbGVtID0gZnJhZ21lbnQgfHwgdGRfc2hhMTsKKwkJCQkJZWxlbS5hcHBlbmRDaGlsZChicik7CisJCQkJCWVsZW0uYXBwZW5kQ2hpbGQodGV4dCk7CisJCQkJCWlmIChmcmFnbWVudCkgeworCQkJCQkJdGRfc2hhMS5hcHBlbmRDaGlsZChmcmFnbWVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvL3RyLnJlbW92ZUNoaWxkKHRkX3NoYTEpOyAvLyBET00yIENvcmUgd2F5CisJCQl0ci5kZWxldGVDZWxsKDApOyAvLyBET00yIEhUTUwgd2F5CisJCX0KKworCQkvKiA8dGQgY2xhc3M9ImxpbmVuciI+PGEgY2xhc3M9ImxpbmVuciIgaHJlZj0iPyI+MTIzPC9hPjwvdGQ+ICovCisJCXZhciBsaW5lbnJfY29tbWl0ID0KKwkJCSgncHJldmlvdXMnIGluIGNvbW1pdCA/IGNvbW1pdC5wcmV2aW91cyA6IGNvbW1pdC5zaGExKTsKKwkJdmFyIGxpbmVucl9maWxlbmFtZSA9CisJCQkoJ2ZpbGVfcGFyZW50JyBpbiBjb21taXQgPyBjb21taXQuZmlsZV9wYXJlbnQgOiBjb21taXQuZmlsZW5hbWUpOworCQlhX2xpbmVuci5ocmVmID0gcHJvamVjdFVybCArICdhPWJsYW1lX2luY3JlbWVudGFsJyArCisJCQknO2hiPScgKyBsaW5lbnJfY29tbWl0ICsKKwkJCSc7Zj0nICArIGVuY29kZVVSSUNvbXBvbmVudChsaW5lbnJfZmlsZW5hbWUpICsKKwkJCScjbCcgKyAoZ3JvdXAuc3JjbGluZSArIGkpOworCisJCWJsYW1lZExpbmVzKys7CisKKwkJLy91cGRhdGVQcm9ncmVzc0luZm8oKTsKKwl9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqI0ArCisgKiBAY29uc3RhbnQKKyAqLwordmFyIHNoYTFSZSA9IC9eKFswLTlhLWZdezQwfSkgKFswLTldKykgKFswLTldKykgKFswLTldKykvOwordmFyIGluZm9SZSA9IC9eKFthLXotXSspID8oLiopLzsKK3ZhciBlbmRSZSAgPSAvXkVORCA/KFteIF0qKSA/KC4qKS87CisvKipALSovCisKK3ZhciBjdXJDb21taXQgPSBuZXcgQ29tbWl0KCk7Cit2YXIgY3VyR3JvdXAgID0ge307CisKKy8qKgorICogUGFyc2Ugb3V0cHV0IGZyb20gJ2dpdCBibGFtZSAtLWluY3JlbWVudGFsIFsuLi5dJywgcmVjZWl2ZWQgdmlhCisgKiBYTUxIdHRwUmVxdWVzdCBmcm9tIHNlcnZlciAoYmxhbWVkYXRhVXJsKSwgYW5kIGNhbGwgaGFuZGxlTGluZQorICogKHdoaWNoIHVwZGF0ZXMgcGFnZSkgYXMgc29vbiBhcyBibGFtZSBlbnRyeSBpcyBjb21wbGV0ZWQuCisgKgorICogQHBhcmFtIHtTdHJpbmdbXX0gbGluZXM6IG5ldyBjb21wbGV0ZSBsaW5lcyBmcm9tIGJsYW1lZGF0YSBzZXJ2ZXIKKyAqCisgKiBAZ2xvYmFscyBjb21taXRzLCBjdXJDb21taXQsIGN1ckdyb3VwLCB0X2ludGVydmFsX3NlcnZlciwgY21kc19zZXJ2ZXIKKyAqIEBnbG9iYWxzIHNoYTFSZSwgaW5mb1JlLCBlbmRSZQorICovCitmdW5jdGlvbiBwcm9jZXNzQmxhbWVMaW5lcyhsaW5lcykgeworCXZhciBtYXRjaDsKKworCWZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworCisJCWlmICgobWF0Y2ggPSBzaGExUmUuZXhlYyhsaW5lc1tpXSkpKSB7CisJCQl2YXIgc2hhMSA9IG1hdGNoWzFdOworCQkJdmFyIHNyY2xpbmUgID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTsKKwkJCXZhciByZXNsaW5lICA9IHBhcnNlSW50KG1hdGNoWzNdLCAxMCk7CisJCQl2YXIgbnVtbGluZXMgPSBwYXJzZUludChtYXRjaFs0XSwgMTApOworCisJCQl2YXIgYyA9IGNvbW1pdHNbc2hhMV07CisJCQlpZiAoIWMpIHsKKwkJCQljID0gbmV3IENvbW1pdChzaGExKTsKKwkJCQljb21taXRzW3NoYTFdID0gYzsKKwkJCX0KKwkJCWN1ckNvbW1pdCA9IGM7CisKKwkJCWN1ckdyb3VwLnNyY2xpbmUgPSBzcmNsaW5lOworCQkJY3VyR3JvdXAucmVzbGluZSA9IHJlc2xpbmU7CisJCQljdXJHcm91cC5udW1saW5lcyA9IG51bWxpbmVzOworCisJCX0gZWxzZSBpZiAoKG1hdGNoID0gaW5mb1JlLmV4ZWMobGluZXNbaV0pKSkgeworCQkJdmFyIGluZm8gPSBtYXRjaFsxXTsKKwkJCXZhciBkYXRhID0gbWF0Y2hbMl07CisJCQlzd2l0Y2ggKGluZm8pIHsKKwkJCWNhc2UgJ2ZpbGVuYW1lJzoKKwkJCQljdXJDb21taXQuZmlsZW5hbWUgPSB1bnF1b3RlKGRhdGEpOworCQkJCS8vICdmaWxlbmFtZScgaW5mb3JtYXRpb24gdGVybWluYXRlcyB0aGUgZW50cnkKKwkJCQloYW5kbGVMaW5lKGN1ckNvbW1pdCwgY3VyR3JvdXApOworCQkJCXVwZGF0ZVByb2dyZXNzSW5mbygpOworCQkJCWJyZWFrOworCQkJY2FzZSAnYXV0aG9yJzoKKwkJCQljdXJDb21taXQuYXV0aG9yID0gZGF0YTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2F1dGhvci10aW1lJzoKKwkJCQljdXJDb21taXQuYXV0aG9yVGltZSA9IHBhcnNlSW50KGRhdGEsIDEwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2F1dGhvci10eic6CisJCQkJY3VyQ29tbWl0LmF1dGhvclRpbWV6b25lID0gZGF0YTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3ByZXZpb3VzJzoKKwkJCQljdXJDb21taXQubnByZXZpb3VzKys7CisJCQkJLy8gc3RvcmUgb25seSBmaXJzdCAncHJldmlvdXMnIGhlYWRlcgorCQkJCWlmICghJ3ByZXZpb3VzJyBpbiBjdXJDb21taXQpIHsKKwkJCQkJdmFyIHBhcnRzID0gZGF0YS5zcGxpdCgnICcsIDIpOworCQkJCQljdXJDb21taXQucHJldmlvdXMgICAgPSBwYXJ0c1swXTsKKwkJCQkJY3VyQ29tbWl0LmZpbGVfcGFyZW50ID0gdW5xdW90ZShwYXJ0c1sxXSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnYm91bmRhcnknOgorCQkJCWN1ckNvbW1pdC5ib3VuZGFyeSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9IC8vIGVuZCBzd2l0Y2gKKworCQl9IGVsc2UgaWYgKChtYXRjaCA9IGVuZFJlLmV4ZWMobGluZXNbaV0pKSkgeworCQkJdF9pbnRlcnZhbF9zZXJ2ZXIgPSBtYXRjaFsxXTsKKwkJCWNtZHNfc2VydmVyID0gbWF0Y2hbMl07CisKKwkJfSBlbHNlIGlmIChsaW5lc1tpXSAhPT0gJycpIHsKKwkJCS8vIG1hbGZvcm1lZCBsaW5lCisKKwkJfSAvLyBlbmQgaWYgKG1hdGNoKQorCisJfSAvLyBlbmQgZm9yIChsaW5lcykKK30KKworLyoqCisgKiBQcm9jZXNzIG5ldyBkYXRhIGFuZCByZXR1cm4gcG9pbnRlciB0byBlbmQgb2YgcHJvY2Vzc2VkIHBhcnQKKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gdW5wcm9jZXNzZWQ6IG5ldyBkYXRhIChmcm9tIG5leHRSZWFkUG9zKQorICogQHBhcmFtIHtOdW1iZXJ9IG5leHRSZWFkUG9zOiBlbmQgb2YgbGFzdCBwcm9jZXNzZWQgZGF0YQorICogQHJldHVybiB7TnVtYmVyfSBlbmQgb2YgcHJvY2Vzc2VkIGRhdGEgKG5ldyB2YWx1ZSBmb3IgbmV4dFJlYWRQb3MpCisgKi8KK2Z1bmN0aW9uIHByb2Nlc3NEYXRhKHVucHJvY2Vzc2VkLCBuZXh0UmVhZFBvcykgeworCXZhciBsYXN0TGluZUVuZCA9IHVucHJvY2Vzc2VkLmxhc3RJbmRleE9mKCdcbicpOworCWlmIChsYXN0TGluZUVuZCAhPT0gLTEpIHsKKwkJdmFyIGxpbmVzID0gdW5wcm9jZXNzZWQuc3Vic3RyaW5nKDAsIGxhc3RMaW5lRW5kKS5zcGxpdCgnXG4nKTsKKwkJbmV4dFJlYWRQb3MgKz0gbGFzdExpbmVFbmQgKyAxIC8qIDEgPT0gJ1xuJy5sZW5ndGggKi87CisKKwkJcHJvY2Vzc0JsYW1lTGluZXMobGluZXMpOworCX0gLy8gZW5kIGlmCisKKwlyZXR1cm4gbmV4dFJlYWRQb3M7Cit9CisKKy8qKgorICogSGFuZGxlIFhNTEh0dHBSZXF1ZXN0IGVycm9ycworICoKKyAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhocjogWE1MSHR0cFJlcXVlc3Qgb2JqZWN0CisgKiBAcGFyYW0ge051bWJlcn0gW3hoci5wb2xsVGltZXJdIElEIG9mIHRoZSB0aW1lb3V0IHRvIGNsZWFyCisgKgorICogQGdsb2JhbHMgY29tbWl0cworICovCitmdW5jdGlvbiBoYW5kbGVFcnJvcih4aHIpIHsKKwllcnJvckluZm8oJ1NlcnZlciBlcnJvcjogJyArCisJCXhoci5zdGF0dXMgKyAnIC0gJyArICh4aHIuc3RhdHVzVGV4dCB8fCAnRXJyb3IgY29udGFjdGluZyBzZXJ2ZXInKSk7CisKKwlpZiAodHlwZW9mIHhoci5wb2xsVGltZXIgPT09ICJudW1iZXIiKSB7CisJCWNsZWFyVGltZW91dCh4aHIucG9sbFRpbWVyKTsKKwkJZGVsZXRlIHhoci5wb2xsVGltZXI7CisJfQorCWNvbW1pdHMgPSB7fTsgLy8gZnJlZSBtZW1vcnkKK30KKworLyoqCisgKiBDYWxsZWQgYWZ0ZXIgWE1MSHR0cFJlcXVlc3QgZmluaXNoZXMgKGxvYWRzKQorICoKKyAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhocjogWE1MSHR0cFJlcXVlc3Qgb2JqZWN0CisgKiBAcGFyYW0ge051bWJlcn0gW3hoci5wb2xsVGltZXJdIElEIG9mIHRoZSB0aW1lb3V0IHRvIGNsZWFyCisgKgorICogQGdsb2JhbHMgY29tbWl0cworICovCitmdW5jdGlvbiByZXNwb25zZUxvYWRlZCh4aHIpIHsKKwlpZiAodHlwZW9mIHhoci5wb2xsVGltZXIgPT09ICJudW1iZXIiKSB7CisJCWNsZWFyVGltZW91dCh4aHIucG9sbFRpbWVyKTsKKwkJZGVsZXRlIHhoci5wb2xsVGltZXI7CisJfQorCisJZml4Q29sb3JzQW5kR3JvdXBzKCk7CisJd3JpdGVUaW1lSW50ZXJ2YWwoKTsKKwljb21taXRzID0ge307IC8vIGZyZWUgbWVtb3J5Cit9CisKKy8qKgorICogaGFuZGxlciBmb3IgWE1MSHR0cFJlcXVlc3Qgb25yZWFkeXN0YXRlY2hhbmdlIGV2ZW50CisgKiBAc2VlIHN0YXJ0QmxhbWUKKyAqCisgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHI6IFhNTEh0dHBSZXF1ZXN0IG9iamVjdAorICogQHBhcmFtIHtOdW1iZXJ9IHhoci5wcmV2RGF0YUxlbmd0aDogcHJldmlvdXMgdmFsdWUgb2YgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGgKKyAqIEBwYXJhbSB7TnVtYmVyfSB4aHIubmV4dFJlYWRQb3M6IHN0YXJ0IG9mIHVucmVhZCBwYXJ0IG9mIHhoci5yZXNwb25zZVRleHQKKyAqIEBwYXJhbSB7TnVtYmVyfSBbeGhyLnBvbGxUaW1lcl0gSUQgb2YgdGhlIHRpbWVvdXQgKHRvIHJlc2V0IG9yIGNhbmNlbCkKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gZnJvbVRpbWVyOiBpZiBoYW5kbGVyIHdhcyBjYWxsZWQgZnJvbSB0aW1lcgorICovCitmdW5jdGlvbiBoYW5kbGVSZXNwb25zZSh4aHIsIGZyb21UaW1lcikgeworCisJLyoKKwkgKiB4aHIucmVhZHlTdGF0ZQorCSAqCisJICogIFZhbHVlICBDb25zdGFudCAoVzNDKSAgICBEZXNjcmlwdGlvbgorCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogIDAgICAgICBVTlNFTlQgICAgICAgICAgICBvcGVuKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuCisJICogIDEgICAgICBPUEVORUQgICAgICAgICAgICBzZW5kKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuCisJICogIDIgICAgICBIRUFERVJTX1JFQ0VJVkVEICBzZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgaGVhZGVycworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLgorCSAqICAzICAgICAgTE9BRElORyAgICAgICAgICAgRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuCisJICogIDQgICAgICBET05FICAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLgorCSAqLworCisJaWYgKHhoci5yZWFkeVN0YXRlICE9PSA0ICYmIHhoci5yZWFkeVN0YXRlICE9PSAzKSB7CisJCXJldHVybjsKKwl9CisKKwkvLyB0aGUgc2VydmVyIHJldHVybmVkIGVycm9yCisJLy8gdHJ5IC4uLiBjYXRjaCBibG9jayBpcyB0byB3b3JrIGFyb3VuZCBidWcgaW4gSUU4CisJdHJ5IHsKKwkJaWYgKHhoci5yZWFkeVN0YXRlID09PSAzICYmIHhoci5zdGF0dXMgIT09IDIwMCkgeworCQkJcmV0dXJuOworCQl9CisJfSBjYXRjaCAoZSkgeworCQlyZXR1cm47CisJfQorCWlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHIuc3RhdHVzICE9PSAyMDApIHsKKwkJaGFuZGxlRXJyb3IoeGhyKTsKKwkJcmV0dXJuOworCX0KKworCS8vIEluIGtvbnF1ZXJvciB4aHIucmVzcG9uc2VUZXh0IGlzIHNvbWV0aW1lcyBudWxsIGhlcmUuLi4KKwlpZiAoeGhyLnJlc3BvbnNlVGV4dCA9PT0gbnVsbCkgeworCQlyZXR1cm47CisJfQorCisKKwkvLyBleHRyYWN0IG5ldyB3aG9sZSAoY29tcGxldGUpIGxpbmVzLCBhbmQgcHJvY2VzcyB0aGVtCisJaWYgKHhoci5wcmV2RGF0YUxlbmd0aCAhPT0geGhyLnJlc3BvbnNlVGV4dC5sZW5ndGgpIHsKKwkJeGhyLnByZXZEYXRhTGVuZ3RoID0geGhyLnJlc3BvbnNlVGV4dC5sZW5ndGg7CisJCXZhciB1bnByb2Nlc3NlZCA9IHhoci5yZXNwb25zZVRleHQuc3Vic3RyaW5nKHhoci5uZXh0UmVhZFBvcyk7CisJCXhoci5uZXh0UmVhZFBvcyA9IHByb2Nlc3NEYXRhKHVucHJvY2Vzc2VkLCB4aHIubmV4dFJlYWRQb3MpOworCX0KKworCS8vIGRpZCB3ZSBmaW5pc2ggd29yaz8KKwlpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHsKKwkJcmVzcG9uc2VMb2FkZWQoeGhyKTsKKwkJcmV0dXJuOworCX0KKworCS8vIGlmIHdlIGdldCBmcm9tIHRpbWVyLCB3ZSBoYXZlIHRvIHJlc3RhcnQgaXQKKwkvLyBvdGhlcndpc2Ugb25yZWFkeXN0YXRlY2hhbmdlIGdpdmVzIHVzIHBhcnRpYWwgcmVzcG9uc2UsIHRpbWVyIG5vdCBuZWVkZWQKKwlpZiAoZnJvbVRpbWVyKSB7CisJCXNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworCQkJaGFuZGxlUmVzcG9uc2UoeGhyLCB0cnVlKTsKKwkJfSwgMTAwMCk7CisKKwl9IGVsc2UgaWYgKHR5cGVvZiB4aHIucG9sbFRpbWVyID09PSAibnVtYmVyIikgeworCQljbGVhclRpbWVvdXQoeGhyLnBvbGxUaW1lcik7CisJCWRlbGV0ZSB4aHIucG9sbFRpbWVyOworCX0KK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBJbmNyZW1lbnRhbGx5IHVwZGF0ZSBsaW5lIGRhdGEgaW4gYmxhbWVfaW5jcmVtZW50YWwgdmlldyBpbiBnaXR3ZWIuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGJsYW1lZGF0YVVybDogVVJMIHRvIHNlcnZlciBzY3JpcHQgZ2VuZXJhdGluZyBibGFtZSBkYXRhLgorICogQHBhcmFtIHtTdHJpbmd9IGJVcmw6IHBhcnRpYWwgVVJMIHRvIHByb2plY3QsIHVzZWQgdG8gZ2VuZXJhdGUgbGlua3MuCisgKgorICogQ2FsbGVkIGZyb20gJ2JsYW1lX2luY3JlbWVudGFsJyB2aWV3IGFmdGVyIGxvYWRpbmcgdGFibGUgd2l0aAorICogZmlsZSBjb250ZW50cywgYSBiYXNlIGZvciBibGFtZSB2aWV3LgorICoKKyAqIEBnbG9iYWxzIHQwLCBwcm9qZWN0VXJsLCBkaXZfcHJvZ3Jlc3NfYmFyLCB0b3RhbExpbmVzCisqLworZnVuY3Rpb24gc3RhcnRCbGFtZShibGFtZWRhdGFVcmwsIGJVcmwpIHsKKworCXZhciB4aHIgPSBjcmVhdGVSZXF1ZXN0T2JqZWN0KCk7CisJaWYgKCF4aHIpIHsKKwkJZXJyb3JJbmZvKCdFUlJPUjogWE1MSHR0cFJlcXVlc3Qgbm90IHN1cHBvcnRlZCcpOworCQlyZXR1cm47CisJfQorCisJdDAgPSBuZXcgRGF0ZSgpOworCXByb2plY3RVcmwgPSBiVXJsICsgKGJVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICc7Jyk7CisJaWYgKChkaXZfcHJvZ3Jlc3NfYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzX2JhcicpKSkgeworCQkvL2Rpdl9wcm9ncmVzc19iYXIuc2V0QXR0cmlidXRlKCdzdHlsZScsICd3aWR0aDogMTAwJTsnKTsKKwkJZGl2X3Byb2dyZXNzX2Jhci5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOiAxMDAlOyc7CisJfQorCXRvdGFsTGluZXMgPSBjb3VudExpbmVzKCk7CisJdXBkYXRlUHJvZ3Jlc3NJbmZvKCk7CisKKwkvKiBhZGQgZXh0cmEgcHJvcGVydGllcyB0byB4aHIgb2JqZWN0IHRvIGhlbHAgcHJvY2Vzc2luZyByZXNwb25zZSAqLworCXhoci5wcmV2RGF0YUxlbmd0aCA9IC0xOyAgLy8gdXNlZCB0byBkZXRlY3QgaWYgd2UgaGF2ZSBuZXcgZGF0YQorCXhoci5uZXh0UmVhZFBvcyA9IDA7ICAgICAgLy8gd2hlcmUgdW5yZWFkIHBhcnQgb2YgcmVzcG9uc2Ugc3RhcnRzCisKKwl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgeworCQloYW5kbGVSZXNwb25zZSh4aHIsIGZhbHNlKTsKKwl9OworCisJeGhyLm9wZW4oJ0dFVCcsIGJsYW1lZGF0YVVybCk7CisJeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICd0ZXh0L3BsYWluJyk7CisJeGhyLnNlbmQobnVsbCk7CisKKwkvLyBub3QgYWxsIGJyb3dzZXJzIGNhbGwgb25yZWFkeXN0YXRlY2hhbmdlIGV2ZW50IG9uIGVhY2ggc2VydmVyIGZsdXNoCisJLy8gcG9sbCByZXNwb25zZSB1c2luZyB0aW1lciBldmVyeSBzZWNvbmQgdG8gaGFuZGxlIHRoaXMgaXNzdWUKKwl4aHIucG9sbFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisJCWhhbmRsZVJlc3BvbnNlKHhociwgdHJ1ZSk7CisJfSwgMTAwMCk7Cit9CisKKy8qIGVuZCBvZiBibGFtZV9pbmNyZW1lbnRhbC5qcyAqLwpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9qcy9qYXZhc2NyaXB0LWRldGVjdGlvbi5qcyBiL2dpdHdlYi9zdGF0aWMvanMvamF2YXNjcmlwdC1kZXRlY3Rpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyNTk2ZgotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9zdGF0aWMvanMvamF2YXNjcmlwdC1kZXRlY3Rpb24uanMKQEAgLTAsMCArMSw0MyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDA3LCBGcmVkcmlrIEt1aXZpbmVuIDxmcmVrdWlAZ21haWwuY29tPgorLy8gICAgICAgICAgICAgICAyMDA3LCBQZXRyIEJhdWRpcyA8cGFza3lAc3VzZS5jej4KKy8vICAgICAgICAgIDIwMDgtMjAxMSwgSmFrdWIgTmFyZWJza2kgPGpuYXJlYkBnbWFpbC5jb20+CisKKy8qKgorICogQGZpbGVPdmVydmlldyBEZXRlY3QgaWYgSmF2YVNjcmlwdCBpcyBlbmFibGVkLCBhbmQgcGFzcyBpdCB0byBzZXJ2ZXItc2lkZQorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogTWFuaXB1bGF0aW5nIGxpbmtzICovCisKKy8qKgorICogdXNlZCB0byBjaGVjayBpZiBsaW5rIGhhcyAnanMnIHF1ZXJ5IHBhcmFtZXRlciBhbHJlYWR5IChhdCBlbmQpLAorICogYW5kIG90aGVyIHJlYXNvbnMgdG8gbm90IGFkZCAnanM9MScgcGFyYW0gYXQgdGhlIGVuZCBvZiBsaW5rCisgKiBAY29uc3RhbnQKKyAqLwordmFyIGpzRXhjZXB0aW9uc1JlID0gL1s7P11qcz1bMDFdKCMuKik/JC87CisKKy8qKgorICogQWRkICc/anM9MScgb3IgJztqcz0xJyB0byB0aGUgZW5kIG9mIGV2ZXJ5IGxpbmsgaW4gdGhlIGRvY3VtZW50CisgKiB0aGF0IGRvZXNuJ3QgaGF2ZSAnanMnIHF1ZXJ5IHBhcmFtZXRlciBzZXQgYWxyZWFkeS4KKyAqCisgKiBMaW5rcyB3aXRoICdqcz0xJyBsZWFkIHRvIEphdmFTY3JpcHQgdmVyc2lvbiBvZiBnaXZlbiBhY3Rpb24sIGlmIGl0CisgKiBleGlzdHMgKGN1cnJlbnRseSB0aGVyZSBpcyBvbmx5ICdibGFtZV9pbmNyZW1lbnRhbCcgZm9yICdibGFtZScpCisgKgorICogVG8gYmUgdXNlZCBhcyBgd2luZG93Lm9ubG9hZGAgaGFuZGxlcgorICoKKyAqIEBnbG9iYWxzIGpzRXhjZXB0aW9uc1JlCisgKi8KK2Z1bmN0aW9uIGZpeExpbmtzKCkgeworCXZhciBhbGxMaW5rcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIikgfHwgZG9jdW1lbnQubGlua3M7CisJZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFsbExpbmtzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisJCXZhciBsaW5rID0gYWxsTGlua3NbaV07CisJCWlmICghanNFeGNlcHRpb25zUmUudGVzdChsaW5rKSkgeworCQkJbGluay5ocmVmID0gbGluay5ocmVmLnJlcGxhY2UoLygjfCQpLywKKwkJCQkobGluay5ocmVmLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnOycpICsgJ2pzPTEkMScpOworCQl9CisJfQorfQorCisvKiBlbmQgb2YgamF2YXNjcmlwdC1kZXRlY3Rpb24uanMgKi8KZGlmZiAtLWdpdCBhL2dpdHdlYi9zdGF0aWMvanMvbGliL2NvbW1vbi1saWIuanMgYi9naXR3ZWIvc3RhdGljL2pzL2xpYi9jb21tb24tbGliLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGJiYjcKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2pzL2xpYi9jb21tb24tbGliLmpzCkBAIC0wLDAgKzEsMjI0IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIEZyZWRyaWsgS3VpdmluZW4gPGZyZWt1aUBnbWFpbC5jb20+CisvLyAgICAgICAgICAgICAgIDIwMDcsIFBldHIgQmF1ZGlzIDxwYXNreUBzdXNlLmN6PgorLy8gICAgICAgICAgMjAwOC0yMDExLCBKYWt1YiBOYXJlYnNraSA8am5hcmViQGdtYWlsLmNvbT4KKworLyoqCisgKiBAZmlsZU92ZXJ2aWV3IEdlbmVyaWMgSmF2YVNjcmlwdCBjb2RlIChoZWxwZXIgZnVuY3Rpb25zKQorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBQYWRkaW5nICovCisKKy8qKgorICogcGFkIElOUFVUIG9uIHRoZSBsZWZ0IHdpdGggU1RSIHRoYXQgaXMgYXNzdW1lZCB0byBoYXZlIHZpc2libGUKKyAqIHdpZHRoIG9mIHNpbmdsZSBjaGFyYWN0ZXIgKGZvciBleGFtcGxlIG5vbmJyZWFrYWJsZSBzcGFjZXMpLAorICogdG8gV0lEVEggY2hhcmFjdGVycworICoKKyAqIGV4YW1wbGU6IHBhZExlZnRTdHIoMTIsIDMsICdcdTAwQTAnKSA9PSAnXHUwMEEwMTInCisgKiAgICAgICAgICAoJ1x1MDBBMCcgaXMgbm9uYnJlYWthYmxlIHNwYWNlKQorICoKKyAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gaW5wdXQ6IG51bWJlciB0byBwYWQKKyAqIEBwYXJhbSB7TnVtYmVyfSB3aWR0aDogdmlzaWJsZSB3aWR0aCBvZiBvdXRwdXQKKyAqIEBwYXJhbSB7U3RyaW5nfSBzdHI6IHN0cmluZyB0byBwcmVmaXggdG8gc3RyaW5nLCBkZWZhdWx0cyB0byAnXHUwMEEwJworICogQHJldHVybnMge1N0cmluZ30gSU5QVVQgcHJlZml4ZWQgd2l0aCBTVFIgeCAoV0lEVEggLSBJTlBVVC5sZW5ndGgpCisgKi8KK2Z1bmN0aW9uIHBhZExlZnRTdHIoaW5wdXQsIHdpZHRoLCBzdHIpIHsKKwl2YXIgcHJlZml4ID0gJyc7CisJaWYgKHR5cGVvZiBzdHIgPT09ICd1bmRlZmluZWQnKSB7CisJCWNoID0gJ1x1MDBBMCc7IC8vIHVzaW5nICcmbmJzcDsnIGRvZXNuJ3Qgd29yayBpbiBhbGwgYnJvd3NlcnMKKwl9CisKKwl3aWR0aCAtPSBpbnB1dC50b1N0cmluZygpLmxlbmd0aDsKKwl3aGlsZSAod2lkdGggPiAwKSB7CisJCXByZWZpeCArPSBzdHI7CisJCXdpZHRoLS07CisJfQorCXJldHVybiBwcmVmaXggKyBpbnB1dDsKK30KKworLyoqCisgKiBQYWQgSU5QVVQgb24gdGhlIGxlZnQgdG8gV0lEVEgsIHVzaW5nIGdpdmVuIHBhZGRpbmcgY2hhcmFjdGVyIENILAorICogZm9yIGV4YW1wbGUgcGFkTGVmdCgnYScsIDMsICdfJykgaXMgJ19fYScKKyAqICAgICAgICAgICAgIHBhZExlZnQoNCwgMikgaXMgJzA0JyAoc2FtZSBhcyBwYWRMZWZ0KDQsIDIsICcwJykpCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGlucHV0OiBpbnB1dCB2YWx1ZSBjb252ZXJ0ZWQgdG8gc3RyaW5nLgorICogQHBhcmFtIHtOdW1iZXJ9IHdpZHRoOiBkZXNpcmVkIGxlbmd0aCBvZiBvdXRwdXQuCisgKiBAcGFyYW0ge1N0cmluZ30gY2g6IHNpbmdsZSBjaGFyYWN0ZXIgdG8gcHJlZml4IHRvIHN0cmluZywgZGVmYXVsdHMgdG8gJzAnLgorICoKKyAqIEByZXR1cm5zIHtTdHJpbmd9IE1vZGlmaWVkIHN0cmluZywgYXQgbGVhc3QgU0laRSBsZW5ndGguCisgKi8KK2Z1bmN0aW9uIHBhZExlZnQoaW5wdXQsIHdpZHRoLCBjaCkgeworCXZhciBzID0gaW5wdXQgKyAiIjsKKwlpZiAodHlwZW9mIGNoID09PSAndW5kZWZpbmVkJykgeworCQljaCA9ICcwJzsKKwl9CisKKwl3aGlsZSAocy5sZW5ndGggPCB3aWR0aCkgeworCQlzID0gY2ggKyBzOworCX0KKwlyZXR1cm4gczsKK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIEhhbmRsaW5nIGJyb3dzZXIgaW5jb21wYXRpYmlsaXRpZXMgKi8KKworLyoqCisgKiBDcmVhdGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IGluIGNyb3NzLWJyb3dzZXIgd2F5CisgKiBAcmV0dXJucyBYTUxIdHRwUmVxdWVzdCBvYmplY3QsIG9yIG51bGwKKyAqLworZnVuY3Rpb24gY3JlYXRlUmVxdWVzdE9iamVjdCgpIHsKKwl0cnkgeworCQlyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisJfSBjYXRjaCAoZSkge30KKwl0cnkgeworCQlyZXR1cm4gd2luZG93LmNyZWF0ZVJlcXVlc3QoKTsKKwl9IGNhdGNoIChlKSB7fQorCXRyeSB7CisJCXJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAiKTsKKwl9IGNhdGNoIChlKSB7fQorCXRyeSB7CisJCXJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKwl9IGNhdGNoIChlKSB7fQorCisJcmV0dXJuIG51bGw7Cit9CisKKworLyoqCisgKiBJbnNlcnQgcnVsZSBnaXZpbmcgc3BlY2lmaWVkIFNUWUxFIHRvIGdpdmVuIFNFTEVDVE9SIGF0IHRoZSBlbmQgb2YKKyAqIGZpcnN0IENTUyBzdHlsZXNoZWV0LgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvcjogQ1NTIHNlbGVjdG9yLCBlLmcuICcuY2xhc3MnCisgKiBAcGFyYW0ge1N0cmluZ30gc3R5bGU6IHJ1bGUgY29udGVudHMsIGUuZy4gJ2JhY2tncm91bmQtY29sb3I6IHJlZDsnCisgKi8KK2Z1bmN0aW9uIGFkZENzc1J1bGUoc2VsZWN0b3IsIHN0eWxlKSB7CisJdmFyIHN0eWxlc2hlZXQgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1swXTsKKworCXZhciB0aGVSdWxlcyA9IFtdOworCWlmIChzdHlsZXNoZWV0LmNzc1J1bGVzKSB7ICAgICAvLyBXM0Mgd2F5CisJCXRoZVJ1bGVzID0gc3R5bGVzaGVldC5jc3NSdWxlczsKKwl9IGVsc2UgaWYgKHN0eWxlc2hlZXQucnVsZXMpIHsgLy8gSUUgd2F5CisJCXRoZVJ1bGVzID0gc3R5bGVzaGVldC5ydWxlczsKKwl9CisKKwlpZiAoc3R5bGVzaGVldC5pbnNlcnRSdWxlKSB7ICAgIC8vIFczQyB3YXkKKwkJc3R5bGVzaGVldC5pbnNlcnRSdWxlKHNlbGVjdG9yICsgJyB7ICcgKyBzdHlsZSArICcgfScsIHRoZVJ1bGVzLmxlbmd0aCk7CisJfSBlbHNlIGlmIChzdHlsZXNoZWV0LmFkZFJ1bGUpIHsgLy8gSUUgd2F5CisJCXN0eWxlc2hlZXQuYWRkUnVsZShzZWxlY3Rvciwgc3R5bGUpOworCX0KK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIFN1cHBvcnQgZm9yIGxlZ2FjeSBicm93c2VycyAqLworCisvKioKKyAqIFByb3ZpZGVzIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgbWV0aG9kLCBpZiB0aGVyZSBpcyBubyBuYXRpdmUKKyAqIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgorICoKKyAqIE5PVEUgdGhhdCB0aGVyZSBhcmUgbGltaXRzIGFuZCBkaWZmZXJlbmNlcyBjb21wYXJlZCB0byBuYXRpdmUKKyAqIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgYXMgZGVmaW5lZCBieSBlLmcuOgorICogICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZQorICogICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9kb20uaHRtbCNkb20tZ2V0ZWxlbWVudHNieWNsYXNzbmFtZQorICogICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9kb20uaHRtbCNkb20tZG9jdW1lbnQtZ2V0ZWxlbWVudHNieWNsYXNzbmFtZQorICoKKyAqIE5hbWVseSwgdGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBvbmx5IHNpbmdsZSBjbGFzcyBuYW1lIGFzCisgKiBhcmd1bWVudCBhbmQgbm90IHNldCBvZiBzcGFjZS1zZXBhcmF0ZWQgdG9rZW5zIHJlcHJlc2VudGluZyBjbGFzc2VzLAorICogaXQgcmV0dXJucyBBcnJheSBvZiBub2RlcyByYXRoZXIgdGhhbiBsaXZlIE5vZGVMaXN0LCBhbmQgaGFzCisgKiBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50IHdoZXJlIHlvdSBjYW4gbGltaXQgc2VhcmNoIHRvIGdpdmVuIHRhZ3MKKyAqICh2aWEgZ2V0RWxlbWVudHNCeVRhZ05hbWUpLgorICoKKyAqIEJhc2VkIG9uCisgKiAgIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nZXRlbGVtZW50c2J5Y2xhc3NuYW1lLworICogICBodHRwOi8vd3d3LmR1c3RpbmRpYXouY29tL2dldGVsZW1lbnRzYnljbGFzcy8KKyAqICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODE4ODY1L2RvLXdlLWhhdmUtZ2V0ZWxlbWVudHNieWNsYXNzbmFtZS1pbi1qYXZhc2NyaXB0CisgKgorICogU2VlIGFsc28gaHR0cDovL2Vqb2huLm9yZy9ibG9nL2dldGVsZW1lbnRzYnljbGFzc25hbWUtc3BlZWQtY29tcGFyaXNvbi8KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gY2xhc3M6IG5hbWUgb2YgX3NpbmdsZV8gY2xhc3MgdG8gZmluZAorICogQHBhcmFtIHtTdHJpbmd9IFt0YWdoaW50XSBsaW1pdCBzZWFyY2ggdG8gZ2l2ZW4gdGFncworICogQHJldHVybnMge05vZGVbXX0gYXJyYXkgb2YgbWF0Y2hpbmcgZWxlbWVudHMKKyAqLworaWYgKCEoJ2dldEVsZW1lbnRzQnlDbGFzc05hbWUnIGluIGRvY3VtZW50KSkgeworCWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBmdW5jdGlvbiAoY2xhc3NuYW1lLCB0YWdoaW50KSB7CisJCXRhZ2hpbnQgPSB0YWdoaW50IHx8ICIqIjsKKwkJdmFyIGVsZW1lbnRzID0gKHRhZ2hpbnQgPT09ICIqIiAmJiBkb2N1bWVudC5hbGwpID8KKwkJICAgICAgICAgICAgICAgZG9jdW1lbnQuYWxsIDoKKwkJICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnaGludCk7CisJCXZhciBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBjbGFzc25hbWUgKyAiKFxcc3wkKSIpOworCQl2YXIgbWF0Y2hlcz0gW107CisJCWZvciAodmFyIGkgPSAwLCBqID0gMCwgbiA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykgeworCQkJdmFyIGVsPSBlbGVtZW50c1tpXTsKKwkJCWlmIChlbC5jbGFzc05hbWUgJiYgcGF0dGVybi50ZXN0KGVsLmNsYXNzTmFtZSkpIHsKKwkJCQkvLyBtYXRjaGVzLnB1c2goZWwpOworCQkJCW1hdGNoZXNbal0gPSBlbDsKKwkJCQlqKys7CisJCQl9CisJCX0KKwkJcmV0dXJuIG1hdGNoZXM7CisJfTsKK30gLy8gZW5kIGlmCisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiB1bnF1b3RpbmcvdW5lc2NhcGluZyBmaWxlbmFtZXMgKi8KKworLyoqI0ArCisgKiBAY29uc3RhbnQKKyAqLwordmFyIGVzY0NvZGVSZSA9IC9cXChbXjAtN118WzAtN117MSwzfSkvZzsKK3ZhciBvY3RFc2NSZSA9IC9eWzAtN117MSwzfSQvOwordmFyIG1heWJlUXVvdGVkUmUgPSAvXlwiKC4qKVwiJC87CisvKiojQC0qLworCisvKioKKyAqIHVucXVvdGUgbWF5YmUgQy1xdW90ZWQgZmlsZW5hbWUgKGFzIHVzZWQgYnkgZ2l0LCBpLmUuIGl0IGlzCisgKiBpbiBkb3VibGUgcXVvdGVzICciJyBpZiB0aGVyZSBpcyBhbnkgZXNjYXBlIGNoYXJhY3RlciB1c2VkKQorICogZS5nLiAnYWEnIC0+ICdhYScsICciYVx0YSInIC0+ICdhCWEnCisgKgorICogQHBhcmFtIHtTdHJpbmd9IHN0cjogZ2l0LXF1b3RlZCBzdHJpbmcKKyAqIEByZXR1cm5zIHtTdHJpbmd9IFVucXVvdGVkIGFuZCB1bmVzY2FwZWQgc3RyaW5nCisgKgorICogQGdsb2JhbHMgZXNjQ29kZVJlLCBvY3RFc2NSZSwgbWF5YmVRdW90ZWRSZQorICovCitmdW5jdGlvbiB1bnF1b3RlKHN0cikgeworCWZ1bmN0aW9uIHVucShzZXEpIHsKKwkJdmFyIGVzID0geworCQkJLy8gY2hhcmFjdGVyIGVzY2FwZSBjb2RlcywgYWthIGVzY2FwZSBzZXF1ZW5jZXMgKGZyb20gQykKKwkJCS8vIHJlcGxhY2VtZW50cyBhcmUgdG8gc29tZSBleHRlbnQgSmF2YVNjcmlwdCBzcGVjaWZpYworCQkJdDogIlx0IiwgICAvLyB0YWIgICAgICAgICAgICAoSFQsIFRBQikKKwkJCW46ICJcbiIsICAgLy8gbmV3bGluZSAgICAgICAgKE5MKQorCQkJcjogIlxyIiwgICAvLyByZXR1cm4gICAgICAgICAoQ1IpCisJCQlmOiAiXGYiLCAgIC8vIGZvcm0gZmVlZCAgICAgIChGRikKKwkJCWI6ICJcYiIsICAgLy8gYmFja3NwYWNlICAgICAgKEJTKQorCQkJYTogIlx4MDciLCAvLyBhbGFybSAoYmVsbCkgICAoQkVMKQorCQkJZTogIlx4MUIiLCAvLyBlc2NhcGUgICAgICAgICAoRVNDKQorCQkJdjogIlx2IiAgICAvLyB2ZXJ0aWNhbCB0YWIgICAoVlQpCisJCX07CisKKwkJaWYgKHNlcS5zZWFyY2gob2N0RXNjUmUpICE9PSAtMSkgeworCQkJLy8gb2N0YWwgY2hhciBzZXF1ZW5jZQorCQkJcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc2VxLCA4KSk7CisJCX0gZWxzZSBpZiAoc2VxIGluIGVzKSB7CisJCQkvLyBDIGVzY2FwZSBzZXF1ZW5jZSwgYWthIGNoYXJhY3RlciBlc2NhcGUgY29kZQorCQkJcmV0dXJuIGVzW3NlcV07CisJCX0KKwkJLy8gcXVvdGVkIG9yZGluYXJ5IGNoYXJhY3RlcgorCQlyZXR1cm4gc2VxOworCX0KKworCXZhciBtYXRjaCA9IHN0ci5tYXRjaChtYXliZVF1b3RlZFJlKTsKKwlpZiAobWF0Y2gpIHsKKwkJc3RyID0gbWF0Y2hbMV07CisJCS8vIHBlcmhhcHMgc3RyID0gZXZhbCgnIicrc3RyKyciJyk7IHdvdWxkIGJlIGVub3VnaD8KKwkJc3RyID0gc3RyLnJlcGxhY2UoZXNjQ29kZVJlLAorCQkJZnVuY3Rpb24gKHN1YnN0ciwgcDEsIG9mZnNldCwgcykgeyByZXR1cm4gdW5xKHAxKTsgfSk7CisJfQorCXJldHVybiBzdHI7Cit9CisKKy8qIGVuZCBvZiBjb21tb24tbGliLmpzICovCmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2pzL2xpYi9jb29raWVzLmpzIGIvZ2l0d2ViL3N0YXRpYy9qcy9saWIvY29va2llcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI5YTA3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL3N0YXRpYy9qcy9saWIvY29va2llcy5qcwpAQCAtMCwwICsxLDExNCBAQAorLyoqCisgKiBAZmlsZU92ZXJ2aWV3IEFjY2Vzc2luZyBjb29raWVzIGZyb20gSmF2YVNjcmlwdAorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisvKgorICogQmFzZWQgb24gc3Vic2VjdGlvbiAiQ29va2llcyBpbiBKYXZhU2NyaXB0IiBvZiAiUHJvZmVzc2lvbmFsCisgKiBKYXZhU2NyaXB0IGZvciBXZWIgRGV2ZWxvcGVycyIgYnkgTmljaG9sYXMgQy4gWmFrYXMgYW5kIGNvb2tpZQorICogcGx1Z2luIGZyb20galF1ZXJ5IChkdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcykKKyAqLworCisKKy8qKgorICogQ3JlYXRlIGEgY29va2llIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHZhbHVlLAorICogYW5kIG90aGVyIG9wdGlvbmFsIHBhcmFtZXRlcnMuCisgKgorICogQGV4YW1wbGUKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJyk7IC8vIHdpbGwgYmUgZGVsZXRlZCB3aGVuIGJyb3dzZXIgZXhpdHMKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJywgeyBleHBpcmVzOiBuZXcgRGF0ZShEYXRlLnBhcnNlKCdKYW4gMSwgMjAxMicpKSB9KTsKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJywgeyBleHBpcmVzOiA3IH0pOyAvLyA3IGRheXMgPSAxIHdlZWsKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJywgeyBleHBpcmVzOiAxNCwgcGF0aDogJy8nIH0pOworICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzTmFtZTogICAgVW5pcXVlIG5hbWUgb2YgYSBjb29raWUgKGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzKS4KKyAqIEBwYXJhbSB7U3RyaW5nfSBzVmFsdWU6ICAgVGhlIHN0cmluZyB2YWx1ZSBzdG9yZWQgaW4gYSBjb29raWUuCisgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIEFuIG9iamVjdCBsaXRlcmFsIGNvbnRhaW5pbmcga2V5L3ZhbHVlIHBhaXJzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgb3B0aW9uYWwgY29va2llIGF0dHJpYnV0ZXMuCisgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ8RGF0ZX0gW29wdGlvbnMuZXhwaXJlc10gRWl0aGVyIGxpdGVyYWwgc3RyaW5nIHRvIGJlIHVzZWQgYXMgY29va2llIGV4cGlyZXMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIGV4cGlyYXRpb24gZGF0ZSBmcm9tIG5vdyBvbiBpbiBkYXlzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBEYXRlIG9iamVjdCB0byBiZSB1c2VkIGFzIGNvb2tpZSBleHBpcmF0aW9uIGRhdGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIG5lZ2F0aXZlIHZhbHVlIGlzIHNwZWNpZmllZCBvciBhIGRhdGUgaW4gdGhlIHBhc3QpLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvb2tpZSB3aWxsIGJlIGRlbGV0ZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gbnVsbCBvciBvbWl0dGVkLCB0aGUgY29va2llIHdpbGwgYmUgYSBzZXNzaW9uIGNvb2tpZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdpbGwgbm90IGJlIHJldGFpbmVkIHdoZW4gdGhlIGJyb3dzZXIgZXhpdHMuCisgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucGF0aF0gUmVzdHJpY3QgYWNjZXNzIG9mIGEgY29va2llIHRvIHBhcnRpY3VsYXIgZGlyZWN0b3J5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDogcGF0aCBvZiBwYWdlIHRoYXQgY3JlYXRlZCB0aGUgY29va2llKS4KKyAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5kb21haW5dIE92ZXJyaWRlIHdoYXQgd2ViIHNpdGVzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyBjb29raWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiBkb21haW4gb2YgcGFnZSB0aGF0IGNyZWF0ZWQgdGhlIGNvb2tpZSkuCisgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNlY3VyZV0gSWYgdHJ1ZSwgdGhlIHNlY3VyZSBhdHRyaWJ1dGUgb2YgdGhlIGNvb2tpZSB3aWxsIGJlIHNldAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgY29va2llIHdvdWxkIGJlIGFjY2Vzc2libGUgb25seSBmcm9tIHNlY3VyZSBzaXRlcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb29raWUgdHJhbnNtaXNzaW9uIHdpbGwgcmVxdWlyZSBzZWN1cmUgcHJvdG9jb2wgbGlrZSBIVFRQUykuCisgKi8KK2Z1bmN0aW9uIHNldENvb2tpZShzTmFtZSwgc1ZhbHVlLCBvcHRpb25zKSB7CisJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisJaWYgKHNWYWx1ZSA9PT0gbnVsbCkgeworCQlzVmFsdWUgPSAnJzsKKwkJb3B0aW9uLmV4cGlyZXMgPSAnZGVsZXRlJzsKKwl9CisKKwl2YXIgc0Nvb2tpZSA9IHNOYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHNWYWx1ZSk7CisKKwlpZiAob3B0aW9ucy5leHBpcmVzKSB7CisJCXZhciBvRXhwaXJlcyA9IG9wdGlvbnMuZXhwaXJlcywgc0RhdGU7CisJCWlmIChvRXhwaXJlcyA9PT0gJ2RlbGV0ZScpIHsKKwkJCXNEYXRlID0gJ1RodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UJzsKKwkJfSBlbHNlIGlmICh0eXBlb2Ygb0V4cGlyZXMgPT09ICdzdHJpbmcnKSB7CisJCQlzRGF0ZSA9IG9FeHBpcmVzOworCQl9IGVsc2UgeworCQkJdmFyIG9EYXRlOworCQkJaWYgKHR5cGVvZiBvRXhwaXJlcyA9PT0gJ251bWJlcicpIHsKKwkJCQlvRGF0ZSA9IG5ldyBEYXRlKCk7CisJCQkJb0RhdGUuc2V0VGltZShvRGF0ZS5nZXRUaW1lKCkgKyAob0V4cGlyZXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7IC8vIGRheXMgdG8gbXMKKwkJCX0gZWxzZSB7CisJCQkJb0RhdGUgPSBvRXhwaXJlczsKKwkJCX0KKwkJCXNEYXRlID0gb0RhdGUudG9HTVRTdHJpbmcoKTsKKwkJfQorCQlzQ29va2llICs9ICc7IGV4cGlyZXM9JyArIHNEYXRlOworCX0KKworCWlmIChvcHRpb25zLnBhdGgpIHsKKwkJc0Nvb2tpZSArPSAnOyBwYXRoPScgKyAob3B0aW9ucy5wYXRoKTsKKwl9CisJaWYgKG9wdGlvbnMuZG9tYWluKSB7CisJCXNDb29raWUgKz0gJzsgZG9tYWluPScgKyAob3B0aW9ucy5kb21haW4pOworCX0KKwlpZiAob3B0aW9ucy5zZWN1cmUpIHsKKwkJc0Nvb2tpZSArPSAnOyBzZWN1cmUnOworCX0KKwlkb2N1bWVudC5jb29raWUgPSBzQ29va2llOworfQorCisvKioKKyAqIEdldCB0aGUgdmFsdWUgb2YgYSBjb29raWUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gc05hbWU6IFVuaXF1ZSBuYW1lIG9mIGEgY29va2llIChsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcykKKyAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH0gVGhlIHN0cmluZyB2YWx1ZSBzdG9yZWQgaW4gYSBjb29raWUKKyAqLworZnVuY3Rpb24gZ2V0Q29va2llKHNOYW1lKSB7CisJdmFyIHNSRSA9ICcoPzo7ICk/JyArIHNOYW1lICsgJz0oW147XSopOz8nOworCXZhciBvUkUgPSBuZXcgUmVnRXhwKHNSRSk7CisJaWYgKG9SRS50ZXN0KGRvY3VtZW50LmNvb2tpZSkpIHsKKwkJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChSZWdFeHBbJyQxJ10pOworCX0gZWxzZSB7CisJCXJldHVybiBudWxsOworCX0KK30KKworLyoqCisgKiBEZWxldGUgY29va2llIHdpdGggZ2l2ZW4gbmFtZQorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzTmFtZTogICAgVW5pcXVlIG5hbWUgb2YgYSBjb29raWUgKGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzKQorICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBBbiBvYmplY3QgbGl0ZXJhbCBjb250YWluaW5nIGtleS92YWx1ZSBwYWlycworICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIG9wdGlvbmFsIGNvb2tpZSBhdHRyaWJ1dGVzLgorICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnBhdGhdICAgTXVzdCBiZSB0aGUgc2FtZSBhcyB3aGVuIHNldHRpbmcgYSBjb29raWUKKyAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5kb21haW5dIE11c3QgYmUgdGhlIHNhbWUgYXMgd2hlbiBzZXR0aW5nIGEgY29va2llCisgKi8KK2Z1bmN0aW9uIGRlbGV0ZUNvb2tpZShzTmFtZSwgb3B0aW9ucykgeworCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCW9wdGlvbnMuZXhwaXJlcyA9ICdkZWxldGUnOworCisJc2V0Q29va2llKHNOYW1lLCAnJywgb3B0aW9ucyk7Cit9CisKKy8qIGVuZCBvZiBjb29raWVzLmpzICovCmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2pzL2xpYi9kYXRldGltZS5qcyBiL2dpdHdlYi9zdGF0aWMvanMvbGliL2RhdGV0aW1lLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OGM2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2pzL2xpYi9kYXRldGltZS5qcwpAQCAtMCwwICsxLDE3NiBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDA3LCBGcmVkcmlrIEt1aXZpbmVuIDxmcmVrdWlAZ21haWwuY29tPgorLy8gICAgICAgICAgICAgICAyMDA3LCBQZXRyIEJhdWRpcyA8cGFza3lAc3VzZS5jej4KKy8vICAgICAgICAgIDIwMDgtMjAxMSwgSmFrdWIgTmFyZWJza2kgPGpuYXJlYkBnbWFpbC5jb20+CisKKy8qKgorICogQGZpbGVPdmVydmlldyBEYXRldGltZSBtYW5pcHVsYXRpb246IHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcKKyAqIEBsaWNlbnNlIEdQTHYyIG9yIGxhdGVyCisgKi8KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIHBhcnNpbmcgYW5kIHJldHJpZXZpbmcgZGF0ZXRpbWUgcmVsYXRlZCBpbmZvcm1hdGlvbiAqLworCisvKioKKyAqIHVzZWQgdG8gZXh0cmFjdCBob3VycyBhbmQgbWludXRlcyBmcm9tIHRpbWV6b25lIGluZm8sIGUuZyAnLTA5MDAnCisgKiBAY29uc3RhbnQKKyAqLwordmFyIHR6UmUgPSAvXihbK1wtXSkoWzAtOV1bMC05XSkoWzAtOV1bMC05XSkkLzsKKworLyoqCisgKiBjb252ZXJ0IG51bWVyaWMgdGltZXpvbmUgKy8tWlpaWiB0byBvZmZzZXQgZnJvbSBVVEMgaW4gc2Vjb25kcworICoKKyAqIEBwYXJhbSB7U3RyaW5nfSB0aW1lem9uZUluZm86IG51bWVyaWMgdGltZXpvbmUgJygrfC0pSEhNTScKKyAqIEByZXR1cm5zIHtOdW1iZXJ9IG9mZnNldCBmcm9tIFVUQyBpbiBzZWNvbmRzIGZvciB0aW1lem9uZQorICoKKyAqIEBnbG9iYWxzIHR6UmUKKyAqLworZnVuY3Rpb24gdGltZXpvbmVPZmZzZXQodGltZXpvbmVJbmZvKSB7CisJdmFyIG1hdGNoID0gdHpSZS5leGVjKHRpbWV6b25lSW5mbyk7CisJdmFyIHR6X3NpZ24gPSAobWF0Y2hbMV0gPT09ICctJyA/IC0xIDogKzEpOworCXZhciB0el9ob3VyID0gcGFyc2VJbnQobWF0Y2hbMl0sMTApOworCXZhciB0el9taW4gID0gcGFyc2VJbnQobWF0Y2hbM10sMTApOworCisJcmV0dXJuIHR6X3NpZ24qKCgodHpfaG91cio2MCkgKyB0el9taW4pKjYwKTsKK30KKworLyoqCisgKiByZXR1cm4gbG9jYWwgKGJyb3dzZXIpIHRpbWV6b25lIGFzIG9mZnNldCBmcm9tIFVUQyBpbiBzZWNvbmRzCisgKgorICogQHJldHVybnMge051bWJlcn0gb2Zmc2V0IGZyb20gVVRDIGluIHNlY29uZHMgZm9yIGxvY2FsIHRpbWV6b25lCisgKi8KK2Z1bmN0aW9uIGxvY2FsVGltZXpvbmVPZmZzZXQoKSB7CisJLy8gZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgdGltZS16b25lIG9mZnNldCBmcm9tIFVUQywKKwkvLyBpbiBfbWludXRlc18sIGZvciB0aGUgY3VycmVudCBsb2NhbGUKKwlyZXR1cm4gKChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpICogLTYwKTsKK30KKworLyoqCisgKiByZXR1cm4gbG9jYWwgKGJyb3dzZXIpIHRpbWV6b25lIGFzIG51bWVyaWMgdGltZXpvbmUgJygrfC0pSEhNTScKKyAqCisgKiBAcmV0dXJucyB7U3RyaW5nfSBsb2NhdCB0aW1lem9uZSBhcyAtLytaWlpaCisgKi8KK2Z1bmN0aW9uIGxvY2FsVGltZXpvbmVJbmZvKCkgeworCXZhciB0ek9mZnNldE1pbnV0ZXMgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xOworCisJcmV0dXJuIGZvcm1hdFRpbWV6b25lSW5mbygwLCB0ek9mZnNldE1pbnV0ZXMpOworfQorCisKKy8qKgorICogUGFyc2UgUkZDLTI4MjIgZGF0ZSBpbnRvIGEgVW5peCB0aW1lc3RhbXAgKGludG8gZXBvY2gpCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGRhdGU6IGRhdGUgaW4gUkZDLTI4MjIgZm9ybWF0LCBlLmcuICdUaHUsIDIxIERlYyAyMDAwIDE2OjAxOjA3ICswMjAwJworICogQHJldHVybnMge051bWJlcn0gZXBvY2ggaS5lLiBzZWNvbmRzIHNpbmNlICcwMDowMDowMCAxOTcwLTAxLTAxIFVUQycKKyAqLworZnVuY3Rpb24gcGFyc2VSRkMyODIyRGF0ZShkYXRlKSB7CisJLy8gRGF0ZS5wYXJzZSBhY2NlcHRzIHRoZSBJRVRGIHN0YW5kYXJkIChSRkMgMTEyMyBTZWN0aW9uIDUuMi4xNCBhbmQgZWxzZXdoZXJlKQorCS8vIGRhdGUgc3ludGF4LCB3aGljaCBpcyBkZWZpbmVkIGluIFJGQyAyODIyIChvYnNvbGV0ZXMgUkZDIDgyMikKKwkvLyBhbmQgcmV0dXJucyBudW1iZXIgb2YgX21pbGxpX3NlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLCAwMDowMDowMCBVVEMKKwlyZXR1cm4gRGF0ZS5wYXJzZShkYXRlKSAvIDEwMDA7Cit9CisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBmb3JtYXR0aW5nIGRhdGUgKi8KKworLyoqCisgKiBmb3JtYXQgdGltZXpvbmUgb2Zmc2V0IGFzIG51bWVyaWNhbCB0aW1lem9uZSAnKCt8LSlISE1NJyBvciAnKCt8LSlISDpNTScKKyAqCisgKiBAcGFyYW0ge051bWJlcn0gaG91cnM6ICAgIG9mZnNldCBpbiBob3VycywgZS5nLiAyIGZvciAnKzAyMDAnCisgKiBAcGFyYW0ge051bWJlcn0gW21pbnV0ZXNdIG9mZnNldCBpbiBtaW51dGVzLCBlLmcuIDMwIGZvciAnLTQwMzAnOworICogICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyBzcGxpdCBpbnRvIGhvdXJzIGlmIG5vdCAwIDw9IG1pbnV0ZXMgPCA2MCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgMTIwMCB3b3VsZCBnaXZlICcrMDEwMCc7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIDAKKyAqIEBwYXJhbSB7U3RyaW5nfSBbc2VwXSBzZXBhcmF0b3IgYmV0d2VlbiBob3VycyBhbmQgbWludXRlcyBwYXJ0LAorICogICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgJycsIG1pZ2h0IGJlICc6JyBmb3IgVzNDRFRGIChyZmMtMzMzOSkKKyAqIEByZXR1cm5zIHtTdHJpbmd9IHRpbWV6b25lIGluICcoK3wtKUhITU0nIG9yICcoK3wtKUhIOk1NJyBmb3JtYXQKKyAqLworZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVJbmZvKGhvdXJzLCBtaW51dGVzLCBzZXApIHsKKwltaW51dGVzID0gbWludXRlcyB8fCAwOyAvLyB0byBiZSBhYmxlIHRvIHVzZSBmb3JtYXRUaW1lem9uZUluZm8oaGgpCisJc2VwID0gc2VwIHx8ICcnOyAvLyBkZWZhdWx0IGZvcm1hdCBpcyArLy1aWlpaCisKKwlpZiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSB7CisJCWhvdXJzID0gbWludXRlcyA+IDAgPyBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MCkgOiBNYXRoLmNlaWwobWludXRlcyAvIDYwKTsKKwkJbWludXRlcyA9IE1hdGguYWJzKG1pbnV0ZXMgLSA2MCpob3Vycyk7IC8vIHNpZ24gb2YgbWludXRlcyBpcyBzaWduIG9mIGhvdXJzCisJCS8vIE5PVEU6IHRoaXMgd29ya3MgY29ycmVjdGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gVVRDLTAwOjMwIHRpbWV6b25lCisJfQorCisJdmFyIHR6U2lnbiA9IGhvdXJzID49IDAgPyAnKycgOiAnLSc7CisJaWYgKGhvdXJzIDwgMCkgeworCQlob3VycyA9IC1ob3VyczsgLy8gc2lnbiBpcyBzdG9yZWQgaW4gdHpTaWduCisJfQorCisJcmV0dXJuIHR6U2lnbiArIHBhZExlZnQoaG91cnMsIDIsICcwJykgKyBzZXAgKyBwYWRMZWZ0KG1pbnV0ZXMsIDIsICcwJyk7Cit9CisKKy8qKgorICogdHJhbnNsYXRlICd1dGMnIGFuZCAnbG9jYWwnIHRvIG51bWVyaWNhbCB0aW1lem9uZQorICogQHBhcmFtIHtTdHJpbmd9IHRpbWV6b25lSW5mbzogbWlnaHQgYmUgJ3V0Yycgb3IgJ2xvY2FsJyAoYnJvd3NlcikKKyAqLworZnVuY3Rpb24gbm9ybWFsaXplVGltZXpvbmVJbmZvKHRpbWV6b25lSW5mbykgeworCXN3aXRjaCAodGltZXpvbmVJbmZvKSB7CisJY2FzZSAndXRjJzoKKwkJcmV0dXJuICcrMDAwMCc7CisJY2FzZSAnbG9jYWwnOiAvLyAnbG9jYWwnIGlzIGJyb3dzZXIgdGltZXpvbmUKKwkJcmV0dXJuIGxvY2FsVGltZXpvbmVJbmZvKCk7CisJfQorCXJldHVybiB0aW1lem9uZUluZm87Cit9CisKKworLyoqCisgKiByZXR1cm4gZGF0ZSBpbiBsb2NhbCB0aW1lIGZvcm1hdHRlZCBpbiBpc28tODYwMSBsaWtlIGZvcm1hdAorICogJ3l5eXktbW0tZGQgSEg6TU06U1MgKy8tWlpaWicgZS5nLiAnMjAwNS0wOC0wNyAyMTo0OTo0NiArMDIwMCcKKyAqCisgKiBAcGFyYW0ge051bWJlcn0gZXBvY2g6IHNlY29uZHMgc2luY2UgJzAwOjAwOjAwIDE5NzAtMDEtMDEgVVRDJworICogQHBhcmFtIHtTdHJpbmd9IHRpbWV6b25lSW5mbzogbnVtZXJpYyB0aW1lem9uZSAnKCt8LSlISE1NJworICogQHJldHVybnMge1N0cmluZ30gZGF0ZSBpbiBsb2NhbCB0aW1lIGluIGlzby04NjAxIGxpa2UgZm9ybWF0CisgKi8KK2Z1bmN0aW9uIGZvcm1hdERhdGVJU09Mb2NhbChlcG9jaCwgdGltZXpvbmVJbmZvKSB7CisJLy8gZGF0ZSBjb3JyZWN0ZWQgYnkgdGltZXpvbmUKKwl2YXIgbG9jYWxEYXRlID0gbmV3IERhdGUoMTAwMCAqIChlcG9jaCArCisJCXRpbWV6b25lT2Zmc2V0KHRpbWV6b25lSW5mbykpKTsKKwl2YXIgbG9jYWxEYXRlU3RyID0gLy8gZS5nLiAnMjAwNS0wOC0wNycKKwkJbG9jYWxEYXRlLmdldFVUQ0Z1bGxZZWFyKCkgICAgICAgICAgICAgICAgICsgJy0nICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDTW9udGgoKSsxLCAyLCAnMCcpICsgJy0nICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDRGF0ZSgpLCAgICAyLCAnMCcpOworCXZhciBsb2NhbFRpbWVTdHIgPSAvLyBlLmcuICcyMTo0OTo0NicKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDSG91cnMoKSwgICAyLCAnMCcpICsgJzonICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDTWludXRlcygpLCAyLCAnMCcpICsgJzonICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDU2Vjb25kcygpLCAyLCAnMCcpOworCisJcmV0dXJuIGxvY2FsRGF0ZVN0ciArICcgJyArIGxvY2FsVGltZVN0ciArICcgJyArIHRpbWV6b25lSW5mbzsKK30KKworLyoqCisgKiByZXR1cm4gZGF0ZSBpbiBsb2NhbCB0aW1lIGZvcm1hdHRlZCBpbiByZmMtMjgyMiBmb3JtYXQKKyAqIGUuZy4gJ1RodSwgMjEgRGVjIDIwMDAgMTY6MDE6MDcgKzAyMDAnCisgKgorICogQHBhcmFtIHtOdW1iZXJ9IGVwb2NoOiBzZWNvbmRzIHNpbmNlICcwMDowMDowMCAxOTcwLTAxLTAxIFVUQycKKyAqIEBwYXJhbSB7U3RyaW5nfSB0aW1lem9uZUluZm86IG51bWVyaWMgdGltZXpvbmUgJygrfC0pSEhNTScKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gW3BhZERheV0gZS5nLiAnU3VuLCAwNyBBdWcnIGlmIHRydWUsICdTdW4sIDcgQXVnJyBvdGhlcndpc2UKKyAqIEByZXR1cm5zIHtTdHJpbmd9IGRhdGUgaW4gbG9jYWwgdGltZSBpbiByZmMtMjgyMiBmb3JtYXQKKyAqLworZnVuY3Rpb24gZm9ybWF0RGF0ZVJGQzI4ODIoZXBvY2gsIHRpbWV6b25lSW5mbywgcGFkRGF5KSB7CisJLy8gQSBzaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9udGgsIHRocmVlIGxldHRlcnMKKwl2YXIgbW9udGhzID0gWyJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyJdOworCS8vIEEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBhIGRheSwgdGhyZWUgbGV0dGVycworCXZhciBkYXlzID0gWyJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiXTsKKwkvLyBkYXRlIGNvcnJlY3RlZCBieSB0aW1lem9uZQorCXZhciBsb2NhbERhdGUgPSBuZXcgRGF0ZSgxMDAwICogKGVwb2NoICsKKwkJdGltZXpvbmVPZmZzZXQodGltZXpvbmVJbmZvKSkpOworCXZhciBsb2NhbERhdGVTdHIgPSAvLyBlLmcuICdTdW4sIDcgQXVnIDIwMDUnIG9yICdTdW4sIDA3IEF1ZyAyMDA1JworCQlkYXlzW2xvY2FsRGF0ZS5nZXRVVENEYXkoKV0gKyAnLCAnICsKKwkJKHBhZERheSA/IHBhZExlZnQobG9jYWxEYXRlLmdldFVUQ0RhdGUoKSwyLCcwJykgOiBsb2NhbERhdGUuZ2V0VVRDRGF0ZSgpKSArICcgJyArCisJCW1vbnRoc1tsb2NhbERhdGUuZ2V0VVRDTW9udGgoKV0gKyAnICcgKworCQlsb2NhbERhdGUuZ2V0VVRDRnVsbFllYXIoKTsKKwl2YXIgbG9jYWxUaW1lU3RyID0gLy8gZS5nLiAnMjE6NDk6NDYnCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ0hvdXJzKCksICAgMiwgJzAnKSArICc6JyArCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ01pbnV0ZXMoKSwgMiwgJzAnKSArICc6JyArCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ1NlY29uZHMoKSwgMiwgJzAnKTsKKworCXJldHVybiBsb2NhbERhdGVTdHIgKyAnICcgKyBsb2NhbFRpbWVTdHIgKyAnICcgKyB0aW1lem9uZUluZm87Cit9CisKKy8qIGVuZCBvZiBkYXRldGltZS5qcyAqLwpkaWZmIC0tZ2l0IGEvZ3BnLWludGVyZmFjZS5jIGIvZ3BnLWludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjNjNjEKLS0tIC9kZXYvbnVsbAorKysgYi9ncGctaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwxNDAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisKK3N0YXRpYyBjaGFyICpjb25maWd1cmVkX3NpZ25pbmdfa2V5Oworc3RhdGljIGNvbnN0IGNoYXIgKmdwZ19wcm9ncmFtID0gImdwZyI7CisKK3ZvaWQgc2V0X3NpZ25pbmdfa2V5KGNvbnN0IGNoYXIgKmtleSkKK3sKKwlmcmVlKGNvbmZpZ3VyZWRfc2lnbmluZ19rZXkpOworCWNvbmZpZ3VyZWRfc2lnbmluZ19rZXkgPSB4c3RyZHVwKGtleSk7Cit9CisKK2ludCBnaXRfZ3BnX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLnNpZ25pbmdrZXkiKSkgeworCQlzZXRfc2lnbmluZ19rZXkodmFsdWUpOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJncGcucHJvZ3JhbSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZ3BnX3Byb2dyYW0gPSB4c3RyZHVwKHZhbHVlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9zaWduaW5nX2tleSh2b2lkKQoreworCWlmIChjb25maWd1cmVkX3NpZ25pbmdfa2V5KQorCQlyZXR1cm4gY29uZmlndXJlZF9zaWduaW5nX2tleTsKKwlyZXR1cm4gZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVHxJREVOVF9OT19EQVRFKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIGRldGFjaGVkIHNpZ25hdHVyZSBmb3IgdGhlIGNvbnRlbnRzIG9mICJidWZmZXIiIGFuZCBhcHBlbmQKKyAqIGl0IGFmdGVyICJzaWduYXR1cmUiOyAiYnVmZmVyIiBhbmQgInNpZ25hdHVyZSIgY2FuIGJlIHRoZSBzYW1lCisgKiBzdHJidWYgaW5zdGFuY2UsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBkZXRhY2hlZCBzaWduYXR1cmUgYXBwZW5kZWQKKyAqIGF0IHRoZSBlbmQuCisgKi8KK2ludCBzaWduX2J1ZmZlcihzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSwgY29uc3QgY2hhciAqc2lnbmluZ19rZXkpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZ3BnOworCWNvbnN0IGNoYXIgKmFyZ3NbNF07CisJc3NpemVfdCBsZW47CisJc2l6ZV90IGksIGosIGJvdHRvbTsKKworCW1lbXNldCgmZ3BnLCAwLCBzaXplb2YoZ3BnKSk7CisJZ3BnLmFyZ3YgPSBhcmdzOworCWdwZy5pbiA9IC0xOworCWdwZy5vdXQgPSAtMTsKKwlhcmdzWzBdID0gZ3BnX3Byb2dyYW07CisJYXJnc1sxXSA9ICItYnNhdSI7CisJYXJnc1syXSA9IHNpZ25pbmdfa2V5OworCWFyZ3NbM10gPSBOVUxMOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmdwZykpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcnVuIGdwZy4iKSk7CisKKwkvKgorCSAqIFdoZW4gdGhlIHVzZXJuYW1lIHNpZ25pbmdrZXkgaXMgYmFkLCBwcm9ncmFtIGNvdWxkIGJlIHRlcm1pbmF0ZWQKKwkgKiBiZWNhdXNlIGdwZyBleGl0cyB3aXRob3V0IHJlYWRpbmcgYW5kIHRoZW4gd3JpdGUgZ2V0cyBTSUdQSVBFLgorCSAqLworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisKKwlpZiAod3JpdGVfaW5fZnVsbChncGcuaW4sIGJ1ZmZlci0+YnVmLCBidWZmZXItPmxlbikgIT0gYnVmZmVyLT5sZW4pIHsKKwkJY2xvc2UoZ3BnLmluKTsKKwkJY2xvc2UoZ3BnLm91dCk7CisJCWZpbmlzaF9jb21tYW5kKCZncGcpOworCQlyZXR1cm4gZXJyb3IoXygiZ3BnIGRpZCBub3QgYWNjZXB0IHRoZSBkYXRhIikpOworCX0KKwljbG9zZShncGcuaW4pOworCisJYm90dG9tID0gc2lnbmF0dXJlLT5sZW47CisJbGVuID0gc3RyYnVmX3JlYWQoc2lnbmF0dXJlLCBncGcub3V0LCAxMDI0KTsKKwljbG9zZShncGcub3V0KTsKKworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmZ3BnKSB8fCAhbGVuIHx8IGxlbiA8IDApCisJCXJldHVybiBlcnJvcihfKCJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiKSk7CisKKwkvKiBTdHJpcCBDUiBmcm9tIHRoZSBsaW5lIGVuZGluZ3MsIGluIGNhc2Ugd2UgYXJlIG9uIFdpbmRvd3MuICovCisJZm9yIChpID0gaiA9IGJvdHRvbTsgaSA8IHNpZ25hdHVyZS0+bGVuOyBpKyspCisJCWlmIChzaWduYXR1cmUtPmJ1ZltpXSAhPSAnXHInKSB7CisJCQlpZiAoaSAhPSBqKQorCQkJCXNpZ25hdHVyZS0+YnVmW2pdID0gc2lnbmF0dXJlLT5idWZbaV07CisJCQlqKys7CisJCX0KKwlzdHJidWZfc2V0bGVuKHNpZ25hdHVyZSwgaik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJ1biAiZ3BnIiB0byBzZWUgaWYgdGhlIHBheWxvYWQgbWF0Y2hlcyB0aGUgZGV0YWNoZWQgc2lnbmF0dXJlLgorICogZ3BnX291dHB1dCwgd2hlbiBzZXQsIHJlY2VpdmVzIHRoZSBkaWFnbm9zdGljIG91dHB1dCBmcm9tIEdQRy4KKyAqLworaW50IHZlcmlmeV9zaWduZWRfYnVmZmVyKGNvbnN0IGNoYXIgKnBheWxvYWQsIHNpemVfdCBwYXlsb2FkX3NpemUsCisJCQkgY29uc3QgY2hhciAqc2lnbmF0dXJlLCBzaXplX3Qgc2lnbmF0dXJlX3NpemUsCisJCQkgc3RydWN0IHN0cmJ1ZiAqZ3BnX291dHB1dCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBncGc7CisJY29uc3QgY2hhciAqYXJnc19ncGdbXSA9IHtOVUxMLCAiLS12ZXJpZnkiLCAiRklMRSIsICItIiwgTlVMTH07CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwlpbnQgZmQsIHJldDsKKworCWFyZ3NfZ3BnWzBdID0gZ3BnX3Byb2dyYW07CisJZmQgPSBnaXRfbWtzdGVtcChwYXRoLCBQQVRIX01BWCwgIi5naXRfdnRhZ190bXBYWFhYWFgiKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJyVzJzogJXMiLAorCQkJICAgICBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzaWduYXR1cmUsIHNpZ25hdHVyZV9zaXplKSA8IDApCisJCXJldHVybiBlcnJvcigiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyc6ICVzIiwKKwkJCSAgICAgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwljbG9zZShmZCk7CisKKwltZW1zZXQoJmdwZywgMCwgc2l6ZW9mKGdwZykpOworCWdwZy5hcmd2ID0gYXJnc19ncGc7CisJZ3BnLmluID0gLTE7CisJaWYgKGdwZ19vdXRwdXQpCisJCWdwZy5lcnIgPSAtMTsKKwlhcmdzX2dwZ1syXSA9IHBhdGg7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmdwZykpIHsKKwkJdW5saW5rKHBhdGgpOworCQlyZXR1cm4gZXJyb3IoImNvdWxkIG5vdCBydW4gZ3BnLiIpOworCX0KKworCXdyaXRlX2luX2Z1bGwoZ3BnLmluLCBwYXlsb2FkLCBwYXlsb2FkX3NpemUpOworCWNsb3NlKGdwZy5pbik7CisKKwlpZiAoZ3BnX291dHB1dCkKKwkJc3RyYnVmX3JlYWQoZ3BnX291dHB1dCwgZ3BnLmVyciwgMCk7CisJcmV0ID0gZmluaXNoX2NvbW1hbmQoJmdwZyk7CisKKwl1bmxpbmtfb3Jfd2FybihwYXRoKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9ncGctaW50ZXJmYWNlLmggYi9ncGctaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljMzYwOAotLS0gL2Rldi9udWxsCisrKyBiL2dwZy1pbnRlcmZhY2UuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIEdQR19JTlRFUkZBQ0VfSAorI2RlZmluZSBHUEdfSU5URVJGQUNFX0gKKworZXh0ZXJuIGludCBzaWduX2J1ZmZlcihzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSwgY29uc3QgY2hhciAqc2lnbmluZ19rZXkpOworZXh0ZXJuIGludCB2ZXJpZnlfc2lnbmVkX2J1ZmZlcihjb25zdCBjaGFyICpwYXlsb2FkLCBzaXplX3QgcGF5bG9hZF9zaXplLCBjb25zdCBjaGFyICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfc2l6ZSwgc3RydWN0IHN0cmJ1ZiAqZ3BnX291dHB1dCk7CitleHRlcm4gaW50IGdpdF9ncGdfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgc2V0X3NpZ25pbmdfa2V5KGNvbnN0IGNoYXIgKik7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0X3NpZ25pbmdfa2V5KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2dyYXBoLmMgYi9ncmFwaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NjRmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmFwaC5jCkBAIC0wLDAgKzEsMTM2NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJncmFwaC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorCisvKiBJbnRlcm5hbCBBUEkgKi8KKworLyoKKyAqIE91dHB1dCB0aGUgbmV4dCBsaW5lIGZvciBhIGdyYXBoLgorICogVGhpcyBmb3JtYXRzIHRoZSBuZXh0IGdyYXBoIGxpbmUgaW50byB0aGUgc3BlY2lmaWVkIHN0cmJ1Zi4gIEl0IGlzIG5vdAorICogdGVybWluYXRlZCB3aXRoIGEgbmV3bGluZS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIGxpbmUgaW5jbHVkZXMgdGhlIGN1cnJlbnQgY29tbWl0LCBhbmQgMCBvdGhlcndpc2UuCisgKiBncmFwaF9uZXh0X2xpbmUoKSB3aWxsIHJldHVybiAxIGV4YWN0bHkgb25jZSBmb3IgZWFjaCB0aW1lCisgKiBncmFwaF91cGRhdGUoKSBpcyBjYWxsZWQuCisgKi8KK3N0YXRpYyBpbnQgZ3JhcGhfbmV4dF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qCisgKiBTZXQgdXAgYSBjdXN0b20gc2NoZW1lIGZvciBjb2x1bW4gY29sb3JzLgorICoKKyAqIFRoZSBkZWZhdWx0IGNvbHVtbiBjb2xvciBzY2hlbWUgaW5zZXJ0cyBBTlNJIGNvbG9yIGVzY2FwZXMgdG8gY29sb3JpemUKKyAqIHRoZSBncmFwaC4gVGhlIHZhcmlvdXMgY29sb3IgZXNjYXBlcyBhcmUgc3RvcmVkIGluIGFuIGFycmF5IG9mIHN0cmluZ3MKKyAqIHdoZXJlIGVhY2ggZW50cnkgY29ycmVzcG9uZHMgdG8gYSBjb2xvciwgZXhjZXB0IGZvciB0aGUgbGFzdCBlbnRyeSwKKyAqIHdoaWNoIGRlbm90ZXMgdGhlIGVzY2FwZSBmb3IgcmVzZXR0aW5nIHRoZSBjb2xvciBiYWNrIHRvIHRoZSBkZWZhdWx0LgorICogV2hlbiBnZW5lcmF0aW5nIHRoZSBncmFwaCwgc3RyaW5ncyBmcm9tIHRoaXMgYXJyYXkgYXJlIGluc2VydGVkIGJlZm9yZQorICogYW5kIGFmdGVyIHRoZSB2YXJpb3VzIGNvbHVtbiBjaGFyYWN0ZXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBlbmFibGUgYSBjdXN0b20gYXJyYXkgb2YgY29sb3IgZXNjYXBlcy4KKyAqIFRoZSAnY29sb3JzX21heCcgYXJndW1lbnQgaXMgdGhlIGluZGV4IG9mIHRoZSBsYXN0ICJyZXNldCIgZW50cnkuCisgKgorICogVGhpcyBmdW5jdGlvbnMgbXVzdCBiZSBjYWxsZWQgQkVGT1JFIGdyYXBoX2luaXQoKSBpcyBjYWxsZWQuCisgKi8KK3N0YXRpYyB2b2lkIGdyYXBoX3NldF9jb2x1bW5fY29sb3JzKGNvbnN0IGNoYXIgKipjb2xvcnMsIHVuc2lnbmVkIHNob3J0IGNvbG9yc19tYXgpOworCisvKgorICogT3V0cHV0IGEgcGFkZGluZyBsaW5lIGluIHRoZSBncmFwaC4KKyAqIFRoaXMgaXMgc2ltaWxhciB0byBncmFwaF9uZXh0X2xpbmUoKS4gIEhvd2V2ZXIsIGl0IGlzIGd1YXJhbnRlZWQgdG8KKyAqIG5ldmVyIHByaW50IHRoZSBjdXJyZW50IGNvbW1pdCBsaW5lLiAgSW5zdGVhZCwgaWYgdGhlIGNvbW1pdCBsaW5lIGlzCisgKiBuZXh0LCBpdCB3aWxsIHNpbXBseSBvdXRwdXQgYSBsaW5lIG9mIHZlcnRpY2FsIHBhZGRpbmcsIGV4dGVuZGluZyB0aGUKKyAqIGJyYW5jaCBsaW5lcyBkb3dud2FyZHMsIGJ1dCBsZWF2aW5nIHRoZW0gb3RoZXJ3aXNlIHVuY2hhbmdlZC4KKyAqLworc3RhdGljIHZvaWQgZ3JhcGhfcGFkZGluZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qCisgKiBQcmludCBhIHN0cmJ1ZiB0byBzdGRvdXQuICBJZiB0aGUgZ3JhcGggaXMgbm9uLU5VTEwsIGFsbCBsaW5lcyBidXQgdGhlCisgKiBmaXJzdCB3aWxsIGJlIHByZWZpeGVkIHdpdGggdGhlIGdyYXBoIG91dHB1dC4KKyAqCisgKiBJZiB0aGUgc3RyYnVmIGVuZHMgd2l0aCBhIG5ld2xpbmUsIHRoZSBvdXRwdXQgd2lsbCBlbmQgYWZ0ZXIgdGhpcworICogbmV3bGluZS4gIEEgbmV3IGdyYXBoIGxpbmUgd2lsbCBub3QgYmUgcHJpbnRlZCBhZnRlciB0aGUgZmluYWwgbmV3bGluZS4KKyAqIElmIHRoZSBzdHJidWYgaXMgZW1wdHksIG5vIG91dHB1dCB3aWxsIGJlIHByaW50ZWQuCisgKgorICogU2luY2UgdGhlIGZpcnN0IGxpbmUgd2lsbCBub3QgaW5jbHVkZSB0aGUgZ3JhcGggb3V0cHV0LCB0aGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgcHJpbnRpbmcgdGhpcyBsaW5lJ3MgZ3JhcGggKHBlcmhhcHMgdmlhCisgKiBncmFwaF9zaG93X2NvbW1pdCgpIG9yIGdyYXBoX3Nob3dfb25lbGluZSgpKSBiZWZvcmUgY2FsbGluZworICogZ3JhcGhfc2hvd19zdHJidWYoKS4KKyAqLworc3RhdGljIHZvaWQgZ3JhcGhfc2hvd19zdHJidWYoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgY29uc3QgKnNiKTsKKworLyoKKyAqIFRPRE86CisgKiAtIExpbWl0IHRoZSBudW1iZXIgb2YgY29sdW1ucywgc2ltaWxhciB0byB0aGUgd2F5IGdpdGsgZG9lcy4KKyAqICAgSWYgd2UgcmVhY2ggbW9yZSB0aGFuIGEgc3BlY2lmaWVkIG51bWJlciBvZiBjb2x1bW5zLCBvbWl0CisgKiAgIHNlY3Rpb25zIG9mIHNvbWUgY29sdW1ucy4KKyAqLworCitzdHJ1Y3QgY29sdW1uIHsKKwkvKgorCSAqIFRoZSBwYXJlbnQgY29tbWl0IG9mIHRoaXMgY29sdW1uLgorCSAqLworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkvKgorCSAqIFRoZSBjb2xvciB0byAob3B0aW9uYWxseSkgcHJpbnQgdGhpcyBjb2x1bW4gaW4uICBUaGlzIGlzIGFuCisJICogaW5kZXggaW50byBjb2x1bW5fY29sb3JzLgorCSAqLworCXVuc2lnbmVkIHNob3J0IGNvbG9yOworfTsKKworZW51bSBncmFwaF9zdGF0ZSB7CisJR1JBUEhfUEFERElORywKKwlHUkFQSF9TS0lQLAorCUdSQVBIX1BSRV9DT01NSVQsCisJR1JBUEhfQ09NTUlULAorCUdSQVBIX1BPU1RfTUVSR0UsCisJR1JBUEhfQ09MTEFQU0lORworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKipjb2x1bW5fY29sb3JzOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGNvbHVtbl9jb2xvcnNfbWF4OworCitzdGF0aWMgdm9pZCBncmFwaF9zZXRfY29sdW1uX2NvbG9ycyhjb25zdCBjaGFyICoqY29sb3JzLCB1bnNpZ25lZCBzaG9ydCBjb2xvcnNfbWF4KQoreworCWNvbHVtbl9jb2xvcnMgPSBjb2xvcnM7CisJY29sdW1uX2NvbG9yc19tYXggPSBjb2xvcnNfbWF4OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY29sdW1uX2dldF9jb2xvcl9jb2RlKHVuc2lnbmVkIHNob3J0IGNvbG9yKQoreworCXJldHVybiBjb2x1bW5fY29sb3JzW2NvbG9yXTsKK30KKworc3RhdGljIHZvaWQgc3RyYnVmX3dyaXRlX2NvbHVtbihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IGNvbHVtbiAqYywKKwkJCQljaGFyIGNvbF9jaGFyKQoreworCWlmIChjLT5jb2xvciA8IGNvbHVtbl9jb2xvcnNfbWF4KQorCQlzdHJidWZfYWRkc3RyKHNiLCBjb2x1bW5fZ2V0X2NvbG9yX2NvZGUoYy0+Y29sb3IpKTsKKwlzdHJidWZfYWRkY2goc2IsIGNvbF9jaGFyKTsKKwlpZiAoYy0+Y29sb3IgPCBjb2x1bW5fY29sb3JzX21heCkKKwkJc3RyYnVmX2FkZHN0cihzYiwgY29sdW1uX2dldF9jb2xvcl9jb2RlKGNvbHVtbl9jb2xvcnNfbWF4KSk7Cit9CisKK3N0cnVjdCBnaXRfZ3JhcGggeworCS8qCisJICogVGhlIGNvbW1pdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkCisJICovCisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCS8qIFRoZSByZXYtaW5mbyB1c2VkIGZvciB0aGUgY3VycmVudCB0cmF2ZXJzYWwgKi8KKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGludGVyZXN0aW5nIHBhcmVudHMgdGhhdCB0aGlzIGNvbW1pdCBoYXMuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgcGFyZW50cy4KKwkgKiBUaGlzIGNvdW50IGV4Y2x1ZGVzIHBhcmVudHMgdGhhdCB3b24ndCBiZSBwcmludGVkIGluIHRoZSBncmFwaAorCSAqIG91dHB1dCwgYXMgZGV0ZXJtaW5lZCBieSBncmFwaF9pc19pbnRlcmVzdGluZygpLgorCSAqLworCWludCBudW1fcGFyZW50czsKKwkvKgorCSAqIFRoZSB3aWR0aCBvZiB0aGUgZ3JhcGggb3V0cHV0IGZvciB0aGlzIGNvbW1pdC4KKwkgKiBBbGwgcm93cyBmb3IgdGhpcyBjb21taXQgYXJlIHBhZGRlZCB0byB0aGlzIHdpZHRoLCBzbyB0aGF0CisJICogbWVzc2FnZXMgcHJpbnRlZCBhZnRlciB0aGUgZ3JhcGggb3V0cHV0IGFyZSBhbGlnbmVkLgorCSAqLworCWludCB3aWR0aDsKKwkvKgorCSAqIFRoZSBuZXh0IGV4cGFuc2lvbiByb3cgdG8gcHJpbnQKKwkgKiB3aGVuIHN0YXRlIGlzIEdSQVBIX1BSRV9DT01NSVQKKwkgKi8KKwlpbnQgZXhwYW5zaW9uX3JvdzsKKwkvKgorCSAqIFRoZSBjdXJyZW50IG91dHB1dCBzdGF0ZS4KKwkgKiBUaGlzIHRlbGxzIHVzIHdoYXQga2luZCBvZiBsaW5lIGdyYXBoX25leHRfbGluZSgpIHNob3VsZCBvdXRwdXQuCisJICovCisJZW51bSBncmFwaF9zdGF0ZSBzdGF0ZTsKKwkvKgorCSAqIFRoZSBvdXRwdXQgc3RhdGUgZm9yIHRoZSBwcmV2aW91cyBsaW5lIG9mIG91dHB1dC4KKwkgKiBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIGRldGVybWluZSBob3cgdGhlIGZpcnN0IG1lcmdlIGxpbmUKKwkgKiBzaG91bGQgYXBwZWFyLCBiYXNlZCBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBwcmV2aW91cyBjb21taXQuCisJICovCisJZW51bSBncmFwaF9zdGF0ZSBwcmV2X3N0YXRlOworCS8qCisJICogVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gdGhhdCByZWZlcnMgdG8gdGhpcyBjb21taXQuCisJICoKKwkgKiBJZiBub25lIG9mIHRoZSBpbmNvbWluZyBjb2x1bW5zIHJlZmVyIHRvIHRoaXMgY29tbWl0LAorCSAqIHRoaXMgd2lsbCBiZSBlcXVhbCB0byBudW1fY29sdW1ucy4KKwkgKi8KKwlpbnQgY29tbWl0X2luZGV4OworCS8qCisJICogVGhlIGNvbW1pdF9pbmRleCBmb3IgdGhlIHByZXZpb3VzbHkgZGlzcGxheWVkIGNvbW1pdC4KKwkgKgorCSAqIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IHRoZSBmaXJzdCBsaW5lIG9mIGEgbWVyZ2UKKwkgKiBncmFwaCBvdXRwdXQgc2hvdWxkIGFwcGVhciwgYmFzZWQgb24gdGhlIGxhc3QgbGluZSBvZiB0aGUKKwkgKiBwcmV2aW91cyBjb21taXQuCisJICovCisJaW50IHByZXZfY29tbWl0X2luZGV4OworCS8qCisJICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBjb2x1bW5zCisJICogYW5kIG5ld19jb2x1bW5zIGFycmF5cy4gIFRoaXMgaXMgYWxzbyBoYWxmIHRoZSBudW1iZXIgb2YgZW50cmllcworCSAqIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgbWFwcGluZyBhbmQgbmV3X21hcHBpbmcgYXJyYXlzLgorCSAqLworCWludCBjb2x1bW5fY2FwYWNpdHk7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgKGFsc28gY2FsbGVkICJicmFuY2ggbGluZXMiIGluIHNvbWUgcGxhY2VzKQorCSAqLworCWludCBudW1fY29sdW1uczsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbmV3X2NvbHVtbnMgYXJyYXkKKwkgKi8KKwlpbnQgbnVtX25ld19jb2x1bW5zOworCS8qCisJICogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBtYXBwaW5nIGFycmF5CisJICovCisJaW50IG1hcHBpbmdfc2l6ZTsKKwkvKgorCSAqIFRoZSBjb2x1bW4gc3RhdGUgYmVmb3JlIHdlIG91dHB1dCB0aGUgY3VycmVudCBjb21taXQuCisJICovCisJc3RydWN0IGNvbHVtbiAqY29sdW1uczsKKwkvKgorCSAqIFRoZSBuZXcgY29sdW1uIHN0YXRlIGFmdGVyIHdlIG91dHB1dCB0aGUgY3VycmVudCBjb21taXQuCisJICogT25seSB2YWxpZCB3aGVuIHN0YXRlIGlzIEdSQVBIX0NPTExBUFNJTkcuCisJICovCisJc3RydWN0IGNvbHVtbiAqbmV3X2NvbHVtbnM7CisJLyoKKwkgKiBBbiBhcnJheSB0aGF0IHRyYWNrcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBlYWNoCisJICogY2hhcmFjdGVyIGluIHRoZSBvdXRwdXQgbGluZSBkdXJpbmcgc3RhdGUgR1JBUEhfQ09MTEFQU0lORy4KKwkgKiBFYWNoIGVudHJ5IGlzIC0xIGlmIHRoaXMgY2hhcmFjdGVyIGlzIGVtcHR5LCBvciBhIG5vbi1uZWdhdGl2ZQorCSAqIGludGVnZXIgaWYgdGhlIGNoYXJhY3RlciBjb250YWlucyBhIGJyYW5jaCBsaW5lLiAgVGhlIHZhbHVlIG9mCisJICogdGhlIGludGVnZXIgaW5kaWNhdGVzIHRoZSB0YXJnZXQgcG9zaXRpb24gZm9yIHRoaXMgYnJhbmNoIGxpbmUuCisJICogKEkuZS4sIHRoaXMgYXJyYXkgbWFwcyB0aGUgY3VycmVudCBjb2x1bW4gcG9zaXRpb25zIHRvIHRoZWlyCisJICogZGVzaXJlZCBwb3NpdGlvbnMuKQorCSAqCisJICogVGhlIG1heGltdW0gY2FwYWNpdHkgb2YgdGhpcyBhcnJheSBpcyBhbHdheXMKKwkgKiBzaXplb2YoaW50KSAqIDIgKiBjb2x1bW5fY2FwYWNpdHkuCisJICovCisJaW50ICptYXBwaW5nOworCS8qCisJICogQSB0ZW1wb3JhcnkgYXJyYXkgZm9yIGNvbXB1dGluZyB0aGUgbmV4dCBtYXBwaW5nIHN0YXRlCisJICogd2hpbGUgd2UgYXJlIG91dHB1dHRpbmcgYSBtYXBwaW5nIGxpbmUuICBUaGlzIGlzIHN0b3JlZCBhcyBwYXJ0CisJICogb2YgdGhlIGdpdF9ncmFwaCBzaW1wbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldworCSAqIHRlbXBvcmFyeSBhcnJheSBlYWNoIHRpbWUgd2UgaGF2ZSB0byBvdXRwdXQgYSBjb2xsYXBzaW5nIGxpbmUuCisJICovCisJaW50ICpuZXdfbWFwcGluZzsKKwkvKgorCSAqIFRoZSBjdXJyZW50IGRlZmF1bHQgY29sdW1uIGNvbG9yIGJlaW5nIHVzZWQuICBUaGlzIGlzCisJICogc3RvcmVkIGFzIGFuIGluZGV4IGludG8gdGhlIGFycmF5IGNvbHVtbl9jb2xvcnMuCisJICovCisJdW5zaWduZWQgc2hvcnQgZGVmYXVsdF9jb2x1bW5fY29sb3I7Cit9OworCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqZGlmZl9vdXRwdXRfcHJlZml4X2NhbGxiYWNrKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCA9IGRhdGE7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgbXNnYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlhc3NlcnQob3B0KTsKKwlhc3NlcnQoZ3JhcGgpOworCisJb3B0LT5vdXRwdXRfcHJlZml4X2xlbmd0aCA9IGdyYXBoLT53aWR0aDsKKwlzdHJidWZfcmVzZXQoJm1zZ2J1Zik7CisJZ3JhcGhfcGFkZGluZ19saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwlyZXR1cm4gJm1zZ2J1ZjsKK30KKworc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGhfaW5pdChzdHJ1Y3QgcmV2X2luZm8gKm9wdCkKK3sKKwlzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBnaXRfZ3JhcGgpKTsKKworCWlmICghY29sdW1uX2NvbG9ycykKKwkJZ3JhcGhfc2V0X2NvbHVtbl9jb2xvcnMoY29sdW1uX2NvbG9yc19hbnNpLAorCQkJCQljb2x1bW5fY29sb3JzX2Fuc2lfbWF4KTsKKworCWdyYXBoLT5jb21taXQgPSBOVUxMOworCWdyYXBoLT5yZXZzID0gb3B0OworCWdyYXBoLT5udW1fcGFyZW50cyA9IDA7CisJZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPSAwOworCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1BBRERJTkc7CisJZ3JhcGgtPnByZXZfc3RhdGUgPSBHUkFQSF9QQURESU5HOworCWdyYXBoLT5jb21taXRfaW5kZXggPSAwOworCWdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA9IDA7CisJZ3JhcGgtPm51bV9jb2x1bW5zID0gMDsKKwlncmFwaC0+bnVtX25ld19jb2x1bW5zID0gMDsKKwlncmFwaC0+bWFwcGluZ19zaXplID0gMDsKKwkvKgorCSAqIFN0YXJ0IHRoZSBjb2x1bW4gY29sb3IgYXQgdGhlIG1heGltdW0gdmFsdWUsIHNpbmNlIHdlJ2xsCisJICogYWx3YXlzIGluY3JlbWVudCBpdCBmb3IgdGhlIGZpcnN0IGNvbW1pdCB3ZSBvdXRwdXQuCisJICogVGhpcyB3YXkgd2Ugc3RhcnQgYXQgMCBmb3IgdGhlIGZpcnN0IGNvbW1pdC4KKwkgKi8KKwlncmFwaC0+ZGVmYXVsdF9jb2x1bW5fY29sb3IgPSBjb2x1bW5fY29sb3JzX21heCAtIDE7CisKKwkvKgorCSAqIEFsbG9jYXRlIGEgcmVhc29uYWJseSBsYXJnZSBkZWZhdWx0IG51bWJlciBvZiBjb2x1bW5zCisJICogV2UnbGwgYXV0b21hdGljYWxseSBncm93IGNvbHVtbnMgbGF0ZXIgaWYgd2UgbmVlZCBtb3JlIHJvb20uCisJICovCisJZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSA9IDMwOworCWdyYXBoLT5jb2x1bW5zID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbHVtbikgKgorCQkJCSBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlncmFwaC0+bmV3X2NvbHVtbnMgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29sdW1uKSAqCisJCQkJICAgICBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlncmFwaC0+bWFwcGluZyA9IHhtYWxsb2Moc2l6ZW9mKGludCkgKiAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJZ3JhcGgtPm5ld19tYXBwaW5nID0geG1hbGxvYyhzaXplb2YoaW50KSAqIDIgKiBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKworCS8qCisJICogVGhlIGRpZmYgb3V0cHV0IHByZWZpeCBjYWxsYmFjaywgd2l0aCB0aGlzIHdlIGNhbiBtYWtlCisJICogYWxsIHRoZSBkaWZmIG91dHB1dCB0byBhbGlnbiB3aXRoIHRoZSBncmFwaCBsaW5lcy4KKwkgKi8KKwlvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeCA9IGRpZmZfb3V0cHV0X3ByZWZpeF9jYWxsYmFjazsKKwlvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeF9kYXRhID0gZ3JhcGg7CisJb3B0LT5kaWZmb3B0Lm91dHB1dF9wcmVmaXhfbGVuZ3RoID0gMDsKKworCXJldHVybiBncmFwaDsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfdXBkYXRlX3N0YXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBlbnVtIGdyYXBoX3N0YXRlIHMpCit7CisJZ3JhcGgtPnByZXZfc3RhdGUgPSBncmFwaC0+c3RhdGU7CisJZ3JhcGgtPnN0YXRlID0gczsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfZW5zdXJlX2NhcGFjaXR5KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBpbnQgbnVtX2NvbHVtbnMpCit7CisJaWYgKGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgPj0gbnVtX2NvbHVtbnMpCisJCXJldHVybjsKKworCWRvIHsKKwkJZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSAqPSAyOworCX0gd2hpbGUgKGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgPCBudW1fY29sdW1ucyk7CisKKwlncmFwaC0+Y29sdW1ucyA9IHhyZWFsbG9jKGdyYXBoLT5jb2x1bW5zLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjb2x1bW4pICoKKwkJCQkgIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworCWdyYXBoLT5uZXdfY29sdW1ucyA9IHhyZWFsbG9jKGdyYXBoLT5uZXdfY29sdW1ucywKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGNvbHVtbikgKgorCQkJCSAgICAgIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworCWdyYXBoLT5tYXBwaW5nID0geHJlYWxsb2MoZ3JhcGgtPm1hcHBpbmcsCisJCQkJICBzaXplb2YoaW50KSAqIDIgKiBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlncmFwaC0+bmV3X21hcHBpbmcgPSB4cmVhbGxvYyhncmFwaC0+bmV3X21hcHBpbmcsCisJCQkJICAgICAgc2l6ZW9mKGludCkgKiAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgdGhlIGNvbW1pdCB3aWxsIGJlIHByaW50ZWQgaW4gdGhlIGdyYXBoIG91dHB1dCwKKyAqIGFuZCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBncmFwaF9pc19pbnRlcmVzdGluZyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCS8qCisJICogSWYgcmV2cy0+Ym91bmRhcnkgaXMgc2V0LCBjb21taXRzIHdob3NlIGNoaWxkcmVuIGhhdmUKKwkgKiBiZWVuIHNob3duIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcsIGV2ZW4gaWYgdGhleSBoYXZlIHRoZQorCSAqIFVOSU5URVJFU1RJTkcgb3IgVFJFRVNBTUUgZmxhZ3Mgc2V0LgorCSAqLworCWlmIChncmFwaC0+cmV2cyAmJiBncmFwaC0+cmV2cy0+Ym91bmRhcnkpIHsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ0hJTERfU0hPV04pCisJCQlyZXR1cm4gMTsKKwl9CisKKwkvKgorCSAqIE90aGVyd2lzZSwgdXNlIGdldF9jb21taXRfYWN0aW9uKCkgdG8gc2VlIGlmIHRoaXMgY29tbWl0IGlzCisJICogaW50ZXJlc3RpbmcKKwkgKi8KKwlyZXR1cm4gZ2V0X2NvbW1pdF9hY3Rpb24oZ3JhcGgtPnJldnMsIGNvbW1pdCkgPT0gY29tbWl0X3Nob3c7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKm5leHRfaW50ZXJlc3RpbmdfcGFyZW50KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkJICAgc3RydWN0IGNvbW1pdF9saXN0ICpvcmlnKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKworCS8qCisJICogSWYgcmV2cy0+Zmlyc3RfcGFyZW50X29ubHkgaXMgc2V0LCBvbmx5IHRoZSBmaXJzdAorCSAqIHBhcmVudCBpcyBpbnRlcmVzdGluZy4gIE5vbmUgb2YgdGhlIG90aGVycyBhcmUuCisJICovCisJaWYgKGdyYXBoLT5yZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFJldHVybiB0aGUgbmV4dCBpbnRlcmVzdGluZyBjb21taXQgYWZ0ZXIgb3JpZworCSAqLworCWZvciAobGlzdCA9IG9yaWctPm5leHQ7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCWlmIChncmFwaF9pc19pbnRlcmVzdGluZyhncmFwaCwgbGlzdC0+aXRlbSkpCisJCQlyZXR1cm4gbGlzdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGdyYXBoLT5jb21taXQtPnBhcmVudHM7CisKKwkvKgorCSAqIElmIHRoaXMgY29tbWl0IGhhcyBubyBwYXJlbnRzLCBpZ25vcmUgaXQKKwkgKi8KKwlpZiAoIXBhcmVudHMpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBJZiB0aGUgZmlyc3QgcGFyZW50IGlzIGludGVyZXN0aW5nLCByZXR1cm4gaXQKKwkgKi8KKwlpZiAoZ3JhcGhfaXNfaW50ZXJlc3RpbmcoZ3JhcGgsIHBhcmVudHMtPml0ZW0pKQorCQlyZXR1cm4gcGFyZW50czsKKworCS8qCisJICogT3RoZXJ3aXNlLCBjYWxsIG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KCkgdG8gZ2V0CisJICogdGhlIG5leHQgaW50ZXJlc3RpbmcgcGFyZW50CisJICovCisJcmV0dXJuIG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoLCBwYXJlbnRzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGdyYXBoX2dldF9jdXJyZW50X2NvbHVtbl9jb2xvcihjb25zdCBzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlpZiAoIXdhbnRfY29sb3IoZ3JhcGgtPnJldnMtPmRpZmZvcHQudXNlX2NvbG9yKSkKKwkJcmV0dXJuIGNvbHVtbl9jb2xvcnNfbWF4OworCXJldHVybiBncmFwaC0+ZGVmYXVsdF9jb2x1bW5fY29sb3I7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIGdyYXBoJ3MgZGVmYXVsdCBjb2x1bW4gY29sb3IuCisgKi8KK3N0YXRpYyB2b2lkIGdyYXBoX2luY3JlbWVudF9jb2x1bW5fY29sb3Ioc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJZ3JhcGgtPmRlZmF1bHRfY29sdW1uX2NvbG9yID0gKGdyYXBoLT5kZWZhdWx0X2NvbHVtbl9jb2xvciArIDEpICUKKwkJY29sdW1uX2NvbG9yc19tYXg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBncmFwaF9maW5kX2NvbW1pdF9jb2xvcihjb25zdCBzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlpZiAoZ3JhcGgtPmNvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkKKwkJCXJldHVybiBncmFwaC0+Y29sdW1uc1tpXS5jb2xvcjsKKwl9CisJcmV0dXJuIGdyYXBoX2dldF9jdXJyZW50X2NvbHVtbl9jb2xvcihncmFwaCk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJICBpbnQgKm1hcHBpbmdfaW5kZXgpCit7CisJaW50IGk7CisKKwkvKgorCSAqIElmIHRoZSBjb21taXQgaXMgYWxyZWFkeSBpbiB0aGUgbmV3X2NvbHVtbnMgbGlzdCwgd2UgZG9uJ3QgbmVlZCB0bworCSAqIGFkZCBpdC4gIEp1c3QgdXBkYXRlIHRoZSBtYXBwaW5nIGNvcnJlY3RseS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9uZXdfY29sdW1uczsgaSsrKSB7CisJCWlmIChncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkgeworCQkJZ3JhcGgtPm1hcHBpbmdbKm1hcHBpbmdfaW5kZXhdID0gaTsKKwkJCSptYXBwaW5nX2luZGV4ICs9IDI7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIFRoaXMgY29tbWl0IGlzbid0IGFscmVhZHkgaW4gbmV3X2NvbHVtbnMuICBBZGQgaXQuCisJICovCisJZ3JhcGgtPm5ld19jb2x1bW5zW2dyYXBoLT5udW1fbmV3X2NvbHVtbnNdLmNvbW1pdCA9IGNvbW1pdDsKKwlncmFwaC0+bmV3X2NvbHVtbnNbZ3JhcGgtPm51bV9uZXdfY29sdW1uc10uY29sb3IgPSBncmFwaF9maW5kX2NvbW1pdF9jb2xvcihncmFwaCwgY29tbWl0KTsKKwlncmFwaC0+bWFwcGluZ1sqbWFwcGluZ19pbmRleF0gPSBncmFwaC0+bnVtX25ld19jb2x1bW5zOworCSptYXBwaW5nX2luZGV4ICs9IDI7CisJZ3JhcGgtPm51bV9uZXdfY29sdW1ucysrOworfQorCitzdGF0aWMgdm9pZCBncmFwaF91cGRhdGVfd2lkdGgoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkgICAgICAgaW50IGlzX2NvbW1pdF9pbl9leGlzdGluZ19jb2x1bW5zKQoreworCS8qCisJICogQ29tcHV0ZSB0aGUgd2lkdGggbmVlZGVkIHRvIGRpc3BsYXkgdGhlIGdyYXBoIGZvciB0aGlzIGNvbW1pdC4KKwkgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHdpZHRoIG5lZWRlZCBmb3IgYW55IHJvdy4gIEFsbCBvdGhlciByb3dzCisJICogd2lsbCBiZSBwYWRkZWQgdG8gdGhpcyB3aWR0aC4KKwkgKgorCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSB3aWRlc3Qgcm93OgorCSAqIENvdW50IGVhY2ggZXhpc3RpbmcgY29sdW1uIChncmFwaC0+bnVtX2NvbHVtbnMpLCBhbmQgZWFjaCBuZXcKKwkgKiBjb2x1bW4gYWRkZWQgYnkgdGhpcyBjb21taXQuCisJICovCisJaW50IG1heF9jb2xzID0gZ3JhcGgtPm51bV9jb2x1bW5zICsgZ3JhcGgtPm51bV9wYXJlbnRzOworCisJLyoKKwkgKiBFdmVuIGlmIHRoZSBjdXJyZW50IGNvbW1pdCBoYXMgbm8gcGFyZW50cyB0byBiZSBwcmludGVkLCBpdAorCSAqIHN0aWxsIHRha2VzIHVwIGEgY29sdW1uIGZvciBpdHNlbGYuCisJICovCisJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA8IDEpCisJCW1heF9jb2xzKys7CisKKwkvKgorCSAqIFdlIGFkZGVkIGEgY29sdW1uIGZvciB0aGUgY3VycmVudCBjb21taXQgYXMgcGFydCBvZgorCSAqIGdyYXBoLT5udW1fcGFyZW50cy4gIElmIHRoZSBjdXJyZW50IGNvbW1pdCB3YXMgYWxyZWFkeSBpbgorCSAqIGdyYXBoLT5jb2x1bW5zLCB0aGVuIHdlIGhhdmUgZG91YmxlIGNvdW50ZWQgaXQuCisJICovCisJaWYgKGlzX2NvbW1pdF9pbl9leGlzdGluZ19jb2x1bW5zKQorCQltYXhfY29scy0tOworCisJLyoKKwkgKiBFYWNoIGNvbHVtbiB0YWtlcyB1cCAyIHNwYWNlcworCSAqLworCWdyYXBoLT53aWR0aCA9IG1heF9jb2xzICogMjsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfdXBkYXRlX2NvbHVtbnMoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisJc3RydWN0IGNvbHVtbiAqdG1wX2NvbHVtbnM7CisJaW50IG1heF9uZXdfY29sdW1uczsKKwlpbnQgbWFwcGluZ19pZHg7CisJaW50IGksIHNlZW5fdGhpcywgaXNfY29tbWl0X2luX2NvbHVtbnM7CisKKwkvKgorCSAqIFN3YXAgZ3JhcGgtPmNvbHVtbnMgd2l0aCBncmFwaC0+bmV3X2NvbHVtbnMKKwkgKiBncmFwaC0+Y29sdW1ucyBjb250YWlucyB0aGUgc3RhdGUgZm9yIHRoZSBwcmV2aW91cyBjb21taXQsCisJICogYW5kIG5ld19jb2x1bW5zIG5vdyBjb250YWlucyB0aGUgc3RhdGUgZm9yIG91ciBjb21taXQuCisJICoKKwkgKiBXZSdsbCByZS11c2UgdGhlIG9sZCBjb2x1bW5zIGFycmF5IGFzIHN0b3JhZ2UgdG8gY29tcHV0ZSB0aGUgbmV3CisJICogY29sdW1ucyBsaXN0IGZvciB0aGUgY29tbWl0IGFmdGVyIHRoaXMgb25lLgorCSAqLworCXRtcF9jb2x1bW5zID0gZ3JhcGgtPmNvbHVtbnM7CisJZ3JhcGgtPmNvbHVtbnMgPSBncmFwaC0+bmV3X2NvbHVtbnM7CisJZ3JhcGgtPm51bV9jb2x1bW5zID0gZ3JhcGgtPm51bV9uZXdfY29sdW1uczsKKworCWdyYXBoLT5uZXdfY29sdW1ucyA9IHRtcF9jb2x1bW5zOworCWdyYXBoLT5udW1fbmV3X2NvbHVtbnMgPSAwOworCisJLyoKKwkgKiBOb3cgdXBkYXRlIG5ld19jb2x1bW5zIGFuZCBtYXBwaW5nIHdpdGggdGhlIGluZm9ybWF0aW9uIGZvciB0aGUKKwkgKiBjb21taXQgYWZ0ZXIgdGhpcyBvbmUuCisJICoKKwkgKiBGaXJzdCwgbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvb20uICBBdCBtb3N0LCB0aGVyZSB3aWxsCisJICogYmUgZ3JhcGgtPm51bV9jb2x1bW5zICsgZ3JhcGgtPm51bV9wYXJlbnRzIGNvbHVtbnMgZm9yIHRoZSBuZXh0CisJICogY29tbWl0LgorCSAqLworCW1heF9uZXdfY29sdW1ucyA9IGdyYXBoLT5udW1fY29sdW1ucyArIGdyYXBoLT5udW1fcGFyZW50czsKKwlncmFwaF9lbnN1cmVfY2FwYWNpdHkoZ3JhcGgsIG1heF9uZXdfY29sdW1ucyk7CisKKwkvKgorCSAqIENsZWFyIG91dCBncmFwaC0+bWFwcGluZworCSAqLworCWdyYXBoLT5tYXBwaW5nX3NpemUgPSAyICogbWF4X25ld19jb2x1bW5zOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspCisJCWdyYXBoLT5tYXBwaW5nW2ldID0gLTE7CisKKwkvKgorCSAqIFBvcHVsYXRlIGdyYXBoLT5uZXdfY29sdW1ucyBhbmQgZ3JhcGgtPm1hcHBpbmcKKwkgKgorCSAqIFNvbWUgb2YgdGhlIHBhcmVudHMgb2YgdGhpcyBjb21taXQgbWF5IGFscmVhZHkgYmUgaW4KKwkgKiBncmFwaC0+Y29sdW1ucy4gIElmIHNvLCBncmFwaC0+bmV3X2NvbHVtbnMgc2hvdWxkIG9ubHkgY29udGFpbiBhCisJICogc2luZ2xlIGVudHJ5IGZvciBlYWNoIHN1Y2ggY29tbWl0LiAgZ3JhcGgtPm1hcHBpbmcgc2hvdWxkCisJICogY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBlYWNoIGN1cnJlbnQgYnJhbmNoIGxpbmUgaXMKKwkgKiBzdXBwb3NlZCB0byBlbmQgdXAgYWZ0ZXIgdGhlIGNvbGxhcHNpbmcgaXMgcGVyZm9ybWVkLgorCSAqLworCXNlZW5fdGhpcyA9IDA7CisJbWFwcGluZ19pZHggPSAwOworCWlzX2NvbW1pdF9pbl9jb2x1bW5zID0gMTsKKwlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQ7CisJCWlmIChpID09IGdyYXBoLT5udW1fY29sdW1ucykgeworCQkJaWYgKHNlZW5fdGhpcykKKwkJCQlicmVhazsKKwkJCWlzX2NvbW1pdF9pbl9jb2x1bW5zID0gMDsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29tbWl0OworCQl9IGVsc2UgeworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdDsKKwkJfQorCisJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCWludCBvbGRfbWFwcGluZ19pZHggPSBtYXBwaW5nX2lkeDsKKwkJCXNlZW5fdGhpcyA9IDE7CisJCQlncmFwaC0+Y29tbWl0X2luZGV4ID0gaTsKKwkJCWZvciAocGFyZW50ID0gZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoKTsKKwkJCSAgICAgcGFyZW50OworCQkJICAgICBwYXJlbnQgPSBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50KSkgeworCQkJCS8qCisJCQkJICogSWYgdGhpcyBpcyBhIG1lcmdlLCBvciB0aGUgc3RhcnQgb2YgYSBuZXcKKwkJCQkgKiBjaGlsZGxlc3MgY29sdW1uLCBpbmNyZW1lbnQgdGhlIGN1cnJlbnQKKwkJCQkgKiBjb2xvci4KKwkJCQkgKi8KKwkJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMSB8fAorCQkJCSAgICAhaXNfY29tbWl0X2luX2NvbHVtbnMpIHsKKwkJCQkJZ3JhcGhfaW5jcmVtZW50X2NvbHVtbl9jb2xvcihncmFwaCk7CisJCQkJfQorCQkJCWdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKGdyYXBoLAorCQkJCQkJCSAgICAgIHBhcmVudC0+aXRlbSwKKwkJCQkJCQkgICAgICAmbWFwcGluZ19pZHgpOworCQkJfQorCQkJLyoKKwkJCSAqIFdlIGFsd2F5cyBuZWVkIHRvIGluY3JlbWVudCBtYXBwaW5nX2lkeCBieSBhdAorCQkJICogbGVhc3QgMiwgZXZlbiBpZiBpdCBoYXMgbm8gaW50ZXJlc3RpbmcgcGFyZW50cy4KKwkJCSAqIFRoZSBjdXJyZW50IGNvbW1pdCBhbHdheXMgdGFrZXMgdXAgYXQgbGVhc3QgMgorCQkJICogc3BhY2VzLgorCQkJICovCisJCQlpZiAobWFwcGluZ19pZHggPT0gb2xkX21hcHBpbmdfaWR4KQorCQkJCW1hcHBpbmdfaWR4ICs9IDI7CisJCX0gZWxzZSB7CisJCQlncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhncmFwaCwgY29sX2NvbW1pdCwKKwkJCQkJCSAgICAgICZtYXBwaW5nX2lkeCk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNocmluayBtYXBwaW5nX3NpemUgdG8gYmUgdGhlIG1pbmltdW0gbmVjZXNzYXJ5CisJICovCisJd2hpbGUgKGdyYXBoLT5tYXBwaW5nX3NpemUgPiAxICYmCisJICAgICAgIGdyYXBoLT5tYXBwaW5nW2dyYXBoLT5tYXBwaW5nX3NpemUgLSAxXSA8IDApCisJCWdyYXBoLT5tYXBwaW5nX3NpemUtLTsKKworCS8qCisJICogQ29tcHV0ZSBncmFwaC0+d2lkdGggZm9yIHRoaXMgY29tbWl0CisJICovCisJZ3JhcGhfdXBkYXRlX3dpZHRoKGdyYXBoLCBpc19jb21taXRfaW5fY29sdW1ucyk7Cit9CisKK3ZvaWQgZ3JhcGhfdXBkYXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwkvKgorCSAqIFNldCB0aGUgbmV3IGNvbW1pdAorCSAqLworCWdyYXBoLT5jb21taXQgPSBjb21taXQ7CisKKwkvKgorCSAqIENvdW50IGhvdyBtYW55IGludGVyZXN0aW5nIHBhcmVudHMgdGhpcyBjb21taXQgaGFzCisJICovCisJZ3JhcGgtPm51bV9wYXJlbnRzID0gMDsKKwlmb3IgKHBhcmVudCA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CisJICAgICBwYXJlbnQ7CisJICAgICBwYXJlbnQgPSBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50KSkKKwl7CisJCWdyYXBoLT5udW1fcGFyZW50cysrOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIG9sZCBjb21taXRfaW5kZXggaW4gcHJldl9jb21taXRfaW5kZXguCisJICogZ3JhcGhfdXBkYXRlX2NvbHVtbnMoKSB3aWxsIHVwZGF0ZSBncmFwaC0+Y29tbWl0X2luZGV4IGZvciB0aGlzCisJICogY29tbWl0LgorCSAqLworCWdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA9IGdyYXBoLT5jb21taXRfaW5kZXg7CisKKwkvKgorCSAqIENhbGwgZ3JhcGhfdXBkYXRlX2NvbHVtbnMoKSB0byB1cGRhdGUKKwkgKiBjb2x1bW5zLCBuZXdfY29sdW1ucywgYW5kIG1hcHBpbmcuCisJICovCisJZ3JhcGhfdXBkYXRlX2NvbHVtbnMoZ3JhcGgpOworCisJZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPSAwOworCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlLgorCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBjYWxsIGdyYXBoX3VwZGF0ZV9zdGF0ZSgpIGhlcmUsIHNpbmNlCisJICogd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgZ3JhcGgtPnByZXZfc3RhdGUuICBObyBsaW5lIGZvcgorCSAqIGdyYXBoLT5zdGF0ZSB3YXMgZXZlciBwcmludGVkLgorCSAqCisJICogSWYgdGhlIHByZXZpb3VzIGNvbW1pdCBkaWRuJ3QgZ2V0IHRvIHRoZSBHUkFQSF9QQURESU5HIHN0YXRlLAorCSAqIGl0IG5ldmVyIGZpbmlzaGVkIGl0cyBvdXRwdXQuICBHb3RvIEdSQVBIX1NLSVAsIHRvIHByaW50IG91dAorCSAqIGEgbGluZSB0byBpbmRpY2F0ZSB0aGF0IHBvcnRpb24gb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCisJICoKKwkgKiBJZiB0aGVyZSBhcmUgMyBvciBtb3JlIHBhcmVudHMsIHdlIG1heSBuZWVkIHRvIHByaW50IGV4dHJhIHJvd3MKKwkgKiBiZWZvcmUgdGhlIGNvbW1pdCwgdG8gZXhwYW5kIHRoZSBicmFuY2ggbGluZXMgYXJvdW5kIGl0IGFuZCBtYWtlCisJICogcm9vbSBmb3IgaXQuICBXZSBuZWVkIHRvIGRvIHRoaXMgb25seSBpZiB0aGVyZSBpcyBhIGJyYW5jaCByb3cKKwkgKiAob3IgbW9yZSkgdG8gdGhlIHJpZ2h0IG9mIHRoaXMgY29tbWl0LgorCSAqCisJICogSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiAzIHBhcmVudHMsIHdlIGNhbiBpbW1lZGlhdGVseSBwcmludCB0aGUKKwkgKiBjb21taXQgbGluZS4KKwkgKi8KKwlpZiAoZ3JhcGgtPnN0YXRlICE9IEdSQVBIX1BBRERJTkcpCisJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1NLSVA7CisJZWxzZSBpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMgJiYKKwkJIGdyYXBoLT5jb21taXRfaW5kZXggPCAoZ3JhcGgtPm51bV9jb2x1bW5zIC0gMSkpCisJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1BSRV9DT01NSVQ7CisJZWxzZQorCQlncmFwaC0+c3RhdGUgPSBHUkFQSF9DT01NSVQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JhcGhfaXNfbWFwcGluZ19jb3JyZWN0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCWludCBpOworCisJLyoKKwkgKiBUaGUgbWFwcGluZyBpcyB1cCB0byBkYXRlIGlmIGVhY2ggZW50cnkgaXMgYXQgaXRzIHRhcmdldCwKKwkgKiBvciBpcyAxIGdyZWF0ZXIgdGhhbiBpdHMgdGFyZ2V0LgorCSAqIChJZiBpdCBpcyAxIGdyZWF0ZXIgdGhhbiB0aGUgdGFyZ2V0LCAnLycgd2lsbCBiZSBwcmludGVkLCBzbyBpdAorCSAqIHdpbGwgbG9vayBjb3JyZWN0IG9uIHRoZSBuZXh0IHJvdy4pCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykgeworCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm1hcHBpbmdbaV07CisJCWlmICh0YXJnZXQgPCAwKQorCQkJY29udGludWU7CisJCWlmICh0YXJnZXQgPT0gKGkgLyAyKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfcGFkX2hvcml6b250YWxseShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJICAgaW50IGNoYXJzX3dyaXR0ZW4pCit7CisJLyoKKwkgKiBBZGQgYWRkaXRpb25hbCBzcGFjZXMgdG8gdGhlIGVuZCBvZiB0aGUgc3RyYnVmLCBzbyB0aGF0IGFsbAorCSAqIGxpbmVzIGZvciBhIHBhcnRpY3VsYXIgY29tbWl0IGhhdmUgdGhlIHNhbWUgd2lkdGguCisJICoKKwkgKiBUaGlzIHdheSwgZmllbGRzIHByaW50ZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBncmFwaCB3aWxsIHJlbWFpbgorCSAqIGFsaWduZWQgZm9yIHRoZSBlbnRpcmUgY29tbWl0LgorCSAqLworCWludCBleHRyYTsKKwlpZiAoY2hhcnNfd3JpdHRlbiA+PSBncmFwaC0+d2lkdGgpCisJCXJldHVybjsKKworCWV4dHJhID0gZ3JhcGgtPndpZHRoIC0gY2hhcnNfd3JpdHRlbjsKKwlzdHJidWZfYWRkZihzYiwgIiUqcyIsIChpbnQpIGV4dHJhLCAiIik7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9wYWRkaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IGk7CisKKwkvKgorCSAqIFdlIGNvdWxkIGNvbmNlaXZhYmxlIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBjb21taXQKKwkgKiBpZiBvdXIgY2FsbGVyIGhhcyBhIGJ1ZywgYW5kIGludm9rZXMgZ3JhcGhfbmV4dF9saW5lKCkKKwkgKiBpbW1lZGlhdGVseSBhZnRlciBncmFwaF9pbml0KCksIHdpdGhvdXQgZmlyc3QgY2FsbGluZworCSAqIGdyYXBoX3VwZGF0ZSgpLiAgUmV0dXJuIHdpdGhvdXQgb3V0cHV0dGluZyBhbnl0aGluZyBpbiB0aGlzCisJICogY2FzZS4KKwkgKi8KKwlpZiAoIWdyYXBoLT5jb21taXQpCisJCXJldHVybjsKKworCS8qCisJICogT3V0cHV0IGEgcGFkZGluZyByb3csIHRoYXQgbGVhdmVzIGFsbCBicmFuY2ggbGluZXMgdW5jaGFuZ2VkCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7IGkrKykgeworCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2ldLCAnfCcpOworCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJfQorCisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGdyYXBoLT5udW1fbmV3X2NvbHVtbnMgKiAyKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3NraXBfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJLyoKKwkgKiBPdXRwdXQgYW4gZWxsaXBzaXMgdG8gaW5kaWNhdGUgdGhhdCBhIHBvcnRpb24KKwkgKiBvZiB0aGUgZ3JhcGggaXMgbWlzc2luZy4KKwkgKi8KKwlzdHJidWZfYWRkc3RyKHNiLCAiLi4uIik7CisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIDMpOworCisJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+PSAzICYmCisJICAgIGdyYXBoLT5jb21taXRfaW5kZXggPCAoZ3JhcGgtPm51bV9jb2x1bW5zIC0gMSkpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUFJFX0NPTU1JVCk7CisJZWxzZQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTU1JVCk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9wcmVfY29tbWl0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJCSBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgbnVtX2V4cGFuc2lvbl9yb3dzOworCWludCBpLCBzZWVuX3RoaXM7CisJaW50IGNoYXJzX3dyaXR0ZW47CisKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyBhIHJvdyB0aGF0IGluY3JlYXNlcyB0aGUgc3BhY2UgYXJvdW5kIGEgY29tbWl0CisJICogd2l0aCBtdWx0aXBsZSBwYXJlbnRzLCB0byBtYWtlIHJvb20gZm9yIGl0LiAgSXQgc2hvdWxkIG9ubHkgYmUKKwkgKiBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgMyBvciBtb3JlIHBhcmVudHMuCisJICoKKwkgKiBXZSBuZWVkIDIgZXh0cmEgcm93cyBmb3IgZXZlcnkgcGFyZW50IG92ZXIgMi4KKwkgKi8KKwlhc3NlcnQoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMpOworCW51bV9leHBhbnNpb25fcm93cyA9IChncmFwaC0+bnVtX3BhcmVudHMgLSAyKSAqIDI7CisKKwkvKgorCSAqIGdyYXBoLT5leHBhbnNpb25fcm93IHRyYWNrcyB0aGUgY3VycmVudCBleHBhbnNpb24gcm93IHdlIGFyZSBvbi4KKwkgKiBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIFswLCBudW1fZXhwYW5zaW9uX3Jvd3MgLSAxXQorCSAqLworCWFzc2VydCgwIDw9IGdyYXBoLT5leHBhbnNpb25fcm93ICYmCisJICAgICAgIGdyYXBoLT5leHBhbnNpb25fcm93IDwgbnVtX2V4cGFuc2lvbl9yb3dzKTsKKworCS8qCisJICogT3V0cHV0IHRoZSByb3cKKwkgKi8KKwlzZWVuX3RoaXMgPSAwOworCWNoYXJzX3dyaXR0ZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CisJCWlmIChjb2wtPmNvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQlzZWVuX3RoaXMgPSAxOworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJc3RyYnVmX2FkZGYoc2IsICIlKnMiLCBncmFwaC0+ZXhwYW5zaW9uX3JvdywgIiIpOworCQkJY2hhcnNfd3JpdHRlbiArPSAxICsgZ3JhcGgtPmV4cGFuc2lvbl9yb3c7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA9PSAwKSkgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHByZS1jb21taXQgb3V0cHV0LgorCQkJICogSWYgdGhlIHByZXZpb3VzIGNvbW1pdCB3YXMgYSBtZXJnZSBjb21taXQgYW5kCisJCQkgKiBlbmRlZCBpbiB0aGUgR1JBUEhfUE9TVF9NRVJHRSBzdGF0ZSwgYWxsIGJyYW5jaAorCQkJICogbGluZXMgYWZ0ZXIgZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4IHdlcmUKKwkJCSAqIHByaW50ZWQgYXMgIlwiIG9uIHRoZSBwcmV2aW91cyBsaW5lLiAgQ29udGludWUKKwkJCSAqIHRvIHByaW50IHRoZW0gYXMgIlwiIG9uIHRoaXMgbGluZS4gIE90aGVyd2lzZSwKKwkJCSAqIHByaW50IHRoZSBicmFuY2ggbGluZXMgYXMgInwiLgorCQkJICovCisJCQlpZiAoZ3JhcGgtPnByZXZfc3RhdGUgPT0gR1JBUEhfUE9TVF9NRVJHRSAmJgorCQkJICAgIGdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA8IGkpCisJCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnXFwnKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7CisJCQljaGFyc193cml0dGVuKys7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA+IDApKSB7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOworCQkJY2hhcnNfd3JpdHRlbisrOworCQl9IGVsc2UgeworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJY2hhcnNfd3JpdHRlbisrOworCQl9CisJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJY2hhcnNfd3JpdHRlbisrOworCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBjaGFyc193cml0dGVuKTsKKworCS8qCisJICogSW5jcmVtZW50IGdyYXBoLT5leHBhbnNpb25fcm93LAorCSAqIGFuZCBtb3ZlIHRvIHN0YXRlIEdSQVBIX0NPTU1JVCBpZiBuZWNlc3NhcnkKKwkgKi8KKwlncmFwaC0+ZXhwYW5zaW9uX3JvdysrOworCWlmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA+PSBudW1fZXhwYW5zaW9uX3Jvd3MpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09NTUlUKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9jaGFyKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwkvKgorCSAqIEZvciBib3VuZGFyeSBjb21taXRzLCBwcmludCAnbycKKwkgKiAoV2Ugc2hvdWxkIG9ubHkgc2VlIGJvdW5kYXJ5IGNvbW1pdHMgd2hlbiByZXZzLT5ib3VuZGFyeSBpcyBzZXQuKQorCSAqLworCWlmIChncmFwaC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBCT1VOREFSWSkgeworCQlhc3NlcnQoZ3JhcGgtPnJldnMtPmJvdW5kYXJ5KTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnbycpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBnZXRfcmV2aXNpb25fbWFyaygpIGhhbmRsZXMgYWxsIG90aGVyIGNhc2VzIHdpdGhvdXQgYXNzZXJ0KCkKKwkgKi8KKwlzdHJidWZfYWRkc3RyKHNiLCBnZXRfcmV2aXNpb25fbWFyayhncmFwaC0+cmV2cywgZ3JhcGgtPmNvbW1pdCkpOworfQorCisvKgorICogRHJhdyBhbiBvY3RvcHVzIG1lcmdlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4uCisgKi8KK3N0YXRpYyBpbnQgZ3JhcGhfZHJhd19vY3RvcHVzX21lcmdlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwkvKgorCSAqIEhlcmUgZGFzaGxlc3NfY29tbWl0cyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgcGFyZW50cworCSAqIHdoaWNoIGRvbid0IG5lZWQgdG8gaGF2ZSBkYXNoZXMgKGJlY2F1c2UgdGhlaXIgZWRnZXMgZml0CisJICogbmVhdGx5IHVuZGVyIHRoZSBjb21taXQpLgorCSAqLworCWNvbnN0IGludCBkYXNobGVzc19jb21taXRzID0gMjsKKwlpbnQgY29sX251bSwgaTsKKwlpbnQgbnVtX2Rhc2hlcyA9CisJCSgoZ3JhcGgtPm51bV9wYXJlbnRzIC0gZGFzaGxlc3NfY29tbWl0cykgKiAyKSAtIDE7CisJZm9yIChpID0gMDsgaSA8IG51bV9kYXNoZXM7IGkrKykgeworCQljb2xfbnVtID0gKGkgLyAyKSArIGRhc2hsZXNzX2NvbW1pdHM7CisJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbY29sX251bV0sICctJyk7CisJfQorCWNvbF9udW0gPSAoaSAvIDIpICsgZGFzaGxlc3NfY29tbWl0czsKKwlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2NvbF9udW1dLCAnLicpOworCXJldHVybiBudW1fZGFzaGVzICsgMTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgc2Vlbl90aGlzID0gMDsKKwlpbnQgaSwgY2hhcnNfd3JpdHRlbjsKKworCS8qCisJICogT3V0cHV0IHRoZSByb3cgY29udGFpbmluZyB0aGlzIGNvbW1pdAorCSAqIEl0ZXJhdGUgdXAgdG8gYW5kIGluY2x1ZGluZyBncmFwaC0+bnVtX2NvbHVtbnMsCisJICogc2luY2UgdGhlIGN1cnJlbnQgY29tbWl0IG1heSBub3QgYmUgaW4gYW55IG9mIHRoZSBleGlzdGluZworCSAqIGNvbHVtbnMuICAoVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGN1cnJlbnQgY29tbWl0IGRvZXNuJ3QgaGF2ZSBhbnkKKwkgKiBjaGlsZHJlbiB0aGF0IHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQuKQorCSAqLworCXNlZW5fdGhpcyA9IDA7CisJY2hhcnNfd3JpdHRlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8PSBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CisJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQ7CisJCWlmIChpID09IGdyYXBoLT5udW1fY29sdW1ucykgeworCQkJaWYgKHNlZW5fdGhpcykKKwkJCQlicmVhazsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29tbWl0OworCQl9IGVsc2UgeworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdDsKKwkJfQorCisJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCXNlZW5fdGhpcyA9IDE7CisJCQlncmFwaF9vdXRwdXRfY29tbWl0X2NoYXIoZ3JhcGgsIHNiKTsKKwkJCWNoYXJzX3dyaXR0ZW4rKzsKKworCQkJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+IDIpCisJCQkJY2hhcnNfd3JpdHRlbiArPSBncmFwaF9kcmF3X29jdG9wdXNfbWVyZ2UoZ3JhcGgsCisJCQkJCQkJCQkgIHNiKTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5udW1fcGFyZW50cyA+IDIpKSB7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOworCQkJY2hhcnNfd3JpdHRlbisrOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPm51bV9wYXJlbnRzID09IDIpKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBhIDItd2F5IG1lcmdlIGNvbW1pdC4KKwkJCSAqIFRoZXJlIGlzIG5vIEdSQVBIX1BSRV9DT01NSVQgc3RhZ2UgZm9yIDItd2F5CisJCQkgKiBtZXJnZXMsIHNvIHRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb2Ygb3V0cHV0CisJCQkgKiBmb3IgdGhpcyBjb21taXQuICBDaGVjayB0byBzZWUgd2hhdCB0aGUgcHJldmlvdXMKKwkJCSAqIGxpbmUgb2Ygb3V0cHV0IHdhcy4KKwkJCSAqCisJCQkgKiBJZiBpdCB3YXMgR1JBUEhfUE9TVF9NRVJHRSwgdGhlIGJyYW5jaCBsaW5lCisJCQkgKiBjb21pbmcgaW50byB0aGlzIGNvbW1pdCBtYXkgaGF2ZSBiZWVuICdcJywKKwkJCSAqIGFuZCBub3QgJ3wnIG9yICcvJy4gIElmIHNvLCBvdXRwdXQgdGhlIGJyYW5jaAorCQkJICogbGluZSBhcyAnXCcgb24gdGhpcyBsaW5lLCBpbnN0ZWFkIG9mICd8Jy4gIFRoaXMKKwkJCSAqIG1ha2VzIHRoZSBvdXRwdXQgbG9vayBuaWNlci4KKwkJCSAqLworCQkJaWYgKGdyYXBoLT5wcmV2X3N0YXRlID09IEdSQVBIX1BPU1RfTUVSR0UgJiYKKwkJCSAgICBncmFwaC0+cHJldl9jb21taXRfaW5kZXggPCBpKQorCQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ1xcJyk7CisJCQllbHNlCisJCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJY2hhcnNfd3JpdHRlbisrOworCQl9IGVsc2UgeworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJY2hhcnNfd3JpdHRlbisrOworCQl9CisJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJY2hhcnNfd3JpdHRlbisrOworCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBjaGFyc193cml0dGVuKTsKKworCS8qCisJICogVXBkYXRlIGdyYXBoLT5zdGF0ZQorCSAqLworCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPiAxKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BPU1RfTUVSR0UpOworCWVsc2UgaWYgKGdyYXBoX2lzX21hcHBpbmdfY29ycmVjdChncmFwaCkpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUEFERElORyk7CisJZWxzZQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTExBUFNJTkcpOworfQorCitzdGF0aWMgc3RydWN0IGNvbHVtbiAqZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9uZXdfY29sdW1uczsgaSsrKSB7CisJCWlmIChncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkKKwkJCXJldHVybiAmZ3JhcGgtPm5ld19jb2x1bW5zW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3Bvc3RfbWVyZ2VfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IHNlZW5fdGhpcyA9IDA7CisJaW50IGksIGosIGNoYXJzX3dyaXR0ZW47CisKKwkvKgorCSAqIE91dHB1dCB0aGUgcG9zdC1tZXJnZSByb3cKKwkgKi8KKwljaGFyc193cml0dGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+Y29sdW1uc1tpXTsKKwkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdDsKKwkJaWYgKGkgPT0gZ3JhcGgtPm51bV9jb2x1bW5zKSB7CisJCQlpZiAoc2Vlbl90aGlzKQorCQkJCWJyZWFrOworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb21taXQ7CisJCX0gZWxzZSB7CisJCQljb2xfY29tbWl0ID0gY29sLT5jb21taXQ7CisJCX0KKworCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQkvKgorCQkJICogU2luY2UgdGhlIGN1cnJlbnQgY29tbWl0IGlzIGEgbWVyZ2UgZmluZAorCQkJICogdGhlIGNvbHVtbnMgZm9yIHRoZSBwYXJlbnQgY29tbWl0cyBpbgorCQkJICogbmV3X2NvbHVtbnMgYW5kIHVzZSB0aG9zZSB0byBmb3JtYXQgdGhlCisJCQkgKiBlZGdlcy4KKwkJCSAqLworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gTlVMTDsKKwkJCXN0cnVjdCBjb2x1bW4gKnBhcl9jb2x1bW47CisJCQlzZWVuX3RoaXMgPSAxOworCQkJcGFyZW50cyA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CisJCQlhc3NlcnQocGFyZW50cyk7CisJCQlwYXJfY29sdW1uID0gZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChncmFwaCwgcGFyZW50cy0+aXRlbSk7CisJCQlhc3NlcnQocGFyX2NvbHVtbik7CisKKwkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIHBhcl9jb2x1bW4sICd8Jyk7CisJCQljaGFyc193cml0dGVuKys7CisJCQlmb3IgKGogPSAwOyBqIDwgZ3JhcGgtPm51bV9wYXJlbnRzIC0gMTsgaisrKSB7CisJCQkJcGFyZW50cyA9IG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoLCBwYXJlbnRzKTsKKwkJCQlhc3NlcnQocGFyZW50cyk7CisJCQkJcGFyX2NvbHVtbiA9IGZpbmRfbmV3X2NvbHVtbl9ieV9jb21taXQoZ3JhcGgsIHBhcmVudHMtPml0ZW0pOworCQkJCWFzc2VydChwYXJfY29sdW1uKTsKKwkJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBwYXJfY29sdW1uLCAnXFwnKTsKKwkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQl9CisJCQljaGFyc193cml0dGVuICs9IGogKiAyOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcykgeworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnXFwnKTsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCWNoYXJzX3dyaXR0ZW4gKz0gMjsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCWNoYXJzX3dyaXR0ZW4gKz0gMjsKKwkJfQorCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBjaGFyc193cml0dGVuKTsKKworCS8qCisJICogVXBkYXRlIGdyYXBoLT5zdGF0ZQorCSAqLworCWlmIChncmFwaF9pc19tYXBwaW5nX2NvcnJlY3QoZ3JhcGgpKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BBRERJTkcpOworCWVsc2UKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9DT0xMQVBTSU5HKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbGxhcHNpbmdfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IGk7CisJaW50ICp0bXBfbWFwcGluZzsKKwlzaG9ydCB1c2VkX2hvcml6b250YWwgPSAwOworCWludCBob3Jpem9udGFsX2VkZ2UgPSAtMTsKKwlpbnQgaG9yaXpvbnRhbF9lZGdlX3RhcmdldCA9IC0xOworCisJLyoKKwkgKiBDbGVhciBvdXQgdGhlIG5ld19tYXBwaW5nIGFycmF5CisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykKKwkJZ3JhcGgtPm5ld19tYXBwaW5nW2ldID0gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKSB7CisJCWludCB0YXJnZXQgPSBncmFwaC0+bWFwcGluZ1tpXTsKKwkJaWYgKHRhcmdldCA8IDApCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTaW5jZSB1cGRhdGVfY29sdW1ucygpIGFsd2F5cyBpbnNlcnRzIHRoZSBsZWZ0bW9zdAorCQkgKiBjb2x1bW4gZmlyc3QsIGVhY2ggYnJhbmNoJ3MgdGFyZ2V0IGxvY2F0aW9uIHNob3VsZAorCQkgKiBhbHdheXMgYmUgZWl0aGVyIGl0cyBjdXJyZW50IGxvY2F0aW9uIG9yIHRvIHRoZSBsZWZ0IG9mCisJCSAqIGl0cyBjdXJyZW50IGxvY2F0aW9uLgorCQkgKgorCQkgKiBXZSBuZXZlciBoYXZlIHRvIG1vdmUgYnJhbmNoZXMgdG8gdGhlIHJpZ2h0LiAgVGhpcyBtYWtlcworCQkgKiB0aGUgZ3JhcGggbXVjaCBtb3JlIGxlZ2libGUsIHNpbmNlIHdoZW5ldmVyIGJyYW5jaGVzCisJCSAqIGNyb3NzLCBvbmx5IG9uZSBpcyBtb3ZpbmcgZGlyZWN0aW9ucy4KKwkJICovCisJCWFzc2VydCh0YXJnZXQgKiAyIDw9IGkpOworCisJCWlmICh0YXJnZXQgKiAyID09IGkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGNvbHVtbiBpcyBhbHJlYWR5IGluIHRoZQorCQkJICogY29ycmVjdCBwbGFjZQorCQkJICovCisJCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2ldID09IC0xKTsKKwkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9IHRhcmdldDsKKwkJfSBlbHNlIGlmIChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdIDwgMCkgeworCQkJLyoKKwkJCSAqIE5vdGhpbmcgaXMgdG8gdGhlIGxlZnQuCisJCQkgKiBNb3ZlIHRvIHRoZSBsZWZ0IGJ5IG9uZQorCQkJICovCisJCQlncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID0gdGFyZ2V0OworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGlzbid0IGFscmVhZHkgYW4gZWRnZSBtb3ZpbmcgaG9yaXpvbnRhbGx5CisJCQkgKiBzZWxlY3QgdGhpcyBvbmUuCisJCQkgKi8KKwkJCWlmIChob3Jpem9udGFsX2VkZ2UgPT0gLTEpIHsKKwkJCQlpbnQgajsKKwkJCQlob3Jpem9udGFsX2VkZ2UgPSBpOworCQkJCWhvcml6b250YWxfZWRnZV90YXJnZXQgPSB0YXJnZXQ7CisJCQkJLyoKKwkJCQkgKiBUaGUgdmFyaWFibGUgdGFyZ2V0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ3JhcGgKKwkJCQkgKiBjb2x1bW4sIGFuZCB0aGVyZWZvcmUgdGFyZ2V0KjIrMyBpcyB0aGUKKwkJCQkgKiBhY3R1YWwgc2NyZWVuIGNvbHVtbiBvZiB0aGUgZmlyc3QgaG9yaXpvbnRhbAorCQkJCSAqIGxpbmUuCisJCQkJICovCisJCQkJZm9yIChqID0gKHRhcmdldCAqIDIpKzM7IGogPCAoaSAtIDIpOyBqICs9IDIpCisJCQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tqXSA9IHRhcmdldDsKKwkJCX0KKwkJfSBlbHNlIGlmIChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID09IHRhcmdldCkgeworCQkJLyoKKwkJCSAqIFRoZXJlIGlzIGEgYnJhbmNoIGxpbmUgdG8gb3VyIGxlZnQKKwkJCSAqIGFscmVhZHksIGFuZCBpdCBpcyBvdXIgdGFyZ2V0LiAgV2UKKwkJCSAqIGNvbWJpbmUgd2l0aCB0aGlzIGxpbmUsIHNpbmNlIHdlIHNoYXJlCisJCQkgKiB0aGUgc2FtZSBwYXJlbnQgY29tbWl0LgorCQkJICoKKwkJCSAqIFdlIGRvbid0IGhhdmUgdG8gYWRkIGFueXRoaW5nIHRvIHRoZQorCQkJICogb3V0cHV0IG9yIG5ld19tYXBwaW5nLCBzaW5jZSB0aGUKKwkJCSAqIGV4aXN0aW5nIGJyYW5jaCBsaW5lIGhhcyBhbHJlYWR5IHRha2VuCisJCQkgKiBjYXJlIG9mIGl0LgorCQkJICovCisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgYSBicmFuY2ggbGluZSB0byBvdXIgbGVmdCwKKwkJCSAqIGJ1dCBpdCBpc24ndCBvdXIgdGFyZ2V0LiAgV2UgbmVlZCB0bworCQkJICogY3Jvc3Mgb3ZlciBpdC4KKwkJCSAqCisJCQkgKiBUaGUgc3BhY2UganVzdCB0byB0aGUgbGVmdCBvZiB0aGlzCisJCQkgKiBicmFuY2ggc2hvdWxkIGFsd2F5cyBiZSBlbXB0eS4KKwkJCSAqCisJCQkgKiBUaGUgYnJhbmNoIHRvIHRoZSBsZWZ0IG9mIHRoYXQgc3BhY2UKKwkJCSAqIHNob3VsZCBiZSBvdXIgZXZlbnR1YWwgdGFyZ2V0LgorCQkJICovCisJCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA+IHRhcmdldCk7CisJCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAyXSA8IDApOworCQkJYXNzZXJ0KGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gM10gPT0gdGFyZ2V0KTsKKwkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMl0gPSB0YXJnZXQ7CisJCQkvKgorCQkJICogTWFyayB0aGlzIGJyYW5jaCBhcyB0aGUgaG9yaXpvbnRhbCBlZGdlIHRvCisJCQkgKiBwcmV2ZW50IGFueSBvdGhlciBlZGdlcyBmcm9tIG1vdmluZworCQkJICogaG9yaXpvbnRhbGx5LgorCQkJICovCisJCQlpZiAoaG9yaXpvbnRhbF9lZGdlID09IC0xKQorCQkJCWhvcml6b250YWxfZWRnZSA9IGk7CisJCX0KKwl9CisKKwkvKgorCSAqIFRoZSBuZXcgbWFwcGluZyBtYXkgYmUgMSBzbWFsbGVyIHRoYW4gdGhlIG9sZCBtYXBwaW5nCisJICovCisJaWYgKGdyYXBoLT5uZXdfbWFwcGluZ1tncmFwaC0+bWFwcGluZ19zaXplIC0gMV0gPCAwKQorCQlncmFwaC0+bWFwcGluZ19zaXplLS07CisKKwkvKgorCSAqIE91dHB1dCBvdXQgYSBsaW5lIGJhc2VkIG9uIHRoZSBuZXcgbWFwcGluZyBpbmZvCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykgeworCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm5ld19tYXBwaW5nW2ldOworCQlpZiAodGFyZ2V0IDwgMCkKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJZWxzZSBpZiAodGFyZ2V0ICogMiA9PSBpKQorCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnfCcpOworCQllbHNlIGlmICh0YXJnZXQgPT0gaG9yaXpvbnRhbF9lZGdlX3RhcmdldCAmJgorCQkJIGkgIT0gaG9yaXpvbnRhbF9lZGdlIC0gMSkgeworCQkJCS8qCisJCQkJICogU2V0IHRoZSBtYXBwaW5ncyBmb3IgYWxsIGJ1dCB0aGUKKwkJCQkgKiBmaXJzdCBzZWdtZW50IHRvIC0xIHNvIHRoYXQgdGhleQorCQkJCSAqIHdvbid0IGNvbnRpbnVlIGludG8gdGhlIG5leHQgbGluZS4KKwkJCQkgKi8KKwkJCQlpZiAoaSAhPSAodGFyZ2V0ICogMikrMykKKwkJCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2ldID0gLTE7CisJCQkJdXNlZF9ob3Jpem9udGFsID0gMTsKKwkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbdGFyZ2V0XSwgJ18nKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh1c2VkX2hvcml6b250YWwgJiYgaSA8IGhvcml6b250YWxfZWRnZSkKKwkJCQlncmFwaC0+bmV3X21hcHBpbmdbaV0gPSAtMTsKKwkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbdGFyZ2V0XSwgJy8nKTsKKworCQl9CisJfQorCisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGdyYXBoLT5tYXBwaW5nX3NpemUpOworCisJLyoKKwkgKiBTd2FwIG1hcHBpbmcgYW5kIG5ld19tYXBwaW5nCisJICovCisJdG1wX21hcHBpbmcgPSBncmFwaC0+bWFwcGluZzsKKwlncmFwaC0+bWFwcGluZyA9IGdyYXBoLT5uZXdfbWFwcGluZzsKKwlncmFwaC0+bmV3X21hcHBpbmcgPSB0bXBfbWFwcGluZzsKKworCS8qCisJICogSWYgZ3JhcGgtPm1hcHBpbmcgaW5kaWNhdGVzIHRoYXQgYWxsIG9mIHRoZSBicmFuY2ggbGluZXMKKwkgKiBhcmUgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbnMsIHdlIGFyZSBkb25lLgorCSAqIE90aGVyd2lzZSwgd2UgbmVlZCB0byBjb2xsYXBzZSBzb21lIGJyYW5jaCBsaW5lcyB0b2dldGhlci4KKwkgKi8KKwlpZiAoZ3JhcGhfaXNfbWFwcGluZ19jb3JyZWN0KGdyYXBoKSkKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9QQURESU5HKTsKK30KKworc3RhdGljIGludCBncmFwaF9uZXh0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCXN3aXRjaCAoZ3JhcGgtPnN0YXRlKSB7CisJY2FzZSBHUkFQSF9QQURESU5HOgorCQlncmFwaF9vdXRwdXRfcGFkZGluZ19saW5lKGdyYXBoLCBzYik7CisJCXJldHVybiAwOworCWNhc2UgR1JBUEhfU0tJUDoKKwkJZ3JhcGhfb3V0cHV0X3NraXBfbGluZShncmFwaCwgc2IpOworCQlyZXR1cm4gMDsKKwljYXNlIEdSQVBIX1BSRV9DT01NSVQ6CisJCWdyYXBoX291dHB1dF9wcmVfY29tbWl0X2xpbmUoZ3JhcGgsIHNiKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBHUkFQSF9DT01NSVQ6CisJCWdyYXBoX291dHB1dF9jb21taXRfbGluZShncmFwaCwgc2IpOworCQlyZXR1cm4gMTsKKwljYXNlIEdSQVBIX1BPU1RfTUVSR0U6CisJCWdyYXBoX291dHB1dF9wb3N0X21lcmdlX2xpbmUoZ3JhcGgsIHNiKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBHUkFQSF9DT0xMQVBTSU5HOgorCQlncmFwaF9vdXRwdXRfY29sbGFwc2luZ19saW5lKGdyYXBoLCBzYik7CisJCXJldHVybiAwOworCX0KKworCWFzc2VydCgwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfcGFkZGluZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgaSwgajsKKworCWlmIChncmFwaC0+c3RhdGUgIT0gR1JBUEhfQ09NTUlUKSB7CisJCWdyYXBoX25leHRfbGluZShncmFwaCwgc2IpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPdXRwdXQgdGhlIHJvdyBjb250YWluaW5nIHRoaXMgY29tbWl0CisJICogSXRlcmF0ZSB1cCB0byBhbmQgaW5jbHVkaW5nIGdyYXBoLT5udW1fY29sdW1ucywKKwkgKiBzaW5jZSB0aGUgY3VycmVudCBjb21taXQgbWF5IG5vdCBiZSBpbiBhbnkgb2YgdGhlIGV4aXN0aW5nCisJICogY29sdW1ucy4gIChUaGlzIGhhcHBlbnMgd2hlbiB0aGUgY3VycmVudCBjb21taXQgZG9lc24ndCBoYXZlIGFueQorCSAqIGNoaWxkcmVuIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZC4pCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+Y29sdW1uc1tpXTsKKwkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdCA9IGNvbC0+Y29tbWl0OworCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7CisKKwkJCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPCAzKQorCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCWVsc2UgeworCQkJCWludCBudW1fc3BhY2VzID0gKChncmFwaC0+bnVtX3BhcmVudHMgLSAyKSAqIDIpOworCQkJCWZvciAoaiA9IDA7IGogPCBudW1fc3BhY2VzOyBqKyspCisJCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJfQorCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBncmFwaC0+bnVtX2NvbHVtbnMpOworCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnByZXZfc3RhdGUgc2luY2Ugd2UgaGF2ZSBvdXRwdXQgYSBwYWRkaW5nIGxpbmUKKwkgKi8KKwlncmFwaC0+cHJldl9zdGF0ZSA9IEdSQVBIX1BBRERJTkc7Cit9CisKK2ludCBncmFwaF9pc19jb21taXRfZmluaXNoZWQoc3RydWN0IGdpdF9ncmFwaCBjb25zdCAqZ3JhcGgpCit7CisJcmV0dXJuIChncmFwaC0+c3RhdGUgPT0gR1JBUEhfUEFERElORyk7Cit9CisKK3ZvaWQgZ3JhcGhfc2hvd19jb21taXQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2didWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc2hvd25fY29tbWl0X2xpbmUgPSAwOworCisJaWYgKCFncmFwaCkKKwkJcmV0dXJuOworCisJd2hpbGUgKCFzaG93bl9jb21taXRfbGluZSkgeworCQlzaG93bl9jb21taXRfbGluZSA9IGdyYXBoX25leHRfbGluZShncmFwaCwgJm1zZ2J1Zik7CisJCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIHN0ZG91dCk7CisJCWlmICghc2hvd25fY29tbWl0X2xpbmUpCisJCQlwdXRjaGFyKCdcbicpOworCQlzdHJidWZfc2V0bGVuKCZtc2didWYsIDApOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOworfQorCit2b2lkIGdyYXBoX3Nob3dfb25lbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFncmFwaCkKKwkJcmV0dXJuOworCisJZ3JhcGhfbmV4dF9saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwlmd3JpdGUobXNnYnVmLmJ1Ziwgc2l6ZW9mKGNoYXIpLCBtc2didWYubGVuLCBzdGRvdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOworfQorCit2b2lkIGdyYXBoX3Nob3dfcGFkZGluZyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFncmFwaCkKKwkJcmV0dXJuOworCisJZ3JhcGhfcGFkZGluZ19saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwlmd3JpdGUobXNnYnVmLmJ1Ziwgc2l6ZW9mKGNoYXIpLCBtc2didWYubGVuLCBzdGRvdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOworfQorCitpbnQgZ3JhcGhfc2hvd19yZW1haW5kZXIoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2didWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc2hvd24gPSAwOworCisJaWYgKCFncmFwaCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKDs7KSB7CisJCWdyYXBoX25leHRfbGluZShncmFwaCwgJm1zZ2J1Zik7CisJCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIHN0ZG91dCk7CisJCXN0cmJ1Zl9zZXRsZW4oJm1zZ2J1ZiwgMCk7CisJCXNob3duID0gMTsKKworCQlpZiAoIWdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChncmFwaCkpCisJCQlwdXRjaGFyKCdcbicpOworCQllbHNlCisJCQlicmVhazsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7CisKKwlyZXR1cm4gc2hvd247Cit9CisKKworc3RhdGljIHZvaWQgZ3JhcGhfc2hvd19zdHJidWYoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgY29uc3QgKnNiKQoreworCWNoYXIgKnA7CisKKwlpZiAoIWdyYXBoKSB7CisJCWZ3cml0ZShzYi0+YnVmLCBzaXplb2YoY2hhciksIHNiLT5sZW4sIHN0ZG91dCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFByaW50IHRoZSBzdHJidWYgbGluZSBieSBsaW5lLAorCSAqIGFuZCBkaXNwbGF5IHRoZSBncmFwaCBpbmZvIGJlZm9yZSBlYWNoIGxpbmUgYnV0IHRoZSBmaXJzdC4KKwkgKi8KKwlwID0gc2ItPmJ1ZjsKKwl3aGlsZSAocCkgeworCQlzaXplX3QgbGVuOworCQljaGFyICpuZXh0X3AgPSBzdHJjaHIocCwgJ1xuJyk7CisJCWlmIChuZXh0X3ApIHsKKwkJCW5leHRfcCsrOworCQkJbGVuID0gbmV4dF9wIC0gcDsKKwkJfSBlbHNlIHsKKwkJCWxlbiA9IChzYi0+YnVmICsgc2ItPmxlbikgLSBwOworCQl9CisJCWZ3cml0ZShwLCBzaXplb2YoY2hhciksIGxlbiwgc3Rkb3V0KTsKKwkJaWYgKG5leHRfcCAmJiAqbmV4dF9wICE9ICdcMCcpCisJCQlncmFwaF9zaG93X29uZWxpbmUoZ3JhcGgpOworCQlwID0gbmV4dF9wOworCX0KK30KKwordm9pZCBncmFwaF9zaG93X2NvbW1pdF9tc2coc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYikKK3sKKwlpbnQgbmV3bGluZV90ZXJtaW5hdGVkOworCisJaWYgKCFncmFwaCkgeworCQkvKgorCQkgKiBJZiB0aGVyZSdzIG5vIGdyYXBoLCBqdXN0IHByaW50IHRoZSBtZXNzYWdlIGJ1ZmZlci4KKwkJICoKKwkJICogVGhlIG1lc3NhZ2UgYnVmZmVyIGZvciBDTUlUX0ZNVF9PTkVMSU5FIGFuZAorCQkgKiBDTUlUX0ZNVF9VU0VSRk9STUFUIGFyZSBhbHJlYWR5IG1pc3NpbmcgYSB0ZXJtaW5hdGluZworCQkgKiBuZXdsaW5lLiAgQWxsIG9mIHRoZSBvdGhlciBmb3JtYXRzIHNob3VsZCBoYXZlIGl0LgorCQkgKi8KKwkJZndyaXRlKHNiLT5idWYsIHNpemVvZihjaGFyKSwgc2ItPmxlbiwgc3Rkb3V0KTsKKwkJcmV0dXJuOworCX0KKworCW5ld2xpbmVfdGVybWluYXRlZCA9IChzYi0+bGVuICYmIHNiLT5idWZbc2ItPmxlbiAtIDFdID09ICdcbicpOworCisJLyoKKwkgKiBTaG93IHRoZSBjb21taXQgbWVzc2FnZQorCSAqLworCWdyYXBoX3Nob3dfc3RyYnVmKGdyYXBoLCBzYik7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgb3V0cHV0IG5lZWRlZCBmb3IgdGhpcyBjb21taXQsIHNob3cgaXQgbm93CisJICovCisJaWYgKCFncmFwaF9pc19jb21taXRfZmluaXNoZWQoZ3JhcGgpKSB7CisJCS8qCisJCSAqIElmIHNiIGRvZXNuJ3QgaGF2ZSBhIHRlcm1pbmF0aW5nIG5ld2xpbmUsIHByaW50IG9uZSBub3csCisJCSAqIHNvIHdlIGNhbiBzdGFydCB0aGUgcmVtYWluZGVyIG9mIHRoZSBncmFwaCBvdXRwdXQgb24gYQorCQkgKiBuZXcgbGluZS4KKwkJICovCisJCWlmICghbmV3bGluZV90ZXJtaW5hdGVkKQorCQkJcHV0Y2hhcignXG4nKTsKKworCQlncmFwaF9zaG93X3JlbWFpbmRlcihncmFwaCk7CisKKwkJLyoKKwkJICogSWYgc2IgZW5kcyB3aXRoIGEgbmV3bGluZSwgb3VyIG91dHB1dCBzaG91bGQgdG9vLgorCQkgKi8KKwkJaWYgKG5ld2xpbmVfdGVybWluYXRlZCkKKwkJCXB1dGNoYXIoJ1xuJyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZ3JhcGguaCBiL2dyYXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliMGY2NgotLS0gL2Rldi9udWxsCisrKyBiL2dyYXBoLmgKQEAgLTAsMCArMSw4MSBAQAorI2lmbmRlZiBHUkFQSF9ICisjZGVmaW5lIEdSQVBIX0gKKworLyogQSBncmFwaCBpcyBhIHBvaW50ZXIgdG8gdGhpcyBvcGFxdWUgc3RydWN0dXJlICovCitzdHJ1Y3QgZ2l0X2dyYXBoOworCisKKy8qCisgKiBDcmVhdGUgYSBuZXcgc3RydWN0IGdpdF9ncmFwaC4KKyAqLworc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGhfaW5pdChzdHJ1Y3QgcmV2X2luZm8gKm9wdCk7CisKKy8qCisgKiBVcGRhdGUgYSBnaXRfZ3JhcGggd2l0aCBhIG5ldyBjb21taXQuCisgKiBUaGlzIHdpbGwgY2F1c2UgdGhlIGdyYXBoIHRvIGJlZ2luIG91dHB1dHRpbmcgbGluZXMgZm9yIHRoZSBuZXcgY29tbWl0CisgKiB0aGUgbmV4dCB0aW1lIGdyYXBoX25leHRfbGluZSgpIGlzIGNhbGxlZC4KKyAqCisgKiBJZiBncmFwaF91cGRhdGUoKSBpcyBjYWxsZWQgYmVmb3JlIGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpIHJldHVybnMgMSwKKyAqIHRoZSBuZXh0IGNhbGwgdG8gZ3JhcGhfbmV4dF9saW5lKCkgd2lsbCBvdXRwdXQgYW4gZWxsaXBzaXMgKCIuLi4iKQorICogdG8gaW5kaWNhdGUgdGhhdCBhIHBvcnRpb24gb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCisgKi8KK3ZvaWQgZ3JhcGhfdXBkYXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCisvKgorICogRGV0ZXJtaW5lIGlmIGEgZ3JhcGggaGFzIGZpbmlzaGVkIG91dHB1dHRpbmcgbGluZXMgZm9yIHRoZSBjdXJyZW50CisgKiBjb21taXQuCisgKgorICogUmV0dXJucyAxIGlmIGdyYXBoX25leHRfbGluZSgpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZ2FpbiBiZWZvcmUKKyAqIGdyYXBoX3VwZGF0ZSgpIHNob3VsZCBiZSBjYWxsZWQuICBSZXR1cm5zIDAgaWYgbm8gbW9yZSBsaW5lcyBhcmUgbmVlZGVkCisgKiBmb3IgdGhpcyBjb21taXQuICBJZiAwIGlzIHJldHVybmVkLCBncmFwaF9uZXh0X2xpbmUoKSBtYXkgc3RpbGwgYmUKKyAqIGNhbGxlZCB3aXRob3V0IGNhbGxpbmcgZ3JhcGhfdXBkYXRlKCksIGFuZCBpdCB3aWxsIG1lcmVseSBvdXRwdXQKKyAqIGFwcHJvcHJpYXRlICJ2ZXJ0aWNhbCBwYWRkaW5nIiBpbiB0aGUgZ3JhcGguCisgKi8KK2ludCBncmFwaF9pc19jb21taXRfZmluaXNoZWQoc3RydWN0IGdpdF9ncmFwaCBjb25zdCAqZ3JhcGgpOworCisKKy8qCisgKiBncmFwaF9zaG93Xyo6IGhlbHBlciBmdW5jdGlvbnMgZm9yIHByaW50aW5nIHRvIHN0ZG91dAorICovCisKKworLyoKKyAqIElmIHRoZSBncmFwaCBpcyBub24tTlVMTCwgcHJpbnQgdGhlIGhpc3RvcnkgZ3JhcGggdG8gc3Rkb3V0LAorICogdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbGluZSBjb250YWluaW5nIHRoaXMgY29tbWl0LgorICogRG9lcyBub3QgcHJpbnQgYSB0ZXJtaW5hdGluZyBuZXdsaW5lIG9uIHRoZSBsYXN0IGxpbmUuCisgKi8KK3ZvaWQgZ3JhcGhfc2hvd19jb21taXQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBwcmludCBvbmUgbGluZSBvZiB0aGUgaGlzdG9yeSBncmFwaCB0byBzdGRvdXQuCisgKiBEb2VzIG5vdCBwcmludCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgb24gdGhlIGxhc3QgbGluZS4KKyAqLwordm9pZCBncmFwaF9zaG93X29uZWxpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBwcmludCBvbmUgbGluZSBvZiB2ZXJ0aWNhbCBncmFwaCBwYWRkaW5nIHRvCisgKiBzdGRvdXQuICBEb2VzIG5vdCBwcmludCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgb24gdGhlIGxhc3QgbGluZS4KKyAqLwordm9pZCBncmFwaF9zaG93X3BhZGRpbmcoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBwcmludCB0aGUgcmVzdCBvZiB0aGUgaGlzdG9yeSBncmFwaCBmb3IgdGhpcworICogY29tbWl0IHRvIHN0ZG91dC4gIERvZXMgbm90IHByaW50IGEgdGVybWluYXRpbmcgbmV3bGluZSBvbiB0aGUgbGFzdCBsaW5lLgorICovCitpbnQgZ3JhcGhfc2hvd19yZW1haW5kZXIoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogUHJpbnQgYSBjb21taXQgbWVzc2FnZSBzdHJidWYgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGdyYXBoIHRvIHN0ZG91dC4KKyAqCisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ3JhcGhfc2hvd19zdHJidWYoKSwgYnV0IGl0IGFsd2F5cyBwcmludHMgdGhlCisgKiByZW1haW5kZXIgb2YgdGhlIGdyYXBoLgorICoKKyAqIElmIHRoZSBzdHJidWYgZW5kcyB3aXRoIGEgbmV3bGluZSwgdGhlIG91dHB1dCBwcmludGVkIGJ5CisgKiBncmFwaF9zaG93X2NvbW1pdF9tc2coKSB3aWxsIGVuZCB3aXRoIGEgbmV3bGluZS4gIElmIHRoZSBzdHJidWYgaXMKKyAqIG1pc3NpbmcgYSB0ZXJtaW5hdGluZyBuZXdsaW5lIChpbmNsdWRpbmcgaWYgaXQgaXMgZW1wdHkpLCB0aGUgb3V0cHV0CisgKiBwcmludGVkIGJ5IGdyYXBoX3Nob3dfY29tbWl0X21zZygpIHdpbGwgYWxzbyBiZSBtaXNzaW5nIGEgdGVybWluYXRpbmcKKyAqIG5ld2xpbmUuCisgKi8KK3ZvaWQgZ3JhcGhfc2hvd19jb21taXRfbXNnKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYik7CisKKyNlbmRpZiAvKiBHUkFQSF9IICovCmRpZmYgLS1naXQgYS9ncmVwLmMgYi9ncmVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjNzc3NgotLS0gL2Rldi9udWxsCisrKyBiL2dyZXAuYwpAQCAtMCwwICsxLDE1MjAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImdyZXAuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorCitzdGF0aWMgaW50IGdyZXBfc291cmNlX2xvYWQoc3RydWN0IGdyZXBfc291cmNlICpncyk7CitzdGF0aWMgaW50IGdyZXBfc291cmNlX2lzX2JpbmFyeShzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKTsKKworCitzdGF0aWMgc3RydWN0IGdyZXBfcGF0ICpjcmVhdGVfZ3JlcF9wYXQoY29uc3QgY2hhciAqcGF0LCBzaXplX3QgcGF0bGVuLAorCQkJCQljb25zdCBjaGFyICpvcmlnaW4sIGludCBubywKKwkJCQkJZW51bSBncmVwX3BhdF90b2tlbiB0LAorCQkJCQllbnVtIGdyZXBfaGVhZGVyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCBncmVwX3BhdCAqcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpwKSk7CisJcC0+cGF0dGVybiA9IHhtZW1kdXB6KHBhdCwgcGF0bGVuKTsKKwlwLT5wYXR0ZXJubGVuID0gcGF0bGVuOworCXAtPm9yaWdpbiA9IG9yaWdpbjsKKwlwLT5ubyA9IG5vOworCXAtPnRva2VuID0gdDsKKwlwLT5maWVsZCA9IGZpZWxkOworCXJldHVybiBwOworfQorCitzdGF0aWMgdm9pZCBkb19hcHBlbmRfZ3JlcF9wYXQoc3RydWN0IGdyZXBfcGF0ICoqKnRhaWwsIHN0cnVjdCBncmVwX3BhdCAqcCkKK3sKKwkqKnRhaWwgPSBwOworCSp0YWlsID0gJnAtPm5leHQ7CisJcC0+bmV4dCA9IE5VTEw7CisKKwlzd2l0Y2ggKHAtPnRva2VuKSB7CisJY2FzZSBHUkVQX1BBVFRFUk46IC8qIGF0b20gKi8KKwljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOgorCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6CisJCWZvciAoOzspIHsKKwkJCXN0cnVjdCBncmVwX3BhdCAqbmV3X3BhdDsKKwkJCXNpemVfdCBsZW4gPSAwOworCQkJY2hhciAqY3AgPSBwLT5wYXR0ZXJuICsgcC0+cGF0dGVybmxlbiwgKm5sID0gTlVMTDsKKwkJCXdoaWxlICgrK2xlbiA8PSBwLT5wYXR0ZXJubGVuKSB7CisJCQkJaWYgKCooLS1jcCkgPT0gJ1xuJykgeworCQkJCQlubCA9IGNwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoIW5sKQorCQkJCWJyZWFrOworCQkJbmV3X3BhdCA9IGNyZWF0ZV9ncmVwX3BhdChubCArIDEsIGxlbiAtIDEsIHAtPm9yaWdpbiwKKwkJCQkJCSAgcC0+bm8sIHAtPnRva2VuLCBwLT5maWVsZCk7CisJCQluZXdfcGF0LT5uZXh0ID0gcC0+bmV4dDsKKwkJCWlmICghcC0+bmV4dCkKKwkJCQkqdGFpbCA9ICZuZXdfcGF0LT5uZXh0OworCQkJcC0+bmV4dCA9IG5ld19wYXQ7CisJCQkqbmwgPSAnXDAnOworCQkJcC0+cGF0dGVybmxlbiAtPSBsZW47CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIGFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKHN0cnVjdCBncmVwX29wdCAqb3B0LAorCQkJCWVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnAgPSBjcmVhdGVfZ3JlcF9wYXQocGF0LCBzdHJsZW4ocGF0KSwgImhlYWRlciIsIDAsCisJCQkJCSAgICAgR1JFUF9QQVRURVJOX0hFQUQsIGZpZWxkKTsKKwlpZiAoZmllbGQgPT0gR1JFUF9IRUFERVJfUkVGTE9HKQorCQlvcHQtPnVzZV9yZWZsb2dfZmlsdGVyID0gMTsKKwlkb19hcHBlbmRfZ3JlcF9wYXQoJm9wdC0+aGVhZGVyX3RhaWwsIHApOworfQorCit2b2lkIGFwcGVuZF9ncmVwX3BhdHRlcm4oc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKnBhdCwKKwkJCSBjb25zdCBjaGFyICpvcmlnaW4sIGludCBubywgZW51bSBncmVwX3BhdF90b2tlbiB0KQoreworCWFwcGVuZF9ncmVwX3BhdChvcHQsIHBhdCwgc3RybGVuKHBhdCksIG9yaWdpbiwgbm8sIHQpOworfQorCit2b2lkIGFwcGVuZF9ncmVwX3BhdChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqcGF0LCBzaXplX3QgcGF0bGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKm9yaWdpbiwgaW50IG5vLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwID0gY3JlYXRlX2dyZXBfcGF0KHBhdCwgcGF0bGVuLCBvcmlnaW4sIG5vLCB0LCAwKTsKKwlkb19hcHBlbmRfZ3JlcF9wYXQoJm9wdC0+cGF0dGVybl90YWlsLCBwKTsKK30KKworc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdF9kdXAoY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwYXQ7CisJc3RydWN0IGdyZXBfb3B0ICpyZXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3JlcF9vcHQpKTsKKwkqcmV0ID0gKm9wdDsKKworCXJldC0+cGF0dGVybl9saXN0ID0gTlVMTDsKKwlyZXQtPnBhdHRlcm5fdGFpbCA9ICZyZXQtPnBhdHRlcm5fbGlzdDsKKworCWZvcihwYXQgPSBvcHQtPnBhdHRlcm5fbGlzdDsgcGF0ICE9IE5VTEw7IHBhdCA9IHBhdC0+bmV4dCkKKwl7CisJCWlmKHBhdC0+dG9rZW4gPT0gR1JFUF9QQVRURVJOX0hFQUQpCisJCQlhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybihyZXQsIHBhdC0+ZmllbGQsCisJCQkJCQkgICBwYXQtPnBhdHRlcm4pOworCQllbHNlCisJCQlhcHBlbmRfZ3JlcF9wYXQocmV0LCBwYXQtPnBhdHRlcm4sIHBhdC0+cGF0dGVybmxlbiwKKwkJCQkJcGF0LT5vcmlnaW4sIHBhdC0+bm8sIHBhdC0+dG9rZW4pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGNvbXBpbGVfcmVnZXhwX2ZhaWxlZChjb25zdCBzdHJ1Y3QgZ3JlcF9wYXQgKnAsCisJCWNvbnN0IGNoYXIgKmVycm9yKQoreworCWNoYXIgd2hlcmVbMTAyNF07CisKKwlpZiAocC0+bm8pCisJCXNwcmludGYod2hlcmUsICJJbiAnJXMnIGF0ICVkLCAiLCBwLT5vcmlnaW4sIHAtPm5vKTsKKwllbHNlIGlmIChwLT5vcmlnaW4pCisJCXNwcmludGYod2hlcmUsICIlcywgIiwgcC0+b3JpZ2luKTsKKwllbHNlCisJCXdoZXJlWzBdID0gMDsKKworCWRpZSgiJXMnJXMnOiAlcyIsIHdoZXJlLCBwLT5wYXR0ZXJuLCBlcnJvcik7Cit9CisKKyNpZmRlZiBVU0VfTElCUENSRQorc3RhdGljIHZvaWQgY29tcGlsZV9wY3JlX3JlZ2V4cChzdHJ1Y3QgZ3JlcF9wYXQgKnAsIGNvbnN0IHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCWNvbnN0IGNoYXIgKmVycm9yOworCWludCBlcnJvZmZzZXQ7CisJaW50IG9wdGlvbnMgPSBQQ1JFX01VTFRJTElORTsKKworCWlmIChvcHQtPmlnbm9yZV9jYXNlKQorCQlvcHRpb25zIHw9IFBDUkVfQ0FTRUxFU1M7CisKKwlwLT5wY3JlX3JlZ2V4cCA9IHBjcmVfY29tcGlsZShwLT5wYXR0ZXJuLCBvcHRpb25zLCAmZXJyb3IsICZlcnJvZmZzZXQsCisJCQlOVUxMKTsKKwlpZiAoIXAtPnBjcmVfcmVnZXhwKQorCQljb21waWxlX3JlZ2V4cF9mYWlsZWQocCwgZXJyb3IpOworCisJcC0+cGNyZV9leHRyYV9pbmZvID0gcGNyZV9zdHVkeShwLT5wY3JlX3JlZ2V4cCwgMCwgJmVycm9yKTsKKwlpZiAoIXAtPnBjcmVfZXh0cmFfaW5mbyAmJiBlcnJvcikKKwkJZGllKCIlcyIsIGVycm9yKTsKK30KKworc3RhdGljIGludCBwY3JlbWF0Y2goc3RydWN0IGdyZXBfcGF0ICpwLCBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICplb2wsCisJCXJlZ21hdGNoX3QgKm1hdGNoLCBpbnQgZWZsYWdzKQoreworCWludCBvdmVjdG9yWzMwXSwgcmV0LCBmbGFncyA9IDA7CisKKwlpZiAoZWZsYWdzICYgUkVHX05PVEJPTCkKKwkJZmxhZ3MgfD0gUENSRV9OT1RCT0w7CisKKwlyZXQgPSBwY3JlX2V4ZWMocC0+cGNyZV9yZWdleHAsIHAtPnBjcmVfZXh0cmFfaW5mbywgbGluZSwgZW9sIC0gbGluZSwKKwkJCTAsIGZsYWdzLCBvdmVjdG9yLCBBUlJBWV9TSVpFKG92ZWN0b3IpKTsKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gUENSRV9FUlJPUl9OT01BVENIKQorCQlkaWUoInBjcmVfZXhlYyBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkIiwgcmV0KTsKKwlpZiAocmV0ID4gMCkgeworCQlyZXQgPSAwOworCQltYXRjaC0+cm1fc28gPSBvdmVjdG9yWzBdOworCQltYXRjaC0+cm1fZW8gPSBvdmVjdG9yWzFdOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcGNyZV9yZWdleHAoc3RydWN0IGdyZXBfcGF0ICpwKQoreworCXBjcmVfZnJlZShwLT5wY3JlX3JlZ2V4cCk7CisJcGNyZV9mcmVlKHAtPnBjcmVfZXh0cmFfaW5mbyk7Cit9CisjZWxzZSAvKiAhVVNFX0xJQlBDUkUgKi8KK3N0YXRpYyB2b2lkIGNvbXBpbGVfcGNyZV9yZWdleHAoc3RydWN0IGdyZXBfcGF0ICpwLCBjb25zdCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwlkaWUoImNhbm5vdCB1c2UgUGVybC1jb21wYXRpYmxlIHJlZ2V4ZXMgd2hlbiBub3QgY29tcGlsZWQgd2l0aCBVU0VfTElCUENSRSIpOworfQorCitzdGF0aWMgaW50IHBjcmVtYXRjaChzdHJ1Y3QgZ3JlcF9wYXQgKnAsIGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmVvbCwKKwkJcmVnbWF0Y2hfdCAqbWF0Y2gsIGludCBlZmxhZ3MpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcGNyZV9yZWdleHAoc3RydWN0IGdyZXBfcGF0ICpwKQoreworfQorI2VuZGlmIC8qICFVU0VfTElCUENSRSAqLworCitzdGF0aWMgaW50IGlzX2ZpeGVkKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4pCit7CisJc2l6ZV90IGk7CisKKwkvKiByZWdjb21wIGNhbm5vdCBhY2NlcHQgcGF0dGVybnMgd2l0aCBOVUxzIHNvIHdlCisJICogY29uc2lkZXIgYW55IHBhdHRlcm4gY29udGFpbmluZyBhIE5VTCBmaXhlZC4KKwkgKi8KKwlpZiAobWVtY2hyKHMsIDAsIGxlbikpCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChpc19yZWdleF9zcGVjaWFsKHNbaV0pKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBpbGVfcmVnZXhwKHN0cnVjdCBncmVwX3BhdCAqcCwgc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJaW50IGVycjsKKworCXAtPndvcmRfcmVnZXhwID0gb3B0LT53b3JkX3JlZ2V4cDsKKwlwLT5pZ25vcmVfY2FzZSA9IG9wdC0+aWdub3JlX2Nhc2U7CisKKwlpZiAob3B0LT5maXhlZCB8fCBpc19maXhlZChwLT5wYXR0ZXJuLCBwLT5wYXR0ZXJubGVuKSkKKwkJcC0+Zml4ZWQgPSAxOworCWVsc2UKKwkJcC0+Zml4ZWQgPSAwOworCisJaWYgKHAtPmZpeGVkKSB7CisJCWlmIChvcHQtPnJlZ2ZsYWdzICYgUkVHX0lDQVNFIHx8IHAtPmlnbm9yZV9jYXNlKQorCQkJcC0+a3dzID0ga3dzYWxsb2ModG9sb3dlcl90cmFuc190YmwpOworCQllbHNlCisJCQlwLT5rd3MgPSBrd3NhbGxvYyhOVUxMKTsKKwkJa3dzaW5jcihwLT5rd3MsIHAtPnBhdHRlcm4sIHAtPnBhdHRlcm5sZW4pOworCQlrd3NwcmVwKHAtPmt3cyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAob3B0LT5wY3JlKSB7CisJCWNvbXBpbGVfcGNyZV9yZWdleHAocCwgb3B0KTsKKwkJcmV0dXJuOworCX0KKworCWVyciA9IHJlZ2NvbXAoJnAtPnJlZ2V4cCwgcC0+cGF0dGVybiwgb3B0LT5yZWdmbGFncyk7CisJaWYgKGVycikgeworCQljaGFyIGVycmJ1ZlsxMDI0XTsKKwkJcmVnZXJyb3IoZXJyLCAmcC0+cmVnZXhwLCBlcnJidWYsIDEwMjQpOworCQlyZWdmcmVlKCZwLT5yZWdleHApOworCQljb21waWxlX3JlZ2V4cF9mYWlsZWQocCwgZXJyYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9leHByICpjb21waWxlX3BhdHRlcm5fb3Ioc3RydWN0IGdyZXBfcGF0ICoqKTsKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9leHByICpjb21waWxlX3BhdHRlcm5fYXRvbShzdHJ1Y3QgZ3JlcF9wYXQgKipsaXN0KQoreworCXN0cnVjdCBncmVwX3BhdCAqcDsKKwlzdHJ1Y3QgZ3JlcF9leHByICp4OworCisJcCA9ICpsaXN0OworCWlmICghcCkKKwkJcmV0dXJuIE5VTEw7CisJc3dpdGNoIChwLT50b2tlbikgeworCWNhc2UgR1JFUF9QQVRURVJOOiAvKiBhdG9tICovCisJY2FzZSBHUkVQX1BBVFRFUk5fSEVBRDoKKwljYXNlIEdSRVBfUEFUVEVSTl9CT0RZOgorCQl4ID0geGNhbGxvYygxLCBzaXplb2YgKHN0cnVjdCBncmVwX2V4cHIpKTsKKwkJeC0+bm9kZSA9IEdSRVBfTk9ERV9BVE9NOworCQl4LT51LmF0b20gPSBwOworCQkqbGlzdCA9IHAtPm5leHQ7CisJCXJldHVybiB4OworCWNhc2UgR1JFUF9PUEVOX1BBUkVOOgorCQkqbGlzdCA9IHAtPm5leHQ7CisJCXggPSBjb21waWxlX3BhdHRlcm5fb3IobGlzdCk7CisJCWlmICghKmxpc3QgfHwgKCpsaXN0KS0+dG9rZW4gIT0gR1JFUF9DTE9TRV9QQVJFTikKKwkJCWRpZSgidW5tYXRjaGVkIHBhcmVudGhlc2lzIik7CisJCSpsaXN0ID0gKCpsaXN0KS0+bmV4dDsKKwkJcmV0dXJuIHg7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGdyZXBfZXhwciAqY29tcGlsZV9wYXR0ZXJuX25vdChzdHJ1Y3QgZ3JlcF9wYXQgKipsaXN0KQoreworCXN0cnVjdCBncmVwX3BhdCAqcDsKKwlzdHJ1Y3QgZ3JlcF9leHByICp4OworCisJcCA9ICpsaXN0OworCWlmICghcCkKKwkJcmV0dXJuIE5VTEw7CisJc3dpdGNoIChwLT50b2tlbikgeworCWNhc2UgR1JFUF9OT1Q6CisJCWlmICghcC0+bmV4dCkKKwkJCWRpZSgiLS1ub3Qgbm90IGZvbGxvd2VkIGJ5IHBhdHRlcm4gZXhwcmVzc2lvbiIpOworCQkqbGlzdCA9IHAtPm5leHQ7CisJCXggPSB4Y2FsbG9jKDEsIHNpemVvZiAoc3RydWN0IGdyZXBfZXhwcikpOworCQl4LT5ub2RlID0gR1JFUF9OT0RFX05PVDsKKwkJeC0+dS51bmFyeSA9IGNvbXBpbGVfcGF0dGVybl9ub3QobGlzdCk7CisJCWlmICgheC0+dS51bmFyeSkKKwkJCWRpZSgiLS1ub3QgZm9sbG93ZWQgYnkgbm9uIHBhdHRlcm4gZXhwcmVzc2lvbiIpOworCQlyZXR1cm4geDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gY29tcGlsZV9wYXR0ZXJuX2F0b20obGlzdCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGdyZXBfZXhwciAqY29tcGlsZV9wYXR0ZXJuX2FuZChzdHJ1Y3QgZ3JlcF9wYXQgKipsaXN0KQoreworCXN0cnVjdCBncmVwX3BhdCAqcDsKKwlzdHJ1Y3QgZ3JlcF9leHByICp4LCAqeSwgKno7CisKKwl4ID0gY29tcGlsZV9wYXR0ZXJuX25vdChsaXN0KTsKKwlwID0gKmxpc3Q7CisJaWYgKHAgJiYgcC0+dG9rZW4gPT0gR1JFUF9BTkQpIHsKKwkJaWYgKCFwLT5uZXh0KQorCQkJZGllKCItLWFuZCBub3QgZm9sbG93ZWQgYnkgcGF0dGVybiBleHByZXNzaW9uIik7CisJCSpsaXN0ID0gcC0+bmV4dDsKKwkJeSA9IGNvbXBpbGVfcGF0dGVybl9hbmQobGlzdCk7CisJCWlmICgheSkKKwkJCWRpZSgiLS1hbmQgbm90IGZvbGxvd2VkIGJ5IHBhdHRlcm4gZXhwcmVzc2lvbiIpOworCQl6ID0geGNhbGxvYygxLCBzaXplb2YgKHN0cnVjdCBncmVwX2V4cHIpKTsKKwkJei0+bm9kZSA9IEdSRVBfTk9ERV9BTkQ7CisJCXotPnUuYmluYXJ5LmxlZnQgPSB4OworCQl6LT51LmJpbmFyeS5yaWdodCA9IHk7CisJCXJldHVybiB6OworCX0KKwlyZXR1cm4geDsKK30KKworc3RhdGljIHN0cnVjdCBncmVwX2V4cHIgKmNvbXBpbGVfcGF0dGVybl9vcihzdHJ1Y3QgZ3JlcF9wYXQgKipsaXN0KQoreworCXN0cnVjdCBncmVwX3BhdCAqcDsKKwlzdHJ1Y3QgZ3JlcF9leHByICp4LCAqeSwgKno7CisKKwl4ID0gY29tcGlsZV9wYXR0ZXJuX2FuZChsaXN0KTsKKwlwID0gKmxpc3Q7CisJaWYgKHggJiYgcCAmJiBwLT50b2tlbiAhPSBHUkVQX0NMT1NFX1BBUkVOKSB7CisJCXkgPSBjb21waWxlX3BhdHRlcm5fb3IobGlzdCk7CisJCWlmICgheSkKKwkJCWRpZSgibm90IGEgcGF0dGVybiBleHByZXNzaW9uICVzIiwgcC0+cGF0dGVybik7CisJCXogPSB4Y2FsbG9jKDEsIHNpemVvZiAoc3RydWN0IGdyZXBfZXhwcikpOworCQl6LT5ub2RlID0gR1JFUF9OT0RFX09SOworCQl6LT51LmJpbmFyeS5sZWZ0ID0geDsKKwkJei0+dS5iaW5hcnkucmlnaHQgPSB5OworCQlyZXR1cm4gejsKKwl9CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9leHByICpjb21waWxlX3BhdHRlcm5fZXhwcihzdHJ1Y3QgZ3JlcF9wYXQgKipsaXN0KQoreworCXJldHVybiBjb21waWxlX3BhdHRlcm5fb3IobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGluZGVudChpbnQgaW4pCit7CisJd2hpbGUgKGluLS0gPiAwKQorCQlmcHV0YygnICcsIHN0ZGVycik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfZ3JlcF9wYXQoc3RydWN0IGdyZXBfcGF0ICpwKQoreworCXN3aXRjaCAocC0+dG9rZW4pIHsKKwljYXNlIEdSRVBfQU5EOiBmcHJpbnRmKHN0ZGVyciwgIiphbmQqIik7IGJyZWFrOworCWNhc2UgR1JFUF9PUEVOX1BBUkVOOiBmcHJpbnRmKHN0ZGVyciwgIiooKiIpOyBicmVhazsKKwljYXNlIEdSRVBfQ0xPU0VfUEFSRU46IGZwcmludGYoc3RkZXJyLCAiKikqIik7IGJyZWFrOworCWNhc2UgR1JFUF9OT1Q6IGZwcmludGYoc3RkZXJyLCAiKm5vdCoiKTsgYnJlYWs7CisJY2FzZSBHUkVQX09SOiBmcHJpbnRmKHN0ZGVyciwgIipvcioiKTsgYnJlYWs7CisKKwljYXNlIEdSRVBfUEFUVEVSTjogZnByaW50ZihzdGRlcnIsICJwYXR0ZXJuIik7IGJyZWFrOworCWNhc2UgR1JFUF9QQVRURVJOX0hFQUQ6IGZwcmludGYoc3RkZXJyLCAicGF0dGVybl9oZWFkIik7IGJyZWFrOworCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6IGZwcmludGYoc3RkZXJyLCAicGF0dGVybl9ib2R5Iik7IGJyZWFrOworCX0KKworCXN3aXRjaCAocC0+dG9rZW4pIHsKKwlkZWZhdWx0OiBicmVhazsKKwljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOgorCQlmcHJpbnRmKHN0ZGVyciwgIjxoZWFkICVkPiIsIHAtPmZpZWxkKTsgYnJlYWs7CisJY2FzZSBHUkVQX1BBVFRFUk5fQk9EWToKKwkJZnByaW50ZihzdGRlcnIsICI8Ym9keT4iKTsgYnJlYWs7CisJfQorCXN3aXRjaCAocC0+dG9rZW4pIHsKKwlkZWZhdWx0OiBicmVhazsKKwljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOgorCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6CisJY2FzZSBHUkVQX1BBVFRFUk46CisJCWZwcmludGYoc3RkZXJyLCAiJS4qcyIsIChpbnQpcC0+cGF0dGVybmxlbiwgcC0+cGF0dGVybik7CisJCWJyZWFrOworCX0KKwlmcHV0YygnXG4nLCBzdGRlcnIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2dyZXBfZXhwcmVzc2lvbl8xKHN0cnVjdCBncmVwX2V4cHIgKngsIGludCBpbikKK3sKKwlpbmRlbnQoaW4pOworCXN3aXRjaCAoeC0+bm9kZSkgeworCWNhc2UgR1JFUF9OT0RFX1RSVUU6CisJCWZwcmludGYoc3RkZXJyLCAidHJ1ZVxuIik7CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX0FUT006CisJCWR1bXBfZ3JlcF9wYXQoeC0+dS5hdG9tKTsKKwkJYnJlYWs7CisJY2FzZSBHUkVQX05PREVfTk9UOgorCQlmcHJpbnRmKHN0ZGVyciwgIihub3RcbiIpOworCQlkdW1wX2dyZXBfZXhwcmVzc2lvbl8xKHgtPnUudW5hcnksIGluKzEpOworCQlpbmRlbnQoaW4pOworCQlmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9BTkQ6CisJCWZwcmludGYoc3RkZXJyLCAiKGFuZFxuIik7CisJCWR1bXBfZ3JlcF9leHByZXNzaW9uXzEoeC0+dS5iaW5hcnkubGVmdCwgaW4rMSk7CisJCWR1bXBfZ3JlcF9leHByZXNzaW9uXzEoeC0+dS5iaW5hcnkucmlnaHQsIGluKzEpOworCQlpbmRlbnQoaW4pOworCQlmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9PUjoKKwkJZnByaW50ZihzdGRlcnIsICIob3JcbiIpOworCQlkdW1wX2dyZXBfZXhwcmVzc2lvbl8xKHgtPnUuYmluYXJ5LmxlZnQsIGluKzEpOworCQlkdW1wX2dyZXBfZXhwcmVzc2lvbl8xKHgtPnUuYmluYXJ5LnJpZ2h0LCBpbisxKTsKKwkJaW5kZW50KGluKTsKKwkJZnByaW50ZihzdGRlcnIsICIpXG4iKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBkdW1wX2dyZXBfZXhwcmVzc2lvbihzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9leHByICp4ID0gb3B0LT5wYXR0ZXJuX2V4cHJlc3Npb247CisKKwlpZiAob3B0LT5hbGxfbWF0Y2gpCisJCWZwcmludGYoc3RkZXJyLCAiW2FsbC1tYXRjaF1cbiIpOworCWR1bXBfZ3JlcF9leHByZXNzaW9uXzEoeCwgMCk7CisJZmZsdXNoKE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGdyZXBfZXhwciAqZ3JlcF90cnVlX2V4cHIodm9pZCkKK3sKKwlzdHJ1Y3QgZ3JlcF9leHByICp6ID0geGNhbGxvYygxLCBzaXplb2YoKnopKTsKKwl6LT5ub2RlID0gR1JFUF9OT0RFX1RSVUU7CisJcmV0dXJuIHo7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9leHByICpncmVwX29yX2V4cHIoc3RydWN0IGdyZXBfZXhwciAqbGVmdCwgc3RydWN0IGdyZXBfZXhwciAqcmlnaHQpCit7CisJc3RydWN0IGdyZXBfZXhwciAqeiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp6KSk7CisJei0+bm9kZSA9IEdSRVBfTk9ERV9PUjsKKwl6LT51LmJpbmFyeS5sZWZ0ID0gbGVmdDsKKwl6LT51LmJpbmFyeS5yaWdodCA9IHJpZ2h0OworCXJldHVybiB6OworfQorCitzdGF0aWMgc3RydWN0IGdyZXBfZXhwciAqcHJlcF9oZWFkZXJfcGF0dGVybnMoc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCXN0cnVjdCBncmVwX2V4cHIgKmhlYWRlcl9leHByOworCXN0cnVjdCBncmVwX2V4cHIgKihoZWFkZXJfZ3JvdXBbR1JFUF9IRUFERVJfRklFTERfTUFYXSk7CisJZW51bSBncmVwX2hlYWRlcl9maWVsZCBmbGQ7CisKKwlpZiAoIW9wdC0+aGVhZGVyX2xpc3QpCisJCXJldHVybiBOVUxMOworCisJZm9yIChwID0gb3B0LT5oZWFkZXJfbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPnRva2VuICE9IEdSRVBfUEFUVEVSTl9IRUFEKQorCQkJZGllKCJidWc6IGEgbm9uLWhlYWRlciBwYXR0ZXJuIGluIGdyZXAgaGVhZGVyIGxpc3QuIik7CisJCWlmIChwLT5maWVsZCA8IDAgfHwgR1JFUF9IRUFERVJfRklFTERfTUFYIDw9IHAtPmZpZWxkKQorCQkJZGllKCJidWc6IHVua25vd24gaGVhZGVyIGZpZWxkICVkIiwgcC0+ZmllbGQpOworCQljb21waWxlX3JlZ2V4cChwLCBvcHQpOworCX0KKworCWZvciAoZmxkID0gMDsgZmxkIDwgR1JFUF9IRUFERVJfRklFTERfTUFYOyBmbGQrKykKKwkJaGVhZGVyX2dyb3VwW2ZsZF0gPSBOVUxMOworCisJZm9yIChwID0gb3B0LT5oZWFkZXJfbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGdyZXBfZXhwciAqaDsKKwkJc3RydWN0IGdyZXBfcGF0ICpwcCA9IHA7CisKKwkJaCA9IGNvbXBpbGVfcGF0dGVybl9hdG9tKCZwcCk7CisJCWlmICghaCB8fCBwcCAhPSBwLT5uZXh0KQorCQkJZGllKCJidWc6IG1hbGZvcm1lZCBoZWFkZXIgZXhwciIpOworCQlpZiAoIWhlYWRlcl9ncm91cFtwLT5maWVsZF0pIHsKKwkJCWhlYWRlcl9ncm91cFtwLT5maWVsZF0gPSBoOworCQkJY29udGludWU7CisJCX0KKwkJaGVhZGVyX2dyb3VwW3AtPmZpZWxkXSA9IGdyZXBfb3JfZXhwcihoLCBoZWFkZXJfZ3JvdXBbcC0+ZmllbGRdKTsKKwl9CisKKwloZWFkZXJfZXhwciA9IE5VTEw7CisKKwlmb3IgKGZsZCA9IDA7IGZsZCA8IEdSRVBfSEVBREVSX0ZJRUxEX01BWDsgZmxkKyspIHsKKwkJaWYgKCFoZWFkZXJfZ3JvdXBbZmxkXSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWhlYWRlcl9leHByKQorCQkJaGVhZGVyX2V4cHIgPSBncmVwX3RydWVfZXhwcigpOworCQloZWFkZXJfZXhwciA9IGdyZXBfb3JfZXhwcihoZWFkZXJfZ3JvdXBbZmxkXSwgaGVhZGVyX2V4cHIpOworCX0KKwlyZXR1cm4gaGVhZGVyX2V4cHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9leHByICpncmVwX3NwbGljZV9vcihzdHJ1Y3QgZ3JlcF9leHByICp4LCBzdHJ1Y3QgZ3JlcF9leHByICp5KQoreworCXN0cnVjdCBncmVwX2V4cHIgKnogPSB4OworCisJd2hpbGUgKHgpIHsKKwkJYXNzZXJ0KHgtPm5vZGUgPT0gR1JFUF9OT0RFX09SKTsKKwkJaWYgKHgtPnUuYmluYXJ5LnJpZ2h0ICYmCisJCSAgICB4LT51LmJpbmFyeS5yaWdodC0+bm9kZSA9PSBHUkVQX05PREVfVFJVRSkgeworCQkJeC0+dS5iaW5hcnkucmlnaHQgPSB5OworCQkJYnJlYWs7CisJCX0KKwkJeCA9IHgtPnUuYmluYXJ5LnJpZ2h0OworCX0KKwlyZXR1cm4gejsKK30KKworc3RhdGljIHZvaWQgY29tcGlsZV9ncmVwX3BhdHRlcm5zX3JlYWwoc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCXN0cnVjdCBncmVwX2V4cHIgKmhlYWRlcl9leHByID0gcHJlcF9oZWFkZXJfcGF0dGVybnMob3B0KTsKKworCWZvciAocCA9IG9wdC0+cGF0dGVybl9saXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzd2l0Y2ggKHAtPnRva2VuKSB7CisJCWNhc2UgR1JFUF9QQVRURVJOOiAvKiBhdG9tICovCisJCWNhc2UgR1JFUF9QQVRURVJOX0hFQUQ6CisJCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6CisJCQljb21waWxlX3JlZ2V4cChwLCBvcHQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlvcHQtPmV4dGVuZGVkID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKG9wdC0+YWxsX21hdGNoIHx8IGhlYWRlcl9leHByKQorCQlvcHQtPmV4dGVuZGVkID0gMTsKKwllbHNlIGlmICghb3B0LT5leHRlbmRlZCAmJiAhb3B0LT5kZWJ1ZykKKwkJcmV0dXJuOworCisJcCA9IG9wdC0+cGF0dGVybl9saXN0OworCWlmIChwKQorCQlvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbiA9IGNvbXBpbGVfcGF0dGVybl9leHByKCZwKTsKKwlpZiAocCkKKwkJZGllKCJpbmNvbXBsZXRlIHBhdHRlcm4gZXhwcmVzc2lvbjogJXMiLCBwLT5wYXR0ZXJuKTsKKworCWlmICghaGVhZGVyX2V4cHIpCisJCXJldHVybjsKKworCWlmICghb3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24pCisJCW9wdC0+cGF0dGVybl9leHByZXNzaW9uID0gaGVhZGVyX2V4cHI7CisJZWxzZSBpZiAob3B0LT5hbGxfbWF0Y2gpCisJCW9wdC0+cGF0dGVybl9leHByZXNzaW9uID0gZ3JlcF9zcGxpY2Vfb3IoaGVhZGVyX2V4cHIsCisJCQkJCQkJIG9wdC0+cGF0dGVybl9leHByZXNzaW9uKTsKKwllbHNlCisJCW9wdC0+cGF0dGVybl9leHByZXNzaW9uID0gZ3JlcF9vcl9leHByKG9wdC0+cGF0dGVybl9leHByZXNzaW9uLAorCQkJCQkJICAgICAgIGhlYWRlcl9leHByKTsKKwlvcHQtPmFsbF9tYXRjaCA9IDE7Cit9CisKK3ZvaWQgY29tcGlsZV9ncmVwX3BhdHRlcm5zKHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCWNvbXBpbGVfZ3JlcF9wYXR0ZXJuc19yZWFsKG9wdCk7CisJaWYgKG9wdC0+ZGVidWcpCisJCWR1bXBfZ3JlcF9leHByZXNzaW9uKG9wdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcGF0dGVybl9leHByKHN0cnVjdCBncmVwX2V4cHIgKngpCit7CisJc3dpdGNoICh4LT5ub2RlKSB7CisJY2FzZSBHUkVQX05PREVfVFJVRToKKwljYXNlIEdSRVBfTk9ERV9BVE9NOgorCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9OT1Q6CisJCWZyZWVfcGF0dGVybl9leHByKHgtPnUudW5hcnkpOworCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9BTkQ6CisJY2FzZSBHUkVQX05PREVfT1I6CisJCWZyZWVfcGF0dGVybl9leHByKHgtPnUuYmluYXJ5LmxlZnQpOworCQlmcmVlX3BhdHRlcm5fZXhwcih4LT51LmJpbmFyeS5yaWdodCk7CisJCWJyZWFrOworCX0KKwlmcmVlKHgpOworfQorCit2b2lkIGZyZWVfZ3JlcF9wYXR0ZXJucyhzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnAsICpuOworCisJZm9yIChwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7IHA7IHAgPSBuKSB7CisJCW4gPSBwLT5uZXh0OworCQlzd2l0Y2ggKHAtPnRva2VuKSB7CisJCWNhc2UgR1JFUF9QQVRURVJOOiAvKiBhdG9tICovCisJCWNhc2UgR1JFUF9QQVRURVJOX0hFQUQ6CisJCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6CisJCQlpZiAocC0+a3dzKQorCQkJCWt3c2ZyZWUocC0+a3dzKTsKKwkJCWVsc2UgaWYgKHAtPnBjcmVfcmVnZXhwKQorCQkJCWZyZWVfcGNyZV9yZWdleHAocCk7CisJCQllbHNlCisJCQkJcmVnZnJlZSgmcC0+cmVnZXhwKTsKKwkJCWZyZWUocC0+cGF0dGVybik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWZyZWUocCk7CisJfQorCisJaWYgKCFvcHQtPmV4dGVuZGVkKQorCQlyZXR1cm47CisJZnJlZV9wYXR0ZXJuX2V4cHIob3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24pOworfQorCitzdGF0aWMgY2hhciAqZW5kX29mX2xpbmUoY2hhciAqY3AsIHVuc2lnbmVkIGxvbmcgKmxlZnQpCit7CisJdW5zaWduZWQgbG9uZyBsID0gKmxlZnQ7CisJd2hpbGUgKGwgJiYgKmNwICE9ICdcbicpIHsKKwkJbC0tOworCQljcCsrOworCX0KKwkqbGVmdCA9IGw7CisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgaW50IHdvcmRfY2hhcihjaGFyIGNoKQoreworCXJldHVybiBpc2FsbnVtKGNoKSB8fCBjaCA9PSAnXyc7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dF9jb2xvcihzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsCisJCQkgY29uc3QgY2hhciAqY29sb3IpCit7CisJaWYgKHdhbnRfY29sb3Iob3B0LT5jb2xvcikgJiYgY29sb3IgJiYgY29sb3JbMF0pIHsKKwkJb3B0LT5vdXRwdXQob3B0LCBjb2xvciwgc3RybGVuKGNvbG9yKSk7CisJCW9wdC0+b3V0cHV0KG9wdCwgZGF0YSwgc2l6ZSk7CisJCW9wdC0+b3V0cHV0KG9wdCwgR0lUX0NPTE9SX1JFU0VULCBzdHJsZW4oR0lUX0NPTE9SX1JFU0VUKSk7CisJfSBlbHNlCisJCW9wdC0+b3V0cHV0KG9wdCwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dF9zZXAoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNoYXIgc2lnbikKK3sKKwlpZiAob3B0LT5udWxsX2ZvbGxvd2luZ19uYW1lKQorCQlvcHQtPm91dHB1dChvcHQsICJcMCIsIDEpOworCWVsc2UKKwkJb3V0cHV0X2NvbG9yKG9wdCwgJnNpZ24sIDEsIG9wdC0+Y29sb3Jfc2VwKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19uYW1lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lKQoreworCW91dHB1dF9jb2xvcihvcHQsIG5hbWUsIHN0cmxlbihuYW1lKSwgb3B0LT5jb2xvcl9maWxlbmFtZSk7CisJb3B0LT5vdXRwdXQob3B0LCBvcHQtPm51bGxfZm9sbG93aW5nX25hbWUgPyAiXDAiIDogIlxuIiwgMSk7Cit9CisKK3N0YXRpYyBpbnQgZml4bWF0Y2goc3RydWN0IGdyZXBfcGF0ICpwLCBjaGFyICpsaW5lLCBjaGFyICplb2wsCisJCSAgICByZWdtYXRjaF90ICptYXRjaCkKK3sKKwlzdHJ1Y3Qga3dzbWF0Y2gga3dzbTsKKwlzaXplX3Qgb2Zmc2V0ID0ga3dzZXhlYyhwLT5rd3MsIGxpbmUsIGVvbCAtIGxpbmUsICZrd3NtKTsKKwlpZiAob2Zmc2V0ID09IC0xKSB7CisJCW1hdGNoLT5ybV9zbyA9IG1hdGNoLT5ybV9lbyA9IC0xOworCQlyZXR1cm4gUkVHX05PTUFUQ0g7CisJfSBlbHNlIHsKKwkJbWF0Y2gtPnJtX3NvID0gb2Zmc2V0OworCQltYXRjaC0+cm1fZW8gPSBtYXRjaC0+cm1fc28gKyBrd3NtLnNpemVbMF07CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCByZWdtYXRjaChjb25zdCByZWdleF90ICpwcmVnLCBjaGFyICpsaW5lLCBjaGFyICplb2wsCisJCSAgICByZWdtYXRjaF90ICptYXRjaCwgaW50IGVmbGFncykKK3sKKyNpZmRlZiBSRUdfU1RBUlRFTkQKKwltYXRjaC0+cm1fc28gPSAwOworCW1hdGNoLT5ybV9lbyA9IGVvbCAtIGxpbmU7CisJZWZsYWdzIHw9IFJFR19TVEFSVEVORDsKKyNlbmRpZgorCXJldHVybiByZWdleGVjKHByZWcsIGxpbmUsIDEsIG1hdGNoLCBlZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHBhdG1hdGNoKHN0cnVjdCBncmVwX3BhdCAqcCwgY2hhciAqbGluZSwgY2hhciAqZW9sLAorCQkgICAgcmVnbWF0Y2hfdCAqbWF0Y2gsIGludCBlZmxhZ3MpCit7CisJaW50IGhpdDsKKworCWlmIChwLT5maXhlZCkKKwkJaGl0ID0gIWZpeG1hdGNoKHAsIGxpbmUsIGVvbCwgbWF0Y2gpOworCWVsc2UgaWYgKHAtPnBjcmVfcmVnZXhwKQorCQloaXQgPSAhcGNyZW1hdGNoKHAsIGxpbmUsIGVvbCwgbWF0Y2gsIGVmbGFncyk7CisJZWxzZQorCQloaXQgPSAhcmVnbWF0Y2goJnAtPnJlZ2V4cCwgbGluZSwgZW9sLCBtYXRjaCwgZWZsYWdzKTsKKworCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgc3RyaXBfdGltZXN0YW1wKGNoYXIgKmJvbCwgY2hhciAqKmVvbF9wKQoreworCWNoYXIgKmVvbCA9ICplb2xfcDsKKwlpbnQgY2g7CisKKwl3aGlsZSAoYm9sIDwgLS1lb2wpIHsKKwkJaWYgKCplb2wgIT0gJz4nKQorCQkJY29udGludWU7CisJCSplb2xfcCA9ICsrZW9sOworCQljaCA9ICplb2w7CisJCSplb2wgPSAnXDAnOworCQlyZXR1cm4gY2g7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICpmaWVsZDsKKwlzaXplX3QgbGVuOworfSBoZWFkZXJfZmllbGRbXSA9IHsKKwl7ICJhdXRob3IgIiwgNyB9LAorCXsgImNvbW1pdHRlciAiLCAxMCB9LAorCXsgInJlZmxvZyAiLCA3IH0sCit9OworCitzdGF0aWMgaW50IG1hdGNoX29uZV9wYXR0ZXJuKHN0cnVjdCBncmVwX3BhdCAqcCwgY2hhciAqYm9sLCBjaGFyICplb2wsCisJCQkgICAgIGVudW0gZ3JlcF9jb250ZXh0IGN0eCwKKwkJCSAgICAgcmVnbWF0Y2hfdCAqcG1hdGNoLCBpbnQgZWZsYWdzKQoreworCWludCBoaXQgPSAwOworCWludCBzYXZlZF9jaCA9IDA7CisJY29uc3QgY2hhciAqc3RhcnQgPSBib2w7CisKKwlpZiAoKHAtPnRva2VuICE9IEdSRVBfUEFUVEVSTikgJiYKKwkgICAgKChwLT50b2tlbiA9PSBHUkVQX1BBVFRFUk5fSEVBRCkgIT0gKGN0eCA9PSBHUkVQX0NPTlRFWFRfSEVBRCkpKQorCQlyZXR1cm4gMDsKKworCWlmIChwLT50b2tlbiA9PSBHUkVQX1BBVFRFUk5fSEVBRCkgeworCQljb25zdCBjaGFyICpmaWVsZDsKKwkJc2l6ZV90IGxlbjsKKwkJYXNzZXJ0KHAtPmZpZWxkIDwgQVJSQVlfU0laRShoZWFkZXJfZmllbGQpKTsKKwkJZmllbGQgPSBoZWFkZXJfZmllbGRbcC0+ZmllbGRdLmZpZWxkOworCQlsZW4gPSBoZWFkZXJfZmllbGRbcC0+ZmllbGRdLmxlbjsKKwkJaWYgKHN0cm5jbXAoYm9sLCBmaWVsZCwgbGVuKSkKKwkJCXJldHVybiAwOworCQlib2wgKz0gbGVuOworCQlzd2l0Y2ggKHAtPmZpZWxkKSB7CisJCWNhc2UgR1JFUF9IRUFERVJfQVVUSE9SOgorCQljYXNlIEdSRVBfSEVBREVSX0NPTU1JVFRFUjoKKwkJCXNhdmVkX2NoID0gc3RyaXBfdGltZXN0YW1wKGJvbCwgJmVvbCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisgYWdhaW46CisJaGl0ID0gcGF0bWF0Y2gocCwgYm9sLCBlb2wsIHBtYXRjaCwgZWZsYWdzKTsKKworCWlmIChoaXQgJiYgcC0+d29yZF9yZWdleHApIHsKKwkJaWYgKChwbWF0Y2hbMF0ucm1fc28gPCAwKSB8fAorCQkgICAgKGVvbCAtIGJvbCkgPCBwbWF0Y2hbMF0ucm1fc28gfHwKKwkJICAgIChwbWF0Y2hbMF0ucm1fZW8gPCAwKSB8fAorCQkgICAgKGVvbCAtIGJvbCkgPCBwbWF0Y2hbMF0ucm1fZW8pCisJCQlkaWUoInJlZ2V4cCByZXR1cm5lZCBub25zZW5zZSIpOworCisJCS8qIE1hdGNoIGJlZ2lubmluZyBtdXN0IGJlIGVpdGhlciBiZWdpbm5pbmcgb2YgdGhlCisJCSAqIGxpbmUsIG9yIGF0IHdvcmQgYm91bmRhcnkgKGkuZS4gdGhlIGxhc3QgY2hhciBtdXN0CisJCSAqIG5vdCBiZSBhIHdvcmQgY2hhcikuICBTaW1pbGFybHksIG1hdGNoIGVuZCBtdXN0IGJlCisJCSAqIGVpdGhlciBlbmQgb2YgdGhlIGxpbmUsIG9yIGF0IHdvcmQgYm91bmRhcnkKKwkJICogKGkuZS4gdGhlIG5leHQgY2hhciBtdXN0IG5vdCBiZSBhIHdvcmQgY2hhcikuCisJCSAqLworCQlpZiAoICgocG1hdGNoWzBdLnJtX3NvID09IDApIHx8CisJCSAgICAgICF3b3JkX2NoYXIoYm9sW3BtYXRjaFswXS5ybV9zby0xXSkpICYmCisJCSAgICAgKChwbWF0Y2hbMF0ucm1fZW8gPT0gKGVvbC1ib2wpKSB8fAorCQkgICAgICAhd29yZF9jaGFyKGJvbFtwbWF0Y2hbMF0ucm1fZW9dKSkgKQorCQkJOworCQllbHNlCisJCQloaXQgPSAwOworCisJCS8qIFdvcmRzIGNvbnNpc3Qgb2YgYXQgbGVhc3Qgb25lIGNoYXJhY3Rlci4gKi8KKwkJaWYgKHBtYXRjaC0+cm1fc28gPT0gcG1hdGNoLT5ybV9lbykKKwkJCWhpdCA9IDA7CisKKwkJaWYgKCFoaXQgJiYgcG1hdGNoWzBdLnJtX3NvICsgYm9sICsgMSA8IGVvbCkgeworCQkJLyogVGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSBtYXRjaCBvbiB0aGUKKwkJCSAqIGxpbmUsIGFuZCB0aGUgZmlyc3QgbWF0Y2ggbWlnaHQgbm90IGJlCisJCQkgKiBzdHJpY3Qgd29yZCBtYXRjaC4gIEJ1dCBsYXRlciBvbmVzIGNvdWxkIGJlIQorCQkJICogRm9yd2FyZCB0byB0aGUgbmV4dCBwb3NzaWJsZSBzdGFydCwgaS5lLiB0aGUKKwkJCSAqIG5leHQgcG9zaXRpb24gZm9sbG93aW5nIGEgbm9uLXdvcmQgY2hhci4KKwkJCSAqLworCQkJYm9sID0gcG1hdGNoWzBdLnJtX3NvICsgYm9sICsgMTsKKwkJCXdoaWxlICh3b3JkX2NoYXIoYm9sWy0xXSkgJiYgYm9sIDwgZW9sKQorCQkJCWJvbCsrOworCQkJZWZsYWdzIHw9IFJFR19OT1RCT0w7CisJCQlpZiAoYm9sIDwgZW9sKQorCQkJCWdvdG8gYWdhaW47CisJCX0KKwl9CisJaWYgKHAtPnRva2VuID09IEdSRVBfUEFUVEVSTl9IRUFEICYmIHNhdmVkX2NoKQorCQkqZW9sID0gc2F2ZWRfY2g7CisJaWYgKGhpdCkgeworCQlwbWF0Y2hbMF0ucm1fc28gKz0gYm9sIC0gc3RhcnQ7CisJCXBtYXRjaFswXS5ybV9lbyArPSBib2wgLSBzdGFydDsKKwl9CisJcmV0dXJuIGhpdDsKK30KKworc3RhdGljIGludCBtYXRjaF9leHByX2V2YWwoc3RydWN0IGdyZXBfZXhwciAqeCwgY2hhciAqYm9sLCBjaGFyICplb2wsCisJCQkgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsIGludCBjb2xsZWN0X2hpdHMpCit7CisJaW50IGggPSAwOworCXJlZ21hdGNoX3QgbWF0Y2g7CisKKwlpZiAoIXgpCisJCWRpZSgiTm90IGEgdmFsaWQgZ3JlcCBleHByZXNzaW9uIik7CisJc3dpdGNoICh4LT5ub2RlKSB7CisJY2FzZSBHUkVQX05PREVfVFJVRToKKwkJaCA9IDE7CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX0FUT006CisJCWggPSBtYXRjaF9vbmVfcGF0dGVybih4LT51LmF0b20sIGJvbCwgZW9sLCBjdHgsICZtYXRjaCwgMCk7CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX05PVDoKKwkJaCA9ICFtYXRjaF9leHByX2V2YWwoeC0+dS51bmFyeSwgYm9sLCBlb2wsIGN0eCwgMCk7CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX0FORDoKKwkJaWYgKCFtYXRjaF9leHByX2V2YWwoeC0+dS5iaW5hcnkubGVmdCwgYm9sLCBlb2wsIGN0eCwgMCkpCisJCQlyZXR1cm4gMDsKKwkJaCA9IG1hdGNoX2V4cHJfZXZhbCh4LT51LmJpbmFyeS5yaWdodCwgYm9sLCBlb2wsIGN0eCwgMCk7CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX09SOgorCQlpZiAoIWNvbGxlY3RfaGl0cykKKwkJCXJldHVybiAobWF0Y2hfZXhwcl9ldmFsKHgtPnUuYmluYXJ5LmxlZnQsCisJCQkJCQlib2wsIGVvbCwgY3R4LCAwKSB8fAorCQkJCW1hdGNoX2V4cHJfZXZhbCh4LT51LmJpbmFyeS5yaWdodCwKKwkJCQkJCWJvbCwgZW9sLCBjdHgsIDApKTsKKwkJaCA9IG1hdGNoX2V4cHJfZXZhbCh4LT51LmJpbmFyeS5sZWZ0LCBib2wsIGVvbCwgY3R4LCAwKTsKKwkJeC0+dS5iaW5hcnkubGVmdC0+aGl0IHw9IGg7CisJCWggfD0gbWF0Y2hfZXhwcl9ldmFsKHgtPnUuYmluYXJ5LnJpZ2h0LCBib2wsIGVvbCwgY3R4LCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJVbmV4cGVjdGVkIG5vZGUgdHlwZSAoaW50ZXJuYWwgZXJyb3IpICVkIiwgeC0+bm9kZSk7CisJfQorCWlmIChjb2xsZWN0X2hpdHMpCisJCXgtPmhpdCB8PSBoOworCXJldHVybiBoOworfQorCitzdGF0aWMgaW50IG1hdGNoX2V4cHIoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNoYXIgKmJvbCwgY2hhciAqZW9sLAorCQkgICAgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsIGludCBjb2xsZWN0X2hpdHMpCit7CisJc3RydWN0IGdyZXBfZXhwciAqeCA9IG9wdC0+cGF0dGVybl9leHByZXNzaW9uOworCXJldHVybiBtYXRjaF9leHByX2V2YWwoeCwgYm9sLCBlb2wsIGN0eCwgY29sbGVjdF9oaXRzKTsKK30KKworc3RhdGljIGludCBtYXRjaF9saW5lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpib2wsIGNoYXIgKmVvbCwKKwkJICAgICAgZW51bSBncmVwX2NvbnRleHQgY3R4LCBpbnQgY29sbGVjdF9oaXRzKQoreworCXN0cnVjdCBncmVwX3BhdCAqcDsKKwlyZWdtYXRjaF90IG1hdGNoOworCisJaWYgKG9wdC0+ZXh0ZW5kZWQpCisJCXJldHVybiBtYXRjaF9leHByKG9wdCwgYm9sLCBlb2wsIGN0eCwgY29sbGVjdF9oaXRzKTsKKworCS8qIHdlIGRvIG5vdCBjYWxsIHdpdGggY29sbGVjdF9oaXRzIHdpdGhvdXQgYmVpbmcgZXh0ZW5kZWQgKi8KKwlmb3IgKHAgPSBvcHQtPnBhdHRlcm5fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKG1hdGNoX29uZV9wYXR0ZXJuKHAsIGJvbCwgZW9sLCBjdHgsICZtYXRjaCwgMCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfbmV4dF9wYXR0ZXJuKHN0cnVjdCBncmVwX3BhdCAqcCwgY2hhciAqYm9sLCBjaGFyICplb2wsCisJCQkgICAgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsCisJCQkgICAgICByZWdtYXRjaF90ICpwbWF0Y2gsIGludCBlZmxhZ3MpCit7CisJcmVnbWF0Y2hfdCBtYXRjaDsKKworCWlmICghbWF0Y2hfb25lX3BhdHRlcm4ocCwgYm9sLCBlb2wsIGN0eCwgJm1hdGNoLCBlZmxhZ3MpKQorCQlyZXR1cm4gMDsKKwlpZiAobWF0Y2gucm1fc28gPCAwIHx8IG1hdGNoLnJtX2VvIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKHBtYXRjaC0+cm1fc28gPj0gMCAmJiBwbWF0Y2gtPnJtX2VvID49IDApIHsKKwkJaWYgKG1hdGNoLnJtX3NvID4gcG1hdGNoLT5ybV9zbykKKwkJCXJldHVybiAxOworCQlpZiAobWF0Y2gucm1fc28gPT0gcG1hdGNoLT5ybV9zbyAmJiBtYXRjaC5ybV9lbyA8IHBtYXRjaC0+cm1fZW8pCisJCQlyZXR1cm4gMTsKKwl9CisJcG1hdGNoLT5ybV9zbyA9IG1hdGNoLnJtX3NvOworCXBtYXRjaC0+cm1fZW8gPSBtYXRjaC5ybV9lbzsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuZXh0X21hdGNoKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpib2wsIGNoYXIgKmVvbCwKKwkJICAgICAgZW51bSBncmVwX2NvbnRleHQgY3R4LCByZWdtYXRjaF90ICpwbWF0Y2gsIGludCBlZmxhZ3MpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCWludCBoaXQgPSAwOworCisJcG1hdGNoLT5ybV9zbyA9IHBtYXRjaC0+cm1fZW8gPSAtMTsKKwlpZiAoYm9sIDwgZW9sKSB7CisJCWZvciAocCA9IG9wdC0+cGF0dGVybl9saXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3dpdGNoIChwLT50b2tlbikgeworCQkJY2FzZSBHUkVQX1BBVFRFUk46IC8qIGF0b20gKi8KKwkJCWNhc2UgR1JFUF9QQVRURVJOX0hFQUQ6CisJCQljYXNlIEdSRVBfUEFUVEVSTl9CT0RZOgorCQkJCWhpdCB8PSBtYXRjaF9uZXh0X3BhdHRlcm4ocCwgYm9sLCBlb2wsIGN0eCwKKwkJCQkJCQkgIHBtYXRjaCwgZWZsYWdzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGhpdDsKK30KKworc3RhdGljIHZvaWQgc2hvd19saW5lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpib2wsIGNoYXIgKmVvbCwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG5vLCBjaGFyIHNpZ24pCit7CisJaW50IHJlc3QgPSBlb2wgLSBib2w7CisJY2hhciAqbGluZV9jb2xvciA9IE5VTEw7CisKKwlpZiAob3B0LT5maWxlX2JyZWFrICYmIG9wdC0+bGFzdF9zaG93biA9PSAwKSB7CisJCWlmIChvcHQtPnNob3dfaHVua19tYXJrKQorCQkJb3B0LT5vdXRwdXQob3B0LCAiXG4iLCAxKTsKKwl9IGVsc2UgaWYgKG9wdC0+cHJlX2NvbnRleHQgfHwgb3B0LT5wb3N0X2NvbnRleHQgfHwgb3B0LT5mdW5jYm9keSkgeworCQlpZiAob3B0LT5sYXN0X3Nob3duID09IDApIHsKKwkJCWlmIChvcHQtPnNob3dfaHVua19tYXJrKSB7CisJCQkJb3V0cHV0X2NvbG9yKG9wdCwgIi0tIiwgMiwgb3B0LT5jb2xvcl9zZXApOworCQkJCW9wdC0+b3V0cHV0KG9wdCwgIlxuIiwgMSk7CisJCQl9CisJCX0gZWxzZSBpZiAobG5vID4gb3B0LT5sYXN0X3Nob3duICsgMSkgeworCQkJb3V0cHV0X2NvbG9yKG9wdCwgIi0tIiwgMiwgb3B0LT5jb2xvcl9zZXApOworCQkJb3B0LT5vdXRwdXQob3B0LCAiXG4iLCAxKTsKKwkJfQorCX0KKwlpZiAob3B0LT5oZWFkaW5nICYmIG9wdC0+bGFzdF9zaG93biA9PSAwKSB7CisJCW91dHB1dF9jb2xvcihvcHQsIG5hbWUsIHN0cmxlbihuYW1lKSwgb3B0LT5jb2xvcl9maWxlbmFtZSk7CisJCW9wdC0+b3V0cHV0KG9wdCwgIlxuIiwgMSk7CisJfQorCW9wdC0+bGFzdF9zaG93biA9IGxubzsKKworCWlmICghb3B0LT5oZWFkaW5nICYmIG9wdC0+cGF0aG5hbWUpIHsKKwkJb3V0cHV0X2NvbG9yKG9wdCwgbmFtZSwgc3RybGVuKG5hbWUpLCBvcHQtPmNvbG9yX2ZpbGVuYW1lKTsKKwkJb3V0cHV0X3NlcChvcHQsIHNpZ24pOworCX0KKwlpZiAob3B0LT5saW5lbnVtKSB7CisJCWNoYXIgYnVmWzMyXTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgbG5vKTsKKwkJb3V0cHV0X2NvbG9yKG9wdCwgYnVmLCBzdHJsZW4oYnVmKSwgb3B0LT5jb2xvcl9saW5lbm8pOworCQlvdXRwdXRfc2VwKG9wdCwgc2lnbik7CisJfQorCWlmIChvcHQtPmNvbG9yKSB7CisJCXJlZ21hdGNoX3QgbWF0Y2g7CisJCWVudW0gZ3JlcF9jb250ZXh0IGN0eCA9IEdSRVBfQ09OVEVYVF9CT0RZOworCQlpbnQgY2ggPSAqZW9sOworCQlpbnQgZWZsYWdzID0gMDsKKworCQlpZiAoc2lnbiA9PSAnOicpCisJCQlsaW5lX2NvbG9yID0gb3B0LT5jb2xvcl9zZWxlY3RlZDsKKwkJZWxzZSBpZiAoc2lnbiA9PSAnLScpCisJCQlsaW5lX2NvbG9yID0gb3B0LT5jb2xvcl9jb250ZXh0OworCQllbHNlIGlmIChzaWduID09ICc9JykKKwkJCWxpbmVfY29sb3IgPSBvcHQtPmNvbG9yX2Z1bmN0aW9uOworCQkqZW9sID0gJ1wwJzsKKwkJd2hpbGUgKG5leHRfbWF0Y2gob3B0LCBib2wsIGVvbCwgY3R4LCAmbWF0Y2gsIGVmbGFncykpIHsKKwkJCWlmIChtYXRjaC5ybV9zbyA9PSBtYXRjaC5ybV9lbykKKwkJCQlicmVhazsKKworCQkJb3V0cHV0X2NvbG9yKG9wdCwgYm9sLCBtYXRjaC5ybV9zbywgbGluZV9jb2xvcik7CisJCQlvdXRwdXRfY29sb3Iob3B0LCBib2wgKyBtYXRjaC5ybV9zbywKKwkJCQkgICAgIG1hdGNoLnJtX2VvIC0gbWF0Y2gucm1fc28sCisJCQkJICAgICBvcHQtPmNvbG9yX21hdGNoKTsKKwkJCWJvbCArPSBtYXRjaC5ybV9lbzsKKwkJCXJlc3QgLT0gbWF0Y2gucm1fZW87CisJCQllZmxhZ3MgPSBSRUdfTk9UQk9MOworCQl9CisJCSplb2wgPSBjaDsKKwl9CisJb3V0cHV0X2NvbG9yKG9wdCwgYm9sLCByZXN0LCBsaW5lX2NvbG9yKTsKKwlvcHQtPm91dHB1dChvcHQsICJcbiIsIDEpOworfQorCisjaWZuZGVmIE5PX1BUSFJFQURTCitpbnQgZ3JlcF91c2VfbG9ja3M7CisKKy8qCisgKiBUaGlzIGxvY2sgcHJvdGVjdHMgYWNjZXNzIHRvIHRoZSBnaXRhdHRyaWJ1dGVzIG1hY2hpbmVyeSwgd2hpY2ggaXMKKyAqIG5vdCB0aHJlYWQtc2FmZS4KKyAqLworcHRocmVhZF9tdXRleF90IGdyZXBfYXR0cl9tdXRleDsKKworc3RhdGljIGlubGluZSB2b2lkIGdyZXBfYXR0cl9sb2NrKHZvaWQpCit7CisJaWYgKGdyZXBfdXNlX2xvY2tzKQorCQlwdGhyZWFkX211dGV4X2xvY2soJmdyZXBfYXR0cl9tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmVwX2F0dHJfdW5sb2NrKHZvaWQpCit7CisJaWYgKGdyZXBfdXNlX2xvY2tzKQorCQlwdGhyZWFkX211dGV4X3VubG9jaygmZ3JlcF9hdHRyX211dGV4KTsKK30KKworLyoKKyAqIFNhbWUgYXMgZ2l0X2F0dHJfbXV0ZXgsIGJ1dCBwcm90ZWN0aW5nIHRoZSB0aHJlYWQtdW5zYWZlIG9iamVjdCBkYiBhY2Nlc3MuCisgKi8KK3B0aHJlYWRfbXV0ZXhfdCBncmVwX3JlYWRfbXV0ZXg7CisKKyNlbHNlCisjZGVmaW5lIGdyZXBfYXR0cl9sb2NrKCkKKyNkZWZpbmUgZ3JlcF9hdHRyX3VubG9jaygpCisjZW5kaWYKKworc3RhdGljIGludCBtYXRjaF9mdW5jbmFtZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfc291cmNlICpncywgY2hhciAqYm9sLCBjaGFyICplb2wpCit7CisJeGRlbWl0Y29uZl90ICp4ZWNmZyA9IG9wdC0+cHJpdjsKKwlpZiAoeGVjZmcgJiYgIXhlY2ZnLT5maW5kX2Z1bmMpIHsKKwkJZ3JlcF9zb3VyY2VfbG9hZF9kcml2ZXIoZ3MpOworCQlpZiAoZ3MtPmRyaXZlci0+ZnVuY25hbWUucGF0dGVybikgeworCQkJY29uc3Qgc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lICpwZSA9ICZncy0+ZHJpdmVyLT5mdW5jbmFtZTsKKwkJCXhkaWZmX3NldF9maW5kX2Z1bmMoeGVjZmcsIHBlLT5wYXR0ZXJuLCBwZS0+Y2ZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCXhlY2ZnID0gb3B0LT5wcml2ID0gTlVMTDsKKwkJfQorCX0KKworCWlmICh4ZWNmZykgeworCQljaGFyIGJ1ZlsxXTsKKwkJcmV0dXJuIHhlY2ZnLT5maW5kX2Z1bmMoYm9sLCBlb2wgLSBib2wsIGJ1ZiwgMSwKKwkJCQkJeGVjZmctPmZpbmRfZnVuY19wcml2KSA+PSAwOworCX0KKworCWlmIChib2wgPT0gZW9sKQorCQlyZXR1cm4gMDsKKwlpZiAoaXNhbHBoYSgqYm9sKSB8fCAqYm9sID09ICdfJyB8fCAqYm9sID09ICckJykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZnVuY25hbWVfbGluZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfc291cmNlICpncywKKwkJCSAgICAgICBjaGFyICpib2wsIHVuc2lnbmVkIGxubykKK3sKKwl3aGlsZSAoYm9sID4gZ3MtPmJ1ZikgeworCQljaGFyICplb2wgPSAtLWJvbDsKKworCQl3aGlsZSAoYm9sID4gZ3MtPmJ1ZiAmJiBib2xbLTFdICE9ICdcbicpCisJCQlib2wtLTsKKwkJbG5vLS07CisKKwkJaWYgKGxubyA8PSBvcHQtPmxhc3Rfc2hvd24pCisJCQlicmVhazsKKworCQlpZiAobWF0Y2hfZnVuY25hbWUob3B0LCBncywgYm9sLCBlb2wpKSB7CisJCQlzaG93X2xpbmUob3B0LCBib2wsIGVvbCwgZ3MtPm5hbWUsIGxubywgJz0nKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3ByZV9jb250ZXh0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzLAorCQkJICAgICBjaGFyICpib2wsIGNoYXIgKmVuZCwgdW5zaWduZWQgbG5vKQoreworCXVuc2lnbmVkIGN1ciA9IGxubywgZnJvbSA9IDEsIGZ1bmNuYW1lX2xubyA9IDA7CisJaW50IGZ1bmNuYW1lX25lZWRlZCA9ICEhb3B0LT5mdW5jbmFtZTsKKworCWlmIChvcHQtPmZ1bmNib2R5ICYmICFtYXRjaF9mdW5jbmFtZShvcHQsIGdzLCBib2wsIGVuZCkpCisJCWZ1bmNuYW1lX25lZWRlZCA9IDI7CisKKwlpZiAob3B0LT5wcmVfY29udGV4dCA8IGxubykKKwkJZnJvbSA9IGxubyAtIG9wdC0+cHJlX2NvbnRleHQ7CisJaWYgKGZyb20gPD0gb3B0LT5sYXN0X3Nob3duKQorCQlmcm9tID0gb3B0LT5sYXN0X3Nob3duICsgMTsKKworCS8qIFJld2luZC4gKi8KKwl3aGlsZSAoYm9sID4gZ3MtPmJ1ZiAmJgorCSAgICAgICBjdXIgPiAoZnVuY25hbWVfbmVlZGVkID09IDIgPyBvcHQtPmxhc3Rfc2hvd24gKyAxIDogZnJvbSkpIHsKKwkJY2hhciAqZW9sID0gLS1ib2w7CisKKwkJd2hpbGUgKGJvbCA+IGdzLT5idWYgJiYgYm9sWy0xXSAhPSAnXG4nKQorCQkJYm9sLS07CisJCWN1ci0tOworCQlpZiAoZnVuY25hbWVfbmVlZGVkICYmIG1hdGNoX2Z1bmNuYW1lKG9wdCwgZ3MsIGJvbCwgZW9sKSkgeworCQkJZnVuY25hbWVfbG5vID0gY3VyOworCQkJZnVuY25hbWVfbmVlZGVkID0gMDsKKwkJfQorCX0KKworCS8qIFdlIG5lZWQgdG8gbG9vayBldmVuIGZ1cnRoZXIgYmFjayB0byBmaW5kIGEgZnVuY3Rpb24gc2lnbmF0dXJlLiAqLworCWlmIChvcHQtPmZ1bmNuYW1lICYmIGZ1bmNuYW1lX25lZWRlZCkKKwkJc2hvd19mdW5jbmFtZV9saW5lKG9wdCwgZ3MsIGJvbCwgY3VyKTsKKworCS8qIEJhY2sgZm9yd2FyZC4gKi8KKwl3aGlsZSAoY3VyIDwgbG5vKSB7CisJCWNoYXIgKmVvbCA9IGJvbCwgc2lnbiA9IChjdXIgPT0gZnVuY25hbWVfbG5vKSA/ICc9JyA6ICctJzsKKworCQl3aGlsZSAoKmVvbCAhPSAnXG4nKQorCQkJZW9sKys7CisJCXNob3dfbGluZShvcHQsIGJvbCwgZW9sLCBncy0+bmFtZSwgY3VyLCBzaWduKTsKKwkJYm9sID0gZW9sICsgMTsKKwkJY3VyKys7CisJfQorfQorCitzdGF0aWMgaW50IHNob3VsZF9sb29rYWhlYWQoc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCisJaWYgKG9wdC0+ZXh0ZW5kZWQpCisJCXJldHVybiAwOyAvKiBwdW50IGZvciB0b28gY29tcGxleCBzdHVmZiAqLworCWlmIChvcHQtPmludmVydCkKKwkJcmV0dXJuIDA7CisJZm9yIChwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT50b2tlbiAhPSBHUkVQX1BBVFRFUk4pCisJCQlyZXR1cm4gMDsgLyogcHVudCBmb3IgImhlYWRlciBvbmx5IiBhbmQgc3R1ZmYgKi8KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbG9va19haGVhZChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyAqbGVmdF9wLAorCQkgICAgICB1bnNpZ25lZCAqbG5vX3AsCisJCSAgICAgIGNoYXIgKipib2xfcCkKK3sKKwl1bnNpZ25lZCBsbm8gPSAqbG5vX3A7CisJY2hhciAqYm9sID0gKmJvbF9wOworCXN0cnVjdCBncmVwX3BhdCAqcDsKKwljaGFyICpzcCwgKmxhc3RfYm9sOworCXJlZ29mZl90IGVhcmxpZXN0ID0gLTE7CisKKwlmb3IgKHAgPSBvcHQtPnBhdHRlcm5fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaW50IGhpdDsKKwkJcmVnbWF0Y2hfdCBtOworCisJCWhpdCA9IHBhdG1hdGNoKHAsIGJvbCwgYm9sICsgKmxlZnRfcCwgJm0sIDApOworCQlpZiAoIWhpdCB8fCBtLnJtX3NvIDwgMCB8fCBtLnJtX2VvIDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZWFybGllc3QgPCAwIHx8IG0ucm1fc28gPCBlYXJsaWVzdCkKKwkJCWVhcmxpZXN0ID0gbS5ybV9zbzsKKwl9CisKKwlpZiAoZWFybGllc3QgPCAwKSB7CisJCSpib2xfcCA9IGJvbCArICpsZWZ0X3A7CisJCSpsZWZ0X3AgPSAwOworCQlyZXR1cm4gMTsKKwl9CisJZm9yIChzcCA9IGJvbCArIGVhcmxpZXN0OyBib2wgPCBzcCAmJiBzcFstMV0gIT0gJ1xuJzsgc3AtLSkKKwkJOyAvKiBmaW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgKi8KKwlsYXN0X2JvbCA9IHNwOworCisJZm9yIChzcCA9IGJvbDsgc3AgPCBsYXN0X2JvbDsgc3ArKykgeworCQlpZiAoKnNwID09ICdcbicpCisJCQlsbm8rKzsKKwl9CisJKmxlZnRfcCAtPSBsYXN0X2JvbCAtIGJvbDsKKwkqYm9sX3AgPSBsYXN0X2JvbDsKKwkqbG5vX3AgPSBsbm87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0ZF9vdXRwdXQoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJZndyaXRlKGJ1Ziwgc2l6ZSwgMSwgc3Rkb3V0KTsKK30KKworc3RhdGljIGludCBncmVwX3NvdXJjZV8xKHN0cnVjdCBncmVwX29wdCAqb3B0LCBzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzLCBpbnQgY29sbGVjdF9oaXRzKQoreworCWNoYXIgKmJvbDsKKwl1bnNpZ25lZCBsb25nIGxlZnQ7CisJdW5zaWduZWQgbG5vID0gMTsKKwl1bnNpZ25lZCBsYXN0X2hpdCA9IDA7CisJaW50IGJpbmFyeV9tYXRjaF9vbmx5ID0gMDsKKwl1bnNpZ25lZCBjb3VudCA9IDA7CisJaW50IHRyeV9sb29rYWhlYWQgPSAwOworCWludCBzaG93X2Z1bmN0aW9uID0gMDsKKwllbnVtIGdyZXBfY29udGV4dCBjdHggPSBHUkVQX0NPTlRFWFRfSEVBRDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisKKwlpZiAoIW9wdC0+b3V0cHV0KQorCQlvcHQtPm91dHB1dCA9IHN0ZF9vdXRwdXQ7CisKKwlpZiAob3B0LT5wcmVfY29udGV4dCB8fCBvcHQtPnBvc3RfY29udGV4dCB8fCBvcHQtPmZpbGVfYnJlYWsgfHwKKwkgICAgb3B0LT5mdW5jYm9keSkgeworCQkvKiBTaG93IGh1bmsgbWFya3MsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGZpbGUuICovCisJCWlmIChvcHQtPmxhc3Rfc2hvd24pCisJCQlvcHQtPnNob3dfaHVua19tYXJrID0gMTsKKwkJLyoKKwkJICogSWYgd2UncmUgdXNpbmcgdGhyZWFkcyB0aGVuIHdlIGNhbid0IGVhc2lseSBpZGVudGlmeQorCQkgKiB0aGUgZmlyc3QgZmlsZS4gIEFsd2F5cyBwdXQgaHVuayBtYXJrcyBpbiB0aGF0IGNhc2UKKwkJICogYW5kIHNraXAgdGhlIHZlcnkgZmlyc3Qgb25lIGxhdGVyIGluIHdvcmtfZG9uZSgpLgorCQkgKi8KKwkJaWYgKG9wdC0+b3V0cHV0ICE9IHN0ZF9vdXRwdXQpCisJCQlvcHQtPnNob3dfaHVua19tYXJrID0gMTsKKwl9CisJb3B0LT5sYXN0X3Nob3duID0gMDsKKworCXN3aXRjaCAob3B0LT5iaW5hcnkpIHsKKwljYXNlIEdSRVBfQklOQVJZX0RFRkFVTFQ6CisJCWlmIChncmVwX3NvdXJjZV9pc19iaW5hcnkoZ3MpKQorCQkJYmluYXJ5X21hdGNoX29ubHkgPSAxOworCQlicmVhazsKKwljYXNlIEdSRVBfQklOQVJZX05PTUFUQ0g6CisJCWlmIChncmVwX3NvdXJjZV9pc19iaW5hcnkoZ3MpKQorCQkJcmV0dXJuIDA7IC8qIEFzc3VtZSB1bm1hdGNoICovCisJCWJyZWFrOworCWNhc2UgR1JFUF9CSU5BUllfVEVYVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJidWc6IHVua25vd24gYmluYXJ5IGhhbmRsaW5nIG1vZGUiKTsKKwl9CisKKwltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwlvcHQtPnByaXYgPSAmeGVjZmc7CisKKwl0cnlfbG9va2FoZWFkID0gc2hvdWxkX2xvb2thaGVhZChvcHQpOworCisJaWYgKGdyZXBfc291cmNlX2xvYWQoZ3MpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlib2wgPSBncy0+YnVmOworCWxlZnQgPSBncy0+c2l6ZTsKKwl3aGlsZSAobGVmdCkgeworCQljaGFyICplb2wsIGNoOworCQlpbnQgaGl0OworCisJCS8qCisJCSAqIGxvb2tfYWhlYWQoKSBza2lwcyBxdWlja2x5IHRvIHRoZSBsaW5lIHRoYXQgcG9zc2libHkKKwkJICogaGFzIHRoZSBuZXh0IGhpdDsgZG9uJ3QgY2FsbCBpdCBpZiB3ZSBuZWVkIHRvIGRvCisJCSAqIHNvbWV0aGluZyBtb3JlIHRoYW4ganVzdCBza2lwcGluZyB0aGUgY3VycmVudCBsaW5lCisJCSAqIGluIHJlc3BvbnNlIHRvIGFuIHVubWF0Y2ggZm9yIHRoZSBjdXJyZW50IGxpbmUuICBFLmcuCisJCSAqIGluc2lkZSBhIHBvc3QtY29udGV4dCB3aW5kb3csIHdlIHdpbGwgc2hvdyB0aGUgY3VycmVudAorCQkgKiBsaW5lIGFzIGEgY29udGV4dCBhcm91bmQgdGhlIHByZXZpb3VzIGhpdCB3aGVuIGl0CisJCSAqIGRvZXNuJ3QgaGl0LgorCQkgKi8KKwkJaWYgKHRyeV9sb29rYWhlYWQKKwkJICAgICYmICEobGFzdF9oaXQKKwkJCSAmJiAoc2hvd19mdW5jdGlvbiB8fAorCQkJICAgICBsbm8gPD0gbGFzdF9oaXQgKyBvcHQtPnBvc3RfY29udGV4dCkpCisJCSAgICAmJiBsb29rX2FoZWFkKG9wdCwgJmxlZnQsICZsbm8sICZib2wpKQorCQkJYnJlYWs7CisJCWVvbCA9IGVuZF9vZl9saW5lKGJvbCwgJmxlZnQpOworCQljaCA9ICplb2w7CisJCSplb2wgPSAwOworCisJCWlmICgoY3R4ID09IEdSRVBfQ09OVEVYVF9IRUFEKSAmJiAoZW9sID09IGJvbCkpCisJCQljdHggPSBHUkVQX0NPTlRFWFRfQk9EWTsKKworCQloaXQgPSBtYXRjaF9saW5lKG9wdCwgYm9sLCBlb2wsIGN0eCwgY29sbGVjdF9oaXRzKTsKKwkJKmVvbCA9IGNoOworCisJCWlmIChjb2xsZWN0X2hpdHMpCisJCQlnb3RvIG5leHRfbGluZTsKKworCQkvKiAiZ3JlcCAtdiAtZSBmb28gLWUgYmxhIiBzaG91bGQgbGlzdCBsaW5lcworCQkgKiB0aGF0IGRvIG5vdCBoYXZlIGVpdGhlciwgc28gaW52ZXJzaW9uIHNob3VsZAorCQkgKiBiZSBkb25lIG91dHNpZGUuCisJCSAqLworCQlpZiAob3B0LT5pbnZlcnQpCisJCQloaXQgPSAhaGl0OworCQlpZiAob3B0LT51bm1hdGNoX25hbWVfb25seSkgeworCQkJaWYgKGhpdCkKKwkJCQlyZXR1cm4gMDsKKwkJCWdvdG8gbmV4dF9saW5lOworCQl9CisJCWlmIChoaXQpIHsKKwkJCWNvdW50Kys7CisJCQlpZiAob3B0LT5zdGF0dXNfb25seSkKKwkJCQlyZXR1cm4gMTsKKwkJCWlmIChvcHQtPm5hbWVfb25seSkgeworCQkJCXNob3dfbmFtZShvcHQsIGdzLT5uYW1lKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCWlmIChvcHQtPmNvdW50KQorCQkJCWdvdG8gbmV4dF9saW5lOworCQkJaWYgKGJpbmFyeV9tYXRjaF9vbmx5KSB7CisJCQkJb3B0LT5vdXRwdXQob3B0LCAiQmluYXJ5IGZpbGUgIiwgMTIpOworCQkJCW91dHB1dF9jb2xvcihvcHQsIGdzLT5uYW1lLCBzdHJsZW4oZ3MtPm5hbWUpLAorCQkJCQkgICAgIG9wdC0+Y29sb3JfZmlsZW5hbWUpOworCQkJCW9wdC0+b3V0cHV0KG9wdCwgIiBtYXRjaGVzXG4iLCA5KTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCS8qIEhpdCBhdCB0aGlzIGxpbmUuICBJZiB3ZSBoYXZlbid0IHNob3duIHRoZQorCQkJICogcHJlLWNvbnRleHQgbGluZXMsIHdlIHdvdWxkIG5lZWQgdG8gc2hvdyB0aGVtLgorCQkJICovCisJCQlpZiAob3B0LT5wcmVfY29udGV4dCB8fCBvcHQtPmZ1bmNib2R5KQorCQkJCXNob3dfcHJlX2NvbnRleHQob3B0LCBncywgYm9sLCBlb2wsIGxubyk7CisJCQllbHNlIGlmIChvcHQtPmZ1bmNuYW1lKQorCQkJCXNob3dfZnVuY25hbWVfbGluZShvcHQsIGdzLCBib2wsIGxubyk7CisJCQlzaG93X2xpbmUob3B0LCBib2wsIGVvbCwgZ3MtPm5hbWUsIGxubywgJzonKTsKKwkJCWxhc3RfaGl0ID0gbG5vOworCQkJaWYgKG9wdC0+ZnVuY2JvZHkpCisJCQkJc2hvd19mdW5jdGlvbiA9IDE7CisJCQlnb3RvIG5leHRfbGluZTsKKwkJfQorCQlpZiAoc2hvd19mdW5jdGlvbiAmJiBtYXRjaF9mdW5jbmFtZShvcHQsIGdzLCBib2wsIGVvbCkpCisJCQlzaG93X2Z1bmN0aW9uID0gMDsKKwkJaWYgKHNob3dfZnVuY3Rpb24gfHwKKwkJICAgIChsYXN0X2hpdCAmJiBsbm8gPD0gbGFzdF9oaXQgKyBvcHQtPnBvc3RfY29udGV4dCkpIHsKKwkJCS8qIElmIHRoZSBsYXN0IGhpdCBpcyB3aXRoaW4gdGhlIHBvc3QgY29udGV4dCwKKwkJCSAqIHdlIG5lZWQgdG8gc2hvdyB0aGlzIGxpbmUuCisJCQkgKi8KKwkJCXNob3dfbGluZShvcHQsIGJvbCwgZW9sLCBncy0+bmFtZSwgbG5vLCAnLScpOworCQl9CisKKwluZXh0X2xpbmU6CisJCWJvbCA9IGVvbCArIDE7CisJCWlmICghbGVmdCkKKwkJCWJyZWFrOworCQlsZWZ0LS07CisJCWxubysrOworCX0KKworCWlmIChjb2xsZWN0X2hpdHMpCisJCXJldHVybiAwOworCisJaWYgKG9wdC0+c3RhdHVzX29ubHkpCisJCXJldHVybiAwOworCWlmIChvcHQtPnVubWF0Y2hfbmFtZV9vbmx5KSB7CisJCS8qIFdlIGRpZCBub3Qgc2VlIGFueSBoaXQsIHNvIHdlIHdhbnQgdG8gc2hvdyB0aGlzICovCisJCXNob3dfbmFtZShvcHQsIGdzLT5uYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJeGRpZmZfY2xlYXJfZmluZF9mdW5jKCZ4ZWNmZyk7CisJb3B0LT5wcml2ID0gTlVMTDsKKworCS8qIE5FRURTV09SSzoKKwkgKiBUaGUgcmVhbCAiZ3JlcCAtYyBmb28gKi5jIiBnaXZlcyBtYW55ICJiYXIuYzowIiBsaW5lcywKKwkgKiB3aGljaCBmZWVscyBtb3N0bHkgdXNlbGVzcyBidXQgc29tZXRpbWVzIHVzZWZ1bC4gIE1heWJlCisJICogbWFrZSBpdCBhbm90aGVyIG9wdGlvbj8gIEZvciBub3cgc3VwcHJlc3MgdGhlbS4KKwkgKi8KKwlpZiAob3B0LT5jb3VudCAmJiBjb3VudCkgeworCQljaGFyIGJ1ZlszMl07CisJCW91dHB1dF9jb2xvcihvcHQsIGdzLT5uYW1lLCBzdHJsZW4oZ3MtPm5hbWUpLCBvcHQtPmNvbG9yX2ZpbGVuYW1lKTsKKwkJb3V0cHV0X3NlcChvcHQsICc6Jyk7CisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwgY291bnQpOworCQlvcHQtPm91dHB1dChvcHQsIGJ1Ziwgc3RybGVuKGJ1ZikpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuICEhbGFzdF9oaXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNscl9oaXRfbWFya2VyKHN0cnVjdCBncmVwX2V4cHIgKngpCit7CisJLyogQWxsLWhpdCBtYXJrZXJzIGFyZSBtZWFuaW5nZnVsIG9ubHkgYXQgdGhlIHZlcnkgdG9wIGxldmVsCisJICogT1Igbm9kZS4KKwkgKi8KKwl3aGlsZSAoMSkgeworCQl4LT5oaXQgPSAwOworCQlpZiAoeC0+bm9kZSAhPSBHUkVQX05PREVfT1IpCisJCQlyZXR1cm47CisJCXgtPnUuYmluYXJ5LmxlZnQtPmhpdCA9IDA7CisJCXggPSB4LT51LmJpbmFyeS5yaWdodDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hrX2hpdF9tYXJrZXIoc3RydWN0IGdyZXBfZXhwciAqeCkKK3sKKwkvKiBUb3AgbGV2ZWwgbm9kZXMgaGF2ZSBoaXQgbWFya2Vycy4gIFNlZSBpZiB0aGV5IGFsbCBhcmUgaGl0cyAqLworCXdoaWxlICgxKSB7CisJCWlmICh4LT5ub2RlICE9IEdSRVBfTk9ERV9PUikKKwkJCXJldHVybiB4LT5oaXQ7CisJCWlmICgheC0+dS5iaW5hcnkubGVmdC0+aGl0KQorCQkJcmV0dXJuIDA7CisJCXggPSB4LT51LmJpbmFyeS5yaWdodDsKKwl9Cit9CisKK2ludCBncmVwX3NvdXJjZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfc291cmNlICpncykKK3sKKwkvKgorCSAqIHdlIGRvIG5vdCBoYXZlIHRvIGRvIHRoZSB0d28tcGFzcyBncmVwIHdoZW4gd2UgZG8gbm90IGNoZWNrCisJICogYnVmZmVyLXdpZGUgImFsbC1tYXRjaCIuCisJICovCisJaWYgKCFvcHQtPmFsbF9tYXRjaCkKKwkJcmV0dXJuIGdyZXBfc291cmNlXzEob3B0LCBncywgMCk7CisKKwkvKiBPdGhlcndpc2UgdGhlIHRvcGxldmVsICJvciIgdGVybXMgaGl0IGEgYml0IGRpZmZlcmVudGx5LgorCSAqIFdlIGZpcnN0IGNsZWFyIGhpdCBtYXJrZXJzIGZyb20gdGhlbS4KKwkgKi8KKwljbHJfaGl0X21hcmtlcihvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbik7CisJZ3JlcF9zb3VyY2VfMShvcHQsIGdzLCAxKTsKKworCWlmICghY2hrX2hpdF9tYXJrZXIob3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBncmVwX3NvdXJjZV8xKG9wdCwgZ3MsIDApOworfQorCitpbnQgZ3JlcF9idWZmZXIoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBncmVwX3NvdXJjZSBnczsKKwlpbnQgcjsKKworCWdyZXBfc291cmNlX2luaXQoJmdzLCBHUkVQX1NPVVJDRV9CVUYsIE5VTEwsIE5VTEwpOworCWdzLmJ1ZiA9IGJ1ZjsKKwlncy5zaXplID0gc2l6ZTsKKworCXIgPSBncmVwX3NvdXJjZShvcHQsICZncyk7CisKKwlncmVwX3NvdXJjZV9jbGVhcigmZ3MpOworCXJldHVybiByOworfQorCit2b2lkIGdyZXBfc291cmNlX2luaXQoc3RydWN0IGdyZXBfc291cmNlICpncywgZW51bSBncmVwX3NvdXJjZV90eXBlIHR5cGUsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmlkZW50aWZpZXIpCit7CisJZ3MtPnR5cGUgPSB0eXBlOworCWdzLT5uYW1lID0gbmFtZSA/IHhzdHJkdXAobmFtZSkgOiBOVUxMOworCWdzLT5idWYgPSBOVUxMOworCWdzLT5zaXplID0gMDsKKwlncy0+ZHJpdmVyID0gTlVMTDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgR1JFUF9TT1VSQ0VfRklMRToKKwkJZ3MtPmlkZW50aWZpZXIgPSB4c3RyZHVwKGlkZW50aWZpZXIpOworCQlicmVhazsKKwljYXNlIEdSRVBfU09VUkNFX1NIQTE6CisJCWdzLT5pZGVudGlmaWVyID0geG1hbGxvYygyMCk7CisJCW1lbWNweShncy0+aWRlbnRpZmllciwgaWRlbnRpZmllciwgMjApOworCQlicmVhazsKKwljYXNlIEdSRVBfU09VUkNFX0JVRjoKKwkJZ3MtPmlkZW50aWZpZXIgPSBOVUxMOworCX0KK30KKwordm9pZCBncmVwX3NvdXJjZV9jbGVhcihzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKQoreworCWZyZWUoZ3MtPm5hbWUpOworCWdzLT5uYW1lID0gTlVMTDsKKwlmcmVlKGdzLT5pZGVudGlmaWVyKTsKKwlncy0+aWRlbnRpZmllciA9IE5VTEw7CisJZ3JlcF9zb3VyY2VfY2xlYXJfZGF0YShncyk7Cit9CisKK3ZvaWQgZ3JlcF9zb3VyY2VfY2xlYXJfZGF0YShzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKQoreworCXN3aXRjaCAoZ3MtPnR5cGUpIHsKKwljYXNlIEdSRVBfU09VUkNFX0ZJTEU6CisJY2FzZSBHUkVQX1NPVVJDRV9TSEExOgorCQlmcmVlKGdzLT5idWYpOworCQlncy0+YnVmID0gTlVMTDsKKwkJZ3MtPnNpemUgPSAwOworCQlicmVhazsKKwljYXNlIEdSRVBfU09VUkNFX0JVRjoKKwkJLyogbGVhdmUgdXNlci1wcm92aWRlZCBidWYgaW50YWN0ICovCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBncmVwX3NvdXJjZV9sb2FkX3NoYTEoc3RydWN0IGdyZXBfc291cmNlICpncykKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlncmVwX3JlYWRfbG9jaygpOworCWdzLT5idWYgPSByZWFkX3NoYTFfZmlsZShncy0+aWRlbnRpZmllciwgJnR5cGUsICZncy0+c2l6ZSk7CisJZ3JlcF9yZWFkX3VubG9jaygpOworCisJaWYgKCFncy0+YnVmKQorCQlyZXR1cm4gZXJyb3IoXygiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiKSwKKwkJCSAgICAgZ3MtPm5hbWUsCisJCQkgICAgIHNoYTFfdG9faGV4KGdzLT5pZGVudGlmaWVyKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9zb3VyY2VfbG9hZF9maWxlKHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBncy0+aWRlbnRpZmllcjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpkYXRhOworCXNpemVfdCBzaXplOworCWludCBpOworCisJaWYgKGxzdGF0KGZpbGVuYW1lLCAmc3QpIDwgMCkgeworCWVycl9yZXQ6CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQllcnJvcihfKCInJXMnOiAlcyIpLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybiAtMTsKKwlzaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKwlpID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworCWlmIChpIDwgMCkKKwkJZ290byBlcnJfcmV0OworCWRhdGEgPSB4bWFsbG9jKHNpemUgKyAxKTsKKwlpZiAoc3Quc3Rfc2l6ZSAhPSByZWFkX2luX2Z1bGwoaSwgZGF0YSwgc2l6ZSkpIHsKKwkJZXJyb3IoXygiJyVzJzogc2hvcnQgcmVhZCAlcyIpLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2UoaSk7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiAtMTsKKwl9CisJY2xvc2UoaSk7CisJZGF0YVtzaXplXSA9IDA7CisKKwlncy0+YnVmID0gZGF0YTsKKwlncy0+c2l6ZSA9IHNpemU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9zb3VyY2VfbG9hZChzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKQoreworCWlmIChncy0+YnVmKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZ3MtPnR5cGUpIHsKKwljYXNlIEdSRVBfU09VUkNFX0ZJTEU6CisJCXJldHVybiBncmVwX3NvdXJjZV9sb2FkX2ZpbGUoZ3MpOworCWNhc2UgR1JFUF9TT1VSQ0VfU0hBMToKKwkJcmV0dXJuIGdyZXBfc291cmNlX2xvYWRfc2hhMShncyk7CisJY2FzZSBHUkVQX1NPVVJDRV9CVUY6CisJCXJldHVybiBncy0+YnVmID8gMCA6IC0xOworCX0KKwlkaWUoIkJVRzogaW52YWxpZCBncmVwX3NvdXJjZSB0eXBlIik7Cit9CisKK3ZvaWQgZ3JlcF9zb3VyY2VfbG9hZF9kcml2ZXIoc3RydWN0IGdyZXBfc291cmNlICpncykKK3sKKwlpZiAoZ3MtPmRyaXZlcikKKwkJcmV0dXJuOworCisJZ3JlcF9hdHRyX2xvY2soKTsKKwlncy0+ZHJpdmVyID0gdXNlcmRpZmZfZmluZF9ieV9wYXRoKGdzLT5uYW1lKTsKKwlpZiAoIWdzLT5kcml2ZXIpCisJCWdzLT5kcml2ZXIgPSB1c2VyZGlmZl9maW5kX2J5X25hbWUoImRlZmF1bHQiKTsKKwlncmVwX2F0dHJfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9zb3VyY2VfaXNfYmluYXJ5KHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpCit7CisJZ3JlcF9zb3VyY2VfbG9hZF9kcml2ZXIoZ3MpOworCWlmIChncy0+ZHJpdmVyLT5iaW5hcnkgIT0gLTEpCisJCXJldHVybiBncy0+ZHJpdmVyLT5iaW5hcnk7CisKKwlpZiAoIWdyZXBfc291cmNlX2xvYWQoZ3MpKQorCQlyZXR1cm4gYnVmZmVyX2lzX2JpbmFyeShncy0+YnVmLCBncy0+c2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2dyZXAuaCBiL2dyZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjU2YWM2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlcC5oCkBAIC0wLDAgKzEsMjAyIEBACisjaWZuZGVmIEdSRVBfSAorI2RlZmluZSBHUkVQX0gKKyNpbmNsdWRlICJjb2xvci5oIgorI2lmZGVmIFVTRV9MSUJQQ1JFCisjaW5jbHVkZSA8cGNyZS5oPgorI2Vsc2UKK3R5cGVkZWYgaW50IHBjcmU7Cit0eXBlZGVmIGludCBwY3JlX2V4dHJhOworI2VuZGlmCisjaW5jbHVkZSAia3dzZXQuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorCitlbnVtIGdyZXBfcGF0X3Rva2VuIHsKKwlHUkVQX1BBVFRFUk4sCisJR1JFUF9QQVRURVJOX0hFQUQsCisJR1JFUF9QQVRURVJOX0JPRFksCisJR1JFUF9BTkQsCisJR1JFUF9PUEVOX1BBUkVOLAorCUdSRVBfQ0xPU0VfUEFSRU4sCisJR1JFUF9OT1QsCisJR1JFUF9PUgorfTsKKworZW51bSBncmVwX2NvbnRleHQgeworCUdSRVBfQ09OVEVYVF9IRUFELAorCUdSRVBfQ09OVEVYVF9CT0RZCit9OworCitlbnVtIGdyZXBfaGVhZGVyX2ZpZWxkIHsKKwlHUkVQX0hFQURFUl9BVVRIT1IgPSAwLAorCUdSRVBfSEVBREVSX0NPTU1JVFRFUiwKKwlHUkVQX0hFQURFUl9SRUZMT0csCisKKwkvKiBNdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIGVudW0gKi8KKwlHUkVQX0hFQURFUl9GSUVMRF9NQVgKK307CisKK3N0cnVjdCBncmVwX3BhdCB7CisJc3RydWN0IGdyZXBfcGF0ICpuZXh0OworCWNvbnN0IGNoYXIgKm9yaWdpbjsKKwlpbnQgbm87CisJZW51bSBncmVwX3BhdF90b2tlbiB0b2tlbjsKKwljaGFyICpwYXR0ZXJuOworCXNpemVfdCBwYXR0ZXJubGVuOworCWVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQ7CisJcmVnZXhfdCByZWdleHA7CisJcGNyZSAqcGNyZV9yZWdleHA7CisJcGNyZV9leHRyYSAqcGNyZV9leHRyYV9pbmZvOworCWt3c2V0X3Qga3dzOworCXVuc2lnbmVkIGZpeGVkOjE7CisJdW5zaWduZWQgaWdub3JlX2Nhc2U6MTsKKwl1bnNpZ25lZCB3b3JkX3JlZ2V4cDoxOworfTsKKworZW51bSBncmVwX2V4cHJfbm9kZSB7CisJR1JFUF9OT0RFX0FUT00sCisJR1JFUF9OT0RFX05PVCwKKwlHUkVQX05PREVfQU5ELAorCUdSRVBfTk9ERV9UUlVFLAorCUdSRVBfTk9ERV9PUgorfTsKKworZW51bSBncmVwX3BhdHRlcm5fdHlwZSB7CisJR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQgPSAwLAorCUdSRVBfUEFUVEVSTl9UWVBFX0JSRSwKKwlHUkVQX1BBVFRFUk5fVFlQRV9FUkUsCisJR1JFUF9QQVRURVJOX1RZUEVfRklYRUQsCisJR1JFUF9QQVRURVJOX1RZUEVfUENSRQorfTsKKworc3RydWN0IGdyZXBfZXhwciB7CisJZW51bSBncmVwX2V4cHJfbm9kZSBub2RlOworCXVuc2lnbmVkIGhpdDsKKwl1bmlvbiB7CisJCXN0cnVjdCBncmVwX3BhdCAqYXRvbTsKKwkJc3RydWN0IGdyZXBfZXhwciAqdW5hcnk7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgZ3JlcF9leHByICpsZWZ0OworCQkJc3RydWN0IGdyZXBfZXhwciAqcmlnaHQ7CisJCX0gYmluYXJ5OworCX0gdTsKK307CisKK3N0cnVjdCBncmVwX29wdCB7CisJc3RydWN0IGdyZXBfcGF0ICpwYXR0ZXJuX2xpc3Q7CisJc3RydWN0IGdyZXBfcGF0ICoqcGF0dGVybl90YWlsOworCXN0cnVjdCBncmVwX3BhdCAqaGVhZGVyX2xpc3Q7CisJc3RydWN0IGdyZXBfcGF0ICoqaGVhZGVyX3RhaWw7CisJc3RydWN0IGdyZXBfZXhwciAqcGF0dGVybl9leHByZXNzaW9uOworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwlpbnQgcHJlZml4X2xlbmd0aDsKKwlyZWdleF90IHJlZ2V4cDsKKwlpbnQgbGluZW51bTsKKwlpbnQgaW52ZXJ0OworCWludCBpZ25vcmVfY2FzZTsKKwlpbnQgc3RhdHVzX29ubHk7CisJaW50IG5hbWVfb25seTsKKwlpbnQgdW5tYXRjaF9uYW1lX29ubHk7CisJaW50IGNvdW50OworCWludCB3b3JkX3JlZ2V4cDsKKwlpbnQgZml4ZWQ7CisJaW50IGFsbF9tYXRjaDsKKwlpbnQgZGVidWc7CisjZGVmaW5lIEdSRVBfQklOQVJZX0RFRkFVTFQJMAorI2RlZmluZSBHUkVQX0JJTkFSWV9OT01BVENICTEKKyNkZWZpbmUgR1JFUF9CSU5BUllfVEVYVAkyCisJaW50IGJpbmFyeTsKKwlpbnQgZXh0ZW5kZWQ7CisJaW50IHVzZV9yZWZsb2dfZmlsdGVyOworCWludCBwY3JlOworCWludCByZWxhdGl2ZTsKKwlpbnQgcGF0aG5hbWU7CisJaW50IG51bGxfZm9sbG93aW5nX25hbWU7CisJaW50IGNvbG9yOworCWludCBtYXhfZGVwdGg7CisJaW50IGZ1bmNuYW1lOworCWludCBmdW5jYm9keTsKKwlpbnQgZXh0ZW5kZWRfcmVnZXhwX29wdGlvbjsKKwlpbnQgcGF0dGVybl90eXBlX29wdGlvbjsKKwljaGFyIGNvbG9yX2NvbnRleHRbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGNvbG9yX2ZpbGVuYW1lW0NPTE9SX01BWExFTl07CisJY2hhciBjb2xvcl9mdW5jdGlvbltDT0xPUl9NQVhMRU5dOworCWNoYXIgY29sb3JfbGluZW5vW0NPTE9SX01BWExFTl07CisJY2hhciBjb2xvcl9tYXRjaFtDT0xPUl9NQVhMRU5dOworCWNoYXIgY29sb3Jfc2VsZWN0ZWRbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGNvbG9yX3NlcFtDT0xPUl9NQVhMRU5dOworCWludCByZWdmbGFnczsKKwl1bnNpZ25lZCBwcmVfY29udGV4dDsKKwl1bnNpZ25lZCBwb3N0X2NvbnRleHQ7CisJdW5zaWduZWQgbGFzdF9zaG93bjsKKwlpbnQgc2hvd19odW5rX21hcms7CisJaW50IGZpbGVfYnJlYWs7CisJaW50IGhlYWRpbmc7CisJdm9pZCAqcHJpdjsKKworCXZvaWQgKCpvdXRwdXQpKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisJdm9pZCAqb3V0cHV0X3ByaXY7Cit9OworCitleHRlcm4gdm9pZCBhcHBlbmRfZ3JlcF9wYXQoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKnBhdCwgc2l6ZV90IHBhdGxlbiwgY29uc3QgY2hhciAqb3JpZ2luLCBpbnQgbm8sIGVudW0gZ3JlcF9wYXRfdG9rZW4gdCk7CitleHRlcm4gdm9pZCBhcHBlbmRfZ3JlcF9wYXR0ZXJuKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpwYXQsIGNvbnN0IGNoYXIgKm9yaWdpbiwgaW50IG5vLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHQpOworZXh0ZXJuIHZvaWQgYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oc3RydWN0IGdyZXBfb3B0ICosIGVudW0gZ3JlcF9oZWFkZXJfZmllbGQsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBjb21waWxlX2dyZXBfcGF0dGVybnMoc3RydWN0IGdyZXBfb3B0ICpvcHQpOworZXh0ZXJuIHZvaWQgZnJlZV9ncmVwX3BhdHRlcm5zKHN0cnVjdCBncmVwX29wdCAqb3B0KTsKK2V4dGVybiBpbnQgZ3JlcF9idWZmZXIoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworc3RydWN0IGdyZXBfc291cmNlIHsKKwljaGFyICpuYW1lOworCisJZW51bSBncmVwX3NvdXJjZV90eXBlIHsKKwkJR1JFUF9TT1VSQ0VfU0hBMSwKKwkJR1JFUF9TT1VSQ0VfRklMRSwKKwkJR1JFUF9TT1VSQ0VfQlVGLAorCX0gdHlwZTsKKwl2b2lkICppZGVudGlmaWVyOworCisJY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlcjsKK307CisKK3ZvaWQgZ3JlcF9zb3VyY2VfaW5pdChzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzLCBlbnVtIGdyZXBfc291cmNlX3R5cGUgdHlwZSwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqaWRlbnRpZmllcik7Cit2b2lkIGdyZXBfc291cmNlX2NsZWFyX2RhdGEoc3RydWN0IGdyZXBfc291cmNlICpncyk7Cit2b2lkIGdyZXBfc291cmNlX2NsZWFyKHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpOwordm9pZCBncmVwX3NvdXJjZV9sb2FkX2RyaXZlcihzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKTsKKworCitpbnQgZ3JlcF9zb3VyY2Uoc3RydWN0IGdyZXBfb3B0ICpvcHQsIHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpOworCitleHRlcm4gc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdF9kdXAoY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpOworZXh0ZXJuIGludCBncmVwX3RocmVhZHNfb2soY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpOworCisjaWZuZGVmIE5PX1BUSFJFQURTCisvKgorICogTXV0ZXggdXNlZCBhcm91bmQgYWNjZXNzIHRvIHRoZSBhdHRyaWJ1dGVzIG1hY2hpbmVyeSBpZgorICogb3B0LT51c2VfdGhyZWFkcy4gIE11c3QgYmUgaW5pdGlhbGl6ZWQvZGVzdHJveWVkIGJ5IGNhbGxlcnMhCisgKi8KK2V4dGVybiBpbnQgZ3JlcF91c2VfbG9ja3M7CitleHRlcm4gcHRocmVhZF9tdXRleF90IGdyZXBfYXR0cl9tdXRleDsKK2V4dGVybiBwdGhyZWFkX211dGV4X3QgZ3JlcF9yZWFkX211dGV4OworCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JlcF9yZWFkX2xvY2sodm9pZCkKK3sKKwlpZiAoZ3JlcF91c2VfbG9ja3MpCisJCXB0aHJlYWRfbXV0ZXhfbG9jaygmZ3JlcF9yZWFkX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyZXBfcmVhZF91bmxvY2sodm9pZCkKK3sKKwlpZiAoZ3JlcF91c2VfbG9ja3MpCisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZncmVwX3JlYWRfbXV0ZXgpOworfQorCisjZWxzZQorI2RlZmluZSBncmVwX3JlYWRfbG9jaygpCisjZGVmaW5lIGdyZXBfcmVhZF91bmxvY2soKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaGFzaC5jIGIvaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OWVjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9oYXNoLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBTb21lIGdlbmVyaWMgaGFzaGluZyBoZWxwZXJzLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisKKy8qCisgKiBMb29rIHVwIGEgaGFzaCBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZS4gUmV0dXJuIHRoZSBwb2ludGVyIHRvCisgKiB0aGUgZXhpc3RpbmcgZW50cnksIG9yIHRoZSBlbXB0eSBzbG90IGlmIG5vbmUgZXhpc3RlZC4gVGhlIGNhbGxlcgorICogY2FuIHRoZW4gbG9vayBhdCB0aGUgKCpwdHIpIHRvIHNlZSB3aGV0aGVyIGl0IGV4aXN0ZWQgb3Igbm90LgorICovCitzdGF0aWMgc3RydWN0IGhhc2hfdGFibGVfZW50cnkgKmxvb2t1cF9oYXNoX2VudHJ5KHVuc2lnbmVkIGludCBoYXNoLCBjb25zdCBzdHJ1Y3QgaGFzaF90YWJsZSAqdGFibGUpCit7CisJdW5zaWduZWQgaW50IHNpemUgPSB0YWJsZS0+c2l6ZSwgbnIgPSBoYXNoICUgc2l6ZTsKKwlzdHJ1Y3QgaGFzaF90YWJsZV9lbnRyeSAqYXJyYXkgPSB0YWJsZS0+YXJyYXk7CisKKwl3aGlsZSAoYXJyYXlbbnJdLnB0cikgeworCQlpZiAoYXJyYXlbbnJdLmhhc2ggPT0gaGFzaCkKKwkJCWJyZWFrOworCQlucisrOworCQlpZiAobnIgPj0gc2l6ZSkKKwkJCW5yID0gMDsKKwl9CisJcmV0dXJuIGFycmF5ICsgbnI7Cit9CisKKworLyoKKyAqIEluc2VydCBhIG5ldyBoYXNoIGVudHJ5IHBvaW50ZXIgaW50byB0aGUgdGFibGUuCisgKgorICogSWYgdGhhdCBoYXNoIGVudHJ5IGFscmVhZHkgZXhpc3RlZCwgcmV0dXJuIHRoZSBwb2ludGVyIHRvCisgKiB0aGUgZXhpc3RpbmcgZW50cnkgKGFuZCB0aGUgY2FsbGVyIGNhbiBjcmVhdGUgYSBsaXN0IG9mIHRoZQorICogcG9pbnRlcnMgb3IgZG8gYW55dGhpbmcgZWxzZSkuIElmIGl0IGRpZG4ndCBleGlzdCwgcmV0dXJuCisgKiBOVUxMIChhbmQgdGhlIGNhbGxlciBrbm93cyB0aGUgcG9pbnRlciBoYXMgYmVlbiBpbnNlcnRlZCkuCisgKi8KK3N0YXRpYyB2b2lkICoqaW5zZXJ0X2hhc2hfZW50cnkodW5zaWduZWQgaW50IGhhc2gsIHZvaWQgKnB0ciwgc3RydWN0IGhhc2hfdGFibGUgKnRhYmxlKQoreworCXN0cnVjdCBoYXNoX3RhYmxlX2VudHJ5ICplbnRyeSA9IGxvb2t1cF9oYXNoX2VudHJ5KGhhc2gsIHRhYmxlKTsKKworCWlmICghZW50cnktPnB0cikgeworCQllbnRyeS0+cHRyID0gcHRyOworCQllbnRyeS0+aGFzaCA9IGhhc2g7CisJCXRhYmxlLT5ucisrOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuICZlbnRyeS0+cHRyOworfQorCitzdGF0aWMgdm9pZCBncm93X2hhc2hfdGFibGUoc3RydWN0IGhhc2hfdGFibGUgKnRhYmxlKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBvbGRfc2l6ZSA9IHRhYmxlLT5zaXplLCBuZXdfc2l6ZTsKKwlzdHJ1Y3QgaGFzaF90YWJsZV9lbnRyeSAqb2xkX2FycmF5ID0gdGFibGUtPmFycmF5LCAqbmV3X2FycmF5OworCisJbmV3X3NpemUgPSBhbGxvY19ucihvbGRfc2l6ZSk7CisJbmV3X2FycmF5ID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGhhc2hfdGFibGVfZW50cnkpLCBuZXdfc2l6ZSk7CisJdGFibGUtPnNpemUgPSBuZXdfc2l6ZTsKKwl0YWJsZS0+YXJyYXkgPSBuZXdfYXJyYXk7CisJdGFibGUtPm5yID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgb2xkX3NpemU7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgaGFzaCA9IG9sZF9hcnJheVtpXS5oYXNoOworCQl2b2lkICpwdHIgPSBvbGRfYXJyYXlbaV0ucHRyOworCQlpZiAocHRyKQorCQkJaW5zZXJ0X2hhc2hfZW50cnkoaGFzaCwgcHRyLCB0YWJsZSk7CisJfQorCWZyZWUob2xkX2FycmF5KTsKK30KKwordm9pZCAqbG9va3VwX2hhc2godW5zaWduZWQgaW50IGhhc2gsIGNvbnN0IHN0cnVjdCBoYXNoX3RhYmxlICp0YWJsZSkKK3sKKwlpZiAoIXRhYmxlLT5hcnJheSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGxvb2t1cF9oYXNoX2VudHJ5KGhhc2gsIHRhYmxlKS0+cHRyOworfQorCit2b2lkICoqaW5zZXJ0X2hhc2godW5zaWduZWQgaW50IGhhc2gsIHZvaWQgKnB0ciwgc3RydWN0IGhhc2hfdGFibGUgKnRhYmxlKQoreworCXVuc2lnbmVkIGludCBuciA9IHRhYmxlLT5ucjsKKwlpZiAobnIgPj0gdGFibGUtPnNpemUvMikKKwkJZ3Jvd19oYXNoX3RhYmxlKHRhYmxlKTsKKwlyZXR1cm4gaW5zZXJ0X2hhc2hfZW50cnkoaGFzaCwgcHRyLCB0YWJsZSk7Cit9CisKK2ludCBmb3JfZWFjaF9oYXNoKGNvbnN0IHN0cnVjdCBoYXNoX3RhYmxlICp0YWJsZSwgaW50ICgqZm4pKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgc3VtID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IHRhYmxlLT5zaXplOworCXN0cnVjdCBoYXNoX3RhYmxlX2VudHJ5ICphcnJheSA9IHRhYmxlLT5hcnJheTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJdm9pZCAqcHRyID0gYXJyYXktPnB0cjsKKwkJYXJyYXkrKzsKKwkJaWYgKHB0cikgeworCQkJaW50IHZhbCA9IGZuKHB0ciwgZGF0YSk7CisJCQlpZiAodmFsIDwgMCkKKwkJCQlyZXR1cm4gdmFsOworCQkJc3VtICs9IHZhbDsKKwkJfQorCX0KKwlyZXR1cm4gc3VtOworfQorCit2b2lkIGZyZWVfaGFzaChzdHJ1Y3QgaGFzaF90YWJsZSAqdGFibGUpCit7CisJZnJlZSh0YWJsZS0+YXJyYXkpOworCXRhYmxlLT5hcnJheSA9IE5VTEw7CisJdGFibGUtPnNpemUgPSAwOworCXRhYmxlLT5uciA9IDA7Cit9CmRpZmYgLS1naXQgYS9oYXNoLmggYi9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3NWNlNgotLS0gL2Rldi9udWxsCisrKyBiL2hhc2guaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIEhBU0hfSAorI2RlZmluZSBIQVNIX0gKKworLyoKKyAqIFRoZXNlIGFyZSBzb21lIHNpbXBsZSBnZW5lcmljIGhhc2ggdGFibGUgaGVscGVyIGZ1bmN0aW9ucy4KKyAqIE5vdCBuZWNlc3NhcmlseSBzdWl0YWJsZSBmb3IgYWxsIHVzZXJzLCBidXQgZ29vZCBmb3IgdGhpbmdzCisgKiB3aGVyZSB5b3Ugd2FudCB0byBqdXN0IGtlZXAgdHJhY2sgb2YgYSBsaXN0IG9mIHRoaW5ncywgYW5kCisgKiBoYXZlIGEgZ29vZCBoYXNoIHRvIHVzZSBvbiB0aGVtLgorICoKKyAqIEl0IGtlZXBzIHRoZSBoYXNoIHRhYmxlIGF0IHJvdWdobHkgNTAtNzUlIGZyZWUsIHNvIHRoZSBtZW1vcnkKKyAqIGNvc3Qgb2YgdGhlIGhhc2ggdGFibGUgaXRzZWxmIGlzIHJvdWdobHkKKyAqCisgKgkzICogMipzaXplb2Yodm9pZCAqKSAqIG5yX29mX29iamVjdHMKKyAqCisgKiBieXRlcy4KKyAqCisgKiBGSVhNRTogb24gNjQtYml0IGFyY2hpdGVjdHVyZXMsIHdlIHdhc3RlIG1lbW9yeS4gSXQgd291bGQgYmUKKyAqIGdvb2QgdG8gaGF2ZSBqdXN0IDMyLWJpdCBwb2ludGVycywgcmVxdWlyaW5nIGEgc3BlY2lhbCBhbGxvY2F0b3IKKyAqIGZvciBoYXNoZWQgZW50cmllcyBvciBzb21ldGhpbmcuCisgKi8KK3N0cnVjdCBoYXNoX3RhYmxlX2VudHJ5IHsKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwl2b2lkICpwdHI7Cit9OworCitzdHJ1Y3QgaGFzaF90YWJsZSB7CisJdW5zaWduZWQgaW50IHNpemUsIG5yOworCXN0cnVjdCBoYXNoX3RhYmxlX2VudHJ5ICphcnJheTsKK307CisKK2V4dGVybiB2b2lkICpsb29rdXBfaGFzaCh1bnNpZ25lZCBpbnQgaGFzaCwgY29uc3Qgc3RydWN0IGhhc2hfdGFibGUgKnRhYmxlKTsKK2V4dGVybiB2b2lkICoqaW5zZXJ0X2hhc2godW5zaWduZWQgaW50IGhhc2gsIHZvaWQgKnB0ciwgc3RydWN0IGhhc2hfdGFibGUgKnRhYmxlKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfaGFzaChjb25zdCBzdHJ1Y3QgaGFzaF90YWJsZSAqdGFibGUsIGludCAoKmZuKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgZnJlZV9oYXNoKHN0cnVjdCBoYXNoX3RhYmxlICp0YWJsZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2hhc2goc3RydWN0IGhhc2hfdGFibGUgKnRhYmxlKQoreworCXRhYmxlLT5zaXplID0gMDsKKwl0YWJsZS0+bnIgPSAwOworCXRhYmxlLT5hcnJheSA9IE5VTEw7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaGVscC5jIGIvaGVscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNDJlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9oZWxwLmMKQEAgLTAsMCArMSwzODUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgImxldmVuc2h0ZWluLmgiCisjaW5jbHVkZSAiaGVscC5oIgorI2luY2x1ZGUgImNvbW1vbi1jbWRzLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKK3ZvaWQgYWRkX2NtZG5hbWUoc3RydWN0IGNtZG5hbWVzICpjbWRzLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCXN0cnVjdCBjbWRuYW1lICplbnQgPSB4bWFsbG9jKHNpemVvZigqZW50KSArIGxlbiArIDEpOworCisJZW50LT5sZW4gPSBsZW47CisJbWVtY3B5KGVudC0+bmFtZSwgbmFtZSwgbGVuKTsKKwllbnQtPm5hbWVbbGVuXSA9IDA7CisKKwlBTExPQ19HUk9XKGNtZHMtPm5hbWVzLCBjbWRzLT5jbnQgKyAxLCBjbWRzLT5hbGxvYyk7CisJY21kcy0+bmFtZXNbY21kcy0+Y250KytdID0gZW50OworfQorCitzdGF0aWMgdm9pZCBjbGVhbl9jbWRuYW1lcyhzdHJ1Y3QgY21kbmFtZXMgKmNtZHMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGNtZHMtPmNudDsgKytpKQorCQlmcmVlKGNtZHMtPm5hbWVzW2ldKTsKKwlmcmVlKGNtZHMtPm5hbWVzKTsKKwljbWRzLT5jbnQgPSAwOworCWNtZHMtPmFsbG9jID0gMDsKK30KKworc3RhdGljIGludCBjbWRuYW1lX2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBjbWRuYW1lICphID0gKihzdHJ1Y3QgY21kbmFtZSAqKilhXzsKKwlzdHJ1Y3QgY21kbmFtZSAqYiA9ICooc3RydWN0IGNtZG5hbWUgKiopYl87CisJcmV0dXJuIHN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgdW5pcShzdHJ1Y3QgY21kbmFtZXMgKmNtZHMpCit7CisJaW50IGksIGo7CisKKwlpZiAoIWNtZHMtPmNudCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gaiA9IDE7IGkgPCBjbWRzLT5jbnQ7IGkrKykgeworCQlpZiAoIXN0cmNtcChjbWRzLT5uYW1lc1tpXS0+bmFtZSwgY21kcy0+bmFtZXNbai0xXS0+bmFtZSkpCisJCQlmcmVlKGNtZHMtPm5hbWVzW2ldKTsKKwkJZWxzZQorCQkJY21kcy0+bmFtZXNbaisrXSA9IGNtZHMtPm5hbWVzW2ldOworCX0KKworCWNtZHMtPmNudCA9IGo7Cit9CisKK3ZvaWQgZXhjbHVkZV9jbWRzKHN0cnVjdCBjbWRuYW1lcyAqY21kcywgc3RydWN0IGNtZG5hbWVzICpleGNsdWRlcykKK3sKKwlpbnQgY2ksIGNqLCBlaTsKKwlpbnQgY21wOworCisJY2kgPSBjaiA9IGVpID0gMDsKKwl3aGlsZSAoY2kgPCBjbWRzLT5jbnQgJiYgZWkgPCBleGNsdWRlcy0+Y250KSB7CisJCWNtcCA9IHN0cmNtcChjbWRzLT5uYW1lc1tjaV0tPm5hbWUsIGV4Y2x1ZGVzLT5uYW1lc1tlaV0tPm5hbWUpOworCQlpZiAoY21wIDwgMCkKKwkJCWNtZHMtPm5hbWVzW2NqKytdID0gY21kcy0+bmFtZXNbY2krK107CisJCWVsc2UgaWYgKGNtcCA9PSAwKSB7CisJCQllaSsrOworCQkJZnJlZShjbWRzLT5uYW1lc1tjaSsrXSk7CisJCX0gZWxzZSBpZiAoY21wID4gMCkKKwkJCWVpKys7CisJfQorCisJd2hpbGUgKGNpIDwgY21kcy0+Y250KQorCQljbWRzLT5uYW1lc1tjaisrXSA9IGNtZHMtPm5hbWVzW2NpKytdOworCisJY21kcy0+Y250ID0gY2o7Cit9CisKK3N0YXRpYyB2b2lkIHByZXR0eV9wcmludF9zdHJpbmdfbGlzdChzdHJ1Y3QgY21kbmFtZXMgKmNtZHMsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY29sb3B0cykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IGNvbHVtbl9vcHRpb25zIGNvcHRzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNtZHMtPmNudDsgaSsrKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmxpc3QsIGNtZHMtPm5hbWVzW2ldLT5uYW1lKTsKKwkvKgorCSAqIGFsd2F5cyBlbmFibGUgY29sdW1uIGRpc3BsYXksIHdlIG9ubHkgY29uc3VsdCBjb2x1bW4uKgorCSAqIGFib3V0IGxheW91dCBzdHJhdGVneSBhbmQgc3R1ZmYKKwkgKi8KKwljb2xvcHRzID0gKGNvbG9wdHMgJiB+Q09MX0VOQUJMRV9NQVNLKSB8IENPTF9FTkFCTEVEOworCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCWNvcHRzLmluZGVudCA9ICIgICI7CisJY29wdHMucGFkZGluZyA9IDI7CisJcHJpbnRfY29sdW1ucygmbGlzdCwgY29sb3B0cywgJmNvcHRzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaXNfZXhlY3V0YWJsZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKHN0YXQobmFtZSwgJnN0KSB8fCAvKiBzdGF0LCBub3QgbHN0YXQgKi8KKwkgICAgIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybiAwOworCisjaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorI2lmIGRlZmluZWQoX19DWUdXSU5fXykKK2lmICgoc3Quc3RfbW9kZSAmIFNfSVhVU1IpID09IDApCisjZW5kaWYKK3sJLyogY2Fubm90IHRydXN0IHRoZSBleGVjdXRhYmxlIGJpdCwgcGVlayBpbnRvIHRoZSBmaWxlIGluc3RlYWQgKi8KKwljaGFyIGJ1ZlszXSA9IHsgMCB9OworCWludCBuOworCWludCBmZCA9IG9wZW4obmFtZSwgT19SRE9OTFkpOworCXN0LnN0X21vZGUgJj0gflNfSVhVU1I7CisJaWYgKGZkID49IDApIHsKKwkJbiA9IHJlYWQoZmQsIGJ1ZiwgMik7CisJCWlmIChuID09IDIpCisJCQkvKiBET1MgZXhlY3V0YWJsZXMgc3RhcnQgd2l0aCAiTVoiICovCisJCQlpZiAoIXN0cmNtcChidWYsICIjISIpIHx8ICFzdHJjbXAoYnVmLCAiTVoiKSkKKwkJCQlzdC5zdF9tb2RlIHw9IFNfSVhVU1I7CisJCWNsb3NlKGZkKTsKKwl9Cit9CisjZW5kaWYKKwlyZXR1cm4gc3Quc3RfbW9kZSAmIFNfSVhVU1I7Cit9CisKK3N0YXRpYyB2b2lkIGxpc3RfY29tbWFuZHNfaW5fZGlyKHN0cnVjdCBjbWRuYW1lcyAqY21kcywKKwkJCQkJIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHByZWZpeF9sZW47CisJRElSICpkaXIgPSBvcGVuZGlyKHBhdGgpOworCXN0cnVjdCBkaXJlbnQgKmRlOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGxlbjsKKworCWlmICghZGlyKQorCQlyZXR1cm47CisJaWYgKCFwcmVmaXgpCisJCXByZWZpeCA9ICJnaXQtIjsKKwlwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMvIiwgcGF0aCk7CisJbGVuID0gYnVmLmxlbjsKKworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJaW50IGVudGxlbjsKKworCQlpZiAocHJlZml4Y21wKGRlLT5kX25hbWUsIHByZWZpeCkpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfc2V0bGVuKCZidWYsIGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZGUtPmRfbmFtZSk7CisJCWlmICghaXNfZXhlY3V0YWJsZShidWYuYnVmKSkKKwkJCWNvbnRpbnVlOworCisJCWVudGxlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKSAtIHByZWZpeF9sZW47CisJCWlmIChoYXNfZXh0ZW5zaW9uKGRlLT5kX25hbWUsICIuZXhlIikpCisJCQllbnRsZW4gLT0gNDsKKworCQlhZGRfY21kbmFtZShjbWRzLCBkZS0+ZF9uYW1lICsgcHJlZml4X2xlbiwgZW50bGVuKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKwordm9pZCBsb2FkX2NvbW1hbmRfbGlzdChjb25zdCBjaGFyICpwcmVmaXgsCisJCXN0cnVjdCBjbWRuYW1lcyAqbWFpbl9jbWRzLAorCQlzdHJ1Y3QgY21kbmFtZXMgKm90aGVyX2NtZHMpCit7CisJY29uc3QgY2hhciAqZW52X3BhdGggPSBnZXRlbnYoIlBBVEgiKTsKKwljb25zdCBjaGFyICpleGVjX3BhdGggPSBnaXRfZXhlY19wYXRoKCk7CisKKwlpZiAoZXhlY19wYXRoKSB7CisJCWxpc3RfY29tbWFuZHNfaW5fZGlyKG1haW5fY21kcywgZXhlY19wYXRoLCBwcmVmaXgpOworCQlxc29ydChtYWluX2NtZHMtPm5hbWVzLCBtYWluX2NtZHMtPmNudCwKKwkJICAgICAgc2l6ZW9mKCptYWluX2NtZHMtPm5hbWVzKSwgY21kbmFtZV9jb21wYXJlKTsKKwkJdW5pcShtYWluX2NtZHMpOworCX0KKworCWlmIChlbnZfcGF0aCkgeworCQljaGFyICpwYXRocywgKnBhdGgsICpjb2xvbjsKKwkJcGF0aCA9IHBhdGhzID0geHN0cmR1cChlbnZfcGF0aCk7CisJCXdoaWxlICgxKSB7CisJCQlpZiAoKGNvbG9uID0gc3RyY2hyKHBhdGgsIFBBVEhfU0VQKSkpCisJCQkJKmNvbG9uID0gMDsKKwkJCWlmICghZXhlY19wYXRoIHx8IHN0cmNtcChwYXRoLCBleGVjX3BhdGgpKQorCQkJCWxpc3RfY29tbWFuZHNfaW5fZGlyKG90aGVyX2NtZHMsIHBhdGgsIHByZWZpeCk7CisKKwkJCWlmICghY29sb24pCisJCQkJYnJlYWs7CisJCQlwYXRoID0gY29sb24gKyAxOworCQl9CisJCWZyZWUocGF0aHMpOworCisJCXFzb3J0KG90aGVyX2NtZHMtPm5hbWVzLCBvdGhlcl9jbWRzLT5jbnQsCisJCSAgICAgIHNpemVvZigqb3RoZXJfY21kcy0+bmFtZXMpLCBjbWRuYW1lX2NvbXBhcmUpOworCQl1bmlxKG90aGVyX2NtZHMpOworCX0KKwlleGNsdWRlX2NtZHMob3RoZXJfY21kcywgbWFpbl9jbWRzKTsKK30KKwordm9pZCBsaXN0X2NvbW1hbmRzKHVuc2lnbmVkIGludCBjb2xvcHRzLAorCQkgICBzdHJ1Y3QgY21kbmFtZXMgKm1haW5fY21kcywgc3RydWN0IGNtZG5hbWVzICpvdGhlcl9jbWRzKQoreworCWlmIChtYWluX2NtZHMtPmNudCkgeworCQljb25zdCBjaGFyICpleGVjX3BhdGggPSBnaXRfZXhlY19wYXRoKCk7CisJCXByaW50Zl9sbihfKCJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciKSwgZXhlY19wYXRoKTsKKwkJcHV0Y2hhcignXG4nKTsKKwkJcHJldHR5X3ByaW50X3N0cmluZ19saXN0KG1haW5fY21kcywgY29sb3B0cyk7CisJCXB1dGNoYXIoJ1xuJyk7CisJfQorCisJaWYgKG90aGVyX2NtZHMtPmNudCkgeworCQlwcmludGZfbG4oXygiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIikpOworCQlwdXRjaGFyKCdcbicpOworCQlwcmV0dHlfcHJpbnRfc3RyaW5nX2xpc3Qob3RoZXJfY21kcywgY29sb3B0cyk7CisJCXB1dGNoYXIoJ1xuJyk7CisJfQorfQorCitpbnQgaXNfaW5fY21kbGlzdChzdHJ1Y3QgY21kbmFtZXMgKmMsIGNvbnN0IGNoYXIgKnMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGMtPmNudDsgaSsrKQorCQlpZiAoIXN0cmNtcChzLCBjLT5uYW1lc1tpXS0+bmFtZSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdXRvY29ycmVjdDsKK3N0YXRpYyBzdHJ1Y3QgY21kbmFtZXMgYWxpYXNlczsKKworc3RhdGljIGludCBnaXRfdW5rbm93bl9jbWRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImhlbHAuYXV0b2NvcnJlY3QiKSkKKwkJYXV0b2NvcnJlY3QgPSBnaXRfY29uZmlnX2ludCh2YXIsdmFsdWUpOworCS8qIEFsc28gdXNlIGFsaWFzZXMgZm9yIGNvbW1hbmQgbG9va3VwICovCisJaWYgKCFwcmVmaXhjbXAodmFyLCAiYWxpYXMuIikpCisJCWFkZF9jbWRuYW1lKCZhbGlhc2VzLCB2YXIgKyA2LCBzdHJsZW4odmFyICsgNikpOworCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgbGV2ZW5zaHRlaW5fY29tcGFyZShjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCit7CisJY29uc3Qgc3RydWN0IGNtZG5hbWUgKmNvbnN0ICpjMSA9IHAxLCAqY29uc3QgKmMyID0gcDI7CisJY29uc3QgY2hhciAqczEgPSAoKmMxKS0+bmFtZSwgKnMyID0gKCpjMiktPm5hbWU7CisJaW50IGwxID0gKCpjMSktPmxlbjsKKwlpbnQgbDIgPSAoKmMyKS0+bGVuOworCXJldHVybiBsMSAhPSBsMiA/IGwxIC0gbDIgOiBzdHJjbXAoczEsIHMyKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2NtZF9saXN0KHN0cnVjdCBjbWRuYW1lcyAqY21kcywgc3RydWN0IGNtZG5hbWVzICpvbGQpCit7CisJaW50IGk7CisJQUxMT0NfR1JPVyhjbWRzLT5uYW1lcywgY21kcy0+Y250ICsgb2xkLT5jbnQsIGNtZHMtPmFsbG9jKTsKKworCWZvciAoaSA9IDA7IGkgPCBvbGQtPmNudDsgaSsrKQorCQljbWRzLT5uYW1lc1tjbWRzLT5jbnQrK10gPSBvbGQtPm5hbWVzW2ldOworCWZyZWUob2xkLT5uYW1lcyk7CisJb2xkLT5jbnQgPSAwOworCW9sZC0+bmFtZXMgPSBOVUxMOworfQorCisvKiBBbiBlbXBpcmljYWxseSBkZXJpdmVkIG1hZ2ljIG51bWJlciAqLworI2RlZmluZSBTSU1JTEFSSVRZX0ZMT09SIDcKKyNkZWZpbmUgU0lNSUxBUl9FTk9VR0goeCkgKCh4KSA8IFNJTUlMQVJJVFlfRkxPT1IpCisKK3N0YXRpYyBjb25zdCBjaGFyIGJhZF9pbnRlcnByZXRlcl9hZHZpY2VbXSA9CisJTl8oIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKwkiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIpOworCitjb25zdCBjaGFyICpoZWxwX3Vua25vd25fY21kKGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlpbnQgaSwgbiwgYmVzdF9zaW1pbGFyaXR5ID0gMDsKKwlzdHJ1Y3QgY21kbmFtZXMgbWFpbl9jbWRzLCBvdGhlcl9jbWRzOworCisJbWVtc2V0KCZtYWluX2NtZHMsIDAsIHNpemVvZihtYWluX2NtZHMpKTsKKwltZW1zZXQoJm90aGVyX2NtZHMsIDAsIHNpemVvZihvdGhlcl9jbWRzKSk7CisJbWVtc2V0KCZhbGlhc2VzLCAwLCBzaXplb2YoYWxpYXNlcykpOworCisJZ2l0X2NvbmZpZyhnaXRfdW5rbm93bl9jbWRfY29uZmlnLCBOVUxMKTsKKworCWxvYWRfY29tbWFuZF9saXN0KCJnaXQtIiwgJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCisJYWRkX2NtZF9saXN0KCZtYWluX2NtZHMsICZhbGlhc2VzKTsKKwlhZGRfY21kX2xpc3QoJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCXFzb3J0KG1haW5fY21kcy5uYW1lcywgbWFpbl9jbWRzLmNudCwKKwkgICAgICBzaXplb2YobWFpbl9jbWRzLm5hbWVzKSwgY21kbmFtZV9jb21wYXJlKTsKKwl1bmlxKCZtYWluX2NtZHMpOworCisJLyogVGhpcyBhYnVzZXMgY21kbmFtZS0+bGVuIGZvciBsZXZlbnNodGVpbiBkaXN0YW5jZSAqLworCWZvciAoaSA9IDAsIG4gPSAwOyBpIDwgbWFpbl9jbWRzLmNudDsgaSsrKSB7CisJCWludCBjbXAgPSAwOyAvKiBhdm9pZCBjb21waWxlciBzdHVwaWRpdHkgKi8KKwkJY29uc3QgY2hhciAqY2FuZGlkYXRlID0gbWFpbl9jbWRzLm5hbWVzW2ldLT5uYW1lOworCisJCS8qCisJCSAqIEFuIGV4YWN0IG1hdGNoIG1lYW5zIHdlIGhhdmUgdGhlIGNvbW1hbmQsIGJ1dAorCQkgKiBmb3Igc29tZSByZWFzb24gZXhlYydpbmcgaXQgZ2F2ZSB1cyBFTk9FTlQ7IHByb2JhYmx5CisJCSAqIGl0J3MgYSBiYWQgaW50ZXJwcmV0ZXIgaW4gdGhlICMhIGxpbmUuCisJCSAqLworCQlpZiAoIXN0cmNtcChjYW5kaWRhdGUsIGNtZCkpCisJCQlkaWUoXyhiYWRfaW50ZXJwcmV0ZXJfYWR2aWNlKSwgY21kLCBjbWQpOworCisJCS8qIERvZXMgdGhlIGNhbmRpZGF0ZSBhcHBlYXIgaW4gY29tbW9uX2NtZHMgbGlzdD8gKi8KKwkJd2hpbGUgKG4gPCBBUlJBWV9TSVpFKGNvbW1vbl9jbWRzKSAmJgorCQkgICAgICAgKGNtcCA9IHN0cmNtcChjb21tb25fY21kc1tuXS5uYW1lLCBjYW5kaWRhdGUpKSA8IDApCisJCQluKys7CisJCWlmICgobiA8IEFSUkFZX1NJWkUoY29tbW9uX2NtZHMpKSAmJiAhY21wKSB7CisJCQkvKiBZZXMsIHRoaXMgaXMgb25lIG9mIHRoZSBjb21tb24gY29tbWFuZHMgKi8KKwkJCW4rKzsgLyogdXNlIHRoZSBlbnRyeSBmcm9tIGNvbW1vbl9jbWRzW10gKi8KKwkJCWlmICghcHJlZml4Y21wKGNhbmRpZGF0ZSwgY21kKSkgeworCQkJCS8qIEdpdmUgcHJlZml4IG1hdGNoIGEgdmVyeSBnb29kIHNjb3JlICovCisJCQkJbWFpbl9jbWRzLm5hbWVzW2ldLT5sZW4gPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJbWFpbl9jbWRzLm5hbWVzW2ldLT5sZW4gPQorCQkJbGV2ZW5zaHRlaW4oY21kLCBjYW5kaWRhdGUsIDAsIDIsIDEsIDMpICsgMTsKKwl9CisKKwlxc29ydChtYWluX2NtZHMubmFtZXMsIG1haW5fY21kcy5jbnQsCisJICAgICAgc2l6ZW9mKCptYWluX2NtZHMubmFtZXMpLCBsZXZlbnNodGVpbl9jb21wYXJlKTsKKworCWlmICghbWFpbl9jbWRzLmNudCkKKwkJZGllKF8oIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIikpOworCisJLyogc2tpcCBhbmQgY291bnQgcHJlZml4IG1hdGNoZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgbWFpbl9jbWRzLmNudCAmJiAhbWFpbl9jbWRzLm5hbWVzW25dLT5sZW47IG4rKykKKwkJOyAvKiBzdGlsbCBjb3VudGluZyAqLworCisJaWYgKG1haW5fY21kcy5jbnQgPD0gbikgeworCQkvKiBwcmVmaXggbWF0Y2hlcyB3aXRoIGV2ZXJ5dGhpbmc/IHRoYXQgaXMgdG9vIGFtYmlndW91cyAqLworCQliZXN0X3NpbWlsYXJpdHkgPSBTSU1JTEFSSVRZX0ZMT09SICsgMTsKKwl9IGVsc2UgeworCQkvKiBjb3VudCBhbGwgdGhlIG1vc3Qgc2ltaWxhciBvbmVzICovCisJCWZvciAoYmVzdF9zaW1pbGFyaXR5ID0gbWFpbl9jbWRzLm5hbWVzW24rK10tPmxlbjsKKwkJICAgICAobiA8IG1haW5fY21kcy5jbnQgJiYKKwkJICAgICAgYmVzdF9zaW1pbGFyaXR5ID09IG1haW5fY21kcy5uYW1lc1tuXS0+bGVuKTsKKwkJICAgICBuKyspCisJCQk7IC8qIHN0aWxsIGNvdW50aW5nICovCisJfQorCWlmIChhdXRvY29ycmVjdCAmJiBuID09IDEgJiYgU0lNSUxBUl9FTk9VR0goYmVzdF9zaW1pbGFyaXR5KSkgeworCQljb25zdCBjaGFyICphc3N1bWVkID0gbWFpbl9jbWRzLm5hbWVzWzBdLT5uYW1lOworCQltYWluX2NtZHMubmFtZXNbMF0gPSBOVUxMOworCQljbGVhbl9jbWRuYW1lcygmbWFpbl9jbWRzKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBfKCJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgIgorCQkJICAgICAid2hpY2ggZG9lcyBub3QgZXhpc3QuXG4iCisJCQkgICAgICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcyciKSwKKwkJCWNtZCwgYXNzdW1lZCk7CisJCWlmIChhdXRvY29ycmVjdCA+IDApIHsKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iKSwKKwkJCQkoZmxvYXQpYXV0b2NvcnJlY3QvMTAuMCk7CisJCQlwb2xsKE5VTEwsIDAsIGF1dG9jb3JyZWN0ICogMTAwKTsKKwkJfQorCQlyZXR1cm4gYXNzdW1lZDsKKwl9CisKKwlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIpLCBjbWQpOworCisJaWYgKFNJTUlMQVJfRU5PVUdIKGJlc3Rfc2ltaWxhcml0eSkpIHsKKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBRXygiXG5EaWQgeW91IG1lYW4gdGhpcz8iLAorCQkJICAgICAgIlxuRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iLAorCQkJICAgbikpOworCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIlx0JXNcbiIsIG1haW5fY21kcy5uYW1lc1tpXS0+bmFtZSk7CisJfQorCisJZXhpdCgxKTsKK30KKworaW50IGNtZF92ZXJzaW9uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXByaW50ZigiZ2l0IHZlcnNpb24gJXNcbiIsIGdpdF92ZXJzaW9uX3N0cmluZyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9oZWxwLmggYi9oZWxwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlNWExMgotLS0gL2Rldi9udWxsCisrKyBiL2hlbHAuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIEhFTFBfSAorI2RlZmluZSBIRUxQX0gKKworc3RydWN0IGNtZG5hbWVzIHsKKwlpbnQgYWxsb2M7CisJaW50IGNudDsKKwlzdHJ1Y3QgY21kbmFtZSB7CisJCXNpemVfdCBsZW47IC8qIGFsc28gdXNlZCBmb3Igc2ltaWxhcml0eSBpbmRleCBpbiBoZWxwLmMgKi8KKwkJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworCX0gKipuYW1lczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtcHV0X2NoYXIoY2hhciBjLCB1bnNpZ25lZCBpbnQgbnVtKQoreworCXdoaWxlKG51bS0tKQorCQlwdXRjaGFyKGMpOworfQorCitleHRlcm4gdm9pZCBsaXN0X2NvbW1vbl9jbWRzX2hlbHAodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqaGVscF91bmtub3duX2NtZChjb25zdCBjaGFyICpjbWQpOworZXh0ZXJuIHZvaWQgbG9hZF9jb21tYW5kX2xpc3QoY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICAgc3RydWN0IGNtZG5hbWVzICptYWluX2NtZHMsCisJCQkgICAgICBzdHJ1Y3QgY21kbmFtZXMgKm90aGVyX2NtZHMpOworZXh0ZXJuIHZvaWQgYWRkX2NtZG5hbWUoc3RydWN0IGNtZG5hbWVzICpjbWRzLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKKy8qIEhlcmUgd2UgcmVxdWlyZSB0aGF0IGV4Y2x1ZGVzIGlzIGEgc29ydGVkIGxpc3QuICovCitleHRlcm4gdm9pZCBleGNsdWRlX2NtZHMoc3RydWN0IGNtZG5hbWVzICpjbWRzLCBzdHJ1Y3QgY21kbmFtZXMgKmV4Y2x1ZGVzKTsKK2V4dGVybiBpbnQgaXNfaW5fY21kbGlzdChzdHJ1Y3QgY21kbmFtZXMgKmNtZHMsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgbGlzdF9jb21tYW5kcyh1bnNpZ25lZCBpbnQgY29sb3B0cywgc3RydWN0IGNtZG5hbWVzICptYWluX2NtZHMsIHN0cnVjdCBjbWRuYW1lcyAqb3RoZXJfY21kcyk7CisKKyNlbmRpZiAvKiBIRUxQX0ggKi8KZGlmZiAtLWdpdCBhL2hleC5jIGIvaGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWViYzA1MAotLS0gL2Rldi9udWxsCisrKyBiL2hleC5jCkBAIC0wLDAgKzEsNzUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitjb25zdCBzaWduZWQgY2hhciBoZXh2YWxfdGFibGVbMjU2XSA9IHsKKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMDAtMDcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMDgtMGYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMTAtMTcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMTgtMWYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMjAtMjcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMjgtMmYgKi8KKwkgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LAkJLyogMzAtMzcgKi8KKwkgIDgsICA5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMzgtM2YgKi8KKwkgLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLAkJLyogNDAtNDcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNDgtNGYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNTAtNTcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNTgtNWYgKi8KKwkgLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLAkJLyogNjAtNjcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNjgtNjcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNzAtNzcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNzgtN2YgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogODAtODcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogODgtOGYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogOTAtOTcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogOTgtOWYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYTAtYTcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYTgtYWYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYjAtYjcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYjgtYmYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYzAtYzcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYzgtY2YgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZDAtZDcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZDgtZGYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZTAtZTcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZTgtZWYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZjAtZjcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZjgtZmYgKi8KK307CisKK2ludCBnZXRfc2hhMV9oZXgoY29uc3QgY2hhciAqaGV4LCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB2YWw7CisJCS8qCisJCSAqIGhleFsxXT09J1wwJyBpcyBjYXVnaHQgd2hlbiB2YWwgaXMgY2hlY2tlZCBiZWxvdywKKwkJICogYnV0IGlmIGhleFswXSBpcyBOVUwgd2UgaGF2ZSB0byBhdm9pZCByZWFkaW5nCisJCSAqIHBhc3QgdGhlIGVuZCBvZiB0aGUgc3RyaW5nOgorCQkgKi8KKwkJaWYgKCFoZXhbMF0pCisJCQlyZXR1cm4gLTE7CisJCXZhbCA9IChoZXh2YWwoaGV4WzBdKSA8PCA0KSB8IGhleHZhbChoZXhbMV0pOworCQlpZiAodmFsICYgfjB4ZmYpCisJCQlyZXR1cm4gLTE7CisJCSpzaGExKysgPSB2YWw7CisJCWhleCArPSAyOworCX0KKwlyZXR1cm4gMDsKK30KKworY2hhciAqc2hhMV90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgaW50IGJ1Zm5vOworCXN0YXRpYyBjaGFyIGhleGJ1ZmZlcls0XVs1MF07CisJc3RhdGljIGNvbnN0IGNoYXIgaGV4W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJY2hhciAqYnVmZmVyID0gaGV4YnVmZmVyWzMgJiArK2J1Zm5vXSwgKmJ1ZiA9IGJ1ZmZlcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB2YWwgPSAqc2hhMSsrOworCQkqYnVmKysgPSBoZXhbdmFsID4+IDRdOworCQkqYnVmKysgPSBoZXhbdmFsICYgMHhmXTsKKwl9CisJKmJ1ZiA9ICdcMCc7CisKKwlyZXR1cm4gYnVmZmVyOworfQpkaWZmIC0tZ2l0IGEvaHR0cC1iYWNrZW5kLmMgYi9odHRwLWJhY2tlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTBlNzdmCi0tLSAvZGV2L251bGwKKysrIGIvaHR0cC1iYWNrZW5kLmMKQEAgLTAsMCArMSw2MDAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgY29udGVudF90eXBlW10gPSAiQ29udGVudC1UeXBlIjsKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnRlbnRfbGVuZ3RoW10gPSAiQ29udGVudC1MZW5ndGgiOworc3RhdGljIGNvbnN0IGNoYXIgbGFzdF9tb2RpZmllZFtdID0gIkxhc3QtTW9kaWZpZWQiOworc3RhdGljIGludCBnZXRhbnlmaWxlID0gMTsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCAqcXVlcnlfcGFyYW1zOworCitzdHJ1Y3QgcnBjX3NlcnZpY2UgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqY29uZmlnX25hbWU7CisJc2lnbmVkIGVuYWJsZWQgOiAyOworfTsKKworc3RhdGljIHN0cnVjdCBycGNfc2VydmljZSBycGNfc2VydmljZVtdID0geworCXsgInVwbG9hZC1wYWNrIiwgInVwbG9hZHBhY2siLCAxIH0sCisJeyAicmVjZWl2ZS1wYWNrIiwgInJlY2VpdmVwYWNrIiwgLTEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmdldF9wYXJhbWV0ZXJzKHZvaWQpCit7CisJaWYgKCFxdWVyeV9wYXJhbXMpIHsKKwkJY29uc3QgY2hhciAqcXVlcnkgPSBnZXRlbnYoIlFVRVJZX1NUUklORyIpOworCisJCXF1ZXJ5X3BhcmFtcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpxdWVyeV9wYXJhbXMpKTsKKwkJd2hpbGUgKHF1ZXJ5ICYmICpxdWVyeSkgeworCQkJY2hhciAqbmFtZSA9IHVybF9kZWNvZGVfcGFyYW1ldGVyX25hbWUoJnF1ZXJ5KTsKKwkJCWNoYXIgKnZhbHVlID0gdXJsX2RlY29kZV9wYXJhbWV0ZXJfdmFsdWUoJnF1ZXJ5KTsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppOworCisJCQlpID0gc3RyaW5nX2xpc3RfbG9va3VwKHF1ZXJ5X3BhcmFtcywgbmFtZSk7CisJCQlpZiAoIWkpCisJCQkJaSA9IHN0cmluZ19saXN0X2luc2VydChxdWVyeV9wYXJhbXMsIG5hbWUpOworCQkJZWxzZQorCQkJCWZyZWUoaS0+dXRpbCk7CisJCQlpLT51dGlsID0gdmFsdWU7CisJCX0KKwl9CisJcmV0dXJuIHF1ZXJ5X3BhcmFtczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9wYXJhbWV0ZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaTsKKwlpID0gc3RyaW5nX2xpc3RfbG9va3VwKGdldF9wYXJhbWV0ZXJzKCksIG5hbWUpOworCXJldHVybiBpID8gaS0+dXRpbCA6IE5VTEw7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitzdGF0aWMgdm9pZCBmb3JtYXRfd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdGF0aWMgY2hhciBidWZmZXJbMTAyNF07CisKKwl2YV9saXN0IGFyZ3M7CisJdW5zaWduZWQgbjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbiA9IHZzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlpZiAobiA+PSBzaXplb2YoYnVmZmVyKSkKKwkJZGllKCJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiKTsKKworCXNhZmVfd3JpdGUoZmQsIGJ1ZmZlciwgbik7Cit9CisKK3N0YXRpYyB2b2lkIGh0dHBfc3RhdHVzKHVuc2lnbmVkIGNvZGUsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlmb3JtYXRfd3JpdGUoMSwgIlN0YXR1czogJXUgJXNcclxuIiwgY29kZSwgbXNnKTsKK30KKworc3RhdGljIHZvaWQgaGRyX3N0cihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlmb3JtYXRfd3JpdGUoMSwgIiVzOiAlc1xyXG4iLCBuYW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhkcl9pbnQoY29uc3QgY2hhciAqbmFtZSwgdWludG1heF90IHZhbHVlKQoreworCWZvcm1hdF93cml0ZSgxLCAiJXM6ICUiIFBSSXVNQVggIlxyXG4iLCBuYW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhkcl9kYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgd2hlbikKK3sKKwljb25zdCBjaGFyICp2YWx1ZSA9IHNob3dfZGF0ZSh3aGVuLCAwLCBEQVRFX1JGQzI4MjIpOworCWhkcl9zdHIobmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBoZHJfbm9jYWNoZSh2b2lkKQoreworCWhkcl9zdHIoIkV4cGlyZXMiLCAiRnJpLCAwMSBKYW4gMTk4MCAwMDowMDowMCBHTVQiKTsKKwloZHJfc3RyKCJQcmFnbWEiLCAibm8tY2FjaGUiKTsKKwloZHJfc3RyKCJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZSIpOworfQorCitzdGF0aWMgdm9pZCBoZHJfY2FjaGVfZm9yZXZlcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbm93ID0gdGltZShOVUxMKTsKKwloZHJfZGF0ZSgiRGF0ZSIsIG5vdyk7CisJaGRyX2RhdGUoIkV4cGlyZXMiLCBub3cgKyAzMTUzNjAwMCk7CisJaGRyX3N0cigiQ2FjaGUtQ29udHJvbCIsICJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAiKTsKK30KKworc3RhdGljIHZvaWQgZW5kX2hlYWRlcnModm9pZCkKK3sKKwlzYWZlX3dyaXRlKDEsICJcclxuIiwgMik7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBub3RfZm91bmQoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwlodHRwX3N0YXR1cyg0MDQsICJOb3QgRm91bmQiKTsKKwloZHJfbm9jYWNoZSgpOworCWVuZF9oZWFkZXJzKCk7CisKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJaWYgKGVyciAmJiAqZXJyKQorCQl2ZnByaW50ZihzdGRlcnIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlleGl0KDApOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIE5PUkVUVVJOIHZvaWQgZm9yYmlkZGVuKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCisJaHR0cF9zdGF0dXMoNDAzLCAiRm9yYmlkZGVuIik7CisJaGRyX25vY2FjaGUoKTsKKwllbmRfaGVhZGVycygpOworCisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWlmIChlcnIgJiYgKmVycikKKwkJdmZwcmludGYoc3RkZXJyLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJZXhpdCgwKTsKK30KKworc3RhdGljIHZvaWQgc2VsZWN0X2dldGFueWZpbGUodm9pZCkKK3sKKwlpZiAoIWdldGFueWZpbGUpCisJCWZvcmJpZGRlbigiVW5zdXBwb3J0ZWQgc2VydmljZTogZ2V0YW55ZmlsZSIpOworfQorCitzdGF0aWMgdm9pZCBzZW5kX3N0cmJ1Zihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaGRyX2ludChjb250ZW50X2xlbmd0aCwgYnVmLT5sZW4pOworCWhkcl9zdHIoY29udGVudF90eXBlLCB0eXBlKTsKKwllbmRfaGVhZGVycygpOworCXNhZmVfd3JpdGUoMSwgYnVmLT5idWYsIGJ1Zi0+bGVuKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9sb2NhbF9maWxlKGNvbnN0IGNoYXIgKnRoZV90eXBlLCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKnAgPSBnaXRfcGF0aCgiJXMiLCBuYW1lKTsKKwlzaXplX3QgYnVmX2FsbG9jID0gODE5MjsKKwljaGFyICpidWYgPSB4bWFsbG9jKGJ1Zl9hbGxvYyk7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHNiOworCisJZmQgPSBvcGVuKHAsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlub3RfZm91bmQoIkNhbm5vdCBvcGVuICclcyc6ICVzIiwgcCwgc3RyZXJyb3IoZXJybm8pKTsKKwlpZiAoZnN0YXQoZmQsICZzYikgPCAwKQorCQlkaWVfZXJybm8oIkNhbm5vdCBzdGF0ICclcyciLCBwKTsKKworCWhkcl9pbnQoY29udGVudF9sZW5ndGgsIHNiLnN0X3NpemUpOworCWhkcl9zdHIoY29udGVudF90eXBlLCB0aGVfdHlwZSk7CisJaGRyX2RhdGUobGFzdF9tb2RpZmllZCwgc2Iuc3RfbXRpbWUpOworCWVuZF9oZWFkZXJzKCk7CisKKwlmb3IgKDs7KSB7CisJCXNzaXplX3QgbiA9IHhyZWFkKGZkLCBidWYsIGJ1Zl9hbGxvYyk7CisJCWlmIChuIDwgMCkKKwkJCWRpZV9lcnJubygiQ2Fubm90IHJlYWQgJyVzJyIsIHApOworCQlpZiAoIW4pCisJCQlicmVhazsKKwkJc2FmZV93cml0ZSgxLCBidWYsIG4pOworCX0KKwljbG9zZShmZCk7CisJZnJlZShidWYpOworfQorCitzdGF0aWMgdm9pZCBnZXRfdGV4dF9maWxlKGNoYXIgKm5hbWUpCit7CisJc2VsZWN0X2dldGFueWZpbGUoKTsKKwloZHJfbm9jYWNoZSgpOworCXNlbmRfbG9jYWxfZmlsZSgidGV4dC9wbGFpbiIsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBnZXRfbG9vc2Vfb2JqZWN0KGNoYXIgKm5hbWUpCit7CisJc2VsZWN0X2dldGFueWZpbGUoKTsKKwloZHJfY2FjaGVfZm9yZXZlcigpOworCXNlbmRfbG9jYWxfZmlsZSgiYXBwbGljYXRpb24veC1naXQtbG9vc2Utb2JqZWN0IiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9wYWNrX2ZpbGUoY2hhciAqbmFtZSkKK3sKKwlzZWxlY3RfZ2V0YW55ZmlsZSgpOworCWhkcl9jYWNoZV9mb3JldmVyKCk7CisJc2VuZF9sb2NhbF9maWxlKCJhcHBsaWNhdGlvbi94LWdpdC1wYWNrZWQtb2JqZWN0cyIsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBnZXRfaWR4X2ZpbGUoY2hhciAqbmFtZSkKK3sKKwlzZWxlY3RfZ2V0YW55ZmlsZSgpOworCWhkcl9jYWNoZV9mb3JldmVyKCk7CisJc2VuZF9sb2NhbF9maWxlKCJhcHBsaWNhdGlvbi94LWdpdC1wYWNrZWQtb2JqZWN0cy10b2MiLCBuYW1lKTsKK30KKworc3RhdGljIGludCBodHRwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJodHRwLmdldGFueWZpbGUiKSkgeworCQlnZXRhbnlmaWxlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXByZWZpeGNtcCh2YXIsICJodHRwLiIpKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJwY19zZXJ2aWNlKTsgaSsrKSB7CisJCQlzdHJ1Y3QgcnBjX3NlcnZpY2UgKnN2YyA9ICZycGNfc2VydmljZVtpXTsKKwkJCWlmICghc3RyY21wKHZhciArIDUsIHN2Yy0+Y29uZmlnX25hbWUpKSB7CisJCQkJc3ZjLT5lbmFibGVkID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJLyogd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHBhcnNpbmcgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gaGVyZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJwY19zZXJ2aWNlICpzZWxlY3Rfc2VydmljZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBycGNfc2VydmljZSAqc3ZjID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChwcmVmaXhjbXAobmFtZSwgImdpdC0iKSkKKwkJZm9yYmlkZGVuKCJVbnN1cHBvcnRlZCBzZXJ2aWNlOiAnJXMnIiwgbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShycGNfc2VydmljZSk7IGkrKykgeworCQlzdHJ1Y3QgcnBjX3NlcnZpY2UgKnMgPSAmcnBjX3NlcnZpY2VbaV07CisJCWlmICghc3RyY21wKHMtPm5hbWUsIG5hbWUgKyA0KSkgeworCQkJc3ZjID0gczsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFzdmMpCisJCWZvcmJpZGRlbigiVW5zdXBwb3J0ZWQgc2VydmljZTogJyVzJyIsIG5hbWUpOworCisJaWYgKHN2Yy0+ZW5hYmxlZCA8IDApIHsKKwkJY29uc3QgY2hhciAqdXNlciA9IGdldGVudigiUkVNT1RFX1VTRVIiKTsKKwkJc3ZjLT5lbmFibGVkID0gKHVzZXIgJiYgKnVzZXIpID8gMSA6IDA7CisJfQorCWlmICghc3ZjLT5lbmFibGVkKQorCQlmb3JiaWRkZW4oIlNlcnZpY2Ugbm90IGVuYWJsZWQ6ICclcyciLCBzdmMtPm5hbWUpOworCXJldHVybiBzdmM7Cit9CisKK3N0YXRpYyB2b2lkIGluZmxhdGVfcmVxdWVzdChjb25zdCBjaGFyICpwcm9nX25hbWUsIGludCBvdXQpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXVuc2lnbmVkIGNoYXIgaW5fYnVmWzgxOTJdOworCXVuc2lnbmVkIGNoYXIgb3V0X2J1Zls4MTkyXTsKKwl1bnNpZ25lZCBsb25nIGNudCA9IDA7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCWdpdF9pbmZsYXRlX2luaXRfZ3ppcF9vbmx5KCZzdHJlYW0pOworCisJd2hpbGUgKDEpIHsKKwkJc3NpemVfdCBuID0geHJlYWQoMCwgaW5fYnVmLCBzaXplb2YoaW5fYnVmKSk7CisJCWlmIChuIDw9IDApCisJCQlkaWUoInJlcXVlc3QgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZ3ppcCBzdHJlYW0iKTsKKworCQlzdHJlYW0ubmV4dF9pbiA9IGluX2J1ZjsKKwkJc3RyZWFtLmF2YWlsX2luID0gbjsKKworCQl3aGlsZSAoMCA8IHN0cmVhbS5hdmFpbF9pbikgeworCQkJaW50IHJldDsKKworCQkJc3RyZWFtLm5leHRfb3V0ID0gb3V0X2J1ZjsKKwkJCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2Yob3V0X2J1Zik7CisKKwkJCXJldCA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIFpfTk9fRkxVU0gpOworCQkJaWYgKHJldCAhPSBaX09LICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpCisJCQkJZGllKCJ6bGliIGVycm9yIGluZmxhdGluZyByZXF1ZXN0LCByZXN1bHQgJWQiLCByZXQpOworCisJCQluID0gc3RyZWFtLnRvdGFsX291dCAtIGNudDsKKwkJCWlmICh3cml0ZV9pbl9mdWxsKG91dCwgb3V0X2J1ZiwgbikgIT0gbikKKwkJCQlkaWUoIiVzIGFib3J0ZWQgcmVhZGluZyByZXF1ZXN0IiwgcHJvZ19uYW1lKTsKKwkJCWNudCArPSBuOworCisJCQlpZiAocmV0ID09IFpfU1RSRUFNX0VORCkKKwkJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKK2RvbmU6CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCWNsb3NlKG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9zZXJ2aWNlKGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKmVuY29kaW5nID0gZ2V0ZW52KCJIVFRQX0NPTlRFTlRfRU5DT0RJTkciKTsKKwljb25zdCBjaGFyICp1c2VyID0gZ2V0ZW52KCJSRU1PVEVfVVNFUiIpOworCWNvbnN0IGNoYXIgKmhvc3QgPSBnZXRlbnYoIlJFTU9URV9BRERSIik7CisJc3RydWN0IGFyZ3ZfYXJyYXkgZW52ID0gQVJHVl9BUlJBWV9JTklUOworCWludCBnemlwcGVkX3JlcXVlc3QgPSAwOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsZDsKKworCWlmIChlbmNvZGluZyAmJiAhc3RyY21wKGVuY29kaW5nLCAiZ3ppcCIpKQorCQlnemlwcGVkX3JlcXVlc3QgPSAxOworCWVsc2UgaWYgKGVuY29kaW5nICYmICFzdHJjbXAoZW5jb2RpbmcsICJ4LWd6aXAiKSkKKwkJZ3ppcHBlZF9yZXF1ZXN0ID0gMTsKKworCWlmICghdXNlciB8fCAhKnVzZXIpCisJCXVzZXIgPSAiYW5vbnltb3VzIjsKKwlpZiAoIWhvc3QgfHwgISpob3N0KQorCQlob3N0ID0gIihub25lKSI7CisKKwlpZiAoIWdldGVudigiR0lUX0NPTU1JVFRFUl9OQU1FIikpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmVudiwgIkdJVF9DT01NSVRURVJfTkFNRT0lcyIsIHVzZXIpOworCWlmICghZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0VNQUlMIikpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmVudiwgIkdJVF9DT01NSVRURVJfRU1BSUw9JXNAaHR0cC4lcyIsCisJCQkJIHVzZXIsIGhvc3QpOworCisJbWVtc2V0KCZjbGQsIDAsIHNpemVvZihjbGQpKTsKKwljbGQuYXJndiA9IGFyZ3Y7CisJY2xkLmVudiA9IGVudi5hcmd2OworCWlmIChnemlwcGVkX3JlcXVlc3QpCisJCWNsZC5pbiA9IC0xOworCWNsZC5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2xkKSkKKwkJZXhpdCgxKTsKKworCWNsb3NlKDEpOworCWlmIChnemlwcGVkX3JlcXVlc3QpCisJCWluZmxhdGVfcmVxdWVzdChhcmd2WzBdLCBjbGQuaW4pOworCWVsc2UKKwkJY2xvc2UoMCk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNsZCkpCisJCWV4aXQoMSk7CisJYXJndl9hcnJheV9jbGVhcigmZW52KTsKK30KKworc3RhdGljIGludCBzaG93X3RleHRfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gY2JfZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWlmICghbykKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfYWRkZihidWYsICIlc1x0JXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCBuYW1lKTsKKwlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBkZXJlZl90YWcobywgbmFtZSwgMCk7CisJCWlmICghbykKKwkJCXJldHVybiAwOworCQlzdHJidWZfYWRkZihidWYsICIlc1x0JXNee31cbiIsIHNoYTFfdG9faGV4KG8tPnNoYTEpLCBuYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9pbmZvX3JlZnMoY2hhciAqYXJnKQoreworCWNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZSA9IGdldF9wYXJhbWV0ZXIoInNlcnZpY2UiKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaGRyX25vY2FjaGUoKTsKKworCWlmIChzZXJ2aWNlX25hbWUpIHsKKwkJY29uc3QgY2hhciAqYXJndltdID0ge05VTEwgLyogc2VydmljZSBuYW1lICovLAorCQkJIi0tc3RhdGVsZXNzLXJwYyIsICItLWFkdmVydGlzZS1yZWZzIiwKKwkJCSIuIiwgTlVMTH07CisJCXN0cnVjdCBycGNfc2VydmljZSAqc3ZjID0gc2VsZWN0X3NlcnZpY2Uoc2VydmljZV9uYW1lKTsKKworCQlzdHJidWZfYWRkZigmYnVmLCAiYXBwbGljYXRpb24veC1naXQtJXMtYWR2ZXJ0aXNlbWVudCIsCisJCQlzdmMtPm5hbWUpOworCQloZHJfc3RyKGNvbnRlbnRfdHlwZSwgYnVmLmJ1Zik7CisJCWVuZF9oZWFkZXJzKCk7CisKKwkJcGFja2V0X3dyaXRlKDEsICIjIHNlcnZpY2U9Z2l0LSVzXG4iLCBzdmMtPm5hbWUpOworCQlwYWNrZXRfZmx1c2goMSk7CisKKwkJYXJndlswXSA9IHN2Yy0+bmFtZTsKKwkJcnVuX3NlcnZpY2UoYXJndik7CisKKwl9IGVsc2UgeworCQlzZWxlY3RfZ2V0YW55ZmlsZSgpOworCQlmb3JfZWFjaF9yZWYoc2hvd190ZXh0X3JlZiwgJmJ1Zik7CisJCXNlbmRfc3RyYnVmKCJ0ZXh0L3BsYWluIiwgJmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCBnZXRfaW5mb19wYWNrcyhjaGFyICphcmcpCit7CisJc2l6ZV90IG9iamRpcmxlbiA9IHN0cmxlbihnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCXNpemVfdCBjbnQgPSAwOworCisJc2VsZWN0X2dldGFueWZpbGUoKTsKKwlwcmVwYXJlX3BhY2tlZF9naXQoKTsKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+cGFja19sb2NhbCkKKwkJCWNudCsrOworCX0KKworCXN0cmJ1Zl9ncm93KCZidWYsIGNudCAqIDUzICsgMik7CisJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPnBhY2tfbG9jYWwpCisJCQlzdHJidWZfYWRkZigmYnVmLCAiUCAlc1xuIiwgcC0+cGFja19uYW1lICsgb2JqZGlybGVuICsgNik7CisJfQorCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKworCWhkcl9ub2NhY2hlKCk7CisJc2VuZF9zdHJidWYoInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCAmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfY29udGVudF90eXBlKGNvbnN0IGNoYXIgKmFjY2VwdGVkX3R5cGUpCit7CisJY29uc3QgY2hhciAqYWN0dWFsX3R5cGUgPSBnZXRlbnYoIkNPTlRFTlRfVFlQRSIpOworCisJaWYgKCFhY3R1YWxfdHlwZSkKKwkJYWN0dWFsX3R5cGUgPSAiIjsKKworCWlmIChzdHJjbXAoYWN0dWFsX3R5cGUsIGFjY2VwdGVkX3R5cGUpKSB7CisJCWh0dHBfc3RhdHVzKDQxNSwgIlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiKTsKKwkJaGRyX25vY2FjaGUoKTsKKwkJZW5kX2hlYWRlcnMoKTsKKwkJZm9ybWF0X3dyaXRlKDEsCisJCQkiRXhwZWN0ZWQgUE9TVCB3aXRoIENvbnRlbnQtVHlwZSAnJXMnLCIKKwkJCSIgYnV0IHJlY2VpdmVkICclcycgaW5zdGVhZC5cbiIsCisJCQlhY2NlcHRlZF90eXBlLCBhY3R1YWxfdHlwZSk7CisJCWV4aXQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXJ2aWNlX3JwYyhjaGFyICpzZXJ2aWNlX25hbWUpCit7CisJY29uc3QgY2hhciAqYXJndltdID0ge05VTEwsICItLXN0YXRlbGVzcy1ycGMiLCAiLiIsIE5VTEx9OworCXN0cnVjdCBycGNfc2VydmljZSAqc3ZjID0gc2VsZWN0X3NlcnZpY2Uoc2VydmljZV9uYW1lKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJhcHBsaWNhdGlvbi94LWdpdC0lcy1yZXF1ZXN0Iiwgc3ZjLT5uYW1lKTsKKwljaGVja19jb250ZW50X3R5cGUoYnVmLmJ1Zik7CisKKwloZHJfbm9jYWNoZSgpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJhcHBsaWNhdGlvbi94LWdpdC0lcy1yZXN1bHQiLCBzdmMtPm5hbWUpOworCWhkcl9zdHIoY29udGVudF90eXBlLCBidWYuYnVmKTsKKworCWVuZF9oZWFkZXJzKCk7CisKKwlhcmd2WzBdID0gc3ZjLT5uYW1lOworCXJ1bl9zZXJ2aWNlKGFyZ3YpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfd2ViY2dpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJc3RhdGljIGludCBkZWFkOworCisJaWYgKCFkZWFkKSB7CisJCWRlYWQgPSAxOworCQlodHRwX3N0YXR1cyg1MDAsICJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiKTsKKwkJaGRyX25vY2FjaGUoKTsKKwkJZW5kX2hlYWRlcnMoKTsKKworCQl2cmVwb3J0ZigiZmF0YWw6ICIsIGVyciwgcGFyYW1zKTsKKwl9CisJZXhpdCgwKTsgLyogd2Ugc3VjY2Vzc2Z1bGx5IHJlcG9ydGVkIGEgZmFpbHVyZSA7LSkgKi8KK30KKworc3RhdGljIGNoYXIqIGdldGRpcih2b2lkKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aGluZm8gPSBnZXRlbnYoIlBBVEhfSU5GTyIpOworCWNoYXIgKnJvb3QgPSBnZXRlbnYoIkdJVF9QUk9KRUNUX1JPT1QiKTsKKwljaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIX1RSQU5TTEFURUQiKTsKKworCWlmIChyb290ICYmICpyb290KSB7CisJCWlmICghcGF0aGluZm8gfHwgISpwYXRoaW5mbykKKwkJCWRpZSgiR0lUX1BST0pFQ1RfUk9PVCBpcyBzZXQgYnV0IFBBVEhfSU5GTyBpcyBub3QiKTsKKwkJaWYgKGRhZW1vbl9hdm9pZF9hbGlhcyhwYXRoaW5mbykpCisJCQlkaWUoIiclcyc6IGFsaWFzZWQiLCBwYXRoaW5mbyk7CisJCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCByb290KTsKKwkJaWYgKHBhdGhpbmZvWzBdID09ICcvJykKKwkJCXBhdGhpbmZvKys7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcGF0aGluZm8pOworCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwl9IGVsc2UgaWYgKHBhdGggJiYgKnBhdGgpIHsKKwkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJfSBlbHNlCisJCWRpZSgiTm8gR0lUX1BST0pFQ1RfUk9PVCBvciBQQVRIX1RSQU5TTEFURUQgZnJvbSBzZXJ2ZXIiKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzZXJ2aWNlX2NtZCB7CisJY29uc3QgY2hhciAqbWV0aG9kOworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJdm9pZCAoKmltcCkoY2hhciAqKTsKK30gc2VydmljZXNbXSA9IHsKKwl7IkdFVCIsICIvSEVBRCQiLCBnZXRfdGV4dF9maWxlfSwKKwl7IkdFVCIsICIvaW5mby9yZWZzJCIsIGdldF9pbmZvX3JlZnN9LAorCXsiR0VUIiwgIi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyQiLCBnZXRfdGV4dF9maWxlfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyQiLCBnZXRfdGV4dF9maWxlfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9pbmZvL3BhY2tzJCIsIGdldF9pbmZvX3BhY2tzfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9bMC05YS1mXXsyfS9bMC05YS1mXXszOH0kIiwgZ2V0X2xvb3NlX29iamVjdH0sCisJeyJHRVQiLCAiL29iamVjdHMvcGFjay9wYWNrLVswLTlhLWZdezQwfVxcLnBhY2skIiwgZ2V0X3BhY2tfZmlsZX0sCisJeyJHRVQiLCAiL29iamVjdHMvcGFjay9wYWNrLVswLTlhLWZdezQwfVxcLmlkeCQiLCBnZXRfaWR4X2ZpbGV9LAorCisJeyJQT1NUIiwgIi9naXQtdXBsb2FkLXBhY2skIiwgc2VydmljZV9ycGN9LAorCXsiUE9TVCIsICIvZ2l0LXJlY2VpdmUtcGFjayQiLCBzZXJ2aWNlX3JwY30KK307CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyICptZXRob2QgPSBnZXRlbnYoIlJFUVVFU1RfTUVUSE9EIik7CisJY2hhciAqZGlyOworCXN0cnVjdCBzZXJ2aWNlX2NtZCAqY21kID0gTlVMTDsKKwljaGFyICpjbWRfYXJnID0gTlVMTDsKKwlpbnQgaTsKKworCWdpdF9zZXR1cF9nZXR0ZXh0KCk7CisKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCXNldF9kaWVfcm91dGluZShkaWVfd2ViY2dpKTsKKworCWlmICghbWV0aG9kKQorCQlkaWUoIk5vIFJFUVVFU1RfTUVUSE9EIGZyb20gc2VydmVyIik7CisJaWYgKCFzdHJjbXAobWV0aG9kLCAiSEVBRCIpKQorCQltZXRob2QgPSAiR0VUIjsKKwlkaXIgPSBnZXRkaXIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlcnZpY2VzKTsgaSsrKSB7CisJCXN0cnVjdCBzZXJ2aWNlX2NtZCAqYyA9ICZzZXJ2aWNlc1tpXTsKKwkJcmVnZXhfdCByZTsKKwkJcmVnbWF0Y2hfdCBvdXRbMV07CisKKwkJaWYgKHJlZ2NvbXAoJnJlLCBjLT5wYXR0ZXJuLCBSRUdfRVhURU5ERUQpKQorCQkJZGllKCJCb2d1cyByZWdleCBpbiBzZXJ2aWNlIHRhYmxlOiAlcyIsIGMtPnBhdHRlcm4pOworCQlpZiAoIXJlZ2V4ZWMoJnJlLCBkaXIsIDEsIG91dCwgMCkpIHsKKwkJCXNpemVfdCBuOworCisJCQlpZiAoc3RyY21wKG1ldGhvZCwgYy0+bWV0aG9kKSkgeworCQkJCWNvbnN0IGNoYXIgKnByb3RvID0gZ2V0ZW52KCJTRVJWRVJfUFJPVE9DT0wiKTsKKwkJCQlpZiAocHJvdG8gJiYgIXN0cmNtcChwcm90bywgIkhUVFAvMS4xIikpCisJCQkJCWh0dHBfc3RhdHVzKDQwNSwgIk1ldGhvZCBOb3QgQWxsb3dlZCIpOworCQkJCWVsc2UKKwkJCQkJaHR0cF9zdGF0dXMoNDAwLCAiQmFkIFJlcXVlc3QiKTsKKwkJCQloZHJfbm9jYWNoZSgpOworCQkJCWVuZF9oZWFkZXJzKCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWNtZCA9IGM7CisJCQluID0gb3V0WzBdLnJtX2VvIC0gb3V0WzBdLnJtX3NvOworCQkJY21kX2FyZyA9IHhtYWxsb2Mobik7CisJCQltZW1jcHkoY21kX2FyZywgZGlyICsgb3V0WzBdLnJtX3NvICsgMSwgbi0xKTsKKwkJCWNtZF9hcmdbbi0xXSA9ICdcMCc7CisJCQlkaXJbb3V0WzBdLnJtX3NvXSA9IDA7CisJCQlicmVhazsKKwkJfQorCQlyZWdmcmVlKCZyZSk7CisJfQorCisJaWYgKCFjbWQpCisJCW5vdF9mb3VuZCgiUmVxdWVzdCBub3Qgc3VwcG9ydGVkOiAnJXMnIiwgZGlyKTsKKworCXNldHVwX3BhdGgoKTsKKwlpZiAoIWVudGVyX3JlcG8oZGlyLCAwKSkKKwkJbm90X2ZvdW5kKCJOb3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIsIGRpcik7CisJaWYgKCFnZXRlbnYoIkdJVF9IVFRQX0VYUE9SVF9BTEwiKSAmJgorCSAgICBhY2Nlc3MoImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgRl9PSykgKQorCQlub3RfZm91bmQoIlJlcG9zaXRvcnkgbm90IGV4cG9ydGVkOiAnJXMnIiwgZGlyKTsKKworCWdpdF9jb25maWcoaHR0cF9jb25maWcsIE5VTEwpOworCWNtZC0+aW1wKGNtZF9hcmcpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvaHR0cC1mZXRjaC5jIGIvaHR0cC1mZXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhM2VhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9odHRwLWZldGNoLmMKQEAgLTAsMCArMSw5OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAid2Fsa2VyLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGh0dHBfZmV0Y2hfdXNhZ2VbXSA9ICJnaXQgaHR0cC1mZXRjaCAiCisiWy1jXSBbLXRdIFstYV0gWy12XSBbLS1yZWNvdmVyXSBbLXcgcmVmXSBbLS1zdGRpbl0gY29tbWl0LWlkIHVybCI7CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CisJaW50IGNvbW1pdHNfb25fc3RkaW4gPSAwOworCWludCBjb21taXRzOworCWNvbnN0IGNoYXIgKip3cml0ZV9yZWYgPSBOVUxMOworCWNoYXIgKipjb21taXRfaWQ7CisJY2hhciAqdXJsID0gTlVMTDsKKwlpbnQgYXJnID0gMTsKKwlpbnQgcmMgPSAwOworCWludCBnZXRfdHJlZSA9IDA7CisJaW50IGdldF9oaXN0b3J5ID0gMDsKKwlpbnQgZ2V0X2FsbCA9IDA7CisJaW50IGdldF92ZXJib3NlbHkgPSAwOworCWludCBnZXRfcmVjb3ZlciA9IDA7CisKKwlnaXRfc2V0dXBfZ2V0dGV4dCgpOworCisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKworCXdoaWxlIChhcmcgPCBhcmdjICYmIGFyZ3ZbYXJnXVswXSA9PSAnLScpIHsKKwkJaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndCcpIHsKKwkJCWdldF90cmVlID0gMTsKKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2MnKSB7CisJCQlnZXRfaGlzdG9yeSA9IDE7CisJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdhJykgeworCQkJZ2V0X2FsbCA9IDE7CisJCQlnZXRfdHJlZSA9IDE7CisJCQlnZXRfaGlzdG9yeSA9IDE7CisJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICd2JykgeworCQkJZ2V0X3ZlcmJvc2VseSA9IDE7CisJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICd3JykgeworCQkJd3JpdGVfcmVmID0gJmFyZ3ZbYXJnICsgMV07CisJCQlhcmcrKzsKKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2gnKSB7CisJCQl1c2FnZShodHRwX2ZldGNoX3VzYWdlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbYXJnXSwgIi0tcmVjb3ZlciIpKSB7CisJCQlnZXRfcmVjb3ZlciA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ10sICItLXN0ZGluIikpIHsKKwkJCWNvbW1pdHNfb25fc3RkaW4gPSAxOworCQl9CisJCWFyZysrOworCX0KKwlpZiAoYXJnYyAhPSBhcmcgKyAyIC0gY29tbWl0c19vbl9zdGRpbikKKwkJdXNhZ2UoaHR0cF9mZXRjaF91c2FnZSk7CisJaWYgKGNvbW1pdHNfb25fc3RkaW4pIHsKKwkJY29tbWl0cyA9IHdhbGtlcl90YXJnZXRzX3N0ZGluKCZjb21taXRfaWQsICZ3cml0ZV9yZWYpOworCX0gZWxzZSB7CisJCWNvbW1pdF9pZCA9IChjaGFyICoqKSAmYXJndlthcmcrK107CisJCWNvbW1pdHMgPSAxOworCX0KKworCWlmIChnZXRfYWxsID09IDApCisJCXdhcm5pbmcoImh0dHAtZmV0Y2g6IHVzZSB3aXRob3V0IC1hIGlzIGRlcHJlY2F0ZWQuXG4iCisJCQkiSW4gYSBmdXR1cmUgcmVsZWFzZSwgLWEgd2lsbCBiZWNvbWUgdGhlIGRlZmF1bHQuIik7CisKKwlpZiAoYXJndlthcmddKQorCQlzdHJfZW5kX3VybF93aXRoX3NsYXNoKGFyZ3ZbYXJnXSwgJnVybCk7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlodHRwX2luaXQoTlVMTCwgdXJsLCAwKTsKKwl3YWxrZXIgPSBnZXRfaHR0cF93YWxrZXIodXJsKTsKKwl3YWxrZXItPmdldF90cmVlID0gZ2V0X3RyZWU7CisJd2Fsa2VyLT5nZXRfaGlzdG9yeSA9IGdldF9oaXN0b3J5OworCXdhbGtlci0+Z2V0X2FsbCA9IGdldF9hbGw7CisJd2Fsa2VyLT5nZXRfdmVyYm9zZWx5ID0gZ2V0X3ZlcmJvc2VseTsKKwl3YWxrZXItPmdldF9yZWNvdmVyID0gZ2V0X3JlY292ZXI7CisKKwlyYyA9IHdhbGtlcl9mZXRjaCh3YWxrZXIsIGNvbW1pdHMsIGNvbW1pdF9pZCwgd3JpdGVfcmVmLCB1cmwpOworCisJaWYgKGNvbW1pdHNfb25fc3RkaW4pCisJCXdhbGtlcl90YXJnZXRzX2ZyZWUoY29tbWl0cywgY29tbWl0X2lkLCB3cml0ZV9yZWYpOworCisJaWYgKHdhbGtlci0+Y29ycnVwdF9vYmplY3RfZm91bmQpIHsKKwkJZnByaW50ZihzdGRlcnIsCisiU29tZSBsb29zZSBvYmplY3Qgd2VyZSBmb3VuZCB0byBiZSBjb3JydXB0LCBidXQgdGhleSBtaWdodCBiZSBqdXN0XG4iCisiYSBmYWxzZSAnNDA0IE5vdCBGb3VuZCcgZXJyb3IgbWVzc2FnZSBzZW50IHdpdGggaW5jb3JyZWN0IEhUVFBcbiIKKyJzdGF0dXMgY29kZS4gIFN1Z2dlc3QgcnVubmluZyAnZ2l0IGZzY2snLlxuIik7CisJfQorCisJd2Fsa2VyX2ZyZWUod2Fsa2VyKTsKKwlodHRwX2NsZWFudXAoKTsKKworCWZyZWUodXJsKTsKKworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2h0dHAtcHVzaC5jIGIvaHR0cC1wdXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcwMWMxMgotLS0gL2Rldi9udWxsCisrKyBiL2h0dHAtcHVzaC5jCkBAIC0wLDAgKzEsMjA0NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImh0dHAuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorCisjaW5jbHVkZSA8ZXhwYXQuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgaHR0cF9wdXNoX3VzYWdlW10gPQorImdpdCBodHRwLXB1c2ggWy0tYWxsXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tdmVyYm9zZV0gPHJlbW90ZT4gWzxoZWFkPi4uLl1cbiI7CisKKyNpZm5kZWYgWE1MX1NUQVRVU19PSworZW51bSBYTUxfU3RhdHVzIHsKKyAgWE1MX1NUQVRVU19PSyA9IDEsCisgIFhNTF9TVEFUVVNfRVJST1IgPSAwCit9OworI2RlZmluZSBYTUxfU1RBVFVTX09LICAgIDEKKyNkZWZpbmUgWE1MX1NUQVRVU19FUlJPUiAwCisjZW5kaWYKKworI2RlZmluZSBQUkVWX0JVRl9TSVpFIDQwOTYKKworLyogREFWIG1ldGhvZHMgKi8KKyNkZWZpbmUgREFWX0xPQ0sgIkxPQ0siCisjZGVmaW5lIERBVl9NS0NPTCAiTUtDT0wiCisjZGVmaW5lIERBVl9NT1ZFICJNT1ZFIgorI2RlZmluZSBEQVZfUFJPUEZJTkQgIlBST1BGSU5EIgorI2RlZmluZSBEQVZfUFVUICJQVVQiCisjZGVmaW5lIERBVl9VTkxPQ0sgIlVOTE9DSyIKKyNkZWZpbmUgREFWX0RFTEVURSAiREVMRVRFIgorCisvKiBEQVYgbG9jayBmbGFncyAqLworI2RlZmluZSBEQVZfUFJPUF9MT0NLV1IgKDF1IDw8IDApCisjZGVmaW5lIERBVl9QUk9QX0xPQ0tFWCAoMXUgPDwgMSkKKyNkZWZpbmUgREFWX0xPQ0tfT0sgKDF1IDw8IDIpCisKKy8qIERBViBYTUwgcHJvcGVydGllcyAqLworI2RlZmluZSBEQVZfQ1RYX0xPQ0tFTlRSWSAiLm11bHRpc3RhdHVzLnJlc3BvbnNlLnByb3BzdGF0LnByb3Auc3VwcG9ydGVkbG9jay5sb2NrZW50cnkiCisjZGVmaW5lIERBVl9DVFhfTE9DS1RZUEVfV1JJVEUgIi5tdWx0aXN0YXR1cy5yZXNwb25zZS5wcm9wc3RhdC5wcm9wLnN1cHBvcnRlZGxvY2subG9ja2VudHJ5LmxvY2t0eXBlLndyaXRlIgorI2RlZmluZSBEQVZfQ1RYX0xPQ0tUWVBFX0VYQ0xVU0lWRSAiLm11bHRpc3RhdHVzLnJlc3BvbnNlLnByb3BzdGF0LnByb3Auc3VwcG9ydGVkbG9jay5sb2NrZW50cnkubG9ja3Njb3BlLmV4Y2x1c2l2ZSIKKyNkZWZpbmUgREFWX0FDVElWRUxPQ0tfT1dORVIgIi5wcm9wLmxvY2tkaXNjb3ZlcnkuYWN0aXZlbG9jay5vd25lci5ocmVmIgorI2RlZmluZSBEQVZfQUNUSVZFTE9DS19USU1FT1VUICIucHJvcC5sb2NrZGlzY292ZXJ5LmFjdGl2ZWxvY2sudGltZW91dCIKKyNkZWZpbmUgREFWX0FDVElWRUxPQ0tfVE9LRU4gIi5wcm9wLmxvY2tkaXNjb3ZlcnkuYWN0aXZlbG9jay5sb2NrdG9rZW4uaHJlZiIKKyNkZWZpbmUgREFWX1BST1BGSU5EX1JFU1AgIi5tdWx0aXN0YXR1cy5yZXNwb25zZSIKKyNkZWZpbmUgREFWX1BST1BGSU5EX05BTUUgIi5tdWx0aXN0YXR1cy5yZXNwb25zZS5ocmVmIgorI2RlZmluZSBEQVZfUFJPUEZJTkRfQ09MTEVDVElPTiAiLm11bHRpc3RhdHVzLnJlc3BvbnNlLnByb3BzdGF0LnByb3AucmVzb3VyY2V0eXBlLmNvbGxlY3Rpb24iCisKKy8qIERBViByZXF1ZXN0IGJvZHkgdGVtcGxhdGVzICovCisjZGVmaW5lIFBST1BGSU5EX1NVUFBPUlRFRExPQ0tfUkVRVUVTVCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiA/PlxuPEQ6cHJvcGZpbmQgeG1sbnM6RD1cIkRBVjpcIj5cbjxEOnByb3AgeG1sbnM6Uj1cIiVzXCI+XG48RDpzdXBwb3J0ZWRsb2NrLz5cbjwvRDpwcm9wPlxuPC9EOnByb3BmaW5kPiIKKyNkZWZpbmUgUFJPUEZJTkRfQUxMX1JFUVVFU1QgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgPz5cbjxEOnByb3BmaW5kIHhtbG5zOkQ9XCJEQVY6XCI+XG48RDphbGxwcm9wLz5cbjwvRDpwcm9wZmluZD4iCisjZGVmaW5lIExPQ0tfUkVRVUVTVCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiA/PlxuPEQ6bG9ja2luZm8geG1sbnM6RD1cIkRBVjpcIj5cbjxEOmxvY2tzY29wZT48RDpleGNsdXNpdmUvPjwvRDpsb2Nrc2NvcGU+XG48RDpsb2NrdHlwZT48RDp3cml0ZS8+PC9EOmxvY2t0eXBlPlxuPEQ6b3duZXI+XG48RDpocmVmPm1haWx0bzolczwvRDpocmVmPlxuPC9EOm93bmVyPlxuPC9EOmxvY2tpbmZvPiIKKworI2RlZmluZSBMT0NLX1RJTUUgNjAwCisjZGVmaW5lIExPQ0tfUkVGUkVTSCAzMAorCisvKiBiaXRzICMwLTE1IGluIHJldmlzaW9uLmggKi8KKworI2RlZmluZSBMT0NBTCAgICAoMXU8PDE2KQorI2RlZmluZSBSRU1PVEUgICAoMXU8PDE3KQorI2RlZmluZSBGRVRDSElORyAoMXU8PDE4KQorI2RlZmluZSBQVVNISU5HICAoMXU8PDE5KQorCisvKiBXZSBhbGxvdyAicmVjdXJzaXZlIiBzeW1ib2xpYyByZWZzLiBPbmx5IHdpdGhpbiByZWFzb24sIHRob3VnaCAqLworI2RlZmluZSBNQVhERVBUSCA1CisKK3N0YXRpYyBpbnQgcHVzaGluZzsKK3N0YXRpYyBpbnQgYWJvcnRlZDsKK3N0YXRpYyBzaWduZWQgY2hhciByZW1vdGVfZGlyX2V4aXN0c1syNTZdOworCitzdGF0aWMgaW50IHB1c2hfdmVyYm9zZWx5Oworc3RhdGljIGludCBwdXNoX2FsbCA9IE1BVENIX1JFRlNfTk9ORTsKK3N0YXRpYyBpbnQgZm9yY2VfYWxsOworc3RhdGljIGludCBkcnlfcnVuOworc3RhdGljIGludCBoZWxwZXJfc3RhdHVzOworCitzdGF0aWMgc3RydWN0IG9iamVjdF9saXN0ICpvYmplY3RzOworCitzdHJ1Y3QgcmVwbyB7CisJY2hhciAqdXJsOworCWNoYXIgKnBhdGg7CisJaW50IHBhdGhfbGVuOworCWludCBoYXNfaW5mb19yZWZzOworCWludCBjYW5fdXBkYXRlX2luZm9fcmVmczsKKwlpbnQgaGFzX2luZm9fcGFja3M7CisJc3RydWN0IHBhY2tlZF9naXQgKnBhY2tzOworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9ja3M7Cit9OworCitzdGF0aWMgc3RydWN0IHJlcG8gKnJlcG87CisKK2VudW0gdHJhbnNmZXJfc3RhdGUgeworCU5FRURfRkVUQ0gsCisJUlVOX0ZFVENIX0xPT1NFLAorCVJVTl9GRVRDSF9QQUNLRUQsCisJTkVFRF9QVVNILAorCVJVTl9NS0NPTCwKKwlSVU5fUFVULAorCVJVTl9NT1ZFLAorCUFCT1JURUQsCisJQ09NUExFVEUKK307CisKK3N0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0IHsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJY2hhciAqdXJsOworCWNoYXIgKmRlc3Q7CisJc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrOworCXN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzOworCXN0cnVjdCBidWZmZXIgYnVmZmVyOworCWVudW0gdHJhbnNmZXJfc3RhdGUgc3RhdGU7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJY2hhciBlcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOworCWxvbmcgaHR0cF9jb2RlOworCXZvaWQgKnVzZXJEYXRhOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0X3F1ZXVlX2hlYWQ7CisKK3N0cnVjdCB4bWxfY3R4IHsKKwljaGFyICpuYW1lOworCWludCBsZW47CisJY2hhciAqY2RhdGE7CisJdm9pZCAoKnVzZXJGdW5jKShzdHJ1Y3QgeG1sX2N0eCAqY3R4LCBpbnQgdGFnX2Nsb3NlZCk7CisJdm9pZCAqdXNlckRhdGE7Cit9OworCitzdHJ1Y3QgcmVtb3RlX2xvY2sgeworCWNoYXIgKnVybDsKKwljaGFyICpvd25lcjsKKwljaGFyICp0b2tlbjsKKwljaGFyIHRtcGZpbGVfc3VmZml4WzQxXTsKKwl0aW1lX3Qgc3RhcnRfdGltZTsKKwlsb25nIHRpbWVvdXQ7CisJaW50IHJlZnJlc2hpbmc7CisJc3RydWN0IHJlbW90ZV9sb2NrICpuZXh0OworfTsKKworLyogRmxhZ3MgdGhhdCBjb250cm9sIHJlbW90ZV9scyBwcm9jZXNzaW5nICovCisjZGVmaW5lIFBST0NFU1NfRklMRVMgKDF1IDw8IDApCisjZGVmaW5lIFBST0NFU1NfRElSUyAgKDF1IDw8IDEpCisjZGVmaW5lIFJFQ1VSU0lWRSAgICAgKDF1IDw8IDIpCisKKy8qIEZsYWdzIHRoYXQgcmVtb3RlX2xzIHBhc3NlcyB0byBjYWxsYmFjayBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgSVNfRElSICgxdSA8PCAwKQorCitzdHJ1Y3QgcmVtb3RlX2xzX2N0eCB7CisJY2hhciAqcGF0aDsKKwl2b2lkICgqdXNlckZ1bmMpKHN0cnVjdCByZW1vdGVfbHNfY3R4ICpscyk7CisJdm9pZCAqdXNlckRhdGE7CisJaW50IGZsYWdzOworCWNoYXIgKmRlbnRyeV9uYW1lOworCWludCBkZW50cnlfZmxhZ3M7CisJc3RydWN0IHJlbW90ZV9sc19jdHggKnBhcmVudDsKK307CisKKy8qIGdldF9kYXZfdG9rZW5faGVhZGVycyBvcHRpb25zICovCitlbnVtIGRhdl9oZWFkZXJfZmxhZyB7CisJREFWX0hFQURFUl9JRiA9ICgxdSA8PCAwKSwKKwlEQVZfSEVBREVSX0xPQ0sgPSAoMXUgPDwgMSksCisJREFWX0hFQURFUl9USU1FT1VUID0gKDF1IDw8IDIpCit9OworCitzdGF0aWMgY2hhciAqeG1sX2VudGl0aWVzKGNvbnN0IGNoYXIgKnMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl3aGlsZSAoKnMpIHsKKwkJc2l6ZV90IGxlbiA9IHN0cmNzcG4ocywgIlwiPD4mIik7CisJCXN0cmJ1Zl9hZGQoJmJ1ZiwgcywgbGVuKTsKKwkJcyArPSBsZW47CisJCXN3aXRjaCAoKnMpIHsKKwkJY2FzZSAnIic6CisJCQlzdHJidWZfYWRkc3RyKCZidWYsICImcXVvdDsiKTsKKwkJCWJyZWFrOworCQljYXNlICc8JzoKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiZsdDsiKTsKKwkJCWJyZWFrOworCQljYXNlICc+JzoKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiZndDsiKTsKKwkJCWJyZWFrOworCQljYXNlICcmJzoKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiZhbXA7Iik7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJCX0KKwkJcysrOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY3VybF9zZXR1cF9odHRwX2dldChDVVJMICpjdXJsLCBjb25zdCBjaGFyICp1cmwsCisJCWNvbnN0IGNoYXIgKmN1c3RvbV9yZXEpCit7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBHRVQsIDEpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIGN1c3RvbV9yZXEpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfbnVsbCk7Cit9CisKK3N0YXRpYyB2b2lkIGN1cmxfc2V0dXBfaHR0cChDVVJMICpjdXJsLCBjb25zdCBjaGFyICp1cmwsCisJCWNvbnN0IGNoYXIgKmN1c3RvbV9yZXEsIHN0cnVjdCBidWZmZXIgKmJ1ZmZlciwKKwkJY3VybF93cml0ZV9jYWxsYmFjayB3cml0ZV9mbikKK3sKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFVULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEUsIGJ1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0lORklMRVNJWkUsIGJ1ZmZlci0+YnVmLmxlbik7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgZnJlYWRfYnVmZmVyKTsKKyNpZm5kZWYgTk9fQ1VSTF9JT0NUTAorCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBpb2N0bF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JT0NUTERBVEEsICZidWZmZXIpOworI2VuZGlmCisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHdyaXRlX2ZuKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfTk9CT0RZLCAwKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgY3VzdG9tX3JlcSk7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VQTE9BRCwgMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaywgZW51bSBkYXZfaGVhZGVyX2ZsYWcgb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVycyA9IE5VTEw7CisKKwlpZiAob3B0aW9ucyAmIERBVl9IRUFERVJfSUYpIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIklmOiAoPCVzPikiLCBsb2NrLT50b2tlbik7CisJCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIGJ1Zi5idWYpOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJfQorCWlmIChvcHRpb25zICYgREFWX0hFQURFUl9MT0NLKSB7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJMb2NrLVRva2VuOiA8JXM+IiwgbG9jay0+dG9rZW4pOworCQlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCBidWYuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCX0KKwlpZiAob3B0aW9ucyAmIERBVl9IRUFERVJfVElNRU9VVCkgeworCQlzdHJidWZfYWRkZigmYnVmLCAiVGltZW91dDogU2Vjb25kLSVsZCIsIGxvY2stPnRpbWVvdXQpOworCQlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCBidWYuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiBkYXZfaGVhZGVyczsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX3JlcXVlc3Qoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpOworc3RhdGljIHZvaWQgcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KTsKKworc3RhdGljIHZvaWQgcHJvY2Vzc19yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKQoreworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0ID0KKwkJKHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICopY2FsbGJhY2tfZGF0YTsKKworCWZpbmlzaF9yZXF1ZXN0KHJlcXVlc3QpOworfQorCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKworc3RhdGljIHZvaWQgc3RhcnRfZmV0Y2hfbG9vc2Uoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKm9ial9yZXE7CisKKwlvYmpfcmVxID0gbmV3X2h0dHBfb2JqZWN0X3JlcXVlc3QocmVwby0+dXJsLCByZXF1ZXN0LT5vYmotPnNoYTEpOworCWlmIChvYmpfcmVxID09IE5VTEwpIHsKKwkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQlyZXR1cm47CisJfQorCisJc2xvdCA9IG9ial9yZXEtPnNsb3Q7CisJc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IHJlcXVlc3Q7CisJcmVxdWVzdC0+c2xvdCA9IHNsb3Q7CisJcmVxdWVzdC0+dXNlckRhdGEgPSBvYmpfcmVxOworCisJLyogVHJ5IHRvIGdldCB0aGUgcmVxdWVzdCBzdGFydGVkLCBhYm9ydCB0aGUgcmVxdWVzdCBvbiBlcnJvciAqLworCXJlcXVlc3QtPnN0YXRlID0gUlVOX0ZFVENIX0xPT1NFOworCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgR0VUIHJlcXVlc3RcbiIpOworCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RhcnRfbWtjb2woc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgocmVxdWVzdC0+b2JqLT5zaGExKTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKworCXJlcXVlc3QtPnVybCA9IGdldF9yZW1vdGVfb2JqZWN0X3VybChyZXBvLT51cmwsIGhleCwgMSk7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IHJlcXVlc3Q7CisJY3VybF9zZXR1cF9odHRwX2dldChzbG90LT5jdXJsLCByZXF1ZXN0LT51cmwsIERBVl9NS0NPTCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCByZXF1ZXN0LT5lcnJvcnN0cik7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcmVxdWVzdC0+c2xvdCA9IHNsb3Q7CisJCXJlcXVlc3QtPnN0YXRlID0gUlVOX01LQ09MOworCX0gZWxzZSB7CisJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJZnJlZShyZXF1ZXN0LT51cmwpOworCQlyZXF1ZXN0LT51cmwgPSBOVUxMOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzdGFydF9mZXRjaF9wYWNrZWQoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKKworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpjaGVja19yZXF1ZXN0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOworCXN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcTsKKworCXRhcmdldCA9IGZpbmRfc2hhMV9wYWNrKHJlcXVlc3QtPm9iai0+c2hhMSwgcmVwby0+cGFja3MpOworCWlmICghdGFyZ2V0KSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGZldGNoICVzLCB3aWxsIG5vdCBiZSBhYmxlIHRvIHVwZGF0ZSBzZXJ2ZXIgaW5mbyByZWZzXG4iLCBzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpKTsKKwkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCXJldHVybjsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwJIkZldGNoaW5nIHBhY2sgJXNcbiIsIHNoYTFfdG9faGV4KHRhcmdldC0+c2hhMSkpOworCWZwcmludGYoc3RkZXJyLCAiIHdoaWNoIGNvbnRhaW5zICVzXG4iLCBzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpKTsKKworCXByZXEgPSBuZXdfaHR0cF9wYWNrX3JlcXVlc3QodGFyZ2V0LCByZXBvLT51cmwpOworCWlmIChwcmVxID09IE5VTEwpIHsKKwkJcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKKwkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQlyZXR1cm47CisJfQorCXByZXEtPmxzdCA9ICZyZXBvLT5wYWNrczsKKworCS8qIE1ha2Ugc3VyZSB0aGVyZSBpc24ndCBhbm90aGVyIG9wZW4gcmVxdWVzdCBmb3IgdGhpcyBwYWNrICovCisJd2hpbGUgKGNoZWNrX3JlcXVlc3QpIHsKKwkJaWYgKGNoZWNrX3JlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9QQUNLRUQgJiYKKwkJICAgICFzdHJjbXAoY2hlY2tfcmVxdWVzdC0+dXJsLCBwcmVxLT51cmwpKSB7CisJCQlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOworCQkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQkJcmV0dXJuOworCQl9CisJCWNoZWNrX3JlcXVlc3QgPSBjaGVja19yZXF1ZXN0LT5uZXh0OworCX0KKworCXByZXEtPnNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOworCXByZXEtPnNsb3QtPmNhbGxiYWNrX2RhdGEgPSByZXF1ZXN0OworCXJlcXVlc3QtPnNsb3QgPSBwcmVxLT5zbG90OworCXJlcXVlc3QtPnVzZXJEYXRhID0gcHJlcTsKKworCS8qIFRyeSB0byBnZXQgdGhlIHJlcXVlc3Qgc3RhcnRlZCwgYWJvcnQgdGhlIHJlcXVlc3Qgb24gZXJyb3IgKi8KKwlyZXF1ZXN0LT5zdGF0ZSA9IFJVTl9GRVRDSF9QQUNLRUQ7CisJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChwcmVxLT5zbG90KSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBHRVQgcmVxdWVzdFxuIik7CisJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RhcnRfcHV0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHJlcXVlc3QtPm9iai0+c2hhMSk7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciBoZHJbNTBdOworCXZvaWQgKnVucGFja2VkOworCXVuc2lnbmVkIGxvbmcgbGVuOworCWludCBoZHJsZW47CisJc3NpemVfdCBzaXplOworCWdpdF96c3RyZWFtIHN0cmVhbTsKKworCXVucGFja2VkID0gcmVhZF9zaGExX2ZpbGUocmVxdWVzdC0+b2JqLT5zaGExLCAmdHlwZSwgJmxlbik7CisJaGRybGVuID0gc3ByaW50ZihoZHIsICIlcyAlbHUiLCB0eXBlbmFtZSh0eXBlKSwgbGVuKSArIDE7CisKKwkvKiBTZXQgaXQgdXAgKi8KKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCWdpdF9kZWZsYXRlX2luaXQoJnN0cmVhbSwgemxpYl9jb21wcmVzc2lvbl9sZXZlbCk7CisJc2l6ZSA9IGdpdF9kZWZsYXRlX2JvdW5kKCZzdHJlYW0sIGxlbiArIGhkcmxlbik7CisJc3RyYnVmX2luaXQoJnJlcXVlc3QtPmJ1ZmZlci5idWYsIHNpemUpOworCXJlcXVlc3QtPmJ1ZmZlci5wb3NuID0gMDsKKworCS8qIENvbXByZXNzIGl0ICovCisJc3RyZWFtLm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilyZXF1ZXN0LT5idWZmZXIuYnVmLmJ1ZjsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZTsKKworCS8qIEZpcnN0IGhlYWRlci4uICovCisJc3RyZWFtLm5leHRfaW4gPSAodm9pZCAqKWhkcjsKKwlzdHJlYW0uYXZhaWxfaW4gPSBoZHJsZW47CisJd2hpbGUgKGdpdF9kZWZsYXRlKCZzdHJlYW0sIDApID09IFpfT0spCisJCTsgLyogbm90aGluZyAqLworCisJLyogVGhlbiB0aGUgZGF0YSBpdHNlbGYuLiAqLworCXN0cmVhbS5uZXh0X2luID0gdW5wYWNrZWQ7CisJc3RyZWFtLmF2YWlsX2luID0gbGVuOworCXdoaWxlIChnaXRfZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCkgPT0gWl9PSykKKwkJOyAvKiBub3RoaW5nICovCisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCWZyZWUodW5wYWNrZWQpOworCisJcmVxdWVzdC0+YnVmZmVyLmJ1Zi5sZW4gPSBzdHJlYW0udG90YWxfb3V0OworCisJc3RyYnVmX2FkZHN0cigmYnVmLCAiRGVzdGluYXRpb246ICIpOworCWFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybCgmYnVmLCByZXBvLT51cmwsIGhleCwgMCk7CisJcmVxdWVzdC0+ZGVzdCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoJmJ1ZiwgcmVwby0+dXJsLCBoZXgsIDApOworCXN0cmJ1Zl9hZGQoJmJ1ZiwgcmVxdWVzdC0+bG9jay0+dG1wZmlsZV9zdWZmaXgsIDQxKTsKKwlyZXF1ZXN0LT51cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOworCXNsb3QtPmNhbGxiYWNrX2RhdGEgPSByZXF1ZXN0OworCWN1cmxfc2V0dXBfaHR0cChzbG90LT5jdXJsLCByZXF1ZXN0LT51cmwsIERBVl9QVVQsCisJCQkmcmVxdWVzdC0+YnVmZmVyLCBmd3JpdGVfbnVsbCk7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcmVxdWVzdC0+c2xvdCA9IHNsb3Q7CisJCXJlcXVlc3QtPnN0YXRlID0gUlVOX1BVVDsKKwl9IGVsc2UgeworCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCWZyZWUocmVxdWVzdC0+dXJsKTsKKwkJcmVxdWVzdC0+dXJsID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X21vdmUoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19yZXNwb25zZTsKKwlzbG90LT5jYWxsYmFja19kYXRhID0gcmVxdWVzdDsKKwljdXJsX3NldHVwX2h0dHBfZ2V0KHNsb3QtPmN1cmwsIHJlcXVlc3QtPnVybCwgREFWX01PVkUpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIHJlcXVlc3QtPmRlc3QpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJPdmVyd3JpdGU6IFQiKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJlcXVlc3QtPnNsb3QgPSBzbG90OworCQlyZXF1ZXN0LT5zdGF0ZSA9IFJVTl9NT1ZFOworCX0gZWxzZSB7CisJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJZnJlZShyZXF1ZXN0LT51cmwpOworCQlyZXF1ZXN0LT51cmwgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCByZWZyZXNoX2xvY2soc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnM7CisJaW50IHJjID0gMDsKKworCWxvY2stPnJlZnJlc2hpbmcgPSAxOworCisJZGF2X2hlYWRlcnMgPSBnZXRfZGF2X3Rva2VuX2hlYWRlcnMobG9jaywgREFWX0hFQURFUl9JRiB8IERBVl9IRUFERVJfVElNRU9VVCk7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cF9nZXQoc2xvdC0+Y3VybCwgbG9jay0+dXJsLCBEQVZfTE9DSyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkxPQ0sgSFRUUCBlcnJvciAlbGRcbiIsCisJCQkJcmVzdWx0cy5odHRwX2NvZGUpOworCQl9IGVsc2UgeworCQkJbG9jay0+c3RhcnRfdGltZSA9IHRpbWUoTlVMTCk7CisJCQlyYyA9IDE7CisJCX0KKwl9CisKKwlsb2NrLT5yZWZyZXNoaW5nID0gMDsKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdl9oZWFkZXJzKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2sgPSByZXBvLT5sb2NrczsKKwl0aW1lX3QgY3VycmVudF90aW1lID0gdGltZShOVUxMKTsKKwlpbnQgdGltZV9yZW1haW5pbmc7CisKKwl3aGlsZSAobG9jaykgeworCQl0aW1lX3JlbWFpbmluZyA9IGxvY2stPnN0YXJ0X3RpbWUgKyBsb2NrLT50aW1lb3V0IC0KKwkJCWN1cnJlbnRfdGltZTsKKwkJaWYgKCFsb2NrLT5yZWZyZXNoaW5nICYmIHRpbWVfcmVtYWluaW5nIDwgTE9DS19SRUZSRVNIKSB7CisJCQlpZiAoIXJlZnJlc2hfbG9jayhsb2NrKSkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiVW5hYmxlIHRvIHJlZnJlc2ggbG9jayBmb3IgJXNcbiIsCisJCQkJCWxvY2stPnVybCk7CisJCQkJYWJvcnRlZCA9IDE7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWxvY2sgPSBsb2NrLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICplbnRyeSA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKworCWlmIChyZXF1ZXN0ID09IHJlcXVlc3RfcXVldWVfaGVhZCkgeworCQlyZXF1ZXN0X3F1ZXVlX2hlYWQgPSByZXF1ZXN0LT5uZXh0OworCX0gZWxzZSB7CisJCXdoaWxlIChlbnRyeS0+bmV4dCAhPSBOVUxMICYmIGVudHJ5LT5uZXh0ICE9IHJlcXVlc3QpCisJCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCQlpZiAoZW50cnktPm5leHQgPT0gcmVxdWVzdCkKKwkJCWVudHJ5LT5uZXh0ID0gZW50cnktPm5leHQtPm5leHQ7CisJfQorCisJZnJlZShyZXF1ZXN0LT51cmwpOworCWZyZWUocmVxdWVzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcTsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqb2JqX3JlcTsKKworCXJlcXVlc3QtPmN1cmxfcmVzdWx0ID0gcmVxdWVzdC0+c2xvdC0+Y3VybF9yZXN1bHQ7CisJcmVxdWVzdC0+aHR0cF9jb2RlID0gcmVxdWVzdC0+c2xvdC0+aHR0cF9jb2RlOworCXJlcXVlc3QtPnNsb3QgPSBOVUxMOworCisJLyogS2VlcCBsb2NrcyBhY3RpdmUgKi8KKwljaGVja19sb2NrcygpOworCisJaWYgKHJlcXVlc3QtPmhlYWRlcnMgIT0gTlVMTCkKKwkJY3VybF9zbGlzdF9mcmVlX2FsbChyZXF1ZXN0LT5oZWFkZXJzKTsKKworCS8qIFVSTCBpcyByZXVzZWQgZm9yIE1PVkUgYWZ0ZXIgUFVUICovCisJaWYgKHJlcXVlc3QtPnN0YXRlICE9IFJVTl9QVVQpIHsKKwkJZnJlZShyZXF1ZXN0LT51cmwpOworCQlyZXF1ZXN0LT51cmwgPSBOVUxMOworCX0KKworCWlmIChyZXF1ZXN0LT5zdGF0ZSA9PSBSVU5fTUtDT0wpIHsKKwkJaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LIHx8CisJCSAgICByZXF1ZXN0LT5odHRwX2NvZGUgPT0gNDA1KSB7CisJCQlyZW1vdGVfZGlyX2V4aXN0c1tyZXF1ZXN0LT5vYmotPnNoYTFbMF1dID0gMTsKKwkJCXN0YXJ0X3B1dChyZXF1ZXN0KTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiTUtDT0wgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpLAorCQkJCXJlcXVlc3QtPmN1cmxfcmVzdWx0LCByZXF1ZXN0LT5odHRwX2NvZGUpOworCQkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQkJYWJvcnRlZCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9QVVQpIHsKKwkJaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlzdGFydF9tb3ZlKHJlcXVlc3QpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsCSJQVVQgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpLAorCQkJCXJlcXVlc3QtPmN1cmxfcmVzdWx0LCByZXF1ZXN0LT5odHRwX2NvZGUpOworCQkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQkJYWJvcnRlZCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9NT1ZFKSB7CisJCWlmIChyZXF1ZXN0LT5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykgeworCQkJaWYgKHB1c2hfdmVyYm9zZWx5KQorCQkJCWZwcmludGYoc3RkZXJyLCAiICAgIHNlbnQgJXNcbiIsCisJCQkJCXNoYTFfdG9faGV4KHJlcXVlc3QtPm9iai0+c2hhMSkpOworCQkJcmVxdWVzdC0+b2JqLT5mbGFncyB8PSBSRU1PVEU7CisJCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIk1PVkUgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpLAorCQkJCXJlcXVlc3QtPmN1cmxfcmVzdWx0LCByZXF1ZXN0LT5odHRwX2NvZGUpOworCQkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQkJYWJvcnRlZCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9MT09TRSkgeworCQlvYmpfcmVxID0gKHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICopcmVxdWVzdC0+dXNlckRhdGE7CisKKwkJaWYgKGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpID09IDApCisJCQlpZiAob2JqX3JlcS0+cmVuYW1lID09IDApCisJCQkJcmVxdWVzdC0+b2JqLT5mbGFncyB8PSAoTE9DQUwgfCBSRU1PVEUpOworCisJCS8qIFRyeSBmZXRjaGluZyBwYWNrZWQgaWYgbmVjZXNzYXJ5ICovCisJCWlmIChyZXF1ZXN0LT5vYmotPmZsYWdzICYgTE9DQUwpIHsKKwkJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKKwkJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwkJfSBlbHNlCisJCQlzdGFydF9mZXRjaF9wYWNrZWQocmVxdWVzdCk7CisKKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9QQUNLRUQpIHsKKwkJaW50IGZhaWwgPSAxOworCQlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGdldCBwYWNrIGZpbGUgJXNcbiVzIiwKKwkJCQlyZXF1ZXN0LT51cmwsIGN1cmxfZXJyb3JzdHIpOworCQl9IGVsc2UgeworCQkJcHJlcSA9IChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKilyZXF1ZXN0LT51c2VyRGF0YTsKKworCQkJaWYgKHByZXEpIHsKKwkJCQlpZiAoZmluaXNoX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpID09IDApCisJCQkJCWZhaWwgPSAwOworCQkJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJCQl9CisJCX0KKwkJaWYgKGZhaWwpCisJCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwl9Cit9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorc3RhdGljIGludCBpc19ydW5uaW5nX3F1ZXVlOworc3RhdGljIGludCBmaWxsX2FjdGl2ZV9zbG90KHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKworCWlmIChhYm9ydGVkIHx8ICFpc19ydW5uaW5nX3F1ZXVlKQorCQlyZXR1cm4gMDsKKworCWZvciAocmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKwkJaWYgKHJlcXVlc3QtPnN0YXRlID09IE5FRURfRkVUQ0gpIHsKKwkJCXN0YXJ0X2ZldGNoX2xvb3NlKHJlcXVlc3QpOworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAocHVzaGluZyAmJiByZXF1ZXN0LT5zdGF0ZSA9PSBORUVEX1BVU0gpIHsKKwkJCWlmIChyZW1vdGVfZGlyX2V4aXN0c1tyZXF1ZXN0LT5vYmotPnNoYTFbMF1dID09IDEpIHsKKwkJCQlzdGFydF9wdXQocmVxdWVzdCk7CisJCQl9IGVsc2UgeworCQkJCXN0YXJ0X21rY29sKHJlcXVlc3QpOworCQkJfQorCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZ2V0X3JlbW90ZV9vYmplY3RfbGlzdCh1bnNpZ25lZCBjaGFyIHBhcmVudCk7CisKK3N0YXRpYyB2b2lkIGFkZF9mZXRjaF9yZXF1ZXN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKworCWNoZWNrX2xvY2tzKCk7CisKKwkvKgorCSAqIERvbid0IGZldGNoIHRoZSBvYmplY3QgaWYgaXQncyBrbm93biB0byBleGlzdCBsb2NhbGx5CisJICogb3IgaXMgYWxyZWFkeSBpbiB0aGUgcmVxdWVzdCBxdWV1ZQorCSAqLworCWlmIChyZW1vdGVfZGlyX2V4aXN0c1tvYmotPnNoYTFbMF1dID09IC0xKQorCQlnZXRfcmVtb3RlX29iamVjdF9saXN0KG9iai0+c2hhMVswXSk7CisJaWYgKG9iai0+ZmxhZ3MgJiAoTE9DQUwgfCBGRVRDSElORykpCisJCXJldHVybjsKKworCW9iai0+ZmxhZ3MgfD0gRkVUQ0hJTkc7CisJcmVxdWVzdCA9IHhtYWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSk7CisJcmVxdWVzdC0+b2JqID0gb2JqOworCXJlcXVlc3QtPnVybCA9IE5VTEw7CisJcmVxdWVzdC0+bG9jayA9IE5VTEw7CisJcmVxdWVzdC0+aGVhZGVycyA9IE5VTEw7CisJcmVxdWVzdC0+c3RhdGUgPSBORUVEX0ZFVENIOworCXJlcXVlc3QtPm5leHQgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJcmVxdWVzdF9xdWV1ZV9oZWFkID0gcmVxdWVzdDsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKwlzdGVwX2FjdGl2ZV9zbG90cygpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgYWRkX3NlbmRfcmVxdWVzdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OworCisJLyogS2VlcCBsb2NrcyBhY3RpdmUgKi8KKwljaGVja19sb2NrcygpOworCisJLyoKKwkgKiBEb24ndCBwdXNoIHRoZSBvYmplY3QgaWYgaXQncyBrbm93biB0byBleGlzdCBvbiB0aGUgcmVtb3RlCisJICogb3IgaXMgYWxyZWFkeSBpbiB0aGUgcmVxdWVzdCBxdWV1ZQorCSAqLworCWlmIChyZW1vdGVfZGlyX2V4aXN0c1tvYmotPnNoYTFbMF1dID09IC0xKQorCQlnZXRfcmVtb3RlX29iamVjdF9saXN0KG9iai0+c2hhMVswXSk7CisJaWYgKG9iai0+ZmxhZ3MgJiAoUkVNT1RFIHwgUFVTSElORykpCisJCXJldHVybiAwOworCXRhcmdldCA9IGZpbmRfc2hhMV9wYWNrKG9iai0+c2hhMSwgcmVwby0+cGFja3MpOworCWlmICh0YXJnZXQpIHsKKwkJb2JqLT5mbGFncyB8PSBSRU1PVEU7CisJCXJldHVybiAwOworCX0KKworCW9iai0+ZmxhZ3MgfD0gUFVTSElORzsKKwlyZXF1ZXN0ID0geG1hbGxvYyhzaXplb2YoKnJlcXVlc3QpKTsKKwlyZXF1ZXN0LT5vYmogPSBvYmo7CisJcmVxdWVzdC0+dXJsID0gTlVMTDsKKwlyZXF1ZXN0LT5sb2NrID0gbG9jazsKKwlyZXF1ZXN0LT5oZWFkZXJzID0gTlVMTDsKKwlyZXF1ZXN0LT5zdGF0ZSA9IE5FRURfUFVTSDsKKwlyZXF1ZXN0LT5uZXh0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOworCXJlcXVlc3RfcXVldWVfaGVhZCA9IHJlcXVlc3Q7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJc3RlcF9hY3RpdmVfc2xvdHMoKTsKKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfaW5kaWNlcyh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAocHVzaF92ZXJib3NlbHkpCisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBwYWNrIGxpc3RcbiIpOworCisJc3dpdGNoIChodHRwX2dldF9pbmZvX3BhY2tzKHJlcG8tPnVybCwgJnJlcG8tPnBhY2tzKSkgeworCWNhc2UgSFRUUF9PSzoKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC0xOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9uZV9yZW1vdGVfb2JqZWN0KGNvbnN0IGNoYXIgKmhleCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBvYmplY3QgKm9iajsKKworCWlmIChnZXRfc2hhMV9oZXgoaGV4LCBzaGExKSAhPSAwKQorCQlyZXR1cm47CisKKwlvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlvYmogPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisKKwkvKiBJZ25vcmUgcmVtb3RlIG9iamVjdHMgdGhhdCBkb24ndCBleGlzdCBsb2NhbGx5ICovCisJaWYgKCFvYmopCisJCXJldHVybjsKKworCW9iai0+ZmxhZ3MgfD0gUkVNT1RFOworCWlmICghb2JqZWN0X2xpc3RfY29udGFpbnMob2JqZWN0cywgb2JqKSkKKwkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iaiwgJm9iamVjdHMpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbG9ja3Byb3BfY3R4KHN0cnVjdCB4bWxfY3R4ICpjdHgsIGludCB0YWdfY2xvc2VkKQoreworCWludCAqbG9ja19mbGFncyA9IChpbnQgKiljdHgtPnVzZXJEYXRhOworCisJaWYgKHRhZ19jbG9zZWQpIHsKKwkJaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfQ1RYX0xPQ0tFTlRSWSkpIHsKKwkJCWlmICgoKmxvY2tfZmxhZ3MgJiBEQVZfUFJPUF9MT0NLRVgpICYmCisJCQkgICAgKCpsb2NrX2ZsYWdzICYgREFWX1BST1BfTE9DS1dSKSkgeworCQkJCSpsb2NrX2ZsYWdzIHw9IERBVl9MT0NLX09LOworCQkJfQorCQkJKmxvY2tfZmxhZ3MgJj0gREFWX0xPQ0tfT0s7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9DVFhfTE9DS1RZUEVfV1JJVEUpKSB7CisJCQkqbG9ja19mbGFncyB8PSBEQVZfUFJPUF9MT0NLV1I7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9DVFhfTE9DS1RZUEVfRVhDTFVTSVZFKSkgeworCQkJKmxvY2tfZmxhZ3MgfD0gREFWX1BST1BfTE9DS0VYOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X2xvY2tfY3R4KHN0cnVjdCB4bWxfY3R4ICpjdHgsIGludCB0YWdfY2xvc2VkKQoreworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jayA9IChzdHJ1Y3QgcmVtb3RlX2xvY2sgKiljdHgtPnVzZXJEYXRhOworCWdpdF9TSEFfQ1RYIHNoYV9jdHg7CisJdW5zaWduZWQgY2hhciBsb2NrX3Rva2VuX3NoYTFbMjBdOworCisJaWYgKHRhZ19jbG9zZWQgJiYgY3R4LT5jZGF0YSkgeworCQlpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9BQ1RJVkVMT0NLX09XTkVSKSkgeworCQkJbG9jay0+b3duZXIgPSB4bWFsbG9jKHN0cmxlbihjdHgtPmNkYXRhKSArIDEpOworCQkJc3RyY3B5KGxvY2stPm93bmVyLCBjdHgtPmNkYXRhKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX0FDVElWRUxPQ0tfVElNRU9VVCkpIHsKKwkJCWlmICghcHJlZml4Y21wKGN0eC0+Y2RhdGEsICJTZWNvbmQtIikpCisJCQkJbG9jay0+dGltZW91dCA9CisJCQkJCXN0cnRvbChjdHgtPmNkYXRhICsgNywgTlVMTCwgMTApOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfQUNUSVZFTE9DS19UT0tFTikpIHsKKwkJCWxvY2stPnRva2VuID0geG1hbGxvYyhzdHJsZW4oY3R4LT5jZGF0YSkgKyAxKTsKKwkJCXN0cmNweShsb2NrLT50b2tlbiwgY3R4LT5jZGF0YSk7CisKKwkJCWdpdF9TSEExX0luaXQoJnNoYV9jdHgpOworCQkJZ2l0X1NIQTFfVXBkYXRlKCZzaGFfY3R4LCBsb2NrLT50b2tlbiwgc3RybGVuKGxvY2stPnRva2VuKSk7CisJCQlnaXRfU0hBMV9GaW5hbChsb2NrX3Rva2VuX3NoYTEsICZzaGFfY3R4KTsKKworCQkJbG9jay0+dG1wZmlsZV9zdWZmaXhbMF0gPSAnXyc7CisJCQltZW1jcHkobG9jay0+dG1wZmlsZV9zdWZmaXggKyAxLCBzaGExX3RvX2hleChsb2NrX3Rva2VuX3NoYTEpLCA0MCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9uZV9yZW1vdGVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUpOworCitzdGF0aWMgdm9pZAoreG1sX3N0YXJ0X3RhZyh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqKmF0dHMpCit7CisJc3RydWN0IHhtbF9jdHggKmN0eCA9IChzdHJ1Y3QgeG1sX2N0eCAqKXVzZXJEYXRhOworCWNvbnN0IGNoYXIgKmMgPSBzdHJjaHIobmFtZSwgJzonKTsKKwlpbnQgbmV3X2xlbjsKKworCWlmIChjID09IE5VTEwpCisJCWMgPSBuYW1lOworCWVsc2UKKwkJYysrOworCisJbmV3X2xlbiA9IHN0cmxlbihjdHgtPm5hbWUpICsgc3RybGVuKGMpICsgMjsKKworCWlmIChuZXdfbGVuID4gY3R4LT5sZW4pIHsKKwkJY3R4LT5uYW1lID0geHJlYWxsb2MoY3R4LT5uYW1lLCBuZXdfbGVuKTsKKwkJY3R4LT5sZW4gPSBuZXdfbGVuOworCX0KKwlzdHJjYXQoY3R4LT5uYW1lLCAiLiIpOworCXN0cmNhdChjdHgtPm5hbWUsIGMpOworCisJZnJlZShjdHgtPmNkYXRhKTsKKwljdHgtPmNkYXRhID0gTlVMTDsKKworCWN0eC0+dXNlckZ1bmMoY3R4LCAwKTsKK30KKworc3RhdGljIHZvaWQKK3htbF9lbmRfdGFnKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCB4bWxfY3R4ICpjdHggPSAoc3RydWN0IHhtbF9jdHggKil1c2VyRGF0YTsKKwljb25zdCBjaGFyICpjID0gc3RyY2hyKG5hbWUsICc6Jyk7CisJY2hhciAqZXA7CisKKwljdHgtPnVzZXJGdW5jKGN0eCwgMSk7CisKKwlpZiAoYyA9PSBOVUxMKQorCQljID0gbmFtZTsKKwllbHNlCisJCWMrKzsKKworCWVwID0gY3R4LT5uYW1lICsgc3RybGVuKGN0eC0+bmFtZSkgLSBzdHJsZW4oYykgLSAxOworCSplcCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCit4bWxfY2RhdGEodm9pZCAqdXNlckRhdGEsIGNvbnN0IFhNTF9DaGFyICpzLCBpbnQgbGVuKQoreworCXN0cnVjdCB4bWxfY3R4ICpjdHggPSAoc3RydWN0IHhtbF9jdHggKil1c2VyRGF0YTsKKwlmcmVlKGN0eC0+Y2RhdGEpOworCWN0eC0+Y2RhdGEgPSB4bWVtZHVweihzLCBsZW4pOworfQorCitzdGF0aWMgc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrX3JlbW90ZShjb25zdCBjaGFyICpwYXRoLCBsb25nIHRpbWVvdXQpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCXN0cnVjdCBidWZmZXIgb3V0X2J1ZmZlciA9IHsgU1RSQlVGX0lOSVQsIDAgfTsKKwlzdHJ1Y3Qgc3RyYnVmIGluX2J1ZmZlciA9IFNUUkJVRl9JTklUOworCWNoYXIgKnVybDsKKwljaGFyICplcDsKKwljaGFyIHRpbWVvdXRfaGVhZGVyWzI1XTsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2sgPSBOVUxMOworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVycyA9IE5VTEw7CisJc3RydWN0IHhtbF9jdHggY3R4OworCWNoYXIgKmVzY2FwZWQ7CisKKwl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7CisJc3ByaW50Zih1cmwsICIlcyVzIiwgcmVwby0+dXJsLCBwYXRoKTsKKworCS8qIE1ha2Ugc3VyZSBsZWFkaW5nIGRpcmVjdG9yaWVzIGV4aXN0IGZvciB0aGUgcmVtb3RlIHJlZiAqLworCWVwID0gc3RyY2hyKHVybCArIHN0cmxlbihyZXBvLT51cmwpICsgMSwgJy8nKTsKKwl3aGlsZSAoZXApIHsKKwkJY2hhciBzYXZlZF9jaGFyYWN0ZXIgPSBlcFsxXTsKKwkJZXBbMV0gPSAnXDAnOworCQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwkJY3VybF9zZXR1cF9odHRwX2dldChzbG90LT5jdXJsLCB1cmwsIERBVl9NS0NPTCk7CisJCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0sgJiYKKwkJCSAgICByZXN1bHRzLmh0dHBfY29kZSAhPSA0MDUpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIlVuYWJsZSB0byBjcmVhdGUgYnJhbmNoIHBhdGggJXNcbiIsCisJCQkJCXVybCk7CisJCQkJZnJlZSh1cmwpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgTUtDT0wgcmVxdWVzdFxuIik7CisJCQlmcmVlKHVybCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQllcFsxXSA9IHNhdmVkX2NoYXJhY3RlcjsKKwkJZXAgPSBzdHJjaHIoZXAgKyAxLCAnLycpOworCX0KKworCWVzY2FwZWQgPSB4bWxfZW50aXRpZXMoaWRlbnRfZGVmYXVsdF9lbWFpbCgpKTsKKwlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsIExPQ0tfUkVRVUVTVCwgZXNjYXBlZCk7CisJZnJlZShlc2NhcGVkKTsKKworCXNwcmludGYodGltZW91dF9oZWFkZXIsICJUaW1lb3V0OiBTZWNvbmQtJWxkIiwgdGltZW91dCk7CisJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgdGltZW91dF9oZWFkZXIpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJDb250ZW50LVR5cGU6IHRleHQveG1sIik7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cChzbG90LT5jdXJsLCB1cmwsIERBVl9MT0NLLCAmb3V0X2J1ZmZlciwgZndyaXRlX2J1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmluX2J1ZmZlcik7CisKKwlsb2NrID0geGNhbGxvYygxLCBzaXplb2YoKmxvY2spKTsKKwlsb2NrLT50aW1lb3V0ID0gLTE7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykgeworCQkJWE1MX1BhcnNlciBwYXJzZXIgPSBYTUxfUGFyc2VyQ3JlYXRlKE5VTEwpOworCQkJZW51bSBYTUxfU3RhdHVzIHJlc3VsdDsKKwkJCWN0eC5uYW1lID0geGNhbGxvYygxMCwgMSk7CisJCQljdHgubGVuID0gMDsKKwkJCWN0eC5jZGF0YSA9IE5VTEw7CisJCQljdHgudXNlckZ1bmMgPSBoYW5kbGVfbmV3X2xvY2tfY3R4OworCQkJY3R4LnVzZXJEYXRhID0gbG9jazsKKwkJCVhNTF9TZXRVc2VyRGF0YShwYXJzZXIsICZjdHgpOworCQkJWE1MX1NldEVsZW1lbnRIYW5kbGVyKHBhcnNlciwgeG1sX3N0YXJ0X3RhZywKKwkJCQkJICAgICAgeG1sX2VuZF90YWcpOworCQkJWE1MX1NldENoYXJhY3RlckRhdGFIYW5kbGVyKHBhcnNlciwgeG1sX2NkYXRhKTsKKwkJCXJlc3VsdCA9IFhNTF9QYXJzZShwYXJzZXIsIGluX2J1ZmZlci5idWYsCisJCQkJCSAgIGluX2J1ZmZlci5sZW4sIDEpOworCQkJZnJlZShjdHgubmFtZSk7CisJCQlpZiAocmVzdWx0ICE9IFhNTF9TVEFUVVNfT0spIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlhNTCBlcnJvcjogJXNcbiIsCisJCQkJCVhNTF9FcnJvclN0cmluZygKKwkJCQkJCVhNTF9HZXRFcnJvckNvZGUocGFyc2VyKSkpOworCQkJCWxvY2stPnRpbWVvdXQgPSAtMTsKKwkJCX0KKwkJCVhNTF9QYXJzZXJGcmVlKHBhcnNlcik7CisJCX0KKwl9IGVsc2UgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBMT0NLIHJlcXVlc3RcbiIpOworCX0KKworCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF2X2hlYWRlcnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXRfYnVmZmVyLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmluX2J1ZmZlcik7CisKKwlpZiAobG9jay0+dG9rZW4gPT0gTlVMTCB8fCBsb2NrLT50aW1lb3V0IDw9IDApIHsKKwkJZnJlZShsb2NrLT50b2tlbik7CisJCWZyZWUobG9jay0+b3duZXIpOworCQlmcmVlKHVybCk7CisJCWZyZWUobG9jayk7CisJCWxvY2sgPSBOVUxMOworCX0gZWxzZSB7CisJCWxvY2stPnVybCA9IHVybDsKKwkJbG9jay0+c3RhcnRfdGltZSA9IHRpbWUoTlVMTCk7CisJCWxvY2stPm5leHQgPSByZXBvLT5sb2NrczsKKwkJcmVwby0+bG9ja3MgPSBsb2NrOworCX0KKworCXJldHVybiBsb2NrOworfQorCitzdGF0aWMgaW50IHVubG9ja19yZW1vdGUoc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKnByZXYgPSByZXBvLT5sb2NrczsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnM7CisJaW50IHJjID0gMDsKKworCWRhdl9oZWFkZXJzID0gZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKGxvY2ssIERBVl9IRUFERVJfTE9DSyk7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cF9nZXQoc2xvdC0+Y3VybCwgbG9jay0+dXJsLCBEQVZfVU5MT0NLKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spCisJCQlyYyA9IDE7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiVU5MT0NLIEhUVFAgZXJyb3IgJWxkXG4iLAorCQkJCXJlc3VsdHMuaHR0cF9jb2RlKTsKKwl9IGVsc2UgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBVTkxPQ0sgcmVxdWVzdFxuIik7CisJfQorCisJY3VybF9zbGlzdF9mcmVlX2FsbChkYXZfaGVhZGVycyk7CisKKwlpZiAocmVwby0+bG9ja3MgPT0gbG9jaykgeworCQlyZXBvLT5sb2NrcyA9IGxvY2stPm5leHQ7CisJfSBlbHNlIHsKKwkJd2hpbGUgKHByZXYgJiYgcHJldi0+bmV4dCAhPSBsb2NrKQorCQkJcHJldiA9IHByZXYtPm5leHQ7CisJCWlmIChwcmV2KQorCQkJcHJldi0+bmV4dCA9IHByZXYtPm5leHQtPm5leHQ7CisJfQorCisJZnJlZShsb2NrLT5vd25lcik7CisJZnJlZShsb2NrLT51cmwpOworCWZyZWUobG9jay0+dG9rZW4pOworCWZyZWUobG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9sb2Nrcyh2b2lkKQoreworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jayA9IHJlcG8tPmxvY2tzOworCisJZnByaW50ZihzdGRlcnIsICJSZW1vdmluZyByZW1vdGUgbG9ja3MuLi5cbiIpOworCXdoaWxlIChsb2NrKSB7CisJCXN0cnVjdCByZW1vdGVfbG9jayAqbmV4dCA9IGxvY2stPm5leHQ7CisJCXVubG9ja19yZW1vdGUobG9jayk7CisJCWxvY2sgPSBuZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2xvY2tzX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJcmVtb3ZlX2xvY2tzKCk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW90ZV9scyhjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsCisJCSAgICAgIHZvaWQgKCp1c2VyRnVuYykoc3RydWN0IHJlbW90ZV9sc19jdHggKmxzKSwKKwkJICAgICAgdm9pZCAqdXNlckRhdGEpOworCitzdGF0aWMgdm9pZCBwcm9jZXNzX2xzX29iamVjdChzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpCit7CisJdW5zaWduZWQgaW50ICpwYXJlbnQgPSAodW5zaWduZWQgaW50ICopbHMtPnVzZXJEYXRhOworCWNoYXIgKnBhdGggPSBscy0+ZGVudHJ5X25hbWU7CisJY2hhciAqb2JqX2hleDsKKworCWlmICghc3RyY21wKGxzLT5wYXRoLCBscy0+ZGVudHJ5X25hbWUpICYmIChscy0+ZmxhZ3MgJiBJU19ESVIpKSB7CisJCXJlbW90ZV9kaXJfZXhpc3RzWypwYXJlbnRdID0gMTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzdHJsZW4ocGF0aCkgIT0gNDkpCisJCXJldHVybjsKKwlwYXRoICs9IDg7CisJb2JqX2hleCA9IHhtYWxsb2Moc3RybGVuKHBhdGgpKTsKKwkvKiBOQjogcGF0aCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBjYW4gbm90IHVzZSBzdHJsY3B5IGhlcmUgKi8KKwltZW1jcHkob2JqX2hleCwgcGF0aCwgMik7CisJc3RyY3B5KG9ial9oZXggKyAyLCBwYXRoICsgMyk7CisJb25lX3JlbW90ZV9vYmplY3Qob2JqX2hleCk7CisJZnJlZShvYmpfaGV4KTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19sc19yZWYoc3RydWN0IHJlbW90ZV9sc19jdHggKmxzKQoreworCWlmICghc3RyY21wKGxzLT5wYXRoLCBscy0+ZGVudHJ5X25hbWUpICYmIChscy0+ZGVudHJ5X2ZsYWdzICYgSVNfRElSKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiAgJXNcbiIsIGxzLT5kZW50cnlfbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIShscy0+ZGVudHJ5X2ZsYWdzICYgSVNfRElSKSkKKwkJb25lX3JlbW90ZV9yZWYobHMtPmRlbnRyeV9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3JlbW90ZV9sc19jdHgoc3RydWN0IHhtbF9jdHggKmN0eCwgaW50IHRhZ19jbG9zZWQpCit7CisJc3RydWN0IHJlbW90ZV9sc19jdHggKmxzID0gKHN0cnVjdCByZW1vdGVfbHNfY3R4ICopY3R4LT51c2VyRGF0YTsKKworCWlmICh0YWdfY2xvc2VkKSB7CisJCWlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX1BST1BGSU5EX1JFU1ApICYmIGxzLT5kZW50cnlfbmFtZSkgeworCQkJaWYgKGxzLT5kZW50cnlfZmxhZ3MgJiBJU19ESVIpIHsKKworCQkJCS8qIGVuc3VyZSBjb2xsZWN0aW9uIG5hbWVzIGVuZCB3aXRoIHNsYXNoICovCisJCQkJc3RyX2VuZF91cmxfd2l0aF9zbGFzaChscy0+ZGVudHJ5X25hbWUsICZscy0+ZGVudHJ5X25hbWUpOworCisJCQkJaWYgKGxzLT5mbGFncyAmIFBST0NFU1NfRElSUykgeworCQkJCQlscy0+dXNlckZ1bmMobHMpOworCQkJCX0KKwkJCQlpZiAoc3RyY21wKGxzLT5kZW50cnlfbmFtZSwgbHMtPnBhdGgpICYmCisJCQkJICAgIGxzLT5mbGFncyAmIFJFQ1VSU0lWRSkgeworCQkJCQlyZW1vdGVfbHMobHMtPmRlbnRyeV9uYW1lLAorCQkJCQkJICBscy0+ZmxhZ3MsCisJCQkJCQkgIGxzLT51c2VyRnVuYywKKwkJCQkJCSAgbHMtPnVzZXJEYXRhKTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGxzLT5mbGFncyAmIFBST0NFU1NfRklMRVMpIHsKKwkJCQlscy0+dXNlckZ1bmMobHMpOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfUFJPUEZJTkRfTkFNRSkgJiYgY3R4LT5jZGF0YSkgeworCQkJY2hhciAqcGF0aCA9IGN0eC0+Y2RhdGE7CisJCQlpZiAoKmN0eC0+Y2RhdGEgPT0gJ2gnKSB7CisJCQkJcGF0aCA9IHN0cnN0cihwYXRoLCAiLy8iKTsKKwkJCQlpZiAocGF0aCkgeworCQkJCQlwYXRoID0gc3RyY2hyKHBhdGgrMiwgJy8nKTsKKwkJCQl9CisJCQl9CisJCQlpZiAocGF0aCkgeworCQkJCWNvbnN0IGNoYXIgKnVybCA9IHJlcG8tPnVybDsKKwkJCQlpZiAocmVwby0+cGF0aCkKKwkJCQkJdXJsID0gcmVwby0+cGF0aDsKKwkJCQlpZiAoc3RybmNtcChwYXRoLCB1cmwsIHJlcG8tPnBhdGhfbGVuKSkKKwkJCQkJZXJyb3IoIlBhcnNlZCBwYXRoICclcycgZG9lcyBub3QgbWF0Y2ggdXJsOiAnJXMnIiwKKwkJCQkJICAgICAgcGF0aCwgdXJsKTsKKwkJCQllbHNlIHsKKwkJCQkJcGF0aCArPSByZXBvLT5wYXRoX2xlbjsKKwkJCQkJbHMtPmRlbnRyeV9uYW1lID0geHN0cmR1cChwYXRoKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9QUk9QRklORF9DT0xMRUNUSU9OKSkgeworCQkJbHMtPmRlbnRyeV9mbGFncyB8PSBJU19ESVI7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfUFJPUEZJTkRfUkVTUCkpIHsKKwkJZnJlZShscy0+ZGVudHJ5X25hbWUpOworCQlscy0+ZGVudHJ5X25hbWUgPSBOVUxMOworCQlscy0+ZGVudHJ5X2ZsYWdzID0gMDsKKwl9Cit9CisKKy8qCisgKiBORUVEU1dPUks6IHJlbW90ZV9scygpIGlnbm9yZXMgaW5mby9yZWZzIG9uIHRoZSByZW1vdGUgc2lkZS4gIEJ1dCBpdAorICogc2hvdWxkIF9vbmx5XyBoZWVkIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoYXQgZmlsZSwgaW5zdGVhZCBvZiB0cnlpbmcgdG8KKyAqIGRldGVybWluZSB0aGUgcmVmcyBmcm9tIHRoZSByZW1vdGUgZmlsZSBzeXN0ZW0gKGJhZGx5OiBpdCBkb2VzIG5vdCBldmVuCisgKiBrbm93IGFib3V0IHBhY2tlZC1yZWZzKS4KKyAqLworc3RhdGljIHZvaWQgcmVtb3RlX2xzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywKKwkJICAgICAgdm9pZCAoKnVzZXJGdW5jKShzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpLAorCQkgICAgICB2b2lkICp1c2VyRGF0YSkKK3sKKwljaGFyICp1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCXN0cnVjdCBzdHJidWYgaW5fYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGJ1ZmZlciBvdXRfYnVmZmVyID0geyBTVFJCVUZfSU5JVCwgMCB9OworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVycyA9IE5VTEw7CisJc3RydWN0IHhtbF9jdHggY3R4OworCXN0cnVjdCByZW1vdGVfbHNfY3R4IGxzOworCisJbHMuZmxhZ3MgPSBmbGFnczsKKwlscy5wYXRoID0geHN0cmR1cChwYXRoKTsKKwlscy5kZW50cnlfbmFtZSA9IE5VTEw7CisJbHMuZGVudHJ5X2ZsYWdzID0gMDsKKwlscy51c2VyRGF0YSA9IHVzZXJEYXRhOworCWxzLnVzZXJGdW5jID0gdXNlckZ1bmM7CisKKwlzcHJpbnRmKHVybCwgIiVzJXMiLCByZXBvLT51cmwsIHBhdGgpOworCisJc3RyYnVmX2FkZGYoJm91dF9idWZmZXIuYnVmLCBQUk9QRklORF9BTExfUkVRVUVTVCk7CisKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCAiRGVwdGg6IDEiKTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCAiQ29udGVudC1UeXBlOiB0ZXh0L3htbCIpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX3NldHVwX2h0dHAoc2xvdC0+Y3VybCwgdXJsLCBEQVZfUFJPUEZJTkQsCisJCQkmb3V0X2J1ZmZlciwgZndyaXRlX2J1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmluX2J1ZmZlcik7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykgeworCQkJWE1MX1BhcnNlciBwYXJzZXIgPSBYTUxfUGFyc2VyQ3JlYXRlKE5VTEwpOworCQkJZW51bSBYTUxfU3RhdHVzIHJlc3VsdDsKKwkJCWN0eC5uYW1lID0geGNhbGxvYygxMCwgMSk7CisJCQljdHgubGVuID0gMDsKKwkJCWN0eC5jZGF0YSA9IE5VTEw7CisJCQljdHgudXNlckZ1bmMgPSBoYW5kbGVfcmVtb3RlX2xzX2N0eDsKKwkJCWN0eC51c2VyRGF0YSA9ICZsczsKKwkJCVhNTF9TZXRVc2VyRGF0YShwYXJzZXIsICZjdHgpOworCQkJWE1MX1NldEVsZW1lbnRIYW5kbGVyKHBhcnNlciwgeG1sX3N0YXJ0X3RhZywKKwkJCQkJICAgICAgeG1sX2VuZF90YWcpOworCQkJWE1MX1NldENoYXJhY3RlckRhdGFIYW5kbGVyKHBhcnNlciwgeG1sX2NkYXRhKTsKKwkJCXJlc3VsdCA9IFhNTF9QYXJzZShwYXJzZXIsIGluX2J1ZmZlci5idWYsCisJCQkJCSAgIGluX2J1ZmZlci5sZW4sIDEpOworCQkJZnJlZShjdHgubmFtZSk7CisKKwkJCWlmIChyZXN1bHQgIT0gWE1MX1NUQVRVU19PSykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiWE1MIGVycm9yOiAlc1xuIiwKKwkJCQkJWE1MX0Vycm9yU3RyaW5nKAorCQkJCQkJWE1MX0dldEVycm9yQ29kZShwYXJzZXIpKSk7CisJCQl9CisJCQlYTUxfUGFyc2VyRnJlZShwYXJzZXIpOworCQl9CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgUFJPUEZJTkQgcmVxdWVzdFxuIik7CisJfQorCisJZnJlZShscy5wYXRoKTsKKwlmcmVlKHVybCk7CisJc3RyYnVmX3JlbGVhc2UoJm91dF9idWZmZXIuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmaW5fYnVmZmVyKTsKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdl9oZWFkZXJzKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3JlbW90ZV9vYmplY3RfbGlzdCh1bnNpZ25lZCBjaGFyIHBhcmVudCkKK3sKKwljaGFyIHBhdGhbXSA9ICJvYmplY3RzL1hYLyI7CisJc3RhdGljIGNvbnN0IGNoYXIgaGV4W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJdW5zaWduZWQgaW50IHZhbCA9IHBhcmVudDsKKworCXBhdGhbOF0gPSBoZXhbdmFsID4+IDRdOworCXBhdGhbOV0gPSBoZXhbdmFsICYgMHhmXTsKKwlyZW1vdGVfZGlyX2V4aXN0c1t2YWxdID0gMDsKKwlyZW1vdGVfbHMocGF0aCwgKFBST0NFU1NfRklMRVMgfCBQUk9DRVNTX0RJUlMpLAorCQkgIHByb2Nlc3NfbHNfb2JqZWN0LCAmdmFsKTsKK30KKworc3RhdGljIGludCBsb2NraW5nX2F2YWlsYWJsZSh2b2lkKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3Qgc3RyYnVmIGluX2J1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBidWZmZXIgb3V0X2J1ZmZlciA9IHsgU1RSQlVGX0lOSVQsIDAgfTsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnMgPSBOVUxMOworCXN0cnVjdCB4bWxfY3R4IGN0eDsKKwlpbnQgbG9ja19mbGFncyA9IDA7CisJY2hhciAqZXNjYXBlZDsKKworCWVzY2FwZWQgPSB4bWxfZW50aXRpZXMocmVwby0+dXJsKTsKKwlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsIFBST1BGSU5EX1NVUFBPUlRFRExPQ0tfUkVRVUVTVCwgZXNjYXBlZCk7CisJZnJlZShlc2NhcGVkKTsKKworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJEZXB0aDogMCIpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJDb250ZW50LVR5cGU6IHRleHQveG1sIik7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cChzbG90LT5jdXJsLCByZXBvLT51cmwsIERBVl9QUk9QRklORCwKKwkJCSZvdXRfYnVmZmVyLCBmd3JpdGVfYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmaW5fYnVmZmVyKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlYTUxfUGFyc2VyIHBhcnNlciA9IFhNTF9QYXJzZXJDcmVhdGUoTlVMTCk7CisJCQllbnVtIFhNTF9TdGF0dXMgcmVzdWx0OworCQkJY3R4Lm5hbWUgPSB4Y2FsbG9jKDEwLCAxKTsKKwkJCWN0eC5sZW4gPSAwOworCQkJY3R4LmNkYXRhID0gTlVMTDsKKwkJCWN0eC51c2VyRnVuYyA9IGhhbmRsZV9sb2NrcHJvcF9jdHg7CisJCQljdHgudXNlckRhdGEgPSAmbG9ja19mbGFnczsKKwkJCVhNTF9TZXRVc2VyRGF0YShwYXJzZXIsICZjdHgpOworCQkJWE1MX1NldEVsZW1lbnRIYW5kbGVyKHBhcnNlciwgeG1sX3N0YXJ0X3RhZywKKwkJCQkJICAgICAgeG1sX2VuZF90YWcpOworCQkJcmVzdWx0ID0gWE1MX1BhcnNlKHBhcnNlciwgaW5fYnVmZmVyLmJ1ZiwKKwkJCQkJICAgaW5fYnVmZmVyLmxlbiwgMSk7CisJCQlmcmVlKGN0eC5uYW1lKTsKKworCQkJaWYgKHJlc3VsdCAhPSBYTUxfU1RBVFVTX09LKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJYTUwgZXJyb3I6ICVzXG4iLAorCQkJCQlYTUxfRXJyb3JTdHJpbmcoCisJCQkJCQlYTUxfR2V0RXJyb3JDb2RlKHBhcnNlcikpKTsKKwkJCQlsb2NrX2ZsYWdzID0gMDsKKwkJCX0KKwkJCVhNTF9QYXJzZXJGcmVlKHBhcnNlcik7CisJCQlpZiAoIWxvY2tfZmxhZ3MpCisJCQkJZXJyb3IoIm5vIERBViBsb2NraW5nIHN1cHBvcnQgb24gJXMiLAorCQkJCSAgICAgIHJlcG8tPnVybCk7CisKKwkJfSBlbHNlIHsKKwkJCWVycm9yKCJDYW5ub3QgYWNjZXNzIFVSTCAlcywgcmV0dXJuIGNvZGUgJWQiLAorCQkJICAgICAgcmVwby0+dXJsLCByZXN1bHRzLmN1cmxfcmVzdWx0KTsKKwkJCWxvY2tfZmxhZ3MgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBzdGFydCBQUk9QRklORCByZXF1ZXN0IG9uICVzIiwgcmVwby0+dXJsKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmb3V0X2J1ZmZlci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZpbl9idWZmZXIpOworCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF2X2hlYWRlcnMpOworCisJcmV0dXJuIGxvY2tfZmxhZ3M7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKiphZGRfb25lX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBvYmplY3RfbGlzdCAqKnApCit7CisJc3RydWN0IG9iamVjdF9saXN0ICplbnRyeSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvYmplY3RfbGlzdCkpOworCWVudHJ5LT5pdGVtID0gb2JqOworCWVudHJ5LT5uZXh0ID0gKnA7CisJKnAgPSBlbnRyeTsKKwlyZXR1cm4gJmVudHJ5LT5uZXh0OworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9saXN0ICoqcHJvY2Vzc19ibG9iKHN0cnVjdCBibG9iICpibG9iLAorCQkJCQkgc3RydWN0IG9iamVjdF9saXN0ICoqcCwKKwkJCQkJIHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsCisJCQkJCSBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZibG9iLT5vYmplY3Q7CisKKwlvYmotPmZsYWdzIHw9IExPQ0FMOworCisJaWYgKG9iai0+ZmxhZ3MgJiAoVU5JTlRFUkVTVElORyB8IFNFRU4pKQorCQlyZXR1cm4gcDsKKworCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwlyZXR1cm4gYWRkX29uZV9vYmplY3Qob2JqLCBwKTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfbGlzdCAqKnByb2Nlc3NfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwKKwkJCQkJIHN0cnVjdCBvYmplY3RfbGlzdCAqKnAsCisJCQkJCSBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmdHJlZS0+b2JqZWN0OworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwlzdHJ1Y3QgbmFtZV9wYXRoIG1lOworCisJb2JqLT5mbGFncyB8PSBMT0NBTDsKKworCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKKwkJcmV0dXJuIHA7CisJaWYgKHBhcnNlX3RyZWUodHJlZSkgPCAwKQorCQlkaWUoImJhZCB0cmVlIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCisJb2JqLT5mbGFncyB8PSBTRUVOOworCW5hbWUgPSB4c3RyZHVwKG5hbWUpOworCXAgPSBhZGRfb25lX29iamVjdChvYmosIHApOworCW1lLnVwID0gcGF0aDsKKwltZS5lbGVtID0gbmFtZTsKKwltZS5lbGVtX2xlbiA9IHN0cmxlbihuYW1lKTsKKworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpCisJCXN3aXRjaCAob2JqZWN0X3R5cGUoZW50cnkubW9kZSkpIHsKKwkJY2FzZSBPQkpfVFJFRToKKwkJCXAgPSBwcm9jZXNzX3RyZWUobG9va3VwX3RyZWUoZW50cnkuc2hhMSksIHAsICZtZSwgbmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBPQkpfQkxPQjoKKwkJCXAgPSBwcm9jZXNzX2Jsb2IobG9va3VwX2Jsb2IoZW50cnkuc2hhMSksIHAsICZtZSwgbmFtZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIFN1YnByb2plY3QgY29tbWl0IC0gbm90IGluIHRoaXMgcmVwb3NpdG9yeSAqLworCQkJYnJlYWs7CisJCX0KKworCWZyZWUodHJlZS0+YnVmZmVyKTsKKwl0cmVlLT5idWZmZXIgPSBOVUxMOworCXJldHVybiBwOworfQorCitzdGF0aWMgaW50IGdldF9kZWx0YShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IG9iamVjdF9saXN0ICoqcCA9ICZvYmplY3RzOworCWludCBjb3VudCA9IDA7CisKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihyZXZzKSkgIT0gTlVMTCkgeworCQlwID0gcHJvY2Vzc190cmVlKGNvbW1pdC0+dHJlZSwgcCwgTlVMTCwgIiIpOworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBMT0NBTDsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCWNvdW50ICs9IGFkZF9zZW5kX3JlcXVlc3QoJmNvbW1pdC0+b2JqZWN0LCBsb2NrKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudHJ5ID0gcmV2cy0+cGVuZGluZy5vYmplY3RzICsgaTsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gZW50cnktPml0ZW07CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBlbnRyeS0+bmFtZTsKKworCQlpZiAob2JqLT5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgU0VFTikpCisJCQljb250aW51ZTsKKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCQlvYmotPmZsYWdzIHw9IFNFRU47CisJCQlwID0gYWRkX29uZV9vYmplY3Qob2JqLCBwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJCXAgPSBwcm9jZXNzX3RyZWUoKHN0cnVjdCB0cmVlICopb2JqLCBwLCBOVUxMLCBuYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJCXAgPSBwcm9jZXNzX2Jsb2IoKHN0cnVjdCBibG9iICopb2JqLCBwLCBOVUxMLCBuYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRpZSgidW5rbm93biBwZW5kaW5nIG9iamVjdCAlcyAoJXMpIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSwgbmFtZSk7CisJfQorCisJd2hpbGUgKG9iamVjdHMpIHsKKwkJaWYgKCEob2JqZWN0cy0+aXRlbS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCWNvdW50ICs9IGFkZF9zZW5kX3JlcXVlc3Qob2JqZWN0cy0+aXRlbSwgbG9jayk7CisJCW9iamVjdHMgPSBvYmplY3RzLT5uZXh0OworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCB1cGRhdGVfcmVtb3RlKHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGJ1ZmZlciBvdXRfYnVmZmVyID0geyBTVFJCVUZfSU5JVCwgMCB9OworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVyczsKKworCWRhdl9oZWFkZXJzID0gZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKGxvY2ssIERBVl9IRUFERVJfSUYpOworCisJc3RyYnVmX2FkZGYoJm91dF9idWZmZXIuYnVmLCAiJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CisJY3VybF9zZXR1cF9odHRwKHNsb3QtPmN1cmwsIGxvY2stPnVybCwgREFWX1BVVCwKKwkJCSZvdXRfYnVmZmVyLCBmd3JpdGVfbnVsbCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvdXRfYnVmZmVyLmJ1Zik7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUFVUIGVycm9yOiBjdXJsIHJlc3VsdD0lZCwgSFRUUCBjb2RlPSVsZFxuIiwKKwkJCQlyZXN1bHRzLmN1cmxfcmVzdWx0LCByZXN1bHRzLmh0dHBfY29kZSk7CisJCQkvKiBXZSBzaG91bGQgYXR0ZW1wdCByZWNvdmVyeT8gKi8KKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJc3RyYnVmX3JlbGVhc2UoJm91dF9idWZmZXIuYnVmKTsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgUFVUIHJlcXVlc3RcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzOworCitzdGF0aWMgdm9pZCBvbmVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlyZWYgPSBhbGxvY19yZWYocmVmbmFtZSk7CisKKwlpZiAoaHR0cF9mZXRjaF9yZWYocmVwby0+dXJsLCByZWYpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiVW5hYmxlIHRvIGZldGNoIHJlZiAlcyBmcm9tICVzXG4iLAorCQkJcmVmbmFtZSwgcmVwby0+dXJsKTsKKwkJZnJlZShyZWYpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBGZXRjaCBhIGNvcHkgb2YgdGhlIG9iamVjdCBpZiBpdCBkb2Vzbid0IGV4aXN0IGxvY2FsbHkgLSBpdAorCSAqIG1heSBiZSByZXF1aXJlZCBmb3IgdXBkYXRpbmcgc2VydmVyIGluZm8gbGF0ZXIuCisJICovCisJaWYgKHJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzICYmICFoYXNfc2hhMV9maWxlKHJlZi0+b2xkX3NoYTEpKSB7CisJCW9iaiA9IGxvb2t1cF91bmtub3duX29iamVjdChyZWYtPm9sZF9zaGExKTsKKwkJaWYgKG9iaikgeworCQkJZnByaW50ZihzdGRlcnIsCSIgIGZldGNoICVzIGZvciAlc1xuIiwKKwkJCQlzaGExX3RvX2hleChyZWYtPm9sZF9zaGExKSwgcmVmbmFtZSk7CisJCQlhZGRfZmV0Y2hfcmVxdWVzdChvYmopOworCQl9CisJfQorCisJcmVmLT5uZXh0ID0gcmVtb3RlX3JlZnM7CisJcmVtb3RlX3JlZnMgPSByZWY7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9kYXZfcmVtb3RlX2hlYWRzKHZvaWQpCit7CisJcmVtb3RlX2xzKCJyZWZzLyIsIChQUk9DRVNTX0ZJTEVTIHwgUFJPQ0VTU19ESVJTIHwgUkVDVVJTSVZFKSwgcHJvY2Vzc19sc19yZWYsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBhZGRfcmVtb3RlX2luZm9fcmVmKHN0cnVjdCByZW1vdGVfbHNfY3R4ICpscykKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSAoc3RydWN0IHN0cmJ1ZiAqKWxzLT51c2VyRGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvOworCWludCBsZW47CisJY2hhciAqcmVmX2luZm87CisJc3RydWN0IHJlZiAqcmVmOworCisJcmVmID0gYWxsb2NfcmVmKGxzLT5kZW50cnlfbmFtZSk7CisKKwlpZiAoaHR0cF9mZXRjaF9yZWYocmVwby0+dXJsLCByZWYpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiVW5hYmxlIHRvIGZldGNoIHJlZiAlcyBmcm9tICVzXG4iLAorCQkJbHMtPmRlbnRyeV9uYW1lLCByZXBvLT51cmwpOworCQlhYm9ydGVkID0gMTsKKwkJZnJlZShyZWYpOworCQlyZXR1cm47CisJfQorCisJbyA9IHBhcnNlX29iamVjdChyZWYtPm9sZF9zaGExKTsKKwlpZiAoIW8pIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiVW5hYmxlIHRvIHBhcnNlIG9iamVjdCAlcyBmb3IgcmVtb3RlIHJlZiAlc1xuIiwKKwkJCXNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCBscy0+ZGVudHJ5X25hbWUpOworCQlhYm9ydGVkID0gMTsKKwkJZnJlZShyZWYpOworCQlyZXR1cm47CisJfQorCisJbGVuID0gc3RybGVuKGxzLT5kZW50cnlfbmFtZSkgKyA0MjsKKwlyZWZfaW5mbyA9IHhjYWxsb2MobGVuICsgMSwgMSk7CisJc3ByaW50ZihyZWZfaW5mbywgIiVzCSVzXG4iLAorCQlzaGExX3RvX2hleChyZWYtPm9sZF9zaGExKSwgbHMtPmRlbnRyeV9uYW1lKTsKKwlmd3JpdGVfYnVmZmVyKHJlZl9pbmZvLCAxLCBsZW4sIGJ1Zik7CisJZnJlZShyZWZfaW5mbyk7CisKKwlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBkZXJlZl90YWcobywgbHMtPmRlbnRyeV9uYW1lLCAwKTsKKwkJaWYgKG8pIHsKKwkJCWxlbiA9IHN0cmxlbihscy0+ZGVudHJ5X25hbWUpICsgNDU7CisJCQlyZWZfaW5mbyA9IHhjYWxsb2MobGVuICsgMSwgMSk7CisJCQlzcHJpbnRmKHJlZl9pbmZvLCAiJXMJJXNee31cbiIsCisJCQkJc2hhMV90b19oZXgoby0+c2hhMSksIGxzLT5kZW50cnlfbmFtZSk7CisJCQlmd3JpdGVfYnVmZmVyKHJlZl9pbmZvLCAxLCBsZW4sIGJ1Zik7CisJCQlmcmVlKHJlZl9pbmZvKTsKKwkJfQorCX0KKwlmcmVlKHJlZik7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZW1vdGVfaW5mb19yZWZzKHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgYnVmZmVyIGJ1ZmZlciA9IHsgU1RSQlVGX0lOSVQsIDAgfTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzOworCisJcmVtb3RlX2xzKCJyZWZzLyIsIChQUk9DRVNTX0ZJTEVTIHwgUkVDVVJTSVZFKSwKKwkJICBhZGRfcmVtb3RlX2luZm9fcmVmLCAmYnVmZmVyLmJ1Zik7CisJaWYgKCFhYm9ydGVkKSB7CisJCWRhdl9oZWFkZXJzID0gZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKGxvY2ssIERBVl9IRUFERVJfSUYpOworCisJCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwkJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCQljdXJsX3NldHVwX2h0dHAoc2xvdC0+Y3VybCwgbG9jay0+dXJsLCBEQVZfUFVULAorCQkJCSZidWZmZXIsIGZ3cml0ZV9udWxsKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKworCQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJQVVQgZXJyb3I6IGN1cmwgcmVzdWx0PSVkLCBIVFRQIGNvZGU9JWxkXG4iLAorCQkJCQlyZXN1bHRzLmN1cmxfcmVzdWx0LCByZXN1bHRzLmh0dHBfY29kZSk7CisJCQl9CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlci5idWYpOworfQorCitzdGF0aWMgaW50IHJlbW90ZV9leGlzdHMoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICp1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7CisJaW50IHJldDsKKworCXNwcmludGYodXJsLCAiJXMlcyIsIHJlcG8tPnVybCwgcGF0aCk7CisKKwlzd2l0Y2ggKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsIE5VTEwsIDApKSB7CisJY2FzZSBIVFRQX09LOgorCQlyZXQgPSAxOworCQlicmVhazsKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgSFRUUF9FUlJPUjoKKwkJaHR0cF9lcnJvcih1cmwsIEhUVFBfRVJST1IpOworCWRlZmF1bHQ6CisJCXJldCA9IC0xOworCX0KKwlmcmVlKHVybCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZmV0Y2hfc3ltcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKipzeW1yZWYsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY2hhciAqdXJsOworCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisKKwl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgc3RybGVuKHBhdGgpICsgMSk7CisJc3ByaW50Zih1cmwsICIlcyVzIiwgcmVwby0+dXJsLCBwYXRoKTsKKworCWlmIChodHRwX2dldF9zdHJidWYodXJsLCAmYnVmZmVyLCAwKSAhPSBIVFRQX09LKQorCQlkaWUoIkNvdWxkbid0IGdldCAlcyBmb3IgcmVtb3RlIHN5bXJlZlxuJXMiLCB1cmwsCisJCSAgICBjdXJsX2Vycm9yc3RyKTsKKwlmcmVlKHVybCk7CisKKwlmcmVlKCpzeW1yZWYpOworCSpzeW1yZWYgPSBOVUxMOworCWhhc2hjbHIoc2hhMSk7CisKKwlpZiAoYnVmZmVyLmxlbiA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBJZiBpdCdzIGEgc3ltcmVmLCBzZXQgdGhlIHJlZm5hbWU7IG90aGVyd2lzZSB0cnkgZm9yIGEgc2hhMSAqLworCWlmICghcHJlZml4Y21wKChjaGFyICopYnVmZmVyLmJ1ZiwgInJlZjogIikpIHsKKwkJKnN5bXJlZiA9IHhtZW1kdXB6KChjaGFyICopYnVmZmVyLmJ1ZiArIDUsIGJ1ZmZlci5sZW4gLSA2KTsKKwl9IGVsc2UgeworCQlnZXRfc2hhMV9oZXgoYnVmZmVyLmJ1Ziwgc2hhMSk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X21lcmdlX2Jhc2UodW5zaWduZWQgY2hhciAqaGVhZF9zaGExLCBzdHJ1Y3QgcmVmICpyZW1vdGUpCit7CisJc3RydWN0IGNvbW1pdCAqaGVhZCA9IGxvb2t1cF9jb21taXRfb3JfZGllKGhlYWRfc2hhMSwgIkhFQUQiKTsKKwlzdHJ1Y3QgY29tbWl0ICpicmFuY2ggPSBsb29rdXBfY29tbWl0X29yX2RpZShyZW1vdGUtPm9sZF9zaGExLCByZW1vdGUtPm5hbWUpOworCisJcmV0dXJuIGluX21lcmdlX2Jhc2VzKGJyYW5jaCwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX3JlbW90ZV9icmFuY2goY29uc3QgY2hhciAqcGF0dGVybiwgaW50IGZvcmNlKQoreworCXN0cnVjdCByZWYgKnJlZnMgPSByZW1vdGVfcmVmczsKKwlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CisJY2hhciAqc3ltcmVmID0gTlVMTDsKKwlpbnQgbWF0Y2g7CisJaW50IHBhdGxlbiA9IHN0cmxlbihwYXR0ZXJuKTsKKwlpbnQgaTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJY2hhciAqdXJsOworCisJLyogRmluZCB0aGUgcmVtb3RlIGJyYW5jaChlcykgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBicmFuY2ggbmFtZSAqLworCWZvciAobWF0Y2ggPSAwOyByZWZzOyByZWZzID0gcmVmcy0+bmV4dCkgeworCQljaGFyICpuYW1lID0gcmVmcy0+bmFtZTsKKwkJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChuYW1lbGVuIDwgcGF0bGVuIHx8CisJCSAgICBtZW1jbXAobmFtZSArIG5hbWVsZW4gLSBwYXRsZW4sIHBhdHRlcm4sIHBhdGxlbikpCisJCQljb250aW51ZTsKKwkJaWYgKG5hbWVsZW4gIT0gcGF0bGVuICYmIG5hbWVbbmFtZWxlbiAtIHBhdGxlbiAtIDFdICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQltYXRjaCsrOworCQlyZW1vdGVfcmVmID0gcmVmczsKKwl9CisJaWYgKG1hdGNoID09IDApCisJCXJldHVybiBlcnJvcigiTm8gcmVtb3RlIGJyYW5jaCBtYXRjaGVzICVzIiwgcGF0dGVybik7CisJaWYgKG1hdGNoICE9IDEpCisJCXJldHVybiBlcnJvcigiTW9yZSB0aGFuIG9uZSByZW1vdGUgYnJhbmNoIG1hdGNoZXMgJXMiLAorCQkJICAgICBwYXR0ZXJuKTsKKworCS8qCisJICogUmVtb3RlIEhFQUQgbXVzdCBiZSBhIHN5bXJlZiAobm90IGV4YWN0bHkgZm9vbHByb29mOyBhIHJlbW90ZQorCSAqIHN5bWxpbmsgdG8gYSBzeW1yZWYgd2lsbCBsb29rIGxpa2UgYSBzeW1yZWYpCisJICovCisJZmV0Y2hfc3ltcmVmKCJIRUFEIiwgJnN5bXJlZiwgaGVhZF9zaGExKTsKKwlpZiAoIXN5bXJlZikKKwkJcmV0dXJuIGVycm9yKCJSZW1vdGUgSEVBRCBpcyBub3QgYSBzeW1yZWYiKTsKKworCS8qIFJlbW90ZSBicmFuY2ggbXVzdCBub3QgYmUgdGhlIHJlbW90ZSBIRUFEICovCisJZm9yIChpID0gMDsgc3ltcmVmICYmIGkgPCBNQVhERVBUSDsgaSsrKSB7CisJCWlmICghc3RyY21wKHJlbW90ZV9yZWYtPm5hbWUsIHN5bXJlZikpCisJCQlyZXR1cm4gZXJyb3IoIlJlbW90ZSBicmFuY2ggJXMgaXMgdGhlIGN1cnJlbnQgSEVBRCIsCisJCQkJICAgICByZW1vdGVfcmVmLT5uYW1lKTsKKwkJZmV0Y2hfc3ltcmVmKHN5bXJlZiwgJnN5bXJlZiwgaGVhZF9zaGExKTsKKwl9CisKKwkvKiBSdW4gZXh0cmEgc2FuaXR5IGNoZWNrcyBpZiBkZWxldGUgaXMgbm90IGZvcmNlZCAqLworCWlmICghZm9yY2UpIHsKKwkJLyogUmVtb3RlIEhFQUQgbXVzdCByZXNvbHZlIHRvIGEga25vd24gb2JqZWN0ICovCisJCWlmIChzeW1yZWYpCisJCQlyZXR1cm4gZXJyb3IoIlJlbW90ZSBIRUFEIHN5bXJlZnMgdG9vIGRlZXAiKTsKKwkJaWYgKGlzX251bGxfc2hhMShoZWFkX3NoYTEpKQorCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSByZW1vdGUgSEVBRCIpOworCQlpZiAoIWhhc19zaGExX2ZpbGUoaGVhZF9zaGExKSkKKwkJCXJldHVybiBlcnJvcigiUmVtb3RlIEhFQUQgcmVzb2x2ZXMgdG8gb2JqZWN0ICVzXG53aGljaCBkb2VzIG5vdCBleGlzdCBsb2NhbGx5LCBwZXJoYXBzIHlvdSBuZWVkIHRvIGZldGNoPyIsIHNoYTFfdG9faGV4KGhlYWRfc2hhMSkpOworCisJCS8qIFJlbW90ZSBicmFuY2ggbXVzdCByZXNvbHZlIHRvIGEga25vd24gb2JqZWN0ICovCisJCWlmIChpc19udWxsX3NoYTEocmVtb3RlX3JlZi0+b2xkX3NoYTEpKQorCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSByZW1vdGUgYnJhbmNoICVzIiwKKwkJCQkgICAgIHJlbW90ZV9yZWYtPm5hbWUpOworCQlpZiAoIWhhc19zaGExX2ZpbGUocmVtb3RlX3JlZi0+b2xkX3NoYTEpKQorCQkJcmV0dXJuIGVycm9yKCJSZW1vdGUgYnJhbmNoICVzIHJlc29sdmVzIHRvIG9iamVjdCAlc1xud2hpY2ggZG9lcyBub3QgZXhpc3QgbG9jYWxseSwgcGVyaGFwcyB5b3UgbmVlZCB0byBmZXRjaD8iLCByZW1vdGVfcmVmLT5uYW1lLCBzaGExX3RvX2hleChyZW1vdGVfcmVmLT5vbGRfc2hhMSkpOworCisJCS8qIFJlbW90ZSBicmFuY2ggbXVzdCBiZSBhbiBhbmNlc3RvciBvZiByZW1vdGUgSEVBRCAqLworCQlpZiAoIXZlcmlmeV9tZXJnZV9iYXNlKGhlYWRfc2hhMSwgcmVtb3RlX3JlZikpIHsKKwkJCXJldHVybiBlcnJvcigiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBhbiBhbmNlc3RvciAiCisJCQkJICAgICAib2YgeW91ciBjdXJyZW50IEhFQUQuXG4iCisJCQkJICAgICAiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwiCisJCQkJICAgICAiIHJ1bjpcblx0J2dpdCBodHRwLXB1c2ggLUQgJXMgJXMnIiwKKwkJCQkgICAgIHJlbW90ZV9yZWYtPm5hbWUsIHJlcG8tPnVybCwgcGF0dGVybik7CisJCX0KKwl9CisKKwkvKiBTZW5kIGRlbGV0ZSByZXF1ZXN0ICovCisJZnByaW50ZihzdGRlcnIsICJSZW1vdmluZyByZW1vdGUgYnJhbmNoICclcydcbiIsIHJlbW90ZV9yZWYtPm5hbWUpOworCWlmIChkcnlfcnVuKQorCQlyZXR1cm4gMDsKKwl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT51cmwpICsgc3RybGVuKHJlbW90ZV9yZWYtPm5hbWUpICsgMSk7CisJc3ByaW50Zih1cmwsICIlcyVzIiwgcmVwby0+dXJsLCByZW1vdGVfcmVmLT5uYW1lKTsKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cF9nZXQoc2xvdC0+Y3VybCwgdXJsLCBEQVZfREVMRVRFKTsKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlmcmVlKHVybCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKQorCQkJcmV0dXJuIGVycm9yKCJERUxFVEUgcmVxdWVzdCBmYWlsZWQgKCVkLyVsZCkiLAorCQkJCSAgICAgcmVzdWx0cy5jdXJsX3Jlc3VsdCwgcmVzdWx0cy5odHRwX2NvZGUpOworCX0gZWxzZSB7CisJCWZyZWUodXJsKTsKKwkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gc3RhcnQgREVMRVRFIHJlcXVlc3QiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnVuX3JlcXVlc3RfcXVldWUodm9pZCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAxOworCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJYWRkX2ZpbGxfZnVuY3Rpb24oTlVMTCwgZmlsbF9hY3RpdmVfc2xvdCk7CisjZW5kaWYKKwlkbyB7CisJCWZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKCk7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwkJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKyNlbmRpZgorCX0gd2hpbGUgKHJlcXVlc3RfcXVldWVfaGVhZCAmJiAhYWJvcnRlZCk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAwOworI2VuZGlmCit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqbmV4dF9yZXF1ZXN0OworCWludCBucl9yZWZzcGVjID0gMDsKKwljaGFyICoqcmVmc3BlYyA9IE5VTEw7CisJc3RydWN0IHJlbW90ZV9sb2NrICpyZWZfbG9jayA9IE5VTEw7CisJc3RydWN0IHJlbW90ZV9sb2NrICppbmZvX3JlZl9sb2NrID0gTlVMTDsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlpbnQgZGVsZXRlX2JyYW5jaCA9IDA7CisJaW50IGZvcmNlX2RlbGV0ZSA9IDA7CisJaW50IG9iamVjdHNfdG9fc2VuZDsKKwlpbnQgcmMgPSAwOworCWludCBpOworCWludCBuZXdfcmVmczsKKwlzdHJ1Y3QgcmVmICpyZWYsICpsb2NhbF9yZWZzOworCisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisKKwlyZXBvID0geGNhbGxvYyhzaXplb2YoKnJlcG8pLCAxKTsKKworCWFyZ3YrKzsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrLCBhcmd2KyspIHsKKwkJY2hhciAqYXJnID0gKmFyZ3Y7CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQkJcHVzaF9hbGwgPSBNQVRDSF9SRUZTX0FMTDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tZm9yY2UiKSkgeworCQkJCWZvcmNlX2FsbCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWRyeS1ydW4iKSkgeworCQkJCWRyeV9ydW4gPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWxwZXItc3RhdHVzIikpIHsKKwkJCQloZWxwZXJfc3RhdHVzID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKSB7CisJCQkJcHVzaF92ZXJib3NlbHkgPSAxOworCQkJCWh0dHBfaXNfdmVyYm9zZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItZCIpKSB7CisJCQkJZGVsZXRlX2JyYW5jaCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItRCIpKSB7CisJCQkJZGVsZXRlX2JyYW5jaCA9IDE7CisJCQkJZm9yY2VfZGVsZXRlID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi1oIikpCisJCQkJdXNhZ2UoaHR0cF9wdXNoX3VzYWdlKTsKKwkJfQorCQlpZiAoIXJlcG8tPnVybCkgeworCQkJY2hhciAqcGF0aCA9IHN0cnN0cihhcmcsICIvLyIpOworCQkJc3RyX2VuZF91cmxfd2l0aF9zbGFzaChhcmcsICZyZXBvLT51cmwpOworCQkJcmVwby0+cGF0aF9sZW4gPSBzdHJsZW4ocmVwby0+dXJsKTsKKwkJCWlmIChwYXRoKSB7CisJCQkJcmVwby0+cGF0aCA9IHN0cmNocihwYXRoKzIsICcvJyk7CisJCQkJaWYgKHJlcG8tPnBhdGgpCisJCQkJCXJlcG8tPnBhdGhfbGVuID0gc3RybGVuKHJlcG8tPnBhdGgpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJcmVmc3BlYyA9IGFyZ3Y7CisJCW5yX3JlZnNwZWMgPSBhcmdjIC0gaTsKKwkJYnJlYWs7CisJfQorCisjaWZuZGVmIFVTRV9DVVJMX01VTFRJCisJZGllKCJnaXQtcHVzaCBpcyBub3QgYXZhaWxhYmxlIGZvciBodHRwL2h0dHBzIHJlcG9zaXRvcnkgd2hlbiBub3QgY29tcGlsZWQgd2l0aCBVU0VfQ1VSTF9NVUxUSSIpOworI2VuZGlmCisKKwlpZiAoIXJlcG8tPnVybCkKKwkJdXNhZ2UoaHR0cF9wdXNoX3VzYWdlKTsKKworCWlmIChkZWxldGVfYnJhbmNoICYmIG5yX3JlZnNwZWMgIT0gMSkKKwkJZGllKCJZb3UgbXVzdCBzcGVjaWZ5IG9ubHkgb25lIGJyYW5jaCBuYW1lIHdoZW4gZGVsZXRpbmcgYSByZW1vdGUgYnJhbmNoIik7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwltZW1zZXQocmVtb3RlX2Rpcl9leGlzdHMsIC0xLCAyNTYpOworCisJaHR0cF9pbml0KE5VTEwsIHJlcG8tPnVybCwgMSk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAwOworI2VuZGlmCisKKwkvKiBWZXJpZnkgREFWIGNvbXBsaWFuY2UvbG9jayBzdXBwb3J0ICovCisJaWYgKCFsb2NraW5nX2F2YWlsYWJsZSgpKSB7CisJCXJjID0gMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHJlbW92ZV9sb2Nrc19vbl9zaWduYWwpOworCisJLyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIGhhcyBzZXJ2ZXIgaW5mbyBmaWxlcyAqLworCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwlyZXBvLT5oYXNfaW5mb19yZWZzID0gcmVtb3RlX2V4aXN0cygiaW5mby9yZWZzIik7CisJcmVwby0+aGFzX2luZm9fcGFja3MgPSByZW1vdGVfZXhpc3RzKCJvYmplY3RzL2luZm8vcGFja3MiKTsKKwlpZiAocmVwby0+aGFzX2luZm9fcmVmcykgeworCQlpbmZvX3JlZl9sb2NrID0gbG9ja19yZW1vdGUoImluZm8vcmVmcyIsIExPQ0tfVElNRSk7CisJCWlmIChpbmZvX3JlZl9sb2NrKQorCQkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAxOworCQllbHNlIHsKKwkJCWVycm9yKCJjYW5ub3QgbG9jayBleGlzdGluZyBpbmZvL3JlZnMiKTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKwlpZiAocmVwby0+aGFzX2luZm9fcGFja3MpCisJCWZldGNoX2luZGljZXMoKTsKKworCS8qIEdldCBhIGxpc3Qgb2YgYWxsIGxvY2FsIGFuZCByZW1vdGUgaGVhZHMgdG8gdmFsaWRhdGUgcmVmc3BlY3MgKi8KKwlsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CisJZnByaW50ZihzdGRlcnIsICJGZXRjaGluZyByZW1vdGUgaGVhZHMuLi5cbiIpOworCWdldF9kYXZfcmVtb3RlX2hlYWRzKCk7CisJcnVuX3JlcXVlc3RfcXVldWUoKTsKKworCS8qIFJlbW92ZSBhIHJlbW90ZSBicmFuY2ggaWYgLWQgb3IgLUQgd2FzIHNwZWNpZmllZCAqLworCWlmIChkZWxldGVfYnJhbmNoKSB7CisJCWlmIChkZWxldGVfcmVtb3RlX2JyYW5jaChyZWZzcGVjWzBdLCBmb3JjZV9kZWxldGUpID09IC0xKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBkZWxldGUgcmVtb3RlIGJyYW5jaCAlc1xuIiwKKwkJCQlyZWZzcGVjWzBdKTsKKwkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50ZigiZXJyb3IgJXMgY2Fubm90IHJlbW92ZVxuIiwgcmVmc3BlY1swXSk7CisJCX0KKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qIG1hdGNoIHRoZW0gdXAgKi8KKwlpZiAobWF0Y2hfcHVzaF9yZWZzKGxvY2FsX3JlZnMsICZyZW1vdGVfcmVmcywKKwkJCSAgICBucl9yZWZzcGVjLCAoY29uc3QgY2hhciAqKikgcmVmc3BlYywgcHVzaF9hbGwpKSB7CisJCXJjID0gLTE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJaWYgKCFyZW1vdGVfcmVmcykgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIpOworCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCXByaW50ZigiZXJyb3IgbnVsbCBubyBtYXRjaFxuIik7CisJCXJjID0gMDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCW5ld19yZWZzID0gMDsKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljaGFyIG9sZF9oZXhbNjBdLCAqbmV3X2hleDsKKwkJY29uc3QgY2hhciAqY29tbWl0X2FyZ3ZbNV07CisJCWludCBjb21taXRfYXJnYzsKKwkJY2hhciAqbmV3X3NoYTFfaGV4LCAqb2xkX3NoYTFfaGV4OworCisJCWlmICghcmVmLT5wZWVyX3JlZikKKwkJCWNvbnRpbnVlOworCisJCWlmIChpc19udWxsX3NoYTEocmVmLT5wZWVyX3JlZi0+bmV3X3NoYTEpKSB7CisJCQlpZiAoZGVsZXRlX3JlbW90ZV9icmFuY2gocmVmLT5uYW1lLCAxKSA9PSAtMSkgeworCQkJCWVycm9yKCJDb3VsZCBub3QgcmVtb3ZlICVzIiwgcmVmLT5uYW1lKTsKKwkJCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCQkJcHJpbnRmKCJlcnJvciAlcyBjYW5ub3QgcmVtb3ZlXG4iLCByZWYtPm5hbWUpOworCQkJCXJjID0gLTQ7CisJCQl9CisJCQllbHNlIGlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50Zigib2sgJXNcbiIsIHJlZi0+bmFtZSk7CisJCQluZXdfcmVmcysrOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWhhc2hjbXAocmVmLT5vbGRfc2hhMSwgcmVmLT5wZWVyX3JlZi0+bmV3X3NoYTEpKSB7CisJCQlpZiAocHVzaF92ZXJib3NlbHkpCisJCQkJZnByaW50ZihzdGRlcnIsICInJXMnOiB1cC10by1kYXRlXG4iLCByZWYtPm5hbWUpOworCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJcHJpbnRmKCJvayAlcyB1cCB0byBkYXRlXG4iLCByZWYtPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWZvcmNlX2FsbCAmJgorCQkgICAgIWlzX251bGxfc2hhMShyZWYtPm9sZF9zaGExKSAmJgorCQkgICAgIXJlZi0+Zm9yY2UpIHsKKwkJCWlmICghaGFzX3NoYTFfZmlsZShyZWYtPm9sZF9zaGExKSB8fAorCQkJICAgICFyZWZfbmV3ZXIocmVmLT5wZWVyX3JlZi0+bmV3X3NoYTEsCisJCQkJICAgICAgIHJlZi0+b2xkX3NoYTEpKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBkbyBub3QgaGF2ZSB0aGUgcmVtb3RlIHJlZiwgb3IKKwkJCQkgKiB3ZSBrbm93IHRoYXQgdGhlIHJlbW90ZSByZWYgaXMgbm90CisJCQkJICogYW4gYW5jZXN0b3Igb2Ygd2hhdCB3ZSBhcmUgdHJ5aW5nIHRvCisJCQkJICogcHVzaC4gIEVpdGhlciB3YXkgdGhpcyBjYW4gYmUgbG9zaW5nCisJCQkJICogY29tbWl0cyBhdCB0aGUgcmVtb3RlIGVuZCBhbmQgbGlrZWx5CisJCQkJICogd2Ugd2VyZSBub3QgdXAgdG8gZGF0ZSB0byBiZWdpbiB3aXRoLgorCQkJCSAqLworCQkJCWVycm9yKCJyZW1vdGUgJyVzJyBpcyBub3QgYW4gYW5jZXN0b3Igb2ZcbiIKKwkJCQkgICAgICAibG9jYWwgJyVzJy5cbiIKKwkJCQkgICAgICAiTWF5YmUgeW91IGFyZSBub3QgdXAtdG8tZGF0ZSBhbmQgIgorCQkJCSAgICAgICJuZWVkIHRvIHB1bGwgZmlyc3Q/IiwKKwkJCQkgICAgICByZWYtPm5hbWUsCisJCQkJICAgICAgcmVmLT5wZWVyX3JlZi0+bmFtZSk7CisJCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJCXByaW50ZigiZXJyb3IgJXMgbm9uLWZhc3QgZm9yd2FyZFxuIiwgcmVmLT5uYW1lKTsKKwkJCQlyYyA9IC0yOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWhhc2hjcHkocmVmLT5uZXdfc2hhMSwgcmVmLT5wZWVyX3JlZi0+bmV3X3NoYTEpOworCQluZXdfcmVmcysrOworCQlzdHJjcHkob2xkX2hleCwgc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSkpOworCQluZXdfaGV4ID0gc2hhMV90b19oZXgocmVmLT5uZXdfc2hhMSk7CisKKwkJZnByaW50ZihzdGRlcnIsICJ1cGRhdGluZyAnJXMnIiwgcmVmLT5uYW1lKTsKKwkJaWYgKHN0cmNtcChyZWYtPm5hbWUsIHJlZi0+cGVlcl9yZWYtPm5hbWUpKQorCQkJZnByaW50ZihzdGRlcnIsICIgdXNpbmcgJyVzJyIsIHJlZi0+cGVlcl9yZWYtPm5hbWUpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuICBmcm9tICVzXG4gIHRvICAgJXNcbiIsIG9sZF9oZXgsIG5ld19oZXgpOworCQlpZiAoZHJ5X3J1bikgeworCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJcHJpbnRmKCJvayAlc1xuIiwgcmVmLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogTG9jayByZW1vdGUgYnJhbmNoIHJlZiAqLworCQlyZWZfbG9jayA9IGxvY2tfcmVtb3RlKHJlZi0+bmFtZSwgTE9DS19USU1FKTsKKwkJaWYgKHJlZl9sb2NrID09IE5VTEwpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGxvY2sgcmVtb3RlIGJyYW5jaCAlc1xuIiwKKwkJCQlyZWYtPm5hbWUpOworCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJcHJpbnRmKCJlcnJvciAlcyBsb2NrIGVycm9yXG4iLCByZWYtPm5hbWUpOworCQkJcmMgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBTZXQgdXAgcmV2aXNpb24gaW5mbyBmb3IgdGhpcyByZWZzcGVjICovCisJCWNvbW1pdF9hcmdjID0gMzsKKwkJbmV3X3NoYTFfaGV4ID0geHN0cmR1cChzaGExX3RvX2hleChyZWYtPm5ld19zaGExKSk7CisJCW9sZF9zaGExX2hleCA9IE5VTEw7CisJCWNvbW1pdF9hcmd2WzFdID0gIi0tb2JqZWN0cyI7CisJCWNvbW1pdF9hcmd2WzJdID0gbmV3X3NoYTFfaGV4OworCQlpZiAoIXB1c2hfYWxsICYmICFpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkpIHsKKwkJCW9sZF9zaGExX2hleCA9IHhtYWxsb2MoNDIpOworCQkJc3ByaW50ZihvbGRfc2hhMV9oZXgsICJeJXMiLAorCQkJCXNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpKTsKKwkJCWNvbW1pdF9hcmd2WzNdID0gb2xkX3NoYTFfaGV4OworCQkJY29tbWl0X2FyZ2MrKzsKKwkJfQorCQljb21taXRfYXJndltjb21taXRfYXJnY10gPSBOVUxMOworCQlpbml0X3JldmlzaW9ucygmcmV2cywgc2V0dXBfZ2l0X2RpcmVjdG9yeSgpKTsKKwkJc2V0dXBfcmV2aXNpb25zKGNvbW1pdF9hcmdjLCBjb21taXRfYXJndiwgJnJldnMsIE5VTEwpOworCQlyZXZzLmVkZ2VfaGludCA9IDA7IC8qIGp1c3QgaW4gY2FzZSAqLworCQlmcmVlKG5ld19zaGExX2hleCk7CisJCWlmIChvbGRfc2hhMV9oZXgpIHsKKwkJCWZyZWUob2xkX3NoYTFfaGV4KTsKKwkJCWNvbW1pdF9hcmd2WzFdID0gTlVMTDsKKwkJfQorCisJCS8qIEdlbmVyYXRlIGEgbGlzdCBvZiBvYmplY3RzIHRoYXQgbmVlZCB0byBiZSBwdXNoZWQgKi8KKwkJcHVzaGluZyA9IDA7CisJCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCQltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcocmV2cy5jb21taXRzLCAmcmV2cywgTlVMTCk7CisJCW9iamVjdHNfdG9fc2VuZCA9IGdldF9kZWx0YSgmcmV2cywgcmVmX2xvY2spOworCQlmaW5pc2hfYWxsX2FjdGl2ZV9zbG90cygpOworCisJCS8qIFB1c2ggbWlzc2luZyBvYmplY3RzIHRvIHJlbW90ZSwgdGhpcyB3b3VsZCBiZSBhCisJCSAgIGNvbnZlbmllbnQgdGltZSB0byBwYWNrIHRoZW0gZmlyc3QgaWYgYXBwcm9wcmlhdGUuICovCisJCXB1c2hpbmcgPSAxOworCQlpZiAob2JqZWN0c190b19zZW5kKQorCQkJZnByaW50ZihzdGRlcnIsICIgICAgc2VuZGluZyAlZCBvYmplY3RzXG4iLAorCQkJCW9iamVjdHNfdG9fc2VuZCk7CisKKwkJcnVuX3JlcXVlc3RfcXVldWUoKTsKKworCQkvKiBVcGRhdGUgdGhlIHJlbW90ZSBicmFuY2ggaWYgYWxsIHdlbnQgd2VsbCAqLworCQlpZiAoYWJvcnRlZCB8fCAhdXBkYXRlX3JlbW90ZShyZWYtPm5ld19zaGExLCByZWZfbG9jaykpCisJCQlyYyA9IDE7CisKKwkJaWYgKCFyYykKKwkJCWZwcmludGYoc3RkZXJyLCAiICAgIGRvbmVcbiIpOworCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCXByaW50ZigiJXMgJXNcbiIsICFyYyA/ICJvayIgOiAiZXJyb3IiLCByZWYtPm5hbWUpOworCQl1bmxvY2tfcmVtb3RlKHJlZl9sb2NrKTsKKwkJY2hlY2tfbG9ja3MoKTsKKwl9CisKKwkvKiBVcGRhdGUgcmVtb3RlIHNlcnZlciBpbmZvIGlmIGFwcHJvcHJpYXRlICovCisJaWYgKHJlcG8tPmhhc19pbmZvX3JlZnMgJiYgbmV3X3JlZnMpIHsKKwkJaWYgKGluZm9fcmVmX2xvY2sgJiYgcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVXBkYXRpbmcgcmVtb3RlIHNlcnZlciBpbmZvXG4iKTsKKwkJCWlmICghZHJ5X3J1bikKKwkJCQl1cGRhdGVfcmVtb3RlX2luZm9fcmVmcyhpbmZvX3JlZl9sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHVwZGF0ZSBzZXJ2ZXIgaW5mb1xuIik7CisJCX0KKwl9CisKKyBjbGVhbnVwOgorCWlmIChpbmZvX3JlZl9sb2NrKQorCQl1bmxvY2tfcmVtb3RlKGluZm9fcmVmX2xvY2spOworCWZyZWUocmVwbyk7CisKKwlodHRwX2NsZWFudXAoKTsKKworCXJlcXVlc3QgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJd2hpbGUgKHJlcXVlc3QgIT0gTlVMTCkgeworCQluZXh0X3JlcXVlc3QgPSByZXF1ZXN0LT5uZXh0OworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCXJlcXVlc3QgPSBuZXh0X3JlcXVlc3Q7CisJfQorCisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvaHR0cC13YWxrZXIuYyBiL2h0dHAtd2Fsa2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxNmM1ZQotLS0gL2Rldi9udWxsCisrKyBiL2h0dHAtd2Fsa2VyLmMKQEAgLTAsMCArMSw1OTEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgIndhbGtlci5oIgorI2luY2x1ZGUgImh0dHAuaCIKKworc3RydWN0IGFsdF9iYXNlIHsKKwljaGFyICpiYXNlOworCWludCBnb3RfaW5kaWNlczsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja3M7CisJc3RydWN0IGFsdF9iYXNlICpuZXh0OworfTsKKworZW51bSBvYmplY3RfcmVxdWVzdF9zdGF0ZSB7CisJV0FJVElORywKKwlBQk9SVEVELAorCUFDVElWRSwKKwlDT01QTEVURQorfTsKKworc3RydWN0IG9iamVjdF9yZXF1ZXN0IHsKKwlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG87CisJZW51bSBvYmplY3RfcmVxdWVzdF9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqbmV4dDsKK307CisKK3N0cnVjdCBhbHRlcm5hdGVzX3JlcXVlc3QgeworCXN0cnVjdCB3YWxrZXIgKndhbGtlcjsKKwljb25zdCBjaGFyICpiYXNlOworCWNoYXIgKnVybDsKKwlzdHJ1Y3Qgc3RyYnVmICpidWZmZXI7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJaW50IGh0dHBfc3BlY2lmaWM7Cit9OworCitzdHJ1Y3Qgd2Fsa2VyX2RhdGEgeworCWNvbnN0IGNoYXIgKnVybDsKKwlpbnQgZ290X2FsdGVybmF0ZXM7CisJc3RydWN0IGFsdF9iYXNlICphbHQ7Cit9OworCitzdGF0aWMgc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmplY3RfcXVldWVfaGVhZDsKKworc3RhdGljIHZvaWQgZmV0Y2hfYWx0ZXJuYXRlcyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKmJhc2UpOworCitzdGF0aWMgdm9pZCBwcm9jZXNzX29iamVjdF9yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKTsKKworc3RhdGljIHZvaWQgc3RhcnRfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IHdhbGtlciAqd2Fsa2VyLAorCQkJCSBzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKnJlcTsKKworCXJlcSA9IG5ld19odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcG8tPmJhc2UsIG9ial9yZXEtPnNoYTEpOworCWlmIChyZXEgPT0gTlVMTCkgeworCQlvYmpfcmVxLT5zdGF0ZSA9IEFCT1JURUQ7CisJCXJldHVybjsKKwl9CisJb2JqX3JlcS0+cmVxID0gcmVxOworCisJc2xvdCA9IHJlcS0+c2xvdDsKKwlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19vYmplY3RfcmVzcG9uc2U7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IG9ial9yZXE7CisKKwkvKiBUcnkgdG8gZ2V0IHRoZSByZXF1ZXN0IHN0YXJ0ZWQsIGFib3J0IHRoZSByZXF1ZXN0IG9uIGVycm9yICovCisJb2JqX3JlcS0+c3RhdGUgPSBBQ1RJVkU7CisJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlvYmpfcmVxLT5zdGF0ZSA9IEFCT1JURUQ7CisJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChyZXEpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQoreworCWlmIChmaW5pc2hfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxLT5yZXEpKQorCQlyZXR1cm47CisKKwlpZiAob2JqX3JlcS0+cmVxLT5yZW5hbWUgPT0gMCkKKwkJd2Fsa2VyX3NheShvYmpfcmVxLT53YWxrZXIsICJnb3QgJXNcbiIsIHNoYTFfdG9faGV4KG9ial9yZXEtPnNoYTEpKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19vYmplY3RfcmVzcG9uc2Uodm9pZCAqY2FsbGJhY2tfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEgPQorCQkoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICopY2FsbGJhY2tfZGF0YTsKKwlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIgPSBvYmpfcmVxLT53YWxrZXI7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOworCXN0cnVjdCBhbHRfYmFzZSAqYWx0ID0gZGF0YS0+YWx0OworCisJcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSk7CisJb2JqX3JlcS0+c3RhdGUgPSBDT01QTEVURTsKKworCS8qIFVzZSBhbHRlcm5hdGVzIGlmIG5lY2Vzc2FyeSAqLworCWlmIChtaXNzaW5nX3RhcmdldChvYmpfcmVxLT5yZXEpKSB7CisJCWZldGNoX2FsdGVybmF0ZXMod2Fsa2VyLCBhbHQtPmJhc2UpOworCQlpZiAob2JqX3JlcS0+cmVwby0+bmV4dCAhPSBOVUxMKSB7CisJCQlvYmpfcmVxLT5yZXBvID0KKwkJCQlvYmpfcmVxLT5yZXBvLT5uZXh0OworCQkJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSk7CisJCQlzdGFydF9vYmplY3RfcmVxdWVzdCh3YWxrZXIsIG9ial9yZXEpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZmluaXNoX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKmVudHJ5ID0gb2JqZWN0X3F1ZXVlX2hlYWQ7CisKKwlpZiAob2JqX3JlcS0+cmVxICE9TlVMTCAmJiBvYmpfcmVxLT5yZXEtPmxvY2FsZmlsZSAhPSAtMSkKKwkJZXJyb3IoImZkIGxlYWthZ2UgaW4gcmVsZWFzZTogJWQiLCBvYmpfcmVxLT5yZXEtPmxvY2FsZmlsZSk7CisJaWYgKG9ial9yZXEgPT0gb2JqZWN0X3F1ZXVlX2hlYWQpIHsKKwkJb2JqZWN0X3F1ZXVlX2hlYWQgPSBvYmpfcmVxLT5uZXh0OworCX0gZWxzZSB7CisJCXdoaWxlIChlbnRyeS0+bmV4dCAhPSBOVUxMICYmIGVudHJ5LT5uZXh0ICE9IG9ial9yZXEpCisJCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCQlpZiAoZW50cnktPm5leHQgPT0gb2JqX3JlcSkKKwkJCWVudHJ5LT5uZXh0ID0gZW50cnktPm5leHQtPm5leHQ7CisJfQorCisJZnJlZShvYmpfcmVxKTsKK30KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdGF0aWMgaW50IGZpbGxfYWN0aXZlX3Nsb3Qoc3RydWN0IHdhbGtlciAqd2Fsa2VyKQoreworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcTsKKworCWZvciAob2JqX3JlcSA9IG9iamVjdF9xdWV1ZV9oZWFkOyBvYmpfcmVxOyBvYmpfcmVxID0gb2JqX3JlcS0+bmV4dCkgeworCQlpZiAob2JqX3JlcS0+c3RhdGUgPT0gV0FJVElORykgeworCQkJaWYgKGhhc19zaGExX2ZpbGUob2JqX3JlcS0+c2hhMSkpCisJCQkJb2JqX3JlcS0+c3RhdGUgPSBDT01QTEVURTsKKwkJCWVsc2UgeworCQkJCXN0YXJ0X29iamVjdF9yZXF1ZXN0KHdhbGtlciwgb2JqX3JlcSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcHJlZmV0Y2goc3RydWN0IHdhbGtlciAqd2Fsa2VyLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqbmV3cmVxOworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqdGFpbDsKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CisKKwluZXdyZXEgPSB4bWFsbG9jKHNpemVvZigqbmV3cmVxKSk7CisJbmV3cmVxLT53YWxrZXIgPSB3YWxrZXI7CisJaGFzaGNweShuZXdyZXEtPnNoYTEsIHNoYTEpOworCW5ld3JlcS0+cmVwbyA9IGRhdGEtPmFsdDsKKwluZXdyZXEtPnN0YXRlID0gV0FJVElORzsKKwluZXdyZXEtPnJlcSA9IE5VTEw7CisJbmV3cmVxLT5uZXh0ID0gTlVMTDsKKworCWh0dHBfaXNfdmVyYm9zZSA9IHdhbGtlci0+Z2V0X3ZlcmJvc2VseTsKKworCWlmIChvYmplY3RfcXVldWVfaGVhZCA9PSBOVUxMKSB7CisJCW9iamVjdF9xdWV1ZV9oZWFkID0gbmV3cmVxOworCX0gZWxzZSB7CisJCXRhaWwgPSBvYmplY3RfcXVldWVfaGVhZDsKKwkJd2hpbGUgKHRhaWwtPm5leHQgIT0gTlVMTCkKKwkJCXRhaWwgPSB0YWlsLT5uZXh0OworCQl0YWlsLT5uZXh0ID0gbmV3cmVxOworCX0KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKwlzdGVwX2FjdGl2ZV9zbG90cygpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYWx0ZXJuYXRlc19yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKQoreworCXN0cnVjdCBhbHRlcm5hdGVzX3JlcXVlc3QgKmFsdF9yZXEgPQorCQkoc3RydWN0IGFsdGVybmF0ZXNfcmVxdWVzdCAqKWNhbGxiYWNrX2RhdGE7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyID0gYWx0X3JlcS0+d2Fsa2VyOworCXN0cnVjdCB3YWxrZXJfZGF0YSAqY2RhdGEgPSB3YWxrZXItPmRhdGE7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBhbHRfcmVxLT5zbG90OworCXN0cnVjdCBhbHRfYmFzZSAqdGFpbCA9IGNkYXRhLT5hbHQ7CisJY29uc3QgY2hhciAqYmFzZSA9IGFsdF9yZXEtPmJhc2U7CisJY29uc3QgY2hhciBudWxsX2J5dGUgPSAnXDAnOworCWNoYXIgKmRhdGE7CisJaW50IGkgPSAwOworCisJaWYgKGFsdF9yZXEtPmh0dHBfc3BlY2lmaWMpIHsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LIHx8CisJCSAgICAhYWx0X3JlcS0+YnVmZmVyLT5sZW4pIHsKKworCQkJLyogVHJ5IHJldXNpbmcgdGhlIHNsb3QgdG8gZ2V0IG5vbi1odHRwIGFsdGVybmF0ZXMgKi8KKwkJCWFsdF9yZXEtPmh0dHBfc3BlY2lmaWMgPSAwOworCQkJc3ByaW50ZihhbHRfcmVxLT51cmwsICIlcy9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIsCisJCQkJYmFzZSk7CisJCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLAorCQkJCQkgYWx0X3JlcS0+dXJsKTsKKwkJCWFjdGl2ZV9yZXF1ZXN0cysrOworCQkJc2xvdC0+aW5fdXNlID0gMTsKKwkJCWlmIChzbG90LT5maW5pc2hlZCAhPSBOVUxMKQorCQkJCSgqc2xvdC0+ZmluaXNoZWQpID0gMDsKKwkJCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJCQljZGF0YS0+Z290X2FsdGVybmF0ZXMgPSAtMTsKKwkJCQlzbG90LT5pbl91c2UgPSAwOworCQkJCWlmIChzbG90LT5maW5pc2hlZCAhPSBOVUxMKQorCQkJCQkoKnNsb3QtPmZpbmlzaGVkKSA9IDE7CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCWlmICghbWlzc2luZ190YXJnZXQoc2xvdCkpIHsKKwkJCWNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9IC0xOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZndyaXRlX2J1ZmZlcigoY2hhciAqKSZudWxsX2J5dGUsIDEsIDEsIGFsdF9yZXEtPmJ1ZmZlcik7CisJYWx0X3JlcS0+YnVmZmVyLT5sZW4tLTsKKwlkYXRhID0gYWx0X3JlcS0+YnVmZmVyLT5idWY7CisKKwl3aGlsZSAoaSA8IGFsdF9yZXEtPmJ1ZmZlci0+bGVuKSB7CisJCWludCBwb3NuID0gaTsKKwkJd2hpbGUgKHBvc24gPCBhbHRfcmVxLT5idWZmZXItPmxlbiAmJiBkYXRhW3Bvc25dICE9ICdcbicpCisJCQlwb3NuKys7CisJCWlmIChkYXRhW3Bvc25dID09ICdcbicpIHsKKwkJCWludCBva2F5ID0gMDsKKwkJCWludCBzZXJ2ZXJsZW4gPSAwOworCQkJc3RydWN0IGFsdF9iYXNlICpuZXdhbHQ7CisJCQljaGFyICp0YXJnZXQgPSBOVUxMOworCQkJaWYgKGRhdGFbaV0gPT0gJy8nKSB7CisJCQkJLyoKKwkJCQkgKiBUaGlzIGNvdW50cworCQkJCSAqIGh0dHA6Ly9naXQuaG9zdC9wdWIvc2NtL2xpbnV4LmdpdC8KKwkJCQkgKiAtLS0tLS0tLS0tLWhlcmVeCisJCQkJICogc28gbWVtY3B5KGRzdCwgYmFzZSwgc2VydmVybGVuKSB3aWxsCisJCQkJICogY29weSB1cCB0byAiLi4uZ2l0Lmhvc3QiLgorCQkJCSAqLworCQkJCWNvbnN0IGNoYXIgKmNvbG9uX3NzID0gc3Ryc3RyKGJhc2UsIjovLyIpOworCQkJCWlmIChjb2xvbl9zcykgeworCQkJCQlzZXJ2ZXJsZW4gPSAoc3RyY2hyKGNvbG9uX3NzICsgMywgJy8nKQorCQkJCQkJICAgICAtIGJhc2UpOworCQkJCQlva2F5ID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKCFtZW1jbXAoZGF0YSArIGksICIuLi8iLCAzKSkgeworCQkJCS8qCisJCQkJICogUmVsYXRpdmUgVVJMOyBjaG9wIHRoZSBjb3JyZXNwb25kaW5nCisJCQkJICogbnVtYmVyIG9mIHN1YnBhdGggZnJvbSBiYXNlIChhbmQgLi4vCisJCQkJICogZnJvbSBkYXRhKSwgYW5kIGNvbmNhdGVuYXRlIHRoZSByZXN1bHQuCisJCQkJICoKKwkJCQkgKiBUaGUgY29kZSBmaXJzdCBkcm9wcyAuLi8gZnJvbSBkYXRhLCBhbmQKKwkJCQkgKiB0aGVuIGRyb3BzIG9uZSAuLi8gZnJvbSBkYXRhIGFuZCBvbmUgcGF0aAorCQkJCSAqIGZyb20gYmFzZS4gIElPVywgb25lIGV4dHJhIC4uLyBpcyBkcm9wcGVkCisJCQkJICogZnJvbSBkYXRhIHRoYW4gcGF0aCBpcyBkcm9wcGVkIGZyb20gYmFzZS4KKwkJCQkgKgorCQkJCSAqIFRoaXMgaXMgbm90IHdyb25nLiAgVGhlIGFsdGVybmF0ZSBpbgorCQkJCSAqICAgICBodHRwOi8vZ2l0Lmhvc3QvcHViL3NjbS9saW51eC5naXQvCisJCQkJICogdG8gYm9ycm93IGZyb20KKwkJCQkgKiAgICAgaHR0cDovL2dpdC5ob3N0L3B1Yi9zY20vbGludXMuZ2l0LworCQkJCSAqIGlzIC4uLy4uL2xpbnVzLmdpdC9vYmplY3RzLy4gIFlvdSBuZWVkCisJCQkJICogdHdvIC4uLy4uLyB0byBib3Jyb3cgZnJvbSB5b3VyIGRpcmVjdAorCQkJCSAqIG5laWdoYm91ci4KKwkJCQkgKi8KKwkJCQlpICs9IDM7CisJCQkJc2VydmVybGVuID0gc3RybGVuKGJhc2UpOworCQkJCXdoaWxlIChpICsgMiA8IHBvc24gJiYKKwkJCQkgICAgICAgIW1lbWNtcChkYXRhICsgaSwgIi4uLyIsIDMpKSB7CisJCQkJCWRvIHsKKwkJCQkJCXNlcnZlcmxlbi0tOworCQkJCQl9IHdoaWxlIChzZXJ2ZXJsZW4gJiYKKwkJCQkJCSBiYXNlW3NlcnZlcmxlbiAtIDFdICE9ICcvJyk7CisJCQkJCWkgKz0gMzsKKwkJCQl9CisJCQkJLyogSWYgdGhlIHNlcnZlciBnb3QgcmVtb3ZlZCwgZ2l2ZSB1cC4gKi8KKwkJCQlva2F5ID0gc3RyY2hyKGJhc2UsICc6JykgLSBiYXNlICsgMyA8CisJCQkJICAgICAgIHNlcnZlcmxlbjsKKwkJCX0gZWxzZSBpZiAoYWx0X3JlcS0+aHR0cF9zcGVjaWZpYykgeworCQkJCWNoYXIgKmNvbG9uID0gc3RyY2hyKGRhdGEgKyBpLCAnOicpOworCQkJCWNoYXIgKnNsYXNoID0gc3RyY2hyKGRhdGEgKyBpLCAnLycpOworCQkJCWlmIChjb2xvbiAmJiBzbGFzaCAmJiBjb2xvbiA8IGRhdGEgKyBwb3NuICYmCisJCQkJICAgIHNsYXNoIDwgZGF0YSArIHBvc24gJiYgY29sb24gPCBzbGFzaCkgeworCQkJCQlva2F5ID0gMTsKKwkJCQl9CisJCQl9CisJCQkvKiBza2lwICJvYmplY3RzXG4iIGF0IGVuZCAqLworCQkJaWYgKG9rYXkpIHsKKwkJCQl0YXJnZXQgPSB4bWFsbG9jKHNlcnZlcmxlbiArIHBvc24gLSBpIC0gNik7CisJCQkJbWVtY3B5KHRhcmdldCwgYmFzZSwgc2VydmVybGVuKTsKKwkJCQltZW1jcHkodGFyZ2V0ICsgc2VydmVybGVuLCBkYXRhICsgaSwKKwkJCQkgICAgICAgcG9zbiAtIGkgLSA3KTsKKwkJCQl0YXJnZXRbc2VydmVybGVuICsgcG9zbiAtIGkgLSA3XSA9IDA7CisJCQkJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiQWxzbyBsb29rIGF0ICVzXG4iLCB0YXJnZXQpOworCQkJCW5ld2FsdCA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdhbHQpKTsKKwkJCQluZXdhbHQtPm5leHQgPSBOVUxMOworCQkJCW5ld2FsdC0+YmFzZSA9IHRhcmdldDsKKwkJCQluZXdhbHQtPmdvdF9pbmRpY2VzID0gMDsKKwkJCQluZXdhbHQtPnBhY2tzID0gTlVMTDsKKworCQkJCXdoaWxlICh0YWlsLT5uZXh0ICE9IE5VTEwpCisJCQkJCXRhaWwgPSB0YWlsLT5uZXh0OworCQkJCXRhaWwtPm5leHQgPSBuZXdhbHQ7CisJCQl9CisJCX0KKwkJaSA9IHBvc24gKyAxOworCX0KKworCWNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGZldGNoX2FsdGVybmF0ZXMoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBjb25zdCBjaGFyICpiYXNlKQoreworCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqdXJsOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBhbHRlcm5hdGVzX3JlcXVlc3QgYWx0X3JlcTsKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmNkYXRhID0gd2Fsa2VyLT5kYXRhOworCisJLyoKKwkgKiBJZiBhbm90aGVyIHJlcXVlc3QgaGFzIGFscmVhZHkgc3RhcnRlZCBmZXRjaGluZyBhbHRlcm5hdGVzLAorCSAqIHdhaXQgZm9yIHRoZW0gdG8gYXJyaXZlIGFuZCByZXR1cm4gdG8gcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QncworCSAqIGN1cmwgbWVzc2FnZQorCSAqLworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJd2hpbGUgKGNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9PSAwKSB7CisJCXN0ZXBfYWN0aXZlX3Nsb3RzKCk7CisJfQorI2VuZGlmCisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXkndmUgYWxyZWFkeSBiZWVuIGZldGNoZWQgKi8KKwlpZiAoY2RhdGEtPmdvdF9hbHRlcm5hdGVzID09IDEpCisJCXJldHVybjsKKworCS8qIFN0YXJ0IHRoZSBmZXRjaCAqLworCWNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9IDA7CisKKwlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KQorCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgYWx0ZXJuYXRlcyBsaXN0IGZvciAlc1xuIiwgYmFzZSk7CisKKwl1cmwgPSB4bWFsbG9jKHN0cmxlbihiYXNlKSArIDMxKTsKKwlzcHJpbnRmKHVybCwgIiVzL29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMiLCBiYXNlKTsKKworCS8qCisJICogVXNlIGEgY2FsbGJhY2sgdG8gcHJvY2VzcyB0aGUgcmVzdWx0LCBzaW5jZSBhbm90aGVyIHJlcXVlc3QKKwkgKiBtYXkgZmFpbCBhbmQgbmVlZCB0byBoYXZlIGFsdGVybmF0ZXMgbG9hZGVkIGJlZm9yZSBjb250aW51aW5nCisJICovCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX2FsdGVybmF0ZXNfcmVzcG9uc2U7CisJYWx0X3JlcS53YWxrZXIgPSB3YWxrZXI7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9ICZhbHRfcmVxOworCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCisJYWx0X3JlcS5iYXNlID0gYmFzZTsKKwlhbHRfcmVxLnVybCA9IHVybDsKKwlhbHRfcmVxLmJ1ZmZlciA9ICZidWZmZXI7CisJYWx0X3JlcS5odHRwX3NwZWNpZmljID0gMTsKKwlhbHRfcmVxLnNsb3QgPSBzbG90OworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKQorCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJZWxzZQorCQljZGF0YS0+Z290X2FsdGVybmF0ZXMgPSAtMTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCWZyZWUodXJsKTsKK30KKworc3RhdGljIGludCBmZXRjaF9pbmRpY2VzKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IGFsdF9iYXNlICpyZXBvKQoreworCWludCByZXQ7CisKKwlpZiAocmVwby0+Z290X2luZGljZXMpCisJCXJldHVybiAwOworCisJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKKwkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIHBhY2sgbGlzdCBmb3IgJXNcbiIsIHJlcG8tPmJhc2UpOworCisJc3dpdGNoIChodHRwX2dldF9pbmZvX3BhY2tzKHJlcG8tPmJhc2UsICZyZXBvLT5wYWNrcykpIHsKKwljYXNlIEhUVFBfT0s6CisJY2FzZSBIVFRQX01JU1NJTkdfVEFSR0VUOgorCQlyZXBvLT5nb3RfaW5kaWNlcyA9IDE7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlcG8tPmdvdF9pbmRpY2VzID0gMDsKKwkJcmV0ID0gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBodHRwX2ZldGNoX3BhY2soc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKKwlpbnQgcmV0OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CisKKwlpZiAoZmV0Y2hfaW5kaWNlcyh3YWxrZXIsIHJlcG8pKQorCQlyZXR1cm4gLTE7CisJdGFyZ2V0ID0gZmluZF9zaGExX3BhY2soc2hhMSwgcmVwby0+cGFja3MpOworCWlmICghdGFyZ2V0KQorCQlyZXR1cm4gLTE7CisKKwlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KSB7CisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBwYWNrICVzXG4iLAorCQkJc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSk7CisJCWZwcmludGYoc3RkZXJyLCAiIHdoaWNoIGNvbnRhaW5zICVzXG4iLAorCQkJc2hhMV90b19oZXgoc2hhMSkpOworCX0KKworCXByZXEgPSBuZXdfaHR0cF9wYWNrX3JlcXVlc3QodGFyZ2V0LCByZXBvLT5iYXNlKTsKKwlpZiAocHJlcSA9PSBOVUxMKQorCQlnb3RvIGFib3J0OworCXByZXEtPmxzdCA9ICZyZXBvLT5wYWNrczsKKwlwcmVxLT5zbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3QocHJlcS0+c2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHByZXEtPnNsb3QpOworCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQkJZXJyb3IoIlVuYWJsZSB0byBnZXQgcGFjayBmaWxlICVzXG4lcyIsIHByZXEtPnVybCwKKwkJCSAgICAgIGN1cmxfZXJyb3JzdHIpOworCQkJZ290byBhYm9ydDsKKwkJfQorCX0gZWxzZSB7CisJCWVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOworCQlnb3RvIGFib3J0OworCX0KKworCXJldCA9IGZpbmlzaF9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKKwlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKKworYWJvcnQ6CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBhYm9ydF9vYmplY3RfcmVxdWVzdChzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEpCit7CisJcmVsZWFzZV9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKK30KKworc3RhdGljIGludCBmZXRjaF9vYmplY3Qoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxID0gb2JqZWN0X3F1ZXVlX2hlYWQ7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKnJlcTsKKworCXdoaWxlIChvYmpfcmVxICE9IE5VTEwgJiYgaGFzaGNtcChvYmpfcmVxLT5zaGExLCBzaGExKSkKKwkJb2JqX3JlcSA9IG9ial9yZXEtPm5leHQ7CisJaWYgKG9ial9yZXEgPT0gTlVMTCkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBmaW5kIHJlcXVlc3QgZm9yICVzIGluIHRoZSBxdWV1ZSIsIGhleCk7CisKKwlpZiAoaGFzX3NoYTFfZmlsZShvYmpfcmVxLT5zaGExKSkgeworCQlpZiAob2JqX3JlcS0+cmVxICE9IE5VTEwpCisJCQlhYm9ydF9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSk7CisJCWFib3J0X29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCXdoaWxlIChvYmpfcmVxLT5zdGF0ZSA9PSBXQUlUSU5HKQorCQlzdGVwX2FjdGl2ZV9zbG90cygpOworI2Vsc2UKKwlzdGFydF9vYmplY3RfcmVxdWVzdCh3YWxrZXIsIG9ial9yZXEpOworI2VuZGlmCisKKwkvKgorCSAqIG9ial9yZXEtPnJlcSBtaWdodCBjaGFuZ2Ugd2hlbiBmZXRjaGluZyBhbHRlcm5hdGVzIGluIHRoZSBjYWxsYmFjaworCSAqIHByb2Nlc3Nfb2JqZWN0X3Jlc3BvbnNlOyB0aGVyZWZvcmUsIHRoZSAic2hvcnRjdXQiIHZhcmlhYmxlLCByZXEsCisJICogaXMgdXNlZCBvbmx5IGFmdGVyIHdlJ3JlIGRvbmUgd2l0aCBzbG90cy4KKwkgKi8KKwl3aGlsZSAob2JqX3JlcS0+c3RhdGUgPT0gQUNUSVZFKQorCQlydW5fYWN0aXZlX3Nsb3Qob2JqX3JlcS0+cmVxLT5zbG90KTsKKworCXJlcSA9IG9ial9yZXEtPnJlcTsKKworCWlmIChyZXEtPmxvY2FsZmlsZSAhPSAtMSkgeworCQljbG9zZShyZXEtPmxvY2FsZmlsZSk7CisJCXJlcS0+bG9jYWxmaWxlID0gLTE7CisJfQorCisJaWYgKG9ial9yZXEtPnN0YXRlID09IEFCT1JURUQpIHsKKwkJcmV0ID0gZXJyb3IoIlJlcXVlc3QgZm9yICVzIGFib3J0ZWQiLCBoZXgpOworCX0gZWxzZSBpZiAocmVxLT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSyAmJgorCQkgICByZXEtPmh0dHBfY29kZSAhPSA0MTYpIHsKKwkJaWYgKG1pc3NpbmdfdGFyZ2V0KHJlcSkpCisJCQlyZXQgPSAtMTsgLyogQmUgc2lsZW50LCBpdCBpcyBwcm9iYWJseSBpbiBhIHBhY2suICovCisJCWVsc2UKKwkJCXJldCA9IGVycm9yKCIlcyAoY3VybF9yZXN1bHQgPSAlZCwgaHR0cF9jb2RlID0gJWxkLCBzaGExID0gJXMpIiwKKwkJCQkgICAgcmVxLT5lcnJvcnN0ciwgcmVxLT5jdXJsX3Jlc3VsdCwKKwkJCQkgICAgcmVxLT5odHRwX2NvZGUsIGhleCk7CisJfSBlbHNlIGlmIChyZXEtPnpyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCXdhbGtlci0+Y29ycnVwdF9vYmplY3RfZm91bmQrKzsKKwkJcmV0ID0gZXJyb3IoIkZpbGUgJXMgKCVzKSBjb3JydXB0IiwgaGV4LCByZXEtPnVybCk7CisJfSBlbHNlIGlmIChoYXNoY21wKG9ial9yZXEtPnNoYTEsIHJlcS0+cmVhbF9zaGExKSkgeworCQlyZXQgPSBlcnJvcigiRmlsZSAlcyBoYXMgYmFkIGhhc2giLCBoZXgpOworCX0gZWxzZSBpZiAocmVxLT5yZW5hbWUgPCAwKSB7CisJCXJldCA9IGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlbmFtZSAlcyIsCisJCQkgICAgc2hhMV9maWxlX25hbWUocmVxLT5zaGExKSk7CisJfQorCisJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KHJlcSk7CisJcmVsZWFzZV9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZldGNoKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CisJc3RydWN0IGFsdF9iYXNlICphbHRiYXNlID0gZGF0YS0+YWx0OworCisJaWYgKCFmZXRjaF9vYmplY3Qod2Fsa2VyLCBhbHRiYXNlLCBzaGExKSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGFsdGJhc2UpIHsKKwkJaWYgKCFodHRwX2ZldGNoX3BhY2sod2Fsa2VyLCBhbHRiYXNlLCBzaGExKSkKKwkJCXJldHVybiAwOworCQlmZXRjaF9hbHRlcm5hdGVzKHdhbGtlciwgZGF0YS0+YWx0LT5iYXNlKTsKKwkJYWx0YmFzZSA9IGFsdGJhc2UtPm5leHQ7CisJfQorCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIGZpbmQgJXMgdW5kZXIgJXMiLCBzaGExX3RvX2hleChzaGExKSwKKwkJICAgICBkYXRhLT5hbHQtPmJhc2UpOworfQorCitzdGF0aWMgaW50IGZldGNoX3JlZihzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCByZWYgKnJlZikKK3sKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CisJcmV0dXJuIGh0dHBfZmV0Y2hfcmVmKGRhdGEtPmFsdC0+YmFzZSwgcmVmKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCit7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOworCXN0cnVjdCBhbHRfYmFzZSAqYWx0LCAqYWx0X25leHQ7CisKKwlpZiAoZGF0YSkgeworCQlhbHQgPSBkYXRhLT5hbHQ7CisJCXdoaWxlIChhbHQpIHsKKwkJCWFsdF9uZXh0ID0gYWx0LT5uZXh0OworCisJCQlmcmVlKGFsdC0+YmFzZSk7CisJCQlmcmVlKGFsdCk7CisKKwkJCWFsdCA9IGFsdF9uZXh0OworCQl9CisJCWZyZWUoZGF0YSk7CisJCXdhbGtlci0+ZGF0YSA9IE5VTEw7CisJfQorfQorCitzdHJ1Y3Qgd2Fsa2VyICpnZXRfaHR0cF93YWxrZXIoY29uc3QgY2hhciAqdXJsKQoreworCWNoYXIgKnM7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHdhbGtlcl9kYXRhKSk7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHdhbGtlcikpOworCisJZGF0YS0+YWx0ID0geG1hbGxvYyhzaXplb2YoKmRhdGEtPmFsdCkpOworCWRhdGEtPmFsdC0+YmFzZSA9IHhtYWxsb2Moc3RybGVuKHVybCkgKyAxKTsKKwlzdHJjcHkoZGF0YS0+YWx0LT5iYXNlLCB1cmwpOworCWZvciAocyA9IGRhdGEtPmFsdC0+YmFzZSArIHN0cmxlbihkYXRhLT5hbHQtPmJhc2UpIC0gMTsgKnMgPT0gJy8nOyAtLXMpCisJCSpzID0gMDsKKworCWRhdGEtPmFsdC0+Z290X2luZGljZXMgPSAwOworCWRhdGEtPmFsdC0+cGFja3MgPSBOVUxMOworCWRhdGEtPmFsdC0+bmV4dCA9IE5VTEw7CisJZGF0YS0+Z290X2FsdGVybmF0ZXMgPSAtMTsKKworCXdhbGtlci0+Y29ycnVwdF9vYmplY3RfZm91bmQgPSAwOworCXdhbGtlci0+ZmV0Y2ggPSBmZXRjaDsKKwl3YWxrZXItPmZldGNoX3JlZiA9IGZldGNoX3JlZjsKKwl3YWxrZXItPnByZWZldGNoID0gcHJlZmV0Y2g7CisJd2Fsa2VyLT5jbGVhbnVwID0gY2xlYW51cDsKKwl3YWxrZXItPmRhdGEgPSBkYXRhOworCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlhZGRfZmlsbF9mdW5jdGlvbih3YWxrZXIsIChpbnQgKCopKHZvaWQgKikpIGZpbGxfYWN0aXZlX3Nsb3QpOworI2VuZGlmCisKKwlyZXR1cm4gd2Fsa2VyOworfQpkaWZmIC0tZ2l0IGEvaHR0cC5jIGIvaHR0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOWJiNzEKLS0tIC9kZXYvbnVsbAorKysgYi9odHRwLmMKQEAgLTAsMCArMSwxMzY5IEBACisjaW5jbHVkZSAiaHR0cC5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKworaW50IGFjdGl2ZV9yZXF1ZXN0czsKK2ludCBodHRwX2lzX3ZlcmJvc2U7CitzaXplX3QgaHR0cF9wb3N0X2J1ZmZlciA9IDE2ICogTEFSR0VfUEFDS0VUX01BWDsKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBhMDYKKyNkZWZpbmUgTElCQ1VSTF9DQU5fSEFORExFX0FVVEhfQU5ZCisjZW5kaWYKKworc3RhdGljIGludCBtaW5fY3VybF9zZXNzaW9ucyA9IDE7CitzdGF0aWMgaW50IGN1cmxfc2Vzc2lvbl9jb3VudDsKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorc3RhdGljIGludCBtYXhfcmVxdWVzdHMgPSAtMTsKK3N0YXRpYyBDVVJMTSAqY3VybG07CisjZW5kaWYKKyNpZm5kZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorc3RhdGljIENVUkwgKmN1cmxfZGVmYXVsdDsKKyNlbmRpZgorCisjZGVmaW5lIFBSRVZfQlVGX1NJWkUgNDA5NgorI2RlZmluZSBSQU5HRV9IRUFERVJfU0laRSAzMAorCitjaGFyIGN1cmxfZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKKworc3RhdGljIGludCBjdXJsX3NzbF92ZXJpZnkgPSAtMTsKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfY2VydDsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2tleTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfY2FwYXRoOworI2VuZGlmCitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2NhaW5mbzsKK3N0YXRpYyBsb25nIGN1cmxfbG93X3NwZWVkX2xpbWl0ID0gLTE7CitzdGF0aWMgbG9uZyBjdXJsX2xvd19zcGVlZF90aW1lID0gLTE7CitzdGF0aWMgaW50IGN1cmxfZnRwX25vX2Vwc3Y7CitzdGF0aWMgY29uc3QgY2hhciAqY3VybF9odHRwX3Byb3h5Oworc3RhdGljIGNvbnN0IGNoYXIgKmN1cmxfY29va2llX2ZpbGU7CitzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWwgaHR0cF9hdXRoID0gQ1JFREVOVElBTF9JTklUOworc3RhdGljIGludCBodHRwX3Byb2FjdGl2ZV9hdXRoOworc3RhdGljIGNvbnN0IGNoYXIgKnVzZXJfYWdlbnQ7CisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxNzAwCisvKiBVc2UgQ1VSTE9QVF9LRVlQQVNTV0QgYXMgaXMgKi8KKyNlbGlmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDMKKyNkZWZpbmUgQ1VSTE9QVF9LRVlQQVNTV0QgQ1VSTE9QVF9TU0xLRVlQQVNTV0QKKyNlbHNlCisjZGVmaW5lIENVUkxPUFRfS0VZUEFTU1dEIENVUkxPUFRfU1NMQ0VSVFBBU1NXRAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbCBjZXJ0X2F1dGggPSBDUkVERU5USUFMX0lOSVQ7CitzdGF0aWMgaW50IHNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkOworCitzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKnByYWdtYV9oZWFkZXI7CitzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKm5vX3ByYWdtYV9oZWFkZXI7CisKK3N0YXRpYyBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqYWN0aXZlX3F1ZXVlX2hlYWQ7CisKK3NpemVfdCBmcmVhZF9idWZmZXIoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpidWZmZXJfKQoreworCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCXN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9IGJ1ZmZlcl87CisKKwlpZiAoc2l6ZSA+IGJ1ZmZlci0+YnVmLmxlbiAtIGJ1ZmZlci0+cG9zbikKKwkJc2l6ZSA9IGJ1ZmZlci0+YnVmLmxlbiAtIGJ1ZmZlci0+cG9zbjsKKwltZW1jcHkocHRyLCBidWZmZXItPmJ1Zi5idWYgKyBidWZmZXItPnBvc24sIHNpemUpOworCWJ1ZmZlci0+cG9zbiArPSBzaXplOworCisJcmV0dXJuIHNpemU7Cit9CisKKyNpZm5kZWYgTk9fQ1VSTF9JT0NUTAorY3VybGlvZXJyIGlvY3RsX2J1ZmZlcihDVVJMICpoYW5kbGUsIGludCBjbWQsIHZvaWQgKmNsaWVudHApCit7CisJc3RydWN0IGJ1ZmZlciAqYnVmZmVyID0gY2xpZW50cDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBDVVJMSU9DTURfTk9QOgorCQlyZXR1cm4gQ1VSTElPRV9PSzsKKworCWNhc2UgQ1VSTElPQ01EX1JFU1RBUlRSRUFEOgorCQlidWZmZXItPnBvc24gPSAwOworCQlyZXR1cm4gQ1VSTElPRV9PSzsKKworCWRlZmF1bHQ6CisJCXJldHVybiBDVVJMSU9FX1VOS05PV05DTUQ7CisJfQorfQorI2VuZGlmCisKK3NpemVfdCBmd3JpdGVfYnVmZmVyKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqYnVmZmVyXykKK3sKKwlzaXplX3Qgc2l6ZSA9IGVsdHNpemUgKiBubWVtYjsKKwlzdHJ1Y3Qgc3RyYnVmICpidWZmZXIgPSBidWZmZXJfOworCisJc3RyYnVmX2FkZChidWZmZXIsIHB0ciwgc2l6ZSk7CisJcmV0dXJuIHNpemU7Cit9CisKK3NpemVfdCBmd3JpdGVfbnVsbChjaGFyICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmJ1ZikKK3sKKwlyZXR1cm4gZWx0c2l6ZSAqIG5tZW1iOworfQorCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY3VybF9tZXNzYWdlcyh2b2lkKQoreworCWludCBudW1fbWVzc2FnZXM7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJQ1VSTE1zZyAqY3VybF9tZXNzYWdlID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoY3VybG0sICZudW1fbWVzc2FnZXMpOworCisJd2hpbGUgKGN1cmxfbWVzc2FnZSAhPSBOVUxMKSB7CisJCWlmIChjdXJsX21lc3NhZ2UtPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKwkJCWludCBjdXJsX3Jlc3VsdCA9IGN1cmxfbWVzc2FnZS0+ZGF0YS5yZXN1bHQ7CisJCQlzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJCQl3aGlsZSAoc2xvdCAhPSBOVUxMICYmCisJCQkgICAgICAgc2xvdC0+Y3VybCAhPSBjdXJsX21lc3NhZ2UtPmVhc3lfaGFuZGxlKQorCQkJCXNsb3QgPSBzbG90LT5uZXh0OworCQkJaWYgKHNsb3QgIT0gTlVMTCkgeworCQkJCWN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsbSwgc2xvdC0+Y3VybCk7CisJCQkJc2xvdC0+Y3VybF9yZXN1bHQgPSBjdXJsX3Jlc3VsdDsKKwkJCQlmaW5pc2hfYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiUmVjZWl2ZWQgRE9ORSBtZXNzYWdlIGZvciB1bmtub3duIHJlcXVlc3QhXG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBDVVJMIG1lc3NhZ2UgcmVjZWl2ZWQ6ICVkXG4iLAorCQkJCShpbnQpY3VybF9tZXNzYWdlLT5tc2cpOworCQl9CisJCWN1cmxfbWVzc2FnZSA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGN1cmxtLCAmbnVtX21lc3NhZ2VzKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIGludCBodHRwX29wdGlvbnMoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsdmVyaWZ5IiwgdmFyKSkgeworCQljdXJsX3NzbF92ZXJpZnkgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjZXJ0IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfY2VydCwgdmFyLCB2YWx1ZSk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMworCWlmICghc3RyY21wKCJodHRwLnNzbGtleSIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmc3NsX2tleSwgdmFyLCB2YWx1ZSk7CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2FwYXRoIiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfY2FwYXRoLCB2YXIsIHZhbHVlKTsKKyNlbmRpZgorCWlmICghc3RyY21wKCJodHRwLnNzbGNhaW5mbyIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmc3NsX2NhaW5mbywgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2VydHBhc3N3b3JkcHJvdGVjdGVkIiwgdmFyKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAubWluc2Vzc2lvbnMiLCB2YXIpKSB7CisJCW1pbl9jdXJsX3Nlc3Npb25zID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisjaWZuZGVmIFVTRV9DVVJMX01VTFRJCisJCWlmIChtaW5fY3VybF9zZXNzaW9ucyA+IDEpCisJCQltaW5fY3VybF9zZXNzaW9ucyA9IDE7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQorI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaWYgKCFzdHJjbXAoImh0dHAubWF4cmVxdWVzdHMiLCB2YXIpKSB7CisJCW1heF9yZXF1ZXN0cyA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwlpZiAoIXN0cmNtcCgiaHR0cC5sb3dzcGVlZGxpbWl0IiwgdmFyKSkgeworCQljdXJsX2xvd19zcGVlZF9saW1pdCA9IChsb25nKWdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAubG93c3BlZWR0aW1lIiwgdmFyKSkgeworCQljdXJsX2xvd19zcGVlZF90aW1lID0gKGxvbmcpZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJodHRwLm5vZXBzdiIsIHZhcikpIHsKKwkJY3VybF9mdHBfbm9fZXBzdiA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKCJodHRwLnByb3h5IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZjdXJsX2h0dHBfcHJveHksIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImh0dHAuY29va2llZmlsZSIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmY3VybF9jb29raWVfZmlsZSwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5wb3N0YnVmZmVyIiwgdmFyKSkgeworCQlodHRwX3Bvc3RfYnVmZmVyID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWlmIChodHRwX3Bvc3RfYnVmZmVyIDwgTEFSR0VfUEFDS0VUX01BWCkKKwkJCWh0dHBfcG9zdF9idWZmZXIgPSBMQVJHRV9QQUNLRVRfTUFYOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC51c2VyYWdlbnQiLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnVzZXJfYWdlbnQsIHZhciwgdmFsdWUpOworCisJLyogRmFsbCBiYWNrIG9uIHRoZSBkZWZhdWx0IG9uZXMgKi8KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9jdXJsX2h0dHBfYXV0aChDVVJMICpyZXN1bHQpCit7CisJaWYgKCFodHRwX2F1dGgudXNlcm5hbWUpCisJCXJldHVybjsKKworCWNyZWRlbnRpYWxfZmlsbCgmaHR0cF9hdXRoKTsKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzEzMDEKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9VU0VSTkFNRSwgaHR0cF9hdXRoLnVzZXJuYW1lKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QQVNTV09SRCwgaHR0cF9hdXRoLnBhc3N3b3JkKTsKKyNlbHNlCisJeworCQlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cCA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfcmVzZXQoJnVwKTsKKwkJc3RyYnVmX2FkZGYoJnVwLCAiJXM6JXMiLAorCQkJICAgIGh0dHBfYXV0aC51c2VybmFtZSwgaHR0cF9hdXRoLnBhc3N3b3JkKTsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfVVNFUlBXRCwgdXAuYnVmKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIGludCBoYXNfY2VydF9wYXNzd29yZCh2b2lkKQoreworCWlmIChzc2xfY2VydCA9PSBOVUxMIHx8IHNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkICE9IDEpCisJCXJldHVybiAwOworCWlmICghY2VydF9hdXRoLnBhc3N3b3JkKSB7CisJCWNlcnRfYXV0aC5wcm90b2NvbCA9IHhzdHJkdXAoImNlcnQiKTsKKwkJY2VydF9hdXRoLnBhdGggPSB4c3RyZHVwKHNzbF9jZXJ0KTsKKwkJY3JlZGVudGlhbF9maWxsKCZjZXJ0X2F1dGgpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIENVUkwgKmdldF9jdXJsX2hhbmRsZSh2b2lkKQoreworCUNVUkwgKnJlc3VsdCA9IGN1cmxfZWFzeV9pbml0KCk7CisKKwlpZiAoIWN1cmxfc3NsX3ZlcmlmeSkgeworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwKTsKKwl9IGVsc2UgeworCQkvKiBWZXJpZnkgYXV0aGVudGljaXR5IG9mIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUgKi8KKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDEpOworCQkvKiBUaGUgbmFtZSBpbiB0aGUgY2VydCBtdXN0IG1hdGNoIHdob20gd2UgdHJpZWQgdG8gY29ubmVjdCAqLworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMik7CisJfQorCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwNworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX05FVFJDLCBDVVJMX05FVFJDX09QVElPTkFMKTsKKyNlbmRpZgorI2lmZGVmIExJQkNVUkxfQ0FOX0hBTkRMRV9BVVRIX0FOWQorCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9BTlkpOworI2VuZGlmCisKKwlpZiAoaHR0cF9wcm9hY3RpdmVfYXV0aCkKKwkJaW5pdF9jdXJsX2h0dHBfYXV0aChyZXN1bHQpOworCisJaWYgKHNzbF9jZXJ0ICE9IE5VTEwpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTENFUlQsIHNzbF9jZXJ0KTsKKwlpZiAoaGFzX2NlcnRfcGFzc3dvcmQoKSkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfS0VZUEFTU1dELCBjZXJ0X2F1dGgucGFzc3dvcmQpOworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDMKKwlpZiAoc3NsX2tleSAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xLRVksIHNzbF9rZXkpOworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorCWlmIChzc2xfY2FwYXRoICE9IE5VTEwpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0NBUEFUSCwgc3NsX2NhcGF0aCk7CisjZW5kaWYKKwlpZiAoc3NsX2NhaW5mbyAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9DQUlORk8sIHNzbF9jYWluZm8pOworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKKworCWlmIChjdXJsX2xvd19zcGVlZF9saW1pdCA+IDAgJiYgY3VybF9sb3dfc3BlZWRfdGltZSA+IDApIHsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTE9XX1NQRUVEX0xJTUlULAorCQkJCSBjdXJsX2xvd19zcGVlZF9saW1pdCk7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0xPV19TUEVFRF9USU1FLAorCQkJCSBjdXJsX2xvd19zcGVlZF90aW1lKTsKKwl9CisKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTMwMQorCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BPU1RSRURJUiwgQ1VSTF9SRURJUl9QT1NUX0FMTCk7CisjZWxpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxMTAxCisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUE9TVDMwMSwgMSk7CisjZW5kaWYKKworCWlmIChnZXRlbnYoIkdJVF9DVVJMX1ZFUkJPU0UiKSkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfVkVSQk9TRSwgMSk7CisKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9VU0VSQUdFTlQsCisJCXVzZXJfYWdlbnQgPyB1c2VyX2FnZW50IDogZ2l0X3VzZXJfYWdlbnQoKSk7CisKKwlpZiAoY3VybF9mdHBfbm9fZXBzdikKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfRlRQX1VTRV9FUFNWLCAwKTsKKworCWlmIChjdXJsX2h0dHBfcHJveHkpIHsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPWFksIGN1cmxfaHR0cF9wcm94eSk7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BST1hZQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBzZXRfZnJvbV9lbnYoY29uc3QgY2hhciAqKnZhciwgY29uc3QgY2hhciAqZW52bmFtZSkKK3sKKwljb25zdCBjaGFyICp2YWwgPSBnZXRlbnYoZW52bmFtZSk7CisJaWYgKHZhbCkKKwkJKnZhciA9IHZhbDsKK30KKwordm9pZCBodHRwX2luaXQoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwsIGludCBwcm9hY3RpdmVfYXV0aCkKK3sKKwljaGFyICpsb3dfc3BlZWRfbGltaXQ7CisJY2hhciAqbG93X3NwZWVkX3RpbWU7CisKKwlodHRwX2lzX3ZlcmJvc2UgPSAwOworCisJZ2l0X2NvbmZpZyhodHRwX29wdGlvbnMsIE5VTEwpOworCisJY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisJaHR0cF9wcm9hY3RpdmVfYXV0aCA9IHByb2FjdGl2ZV9hdXRoOworCisJaWYgKHJlbW90ZSAmJiByZW1vdGUtPmh0dHBfcHJveHkpCisJCWN1cmxfaHR0cF9wcm94eSA9IHhzdHJkdXAocmVtb3RlLT5odHRwX3Byb3h5KTsKKworCXByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChwcmFnbWFfaGVhZGVyLCAiUHJhZ21hOiBuby1jYWNoZSIpOworCW5vX3ByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChub19wcmFnbWFfaGVhZGVyLCAiUHJhZ21hOiIpOworCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwl7CisJCWNoYXIgKmh0dHBfbWF4X3JlcXVlc3RzID0gZ2V0ZW52KCJHSVRfSFRUUF9NQVhfUkVRVUVTVFMiKTsKKwkJaWYgKGh0dHBfbWF4X3JlcXVlc3RzICE9IE5VTEwpCisJCQltYXhfcmVxdWVzdHMgPSBhdG9pKGh0dHBfbWF4X3JlcXVlc3RzKTsKKwl9CisKKwljdXJsbSA9IGN1cmxfbXVsdGlfaW5pdCgpOworCWlmIChjdXJsbSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgY3JlYXRpbmcgY3VybCBtdWx0aSBoYW5kbGUuXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisjZW5kaWYKKworCWlmIChnZXRlbnYoIkdJVF9TU0xfTk9fVkVSSUZZIikpCisJCWN1cmxfc3NsX3ZlcmlmeSA9IDA7CisKKwlzZXRfZnJvbV9lbnYoJnNzbF9jZXJ0LCAiR0lUX1NTTF9DRVJUIik7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMworCXNldF9mcm9tX2Vudigmc3NsX2tleSwgIkdJVF9TU0xfS0VZIik7CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4CisJc2V0X2Zyb21fZW52KCZzc2xfY2FwYXRoLCAiR0lUX1NTTF9DQVBBVEgiKTsKKyNlbmRpZgorCXNldF9mcm9tX2Vudigmc3NsX2NhaW5mbywgIkdJVF9TU0xfQ0FJTkZPIik7CisKKwlzZXRfZnJvbV9lbnYoJnVzZXJfYWdlbnQsICJHSVRfSFRUUF9VU0VSX0FHRU5UIik7CisKKwlsb3dfc3BlZWRfbGltaXQgPSBnZXRlbnYoIkdJVF9IVFRQX0xPV19TUEVFRF9MSU1JVCIpOworCWlmIChsb3dfc3BlZWRfbGltaXQgIT0gTlVMTCkKKwkJY3VybF9sb3dfc3BlZWRfbGltaXQgPSBzdHJ0b2wobG93X3NwZWVkX2xpbWl0LCBOVUxMLCAxMCk7CisJbG93X3NwZWVkX3RpbWUgPSBnZXRlbnYoIkdJVF9IVFRQX0xPV19TUEVFRF9USU1FIik7CisJaWYgKGxvd19zcGVlZF90aW1lICE9IE5VTEwpCisJCWN1cmxfbG93X3NwZWVkX3RpbWUgPSBzdHJ0b2wobG93X3NwZWVkX3RpbWUsIE5VTEwsIDEwKTsKKworCWlmIChjdXJsX3NzbF92ZXJpZnkgPT0gLTEpCisJCWN1cmxfc3NsX3ZlcmlmeSA9IDE7CisKKwljdXJsX3Nlc3Npb25fY291bnQgPSAwOworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaWYgKG1heF9yZXF1ZXN0cyA8IDEpCisJCW1heF9yZXF1ZXN0cyA9IERFRkFVTFRfTUFYX1JFUVVFU1RTOworI2VuZGlmCisKKwlpZiAoZ2V0ZW52KCJHSVRfQ1VSTF9GVFBfTk9fRVBTViIpKQorCQljdXJsX2Z0cF9ub19lcHN2ID0gMTsKKworCWlmICh1cmwpIHsKKwkJY3JlZGVudGlhbF9mcm9tX3VybCgmaHR0cF9hdXRoLCB1cmwpOworCQlpZiAoIXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkICYmCisJCSAgICBnZXRlbnYoIkdJVF9TU0xfQ0VSVF9QQVNTV09SRF9QUk9URUNURUQiKSAmJgorCQkgICAgIXByZWZpeGNtcCh1cmwsICJodHRwczovLyIpKQorCQkJc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgPSAxOworCX0KKworI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCisJY3VybF9kZWZhdWx0ID0gZ2V0X2N1cmxfaGFuZGxlKCk7CisjZW5kaWYKK30KKwordm9pZCBodHRwX2NsZWFudXAodm9pZCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCisJd2hpbGUgKHNsb3QgIT0gTlVMTCkgeworCQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqbmV4dCA9IHNsb3QtPm5leHQ7CisJCWlmIChzbG90LT5jdXJsICE9IE5VTEwpIHsKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCQkJY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxtLCBzbG90LT5jdXJsKTsKKyNlbmRpZgorCQkJY3VybF9lYXN5X2NsZWFudXAoc2xvdC0+Y3VybCk7CisJCX0KKwkJZnJlZShzbG90KTsKKwkJc2xvdCA9IG5leHQ7CisJfQorCWFjdGl2ZV9xdWV1ZV9oZWFkID0gTlVMTDsKKworI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCisJY3VybF9lYXN5X2NsZWFudXAoY3VybF9kZWZhdWx0KTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwljdXJsX211bHRpX2NsZWFudXAoY3VybG0pOworI2VuZGlmCisJY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisJY3VybF9zbGlzdF9mcmVlX2FsbChwcmFnbWFfaGVhZGVyKTsKKwlwcmFnbWFfaGVhZGVyID0gTlVMTDsKKworCWN1cmxfc2xpc3RfZnJlZV9hbGwobm9fcHJhZ21hX2hlYWRlcik7CisJbm9fcHJhZ21hX2hlYWRlciA9IE5VTEw7CisKKwlpZiAoY3VybF9odHRwX3Byb3h5KSB7CisJCWZyZWUoKHZvaWQgKiljdXJsX2h0dHBfcHJveHkpOworCQljdXJsX2h0dHBfcHJveHkgPSBOVUxMOworCX0KKworCWlmIChjZXJ0X2F1dGgucGFzc3dvcmQgIT0gTlVMTCkgeworCQltZW1zZXQoY2VydF9hdXRoLnBhc3N3b3JkLCAwLCBzdHJsZW4oY2VydF9hdXRoLnBhc3N3b3JkKSk7CisJCWZyZWUoY2VydF9hdXRoLnBhc3N3b3JkKTsKKwkJY2VydF9hdXRoLnBhc3N3b3JkID0gTlVMTDsKKwl9CisJc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgPSAwOworfQorCitzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqZ2V0X2FjdGl2ZV9zbG90KHZvaWQpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqbmV3c2xvdDsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaW50IG51bV90cmFuc2ZlcnM7CisKKwkvKiBXYWl0IGZvciBhIHNsb3QgdG8gb3BlbiB1cCBpZiB0aGUgcXVldWUgaXMgZnVsbCAqLworCXdoaWxlIChhY3RpdmVfcmVxdWVzdHMgPj0gbWF4X3JlcXVlc3RzKSB7CisJCWN1cmxfbXVsdGlfcGVyZm9ybShjdXJsbSwgJm51bV90cmFuc2ZlcnMpOworCQlpZiAobnVtX3RyYW5zZmVycyA8IGFjdGl2ZV9yZXF1ZXN0cykKKwkJCXByb2Nlc3NfY3VybF9tZXNzYWdlcygpOworCX0KKyNlbmRpZgorCisJd2hpbGUgKHNsb3QgIT0gTlVMTCAmJiBzbG90LT5pbl91c2UpCisJCXNsb3QgPSBzbG90LT5uZXh0OworCisJaWYgKHNsb3QgPT0gTlVMTCkgeworCQluZXdzbG90ID0geG1hbGxvYyhzaXplb2YoKm5ld3Nsb3QpKTsKKwkJbmV3c2xvdC0+Y3VybCA9IE5VTEw7CisJCW5ld3Nsb3QtPmluX3VzZSA9IDA7CisJCW5ld3Nsb3QtPm5leHQgPSBOVUxMOworCisJCXNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwkJaWYgKHNsb3QgPT0gTlVMTCkgeworCQkJYWN0aXZlX3F1ZXVlX2hlYWQgPSBuZXdzbG90OworCQl9IGVsc2UgeworCQkJd2hpbGUgKHNsb3QtPm5leHQgIT0gTlVMTCkKKwkJCQlzbG90ID0gc2xvdC0+bmV4dDsKKwkJCXNsb3QtPm5leHQgPSBuZXdzbG90OworCQl9CisJCXNsb3QgPSBuZXdzbG90OworCX0KKworCWlmIChzbG90LT5jdXJsID09IE5VTEwpIHsKKyNpZmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCisJCXNsb3QtPmN1cmwgPSBnZXRfY3VybF9oYW5kbGUoKTsKKyNlbHNlCisJCXNsb3QtPmN1cmwgPSBjdXJsX2Vhc3lfZHVwaGFuZGxlKGN1cmxfZGVmYXVsdCk7CisjZW5kaWYKKwkJY3VybF9zZXNzaW9uX2NvdW50Kys7CisJfQorCisJYWN0aXZlX3JlcXVlc3RzKys7CisJc2xvdC0+aW5fdXNlID0gMTsKKwlzbG90LT5yZXN1bHRzID0gTlVMTDsKKwlzbG90LT5maW5pc2hlZCA9IE5VTEw7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IE5VTEw7CisJc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IE5VTEw7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NPT0tJRUZJTEUsIGN1cmxfY29va2llX2ZpbGUpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBwcmFnbWFfaGVhZGVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIGN1cmxfZXJyb3JzdHIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9DVVNUT01SRVFVRVNULCBOVUxMKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCBOVUxMKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgTlVMTCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIE5VTEwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUExPQUQsIDApOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQR0VULCAxKTsKKwlpZiAoaHR0cF9hdXRoLnBhc3N3b3JkKQorCQlpbml0X2N1cmxfaHR0cF9hdXRoKHNsb3QtPmN1cmwpOworCisJcmV0dXJuIHNsb3Q7Cit9CisKK2ludCBzdGFydF9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCUNVUkxNY29kZSBjdXJsbV9yZXN1bHQgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUoY3VybG0sIHNsb3QtPmN1cmwpOworCWludCBudW1fdHJhbnNmZXJzOworCisJaWYgKGN1cmxtX3Jlc3VsdCAhPSBDVVJMTV9PSyAmJgorCSAgICBjdXJsbV9yZXN1bHQgIT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7CisJCWFjdGl2ZV9yZXF1ZXN0cy0tOworCQlzbG90LT5pbl91c2UgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFdlIGtub3cgdGhlcmUgbXVzdCBiZSBzb21ldGhpbmcgdG8gZG8sIHNpbmNlIHdlIGp1c3QgYWRkZWQKKwkgKiBzb21ldGhpbmcuCisJICovCisJY3VybF9tdWx0aV9wZXJmb3JtKGN1cmxtLCAmbnVtX3RyYW5zZmVycyk7CisjZW5kaWYKKwlyZXR1cm4gMTsKK30KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdHJ1Y3QgZmlsbF9jaGFpbiB7CisJdm9pZCAqZGF0YTsKKwlpbnQgKCpmaWxsKSh2b2lkICopOworCXN0cnVjdCBmaWxsX2NoYWluICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBmaWxsX2NoYWluICpmaWxsX2NmZzsKKwordm9pZCBhZGRfZmlsbF9mdW5jdGlvbih2b2lkICpkYXRhLCBpbnQgKCpmaWxsKSh2b2lkICopKQoreworCXN0cnVjdCBmaWxsX2NoYWluICpuZXcgPSB4bWFsbG9jKHNpemVvZigqbmV3KSk7CisJc3RydWN0IGZpbGxfY2hhaW4gKipsaW5rcCA9ICZmaWxsX2NmZzsKKwluZXctPmRhdGEgPSBkYXRhOworCW5ldy0+ZmlsbCA9IGZpbGw7CisJbmV3LT5uZXh0ID0gTlVMTDsKKwl3aGlsZSAoKmxpbmtwKQorCQlsaW5rcCA9ICYoKmxpbmtwKS0+bmV4dDsKKwkqbGlua3AgPSBuZXc7Cit9CisKK3ZvaWQgZmlsbF9hY3RpdmVfc2xvdHModm9pZCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCisJd2hpbGUgKGFjdGl2ZV9yZXF1ZXN0cyA8IG1heF9yZXF1ZXN0cykgeworCQlzdHJ1Y3QgZmlsbF9jaGFpbiAqZmlsbDsKKwkJZm9yIChmaWxsID0gZmlsbF9jZmc7IGZpbGw7IGZpbGwgPSBmaWxsLT5uZXh0KQorCQkJaWYgKGZpbGwtPmZpbGwoZmlsbC0+ZGF0YSkpCisJCQkJYnJlYWs7CisKKwkJaWYgKCFmaWxsKQorCQkJYnJlYWs7CisJfQorCisJd2hpbGUgKHNsb3QgIT0gTlVMTCkgeworCQlpZiAoIXNsb3QtPmluX3VzZSAmJiBzbG90LT5jdXJsICE9IE5VTEwKKwkJCSYmIGN1cmxfc2Vzc2lvbl9jb3VudCA+IG1pbl9jdXJsX3Nlc3Npb25zKSB7CisJCQljdXJsX2Vhc3lfY2xlYW51cChzbG90LT5jdXJsKTsKKwkJCXNsb3QtPmN1cmwgPSBOVUxMOworCQkJY3VybF9zZXNzaW9uX2NvdW50LS07CisJCX0KKwkJc2xvdCA9IHNsb3QtPm5leHQ7CisJfQorfQorCit2b2lkIHN0ZXBfYWN0aXZlX3Nsb3RzKHZvaWQpCit7CisJaW50IG51bV90cmFuc2ZlcnM7CisJQ1VSTE1jb2RlIGN1cmxtX3Jlc3VsdDsKKworCWRvIHsKKwkJY3VybG1fcmVzdWx0ID0gY3VybF9tdWx0aV9wZXJmb3JtKGN1cmxtLCAmbnVtX3RyYW5zZmVycyk7CisJfSB3aGlsZSAoY3VybG1fcmVzdWx0ID09IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSk7CisJaWYgKG51bV90cmFuc2ZlcnMgPCBhY3RpdmVfcmVxdWVzdHMpIHsKKwkJcHJvY2Vzc19jdXJsX21lc3NhZ2VzKCk7CisJCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJfQorfQorI2VuZGlmCisKK3ZvaWQgcnVuX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJZmRfc2V0IHJlYWRmZHM7CisJZmRfc2V0IHdyaXRlZmRzOworCWZkX3NldCBleGNmZHM7CisJaW50IG1heF9mZDsKKwlzdHJ1Y3QgdGltZXZhbCBzZWxlY3RfdGltZW91dDsKKwlpbnQgZmluaXNoZWQgPSAwOworCisJc2xvdC0+ZmluaXNoZWQgPSAmZmluaXNoZWQ7CisJd2hpbGUgKCFmaW5pc2hlZCkgeworCQlzdGVwX2FjdGl2ZV9zbG90cygpOworCisJCWlmIChzbG90LT5pbl91c2UpIHsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwZjA0CisJCQlsb25nIGN1cmxfdGltZW91dDsKKwkJCWN1cmxfbXVsdGlfdGltZW91dChjdXJsbSwgJmN1cmxfdGltZW91dCk7CisJCQlpZiAoY3VybF90aW1lb3V0ID09IDApIHsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoY3VybF90aW1lb3V0ID09IC0xKSB7CisJCQkJc2VsZWN0X3RpbWVvdXQudHZfc2VjICA9IDA7CisJCQkJc2VsZWN0X3RpbWVvdXQudHZfdXNlYyA9IDUwMDAwOworCQkJfSBlbHNlIHsKKwkJCQlzZWxlY3RfdGltZW91dC50dl9zZWMgID0gIGN1cmxfdGltZW91dCAvIDEwMDA7CisJCQkJc2VsZWN0X3RpbWVvdXQudHZfdXNlYyA9IChjdXJsX3RpbWVvdXQgJSAxMDAwKSAqIDEwMDA7CisJCQl9CisjZWxzZQorCQkJc2VsZWN0X3RpbWVvdXQudHZfc2VjICA9IDA7CisJCQlzZWxlY3RfdGltZW91dC50dl91c2VjID0gNTAwMDA7CisjZW5kaWYKKworCQkJbWF4X2ZkID0gLTE7CisJCQlGRF9aRVJPKCZyZWFkZmRzKTsKKwkJCUZEX1pFUk8oJndyaXRlZmRzKTsKKwkJCUZEX1pFUk8oJmV4Y2Zkcyk7CisJCQljdXJsX211bHRpX2Zkc2V0KGN1cmxtLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZmRzLCAmbWF4X2ZkKTsKKworCQkJc2VsZWN0KG1heF9mZCsxLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZmRzLCAmc2VsZWN0X3RpbWVvdXQpOworCQl9CisJfQorI2Vsc2UKKwl3aGlsZSAoc2xvdC0+aW5fdXNlKSB7CisJCXNsb3QtPmN1cmxfcmVzdWx0ID0gY3VybF9lYXN5X3BlcmZvcm0oc2xvdC0+Y3VybCk7CisJCWZpbmlzaF9hY3RpdmVfc2xvdChzbG90KTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgY2xvc2Vkb3duX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworCWFjdGl2ZV9yZXF1ZXN0cy0tOworCXNsb3QtPmluX3VzZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpCit7CisJY2xvc2Vkb3duX2FjdGl2ZV9zbG90KHNsb3QpOworCWlmIChzbG90LT5jdXJsICYmIGN1cmxfc2Vzc2lvbl9jb3VudCA+IG1pbl9jdXJsX3Nlc3Npb25zKSB7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwkJY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxtLCBzbG90LT5jdXJsKTsKKyNlbmRpZgorCQljdXJsX2Vhc3lfY2xlYW51cChzbG90LT5jdXJsKTsKKwkJc2xvdC0+Y3VybCA9IE5VTEw7CisJCWN1cmxfc2Vzc2lvbl9jb3VudC0tOworCX0KKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisjZW5kaWYKK30KKwordm9pZCBmaW5pc2hfYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpCit7CisJY2xvc2Vkb3duX2FjdGl2ZV9zbG90KHNsb3QpOworCWN1cmxfZWFzeV9nZXRpbmZvKHNsb3QtPmN1cmwsIENVUkxJTkZPX0hUVFBfQ09ERSwgJnNsb3QtPmh0dHBfY29kZSk7CisKKwlpZiAoc2xvdC0+ZmluaXNoZWQgIT0gTlVMTCkKKwkJKCpzbG90LT5maW5pc2hlZCkgPSAxOworCisJLyogU3RvcmUgc2xvdCByZXN1bHRzIHNvIHRoZXkgY2FuIGJlIHJlYWQgYWZ0ZXIgdGhlIHNsb3QgaXMgcmV1c2VkICovCisJaWYgKHNsb3QtPnJlc3VsdHMgIT0gTlVMTCkgeworCQlzbG90LT5yZXN1bHRzLT5jdXJsX3Jlc3VsdCA9IHNsb3QtPmN1cmxfcmVzdWx0OworCQlzbG90LT5yZXN1bHRzLT5odHRwX2NvZGUgPSBzbG90LT5odHRwX2NvZGU7CisJfQorCisJLyogUnVuIGNhbGxiYWNrIGlmIGFwcHJvcHJpYXRlICovCisJaWYgKHNsb3QtPmNhbGxiYWNrX2Z1bmMgIT0gTlVMTCkKKwkJc2xvdC0+Y2FsbGJhY2tfZnVuYyhzbG90LT5jYWxsYmFja19kYXRhKTsKK30KKwordm9pZCBmaW5pc2hfYWxsX2FjdGl2ZV9zbG90cyh2b2lkKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisKKwl3aGlsZSAoc2xvdCAhPSBOVUxMKQorCQlpZiAoc2xvdC0+aW5fdXNlKSB7CisJCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCQlzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJCX0gZWxzZSB7CisJCQlzbG90ID0gc2xvdC0+bmV4dDsKKwkJfQorfQorCisvKiBIZWxwZXJzIGZvciBtb2RpZnlpbmcgYW5kIGNyZWF0aW5nIFVSTHMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRzX3F1b3RlKGludCBjaCkKK3sKKwlpZiAoKChjaCA+PSAnQScpICYmIChjaCA8PSAnWicpKQorCQkJfHwgKChjaCA+PSAnYScpICYmIChjaCA8PSAneicpKQorCQkJfHwgKChjaCA+PSAnMCcpICYmIChjaCA8PSAnOScpKQorCQkJfHwgKGNoID09ICcvJykKKwkJCXx8IChjaCA9PSAnLScpCisJCQl8fCAoY2ggPT0gJy4nKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjaGFyICpxdW90ZV9yZWZfdXJsKGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnJlZikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmNwOworCWludCBjaDsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlKTsKKworCWZvciAoY3AgPSByZWY7IChjaCA9ICpjcCkgIT0gMDsgY3ArKykKKwkJaWYgKG5lZWRzX3F1b3RlKGNoKSkKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlJSUwMngiLCBjaCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAqY3ApOworCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3ZvaWQgYXBwZW5kX3JlbW90ZV9vYmplY3RfdXJsKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdXJsLAorCQkJICAgICAgY29uc3QgY2hhciAqaGV4LAorCQkJICAgICAgaW50IG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCkKK3sKKwllbmRfdXJsX3dpdGhfc2xhc2goYnVmLCB1cmwpOworCisJc3RyYnVmX2FkZGYoYnVmLCAib2JqZWN0cy8lLipzLyIsIDIsIGhleCk7CisJaWYgKCFvbmx5X3R3b19kaWdpdF9wcmVmaXgpCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzIiwgaGV4KzIpOworfQorCitjaGFyICpnZXRfcmVtb3RlX29iamVjdF91cmwoY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpoZXgsCisJCQkgICAgaW50IG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybCgmYnVmLCB1cmwsIGhleCwgb25seV90d29fZGlnaXRfcHJlZml4KTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworaW50IGhhbmRsZV9jdXJsX3Jlc3VsdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCwKKwkJICAgICAgIHN0cnVjdCBzbG90X3Jlc3VsdHMgKnJlc3VsdHMpCit7CisJaWYgKHJlc3VsdHMtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCWNyZWRlbnRpYWxfYXBwcm92ZSgmaHR0cF9hdXRoKTsKKwkJcmV0dXJuIEhUVFBfT0s7CisJfSBlbHNlIGlmIChtaXNzaW5nX3RhcmdldChyZXN1bHRzKSkKKwkJcmV0dXJuIEhUVFBfTUlTU0lOR19UQVJHRVQ7CisJZWxzZSBpZiAocmVzdWx0cy0+aHR0cF9jb2RlID09IDQwMSkgeworCQlpZiAoaHR0cF9hdXRoLnVzZXJuYW1lICYmIGh0dHBfYXV0aC5wYXNzd29yZCkgeworCQkJY3JlZGVudGlhbF9yZWplY3QoJmh0dHBfYXV0aCk7CisJCQlyZXR1cm4gSFRUUF9OT0FVVEg7CisJCX0gZWxzZSB7CisJCQljcmVkZW50aWFsX2ZpbGwoJmh0dHBfYXV0aCk7CisJCQlpbml0X2N1cmxfaHR0cF9hdXRoKHNsb3QtPmN1cmwpOworCQkJcmV0dXJuIEhUVFBfUkVBVVRIOworCQl9CisJfSBlbHNlIHsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwYzAwCisJCWlmICghY3VybF9lcnJvcnN0clswXSkKKwkJCXN0cmxjcHkoY3VybF9lcnJvcnN0ciwKKwkJCQljdXJsX2Vhc3lfc3RyZXJyb3IocmVzdWx0cy0+Y3VybF9yZXN1bHQpLAorCQkJCXNpemVvZihjdXJsX2Vycm9yc3RyKSk7CisjZW5kaWYKKwkJcmV0dXJuIEhUVFBfRVJST1I7CisJfQorfQorCisvKiBodHRwX3JlcXVlc3QoKSB0YXJnZXRzICovCisjZGVmaW5lIEhUVFBfUkVRVUVTVF9TVFJCVUYJMAorI2RlZmluZSBIVFRQX1JFUVVFU1RfRklMRQkxCisKK3N0YXRpYyBpbnQgaHR0cF9yZXF1ZXN0KGNvbnN0IGNoYXIgKnVybCwgdm9pZCAqcmVzdWx0LCBpbnQgdGFyZ2V0LCBpbnQgb3B0aW9ucykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBHRVQsIDEpOworCisJaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDEpOworCX0gZWxzZSB7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgcmVzdWx0KTsKKworCQlpZiAodGFyZ2V0ID09IEhUVFBfUkVRVUVTVF9GSUxFKSB7CisJCQlsb25nIHBvc24gPSBmdGVsbChyZXN1bHQpOworCQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sCisJCQkJCSBmd3JpdGUpOworCQkJaWYgKHBvc24gPiAwKSB7CisJCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcG9zbik7CisJCQkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIGJ1Zi5idWYpOworCQkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCX0KKwkJfSBlbHNlCisJCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwKKwkJCQkJIGZ3cml0ZV9idWZmZXIpOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIlByYWdtYToiKTsKKwlpZiAob3B0aW9ucyAmIEhUVFBfTk9fQ0FDSEUpCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiBuby1jYWNoZSIpOworCisJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIGJ1Zi5idWYpOworCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgaGVhZGVycyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VOQ09ESU5HLCAiZ3ppcCIpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJcmV0ID0gaGFuZGxlX2N1cmxfcmVzdWx0KHNsb3QsICZyZXN1bHRzKTsKKwl9IGVsc2UgeworCQllcnJvcigiVW5hYmxlIHRvIHN0YXJ0IEhUVFAgcmVxdWVzdCBmb3IgJXMiLCB1cmwpOworCQlyZXQgPSBIVFRQX1NUQVJUX0ZBSUxFRDsKKwl9CisKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGhlYWRlcnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBodHRwX3JlcXVlc3RfcmVhdXRoKGNvbnN0IGNoYXIgKnVybCwgdm9pZCAqcmVzdWx0LCBpbnQgdGFyZ2V0LAorCQkJICAgICAgIGludCBvcHRpb25zKQoreworCWludCByZXQgPSBodHRwX3JlcXVlc3QodXJsLCByZXN1bHQsIHRhcmdldCwgb3B0aW9ucyk7CisJaWYgKHJldCAhPSBIVFRQX1JFQVVUSCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gaHR0cF9yZXF1ZXN0KHVybCwgcmVzdWx0LCB0YXJnZXQsIG9wdGlvbnMpOworfQorCitpbnQgaHR0cF9nZXRfc3RyYnVmKGNvbnN0IGNoYXIgKnVybCwgc3RydWN0IHN0cmJ1ZiAqcmVzdWx0LCBpbnQgb3B0aW9ucykKK3sKKwlyZXR1cm4gaHR0cF9yZXF1ZXN0X3JlYXV0aCh1cmwsIHJlc3VsdCwgSFRUUF9SRVFVRVNUX1NUUkJVRiwgb3B0aW9ucyk7Cit9CisKKy8qCisgKiBEb3dubG9hZHMgYSBVUkwgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBnaXZlbiBmaWxlLgorICoKKyAqIElmIGEgcHJldmlvdXMgaW50ZXJydXB0ZWQgZG93bmxvYWQgaXMgZGV0ZWN0ZWQgKGkuZS4gYSBwcmV2aW91cyB0ZW1wb3JhcnkKKyAqIGZpbGUgaXMgc3RpbGwgYXJvdW5kKSB0aGUgZG93bmxvYWQgaXMgcmVzdW1lZC4KKyAqLworc3RhdGljIGludCBodHRwX2dldF9maWxlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBvcHRpb25zKQoreworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiB0bXBmaWxlID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqcmVzdWx0OworCisJc3RyYnVmX2FkZGYoJnRtcGZpbGUsICIlcy50ZW1wIiwgZmlsZW5hbWUpOworCXJlc3VsdCA9IGZvcGVuKHRtcGZpbGUuYnVmLCAiYSIpOworCWlmICghIHJlc3VsdCkgeworCQllcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyIsIHRtcGZpbGUuYnVmKTsKKwkJcmV0ID0gSFRUUF9FUlJPUjsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXJldCA9IGh0dHBfcmVxdWVzdF9yZWF1dGgodXJsLCByZXN1bHQsIEhUVFBfUkVRVUVTVF9GSUxFLCBvcHRpb25zKTsKKwlmY2xvc2UocmVzdWx0KTsKKworCWlmICgocmV0ID09IEhUVFBfT0spICYmIG1vdmVfdGVtcF90b19maWxlKHRtcGZpbGUuYnVmLCBmaWxlbmFtZSkpCisJCXJldCA9IEhUVFBfRVJST1I7CitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZ0bXBmaWxlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaHR0cF9lcnJvcihjb25zdCBjaGFyICp1cmwsIGludCByZXQpCit7CisJLyogaHR0cF9yZXF1ZXN0IGhhcyBhbHJlYWR5IGhhbmRsZWQgSFRUUF9TVEFSVF9GQUlMRUQuICovCisJaWYgKHJldCAhPSBIVFRQX1NUQVJUX0ZBSUxFRCkKKwkJZXJyb3IoIiVzIHdoaWxlIGFjY2Vzc2luZyAlcyIsIGN1cmxfZXJyb3JzdHIsIHVybCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaHR0cF9mZXRjaF9yZWYoY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IHJlZiAqcmVmKQoreworCWNoYXIgKnVybDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAtMTsKKworCXVybCA9IHF1b3RlX3JlZl91cmwoYmFzZSwgcmVmLT5uYW1lKTsKKwlpZiAoaHR0cF9nZXRfc3RyYnVmKHVybCwgJmJ1ZmZlciwgSFRUUF9OT19DQUNIRSkgPT0gSFRUUF9PSykgeworCQlzdHJidWZfcnRyaW0oJmJ1ZmZlcik7CisJCWlmIChidWZmZXIubGVuID09IDQwKQorCQkJcmV0ID0gZ2V0X3NoYTFfaGV4KGJ1ZmZlci5idWYsIHJlZi0+b2xkX3NoYTEpOworCQllbHNlIGlmICghcHJlZml4Y21wKGJ1ZmZlci5idWYsICJyZWY6ICIpKSB7CisJCQlyZWYtPnN5bXJlZiA9IHhzdHJkdXAoYnVmZmVyLmJ1ZiArIDUpOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCWZyZWUodXJsKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBwYWNrcyAqLworc3RhdGljIGNoYXIgKmZldGNoX3BhY2tfaW5kZXgodW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqYmFzZV91cmwpCit7CisJY2hhciAqdXJsLCAqdG1wOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoaHR0cF9pc192ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgaW5kZXggZm9yIHBhY2sgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9iamVjdHMvcGFjay9wYWNrLSVzLmlkeCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl1cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLnRlbXAiLCBzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKSk7CisJdG1wID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWlmIChodHRwX2dldF9maWxlKHVybCwgdG1wLCAwKSAhPSBIVFRQX09LKSB7CisJCWVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgaW5kZXggJXMiLCB1cmwpOworCQlmcmVlKHRtcCk7CisJCXRtcCA9IE5VTEw7CisJfQorCisJZnJlZSh1cmwpOworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfYW5kX3NldHVwX3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKipwYWNrc19oZWFkLAorCXVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2VfdXJsKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjazsKKwljaGFyICp0bXBfaWR4ID0gTlVMTDsKKwlpbnQgcmV0OworCisJaWYgKGhhc19wYWNrX2luZGV4KHNoYTEpKSB7CisJCW5ld19wYWNrID0gcGFyc2VfcGFja19pbmRleChzaGExLCBOVUxMKTsKKwkJaWYgKCFuZXdfcGFjaykKKwkJCXJldHVybiAtMTsgLyogcGFyc2VfcGFja19pbmRleCgpIGFscmVhZHkgaXNzdWVkIGVycm9yIG1lc3NhZ2UgKi8KKwkJZ290byBhZGRfcGFjazsKKwl9CisKKwl0bXBfaWR4ID0gZmV0Y2hfcGFja19pbmRleChzaGExLCBiYXNlX3VybCk7CisJaWYgKCF0bXBfaWR4KQorCQlyZXR1cm4gLTE7CisKKwluZXdfcGFjayA9IHBhcnNlX3BhY2tfaW5kZXgoc2hhMSwgdG1wX2lkeCk7CisJaWYgKCFuZXdfcGFjaykgeworCQl1bmxpbmsodG1wX2lkeCk7CisJCWZyZWUodG1wX2lkeCk7CisKKwkJcmV0dXJuIC0xOyAvKiBwYXJzZV9wYWNrX2luZGV4KCkgYWxyZWFkeSBpc3N1ZWQgZXJyb3IgbWVzc2FnZSAqLworCX0KKworCXJldCA9IHZlcmlmeV9wYWNrX2luZGV4KG5ld19wYWNrKTsKKwlpZiAoIXJldCkgeworCQljbG9zZV9wYWNrX2luZGV4KG5ld19wYWNrKTsKKwkJcmV0ID0gbW92ZV90ZW1wX3RvX2ZpbGUodG1wX2lkeCwgc2hhMV9wYWNrX2luZGV4X25hbWUoc2hhMSkpOworCX0KKwlmcmVlKHRtcF9pZHgpOworCWlmIChyZXQpCisJCXJldHVybiAtMTsKKworYWRkX3BhY2s6CisJbmV3X3BhY2stPm5leHQgPSAqcGFja3NfaGVhZDsKKwkqcGFja3NfaGVhZCA9IG5ld19wYWNrOworCXJldHVybiAwOworfQorCitpbnQgaHR0cF9nZXRfaW5mb19wYWNrcyhjb25zdCBjaGFyICpiYXNlX3VybCwgc3RydWN0IHBhY2tlZF9naXQgKipwYWNrc19oZWFkKQoreworCWludCByZXQgPSAwLCBpID0gMDsKKwljaGFyICp1cmwsICpkYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCAib2JqZWN0cy9pbmZvL3BhY2tzIik7CisJdXJsID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCXJldCA9IGh0dHBfZ2V0X3N0cmJ1Zih1cmwsICZidWYsIEhUVFBfTk9fQ0FDSEUpOworCWlmIChyZXQgIT0gSFRUUF9PSykKKwkJZ290byBjbGVhbnVwOworCisJZGF0YSA9IGJ1Zi5idWY7CisJd2hpbGUgKGkgPCBidWYubGVuKSB7CisJCXN3aXRjaCAoZGF0YVtpXSkgeworCQljYXNlICdQJzoKKwkJCWkrKzsKKwkJCWlmIChpICsgNTIgPD0gYnVmLmxlbiAmJgorCQkJICAgICFwcmVmaXhjbXAoZGF0YSArIGksICIgcGFjay0iKSAmJgorCQkJICAgICFwcmVmaXhjbXAoZGF0YSArIGkgKyA0NiwgIi5wYWNrXG4iKSkgeworCQkJCWdldF9zaGExX2hleChkYXRhICsgaSArIDYsIHNoYTEpOworCQkJCWZldGNoX2FuZF9zZXR1cF9wYWNrX2luZGV4KHBhY2tzX2hlYWQsIHNoYTEsCisJCQkJCQkgICAgICBiYXNlX3VybCk7CisJCQkJaSArPSA1MTsKKwkJCQlicmVhazsKKwkJCX0KKwkJZGVmYXVsdDoKKwkJCXdoaWxlIChpIDwgYnVmLmxlbiAmJiBkYXRhW2ldICE9ICdcbicpCisJCQkJaSsrOworCQl9CisJCWkrKzsKKwl9CisKK2NsZWFudXA6CisJZnJlZSh1cmwpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpCit7CisJaWYgKHByZXEtPnBhY2tmaWxlICE9IE5VTEwpIHsKKwkJZmNsb3NlKHByZXEtPnBhY2tmaWxlKTsKKwkJcHJlcS0+cGFja2ZpbGUgPSBOVUxMOworCX0KKwlpZiAocHJlcS0+cmFuZ2VfaGVhZGVyICE9IE5VTEwpIHsKKwkJY3VybF9zbGlzdF9mcmVlX2FsbChwcmVxLT5yYW5nZV9oZWFkZXIpOworCQlwcmVxLT5yYW5nZV9oZWFkZXIgPSBOVUxMOworCX0KKwlwcmVxLT5zbG90ID0gTlVMTDsKKwlmcmVlKHByZXEtPnVybCk7Cit9CisKK2ludCBmaW5pc2hfaHR0cF9wYWNrX3JlcXVlc3Qoc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHN0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gcHJlcS0+dGFyZ2V0OworCWNoYXIgKnRtcF9pZHg7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgaXA7CisJY29uc3QgY2hhciAqaXBfYXJndls4XTsKKworCWNsb3NlX3BhY2tfaW5kZXgocCk7CisKKwlmY2xvc2UocHJlcS0+cGFja2ZpbGUpOworCXByZXEtPnBhY2tmaWxlID0gTlVMTDsKKworCWxzdCA9IHByZXEtPmxzdDsKKwl3aGlsZSAoKmxzdCAhPSBwKQorCQlsc3QgPSAmKCgqbHN0KS0+bmV4dCk7CisJKmxzdCA9ICgqbHN0KS0+bmV4dDsKKworCXRtcF9pZHggPSB4c3RyZHVwKHByZXEtPnRtcGZpbGUpOworCXN0cmNweSh0bXBfaWR4ICsgc3RybGVuKHRtcF9pZHgpIC0gc3RybGVuKCIucGFjay50ZW1wIiksCisJICAgICAgICIuaWR4LnRlbXAiKTsKKworCWlwX2FyZ3ZbMF0gPSAiaW5kZXgtcGFjayI7CisJaXBfYXJndlsxXSA9ICItbyI7CisJaXBfYXJndlsyXSA9IHRtcF9pZHg7CisJaXBfYXJndlszXSA9IHByZXEtPnRtcGZpbGU7CisJaXBfYXJndls0XSA9IE5VTEw7CisKKwltZW1zZXQoJmlwLCAwLCBzaXplb2YoaXApKTsKKwlpcC5hcmd2ID0gaXBfYXJndjsKKwlpcC5naXRfY21kID0gMTsKKwlpcC5ub19zdGRpbiA9IDE7CisJaXAubm9fc3Rkb3V0ID0gMTsKKworCWlmIChydW5fY29tbWFuZCgmaXApKSB7CisJCXVubGluayhwcmVxLT50bXBmaWxlKTsKKwkJdW5saW5rKHRtcF9pZHgpOworCQlmcmVlKHRtcF9pZHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJdW5saW5rKHNoYTFfcGFja19pbmRleF9uYW1lKHAtPnNoYTEpKTsKKworCWlmIChtb3ZlX3RlbXBfdG9fZmlsZShwcmVxLT50bXBmaWxlLCBzaGExX3BhY2tfbmFtZShwLT5zaGExKSkKKwkgfHwgbW92ZV90ZW1wX3RvX2ZpbGUodG1wX2lkeCwgc2hhMV9wYWNrX2luZGV4X25hbWUocC0+c2hhMSkpKSB7CisJCWZyZWUodG1wX2lkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpbnN0YWxsX3BhY2tlZF9naXQocCk7CisJZnJlZSh0bXBfaWR4KTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpuZXdfaHR0cF9wYWNrX3JlcXVlc3QoCisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldCwgY29uc3QgY2hhciAqYmFzZV91cmwpCit7CisJbG9uZyBwcmV2X3Bvc24gPSAwOworCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxOworCisJcHJlcSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpwcmVxKSk7CisJcHJlcS0+dGFyZ2V0ID0gdGFyZ2V0OworCisJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIGJhc2VfdXJsKTsKKwlzdHJidWZfYWRkZigmYnVmLCAib2JqZWN0cy9wYWNrL3BhY2stJXMucGFjayIsCisJCXNoYTFfdG9faGV4KHRhcmdldC0+c2hhMSkpOworCXByZXEtPnVybCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlzbnByaW50ZihwcmVxLT50bXBmaWxlLCBzaXplb2YocHJlcS0+dG1wZmlsZSksICIlcy50ZW1wIiwKKwkJc2hhMV9wYWNrX25hbWUodGFyZ2V0LT5zaGExKSk7CisJcHJlcS0+cGFja2ZpbGUgPSBmb3BlbihwcmVxLT50bXBmaWxlLCAiYSIpOworCWlmICghcHJlcS0+cGFja2ZpbGUpIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBvcGVuIGxvY2FsIGZpbGUgJXMgZm9yIHBhY2siLAorCQkgICAgICBwcmVxLT50bXBmaWxlKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwlwcmVxLT5zbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIHByZXEtPnBhY2tmaWxlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCBwcmVxLT51cmwpOworCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLAorCQlub19wcmFnbWFfaGVhZGVyKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgZGF0YSBwcmVzZW50IGZyb20gYSBwcmV2aW91cyB0cmFuc2ZlciBhdHRlbXB0LAorCSAqIHJlc3VtZSB3aGVyZSBpdCBsZWZ0IG9mZgorCSAqLworCXByZXZfcG9zbiA9IGZ0ZWxsKHByZXEtPnBhY2tmaWxlKTsKKwlpZiAocHJldl9wb3NuPjApIHsKKwkJaWYgKGh0dHBfaXNfdmVyYm9zZSkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBwYWNrICVzIGF0IGJ5dGUgJWxkXG4iLAorCQkJCXNoYTFfdG9faGV4KHRhcmdldC0+c2hhMSksIHByZXZfcG9zbik7CisJCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7CisJCXByZXEtPnJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKE5VTEwsIHJhbmdlKTsKKwkJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsCisJCQlwcmVxLT5yYW5nZV9oZWFkZXIpOworCX0KKworCXJldHVybiBwcmVxOworCithYm9ydDoKKwlmcmVlKHByZXEtPnVybCk7CisJZnJlZShwcmVxKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogSGVscGVycyBmb3IgZmV0Y2hpbmcgb2JqZWN0cyAobG9vc2UpICovCitzdGF0aWMgc2l6ZV90IGZ3cml0ZV9zaGExX2ZpbGUoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAorCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciBleHBuWzQwOTZdOworCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCWludCBwb3NuID0gMDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSA9CisJCShzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqKWRhdGE7CisJZG8geworCQlzc2l6ZV90IHJldHZhbCA9IHh3cml0ZShmcmVxLT5sb2NhbGZpbGUsCisJCQkJCShjaGFyICopIHB0ciArIHBvc24sIHNpemUgLSBwb3NuKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlyZXR1cm4gcG9zbjsKKwkJcG9zbiArPSByZXR2YWw7CisJfSB3aGlsZSAocG9zbiA8IHNpemUpOworCisJZnJlcS0+c3RyZWFtLmF2YWlsX2luID0gc2l6ZTsKKwlmcmVxLT5zdHJlYW0ubmV4dF9pbiA9ICh2b2lkICopcHRyOworCWRvIHsKKwkJZnJlcS0+c3RyZWFtLm5leHRfb3V0ID0gZXhwbjsKKwkJZnJlcS0+c3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihleHBuKTsKKwkJZnJlcS0+enJldCA9IGdpdF9pbmZsYXRlKCZmcmVxLT5zdHJlYW0sIFpfU1lOQ19GTFVTSCk7CisJCWdpdF9TSEExX1VwZGF0ZSgmZnJlcS0+YywgZXhwbiwKKwkJCQlzaXplb2YoZXhwbikgLSBmcmVxLT5zdHJlYW0uYXZhaWxfb3V0KTsKKwl9IHdoaWxlIChmcmVxLT5zdHJlYW0uYXZhaWxfaW4gJiYgZnJlcS0+enJldCA9PSBaX09LKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKm5ld19odHRwX29iamVjdF9yZXF1ZXN0KGNvbnN0IGNoYXIgKmJhc2VfdXJsLAorCXVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7CisJY2hhciAqZmlsZW5hbWU7CisJY2hhciBwcmV2ZmlsZVtQQVRIX01BWF07CisJaW50IHByZXZsb2NhbDsKKwljaGFyIHByZXZfYnVmW1BSRVZfQlVGX1NJWkVdOworCXNzaXplX3QgcHJldl9yZWFkID0gMDsKKwlsb25nIHByZXZfcG9zbiA9IDA7CisJY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07CisJc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlciA9IE5VTEw7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXE7CisKKwlmcmVxID0geGNhbGxvYygxLCBzaXplb2YoKmZyZXEpKTsKKwloYXNoY3B5KGZyZXEtPnNoYTEsIHNoYTEpOworCWZyZXEtPmxvY2FsZmlsZSA9IC0xOworCisJZmlsZW5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKKwlzbnByaW50ZihmcmVxLT50bXBmaWxlLCBzaXplb2YoZnJlcS0+dG1wZmlsZSksCisJCSAiJXMudGVtcCIsIGZpbGVuYW1lKTsKKworCXNucHJpbnRmKHByZXZmaWxlLCBzaXplb2YocHJldmZpbGUpLCAiJXMucHJldiIsIGZpbGVuYW1lKTsKKwl1bmxpbmtfb3Jfd2FybihwcmV2ZmlsZSk7CisJcmVuYW1lKGZyZXEtPnRtcGZpbGUsIHByZXZmaWxlKTsKKwl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlKTsKKworCWlmIChmcmVxLT5sb2NhbGZpbGUgIT0gLTEpCisJCWVycm9yKCJmZCBsZWFrYWdlIGluIHN0YXJ0OiAlZCIsIGZyZXEtPmxvY2FsZmlsZSk7CisJZnJlcS0+bG9jYWxmaWxlID0gb3BlbihmcmVxLT50bXBmaWxlLAorCQkJICAgICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJLyoKKwkgKiBUaGlzIGNvdWxkIGhhdmUgZmFpbGVkIGR1ZSB0byB0aGUgImxhenkgZGlyZWN0b3J5IGNyZWF0aW9uIjsKKwkgKiB0cnkgdG8gbWtkaXIgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQuCisJICovCisJaWYgKGZyZXEtPmxvY2FsZmlsZSA8IDAgJiYgZXJybm8gPT0gRU5PRU5UKSB7CisJCWNoYXIgKmRpciA9IHN0cnJjaHIoZnJlcS0+dG1wZmlsZSwgJy8nKTsKKwkJaWYgKGRpcikgeworCQkJKmRpciA9IDA7CisJCQlta2RpcihmcmVxLT50bXBmaWxlLCAwNzc3KTsKKwkJCSpkaXIgPSAnLyc7CisJCX0KKwkJZnJlcS0+bG9jYWxmaWxlID0gb3BlbihmcmVxLT50bXBmaWxlLAorCQkJCSAgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCX0KKworCWlmIChmcmVxLT5sb2NhbGZpbGUgPCAwKSB7CisJCWVycm9yKCJDb3VsZG4ndCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJXM6ICVzIiwKKwkJICAgICAgZnJlcS0+dG1wZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwlnaXRfaW5mbGF0ZV9pbml0KCZmcmVxLT5zdHJlYW0pOworCisJZ2l0X1NIQTFfSW5pdCgmZnJlcS0+Yyk7CisKKwlmcmVxLT51cmwgPSBnZXRfcmVtb3RlX29iamVjdF91cmwoYmFzZV91cmwsIGhleCwgMCk7CisKKwkvKgorCSAqIElmIGEgcHJldmlvdXMgdGVtcCBmaWxlIGlzIHByZXNlbnQsIHByb2Nlc3Mgd2hhdCB3YXMgYWxyZWFkeQorCSAqIGZldGNoZWQuCisJICovCisJcHJldmxvY2FsID0gb3BlbihwcmV2ZmlsZSwgT19SRE9OTFkpOworCWlmIChwcmV2bG9jYWwgIT0gLTEpIHsKKwkJZG8geworCQkJcHJldl9yZWFkID0geHJlYWQocHJldmxvY2FsLCBwcmV2X2J1ZiwgUFJFVl9CVUZfU0laRSk7CisJCQlpZiAocHJldl9yZWFkPjApIHsKKwkJCQlpZiAoZndyaXRlX3NoYTFfZmlsZShwcmV2X2J1ZiwKKwkJCQkJCSAgICAgMSwKKwkJCQkJCSAgICAgcHJldl9yZWFkLAorCQkJCQkJICAgICBmcmVxKSA9PSBwcmV2X3JlYWQpIHsKKwkJCQkJcHJldl9wb3NuICs9IHByZXZfcmVhZDsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmV2X3JlYWQgPSAtMTsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKHByZXZfcmVhZCA+IDApOworCQljbG9zZShwcmV2bG9jYWwpOworCX0KKwl1bmxpbmtfb3Jfd2FybihwcmV2ZmlsZSk7CisKKwkvKgorCSAqIFJlc2V0IGluZmxhdGUvU0hBMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgcHJldmlvdXMgdGVtcAorCSAqIGZpbGU7IGFsc28gcmV3aW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvY2FsIGZpbGUuCisJICovCisJaWYgKHByZXZfcmVhZCA9PSAtMSkgeworCQltZW1zZXQoJmZyZXEtPnN0cmVhbSwgMCwgc2l6ZW9mKGZyZXEtPnN0cmVhbSkpOworCQlnaXRfaW5mbGF0ZV9pbml0KCZmcmVxLT5zdHJlYW0pOworCQlnaXRfU0hBMV9Jbml0KCZmcmVxLT5jKTsKKwkJaWYgKHByZXZfcG9zbj4wKSB7CisJCQlwcmV2X3Bvc24gPSAwOworCQkJbHNlZWsoZnJlcS0+bG9jYWxmaWxlLCAwLCBTRUVLX1NFVCk7CisJCQlpZiAoZnRydW5jYXRlKGZyZXEtPmxvY2FsZmlsZSwgMCkgPCAwKSB7CisJCQkJZXJyb3IoIkNvdWxkbid0IHRydW5jYXRlIHRlbXBvcmFyeSBmaWxlICVzOiAlcyIsCisJCQkJCSAgZnJlcS0+dG1wZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlnb3RvIGFib3J0OworCQkJfQorCQl9CisJfQorCisJZnJlcS0+c2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIGZyZXEpOworCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfc2hhMV9maWxlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIGZyZXEtPmVycm9yc3RyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCBmcmVxLT51cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGRhdGEgZnJvbSBhIHByZXZpb3VzIGZldGNoCisJICogYXR0ZW1wdCwgb25seSBmZXRjaCB0aGUgZGF0YSB3ZSBkb24ndCBhbHJlYWR5IGhhdmUuCisJICovCisJaWYgKHByZXZfcG9zbj4wKSB7CisJCWlmIChodHRwX2lzX3ZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVzdW1pbmcgZmV0Y2ggb2Ygb2JqZWN0ICVzIGF0IGJ5dGUgJWxkXG4iLAorCQkJCWhleCwgcHJldl9wb3NuKTsKKwkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKKwkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7CisJCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwKKwkJCQkgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOworCX0KKworCXJldHVybiBmcmVxOworCithYm9ydDoKKwlmcmVlKGZyZXEtPnVybCk7CisJZnJlZShmcmVxKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBwcm9jZXNzX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpCit7CisJaWYgKGZyZXEtPnNsb3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCWZyZXEtPmN1cmxfcmVzdWx0ID0gZnJlcS0+c2xvdC0+Y3VybF9yZXN1bHQ7CisJZnJlcS0+aHR0cF9jb2RlID0gZnJlcS0+c2xvdC0+aHR0cF9jb2RlOworCWZyZXEtPnNsb3QgPSBOVUxMOworfQorCitpbnQgZmluaXNoX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwljbG9zZShmcmVxLT5sb2NhbGZpbGUpOworCWZyZXEtPmxvY2FsZmlsZSA9IC0xOworCisJcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KGZyZXEpOworCisJaWYgKGZyZXEtPmh0dHBfY29kZSA9PSA0MTYpIHsKKwkJd2FybmluZygicmVxdWVzdGVkIHJhbmdlIGludmFsaWQ7IHdlIG1heSBhbHJlYWR5IGhhdmUgYWxsIHRoZSBkYXRhLiIpOworCX0gZWxzZSBpZiAoZnJlcS0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJaWYgKHN0YXQoZnJlcS0+dG1wZmlsZSwgJnN0KSA9PSAwKQorCQkJaWYgKHN0LnN0X3NpemUgPT0gMCkKKwkJCQl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWdpdF9pbmZsYXRlX2VuZCgmZnJlcS0+c3RyZWFtKTsKKwlnaXRfU0hBMV9GaW5hbChmcmVxLT5yZWFsX3NoYTEsICZmcmVxLT5jKTsKKwlpZiAoZnJlcS0+enJldCAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGhhc2hjbXAoZnJlcS0+c2hhMSwgZnJlcS0+cmVhbF9zaGExKSkgeworCQl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmcmVxLT5yZW5hbWUgPQorCQltb3ZlX3RlbXBfdG9fZmlsZShmcmVxLT50bXBmaWxlLCBzaGExX2ZpbGVfbmFtZShmcmVxLT5zaGExKSk7CisKKwlyZXR1cm4gZnJlcS0+cmVuYW1lOworfQorCit2b2lkIGFib3J0X2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpCit7CisJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZSk7CisKKwlyZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3QoZnJlcSk7Cit9CisKK3ZvaWQgcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCWlmIChmcmVxLT5sb2NhbGZpbGUgIT0gLTEpIHsKKwkJY2xvc2UoZnJlcS0+bG9jYWxmaWxlKTsKKwkJZnJlcS0+bG9jYWxmaWxlID0gLTE7CisJfQorCWlmIChmcmVxLT51cmwgIT0gTlVMTCkgeworCQlmcmVlKGZyZXEtPnVybCk7CisJCWZyZXEtPnVybCA9IE5VTEw7CisJfQorCWlmIChmcmVxLT5zbG90ICE9IE5VTEwpIHsKKwkJZnJlcS0+c2xvdC0+Y2FsbGJhY2tfZnVuYyA9IE5VTEw7CisJCWZyZXEtPnNsb3QtPmNhbGxiYWNrX2RhdGEgPSBOVUxMOworCQlyZWxlYXNlX2FjdGl2ZV9zbG90KGZyZXEtPnNsb3QpOworCQlmcmVxLT5zbG90ID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9odHRwLmggYi9odHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkMWU4NAotLS0gL2Rldi9udWxsCisrKyBiL2h0dHAuaApAQCAtMCwwICsxLDE4OSBAQAorI2lmbmRlZiBIVFRQX0gKKyNkZWZpbmUgSFRUUF9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSA8Y3VybC9lYXN5Lmg+CisKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKworLyoKKyAqIFdlIGRldGVjdCBiYXNlZCBvbiB0aGUgY1VSTCB2ZXJzaW9uIGlmIG11bHRpLXRyYW5zZmVyIGlzCisgKiB1c2FibGUgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBhbmQgZGVmaW5lIHRoaXMgc3ltYm9sIGFjY29yZGluZ2x5LgorICogVGhpcyBpcyBub3Qgc29tZXRoaW5nIE1ha2VmaWxlIHNob3VsZCBzZXQgbm9yIHVzZXJzIHNob3VsZCBwYXNzCisgKiB2aWEgQ0ZMQUdTLgorICovCisjdW5kZWYgVVNFX0NVUkxfTVVMVEkKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzEwMDAKKyNkZWZpbmUgVVNFX0NVUkxfTVVMVEkKKyNkZWZpbmUgREVGQVVMVF9NQVhfUkVRVUVTVFMgNQorI2VuZGlmCisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzA3MDQKKyNkZWZpbmUgY3VybF9nbG9iYWxfY2xlYW51cCgpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA8IDB4MDcwODAwCisjZGVmaW5lIGN1cmxfZ2xvYmFsX2luaXQoYSkgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmIChMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzBjMDQpIHx8IChMSUJDVVJMX1ZFUlNJT05fTlVNID09IDB4MDcxMDAwKQorI2RlZmluZSBOT19DVVJMX0VBU1lfRFVQSEFORExFCisjZW5kaWYKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MGEwMworI2RlZmluZSBDVVJMRV9IVFRQX1JFVFVSTkVEX0VSUk9SIENVUkxFX0hUVFBfTk9UX0ZPVU5ECisjZW5kaWYKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MGMwMworI2RlZmluZSBOT19DVVJMX0lPQ1RMCisjZW5kaWYKKworc3RydWN0IHNsb3RfcmVzdWx0cyB7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJbG9uZyBodHRwX2NvZGU7Cit9OworCitzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCB7CisJQ1VSTCAqY3VybDsKKwlpbnQgaW5fdXNlOworCUNVUkxjb2RlIGN1cmxfcmVzdWx0OworCWxvbmcgaHR0cF9jb2RlOworCWludCAqZmluaXNoZWQ7CisJc3RydWN0IHNsb3RfcmVzdWx0cyAqcmVzdWx0czsKKwl2b2lkICpjYWxsYmFja19kYXRhOworCXZvaWQgKCpjYWxsYmFja19mdW5jKSh2b2lkICpkYXRhKTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqbmV4dDsKK307CisKK3N0cnVjdCBidWZmZXIgeworCXN0cnVjdCBzdHJidWYgYnVmOworCXNpemVfdCBwb3NuOworfTsKKworLyogQ3VybCByZXF1ZXN0IHJlYWQvd3JpdGUgY2FsbGJhY2tzICovCitleHRlcm4gc2l6ZV90IGZyZWFkX2J1ZmZlcihjaGFyICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmJ1Zik7CitleHRlcm4gc2l6ZV90IGZ3cml0ZV9idWZmZXIoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJidWYpOworZXh0ZXJuIHNpemVfdCBmd3JpdGVfbnVsbChjaGFyICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmJ1Zik7CisjaWZuZGVmIE5PX0NVUkxfSU9DVEwKK2V4dGVybiBjdXJsaW9lcnIgaW9jdGxfYnVmZmVyKENVUkwgKmhhbmRsZSwgaW50IGNtZCwgdm9pZCAqY2xpZW50cCk7CisjZW5kaWYKKworLyogU2xvdCBsaWZlY3ljbGUgZnVuY3Rpb25zICovCitleHRlcm4gc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmdldF9hY3RpdmVfc2xvdCh2b2lkKTsKK2V4dGVybiBpbnQgc3RhcnRfYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpOworZXh0ZXJuIHZvaWQgcnVuX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KTsKK2V4dGVybiB2b2lkIGZpbmlzaF9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCk7CitleHRlcm4gdm9pZCBmaW5pc2hfYWxsX2FjdGl2ZV9zbG90cyh2b2lkKTsKK2V4dGVybiBpbnQgaGFuZGxlX2N1cmxfcmVzdWx0KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90LAorCQkJICAgICAgc3RydWN0IHNsb3RfcmVzdWx0cyAqcmVzdWx0cyk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorZXh0ZXJuIHZvaWQgZmlsbF9hY3RpdmVfc2xvdHModm9pZCk7CitleHRlcm4gdm9pZCBhZGRfZmlsbF9mdW5jdGlvbih2b2lkICpkYXRhLCBpbnQgKCpmaWxsKSh2b2lkICopKTsKK2V4dGVybiB2b2lkIHN0ZXBfYWN0aXZlX3Nsb3RzKHZvaWQpOworI2VuZGlmCisKK2V4dGVybiB2b2lkIGh0dHBfaW5pdChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCwKKwkJICAgICAgaW50IHByb2FjdGl2ZV9hdXRoKTsKK2V4dGVybiB2b2lkIGh0dHBfY2xlYW51cCh2b2lkKTsKKworZXh0ZXJuIGludCBhY3RpdmVfcmVxdWVzdHM7CitleHRlcm4gaW50IGh0dHBfaXNfdmVyYm9zZTsKK2V4dGVybiBzaXplX3QgaHR0cF9wb3N0X2J1ZmZlcjsKKworZXh0ZXJuIGNoYXIgY3VybF9lcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOworCitzdGF0aWMgaW5saW5lIGludCBtaXNzaW5nX190YXJnZXQoaW50IGNvZGUsIGludCByZXN1bHQpCit7CisJcmV0dXJuCS8qIGZpbGU6Ly8gVVJMIC0tIGRvIHdlIGV2ZXIgdXNlIG9uZT8/PyAqLworCQkocmVzdWx0ID09IENVUkxFX0ZJTEVfQ09VTEROVF9SRUFEX0ZJTEUpIHx8CisJCS8qIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIFVSTCAqLworCQkoY29kZSA9PSA0MDQgJiYgcmVzdWx0ID09IENVUkxFX0hUVFBfUkVUVVJORURfRVJST1IpIHx8CisJCS8qIGZ0cDovLyBVUkwgKi8KKwkJKGNvZGUgPT0gNTUwICYmIHJlc3VsdCA9PSBDVVJMRV9GVFBfQ09VTEROVF9SRVRSX0ZJTEUpCisJCTsKK30KKworI2RlZmluZSBtaXNzaW5nX3RhcmdldChhKSBtaXNzaW5nX190YXJnZXQoKGEpLT5odHRwX2NvZGUsIChhKS0+Y3VybF9yZXN1bHQpCisKKy8qIEhlbHBlcnMgZm9yIG1vZGlmeWluZyBhbmQgY3JlYXRpbmcgVVJMcyAqLworZXh0ZXJuIHZvaWQgYXBwZW5kX3JlbW90ZV9vYmplY3RfdXJsKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdXJsLAorCQkJCSAgICAgY29uc3QgY2hhciAqaGV4LAorCQkJCSAgICAgaW50IG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCk7CitleHRlcm4gY2hhciAqZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGV4LAorCQkJCSAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpOworCisvKiBPcHRpb25zIGZvciBodHRwX3JlcXVlc3RfKigpICovCisjZGVmaW5lIEhUVFBfTk9fQ0FDSEUJCTEKKworLyogUmV0dXJuIHZhbHVlcyBmb3IgaHR0cF9yZXF1ZXN0XyooKSAqLworI2RlZmluZSBIVFRQX09LCQkJMAorI2RlZmluZSBIVFRQX01JU1NJTkdfVEFSR0VUCTEKKyNkZWZpbmUgSFRUUF9FUlJPUgkJMgorI2RlZmluZSBIVFRQX1NUQVJUX0ZBSUxFRAkzCisjZGVmaW5lIEhUVFBfUkVBVVRICTQKKyNkZWZpbmUgSFRUUF9OT0FVVEgJNQorCisvKgorICogUmVxdWVzdHMgYSBVUkwgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIGEgc3RyYnVmLgorICoKKyAqIElmIHRoZSByZXN1bHQgcG9pbnRlciBpcyBOVUxMLCBhIEhUVFAgSEVBRCByZXF1ZXN0IGlzIG1hZGUgaW5zdGVhZCBvZiBHRVQuCisgKi8KK2ludCBodHRwX2dldF9zdHJidWYoY29uc3QgY2hhciAqdXJsLCBzdHJ1Y3Qgc3RyYnVmICpyZXN1bHQsIGludCBvcHRpb25zKTsKKworLyoKKyAqIFByaW50cyBhbiBlcnJvciBtZXNzYWdlIHVzaW5nIGVycm9yKCkgY29udGFpbmluZyB1cmwgYW5kIGN1cmxfZXJyb3JzdHIsCisgKiBhbmQgcmV0dXJucyByZXQuCisgKi8KK2ludCBodHRwX2Vycm9yKGNvbnN0IGNoYXIgKnVybCwgaW50IHJldCk7CisKK2V4dGVybiBpbnQgaHR0cF9mZXRjaF9yZWYoY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IHJlZiAqcmVmKTsKKworLyogSGVscGVycyBmb3IgZmV0Y2hpbmcgcGFja3MgKi8KK2V4dGVybiBpbnQgaHR0cF9nZXRfaW5mb19wYWNrcyhjb25zdCBjaGFyICpiYXNlX3VybCwKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqKnBhY2tzX2hlYWQpOworCitzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgeworCWNoYXIgKnVybDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHN0OworCUZJTEUgKnBhY2tmaWxlOworCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07CisJc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlcjsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKK307CisKK2V4dGVybiBzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKm5ld19odHRwX3BhY2tfcmVxdWVzdCgKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0LCBjb25zdCBjaGFyICpiYXNlX3VybCk7CitleHRlcm4gaW50IGZpbmlzaF9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpOworCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBvYmplY3QgKi8KK3N0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0IHsKKwljaGFyICp1cmw7CisJY2hhciB0bXBmaWxlW1BBVEhfTUFYXTsKKwlpbnQgbG9jYWxmaWxlOworCUNVUkxjb2RlIGN1cmxfcmVzdWx0OworCWNoYXIgZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKKwlsb25nIGh0dHBfY29kZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXVuc2lnbmVkIGNoYXIgcmVhbF9zaGExWzIwXTsKKwlnaXRfU0hBX0NUWCBjOworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwlpbnQgenJldDsKKwlpbnQgcmVuYW1lOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworfTsKKworZXh0ZXJuIHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpuZXdfaHR0cF9vYmplY3RfcmVxdWVzdCgKKwljb25zdCBjaGFyICpiYXNlX3VybCwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gdm9pZCBwcm9jZXNzX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOworZXh0ZXJuIGludCBmaW5pc2hfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSk7CitleHRlcm4gdm9pZCBhYm9ydF9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSk7CisKKyNlbmRpZiAvKiBIVFRQX0ggKi8KZGlmZiAtLWdpdCBhL2lkZW50LmMgYi9pZGVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YmYyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pZGVudC5jCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogaWRlbnQuYworICoKKyAqIGNyZWF0ZSBnaXQgaWRlbnRpZmllciBsaW5lcyBvZiB0aGUgZm9ybSAibmFtZSA8ZW1haWw+IGRhdGUiCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IExpbnVzIFRvcnZhbGRzCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBnaXRfZGVmYXVsdF9uYW1lID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBnaXRfZGVmYXVsdF9lbWFpbCA9IFNUUkJVRl9JTklUOworc3RhdGljIGNoYXIgZ2l0X2RlZmF1bHRfZGF0ZVs1MF07CitpbnQgdXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuOworCisjaWZkZWYgTk9fR0VDT1NfSU5fUFdFTlQKKyNkZWZpbmUgZ2V0X2dlY29zKGlnbm9yZWQpICImIgorI2Vsc2UKKyNkZWZpbmUgZ2V0X2dlY29zKHN0cnVjdF9wYXNzd2QpICgoc3RydWN0X3Bhc3N3ZCktPnB3X2dlY29zKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNvcHlfZ2Vjb3MoY29uc3Qgc3RydWN0IHBhc3N3ZCAqdywgc3RydWN0IHN0cmJ1ZiAqbmFtZSkKK3sKKwljaGFyICpzcmM7CisKKwkvKiBUcmFkaXRpb25hbGx5IEdFQ09TIGZpZWxkIGhhZCBvZmZpY2UgcGhvbmUgbnVtYmVycyBldGMsIHNlcGFyYXRlZAorCSAqIHdpdGggY29tbWFzLiAgQWxzbyAmIHN0YW5kcyBmb3IgY2FwaXRhbGl6ZWQgZm9ybSBvZiB0aGUgbG9naW4gbmFtZS4KKwkgKi8KKworCWZvciAoc3JjID0gZ2V0X2dlY29zKHcpOyAqc3JjICYmICpzcmMgIT0gJywnOyBzcmMrKykgeworCQlpbnQgY2ggPSAqc3JjOworCQlpZiAoY2ggIT0gJyYnKQorCQkJc3RyYnVmX2FkZGNoKG5hbWUsIGNoKTsKKwkJZWxzZSB7CisJCQkvKiBTb3JyeSwgTXIuIE1jRG9uYWxkLi4uICovCisJCQlzdHJidWZfYWRkY2gobmFtZSwgdG91cHBlcigqdy0+cHdfbmFtZSkpOworCQkJc3RyYnVmX2FkZHN0cihuYW1lLCB3LT5wd19uYW1lICsgMSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgYWRkX21haWxuYW1lX2hvc3Qoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCUZJTEUgKm1haWxuYW1lOworCisJbWFpbG5hbWUgPSBmb3BlbigiL2V0Yy9tYWlsbmFtZSIsICJyIik7CisJaWYgKCFtYWlsbmFtZSkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJd2FybmluZygiY2Fubm90IG9wZW4gL2V0Yy9tYWlsbmFtZTogJXMiLAorCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHN0cmJ1Zl9nZXRsaW5lKGJ1ZiwgbWFpbG5hbWUsICdcbicpID09IEVPRikgeworCQlpZiAoZmVycm9yKG1haWxuYW1lKSkKKwkJCXdhcm5pbmcoImNhbm5vdCByZWFkIC9ldGMvbWFpbG5hbWU6ICVzIiwKKwkJCQlzdHJlcnJvcihlcnJubykpOworCQlmY2xvc2UobWFpbG5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCS8qIHN1Y2Nlc3MhICovCisJZmNsb3NlKG1haWxuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX2RvbWFpbm5hbWUoc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCWNoYXIgYnVmWzEwMjRdOworCXN0cnVjdCBob3N0ZW50ICpoZTsKKworCWlmIChnZXRob3N0bmFtZShidWYsIHNpemVvZihidWYpKSkgeworCQl3YXJuaW5nKCJjYW5ub3QgZ2V0IGhvc3QgbmFtZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlzdHJidWZfYWRkc3RyKG91dCwgIihub25lKSIpOworCQlyZXR1cm47CisJfQorCWlmIChzdHJjaHIoYnVmLCAnLicpKQorCQlzdHJidWZfYWRkc3RyKG91dCwgYnVmKTsKKwllbHNlIGlmICgoaGUgPSBnZXRob3N0YnluYW1lKGJ1ZikpICYmIHN0cmNocihoZS0+aF9uYW1lLCAnLicpKQorCQlzdHJidWZfYWRkc3RyKG91dCwgaGUtPmhfbmFtZSk7CisJZWxzZQorCQlzdHJidWZfYWRkZihvdXQsICIlcy4obm9uZSkiLCBidWYpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2VtYWlsKGNvbnN0IHN0cnVjdCBwYXNzd2QgKnB3LCBzdHJ1Y3Qgc3RyYnVmICplbWFpbCkKK3sKKwkvKgorCSAqIE1ha2UgdXAgYSBmYWtlIGVtYWlsIGFkZHJlc3MKKwkgKiAobmFtZSArICdAJyArIGhvc3RuYW1lIFsrICcuJyArIGRvbWFpbm5hbWVdKQorCSAqLworCXN0cmJ1Zl9hZGRzdHIoZW1haWwsIHB3LT5wd19uYW1lKTsKKwlzdHJidWZfYWRkY2goZW1haWwsICdAJyk7CisKKwlpZiAoIWFkZF9tYWlsbmFtZV9ob3N0KGVtYWlsKSkKKwkJcmV0dXJuOwkvKiByZWFkIGZyb20gIi9ldGMvbWFpbG5hbWUiIChEZWJpYW4pICovCisJYWRkX2RvbWFpbm5hbWUoZW1haWwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqaWRlbnRfZGVmYXVsdF9uYW1lKHZvaWQpCit7CisJaWYgKCFnaXRfZGVmYXVsdF9uYW1lLmxlbikgeworCQljb3B5X2dlY29zKHhnZXRwd3VpZF9zZWxmKCksICZnaXRfZGVmYXVsdF9uYW1lKTsKKwkJc3RyYnVmX3RyaW0oJmdpdF9kZWZhdWx0X25hbWUpOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfbmFtZS5idWY7Cit9CisKK2NvbnN0IGNoYXIgKmlkZW50X2RlZmF1bHRfZW1haWwodm9pZCkKK3sKKwlpZiAoIWdpdF9kZWZhdWx0X2VtYWlsLmxlbikgeworCQljb25zdCBjaGFyICplbWFpbCA9IGdldGVudigiRU1BSUwiKTsKKworCQlpZiAoZW1haWwgJiYgZW1haWxbMF0pIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmdpdF9kZWZhdWx0X2VtYWlsLCBlbWFpbCk7CisJCQl1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwkJfSBlbHNlCisJCQljb3B5X2VtYWlsKHhnZXRwd3VpZF9zZWxmKCksICZnaXRfZGVmYXVsdF9lbWFpbCk7CisJCXN0cmJ1Zl90cmltKCZnaXRfZGVmYXVsdF9lbWFpbCk7CisJfQorCXJldHVybiBnaXRfZGVmYXVsdF9lbWFpbC5idWY7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICppZGVudF9kZWZhdWx0X2RhdGUodm9pZCkKK3sKKwlpZiAoIWdpdF9kZWZhdWx0X2RhdGVbMF0pCisJCWRhdGVzdGFtcChnaXRfZGVmYXVsdF9kYXRlLCBzaXplb2YoZ2l0X2RlZmF1bHRfZGF0ZSkpOworCXJldHVybiBnaXRfZGVmYXVsdF9kYXRlOworfQorCitzdGF0aWMgaW50IGNydWQodW5zaWduZWQgY2hhciBjKQoreworCXJldHVybiAgYyA8PSAzMiAgfHwKKwkJYyA9PSAnLicgfHwKKwkJYyA9PSAnLCcgfHwKKwkJYyA9PSAnOicgfHwKKwkJYyA9PSAnOycgfHwKKwkJYyA9PSAnPCcgfHwKKwkJYyA9PSAnPicgfHwKKwkJYyA9PSAnIicgfHwKKwkJYyA9PSAnXFwnIHx8CisJCWMgPT0gJ1wnJzsKK30KKworLyoKKyAqIENvcHkgb3ZlciBhIHN0cmluZyB0byB0aGUgZGVzdGluYXRpb24sIGJ1dCBhdm9pZCBzcGVjaWFsCisgKiBjaGFyYWN0ZXJzICgnXG4nLCAnPCcgYW5kICc+JykgYW5kIHJlbW92ZSBjcnVkIGF0IHRoZSBlbmQKKyAqLworc3RhdGljIHZvaWQgc3RyYnVmX2FkZHN0cl93aXRob3V0X2NydWQoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlzaXplX3QgaSwgbGVuOworCXVuc2lnbmVkIGNoYXIgYzsKKworCS8qIFJlbW92ZSBjcnVkIGZyb20gdGhlIGJlZ2lubmluZy4uICovCisJd2hpbGUgKChjID0gKnNyYykgIT0gMCkgeworCQlpZiAoIWNydWQoYykpCisJCQlicmVhazsKKwkJc3JjKys7CisJfQorCisJLyogUmVtb3ZlIGNydWQgZnJvbSB0aGUgZW5kLi4gKi8KKwlsZW4gPSBzdHJsZW4oc3JjKTsKKwl3aGlsZSAobGVuID4gMCkgeworCQljID0gc3JjW2xlbi0xXTsKKwkJaWYgKCFjcnVkKGMpKQorCQkJYnJlYWs7CisJCS0tbGVuOworCX0KKworCS8qCisJICogQ29weSB0aGUgcmVzdCB0byB0aGUgYnVmZmVyLCBidXQgYXZvaWQgdGhlIHNwZWNpYWwKKwkgKiBjaGFyYWN0ZXJzICdcbicgJzwnIGFuZCAnPicgdGhhdCBhY3QgYXMgZGVsaW1pdGVycyBvbgorCSAqIGFuIGlkZW50aWZpY2F0aW9uIGxpbmUuIFdlIGNhbiBvbmx5IHJlbW92ZSBjcnVkLCBuZXZlciBhZGQgaXQsCisJICogc28gJ2xlbicgaXMgb3VyIG1heGltdW0uCisJICovCisJc3RyYnVmX2dyb3coc2IsIGxlbik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWMgPSAqc3JjKys7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdcbic6IGNhc2UgJzwnOiBjYXNlICc+JzoKKwkJCWNvbnRpbnVlOworCQl9CisJCXNiLT5idWZbc2ItPmxlbisrXSA9IGM7CisJfQorCXNiLT5idWZbc2ItPmxlbl0gPSAnXDAnOworfQorCisvKgorICogUmV2ZXJzZSBvZiBmbXRfaWRlbnQoKTsgZ2l2ZW4gYW4gaWRlbnQgbGluZSwgc3BsaXQgdGhlIGZpZWxkcworICogdG8gYWxsb3cgdGhlIGNhbGxlciB0byBwYXJzZSBpdC4KKyAqIFNpZ25hbCBhIHN1Y2Nlc3MgYnkgcmV0dXJuaW5nIDAsIGJ1dCBkYXRlL3R6IGZpZWxkcyBvZiB0aGUgcmVzdWx0CisgKiBjYW4gc3RpbGwgYmUgTlVMTCBpZiB0aGUgaW5wdXQgbGluZSBvbmx5IGhhcyB0aGUgbmFtZS9lbWFpbCBwYXJ0CisgKiAoZS5nLiByZWFkaW5nIGZyb20gYSByZWZsb2cgZW50cnkpLgorICovCitpbnQgc3BsaXRfaWRlbnRfbGluZShzdHJ1Y3QgaWRlbnRfc3BsaXQgKnNwbGl0LCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWNvbnN0IGNoYXIgKmNwOworCXNpemVfdCBzcGFuOworCWludCBzdGF0dXMgPSAtMTsKKworCW1lbXNldChzcGxpdCwgMCwgc2l6ZW9mKCpzcGxpdCkpOworCisJc3BsaXQtPm5hbWVfYmVnaW4gPSBsaW5lOworCWZvciAoY3AgPSBsaW5lOyAqY3AgJiYgY3AgPCBsaW5lICsgbGVuOyBjcCsrKQorCQlpZiAoKmNwID09ICc8JykgeworCQkJc3BsaXQtPm1haWxfYmVnaW4gPSBjcCArIDE7CisJCQlicmVhazsKKwkJfQorCWlmICghc3BsaXQtPm1haWxfYmVnaW4pCisJCXJldHVybiBzdGF0dXM7CisKKwlmb3IgKGNwID0gc3BsaXQtPm1haWxfYmVnaW4gLSAyOyBsaW5lIDw9IGNwOyBjcC0tKQorCQlpZiAoIWlzc3BhY2UoKmNwKSkgeworCQkJc3BsaXQtPm5hbWVfZW5kID0gY3AgKyAxOworCQkJYnJlYWs7CisJCX0KKwlpZiAoIXNwbGl0LT5uYW1lX2VuZCkgeworCQkvKiBubyBodW1hbiByZWFkYWJsZSBuYW1lICovCisJCXNwbGl0LT5uYW1lX2VuZCA9IHNwbGl0LT5uYW1lX2JlZ2luOworCX0KKworCWZvciAoY3AgPSBzcGxpdC0+bWFpbF9iZWdpbjsgY3AgPCBsaW5lICsgbGVuOyBjcCsrKQorCQlpZiAoKmNwID09ICc+JykgeworCQkJc3BsaXQtPm1haWxfZW5kID0gY3A7CisJCQlicmVhazsKKwkJfQorCWlmICghc3BsaXQtPm1haWxfZW5kKQorCQlyZXR1cm4gc3RhdHVzOworCisJZm9yIChjcCA9IHNwbGl0LT5tYWlsX2VuZCArIDE7IGNwIDwgbGluZSArIGxlbiAmJiBpc3NwYWNlKCpjcCk7IGNwKyspCisJCTsKKwlpZiAobGluZSArIGxlbiA8PSBjcCkKKwkJZ290byBwZXJzb25fb25seTsKKwlzcGxpdC0+ZGF0ZV9iZWdpbiA9IGNwOworCXNwYW4gPSBzdHJzcG4oY3AsICIwMTIzNDU2Nzg5Iik7CisJaWYgKCFzcGFuKQorCQlnb3RvIHBlcnNvbl9vbmx5OworCXNwbGl0LT5kYXRlX2VuZCA9IHNwbGl0LT5kYXRlX2JlZ2luICsgc3BhbjsKKwlmb3IgKGNwID0gc3BsaXQtPmRhdGVfZW5kOyBjcCA8IGxpbmUgKyBsZW4gJiYgaXNzcGFjZSgqY3ApOyBjcCsrKQorCQk7CisJaWYgKGxpbmUgKyBsZW4gPD0gY3AgfHwgKCpjcCAhPSAnKycgJiYgKmNwICE9ICctJykpCisJCWdvdG8gcGVyc29uX29ubHk7CisJc3BsaXQtPnR6X2JlZ2luID0gY3A7CisJc3BhbiA9IHN0cnNwbihjcCArIDEsICIwMTIzNDU2Nzg5Iik7CisJaWYgKCFzcGFuKQorCQlnb3RvIHBlcnNvbl9vbmx5OworCXNwbGl0LT50el9lbmQgPSBzcGxpdC0+dHpfYmVnaW4gKyAxICsgc3BhbjsKKwlyZXR1cm4gMDsKKworcGVyc29uX29ubHk6CisJc3BsaXQtPmRhdGVfYmVnaW4gPSBOVUxMOworCXNwbGl0LT5kYXRlX2VuZCA9IE5VTEw7CisJc3BsaXQtPnR6X2JlZ2luID0gTlVMTDsKKwlzcGxpdC0+dHpfZW5kID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmVudl9oaW50ID0KKyJcbiIKKyIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisiXG4iCisiUnVuXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIlxuIgorInRvIHNldCB5b3VyIGFjY291bnRcJ3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisiXG4iOworCitjb25zdCBjaGFyICpmbXRfaWRlbnQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZW1haWwsCisJCSAgICAgIGNvbnN0IGNoYXIgKmRhdGVfc3RyLCBpbnQgZmxhZykKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBpZGVudCA9IFNUUkJVRl9JTklUOworCWNoYXIgZGF0ZVs1MF07CisJaW50IHN0cmljdCA9IChmbGFnICYgSURFTlRfU1RSSUNUKTsKKwlpbnQgd2FudF9kYXRlID0gIShmbGFnICYgSURFTlRfTk9fREFURSk7CisJaW50IHdhbnRfbmFtZSA9ICEoZmxhZyAmIElERU5UX05PX05BTUUpOworCisJaWYgKHdhbnRfbmFtZSAmJiAhbmFtZSkKKwkJbmFtZSA9IGlkZW50X2RlZmF1bHRfbmFtZSgpOworCWlmICghZW1haWwpCisJCWVtYWlsID0gaWRlbnRfZGVmYXVsdF9lbWFpbCgpOworCisJaWYgKHdhbnRfbmFtZSAmJiAhKm5hbWUpIHsKKwkJc3RydWN0IHBhc3N3ZCAqcHc7CisKKwkJaWYgKHN0cmljdCkgeworCQkJaWYgKG5hbWUgPT0gZ2l0X2RlZmF1bHRfbmFtZS5idWYpCisJCQkJZnB1dHMoZW52X2hpbnQsIHN0ZGVycik7CisJCQlkaWUoImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIsIGVtYWlsKTsKKwkJfQorCQlwdyA9IHhnZXRwd3VpZF9zZWxmKCk7CisJCW5hbWUgPSBwdy0+cHdfbmFtZTsKKwl9CisKKwlpZiAoc3RyaWN0ICYmIGVtYWlsID09IGdpdF9kZWZhdWx0X2VtYWlsLmJ1ZiAmJgorCSAgICBzdHJzdHIoZW1haWwsICIobm9uZSkiKSkgeworCQlmcHV0cyhlbnZfaGludCwgc3RkZXJyKTsKKwkJZGllKCJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIiwgZW1haWwpOworCX0KKworCWlmICh3YW50X2RhdGUpIHsKKwkJaWYgKGRhdGVfc3RyICYmIGRhdGVfc3RyWzBdKSB7CisJCQlpZiAocGFyc2VfZGF0ZShkYXRlX3N0ciwgZGF0ZSwgc2l6ZW9mKGRhdGUpKSA8IDApCisJCQkJZGllKCJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIsIGRhdGVfc3RyKTsKKwkJfQorCQllbHNlCisJCQlzdHJjcHkoZGF0ZSwgaWRlbnRfZGVmYXVsdF9kYXRlKCkpOworCX0KKworCXN0cmJ1Zl9yZXNldCgmaWRlbnQpOworCWlmICh3YW50X25hbWUpIHsKKwkJc3RyYnVmX2FkZHN0cl93aXRob3V0X2NydWQoJmlkZW50LCBuYW1lKTsKKwkJc3RyYnVmX2FkZHN0cigmaWRlbnQsICIgPCIpOworCX0KKwlzdHJidWZfYWRkc3RyX3dpdGhvdXRfY3J1ZCgmaWRlbnQsIGVtYWlsKTsKKwlpZiAod2FudF9uYW1lKQorCQkJc3RyYnVmX2FkZGNoKCZpZGVudCwgJz4nKTsKKwlpZiAod2FudF9kYXRlKSB7CisJCXN0cmJ1Zl9hZGRjaCgmaWRlbnQsICcgJyk7CisJCXN0cmJ1Zl9hZGRzdHJfd2l0aG91dF9jcnVkKCZpZGVudCwgZGF0ZSk7CisJfQorCXJldHVybiBpZGVudC5idWY7Cit9CisKK2NvbnN0IGNoYXIgKmZtdF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmVtYWlsKQoreworCXJldHVybiBmbXRfaWRlbnQobmFtZSwgZW1haWwsIE5VTEwsIElERU5UX1NUUklDVCB8IElERU5UX05PX0RBVEUpOworfQorCitjb25zdCBjaGFyICpnaXRfYXV0aG9yX2luZm8oaW50IGZsYWcpCit7CisJcmV0dXJuIGZtdF9pZGVudChnZXRlbnYoIkdJVF9BVVRIT1JfTkFNRSIpLAorCQkJIGdldGVudigiR0lUX0FVVEhPUl9FTUFJTCIpLAorCQkJIGdldGVudigiR0lUX0FVVEhPUl9EQVRFIiksCisJCQkgZmxhZyk7Cit9CisKK2NvbnN0IGNoYXIgKmdpdF9jb21taXR0ZXJfaW5mbyhpbnQgZmxhZykKK3sKKwlpZiAoZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX05BTUUiKSkKKwkJdXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX05BTUVfR0lWRU47CisJaWYgKGdldGVudigiR0lUX0NPTU1JVFRFUl9FTUFJTCIpKQorCQl1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwlyZXR1cm4gZm10X2lkZW50KGdldGVudigiR0lUX0NPTU1JVFRFUl9OQU1FIiksCisJCQkgZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0VNQUlMIiksCisJCQkgZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0RBVEUiKSwKKwkJCSBmbGFnKTsKK30KKworaW50IHVzZXJfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKHZvaWQpCit7CisjaWZuZGVmIFdJTkRPV1MKKwlyZXR1cm4gKHVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiAmIElERU5UX01BSUxfR0lWRU4pOworI2Vsc2UKKwlyZXR1cm4gKHVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiA9PSBJREVOVF9BTExfR0lWRU4pOworI2VuZGlmCit9CisKK2ludCBnaXRfaWRlbnRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJaWYgKCFzdHJjbXAodmFyLCAidXNlci5uYW1lIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlzdHJidWZfcmVzZXQoJmdpdF9kZWZhdWx0X25hbWUpOworCQlzdHJidWZfYWRkc3RyKCZnaXRfZGVmYXVsdF9uYW1lLCB2YWx1ZSk7CisJCXVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLmVtYWlsIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlzdHJidWZfcmVzZXQoJmdpdF9kZWZhdWx0X2VtYWlsKTsKKwkJc3RyYnVmX2FkZHN0cigmZ2l0X2RlZmF1bHRfZW1haWwsIHZhbHVlKTsKKwkJdXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX01BSUxfR0lWRU47CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvaW1hcC1zZW5kLmMgYi9pbWFwLXNlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDJlNDcxCi0tLSAvZGV2L251bGwKKysrIGIvaW1hcC1zZW5kLmMKQEAgLTAsMCArMSwxNTc3IEBACisvKgorICogZ2l0LWltYXAtc2VuZCAtIGRyb3BzIHBhdGNoZXMgaW50byBhbiBpbWFwIERyYWZ0cyBmb2xkZXIKKyAqICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20gaXN5bmMvbWJzeW5jIC0gbWFpbGJveCBzeW5jaHJvbml6ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBNaWNoYWVsIFIuIEVsa2lucyA8bWVAbXV0dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCBPc3dhbGQgQnVkZGVuaGFnZW4gPG9zc2lAdXNlcnMuc2YubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlrZSBNY0Nvcm1hY2sKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicHJvbXB0LmgiCisjaWZkZWYgTk9fT1BFTlNTTAordHlwZWRlZiB2b2lkICpTU0w7CisjZWxzZQorI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisjZW5kaWYKKworc3RydWN0IHN0b3JlX2NvbmYgeworCWNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqcGF0aDsgLyogc2hvdWxkIHRoaXMgYmUgaGVyZT8gaXRzIGludGVycHJldGF0aW9uIGlzIGRyaXZlci1zcGVjaWZpYyAqLworCWNoYXIgKm1hcF9pbmJveDsKKwljaGFyICp0cmFzaDsKKwl1bnNpZ25lZCBtYXhfc2l6ZTsgLyogb2ZmX3QgaXMgb3ZlcmtpbGwgKi8KKwl1bnNpZ25lZCB0cmFzaF9yZW1vdGVfbmV3OjEsIHRyYXNoX29ubHlfbmV3OjE7Cit9OworCisvKiBGb3IgbWVzc2FnZS0+c3RhdHVzICovCisjZGVmaW5lIE1fUkVDRU5UICAgICAgICgxPDwwKSAvKiB1bnN5bmNhYmxlIGZsYWc7IG1haWxkaXJfKiBkZXBlbmQgb24gdGhpcyBiZWluZyAxPDwwICovCisjZGVmaW5lIE1fREVBRCAgICAgICAgICgxPDwxKSAvKiBleHB1bmdlZCAqLworI2RlZmluZSBNX0ZMQUdTICAgICAgICAoMTw8MikgLyogZmxhZ3MgZmV0Y2hlZCAqLworCitzdHJ1Y3QgbWVzc2FnZSB7CisJc3RydWN0IG1lc3NhZ2UgKm5leHQ7CisJc2l6ZV90IHNpemU7IC8qIHplcm8gaW1wbGllcyAibm90IGZldGNoZWQiICovCisJaW50IHVpZDsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzLCBzdGF0dXM7Cit9OworCitzdHJ1Y3Qgc3RvcmUgeworCXN0cnVjdCBzdG9yZV9jb25mICpjb25mOyAvKiBmb3JlaWduICovCisKKwkvKiBjdXJyZW50bHkgb3BlbiBtYWlsYm94ICovCisJY29uc3QgY2hhciAqbmFtZTsgLyogZm9yZWlnbiEgbWF5YmUgcHJlc2V0PyAqLworCWNoYXIgKnBhdGg7IC8qIG93biAqLworCXN0cnVjdCBtZXNzYWdlICptc2dzOyAvKiBvd24gKi8KKwlpbnQgdWlkdmFsaWRpdHk7CisJdW5zaWduZWQgY2hhciBvcHRzOyAvKiBtYXliZSBwcmVzZXQ/ICovCisJLyogbm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgZG8gX25vdF8gcmVmbGVjdCBzdGF0cyBmcm9tIG1zZ3MsIGJ1dCBtYWlsYm94IHRvdGFscyAqLworCWludCBjb3VudDsgLyogIyBvZiBtZXNzYWdlcyAqLworCWludCByZWNlbnQ7IC8qICMgb2YgcmVjZW50IG1lc3NhZ2VzIC0gZG9uJ3QgdHJ1c3QgdGhpcyBiZXlvbmQgdGhlIGluaXRpYWwgcmVhZCAqLworfTsKKworc3RydWN0IG1zZ19kYXRhIHsKKwljaGFyICpkYXRhOworCWludCBsZW47CisJdW5zaWduZWQgY2hhciBmbGFnczsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIGltYXBfc2VuZF91c2FnZVtdID0gImdpdCBpbWFwLXNlbmQgPCA8bWJveD4iOworCisjdW5kZWYgRFJWX09LCisjZGVmaW5lIERSVl9PSyAgICAgICAgICAwCisjZGVmaW5lIERSVl9NU0dfQkFEICAgICAtMQorI2RlZmluZSBEUlZfQk9YX0JBRCAgICAgLTIKKyNkZWZpbmUgRFJWX1NUT1JFX0JBRCAgIC0zCisKK3N0YXRpYyBpbnQgVmVyYm9zZSwgUXVpZXQ7CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgdm9pZCBpbWFwX2luZm8oY29uc3QgY2hhciAqLCAuLi4pOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3N0YXRpYyB2b2lkIGltYXBfd2Fybihjb25zdCBjaGFyICosIC4uLik7CisKK3N0YXRpYyBjaGFyICpuZXh0X2FyZyhjaGFyICoqKTsKKworc3RhdGljIHZvaWQgZnJlZV9nZW5lcmljX21lc3NhZ2VzKHN0cnVjdCBtZXNzYWdlICopOworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQorc3RhdGljIGludCBuZnNucHJpbnRmKGNoYXIgKmJ1ZiwgaW50IGJsZW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworc3RhdGljIGludCBuZnZhc3ByaW50ZihjaGFyICoqc3RycCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWludCBsZW47CisJY2hhciB0bXBbODE5Ml07CisKKwlsZW4gPSB2c25wcmludGYodG1wLCBzaXplb2YodG1wKSwgZm10LCBhcCk7CisJaWYgKGxlbiA8IDApCisJCWRpZSgiRmF0YWw6IE91dCBvZiBtZW1vcnkiKTsKKwlpZiAobGVuID49IHNpemVvZih0bXApKQorCQlkaWUoImltYXAgY29tbWFuZCBvdmVyZmxvdyEiKTsKKwkqc3RycCA9IHhtZW1kdXB6KHRtcCwgbGVuKTsKKwlyZXR1cm4gbGVuOworfQorCitzdHJ1Y3QgaW1hcF9zZXJ2ZXJfY29uZiB7CisJY2hhciAqbmFtZTsKKwljaGFyICp0dW5uZWw7CisJY2hhciAqaG9zdDsKKwlpbnQgcG9ydDsKKwljaGFyICp1c2VyOworCWNoYXIgKnBhc3M7CisJaW50IHVzZV9zc2w7CisJaW50IHNzbF92ZXJpZnk7CisJaW50IHVzZV9odG1sOworCWNoYXIgKmF1dGhfbWV0aG9kOworfTsKKworc3RhdGljIHN0cnVjdCBpbWFwX3NlcnZlcl9jb25mIHNlcnZlciA9IHsKKwlOVUxMLAkvKiBuYW1lICovCisJTlVMTCwJLyogdHVubmVsICovCisJTlVMTCwJLyogaG9zdCAqLworCTAsCS8qIHBvcnQgKi8KKwlOVUxMLAkvKiB1c2VyICovCisJTlVMTCwJLyogcGFzcyAqLworCTAsICAgCS8qIHVzZV9zc2wgKi8KKwkxLCAgIAkvKiBzc2xfdmVyaWZ5ICovCisJMCwgICAJLyogdXNlX2h0bWwgKi8KKwlOVUxMLAkvKiBhdXRoX21ldGhvZCAqLworfTsKKworc3RydWN0IGltYXBfc3RvcmVfY29uZiB7CisJc3RydWN0IHN0b3JlX2NvbmYgZ2VuOworCXN0cnVjdCBpbWFwX3NlcnZlcl9jb25mICpzZXJ2ZXI7Cit9OworCisjZGVmaW5lIE5JTAkodm9pZCAqKTB4MQorI2RlZmluZSBMSVNUCSh2b2lkICopMHgyCisKK3N0cnVjdCBpbWFwX2xpc3QgeworCXN0cnVjdCBpbWFwX2xpc3QgKm5leHQsICpjaGlsZDsKKwljaGFyICp2YWw7CisJaW50IGxlbjsKK307CisKK3N0cnVjdCBpbWFwX3NvY2tldCB7CisJaW50IGZkWzJdOworCVNTTCAqc3NsOworfTsKKworc3RydWN0IGltYXBfYnVmZmVyIHsKKwlzdHJ1Y3QgaW1hcF9zb2NrZXQgc29jazsKKwlpbnQgYnl0ZXM7CisJaW50IG9mZnNldDsKKwljaGFyIGJ1ZlsxMDI0XTsKK307CisKK3N0cnVjdCBpbWFwX2NtZDsKKworc3RydWN0IGltYXAgeworCWludCB1aWRuZXh0OyAvKiBmcm9tIFNFTEVDVCByZXNwb25zZXMgKi8KKwlzdHJ1Y3QgaW1hcF9saXN0ICpuc19wZXJzb25hbCwgKm5zX290aGVyLCAqbnNfc2hhcmVkOyAvKiBOQU1FU1BBQ0UgaW5mbyAqLworCXVuc2lnbmVkIGNhcHMsIHJjYXBzOyAvKiBDQVBBQklMSVRZIHJlc3VsdHMgKi8KKwkvKiBjb21tYW5kIHF1ZXVlICovCisJaW50IG5leHR0YWcsIG51bV9pbl9wcm9ncmVzcywgbGl0ZXJhbF9wZW5kaW5nOworCXN0cnVjdCBpbWFwX2NtZCAqaW5fcHJvZ3Jlc3MsICoqaW5fcHJvZ3Jlc3NfYXBwZW5kOworCXN0cnVjdCBpbWFwX2J1ZmZlciBidWY7IC8qIHRoaXMgaXMgQklHLCBzbyBwdXQgaXQgbGFzdCAqLworfTsKKworc3RydWN0IGltYXBfc3RvcmUgeworCXN0cnVjdCBzdG9yZSBnZW47CisJaW50IHVpZHZhbGlkaXR5OworCXN0cnVjdCBpbWFwICppbWFwOworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwl1bnNpZ25lZCAvKmN1cnJlbnRuYzoxLCovIHRyYXNobmM6MTsKK307CisKK3N0cnVjdCBpbWFwX2NtZF9jYiB7CisJaW50ICgqY29udCkoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kICpjbWQsIGNvbnN0IGNoYXIgKnByb21wdCk7CisJdm9pZCAoKmRvbmUpKHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBpbWFwX2NtZCAqY21kLCBpbnQgcmVzcG9uc2UpOworCXZvaWQgKmN0eDsKKwljaGFyICpkYXRhOworCWludCBkbGVuOworCWludCB1aWQ7CisJdW5zaWduZWQgY3JlYXRlOjEsIHRyeWNyZWF0ZToxOworfTsKKworc3RydWN0IGltYXBfY21kIHsKKwlzdHJ1Y3QgaW1hcF9jbWQgKm5leHQ7CisJc3RydWN0IGltYXBfY21kX2NiIGNiOworCWNoYXIgKmNtZDsKKwlpbnQgdGFnOworfTsKKworI2RlZmluZSBDQVAoY2FwKSAoaW1hcC0+Y2FwcyAmICgxIDw8IChjYXApKSkKKworZW51bSBDQVBBQklMSVRZIHsKKwlOT0xPR0lOID0gMCwKKwlVSURQTFVTLAorCUxJVEVSQUxQTFVTLAorCU5BTUVTUEFDRSwKKwlTVEFSVFRMUywKKwlBVVRIX0NSQU1fTUQ1Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY2FwX2xpc3RbXSA9IHsKKwkiTE9HSU5ESVNBQkxFRCIsCisJIlVJRFBMVVMiLAorCSJMSVRFUkFMKyIsCisJIk5BTUVTUEFDRSIsCisJIlNUQVJUVExTIiwKKwkiQVVUSD1DUkFNLU1ENSIsCit9OworCisjZGVmaW5lIFJFU1BfT0sgICAgMAorI2RlZmluZSBSRVNQX05PICAgIDEKKyNkZWZpbmUgUkVTUF9CQUQgICAyCisKK3N0YXRpYyBpbnQgZ2V0X2NtZF9yZXN1bHQoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kICp0Y21kKTsKKworCitzdGF0aWMgY29uc3QgY2hhciAqRmxhZ3NbXSA9IHsKKwkiRHJhZnQiLAorCSJGbGFnZ2VkIiwKKwkiQW5zd2VyZWQiLAorCSJTZWVuIiwKKwkiRGVsZXRlZCIsCit9OworCisjaWZuZGVmIE5PX09QRU5TU0wKK3N0YXRpYyB2b2lkIHNzbF9zb2NrZXRfcGVycm9yKGNvbnN0IGNoYXIgKmZ1bmMpCit7CisJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIGZ1bmMsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgc29ja2V0X3BlcnJvcihjb25zdCBjaGFyICpmdW5jLCBzdHJ1Y3QgaW1hcF9zb2NrZXQgKnNvY2ssIGludCByZXQpCit7CisjaWZuZGVmIE5PX09QRU5TU0wKKwlpZiAoc29jay0+c3NsKSB7CisJCWludCBzc2xlcnIgPSBTU0xfZ2V0X2Vycm9yKHNvY2stPnNzbCwgcmV0KTsKKwkJc3dpdGNoIChzc2xlcnIpIHsKKwkJY2FzZSBTU0xfRVJST1JfTk9ORToKKwkJCWJyZWFrOworCQljYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorCQkJcGVycm9yKCJTU0xfY29ubmVjdCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX2Nvbm5lY3QiKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWlmIChyZXQgPCAwKQorCQkJcGVycm9yKGZ1bmMpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmV4cGVjdGVkIEVPRlxuIiwgZnVuYyk7CisJfQorfQorCitzdGF0aWMgaW50IHNzbF9zb2NrZXRfY29ubmVjdChzdHJ1Y3QgaW1hcF9zb2NrZXQgKnNvY2ssIGludCB1c2VfdGxzX29ubHksIGludCB2ZXJpZnkpCit7CisjaWZkZWYgTk9fT1BFTlNTTAorCWZwcmludGYoc3RkZXJyLCAiU1NMIHJlcXVlc3RlZCBidXQgU1NMIHN1cHBvcnQgbm90IGNvbXBpbGVkIGluXG4iKTsKKwlyZXR1cm4gLTE7CisjZWxzZQorI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDAwMDBMKQorCWNvbnN0IFNTTF9NRVRIT0QgKm1ldGg7CisjZWxzZQorCVNTTF9NRVRIT0QgKm1ldGg7CisjZW5kaWYKKwlTU0xfQ1RYICpjdHg7CisJaW50IHJldDsKKworCVNTTF9saWJyYXJ5X2luaXQoKTsKKwlTU0xfbG9hZF9lcnJvcl9zdHJpbmdzKCk7CisKKwlpZiAodXNlX3Rsc19vbmx5KQorCQltZXRoID0gVExTdjFfbWV0aG9kKCk7CisJZWxzZQorCQltZXRoID0gU1NMdjIzX21ldGhvZCgpOworCisJaWYgKCFtZXRoKSB7CisJCXNzbF9zb2NrZXRfcGVycm9yKCJTU0x2MjNfbWV0aG9kIik7CisJCXJldHVybiAtMTsKKwl9CisKKwljdHggPSBTU0xfQ1RYX25ldyhtZXRoKTsKKworCWlmICh2ZXJpZnkpCisJCVNTTF9DVFhfc2V0X3ZlcmlmeShjdHgsIFNTTF9WRVJJRllfUEVFUiwgTlVMTCk7CisKKwlpZiAoIVNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKGN0eCkpIHsKKwkJc3NsX3NvY2tldF9wZXJyb3IoIlNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzIik7CisJCXJldHVybiAtMTsKKwl9CisJc29jay0+c3NsID0gU1NMX25ldyhjdHgpOworCWlmICghc29jay0+c3NsKSB7CisJCXNzbF9zb2NrZXRfcGVycm9yKCJTU0xfbmV3Iik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFTU0xfc2V0X3JmZChzb2NrLT5zc2wsIHNvY2stPmZkWzBdKSkgeworCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX3NldF9yZmQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIVNTTF9zZXRfd2ZkKHNvY2stPnNzbCwgc29jay0+ZmRbMV0pKSB7CisJCXNzbF9zb2NrZXRfcGVycm9yKCJTU0xfc2V0X3dmZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gU1NMX2Nvbm5lY3Qoc29jay0+c3NsKTsKKwlpZiAocmV0IDw9IDApIHsKKwkJc29ja2V0X3BlcnJvcigiU1NMX2Nvbm5lY3QiLCBzb2NrLCByZXQpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIGludCBzb2NrZXRfcmVhZChzdHJ1Y3QgaW1hcF9zb2NrZXQgKnNvY2ssIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzc2l6ZV90IG47CisjaWZuZGVmIE5PX09QRU5TU0wKKwlpZiAoc29jay0+c3NsKQorCQluID0gU1NMX3JlYWQoc29jay0+c3NsLCBidWYsIGxlbik7CisJZWxzZQorI2VuZGlmCisJCW4gPSB4cmVhZChzb2NrLT5mZFswXSwgYnVmLCBsZW4pOworCWlmIChuIDw9IDApIHsKKwkJc29ja2V0X3BlcnJvcigicmVhZCIsIHNvY2ssIG4pOworCQljbG9zZShzb2NrLT5mZFswXSk7CisJCWNsb3NlKHNvY2stPmZkWzFdKTsKKwkJc29jay0+ZmRbMF0gPSBzb2NrLT5mZFsxXSA9IC0xOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzb2NrZXRfd3JpdGUoc3RydWN0IGltYXBfc29ja2V0ICpzb2NrLCBjb25zdCBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IG47CisjaWZuZGVmIE5PX09QRU5TU0wKKwlpZiAoc29jay0+c3NsKQorCQluID0gU1NMX3dyaXRlKHNvY2stPnNzbCwgYnVmLCBsZW4pOworCWVsc2UKKyNlbmRpZgorCQluID0gd3JpdGVfaW5fZnVsbChzb2NrLT5mZFsxXSwgYnVmLCBsZW4pOworCWlmIChuICE9IGxlbikgeworCQlzb2NrZXRfcGVycm9yKCJ3cml0ZSIsIHNvY2ssIG4pOworCQljbG9zZShzb2NrLT5mZFswXSk7CisJCWNsb3NlKHNvY2stPmZkWzFdKTsKKwkJc29jay0+ZmRbMF0gPSBzb2NrLT5mZFsxXSA9IC0xOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgc29ja2V0X3NodXRkb3duKHN0cnVjdCBpbWFwX3NvY2tldCAqc29jaykKK3sKKyNpZm5kZWYgTk9fT1BFTlNTTAorCWlmIChzb2NrLT5zc2wpIHsKKwkJU1NMX3NodXRkb3duKHNvY2stPnNzbCk7CisJCVNTTF9mcmVlKHNvY2stPnNzbCk7CisJfQorI2VuZGlmCisJY2xvc2Uoc29jay0+ZmRbMF0pOworCWNsb3NlKHNvY2stPmZkWzFdKTsKK30KKworLyogc2ltcGxlIGxpbmUgYnVmZmVyaW5nICovCitzdGF0aWMgaW50IGJ1ZmZlcl9nZXRzKHN0cnVjdCBpbWFwX2J1ZmZlciAqYiwgY2hhciAqKnMpCit7CisJaW50IG47CisJaW50IHN0YXJ0ID0gYi0+b2Zmc2V0OworCisJKnMgPSBiLT5idWYgKyBzdGFydDsKKworCWZvciAoOzspIHsKKwkJLyogbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIGRhdGEgdG8gcmVhZCB0aGUgXHJcbiBzZXF1ZW5jZSAqLworCQlpZiAoYi0+b2Zmc2V0ICsgMSA+PSBiLT5ieXRlcykgeworCQkJaWYgKHN0YXJ0KSB7CisJCQkJLyogc2hpZnQgZG93biB1c2VkIGJ5dGVzICovCisJCQkJKnMgPSBiLT5idWY7CisKKwkJCQlhc3NlcnQoc3RhcnQgPD0gYi0+Ynl0ZXMpOworCQkJCW4gPSBiLT5ieXRlcyAtIHN0YXJ0OworCisJCQkJaWYgKG4pCisJCQkJCW1lbW1vdmUoYi0+YnVmLCBiLT5idWYgKyBzdGFydCwgbik7CisJCQkJYi0+b2Zmc2V0IC09IHN0YXJ0OworCQkJCWItPmJ5dGVzID0gbjsKKwkJCQlzdGFydCA9IDA7CisJCQl9CisKKwkJCW4gPSBzb2NrZXRfcmVhZCgmYi0+c29jaywgYi0+YnVmICsgYi0+Ynl0ZXMsCisJCQkJCSBzaXplb2YoYi0+YnVmKSAtIGItPmJ5dGVzKTsKKworCQkJaWYgKG4gPD0gMCkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCWItPmJ5dGVzICs9IG47CisJCX0KKworCQlpZiAoYi0+YnVmW2ItPm9mZnNldF0gPT0gJ1xyJykgeworCQkJYXNzZXJ0KGItPm9mZnNldCArIDEgPCBiLT5ieXRlcyk7CisJCQlpZiAoYi0+YnVmW2ItPm9mZnNldCArIDFdID09ICdcbicpIHsKKwkJCQliLT5idWZbYi0+b2Zmc2V0XSA9IDA7ICAvKiB0ZXJtaW5hdGUgdGhlIHN0cmluZyAqLworCQkJCWItPm9mZnNldCArPSAyOyAvKiBuZXh0IGxpbmUgKi8KKwkJCQlpZiAoVmVyYm9zZSkKKwkJCQkJcHV0cygqcyk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKworCQliLT5vZmZzZXQrKzsKKwl9CisJLyogbm90IHJlYWNoZWQgKi8KK30KKworc3RhdGljIHZvaWQgaW1hcF9pbmZvKGNvbnN0IGNoYXIgKm1zZywgLi4uKQoreworCXZhX2xpc3QgdmE7CisKKwlpZiAoIVF1aWV0KSB7CisJCXZhX3N0YXJ0KHZhLCBtc2cpOworCQl2cHJpbnRmKG1zZywgdmEpOworCQl2YV9lbmQodmEpOworCQlmZmx1c2goc3Rkb3V0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGltYXBfd2Fybihjb25zdCBjaGFyICptc2csIC4uLikKK3sKKwl2YV9saXN0IHZhOworCisJaWYgKFF1aWV0IDwgMikgeworCQl2YV9zdGFydCh2YSwgbXNnKTsKKwkJdmZwcmludGYoc3RkZXJyLCBtc2csIHZhKTsKKwkJdmFfZW5kKHZhKTsKKwl9Cit9CisKK3N0YXRpYyBjaGFyICpuZXh0X2FyZyhjaGFyICoqcykKK3sKKwljaGFyICpyZXQ7CisKKwlpZiAoIXMgfHwgISpzKQorCQlyZXR1cm4gTlVMTDsKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikgKipzKSkKKwkJKCpzKSsrOworCWlmICghKipzKSB7CisJCSpzID0gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmICgqKnMgPT0gJyInKSB7CisJCSsrKnM7CisJCXJldCA9ICpzOworCQkqcyA9IHN0cmNocigqcywgJyInKTsKKwl9IGVsc2UgeworCQlyZXQgPSAqczsKKwkJd2hpbGUgKCoqcyAmJiAhaXNzcGFjZSgodW5zaWduZWQgY2hhcikgKipzKSkKKwkJCSgqcykrKzsKKwl9CisJaWYgKCpzKSB7CisJCWlmICgqKnMpCisJCQkqKCpzKSsrID0gMDsKKwkJaWYgKCEqKnMpCisJCQkqcyA9IE5VTEw7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZ2VuZXJpY19tZXNzYWdlcyhzdHJ1Y3QgbWVzc2FnZSAqbXNncykKK3sKKwlzdHJ1Y3QgbWVzc2FnZSAqdG1zZzsKKworCWZvciAoOyBtc2dzOyBtc2dzID0gdG1zZykgeworCQl0bXNnID0gbXNncy0+bmV4dDsKKwkJZnJlZShtc2dzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmZzbnByaW50ZihjaGFyICpidWYsIGludCBibGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgdmE7CisKKwl2YV9zdGFydCh2YSwgZm10KTsKKwlpZiAoYmxlbiA8PSAwIHx8ICh1bnNpZ25lZCkocmV0ID0gdnNucHJpbnRmKGJ1ZiwgYmxlbiwgZm10LCB2YSkpID49ICh1bnNpZ25lZClibGVuKQorCQlkaWUoIkZhdGFsOiBidWZmZXIgdG9vIHNtYWxsLiBQbGVhc2UgcmVwb3J0IGEgYnVnLiIpOworCXZhX2VuZCh2YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBpbWFwX2NtZCAqdl9pc3N1ZV9pbWFwX2NtZChzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LAorCQkJCQkgc3RydWN0IGltYXBfY21kX2NiICpjYiwKKwkJCQkJIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGN0eC0+aW1hcDsKKwlzdHJ1Y3QgaW1hcF9jbWQgKmNtZDsKKwlpbnQgbiwgYnVmbDsKKwljaGFyIGJ1ZlsxMDI0XTsKKworCWNtZCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbWFwX2NtZCkpOworCW5mdmFzcHJpbnRmKCZjbWQtPmNtZCwgZm10LCBhcCk7CisJY21kLT50YWcgPSArK2ltYXAtPm5leHR0YWc7CisKKwlpZiAoY2IpCisJCWNtZC0+Y2IgPSAqY2I7CisJZWxzZQorCQltZW1zZXQoJmNtZC0+Y2IsIDAsIHNpemVvZihjbWQtPmNiKSk7CisKKwl3aGlsZSAoaW1hcC0+bGl0ZXJhbF9wZW5kaW5nKQorCQlnZXRfY21kX3Jlc3VsdChjdHgsIE5VTEwpOworCisJaWYgKCFjbWQtPmNiLmRhdGEpCisJCWJ1ZmwgPSBuZnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCAlc1xyXG4iLCBjbWQtPnRhZywgY21kLT5jbWQpOworCWVsc2UKKwkJYnVmbCA9IG5mc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkICVzeyVkJXN9XHJcbiIsCisJCQkJICBjbWQtPnRhZywgY21kLT5jbWQsIGNtZC0+Y2IuZGxlbiwKKwkJCQkgIENBUChMSVRFUkFMUExVUykgPyAiKyIgOiAiIik7CisKKwlpZiAoVmVyYm9zZSkgeworCQlpZiAoaW1hcC0+bnVtX2luX3Byb2dyZXNzKQorCQkJcHJpbnRmKCIoJWQgaW4gcHJvZ3Jlc3MpICIsIGltYXAtPm51bV9pbl9wcm9ncmVzcyk7CisJCWlmIChtZW1jbXAoY21kLT5jbWQsICJMT0dJTiIsIDUpKQorCQkJcHJpbnRmKCI+Pj4gJXMiLCBidWYpOworCQllbHNlCisJCQlwcmludGYoIj4+PiAlZCBMT0dJTiA8dXNlcj4gPHBhc3M+XG4iLCBjbWQtPnRhZyk7CisJfQorCWlmIChzb2NrZXRfd3JpdGUoJmltYXAtPmJ1Zi5zb2NrLCBidWYsIGJ1ZmwpICE9IGJ1ZmwpIHsKKwkJZnJlZShjbWQtPmNtZCk7CisJCWZyZWUoY21kKTsKKwkJaWYgKGNiKQorCQkJZnJlZShjYi0+ZGF0YSk7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoY21kLT5jYi5kYXRhKSB7CisJCWlmIChDQVAoTElURVJBTFBMVVMpKSB7CisJCQluID0gc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgY21kLT5jYi5kYXRhLCBjbWQtPmNiLmRsZW4pOworCQkJZnJlZShjbWQtPmNiLmRhdGEpOworCQkJaWYgKG4gIT0gY21kLT5jYi5kbGVuIHx8CisJCQkgICAgc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgIlxyXG4iLCAyKSAhPSAyKSB7CisJCQkJZnJlZShjbWQtPmNtZCk7CisJCQkJZnJlZShjbWQpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJY21kLT5jYi5kYXRhID0gTlVMTDsKKwkJfSBlbHNlCisJCQlpbWFwLT5saXRlcmFsX3BlbmRpbmcgPSAxOworCX0gZWxzZSBpZiAoY21kLT5jYi5jb250KQorCQlpbWFwLT5saXRlcmFsX3BlbmRpbmcgPSAxOworCWNtZC0+bmV4dCA9IE5VTEw7CisJKmltYXAtPmluX3Byb2dyZXNzX2FwcGVuZCA9IGNtZDsKKwlpbWFwLT5pbl9wcm9ncmVzc19hcHBlbmQgPSAmY21kLT5uZXh0OworCWltYXAtPm51bV9pbl9wcm9ncmVzcysrOworCXJldHVybiBjbWQ7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitzdGF0aWMgc3RydWN0IGltYXBfY21kICppc3N1ZV9pbWFwX2NtZChzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LAorCQkJCSAgICAgICBzdHJ1Y3QgaW1hcF9jbWRfY2IgKmNiLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3QgaW1hcF9jbWQgKnJldDsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdl9pc3N1ZV9pbWFwX2NtZChjdHgsIGNiLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiByZXQ7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitzdGF0aWMgaW50IGltYXBfZXhlYyhzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWRfY2IgKmNiLAorCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJc3RydWN0IGltYXBfY21kICpjbWRwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJY21kcCA9IHZfaXNzdWVfaW1hcF9jbWQoY3R4LCBjYiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlpZiAoIWNtZHApCisJCXJldHVybiBSRVNQX0JBRDsKKworCXJldHVybiBnZXRfY21kX3Jlc3VsdChjdHgsIGNtZHApOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQorc3RhdGljIGludCBpbWFwX2V4ZWNfbShzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWRfY2IgKmNiLAorCQkgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlzdHJ1Y3QgaW1hcF9jbWQgKmNtZHA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwljbWRwID0gdl9pc3N1ZV9pbWFwX2NtZChjdHgsIGNiLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCWlmICghY21kcCkKKwkJcmV0dXJuIERSVl9TVE9SRV9CQUQ7CisKKwlzd2l0Y2ggKGdldF9jbWRfcmVzdWx0KGN0eCwgY21kcCkpIHsKKwljYXNlIFJFU1BfQkFEOiByZXR1cm4gRFJWX1NUT1JFX0JBRDsKKwljYXNlIFJFU1BfTk86IHJldHVybiBEUlZfTVNHX0JBRDsKKwlkZWZhdWx0OiByZXR1cm4gRFJWX09LOworCX0KK30KKworc3RhdGljIGludCBpc19hdG9tKHN0cnVjdCBpbWFwX2xpc3QgKmxpc3QpCit7CisJcmV0dXJuIGxpc3QgJiYgbGlzdC0+dmFsICYmIGxpc3QtPnZhbCAhPSBOSUwgJiYgbGlzdC0+dmFsICE9IExJU1Q7Cit9CisKK3N0YXRpYyBpbnQgaXNfbGlzdChzdHJ1Y3QgaW1hcF9saXN0ICpsaXN0KQoreworCXJldHVybiBsaXN0ICYmIGxpc3QtPnZhbCA9PSBMSVNUOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2xpc3Qoc3RydWN0IGltYXBfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgaW1hcF9saXN0ICp0bXA7CisKKwlmb3IgKDsgbGlzdDsgbGlzdCA9IHRtcCkgeworCQl0bXAgPSBsaXN0LT5uZXh0OworCQlpZiAoaXNfbGlzdChsaXN0KSkKKwkJCWZyZWVfbGlzdChsaXN0LT5jaGlsZCk7CisJCWVsc2UgaWYgKGlzX2F0b20obGlzdCkpCisJCQlmcmVlKGxpc3QtPnZhbCk7CisJCWZyZWUobGlzdCk7CisJfQorfQorCitzdGF0aWMgaW50IHBhcnNlX2ltYXBfbGlzdF9sKHN0cnVjdCBpbWFwICppbWFwLCBjaGFyICoqc3AsIHN0cnVjdCBpbWFwX2xpc3QgKipjdXJwLCBpbnQgbGV2ZWwpCit7CisJc3RydWN0IGltYXBfbGlzdCAqY3VyOworCWNoYXIgKnMgPSAqc3AsICpwOworCWludCBuLCBieXRlczsKKworCWZvciAoOzspIHsKKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnMpKQorCQkJcysrOworCQlpZiAobGV2ZWwgJiYgKnMgPT0gJyknKSB7CisJCQlzKys7CisJCQlicmVhazsKKwkJfQorCQkqY3VycCA9IGN1ciA9IHhtYWxsb2Moc2l6ZW9mKCpjdXIpKTsKKwkJY3VycCA9ICZjdXItPm5leHQ7CisJCWN1ci0+dmFsID0gTlVMTDsgLyogZm9yIGNsZWFuIGJhaWwgKi8KKwkJaWYgKCpzID09ICcoJykgeworCQkJLyogc3VibGlzdCAqLworCQkJcysrOworCQkJY3VyLT52YWwgPSBMSVNUOworCQkJaWYgKHBhcnNlX2ltYXBfbGlzdF9sKGltYXAsICZzLCAmY3VyLT5jaGlsZCwgbGV2ZWwgKyAxKSkKKwkJCQlnb3RvIGJhaWw7CisJCX0gZWxzZSBpZiAoaW1hcCAmJiAqcyA9PSAneycpIHsKKwkJCS8qIGxpdGVyYWwgKi8KKwkJCWJ5dGVzID0gY3VyLT5sZW4gPSBzdHJ0b2wocyArIDEsICZzLCAxMCk7CisJCQlpZiAoKnMgIT0gJ30nKQorCQkJCWdvdG8gYmFpbDsKKworCQkJcyA9IGN1ci0+dmFsID0geG1hbGxvYyhjdXItPmxlbik7CisKKwkJCS8qIGR1bXAgd2hhdHMgbGVmdCBvdmVyIGluIHRoZSBpbnB1dCBidWZmZXIgKi8KKwkJCW4gPSBpbWFwLT5idWYuYnl0ZXMgLSBpbWFwLT5idWYub2Zmc2V0OworCisJCQlpZiAobiA+IGJ5dGVzKQorCQkJCS8qIHRoZSBlbnRpcmUgbWVzc2FnZSBmaXQgaW4gdGhlIGJ1ZmZlciAqLworCQkJCW4gPSBieXRlczsKKworCQkJbWVtY3B5KHMsIGltYXAtPmJ1Zi5idWYgKyBpbWFwLT5idWYub2Zmc2V0LCBuKTsKKwkJCXMgKz0gbjsKKwkJCWJ5dGVzIC09IG47CisKKwkJCS8qIG1hcmsgdGhhdCB3ZSB1c2VkIHBhcnQgb2YgdGhlIGJ1ZmZlciAqLworCQkJaW1hcC0+YnVmLm9mZnNldCArPSBuOworCisJCQkvKiBub3cgcmVhZCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZSAqLworCQkJd2hpbGUgKGJ5dGVzID4gMCkgeworCQkJCWlmICgobiA9IHNvY2tldF9yZWFkKCZpbWFwLT5idWYuc29jaywgcywgYnl0ZXMpKSA8PSAwKQorCQkJCQlnb3RvIGJhaWw7CisJCQkJcyArPSBuOworCQkJCWJ5dGVzIC09IG47CisJCQl9CisKKwkJCWlmIChidWZmZXJfZ2V0cygmaW1hcC0+YnVmLCAmcykpCisJCQkJZ290byBiYWlsOworCQl9IGVsc2UgaWYgKCpzID09ICciJykgeworCQkJLyogcXVvdGVkIHN0cmluZyAqLworCQkJcysrOworCQkJcCA9IHM7CisJCQlmb3IgKDsgKnMgIT0gJyInOyBzKyspCisJCQkJaWYgKCEqcykKKwkJCQkJZ290byBiYWlsOworCQkJY3VyLT5sZW4gPSBzIC0gcDsKKwkJCXMrKzsKKwkJCWN1ci0+dmFsID0geG1lbWR1cHoocCwgY3VyLT5sZW4pOworCQl9IGVsc2UgeworCQkJLyogYXRvbSAqLworCQkJcCA9IHM7CisJCQlmb3IgKDsgKnMgJiYgIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnMpOyBzKyspCisJCQkJaWYgKGxldmVsICYmICpzID09ICcpJykKKwkJCQkJYnJlYWs7CisJCQljdXItPmxlbiA9IHMgLSBwOworCQkJaWYgKGN1ci0+bGVuID09IDMgJiYgIW1lbWNtcCgiTklMIiwgcCwgMykpCisJCQkJY3VyLT52YWwgPSBOSUw7CisJCQllbHNlCisJCQkJY3VyLT52YWwgPSB4bWVtZHVweihwLCBjdXItPmxlbik7CisJCX0KKworCQlpZiAoIWxldmVsKQorCQkJYnJlYWs7CisJCWlmICghKnMpCisJCQlnb3RvIGJhaWw7CisJfQorCSpzcCA9IHM7CisJKmN1cnAgPSBOVUxMOworCXJldHVybiAwOworCitiYWlsOgorCSpjdXJwID0gTlVMTDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW1hcF9saXN0ICpwYXJzZV9pbWFwX2xpc3Qoc3RydWN0IGltYXAgKmltYXAsIGNoYXIgKipzcCkKK3sKKwlzdHJ1Y3QgaW1hcF9saXN0ICpoZWFkOworCisJaWYgKCFwYXJzZV9pbWFwX2xpc3RfbChpbWFwLCBzcCwgJmhlYWQsIDApKQorCQlyZXR1cm4gaGVhZDsKKwlmcmVlX2xpc3QoaGVhZCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW1hcF9saXN0ICpwYXJzZV9saXN0KGNoYXIgKipzcCkKK3sKKwlyZXR1cm4gcGFyc2VfaW1hcF9saXN0KE5VTEwsIHNwKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY2FwYWJpbGl0eShzdHJ1Y3QgaW1hcCAqaW1hcCwgY2hhciAqY21kKQoreworCWNoYXIgKmFyZzsKKwl1bnNpZ25lZCBpOworCisJaW1hcC0+Y2FwcyA9IDB4ODAwMDAwMDA7CisJd2hpbGUgKChhcmcgPSBuZXh0X2FyZygmY21kKSkpCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNhcF9saXN0KTsgaSsrKQorCQkJaWYgKCFzdHJjbXAoY2FwX2xpc3RbaV0sIGFyZykpCisJCQkJaW1hcC0+Y2FwcyB8PSAxIDw8IGk7CisJaW1hcC0+cmNhcHMgPSBpbWFwLT5jYXBzOworfQorCitzdGF0aWMgaW50IHBhcnNlX3Jlc3BvbnNlX2NvZGUoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kX2NiICpjYiwKKwkJCSAgICAgICBjaGFyICpzKQoreworCXN0cnVjdCBpbWFwICppbWFwID0gY3R4LT5pbWFwOworCWNoYXIgKmFyZywgKnA7CisKKwlpZiAoKnMgIT0gJ1snKQorCQlyZXR1cm4gUkVTUF9PSzsJCS8qIG5vIHJlc3BvbnNlIGNvZGUgKi8KKwlzKys7CisJaWYgKCEocCA9IHN0cmNocihzLCAnXScpKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IG1hbGZvcm1lZCByZXNwb25zZSBjb2RlXG4iKTsKKwkJcmV0dXJuIFJFU1BfQkFEOworCX0KKwkqcCsrID0gMDsKKwlhcmcgPSBuZXh0X2FyZygmcyk7CisJaWYgKCFzdHJjbXAoIlVJRFZBTElESVRZIiwgYXJnKSkgeworCQlpZiAoIShhcmcgPSBuZXh0X2FyZygmcykpIHx8ICEoY3R4LT5nZW4udWlkdmFsaWRpdHkgPSBhdG9pKGFyZykpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IG1hbGZvcm1lZCBVSURWQUxJRElUWSBzdGF0dXNcbiIpOworCQkJcmV0dXJuIFJFU1BfQkFEOworCQl9CisJfSBlbHNlIGlmICghc3RyY21wKCJVSURORVhUIiwgYXJnKSkgeworCQlpZiAoIShhcmcgPSBuZXh0X2FyZygmcykpIHx8ICEoaW1hcC0+dWlkbmV4dCA9IGF0b2koYXJnKSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogbWFsZm9ybWVkIE5FWFRVSUQgc3RhdHVzXG4iKTsKKwkJCXJldHVybiBSRVNQX0JBRDsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcCgiQ0FQQUJJTElUWSIsIGFyZykpIHsKKwkJcGFyc2VfY2FwYWJpbGl0eShpbWFwLCBzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoIkFMRVJUIiwgYXJnKSkgeworCQkvKiBSRkMyMDYwIHNheXMgdGhhdCB0aGVzZSBtZXNzYWdlcyBNVVNUIGJlIGRpc3BsYXllZAorCQkgKiB0byB0aGUgdXNlcgorCQkgKi8KKwkJZm9yICg7IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApOyBwKyspOworCQlmcHJpbnRmKHN0ZGVyciwgIioqKiBJTUFQIEFMRVJUICoqKiAlc1xuIiwgcCk7CisJfSBlbHNlIGlmIChjYiAmJiBjYi0+Y3R4ICYmICFzdHJjbXAoIkFQUEVORFVJRCIsIGFyZykpIHsKKwkJaWYgKCEoYXJnID0gbmV4dF9hcmcoJnMpKSB8fCAhKGN0eC0+Z2VuLnVpZHZhbGlkaXR5ID0gYXRvaShhcmcpKSB8fAorCQkgICAgIShhcmcgPSBuZXh0X2FyZygmcykpIHx8ICEoKihpbnQgKiljYi0+Y3R4ID0gYXRvaShhcmcpKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBtYWxmb3JtZWQgQVBQRU5EVUlEIHN0YXR1c1xuIik7CisJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCX0KKwl9CisJcmV0dXJuIFJFU1BfT0s7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NtZF9yZXN1bHQoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kICp0Y21kKQoreworCXN0cnVjdCBpbWFwICppbWFwID0gY3R4LT5pbWFwOworCXN0cnVjdCBpbWFwX2NtZCAqY21kcCwgKipwY21kcCwgKm5jbWRwOworCWNoYXIgKmNtZCwgKmFyZywgKmFyZzEsICpwOworCWludCBuLCByZXNwLCByZXNwMiwgdGFnOworCisJZm9yICg7OykgeworCQlpZiAoYnVmZmVyX2dldHMoJmltYXAtPmJ1ZiwgJmNtZCkpCisJCQlyZXR1cm4gUkVTUF9CQUQ7CisKKwkJYXJnID0gbmV4dF9hcmcoJmNtZCk7CisJCWlmICgqYXJnID09ICcqJykgeworCQkJYXJnID0gbmV4dF9hcmcoJmNtZCk7CisJCQlpZiAoIWFyZykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogdW5hYmxlIHRvIHBhcnNlIHVudGFnZ2VkIHJlc3BvbnNlXG4iKTsKKwkJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCQl9CisKKwkJCWlmICghc3RyY21wKCJOQU1FU1BBQ0UiLCBhcmcpKSB7CisJCQkJaW1hcC0+bnNfcGVyc29uYWwgPSBwYXJzZV9saXN0KCZjbWQpOworCQkJCWltYXAtPm5zX290aGVyID0gcGFyc2VfbGlzdCgmY21kKTsKKwkJCQlpbWFwLT5uc19zaGFyZWQgPSBwYXJzZV9saXN0KCZjbWQpOworCQkJfSBlbHNlIGlmICghc3RyY21wKCJPSyIsIGFyZykgfHwgIXN0cmNtcCgiQkFEIiwgYXJnKSB8fAorCQkJCSAgICFzdHJjbXAoIk5PIiwgYXJnKSB8fCAhc3RyY21wKCJCWUUiLCBhcmcpKSB7CisJCQkJaWYgKChyZXNwID0gcGFyc2VfcmVzcG9uc2VfY29kZShjdHgsIE5VTEwsIGNtZCkpICE9IFJFU1BfT0spCisJCQkJCXJldHVybiByZXNwOworCQkJfSBlbHNlIGlmICghc3RyY21wKCJDQVBBQklMSVRZIiwgYXJnKSkKKwkJCQlwYXJzZV9jYXBhYmlsaXR5KGltYXAsIGNtZCk7CisJCQllbHNlIGlmICgoYXJnMSA9IG5leHRfYXJnKCZjbWQpKSkgeworCQkJCWlmICghc3RyY21wKCJFWElTVFMiLCBhcmcxKSkKKwkJCQkJY3R4LT5nZW4uY291bnQgPSBhdG9pKGFyZyk7CisJCQkJZWxzZSBpZiAoIXN0cmNtcCgiUkVDRU5UIiwgYXJnMSkpCisJCQkJCWN0eC0+Z2VuLnJlY2VudCA9IGF0b2koYXJnKTsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiB1bmFibGUgdG8gcGFyc2UgdW50YWdnZWQgcmVzcG9uc2VcbiIpOworCQkJCXJldHVybiBSRVNQX0JBRDsKKwkJCX0KKwkJfSBlbHNlIGlmICghaW1hcC0+aW5fcHJvZ3Jlc3MpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogdW5leHBlY3RlZCByZXBseTogJXMgJXNcbiIsIGFyZywgY21kID8gY21kIDogIiIpOworCQkJcmV0dXJuIFJFU1BfQkFEOworCQl9IGVsc2UgaWYgKCphcmcgPT0gJysnKSB7CisJCQkvKiBUaGlzIGNhbiBoYXBwZW4gb25seSB3aXRoIHRoZSBsYXN0IGNvbW1hbmQgdW5kZXJ3YXksIGFzCisJCQkgICBpdCBlbmZvcmNlcyBhIHJvdW5kLXRyaXAuICovCisJCQljbWRwID0gKHN0cnVjdCBpbWFwX2NtZCAqKSgoY2hhciAqKWltYXAtPmluX3Byb2dyZXNzX2FwcGVuZCAtCisJCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGltYXBfY21kLCBuZXh0KSk7CisJCQlpZiAoY21kcC0+Y2IuZGF0YSkgeworCQkJCW4gPSBzb2NrZXRfd3JpdGUoJmltYXAtPmJ1Zi5zb2NrLCBjbWRwLT5jYi5kYXRhLCBjbWRwLT5jYi5kbGVuKTsKKwkJCQlmcmVlKGNtZHAtPmNiLmRhdGEpOworCQkJCWNtZHAtPmNiLmRhdGEgPSBOVUxMOworCQkJCWlmIChuICE9IChpbnQpY21kcC0+Y2IuZGxlbikKKwkJCQkJcmV0dXJuIFJFU1BfQkFEOworCQkJfSBlbHNlIGlmIChjbWRwLT5jYi5jb250KSB7CisJCQkJaWYgKGNtZHAtPmNiLmNvbnQoY3R4LCBjbWRwLCBjbWQpKQorCQkJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogdW5leHBlY3RlZCBjb21tYW5kIGNvbnRpbnVhdGlvbiByZXF1ZXN0XG4iKTsKKwkJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCQl9CisJCQlpZiAoc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgIlxyXG4iLCAyKSAhPSAyKQorCQkJCXJldHVybiBSRVNQX0JBRDsKKwkJCWlmICghY21kcC0+Y2IuY29udCkKKwkJCQlpbWFwLT5saXRlcmFsX3BlbmRpbmcgPSAwOworCQkJaWYgKCF0Y21kKQorCQkJCXJldHVybiBEUlZfT0s7CisJCX0gZWxzZSB7CisJCQl0YWcgPSBhdG9pKGFyZyk7CisJCQlmb3IgKHBjbWRwID0gJmltYXAtPmluX3Byb2dyZXNzOyAoY21kcCA9ICpwY21kcCk7IHBjbWRwID0gJmNtZHAtPm5leHQpCisJCQkJaWYgKGNtZHAtPnRhZyA9PSB0YWcpCisJCQkJCWdvdG8gZ290dGFnOworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiB1bmV4cGVjdGVkIHRhZyAlc1xuIiwgYXJnKTsKKwkJCXJldHVybiBSRVNQX0JBRDsKKwkJZ290dGFnOgorCQkJaWYgKCEoKnBjbWRwID0gY21kcC0+bmV4dCkpCisJCQkJaW1hcC0+aW5fcHJvZ3Jlc3NfYXBwZW5kID0gcGNtZHA7CisJCQlpbWFwLT5udW1faW5fcHJvZ3Jlc3MtLTsKKwkJCWlmIChjbWRwLT5jYi5jb250IHx8IGNtZHAtPmNiLmRhdGEpCisJCQkJaW1hcC0+bGl0ZXJhbF9wZW5kaW5nID0gMDsKKwkJCWFyZyA9IG5leHRfYXJnKCZjbWQpOworCQkJaWYgKCFzdHJjbXAoIk9LIiwgYXJnKSkKKwkJCQlyZXNwID0gRFJWX09LOworCQkJZWxzZSB7CisJCQkJaWYgKCFzdHJjbXAoIk5PIiwgYXJnKSkgeworCQkJCQlpZiAoY21kcC0+Y2IuY3JlYXRlICYmIGNtZCAmJiAoY21kcC0+Y2IudHJ5Y3JlYXRlIHx8ICFtZW1jbXAoY21kLCAiW1RSWUNSRUFURV0iLCAxMSkpKSB7IC8qIFNFTEVDVCwgQVBQRU5EIG9yIFVJRCBDT1BZICovCisJCQkJCQlwID0gc3RyY2hyKGNtZHAtPmNtZCwgJyInKTsKKwkJCQkJCWlmICghaXNzdWVfaW1hcF9jbWQoY3R4LCBOVUxMLCAiQ1JFQVRFIFwiJS4qc1wiIiwgKGludCkoc3RyY2hyKHAgKyAxLCAnIicpIC0gcCArIDEpLCBwKSkgeworCQkJCQkJCXJlc3AgPSBSRVNQX0JBRDsKKwkJCQkJCQlnb3RvIG5vcm1hbDsKKwkJCQkJCX0KKwkJCQkJCS8qIG5vdCB3YWl0aW5nIGhlcmUgdmlvbGF0ZXMgdGhlIHNwZWMsIGJ1dCBhIHNlcnZlciB0aGF0IGRvZXMgbm90CisJCQkJCQkgICBncm9rIHRoaXMgbm9uZXRoZWxlc3MgdmlvbGF0ZXMgaXQgdG9vLiAqLworCQkJCQkJY21kcC0+Y2IuY3JlYXRlID0gMDsKKwkJCQkJCWlmICghKG5jbWRwID0gaXNzdWVfaW1hcF9jbWQoY3R4LCAmY21kcC0+Y2IsICIlcyIsIGNtZHAtPmNtZCkpKSB7CisJCQkJCQkJcmVzcCA9IFJFU1BfQkFEOworCQkJCQkJCWdvdG8gbm9ybWFsOworCQkJCQkJfQorCQkJCQkJZnJlZShjbWRwLT5jbWQpOworCQkJCQkJZnJlZShjbWRwKTsKKwkJCQkJCWlmICghdGNtZCkKKwkJCQkJCQlyZXR1cm4gMDsJLyogaWdub3JlZCAqLworCQkJCQkJaWYgKGNtZHAgPT0gdGNtZCkKKwkJCQkJCQl0Y21kID0gbmNtZHA7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlyZXNwID0gUkVTUF9OTzsKKwkJCQl9IGVsc2UgLyppZiAoIXN0cmNtcCgiQkFEIiwgYXJnKSkqLworCQkJCQlyZXNwID0gUkVTUF9CQUQ7CisJCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGNvbW1hbmQgJyVzJyByZXR1cm5lZCByZXNwb25zZSAoJXMpIC0gJXNcbiIsCisJCQkJCSBtZW1jbXAoY21kcC0+Y21kLCAiTE9HSU4iLCA1KSA/CisJCQkJCQkJY21kcC0+Y21kIDogIkxPR0lOIDx1c2VyPiA8cGFzcz4iLAorCQkJCQkJCWFyZywgY21kID8gY21kIDogIiIpOworCQkJfQorCQkJaWYgKChyZXNwMiA9IHBhcnNlX3Jlc3BvbnNlX2NvZGUoY3R4LCAmY21kcC0+Y2IsIGNtZCkpID4gcmVzcCkKKwkJCQlyZXNwID0gcmVzcDI7CisJCW5vcm1hbDoKKwkJCWlmIChjbWRwLT5jYi5kb25lKQorCQkJCWNtZHAtPmNiLmRvbmUoY3R4LCBjbWRwLCByZXNwKTsKKwkJCWZyZWUoY21kcC0+Y2IuZGF0YSk7CisJCQlmcmVlKGNtZHAtPmNtZCk7CisJCQlmcmVlKGNtZHApOworCQkJaWYgKCF0Y21kIHx8IHRjbWQgPT0gY21kcCkKKwkJCQlyZXR1cm4gcmVzcDsKKwkJfQorCX0KKwkvKiBub3QgcmVhY2hlZCAqLworfQorCitzdGF0aWMgdm9pZCBpbWFwX2Nsb3NlX3NlcnZlcihzdHJ1Y3QgaW1hcF9zdG9yZSAqaWN0eCkKK3sKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGljdHgtPmltYXA7CisKKwlpZiAoaW1hcC0+YnVmLnNvY2suZmRbMF0gIT0gLTEpIHsKKwkJaW1hcF9leGVjKGljdHgsIE5VTEwsICJMT0dPVVQiKTsKKwkJc29ja2V0X3NodXRkb3duKCZpbWFwLT5idWYuc29jayk7CisJfQorCWZyZWVfbGlzdChpbWFwLT5uc19wZXJzb25hbCk7CisJZnJlZV9saXN0KGltYXAtPm5zX290aGVyKTsKKwlmcmVlX2xpc3QoaW1hcC0+bnNfc2hhcmVkKTsKKwlmcmVlKGltYXApOworfQorCitzdGF0aWMgdm9pZCBpbWFwX2Nsb3NlX3N0b3JlKHN0cnVjdCBzdG9yZSAqY3R4KQoreworCWltYXBfY2xvc2Vfc2VydmVyKChzdHJ1Y3QgaW1hcF9zdG9yZSAqKWN0eCk7CisJZnJlZV9nZW5lcmljX21lc3NhZ2VzKGN0eC0+bXNncyk7CisJZnJlZShjdHgpOworfQorCisjaWZuZGVmIE5PX09QRU5TU0wKKworLyoKKyAqIGhleGNoYXIoKSBhbmQgY3JhbSgpIGZ1bmN0aW9ucyBhcmUgYmFzZWQgb24gdGhlIGNvZGUgZnJvbSB0aGUgaXN5bmMKKyAqIHByb2plY3QgKGh0dHA6Ly9pc3luYy5zZi5uZXQvKS4KKyAqLworc3RhdGljIGNoYXIgaGV4Y2hhcih1bnNpZ25lZCBpbnQgYikKK3sKKwlyZXR1cm4gYiA8IDEwID8gJzAnICsgYiA6ICdhJyArIChiIC0gMTApOworfQorCisjZGVmaW5lIEVOQ09ERURfU0laRShuKSAoNCooKG4rMikvMykpCitzdGF0aWMgY2hhciAqY3JhbShjb25zdCBjaGFyICpjaGFsbGVuZ2VfNjQsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnBhc3MpCit7CisJaW50IGksIHJlc3BfbGVuLCBlbmNvZGVkX2xlbiwgZGVjb2RlZF9sZW47CisJSE1BQ19DVFggaG1hYzsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbMTZdOworCWNoYXIgaGV4WzMzXTsKKwljaGFyICpyZXNwb25zZSwgKnJlc3BvbnNlXzY0LCAqY2hhbGxlbmdlOworCisJLyoKKwkgKiBsZW5ndGggb2YgY2hhbGxlbmdlXzY0IChpLmUuIGJhc2UtNjQgZW5jb2RlZCBzdHJpbmcpIGlzIGEgZ29vZAorCSAqIGVub3VnaCB1cHBlciBib3VuZCBmb3IgY2hhbGxlbmdlIChkZWNvZGVkIHJlc3VsdCkuCisJICovCisJZW5jb2RlZF9sZW4gPSBzdHJsZW4oY2hhbGxlbmdlXzY0KTsKKwljaGFsbGVuZ2UgPSB4bWFsbG9jKGVuY29kZWRfbGVuKTsKKwlkZWNvZGVkX2xlbiA9IEVWUF9EZWNvZGVCbG9jaygodW5zaWduZWQgY2hhciAqKWNoYWxsZW5nZSwKKwkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKWNoYWxsZW5nZV82NCwgZW5jb2RlZF9sZW4pOworCWlmIChkZWNvZGVkX2xlbiA8IDApCisJCWRpZSgiaW52YWxpZCBjaGFsbGVuZ2UgJXMiLCBjaGFsbGVuZ2VfNjQpOworCUhNQUNfSW5pdCgmaG1hYywgKHVuc2lnbmVkIGNoYXIgKilwYXNzLCBzdHJsZW4ocGFzcyksIEVWUF9tZDUoKSk7CisJSE1BQ19VcGRhdGUoJmhtYWMsICh1bnNpZ25lZCBjaGFyICopY2hhbGxlbmdlLCBkZWNvZGVkX2xlbik7CisJSE1BQ19GaW5hbCgmaG1hYywgaGFzaCwgTlVMTCk7CisJSE1BQ19DVFhfY2xlYW51cCgmaG1hYyk7CisKKwloZXhbMzJdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQloZXhbMiAqIGldID0gaGV4Y2hhcigoaGFzaFtpXSA+PiA0KSAmIDB4Zik7CisJCWhleFsyICogaSArIDFdID0gaGV4Y2hhcihoYXNoW2ldICYgMHhmKTsKKwl9CisKKwkvKiByZXNwb25zZTogIjx1c2VyPiA8ZGlnZXN0IGluIGhleD4iICovCisJcmVzcF9sZW4gPSBzdHJsZW4odXNlcikgKyAxICsgc3RybGVuKGhleCkgKyAxOworCXJlc3BvbnNlID0geG1hbGxvYyhyZXNwX2xlbik7CisJc3ByaW50ZihyZXNwb25zZSwgIiVzICVzIiwgdXNlciwgaGV4KTsKKworCXJlc3BvbnNlXzY0ID0geG1hbGxvYyhFTkNPREVEX1NJWkUocmVzcF9sZW4pICsgMSk7CisJZW5jb2RlZF9sZW4gPSBFVlBfRW5jb2RlQmxvY2soKHVuc2lnbmVkIGNoYXIgKilyZXNwb25zZV82NCwKKwkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKXJlc3BvbnNlLCByZXNwX2xlbik7CisJaWYgKGVuY29kZWRfbGVuIDwgMCkKKwkJZGllKCJFVlBfRW5jb2RlQmxvY2sgZXJyb3IiKTsKKwlyZXNwb25zZV82NFtlbmNvZGVkX2xlbl0gPSAnXDAnOworCXJldHVybiAoY2hhciAqKXJlc3BvbnNlXzY0OworfQorCisjZWxzZQorCitzdGF0aWMgY2hhciAqY3JhbShjb25zdCBjaGFyICpjaGFsbGVuZ2VfNjQsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnBhc3MpCit7CisJZGllKCJJZiB5b3Ugd2FudCB0byB1c2UgQ1JBTS1NRDUgYXV0aGVudGljYXRlIG1ldGhvZCwgIgorCSAgICAieW91IGhhdmUgdG8gYnVpbGQgZ2l0LWltYXAtc2VuZCB3aXRoIE9wZW5TU0wgbGlicmFyeS4iKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQgYXV0aF9jcmFtX21kNShzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWQgKmNtZCwgY29uc3QgY2hhciAqcHJvbXB0KQoreworCWludCByZXQ7CisJY2hhciAqcmVzcG9uc2U7CisKKwlyZXNwb25zZSA9IGNyYW0ocHJvbXB0LCBzZXJ2ZXIudXNlciwgc2VydmVyLnBhc3MpOworCisJcmV0ID0gc29ja2V0X3dyaXRlKCZjdHgtPmltYXAtPmJ1Zi5zb2NrLCByZXNwb25zZSwgc3RybGVuKHJlc3BvbnNlKSk7CisJaWYgKHJldCAhPSBzdHJsZW4ocmVzcG9uc2UpKQorCQlyZXR1cm4gZXJyb3IoIklNQVAgZXJyb3I6IHNlbmRpbmcgcmVzcG9uc2UgZmFpbGVkIik7CisKKwlmcmVlKHJlc3BvbnNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0b3JlICppbWFwX29wZW5fc3RvcmUoc3RydWN0IGltYXBfc2VydmVyX2NvbmYgKnNydmMpCit7CisJc3RydWN0IGltYXBfc3RvcmUgKmN0eDsKKwlzdHJ1Y3QgaW1hcCAqaW1hcDsKKwljaGFyICphcmcsICpyc3A7CisJaW50IHMgPSAtMSwgcHJlYXV0aDsKKworCWN0eCA9IHhjYWxsb2Moc2l6ZW9mKCpjdHgpLCAxKTsKKworCWN0eC0+aW1hcCA9IGltYXAgPSB4Y2FsbG9jKHNpemVvZigqaW1hcCksIDEpOworCWltYXAtPmJ1Zi5zb2NrLmZkWzBdID0gaW1hcC0+YnVmLnNvY2suZmRbMV0gPSAtMTsKKwlpbWFwLT5pbl9wcm9ncmVzc19hcHBlbmQgPSAmaW1hcC0+aW5fcHJvZ3Jlc3M7CisKKwkvKiBvcGVuIGNvbm5lY3Rpb24gdG8gSU1BUCBzZXJ2ZXIgKi8KKworCWlmIChzcnZjLT50dW5uZWwpIHsKKwkJY29uc3QgY2hhciAqYXJndltdID0geyBzcnZjLT50dW5uZWwsIE5VTEwgfTsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgdHVubmVsID0ge05VTEx9OworCisJCWltYXBfaW5mbygiU3RhcnRpbmcgdHVubmVsICclcycuLi4gIiwgc3J2Yy0+dHVubmVsKTsKKworCQl0dW5uZWwuYXJndiA9IGFyZ3Y7CisJCXR1bm5lbC51c2Vfc2hlbGwgPSAxOworCQl0dW5uZWwuaW4gPSAtMTsKKwkJdHVubmVsLm91dCA9IC0xOworCQlpZiAoc3RhcnRfY29tbWFuZCgmdHVubmVsKSkKKwkJCWRpZSgiY2Fubm90IHN0YXJ0IHByb3h5ICVzIiwgYXJndlswXSk7CisKKwkJaW1hcC0+YnVmLnNvY2suZmRbMF0gPSB0dW5uZWwub3V0OworCQlpbWFwLT5idWYuc29jay5mZFsxXSA9IHR1bm5lbC5pbjsKKworCQlpbWFwX2luZm8oIm9rXG4iKTsKKwl9IGVsc2UgeworI2lmbmRlZiBOT19JUFY2CisJCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpMCwgKmFpOworCQlpbnQgZ2FpOworCQljaGFyIHBvcnRzdHJbNl07CisKKwkJc25wcmludGYocG9ydHN0ciwgc2l6ZW9mKHBvcnRzdHIpLCAiJWQiLCBzcnZjLT5wb3J0KTsKKworCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKwkJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKwkJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKworCQlpbWFwX2luZm8oIlJlc29sdmluZyAlcy4uLiAiLCBzcnZjLT5ob3N0KTsKKwkJZ2FpID0gZ2V0YWRkcmluZm8oc3J2Yy0+aG9zdCwgcG9ydHN0ciwgJmhpbnRzLCAmYWkpOworCQlpZiAoZ2FpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImdldGFkZHJpbmZvOiAlc1xuIiwgZ2FpX3N0cmVycm9yKGdhaSkpOworCQkJZ290byBiYWlsOworCQl9CisJCWltYXBfaW5mbygib2tcbiIpOworCisJCWZvciAoYWkwID0gYWk7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CisJCQljaGFyIGFkZHJbTklfTUFYSE9TVF07CisKKwkJCXMgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLAorCQkJCSAgIGFpLT5haV9wcm90b2NvbCk7CisJCQlpZiAocyA8IDApCisJCQkJY29udGludWU7CisKKwkJCWdldG5hbWVpbmZvKGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiwgYWRkciwKKwkJCQkgICAgc2l6ZW9mKGFkZHIpLCBOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCk7CisJCQlpbWFwX2luZm8oIkNvbm5lY3RpbmcgdG8gWyVzXTolcy4uLiAiLCBhZGRyLCBwb3J0c3RyKTsKKworCQkJaWYgKGNvbm5lY3QocywgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSA8IDApIHsKKwkJCQljbG9zZShzKTsKKwkJCQlzID0gLTE7CisJCQkJcGVycm9yKCJjb25uZWN0Iik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJCWZyZWVhZGRyaW5mbyhhaTApOworI2Vsc2UgLyogTk9fSVBWNiAqLworCQlzdHJ1Y3QgaG9zdGVudCAqaGU7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCisJCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKwkJYWRkci5zaW5fcG9ydCA9IGh0b25zKHNydmMtPnBvcnQpOworCQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisJCWltYXBfaW5mbygiUmVzb2x2aW5nICVzLi4uICIsIHNydmMtPmhvc3QpOworCQloZSA9IGdldGhvc3RieW5hbWUoc3J2Yy0+aG9zdCk7CisJCWlmICghaGUpIHsKKwkJCXBlcnJvcigiZ2V0aG9zdGJ5bmFtZSIpOworCQkJZ290byBiYWlsOworCQl9CisJCWltYXBfaW5mbygib2tcbiIpOworCisJCWFkZHIuc2luX2FkZHIuc19hZGRyID0gKigoaW50ICopIGhlLT5oX2FkZHJfbGlzdFswXSk7CisKKwkJcyA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisKKwkJaW1hcF9pbmZvKCJDb25uZWN0aW5nIHRvICVzOiVodS4uLiAiLCBpbmV0X250b2EoYWRkci5zaW5fYWRkciksIG50b2hzKGFkZHIuc2luX3BvcnQpKTsKKwkJaWYgKGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpKSB7CisJCQljbG9zZShzKTsKKwkJCXMgPSAtMTsKKwkJCXBlcnJvcigiY29ubmVjdCIpOworCQl9CisjZW5kaWYKKwkJaWYgKHMgPCAwKSB7CisJCQlmcHV0cygiRXJyb3I6IHVuYWJsZSB0byBjb25uZWN0IHRvIHNlcnZlci5cbiIsIHN0ZGVycik7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQlpbWFwLT5idWYuc29jay5mZFswXSA9IHM7CisJCWltYXAtPmJ1Zi5zb2NrLmZkWzFdID0gZHVwKHMpOworCisJCWlmIChzcnZjLT51c2Vfc3NsICYmCisJCSAgICBzc2xfc29ja2V0X2Nvbm5lY3QoJmltYXAtPmJ1Zi5zb2NrLCAwLCBzcnZjLT5zc2xfdmVyaWZ5KSkgeworCQkJY2xvc2Uocyk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaW1hcF9pbmZvKCJva1xuIik7CisJfQorCisJLyogcmVhZCB0aGUgZ3JlZXRpbmcgc3RyaW5nICovCisJaWYgKGJ1ZmZlcl9nZXRzKCZpbWFwLT5idWYsICZyc3ApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogbm8gZ3JlZXRpbmcgcmVzcG9uc2VcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCWFyZyA9IG5leHRfYXJnKCZyc3ApOworCWlmICghYXJnIHx8ICphcmcgIT0gJyonIHx8IChhcmcgPSBuZXh0X2FyZygmcnNwKSkgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IGludmFsaWQgZ3JlZXRpbmcgcmVzcG9uc2VcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCXByZWF1dGggPSAwOworCWlmICghc3RyY21wKCJQUkVBVVRIIiwgYXJnKSkKKwkJcHJlYXV0aCA9IDE7CisJZWxzZSBpZiAoc3RyY21wKCJPSyIsIGFyZykgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IHVua25vd24gZ3JlZXRpbmcgcmVzcG9uc2VcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCXBhcnNlX3Jlc3BvbnNlX2NvZGUoY3R4LCBOVUxMLCByc3ApOworCWlmICghaW1hcC0+Y2FwcyAmJiBpbWFwX2V4ZWMoY3R4LCBOVUxMLCAiQ0FQQUJJTElUWSIpICE9IFJFU1BfT0spCisJCWdvdG8gYmFpbDsKKworCWlmICghcHJlYXV0aCkgeworI2lmbmRlZiBOT19PUEVOU1NMCisJCWlmICghc3J2Yy0+dXNlX3NzbCAmJiBDQVAoU1RBUlRUTFMpKSB7CisJCQlpZiAoaW1hcF9leGVjKGN0eCwgTlVMTCwgIlNUQVJUVExTIikgIT0gUkVTUF9PSykKKwkJCQlnb3RvIGJhaWw7CisJCQlpZiAoc3NsX3NvY2tldF9jb25uZWN0KCZpbWFwLT5idWYuc29jaywgMSwKKwkJCQkJICAgICAgIHNydmMtPnNzbF92ZXJpZnkpKQorCQkJCWdvdG8gYmFpbDsKKwkJCS8qIGNhcGFiaWxpdGllcyBtYXkgaGF2ZSBjaGFuZ2VkLCBzbyBnZXQgdGhlIG5ldyBjYXBhYmlsaXRpZXMgKi8KKwkJCWlmIChpbWFwX2V4ZWMoY3R4LCBOVUxMLCAiQ0FQQUJJTElUWSIpICE9IFJFU1BfT0spCisJCQkJZ290byBiYWlsOworCQl9CisjZW5kaWYKKwkJaW1hcF9pbmZvKCJMb2dnaW5nIGluLi4uXG4iKTsKKwkJaWYgKCFzcnZjLT51c2VyKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlNraXBwaW5nIHNlcnZlciAlcywgbm8gdXNlclxuIiwgc3J2Yy0+aG9zdCk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaWYgKCFzcnZjLT5wYXNzKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHByb21wdCA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGYoJnByb21wdCwgIlBhc3N3b3JkICglc0Alcyk6ICIsIHNydmMtPnVzZXIsIHNydmMtPmhvc3QpOworCQkJYXJnID0gZ2l0X2dldHBhc3MocHJvbXB0LmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmcHJvbXB0KTsKKwkJCWlmICghKmFyZykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiU2tpcHBpbmcgYWNjb3VudCAlc0Alcywgbm8gcGFzc3dvcmRcbiIsIHNydmMtPnVzZXIsIHNydmMtPmhvc3QpOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJCS8qCisJCQkgKiBnZXRwYXNzKCkgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdGF0aWMgYnVmZmVyLiAgbWFrZSBhIGNvcHkKKwkJCSAqIGZvciBsb25nIHRlcm0gc3RvcmFnZS4KKwkJCSAqLworCQkJc3J2Yy0+cGFzcyA9IHhzdHJkdXAoYXJnKTsKKwkJfQorCQlpZiAoQ0FQKE5PTE9HSU4pKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlNraXBwaW5nIGFjY291bnQgJXNAJXMsIHNlcnZlciBmb3JiaWRzIExPR0lOXG4iLCBzcnZjLT51c2VyLCBzcnZjLT5ob3N0KTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCWlmIChzcnZjLT5hdXRoX21ldGhvZCkgeworCQkJc3RydWN0IGltYXBfY21kX2NiIGNiOworCisJCQlpZiAoIXN0cmNtcChzcnZjLT5hdXRoX21ldGhvZCwgIkNSQU0tTUQ1IikpIHsKKwkJCQlpZiAoIUNBUChBVVRIX0NSQU1fTUQ1KSkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIllvdSBzcGVjaWZpZWQiCisJCQkJCQkiQ1JBTS1NRDUgYXMgYXV0aGVudGljYXRpb24gbWV0aG9kLCAiCisJCQkJCQkiYnV0ICVzIGRvZXNuJ3Qgc3VwcG9ydCBpdC5cbiIsIHNydmMtPmhvc3QpOworCQkJCQlnb3RvIGJhaWw7CisJCQkJfQorCQkJCS8qIENSQU0tTUQ1ICovCisKKwkJCQltZW1zZXQoJmNiLCAwLCBzaXplb2YoY2IpKTsKKwkJCQljYi5jb250ID0gYXV0aF9jcmFtX21kNTsKKwkJCQlpZiAoaW1hcF9leGVjKGN0eCwgJmNiLCAiQVVUSEVOVElDQVRFIENSQU0tTUQ1IikgIT0gUkVTUF9PSykgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IEFVVEhFTlRJQ0FURSBDUkFNLU1ENSBmYWlsZWRcbiIpOworCQkJCQlnb3RvIGJhaWw7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gYXV0aGVudGljYXRpb24gbWV0aG9kOiVzXG4iLCBzcnZjLT5ob3N0KTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIWltYXAtPmJ1Zi5zb2NrLnNzbCkKKwkJCQlpbWFwX3dhcm4oIioqKiBJTUFQIFdhcm5pbmcgKioqIFBhc3N3b3JkIGlzIGJlaW5nICIKKwkJCQkJICAic2VudCBpbiB0aGUgY2xlYXJcbiIpOworCQkJaWYgKGltYXBfZXhlYyhjdHgsIE5VTEwsICJMT0dJTiBcIiVzXCIgXCIlc1wiIiwgc3J2Yy0+dXNlciwgc3J2Yy0+cGFzcykgIT0gUkVTUF9PSykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogTE9HSU4gZmFpbGVkXG4iKTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCX0KKwl9IC8qICFwcmVhdXRoICovCisKKwljdHgtPnByZWZpeCA9ICIiOworCWN0eC0+dHJhc2huYyA9IDE7CisJcmV0dXJuIChzdHJ1Y3Qgc3RvcmUgKiljdHg7CisKK2JhaWw6CisJaW1hcF9jbG9zZV9zdG9yZSgmY3R4LT5nZW4pOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGltYXBfbWFrZV9mbGFncyhpbnQgZmxhZ3MsIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBjaGFyICpzOworCXVuc2lnbmVkIGksIGQ7CisKKwlmb3IgKGkgPSBkID0gMDsgaSA8IEFSUkFZX1NJWkUoRmxhZ3MpOyBpKyspCisJCWlmIChmbGFncyAmICgxIDw8IGkpKSB7CisJCQlidWZbZCsrXSA9ICcgJzsKKwkJCWJ1ZltkKytdID0gJ1xcJzsKKwkJCWZvciAocyA9IEZsYWdzW2ldOyAqczsgcysrKQorCQkJCWJ1ZltkKytdID0gKnM7CisJCX0KKwlidWZbMF0gPSAnKCc7CisJYnVmW2QrK10gPSAnKSc7CisJcmV0dXJuIGQ7Cit9CisKK3N0YXRpYyB2b2lkIGxmX3RvX2NybGYoc3RydWN0IG1zZ19kYXRhICptc2cpCit7CisJY2hhciAqbmV3OworCWludCBpLCBqLCBsZm51bSA9IDA7CisKKwlpZiAobXNnLT5kYXRhWzBdID09ICdcbicpCisJCWxmbnVtKys7CisJZm9yIChpID0gMTsgaSA8IG1zZy0+bGVuOyBpKyspIHsKKwkJaWYgKG1zZy0+ZGF0YVtpIC0gMV0gIT0gJ1xyJyAmJiBtc2ctPmRhdGFbaV0gPT0gJ1xuJykKKwkJCWxmbnVtKys7CisJfQorCisJbmV3ID0geG1hbGxvYyhtc2ctPmxlbiArIGxmbnVtKTsKKwlpZiAobXNnLT5kYXRhWzBdID09ICdcbicpIHsKKwkJbmV3WzBdID0gJ1xyJzsKKwkJbmV3WzFdID0gJ1xuJzsKKwkJaSA9IDE7CisJCWogPSAyOworCX0gZWxzZSB7CisJCW5ld1swXSA9IG1zZy0+ZGF0YVswXTsKKwkJaSA9IDE7CisJCWogPSAxOworCX0KKwlmb3IgKCA7IGkgPCBtc2ctPmxlbjsgaSsrKSB7CisJCWlmIChtc2ctPmRhdGFbaV0gIT0gJ1xuJykgeworCQkJbmV3W2orK10gPSBtc2ctPmRhdGFbaV07CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobXNnLT5kYXRhW2kgLSAxXSAhPSAnXHInKQorCQkJbmV3W2orK10gPSAnXHInOworCQkvKiBvdGhlcndpc2UgaXQgYWxyZWFkeSBoYWQgQ1IgYmVmb3JlICovCisJCW5ld1tqKytdID0gJ1xuJzsKKwl9CisJbXNnLT5sZW4gKz0gbGZudW07CisJZnJlZShtc2ctPmRhdGEpOworCW1zZy0+ZGF0YSA9IG5ldzsKK30KKworc3RhdGljIGludCBpbWFwX3N0b3JlX21zZyhzdHJ1Y3Qgc3RvcmUgKmdjdHgsIHN0cnVjdCBtc2dfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4ID0gKHN0cnVjdCBpbWFwX3N0b3JlICopZ2N0eDsKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGN0eC0+aW1hcDsKKwlzdHJ1Y3QgaW1hcF9jbWRfY2IgY2I7CisJY29uc3QgY2hhciAqcHJlZml4LCAqYm94OworCWludCByZXQsIGQ7CisJY2hhciBmbGFnc3RyWzEyOF07CisKKwlsZl90b19jcmxmKGRhdGEpOworCW1lbXNldCgmY2IsIDAsIHNpemVvZihjYikpOworCisJY2IuZGxlbiA9IGRhdGEtPmxlbjsKKwljYi5kYXRhID0geG1hbGxvYyhjYi5kbGVuKTsKKwltZW1jcHkoY2IuZGF0YSwgZGF0YS0+ZGF0YSwgZGF0YS0+bGVuKTsKKworCWQgPSAwOworCWlmIChkYXRhLT5mbGFncykgeworCQlkID0gaW1hcF9tYWtlX2ZsYWdzKGRhdGEtPmZsYWdzLCBmbGFnc3RyKTsKKwkJZmxhZ3N0cltkKytdID0gJyAnOworCX0KKwlmbGFnc3RyW2RdID0gMDsKKworCWJveCA9IGdjdHgtPm5hbWU7CisJcHJlZml4ID0gIXN0cmNtcChib3gsICJJTkJPWCIpID8gIiIgOiBjdHgtPnByZWZpeDsKKwljYi5jcmVhdGUgPSAwOworCXJldCA9IGltYXBfZXhlY19tKGN0eCwgJmNiLCAiQVBQRU5EIFwiJXMlc1wiICVzIiwgcHJlZml4LCBib3gsIGZsYWdzdHIpOworCWltYXAtPmNhcHMgPSBpbWFwLT5yY2FwczsKKwlpZiAocmV0ICE9IERSVl9PSykKKwkJcmV0dXJuIHJldDsKKwlnY3R4LT5jb3VudCsrOworCisJcmV0dXJuIERSVl9PSzsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlX2h0bWxfY2hhcnMoc3RydWN0IHN0cmJ1ZiAqcCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcC0+bGVuOyBpKyspIHsKKwkJaWYgKHAtPmJ1ZltpXSA9PSAnJicpCisJCQlzdHJidWZfc3BsaWNlKHAsIGksIDEsICImYW1wOyIsIDUpOworCQlpZiAocC0+YnVmW2ldID09ICc8JykKKwkJCXN0cmJ1Zl9zcGxpY2UocCwgaSwgMSwgIiZsdDsiLCA0KTsKKwkJaWYgKHAtPmJ1ZltpXSA9PSAnPicpCisJCQlzdHJidWZfc3BsaWNlKHAsIGksIDEsICImZ3Q7IiwgNCk7CisJCWlmIChwLT5idWZbaV0gPT0gJyInKQorCQkJc3RyYnVmX3NwbGljZShwLCBpLCAxLCAiJnF1b3Q7IiwgNik7CisJfQorfQorc3RhdGljIHZvaWQgd3JhcF9pbl9odG1sKHN0cnVjdCBtc2dfZGF0YSAqbXNnKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiAqKmxpbmVzOworCXN0cnVjdCBzdHJidWYgKipwOworCXN0YXRpYyBjaGFyICpjb250ZW50X3R5cGUgPSAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7XG4iOworCXN0YXRpYyBjaGFyICpwcmVfb3BlbiA9ICI8cHJlPlxuIjsKKwlzdGF0aWMgY2hhciAqcHJlX2Nsb3NlID0gIjwvcHJlPlxuIjsKKwlpbnQgYWRkZWRfaGVhZGVyID0gMDsKKworCXN0cmJ1Zl9hdHRhY2goJmJ1ZiwgbXNnLT5kYXRhLCBtc2ctPmxlbiwgbXNnLT5sZW4pOworCWxpbmVzID0gc3RyYnVmX3NwbGl0KCZidWYsICdcbicpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWZvciAocCA9IGxpbmVzOyAqcDsgcCsrKSB7CisJCWlmICghIGFkZGVkX2hlYWRlcikgeworCQkJaWYgKCgqcCktPmxlbiA9PSAxICYmICooKCpwKS0+YnVmKSA9PSAnXG4nKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBjb250ZW50X3R5cGUpOworCQkJCXN0cmJ1Zl9hZGRidWYoJmJ1ZiwgKnApOworCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcHJlX29wZW4pOworCQkJCWFkZGVkX2hlYWRlciA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJZW5jb2RlX2h0bWxfY2hhcnMoKnApOworCQlzdHJidWZfYWRkYnVmKCZidWYsICpwKTsKKwl9CisJc3RyYnVmX2FkZHN0cigmYnVmLCBwcmVfY2xvc2UpOworCXN0cmJ1Zl9saXN0X2ZyZWUobGluZXMpOworCW1zZy0+bGVuICA9IGJ1Zi5sZW47CisJbXNnLT5kYXRhID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworI2RlZmluZSBDSFVOS1NJWkUgMHgxMDAwCisKK3N0YXRpYyBpbnQgcmVhZF9tZXNzYWdlKEZJTEUgKmYsIHN0cnVjdCBtc2dfZGF0YSAqbXNnKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwltZW1zZXQobXNnLCAwLCBzaXplb2YoKm1zZykpOworCisJZG8geworCQlpZiAoc3RyYnVmX2ZyZWFkKCZidWYsIENIVU5LU0laRSwgZikgPD0gMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKCFmZW9mKGYpKTsKKworCW1zZy0+bGVuICA9IGJ1Zi5sZW47CisJbXNnLT5kYXRhID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwlyZXR1cm4gbXNnLT5sZW47Cit9CisKK3N0YXRpYyBpbnQgY291bnRfbWVzc2FnZXMoc3RydWN0IG1zZ19kYXRhICptc2cpCit7CisJaW50IGNvdW50ID0gMDsKKwljaGFyICpwID0gbXNnLT5kYXRhOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKCFwcmVmaXhjbXAocCwgIkZyb20gIikpIHsKKwkJCXAgPSBzdHJzdHIocCs1LCAiXG5Gcm9tOiAiKTsKKwkJCWlmICghcCkgYnJlYWs7CisJCQlwID0gc3Ryc3RyKHArNywgIlxuRGF0ZTogIik7CisJCQlpZiAoIXApIGJyZWFrOworCQkJcCA9IHN0cnN0cihwKzcsICJcblN1YmplY3Q6ICIpOworCQkJaWYgKCFwKSBicmVhazsKKwkJCXAgKz0gMTA7CisJCQljb3VudCsrOworCQl9CisJCXAgPSBzdHJzdHIocCs1LCAiXG5Gcm9tICIpOworCQlpZiAoIXApCisJCQlicmVhazsKKwkJcCsrOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfbXNnKHN0cnVjdCBtc2dfZGF0YSAqYWxsX21zZ3MsIHN0cnVjdCBtc2dfZGF0YSAqbXNnLCBpbnQgKm9mcykKK3sKKwljaGFyICpwLCAqZGF0YTsKKworCW1lbXNldChtc2csIDAsIHNpemVvZiAqbXNnKTsKKwlpZiAoKm9mcyA+PSBhbGxfbXNncy0+bGVuKQorCQlyZXR1cm4gMDsKKworCWRhdGEgPSAmYWxsX21zZ3MtPmRhdGFbKm9mc107CisJbXNnLT5sZW4gPSBhbGxfbXNncy0+bGVuIC0gKm9mczsKKworCWlmIChtc2ctPmxlbiA8IDUgfHwgcHJlZml4Y21wKGRhdGEsICJGcm9tICIpKQorCQlyZXR1cm4gMDsKKworCXAgPSBzdHJjaHIoZGF0YSwgJ1xuJyk7CisJaWYgKHApIHsKKwkJcCA9ICZwWzFdOworCQltc2ctPmxlbiAtPSBwLWRhdGE7CisJCSpvZnMgKz0gcC1kYXRhOworCQlkYXRhID0gcDsKKwl9CisKKwlwID0gc3Ryc3RyKGRhdGEsICJcbkZyb20gIik7CisJaWYgKHApCisJCW1zZy0+bGVuID0gJnBbMV0gLSBkYXRhOworCisJbXNnLT5kYXRhID0geG1lbWR1cHooZGF0YSwgbXNnLT5sZW4pOworCSpvZnMgKz0gbXNnLT5sZW47CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjaGFyICppbWFwX2ZvbGRlcjsKKworc3RhdGljIGludCBnaXRfaW1hcF9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWwsIHZvaWQgKmNiKQoreworCWNoYXIgaW1hcF9rZXlbXSA9ICJpbWFwLiI7CisKKwlpZiAoc3RybmNtcChrZXksIGltYXBfa2V5LCBzaXplb2YgaW1hcF9rZXkgLSAxKSkKKwkJcmV0dXJuIDA7CisKKwlrZXkgKz0gc2l6ZW9mIGltYXBfa2V5IC0gMTsKKworCS8qIGNoZWNrIGJvb2xlYW5zIGZpcnN0LCBhbmQgYmFyZiBvbiBvdGhlcnMgKi8KKwlpZiAoIXN0cmNtcCgic3NsdmVyaWZ5Iiwga2V5KSkKKwkJc2VydmVyLnNzbF92ZXJpZnkgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWwpOworCWVsc2UgaWYgKCFzdHJjbXAoInByZWZvcm1hdHRlZGh0bWwiLCBrZXkpKQorCQlzZXJ2ZXIudXNlX2h0bWwgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWwpOworCWVsc2UgaWYgKCF2YWwpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCisJaWYgKCFzdHJjbXAoImZvbGRlciIsIGtleSkpIHsKKwkJaW1hcF9mb2xkZXIgPSB4c3RyZHVwKHZhbCk7CisJfSBlbHNlIGlmICghc3RyY21wKCJob3N0Iiwga2V5KSkgeworCQlpZiAoIXByZWZpeGNtcCh2YWwsICJpbWFwOiIpKQorCQkJdmFsICs9IDU7CisJCWVsc2UgaWYgKCFwcmVmaXhjbXAodmFsLCAiaW1hcHM6IikpIHsKKwkJCXZhbCArPSA2OworCQkJc2VydmVyLnVzZV9zc2wgPSAxOworCQl9CisJCWlmICghcHJlZml4Y21wKHZhbCwgIi8vIikpCisJCQl2YWwgKz0gMjsKKwkJc2VydmVyLmhvc3QgPSB4c3RyZHVwKHZhbCk7CisJfSBlbHNlIGlmICghc3RyY21wKCJ1c2VyIiwga2V5KSkKKwkJc2VydmVyLnVzZXIgPSB4c3RyZHVwKHZhbCk7CisJZWxzZSBpZiAoIXN0cmNtcCgicGFzcyIsIGtleSkpCisJCXNlcnZlci5wYXNzID0geHN0cmR1cCh2YWwpOworCWVsc2UgaWYgKCFzdHJjbXAoInBvcnQiLCBrZXkpKQorCQlzZXJ2ZXIucG9ydCA9IGdpdF9jb25maWdfaW50KGtleSwgdmFsKTsKKwllbHNlIGlmICghc3RyY21wKCJ0dW5uZWwiLCBrZXkpKQorCQlzZXJ2ZXIudHVubmVsID0geHN0cmR1cCh2YWwpOworCWVsc2UgaWYgKCFzdHJjbXAoImF1dGhtZXRob2QiLCBrZXkpKQorCQlzZXJ2ZXIuYXV0aF9tZXRob2QgPSB4c3RyZHVwKHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBtc2dfZGF0YSBhbGxfbXNncywgbXNnOworCXN0cnVjdCBzdG9yZSAqY3R4ID0gTlVMTDsKKwlpbnQgb2ZzID0gMDsKKwlpbnQgcjsKKwlpbnQgdG90YWwsIG4gPSAwOworCWludCBub25naXRfb2s7CisKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCWlmIChhcmdjICE9IDEpCisJCXVzYWdlKGltYXBfc2VuZF91c2FnZSk7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0X29rKTsKKwlnaXRfY29uZmlnKGdpdF9pbWFwX2NvbmZpZywgTlVMTCk7CisKKwlpZiAoIXNlcnZlci5wb3J0KQorCQlzZXJ2ZXIucG9ydCA9IHNlcnZlci51c2Vfc3NsID8gOTkzIDogMTQzOworCisJaWYgKCFpbWFwX2ZvbGRlcikgeworCQlmcHJpbnRmKHN0ZGVyciwgIm5vIGltYXAgc3RvcmUgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghc2VydmVyLmhvc3QpIHsKKwkJaWYgKCFzZXJ2ZXIudHVubmVsKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIm5vIGltYXAgaG9zdCBzcGVjaWZpZWRcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJc2VydmVyLmhvc3QgPSAidHVubmVsIjsKKwl9CisKKwkvKiByZWFkIHRoZSBtZXNzYWdlcyAqLworCWlmICghcmVhZF9tZXNzYWdlKHN0ZGluLCAmYWxsX21zZ3MpKSB7CisJCWZwcmludGYoc3RkZXJyLCAibm90aGluZyB0byBzZW5kXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJdG90YWwgPSBjb3VudF9tZXNzYWdlcygmYWxsX21zZ3MpOworCWlmICghdG90YWwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJubyBtZXNzYWdlcyB0byBzZW5kXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogd3JpdGUgaXQgdG8gdGhlIGltYXAgc2VydmVyICovCisJY3R4ID0gaW1hcF9vcGVuX3N0b3JlKCZzZXJ2ZXIpOworCWlmICghY3R4KSB7CisJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIG9wZW4gc3RvcmVcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgInNlbmRpbmcgJWQgbWVzc2FnZSVzXG4iLCB0b3RhbCwgKHRvdGFsICE9IDEpID8gInMiIDogIiIpOworCWN0eC0+bmFtZSA9IGltYXBfZm9sZGVyOworCXdoaWxlICgxKSB7CisJCXVuc2lnbmVkIHBlcmNlbnQgPSBuICogMTAwIC8gdG90YWw7CisJCWZwcmludGYoc3RkZXJyLCAiJTR1JSUgKCVkLyVkKSBkb25lXHIiLCBwZXJjZW50LCBuLCB0b3RhbCk7CisJCWlmICghc3BsaXRfbXNnKCZhbGxfbXNncywgJm1zZywgJm9mcykpCisJCQlicmVhazsKKwkJaWYgKHNlcnZlci51c2VfaHRtbCkKKwkJCXdyYXBfaW5faHRtbCgmbXNnKTsKKwkJciA9IGltYXBfc3RvcmVfbXNnKGN0eCwgJm1zZyk7CisJCWlmIChyICE9IERSVl9PSykKKwkJCWJyZWFrOworCQluKys7CisJfQorCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworCWltYXBfY2xvc2Vfc3RvcmUoY3R4KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEva3dzZXQuYyBiL2t3c2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFiMmFiNgotLS0gL2Rldi9udWxsCisrKyBiL2t3c2V0LmMKQEAgLTAsMCArMSw3NzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gY29waWVkIGZyb20gY29tbWl0IGU3YWM3MTNkXiBpbiB0aGUgR05VIGdyZXAgZ2l0CisgKiByZXBvc2l0b3J5LiBBIGZldyBzbWFsbCBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIGFkYXB0IHRoZSBjb2RlIHRvCisgKiBHaXQuCisgKi8KKworLyoga3dzZXQuYyAtIHNlYXJjaCBmb3IgYW55IG9mIGEgc2V0IG9mIGtleXdvcmRzLgorICAgQ29weXJpZ2h0IDE5ODksIDE5OTgsIDIwMDAsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAgIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFdyaXR0ZW4gQXVndXN0IDE5ODkgYnkgTWlrZSBIYWVydGVsLgorICAgVGhlIGF1dGhvciBtYXkgYmUgcmVhY2hlZCAoRW1haWwpIGF0IHRoZSBhZGRyZXNzIG1pa2VAYWkubWl0LmVkdSwKKyAgIG9yIChVUyBtYWlsKSBhcyBNaWtlIEhhZXJ0ZWwgYy9vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gKi8KKworLyogVGhlIGFsZ29yaXRobSBpbXBsZW1lbnRlZCBieSB0aGVzZSByb3V0aW5lcyBiZWFycyBhIHN0YXJ0bGluZyByZXNlbWJsZW5jZQorICAgdG8gb25lIGRpc2NvdmVyZWQgYnkgQmVhdGUgQ29tbWVudHotV2FsdGVyLCBhbHRob3VnaCBpdCBpcyBub3QgaWRlbnRpY2FsLgorICAgU2VlICJBIFN0cmluZyBNYXRjaGluZyBBbGdvcml0aG0gRmFzdCBvbiB0aGUgQXZlcmFnZSwiIFRlY2huaWNhbCBSZXBvcnQsCisgICBJQk0tR2VybWFueSwgU2NpZW50aWZpYyBDZW50ZXIgSGVpZGVsYmVyZywgVGllcmdhcnRlbnN0cmFzc2UgMTUsIEQtNjkwMAorICAgSGVpZGVsYmVyZywgR2VybWFueS4gIFNlZSBhbHNvIEFobywgQS5WLiwgYW5kIE0uIENvcmFzaWNrLCAiRWZmaWNpZW50CisgICBTdHJpbmcgTWF0Y2hpbmc6ICBBbiBBaWQgdG8gQmlibGlvZ3JhcGhpYyBTZWFyY2gsIiBDQUNNIEp1bmUgMTk3NSwKKyAgIFZvbC4gMTgsIE5vLiA2LCB3aGljaCBkZXNjcmliZXMgdGhlIGZhaWx1cmUgZnVuY3Rpb24gdXNlZCBiZWxvdy4gKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpbmNsdWRlICJrd3NldC5oIgorI2luY2x1ZGUgImNvbXBhdC9vYnN0YWNrLmgiCisKKyNkZWZpbmUgTkNIQVIgKFVDSEFSX01BWCArIDEpCisjZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MgeG1hbGxvYworI2RlZmluZSBvYnN0YWNrX2NodW5rX2ZyZWUgZnJlZQorCisjZGVmaW5lIFUoYykgKCh1bnNpZ25lZCBjaGFyKSAoYykpCisKKy8qIEJhbGFuY2VkIHRyZWUgb2YgZWRnZXMgYW5kIGxhYmVscyBsZWF2aW5nIGEgZ2l2ZW4gdHJpZSBub2RlLiAqLworc3RydWN0IHRyZWUKK3sKKyAgc3RydWN0IHRyZWUgKmxsaW5rOwkJLyogTGVmdCBsaW5rOyBNVVNUIGJlIGZpcnN0IGZpZWxkLiAqLworICBzdHJ1Y3QgdHJlZSAqcmxpbms7CQkvKiBSaWdodCBsaW5rICh0byBsYXJnZXIgbGFiZWxzKS4gKi8KKyAgc3RydWN0IHRyaWUgKnRyaWU7CQkvKiBUcmllIG5vZGUgcG9pbnRlZCB0byBieSB0aGlzIGVkZ2UuICovCisgIHVuc2lnbmVkIGNoYXIgbGFiZWw7CQkvKiBMYWJlbCBvbiB0aGlzIGVkZ2UuICovCisgIGNoYXIgYmFsYW5jZTsJCQkvKiBEaWZmZXJlbmNlIGluIGRlcHRocyBvZiBzdWJ0cmVlcy4gKi8KK307CisKKy8qIE5vZGUgb2YgYSB0cmllIHJlcHJlc2VudGluZyBhIHNldCBvZiByZXZlcnNlZCBrZXl3b3Jkcy4gKi8KK3N0cnVjdCB0cmllCit7CisgIHVuc2lnbmVkIGludCBhY2NlcHRpbmc7CS8qIFdvcmQgaW5kZXggb2YgYWNjZXB0ZWQgd29yZCwgb3IgemVyby4gKi8KKyAgc3RydWN0IHRyZWUgKmxpbmtzOwkJLyogVHJlZSBvZiBlZGdlcyBsZWF2aW5nIHRoaXMgbm9kZS4gKi8KKyAgc3RydWN0IHRyaWUgKnBhcmVudDsJCS8qIFBhcmVudCBvZiB0aGlzIG5vZGUuICovCisgIHN0cnVjdCB0cmllICpuZXh0OwkJLyogTGlzdCBvZiBhbGwgdHJpZSBub2RlcyBpbiBsZXZlbCBvcmRlci4gKi8KKyAgc3RydWN0IHRyaWUgKmZhaWw7CQkvKiBBaG8tQ29yYXNpY2sgZmFpbHVyZSBmdW5jdGlvbi4gKi8KKyAgaW50IGRlcHRoOwkJCS8qIERlcHRoIG9mIHRoaXMgbm9kZSBmcm9tIHRoZSByb290LiAqLworICBpbnQgc2hpZnQ7CQkJLyogU2hpZnQgZnVuY3Rpb24gZm9yIHNlYXJjaCBmYWlsdXJlcy4gKi8KKyAgaW50IG1heHNoaWZ0OwkJCS8qIE1heCBzaGlmdCBvZiBzZWxmIGFuZCBkZXNjZW5kZW50cy4gKi8KK307CisKKy8qIFN0cnVjdHVyZSByZXR1cm5lZCBvcGFxdWVseSB0byB0aGUgY2FsbGVyLCBjb250YWluaW5nIGV2ZXJ5dGhpbmcuICovCitzdHJ1Y3Qga3dzZXQKK3sKKyAgc3RydWN0IG9ic3RhY2sgb2JzdGFjazsJLyogT2JzdGFjayBmb3Igbm9kZSBhbGxvY2F0aW9uLiAqLworICBpbnQgd29yZHM7CQkJLyogTnVtYmVyIG9mIHdvcmRzIGluIHRoZSB0cmllLiAqLworICBzdHJ1Y3QgdHJpZSAqdHJpZTsJCS8qIFRoZSB0cmllIGl0c2VsZi4gKi8KKyAgaW50IG1pbmQ7CQkJLyogTWluaW11bSBkZXB0aCBvZiBhbiBhY2NlcHRpbmcgbm9kZS4gKi8KKyAgaW50IG1heGQ7CQkJLyogTWF4aW11bSBkZXB0aCBvZiBhbnkgbm9kZS4gKi8KKyAgdW5zaWduZWQgY2hhciBkZWx0YVtOQ0hBUl07CS8qIERlbHRhIHRhYmxlIGZvciByYXBpZCBzZWFyY2guICovCisgIHN0cnVjdCB0cmllICpuZXh0W05DSEFSXTsJLyogVGFibGUgb2YgY2hpbGRyZW4gb2YgdGhlIHJvb3QuICovCisgIGNoYXIgKnRhcmdldDsJCQkvKiBUYXJnZXQgc3RyaW5nIGlmIHRoZXJlJ3Mgb25seSBvbmUuICovCisgIGludCBtaW5kMjsJCQkvKiBVc2VkIGluIEJveWVyLU1vb3JlIHNlYXJjaCBmb3Igb25lIHN0cmluZy4gKi8KKyAgY2hhciBjb25zdCAqdHJhbnM7CQkvKiBDaGFyYWN0ZXIgdHJhbnNsYXRpb24gdGFibGUuICovCit9OworCisvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGtleXdvcmQgc2V0IG9iamVjdCwgcmV0dXJuaW5nIGFuIG9wYXF1ZQorICAgcG9pbnRlciB0byBpdC4gIFJldHVybiBOVUxMIGlmIG1lbW9yeSBpcyBub3QgYXZhaWxhYmxlLiAqLwora3dzZXRfdAora3dzYWxsb2MgKGNoYXIgY29uc3QgKnRyYW5zKQoreworICBzdHJ1Y3Qga3dzZXQgKmt3c2V0OworCisgIGt3c2V0ID0gKHN0cnVjdCBrd3NldCAqKSB4bWFsbG9jKHNpemVvZiAoc3RydWN0IGt3c2V0KSk7CisKKyAgb2JzdGFja19pbml0KCZrd3NldC0+b2JzdGFjayk7CisgIGt3c2V0LT53b3JkcyA9IDA7CisgIGt3c2V0LT50cmllCisgICAgPSAoc3RydWN0IHRyaWUgKikgb2JzdGFja19hbGxvYygma3dzZXQtPm9ic3RhY2ssIHNpemVvZiAoc3RydWN0IHRyaWUpKTsKKyAgaWYgKCFrd3NldC0+dHJpZSkKKyAgICB7CisgICAgICBrd3NmcmVlKChrd3NldF90KSBrd3NldCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGt3c2V0LT50cmllLT5hY2NlcHRpbmcgPSAwOworICBrd3NldC0+dHJpZS0+bGlua3MgPSBOVUxMOworICBrd3NldC0+dHJpZS0+cGFyZW50ID0gTlVMTDsKKyAga3dzZXQtPnRyaWUtPm5leHQgPSBOVUxMOworICBrd3NldC0+dHJpZS0+ZmFpbCA9IE5VTEw7CisgIGt3c2V0LT50cmllLT5kZXB0aCA9IDA7CisgIGt3c2V0LT50cmllLT5zaGlmdCA9IDA7CisgIGt3c2V0LT5taW5kID0gSU5UX01BWDsKKyAga3dzZXQtPm1heGQgPSAtMTsKKyAga3dzZXQtPnRhcmdldCA9IE5VTEw7CisgIGt3c2V0LT50cmFucyA9IHRyYW5zOworCisgIHJldHVybiAoa3dzZXRfdCkga3dzZXQ7Cit9CisKKy8qIFRoaXMgdXBwZXIgYm91bmQgaXMgdmFsaWQgZm9yIENIQVJfQklUID49IDQgYW5kCisgICBleGFjdCBmb3IgQ0hBUl9CSVQgaW4geyA0Li4xMSwgMTMsIDE1LCAxNywgMTkgfS4gKi8KKyNkZWZpbmUgREVQVEhfU0laRSAoQ0hBUl9CSVQgKyBDSEFSX0JJVC8yKQorCisvKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgY29udGVudHMgb2YgdGhlIGtleXdvcmQgc2V0LiAgUmV0dXJuIE5VTEwKKyAgIGZvciBzdWNjZXNzLCBhbiBlcnJvciBtZXNzYWdlIG90aGVyd2lzZS4gKi8KK2NvbnN0IGNoYXIgKgora3dzaW5jciAoa3dzZXRfdCBrd3MsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4pCit7CisgIHN0cnVjdCBrd3NldCAqa3dzZXQ7CisgIHJlZ2lzdGVyIHN0cnVjdCB0cmllICp0cmllOworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGxhYmVsOworICByZWdpc3RlciBzdHJ1Y3QgdHJlZSAqbGluazsKKyAgcmVnaXN0ZXIgaW50IGRlcHRoOworICBzdHJ1Y3QgdHJlZSAqbGlua3NbREVQVEhfU0laRV07CisgIGVudW0geyBMLCBSIH0gZGlyc1tERVBUSF9TSVpFXTsKKyAgc3RydWN0IHRyZWUgKnQsICpyLCAqbCwgKnJsLCAqbHI7CisKKyAga3dzZXQgPSAoc3RydWN0IGt3c2V0ICopIGt3czsKKyAgdHJpZSA9IGt3c2V0LT50cmllOworICB0ZXh0ICs9IGxlbjsKKworICAvKiBEZXNjZW5kIHRoZSB0cmllIChidWlsdCBvZiByZXZlcnNlZCBrZXl3b3JkcykgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciwKKyAgICAgaW5zdGFsbGluZyBuZXcgbm9kZXMgd2hlbiBuZWNlc3NhcnkuICovCisgIHdoaWxlIChsZW4tLSkKKyAgICB7CisgICAgICBsYWJlbCA9IGt3c2V0LT50cmFucyA/IGt3c2V0LT50cmFuc1tVKCotLXRleHQpXSA6ICotLXRleHQ7CisKKyAgICAgIC8qIERlc2NlbmQgdGhlIHRyZWUgb2Ygb3V0Z29pbmcgbGlua3MgZm9yIHRoaXMgdHJpZSBub2RlLAorCSBsb29raW5nIGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYW5kIGtlZXBpbmcgdHJhY2sKKwkgb2YgdGhlIHBhdGggZm9sbG93ZWQuICovCisgICAgICBsaW5rID0gdHJpZS0+bGlua3M7CisgICAgICBsaW5rc1swXSA9IChzdHJ1Y3QgdHJlZSAqKSAmdHJpZS0+bGlua3M7CisgICAgICBkaXJzWzBdID0gTDsKKyAgICAgIGRlcHRoID0gMTsKKworICAgICAgd2hpbGUgKGxpbmsgJiYgbGFiZWwgIT0gbGluay0+bGFiZWwpCisJeworCSAgbGlua3NbZGVwdGhdID0gbGluazsKKwkgIGlmIChsYWJlbCA8IGxpbmstPmxhYmVsKQorCSAgICBkaXJzW2RlcHRoKytdID0gTCwgbGluayA9IGxpbmstPmxsaW5rOworCSAgZWxzZQorCSAgICBkaXJzW2RlcHRoKytdID0gUiwgbGluayA9IGxpbmstPnJsaW5rOworCX0KKworICAgICAgLyogVGhlIGN1cnJlbnQgY2hhcmFjdGVyIGRvZXNuJ3QgaGF2ZSBhbiBvdXRnb2luZyBsaW5rIGF0CisJIHRoaXMgdHJpZSBub2RlLCBzbyBidWlsZCBhIG5ldyB0cmllIG5vZGUgYW5kIGluc3RhbGwKKwkgYSBsaW5rIGluIHRoZSBjdXJyZW50IHRyaWUgbm9kZSdzIHRyZWUuICovCisgICAgICBpZiAoIWxpbmspCisJeworCSAgbGluayA9IChzdHJ1Y3QgdHJlZSAqKSBvYnN0YWNrX2FsbG9jKCZrd3NldC0+b2JzdGFjaywKKwkJCQkJICAgICAgIHNpemVvZiAoc3RydWN0IHRyZWUpKTsKKwkgIGlmICghbGluaykKKwkgICAgcmV0dXJuICJtZW1vcnkgZXhoYXVzdGVkIjsKKwkgIGxpbmstPmxsaW5rID0gTlVMTDsKKwkgIGxpbmstPnJsaW5rID0gTlVMTDsKKwkgIGxpbmstPnRyaWUgPSAoc3RydWN0IHRyaWUgKikgb2JzdGFja19hbGxvYygma3dzZXQtPm9ic3RhY2ssCisJCQkJCQkgICAgIHNpemVvZiAoc3RydWN0IHRyaWUpKTsKKwkgIGlmICghbGluay0+dHJpZSkKKwkgICAgeworCSAgICAgIG9ic3RhY2tfZnJlZSgma3dzZXQtPm9ic3RhY2ssIGxpbmspOworCSAgICAgIHJldHVybiAibWVtb3J5IGV4aGF1c3RlZCI7CisJICAgIH0KKwkgIGxpbmstPnRyaWUtPmFjY2VwdGluZyA9IDA7CisJICBsaW5rLT50cmllLT5saW5rcyA9IE5VTEw7CisJICBsaW5rLT50cmllLT5wYXJlbnQgPSB0cmllOworCSAgbGluay0+dHJpZS0+bmV4dCA9IE5VTEw7CisJICBsaW5rLT50cmllLT5mYWlsID0gTlVMTDsKKwkgIGxpbmstPnRyaWUtPmRlcHRoID0gdHJpZS0+ZGVwdGggKyAxOworCSAgbGluay0+dHJpZS0+c2hpZnQgPSAwOworCSAgbGluay0+bGFiZWwgPSBsYWJlbDsKKwkgIGxpbmstPmJhbGFuY2UgPSAwOworCisJICAvKiBJbnN0YWxsIHRoZSBuZXcgdHJlZSBub2RlIGluIGl0cyBwYXJlbnQuICovCisJICBpZiAoZGlyc1stLWRlcHRoXSA9PSBMKQorCSAgICBsaW5rc1tkZXB0aF0tPmxsaW5rID0gbGluazsKKwkgIGVsc2UKKwkgICAgbGlua3NbZGVwdGhdLT5ybGluayA9IGxpbms7CisKKwkgIC8qIEJhY2sgdXAgdGhlIHRyZWUgZml4aW5nIHRoZSBiYWxhbmNlIGZsYWdzLiAqLworCSAgd2hpbGUgKGRlcHRoICYmICFsaW5rc1tkZXB0aF0tPmJhbGFuY2UpCisJICAgIHsKKwkgICAgICBpZiAoZGlyc1tkZXB0aF0gPT0gTCkKKwkJLS1saW5rc1tkZXB0aF0tPmJhbGFuY2U7CisJICAgICAgZWxzZQorCQkrK2xpbmtzW2RlcHRoXS0+YmFsYW5jZTsKKwkgICAgICAtLWRlcHRoOworCSAgICB9CisKKwkgIC8qIFJlYmFsYW5jZSB0aGUgdHJlZSBieSBwb2ludGVyIHJvdGF0aW9ucyBpZiBuZWNlc3NhcnkuICovCisJICBpZiAoZGVwdGggJiYgKChkaXJzW2RlcHRoXSA9PSBMICYmIC0tbGlua3NbZGVwdGhdLT5iYWxhbmNlKQorCQkJfHwgKGRpcnNbZGVwdGhdID09IFIgJiYgKytsaW5rc1tkZXB0aF0tPmJhbGFuY2UpKSkKKwkgICAgeworCSAgICAgIHN3aXRjaCAobGlua3NbZGVwdGhdLT5iYWxhbmNlKQorCQl7CisJCWNhc2UgKGNoYXIpIC0yOgorCQkgIHN3aXRjaCAoZGlyc1tkZXB0aCArIDFdKQorCQkgICAgeworCQkgICAgY2FzZSBMOgorCQkgICAgICByID0gbGlua3NbZGVwdGhdLCB0ID0gci0+bGxpbmssIHJsID0gdC0+cmxpbms7CisJCSAgICAgIHQtPnJsaW5rID0gciwgci0+bGxpbmsgPSBybDsKKwkJICAgICAgdC0+YmFsYW5jZSA9IHItPmJhbGFuY2UgPSAwOworCQkgICAgICBicmVhazsKKwkJICAgIGNhc2UgUjoKKwkJICAgICAgciA9IGxpbmtzW2RlcHRoXSwgbCA9IHItPmxsaW5rLCB0ID0gbC0+cmxpbms7CisJCSAgICAgIHJsID0gdC0+cmxpbmssIGxyID0gdC0+bGxpbms7CisJCSAgICAgIHQtPmxsaW5rID0gbCwgbC0+cmxpbmsgPSBsciwgdC0+cmxpbmsgPSByLCByLT5sbGluayA9IHJsOworCQkgICAgICBsLT5iYWxhbmNlID0gdC0+YmFsYW5jZSAhPSAxID8gMCA6IC0xOworCQkgICAgICByLT5iYWxhbmNlID0gdC0+YmFsYW5jZSAhPSAoY2hhcikgLTEgPyAwIDogMTsKKwkJICAgICAgdC0+YmFsYW5jZSA9IDA7CisJCSAgICAgIGJyZWFrOworCQkgICAgZGVmYXVsdDoKKwkJICAgICAgYWJvcnQgKCk7CisJCSAgICB9CisJCSAgYnJlYWs7CisJCWNhc2UgMjoKKwkJICBzd2l0Y2ggKGRpcnNbZGVwdGggKyAxXSkKKwkJICAgIHsKKwkJICAgIGNhc2UgUjoKKwkJICAgICAgbCA9IGxpbmtzW2RlcHRoXSwgdCA9IGwtPnJsaW5rLCBsciA9IHQtPmxsaW5rOworCQkgICAgICB0LT5sbGluayA9IGwsIGwtPnJsaW5rID0gbHI7CisJCSAgICAgIHQtPmJhbGFuY2UgPSBsLT5iYWxhbmNlID0gMDsKKwkJICAgICAgYnJlYWs7CisJCSAgICBjYXNlIEw6CisJCSAgICAgIGwgPSBsaW5rc1tkZXB0aF0sIHIgPSBsLT5ybGluaywgdCA9IHItPmxsaW5rOworCQkgICAgICBsciA9IHQtPmxsaW5rLCBybCA9IHQtPnJsaW5rOworCQkgICAgICB0LT5sbGluayA9IGwsIGwtPnJsaW5rID0gbHIsIHQtPnJsaW5rID0gciwgci0+bGxpbmsgPSBybDsKKwkJICAgICAgbC0+YmFsYW5jZSA9IHQtPmJhbGFuY2UgIT0gMSA/IDAgOiAtMTsKKwkJICAgICAgci0+YmFsYW5jZSA9IHQtPmJhbGFuY2UgIT0gKGNoYXIpIC0xID8gMCA6IDE7CisJCSAgICAgIHQtPmJhbGFuY2UgPSAwOworCQkgICAgICBicmVhazsKKwkJICAgIGRlZmF1bHQ6CisJCSAgICAgIGFib3J0ICgpOworCQkgICAgfQorCQkgIGJyZWFrOworCQlkZWZhdWx0OgorCQkgIGFib3J0ICgpOworCQl9CisKKwkgICAgICBpZiAoZGlyc1tkZXB0aCAtIDFdID09IEwpCisJCWxpbmtzW2RlcHRoIC0gMV0tPmxsaW5rID0gdDsKKwkgICAgICBlbHNlCisJCWxpbmtzW2RlcHRoIC0gMV0tPnJsaW5rID0gdDsKKwkgICAgfQorCX0KKworICAgICAgdHJpZSA9IGxpbmstPnRyaWU7CisgICAgfQorCisgIC8qIE1hcmsgdGhlIG5vZGUgd2UgZmluYWxseSByZWFjaGVkIGFzIGFjY2VwdGluZywgZW5jb2RpbmcgdGhlCisgICAgIGluZGV4IG51bWJlciBvZiB0aGlzIHdvcmQgaW4gdGhlIGtleXdvcmQgc2V0IHNvIGZhci4gKi8KKyAgaWYgKCF0cmllLT5hY2NlcHRpbmcpCisgICAgdHJpZS0+YWNjZXB0aW5nID0gMSArIDIgKiBrd3NldC0+d29yZHM7CisgICsra3dzZXQtPndvcmRzOworCisgIC8qIEtlZXAgdHJhY2sgb2YgdGhlIGxvbmdlc3QgYW5kIHNob3J0ZXN0IHN0cmluZyBvZiB0aGUga2V5d29yZCBzZXQuICovCisgIGlmICh0cmllLT5kZXB0aCA8IGt3c2V0LT5taW5kKQorICAgIGt3c2V0LT5taW5kID0gdHJpZS0+ZGVwdGg7CisgIGlmICh0cmllLT5kZXB0aCA+IGt3c2V0LT5tYXhkKQorICAgIGt3c2V0LT5tYXhkID0gdHJpZS0+ZGVwdGg7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEVucXVldWUgdGhlIHRyaWUgbm9kZXMgcmVmZXJlbmNlZCBmcm9tIHRoZSBnaXZlbiB0cmVlIGluIHRoZQorICAgZ2l2ZW4gcXVldWUuICovCitzdGF0aWMgdm9pZAorZW5xdWV1ZSAoc3RydWN0IHRyZWUgKnRyZWUsIHN0cnVjdCB0cmllICoqbGFzdCkKK3sKKyAgaWYgKCF0cmVlKQorICAgIHJldHVybjsKKyAgZW5xdWV1ZSh0cmVlLT5sbGluaywgbGFzdCk7CisgIGVucXVldWUodHJlZS0+cmxpbmssIGxhc3QpOworICAoKmxhc3QpID0gKCpsYXN0KS0+bmV4dCA9IHRyZWUtPnRyaWU7Cit9CisKKy8qIENvbXB1dGUgdGhlIEFoby1Db3Jhc2ljayBmYWlsdXJlIGZ1bmN0aW9uIGZvciB0aGUgdHJpZSBub2RlcyByZWZlcmVuY2VkCisgICBmcm9tIHRoZSBnaXZlbiB0cmVlLCBnaXZlbiB0aGUgZmFpbHVyZSBmdW5jdGlvbiBmb3IgdGhlaXIgcGFyZW50IGFzCisgICB3ZWxsIGFzIGEgbGFzdCByZXNvcnQgZmFpbHVyZSBub2RlLiAqLworc3RhdGljIHZvaWQKK3RyZWVmYWlscyAocmVnaXN0ZXIgc3RydWN0IHRyZWUgY29uc3QgKnRyZWUsIHN0cnVjdCB0cmllIGNvbnN0ICpmYWlsLAorCSAgIHN0cnVjdCB0cmllICpyZWNvdXJzZSkKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IHRyZWUgKmxpbms7CisKKyAgaWYgKCF0cmVlKQorICAgIHJldHVybjsKKworICB0cmVlZmFpbHModHJlZS0+bGxpbmssIGZhaWwsIHJlY291cnNlKTsKKyAgdHJlZWZhaWxzKHRyZWUtPnJsaW5rLCBmYWlsLCByZWNvdXJzZSk7CisKKyAgLyogRmluZCwgaW4gdGhlIGNoYWluIG9mIGZhaWxzIGdvaW5nIGJhY2sgdG8gdGhlIHJvb3QsIHRoZSBmaXJzdAorICAgICBub2RlIHRoYXQgaGFzIGEgZGVzY2VuZGVudCBvbiB0aGUgY3VycmVudCBsYWJlbC4gKi8KKyAgd2hpbGUgKGZhaWwpCisgICAgeworICAgICAgbGluayA9IGZhaWwtPmxpbmtzOworICAgICAgd2hpbGUgKGxpbmsgJiYgdHJlZS0+bGFiZWwgIT0gbGluay0+bGFiZWwpCisJaWYgKHRyZWUtPmxhYmVsIDwgbGluay0+bGFiZWwpCisJICBsaW5rID0gbGluay0+bGxpbms7CisJZWxzZQorCSAgbGluayA9IGxpbmstPnJsaW5rOworICAgICAgaWYgKGxpbmspCisJeworCSAgdHJlZS0+dHJpZS0+ZmFpbCA9IGxpbmstPnRyaWU7CisJICByZXR1cm47CisJfQorICAgICAgZmFpbCA9IGZhaWwtPmZhaWw7CisgICAgfQorCisgIHRyZWUtPnRyaWUtPmZhaWwgPSByZWNvdXJzZTsKK30KKworLyogU2V0IGRlbHRhIGVudHJpZXMgZm9yIHRoZSBsaW5rcyBvZiB0aGUgZ2l2ZW4gdHJlZSBzdWNoIHRoYXQKKyAgIHRoZSBwcmVleGlzdGluZyBkZWx0YSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBkZXB0aC4gKi8KK3N0YXRpYyB2b2lkCit0cmVlZGVsdGEgKHJlZ2lzdGVyIHN0cnVjdCB0cmVlIGNvbnN0ICp0cmVlLAorCSAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBkZXB0aCwKKwkgICB1bnNpZ25lZCBjaGFyIGRlbHRhW10pCit7CisgIGlmICghdHJlZSkKKyAgICByZXR1cm47CisgIHRyZWVkZWx0YSh0cmVlLT5sbGluaywgZGVwdGgsIGRlbHRhKTsKKyAgdHJlZWRlbHRhKHRyZWUtPnJsaW5rLCBkZXB0aCwgZGVsdGEpOworICBpZiAoZGVwdGggPCBkZWx0YVt0cmVlLT5sYWJlbF0pCisgICAgZGVsdGFbdHJlZS0+bGFiZWxdID0gZGVwdGg7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIEEgaGFzIGV2ZXJ5IGxhYmVsIGluIEIuICovCitzdGF0aWMgaW50CitoYXNldmVyeSAocmVnaXN0ZXIgc3RydWN0IHRyZWUgY29uc3QgKmEsIHJlZ2lzdGVyIHN0cnVjdCB0cmVlIGNvbnN0ICpiKQoreworICBpZiAoIWIpCisgICAgcmV0dXJuIDE7CisgIGlmICghaGFzZXZlcnkoYSwgYi0+bGxpbmspKQorICAgIHJldHVybiAwOworICBpZiAoIWhhc2V2ZXJ5KGEsIGItPnJsaW5rKSkKKyAgICByZXR1cm4gMDsKKyAgd2hpbGUgKGEgJiYgYi0+bGFiZWwgIT0gYS0+bGFiZWwpCisgICAgaWYgKGItPmxhYmVsIDwgYS0+bGFiZWwpCisgICAgICBhID0gYS0+bGxpbms7CisgICAgZWxzZQorICAgICAgYSA9IGEtPnJsaW5rOworICByZXR1cm4gISFhOworfQorCisvKiBDb21wdXRlIGEgdmVjdG9yLCBpbmRleGVkIGJ5IGNoYXJhY3RlciBjb2RlLCBvZiB0aGUgdHJpZSBub2RlcworICAgcmVmZXJlbmNlZCBmcm9tIHRoZSBnaXZlbiB0cmVlLiAqLworc3RhdGljIHZvaWQKK3RyZWVuZXh0IChzdHJ1Y3QgdHJlZSBjb25zdCAqdHJlZSwgc3RydWN0IHRyaWUgKm5leHRbXSkKK3sKKyAgaWYgKCF0cmVlKQorICAgIHJldHVybjsKKyAgdHJlZW5leHQodHJlZS0+bGxpbmssIG5leHQpOworICB0cmVlbmV4dCh0cmVlLT5ybGluaywgbmV4dCk7CisgIG5leHRbdHJlZS0+bGFiZWxdID0gdHJlZS0+dHJpZTsKK30KKworLyogQ29tcHV0ZSB0aGUgc2hpZnQgZm9yIGVhY2ggdHJpZSBub2RlLCBhcyB3ZWxsIGFzIHRoZSBkZWx0YQorICAgdGFibGUgYW5kIG5leHQgY2FjaGUgZm9yIHRoZSBnaXZlbiBrZXl3b3JkIHNldC4gKi8KK2NvbnN0IGNoYXIgKgora3dzcHJlcCAoa3dzZXRfdCBrd3MpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBrd3NldCAqa3dzZXQ7CisgIHJlZ2lzdGVyIGludCBpOworICByZWdpc3RlciBzdHJ1Y3QgdHJpZSAqY3VycjsKKyAgcmVnaXN0ZXIgY2hhciBjb25zdCAqdHJhbnM7CisgIHVuc2lnbmVkIGNoYXIgZGVsdGFbTkNIQVJdOworCisgIGt3c2V0ID0gKHN0cnVjdCBrd3NldCAqKSBrd3M7CisKKyAgLyogSW5pdGlhbCB2YWx1ZXMgZm9yIHRoZSBkZWx0YSB0YWJsZTsgd2lsbCBiZSBjaGFuZ2VkIGxhdGVyLiAgVGhlCisgICAgIGRlbHRhIGVudHJ5IGZvciBhIGdpdmVuIGNoYXJhY3RlciBpcyB0aGUgc21hbGxlc3QgZGVwdGggb2YgYW55CisgICAgIG5vZGUgYXQgd2hpY2ggYW4gb3V0Z29pbmcgZWRnZSBpcyBsYWJlbGVkIGJ5IHRoYXQgY2hhcmFjdGVyLiAqLworICBtZW1zZXQoZGVsdGEsIGt3c2V0LT5taW5kIDwgVUNIQVJfTUFYID8ga3dzZXQtPm1pbmQgOiBVQ0hBUl9NQVgsIE5DSEFSKTsKKworICAvKiBDaGVjayBpZiB3ZSBjYW4gdXNlIHRoZSBzaW1wbGUgYm95ZXItbW9vcmUgYWxnb3JpdGhtLCBpbnN0ZWFkCisgICAgIG9mIHRoZSBoYWlyeSBjb21tZW50ei13YWx0ZXIgYWxnb3JpdGhtLiAqLworICBpZiAoa3dzZXQtPndvcmRzID09IDEgJiYga3dzZXQtPnRyYW5zID09IE5VTEwpCisgICAgeworICAgICAgY2hhciBjOworCisgICAgICAvKiBMb29raW5nIGZvciBqdXN0IG9uZSBzdHJpbmcuICBFeHRyYWN0IGl0IGZyb20gdGhlIHRyaWUuICovCisgICAgICBrd3NldC0+dGFyZ2V0ID0gb2JzdGFja19hbGxvYygma3dzZXQtPm9ic3RhY2ssIGt3c2V0LT5taW5kKTsKKyAgICAgIGlmICgha3dzZXQtPnRhcmdldCkKKwlyZXR1cm4gIm1lbW9yeSBleGhhdXN0ZWQiOworICAgICAgZm9yIChpID0ga3dzZXQtPm1pbmQgLSAxLCBjdXJyID0ga3dzZXQtPnRyaWU7IGkgPj0gMDsgLS1pKQorCXsKKwkgIGt3c2V0LT50YXJnZXRbaV0gPSBjdXJyLT5saW5rcy0+bGFiZWw7CisJICBjdXJyID0gY3Vyci0+bGlua3MtPnRyaWU7CisJfQorICAgICAgLyogQnVpbGQgdGhlIEJveWVyIE1vb3JlIGRlbHRhLiAgQm95IHRoYXQncyBlYXN5IGNvbXBhcmVkIHRvIENXLiAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGt3c2V0LT5taW5kOyArK2kpCisJZGVsdGFbVShrd3NldC0+dGFyZ2V0W2ldKV0gPSBrd3NldC0+bWluZCAtIChpICsgMSk7CisgICAgICAvKiBGaW5kIHRoZSBtaW5pbWFsIGRlbHRhMiBzaGlmdCB0aGF0IHdlIG1pZ2h0IG1ha2UgYWZ0ZXIKKwkgYSBiYWNrd2FyZHMgbWF0Y2ggaGFzIGZhaWxlZC4gKi8KKyAgICAgIGMgPSBrd3NldC0+dGFyZ2V0W2t3c2V0LT5taW5kIC0gMV07CisgICAgICBmb3IgKGkgPSBrd3NldC0+bWluZCAtIDI7IGkgPj0gMDsgLS1pKQorCWlmIChrd3NldC0+dGFyZ2V0W2ldID09IGMpCisJICBicmVhazsKKyAgICAgIGt3c2V0LT5taW5kMiA9IGt3c2V0LT5taW5kIC0gKGkgKyAxKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZWdpc3RlciBzdHJ1Y3QgdHJpZSAqZmFpbDsKKyAgICAgIHN0cnVjdCB0cmllICpsYXN0LCAqbmV4dFtOQ0hBUl07CisKKyAgICAgIC8qIFRyYXZlcnNlIHRoZSBub2RlcyBvZiB0aGUgdHJpZSBpbiBsZXZlbCBvcmRlciwgc2ltdWx0YW5lb3VzbHkKKwkgY29tcHV0aW5nIHRoZSBkZWx0YSB0YWJsZSwgZmFpbHVyZSBmdW5jdGlvbiwgYW5kIHNoaWZ0IGZ1bmN0aW9uLiAqLworICAgICAgZm9yIChjdXJyID0gbGFzdCA9IGt3c2V0LT50cmllOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCkKKwl7CisJICAvKiBFbnF1ZXVlIHRoZSBpbW1lZGlhdGUgZGVzY2VuZGVudHMgaW4gdGhlIGxldmVsIG9yZGVyIHF1ZXVlLiAqLworCSAgZW5xdWV1ZShjdXJyLT5saW5rcywgJmxhc3QpOworCisJICBjdXJyLT5zaGlmdCA9IGt3c2V0LT5taW5kOworCSAgY3Vyci0+bWF4c2hpZnQgPSBrd3NldC0+bWluZDsKKworCSAgLyogVXBkYXRlIHRoZSBkZWx0YSB0YWJsZSBmb3IgdGhlIGRlc2NlbmRlbnRzIG9mIHRoaXMgbm9kZS4gKi8KKwkgIHRyZWVkZWx0YShjdXJyLT5saW5rcywgY3Vyci0+ZGVwdGgsIGRlbHRhKTsKKworCSAgLyogQ29tcHV0ZSB0aGUgZmFpbHVyZSBmdW5jdGlvbiBmb3IgdGhlIGRlY2VuZGVudHMgb2YgdGhpcyBub2RlLiAqLworCSAgdHJlZWZhaWxzKGN1cnItPmxpbmtzLCBjdXJyLT5mYWlsLCBrd3NldC0+dHJpZSk7CisKKwkgIC8qIFVwZGF0ZSB0aGUgc2hpZnRzIGF0IGVhY2ggbm9kZSBpbiB0aGUgY3VycmVudCBub2RlJ3MgY2hhaW4KKwkgICAgIG9mIGZhaWxzIGJhY2sgdG8gdGhlIHJvb3QuICovCisJICBmb3IgKGZhaWwgPSBjdXJyLT5mYWlsOyBmYWlsOyBmYWlsID0gZmFpbC0+ZmFpbCkKKwkgICAgeworCSAgICAgIC8qIElmIHRoZSBjdXJyZW50IG5vZGUgaGFzIHNvbWUgb3V0Z29pbmcgZWRnZSB0aGF0IHRoZSBmYWlsCisJCSBkb2Vzbid0LCB0aGVuIHRoZSBzaGlmdCBhdCB0aGUgZmFpbCBzaG91bGQgYmUgbm8gbGFyZ2VyCisJCSB0aGFuIHRoZSBkaWZmZXJlbmNlIG9mIHRoZWlyIGRlcHRocy4gKi8KKwkgICAgICBpZiAoIWhhc2V2ZXJ5KGZhaWwtPmxpbmtzLCBjdXJyLT5saW5rcykpCisJCWlmIChjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoIDwgZmFpbC0+c2hpZnQpCisJCSAgZmFpbC0+c2hpZnQgPSBjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoOworCisJICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBhY2NlcHRpbmcgdGhlbiB0aGUgc2hpZnQgYXQgdGhlCisJCSBmYWlsIGFuZCBpdHMgZGVzY2VuZGVudHMgc2hvdWxkIGJlIG5vIGxhcmdlciB0aGFuIHRoZQorCQkgZGlmZmVyZW5jZSBvZiB0aGVpciBkZXB0aHMuICovCisJICAgICAgaWYgKGN1cnItPmFjY2VwdGluZyAmJiBmYWlsLT5tYXhzaGlmdCA+IGN1cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGgpCisJCWZhaWwtPm1heHNoaWZ0ID0gY3Vyci0+ZGVwdGggLSBmYWlsLT5kZXB0aDsKKwkgICAgfQorCX0KKworICAgICAgLyogVHJhdmVyc2UgdGhlIHRyaWUgaW4gbGV2ZWwgb3JkZXIgYWdhaW4sIGZpeGluZyB1cCBhbGwgbm9kZXMgd2hvc2UKKwkgc2hpZnQgZXhjZWVkcyB0aGVpciBpbmhlcml0ZWQgbWF4c2hpZnQuICovCisgICAgICBmb3IgKGN1cnIgPSBrd3NldC0+dHJpZS0+bmV4dDsgY3VycjsgY3VyciA9IGN1cnItPm5leHQpCisJeworCSAgaWYgKGN1cnItPm1heHNoaWZ0ID4gY3Vyci0+cGFyZW50LT5tYXhzaGlmdCkKKwkgICAgY3Vyci0+bWF4c2hpZnQgPSBjdXJyLT5wYXJlbnQtPm1heHNoaWZ0OworCSAgaWYgKGN1cnItPnNoaWZ0ID4gY3Vyci0+bWF4c2hpZnQpCisJICAgIGN1cnItPnNoaWZ0ID0gY3Vyci0+bWF4c2hpZnQ7CisJfQorCisgICAgICAvKiBDcmVhdGUgYSB2ZWN0b3IsIGluZGV4ZWQgYnkgY2hhcmFjdGVyIGNvZGUsIG9mIHRoZSBvdXRnb2luZyBsaW5rcworCSBmcm9tIHRoZSByb290IG5vZGUuICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIQVI7ICsraSkKKwluZXh0W2ldID0gTlVMTDsKKyAgICAgIHRyZWVuZXh0KGt3c2V0LT50cmllLT5saW5rcywgbmV4dCk7CisKKyAgICAgIGlmICgodHJhbnMgPSBrd3NldC0+dHJhbnMpICE9IE5VTEwpCisJZm9yIChpID0gMDsgaSA8IE5DSEFSOyArK2kpCisJICBrd3NldC0+bmV4dFtpXSA9IG5leHRbVSh0cmFuc1tpXSldOworICAgICAgZWxzZQorCW1lbWNweShrd3NldC0+bmV4dCwgbmV4dCwgTkNIQVIgKiBzaXplb2Yoc3RydWN0IHRyaWUgKikpOworICAgIH0KKworICAvKiBGaXggdGhpbmdzIHVwIGZvciBhbnkgdHJhbnNsYXRpb24gdGFibGUuICovCisgIGlmICgodHJhbnMgPSBrd3NldC0+dHJhbnMpICE9IE5VTEwpCisgICAgZm9yIChpID0gMDsgaSA8IE5DSEFSOyArK2kpCisgICAgICBrd3NldC0+ZGVsdGFbaV0gPSBkZWx0YVtVKHRyYW5zW2ldKV07CisgIGVsc2UKKyAgICBtZW1jcHkoa3dzZXQtPmRlbHRhLCBkZWx0YSwgTkNIQVIpOworCisgIHJldHVybiBOVUxMOworfQorCisvKiBGYXN0IGJveWVyLW1vb3JlIHNlYXJjaC4gKi8KK3N0YXRpYyBzaXplX3QKK2JtZXhlYyAoa3dzZXRfdCBrd3MsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBzaXplKQoreworICBzdHJ1Y3Qga3dzZXQgY29uc3QgKmt3c2V0OworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGNvbnN0ICpkMTsKKyAgcmVnaXN0ZXIgY2hhciBjb25zdCAqZXAsICpzcCwgKnRwOworICByZWdpc3RlciBpbnQgZCwgZ2MsIGksIGxlbiwgbWQyOworCisgIGt3c2V0ID0gKHN0cnVjdCBrd3NldCBjb25zdCAqKSBrd3M7CisgIGxlbiA9IGt3c2V0LT5taW5kOworCisgIGlmIChsZW4gPT0gMCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKGxlbiA+IHNpemUpCisgICAgcmV0dXJuIC0xOworICBpZiAobGVuID09IDEpCisgICAgeworICAgICAgdHAgPSBtZW1jaHIgKHRleHQsIGt3c2V0LT50YXJnZXRbMF0sIHNpemUpOworICAgICAgcmV0dXJuIHRwID8gdHAgLSB0ZXh0IDogLTE7CisgICAgfQorCisgIGQxID0ga3dzZXQtPmRlbHRhOworICBzcCA9IGt3c2V0LT50YXJnZXQgKyBsZW47CisgIGdjID0gVShzcFstMl0pOworICBtZDIgPSBrd3NldC0+bWluZDI7CisgIHRwID0gdGV4dCArIGxlbjsKKworICAvKiBTaWduaWZpY2FuY2Ugb2YgMTI6IDEgKGluaXRpYWwgb2Zmc2V0KSArIDEwIChza2lwIGxvb3ApICsgMSAobWQyKS4gKi8KKyAgaWYgKHNpemUgPiAxMiAqIGxlbikKKyAgICAvKiAxMSBpcyBub3QgYSBidWcsIHRoZSBpbml0aWFsIG9mZnNldCBoYXBwZW5zIG9ubHkgb25jZS4gKi8KKyAgICBmb3IgKGVwID0gdGV4dCArIHNpemUgLSAxMSAqIGxlbjs7KQorICAgICAgeworCXdoaWxlICh0cCA8PSBlcCkKKwkgIHsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBpZiAoZCA9PSAwKQorCSAgICAgIGdvdG8gZm91bmQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGlmIChkID09IDApCisJICAgICAgZ290byBmb3VuZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgaWYgKGQgPT0gMCkKKwkgICAgICBnb3RvIGZvdW5kOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICB9CisJYnJlYWs7CisgICAgICBmb3VuZDoKKwlpZiAoVSh0cFstMl0pID09IGdjKQorCSAgeworCSAgICBmb3IgKGkgPSAzOyBpIDw9IGxlbiAmJiBVKHRwWy1pXSkgPT0gVShzcFstaV0pOyArK2kpCisJICAgICAgOworCSAgICBpZiAoaSA+IGxlbikKKwkgICAgICByZXR1cm4gdHAgLSBsZW4gLSB0ZXh0OworCSAgfQorCXRwICs9IG1kMjsKKyAgICAgIH0KKworICAvKiBOb3cgd2UgaGF2ZSBvbmx5IGEgZmV3IGNoYXJhY3RlcnMgbGVmdCB0byBzZWFyY2guICBXZQorICAgICBjYXJlZnVsbHkgYXZvaWQgZXZlciBwcm9kdWNpbmcgYW4gb3V0LW9mLWJvdW5kcyBwb2ludGVyLiAqLworICBlcCA9IHRleHQgKyBzaXplOworICBkID0gZDFbVSh0cFstMV0pXTsKKyAgd2hpbGUgKGQgPD0gZXAgLSB0cCkKKyAgICB7CisgICAgICBkID0gZDFbVSgodHAgKz0gZClbLTFdKV07CisgICAgICBpZiAoZCAhPSAwKQorCWNvbnRpbnVlOworICAgICAgaWYgKFUodHBbLTJdKSA9PSBnYykKKwl7CisJICBmb3IgKGkgPSAzOyBpIDw9IGxlbiAmJiBVKHRwWy1pXSkgPT0gVShzcFstaV0pOyArK2kpCisJICAgIDsKKwkgIGlmIChpID4gbGVuKQorCSAgICByZXR1cm4gdHAgLSBsZW4gLSB0ZXh0OworCX0KKyAgICAgIGQgPSBtZDI7CisgICAgfQorCisgIHJldHVybiAtMTsKK30KKworLyogSGFpcnkgbXVsdGlwbGUgc3RyaW5nIHNlYXJjaC4gKi8KK3N0YXRpYyBzaXplX3QKK2N3ZXhlYyAoa3dzZXRfdCBrd3MsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sIHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gpCit7CisgIHN0cnVjdCBrd3NldCBjb25zdCAqa3dzZXQ7CisgIHN0cnVjdCB0cmllICogY29uc3QgKm5leHQ7CisgIHN0cnVjdCB0cmllIGNvbnN0ICp0cmllOworICBzdHJ1Y3QgdHJpZSBjb25zdCAqYWNjZXB0OworICBjaGFyIGNvbnN0ICpiZWcsICpsaW0sICptY2gsICpsbWNoOworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGM7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgY29uc3QgKmRlbHRhOworICByZWdpc3RlciBpbnQgZDsKKyAgcmVnaXN0ZXIgY2hhciBjb25zdCAqZW5kLCAqcWxpbTsKKyAgcmVnaXN0ZXIgc3RydWN0IHRyZWUgY29uc3QgKnRyZWU7CisgIHJlZ2lzdGVyIGNoYXIgY29uc3QgKnRyYW5zOworCisgIGFjY2VwdCA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSByZWdpc3RlciBjb3BpZXMgYW5kIGxvb2sgZm9yIGVhc3kgd2F5cyBvdXQuICovCisgIGt3c2V0ID0gKHN0cnVjdCBrd3NldCAqKSBrd3M7CisgIGlmIChsZW4gPCBrd3NldC0+bWluZCkKKyAgICByZXR1cm4gLTE7CisgIG5leHQgPSBrd3NldC0+bmV4dDsKKyAgZGVsdGEgPSBrd3NldC0+ZGVsdGE7CisgIHRyYW5zID0ga3dzZXQtPnRyYW5zOworICBsaW0gPSB0ZXh0ICsgbGVuOworICBlbmQgPSB0ZXh0OworICBpZiAoKGQgPSBrd3NldC0+bWluZCkgIT0gMCkKKyAgICBtY2ggPSBOVUxMOworICBlbHNlCisgICAgeworICAgICAgbWNoID0gdGV4dCwgYWNjZXB0ID0ga3dzZXQtPnRyaWU7CisgICAgICBnb3RvIG1hdGNoOworICAgIH0KKworICBpZiAobGVuID49IDQgKiBrd3NldC0+bWluZCkKKyAgICBxbGltID0gbGltIC0gNCAqIGt3c2V0LT5taW5kOworICBlbHNlCisgICAgcWxpbSA9IE5VTEw7CisKKyAgd2hpbGUgKGxpbSAtIGVuZCA+PSBkKQorICAgIHsKKyAgICAgIGlmIChxbGltICYmIGVuZCA8PSBxbGltKQorCXsKKwkgIGVuZCArPSBkIC0gMTsKKwkgIHdoaWxlICgoZCA9IGRlbHRhW2MgPSAqZW5kXSkgJiYgZW5kIDwgcWxpbSkKKwkgICAgeworCSAgICAgIGVuZCArPSBkOworCSAgICAgIGVuZCArPSBkZWx0YVtVKCplbmQpXTsKKwkgICAgICBlbmQgKz0gZGVsdGFbVSgqZW5kKV07CisJICAgIH0KKwkgICsrZW5kOworCX0KKyAgICAgIGVsc2UKKwlkID0gZGVsdGFbYyA9IChlbmQgKz0gZClbLTFdXTsKKyAgICAgIGlmIChkKQorCWNvbnRpbnVlOworICAgICAgYmVnID0gZW5kIC0gMTsKKyAgICAgIHRyaWUgPSBuZXh0W2NdOworICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZykKKwl7CisJICBtY2ggPSBiZWc7CisJICBhY2NlcHQgPSB0cmllOworCX0KKyAgICAgIGQgPSB0cmllLT5zaGlmdDsKKyAgICAgIHdoaWxlIChiZWcgPiB0ZXh0KQorCXsKKwkgIGMgPSB0cmFucyA/IHRyYW5zW1UoKi0tYmVnKV0gOiAqLS1iZWc7CisJICB0cmVlID0gdHJpZS0+bGlua3M7CisJICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQorCSAgICBpZiAoYyA8IHRyZWUtPmxhYmVsKQorCSAgICAgIHRyZWUgPSB0cmVlLT5sbGluazsKKwkgICAgZWxzZQorCSAgICAgIHRyZWUgPSB0cmVlLT5ybGluazsKKwkgIGlmICh0cmVlKQorCSAgICB7CisJICAgICAgdHJpZSA9IHRyZWUtPnRyaWU7CisJICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZykKKwkJeworCQkgIG1jaCA9IGJlZzsKKwkJICBhY2NlcHQgPSB0cmllOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgYnJlYWs7CisJICBkID0gdHJpZS0+c2hpZnQ7CisJfQorICAgICAgaWYgKG1jaCkKKwlnb3RvIG1hdGNoOworICAgIH0KKyAgcmV0dXJuIC0xOworCisgbWF0Y2g6CisgIC8qIEdpdmVuIGEga25vd24gbWF0Y2gsIGZpbmQgdGhlIGxvbmdlc3QgcG9zc2libGUgbWF0Y2ggYW5jaG9yZWQKKyAgICAgYXQgb3IgYmVmb3JlIGl0cyBzdGFydGluZyBwb2ludC4gIFRoaXMgaXMgbmVhcmx5IGEgdmVyYmF0aW0KKyAgICAgY29weSBvZiB0aGUgcHJlY2VkaW5nIG1haW4gc2VhcmNoIGxvb3BzLiAqLworICBpZiAobGltIC0gbWNoID4ga3dzZXQtPm1heGQpCisgICAgbGltID0gbWNoICsga3dzZXQtPm1heGQ7CisgIGxtY2ggPSBOVUxMOworICBkID0gMTsKKyAgd2hpbGUgKGxpbSAtIGVuZCA+PSBkKQorICAgIHsKKyAgICAgIGlmICgoZCA9IGRlbHRhW2MgPSAoZW5kICs9IGQpWy0xXV0pICE9IDApCisJY29udGludWU7CisgICAgICBiZWcgPSBlbmQgLSAxOworICAgICAgaWYgKCEodHJpZSA9IG5leHRbY10pKQorCXsKKwkgIGQgPSAxOworCSAgY29udGludWU7CisJfQorICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZyAmJiBiZWcgPD0gbWNoKQorCXsKKwkgIGxtY2ggPSBiZWc7CisJICBhY2NlcHQgPSB0cmllOworCX0KKyAgICAgIGQgPSB0cmllLT5zaGlmdDsKKyAgICAgIHdoaWxlIChiZWcgPiB0ZXh0KQorCXsKKwkgIGMgPSB0cmFucyA/IHRyYW5zW1UoKi0tYmVnKV0gOiAqLS1iZWc7CisJICB0cmVlID0gdHJpZS0+bGlua3M7CisJICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQorCSAgICBpZiAoYyA8IHRyZWUtPmxhYmVsKQorCSAgICAgIHRyZWUgPSB0cmVlLT5sbGluazsKKwkgICAgZWxzZQorCSAgICAgIHRyZWUgPSB0cmVlLT5ybGluazsKKwkgIGlmICh0cmVlKQorCSAgICB7CisJICAgICAgdHJpZSA9IHRyZWUtPnRyaWU7CisJICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZyAmJiBiZWcgPD0gbWNoKQorCQl7CisJCSAgbG1jaCA9IGJlZzsKKwkJICBhY2NlcHQgPSB0cmllOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgYnJlYWs7CisJICBkID0gdHJpZS0+c2hpZnQ7CisJfQorICAgICAgaWYgKGxtY2gpCisJeworCSAgbWNoID0gbG1jaDsKKwkgIGdvdG8gbWF0Y2g7CisJfQorICAgICAgaWYgKCFkKQorCWQgPSAxOworICAgIH0KKworICBpZiAoa3dzbWF0Y2gpCisgICAgeworICAgICAga3dzbWF0Y2gtPmluZGV4ID0gYWNjZXB0LT5hY2NlcHRpbmcgLyAyOworICAgICAga3dzbWF0Y2gtPm9mZnNldFswXSA9IG1jaCAtIHRleHQ7CisgICAgICBrd3NtYXRjaC0+c2l6ZVswXSA9IGFjY2VwdC0+ZGVwdGg7CisgICAgfQorICByZXR1cm4gbWNoIC0gdGV4dDsKK30KKworLyogU2VhcmNoIHRocm91Z2ggdGhlIGdpdmVuIHRleHQgZm9yIGEgbWF0Y2ggb2YgYW55IG1lbWJlciBvZiB0aGUKKyAgIGdpdmVuIGtleXdvcmQgc2V0LiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCisgICB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nLCBvciBOVUxMIGlmIG5vIG1hdGNoIGlzIGZvdW5kLiAgSWYgRk9VTkRMRU4KKyAgIGlzIG5vbi1OVUxMIHN0b3JlIGluIHRoZSByZWZlcmVuY2VkIGxvY2F0aW9uIHRoZSBsZW5ndGggb2YgdGhlCisgICBtYXRjaGluZyBzdWJzdHJpbmcuICBTaW1pbGFybHksIGlmIEZPVU5ESURYIGlzIG5vbi1OVUxMLCBzdG9yZQorICAgaW4gdGhlIHJlZmVyZW5jZWQgbG9jYXRpb24gdGhlIGluZGV4IG51bWJlciBvZiB0aGUgcGFydGljdWxhcgorICAga2V5d29yZCBtYXRjaGVkLiAqLworc2l6ZV90Citrd3NleGVjIChrd3NldF90IGt3cywgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUsCisJIHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gpCit7CisgIHN0cnVjdCBrd3NldCBjb25zdCAqa3dzZXQgPSAoc3RydWN0IGt3c2V0ICopIGt3czsKKyAgaWYgKGt3c2V0LT53b3JkcyA9PSAxICYmIGt3c2V0LT50cmFucyA9PSBOVUxMKQorICAgIHsKKyAgICAgIHNpemVfdCByZXQgPSBibWV4ZWMgKGt3cywgdGV4dCwgc2l6ZSk7CisgICAgICBpZiAoa3dzbWF0Y2ggIT0gTlVMTCAmJiByZXQgIT0gKHNpemVfdCkgLTEpCisJeworCSAga3dzbWF0Y2gtPmluZGV4ID0gMDsKKwkgIGt3c21hdGNoLT5vZmZzZXRbMF0gPSByZXQ7CisJICBrd3NtYXRjaC0+c2l6ZVswXSA9IGt3c2V0LT5taW5kOworCX0KKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIGN3ZXhlYyhrd3MsIHRleHQsIHNpemUsIGt3c21hdGNoKTsKK30KKworLyogRnJlZSB0aGUgY29tcG9uZW50cyBvZiB0aGUgZ2l2ZW4ga2V5d29yZCBzZXQuICovCit2b2lkCitrd3NmcmVlIChrd3NldF90IGt3cykKK3sKKyAgc3RydWN0IGt3c2V0ICprd3NldDsKKworICBrd3NldCA9IChzdHJ1Y3Qga3dzZXQgKikga3dzOworICBvYnN0YWNrX2ZyZWUoJmt3c2V0LT5vYnN0YWNrLCBOVUxMKTsKKyAgZnJlZShrd3MpOworfQpkaWZmIC0tZ2l0IGEva3dzZXQuaCBiL2t3c2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxYjJlYQotLS0gL2Rldi9udWxsCisrKyBiL2t3c2V0LmgKQEAgLTAsMCArMSw2MyBAQAorLyogVGhpcyBmaWxlIGhhcyBiZWVuIGNvcGllZCBmcm9tIGNvbW1pdCBlN2FjNzEzZF4gaW4gdGhlIEdOVSBncmVwIGdpdAorICogcmVwb3NpdG9yeS4gQSBmZXcgc21hbGwgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byBhZGFwdCB0aGUgY29kZSB0bworICogR2l0LgorICovCisKKy8qIGt3c2V0LmggLSBoZWFkZXIgZGVjbGFyaW5nIHRoZSBrZXl3b3JkIHNldCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTk4LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgICAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBXcml0dGVuIEF1Z3VzdCAxOTg5IGJ5IE1pa2UgSGFlcnRlbC4KKyAgIFRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgKEVtYWlsKSBhdCB0aGUgYWRkcmVzcyBtaWtlQGFpLm1pdC5lZHUsCisgICBvciAoVVMgbWFpbCkgYXMgTWlrZSBIYWVydGVsIGMvbyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICovCisKK3N0cnVjdCBrd3NtYXRjaAoreworICBpbnQgaW5kZXg7CQkJLyogSW5kZXggbnVtYmVyIG9mIG1hdGNoaW5nIGtleXdvcmQuICovCisgIHNpemVfdCBvZmZzZXRbMV07CQkvKiBPZmZzZXQgb2YgZWFjaCBzdWJtYXRjaC4gKi8KKyAgc2l6ZV90IHNpemVbMV07CQkvKiBMZW5ndGggb2YgZWFjaCBzdWJtYXRjaC4gKi8KK307CisKK3N0cnVjdCBrd3NldF90OwordHlwZWRlZiBzdHJ1Y3Qga3dzZXRfdCoga3dzZXRfdDsKKworLyogUmV0dXJuIGFuIG9wYXF1ZSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGtleXdvcmQgc2V0LCBvciBOVUxMCisgICBpZiBlbm91Z2ggbWVtb3J5IGNhbm5vdCBiZSBvYnRhaW5lZC4gIFRoZSBhcmd1bWVudCBpZiBub24tTlVMTAorICAgc3BlY2lmaWVzIGEgdGFibGUgb2YgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyB0byBiZSBhcHBsaWVkIHRvIGFsbAorICAgcGF0dGVybiBhbmQgc2VhcmNoIHRleHQuICovCitleHRlcm4ga3dzZXRfdCBrd3NhbGxvYyhjaGFyIGNvbnN0ICopOworCisvKiBJbmNyZW1lbnRhbGx5IGV4dGVuZCB0aGUga2V5d29yZCBzZXQgdG8gaW5jbHVkZSB0aGUgZ2l2ZW4gc3RyaW5nLgorICAgUmV0dXJuIE5VTEwgZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIG1lc3NhZ2UuICBSZW1lbWJlciBhbiBpbmRleAorICAgbnVtYmVyIGZvciBlYWNoIGtleXdvcmQgaW5jbHVkZWQgaW4gdGhlIHNldC4gKi8KK2V4dGVybiBjb25zdCBjaGFyICprd3NpbmNyKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90KTsKKworLyogV2hlbiB0aGUga2V5d29yZCBzZXQgaGFzIGJlZW4gY29tcGxldGVseSBidWlsdCwgcHJlcGFyZSBpdCBmb3IKKyAgIHVzZS4gIFJldHVybiBOVUxMIGZvciBzdWNjZXNzLCBvciBhbiBlcnJvciBtZXNzYWdlLiAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmt3c3ByZXAoa3dzZXRfdCk7CisKKy8qIFNlYXJjaCB0aHJvdWdoIHRoZSBnaXZlbiBidWZmZXIgZm9yIGEgbWVtYmVyIG9mIHRoZSBrZXl3b3JkIHNldC4KKyAgIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGxlZnRtb3N0IGxvbmdlc3QgbWF0Y2ggZm91bmQsIG9yIE5VTEwgaWYKKyAgIG5vIG1hdGNoIGlzIGZvdW5kLiAgSWYgZm91bmRsZW4gaXMgbm9uLU5VTEwsIHN0b3JlIHRoZSBsZW5ndGggb2YKKyAgIHRoZSBtYXRjaGluZyBzdWJzdHJpbmcgaW4gdGhlIGludGVnZXIgaXQgcG9pbnRzIHRvLiAgU2ltaWxhcmx5LAorICAgaWYgZm91bmRpbmRleCBpcyBub24tTlVMTCwgc3RvcmUgdGhlIGluZGV4IG9mIHRoZSBwYXJ0aWN1bGFyCisgICBrZXl3b3JkIGZvdW5kIHRoZXJlaW4uICovCitleHRlcm4gc2l6ZV90IGt3c2V4ZWMoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0cnVjdCBrd3NtYXRjaCAqKTsKKworLyogRGVhbGxvY2F0ZSB0aGUgZ2l2ZW4ga2V5d29yZCBzZXQgYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBzdG9yYWdlLiAqLworZXh0ZXJuIHZvaWQga3dzZnJlZShrd3NldF90KTsKKwpkaWZmIC0tZ2l0IGEvbGV2ZW5zaHRlaW4uYyBiL2xldmVuc2h0ZWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyODE1OQotLS0gL2Rldi9udWxsCisrKyBiL2xldmVuc2h0ZWluLmMKQEAgLTAsMCArMSw4NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibGV2ZW5zaHRlaW4uaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgRGFtZXJhdS1MZXZlbnNodGVpbiBhbGdvcml0aG0gdG8KKyAqIGNhbGN1bGF0ZSBhIGRpc3RhbmNlIGJldHdlZW4gc3RyaW5ncy4KKyAqCisgKiBCYXNpY2FsbHksIGl0IHNheXMgaG93IG1hbnkgbGV0dGVycyBuZWVkIHRvIGJlIHN3YXBwZWQsIHN1YnN0aXR1dGVkLAorICogZGVsZXRlZCBmcm9tLCBvciBhZGRlZCB0byBzdHJpbmcxLCBhdCBsZWFzdCwgdG8gZ2V0IHN0cmluZzIuCisgKgorICogVGhlIGlkZWEgaXMgdG8gYnVpbGQgYSBkaXN0YW5jZSBtYXRyaXggZm9yIHRoZSBzdWJzdHJpbmdzIG9mIGJvdGgKKyAqIHN0cmluZ3MuICBUbyBhdm9pZCBhIGxhcmdlIHNwYWNlIGNvbXBsZXhpdHksIG9ubHkgdGhlIGxhc3QgdGhyZWUgcm93cworICogYXJlIGtlcHQgaW4gbWVtb3J5IChpZiBzd2FwcyBoYWQgdGhlIHNhbWUgb3IgaGlnaGVyIGNvc3QgYXMgb25lIGRlbGV0aW9uCisgKiBwbHVzIG9uZSBpbnNlcnRpb24sIG9ubHkgdHdvIHJvd3Mgd291bGQgYmUgbmVlZGVkKS4KKyAqCisgKiBBdCBhbnkgc3RhZ2UsICJpICsgMSIgZGVub3RlcyB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHN1YnN0cmluZyBvZgorICogc3RyaW5nMSB0aGF0IHRoZSBkaXN0YW5jZSBpcyBjYWxjdWxhdGVkIGZvci4KKyAqCisgKiByb3cyIGhvbGRzIHRoZSBjdXJyZW50IHJvdywgcm93MSB0aGUgcHJldmlvdXMgcm93IChpLmUuIGZvciB0aGUgc3Vic3RyaW5nCisgKiBvZiBzdHJpbmcxIG9mIGxlbmd0aCAiaSIpLCBhbmQgcm93MCB0aGUgcm93IGJlZm9yZSB0aGF0LgorICoKKyAqIEluIG90aGVyIHdvcmRzLCBhdCB0aGUgc3RhcnQgb2YgdGhlIGJpZyBsb29wLCByb3cyW2ogKyAxXSBjb250YWlucyB0aGUKKyAqIERhbWVyYXUtTGV2ZW5zaHRlaW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgc3Vic3RyaW5nIG9mIHN0cmluZzEgb2YgbGVuZ3RoCisgKiAiaSIgYW5kIHRoZSBzdWJzdHJpbmcgb2Ygc3RyaW5nMiBvZiBsZW5ndGggImogKyAxIi4KKyAqCisgKiBBbGwgdGhlIGJpZyBsb29wIGRvZXMgaXMgZGV0ZXJtaW5lIHRoZSBwYXJ0aWFsIG1pbmltdW0tY29zdCBwYXRocy4KKyAqCisgKiBJdCBkb2VzIHNvIGJ5IGNhbGN1bGF0aW5nIHRoZSBjb3N0cyBvZiB0aGUgcGF0aCBlbmRpbmcgaW4gY2hhcmFjdGVycworICogaSAoaW4gc3RyaW5nMSkgYW5kIGogKGluIHN0cmluZzIpLCByZXNwZWN0aXZlbHksIGdpdmVuIHRoYXQgdGhlIGxhc3QKKyAqIG9wZXJhdGlvbiBpcyBhIHN1YnN0aXR1dGlvbiwgYSBzd2FwLCBhIGRlbGV0aW9uLCBvciBhbiBpbnNlcnRpb24uCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgdGhlIGNvc3RzIHRvIGJlIHdlaWdodGVkOgorICoKKyAqIC0gdyAoYXMgaW4gInNXYXAiKQorICogLSBzIChhcyBpbiAiU3Vic3RpdHV0aW9uIikKKyAqIC0gYSAoZm9yIGluc2VydGlvbiwgQUtBICJBZGQiKQorICogLSBkIChhcyBpbiAiRGVsZXRpb24iKQorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGFsZ29yaXRobSBjYWxjdWxhdGVzIGEgZGlzdGFuY2UgX2lmZl8gZCA9PSBhLgorICovCitpbnQgbGV2ZW5zaHRlaW4oY29uc3QgY2hhciAqc3RyaW5nMSwgY29uc3QgY2hhciAqc3RyaW5nMiwKKwkJaW50IHcsIGludCBzLCBpbnQgYSwgaW50IGQpCit7CisJaW50IGxlbjEgPSBzdHJsZW4oc3RyaW5nMSksIGxlbjIgPSBzdHJsZW4oc3RyaW5nMik7CisJaW50ICpyb3cwID0geG1hbGxvYyhzaXplb2YoaW50KSAqIChsZW4yICsgMSkpOworCWludCAqcm93MSA9IHhtYWxsb2Moc2l6ZW9mKGludCkgKiAobGVuMiArIDEpKTsKKwlpbnQgKnJvdzIgPSB4bWFsbG9jKHNpemVvZihpbnQpICogKGxlbjIgKyAxKSk7CisJaW50IGksIGo7CisKKwlmb3IgKGogPSAwOyBqIDw9IGxlbjI7IGorKykKKwkJcm93MVtqXSA9IGogKiBhOworCWZvciAoaSA9IDA7IGkgPCBsZW4xOyBpKyspIHsKKwkJaW50ICpkdW1teTsKKworCQlyb3cyWzBdID0gKGkgKyAxKSAqIGQ7CisJCWZvciAoaiA9IDA7IGogPCBsZW4yOyBqKyspIHsKKwkJCS8qIHN1YnN0aXR1dGlvbiAqLworCQkJcm93MltqICsgMV0gPSByb3cxW2pdICsgcyAqIChzdHJpbmcxW2ldICE9IHN0cmluZzJbal0pOworCQkJLyogc3dhcCAqLworCQkJaWYgKGkgPiAwICYmIGogPiAwICYmIHN0cmluZzFbaSAtIDFdID09IHN0cmluZzJbal0gJiYKKwkJCQkJc3RyaW5nMVtpXSA9PSBzdHJpbmcyW2ogLSAxXSAmJgorCQkJCQlyb3cyW2ogKyAxXSA+IHJvdzBbaiAtIDFdICsgdykKKwkJCQlyb3cyW2ogKyAxXSA9IHJvdzBbaiAtIDFdICsgdzsKKwkJCS8qIGRlbGV0aW9uICovCisJCQlpZiAocm93MltqICsgMV0gPiByb3cxW2ogKyAxXSArIGQpCisJCQkJcm93MltqICsgMV0gPSByb3cxW2ogKyAxXSArIGQ7CisJCQkvKiBpbnNlcnRpb24gKi8KKwkJCWlmIChyb3cyW2ogKyAxXSA+IHJvdzJbal0gKyBhKQorCQkJCXJvdzJbaiArIDFdID0gcm93MltqXSArIGE7CisJCX0KKworCQlkdW1teSA9IHJvdzA7CisJCXJvdzAgPSByb3cxOworCQlyb3cxID0gcm93MjsKKwkJcm93MiA9IGR1bW15OworCX0KKworCWkgPSByb3cxW2xlbjJdOworCWZyZWUocm93MCk7CisJZnJlZShyb3cxKTsKKwlmcmVlKHJvdzIpOworCisJcmV0dXJuIGk7Cit9CmRpZmYgLS1naXQgYS9sZXZlbnNodGVpbi5oIGIvbGV2ZW5zaHRlaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTA1YmYzCi0tLSAvZGV2L251bGwKKysrIGIvbGV2ZW5zaHRlaW4uaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgTEVWRU5TSFRFSU5fSAorI2RlZmluZSBMRVZFTlNIVEVJTl9ICisKK2ludCBsZXZlbnNodGVpbihjb25zdCBjaGFyICpzdHJpbmcxLCBjb25zdCBjaGFyICpzdHJpbmcyLAorCWludCBzd2FwX3BlbmFsdHksIGludCBzdWJzdGl0dXRpb25fcGVuYWx0eSwKKwlpbnQgaW5zZXJ0aW9uX3BlbmFsdHksIGludCBkZWxldGlvbl9wZW5hbHR5KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saXN0LW9iamVjdHMuYyBiL2xpc3Qtb2JqZWN0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZDRhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saXN0LW9iamVjdHMuYwpAQCAtMCwwICsxLDIxOCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKworc3RhdGljIHZvaWQgcHJvY2Vzc19ibG9iKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSBzdHJ1Y3QgYmxvYiAqYmxvYiwKKwkJCSBzaG93X29iamVjdF9mbiBzaG93LAorCQkJIHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsCisJCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCSB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZibG9iLT5vYmplY3Q7CisKKwlpZiAoIXJldnMtPmJsb2Jfb2JqZWN0cykKKwkJcmV0dXJuOworCWlmICghb2JqKQorCQlkaWUoImJhZCBibG9iIG9iamVjdCIpOworCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKKwkJcmV0dXJuOworCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwlzaG93KG9iaiwgcGF0aCwgbmFtZSwgY2JfZGF0YSk7Cit9CisKKy8qCisgKiBQcm9jZXNzaW5nIGEgZ2l0bGluayBlbnRyeSBjdXJyZW50bHkgZG9lcyBub3RoaW5nLCBzaW5jZQorICogd2UgZG8gbm90IHJlY3Vyc2UgaW50byB0aGUgc3VicHJvamVjdC4KKyAqCisgKiBXZSAqY291bGQqIGV2ZW50dWFsbHkgYWRkIGEgZmxhZyB0aGF0IGFjdHVhbGx5IGRvZXMgdGhhdCwKKyAqIHdoaWNoIHdvdWxkIGludm9sdmU6CisgKiAgLSBpcyB0aGUgc3VicHJvamVjdCBhY3R1YWxseSBjaGVja2VkIG91dD8KKyAqICAtIGlmIHNvLCBzZWUgaWYgdGhlIHN1YnByb2plY3QgaGFzIGFscmVhZHkgYmVlbiBhZGRlZAorICogICAgdG8gdGhlIGFsdGVybmF0ZXMgbGlzdCwgYW5kIGFkZCBpdCBpZiBub3QuCisgKiAgLSBwcm9jZXNzIHRoZSBjb21taXQgKG9yIHRhZykgdGhlIGdpdGxpbmsgcG9pbnRzIHRvCisgKiAgICByZWN1cnNpdmVseS4KKyAqCisgKiBIb3dldmVyLCBpdCdzIHVuY2xlYXIgd2hldGhlciB0aGVyZSBpcyByZWFsbHkgZXZlciBhbnkKKyAqIHJlYXNvbiB0byBzZWUgc3VwZXJwcm9qZWN0cyBhbmQgc3VicHJvamVjdHMgYXMgc3VjaCBhCisgKiAidW5pZmllZCIgb2JqZWN0IHBvb2wgKHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiBhIHRvdGFsbHkKKyAqIGh1bW9uZ291cyBwYWNrIC0gYXZvaWRpbmcgd2hpY2ggd2FzIHRoZSB3aG9sZSBwb2ludCBvZgorICogaGF2aW5nIGdpdGxpbmtzIGluIHRoZSBmaXJzdCBwbGFjZSEpLgorICoKKyAqIFNvIGZvciBub3csIHRoZXJlIGlzIGp1c3QgYSBub3RlIHRoYXQgd2UgKmNvdWxkKiBmb2xsb3cKKyAqIHRoZSBsaW5rLCBhbmQgaG93IHRvIGRvIGl0LiBXaGV0aGVyIGl0IG5lY2Vzc2FyaWx5IG1ha2VzCisgKiBhbnkgc2Vuc2Ugd2hhdC1zby1ldmVyIHRvIGV2ZXIgZG8gdGhhdCBpcyBhbm90aGVyIGlzc3VlLgorICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX2dpdGxpbmsoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgc2hvd19vYmplY3RfZm4gc2hvdywKKwkJCSAgICBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgdm9pZCAqY2JfZGF0YSkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvICovCit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfdHJlZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkgc2hvd19vYmplY3RfZm4gc2hvdywKKwkJCSBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCSB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZ0cmVlLT5vYmplY3Q7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCXN0cnVjdCBuYW1lX3BhdGggbWU7CisJZW51bSBpbnRlcmVzdGluZyBtYXRjaCA9IHJldnMtPmRpZmZvcHQucGF0aHNwZWMubnIgPT0gMCA/CisJCWFsbF9lbnRyaWVzX2ludGVyZXN0aW5nOiBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisJaW50IGJhc2VsZW4gPSBiYXNlLT5sZW47CisKKwlpZiAoIXJldnMtPnRyZWVfb2JqZWN0cykKKwkJcmV0dXJuOworCWlmICghb2JqKQorCQlkaWUoImJhZCB0cmVlIG9iamVjdCIpOworCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV90cmVlKHRyZWUpIDwgMCkKKwkJZGllKCJiYWQgdHJlZSBvYmplY3QgJXMiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwlvYmotPmZsYWdzIHw9IFNFRU47CisJc2hvdyhvYmosIHBhdGgsIG5hbWUsIGNiX2RhdGEpOworCW1lLnVwID0gcGF0aDsKKwltZS5lbGVtID0gbmFtZTsKKwltZS5lbGVtX2xlbiA9IHN0cmxlbihuYW1lKTsKKworCWlmICghbWF0Y2gpIHsKKwkJc3RyYnVmX2FkZHN0cihiYXNlLCBuYW1lKTsKKwkJaWYgKGJhc2UtPmxlbikKKwkJCXN0cmJ1Zl9hZGRjaChiYXNlLCAnLycpOworCX0KKworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJaWYgKG1hdGNoICE9IGFsbF9lbnRyaWVzX2ludGVyZXN0aW5nKSB7CisJCQltYXRjaCA9IHRyZWVfZW50cnlfaW50ZXJlc3RpbmcoJmVudHJ5LCBiYXNlLCAwLAorCQkJCQkJICAgICAgICZyZXZzLT5kaWZmb3B0LnBhdGhzcGVjKTsKKwkJCWlmIChtYXRjaCA9PSBhbGxfZW50cmllc19ub3RfaW50ZXJlc3RpbmcpCisJCQkJYnJlYWs7CisJCQlpZiAobWF0Y2ggPT0gZW50cnlfbm90X2ludGVyZXN0aW5nKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpCisJCQlwcm9jZXNzX3RyZWUocmV2cywKKwkJCQkgICAgIGxvb2t1cF90cmVlKGVudHJ5LnNoYTEpLAorCQkJCSAgICAgc2hvdywgJm1lLCBiYXNlLCBlbnRyeS5wYXRoLAorCQkJCSAgICAgY2JfZGF0YSk7CisJCWVsc2UgaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQorCQkJcHJvY2Vzc19naXRsaW5rKHJldnMsIGVudHJ5LnNoYTEsCisJCQkJCXNob3csICZtZSwgZW50cnkucGF0aCwKKwkJCQkJY2JfZGF0YSk7CisJCWVsc2UKKwkJCXByb2Nlc3NfYmxvYihyZXZzLAorCQkJCSAgICAgbG9va3VwX2Jsb2IoZW50cnkuc2hhMSksCisJCQkJICAgICBzaG93LCAmbWUsIGVudHJ5LnBhdGgsCisJCQkJICAgICBjYl9kYXRhKTsKKwl9CisJc3RyYnVmX3NldGxlbihiYXNlLCBiYXNlbGVuKTsKKwlmcmVlKHRyZWUtPmJ1ZmZlcik7CisJdHJlZS0+YnVmZmVyID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgbWFya19lZGdlX3BhcmVudHNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCSAgICBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgICBzaG93X2VkZ2VfZm4gc2hvd19lZGdlKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKworCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50czsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJaWYgKCEocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCWNvbnRpbnVlOworCQltYXJrX3RyZWVfdW5pbnRlcmVzdGluZyhwYXJlbnQtPnRyZWUpOworCQlpZiAocmV2cy0+ZWRnZV9oaW50ICYmICEocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBTSE9XTikpIHsKKwkJCXBhcmVudC0+b2JqZWN0LmZsYWdzIHw9IFNIT1dOOworCQkJc2hvd19lZGdlKHBhcmVudCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgbWFya19lZGdlc191bmludGVyZXN0aW5nKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCSAgICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgIHNob3dfZWRnZV9mbiBzaG93X2VkZ2UpCit7CisJZm9yICggOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJCW1hcmtfdHJlZV91bmludGVyZXN0aW5nKGNvbW1pdC0+dHJlZSk7CisJCQljb250aW51ZTsKKwkJfQorCQltYXJrX2VkZ2VfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCwgcmV2cywgc2hvd19lZGdlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wZW5kaW5nX3RyZWUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJnRyZWUtPm9iamVjdCwgIiIpOworfQorCit2b2lkIHRyYXZlcnNlX2NvbW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgc2hvd19jb21taXRfZm4gc2hvd19jb21taXQsCisJCQkgIHNob3dfb2JqZWN0X2ZuIHNob3dfb2JqZWN0LAorCQkJICB2b2lkICpkYXRhKQoreworCWludCBpOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgc3RyYnVmIGJhc2U7CisKKwlzdHJidWZfaW5pdCgmYmFzZSwgUEFUSF9NQVgpOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldnMpKSAhPSBOVUxMKSB7CisJCS8qCisJCSAqIGFuIHVuaW50ZXJlc3RpbmcgYm91bmRhcnkgY29tbWl0IG1heSBub3QgaGF2ZSBpdHMgdHJlZQorCQkgKiBwYXJzZWQgeWV0LCBidXQgd2UgYXJlIG5vdCBnb2luZyB0byBzaG93IHRoZW0gYW55d2F5CisJCSAqLworCQlpZiAoY29tbWl0LT50cmVlKQorCQkJYWRkX3BlbmRpbmdfdHJlZShyZXZzLCBjb21taXQtPnRyZWUpOworCQlzaG93X2NvbW1pdChjb21taXQsIGRhdGEpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKnBlbmRpbmcgPSByZXZzLT5wZW5kaW5nLm9iamVjdHMgKyBpOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwZW5kaW5nLT5pdGVtOworCQljb25zdCBjaGFyICpuYW1lID0gcGVuZGluZy0+bmFtZTsKKwkJaWYgKG9iai0+ZmxhZ3MgJiAoVU5JTlRFUkVTVElORyB8IFNFRU4pKQorCQkJY29udGludWU7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykgeworCQkJb2JqLT5mbGFncyB8PSBTRUVOOworCQkJc2hvd19vYmplY3Qob2JqLCBOVUxMLCBuYW1lLCBkYXRhKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJCXByb2Nlc3NfdHJlZShyZXZzLCAoc3RydWN0IHRyZWUgKilvYmosIHNob3dfb2JqZWN0LAorCQkJCSAgICAgTlVMTCwgJmJhc2UsIG5hbWUsIGRhdGEpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgeworCQkJcHJvY2Vzc19ibG9iKHJldnMsIChzdHJ1Y3QgYmxvYiAqKW9iaiwgc2hvd19vYmplY3QsCisJCQkJICAgICBOVUxMLCBuYW1lLCBkYXRhKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRpZSgidW5rbm93biBwZW5kaW5nIG9iamVjdCAlcyAoJXMpIiwKKwkJICAgIHNoYTFfdG9faGV4KG9iai0+c2hhMSksIG5hbWUpOworCX0KKwlpZiAocmV2cy0+cGVuZGluZy5ucikgeworCQlmcmVlKHJldnMtPnBlbmRpbmcub2JqZWN0cyk7CisJCXJldnMtPnBlbmRpbmcubnIgPSAwOworCQlyZXZzLT5wZW5kaW5nLmFsbG9jID0gMDsKKwkJcmV2cy0+cGVuZGluZy5vYmplY3RzID0gTlVMTDsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJhc2UpOworfQpkaWZmIC0tZ2l0IGEvbGlzdC1vYmplY3RzLmggYi9saXN0LW9iamVjdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGI3YmI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlzdC1vYmplY3RzLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBMSVNUX09CSkVDVFNfSAorI2RlZmluZSBMSVNUX09CSkVDVFNfSAorCit0eXBlZGVmIHZvaWQgKCpzaG93X2NvbW1pdF9mbikoc3RydWN0IGNvbW1pdCAqLCB2b2lkICopOwordHlwZWRlZiB2b2lkICgqc2hvd19vYmplY3RfZm4pKHN0cnVjdCBvYmplY3QgKiwgY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7Cit2b2lkIHRyYXZlcnNlX2NvbW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqLCBzaG93X2NvbW1pdF9mbiwgc2hvd19vYmplY3RfZm4sIHZvaWQgKik7CisKK3R5cGVkZWYgdm9pZCAoKnNob3dfZWRnZV9mbikoc3RydWN0IGNvbW1pdCAqKTsKK3ZvaWQgbWFya19lZGdlc191bmludGVyZXN0aW5nKHN0cnVjdCBjb21taXRfbGlzdCAqLCBzdHJ1Y3QgcmV2X2luZm8gKiwgc2hvd19lZGdlX2ZuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9sbC1tZXJnZS5jIGIvbGwtbWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2VhMzNiCi0tLSAvZGV2L251bGwKKysrIGIvbGwtbWVyZ2UuYwpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIExvdyBsZXZlbCAzLXdheSBpbi1jb3JlIGZpbGUgbWVyZ2UuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAibGwtbWVyZ2UuaCIKKworc3RydWN0IGxsX21lcmdlX2RyaXZlcjsKKwordHlwZWRlZiBpbnQgKCpsbF9tZXJnZV9mbikoY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqLAorCQkJICAgbW1idWZmZXJfdCAqcmVzdWx0LAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIG1tZmlsZV90ICpvcmlnLCBjb25zdCBjaGFyICpvcmlnX25hbWUsCisJCQkgICBtbWZpbGVfdCAqc3JjMSwgY29uc3QgY2hhciAqbmFtZTEsCisJCQkgICBtbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCisJCQkgICBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyAqb3B0cywKKwkJCSAgIGludCBtYXJrZXJfc2l6ZSk7CisKK3N0cnVjdCBsbF9tZXJnZV9kcml2ZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZGVzY3JpcHRpb247CisJbGxfbWVyZ2VfZm4gZm47CisJY29uc3QgY2hhciAqcmVjdXJzaXZlOworCXN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKm5leHQ7CisJY2hhciAqY21kbGluZTsKK307CisKKy8qCisgKiBCdWlsdC1pbiBsb3ctbGV2ZWxzCisgKi8KK3N0YXRpYyBpbnQgbGxfYmluYXJ5X21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRydl91bnVzZWQsCisJCQkgICBtbWJ1ZmZlcl90ICpyZXN1bHQsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgbW1maWxlX3QgKm9yaWcsIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSwKKwkJCSAgIG1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCSAgIG1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzLAorCQkJICAgaW50IG1hcmtlcl9zaXplKQoreworCW1tZmlsZV90ICpzdG9sZW47CisJYXNzZXJ0KG9wdHMpOworCisJLyoKKwkgKiBUaGUgdGVudGF0aXZlIG1lcmdlIHJlc3VsdCBpcyB0aGUgb3IgY29tbW9uIGFuY2VzdG9yIGZvciBhbiBpbnRlcm5hbCBtZXJnZS4KKwkgKi8KKwlpZiAob3B0cy0+dmlydHVhbF9hbmNlc3RvcikgeworCQlzdG9sZW4gPSBvcmlnOworCX0gZWxzZSB7CisJCXN3aXRjaCAob3B0cy0+dmFyaWFudCkgeworCQlkZWZhdWx0OgorCQkJd2FybmluZygiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogJXMgKCVzIHZzLiAlcykiLAorCQkJCXBhdGgsIG5hbWUxLCBuYW1lMik7CisJCQkvKiBmYWxsdGhydSAqLworCQljYXNlIFhETF9NRVJHRV9GQVZPUl9PVVJTOgorCQkJc3RvbGVuID0gc3JjMTsKKwkJCWJyZWFrOworCQljYXNlIFhETF9NRVJHRV9GQVZPUl9USEVJUlM6CisJCQlzdG9sZW4gPSBzcmMyOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXN1bHQtPnB0ciA9IHN0b2xlbi0+cHRyOworCXJlc3VsdC0+c2l6ZSA9IHN0b2xlbi0+c2l6ZTsKKwlzdG9sZW4tPnB0ciA9IE5VTEw7CisKKwkvKgorCSAqIFdpdGggLVh0aGVpcnMgb3IgLVhvdXJzLCB3ZSBoYXZlIGNsZWFubHkgbWVyZ2VkOworCSAqIG90aGVyd2lzZSB3ZSBnb3QgYSBjb25mbGljdC4KKwkgKi8KKwlyZXR1cm4gKG9wdHMtPnZhcmlhbnQgPyAwIDogMSk7Cit9CisKK3N0YXRpYyBpbnQgbGxfeGRsX21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRydl91bnVzZWQsCisJCQltbWJ1ZmZlcl90ICpyZXN1bHQsCisJCQljb25zdCBjaGFyICpwYXRoLAorCQkJbW1maWxlX3QgKm9yaWcsIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSwKKwkJCW1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCW1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCWNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzLAorCQkJaW50IG1hcmtlcl9zaXplKQoreworCXhtcGFyYW1fdCB4bXA7CisJYXNzZXJ0KG9wdHMpOworCisJaWYgKGJ1ZmZlcl9pc19iaW5hcnkob3JpZy0+cHRyLCBvcmlnLT5zaXplKSB8fAorCSAgICBidWZmZXJfaXNfYmluYXJ5KHNyYzEtPnB0ciwgc3JjMS0+c2l6ZSkgfHwKKwkgICAgYnVmZmVyX2lzX2JpbmFyeShzcmMyLT5wdHIsIHNyYzItPnNpemUpKSB7CisJCXJldHVybiBsbF9iaW5hcnlfbWVyZ2UoZHJ2X3VudXNlZCwgcmVzdWx0LAorCQkJCSAgICAgICBwYXRoLAorCQkJCSAgICAgICBvcmlnLCBvcmlnX25hbWUsCisJCQkJICAgICAgIHNyYzEsIG5hbWUxLAorCQkJCSAgICAgICBzcmMyLCBuYW1lMiwKKwkJCQkgICAgICAgb3B0cywgbWFya2VyX3NpemUpOworCX0KKworCW1lbXNldCgmeG1wLCAwLCBzaXplb2YoeG1wKSk7CisJeG1wLmxldmVsID0gWERMX01FUkdFX1pFQUxPVVM7CisJeG1wLmZhdm9yID0gb3B0cy0+dmFyaWFudDsKKwl4bXAueHBwLmZsYWdzID0gb3B0cy0+eGRsX29wdHM7CisJaWYgKGdpdF94bWVyZ2Vfc3R5bGUgPj0gMCkKKwkJeG1wLnN0eWxlID0gZ2l0X3htZXJnZV9zdHlsZTsKKwlpZiAobWFya2VyX3NpemUgPiAwKQorCQl4bXAubWFya2VyX3NpemUgPSBtYXJrZXJfc2l6ZTsKKwl4bXAuYW5jZXN0b3IgPSBvcmlnX25hbWU7CisJeG1wLmZpbGUxID0gbmFtZTE7CisJeG1wLmZpbGUyID0gbmFtZTI7CisJcmV0dXJuIHhkbF9tZXJnZShvcmlnLCBzcmMxLCBzcmMyLCAmeG1wLCByZXN1bHQpOworfQorCitzdGF0aWMgaW50IGxsX3VuaW9uX21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRydl91bnVzZWQsCisJCQkgIG1tYnVmZmVyX3QgKnJlc3VsdCwKKwkJCSAgY29uc3QgY2hhciAqcGF0aF91bnVzZWQsCisJCQkgIG1tZmlsZV90ICpvcmlnLCBjb25zdCBjaGFyICpvcmlnX25hbWUsCisJCQkgIG1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCSAgbW1maWxlX3QgKnNyYzIsIGNvbnN0IGNoYXIgKm5hbWUyLAorCQkJICBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyAqb3B0cywKKwkJCSAgaW50IG1hcmtlcl9zaXplKQoreworCS8qIFVzZSB1bmlvbiBmYXZvciAqLworCXN0cnVjdCBsbF9tZXJnZV9vcHRpb25zIG87CisJYXNzZXJ0KG9wdHMpOworCW8gPSAqb3B0czsKKwlvLnZhcmlhbnQgPSBYRExfTUVSR0VfRkFWT1JfVU5JT047CisJcmV0dXJuIGxsX3hkbF9tZXJnZShkcnZfdW51c2VkLCByZXN1bHQsIHBhdGhfdW51c2VkLAorCQkJICAgIG9yaWcsIE5VTEwsIHNyYzEsIE5VTEwsIHNyYzIsIE5VTEwsCisJCQkgICAgJm8sIG1hcmtlcl9zaXplKTsKK30KKworI2RlZmluZSBMTF9CSU5BUllfTUVSR0UgMAorI2RlZmluZSBMTF9URVhUX01FUkdFIDEKKyNkZWZpbmUgTExfVU5JT05fTUVSR0UgMgorc3RhdGljIHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgbGxfbWVyZ2VfZHJ2W10gPSB7CisJeyAiYmluYXJ5IiwgImJ1aWx0LWluIGJpbmFyeSBtZXJnZSIsIGxsX2JpbmFyeV9tZXJnZSB9LAorCXsgInRleHQiLCAiYnVpbHQtaW4gMy13YXkgdGV4dCBtZXJnZSIsIGxsX3hkbF9tZXJnZSB9LAorCXsgInVuaW9uIiwgImJ1aWx0LWluIHVuaW9uIG1lcmdlIiwgbGxfdW5pb25fbWVyZ2UgfSwKK307CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV90ZW1wKG1tZmlsZV90ICpzcmMsIGNoYXIgKnBhdGgpCit7CisJaW50IGZkOworCisJc3RyY3B5KHBhdGgsICIubWVyZ2VfZmlsZV9YWFhYWFgiKTsKKwlmZCA9IHhta3N0ZW1wKHBhdGgpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzcmMtPnB0ciwgc3JjLT5zaXplKSAhPSBzcmMtPnNpemUpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOworCWNsb3NlKGZkKTsKK30KKworLyoKKyAqIFVzZXIgZGVmaW5lZCBsb3ctbGV2ZWwgbWVyZ2UgZHJpdmVyIHN1cHBvcnQuCisgKi8KK3N0YXRpYyBpbnQgbGxfZXh0X21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmZuLAorCQkJbW1idWZmZXJfdCAqcmVzdWx0LAorCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCW1tZmlsZV90ICpvcmlnLCBjb25zdCBjaGFyICpvcmlnX25hbWUsCisJCQltbWZpbGVfdCAqc3JjMSwgY29uc3QgY2hhciAqbmFtZTEsCisJCQltbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCisJCQljb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyAqb3B0cywKKwkJCWludCBtYXJrZXJfc2l6ZSkKK3sKKwljaGFyIHRlbXBbNF1bNTBdOworCXN0cnVjdCBzdHJidWYgY21kID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1Zl9leHBhbmRfZGljdF9lbnRyeSBkaWN0WzVdOworCWNvbnN0IGNoYXIgKmFyZ3NbXSA9IHsgTlVMTCwgTlVMTCB9OworCWludCBzdGF0dXMsIGZkLCBpOworCXN0cnVjdCBzdGF0IHN0OworCWFzc2VydChvcHRzKTsKKworCWRpY3RbMF0ucGxhY2Vob2xkZXIgPSAiTyI7IGRpY3RbMF0udmFsdWUgPSB0ZW1wWzBdOworCWRpY3RbMV0ucGxhY2Vob2xkZXIgPSAiQSI7IGRpY3RbMV0udmFsdWUgPSB0ZW1wWzFdOworCWRpY3RbMl0ucGxhY2Vob2xkZXIgPSAiQiI7IGRpY3RbMl0udmFsdWUgPSB0ZW1wWzJdOworCWRpY3RbM10ucGxhY2Vob2xkZXIgPSAiTCI7IGRpY3RbM10udmFsdWUgPSB0ZW1wWzNdOworCWRpY3RbNF0ucGxhY2Vob2xkZXIgPSBOVUxMOyBkaWN0WzRdLnZhbHVlID0gTlVMTDsKKworCWlmIChmbi0+Y21kbGluZSA9PSBOVUxMKQorCQlkaWUoImN1c3RvbSBtZXJnZSBkcml2ZXIgJXMgbGFja3MgY29tbWFuZCBsaW5lLiIsIGZuLT5uYW1lKTsKKworCXJlc3VsdC0+cHRyID0gTlVMTDsKKwlyZXN1bHQtPnNpemUgPSAwOworCWNyZWF0ZV90ZW1wKG9yaWcsIHRlbXBbMF0pOworCWNyZWF0ZV90ZW1wKHNyYzEsIHRlbXBbMV0pOworCWNyZWF0ZV90ZW1wKHNyYzIsIHRlbXBbMl0pOworCXNwcmludGYodGVtcFszXSwgIiVkIiwgbWFya2VyX3NpemUpOworCisJc3RyYnVmX2V4cGFuZCgmY21kLCBmbi0+Y21kbGluZSwgc3RyYnVmX2V4cGFuZF9kaWN0X2NiLCAmZGljdCk7CisKKwlhcmdzWzBdID0gY21kLmJ1ZjsKKwlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmdzLCBSVU5fVVNJTkdfU0hFTEwpOworCWZkID0gb3Blbih0ZW1wWzFdLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZ290byBiYWQ7CisJaWYgKGZzdGF0KGZkLCAmc3QpKQorCQlnb3RvIGNsb3NlX2JhZDsKKwlyZXN1bHQtPnNpemUgPSBzdC5zdF9zaXplOworCXJlc3VsdC0+cHRyID0geG1hbGxvYyhyZXN1bHQtPnNpemUgKyAxKTsKKwlpZiAocmVhZF9pbl9mdWxsKGZkLCByZXN1bHQtPnB0ciwgcmVzdWx0LT5zaXplKSAhPSByZXN1bHQtPnNpemUpIHsKKwkJZnJlZShyZXN1bHQtPnB0cik7CisJCXJlc3VsdC0+cHRyID0gTlVMTDsKKwkJcmVzdWx0LT5zaXplID0gMDsKKwl9CisgY2xvc2VfYmFkOgorCWNsb3NlKGZkKTsKKyBiYWQ6CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJdW5saW5rX29yX3dhcm4odGVtcFtpXSk7CisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIG1lcmdlLmRlZmF1bHQgYW5kIG1lcmdlLmRyaXZlciBjb25maWd1cmF0aW9uIGl0ZW1zCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpsbF91c2VyX21lcmdlLCAqKmxsX3VzZXJfbWVyZ2VfdGFpbDsKK3N0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X2xsX21lcmdlOworCitzdGF0aWMgaW50IHJlYWRfbWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmZuOworCWNvbnN0IGNoYXIgKmVwLCAqbmFtZTsKKwlpbnQgbmFtZWxlbjsKKworCWlmICghc3RyY21wKHZhciwgIm1lcmdlLmRlZmF1bHQiKSkgeworCQlpZiAodmFsdWUpCisJCQlkZWZhdWx0X2xsX21lcmdlID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIGFueXRoaW5nIGJ1dCAibWVyZ2UuPG5hbWU+LnZhcmlhYmxlIjsKKwkgKiBlc3BlY2lhbGx5LCB3ZSBkbyBub3Qgd2FudCB0byBsb29rIGF0IHZhcmlhYmxlcyBzdWNoIGFzCisJICogIm1lcmdlLnN1bW1hcnkiLCAibWVyZ2UudG9vbCIsIGFuZCAibWVyZ2UudmVyYm9zaXR5Ii4KKwkgKi8KKwlpZiAocHJlZml4Y21wKHZhciwgIm1lcmdlLiIpIHx8IChlcCA9IHN0cnJjaHIodmFyLCAnLicpKSA9PSB2YXIgKyA1KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRmluZCBleGlzdGluZyBvbmUgYXMgd2UgbWlnaHQgYmUgcHJvY2Vzc2luZyBtZXJnZS48bmFtZT4udmFyMgorCSAqIGFmdGVyIHNlZWluZyBtZXJnZS48bmFtZT4udmFyMS4KKwkgKi8KKwluYW1lID0gdmFyICsgNjsKKwluYW1lbGVuID0gZXAgLSBuYW1lOworCWZvciAoZm4gPSBsbF91c2VyX21lcmdlOyBmbjsgZm4gPSBmbi0+bmV4dCkKKwkJaWYgKCFzdHJuY21wKGZuLT5uYW1lLCBuYW1lLCBuYW1lbGVuKSAmJiAhZm4tPm5hbWVbbmFtZWxlbl0pCisJCQlicmVhazsKKwlpZiAoIWZuKSB7CisJCWZuID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxsX21lcmdlX2RyaXZlcikpOworCQlmbi0+bmFtZSA9IHhtZW1kdXB6KG5hbWUsIG5hbWVsZW4pOworCQlmbi0+Zm4gPSBsbF9leHRfbWVyZ2U7CisJCSpsbF91c2VyX21lcmdlX3RhaWwgPSBmbjsKKwkJbGxfdXNlcl9tZXJnZV90YWlsID0gJihmbi0+bmV4dCk7CisJfQorCisJZXArKzsKKworCWlmICghc3RyY21wKCJuYW1lIiwgZXApKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBsYWNrcyB2YWx1ZSIsIHZhcik7CisJCWZuLT5kZXNjcmlwdGlvbiA9IHhzdHJkdXAodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiZHJpdmVyIiwgZXApKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBsYWNrcyB2YWx1ZSIsIHZhcik7CisJCS8qCisJCSAqIG1lcmdlLjxuYW1lPi5kcml2ZXIgc3BlY2lmaWVzIHRoZSBjb21tYW5kIGxpbmU6CisJCSAqCisJCSAqCWNvbW1hbmQtbGluZQorCQkgKgorCQkgKiBUaGUgY29tbWFuZC1saW5lIHdpbGwgYmUgaW50ZXJwb2xhdGVkIHdpdGggdGhlIGZvbGxvd2luZworCQkgKiB0b2tlbnMgYW5kIGlzIGdpdmVuIHRvIHRoZSBzaGVsbDoKKwkJICoKKwkJICogICAgJU8gLSB0ZW1wb3JhcnkgZmlsZSBuYW1lIGZvciB0aGUgbWVyZ2UgYmFzZS4KKwkJICogICAgJUEgLSB0ZW1wb3JhcnkgZmlsZSBuYW1lIGZvciBvdXIgdmVyc2lvbi4KKwkJICogICAgJUIgLSB0ZW1wb3JhcnkgZmlsZSBuYW1lIGZvciB0aGUgb3RoZXIgYnJhbmNoZXMnIHZlcnNpb24uCisJCSAqICAgICVMIC0gY29uZmxpY3QgbWFya2VyIGxlbmd0aAorCQkgKgorCQkgKiBUaGUgZXh0ZXJuYWwgbWVyZ2UgZHJpdmVyIHNob3VsZCB3cml0ZSB0aGUgcmVzdWx0cyBpbiB0aGUKKwkJICogZmlsZSBuYW1lZCBieSAlQSwgYW5kIHNpZ25hbCB0aGF0IGl0IGhhcyBkb25lIHdpdGggemVybyBleGl0CisJCSAqIHN0YXR1cy4KKwkJICovCisJCWZuLT5jbWRsaW5lID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJyZWN1cnNpdmUiLCBlcCkpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBlcnJvcigiJXM6IGxhY2tzIHZhbHVlIiwgdmFyKTsKKwkJZm4tPnJlY3Vyc2l2ZSA9IHhzdHJkdXAodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZV9sbF9tZXJnZSh2b2lkKQoreworCWlmIChsbF91c2VyX21lcmdlX3RhaWwpCisJCXJldHVybjsKKwlsbF91c2VyX21lcmdlX3RhaWwgPSAmbGxfdXNlcl9tZXJnZTsKKwlnaXRfY29uZmlnKHJlYWRfbWVyZ2VfY29uZmlnLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmZpbmRfbGxfbWVyZ2VfZHJpdmVyKGNvbnN0IGNoYXIgKm1lcmdlX2F0dHIpCit7CisJc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZm47CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgaTsKKworCWluaXRpYWxpemVfbGxfbWVyZ2UoKTsKKworCWlmIChBVFRSX1RSVUUobWVyZ2VfYXR0cikpCisJCXJldHVybiAmbGxfbWVyZ2VfZHJ2W0xMX1RFWFRfTUVSR0VdOworCWVsc2UgaWYgKEFUVFJfRkFMU0UobWVyZ2VfYXR0cikpCisJCXJldHVybiAmbGxfbWVyZ2VfZHJ2W0xMX0JJTkFSWV9NRVJHRV07CisJZWxzZSBpZiAoQVRUUl9VTlNFVChtZXJnZV9hdHRyKSkgeworCQlpZiAoIWRlZmF1bHRfbGxfbWVyZ2UpCisJCQlyZXR1cm4gJmxsX21lcmdlX2RydltMTF9URVhUX01FUkdFXTsKKwkJZWxzZQorCQkJbmFtZSA9IGRlZmF1bHRfbGxfbWVyZ2U7CisJfQorCWVsc2UKKwkJbmFtZSA9IG1lcmdlX2F0dHI7CisKKwlmb3IgKGZuID0gbGxfdXNlcl9tZXJnZTsgZm47IGZuID0gZm4tPm5leHQpCisJCWlmICghc3RyY21wKGZuLT5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiBmbjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxsX21lcmdlX2Rydik7IGkrKykKKwkJaWYgKCFzdHJjbXAobGxfbWVyZ2VfZHJ2W2ldLm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuICZsbF9tZXJnZV9kcnZbaV07CisKKwkvKiBkZWZhdWx0IHRvIHRoZSAzLXdheSAqLworCXJldHVybiAmbGxfbWVyZ2VfZHJ2W0xMX1RFWFRfTUVSR0VdOworfQorCitzdGF0aWMgaW50IGdpdF9wYXRoX2NoZWNrX21lcmdlKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBnaXRfYXR0cl9jaGVjayBjaGVja1syXSkKK3sKKwlpZiAoIWNoZWNrWzBdLmF0dHIpIHsKKwkJY2hlY2tbMF0uYXR0ciA9IGdpdF9hdHRyKCJtZXJnZSIpOworCQljaGVja1sxXS5hdHRyID0gZ2l0X2F0dHIoImNvbmZsaWN0LW1hcmtlci1zaXplIik7CisJfQorCXJldHVybiBnaXRfY2hlY2tfYXR0cihwYXRoLCAyLCBjaGVjayk7Cit9CisKK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZV9maWxlKG1tZmlsZV90ICptbSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHN0cmJ1ZiA9IFNUUkJVRl9JTklUOworCWlmIChyZW5vcm1hbGl6ZV9idWZmZXIocGF0aCwgbW0tPnB0ciwgbW0tPnNpemUsICZzdHJidWYpKSB7CisJCWZyZWUobW0tPnB0cik7CisJCW1tLT5zaXplID0gc3RyYnVmLmxlbjsKKwkJbW0tPnB0ciA9IHN0cmJ1Zl9kZXRhY2goJnN0cmJ1ZiwgTlVMTCk7CisJfQorfQorCitpbnQgbGxfbWVyZ2UobW1idWZmZXJfdCAqcmVzdWx0X2J1ZiwKKwkgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJICAgICBtbWZpbGVfdCAqYW5jZXN0b3IsIGNvbnN0IGNoYXIgKmFuY2VzdG9yX2xhYmVsLAorCSAgICAgbW1maWxlX3QgKm91cnMsIGNvbnN0IGNoYXIgKm91cl9sYWJlbCwKKwkgICAgIG1tZmlsZV90ICp0aGVpcnMsIGNvbnN0IGNoYXIgKnRoZWlyX2xhYmVsLAorCSAgICAgY29uc3Qgc3RydWN0IGxsX21lcmdlX29wdGlvbnMgKm9wdHMpCit7CisJc3RhdGljIHN0cnVjdCBnaXRfYXR0cl9jaGVjayBjaGVja1syXTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGxsX21lcmdlX29wdGlvbnMgZGVmYXVsdF9vcHRzOworCWNvbnN0IGNoYXIgKmxsX2RyaXZlcl9uYW1lID0gTlVMTDsKKwlpbnQgbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCWNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRyaXZlcjsKKworCWlmICghb3B0cykKKwkJb3B0cyA9ICZkZWZhdWx0X29wdHM7CisKKwlpZiAob3B0cy0+cmVub3JtYWxpemUpIHsKKwkJbm9ybWFsaXplX2ZpbGUoYW5jZXN0b3IsIHBhdGgpOworCQlub3JtYWxpemVfZmlsZShvdXJzLCBwYXRoKTsKKwkJbm9ybWFsaXplX2ZpbGUodGhlaXJzLCBwYXRoKTsKKwl9CisJaWYgKCFnaXRfcGF0aF9jaGVja19tZXJnZShwYXRoLCBjaGVjaykpIHsKKwkJbGxfZHJpdmVyX25hbWUgPSBjaGVja1swXS52YWx1ZTsKKwkJaWYgKGNoZWNrWzFdLnZhbHVlKSB7CisJCQltYXJrZXJfc2l6ZSA9IGF0b2koY2hlY2tbMV0udmFsdWUpOworCQkJaWYgKG1hcmtlcl9zaXplIDw9IDApCisJCQkJbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCQl9CisJfQorCWRyaXZlciA9IGZpbmRfbGxfbWVyZ2VfZHJpdmVyKGxsX2RyaXZlcl9uYW1lKTsKKwlpZiAob3B0cy0+dmlydHVhbF9hbmNlc3RvciAmJiBkcml2ZXItPnJlY3Vyc2l2ZSkKKwkJZHJpdmVyID0gZmluZF9sbF9tZXJnZV9kcml2ZXIoZHJpdmVyLT5yZWN1cnNpdmUpOworCXJldHVybiBkcml2ZXItPmZuKGRyaXZlciwgcmVzdWx0X2J1ZiwgcGF0aCwgYW5jZXN0b3IsIGFuY2VzdG9yX2xhYmVsLAorCQkJICBvdXJzLCBvdXJfbGFiZWwsIHRoZWlycywgdGhlaXJfbGFiZWwsCisJCQkgIG9wdHMsIG1hcmtlcl9zaXplKTsKK30KKworaW50IGxsX21lcmdlX21hcmtlcl9zaXplKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBnaXRfYXR0cl9jaGVjayBjaGVjazsKKwlpbnQgbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCisJaWYgKCFjaGVjay5hdHRyKQorCQljaGVjay5hdHRyID0gZ2l0X2F0dHIoImNvbmZsaWN0LW1hcmtlci1zaXplIik7CisJaWYgKCFnaXRfY2hlY2tfYXR0cihwYXRoLCAxLCAmY2hlY2spICYmIGNoZWNrLnZhbHVlKSB7CisJCW1hcmtlcl9zaXplID0gYXRvaShjaGVjay52YWx1ZSk7CisJCWlmIChtYXJrZXJfc2l6ZSA8PSAwKQorCQkJbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCX0KKwlyZXR1cm4gbWFya2VyX3NpemU7Cit9CmRpZmYgLS1naXQgYS9sbC1tZXJnZS5oIGIvbGwtbWVyZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDRhMzFmCi0tLSAvZGV2L251bGwKKysrIGIvbGwtbWVyZ2UuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogTG93IGxldmVsIDMtd2F5IGluLWNvcmUgZmlsZSBtZXJnZS4KKyAqLworCisjaWZuZGVmIExMX01FUkdFX0gKKyNkZWZpbmUgTExfTUVSR0VfSAorCitzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyB7CisJdW5zaWduZWQgdmlydHVhbF9hbmNlc3RvciA6IDE7CisJdW5zaWduZWQgdmFyaWFudCA6IDI7CS8qIGZhdm9yIG91cnMsIGZhdm9yIHRoZWlycywgb3IgdW5pb24gbWVyZ2UgKi8KKwl1bnNpZ25lZCByZW5vcm1hbGl6ZSA6IDE7CisJbG9uZyB4ZGxfb3B0czsKK307CisKK2ludCBsbF9tZXJnZShtbWJ1ZmZlcl90ICpyZXN1bHRfYnVmLAorCSAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkgICAgIG1tZmlsZV90ICphbmNlc3RvciwgY29uc3QgY2hhciAqYW5jZXN0b3JfbGFiZWwsCisJICAgICBtbWZpbGVfdCAqb3VycywgY29uc3QgY2hhciAqb3VyX2xhYmVsLAorCSAgICAgbW1maWxlX3QgKnRoZWlycywgY29uc3QgY2hhciAqdGhlaXJfbGFiZWwsCisJICAgICBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyAqb3B0cyk7CisKK2ludCBsbF9tZXJnZV9tYXJrZXJfc2l6ZShjb25zdCBjaGFyICpwYXRoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9sb2NrZmlsZS5jIGIvbG9ja2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmZiNzdiCi0tLSAvZGV2L251bGwKKysrIGIvbG9ja2ZpbGUuYwpAQCAtMCwwICsxLDI4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZV9saXN0Oworc3RhdGljIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9pbmRleF9vdXRwdXQ7CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9sb2NrX2ZpbGUodm9pZCkKK3sKKwlwaWRfdCBtZSA9IGdldHBpZCgpOworCisJd2hpbGUgKGxvY2tfZmlsZV9saXN0KSB7CisJCWlmIChsb2NrX2ZpbGVfbGlzdC0+b3duZXIgPT0gbWUgJiYKKwkJICAgIGxvY2tfZmlsZV9saXN0LT5maWxlbmFtZVswXSkgeworCQkJaWYgKGxvY2tfZmlsZV9saXN0LT5mZCA+PSAwKQorCQkJCWNsb3NlKGxvY2tfZmlsZV9saXN0LT5mZCk7CisJCQl1bmxpbmtfb3Jfd2Fybihsb2NrX2ZpbGVfbGlzdC0+ZmlsZW5hbWUpOworCQl9CisJCWxvY2tfZmlsZV9saXN0ID0gbG9ja19maWxlX2xpc3QtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCByZW1vdmVfbG9ja19maWxlX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJcmVtb3ZlX2xvY2tfZmlsZSgpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCisvKgorICogcCA9IGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggbmFtZQorICoKKyAqIFJldHVybiBhIHBvaW50ZXIgaW50byBwIHNob3dpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGFzdCBwYXRoIG5hbWUKKyAqIGVsZW1lbnQuICBJZiBwIGlzIGVtcHR5IG9yIHRoZSByb290IGRpcmVjdG9yeSAoIi8iKSwganVzdCByZXR1cm4gcC4KKyAqLworc3RhdGljIGNoYXIgKmxhc3RfcGF0aF9lbG0oY2hhciAqcCkKK3sKKwkvKiByIHN0YXJ0cyBwb2ludGluZyB0byBudWxsIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyAqLworCWNoYXIgKnIgPSBzdHJjaHIocCwgJ1wwJyk7CisKKwlpZiAociA9PSBwKQorCQlyZXR1cm4gcDsgLyoganVzdCByZXR1cm4gZW1wdHkgc3RyaW5nICovCisKKwlyLS07IC8qIGJhY2sgdXAgdG8gbGFzdCBub24tbnVsbCBjaGFyYWN0ZXIgKi8KKworCS8qIGJhY2sgdXAgcGFzdCB0cmFpbGluZyBzbGFzaGVzLCBpZiBhbnkgKi8KKwl3aGlsZSAociA+IHAgJiYgKnIgPT0gJy8nKQorCQlyLS07CisKKwkvKgorCSAqIHRoZW4gZ28gYmFja3dhcmRzIHVudGlsIEkgaGl0IGEgc2xhc2gsIG9yIHRoZSBiZWdpbm5pbmcgb2YKKwkgKiB0aGUgc3RyaW5nCisJICovCisJd2hpbGUgKHIgPiBwICYmICooci0xKSAhPSAnLycpCisJCXItLTsKKwlyZXR1cm4gcjsKK30KKworCisvKiBXZSBhbGxvdyAicmVjdXJzaXZlIiBzeW1ib2xpYyBsaW5rcy4gT25seSB3aXRoaW4gcmVhc29uLCB0aG91Z2ggKi8KKyNkZWZpbmUgTUFYREVQVEggNQorCisvKgorICogcCA9IHBhdGggdGhhdCBtYXkgYmUgYSBzeW1saW5rCisgKiBzID0gZnVsbCBzaXplIG9mIHAKKyAqCisgKiBJZiBwIGlzIGEgc3ltbGluaywgYXR0ZW1wdCB0byBvdmVyd3JpdGUgcCB3aXRoIGEgcGF0aCB0byB0aGUgcmVhbAorICogZmlsZSBvciBkaXJlY3RvcnkgKHdoaWNoIG1heSBvciBtYXkgbm90IGV4aXN0KSwgZm9sbG93aW5nIGEgY2hhaW4gb2YKKyAqIHN5bWxpbmtzIGlmIG5lY2Vzc2FyeS4gIE90aGVyd2lzZSwgbGVhdmUgcCB1bm1vZGlmaWVkLgorICoKKyAqIFRoaXMgaXMgYSBiZXN0LWVmZm9ydCByb3V0aW5lLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCBwIHdpbGwgZWl0aGVyIGJlCisgKiBsZWZ0IHVubW9kaWZpZWQgb3Igd2lsbCBuYW1lIGEgZGlmZmVyZW50IHN5bWxpbmsgaW4gYSBzeW1saW5rIGNoYWluCisgKiB0aGF0IHN0YXJ0ZWQgd2l0aCBwJ3MgaW5pdGlhbCBjb250ZW50cy4KKyAqCisgKiBBbHdheXMgcmV0dXJucyBwLgorICovCisKK3N0YXRpYyBjaGFyICpyZXNvbHZlX3N5bWxpbmsoY2hhciAqcCwgc2l6ZV90IHMpCit7CisJaW50IGRlcHRoID0gTUFYREVQVEg7CisKKwl3aGlsZSAoZGVwdGgtLSkgeworCQljaGFyIGxpbmtbUEFUSF9NQVhdOworCQlpbnQgbGlua19sZW4gPSByZWFkbGluayhwLCBsaW5rLCBzaXplb2YobGluaykpOworCQlpZiAobGlua19sZW4gPCAwKSB7CisJCQkvKiBub3QgYSBzeW1saW5rIGFueW1vcmUgKi8KKwkJCXJldHVybiBwOworCQl9CisJCWVsc2UgaWYgKGxpbmtfbGVuIDwgc2l6ZW9mKGxpbmspKQorCQkJLyogcmVhZGxpbmsoKSBuZXZlciBudWxsLXRlcm1pbmF0ZXMgKi8KKwkJCWxpbmtbbGlua19sZW5dID0gJ1wwJzsKKwkJZWxzZSB7CisJCQl3YXJuaW5nKCIlczogc3ltbGluayB0b28gbG9uZyIsIHApOworCQkJcmV0dXJuIHA7CisJCX0KKworCQlpZiAoaXNfYWJzb2x1dGVfcGF0aChsaW5rKSkgeworCQkJLyogYWJzb2x1dGUgcGF0aCBzaW1wbHkgcmVwbGFjZXMgcCAqLworCQkJaWYgKGxpbmtfbGVuIDwgcykKKwkJCQlzdHJjcHkocCwgbGluayk7CisJCQllbHNlIHsKKwkJCQl3YXJuaW5nKCIlczogc3ltbGluayB0b28gbG9uZyIsIHApOworCQkJCXJldHVybiBwOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIGxpbmsgaXMgYSByZWxhdGl2ZSBwYXRoLCBzbyBJIG11c3QgcmVwbGFjZSB0aGUKKwkJCSAqIGxhc3QgZWxlbWVudCBvZiBwIHdpdGggaXQuCisJCQkgKi8KKwkJCWNoYXIgKnIgPSAoY2hhciAqKWxhc3RfcGF0aF9lbG0ocCk7CisJCQlpZiAociAtIHAgKyBsaW5rX2xlbiA8IHMpCisJCQkJc3RyY3B5KHIsIGxpbmspOworCQkJZWxzZSB7CisJCQkJd2FybmluZygiJXM6IHN5bWxpbmsgdG9vIGxvbmciLCBwKTsKKwkJCQlyZXR1cm4gcDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcDsKK30KKworCitzdGF0aWMgaW50IGxvY2tfZmlsZShzdHJ1Y3QgbG9ja19maWxlICpsaywgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKQoreworCWlmIChzdHJsZW4ocGF0aCkgPj0gc2l6ZW9mKGxrLT5maWxlbmFtZSkpCisJCXJldHVybiAtMTsKKwlzdHJjcHkobGstPmZpbGVuYW1lLCBwYXRoKTsKKwkvKgorCSAqIHN1YnRyYWN0IDUgZnJvbSBzaXplIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIHJvb20gZm9yIGFkZGluZworCSAqICIubG9jayIgZm9yIHRoZSBsb2NrIGZpbGUgbmFtZQorCSAqLworCWlmICghKGZsYWdzICYgTE9DS19OT0RFUkVGKSkKKwkJcmVzb2x2ZV9zeW1saW5rKGxrLT5maWxlbmFtZSwgc2l6ZW9mKGxrLT5maWxlbmFtZSktNSk7CisJc3RyY2F0KGxrLT5maWxlbmFtZSwgIi5sb2NrIik7CisJbGstPmZkID0gb3Blbihsay0+ZmlsZW5hbWUsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCWlmICgwIDw9IGxrLT5mZCkgeworCQlpZiAoIWxvY2tfZmlsZV9saXN0KSB7CisJCQlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZW1vdmVfbG9ja19maWxlX29uX3NpZ25hbCk7CisJCQlhdGV4aXQocmVtb3ZlX2xvY2tfZmlsZSk7CisJCX0KKwkJbGstPm93bmVyID0gZ2V0cGlkKCk7CisJCWlmICghbGstPm9uX2xpc3QpIHsKKwkJCWxrLT5uZXh0ID0gbG9ja19maWxlX2xpc3Q7CisJCQlsb2NrX2ZpbGVfbGlzdCA9IGxrOworCQkJbGstPm9uX2xpc3QgPSAxOworCQl9CisJCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0obGstPmZpbGVuYW1lKSkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJXMiLAorCQkJCSAgICAgbGstPmZpbGVuYW1lKTsKKwl9CisJZWxzZQorCQlsay0+ZmlsZW5hbWVbMF0gPSAwOworCXJldHVybiBsay0+ZmQ7Cit9CisKK3N0YXRpYyBjaGFyICp1bmFibGVfdG9fbG9ja19tZXNzYWdlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChlcnIgPT0gRUVYSVNUKSB7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG5cbiIKKwkJICAgICJJZiBubyBvdGhlciBnaXQgcHJvY2VzcyBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBwcm9iYWJseSBtZWFucyBhXG4iCisJCSAgICAiZ2l0IHByb2Nlc3MgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllci4gTWFrZSBzdXJlIG5vIG90aGVyIGdpdFxuIgorCQkgICAgInByb2Nlc3MgaXMgcnVubmluZyBhbmQgcmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIsCisJCQkgICAgYWJzb2x1dGVfcGF0aChwYXRoKSwgc3RyZXJyb3IoZXJyKSk7CisJfSBlbHNlCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMiLAorCQkJICAgIGFic29sdXRlX3BhdGgocGF0aCksIHN0cmVycm9yKGVycikpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQorCitpbnQgdW5hYmxlX3RvX2xvY2tfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IGVycikKK3sKKwljaGFyICptc2cgPSB1bmFibGVfdG9fbG9ja19tZXNzYWdlKHBhdGgsIGVycik7CisJZXJyb3IoIiVzIiwgbXNnKTsKKwlmcmVlKG1zZyk7CisJcmV0dXJuIC0xOworfQorCitOT1JFVFVSTiB2b2lkIHVuYWJsZV90b19sb2NrX2luZGV4X2RpZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZXJyKQoreworCWRpZSgiJXMiLCB1bmFibGVfdG9fbG9ja19tZXNzYWdlKHBhdGgsIGVycikpOworfQorCitpbnQgaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShzdHJ1Y3QgbG9ja19maWxlICpsaywgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKQoreworCWludCBmZCA9IGxvY2tfZmlsZShsaywgcGF0aCwgZmxhZ3MpOworCWlmIChmZCA8IDAgJiYgKGZsYWdzICYgTE9DS19ESUVfT05fRVJST1IpKQorCQl1bmFibGVfdG9fbG9ja19pbmRleF9kaWUocGF0aCwgZXJybm8pOworCXJldHVybiBmZDsKK30KKworaW50IGhvbGRfbG9ja19maWxlX2Zvcl9hcHBlbmQoc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncykKK3sKKwlpbnQgZmQsIG9yaWdfZmQ7CisKKwlmZCA9IGxvY2tfZmlsZShsaywgcGF0aCwgZmxhZ3MpOworCWlmIChmZCA8IDApIHsKKwkJaWYgKGZsYWdzICYgTE9DS19ESUVfT05fRVJST1IpCisJCQl1bmFibGVfdG9fbG9ja19pbmRleF9kaWUocGF0aCwgZXJybm8pOworCQlyZXR1cm4gZmQ7CisJfQorCisJb3JpZ19mZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChvcmlnX2ZkIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisJCQlpZiAoZmxhZ3MgJiBMT0NLX0RJRV9PTl9FUlJPUikKKwkJCQlkaWUoImNhbm5vdCBvcGVuICclcycgZm9yIGNvcHlpbmciLCBwYXRoKTsKKwkJCWNsb3NlKGZkKTsKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IG9wZW4gJyVzJyBmb3IgY29weWluZyIsIHBhdGgpOworCQl9CisJfSBlbHNlIGlmIChjb3B5X2ZkKG9yaWdfZmQsIGZkKSkgeworCQlpZiAoZmxhZ3MgJiBMT0NLX0RJRV9PTl9FUlJPUikKKwkJCWV4aXQoMTI4KTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBmZDsKK30KKworaW50IGNsb3NlX2xvY2tfZmlsZShzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlpbnQgZmQgPSBsay0+ZmQ7CisJbGstPmZkID0gLTE7CisJcmV0dXJuIGNsb3NlKGZkKTsKK30KKworaW50IGNvbW1pdF9sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGspCit7CisJY2hhciByZXN1bHRfZmlsZVtQQVRIX01BWF07CisJc2l6ZV90IGk7CisJaWYgKGxrLT5mZCA+PSAwICYmIGNsb3NlX2xvY2tfZmlsZShsaykpCisJCXJldHVybiAtMTsKKwlzdHJjcHkocmVzdWx0X2ZpbGUsIGxrLT5maWxlbmFtZSk7CisJaSA9IHN0cmxlbihyZXN1bHRfZmlsZSkgLSA1OyAvKiAubG9jayAqLworCXJlc3VsdF9maWxlW2ldID0gMDsKKwlpZiAocmVuYW1lKGxrLT5maWxlbmFtZSwgcmVzdWx0X2ZpbGUpKQorCQlyZXR1cm4gLTE7CisJbGstPmZpbGVuYW1lWzBdID0gMDsKKwlyZXR1cm4gMDsKK30KKworaW50IGhvbGRfbG9ja2VkX2luZGV4KHN0cnVjdCBsb2NrX2ZpbGUgKmxrLCBpbnQgZGllX29uX2Vycm9yKQoreworCXJldHVybiBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKGxrLCBnZXRfaW5kZXhfZmlsZSgpLAorCQkJCQkgZGllX29uX2Vycm9yCisJCQkJCSA/IExPQ0tfRElFX09OX0VSUk9SCisJCQkJCSA6IDApOworfQorCit2b2lkIHNldF9hbHRlcm5hdGVfaW5kZXhfb3V0cHV0KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJYWx0ZXJuYXRlX2luZGV4X291dHB1dCA9IG5hbWU7Cit9CisKK2ludCBjb21taXRfbG9ja2VkX2luZGV4KHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCWlmIChhbHRlcm5hdGVfaW5kZXhfb3V0cHV0KSB7CisJCWlmIChsay0+ZmQgPj0gMCAmJiBjbG9zZV9sb2NrX2ZpbGUobGspKQorCQkJcmV0dXJuIC0xOworCQlpZiAocmVuYW1lKGxrLT5maWxlbmFtZSwgYWx0ZXJuYXRlX2luZGV4X291dHB1dCkpCisJCQlyZXR1cm4gLTE7CisJCWxrLT5maWxlbmFtZVswXSA9IDA7CisJCXJldHVybiAwOworCX0KKwllbHNlCisJCXJldHVybiBjb21taXRfbG9ja19maWxlKGxrKTsKK30KKwordm9pZCByb2xsYmFja19sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGspCit7CisJaWYgKGxrLT5maWxlbmFtZVswXSkgeworCQlpZiAobGstPmZkID49IDApCisJCQljbG9zZShsay0+ZmQpOworCQl1bmxpbmtfb3Jfd2Fybihsay0+ZmlsZW5hbWUpOworCX0KKwlsay0+ZmlsZW5hbWVbMF0gPSAwOworfQpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuYyBiL2xvZy10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5NDkzMAotLS0gL2Rldi9udWxsCisrKyBiL2xvZy10cmVlLmMKQEAgLTAsMCArMSw4MjEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJncmFwaC5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKworc3RydWN0IGRlY29yYXRpb24gbmFtZV9kZWNvcmF0aW9uID0geyAib2JqZWN0IG5hbWVzIiB9OworCitlbnVtIGRlY29yYXRpb25fdHlwZSB7CisJREVDT1JBVElPTl9OT05FID0gMCwKKwlERUNPUkFUSU9OX1JFRl9MT0NBTCwKKwlERUNPUkFUSU9OX1JFRl9SRU1PVEUsCisJREVDT1JBVElPTl9SRUZfVEFHLAorCURFQ09SQVRJT05fUkVGX1NUQVNILAorCURFQ09SQVRJT05fUkVGX0hFQUQsCisJREVDT1JBVElPTl9HUkFGVEVELAorfTsKKworc3RhdGljIGNoYXIgZGVjb3JhdGlvbl9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRVNFVCwKKwlHSVRfQ09MT1JfQk9MRF9HUkVFTiwJLyogUkVGX0xPQ0FMICovCisJR0lUX0NPTE9SX0JPTERfUkVELAkvKiBSRUZfUkVNT1RFICovCisJR0lUX0NPTE9SX0JPTERfWUVMTE9XLAkvKiBSRUZfVEFHICovCisJR0lUX0NPTE9SX0JPTERfTUFHRU5UQSwJLyogUkVGX1NUQVNIICovCisJR0lUX0NPTE9SX0JPTERfQ1lBTiwJLyogUkVGX0hFQUQgKi8KKwlHSVRfQ09MT1JfQk9MRF9CTFVFLAkvKiBHUkFGVEVEICovCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZGVjb3JhdGVfZ2V0X2NvbG9yKGludCBkZWNvcmF0ZV91c2VfY29sb3IsIGVudW0gZGVjb3JhdGlvbl90eXBlIGl4KQoreworCWlmICh3YW50X2NvbG9yKGRlY29yYXRlX3VzZV9jb2xvcikpCisJCXJldHVybiBkZWNvcmF0aW9uX2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgaW50IHBhcnNlX2RlY29yYXRlX2NvbG9yX3Nsb3QoY29uc3QgY2hhciAqc2xvdCkKK3sKKwkvKgorCSAqIFdlJ3JlIGNvbXBhcmluZyB3aXRoICdpZ25vcmUtY2FzZScgb24KKwkgKiAoYmVjYXVzZSBjb25maWcuYyBzZXRzIHRoZW0gYWxsIHRvbG93ZXIpLAorCSAqIGJ1dCBsZXQncyBtYXRjaCB0aGUgbGV0dGVycyBpbiB0aGUgbGl0ZXJhbAorCSAqIHN0cmluZyB2YWx1ZXMgaGVyZSB3aXRoIGhvdyB0aGV5IGFyZQorCSAqIGRvY3VtZW50ZWQgaW4gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LCBmb3IKKwkgKiBjb25zaXN0ZW5jeS4KKwkgKgorCSAqIFdlIGxvdmUgYmVpbmcgY29uc2lzdGVudCwgZG9uJ3Qgd2U/CisJICovCisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJicmFuY2giKSkKKwkJcmV0dXJuIERFQ09SQVRJT05fUkVGX0xPQ0FMOworCWlmICghc3RyY2FzZWNtcChzbG90LCAicmVtb3RlQnJhbmNoIikpCisJCXJldHVybiBERUNPUkFUSU9OX1JFRl9SRU1PVEU7CisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJ0YWciKSkKKwkJcmV0dXJuIERFQ09SQVRJT05fUkVGX1RBRzsKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgInN0YXNoIikpCisJCXJldHVybiBERUNPUkFUSU9OX1JFRl9TVEFTSDsKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgIkhFQUQiKSkKKwkJcmV0dXJuIERFQ09SQVRJT05fUkVGX0hFQUQ7CisJcmV0dXJuIC0xOworfQorCitpbnQgcGFyc2VfZGVjb3JhdGVfY29sb3JfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgaW50IG9mcywgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IHNsb3QgPSBwYXJzZV9kZWNvcmF0ZV9jb2xvcl9zbG90KHZhciArIG9mcyk7CisJaWYgKHNsb3QgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwljb2xvcl9wYXJzZSh2YWx1ZSwgdmFyLCBkZWNvcmF0aW9uX2NvbG9yc1tzbG90XSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBsb2ctdHJlZS5jIHVzZXMgRElGRl9PUFRfVFNUIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIHVzZSBjb2xvcgorICogZm9yIHNob3dpbmcgdGhlIGNvbW1pdCBzaGExLCB1c2UgdGhlIHNhbWUgY2hlY2sgZm9yIC0tZGVjb3JhdGUKKyAqLworI2RlZmluZSBkZWNvcmF0ZV9nZXRfY29sb3Jfb3B0KG8sIGl4KSBcCisJZGVjb3JhdGVfZ2V0X2NvbG9yKChvKS0+dXNlX2NvbG9yLCBpeCkKKworc3RhdGljIHZvaWQgYWRkX25hbWVfZGVjb3JhdGlvbihlbnVtIGRlY29yYXRpb25fdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJaW50IG5sZW4gPSBzdHJsZW4obmFtZSk7CisJc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqcmVzID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG5hbWVfZGVjb3JhdGlvbikgKyBubGVuKTsKKwltZW1jcHkocmVzLT5uYW1lLCBuYW1lLCBubGVuICsgMSk7CisJcmVzLT50eXBlID0gdHlwZTsKKwlyZXMtPm5leHQgPSBhZGRfZGVjb3JhdGlvbigmbmFtZV9kZWNvcmF0aW9uLCBvYmosIHJlcyk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3JlZl9kZWNvcmF0aW9uKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJZW51bSBkZWNvcmF0aW9uX3R5cGUgdHlwZSA9IERFQ09SQVRJT05fTk9ORTsKKworCWlmICghcHJlZml4Y21wKHJlZm5hbWUsICJyZWZzL3JlcGxhY2UvIikpIHsKKwkJdW5zaWduZWQgY2hhciBvcmlnaW5hbF9zaGExWzIwXTsKKwkJaWYgKCFyZWFkX3JlcGxhY2VfcmVmcykKKwkJCXJldHVybiAwOworCQlpZiAoZ2V0X3NoYTFfaGV4KHJlZm5hbWUgKyAxMywgb3JpZ2luYWxfc2hhMSkpIHsKKwkJCXdhcm5pbmcoImludmFsaWQgcmVwbGFjZSByZWYgJXMiLCByZWZuYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisJCW9iaiA9IHBhcnNlX29iamVjdChvcmlnaW5hbF9zaGExKTsKKwkJaWYgKG9iaikKKwkJCWFkZF9uYW1lX2RlY29yYXRpb24oREVDT1JBVElPTl9HUkFGVEVELCAicmVwbGFjZWQiLCBvYmopOworCQlyZXR1cm4gMDsKKwl9CisKKwlvYmogPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJaWYgKCFvYmopCisJCXJldHVybiAwOworCisJaWYgKCFwcmVmaXhjbXAocmVmbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCXR5cGUgPSBERUNPUkFUSU9OX1JFRl9MT0NBTDsKKwllbHNlIGlmICghcHJlZml4Y21wKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikpCisJCXR5cGUgPSBERUNPUkFUSU9OX1JFRl9SRU1PVEU7CisJZWxzZSBpZiAoIXByZWZpeGNtcChyZWZuYW1lLCAicmVmcy90YWdzLyIpKQorCQl0eXBlID0gREVDT1JBVElPTl9SRUZfVEFHOworCWVsc2UgaWYgKCFzdHJjbXAocmVmbmFtZSwgInJlZnMvc3Rhc2giKSkKKwkJdHlwZSA9IERFQ09SQVRJT05fUkVGX1NUQVNIOworCWVsc2UgaWYgKCFzdHJjbXAocmVmbmFtZSwgIkhFQUQiKSkKKwkJdHlwZSA9IERFQ09SQVRJT05fUkVGX0hFQUQ7CisKKwlpZiAoIWNiX2RhdGEgfHwgKihpbnQgKiljYl9kYXRhID09IERFQ09SQVRFX1NIT1JUX1JFRlMpCisJCXJlZm5hbWUgPSBwcmV0dGlmeV9yZWZuYW1lKHJlZm5hbWUpOworCWFkZF9uYW1lX2RlY29yYXRpb24odHlwZSwgcmVmbmFtZSwgb2JqKTsKKwl3aGlsZSAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJb2JqID0gKChzdHJ1Y3QgdGFnICopb2JqKS0+dGFnZ2VkOworCQlpZiAoIW9iaikKKwkJCWJyZWFrOworCQlhZGRfbmFtZV9kZWNvcmF0aW9uKERFQ09SQVRJT05fUkVGX1RBRywgcmVmbmFtZSwgb2JqKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2dyYWZ0X2RlY29yYXRpb24oY29uc3Qgc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdChncmFmdC0+c2hhMSk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiAwOworCWFkZF9uYW1lX2RlY29yYXRpb24oREVDT1JBVElPTl9HUkFGVEVELCAiZ3JhZnRlZCIsICZjb21taXQtPm9iamVjdCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbG9hZF9yZWZfZGVjb3JhdGlvbnMoaW50IGZsYWdzKQoreworCXN0YXRpYyBpbnQgbG9hZGVkOworCWlmICghbG9hZGVkKSB7CisJCWxvYWRlZCA9IDE7CisJCWZvcl9lYWNoX3JlZihhZGRfcmVmX2RlY29yYXRpb24sICZmbGFncyk7CisJCWhlYWRfcmVmKGFkZF9yZWZfZGVjb3JhdGlvbiwgJmZsYWdzKTsKKwkJZm9yX2VhY2hfY29tbWl0X2dyYWZ0KGFkZF9ncmFmdF9kZWNvcmF0aW9uLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBhYmJyZXYpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcCA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHAtPml0ZW07CisJCXByaW50ZigiICVzIiwgZmluZF91bmlxdWVfYWJicmV2KHBhcmVudC0+b2JqZWN0LnNoYTEsIGFiYnJldikpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19jaGlsZHJlbihzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgYWJicmV2KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZvcHQtPmNoaWxkcmVuLCAmY29tbWl0LT5vYmplY3QpOworCWZvciAoIDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJcHJpbnRmKCIgJXMiLCBmaW5kX3VuaXF1ZV9hYmJyZXYocC0+aXRlbS0+b2JqZWN0LnNoYTEsIGFiYnJldikpOworCX0KK30KKwordm9pZCBzaG93X2RlY29yYXRpb25zKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmRlY29yYXRpb247CisJY29uc3QgY2hhciAqY29sb3JfY29tbWl0ID0KKwkJZGlmZl9nZXRfY29sb3Jfb3B0KCZvcHQtPmRpZmZvcHQsIERJRkZfQ09NTUlUKTsKKwljb25zdCBjaGFyICpjb2xvcl9yZXNldCA9CisJCWRlY29yYXRlX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgREVDT1JBVElPTl9OT05FKTsKKworCWlmIChvcHQtPnNob3dfc291cmNlICYmIGNvbW1pdC0+dXRpbCkKKwkJcHJpbnRmKCJcdCVzIiwgKGNoYXIgKikgY29tbWl0LT51dGlsKTsKKwlpZiAoIW9wdC0+c2hvd19kZWNvcmF0aW9ucykKKwkJcmV0dXJuOworCWRlY29yYXRpb24gPSBsb29rdXBfZGVjb3JhdGlvbigmbmFtZV9kZWNvcmF0aW9uLCAmY29tbWl0LT5vYmplY3QpOworCWlmICghZGVjb3JhdGlvbikKKwkJcmV0dXJuOworCXByZWZpeCA9ICIgKCI7CisJd2hpbGUgKGRlY29yYXRpb24pIHsKKwkJcHJpbnRmKCIlcyIsIHByZWZpeCk7CisJCWZwdXRzKGRlY29yYXRlX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgZGVjb3JhdGlvbi0+dHlwZSksCisJCSAgICAgIHN0ZG91dCk7CisJCWlmIChkZWNvcmF0aW9uLT50eXBlID09IERFQ09SQVRJT05fUkVGX1RBRykKKwkJCWZwdXRzKCJ0YWc6ICIsIHN0ZG91dCk7CisJCXByaW50ZigiJXMiLCBkZWNvcmF0aW9uLT5uYW1lKTsKKwkJZnB1dHMoY29sb3JfcmVzZXQsIHN0ZG91dCk7CisJCWZwdXRzKGNvbG9yX2NvbW1pdCwgc3Rkb3V0KTsKKwkJcHJlZml4ID0gIiwgIjsKKwkJZGVjb3JhdGlvbiA9IGRlY29yYXRpb24tPm5leHQ7CisJfQorCXB1dGNoYXIoJyknKTsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgIl5bLUEtWmEtel0rOiBbXkBdK0AiIHBhdHRlcm4uIEl0IHVzdWFsbHkgbWF0Y2hlcworICogU2lnbmVkLW9mZi1ieTogYW5kIEFja2VkLWJ5OiBsaW5lcy4KKyAqLworc3RhdGljIGludCBkZXRlY3RfYW55X3NpZ25vZmYoY2hhciAqbGV0dGVyLCBpbnQgc2l6ZSkKK3sKKwljaGFyICpjcDsKKwlpbnQgc2Vlbl9jb2xvbiA9IDA7CisJaW50IHNlZW5fYXQgPSAwOworCWludCBzZWVuX25hbWUgPSAwOworCWludCBzZWVuX2hlYWQgPSAwOworCisJY3AgPSBsZXR0ZXIgKyBzaXplOworCXdoaWxlIChsZXR0ZXIgPD0gLS1jcCAmJiAqY3AgPT0gJ1xuJykKKwkJY29udGludWU7CisKKwl3aGlsZSAobGV0dGVyIDw9IGNwKSB7CisJCWNoYXIgY2ggPSAqY3AtLTsKKwkJaWYgKGNoID09ICdcbicpCisJCQlicmVhazsKKworCQlpZiAoIXNlZW5fYXQpIHsKKwkJCWlmIChjaCA9PSAnQCcpCisJCQkJc2Vlbl9hdCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXNlZW5fY29sb24pIHsKKwkJCWlmIChjaCA9PSAnQCcpCisJCQkJcmV0dXJuIDA7CisJCQllbHNlIGlmIChjaCA9PSAnOicpCisJCQkJc2Vlbl9jb2xvbiA9IDE7CisJCQllbHNlCisJCQkJc2Vlbl9uYW1lID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgoJ0EnIDw9IGNoICYmIGNoIDw9ICdaJykgfHwKKwkJICAgICgnYScgPD0gY2ggJiYgY2ggPD0gJ3onKSB8fAorCQkgICAgY2ggPT0gJy0nKSB7CisJCQlzZWVuX2hlYWQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJLyogbm8gZW1wdHkgbGFzdCBsaW5lIGRvZXNuJ3QgbWF0Y2ggKi8KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzZWVuX2hlYWQgJiYgc2Vlbl9uYW1lOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfc2lnbm9mZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqc2lnbm9mZikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBzaWduZWRfb2ZmX2J5W10gPSAiU2lnbmVkLW9mZi1ieTogIjsKKwlzaXplX3Qgc2lnbm9mZl9sZW4gPSBzdHJsZW4oc2lnbm9mZik7CisJaW50IGhhc19zaWdub2ZmID0gMDsKKwljaGFyICpjcDsKKworCWNwID0gc2ItPmJ1ZjsKKworCS8qIEZpcnN0IHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHNpZ24tb2ZmIGJ5IHRoZSBzaWduZXIgKi8KKwl3aGlsZSAoKGNwID0gc3Ryc3RyKGNwLCBzaWduZWRfb2ZmX2J5KSkpIHsKKworCQloYXNfc2lnbm9mZiA9IDE7CisKKwkJY3AgKz0gc3RybGVuKHNpZ25lZF9vZmZfYnkpOworCQlpZiAoY3AgKyBzaWdub2ZmX2xlbiA+PSBzYi0+YnVmICsgc2ItPmxlbikKKwkJCWJyZWFrOworCQlpZiAoc3RybmNtcChjcCwgc2lnbm9mZiwgc2lnbm9mZl9sZW4pKQorCQkJY29udGludWU7CisJCWlmICghaXNzcGFjZShjcFtzaWdub2ZmX2xlbl0pKQorCQkJY29udGludWU7CisJCS8qIHdlIGFscmVhZHkgaGF2ZSBoaW0gKi8KKwkJcmV0dXJuOworCX0KKworCWlmICghaGFzX3NpZ25vZmYpCisJCWhhc19zaWdub2ZmID0gZGV0ZWN0X2FueV9zaWdub2ZmKHNiLT5idWYsIHNiLT5sZW4pOworCisJaWYgKCFoYXNfc2lnbm9mZikKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKworCXN0cmJ1Zl9hZGRzdHIoc2IsIHNpZ25lZF9vZmZfYnkpOworCXN0cmJ1Zl9hZGQoc2IsIHNpZ25vZmYsIHNpZ25vZmZfbGVuKTsKKwlzdHJidWZfYWRkY2goc2IsICdcbicpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGRpZ2l0c19pbl9udW1iZXIodW5zaWduZWQgaW50IG51bWJlcikKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IDEwLCByZXN1bHQgPSAxOworCXdoaWxlIChpIDw9IG51bWJlcikgeworCQlpICo9IDEwOworCQlyZXN1bHQrKzsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBnZXRfcGF0Y2hfZmlsZW5hbWUoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpzdWJqZWN0LCBpbnQgbnIsCisJCQljb25zdCBjaGFyICpzdWZmaXgsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpbnQgc3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXgpICsgMTsKKwlpbnQgc3RhcnRfbGVuID0gYnVmLT5sZW47CisKKwlzdHJidWZfYWRkZihidWYsIGNvbW1pdCB8fCBzdWJqZWN0ID8gIiUwNGQtIiA6ICIlZCIsIG5yKTsKKwlpZiAoY29tbWl0IHx8IHN1YmplY3QpIHsKKwkJaW50IG1heF9sZW4gPSBzdGFydF9sZW4gKyBGT1JNQVRfUEFUQ0hfTkFNRV9NQVggLSBzdWZmaXhfbGVuOworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCisJCWlmIChzdWJqZWN0KQorCQkJc3RyYnVmX2FkZHN0cihidWYsIHN1YmplY3QpOworCQllbHNlIGlmIChjb21taXQpCisJCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWYiLCBidWYsICZjdHgpOworCisJCWlmIChtYXhfbGVuIDwgYnVmLT5sZW4pCisJCQlzdHJidWZfc2V0bGVuKGJ1ZiwgbWF4X2xlbik7CisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBzdWZmaXgpOworCX0KK30KKwordm9pZCBsb2dfd3JpdGVfZW1haWxfaGVhZGVycyhzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgICBjb25zdCBjaGFyICoqc3ViamVjdF9wLAorCQkJICAgICBjb25zdCBjaGFyICoqZXh0cmFfaGVhZGVyc19wLAorCQkJICAgICBpbnQgKm5lZWRfOGJpdF9jdGVfcCkKK3sKKwljb25zdCBjaGFyICpzdWJqZWN0ID0gTlVMTDsKKwljb25zdCBjaGFyICpleHRyYV9oZWFkZXJzID0gb3B0LT5leHRyYV9oZWFkZXJzOworCWNvbnN0IGNoYXIgKm5hbWUgPSBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKTsKKworCSpuZWVkXzhiaXRfY3RlX3AgPSAwOyAvKiB1bmtub3duICovCisJaWYgKG9wdC0+dG90YWwgPiAwKSB7CisJCXN0YXRpYyBjaGFyIGJ1ZmZlcls2NF07CisJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisJCQkgIlN1YmplY3Q6IFslcyVzJTAqZC8lZF0gIiwKKwkJCSBvcHQtPnN1YmplY3RfcHJlZml4LAorCQkJICpvcHQtPnN1YmplY3RfcHJlZml4ID8gIiAiIDogIiIsCisJCQkgZGlnaXRzX2luX251bWJlcihvcHQtPnRvdGFsKSwKKwkJCSBvcHQtPm5yLCBvcHQtPnRvdGFsKTsKKwkJc3ViamVjdCA9IGJ1ZmZlcjsKKwl9IGVsc2UgaWYgKG9wdC0+dG90YWwgPT0gMCAmJiBvcHQtPnN1YmplY3RfcHJlZml4ICYmICpvcHQtPnN1YmplY3RfcHJlZml4KSB7CisJCXN0YXRpYyBjaGFyIGJ1ZmZlclsyNTZdOworCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAorCQkJICJTdWJqZWN0OiBbJXNdICIsCisJCQkgb3B0LT5zdWJqZWN0X3ByZWZpeCk7CisJCXN1YmplY3QgPSBidWZmZXI7CisJfSBlbHNlIHsKKwkJc3ViamVjdCA9ICJTdWJqZWN0OiAiOworCX0KKworCXByaW50ZigiRnJvbSAlcyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDFcbiIsIG5hbWUpOworCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKKwlpZiAob3B0LT5tZXNzYWdlX2lkKSB7CisJCXByaW50ZigiTWVzc2FnZS1JZDogPCVzPlxuIiwgb3B0LT5tZXNzYWdlX2lkKTsKKwkJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOworCX0KKwlpZiAob3B0LT5yZWZfbWVzc2FnZV9pZHMgJiYgb3B0LT5yZWZfbWVzc2FnZV9pZHMtPm5yID4gMCkgeworCQlpbnQgaSwgbjsKKwkJbiA9IG9wdC0+cmVmX21lc3NhZ2VfaWRzLT5ucjsKKwkJcHJpbnRmKCJJbi1SZXBseS1UbzogPCVzPlxuIiwgb3B0LT5yZWZfbWVzc2FnZV9pZHMtPml0ZW1zW24tMV0uc3RyaW5nKTsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCXByaW50ZigiJXM8JXM+XG4iLCAoaSA+IDAgPyAiXHQiIDogIlJlZmVyZW5jZXM6ICIpLAorCQkJICAgICAgIG9wdC0+cmVmX21lc3NhZ2VfaWRzLT5pdGVtc1tpXS5zdHJpbmcpOworCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJfQorCWlmIChvcHQtPm1pbWVfYm91bmRhcnkpIHsKKwkJc3RhdGljIGNoYXIgc3ViamVjdF9idWZmZXJbMTAyNF07CisJCXN0YXRpYyBjaGFyIGJ1ZmZlclsxMDI0XTsKKwkJc3RydWN0IHN0cmJ1ZiBmaWxlbmFtZSA9ICBTVFJCVUZfSU5JVDsKKwkJKm5lZWRfOGJpdF9jdGVfcCA9IC0xOyAvKiBORVZFUiAqLworCQlzbnByaW50ZihzdWJqZWN0X2J1ZmZlciwgc2l6ZW9mKHN1YmplY3RfYnVmZmVyKSAtIDEsCisJCQkgIiVzIgorCQkJICJNSU1FLVZlcnNpb246IDEuMFxuIgorCQkJICJDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsiCisJCQkgIiBib3VuZGFyeT1cIiVzJXNcIlxuIgorCQkJICJcbiIKKwkJCSAiVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FICIKKwkJCSAiZm9ybWF0LlxuIgorCQkJICItLSVzJXNcbiIKKwkJCSAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyAiCisJCQkgImNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZFxuIgorCQkJICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG5cbiIsCisJCQkgZXh0cmFfaGVhZGVycyA/IGV4dHJhX2hlYWRlcnMgOiAiIiwKKwkJCSBtaW1lX2JvdW5kYXJ5X2xlYWRlciwgb3B0LT5taW1lX2JvdW5kYXJ5LAorCQkJIG1pbWVfYm91bmRhcnlfbGVhZGVyLCBvcHQtPm1pbWVfYm91bmRhcnkpOworCQlleHRyYV9oZWFkZXJzID0gc3ViamVjdF9idWZmZXI7CisKKwkJZ2V0X3BhdGNoX2ZpbGVuYW1lKG9wdC0+bnVtYmVyZWRfZmlsZXMgPyBOVUxMIDogY29tbWl0LCBOVUxMLAorCQkJCSAgIG9wdC0+bnIsIG9wdC0+cGF0Y2hfc3VmZml4LCAmZmlsZW5hbWUpOworCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwKKwkJCSAiXG4tLSVzJXNcbiIKKwkJCSAiQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IgorCQkJICIgbmFtZT1cIiVzXCJcbiIKKwkJCSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCQkJICJDb250ZW50LURpc3Bvc2l0aW9uOiAlczsiCisJCQkgIiBmaWxlbmFtZT1cIiVzXCJcblxuIiwKKwkJCSBtaW1lX2JvdW5kYXJ5X2xlYWRlciwgb3B0LT5taW1lX2JvdW5kYXJ5LAorCQkJIGZpbGVuYW1lLmJ1ZiwKKwkJCSBvcHQtPm5vX2lubGluZSA/ICJhdHRhY2htZW50IiA6ICJpbmxpbmUiLAorCQkJIGZpbGVuYW1lLmJ1Zik7CisJCW9wdC0+ZGlmZm9wdC5zdGF0X3NlcCA9IGJ1ZmZlcjsKKwkJc3RyYnVmX3JlbGVhc2UoJmZpbGVuYW1lKTsKKwl9CisJKnN1YmplY3RfcCA9IHN1YmplY3Q7CisJKmV4dHJhX2hlYWRlcnNfcCA9IGV4dHJhX2hlYWRlcnM7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfc2lnX2xpbmVzKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBpbnQgc3RhdHVzLCBjb25zdCBjaGFyICpib2wpCit7CisJY29uc3QgY2hhciAqY29sb3IsICpyZXNldCwgKmVvbDsKKworCWNvbG9yID0gZGlmZl9nZXRfY29sb3Jfb3B0KCZvcHQtPmRpZmZvcHQsCisJCQkJICAgc3RhdHVzID8gRElGRl9XSElURVNQQUNFIDogRElGRl9GUkFHSU5GTyk7CisJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9SRVNFVCk7CisJd2hpbGUgKCpib2wpIHsKKwkJZW9sID0gc3RyY2hybnVsKGJvbCwgJ1xuJyk7CisJCXByaW50ZigiJXMlLipzJXMlcyIsIGNvbG9yLCAoaW50KShlb2wgLSBib2wpLCBib2wsIHJlc2V0LAorCQkgICAgICAgKmVvbCA/ICJcbiIgOiAiIik7CisJCWJvbCA9ICgqZW9sKSA/IChlb2wgKyAxKSA6IGVvbDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfc2lnbmF0dXJlKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzaWduYXR1cmUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGdwZ19vdXRwdXQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3RhdHVzOworCisJaWYgKHBhcnNlX3NpZ25lZF9jb21taXQoY29tbWl0LT5vYmplY3Quc2hhMSwgJnBheWxvYWQsICZzaWduYXR1cmUpIDw9IDApCisJCWdvdG8gb3V0OworCisJc3RhdHVzID0gdmVyaWZ5X3NpZ25lZF9idWZmZXIocGF5bG9hZC5idWYsIHBheWxvYWQubGVuLAorCQkJCSAgICAgIHNpZ25hdHVyZS5idWYsIHNpZ25hdHVyZS5sZW4sCisJCQkJICAgICAgJmdwZ19vdXRwdXQpOworCWlmIChzdGF0dXMgJiYgIWdwZ19vdXRwdXQubGVuKQorCQlzdHJidWZfYWRkc3RyKCZncGdfb3V0cHV0LCAiTm8gc2lnbmF0dXJlXG4iKTsKKworCXNob3dfc2lnX2xpbmVzKG9wdCwgc3RhdHVzLCBncGdfb3V0cHV0LmJ1Zik7CisKKyBvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJmdwZ19vdXRwdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmc2lnbmF0dXJlKTsKK30KKworc3RhdGljIGludCB3aGljaF9wYXJlbnQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBudGg7CisJY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwlmb3IgKG50aCA9IDAsIHBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpIHsKKwkJaWYgKCFoYXNoY21wKHBhcmVudC0+aXRlbS0+b2JqZWN0LnNoYTEsIHNoYTEpKQorCQkJcmV0dXJuIG50aDsKKwkJbnRoKys7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBpc19jb21tb25fbWVyZ2UoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXJldHVybiAoY29tbWl0LT5wYXJlbnRzCisJCSYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dAorCQkmJiAhY29tbWl0LT5wYXJlbnRzLT5uZXh0LT5uZXh0KTsKK30KKworc3RhdGljIHZvaWQgc2hvd19vbmVfbWVyZ2V0YWcoc3RydWN0IHJldl9pbmZvICpvcHQsCisJCQkgICAgICBzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEsCisJCQkgICAgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgdGFnICp0YWc7CisJc3RydWN0IHN0cmJ1ZiB2ZXJpZnlfbWVzc2FnZTsKKwlpbnQgc3RhdHVzLCBudGg7CisJc2l6ZV90IHBheWxvYWRfc2l6ZSwgZ3BnX21lc3NhZ2Vfb2Zmc2V0OworCisJaGFzaF9zaGExX2ZpbGUoZXh0cmEtPnZhbHVlLCBleHRyYS0+bGVuLCB0eXBlbmFtZShPQkpfVEFHKSwgc2hhMSk7CisJdGFnID0gbG9va3VwX3RhZyhzaGExKTsKKwlpZiAoIXRhZykKKwkJcmV0dXJuOyAvKiBlcnJvciBtZXNzYWdlIGFscmVhZHkgZ2l2ZW4gKi8KKworCXN0cmJ1Zl9pbml0KCZ2ZXJpZnlfbWVzc2FnZSwgMjU2KTsKKwlpZiAocGFyc2VfdGFnX2J1ZmZlcih0YWcsIGV4dHJhLT52YWx1ZSwgZXh0cmEtPmxlbikpCisJCXN0cmJ1Zl9hZGRzdHIoJnZlcmlmeV9tZXNzYWdlLCAibWFsZm9ybWVkIG1lcmdldGFnXG4iKTsKKwllbHNlIGlmIChpc19jb21tb25fbWVyZ2UoY29tbWl0KSAmJgorCQkgIWhhc2hjbXAodGFnLT50YWdnZWQtPnNoYTEsCisJCQkgIGNvbW1pdC0+cGFyZW50cy0+bmV4dC0+aXRlbS0+b2JqZWN0LnNoYTEpKQorCQlzdHJidWZfYWRkZigmdmVyaWZ5X21lc3NhZ2UsCisJCQkgICAgIm1lcmdlZCB0YWcgJyVzJ1xuIiwgdGFnLT50YWcpOworCWVsc2UgaWYgKChudGggPSB3aGljaF9wYXJlbnQodGFnLT50YWdnZWQtPnNoYTEsIGNvbW1pdCkpIDwgMCkKKwkJc3RyYnVmX2FkZGYoJnZlcmlmeV9tZXNzYWdlLCAidGFnICVzIG5hbWVzIGEgbm9uLXBhcmVudCAlc1xuIiwKKwkJCQkgICAgdGFnLT50YWcsIHRhZy0+dGFnZ2VkLT5zaGExKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKCZ2ZXJpZnlfbWVzc2FnZSwKKwkJCSAgICAicGFyZW50ICMlZCwgdGFnZ2VkICclcydcbiIsIG50aCArIDEsIHRhZy0+dGFnKTsKKwlncGdfbWVzc2FnZV9vZmZzZXQgPSB2ZXJpZnlfbWVzc2FnZS5sZW47CisKKwlwYXlsb2FkX3NpemUgPSBwYXJzZV9zaWduYXR1cmUoZXh0cmEtPnZhbHVlLCBleHRyYS0+bGVuKTsKKwlpZiAoKGV4dHJhLT5sZW4gPD0gcGF5bG9hZF9zaXplKSB8fAorCSAgICAodmVyaWZ5X3NpZ25lZF9idWZmZXIoZXh0cmEtPnZhbHVlLCBwYXlsb2FkX3NpemUsCisJCQkJICBleHRyYS0+dmFsdWUgKyBwYXlsb2FkX3NpemUsCisJCQkJICBleHRyYS0+bGVuIC0gcGF5bG9hZF9zaXplLAorCQkJCSAgJnZlcmlmeV9tZXNzYWdlKSAmJgorCSAgICAgdmVyaWZ5X21lc3NhZ2UubGVuIDw9IGdwZ19tZXNzYWdlX29mZnNldCkpIHsKKwkJc3RyYnVmX2FkZHN0cigmdmVyaWZ5X21lc3NhZ2UsICJObyBzaWduYXR1cmVcbiIpOworCQlzdGF0dXMgPSAtMTsKKwl9CisJZWxzZSBpZiAoc3Ryc3RyKHZlcmlmeV9tZXNzYWdlLmJ1ZiArIGdwZ19tZXNzYWdlX29mZnNldCwKKwkJCSI6IEdvb2Qgc2lnbmF0dXJlIGZyb20gIikpCisJCXN0YXR1cyA9IDA7CisJZWxzZQorCQlzdGF0dXMgPSAtMTsKKworCXNob3dfc2lnX2xpbmVzKG9wdCwgc3RhdHVzLCB2ZXJpZnlfbWVzc2FnZS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZ2ZXJpZnlfbWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbWVyZ2V0YWcoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEsICp0b19mcmVlOworCisJdG9fZnJlZSA9IHJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcnMoY29tbWl0LCBOVUxMKTsKKwlmb3IgKGV4dHJhID0gdG9fZnJlZTsgZXh0cmE7IGV4dHJhID0gZXh0cmEtPm5leHQpIHsKKwkJaWYgKHN0cmNtcChleHRyYS0+a2V5LCAibWVyZ2V0YWciKSkKKwkJCWNvbnRpbnVlOyAvKiBub3QgYSBtZXJnZSB0YWcgKi8KKwkJc2hvd19vbmVfbWVyZ2V0YWcob3B0LCBleHRyYSwgY29tbWl0KTsKKwl9CisJZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyh0b19mcmVlKTsKK30KKwordm9pZCBzaG93X2xvZyhzdHJ1Y3QgcmV2X2luZm8gKm9wdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBsb2dfaW5mbyAqbG9nID0gb3B0LT5sb2dpbmZvOworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvZy0+Y29tbWl0LCAqcGFyZW50ID0gbG9nLT5wYXJlbnQ7CisJaW50IGFiYnJldl9jb21taXQgPSBvcHQtPmFiYnJldl9jb21taXQgPyBvcHQtPmFiYnJldiA6IDQwOworCWNvbnN0IGNoYXIgKmV4dHJhX2hlYWRlcnMgPSBvcHQtPmV4dHJhX2hlYWRlcnM7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKworCW9wdC0+bG9naW5mbyA9IE5VTEw7CisJY3R4LnNob3dfbm90ZXMgPSBvcHQtPnNob3dfbm90ZXM7CisJaWYgKCFvcHQtPnZlcmJvc2VfaGVhZGVyKSB7CisJCWdyYXBoX3Nob3dfY29tbWl0KG9wdC0+Z3JhcGgpOworCisJCWlmICghb3B0LT5ncmFwaCkKKwkJCXB1dF9yZXZpc2lvbl9tYXJrKG9wdCwgY29tbWl0KTsKKwkJZnB1dHMoZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIGFiYnJldl9jb21taXQpLCBzdGRvdXQpOworCQlpZiAob3B0LT5wcmludF9wYXJlbnRzKQorCQkJc2hvd19wYXJlbnRzKGNvbW1pdCwgYWJicmV2X2NvbW1pdCk7CisJCWlmIChvcHQtPmNoaWxkcmVuLm5hbWUpCisJCQlzaG93X2NoaWxkcmVuKG9wdCwgY29tbWl0LCBhYmJyZXZfY29tbWl0KTsKKwkJc2hvd19kZWNvcmF0aW9ucyhvcHQsIGNvbW1pdCk7CisJCWlmIChvcHQtPmdyYXBoICYmICFncmFwaF9pc19jb21taXRfZmluaXNoZWQob3B0LT5ncmFwaCkpIHsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlncmFwaF9zaG93X3JlbWFpbmRlcihvcHQtPmdyYXBoKTsKKwkJfQorCQlwdXRjaGFyKG9wdC0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdXNlX3Rlcm1pbmF0b3IgaXMgc2V0LCB3ZSBhbHJlYWR5IGhhbmRsZWQgYW55IHJlY29yZCB0ZXJtaW5hdGlvbgorCSAqIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgcmVjb3JkLgorCSAqIE90aGVyd2lzZSwgYWRkIGEgZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uIGNoYXJhY3RlciBiZWZvcmUgYWxsCisJICogZW50cmllcyBidXQgdGhlIGZpcnN0LiAgKElPVywgYXMgYSBzZXBhcmF0b3IgYmV0d2VlbiBlbnRyaWVzKQorCSAqLworCWlmIChvcHQtPnNob3duX29uZSAmJiAhb3B0LT51c2VfdGVybWluYXRvcikgeworCQkvKgorCQkgKiBJZiBlbnRyaWVzIGFyZSBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lLCB0aGUgb3V0cHV0CisJCSAqIHNob3VsZCBsb29rIGh1bWFuLXJlYWRhYmxlLiAgSWYgdGhlIGxhc3QgZW50cnkgZW5kZWQKKwkJICogd2l0aCBhIG5ld2xpbmUsIHByaW50IHRoZSBncmFwaCBvdXRwdXQgYmVmb3JlIHRoaXMKKwkJICogbmV3bGluZS4gIE90aGVyd2lzZSBpdCB3aWxsIGVuZCB1cCBhcyBhIGNvbXBsZXRlbHkgYmxhbmsKKwkJICogbGluZSBhbmQgd2lsbCBsb29rIGxpa2UgYSBnYXAgaW4gdGhlIGdyYXBoLgorCQkgKgorCQkgKiBJZiB0aGUgZW50cnkgc2VwYXJhdG9yIGlzIG5vdCBhIG5ld2xpbmUsIHRoZSBvdXRwdXQgaXMKKwkJICogcHJpbWFyaWx5IGludGVuZGVkIGZvciBwcm9ncmFtbWF0aWMgY29uc3VtcHRpb24sIGFuZCB3ZQorCQkgKiBuZXZlciB3YW50IHRoZSBleHRyYSBncmFwaCBvdXRwdXQgYmVmb3JlIHRoZSBlbnRyeQorCQkgKiBzZXBhcmF0b3IuCisJCSAqLworCQlpZiAob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24gPT0gJ1xuJyAmJgorCQkgICAgIW9wdC0+bWlzc2luZ19uZXdsaW5lKQorCQkJZ3JhcGhfc2hvd19wYWRkaW5nKG9wdC0+Z3JhcGgpOworCQlwdXRjaGFyKG9wdC0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uKTsKKwl9CisJb3B0LT5zaG93bl9vbmUgPSAxOworCisJLyoKKwkgKiBJZiB0aGUgaGlzdG9yeSBncmFwaCB3YXMgcmVxdWVzdGVkLAorCSAqIHByaW50IHRoZSBncmFwaCwgdXAgdG8gdGhpcyBjb21taXQncyBsaW5lCisJICovCisJZ3JhcGhfc2hvd19jb21taXQob3B0LT5ncmFwaCk7CisKKwkvKgorCSAqIFByaW50IGhlYWRlciBsaW5lIG9mIGhlYWRlci4uCisJICovCisKKwlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX0VNQUlMKSB7CisJCWxvZ193cml0ZV9lbWFpbF9oZWFkZXJzKG9wdCwgY29tbWl0LCAmY3R4LnN1YmplY3QsICZleHRyYV9oZWFkZXJzLAorCQkJCQkmY3R4Lm5lZWRfOGJpdF9jdGUpOworCX0gZWxzZSBpZiAob3B0LT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX1VTRVJGT1JNQVQpIHsKKwkJZnB1dHMoZGlmZl9nZXRfY29sb3Jfb3B0KCZvcHQtPmRpZmZvcHQsIERJRkZfQ09NTUlUKSwgc3Rkb3V0KTsKKwkJaWYgKG9wdC0+Y29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9PTkVMSU5FKQorCQkJZnB1dHMoImNvbW1pdCAiLCBzdGRvdXQpOworCisJCWlmICghb3B0LT5ncmFwaCkKKwkJCXB1dF9yZXZpc2lvbl9tYXJrKG9wdCwgY29tbWl0KTsKKwkJZnB1dHMoZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIGFiYnJldl9jb21taXQpLAorCQkgICAgICBzdGRvdXQpOworCQlpZiAob3B0LT5wcmludF9wYXJlbnRzKQorCQkJc2hvd19wYXJlbnRzKGNvbW1pdCwgYWJicmV2X2NvbW1pdCk7CisJCWlmIChvcHQtPmNoaWxkcmVuLm5hbWUpCisJCQlzaG93X2NoaWxkcmVuKG9wdCwgY29tbWl0LCBhYmJyZXZfY29tbWl0KTsKKwkJaWYgKHBhcmVudCkKKwkJCXByaW50ZigiIChmcm9tICVzKSIsCisJCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KHBhcmVudC0+b2JqZWN0LnNoYTEsCisJCQkJCQkgIGFiYnJldl9jb21taXQpKTsKKwkJc2hvd19kZWNvcmF0aW9ucyhvcHQsIGNvbW1pdCk7CisJCXByaW50ZigiJXMiLCBkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9SRVNFVCkpOworCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpIHsKKwkJCXB1dGNoYXIoJyAnKTsKKwkJfSBlbHNlIHsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJCX0KKwkJaWYgKG9wdC0+cmVmbG9nX2luZm8pIHsKKwkJCS8qCisJCQkgKiBzZXR1cF9yZXZpc2lvbnMoKSBlbnN1cmVzIHRoYXQgb3B0LT5yZWZsb2dfaW5mbworCQkJICogYW5kIG9wdC0+Z3JhcGggY2Fubm90IGJvdGggYmUgc2V0LAorCQkJICogc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBwcmludGluZyB0aGUKKwkJCSAqIGdyYXBoIGluZm8gaGVyZS4KKwkJCSAqLworCQkJc2hvd19yZWZsb2dfbWVzc2FnZShvcHQtPnJlZmxvZ19pbmZvLAorCQkJCQkgICAgb3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUsCisJCQkJCSAgICBvcHQtPmRhdGVfbW9kZSwKKwkJCQkJICAgIG9wdC0+ZGF0ZV9tb2RlX2V4cGxpY2l0KTsKKwkJCWlmIChvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSkKKwkJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAob3B0LT5zaG93X3NpZ25hdHVyZSkgeworCQlzaG93X3NpZ25hdHVyZShvcHQsIGNvbW1pdCk7CisJCXNob3dfbWVyZ2V0YWcob3B0LCBjb21taXQpOworCX0KKworCWlmICghY29tbWl0LT5idWZmZXIpCisJCXJldHVybjsKKworCS8qCisJICogQW5kIHRoZW4gdGhlIHByZXR0eS1wcmludGVkIG1lc3NhZ2UgaXRzZWxmCisJICovCisJaWYgKGN0eC5uZWVkXzhiaXRfY3RlID49IDApCisJCWN0eC5uZWVkXzhiaXRfY3RlID0gaGFzX25vbl9hc2NpaShvcHQtPmFkZF9zaWdub2ZmKTsKKwljdHguZGF0ZV9tb2RlID0gb3B0LT5kYXRlX21vZGU7CisJY3R4LmRhdGVfbW9kZV9leHBsaWNpdCA9IG9wdC0+ZGF0ZV9tb2RlX2V4cGxpY2l0OworCWN0eC5hYmJyZXYgPSBvcHQtPmRpZmZvcHQuYWJicmV2OworCWN0eC5hZnRlcl9zdWJqZWN0ID0gZXh0cmFfaGVhZGVyczsKKwljdHgucHJlc2VydmVfc3ViamVjdCA9IG9wdC0+cHJlc2VydmVfc3ViamVjdDsKKwljdHgucmVmbG9nX2luZm8gPSBvcHQtPnJlZmxvZ19pbmZvOworCWN0eC5mbXQgPSBvcHQtPmNvbW1pdF9mb3JtYXQ7CisJcHJldHR5X3ByaW50X2NvbW1pdCgmY3R4LCBjb21taXQsICZtc2didWYpOworCisJaWYgKG9wdC0+YWRkX3NpZ25vZmYpCisJCWFwcGVuZF9zaWdub2ZmKCZtc2didWYsIG9wdC0+YWRkX3NpZ25vZmYpOworCWlmIChvcHQtPnNob3dfbG9nX3NpemUpIHsKKwkJcHJpbnRmKCJsb2cgc2l6ZSAlaVxuIiwgKGludCltc2didWYubGVuKTsKKwkJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOworCX0KKworCS8qCisJICogU2V0IG9wdC0+bWlzc2luZ19uZXdsaW5lIGlmIG1zZ2J1ZiBkb2Vzbid0CisJICogZW5kIGluIGEgbmV3bGluZSAoaW5jbHVkaW5nIGlmIGl0IGlzIGVtcHR5KQorCSAqLworCWlmICghbXNnYnVmLmxlbiB8fCBtc2didWYuYnVmW21zZ2J1Zi5sZW4gLSAxXSAhPSAnXG4nKQorCQlvcHQtPm1pc3NpbmdfbmV3bGluZSA9IDE7CisJZWxzZQorCQlvcHQtPm1pc3NpbmdfbmV3bGluZSA9IDA7CisKKwlpZiAob3B0LT5ncmFwaCkKKwkJZ3JhcGhfc2hvd19jb21taXRfbXNnKG9wdC0+Z3JhcGgsICZtc2didWYpOworCWVsc2UKKwkJZndyaXRlKG1zZ2J1Zi5idWYsIHNpemVvZihjaGFyKSwgbXNnYnVmLmxlbiwgc3Rkb3V0KTsKKwlpZiAob3B0LT51c2VfdGVybWluYXRvcikgeworCQlpZiAoIW9wdC0+bWlzc2luZ19uZXdsaW5lKQorCQkJZ3JhcGhfc2hvd19wYWRkaW5nKG9wdC0+Z3JhcGgpOworCQlwdXRjaGFyKG9wdC0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKK30KKworaW50IGxvZ190cmVlX2RpZmZfZmx1c2goc3RydWN0IHJldl9pbmZvICpvcHQpCit7CisJZGlmZmNvcmVfc3RkKCZvcHQtPmRpZmZvcHQpOworCisJaWYgKGRpZmZfcXVldWVfaXNfZW1wdHkoKSkgeworCQlpbnQgc2F2ZWRfZm10ID0gb3B0LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQ7CisJCW9wdC0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCQlkaWZmX2ZsdXNoKCZvcHQtPmRpZmZvcHQpOworCQlvcHQtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IHNhdmVkX2ZtdDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG9wdC0+bG9naW5mbyAmJiAhb3B0LT5ub19jb21taXRfaWQpIHsKKwkJLyogV2hlbiBzaG93aW5nIGEgdmVyYm9zZSBoZWFkZXIgKGkuZS4gbG9nIG1lc3NhZ2UpLAorCQkgKiBhbmQgbm90IGluIC0tcHJldHR5PW9uZWxpbmUgZm9ybWF0LCB3ZSB3b3VsZCB3YW50CisJCSAqIGFuIGV4dHJhIG5ld2xpbmUgYmV0d2VlbiB0aGUgZW5kIG9mIGxvZyBhbmQgdGhlCisJCSAqIG91dHB1dCBmb3IgcmVhZGFiaWxpdHkuCisJCSAqLworCQlzaG93X2xvZyhvcHQpOworCQlpZiAoKG9wdC0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgfkRJRkZfRk9STUFUX05PX09VVFBVVCkgJiYKKwkJICAgIG9wdC0+dmVyYm9zZV9oZWFkZXIgJiYKKwkJICAgIG9wdC0+Y29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9PTkVMSU5FKSB7CisJCQlpbnQgcGNoID0gRElGRl9GT1JNQVRfRElGRlNUQVQgfCBESUZGX0ZPUk1BVF9QQVRDSDsKKwkJCWlmIChvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeCkgeworCQkJCXN0cnVjdCBzdHJidWYgKm1zZyA9IE5VTEw7CisJCQkJbXNnID0gb3B0LT5kaWZmb3B0Lm91dHB1dF9wcmVmaXgoJm9wdC0+ZGlmZm9wdCwKKwkJCQkJb3B0LT5kaWZmb3B0Lm91dHB1dF9wcmVmaXhfZGF0YSk7CisJCQkJZndyaXRlKG1zZy0+YnVmLCBtc2ctPmxlbiwgMSwgc3Rkb3V0KTsKKwkJCX0KKwkJCWlmICgocGNoICYgb3B0LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpID09IHBjaCkgeworCQkJCXByaW50ZigiLS0tIik7CisJCQl9CisJCQlwdXRjaGFyKCdcbicpOworCQl9CisJfQorCWRpZmZfZmx1c2goJm9wdC0+ZGlmZm9wdCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG9fZGlmZl9jb21iaW5lZChzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWRpZmZfdHJlZV9jb21iaW5lZF9tZXJnZShjb21taXQsIG9wdC0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzLCBvcHQpOworCXJldHVybiAhb3B0LT5sb2dpbmZvOworfQorCisvKgorICogU2hvdyB0aGUgZGlmZiBvZiBhIGNvbW1pdC4KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBwcmludGVkIGFueSBsb2cgaW5mbyBtZXNzYWdlcworICovCitzdGF0aWMgaW50IGxvZ190cmVlX2RpZmYoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGxvZ19pbmZvICpsb2cpCit7CisJaW50IHNob3dlZF9sb2c7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCXVuc2lnbmVkIGNvbnN0IGNoYXIgKnNoYTEgPSBjb21taXQtPm9iamVjdC5zaGExOworCisJaWYgKCFvcHQtPmRpZmYgJiYgIURJRkZfT1BUX1RTVCgmb3B0LT5kaWZmb3B0LCBFWElUX1dJVEhfU1RBVFVTKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBSb290IGNvbW1pdD8gKi8KKwlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCWlmICghcGFyZW50cykgeworCQlpZiAob3B0LT5zaG93X3Jvb3RfZGlmZikgeworCQkJZGlmZl9yb290X3RyZWVfc2hhMShzaGExLCAiIiwgJm9wdC0+ZGlmZm9wdCk7CisJCQlsb2dfdHJlZV9kaWZmX2ZsdXNoKG9wdCk7CisJCX0KKwkJcmV0dXJuICFvcHQtPmxvZ2luZm87CisJfQorCisJLyogTW9yZSB0aGFuIG9uZSBwYXJlbnQ/ICovCisJaWYgKHBhcmVudHMgJiYgcGFyZW50cy0+bmV4dCkgeworCQlpZiAob3B0LT5pZ25vcmVfbWVyZ2VzKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKG9wdC0+Y29tYmluZV9tZXJnZXMpCisJCQlyZXR1cm4gZG9fZGlmZl9jb21iaW5lZChvcHQsIGNvbW1pdCk7CisJCWVsc2UgaWYgKG9wdC0+Zmlyc3RfcGFyZW50X29ubHkpIHsKKwkJCS8qCisJCQkgKiBHZW5lcmF0ZSBtZXJnZSBsb2cgZW50cnkgb25seSBmb3IgdGhlIGZpcnN0CisJCQkgKiBwYXJlbnQsIHNob3dpbmcgc3VtbWFyeSBkaWZmIG9mIHRoZSBvdGhlcnMKKwkJCSAqIHdlIG1lcmdlZCBfaW5fLgorCQkJICovCisJCQlkaWZmX3RyZWVfc2hhMShwYXJlbnRzLT5pdGVtLT5vYmplY3Quc2hhMSwgc2hhMSwgIiIsICZvcHQtPmRpZmZvcHQpOworCQkJbG9nX3RyZWVfZGlmZl9mbHVzaChvcHQpOworCQkJcmV0dXJuICFvcHQtPmxvZ2luZm87CisJCX0KKworCQkvKiBJZiB3ZSBzaG93IGluZGl2aWR1YWwgZGlmZnMsIHNob3cgdGhlIHBhcmVudCBpbmZvICovCisJCWxvZy0+cGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwl9CisKKwlzaG93ZWRfbG9nID0gMDsKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHBhcmVudHMtPml0ZW07CisKKwkJZGlmZl90cmVlX3NoYTEocGFyZW50LT5vYmplY3Quc2hhMSwgc2hhMSwgIiIsICZvcHQtPmRpZmZvcHQpOworCQlsb2dfdHJlZV9kaWZmX2ZsdXNoKG9wdCk7CisKKwkJc2hvd2VkX2xvZyB8PSAhb3B0LT5sb2dpbmZvOworCisJCS8qIFNldCB1cCB0aGUgbG9nIGluZm8gZm9yIHRoZSBuZXh0IHBhcmVudCwgaWYgYW55Li4gKi8KKwkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCWlmICghcGFyZW50cykKKwkJCWJyZWFrOworCQlsb2ctPnBhcmVudCA9IHBhcmVudHMtPml0ZW07CisJCW9wdC0+bG9naW5mbyA9IGxvZzsKKwl9CisJcmV0dXJuIHNob3dlZF9sb2c7Cit9CisKK2ludCBsb2dfdHJlZV9jb21taXQoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgbG9nX2luZm8gbG9nOworCWludCBzaG93bjsKKworCWxvZy5jb21taXQgPSBjb21taXQ7CisJbG9nLnBhcmVudCA9IE5VTEw7CisJb3B0LT5sb2dpbmZvID0gJmxvZzsKKworCXNob3duID0gbG9nX3RyZWVfZGlmZihvcHQsIGNvbW1pdCwgJmxvZyk7CisJaWYgKCFzaG93biAmJiBvcHQtPmxvZ2luZm8gJiYgb3B0LT5hbHdheXNfc2hvd19oZWFkZXIpIHsKKwkJbG9nLnBhcmVudCA9IE5VTEw7CisJCXNob3dfbG9nKG9wdCk7CisJCXNob3duID0gMTsKKwl9CisJb3B0LT5sb2dpbmZvID0gTlVMTDsKKwltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAic3Rkb3V0Iik7CisJcmV0dXJuIHNob3duOworfQpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuaCBiL2xvZy10cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhYzIzOAotLS0gL2Rldi9udWxsCisrKyBiL2xvZy10cmVlLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBMT0dfVFJFRV9ICisjZGVmaW5lIExPR19UUkVFX0gKKworI2luY2x1ZGUgInJldmlzaW9uLmgiCisKK3N0cnVjdCBsb2dfaW5mbyB7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0LCAqcGFyZW50OworfTsKKworaW50IHBhcnNlX2RlY29yYXRlX2NvbG9yX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGludCBvZnMsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgaW5pdF9sb2dfdHJlZV9vcHQoc3RydWN0IHJldl9pbmZvICopOworaW50IGxvZ190cmVlX2RpZmZfZmx1c2goc3RydWN0IHJldl9pbmZvICopOworaW50IGxvZ190cmVlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKiwgc3RydWN0IGNvbW1pdCAqKTsKK2ludCBsb2dfdHJlZV9vcHRfcGFyc2Uoc3RydWN0IHJldl9pbmZvICosIGNvbnN0IGNoYXIgKiosIGludCk7Cit2b2lkIHNob3dfbG9nKHN0cnVjdCByZXZfaW5mbyAqb3B0KTsKK3ZvaWQgc2hvd19kZWNvcmF0aW9ucyhzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKK3ZvaWQgbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgY29uc3QgY2hhciAqKnN1YmplY3RfcCwKKwkJCSAgICAgY29uc3QgY2hhciAqKmV4dHJhX2hlYWRlcnNfcCwKKwkJCSAgICAgaW50ICpuZWVkXzhiaXRfY3RlX3ApOwordm9pZCBsb2FkX3JlZl9kZWNvcmF0aW9ucyhpbnQgZmxhZ3MpOworCisjZGVmaW5lIEZPUk1BVF9QQVRDSF9OQU1FX01BWCA2NAordm9pZCBnZXRfcGF0Y2hfZmlsZW5hbWUoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpzdWJqZWN0LCBpbnQgbnIsCisJCQljb25zdCBjaGFyICpzdWZmaXgsIHN0cnVjdCBzdHJidWYgKmJ1Zik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWFpbG1hcC5jIGIvbWFpbG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YWE0MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tYWlsbWFwLmMKQEAgLTAsMCArMSwyNDggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgorCisjZGVmaW5lIERFQlVHX01BSUxNQVAgMAorI2lmIERFQlVHX01BSUxNQVAKKyNkZWZpbmUgZGVidWdfbW0oLi4uKSBmcHJpbnRmKHN0ZGVyciwgX19WQV9BUkdTX18pCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX21tKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7fQorI2VuZGlmCisKK2NvbnN0IGNoYXIgKmdpdF9tYWlsbWFwX2ZpbGU7CisKK3N0cnVjdCBtYWlsbWFwX2luZm8geworCWNoYXIgKm5hbWU7CisJY2hhciAqZW1haWw7Cit9OworCitzdHJ1Y3QgbWFpbG1hcF9lbnRyeSB7CisJLyogbmFtZSBhbmQgZW1haWwgZm9yIHRoZSBzaW1wbGUgbWFpbC1vbmx5IGNhc2UgKi8KKwljaGFyICpuYW1lOworCWNoYXIgKmVtYWlsOworCisJLyogbmFtZSBhbmQgZW1haWwgZm9yIHRoZSBjb21wbGV4IG1haWwgYW5kIG5hbWUgbWF0Y2hpbmcgY2FzZSAqLworCXN0cnVjdCBzdHJpbmdfbGlzdCBuYW1lbWFwOworfTsKKworc3RhdGljIHZvaWQgZnJlZV9tYWlsbWFwX2luZm8odm9pZCAqcCwgY29uc3QgY2hhciAqcykKK3sKKwlzdHJ1Y3QgbWFpbG1hcF9pbmZvICptaSA9IChzdHJ1Y3QgbWFpbG1hcF9pbmZvICopcDsKKwlkZWJ1Z19tbSgibWFpbG1hcDogLS0gY29tcGxleDogJyVzJyAtPiAnJXMnIDwlcz5cbiIsIHMsIG1pLT5uYW1lLCBtaS0+ZW1haWwpOworCWZyZWUobWktPm5hbWUpOworCWZyZWUobWktPmVtYWlsKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9tYWlsbWFwX2VudHJ5KHZvaWQgKnAsIGNvbnN0IGNoYXIgKnMpCit7CisJc3RydWN0IG1haWxtYXBfZW50cnkgKm1lID0gKHN0cnVjdCBtYWlsbWFwX2VudHJ5ICopcDsKKwlkZWJ1Z19tbSgibWFpbG1hcDogcmVtb3ZpbmcgZW50cmllcyBmb3IgPCVzPiwgd2l0aCAlZCBzdWItZW50cmllc1xuIiwgcywgbWUtPm5hbWVtYXAubnIpOworCWRlYnVnX21tKCJtYWlsbWFwOiAtIHNpbXBsZTogJyVzJyA8JXM+XG4iLCBtZS0+bmFtZSwgbWUtPmVtYWlsKTsKKwlmcmVlKG1lLT5uYW1lKTsKKwlmcmVlKG1lLT5lbWFpbCk7CisKKwltZS0+bmFtZW1hcC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJc3RyaW5nX2xpc3RfY2xlYXJfZnVuYygmbWUtPm5hbWVtYXAsIGZyZWVfbWFpbG1hcF9pbmZvKTsKK30KKworc3RhdGljIHZvaWQgYWRkX21hcHBpbmcoc3RydWN0IHN0cmluZ19saXN0ICptYXAsCisJCQljaGFyICpuZXdfbmFtZSwgY2hhciAqbmV3X2VtYWlsLCBjaGFyICpvbGRfbmFtZSwgY2hhciAqb2xkX2VtYWlsKQoreworCXN0cnVjdCBtYWlsbWFwX2VudHJ5ICptZTsKKwlpbnQgaW5kZXg7CisJY2hhciAqcDsKKworCWlmIChvbGRfZW1haWwpCisJCWZvciAocCA9IG9sZF9lbWFpbDsgKnA7IHArKykKKwkJCSpwID0gdG9sb3dlcigqcCk7CisJaWYgKG5ld19lbWFpbCkKKwkJZm9yIChwID0gbmV3X2VtYWlsOyAqcDsgcCsrKQorCQkJKnAgPSB0b2xvd2VyKCpwKTsKKworCWlmIChvbGRfZW1haWwgPT0gTlVMTCkgeworCQlvbGRfZW1haWwgPSBuZXdfZW1haWw7CisJCW5ld19lbWFpbCA9IE5VTEw7CisJfQorCisJaWYgKChpbmRleCA9IHN0cmluZ19saXN0X2ZpbmRfaW5zZXJ0X2luZGV4KG1hcCwgb2xkX2VtYWlsLCAxKSkgPCAwKSB7CisJCS8qIG1haWxtYXAgZW50cnkgZXhpc3RzLCBpbnZlcnQgaW5kZXggdmFsdWUgKi8KKwkJaW5kZXggPSAtMSAtIGluZGV4OworCX0gZWxzZSB7CisJCS8qIGNyZWF0ZSBtYWlsbWFwIGVudHJ5ICovCisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0X2F0X2luZGV4KG1hcCwgaW5kZXgsIG9sZF9lbWFpbCk7CisJCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbWFpbG1hcF9lbnRyeSkpOworCQkoKHN0cnVjdCBtYWlsbWFwX2VudHJ5ICopaXRlbS0+dXRpbCktPm5hbWVtYXAuc3RyZHVwX3N0cmluZ3MgPSAxOworCX0KKwltZSA9IChzdHJ1Y3QgbWFpbG1hcF9lbnRyeSAqKW1hcC0+aXRlbXNbaW5kZXhdLnV0aWw7CisKKwlpZiAob2xkX25hbWUgPT0gTlVMTCkgeworCQlkZWJ1Z19tbSgibWFpbG1hcDogYWRkaW5nIChzaW1wbGUpIGVudHJ5IGZvciAlcyBhdCBpbmRleCAlZFxuIiwgb2xkX2VtYWlsLCBpbmRleCk7CisJCS8qIFJlcGxhY2UgY3VycmVudCBuYW1lIGFuZCBuZXcgZW1haWwgZm9yIHNpbXBsZSBlbnRyeSAqLworCQlpZiAobmV3X25hbWUpIHsKKwkJCWZyZWUobWUtPm5hbWUpOworCQkJbWUtPm5hbWUgPSB4c3RyZHVwKG5ld19uYW1lKTsKKwkJfQorCQlpZiAobmV3X2VtYWlsKSB7CisJCQlmcmVlKG1lLT5lbWFpbCk7CisJCQltZS0+ZW1haWwgPSB4c3RyZHVwKG5ld19lbWFpbCk7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgbWFpbG1hcF9pbmZvICptaSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBtYWlsbWFwX2luZm8pKTsKKwkJZGVidWdfbW0oIm1haWxtYXA6IGFkZGluZyAoY29tcGxleCkgZW50cnkgZm9yICVzIGF0IGluZGV4ICVkXG4iLCBvbGRfZW1haWwsIGluZGV4KTsKKwkJaWYgKG5ld19uYW1lKQorCQkJbWktPm5hbWUgPSB4c3RyZHVwKG5ld19uYW1lKTsKKwkJaWYgKG5ld19lbWFpbCkKKwkJCW1pLT5lbWFpbCA9IHhzdHJkdXAobmV3X2VtYWlsKTsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZtZS0+bmFtZW1hcCwgb2xkX25hbWUpLT51dGlsID0gbWk7CisJfQorCisJZGVidWdfbW0oIm1haWxtYXA6ICAnJXMnIDwlcz4gLT4gJyVzJyA8JXM+XG4iLAorCQkgb2xkX25hbWUsIG9sZF9lbWFpbCwgbmV3X25hbWUsIG5ld19lbWFpbCk7Cit9CisKK3N0YXRpYyBjaGFyICpwYXJzZV9uYW1lX2FuZF9lbWFpbChjaGFyICpidWZmZXIsIGNoYXIgKipuYW1lLAorCQljaGFyICoqZW1haWwsIGludCBhbGxvd19lbXB0eV9lbWFpbCkKK3sKKwljaGFyICpsZWZ0LCAqcmlnaHQsICpuc3RhcnQsICpuZW5kOworCSpuYW1lID0gKmVtYWlsID0gTlVMTDsKKworCWlmICgobGVmdCA9IHN0cmNocihidWZmZXIsICc8JykpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWlmICgocmlnaHQgPSBzdHJjaHIobGVmdCsxLCAnPicpKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWFsbG93X2VtcHR5X2VtYWlsICYmIChsZWZ0KzEgPT0gcmlnaHQpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHJlbW92ZSB3aGl0ZXNwYWNlIGZyb20gYmVnaW5uaW5nIGFuZCBlbmQgb2YgbmFtZSAqLworCW5zdGFydCA9IGJ1ZmZlcjsKKwl3aGlsZSAoaXNzcGFjZSgqbnN0YXJ0KSAmJiBuc3RhcnQgPCBsZWZ0KQorCQkrK25zdGFydDsKKwluZW5kID0gbGVmdC0xOworCXdoaWxlIChpc3NwYWNlKCpuZW5kKSAmJiBuZW5kID4gbnN0YXJ0KQorCQktLW5lbmQ7CisKKwkqbmFtZSA9IChuc3RhcnQgPCBuZW5kID8gbnN0YXJ0IDogTlVMTCk7CisJKmVtYWlsID0gbGVmdCsxOworCSoobmVuZCsxKSA9ICdcMCc7CisJKnJpZ2h0KysgPSAnXDAnOworCisJcmV0dXJuICgqcmlnaHQgPT0gJ1wwJyA/IE5VTEwgOiByaWdodCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9zaW5nbGVfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNoYXIgKipyZXBvX2FiYnJldikKK3sKKwljaGFyIGJ1ZmZlclsxMDI0XTsKKwlGSUxFICpmID0gKGZpbGVuYW1lID09IE5VTEwgPyBOVUxMIDogZm9wZW4oZmlsZW5hbWUsICJyIikpOworCisJaWYgKGYgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisJd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGYpICE9IE5VTEwpIHsKKwkJY2hhciAqbmFtZTEgPSBOVUxMLCAqZW1haWwxID0gTlVMTCwgKm5hbWUyID0gTlVMTCwgKmVtYWlsMiA9IE5VTEw7CisJCWlmIChidWZmZXJbMF0gPT0gJyMnKSB7CisJCQlzdGF0aWMgY29uc3QgY2hhciBhYmJyZXZbXSA9ICIjIHJlcG8tYWJicmV2OiI7CisJCQlpbnQgYWJibGVuID0gc2l6ZW9mKGFiYnJldikgLSAxOworCQkJaW50IGxlbiA9IHN0cmxlbihidWZmZXIpOworCisJCQlpZiAoIXJlcG9fYWJicmV2KQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAobGVuICYmIGJ1ZmZlcltsZW4gLSAxXSA9PSAnXG4nKQorCQkJCWJ1ZmZlclstLWxlbl0gPSAwOworCQkJaWYgKCFzdHJuY21wKGJ1ZmZlciwgYWJicmV2LCBhYmJsZW4pKSB7CisJCQkJY2hhciAqY3A7CisKKwkJCQlpZiAocmVwb19hYmJyZXYpCisJCQkJCWZyZWUoKnJlcG9fYWJicmV2KTsKKwkJCQkqcmVwb19hYmJyZXYgPSB4bWFsbG9jKGxlbik7CisKKwkJCQlmb3IgKGNwID0gYnVmZmVyICsgYWJibGVuOyBpc3NwYWNlKCpjcCk7IGNwKyspCisJCQkJCTsgLyogbm90aGluZyAqLworCQkJCXN0cmNweSgqcmVwb19hYmJyZXYsIGNwKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgobmFtZTIgPSBwYXJzZV9uYW1lX2FuZF9lbWFpbChidWZmZXIsICZuYW1lMSwgJmVtYWlsMSwgMCkpICE9IE5VTEwpCisJCQlwYXJzZV9uYW1lX2FuZF9lbWFpbChuYW1lMiwgJm5hbWUyLCAmZW1haWwyLCAxKTsKKworCQlpZiAoZW1haWwxKQorCQkJYWRkX21hcHBpbmcobWFwLCBuYW1lMSwgZW1haWwxLCBuYW1lMiwgZW1haWwyKTsKKwl9CisJZmNsb3NlKGYpOworCXJldHVybiAwOworfQorCitpbnQgcmVhZF9tYWlsbWFwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLCBjaGFyICoqcmVwb19hYmJyZXYpCit7CisJbWFwLT5zdHJkdXBfc3RyaW5ncyA9IDE7CisJLyogZWFjaCBmYWlsdXJlIHJldHVybnMgMSwgc28gPjEgbWVhbnMgYm90aCBjYWxscyBmYWlsZWQgKi8KKwlyZXR1cm4gcmVhZF9zaW5nbGVfbWFpbG1hcChtYXAsICIubWFpbG1hcCIsIHJlcG9fYWJicmV2KSArCisJICAgICAgIHJlYWRfc2luZ2xlX21haWxtYXAobWFwLCBnaXRfbWFpbG1hcF9maWxlLCByZXBvX2FiYnJldikgPiAxOworfQorCit2b2lkIGNsZWFyX21haWxtYXAoc3RydWN0IHN0cmluZ19saXN0ICptYXApCit7CisJZGVidWdfbW0oIm1haWxtYXA6IGNsZWFyaW5nICVkIGVudHJpZXMuLi5cbiIsIG1hcC0+bnIpOworCW1hcC0+c3RyZHVwX3N0cmluZ3MgPSAxOworCXN0cmluZ19saXN0X2NsZWFyX2Z1bmMobWFwLCBmcmVlX21haWxtYXBfZW50cnkpOworCWRlYnVnX21tKCJtYWlsbWFwOiBjbGVhcmVkXG4iKTsKK30KKworaW50IG1hcF91c2VyKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLAorCSAgICAgY2hhciAqZW1haWwsIGludCBtYXhsZW5fZW1haWwsIGNoYXIgKm5hbWUsIGludCBtYXhsZW5fbmFtZSkKK3sKKwljaGFyICplbmRfb2ZfZW1haWw7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IG1haWxtYXBfZW50cnkgKm1lOworCWNoYXIgYnVmWzEwMjRdLCAqbWFpbGJ1ZjsKKwlpbnQgaTsKKworCS8qIGZpZ3VyZSBvdXQgc3BhY2UgcmVxdWlyZW1lbnQgZm9yIGVtYWlsICovCisJZW5kX29mX2VtYWlsID0gc3RyY2hyKGVtYWlsLCAnPicpOworCWlmICghZW5kX29mX2VtYWlsKSB7CisJCS8qIGVtYWlsIHBhc3NlZCBpbiBtaWdodCBub3QgYmUgd3JhcHBlZCBpbiA8PiwgYnV0IGVuZCB3aXRoIGEgXDAgKi8KKwkJZW5kX29mX2VtYWlsID0gbWVtY2hyKGVtYWlsLCAnXDAnLCBtYXhsZW5fZW1haWwpOworCQlpZiAoIWVuZF9vZl9lbWFpbCkKKwkJCXJldHVybiAwOworCX0KKwlpZiAoZW5kX29mX2VtYWlsIC0gZW1haWwgKyAxIDwgc2l6ZW9mKGJ1ZikpCisJCW1haWxidWYgPSBidWY7CisJZWxzZQorCQltYWlsYnVmID0geG1hbGxvYyhlbmRfb2ZfZW1haWwgLSBlbWFpbCArIDEpOworCisJLyogZG93bmNhc2UgdGhlIGVtYWlsIGFkZHJlc3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZW5kX29mX2VtYWlsIC0gZW1haWw7IGkrKykKKwkJbWFpbGJ1ZltpXSA9IHRvbG93ZXIoZW1haWxbaV0pOworCW1haWxidWZbaV0gPSAwOworCisJZGVidWdfbW0oIm1hcF91c2VyOiBtYXAgJyVzJyA8JXM+XG4iLCBuYW1lLCBtYWlsYnVmKTsKKwlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKG1hcCwgbWFpbGJ1Zik7CisJaWYgKGl0ZW0gIT0gTlVMTCkgeworCQltZSA9IChzdHJ1Y3QgbWFpbG1hcF9lbnRyeSAqKWl0ZW0tPnV0aWw7CisJCWlmIChtZS0+bmFtZW1hcC5ucikgeworCQkJLyogVGhlIGl0ZW0gaGFzIG11bHRpcGxlIGl0ZW1zLCBzbyB3ZSdsbCBsb29rIHVwIG9uIG5hbWUgdG9vICovCisJCQkvKiBJZiB0aGUgbmFtZSBpcyBub3QgZm91bmQsIHdlIGNob29zZSB0aGUgc2ltcGxlIGVudHJ5ICAgICAgKi8KKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdWJpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKCZtZS0+bmFtZW1hcCwgbmFtZSk7CisJCQlpZiAoc3ViaXRlbSkKKwkJCQlpdGVtID0gc3ViaXRlbTsKKwkJfQorCX0KKwlpZiAobWFpbGJ1ZiAhPSBidWYpCisJCWZyZWUobWFpbGJ1Zik7CisJaWYgKGl0ZW0gIT0gTlVMTCkgeworCQlzdHJ1Y3QgbWFpbG1hcF9pbmZvICptaSA9IChzdHJ1Y3QgbWFpbG1hcF9pbmZvICopaXRlbS0+dXRpbDsKKwkJaWYgKG1pLT5uYW1lID09IE5VTEwgJiYgKG1pLT5lbWFpbCA9PSBOVUxMIHx8IG1heGxlbl9lbWFpbCA9PSAwKSkgeworCQkJZGVidWdfbW0oIm1hcF91c2VyOiAgLS0gKG5vIHNpbXBsZSBtYXBwaW5nKVxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAobWF4bGVuX2VtYWlsICYmIG1pLT5lbWFpbCkKKwkJCXN0cmxjcHkoZW1haWwsIG1pLT5lbWFpbCwgbWF4bGVuX2VtYWlsKTsKKwkJZWxzZQorCQkJKmVuZF9vZl9lbWFpbCA9ICdcMCc7CisJCWlmIChtYXhsZW5fbmFtZSAmJiBtaS0+bmFtZSkKKwkJCXN0cmxjcHkobmFtZSwgbWktPm5hbWUsIG1heGxlbl9uYW1lKTsKKwkJZGVidWdfbW0oIm1hcF91c2VyOiAgdG8gJyVzJyA8JXM+XG4iLCBuYW1lLCBtaS0+ZW1haWwgPyBtaS0+ZW1haWwgOiAiIik7CisJCXJldHVybiAxOworCX0KKwlkZWJ1Z19tbSgibWFwX3VzZXI6ICAtLVxuIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9tYWlsbWFwLmggYi9tYWlsbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjMzY2NAotLS0gL2Rldi9udWxsCisrKyBiL21haWxtYXAuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIE1BSUxNQVBfSAorI2RlZmluZSBNQUlMTUFQX0gKKworaW50IHJlYWRfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCwgY2hhciAqKnJlcG9fYWJicmV2KTsKK3ZvaWQgY2xlYXJfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCk7CisKK2ludCBtYXBfdXNlcihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1haWxtYXAsCisJICAgICBjaGFyICplbWFpbCwgaW50IG1heGxlbl9lbWFpbCwgY2hhciAqbmFtZSwgaW50IG1heGxlbl9uYW1lKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tYXRjaC10cmVlcy5jIGIvbWF0Y2gtdHJlZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmY3ZWQxCi0tLSAvZGV2L251bGwKKysrIGIvbWF0Y2gtdHJlZXMuYwpAQCAtMCwwICsxLDM3MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorCitzdGF0aWMgaW50IHNjb3JlX21pc3NpbmcodW5zaWduZWQgbW9kZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgc2NvcmU7CisKKwlpZiAoU19JU0RJUihtb2RlKSkKKwkJc2NvcmUgPSAtMTAwMDsKKwllbHNlIGlmIChTX0lTTE5LKG1vZGUpKQorCQlzY29yZSA9IC01MDA7CisJZWxzZQorCQlzY29yZSA9IC01MDsKKwlyZXR1cm4gc2NvcmU7Cit9CisKK3N0YXRpYyBpbnQgc2NvcmVfZGlmZmVycyh1bnNpZ25lZCBtb2RlMSwgdW5zaWduZWQgbW9kZTIsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHNjb3JlOworCisJaWYgKFNfSVNESVIobW9kZTEpICE9IFNfSVNESVIobW9kZTIpKQorCQlzY29yZSA9IC0xMDA7CisJZWxzZSBpZiAoU19JU0xOSyhtb2RlMSkgIT0gU19JU0xOSyhtb2RlMikpCisJCXNjb3JlID0gLTUwOworCWVsc2UKKwkJc2NvcmUgPSAtNTsKKwlyZXR1cm4gc2NvcmU7Cit9CisKK3N0YXRpYyBpbnQgc2NvcmVfbWF0Y2hlcyh1bnNpZ25lZCBtb2RlMSwgdW5zaWduZWQgbW9kZTIsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHNjb3JlOworCisJLyogSGVoLCB3ZSBmb3VuZCBTSEEtMSBjb2xsaXNpb25zIGJldHdlZW4gZGlmZmVyZW50IGtpbmQgb2Ygb2JqZWN0cyAqLworCWlmIChTX0lTRElSKG1vZGUxKSAhPSBTX0lTRElSKG1vZGUyKSkKKwkJc2NvcmUgPSAtMTAwOworCWVsc2UgaWYgKFNfSVNMTksobW9kZTEpICE9IFNfSVNMTksobW9kZTIpKQorCQlzY29yZSA9IC01MDsKKworCWVsc2UgaWYgKFNfSVNESVIobW9kZTEpKQorCQlzY29yZSA9IDEwMDA7CisJZWxzZSBpZiAoU19JU0xOSyhtb2RlMSkpCisJCXNjb3JlID0gNTAwOworCWVsc2UKKwkJc2NvcmUgPSAyNTA7CisJcmV0dXJuIHNjb3JlOworfQorCisvKgorICogSW5zcGVjdCB0d28gdHJlZXMsIGFuZCBnaXZlIGEgc2NvcmUgdGhhdCB0ZWxscyBob3cgc2ltaWxhciB0aGV5IGFyZS4KKyAqLworc3RhdGljIGludCBzY29yZV90cmVlcyhjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMSwgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDIpCit7CisJc3RydWN0IHRyZWVfZGVzYyBvbmU7CisJc3RydWN0IHRyZWVfZGVzYyB0d287CisJdm9pZCAqb25lX2J1ZiwgKnR3b19idWY7CisJaW50IHNjb3JlID0gMDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJb25lX2J1ZiA9IHJlYWRfc2hhMV9maWxlKGhhc2gxLCAmdHlwZSwgJnNpemUpOworCWlmICghb25lX2J1ZikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiLCBzaGExX3RvX2hleChoYXNoMSkpOworCWlmICh0eXBlICE9IE9CSl9UUkVFKQorCQlkaWUoIiVzIGlzIG5vdCBhIHRyZWUiLCBzaGExX3RvX2hleChoYXNoMSkpOworCWluaXRfdHJlZV9kZXNjKCZvbmUsIG9uZV9idWYsIHNpemUpOworCXR3b19idWYgPSByZWFkX3NoYTFfZmlsZShoYXNoMiwgJnR5cGUsICZzaXplKTsKKwlpZiAoIXR3b19idWYpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIiwgc2hhMV90b19oZXgoaGFzaDIpKTsKKwlpZiAodHlwZSAhPSBPQkpfVFJFRSkKKwkJZGllKCIlcyBpcyBub3QgYSB0cmVlIiwgc2hhMV90b19oZXgoaGFzaDIpKTsKKwlpbml0X3RyZWVfZGVzYygmdHdvLCB0d29fYnVmLCBzaXplKTsKKwl3aGlsZSAob25lLnNpemUgfCB0d28uc2l6ZSkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICplbGVtMSA9IGVsZW0xOworCQljb25zdCB1bnNpZ25lZCBjaGFyICplbGVtMiA9IGVsZW0yOworCQljb25zdCBjaGFyICpwYXRoMSA9IHBhdGgxOworCQljb25zdCBjaGFyICpwYXRoMiA9IHBhdGgyOworCQl1bnNpZ25lZCBtb2RlMSA9IG1vZGUxOworCQl1bnNpZ25lZCBtb2RlMiA9IG1vZGUyOworCQlpbnQgY21wOworCisJCWlmIChvbmUuc2l6ZSkKKwkJCWVsZW0xID0gdHJlZV9lbnRyeV9leHRyYWN0KCZvbmUsICZwYXRoMSwgJm1vZGUxKTsKKwkJaWYgKHR3by5zaXplKQorCQkJZWxlbTIgPSB0cmVlX2VudHJ5X2V4dHJhY3QoJnR3bywgJnBhdGgyLCAmbW9kZTIpOworCisJCWlmICghb25lLnNpemUpIHsKKwkJCS8qIHR3byBoYXMgbW9yZSBlbnRyaWVzICovCisJCQlzY29yZSArPSBzY29yZV9taXNzaW5nKG1vZGUyLCBwYXRoMik7CisJCQl1cGRhdGVfdHJlZV9lbnRyeSgmdHdvKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghdHdvLnNpemUpIHsKKwkJCS8qIHR3byBsYWNrcyB0aGlzIGVudHJ5ICovCisJCQlzY29yZSArPSBzY29yZV9taXNzaW5nKG1vZGUxLCBwYXRoMSk7CisJCQl1cGRhdGVfdHJlZV9lbnRyeSgmb25lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNtcCA9IGJhc2VfbmFtZV9jb21wYXJlKHBhdGgxLCBzdHJsZW4ocGF0aDEpLCBtb2RlMSwKKwkJCQkJcGF0aDIsIHN0cmxlbihwYXRoMiksIG1vZGUyKTsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCS8qIHBhdGgxIGRvZXMgbm90IGFwcGVhciBpbiB0d28gKi8KKwkJCXNjb3JlICs9IHNjb3JlX21pc3NpbmcobW9kZTEsIHBhdGgxKTsKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KCZvbmUpOworCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoY21wID4gMCkgeworCQkJLyogcGF0aDIgZG9lcyBub3QgYXBwZWFyIGluIG9uZSAqLworCQkJc2NvcmUgKz0gc2NvcmVfbWlzc2luZyhtb2RlMiwgcGF0aDIpOworCQkJdXBkYXRlX3RyZWVfZW50cnkoJnR3byk7CisJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChoYXNoY21wKGVsZW0xLCBlbGVtMikpCisJCQkvKiB0aGV5IGFyZSBkaWZmZXJlbnQgKi8KKwkJCXNjb3JlICs9IHNjb3JlX2RpZmZlcnMobW9kZTEsIG1vZGUyLCBwYXRoMSk7CisJCWVsc2UKKwkJCS8qIHNhbWUgc3VidHJlZSBvciBibG9iICovCisJCQlzY29yZSArPSBzY29yZV9tYXRjaGVzKG1vZGUxLCBtb2RlMiwgcGF0aDEpOworCQl1cGRhdGVfdHJlZV9lbnRyeSgmb25lKTsKKwkJdXBkYXRlX3RyZWVfZW50cnkoJnR3byk7CisJfQorCWZyZWUob25lX2J1Zik7CisJZnJlZSh0d29fYnVmKTsKKwlyZXR1cm4gc2NvcmU7Cit9CisKKy8qCisgKiBNYXRjaCBvbmUgaXRzZWxmIGFuZCBpdHMgc3VidHJlZXMgd2l0aCB0d28gYW5kIHBpY2sgdGhlIGJlc3QgbWF0Y2guCisgKi8KK3N0YXRpYyB2b2lkIG1hdGNoX3RyZWVzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gxLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDIsCisJCQlpbnQgKmJlc3Rfc2NvcmUsCisJCQljaGFyICoqYmVzdF9tYXRjaCwKKwkJCWNvbnN0IGNoYXIgKmJhc2UsCisJCQlpbnQgcmVjdXJzZV9saW1pdCkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIG9uZTsKKwl2b2lkICpvbmVfYnVmOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlvbmVfYnVmID0gcmVhZF9zaGExX2ZpbGUoaGFzaDEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFvbmVfYnVmKQorCQlkaWUoInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KGhhc2gxKSk7CisJaWYgKHR5cGUgIT0gT0JKX1RSRUUpCisJCWRpZSgiJXMgaXMgbm90IGEgdHJlZSIsIHNoYTFfdG9faGV4KGhhc2gxKSk7CisJaW5pdF90cmVlX2Rlc2MoJm9uZSwgb25lX2J1Ziwgc2l6ZSk7CisKKwl3aGlsZSAob25lLnNpemUpIHsKKwkJY29uc3QgY2hhciAqcGF0aDsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZWxlbTsKKwkJdW5zaWduZWQgbW9kZTsKKwkJaW50IHNjb3JlOworCisJCWVsZW0gPSB0cmVlX2VudHJ5X2V4dHJhY3QoJm9uZSwgJnBhdGgsICZtb2RlKTsKKwkJaWYgKCFTX0lTRElSKG1vZGUpKQorCQkJZ290byBuZXh0OworCQlzY29yZSA9IHNjb3JlX3RyZWVzKGVsZW0sIGhhc2gyKTsKKwkJaWYgKCpiZXN0X3Njb3JlIDwgc2NvcmUpIHsKKwkJCWNoYXIgKm5ld3BhdGg7CisJCQluZXdwYXRoID0geG1hbGxvYyhzdHJsZW4oYmFzZSkgKyBzdHJsZW4ocGF0aCkgKyAxKTsKKwkJCXNwcmludGYobmV3cGF0aCwgIiVzJXMiLCBiYXNlLCBwYXRoKTsKKwkJCWZyZWUoKmJlc3RfbWF0Y2gpOworCQkJKmJlc3RfbWF0Y2ggPSBuZXdwYXRoOworCQkJKmJlc3Rfc2NvcmUgPSBzY29yZTsKKwkJfQorCQlpZiAocmVjdXJzZV9saW1pdCkgeworCQkJY2hhciAqbmV3YmFzZTsKKwkJCW5ld2Jhc2UgPSB4bWFsbG9jKHN0cmxlbihiYXNlKSArIHN0cmxlbihwYXRoKSArIDIpOworCQkJc3ByaW50ZihuZXdiYXNlLCAiJXMlcy8iLCBiYXNlLCBwYXRoKTsKKwkJCW1hdGNoX3RyZWVzKGVsZW0sIGhhc2gyLCBiZXN0X3Njb3JlLCBiZXN0X21hdGNoLAorCQkJCSAgICBuZXdiYXNlLCByZWN1cnNlX2xpbWl0IC0gMSk7CisJCQlmcmVlKG5ld2Jhc2UpOworCQl9CisKKwluZXh0OgorCQl1cGRhdGVfdHJlZV9lbnRyeSgmb25lKTsKKwl9CisJZnJlZShvbmVfYnVmKTsKK30KKworLyoKKyAqIEEgdHJlZSAiaGFzaDEiIGhhcyBhIHN1YmRpcmVjdG9yeSBhdCAicHJlZml4Ii4gIENvbWUgdXAgd2l0aCBhCisgKiB0cmVlIG9iamVjdCBieSByZXBsYWNpbmcgaXQgd2l0aCBhbm90aGVyIHRyZWUgImhhc2gyIi4KKyAqLworc3RhdGljIGludCBzcGxpY2VfdHJlZShjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gyLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqcmVzdWx0KQoreworCWNoYXIgKnN1YnBhdGg7CisJaW50IHRvcGxlbjsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzejsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJdW5zaWduZWQgY2hhciAqcmV3cml0ZV9oZXJlOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJld3JpdGVfd2l0aDsKKwl1bnNpZ25lZCBjaGFyIHN1YnRyZWVbMjBdOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlpbnQgc3RhdHVzOworCisJc3VicGF0aCA9IHN0cmNocihwcmVmaXgsICcvJyk7CisJaWYgKCFzdWJwYXRoKQorCQl0b3BsZW4gPSBzdHJsZW4ocHJlZml4KTsKKwllbHNlIHsKKwkJdG9wbGVuID0gc3VicGF0aCAtIHByZWZpeDsKKwkJc3VicGF0aCsrOworCX0KKworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKGhhc2gxLCAmdHlwZSwgJnN6KTsKKwlpZiAoIWJ1ZikKKwkJZGllKCJjYW5ub3QgcmVhZCB0cmVlICVzIiwgc2hhMV90b19oZXgoaGFzaDEpKTsKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgYnVmLCBzeik7CisKKwlyZXdyaXRlX2hlcmUgPSBOVUxMOworCXdoaWxlIChkZXNjLnNpemUpIHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQgbW9kZTsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKKworCQlzaGExID0gdHJlZV9lbnRyeV9leHRyYWN0KCZkZXNjLCAmbmFtZSwgJm1vZGUpOworCQlpZiAoc3RybGVuKG5hbWUpID09IHRvcGxlbiAmJgorCQkgICAgIW1lbWNtcChuYW1lLCBwcmVmaXgsIHRvcGxlbikpIHsKKwkJCWlmICghU19JU0RJUihtb2RlKSkKKwkJCQlkaWUoImVudHJ5ICVzIGluIHRyZWUgJXMgaXMgbm90IGEgdHJlZSIsCisJCQkJICAgIG5hbWUsIHNoYTFfdG9faGV4KGhhc2gxKSk7CisJCQlyZXdyaXRlX2hlcmUgPSAodW5zaWduZWQgY2hhciAqKSBzaGExOworCQkJYnJlYWs7CisJCX0KKwkJdXBkYXRlX3RyZWVfZW50cnkoJmRlc2MpOworCX0KKwlpZiAoIXJld3JpdGVfaGVyZSkKKwkJZGllKCJlbnRyeSAlLipzIG5vdCBmb3VuZCBpbiB0cmVlICVzIiwKKwkJICAgIHRvcGxlbiwgcHJlZml4LCBzaGExX3RvX2hleChoYXNoMSkpOworCWlmIChzdWJwYXRoKSB7CisJCXN0YXR1cyA9IHNwbGljZV90cmVlKHJld3JpdGVfaGVyZSwgc3VicGF0aCwgaGFzaDIsIHN1YnRyZWUpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJcmV3cml0ZV93aXRoID0gc3VidHJlZTsKKwl9CisJZWxzZQorCQlyZXdyaXRlX3dpdGggPSBoYXNoMjsKKwloYXNoY3B5KHJld3JpdGVfaGVyZSwgcmV3cml0ZV93aXRoKTsKKwlzdGF0dXMgPSB3cml0ZV9zaGExX2ZpbGUoYnVmLCBzeiwgdHJlZV90eXBlLCByZXN1bHQpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogV2UgYXJlIHRyeWluZyB0byBjb21lIHVwIHdpdGggYSBtZXJnZSBiZXR3ZWVuIG9uZSBhbmQgdHdvIHRoYXQKKyAqIHJlc3VsdHMgaW4gYSB0cmVlIHNoYXBlIHNpbWlsYXIgdG8gb25lLiAgVGhlIHRyZWUgdHdvIG1pZ2h0CisgKiBjb3JyZXNwb25kIHRvIGEgc3VidHJlZSBvZiBvbmUsIGluIHdoaWNoIGNhc2UgaXQgbmVlZHMgdG8gYmUKKyAqIHNoaWZ0ZWQgZG93biBieSBwcmVmaXhpbmcgb3RoZXJ3aXNlIGVtcHR5IGRpcmVjdG9yaWVzLiAgT24gdGhlCisgKiBvdGhlciBoYW5kLCBpdCBjb3VsZCBjb3ZlciB0cmVlIG9uZSBhbmQgd2UgbWlnaHQgbmVlZCB0byBwaWNrIGEKKyAqIHN1YnRyZWUgb2YgaXQuCisgKi8KK3ZvaWQgc2hpZnRfdHJlZShjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDIsCisJCXVuc2lnbmVkIGNoYXIgKnNoaWZ0ZWQsCisJCWludCBkZXB0aF9saW1pdCkKK3sKKwljaGFyICphZGRfcHJlZml4OworCWNoYXIgKmRlbF9wcmVmaXg7CisJaW50IGFkZF9zY29yZSwgZGVsX3Njb3JlOworCisJLyoKKwkgKiBORUVEU1dPUks6IHRoaXMgbGltaXRzIHRoZSByZWN1cnNpb24gZGVwdGggdG8gaGFyZGNvZGVkCisJICogdmFsdWUgJzInIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBvdmVyaGVhZC4KKwkgKi8KKwlpZiAoIWRlcHRoX2xpbWl0KQorCQlkZXB0aF9saW1pdCA9IDI7CisKKwlhZGRfc2NvcmUgPSBkZWxfc2NvcmUgPSBzY29yZV90cmVlcyhoYXNoMSwgaGFzaDIpOworCWFkZF9wcmVmaXggPSB4Y2FsbG9jKDEsIDEpOworCWRlbF9wcmVmaXggPSB4Y2FsbG9jKDEsIDEpOworCisJLyoKKwkgKiBTZWUgaWYgb25lJ3Mgc3VidHJlZSByZXNlbWJsZXMgdHdvOyBpZiBzbyB3ZSBuZWVkIHRvIHByZWZpeAorCSAqIHR3byB3aXRoIGEgZmV3IGZha2UgdHJlZXMgdG8gbWF0Y2ggdGhlIHByZWZpeC4KKwkgKi8KKwltYXRjaF90cmVlcyhoYXNoMSwgaGFzaDIsICZhZGRfc2NvcmUsICZhZGRfcHJlZml4LCAiIiwgZGVwdGhfbGltaXQpOworCisJLyoKKwkgKiBTZWUgaWYgdHdvJ3Mgc3VidHJlZSByZXNlbWJsZXMgb25lOyBpZiBzbyB3ZSBuZWVkIHRvCisJICogcGljayBvbmx5IHN1YnRyZWUgb2YgdHdvLgorCSAqLworCW1hdGNoX3RyZWVzKGhhc2gyLCBoYXNoMSwgJmRlbF9zY29yZSwgJmRlbF9wcmVmaXgsICIiLCBkZXB0aF9saW1pdCk7CisKKwkvKiBBc3N1bWUgd2UgZG8gbm90IGhhdmUgdG8gZG8gYW55IHNoaWZ0aW5nICovCisJaGFzaGNweShzaGlmdGVkLCBoYXNoMik7CisKKwlpZiAoYWRkX3Njb3JlIDwgZGVsX3Njb3JlKSB7CisJCS8qIFdlIG5lZWQgdG8gcGljayBhIHN1YnRyZWUgb2YgdHdvICovCisJCXVuc2lnbmVkIG1vZGU7CisKKwkJaWYgKCEqZGVsX3ByZWZpeCkKKwkJCXJldHVybjsKKworCQlpZiAoZ2V0X3RyZWVfZW50cnkoaGFzaDIsIGRlbF9wcmVmaXgsIHNoaWZ0ZWQsICZtb2RlKSkKKwkJCWRpZSgiY2Fubm90IGZpbmQgcGF0aCAlcyBpbiB0cmVlICVzIiwKKwkJCSAgICBkZWxfcHJlZml4LCBzaGExX3RvX2hleChoYXNoMikpOworCQlyZXR1cm47CisJfQorCisJaWYgKCEqYWRkX3ByZWZpeCkKKwkJcmV0dXJuOworCisJc3BsaWNlX3RyZWUoaGFzaDEsIGFkZF9wcmVmaXgsIGhhc2gyLCBzaGlmdGVkKTsKK30KKworLyoKKyAqIFRoZSB1c2VyIHNheXMgdGhlIHRyZWVzIHdpbGwgYmUgc2hpZnRlZCBieSB0aGlzIG11Y2guCisgKiBVbmZvcnR1bmF0ZWx5IHdlIGNhbm5vdCBmdW5kYW1lbnRhbGx5IHRlbGwgd2hpY2ggb25lIHRvCisgKiBiZSBwcmVmaXhlZCwgYXMgcmVjdXJzaXZlIG1lcmdlIGNhbiB3b3JrIGluIGVpdGhlciBkaXJlY3Rpb24uCisgKi8KK3ZvaWQgc2hpZnRfdHJlZV9ieShjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMSwKKwkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDIsCisJCSAgIHVuc2lnbmVkIGNoYXIgKnNoaWZ0ZWQsCisJCSAgIGNvbnN0IGNoYXIgKnNoaWZ0X3ByZWZpeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHN1YjFbMjBdLCBzdWIyWzIwXTsKKwl1bnNpZ25lZCBtb2RlMSwgbW9kZTI7CisJdW5zaWduZWQgY2FuZGlkYXRlID0gMDsKKworCS8qIENhbiBoYXNoMiBiZSBhIHRyZWUgYXQgc2hpZnRfcHJlZml4IGluIHRyZWUgaGFzaDE/ICovCisJaWYgKCFnZXRfdHJlZV9lbnRyeShoYXNoMSwgc2hpZnRfcHJlZml4LCBzdWIxLCAmbW9kZTEpICYmCisJICAgIFNfSVNESVIobW9kZTEpKQorCQljYW5kaWRhdGUgfD0gMTsKKworCS8qIENhbiBoYXNoMSBiZSBhIHRyZWUgYXQgc2hpZnRfcHJlZml4IGluIHRyZWUgaGFzaDI/ICovCisJaWYgKCFnZXRfdHJlZV9lbnRyeShoYXNoMiwgc2hpZnRfcHJlZml4LCBzdWIyLCAmbW9kZTIpICYmCisJICAgIFNfSVNESVIobW9kZTIpKQorCQljYW5kaWRhdGUgfD0gMjsKKworCWlmIChjYW5kaWRhdGUgPT0gMykgeworCQkvKiBCb3RoIGFyZSBwbGF1c2libGUgLS0gd2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgc2NvcmUgKi8KKwkJaW50IGJlc3Rfc2NvcmUgPSBzY29yZV90cmVlcyhoYXNoMSwgaGFzaDIpOworCQlpbnQgc2NvcmU7CisKKwkJY2FuZGlkYXRlID0gMDsKKwkJc2NvcmUgPSBzY29yZV90cmVlcyhzdWIxLCBoYXNoMik7CisJCWlmIChzY29yZSA+IGJlc3Rfc2NvcmUpIHsKKwkJCWNhbmRpZGF0ZSA9IDE7CisJCQliZXN0X3Njb3JlID0gc2NvcmU7CisJCX0KKwkJc2NvcmUgPSBzY29yZV90cmVlcyhzdWIyLCBoYXNoMSk7CisJCWlmIChzY29yZSA+IGJlc3Rfc2NvcmUpCisJCQljYW5kaWRhdGUgPSAyOworCX0KKworCWlmICghY2FuZGlkYXRlKSB7CisJCS8qIE5laXRoZXIgaXMgcGxhdXNpYmxlIC0tIGRvIG5vdCBzaGlmdCAqLworCQloYXNoY3B5KHNoaWZ0ZWQsIGhhc2gyKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjYW5kaWRhdGUgPT0gMSkKKwkJLyoKKwkJICogc2hpZnQgdHJlZTIgZG93biBieSBhZGRpbmcgc2hpZnRfcHJlZml4IGFib3ZlIGl0CisJCSAqIHRvIG1hdGNoIHRyZWUxLgorCQkgKi8KKwkJc3BsaWNlX3RyZWUoaGFzaDEsIHNoaWZ0X3ByZWZpeCwgaGFzaDIsIHNoaWZ0ZWQpOworCWVsc2UKKwkJLyoKKwkJICogc2hpZnQgdHJlZTIgdXAgYnkgcmVtb3Zpbmcgc2hpZnRfcHJlZml4IGZyb20gaXQKKwkJICogdG8gbWF0Y2ggdHJlZTEuCisJCSAqLworCQloYXNoY3B5KHNoaWZ0ZWQsIHN1YjIpOworfQpkaWZmIC0tZ2l0IGEvbWVyZ2UtZmlsZS5jIGIvbWVyZ2UtZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDU1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZS1maWxlLmMKQEAgLTAsMCArMSwxMjQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibGwtbWVyZ2UuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAibWVyZ2UtZmlsZS5oIgorCitzdGF0aWMgaW50IGZpbGxfbW1maWxlX2Jsb2IobW1maWxlX3QgKmYsIHN0cnVjdCBibG9iICpvYmopCit7CisJdm9pZCAqYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlidWYgPSByZWFkX3NoYTFfZmlsZShvYmotPm9iamVjdC5zaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlyZXR1cm4gLTE7CisJaWYgKHR5cGUgIT0gT0JKX0JMT0IpCisJCXJldHVybiAtMTsKKwlmLT5wdHIgPSBidWY7CisJZi0+c2l6ZSA9IHNpemU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbW1maWxlKG1tZmlsZV90ICpmKQoreworCWZyZWUoZi0+cHRyKTsKK30KKworc3RhdGljIHZvaWQgKnRocmVlX3dheV9maWxlbWVyZ2UoY29uc3QgY2hhciAqcGF0aCwgbW1maWxlX3QgKmJhc2UsIG1tZmlsZV90ICpvdXIsIG1tZmlsZV90ICp0aGVpciwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwlpbnQgbWVyZ2Vfc3RhdHVzOworCW1tYnVmZmVyX3QgcmVzOworCisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBieSBjbWRfbWVyZ2VfdHJlZSwgd2hpY2gKKwkgKiBkb2VzIG5vdCByZXNwZWN0IHRoZSBtZXJnZS5jb25mbGljdHN0eWxlIG9wdGlvbi4KKwkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGEgbGFiZWwgZm9yIHRoZQorCSAqIGNvbW1vbiBhbmNlc3Rvci4KKwkgKi8KKwltZXJnZV9zdGF0dXMgPSBsbF9tZXJnZSgmcmVzLCBwYXRoLCBiYXNlLCBOVUxMLAorCQkJCW91ciwgIi5vdXIiLCB0aGVpciwgIi50aGVpciIsIE5VTEwpOworCWlmIChtZXJnZV9zdGF0dXMgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCSpzaXplID0gcmVzLnNpemU7CisJcmV0dXJuIHJlcy5wdHI7Cit9CisKK3N0YXRpYyBpbnQgY29tbW9uX291dGYodm9pZCAqcHJpdl8sIG1tYnVmZmVyX3QgKm1iLCBpbnQgbmJ1ZikKK3sKKwlpbnQgaTsKKwltbWZpbGVfdCAqZHN0ID0gcHJpdl87CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrKSB7CisJCW1lbWNweShkc3QtPnB0ciArIGRzdC0+c2l6ZSwgbWJbaV0ucHRyLCBtYltpXS5zaXplKTsKKwkJZHN0LT5zaXplICs9IG1iW2ldLnNpemU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdlbmVyYXRlX2NvbW1vbl9maWxlKG1tZmlsZV90ICpyZXMsIG1tZmlsZV90ICpmMSwgbW1maWxlX3QgKmYyKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGYxLT5zaXplIDwgZjItPnNpemUgPyBmMS0+c2l6ZSA6IGYyLT5zaXplOworCXZvaWQgKnB0ciA9IHhtYWxsb2Moc2l6ZSk7CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisJeGRlbWl0Y2JfdCBlY2I7CisKKwltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCXhwcC5mbGFncyA9IDA7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJeGVjZmcuY3R4bGVuID0gMzsKKwl4ZWNmZy5mbGFncyA9IFhETF9FTUlUX0NPTU1PTjsKKwllY2Iub3V0ZiA9IGNvbW1vbl9vdXRmOworCisJcmVzLT5wdHIgPSBwdHI7CisJcmVzLT5zaXplID0gMDsKKworCWVjYi5wcml2ID0gcmVzOworCXJldHVybiB4ZGlfZGlmZihmMSwgZjIsICZ4cHAsICZ4ZWNmZywgJmVjYik7Cit9CisKK3ZvaWQgKm1lcmdlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGJsb2IgKmJhc2UsIHN0cnVjdCBibG9iICpvdXIsIHN0cnVjdCBibG9iICp0aGVpciwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwl2b2lkICpyZXMgPSBOVUxMOworCW1tZmlsZV90IGYxLCBmMiwgY29tbW9uOworCisJLyoKKwkgKiBSZW1vdmVkIGluIGVpdGhlciBicmFuY2g/CisJICoKKwkgKiBOT1RFISBUaGlzIGRlcGVuZHMgb24gdGhlIGNhbGxlciBoYXZpbmcgZG9uZSB0aGUKKwkgKiBwcm9wZXIgd2FybmluZyBhYm91dCByZW1vdmluZyBhIGZpbGUgdGhhdCBnb3QKKwkgKiBtb2RpZmllZCBpbiB0aGUgb3RoZXIgYnJhbmNoIQorCSAqLworCWlmICghb3VyIHx8ICF0aGVpcikgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCWlmIChiYXNlKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICghb3VyKQorCQkJb3VyID0gdGhlaXI7CisJCXJldHVybiByZWFkX3NoYTFfZmlsZShvdXItPm9iamVjdC5zaGExLCAmdHlwZSwgc2l6ZSk7CisJfQorCisJaWYgKGZpbGxfbW1maWxlX2Jsb2IoJmYxLCBvdXIpIDwgMCkKKwkJZ290byBvdXRfbm9fbW1maWxlOworCWlmIChmaWxsX21tZmlsZV9ibG9iKCZmMiwgdGhlaXIpIDwgMCkKKwkJZ290byBvdXRfZnJlZV9mMTsKKworCWlmIChiYXNlKSB7CisJCWlmIChmaWxsX21tZmlsZV9ibG9iKCZjb21tb24sIGJhc2UpIDwgMCkKKwkJCWdvdG8gb3V0X2ZyZWVfZjJfZjE7CisJfSBlbHNlIHsKKwkJaWYgKGdlbmVyYXRlX2NvbW1vbl9maWxlKCZjb21tb24sICZmMSwgJmYyKSA8IDApCisJCQlnb3RvIG91dF9mcmVlX2YyX2YxOworCX0KKwlyZXMgPSB0aHJlZV93YXlfZmlsZW1lcmdlKHBhdGgsICZjb21tb24sICZmMSwgJmYyLCBzaXplKTsKKwlmcmVlX21tZmlsZSgmY29tbW9uKTsKK291dF9mcmVlX2YyX2YxOgorCWZyZWVfbW1maWxlKCZmMik7CitvdXRfZnJlZV9mMToKKwlmcmVlX21tZmlsZSgmZjEpOworb3V0X25vX21tZmlsZToKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvbWVyZ2UtZmlsZS5oIGIvbWVyZ2UtZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliM2I4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZS1maWxlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIE1FUkdFX0ZJTEVfSAorI2RlZmluZSBNRVJHRV9GSUxFX0gKKworZXh0ZXJuIHZvaWQgKm1lcmdlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGJsb2IgKmJhc2UsIHN0cnVjdCBibG9iICpvdXIsCisJCQlzdHJ1Y3QgYmxvYiAqdGhlaXIsIHVuc2lnbmVkIGxvbmcgKnNpemUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL21lcmdlLXJlY3Vyc2l2ZS5jIGIvbWVyZ2UtcmVjdXJzaXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4MjA2MAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlLXJlY3Vyc2l2ZS5jCkBAIC0wLDAgKzEsMjA4OSBAQAorLyoKKyAqIFJlY3Vyc2l2ZSBNZXJnZSBhbGdvcml0aG0gc3RvbGVuIGZyb20gZ2l0LW1lcmdlLXJlY3Vyc2l2ZS5weSBieQorICogRnJlZHJpayBLdWl2aW5lbi4KKyAqIFRoZSB0aGlldmVzIHdlcmUgQWxleCBSaWVzZW4gYW5kIEpvaGFubmVzIFNjaGluZGVsaW4sIGluIEp1bmUvSnVseSAyMDA2CisgKi8KKyNpbmNsdWRlICJhZHZpY2UuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibGwtbWVyZ2UuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdHJlZSAqc2hpZnRfdHJlZV9vYmplY3Qoc3RydWN0IHRyZWUgKm9uZSwgc3RydWN0IHRyZWUgKnR3bywKKwkJCQkgICAgICBjb25zdCBjaGFyICpzdWJ0cmVlX3NoaWZ0KQoreworCXVuc2lnbmVkIGNoYXIgc2hpZnRlZFsyMF07CisKKwlpZiAoISpzdWJ0cmVlX3NoaWZ0KSB7CisJCXNoaWZ0X3RyZWUob25lLT5vYmplY3Quc2hhMSwgdHdvLT5vYmplY3Quc2hhMSwgc2hpZnRlZCwgMCk7CisJfSBlbHNlIHsKKwkJc2hpZnRfdHJlZV9ieShvbmUtPm9iamVjdC5zaGExLCB0d28tPm9iamVjdC5zaGExLCBzaGlmdGVkLAorCQkJICAgICAgc3VidHJlZV9zaGlmdCk7CisJfQorCWlmICghaGFzaGNtcCh0d28tPm9iamVjdC5zaGExLCBzaGlmdGVkKSkKKwkJcmV0dXJuIHR3bzsKKwlyZXR1cm4gbG9va3VwX3RyZWUoc2hpZnRlZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICptYWtlX3ZpcnR1YWxfY29tbWl0KHN0cnVjdCB0cmVlICp0cmVlLCBjb25zdCBjaGFyICpjb21tZW50KQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb21taXQpKTsKKwlzdHJ1Y3QgbWVyZ2VfcmVtb3RlX2Rlc2MgKmRlc2MgPSB4bWFsbG9jKHNpemVvZigqZGVzYykpOworCisJZGVzYy0+bmFtZSA9IGNvbW1lbnQ7CisJZGVzYy0+b2JqID0gKHN0cnVjdCBvYmplY3QgKiljb21taXQ7CisJY29tbWl0LT50cmVlID0gdHJlZTsKKwljb21taXQtPnV0aWwgPSBkZXNjOworCWNvbW1pdC0+b2JqZWN0LnBhcnNlZCA9IDE7CisJcmV0dXJuIGNvbW1pdDsKK30KKworLyoKKyAqIFNpbmNlIHdlIHVzZSBnZXRfdHJlZV9lbnRyeSgpLCB3aGljaCBkb2VzIG5vdCBwdXQgdGhlIHJlYWQgb2JqZWN0IGludG8KKyAqIHRoZSBvYmplY3QgcG9vbCwgd2UgY2Fubm90IHJlbHkgb24gYSA9PSBiLgorICovCitzdGF0aWMgaW50IHNoYV9lcShjb25zdCB1bnNpZ25lZCBjaGFyICphLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiKQoreworCWlmICghYSAmJiAhYikKKwkJcmV0dXJuIDI7CisJcmV0dXJuIGEgJiYgYiAmJiBoYXNoY21wKGEsIGIpID09IDA7Cit9CisKK2VudW0gcmVuYW1lX3R5cGUgeworCVJFTkFNRV9OT1JNQUwgPSAwLAorCVJFTkFNRV9ERUxFVEUsCisJUkVOQU1FX09ORV9GSUxFX1RPX09ORSwKKwlSRU5BTUVfT05FX0ZJTEVfVE9fVFdPLAorCVJFTkFNRV9UV09fRklMRVNfVE9fT05FCit9OworCitzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8geworCWVudW0gcmVuYW1lX3R5cGUgcmVuYW1lX3R5cGU7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIxOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyMjsKKwljb25zdCBjaGFyICpicmFuY2gxOworCWNvbnN0IGNoYXIgKmJyYW5jaDI7CisJc3RydWN0IHN0YWdlX2RhdGEgKmRzdF9lbnRyeTE7CisJc3RydWN0IHN0YWdlX2RhdGEgKmRzdF9lbnRyeTI7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgcmVuMV9vdGhlcjsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyByZW4yX290aGVyOworfTsKKworLyoKKyAqIFNpbmNlIHdlIHdhbnQgdG8gd3JpdGUgdGhlIGluZGV4IGV2ZW50dWFsbHksIHdlIGNhbm5vdCByZXVzZSB0aGUgaW5kZXgKKyAqIGZvciB0aGVzZSAodGVtcG9yYXJ5KSBkYXRhLgorICovCitzdHJ1Y3Qgc3RhZ2VfZGF0YSB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbW9kZTsKKwkJdW5zaWduZWQgY2hhciBzaGFbMjBdOworCX0gc3RhZ2VzWzRdOworCXN0cnVjdCByZW5hbWVfY29uZmxpY3RfaW5mbyAqcmVuYW1lX2NvbmZsaWN0X2luZm87CisJdW5zaWduZWQgcHJvY2Vzc2VkOjE7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8oZW51bSByZW5hbWVfdHlwZSByZW5hbWVfdHlwZSwKKwkJCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIxLAorCQkJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjIsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaDEsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaDIsCisJCQkJCSAgICAgIHN0cnVjdCBzdGFnZV9kYXRhICpkc3RfZW50cnkxLAorCQkJCQkgICAgICBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZHN0X2VudHJ5MiwKKwkJCQkJICAgICAgc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQkJCSAgICAgIHN0cnVjdCBzdGFnZV9kYXRhICpzcmNfZW50cnkxLAorCQkJCQkgICAgICBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqc3JjX2VudHJ5MikKK3sKKwlzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvKSk7CisJY2ktPnJlbmFtZV90eXBlID0gcmVuYW1lX3R5cGU7CisJY2ktPnBhaXIxID0gcGFpcjE7CisJY2ktPmJyYW5jaDEgPSBicmFuY2gxOworCWNpLT5icmFuY2gyID0gYnJhbmNoMjsKKworCWNpLT5kc3RfZW50cnkxID0gZHN0X2VudHJ5MTsKKwlkc3RfZW50cnkxLT5yZW5hbWVfY29uZmxpY3RfaW5mbyA9IGNpOworCWRzdF9lbnRyeTEtPnByb2Nlc3NlZCA9IDA7CisKKwlhc3NlcnQoIXBhaXIyID09ICFkc3RfZW50cnkyKTsKKwlpZiAoZHN0X2VudHJ5MikgeworCQljaS0+ZHN0X2VudHJ5MiA9IGRzdF9lbnRyeTI7CisJCWNpLT5wYWlyMiA9IHBhaXIyOworCQlkc3RfZW50cnkyLT5yZW5hbWVfY29uZmxpY3RfaW5mbyA9IGNpOworCX0KKworCWlmIChyZW5hbWVfdHlwZSA9PSBSRU5BTUVfVFdPX0ZJTEVTX1RPX09ORSkgeworCQkvKgorCQkgKiBGb3IgZWFjaCByZW5hbWUsIHRoZXJlIGNvdWxkIGhhdmUgYmVlbgorCQkgKiBtb2RpZmljYXRpb25zIG9uIHRoZSBzaWRlIG9mIGhpc3Rvcnkgd2hlcmUgdGhhdAorCQkgKiBmaWxlIHdhcyBub3QgcmVuYW1lZC4KKwkJICovCisJCWludCBvc3RhZ2UxID0gby0+YnJhbmNoMSA9PSBicmFuY2gxID8gMyA6IDI7CisJCWludCBvc3RhZ2UyID0gb3N0YWdlMSBeIDE7CisKKwkJY2ktPnJlbjFfb3RoZXIucGF0aCA9IHBhaXIxLT5vbmUtPnBhdGg7CisJCWhhc2hjcHkoY2ktPnJlbjFfb3RoZXIuc2hhMSwgc3JjX2VudHJ5MS0+c3RhZ2VzW29zdGFnZTFdLnNoYSk7CisJCWNpLT5yZW4xX290aGVyLm1vZGUgPSBzcmNfZW50cnkxLT5zdGFnZXNbb3N0YWdlMV0ubW9kZTsKKworCQljaS0+cmVuMl9vdGhlci5wYXRoID0gcGFpcjItPm9uZS0+cGF0aDsKKwkJaGFzaGNweShjaS0+cmVuMl9vdGhlci5zaGExLCBzcmNfZW50cnkyLT5zdGFnZXNbb3N0YWdlMl0uc2hhKTsKKwkJY2ktPnJlbjJfb3RoZXIubW9kZSA9IHNyY19lbnRyeTItPnN0YWdlc1tvc3RhZ2UyXS5tb2RlOworCX0KK30KKworc3RhdGljIGludCBzaG93KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLCBpbnQgdikKK3sKKwlyZXR1cm4gKCFvLT5jYWxsX2RlcHRoICYmIG8tPnZlcmJvc2l0eSA+PSB2KSB8fCBvLT52ZXJib3NpdHkgPj0gNTsKK30KKworc3RhdGljIHZvaWQgZmx1c2hfb3V0cHV0KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvKQoreworCWlmIChvLT5vYnVmLmxlbikgeworCQlmcHV0cyhvLT5vYnVmLmJ1Ziwgc3Rkb3V0KTsKKwkJc3RyYnVmX3Jlc2V0KCZvLT5vYnVmKTsKKwl9Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitzdGF0aWMgdm9pZCBvdXRwdXQoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sIGludCB2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJaWYgKCFzaG93KG8sIHYpKQorCQlyZXR1cm47CisKKwlzdHJidWZfZ3Jvdygmby0+b2J1Ziwgby0+Y2FsbF9kZXB0aCAqIDIgKyAyKTsKKwltZW1zZXQoby0+b2J1Zi5idWYgKyBvLT5vYnVmLmxlbiwgJyAnLCBvLT5jYWxsX2RlcHRoICogMik7CisJc3RyYnVmX3NldGxlbigmby0+b2J1Ziwgby0+b2J1Zi5sZW4gKyBvLT5jYWxsX2RlcHRoICogMik7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdHJidWZfdmFkZGYoJm8tPm9idWYsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlzdHJidWZfYWRkKCZvLT5vYnVmLCAiXG4iLCAxKTsKKwlpZiAoIW8tPmJ1ZmZlcl9vdXRwdXQpCisJCWZsdXNoX291dHB1dChvKTsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X2NvbW1pdF90aXRsZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBpOworCWZsdXNoX291dHB1dChvKTsKKwlmb3IgKGkgPSBvLT5jYWxsX2RlcHRoOyBpLS07KQorCQlmcHV0cygiICAiLCBzdGRvdXQpOworCWlmIChjb21taXQtPnV0aWwpCisJCXByaW50ZigidmlydHVhbCAlc1xuIiwgbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KS0+bmFtZSk7CisJZWxzZSB7CisJCXByaW50ZigiJXMgIiwgZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIERFRkFVTFRfQUJCUkVWKSk7CisJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSAhPSAwKQorCQkJcHJpbnRmKF8oIihiYWQgY29tbWl0KVxuIikpOworCQllbHNlIHsKKwkJCWNvbnN0IGNoYXIgKnRpdGxlOworCQkJaW50IGxlbiA9IGZpbmRfY29tbWl0X3N1YmplY3QoY29tbWl0LT5idWZmZXIsICZ0aXRsZSk7CisJCQlpZiAobGVuKQorCQkJCXByaW50ZigiJS4qc1xuIiwgbGVuLCB0aXRsZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgYWRkX2NhY2hlaW5mbyh1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlLCBpbnQgcmVmcmVzaCwgaW50IG9wdGlvbnMpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwljZSA9IG1ha2VfY2FjaGVfZW50cnkobW9kZSwgc2hhMSA/IHNoYTEgOiBudWxsX3NoYTEsIHBhdGgsIHN0YWdlLCByZWZyZXNoKTsKKwlpZiAoIWNlKQorCQlyZXR1cm4gZXJyb3IoXygiYWRkaW5mb19jYWNoZSBmYWlsZWQgZm9yIHBhdGggJyVzJyIpLCBwYXRoKTsKKwlyZXR1cm4gYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHRpb25zKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF90cmVlX2Rlc2NfZnJvbV90cmVlKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIHN0cnVjdCB0cmVlICp0cmVlKQoreworCXBhcnNlX3RyZWUodHJlZSk7CisJaW5pdF90cmVlX2Rlc2MoZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKK30KKworc3RhdGljIGludCBnaXRfbWVyZ2VfdHJlZXMoaW50IGluZGV4X29ubHksCisJCQkgICBzdHJ1Y3QgdHJlZSAqY29tbW9uLAorCQkJICAgc3RydWN0IHRyZWUgKmhlYWQsCisJCQkgICBzdHJ1Y3QgdHJlZSAqbWVyZ2UpCit7CisJaW50IHJjOworCXN0cnVjdCB0cmVlX2Rlc2MgdFszXTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlpZiAoaW5kZXhfb25seSkKKwkJb3B0cy5pbmRleF9vbmx5ID0gMTsKKwllbHNlCisJCW9wdHMudXBkYXRlID0gMTsKKwlvcHRzLm1lcmdlID0gMTsKKwlvcHRzLmhlYWRfaWR4ID0gMjsKKwlvcHRzLmZuID0gdGhyZWV3YXlfbWVyZ2U7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKwlzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCZvcHRzLCAibWVyZ2UiKTsKKworCWluaXRfdHJlZV9kZXNjX2Zyb21fdHJlZSh0KzAsIGNvbW1vbik7CisJaW5pdF90cmVlX2Rlc2NfZnJvbV90cmVlKHQrMSwgaGVhZCk7CisJaW5pdF90cmVlX2Rlc2NfZnJvbV90cmVlKHQrMiwgbWVyZ2UpOworCisJcmMgPSB1bnBhY2tfdHJlZXMoMywgdCwgJm9wdHMpOworCWNhY2hlX3RyZWVfZnJlZSgmYWN0aXZlX2NhY2hlX3RyZWUpOworCXJldHVybiByYzsKK30KKworc3RydWN0IHRyZWUgKndyaXRlX3RyZWVfZnJvbV9tZW1vcnkoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8pCit7CisJc3RydWN0IHRyZWUgKnJlc3VsdCA9IE5VTEw7CisKKwlpZiAodW5tZXJnZWRfY2FjaGUoKSkgeworCQlpbnQgaTsKKwkJZnByaW50ZihzdGRlcnIsICJCVUc6IFRoZXJlIGFyZSB1bm1lcmdlZCBpbmRleCBlbnRyaWVzOlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJCWlmIChjZV9zdGFnZShjZSkpCisJCQkJZnByaW50ZihzdGRlcnIsICJCVUc6ICVkICUuKnNcbiIsIGNlX3N0YWdlKGNlKSwKKwkJCQkJKGludCljZV9uYW1lbGVuKGNlKSwgY2UtPm5hbWUpOworCQl9CisJCWRpZSgiQnVnIGluIG1lcmdlLXJlY3Vyc2l2ZS5jIik7CisJfQorCisJaWYgKCFhY3RpdmVfY2FjaGVfdHJlZSkKKwkJYWN0aXZlX2NhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CisKKwlpZiAoIWNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoYWN0aXZlX2NhY2hlX3RyZWUpICYmCisJICAgIGNhY2hlX3RyZWVfdXBkYXRlKGFjdGl2ZV9jYWNoZV90cmVlLAorCQkJICAgICAgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIsIDApIDwgMCkKKwkJZGllKF8oImVycm9yIGJ1aWxkaW5nIHRyZWVzIikpOworCisJcmVzdWx0ID0gbG9va3VwX3RyZWUoYWN0aXZlX2NhY2hlX3RyZWUtPnNoYTEpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBzYXZlX2ZpbGVzX2RpcnMoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sIGNvbnN0IGNoYXIgKnBhdGgsCisJCXVuc2lnbmVkIGludCBtb2RlLCBpbnQgc3RhZ2UsIHZvaWQgKmNvbnRleHQpCit7CisJaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKwljaGFyICpuZXdwYXRoID0geG1hbGxvYyhiYXNlbGVuICsgbGVuICsgMSk7CisJc3RydWN0IG1lcmdlX29wdGlvbnMgKm8gPSBjb250ZXh0OworCisJbWVtY3B5KG5ld3BhdGgsIGJhc2UsIGJhc2VsZW4pOworCW1lbWNweShuZXdwYXRoICsgYmFzZWxlbiwgcGF0aCwgbGVuKTsKKwluZXdwYXRoW2Jhc2VsZW4gKyBsZW5dID0gJ1wwJzsKKworCWlmIChTX0lTRElSKG1vZGUpKQorCQlzdHJpbmdfbGlzdF9pbnNlcnQoJm8tPmN1cnJlbnRfZGlyZWN0b3J5X3NldCwgbmV3cGF0aCk7CisJZWxzZQorCQlzdHJpbmdfbGlzdF9pbnNlcnQoJm8tPmN1cnJlbnRfZmlsZV9zZXQsIG5ld3BhdGgpOworCWZyZWUobmV3cGF0aCk7CisKKwlyZXR1cm4gKFNfSVNESVIobW9kZSkgPyBSRUFEX1RSRUVfUkVDVVJTSVZFIDogMCk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2ZpbGVzX2RpcnMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sIHN0cnVjdCB0cmVlICp0cmVlKQoreworCWludCBuOworCXN0cnVjdCBwYXRoc3BlYyBtYXRjaF9hbGw7CisJaW5pdF9wYXRoc3BlYygmbWF0Y2hfYWxsLCBOVUxMKTsKKwlpZiAocmVhZF90cmVlX3JlY3Vyc2l2ZSh0cmVlLCAiIiwgMCwgMCwgJm1hdGNoX2FsbCwgc2F2ZV9maWxlc19kaXJzLCBvKSkKKwkJcmV0dXJuIDA7CisJbiA9IG8tPmN1cnJlbnRfZmlsZV9zZXQubnIgKyBvLT5jdXJyZW50X2RpcmVjdG9yeV9zZXQubnI7CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBSZXR1cm5zIGFuIGluZGV4X2VudHJ5IGluc3RhbmNlIHdoaWNoIGRvZXNuJ3QgaGF2ZSB0byBjb3JyZXNwb25kIHRvCisgKiBhIHJlYWwgY2FjaGUgZW50cnkgaW4gR2l0J3MgaW5kZXguCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqaW5zZXJ0X3N0YWdlX2RhdGEoY29uc3QgY2hhciAqcGF0aCwKKwkJc3RydWN0IHRyZWUgKm8sIHN0cnVjdCB0cmVlICphLCBzdHJ1Y3QgdHJlZSAqYiwKKwkJc3RydWN0IHN0cmluZ19saXN0ICplbnRyaWVzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBzdGFnZV9kYXRhICplID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0YWdlX2RhdGEpKTsKKwlnZXRfdHJlZV9lbnRyeShvLT5vYmplY3Quc2hhMSwgcGF0aCwKKwkJCWUtPnN0YWdlc1sxXS5zaGEsICZlLT5zdGFnZXNbMV0ubW9kZSk7CisJZ2V0X3RyZWVfZW50cnkoYS0+b2JqZWN0LnNoYTEsIHBhdGgsCisJCQllLT5zdGFnZXNbMl0uc2hhLCAmZS0+c3RhZ2VzWzJdLm1vZGUpOworCWdldF90cmVlX2VudHJ5KGItPm9iamVjdC5zaGExLCBwYXRoLAorCQkJZS0+c3RhZ2VzWzNdLnNoYSwgJmUtPnN0YWdlc1szXS5tb2RlKTsKKwlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGVudHJpZXMsIHBhdGgpOworCWl0ZW0tPnV0aWwgPSBlOworCXJldHVybiBlOworfQorCisvKgorICogQ3JlYXRlIGEgZGljdGlvbmFyeSBtYXBwaW5nIGZpbGUgbmFtZXMgdG8gc3RhZ2VfZGF0YSBvYmplY3RzLiBUaGUKKyAqIGRpY3Rpb25hcnkgY29udGFpbnMgb25lIGVudHJ5IGZvciBldmVyeSBwYXRoIHdpdGggYSBub24temVybyBzdGFnZSBlbnRyeS4KKyAqLworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2V0X3VubWVyZ2VkKHZvaWQpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICp1bm1lcmdlZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCWludCBpOworCisJdW5tZXJnZWQtPnN0cmR1cF9zdHJpbmdzID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJc3RydWN0IHN0YWdlX2RhdGEgKmU7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWlmICghY2Vfc3RhZ2UoY2UpKQorCQkJY29udGludWU7CisKKwkJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cCh1bm1lcmdlZCwgY2UtPm5hbWUpOworCQlpZiAoIWl0ZW0pIHsKKwkJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQodW5tZXJnZWQsIGNlLT5uYW1lKTsKKwkJCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RhZ2VfZGF0YSkpOworCQl9CisJCWUgPSBpdGVtLT51dGlsOworCQllLT5zdGFnZXNbY2Vfc3RhZ2UoY2UpXS5tb2RlID0gY2UtPmNlX21vZGU7CisJCWhhc2hjcHkoZS0+c3RhZ2VzW2NlX3N0YWdlKGNlKV0uc2hhLCBjZS0+c2hhMSk7CisJfQorCisJcmV0dXJuIHVubWVyZ2VkOworfQorCitzdGF0aWMgaW50IHN0cmluZ19saXN0X2RmX25hbWVfY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpvbmUgPSBhOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICp0d28gPSBiOworCWludCBvbmVsZW4gPSBzdHJsZW4ob25lLT5zdHJpbmcpOworCWludCB0d29sZW4gPSBzdHJsZW4odHdvLT5zdHJpbmcpOworCS8qCisJICogSGVyZSB3ZSBvbmx5IGNhcmUgdGhhdCBlbnRyaWVzIGZvciBEL0YgY29uZmxpY3RzIGFyZQorCSAqIGFkamFjZW50LCBpbiBwYXJ0aWN1bGFyIHdpdGggdGhlIGZpbGUgb2YgdGhlIEQvRiBjb25mbGljdAorCSAqIGFwcGVhcmluZyBiZWZvcmUgZmlsZXMgYmVsb3cgdGhlIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5LgorCSAqIFRoZSBvcmRlciBvZiB0aGUgcmVzdCBvZiB0aGUgbGlzdCBpcyBpcnJlbGV2YW50IGZvciB1cy4KKwkgKgorCSAqIFRvIGFjaGlldmUgdGhpcywgd2Ugc29ydCB3aXRoIGRmX25hbWVfY29tcGFyZSBhbmQgcHJvdmlkZQorCSAqIHRoZSBtb2RlIFNfSUZESVIgc28gdGhhdCBEL0YgY29uZmxpY3RzIHdpbGwgc29ydCBjb3JyZWN0bHkuCisJICogV2UgdXNlIHRoZSBtb2RlIFNfSUZESVIgZm9yIGV2ZXJ5dGhpbmcgZWxzZSBmb3Igc2ltcGxpY2l0eSwKKwkgKiBzaW5jZSBpbiBvdGhlciBjYXNlcyBhbnkgY2hhbmdlcyBpbiB0aGVpciBvcmRlciBkdWUgdG8KKwkgKiBzb3J0aW5nIGNhdXNlIG5vIHByb2JsZW1zIGZvciB1cy4KKwkgKi8KKwlpbnQgY21wID0gZGZfbmFtZV9jb21wYXJlKG9uZS0+c3RyaW5nLCBvbmVsZW4sIFNfSUZESVIsCisJCQkJICB0d28tPnN0cmluZywgdHdvbGVuLCBTX0lGRElSKTsKKwkvKgorCSAqIE5vdyB0aGF0ICdmb28nIGFuZCAnZm9vL2JhcicgY29tcGFyZSBlcXVhbCwgd2UgaGF2ZSB0byBtYWtlIHN1cmUKKwkgKiB0aGF0ICdmb28nIGNvbWVzIGJlZm9yZSAnZm9vL2JhcicuCisJICovCisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlyZXR1cm4gb25lbGVuIC0gdHdvbGVuOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfZGZfY29uZmxpY3RfZmlsZXMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQkJICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmVudHJpZXMpCit7CisJLyogSWYgdGhlcmUgaXMgYSBEL0YgY29uZmxpY3QgYW5kIHRoZSBmaWxlIGZvciBzdWNoIGEgY29uZmxpY3QKKwkgKiBjdXJyZW50bHkgZXhpc3QgaW4gdGhlIHdvcmtpbmcgdHJlZSwgd2Ugd2FudCB0byBhbGxvdyBpdCB0byBiZQorCSAqIHJlbW92ZWQgdG8gbWFrZSByb29tIGZvciB0aGUgY29ycmVzcG9uZGluZyBkaXJlY3RvcnkgaWYgbmVlZGVkLgorCSAqIFRoZSBmaWxlcyB1bmRlcm5lYXRoIHRoZSBkaXJlY3RvcmllcyBvZiBzdWNoIEQvRiBjb25mbGljdHMgd2lsbAorCSAqIGJlIHByb2Nlc3NlZCBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSBpbnZvbHZlZCBpbiB0aGUgRC9GCisJICogY29uZmxpY3QuICBJZiB0aGUgRC9GIGRpcmVjdG9yeSBlbmRzIHVwIGJlaW5nIHJlbW92ZWQgYnkgdGhlCisJICogbWVyZ2UsIHRoZW4gd2Ugd29uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgRC9GIGZpbGUuICBJZiB0aGUgRC9GCisJICogZGlyZWN0b3J5IG5lZWRzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHdvcmtpbmcgY29weSwgdGhlbiB0aGUgRC9GCisJICogZmlsZSB3aWxsIHNpbXBseSBiZSByZW1vdmVkIChpbiBtYWtlX3Jvb21fZm9yX3BhdGgoKSkgdG8gbWFrZQorCSAqIHJvb20gZm9yIHRoZSBuZWNlc3NhcnkgcGF0aHMuICBOb3RlIHRoYXQgaWYgYm90aCB0aGUgZGlyZWN0b3J5CisJICogYW5kIHRoZSBmaWxlIG5lZWQgdG8gYmUgcHJlc2VudCwgdGhlbiB0aGUgRC9GIGZpbGUgd2lsbCBiZQorCSAqIHJlaW5zdGF0ZWQgd2l0aCBhIG5ldyB1bmlxdWUgbmFtZSBhdCB0aGUgdGltZSBpdCBpcyBwcm9jZXNzZWQuCisJICovCisJc3RydWN0IHN0cmluZ19saXN0IGRmX3NvcnRlZF9lbnRyaWVzOworCWNvbnN0IGNoYXIgKmxhc3RfZmlsZSA9IE5VTEw7CisJaW50IGxhc3RfbGVuID0gMDsKKwlpbnQgaTsKKworCS8qCisJICogSWYgd2UncmUgbWVyZ2luZyBtZXJnZS1iYXNlcywgd2UgZG9uJ3Qgd2FudCB0byBib3RoZXIgd2l0aAorCSAqIGFueSB3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VzLgorCSAqLworCWlmIChvLT5jYWxsX2RlcHRoKQorCQlyZXR1cm47CisKKwkvKiBFbnN1cmUgRC9GIGNvbmZsaWN0cyBhcmUgYWRqYWNlbnQgaW4gdGhlIGVudHJpZXMgbGlzdC4gKi8KKwltZW1zZXQoJmRmX3NvcnRlZF9lbnRyaWVzLCAwLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXMtPm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKm5leHQgPSAmZW50cmllcy0+aXRlbXNbaV07CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZGZfc29ydGVkX2VudHJpZXMsIG5leHQtPnN0cmluZyktPnV0aWwgPQorCQkJCSAgIG5leHQtPnV0aWw7CisJfQorCXFzb3J0KGRmX3NvcnRlZF9lbnRyaWVzLml0ZW1zLCBlbnRyaWVzLT5uciwgc2l6ZW9mKCplbnRyaWVzLT5pdGVtcyksCisJICAgICAgc3RyaW5nX2xpc3RfZGZfbmFtZV9jb21wYXJlKTsKKworCXN0cmluZ19saXN0X2NsZWFyKCZvLT5kZl9jb25mbGljdF9maWxlX3NldCwgMSk7CisJZm9yIChpID0gMDsgaSA8IGRmX3NvcnRlZF9lbnRyaWVzLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IGRmX3NvcnRlZF9lbnRyaWVzLml0ZW1zW2ldLnN0cmluZzsKKwkJaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKwkJc3RydWN0IHN0YWdlX2RhdGEgKmUgPSBkZl9zb3J0ZWRfZW50cmllcy5pdGVtc1tpXS51dGlsOworCisJCS8qCisJCSAqIENoZWNrIGlmIGxhc3RfZmlsZSAmIHBhdGggY29ycmVzcG9uZCB0byBhIEQvRiBjb25mbGljdDsKKwkJICogaS5lLiB3aGV0aGVyIHBhdGggaXMgbGFzdF9maWxlKycvJys8c29tZXRoaW5nPi4KKwkJICogSWYgc28sIHJlY29yZCB0aGF0IGl0J3Mgb2theSB0byByZW1vdmUgbGFzdF9maWxlIHRvIG1ha2UKKwkJICogcm9vbSBmb3IgcGF0aCBhbmQgZnJpZW5kcyBpZiBuZWVkZWQuCisJCSAqLworCQlpZiAobGFzdF9maWxlICYmCisJCSAgICBsZW4gPiBsYXN0X2xlbiAmJgorCQkgICAgbWVtY21wKHBhdGgsIGxhc3RfZmlsZSwgbGFzdF9sZW4pID09IDAgJiYKKwkJICAgIHBhdGhbbGFzdF9sZW5dID09ICcvJykgeworCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZvLT5kZl9jb25mbGljdF9maWxlX3NldCwgbGFzdF9maWxlKTsKKwkJfQorCisJCS8qCisJCSAqIERldGVybWluZSB3aGV0aGVyIHBhdGggY291bGQgZXhpc3QgYXMgYSBmaWxlIGluIHRoZQorCQkgKiB3b3JraW5nIGRpcmVjdG9yeSBhcyBhIHBvc3NpYmxlIEQvRiBjb25mbGljdC4gIFRoaXMKKwkJICogd2lsbCBvbmx5IG9jY3VyIHdoZW4gaXQgZXhpc3RzIGluIHN0YWdlIDIgYXMgYQorCQkgKiBmaWxlLgorCQkgKi8KKwkJaWYgKFNfSVNSRUcoZS0+c3RhZ2VzWzJdLm1vZGUpIHx8IFNfSVNMTksoZS0+c3RhZ2VzWzJdLm1vZGUpKSB7CisJCQlsYXN0X2ZpbGUgPSBwYXRoOworCQkJbGFzdF9sZW4gPSBsZW47CisJCX0gZWxzZSB7CisJCQlsYXN0X2ZpbGUgPSBOVUxMOworCQl9CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZkZl9zb3J0ZWRfZW50cmllcywgMCk7Cit9CisKK3N0cnVjdCByZW5hbWUgeworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyOworCXN0cnVjdCBzdGFnZV9kYXRhICpzcmNfZW50cnk7CisJc3RydWN0IHN0YWdlX2RhdGEgKmRzdF9lbnRyeTsKKwl1bnNpZ25lZCBwcm9jZXNzZWQ6MTsKK307CisKKy8qCisgKiBHZXQgaW5mb3JtYXRpb24gb2YgYWxsIHJlbmFtZXMgd2hpY2ggb2NjdXJyZWQgYmV0d2VlbiAnb190cmVlJyBhbmQKKyAqICd0cmVlJy4gV2UgbmVlZCB0aGUgdGhyZWUgdHJlZXMgaW4gdGhlIG1lcmdlICgnb190cmVlJywgJ2FfdHJlZScgYW5kCisgKiAnYl90cmVlJykgdG8gYmUgYWJsZSB0byBhc3NvY2lhdGUgdGhlIGNvcnJlY3QgY2FjaGUgZW50cmllcyB3aXRoCisgKiB0aGUgcmVuYW1lIGluZm9ybWF0aW9uLiAndHJlZScgaXMgYWx3YXlzIGVxdWFsIHRvIGVpdGhlciBhX3RyZWUgb3IgYl90cmVlLgorICovCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICpnZXRfcmVuYW1lcyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCQkgICAgICAgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkJICAgICAgIHN0cnVjdCB0cmVlICpvX3RyZWUsCisJCQkJICAgICAgIHN0cnVjdCB0cmVlICphX3RyZWUsCisJCQkJICAgICAgIHN0cnVjdCB0cmVlICpiX3RyZWUsCisJCQkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqZW50cmllcykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlbmFtZXM7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBvcHRzOworCisJcmVuYW1lcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCWRpZmZfc2V0dXAoJm9wdHMpOworCURJRkZfT1BUX1NFVCgmb3B0cywgUkVDVVJTSVZFKTsKKwlESUZGX09QVF9DTFIoJm9wdHMsIFJFTkFNRV9FTVBUWSk7CisJb3B0cy5kZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfUkVOQU1FOworCW9wdHMucmVuYW1lX2xpbWl0ID0gby0+bWVyZ2VfcmVuYW1lX2xpbWl0ID49IDAgPyBvLT5tZXJnZV9yZW5hbWVfbGltaXQgOgorCQkJICAgIG8tPmRpZmZfcmVuYW1lX2xpbWl0ID49IDAgPyBvLT5kaWZmX3JlbmFtZV9saW1pdCA6CisJCQkgICAgMTAwMDsKKwlvcHRzLnJlbmFtZV9zY29yZSA9IG8tPnJlbmFtZV9zY29yZTsKKwlvcHRzLnNob3dfcmVuYW1lX3Byb2dyZXNzID0gby0+c2hvd19yZW5hbWVfcHJvZ3Jlc3M7CisJb3B0cy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCWRpZmZfc2V0dXBfZG9uZSgmb3B0cyk7CisJZGlmZl90cmVlX3NoYTEob190cmVlLT5vYmplY3Quc2hhMSwgdHJlZS0+b2JqZWN0LnNoYTEsICIiLCAmb3B0cyk7CisJZGlmZmNvcmVfc3RkKCZvcHRzKTsKKwlpZiAob3B0cy5uZWVkZWRfcmVuYW1lX2xpbWl0ID4gby0+bmVlZGVkX3JlbmFtZV9saW1pdCkKKwkJby0+bmVlZGVkX3JlbmFtZV9saW1pdCA9IG9wdHMubmVlZGVkX3JlbmFtZV9saW1pdDsKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgKytpKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlzdHJ1Y3QgcmVuYW1lICpyZTsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIgPSBkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldOworCQlpZiAocGFpci0+c3RhdHVzICE9ICdSJykgeworCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHBhaXIpOworCQkJY29udGludWU7CisJCX0KKwkJcmUgPSB4bWFsbG9jKHNpemVvZigqcmUpKTsKKwkJcmUtPnByb2Nlc3NlZCA9IDA7CisJCXJlLT5wYWlyID0gcGFpcjsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cChlbnRyaWVzLCByZS0+cGFpci0+b25lLT5wYXRoKTsKKwkJaWYgKCFpdGVtKQorCQkJcmUtPnNyY19lbnRyeSA9IGluc2VydF9zdGFnZV9kYXRhKHJlLT5wYWlyLT5vbmUtPnBhdGgsCisJCQkJCW9fdHJlZSwgYV90cmVlLCBiX3RyZWUsIGVudHJpZXMpOworCQllbHNlCisJCQlyZS0+c3JjX2VudHJ5ID0gaXRlbS0+dXRpbDsKKworCQlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKGVudHJpZXMsIHJlLT5wYWlyLT50d28tPnBhdGgpOworCQlpZiAoIWl0ZW0pCisJCQlyZS0+ZHN0X2VudHJ5ID0gaW5zZXJ0X3N0YWdlX2RhdGEocmUtPnBhaXItPnR3by0+cGF0aCwKKwkJCQkJb190cmVlLCBhX3RyZWUsIGJfdHJlZSwgZW50cmllcyk7CisJCWVsc2UKKwkJCXJlLT5kc3RfZW50cnkgPSBpdGVtLT51dGlsOworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHJlbmFtZXMsIHBhaXItPm9uZS0+cGF0aCk7CisJCWl0ZW0tPnV0aWwgPSByZTsKKwl9CisJb3B0cy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCWRpZmZfcXVldWVkX2RpZmYubnIgPSAwOworCWRpZmZfZmx1c2goJm9wdHMpOworCXJldHVybiByZW5hbWVzOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9zdGFnZXMoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm8sCisJCQkgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEsCisJCQkgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIpCit7CisKKwkvKgorCSAqIE5PVEU6IEl0IGlzIHVzdWFsbHkgYSBiYWQgaWRlYSB0byBjYWxsIHVwZGF0ZV9zdGFnZXMgb24gYSBwYXRoCisJICogYmVmb3JlIGNhbGxpbmcgdXBkYXRlX2ZpbGUgb24gdGhhdCBzYW1lIHBhdGgsIHNpbmNlIGl0IGNhbgorCSAqIHNvbWV0aW1lcyBsZWFkIHRvIHNwdXJpb3VzICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlLi4uIgorCSAqIG1lc3NhZ2VzIGZyb20gdXBkYXRlX2ZpbGUgKHZpYSBtYWtlX3Jvb21fZm9yIHBhdGggdmlhCisJICogd291bGRfbG9zZV91bnRyYWNrZWQpLiAgSW5zdGVhZCwgcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIGNhbGxzCisJICogKGV4ZWN1dGluZyB1cGRhdGVfZmlsZSBmaXJzdCBhbmQgdGhlbiB1cGRhdGVfc3RhZ2VzKS4KKwkgKi8KKwlpbnQgY2xlYXIgPSAxOworCWludCBvcHRpb25zID0gQUREX0NBQ0hFX09LX1RPX0FERCB8IEFERF9DQUNIRV9TS0lQX0RGQ0hFQ0s7CisJaWYgKGNsZWFyKQorCQlpZiAocmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSkKKwkJCXJldHVybiAtMTsKKwlpZiAobykKKwkJaWYgKGFkZF9jYWNoZWluZm8oby0+bW9kZSwgby0+c2hhMSwgcGF0aCwgMSwgMCwgb3B0aW9ucykpCisJCQlyZXR1cm4gLTE7CisJaWYgKGEpCisJCWlmIChhZGRfY2FjaGVpbmZvKGEtPm1vZGUsIGEtPnNoYTEsIHBhdGgsIDIsIDAsIG9wdGlvbnMpKQorCQkJcmV0dXJuIC0xOworCWlmIChiKQorCQlpZiAoYWRkX2NhY2hlaW5mbyhiLT5tb2RlLCBiLT5zaGExLCBwYXRoLCAzLCAwLCBvcHRpb25zKSkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2VudHJ5KHN0cnVjdCBzdGFnZV9kYXRhICplbnRyeSwKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqbywKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYikKK3sKKwllbnRyeS0+cHJvY2Vzc2VkID0gMDsKKwllbnRyeS0+c3RhZ2VzWzFdLm1vZGUgPSBvLT5tb2RlOworCWVudHJ5LT5zdGFnZXNbMl0ubW9kZSA9IGEtPm1vZGU7CisJZW50cnktPnN0YWdlc1szXS5tb2RlID0gYi0+bW9kZTsKKwloYXNoY3B5KGVudHJ5LT5zdGFnZXNbMV0uc2hhLCBvLT5zaGExKTsKKwloYXNoY3B5KGVudHJ5LT5zdGFnZXNbMl0uc2hhLCBhLT5zaGExKTsKKwloYXNoY3B5KGVudHJ5LT5zdGFnZXNbM10uc2hhLCBiLT5zaGExKTsKK30KKworc3RhdGljIGludCByZW1vdmVfZmlsZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywgaW50IGNsZWFuLAorCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwgaW50IG5vX3dkKQoreworCWludCB1cGRhdGVfY2FjaGUgPSBvLT5jYWxsX2RlcHRoIHx8IGNsZWFuOworCWludCB1cGRhdGVfd29ya2luZ19kaXJlY3RvcnkgPSAhby0+Y2FsbF9kZXB0aCAmJiAhbm9fd2Q7CisKKwlpZiAodXBkYXRlX2NhY2hlKSB7CisJCWlmIChyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQorCQkJcmV0dXJuIC0xOworCX0KKwlpZiAodXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5KSB7CisJCWlmIChyZW1vdmVfcGF0aChwYXRoKSkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICp1bmlxdWVfcGF0aChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnJhbmNoKQoreworCWNoYXIgKm5ld3BhdGggPSB4bWFsbG9jKHN0cmxlbihwYXRoKSArIDEgKyBzdHJsZW4oYnJhbmNoKSArIDggKyAxKTsKKwlpbnQgc3VmZml4ID0gMDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpwID0gbmV3cGF0aCArIHN0cmxlbihwYXRoKTsKKwlzdHJjcHkobmV3cGF0aCwgcGF0aCk7CisJKihwKyspID0gJ34nOworCXN0cmNweShwLCBicmFuY2gpOworCWZvciAoOyAqcDsgKytwKQorCQlpZiAoJy8nID09ICpwKQorCQkJKnAgPSAnXyc7CisJd2hpbGUgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoJm8tPmN1cnJlbnRfZmlsZV9zZXQsIG5ld3BhdGgpIHx8CisJICAgICAgIHN0cmluZ19saXN0X2hhc19zdHJpbmcoJm8tPmN1cnJlbnRfZGlyZWN0b3J5X3NldCwgbmV3cGF0aCkgfHwKKwkgICAgICAgbHN0YXQobmV3cGF0aCwgJnN0KSA9PSAwKQorCQlzcHJpbnRmKHAsICJfJWQiLCBzdWZmaXgrKyk7CisKKwlzdHJpbmdfbGlzdF9pbnNlcnQoJm8tPmN1cnJlbnRfZmlsZV9zZXQsIG5ld3BhdGgpOworCXJldHVybiBuZXdwYXRoOworfQorCitzdGF0aWMgaW50IGRpcl9pbl93YXkoY29uc3QgY2hhciAqcGF0aCwgaW50IGNoZWNrX3dvcmtpbmdfY29weSkKK3sKKwlpbnQgcG9zLCBwYXRobGVuID0gc3RybGVuKHBhdGgpOworCWNoYXIgKmRpcnBhdGggPSB4bWFsbG9jKHBhdGhsZW4gKyAyKTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCXN0cmNweShkaXJwYXRoLCBwYXRoKTsKKwlkaXJwYXRoW3BhdGhsZW5dID0gJy8nOworCWRpcnBhdGhbcGF0aGxlbisxXSA9ICdcMCc7CisKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhkaXJwYXRoLCBwYXRobGVuKzEpOworCisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC0xIC0gcG9zOworCWlmIChwb3MgPCBhY3RpdmVfbnIgJiYKKwkgICAgIXN0cm5jbXAoZGlycGF0aCwgYWN0aXZlX2NhY2hlW3Bvc10tPm5hbWUsIHBhdGhsZW4rMSkpIHsKKwkJZnJlZShkaXJwYXRoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZnJlZShkaXJwYXRoKTsKKwlyZXR1cm4gY2hlY2tfd29ya2luZ19jb3B5ICYmICFsc3RhdChwYXRoLCAmc3QpICYmIFNfSVNESVIoc3Quc3RfbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgd2FzX3RyYWNrZWQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKKworCWlmIChwb3MgPCAwKQorCQlwb3MgPSAtMSAtIHBvczsKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yICYmCisJICAgICAgICFzdHJjbXAocGF0aCwgYWN0aXZlX2NhY2hlW3Bvc10tPm5hbWUpKSB7CisJCS8qCisJCSAqIElmIHN0YWdlICMwLCBpdCBpcyBkZWZpbml0ZWx5IHRyYWNrZWQuCisJCSAqIElmIGl0IGhhcyBzdGFnZSAjMiB0aGVuIGl0IHdhcyB0cmFja2VkCisJCSAqIGJlZm9yZSB0aGlzIG1lcmdlIHN0YXJ0ZWQuICBBbGwgb3RoZXIKKwkJICogY2FzZXMgdGhlIHBhdGggd2FzIG5vdCB0cmFja2VkLgorCQkgKi8KKwkJc3dpdGNoIChjZV9zdGFnZShhY3RpdmVfY2FjaGVbcG9zXSkpIHsKKwkJY2FzZSAwOgorCQljYXNlIDI6CisJCQlyZXR1cm4gMTsKKwkJfQorCQlwb3MrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd291bGRfbG9zZV91bnRyYWNrZWQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gIXdhc190cmFja2VkKHBhdGgpICYmIGZpbGVfZXhpc3RzKHBhdGgpOworfQorCitzdGF0aWMgaW50IG1ha2Vfcm9vbV9mb3JfcGF0aChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgc3RhdHVzLCBpOworCWNvbnN0IGNoYXIgKm1zZyA9IF8oImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiKTsKKworCS8qIFVubGluayBhbnkgRC9GIGNvbmZsaWN0IGZpbGVzIHRoYXQgYXJlIGluIHRoZSB3YXkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgby0+ZGZfY29uZmxpY3RfZmlsZV9zZXQubnI7IGkrKykgeworCQljb25zdCBjaGFyICpkZl9wYXRoID0gby0+ZGZfY29uZmxpY3RfZmlsZV9zZXQuaXRlbXNbaV0uc3RyaW5nOworCQlzaXplX3QgcGF0aGxlbiA9IHN0cmxlbihwYXRoKTsKKwkJc2l6ZV90IGRmX3BhdGhsZW4gPSBzdHJsZW4oZGZfcGF0aCk7CisJCWlmIChkZl9wYXRobGVuIDwgcGF0aGxlbiAmJgorCQkgICAgcGF0aFtkZl9wYXRobGVuXSA9PSAnLycgJiYKKwkJICAgIHN0cm5jbXAocGF0aCwgZGZfcGF0aCwgZGZfcGF0aGxlbikgPT0gMCkgeworCQkJb3V0cHV0KG8sIDMsCisJCQkgICAgICAgXygiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIpLAorCQkJICAgICAgIGRmX3BhdGgpOworCQkJdW5saW5rKGRmX3BhdGgpOworCQkJdW5zb3J0ZWRfc3RyaW5nX2xpc3RfZGVsZXRlX2l0ZW0oJm8tPmRmX2NvbmZsaWN0X2ZpbGVfc2V0LAorCQkJCQkJCSBpLCAwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogTWFrZSBzdXJlIGxlYWRpbmcgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQgKi8KKwlzdGF0dXMgPSBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHBhdGgpOworCWlmIChzdGF0dXMpIHsKKwkJaWYgKHN0YXR1cyA9PSAtMykgeworCQkJLyogc29tZXRoaW5nIGVsc2UgZXhpc3RzICovCisJCQllcnJvcihtc2csIHBhdGgsIF8oIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZGllKG1zZywgcGF0aCwgIiIpOworCX0KKworCS8qCisJICogRG8gbm90IHVubGluayBhIGZpbGUgaW4gdGhlIHdvcmsgdHJlZSBpZiB3ZSBhcmUgbm90CisJICogdHJhY2tpbmcgaXQuCisJICovCisJaWYgKHdvdWxkX2xvc2VfdW50cmFja2VkKHBhdGgpKQorCQlyZXR1cm4gZXJyb3IoXygicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIiksCisJCQkgICAgIHBhdGgpOworCisJLyogU3VjY2Vzc2Z1bCB1bmxpbmsgaXMgZ29vZC4uICovCisJaWYgKCF1bmxpbmsocGF0aCkpCisJCXJldHVybiAwOworCS8qIC4uIGFuZCBzbyBpcyBubyBleGlzdGluZyBmaWxlICovCisJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJcmV0dXJuIDA7CisJLyogLi4gYnV0IG5vdCBzb21lIG90aGVyIGVycm9yICh3aG8gcmVhbGx5IGNhcmVzIHdoYXQ/KSAqLworCXJldHVybiBlcnJvcihtc2csIHBhdGgsIF8oIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9maWxlX2ZsYWdzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhLAorCQkJICAgICAgdW5zaWduZWQgbW9kZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICBpbnQgdXBkYXRlX2NhY2hlLAorCQkJICAgICAgaW50IHVwZGF0ZV93ZCkKK3sKKwlpZiAoby0+Y2FsbF9kZXB0aCkKKwkJdXBkYXRlX3dkID0gMDsKKworCWlmICh1cGRhdGVfd2QpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl2b2lkICpidWY7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCQlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJCS8qCisJCQkgKiBXZSBtYXkgbGF0ZXIgZGVjaWRlIHRvIHJlY3Vyc2l2ZWx5IGRlc2NlbmQgaW50bworCQkJICogdGhlIHN1Ym1vZHVsZSBkaXJlY3RvcnkgYW5kIHVwZGF0ZSBpdHMgaW5kZXgKKwkJCSAqIGFuZC9vciB3b3JrIHRyZWUsIGJ1dCB3ZSBkbyBub3QgZG8gdGhhdCBub3cuCisJCQkgKi8KKwkJCXVwZGF0ZV93ZCA9IDA7CisJCQlnb3RvIHVwZGF0ZV9pbmRleDsKKwkJfQorCisJCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYSwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFidWYpCisJCQlkaWUoXygiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciKSwgc2hhMV90b19oZXgoc2hhKSwgcGF0aCk7CisJCWlmICh0eXBlICE9IE9CSl9CTE9CKQorCQkJZGllKF8oImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciKSwgc2hhMV90b19oZXgoc2hhKSwgcGF0aCk7CisJCWlmIChTX0lTUkVHKG1vZGUpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHN0cmJ1ZiA9IFNUUkJVRl9JTklUOworCQkJaWYgKGNvbnZlcnRfdG9fd29ya2luZ190cmVlKHBhdGgsIGJ1Ziwgc2l6ZSwgJnN0cmJ1ZikpIHsKKwkJCQlmcmVlKGJ1Zik7CisJCQkJc2l6ZSA9IHN0cmJ1Zi5sZW47CisJCQkJYnVmID0gc3RyYnVmX2RldGFjaCgmc3RyYnVmLCBOVUxMKTsKKwkJCX0KKwkJfQorCisJCWlmIChtYWtlX3Jvb21fZm9yX3BhdGgobywgcGF0aCkgPCAwKSB7CisJCQl1cGRhdGVfd2QgPSAwOworCQkJZnJlZShidWYpOworCQkJZ290byB1cGRhdGVfaW5kZXg7CisJCX0KKwkJaWYgKFNfSVNSRUcobW9kZSkgfHwgKCFoYXNfc3ltbGlua3MgJiYgU19JU0xOSyhtb2RlKSkpIHsKKwkJCWludCBmZDsKKwkJCWlmIChtb2RlICYgMDEwMCkKKwkJCQltb2RlID0gMDc3NzsKKwkJCWVsc2UKKwkJCQltb2RlID0gMDY2NjsKKwkJCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fVFJVTkMgfCBPX0NSRUFULCBtb2RlKTsKKwkJCWlmIChmZCA8IDApCisJCQkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBvcGVuICclcyciKSwgcGF0aCk7CisJCQl3cml0ZV9pbl9mdWxsKGZkLCBidWYsIHNpemUpOworCQkJY2xvc2UoZmQpOworCQl9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHsKKwkJCWNoYXIgKmxuayA9IHhtZW1kdXB6KGJ1Ziwgc2l6ZSk7CisJCQlzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHBhdGgpOworCQkJdW5saW5rKHBhdGgpOworCQkJaWYgKHN5bWxpbmsobG5rLCBwYXRoKSkKKwkJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJyIpLCBwYXRoKTsKKwkJCWZyZWUobG5rKTsKKwkJfSBlbHNlCisJCQlkaWUoXygiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIpLAorCQkJICAgIG1vZGUsIHNoYTFfdG9faGV4KHNoYSksIHBhdGgpOworCQlmcmVlKGJ1Zik7CisJfQorIHVwZGF0ZV9pbmRleDoKKwlpZiAodXBkYXRlX2NhY2hlKQorCQlhZGRfY2FjaGVpbmZvKG1vZGUsIHNoYSwgcGF0aCwgMCwgdXBkYXRlX3dkLCBBRERfQ0FDSEVfT0tfVE9fQUREKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2ZpbGUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQlpbnQgY2xlYW4sCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGEsCisJCQl1bnNpZ25lZCBtb2RlLAorCQkJY29uc3QgY2hhciAqcGF0aCkKK3sKKwl1cGRhdGVfZmlsZV9mbGFncyhvLCBzaGEsIG1vZGUsIHBhdGgsIG8tPmNhbGxfZGVwdGggfHwgY2xlYW4sICFvLT5jYWxsX2RlcHRoKTsKK30KKworLyogTG93IGxldmVsIGZpbGUgbWVyZ2luZywgdXBkYXRlIGFuZCByZW1vdmFsICovCisKK3N0cnVjdCBtZXJnZV9maWxlX2luZm8geworCXVuc2lnbmVkIGNoYXIgc2hhWzIwXTsKKwl1bnNpZ25lZCBtb2RlOworCXVuc2lnbmVkIGNsZWFuOjEsCisJCSBtZXJnZToxOworfTsKKworc3RhdGljIGludCBtZXJnZV8zd2F5KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkgICAgICBtbWJ1ZmZlcl90ICpyZXN1bHRfYnVmLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIsCisJCSAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaDEsCisJCSAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaDIpCit7CisJbW1maWxlX3Qgb3JpZywgc3JjMSwgc3JjMjsKKwlzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyBsbF9vcHRzID0gezB9OworCWNoYXIgKmJhc2VfbmFtZSwgKm5hbWUxLCAqbmFtZTI7CisJaW50IG1lcmdlX3N0YXR1czsKKworCWxsX29wdHMucmVub3JtYWxpemUgPSBvLT5yZW5vcm1hbGl6ZTsKKwlsbF9vcHRzLnhkbF9vcHRzID0gby0+eGRsX29wdHM7CisKKwlpZiAoby0+Y2FsbF9kZXB0aCkgeworCQlsbF9vcHRzLnZpcnR1YWxfYW5jZXN0b3IgPSAxOworCQlsbF9vcHRzLnZhcmlhbnQgPSAwOworCX0gZWxzZSB7CisJCXN3aXRjaCAoby0+cmVjdXJzaXZlX3ZhcmlhbnQpIHsKKwkJY2FzZSBNRVJHRV9SRUNVUlNJVkVfT1VSUzoKKwkJCWxsX29wdHMudmFyaWFudCA9IFhETF9NRVJHRV9GQVZPUl9PVVJTOworCQkJYnJlYWs7CisJCWNhc2UgTUVSR0VfUkVDVVJTSVZFX1RIRUlSUzoKKwkJCWxsX29wdHMudmFyaWFudCA9IFhETF9NRVJHRV9GQVZPUl9USEVJUlM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWxsX29wdHMudmFyaWFudCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChzdHJjbXAoYS0+cGF0aCwgYi0+cGF0aCkgfHwKKwkgICAgKG8tPmFuY2VzdG9yICE9IE5VTEwgJiYgc3RyY21wKGEtPnBhdGgsIG9uZS0+cGF0aCkgIT0gMCkpIHsKKwkJYmFzZV9uYW1lID0gby0+YW5jZXN0b3IgPT0gTlVMTCA/IE5VTEwgOgorCQkJbWtwYXRoZHVwKCIlczolcyIsIG8tPmFuY2VzdG9yLCBvbmUtPnBhdGgpOworCQluYW1lMSA9IG1rcGF0aGR1cCgiJXM6JXMiLCBicmFuY2gxLCBhLT5wYXRoKTsKKwkJbmFtZTIgPSBta3BhdGhkdXAoIiVzOiVzIiwgYnJhbmNoMiwgYi0+cGF0aCk7CisJfSBlbHNlIHsKKwkJYmFzZV9uYW1lID0gby0+YW5jZXN0b3IgPT0gTlVMTCA/IE5VTEwgOgorCQkJbWtwYXRoZHVwKCIlcyIsIG8tPmFuY2VzdG9yKTsKKwkJbmFtZTEgPSBta3BhdGhkdXAoIiVzIiwgYnJhbmNoMSk7CisJCW5hbWUyID0gbWtwYXRoZHVwKCIlcyIsIGJyYW5jaDIpOworCX0KKworCXJlYWRfbW1ibG9iKCZvcmlnLCBvbmUtPnNoYTEpOworCXJlYWRfbW1ibG9iKCZzcmMxLCBhLT5zaGExKTsKKwlyZWFkX21tYmxvYigmc3JjMiwgYi0+c2hhMSk7CisKKwltZXJnZV9zdGF0dXMgPSBsbF9tZXJnZShyZXN1bHRfYnVmLCBhLT5wYXRoLCAmb3JpZywgYmFzZV9uYW1lLAorCQkJCSZzcmMxLCBuYW1lMSwgJnNyYzIsIG5hbWUyLCAmbGxfb3B0cyk7CisKKwlmcmVlKGJhc2VfbmFtZSk7CisJZnJlZShuYW1lMSk7CisJZnJlZShuYW1lMik7CisJZnJlZShvcmlnLnB0cik7CisJZnJlZShzcmMxLnB0cik7CisJZnJlZShzcmMyLnB0cik7CisJcmV0dXJuIG1lcmdlX3N0YXR1czsKK30KKworc3RhdGljIHN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWVyZ2VfZmlsZV8xKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmJyYW5jaDEsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmJyYW5jaDIpCit7CisJc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyByZXN1bHQ7CisJcmVzdWx0Lm1lcmdlID0gMDsKKwlyZXN1bHQuY2xlYW4gPSAxOworCisJaWYgKChTX0lGTVQgJiBhLT5tb2RlKSAhPSAoU19JRk1UICYgYi0+bW9kZSkpIHsKKwkJcmVzdWx0LmNsZWFuID0gMDsKKwkJaWYgKFNfSVNSRUcoYS0+bW9kZSkpIHsKKwkJCXJlc3VsdC5tb2RlID0gYS0+bW9kZTsKKwkJCWhhc2hjcHkocmVzdWx0LnNoYSwgYS0+c2hhMSk7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQubW9kZSA9IGItPm1vZGU7CisJCQloYXNoY3B5KHJlc3VsdC5zaGEsIGItPnNoYTEpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFzaGFfZXEoYS0+c2hhMSwgb25lLT5zaGExKSAmJiAhc2hhX2VxKGItPnNoYTEsIG9uZS0+c2hhMSkpCisJCQlyZXN1bHQubWVyZ2UgPSAxOworCisJCS8qCisJCSAqIE1lcmdlIG1vZGVzCisJCSAqLworCQlpZiAoYS0+bW9kZSA9PSBiLT5tb2RlIHx8IGEtPm1vZGUgPT0gb25lLT5tb2RlKQorCQkJcmVzdWx0Lm1vZGUgPSBiLT5tb2RlOworCQllbHNlIHsKKwkJCXJlc3VsdC5tb2RlID0gYS0+bW9kZTsKKwkJCWlmIChiLT5tb2RlICE9IG9uZS0+bW9kZSkgeworCQkJCXJlc3VsdC5jbGVhbiA9IDA7CisJCQkJcmVzdWx0Lm1lcmdlID0gMTsKKwkJCX0KKwkJfQorCisJCWlmIChzaGFfZXEoYS0+c2hhMSwgYi0+c2hhMSkgfHwgc2hhX2VxKGEtPnNoYTEsIG9uZS0+c2hhMSkpCisJCQloYXNoY3B5KHJlc3VsdC5zaGEsIGItPnNoYTEpOworCQllbHNlIGlmIChzaGFfZXEoYi0+c2hhMSwgb25lLT5zaGExKSkKKwkJCWhhc2hjcHkocmVzdWx0LnNoYSwgYS0+c2hhMSk7CisJCWVsc2UgaWYgKFNfSVNSRUcoYS0+bW9kZSkpIHsKKwkJCW1tYnVmZmVyX3QgcmVzdWx0X2J1ZjsKKwkJCWludCBtZXJnZV9zdGF0dXM7CisKKwkJCW1lcmdlX3N0YXR1cyA9IG1lcmdlXzN3YXkobywgJnJlc3VsdF9idWYsIG9uZSwgYSwgYiwKKwkJCQkJCSAgYnJhbmNoMSwgYnJhbmNoMik7CisKKwkJCWlmICgobWVyZ2Vfc3RhdHVzIDwgMCkgfHwgIXJlc3VsdF9idWYucHRyKQorCQkJCWRpZShfKCJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIpKTsKKworCQkJaWYgKHdyaXRlX3NoYTFfZmlsZShyZXN1bHRfYnVmLnB0ciwgcmVzdWx0X2J1Zi5zaXplLAorCQkJCQkgICAgYmxvYl90eXBlLCByZXN1bHQuc2hhKSkKKwkJCQlkaWUoXygiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIpLAorCQkJCSAgICBhLT5wYXRoKTsKKworCQkJZnJlZShyZXN1bHRfYnVmLnB0cik7CisJCQlyZXN1bHQuY2xlYW4gPSAobWVyZ2Vfc3RhdHVzID09IDApOworCQl9IGVsc2UgaWYgKFNfSVNHSVRMSU5LKGEtPm1vZGUpKSB7CisJCQlyZXN1bHQuY2xlYW4gPSBtZXJnZV9zdWJtb2R1bGUocmVzdWx0LnNoYSwKKwkJCQkJCSAgICAgICBvbmUtPnBhdGgsIG9uZS0+c2hhMSwKKwkJCQkJCSAgICAgICBhLT5zaGExLCBiLT5zaGExLAorCQkJCQkJICAgICAgICFvLT5jYWxsX2RlcHRoKTsKKwkJfSBlbHNlIGlmIChTX0lTTE5LKGEtPm1vZGUpKSB7CisJCQloYXNoY3B5KHJlc3VsdC5zaGEsIGEtPnNoYTEpOworCisJCQlpZiAoIXNoYV9lcShhLT5zaGExLCBiLT5zaGExKSkKKwkJCQlyZXN1bHQuY2xlYW4gPSAwOworCQl9IGVsc2UgeworCQkJZGllKF8oInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlIGluIHRoZSB0cmVlIikpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCBtZXJnZV9maWxlX2luZm8KK21lcmdlX2ZpbGVfc3BlY2lhbF9tYXJrZXJzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICphLAorCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIsCisJCQkgICBjb25zdCBjaGFyICpicmFuY2gxLAorCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUxLAorCQkJICAgY29uc3QgY2hhciAqYnJhbmNoMiwKKwkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lMikKK3sKKwljaGFyICpzaWRlMSA9IE5VTEw7CisJY2hhciAqc2lkZTIgPSBOVUxMOworCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpOworCisJaWYgKGZpbGVuYW1lMSkgeworCQlzaWRlMSA9IHhtYWxsb2Moc3RybGVuKGJyYW5jaDEpICsgc3RybGVuKGZpbGVuYW1lMSkgKyAyKTsKKwkJc3ByaW50ZihzaWRlMSwgIiVzOiVzIiwgYnJhbmNoMSwgZmlsZW5hbWUxKTsKKwl9CisJaWYgKGZpbGVuYW1lMikgeworCQlzaWRlMiA9IHhtYWxsb2Moc3RybGVuKGJyYW5jaDIpICsgc3RybGVuKGZpbGVuYW1lMikgKyAyKTsKKwkJc3ByaW50ZihzaWRlMiwgIiVzOiVzIiwgYnJhbmNoMiwgZmlsZW5hbWUyKTsKKwl9CisKKwltZmkgPSBtZXJnZV9maWxlXzEobywgb25lLCBhLCBiLAorCQkJICAgc2lkZTEgPyBzaWRlMSA6IGJyYW5jaDEsIHNpZGUyID8gc2lkZTIgOiBicmFuY2gyKTsKKwlmcmVlKHNpZGUxKTsKKwlmcmVlKHNpZGUyKTsKKwlyZXR1cm4gbWZpOworfQorCitzdGF0aWMgc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyBtZXJnZV9maWxlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJCQkgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9fc2hhLCBpbnQgb19tb2RlLAorCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYV9zaGEsIGludCBhX21vZGUsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpiX3NoYSwgaW50IGJfbW9kZSwKKwkJCQkJIGNvbnN0IGNoYXIgKmJyYW5jaDEsCisJCQkJCSBjb25zdCBjaGFyICpicmFuY2gyKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjIG9uZSwgYSwgYjsKKworCW9uZS5wYXRoID0gYS5wYXRoID0gYi5wYXRoID0gKGNoYXIgKilwYXRoOworCWhhc2hjcHkob25lLnNoYTEsIG9fc2hhKTsKKwlvbmUubW9kZSA9IG9fbW9kZTsKKwloYXNoY3B5KGEuc2hhMSwgYV9zaGEpOworCWEubW9kZSA9IGFfbW9kZTsKKwloYXNoY3B5KGIuc2hhMSwgYl9zaGEpOworCWIubW9kZSA9IGJfbW9kZTsKKwlyZXR1cm4gbWVyZ2VfZmlsZV8xKG8sICZvbmUsICZhLCAmYiwgYnJhbmNoMSwgYnJhbmNoMik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jaGFuZ2VfZGVsZXRlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJCSBjb25zdCBjaGFyICpwYXRoLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvX3NoYSwgaW50IG9fbW9kZSwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYV9zaGEsIGludCBhX21vZGUsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJfc2hhLCBpbnQgYl9tb2RlLAorCQkJCSBjb25zdCBjaGFyICpjaGFuZ2UsIGNvbnN0IGNoYXIgKmNoYW5nZV9wYXN0KQoreworCWNoYXIgKnJlbmFtZWQgPSBOVUxMOworCWlmIChkaXJfaW5fd2F5KHBhdGgsICFvLT5jYWxsX2RlcHRoKSkgeworCQlyZW5hbWVkID0gdW5pcXVlX3BhdGgobywgcGF0aCwgYV9zaGEgPyBvLT5icmFuY2gxIDogby0+YnJhbmNoMik7CisJfQorCisJaWYgKG8tPmNhbGxfZGVwdGgpIHsKKwkJLyoKKwkJICogV2UgY2Fubm90IGFyYml0cmFyaWx5IGFjY2VwdCBlaXRoZXIgYV9zaGEgb3IgYl9zaGEgYXMKKwkJICogY29ycmVjdDsgc2luY2UgdGhlcmUgaXMgbm8gdHJ1ZSAibWlkZGxlIHBvaW50IiBiZXR3ZWVuCisJCSAqIHRoZW0sIHNpbXBseSByZXVzZSB0aGUgYmFzZSB2ZXJzaW9uIGZvciB2aXJ0dWFsIG1lcmdlIGJhc2UuCisJCSAqLworCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCQl1cGRhdGVfZmlsZShvLCAwLCBvX3NoYSwgb19tb2RlLCByZW5hbWVkID8gcmVuYW1lZCA6IHBhdGgpOworCX0gZWxzZSBpZiAoIWFfc2hhKSB7CisJCWlmICghcmVuYW1lZCkgeworCQkJb3V0cHV0KG8sIDEsIF8oIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzICIKKwkJCSAgICAgICAiYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgaW4gdHJlZS4iKSwKKwkJCSAgICAgICBjaGFuZ2UsIHBhdGgsIG8tPmJyYW5jaDEsIGNoYW5nZV9wYXN0LAorCQkJICAgICAgIG8tPmJyYW5jaDIsIG8tPmJyYW5jaDIsIHBhdGgpOworCQkJdXBkYXRlX2ZpbGUobywgMCwgYl9zaGEsIGJfbW9kZSwgcGF0aCk7CisJCX0gZWxzZSB7CisJCQlvdXRwdXQobywgMSwgXygiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgIgorCQkJICAgICAgICJhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCBpbiB0cmVlIGF0ICVzLiIpLAorCQkJICAgICAgIGNoYW5nZSwgcGF0aCwgby0+YnJhbmNoMSwgY2hhbmdlX3Bhc3QsCisJCQkgICAgICAgby0+YnJhbmNoMiwgby0+YnJhbmNoMiwgcGF0aCwgcmVuYW1lZCk7CisJCQl1cGRhdGVfZmlsZShvLCAwLCBiX3NoYSwgYl9tb2RlLCByZW5hbWVkKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghcmVuYW1lZCkgeworCQkJb3V0cHV0KG8sIDEsIF8oIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzICIKKwkJCSAgICAgICAiYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgaW4gdHJlZS4iKSwKKwkJCSAgICAgICBjaGFuZ2UsIHBhdGgsIG8tPmJyYW5jaDIsIGNoYW5nZV9wYXN0LAorCQkJICAgICAgIG8tPmJyYW5jaDEsIG8tPmJyYW5jaDEsIHBhdGgpOworCQl9IGVsc2UgeworCQkJb3V0cHV0KG8sIDEsIF8oIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzICIKKwkJCSAgICAgICAiYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgaW4gdHJlZSBhdCAlcy4iKSwKKwkJCSAgICAgICBjaGFuZ2UsIHBhdGgsIG8tPmJyYW5jaDIsIGNoYW5nZV9wYXN0LAorCQkJICAgICAgIG8tPmJyYW5jaDEsIG8tPmJyYW5jaDEsIHBhdGgsIHJlbmFtZWQpOworCQkJdXBkYXRlX2ZpbGUobywgMCwgYV9zaGEsIGFfbW9kZSwgcmVuYW1lZCk7CisJCX0KKwkJLyoKKwkJICogTm8gbmVlZCB0byBjYWxsIHVwZGF0ZV9maWxlKCkgb24gcGF0aCB3aGVuICFyZW5hbWVkLCBzaW5jZQorCQkgKiB0aGF0IHdvdWxkIG5lZWRsZXNzbHkgdG91Y2ggcGF0aC4gIFdlIGNvdWxkIGNhbGwKKwkJICogdXBkYXRlX2ZpbGVfZmxhZ3MoKSB3aXRoIHVwZGF0ZV9jYWNoZT0wIGFuZCB1cGRhdGVfd2Q9MCwKKwkJICogYnV0IHRoYXQncyBhIG5vLW9wLgorCQkgKi8KKwl9CisJZnJlZShyZW5hbWVkKTsKK30KKworc3RhdGljIHZvaWQgY29uZmxpY3RfcmVuYW1lX2RlbGV0ZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCQkgICBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpciwKKwkJCQkgICBjb25zdCBjaGFyICpyZW5hbWVfYnJhbmNoLAorCQkJCSAgIGNvbnN0IGNoYXIgKm90aGVyX2JyYW5jaCkKK3sKKwljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb3JpZyA9IHBhaXItPm9uZTsKKwljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGVzdCA9IHBhaXItPnR3bzsKKwljb25zdCB1bnNpZ25lZCBjaGFyICphX3NoYSA9IE5VTEw7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYl9zaGEgPSBOVUxMOworCWludCBhX21vZGUgPSAwOworCWludCBiX21vZGUgPSAwOworCisJaWYgKHJlbmFtZV9icmFuY2ggPT0gby0+YnJhbmNoMSkgeworCQlhX3NoYSA9IGRlc3QtPnNoYTE7CisJCWFfbW9kZSA9IGRlc3QtPm1vZGU7CisJfSBlbHNlIHsKKwkJYl9zaGEgPSBkZXN0LT5zaGExOworCQliX21vZGUgPSBkZXN0LT5tb2RlOworCX0KKworCWhhbmRsZV9jaGFuZ2VfZGVsZXRlKG8sCisJCQkgICAgIG8tPmNhbGxfZGVwdGggPyBvcmlnLT5wYXRoIDogZGVzdC0+cGF0aCwKKwkJCSAgICAgb3JpZy0+c2hhMSwgb3JpZy0+bW9kZSwKKwkJCSAgICAgYV9zaGEsIGFfbW9kZSwKKwkJCSAgICAgYl9zaGEsIGJfbW9kZSwKKwkJCSAgICAgXygicmVuYW1lIiksIF8oInJlbmFtZWQiKSk7CisKKwlpZiAoby0+Y2FsbF9kZXB0aCkgeworCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKGRlc3QtPnBhdGgpOworCX0gZWxzZSB7CisJCXVwZGF0ZV9zdGFnZXMoZGVzdC0+cGF0aCwgTlVMTCwKKwkJCSAgICAgIHJlbmFtZV9icmFuY2ggPT0gby0+YnJhbmNoMSA/IGRlc3QgOiBOVUxMLAorCQkJICAgICAgcmVuYW1lX2JyYW5jaCA9PSBvLT5icmFuY2gxID8gTlVMTCA6IGRlc3QpOworCX0KKworfQorCitzdGF0aWMgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjX2Zyb21fZW50cnkoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnRhcmdldCwKKwkJCQkJCSBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZW50cnksCisJCQkJCQkgaW50IHN0YWdlKQoreworCXVuc2lnbmVkIGNoYXIgKnNoYSA9IGVudHJ5LT5zdGFnZXNbc3RhZ2VdLnNoYTsKKwl1bnNpZ25lZCBtb2RlID0gZW50cnktPnN0YWdlc1tzdGFnZV0ubW9kZTsKKwlpZiAobW9kZSA9PSAwIHx8IGlzX251bGxfc2hhMShzaGEpKQorCQlyZXR1cm4gTlVMTDsKKwloYXNoY3B5KHRhcmdldC0+c2hhMSwgc2hhKTsKKwl0YXJnZXQtPm1vZGUgPSBtb2RlOworCXJldHVybiB0YXJnZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9maWxlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnJlbmFtZSwKKwkJCWludCBzdGFnZSwKKwkJCXN0cnVjdCByZW5hbWVfY29uZmxpY3RfaW5mbyAqY2kpCit7CisJY2hhciAqZHN0X25hbWUgPSByZW5hbWUtPnBhdGg7CisJc3RydWN0IHN0YWdlX2RhdGEgKmRzdF9lbnRyeTsKKwljb25zdCBjaGFyICpjdXJfYnJhbmNoLCAqb3RoZXJfYnJhbmNoOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjIG90aGVyOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICphZGQ7CisKKwlpZiAoc3RhZ2UgPT0gMikgeworCQlkc3RfZW50cnkgPSBjaS0+ZHN0X2VudHJ5MTsKKwkJY3VyX2JyYW5jaCA9IGNpLT5icmFuY2gxOworCQlvdGhlcl9icmFuY2ggPSBjaS0+YnJhbmNoMjsKKwl9IGVsc2UgeworCQlkc3RfZW50cnkgPSBjaS0+ZHN0X2VudHJ5MjsKKwkJY3VyX2JyYW5jaCA9IGNpLT5icmFuY2gyOworCQlvdGhlcl9icmFuY2ggPSBjaS0+YnJhbmNoMTsKKwl9CisKKwlhZGQgPSBmaWxlc3BlY19mcm9tX2VudHJ5KCZvdGhlciwgZHN0X2VudHJ5LCBzdGFnZSBeIDEpOworCWlmIChhZGQpIHsKKwkJY2hhciAqYWRkX25hbWUgPSB1bmlxdWVfcGF0aChvLCByZW5hbWUtPnBhdGgsIG90aGVyX2JyYW5jaCk7CisJCXVwZGF0ZV9maWxlKG8sIDAsIGFkZC0+c2hhMSwgYWRkLT5tb2RlLCBhZGRfbmFtZSk7CisKKwkJcmVtb3ZlX2ZpbGUobywgMCwgcmVuYW1lLT5wYXRoLCAwKTsKKwkJZHN0X25hbWUgPSB1bmlxdWVfcGF0aChvLCByZW5hbWUtPnBhdGgsIGN1cl9icmFuY2gpOworCX0gZWxzZSB7CisJCWlmIChkaXJfaW5fd2F5KHJlbmFtZS0+cGF0aCwgIW8tPmNhbGxfZGVwdGgpKSB7CisJCQlkc3RfbmFtZSA9IHVuaXF1ZV9wYXRoKG8sIHJlbmFtZS0+cGF0aCwgY3VyX2JyYW5jaCk7CisJCQlvdXRwdXQobywgMSwgXygiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiKSwKKwkJCSAgICAgICByZW5hbWUtPnBhdGgsIG90aGVyX2JyYW5jaCwgZHN0X25hbWUpOworCQl9CisJfQorCXVwZGF0ZV9maWxlKG8sIDAsIHJlbmFtZS0+c2hhMSwgcmVuYW1lLT5tb2RlLCBkc3RfbmFtZSk7CisJaWYgKHN0YWdlID09IDIpCisJCXVwZGF0ZV9zdGFnZXMocmVuYW1lLT5wYXRoLCBOVUxMLCByZW5hbWUsIGFkZCk7CisJZWxzZQorCQl1cGRhdGVfc3RhZ2VzKHJlbmFtZS0+cGF0aCwgTlVMTCwgYWRkLCByZW5hbWUpOworCisJaWYgKGRzdF9uYW1lICE9IHJlbmFtZS0+cGF0aCkKKwkJZnJlZShkc3RfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZsaWN0X3JlbmFtZV9yZW5hbWVfMXRvMihzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCQkJc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpjaSkKK3sKKwkvKiBPbmUgZmlsZSB3YXMgcmVuYW1lZCBpbiBib3RoIGJyYW5jaGVzLCBidXQgdG8gZGlmZmVyZW50IG5hbWVzLiAqLworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSBjaS0+cGFpcjEtPm9uZTsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSA9IGNpLT5wYWlyMS0+dHdvOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpiID0gY2ktPnBhaXIyLT50d287CisKKwlvdXRwdXQobywgMSwgXygiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiAiCisJICAgICAgICJSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiAiCisJICAgICAgICJyZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gXCIlc1wiJXMiKSwKKwkgICAgICAgb25lLT5wYXRoLCBhLT5wYXRoLCBjaS0+YnJhbmNoMSwKKwkgICAgICAgb25lLT5wYXRoLCBiLT5wYXRoLCBjaS0+YnJhbmNoMiwKKwkgICAgICAgby0+Y2FsbF9kZXB0aCA/IF8oIiAobGVmdCB1bnJlc29sdmVkKSIpIDogIiIpOworCWlmIChvLT5jYWxsX2RlcHRoKSB7CisJCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpOworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyBvdGhlcjsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmFkZDsKKwkJbWZpID0gbWVyZ2VfZmlsZShvLCBvbmUtPnBhdGgsCisJCQkJIG9uZS0+c2hhMSwgb25lLT5tb2RlLAorCQkJCSBhLT5zaGExLCBhLT5tb2RlLAorCQkJCSBiLT5zaGExLCBiLT5tb2RlLAorCQkJCSBjaS0+YnJhbmNoMSwgY2ktPmJyYW5jaDIpOworCQkvKgorCQkgKiBGSVhNRTogRm9yIHJlbmFtZS9hZGQtc291cmNlIGNvbmZsaWN0cyAoaWYgd2UgY291bGQgZGV0ZWN0CisJCSAqIHN1Y2gpLCB0aGlzIGlzIHdyb25nLiAgV2Ugc2hvdWxkIGluc3RlYWQgZmluZCBhIHVuaXF1ZQorCQkgKiBwYXRobmFtZSBhbmQgdGhlbiBlaXRoZXIgcmVuYW1lIHRoZSBhZGQtc291cmNlIGZpbGUgdG8gdGhhdAorCQkgKiB1bmlxdWUgcGF0aCwgb3IgdXNlIHRoYXQgdW5pcXVlIHBhdGggaW5zdGVhZCBvZiBzcmMgaGVyZS4KKwkJICovCisJCXVwZGF0ZV9maWxlKG8sIDAsIG1maS5zaGEsIG1maS5tb2RlLCBvbmUtPnBhdGgpOworCisJCS8qCisJCSAqIEFib3ZlLCB3ZSBwdXQgdGhlIG1lcmdlZCBjb250ZW50IGF0IHRoZSBtZXJnZS1iYXNlJ3MKKwkJICogcGF0aC4gIE5vdyB3ZSB1c3VhbGx5IG5lZWQgdG8gZGVsZXRlIGJvdGggYS0+cGF0aCBhbmQKKwkJICogYi0+cGF0aC4gIEhvd2V2ZXIsIHRoZSByZW5hbWUgb24gZWFjaCBzaWRlIG9mIHRoZSBtZXJnZQorCQkgKiBjb3VsZCBhbHNvIGJlIGludm9sdmVkIGluIGEgcmVuYW1lL2FkZCBjb25mbGljdC4gIEluCisJCSAqIHN1Y2ggY2FzZXMsIHdlIHNob3VsZCBrZWVwIHRoZSBhZGRlZCBmaWxlIGFyb3VuZCwKKwkJICogcmVzb2x2aW5nIHRoZSBjb25mbGljdCBhdCB0aGF0IHBhdGggaW4gaXRzIGZhdm9yLgorCQkgKi8KKwkJYWRkID0gZmlsZXNwZWNfZnJvbV9lbnRyeSgmb3RoZXIsIGNpLT5kc3RfZW50cnkxLCAyIF4gMSk7CisJCWlmIChhZGQpCisJCQl1cGRhdGVfZmlsZShvLCAwLCBhZGQtPnNoYTEsIGFkZC0+bW9kZSwgYS0+cGF0aCk7CisJCWVsc2UKKwkJCXJlbW92ZV9maWxlX2Zyb21fY2FjaGUoYS0+cGF0aCk7CisJCWFkZCA9IGZpbGVzcGVjX2Zyb21fZW50cnkoJm90aGVyLCBjaS0+ZHN0X2VudHJ5MiwgMyBeIDEpOworCQlpZiAoYWRkKQorCQkJdXBkYXRlX2ZpbGUobywgMCwgYWRkLT5zaGExLCBhZGQtPm1vZGUsIGItPnBhdGgpOworCQllbHNlCisJCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKGItPnBhdGgpOworCX0gZWxzZSB7CisJCWhhbmRsZV9maWxlKG8sIGEsIDIsIGNpKTsKKwkJaGFuZGxlX2ZpbGUobywgYiwgMywgY2kpOworCX0KK30KKworc3RhdGljIHZvaWQgY29uZmxpY3RfcmVuYW1lX3JlbmFtZV8ydG8xKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJCQlzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpKQoreworCS8qIFR3byBmaWxlcywgYSAmIGIsIHdlcmUgcmVuYW1lZCB0byB0aGUgc2FtZSB0aGluZywgYy4gKi8KKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSA9IGNpLT5wYWlyMS0+b25lOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpiID0gY2ktPnBhaXIyLT5vbmU7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmMxID0gY2ktPnBhaXIxLT50d287CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmMyID0gY2ktPnBhaXIyLT50d287CisJY2hhciAqcGF0aCA9IGMxLT5wYXRoOyAvKiA9PSBjMi0+cGF0aCAqLworCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpX2MxOworCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpX2MyOworCisJb3V0cHV0KG8sIDEsIF8oIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogIgorCSAgICAgICAiUmVuYW1lICVzLT4lcyBpbiAlcy4gIgorCSAgICAgICAiUmVuYW1lICVzLT4lcyBpbiAlcyIpLAorCSAgICAgICBhLT5wYXRoLCBjMS0+cGF0aCwgY2ktPmJyYW5jaDEsCisJICAgICAgIGItPnBhdGgsIGMyLT5wYXRoLCBjaS0+YnJhbmNoMik7CisKKwlyZW1vdmVfZmlsZShvLCAxLCBhLT5wYXRoLCB3b3VsZF9sb3NlX3VudHJhY2tlZChhLT5wYXRoKSk7CisJcmVtb3ZlX2ZpbGUobywgMSwgYi0+cGF0aCwgd291bGRfbG9zZV91bnRyYWNrZWQoYi0+cGF0aCkpOworCisJbWZpX2MxID0gbWVyZ2VfZmlsZV9zcGVjaWFsX21hcmtlcnMobywgYSwgYzEsICZjaS0+cmVuMV9vdGhlciwKKwkJCQkJICAgIG8tPmJyYW5jaDEsIGMxLT5wYXRoLAorCQkJCQkgICAgby0+YnJhbmNoMiwgY2ktPnJlbjFfb3RoZXIucGF0aCk7CisJbWZpX2MyID0gbWVyZ2VfZmlsZV9zcGVjaWFsX21hcmtlcnMobywgYiwgJmNpLT5yZW4yX290aGVyLCBjMiwKKwkJCQkJICAgIG8tPmJyYW5jaDEsIGNpLT5yZW4yX290aGVyLnBhdGgsCisJCQkJCSAgICBvLT5icmFuY2gyLCBjMi0+cGF0aCk7CisKKwlpZiAoby0+Y2FsbF9kZXB0aCkgeworCQkvKgorCQkgKiBJZiBtZmlfYzEuY2xlYW4gJiYgbWZpX2MyLmNsZWFuLCB0aGVuIGl0IG1pZ2h0IG1ha2UKKwkJICogc2Vuc2UgdG8gZG8gYSB0d28td2F5IG1lcmdlIG9mIHRob3NlIHJlc3VsdHMuICBCdXQsIEkKKwkJICogdGhpbmsgaW4gYWxsIGNhc2VzLCBpdCBtYWtlcyBzZW5zZSB0byBoYXZlIHRoZSB2aXJ0dWFsCisJCSAqIG1lcmdlIGJhc2UganVzdCB1bmRvIHRoZSByZW5hbWVzOyB0aGV5IGNhbiBiZSBkZXRlY3RlZAorCQkgKiBhZ2FpbiBsYXRlciBmb3IgdGhlIG5vbi1yZWN1cnNpdmUgbWVyZ2UuCisJCSAqLworCQlyZW1vdmVfZmlsZShvLCAwLCBwYXRoLCAwKTsKKwkJdXBkYXRlX2ZpbGUobywgMCwgbWZpX2MxLnNoYSwgbWZpX2MxLm1vZGUsIGEtPnBhdGgpOworCQl1cGRhdGVfZmlsZShvLCAwLCBtZmlfYzIuc2hhLCBtZmlfYzIubW9kZSwgYi0+cGF0aCk7CisJfSBlbHNlIHsKKwkJY2hhciAqbmV3X3BhdGgxID0gdW5pcXVlX3BhdGgobywgcGF0aCwgY2ktPmJyYW5jaDEpOworCQljaGFyICpuZXdfcGF0aDIgPSB1bmlxdWVfcGF0aChvLCBwYXRoLCBjaS0+YnJhbmNoMik7CisJCW91dHB1dChvLCAxLCBfKCJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIpLAorCQkgICAgICAgYS0+cGF0aCwgbmV3X3BhdGgxLCBiLT5wYXRoLCBuZXdfcGF0aDIpOworCQlyZW1vdmVfZmlsZShvLCAwLCBwYXRoLCAwKTsKKwkJdXBkYXRlX2ZpbGUobywgMCwgbWZpX2MxLnNoYSwgbWZpX2MxLm1vZGUsIG5ld19wYXRoMSk7CisJCXVwZGF0ZV9maWxlKG8sIDAsIG1maV9jMi5zaGEsIG1maV9jMi5tb2RlLCBuZXdfcGF0aDIpOworCQlmcmVlKG5ld19wYXRoMik7CisJCWZyZWUobmV3X3BhdGgxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19yZW5hbWVzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJICAgc3RydWN0IHN0cmluZ19saXN0ICphX3JlbmFtZXMsCisJCQkgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmJfcmVuYW1lcykKK3sKKwlpbnQgY2xlYW5fbWVyZ2UgPSAxLCBpLCBqOworCXN0cnVjdCBzdHJpbmdfbGlzdCBhX2J5X2RzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IGJfYnlfZHN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwljb25zdCBzdHJ1Y3QgcmVuYW1lICpzcmU7CisKKwlmb3IgKGkgPSAwOyBpIDwgYV9yZW5hbWVzLT5ucjsgaSsrKSB7CisJCXNyZSA9IGFfcmVuYW1lcy0+aXRlbXNbaV0udXRpbDsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZhX2J5X2RzdCwgc3JlLT5wYWlyLT50d28tPnBhdGgpLT51dGlsCisJCQk9ICh2b2lkICopc3JlOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgYl9yZW5hbWVzLT5ucjsgaSsrKSB7CisJCXNyZSA9IGJfcmVuYW1lcy0+aXRlbXNbaV0udXRpbDsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZiX2J5X2RzdCwgc3JlLT5wYWlyLT50d28tPnBhdGgpLT51dGlsCisJCQk9ICh2b2lkICopc3JlOworCX0KKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgYV9yZW5hbWVzLT5uciB8fCBqIDwgYl9yZW5hbWVzLT5ucjspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0ICpyZW5hbWVzMSwgKnJlbmFtZXMyRHN0OworCQlzdHJ1Y3QgcmVuYW1lICpyZW4xID0gTlVMTCwgKnJlbjIgPSBOVUxMOworCQljb25zdCBjaGFyICpicmFuY2gxLCAqYnJhbmNoMjsKKwkJY29uc3QgY2hhciAqcmVuMV9zcmMsICpyZW4xX2RzdDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmxvb2t1cDsKKworCQlpZiAoaSA+PSBhX3JlbmFtZXMtPm5yKSB7CisJCQlyZW4yID0gYl9yZW5hbWVzLT5pdGVtc1tqKytdLnV0aWw7CisJCX0gZWxzZSBpZiAoaiA+PSBiX3JlbmFtZXMtPm5yKSB7CisJCQlyZW4xID0gYV9yZW5hbWVzLT5pdGVtc1tpKytdLnV0aWw7CisJCX0gZWxzZSB7CisJCQlpbnQgY29tcGFyZSA9IHN0cmNtcChhX3JlbmFtZXMtPml0ZW1zW2ldLnN0cmluZywKKwkJCQkJICAgICBiX3JlbmFtZXMtPml0ZW1zW2pdLnN0cmluZyk7CisJCQlpZiAoY29tcGFyZSA8PSAwKQorCQkJCXJlbjEgPSBhX3JlbmFtZXMtPml0ZW1zW2krK10udXRpbDsKKwkJCWlmIChjb21wYXJlID49IDApCisJCQkJcmVuMiA9IGJfcmVuYW1lcy0+aXRlbXNbaisrXS51dGlsOworCQl9CisKKwkJLyogVE9ETzogcmVmYWN0b3IsIHNvIHRoYXQgMS8yIGFyZSBub3QgbmVlZGVkICovCisJCWlmIChyZW4xKSB7CisJCQlyZW5hbWVzMSA9IGFfcmVuYW1lczsKKwkJCXJlbmFtZXMyRHN0ID0gJmJfYnlfZHN0OworCQkJYnJhbmNoMSA9IG8tPmJyYW5jaDE7CisJCQlicmFuY2gyID0gby0+YnJhbmNoMjsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCByZW5hbWUgKnRtcDsKKwkJCXJlbmFtZXMxID0gYl9yZW5hbWVzOworCQkJcmVuYW1lczJEc3QgPSAmYV9ieV9kc3Q7CisJCQlicmFuY2gxID0gby0+YnJhbmNoMjsKKwkJCWJyYW5jaDIgPSBvLT5icmFuY2gxOworCQkJdG1wID0gcmVuMjsKKwkJCXJlbjIgPSByZW4xOworCQkJcmVuMSA9IHRtcDsKKwkJfQorCisJCWlmIChyZW4xLT5wcm9jZXNzZWQpCisJCQljb250aW51ZTsKKwkJcmVuMS0+cHJvY2Vzc2VkID0gMTsKKwkJcmVuMS0+ZHN0X2VudHJ5LT5wcm9jZXNzZWQgPSAxOworCQkvKiBCVUc6IFdlIHNob3VsZCBvbmx5IG1hcmsgc3JjX2VudHJ5IGFzIHByb2Nlc3NlZCBpZiB3ZQorCQkgKiBhcmUgbm90IGRlYWxpbmcgd2l0aCBhIHJlbmFtZSArIGFkZC1zb3VyY2UgY2FzZS4KKwkJICovCisJCXJlbjEtPnNyY19lbnRyeS0+cHJvY2Vzc2VkID0gMTsKKworCQlyZW4xX3NyYyA9IHJlbjEtPnBhaXItPm9uZS0+cGF0aDsKKwkJcmVuMV9kc3QgPSByZW4xLT5wYWlyLT50d28tPnBhdGg7CisKKwkJaWYgKHJlbjIpIHsKKwkJCS8qIE9uZSBmaWxlIHJlbmFtZWQgb24gYm90aCBzaWRlcyAqLworCQkJY29uc3QgY2hhciAqcmVuMl9zcmMgPSByZW4yLT5wYWlyLT5vbmUtPnBhdGg7CisJCQljb25zdCBjaGFyICpyZW4yX2RzdCA9IHJlbjItPnBhaXItPnR3by0+cGF0aDsKKwkJCWVudW0gcmVuYW1lX3R5cGUgcmVuYW1lX3R5cGU7CisJCQlpZiAoc3RyY21wKHJlbjFfc3JjLCByZW4yX3NyYykgIT0gMCkKKwkJCQlkaWUoInJlbjFfc3JjICE9IHJlbjJfc3JjIik7CisJCQlyZW4yLT5kc3RfZW50cnktPnByb2Nlc3NlZCA9IDE7CisJCQlyZW4yLT5wcm9jZXNzZWQgPSAxOworCQkJaWYgKHN0cmNtcChyZW4xX2RzdCwgcmVuMl9kc3QpICE9IDApIHsKKwkJCQlyZW5hbWVfdHlwZSA9IFJFTkFNRV9PTkVfRklMRV9UT19UV087CisJCQkJY2xlYW5fbWVyZ2UgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlyZW5hbWVfdHlwZSA9IFJFTkFNRV9PTkVfRklMRV9UT19PTkU7CisJCQkJLyogQlVHOiBXZSBzaG91bGQgb25seSByZW1vdmUgcmVuMV9zcmMgaW4KKwkJCQkgKiB0aGUgYmFzZSBzdGFnZSAodGhpbmsgb2YgcmVuYW1lICsKKwkJCQkgKiBhZGQtc291cmNlIGNhc2VzKS4KKwkJCQkgKi8KKwkJCQlyZW1vdmVfZmlsZShvLCAxLCByZW4xX3NyYywgMSk7CisJCQkJdXBkYXRlX2VudHJ5KHJlbjEtPmRzdF9lbnRyeSwKKwkJCQkJICAgICByZW4xLT5wYWlyLT5vbmUsCisJCQkJCSAgICAgcmVuMS0+cGFpci0+dHdvLAorCQkJCQkgICAgIHJlbjItPnBhaXItPnR3byk7CisJCQl9CisJCQlzZXR1cF9yZW5hbWVfY29uZmxpY3RfaW5mbyhyZW5hbWVfdHlwZSwKKwkJCQkJCSAgIHJlbjEtPnBhaXIsCisJCQkJCQkgICByZW4yLT5wYWlyLAorCQkJCQkJICAgYnJhbmNoMSwKKwkJCQkJCSAgIGJyYW5jaDIsCisJCQkJCQkgICByZW4xLT5kc3RfZW50cnksCisJCQkJCQkgICByZW4yLT5kc3RfZW50cnksCisJCQkJCQkgICBvLAorCQkJCQkJICAgTlVMTCwKKwkJCQkJCSAgIE5VTEwpOworCQl9IGVsc2UgaWYgKChsb29rdXAgPSBzdHJpbmdfbGlzdF9sb29rdXAocmVuYW1lczJEc3QsIHJlbjFfZHN0KSkpIHsKKwkJCS8qIFR3byBkaWZmZXJlbnQgZmlsZXMgcmVuYW1lZCB0byB0aGUgc2FtZSB0aGluZyAqLworCQkJY2hhciAqcmVuMl9kc3Q7CisJCQlyZW4yID0gbG9va3VwLT51dGlsOworCQkJcmVuMl9kc3QgPSByZW4yLT5wYWlyLT50d28tPnBhdGg7CisJCQlpZiAoc3RyY21wKHJlbjFfZHN0LCByZW4yX2RzdCkgIT0gMCkKKwkJCQlkaWUoInJlbjFfZHN0ICE9IHJlbjJfZHN0Iik7CisKKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCXJlbjItPnByb2Nlc3NlZCA9IDE7CisJCQkvKgorCQkJICogQlVHOiBXZSBzaG91bGQgb25seSBtYXJrIHNyY19lbnRyeSBhcyBwcm9jZXNzZWQKKwkJCSAqIGlmIHdlIGFyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVuYW1lICsgYWRkLXNvdXJjZQorCQkJICogY2FzZS4KKwkJCSAqLworCQkJcmVuMi0+c3JjX2VudHJ5LT5wcm9jZXNzZWQgPSAxOworCisJCQlzZXR1cF9yZW5hbWVfY29uZmxpY3RfaW5mbyhSRU5BTUVfVFdPX0ZJTEVTX1RPX09ORSwKKwkJCQkJCSAgIHJlbjEtPnBhaXIsCisJCQkJCQkgICByZW4yLT5wYWlyLAorCQkJCQkJICAgYnJhbmNoMSwKKwkJCQkJCSAgIGJyYW5jaDIsCisJCQkJCQkgICByZW4xLT5kc3RfZW50cnksCisJCQkJCQkgICByZW4yLT5kc3RfZW50cnksCisJCQkJCQkgICBvLAorCQkJCQkJICAgcmVuMS0+c3JjX2VudHJ5LAorCQkJCQkJICAgcmVuMi0+c3JjX2VudHJ5KTsKKworCQl9IGVsc2UgeworCQkJLyogUmVuYW1lZCBpbiAxLCBtYXliZSBjaGFuZ2VkIGluIDIgKi8KKwkJCS8qIHdlIG9ubHkgdXNlIHNoYTEgYW5kIG1vZGUgb2YgdGhlc2UgKi8KKwkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjIHNyY19vdGhlciwgZHN0X290aGVyOworCQkJaW50IHRyeV9tZXJnZTsKKworCQkJLyoKKwkJCSAqIHVucGFja190cmVlcyBsb2FkcyBlbnRyaWVzIGZyb20gY29tbW9uLWNvbW1pdAorCQkJICogaW50byBzdGFnZSAxLCBmcm9tIGhlYWQtY29tbWl0IGludG8gc3RhZ2UgMiwgYW5kCisJCQkgKiBmcm9tIG1lcmdlLWNvbW1pdCBpbnRvIHN0YWdlIDMuICBXZSBrZWVwIHRyYWNrCisJCQkgKiBvZiB3aGljaCBzaWRlIGNvcnJlc3BvbmRzIHRvIHRoZSByZW5hbWUuCisJCQkgKi8KKwkJCWludCByZW5hbWVkX3N0YWdlID0gYV9yZW5hbWVzID09IHJlbmFtZXMxID8gMiA6IDM7CisJCQlpbnQgb3RoZXJfc3RhZ2UgPSAgIGFfcmVuYW1lcyA9PSByZW5hbWVzMSA/IDMgOiAyOworCisJCQkvKiBCVUc6IFdlIHNob3VsZCBvbmx5IHJlbW92ZSByZW4xX3NyYyBpbiB0aGUgYmFzZQorCQkJICogc3RhZ2UgYW5kIGluIG90aGVyX3N0YWdlICh0aGluayBvZiByZW5hbWUgKworCQkJICogYWRkLXNvdXJjZSBjYXNlKS4KKwkJCSAqLworCQkJcmVtb3ZlX2ZpbGUobywgMSwgcmVuMV9zcmMsCisJCQkJICAgIHJlbmFtZWRfc3RhZ2UgPT0gMiB8fCAhd2FzX3RyYWNrZWQocmVuMV9zcmMpKTsKKworCQkJaGFzaGNweShzcmNfb3RoZXIuc2hhMSwgcmVuMS0+c3JjX2VudHJ5LT5zdGFnZXNbb3RoZXJfc3RhZ2VdLnNoYSk7CisJCQlzcmNfb3RoZXIubW9kZSA9IHJlbjEtPnNyY19lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXS5tb2RlOworCQkJaGFzaGNweShkc3Rfb3RoZXIuc2hhMSwgcmVuMS0+ZHN0X2VudHJ5LT5zdGFnZXNbb3RoZXJfc3RhZ2VdLnNoYSk7CisJCQlkc3Rfb3RoZXIubW9kZSA9IHJlbjEtPmRzdF9lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXS5tb2RlOworCQkJdHJ5X21lcmdlID0gMDsKKworCQkJaWYgKHNoYV9lcShzcmNfb3RoZXIuc2hhMSwgbnVsbF9zaGExKSkgeworCQkJCXNldHVwX3JlbmFtZV9jb25mbGljdF9pbmZvKFJFTkFNRV9ERUxFVEUsCisJCQkJCQkJICAgcmVuMS0+cGFpciwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIGJyYW5jaDEsCisJCQkJCQkJICAgYnJhbmNoMiwKKwkJCQkJCQkgICByZW4xLT5kc3RfZW50cnksCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBvLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgTlVMTCk7CisJCQl9IGVsc2UgaWYgKChkc3Rfb3RoZXIubW9kZSA9PSByZW4xLT5wYWlyLT50d28tPm1vZGUpICYmCisJCQkJICAgc2hhX2VxKGRzdF9vdGhlci5zaGExLCByZW4xLT5wYWlyLT50d28tPnNoYTEpKSB7CisJCQkJLyoKKwkJCQkgKiBBZGRlZCBmaWxlIG9uIHRoZSBvdGhlciBzaWRlIGlkZW50aWNhbCB0bworCQkJCSAqIHRoZSBmaWxlIGJlaW5nIHJlbmFtZWQ6IGNsZWFuIG1lcmdlLgorCQkJCSAqIEFsc28sIHRoZXJlIGlzIG5vIG5lZWQgdG8gb3ZlcndyaXRlIHRoZQorCQkJCSAqIGZpbGUgYWxyZWFkeSBpbiB0aGUgd29ya2luZyBjb3B5LCBzbyBjYWxsCisJCQkJICogdXBkYXRlX2ZpbGVfZmxhZ3MoKSBpbnN0ZWFkIG9mCisJCQkJICogdXBkYXRlX2ZpbGUoKS4KKwkJCQkgKi8KKwkJCQl1cGRhdGVfZmlsZV9mbGFncyhvLAorCQkJCQkJICByZW4xLT5wYWlyLT50d28tPnNoYTEsCisJCQkJCQkgIHJlbjEtPnBhaXItPnR3by0+bW9kZSwKKwkJCQkJCSAgcmVuMV9kc3QsCisJCQkJCQkgIDEsIC8qIHVwZGF0ZV9jYWNoZSAqLworCQkJCQkJICAwICAvKiB1cGRhdGVfd2QgICAgKi8pOworCQkJfSBlbHNlIGlmICghc2hhX2VxKGRzdF9vdGhlci5zaGExLCBudWxsX3NoYTEpKSB7CisJCQkJY2xlYW5fbWVyZ2UgPSAwOworCQkJCXRyeV9tZXJnZSA9IDE7CisJCQkJb3V0cHV0KG8sIDEsIF8oIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIgorCQkJCSAgICAgICAiJXMgYWRkZWQgaW4gJXMiKSwKKwkJCQkgICAgICAgcmVuMV9zcmMsIHJlbjFfZHN0LCBicmFuY2gxLAorCQkJCSAgICAgICByZW4xX2RzdCwgYnJhbmNoMik7CisJCQkJaWYgKG8tPmNhbGxfZGVwdGgpIHsKKwkJCQkJc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyBtZmk7CisJCQkJCW1maSA9IG1lcmdlX2ZpbGUobywgcmVuMV9kc3QsIG51bGxfc2hhMSwgMCwKKwkJCQkJCQkgcmVuMS0+cGFpci0+dHdvLT5zaGExLCByZW4xLT5wYWlyLT50d28tPm1vZGUsCisJCQkJCQkJIGRzdF9vdGhlci5zaGExLCBkc3Rfb3RoZXIubW9kZSwKKwkJCQkJCQkgYnJhbmNoMSwgYnJhbmNoMik7CisJCQkJCW91dHB1dChvLCAxLCBfKCJBZGRpbmcgbWVyZ2VkICVzIiksIHJlbjFfZHN0KTsKKwkJCQkJdXBkYXRlX2ZpbGUobywgMCwgbWZpLnNoYSwgbWZpLm1vZGUsIHJlbjFfZHN0KTsKKwkJCQkJdHJ5X21lcmdlID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQljaGFyICpuZXdfcGF0aCA9IHVuaXF1ZV9wYXRoKG8sIHJlbjFfZHN0LCBicmFuY2gyKTsKKwkJCQkJb3V0cHV0KG8sIDEsIF8oIkFkZGluZyBhcyAlcyBpbnN0ZWFkIiksIG5ld19wYXRoKTsKKwkJCQkJdXBkYXRlX2ZpbGUobywgMCwgZHN0X290aGVyLnNoYTEsIGRzdF9vdGhlci5tb2RlLCBuZXdfcGF0aCk7CisJCQkJCWZyZWUobmV3X3BhdGgpOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCXRyeV9tZXJnZSA9IDE7CisKKwkJCWlmICh0cnlfbWVyZ2UpIHsKKwkJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqYSwgKmI7CisJCQkJc3JjX290aGVyLnBhdGggPSAoY2hhciAqKXJlbjFfc3JjOworCisJCQkJb25lID0gcmVuMS0+cGFpci0+b25lOworCQkJCWlmIChhX3JlbmFtZXMgPT0gcmVuYW1lczEpIHsKKwkJCQkJYSA9IHJlbjEtPnBhaXItPnR3bzsKKwkJCQkJYiA9ICZzcmNfb3RoZXI7CisJCQkJfSBlbHNlIHsKKwkJCQkJYiA9IHJlbjEtPnBhaXItPnR3bzsKKwkJCQkJYSA9ICZzcmNfb3RoZXI7CisJCQkJfQorCQkJCXVwZGF0ZV9lbnRyeShyZW4xLT5kc3RfZW50cnksIG9uZSwgYSwgYik7CisJCQkJc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8oUkVOQU1FX05PUk1BTCwKKwkJCQkJCQkgICByZW4xLT5wYWlyLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgYnJhbmNoMSwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIHJlbjEtPmRzdF9lbnRyeSwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIG8sCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMKTsKKwkJCX0KKwkJfQorCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmYV9ieV9kc3QsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZiX2J5X2RzdCwgMCk7CisKKwlyZXR1cm4gY2xlYW5fbWVyZ2U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpzdGFnZV9zaGEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhLCB1bnNpZ25lZCBtb2RlKQoreworCXJldHVybiAoaXNfbnVsbF9zaGExKHNoYSkgfHwgbW9kZSA9PSAwKSA/IE5VTEw6ICh1bnNpZ25lZCBjaGFyICopc2hhOworfQorCitzdGF0aWMgaW50IHJlYWRfc2hhMV9zdHJidWYoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHN0cmJ1ZiAqZHN0KQoreworCXZvaWQgKmJ1ZjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVhZCBvYmplY3QgJXMiKSwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmICh0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuIGVycm9yKF8oIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIiksIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisJc3RyYnVmX2F0dGFjaChkc3QsIGJ1Ziwgc2l6ZSwgc2l6ZSArIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJsb2JfdW5jaGFuZ2VkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9fc2hhLAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICphX3NoYSwKKwkJCSAgaW50IHJlbm9ybWFsaXplLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgbyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYSA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOyAvKiBhc3N1bWUgY2hhbmdlZCBmb3Igc2FmZXR5ICovCisKKwlpZiAoc2hhX2VxKG9fc2hhLCBhX3NoYSkpCisJCXJldHVybiAxOworCWlmICghcmVub3JtYWxpemUpCisJCXJldHVybiAwOworCisJYXNzZXJ0KG9fc2hhICYmIGFfc2hhKTsKKwlpZiAocmVhZF9zaGExX3N0cmJ1ZihvX3NoYSwgJm8pIHx8IHJlYWRfc2hhMV9zdHJidWYoYV9zaGEsICZhKSkKKwkJZ290byBlcnJvcl9yZXR1cm47CisJLyoKKwkgKiBOb3RlOiBiaW5hcnkgfCBpcyB1c2VkIHNvIHRoYXQgYm90aCByZW5vcm1hbGl6YXRpb25zIGFyZQorCSAqIHBlcmZvcm1lZC4gIENvbXBhcmlzb24gY2FuIGJlIHNraXBwZWQgaWYgYm90aCBmaWxlcyBhcmUKKwkgKiB1bmNoYW5nZWQgc2luY2UgdGhlaXIgc2hhMXMgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcGFyZWQuCisJICovCisJaWYgKHJlbm9ybWFsaXplX2J1ZmZlcihwYXRoLCBvLmJ1Ziwgby5sZW4sICZvKSB8CisJICAgIHJlbm9ybWFsaXplX2J1ZmZlcihwYXRoLCBhLmJ1Ziwgby5sZW4sICZhKSkKKwkJcmV0ID0gKG8ubGVuID09IGEubGVuICYmICFtZW1jbXAoby5idWYsIGEuYnVmLCBvLmxlbikpOworCitlcnJvcl9yZXR1cm46CisJc3RyYnVmX3JlbGVhc2UoJm8pOworCXN0cmJ1Zl9yZWxlYXNlKCZhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbW9kaWZ5X2RlbGV0ZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCQkgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgdW5zaWduZWQgY2hhciAqb19zaGEsIGludCBvX21vZGUsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmFfc2hhLCBpbnQgYV9tb2RlLAorCQkJCSB1bnNpZ25lZCBjaGFyICpiX3NoYSwgaW50IGJfbW9kZSkKK3sKKwloYW5kbGVfY2hhbmdlX2RlbGV0ZShvLAorCQkJICAgICBwYXRoLAorCQkJICAgICBvX3NoYSwgb19tb2RlLAorCQkJICAgICBhX3NoYSwgYV9tb2RlLAorCQkJICAgICBiX3NoYSwgYl9tb2RlLAorCQkJICAgICBfKCJtb2RpZnkiKSwgXygibW9kaWZpZWQiKSk7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfY29udGVudChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCSBjb25zdCBjaGFyICpwYXRoLAorCQkJIHVuc2lnbmVkIGNoYXIgKm9fc2hhLCBpbnQgb19tb2RlLAorCQkJIHVuc2lnbmVkIGNoYXIgKmFfc2hhLCBpbnQgYV9tb2RlLAorCQkJIHVuc2lnbmVkIGNoYXIgKmJfc2hhLCBpbnQgYl9tb2RlLAorCQkJIHN0cnVjdCByZW5hbWVfY29uZmxpY3RfaW5mbyAqcmVuYW1lX2NvbmZsaWN0X2luZm8pCit7CisJY29uc3QgY2hhciAqcmVhc29uID0gXygiY29udGVudCIpOworCWNvbnN0IGNoYXIgKnBhdGgxID0gTlVMTCwgKnBhdGgyID0gTlVMTDsKKwlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maTsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyBvbmUsIGEsIGI7CisJdW5zaWduZWQgZGZfY29uZmxpY3RfcmVtYWlucyA9IDA7CisKKwlpZiAoIW9fc2hhKSB7CisJCXJlYXNvbiA9IF8oImFkZC9hZGQiKTsKKwkJb19zaGEgPSAodW5zaWduZWQgY2hhciAqKW51bGxfc2hhMTsKKwl9CisJb25lLnBhdGggPSBhLnBhdGggPSBiLnBhdGggPSAoY2hhciAqKXBhdGg7CisJaGFzaGNweShvbmUuc2hhMSwgb19zaGEpOworCW9uZS5tb2RlID0gb19tb2RlOworCWhhc2hjcHkoYS5zaGExLCBhX3NoYSk7CisJYS5tb2RlID0gYV9tb2RlOworCWhhc2hjcHkoYi5zaGExLCBiX3NoYSk7CisJYi5tb2RlID0gYl9tb2RlOworCisJaWYgKHJlbmFtZV9jb25mbGljdF9pbmZvKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyMSA9IHJlbmFtZV9jb25mbGljdF9pbmZvLT5wYWlyMTsKKworCQlwYXRoMSA9IChvLT5icmFuY2gxID09IHJlbmFtZV9jb25mbGljdF9pbmZvLT5icmFuY2gxKSA/CisJCQlwYWlyMS0+dHdvLT5wYXRoIDogcGFpcjEtPm9uZS0+cGF0aDsKKwkJLyogSWYgcmVuYW1lX2NvbmZsaWN0X2luZm8tPnBhaXIyICE9IE5VTEwsIHdlIGFyZSBpbgorCQkgKiBSRU5BTUVfT05FX0ZJTEVfVE9fT05FIGNhc2UuICBPdGhlcndpc2UsIHdlIGhhdmUgYQorCQkgKiBub3JtYWwgcmVuYW1lLgorCQkgKi8KKwkJcGF0aDIgPSAocmVuYW1lX2NvbmZsaWN0X2luZm8tPnBhaXIyIHx8CisJCQkgby0+YnJhbmNoMiA9PSByZW5hbWVfY29uZmxpY3RfaW5mby0+YnJhbmNoMSkgPworCQkJcGFpcjEtPnR3by0+cGF0aCA6IHBhaXIxLT5vbmUtPnBhdGg7CisKKwkJaWYgKGRpcl9pbl93YXkocGF0aCwgIW8tPmNhbGxfZGVwdGgpKQorCQkJZGZfY29uZmxpY3RfcmVtYWlucyA9IDE7CisJfQorCW1maSA9IG1lcmdlX2ZpbGVfc3BlY2lhbF9tYXJrZXJzKG8sICZvbmUsICZhLCAmYiwKKwkJCQkJIG8tPmJyYW5jaDEsIHBhdGgxLAorCQkJCQkgby0+YnJhbmNoMiwgcGF0aDIpOworCisJaWYgKG1maS5jbGVhbiAmJiAhZGZfY29uZmxpY3RfcmVtYWlucyAmJgorCSAgICBzaGFfZXEobWZpLnNoYSwgYV9zaGEpICYmIG1maS5tb2RlID09IGFfbW9kZSkgeworCQlpbnQgcGF0aF9yZW5hbWVkX291dHNpZGVfSEVBRDsKKwkJb3V0cHV0KG8sIDMsIF8oIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIpLCBwYXRoKTsKKwkJLyoKKwkJICogVGhlIGNvbnRlbnQgbWVyZ2UgcmVzdWx0ZWQgaW4gdGhlIHNhbWUgZmlsZSBjb250ZW50cyB3ZQorCQkgKiBhbHJlYWR5IGhhZC4gIFdlIGNhbiByZXR1cm4gZWFybHkgaWYgdGhvc2UgZmlsZSBjb250ZW50cworCQkgKiBhcmUgcmVjb3JkZWQgYXQgdGhlIGNvcnJlY3QgcGF0aCAod2hpY2ggbWF5IG5vdCBiZSB0cnVlCisJCSAqIGlmIHRoZSBtZXJnZSBpbnZvbHZlcyBhIHJlbmFtZSkuCisJCSAqLworCQlwYXRoX3JlbmFtZWRfb3V0c2lkZV9IRUFEID0gIXBhdGgyIHx8ICFzdHJjbXAocGF0aCwgcGF0aDIpOworCQlpZiAoIXBhdGhfcmVuYW1lZF9vdXRzaWRlX0hFQUQpIHsKKwkJCWFkZF9jYWNoZWluZm8obWZpLm1vZGUsIG1maS5zaGEsIHBhdGgsCisJCQkJICAgICAgMCwgKCFvLT5jYWxsX2RlcHRoKSwgMCk7CisJCQlyZXR1cm4gbWZpLmNsZWFuOworCQl9CisJfSBlbHNlCisJCW91dHB1dChvLCAyLCBfKCJBdXRvLW1lcmdpbmcgJXMiKSwgcGF0aCk7CisKKwlpZiAoIW1maS5jbGVhbikgeworCQlpZiAoU19JU0dJVExJTksobWZpLm1vZGUpKQorCQkJcmVhc29uID0gXygic3VibW9kdWxlIik7CisJCW91dHB1dChvLCAxLCBfKCJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIpLAorCQkJCXJlYXNvbiwgcGF0aCk7CisJCWlmIChyZW5hbWVfY29uZmxpY3RfaW5mbyAmJiAhZGZfY29uZmxpY3RfcmVtYWlucykKKwkJCXVwZGF0ZV9zdGFnZXMocGF0aCwgJm9uZSwgJmEsICZiKTsKKwl9CisKKwlpZiAoZGZfY29uZmxpY3RfcmVtYWlucykgeworCQljaGFyICpuZXdfcGF0aDsKKwkJaWYgKG8tPmNhbGxfZGVwdGgpIHsKKwkJCXJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCk7CisJCX0gZWxzZSB7CisJCQlpZiAoIW1maS5jbGVhbikKKwkJCQl1cGRhdGVfc3RhZ2VzKHBhdGgsICZvbmUsICZhLCAmYik7CisJCQllbHNlIHsKKwkJCQlpbnQgZmlsZV9mcm9tX3N0YWdlMiA9IHdhc190cmFja2VkKHBhdGgpOworCQkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjIG1lcmdlZDsKKwkJCQloYXNoY3B5KG1lcmdlZC5zaGExLCBtZmkuc2hhKTsKKwkJCQltZXJnZWQubW9kZSA9IG1maS5tb2RlOworCisJCQkJdXBkYXRlX3N0YWdlcyhwYXRoLCBOVUxMLAorCQkJCQkgICAgICBmaWxlX2Zyb21fc3RhZ2UyID8gJm1lcmdlZCA6IE5VTEwsCisJCQkJCSAgICAgIGZpbGVfZnJvbV9zdGFnZTIgPyBOVUxMIDogJm1lcmdlZCk7CisJCQl9CisKKwkJfQorCQluZXdfcGF0aCA9IHVuaXF1ZV9wYXRoKG8sIHBhdGgsIHJlbmFtZV9jb25mbGljdF9pbmZvLT5icmFuY2gxKTsKKwkJb3V0cHV0KG8sIDEsIF8oIkFkZGluZyBhcyAlcyBpbnN0ZWFkIiksIG5ld19wYXRoKTsKKwkJdXBkYXRlX2ZpbGUobywgMCwgbWZpLnNoYSwgbWZpLm1vZGUsIG5ld19wYXRoKTsKKwkJZnJlZShuZXdfcGF0aCk7CisJCW1maS5jbGVhbiA9IDA7CisJfSBlbHNlIHsKKwkJdXBkYXRlX2ZpbGUobywgbWZpLmNsZWFuLCBtZmkuc2hhLCBtZmkubW9kZSwgcGF0aCk7CisJfQorCXJldHVybiBtZmkuY2xlYW47CisKK30KKworLyogUGVyIGVudHJ5IG1lcmdlIGZ1bmN0aW9uICovCitzdGF0aWMgaW50IHByb2Nlc3NfZW50cnkoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQkgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YWdlX2RhdGEgKmVudHJ5KQoreworCS8qCisJcHJpbnRmKCJwcm9jZXNzaW5nIGVudHJ5LCBjbGVhbiBjYWNoZTogJXNcbiIsIGluZGV4X29ubHkgPyAieWVzIjogIm5vIik7CisJcHJpbnRfaW5kZXhfZW50cnkoIlx0cGF0aDogIiwgZW50cnkpOworCSovCisJaW50IGNsZWFuX21lcmdlID0gMTsKKwlpbnQgbm9ybWFsaXplID0gby0+cmVub3JtYWxpemU7CisJdW5zaWduZWQgb19tb2RlID0gZW50cnktPnN0YWdlc1sxXS5tb2RlOworCXVuc2lnbmVkIGFfbW9kZSA9IGVudHJ5LT5zdGFnZXNbMl0ubW9kZTsKKwl1bnNpZ25lZCBiX21vZGUgPSBlbnRyeS0+c3RhZ2VzWzNdLm1vZGU7CisJdW5zaWduZWQgY2hhciAqb19zaGEgPSBzdGFnZV9zaGEoZW50cnktPnN0YWdlc1sxXS5zaGEsIG9fbW9kZSk7CisJdW5zaWduZWQgY2hhciAqYV9zaGEgPSBzdGFnZV9zaGEoZW50cnktPnN0YWdlc1syXS5zaGEsIGFfbW9kZSk7CisJdW5zaWduZWQgY2hhciAqYl9zaGEgPSBzdGFnZV9zaGEoZW50cnktPnN0YWdlc1szXS5zaGEsIGJfbW9kZSk7CisKKwllbnRyeS0+cHJvY2Vzc2VkID0gMTsKKwlpZiAoZW50cnktPnJlbmFtZV9jb25mbGljdF9pbmZvKSB7CisJCXN0cnVjdCByZW5hbWVfY29uZmxpY3RfaW5mbyAqY29uZmxpY3RfaW5mbyA9IGVudHJ5LT5yZW5hbWVfY29uZmxpY3RfaW5mbzsKKwkJc3dpdGNoIChjb25mbGljdF9pbmZvLT5yZW5hbWVfdHlwZSkgeworCQljYXNlIFJFTkFNRV9OT1JNQUw6CisJCWNhc2UgUkVOQU1FX09ORV9GSUxFX1RPX09ORToKKwkJCWNsZWFuX21lcmdlID0gbWVyZ2VfY29udGVudChvLCBwYXRoLAorCQkJCQkJICAgIG9fc2hhLCBvX21vZGUsIGFfc2hhLCBhX21vZGUsIGJfc2hhLCBiX21vZGUsCisJCQkJCQkgICAgY29uZmxpY3RfaW5mbyk7CisJCQlicmVhazsKKwkJY2FzZSBSRU5BTUVfREVMRVRFOgorCQkJY2xlYW5fbWVyZ2UgPSAwOworCQkJY29uZmxpY3RfcmVuYW1lX2RlbGV0ZShvLCBjb25mbGljdF9pbmZvLT5wYWlyMSwKKwkJCQkJICAgICAgIGNvbmZsaWN0X2luZm8tPmJyYW5jaDEsCisJCQkJCSAgICAgICBjb25mbGljdF9pbmZvLT5icmFuY2gyKTsKKwkJCWJyZWFrOworCQljYXNlIFJFTkFNRV9PTkVfRklMRV9UT19UV086CisJCQljbGVhbl9tZXJnZSA9IDA7CisJCQljb25mbGljdF9yZW5hbWVfcmVuYW1lXzF0bzIobywgY29uZmxpY3RfaW5mbyk7CisJCQlicmVhazsKKwkJY2FzZSBSRU5BTUVfVFdPX0ZJTEVTX1RPX09ORToKKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCWNvbmZsaWN0X3JlbmFtZV9yZW5hbWVfMnRvMShvLCBjb25mbGljdF9pbmZvKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZW50cnktPnByb2Nlc3NlZCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBpZiAob19zaGEgJiYgKCFhX3NoYSB8fCAhYl9zaGEpKSB7CisJCS8qIENhc2UgQTogRGVsZXRlZCBpbiBvbmUgKi8KKwkJaWYgKCghYV9zaGEgJiYgIWJfc2hhKSB8fAorCQkgICAgKCFiX3NoYSAmJiBibG9iX3VuY2hhbmdlZChvX3NoYSwgYV9zaGEsIG5vcm1hbGl6ZSwgcGF0aCkpIHx8CisJCSAgICAoIWFfc2hhICYmIGJsb2JfdW5jaGFuZ2VkKG9fc2hhLCBiX3NoYSwgbm9ybWFsaXplLCBwYXRoKSkpIHsKKwkJCS8qIERlbGV0ZWQgaW4gYm90aCBvciBkZWxldGVkIGluIG9uZSBhbmQKKwkJCSAqIHVuY2hhbmdlZCBpbiB0aGUgb3RoZXIgKi8KKwkJCWlmIChhX3NoYSkKKwkJCQlvdXRwdXQobywgMiwgXygiUmVtb3ZpbmcgJXMiKSwgcGF0aCk7CisJCQkvKiBkbyBub3QgdG91Y2ggd29ya2luZyBmaWxlIGlmIGl0IGRpZCBub3QgZXhpc3QgKi8KKwkJCXJlbW92ZV9maWxlKG8sIDEsIHBhdGgsICFhX3NoYSk7CisJCX0gZWxzZSB7CisJCQkvKiBNb2RpZnkvZGVsZXRlOyBkZWxldGVkIHNpZGUgbWF5IGhhdmUgcHV0IGEgZGlyZWN0b3J5IGluIHRoZSB3YXkgKi8KKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCWhhbmRsZV9tb2RpZnlfZGVsZXRlKG8sIHBhdGgsIG9fc2hhLCBvX21vZGUsCisJCQkJCSAgICAgYV9zaGEsIGFfbW9kZSwgYl9zaGEsIGJfbW9kZSk7CisJCX0KKwl9IGVsc2UgaWYgKCghb19zaGEgJiYgYV9zaGEgJiYgIWJfc2hhKSB8fAorCQkgICAoIW9fc2hhICYmICFhX3NoYSAmJiBiX3NoYSkpIHsKKwkJLyogQ2FzZSBCOiBBZGRlZCBpbiBvbmUuICovCisJCS8qIFtub3RoaW5nfGRpcmVjdG9yeV0gLT4gKFtub3RoaW5nfGRpcmVjdG9yeV0sIGZpbGUpICovCisKKwkJY29uc3QgY2hhciAqYWRkX2JyYW5jaDsKKwkJY29uc3QgY2hhciAqb3RoZXJfYnJhbmNoOworCQl1bnNpZ25lZCBtb2RlOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGE7CisJCWNvbnN0IGNoYXIgKmNvbmY7CisKKwkJaWYgKGFfc2hhKSB7CisJCQlhZGRfYnJhbmNoID0gby0+YnJhbmNoMTsKKwkJCW90aGVyX2JyYW5jaCA9IG8tPmJyYW5jaDI7CisJCQltb2RlID0gYV9tb2RlOworCQkJc2hhID0gYV9zaGE7CisJCQljb25mID0gXygiZmlsZS9kaXJlY3RvcnkiKTsKKwkJfSBlbHNlIHsKKwkJCWFkZF9icmFuY2ggPSBvLT5icmFuY2gyOworCQkJb3RoZXJfYnJhbmNoID0gby0+YnJhbmNoMTsKKwkJCW1vZGUgPSBiX21vZGU7CisJCQlzaGEgPSBiX3NoYTsKKwkJCWNvbmYgPSBfKCJkaXJlY3RvcnkvZmlsZSIpOworCQl9CisJCWlmIChkaXJfaW5fd2F5KHBhdGgsICFvLT5jYWxsX2RlcHRoKSkgeworCQkJY2hhciAqbmV3X3BhdGggPSB1bmlxdWVfcGF0aChvLCBwYXRoLCBhZGRfYnJhbmNoKTsKKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCW91dHB1dChvLCAxLCBfKCJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuICIKKwkJCSAgICAgICAiQWRkaW5nICVzIGFzICVzIiksCisJCQkgICAgICAgY29uZiwgcGF0aCwgb3RoZXJfYnJhbmNoLCBwYXRoLCBuZXdfcGF0aCk7CisJCQlpZiAoby0+Y2FsbF9kZXB0aCkKKwkJCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCQkJdXBkYXRlX2ZpbGUobywgMCwgc2hhLCBtb2RlLCBuZXdfcGF0aCk7CisJCQlpZiAoby0+Y2FsbF9kZXB0aCkKKwkJCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCQkJZnJlZShuZXdfcGF0aCk7CisJCX0gZWxzZSB7CisJCQlvdXRwdXQobywgMiwgXygiQWRkaW5nICVzIiksIHBhdGgpOworCQkJLyogZG8gbm90IG92ZXJ3cml0ZSBmaWxlIGlmIGFscmVhZHkgcHJlc2VudCAqLworCQkJdXBkYXRlX2ZpbGVfZmxhZ3Mobywgc2hhLCBtb2RlLCBwYXRoLCAxLCAhYV9zaGEpOworCQl9CisJfSBlbHNlIGlmIChhX3NoYSAmJiBiX3NoYSkgeworCQkvKiBDYXNlIEM6IEFkZGVkIGluIGJvdGggKGNoZWNrIGZvciBzYW1lIHBlcm1pc3Npb25zKSBhbmQgKi8KKwkJLyogY2FzZSBEOiBNb2RpZmllZCBpbiBib3RoLCBidXQgZGlmZmVyZW50bHkuICovCisJCWNsZWFuX21lcmdlID0gbWVyZ2VfY29udGVudChvLCBwYXRoLAorCQkJCQkgICAgb19zaGEsIG9fbW9kZSwgYV9zaGEsIGFfbW9kZSwgYl9zaGEsIGJfbW9kZSwKKwkJCQkJICAgIE5VTEwpOworCX0gZWxzZSBpZiAoIW9fc2hhICYmICFhX3NoYSAmJiAhYl9zaGEpIHsKKwkJLyoKKwkJICogdGhpcyBlbnRyeSB3YXMgZGVsZXRlZCBhbHRvZ2V0aGVyLiBhX21vZGUgPT0gMCBtZWFucworCQkgKiB3ZSBoYWQgdGhhdCBwYXRoIGFuZCB3YW50IHRvIGFjdGl2ZWx5IHJlbW92ZSBpdC4KKwkJICovCisJCXJlbW92ZV9maWxlKG8sIDEsIHBhdGgsICFhX21vZGUpOworCX0gZWxzZQorCQlkaWUoXygiRmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iKSk7CisKKwlyZXR1cm4gY2xlYW5fbWVyZ2U7Cit9CisKK2ludCBtZXJnZV90cmVlcyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJc3RydWN0IHRyZWUgKmhlYWQsCisJCXN0cnVjdCB0cmVlICptZXJnZSwKKwkJc3RydWN0IHRyZWUgKmNvbW1vbiwKKwkJc3RydWN0IHRyZWUgKipyZXN1bHQpCit7CisJaW50IGNvZGUsIGNsZWFuOworCisJaWYgKG8tPnN1YnRyZWVfc2hpZnQpIHsKKwkJbWVyZ2UgPSBzaGlmdF90cmVlX29iamVjdChoZWFkLCBtZXJnZSwgby0+c3VidHJlZV9zaGlmdCk7CisJCWNvbW1vbiA9IHNoaWZ0X3RyZWVfb2JqZWN0KGhlYWQsIGNvbW1vbiwgby0+c3VidHJlZV9zaGlmdCk7CisJfQorCisJaWYgKHNoYV9lcShjb21tb24tPm9iamVjdC5zaGExLCBtZXJnZS0+b2JqZWN0LnNoYTEpKSB7CisJCW91dHB1dChvLCAwLCBfKCJBbHJlYWR5IHVwLXRvLWRhdGUhIikpOworCQkqcmVzdWx0ID0gaGVhZDsKKwkJcmV0dXJuIDE7CisJfQorCisJY29kZSA9IGdpdF9tZXJnZV90cmVlcyhvLT5jYWxsX2RlcHRoLCBjb21tb24sIGhlYWQsIG1lcmdlKTsKKworCWlmIChjb2RlICE9IDApIHsKKwkJaWYgKHNob3cobywgNCkgfHwgby0+Y2FsbF9kZXB0aCkKKwkJCWRpZShfKCJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiKSwKKwkJCSAgICBzaGExX3RvX2hleChoZWFkLT5vYmplY3Quc2hhMSksCisJCQkgICAgc2hhMV90b19oZXgobWVyZ2UtPm9iamVjdC5zaGExKSk7CisJCWVsc2UKKwkJCWV4aXQoMTI4KTsKKwl9CisKKwlpZiAodW5tZXJnZWRfY2FjaGUoKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmVudHJpZXMsICpyZV9oZWFkLCAqcmVfbWVyZ2U7CisJCWludCBpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmby0+Y3VycmVudF9maWxlX3NldCwgMSk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZvLT5jdXJyZW50X2RpcmVjdG9yeV9zZXQsIDEpOworCQlnZXRfZmlsZXNfZGlycyhvLCBoZWFkKTsKKwkJZ2V0X2ZpbGVzX2RpcnMobywgbWVyZ2UpOworCisJCWVudHJpZXMgPSBnZXRfdW5tZXJnZWQoKTsKKwkJcmVjb3JkX2RmX2NvbmZsaWN0X2ZpbGVzKG8sIGVudHJpZXMpOworCQlyZV9oZWFkICA9IGdldF9yZW5hbWVzKG8sIGhlYWQsIGNvbW1vbiwgaGVhZCwgbWVyZ2UsIGVudHJpZXMpOworCQlyZV9tZXJnZSA9IGdldF9yZW5hbWVzKG8sIG1lcmdlLCBjb21tb24sIGhlYWQsIG1lcmdlLCBlbnRyaWVzKTsKKwkJY2xlYW4gPSBwcm9jZXNzX3JlbmFtZXMobywgcmVfaGVhZCwgcmVfbWVyZ2UpOworCQlmb3IgKGkgPSBlbnRyaWVzLT5uci0xOyAwIDw9IGk7IGktLSkgeworCQkJY29uc3QgY2hhciAqcGF0aCA9IGVudHJpZXMtPml0ZW1zW2ldLnN0cmluZzsKKwkJCXN0cnVjdCBzdGFnZV9kYXRhICplID0gZW50cmllcy0+aXRlbXNbaV0udXRpbDsKKwkJCWlmICghZS0+cHJvY2Vzc2VkCisJCQkJJiYgIXByb2Nlc3NfZW50cnkobywgcGF0aCwgZSkpCisJCQkJY2xlYW4gPSAwOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLT5ucjsgaSsrKSB7CisJCQlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZSA9IGVudHJpZXMtPml0ZW1zW2ldLnV0aWw7CisJCQlpZiAoIWUtPnByb2Nlc3NlZCkKKwkJCQlkaWUoXygiVW5wcm9jZXNzZWQgcGF0aD8/PyAlcyIpLAorCQkJCSAgICBlbnRyaWVzLT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisKKwkJc3RyaW5nX2xpc3RfY2xlYXIocmVfbWVyZ2UsIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcihyZV9oZWFkLCAwKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoZW50cmllcywgMSk7CisKKwl9CisJZWxzZQorCQljbGVhbiA9IDE7CisKKwlpZiAoby0+Y2FsbF9kZXB0aCkKKwkJKnJlc3VsdCA9IHdyaXRlX3RyZWVfZnJvbV9tZW1vcnkobyk7CisKKwlyZXR1cm4gY2xlYW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldmVyc2VfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV4dCA9IE5VTEwsICpjdXJyZW50LCAqYmFja3VwOworCWZvciAoY3VycmVudCA9IGxpc3Q7IGN1cnJlbnQ7IGN1cnJlbnQgPSBiYWNrdXApIHsKKwkJYmFja3VwID0gY3VycmVudC0+bmV4dDsKKwkJY3VycmVudC0+bmV4dCA9IG5leHQ7CisJCW5leHQgPSBjdXJyZW50OworCX0KKwlyZXR1cm4gbmV4dDsKK30KKworLyoKKyAqIE1lcmdlIHRoZSBjb21taXRzIGgxIGFuZCBoMiwgcmV0dXJuIHRoZSByZXN1bHRpbmcgdmlydHVhbAorICogY29tbWl0IG9iamVjdCBhbmQgYSBmbGFnIGluZGljYXRpbmcgdGhlIGNsZWFubmVzcyBvZiB0aGUgbWVyZ2UuCisgKi8KK2ludCBtZXJnZV9yZWN1cnNpdmUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCSAgICBzdHJ1Y3QgY29tbWl0ICpoMSwKKwkJICAgIHN0cnVjdCBjb21taXQgKmgyLAorCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICpjYSwKKwkJICAgIHN0cnVjdCBjb21taXQgKipyZXN1bHQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICppdGVyOworCXN0cnVjdCBjb21taXQgKm1lcmdlZF9jb21tb25fYW5jZXN0b3JzOworCXN0cnVjdCB0cmVlICptcnRyZWUgPSBtcnRyZWU7CisJaW50IGNsZWFuOworCisJaWYgKHNob3cobywgNCkpIHsKKwkJb3V0cHV0KG8sIDQsIF8oIk1lcmdpbmc6IikpOworCQlvdXRwdXRfY29tbWl0X3RpdGxlKG8sIGgxKTsKKwkJb3V0cHV0X2NvbW1pdF90aXRsZShvLCBoMik7CisJfQorCisJaWYgKCFjYSkgeworCQljYSA9IGdldF9tZXJnZV9iYXNlcyhoMSwgaDIsIDEpOworCQljYSA9IHJldmVyc2VfY29tbWl0X2xpc3QoY2EpOworCX0KKworCWlmIChzaG93KG8sIDUpKSB7CisJCXVuc2lnbmVkIGNudCA9IGNvbW1pdF9saXN0X2NvdW50KGNhKTsKKworCQlvdXRwdXQobywgNSwgUV8oImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiLAorCQkJCSJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIsIGNudCksIGNudCk7CisJCWZvciAoaXRlciA9IGNhOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkKKwkJCW91dHB1dF9jb21taXRfdGl0bGUobywgaXRlci0+aXRlbSk7CisJfQorCisJbWVyZ2VkX2NvbW1vbl9hbmNlc3RvcnMgPSBwb3BfY29tbWl0KCZjYSk7CisJaWYgKG1lcmdlZF9jb21tb25fYW5jZXN0b3JzID09IE5VTEwpIHsKKwkJLyogaWYgdGhlcmUgaXMgbm8gY29tbW9uIGFuY2VzdG9yLCB1c2UgYW4gZW1wdHkgdHJlZSAqLworCQlzdHJ1Y3QgdHJlZSAqdHJlZTsKKworCQl0cmVlID0gbG9va3VwX3RyZWUoRU1QVFlfVFJFRV9TSEExX0JJTik7CisJCW1lcmdlZF9jb21tb25fYW5jZXN0b3JzID0gbWFrZV92aXJ0dWFsX2NvbW1pdCh0cmVlLCAiYW5jZXN0b3IiKTsKKwl9CisKKwlmb3IgKGl0ZXIgPSBjYTsgaXRlcjsgaXRlciA9IGl0ZXItPm5leHQpIHsKKwkJY29uc3QgY2hhciAqc2F2ZWRfYjEsICpzYXZlZF9iMjsKKwkJby0+Y2FsbF9kZXB0aCsrOworCQkvKgorCQkgKiBXaGVuIHRoZSBtZXJnZSBmYWlscywgdGhlIHJlc3VsdCBjb250YWlucyBmaWxlcworCQkgKiB3aXRoIGNvbmZsaWN0IG1hcmtlcnMuIFRoZSBjbGVhbm5lc3MgZmxhZyBpcworCQkgKiBpZ25vcmVkLCBpdCB3YXMgbmV2ZXIgYWN0dWFsbHkgdXNlZCwgYXMgcmVzdWx0IG9mCisJCSAqIG1lcmdlX3RyZWVzIGhhcyBhbHdheXMgb3ZlcndyaXR0ZW4gaXQ6IHRoZSBjb21taXR0ZWQKKwkJICogImNvbmZsaWN0cyIgd2VyZSBhbHJlYWR5IHJlc29sdmVkLgorCQkgKi8KKwkJZGlzY2FyZF9jYWNoZSgpOworCQlzYXZlZF9iMSA9IG8tPmJyYW5jaDE7CisJCXNhdmVkX2IyID0gby0+YnJhbmNoMjsKKwkJby0+YnJhbmNoMSA9ICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDEiOworCQlvLT5icmFuY2gyID0gIlRlbXBvcmFyeSBtZXJnZSBicmFuY2ggMiI7CisJCW1lcmdlX3JlY3Vyc2l2ZShvLCBtZXJnZWRfY29tbW9uX2FuY2VzdG9ycywgaXRlci0+aXRlbSwKKwkJCQlOVUxMLCAmbWVyZ2VkX2NvbW1vbl9hbmNlc3RvcnMpOworCQlvLT5icmFuY2gxID0gc2F2ZWRfYjE7CisJCW8tPmJyYW5jaDIgPSBzYXZlZF9iMjsKKwkJby0+Y2FsbF9kZXB0aC0tOworCisJCWlmICghbWVyZ2VkX2NvbW1vbl9hbmNlc3RvcnMpCisJCQlkaWUoXygibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IikpOworCX0KKworCWRpc2NhcmRfY2FjaGUoKTsKKwlpZiAoIW8tPmNhbGxfZGVwdGgpCisJCXJlYWRfY2FjaGUoKTsKKworCW8tPmFuY2VzdG9yID0gIm1lcmdlZCBjb21tb24gYW5jZXN0b3JzIjsKKwljbGVhbiA9IG1lcmdlX3RyZWVzKG8sIGgxLT50cmVlLCBoMi0+dHJlZSwgbWVyZ2VkX2NvbW1vbl9hbmNlc3RvcnMtPnRyZWUsCisJCQkgICAgJm1ydHJlZSk7CisKKwlpZiAoby0+Y2FsbF9kZXB0aCkgeworCQkqcmVzdWx0ID0gbWFrZV92aXJ0dWFsX2NvbW1pdChtcnRyZWUsICJtZXJnZWQgdHJlZSIpOworCQljb21taXRfbGlzdF9pbnNlcnQoaDEsICYoKnJlc3VsdCktPnBhcmVudHMpOworCQljb21taXRfbGlzdF9pbnNlcnQoaDIsICYoKnJlc3VsdCktPnBhcmVudHMtPm5leHQpOworCX0KKwlmbHVzaF9vdXRwdXQobyk7CisJaWYgKHNob3cobywgMikpCisJCWRpZmZfd2Fybl9yZW5hbWVfbGltaXQoIm1lcmdlLnJlbmFtZWxpbWl0IiwKKwkJCQkgICAgICAgby0+bmVlZGVkX3JlbmFtZV9saW1pdCwgMCk7CisJcmV0dXJuIGNsZWFuOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X3JlZihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKworCW9iamVjdCA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qoc2hhMSksIG5hbWUsIHN0cmxlbihuYW1lKSk7CisJaWYgKCFvYmplY3QpCisJCXJldHVybiBOVUxMOworCWlmIChvYmplY3QtPnR5cGUgPT0gT0JKX1RSRUUpCisJCXJldHVybiBtYWtlX3ZpcnR1YWxfY29tbWl0KChzdHJ1Y3QgdHJlZSopb2JqZWN0LCBuYW1lKTsKKwlpZiAob2JqZWN0LT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiBOVUxMOworCWlmIChwYXJzZV9jb21taXQoKHN0cnVjdCBjb21taXQgKilvYmplY3QpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gKHN0cnVjdCBjb21taXQgKilvYmplY3Q7Cit9CisKK2ludCBtZXJnZV9yZWN1cnNpdmVfZ2VuZXJpYyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1lcmdlLAorCQkJICAgIGludCBudW1fYmFzZV9saXN0LAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipiYXNlX2xpc3QsCisJCQkgICAgc3RydWN0IGNvbW1pdCAqKnJlc3VsdCkKK3sKKwlpbnQgY2xlYW4sIGluZGV4X2ZkOworCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2sgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQgPSBnZXRfcmVmKGhlYWQsIG8tPmJyYW5jaDEpOworCXN0cnVjdCBjb21taXQgKm5leHRfY29tbWl0ID0gZ2V0X3JlZihtZXJnZSwgby0+YnJhbmNoMik7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjYSA9IE5VTEw7CisKKwlpZiAoYmFzZV9saXN0KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2Jhc2VfbGlzdDsgKytpKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpiYXNlOworCQkJaWYgKCEoYmFzZSA9IGdldF9yZWYoYmFzZV9saXN0W2ldLCBzaGExX3RvX2hleChiYXNlX2xpc3RbaV0pKSkpCisJCQkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIpLAorCQkJCQlzaGExX3RvX2hleChiYXNlX2xpc3RbaV0pKTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChiYXNlLCAmY2EpOworCQl9CisJfQorCisJaW5kZXhfZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrLCAxKTsKKwljbGVhbiA9IG1lcmdlX3JlY3Vyc2l2ZShvLCBoZWFkX2NvbW1pdCwgbmV4dF9jb21taXQsIGNhLAorCQkJcmVzdWx0KTsKKwlpZiAoYWN0aXZlX2NhY2hlX2NoYW5nZWQgJiYKKwkJCSh3cml0ZV9jYWNoZShpbmRleF9mZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJCQkgY29tbWl0X2xvY2tlZF9pbmRleChsb2NrKSkpCisJCXJldHVybiBlcnJvcihfKCJVbmFibGUgdG8gd3JpdGUgaW5kZXguIikpOworCisJcmV0dXJuIGNsZWFuID8gMCA6IDE7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfcmVjdXJzaXZlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbyA9IGNiOworCWlmICghc3RyY21wKHZhciwgIm1lcmdlLnZlcmJvc2l0eSIpKSB7CisJCW8tPnZlcmJvc2l0eSA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5yZW5hbWVsaW1pdCIpKSB7CisJCW8tPmRpZmZfcmVuYW1lX2xpbWl0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJtZXJnZS5yZW5hbWVsaW1pdCIpKSB7CisJCW8tPm1lcmdlX3JlbmFtZV9saW1pdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF94bWVyZ2VfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKwordm9pZCBpbml0X21lcmdlX29wdGlvbnMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8pCit7CisJbWVtc2V0KG8sIDAsIHNpemVvZihzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucykpOworCW8tPnZlcmJvc2l0eSA9IDI7CisJby0+YnVmZmVyX291dHB1dCA9IDE7CisJby0+ZGlmZl9yZW5hbWVfbGltaXQgPSAtMTsKKwlvLT5tZXJnZV9yZW5hbWVfbGltaXQgPSAtMTsKKwlvLT5yZW5vcm1hbGl6ZSA9IDA7CisJZ2l0X2NvbmZpZyhtZXJnZV9yZWN1cnNpdmVfY29uZmlnLCBvKTsKKwlpZiAoZ2V0ZW52KCJHSVRfTUVSR0VfVkVSQk9TSVRZIikpCisJCW8tPnZlcmJvc2l0eSA9CisJCQlzdHJ0b2woZ2V0ZW52KCJHSVRfTUVSR0VfVkVSQk9TSVRZIiksIE5VTEwsIDEwKTsKKwlpZiAoby0+dmVyYm9zaXR5ID49IDUpCisJCW8tPmJ1ZmZlcl9vdXRwdXQgPSAwOworCXN0cmJ1Zl9pbml0KCZvLT5vYnVmLCAwKTsKKwltZW1zZXQoJm8tPmN1cnJlbnRfZmlsZV9zZXQsIDAsIHNpemVvZihzdHJ1Y3Qgc3RyaW5nX2xpc3QpKTsKKwlvLT5jdXJyZW50X2ZpbGVfc2V0LnN0cmR1cF9zdHJpbmdzID0gMTsKKwltZW1zZXQoJm8tPmN1cnJlbnRfZGlyZWN0b3J5X3NldCwgMCwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCW8tPmN1cnJlbnRfZGlyZWN0b3J5X3NldC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJbWVtc2V0KCZvLT5kZl9jb25mbGljdF9maWxlX3NldCwgMCwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCW8tPmRmX2NvbmZsaWN0X2ZpbGVfc2V0LnN0cmR1cF9zdHJpbmdzID0gMTsKK30KKworaW50IHBhcnNlX21lcmdlX29wdChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqcykKK3sKKwlpZiAoIXMgfHwgISpzKQorCQlyZXR1cm4gLTE7CisJaWYgKCFzdHJjbXAocywgIm91cnMiKSkKKwkJby0+cmVjdXJzaXZlX3ZhcmlhbnQgPSBNRVJHRV9SRUNVUlNJVkVfT1VSUzsKKwllbHNlIGlmICghc3RyY21wKHMsICJ0aGVpcnMiKSkKKwkJby0+cmVjdXJzaXZlX3ZhcmlhbnQgPSBNRVJHRV9SRUNVUlNJVkVfVEhFSVJTOworCWVsc2UgaWYgKCFzdHJjbXAocywgInN1YnRyZWUiKSkKKwkJby0+c3VidHJlZV9zaGlmdCA9ICIiOworCWVsc2UgaWYgKCFwcmVmaXhjbXAocywgInN1YnRyZWU9IikpCisJCW8tPnN1YnRyZWVfc2hpZnQgPSBzICsgc3RybGVuKCJzdWJ0cmVlPSIpOworCWVsc2UgaWYgKCFzdHJjbXAocywgInBhdGllbmNlIikpCisJCW8tPnhkbF9vcHRzID0gRElGRl9XSVRIX0FMRyhvLCBQQVRJRU5DRV9ESUZGKTsKKwllbHNlIGlmICghc3RyY21wKHMsICJoaXN0b2dyYW0iKSkKKwkJby0+eGRsX29wdHMgPSBESUZGX1dJVEhfQUxHKG8sIEhJU1RPR1JBTV9ESUZGKTsKKwllbHNlIGlmICghc3RyY21wKHMsICJpZ25vcmUtc3BhY2UtY2hhbmdlIikpCisJCW8tPnhkbF9vcHRzIHw9IFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0U7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAiaWdub3JlLWFsbC1zcGFjZSIpKQorCQlvLT54ZGxfb3B0cyB8PSBYREZfSUdOT1JFX1dISVRFU1BBQ0U7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAiaWdub3JlLXNwYWNlLWF0LWVvbCIpKQorCQlvLT54ZGxfb3B0cyB8PSBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MOworCWVsc2UgaWYgKCFzdHJjbXAocywgInJlbm9ybWFsaXplIikpCisJCW8tPnJlbm9ybWFsaXplID0gMTsKKwllbHNlIGlmICghc3RyY21wKHMsICJuby1yZW5vcm1hbGl6ZSIpKQorCQlvLT5yZW5vcm1hbGl6ZSA9IDA7CisJZWxzZSBpZiAoIXByZWZpeGNtcChzLCAicmVuYW1lLXRocmVzaG9sZD0iKSkgeworCQljb25zdCBjaGFyICpzY29yZSA9IHMgKyBzdHJsZW4oInJlbmFtZS10aHJlc2hvbGQ9Iik7CisJCWlmICgoby0+cmVuYW1lX3Njb3JlID0gcGFyc2VfcmVuYW1lX3Njb3JlKCZzY29yZSkpID09IC0xIHx8ICpzY29yZSAhPSAwKQorCQkJcmV0dXJuIC0xOworCX0KKwllbHNlCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21lcmdlLXJlY3Vyc2l2ZS5oIGIvbWVyZ2UtcmVjdXJzaXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmMzQzNQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlLXJlY3Vyc2l2ZS5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZm5kZWYgTUVSR0VfUkVDVVJTSVZFX0gKKyNkZWZpbmUgTUVSR0VfUkVDVVJTSVZFX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCBtZXJnZV9vcHRpb25zIHsKKwljb25zdCBjaGFyICphbmNlc3RvcjsKKwljb25zdCBjaGFyICpicmFuY2gxOworCWNvbnN0IGNoYXIgKmJyYW5jaDI7CisJZW51bSB7CisJCU1FUkdFX1JFQ1VSU0lWRV9OT1JNQUwgPSAwLAorCQlNRVJHRV9SRUNVUlNJVkVfT1VSUywKKwkJTUVSR0VfUkVDVVJTSVZFX1RIRUlSUworCX0gcmVjdXJzaXZlX3ZhcmlhbnQ7CisJY29uc3QgY2hhciAqc3VidHJlZV9zaGlmdDsKKwl1bnNpZ25lZCBidWZmZXJfb3V0cHV0IDogMTsKKwl1bnNpZ25lZCByZW5vcm1hbGl6ZSA6IDE7CisJbG9uZyB4ZGxfb3B0czsKKwlpbnQgdmVyYm9zaXR5OworCWludCBkaWZmX3JlbmFtZV9saW1pdDsKKwlpbnQgbWVyZ2VfcmVuYW1lX2xpbWl0OworCWludCByZW5hbWVfc2NvcmU7CisJaW50IG5lZWRlZF9yZW5hbWVfbGltaXQ7CisJaW50IHNob3dfcmVuYW1lX3Byb2dyZXNzOworCWludCBjYWxsX2RlcHRoOworCXN0cnVjdCBzdHJidWYgb2J1ZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY3VycmVudF9maWxlX3NldDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY3VycmVudF9kaXJlY3Rvcnlfc2V0OworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZl9jb25mbGljdF9maWxlX3NldDsKK307CisKKy8qIG1lcmdlX3RyZWVzKCkgYnV0IHdpdGggcmVjdXJzaXZlIGFuY2VzdG9yIGNvbnNvbGlkYXRpb24gKi8KK2ludCBtZXJnZV9yZWN1cnNpdmUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCSAgICBzdHJ1Y3QgY29tbWl0ICpoMSwKKwkJICAgIHN0cnVjdCBjb21taXQgKmgyLAorCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICphbmNlc3RvcnMsCisJCSAgICBzdHJ1Y3QgY29tbWl0ICoqcmVzdWx0KTsKKworLyogcmVuYW1lLWRldGVjdGluZyB0aHJlZS13YXkgbWVyZ2UsIG5vIHJlY3Vyc2lvbiAqLworaW50IG1lcmdlX3RyZWVzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQlzdHJ1Y3QgdHJlZSAqaGVhZCwKKwkJc3RydWN0IHRyZWUgKm1lcmdlLAorCQlzdHJ1Y3QgdHJlZSAqY29tbW9uLAorCQlzdHJ1Y3QgdHJlZSAqKnJlc3VsdCk7CisKKy8qCisgKiAiZ2l0LW1lcmdlLXJlY3Vyc2l2ZSIgY2FuIGJlIGZlZCB0cmVlczsgd3JhcCB0aGVtIGludG8KKyAqIHZpcnR1YWwgY29tbWl0cyBhbmQgY2FsbCBtZXJnZV9yZWN1cnNpdmUoKSBwcm9wZXIuCisgKi8KK2ludCBtZXJnZV9yZWN1cnNpdmVfZ2VuZXJpYyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1lcmdlLAorCQkJICAgIGludCBudW1fY2EsCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmNhLAorCQkJICAgIHN0cnVjdCBjb21taXQgKipyZXN1bHQpOworCit2b2lkIGluaXRfbWVyZ2Vfb3B0aW9ucyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbyk7CitzdHJ1Y3QgdHJlZSAqd3JpdGVfdHJlZV9mcm9tX21lbW9yeShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbyk7CisKK2ludCBwYXJzZV9tZXJnZV9vcHQoc3RydWN0IG1lcmdlX29wdGlvbnMgKm91dCwgY29uc3QgY2hhciAqcyk7CisKKy8qIGJ1aWx0aW4vbWVyZ2UuYyAqLworaW50IHRyeV9tZXJnZV9jb21tYW5kKGNvbnN0IGNoYXIgKnN0cmF0ZWd5LCBzaXplX3QgeG9wdHNfbnIsCisJCWNvbnN0IGNoYXIgKip4b3B0cywgc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb24sCisJCWNvbnN0IGNoYXIgKmhlYWRfYXJnLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL21lcmdlc29ydC5jIGIvbWVyZ2Vzb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmZGYyZQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlc29ydC5jCkBAIC0wLDAgKzEsNzMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm1lcmdlc29ydC5oIgorCitzdHJ1Y3QgbWVyZ2Vzb3J0X3N1Ymxpc3QgeworCXZvaWQgKnB0cjsKKwl1bnNpZ25lZCBsb25nIGxlbjsKK307CisKK3N0YXRpYyB2b2lkICpnZXRfbnRoX25leHQodm9pZCAqbGlzdCwgdW5zaWduZWQgbG9uZyBuLAorCQkJICB2b2lkICooKmdldF9uZXh0X2ZuKShjb25zdCB2b2lkICopKQoreworCXdoaWxlIChuLS0gJiYgbGlzdCkKKwkJbGlzdCA9IGdldF9uZXh0X2ZuKGxpc3QpOworCXJldHVybiBsaXN0OworfQorCitzdGF0aWMgdm9pZCAqcG9wX2l0ZW0oc3RydWN0IG1lcmdlc29ydF9zdWJsaXN0ICpsLAorCQkgICAgICB2b2lkICooKmdldF9uZXh0X2ZuKShjb25zdCB2b2lkICopKQoreworCXZvaWQgKnAgPSBsLT5wdHI7CisJbC0+cHRyID0gZ2V0X25leHRfZm4obC0+cHRyKTsKKwlsLT5sZW4gPSBsLT5wdHIgPyAobC0+bGVuIC0gMSkgOiAwOworCXJldHVybiBwOworfQorCit2b2lkICpsbGlzdF9tZXJnZXNvcnQodm9pZCAqbGlzdCwKKwkJICAgICAgdm9pZCAqKCpnZXRfbmV4dF9mbikoY29uc3Qgdm9pZCAqKSwKKwkJICAgICAgdm9pZCAoKnNldF9uZXh0X2ZuKSh2b2lkICosIHZvaWQgKiksCisJCSAgICAgIGludCAoKmNvbXBhcmVfZm4pKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKK3sKKwl1bnNpZ25lZCBsb25nIGw7CisKKwlpZiAoIWxpc3QpCisJCXJldHVybiBOVUxMOworCWZvciAobCA9IDE7IDsgbCAqPSAyKSB7CisJCXZvaWQgKmN1cnI7CisJCXN0cnVjdCBtZXJnZXNvcnRfc3VibGlzdCBwLCBxOworCisJCXAucHRyID0gbGlzdDsKKwkJcS5wdHIgPSBnZXRfbnRoX25leHQocC5wdHIsIGwsIGdldF9uZXh0X2ZuKTsKKwkJaWYgKCFxLnB0cikKKwkJCWJyZWFrOworCQlwLmxlbiA9IHEubGVuID0gbDsKKworCQlpZiAoY29tcGFyZV9mbihwLnB0ciwgcS5wdHIpID4gMCkKKwkJCWxpc3QgPSBjdXJyID0gcG9wX2l0ZW0oJnEsIGdldF9uZXh0X2ZuKTsKKwkJZWxzZQorCQkJbGlzdCA9IGN1cnIgPSBwb3BfaXRlbSgmcCwgZ2V0X25leHRfZm4pOworCisJCXdoaWxlIChwLnB0cikgeworCQkJd2hpbGUgKHAubGVuIHx8IHEubGVuKSB7CisJCQkJdm9pZCAqcHJldiA9IGN1cnI7CisKKwkJCQlpZiAoIXAubGVuKQorCQkJCQljdXJyID0gcG9wX2l0ZW0oJnEsIGdldF9uZXh0X2ZuKTsKKwkJCQllbHNlIGlmICghcS5sZW4pCisJCQkJCWN1cnIgPSBwb3BfaXRlbSgmcCwgZ2V0X25leHRfZm4pOworCQkJCWVsc2UgaWYgKGNvbXBhcmVfZm4ocC5wdHIsIHEucHRyKSA+IDApCisJCQkJCWN1cnIgPSBwb3BfaXRlbSgmcSwgZ2V0X25leHRfZm4pOworCQkJCWVsc2UKKwkJCQkJY3VyciA9IHBvcF9pdGVtKCZwLCBnZXRfbmV4dF9mbik7CisJCQkJc2V0X25leHRfZm4ocHJldiwgY3Vycik7CisJCQl9CisJCQlwLnB0ciA9IHEucHRyOworCQkJcC5sZW4gPSBsOworCQkJcS5wdHIgPSBnZXRfbnRoX25leHQocC5wdHIsIGwsIGdldF9uZXh0X2ZuKTsKKwkJCXEubGVuID0gcS5wdHIgPyBsIDogMDsKKworCQl9CisJCXNldF9uZXh0X2ZuKGN1cnIsIE5VTEwpOworCX0KKwlyZXR1cm4gbGlzdDsKK30KZGlmZiAtLWdpdCBhL21lcmdlc29ydC5oIGIvbWVyZ2Vzb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0Y2ZmMQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlc29ydC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgTUVSR0VTT1JUX0gKKyNkZWZpbmUgTUVSR0VTT1JUX0gKKworLyoKKyAqIFNvcnQgbGlua2VkIGxpc3QgaW4gcGxhY2UuCisgKiAtIGdldF9uZXh0X2ZuKCkgcmV0dXJucyB0aGUgbmV4dCBlbGVtZW50IGdpdmVuIGFuIGVsZW1lbnQgb2YgYSBsaW5rZWQgbGlzdC4KKyAqIC0gc2V0X25leHRfZm4oKSB0YWtlcyB0d28gZWxlbWVudHMgQSBhbmQgQiwgYW5kIG1ha2VzIEIgdGhlICJuZXh0IiBlbGVtZW50CisgKiAgIG9mIEEgb24gdGhlIGxpc3QuCisgKiAtIGNvbXBhcmVfZm4oKSB0YWtlcyB0d28gZWxlbWVudHMgQSBhbmQgQiwgYW5kIHJldHVybnMgbmVnYXRpdmUsIDAsIHBvc2l0aXZlCisgKiAgIGFzIHRoZSBzYW1lIHNpZ24gYXMgInN1YnRyYWN0aW5nIiBCIGZyb20gQS4KKyAqLwordm9pZCAqbGxpc3RfbWVyZ2Vzb3J0KHZvaWQgKmxpc3QsCisJCSAgICAgIHZvaWQgKigqZ2V0X25leHRfZm4pKGNvbnN0IHZvaWQgKiksCisJCSAgICAgIHZvaWQgKCpzZXRfbmV4dF9mbikodm9pZCAqLCB2b2lkICopLAorCQkgICAgICBpbnQgKCpjb21wYXJlX2ZuKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvYXJheGlzIGIvbWVyZ2V0b29scy9hcmF4aXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmOTdjNQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvYXJheGlzCkBAIC0wLDAgKzEsMjAgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgLXdhaXQgLTIgIiRMT0NBTCIgIiRSRU1PVEUiID4vZGV2L251bGwgMj4mMQorfQorCittZXJnZV9jbWQgKCkgeworCXRvdWNoICIkQkFDS1VQIgorCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtd2FpdCAtbWVyZ2UgLTMgLWExIFwKKwkJCSIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiICIkTUVSR0VEIiA+L2Rldi9udWxsIDI+JjEKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtd2FpdCAtMiBcCisJCQkiJExPQ0FMIiAiJFJFTU9URSIgIiRNRVJHRUQiID4vZGV2L251bGwgMj4mMQorCWZpCisJY2hlY2tfdW5jaGFuZ2VkCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGgoKSB7CisJZWNobyBjb21wYXJlCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2JjMyBiL21lcmdldG9vbHMvYmMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MzE5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2JjMwpAQCAtMCwwICsxLDI1IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCXRvdWNoICIkQkFDS1VQIgorCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgIiRCQVNFIiBcCisJCQktbWVyZ2VvdXRwdXQ9IiRNRVJHRUQiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCS1tZXJnZW91dHB1dD0iJE1FUkdFRCIKKwlmaQorCWNoZWNrX3VuY2hhbmdlZAorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWlmIHR5cGUgYmNvbXAgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorCXRoZW4KKwkJZWNobyBiY29tcAorCWVsc2UKKwkJZWNobyBiY29tcGFyZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2NvZGVjb21wYXJlIGIvbWVyZ2V0b29scy9jb2RlY29tcGFyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjA0ODZiCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9jb2RlY29tcGFyZQpAQCAtMCwwICsxLDI1IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCXRvdWNoICIkQkFDS1VQIgorCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtTUY9IiRMT0NBTCIgLVRGPSIkUkVNT1RFIiAtQkY9IiRCQVNFIiBcCisJCQktUkY9IiRNRVJHRUQiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLU1GPSIkTE9DQUwiIC1URj0iJFJFTU9URSIgXAorCQkJLVJGPSIkTUVSR0VEIgorCWZpCisJY2hlY2tfdW5jaGFuZ2VkCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGgoKSB7CisJaWYgbWVyZ2VfbW9kZQorCXRoZW4KKwkJZWNobyBDb2RlTWVyZ2UKKwllbHNlCisJCWVjaG8gQ29kZUNvbXBhcmUKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9kZWZhdWx0cyBiL21lcmdldG9vbHMvZGVmYXVsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlNjNlYwotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZGVmYXVsdHMKQEAgLTAsMCArMSwyMiBAQAorIyBSZWRlZmluZWQgYnkgYnVpbHRpbiB0b29scworY2FuX21lcmdlICgpIHsKKwlyZXR1cm4gMAorfQorCitjYW5fZGlmZiAoKSB7CisJcmV0dXJuIDAKK30KKworZGlmZl9jbWQgKCkgeworCXN0YXR1cz0xCisJcmV0dXJuICRzdGF0dXMKK30KKworbWVyZ2VfY21kICgpIHsKKwlzdGF0dXM9MQorCXJldHVybiAkc3RhdHVzCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGggKCkgeworCWVjaG8gIiQxIgorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9kZWx0YXdhbGtlciBiL21lcmdldG9vbHMvZGVsdGF3YWxrZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjNzFiNgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZGVsdGF3YWxrZXIKQEAgLTAsMCArMSwyMSBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgPi9kZXYvbnVsbCAyPiYxCit9CisKK21lcmdlX2NtZCAoKSB7CisJIyBBZGRpbmcgJChwd2QpLyBpbiBmcm9udCBvZiAkTUVSR0VEIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LgorCSMgSG93ZXZlciB3aXRob3V0IGl0LCBEZWx0YVdhbGtlciAoYXQgbGVhc3QgdjEuOS44IG9uIFdpbmRvd3MpCisJIyBjcmFzaGVzIHdpdGggYSBKUkUgZXhjZXB0aW9uLiAgVGhlIERlbHRhV2Fsa2VyIHVzZXIgbWFudWFsLAorCSMgc2hvd3MgJChwd2QpLyB3aGVuZXZlciB0aGUgJy1tZXJnZWQnIG9wdGlvbnMgaXMgZ2l2ZW4uCisJIyBBZGRpbmcgaXQgaGVyZSBzZWVtcyB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbS4KKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIgLW1lcmdlZD0iJChwd2QpLyRNRVJHRUQiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIC1tZXJnZWQ9IiQocHdkKS8kTUVSR0VEIgorCWZpID4vZGV2L251bGwgMj4mMQorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWVjaG8gRGVsdGFXYWxrZXIKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZGlmZnVzZSBiL21lcmdldG9vbHMvZGlmZnVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmUwODQzCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9kaWZmdXNlCkBAIC0wLDAgKzEsMTcgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIHwgY2F0Cit9CisKK21lcmdlX2NtZCAoKSB7CisJdG91Y2ggIiRCQUNLVVAiCisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCSIkTE9DQUwiICIkTUVSR0VEIiAiJFJFTU9URSIgXAorCQkJIiRCQVNFIiB8IGNhdAorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCSIkTE9DQUwiICIkTUVSR0VEIiAiJFJFTU9URSIgfCBjYXQKKwlmaQorCWNoZWNrX3VuY2hhbmdlZAorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9lY21lcmdlIGIvbWVyZ2V0b29scy9lY21lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYzJlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2VjbWVyZ2UKQEAgLTAsMCArMSwxNiBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLWRlZmF1bHQgLS1tb2RlPWRpZmYyICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCXRvdWNoICIkQkFDS1VQIgorCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJEJBU0UiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQktLWRlZmF1bHQgLS1tb2RlPW1lcmdlMyAtLXRvPSIkTUVSR0VEIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQktLWRlZmF1bHQgLS1tb2RlPW1lcmdlMiAtLXRvPSIkTUVSR0VEIgorCWZpCisJY2hlY2tfdW5jaGFuZ2VkCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2VtZXJnZSBiL21lcmdldG9vbHMvZW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NmQ5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2VtZXJnZQpAQCAtMCwwICsxLDIzIEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIC1mIGVtZXJnZS1maWxlcy1jb21tYW5kICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCQktZiBlbWVyZ2UtZmlsZXMtd2l0aC1hbmNlc3Rvci1jb21tYW5kIFwKKwkJCSIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiIFwKKwkJCSIkKGJhc2VuYW1lICIkTUVSR0VEIikiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQkJLWYgZW1lcmdlLWZpbGVzLWNvbW1hbmQgXAorCQkJIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCSIkKGJhc2VuYW1lICIkTUVSR0VEIikiCisJZmkKKwlzdGF0dXM9JD8KK30KKwordHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCgpIHsKKwllY2hvIGVtYWNzCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2tkaWZmMyBiL21lcmdldG9vbHMva2RpZmYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZmVhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2tkaWZmMwpAQCAtMCwwICsxLDI0IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIC0tYXV0byBcCisJCS0tTDEgIiRNRVJHRUQgKEEpIiAtLUwyICIkTUVSR0VEIChCKSIgXAorCQkiJExPQ0FMIiAiJFJFTU9URSIgPi9kZXYvbnVsbCAyPiYxCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIC0tYXV0byBcCisJCQktLUwxICIkTUVSR0VEIChCYXNlKSIgXAorCQkJLS1MMiAiJE1FUkdFRCAoTG9jYWwpIiBcCisJCQktLUwzICIkTUVSR0VEIChSZW1vdGUpIiBcCisJCQktbyAiJE1FUkdFRCIgIiRCQVNFIiAiJExPQ0FMIiAiJFJFTU9URSIgXAorCQk+L2Rldi9udWxsIDI+JjEKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLWF1dG8gXAorCQkJLS1MMSAiJE1FUkdFRCAoTG9jYWwpIiBcCisJCQktLUwyICIkTUVSR0VEIChSZW1vdGUpIiBcCisJCQktbyAiJE1FUkdFRCIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJPi9kZXYvbnVsbCAyPiYxCisJZmkKKwlzdGF0dXM9JD8KK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMva29tcGFyZSBiL21lcmdldG9vbHMva29tcGFyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzM2ODZjCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9rb21wYXJlCkBAIC0wLDAgKzEsNyBAQAorY2FuX21lcmdlICgpIHsKKwlyZXR1cm4gMQorfQorCitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIgorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9tZWxkIGIvbWVyZ2V0b29scy9tZWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNjcyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL21lbGQKQEAgLTAsMCArMSwzMiBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiB0ZXN0IC16ICIke21lbGRfaGFzX291dHB1dF9vcHRpb246K3NldH0iCisJdGhlbgorCQljaGVja19tZWxkX2Zvcl9vdXRwdXRfdmVyc2lvbgorCWZpCisJdG91Y2ggIiRCQUNLVVAiCisJaWYgdGVzdCAiJG1lbGRfaGFzX291dHB1dF9vcHRpb24iID0gdHJ1ZQorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIC0tb3V0cHV0ICIkTUVSR0VEIiBcCisJCQkiJExPQ0FMIiAiJEJBU0UiICIkUkVNT1RFIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkTUVSR0VEIiAiJFJFTU9URSIKKwlmaQorCWNoZWNrX3VuY2hhbmdlZAorfQorCisjIENoZWNrIHdoZXRoZXIgJ21lbGQgLS1vdXRwdXQgPGZpbGU+JyBpcyBzdXBwb3J0ZWQKK2NoZWNrX21lbGRfZm9yX291dHB1dF92ZXJzaW9uICgpIHsKKwltZWxkX3BhdGg9IiQoZ2l0IGNvbmZpZyBtZXJnZXRvb2wubWVsZC5wYXRoKSIKKwltZWxkX3BhdGg9IiR7bWVsZF9wYXRoOi1tZWxkfSIKKworCWlmICIkbWVsZF9wYXRoIiAtLWhlbHAgMj4mMSB8IGdyZXAgLWUgLS1vdXRwdXQgPi9kZXYvbnVsbAorCXRoZW4KKwkJbWVsZF9oYXNfb3V0cHV0X29wdGlvbj10cnVlCisJZWxzZQorCQltZWxkX2hhc19vdXRwdXRfb3B0aW9uPWZhbHNlCisJZmkKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvb3BlbmRpZmYgYi9tZXJnZXRvb2xzL29wZW5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NDJiMmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL29wZW5kaWZmCkBAIC0wLDAgKzEsMTYgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIHwgY2F0Cit9CisKK21lcmdlX2NtZCAoKSB7CisJdG91Y2ggIiRCQUNLVVAiCisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQktYW5jZXN0b3IgIiRCQVNFIiAtbWVyZ2UgIiRNRVJHRUQiIHwgY2F0CisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCS1tZXJnZSAiJE1FUkdFRCIgfCBjYXQKKwlmaQorCWNoZWNrX3VuY2hhbmdlZAorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9wNG1lcmdlIGIvbWVyZ2V0b29scy9wNG1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNDVjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL3A0bWVyZ2UKQEAgLTAsMCArMSwxMCBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwl0b3VjaCAiJEJBQ0tVUCIKKwkkYmFzZV9wcmVzZW50IHx8ID4iJEJBU0UiCisJIiRtZXJnZV90b29sX3BhdGgiICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiICIkTUVSR0VEIgorCWNoZWNrX3VuY2hhbmdlZAorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy90a2RpZmYgYi9tZXJnZXRvb2xzL3RrZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MThjNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy90a2RpZmYKQEAgLTAsMCArMSwxMiBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWEgIiRCQVNFIiAtbyAiJE1FUkdFRCIgIiRMT0NBTCIgIiRSRU1PVEUiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLW8gIiRNRVJHRUQiICIkTE9DQUwiICIkUkVNT1RFIgorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3RvcnRvaXNlbWVyZ2UgYi9tZXJnZXRvb2xzL3RvcnRvaXNlbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3ZGI0OQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvdG9ydG9pc2VtZXJnZQpAQCAtMCwwICsxLDE3IEBACitjYW5fZGlmZiAoKSB7CisJcmV0dXJuIDEKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQl0b3VjaCAiJEJBQ0tVUCIKKwkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCS1iYXNlOiIkQkFTRSIgLW1pbmU6IiRMT0NBTCIgXAorCQkJLXRoZWlyczoiJFJFTU9URSIgLW1lcmdlZDoiJE1FUkdFRCIKKwkJY2hlY2tfdW5jaGFuZ2VkCisJZWxzZQorCQllY2hvICJUb3J0b2lzZU1lcmdlIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSBiYXNlIiAxPiYyCisJCXJldHVybiAxCisJZmkKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvdmltIGIvbWVyZ2V0b29scy92aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5NTk0YQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvdmltCkBAIC0wLDAgKzEsNDQgQEAKK2RpZmZfY21kICgpIHsKKwljYXNlICIkMSIgaW4KKwlndmltZGlmZnx2aW1kaWZmKQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLVIgLWYgLWQgXAorCQkJLWMgJ3dpbmNtZCBsJyAtYyAnY2QgJEdJVF9QUkVGSVgnICIkTE9DQUwiICIkUkVNT1RFIgorCQk7OworCWd2aW1kaWZmMnx2aW1kaWZmMikKKwkJIiRtZXJnZV90b29sX3BhdGgiIC1SIC1mIC1kIFwKKwkJCS1jICd3aW5jbWQgbCcgLWMgJ2NkICRHSVRfUFJFRklYJyAiJExPQ0FMIiAiJFJFTU9URSIKKwkJOzsKKwllc2FjCit9CisKK21lcmdlX2NtZCAoKSB7CisJdG91Y2ggIiRCQUNLVVAiCisJY2FzZSAiJDEiIGluCisJZ3ZpbWRpZmZ8dmltZGlmZikKKwkJaWYgJGJhc2VfcHJlc2VudAorCQl0aGVuCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgLWQgLWMgJ3dpbmNtZCBKJyBcCisJCQkJIiRNRVJHRUQiICIkTE9DQUwiICIkQkFTRSIgIiRSRU1PVEUiCisJCWVsc2UKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtZiAtZCAtYyAnd2luY21kIGwnIFwKKwkJCQkiJExPQ0FMIiAiJE1FUkdFRCIgIiRSRU1PVEUiCisJCWZpCisJCTs7CisJZ3ZpbWRpZmYyfHZpbWRpZmYyKQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgLWQgLWMgJ3dpbmNtZCBsJyBcCisJCQkiJExPQ0FMIiAiJE1FUkdFRCIgIiRSRU1PVEUiCisJCTs7CisJZXNhYworCWNoZWNrX3VuY2hhbmdlZAorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWNhc2UgIiQxIiBpbgorCWd2aW1kaWZmfGd2aW1kaWZmMikKKwkJZWNobyBndmltCisJCTs7CisJdmltZGlmZnx2aW1kaWZmMikKKwkJZWNobyB2aW0KKwkJOzsKKwllc2FjCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3h4ZGlmZiBiL21lcmdldG9vbHMveHhkaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YjQ0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL3h4ZGlmZgpAQCAtMCwwICsxLDI1IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJLVIgJ0FjY2VsLlNlYXJjaDogIkN0cmwrRiInIFwKKwkJLVIgJ0FjY2VsLlNlYXJjaEZvcndhcmQ6ICJDdHJsLUciJyBcCisJCSIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCXRvdWNoICIkQkFDS1VQIgorCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtWCAtLXNob3ctbWVyZ2VkLXBhbmUgXAorCQkJLVIgJ0FjY2VsLlNhdmVBc01lcmdlZDogIkN0cmwtUyInIFwKKwkJCS1SICdBY2NlbC5TZWFyY2g6ICJDdHJsK0YiJyBcCisJCQktUiAnQWNjZWwuU2VhcmNoRm9yd2FyZDogIkN0cmwtRyInIFwKKwkJCS0tbWVyZ2VkLWZpbGUgIiRNRVJHRUQiICIkTE9DQUwiICIkQkFTRSIgIiRSRU1PVEUiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLVggJGV4dHJhIFwKKwkJCS1SICdBY2NlbC5TYXZlQXNNZXJnZWQ6ICJDdHJsLVMiJyBcCisJCQktUiAnQWNjZWwuU2VhcmNoOiAiQ3RybCtGIicgXAorCQkJLVIgJ0FjY2VsLlNlYXJjaEZvcndhcmQ6ICJDdHJsLUciJyBcCisJCQktLW1lcmdlZC1maWxlICIkTUVSR0VEIiAiJExPQ0FMIiAiJFJFTU9URSIKKwlmaQorCWNoZWNrX3VuY2hhbmdlZAorfQpkaWZmIC0tZ2l0IGEvbmFtZS1oYXNoLmMgYi9uYW1lLWhhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGQyNWMyCi0tLSAvZGV2L251bGwKKysrIGIvbmFtZS1oYXNoLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBuYW1lLWhhc2guYworICoKKyAqIEhhc2hpbmcgbmFtZXMgaW4gdGhlIGluZGV4IHN0YXRlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IExpbnVzIFRvcnZhbGRzCisgKi8KKyNkZWZpbmUgTk9fVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKworLyoKKyAqIFRoaXMgcmVtb3ZlcyBiaXQgNSBpZiBiaXQgNiBpcyBzZXQuCisgKgorICogVGhhdCB3aWxsIG1ha2UgVVMtQVNDSUkgY2hhcmFjdGVycyBoYXNoIHRvIHRoZWlyIHVwcGVyLWNhc2UKKyAqIGVxdWl2YWxlbnQuIFdlIGNvdWxkIGVhc2lseSBkbyB0aGlzIG9uZSB3aG9sZSB3b3JkIGF0IGEgdGltZSwKKyAqIGJ1dCB0aGF0J3MgZm9yIGZ1dHVyZSB3b3JyaWVzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgaWNhc2VfaGFzaCh1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGMgJiB+KChjICYgMHg0MCkgPj4gMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQoreworCXVuc2lnbmVkIGludCBoYXNoID0gMHgxMjM7CisKKwlkbyB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICpuYW1lKys7CisJCWMgPSBpY2FzZV9oYXNoKGMpOworCQloYXNoID0gaGFzaCoxMDEgKyBjOworCX0gd2hpbGUgKC0tbmFtZWxlbik7CisJcmV0dXJuIGhhc2g7Cit9CisKK3N0YXRpYyB2b2lkIGhhc2hfaW5kZXhfZW50cnlfZGlyZWN0b3JpZXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJLyoKKwkgKiBUaHJvdyBlYWNoIGRpcmVjdG9yeSBjb21wb25lbnQgaW4gdGhlIGhhc2ggZm9yIHF1aWNrIGxvb2t1cAorCSAqIGR1cmluZyBhIGdpdCBzdGF0dXMuIERpcmVjdG9yeSBjb21wb25lbnRzIGFyZSBzdG9yZWQgd2l0aCB0aGVpcgorCSAqIGNsb3Npbmcgc2xhc2guICBEZXNwaXRlIHN1Ym1vZHVsZXMgYmVpbmcgYSBkaXJlY3RvcnksIHRoZXkgbmV2ZXIKKwkgKiByZWFjaCB0aGlzIHBvaW50LCBiZWNhdXNlIHRoZXkgYXJlIHN0b3JlZCB3aXRob3V0IGEgY2xvc2luZyBzbGFzaAorCSAqIGluIHRoZSBjYWNoZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgY2FjaGVfZW50cnkgc3RvcmVkIHdpdGggdGhlIGRpcmVjdG9yeSBkb2VzIG5vdAorCSAqIHJlcHJlc2VudCB0aGUgZGlyZWN0b3J5IGl0c2VsZi4gIEl0IGlzIGEgcG9pbnRlciB0byBhbiBleGlzdGluZworCSAqIGZpbGVuYW1lLCBhbmQgaXRzIG9ubHkgcHVycG9zZSBpcyB0byByZXByZXNlbnQgZXhpc3RlbmNlIG9mIHRoZQorCSAqIGRpcmVjdG9yeSBpbiB0aGUgY2FjaGUuICBJdCBpcyB2ZXJ5IHBvc3NpYmxlIG11bHRpcGxlIGRpcmVjdG9yeQorCSAqIGhhc2ggZW50cmllcyBtYXkgcG9pbnQgdG8gdGhlIHNhbWUgY2FjaGVfZW50cnkuCisJICovCisJdW5zaWduZWQgaW50IGhhc2g7CisJdm9pZCAqKnBvczsKKworCWNvbnN0IGNoYXIgKnB0ciA9IGNlLT5uYW1lOworCXdoaWxlICgqcHRyKSB7CisJCXdoaWxlICgqcHRyICYmICpwdHIgIT0gJy8nKQorCQkJKytwdHI7CisJCWlmICgqcHRyID09ICcvJykgeworCQkJKytwdHI7CisJCQloYXNoID0gaGFzaF9uYW1lKGNlLT5uYW1lLCBwdHIgLSBjZS0+bmFtZSk7CisJCQlwb3MgPSBpbnNlcnRfaGFzaChoYXNoLCBjZSwgJmlzdGF0ZS0+bmFtZV9oYXNoKTsKKwkJCWlmIChwb3MpIHsKKwkJCQljZS0+ZGlyX25leHQgPSAqcG9zOworCQkJCSpwb3MgPSBjZTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFzaF9pbmRleF9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwl2b2lkICoqcG9zOworCXVuc2lnbmVkIGludCBoYXNoOworCisJaWYgKGNlLT5jZV9mbGFncyAmIENFX0hBU0hFRCkKKwkJcmV0dXJuOworCWNlLT5jZV9mbGFncyB8PSBDRV9IQVNIRUQ7CisJY2UtPm5leHQgPSBjZS0+ZGlyX25leHQgPSBOVUxMOworCWhhc2ggPSBoYXNoX25hbWUoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKTsKKwlwb3MgPSBpbnNlcnRfaGFzaChoYXNoLCBjZSwgJmlzdGF0ZS0+bmFtZV9oYXNoKTsKKwlpZiAocG9zKSB7CisJCWNlLT5uZXh0ID0gKnBvczsKKwkJKnBvcyA9IGNlOworCX0KKworCWlmIChpZ25vcmVfY2FzZSkKKwkJaGFzaF9pbmRleF9lbnRyeV9kaXJlY3Rvcmllcyhpc3RhdGUsIGNlKTsKK30KKworc3RhdGljIHZvaWQgbGF6eV9pbml0X25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpbnQgbnI7CisKKwlpZiAoaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlmb3IgKG5yID0gMDsgbnIgPCBpc3RhdGUtPmNhY2hlX25yOyBucisrKQorCQloYXNoX2luZGV4X2VudHJ5KGlzdGF0ZSwgaXN0YXRlLT5jYWNoZVtucl0pOworCWlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkID0gMTsKK30KKwordm9pZCBhZGRfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWNlLT5jZV9mbGFncyAmPSB+Q0VfVU5IQVNIRUQ7CisJaWYgKGlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkKQorCQloYXNoX2luZGV4X2VudHJ5KGlzdGF0ZSwgY2UpOworfQorCitzdGF0aWMgaW50IHNsb3dfc2FtZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yKQoreworCWlmIChsZW4xICE9IGxlbjIpCisJCXJldHVybiAwOworCisJd2hpbGUgKGxlbjEpIHsKKwkJdW5zaWduZWQgY2hhciBjMSA9ICpuYW1lMSsrOworCQl1bnNpZ25lZCBjaGFyIGMyID0gKm5hbWUyKys7CisJCWxlbjEtLTsKKwkJaWYgKGMxICE9IGMyKSB7CisJCQljMSA9IHRvdXBwZXIoYzEpOworCQkJYzIgPSB0b3VwcGVyKGMyKTsKKwkJCWlmIChjMSAhPSBjMikKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzYW1lX25hbWUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBpY2FzZSkKK3sKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisKKwkvKgorCSAqIEFsd2F5cyBkbyBleGFjdCBjb21wYXJlLCBldmVuIGlmIHdlIHdhbnQgYSBjYXNlLWlnbm9yaW5nIGNvbXBhcmlzb247CisJICogd2UgZG8gdGhlIHF1aWNrIGV4YWN0IG9uZSBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIHRoZSBjb21tb24gY2FzZS4KKwkgKi8KKwlpZiAobGVuID09IG5hbWVsZW4gJiYgIWNhY2hlX25hbWVfY29tcGFyZShuYW1lLCBuYW1lbGVuLCBjZS0+bmFtZSwgbGVuKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIWljYXNlKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGVudHJ5IHdlJ3JlIGNvbXBhcmluZyBpcyBhIGZpbGVuYW1lIChubyB0cmFpbGluZyBzbGFzaCksIHRoZW4gY29tcGFyZQorCSAqIHRoZSBsZW5ndGhzIGV4YWN0bHkuCisJICovCisJaWYgKG5hbWVbbmFtZWxlbiAtIDFdICE9ICcvJykKKwkJcmV0dXJuIHNsb3dfc2FtZV9uYW1lKG5hbWUsIG5hbWVsZW4sIGNlLT5uYW1lLCBsZW4pOworCisJLyoKKwkgKiBGb3IgYSBkaXJlY3RvcnksIHdlIHBvaW50IHRvIGFuIGFyYml0cmFyeSBjYWNoZV9lbnRyeSBmaWxlbmFtZS4gIEp1c3QKKwkgKiBtYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBwb3J0aW9uIG1hdGNoZXMuCisJICovCisJcmV0dXJuIHNsb3dfc2FtZV9uYW1lKG5hbWUsIG5hbWVsZW4sIGNlLT5uYW1lLCBuYW1lbGVuIDwgbGVuID8gbmFtZWxlbiA6IGxlbik7Cit9CisKK3N0cnVjdCBjYWNoZV9lbnRyeSAqaW5kZXhfbmFtZV9leGlzdHMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgaWNhc2UpCit7CisJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX25hbWUobmFtZSwgbmFtZWxlbik7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWxhenlfaW5pdF9uYW1lX2hhc2goaXN0YXRlKTsKKwljZSA9IGxvb2t1cF9oYXNoKGhhc2gsICZpc3RhdGUtPm5hbWVfaGFzaCk7CisKKwl3aGlsZSAoY2UpIHsKKwkJaWYgKCEoY2UtPmNlX2ZsYWdzICYgQ0VfVU5IQVNIRUQpKSB7CisJCQlpZiAoc2FtZV9uYW1lKGNlLCBuYW1lLCBuYW1lbGVuLCBpY2FzZSkpCisJCQkJcmV0dXJuIGNlOworCQl9CisJCWlmIChpY2FzZSAmJiBuYW1lW25hbWVsZW4gLSAxXSA9PSAnLycpCisJCQljZSA9IGNlLT5kaXJfbmV4dDsKKwkJZWxzZQorCQkJY2UgPSBjZS0+bmV4dDsKKwl9CisKKwkvKgorCSAqIE1pZ2h0IGJlIGEgc3VibW9kdWxlLiAgRGVzcGl0ZSBzdWJtb2R1bGVzIGJlaW5nIGRpcmVjdG9yaWVzLAorCSAqIHRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgbmFtZSBoYXNoIHdpdGhvdXQgYSBjbG9zaW5nIHNsYXNoLgorCSAqIFdoZW4gaWdub3JlX2Nhc2UgaXMgMSwgZGlyZWN0b3JpZXMgYXJlIHN0b3JlZCBpbiB0aGUgbmFtZSBoYXNoCisJICogd2l0aCB0aGVpciBjbG9zaW5nIHNsYXNoLgorCSAqCisJICogVGhlIHNpZGUgZWZmZWN0IG9mIHRoaXMgc3RvcmFnZSB0ZWNobmlxdWUgaXMgd2UgaGF2ZSBuZWVkIHRvCisJICogcmVtb3ZlIHRoZSBzbGFzaCBmcm9tIG5hbWUgYW5kIHBlcmZvcm0gdGhlIGxvb2t1cCBhZ2FpbiB3aXRob3V0CisJICogdGhlIHNsYXNoLiAgSWYgYSBtYXRjaCBpcyBtYWRlLCBTX0lTR0lUTElOSyhjZS0+bW9kZSkgd2lsbCBiZQorCSAqIHRydWUuCisJICovCisJaWYgKGljYXNlICYmIG5hbWVbbmFtZWxlbiAtIDFdID09ICcvJykgeworCQljZSA9IGluZGV4X25hbWVfZXhpc3RzKGlzdGF0ZSwgbmFtZSwgbmFtZWxlbiAtIDEsIGljYXNlKTsKKwkJaWYgKGNlICYmIFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCXJldHVybiBjZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9ub3Rlcy1jYWNoZS5jIGIvbm90ZXMtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWJlNGEwCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMtY2FjaGUuYwpAQCAtMCwwICsxLDk2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJub3Rlcy1jYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGludCBub3Rlc19jYWNoZV9tYXRjaF92YWxpZGl0eShjb25zdCBjaGFyICpyZWYsIGNvbnN0IGNoYXIgKnZhbGlkaXR5KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBwcmV0dHlfY3R4OworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKworCWlmIChyZWFkX3JlZihyZWYsIHNoYTEpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiAwOworCisJbWVtc2V0KCZwcmV0dHlfY3R4LCAwLCBzaXplb2YocHJldHR5X2N0eCkpOworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlcyIsICZtc2csICZwcmV0dHlfY3R4KTsKKwlzdHJidWZfdHJpbSgmbXNnKTsKKworCXJldCA9ICFzdHJjbXAobXNnLmJ1ZiwgdmFsaWRpdHkpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBub3Rlc19jYWNoZV9pbml0KHN0cnVjdCBub3Rlc19jYWNoZSAqYywgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICBjb25zdCBjaGFyICp2YWxpZGl0eSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlZiA9IFNUUkJVRl9JTklUOworCWludCBmbGFncyA9IDA7CisKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJYy0+dmFsaWRpdHkgPSB4c3RyZHVwKHZhbGlkaXR5KTsKKworCXN0cmJ1Zl9hZGRmKCZyZWYsICJyZWZzL25vdGVzLyVzIiwgbmFtZSk7CisJaWYgKCFub3Rlc19jYWNoZV9tYXRjaF92YWxpZGl0eShyZWYuYnVmLCB2YWxpZGl0eSkpCisJCWZsYWdzID0gTk9URVNfSU5JVF9FTVBUWTsKKwlpbml0X25vdGVzKCZjLT50cmVlLCByZWYuYnVmLCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSwgZmxhZ3MpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZWYpOworfQorCitpbnQgbm90ZXNfY2FjaGVfd3JpdGUoc3RydWN0IG5vdGVzX2NhY2hlICpjKQoreworCXVuc2lnbmVkIGNoYXIgdHJlZV9zaGExWzIwXTsKKwl1bnNpZ25lZCBjaGFyIGNvbW1pdF9zaGExWzIwXTsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCisJaWYgKCFjIHx8ICFjLT50cmVlLmluaXRpYWxpemVkIHx8ICFjLT50cmVlLnJlZiB8fCAhKmMtPnRyZWUucmVmKQorCQlyZXR1cm4gLTE7CisJaWYgKCFjLT50cmVlLmRpcnR5KQorCQlyZXR1cm4gMDsKKworCWlmICh3cml0ZV9ub3Rlc190cmVlKCZjLT50cmVlLCB0cmVlX3NoYTEpKQorCQlyZXR1cm4gLTE7CisJc3RyYnVmX2F0dGFjaCgmbXNnLCBjLT52YWxpZGl0eSwKKwkJICAgICAgc3RybGVuKGMtPnZhbGlkaXR5KSwgc3RybGVuKGMtPnZhbGlkaXR5KSArIDEpOworCWlmIChjb21taXRfdHJlZSgmbXNnLCB0cmVlX3NoYTEsIE5VTEwsIGNvbW1pdF9zaGExLCBOVUxMLCBOVUxMKSA8IDApCisJCXJldHVybiAtMTsKKwlpZiAodXBkYXRlX3JlZigidXBkYXRlIG5vdGVzIGNhY2hlIiwgYy0+dHJlZS5yZWYsIGNvbW1pdF9zaGExLCBOVUxMLAorCQkgICAgICAgMCwgUVVJRVRfT05fRVJSKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitjaGFyICpub3Rlc19jYWNoZV9nZXQoc3RydWN0IG5vdGVzX2NhY2hlICpjLCB1bnNpZ25lZCBjaGFyIGtleV9zaGExWzIwXSwKKwkJICAgICAgc2l6ZV90ICpvdXRzaXplKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbHVlX3NoYTE7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKnZhbHVlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCXZhbHVlX3NoYTEgPSBnZXRfbm90ZSgmYy0+dHJlZSwga2V5X3NoYTEpOworCWlmICghdmFsdWVfc2hhMSkKKwkJcmV0dXJuIE5VTEw7CisJdmFsdWUgPSByZWFkX3NoYTFfZmlsZSh2YWx1ZV9zaGExLCAmdHlwZSwgJnNpemUpOworCisJKm91dHNpemUgPSBzaXplOworCXJldHVybiB2YWx1ZTsKK30KKworaW50IG5vdGVzX2NhY2hlX3B1dChzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMsIHVuc2lnbmVkIGNoYXIga2V5X3NoYTFbMjBdLAorCQkgICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgY2hhciB2YWx1ZV9zaGExWzIwXTsKKworCWlmICh3cml0ZV9zaGExX2ZpbGUoZGF0YSwgc2l6ZSwgImJsb2IiLCB2YWx1ZV9zaGExKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gYWRkX25vdGUoJmMtPnRyZWUsIGtleV9zaGExLCB2YWx1ZV9zaGExLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL25vdGVzLWNhY2hlLmggYi9ub3Rlcy1jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NmY4OGYKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy1jYWNoZS5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgTk9URVNfQ0FDSEVfSAorI2RlZmluZSBOT1RFU19DQUNIRV9ICisKKyNpbmNsdWRlICJub3Rlcy5oIgorCitzdHJ1Y3Qgbm90ZXNfY2FjaGUgeworCXN0cnVjdCBub3Rlc190cmVlIHRyZWU7CisJY2hhciAqdmFsaWRpdHk7Cit9OworCit2b2lkIG5vdGVzX2NhY2hlX2luaXQoc3RydWN0IG5vdGVzX2NhY2hlICpjLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgIGNvbnN0IGNoYXIgKnZhbGlkaXR5KTsKK2ludCBub3Rlc19jYWNoZV93cml0ZShzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMpOworCitjaGFyICpub3Rlc19jYWNoZV9nZXQoc3RydWN0IG5vdGVzX2NhY2hlICpjLCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCBzaXplX3QKKwkJICAgICAgKm91dHNpemUpOworaW50IG5vdGVzX2NhY2hlX3B1dChzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMsIHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sCisJCSAgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKyNlbmRpZiAvKiBOT1RFU19DQUNIRV9IICovCmRpZmYgLS1naXQgYS9ub3Rlcy1tZXJnZS5jIGIvbm90ZXMtbWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjY3YmQzCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMtbWVyZ2UuYwpAQCAtMCwwICsxLDc3NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJub3Rlcy1tZXJnZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciB7CisJdW5zaWduZWQgY2hhciBvYmpbMjBdLCBiYXNlWzIwXSwgbG9jYWxbMjBdLCByZW1vdGVbMjBdOworfTsKKwordm9pZCBpbml0X25vdGVzX21lcmdlX29wdGlvbnMoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8pCit7CisJbWVtc2V0KG8sIDAsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucykpOworCXN0cmJ1Zl9pbml0KCYoby0+Y29tbWl0X21zZyksIDApOworCW8tPnZlcmJvc2l0eSA9IE5PVEVTX01FUkdFX1ZFUkJPU0lUWV9ERUZBVUxUOworfQorCitzdGF0aWMgaW50IHBhdGhfdG9fc2hhMShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNoYXIgaGV4X3NoYTFbNDBdOworCWludCBpID0gMDsKKwl3aGlsZSAoKnBhdGggJiYgaSA8IDQwKSB7CisJCWlmICgqcGF0aCAhPSAnLycpCisJCQloZXhfc2hhMVtpKytdID0gKnBhdGg7CisJCXBhdGgrKzsKKwl9CisJaWYgKCpwYXRoIHx8IGkgIT0gNDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gZ2V0X3NoYTFfaGV4KGhleF9zaGExLCBzaGExKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfbm90ZXNfZmlsZXBhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3dpdGNoIChwLT5zdGF0dXMpIHsKKwljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQlhc3NlcnQocC0+b25lLT5tb2RlID09IHAtPnR3by0+bW9kZSk7CisJCWFzc2VydCghaXNfbnVsbF9zaGExKHAtPm9uZS0+c2hhMSkpOworCQlhc3NlcnQoIWlzX251bGxfc2hhMShwLT50d28tPnNoYTEpKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NUQVRVU19BRERFRDoKKwkJYXNzZXJ0KGlzX251bGxfc2hhMShwLT5vbmUtPnNoYTEpKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQlhc3NlcnQoaXNfbnVsbF9zaGExKHAtPnR3by0+c2hhMSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCWFzc2VydCghc3RyY21wKHAtPm9uZS0+cGF0aCwgcC0+dHdvLT5wYXRoKSk7CisJcmV0dXJuIHBhdGhfdG9fc2hhMShwLT5vbmUtPnBhdGgsIHNoYTEpOworfQorCitzdGF0aWMgc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmZpbmRfbm90ZXNfbWVyZ2VfcGFpcl9wb3MoCisJCXN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpsaXN0LCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpvYmosCisJCWludCBpbnNlcnRfbmV3LCBpbnQgKm9jY3VwaWVkKQoreworCS8qCisJICogQm90aCBkaWZmX3RyZWVfcmVtb3RlKCkgYW5kIGRpZmZfdHJlZV9sb2NhbCgpIHRlbmQgdG8gcHJvY2VzcworCSAqIG1lcmdlX3BhaXJzIGluIGFzY2VuZGluZyBvcmRlci4gVGhlcmVmb3JlLCBjYWNoZSBsYXN0IHJldHVybmVkCisJICogaW5kZXgsIGFuZCBzZWFyY2ggc2VxdWVudGlhbGx5IGZyb20gdGhlcmUgdW50aWwgdGhlIGFwcHJvcHJpYXRlCisJICogcG9zaXRpb24gaXMgZm91bmQuCisJICoKKwkgKiBTaW5jZSBpbnNlcnRzIG9ubHkgaGFwcGVuIGZyb20gZGlmZl90cmVlX3JlbW90ZSgpICh3aGljaCBtYWlubHkKKwkgKiBfYXBwZW5kc18pLCB3ZSBkb24ndCBjYXJlIHRoYXQgaW5zZXJ0aW5nIGludG8gdGhlIG1pZGRsZSBvZiB0aGUKKwkgKiBsaXN0IGlzIGV4cGVuc2l2ZSAodXNpbmcgbWVtbW92ZSgpKS4KKwkgKi8KKwlzdGF0aWMgaW50IGxhc3RfaW5kZXg7CisJaW50IGkgPSBsYXN0X2luZGV4IDwgbGVuID8gbGFzdF9pbmRleCA6IGxlbiAtIDE7CisJaW50IHByZXZfY21wID0gMCwgY21wID0gLTE7CisJd2hpbGUgKGkgPj0gMCAmJiBpIDwgbGVuKSB7CisJCWNtcCA9IGhhc2hjbXAob2JqLCBsaXN0W2ldLm9iaik7CisJCWlmICghY21wKSAvKiBvYmogYmVsb25ncyBAIGkgKi8KKwkJCWJyZWFrOworCQllbHNlIGlmIChjbXAgPCAwICYmIHByZXZfY21wIDw9IDApIC8qIG9iaiBiZWxvbmdzIDwgaSAqLworCQkJaS0tOworCQllbHNlIGlmIChjbXAgPCAwKSAvKiBvYmogYmVsb25ncyBiZXR3ZWVuIGktMSBhbmQgaSAqLworCQkJYnJlYWs7CisJCWVsc2UgaWYgKGNtcCA+IDAgJiYgcHJldl9jbXAgPj0gMCkgLyogb2JqIGJlbG9uZ3MgPiBpICovCisJCQlpKys7CisJCWVsc2UgLyogaWYgKGNtcCA+IDApICovIHsgLyogb2JqIGJlbG9uZ3MgYmV0d2VlbiBpIGFuZCBpKzEgKi8KKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJCXByZXZfY21wID0gY21wOworCX0KKwlpZiAoaSA8IDApCisJCWkgPSAwOworCS8qIG9iaiBiZWxvbmdzIGF0LCBvciBpbW1lZGlhdGVseSBwcmVjZWRpbmcsIGluZGV4IGkgKDAgPD0gaSA8PSBsZW4pICovCisKKwlpZiAoIWNtcCkKKwkJKm9jY3VwaWVkID0gMTsKKwllbHNlIHsKKwkJKm9jY3VwaWVkID0gMDsKKwkJaWYgKGluc2VydF9uZXcgJiYgaSA8IGxlbikgeworCQkJbWVtbW92ZShsaXN0ICsgaSArIDEsIGxpc3QgKyBpLAorCQkJCShsZW4gLSBpKSAqIHNpemVvZihzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpcikpOworCQkJbWVtc2V0KGxpc3QgKyBpLCAwLCBzaXplb2Yoc3RydWN0IG5vdGVzX21lcmdlX3BhaXIpKTsKKwkJfQorCX0KKwlsYXN0X2luZGV4ID0gaTsKKwlyZXR1cm4gbGlzdCArIGk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHVuaW5pdGlhbGl6ZWRbMjBdID0KKwkiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIgXAorCSJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIjsKKworc3RhdGljIHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpkaWZmX3RyZWVfcmVtb3RlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UsCisJCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqcmVtb3RlLAorCQkJCQkJIGludCAqbnVtX2NoYW5nZXMpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBvcHQ7CisJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmNoYW5nZXM7CisJaW50IGksIGxlbiA9IDA7CisKKwl0cmFjZV9wcmludGYoIlx0ZGlmZl90cmVlX3JlbW90ZShiYXNlID0gJS43cywgcmVtb3RlID0gJS43cylcbiIsCisJICAgICAgIHNoYTFfdG9faGV4KGJhc2UpLCBzaGExX3RvX2hleChyZW1vdGUpKTsKKworCWRpZmZfc2V0dXAoJm9wdCk7CisJRElGRl9PUFRfU0VUKCZvcHQsIFJFQ1VSU0lWRSk7CisJb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJZGlmZl9zZXR1cF9kb25lKCZvcHQpOworCWRpZmZfdHJlZV9zaGExKGJhc2UsIHJlbW90ZSwgIiIsICZvcHQpOworCWRpZmZjb3JlX3N0ZCgmb3B0KTsKKworCWNoYW5nZXMgPSB4Y2FsbG9jKGRpZmZfcXVldWVkX2RpZmYubnIsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpcikpOworCisJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV07CisJCXN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICptcDsKKwkJaW50IG9jY3VwaWVkOworCQl1bnNpZ25lZCBjaGFyIG9ialsyMF07CisKKwkJaWYgKHZlcmlmeV9ub3Rlc19maWxlcGFpcihwLCBvYmopKSB7CisJCQl0cmFjZV9wcmludGYoIlx0XHRDYW5ub3QgbWVyZ2UgZW50cnkgJyVzJyAoJWMpOiAiCisJCQkgICAgICAgIiUuN3MgLT4gJS43cy4gU2tpcHBpbmchXG4iLCBwLT5vbmUtPnBhdGgsCisJCQkgICAgICAgcC0+c3RhdHVzLCBzaGExX3RvX2hleChwLT5vbmUtPnNoYTEpLAorCQkJICAgICAgIHNoYTFfdG9faGV4KHAtPnR3by0+c2hhMSkpOworCQkJY29udGludWU7CisJCX0KKwkJbXAgPSBmaW5kX25vdGVzX21lcmdlX3BhaXJfcG9zKGNoYW5nZXMsIGxlbiwgb2JqLCAxLCAmb2NjdXBpZWQpOworCQlpZiAob2NjdXBpZWQpIHsKKwkJCS8qIFdlJ3ZlIGZvdW5kIGFuIGFkZGl0aW9uL2RlbGV0aW9uIHBhaXIgKi8KKwkJCWFzc2VydCghaGFzaGNtcChtcC0+b2JqLCBvYmopKTsKKwkJCWlmIChpc19udWxsX3NoYTEocC0+b25lLT5zaGExKSkgeyAvKiBhZGRpdGlvbiAqLworCQkJCWFzc2VydChpc19udWxsX3NoYTEobXAtPnJlbW90ZSkpOworCQkJCWhhc2hjcHkobXAtPnJlbW90ZSwgcC0+dHdvLT5zaGExKTsKKwkJCX0gZWxzZSBpZiAoaXNfbnVsbF9zaGExKHAtPnR3by0+c2hhMSkpIHsgLyogZGVsZXRpb24gKi8KKwkJCQlhc3NlcnQoaXNfbnVsbF9zaGExKG1wLT5iYXNlKSk7CisJCQkJaGFzaGNweShtcC0+YmFzZSwgcC0+b25lLT5zaGExKTsKKwkJCX0gZWxzZQorCQkJCWFzc2VydCghIkludmFsaWQgZXhpc3RpbmcgY2hhbmdlIHJlY29yZGVkIik7CisJCX0gZWxzZSB7CisJCQloYXNoY3B5KG1wLT5vYmosIG9iaik7CisJCQloYXNoY3B5KG1wLT5iYXNlLCBwLT5vbmUtPnNoYTEpOworCQkJaGFzaGNweShtcC0+bG9jYWwsIHVuaW5pdGlhbGl6ZWQpOworCQkJaGFzaGNweShtcC0+cmVtb3RlLCBwLT50d28tPnNoYTEpOworCQkJbGVuKys7CisJCX0KKwkJdHJhY2VfcHJpbnRmKCJcdFx0U3RvcmVkIHJlbW90ZSBjaGFuZ2UgZm9yICVzOiAlLjdzIC0+ICUuN3NcbiIsCisJCSAgICAgICBzaGExX3RvX2hleChtcC0+b2JqKSwgc2hhMV90b19oZXgobXAtPmJhc2UpLAorCQkgICAgICAgc2hhMV90b19oZXgobXAtPnJlbW90ZSkpOworCX0KKwlkaWZmX2ZsdXNoKCZvcHQpOworCWRpZmZfdHJlZV9yZWxlYXNlX3BhdGhzKCZvcHQpOworCisJKm51bV9jaGFuZ2VzID0gbGVuOworCXJldHVybiBjaGFuZ2VzOworfQorCitzdGF0aWMgdm9pZCBkaWZmX3RyZWVfbG9jYWwoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkgICAgc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmNoYW5nZXMsIGludCBsZW4sCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZSwKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsb2NhbCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdDsKKwlpbnQgaTsKKworCXRyYWNlX3ByaW50ZigiXHRkaWZmX3RyZWVfbG9jYWwobGVuID0gJWksIGJhc2UgPSAlLjdzLCBsb2NhbCA9ICUuN3MpXG4iLAorCSAgICAgICBsZW4sIHNoYTFfdG9faGV4KGJhc2UpLCBzaGExX3RvX2hleChsb2NhbCkpOworCisJZGlmZl9zZXR1cCgmb3B0KTsKKwlESUZGX09QVF9TRVQoJm9wdCwgUkVDVVJTSVZFKTsKKwlvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX3NldHVwX2RvbmUoJm9wdCk7CisJZGlmZl90cmVlX3NoYTEoYmFzZSwgbG9jYWwsICIiLCAmb3B0KTsKKwlkaWZmY29yZV9zdGQoJm9wdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKm1wOworCQlpbnQgbWF0Y2g7CisJCXVuc2lnbmVkIGNoYXIgb2JqWzIwXTsKKworCQlpZiAodmVyaWZ5X25vdGVzX2ZpbGVwYWlyKHAsIG9iaikpIHsKKwkJCXRyYWNlX3ByaW50ZigiXHRcdENhbm5vdCBtZXJnZSBlbnRyeSAnJXMnICglYyk6ICIKKwkJCSAgICAgICAiJS43cyAtPiAlLjdzLiBTa2lwcGluZyFcbiIsIHAtPm9uZS0+cGF0aCwKKwkJCSAgICAgICBwLT5zdGF0dXMsIHNoYTFfdG9faGV4KHAtPm9uZS0+c2hhMSksCisJCQkgICAgICAgc2hhMV90b19oZXgocC0+dHdvLT5zaGExKSk7CisJCQljb250aW51ZTsKKwkJfQorCQltcCA9IGZpbmRfbm90ZXNfbWVyZ2VfcGFpcl9wb3MoY2hhbmdlcywgbGVuLCBvYmosIDAsICZtYXRjaCk7CisJCWlmICghbWF0Y2gpIHsKKwkJCXRyYWNlX3ByaW50ZigiXHRcdElnbm9yaW5nIGxvY2FsLW9ubHkgY2hhbmdlIGZvciAlczogIgorCQkJICAgICAgICIlLjdzIC0+ICUuN3NcbiIsIHNoYTFfdG9faGV4KG9iaiksCisJCQkgICAgICAgc2hhMV90b19oZXgocC0+b25lLT5zaGExKSwKKwkJCSAgICAgICBzaGExX3RvX2hleChwLT50d28tPnNoYTEpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXNzZXJ0KCFoYXNoY21wKG1wLT5vYmosIG9iaikpOworCQlpZiAoaXNfbnVsbF9zaGExKHAtPnR3by0+c2hhMSkpIHsgLyogZGVsZXRpb24gKi8KKwkJCS8qCisJCQkgKiBFaXRoZXIgdGhpcyBpcyBhIHRydWUgZGVsZXRpb24gKDEpLCBvciBpdCBpcyBwYXJ0CisJCQkgKiBvZiBhbiBBL0QgcGFpciAoMiksIG9yIEQvQSBwYWlyICgzKToKKwkJCSAqCisJCQkgKiAoMSkgbXAtPmxvY2FsIGlzIHVuaW5pdGlhbGl6ZWQ7IHNldCBpdCB0byBudWxsX3NoYTEKKwkJCSAqICgyKSBtcC0+bG9jYWwgaXMgbm90IHVuaW5pdGlhbGl6ZWQ7IGRvbid0IHRvdWNoIGl0CisJCQkgKiAoMykgbXAtPmxvY2FsIGlzIHVuaW5pdGlhbGl6ZWQ7IHNldCBpdCB0byBudWxsX3NoYTEKKwkJCSAqICAgICAod2lsbCBiZSBvdmVyd3JpdHRlbiBieSBmb2xsb3dpbmcgYWRkaXRpb24pCisJCQkgKi8KKwkJCWlmICghaGFzaGNtcChtcC0+bG9jYWwsIHVuaW5pdGlhbGl6ZWQpKQorCQkJCWhhc2hjbHIobXAtPmxvY2FsKTsKKwkJfSBlbHNlIGlmIChpc19udWxsX3NoYTEocC0+b25lLT5zaGExKSkgeyAvKiBhZGRpdGlvbiAqLworCQkJLyoKKwkJCSAqIEVpdGhlciB0aGlzIGlzIGEgdHJ1ZSBhZGRpdGlvbiAoMSksIG9yIGl0IGlzIHBhcnQKKwkJCSAqIG9mIGFuIEEvRCBwYWlyICgyKSwgb3IgRC9BIHBhaXIgKDMpOgorCQkJICoKKwkJCSAqICgxKSBtcC0+bG9jYWwgaXMgdW5pbml0aWFsaXplZDsgc2V0IHRvIHAtPnR3by0+c2hhMQorCQkJICogKDIpIG1wLT5sb2NhbCBpcyB1bmluaXRpYWxpemVkOyBzZXQgdG8gcC0+dHdvLT5zaGExCisJCQkgKiAoMykgbXAtPmxvY2FsIGlzIG51bGxfc2hhMTsgICAgIHNldCB0byBwLT50d28tPnNoYTEKKwkJCSAqLworCQkJYXNzZXJ0KGlzX251bGxfc2hhMShtcC0+bG9jYWwpIHx8CisJCQkgICAgICAgIWhhc2hjbXAobXAtPmxvY2FsLCB1bmluaXRpYWxpemVkKSk7CisJCQloYXNoY3B5KG1wLT5sb2NhbCwgcC0+dHdvLT5zaGExKTsKKwkJfSBlbHNlIHsgLyogbW9kaWZpY2F0aW9uICovCisJCQkvKgorCQkJICogVGhpcyBpcyBhIHRydWUgbW9kaWZpY2F0aW9uLiBwLT5vbmUtPnNoYTEgc2hhbGwKKwkJCSAqIG1hdGNoIG1wLT5iYXNlLCBhbmQgbXAtPmxvY2FsIHNoYWxsIGJlIHVuaW5pdGlhbGl6ZWQuCisJCQkgKiBTZXQgbXAtPmxvY2FsIHRvIHAtPnR3by0+c2hhMS4KKwkJCSAqLworCQkJYXNzZXJ0KCFoYXNoY21wKHAtPm9uZS0+c2hhMSwgbXAtPmJhc2UpKTsKKwkJCWFzc2VydCghaGFzaGNtcChtcC0+bG9jYWwsIHVuaW5pdGlhbGl6ZWQpKTsKKwkJCWhhc2hjcHkobXAtPmxvY2FsLCBwLT50d28tPnNoYTEpOworCQl9CisJCXRyYWNlX3ByaW50ZigiXHRcdFN0b3JlZCBsb2NhbCBjaGFuZ2UgZm9yICVzOiAlLjdzIC0+ICUuN3NcbiIsCisJCSAgICAgICBzaGExX3RvX2hleChtcC0+b2JqKSwgc2hhMV90b19oZXgobXAtPmJhc2UpLAorCQkgICAgICAgc2hhMV90b19oZXgobXAtPmxvY2FsKSk7CisJfQorCWRpZmZfZmx1c2goJm9wdCk7CisJZGlmZl90cmVlX3JlbGVhc2VfcGF0aHMoJm9wdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX25vdGVzX21lcmdlX3dvcmt0cmVlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKQoreworCWlmICghby0+aGFzX3dvcmt0cmVlKSB7CisJCS8qCisJCSAqIE11c3QgZXN0YWJsaXNoIE5PVEVTX01FUkdFX1dPUktUUkVFLgorCQkgKiBBYm9ydCBpZiBOT1RFU19NRVJHRV9XT1JLVFJFRSBhbHJlYWR5IGV4aXN0cworCQkgKi8KKwkJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFKSkgJiYKKwkJICAgICFpc19lbXB0eV9kaXIoZ2l0X3BhdGgoTk9URVNfTUVSR0VfV09SS1RSRUUpKSkgeworCQkJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KQorCQkJCWRpZSgiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzICIKKwkJCQkgICAgIm5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuUGxlYXNlLCB1c2UgIgorCQkJCSAgICAiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3IgJ2dpdCBub3RlcyAiCisJCQkJICAgICJtZXJnZSAtLWFib3J0JyB0byBjb21taXQvYWJvcnQgdGhlICIKKwkJCQkgICAgInByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgIgorCQkJCSAgICAibm90ZXMgbWVyZ2UuIiwgZ2l0X3BhdGgoIk5PVEVTX01FUkdFXyoiKSk7CisJCQllbHNlCisJCQkJZGllKCJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgIgorCQkJCSAgICAiKCVzIGV4aXN0cykuIiwgZ2l0X3BhdGgoIk5PVEVTX01FUkdFXyoiKSk7CisJCX0KKworCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhnaXRfcGF0aCgKKwkJCQlOT1RFU19NRVJHRV9XT1JLVFJFRSAiLy50ZXN0IikpKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIsCisJCQkJICBnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpOworCQlvLT5oYXNfd29ya3RyZWUgPSAxOworCX0gZWxzZSBpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFKSkpCisJCS8qIE5PVEVTX01FUkdFX1dPUktUUkVFIHNob3VsZCBhbHJlYWR5IGJlIGVzdGFibGlzaGVkICovCisJCWRpZSgibWlzc2luZyAnJXMnLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuIiwKKwkJICAgIGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2J1Zl90b193b3JrdHJlZShjb25zdCB1bnNpZ25lZCBjaGFyICpvYmosCisJCQkJICBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgZmQ7CisJY2hhciAqcGF0aCA9IGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFICIvJXMiLCBzaGExX3RvX2hleChvYmopKTsKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhwYXRoKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIsIHBhdGgpOworCWlmIChmaWxlX2V4aXN0cyhwYXRoKSkKKwkJZGllKCJmb3VuZCBleGlzdGluZyBmaWxlIGF0ICclcyciLCBwYXRoKTsKKworCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fVFJVTkMgfCBPX0NSRUFULCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oImZhaWxlZCB0byBvcGVuICclcyciLCBwYXRoKTsKKworCXdoaWxlIChzaXplID4gMCkgeworCQlsb25nIHJldCA9IHdyaXRlX2luX2Z1bGwoZmQsIGJ1Ziwgc2l6ZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQkvKiBJZ25vcmUgZXBpcGUgKi8KKwkJCWlmIChlcnJubyA9PSBFUElQRSkKKwkJCQlicmVhazsKKwkJCWRpZV9lcnJubygibm90ZXMtbWVyZ2UiKTsKKwkJfSBlbHNlIGlmICghcmV0KSB7CisJCQlkaWUoIm5vdGVzLW1lcmdlOiBkaXNrIGZ1bGw/Iik7CisJCX0KKwkJc2l6ZSAtPSByZXQ7CisJCWJ1ZiArPSByZXQ7CisJfQorCisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9ub3RlX3RvX3dvcmt0cmVlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9iaiwKKwkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub3RlKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdm9pZCAqYnVmID0gcmVhZF9zaGExX2ZpbGUobm90ZSwgJnR5cGUsICZzaXplKTsKKworCWlmICghYnVmKQorCQlkaWUoImNhbm5vdCByZWFkIG5vdGUgJXMgZm9yIG9iamVjdCAlcyIsCisJCSAgICBzaGExX3RvX2hleChub3RlKSwgc2hhMV90b19oZXgob2JqKSk7CisJaWYgKHR5cGUgIT0gT0JKX0JMT0IpCisJCWRpZSgiYmxvYiBleHBlY3RlZCBpbiBub3RlICVzIGZvciBvYmplY3QgJXMiLAorCQkgICAgc2hhMV90b19oZXgobm90ZSksIHNoYTFfdG9faGV4KG9iaikpOworCXdyaXRlX2J1Zl90b193b3JrdHJlZShvYmosIGJ1Ziwgc2l6ZSk7CisJZnJlZShidWYpOworfQorCitzdGF0aWMgaW50IGxsX21lcmdlX2luX3dvcmt0cmVlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJCXN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpwKQoreworCW1tYnVmZmVyX3QgcmVzdWx0X2J1ZjsKKwltbWZpbGVfdCBiYXNlLCBsb2NhbCwgcmVtb3RlOworCWludCBzdGF0dXM7CisKKwlyZWFkX21tYmxvYigmYmFzZSwgcC0+YmFzZSk7CisJcmVhZF9tbWJsb2IoJmxvY2FsLCBwLT5sb2NhbCk7CisJcmVhZF9tbWJsb2IoJnJlbW90ZSwgcC0+cmVtb3RlKTsKKworCXN0YXR1cyA9IGxsX21lcmdlKCZyZXN1bHRfYnVmLCBzaGExX3RvX2hleChwLT5vYmopLCAmYmFzZSwgTlVMTCwKKwkJCSAgJmxvY2FsLCBvLT5sb2NhbF9yZWYsICZyZW1vdGUsIG8tPnJlbW90ZV9yZWYsIE5VTEwpOworCisJZnJlZShiYXNlLnB0cik7CisJZnJlZShsb2NhbC5wdHIpOworCWZyZWUocmVtb3RlLnB0cik7CisKKwlpZiAoKHN0YXR1cyA8IDApIHx8ICFyZXN1bHRfYnVmLnB0cikKKwkJZGllKCJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIpOworCisJd3JpdGVfYnVmX3RvX3dvcmt0cmVlKHAtPm9iaiwgcmVzdWx0X2J1Zi5wdHIsIHJlc3VsdF9idWYuc2l6ZSk7CisJZnJlZShyZXN1bHRfYnVmLnB0cik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IG1lcmdlX29uZV9jaGFuZ2VfbWFudWFsKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJCSAgIHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpwLAorCQkJCSAgIHN0cnVjdCBub3Rlc190cmVlICp0KQoreworCWNvbnN0IGNoYXIgKmxyZWYgPSBvLT5sb2NhbF9yZWYgPyBvLT5sb2NhbF9yZWYgOiAibG9jYWwgdmVyc2lvbiI7CisJY29uc3QgY2hhciAqcnJlZiA9IG8tPnJlbW90ZV9yZWYgPyBvLT5yZW1vdGVfcmVmIDogInJlbW90ZSB2ZXJzaW9uIjsKKworCXRyYWNlX3ByaW50ZigiXHRcdFx0bWVyZ2Vfb25lX2NoYW5nZV9tYW51YWwob2JqID0gJS43cywgYmFzZSA9ICUuN3MsICIKKwkgICAgICAgImxvY2FsID0gJS43cywgcmVtb3RlID0gJS43cylcbiIsCisJICAgICAgIHNoYTFfdG9faGV4KHAtPm9iaiksIHNoYTFfdG9faGV4KHAtPmJhc2UpLAorCSAgICAgICBzaGExX3RvX2hleChwLT5sb2NhbCksIHNoYTFfdG9faGV4KHAtPnJlbW90ZSkpOworCisJLyogYWRkICJDb25mbGljdHM6IiBzZWN0aW9uIHRvIGNvbW1pdCBtZXNzYWdlIGZpcnN0IHRpbWUgdGhyb3VnaCAqLworCWlmICghby0+aGFzX3dvcmt0cmVlKQorCQlzdHJidWZfYWRkc3RyKCYoby0+Y29tbWl0X21zZyksICJcblxuQ29uZmxpY3RzOlxuIik7CisKKwlzdHJidWZfYWRkZigmKG8tPmNvbW1pdF9tc2cpLCAiXHQlc1xuIiwgc2hhMV90b19oZXgocC0+b2JqKSk7CisKKwlpZiAoby0+dmVyYm9zaXR5ID49IDIpCisJCXByaW50ZigiQXV0by1tZXJnaW5nIG5vdGVzIGZvciAlc1xuIiwgc2hhMV90b19oZXgocC0+b2JqKSk7CisJY2hlY2tfbm90ZXNfbWVyZ2Vfd29ya3RyZWUobyk7CisJaWYgKGlzX251bGxfc2hhMShwLT5sb2NhbCkpIHsKKwkJLyogRC9GIGNvbmZsaWN0LCBjaGVja291dCBwLT5yZW1vdGUgKi8KKwkJYXNzZXJ0KCFpc19udWxsX3NoYTEocC0+cmVtb3RlKSk7CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMSkKKwkJCXByaW50ZigiQ09ORkxJQ1QgKGRlbGV0ZS9tb2RpZnkpOiBOb3RlcyBmb3Igb2JqZWN0ICVzICIKKwkJCQkiZGVsZXRlZCBpbiAlcyBhbmQgbW9kaWZpZWQgaW4gJXMuIFZlcnNpb24gZnJvbSAlcyAiCisJCQkJImxlZnQgaW4gdHJlZS5cbiIsCisJCQkJc2hhMV90b19oZXgocC0+b2JqKSwgbHJlZiwgcnJlZiwgcnJlZik7CisJCXdyaXRlX25vdGVfdG9fd29ya3RyZWUocC0+b2JqLCBwLT5yZW1vdGUpOworCX0gZWxzZSBpZiAoaXNfbnVsbF9zaGExKHAtPnJlbW90ZSkpIHsKKwkJLyogRC9GIGNvbmZsaWN0LCBjaGVja291dCBwLT5sb2NhbCAqLworCQlhc3NlcnQoIWlzX251bGxfc2hhMShwLT5sb2NhbCkpOworCQlpZiAoby0+dmVyYm9zaXR5ID49IDEpCisJCQlwcmludGYoIkNPTkZMSUNUIChkZWxldGUvbW9kaWZ5KTogTm90ZXMgZm9yIG9iamVjdCAlcyAiCisJCQkJImRlbGV0ZWQgaW4gJXMgYW5kIG1vZGlmaWVkIGluICVzLiBWZXJzaW9uIGZyb20gJXMgIgorCQkJCSJsZWZ0IGluIHRyZWUuXG4iLAorCQkJCXNoYTFfdG9faGV4KHAtPm9iaiksIHJyZWYsIGxyZWYsIGxyZWYpOworCQl3cml0ZV9ub3RlX3RvX3dvcmt0cmVlKHAtPm9iaiwgcC0+bG9jYWwpOworCX0gZWxzZSB7CisJCS8qICJyZWd1bGFyIiBjb25mbGljdCwgY2hlY2tvdXQgcmVzdWx0IG9mIGxsX21lcmdlKCkgKi8KKwkJY29uc3QgY2hhciAqcmVhc29uID0gImNvbnRlbnQiOworCQlpZiAoaXNfbnVsbF9zaGExKHAtPmJhc2UpKQorCQkJcmVhc29uID0gImFkZC9hZGQiOworCQlhc3NlcnQoIWlzX251bGxfc2hhMShwLT5sb2NhbCkpOworCQlhc3NlcnQoIWlzX251bGxfc2hhMShwLT5yZW1vdGUpKTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAxKQorCQkJcHJpbnRmKCJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiBub3RlcyBmb3IgIgorCQkJCSJvYmplY3QgJXNcbiIsIHJlYXNvbiwgc2hhMV90b19oZXgocC0+b2JqKSk7CisJCWxsX21lcmdlX2luX3dvcmt0cmVlKG8sIHApOworCX0KKworCXRyYWNlX3ByaW50ZigiXHRcdFx0cmVtb3ZpbmcgZnJvbSBwYXJ0aWFsIG1lcmdlIHJlc3VsdFxuIik7CisJcmVtb3ZlX25vdGUodCwgcC0+b2JqKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1lcmdlX29uZV9jaGFuZ2Uoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkgICAgc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKnAsIHN0cnVjdCBub3Rlc190cmVlICp0KQoreworCS8qCisJICogUmV0dXJuIDAgaWYgY2hhbmdlIGlzIHN1Y2Nlc3NmdWxseSByZXNvbHZlZCAoc3RvcmVkIGluIG5vdGVzX3RyZWUpLgorCSAqIFJldHVybiAxIGlzIGNoYW5nZSByZXN1bHRzIGluIGEgY29uZmxpY3QgKE5PVCBzdG9yZWQgaW4gbm90ZXNfdHJlZSwKKwkgKiBidXQgaW5zdGVhZCB3cml0dGVuIHRvIE5PVEVTX01FUkdFX1dPUktUUkVFIHdpdGggY29uZmxpY3QgbWFya2VycykuCisJICovCisJc3dpdGNoIChvLT5zdHJhdGVneSkgeworCWNhc2UgTk9URVNfTUVSR0VfUkVTT0xWRV9NQU5VQUw6CisJCXJldHVybiBtZXJnZV9vbmVfY2hhbmdlX21hbnVhbChvLCBwLCB0KTsKKwljYXNlIE5PVEVTX01FUkdFX1JFU09MVkVfT1VSUzoKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAyKQorCQkJcHJpbnRmKCJVc2luZyBsb2NhbCBub3RlcyBmb3IgJXNcbiIsCisJCQkJCQlzaGExX3RvX2hleChwLT5vYmopKTsKKwkJLyogbm90aGluZyB0byBkbyAqLworCQlyZXR1cm4gMDsKKwljYXNlIE5PVEVTX01FUkdFX1JFU09MVkVfVEhFSVJTOgorCQlpZiAoby0+dmVyYm9zaXR5ID49IDIpCisJCQlwcmludGYoIlVzaW5nIHJlbW90ZSBub3RlcyBmb3IgJXNcbiIsCisJCQkJCQlzaGExX3RvX2hleChwLT5vYmopKTsKKwkJaWYgKGFkZF9ub3RlKHQsIHAtPm9iaiwgcC0+cmVtb3RlLCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSkpCisJCQlkaWUoIkJVRzogY29tYmluZV9ub3Rlc19vdmVyd3JpdGUgZmFpbGVkIik7CisJCXJldHVybiAwOworCWNhc2UgTk9URVNfTUVSR0VfUkVTT0xWRV9VTklPTjoKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAyKQorCQkJcHJpbnRmKCJDb25jYXRlbmF0aW5nIGxvY2FsIGFuZCByZW1vdGUgbm90ZXMgZm9yICVzXG4iLAorCQkJCQkJCXNoYTFfdG9faGV4KHAtPm9iaikpOworCQlpZiAoYWRkX25vdGUodCwgcC0+b2JqLCBwLT5yZW1vdGUsIGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUpKQorCQkJZGllKCJmYWlsZWQgdG8gY29uY2F0ZW5hdGUgbm90ZXMgIgorCQkJICAgICIoY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZSkiKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBOT1RFU19NRVJHRV9SRVNPTFZFX0NBVF9TT1JUX1VOSVE6CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMikKKwkJCXByaW50ZigiQ29uY2F0ZW5hdGluZyB1bmlxdWUgbGluZXMgaW4gbG9jYWwgYW5kIHJlbW90ZSAiCisJCQkJIm5vdGVzIGZvciAlc1xuIiwgc2hhMV90b19oZXgocC0+b2JqKSk7CisJCWlmIChhZGRfbm90ZSh0LCBwLT5vYmosIHAtPnJlbW90ZSwgY29tYmluZV9ub3Rlc19jYXRfc29ydF91bmlxKSkKKwkJCWRpZSgiZmFpbGVkIHRvIGNvbmNhdGVuYXRlIG5vdGVzICIKKwkJCSAgICAiKGNvbWJpbmVfbm90ZXNfY2F0X3NvcnRfdW5pcSkiKTsKKwkJcmV0dXJuIDA7CisJfQorCWRpZSgiVW5rbm93biBzdHJhdGVneSAoJWkpLiIsIG8tPnN0cmF0ZWd5KTsKK30KKworc3RhdGljIGludCBtZXJnZV9jaGFuZ2VzKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJIHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpjaGFuZ2VzLCBpbnQgKm51bV9jaGFuZ2VzLAorCQkJIHN0cnVjdCBub3Rlc190cmVlICp0KQoreworCWludCBpLCBjb25mbGljdHMgPSAwOworCisJdHJhY2VfcHJpbnRmKCJcdG1lcmdlX2NoYW5nZXMobnVtX2NoYW5nZXMgPSAlaSlcbiIsICpudW1fY2hhbmdlcyk7CisJZm9yIChpID0gMDsgaSA8ICpudW1fY2hhbmdlczsgaSsrKSB7CisJCXN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpwID0gY2hhbmdlcyArIGk7CisJCXRyYWNlX3ByaW50ZigiXHRcdCUuN3M6ICUuN3MgLT4gJS43cy8lLjdzXG4iLAorCQkgICAgICAgc2hhMV90b19oZXgocC0+b2JqKSwgc2hhMV90b19oZXgocC0+YmFzZSksCisJCSAgICAgICBzaGExX3RvX2hleChwLT5sb2NhbCksIHNoYTFfdG9faGV4KHAtPnJlbW90ZSkpOworCisJCWlmICghaGFzaGNtcChwLT5iYXNlLCBwLT5yZW1vdGUpKSB7CisJCQkvKiBubyByZW1vdGUgY2hhbmdlOyBub3RoaW5nIHRvIGRvICovCisJCQl0cmFjZV9wcmludGYoIlx0XHRcdHNraXBwaW5nIChubyByZW1vdGUgY2hhbmdlKVxuIik7CisJCX0gZWxzZSBpZiAoIWhhc2hjbXAocC0+bG9jYWwsIHAtPnJlbW90ZSkpIHsKKwkJCS8qIHNhbWUgY2hhbmdlIGluIGxvY2FsIGFuZCByZW1vdGU7IG5vdGhpbmcgdG8gZG8gKi8KKwkJCXRyYWNlX3ByaW50ZigiXHRcdFx0c2tpcHBpbmcgKGxvY2FsID09IHJlbW90ZSlcbiIpOworCQl9IGVsc2UgaWYgKCFoYXNoY21wKHAtPmxvY2FsLCB1bmluaXRpYWxpemVkKSB8fAorCQkJICAgIWhhc2hjbXAocC0+bG9jYWwsIHAtPmJhc2UpKSB7CisJCQkvKiBubyBsb2NhbCBjaGFuZ2U7IGFkb3B0IHJlbW90ZSBjaGFuZ2UgKi8KKwkJCXRyYWNlX3ByaW50ZigiXHRcdFx0bm8gbG9jYWwgY2hhbmdlLCBhZG9wdGVkIHJlbW90ZVxuIik7CisJCQlpZiAoYWRkX25vdGUodCwgcC0+b2JqLCBwLT5yZW1vdGUsCisJCQkJICAgICBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSkpCisJCQkJZGllKCJCVUc6IGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlIGZhaWxlZCIpOworCQl9IGVsc2UgeworCQkJLyogbmVlZCBmaWxlLWxldmVsIG1lcmdlIGJldHdlZW4gbG9jYWwgYW5kIHJlbW90ZSAqLworCQkJdHJhY2VfcHJpbnRmKCJcdFx0XHRuZWVkIGNvbnRlbnQtbGV2ZWwgbWVyZ2VcbiIpOworCQkJY29uZmxpY3RzICs9IG1lcmdlX29uZV9jaGFuZ2UobywgcCwgdCk7CisJCX0KKwl9CisKKwlyZXR1cm4gY29uZmxpY3RzOworfQorCitzdGF0aWMgaW50IG1lcmdlX2Zyb21fZGlmZnMoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZSwKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsb2NhbCwKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyZW1vdGUsIHN0cnVjdCBub3Rlc190cmVlICp0KQoreworCXN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpjaGFuZ2VzOworCWludCBudW1fY2hhbmdlcywgY29uZmxpY3RzOworCisJdHJhY2VfcHJpbnRmKCJcdG1lcmdlX2Zyb21fZGlmZnMoYmFzZSA9ICUuN3MsIGxvY2FsID0gJS43cywgIgorCSAgICAgICAicmVtb3RlID0gJS43cylcbiIsIHNoYTFfdG9faGV4KGJhc2UpLCBzaGExX3RvX2hleChsb2NhbCksCisJICAgICAgIHNoYTFfdG9faGV4KHJlbW90ZSkpOworCisJY2hhbmdlcyA9IGRpZmZfdHJlZV9yZW1vdGUobywgYmFzZSwgcmVtb3RlLCAmbnVtX2NoYW5nZXMpOworCWRpZmZfdHJlZV9sb2NhbChvLCBjaGFuZ2VzLCBudW1fY2hhbmdlcywgYmFzZSwgbG9jYWwpOworCisJY29uZmxpY3RzID0gbWVyZ2VfY2hhbmdlcyhvLCBjaGFuZ2VzLCAmbnVtX2NoYW5nZXMsIHQpOworCWZyZWUoY2hhbmdlcyk7CisKKwlpZiAoby0+dmVyYm9zaXR5ID49IDQpCisJCXByaW50Zih0LT5kaXJ0eSA/CisJCSAgICAgICAiTWVyZ2UgcmVzdWx0OiAlaSB1bm1lcmdlZCBub3RlcyBhbmQgYSBkaXJ0eSBub3RlcyB0cmVlXG4iIDoKKwkJICAgICAgICJNZXJnZSByZXN1bHQ6ICVpIHVubWVyZ2VkIG5vdGVzIGFuZCBhIGNsZWFuIG5vdGVzIHRyZWVcbiIsCisJCSAgICAgICBjb25mbGljdHMpOworCisJcmV0dXJuIGNvbmZsaWN0cyA/IC0xIDogMTsKK30KKwordm9pZCBjcmVhdGVfbm90ZXNfY29tbWl0KHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsCisJCQkgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbXNnLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwl1bnNpZ25lZCBjaGFyIHRyZWVfc2hhMVsyMF07CisKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCisJaWYgKHdyaXRlX25vdGVzX3RyZWUodCwgdHJlZV9zaGExKSkKKwkJZGllKCJGYWlsZWQgdG8gd3JpdGUgbm90ZXMgdHJlZSB0byBkYXRhYmFzZSIpOworCisJaWYgKCFwYXJlbnRzKSB7CisJCS8qIERlZHVjZSBwYXJlbnQgY29tbWl0IGZyb20gdC0+cmVmICovCisJCXVuc2lnbmVkIGNoYXIgcGFyZW50X3NoYTFbMjBdOworCQlpZiAoIXJlYWRfcmVmKHQtPnJlZiwgcGFyZW50X3NoYTEpKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBsb29rdXBfY29tbWl0KHBhcmVudF9zaGExKTsKKwkJCWlmICghcGFyZW50IHx8IHBhcnNlX2NvbW1pdChwYXJlbnQpKQorCQkJCWRpZSgiRmFpbGVkIHRvIGZpbmQvcGFyc2UgY29tbWl0ICVzIiwgdC0+cmVmKTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChwYXJlbnQsICZwYXJlbnRzKTsKKwkJfQorCQkvKiBlbHNlOiB0LT5yZWYgcG9pbnRzIHRvIG5vdGhpbmcsIGFzc3VtZSByb290L29ycGhhbiBjb21taXQgKi8KKwl9CisKKwlpZiAoY29tbWl0X3RyZWUobXNnLCB0cmVlX3NoYTEsIHBhcmVudHMsIHJlc3VsdF9zaGExLCBOVUxMLCBOVUxMKSkKKwkJZGllKCJGYWlsZWQgdG8gY29tbWl0IG5vdGVzIHRyZWUgdG8gZGF0YWJhc2UiKTsKK30KKworaW50IG5vdGVzX21lcmdlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQlzdHJ1Y3Qgbm90ZXNfdHJlZSAqbG9jYWxfdHJlZSwKKwkJdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEpCit7CisJdW5zaWduZWQgY2hhciBsb2NhbF9zaGExWzIwXSwgcmVtb3RlX3NoYTFbMjBdOworCXN0cnVjdCBjb21taXQgKmxvY2FsLCAqcmVtb3RlOworCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXMgPSBOVUxMOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2Vfc2hhMSwgKmJhc2VfdHJlZV9zaGExOworCWludCByZXN1bHQgPSAwOworCisJYXNzZXJ0KG8tPmxvY2FsX3JlZiAmJiBvLT5yZW1vdGVfcmVmKTsKKwlhc3NlcnQoIXN0cmNtcChvLT5sb2NhbF9yZWYsIGxvY2FsX3RyZWUtPnJlZikpOworCWhhc2hjbHIocmVzdWx0X3NoYTEpOworCisJdHJhY2VfcHJpbnRmKCJub3Rlc19tZXJnZShvLT5sb2NhbF9yZWYgPSAlcywgby0+cmVtb3RlX3JlZiA9ICVzKVxuIiwKKwkgICAgICAgby0+bG9jYWxfcmVmLCBvLT5yZW1vdGVfcmVmKTsKKworCS8qIERlcmVmZXJlbmNlIG8tPmxvY2FsX3JlZiBpbnRvIGxvY2FsX3NoYTEgKi8KKwlpZiAocmVhZF9yZWZfZnVsbChvLT5sb2NhbF9yZWYsIGxvY2FsX3NoYTEsIDAsIE5VTEwpKQorCQlkaWUoIkZhaWxlZCB0byByZXNvbHZlIGxvY2FsIG5vdGVzIHJlZiAnJXMnIiwgby0+bG9jYWxfcmVmKTsKKwllbHNlIGlmICghY2hlY2tfcmVmbmFtZV9mb3JtYXQoby0+bG9jYWxfcmVmLCAwKSAmJgorCQlpc19udWxsX3NoYTEobG9jYWxfc2hhMSkpCisJCWxvY2FsID0gTlVMTDsgLyogbG9jYWxfc2hhMSA9PSBudWxsX3NoYTEgaW5kaWNhdGVzIHVuYm9ybiByZWYgKi8KKwllbHNlIGlmICghKGxvY2FsID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UobG9jYWxfc2hhMSkpKQorCQlkaWUoIkNvdWxkIG5vdCBwYXJzZSBsb2NhbCBjb21taXQgJXMgKCVzKSIsCisJCSAgICBzaGExX3RvX2hleChsb2NhbF9zaGExKSwgby0+bG9jYWxfcmVmKTsKKwl0cmFjZV9wcmludGYoIlx0bG9jYWwgY29tbWl0OiAlLjdzXG4iLCBzaGExX3RvX2hleChsb2NhbF9zaGExKSk7CisKKwkvKiBEZXJlZmVyZW5jZSBvLT5yZW1vdGVfcmVmIGludG8gcmVtb3RlX3NoYTEgKi8KKwlpZiAoZ2V0X3NoYTEoby0+cmVtb3RlX3JlZiwgcmVtb3RlX3NoYTEpKSB7CisJCS8qCisJCSAqIEZhaWxlZCB0byBnZXQgcmVtb3RlX3NoYTEuIElmIG8tPnJlbW90ZV9yZWYgbG9va3MgbGlrZSBhbgorCQkgKiB1bmJvcm4gcmVmLCBwZXJmb3JtIHRoZSBtZXJnZSB1c2luZyBhbiBlbXB0eSBub3RlcyB0cmVlLgorCQkgKi8KKwkJaWYgKCFjaGVja19yZWZuYW1lX2Zvcm1hdChvLT5yZW1vdGVfcmVmLCAwKSkgeworCQkJaGFzaGNscihyZW1vdGVfc2hhMSk7CisJCQlyZW1vdGUgPSBOVUxMOworCQl9IGVsc2UgeworCQkJZGllKCJGYWlsZWQgdG8gcmVzb2x2ZSByZW1vdGUgbm90ZXMgcmVmICclcyciLAorCQkJICAgIG8tPnJlbW90ZV9yZWYpOworCQl9CisJfSBlbHNlIGlmICghKHJlbW90ZSA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHJlbW90ZV9zaGExKSkpIHsKKwkJZGllKCJDb3VsZCBub3QgcGFyc2UgcmVtb3RlIGNvbW1pdCAlcyAoJXMpIiwKKwkJICAgIHNoYTFfdG9faGV4KHJlbW90ZV9zaGExKSwgby0+cmVtb3RlX3JlZik7CisJfQorCXRyYWNlX3ByaW50ZigiXHRyZW1vdGUgY29tbWl0OiAlLjdzXG4iLCBzaGExX3RvX2hleChyZW1vdGVfc2hhMSkpOworCisJaWYgKCFsb2NhbCAmJiAhcmVtb3RlKQorCQlkaWUoIkNhbm5vdCBtZXJnZSBlbXB0eSBub3RlcyByZWYgKCVzKSBpbnRvIGVtcHR5IG5vdGVzIHJlZiAiCisJCSAgICAiKCVzKSIsIG8tPnJlbW90ZV9yZWYsIG8tPmxvY2FsX3JlZik7CisJaWYgKCFsb2NhbCkgeworCQkvKiByZXN1bHQgPT0gcmVtb3RlIGNvbW1pdCAqLworCQloYXNoY3B5KHJlc3VsdF9zaGExLCByZW1vdGVfc2hhMSk7CisJCWdvdG8gZm91bmRfcmVzdWx0OworCX0KKwlpZiAoIXJlbW90ZSkgeworCQkvKiByZXN1bHQgPT0gbG9jYWwgY29tbWl0ICovCisJCWhhc2hjcHkocmVzdWx0X3NoYTEsIGxvY2FsX3NoYTEpOworCQlnb3RvIGZvdW5kX3Jlc3VsdDsKKwl9CisJYXNzZXJ0KGxvY2FsICYmIHJlbW90ZSk7CisKKwkvKiBGaW5kIG1lcmdlIGJhc2VzICovCisJYmFzZXMgPSBnZXRfbWVyZ2VfYmFzZXMobG9jYWwsIHJlbW90ZSwgMSk7CisJaWYgKCFiYXNlcykgeworCQliYXNlX3NoYTEgPSBudWxsX3NoYTE7CisJCWJhc2VfdHJlZV9zaGExID0gRU1QVFlfVFJFRV9TSEExX0JJTjsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSA0KQorCQkJcHJpbnRmKCJObyBtZXJnZSBiYXNlIGZvdW5kOyBkb2luZyBoaXN0b3J5LWxlc3MgbWVyZ2VcbiIpOworCX0gZWxzZSBpZiAoIWJhc2VzLT5uZXh0KSB7CisJCWJhc2Vfc2hhMSA9IGJhc2VzLT5pdGVtLT5vYmplY3Quc2hhMTsKKwkJYmFzZV90cmVlX3NoYTEgPSBiYXNlcy0+aXRlbS0+dHJlZS0+b2JqZWN0LnNoYTE7CisJCWlmIChvLT52ZXJib3NpdHkgPj0gNCkKKwkJCXByaW50ZigiT25lIG1lcmdlIGJhc2UgZm91bmQgKCUuN3MpXG4iLAorCQkJCXNoYTFfdG9faGV4KGJhc2Vfc2hhMSkpOworCX0gZWxzZSB7CisJCS8qIFRPRE86IEhvdyB0byBoYW5kbGUgbXVsdGlwbGUgbWVyZ2UtYmFzZXM/ICovCisJCWJhc2Vfc2hhMSA9IGJhc2VzLT5pdGVtLT5vYmplY3Quc2hhMTsKKwkJYmFzZV90cmVlX3NoYTEgPSBiYXNlcy0+aXRlbS0+dHJlZS0+b2JqZWN0LnNoYTE7CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMykKKwkJCXByaW50ZigiTXVsdGlwbGUgbWVyZ2UgYmFzZXMgZm91bmQuIFVzaW5nIHRoZSBmaXJzdCAiCisJCQkJIiglLjdzKVxuIiwgc2hhMV90b19oZXgoYmFzZV9zaGExKSk7CisJfQorCisJaWYgKG8tPnZlcmJvc2l0eSA+PSA0KQorCQlwcmludGYoIk1lcmdpbmcgcmVtb3RlIGNvbW1pdCAlLjdzIGludG8gbG9jYWwgY29tbWl0ICUuN3Mgd2l0aCAiCisJCQkibWVyZ2UtYmFzZSAlLjdzXG4iLCBzaGExX3RvX2hleChyZW1vdGUtPm9iamVjdC5zaGExKSwKKwkJCXNoYTFfdG9faGV4KGxvY2FsLT5vYmplY3Quc2hhMSksCisJCQlzaGExX3RvX2hleChiYXNlX3NoYTEpKTsKKworCWlmICghaGFzaGNtcChyZW1vdGUtPm9iamVjdC5zaGExLCBiYXNlX3NoYTEpKSB7CisJCS8qIEFscmVhZHkgbWVyZ2VkOyByZXN1bHQgPT0gbG9jYWwgY29tbWl0ICovCisJCWlmIChvLT52ZXJib3NpdHkgPj0gMikKKwkJCXByaW50ZigiQWxyZWFkeSB1cC10by1kYXRlIVxuIik7CisJCWhhc2hjcHkocmVzdWx0X3NoYTEsIGxvY2FsLT5vYmplY3Quc2hhMSk7CisJCWdvdG8gZm91bmRfcmVzdWx0OworCX0KKwlpZiAoIWhhc2hjbXAobG9jYWwtPm9iamVjdC5zaGExLCBiYXNlX3NoYTEpKSB7CisJCS8qIEZhc3QtZm9yd2FyZDsgcmVzdWx0ID09IHJlbW90ZSBjb21taXQgKi8KKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAyKQorCQkJcHJpbnRmKCJGYXN0LWZvcndhcmRcbiIpOworCQloYXNoY3B5KHJlc3VsdF9zaGExLCByZW1vdGUtPm9iamVjdC5zaGExKTsKKwkJZ290byBmb3VuZF9yZXN1bHQ7CisJfQorCisJcmVzdWx0ID0gbWVyZ2VfZnJvbV9kaWZmcyhvLCBiYXNlX3RyZWVfc2hhMSwgbG9jYWwtPnRyZWUtPm9iamVjdC5zaGExLAorCQkJCSAgcmVtb3RlLT50cmVlLT5vYmplY3Quc2hhMSwgbG9jYWxfdHJlZSk7CisKKwlpZiAocmVzdWx0ICE9IDApIHsgLyogbm9uLXRyaXZpYWwgbWVyZ2UgKHdpdGggb3Igd2l0aG91dCBjb25mbGljdHMpICovCisJCS8qIENvbW1pdCAocGFydGlhbCkgcmVzdWx0ICovCisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEw7CisJCWNvbW1pdF9saXN0X2luc2VydChyZW1vdGUsICZwYXJlbnRzKTsgLyogTElGTyBvcmRlciAqLworCQljb21taXRfbGlzdF9pbnNlcnQobG9jYWwsICZwYXJlbnRzKTsKKwkJY3JlYXRlX25vdGVzX2NvbW1pdChsb2NhbF90cmVlLCBwYXJlbnRzLCAmby0+Y29tbWl0X21zZywKKwkJCQkgICAgcmVzdWx0X3NoYTEpOworCX0KKworZm91bmRfcmVzdWx0OgorCWZyZWVfY29tbWl0X2xpc3QoYmFzZXMpOworCXN0cmJ1Zl9yZWxlYXNlKCYoby0+Y29tbWl0X21zZykpOworCXRyYWNlX3ByaW50Zigibm90ZXNfbWVyZ2UoKTogcmVzdWx0ID0gJWksIHJlc3VsdF9zaGExID0gJS43c1xuIiwKKwkgICAgICAgcmVzdWx0LCBzaGExX3RvX2hleChyZXN1bHRfc2hhMSkpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBub3Rlc19tZXJnZV9jb21taXQoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCSAgICAgICBzdHJ1Y3Qgbm90ZXNfdHJlZSAqcGFydGlhbF90cmVlLAorCQkgICAgICAgc3RydWN0IGNvbW1pdCAqcGFydGlhbF9jb21taXQsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwkvKgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBmaWxlcyBpbiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIGFuZCBhZGQgYWxsCisJICogZm91bmQgbm90ZXMgdG8gJ3BhcnRpYWxfdHJlZScuIFdyaXRlIHRoZSB1cGRhdGVkIG5vdGVzIHRyZWUgdG8KKwkgKiB0aGUgREIsIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlIG9iamVjdCB3aGlsZSByZXVzaW5nIHRoZQorCSAqIGNvbW1pdCBtZXNzYWdlIGFuZCBwYXJlbnRzIGZyb20gJ3BhcnRpYWxfY29tbWl0Jy4KKwkgKiBGaW5hbGx5IHN0b3JlIHRoZSBuZXcgY29tbWl0IG9iamVjdCBTSEExIGludG8gJ3Jlc3VsdF9zaGExJy4KKwkgKi8KKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICplOworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCWNoYXIgKm1zZyA9IHN0cnN0cihwYXJ0aWFsX2NvbW1pdC0+YnVmZmVyLCAiXG5cbiIpOworCXN0cnVjdCBzdHJidWYgc2JfbXNnID0gU1RSQlVGX0lOSVQ7CisJaW50IGJhc2VsZW47CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpOworCWlmIChvLT52ZXJib3NpdHkgPj0gMykKKwkJcHJpbnRmKCJDb21taXR0aW5nIG5vdGVzIGluIG5vdGVzIG1lcmdlIHdvcmt0cmVlIGF0ICVzXG4iLAorCQkJcGF0aC5idWYpOworCisJaWYgKCFtc2cgfHwgbXNnWzJdID09ICdcMCcpCisJCWRpZSgicGFydGlhbCBub3RlcyBjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiKTsKKwltc2cgKz0gMjsKKworCWRpciA9IG9wZW5kaXIocGF0aC5idWYpOworCWlmICghZGlyKQorCQlkaWVfZXJybm8oImNvdWxkIG5vdCBvcGVuICVzIiwgcGF0aC5idWYpOworCisJc3RyYnVmX2FkZGNoKCZwYXRoLCAnLycpOworCWJhc2VsZW4gPSBwYXRoLmxlbjsKKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCXVuc2lnbmVkIGNoYXIgb2JqX3NoYTFbMjBdLCBibG9iX3NoYTFbMjBdOworCisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGUtPmRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RybGVuKGUtPmRfbmFtZSkgIT0gNDAgfHwgZ2V0X3NoYTFfaGV4KGUtPmRfbmFtZSwgb2JqX3NoYTEpKSB7CisJCQlpZiAoby0+dmVyYm9zaXR5ID49IDMpCisJCQkJcHJpbnRmKCJTa2lwcGluZyBub24tU0hBMSBlbnRyeSAnJXMlcydcbiIsCisJCQkJCXBhdGguYnVmLCBlLT5kX25hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlzdHJidWZfYWRkc3RyKCZwYXRoLCBlLT5kX25hbWUpOworCQkvKiB3cml0ZSBmaWxlIGFzIGJsb2IsIGFuZCBhZGQgdG8gcGFydGlhbF90cmVlICovCisJCWlmIChzdGF0KHBhdGguYnVmLCAmc3QpKQorCQkJZGllX2Vycm5vKCJGYWlsZWQgdG8gc3RhdCAnJXMnIiwgcGF0aC5idWYpOworCQlpZiAoaW5kZXhfcGF0aChibG9iX3NoYTEsIHBhdGguYnVmLCAmc3QsIEhBU0hfV1JJVEVfT0JKRUNUKSkKKwkJCWRpZSgiRmFpbGVkIHRvIHdyaXRlIGJsb2Igb2JqZWN0IGZyb20gJyVzJyIsIHBhdGguYnVmKTsKKwkJaWYgKGFkZF9ub3RlKHBhcnRpYWxfdHJlZSwgb2JqX3NoYTEsIGJsb2Jfc2hhMSwgTlVMTCkpCisJCQlkaWUoIkZhaWxlZCB0byBhZGQgcmVzb2x2ZWQgbm90ZSAnJXMnIHRvIG5vdGVzIHRyZWUiLAorCQkJICAgIHBhdGguYnVmKTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSA0KQorCQkJcHJpbnRmKCJBZGRlZCByZXNvbHZlZCBub3RlIGZvciBvYmplY3QgJXM6ICVzXG4iLAorCQkJCXNoYTFfdG9faGV4KG9ial9zaGExKSwgc2hhMV90b19oZXgoYmxvYl9zaGExKSk7CisJCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGJhc2VsZW4pOworCX0KKworCXN0cmJ1Zl9hdHRhY2goJnNiX21zZywgbXNnLCBzdHJsZW4obXNnKSwgc3RybGVuKG1zZykgKyAxKTsKKwljcmVhdGVfbm90ZXNfY29tbWl0KHBhcnRpYWxfdHJlZSwgcGFydGlhbF9jb21taXQtPnBhcmVudHMsICZzYl9tc2csCisJCQkgICAgcmVzdWx0X3NoYTEpOworCWlmIChvLT52ZXJib3NpdHkgPj0gNCkKKwkJcHJpbnRmKCJGaW5hbGl6ZWQgbm90ZXMgbWVyZ2UgY29tbWl0OiAlc1xuIiwKKwkJCXNoYTFfdG9faGV4KHJlc3VsdF9zaGExKSk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCWNsb3NlZGlyKGRpcik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBub3Rlc19tZXJnZV9hYm9ydChzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbykKK3sKKwkvKgorCSAqIFJlbW92ZSBhbGwgZmlsZXMgd2l0aGluIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUuIFdlIGRvIG5vdCByZW1vdmUKKwkgKiB0aGUgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSBkaXJlY3RvcnkgaXRzZWxmLCBzaW5jZSBpdCBtaWdodCBiZQorCSAqIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZSB1c2VyLgorCSAqLworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZ2l0X3BhdGgoTk9URVNfTUVSR0VfV09SS1RSRUUpKTsKKwlpZiAoby0+dmVyYm9zaXR5ID49IDMpCisJCXByaW50ZigiUmVtb3Zpbmcgbm90ZXMgbWVyZ2Ugd29ya3RyZWUgYXQgJXMvKlxuIiwgYnVmLmJ1Zik7CisJcmV0ID0gcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmYnVmLCBSRU1PVkVfRElSX0tFRVBfVE9QTEVWRUwpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9ub3Rlcy1tZXJnZS5oIGIvbm90ZXMtbWVyZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzExYjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMtbWVyZ2UuaApAQCAtMCwwICsxLDk4IEBACisjaWZuZGVmIE5PVEVTX01FUkdFX0gKKyNkZWZpbmUgTk9URVNfTUVSR0VfSAorCisjZGVmaW5lIE5PVEVTX01FUkdFX1dPUktUUkVFICJOT1RFU19NRVJHRV9XT1JLVFJFRSIKKworZW51bSBub3Rlc19tZXJnZV92ZXJib3NpdHkgeworCU5PVEVTX01FUkdFX1ZFUkJPU0lUWV9ERUZBVUxUID0gMiwKKwlOT1RFU19NRVJHRV9WRVJCT1NJVFlfTUFYID0gNQorfTsKKworc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgeworCWNvbnN0IGNoYXIgKmxvY2FsX3JlZjsKKwljb25zdCBjaGFyICpyZW1vdGVfcmVmOworCXN0cnVjdCBzdHJidWYgY29tbWl0X21zZzsKKwlpbnQgdmVyYm9zaXR5OworCWVudW0geworCQlOT1RFU19NRVJHRV9SRVNPTFZFX01BTlVBTCA9IDAsCisJCU5PVEVTX01FUkdFX1JFU09MVkVfT1VSUywKKwkJTk9URVNfTUVSR0VfUkVTT0xWRV9USEVJUlMsCisJCU5PVEVTX01FUkdFX1JFU09MVkVfVU5JT04sCisJCU5PVEVTX01FUkdFX1JFU09MVkVfQ0FUX1NPUlRfVU5JUQorCX0gc3RyYXRlZ3k7CisJdW5zaWduZWQgaGFzX3dvcmt0cmVlOjE7Cit9OworCit2b2lkIGluaXRfbm90ZXNfbWVyZ2Vfb3B0aW9ucyhzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbyk7CisKKy8qCisgKiBDcmVhdGUgbmV3IG5vdGVzIGNvbW1pdCBmcm9tIHRoZSBnaXZlbiBub3RlcyB0cmVlCisgKgorICogUHJvcGVydGllcyBvZiB0aGUgY3JlYXRlZCBjb21taXQ6CisgKiAtIHRyZWU6IHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0IHRvIGEgdHJlZSBvYmplY3Qgd2l0aCB3cml0ZV9ub3Rlc190cmVlKCkuCisgKiAtIHBhcmVudHM6IHRoZSBnaXZlbiBwYXJlbnRzIE9SIChpZiBOVUxMKSB0aGUgY29tbWl0IHJlZmVyZW5jZWQgYnkgdC0+cmVmLgorICogLSBhdXRob3IvY29tbWl0dGVyOiB0aGUgZGVmYXVsdCBkZXRlcm1pbmVkIGJ5IGNvbW1taXRfdHJlZSgpLgorICogLSBjb21taXQgbWVzc2FnZTogbXNnCisgKgorICogVGhlIHJlc3VsdGluZyBjb21taXQgU0hBMSBpcyBzdG9yZWQgaW4gcmVzdWx0X3NoYTEuCisgKi8KK3ZvaWQgY3JlYXRlX25vdGVzX2NvbW1pdChzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLAorCQkJIGNvbnN0IHN0cnVjdCBzdHJidWYgKm1zZywgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEpOworCisvKgorICogTWVyZ2Ugbm90ZXMgZnJvbSBvLT5yZW1vdGVfcmVmIGludG8gby0+bG9jYWxfcmVmCisgKgorICogVGhlIGdpdmVuIG5vdGVzX3RyZWUgJ2xvY2FsX3RyZWUnIG11c3QgYmUgdGhlIG5vdGVzX3RyZWUgcmVmZXJlbmNlZCBieSB0aGUKKyAqIG8tPmxvY2FsX3JlZi4gVGhpcyBpcyB0aGUgbm90ZXNfdHJlZSBpbiB3aGljaCB0aGUgb2JqZWN0LWxldmVsIG1lcmdlIGlzCisgKiBwZXJmb3JtZWQuCisgKgorICogVGhlIGNvbW1pdHMgZ2l2ZW4gYnkgdGhlIHR3byByZWZzIGFyZSBtZXJnZWQsIHByb2R1Y2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZworICogb3V0Y29tZXM6CisgKgorICogMS4gVGhlIG1lcmdlIHRyaXZpYWxseSByZXN1bHRzIGluIGFuIGV4aXN0aW5nIGNvbW1pdCAoZS5nLiBmYXN0LWZvcndhcmQgb3IKKyAqICAgIGFscmVhZHktdXAtdG8tZGF0ZSkuICdsb2NhbF90cmVlJyBpcyB1bnRvdWNoZWQsIHRoZSBTSEExIG9mIHRoZSByZXN1bHQKKyAqICAgIGlzIHdyaXR0ZW4gaW50byAncmVzdWx0X3NoYTEnIGFuZCAwIGlzIHJldHVybmVkLgorICogMi4gVGhlIG1lcmdlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMsIHByb2R1Y2luZyBhIG1lcmdlIGNvbW1pdC4gbG9jYWxfdHJlZQorICogICAgY29udGFpbnMgdGhlIHVwZGF0ZWQgbm90ZXMgdHJlZSwgdGhlIFNIQTEgb2YgdGhlIHJlc3VsdGluZyBjb21taXQgaXMKKyAqICAgIHdyaXR0ZW4gaW50byAncmVzdWx0X3NoYTEnLCBhbmQgMSBpcyByZXR1cm5lZC4KKyAqIDMuIFRoZSBtZXJnZSByZXN1bHRzIGluIGNvbmZsaWN0cy4gVGhpcyBpcyBzaW1pbGFyIHRvICMyIGluIHRoYXQgdGhlCisgKiAgICBwYXJ0aWFsIG1lcmdlIHJlc3VsdCAoaS5lLiBtZXJnZSByZXN1bHQgbWludXMgdGhlIHVubWVyZ2VkIGVudHJpZXMpCisgKiAgICBhcmUgc3RvcmVkIGluICdsb2NhbF90cmVlJywgYW5kIHRoZSBTSEExIG9yIHRoZSByZXN1bHRpbmcgY29tbWl0CisgKiAgICAodG8gYmUgYW1lbmRlZCB3aGVuIHRoZSBjb25mbGljdHMgaGF2ZSBiZWVuIHJlc29sdmVkKSBpcyB3cml0dGVuIGludG8KKyAqICAgICdyZXN1bHRfc2hhMScuIFRoZSB1bm1lcmdlZCBlbnRyaWVzIGFyZSB3cml0dGVuIGludG8gdGhlCisgKiAgICAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIGRpcmVjdG9yeSB3aXRoIGNvbmZsaWN0IG1hcmtlcnMuCisgKiAgICAtMSBpcyByZXR1cm5lZC4KKyAqCisgKiBCb3RoIG8tPmxvY2FsX3JlZiBhbmQgby0+cmVtb3RlX3JlZiBtdXN0IGJlIGdpdmVuIChub24tTlVMTCksIGJ1dCBlaXRoZXIgcmVmCisgKiAoYWx0aG91Z2ggbm90IGJvdGgpIG1heSByZWZlciB0byBhIG5vbi1leGlzdGluZyBub3RlcyByZWYsIGluIHdoaWNoIGNhc2UKKyAqIHRoYXQgbm90ZXMgcmVmIGlzIGludGVycHJldGVkIGFzIGFuIGVtcHR5IG5vdGVzIHRyZWUsIGFuZCB0aGUgbWVyZ2UKKyAqIHRyaXZpYWxseSByZXN1bHRzIGluIHdoYXQgdGhlIG90aGVyIHJlZiBwb2ludHMgdG8uCisgKi8KK2ludCBub3Rlc19tZXJnZShzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKKwkJc3RydWN0IG5vdGVzX3RyZWUgKmxvY2FsX3RyZWUsCisJCXVuc2lnbmVkIGNoYXIgKnJlc3VsdF9zaGExKTsKKworLyoKKyAqIEZpbmFsaXplIGNvbmZsaWN0IHJlc29sdXRpb24gZnJvbSBhbiBlYXJsaWVyIG5vdGVzX21lcmdlKCkKKyAqCisgKiBUaGUgZ2l2ZW4gbm90ZXMgdHJlZSAncGFydGlhbF90cmVlJyBtdXN0IGJlIHRoZSBub3Rlc190cmVlIGNvcnJlc3BvbmRpbmcgdG8KKyAqIHRoZSBnaXZlbiAncGFydGlhbF9jb21taXQnLCB0aGUgcGFydGlhbCByZXN1bHQgY29tbWl0IGNyZWF0ZWQgYnkgYSBwcmV2aW91cworICogY2FsbCB0byBub3Rlc19tZXJnZSgpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgdGhlIChub3cgcmVzb2x2ZWQpIG5vdGVzIGluIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUKKyAqIHRvICdwYXJ0aWFsX3RyZWUnLCBhbmQgY3JlYXRlIGEgZmluYWwgbm90ZXMgbWVyZ2UgY29tbWl0LCB0aGUgU0hBMSBvZiB3aGljaAorICogd2lsbCBiZSBzdG9yZWQgaW4gJ3Jlc3VsdF9zaGExJy4KKyAqLworaW50IG5vdGVzX21lcmdlX2NvbW1pdChzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKKwkJICAgICAgIHN0cnVjdCBub3Rlc190cmVlICpwYXJ0aWFsX3RyZWUsCisJCSAgICAgICBzdHJ1Y3QgY29tbWl0ICpwYXJ0aWFsX2NvbW1pdCwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9zaGExKTsKKworLyoKKyAqIEFib3J0IGNvbmZsaWN0IHJlc29sdXRpb24gZnJvbSBhbiBlYXJsaWVyIG5vdGVzX21lcmdlKCkKKyAqCisgKiBSZW1vdmVzIHRoZSBub3RlcyBtZXJnZSB3b3JrdHJlZSBpbiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLgorICovCitpbnQgbm90ZXNfbWVyZ2VfYWJvcnQoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25vdGVzLmMgYi9ub3Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNDU0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy5jCkBAIC0wLDAgKzEsMTMwOCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworLyoKKyAqIFVzZSBhIG5vbi1iYWxhbmNpbmcgc2ltcGxlIDE2LXRyZWUgc3RydWN0dXJlIHdpdGggc3RydWN0IGludF9ub2RlIGFzCisgKiBpbnRlcm5hbCBub2RlcywgYW5kIHN0cnVjdCBsZWFmX25vZGUgYXMgbGVhZiBub2Rlcy4gRWFjaCBpbnRfbm9kZSBoYXMgYQorICogMTYtYXJyYXkgb2YgcG9pbnRlcnMgdG8gaXRzIGNoaWxkcmVuLgorICogVGhlIGJvdHRvbSAyIGJpdHMgb2YgZWFjaCBwb2ludGVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHBvaW50ZXIgdHlwZQorICogLSBwdHIgJiAzID09IDAgLSBOVUxMIHBvaW50ZXIsIGFzc2VydChwdHIgPT0gTlVMTCkKKyAqIC0gcHRyICYgMyA9PSAxIC0gcG9pbnRlciB0byBuZXh0IGludGVybmFsIG5vZGUgLSBjYXN0IHRvIHN0cnVjdCBpbnRfbm9kZSAqCisgKiAtIHB0ciAmIDMgPT0gMiAtIHBvaW50ZXIgdG8gbm90ZSBlbnRyeSAtIGNhc3QgdG8gc3RydWN0IGxlYWZfbm9kZSAqCisgKiAtIHB0ciAmIDMgPT0gMyAtIHBvaW50ZXIgdG8gc3VidHJlZSBlbnRyeSAtIGNhc3QgdG8gc3RydWN0IGxlYWZfbm9kZSAqCisgKgorICogVGhlIHJvb3Qgbm9kZSBpcyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0cnVjdCBpbnRfbm9kZS4KKyAqLworc3RydWN0IGludF9ub2RlIHsKKwl2b2lkICphWzE2XTsKK307CisKKy8qCisgKiBMZWFmIG5vZGVzIGNvbWUgaW4gdHdvIHZhcmlhbnRzLCBub3RlIGVudHJpZXMgYW5kIHN1YnRyZWUgZW50cmllcywKKyAqIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIExTYiBvZiB0aGUgbGVhZiBub2RlIHBvaW50ZXIgKHNlZSBhYm92ZSkuCisgKiBBcyBhIG5vdGUgZW50cnksIHRoZSBrZXkgaXMgdGhlIFNIQTEgb2YgdGhlIHJlZmVyZW5jZWQgb2JqZWN0LCBhbmQgdGhlCisgKiB2YWx1ZSBpcyB0aGUgU0hBMSBvZiB0aGUgbm90ZSBvYmplY3QuCisgKiBBcyBhIHN1YnRyZWUgZW50cnksIHRoZSBrZXkgaXMgdGhlIHByZWZpeCBTSEExICh3L3RyYWlsaW5nIE5VTHMpIG9mIHRoZQorICogcmVmZXJlbmNlZCBvYmplY3QsIHVzaW5nIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGtleSB0byBzdG9yZSB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgcHJlZml4LiBUaGUgdmFsdWUgaXMgdGhlIFNIQTEgb2YgdGhlIHRyZWUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5vdGVzCisgKiBzdWJ0cmVlLgorICovCitzdHJ1Y3QgbGVhZl9ub2RlIHsKKwl1bnNpZ25lZCBjaGFyIGtleV9zaGExWzIwXTsKKwl1bnNpZ25lZCBjaGFyIHZhbF9zaGExWzIwXTsKK307CisKKy8qCisgKiBBIG5vdGVzIHRyZWUgbWF5IGNvbnRhaW4gZW50cmllcyB0aGF0IGFyZSBub3Qgbm90ZXMsIGFuZCB0aGF0IGRvIG5vdCBmb2xsb3cKKyAqIHRoZSBuYW1pbmcgY29udmVudGlvbnMgb2Ygbm90ZXMuIFRoZXJlIGFyZSB0eXBpY2FsbHkgbm9uZS9mZXcgb2YgdGhlc2UsIGJ1dAorICogd2Ugc3RpbGwgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZW0uIEtlZXAgYSBzaW1wbGUgbGlua2VkIGxpc3Qgc29ydGVkIGFscGhhLQorICogYmV0aWNhbGx5IG9uIHRoZSBub24tbm90ZSBwYXRoLiBUaGUgbGlzdCBpcyBwb3B1bGF0ZWQgd2hlbiBwYXJzaW5nIHRyZWUKKyAqIG9iamVjdHMgaW4gbG9hZF9zdWJ0cmVlKCksIGFuZCB0aGUgbm9uLW5vdGVzIGFyZSBjb3JyZWN0bHkgd3JpdHRlbiBiYWNrIGludG8KKyAqIHRoZSB0cmVlIG9iamVjdHMgcHJvZHVjZWQgYnkgd3JpdGVfbm90ZXNfdHJlZSgpLgorICovCitzdHJ1Y3Qgbm9uX25vdGUgeworCXN0cnVjdCBub25fbm90ZSAqbmV4dDsgLyogZ3JvdW5kZWQgKGxhc3QtPm5leHQgPT0gTlVMTCkgKi8KKwljaGFyICpwYXRoOworCXVuc2lnbmVkIGludCBtb2RlOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Cit9OworCisjZGVmaW5lIFBUUl9UWVBFX05VTEwgICAgIDAKKyNkZWZpbmUgUFRSX1RZUEVfSU5URVJOQUwgMQorI2RlZmluZSBQVFJfVFlQRV9OT1RFICAgICAyCisjZGVmaW5lIFBUUl9UWVBFX1NVQlRSRUUgIDMKKworI2RlZmluZSBHRVRfUFRSX1RZUEUocHRyKSAgICAgICAoKHVpbnRwdHJfdCkgKHB0cikgJiAzKQorI2RlZmluZSBDTFJfUFRSX1RZUEUocHRyKSAgICAgICAoKHZvaWQgKikgKCh1aW50cHRyX3QpIChwdHIpICYgfjMpKQorI2RlZmluZSBTRVRfUFRSX1RZUEUocHRyLCB0eXBlKSAoKHZvaWQgKikgKCh1aW50cHRyX3QpIChwdHIpIHwgKHR5cGUpKSkKKworI2RlZmluZSBHRVRfTklCQkxFKG4sIHNoYTEpICgoKHNoYTFbKG4pID4+IDFdKSA+PiAoKH4obikgJiAweDAxKSA8PCAyKSkgJiAweDBmKQorCisjZGVmaW5lIFNVQlRSRUVfU0hBMV9QUkVGSVhDTVAoa2V5X3NoYTEsIHN1YnRyZWVfc2hhMSkgXAorCShtZW1jbXAoa2V5X3NoYTEsIHN1YnRyZWVfc2hhMSwgc3VidHJlZV9zaGExWzE5XSkpCisKK3N0cnVjdCBub3Rlc190cmVlIGRlZmF1bHRfbm90ZXNfdHJlZTsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBkaXNwbGF5X25vdGVzX3JlZnM7CitzdGF0aWMgc3RydWN0IG5vdGVzX3RyZWUgKipkaXNwbGF5X25vdGVzX3RyZWVzOworCitzdGF0aWMgdm9pZCBsb2FkX3N1YnRyZWUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIHN0cnVjdCBsZWFmX25vZGUgKnN1YnRyZWUsCisJCXN0cnVjdCBpbnRfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IG4pOworCisvKgorICogU2VhcmNoIHRoZSB0cmVlIHVudGlsIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbiBmb3IgdGhlIGdpdmVuIGtleSBpcyBmb3VuZDoKKyAqIDEuIFN0YXJ0IGF0IHRoZSByb290IG5vZGUsIHdpdGggbiA9IDAKKyAqIDIuIElmIGFbMF0gYXQgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgYSBtYXRjaGluZyBzdWJ0cmVlIGVudHJ5LCB1bnBhY2sgdGhhdAorICogICAgc3VidHJlZSBlbnRyeSBhbmQgcmVtb3ZlIGl0OyByZXN0YXJ0IHNlYXJjaCBhdCB0aGUgY3VycmVudCBsZXZlbC4KKyAqIDMuIFVzZSB0aGUgbnRoIG5pYmJsZSBvZiB0aGUga2V5IGFzIGFuIGluZGV4IGludG8gYToKKyAqICAgIC0gSWYgYVtuXSBpcyBhbiBpbnRfbm9kZSwgcmVjdXJzZSBmcm9tICMyIGludG8gdGhhdCBub2RlIGFuZCBpbmNyZW1lbnQgbgorICogICAgLSBJZiBhIG1hdGNoaW5nIHN1YnRyZWUgZW50cnksIHVucGFjayB0aGF0IHN1YnRyZWUgZW50cnkgKGFuZCByZW1vdmUgaXQpOworICogICAgICByZXN0YXJ0IHNlYXJjaCBhdCB0aGUgY3VycmVudCBsZXZlbC4KKyAqICAgIC0gT3RoZXJ3aXNlLCB3ZSBoYXZlIGZvdW5kIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICogICAgICAtIGEgc3VidHJlZSBlbnRyeSB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5CisgKiAgICAgIC0gYSBub3RlIGVudHJ5IHdoaWNoIG1heSBvciBtYXkgbm90IG1hdGNoIHRoZSBrZXkKKyAqICAgICAgLSBhbiB1bnVzZWQgbGVhZiBub2RlIChOVUxMKQorICogICAgICBJbiBhbnkgY2FzZSwgc2V0ICp0cmVlIGFuZCAqbiwgYW5kIHJldHVybiBwb2ludGVyIHRvIHRoZSB0cmVlIGxvY2F0aW9uLgorICovCitzdGF0aWMgdm9pZCAqKm5vdGVfdHJlZV9zZWFyY2goc3RydWN0IG5vdGVzX3RyZWUgKnQsIHN0cnVjdCBpbnRfbm9kZSAqKnRyZWUsCisJCXVuc2lnbmVkIGNoYXIgKm4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV9zaGExKQoreworCXN0cnVjdCBsZWFmX25vZGUgKmw7CisJdW5zaWduZWQgY2hhciBpOworCXZvaWQgKnAgPSAoKnRyZWUpLT5hWzBdOworCisJaWYgKEdFVF9QVFJfVFlQRShwKSA9PSBQVFJfVFlQRV9TVUJUUkVFKSB7CisJCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUocCk7CisJCWlmICghU1VCVFJFRV9TSEExX1BSRUZJWENNUChrZXlfc2hhMSwgbC0+a2V5X3NoYTEpKSB7CisJCQkvKiB1bnBhY2sgdHJlZSBhbmQgcmVzdW1lIHNlYXJjaCAqLworCQkJKCp0cmVlKS0+YVswXSA9IE5VTEw7CisJCQlsb2FkX3N1YnRyZWUodCwgbCwgKnRyZWUsICpuKTsKKwkJCWZyZWUobCk7CisJCQlyZXR1cm4gbm90ZV90cmVlX3NlYXJjaCh0LCB0cmVlLCBuLCBrZXlfc2hhMSk7CisJCX0KKwl9CisKKwlpID0gR0VUX05JQkJMRSgqbiwga2V5X3NoYTEpOworCXAgPSAoKnRyZWUpLT5hW2ldOworCXN3aXRjaCAoR0VUX1BUUl9UWVBFKHApKSB7CisJY2FzZSBQVFJfVFlQRV9JTlRFUk5BTDoKKwkJKnRyZWUgPSBDTFJfUFRSX1RZUEUocCk7CisJCSgqbikrKzsKKwkJcmV0dXJuIG5vdGVfdHJlZV9zZWFyY2godCwgdHJlZSwgbiwga2V5X3NoYTEpOworCWNhc2UgUFRSX1RZUEVfU1VCVFJFRToKKwkJbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRShwKTsKKwkJaWYgKCFTVUJUUkVFX1NIQTFfUFJFRklYQ01QKGtleV9zaGExLCBsLT5rZXlfc2hhMSkpIHsKKwkJCS8qIHVucGFjayB0cmVlIGFuZCByZXN1bWUgc2VhcmNoICovCisJCQkoKnRyZWUpLT5hW2ldID0gTlVMTDsKKwkJCWxvYWRfc3VidHJlZSh0LCBsLCAqdHJlZSwgKm4pOworCQkJZnJlZShsKTsKKwkJCXJldHVybiBub3RlX3RyZWVfc2VhcmNoKHQsIHRyZWUsIG4sIGtleV9zaGExKTsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gJigoKnRyZWUpLT5hW2ldKTsKKwl9Cit9CisKKy8qCisgKiBUbyBmaW5kIGEgbGVhZl9ub2RlOgorICogU2VhcmNoIHRvIHRoZSB0cmVlIGxvY2F0aW9uIGFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4ga2V5OgorICogSWYgYSBub3RlIGVudHJ5IHdpdGggbWF0Y2hpbmcga2V5LCByZXR1cm4gdGhlIG5vdGUgZW50cnksIGVsc2UgcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbGVhZl9ub2RlICpub3RlX3RyZWVfZmluZChzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkJc3RydWN0IGludF9ub2RlICp0cmVlLCB1bnNpZ25lZCBjaGFyIG4sCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV9zaGExKQoreworCXZvaWQgKipwID0gbm90ZV90cmVlX3NlYXJjaCh0LCAmdHJlZSwgJm4sIGtleV9zaGExKTsKKwlpZiAoR0VUX1BUUl9UWVBFKCpwKSA9PSBQVFJfVFlQRV9OT1RFKSB7CisJCXN0cnVjdCBsZWFmX25vZGUgKmwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUoKnApOworCQlpZiAoIWhhc2hjbXAoa2V5X3NoYTEsIGwtPmtleV9zaGExKSkKKwkJCXJldHVybiBsOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEhvdyB0byBjb25zb2xpZGF0ZSBhbiBpbnRfbm9kZToKKyAqIElmIHRoZXJlIGFyZSA+IDEgbm9uLU5VTEwgZW50cmllcywgZ2l2ZSB1cCBhbmQgcmV0dXJuIG5vbi16ZXJvLgorICogT3RoZXJ3aXNlIHJlcGxhY2UgdGhlIGludF9ub2RlIGF0IHRoZSBnaXZlbiBpbmRleCBpbiB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUKKyAqIHdpdGggdGhlIG9ubHkgZW50cnkgKG9yIGEgTlVMTCBlbnRyeSBpZiBubyBlbnRyaWVzKSBmcm9tIHRoZSBnaXZlbiB0cmVlLAorICogYW5kIHJldHVybiAwLgorICovCitzdGF0aWMgaW50IG5vdGVfdHJlZV9jb25zb2xpZGF0ZShzdHJ1Y3QgaW50X25vZGUgKnRyZWUsCisJc3RydWN0IGludF9ub2RlICpwYXJlbnQsIHVuc2lnbmVkIGNoYXIgaW5kZXgpCit7CisJdW5zaWduZWQgaW50IGk7CisJdm9pZCAqcCA9IE5VTEw7CisKKwlhc3NlcnQodHJlZSAmJiBwYXJlbnQpOworCWFzc2VydChDTFJfUFRSX1RZUEUocGFyZW50LT5hW2luZGV4XSkgPT0gdHJlZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlpZiAoR0VUX1BUUl9UWVBFKHRyZWUtPmFbaV0pICE9IFBUUl9UWVBFX05VTEwpIHsKKwkJCWlmIChwKSAvKiBtb3JlIHRoYW4gb25lIGVudHJ5ICovCisJCQkJcmV0dXJuIC0yOworCQkJcCA9IHRyZWUtPmFbaV07CisJCX0KKwl9CisKKwkvKiByZXBsYWNlIHRyZWUgd2l0aCBwIGluIHBhcmVudFtpbmRleF0gKi8KKwlwYXJlbnQtPmFbaW5kZXhdID0gcDsKKwlmcmVlKHRyZWUpOworCXJldHVybiAwOworfQorCisvKgorICogVG8gcmVtb3ZlIGEgbGVhZl9ub2RlOgorICogU2VhcmNoIHRvIHRoZSB0cmVlIGxvY2F0aW9uIGFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4gbGVhZl9ub2RlJ3Mga2V5OgorICogLSBJZiBsb2NhdGlvbiBkb2VzIG5vdCBob2xkIGEgbWF0Y2hpbmcgZW50cnksIGFib3J0IGFuZCBkbyBub3RoaW5nLgorICogLSBDb3B5IHRoZSBtYXRjaGluZyBlbnRyeSdzIHZhbHVlIGludG8gdGhlIGdpdmVuIGVudHJ5LgorICogLSBSZXBsYWNlIHRoZSBtYXRjaGluZyBsZWFmX25vZGUgd2l0aCBhIE5VTEwgZW50cnkgKGFuZCBmcmVlIHRoZSBsZWFmX25vZGUpLgorICogLSBDb25zb2xpZGF0ZSBpbnRfbm9kZXMgcmVwZWF0ZWRseSwgd2hpbGUgd2Fsa2luZyB1cCB0aGUgdHJlZSB0b3dhcmRzIHJvb3QuCisgKi8KK3N0YXRpYyB2b2lkIG5vdGVfdHJlZV9yZW1vdmUoc3RydWN0IG5vdGVzX3RyZWUgKnQsCisJCXN0cnVjdCBpbnRfbm9kZSAqdHJlZSwgdW5zaWduZWQgY2hhciBuLAorCQlzdHJ1Y3QgbGVhZl9ub2RlICplbnRyeSkKK3sKKwlzdHJ1Y3QgbGVhZl9ub2RlICpsOworCXN0cnVjdCBpbnRfbm9kZSAqcGFyZW50X3N0YWNrWzIwXTsKKwl1bnNpZ25lZCBjaGFyIGksIGo7CisJdm9pZCAqKnAgPSBub3RlX3RyZWVfc2VhcmNoKHQsICZ0cmVlLCAmbiwgZW50cnktPmtleV9zaGExKTsKKworCWFzc2VydChHRVRfUFRSX1RZUEUoZW50cnkpID09IDApOyAvKiBubyB0eXBlIGJpdHMgc2V0ICovCisJaWYgKEdFVF9QVFJfVFlQRSgqcCkgIT0gUFRSX1RZUEVfTk9URSkKKwkJcmV0dXJuOyAvKiB0eXBlIG1pc21hdGNoLCBub3RoaW5nIHRvIHJlbW92ZSAqLworCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUoKnApOworCWlmIChoYXNoY21wKGwtPmtleV9zaGExLCBlbnRyeS0+a2V5X3NoYTEpKQorCQlyZXR1cm47IC8qIGtleSBtaXNtYXRjaCwgbm90aGluZyB0byByZW1vdmUgKi8KKworCS8qIHdlIGhhdmUgZm91bmQgYSBtYXRjaGluZyBlbnRyeSAqLworCWhhc2hjcHkoZW50cnktPnZhbF9zaGExLCBsLT52YWxfc2hhMSk7CisJZnJlZShsKTsKKwkqcCA9IFNFVF9QVFJfVFlQRShOVUxMLCBQVFJfVFlQRV9OVUxMKTsKKworCS8qIGNvbnNvbGlkYXRlIHRoaXMgdHJlZSBsZXZlbCwgYW5kIHBhcmVudCBsZXZlbHMsIGlmIHBvc3NpYmxlICovCisJaWYgKCFuKQorCQlyZXR1cm47IC8qIGNhbm5vdCBjb25zb2xpZGF0ZSB0b3AgbGV2ZWwgKi8KKwkvKiBmaXJzdCwgYnVpbGQgc3RhY2sgb2YgYW5jZXN0b3JzIGJldHdlZW4gcm9vdCBhbmQgY3VycmVudCBub2RlICovCisJcGFyZW50X3N0YWNrWzBdID0gdC0+cm9vdDsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWogPSBHRVRfTklCQkxFKGksIGVudHJ5LT5rZXlfc2hhMSk7CisJCXBhcmVudF9zdGFja1tpICsgMV0gPSBDTFJfUFRSX1RZUEUocGFyZW50X3N0YWNrW2ldLT5hW2pdKTsKKwl9CisJYXNzZXJ0KGkgPT0gbiAmJiBwYXJlbnRfc3RhY2tbaV0gPT0gdHJlZSk7CisJLyogbmV4dCwgdW53aW5kIHN0YWNrIHVudGlsIG5vdGVfdHJlZV9jb25zb2xpZGF0ZSgpIGlzIGRvbmUgKi8KKwl3aGlsZSAoaSA+IDAgJiYKKwkgICAgICAgIW5vdGVfdHJlZV9jb25zb2xpZGF0ZShwYXJlbnRfc3RhY2tbaV0sIHBhcmVudF9zdGFja1tpIC0gMV0sCisJCQkJICAgICAgR0VUX05JQkJMRShpIC0gMSwgZW50cnktPmtleV9zaGExKSkpCisJCWktLTsKK30KKworLyoKKyAqIFRvIGluc2VydCBhIGxlYWZfbm9kZToKKyAqIFNlYXJjaCB0byB0aGUgdHJlZSBsb2NhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIGxlYWZfbm9kZSdzIGtleToKKyAqIC0gSWYgbG9jYXRpb24gaXMgdW51c2VkIChOVUxMKSwgc3RvcmUgdGhlIHR3ZWFrZWQgcG9pbnRlciBkaXJlY3RseSB0aGVyZQorICogLSBJZiBsb2NhdGlvbiBob2xkcyBhIG5vdGUgZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBub3RlLXRvLWJlLWluc2VydGVkLCB0aGVuCisgKiAgIGNvbWJpbmUgdGhlIHR3byBub3RlcyAoYnkgY2FsbGluZyB0aGUgZ2l2ZW4gY29tYmluZV9ub3RlcyBmdW5jdGlvbikuCisgKiAtIElmIGxvY2F0aW9uIGhvbGRzIGEgbm90ZSBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIHN1YnRyZWUtdG8tYmUtaW5zZXJ0ZWQsCisgKiAgIHRoZW4gdW5wYWNrIHRoZSBzdWJ0cmVlLXRvLWJlLWluc2VydGVkIGludG8gdGhlIGxvY2F0aW9uLgorICogLSBJZiBsb2NhdGlvbiBob2xkcyBhIG1hdGNoaW5nIHN1YnRyZWUgZW50cnksIHVucGFjayB0aGUgc3VidHJlZSBhdCB0aGF0CisgKiAgIGxvY2F0aW9uLCBhbmQgcmVzdGFydCB0aGUgaW5zZXJ0IG9wZXJhdGlvbiBmcm9tIHRoYXQgbGV2ZWwuCisgKiAtIEVsc2UsIGNyZWF0ZSBhIG5ldyBpbnRfbm9kZSwgaG9sZGluZyBib3RoIHRoZSBub2RlLWF0LWxvY2F0aW9uIGFuZCB0aGUKKyAqICAgbm9kZS10by1iZS1pbnNlcnRlZCwgYW5kIHN0b3JlIHRoZSBuZXcgaW50X25vZGUgaW50byB0aGUgbG9jYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgbm90ZV90cmVlX2luc2VydChzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IGludF9ub2RlICp0cmVlLAorCQl1bnNpZ25lZCBjaGFyIG4sIHN0cnVjdCBsZWFmX25vZGUgKmVudHJ5LCB1bnNpZ25lZCBjaGFyIHR5cGUsCisJCWNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3RlcykKK3sKKwlzdHJ1Y3QgaW50X25vZGUgKm5ld19ub2RlOworCXN0cnVjdCBsZWFmX25vZGUgKmw7CisJdm9pZCAqKnAgPSBub3RlX3RyZWVfc2VhcmNoKHQsICZ0cmVlLCAmbiwgZW50cnktPmtleV9zaGExKTsKKwlpbnQgcmV0ID0gMDsKKworCWFzc2VydChHRVRfUFRSX1RZUEUoZW50cnkpID09IDApOyAvKiBubyB0eXBlIGJpdHMgc2V0ICovCisJbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRSgqcCk7CisJc3dpdGNoIChHRVRfUFRSX1RZUEUoKnApKSB7CisJY2FzZSBQVFJfVFlQRV9OVUxMOgorCQlhc3NlcnQoISpwKTsKKwkJaWYgKGlzX251bGxfc2hhMShlbnRyeS0+dmFsX3NoYTEpKQorCQkJZnJlZShlbnRyeSk7CisJCWVsc2UKKwkJCSpwID0gU0VUX1BUUl9UWVBFKGVudHJ5LCB0eXBlKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBQVFJfVFlQRV9OT1RFOgorCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBQVFJfVFlQRV9OT1RFOgorCQkJaWYgKCFoYXNoY21wKGwtPmtleV9zaGExLCBlbnRyeS0+a2V5X3NoYTEpKSB7CisJCQkJLyogc2tpcCBjb25jYXRlbmF0aW9uIGlmIGwgPT0gZW50cnkgKi8KKwkJCQlpZiAoIWhhc2hjbXAobC0+dmFsX3NoYTEsIGVudHJ5LT52YWxfc2hhMSkpCisJCQkJCXJldHVybiAwOworCisJCQkJcmV0ID0gY29tYmluZV9ub3RlcyhsLT52YWxfc2hhMSwKKwkJCQkJCSAgICBlbnRyeS0+dmFsX3NoYTEpOworCQkJCWlmICghcmV0ICYmIGlzX251bGxfc2hhMShsLT52YWxfc2hhMSkpCisJCQkJCW5vdGVfdHJlZV9yZW1vdmUodCwgdHJlZSwgbiwgZW50cnkpOworCQkJCWZyZWUoZW50cnkpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQVFJfVFlQRV9TVUJUUkVFOgorCQkJaWYgKCFTVUJUUkVFX1NIQTFfUFJFRklYQ01QKGwtPmtleV9zaGExLAorCQkJCQkJICAgIGVudHJ5LT5rZXlfc2hhMSkpIHsKKwkJCQkvKiB1bnBhY2sgJ2VudHJ5JyAqLworCQkJCWxvYWRfc3VidHJlZSh0LCBlbnRyeSwgdHJlZSwgbik7CisJCQkJZnJlZShlbnRyeSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCWlmICghU1VCVFJFRV9TSEExX1BSRUZJWENNUChlbnRyeS0+a2V5X3NoYTEsIGwtPmtleV9zaGExKSkgeworCQkJLyogdW5wYWNrICdsJyBhbmQgcmVzdGFydCBpbnNlcnQgKi8KKwkJCSpwID0gTlVMTDsKKwkJCWxvYWRfc3VidHJlZSh0LCBsLCB0cmVlLCBuKTsKKwkJCWZyZWUobCk7CisJCQlyZXR1cm4gbm90ZV90cmVlX2luc2VydCh0LCB0cmVlLCBuLCBlbnRyeSwgdHlwZSwKKwkJCQkJCWNvbWJpbmVfbm90ZXMpOworCQl9CisJCWJyZWFrOworCX0KKworCS8qIG5vbi1tYXRjaGluZyBsZWFmX25vZGUgKi8KKwlhc3NlcnQoR0VUX1BUUl9UWVBFKCpwKSA9PSBQVFJfVFlQRV9OT1RFIHx8CisJICAgICAgIEdFVF9QVFJfVFlQRSgqcCkgPT0gUFRSX1RZUEVfU1VCVFJFRSk7CisJaWYgKGlzX251bGxfc2hhMShlbnRyeS0+dmFsX3NoYTEpKSB7IC8qIHNraXAgaW5zZXJ0aW9uIG9mIGVtcHR5IG5vdGUgKi8KKwkJZnJlZShlbnRyeSk7CisJCXJldHVybiAwOworCX0KKwluZXdfbm9kZSA9IChzdHJ1Y3QgaW50X25vZGUgKikgeGNhbGxvYyhzaXplb2Yoc3RydWN0IGludF9ub2RlKSwgMSk7CisJcmV0ID0gbm90ZV90cmVlX2luc2VydCh0LCBuZXdfbm9kZSwgbiArIDEsIGwsIEdFVF9QVFJfVFlQRSgqcCksCisJCQkgICAgICAgY29tYmluZV9ub3Rlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkqcCA9IFNFVF9QVFJfVFlQRShuZXdfbm9kZSwgUFRSX1RZUEVfSU5URVJOQUwpOworCXJldHVybiBub3RlX3RyZWVfaW5zZXJ0KHQsIG5ld19ub2RlLCBuICsgMSwgZW50cnksIHR5cGUsIGNvbWJpbmVfbm90ZXMpOworfQorCisvKiBGcmVlIHRoZSBlbnRpcmUgbm90ZXMgZGF0YSBjb250YWluZWQgaW4gdGhlIGdpdmVuIHRyZWUgKi8KK3N0YXRpYyB2b2lkIG5vdGVfdHJlZV9mcmVlKHN0cnVjdCBpbnRfbm9kZSAqdHJlZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQl2b2lkICpwID0gdHJlZS0+YVtpXTsKKwkJc3dpdGNoIChHRVRfUFRSX1RZUEUocCkpIHsKKwkJY2FzZSBQVFJfVFlQRV9JTlRFUk5BTDoKKwkJCW5vdGVfdHJlZV9mcmVlKENMUl9QVFJfVFlQRShwKSk7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBQVFJfVFlQRV9OT1RFOgorCQljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCQlmcmVlKENMUl9QVFJfVFlQRShwKSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgcGFydGlhbCBTSEExIGhleCBzdHJpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcGFydGlhbCBTSEExIHZhbHVlLgorICogLSBoZXggICAgICAtIFBhcnRpYWwgU0hBMSBzZWdtZW50IGluIEFTQ0lJIGhleCBmb3JtYXQKKyAqIC0gaGV4X2xlbiAgLSBMZW5ndGggb2YgYWJvdmUgc2VnbWVudC4gTXVzdCBiZSBtdWx0aXBsZSBvZiAyIGJldHdlZW4gMCBhbmQgNDAKKyAqIC0gc2hhMSAgICAgLSBQYXJ0aWFsIFNIQTEgdmFsdWUgaXMgd3JpdHRlbiBoZXJlCisgKiAtIHNoYTFfbGVuIC0gTWF4ICNieXRlcyB0byBzdG9yZSBpbiBzaGExLCBNdXN0IGJlID49IGhleF9sZW4gLyAyLCBhbmQgPCAyMAorICogUmV0dXJucyAtMSBvbiBlcnJvciAoaW52YWxpZCBhcmd1bWVudHMgb3IgaW52YWxpZCBTSEExIChub3QgaW4gaGV4IGZvcm1hdCkpLgorICogT3RoZXJ3aXNlLCByZXR1cm5zIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHNoYTEgKGkuZS4gaGV4X2xlbiAvIDIpLgorICogUGFkcyBzaGExIHdpdGggTlVMcyB1cCB0byBzaGExX2xlbiAobm90IGluY2x1ZGVkIGluIHJldHVybmVkIGxlbmd0aCkuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3NoYTFfaGV4X3NlZ21lbnQoY29uc3QgY2hhciAqaGV4LCB1bnNpZ25lZCBpbnQgaGV4X2xlbiwKKwkJdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgaW50IHNoYTFfbGVuKQoreworCXVuc2lnbmVkIGludCBpLCBsZW4gPSBoZXhfbGVuID4+IDE7CisJaWYgKGhleF9sZW4gJSAyICE9IDAgfHwgbGVuID4gc2hhMV9sZW4pCisJCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHZhbCA9IChoZXh2YWwoaGV4WzBdKSA8PCA0KSB8IGhleHZhbChoZXhbMV0pOworCQlpZiAodmFsICYgfjB4ZmYpCisJCQlyZXR1cm4gLTE7CisJCSpzaGExKysgPSB2YWw7CisJCWhleCArPSAyOworCX0KKwlmb3IgKDsgaSA8IHNoYTFfbGVuOyBpKyspCisJCSpzaGExKysgPSAwOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgbm9uX25vdGVfY21wKGNvbnN0IHN0cnVjdCBub25fbm90ZSAqYSwgY29uc3Qgc3RydWN0IG5vbl9ub3RlICpiKQoreworCXJldHVybiBzdHJjbXAoYS0+cGF0aCwgYi0+cGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9ub25fbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgY2hhciAqcGF0aCwKKwkJdW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG5vbl9ub3RlICpwID0gdC0+cHJldl9ub25fbm90ZSwgKm47CisJbiA9IChzdHJ1Y3Qgbm9uX25vdGUgKikgeG1hbGxvYyhzaXplb2Yoc3RydWN0IG5vbl9ub3RlKSk7CisJbi0+bmV4dCA9IE5VTEw7CisJbi0+cGF0aCA9IHhzdHJkdXAocGF0aCk7CisJbi0+bW9kZSA9IG1vZGU7CisJaGFzaGNweShuLT5zaGExLCBzaGExKTsKKwl0LT5wcmV2X25vbl9ub3RlID0gbjsKKworCWlmICghdC0+Zmlyc3Rfbm9uX25vdGUpIHsKKwkJdC0+Zmlyc3Rfbm9uX25vdGUgPSBuOworCQlyZXR1cm47CisJfQorCisJaWYgKG5vbl9ub3RlX2NtcChwLCBuKSA8IDApCisJCTsgLyogZG8gbm90aGluZyAgKi8KKwllbHNlIGlmIChub25fbm90ZV9jbXAodC0+Zmlyc3Rfbm9uX25vdGUsIG4pIDw9IDApCisJCXAgPSB0LT5maXJzdF9ub25fbm90ZTsKKwllbHNlIHsKKwkJLyogbiBzb3J0cyBiZWZvcmUgdC0+Zmlyc3Rfbm9uX25vdGUgKi8KKwkJbi0+bmV4dCA9IHQtPmZpcnN0X25vbl9ub3RlOworCQl0LT5maXJzdF9ub25fbm90ZSA9IG47CisJCXJldHVybjsKKwl9CisKKwkvKiBuIHNvcnRzIGVxdWFsIG9yIGFmdGVyIHAgKi8KKwl3aGlsZSAocC0+bmV4dCAmJiBub25fbm90ZV9jbXAocC0+bmV4dCwgbikgPD0gMCkKKwkJcCA9IHAtPm5leHQ7CisKKwlpZiAobm9uX25vdGVfY21wKHAsIG4pID09IDApIHsgLyogbiB+PSBwOyBvdmVyd3JpdGUgcCB3aXRoIG4gKi8KKwkJYXNzZXJ0KHN0cmNtcChwLT5wYXRoLCBuLT5wYXRoKSA9PSAwKTsKKwkJcC0+bW9kZSA9IG4tPm1vZGU7CisJCWhhc2hjcHkocC0+c2hhMSwgbi0+c2hhMSk7CisJCWZyZWUobik7CisJCXQtPnByZXZfbm9uX25vdGUgPSBwOworCQlyZXR1cm47CisJfQorCisJLyogbiBzb3J0cyBiZXR3ZWVuIHAgYW5kIHAtPm5leHQgKi8KKwluLT5uZXh0ID0gcC0+bmV4dDsKKwlwLT5uZXh0ID0gbjsKK30KKworc3RhdGljIHZvaWQgbG9hZF9zdWJ0cmVlKHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgbGVhZl9ub2RlICpzdWJ0cmVlLAorCQlzdHJ1Y3QgaW50X25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuKQoreworCXVuc2lnbmVkIGNoYXIgb2JqZWN0X3NoYTFbMjBdOworCXVuc2lnbmVkIGludCBwcmVmaXhfbGVuOworCXZvaWQgKmJ1ZjsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IGxlbiwgcGF0aF9sZW47CisJdW5zaWduZWQgY2hhciB0eXBlOworCXN0cnVjdCBsZWFmX25vZGUgKmw7CisKKwlidWYgPSBmaWxsX3RyZWVfZGVzY3JpcHRvcigmZGVzYywgc3VidHJlZS0+dmFsX3NoYTEpOworCWlmICghYnVmKQorCQlkaWUoIkNvdWxkIG5vdCByZWFkICVzIGZvciBub3Rlcy1pbmRleCIsCisJCSAgICAgc2hhMV90b19oZXgoc3VidHJlZS0+dmFsX3NoYTEpKTsKKworCXByZWZpeF9sZW4gPSBzdWJ0cmVlLT5rZXlfc2hhMVsxOV07CisJYXNzZXJ0KHByZWZpeF9sZW4gKiAyID49IG4pOworCW1lbWNweShvYmplY3Rfc2hhMSwgc3VidHJlZS0+a2V5X3NoYTEsIHByZWZpeF9sZW4pOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCXBhdGhfbGVuID0gc3RybGVuKGVudHJ5LnBhdGgpOworCQlsZW4gPSBnZXRfc2hhMV9oZXhfc2VnbWVudChlbnRyeS5wYXRoLCBwYXRoX2xlbiwKKwkJCQlvYmplY3Rfc2hhMSArIHByZWZpeF9sZW4sIDIwIC0gcHJlZml4X2xlbik7CisJCWlmIChsZW4gPCAwKQorCQkJZ290byBoYW5kbGVfbm9uX25vdGU7IC8qIGVudHJ5LnBhdGggaXMgbm90IGEgU0hBMSAqLworCQlsZW4gKz0gcHJlZml4X2xlbjsKKworCQkvKgorCQkgKiBJZiBvYmplY3QgU0hBMSBpcyBjb21wbGV0ZSAobGVuID09IDIwKSwgYXNzdW1lIG5vdGUgb2JqZWN0CisJCSAqIElmIG9iamVjdCBTSEExIGlzIGluY29tcGxldGUgKGxlbiA8IDIwKSwgYW5kIGN1cnJlbnQKKwkJICogY29tcG9uZW50IGNvbnNpc3RzIG9mIDIgaGV4IGNoYXJzLCBhc3N1bWUgbm90ZSBzdWJ0cmVlCisJCSAqLworCQlpZiAobGVuIDw9IDIwKSB7CisJCQl0eXBlID0gUFRSX1RZUEVfTk9URTsKKwkJCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKQorCQkJCXhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWFmX25vZGUpLCAxKTsKKwkJCWhhc2hjcHkobC0+a2V5X3NoYTEsIG9iamVjdF9zaGExKTsKKwkJCWhhc2hjcHkobC0+dmFsX3NoYTEsIGVudHJ5LnNoYTEpOworCQkJaWYgKGxlbiA8IDIwKSB7CisJCQkJaWYgKCFTX0lTRElSKGVudHJ5Lm1vZGUpIHx8IHBhdGhfbGVuICE9IDIpCisJCQkJCWdvdG8gaGFuZGxlX25vbl9ub3RlOyAvKiBub3Qgc3VidHJlZSAqLworCQkJCWwtPmtleV9zaGExWzE5XSA9ICh1bnNpZ25lZCBjaGFyKSBsZW47CisJCQkJdHlwZSA9IFBUUl9UWVBFX1NVQlRSRUU7CisJCQl9CisJCQlpZiAobm90ZV90cmVlX2luc2VydCh0LCBub2RlLCBuLCBsLCB0eXBlLAorCQkJCQkgICAgIGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUpKQorCQkJCWRpZSgiRmFpbGVkIHRvIGxvYWQgJXMgJXMgaW50byBub3RlcyB0cmVlICIKKwkJCQkgICAgImZyb20gJXMiLAorCQkJCSAgICB0eXBlID09IFBUUl9UWVBFX05PVEUgPyAibm90ZSIgOiAic3VidHJlZSIsCisJCQkJICAgIHNoYTFfdG9faGV4KGwtPmtleV9zaGExKSwgdC0+cmVmKTsKKwkJfQorCQljb250aW51ZTsKKworaGFuZGxlX25vbl9ub3RlOgorCQkvKgorCQkgKiBEZXRlcm1pbmUgZnVsbCBwYXRoIGZvciB0aGlzIG5vbi1ub3RlIGVudHJ5OgorCQkgKiBUaGUgZmlsZW5hbWUgaXMgYWxyZWFkeSBmb3VuZCBpbiBlbnRyeS5wYXRoLCBidXQgdGhlCisJCSAqIGRpcmVjdG9yeSBwYXJ0IG9mIHRoZSBwYXRoIG11c3QgYmUgZGVkdWNlZCBmcm9tIHRoZSBzdWJ0cmVlCisJCSAqIGNvbnRhaW5pbmcgdGhpcyBlbnRyeS4gV2UgYXNzdW1lIGhlcmUgdGhhdCB0aGUgb3ZlcmFsbCBub3RlcworCQkgKiB0cmVlIGZvbGxvd3MgYSBzdHJpY3QgYnl0ZS1iYXNlZCBwcm9ncmVzc2l2ZSBmYW5vdXQKKwkJICogc3RydWN0dXJlIChpLmUuIHVzaW5nIDIvMzgsIDIvMi8zNiwgZXRjLiBmYW5vdXRzLCBhbmQgbm90CisJCSAqIGUuZy4gNC8zNiBmYW5vdXQpLiBUaGlzIG1lYW5zIHRoYXQgaWYgYSBub24tbm90ZSBpcyBmb3VuZCBhdAorCQkgKiBwYXRoICJkZWFkL2JlZWYiLCB0aGUgZm9sbG93aW5nIGNvZGUgd2lsbCByZWdpc3RlciBpdCBhcworCQkgKiBiZWluZyBmb3VuZCBvbiAiZGUvYWQvYmVlZiIuCisJCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UgdXNlIHN1Y2ggbm9uLW9idmlvdXMgbm9uLW5vdGUKKwkJICogcGF0aHMgaW4gdGhlIG1pZGRsZSBvZiBhIG5vdGVzIHRyZWUsIHlvdSBkZXNlcnZlIHdoYXQncworCQkgKiBjb21pbmcgdG8geW91IDspLiBOb3RlIHRoYXQgZm9yIG5vbi1ub3RlcyB0aGF0IGFyZSBub3QKKwkJICogU0hBMS1saWtlIGF0IHRoZSB0b3AgbGV2ZWwsIHRoZXJlIHdpbGwgYmUgbm8gcHJvYmxlbXMuCisJCSAqCisJCSAqIFRvIGNvbmNsdWRlLCBpdCBpcyBzdHJvbmdseSBhZHZpc2VkIHRvIG1ha2Ugc3VyZSBub24tbm90ZXMKKwkJICogaGF2ZSBhdCBsZWFzdCBvbmUgbm9uLWhleCBjaGFyYWN0ZXIgaW4gdGhlIHRvcC1sZXZlbCBwYXRoCisJCSAqIGNvbXBvbmVudC4KKwkJICovCisJCXsKKwkJCWNoYXIgbm9uX25vdGVfcGF0aFtQQVRIX01BWF07CisJCQljaGFyICpwID0gbm9uX25vdGVfcGF0aDsKKwkJCWNvbnN0IGNoYXIgKnEgPSBzaGExX3RvX2hleChzdWJ0cmVlLT5rZXlfc2hhMSk7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcmVmaXhfbGVuOyBpKyspIHsKKwkJCQkqcCsrID0gKnErKzsKKwkJCQkqcCsrID0gKnErKzsKKwkJCQkqcCsrID0gJy8nOworCQkJfQorCQkJc3RyY3B5KHAsIGVudHJ5LnBhdGgpOworCQkJYWRkX25vbl9ub3RlKHQsIG5vbl9ub3RlX3BhdGgsIGVudHJ5Lm1vZGUsIGVudHJ5LnNoYTEpOworCQl9CisJfQorCWZyZWUoYnVmKTsKK30KKworLyoKKyAqIERldGVybWluZSBvcHRpbWFsIG9uLWRpc2sgZmFub3V0IGZvciB0aGlzIHBhcnQgb2YgdGhlIG5vdGVzIHRyZWUKKyAqCisgKiBHaXZlbiBhIChzdWIpdHJlZSBhbmQgdGhlIGxldmVsIGluIHRoZSBpbnRlcm5hbCB0cmVlIHN0cnVjdHVyZSwgZGV0ZXJtaW5lCisgKiB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gZXhpc3RpbmcgZmFub3V0IHNob3VsZCBiZSBleHBhbmRlZCBmb3IgdGhpcworICogKHN1Yil0cmVlLgorICoKKyAqIFZhbHVlcyBvZiB0aGUgJ2Zhbm91dCcgdmFyaWFibGU6CisgKiAtIDA6IE5vIGZhbm91dCAoYWxsIG5vdGVzIGFyZSBzdG9yZWQgZGlyZWN0bHkgaW4gdGhlIHJvb3Qgbm90ZXMgdHJlZSkKKyAqIC0gMTogMi8zOCBmYW5vdXQKKyAqIC0gMjogMi8yLzM2IGZhbm91dAorICogLSAzOiAyLzIvMi8zNCBmYW5vdXQKKyAqIGV0Yy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGV0ZXJtaW5lX2Zhbm91dChzdHJ1Y3QgaW50X25vZGUgKnRyZWUsIHVuc2lnbmVkIGNoYXIgbiwKKwkJdW5zaWduZWQgY2hhciBmYW5vdXQpCit7CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGlzIGEgc2ltcGxlIGhldXJpc3RpYyB0aGF0IHdvcmtzIHdlbGwgaW4gcHJhY3RpY2U6CisJICogRm9yIGVhY2ggZXZlbi1udW1iZXJlZCAxNi10cmVlIGxldmVsIChyZW1lbWJlciB0aGF0IGVhY2ggb24tZGlzaworCSAqIGZhbm91dCBsZXZlbCBjb3JyZXNwb25kcyB0byBfdHdvXyAxNi10cmVlIGxldmVscyksIHBlZWsgYXQgYWxsIDE2CisJICogZW50cmllcyBhdCB0aGF0IHRyZWUgbGV2ZWwuIElmIGFsbCBvZiB0aGVtIGFyZSBlaXRoZXIgaW50X25vZGVzIG9yCisJICogc3VidHJlZSBlbnRyaWVzLCB0aGVuIHRoZXJlIGFyZSBsaWtlbHkgcGxlbnR5IG9mIG5vdGVzIGJlbG93IHRoaXMKKwkgKiBsZXZlbCwgc28gd2UgcmV0dXJuIGFuIGluY3JlbWVudGVkIGZhbm91dC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgaTsKKwlpZiAoKG4gJSAyKSB8fCAobiA+IDIgKiBmYW5vdXQpKQorCQlyZXR1cm4gZmFub3V0OworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXN3aXRjaCAoR0VUX1BUUl9UWVBFKHRyZWUtPmFbaV0pKSB7CisJCWNhc2UgUFRSX1RZUEVfU1VCVFJFRToKKwkJY2FzZSBQVFJfVFlQRV9JTlRFUk5BTDoKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIGZhbm91dDsKKwkJfQorCX0KKwlyZXR1cm4gZmFub3V0ICsgMTsKK30KKworc3RhdGljIHZvaWQgY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJdW5zaWduZWQgY2hhciBmYW5vdXQsIGNoYXIgKnBhdGgpCit7CisJdW5zaWduZWQgaW50IGkgPSAwLCBqID0gMDsKKwljb25zdCBjaGFyICpoZXhfc2hhMSA9IHNoYTFfdG9faGV4KHNoYTEpOworCWFzc2VydChmYW5vdXQgPCAyMCk7CisJd2hpbGUgKGZhbm91dCkgeworCQlwYXRoW2krK10gPSBoZXhfc2hhMVtqKytdOworCQlwYXRoW2krK10gPSBoZXhfc2hhMVtqKytdOworCQlwYXRoW2krK10gPSAnLyc7CisJCWZhbm91dC0tOworCX0KKwlzdHJjcHkocGF0aCArIGksIGhleF9zaGExICsgaik7Cit9CisKK3N0YXRpYyBpbnQgZm9yX2VhY2hfbm90ZV9oZWxwZXIoc3RydWN0IG5vdGVzX3RyZWUgKnQsIHN0cnVjdCBpbnRfbm9kZSAqdHJlZSwKKwkJdW5zaWduZWQgY2hhciBuLCB1bnNpZ25lZCBjaGFyIGZhbm91dCwgaW50IGZsYWdzLAorCQllYWNoX25vdGVfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJdW5zaWduZWQgaW50IGk7CisJdm9pZCAqcDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbGVhZl9ub2RlICpsOworCXN0YXRpYyBjaGFyIHBhdGhbNDAgKyAxOSArIDFdOyAgLyogaGV4IFNIQTEgKyAxOSAqICcvJyArIE5VTCAqLworCisJZmFub3V0ID0gZGV0ZXJtaW5lX2Zhbm91dCh0cmVlLCBuLCBmYW5vdXQpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CityZWRvOgorCQlwID0gdHJlZS0+YVtpXTsKKwkJc3dpdGNoIChHRVRfUFRSX1RZUEUocCkpIHsKKwkJY2FzZSBQVFJfVFlQRV9JTlRFUk5BTDoKKwkJCS8qIHJlY3Vyc2UgaW50byBpbnRfbm9kZSAqLworCQkJcmV0ID0gZm9yX2VhY2hfbm90ZV9oZWxwZXIodCwgQ0xSX1BUUl9UWVBFKHApLCBuICsgMSwKKwkJCQlmYW5vdXQsIGZsYWdzLCBmbiwgY2JfZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBQVFJfVFlQRV9TVUJUUkVFOgorCQkJbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRShwKTsKKwkJCS8qCisJCQkgKiBTdWJ0cmVlIGVudHJpZXMgaW4gdGhlIG5vdGUgdHJlZSByZXByZXNlbnQgcGFydHMgb2YKKwkJCSAqIHRoZSBub3RlIHRyZWUgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBleHBsb3JlZC4gVGhlcmUKKwkJCSAqIGlzIGEgZGlyZWN0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHN1YnRyZWUgZW50cmllcyBhdAorCQkJICogbGV2ZWwgJ24nIGluIHRoZSB0cmVlLCBhbmQgdGhlICdmYW5vdXQnIHZhcmlhYmxlOgorCQkJICogU3VidHJlZSBlbnRyaWVzIGF0IGxldmVsICduIDw9IDIgKiBmYW5vdXQnIHNob3VsZCBiZQorCQkJICogcHJlc2VydmVkLCBzaW5jZSB0aGV5IGNvcnJlc3BvbmQgZXhhY3RseSB0byBhIGZhbm91dAorCQkJICogZGlyZWN0b3J5IGluIHRoZSBvbi1kaXNrIHN0cnVjdHVyZS4gSG93ZXZlciwgc3VidHJlZQorCQkJICogZW50cmllcyBhdCBsZXZlbCAnbiA+IDIgKiBmYW5vdXQnIHNob3VsZCBOT1QgYmUKKwkJCSAqIHByZXNlcnZlZCwgYnV0IHJhdGhlciBjb25zb2xpZGF0ZWQgaW50byB0aGUgYWJvdmUKKwkJCSAqIG5vdGVzIHRyZWUgbGV2ZWwuIFdlIGFjaGlldmUgdGhpcyBieSB1bmNvbmRpdGlvbmFsbHkKKwkJCSAqIHVucGFja2luZyBzdWJ0cmVlIGVudHJpZXMgdGhhdCBleGlzdCBiZWxvdyB0aGUKKwkJCSAqIHRocmVzaG9sZCBsZXZlbCBhdCAnbiA9IDIgKiBmYW5vdXQnLgorCQkJICovCisJCQlpZiAobiA8PSAyICogZmFub3V0ICYmCisJCQkgICAgZmxhZ3MgJiBGT1JfRUFDSF9OT1RFX1lJRUxEX1NVQlRSRUVTKSB7CisJCQkJLyogaW52b2tlIGNhbGxiYWNrIHdpdGggc3VidHJlZSAqLworCQkJCXVuc2lnbmVkIGludCBwYXRoX2xlbiA9CisJCQkJCWwtPmtleV9zaGExWzE5XSAqIDIgKyBmYW5vdXQ7CisJCQkJYXNzZXJ0KHBhdGhfbGVuIDwgNDAgKyAxOSk7CisJCQkJY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQobC0+a2V5X3NoYTEsIGZhbm91dCwKKwkJCQkJCQkgICBwYXRoKTsKKwkJCQkvKiBDcmVhdGUgdHJhaWxpbmcgc2xhc2gsIGlmIG5lZWRlZCAqLworCQkJCWlmIChwYXRoW3BhdGhfbGVuIC0gMV0gIT0gJy8nKQorCQkJCQlwYXRoW3BhdGhfbGVuKytdID0gJy8nOworCQkJCXBhdGhbcGF0aF9sZW5dID0gJ1wwJzsKKwkJCQlyZXQgPSBmbihsLT5rZXlfc2hhMSwgbC0+dmFsX3NoYTEsIHBhdGgsCisJCQkJCSBjYl9kYXRhKTsKKwkJCX0KKwkJCWlmIChuID4gZmFub3V0ICogMiB8fAorCQkJICAgICEoZmxhZ3MgJiBGT1JfRUFDSF9OT1RFX0RPTlRfVU5QQUNLX1NVQlRSRUVTKSkgeworCQkJCS8qIHVucGFjayBzdWJ0cmVlIGFuZCByZXN1bWUgdHJhdmVyc2FsICovCisJCQkJdHJlZS0+YVtpXSA9IE5VTEw7CisJCQkJbG9hZF9zdWJ0cmVlKHQsIGwsIHRyZWUsIG4pOworCQkJCWZyZWUobCk7CisJCQkJZ290byByZWRvOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUFRSX1RZUEVfTk9URToKKwkJCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUocCk7CisJCQljb25zdHJ1Y3RfcGF0aF93aXRoX2Zhbm91dChsLT5rZXlfc2hhMSwgZmFub3V0LCBwYXRoKTsKKwkJCXJldCA9IGZuKGwtPmtleV9zaGExLCBsLT52YWxfc2hhMSwgcGF0aCwgY2JfZGF0YSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB0cmVlX3dyaXRlX3N0YWNrIHsKKwlzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqbmV4dDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKKwljaGFyIHBhdGhbMl07IC8qIHBhdGggdG8gc3VidHJlZSBpbiBuZXh0LCBpZiBhbnkgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hdGNoZXNfdHJlZV93cml0ZV9zdGFjayhzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqdHdzLAorCQljb25zdCBjaGFyICpmdWxsX3BhdGgpCit7CisJcmV0dXJuICBmdWxsX3BhdGhbMF0gPT0gdHdzLT5wYXRoWzBdICYmCisJCWZ1bGxfcGF0aFsxXSA9PSB0d3MtPnBhdGhbMV0gJiYKKwkJZnVsbF9wYXRoWzJdID09ICcvJzsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfdHJlZV9lbnRyeShzdHJ1Y3Qgc3RyYnVmICpidWYsIHVuc2lnbmVkIGludCBtb2RlLAorCQljb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgcGF0aF9sZW4sIGNvbnN0CisJCXVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RyYnVmX2FkZGYoYnVmLCAiJW8gJS4qcyVjIiwgbW9kZSwgcGF0aF9sZW4sIHBhdGgsICdcMCcpOworCXN0cmJ1Zl9hZGQoYnVmLCBzaGExLCAyMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRyZWVfd3JpdGVfc3RhY2tfaW5pdF9zdWJ0cmVlKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICp0d3MsCisJCWNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgKm47CisJYXNzZXJ0KCF0d3MtPm5leHQpOworCWFzc2VydCh0d3MtPnBhdGhbMF0gPT0gJ1wwJyAmJiB0d3MtPnBhdGhbMV0gPT0gJ1wwJyk7CisJbiA9IChzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqKQorCQl4bWFsbG9jKHNpemVvZihzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjaykpOworCW4tPm5leHQgPSBOVUxMOworCXN0cmJ1Zl9pbml0KCZuLT5idWYsIDI1NiAqICgzMiArIDQwKSk7IC8qIGFzc3VtZSAyNTYgZW50cmllcyBwZXIgdHJlZSAqLworCW4tPnBhdGhbMF0gPSBuLT5wYXRoWzFdID0gJ1wwJzsKKwl0d3MtPm5leHQgPSBuOworCXR3cy0+cGF0aFswXSA9IHBhdGhbMF07CisJdHdzLT5wYXRoWzFdID0gcGF0aFsxXTsKK30KKworc3RhdGljIGludCB0cmVlX3dyaXRlX3N0YWNrX2ZpbmlzaF9zdWJ0cmVlKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICp0d3MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqbiA9IHR3cy0+bmV4dDsKKwl1bnNpZ25lZCBjaGFyIHNbMjBdOworCWlmIChuKSB7CisJCXJldCA9IHRyZWVfd3JpdGVfc3RhY2tfZmluaXNoX3N1YnRyZWUobik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSB3cml0ZV9zaGExX2ZpbGUobi0+YnVmLmJ1Ziwgbi0+YnVmLmxlbiwgdHJlZV90eXBlLCBzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuLT5idWYpOworCQlmcmVlKG4pOworCQl0d3MtPm5leHQgPSBOVUxMOworCQl3cml0ZV90cmVlX2VudHJ5KCZ0d3MtPmJ1ZiwgMDQwMDAwLCB0d3MtPnBhdGgsIDIsIHMpOworCQl0d3MtPnBhdGhbMF0gPSB0d3MtPnBhdGhbMV0gPSAnXDAnOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9lYWNoX25vdGVfaGVscGVyKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICp0d3MsCisJCWNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBtb2RlLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXNpemVfdCBwYXRoX2xlbiA9IHN0cmxlbihwYXRoKTsKKwl1bnNpZ25lZCBpbnQgbiA9IDA7CisJaW50IHJldDsKKworCS8qIERldGVybWluZSBjb21tb24gcGFydCBvZiB0cmVlIHdyaXRlIHN0YWNrICovCisJd2hpbGUgKHR3cyAmJiAzICogbiA8IHBhdGhfbGVuICYmCisJICAgICAgIG1hdGNoZXNfdHJlZV93cml0ZV9zdGFjayh0d3MsIHBhdGggKyAzICogbikpIHsKKwkJbisrOworCQl0d3MgPSB0d3MtPm5leHQ7CisJfQorCisJLyogdHdzIHBvaW50IHRvIGxhc3QgbWF0Y2hpbmcgdHJlZV93cml0ZV9zdGFjayBlbnRyeSAqLworCXJldCA9IHRyZWVfd3JpdGVfc3RhY2tfZmluaXNoX3N1YnRyZWUodHdzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU3RhcnQgc3VidHJlZXMgbmVlZGVkIHRvIHNhdGlzZnkgcGF0aCAqLworCXdoaWxlICgzICogbiArIDIgPCBwYXRoX2xlbiAmJiBwYXRoWzMgKiBuICsgMl0gPT0gJy8nKSB7CisJCXRyZWVfd3JpdGVfc3RhY2tfaW5pdF9zdWJ0cmVlKHR3cywgcGF0aCArIDMgKiBuKTsKKwkJbisrOworCQl0d3MgPSB0d3MtPm5leHQ7CisJfQorCisJLyogVGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgZGlyZWN0b3J5IGNvbXBvbmVudHMgaW4gdGhlIGdpdmVuIHBhdGggKi8KKwlhc3NlcnQobWVtY2hyKHBhdGggKyAzICogbiwgJy8nLCBwYXRoX2xlbiAtICgzICogbikpID09IE5VTEwpOworCisJLyogRmluYWxseSBhZGQgZ2l2ZW4gZW50cnkgdG8gdGhlIGN1cnJlbnQgdHJlZSBvYmplY3QgKi8KKwl3cml0ZV90cmVlX2VudHJ5KCZ0d3MtPmJ1ZiwgbW9kZSwgcGF0aCArIDMgKiBuLCBwYXRoX2xlbiAtICgzICogbiksCisJCQkgc2hhMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHdyaXRlX2VhY2hfbm90ZV9kYXRhIHsKKwlzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqcm9vdDsKKwlzdHJ1Y3Qgbm9uX25vdGUgKm5leHRfbm9uX25vdGU7Cit9OworCitzdGF0aWMgaW50IHdyaXRlX2VhY2hfbm9uX25vdGVfdW50aWwoY29uc3QgY2hhciAqbm90ZV9wYXRoLAorCQlzdHJ1Y3Qgd3JpdGVfZWFjaF9ub3RlX2RhdGEgKmQpCit7CisJc3RydWN0IG5vbl9ub3RlICpuID0gZC0+bmV4dF9ub25fbm90ZTsKKwlpbnQgY21wID0gMCwgcmV0OworCXdoaWxlIChuICYmICghbm90ZV9wYXRoIHx8IChjbXAgPSBzdHJjbXAobi0+cGF0aCwgbm90ZV9wYXRoKSkgPD0gMCkpIHsKKwkJaWYgKG5vdGVfcGF0aCAmJiBjbXAgPT0gMCkKKwkJCTsgLyogZG8gbm90aGluZywgcHJlZmVyIG5vdGUgdG8gbm9uLW5vdGUgKi8KKwkJZWxzZSB7CisJCQlyZXQgPSB3cml0ZV9lYWNoX25vdGVfaGVscGVyKGQtPnJvb3QsIG4tPnBhdGgsIG4tPm1vZGUsCisJCQkJCQkgICAgIG4tPnNoYTEpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCW4gPSBuLT5uZXh0OworCX0KKwlkLT5uZXh0X25vbl9ub3RlID0gbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9lYWNoX25vdGUoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGVfc2hhMSwgY2hhciAqbm90ZV9wYXRoLAorCQl2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB3cml0ZV9lYWNoX25vdGVfZGF0YSAqZCA9CisJCShzdHJ1Y3Qgd3JpdGVfZWFjaF9ub3RlX2RhdGEgKikgY2JfZGF0YTsKKwlzaXplX3Qgbm90ZV9wYXRoX2xlbiA9IHN0cmxlbihub3RlX3BhdGgpOworCXVuc2lnbmVkIGludCBtb2RlID0gMDEwMDY0NDsKKworCWlmIChub3RlX3BhdGhbbm90ZV9wYXRoX2xlbiAtIDFdID09ICcvJykgeworCQkvKiBzdWJ0cmVlIGVudHJ5ICovCisJCW5vdGVfcGF0aF9sZW4tLTsKKwkJbm90ZV9wYXRoW25vdGVfcGF0aF9sZW5dID0gJ1wwJzsKKwkJbW9kZSA9IDA0MDAwMDsKKwl9CisJYXNzZXJ0KG5vdGVfcGF0aF9sZW4gPD0gNDAgKyAxOSk7CisKKwkvKiBXZWF2ZSBub24tbm90ZSBlbnRyaWVzIGludG8gbm90ZSBlbnRyaWVzICovCisJcmV0dXJuICB3cml0ZV9lYWNoX25vbl9ub3RlX3VudGlsKG5vdGVfcGF0aCwgZCkgfHwKKwkJd3JpdGVfZWFjaF9ub3RlX2hlbHBlcihkLT5yb290LCBub3RlX3BhdGgsIG1vZGUsIG5vdGVfc2hhMSk7Cit9CisKK3N0cnVjdCBub3RlX2RlbGV0ZV9saXN0IHsKKwlzdHJ1Y3Qgbm90ZV9kZWxldGVfbGlzdCAqbmV4dDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworfTsKKworc3RhdGljIGludCBwcnVuZV9ub3Rlc19oZWxwZXIoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGVfc2hhMSwgY2hhciAqbm90ZV9wYXRoLAorCQl2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBub3RlX2RlbGV0ZV9saXN0ICoqbCA9IChzdHJ1Y3Qgbm90ZV9kZWxldGVfbGlzdCAqKikgY2JfZGF0YTsKKwlzdHJ1Y3Qgbm90ZV9kZWxldGVfbGlzdCAqbjsKKworCWlmIChoYXNfc2hhMV9maWxlKG9iamVjdF9zaGExKSkKKwkJcmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gZG8gZm9yIHRoaXMgbm90ZSAqLworCisJLyogZmFpbGVkIHRvIGZpbmQgb2JqZWN0ID0+IHBydW5lIHRoaXMgbm90ZSAqLworCW4gPSAoc3RydWN0IG5vdGVfZGVsZXRlX2xpc3QgKikgeG1hbGxvYyhzaXplb2YoKm4pKTsKKwluLT5uZXh0ID0gKmw7CisJbi0+c2hhMSA9IG9iamVjdF9zaGExOworCSpsID0gbjsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUodW5zaWduZWQgY2hhciAqY3VyX3NoYTEsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExKQoreworCWNoYXIgKmN1cl9tc2cgPSBOVUxMLCAqbmV3X21zZyA9IE5VTEwsICpidWY7CisJdW5zaWduZWQgbG9uZyBjdXJfbGVuLCBuZXdfbGVuLCBidWZfbGVuOworCWVudW0gb2JqZWN0X3R5cGUgY3VyX3R5cGUsIG5ld190eXBlOworCWludCByZXQ7CisKKwkvKiByZWFkIGluIGJvdGggbm90ZSBibG9iIG9iamVjdHMgKi8KKwlpZiAoIWlzX251bGxfc2hhMShuZXdfc2hhMSkpCisJCW5ld19tc2cgPSByZWFkX3NoYTFfZmlsZShuZXdfc2hhMSwgJm5ld190eXBlLCAmbmV3X2xlbik7CisJaWYgKCFuZXdfbXNnIHx8ICFuZXdfbGVuIHx8IG5ld190eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUobmV3X21zZyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIWlzX251bGxfc2hhMShjdXJfc2hhMSkpCisJCWN1cl9tc2cgPSByZWFkX3NoYTFfZmlsZShjdXJfc2hhMSwgJmN1cl90eXBlLCAmY3VyX2xlbik7CisJaWYgKCFjdXJfbXNnIHx8ICFjdXJfbGVuIHx8IGN1cl90eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoY3VyX21zZyk7CisJCWZyZWUobmV3X21zZyk7CisJCWhhc2hjcHkoY3VyX3NoYTEsIG5ld19zaGExKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogd2Ugd2lsbCBzZXBhcmF0ZSB0aGUgbm90ZXMgYnkgdHdvIG5ld2xpbmVzIGFueXdheSAqLworCWlmIChjdXJfbXNnW2N1cl9sZW4gLSAxXSA9PSAnXG4nKQorCQljdXJfbGVuLS07CisKKwkvKiBjb25jYXRlbmF0ZSBjdXJfbXNnIGFuZCBuZXdfbXNnIGludG8gYnVmICovCisJYnVmX2xlbiA9IGN1cl9sZW4gKyAyICsgbmV3X2xlbjsKKwlidWYgPSAoY2hhciAqKSB4bWFsbG9jKGJ1Zl9sZW4pOworCW1lbWNweShidWYsIGN1cl9tc2csIGN1cl9sZW4pOworCWJ1ZltjdXJfbGVuXSA9ICdcbic7CisJYnVmW2N1cl9sZW4gKyAxXSA9ICdcbic7CisJbWVtY3B5KGJ1ZiArIGN1cl9sZW4gKyAyLCBuZXdfbXNnLCBuZXdfbGVuKTsKKwlmcmVlKGN1cl9tc2cpOworCWZyZWUobmV3X21zZyk7CisKKwkvKiBjcmVhdGUgYSBuZXcgYmxvYiBvYmplY3QgZnJvbSBidWYgKi8KKwlyZXQgPSB3cml0ZV9zaGExX2ZpbGUoYnVmLCBidWZfbGVuLCBibG9iX3R5cGUsIGN1cl9zaGExKTsKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKHVuc2lnbmVkIGNoYXIgKmN1cl9zaGExLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSkKK3sKKwloYXNoY3B5KGN1cl9zaGExLCBuZXdfc2hhMSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb21iaW5lX25vdGVzX2lnbm9yZSh1bnNpZ25lZCBjaGFyICpjdXJfc2hhMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RyaW5nX2xpc3RfYWRkX25vdGVfbGluZXMoc3RydWN0IHN0cmluZ19saXN0ICpzb3J0X3VuaXFfbGlzdCwKKwkJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNoYXIgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBsZW47CisJZW51bSBvYmplY3RfdHlwZSB0OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiAqKmxpbmVzID0gTlVMTDsKKwlpbnQgaSwgbGlzdF9pbmRleDsKKworCWlmIChpc19udWxsX3NoYTEoc2hhMSkpCisJCXJldHVybiAwOworCisJLyogcmVhZF9zaGExX2ZpbGUgTlVMLXRlcm1pbmF0ZXMgKi8KKwlkYXRhID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnQsICZsZW4pOworCWlmICh0ICE9IE9CSl9CTE9CIHx8ICFkYXRhIHx8ICFsZW4pIHsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIHQgIT0gT0JKX0JMT0IgfHwgIWRhdGE7CisJfQorCisJc3RyYnVmX2F0dGFjaCgmYnVmLCBkYXRhLCBsZW4sIGxlbiArIDEpOworCWxpbmVzID0gc3RyYnVmX3NwbGl0KCZidWYsICdcbicpOworCisJZm9yIChpID0gMDsgbGluZXNbaV07IGkrKykgeworCQlpZiAobGluZXNbaV0tPmJ1ZltsaW5lc1tpXS0+bGVuIC0gMV0gPT0gJ1xuJykKKwkJCXN0cmJ1Zl9zZXRsZW4obGluZXNbaV0sIGxpbmVzW2ldLT5sZW4gLSAxKTsKKwkJaWYgKCFsaW5lc1tpXS0+bGVuKQorCQkJY29udGludWU7IC8qIHNraXAgZW1wdHkgbGluZXMgKi8KKwkJbGlzdF9pbmRleCA9IHN0cmluZ19saXN0X2ZpbmRfaW5zZXJ0X2luZGV4KHNvcnRfdW5pcV9saXN0LAorCQkJCQkJCSAgIGxpbmVzW2ldLT5idWYsIDApOworCQlpZiAobGlzdF9pbmRleCA8IDApCisJCQljb250aW51ZTsgLyogc2tpcCBkdXBsaWNhdGUgbGluZXMgKi8KKwkJc3RyaW5nX2xpc3RfaW5zZXJ0X2F0X2luZGV4KHNvcnRfdW5pcV9saXN0LCBsaXN0X2luZGV4LAorCQkJCQkgICAgbGluZXNbaV0tPmJ1Zik7CisJfQorCisJc3RyYnVmX2xpc3RfZnJlZShsaW5lcyk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RyaW5nX2xpc3Rfam9pbl9saW5lc19oZWxwZXIoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sCisJCQkJCSB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IGNiX2RhdGE7CisJc3RyYnVmX2FkZHN0cihidWYsIGl0ZW0tPnN0cmluZyk7CisJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb21iaW5lX25vdGVzX2NhdF9zb3J0X3VuaXEodW5zaWduZWQgY2hhciAqY3VyX3NoYTEsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBzb3J0X3VuaXFfbGlzdCA9IHsgTlVMTCwgMCwgMCwgMSB9OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDE7CisKKwkvKiByZWFkIGJvdGggbm90ZSBibG9iIG9iamVjdHMgaW50byB1bmlxdWVfbGluZXMgKi8KKwlpZiAoc3RyaW5nX2xpc3RfYWRkX25vdGVfbGluZXMoJnNvcnRfdW5pcV9saXN0LCBjdXJfc2hhMSkpCisJCWdvdG8gb3V0OworCWlmIChzdHJpbmdfbGlzdF9hZGRfbm90ZV9saW5lcygmc29ydF91bmlxX2xpc3QsIG5ld19zaGExKSkKKwkJZ290byBvdXQ7CisKKwkvKiBjcmVhdGUgYSBuZXcgYmxvYiBvYmplY3QgZnJvbSBzb3J0X3VuaXFfbGlzdCAqLworCWlmIChmb3JfZWFjaF9zdHJpbmdfbGlzdCgmc29ydF91bmlxX2xpc3QsCisJCQkJIHN0cmluZ19saXN0X2pvaW5fbGluZXNfaGVscGVyLCAmYnVmKSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3cml0ZV9zaGExX2ZpbGUoYnVmLmJ1ZiwgYnVmLmxlbiwgYmxvYl90eXBlLCBjdXJfc2hhMSk7CisKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc29ydF91bmlxX2xpc3QsIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3RyaW5nX2xpc3RfYWRkX29uZV9yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgICBpbnQgZmxhZywgdm9pZCAqY2IpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZWZzID0gY2I7CisJaWYgKCF1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHJlZnMsIHBhdGgpKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVmcywgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKmdsb2IpCit7CisJaWYgKGhhc19nbG9iX3NwZWNpYWxzKGdsb2IpKSB7CisJCWZvcl9lYWNoX2dsb2JfcmVmKHN0cmluZ19saXN0X2FkZF9vbmVfcmVmLCBnbG9iLCBsaXN0KTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlpZiAoZ2V0X3NoYTEoZ2xvYiwgc2hhMSkpCisJCQl3YXJuaW5nKCJub3RlcyByZWYgJXMgaXMgaW52YWxpZCIsIGdsb2IpOworCQlpZiAoIXVuc29ydGVkX3N0cmluZ19saXN0X2hhc19zdHJpbmcobGlzdCwgZ2xvYikpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgZ2xvYik7CisJfQorfQorCit2b2lkIHN0cmluZ19saXN0X2FkZF9yZWZzX2Zyb21fY29sb25fc2VwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJIGNvbnN0IGNoYXIgKmdsb2JzKQoreworCXN0cnVjdCBzdHJidWYgZ2xvYmJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgKipzcGxpdDsKKwlpbnQgaTsKKworCXN0cmJ1Zl9hZGRzdHIoJmdsb2JidWYsIGdsb2JzKTsKKwlzcGxpdCA9IHN0cmJ1Zl9zcGxpdCgmZ2xvYmJ1ZiwgJzonKTsKKworCWZvciAoaSA9IDA7IHNwbGl0W2ldOyBpKyspIHsKKwkJaWYgKCFzcGxpdFtpXS0+bGVuKQorCQkJY29udGludWU7CisJCWlmIChzcGxpdFtpXS0+YnVmW3NwbGl0W2ldLT5sZW4tMV0gPT0gJzonKQorCQkJc3RyYnVmX3NldGxlbihzcGxpdFtpXSwgc3BsaXRbaV0tPmxlbi0xKTsKKwkJc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYihsaXN0LCBzcGxpdFtpXS0+YnVmKTsKKwl9CisKKwlzdHJidWZfbGlzdF9mcmVlKHNwbGl0KTsKKwlzdHJidWZfcmVsZWFzZSgmZ2xvYmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgbm90ZXNfZGlzcGxheV9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaW50ICpsb2FkX3JlZnMgPSBjYjsKKworCWlmICgqbG9hZF9yZWZzICYmICFzdHJjbXAoaywgIm5vdGVzLmRpc3BsYXlyZWYiKSkgeworCQlpZiAoIXYpCisJCQljb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKKwkJc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYigmZGlzcGxheV9ub3Rlc19yZWZzLCB2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqZGVmYXVsdF9ub3Rlc19yZWYodm9pZCkKK3sKKwljb25zdCBjaGFyICpub3Rlc19yZWYgPSBOVUxMOworCWlmICghbm90ZXNfcmVmKQorCQlub3Rlc19yZWYgPSBnZXRlbnYoR0lUX05PVEVTX1JFRl9FTlZJUk9OTUVOVCk7CisJaWYgKCFub3Rlc19yZWYpCisJCW5vdGVzX3JlZiA9IG5vdGVzX3JlZl9uYW1lOyAvKiB2YWx1ZSBvZiBjb3JlLm5vdGVzUmVmIGNvbmZpZyAqLworCWlmICghbm90ZXNfcmVmKQorCQlub3Rlc19yZWYgPSBHSVRfTk9URVNfREVGQVVMVF9SRUY7CisJcmV0dXJuIG5vdGVzX3JlZjsKK30KKwordm9pZCBpbml0X25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBjaGFyICpub3Rlc19yZWYsCisJCWNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3RlcywgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sIG9iamVjdF9zaGExWzIwXTsKKwl1bnNpZ25lZCBtb2RlOworCXN0cnVjdCBsZWFmX25vZGUgcm9vdF90cmVlOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQoIXQtPmluaXRpYWxpemVkKTsKKworCWlmICghbm90ZXNfcmVmKQorCQlub3Rlc19yZWYgPSBkZWZhdWx0X25vdGVzX3JlZigpOworCisJaWYgKCFjb21iaW5lX25vdGVzKQorCQljb21iaW5lX25vdGVzID0gY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZTsKKworCXQtPnJvb3QgPSAoc3RydWN0IGludF9ub2RlICopIHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRfbm9kZSksIDEpOworCXQtPmZpcnN0X25vbl9ub3RlID0gTlVMTDsKKwl0LT5wcmV2X25vbl9ub3RlID0gTlVMTDsKKwl0LT5yZWYgPSBub3Rlc19yZWYgPyB4c3RyZHVwKG5vdGVzX3JlZikgOiBOVUxMOworCXQtPmNvbWJpbmVfbm90ZXMgPSBjb21iaW5lX25vdGVzOworCXQtPmluaXRpYWxpemVkID0gMTsKKwl0LT5kaXJ0eSA9IDA7CisKKwlpZiAoZmxhZ3MgJiBOT1RFU19JTklUX0VNUFRZIHx8ICFub3Rlc19yZWYgfHwKKwkgICAgcmVhZF9yZWYobm90ZXNfcmVmLCBvYmplY3Rfc2hhMSkpCisJCXJldHVybjsKKwlpZiAoZ2V0X3RyZWVfZW50cnkob2JqZWN0X3NoYTEsICIiLCBzaGExLCAmbW9kZSkpCisJCWRpZSgiRmFpbGVkIHRvIHJlYWQgbm90ZXMgdHJlZSByZWZlcmVuY2VkIGJ5ICVzICglcykiLAorCQkgICAgbm90ZXNfcmVmLCBzaGExX3RvX2hleChvYmplY3Rfc2hhMSkpOworCisJaGFzaGNscihyb290X3RyZWUua2V5X3NoYTEpOworCWhhc2hjcHkocm9vdF90cmVlLnZhbF9zaGExLCBzaGExKTsKKwlsb2FkX3N1YnRyZWUodCwgJnJvb3RfdHJlZSwgdC0+cm9vdCwgMCk7Cit9CisKK3N0cnVjdCBub3Rlc190cmVlICoqbG9hZF9ub3Rlc190cmVlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZnMpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJaW50IGNvdW50ZXIgPSAwOworCXN0cnVjdCBub3Rlc190cmVlICoqdHJlZXM7CisJdHJlZXMgPSB4bWFsbG9jKChyZWZzLT5ucisxKSAqIHNpemVvZihzdHJ1Y3Qgbm90ZXNfdHJlZSAqKSk7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCByZWZzKSB7CisJCXN0cnVjdCBub3Rlc190cmVlICp0ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG5vdGVzX3RyZWUpKTsKKwkJaW5pdF9ub3Rlcyh0LCBpdGVtLT5zdHJpbmcsIGNvbWJpbmVfbm90ZXNfaWdub3JlLCAwKTsKKwkJdHJlZXNbY291bnRlcisrXSA9IHQ7CisJfQorCXRyZWVzW2NvdW50ZXJdID0gTlVMTDsKKwlyZXR1cm4gdHJlZXM7Cit9CisKK3ZvaWQgaW5pdF9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0KQoreworCWNoYXIgKmRpc3BsYXlfcmVmX2VudjsKKwlpbnQgbG9hZF9jb25maWdfcmVmcyA9IDA7CisJZGlzcGxheV9ub3Rlc19yZWZzLnN0cmR1cF9zdHJpbmdzID0gMTsKKworCWFzc2VydCghZGlzcGxheV9ub3Rlc190cmVlcyk7CisKKwlpZiAoIW9wdCB8fCBvcHQtPnVzZV9kZWZhdWx0X25vdGVzID4gMCB8fAorCSAgICAob3B0LT51c2VfZGVmYXVsdF9ub3RlcyA9PSAtMSAmJiAhb3B0LT5leHRyYV9ub3Rlc19yZWZzLm5yKSkgeworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmRpc3BsYXlfbm90ZXNfcmVmcywgZGVmYXVsdF9ub3Rlc19yZWYoKSk7CisJCWRpc3BsYXlfcmVmX2VudiA9IGdldGVudihHSVRfTk9URVNfRElTUExBWV9SRUZfRU5WSVJPTk1FTlQpOworCQlpZiAoZGlzcGxheV9yZWZfZW52KSB7CisJCQlzdHJpbmdfbGlzdF9hZGRfcmVmc19mcm9tX2NvbG9uX3NlcCgmZGlzcGxheV9ub3Rlc19yZWZzLAorCQkJCQkJCSAgICBkaXNwbGF5X3JlZl9lbnYpOworCQkJbG9hZF9jb25maWdfcmVmcyA9IDA7CisJCX0gZWxzZQorCQkJbG9hZF9jb25maWdfcmVmcyA9IDE7CisJfQorCisJZ2l0X2NvbmZpZyhub3Rlc19kaXNwbGF5X2NvbmZpZywgJmxvYWRfY29uZmlnX3JlZnMpOworCisJaWYgKG9wdCkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmb3B0LT5leHRyYV9ub3Rlc19yZWZzKQorCQkJc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYigmZGlzcGxheV9ub3Rlc19yZWZzLAorCQkJCQkJICAgICBpdGVtLT5zdHJpbmcpOworCX0KKworCWRpc3BsYXlfbm90ZXNfdHJlZXMgPSBsb2FkX25vdGVzX3RyZWVzKCZkaXNwbGF5X25vdGVzX3JlZnMpOworCXN0cmluZ19saXN0X2NsZWFyKCZkaXNwbGF5X25vdGVzX3JlZnMsIDApOworfQorCitpbnQgYWRkX25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9iamVjdF9zaGExLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpub3RlX3NoYTEsIGNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3RlcykKK3sKKwlzdHJ1Y3QgbGVhZl9ub2RlICpsOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCXQtPmRpcnR5ID0gMTsKKwlpZiAoIWNvbWJpbmVfbm90ZXMpCisJCWNvbWJpbmVfbm90ZXMgPSB0LT5jb21iaW5lX25vdGVzOworCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgbGVhZl9ub2RlKSk7CisJaGFzaGNweShsLT5rZXlfc2hhMSwgb2JqZWN0X3NoYTEpOworCWhhc2hjcHkobC0+dmFsX3NoYTEsIG5vdGVfc2hhMSk7CisJcmV0dXJuIG5vdGVfdHJlZV9pbnNlcnQodCwgdC0+cm9vdCwgMCwgbCwgUFRSX1RZUEVfTk9URSwgY29tYmluZV9ub3Rlcyk7Cit9CisKK2ludCByZW1vdmVfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEpCit7CisJc3RydWN0IGxlYWZfbm9kZSBsOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCWhhc2hjcHkobC5rZXlfc2hhMSwgb2JqZWN0X3NoYTEpOworCWhhc2hjbHIobC52YWxfc2hhMSk7CisJbm90ZV90cmVlX3JlbW92ZSh0LCB0LT5yb290LCAwLCAmbCk7CisJaWYgKGlzX251bGxfc2hhMShsLnZhbF9zaGExKSkgLyogbm8gbm90ZSB3YXMgcmVtb3ZlZCAqLworCQlyZXR1cm4gMTsKKwl0LT5kaXJ0eSA9IDE7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgKmdldF9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSkKK3sKKwlzdHJ1Y3QgbGVhZl9ub2RlICpmb3VuZDsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJYXNzZXJ0KHQtPmluaXRpYWxpemVkKTsKKwlmb3VuZCA9IG5vdGVfdHJlZV9maW5kKHQsIHQtPnJvb3QsIDAsIG9iamVjdF9zaGExKTsKKwlyZXR1cm4gZm91bmQgPyBmb3VuZC0+dmFsX3NoYTEgOiBOVUxMOworfQorCitpbnQgZm9yX2VhY2hfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgaW50IGZsYWdzLCBlYWNoX25vdGVfZm4gZm4sCisJCXZvaWQgKmNiX2RhdGEpCit7CisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCXJldHVybiBmb3JfZWFjaF9ub3RlX2hlbHBlcih0LCB0LT5yb290LCAwLCAwLCBmbGFncywgZm4sIGNiX2RhdGEpOworfQorCitpbnQgd3JpdGVfbm90ZXNfdHJlZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgdW5zaWduZWQgY2hhciAqcmVzdWx0KQoreworCXN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrIHJvb3Q7CisJc3RydWN0IHdyaXRlX2VhY2hfbm90ZV9kYXRhIGNiX2RhdGE7CisJaW50IHJldDsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJYXNzZXJ0KHQtPmluaXRpYWxpemVkKTsKKworCS8qIFByZXBhcmUgZm9yIHRyYXZlcnNhbCBvZiBjdXJyZW50IG5vdGVzIHRyZWUgKi8KKwlyb290Lm5leHQgPSBOVUxMOyAvKiBsYXN0IGZvcndhcmQgZW50cnkgaW4gbGlzdCBpcyBncm91bmRlZCAqLworCXN0cmJ1Zl9pbml0KCZyb290LmJ1ZiwgMjU2ICogKDMyICsgNDApKTsgLyogYXNzdW1lIDI1NiBlbnRyaWVzICovCisJcm9vdC5wYXRoWzBdID0gcm9vdC5wYXRoWzFdID0gJ1wwJzsKKwljYl9kYXRhLnJvb3QgPSAmcm9vdDsKKwljYl9kYXRhLm5leHRfbm9uX25vdGUgPSB0LT5maXJzdF9ub25fbm90ZTsKKworCS8qIFdyaXRlIHRyZWUgb2JqZWN0cyByZXByZXNlbnRpbmcgY3VycmVudCBub3RlcyB0cmVlICovCisJcmV0ID0gZm9yX2VhY2hfbm90ZSh0LCBGT1JfRUFDSF9OT1RFX0RPTlRfVU5QQUNLX1NVQlRSRUVTIHwKKwkJCQlGT1JfRUFDSF9OT1RFX1lJRUxEX1NVQlRSRUVTLAorCQkJd3JpdGVfZWFjaF9ub3RlLCAmY2JfZGF0YSkgfHwKKwkJd3JpdGVfZWFjaF9ub25fbm90ZV91bnRpbChOVUxMLCAmY2JfZGF0YSkgfHwKKwkJdHJlZV93cml0ZV9zdGFja19maW5pc2hfc3VidHJlZSgmcm9vdCkgfHwKKwkJd3JpdGVfc2hhMV9maWxlKHJvb3QuYnVmLmJ1Ziwgcm9vdC5idWYubGVuLCB0cmVlX3R5cGUsIHJlc3VsdCk7CisJc3RyYnVmX3JlbGVhc2UoJnJvb3QuYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHBydW5lX25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG5vdGVfZGVsZXRlX2xpc3QgKmwgPSBOVUxMOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCisJZm9yX2VhY2hfbm90ZSh0LCAwLCBwcnVuZV9ub3Rlc19oZWxwZXIsICZsKTsKKworCXdoaWxlIChsKSB7CisJCWlmIChmbGFncyAmIE5PVEVTX1BSVU5FX1ZFUkJPU0UpCisJCQlwcmludGYoIiVzXG4iLCBzaGExX3RvX2hleChsLT5zaGExKSk7CisJCWlmICghKGZsYWdzICYgTk9URVNfUFJVTkVfRFJZUlVOKSkKKwkJCXJlbW92ZV9ub3RlKHQsIGwtPnNoYTEpOworCQlsID0gbC0+bmV4dDsKKwl9Cit9CisKK3ZvaWQgZnJlZV9ub3RlcyhzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCkKK3sKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWlmICh0LT5yb290KQorCQlub3RlX3RyZWVfZnJlZSh0LT5yb290KTsKKwlmcmVlKHQtPnJvb3QpOworCXdoaWxlICh0LT5maXJzdF9ub25fbm90ZSkgeworCQl0LT5wcmV2X25vbl9ub3RlID0gdC0+Zmlyc3Rfbm9uX25vdGUtPm5leHQ7CisJCWZyZWUodC0+Zmlyc3Rfbm9uX25vdGUtPnBhdGgpOworCQlmcmVlKHQtPmZpcnN0X25vbl9ub3RlKTsKKwkJdC0+Zmlyc3Rfbm9uX25vdGUgPSB0LT5wcmV2X25vbl9ub3RlOworCX0KKwlmcmVlKHQtPnJlZik7CisJbWVtc2V0KHQsIDAsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfdHJlZSkpOworfQorCisvKgorICogRmlsbCB0aGUgZ2l2ZW4gc3RyYnVmIHdpdGggdGhlIG5vdGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0LgorICoKKyAqIElmIHRoZSBnaXZlbiBub3Rlc190cmVlIHN0cnVjdHVyZSBpcyBub3QgaW5pdGlhbGl6ZWQsIGl0IHdpbGwgYmUgYXV0by0KKyAqIGluaXRpYWxpemVkIHRvIHRoZSBkZWZhdWx0IHZhbHVlIChzZWUgZG9jdW1lbnRhdGlvbiBmb3IgaW5pdF9ub3RlcygpIGFib3ZlKS4KKyAqIElmIHRoZSBnaXZlbiBub3Rlc190cmVlIGlzIE5VTEwsIHRoZSBpbnRlcm5hbC9kZWZhdWx0IG5vdGVzX3RyZWUgd2lsbCBiZQorICogdXNlZCBpbnN0ZWFkLgorICoKKyAqICdmbGFncycgaXMgYSBiaXR3aXNlIGNvbWJpbmF0aW9uIG9mIHRoZSBmbGFncyBmb3IgZm9ybWF0X2Rpc3BsYXlfbm90ZXMuCisgKi8KK3N0YXRpYyB2b2lkIGZvcm1hdF9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSwKKwkJCXN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpvdXRwdXRfZW5jb2RpbmcsIGludCBmbGFncykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB1dGY4W10gPSAidXRmLTgiOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CisJY2hhciAqbXNnLCAqbXNnX3A7CisJdW5zaWduZWQgbG9uZyBsaW5lbGVuLCBtc2dsZW47CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlpZiAoIXQtPmluaXRpYWxpemVkKQorCQlpbml0X25vdGVzKHQsIE5VTEwsIE5VTEwsIDApOworCisJc2hhMSA9IGdldF9ub3RlKHQsIG9iamVjdF9zaGExKTsKKwlpZiAoIXNoYTEpCisJCXJldHVybjsKKworCWlmICghKG1zZyA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmbXNnbGVuKSkgfHwgIW1zZ2xlbiB8fAorCQkJdHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAob3V0cHV0X2VuY29kaW5nICYmICpvdXRwdXRfZW5jb2RpbmcgJiYKKwkJCXN0cmNtcCh1dGY4LCBvdXRwdXRfZW5jb2RpbmcpKSB7CisJCWNoYXIgKnJlZW5jb2RlZCA9IHJlZW5jb2RlX3N0cmluZyhtc2csIG91dHB1dF9lbmNvZGluZywgdXRmOCk7CisJCWlmIChyZWVuY29kZWQpIHsKKwkJCWZyZWUobXNnKTsKKwkJCW1zZyA9IHJlZW5jb2RlZDsKKwkJCW1zZ2xlbiA9IHN0cmxlbihtc2cpOworCQl9CisJfQorCisJLyogd2Ugd2lsbCBlbmQgdGhlIGFubm90YXRpb24gYnkgYSBuZXdsaW5lIGFueXdheSAqLworCWlmIChtc2dsZW4gJiYgbXNnW21zZ2xlbiAtIDFdID09ICdcbicpCisJCW1zZ2xlbi0tOworCisJaWYgKGZsYWdzICYgTk9URVNfU0hPV19IRUFERVIpIHsKKwkJY29uc3QgY2hhciAqcmVmID0gdC0+cmVmOworCQlpZiAoIXJlZiB8fCAhc3RyY21wKHJlZiwgR0lUX05PVEVTX0RFRkFVTFRfUkVGKSkgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxuTm90ZXM6XG4iKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghcHJlZml4Y21wKHJlZiwgInJlZnMvIikpCisJCQkJcmVmICs9IDU7CisJCQlpZiAoIXByZWZpeGNtcChyZWYsICJub3Rlcy8iKSkKKwkJCQlyZWYgKz0gNjsKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiXG5Ob3RlcyAoJXMpOlxuIiwgcmVmKTsKKwkJfQorCX0KKworCWZvciAobXNnX3AgPSBtc2c7IG1zZ19wIDwgbXNnICsgbXNnbGVuOyBtc2dfcCArPSBsaW5lbGVuICsgMSkgeworCQlsaW5lbGVuID0gc3RyY2hybnVsKG1zZ19wLCAnXG4nKSAtIG1zZ19wOworCisJCWlmIChmbGFncyAmIE5PVEVTX0lOREVOVCkKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICIgICAgIik7CisJCXN0cmJ1Zl9hZGQoc2IsIG1zZ19wLCBsaW5lbGVuKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwl9CisKKwlmcmVlKG1zZyk7Cit9CisKK3ZvaWQgZm9ybWF0X2Rpc3BsYXlfbm90ZXMoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEsCisJCQkgIHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpvdXRwdXRfZW5jb2RpbmcsIGludCBmbGFncykKK3sKKwlpbnQgaTsKKwlhc3NlcnQoZGlzcGxheV9ub3Rlc190cmVlcyk7CisJZm9yIChpID0gMDsgZGlzcGxheV9ub3Rlc190cmVlc1tpXTsgaSsrKQorCQlmb3JtYXRfbm90ZShkaXNwbGF5X25vdGVzX3RyZWVzW2ldLCBvYmplY3Rfc2hhMSwgc2IsCisJCQkgICAgb3V0cHV0X2VuY29kaW5nLCBmbGFncyk7Cit9CisKK2ludCBjb3B5X25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsCisJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbV9vYmosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRvX29iaiwKKwkgICAgICBpbnQgZm9yY2UsIGNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3RlcykKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpub3RlID0gZ2V0X25vdGUodCwgZnJvbV9vYmopOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4aXN0aW5nX25vdGUgPSBnZXRfbm90ZSh0LCB0b19vYmopOworCisJaWYgKCFmb3JjZSAmJiBleGlzdGluZ19ub3RlKQorCQlyZXR1cm4gMTsKKworCWlmIChub3RlKQorCQlyZXR1cm4gYWRkX25vdGUodCwgdG9fb2JqLCBub3RlLCBjb21iaW5lX25vdGVzKTsKKwllbHNlIGlmIChleGlzdGluZ19ub3RlKQorCQlyZXR1cm4gYWRkX25vdGUodCwgdG9fb2JqLCBudWxsX3NoYTEsIGNvbWJpbmVfbm90ZXMpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXhwYW5kX25vdGVzX3JlZihzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpZiAoIXByZWZpeGNtcChzYi0+YnVmLCAicmVmcy9ub3Rlcy8iKSkKKwkJcmV0dXJuOyAvKiB3ZSdyZSBoYXBweSAqLworCWVsc2UgaWYgKCFwcmVmaXhjbXAoc2ItPmJ1ZiwgIm5vdGVzLyIpKQorCQlzdHJidWZfaW5zZXJ0KHNiLCAwLCAicmVmcy8iLCA1KTsKKwllbHNlCisJCXN0cmJ1Zl9pbnNlcnQoc2IsIDAsICJyZWZzL25vdGVzLyIsIDExKTsKK30KZGlmZiAtLWdpdCBhL25vdGVzLmggYi9ub3Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTJiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy5oCkBAIC0wLDAgKzEsMzAxIEBACisjaWZuZGVmIE5PVEVTX0gKKyNkZWZpbmUgTk9URVNfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyoKKyAqIEZ1bmN0aW9uIHR5cGUgZm9yIGNvbWJpbmluZyB0d28gbm90ZXMgYW5ub3RhdGluZyB0aGUgc2FtZSBvYmplY3QuCisgKgorICogV2hlbiBhZGRpbmcgYSBuZXcgbm90ZSBhbm5vdGF0aW5nIHRoZSBzYW1lIG9iamVjdCBhcyBhbiBleGlzdGluZyBub3RlLCBpdCBpcworICogdXAgdG8gdGhlIGNhbGxlciB0byBkZWNpZGUgaG93IHRvIGNvbWJpbmUgdGhlIHR3byBub3Rlcy4gVGhlIGRlY2lzaW9uIGlzCisgKiBtYWRlIGJ5IHBhc3NpbmcgaW4gYSBmdW5jdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZvcm0uIFRoZSBmdW5jdGlvbiBhY2NlcHRzCisgKiB0d28gU0hBMXMgLS0gb2YgdGhlIGV4aXN0aW5nIG5vdGUgYW5kIHRoZSBuZXcgbm90ZSwgcmVzcGVjdGl2ZWx5LiBUaGUKKyAqIGZ1bmN0aW9uIHRoZW4gY29tYmluZXMgdGhlIG5vdGVzIGluIHdoYXRldmVyIHdheSBpdCBzZWVzIGZpdCwgYW5kIHdyaXRlcyB0aGUKKyAqIHJlc3VsdGluZyBTSEExIGludG8gdGhlIGZpcnN0IFNIQTEgYXJndW1lbnQgKGN1cl9zaGExKS4gQSBub24temVybyByZXR1cm4KKyAqIHZhbHVlIGluZGljYXRlcyBmYWlsdXJlLgorICoKKyAqIFRoZSB0d28gZ2l2ZW4gU0hBMXMgc2hhbGwgYm90aCBiZSBub24tTlVMTCBhbmQgZGlmZmVyZW50IGZyb20gZWFjaCBvdGhlci4KKyAqIEVpdGhlciBvZiB0aGVtIChidXQgbm90IGJvdGgpIG1heSBiZSA9PSBudWxsX3NoYTEsIHdoaWNoIGluZGljYXRlcyBhbgorICogZW1wdHkvbm9uLWV4aXN0ZW50IG5vdGUuIElmIHRoZSByZXN1bHRpbmcgU0hBMSAoY3VyX3NoYTEpIGlzID09IG51bGxfc2hhMSwKKyAqIHRoZSBub3RlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBub3RlcyB0cmVlLgorICoKKyAqIFRoZSBkZWZhdWx0IGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24gKHlvdSBnZXQgdGhpcyB3aGVuIHBhc3NpbmcgTlVMTCkgaXMKKyAqIGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUoKSwgd2hpY2ggYXBwZW5kcyB0aGUgY29udGVudHMgb2YgdGhlIG5ldyBub3RlIHRvCisgKiB0aGUgY29udGVudHMgb2YgdGhlIGV4aXN0aW5nIG5vdGUuCisgKi8KK3R5cGVkZWYgaW50ICgqY29tYmluZV9ub3Rlc19mbikodW5zaWduZWQgY2hhciAqY3VyX3NoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExKTsKKworLyogQ29tbW9uIG5vdGVzIGNvbWJpbmF0b3JzICovCitpbnQgY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZSh1bnNpZ25lZCBjaGFyICpjdXJfc2hhMSwgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEpOworaW50IGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKHVuc2lnbmVkIGNoYXIgKmN1cl9zaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSk7CitpbnQgY29tYmluZV9ub3Rlc19pZ25vcmUodW5zaWduZWQgY2hhciAqY3VyX3NoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExKTsKK2ludCBjb21iaW5lX25vdGVzX2NhdF9zb3J0X3VuaXEodW5zaWduZWQgY2hhciAqY3VyX3NoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExKTsKKworLyoKKyAqIE5vdGVzIHRyZWUgb2JqZWN0CisgKgorICogRW5jYXBzdWxhdGVzIHRoZSBpbnRlcm5hbCBub3RlcyB0cmVlIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggYSBub3RlcyByZWYuCisgKiBXaGVuZXZlciBhIHN0cnVjdCBub3Rlc190cmVlIHBvaW50ZXIgaXMgcmVxdWlyZWQgYmVsb3csIHlvdSBtYXkgcGFzcyBOVUxMIGluCisgKiBvcmRlciB0byB1c2UgdGhlIGRlZmF1bHQvaW50ZXJuYWwgbm90ZXMgdHJlZS4gRS5nLiB5b3Ugb25seSBuZWVkIHRvIHBhc3MgYQorICogbm9uLU5VTEwgdmFsdWUgaWYgeW91IG5lZWQgdG8gcmVmZXIgdG8gc2V2ZXJhbCBkaWZmZXJlbnQgbm90ZXMgdHJlZXMKKyAqIHNpbXVsdGFuZW91c2x5LgorICovCitleHRlcm4gc3RydWN0IG5vdGVzX3RyZWUgeworCXN0cnVjdCBpbnRfbm9kZSAqcm9vdDsKKwlzdHJ1Y3Qgbm9uX25vdGUgKmZpcnN0X25vbl9ub3RlLCAqcHJldl9ub25fbm90ZTsKKwljaGFyICpyZWY7CisJY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzOworCWludCBpbml0aWFsaXplZDsKKwlpbnQgZGlydHk7Cit9IGRlZmF1bHRfbm90ZXNfdHJlZTsKKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCBub3RlcyByZWYuCisgKgorICogVGhlIGRlZmF1bHQgbm90ZXMgcmVmIGlzIHRoZSBub3RlcyByZWYgdGhhdCBpcyB1c2VkIHdoZW4gbm90ZXNfcmVmID09IE5VTEwKKyAqIGlzIHBhc3NlZCB0byBpbml0X25vdGVzKCkuCisgKgorICogVGhpcyB0aGUgZmlyc3Qgb2YgdGhlIGZvbGxvd2luZyB0byBiZSBkZWZpbmVkOgorICogMS4gVGhlICctLXJlZicgb3B0aW9uIHRvICdnaXQgbm90ZXMnLCBpZiBnaXZlbgorICogMi4gVGhlICRHSVRfTk9URVNfUkVGIGVudmlyb25tZW50IHZhcmlhYmxlLCBpZiBzZXQKKyAqIDMuIFRoZSB2YWx1ZSBvZiB0aGUgY29yZS5ub3Rlc1JlZiBjb25maWcgdmFyaWFibGUsIGlmIHNldAorICogNC4gR0lUX05PVEVTX0RFRkFVTFRfUkVGIChpLmUuICJyZWZzL25vdGVzL2NvbW1pdHMiKQorICovCitjb25zdCBjaGFyICpkZWZhdWx0X25vdGVzX3JlZih2b2lkKTsKKworLyoKKyAqIEZsYWdzIGNvbnRyb2xsaW5nIGJlaGF2aW91ciBvZiBub3RlcyB0cmVlIGluaXRpYWxpemF0aW9uCisgKgorICogRGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gaW5pdGlhbGl6ZSB0aGUgbm90ZXMgdHJlZSBmcm9tIHRoZSB0cmVlIG9iamVjdAorICogc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiAob3IgZGVmYXVsdCkgbm90ZXMgcmVmLgorICovCisjZGVmaW5lIE5PVEVTX0lOSVRfRU1QVFkgMQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSB3aXRoIHRoZSBub3RlcyB0cmVlIHN0cnVjdHVyZSBhdCB0aGUgZ2l2ZW4KKyAqIHJlZi4gSWYgZ2l2ZW4gcmVmIGlzIE5VTEwsIHRoZSB2YWx1ZSBvZiB0aGUgJEdJVF9OT1RFU19SRUYgZW52aXJvbm1lbnQKKyAqIHZhcmlhYmxlIGlzIHVzZWQsIGFuZCBpZiB0aGF0IGlzIG1pc3NpbmcsIHRoZSBkZWZhdWx0IG5vdGVzIHJlZiBpcyB1c2VkCisgKiAoInJlZnMvbm90ZXMvY29tbWl0cyIpLgorICoKKyAqIElmIHlvdSBuZWVkIHRvIHJlLWludGlhbGl6ZSBhIG5vdGVzX3RyZWUgc3RydWN0dXJlIChlLmcuIHdoZW4gc3dpdGNoaW5nIGZyb20KKyAqIG9uZSBub3RlcyByZWYgdG8gYW5vdGhlciksIHlvdSBtdXN0IGZpcnN0IGRlLWluaXRpYWxpemUgdGhlIG5vdGVzX3RyZWUKKyAqIHN0cnVjdHVyZSBieSBjYWxsaW5nIGZyZWVfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKikuCisgKgorICogSWYgeW91IHBhc3MgdCA9PSBOVUxMLCB0aGUgZGVmYXVsdCBpbnRlcm5hbCBub3Rlc190cmVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQuCisgKgorICogVGhlIGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgYmVjb21lcyB0aGUgZGVmYXVsdCBjb21iaW5lX25vdGVzCisgKiBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG5vdGVzX3RyZWUuIElmIE5VTEwgaXMgcGFzc2VkLCB0aGUgZGVmYXVsdAorICogY29tYmluZV9ub3RlcyBmdW5jdGlvbiBpcyBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlKCkuCisgKgorICogUHJlY29uZGl0aW9uOiBUaGUgbm90ZXNfdHJlZSBzdHJ1Y3R1cmUgaXMgemVyb2VkICh0aGlzIGNhbiBiZSBhY2hpZXZlZCB3aXRoCisgKiBtZW1zZXQodCwgMCwgc2l6ZW9mKHN0cnVjdCBub3Rlc190cmVlKSkpCisgKi8KK3ZvaWQgaW5pdF9ub3RlcyhzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgY2hhciAqbm90ZXNfcmVmLAorCQljb21iaW5lX25vdGVzX2ZuIGNvbWJpbmVfbm90ZXMsIGludCBmbGFncyk7CisKKy8qCisgKiBBZGQgdGhlIGdpdmVuIG5vdGUgb2JqZWN0IHRvIHRoZSBnaXZlbiBub3Rlc190cmVlIHN0cnVjdHVyZQorICoKKyAqIElmIHRoZXJlIGFscmVhZHkgZXhpc3RzIGEgbm90ZSBmb3IgdGhlIGdpdmVuIG9iamVjdF9zaGExLCB0aGUgZ2l2ZW4KKyAqIGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24gaXMgaW52b2tlZCB0byBicmVhayB0aGUgdGllLiBJZiBub3QgZ2l2ZW4gKGkuZS4KKyAqIGNvbWJpbmVfbm90ZXMgPT0gTlVMTCksIHRoZSBkZWZhdWx0IGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbgorICogbm90ZXNfdHJlZSBpcyB1c2VkLgorICoKKyAqIFBhc3Npbmcgbm90ZV9zaGExID09IG51bGxfc2hhMSBpbmRpY2F0ZXMgdGhlIGFkZGl0aW9uIG9mIGFuCisgKiBlbXB0eS9ub24tZXhpc3RlbnQgbm90ZS4gVGhpcyBpcyBhIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIG5vLW9wIHVubGVzcworICogdGhlcmUgYWxyZWFkeSBleGlzdHMgYSBub3RlIGZvciB0aGUgZ2l2ZW4gb2JqZWN0X3NoYTEsIEFORCBjb21iaW5pbmcgdGhhdAorICogbm90ZSB3aXRoIHRoZSBlbXB0eSBub3RlICh1c2luZyB0aGUgZ2l2ZW4gY29tYmluZV9ub3RlcyBmdW5jdGlvbikgcmVzdWx0cworICogaW4gYSBuZXcvY2hhbmdlZCBub3RlLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBub24temVybyBtZWFucyBjb21iaW5lX25vdGVzIGZhaWxlZC4KKyAqCisgKiBJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIG1hZGUgYnkgYWRkX25vdGUoKSB0byB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBzdHJ1Y3R1cmUKKyAqIGFyZSBub3QgcGVyc2lzdGVudCB1bnRpbCBhIHN1YnNlcXVlbnQgY2FsbCB0byB3cml0ZV9ub3Rlc190cmVlKCkgcmV0dXJucworICogemVyby4KKyAqLworaW50IGFkZF9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbm90ZV9zaGExLCBjb21iaW5lX25vdGVzX2ZuIGNvbWJpbmVfbm90ZXMpOworCisvKgorICogUmVtb3ZlIHRoZSBnaXZlbiBub3RlIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBub3Rlc190cmVlIHN0cnVjdHVyZQorICoKKyAqIElNUE9SVEFOVDogVGhlIGNoYW5nZXMgbWFkZSBieSByZW1vdmVfbm90ZSgpIHRvIHRoZSBnaXZlbiBub3Rlc190cmVlCisgKiBzdHJ1Y3R1cmUgYXJlIG5vdCBwZXJzaXN0ZW50IHVudGlsIGEgc3Vic2VxdWVudCBjYWxsIHRvIHdyaXRlX25vdGVzX3RyZWUoKQorICogcmV0dXJucyB6ZXJvLgorICoKKyAqIFJldHVybiAwIGlmIGEgbm90ZSB3YXMgcmVtb3ZlZDsgMSBpZiB0aGVyZSB3YXMgbm8gbm90ZSB0byByZW1vdmUuCisgKi8KK2ludCByZW1vdmVfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEpOworCisvKgorICogR2V0IHRoZSBub3RlIG9iamVjdCBTSEExIGNvbnRhaW5pbmcgdGhlIG5vdGUgZGF0YSBmb3IgdGhlIGdpdmVuIG9iamVjdAorICoKKyAqIFJldHVybiBOVUxMIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIG5vIG5vdGVzLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyICpnZXRfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEpOworCisvKgorICogQ29weSBhIG5vdGUgZnJvbSBvbmUgb2JqZWN0IHRvIGFub3RoZXIgaW4gdGhlIGdpdmVuIG5vdGVzX3RyZWUuCisgKgorICogUmV0dXJucyAxIGlmIHRoZSB0b19vYmogYWxyZWFkeSBoYXMgYSBub3RlIGFuZCAnZm9yY2UnIGlzIGZhbHNlLiBPdGhlcndpc2UsCisgKiByZXR1cm5zIG5vbi16ZXJvIGlmICdmb3JjZScgaXMgdHJ1ZSwgYnV0IHRoZSBnaXZlbiBjb21iaW5lX25vdGVzIGZ1bmN0aW9uCisgKiBmYWlsZWQgdG8gY29tYmluZSBmcm9tX29iaidzIG5vdGUgd2l0aCB0b19vYmoncyBleGlzdGluZyBub3RlLgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuCisgKgorICogSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBtYWRlIGJ5IGNvcHlfbm90ZSgpIHRvIHRoZSBnaXZlbiBub3Rlc190cmVlIHN0cnVjdHVyZQorICogYXJlIG5vdCBwZXJzaXN0ZW50IHVudGlsIGEgc3Vic2VxdWVudCBjYWxsIHRvIHdyaXRlX25vdGVzX3RyZWUoKSByZXR1cm5zCisgKiB6ZXJvLgorICovCitpbnQgY29weV9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LAorCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb21fb2JqLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0b19vYmosCisJICAgICAgaW50IGZvcmNlLCBjb21iaW5lX25vdGVzX2ZuIGNvbWJpbmVfbm90ZXMpOworCisvKgorICogRmxhZ3MgY29udHJvbGxpbmcgYmVoYXZpb3VyIG9mIGZvcl9lYWNoX25vdGUoKQorICoKKyAqIERlZmF1bHQgYmVoYXZpb3VyIG9mIGZvcl9lYWNoX25vdGUoKSBpcyB0byB0cmF2ZXJzZSBldmVyeSBzaW5nbGUgbm90ZSBvYmplY3QKKyAqIGluIHRoZSBnaXZlbiBub3RlcyB0cmVlLCB1bnBhY2tpbmcgc3VidHJlZSBlbnRyaWVzIGFsb25nIHRoZSB3YXkuCisgKiBUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBiZSB1c2VkIHRvIGFsdGVyIHRoZSBkZWZhdWx0IGJlaGF2aW91cjoKKyAqCisgKiAtIERPTlRfVU5QQUNLX1NVQlRSRUVTIGNhdXNlcyBmb3JfZWFjaF9ub3RlKCkgTk9UIHRvIHVucGFjayBhbmQgcmVjdXJzZSBpbnRvCisgKiAgIHN1YnRyZWUgZW50cmllcyB3aGlsZSB0cmF2ZXJzaW5nIHRoZSBub3RlcyB0cmVlLiBUaGlzIGNhdXNlcyBub3RlcyB3aXRoaW4KKyAqICAgdGhvc2Ugc3VidHJlZXMgTk9UIHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIFVzZSB0aGlzIGZsYWcgaWYgeW91CisgKiAgIGRvbid0IHdhbnQgdG8gdHJhdmVyc2UgX2FsbF8gbm90ZXMsIGJ1dCBvbmx5IHdhbnQgdG8gdHJhdmVyc2UgdGhlIHBhcnRzCisgKiAgIG9mIHRoZSBub3RlcyB0cmVlIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gdW5wYWNrZWQgKHRoaXMgaW5jbHVkZXMgYXQgbGVhc3QKKyAqICAgYWxsIG5vdGVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkL2NoYW5nZWQpLgorICoKKyAqIC0gWUlFTERfU1VCVFJFRVMgY2F1c2VzIGFueSBzdWJ0cmVlIGVudHJpZXMgdGhhdCBhcmUgZW5jb3VudGVyZWQgdG8gYmUKKyAqICAgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYmVmb3JlIHJlY3Vyc2luZyBpbnRvIHRoZW0uIFN1YnRyZWUgZW50cmllcyBhcmUKKyAqICAgbm90IG5vdGUgb2JqZWN0cywgYnV0IHJlcHJlc2VudCBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgaW4gdGhlIG5vdGVzCisgKiAgIHRyZWUuIFdoZW4gcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgc3VidHJlZSBlbnRyaWVzIHdpbGwgaGF2ZSBhIHRyYWlsaW5nCisgKiAgIHNsYXNoIGluIHRoZWlyIHBhdGgsIHdoaWNoIHRoZSBjYWxsYmFjayBtYXkgdXNlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbgorICogICBub3RlIGVudHJpZXMgYW5kIHN1YnRyZWUgZW50cmllcy4gTm90ZSB0aGF0IGFscmVhZHktdW5wYWNrZWQgc3VidHJlZQorICogICBlbnRyaWVzIGFyZSBub3QgcGFydCBvZiB0aGUgbm90ZXMgdHJlZSwgYW5kIHdpbGwgdGhlcmVmb3JlIG5vdCBiZSB5aWVsZGVkLgorICogICBJZiB0aGlzIGZsYWcgaXMgdXNlZCB0b2dldGhlciB3aXRoIERPTlRfVU5QQUNLX1NVQlRSRUVTLCBmb3JfZWFjaF9ub3RlKCkKKyAqICAgd2lsbCB5aWVsZCB0aGUgc3VidHJlZSBlbnRyeSwgYnV0IG5vdCByZWN1cnNlIGludG8gaXQuCisgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfTk9URV9ET05UX1VOUEFDS19TVUJUUkVFUyAxCisjZGVmaW5lIEZPUl9FQUNIX05PVEVfWUlFTERfU1VCVFJFRVMgMgorCisvKgorICogSW52b2tlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggbm90ZSBpbiB0aGUgZ2l2ZW4gbm90ZXNfdHJlZQorICoKKyAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIG5vbnplcm8sIHRoZSBub3RlIHdhbGsgaXMgYWJvcnRlZCwgYW5kIHRoZSByZXR1cm4KKyAqIHZhbHVlIGZyb20gdGhlIGNhbGxiYWNrIGlzIHJldHVybmVkIGZyb20gZm9yX2VhY2hfbm90ZSgpLiBIZW5jZSwgYSB6ZXJvCisgKiByZXR1cm4gdmFsdWUgZnJvbSBmb3JfZWFjaF9ub3RlKCkgaW5kaWNhdGVzIHRoYXQgYWxsIG5vdGVzIHdlcmUgd2Fsa2VkCisgKiBzdWNjZXNzZnVsbHkuCisgKgorICogSU1QT1JUQU5UOiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgTk9UIGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBub3RlcyB0cmVlLgorICogSW4gb3RoZXIgd29yZHMsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBOT1QgYmUgaW52b2tlZCAob24gdGhlIGN1cnJlbnQKKyAqIG5vdGVzIHRyZWUpIGZyb20gd2l0aGluIHRoZSBjYWxsYmFjazoKKyAqIC0gYWRkX25vdGUoKQorICogLSByZW1vdmVfbm90ZSgpCisgKiAtIGNvcHlfbm90ZSgpCisgKiAtIGZyZWVfbm90ZXMoKQorICovCit0eXBlZGVmIGludCBlYWNoX25vdGVfZm4oY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGVfc2hhMSwgY2hhciAqbm90ZV9wYXRoLAorCQl2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBpbnQgZmxhZ3MsIGVhY2hfbm90ZV9mbiBmbiwKKwkJdm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBXcml0ZSB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBzdHJ1Y3R1cmUgdG8gdGhlIG9iamVjdCBkYXRhYmFzZQorICoKKyAqIENyZWF0ZXMgYSBuZXcgdHJlZSBvYmplY3QgZW5jYXBzdWxhdGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZ2l2ZW4KKyAqIG5vdGVzX3RyZWUsIGFuZCBzdG9yZXMgaXRzIFNIQTEgaW50byB0aGUgJ3Jlc3VsdCcgYXJndW1lbnQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuCisgKgorICogSU1QT1JUQU5UOiBDaGFuZ2VzIG1hZGUgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUgYXJlIG5vdCBwZXJzaXN0ZW50IHVudGlsCisgKiB0aGlzIGZ1bmN0aW9uIGhhcyByZXR1cm5lZCB6ZXJvLiBQbGVhc2UgYWxzbyByZW1lbWJlciB0byBjcmVhdGUgYQorICogY29ycmVzcG9uZGluZyBjb21taXQgb2JqZWN0LCBhbmQgdXBkYXRlIHRoZSBhcHByb3ByaWF0ZSBub3RlcyByZWYuCisgKi8KK2ludCB3cml0ZV9ub3Rlc190cmVlKHN0cnVjdCBub3Rlc190cmVlICp0LCB1bnNpZ25lZCBjaGFyICpyZXN1bHQpOworCisvKiBGbGFncyBjb250cm9sbGluZyB0aGUgb3BlcmF0aW9uIG9mIHBydW5lICovCisjZGVmaW5lIE5PVEVTX1BSVU5FX1ZFUkJPU0UgMQorI2RlZmluZSBOT1RFU19QUlVORV9EUllSVU4gMgorLyoKKyAqIFJlbW92ZSBhbGwgbm90ZXMgYW5ub3RhdGluZyBub24tZXhpc3Rpbmcgb2JqZWN0cyBmcm9tIHRoZSBnaXZlbiBub3RlcyB0cmVlCisgKgorICogQWxsIG5vdGVzIGluIHRoZSBnaXZlbiBub3Rlc190cmVlIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBvYmplY3RzIHRoYXQgbm8KKyAqIGxvbmdlciBleGlzdCBpbiB0aGUgZGF0YWJhc2UsIGFyZSByZW1vdmVkIGZyb20gdGhlIG5vdGVzIHRyZWUuCisgKgorICogSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBtYWRlIGJ5IHBydW5lX25vdGVzKCkgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUKKyAqIHN0cnVjdHVyZSBhcmUgbm90IHBlcnNpc3RlbnQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gd3JpdGVfbm90ZXNfdHJlZSgpCisgKiByZXR1cm5zIHplcm8uCisgKi8KK3ZvaWQgcHJ1bmVfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGludCBmbGFncyk7CisKKy8qCisgKiBGcmVlIChhbmQgZGUtaW5pdGlhbGl6ZSkgdGhlIGdpdmVuIG5vdGVzX3RyZWUgc3RydWN0dXJlCisgKgorICogSU1QT1JUQU5UOiBDaGFuZ2VzIG1hZGUgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUgc2luY2UgdGhlIGxhc3QsIHN1Y2Nlc3NmdWwKKyAqIGNhbGwgdG8gd3JpdGVfbm90ZXNfdHJlZSgpIHdpbGwgYmUgbG9zdC4KKyAqLwordm9pZCBmcmVlX25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0KTsKKworLyogRmxhZ3MgY29udHJvbGxpbmcgaG93IG5vdGVzIGFyZSBmb3JtYXR0ZWQgKi8KKyNkZWZpbmUgTk9URVNfU0hPV19IRUFERVIgMQorI2RlZmluZSBOT1RFU19JTkRFTlQgMgorCitzdHJ1Y3Qgc3RyaW5nX2xpc3Q7CisKK3N0cnVjdCBkaXNwbGF5X25vdGVzX29wdCB7CisJaW50IHVzZV9kZWZhdWx0X25vdGVzOworCXN0cnVjdCBzdHJpbmdfbGlzdCBleHRyYV9ub3Rlc19yZWZzOworfTsKKworLyoKKyAqIExvYWQgdGhlIG5vdGVzIG1hY2hpbmVyeSBmb3IgZGlzcGxheWluZyBzZXZlcmFsIG5vdGVzIHRyZWVzLgorICoKKyAqIElmICdvcHQnIGlzIG5vdCBOVUxMLCB0aGVuIGl0IHNwZWNpZmllcyBhZGRpdGlvbmFsIHNldHRpbmdzIGZvciB0aGUKKyAqIGRpc3BsYXlpbmc6CisgKgorICogLSBzdXBwcmVzc19kZWZhdWx0X25vdGVzIGluZGljYXRlcyB0aGF0IHRoZSBub3RlcyBmcm9tCisgKiAgIGNvcmUubm90ZXNSZWYgYW5kIG5vdGVzLmRpc3BsYXlSZWYgc2hvdWxkIG5vdCBiZSBsb2FkZWQuCisgKgorICogLSBleHRyYV9ub3Rlc19yZWZzIG1heSBjb250YWluIGEgbGlzdCBvZiBnbG9icyAoaW4gdGhlIHNhbWUgc3R5bGUKKyAqICAgYXMgbm90ZXMuZGlzcGxheVJlZikgd2hlcmUgbm90ZXMgc2hvdWxkIGJlIGxvYWRlZCBmcm9tLgorICovCit2b2lkIGluaXRfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCk7CisKKy8qCisgKiBBcHBlbmQgbm90ZXMgZm9yIHRoZSBnaXZlbiAnb2JqZWN0X3NoYTEnIGZyb20gYWxsIHRyZWVzIHNldCB1cCBieQorICogaW5pdF9kaXNwbGF5X25vdGVzKCkgdG8gJ3NiJy4gIFRoZSAnZmxhZ3MnIGFyZSBhIGJpdHdpc2UKKyAqIGNvbWJpbmF0aW9uIG9mCisgKgorICogLSBOT1RFU19TSE9XX0hFQURFUjogYWRkIGEgJ05vdGVzIChyZWZuYW1lKTonIGhlYWRlcgorICoKKyAqIC0gTk9URVNfSU5ERU5UOiBpbmRlbnQgdGhlIG5vdGVzIGJ5IDQgcGxhY2VzCisgKgorICogWW91ICptdXN0KiBjYWxsIGluaXRfZGlzcGxheV9ub3RlcygpIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIGZvcm1hdF9kaXNwbGF5X25vdGVzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9iamVjdF9zaGExLAorCQkJICBzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nLCBpbnQgZmxhZ3MpOworCisvKgorICogTG9hZCB0aGUgbm90ZXMgdHJlZSBmcm9tIGVhY2ggcmVmIGxpc3RlZCBpbiAncmVmcycuICBUaGUgb3V0cHV0IGlzCisgKiBhbiBhcnJheSBvZiBub3Rlc190cmVlKiwgdGVybWluYXRlZCBieSBhIE5VTEwuCisgKi8KK3N0cnVjdCBub3Rlc190cmVlICoqbG9hZF9ub3Rlc190cmVlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZnMpOworCisvKgorICogQWRkIGFsbCByZWZzIHRoYXQgbWF0Y2ggJ2dsb2InIHRvIHRoZSAnbGlzdCcuCisgKi8KK3ZvaWQgc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKmdsb2IpOworCisvKgorICogQWRkIGFsbCByZWZzIGZyb20gYSBjb2xvbi1zZXBhcmF0ZWQgZ2xvYiBsaXN0ICdnbG9icycgdG8gdGhlIGVuZCBvZgorICogJ2xpc3QnLiAgRW1wdHkgY29tcG9uZW50cyBhcmUgaWdub3JlZC4gIFRoaXMgaGVscGVyIGlzIHVzZWQgdG8KKyAqIHBhcnNlIEdJVF9OT1RFU19ESVNQTEFZX1JFRiBzdHlsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisgKi8KK3ZvaWQgc3RyaW5nX2xpc3RfYWRkX3JlZnNfZnJvbV9jb2xvbl9zZXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCQkgY29uc3QgY2hhciAqZ2xvYnMpOworCisvKiBFeHBhbmQgaW5wbGFjZSBhIG5vdGUgcmVmIGxpa2UgImZvbyIgb3IgIm5vdGVzL2ZvbyIgaW50byAicmVmcy9ub3Rlcy9mb28iICovCit2b2lkIGV4cGFuZF9ub3Rlc19yZWYoc3RydWN0IHN0cmJ1ZiAqc2IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL29iamVjdC5jIGIvb2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmMzQ1MQotLS0gL2Rldi9udWxsCisrKyBiL29iamVjdC5jCkBAIC0wLDAgKzEsMjk5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorCitzdGF0aWMgc3RydWN0IG9iamVjdCAqKm9ial9oYXNoOworc3RhdGljIGludCBucl9vYmpzLCBvYmpfaGFzaF9zaXplOworCit1bnNpZ25lZCBpbnQgZ2V0X21heF9vYmplY3RfaW5kZXgodm9pZCkKK3sKKwlyZXR1cm4gb2JqX2hhc2hfc2l6ZTsKK30KKworc3RydWN0IG9iamVjdCAqZ2V0X2luZGV4ZWRfb2JqZWN0KHVuc2lnbmVkIGludCBpZHgpCit7CisJcmV0dXJuIG9ial9oYXNoW2lkeF07Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpvYmplY3RfdHlwZV9zdHJpbmdzW10gPSB7CisJTlVMTCwJCS8qIE9CSl9OT05FID0gMCAqLworCSJjb21taXQiLAkvKiBPQkpfQ09NTUlUID0gMSAqLworCSJ0cmVlIiwJCS8qIE9CSl9UUkVFID0gMiAqLworCSJibG9iIiwJCS8qIE9CSl9CTE9CID0gMyAqLworCSJ0YWciLAkJLyogT0JKX1RBRyA9IDQgKi8KK307CisKK2NvbnN0IGNoYXIgKnR5cGVuYW1lKHVuc2lnbmVkIGludCB0eXBlKQoreworCWlmICh0eXBlID49IEFSUkFZX1NJWkUob2JqZWN0X3R5cGVfc3RyaW5ncykpCisJCXJldHVybiBOVUxMOworCXJldHVybiBvYmplY3RfdHlwZV9zdHJpbmdzW3R5cGVdOworfQorCitpbnQgdHlwZV9mcm9tX3N0cmluZyhjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShvYmplY3RfdHlwZV9zdHJpbmdzKTsgaSsrKQorCQlpZiAoIXN0cmNtcChzdHIsIG9iamVjdF90eXBlX3N0cmluZ3NbaV0pKQorCQkJcmV0dXJuIGk7CisJZGllKCJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIsIHN0cik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9vYmooc3RydWN0IG9iamVjdCAqb2JqLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwltZW1jcHkoJmhhc2gsIG9iai0+c2hhMSwgc2l6ZW9mKHVuc2lnbmVkIGludCkpOworCXJldHVybiBoYXNoICUgbjsKK30KKworc3RhdGljIHZvaWQgaW5zZXJ0X29ial9oYXNoKHN0cnVjdCBvYmplY3QgKm9iaiwgc3RydWN0IG9iamVjdCAqKmhhc2gsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCBqID0gaGFzaF9vYmoob2JqLCBzaXplKTsKKworCXdoaWxlIChoYXNoW2pdKSB7CisJCWorKzsKKwkJaWYgKGogPj0gc2l6ZSkKKwkJCWogPSAwOworCX0KKwloYXNoW2pdID0gb2JqOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGhhc2h0YWJsZV9pbmRleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGludCBpOworCW1lbWNweSgmaSwgc2hhMSwgc2l6ZW9mKHVuc2lnbmVkIGludCkpOworCXJldHVybiBpICUgb2JqX2hhc2hfc2l6ZTsKK30KKworc3RydWN0IG9iamVjdCAqbG9va3VwX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBvYmplY3QgKm9iajsKKworCWlmICghb2JqX2hhc2gpCisJCXJldHVybiBOVUxMOworCisJaSA9IGhhc2h0YWJsZV9pbmRleChzaGExKTsKKwl3aGlsZSAoKG9iaiA9IG9ial9oYXNoW2ldKSAhPSBOVUxMKSB7CisJCWlmICghaGFzaGNtcChzaGExLCBvYmotPnNoYTEpKQorCQkJYnJlYWs7CisJCWkrKzsKKwkJaWYgKGkgPT0gb2JqX2hhc2hfc2l6ZSkKKwkJCWkgPSAwOworCX0KKwlyZXR1cm4gb2JqOworfQorCitzdGF0aWMgdm9pZCBncm93X29iamVjdF9oYXNoKHZvaWQpCit7CisJaW50IGk7CisJaW50IG5ld19oYXNoX3NpemUgPSBvYmpfaGFzaF9zaXplIDwgMzIgPyAzMiA6IDIgKiBvYmpfaGFzaF9zaXplOworCXN0cnVjdCBvYmplY3QgKipuZXdfaGFzaDsKKworCW5ld19oYXNoID0geGNhbGxvYyhuZXdfaGFzaF9zaXplLCBzaXplb2Yoc3RydWN0IG9iamVjdCAqKSk7CisJZm9yIChpID0gMDsgaSA8IG9ial9oYXNoX3NpemU7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBvYmpfaGFzaFtpXTsKKwkJaWYgKCFvYmopCisJCQljb250aW51ZTsKKwkJaW5zZXJ0X29ial9oYXNoKG9iaiwgbmV3X2hhc2gsIG5ld19oYXNoX3NpemUpOworCX0KKwlmcmVlKG9ial9oYXNoKTsKKwlvYmpfaGFzaCA9IG5ld19oYXNoOworCW9ial9oYXNoX3NpemUgPSBuZXdfaGFzaF9zaXplOworfQorCit2b2lkICpjcmVhdGVfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCB0eXBlLCB2b2lkICpvKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IG87CisKKwlvYmotPnBhcnNlZCA9IDA7CisJb2JqLT51c2VkID0gMDsKKwlvYmotPnR5cGUgPSB0eXBlOworCW9iai0+ZmxhZ3MgPSAwOworCWhhc2hjcHkob2JqLT5zaGExLCBzaGExKTsKKworCWlmIChvYmpfaGFzaF9zaXplIC0gMSA8PSBucl9vYmpzICogMikKKwkJZ3Jvd19vYmplY3RfaGFzaCgpOworCisJaW5zZXJ0X29ial9oYXNoKG9iaiwgb2JqX2hhc2gsIG9ial9oYXNoX3NpemUpOworCW5yX29ianMrKzsKKwlyZXR1cm4gb2JqOworfQorCitzdHJ1Y3Qgb2JqZWN0ICpsb29rdXBfdW5rbm93bl9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlvYmogPSBjcmVhdGVfb2JqZWN0KHNoYTEsIE9CSl9OT05FLCBhbGxvY19vYmplY3Rfbm9kZSgpKTsKKwlyZXR1cm4gb2JqOworfQorCitzdHJ1Y3Qgb2JqZWN0ICpwYXJzZV9vYmplY3RfYnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgdW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpidWZmZXIsIGludCAqZWF0ZW5fcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJaW50IGVhdGVuID0gMDsKKworCW9iaiA9IE5VTEw7CisJaWYgKHR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJc3RydWN0IGJsb2IgKmJsb2IgPSBsb29rdXBfYmxvYihzaGExKTsKKwkJaWYgKGJsb2IpIHsKKwkJCWlmIChwYXJzZV9ibG9iX2J1ZmZlcihibG9iLCBidWZmZXIsIHNpemUpKQorCQkJCXJldHVybiBOVUxMOworCQkJb2JqID0gJmJsb2ItPm9iamVjdDsKKwkJfQorCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfVFJFRSkgeworCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IGxvb2t1cF90cmVlKHNoYTEpOworCQlpZiAodHJlZSkgeworCQkJb2JqID0gJnRyZWUtPm9iamVjdDsKKwkJCWlmICghdHJlZS0+YnVmZmVyKQorCQkJCXRyZWUtPm9iamVjdC5wYXJzZWQgPSAwOworCQkJaWYgKCF0cmVlLT5vYmplY3QucGFyc2VkKSB7CisJCQkJaWYgKHBhcnNlX3RyZWVfYnVmZmVyKHRyZWUsIGJ1ZmZlciwgc2l6ZSkpCisJCQkJCXJldHVybiBOVUxMOworCQkJCWVhdGVuID0gMTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfQ09NTUlUKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXQoc2hhMSk7CisJCWlmIChjb21taXQpIHsKKwkJCWlmIChwYXJzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgYnVmZmVyLCBzaXplKSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWlmICghY29tbWl0LT5idWZmZXIpIHsKKwkJCQljb21taXQtPmJ1ZmZlciA9IGJ1ZmZlcjsKKwkJCQllYXRlbiA9IDE7CisJCQl9CisJCQlvYmogPSAmY29tbWl0LT5vYmplY3Q7CisJCX0KKwl9IGVsc2UgaWYgKHR5cGUgPT0gT0JKX1RBRykgeworCQlzdHJ1Y3QgdGFnICp0YWcgPSBsb29rdXBfdGFnKHNoYTEpOworCQlpZiAodGFnKSB7CisJCQlpZiAocGFyc2VfdGFnX2J1ZmZlcih0YWcsIGJ1ZmZlciwgc2l6ZSkpCisJCQkgICAgICAgcmV0dXJuIE5VTEw7CisJCQlvYmogPSAmdGFnLT5vYmplY3Q7CisJCX0KKwl9IGVsc2UgeworCQl3YXJuaW5nKCJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIsIHNoYTFfdG9faGV4KHNoYTEpLCB0eXBlKTsKKwkJb2JqID0gTlVMTDsKKwl9CisJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gT0JKX05PTkUpCisJCW9iai0+dHlwZSA9IHR5cGU7CisJKmVhdGVuX3AgPSBlYXRlbjsKKwlyZXR1cm4gb2JqOworfQorCitzdHJ1Y3Qgb2JqZWN0ICpwYXJzZV9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWludCBlYXRlbjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpyZXBsID0gbG9va3VwX3JlcGxhY2Vfb2JqZWN0KHNoYTEpOworCXZvaWQgKmJ1ZmZlcjsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCWlmIChvYmogJiYgb2JqLT5wYXJzZWQpCisJCXJldHVybiBvYmo7CisKKwlpZiAoKG9iaiAmJiBvYmotPnR5cGUgPT0gT0JKX0JMT0IpIHx8CisJICAgICghb2JqICYmIGhhc19zaGExX2ZpbGUoc2hhMSkgJiYKKwkgICAgIHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCkgPT0gT0JKX0JMT0IpKSB7CisJCWlmIChjaGVja19zaGExX3NpZ25hdHVyZShyZXBsLCBOVUxMLCAwLCBOVUxMKSA8IDApIHsKKwkJCWVycm9yKCJzaGExIG1pc21hdGNoICVzIiwgc2hhMV90b19oZXgocmVwbCkpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcGFyc2VfYmxvYl9idWZmZXIobG9va3VwX2Jsb2Ioc2hhMSksIE5VTEwsIDApOworCQlyZXR1cm4gbG9va3VwX29iamVjdChzaGExKTsKKwl9CisKKwlidWZmZXIgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmIChidWZmZXIpIHsKKwkJaWYgKGNoZWNrX3NoYTFfc2lnbmF0dXJlKHJlcGwsIGJ1ZmZlciwgc2l6ZSwgdHlwZW5hbWUodHlwZSkpIDwgMCkgeworCQkJZnJlZShidWZmZXIpOworCQkJZXJyb3IoInNoYTEgbWlzbWF0Y2ggJXMiLCBzaGExX3RvX2hleChyZXBsKSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCW9iaiA9IHBhcnNlX29iamVjdF9idWZmZXIoc2hhMSwgdHlwZSwgc2l6ZSwgYnVmZmVyLCAmZWF0ZW4pOworCQlpZiAoIWVhdGVuKQorCQkJZnJlZShidWZmZXIpOworCQlyZXR1cm4gb2JqOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG9iamVjdF9saXN0ICpvYmplY3RfbGlzdF9pbnNlcnQoc3RydWN0IG9iamVjdCAqaXRlbSwKKwkJCQkgICAgICAgc3RydWN0IG9iamVjdF9saXN0ICoqbGlzdF9wKQoreworCXN0cnVjdCBvYmplY3RfbGlzdCAqbmV3X2xpc3QgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2xpc3QpKTsKKwluZXdfbGlzdC0+aXRlbSA9IGl0ZW07CisJbmV3X2xpc3QtPm5leHQgPSAqbGlzdF9wOworCSpsaXN0X3AgPSBuZXdfbGlzdDsKKwlyZXR1cm4gbmV3X2xpc3Q7Cit9CisKK2ludCBvYmplY3RfbGlzdF9jb250YWlucyhzdHJ1Y3Qgb2JqZWN0X2xpc3QgKmxpc3QsIHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwl3aGlsZSAobGlzdCkgeworCQlpZiAobGlzdC0+aXRlbSA9PSBvYmopCisJCQlyZXR1cm4gMTsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGFkZF9vYmplY3RfYXJyYXkoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSkKK3sKKwlhZGRfb2JqZWN0X2FycmF5X3dpdGhfbW9kZShvYmosIG5hbWUsIGFycmF5LCBTX0lGSU5WQUxJRCk7Cit9CisKK3ZvaWQgYWRkX29iamVjdF9hcnJheV93aXRoX21vZGUoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSwgdW5zaWduZWQgbW9kZSkKK3sKKwl1bnNpZ25lZCBuciA9IGFycmF5LT5ucjsKKwl1bnNpZ25lZCBhbGxvYyA9IGFycmF5LT5hbGxvYzsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpvYmplY3RzID0gYXJyYXktPm9iamVjdHM7CisKKwlpZiAobnIgPj0gYWxsb2MpIHsKKwkJYWxsb2MgPSAoYWxsb2MgKyAzMikgKiAyOworCQlvYmplY3RzID0geHJlYWxsb2Mob2JqZWN0cywgYWxsb2MgKiBzaXplb2YoKm9iamVjdHMpKTsKKwkJYXJyYXktPmFsbG9jID0gYWxsb2M7CisJCWFycmF5LT5vYmplY3RzID0gb2JqZWN0czsKKwl9CisJb2JqZWN0c1tucl0uaXRlbSA9IG9iajsKKwlvYmplY3RzW25yXS5uYW1lID0gbmFtZTsKKwlvYmplY3RzW25yXS5tb2RlID0gbW9kZTsKKwlhcnJheS0+bnIgPSArK25yOworfQorCit2b2lkIG9iamVjdF9hcnJheV9yZW1vdmVfZHVwbGljYXRlcyhzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVmLCBzcmMsIGRzdDsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpvYmplY3RzID0gYXJyYXktPm9iamVjdHM7CisKKwlmb3IgKHJlZiA9IDA7IHJlZiArIDEgPCBhcnJheS0+bnI7IHJlZisrKSB7CisJCWZvciAoc3JjID0gcmVmICsgMSwgZHN0ID0gc3JjOworCQkgICAgIHNyYyA8IGFycmF5LT5ucjsKKwkJICAgICBzcmMrKykgeworCQkJaWYgKCFzdHJjbXAob2JqZWN0c1tyZWZdLm5hbWUsIG9iamVjdHNbc3JjXS5uYW1lKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzcmMgIT0gZHN0KQorCQkJCW9iamVjdHNbZHN0XSA9IG9iamVjdHNbc3JjXTsKKwkJCWRzdCsrOworCQl9CisJCWFycmF5LT5uciA9IGRzdDsKKwl9Cit9CisKK3ZvaWQgY2xlYXJfb2JqZWN0X2ZsYWdzKHVuc2lnbmVkIGZsYWdzKQoreworCWludCBpOworCisJZm9yIChpPTA7IGkgPCBvYmpfaGFzaF9zaXplOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gb2JqX2hhc2hbaV07CisJCWlmIChvYmopCisJCQlvYmotPmZsYWdzICY9IH5mbGFnczsKKwl9Cit9CmRpZmYgLS1naXQgYS9vYmplY3QuaCBiL29iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTdiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9vYmplY3QuaApAQCAtMCwwICsxLDgxIEBACisjaWZuZGVmIE9CSkVDVF9ICisjZGVmaW5lIE9CSkVDVF9ICisKK3N0cnVjdCBvYmplY3RfbGlzdCB7CisJc3RydWN0IG9iamVjdCAqaXRlbTsKKwlzdHJ1Y3Qgb2JqZWN0X2xpc3QgKm5leHQ7Cit9OworCitzdHJ1Y3Qgb2JqZWN0X2FycmF5IHsKKwl1bnNpZ25lZCBpbnQgbnI7CisJdW5zaWduZWQgaW50IGFsbG9jOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgeworCQlzdHJ1Y3Qgb2JqZWN0ICppdGVtOworCQljb25zdCBjaGFyICpuYW1lOworCQl1bnNpZ25lZCBtb2RlOworCX0gKm9iamVjdHM7Cit9OworCisjZGVmaW5lIE9CSkVDVF9BUlJBWV9JTklUIHsgMCwgMCwgTlVMTCB9CisKKyNkZWZpbmUgVFlQRV9CSVRTICAgMworI2RlZmluZSBGTEFHX0JJVFMgIDI3CisKKy8qCisgKiBUaGUgb2JqZWN0IHR5cGUgaXMgc3RvcmVkIGluIDMgYml0cy4KKyAqLworc3RydWN0IG9iamVjdCB7CisJdW5zaWduZWQgcGFyc2VkIDogMTsKKwl1bnNpZ25lZCB1c2VkIDogMTsKKwl1bnNpZ25lZCB0eXBlIDogVFlQRV9CSVRTOworCXVuc2lnbmVkIGZsYWdzIDogRkxBR19CSVRTOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Cit9OworCitleHRlcm4gY29uc3QgY2hhciAqdHlwZW5hbWUodW5zaWduZWQgaW50IHR5cGUpOworZXh0ZXJuIGludCB0eXBlX2Zyb21fc3RyaW5nKGNvbnN0IGNoYXIgKnN0cik7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X21heF9vYmplY3RfaW5kZXgodm9pZCk7CitleHRlcm4gc3RydWN0IG9iamVjdCAqZ2V0X2luZGV4ZWRfb2JqZWN0KHVuc2lnbmVkIGludCk7CisKKy8qCisgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNlZSBpZiB3ZSBoYXZlIGhlYXJkIG9mIHRoZSBvYmplY3QgYmVmb3JlLCBidXQKKyAqIGl0IGNhbiByZXR1cm4gInllcyB3ZSBoYXZlLCBhbmQgaGVyZSBpcyBhIGhhbGYtaW5pdGlhbGlzZWQgb2JqZWN0IgorICogZm9yIGFuIG9iamVjdCB0aGF0IHdlIGhhdmVuJ3QgbG9hZGVkL3BhcnNlZCB5ZXQuCisgKgorICogV2hlbiBwYXJzaW5nIGEgY29tbWl0IHRvIGNyZWF0ZSBhbiBpbi1jb3JlIGNvbW1pdCBvYmplY3QsIGl0cworICogcGFyZW50cyBsaXN0IGhvbGRzIGNvbW1pdCBvYmplY3RzIHRoYXQgcmVwcmVzZW50IGl0cyBwYXJlbnRzLCBidXQKKyAqIHRoZXkgYXJlIGV4cGVjdGVkIHRvIGJlIGxhemlseSBpbml0aWFsaXplZCBhbmQgZG8gbm90IGtub3cgd2hhdAorICogdGhlaXIgdHJlZXMgb3IgcGFyZW50cyBhcmUgeWV0LiAgV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc3VjaCBhCisgKiBoYWxmLWluaXRpYWxpc2VkIG9iamVjdHMsIHRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gaW5pdGlhbGl6ZSB0aGVtCisgKiBieSBjYWxsaW5nIHBhcnNlX29iamVjdCgpIG9uIHRoZW0uCisgKi8KK3N0cnVjdCBvYmplY3QgKmxvb2t1cF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKK2V4dGVybiB2b2lkICpjcmVhdGVfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCB0eXBlLCB2b2lkICpvYmopOworCisvKiogUmV0dXJucyB0aGUgb2JqZWN0LCBoYXZpbmcgcGFyc2VkIGl0IHRvIGZpbmQgb3V0IHdoYXQgaXQgaXMuICoqLworc3RydWN0IG9iamVjdCAqcGFyc2Vfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCisvKiBHaXZlbiB0aGUgcmVzdWx0IG9mIHJlYWRfc2hhMV9maWxlKCksIHJldHVybnMgdGhlIG9iamVjdCBhZnRlcgorICogcGFyc2luZyBpdC4gIGVhdGVuX3AgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3QgaGFzIGEgYm9ycm93ZWQgY29weQorICogb2YgYnVmZmVyIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSgpIGl0LgorICovCitzdHJ1Y3Qgb2JqZWN0ICpwYXJzZV9vYmplY3RfYnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgdW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpidWZmZXIsIGludCAqZWF0ZW5fcCk7CisKKy8qKiBSZXR1cm5zIHRoZSBvYmplY3QsIHdpdGggcG90ZW50aWFsbHkgZXhjZXNzIG1lbW9yeSBhbGxvY2F0ZWQuICoqLworc3RydWN0IG9iamVjdCAqbG9va3VwX3Vua25vd25fb2JqZWN0KGNvbnN0IHVuc2lnbmVkICBjaGFyICpzaGExKTsKKworc3RydWN0IG9iamVjdF9saXN0ICpvYmplY3RfbGlzdF9pbnNlcnQoc3RydWN0IG9iamVjdCAqaXRlbSwKKwkJCQkgICAgICAgc3RydWN0IG9iamVjdF9saXN0ICoqbGlzdF9wKTsKKworaW50IG9iamVjdF9saXN0X2NvbnRhaW5zKHN0cnVjdCBvYmplY3RfbGlzdCAqbGlzdCwgc3RydWN0IG9iamVjdCAqb2JqKTsKKworLyogT2JqZWN0IGFycmF5IGhhbmRsaW5nIC4uICovCit2b2lkIGFkZF9vYmplY3RfYXJyYXkoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSk7Cit2b2lkIGFkZF9vYmplY3RfYXJyYXlfd2l0aF9tb2RlKHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIG1vZGUpOwordm9pZCBvYmplY3RfYXJyYXlfcmVtb3ZlX2R1cGxpY2F0ZXMoc3RydWN0IG9iamVjdF9hcnJheSAqKTsKKwordm9pZCBjbGVhcl9vYmplY3RfZmxhZ3ModW5zaWduZWQgZmxhZ3MpOworCisjZW5kaWYgLyogT0JKRUNUX0ggKi8KZGlmZiAtLWdpdCBhL3BhY2stY2hlY2suYyBiL3BhY2stY2hlY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2E1OTVjCi0tLSAvZGV2L251bGwKKysrIGIvcGFjay1jaGVjay5jCkBAIC0wLDAgKzEsMTgxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisKK3N0cnVjdCBpZHhfZW50cnkgeworCW9mZl90ICAgICAgICAgICAgICAgIG9mZnNldDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCXVuc2lnbmVkIGludCBucjsKK307CisKK3N0YXRpYyBpbnQgY29tcGFyZV9lbnRyaWVzKGNvbnN0IHZvaWQgKmUxLCBjb25zdCB2b2lkICplMikKK3sKKwljb25zdCBzdHJ1Y3QgaWR4X2VudHJ5ICplbnRyeTEgPSBlMTsKKwljb25zdCBzdHJ1Y3QgaWR4X2VudHJ5ICplbnRyeTIgPSBlMjsKKwlpZiAoZW50cnkxLT5vZmZzZXQgPCBlbnRyeTItPm9mZnNldCkKKwkJcmV0dXJuIC0xOworCWlmIChlbnRyeTEtPm9mZnNldCA+IGVudHJ5Mi0+b2Zmc2V0KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNoZWNrX3BhY2tfY3JjKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCSAgIG9mZl90IG9mZnNldCwgb2ZmX3QgbGVuLCB1bnNpZ25lZCBpbnQgbnIpCit7CisJY29uc3QgdWludDMyX3QgKmluZGV4X2NyYzsKKwl1aW50MzJfdCBkYXRhX2NyYyA9IGNyYzMyKDAsIE5VTEwsIDApOworCisJZG8geworCQl1bnNpZ25lZCBsb25nIGF2YWlsOworCQl2b2lkICpkYXRhID0gdXNlX3BhY2socCwgd19jdXJzLCBvZmZzZXQsICZhdmFpbCk7CisJCWlmIChhdmFpbCA+IGxlbikKKwkJCWF2YWlsID0gbGVuOworCQlkYXRhX2NyYyA9IGNyYzMyKGRhdGFfY3JjLCBkYXRhLCBhdmFpbCk7CisJCW9mZnNldCArPSBhdmFpbDsKKwkJbGVuIC09IGF2YWlsOworCX0gd2hpbGUgKGxlbik7CisKKwlpbmRleF9jcmMgPSBwLT5pbmRleF9kYXRhOworCWluZGV4X2NyYyArPSAyICsgMjU2ICsgcC0+bnVtX29iamVjdHMgKiAoMjAvNCkgKyBucjsKKworCXJldHVybiBkYXRhX2NyYyAhPSBudG9obCgqaW5kZXhfY3JjKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfcGFja2ZpbGUoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkgICB2ZXJpZnlfZm4gZm4sCisJCQkgICBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLCB1aW50MzJfdCBiYXNlX2NvdW50KQorCit7CisJb2ZmX3QgaW5kZXhfc2l6ZSA9IHAtPmluZGV4X3NpemU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5kZXhfYmFzZSA9IHAtPmluZGV4X2RhdGE7CisJZ2l0X1NIQV9DVFggY3R4OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sICpwYWNrX3NpZzsKKwlvZmZfdCBvZmZzZXQgPSAwLCBwYWNrX3NpZ19vZnMgPSAwOworCXVpbnQzMl90IG5yX29iamVjdHMsIGk7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGlkeF9lbnRyeSAqZW50cmllczsKKworCS8qIE5vdGUgdGhhdCB0aGUgcGFjayBoZWFkZXIgY2hlY2tzIGFyZSBhY3R1YWxseSBwZXJmb3JtZWQgYnkKKwkgKiB1c2VfcGFjayB3aGVuIGl0IGZpcnN0IG9wZW5zIHRoZSBwYWNrIGZpbGUuICBJZiBhbnl0aGluZworCSAqIGdvZXMgd3JvbmcgZHVyaW5nIHRob3NlIGNoZWNrcyB0aGVuIHRoZSBjYWxsIHdpbGwgZGllIG91dAorCSAqIGltbWVkaWF0ZWx5LgorCSAqLworCisJZ2l0X1NIQTFfSW5pdCgmY3R4KTsKKwlkbyB7CisJCXVuc2lnbmVkIGxvbmcgcmVtYWluaW5nOworCQl1bnNpZ25lZCBjaGFyICppbiA9IHVzZV9wYWNrKHAsIHdfY3Vycywgb2Zmc2V0LCAmcmVtYWluaW5nKTsKKwkJb2Zmc2V0ICs9IHJlbWFpbmluZzsKKwkJaWYgKCFwYWNrX3NpZ19vZnMpCisJCQlwYWNrX3NpZ19vZnMgPSBwLT5wYWNrX3NpemUgLSAyMDsKKwkJaWYgKG9mZnNldCA+IHBhY2tfc2lnX29mcykKKwkJCXJlbWFpbmluZyAtPSAodW5zaWduZWQgaW50KShvZmZzZXQgLSBwYWNrX3NpZ19vZnMpOworCQlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgaW4sIHJlbWFpbmluZyk7CisJfSB3aGlsZSAob2Zmc2V0IDwgcGFja19zaWdfb2ZzKTsKKwlnaXRfU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKKwlwYWNrX3NpZyA9IHVzZV9wYWNrKHAsIHdfY3VycywgcGFja19zaWdfb2ZzLCBOVUxMKTsKKwlpZiAoaGFzaGNtcChzaGExLCBwYWNrX3NpZykpCisJCWVyciA9IGVycm9yKCIlcyBTSEExIGNoZWNrc3VtIG1pc21hdGNoIiwKKwkJCSAgICBwLT5wYWNrX25hbWUpOworCWlmIChoYXNoY21wKGluZGV4X2Jhc2UgKyBpbmRleF9zaXplIC0gNDAsIHBhY2tfc2lnKSkKKwkJZXJyID0gZXJyb3IoIiVzIFNIQTEgZG9lcyBub3QgbWF0Y2ggaXRzIGluZGV4IiwKKwkJCSAgICBwLT5wYWNrX25hbWUpOworCXVudXNlX3BhY2sod19jdXJzKTsKKworCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIHJlYWNoYWJsZSBmcm9tIGlkeCBpcyB2YWxpZC4gIFNpbmNlIHdlCisJICogaGF2ZSB2ZXJpZmllZCB0aGF0IG5yX29iamVjdHMgbWF0Y2hlcyBiZXR3ZWVuIGlkeCBhbmQgcGFjaywKKwkgKiB3ZSBkbyBub3QgZG8gc2Nhbi1zdHJlYW1pbmcgY2hlY2sgb24gdGhlIHBhY2sgZmlsZS4KKwkgKi8KKwlucl9vYmplY3RzID0gcC0+bnVtX29iamVjdHM7CisJZW50cmllcyA9IHhtYWxsb2MoKG5yX29iamVjdHMgKyAxKSAqIHNpemVvZigqZW50cmllcykpOworCWVudHJpZXNbbnJfb2JqZWN0c10ub2Zmc2V0ID0gcGFja19zaWdfb2ZzOworCS8qIGZpcnN0IHNvcnQgZW50cmllcyBieSBwYWNrIG9mZnNldCwgc2luY2UgdW5wYWNraW5nIHRoZW0gaXMgbW9yZSBlZmZpY2llbnQgdGhhdCB3YXkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCWVudHJpZXNbaV0uc2hhMSA9IG50aF9wYWNrZWRfb2JqZWN0X3NoYTEocCwgaSk7CisJCWlmICghZW50cmllc1tpXS5zaGExKQorCQkJZGllKCJpbnRlcm5hbCBlcnJvciBwYWNrLWNoZWNrIG50aC1wYWNrZWQtb2JqZWN0Iik7CisJCWVudHJpZXNbaV0ub2Zmc2V0ID0gbnRoX3BhY2tlZF9vYmplY3Rfb2Zmc2V0KHAsIGkpOworCQllbnRyaWVzW2ldLm5yID0gaTsKKwl9CisJcXNvcnQoZW50cmllcywgbnJfb2JqZWN0cywgc2l6ZW9mKCplbnRyaWVzKSwgY29tcGFyZV9lbnRyaWVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJdm9pZCAqZGF0YTsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisKKwkJaWYgKHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCQlvZmZfdCBvZmZzZXQgPSBlbnRyaWVzW2ldLm9mZnNldDsKKwkJCW9mZl90IGxlbiA9IGVudHJpZXNbaSsxXS5vZmZzZXQgLSBvZmZzZXQ7CisJCQl1bnNpZ25lZCBpbnQgbnIgPSBlbnRyaWVzW2ldLm5yOworCQkJaWYgKGNoZWNrX3BhY2tfY3JjKHAsIHdfY3Vycywgb2Zmc2V0LCBsZW4sIG5yKSkKKwkJCQllcnIgPSBlcnJvcigiaW5kZXggQ1JDIG1pc21hdGNoIGZvciBvYmplY3QgJXMgIgorCQkJCQkgICAgImZyb20gJXMgYXQgb2Zmc2V0ICUiUFJJdU1BWCIiLAorCQkJCQkgICAgc2hhMV90b19oZXgoZW50cmllc1tpXS5zaGExKSwKKwkJCQkJICAgIHAtPnBhY2tfbmFtZSwgKHVpbnRtYXhfdClvZmZzZXQpOworCQl9CisJCWRhdGEgPSB1bnBhY2tfZW50cnkocCwgZW50cmllc1tpXS5vZmZzZXQsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghZGF0YSkKKwkJCWVyciA9IGVycm9yKCJjYW5ub3QgdW5wYWNrICVzIGZyb20gJXMgYXQgb2Zmc2V0ICUiUFJJdU1BWCIiLAorCQkJCSAgICBzaGExX3RvX2hleChlbnRyaWVzW2ldLnNoYTEpLCBwLT5wYWNrX25hbWUsCisJCQkJICAgICh1aW50bWF4X3QpZW50cmllc1tpXS5vZmZzZXQpOworCQllbHNlIGlmIChjaGVja19zaGExX3NpZ25hdHVyZShlbnRyaWVzW2ldLnNoYTEsIGRhdGEsIHNpemUsIHR5cGVuYW1lKHR5cGUpKSkKKwkJCWVyciA9IGVycm9yKCJwYWNrZWQgJXMgZnJvbSAlcyBpcyBjb3JydXB0IiwKKwkJCQkgICAgc2hhMV90b19oZXgoZW50cmllc1tpXS5zaGExKSwgcC0+cGFja19uYW1lKTsKKwkJZWxzZSBpZiAoZm4pIHsKKwkJCWludCBlYXRlbiA9IDA7CisJCQlmbihlbnRyaWVzW2ldLnNoYTEsIHR5cGUsIHNpemUsIGRhdGEsICZlYXRlbik7CisJCQlpZiAoZWF0ZW4pCisJCQkJZGF0YSA9IE5VTEw7CisJCX0KKwkJaWYgKCgoYmFzZV9jb3VudCArIGkpICYgMTAyMykgPT0gMCkKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGJhc2VfY291bnQgKyBpKTsKKwkJZnJlZShkYXRhKTsKKworCX0KKwlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBiYXNlX2NvdW50ICsgaSk7CisJZnJlZShlbnRyaWVzKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCB2ZXJpZnlfcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlvZmZfdCBpbmRleF9zaXplOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGV4X2Jhc2U7CisJZ2l0X1NIQV9DVFggY3R4OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IGVyciA9IDA7CisKKwlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGluZGV4IG5vdCBvcGVuZWQiLCBwLT5wYWNrX25hbWUpOworCWluZGV4X3NpemUgPSBwLT5pbmRleF9zaXplOworCWluZGV4X2Jhc2UgPSBwLT5pbmRleF9kYXRhOworCisJLyogVmVyaWZ5IFNIQTEgc3VtIG9mIHRoZSBpbmRleCBmaWxlICovCisJZ2l0X1NIQTFfSW5pdCgmY3R4KTsKKwlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgaW5kZXhfYmFzZSwgKHVuc2lnbmVkIGludCkoaW5kZXhfc2l6ZSAtIDIwKSk7CisJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmN0eCk7CisJaWYgKGhhc2hjbXAoc2hhMSwgaW5kZXhfYmFzZSArIGluZGV4X3NpemUgLSAyMCkpCisJCWVyciA9IGVycm9yKCJQYWNrZmlsZSBpbmRleCBmb3IgJXMgU0hBMSBtaXNtYXRjaCIsCisJCQkgICAgcC0+cGFja19uYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgdmVyaWZ5X3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnAsIHZlcmlmeV9mbiBmbiwKKwkJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgdWludDMyX3QgYmFzZV9jb3VudCkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7CisKKwllcnIgfD0gdmVyaWZ5X3BhY2tfaW5kZXgocCk7CisJaWYgKCFwLT5pbmRleF9kYXRhKQorCQlyZXR1cm4gLTE7CisKKwllcnIgfD0gdmVyaWZ5X3BhY2tmaWxlKHAsICZ3X2N1cnMsIGZuLCBwcm9ncmVzcywgYmFzZV9jb3VudCk7CisJdW51c2VfcGFjaygmd19jdXJzKTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9wYWNrLXJlZnMuYyBiL3BhY2stcmVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOWEwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrLXJlZnMuYwpAQCAtMCwwICsxLDE0OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInBhY2stcmVmcy5oIgorCitzdHJ1Y3QgcmVmX3RvX3BydW5lIHsKKwlzdHJ1Y3QgcmVmX3RvX3BydW5lICpuZXh0OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworc3RydWN0IHBhY2tfcmVmc19jYl9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJc3RydWN0IHJlZl90b19wcnVuZSAqcmVmX3RvX3BydW5lOworCUZJTEUgKnJlZnNfZmlsZTsKK307CisKK3N0YXRpYyBpbnQgZG9fbm90X3BydW5lKGludCBmbGFncykKK3sKKwkvKiBJZiBpdCBpcyBhbHJlYWR5IHBhY2tlZCBvciBpZiBpdCBpcyBhIHN5bXJlZiwKKwkgKiBkbyBub3QgcHJ1bmUgaXQuCisJICovCisJcmV0dXJuIChmbGFncyAmIChSRUZfSVNTWU1SRUZ8UkVGX0lTUEFDS0VEKSk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX29uZV9yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBwYWNrX3JlZnNfY2JfZGF0YSAqY2IgPSBjYl9kYXRhOworCWludCBpc190YWdfcmVmOworCisJLyogRG8gbm90IHBhY2sgdGhlIHN5bWJvbGljIHJlZnMgKi8KKwlpZiAoKGZsYWdzICYgUkVGX0lTU1lNUkVGKSkKKwkJcmV0dXJuIDA7CisJaXNfdGFnX3JlZiA9ICFwcmVmaXhjbXAocGF0aCwgInJlZnMvdGFncy8iKTsKKworCS8qIEFMV0FZUyBwYWNrIHJlZnMgdGhhdCB3ZXJlIGFscmVhZHkgcGFja2VkIG9yIGFyZSB0YWdzICovCisJaWYgKCEoY2ItPmZsYWdzICYgUEFDS19SRUZTX0FMTCkgJiYgIWlzX3RhZ19yZWYgJiYgIShmbGFncyAmIFJFRl9JU1BBQ0tFRCkpCisJCXJldHVybiAwOworCisJZnByaW50ZihjYi0+cmVmc19maWxlLCAiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCBwYXRoKTsKKwlpZiAoaXNfdGFnX3JlZikgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCQlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCQlvID0gZGVyZWZfdGFnKG8sIHBhdGgsIDApOworCQkJaWYgKG8pCisJCQkJZnByaW50ZihjYi0+cmVmc19maWxlLCAiXiVzXG4iLAorCQkJCQlzaGExX3RvX2hleChvLT5zaGExKSk7CisJCX0KKwl9CisKKwlpZiAoKGNiLT5mbGFncyAmIFBBQ0tfUkVGU19QUlVORSkgJiYgIWRvX25vdF9wcnVuZShmbGFncykpIHsKKwkJaW50IG5hbWVsZW4gPSBzdHJsZW4ocGF0aCkgKyAxOworCQlzdHJ1Y3QgcmVmX3RvX3BydW5lICpuID0geGNhbGxvYygxLCBzaXplb2YoKm4pICsgbmFtZWxlbik7CisJCWhhc2hjcHkobi0+c2hhMSwgc2hhMSk7CisJCXN0cmNweShuLT5uYW1lLCBwYXRoKTsKKwkJbi0+bmV4dCA9IGNiLT5yZWZfdG9fcHJ1bmU7CisJCWNiLT5yZWZfdG9fcHJ1bmUgPSBuOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSBlbXB0eSBwYXJlbnRzLCBidXQgc3BhcmUgcmVmcy8gYW5kIGltbWVkaWF0ZSBzdWJkaXJzLgorICogTm90ZTogbXVuZ2VzICpuYW1lLgorICovCitzdGF0aWMgdm9pZCB0cnlfcmVtb3ZlX2VtcHR5X3BhcmVudHMoY2hhciAqbmFtZSkKK3sKKwljaGFyICpwLCAqcTsKKwlpbnQgaTsKKwlwID0gbmFtZTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7IC8qIHJlZnMve2hlYWRzLHRhZ3MsLi4ufS8gKi8KKwkJd2hpbGUgKCpwICYmICpwICE9ICcvJykKKwkJCXArKzsKKwkJLyogdG9sZXJhdGUgZHVwbGljYXRlIHNsYXNoZXM7IHNlZSBjaGVja19yZWZuYW1lX2Zvcm1hdCgpICovCisJCXdoaWxlICgqcCA9PSAnLycpCisJCQlwKys7CisJfQorCWZvciAocSA9IHA7ICpxOyBxKyspCisJCTsKKwl3aGlsZSAoMSkgeworCQl3aGlsZSAocSA+IHAgJiYgKnEgIT0gJy8nKQorCQkJcS0tOworCQl3aGlsZSAocSA+IHAgJiYgKihxLTEpID09ICcvJykKKwkJCXEtLTsKKwkJaWYgKHEgPT0gcCkKKwkJCWJyZWFrOworCQkqcSA9ICdcMCc7CisJCWlmIChybWRpcihnaXRfcGF0aCgiJXMiLCBuYW1lKSkpCisJCQlicmVhazsKKwl9Cit9CisKKy8qIG1ha2Ugc3VyZSBub2JvZHkgdG91Y2hlZCB0aGUgcmVmLCBhbmQgdW5saW5rICovCitzdGF0aWMgdm9pZCBwcnVuZV9yZWYoc3RydWN0IHJlZl90b19wcnVuZSAqcikKK3sKKwlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2sgPSBsb2NrX3JlZl9zaGExKHItPm5hbWUgKyA1LCByLT5zaGExKTsKKworCWlmIChsb2NrKSB7CisJCXVubGlua19vcl93YXJuKGdpdF9wYXRoKCIlcyIsIHItPm5hbWUpKTsKKwkJdW5sb2NrX3JlZihsb2NrKTsKKwkJdHJ5X3JlbW92ZV9lbXB0eV9wYXJlbnRzKHItPm5hbWUpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJ1bmVfcmVmcyhzdHJ1Y3QgcmVmX3RvX3BydW5lICpyKQoreworCXdoaWxlIChyKSB7CisJCXBydW5lX3JlZihyKTsKKwkJciA9IHItPm5leHQ7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBwYWNrZWQ7CisKK2ludCBwYWNrX3JlZnModW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCBmZDsKKwlzdHJ1Y3QgcGFja19yZWZzX2NiX2RhdGEgY2JkYXRhOworCisJbWVtc2V0KCZjYmRhdGEsIDAsIHNpemVvZihjYmRhdGEpKTsKKwljYmRhdGEuZmxhZ3MgPSBmbGFnczsKKworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmcGFja2VkLCBnaXRfcGF0aCgicGFja2VkLXJlZnMiKSwKKwkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCWNiZGF0YS5yZWZzX2ZpbGUgPSBmZG9wZW4oZmQsICJ3Iik7CisJaWYgKCFjYmRhdGEucmVmc19maWxlKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgcmVmLXBhY2sgZmlsZSBzdHJ1Y3R1cmUiKTsKKworCS8qIHBlcmhhcHMgb3RoZXIgdHJhaXRzIGxhdGVyIGFzIHdlbGwgKi8KKwlmcHJpbnRmKGNiZGF0YS5yZWZzX2ZpbGUsICIjIHBhY2stcmVmcyB3aXRoOiBwZWVsZWQgXG4iKTsKKworCWZvcl9lYWNoX3JlZihoYW5kbGVfb25lX3JlZiwgJmNiZGF0YSk7CisJaWYgKGZlcnJvcihjYmRhdGEucmVmc19maWxlKSkKKwkJZGllKCJmYWlsZWQgdG8gd3JpdGUgcmVmLXBhY2sgZmlsZSIpOworCWlmIChmZmx1c2goY2JkYXRhLnJlZnNfZmlsZSkgfHwgZnN5bmMoZmQpIHx8IGZjbG9zZShjYmRhdGEucmVmc19maWxlKSkKKwkJZGllX2Vycm5vKCJmYWlsZWQgdG8gd3JpdGUgcmVmLXBhY2sgZmlsZSIpOworCS8qCisJICogU2luY2UgdGhlIGxvY2sgZmlsZSB3YXMgZmRvcGVuKCknZWQgYW5kIHRoZW4gZmNsb3NlKCknZWQgYWJvdmUsCisJICogYXNzaWduIC0xIHRvIHRoZSBsb2NrIGZpbGUgZGVzY3JpcHRvciBzbyB0aGF0IGNvbW1pdF9sb2NrX2ZpbGUoKQorCSAqIHdvbid0IHRyeSB0byBjbG9zZSgpIGl0LgorCSAqLworCXBhY2tlZC5mZCA9IC0xOworCWlmIChjb21taXRfbG9ja19maWxlKCZwYWNrZWQpIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gb3ZlcndyaXRlIG9sZCByZWYtcGFjayBmaWxlIik7CisJcHJ1bmVfcmVmcyhjYmRhdGEucmVmX3RvX3BydW5lKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3BhY2stcmVmcy5oIGIvcGFjay1yZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE4YWNmYgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2stcmVmcy5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgUEFDS19SRUZTX0gKKyNkZWZpbmUgUEFDS19SRUZTX0gKKworLyoKKyAqIEZsYWdzIGZvciBjb250cm9sbGluZyBiZWhhdmlvdXIgb2YgcGFja19yZWZzKCkKKyAqIFBBQ0tfUkVGU19QUlVORTogUHJ1bmUgbG9vc2UgcmVmcyBhZnRlciBwYWNraW5nCisgKiBQQUNLX1JFRlNfQUxMOiAgIFBhY2sgX2FsbF8gcmVmcywgbm90IGp1c3QgdGFncyBhbmQgYWxyZWFkeSBwYWNrZWQgcmVmcworICovCisjZGVmaW5lIFBBQ0tfUkVGU19QUlVORSAweDAwMDEKKyNkZWZpbmUgUEFDS19SRUZTX0FMTCAgIDB4MDAwMgorCisvKgorICogV3JpdGUgYSBwYWNrZWQtcmVmcyBmaWxlIGZvciB0aGUgY3VycmVudCByZXBvc2l0b3J5LgorICogZmxhZ3M6IENvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZSBQQUNLX1JFRlNfKiBmbGFncy4KKyAqLworaW50IHBhY2tfcmVmcyh1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisjZW5kaWYgLyogUEFDS19SRUZTX0ggKi8KZGlmZiAtLWdpdCBhL3BhY2stcmV2aW5kZXguYyBiL3BhY2stcmV2aW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2EwNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFjay1yZXZpbmRleC5jCkBAIC0wLDAgKzEsMTU2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYWNrLXJldmluZGV4LmgiCisKKy8qCisgKiBQYWNrIGluZGV4IGZvciBleGlzdGluZyBwYWNrcyBnaXZlIHVzIGVhc3kgYWNjZXNzIHRvIHRoZSBvZmZzZXRzIGludG8KKyAqIGNvcnJlc3BvbmRpbmcgcGFjayBmaWxlIHdoZXJlIGVhY2ggb2JqZWN0J3MgZGF0YSBzdGFydHMsIGJ1dCB0aGUgZW50cmllcworICogZG8gbm90IHN0b3JlIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIHJlcHJlc2VudGF0aW9uICh1bmNvbXByZXNzZWQKKyAqIHNpemUgaXMgZWFzaWx5IGF2YWlsYWJsZSBieSBleGFtaW5pbmcgdGhlIHBhY2sgZW50cnkgaGVhZGVyKS4gIEl0IGlzCisgKiBhbHNvIHJhdGhlciBleHBlbnNpdmUgdG8gZmluZCB0aGUgc2hhMSBmb3IgYW4gb2JqZWN0IGdpdmVuIGl0cyBvZmZzZXQuCisgKgorICogV2UgYnVpbGQgYSBoYXNodGFibGUgb2YgZXhpc3RpbmcgcGFja3MgKHBhY2tfcmV2aW5kZXgpLCBhbmQga2VlcCByZXZlcnNlCisgKiBpbmRleCBoZXJlIC0tIHBhY2sgaW5kZXggZmlsZSBpcyBzb3J0ZWQgYnkgb2JqZWN0IG5hbWUgbWFwcGluZyB0byBvZmZzZXQ7CisgKiB0aGlzIHBhY2tfcmV2aW5kZXhbXS5yZXZpbmRleCBhcnJheSBpcyBhIGxpc3Qgb2Ygb2Zmc2V0L2luZGV4X25yIHBhaXJzCisgKiBvcmRlcmVkIGJ5IG9mZnNldCwgc28gaWYgeW91IGtub3cgdGhlIG9mZnNldCBvZiBhbiBvYmplY3QsIG5leHQgb2Zmc2V0CisgKiBpcyB3aGVyZSBpdHMgcGFja2VkIHJlcHJlc2VudGF0aW9uIGVuZHMgYW5kIHRoZSBpbmRleF9uciBjYW4gYmUgdXNlZCB0bworICogZ2V0IHRoZSBvYmplY3Qgc2hhMSBmcm9tIHRoZSBtYWluIGluZGV4LgorICovCisKK3N0cnVjdCBwYWNrX3JldmluZGV4IHsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmluZGV4OworfTsKKworc3RhdGljIHN0cnVjdCBwYWNrX3JldmluZGV4ICpwYWNrX3JldmluZGV4Oworc3RhdGljIGludCBwYWNrX3JldmluZGV4X2hhc2hzejsKKworc3RhdGljIGludCBwYWNrX3JldmluZGV4X2l4KHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCXVuc2lnbmVkIGxvbmcgdWkgPSAodW5zaWduZWQgbG9uZylwOworCWludCBpOworCisJdWkgPSB1aSBeICh1aSA+PiAxNik7IC8qIGRlZmVhdCBzdHJ1Y3R1cmUgYWxpZ25tZW50ICovCisJaSA9IChpbnQpKHVpICUgcGFja19yZXZpbmRleF9oYXNoc3opOworCXdoaWxlIChwYWNrX3JldmluZGV4W2ldLnApIHsKKwkJaWYgKHBhY2tfcmV2aW5kZXhbaV0ucCA9PSBwKQorCQkJcmV0dXJuIGk7CisJCWlmICgrK2kgPT0gcGFja19yZXZpbmRleF9oYXNoc3opCisJCQlpID0gMDsKKwl9CisJcmV0dXJuIC0xIC0gaTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9wYWNrX3JldmluZGV4KHZvaWQpCit7CisJaW50IG51bTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCWZvciAobnVtID0gMCwgcCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KQorCQludW0rKzsKKwlpZiAoIW51bSkKKwkJcmV0dXJuOworCXBhY2tfcmV2aW5kZXhfaGFzaHN6ID0gbnVtICogMTE7CisJcGFja19yZXZpbmRleCA9IHhjYWxsb2Moc2l6ZW9mKCpwYWNrX3JldmluZGV4KSwgcGFja19yZXZpbmRleF9oYXNoc3opOworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCW51bSA9IHBhY2tfcmV2aW5kZXhfaXgocCk7CisJCW51bSA9IC0gMSAtIG51bTsKKwkJcGFja19yZXZpbmRleFtudW1dLnAgPSBwOworCX0KKwkvKiByZXZpbmRleCBlbGVtZW50cyBhcmUgbGF6aWx5IGluaXRpYWxpemVkICovCit9CisKK3N0YXRpYyBpbnQgY21wX29mZnNldChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IHJldmluZGV4X2VudHJ5ICphID0gYV87CisJY29uc3Qgc3RydWN0IHJldmluZGV4X2VudHJ5ICpiID0gYl87CisJcmV0dXJuIChhLT5vZmZzZXQgPCBiLT5vZmZzZXQpID8gLTEgOiAoYS0+b2Zmc2V0ID4gYi0+b2Zmc2V0KSA/IDEgOiAwOworfQorCisvKgorICogT3JkZXJlZCBsaXN0IG9mIG9mZnNldHMgb2Ygb2JqZWN0cyBpbiB0aGUgcGFjay4KKyAqLworc3RhdGljIHZvaWQgY3JlYXRlX3BhY2tfcmV2aW5kZXgoc3RydWN0IHBhY2tfcmV2aW5kZXggKnJpeCkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IHJpeC0+cDsKKwlpbnQgbnVtX2VudCA9IHAtPm51bV9vYmplY3RzOworCWludCBpOworCWNvbnN0IGNoYXIgKmluZGV4ID0gcC0+aW5kZXhfZGF0YTsKKworCXJpeC0+cmV2aW5kZXggPSB4bWFsbG9jKHNpemVvZigqcml4LT5yZXZpbmRleCkgKiAobnVtX2VudCArIDEpKTsKKwlpbmRleCArPSA0ICogMjU2OworCisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCWNvbnN0IHVpbnQzMl90ICpvZmZfMzIgPQorCQkJKHVpbnQzMl90ICopKGluZGV4ICsgOCArIHAtPm51bV9vYmplY3RzICogKDIwICsgNCkpOworCQljb25zdCB1aW50MzJfdCAqb2ZmXzY0ID0gb2ZmXzMyICsgcC0+bnVtX29iamVjdHM7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fZW50OyBpKyspIHsKKwkJCXVpbnQzMl90IG9mZiA9IG50b2hsKCpvZmZfMzIrKyk7CisJCQlpZiAoIShvZmYgJiAweDgwMDAwMDAwKSkgeworCQkJCXJpeC0+cmV2aW5kZXhbaV0ub2Zmc2V0ID0gb2ZmOworCQkJfSBlbHNlIHsKKwkJCQlyaXgtPnJldmluZGV4W2ldLm9mZnNldCA9CisJCQkJCSgodWludDY0X3QpbnRvaGwoKm9mZl82NCsrKSkgPDwgMzI7CisJCQkJcml4LT5yZXZpbmRleFtpXS5vZmZzZXQgfD0KKwkJCQkJbnRvaGwoKm9mZl82NCsrKTsKKwkJCX0KKwkJCXJpeC0+cmV2aW5kZXhbaV0ubnIgPSBpOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9lbnQ7IGkrKykgeworCQkJdWludDMyX3QgaGwgPSAqKCh1aW50MzJfdCAqKShpbmRleCArIDI0ICogaSkpOworCQkJcml4LT5yZXZpbmRleFtpXS5vZmZzZXQgPSBudG9obChobCk7CisJCQlyaXgtPnJldmluZGV4W2ldLm5yID0gaTsKKwkJfQorCX0KKworCS8qIFRoaXMga25vd3MgdGhlIHBhY2sgZm9ybWF0IC0tIHRoZSAyMC1ieXRlIHRyYWlsZXIKKwkgKiBmb2xsb3dzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBsYXN0IG9iamVjdCBkYXRhLgorCSAqLworCXJpeC0+cmV2aW5kZXhbbnVtX2VudF0ub2Zmc2V0ID0gcC0+cGFja19zaXplIC0gMjA7CisJcml4LT5yZXZpbmRleFtudW1fZW50XS5uciA9IC0xOworCXFzb3J0KHJpeC0+cmV2aW5kZXgsIG51bV9lbnQsIHNpemVvZigqcml4LT5yZXZpbmRleCksIGNtcF9vZmZzZXQpOworfQorCitzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmZpbmRfcGFja19yZXZpbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3Qgb2ZzKQoreworCWludCBudW07CisJaW50IGxvLCBoaTsKKwlzdHJ1Y3QgcGFja19yZXZpbmRleCAqcml4OworCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aW5kZXg7CisKKwlpZiAoIXBhY2tfcmV2aW5kZXhfaGFzaHN6KQorCQlpbml0X3BhY2tfcmV2aW5kZXgoKTsKKwludW0gPSBwYWNrX3JldmluZGV4X2l4KHApOworCWlmIChudW0gPCAwKQorCQlkaWUoImludGVybmFsIGVycm9yOiBwYWNrIHJldmluZGV4IGZ1YmFyIik7CisKKwlyaXggPSAmcGFja19yZXZpbmRleFtudW1dOworCWlmICghcml4LT5yZXZpbmRleCkKKwkJY3JlYXRlX3BhY2tfcmV2aW5kZXgocml4KTsKKwlyZXZpbmRleCA9IHJpeC0+cmV2aW5kZXg7CisKKwlsbyA9IDA7CisJaGkgPSBwLT5udW1fb2JqZWN0cyArIDE7CisJZG8geworCQlpbnQgbWkgPSAobG8gKyBoaSkgLyAyOworCQlpZiAocmV2aW5kZXhbbWldLm9mZnNldCA9PSBvZnMpIHsKKwkJCXJldHVybiByZXZpbmRleCArIG1pOworCQl9IGVsc2UgaWYgKG9mcyA8IHJldmluZGV4W21pXS5vZmZzZXQpCisJCQloaSA9IG1pOworCQllbHNlCisJCQlsbyA9IG1pICsgMTsKKwl9IHdoaWxlIChsbyA8IGhpKTsKKwllcnJvcigiYmFkIG9mZnNldCBmb3IgcmV2aW5kZXgiKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBkaXNjYXJkX3JldmluZGV4KHZvaWQpCit7CisJaWYgKHBhY2tfcmV2aW5kZXhfaGFzaHN6KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgcGFja19yZXZpbmRleF9oYXNoc3o7IGkrKykKKwkJCWZyZWUocGFja19yZXZpbmRleFtpXS5yZXZpbmRleCk7CisJCWZyZWUocGFja19yZXZpbmRleCk7CisJCXBhY2tfcmV2aW5kZXhfaGFzaHN6ID0gMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9wYWNrLXJldmluZGV4LmggYi9wYWNrLXJldmluZGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1MDI3YQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2stcmV2aW5kZXguaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIFBBQ0tfUkVWSU5ERVhfSAorI2RlZmluZSBQQUNLX1JFVklOREVYX0gKKworc3RydWN0IHJldmluZGV4X2VudHJ5IHsKKwlvZmZfdCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IG5yOworfTsKKworc3RydWN0IHJldmluZGV4X2VudHJ5ICpmaW5kX3BhY2tfcmV2aW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IG9mcyk7Cit2b2lkIGRpc2NhcmRfcmV2aW5kZXgodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFjay13cml0ZS5jIGIvcGFjay13cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOWU2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrLXdyaXRlLmMKQEAgLTAsMCArMSwzNzUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKwordm9pZCByZXNldF9wYWNrX2lkeF9vcHRpb24oc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqb3B0cykKK3sKKwltZW1zZXQob3B0cywgMCwgc2l6ZW9mKCpvcHRzKSk7CisJb3B0cy0+dmVyc2lvbiA9IDI7CisJb3B0cy0+b2ZmMzJfbGltaXQgPSAweDdmZmZmZmZmOworfQorCitzdGF0aWMgaW50IHNoYTFfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICphID0gKihzdHJ1Y3QgcGFja19pZHhfZW50cnkgKiopX2E7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICpiID0gKihzdHJ1Y3QgcGFja19pZHhfZW50cnkgKiopX2I7CisJcmV0dXJuIGhhc2hjbXAoYS0+c2hhMSwgYi0+c2hhMSk7Cit9CisKK3N0YXRpYyBpbnQgY21wX3VpbnQzMihjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJdWludDMyX3QgYSA9ICooKHVpbnQzMl90ICopYV8pOworCXVpbnQzMl90IGIgPSAqKCh1aW50MzJfdCAqKWJfKTsKKworCXJldHVybiAoYSA8IGIpID8gLTEgOiAoYSAhPSBiKTsKK30KKworc3RhdGljIGludCBuZWVkX2xhcmdlX29mZnNldChvZmZfdCBvZmZzZXQsIGNvbnN0IHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKm9wdHMpCit7CisJdWludDMyX3Qgb2ZzdmFsOworCisJaWYgKChvZmZzZXQgPj4gMzEpIHx8IChvcHRzLT5vZmYzMl9saW1pdCA8IG9mZnNldCkpCisJCXJldHVybiAxOworCWlmICghb3B0cy0+YW5vbWFseV9ucikKKwkJcmV0dXJuIDA7CisJb2ZzdmFsID0gb2Zmc2V0OworCXJldHVybiAhIWJzZWFyY2goJm9mc3ZhbCwgb3B0cy0+YW5vbWFseSwgb3B0cy0+YW5vbWFseV9uciwKKwkJCSBzaXplb2Yob2ZzdmFsKSwgY21wX3VpbnQzMik7Cit9CisKKy8qCisgKiBPbiBlbnRyeSAqc2hhMSBjb250YWlucyB0aGUgcGFjayBjb250ZW50IFNIQTEgaGFzaCwgb24gZXhpdCBpdCBpcworICogdGhlIFNIQTEgaGFzaCBvZiBzb3J0ZWQgb2JqZWN0IG5hbWVzLiBUaGUgb2JqZWN0cyBhcnJheSBwYXNzZWQgaW4KKyAqIHdpbGwgYmUgc29ydGVkIGJ5IFNIQTEgb24gZXhpdC4KKyAqLworY29uc3QgY2hhciAqd3JpdGVfaWR4X2ZpbGUoY29uc3QgY2hhciAqaW5kZXhfbmFtZSwgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqb2JqZWN0cywKKwkJCSAgIGludCBucl9vYmplY3RzLCBjb25zdCBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpvcHRzLAorCQkJICAgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgc2hhMWZpbGUgKmY7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqc29ydGVkX2J5X3NoYSwgKipsaXN0LCAqKmxhc3Q7CisJb2ZmX3QgbGFzdF9vYmpfb2Zmc2V0ID0gMDsKKwl1aW50MzJfdCBhcnJheVsyNTZdOworCWludCBpLCBmZDsKKwlnaXRfU0hBX0NUWCBjdHg7CisJdWludDMyX3QgaW5kZXhfdmVyc2lvbjsKKworCWlmIChucl9vYmplY3RzKSB7CisJCXNvcnRlZF9ieV9zaGEgPSBvYmplY3RzOworCQlsaXN0ID0gc29ydGVkX2J5X3NoYTsKKwkJbGFzdCA9IHNvcnRlZF9ieV9zaGEgKyBucl9vYmplY3RzOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgKytpKSB7CisJCQlpZiAob2JqZWN0c1tpXS0+b2Zmc2V0ID4gbGFzdF9vYmpfb2Zmc2V0KQorCQkJCWxhc3Rfb2JqX29mZnNldCA9IG9iamVjdHNbaV0tPm9mZnNldDsKKwkJfQorCQlxc29ydChzb3J0ZWRfYnlfc2hhLCBucl9vYmplY3RzLCBzaXplb2Yoc29ydGVkX2J5X3NoYVswXSksCisJCSAgICAgIHNoYTFfY29tcGFyZSk7CisJfQorCWVsc2UKKwkJc29ydGVkX2J5X3NoYSA9IGxpc3QgPSBsYXN0ID0gTlVMTDsKKworCWlmIChvcHRzLT5mbGFncyAmIFdSSVRFX0lEWF9WRVJJRlkpIHsKKwkJYXNzZXJ0KGluZGV4X25hbWUpOworCQlmID0gc2hhMWZkX2NoZWNrKGluZGV4X25hbWUpOworCX0gZWxzZSB7CisJCWlmICghaW5kZXhfbmFtZSkgeworCQkJc3RhdGljIGNoYXIgdG1wX2ZpbGVbUEFUSF9NQVhdOworCQkJZmQgPSBvZGJfbWtzdGVtcCh0bXBfZmlsZSwgc2l6ZW9mKHRtcF9maWxlKSwgInBhY2svdG1wX2lkeF9YWFhYWFgiKTsKKwkJCWluZGV4X25hbWUgPSB4c3RyZHVwKHRtcF9maWxlKTsKKwkJfSBlbHNlIHsKKwkJCXVubGluayhpbmRleF9uYW1lKTsKKwkJCWZkID0gb3BlbihpbmRleF9uYW1lLCBPX0NSRUFUfE9fRVhDTHxPX1dST05MWSwgMDYwMCk7CisJCX0KKwkJaWYgKGZkIDwgMCkKKwkJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIiwgaW5kZXhfbmFtZSk7CisJCWYgPSBzaGExZmQoZmQsIGluZGV4X25hbWUpOworCX0KKworCS8qIGlmIGxhc3Qgb2JqZWN0J3Mgb2Zmc2V0IGlzID49IDJeMzEgd2Ugc2hvdWxkIHVzZSBpbmRleCBWMiAqLworCWluZGV4X3ZlcnNpb24gPSBuZWVkX2xhcmdlX29mZnNldChsYXN0X29ial9vZmZzZXQsIG9wdHMpID8gMiA6IG9wdHMtPnZlcnNpb247CisKKwkvKiBpbmRleCB2ZXJzaW9ucyAyIGFuZCBhYm92ZSBuZWVkIGEgaGVhZGVyICovCisJaWYgKGluZGV4X3ZlcnNpb24gPj0gMikgeworCQlzdHJ1Y3QgcGFja19pZHhfaGVhZGVyIGhkcjsKKwkJaGRyLmlkeF9zaWduYXR1cmUgPSBodG9ubChQQUNLX0lEWF9TSUdOQVRVUkUpOworCQloZHIuaWR4X3ZlcnNpb24gPSBodG9ubChpbmRleF92ZXJzaW9uKTsKKwkJc2hhMXdyaXRlKGYsICZoZHIsIHNpemVvZihoZHIpKTsKKwl9CisKKwkvKgorCSAqIFdyaXRlIHRoZSBmaXJzdC1sZXZlbCB0YWJsZSAodGhlIGxpc3QgaXMgc29ydGVkLAorCSAqIGJ1dCB3ZSB1c2UgYSAyNTYtZW50cnkgbG9va3VwIHRvIGJlIGFibGUgdG8gYXZvaWQKKwkgKiBoYXZpbmcgdG8gZG8gZWlnaHQgZXh0cmEgYmluYXJ5IHNlYXJjaCBpdGVyYXRpb25zKS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqbmV4dCA9IGxpc3Q7CisJCXdoaWxlIChuZXh0IDwgbGFzdCkgeworCQkJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICpvYmogPSAqbmV4dDsKKwkJCWlmIChvYmotPnNoYTFbMF0gIT0gaSkKKwkJCQlicmVhazsKKwkJCW5leHQrKzsKKwkJfQorCQlhcnJheVtpXSA9IGh0b25sKG5leHQgLSBzb3J0ZWRfYnlfc2hhKTsKKwkJbGlzdCA9IG5leHQ7CisJfQorCXNoYTF3cml0ZShmLCBhcnJheSwgMjU2ICogNCk7CisKKwkvKiBjb21wdXRlIHRoZSBTSEExIGhhc2ggb2Ygc29ydGVkIG9iamVjdCBuYW1lcy4gKi8KKwlnaXRfU0hBMV9Jbml0KCZjdHgpOworCisJLyoKKwkgKiBXcml0ZSB0aGUgYWN0dWFsIFNIQTEgZW50cmllcy4uCisJICovCisJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKm9iaiA9ICpsaXN0Kys7CisJCWlmIChpbmRleF92ZXJzaW9uIDwgMikgeworCQkJdWludDMyX3Qgb2Zmc2V0ID0gaHRvbmwob2JqLT5vZmZzZXQpOworCQkJc2hhMXdyaXRlKGYsICZvZmZzZXQsIDQpOworCQl9CisJCXNoYTF3cml0ZShmLCBvYmotPnNoYTEsIDIwKTsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIG9iai0+c2hhMSwgMjApOworCQlpZiAoKG9wdHMtPmZsYWdzICYgV1JJVEVfSURYX1NUUklDVCkgJiYKKwkJICAgIChpICYmICFoYXNoY21wKGxpc3RbLTJdLT5zaGExLCBvYmotPnNoYTEpKSkKKwkJCWRpZSgiVGhlIHNhbWUgb2JqZWN0ICVzIGFwcGVhcnMgdHdpY2UgaW4gdGhlIHBhY2siLAorCQkJICAgIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCX0KKworCWlmIChpbmRleF92ZXJzaW9uID49IDIpIHsKKwkJdW5zaWduZWQgaW50IG5yX2xhcmdlX29mZnNldCA9IDA7CisKKwkJLyogd3JpdGUgdGhlIGNyYzMyIHRhYmxlICovCisJCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKm9iaiA9ICpsaXN0Kys7CisJCQl1aW50MzJfdCBjcmMzMl92YWwgPSBodG9ubChvYmotPmNyYzMyKTsKKwkJCXNoYTF3cml0ZShmLCAmY3JjMzJfdmFsLCA0KTsKKwkJfQorCisJCS8qIHdyaXRlIHRoZSAzMi1iaXQgb2Zmc2V0IHRhYmxlICovCisJCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKm9iaiA9ICpsaXN0Kys7CisJCQl1aW50MzJfdCBvZmZzZXQ7CisKKwkJCW9mZnNldCA9IChuZWVkX2xhcmdlX29mZnNldChvYmotPm9mZnNldCwgb3B0cykKKwkJCQkgID8gKDB4ODAwMDAwMDAgfCBucl9sYXJnZV9vZmZzZXQrKykKKwkJCQkgIDogb2JqLT5vZmZzZXQpOworCQkJb2Zmc2V0ID0gaHRvbmwob2Zmc2V0KTsKKwkJCXNoYTF3cml0ZShmLCAmb2Zmc2V0LCA0KTsKKwkJfQorCisJCS8qIHdyaXRlIHRoZSBsYXJnZSBvZmZzZXQgdGFibGUgKi8KKwkJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CisJCXdoaWxlIChucl9sYXJnZV9vZmZzZXQpIHsKKwkJCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqb2JqID0gKmxpc3QrKzsKKwkJCXVpbnQ2NF90IG9mZnNldCA9IG9iai0+b2Zmc2V0OworCQkJdWludDMyX3Qgc3BsaXRbMl07CisKKwkJCWlmICghbmVlZF9sYXJnZV9vZmZzZXQob2Zmc2V0LCBvcHRzKSkKKwkJCQljb250aW51ZTsKKwkJCXNwbGl0WzBdID0gaHRvbmwob2Zmc2V0ID4+IDMyKTsKKwkJCXNwbGl0WzFdID0gaHRvbmwob2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCQlzaGExd3JpdGUoZiwgc3BsaXQsIDgpOworCQkJbnJfbGFyZ2Vfb2Zmc2V0LS07CisJCX0KKwl9CisKKwlzaGExd3JpdGUoZiwgc2hhMSwgMjApOworCXNoYTFjbG9zZShmLCBOVUxMLCAoKG9wdHMtPmZsYWdzICYgV1JJVEVfSURYX1ZFUklGWSkKKwkJCSAgICA/IENTVU1fQ0xPU0UgOiBDU1VNX0ZTWU5DKSk7CisJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmN0eCk7CisJcmV0dXJuIGluZGV4X25hbWU7Cit9CisKK29mZl90IHdyaXRlX3BhY2tfaGVhZGVyKHN0cnVjdCBzaGExZmlsZSAqZiwgdWludDMyX3QgbnJfZW50cmllcykKK3sKKwlzdHJ1Y3QgcGFja19oZWFkZXIgaGRyOworCisJaGRyLmhkcl9zaWduYXR1cmUgPSBodG9ubChQQUNLX1NJR05BVFVSRSk7CisJaGRyLmhkcl92ZXJzaW9uID0gaHRvbmwoUEFDS19WRVJTSU9OKTsKKwloZHIuaGRyX2VudHJpZXMgPSBodG9ubChucl9lbnRyaWVzKTsKKwlpZiAoc2hhMXdyaXRlKGYsICZoZHIsIHNpemVvZihoZHIpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNpemVvZihoZHIpOworfQorCisvKgorICogVXBkYXRlIHBhY2sgaGVhZGVyIHdpdGggb2JqZWN0X2NvdW50IGFuZCBjb21wdXRlIG5ldyBTSEExIGZvciBwYWNrIGRhdGEKKyAqIGFzc29jaWF0ZWQgdG8gcGFja19mZCwgYW5kIHdyaXRlIHRoYXQgU0hBMSBhdCB0aGUgZW5kLiAgVGhhdCBuZXcgU0hBMQorICogaXMgYWxzbyByZXR1cm5lZCBpbiBuZXdfcGFja19zaGExLgorICoKKyAqIElmIHBhcnRpYWxfcGFja19zaGExIGlzIG5vbiBudWxsLCB0aGVuIHRoZSBTSEExIG9mIHRoZSBleGlzdGluZyBwYWNrCisgKiAod2l0aG91dCB0aGUgaGVhZGVyIHVwZGF0ZSkgaXMgY29tcHV0ZWQgYW5kIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZQorICogb25lIHByb3ZpZGVkIGluIHBhcnRpYWxfcGFja19zaGExLiAgVGhlIHZhbGlkYXRpb24gaXMgcGVyZm9ybWVkIGF0CisgKiBwYXJ0aWFsX3BhY2tfb2Zmc2V0IGJ5dGVzIGluIHRoZSBwYWNrIGZpbGUuICBUaGUgU0hBMSBvZiB0aGUgcmVtYWluaW5nCisgKiBkYXRhIChpLmUuIGZyb20gcGFydGlhbF9wYWNrX29mZnNldCB0byB0aGUgZW5kKSBpcyB0aGVuIGNvbXB1dGVkIGFuZAorICogcmV0dXJuZWQgaW4gcGFydGlhbF9wYWNrX3NoYTEuCisgKgorICogTm90ZSB0aGF0IG5ld19wYWNrX3NoYTEgaXMgdXBkYXRlZCBsYXN0LCBzbyBib3RoIG5ld19wYWNrX3NoYTEgYW5kCisgKiBwYXJ0aWFsX3BhY2tfc2hhMSBjYW4gcmVmZXIgdG8gdGhlIHNhbWUgYnVmZmVyIGlmIHRoZSBjYWxsZXIgaXMgbm90CisgKiBpbnRlcmVzdGVkIGluIHRoZSByZXN1bHRpbmcgU0hBMSBvZiBwYWNrIGRhdGEgYWJvdmUgcGFydGlhbF9wYWNrX29mZnNldC4KKyAqLwordm9pZCBmaXh1cF9wYWNrX2hlYWRlcl9mb290ZXIoaW50IHBhY2tfZmQsCisJCQkgdW5zaWduZWQgY2hhciAqbmV3X3BhY2tfc2hhMSwKKwkJCSBjb25zdCBjaGFyICpwYWNrX25hbWUsCisJCQkgdWludDMyX3Qgb2JqZWN0X2NvdW50LAorCQkJIHVuc2lnbmVkIGNoYXIgKnBhcnRpYWxfcGFja19zaGExLAorCQkJIG9mZl90IHBhcnRpYWxfcGFja19vZmZzZXQpCit7CisJaW50IGFsaWduZWRfc3osIGJ1Zl9zeiA9IDggKiAxMDI0OworCWdpdF9TSEFfQ1RYIG9sZF9zaGExX2N0eCwgbmV3X3NoYTFfY3R4OworCXN0cnVjdCBwYWNrX2hlYWRlciBoZHI7CisJY2hhciAqYnVmOworCisJZ2l0X1NIQTFfSW5pdCgmb2xkX3NoYTFfY3R4KTsKKwlnaXRfU0hBMV9Jbml0KCZuZXdfc2hhMV9jdHgpOworCisJaWYgKGxzZWVrKHBhY2tfZmQsIDAsIFNFRUtfU0VUKSAhPSAwKQorCQlkaWVfZXJybm8oIkZhaWxlZCBzZWVraW5nIHRvIHN0YXJ0IG9mICclcyciLCBwYWNrX25hbWUpOworCWlmIChyZWFkX2luX2Z1bGwocGFja19mZCwgJmhkciwgc2l6ZW9mKGhkcikpICE9IHNpemVvZihoZHIpKQorCQlkaWVfZXJybm8oIlVuYWJsZSB0byByZXJlYWQgaGVhZGVyIG9mICclcyciLCBwYWNrX25hbWUpOworCWlmIChsc2VlayhwYWNrX2ZkLCAwLCBTRUVLX1NFVCkgIT0gMCkKKwkJZGllX2Vycm5vKCJGYWlsZWQgc2Vla2luZyB0byBzdGFydCBvZiAnJXMnIiwgcGFja19uYW1lKTsKKwlnaXRfU0hBMV9VcGRhdGUoJm9sZF9zaGExX2N0eCwgJmhkciwgc2l6ZW9mKGhkcikpOworCWhkci5oZHJfZW50cmllcyA9IGh0b25sKG9iamVjdF9jb3VudCk7CisJZ2l0X1NIQTFfVXBkYXRlKCZuZXdfc2hhMV9jdHgsICZoZHIsIHNpemVvZihoZHIpKTsKKwl3cml0ZV9vcl9kaWUocGFja19mZCwgJmhkciwgc2l6ZW9mKGhkcikpOworCXBhcnRpYWxfcGFja19vZmZzZXQgLT0gc2l6ZW9mKGhkcik7CisKKwlidWYgPSB4bWFsbG9jKGJ1Zl9zeik7CisJYWxpZ25lZF9zeiA9IGJ1Zl9zeiAtIHNpemVvZihoZHIpOworCWZvciAoOzspIHsKKwkJc3NpemVfdCBtLCBuOworCQltID0gKHBhcnRpYWxfcGFja19zaGExICYmIHBhcnRpYWxfcGFja19vZmZzZXQgPCBhbGlnbmVkX3N6KSA/CisJCQlwYXJ0aWFsX3BhY2tfb2Zmc2V0IDogYWxpZ25lZF9zejsKKwkJbiA9IHhyZWFkKHBhY2tfZmQsIGJ1ZiwgbSk7CisJCWlmICghbikKKwkJCWJyZWFrOworCQlpZiAobiA8IDApCisJCQlkaWVfZXJybm8oIkZhaWxlZCB0byBjaGVja3N1bSAnJXMnIiwgcGFja19uYW1lKTsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZuZXdfc2hhMV9jdHgsIGJ1Ziwgbik7CisKKwkJYWxpZ25lZF9zeiAtPSBuOworCQlpZiAoIWFsaWduZWRfc3opCisJCQlhbGlnbmVkX3N6ID0gYnVmX3N6OworCisJCWlmICghcGFydGlhbF9wYWNrX3NoYTEpCisJCQljb250aW51ZTsKKworCQlnaXRfU0hBMV9VcGRhdGUoJm9sZF9zaGExX2N0eCwgYnVmLCBuKTsKKwkJcGFydGlhbF9wYWNrX29mZnNldCAtPSBuOworCQlpZiAocGFydGlhbF9wYWNrX29mZnNldCA9PSAwKSB7CisJCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQkJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJm9sZF9zaGExX2N0eCk7CisJCQlpZiAoaGFzaGNtcChzaGExLCBwYXJ0aWFsX3BhY2tfc2hhMSkgIT0gMCkKKwkJCQlkaWUoIlVuZXhwZWN0ZWQgY2hlY2tzdW0gZm9yICVzICIKKwkJCQkgICAgIihkaXNrIGNvcnJ1cHRpb24/KSIsIHBhY2tfbmFtZSk7CisJCQkvKgorCQkJICogTm93IGxldCdzIGNvbXB1dGUgdGhlIFNIQTEgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUKKwkJCSAqIHBhY2ssIHdoaWNoIGFsc28gbWVhbnMgbWFraW5nIHBhcnRpYWxfcGFja19vZmZzZXQKKwkJCSAqIGJpZyBlbm91Z2ggbm90IHRvIG1hdHRlciBhbnltb3JlLgorCQkJICovCisJCQlnaXRfU0hBMV9Jbml0KCZvbGRfc2hhMV9jdHgpOworCQkJcGFydGlhbF9wYWNrX29mZnNldCA9IH5wYXJ0aWFsX3BhY2tfb2Zmc2V0OworCQkJcGFydGlhbF9wYWNrX29mZnNldCAtPSBNU0IocGFydGlhbF9wYWNrX29mZnNldCwgMSk7CisJCX0KKwl9CisJZnJlZShidWYpOworCisJaWYgKHBhcnRpYWxfcGFja19zaGExKQorCQlnaXRfU0hBMV9GaW5hbChwYXJ0aWFsX3BhY2tfc2hhMSwgJm9sZF9zaGExX2N0eCk7CisJZ2l0X1NIQTFfRmluYWwobmV3X3BhY2tfc2hhMSwgJm5ld19zaGExX2N0eCk7CisJd3JpdGVfb3JfZGllKHBhY2tfZmQsIG5ld19wYWNrX3NoYTEsIDIwKTsKKwlmc3luY19vcl9kaWUocGFja19mZCwgcGFja19uYW1lKTsKK30KKworY2hhciAqaW5kZXhfcGFja19sb2NrZmlsZShpbnQgaXBfb3V0KQoreworCWNoYXIgcGFja25hbWVbNDZdOworCisJLyoKKwkgKiBUaGUgZmlyc3QgdGhpbmcgd2UgZXhwZWN0IGZyb20gaW5kZXgtcGFjaydzIG91dHB1dAorCSAqIGlzICJwYWNrXHQlNDBzXG4iIG9yICJrZWVwXHQlNDBzXG4iICg0NiBieXRlcykgd2hlcmUKKwkgKiAlNDBzIGlzIHRoZSBuZXdseSBjcmVhdGVkIHBhY2sgU0hBMSBuYW1lLiAgSW4gdGhlICJrZWVwIgorCSAqIGNhc2UsIHdlIG5lZWQgaXQgdG8gcmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIC5rZWVwIGZpbGUKKwkgKiBsYXRlciBvbi4gIElmIHdlIGRvbid0IGdldCB0aGF0IHRoZW4gdG91Z2ggbHVjayB3aXRoIGl0LgorCSAqLworCWlmIChyZWFkX2luX2Z1bGwoaXBfb3V0LCBwYWNrbmFtZSwgNDYpID09IDQ2ICYmIHBhY2tuYW1lWzQ1XSA9PSAnXG4nICYmCisJICAgIG1lbWNtcChwYWNrbmFtZSwgImtlZXBcdCIsIDUpID09IDApIHsKKwkJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwkJcGFja25hbWVbNDVdID0gMDsKKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvcGFjay9wYWNrLSVzLmtlZXAiLAorCQkJIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIHBhY2tuYW1lICsgNSk7CisJCXJldHVybiB4c3RyZHVwKHBhdGgpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoZSBwZXItb2JqZWN0IGhlYWRlciBpcyBhIHByZXR0eSBkZW5zZSB0aGluZywgd2hpY2ggaXMKKyAqICAtIGZpcnN0IGJ5dGU6IGxvdyBmb3VyIGJpdHMgYXJlICJzaXplIiwgdGhlbiB0aHJlZSBiaXRzIG9mICJ0eXBlIiwKKyAqICAgIGFuZCB0aGUgaGlnaCBiaXQgaXMgInNpemUgY29udGludWVzIi4KKyAqICAtIGVhY2ggYnl0ZSBhZnRlcndhcmRzOiBsb3cgc2V2ZW4gYml0cyBhcmUgc2l6ZSBjb250aW51YXRpb24sCisgKiAgICB3aXRoIHRoZSBoaWdoIGJpdCBiZWluZyAic2l6ZSBjb250aW51ZXMiCisgKi8KK2ludCBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgdWludG1heF90IHNpemUsIHVuc2lnbmVkIGNoYXIgKmhkcikKK3sKKwlpbnQgbiA9IDE7CisJdW5zaWduZWQgY2hhciBjOworCisJaWYgKHR5cGUgPCBPQkpfQ09NTUlUIHx8IHR5cGUgPiBPQkpfUkVGX0RFTFRBKQorCQlkaWUoImJhZCB0eXBlICVkIiwgdHlwZSk7CisKKwljID0gKHR5cGUgPDwgNCkgfCAoc2l6ZSAmIDE1KTsKKwlzaXplID4+PSA0OworCXdoaWxlIChzaXplKSB7CisJCSpoZHIrKyA9IGMgfCAweDgwOworCQljID0gc2l6ZSAmIDB4N2Y7CisJCXNpemUgPj49IDc7CisJCW4rKzsKKwl9CisJKmhkciA9IGM7CisJcmV0dXJuIG47Cit9CisKK3N0cnVjdCBzaGExZmlsZSAqY3JlYXRlX3RtcF9wYWNrZmlsZShjaGFyICoqcGFja190bXBfbmFtZSkKK3sKKwljaGFyIHRtcG5hbWVbUEFUSF9NQVhdOworCWludCBmZDsKKworCWZkID0gb2RiX21rc3RlbXAodG1wbmFtZSwgc2l6ZW9mKHRtcG5hbWUpLCAicGFjay90bXBfcGFja19YWFhYWFgiKTsKKwkqcGFja190bXBfbmFtZSA9IHhzdHJkdXAodG1wbmFtZSk7CisJcmV0dXJuIHNoYTFmZChmZCwgKnBhY2tfdG1wX25hbWUpOworfQorCit2b2lkIGZpbmlzaF90bXBfcGFja2ZpbGUoY2hhciAqbmFtZV9idWZmZXIsCisJCQkgY29uc3QgY2hhciAqcGFja190bXBfbmFtZSwKKwkJCSBzdHJ1Y3QgcGFja19pZHhfZW50cnkgKip3cml0dGVuX2xpc3QsCisJCQkgdWludDMyX3QgbnJfd3JpdHRlbiwKKwkJCSBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpwYWNrX2lkeF9vcHRzLAorCQkJIHVuc2lnbmVkIGNoYXIgc2hhMVtdKQoreworCWNvbnN0IGNoYXIgKmlkeF90bXBfbmFtZTsKKwljaGFyICplbmRfb2ZfbmFtZV9wcmVmaXggPSBzdHJyY2hyKG5hbWVfYnVmZmVyLCAwKTsKKworCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0ocGFja190bXBfbmFtZSkpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIG1ha2UgdGVtcG9yYXJ5IHBhY2sgZmlsZSByZWFkYWJsZSIpOworCisJaWR4X3RtcF9uYW1lID0gd3JpdGVfaWR4X2ZpbGUoTlVMTCwgd3JpdHRlbl9saXN0LCBucl93cml0dGVuLAorCQkJCSAgICAgIHBhY2tfaWR4X29wdHMsIHNoYTEpOworCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0oaWR4X3RtcF9uYW1lKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWFrZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSByZWFkYWJsZSIpOworCisJc3ByaW50ZihlbmRfb2ZfbmFtZV9wcmVmaXgsICIlcy5wYWNrIiwgc2hhMV90b19oZXgoc2hhMSkpOworCWZyZWVfcGFja19ieV9uYW1lKG5hbWVfYnVmZmVyKTsKKworCWlmIChyZW5hbWUocGFja190bXBfbmFtZSwgbmFtZV9idWZmZXIpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IHBhY2sgZmlsZSIpOworCisJc3ByaW50ZihlbmRfb2ZfbmFtZV9wcmVmaXgsICIlcy5pZHgiLCBzaGExX3RvX2hleChzaGExKSk7CisJaWYgKHJlbmFtZShpZHhfdG1wX25hbWUsIG5hbWVfYnVmZmVyKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVuYW1lIHRlbXBvcmFyeSBpbmRleCBmaWxlIik7CisKKwlmcmVlKCh2b2lkICopaWR4X3RtcF9uYW1lKTsKK30KZGlmZiAtLWdpdCBhL3BhY2suaCBiL3BhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTZlZTdkCi0tLSAvZGV2L251bGwKKysrIGIvcGFjay5oCkBAIC0wLDAgKzEsOTYgQEAKKyNpZm5kZWYgUEFDS19ICisjZGVmaW5lIFBBQ0tfSAorCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiY3N1bS1maWxlLmgiCisKKy8qCisgKiBQYWNrZWQgb2JqZWN0IGhlYWRlcgorICovCisjZGVmaW5lIFBBQ0tfU0lHTkFUVVJFIDB4NTA0MTQzNGIJLyogIlBBQ0siICovCisjZGVmaW5lIFBBQ0tfVkVSU0lPTiAyCisjZGVmaW5lIHBhY2tfdmVyc2lvbl9vayh2KSAoKHYpID09IGh0b25sKDIpIHx8ICh2KSA9PSBodG9ubCgzKSkKK3N0cnVjdCBwYWNrX2hlYWRlciB7CisJdWludDMyX3QgaGRyX3NpZ25hdHVyZTsKKwl1aW50MzJfdCBoZHJfdmVyc2lvbjsKKwl1aW50MzJfdCBoZHJfZW50cmllczsKK307CisKKy8qCisgKiBUaGUgZmlyc3QgZm91ciBieXRlcyBvZiBpbmRleCBmb3JtYXRzIGxhdGVyIHRoYW4gdmVyc2lvbiAxIHNob3VsZAorICogc3RhcnQgd2l0aCB0aGlzIHNpZ25hdHVyZSwgYXMgYWxsIG9sZGVyIGdpdCBiaW5hcmllcyB3b3VsZCBmaW5kIHRoaXMKKyAqIHZhbHVlIGlsbGVnYWwgYW5kIGFib3J0IHJlYWRpbmcgdGhlIGZpbGUuCisgKgorICogVGhpcyBpcyB0aGUgY2FzZSBiZWNhdXNlIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiBhIHBhY2tmaWxlCisgKiBjYW5ub3QgZXhjZWVkIDEsNDMxLDY2MCwwMDAgYXMgZXZlcnkgb2JqZWN0IHdvdWxkIG5lZWQgYXQgbGVhc3QKKyAqIDMgYnl0ZXMgb2YgZGF0YSBhbmQgdGhlIG92ZXJhbGwgcGFja2ZpbGUgY2Fubm90IGV4Y2VlZCA0IEdpQiB3aXRoCisgKiB2ZXJzaW9uIDEgb2YgdGhlIGluZGV4IGZpbGUgZHVlIHRvIHRoZSBvZmZzZXRzIGxpbWl0ZWQgdG8gMzIgYml0cy4KKyAqIENsZWFybHkgdGhlIHNpZ25hdHVyZSBleGNlZWRzIHRoaXMgbWF4aW11bS4KKyAqCisgKiBWZXJ5IG9sZCBnaXQgYmluYXJpZXMgd2lsbCBhbHNvIGNvbXBhcmUgdGhlIGZpcnN0IDQgYnl0ZXMgdG8gdGhlCisgKiBuZXh0IDQgYnl0ZXMgaW4gdGhlIGluZGV4IGFuZCBhYm9ydCB3aXRoIGEgIm5vbi1tb25vdG9uaWMgaW5kZXgiCisgKiBlcnJvciBpZiB0aGUgc2Vjb25kIDQgYnl0ZSB3b3JkIGlzIHNtYWxsZXIgdGhhbiB0aGUgZmlyc3QgNAorICogYnl0ZSB3b3JkLiAgVGhpcyB3b3VsZCBiZSB0cnVlIGluIHRoZSBwcm9wb3NlZCBmdXR1cmUgaW5kZXgKKyAqIGZvcm1hdCBhcyBpZHhfc2lnbmF0dXJlIHdvdWxkIGJlIGdyZWF0ZXIgdGhhbiBpZHhfdmVyc2lvbi4KKyAqLworI2RlZmluZSBQQUNLX0lEWF9TSUdOQVRVUkUgMHhmZjc0NGY2MwkvKiAiXDM3N3RPYyIgKi8KKworc3RydWN0IHBhY2tfaWR4X29wdGlvbiB7CisJdW5zaWduZWQgZmxhZ3M7CisJLyogZmxhZyBiaXRzICovCisjZGVmaW5lIFdSSVRFX0lEWF9WRVJJRlkgMDEgLyogdmVyaWZ5IG9ubHksIGRvIG5vdCB3cml0ZSB0aGUgaWR4IGZpbGUgKi8KKyNkZWZpbmUgV1JJVEVfSURYX1NUUklDVCAwMgorCisJdWludDMyX3QgdmVyc2lvbjsKKwl1aW50MzJfdCBvZmYzMl9saW1pdDsKKworCS8qCisJICogTGlzdCBvZiBvZmZzZXRzIHRoYXQgd291bGQgZml0IHdpdGhpbiBvZmYzMl9saW1pdCBidXQKKwkgKiBuZWVkIHRvIGJlIHdyaXR0ZW4gb3V0IGFzIDY0LWJpdCBlbnRpdHkgZm9yIGJ5dGUtZm9yLWJ5dGUKKwkgKiB2ZXJpZmljYXRpb24uCisJICovCisJaW50IGFub21hbHlfYWxsb2MsIGFub21hbHlfbnI7CisJdWludDMyX3QgKmFub21hbHk7Cit9OworCitleHRlcm4gdm9pZCByZXNldF9wYWNrX2lkeF9vcHRpb24oc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqKTsKKworLyoKKyAqIFBhY2tlZCBvYmplY3QgaW5kZXggaGVhZGVyCisgKi8KK3N0cnVjdCBwYWNrX2lkeF9oZWFkZXIgeworCXVpbnQzMl90IGlkeF9zaWduYXR1cmU7CisJdWludDMyX3QgaWR4X3ZlcnNpb247Cit9OworCisvKgorICogQ29tbW9uIHBhcnQgb2Ygb2JqZWN0IHN0cnVjdHVyZSB1c2VkIGZvciB3cml0ZV9pZHhfZmlsZQorICovCitzdHJ1Y3QgcGFja19pZHhfZW50cnkgeworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdWludDMyX3QgY3JjMzI7CisJb2ZmX3Qgb2Zmc2V0OworfTsKKworCitzdHJ1Y3QgcHJvZ3Jlc3M7Cit0eXBlZGVmIGludCAoKnZlcmlmeV9mbikoY29uc3QgdW5zaWduZWQgY2hhciosIGVudW0gb2JqZWN0X3R5cGUsIHVuc2lnbmVkIGxvbmcsIHZvaWQqLCBpbnQqKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKndyaXRlX2lkeF9maWxlKGNvbnN0IGNoYXIgKmluZGV4X25hbWUsIHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKm9iamVjdHMsIGludCBucl9vYmplY3RzLCBjb25zdCBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICosIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBjaGVja19wYWNrX2NyYyhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLCBvZmZfdCBvZmZzZXQsIG9mZl90IGxlbiwgdW5zaWduZWQgaW50IG5yKTsKK2V4dGVybiBpbnQgdmVyaWZ5X3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKik7CitleHRlcm4gaW50IHZlcmlmeV9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICosIHZlcmlmeV9mbiBmbiwgc3RydWN0IHByb2dyZXNzICosIHVpbnQzMl90KTsKK2V4dGVybiBvZmZfdCB3cml0ZV9wYWNrX2hlYWRlcihzdHJ1Y3Qgc2hhMWZpbGUgKmYsIHVpbnQzMl90KTsKK2V4dGVybiB2b2lkIGZpeHVwX3BhY2tfaGVhZGVyX2Zvb3RlcihpbnQsIHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgY2hhciAqLCB1aW50MzJfdCwgdW5zaWduZWQgY2hhciAqLCBvZmZfdCk7CitleHRlcm4gY2hhciAqaW5kZXhfcGFja19sb2NrZmlsZShpbnQgZmQpOworZXh0ZXJuIGludCBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKGVudW0gb2JqZWN0X3R5cGUsIHVpbnRtYXhfdCwgdW5zaWduZWQgY2hhciAqKTsKKworI2RlZmluZSBQSF9FUlJPUl9FT0YJCSgtMSkKKyNkZWZpbmUgUEhfRVJST1JfUEFDS19TSUdOQVRVUkUJKC0yKQorI2RlZmluZSBQSF9FUlJPUl9QUk9UT0NPTAkoLTMpCitleHRlcm4gaW50IHJlYWRfcGFja19oZWFkZXIoaW50IGZkLCBzdHJ1Y3QgcGFja19oZWFkZXIgKik7CisKK2V4dGVybiBzdHJ1Y3Qgc2hhMWZpbGUgKmNyZWF0ZV90bXBfcGFja2ZpbGUoY2hhciAqKnBhY2tfdG1wX25hbWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX3RtcF9wYWNrZmlsZShjaGFyICpuYW1lX2J1ZmZlciwgY29uc3QgY2hhciAqcGFja190bXBfbmFtZSwgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqd3JpdHRlbl9saXN0LCB1aW50MzJfdCBucl93cml0dGVuLCBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpwYWNrX2lkeF9vcHRzLCB1bnNpZ25lZCBjaGFyIHNoYTFbXSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFnZXIuYyBiL3BhZ2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjYjA4ZAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VyLmMKQEAgLTAsMCArMSwxNjEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKworI2lmbmRlZiBERUZBVUxUX1BBR0VSCisjZGVmaW5lIERFRkFVTFRfUEFHRVIgImxlc3MiCisjZW5kaWYKKworLyoKKyAqIFRoaXMgaXMgc3BsaXQgdXAgZnJvbSB0aGUgcmVzdCBvZiBnaXQgc28gdGhhdCB3ZSBjYW4gZG8KKyAqIHNvbWV0aGluZyBkaWZmZXJlbnQgb24gV2luZG93cy4KKyAqLworCisjaWZuZGVmIFdJTjMyCitzdGF0aWMgdm9pZCBwYWdlcl9wcmVleGVjKHZvaWQpCit7CisJLyoKKwkgKiBXb3JrIGFyb3VuZCBidWcgaW4gImxlc3MiIGJ5IG5vdCBzdGFydGluZyBpdCB1bnRpbCB3ZQorCSAqIGhhdmUgcmVhbCBpbnB1dAorCSAqLworCWZkX3NldCBpbjsKKworCUZEX1pFUk8oJmluKTsKKwlGRF9TRVQoMCwgJmluKTsKKwlzZWxlY3QoMSwgJmluLCBOVUxMLCAmaW4sIE5VTEwpOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWdlcl9hcmd2W10gPSB7IE5VTEwsIE5VTEwgfTsKK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwYWdlcl9wcm9jZXNzOworCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYWdlcih2b2lkKQoreworCWZmbHVzaChzdGRvdXQpOworCWZmbHVzaChzdGRlcnIpOworCS8qIHNpZ25hbCBFT0YgdG8gcGFnZXIgKi8KKwljbG9zZSgxKTsKKwljbG9zZSgyKTsKKwlmaW5pc2hfY29tbWFuZCgmcGFnZXJfcHJvY2Vzcyk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3BhZ2VyX3NpZ25hbChpbnQgc2lnbm8pCit7CisJd2FpdF9mb3JfcGFnZXIoKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKworY29uc3QgY2hhciAqZ2l0X3BhZ2VyKGludCBzdGRvdXRfaXNfdHR5KQoreworCWNvbnN0IGNoYXIgKnBhZ2VyOworCisJaWYgKCFzdGRvdXRfaXNfdHR5KQorCQlyZXR1cm4gTlVMTDsKKworCXBhZ2VyID0gZ2V0ZW52KCJHSVRfUEFHRVIiKTsKKwlpZiAoIXBhZ2VyKSB7CisJCWlmICghcGFnZXJfcHJvZ3JhbSkKKwkJCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwkJcGFnZXIgPSBwYWdlcl9wcm9ncmFtOworCX0KKwlpZiAoIXBhZ2VyKQorCQlwYWdlciA9IGdldGVudigiUEFHRVIiKTsKKwlpZiAoIXBhZ2VyKQorCQlwYWdlciA9IERFRkFVTFRfUEFHRVI7CisJZWxzZSBpZiAoISpwYWdlciB8fCAhc3RyY21wKHBhZ2VyLCAiY2F0IikpCisJCXBhZ2VyID0gTlVMTDsKKworCXJldHVybiBwYWdlcjsKK30KKwordm9pZCBzZXR1cF9wYWdlcih2b2lkKQoreworCWNvbnN0IGNoYXIgKnBhZ2VyID0gZ2l0X3BhZ2VyKGlzYXR0eSgxKSk7CisKKwlpZiAoIXBhZ2VyIHx8IHBhZ2VyX2luX3VzZSgpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIGZvcmNlIGNvbXB1dGluZyB0aGUgd2lkdGggb2YgdGhlIHRlcm1pbmFsIGJlZm9yZSB3ZSByZWRpcmVjdAorCSAqIHRoZSBzdGFuZGFyZCBvdXRwdXQgdG8gdGhlIHBhZ2VyLgorCSAqLworCSh2b2lkKSB0ZXJtX2NvbHVtbnMoKTsKKworCXNldGVudigiR0lUX1BBR0VSX0lOX1VTRSIsICJ0cnVlIiwgMSk7CisKKwkvKiBzcGF3biB0aGUgcGFnZXIgKi8KKwlwYWdlcl9hcmd2WzBdID0gcGFnZXI7CisJcGFnZXJfcHJvY2Vzcy51c2Vfc2hlbGwgPSAxOworCXBhZ2VyX3Byb2Nlc3MuYXJndiA9IHBhZ2VyX2FyZ3Y7CisJcGFnZXJfcHJvY2Vzcy5pbiA9IC0xOworCWlmICghZ2V0ZW52KCJMRVNTIikpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKmVudltdID0geyAiTEVTUz1GUlNYIiwgTlVMTCB9OworCQlwYWdlcl9wcm9jZXNzLmVudiA9IGVudjsKKwl9CisjaWZuZGVmIFdJTjMyCisJcGFnZXJfcHJvY2Vzcy5wcmVleGVjX2NiID0gcGFnZXJfcHJlZXhlYzsKKyNlbmRpZgorCWlmIChzdGFydF9jb21tYW5kKCZwYWdlcl9wcm9jZXNzKSkKKwkJcmV0dXJuOworCisJLyogb3JpZ2luYWwgcHJvY2VzcyBjb250aW51ZXMsIGJ1dCB3cml0ZXMgdG8gdGhlIHBpcGUgKi8KKwlkdXAyKHBhZ2VyX3Byb2Nlc3MuaW4sIDEpOworCWlmIChpc2F0dHkoMikpCisJCWR1cDIocGFnZXJfcHJvY2Vzcy5pbiwgMik7CisJY2xvc2UocGFnZXJfcHJvY2Vzcy5pbik7CisKKwkvKiB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgcGFyZW50IHRlcm1pbmF0ZXMgYWZ0ZXIgdGhlIHBhZ2VyICovCisJc2lnY2hhaW5fcHVzaF9jb21tb24od2FpdF9mb3JfcGFnZXJfc2lnbmFsKTsKKwlhdGV4aXQod2FpdF9mb3JfcGFnZXIpOworfQorCitpbnQgcGFnZXJfaW5fdXNlKHZvaWQpCit7CisJY29uc3QgY2hhciAqZW52OworCWVudiA9IGdldGVudigiR0lUX1BBR0VSX0lOX1VTRSIpOworCXJldHVybiBlbnYgPyBnaXRfY29uZmlnX2Jvb2woIkdJVF9QQUdFUl9JTl9VU0UiLCBlbnYpIDogMDsKK30KKworLyoKKyAqIFJldHVybiBjYWNoZWQgdmFsdWUgKGlmIHNldCkgb3IgJENPTFVNTlMgZW52aXJvbm1lbnQgdmFyaWFibGUgKGlmCisgKiBzZXQgYW5kIHBvc2l0aXZlKSBvciBpb2N0bCgxLCBUSU9DR1dJTlNaKS53c19jb2wgKGlmIHBvc2l0aXZlKSwKKyAqIGFuZCBkZWZhdWx0IHRvIDgwIGlmIGFsbCBlbHNlIGZhaWxzLgorICovCitpbnQgdGVybV9jb2x1bW5zKHZvaWQpCit7CisJc3RhdGljIGludCB0ZXJtX2NvbHVtbnNfYXRfc3RhcnR1cDsKKworCWNoYXIgKmNvbF9zdHJpbmc7CisJaW50IG5fY29sczsKKworCWlmICh0ZXJtX2NvbHVtbnNfYXRfc3RhcnR1cCkKKwkJcmV0dXJuIHRlcm1fY29sdW1uc19hdF9zdGFydHVwOworCisJdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXAgPSA4MDsKKworCWNvbF9zdHJpbmcgPSBnZXRlbnYoIkNPTFVNTlMiKTsKKwlpZiAoY29sX3N0cmluZyAmJiAobl9jb2xzID0gYXRvaShjb2xfc3RyaW5nKSkgPiAwKQorCQl0ZXJtX2NvbHVtbnNfYXRfc3RhcnR1cCA9IG5fY29sczsKKyNpZmRlZiBUSU9DR1dJTlNaCisJZWxzZSB7CisJCXN0cnVjdCB3aW5zaXplIHdzOworCQlpZiAoIWlvY3RsKDEsIFRJT0NHV0lOU1osICZ3cykgJiYgd3Mud3NfY29sKQorCQkJdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXAgPSB3cy53c19jb2w7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXA7Cit9CisKKy8qCisgKiBIb3cgbWFueSBjb2x1bW5zIGRvIHdlIG5lZWQgdG8gc2hvdyB0aGlzIG51bWJlciBpbiBkZWNpbWFsPworICovCitpbnQgZGVjaW1hbF93aWR0aChpbnQgbnVtYmVyKQoreworCWludCBpLCB3aWR0aDsKKworCWZvciAod2lkdGggPSAxLCBpID0gMTA7IGkgPD0gbnVtYmVyOyB3aWR0aCsrKQorCQlpICo9IDEwOworCXJldHVybiB3aWR0aDsKK30KZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMtY2IuYyBiL3BhcnNlLW9wdGlvbnMtY2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGU1ZmIxCi0tLSAvZGV2L251bGwKKysrIGIvcGFyc2Utb3B0aW9ucy1jYi5jCkBAIC0wLDAgKzEsMTMwIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCisvKi0tLS0tIHNvbWUgb2Z0ZW4gdXNlZCBvcHRpb25zIC0tLS0tKi8KKworaW50IHBhcnNlX29wdF9hYmJyZXZfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgdjsKKworCWlmICghYXJnKSB7CisJCXYgPSB1bnNldCA/IDAgOiBERUZBVUxUX0FCQlJFVjsKKwl9IGVsc2UgeworCQl2ID0gc3RydG9sKGFyZywgKGNoYXIgKiopJmFyZywgMTApOworCQlpZiAoKmFyZykKKwkJCXJldHVybiBvcHRlcnJvcihvcHQsICJleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIiwgMCk7CisJCWlmICh2ICYmIHYgPCBNSU5JTVVNX0FCQlJFVikKKwkJCXYgPSBNSU5JTVVNX0FCQlJFVjsKKwkJZWxzZSBpZiAodiA+IDQwKQorCQkJdiA9IDQwOworCX0KKwkqKGludCAqKShvcHQtPnZhbHVlKSA9IHY7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfYXBwcm94aWRhdGVfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgIGludCB1bnNldCkKK3sKKwkqKHVuc2lnbmVkIGxvbmcgKikob3B0LT52YWx1ZSkgPSBhcHByb3hpZGF0ZShhcmcpOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X2NvbG9yX2ZsYWdfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgaW50IHVuc2V0KQoreworCWludCB2YWx1ZTsKKworCWlmICghYXJnKQorCQlhcmcgPSB1bnNldCA/ICJuZXZlciIgOiAoY29uc3QgY2hhciAqKW9wdC0+ZGVmdmFsOworCXZhbHVlID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2woTlVMTCwgYXJnKTsKKwlpZiAodmFsdWUgPCAwKQorCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LAorCQkJImV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIsIDApOworCSooaW50ICopb3B0LT52YWx1ZSA9IHZhbHVlOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X3ZlcmJvc2l0eV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgIGludCB1bnNldCkKK3sKKwlpbnQgKnRhcmdldCA9IG9wdC0+dmFsdWU7CisKKwlpZiAodW5zZXQpCisJCS8qIC0tbm8tcXVpZXQsIC0tbm8tdmVyYm9zZSAqLworCQkqdGFyZ2V0ID0gMDsKKwllbHNlIGlmIChvcHQtPnNob3J0X25hbWUgPT0gJ3YnKSB7CisJCWlmICgqdGFyZ2V0ID49IDApCisJCQkoKnRhcmdldCkrKzsKKwkJZWxzZQorCQkJKnRhcmdldCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKCp0YXJnZXQgPD0gMCkKKwkJCSgqdGFyZ2V0KS0tOworCQllbHNlCisJCQkqdGFyZ2V0ID0gLTE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X3dpdGhfY29tbWl0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCWlmIChnZXRfc2hhMShhcmcsIHNoYTEpKQorCQlyZXR1cm4gZXJyb3IoIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIsIGFyZyk7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiBlcnJvcigibm8gc3VjaCBjb21taXQgJXMiLCBhcmcpOworCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsIG9wdC0+dmFsdWUpOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X3RlcnRpYXJ5KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICp0YXJnZXQgPSBvcHQtPnZhbHVlOworCSp0YXJnZXQgPSB1bnNldCA/IDIgOiAxOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0aW9uc19jb25jYXQoc3RydWN0IG9wdGlvbiAqZHN0LCBzaXplX3QgZHN0X3NpemUsIHN0cnVjdCBvcHRpb24gKnNyYykKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBkc3Rfc2l6ZTsgaSsrKQorCQlpZiAoZHN0W2ldLnR5cGUgPT0gT1BUSU9OX0VORCkKKwkJCWJyZWFrOworCWZvciAoaiA9IDA7IGkgPCBkc3Rfc2l6ZTsgaSsrLCBqKyspIHsKKwkJZHN0W2ldID0gc3JjW2pdOworCQlpZiAoc3JjW2pdLnR5cGUgPT0gT1BUSU9OX0VORCkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK2ludCBwYXJzZV9vcHRfc3RyaW5nX2xpc3QoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnYgPSBvcHQtPnZhbHVlOworCisJaWYgKHVuc2V0KSB7CisJCXN0cmluZ19saXN0X2NsZWFyKHYsIDApOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCisJc3RyaW5nX2xpc3RfYXBwZW5kKHYsIHhzdHJkdXAoYXJnKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfbm9vcF9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5jIGIvcGFyc2Utb3B0aW9ucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYzY2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJzZS1vcHRpb25zLmMKQEAgLTAsMCArMSw1OTYgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorCitzdGF0aWMgaW50IHBhcnNlX29wdGlvbnNfdXNhZ2Uoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cywgaW50IGVycik7CisKKyNkZWZpbmUgT1BUX1NIT1JUIDEKKyNkZWZpbmUgT1BUX1VOU0VUIDIKKworaW50IG9wdGJ1Zyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKnJlYXNvbikKK3sKKwlpZiAob3B0LT5sb25nX25hbWUpCisJCXJldHVybiBlcnJvcigiQlVHOiBvcHRpb24gJyVzJyAlcyIsIG9wdC0+bG9uZ19uYW1lLCByZWFzb24pOworCXJldHVybiBlcnJvcigiQlVHOiBzd2l0Y2ggJyVjJyAlcyIsIG9wdC0+c2hvcnRfbmFtZSwgcmVhc29uKTsKK30KKworaW50IG9wdGVycm9yKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqcmVhc29uLCBpbnQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgT1BUX1NIT1JUKQorCQlyZXR1cm4gZXJyb3IoInN3aXRjaCBgJWMnICVzIiwgb3B0LT5zaG9ydF9uYW1lLCByZWFzb24pOworCWlmIChmbGFncyAmIE9QVF9VTlNFVCkKKwkJcmV0dXJuIGVycm9yKCJvcHRpb24gYG5vLSVzJyAlcyIsIG9wdC0+bG9uZ19uYW1lLCByZWFzb24pOworCXJldHVybiBlcnJvcigib3B0aW9uIGAlcycgJXMiLCBvcHQtPmxvbmdfbmFtZSwgcmVhc29uKTsKK30KKworc3RhdGljIGludCBnZXRfYXJnKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKnAsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJICAgaW50IGZsYWdzLCBjb25zdCBjaGFyICoqYXJnKQoreworCWlmIChwLT5vcHQpIHsKKwkJKmFyZyA9IHAtPm9wdDsKKwkJcC0+b3B0ID0gTlVMTDsKKwl9IGVsc2UgaWYgKHAtPmFyZ2MgPT0gMSAmJiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQpKSB7CisJCSphcmcgPSAoY29uc3QgY2hhciAqKW9wdC0+ZGVmdmFsOworCX0gZWxzZSBpZiAocC0+YXJnYyA+IDEpIHsKKwkJcC0+YXJnYy0tOworCQkqYXJnID0gKisrcC0+YXJndjsKKwl9IGVsc2UKKwkJcmV0dXJuIG9wdGVycm9yKG9wdCwgInJlcXVpcmVzIGEgdmFsdWUiLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpeF9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipmaWxlKQoreworCWlmICghZmlsZSB8fCAhKmZpbGUgfHwgIXByZWZpeCB8fCBpc19hYnNvbHV0ZV9wYXRoKCpmaWxlKQorCSAgICB8fCAhc3RyY21wKCItIiwgKmZpbGUpKQorCQlyZXR1cm47CisJKmZpbGUgPSB4c3RyZHVwKHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHN0cmxlbihwcmVmaXgpLCAqZmlsZSkpOworfQorCitzdGF0aWMgaW50IGdldF92YWx1ZShzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpwLAorCQkgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgaW50IGZsYWdzKQoreworCWNvbnN0IGNoYXIgKnMsICphcmc7CisJY29uc3QgaW50IHVuc2V0ID0gZmxhZ3MgJiBPUFRfVU5TRVQ7CisJaW50IGVycjsKKworCWlmICh1bnNldCAmJiBwLT5vcHQpCisJCXJldHVybiBvcHRlcnJvcihvcHQsICJ0YWtlcyBubyB2YWx1ZSIsIGZsYWdzKTsKKwlpZiAodW5zZXQgJiYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9ORUcpKQorCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAiaXNuJ3QgYXZhaWxhYmxlIiwgZmxhZ3MpOworCWlmICghKGZsYWdzICYgT1BUX1NIT1JUKSAmJiBwLT5vcHQgJiYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpKQorCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAidGFrZXMgbm8gdmFsdWUiLCBmbGFncyk7CisKKwlzd2l0Y2ggKG9wdC0+dHlwZSkgeworCWNhc2UgT1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLOgorCQlyZXR1cm4gKCoocGFyc2Vfb3B0X2xsX2NiICopb3B0LT5jYWxsYmFjaykocCwgb3B0LCB1bnNldCk7CisKKwljYXNlIE9QVElPTl9CSVQ6CisJCWlmICh1bnNldCkKKwkJCSooaW50ICopb3B0LT52YWx1ZSAmPSB+b3B0LT5kZWZ2YWw7CisJCWVsc2UKKwkJCSooaW50ICopb3B0LT52YWx1ZSB8PSBvcHQtPmRlZnZhbDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QVElPTl9ORUdCSVQ6CisJCWlmICh1bnNldCkKKwkJCSooaW50ICopb3B0LT52YWx1ZSB8PSBvcHQtPmRlZnZhbDsKKwkJZWxzZQorCQkJKihpbnQgKilvcHQtPnZhbHVlICY9IH5vcHQtPmRlZnZhbDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QVElPTl9DT1VOVFVQOgorCQkqKGludCAqKW9wdC0+dmFsdWUgPSB1bnNldCA/IDAgOiAqKGludCAqKW9wdC0+dmFsdWUgKyAxOworCQlyZXR1cm4gMDsKKworCWNhc2UgT1BUSU9OX1NFVF9JTlQ6CisJCSooaW50ICopb3B0LT52YWx1ZSA9IHVuc2V0ID8gMCA6IG9wdC0+ZGVmdmFsOworCQlyZXR1cm4gMDsKKworCWNhc2UgT1BUSU9OX1NFVF9QVFI6CisJCSoodm9pZCAqKilvcHQtPnZhbHVlID0gdW5zZXQgPyBOVUxMIDogKHZvaWQgKilvcHQtPmRlZnZhbDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QVElPTl9TVFJJTkc6CisJCWlmICh1bnNldCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gTlVMTDsKKwkJZWxzZSBpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcgJiYgIXAtPm9wdCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gKGNvbnN0IGNoYXIgKilvcHQtPmRlZnZhbDsKKwkJZWxzZQorCQkJcmV0dXJuIGdldF9hcmcocCwgb3B0LCBmbGFncywgKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSk7CisJCXJldHVybiAwOworCisJY2FzZSBPUFRJT05fRklMRU5BTUU6CisJCWVyciA9IDA7CisJCWlmICh1bnNldCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gTlVMTDsKKwkJZWxzZSBpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcgJiYgIXAtPm9wdCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gKGNvbnN0IGNoYXIgKilvcHQtPmRlZnZhbDsKKwkJZWxzZQorCQkJZXJyID0gZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlKTsKKworCQlpZiAoIWVycikKKwkJCWZpeF9maWxlbmFtZShwLT5wcmVmaXgsIChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUpOworCQlyZXR1cm4gZXJyOworCisJY2FzZSBPUFRJT05fQ0FMTEJBQ0s6CisJCWlmICh1bnNldCkKKwkJCXJldHVybiAoKm9wdC0+Y2FsbGJhY2spKG9wdCwgTlVMTCwgMSkgPyAoLTEpIDogMDsKKwkJaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpCisJCQlyZXR1cm4gKCpvcHQtPmNhbGxiYWNrKShvcHQsIE5VTEwsIDApID8gKC0xKSA6IDA7CisJCWlmIChvcHQtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRyAmJiAhcC0+b3B0KQorCQkJcmV0dXJuICgqb3B0LT5jYWxsYmFjaykob3B0LCBOVUxMLCAwKSA/ICgtMSkgOiAwOworCQlpZiAoZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAmYXJnKSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuICgqb3B0LT5jYWxsYmFjaykob3B0LCBhcmcsIDApID8gKC0xKSA6IDA7CisKKwljYXNlIE9QVElPTl9JTlRFR0VSOgorCQlpZiAodW5zZXQpIHsKKwkJCSooaW50ICopb3B0LT52YWx1ZSA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcgJiYgIXAtPm9wdCkgeworCQkJKihpbnQgKilvcHQtPnZhbHVlID0gb3B0LT5kZWZ2YWw7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAmYXJnKSkKKwkJCXJldHVybiAtMTsKKwkJKihpbnQgKilvcHQtPnZhbHVlID0gc3RydG9sKGFyZywgKGNoYXIgKiopJnMsIDEwKTsKKwkJaWYgKCpzKQorCQkJcmV0dXJuIG9wdGVycm9yKG9wdCwgImV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiLCBmbGFncyk7CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJZGllKCJzaG91bGQgbm90IGhhcHBlbiwgc29tZW9uZSBtdXN0IGJlIGhpdCBvbiB0aGUgZm9yZWhlYWQiKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfc2hvcnRfb3B0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKnAsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqbnVtb3B0ID0gTlVMTDsKKworCWZvciAoOyBvcHRpb25zLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdGlvbnMrKykgeworCQlpZiAob3B0aW9ucy0+c2hvcnRfbmFtZSA9PSAqcC0+b3B0KSB7CisJCQlwLT5vcHQgPSBwLT5vcHRbMV0gPyBwLT5vcHQgKyAxIDogTlVMTDsKKwkJCXJldHVybiBnZXRfdmFsdWUocCwgb3B0aW9ucywgT1BUX1NIT1JUKTsKKwkJfQorCisJCS8qCisJCSAqIEhhbmRsZSB0aGUgbnVtZXJpY2FsIG9wdGlvbiBsYXRlciwgZXhwbGljaXQgb25lLWRpZ2l0CisJCSAqIG9wdGlvbnMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgaXQuCisJCSAqLworCQlpZiAob3B0aW9ucy0+dHlwZSA9PSBPUFRJT05fTlVNQkVSKQorCQkJbnVtb3B0ID0gb3B0aW9uczsKKwl9CisJaWYgKG51bW9wdCAmJiBpc2RpZ2l0KCpwLT5vcHQpKSB7CisJCXNpemVfdCBsZW4gPSAxOworCQljaGFyICphcmc7CisJCWludCByYzsKKworCQl3aGlsZSAoaXNkaWdpdChwLT5vcHRbbGVuXSkpCisJCQlsZW4rKzsKKwkJYXJnID0geG1lbWR1cHoocC0+b3B0LCBsZW4pOworCQlwLT5vcHQgPSBwLT5vcHRbbGVuXSA/IHAtPm9wdCArIGxlbiA6IE5VTEw7CisJCXJjID0gKCpudW1vcHQtPmNhbGxiYWNrKShudW1vcHQsIGFyZywgMCkgPyAoLTEpIDogMDsKKwkJZnJlZShhcmcpOworCQlyZXR1cm4gcmM7CisJfQorCXJldHVybiAtMjsKK30KKworc3RhdGljIGludCBwYXJzZV9sb25nX29wdChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpwLCBjb25zdCBjaGFyICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJY29uc3QgY2hhciAqYXJnX2VuZCA9IHN0cmNocihhcmcsICc9Jyk7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqYWJicmV2X29wdGlvbiA9IE5VTEwsICphbWJpZ3VvdXNfb3B0aW9uID0gTlVMTDsKKwlpbnQgYWJicmV2X2ZsYWdzID0gMCwgYW1iaWd1b3VzX2ZsYWdzID0gMDsKKworCWlmICghYXJnX2VuZCkKKwkJYXJnX2VuZCA9IGFyZyArIHN0cmxlbihhcmcpOworCisJZm9yICg7IG9wdGlvbnMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0aW9ucysrKSB7CisJCWNvbnN0IGNoYXIgKnJlc3QsICpsb25nX25hbWUgPSBvcHRpb25zLT5sb25nX25hbWU7CisJCWludCBmbGFncyA9IDAsIG9wdF9mbGFncyA9IDA7CisKKwkJaWYgKCFsb25nX25hbWUpCisJCQljb250aW51ZTsKKworYWdhaW46CisJCXJlc3QgPSBza2lwX3ByZWZpeChhcmcsIGxvbmdfbmFtZSk7CisJCWlmIChvcHRpb25zLT50eXBlID09IE9QVElPTl9BUkdVTUVOVCkgeworCQkJaWYgKCFyZXN0KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCpyZXN0ID09ICc9JykKKwkJCQlyZXR1cm4gb3B0ZXJyb3Iob3B0aW9ucywgInRha2VzIG5vIHZhbHVlIiwgZmxhZ3MpOworCQkJaWYgKCpyZXN0KQorCQkJCWNvbnRpbnVlOworCQkJcC0+b3V0W3AtPmNwaWR4KytdID0gYXJnIC0gMjsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICghcmVzdCkgeworCQkJLyogYWJicmV2aWF0ZWQ/ICovCisJCQlpZiAoIXN0cm5jbXAobG9uZ19uYW1lLCBhcmcsIGFyZ19lbmQgLSBhcmcpKSB7Citpc19hYmJyZXZpYXRlZDoKKwkJCQlpZiAoYWJicmV2X29wdGlvbikgeworCQkJCQkvKgorCQkJCQkgKiBJZiB0aGlzIGlzIGFiYnJldmlhdGVkLCBpdCBpcworCQkJCQkgKiBhbWJpZ3VvdXMuIFNvIHdoZW4gdGhlcmUgaXMgbm8KKwkJCQkJICogZXhhY3QgbWF0Y2ggbGF0ZXIsIHdlIG5lZWQgdG8KKwkJCQkJICogZXJyb3Igb3V0LgorCQkJCQkgKi8KKwkJCQkJYW1iaWd1b3VzX29wdGlvbiA9IGFiYnJldl9vcHRpb247CisJCQkJCWFtYmlndW91c19mbGFncyA9IGFiYnJldl9mbGFnczsKKwkJCQl9CisJCQkJaWYgKCEoZmxhZ3MgJiBPUFRfVU5TRVQpICYmICphcmdfZW5kKQorCQkJCQlwLT5vcHQgPSBhcmdfZW5kICsgMTsKKwkJCQlhYmJyZXZfb3B0aW9uID0gb3B0aW9uczsKKwkJCQlhYmJyZXZfZmxhZ3MgPSBmbGFncyBeIG9wdF9mbGFnczsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIG5lZ2F0aW9uIGFsbG93ZWQ/ICovCisJCQlpZiAob3B0aW9ucy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9ORUcpCisJCQkJY29udGludWU7CisJCQkvKiBuZWdhdGVkIGFuZCBhYmJyZXZpYXRlZCB2ZXJ5IG11Y2g/ICovCisJCQlpZiAoIXByZWZpeGNtcCgibm8tIiwgYXJnKSkgeworCQkJCWZsYWdzIHw9IE9QVF9VTlNFVDsKKwkJCQlnb3RvIGlzX2FiYnJldmlhdGVkOworCQkJfQorCQkJLyogbmVnYXRlZD8gKi8KKwkJCWlmIChwcmVmaXhjbXAoYXJnLCAibm8tIikpIHsKKwkJCQlpZiAoIXByZWZpeGNtcChsb25nX25hbWUsICJuby0iKSkgeworCQkJCQlsb25nX25hbWUgKz0gMzsKKwkJCQkJb3B0X2ZsYWdzIHw9IE9QVF9VTlNFVDsKKwkJCQkJZ290byBhZ2FpbjsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQlmbGFncyB8PSBPUFRfVU5TRVQ7CisJCQlyZXN0ID0gc2tpcF9wcmVmaXgoYXJnICsgMywgbG9uZ19uYW1lKTsKKwkJCS8qIGFiYnJldmlhdGVkIGFuZCBuZWdhdGVkPyAqLworCQkJaWYgKCFyZXN0ICYmICFwcmVmaXhjbXAobG9uZ19uYW1lLCBhcmcgKyAzKSkKKwkJCQlnb3RvIGlzX2FiYnJldmlhdGVkOworCQkJaWYgKCFyZXN0KQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICgqcmVzdCkgeworCQkJaWYgKCpyZXN0ICE9ICc9JykKKwkJCQljb250aW51ZTsKKwkJCXAtPm9wdCA9IHJlc3QgKyAxOworCQl9CisJCXJldHVybiBnZXRfdmFsdWUocCwgb3B0aW9ucywgZmxhZ3MgXiBvcHRfZmxhZ3MpOworCX0KKworCWlmIChhbWJpZ3VvdXNfb3B0aW9uKQorCQlyZXR1cm4gZXJyb3IoIkFtYmlndW91cyBvcHRpb246ICVzICIKKwkJCSIoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiLAorCQkJYXJnLAorCQkJKGFtYmlndW91c19mbGFncyAmIE9QVF9VTlNFVCkgPyAgIm5vLSIgOiAiIiwKKwkJCWFtYmlndW91c19vcHRpb24tPmxvbmdfbmFtZSwKKwkJCShhYmJyZXZfZmxhZ3MgJiBPUFRfVU5TRVQpID8gICJuby0iIDogIiIsCisJCQlhYmJyZXZfb3B0aW9uLT5sb25nX25hbWUpOworCWlmIChhYmJyZXZfb3B0aW9uKQorCQlyZXR1cm4gZ2V0X3ZhbHVlKHAsIGFiYnJldl9vcHRpb24sIGFiYnJldl9mbGFncyk7CisJcmV0dXJuIC0yOworfQorCitzdGF0aWMgaW50IHBhcnNlX25vZGFzaF9vcHQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJZm9yICg7IG9wdGlvbnMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0aW9ucysrKSB7CisJCWlmICghKG9wdGlvbnMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCkpCisJCQljb250aW51ZTsKKwkJaWYgKG9wdGlvbnMtPnNob3J0X25hbWUgPT0gYXJnWzBdICYmIGFyZ1sxXSA9PSAnXDAnKQorCQkJcmV0dXJuIGdldF92YWx1ZShwLCBvcHRpb25zLCBPUFRfU0hPUlQpOworCX0KKwlyZXR1cm4gLTI7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3R5cG9zKGNvbnN0IGNoYXIgKmFyZywgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKK3sKKwlpZiAoc3RybGVuKGFyZykgPCAzKQorCQlyZXR1cm47CisKKwlpZiAoIXByZWZpeGNtcChhcmcsICJuby0iKSkgeworCQllcnJvciAoImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIsIGFyZyk7CisJCWV4aXQoMTI5KTsKKwl9CisKKwlmb3IgKDsgb3B0aW9ucy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRpb25zKyspIHsKKwkJaWYgKCFvcHRpb25zLT5sb25nX25hbWUpCisJCQljb250aW51ZTsKKwkJaWYgKCFwcmVmaXhjbXAob3B0aW9ucy0+bG9uZ19uYW1lLCBhcmcpKSB7CisJCQllcnJvciAoImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIsIGFyZyk7CisJCQlleGl0KDEyOSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX29wdGlvbnNfY2hlY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cykKK3sKKwlpbnQgZXJyID0gMDsKKworCWZvciAoOyBvcHRzLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdHMrKykgeworCQlpZiAoKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCkgJiYKKwkJICAgIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpKQorCQkJZXJyIHw9IG9wdGJ1ZyhvcHRzLCAidXNlcyBpbmNvbXBhdGlibGUgZmxhZ3MgIgorCQkJCQkiTEFTVEFSR19ERUZBVUxUIGFuZCBPUFRBUkciKTsKKwkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCAmJgorCQkgICAgKChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpIHx8CisJCSAgICAgIShvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykgfHwKKwkJICAgICAhKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PTkVHKSB8fAorCQkgICAgIG9wdHMtPmxvbmdfbmFtZSkpCisJCQllcnIgfD0gb3B0YnVnKG9wdHMsICJ1c2VzIGZlYXR1cmUgIgorCQkJCQkibm90IHN1cHBvcnRlZCBmb3IgZGFzaGxlc3Mgb3B0aW9ucyIpOworCQlzd2l0Y2ggKG9wdHMtPnR5cGUpIHsKKwkJY2FzZSBPUFRJT05fQ09VTlRVUDoKKwkJY2FzZSBPUFRJT05fQklUOgorCQljYXNlIE9QVElPTl9ORUdCSVQ6CisJCWNhc2UgT1BUSU9OX1NFVF9JTlQ6CisJCWNhc2UgT1BUSU9OX1NFVF9QVFI6CisJCWNhc2UgT1BUSU9OX05VTUJFUjoKKwkJCWlmICgob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKSB8fAorCQkJICAgICEob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpKQorCQkJCWVyciB8PSBvcHRidWcob3B0cywgInNob3VsZCBub3QgYWNjZXB0IGFuIGFyZ3VtZW50Iik7CisJCWRlZmF1bHQ6CisJCQk7IC8qIG9rLiAodXN1YWxseSBhY2NlcHRzIGFuIGFyZ3VtZW50KSAqLworCQl9CisJfQorCWlmIChlcnIpCisJCWV4aXQoMTI4KTsKK30KKwordm9pZCBwYXJzZV9vcHRpb25zX3N0YXJ0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCSBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLCBpbnQgZmxhZ3MpCit7CisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKKwljdHgtPmFyZ2MgPSBhcmdjIC0gMTsKKwljdHgtPmFyZ3YgPSBhcmd2ICsgMTsKKwljdHgtPm91dCAgPSBhcmd2OworCWN0eC0+cHJlZml4ID0gcHJlZml4OworCWN0eC0+Y3BpZHggPSAoKGZsYWdzICYgUEFSU0VfT1BUX0tFRVBfQVJHVjApICE9IDApOworCWN0eC0+ZmxhZ3MgPSBmbGFnczsKKwlpZiAoKGZsYWdzICYgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTikgJiYKKwkgICAgKGZsYWdzICYgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTikpCisJCWRpZSgiU1RPUF9BVF9OT05fT1BUSU9OIGFuZCBLRUVQX1VOS05PV04gZG9uJ3QgZ28gdG9nZXRoZXIiKTsKKwlwYXJzZV9vcHRpb25zX2NoZWNrKG9wdGlvbnMpOworfQorCitzdGF0aWMgaW50IHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICosCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGludCwgaW50KTsKKworaW50IHBhcnNlX29wdGlvbnNfc3RlcChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAorCQkgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10pCit7CisJaW50IGludGVybmFsX2hlbHAgPSAhKGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9fSU5URVJOQUxfSEVMUCk7CisKKwkvKiB3ZSBtdXN0IHJlc2V0IC0+b3B0LCB1bmtub3duIHNob3J0IG9wdGlvbiBsZWF2ZSBpdCBkYW5nbGluZyAqLworCWN0eC0+b3B0ID0gTlVMTDsKKworCWZvciAoOyBjdHgtPmFyZ2M7IGN0eC0+YXJnYy0tLCBjdHgtPmFyZ3YrKykgeworCQljb25zdCBjaGFyICphcmcgPSBjdHgtPmFyZ3ZbMF07CisKKwkJaWYgKCphcmcgIT0gJy0nIHx8ICFhcmdbMV0pIHsKKwkJCWlmIChwYXJzZV9ub2Rhc2hfb3B0KGN0eCwgYXJnLCBvcHRpb25zKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKQorCQkJCXJldHVybiBQQVJTRV9PUFRfTk9OX09QVElPTjsKKwkJCWN0eC0+b3V0W2N0eC0+Y3BpZHgrK10gPSBjdHgtPmFyZ3ZbMF07CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChhcmdbMV0gIT0gJy0nKSB7CisJCQljdHgtPm9wdCA9IGFyZyArIDE7CisJCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAqY3R4LT5vcHQgPT0gJ2gnKQorCQkJCXJldHVybiBwYXJzZV9vcHRpb25zX3VzYWdlKGN0eCwgdXNhZ2VzdHIsIG9wdGlvbnMsIDApOworCQkJc3dpdGNoIChwYXJzZV9zaG9ydF9vcHQoY3R4LCBvcHRpb25zKSkgeworCQkJY2FzZSAtMToKKwkJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZShjdHgsIHVzYWdlc3RyLCBvcHRpb25zLCAxKTsKKwkJCWNhc2UgLTI6CisJCQkJaWYgKGN0eC0+b3B0KQorCQkJCQljaGVja190eXBvcyhhcmcgKyAxLCBvcHRpb25zKTsKKwkJCQlnb3RvIHVua25vd247CisJCQl9CisJCQlpZiAoY3R4LT5vcHQpCisJCQkJY2hlY2tfdHlwb3MoYXJnICsgMSwgb3B0aW9ucyk7CisJCQl3aGlsZSAoY3R4LT5vcHQpIHsKKwkJCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAqY3R4LT5vcHQgPT0gJ2gnKQorCQkJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZShjdHgsIHVzYWdlc3RyLCBvcHRpb25zLCAwKTsKKwkJCQlzd2l0Y2ggKHBhcnNlX3Nob3J0X29wdChjdHgsIG9wdGlvbnMpKSB7CisJCQkJY2FzZSAtMToKKwkJCQkJcmV0dXJuIHBhcnNlX29wdGlvbnNfdXNhZ2UoY3R4LCB1c2FnZXN0ciwgb3B0aW9ucywgMSk7CisJCQkJY2FzZSAtMjoKKwkJCQkJLyogZmFrZSBhIHNob3J0IG9wdGlvbiB0aGluZyB0byBoaWRlIHRoZSBmYWN0IHRoYXQgd2UgbWF5IGhhdmUKKwkJCQkJICogc3RhcnRlZCB0byBwYXJzZSBhZ2dyZWdhdGVkIHN0dWZmCisJCQkJCSAqCisJCQkJCSAqIFRoaXMgaXMgbGVha3ksIHRvbyBiYWQuCisJCQkJCSAqLworCQkJCQljdHgtPmFyZ3ZbMF0gPSB4c3RyZHVwKGN0eC0+b3B0IC0gMSk7CisJCQkJCSooY2hhciAqKWN0eC0+YXJndlswXSA9ICctJzsKKwkJCQkJZ290byB1bmtub3duOworCQkJCX0KKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFhcmdbMl0pIHsgLyogIi0tIiAqLworCQkJaWYgKCEoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKSkgeworCQkJCWN0eC0+YXJnYy0tOworCQkJCWN0eC0+YXJndisrOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAhc3RyY21wKGFyZyArIDIsICJoZWxwLWFsbCIpKQorCQkJcmV0dXJuIHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChjdHgsIHVzYWdlc3RyLCBvcHRpb25zLCAxLCAwKTsKKwkJaWYgKGludGVybmFsX2hlbHAgJiYgIXN0cmNtcChhcmcgKyAyLCAiaGVscCIpKQorCQkJcmV0dXJuIHBhcnNlX29wdGlvbnNfdXNhZ2UoY3R4LCB1c2FnZXN0ciwgb3B0aW9ucywgMCk7CisJCXN3aXRjaCAocGFyc2VfbG9uZ19vcHQoY3R4LCBhcmcgKyAyLCBvcHRpb25zKSkgeworCQljYXNlIC0xOgorCQkJcmV0dXJuIHBhcnNlX29wdGlvbnNfdXNhZ2UoY3R4LCB1c2FnZXN0ciwgb3B0aW9ucywgMSk7CisJCWNhc2UgLTI6CisJCQlnb3RvIHVua25vd247CisJCX0KKwkJY29udGludWU7Cit1bmtub3duOgorCQlpZiAoIShjdHgtPmZsYWdzICYgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTikpCisJCQlyZXR1cm4gUEFSU0VfT1BUX1VOS05PV047CisJCWN0eC0+b3V0W2N0eC0+Y3BpZHgrK10gPSBjdHgtPmFyZ3ZbMF07CisJCWN0eC0+b3B0ID0gTlVMTDsKKwl9CisJcmV0dXJuIFBBUlNFX09QVF9ET05FOworfQorCitpbnQgcGFyc2Vfb3B0aW9uc19lbmQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4KQoreworCW1lbW1vdmUoY3R4LT5vdXQgKyBjdHgtPmNwaWR4LCBjdHgtPmFyZ3YsIGN0eC0+YXJnYyAqIHNpemVvZigqY3R4LT5vdXQpKTsKKwljdHgtPm91dFtjdHgtPmNwaWR4ICsgY3R4LT5hcmdjXSA9IE5VTEw7CisJcmV0dXJuIGN0eC0+Y3BpZHggKyBjdHgtPmFyZ2M7Cit9CisKK2ludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdLAorCQkgIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90IGN0eDsKKworCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBmbGFncyk7CisJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgdXNhZ2VzdHIpKSB7CisJY2FzZSBQQVJTRV9PUFRfSEVMUDoKKwkJZXhpdCgxMjkpOworCWNhc2UgUEFSU0VfT1BUX05PTl9PUFRJT046CisJY2FzZSBQQVJTRV9PUFRfRE9ORToKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogUEFSU0VfT1BUX1VOS05PV04gKi8KKwkJaWYgKGN0eC5hcmd2WzBdWzFdID09ICctJykgeworCQkJZXJyb3IoInVua25vd24gb3B0aW9uIGAlcyciLCBjdHguYXJndlswXSArIDIpOworCQl9IGVsc2UgeworCQkJZXJyb3IoInVua25vd24gc3dpdGNoIGAlYyciLCAqY3R4Lm9wdCk7CisJCX0KKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlc3RyLCBvcHRpb25zKTsKKwl9CisKKwlwcmVjb21wb3NlX2FyZ3YoYXJnYywgYXJndik7CisJcmV0dXJuIHBhcnNlX29wdGlvbnNfZW5kKCZjdHgpOworfQorCitzdGF0aWMgaW50IHVzYWdlX2FyZ2goY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cywgRklMRSAqb3V0ZmlsZSkKK3sKKwljb25zdCBjaGFyICpzOworCWludCBsaXRlcmFsID0gKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX0xJVEVSQUxfQVJHSEVMUCkgfHwgIW9wdHMtPmFyZ2g7CisJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRykKKwkJaWYgKG9wdHMtPmxvbmdfbmFtZSkKKwkJCXMgPSBsaXRlcmFsID8gIls9JXNdIiA6ICJbPTwlcz5dIjsKKwkJZWxzZQorCQkJcyA9IGxpdGVyYWwgPyAiWyVzXSIgOiAiWzwlcz5dIjsKKwllbHNlCisJCXMgPSBsaXRlcmFsID8gIiAlcyIgOiAiIDwlcz4iOworCXJldHVybiBmcHJpbnRmKG91dGZpbGUsIHMsIG9wdHMtPmFyZ2ggPyBfKG9wdHMtPmFyZ2gpIDogXygiLi4uIikpOworfQorCisjZGVmaW5lIFVTQUdFX09QVFNfV0lEVEggMjQKKyNkZWZpbmUgVVNBR0VfR0FQICAgICAgICAgMgorCitzdGF0aWMgaW50IHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMsIGludCBmdWxsLCBpbnQgZXJyKQoreworCUZJTEUgKm91dGZpbGUgPSBlcnIgPyBzdGRlcnIgOiBzdGRvdXQ7CisKKwlpZiAoIXVzYWdlc3RyKQorCQlyZXR1cm4gUEFSU0VfT1BUX0hFTFA7CisKKwlpZiAoIWVyciAmJiBjdHggJiYgY3R4LT5mbGFncyAmIFBBUlNFX09QVF9TSEVMTF9FVkFMKQorCQlmcHJpbnRmKG91dGZpbGUsICJjYXQgPDxcXEVPRlxuIik7CisKKwlmcHJpbnRmX2xuKG91dGZpbGUsIF8oInVzYWdlOiAlcyIpLCBfKCp1c2FnZXN0cisrKSk7CisJd2hpbGUgKCp1c2FnZXN0ciAmJiAqKnVzYWdlc3RyKQorCQkvKiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisJCSAgIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbiAqLworCQlmcHJpbnRmX2xuKG91dGZpbGUsIF8oIiAgIG9yOiAlcyIpLCBfKCp1c2FnZXN0cisrKSk7CisJd2hpbGUgKCp1c2FnZXN0cikgeworCQlpZiAoKip1c2FnZXN0cikKKwkJCWZwcmludGZfbG4ob3V0ZmlsZSwgXygiICAgICVzIiksIF8oKnVzYWdlc3RyKSk7CisJCWVsc2UKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCXVzYWdlc3RyKys7CisJfQorCisJaWYgKG9wdHMtPnR5cGUgIT0gT1BUSU9OX0dST1VQKQorCQlmcHV0YygnXG4nLCBvdXRmaWxlKTsKKworCWZvciAoOyBvcHRzLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdHMrKykgeworCQlzaXplX3QgcG9zOworCQlpbnQgcGFkOworCisJCWlmIChvcHRzLT50eXBlID09IE9QVElPTl9HUk9VUCkgeworCQkJZnB1dGMoJ1xuJywgb3V0ZmlsZSk7CisJCQlpZiAoKm9wdHMtPmhlbHApCisJCQkJZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIF8ob3B0cy0+aGVscCkpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFmdWxsICYmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9ISURERU4pKQorCQkJY29udGludWU7CisKKwkJcG9zID0gZnByaW50ZihvdXRmaWxlLCAiICAgICIpOworCQlpZiAob3B0cy0+c2hvcnRfbmFtZSkgeworCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCkKKwkJCQlwb3MgKz0gZnByaW50ZihvdXRmaWxlLCAiJWMiLCBvcHRzLT5zaG9ydF9uYW1lKTsKKwkJCWVsc2UKKwkJCQlwb3MgKz0gZnByaW50ZihvdXRmaWxlLCAiLSVjIiwgb3B0cy0+c2hvcnRfbmFtZSk7CisJCX0KKwkJaWYgKG9wdHMtPmxvbmdfbmFtZSAmJiBvcHRzLT5zaG9ydF9uYW1lKQorCQkJcG9zICs9IGZwcmludGYob3V0ZmlsZSwgIiwgIik7CisJCWlmIChvcHRzLT5sb25nX25hbWUpCisJCQlwb3MgKz0gZnByaW50ZihvdXRmaWxlLCAiLS0lcyIsIG9wdHMtPmxvbmdfbmFtZSk7CisJCWlmIChvcHRzLT50eXBlID09IE9QVElPTl9OVU1CRVIpCisJCQlwb3MgKz0gZnByaW50ZihvdXRmaWxlLCAiLU5VTSIpOworCisJCWlmICgob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQKSB8fAorCQkgICAgIShvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykpCisJCQlwb3MgKz0gdXNhZ2VfYXJnaChvcHRzLCBvdXRmaWxlKTsKKworCQlpZiAocG9zIDw9IFVTQUdFX09QVFNfV0lEVEgpCisJCQlwYWQgPSBVU0FHRV9PUFRTX1dJRFRIIC0gcG9zOworCQllbHNlIHsKKwkJCWZwdXRjKCdcbicsIG91dGZpbGUpOworCQkJcGFkID0gVVNBR0VfT1BUU19XSURUSDsKKwkJfQorCQlmcHJpbnRmKG91dGZpbGUsICIlKnMlc1xuIiwgcGFkICsgVVNBR0VfR0FQLCAiIiwgXyhvcHRzLT5oZWxwKSk7CisJfQorCWZwdXRjKCdcbicsIG91dGZpbGUpOworCisJaWYgKCFlcnIgJiYgY3R4ICYmIGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfU0hFTExfRVZBTCkKKwkJZnB1dHMoIkVPRlxuIiwgb3V0ZmlsZSk7CisKKwlyZXR1cm4gUEFSU0VfT1BUX0hFTFA7Cit9CisKK3ZvaWQgTk9SRVRVUk4gdXNhZ2Vfd2l0aF9vcHRpb25zKGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRzKQoreworCXVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChOVUxMLCB1c2FnZXN0ciwgb3B0cywgMCwgMSk7CisJZXhpdCgxMjkpOworfQorCit2b2lkIE5PUkVUVVJOIHVzYWdlX21zZ19vcHQoY29uc3QgY2hhciAqbXNnLAorCQkgICBjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAorCQkgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKQoreworCWZwcmludGYoc3RkZXJyLCAiJXNcblxuIiwgbXNnKTsKKwl1c2FnZV93aXRoX29wdGlvbnModXNhZ2VzdHIsIG9wdGlvbnMpOworfQorCitzdGF0aWMgaW50IHBhcnNlX29wdGlvbnNfdXNhZ2Uoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cywgaW50IGVycikKK3sKKwlyZXR1cm4gdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKGN0eCwgdXNhZ2VzdHIsIG9wdHMsIDAsIGVycik7Cit9CisKZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMuaCBiL3BhcnNlLW9wdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWEzOWM2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFyc2Utb3B0aW9ucy5oCkBAIC0wLDAgKzEsMjQzIEBACisjaWZuZGVmIFBBUlNFX09QVElPTlNfSAorI2RlZmluZSBQQVJTRV9PUFRJT05TX0gKKworZW51bSBwYXJzZV9vcHRfdHlwZSB7CisJLyogc3BlY2lhbCB0eXBlcyAqLworCU9QVElPTl9FTkQsCisJT1BUSU9OX0FSR1VNRU5ULAorCU9QVElPTl9HUk9VUCwKKwlPUFRJT05fTlVNQkVSLAorCS8qIG9wdGlvbnMgd2l0aCBubyBhcmd1bWVudHMgKi8KKwlPUFRJT05fQklULAorCU9QVElPTl9ORUdCSVQsCisJT1BUSU9OX0NPVU5UVVAsCisJT1BUSU9OX1NFVF9JTlQsCisJT1BUSU9OX1NFVF9QVFIsCisJLyogb3B0aW9ucyB3aXRoIGFyZ3VtZW50cyAodXN1YWxseSkgKi8KKwlPUFRJT05fU1RSSU5HLAorCU9QVElPTl9JTlRFR0VSLAorCU9QVElPTl9DQUxMQkFDSywKKwlPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssCisJT1BUSU9OX0ZJTEVOQU1FCit9OworCisvKiBEZXByZWNhdGVkIHN5bm9ueW0gKi8KKyNkZWZpbmUgT1BUSU9OX0JPT0xFQU4gT1BUSU9OX0NPVU5UVVAKKworZW51bSBwYXJzZV9vcHRfZmxhZ3MgeworCVBBUlNFX09QVF9LRUVQX0RBU0hEQVNIID0gMSwKKwlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OID0gMiwKKwlQQVJTRV9PUFRfS0VFUF9BUkdWMCA9IDQsCisJUEFSU0VfT1BUX0tFRVBfVU5LTk9XTiA9IDgsCisJUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFAgPSAxNgorfTsKKworZW51bSBwYXJzZV9vcHRfb3B0aW9uX2ZsYWdzIHsKKwlQQVJTRV9PUFRfT1BUQVJHICA9IDEsCisJUEFSU0VfT1BUX05PQVJHICAgPSAyLAorCVBBUlNFX09QVF9OT05FRyAgID0gNCwKKwlQQVJTRV9PUFRfSElEREVOICA9IDgsCisJUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCA9IDE2LAorCVBBUlNFX09QVF9OT0RBU0ggPSAzMiwKKwlQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQID0gNjQsCisJUEFSU0VfT1BUX1NIRUxMX0VWQUwgPSAyNTYKK307CisKK3N0cnVjdCBvcHRpb247Cit0eXBlZGVmIGludCBwYXJzZV9vcHRfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCk7CisKK3N0cnVjdCBwYXJzZV9vcHRfY3R4X3Q7Cit0eXBlZGVmIGludCBwYXJzZV9vcHRfbGxfY2Ioc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgaW50IHVuc2V0KTsKKworLyoKKyAqIGB0eXBlYDo6CisgKiAgIGhvbGRzIHRoZSB0eXBlIG9mIHRoZSBvcHRpb24sIHlvdSBtdXN0IGhhdmUgYW4gT1BUSU9OX0VORCBsYXN0IGluIHlvdXIKKyAqICAgYXJyYXkuCisgKgorICogYHNob3J0X25hbWVgOjoKKyAqICAgdGhlIGNoYXJhY3RlciB0byB1c2UgYXMgYSBzaG9ydCBvcHRpb24gbmFtZSwgJ1wwJyBpZiBub25lLgorICoKKyAqIGBsb25nX25hbWVgOjoKKyAqICAgdGhlIGxvbmcgb3B0aW9uIG5hbWUsIHdpdGhvdXQgdGhlIGxlYWRpbmcgZGFzaGVzLCBOVUxMIGlmIG5vbmUuCisgKgorICogYHZhbHVlYDo6CisgKiAgIHN0b3JlcyBwb2ludGVycyB0byB0aGUgdmFsdWVzIHRvIGJlIGZpbGxlZC4KKyAqCisgKiBgYXJnaGA6OgorICogICB0b2tlbiB0byBleHBsYWluIHRoZSBraW5kIG9mIGFyZ3VtZW50IHRoaXMgb3B0aW9uIHdhbnRzLiBLZWVwIGl0CisgKiAgIGhvbW9nZW5lb3VzIGFjcm9zcyB0aGUgcmVwb3NpdG9yeS4gU2hvdWxkIGJlIHdyYXBwZWQgYnkgTl8oKSBmb3IKKyAqICAgdHJhbnNsYXRpb24uCisgKgorICogYGhlbHBgOjoKKyAqICAgdGhlIHNob3J0IGhlbHAgYXNzb2NpYXRlZCB0byB3aGF0IHRoZSBvcHRpb24gZG9lcy4KKyAqICAgTXVzdCBuZXZlciBiZSBOVUxMIChleGNlcHQgZm9yIE9QVElPTl9FTkQpLgorICogICBPUFRJT05fR1JPVVAgdXNlcyB0aGlzIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGdyb3VwIGhlYWRlci4KKyAqICAgU2hvdWxkIGJlIHdyYXBwZWQgYnkgTl8oKSBmb3IgdHJhbnNsYXRpb24uCisgKgorICogYGZsYWdzYDo6CisgKiAgIG1hc2sgb2YgcGFyc2Vfb3B0X29wdGlvbl9mbGFncy4KKyAqICAgUEFSU0VfT1BUX09QVEFSRzogc2F5cyB0aGF0IHRoZSBhcmd1bWVudCBpcyBvcHRpb25hbCAobm90IGZvciBCT09MRUFOcykKKyAqICAgUEFSU0VfT1BUX05PQVJHOiBzYXlzIHRoYXQgdGhpcyBvcHRpb24gZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudAorICogICBQQVJTRV9PUFRfTk9ORUc6IHNheXMgdGhhdCB0aGlzIG9wdGlvbiBjYW5ub3QgYmUgbmVnYXRlZAorICogICBQQVJTRV9PUFRfSElEREVOOiB0aGlzIG9wdGlvbiBpcyBza2lwcGVkIGluIHRoZSBkZWZhdWx0IHVzYWdlLCBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgc2hvd24gb25seSBpbiB0aGUgZnVsbCB1c2FnZS4KKyAqICAgUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVDogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIHdpbGwgdGFrZSB0aGUgZGVmYXVsdAorICoJCQkJdmFsdWUgaWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4gd2hlbiB0aGUgb3B0aW9uCisgKgkJCQlpcyBsYXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIElmIHRoZSBvcHRpb24gaXMKKyAqCQkJCW5vdCBsYXN0IGl0IHdpbGwgcmVxdWlyZSBhbiBhcmd1bWVudC4KKyAqCQkJCVNob3VsZCBub3QgYmUgdXNlZCB3aXRoIFBBUlNFX09QVF9PUFRBUkcuCisgKiAgIFBBUlNFX09QVF9OT0RBU0g6IHRoaXMgb3B0aW9uIGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIGRhc2guCisgKiAgIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFA6IHNheXMgdGhhdCBhcmdoIHNob3VsZG4ndCBiZSBlbmNsb3NlZCBpbiBicmFja2V0cworICoJCQkJKGkuZS4gJzxhcmdoPicpIGluIHRoZSBoZWxwIG1lc3NhZ2UuCisgKgkJCQlVc2VmdWwgZm9yIG9wdGlvbnMgd2l0aCBtdWx0aXBsZSBwYXJhbWV0ZXJzLgorICoKKyAqIGBjYWxsYmFja2A6OgorICogICBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayB0byB1c2UgZm9yIE9QVElPTl9DQUxMQkFDSyBvcgorICogICBPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0suCisgKgorICogYGRlZnZhbGA6OgorICogICBkZWZhdWx0IHZhbHVlIHRvIGZpbGwgKCotPnZhbHVlKSB3aXRoIGZvciBQQVJTRV9PUFRfT1BUQVJHLgorICogICBPUFRJT05fe0JJVCxTRVRfSU5ULFNFVF9QVFJ9IHN0b3JlIHRoZSB7bWFzayxpbnRlZ2VyLHBvaW50ZXJ9IHRvIHB1dCBpbgorICogICB0aGUgdmFsdWUgd2hlbiBtZXQuCisgKiAgIENBTExCQUNLUyBjYW4gdXNlIGl0IGxpa2UgdGhleSB3YW50LgorICovCitzdHJ1Y3Qgb3B0aW9uIHsKKwllbnVtIHBhcnNlX29wdF90eXBlIHR5cGU7CisJaW50IHNob3J0X25hbWU7CisJY29uc3QgY2hhciAqbG9uZ19uYW1lOworCXZvaWQgKnZhbHVlOworCWNvbnN0IGNoYXIgKmFyZ2g7CisJY29uc3QgY2hhciAqaGVscDsKKworCWludCBmbGFnczsKKwlwYXJzZV9vcHRfY2IgKmNhbGxiYWNrOworCWludHB0cl90IGRlZnZhbDsKK307CisKKyNkZWZpbmUgT1BUX0VORCgpICAgICAgICAgICAgICAgICAgIHsgT1BUSU9OX0VORCB9CisjZGVmaW5lIE9QVF9BUkdVTUVOVChsLCBoKSAgICAgICAgICB7IE9QVElPTl9BUkdVTUVOVCwgMCwgKGwpLCBOVUxMLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkd9CisjZGVmaW5lIE9QVF9HUk9VUChoKSAgICAgICAgICAgICAgICB7IE9QVElPTl9HUk9VUCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgKGgpIH0KKyNkZWZpbmUgT1BUX0JJVChzLCBsLCB2LCBoLCBiKSAgICAgIHsgT1BUSU9OX0JJVCwgKHMpLCAobCksICh2KSwgTlVMTCwgKGgpLCBcCisJCQkJICAgICAgUEFSU0VfT1BUX05PQVJHLCBOVUxMLCAoYikgfQorI2RlZmluZSBPUFRfTkVHQklUKHMsIGwsIHYsIGgsIGIpICAgeyBPUFRJT05fTkVHQklULCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChiKSB9CisjZGVmaW5lIE9QVF9DT1VOVFVQKHMsIGwsIHYsIGgpICAgICB7IE9QVElPTl9DT1VOVFVQLCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcgfQorI2RlZmluZSBPUFRfU0VUX0lOVChzLCBsLCB2LCBoLCBpKSAgeyBPUFRJT05fU0VUX0lOVCwgKHMpLCAobCksICh2KSwgTlVMTCwgXAorCQkJCSAgICAgIChoKSwgUEFSU0VfT1BUX05PQVJHLCBOVUxMLCAoaSkgfQorI2RlZmluZSBPUFRfQk9PTChzLCBsLCB2LCBoKSAgICAgICAgT1BUX1NFVF9JTlQocywgbCwgdiwgaCwgMSkKKyNkZWZpbmUgT1BUX1NFVF9QVFIocywgbCwgdiwgaCwgcCkgIHsgT1BUSU9OX1NFVF9QVFIsIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSRywgTlVMTCwgKHApIH0KKyNkZWZpbmUgT1BUX0lOVEVHRVIocywgbCwgdiwgaCkgICAgIHsgT1BUSU9OX0lOVEVHRVIsIChzKSwgKGwpLCAodiksIE5fKCJuIiksIChoKSB9CisjZGVmaW5lIE9QVF9TVFJJTkcocywgbCwgdiwgYSwgaCkgICB7IE9QVElPTl9TVFJJTkcsICAocyksIChsKSwgKHYpLCAoYSksIChoKSB9CisjZGVmaW5lIE9QVF9TVFJJTkdfTElTVChzLCBsLCB2LCBhLCBoKSBcCisJCQkJICAgIHsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCAoYSksIFwKKwkJCQkgICAgICAoaCksIDAsICZwYXJzZV9vcHRfc3RyaW5nX2xpc3QgfQorI2RlZmluZSBPUFRfVVlOKHMsIGwsIHYsIGgpICAgICAgICAgeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSRywgJnBhcnNlX29wdF90ZXJ0aWFyeSB9CisjZGVmaW5lIE9QVF9EQVRFKHMsIGwsIHYsIGgpIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgTl8oInRpbWUiKSwoaCksIDAsCVwKKwkgIHBhcnNlX29wdF9hcHByb3hpZGF0ZV9jYiB9CisjZGVmaW5lIE9QVF9DQUxMQkFDSyhzLCBsLCB2LCBhLCBoLCBmKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIChhKSwgKGgpLCAwLCAoZikgfQorI2RlZmluZSBPUFRfTlVNQkVSX0NBTExCQUNLKHYsIGgsIGYpIFwKKwl7IE9QVElPTl9OVU1CRVIsIDAsIE5VTEwsICh2KSwgTlVMTCwgKGgpLCBcCisJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIChmKSB9CisjZGVmaW5lIE9QVF9GSUxFTkFNRShzLCBsLCB2LCBoKSAgICB7IE9QVElPTl9GSUxFTkFNRSwgKHMpLCAobCksICh2KSwgXAorCQkJCSAgICAgICBOXygiZmlsZSIpLCAoaCkgfQorI2RlZmluZSBPUFRfQ09MT1JfRkxBRyhzLCBsLCB2LCBoKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIE5fKCJ3aGVuIiksIChoKSwgUEFSU0VfT1BUX09QVEFSRywgXAorCQlwYXJzZV9vcHRfY29sb3JfZmxhZ19jYiwgKGludHB0cl90KSJhbHdheXMiIH0KKworI2RlZmluZSBPUFRfTk9PUF9OT0FSRyhzLCBsKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCBOVUxMLCBOVUxMLCBcCisJICBOXygibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIiksCQlcCisJICBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PQVJHLCBwYXJzZV9vcHRfbm9vcF9jYiB9CisKKy8qIERlcHJlY2F0ZWQgc3lub255bSAqLworI2RlZmluZSBPUFRfQk9PTEVBTiBPUFRfQ09VTlRVUAorCisvKiBwYXJzZV9vcHRpb25zKCkgd2lsbCBmaWx0ZXIgb3V0IHRoZSBwcm9jZXNzZWQgb3B0aW9ucyBhbmQgbGVhdmUgdGhlCisgKiBub24tb3B0aW9uIGFyZ3VtZW50cyBpbiBhcmd2W10uIHVzYWdlc3RyIHN0cmluZ3Mgc2hvdWxkIGJlIG1hcmtlZAorICogZm9yIHRyYW5zbGF0aW9uIHdpdGggTl8oKS4KKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgbGVmdCBpbiBhcmd2W10uCisgKi8KK2V4dGVybiBpbnQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdLCBpbnQgZmxhZ3MpOworCitleHRlcm4gTk9SRVRVUk4gdm9pZCB1c2FnZV93aXRoX29wdGlvbnMoY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKTsKKworZXh0ZXJuIE5PUkVUVVJOIHZvaWQgdXNhZ2VfbXNnX29wdChjb25zdCBjaGFyICptc2csCisJCQkJICAgY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZXN0ciwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKTsKKworZXh0ZXJuIGludCBvcHRidWcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICpyZWFzb24pOworZXh0ZXJuIGludCBvcHRlcnJvcihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKnJlYXNvbiwgaW50IGZsYWdzKTsKKy8qLS0tLS0gaW5jcmVtZW50YWwgYWR2YW5jZWQgQVBJcyAtLS0tLSovCisKK2VudW0geworCVBBUlNFX09QVF9IRUxQID0gLTEsCisJUEFSU0VfT1BUX0RPTkUsCisJUEFSU0VfT1BUX05PTl9PUFRJT04sCisJUEFSU0VfT1BUX1VOS05PV04KK307CisKKy8qCisgKiBJdCdzIG9rYXkgZm9yIHRoZSBjYWxsZXIgdG8gY29uc3VtZSBhcmd2L2FyZ2MgaW4gdGhlIHVzdWFsIHdheS4KKyAqIE90aGVyIGZpZWxkcyBvZiB0aGF0IHN0cnVjdHVyZSBhcmUgcHJpdmF0ZSB0byBwYXJzZS1vcHRpb25zIGFuZCBzaG91bGQgbm90CisgKiBiZSBtb2RpZmllZCBpbiBhbnkgd2F5LgorICovCitzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90IHsKKwljb25zdCBjaGFyICoqYXJndjsKKwljb25zdCBjaGFyICoqb3V0OworCWludCBhcmdjLCBjcGlkeDsKKwljb25zdCBjaGFyICpvcHQ7CisJaW50IGZsYWdzOworCWNvbnN0IGNoYXIgKnByZWZpeDsKK307CisKK2V4dGVybiB2b2lkIHBhcnNlX29wdGlvbnNfc3RhcnQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCWludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsIGludCBmbGFncyk7CisKK2V4dGVybiBpbnQgcGFyc2Vfb3B0aW9uc19zdGVwKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCisJCQkgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSk7CisKK2V4dGVybiBpbnQgcGFyc2Vfb3B0aW9uc19lbmQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4KTsKKworZXh0ZXJuIGludCBwYXJzZV9vcHRpb25zX2NvbmNhdChzdHJ1Y3Qgb3B0aW9uICpkc3QsIHNpemVfdCwgc3RydWN0IG9wdGlvbiAqc3JjKTsKKworLyotLS0tLSBzb21lIG9mdGVuIHVzZWQgb3B0aW9ucyAtLS0tLSovCitleHRlcm4gaW50IHBhcnNlX29wdF9hYmJyZXZfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IHBhcnNlX29wdF9hcHByb3hpZGF0ZV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgcGFyc2Vfb3B0X2NvbG9yX2ZsYWdfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IHBhcnNlX29wdF92ZXJib3NpdHlfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IHBhcnNlX29wdF93aXRoX2NvbW1pdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgcGFyc2Vfb3B0X3RlcnRpYXJ5KGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBwYXJzZV9vcHRfc3RyaW5nX2xpc3QoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IHBhcnNlX29wdF9ub29wX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworCisjZGVmaW5lIE9QVF9fVkVSQk9TRSh2YXIsIGgpICBPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgKHZhciksIChoKSkKKyNkZWZpbmUgT1BUX19RVUlFVCh2YXIsIGgpICAgIE9QVF9CT09MRUFOKCdxJywgInF1aWV0IiwgICAodmFyKSwgKGgpKQorI2RlZmluZSBPUFRfX1ZFUkJPU0lUWSh2YXIpIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgJ3YnLCAidmVyYm9zZSIsICh2YXIpLCBOVUxMLCBOXygiYmUgbW9yZSB2ZXJib3NlIiksIFwKKwkgIFBBUlNFX09QVF9OT0FSRywgJnBhcnNlX29wdF92ZXJib3NpdHlfY2IsIDAgfSwgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAncScsICJxdWlldCIsICh2YXIpLCBOVUxMLCBOXygiYmUgbW9yZSBxdWlldCIpLCBcCisJICBQQVJTRV9PUFRfTk9BUkcsICZwYXJzZV9vcHRfdmVyYm9zaXR5X2NiLCAwIH0KKyNkZWZpbmUgT1BUX19EUllfUlVOKHZhciwgaCkgIE9QVF9CT09MRUFOKCduJywgImRyeS1ydW4iLCAodmFyKSwgKGgpKQorI2RlZmluZSBPUFRfX0ZPUkNFKHZhciwgaCkgICAgT1BUX0JPT0xFQU4oJ2YnLCAiZm9yY2UiLCAgICh2YXIpLCAoaCkpCisjZGVmaW5lIE9QVF9fQUJCUkVWKHZhcikgIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImFiYnJldiIsICh2YXIpLCBOXygibiIpLAlcCisJICBOXygidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiKSwJXAorCSAgUEFSU0VfT1BUX09QVEFSRywgJnBhcnNlX29wdF9hYmJyZXZfY2IsIDAgfQorI2RlZmluZSBPUFRfX0NPTE9SKHZhciwgaCkgXAorCU9QVF9DT0xPUl9GTEFHKDAsICJjb2xvciIsICh2YXIpLCAoaCkpCisjZGVmaW5lIE9QVF9DT0xVTU4ocywgbCwgdiwgaCkgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCBOXygic3R5bGUiKSwgKGgpLCBQQVJTRV9PUFRfT1BUQVJHLCBwYXJzZW9wdF9jb2x1bW5fY2FsbGJhY2sgfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhdGNoLWRlbHRhLmMgYi9wYXRjaC1kZWx0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTBhNWUKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaC1kZWx0YS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBwYXRjaC1kZWx0YS5jOgorICogcmVjcmVhdGUgYSBidWZmZXIgZnJvbSBhIHNvdXJjZSBhbmQgdGhlIGRlbHRhIHByb2R1Y2VkIGJ5IGRpZmYtZGVsdGEuYworICoKKyAqIChDKSAyMDA1IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKwordm9pZCAqcGF0Y2hfZGVsdGEoY29uc3Qgdm9pZCAqc3JjX2J1ZiwgdW5zaWduZWQgbG9uZyBzcmNfc2l6ZSwKKwkJICBjb25zdCB2b2lkICpkZWx0YV9idWYsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSwKKwkJICB1bnNpZ25lZCBsb25nICpkc3Rfc2l6ZSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCAqdG9wOworCXVuc2lnbmVkIGNoYXIgKmRzdF9idWYsICpvdXQsIGNtZDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlpZiAoZGVsdGFfc2l6ZSA8IERFTFRBX1NJWkVfTUlOKQorCQlyZXR1cm4gTlVMTDsKKworCWRhdGEgPSBkZWx0YV9idWY7CisJdG9wID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgZGVsdGFfYnVmICsgZGVsdGFfc2l6ZTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgb3JpZyBmaWxlIHNpemUgbWF0Y2hlcyB3aGF0IHdlIGV4cGVjdCAqLworCXNpemUgPSBnZXRfZGVsdGFfaGRyX3NpemUoJmRhdGEsIHRvcCk7CisJaWYgKHNpemUgIT0gc3JjX3NpemUpCisJCXJldHVybiBOVUxMOworCisJLyogbm93IHRoZSByZXN1bHQgc2l6ZSAqLworCXNpemUgPSBnZXRfZGVsdGFfaGRyX3NpemUoJmRhdGEsIHRvcCk7CisJZHN0X2J1ZiA9IHhtYWxsb2N6KHNpemUpOworCisJb3V0ID0gZHN0X2J1ZjsKKwl3aGlsZSAoZGF0YSA8IHRvcCkgeworCQljbWQgPSAqZGF0YSsrOworCQlpZiAoY21kICYgMHg4MCkgeworCQkJdW5zaWduZWQgbG9uZyBjcF9vZmYgPSAwLCBjcF9zaXplID0gMDsKKwkJCWlmIChjbWQgJiAweDAxKSBjcF9vZmYgPSAqZGF0YSsrOworCQkJaWYgKGNtZCAmIDB4MDIpIGNwX29mZiB8PSAoKmRhdGErKyA8PCA4KTsKKwkJCWlmIChjbWQgJiAweDA0KSBjcF9vZmYgfD0gKCpkYXRhKysgPDwgMTYpOworCQkJaWYgKGNtZCAmIDB4MDgpIGNwX29mZiB8PSAoKHVuc2lnbmVkKSAqZGF0YSsrIDw8IDI0KTsKKwkJCWlmIChjbWQgJiAweDEwKSBjcF9zaXplID0gKmRhdGErKzsKKwkJCWlmIChjbWQgJiAweDIwKSBjcF9zaXplIHw9ICgqZGF0YSsrIDw8IDgpOworCQkJaWYgKGNtZCAmIDB4NDApIGNwX3NpemUgfD0gKCpkYXRhKysgPDwgMTYpOworCQkJaWYgKGNwX3NpemUgPT0gMCkgY3Bfc2l6ZSA9IDB4MTAwMDA7CisJCQlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhjcF9vZmYsIGNwX3NpemUpIHx8CisJCQkgICAgY3Bfb2ZmICsgY3Bfc2l6ZSA+IHNyY19zaXplIHx8CisJCQkgICAgY3Bfc2l6ZSA+IHNpemUpCisJCQkJYnJlYWs7CisJCQltZW1jcHkob3V0LCAoY2hhciAqKSBzcmNfYnVmICsgY3Bfb2ZmLCBjcF9zaXplKTsKKwkJCW91dCArPSBjcF9zaXplOworCQkJc2l6ZSAtPSBjcF9zaXplOworCQl9IGVsc2UgaWYgKGNtZCkgeworCQkJaWYgKGNtZCA+IHNpemUpCisJCQkJYnJlYWs7CisJCQltZW1jcHkob3V0LCBkYXRhLCBjbWQpOworCQkJb3V0ICs9IGNtZDsKKwkJCWRhdGEgKz0gY21kOworCQkJc2l6ZSAtPSBjbWQ7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogY21kID09IDAgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBlbmNvZGluZworCQkJICogZXh0ZW5zaW9ucy4gSW4gdGhlIG1lYW4gdGltZSB3ZSBtdXN0IGZhaWwgd2hlbgorCQkJICogZW5jb3VudGVyaW5nIHRoZW0gKG1pZ2h0IGJlIGRhdGEgY29ycnVwdGlvbikuCisJCQkgKi8KKwkJCWVycm9yKCJ1bmV4cGVjdGVkIGRlbHRhIG9wY29kZSAwIik7CisJCQlnb3RvIGJhZDsKKwkJfQorCX0KKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChkYXRhICE9IHRvcCB8fCBzaXplICE9IDApIHsKKwkJZXJyb3IoImRlbHRhIHJlcGxheSBoYXMgZ29uZSB3aWxkIik7CisJCWJhZDoKKwkJZnJlZShkc3RfYnVmKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJKmRzdF9zaXplID0gb3V0IC0gZHN0X2J1ZjsKKwlyZXR1cm4gZHN0X2J1ZjsKK30KZGlmZiAtLWdpdCBhL3BhdGNoLWlkcy5jIGIvcGF0Y2gtaWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4YTI4ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoLWlkcy5jCkBAIC0wLDAgKzEsMTA4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKyNpbmNsdWRlICJwYXRjaC1pZHMuaCIKKworc3RhdGljIGludCBjb21taXRfcGF0Y2hfaWQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICAgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpZiAoY29tbWl0LT5wYXJlbnRzKQorCQlkaWZmX3RyZWVfc2hhMShjb21taXQtPnBhcmVudHMtPml0ZW0tPm9iamVjdC5zaGExLAorCQkgICAgICAgICAgICAgICBjb21taXQtPm9iamVjdC5zaGExLCAiIiwgb3B0aW9ucyk7CisJZWxzZQorCQlkaWZmX3Jvb3RfdHJlZV9zaGExKGNvbW1pdC0+b2JqZWN0LnNoYTEsICIiLCBvcHRpb25zKTsKKwlkaWZmY29yZV9zdGQob3B0aW9ucyk7CisJcmV0dXJuIGRpZmZfZmx1c2hfcGF0Y2hfaWQob3B0aW9ucywgc2hhMSk7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpwYXRjaF9pZF9hY2Nlc3Moc2l6ZV90IGluZGV4LCB2b2lkICp0YWJsZSkKK3sKKwlzdHJ1Y3QgcGF0Y2hfaWQgKippZF90YWJsZSA9IHRhYmxlOworCXJldHVybiBpZF90YWJsZVtpbmRleF0tPnBhdGNoX2lkOworfQorCitzdGF0aWMgaW50IHBhdGNoX3BvcyhzdHJ1Y3QgcGF0Y2hfaWQgKip0YWJsZSwgaW50IG5yLCBjb25zdCB1bnNpZ25lZCBjaGFyICppZCkKK3sKKwlyZXR1cm4gc2hhMV9wb3MoaWQsIHRhYmxlLCBuciwgcGF0Y2hfaWRfYWNjZXNzKTsKK30KKworI2RlZmluZSBCVUNLRVRfU0laRSAxOTAgLyogMTkwICogMjEgPSAzOTkwLCB3aXRoIHNsb3AgY2xvc2UgZW5vdWdoIHRvIDRLICovCitzdHJ1Y3QgcGF0Y2hfaWRfYnVja2V0IHsKKwlzdHJ1Y3QgcGF0Y2hfaWRfYnVja2V0ICpuZXh0OworCWludCBucjsKKwlzdHJ1Y3QgcGF0Y2hfaWQgYnVja2V0W0JVQ0tFVF9TSVpFXTsKK307CisKK2ludCBpbml0X3BhdGNoX2lkcyhzdHJ1Y3QgcGF0Y2hfaWRzICppZHMpCit7CisJbWVtc2V0KGlkcywgMCwgc2l6ZW9mKCppZHMpKTsKKwlkaWZmX3NldHVwKCZpZHMtPmRpZmZvcHRzKTsKKwlESUZGX09QVF9TRVQoJmlkcy0+ZGlmZm9wdHMsIFJFQ1VSU0lWRSk7CisJZGlmZl9zZXR1cF9kb25lKCZpZHMtPmRpZmZvcHRzKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGZyZWVfcGF0Y2hfaWRzKHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwlzdHJ1Y3QgcGF0Y2hfaWRfYnVja2V0ICpuZXh0LCAqcGF0Y2hlczsKKworCWZyZWUoaWRzLT50YWJsZSk7CisJZm9yIChwYXRjaGVzID0gaWRzLT5wYXRjaGVzOyBwYXRjaGVzOyBwYXRjaGVzID0gbmV4dCkgeworCQluZXh0ID0gcGF0Y2hlcy0+bmV4dDsKKwkJZnJlZShwYXRjaGVzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGF0Y2hfaWQgKmFkZF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSAgIHN0cnVjdCBwYXRjaF9pZHMgKmlkcywKKwkJCQkgICBpbnQgbm9fYWRkKQoreworCXN0cnVjdCBwYXRjaF9pZF9idWNrZXQgKmJ1Y2tldDsKKwlzdHJ1Y3QgcGF0Y2hfaWQgKmVudDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBwb3M7CisKKwlpZiAoY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgJmlkcy0+ZGlmZm9wdHMsIHNoYTEpKQorCQlyZXR1cm4gTlVMTDsKKwlwb3MgPSBwYXRjaF9wb3MoaWRzLT50YWJsZSwgaWRzLT5uciwgc2hhMSk7CisJaWYgKDAgPD0gcG9zKQorCQlyZXR1cm4gaWRzLT50YWJsZVtwb3NdOworCWlmIChub19hZGQpCisJCXJldHVybiBOVUxMOworCisJcG9zID0gLTEgLSBwb3M7CisKKwlidWNrZXQgPSBpZHMtPnBhdGNoZXM7CisJaWYgKCFidWNrZXQgfHwgKEJVQ0tFVF9TSVpFIDw9IGJ1Y2tldC0+bnIpKSB7CisJCWJ1Y2tldCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpidWNrZXQpKTsKKwkJYnVja2V0LT5uZXh0ID0gaWRzLT5wYXRjaGVzOworCQlpZHMtPnBhdGNoZXMgPSBidWNrZXQ7CisJfQorCWVudCA9ICZidWNrZXQtPmJ1Y2tldFtidWNrZXQtPm5yKytdOworCWhhc2hjcHkoZW50LT5wYXRjaF9pZCwgc2hhMSk7CisKKwlpZiAoaWRzLT5hbGxvYyA8PSBpZHMtPm5yKSB7CisJCWlkcy0+YWxsb2MgPSBhbGxvY19ucihpZHMtPm5yKTsKKwkJaWRzLT50YWJsZSA9IHhyZWFsbG9jKGlkcy0+dGFibGUsIHNpemVvZihlbnQpICogaWRzLT5hbGxvYyk7CisJfQorCWlmIChwb3MgPCBpZHMtPm5yKQorCQltZW1tb3ZlKGlkcy0+dGFibGUgKyBwb3MgKyAxLCBpZHMtPnRhYmxlICsgcG9zLAorCQkJc2l6ZW9mKGVudCkgKiAoaWRzLT5uciAtIHBvcykpOworCWlkcy0+bnIrKzsKKwlpZHMtPnRhYmxlW3Bvc10gPSBlbnQ7CisJcmV0dXJuIGlkcy0+dGFibGVbcG9zXTsKK30KKworc3RydWN0IHBhdGNoX2lkICpoYXNfY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgICAgIHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwlyZXR1cm4gYWRkX2NvbW1pdChjb21taXQsIGlkcywgMSk7Cit9CisKK3N0cnVjdCBwYXRjaF9pZCAqYWRkX2NvbW1pdF9wYXRjaF9pZChzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJICAgICBzdHJ1Y3QgcGF0Y2hfaWRzICppZHMpCit7CisJcmV0dXJuIGFkZF9jb21taXQoY29tbWl0LCBpZHMsIDApOworfQpkaWZmIC0tZ2l0IGEvcGF0Y2gtaWRzLmggYi9wYXRjaC1pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGM3Y2ExCi0tLSAvZGV2L251bGwKKysrIGIvcGF0Y2gtaWRzLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBQQVRDSF9JRFNfSAorI2RlZmluZSBQQVRDSF9JRFNfSAorCitzdHJ1Y3QgcGF0Y2hfaWQgeworCXVuc2lnbmVkIGNoYXIgcGF0Y2hfaWRbMjBdOworCWNoYXIgc2VlbjsKK307CisKK3N0cnVjdCBwYXRjaF9pZHMgeworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZm9wdHM7CisJaW50IG5yLCBhbGxvYzsKKwlzdHJ1Y3QgcGF0Y2hfaWQgKip0YWJsZTsKKwlzdHJ1Y3QgcGF0Y2hfaWRfYnVja2V0ICpwYXRjaGVzOworfTsKKworaW50IGluaXRfcGF0Y2hfaWRzKHN0cnVjdCBwYXRjaF9pZHMgKik7CitpbnQgZnJlZV9wYXRjaF9pZHMoc3RydWN0IHBhdGNoX2lkcyAqKTsKK3N0cnVjdCBwYXRjaF9pZCAqYWRkX2NvbW1pdF9wYXRjaF9pZChzdHJ1Y3QgY29tbWl0ICosIHN0cnVjdCBwYXRjaF9pZHMgKik7CitzdHJ1Y3QgcGF0Y2hfaWQgKmhhc19jb21taXRfcGF0Y2hfaWQoc3RydWN0IGNvbW1pdCAqLCBzdHJ1Y3QgcGF0Y2hfaWRzICopOworCisjZW5kaWYgLyogUEFUQ0hfSURTX0ggKi8KZGlmZiAtLWdpdCBhL3BhdGguYyBiL3BhdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmJkZjdkCi0tLSAvZGV2L251bGwKKysrIGIvcGF0aC5jCkBAIC0wLDAgKzEsNzAyIEBACisvKgorICogSSdtIHRpcmVkIG9mIGRvaW5nICJ2c25wcmludGYoKSIgZXRjIGp1c3QgdG8gb3BlbiBhCisgKiBmaWxlLCBzbyBoZXJlJ3MgYSAicmV0dXJuIHN0YXRpYyBidWZmZXIgd2l0aCBwcmludGYiCisgKiBpbnRlcmZhY2UgZm9yIHBhdGhzLgorICoKKyAqIEl0J3Mgb2J2aW91c2x5IG5vdCB0aHJlYWQtc2FmZS4gU3VlIG1lLiBCdXQgaXQncyBxdWl0ZQorICogdXNlZnVsIGZvciBkb2luZyB0aGluZ3MgbGlrZQorICoKKyAqICAgZiA9IG9wZW4obWtwYXRoKCIlcy8lcy5naXQiLCBiYXNlLCBuYW1lKSwgT19SRE9OTFkpOworICoKKyAqIHdoaWNoIGlzIHdoYXQgaXQncyBkZXNpZ25lZCBmb3IuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdGF0aWMgY2hhciBiYWRfcGF0aFtdID0gIi9iYWQtcGF0aC8iOworCitzdGF0aWMgY2hhciAqZ2V0X3BhdGhuYW1lKHZvaWQpCit7CisJc3RhdGljIGNoYXIgcGF0aG5hbWVfYXJyYXlbNF1bUEFUSF9NQVhdOworCXN0YXRpYyBpbnQgaW5kZXg7CisJcmV0dXJuIHBhdGhuYW1lX2FycmF5WzMgJiArK2luZGV4XTsKK30KKworc3RhdGljIGNoYXIgKmNsZWFudXBfcGF0aChjaGFyICpwYXRoKQoreworCS8qIENsZWFuIGl0IHVwICovCisJaWYgKCFtZW1jbXAocGF0aCwgIi4vIiwgMikpIHsKKwkJcGF0aCArPSAyOworCQl3aGlsZSAoKnBhdGggPT0gJy8nKQorCQkJcGF0aCsrOworCX0KKwlyZXR1cm4gcGF0aDsKK30KKworY2hhciAqbWtzbnBhdGgoY2hhciAqYnVmLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXVuc2lnbmVkIGxlbjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbGVuID0gdnNucHJpbnRmKGJ1ZiwgbiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJaWYgKGxlbiA+PSBuKSB7CisJCXN0cmxjcHkoYnVmLCBiYWRfcGF0aCwgbik7CisJCXJldHVybiBidWY7CisJfQorCXJldHVybiBjbGVhbnVwX3BhdGgoYnVmKTsKK30KKworc3RhdGljIGNoYXIgKnZzbnBhdGgoY2hhciAqYnVmLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCit7CisJY29uc3QgY2hhciAqZ2l0X2RpciA9IGdldF9naXRfZGlyKCk7CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IHN0cmxlbihnaXRfZGlyKTsKKwlpZiAobiA8IGxlbiArIDEpCisJCWdvdG8gYmFkOworCW1lbWNweShidWYsIGdpdF9kaXIsIGxlbik7CisJaWYgKGxlbiAmJiAhaXNfZGlyX3NlcChnaXRfZGlyW2xlbi0xXSkpCisJCWJ1ZltsZW4rK10gPSAnLyc7CisJbGVuICs9IHZzbnByaW50ZihidWYgKyBsZW4sIG4gLSBsZW4sIGZtdCwgYXJncyk7CisJaWYgKGxlbiA+PSBuKQorCQlnb3RvIGJhZDsKKwlyZXR1cm4gY2xlYW51cF9wYXRoKGJ1Zik7CitiYWQ6CisJc3RybGNweShidWYsIGJhZF9wYXRoLCBuKTsKKwlyZXR1cm4gYnVmOworfQorCitjaGFyICpnaXRfc25wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWNoYXIgKnJldDsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlyZXQgPSB2c25wYXRoKGJ1ZiwgbiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHJldDsKK30KKworY2hhciAqZ2l0X3BhdGhkdXAoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJY2hhciBwYXRoW1BBVEhfTUFYXSwgKnJldDsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlyZXQgPSB2c25wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHhzdHJkdXAocmV0KTsKK30KKworY2hhciAqbWtwYXRoZHVwKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWNoYXIgKnBhdGg7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZzYiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcGF0aCA9IHhzdHJkdXAoY2xlYW51cF9wYXRoKHNiLmJ1ZikpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcGF0aDsKK30KKworY2hhciAqbWtwYXRoKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwl1bnNpZ25lZCBsZW47CisJY2hhciAqcGF0aG5hbWUgPSBnZXRfcGF0aG5hbWUoKTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbGVuID0gdnNucHJpbnRmKHBhdGhuYW1lLCBQQVRIX01BWCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJaWYgKGxlbiA+PSBQQVRIX01BWCkKKwkJcmV0dXJuIGJhZF9wYXRoOworCXJldHVybiBjbGVhbnVwX3BhdGgocGF0aG5hbWUpOworfQorCitjaGFyICpnaXRfcGF0aChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwljaGFyICpwYXRobmFtZSA9IGdldF9wYXRobmFtZSgpOworCXZhX2xpc3QgYXJnczsKKwljaGFyICpyZXQ7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXJldCA9IHZzbnBhdGgocGF0aG5hbWUsIFBBVEhfTUFYLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGhvbWVfY29uZmlnX3BhdGhzKGNoYXIgKipnbG9iYWwsIGNoYXIgKip4ZGcsIGNoYXIgKmZpbGUpCit7CisJY2hhciAqeGRnX2hvbWUgPSBnZXRlbnYoIlhER19DT05GSUdfSE9NRSIpOworCWNoYXIgKmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKworCWlmICghaG9tZSkgeworCQlpZiAoZ2xvYmFsKQorCQkJKmdsb2JhbCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKCF4ZGdfaG9tZSkgeworCQkJdG9fZnJlZSA9IG1rcGF0aGR1cCgiJXMvLmNvbmZpZyIsIGhvbWUpOworCQkJeGRnX2hvbWUgPSB0b19mcmVlOworCQl9CisJCWlmIChnbG9iYWwpCisJCQkqZ2xvYmFsID0gbWtwYXRoZHVwKCIlcy8uZ2l0Y29uZmlnIiwgaG9tZSk7CisJfQorCisJaWYgKCF4ZGdfaG9tZSkKKwkJKnhkZyA9IE5VTEw7CisJZWxzZQorCQkqeGRnID0gbWtwYXRoZHVwKCIlcy9naXQvJXMiLCB4ZGdfaG9tZSwgZmlsZSk7CisKKwlmcmVlKHRvX2ZyZWUpOworfQorCitjaGFyICpnaXRfcGF0aF9zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJY2hhciAqcGF0aG5hbWUgPSBnZXRfcGF0aG5hbWUoKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmdpdF9kaXI7CisJdmFfbGlzdCBhcmdzOworCXVuc2lnbmVkIGxlbjsKKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAobGVuID4gUEFUSF9NQVgtMTAwKQorCQlyZXR1cm4gYmFkX3BhdGg7CisKKwlzdHJidWZfYWRkc3RyKCZidWYsIHBhdGgpOworCWlmIChsZW4gJiYgcGF0aFtsZW4tMV0gIT0gJy8nKQorCQlzdHJidWZfYWRkY2goJmJ1ZiwgJy8nKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsICIuZ2l0Iik7CisKKwlnaXRfZGlyID0gcmVhZF9naXRmaWxlKGJ1Zi5idWYpOworCWlmIChnaXRfZGlyKSB7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBnaXRfZGlyKTsKKwl9CisJc3RyYnVmX2FkZGNoKCZidWYsICcvJyk7CisKKwlpZiAoYnVmLmxlbiA+PSBQQVRIX01BWCkKKwkJcmV0dXJuIGJhZF9wYXRoOworCW1lbWNweShwYXRobmFtZSwgYnVmLmJ1ZiwgYnVmLmxlbiArIDEpOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJbGVuID0gc3RybGVuKHBhdGhuYW1lKTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbGVuICs9IHZzbnByaW50ZihwYXRobmFtZSArIGxlbiwgUEFUSF9NQVggLSBsZW4sIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWlmIChsZW4gPj0gUEFUSF9NQVgpCisJCXJldHVybiBiYWRfcGF0aDsKKwlyZXR1cm4gY2xlYW51cF9wYXRoKHBhdGhuYW1lKTsKK30KKworaW50IHZhbGlkYXRlX2hlYWRyZWYoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpidWYsIGJ1ZmZlclsyNTZdOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IGZkOworCXNzaXplX3QgbGVuOworCisJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBNYWtlIHN1cmUgaXQgaXMgYSAicmVmcy8uLiIgc3ltbGluayAqLworCWlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCWxlbiA9IHJlYWRsaW5rKHBhdGgsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciktMSk7CisJCWlmIChsZW4gPj0gNSAmJiAhbWVtY21wKCJyZWZzLyIsIGJ1ZmZlciwgNSkpCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogQW55dGhpbmcgZWxzZSwganVzdCBvcGVuIGl0IGFuZCB0cnkgdG8gc2VlIGlmIGl0IGlzIGEgc3ltYm9saWMgcmVmLgorCSAqLworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCWxlbiA9IHJlYWRfaW5fZnVsbChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKKwljbG9zZShmZCk7CisKKwkvKgorCSAqIElzIGl0IGEgc3ltYm9saWMgcmVmPworCSAqLworCWlmIChsZW4gPCA0KQorCQlyZXR1cm4gLTE7CisJaWYgKCFtZW1jbXAoInJlZjoiLCBidWZmZXIsIDQpKSB7CisJCWJ1ZiA9IGJ1ZmZlciArIDQ7CisJCWxlbiAtPSA0OworCQl3aGlsZSAobGVuICYmIGlzc3BhY2UoKmJ1ZikpCisJCQlidWYrKywgbGVuLS07CisJCWlmIChsZW4gPj0gNSAmJiAhbWVtY21wKCJyZWZzLyIsIGJ1ZiwgNSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElzIHRoaXMgYSBkZXRhY2hlZCBIRUFEPworCSAqLworCWlmICghZ2V0X3NoYTFfaGV4KGJ1ZmZlciwgc2hhMSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgc3RydWN0IHBhc3N3ZCAqZ2V0cHdfc3RyKGNvbnN0IGNoYXIgKnVzZXJuYW1lLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBwYXNzd2QgKnB3OworCWNoYXIgKnVzZXJuYW1lX3ogPSB4bWFsbG9jKGxlbiArIDEpOworCW1lbWNweSh1c2VybmFtZV96LCB1c2VybmFtZSwgbGVuKTsKKwl1c2VybmFtZV96W2xlbl0gPSAnXDAnOworCXB3ID0gZ2V0cHduYW0odXNlcm5hbWVfeik7CisJZnJlZSh1c2VybmFtZV96KTsKKwlyZXR1cm4gcHc7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgd2l0aCB+IGFuZCB+dXNlciBleHBhbmRlZCB2aWEgZ2V0cHcqLiAgSWYgYnVmICE9IE5VTEwsCisgKiB0aGVuIGl0IGlzIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZy4gUmV0dXJucyBOVUxMIG9uIGdldHB3IGZhaWx1cmUgb3IKKyAqIGlmIHBhdGggaXMgTlVMTC4KKyAqLworY2hhciAqZXhwYW5kX3VzZXJfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgdXNlcl9wYXRoID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZmlyc3Rfc2xhc2ggPSBzdHJjaHJudWwocGF0aCwgJy8nKTsKKwljb25zdCBjaGFyICp0b19jb3B5ID0gcGF0aDsKKworCWlmIChwYXRoID09IE5VTEwpCisJCWdvdG8gcmV0dXJuX251bGw7CisJaWYgKHBhdGhbMF0gPT0gJ34nKSB7CisJCWNvbnN0IGNoYXIgKnVzZXJuYW1lID0gcGF0aCArIDE7CisJCXNpemVfdCB1c2VybmFtZV9sZW4gPSBmaXJzdF9zbGFzaCAtIHVzZXJuYW1lOworCQlpZiAodXNlcm5hbWVfbGVuID09IDApIHsKKwkJCWNvbnN0IGNoYXIgKmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKwkJCWlmICghaG9tZSkKKwkJCQlnb3RvIHJldHVybl9udWxsOworCQkJc3RyYnVmX2FkZCgmdXNlcl9wYXRoLCBob21lLCBzdHJsZW4oaG9tZSkpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHBhc3N3ZCAqcHcgPSBnZXRwd19zdHIodXNlcm5hbWUsIHVzZXJuYW1lX2xlbik7CisJCQlpZiAoIXB3KQorCQkJCWdvdG8gcmV0dXJuX251bGw7CisJCQlzdHJidWZfYWRkKCZ1c2VyX3BhdGgsIHB3LT5wd19kaXIsIHN0cmxlbihwdy0+cHdfZGlyKSk7CisJCX0KKwkJdG9fY29weSA9IGZpcnN0X3NsYXNoOworCX0KKwlzdHJidWZfYWRkKCZ1c2VyX3BhdGgsIHRvX2NvcHksIHN0cmxlbih0b19jb3B5KSk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnVzZXJfcGF0aCwgTlVMTCk7CityZXR1cm5fbnVsbDoKKwlzdHJidWZfcmVsZWFzZSgmdXNlcl9wYXRoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEZpcnN0LCBvbmUgZGlyZWN0b3J5IHRvIHRyeSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtLgorICoKKyAqICgwKSBJZiAic3RyaWN0IiBpcyBnaXZlbiwgdGhlIHBhdGggaXMgdXNlZCBhcyBnaXZlbiBhbmQgbm8gRFdJTSBpcworICogICAgIGRvbmUuIE90aGVyd2lzZToKKyAqICgxKSAifi9wYXRoIiB0byBtZWFuIHBhdGggdW5kZXIgdGhlIHJ1bm5pbmcgdXNlcidzIGhvbWUgZGlyZWN0b3J5OworICogKDIpICJ+dXNlci9wYXRoIiB0byBtZWFuIHBhdGggdW5kZXIgbmFtZWQgdXNlcidzIGhvbWUgZGlyZWN0b3J5OworICogKDMpICJyZWxhdGl2ZS9wYXRoIiB0byBtZWFuIGN3ZCByZWxhdGl2ZSBkaXJlY3Rvcnk7IG9yCisgKiAoNCkgIi9hYnNvbHV0ZS9wYXRoIiB0byBtZWFuIGFic29sdXRlIGRpcmVjdG9yeS4KKyAqCisgKiBVbmxlc3MgInN0cmljdCIgaXMgZ2l2ZW4sIHdlIHRyeSBhY2Nlc3MoKSBmb3IgZXhpc3RlbmNlIG9mICIlcy5naXQvLmdpdCIsCisgKiAiJXMvLmdpdCIsICIlcy5naXQiLCAiJXMiIGluIHRoaXMgb3JkZXIuICBUaGUgZmlyc3Qgb25lIHRoYXQgZXhpc3RzIGlzCisgKiB3aGF0IHdlIHRyeS4KKyAqCisgKiBTZWNvbmQsIHdlIHRyeSBjaGRpcigpIHRvIHRoYXQuICBVcG9uIGZhaWx1cmUsIHdlIHJldHVybiBOVUxMLgorICoKKyAqIFRoZW4sIHdlIHRyeSBpZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgYSB2YWxpZCBnaXQgcmVwb3NpdG9yeS4KKyAqIFVwb24gZmFpbHVyZSwgd2UgcmV0dXJuIE5VTEwuCisgKgorICogSWYgYWxsIGdvZXMgd2VsbCwgd2UgcmV0dXJuIHRoZSBkaXJlY3Rvcnkgd2UgdXNlZCB0byBjaGRpcigpIChidXQKKyAqIGJlZm9yZSB+dXNlciBpcyBleHBhbmRlZCksIGF2b2lkaW5nIGdldGN3ZCgpIHJlc29sdmluZyBzeW1ib2xpYworICogbGlua3MuICBVc2VyIHJlbGF0aXZlIHBhdGhzIGFyZSBhbHNvIHJldHVybmVkIGFzIHRoZXkgYXJlIGdpdmVuLAorICogZXhjZXB0IERXSU0gc3VmZml4aW5nLgorICovCitjb25zdCBjaGFyICplbnRlcl9yZXBvKGNvbnN0IGNoYXIgKnBhdGgsIGludCBzdHJpY3QpCit7CisJc3RhdGljIGNoYXIgdXNlZF9wYXRoW1BBVEhfTUFYXTsKKwlzdGF0aWMgY2hhciB2YWxpZGF0ZWRfcGF0aFtQQVRIX01BWF07CisKKwlpZiAoIXBhdGgpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFzdHJpY3QpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKnN1ZmZpeFtdID0geworCQkJIi8uZ2l0IiwgIiIsICIuZ2l0Ly5naXQiLCAiLmdpdCIsIE5VTEwsCisJCX07CisJCWNvbnN0IGNoYXIgKmdpdGZpbGU7CisJCWludCBsZW4gPSBzdHJsZW4ocGF0aCk7CisJCWludCBpOworCQl3aGlsZSAoKDEgPCBsZW4pICYmIChwYXRoW2xlbi0xXSA9PSAnLycpKQorCQkJbGVuLS07CisKKwkJaWYgKFBBVEhfTUFYIDw9IGxlbikKKwkJCXJldHVybiBOVUxMOworCQlzdHJuY3B5KHVzZWRfcGF0aCwgcGF0aCwgbGVuKTsgdXNlZF9wYXRoW2xlbl0gPSAwIDsKKwkJc3RyY3B5KHZhbGlkYXRlZF9wYXRoLCB1c2VkX3BhdGgpOworCisJCWlmICh1c2VkX3BhdGhbMF0gPT0gJ34nKSB7CisJCQljaGFyICpuZXdwYXRoID0gZXhwYW5kX3VzZXJfcGF0aCh1c2VkX3BhdGgpOworCQkJaWYgKCFuZXdwYXRoIHx8IChQQVRIX01BWCAtIDEwIDwgc3RybGVuKG5ld3BhdGgpKSkgeworCQkJCWZyZWUobmV3cGF0aCk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQkvKgorCQkJICogQ29weSBiYWNrIGludG8gdGhlIHN0YXRpYyBidWZmZXIuIEEgcGl0eQorCQkJICogc2luY2UgbmV3cGF0aCB3YXMgbm90IGJvdW5kZWQsIGJ1dCBvdGhlcgorCQkJICogYnJhbmNoZXMgb2YgdGhlIGlmIGFyZSBsaW1pdGVkIGJ5IFBBVEhfTUFYCisJCQkgKiBhbnl3YXkuCisJCQkgKi8KKwkJCXN0cmNweSh1c2VkX3BhdGgsIG5ld3BhdGgpOyBmcmVlKG5ld3BhdGgpOworCQl9CisJCWVsc2UgaWYgKFBBVEhfTUFYIC0gMTAgPCBsZW4pCisJCQlyZXR1cm4gTlVMTDsKKwkJbGVuID0gc3RybGVuKHVzZWRfcGF0aCk7CisJCWZvciAoaSA9IDA7IHN1ZmZpeFtpXTsgaSsrKSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCXN0cmNweSh1c2VkX3BhdGggKyBsZW4sIHN1ZmZpeFtpXSk7CisJCQlpZiAoIXN0YXQodXNlZF9wYXRoLCAmc3QpICYmCisJCQkgICAgKFNfSVNSRUcoc3Quc3RfbW9kZSkgfHwKKwkJCSAgICAoU19JU0RJUihzdC5zdF9tb2RlKSAmJiBpc19naXRfZGlyZWN0b3J5KHVzZWRfcGF0aCkpKSkgeworCQkJCXN0cmNhdCh2YWxpZGF0ZWRfcGF0aCwgc3VmZml4W2ldKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIXN1ZmZpeFtpXSkKKwkJCXJldHVybiBOVUxMOworCQlnaXRmaWxlID0gcmVhZF9naXRmaWxlKHVzZWRfcGF0aCkgOworCQlpZiAoZ2l0ZmlsZSkKKwkJCXN0cmNweSh1c2VkX3BhdGgsIGdpdGZpbGUpOworCQlpZiAoY2hkaXIodXNlZF9wYXRoKSkKKwkJCXJldHVybiBOVUxMOworCQlwYXRoID0gdmFsaWRhdGVkX3BhdGg7CisJfQorCWVsc2UgaWYgKGNoZGlyKHBhdGgpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChhY2Nlc3MoIm9iamVjdHMiLCBYX09LKSA9PSAwICYmIGFjY2VzcygicmVmcyIsIFhfT0spID09IDAgJiYKKwkgICAgdmFsaWRhdGVfaGVhZHJlZigiSEVBRCIpID09IDApIHsKKwkJc2V0X2dpdF9kaXIoIi4iKTsKKwkJY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXQoKTsKKwkJcmV0dXJuIHBhdGg7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBzZXRfc2hhcmVkX3Blcm0oY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IHR3ZWFrLCBzaGFyZWQsIG9yaWdfbW9kZTsKKworCWlmICghc2hhcmVkX3JlcG9zaXRvcnkpIHsKKwkJaWYgKG1vZGUpCisJCQlyZXR1cm4gY2htb2QocGF0aCwgbW9kZSAmIH5TX0lGTVQpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFtb2RlKSB7CisJCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJbW9kZSA9IHN0LnN0X21vZGU7CisJCW9yaWdfbW9kZSA9IG1vZGU7CisJfSBlbHNlCisJCW9yaWdfbW9kZSA9IDA7CisJaWYgKHNoYXJlZF9yZXBvc2l0b3J5IDwgMCkKKwkJc2hhcmVkID0gLXNoYXJlZF9yZXBvc2l0b3J5OworCWVsc2UKKwkJc2hhcmVkID0gc2hhcmVkX3JlcG9zaXRvcnk7CisJdHdlYWsgPSBzaGFyZWQ7CisKKwlpZiAoIShtb2RlICYgU19JV1VTUikpCisJCXR3ZWFrICY9IH4wMjIyOworCWlmIChtb2RlICYgU19JWFVTUikKKwkJLyogQ29weSByZWFkIGJpdHMgdG8gZXhlY3V0ZSBiaXRzICovCisJCXR3ZWFrIHw9ICh0d2VhayAmIDA0NDQpID4+IDI7CisJaWYgKHNoYXJlZF9yZXBvc2l0b3J5IDwgMCkKKwkJbW9kZSA9IChtb2RlICYgfjA3NzcpIHwgdHdlYWs7CisJZWxzZQorCQltb2RlIHw9IHR3ZWFrOworCisJaWYgKFNfSVNESVIobW9kZSkpIHsKKwkJLyogQ29weSByZWFkIGJpdHMgdG8gZXhlY3V0ZSBiaXRzICovCisJCW1vZGUgfD0gKHNoYXJlZCAmIDA0NDQpID4+IDI7CisJCW1vZGUgfD0gRk9SQ0VfRElSX1NFVF9HSUQ7CisJfQorCisJaWYgKCgoc2hhcmVkX3JlcG9zaXRvcnkgPCAwCisJICAgICAgPyAob3JpZ19tb2RlICYgKEZPUkNFX0RJUl9TRVRfR0lEIHwgMDc3NykpCisJICAgICAgOiAob3JpZ19tb2RlICYgbW9kZSkpICE9IG1vZGUpICYmCisJICAgIGNobW9kKHBhdGgsIChtb2RlICYgflNfSUZNVCkpIDwgMCkKKwkJcmV0dXJuIC0yOworCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKGNvbnN0IGNoYXIgKmFicywgY29uc3QgY2hhciAqYmFzZSkKK3sKKwlzdGF0aWMgY2hhciBidWZbUEFUSF9NQVggKyAxXTsKKwlpbnQgaSA9IDAsIGogPSAwOworCisJaWYgKCFiYXNlIHx8ICFiYXNlWzBdKQorCQlyZXR1cm4gYWJzOworCXdoaWxlIChiYXNlW2ldKSB7CisJCWlmIChpc19kaXJfc2VwKGJhc2VbaV0pKSB7CisJCQlpZiAoIWlzX2Rpcl9zZXAoYWJzW2pdKSkKKwkJCQlyZXR1cm4gYWJzOworCQkJd2hpbGUgKGlzX2Rpcl9zZXAoYmFzZVtpXSkpCisJCQkJaSsrOworCQkJd2hpbGUgKGlzX2Rpcl9zZXAoYWJzW2pdKSkKKwkJCQlqKys7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChhYnNbal0gIT0gYmFzZVtpXSkgeworCQkJcmV0dXJuIGFiczsKKwkJfQorCQlpKys7CisJCWorKzsKKwl9CisJaWYgKAorCSAgICAvKiAiL2ZvbyIgaXMgYSBwcmVmaXggb2YgIi9mb28iICovCisJICAgIGFic1tqXSAmJgorCSAgICAvKiAiL2ZvbyIgaXMgbm90IGEgcHJlZml4IG9mICIvZm9vYmFyIiAqLworCSAgICAhaXNfZGlyX3NlcChiYXNlW2ktMV0pICYmICFpc19kaXJfc2VwKGFic1tqXSkKKwkgICApCisJCXJldHVybiBhYnM7CisJd2hpbGUgKGlzX2Rpcl9zZXAoYWJzW2pdKSkKKwkJaisrOworCWlmICghYWJzW2pdKQorCQlzdHJjcHkoYnVmLCAiLiIpOworCWVsc2UKKwkJc3RyY3B5KGJ1ZiwgYWJzICsgaik7CisJcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqIEl0IGlzIG9rYXkgaWYgZHN0ID09IHNyYywgYnV0IHRoZXkgc2hvdWxkIG5vdCBvdmVybGFwIG90aGVyd2lzZS4KKyAqCisgKiBQZXJmb3JtcyB0aGUgZm9sbG93aW5nIG5vcm1hbGl6YXRpb25zIG9uIHNyYywgc3RvcmluZyB0aGUgcmVzdWx0IGluIGRzdDoKKyAqIC0gRW5zdXJlcyB0aGF0IGNvbXBvbmVudHMgYXJlIHNlcGFyYXRlZCBieSAnLycgKFdpbmRvd3Mgb25seSkKKyAqIC0gU3F1YXNoZXMgc2VxdWVuY2VzIG9mICcvJy4KKyAqIC0gUmVtb3ZlcyAiLiIgY29tcG9uZW50cy4KKyAqIC0gUmVtb3ZlcyAiLi4iIGNvbXBvbmVudHMsIGFuZCB0aGUgY29tcG9uZW50cyB0aGUgcHJlY2VkZSB0aGVtLgorICogUmV0dXJucyBmYWlsdXJlIChub24temVybykgaWYgYSAiLi4iIGNvbXBvbmVudCBhcHBlYXJzIGFzIGZpcnN0IHBhdGgKKyAqIGNvbXBvbmVudCBhbnl0aW1lIGR1cmluZyB0aGUgbm9ybWFsaXphdGlvbi4gT3RoZXJ3aXNlLCByZXR1cm5zIHN1Y2Nlc3MgKDApLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHB1cmVseSB0ZXh0dWFsLiAgSXQgZG9lcyBub3QgZm9sbG93IHN5bWxpbmtzLAorICogdmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIHBhdGgsIG9yIG1ha2UgYW55IHN5c3RlbSBjYWxscy4KKyAqLworaW50IG5vcm1hbGl6ZV9wYXRoX2NvcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisJY2hhciAqZHN0MDsKKworCWlmIChoYXNfZG9zX2RyaXZlX3ByZWZpeChzcmMpKSB7CisJCSpkc3QrKyA9ICpzcmMrKzsKKwkJKmRzdCsrID0gKnNyYysrOworCX0KKwlkc3QwID0gZHN0OworCisJaWYgKGlzX2Rpcl9zZXAoKnNyYykpIHsKKwkJKmRzdCsrID0gJy8nOworCQl3aGlsZSAoaXNfZGlyX3NlcCgqc3JjKSkKKwkJCXNyYysrOworCX0KKworCWZvciAoOzspIHsKKwkJY2hhciBjID0gKnNyYzsKKworCQkvKgorCQkgKiBBIHBhdGggY29tcG9uZW50IHRoYXQgYmVnaW5zIHdpdGggLiBjb3VsZCBiZQorCQkgKiBzcGVjaWFsOgorCQkgKiAoMSkgIi4iIGFuZCBlbmRzICAgLS0gaWdub3JlIGFuZCB0ZXJtaW5hdGUuCisJCSAqICgyKSAiLi8iICAgICAgICAgICAtLSBpZ25vcmUgdGhlbSwgZWF0IHNsYXNoIGFuZCBjb250aW51ZS4KKwkJICogKDMpICIuLiIgYW5kIGVuZHMgIC0tIHN0cmlwIG9uZSBhbmQgdGVybWluYXRlLgorCQkgKiAoNCkgIi4uLyIgICAgICAgICAgLS0gc3RyaXAgb25lLCBlYXQgc2xhc2ggYW5kIGNvbnRpbnVlLgorCQkgKi8KKwkJaWYgKGMgPT0gJy4nKSB7CisJCQlpZiAoIXNyY1sxXSkgeworCQkJCS8qICgxKSAqLworCQkJCXNyYysrOworCQkJfSBlbHNlIGlmIChpc19kaXJfc2VwKHNyY1sxXSkpIHsKKwkJCQkvKiAoMikgKi8KKwkJCQlzcmMgKz0gMjsKKwkJCQl3aGlsZSAoaXNfZGlyX3NlcCgqc3JjKSkKKwkJCQkJc3JjKys7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKHNyY1sxXSA9PSAnLicpIHsKKwkJCQlpZiAoIXNyY1syXSkgeworCQkJCQkvKiAoMykgKi8KKwkJCQkJc3JjICs9IDI7CisJCQkJCWdvdG8gdXBfb25lOworCQkJCX0gZWxzZSBpZiAoaXNfZGlyX3NlcChzcmNbMl0pKSB7CisJCQkJCS8qICg0KSAqLworCQkJCQlzcmMgKz0gMzsKKwkJCQkJd2hpbGUgKGlzX2Rpcl9zZXAoKnNyYykpCisJCQkJCQlzcmMrKzsKKwkJCQkJZ290byB1cF9vbmU7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogY29weSB1cCB0byB0aGUgbmV4dCAnLycsIGFuZCBlYXQgYWxsICcvJyAqLworCQl3aGlsZSAoKGMgPSAqc3JjKyspICE9ICdcMCcgJiYgIWlzX2Rpcl9zZXAoYykpCisJCQkqZHN0KysgPSBjOworCQlpZiAoaXNfZGlyX3NlcChjKSkgeworCQkJKmRzdCsrID0gJy8nOworCQkJd2hpbGUgKGlzX2Rpcl9zZXAoYykpCisJCQkJYyA9ICpzcmMrKzsKKwkJCXNyYy0tOworCQl9IGVsc2UgaWYgKCFjKQorCQkJYnJlYWs7CisJCWNvbnRpbnVlOworCisJdXBfb25lOgorCQkvKgorCQkgKiBkc3QwLi5kc3QgaXMgcHJlZml4IHBvcnRpb24sIGFuZCBkc3RbLTFdIGlzICcvJzsKKwkJICogZ28gdXAgb25lIGxldmVsLgorCQkgKi8KKwkJZHN0LS07CS8qIGdvIHRvIHRyYWlsaW5nICcvJyAqLworCQlpZiAoZHN0IDw9IGRzdDApCisJCQlyZXR1cm4gLTE7CisJCS8qIFdpbmRvd3M6IGRzdFstMV0gY2Fubm90IGJlIGJhY2tzbGFzaCBhbnltb3JlICovCisJCXdoaWxlIChkc3QwIDwgZHN0ICYmIGRzdFstMV0gIT0gJy8nKQorCQkJZHN0LS07CisJfQorCSpkc3QgPSAnXDAnOworCXJldHVybiAwOworfQorCisvKgorICogcGF0aCA9IENhbm9uaWNhbCBhYnNvbHV0ZSBwYXRoCisgKiBwcmVmaXhfbGlzdCA9IENvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGFic29sdXRlIHBhdGhzCisgKgorICogRGV0ZXJtaW5lcywgZm9yIGVhY2ggcGF0aCBpbiBwcmVmaXhfbGlzdCwgd2hldGhlciB0aGUgInByZWZpeCIgcmVhbGx5CisgKiBpcyBhbiBhbmNlc3RvciBkaXJlY3Rvcnkgb2YgcGF0aC4gIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdAorICogYW5jZXN0b3IgZGlyZWN0b3J5LCBleGNsdWRpbmcgYW55IHRyYWlsaW5nIHNsYXNoZXMsIG9yIC0xIGlmIG5vIHByZWZpeAorICogaXMgYW4gYW5jZXN0b3IuICAoTm90ZSB0aGF0IHRoaXMgbWVhbnMgMCBpcyByZXR1cm5lZCBpZiBwcmVmaXhfbGlzdCBpcworICogIi8iLikgIi9mb28iIGlzIG5vdCBjb25zaWRlcmVkIGFuIGFuY2VzdG9yIG9mICIvZm9vYmFyIi4gIERpcmVjdG9yaWVzCisgKiBhcmUgbm90IGNvbnNpZGVyZWQgdG8gYmUgdGhlaXIgb3duIGFuY2VzdG9ycy4gIHBhdGggbXVzdCBiZSBpbiBhCisgKiBjYW5vbmljYWwgZm9ybTogZW1wdHkgY29tcG9uZW50cywgb3IgIi4iIG9yICIuLiIgY29tcG9uZW50cyBhcmUgbm90CisgKiBhbGxvd2VkLiAgcHJlZml4X2xpc3QgbWF5IGJlIG51bGwsIHdoaWNoIGlzIGxpa2UgIiIuCisgKi8KK2ludCBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcmVmaXhfbGlzdCkKK3sKKwljaGFyIGJ1ZltQQVRIX01BWCsxXTsKKwljb25zdCBjaGFyICpjZWlsLCAqY29sb247CisJaW50IGxlbiwgbWF4X2xlbiA9IC0xOworCisJaWYgKHByZWZpeF9saXN0ID09IE5VTEwgfHwgIXN0cmNtcChwYXRoLCAiLyIpKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGNvbG9uID0gY2VpbCA9IHByZWZpeF9saXN0OyAqY29sb247IGNlaWwgPSBjb2xvbisxKSB7CisJCWZvciAoY29sb24gPSBjZWlsOyAqY29sb24gJiYgKmNvbG9uICE9IFBBVEhfU0VQOyBjb2xvbisrKTsKKwkJbGVuID0gY29sb24gLSBjZWlsOworCQlpZiAobGVuID09IDAgfHwgbGVuID4gUEFUSF9NQVggfHwgIWlzX2Fic29sdXRlX3BhdGgoY2VpbCkpCisJCQljb250aW51ZTsKKwkJc3RybGNweShidWYsIGNlaWwsIGxlbisxKTsKKwkJaWYgKG5vcm1hbGl6ZV9wYXRoX2NvcHkoYnVmLCBidWYpIDwgMCkKKwkJCWNvbnRpbnVlOworCQlsZW4gPSBzdHJsZW4oYnVmKTsKKwkJaWYgKGxlbiA+IDAgJiYgYnVmW2xlbi0xXSA9PSAnLycpCisJCQlidWZbLS1sZW5dID0gJ1wwJzsKKworCQlpZiAoIXN0cm5jbXAocGF0aCwgYnVmLCBsZW4pICYmCisJCSAgICBwYXRoW2xlbl0gPT0gJy8nICYmCisJCSAgICBsZW4gPiBtYXhfbGVuKSB7CisJCQltYXhfbGVuID0gbGVuOworCQl9CisJfQorCisJcmV0dXJuIG1heF9sZW47Cit9CisKKy8qIHN0cmlwIGFyYml0cmFyeSBhbW91bnQgb2YgZGlyZWN0b3J5IHNlcGFyYXRvcnMgYXQgZW5kIG9mIHBhdGggKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNob21wX3RyYWlsaW5nX2Rpcl9zZXAoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbikKK3sKKwl3aGlsZSAobGVuICYmIGlzX2Rpcl9zZXAocGF0aFtsZW4gLSAxXSkpCisJCWxlbi0tOworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBJZiBwYXRoIGVuZHMgd2l0aCBzdWZmaXggKGNvbXBsZXRlIHBhdGggY29tcG9uZW50cyksIHJldHVybnMgdGhlCisgKiBwYXJ0IGJlZm9yZSBzdWZmaXggKHNhbnMgdHJhaWxpbmcgZGlyZWN0b3J5IHNlcGFyYXRvcnMpLgorICogT3RoZXJ3aXNlIHJldHVybnMgTlVMTC4KKyAqLworY2hhciAqc3RyaXBfcGF0aF9zdWZmaXgoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3VmZml4KQoreworCWludCBwYXRoX2xlbiA9IHN0cmxlbihwYXRoKSwgc3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXgpOworCisJd2hpbGUgKHN1ZmZpeF9sZW4pIHsKKwkJaWYgKCFwYXRoX2xlbikKKwkJCXJldHVybiBOVUxMOworCisJCWlmIChpc19kaXJfc2VwKHBhdGhbcGF0aF9sZW4gLSAxXSkpIHsKKwkJCWlmICghaXNfZGlyX3NlcChzdWZmaXhbc3VmZml4X2xlbiAtIDFdKSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCXBhdGhfbGVuID0gY2hvbXBfdHJhaWxpbmdfZGlyX3NlcChwYXRoLCBwYXRoX2xlbik7CisJCQlzdWZmaXhfbGVuID0gY2hvbXBfdHJhaWxpbmdfZGlyX3NlcChzdWZmaXgsIHN1ZmZpeF9sZW4pOworCQl9CisJCWVsc2UgaWYgKHBhdGhbLS1wYXRoX2xlbl0gIT0gc3VmZml4Wy0tc3VmZml4X2xlbl0pCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAocGF0aF9sZW4gJiYgIWlzX2Rpcl9zZXAocGF0aFtwYXRoX2xlbiAtIDFdKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHhzdHJuZHVwKHBhdGgsIGNob21wX3RyYWlsaW5nX2Rpcl9zZXAocGF0aCwgcGF0aF9sZW4pKTsKK30KKworaW50IGRhZW1vbl9hdm9pZF9hbGlhcyhjb25zdCBjaGFyICpwKQoreworCWludCBzbCwgbmRvdDsKKworCS8qCisJICogVGhpcyByZXN1cnJlY3RzIHRoZSBiZWx0cyBhbmQgc3VzcGVuZGVycyBwYXJhbm9pYSBjaGVjayBieSBIUEEKKwkgKiBkb25lIGluIDw0MzU1NjBGNy40MDgwMDA2QHp5dG9yLmNvbT4gdGhyZWFkLCBub3cgZW50ZXJfcmVwbygpCisJICogZG9lcyBub3QgZG8gZ2V0Y3dkKCkgYmFzZWQgcGF0aCBjYW5vbmljYWxpemF0aW9uLgorCSAqCisJICogc2wgYmVjb21lcyB0cnVlIGltbWVkaWF0ZWx5IGFmdGVyIHNlZWluZyAnLycgYW5kIGNvbnRpbnVlcyB0bworCSAqIGJlIHRydWUgYXMgbG9uZyBhcyBkb3RzIGNvbnRpbnVlIGFmdGVyIHRoYXQgd2l0aG91dCBpbnRlcnZlbmluZworCSAqIG5vbi1kb3QgY2hhcmFjdGVyLgorCSAqLworCWlmICghcCB8fCAoKnAgIT0gJy8nICYmICpwICE9ICd+JykpCisJCXJldHVybiAtMTsKKwlzbCA9IDE7IG5kb3QgPSAwOworCXArKzsKKworCXdoaWxlICgxKSB7CisJCWNoYXIgY2ggPSAqcCsrOworCQlpZiAoc2wpIHsKKwkJCWlmIChjaCA9PSAnLicpCisJCQkJbmRvdCsrOworCQkJZWxzZSBpZiAoY2ggPT0gJy8nKSB7CisJCQkJaWYgKG5kb3QgPCAzKQorCQkJCQkvKiByZWplY3QgLy8sIC8uLyBhbmQgLy4uLyAqLworCQkJCQlyZXR1cm4gLTE7CisJCQkJbmRvdCA9IDA7CisJCQl9CisJCQllbHNlIGlmIChjaCA9PSAwKSB7CisJCQkJaWYgKDAgPCBuZG90ICYmIG5kb3QgPCAzKQorCQkJCQkvKiByZWplY3QgLy4kIGFuZCAvLi4kICovCisJCQkJCXJldHVybiAtMTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWVsc2UKKwkJCQlzbCA9IG5kb3QgPSAwOworCQl9CisJCWVsc2UgaWYgKGNoID09IDApCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAoY2ggPT0gJy8nKSB7CisJCQlzbCA9IDE7CisJCQluZG90ID0gMDsKKwkJfQorCX0KK30KKworaW50IG9mZnNldF8xc3RfY29tcG9uZW50KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpKQorCQlyZXR1cm4gMiArIGlzX2Rpcl9zZXAocGF0aFsyXSk7CisJcmV0dXJuIGlzX2Rpcl9zZXAocGF0aFswXSk7Cit9CmRpZmYgLS1naXQgYS9wZXJsLy5naXRpZ25vcmUgYi9wZXJsLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxZmMyNwotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDggQEAKK3BlcmwubWFrCitwZXJsLm1hay5vbGQKK01ZTUVUQS5qc29uCitNWU1FVEEueW1sCitibGliCitibGliZGlycworcG1fdG9fYmxpYgorUE0uc3RhbXAKZGlmZiAtLWdpdCBhL3BlcmwvR2l0LnBtIGIvcGVybC9HaXQucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3ZjQyMAotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0LnBtCkBAIC0wLDAgKzEsMTM3MCBAQAorPWhlYWQxIE5BTUUKKworR2l0IC0gUGVybCBpbnRlcmZhY2UgdG8gdGhlIEdpdCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtCisKKz1jdXQKKworCitwYWNrYWdlIEdpdDsKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKKworCitCRUdJTiB7CisKK291ciAoJFZFUlNJT04sIEBJU0EsIEBFWFBPUlQsIEBFWFBPUlRfT0spOworCisjIFRvdGFsbHkgdW5zdGFibGUgQVBJLgorJFZFUlNJT04gPSAnMC4wMSc7CisKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgdXNlIEdpdDsKKworICBteSAkdmVyc2lvbiA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKCd2ZXJzaW9uJyk7CisKKyAgZ2l0X2NtZF90cnkgeyBHaXQ6OmNvbW1hbmRfbm9pc3koJ3VwZGF0ZS1zZXJ2ZXItaW5mbycpIH0KKyAgICAgICAgICAgICAgJyVzIGZhaWxlZCB3LyBjb2RlICVkJzsKKworICBteSAkcmVwbyA9IEdpdC0+cmVwb3NpdG9yeSAoRGlyZWN0b3J5ID0+ICcvc3J2L2dpdC9jb2dpdG8uZ2l0Jyk7CisKKworICBteSBAcmV2cyA9ICRyZXBvLT5jb21tYW5kKCdyZXYtbGlzdCcsICctLXNpbmNlPWxhc3QgbW9uZGF5JywgJy0tYWxsJyk7CisKKyAgbXkgKCRmaCwgJGMpID0gJHJlcG8tPmNvbW1hbmRfb3V0cHV0X3BpcGUoJ3Jldi1saXN0JywgJy0tc2luY2U9bGFzdCBtb25kYXknLCAnLS1hbGwnKTsKKyAgbXkgJGxhc3RyZXYgPSA8JGZoPjsgY2hvbXAgJGxhc3RyZXY7CisgICRyZXBvLT5jb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkYyk7CisKKyAgbXkgJGxhc3RyZXYgPSAkcmVwby0+Y29tbWFuZF9vbmVsaW5lKCBbICdyZXYtbGlzdCcsICctLWFsbCcgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVERFUlIgPT4gMCApOworCisgIG15ICRzaGExID0gJHJlcG8tPmhhc2hfYW5kX2luc2VydF9vYmplY3QoJ2ZpbGUudHh0Jyk7CisgIG15ICR0ZW1wZmlsZSA9IHRlbXBmaWxlKCk7CisgIG15ICRzaXplID0gJHJlcG8tPmNhdF9ibG9iKCRzaGExLCAkdGVtcGZpbGUpOworCis9Y3V0CisKKworcmVxdWlyZSBFeHBvcnRlcjsKKworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQEVYUE9SVCA9IHF3KGdpdF9jbWRfdHJ5KTsKKworIyBNZXRob2RzIHdoaWNoIGNhbiBiZSBjYWxsZWQgYXMgc3RhbmRhbG9uZSBmdW5jdGlvbnMgYXMgd2VsbDoKK0BFWFBPUlRfT0sgPSBxdyhjb21tYW5kIGNvbW1hbmRfb25lbGluZSBjb21tYW5kX25vaXN5CisgICAgICAgICAgICAgICAgY29tbWFuZF9vdXRwdXRfcGlwZSBjb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlCisgICAgICAgICAgICAgICAgY29tbWFuZF9iaWRpX3BpcGUgY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIGV4ZWNfcGF0aCBodG1sX3BhdGggaGFzaF9vYmplY3QgZ2l0X2NtZF90cnkKKyAgICAgICAgICAgICAgICByZW1vdGVfcmVmcworICAgICAgICAgICAgICAgIHRlbXBfYWNxdWlyZSB0ZW1wX3JlbGVhc2UgdGVtcF9yZXNldCB0ZW1wX3BhdGgpOworCisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBQZXJsIHNjcmlwdHMgZWFzeSB3YXkgdG8gaW50ZXJmYWNlIHRoZSBHaXQgdmVyc2lvbiBjb250cm9sCitzeXN0ZW0uIFRoZSBtb2R1bGVzIGhhdmUgYW4gZWFzeSBhbmQgd2VsbC10ZXN0ZWQgd2F5IHRvIGNhbGwgYXJiaXRyYXJ5IEdpdAorY29tbWFuZHM7IGluIHRoZSBmdXR1cmUsIHRoZSBpbnRlcmZhY2Ugd2lsbCBhbHNvIHByb3ZpZGUgc3BlY2lhbGl6ZWQgbWV0aG9kcworZm9yIGRvaW5nIGVhc2lseSBvcGVyYXRpb25zIHdoaWNoIGFyZSBub3QgdG90YWxseSB0cml2aWFsIHRvIGRvIG92ZXIKK3RoZSBnZW5lcmljIGNvbW1hbmQgaW50ZXJmYWNlLgorCitXaGlsZSBzb21lIGNvbW1hbmRzIGNhbiBiZSBleGVjdXRlZCBvdXRzaWRlIG9mIGFueSBjb250ZXh0IChlLmcuICd2ZXJzaW9uJworb3IgJ2luaXQnKSwgbW9zdCBvcGVyYXRpb25zIHJlcXVpcmUgYSByZXBvc2l0b3J5IGNvbnRleHQsIHdoaWNoIGluIHByYWN0aWNlCittZWFucyBnZXR0aW5nIGFuIGluc3RhbmNlIG9mIHRoZSBHaXQgb2JqZWN0IHVzaW5nIHRoZSByZXBvc2l0b3J5KCkgY29uc3RydWN0b3IuCisoSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCBhbHNvIGdldCBhIG5ld19yZXBvc2l0b3J5KCkgY29uc3RydWN0b3IuKSBBbGwgY29tbWFuZHMKK2NhbGxlZCBhcyBtZXRob2RzIG9mIHRoZSBvYmplY3QgYXJlIHRoZW4gZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlCityZXBvc2l0b3J5LgorCitQYXJ0IG9mIHRoZSAicmVwb3NpdG9yeSBzdGF0ZSIgaXMgYWxzbyBpbmZvcm1hdGlvbiBhYm91dCBwYXRoIHRvIHRoZSBhdHRhY2hlZAord29ya2luZyBjb3B5ICh1bmxlc3MgeW91IHdvcmsgd2l0aCBhIGJhcmUgcmVwb3NpdG9yeSkuIFlvdSBjYW4gYWxzbyBuYXZpZ2F0ZQoraW5zaWRlIG9mIHRoZSB3b3JraW5nIGNvcHkgdXNpbmcgdGhlIEM8d2NfY2hkaXIoKT4gbWV0aG9kLiAoTm90ZSB0aGF0Cit0aGUgcmVwb3NpdG9yeSBvYmplY3QgaXMgc2VsZi1jb250YWluZWQgYW5kIHdpbGwgbm90IGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQorb2YgeW91ciBwcm9jZXNzLikKKworVE9ETzogSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyBkbworCisJbXkgJHJlbW90ZXJlcG8gPSAkcmVwby0+cmVtb3RlX3JlcG9zaXRvcnkgKE5hbWUgPT4gJ2NvZ2l0bycsIEJyYW5jaCA9PiAnbWFzdGVyJyk7CisJJHJlbW90ZXJlcG8gfHw9IEdpdC0+cmVtb3RlX3JlcG9zaXRvcnkgKCdodHRwOi8vZ2l0Lm9yLmN6L2NvZ2l0by5naXQvJyk7CisJbXkgQHJlZnMgPSAkcmVtb3RlcmVwby0+cmVmcygpOworCitDdXJyZW50bHksIHRoZSBtb2R1bGUgbWVyZWx5IHdyYXBzIGNhbGxzIHRvIGV4dGVybmFsIEdpdCB0b29scy4gSW4gdGhlIGZ1dHVyZSwKK2l0IHdpbGwgcHJvdmlkZSBhIG11Y2ggZmFzdGVyIHdheSB0byBpbnRlcmFjdCB3aXRoIEdpdCBieSBsaW5raW5nIGRpcmVjdGx5Cit0byBsaWJnaXQuIFRoaXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgb3BhcXVlIHRvIHRoZSB1c2VyLCB0aG91Z2ggKHBlcmZvcm1hbmNlCitpbmNyZWFzZSBub3R3aXRoc3RhbmRpbmcpLgorCis9Y3V0CisKKwordXNlIENhcnAgcXcoY2FycCBjcm9hayk7ICMgYnV0IGNyb2FrIGlzIGJhZCAtIHRocm93IGluc3RlYWQKK3VzZSBFcnJvciBxdyg6dHJ5KTsKK3VzZSBDd2QgcXcoYWJzX3BhdGggY3dkKTsKK3VzZSBJUEM6Ok9wZW4yIHF3KG9wZW4yKTsKK3VzZSBGY250bCBxdyhTRUVLX1NFVCBTRUVLX0NVUik7Cit9CisKKworPWhlYWQxIENPTlNUUlVDVE9SUworCis9b3ZlciA0CisKKz1pdGVtIHJlcG9zaXRvcnkgKCBPUFRJT05TICkKKworPWl0ZW0gcmVwb3NpdG9yeSAoIERJUkVDVE9SWSApCisKKz1pdGVtIHJlcG9zaXRvcnkgKCkKKworQ29uc3RydWN0IGEgbmV3IHJlcG9zaXRvcnkgb2JqZWN0LgorQzxPUFRJT05TPiBhcmUgcGFzc2VkIGluIGEgaGFzaCBsaWtlIGZhc2hpb24sIHVzaW5nIGtleSBhbmQgdmFsdWUgcGFpcnMuCitQb3NzaWJsZSBvcHRpb25zIGFyZToKKworQjxSZXBvc2l0b3J5PiAtIFBhdGggdG8gdGhlIEdpdCByZXBvc2l0b3J5LgorCitCPFdvcmtpbmdDb3B5PiAtIFBhdGggdG8gdGhlIGFzc29jaWF0ZWQgd29ya2luZyBjb3B5OyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQKK2FzIG1hbnkgY29tbWFuZHMgd2lsbCBoYXBwaWx5IGNydW5jaCBvbiBhIGJhcmUgcmVwb3NpdG9yeS4KKworQjxXb3JraW5nU3ViZGlyPiAtIFN1YmRpcmVjdG9yeSBpbiB0aGUgd29ya2luZyBjb3B5IHRvIHdvcmsgaW5zaWRlLgorSnVzdCBsZWZ0IHVuZGVmaW5lZCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gbGltaXQgdGhlIHNjb3BlIG9mIG9wZXJhdGlvbnMuCisKK0I8RGlyZWN0b3J5PiAtIFBhdGggdG8gdGhlIEdpdCB3b3JraW5nIGRpcmVjdG9yeSBpbiBpdHMgdXN1YWwgc2V0dXAuCitUaGUgQzwuZ2l0PiBkaXJlY3RvcnkgaXMgc2VhcmNoZWQgaW4gdGhlIGRpcmVjdG9yeSBhbmQgYWxsIHRoZSBwYXJlbnQKK2RpcmVjdG9yaWVzOyBpZiBmb3VuZCwgQzxXb3JraW5nQ29weT4gaXMgc2V0IHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZworaXQgYW5kIEM8UmVwb3NpdG9yeT4gdG8gdGhlIEM8LmdpdD4gZGlyZWN0b3J5IGl0c2VsZi4gSWYgbm8gQzwuZ2l0PgorZGlyZWN0b3J5IHdhcyBmb3VuZCwgdGhlIEM8RGlyZWN0b3J5PiBpcyBhc3N1bWVkIHRvIGJlIGEgYmFyZSByZXBvc2l0b3J5LAorQzxSZXBvc2l0b3J5PiBpcyBzZXQgdG8gcG9pbnQgYXQgaXQgYW5kIEM8V29ya2luZ0NvcHk+IGlzIGxlZnQgdW5kZWZpbmVkLgorSWYgdGhlIEM8JEdJVF9ESVI+IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgdGhpbmdzIGJlaGF2ZSBhcyBleHBlY3RlZAorYXMgd2VsbC4KKworWW91IHNob3VsZCBub3QgdXNlIGJvdGggQzxEaXJlY3Rvcnk+IGFuZCBlaXRoZXIgb2YgQzxSZXBvc2l0b3J5PiBhbmQKK0M8V29ya2luZ0NvcHk+IC0gdGhlIHJlc3VsdHMgb2YgdGhhdCBhcmUgdW5kZWZpbmVkLgorCitBbHRlcm5hdGl2ZWx5LCBhIGRpcmVjdG9yeSBwYXRoIG1heSBiZSBwYXNzZWQgYXMgYSBzaW5nbGUgc2NhbGFyIGFyZ3VtZW50Cit0byB0aGUgY29uc3RydWN0b3I7IGl0IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBvbmx5IHRoZSBDPERpcmVjdG9yeT4gb3B0aW9uCitmaWVsZC4KKworQ2FsbGluZyB0aGUgY29uc3RydWN0b3Igd2l0aCBubyBvcHRpb25zIHdoYXRzb2V2ZXIgaXMgZXF1aXZhbGVudCB0bworY2FsbGluZyBpdCB3aXRoIEM8PCBEaXJlY3RvcnkgPT4gJy4nID4+LiBJbiBnZW5lcmFsLCBpZiB5b3UgYXJlIGJ1aWxkaW5nCithIHN0YW5kYXJkIHBvcmNlbGFpbiBjb21tYW5kLCBzaW1wbHkgZG9pbmcgQzw8IEdpdC0+cmVwb3NpdG9yeSgpID4+IHNob3VsZAorZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBzZXR1cCB0aGUgb2JqZWN0IHRvIHJlZmxlY3QgZXhhY3RseSB3aGVyZSB0aGUgdXNlcgoraXMgcmlnaHQgbm93LgorCis9Y3V0CisKK3N1YiByZXBvc2l0b3J5IHsKKwlteSAkY2xhc3MgPSBzaGlmdDsKKwlteSBAYXJncyA9IEBfOworCW15ICVvcHRzID0gKCk7CisJbXkgJHNlbGY7CisKKwlpZiAoZGVmaW5lZCAkYXJnc1swXSkgeworCQlpZiAoJCNhcmdzICUgMiAhPSAxKSB7CisJCQkjIE5vdCBhIGhhc2guCisJCQkkI2FyZ3MgPT0gMCBvciB0aHJvdyBFcnJvcjo6U2ltcGxlKCJiYWQgdXNhZ2UiKTsKKwkJCSVvcHRzID0gKCBEaXJlY3RvcnkgPT4gJGFyZ3NbMF0gKTsKKwkJfSBlbHNlIHsKKwkJCSVvcHRzID0gQGFyZ3M7CisJCX0KKwl9CisKKwlpZiAobm90IGRlZmluZWQgJG9wdHN7UmVwb3NpdG9yeX0gYW5kIG5vdCBkZWZpbmVkICRvcHRze1dvcmtpbmdDb3B5fQorCQlhbmQgbm90IGRlZmluZWQgJG9wdHN7RGlyZWN0b3J5fSkgeworCQkkb3B0c3tEaXJlY3Rvcnl9ID0gJy4nOworCX0KKworCWlmIChkZWZpbmVkICRvcHRze0RpcmVjdG9yeX0pIHsKKwkJLWQgJG9wdHN7RGlyZWN0b3J5fSBvciB0aHJvdyBFcnJvcjo6U2ltcGxlKCJEaXJlY3Rvcnkgbm90IGZvdW5kOiAkb3B0c3tEaXJlY3Rvcnl9ICQhIik7CisKKwkJbXkgJHNlYXJjaCA9IEdpdC0+cmVwb3NpdG9yeShXb3JraW5nQ29weSA9PiAkb3B0c3tEaXJlY3Rvcnl9KTsKKwkJbXkgJGRpcjsKKwkJdHJ5IHsKKwkJCSRkaXIgPSAkc2VhcmNoLT5jb21tYW5kX29uZWxpbmUoWydyZXYtcGFyc2UnLCAnLS1naXQtZGlyJ10sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUREVSUiA9PiAwKTsKKwkJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggeworCQkJJGRpciA9IHVuZGVmOworCQl9OworCisJCWlmICgkZGlyKSB7CisJCQkkZGlyID1+IG0jXi8jIG9yICRkaXIgPSAkb3B0c3tEaXJlY3Rvcnl9IC4gJy8nIC4gJGRpcjsKKwkJCSRvcHRze1JlcG9zaXRvcnl9ID0gYWJzX3BhdGgoJGRpcik7CisKKwkJCSMgSWYgLS1naXQtZGlyIHdlbnQgb2ssIHRoaXMgc2hvdWxkbid0IGRpZSBlaXRoZXIuCisJCQlteSAkcHJlZml4ID0gJHNlYXJjaC0+Y29tbWFuZF9vbmVsaW5lKCdyZXYtcGFyc2UnLCAnLS1zaG93LXByZWZpeCcpOworCQkJJGRpciA9IGFic19wYXRoKCRvcHRze0RpcmVjdG9yeX0pIC4gJy8nOworCQkJaWYgKCRwcmVmaXgpIHsKKwkJCQlpZiAoc3Vic3RyKCRkaXIsIC1sZW5ndGgoJHByZWZpeCkpIG5lICRwcmVmaXgpIHsKKwkJCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgicmV2LXBhcnNlIGNvbmZ1c2VkIG1lIC0gJGRpciBkb2VzIG5vdCBoYXZlIHRyYWlsaW5nICRwcmVmaXgiKTsKKwkJCQl9CisJCQkJc3Vic3RyKCRkaXIsIC1sZW5ndGgoJHByZWZpeCkpID0gJyc7CisJCQl9CisJCQkkb3B0c3tXb3JraW5nQ29weX0gPSAkZGlyOworCQkJJG9wdHN7V29ya2luZ1N1YmRpcn0gPSAkcHJlZml4OworCisJCX0gZWxzZSB7CisJCQkjIEEgYmFyZSByZXBvc2l0b3J5PyBMZXQncyBzZWUuLi4KKwkJCSRkaXIgPSAkb3B0c3tEaXJlY3Rvcnl9OworCisJCQl1bmxlc3MgKC1kICIkZGlyL3JlZnMiIGFuZCAtZCAiJGRpci9vYmplY3RzIiBhbmQgLWUgIiRkaXIvSEVBRCIpIHsKKwkJCQkjIE1pbWljIGdpdC1yZXYtcGFyc2UgLS1naXQtZGlyIGVycm9yIG1lc3NhZ2U6CisJCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiZmF0YWw6IE5vdCBhIGdpdCByZXBvc2l0b3J5OiAkZGlyIik7CisJCQl9CisJCQlteSAkc2VhcmNoID0gR2l0LT5yZXBvc2l0b3J5KFJlcG9zaXRvcnkgPT4gJGRpcik7CisJCQl0cnkgeworCQkJCSRzZWFyY2gtPmNvbW1hbmQoJ3N5bWJvbGljLXJlZicsICdIRUFEJyk7CisJCQl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7CisJCQkJIyBNaW1pYyBnaXQtcmV2LXBhcnNlIC0tZ2l0LWRpciBlcnJvciBtZXNzYWdlOgorCQkJCXRocm93IEVycm9yOjpTaW1wbGUoImZhdGFsOiBOb3QgYSBnaXQgcmVwb3NpdG9yeTogJGRpciIpOworCQkJfQorCisJCQkkb3B0c3tSZXBvc2l0b3J5fSA9IGFic19wYXRoKCRkaXIpOworCQl9CisKKwkJZGVsZXRlICRvcHRze0RpcmVjdG9yeX07CisJfQorCisJJHNlbGYgPSB7IG9wdHMgPT4gXCVvcHRzIH07CisJYmxlc3MgJHNlbGYsICRjbGFzczsKK30KKworPWJhY2sKKworPWhlYWQxIE1FVEhPRFMKKworPW92ZXIgNAorCis9aXRlbSBjb21tYW5kICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCisKKz1pdGVtIGNvbW1hbmQgKCBbIENPTU1BTkQsIEFSR1VNRU5UUy4uLiBdLCB7IE9wdCA9PiBWYWwgLi4uIH0gKQorCitFeGVjdXRlIHRoZSBnaXZlbiBHaXQgQzxDT01NQU5EPiAoc3BlY2lmeSBpdCB3aXRob3V0IHRoZSAnZ2l0LScKK3ByZWZpeCksIG9wdGlvbmFsbHkgd2l0aCB0aGUgc3BlY2lmaWVkIGV4dHJhIEM8QVJHVU1FTlRTPi4KKworVGhlIHNlY29uZCBtb3JlIGVsYWJvcmF0ZSBmb3JtIGNhbiBiZSB1c2VkIGlmIHlvdSB3YW50IHRvIGZ1cnRoZXIgYWRqdXN0Cit0aGUgY29tbWFuZCBleGVjdXRpb24uIEN1cnJlbnRseSwgb25seSBvbmUgb3B0aW9uIGlzIHN1cHBvcnRlZDoKKworQjxTVERFUlI+IC0gSG93IHRvIGRlYWwgd2l0aCB0aGUgY29tbWFuZCdzIGVycm9yIG91dHB1dC4gQnkgZGVmYXVsdCAoQzx1bmRlZj4pCitpdCBpcyBkZWxpdmVyZWQgdG8gdGhlIGNhbGxlcidzIEM8U1RERVJSPi4gQSBmYWxzZSB2YWx1ZSAoMCBvciAnJykgd2lsbCBjYXVzZQoraXQgdG8gYmUgdGhyb3duIGF3YXkuIElmIHlvdSB3YW50IHRvIHByb2Nlc3MgaXQsIHlvdSBjYW4gZ2V0IGl0IGluIGEgZmlsZWhhbmRsZQoreW91IHNwZWNpZnksIGJ1dCB5b3UgbXVzdCBiZSBleHRyZW1lbHkgY2FyZWZ1bDsgaWYgdGhlIGVycm9yIG91dHB1dCBpcyBub3QKK3Zlcnkgc2hvcnQgYW5kIHlvdSB3YW50IHRvIHJlYWQgaXQgaW4gdGhlIHNhbWUgcHJvY2VzcyBhcyB3aGVyZSB5b3UgY2FsbGVkCitDPGNvbW1hbmQoKT4sIHlvdSBhcmUgc2V0IHVwIGZvciBhIG5pY2UgZGVhZGxvY2shCisKK1RoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGFueSBpbnN0YW5jZSBvciBvbiBhIHNwZWNpZmllZCBHaXQgcmVwb3NpdG9yeQorKGluIHRoYXQgY2FzZSB0aGUgY29tbWFuZCB3aWxsIGJlIHJ1biBpbiB0aGUgcmVwb3NpdG9yeSBjb250ZXh0KS4KKworSW4gc2NhbGFyIGNvbnRleHQsIGl0IHJldHVybnMgYWxsIHRoZSBjb21tYW5kIG91dHB1dCBpbiBhIHNpbmdsZSBzdHJpbmcKKyh2ZXJiYXRpbSkuCisKK0luIGFycmF5IGNvbnRleHQsIGl0IHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBsaW5lcyBwcmludGVkIHRvIHRoZQorY29tbWFuZCdzIHN0ZG91dCAod2l0aG91dCB0cmFpbGluZyBuZXdsaW5lcykuCisKK0luIGJvdGggY2FzZXMsIHRoZSBjb21tYW5kJ3Mgc3RkaW4gYW5kIHN0ZGVyciBhcmUgdGhlIHNhbWUgYXMgdGhlIGNhbGxlcidzLgorCis9Y3V0CisKK3N1YiBjb21tYW5kIHsKKwlteSAoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQF8pOworCisJaWYgKG5vdCBkZWZpbmVkIHdhbnRhcnJheSkgeworCQkjIE5vdGhpbmcgdG8gcGVwcGVyIHRoZSBwb3NzaWJsZSBleGNlcHRpb24gd2l0aC4KKwkJX2NtZF9jbG9zZSgkZmgsICRjdHgpOworCisJfSBlbHNpZiAobm90IHdhbnRhcnJheSkgeworCQlsb2NhbCAkLzsKKwkJbXkgJHRleHQgPSA8JGZoPjsKKwkJdHJ5IHsKKwkJCV9jbWRfY2xvc2UoJGZoLCAkY3R4KTsKKwkJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggeworCQkJIyBQZXBwZXIgd2l0aCB0aGUgb3V0cHV0OgorCQkJbXkgJEUgPSBzaGlmdDsKKwkJCSRFLT57Jy1vdXRwdXRyZWYnfSA9IFwkdGV4dDsKKwkJCXRocm93ICRFOworCQl9OworCQlyZXR1cm4gJHRleHQ7CisKKwl9IGVsc2UgeworCQlteSBAbGluZXMgPSA8JGZoPjsKKwkJZGVmaW5lZCBhbmQgY2hvbXAgZm9yIEBsaW5lczsKKwkJdHJ5IHsKKwkJCV9jbWRfY2xvc2UoJGZoLCAkY3R4KTsKKwkJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggeworCQkJbXkgJEUgPSBzaGlmdDsKKwkJCSRFLT57Jy1vdXRwdXRyZWYnfSA9IFxAbGluZXM7CisJCQl0aHJvdyAkRTsKKwkJfTsKKwkJcmV0dXJuIEBsaW5lczsKKwl9Cit9CisKKworPWl0ZW0gY29tbWFuZF9vbmVsaW5lICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCisKKz1pdGVtIGNvbW1hbmRfb25lbGluZSAoIFsgQ09NTUFORCwgQVJHVU1FTlRTLi4uIF0sIHsgT3B0ID0+IFZhbCAuLi4gfSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEM8Q09NTUFORD4gaW4gdGhlIHNhbWUgd2F5IGFzIGNvbW1hbmQoKQorZG9lcyBidXQgYWx3YXlzIHJldHVybiBhIHNjYWxhciBzdHJpbmcgY29udGFpbmluZyB0aGUgZmlyc3QgbGluZQorb2YgdGhlIGNvbW1hbmQncyBzdGFuZGFyZCBvdXRwdXQuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfb25lbGluZSB7CisJbXkgKCRmaCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKEBfKTsKKworCW15ICRsaW5lID0gPCRmaD47CisJZGVmaW5lZCAkbGluZSBhbmQgY2hvbXAgJGxpbmU7CisJdHJ5IHsKKwkJX2NtZF9jbG9zZSgkZmgsICRjdHgpOworCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKKwkJIyBQZXBwZXIgd2l0aCB0aGUgb3V0cHV0OgorCQlteSAkRSA9IHNoaWZ0OworCQkkRS0+eyctb3V0cHV0cmVmJ30gPSBcJGxpbmU7CisJCXRocm93ICRFOworCX07CisJcmV0dXJuICRsaW5lOworfQorCisKKz1pdGVtIGNvbW1hbmRfb3V0cHV0X3BpcGUgKCBDT01NQU5EIFssIEFSR1VNRU5UUy4uLiBdICkKKworPWl0ZW0gY29tbWFuZF9vdXRwdXRfcGlwZSAoIFsgQ09NTUFORCwgQVJHVU1FTlRTLi4uIF0sIHsgT3B0ID0+IFZhbCAuLi4gfSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEM8Q09NTUFORD4gaW4gdGhlIHNhbWUgd2F5IGFzIGNvbW1hbmQoKQorZG9lcyBidXQgcmV0dXJuIGEgcGlwZSBmaWxlaGFuZGxlIGZyb20gd2hpY2ggdGhlIGNvbW1hbmQgb3V0cHV0IGNhbiBiZQorcmVhZC4KKworVGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gQzwoJHBpcGUsICRjdHgpPiBpbiBhcnJheSBjb250ZXh0LgorU2VlIEM8Y29tbWFuZF9jbG9zZV9waXBlKCk+IGZvciBkZXRhaWxzLgorCis9Y3V0CisKK3N1YiBjb21tYW5kX291dHB1dF9waXBlIHsKKwlfY29tbWFuZF9jb21tb25fcGlwZSgnLXwnLCBAXyk7Cit9CisKKworPWl0ZW0gY29tbWFuZF9pbnB1dF9waXBlICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCisKKz1pdGVtIGNvbW1hbmRfaW5wdXRfcGlwZSAoIFsgQ09NTUFORCwgQVJHVU1FTlRTLi4uIF0sIHsgT3B0ID0+IFZhbCAuLi4gfSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEM8Q09NTUFORD4gaW4gdGhlIHNhbWUgd2F5IGFzIGNvbW1hbmRfb3V0cHV0X3BpcGUoKQorZG9lcyBidXQgcmV0dXJuIGFuIGlucHV0IHBpcGUgZmlsZWhhbmRsZSBpbnN0ZWFkOyB0aGUgY29tbWFuZCBvdXRwdXQKK2lzIG5vdCBjYXB0dXJlZC4KKworVGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gQzwoJHBpcGUsICRjdHgpPiBpbiBhcnJheSBjb250ZXh0LgorU2VlIEM8Y29tbWFuZF9jbG9zZV9waXBlKCk+IGZvciBkZXRhaWxzLgorCis9Y3V0CisKK3N1YiBjb21tYW5kX2lucHV0X3BpcGUgeworCV9jb21tYW5kX2NvbW1vbl9waXBlKCd8LScsIEBfKTsKK30KKworCis9aXRlbSBjb21tYW5kX2Nsb3NlX3BpcGUgKCBQSVBFIFssIENUWCBdICkKKworQ2xvc2UgdGhlIEM8UElQRT4gYXMgcmV0dXJuZWQgZnJvbSBDPGNvbW1hbmRfKl9waXBlKCk+LCBjaGVja2luZword2hldGhlciB0aGUgY29tbWFuZCBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuIFRoZSBvcHRpb25hbCBDPENUWD4gYXJndW1lbnQKK2lzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgY29tbWFuZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlLAorYW5kIGl0IGlzIHRoZSBzZWNvbmQgdmFsdWUgcmV0dXJuZWQgYnkgQzxjb21tYW5kXypfcGlwZSgpPiB3aGVuCitjYWxsZWQgaW4gYXJyYXkgY29udGV4dC4gVGhlIGNhbGwgaWRpb20gaXM6CisKKwlteSAoJGZoLCAkY3R4KSA9ICRyLT5jb21tYW5kX291dHB1dF9waXBlKCdzdGF0dXMnKTsKKwl3aGlsZSAoPCRmaD4pIHsgLi4uIH0KKwkkci0+Y29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7CisKK05vdGUgdGhhdCB5b3Ugc2hvdWxkIG5vdCByZWx5IG9uIHdoYXRldmVyIGFjdHVhbGx5IGlzIGluIEM8Q1RYPjsKK2N1cnJlbnRseSBpdCBpcyBzaW1wbHkgdGhlIGNvbW1hbmQgbmFtZSBidXQgaW4gZnV0dXJlIHRoZSBjb250ZXh0IG1pZ2h0CitoYXZlIG1vcmUgY29tcGxpY2F0ZWQgc3RydWN0dXJlLgorCis9Y3V0CisKK3N1YiBjb21tYW5kX2Nsb3NlX3BpcGUgeworCW15ICgkc2VsZiwgJGZoLCAkY3R4KSA9IF9tYXliZV9zZWxmKEBfKTsKKwkkY3R4IHx8PSAnPHVua25vd24+JzsKKwlfY21kX2Nsb3NlKCRmaCwgJGN0eCk7Cit9CisKKz1pdGVtIGNvbW1hbmRfYmlkaV9waXBlICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEM8Q09NTUFORD4gaW4gdGhlIHNhbWUgd2F5IGFzIGNvbW1hbmRfb3V0cHV0X3BpcGUoKQorZG9lcyBidXQgcmV0dXJuIGJvdGggYW4gaW5wdXQgcGlwZSBmaWxlaGFuZGxlIGFuZCBhbiBvdXRwdXQgcGlwZSBmaWxlaGFuZGxlLgorCitUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gcmV0dXJuIEM8KCRwaWQsICRwaXBlX2luLCAkcGlwZV9vdXQsICRjdHgpPi4KK1NlZSBDPGNvbW1hbmRfY2xvc2VfYmlkaV9waXBlKCk+IGZvciBkZXRhaWxzLgorCis9Y3V0CisKK3N1YiBjb21tYW5kX2JpZGlfcGlwZSB7CisJbXkgKCRwaWQsICRpbiwgJG91dCk7CisJbXkgKCRzZWxmKSA9IF9tYXliZV9zZWxmKEBfKTsKKwlsb2NhbCAlRU5WID0gJUVOVjsKKwlteSAkY3dkX3NhdmUgPSB1bmRlZjsKKwlpZiAoJHNlbGYpIHsKKwkJc2hpZnQ7CisJCSRjd2Rfc2F2ZSA9IGN3ZCgpOworCQlfc2V0dXBfZ2l0X2NtZF9lbnYoJHNlbGYpOworCX0KKwkkcGlkID0gb3BlbjIoJGluLCAkb3V0LCAnZ2l0JywgQF8pOworCWNoZGlyKCRjd2Rfc2F2ZSkgaWYgJGN3ZF9zYXZlOworCXJldHVybiAoJHBpZCwgJGluLCAkb3V0LCBqb2luKCcgJywgQF8pKTsKK30KKworPWl0ZW0gY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUgKCBQSUQsIFBJUEVfSU4sIFBJUEVfT1VUIFssIENUWF0gKQorCitDbG9zZSB0aGUgQzxQSVBFX0lOPiBhbmQgQzxQSVBFX09VVD4gYXMgcmV0dXJuZWQgZnJvbSBDPGNvbW1hbmRfYmlkaV9waXBlKCk+LAorY2hlY2tpbmcgd2hldGhlciB0aGUgY29tbWFuZCBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuIFRoZSBvcHRpb25hbCBDPENUWD4KK2FyZ3VtZW50IGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgY29tbWFuZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlLAorYW5kIGl0IGlzIHRoZSBmb3VydGggdmFsdWUgcmV0dXJuZWQgYnkgQzxjb21tYW5kX2JpZGlfcGlwZSgpPi4gIFRoZSBjYWxsIGlkaW9tCitpczoKKworCW15ICgkcGlkLCAkaW4sICRvdXQsICRjdHgpID0gJHItPmNvbW1hbmRfYmlkaV9waXBlKCdjYXQtZmlsZSAtLWJhdGNoLWNoZWNrJyk7CisJcHJpbnQgIjAwMDAwMDAwMFxuIiAkb3V0OworCXdoaWxlICg8JGluPikgeyAuLi4gfQorCSRyLT5jb21tYW5kX2Nsb3NlX2JpZGlfcGlwZSgkcGlkLCAkaW4sICRvdXQsICRjdHgpOworCitOb3RlIHRoYXQgeW91IHNob3VsZCBub3QgcmVseSBvbiB3aGF0ZXZlciBhY3R1YWxseSBpcyBpbiBDPENUWD47CitjdXJyZW50bHkgaXQgaXMgc2ltcGx5IHRoZSBjb21tYW5kIG5hbWUgYnV0IGluIGZ1dHVyZSB0aGUgY29udGV4dCBtaWdodAoraGF2ZSBtb3JlIGNvbXBsaWNhdGVkIHN0cnVjdHVyZS4KKworPWN1dAorCitzdWIgY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUgeworCWxvY2FsICQ/OworCW15ICgkcGlkLCAkaW4sICRvdXQsICRjdHgpID0gQF87CisJZm9yZWFjaCBteSAkZmggKCRpbiwgJG91dCkgeworCQl1bmxlc3MgKGNsb3NlICRmaCkgeworCQkJaWYgKCQhKSB7CisJCQkJY2FycCAiZXJyb3IgY2xvc2luZyBwaXBlOiAkISI7CisJCQl9IGVsc2lmICgkPyA+PiA4KSB7CisJCQkJdGhyb3cgR2l0OjpFcnJvcjo6Q29tbWFuZCgkY3R4LCAkPyA+PjgpOworCQkJfQorCQl9CisJfQorCisJd2FpdHBpZCAkcGlkLCAwOworCisJaWYgKCQ/ID4+IDgpIHsKKwkJdGhyb3cgR2l0OjpFcnJvcjo6Q29tbWFuZCgkY3R4LCAkPyA+PjgpOworCX0KK30KKworCis9aXRlbSBjb21tYW5kX25vaXN5ICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEM8Q09NTUFORD4gaW4gdGhlIHNhbWUgd2F5IGFzIGNvbW1hbmQoKSBkb2VzIGJ1dCBkbyBub3QKK2NhcHR1cmUgdGhlIGNvbW1hbmQgb3V0cHV0IC0gdGhlIHN0YW5kYXJkIG91dHB1dCBpcyBub3QgcmVkaXJlY3RlZCBhbmQgZ29lcwordG8gdGhlIHN0YW5kYXJkIG91dHB1dCBvZiB0aGUgY2FsbGVyIGFwcGxpY2F0aW9uLgorCitXaGlsZSB0aGUgbWV0aG9kIGlzIGNhbGxlZCBjb21tYW5kX25vaXN5KCksIHlvdSBtaWdodCB3YW50IHRvIGFzIHdlbGwgdXNlCitpdCBmb3IgdGhlIG1vc3Qgc2lsZW50IEdpdCBjb21tYW5kcyB3aGljaCB5b3Uga25vdyB3aWxsIG5ldmVyIHBvbGx1dGUgeW91cgorc3Rkb3V0IGJ1dCB5b3Ugd2FudCB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgdGhlIHBpcGUgc2V0dXAgd2hlbiBjYWxsaW5nIHRoZW0uCisKK1RoZSBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYWZ0ZXIgdGhlIGNvbW1hbmQgaGFzIGZpbmlzaGVkIHJ1bm5pbmcuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfbm9pc3kgeworCW15ICgkc2VsZiwgJGNtZCwgQGFyZ3MpID0gX21heWJlX3NlbGYoQF8pOworCV9jaGVja192YWxpZF9jbWQoJGNtZCk7CisKKwlteSAkcGlkID0gZm9yazsKKwlpZiAobm90IGRlZmluZWQgJHBpZCkgeworCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJmb3JrIGZhaWxlZDogJCEiKTsKKwl9IGVsc2lmICgkcGlkID09IDApIHsKKwkJX2NtZF9leGVjKCRzZWxmLCAkY21kLCBAYXJncyk7CisJfQorCWlmICh3YWl0cGlkKCRwaWQsIDApID4gMCBhbmQgJD8+PjggIT0gMCkgeworCQl0aHJvdyBHaXQ6OkVycm9yOjpDb21tYW5kKGpvaW4oJyAnLCAkY21kLCBAYXJncyksICQ/ID4+IDgpOworCX0KK30KKworCis9aXRlbSB2ZXJzaW9uICgpCisKK1JldHVybiB0aGUgR2l0IHZlcnNpb24gaW4gdXNlLgorCis9Y3V0CisKK3N1YiB2ZXJzaW9uIHsKKwlteSAkdmVyc3RyID0gY29tbWFuZF9vbmVsaW5lKCctLXZlcnNpb24nKTsKKwkkdmVyc3RyID1+IHMvXmdpdCB2ZXJzaW9uIC8vOworCSR2ZXJzdHI7Cit9CisKKworPWl0ZW0gZXhlY19wYXRoICgpCisKK1JldHVybiBwYXRoIHRvIHRoZSBHaXQgc3ViLWNvbW1hbmQgZXhlY3V0YWJsZXMgKHRoZSBzYW1lIGFzCitDPGdpdCAtLWV4ZWMtcGF0aD4pLiBVc2VmdWwgbW9zdGx5IG9ubHkgaW50ZXJuYWxseS4KKworPWN1dAorCitzdWIgZXhlY19wYXRoIHsgY29tbWFuZF9vbmVsaW5lKCctLWV4ZWMtcGF0aCcpIH0KKworCis9aXRlbSBodG1sX3BhdGggKCkKKworUmV0dXJuIHBhdGggdG8gdGhlIEdpdCBodG1sIGRvY3VtZW50YXRpb24gKHRoZSBzYW1lIGFzCitDPGdpdCAtLWh0bWwtcGF0aD4pLiBVc2VmdWwgbW9zdGx5IG9ubHkgaW50ZXJuYWxseS4KKworPWN1dAorCitzdWIgaHRtbF9wYXRoIHsgY29tbWFuZF9vbmVsaW5lKCctLWh0bWwtcGF0aCcpIH0KKworCis9aXRlbSByZXBvX3BhdGggKCkKKworUmV0dXJuIHBhdGggdG8gdGhlIGdpdCByZXBvc2l0b3J5LiBNdXN0IGJlIGNhbGxlZCBvbiBhIHJlcG9zaXRvcnkgaW5zdGFuY2UuCisKKz1jdXQKKworc3ViIHJlcG9fcGF0aCB7ICRfWzBdLT57b3B0c30tPntSZXBvc2l0b3J5fSB9CisKKworPWl0ZW0gd2NfcGF0aCAoKQorCitSZXR1cm4gcGF0aCB0byB0aGUgd29ya2luZyBjb3B5LiBNdXN0IGJlIGNhbGxlZCBvbiBhIHJlcG9zaXRvcnkgaW5zdGFuY2UuCisKKz1jdXQKKworc3ViIHdjX3BhdGggeyAkX1swXS0+e29wdHN9LT57V29ya2luZ0NvcHl9IH0KKworCis9aXRlbSB3Y19zdWJkaXIgKCkKKworUmV0dXJuIHBhdGggdG8gdGhlIHN1YmRpcmVjdG9yeSBpbnNpZGUgb2YgYSB3b3JraW5nIGNvcHkuIE11c3QgYmUgY2FsbGVkCitvbiBhIHJlcG9zaXRvcnkgaW5zdGFuY2UuCisKKz1jdXQKKworc3ViIHdjX3N1YmRpciB7ICRfWzBdLT57b3B0c30tPntXb3JraW5nU3ViZGlyfSB8fD0gJycgfQorCisKKz1pdGVtIHdjX2NoZGlyICggU1VCRElSICkKKworQ2hhbmdlIHRoZSB3b3JraW5nIGNvcHkgc3ViZGlyZWN0b3J5IHRvIHdvcmsgd2l0aGluLiBUaGUgQzxTVUJESVI+IGlzCityZWxhdGl2ZSB0byB0aGUgd29ya2luZyBjb3B5IHJvb3QgZGlyZWN0b3J5IChub3QgdGhlIGN1cnJlbnQgc3ViZGlyZWN0b3J5KS4KK011c3QgYmUgY2FsbGVkIG9uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZSBhdHRhY2hlZCB0byBhIHdvcmtpbmcgY29weQorYW5kIHRoZSBkaXJlY3RvcnkgbXVzdCBleGlzdC4KKworPWN1dAorCitzdWIgd2NfY2hkaXIgeworCW15ICgkc2VsZiwgJHN1YmRpcikgPSBAXzsKKwkkc2VsZi0+d2NfcGF0aCgpCisJCW9yIHRocm93IEVycm9yOjpTaW1wbGUoImJhcmUgcmVwb3NpdG9yeSIpOworCisJLWQgJHNlbGYtPndjX3BhdGgoKS4nLycuJHN1YmRpcgorCQlvciB0aHJvdyBFcnJvcjo6U2ltcGxlKCJzdWJkaXIgbm90IGZvdW5kOiAkc3ViZGlyICQhIik7CisJIyBPZiBjb3Vyc2Ugd2Ugd2lsbCBub3QgImhvbGQiIHRoZSBzdWJkaXJlY3Rvcnkgc28gYW55b25lCisJIyBjYW4gZGVsZXRlIGl0IG5vdyBhbmQgd2Ugd2lsbCBuZXZlciBrbm93LiBCdXQgYXQgbGVhc3Qgd2UgdHJpZWQuCisKKwkkc2VsZi0+e29wdHN9LT57V29ya2luZ1N1YmRpcn0gPSAkc3ViZGlyOworfQorCisKKz1pdGVtIGNvbmZpZyAoIFZBUklBQkxFICkKKworUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gQzxWQVJJQUJMRT4gaW4gdGhlIHNhbWUgbWFubmVyIGFzIEM8Y29uZmlnPgorZG9lcy4gSW4gc2NhbGFyIGNvbnRleHQgcmVxdWlyZXMgdGhlIHZhcmlhYmxlIHRvIGJlIHNldCBvbmx5IG9uZSB0aW1lCisoZXhjZXB0aW9uIGlzIHRocm93biBvdGhlcndpc2UpLCBpbiBhcnJheSBjb250ZXh0IHJldHVybnMgYWxsb3dzIHRoZQordmFyaWFibGUgdG8gYmUgc2V0IG11bHRpcGxlIHRpbWVzIGFuZCByZXR1cm5zIGFsbCB0aGUgdmFsdWVzLgorCis9Y3V0CisKK3N1YiBjb25maWcgeworCXJldHVybiBfY29uZmlnX2NvbW1vbih7fSwgQF8pOworfQorCisKKz1pdGVtIGNvbmZpZ19ib29sICggVkFSSUFCTEUgKQorCitSZXRyaWV2ZSB0aGUgYm9vbCBjb25maWd1cmF0aW9uIEM8VkFSSUFCTEU+LiBUaGUgcmV0dXJuIHZhbHVlCitpcyB1c2FibGUgYXMgYSBib29sZWFuIGluIHBlcmwgKGFuZCBDPHVuZGVmPiBpZiBpdCdzIG5vdCBkZWZpbmVkLAorb2YgY291cnNlKS4KKworPWN1dAorCitzdWIgY29uZmlnX2Jvb2wgeworCW15ICR2YWwgPSBzY2FsYXIgX2NvbmZpZ19jb21tb24oeydraW5kJyA9PiAnLS1ib29sJ30sIEBfKTsKKworCSMgRG8gbm90IHJld3JpdGUgdGhpcyBhcyByZXR1cm4gKGRlZmluZWQgJHZhbCAmJiAkdmFsIGVxICd0cnVlJykKKwkjIGFzIHNvbWUgY2FsbGVycyBkbyBjYXJlIHdoYXQga2luZCBvZiBmYWxzZWhvb2QgdGhleSByZWNlaXZlLgorCWlmICghZGVmaW5lZCAkdmFsKSB7CisJCXJldHVybiB1bmRlZjsKKwl9IGVsc2UgeworCQlyZXR1cm4gJHZhbCBlcSAndHJ1ZSc7CisJfQorfQorCisKKz1pdGVtIGNvbmZpZ19wYXRoICggVkFSSUFCTEUgKQorCitSZXRyaWV2ZSB0aGUgcGF0aCBjb25maWd1cmF0aW9uIEM8VkFSSUFCTEU+LiBUaGUgcmV0dXJuIHZhbHVlCitpcyBhbiBleHBhbmRlZCBwYXRoIG9yIEM8dW5kZWY+IGlmIGl0J3Mgbm90IGRlZmluZWQuCisKKz1jdXQKKworc3ViIGNvbmZpZ19wYXRoIHsKKwlyZXR1cm4gX2NvbmZpZ19jb21tb24oeydraW5kJyA9PiAnLS1wYXRoJ30sIEBfKTsKK30KKworCis9aXRlbSBjb25maWdfaW50ICggVkFSSUFCTEUgKQorCitSZXRyaWV2ZSB0aGUgaW50ZWdlciBjb25maWd1cmF0aW9uIEM8VkFSSUFCTEU+LiBUaGUgcmV0dXJuIHZhbHVlCitpcyBzaW1wbGUgZGVjaW1hbCBudW1iZXIuICBBbiBvcHRpb25hbCB2YWx1ZSBzdWZmaXggb2YgJ2snLCAnbScsCitvciAnZycgaW4gdGhlIGNvbmZpZyBmaWxlIHdpbGwgY2F1c2UgdGhlIHZhbHVlIHRvIGJlIG11bHRpcGxpZWQKK2J5IDEwMjQsIDEwNDg1NzYgKDEwMjReMiksIG9yIDEwNzM3NDE4MjQgKDEwMjReMykgcHJpb3IgdG8gb3V0cHV0LgorSXQgd291bGQgcmV0dXJuIEM8dW5kZWY+IGlmIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbm90IGRlZmluZWQsCisKKz1jdXQKKworc3ViIGNvbmZpZ19pbnQgeworCXJldHVybiBzY2FsYXIgX2NvbmZpZ19jb21tb24oeydraW5kJyA9PiAnLS1pbnQnfSwgQF8pOworfQorCisjIENvbW1vbiBzdWJyb3V0aW5lIHRvIGltcGxlbWVudCBidWxrIG9mIHdoYXQgdGhlIGNvbmZpZyogZmFtaWx5IG9mIG1ldGhvZHMKKyMgZG8uIFRoaXMgY3VyZW50bHkgd3JhcHMgY29tbWFuZCgnY29uZmlnJykgc28gaXQgaXMgbm90IHNvIGZhc3QuCitzdWIgX2NvbmZpZ19jb21tb24geworCW15ICgkb3B0cykgPSBzaGlmdCBAXzsKKwlteSAoJHNlbGYsICR2YXIpID0gX21heWJlX3NlbGYoQF8pOworCisJdHJ5IHsKKwkJbXkgQGNtZCA9ICgnY29uZmlnJywgJG9wdHMtPnsna2luZCd9ID8gJG9wdHMtPnsna2luZCd9IDogKCkpOworCQl1bnNoaWZ0IEBjbWQsICRzZWxmIGlmICRzZWxmOworCQlpZiAod2FudGFycmF5KSB7CisJCQlyZXR1cm4gY29tbWFuZChAY21kLCAnLS1nZXQtYWxsJywgJHZhcik7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gY29tbWFuZF9vbmVsaW5lKEBjbWQsICctLWdldCcsICR2YXIpOworCQl9CisJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggeworCQlteSAkRSA9IHNoaWZ0OworCQlpZiAoJEUtPnZhbHVlKCkgPT0gMSkgeworCQkJIyBLZXkgbm90IGZvdW5kLgorCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJdGhyb3cgJEU7CisJCX0KKwl9OworfQorCis9aXRlbSBnZXRfY29sb3Jib29sICggTkFNRSApCisKK0ZpbmRzIGlmIGNvbG9yIHNob3VsZCBiZSB1c2VkIGZvciBOQU1FZCBvcGVyYXRpb24gZnJvbSB0aGUgY29uZmlndXJhdGlvbiwKK2FuZCByZXR1cm5zIGJvb2xlYW4gKHRydWUgZm9yICJ1c2UgY29sb3IiLCBmYWxzZSBmb3IgImRvIG5vdCB1c2UgY29sb3IiKS4KKworPWN1dAorCitzdWIgZ2V0X2NvbG9yYm9vbCB7CisJbXkgKCRzZWxmLCAkdmFyKSA9IEBfOworCW15ICRzdGRvdXRfdG9fdHR5ID0gKC10IFNURE9VVCkgPyAidHJ1ZSIgOiAiZmFsc2UiOworCW15ICR1c2VfY29sb3IgPSAkc2VsZi0+Y29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQtY29sb3Jib29sJywKKwkJCQkJICAgICAgICR2YXIsICRzdGRvdXRfdG9fdHR5KTsKKwlyZXR1cm4gKCR1c2VfY29sb3IgZXEgJ3RydWUnKTsKK30KKworPWl0ZW0gZ2V0X2NvbG9yICggU0xPVCwgQ09MT1IgKQorCitGaW5kcyBjb2xvciBmb3IgU0xPVCBmcm9tIHRoZSBjb25maWd1cmF0aW9uLCB3aGlsZSBkZWZhdWx0aW5nIHRvIENPTE9SLAorYW5kIHJldHVybnMgdGhlIEFOU0kgY29sb3IgZXNjYXBlIHNlcXVlbmNlOgorCisJcHJpbnQgJHJlcG8tPmdldF9jb2xvcigiY29sb3IuaW50ZXJhY3RpdmUucHJvbXB0IiwgInVuZGVybGluZSBibHVlIHdoaXRlIik7CisJcHJpbnQgInNvbWUgdGV4dCI7CisJcHJpbnQgJHJlcG8tPmdldF9jb2xvcigiIiwgIm5vcm1hbCIpOworCis9Y3V0CisKK3N1YiBnZXRfY29sb3IgeworCW15ICgkc2VsZiwgJHNsb3QsICRkZWZhdWx0KSA9IEBfOworCW15ICRjb2xvciA9ICRzZWxmLT5jb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldC1jb2xvcicsICRzbG90LCAkZGVmYXVsdCk7CisJaWYgKCFkZWZpbmVkICRjb2xvcikgeworCQkkY29sb3IgPSAiIjsKKwl9CisJcmV0dXJuICRjb2xvcjsKK30KKworPWl0ZW0gcmVtb3RlX3JlZnMgKCBSRVBPU0lUT1JZIFssIEdST1VQUyBbLCBSRUZHTE9CUyBdIF0gKQorCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNocmVmIG9mIHJlZnMgc3RvcmVkIGluIGEgZ2l2ZW4gcmVtb3RlIHJlcG9zaXRvcnkuCitUaGUgaGFzaCBpcyBpbiB0aGUgZm9ybWF0IEM8cmVmbmFtZSA9XD4gaGFzaD4uIEZvciB0YWdzLCB0aGUgQzxyZWZuYW1lPiBlbnRyeQorY29udGFpbnMgdGhlIHRhZyBvYmplY3Qgd2hpbGUgYSBDPHJlZm5hbWVee30+IGVudHJ5IGdpdmVzIHRoZSB0YWdnZWQgb2JqZWN0cy4KKworQzxSRVBPU0lUT1JZPiBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgYXBwcm9wcmlhdGUgQzxnaXQtbHMtcmVtb3RlPgorYXJndW1lbnQ7IGVpdGhlciBhIFVSTCBvciBhIHJlbW90ZSBuYW1lIChpZiBjYWxsZWQgb24gYSByZXBvc2l0b3J5IGluc3RhbmNlKS4KK0M8R1JPVVBTPiBpcyBhbiBvcHRpb25hbCBhcnJheXJlZiB0aGF0IGNhbiBjb250YWluICd0YWdzJyB0byByZXR1cm4gYWxsIHRoZQordGFncyBhbmQvb3IgJ2hlYWRzJyB0byByZXR1cm4gYWxsIHRoZSBoZWFkcy4gQzxSRUZHTE9CPiBpcyBhbiBvcHRpb25hbCBhcnJheQorb2Ygc3RyaW5ncyBjb250YWluaW5nIGEgc2hlbGwtbGlrZSBnbG9iIHRvIGZ1cnRoZXIgbGltaXQgdGhlIHJlZnMgcmV0dXJuZWQgaW4KK3RoZSBoYXNoOyB0aGUgbWVhbmluZyBpcyBhZ2FpbiB0aGUgc2FtZSBhcyB0aGUgYXBwcm9wcmlhdGUgQzxnaXQtbHMtcmVtb3RlPgorYXJndW1lbnQuCisKK1RoaXMgZnVuY3Rpb24gbWF5IG9yIG1heSBub3QgYmUgY2FsbGVkIG9uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZS4gSW4gdGhlIGZvcm1lcgorY2FzZSwgcmVtb3RlIG5hbWVzIGFzIGRlZmluZWQgaW4gdGhlIHJlcG9zaXRvcnkgYXJlIHJlY29nbml6ZWQgYXMgcmVwb3NpdG9yeQorc3BlY2lmaWVycy4KKworPWN1dAorCitzdWIgcmVtb3RlX3JlZnMgeworCW15ICgkc2VsZiwgJHJlcG8sICRncm91cHMsICRyZWZnbG9icykgPSBfbWF5YmVfc2VsZihAXyk7CisJbXkgQGFyZ3M7CisJaWYgKHJlZiAkZ3JvdXBzIGVxICdBUlJBWScpIHsKKwkJZm9yZWFjaCAoQCRncm91cHMpIHsKKwkJCWlmICgkXyBlcSAnaGVhZHMnKSB7CisJCQkJcHVzaCAoQGFyZ3MsICctLWhlYWRzJyk7CisJCQl9IGVsc2lmICgkXyBlcSAndGFncycpIHsKKwkJCQlwdXNoIChAYXJncywgJy0tdGFncycpOworCQkJfSBlbHNlIHsKKwkJCQkjIElnbm9yZSB1bmtub3duIGdyb3VwcyBmb3IgZnV0dXJlCisJCQkJIyBjb21wYXRpYmlsaXR5CisJCQl9CisJCX0KKwl9CisJcHVzaCAoQGFyZ3MsICRyZXBvKTsKKwlpZiAocmVmICRyZWZnbG9icyBlcSAnQVJSQVknKSB7CisJCXB1c2ggKEBhcmdzLCBAJHJlZmdsb2JzKTsKKwl9CisKKwlteSBAc2VsZiA9ICRzZWxmID8gKCRzZWxmKSA6ICgpOyAjIFVsdHJhIHRyaWNrZXJ5CisJbXkgKCRmaCwgJGN0eCkgPSBHaXQ6OmNvbW1hbmRfb3V0cHV0X3BpcGUoQHNlbGYsICdscy1yZW1vdGUnLCBAYXJncyk7CisJbXkgJXJlZnM7CisJd2hpbGUgKDwkZmg+KSB7CisJCWNob21wOworCQlteSAoJGhhc2gsICRyZWYpID0gc3BsaXQoL1x0LywgJF8sIDIpOworCQkkcmVmc3skcmVmfSA9ICRoYXNoOworCX0KKwlHaXQ6OmNvbW1hbmRfY2xvc2VfcGlwZShAc2VsZiwgJGZoLCAkY3R4KTsKKwlyZXR1cm4gXCVyZWZzOworfQorCisKKz1pdGVtIGlkZW50ICggVFlQRSB8IElERU5UU1RSICkKKworPWl0ZW0gaWRlbnRfcGVyc29uICggVFlQRSB8IElERU5UU1RSIHwgSURFTlRBUlJBWSApCisKK1RoaXMgc3VpdGUgb2YgZnVuY3Rpb25zIHJldHJpZXZlcyBhbmQgcGFyc2VzIGlkZW50IGluZm9ybWF0aW9uLCBhcyBzdG9yZWQKK2luIHRoZSBjb21taXQgYW5kIHRhZyBvYmplY3RzIG9yIHByb2R1Y2VkIGJ5IEM8dmFyIEdJVF90eXBlX0lERU5UPiAodGh1cworQzxUWVBFPiBjYW4gYmUgZWl0aGVyIEk8YXV0aG9yPiBvciBJPGNvbW1pdHRlcj47IGNhc2UgaXMgaW5zaWduaWZpY2FudCkuCisKK1RoZSBDPGlkZW50PiBtZXRob2QgcmV0cmlldmVzIHRoZSBpZGVudCBpbmZvcm1hdGlvbiBmcm9tIEM8Z2l0IHZhcj4KK2FuZCBlaXRoZXIgcmV0dXJucyBpdCBhcyBhIHNjYWxhciBzdHJpbmcgb3IgYXMgYW4gYXJyYXkgd2l0aCB0aGUgZmllbGRzIHBhcnNlZC4KK0FsdGVybmF0aXZlbHksIGl0IGNhbiB0YWtlIGEgcHJlcGFyZWQgaWRlbnQgc3RyaW5nIChlLmcuIGZyb20gdGhlIGNvbW1pdAorb2JqZWN0KSBhbmQganVzdCBwYXJzZSBpdC4KKworQzxpZGVudF9wZXJzb24+IHJldHVybnMgdGhlIHBlcnNvbiBwYXJ0IG9mIHRoZSBpZGVudCAtIG5hbWUgYW5kIGVtYWlsOworaXQgY2FuIHRha2UgdGhlIHNhbWUgYXJndW1lbnRzIGFzIEM8aWRlbnQ+IG9yIHRoZSBhcnJheSByZXR1cm5lZCBieSBDPGlkZW50Pi4KKworVGhlIHN5bm9wc2lzIGlzIGxpa2U6CisKKwlteSAoJG5hbWUsICRlbWFpbCwgJHRpbWVfdHopID0gaWRlbnQoJ2F1dGhvcicpOworCSIkbmFtZSA8JGVtYWlsPiIgZXEgaWRlbnRfcGVyc29uKCdhdXRob3InKTsKKwkiJG5hbWUgPCRlbWFpbD4iIGVxIGlkZW50X3BlcnNvbigkbmFtZSk7CisJJHRpbWVfdHogPX4gL15cZCsgWystXVxkezR9JC87CisKKz1jdXQKKworc3ViIGlkZW50IHsKKwlteSAoJHNlbGYsICR0eXBlKSA9IF9tYXliZV9zZWxmKEBfKTsKKwlteSAkaWRlbnRzdHI7CisJaWYgKGxjICR0eXBlIGVxIGxjICdjb21taXR0ZXInIG9yIGxjICR0eXBlIGVxIGxjICdhdXRob3InKSB7CisJCW15IEBjbWQgPSAoJ3ZhcicsICdHSVRfJy51YygkdHlwZSkuJ19JREVOVCcpOworCQl1bnNoaWZ0IEBjbWQsICRzZWxmIGlmICRzZWxmOworCQkkaWRlbnRzdHIgPSBjb21tYW5kX29uZWxpbmUoQGNtZCk7CisJfSBlbHNlIHsKKwkJJGlkZW50c3RyID0gJHR5cGU7CisJfQorCWlmICh3YW50YXJyYXkpIHsKKwkJcmV0dXJuICRpZGVudHN0ciA9fiAvXiguKikgPCguKik+IChcZCsgWystXVxkezR9KSQvOworCX0gZWxzZSB7CisJCXJldHVybiAkaWRlbnRzdHI7CisJfQorfQorCitzdWIgaWRlbnRfcGVyc29uIHsKKwlteSAoJHNlbGYsIEBpZGVudCkgPSBfbWF5YmVfc2VsZihAXyk7CisJJCNpZGVudCA9PSAwIGFuZCBAaWRlbnQgPSAkc2VsZiA/ICRzZWxmLT5pZGVudCgkaWRlbnRbMF0pIDogaWRlbnQoJGlkZW50WzBdKTsKKwlyZXR1cm4gIiRpZGVudFswXSA8JGlkZW50WzFdPiI7Cit9CisKKworPWl0ZW0gaGFzaF9vYmplY3QgKCBUWVBFLCBGSUxFTkFNRSApCisKK0NvbXB1dGUgdGhlIFNIQTEgb2JqZWN0IGlkIG9mIHRoZSBnaXZlbiBDPEZJTEVOQU1FPiBjb25zaWRlcmluZyBpdCBpcworb2YgdGhlIEM8VFlQRT4gb2JqZWN0IHR5cGUgKEM8YmxvYj4sIEM8Y29tbWl0PiwgQzx0cmVlPikuCisKK1RoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGFueSBpbnN0YW5jZSBvciBvbiBhIHNwZWNpZmllZCBHaXQgcmVwb3NpdG9yeSwKK2l0IG1ha2VzIHplcm8gZGlmZmVyZW5jZS4KKworVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIFNIQTEgaGFzaC4KKworPWN1dAorCisjIFRPRE86IFN1cHBvcnQgZm9yIHBhc3NpbmcgRklMRUhBTkRMRSBpbnN0ZWFkIG9mIEZJTEVOQU1FCitzdWIgaGFzaF9vYmplY3QgeworCW15ICgkc2VsZiwgJHR5cGUsICRmaWxlKSA9IF9tYXliZV9zZWxmKEBfKTsKKwljb21tYW5kX29uZWxpbmUoJ2hhc2gtb2JqZWN0JywgJy10JywgJHR5cGUsICRmaWxlKTsKK30KKworCis9aXRlbSBoYXNoX2FuZF9pbnNlcnRfb2JqZWN0ICggRklMRU5BTUUgKQorCitDb21wdXRlIHRoZSBTSEExIG9iamVjdCBpZCBvZiB0aGUgZ2l2ZW4gQzxGSUxFTkFNRT4gYW5kIGFkZCB0aGUgb2JqZWN0IHRvIHRoZQorb2JqZWN0IGRhdGFiYXNlLgorCitUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgU0hBMSBoYXNoLgorCis9Y3V0CisKKyMgVE9ETzogU3VwcG9ydCBmb3IgcGFzc2luZyBGSUxFSEFORExFIGluc3RlYWQgb2YgRklMRU5BTUUKK3N1YiBoYXNoX2FuZF9pbnNlcnRfb2JqZWN0IHsKKwlteSAoJHNlbGYsICRmaWxlbmFtZSkgPSBAXzsKKworCWNhcnAgIkJhZCBmaWxlbmFtZSBcIiRmaWxlbmFtZVwiIiBpZiAkZmlsZW5hbWUgPX4gL1tcclxuXS87CisKKwkkc2VsZi0+X29wZW5faGFzaF9hbmRfaW5zZXJ0X29iamVjdF9pZl9uZWVkZWQoKTsKKwlteSAoJGluLCAkb3V0KSA9ICgkc2VsZi0+e2hhc2hfb2JqZWN0X2lufSwgJHNlbGYtPntoYXNoX29iamVjdF9vdXR9KTsKKworCXVubGVzcyAocHJpbnQgJG91dCAkZmlsZW5hbWUsICJcbiIpIHsKKwkJJHNlbGYtPl9jbG9zZV9oYXNoX2FuZF9pbnNlcnRfb2JqZWN0KCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoIm91dCBwaXBlIHdlbnQgYmFkIik7CisJfQorCisJY2hvbXAobXkgJGhhc2ggPSA8JGluPik7CisJdW5sZXNzIChkZWZpbmVkKCRoYXNoKSkgeworCQkkc2VsZi0+X2Nsb3NlX2hhc2hfYW5kX2luc2VydF9vYmplY3QoKTsKKwkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiaW4gcGlwZSB3ZW50IGJhZCIpOworCX0KKworCXJldHVybiAkaGFzaDsKK30KKworc3ViIF9vcGVuX2hhc2hfYW5kX2luc2VydF9vYmplY3RfaWZfbmVlZGVkIHsKKwlteSAoJHNlbGYpID0gQF87CisKKwlyZXR1cm4gaWYgZGVmaW5lZCgkc2VsZi0+e2hhc2hfb2JqZWN0X3BpZH0pOworCisJKCRzZWxmLT57aGFzaF9vYmplY3RfcGlkfSwgJHNlbGYtPntoYXNoX29iamVjdF9pbn0sCisJICRzZWxmLT57aGFzaF9vYmplY3Rfb3V0fSwgJHNlbGYtPntoYXNoX29iamVjdF9jdHh9KSA9CisJCSRzZWxmLT5jb21tYW5kX2JpZGlfcGlwZShxdyhoYXNoLW9iamVjdCAtdyAtLXN0ZGluLXBhdGhzIC0tbm8tZmlsdGVycykpOworfQorCitzdWIgX2Nsb3NlX2hhc2hfYW5kX2luc2VydF9vYmplY3QgeworCW15ICgkc2VsZikgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCgkc2VsZi0+e2hhc2hfb2JqZWN0X3BpZH0pOworCisJbXkgQHZhcnMgPSBtYXAgeyAnaGFzaF9vYmplY3RfJyAuICRfIH0gcXcocGlkIGluIG91dCBjdHgpOworCisJY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoQCRzZWxme0B2YXJzfSk7CisJZGVsZXRlIEAkc2VsZntAdmFyc307Cit9CisKKz1pdGVtIGNhdF9ibG9iICggU0hBMSwgRklMRUhBTkRMRSApCisKK1ByaW50cyB0aGUgY29udGVudHMgb2YgdGhlIGJsb2IgaWRlbnRpZmllZCBieSBDPFNIQTE+IHRvIEM8RklMRUhBTkRMRT4gYW5kCityZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcHJpbnRlZC4KKworPWN1dAorCitzdWIgY2F0X2Jsb2IgeworCW15ICgkc2VsZiwgJHNoYTEsICRmaCkgPSBAXzsKKworCSRzZWxmLT5fb3Blbl9jYXRfYmxvYl9pZl9uZWVkZWQoKTsKKwlteSAoJGluLCAkb3V0KSA9ICgkc2VsZi0+e2NhdF9ibG9iX2lufSwgJHNlbGYtPntjYXRfYmxvYl9vdXR9KTsKKworCXVubGVzcyAocHJpbnQgJG91dCAkc2hhMSwgIlxuIikgeworCQkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoIm91dCBwaXBlIHdlbnQgYmFkIik7CisJfQorCisJbXkgJGRlc2NyaXB0aW9uID0gPCRpbj47CisJaWYgKCRkZXNjcmlwdGlvbiA9fiAvIG1pc3NpbmckLykgeworCQljYXJwICIkc2hhMSBkb2Vzbid0IGV4aXN0IGluIHRoZSByZXBvc2l0b3J5IjsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgkZGVzY3JpcHRpb24gIX4gL15bMC05YS1mQS1GXXs0MH0gXFMrIChcZCspJC8pIHsKKwkJY2FycCAiVW5leHBlY3RlZCByZXN1bHQgcmV0dXJuZWQgZnJvbSBnaXQgY2F0LWZpbGUiOworCQlyZXR1cm4gLTE7CisJfQorCisJbXkgJHNpemUgPSAkMTsKKworCW15ICRibG9iOworCW15ICRieXRlc1JlYWQgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJbXkgJGJ5dGVzTGVmdCA9ICRzaXplIC0gJGJ5dGVzUmVhZDsKKwkJbGFzdCB1bmxlc3MgJGJ5dGVzTGVmdDsKKworCQlteSAkYnl0ZXNUb1JlYWQgPSAkYnl0ZXNMZWZ0IDwgMTAyNCA/ICRieXRlc0xlZnQgOiAxMDI0OworCQlteSAkcmVhZCA9IHJlYWQoJGluLCAkYmxvYiwgJGJ5dGVzVG9SZWFkLCAkYnl0ZXNSZWFkKTsKKwkJdW5sZXNzIChkZWZpbmVkKCRyZWFkKSkgeworCQkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiaW4gcGlwZSB3ZW50IGJhZCIpOworCQl9CisKKwkJJGJ5dGVzUmVhZCArPSAkcmVhZDsKKwl9CisKKwkjIFNraXAgcGFzdCB0aGUgdHJhaWxpbmcgbmV3bGluZS4KKwlteSAkbmV3bGluZTsKKwlteSAkcmVhZCA9IHJlYWQoJGluLCAkbmV3bGluZSwgMSk7CisJdW5sZXNzIChkZWZpbmVkKCRyZWFkKSkgeworCQkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoImluIHBpcGUgd2VudCBiYWQiKTsKKwl9CisJdW5sZXNzICgkcmVhZCA9PSAxICYmICRuZXdsaW5lIGVxICJcbiIpIHsKKwkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJkaWRuJ3QgZmluZCBuZXdsaW5lIGFmdGVyIGJsb2IiKTsKKwl9CisKKwl1bmxlc3MgKHByaW50ICRmaCAkYmxvYikgeworCQkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoImNvdWxkbid0IHdyaXRlIHRvIHBhc3NlZCBpbiBmaWxlaGFuZGxlIik7CisJfQorCisJcmV0dXJuICRzaXplOworfQorCitzdWIgX29wZW5fY2F0X2Jsb2JfaWZfbmVlZGVkIHsKKwlteSAoJHNlbGYpID0gQF87CisKKwlyZXR1cm4gaWYgZGVmaW5lZCgkc2VsZi0+e2NhdF9ibG9iX3BpZH0pOworCisJKCRzZWxmLT57Y2F0X2Jsb2JfcGlkfSwgJHNlbGYtPntjYXRfYmxvYl9pbn0sCisJICRzZWxmLT57Y2F0X2Jsb2Jfb3V0fSwgJHNlbGYtPntjYXRfYmxvYl9jdHh9KSA9CisJCSRzZWxmLT5jb21tYW5kX2JpZGlfcGlwZShxdyhjYXQtZmlsZSAtLWJhdGNoKSk7Cit9CisKK3N1YiBfY2xvc2VfY2F0X2Jsb2IgeworCW15ICgkc2VsZikgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCgkc2VsZi0+e2NhdF9ibG9iX3BpZH0pOworCisJbXkgQHZhcnMgPSBtYXAgeyAnY2F0X2Jsb2JfJyAuICRfIH0gcXcocGlkIGluIG91dCBjdHgpOworCisJY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoQCRzZWxme0B2YXJzfSk7CisJZGVsZXRlIEAkc2VsZntAdmFyc307Cit9CisKKworeyAjICVURU1QXyogTGV4aWNhbCBDb250ZXh0CisKK215ICglVEVNUF9GSUxFTUFQLCAlVEVNUF9GSUxFUyk7CisKKz1pdGVtIHRlbXBfYWNxdWlyZSAoIE5BTUUgKQorCitBdHRlbXB0cyB0byByZXRyZWl2ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgbWFwcGVkIHRvIHRoZSBzdHJpbmcgQzxOQU1FPi4gSWYgYW4KK2Fzc29jaWF0ZWQgdGVtcCBmaWxlIGhhcyBub3QgYmVlbiBjcmVhdGVkIHRoaXMgc2Vzc2lvbiBvciB3YXMgY2xvc2VkLCBpdCBpcworY3JlYXRlZCwgY2FjaGVkLCBhbmQgc2V0IGZvciBhdXRvZmx1c2ggYW5kIGJpbm1vZGUuCisKK0ludGVybmFsbHkgbG9ja3MgdGhlIGZpbGUgbWFwcGVkIHRvIEM8TkFNRT4uIFRoaXMgbG9jayBtdXN0IGJlIHJlbGVhc2VkIHdpdGgKK0M8dGVtcF9yZWxlYXNlKCk+IHdoZW4gdGhlIHRlbXAgZmlsZSBpcyBubyBsb25nZXIgbmVlZGVkLiBTdWJzZXF1ZW50IGF0dGVtcHRzCit0byByZXRyaWV2ZSB0ZW1wb3JhcnkgZmlsZXMgbWFwcGVkIHRvIHRoZSBzYW1lIEM8TkFNRT4gd2hpbGUgc3RpbGwgbG9ja2VkIHdpbGwKK2NhdXNlIGFuIGVycm9yLiBUaGlzIGxvY2tpbmcgbWVjaGFuaXNtIHByb3ZpZGVzIGEgd2VhayBndWFyYW50ZWUgYW5kIGlzIG5vdAordGhyZWFkc2FmZS4gSXQgZG9lcyBwcm92aWRlIHNvbWUgZXJyb3IgY2hlY2tpbmcgdG8gaGVscCBwcmV2ZW50IHRlbXAgZmlsZSByZWZzCit3cml0aW5nIG92ZXIgb25lIGFub3RoZXIuCisKK0luIGdlbmVyYWwsIHRoZSBMPEZpbGU6OkhhbmRsZT4gcmV0dXJuZWQgc2hvdWxkIG5vdCBiZSBjbG9zZWQgYnkgY29uc3VtZXJzIGFzCitpdCBkZWZlYXRzIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2FjaGluZyBtZWNoYW5pc20uIElmIHlvdSBuZWVkIHRvIGNsb3NlIHRoZSB0ZW1wCitmaWxlIGhhbmRsZSwgdGhlbiB5b3Ugc2hvdWxkIHVzZSBMPEZpbGU6OlRlbXA+IG9yIGFub3RoZXIgdGVtcCBmaWxlIGZhY3VsdHkKK2RpcmVjdGx5LiBJZiBhIGhhbmRsZSBpcyBjbG9zZWQgYW5kIHRoZW4gcmVxdWVzdGVkIGFnYWluLCB0aGVuIGEgd2FybmluZyB3aWxsCitpc3N1ZS4KKworPWN1dAorCitzdWIgdGVtcF9hY3F1aXJlIHsKKwlteSAkdGVtcF9mZCA9IF90ZW1wX2NhY2hlKEBfKTsKKworCSRURU1QX0ZJTEVTeyR0ZW1wX2ZkfXtsb2NrZWR9ID0gMTsKKwkkdGVtcF9mZDsKK30KKworPWl0ZW0gdGVtcF9yZWxlYXNlICggTkFNRSApCisKKz1pdGVtIHRlbXBfcmVsZWFzZSAoIEZJTEVIQU5ETEUgKQorCitSZWxlYXNlcyBhIGxvY2sgYWNxdWlyZWQgdGhyb3VnaCBDPHRlbXBfYWNxdWlyZSgpPi4gQ2FuIGJlIGNhbGxlZCBlaXRoZXIgd2l0aAordGhlIEM8TkFNRT4gbWFwcGluZyB1c2VkIHdoZW4gYWNxdWlyaW5nIHRoZSB0ZW1wIGZpbGUgb3Igd2l0aCB0aGUgQzxGSUxFSEFORExFPgorcmVmZXJlbmNpbmcgYSBsb2NrZWQgdGVtcCBmaWxlLgorCitXYXJucyBpZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVsZWFzZSBhIGZpbGUgdGhhdCBpcyBub3QgbG9ja2VkLgorCitUaGUgdGVtcCBmaWxlIHdpbGwgYmUgdHJ1bmNhdGVkIGJlZm9yZSBiZWluZyByZWxlYXNlZC4gVGhpcyBjYW4gaGVscCB0byByZWR1Y2UKK2Rpc2sgSS9PIHdoZXJlIHRoZSBzeXN0ZW0gaXMgc21hcnQgZW5vdWdoIHRvIGRldGVjdCB0aGUgdHJ1bmNhdGlvbiB3aGlsZSBkYXRhCitpcyBpbiB0aGUgb3V0cHV0IGJ1ZmZlcnMuIEJld2FyZSB0aGF0IGFmdGVyIHRoZSB0ZW1wIGZpbGUgaXMgcmVsZWFzZWQgYW5kCit0cnVuY2F0ZWQsIGFueSBvcGVyYXRpb25zIG9uIHRoYXQgZmlsZSBtYXkgZmFpbCBtaXNlcmFibHkgdW50aWwgaXQgaXMKK3JlLWFjcXVpcmVkLiBBbGwgY29udGVudHMgYXJlIGxvc3QgYmV0d2VlbiBlYWNoIHJlbGVhc2UgYW5kIGFjcXVpcmUgbWFwcGVkIHRvCit0aGUgc2FtZSBzdHJpbmcuCisKKz1jdXQKKworc3ViIHRlbXBfcmVsZWFzZSB7CisJbXkgKCRzZWxmLCAkdGVtcF9mZCwgJHRydW5jKSA9IF9tYXliZV9zZWxmKEBfKTsKKworCWlmIChleGlzdHMgJFRFTVBfRklMRU1BUHskdGVtcF9mZH0pIHsKKwkJJHRlbXBfZmQgPSAkVEVNUF9GSUxFU3skdGVtcF9mZH07CisJfQorCXVubGVzcyAoJFRFTVBfRklMRVN7JHRlbXBfZmR9e2xvY2tlZH0pIHsKKwkJY2FycCAiQXR0ZW1wdCB0byByZWxlYXNlIHRlbXAgZmlsZSAnIiwKKwkJCSR0ZW1wX2ZkLCAiJyB0aGF0IGhhcyBub3QgYmVlbiBsb2NrZWQiOworCX0KKwl0ZW1wX3Jlc2V0KCR0ZW1wX2ZkKSBpZiAkdHJ1bmMgYW5kICR0ZW1wX2ZkLT5vcGVuZWQ7CisKKwkkVEVNUF9GSUxFU3skdGVtcF9mZH17bG9ja2VkfSA9IDA7CisJdW5kZWY7Cit9CisKK3N1YiBfdGVtcF9jYWNoZSB7CisJbXkgKCRzZWxmLCAkbmFtZSkgPSBfbWF5YmVfc2VsZihAXyk7CisKKwlfdmVyaWZ5X3JlcXVpcmUoKTsKKworCW15ICR0ZW1wX2ZkID0gXCRURU1QX0ZJTEVNQVB7JG5hbWV9OworCWlmIChkZWZpbmVkICQkdGVtcF9mZCBhbmQgJCR0ZW1wX2ZkLT5vcGVuZWQpIHsKKwkJaWYgKCRURU1QX0ZJTEVTeyQkdGVtcF9mZH17bG9ja2VkfSkgeworCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiVGVtcCBmaWxlIHdpdGggbW9uaWtlciAnIiAuCisJCQkJJG5hbWUgLiAiJyBhbHJlYWR5IGluIHVzZSIpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGRlZmluZWQgJCR0ZW1wX2ZkKSB7CisJCQkjIHRoZW4gd2UncmUgaGVyZSBiZWNhdXNlIG9mIGEgY2xvc2VkIGhhbmRsZS4KKwkJCWNhcnAgIlRlbXAgZmlsZSAnIiwgJG5hbWUsCisJCQkJIicgd2FzIGNsb3NlZC4gT3BlbmluZyByZXBsYWNlbWVudC4iOworCQl9CisJCW15ICRmbmFtZTsKKworCQlteSAkdG1wZGlyOworCQlpZiAoZGVmaW5lZCAkc2VsZikgeworCQkJJHRtcGRpciA9ICRzZWxmLT5yZXBvX3BhdGgoKTsKKwkJfQorCisJCSgkJHRlbXBfZmQsICRmbmFtZSkgPSBGaWxlOjpUZW1wLT50ZW1wZmlsZSgKKwkJCSdHaXRfWFhYWFhYJywgVU5MSU5LID0+IDEsIERJUiA9PiAkdG1wZGlyLAorCQkJKSBvciB0aHJvdyBFcnJvcjo6U2ltcGxlKCJjb3VsZG4ndCBvcGVuIG5ldyB0ZW1wIGZpbGUiKTsKKworCQkkJHRlbXBfZmQtPmF1dG9mbHVzaDsKKwkJYmlubW9kZSAkJHRlbXBfZmQ7CisJCSRURU1QX0ZJTEVTeyQkdGVtcF9mZH17Zm5hbWV9ID0gJGZuYW1lOworCX0KKwkkJHRlbXBfZmQ7Cit9CisKK3N1YiBfdmVyaWZ5X3JlcXVpcmUgeworCWV2YWwgeyByZXF1aXJlIEZpbGU6OlRlbXA7IHJlcXVpcmUgRmlsZTo6U3BlYzsgfTsKKwkkQCBhbmQgdGhyb3cgRXJyb3I6OlNpbXBsZSgkQCk7Cit9CisKKz1pdGVtIHRlbXBfcmVzZXQgKCBGSUxFSEFORExFICkKKworVHJ1bmNhdGVzIGFuZCByZXNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBDPEZJTEVIQU5ETEU+LgorCis9Y3V0CisKK3N1YiB0ZW1wX3Jlc2V0IHsKKwlteSAoJHNlbGYsICR0ZW1wX2ZkKSA9IF9tYXliZV9zZWxmKEBfKTsKKworCXRydW5jYXRlICR0ZW1wX2ZkLCAwCisJCW9yIHRocm93IEVycm9yOjpTaW1wbGUoImNvdWxkbid0IHRydW5jYXRlIGZpbGUiKTsKKwlzeXNzZWVrKCR0ZW1wX2ZkLCAwLCBTRUVLX1NFVCkgYW5kIHNlZWsoJHRlbXBfZmQsIDAsIFNFRUtfU0VUKQorCQlvciB0aHJvdyBFcnJvcjo6U2ltcGxlKCJjb3VsZG4ndCBzZWVrIHRvIGJlZ2lubmluZyBvZiBmaWxlIik7CisJc3lzc2VlaygkdGVtcF9mZCwgMCwgU0VFS19DVVIpID09IDAgYW5kIHRlbGwoJHRlbXBfZmQpID09IDAKKwkJb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgiZXhwZWN0ZWQgZmlsZSBwb3NpdGlvbiB0byBiZSByZXNldCIpOworfQorCis9aXRlbSB0ZW1wX3BhdGggKCBOQU1FICkKKworPWl0ZW0gdGVtcF9wYXRoICggRklMRUhBTkRMRSApCisKK1JldHVybnMgdGhlIGZpbGVuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdGVtcGZpbGUuCisKKz1jdXQKKworc3ViIHRlbXBfcGF0aCB7CisJbXkgKCRzZWxmLCAkdGVtcF9mZCkgPSBfbWF5YmVfc2VsZihAXyk7CisKKwlpZiAoZXhpc3RzICRURU1QX0ZJTEVNQVB7JHRlbXBfZmR9KSB7CisJCSR0ZW1wX2ZkID0gJFRFTVBfRklMRU1BUHskdGVtcF9mZH07CisJfQorCSRURU1QX0ZJTEVTeyR0ZW1wX2ZkfXtmbmFtZX07Cit9CisKK3N1YiBFTkQgeworCXVubGluayB2YWx1ZXMgJVRFTVBfRklMRU1BUCBpZiAlVEVNUF9GSUxFTUFQOworfQorCit9ICMgJVRFTVBfKiBMZXhpY2FsIENvbnRleHQKKworPWJhY2sKKworPWhlYWQxIEVSUk9SIEhBTkRMSU5HCisKK0FsbCBmdW5jdGlvbnMgYXJlIHN1cHBvc2VkIHRvIHRocm93IFBlcmwgZXhjZXB0aW9ucyBpbiBjYXNlIG9mIGVycm9ycy4KK1NlZSB0aGUgTDxFcnJvcj4gbW9kdWxlIG9uIGhvdyB0byBjYXRjaCB0aG9zZS4gTW9zdCBleGNlcHRpb25zIGFyZSBtZXJlCitMPEVycm9yOjpTaW1wbGU+IGluc3RhbmNlcy4KKworSG93ZXZlciwgdGhlIEM8Y29tbWFuZCgpPiwgQzxjb21tYW5kX29uZWxpbmUoKT4gYW5kIEM8Y29tbWFuZF9ub2lzeSgpPgorZnVuY3Rpb25zIHN1aXRlIGNhbiB0aHJvdyBDPEdpdDo6RXJyb3I6OkNvbW1hbmQ+IGV4Y2VwdGlvbnMgYXMgd2VsbDogdGhvc2UgYXJlCit0aHJvd24gd2hlbiB0aGUgZXh0ZXJuYWwgY29tbWFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUgYW5kIGNvbnRhaW4gdGhlIGVycm9yCitjb2RlIGFzIHdlbGwgYXMgYWNjZXNzIHRvIHRoZSBjYXB0dXJlZCBjb21tYW5kJ3Mgb3V0cHV0LiBUaGUgZXhjZXB0aW9uIGNsYXNzCitwcm92aWRlcyB0aGUgdXN1YWwgQzxzdHJpbmdpZnk+IGFuZCBDPHZhbHVlPiAoY29tbWFuZCdzIGV4aXQgY29kZSkgbWV0aG9kcyBhbmQKK2luIGFkZGl0aW9uIGFsc28gYSBDPGNtZF9vdXRwdXQ+IG1ldGhvZCB0aGF0IHJldHVybnMgZWl0aGVyIGFuIGFycmF5IG9yIGEKK3N0cmluZyB3aXRoIHRoZSBjYXB0dXJlZCBjb21tYW5kIG91dHB1dCAoZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW5hbCBmdW5jdGlvbgorY2FsbCBjb250ZXh0OyBDPGNvbW1hbmRfbm9pc3koKT4gcmV0dXJucyBDPHVuZGVmPikgYW5kICQ8Y21kbGluZT4gd2hpY2gKK3JldHVybnMgdGhlIGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHMgKGJ1dCB3aXRob3V0IHByb3BlciBxdW90aW5nKS4KKworTm90ZSB0aGF0IHRoZSBDPGNvbW1hbmRfKl9waXBlKCk+IGZ1bmN0aW9ucyBjYW5ub3QgdGhyb3cgdGhpcyBleGNlcHRpb24gc2luY2UKK2l0IGhhcyBubyBpZGVhIHdoZXRoZXIgdGhlIGNvbW1hbmQgZmFpbGVkIG9yIG5vdC4gWW91IHdpbGwgb25seSBmaW5kIG91dAorYXQgdGhlIHRpbWUgeW91IEM8Y2xvc2U+IHRoZSBwaXBlOyBpZiB5b3Ugd2FudCB0byBoYXZlIHRoYXQgYXV0b21hdGVkLAordXNlIEM8Y29tbWFuZF9jbG9zZV9waXBlKCk+LCB3aGljaCBjYW4gdGhyb3cgdGhlIGV4Y2VwdGlvbi4KKworPWN1dAorCit7CisJcGFja2FnZSBHaXQ6OkVycm9yOjpDb21tYW5kOworCisJQEdpdDo6RXJyb3I6OkNvbW1hbmQ6OklTQSA9IHF3KEVycm9yKTsKKworCXN1YiBuZXcgeworCQlteSAkc2VsZiA9IHNoaWZ0OworCQlteSAkY21kbGluZSA9ICcnIC4gc2hpZnQ7CisJCW15ICR2YWx1ZSA9IDAgKyBzaGlmdDsKKwkJbXkgJG91dHB1dHJlZiA9IHNoaWZ0OworCQlteShAYXJncykgPSAoKTsKKworCQlsb2NhbCAkRXJyb3I6OkRlcHRoID0gJEVycm9yOjpEZXB0aCArIDE7CisKKwkJcHVzaChAYXJncywgJy1jbWRsaW5lJywgJGNtZGxpbmUpOworCQlwdXNoKEBhcmdzLCAnLXZhbHVlJywgJHZhbHVlKTsKKwkJcHVzaChAYXJncywgJy1vdXRwdXRyZWYnLCAkb3V0cHV0cmVmKTsKKworCQkkc2VsZi0+U1VQRVI6Om5ldygtdGV4dCA9PiAnY29tbWFuZCByZXR1cm5lZCBlcnJvcicsIEBhcmdzKTsKKwl9CisKKwlzdWIgc3RyaW5naWZ5IHsKKwkJbXkgJHNlbGYgPSBzaGlmdDsKKwkJbXkgJHRleHQgPSAkc2VsZi0+U1VQRVI6OnN0cmluZ2lmeTsKKwkJJHNlbGYtPmNtZGxpbmUoKSAuICc6ICcgLiAkdGV4dCAuICc6ICcgLiAkc2VsZi0+dmFsdWUoKSAuICJcbiI7CisJfQorCisJc3ViIGNtZGxpbmUgeworCQlteSAkc2VsZiA9IHNoaWZ0OworCQkkc2VsZi0+eyctY21kbGluZSd9OworCX0KKworCXN1YiBjbWRfb3V0cHV0IHsKKwkJbXkgJHNlbGYgPSBzaGlmdDsKKwkJbXkgJHJlZiA9ICRzZWxmLT57Jy1vdXRwdXRyZWYnfTsKKwkJZGVmaW5lZCAkcmVmIG9yIHVuZGVmOworCQlpZiAocmVmICRyZWYgZXEgJ0FSUkFZJykgeworCQkJcmV0dXJuIEAkcmVmOworCQl9IGVsc2UgeyAjIFNDQUxBUgorCQkJcmV0dXJuICQkcmVmOworCQl9CisJfQorfQorCis9b3ZlciA0CisKKz1pdGVtIGdpdF9jbWRfdHJ5IHsgQ09ERSB9IEVSUk1TRworCitUaGlzIG1hZ2ljYWwgc3RhdGVtZW50IHdpbGwgYXV0b21hdGljYWxseSBjYXRjaCBhbnkgQzxHaXQ6OkVycm9yOjpDb21tYW5kPgorZXhjZXB0aW9ucyB0aHJvd24gYnkgQzxDT0RFPiBhbmQgbWFrZSB5b3VyIHByb2dyYW0gZGllIHdpdGggQzxFUlJNU0c+CitvbiBpdHMgbGlwczsgdGhlIG1lc3NhZ2Ugd2lsbCBoYXZlICVzIHN1YnN0aXR1dGVkIGZvciB0aGUgY29tbWFuZCBsaW5lCithbmQgJWQgZm9yIHRoZSBleGl0IHN0YXR1cy4gVGhpcyBzdGF0ZW1lbnQgaXMgdXNlZnVsIG1vc3RseSBmb3IgcHJvZHVjaW5nCittb3JlIHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZXMuCisKK0luIGNhc2Ugb2Ygbm8gZXhjZXB0aW9uIGNhdWdodCB0aGUgc3RhdGVtZW50IHJldHVybnMgQzxDT0RFPidzIHJldHVybiB2YWx1ZS4KKworTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgYXV0by1leHBvcnRlZCBmdW5jdGlvbi4KKworPWN1dAorCitzdWIgZ2l0X2NtZF90cnkoJiQpIHsKKwlteSAoJGNvZGUsICRlcnJtc2cpID0gQF87CisJbXkgQHJlc3VsdDsKKwlteSAkZXJyOworCW15ICRhcnJheSA9IHdhbnRhcnJheTsKKwl0cnkgeworCQlpZiAoJGFycmF5KSB7CisJCQlAcmVzdWx0ID0gJiRjb2RlOworCQl9IGVsc2UgeworCQkJJHJlc3VsdFswXSA9ICYkY29kZTsKKwkJfQorCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKKwkJbXkgJEUgPSBzaGlmdDsKKwkJJGVyciA9ICRlcnJtc2c7CisJCSRlcnIgPX4gcy9cJXMvJEUtPmNtZGxpbmUoKS9nZTsKKwkJJGVyciA9fiBzL1wlZC8kRS0+dmFsdWUoKS9nZTsKKwkJIyBXZSBjYW4ndCBjcm9hayBoZXJlIHNpbmNlIEVycm9yLnBtIHdvdWxkIG1hbmdsZQorCQkjIHRoYXQgdG8gRXJyb3I6OlNpbXBsZS4KKwl9OworCSRlcnIgYW5kIGNyb2FrICRlcnI7CisJcmV0dXJuICRhcnJheSA/IEByZXN1bHQgOiAkcmVzdWx0WzBdOworfQorCisKKz1iYWNrCisKKz1oZWFkMSBDT1BZUklHSFQKKworQ29weXJpZ2h0IDIwMDYgYnkgUGV0ciBCYXVkaXMgRTxsdD5wYXNreUBzdXNlLmN6RTxndD4uCisKK1RoaXMgbW9kdWxlIGlzIGZyZWUgc29mdHdhcmU7IGl0IG1heSBiZSB1c2VkLCBjb3BpZWQsIG1vZGlmaWVkCithbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSwKK2VpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKz1jdXQKKworCisjIFRha2UgcmF3IG1ldGhvZCBhcmd1bWVudCBsaXN0IGFuZCByZXR1cm4gKCRvYmosIEBhcmdzKSBpbiBjYXNlCisjIHRoZSBtZXRob2Qgd2FzIGNhbGxlZCB1cG9uIGFuIGluc3RhbmNlIGFuZCAodW5kZWYsIEBhcmdzKSBpZgorIyBpdCB3YXMgY2FsbGVkIGRpcmVjdGx5Lgorc3ViIF9tYXliZV9zZWxmIHsKKwlVTklWRVJTQUw6OmlzYSgkX1swXSwgJ0dpdCcpID8gQF8gOiAodW5kZWYsIEBfKTsKK30KKworIyBDaGVjayBpZiB0aGUgY29tbWFuZCBpZCBpcyBzb21ldGhpbmcgcmVhc29uYWJsZS4KK3N1YiBfY2hlY2tfdmFsaWRfY21kIHsKKwlteSAoJGNtZCkgPSBAXzsKKwkkY21kID1+IC9eW2EtejAtOUEtWl8tXSskLyBvciB0aHJvdyBFcnJvcjo6U2ltcGxlKCJiYWQgY29tbWFuZDogJGNtZCIpOworfQorCisjIENvbW1vbiBiYWNrZW5kIGZvciB0aGUgcGlwZSBjcmVhdG9ycy4KK3N1YiBfY29tbWFuZF9jb21tb25fcGlwZSB7CisJbXkgJGRpcmVjdGlvbiA9IHNoaWZ0OworCW15ICgkc2VsZiwgQHApID0gX21heWJlX3NlbGYoQF8pOworCW15ICglb3B0cywgJGNtZCwgQGFyZ3MpOworCWlmIChyZWYgJHBbMF0pIHsKKwkJKCRjbWQsIEBhcmdzKSA9IEB7c2hpZnQgQHB9OworCQklb3B0cyA9IHJlZiAkcFswXSA/ICV7JHBbMF19IDogQHA7CisJfSBlbHNlIHsKKwkJKCRjbWQsIEBhcmdzKSA9IEBwOworCX0KKwlfY2hlY2tfdmFsaWRfY21kKCRjbWQpOworCisJbXkgJGZoOworCWlmICgkXk8gZXEgJ01TV2luMzInKSB7CisJCSMgQWN0aXZlU3RhdGUgUGVybAorCQkjZGVmaW5lZCAkb3B0c3tTVERFUlJ9IGFuZAorCQkjCXdhcm4gJ2lnbm9yaW5nIFNUREVSUiBvcHRpb24gLSBydW5uaW5nIHcvIEFjdGl2ZVN0YXRlJzsKKwkJJGRpcmVjdGlvbiBlcSAnLXwnIG9yCisJCQlkaWUgJ2lucHV0IHBpcGUgZm9yIEFjdGl2ZVN0YXRlIG5vdCBpbXBsZW1lbnRlZCc7CisJCSMgdGhlIHN0cmFuZ2UgY29uc3RydWN0aW9uIHdpdGggKkFDUElQRSBpcyBqdXN0IHRvCisJCSMgZXhwbGFpbiB0aGUgdGllIGJlbG93IHRoYXQgd2Ugd2FudCB0byBiaW5kIHRvCisJCSMgYSBoYW5kbGUgY2xhc3MsIG5vdCBzY2FsYXIuIEl0IGlzIG5vdCBrbm93biBpZgorCQkjIGl0IGlzIHNvbWV0aGluZyBzcGVjaWZpYyB0byBBY3RpdmVTdGF0ZSBQZXJsIG9yCisJCSMganVzdCBhIFBlcmwgcXVpcmsuCisJCXRpZSAoKkFDUElQRSwgJ0dpdDo6YWN0aXZlc3RhdGVfcGlwZScsICRjbWQsIEBhcmdzKTsKKwkJJGZoID0gKkFDUElQRTsKKworCX0gZWxzZSB7CisJCW15ICRwaWQgPSBvcGVuKCRmaCwgJGRpcmVjdGlvbik7CisJCWlmIChub3QgZGVmaW5lZCAkcGlkKSB7CisJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJvcGVuIGZhaWxlZDogJCEiKTsKKwkJfSBlbHNpZiAoJHBpZCA9PSAwKSB7CisJCQlpZiAoZGVmaW5lZCAkb3B0c3tTVERFUlJ9KSB7CisJCQkJY2xvc2UgU1RERVJSOworCQkJfQorCQkJaWYgKCRvcHRze1NUREVSUn0pIHsKKwkJCQlvcGVuIChTVERFUlIsICc+JicsICRvcHRze1NUREVSUn0pCisJCQkJCW9yIGRpZSAiZHVwIGZhaWxlZDogJCEiOworCQkJfQorCQkJX2NtZF9leGVjKCRzZWxmLCAkY21kLCBAYXJncyk7CisJCX0KKwl9CisJcmV0dXJuIHdhbnRhcnJheSA/ICgkZmgsIGpvaW4oJyAnLCAkY21kLCBAYXJncykpIDogJGZoOworfQorCisjIFdoZW4gYWxyZWFkeSBpbiB0aGUgc3VicHJvY2Vzcywgc2V0IHVwIHRoZSBhcHByb3ByaWF0ZSBzdGF0ZQorIyBmb3IgdGhlIGdpdmVuIHJlcG9zaXRvcnkgYW5kIGV4ZWN1dGUgdGhlIGdpdCBjb21tYW5kLgorc3ViIF9jbWRfZXhlYyB7CisJbXkgKCRzZWxmLCBAYXJncykgPSBAXzsKKwlfc2V0dXBfZ2l0X2NtZF9lbnYoJHNlbGYpOworCV9leGVjdl9naXRfY21kKEBhcmdzKTsKKwlkaWUgcXFbZXhlYyAiQGFyZ3MiIGZhaWxlZDogJCFdOworfQorCisjIHNldCB1cCB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgZm9yIGdpdCBjb21tYW5kCitzdWIgX3NldHVwX2dpdF9jbWRfZW52IHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCWlmICgkc2VsZikgeworCQkkc2VsZi0+cmVwb19wYXRoKCkgYW5kICRFTlZ7J0dJVF9ESVInfSA9ICRzZWxmLT5yZXBvX3BhdGgoKTsKKwkJJHNlbGYtPnJlcG9fcGF0aCgpIGFuZCAkc2VsZi0+d2NfcGF0aCgpCisJCQlhbmQgJEVOVnsnR0lUX1dPUktfVFJFRSd9ID0gJHNlbGYtPndjX3BhdGgoKTsKKwkJJHNlbGYtPndjX3BhdGgoKSBhbmQgY2hkaXIoJHNlbGYtPndjX3BhdGgoKSk7CisJCSRzZWxmLT53Y19zdWJkaXIoKSBhbmQgY2hkaXIoJHNlbGYtPndjX3N1YmRpcigpKTsKKwl9Cit9CisKKyMgRXhlY3V0ZSB0aGUgZ2l2ZW4gR2l0IGNvbW1hbmQgKCRfWzBdKSB3aXRoIGFyZ3VtZW50cyAoJF9bMS4uXSkKKyMgYnkgc2VhcmNoaW5nIGZvciBpdCBhdCBwcm9wZXIgcGxhY2VzLgorc3ViIF9leGVjdl9naXRfY21kIHsgZXhlYygnZ2l0JywgQF8pOyB9CisKKyMgQ2xvc2UgcGlwZSB0byBhIHN1YnByb2Nlc3MuCitzdWIgX2NtZF9jbG9zZSB7CisJbXkgKCRmaCwgJGN0eCkgPSBAXzsKKwlpZiAobm90IGNsb3NlICRmaCkgeworCQlpZiAoJCEpIHsKKwkJCSMgSXQncyBqdXN0IGNsb3NlLCBubyBwb2ludCBpbiBmYXRhbGl0aWVzCisJCQljYXJwICJlcnJvciBjbG9zaW5nIHBpcGU6ICQhIjsKKwkJfSBlbHNpZiAoJD8gPj4gOCkgeworCQkJIyBUaGUgY2FsbGVyIHNob3VsZCBwZXBwZXIgdGhpcy4KKwkJCXRocm93IEdpdDo6RXJyb3I6OkNvbW1hbmQoJGN0eCwgJD8gPj4gOCk7CisJCX0KKwkJIyBlbHNlIHdlIG1pZ2h0IGUuZy4gY2xvc2VkIGEgbGl2ZSBzdHJlYW07IHRoZSBjb21tYW5kCisJCSMgZHlpbmcgb2YgU0lHUElQRSB3b3VsZCBkcml2ZSB1cyBoZXJlLgorCX0KK30KKworCitzdWIgREVTVFJPWSB7CisJbXkgKCRzZWxmKSA9IEBfOworCSRzZWxmLT5fY2xvc2VfaGFzaF9hbmRfaW5zZXJ0X29iamVjdCgpOworCSRzZWxmLT5fY2xvc2VfY2F0X2Jsb2IoKTsKK30KKworCisjIFBpcGUgaW1wbGVtZW50YXRpb24gZm9yIEFjdGl2ZVN0YXRlIFBlcmwuCisKK3BhY2thZ2UgR2l0OjphY3RpdmVzdGF0ZV9waXBlOwordXNlIHN0cmljdDsKKworc3ViIFRJRUhBTkRMRSB7CisJbXkgKCRjbGFzcywgQHBhcmFtcykgPSBAXzsKKwkjIEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5IGhvcnJpYmxlIGlkZWEgYW5kIHRoZSB0aGluZyB3aWxsIGV4cGxvZGUKKwkjIGF0IHRoZSBtb21lbnQgeW91IGdpdmUgaXQgYXJndW1lbnRzIHRoYXQgcmVxdWlyZSBzb21lIHF1b3RpbmcsCisJIyBidXQgSSBoYXZlIG5vIEFjdGl2ZVN0YXRlIGNsdWUuLi4gLS1wYXNreQorCSMgTGV0J3MganVzdCBob3BlIEFjdGl2ZVN0YXRlIFBlcmwgZG9lcyBhdCBsZWFzdCB0aGUgcXVvdGluZworCSMgY29ycmVjdGx5LgorCW15IEBkYXRhID0gcXh7Z2l0IEBwYXJhbXN9OworCWJsZXNzIHsgaSA9PiAwLCBkYXRhID0+IFxAZGF0YSB9LCAkY2xhc3M7Cit9CisKK3N1YiBSRUFETElORSB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlpZiAoJHNlbGYtPntpfSA+PSBzY2FsYXIgQHskc2VsZi0+e2RhdGF9fSkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCW15ICRpID0gJHNlbGYtPntpfTsKKwlpZiAod2FudGFycmF5KSB7CisJCSRzZWxmLT57aX0gPSAkI3skc2VsZi0+eydkYXRhJ319ICsgMTsKKwkJcmV0dXJuIHNwbGljZShAeyRzZWxmLT57J2RhdGEnfX0sICRpKTsKKwl9CisJJHNlbGYtPntpfSA9ICRpICsgMTsKKwlyZXR1cm4gJHNlbGYtPnsnZGF0YSd9LT5bICRpIF07Cit9CisKK3N1YiBDTE9TRSB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlkZWxldGUgJHNlbGYtPntkYXRhfTsKKwlkZWxldGUgJHNlbGYtPntpfTsKK30KKworc3ViIEVPRiB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlyZXR1cm4gKCRzZWxmLT57aX0gPj0gc2NhbGFyIEB7JHNlbGYtPntkYXRhfX0pOworfQorCisKKzE7ICMgRmFtb3VzIGxhc3Qgd29yZHMKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L0kxOE4ucG0gYi9wZXJsL0dpdC9JMThOLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZGQ4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9JMThOLnBtCkBAIC0wLDAgKzEsOTggQEAKK3BhY2thZ2UgR2l0OjpJMThOOwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK0JFR0lOIHsKKwlyZXF1aXJlIEV4cG9ydGVyOworCWlmICgkXSA8IDUuMDA4MDAzKSB7CisJCSppbXBvcnQgPSBcJkV4cG9ydGVyOjppbXBvcnQ7CisJfSBlbHNlIHsKKwkJIyBFeHBvcnRlciA1LjU3IHdoaWNoIHN1cHBvcnRzIHRoaXMgaW52b2NhdGlvbiB3YXMKKwkJIyByZWxlYXNlZCB3aXRoIHBlcmwgNS44LjMKKwkJRXhwb3J0ZXItPmltcG9ydCgnaW1wb3J0Jyk7CisJfQorfQorCitvdXIgQEVYUE9SVCA9IHF3KF9fKTsKK291ciBARVhQT1JUX09LID0gQEVYUE9SVDsKKworc3ViIF9fYm9vdHN0cmFwX2xvY2FsZV9tZXNzYWdlcyB7CisJb3VyICRURVhURE9NQUlOID0gJ2dpdCc7CisJb3VyICRURVhURE9NQUlORElSID0gJEVOVntHSVRfVEVYVERPTUFJTkRJUn0gfHwgJysrTE9DQUxFRElSKysnOworCisJcmVxdWlyZSBQT1NJWDsKKwlQT1NJWC0+aW1wb3J0KHF3KHNldGxvY2FsZSkpOworCSMgTm9uLWNvcmUgcHJlcmVxdWlzaXRlIG1vZHVsZQorCXJlcXVpcmUgTG9jYWxlOjpNZXNzYWdlczsKKwlMb2NhbGU6Ok1lc3NhZ2VzLT5pbXBvcnQocXcoOmxvY2FsZV9oIDpsaWJpbnRsX2gpKTsKKworCXNldGxvY2FsZShMQ19NRVNTQUdFUygpLCAnJyk7CisJc2V0bG9jYWxlKExDX0NUWVBFKCksICcnKTsKKwl0ZXh0ZG9tYWluKCRURVhURE9NQUlOKTsKKwliaW5kdGV4dGRvbWFpbigkVEVYVERPTUFJTiA9PiAkVEVYVERPTUFJTkRJUik7CisKKwlyZXR1cm47Cit9CisKK0JFR0lOCit7CisJIyBVc2VkIGJ5IG91ciB0ZXN0IHNjcmlwdCB0byBzZWUgaWYgaXQgc2hvdWxkIHRlc3QgZmFsbGJhY2tzIG9yCisJIyBub3QuCisJb3VyICRfX0hBU19MSUJSQVJZID0gMTsKKworCWxvY2FsICRAOworCWV2YWwgeworCQlfX2Jvb3RzdHJhcF9sb2NhbGVfbWVzc2FnZXMoKTsKKwkJKl9fID0gXCZMb2NhbGU6Ok1lc3NhZ2VzOjpnZXR0ZXh0OworCQkxOworCX0gb3IgZG8geworCQkjIFRlbGwgdGVzdC5wbCB0aGF0IHdlIGNvdWxkbid0IGxvYWQgdGhlIGdldHRleHQgbGlicmFyeS4KKwkJJEdpdDo6STE4Tjo6X19IQVNfTElCUkFSWSA9IDA7CisKKwkJIyBKdXN0IGEgZmFsbC10aHJvdWdoIG5vLW9wCisJCSpfXyA9IHN1YiAoJCkgeyAkX1swXSB9OworCX07Cit9CisKKzE7CisKK19fRU5EX18KKworPWhlYWQxIE5BTUUKKworR2l0OjpJMThOIC0gUGVybCBpbnRlcmZhY2UgdG8gR2l0J3MgR2V0dGV4dCBsb2NhbGl6YXRpb25zCisKKz1oZWFkMSBTWU5PUFNJUworCisJdXNlIEdpdDo6STE4TjsKKworCXByaW50IF9fKCJXZWxjb21lIHRvIEdpdCFcbiIpOworCisJcHJpbnRmIF9fKCJUaGUgZm9sbG93aW5nIGVycm9yIG9jY3VyZWQ6ICVzXG4iKSwgJGVycm9yOworCis9aGVhZDEgREVTQ1JJUFRJT04KKworR2l0J3MgaW50ZXJuYWwgUGVybCBpbnRlcmZhY2UgdG8gZ2V0dGV4dCB2aWEgTDxMb2NhbGU6Ok1lc3NhZ2VzPi4gSWYKK0w8TG9jYWxlOjpNZXNzYWdlcz4gY2FuJ3QgYmUgbG9hZGVkIChpdCdzIG5vdCBhIGNvcmUgbW9kdWxlKSB3ZQorcHJvdmlkZSBzdHViIHBhc3N0aHJvdWdoIGZhbGxiYWNrcy4KKworVGhpcyBpcyBhIGRpc3RpbGxlZCBpbnRlcmZhY2UgdG8gZ2V0dGV4dCwgc2VlIEM8aW5mbyAnKGdldHRleHQpUGVybCc+Citmb3IgdGhlIGZ1bGwgaW50ZXJmYWNlLiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIG9ubHkgYSBzbWFsbCBwYXJ0IG9mCitpdC4KKworPWhlYWQxIEZVTkNUSU9OUworCis9aGVhZDIgX18oJCkKKworTDxMb2NhbGU6Ok1lc3NhZ2VzPidzIGdldHRleHQgZnVuY3Rpb24gaWYgYWxsIGdvZXMgd2VsbCwgb3RoZXJ3aXNlIG91cgorcGFzc3Rocm91Z2ggZmFsbGJhY2sgZnVuY3Rpb24uCisKKz1oZWFkMSBBVVRIT1IKKworRTxBRWxpZz52YXIgQXJuZmpFPG91bWw+ckU8ZXRoPiBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisKKz1oZWFkMSBDT1BZUklHSFQKKworQ29weXJpZ2h0IDIwMTAgRTxBRWxpZz52YXIgQXJuZmpFPG91bWw+ckU8ZXRoPiBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisKKz1jdXQKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L0luZGV4SW5mby5wbSBiL3BlcmwvR2l0L0luZGV4SW5mby5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDMxMDhjCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvSW5kZXhJbmZvLnBtCkBAIC0wLDAgKzEsMzMgQEAKK3BhY2thZ2UgR2l0OjpJbmRleEluZm87Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdpdCBxdy9jb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlLzsKKworc3ViIG5ldyB7CisJbXkgKCRjbGFzcykgPSBAXzsKKwlteSAoJGd1aSwgJGN0eCkgPSBjb21tYW5kX2lucHV0X3BpcGUocXcvdXBkYXRlLWluZGV4IC16IC0taW5kZXgtaW5mby8pOworCWJsZXNzIHsgZ3VpID0+ICRndWksIGN0eCA9PiAkY3R4LCBuciA9PiAwfSwgJGNsYXNzOworfQorCitzdWIgcmVtb3ZlIHsKKwlteSAoJHNlbGYsICRwYXRoKSA9IEBfOworCWlmIChwcmludCB7ICRzZWxmLT57Z3VpfSB9ICcwICcsIDAgeCA0MCwgIlx0IiwgJHBhdGgsICJcMCIpIHsKKwkJcmV0dXJuICsrJHNlbGYtPntucn07CisJfQorCXVuZGVmOworfQorCitzdWIgdXBkYXRlIHsKKwlteSAoJHNlbGYsICRtb2RlLCAkaGFzaCwgJHBhdGgpID0gQF87CisJaWYgKHByaW50IHsgJHNlbGYtPntndWl9IH0gJG1vZGUsICcgJywgJGhhc2gsICJcdCIsICRwYXRoLCAiXDAiKSB7CisJCXJldHVybiArKyRzZWxmLT57bnJ9OworCX0KKwl1bmRlZjsKK30KKworc3ViIERFU1RST1kgeworCW15ICgkc2VsZikgPSBAXzsKKwljb21tYW5kX2Nsb3NlX3BpcGUoJHNlbGYtPntndWl9LCAkc2VsZi0+e2N0eH0pOworfQorCisxOwpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOLnBtIGIvcGVybC9HaXQvU1ZOLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MjE1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4ucG0KQEAgLTAsMCArMSwyMzk0IEBACitwYWNrYWdlIEdpdDo6U1ZOOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBGY250bCBxdy86REVGQVVMVCA6c2Vlay87Cit1c2UgY29uc3RhbnQgcmV2X21hcF9mbXQgPT4gJ05INDAnOwordXNlIHZhcnMgcXcvJF9ub19tZXRhZGF0YQorICAgICAgICAgICAgJF9yZXBhY2sgJF9yZXBhY2tfZmxhZ3MgJF91c2Vfc3ZtX3Byb3BzICRfaGVhZAorICAgICAgICAgICAgJF91c2Vfc3Zuc3luY19wcm9wcyAkbm9fcmV1c2VfZXhpc3RpbmcKKwkgICAgJF91c2VfbG9nX2F1dGhvciAkX2FkZF9hdXRob3JfZnJvbSAkX2xvY2FsdGltZS87Cit1c2UgQ2FycCBxdy9jcm9hay87Cit1c2UgRmlsZTo6UGF0aCBxdy9ta3BhdGgvOwordXNlIEZpbGU6OkNvcHkgcXcvY29weS87Cit1c2UgSVBDOjpPcGVuMzsKK3VzZSBUaW1lOjpMb2NhbDsKK3VzZSBNZW1vaXplOyAgIyBjb3JlIHNpbmNlIDUuOC4wLCBKdWwgMjAwMgordXNlIE1lbW9pemU6OlN0b3JhYmxlOwordXNlIFBPU0lYIHF3KDpzaWduYWxfaCk7CisKK3VzZSBHaXQgcXcoCisgICAgY29tbWFuZAorICAgIGNvbW1hbmRfb25lbGluZQorICAgIGNvbW1hbmRfbm9pc3kKKyAgICBjb21tYW5kX291dHB1dF9waXBlCisgICAgY29tbWFuZF9jbG9zZV9waXBlCispOwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwlmYXRhbAorCWNhbl9jb21wcmVzcworCWpvaW5fcGF0aHMKKwljYW5vbmljYWxpemVfcGF0aAorCWNhbm9uaWNhbGl6ZV91cmwKKwlhZGRfcGF0aF90b191cmwKKyk7CisKK215ICRjYW5fdXNlX3lhbWw7CitCRUdJTiB7CisJJGNhbl91c2VfeWFtbCA9IGV2YWwgeyByZXF1aXJlIEdpdDo6U1ZOOjpNZW1vaXplOjpZQU1MOyAxfTsKK30KKworb3VyICRfZm9sbG93X3BhcmVudCAgPSAxOworb3VyICRfbWluaW1pemVfdXJsICAgPSAndW5zZXQnOworb3VyICRkZWZhdWx0X3JlcG9faWQgPSAnc3ZuJzsKK291ciAkZGVmYXVsdF9yZWZfaWQgID0gJEVOVntHSVRfU1ZOX0lEfSB8fCAnZ2l0LXN2bic7CisKK215ICgkX2djX25yLCAkX2djX3BlcmlvZCk7CisKKyMgcHJvcGVydGllcyB0aGF0IHdlIGRvIG5vdCBsb2c6CitteSAlU0tJUF9QUk9QOworQkVHSU4geworCSVTS0lQX1BST1AgPSBtYXAgeyAkXyA9PiAxIH0gcXcvc3ZuOndjOnJhX2Rhdjp2ZXJzaW9uLXVybAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuOnNwZWNpYWwgc3ZuOmV4ZWN1dGFibGUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bjplbnRyeTpjb21taXR0ZWQtcmV2CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm46ZW50cnk6bGFzdC1hdXRob3IKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bjplbnRyeTp1dWlkCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm46ZW50cnk6Y29tbWl0dGVkLWRhdGUvOworCisJIyBzb21lIG9wdGlvbnMgYXJlIHJlYWQgZ2xvYmFsbHksIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBsb2NhbGx5CisJIyBwZXIgW3N2bi1yZW1vdGUgIi4uLiJdIHNlY3Rpb24uICBDb21tYW5kLWxpbmUgb3B0aW9ucyB3aWxsICpOT1QqCisJIyBvdmVycmlkZSBvcHRpb25zIHNldCBpbiBhbiBbc3ZuLXJlbW90ZSAiLi4uIl0gc2VjdGlvbgorCW5vIHN0cmljdCAncmVmcyc7CisJZm9yIG15ICRvcHRpb24gKHF3L2ZvbGxvd19wYXJlbnQgbm9fbWV0YWRhdGEgdXNlX3N2bV9wcm9wcworCQkJICAgdXNlX3N2bnN5bmNfcHJvcHMvKSB7CisJCW15ICRrZXkgPSAkb3B0aW9uOworCQkka2V5ID1+IHRyL18vL2Q7CisJCW15ICRwcm9wID0gIi0kb3B0aW9uIjsKKwkJKiRvcHRpb24gPSBzdWIgeworCQkJbXkgKCRzZWxmKSA9IEBfOworCQkJcmV0dXJuICRzZWxmLT57JHByb3B9IGlmIGV4aXN0cyAkc2VsZi0+eyRwcm9wfTsKKwkJCW15ICRrID0gInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS4ka2V5IjsKKwkJCWV2YWwgeyBjb21tYW5kX29uZWxpbmUocXcvY29uZmlnIC0tZ2V0LywgJGspIH07CisJCQlpZiAoJEApIHsKKwkJCQkkc2VsZi0+eyRwcm9wfSA9ICR7IkdpdDo6U1ZOOjpfJG9wdGlvbiJ9OworCQkJfSBlbHNlIHsKKwkJCQlteSAkdiA9IGNvbW1hbmRfb25lbGluZShxdy9jb25maWcgLS1ib29sLywkayk7CisJCQkJJHNlbGYtPnskcHJvcH0gPSAkdiBlcSAnZmFsc2UnID8gMCA6IDE7CisJCQl9CisJCQlyZXR1cm4gJHNlbGYtPnskcHJvcH07CisJCX0KKwl9Cit9CisKKworbXkgKCVMT0NLRklMRVMsICVJTkRFWF9GSUxFUyk7CitFTkQgeworCXVubGluayBrZXlzICVMT0NLRklMRVMgaWYgJUxPQ0tGSUxFUzsKKwl1bmxpbmsga2V5cyAlSU5ERVhfRklMRVMgaWYgJUlOREVYX0ZJTEVTOworfQorCitzdWIgcmVzb2x2ZV9sb2NhbF9nbG9icyB7CisJbXkgKCR1cmwsICRmZXRjaCwgJGdsb2Jfc3BlYykgPSBAXzsKKwlyZXR1cm4gdW5sZXNzIGRlZmluZWQgJGdsb2Jfc3BlYzsKKwlteSAkcmVmID0gJGdsb2Jfc3BlYy0+e3JlZn07CisJbXkgJHBhdGggPSAkZ2xvYl9zcGVjLT57cGF0aH07CisJZm9yZWFjaCAoY29tbWFuZChxdyNmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JShyZWZuYW1lKSByZWZzLyMpKSB7CisJCW5leHQgdW5sZXNzIG0jXiRyZWYtPntyZWdleH0kIzsKKwkJbXkgJHAgPSAkMTsKKwkJbXkgJHBhdGhuYW1lID0gZGVzYW5pdGl6ZV9yZWZuYW1lKCRwYXRoLT5mdWxsX3BhdGgoJHApKTsKKwkJbXkgJHJlZm5hbWUgPSBkZXNhbml0aXplX3JlZm5hbWUoJHJlZi0+ZnVsbF9wYXRoKCRwKSk7CisJCWlmIChteSAkZXhpc3RpbmcgPSAkZmV0Y2gtPnskcGF0aG5hbWV9KSB7CisJCQlpZiAoJGV4aXN0aW5nIG5lICRyZWZuYW1lKSB7CisJCQkJZGllICJSZWZzcGVjIGNvbmZsaWN0OlxuIiwKKwkJCQkgICAgImV4aXN0aW5nOiAkZXhpc3RpbmdcbiIsCisJCQkJICAgICIgZ2xvYmJlZDogJHJlZm5hbWVcbiI7CisJCQl9CisJCQlteSAkdSA9ICg6OmNtdF9tZXRhZGF0YSgiJHJlZm5hbWUiKSlbMF07CisJCQkkdSA9fiBzIV5cUSR1cmxcRSgvfCQpISEgb3IgZGllCisJCQkgICIkcmVmbmFtZTogJyR1cmwnIG5vdCBmb3VuZCBpbiAnJHUnXG4iOworCQkJaWYgKCRwYXRobmFtZSBuZSAkdSkgeworCQkJCXdhcm4gIlc6IFJlZnNwZWMgZ2xvYiBjb25mbGljdCAiLAorCQkJCSAgICAgIihyZWY6ICRyZWZuYW1lKTpcbiIsCisJCQkJICAgICAiZXhwZWN0ZWQgcGF0aDogJHBhdGhuYW1lXG4iLAorCQkJCSAgICAgIiAgICByZWFsIHBhdGg6ICR1XG4iLAorCQkJCSAgICAgIkNvbnRpbnVpbmcgYWhlYWQgd2l0aCAkdVxuIjsKKwkJCQluZXh0OworCQkJfQorCQl9IGVsc2UgeworCQkJJGZldGNoLT57JHBhdGhuYW1lfSA9ICRyZWZuYW1lOworCQl9CisJfQorfQorCitzdWIgcGFyc2VfcmV2aXNpb25fYXJndW1lbnQgeworCW15ICgkYmFzZSwgJGhlYWQpID0gQF87CisJaWYgKCFkZWZpbmVkICQ6Ol9yZXZpc2lvbiB8fCAkOjpfcmV2aXNpb24gZXEgJ0JBU0U6SEVBRCcpIHsKKwkJcmV0dXJuICgkYmFzZSwgJGhlYWQpOworCX0KKwlyZXR1cm4gKCQxLCAkMikgaWYgKCQ6Ol9yZXZpc2lvbiA9fiAvXihcZCspOihcZCspJC8pOworCXJldHVybiAoJDo6X3JldmlzaW9uLCAkOjpfcmV2aXNpb24pIGlmICgkOjpfcmV2aXNpb24gPX4gL15cZCskLyk7CisJcmV0dXJuICgkaGVhZCwgJGhlYWQpIGlmICgkOjpfcmV2aXNpb24gZXEgJ0hFQUQnKTsKKwlyZXR1cm4gKCRiYXNlLCAkMSkgaWYgKCQ6Ol9yZXZpc2lvbiA9fiAvXkJBU0U6KFxkKykkLyk7CisJcmV0dXJuICgkMSwgJGhlYWQpIGlmICgkOjpfcmV2aXNpb24gPX4gL14oXGQrKTpIRUFEJC8pOworCWRpZSAicmV2aXNpb24gYXJndW1lbnQ6ICQ6Ol9yZXZpc2lvbiBub3QgdW5kZXJzdG9vZCBieSBnaXQtc3ZuXG4iOworfQorCitzdWIgZmV0Y2hfYWxsIHsKKwlteSAoJHJlcG9faWQsICRyZW1vdGVzKSA9IEBfOworCWlmIChyZWYgJHJlcG9faWQpIHsKKwkJbXkgJGdzID0gJHJlcG9faWQ7CisJCSRyZXBvX2lkID0gdW5kZWY7CisJCSRyZXBvX2lkID0gJGdzLT57cmVwb19pZH07CisJfQorCSRyZW1vdGVzIHx8PSByZWFkX2FsbF9yZW1vdGVzKCk7CisJbXkgJHJlbW90ZSA9ICRyZW1vdGVzLT57JHJlcG9faWR9IG9yCisJICAgICAgICAgICAgIGRpZSAiW3N2bi1yZW1vdGUgXCIkcmVwb19pZFwiXSB1bmtub3duXG4iOworCW15ICRmZXRjaCA9ICRyZW1vdGUtPntmZXRjaH07CisJbXkgJHVybCA9ICRyZW1vdGUtPnt1cmx9IG9yIGRpZSAic3ZuLXJlbW90ZS4kcmVwb19pZC51cmwgbm90IGRlZmluZWRcbiI7CisJbXkgKEBncywgQGdsb2JzKTsKKwlteSAkcmEgPSBHaXQ6OlNWTjo6UmEtPm5ldygkdXJsKTsKKwlteSAkdXVpZCA9ICRyYS0+Z2V0X3V1aWQ7CisJbXkgJGhlYWQgPSAkcmEtPmdldF9sYXRlc3RfcmV2bnVtOworCisJIyBpZ25vcmUgZXJyb3JzLCAkaGVhZCByZXZpc2lvbiBtYXkgbm90IGV2ZW4gZXhpc3QgYW55bW9yZQorCWV2YWwgeyAkcmEtPmdldF9sb2coIiIsICRoZWFkLCAwLCAxLCAwLCAxLCBzdWIgeyAkaGVhZCA9ICRfWzFdIH0pIH07CisJd2FybiAiVzogJEBcbiIgaWYgJEA7CisKKwlteSAkYmFzZSA9IGRlZmluZWQgJGZldGNoID8gJGhlYWQgOiAwOworCisJIyByZWFkIHRoZSBtYXggcmV2cyBmb3Igd2lsZGNhcmQgZXhwYW5zaW9uIChicmFuY2hlcy8qLCB0YWdzLyopCisJZm9yZWFjaCBteSAkdCAocXcvYnJhbmNoZXMgdGFncy8pIHsKKwkJZGVmaW5lZCAkcmVtb3RlLT57JHR9IG9yIG5leHQ7CisJCXB1c2ggQGdsb2JzLCBAeyRyZW1vdGUtPnskdH19OworCisJCW15ICRtYXhfcmV2ID0gZXZhbCB7IHRtcF9jb25maWcocXcvLS1pbnQgLS1nZXQvLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgInN2bi1yZW1vdGUuJHJlcG9faWQuJHt0fS1tYXhSZXYiKSB9OworCQlpZiAoZGVmaW5lZCAkbWF4X3JldiAmJiAoJG1heF9yZXYgPCAkYmFzZSkpIHsKKwkJCSRiYXNlID0gJG1heF9yZXY7CisJCX0gZWxzaWYgKCFkZWZpbmVkICRtYXhfcmV2KSB7CisJCQkkYmFzZSA9IDA7CisJCX0KKwl9CisKKwlpZiAoJGZldGNoKSB7CisJCWZvcmVhY2ggbXkgJHAgKHNvcnQga2V5cyAlJGZldGNoKSB7CisJCQlteSAkZ3MgPSBHaXQ6OlNWTi0+bmV3KCRmZXRjaC0+eyRwfSwgJHJlcG9faWQsICRwKTsKKwkJCW15ICRsciA9ICRncy0+cmV2X21hcF9tYXg7CisJCQlpZiAoZGVmaW5lZCAkbHIpIHsKKwkJCQkkYmFzZSA9ICRsciBpZiAoJGxyIDwgJGJhc2UpOworCQkJfQorCQkJcHVzaCBAZ3MsICRnczsKKwkJfQorCX0KKworCSgkYmFzZSwgJGhlYWQpID0gcGFyc2VfcmV2aXNpb25fYXJndW1lbnQoJGJhc2UsICRoZWFkKTsKKwkkcmEtPmdzX2ZldGNoX2xvb3BfY29tbW9uKCRiYXNlLCAkaGVhZCwgXEBncywgXEBnbG9icyk7Cit9CisKK3N1YiByZWFkX2FsbF9yZW1vdGVzIHsKKwlteSAkciA9IHt9OworCW15ICR1c2Vfc3ZtX3Byb3BzID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZShxdy9jb25maWcgLS1ib29sCisJICAgIHN2bi51c2VTdm1Qcm9wcy8pIH07CisJJHVzZV9zdm1fcHJvcHMgPSAkdXNlX3N2bV9wcm9wcyBlcSAndHJ1ZScgaWYgJHVzZV9zdm1fcHJvcHM7CisJbXkgJHN2bl9yZWZzcGVjID0gcXJ7XHMqKC4qPylccyo6XHMqKC4rPylccyp9OworCWZvcmVhY2ggKGdyZXAgeyBzL15zdm4tcmVtb3RlXC4vLyB9IGNvbW1hbmQocXcvY29uZmlnIC1sLykpIHsKKwkJaWYgKG0hXiguKylcLmZldGNoPSRzdm5fcmVmc3BlYyQhKSB7CisJCQlteSAoJHJlbW90ZSwgJGxvY2FsX3JlZiwgJHJlbW90ZV9yZWYpID0gKCQxLCAkMiwgJDMpOworCQkJZGllKCJzdm4tcmVtb3RlLiRyZW1vdGU6IHJlbW90ZSByZWYgJyRyZW1vdGVfcmVmJyAiCisJCQkgICAgLiAibXVzdCBzdGFydCB3aXRoICdyZWZzLydcbiIpCisJCQkJdW5sZXNzICRyZW1vdGVfcmVmID1+IG17XnJlZnMvfTsKKwkJCSRsb2NhbF9yZWYgPSB1cmlfZGVjb2RlKCRsb2NhbF9yZWYpOworCQkJJHItPnskcmVtb3RlfS0+e2ZldGNofS0+eyRsb2NhbF9yZWZ9ID0gJHJlbW90ZV9yZWY7CisJCQkkci0+eyRyZW1vdGV9LT57c3ZtfSA9IHt9IGlmICR1c2Vfc3ZtX3Byb3BzOworCQl9IGVsc2lmIChtIV4oLispXC51c2Vzdm1wcm9wcz1ccyooLiopXHMqJCEpIHsKKwkJCSRyLT57JDF9LT57c3ZtfSA9IHt9OworCQl9IGVsc2lmIChtIV4oLispXC51cmw9XHMqKC4qKVxzKiQhKSB7CisJCQkkci0+eyQxfS0+e3VybH0gPSBjYW5vbmljYWxpemVfdXJsKCQyKTsKKwkJfSBlbHNpZiAobSFeKC4rKVwucHVzaHVybD1ccyooLiopXHMqJCEpIHsKKwkJCSRyLT57JDF9LT57cHVzaHVybH0gPSBjYW5vbmljYWxpemVfdXJsKCQyKTsKKwkJfSBlbHNpZiAobSFeKC4rKVwuaWdub3JlLXJlZnM9XHMqKC4qKVxzKiQhKSB7CisJCQkkci0+eyQxfS0+e2lnbm9yZV9yZWZzX3JlZ2V4fSA9ICQyOworCQl9IGVsc2lmIChtIV4oLispXC4oYnJhbmNoZXN8dGFncyk9JHN2bl9yZWZzcGVjJCEpIHsKKwkJCW15ICgkcmVtb3RlLCAkdCwgJGxvY2FsX3JlZiwgJHJlbW90ZV9yZWYpID0KKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJDEsICQyLCAkMywgJDQpOworCQkJZGllKCJzdm4tcmVtb3RlLiRyZW1vdGU6IHJlbW90ZSByZWYgJyRyZW1vdGVfcmVmJyAoJHQpICIKKwkJCSAgICAuICJtdXN0IHN0YXJ0IHdpdGggJ3JlZnMvJ1xuIikKKwkJCQl1bmxlc3MgJHJlbW90ZV9yZWYgPX4gbXtecmVmcy99OworCQkJJGxvY2FsX3JlZiA9IHVyaV9kZWNvZGUoJGxvY2FsX3JlZik7CisKKwkJCXJlcXVpcmUgR2l0OjpTVk46Okdsb2JTcGVjOworCQkJbXkgJHJzID0geworCQkJICAgIHQgPT4gJHQsCisJCQkgICAgcmVtb3RlID0+ICRyZW1vdGUsCisJCQkgICAgcGF0aCA9PiBHaXQ6OlNWTjo6R2xvYlNwZWMtPm5ldygkbG9jYWxfcmVmLCAxKSwKKwkJCSAgICByZWYgPT4gR2l0OjpTVk46Okdsb2JTcGVjLT5uZXcoJHJlbW90ZV9yZWYsIDApIH07CisJCQlpZiAobGVuZ3RoKCRycy0+e3JlZn0tPntyaWdodH0pICE9IDApIHsKKwkJCQlkaWUgIlRoZSAnKicgZ2xvYiBjaGFyYWN0ZXIgbXVzdCBiZSB0aGUgbGFzdCAiLAorCQkJCSAgICAiY2hhcmFjdGVyIG9mICckcmVtb3RlX3JlZidcbiI7CisJCQl9CisJCQlwdXNoIEB7ICRyLT57JHJlbW90ZX0tPnskdH0gfSwgJHJzOworCQl9CisJfQorCisJbWFwIHsKKwkJaWYgKGRlZmluZWQgJHItPnskX30tPntzdm19KSB7CisJCQlteSAkc3ZtOworCQkJZXZhbCB7CisJCQkJbXkgJHNlY3Rpb24gPSAic3ZuLXJlbW90ZS4kXyI7CisJCQkJJHN2bSA9IHsKKwkJCQkJc291cmNlID0+IHRtcF9jb25maWcoJy0tZ2V0JywKKwkJCQkJICAgICIkc2VjdGlvbi5zdm0tc291cmNlIiksCisJCQkJCXJlcGxhY2UgPT4gdG1wX2NvbmZpZygnLS1nZXQnLAorCQkJCQkgICAgIiRzZWN0aW9uLnN2bS1yZXBsYWNlIiksCisJCQkJfQorCQkJfTsKKwkJCSRyLT57JF99LT57c3ZtfSA9ICRzdm07CisJCX0KKwl9IGtleXMgJSRyOworCisJZm9yZWFjaCBteSAkcmVtb3RlIChrZXlzICUkcikgeworCQlmb3JlYWNoICggZ3JlcCB7IGRlZmluZWQgJF8gfQorCQkJICBtYXAgeyAkci0+eyRyZW1vdGV9LT57JF99IH0gcXcoYnJhbmNoZXMgdGFncykgKSB7CisJCQlmb3JlYWNoIG15ICRycyAoIEAkXyApIHsKKwkJCQkkcnMtPntpZ25vcmVfcmVmc19yZWdleH0gPQorCQkJCSAgICAkci0+eyRyZW1vdGV9LT57aWdub3JlX3JlZnNfcmVnZXh9OworCQkJfQorCQl9CisJfQorCisJJHI7Cit9CisKK3N1YiBpbml0X3ZhcnMgeworCSRfZ2NfbnIgPSAkX2djX3BlcmlvZCA9IDEwMDA7CisJaWYgKGRlZmluZWQgJF9yZXBhY2sgfHwgZGVmaW5lZCAkX3JlcGFja19mbGFncykgeworCSAgICAgICB3YXJuICJSZXBhY2sgb3B0aW9ucyBhcmUgb2Jzb2xldGU7IHRoZXkgaGF2ZSBubyBlZmZlY3QuXG4iOworCX0KK30KKworc3ViIHZlcmlmeV9yZW1vdGVzX3Nhbml0eSB7CisJcmV0dXJuIHVubGVzcyAtZCAkRU5We0dJVF9ESVJ9OworCW15ICVzZWVuOworCWZvcmVhY2ggKGNvbW1hbmQocXcvY29uZmlnIC1sLykpIHsKKwkJaWYgKG0hXnN2bi1yZW1vdGVcLig/Oi4rKVwuZmV0Y2g9Lio6cmVmcy9yZW1vdGVzLyhcUyspXHMqJCEpIHsKKwkJCWlmICgkc2VlbnskMX0pIHsKKwkJCQlkaWUgIlJlbW90ZSByZWYgcmVmcy9yZW1vdGUvJDEgaXMgdHJhY2tlZCBieSIsCisJCQkJICAgICJcbiAgXCIkX1wiXG5hbmRcbiAgXCIkc2VlbnskMX1cIlxuIiwKKwkJCQkgICAgIlBsZWFzZSByZXNvbHZlIHRoaXMgYW1iaWd1aXR5IGluICIsCisJCQkJICAgICJ5b3VyIGdpdCBjb25maWd1cmF0aW9uIGZpbGUgYmVmb3JlICIsCisJCQkJICAgICJjb250aW51aW5nXG4iOworCQkJfQorCQkJJHNlZW57JDF9ID0gJF87CisJCX0KKwl9Cit9CisKK3N1YiBmaW5kX2V4aXN0aW5nX3JlbW90ZSB7CisJbXkgKCR1cmwsICRyZW1vdGVzKSA9IEBfOworCXJldHVybiB1bmRlZiBpZiAkbm9fcmV1c2VfZXhpc3Rpbmc7CisJbXkgJGV4aXN0aW5nOworCWZvcmVhY2ggbXkgJHJlcG9faWQgKGtleXMgJSRyZW1vdGVzKSB7CisJCW15ICR1ID0gJHJlbW90ZXMtPnskcmVwb19pZH0tPnt1cmx9IG9yIG5leHQ7CisJCW5leHQgaWYgJHUgbmUgJHVybDsKKwkJJGV4aXN0aW5nID0gJHJlcG9faWQ7CisJCWxhc3Q7CisJfQorCSRleGlzdGluZzsKK30KKworc3ViIGluaXRfcmVtb3RlX2NvbmZpZyB7CisJbXkgKCRzZWxmLCAkdXJsLCAkbm9fd3JpdGUpID0gQF87CisJJHVybCA9IGNhbm9uaWNhbGl6ZV91cmwoJHVybCk7CisJbXkgJHIgPSByZWFkX2FsbF9yZW1vdGVzKCk7CisJbXkgJGV4aXN0aW5nID0gZmluZF9leGlzdGluZ19yZW1vdGUoJHVybCwgJHIpOworCWlmICgkZXhpc3RpbmcpIHsKKwkJdW5sZXNzICgkbm9fd3JpdGUpIHsKKwkJCXByaW50IFNUREVSUiAiVXNpbmcgZXhpc3RpbmcgIiwKKwkJCQkgICAgICJbc3ZuLXJlbW90ZSBcIiRleGlzdGluZ1wiXVxuIjsKKwkJfQorCQkkc2VsZi0+e3JlcG9faWR9ID0gJGV4aXN0aW5nOworCX0gZWxzaWYgKCRfbWluaW1pemVfdXJsKSB7CisJCW15ICRtaW5fdXJsID0gR2l0OjpTVk46OlJhLT5uZXcoJHVybCktPm1pbmltaXplX3VybDsKKwkJJGV4aXN0aW5nID0gZmluZF9leGlzdGluZ19yZW1vdGUoJG1pbl91cmwsICRyKTsKKwkJaWYgKCRleGlzdGluZykgeworCQkJdW5sZXNzICgkbm9fd3JpdGUpIHsKKwkJCQlwcmludCBTVERFUlIgIlVzaW5nIGV4aXN0aW5nICIsCisJCQkJCSAgICAgIltzdm4tcmVtb3RlIFwiJGV4aXN0aW5nXCJdXG4iOworCQkJfQorCQkJJHNlbGYtPntyZXBvX2lkfSA9ICRleGlzdGluZzsKKwkJfQorCQlpZiAoJG1pbl91cmwgbmUgJHVybCkgeworCQkJdW5sZXNzICgkbm9fd3JpdGUpIHsKKwkJCQlwcmludCBTVERFUlIgIlVzaW5nIGhpZ2hlciBsZXZlbCBvZiBVUkw6ICIsCisJCQkJCSAgICAgIiR1cmwgPT4gJG1pbl91cmxcbiI7CisJCQl9CisJCQlteSAkb2xkX3BhdGggPSAkc2VsZi0+cGF0aDsKKwkJCSR1cmwgPX4gcyFeXFEkbWluX3VybFxFKC98JCkhITsKKwkJCSR1cmwgPSBqb2luX3BhdGhzKCR1cmwsICRvbGRfcGF0aCk7CisJCQkkc2VsZi0+cGF0aCgkdXJsKTsKKwkJCSR1cmwgPSAkbWluX3VybDsKKwkJfQorCX0KKwlteSAkb3JpZ191cmw7CisJaWYgKCEkZXhpc3RpbmcpIHsKKwkJIyB2ZXJpZnkgdGhhdCB3ZSBhcmVuJ3Qgb3ZlcndyaXRpbmcgYW55dGhpbmc6CisJCSRvcmlnX3VybCA9IGV2YWwgeworCQkJY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLAorCQkJCQkic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9LnVybCIpCisJCX07CisJCWlmICgkb3JpZ191cmwgJiYgKCRvcmlnX3VybCBuZSAkdXJsKSkgeworCQkJZGllICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0udXJsIGFscmVhZHkgc2V0OiAiLAorCQkJICAgICIkb3JpZ191cmxcbndhbnRlZCB0byBzZXQgdG86ICR1cmxcbiI7CisJCX0KKwl9CisJbXkgKCR4cmVwb19pZCwgJHhwYXRoKSA9IGZpbmRfcmVmKCRzZWxmLT5yZWZuYW1lKTsKKwlpZiAoISRub193cml0ZSAmJiBkZWZpbmVkICR4cGF0aCkgeworCQlkaWUgInN2bi1yZW1vdGUuJHhyZXBvX2lkLmZldGNoIGFscmVhZHkgc2V0IHRvIHRyYWNrICIsCisJCSAgICAiJHhwYXRoOiIsICRzZWxmLT5yZWZuYW1lLCAiXG4iOworCX0KKwl1bmxlc3MgKCRub193cml0ZSkgeworCQljb21tYW5kX25vaXN5KCdjb25maWcnLAorCQkJICAgICAgInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS51cmwiLCAkdXJsKTsKKwkJbXkgJHBhdGggPSAkc2VsZi0+cGF0aDsKKwkJJHBhdGggPX4gc3teL317fTsKKwkJJHBhdGggPX4gc3slKFswLTlBLUZdezJ9KX17Y2hyIGhleCgkMSl9aWVnOworCQkkc2VsZi0+cGF0aCgkcGF0aCk7CisJCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICctLWFkZCcsCisJCQkgICAgICAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9LmZldGNoIiwKKwkJCSAgICAgICRzZWxmLT5wYXRoLiI6Ii4kc2VsZi0+cmVmbmFtZSk7CisJfQorCSRzZWxmLT51cmwoJHVybCk7Cit9CisKK3N1YiBmaW5kX2J5X3VybCB7ICMgcmVwb3Nfcm9vdCBhbmQsIHBhdGggYXJlIG9wdGlvbmFsCisJbXkgKCRjbGFzcywgJGZ1bGxfdXJsLCAkcmVwb3Nfcm9vdCwgJHBhdGgpID0gQF87CisKKwkkZnVsbF91cmwgPSBjYW5vbmljYWxpemVfdXJsKCRmdWxsX3VybCk7CisKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJGZ1bGxfdXJsOworCXJlbW92ZV91c2VybmFtZSgkZnVsbF91cmwpOworCXJlbW92ZV91c2VybmFtZSgkcmVwb3Nfcm9vdCkgaWYgZGVmaW5lZCAkcmVwb3Nfcm9vdDsKKwlteSAkcmVtb3RlcyA9IHJlYWRfYWxsX3JlbW90ZXMoKTsKKwlpZiAoZGVmaW5lZCAkZnVsbF91cmwgJiYgZGVmaW5lZCAkcmVwb3Nfcm9vdCAmJiAhZGVmaW5lZCAkcGF0aCkgeworCQkkcGF0aCA9ICRmdWxsX3VybDsKKwkJJHBhdGggPX4gcyNeXFEkcmVwb3Nfcm9vdFxFKD86L3wkKSMjOworCX0KKwlmb3JlYWNoIG15ICRyZXBvX2lkIChrZXlzICUkcmVtb3RlcykgeworCQlteSAkdSA9ICRyZW1vdGVzLT57JHJlcG9faWR9LT57dXJsfSBvciBuZXh0OworCQlyZW1vdmVfdXNlcm5hbWUoJHUpOworCQluZXh0IGlmIGRlZmluZWQgJHJlcG9zX3Jvb3QgJiYgJHJlcG9zX3Jvb3QgbmUgJHU7CisKKwkJbXkgJGZldGNoID0gJHJlbW90ZXMtPnskcmVwb19pZH0tPntmZXRjaH0gfHwge307CisJCWZvcmVhY2ggbXkgJHQgKHF3L2JyYW5jaGVzIHRhZ3MvKSB7CisJCQlmb3JlYWNoIG15ICRnbG9ic3BlYyAoQHskcmVtb3Rlcy0+eyRyZXBvX2lkfS0+eyR0fX0pIHsKKwkJCQlyZXNvbHZlX2xvY2FsX2dsb2JzKCR1LCAkZmV0Y2gsICRnbG9ic3BlYyk7CisJCQl9CisJCX0KKwkJbXkgJHAgPSAkcGF0aDsKKwkJbXkgJHJ3ciA9IHJld3JpdGVfcm9vdCh7cmVwb19pZCA9PiAkcmVwb19pZH0pOworCQlteSAkc3ZtID0gJHJlbW90ZXMtPnskcmVwb19pZH0tPntzdm19CisJCQlpZiBkZWZpbmVkICRyZW1vdGVzLT57JHJlcG9faWR9LT57c3ZtfTsKKwkJdW5sZXNzIChkZWZpbmVkICRwKSB7CisJCQkkcCA9ICRmdWxsX3VybDsKKwkJCW15ICR6ID0gJHU7CisJCQlteSAkcHJlZml4ID0gJyc7CisJCQlpZiAoJHJ3cikgeworCQkJCSR6ID0gJHJ3cjsKKwkJCQlyZW1vdmVfdXNlcm5hbWUoJHopOworCQkJfSBlbHNpZiAoZGVmaW5lZCAkc3ZtKSB7CisJCQkJJHogPSAkc3ZtLT57c291cmNlfTsKKwkJCQkkcHJlZml4ID0gJHN2bS0+e3JlcGxhY2V9OworCQkJCSRwcmVmaXggPX4gcyNeXFEkdVxFKD86L3wkKSMjOworCQkJCSRwcmVmaXggPX4gcyMvJCMjOworCQkJfQorCQkJJHAgPX4gcyNeXFEkelxFKD86L3wkKSMkcHJlZml4IyBvciBuZXh0OworCQl9CisKKwkJIyByZW1vdGUgZmV0Y2ggcGF0aHMgYXJlIG5vdCBVUkkgZXNjYXBlZC4gIERlY29kZSBvdXJzCisJCSMgc28gdGhleSBtYXRjaAorCQkkcCA9IHVyaV9kZWNvZGUoJHApOworCisJCWZvcmVhY2ggbXkgJGYgKGtleXMgJSRmZXRjaCkgeworCQkJbmV4dCBpZiAkZiBuZSAkcDsKKwkJCXJldHVybiBHaXQ6OlNWTi0+bmV3KCRmZXRjaC0+eyRmfSwgJHJlcG9faWQsICRmKTsKKwkJfQorCX0KKwl1bmRlZjsKK30KKworc3ViIGluaXQgeworCW15ICgkY2xhc3MsICR1cmwsICRwYXRoLCAkcmVwb19pZCwgJHJlZl9pZCwgJG5vX3dyaXRlKSA9IEBfOworCW15ICRzZWxmID0gX25ldygkY2xhc3MsICRyZXBvX2lkLCAkcmVmX2lkLCAkcGF0aCk7CisJaWYgKGRlZmluZWQgJHVybCkgeworCQkkc2VsZi0+aW5pdF9yZW1vdGVfY29uZmlnKCR1cmwsICRub193cml0ZSk7CisJfQorCSRzZWxmOworfQorCitzdWIgZmluZF9yZWYgeworCW15ICgkcmVmX2lkKSA9IEBfOworCWZvcmVhY2ggKGNvbW1hbmQocXcvY29uZmlnIC1sLykpIHsKKwkJbmV4dCB1bmxlc3MgbSFec3ZuLXJlbW90ZVwuKC4rKVwuZmV0Y2g9CisJCSAgICAgICAgICAgICAgXHMqKC4qPylccyo6XHMqKC4rPylccyokIXg7CisJCW15ICgkcmVwb19pZCwgJHBhdGgsICRyZWYpID0gKCQxLCAkMiwgJDMpOworCQlpZiAoJHJlZiBlcSAkcmVmX2lkKSB7CisJCQkkcGF0aCA9ICcnIGlmICgkcGF0aCA9fiBtI15cLi8/Iyk7CisJCQlyZXR1cm4gKCRyZXBvX2lkLCAkcGF0aCk7CisJCX0KKwl9CisJKHVuZGVmLCB1bmRlZiwgdW5kZWYpOworfQorCitzdWIgbmV3IHsKKwlteSAoJGNsYXNzLCAkcmVmX2lkLCAkcmVwb19pZCwgJHBhdGgpID0gQF87CisJaWYgKGRlZmluZWQgJHJlZl9pZCAmJiAhZGVmaW5lZCAkcmVwb19pZCAmJiAhZGVmaW5lZCAkcGF0aCkgeworCQkoJHJlcG9faWQsICRwYXRoKSA9IGZpbmRfcmVmKCRyZWZfaWQpOworCQlpZiAoIWRlZmluZWQgJHJlcG9faWQpIHsKKwkJCWRpZSAiQ291bGQgbm90IGZpbmQgYSBcInN2bi1yZW1vdGUuKi5mZXRjaFwiIGtleSAiLAorCQkJICAgICJpbiB0aGUgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIG1hdGNoaW5nOiAiLAorCQkJICAgICIkcmVmX2lkXG4iOworCQl9CisJfQorCW15ICRzZWxmID0gX25ldygkY2xhc3MsICRyZXBvX2lkLCAkcmVmX2lkLCAkcGF0aCk7CisJaWYgKCFkZWZpbmVkICRzZWxmLT5wYXRoIHx8ICFsZW5ndGggJHNlbGYtPnBhdGgpIHsKKwkJbXkgJGZldGNoID0gY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN2bi1yZW1vdGUuJHJlcG9faWQuZmV0Y2giLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjokcmVmX2lkXCQiKSBvcgorCQkgICAgIGRpZSAiRmFpbGVkIHRvIHJlYWQgXCJzdm4tcmVtb3RlLiRyZXBvX2lkLmZldGNoXCIgIiwKKwkJICAgICAgICAgIlwiOiRyZWZfaWRcJFwiIGluIGNvbmZpZ1xuIjsKKwkJbXkoJHBhdGgpID0gc3BsaXQoL1xzKjpccyovLCAkZmV0Y2gpOworCQkkc2VsZi0+cGF0aCgkcGF0aCk7CisJfQorCXsKKwkJbXkgJHBhdGggPSAkc2VsZi0+cGF0aDsKKwkJJHBhdGggPX4gc3tcQS99e307CisJCSRwYXRoID1+IHN7L1x6fXt9OworCQkkc2VsZi0+cGF0aCgkcGF0aCk7CisJfQorCW15ICR1cmwgPSBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAic3ZuLXJlbW90ZS4kcmVwb19pZC51cmwiKSBvcgorICAgICAgICAgICAgICAgICAgZGllICJGYWlsZWQgdG8gcmVhZCBcInN2bi1yZW1vdGUuJHJlcG9faWQudXJsXCIgaW4gY29uZmlnXG4iOworCSRzZWxmLT51cmwoJHVybCk7CisJJHNlbGYtPntwdXNodXJsfSA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAic3ZuLXJlbW90ZS4kcmVwb19pZC5wdXNodXJsIikgfTsKKwkkc2VsZi0+cmVidWlsZDsKKwkkc2VsZjsKK30KKworc3ViIHJlZm5hbWUgeworCW15ICgkcmVmbmFtZSkgPSAkX1swXS0+e3JlZl9pZH0gOworCisJIyBJdCBjYW5ub3QgZW5kIHdpdGggYSBzbGFzaCAvLCB3ZSdsbCB0aHJvdyB1cCBvbiB0aGlzIGJlY2F1c2UKKwkjIFNWTiBjYW4ndCBoYXZlIGRpcmVjdG9yaWVzIHdpdGggYSBzbGFzaCBpbiB0aGVpciBuYW1lLCBlaXRoZXI6CisJaWYgKCRyZWZuYW1lID1+IG17LyR9KSB7CisJCWRpZSAicmVmOiAnJHJlZm5hbWUnIGVuZHMgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLCB0aGlzIGlzICIsCisJCSAgICAibm90IHBlcm1pdHRlZCBieSBnaXQgbm9yIFN1YnZlcnNpb25cbiI7CisJfQorCisJIyBJdCBjYW5ub3QgaGF2ZSBBU0NJSSBjb250cm9sIGNoYXJhY3RlciBzcGFjZSwgdGlsZGUgfiwgY2FyZXQgXiwKKwkjIGNvbG9uIDosIHF1ZXN0aW9uLW1hcmsgPywgYXN0ZXJpc2sgKiwgc3BhY2UsIG9yIG9wZW4gYnJhY2tldCBbCisJIyBhbnl3aGVyZS4KKwkjCisJIyBBZGRpdGlvbmFsbHksICUgbXVzdCBiZSBlc2NhcGVkIGJlY2F1c2UgaXQgaXMgdXNlZCBmb3IgZXNjYXBpbmcKKwkjIGFuZCB3ZSB3YW50IG91ciBlc2NhcGVkIHJlZm5hbWUgdG8gYmUgcmV2ZXJzaWJsZQorCSRyZWZuYW1lID1+IHN7KFsgXCV+XF46XD9cKlxbXHRdKX17dWMgc3ByaW50ZignJSUlMDJ4JyxvcmQoJDEpKX1lZzsKKworCSMgbm8gc2xhc2gtc2VwYXJhdGVkIGNvbXBvbmVudCBjYW4gYmVnaW4gd2l0aCBhIGRvdCAuCisJIyAvLiogYmVjb21lcyAvJTJFKgorCSRyZWZuYW1lID1+IHN7L1wufXsvJTJFfWc7CisKKwkjIEl0IGNhbm5vdCBoYXZlIHR3byBjb25zZWN1dGl2ZSBkb3RzIC4uIGFueXdoZXJlCisJIyAuLiBiZWNvbWVzICUyRSUyRQorCSRyZWZuYW1lID1+IHN7XC5cLn17JTJFJTJFfWc7CisKKwkjIHRyYWlsaW5nIGRvdHMgYW5kIC5sb2NrIGFyZSBub3QgYWxsb3dlZAorCSMgLiQgYmVjb21lcyAlMkUgYW5kIC5sb2NrIGJlY29tZXMgJTJFbG9jaworCSRyZWZuYW1lID1+IHN7XC4oPz0kfGxvY2skKX17JTJFfTsKKworCSMgdGhlIHNlcXVlbmNlIEB7IGlzIHVzZWQgdG8gYWNjZXNzIHRoZSByZWZsb2cKKwkjIEB7IGJlY29tZXMgJTQweworCSRyZWZuYW1lID1+IHN7XEBce317JTQwXHt9ZzsKKworCXJldHVybiAkcmVmbmFtZTsKK30KKworc3ViIGRlc2FuaXRpemVfcmVmbmFtZSB7CisJbXkgKCRyZWZuYW1lKSA9IEBfOworCSRyZWZuYW1lID1+IHN7JSg/OihbMC05QS1GXXsyfSkpfXtjaHIgaGV4KCQxKX1lZzsKKwlyZXR1cm4gJHJlZm5hbWU7Cit9CisKK3N1YiBzdm1fdXVpZCB7CisJbXkgKCRzZWxmKSA9IEBfOworCXJldHVybiAkc2VsZi0+e3N2bX0tPnt1dWlkfSBpZiAkc2VsZi0+c3ZtOworCSRzZWxmLT5yYTsKKwl1bmxlc3MgKCRzZWxmLT57c3ZtfSkgeworCQlkaWUgIlNWTSBVVUlEIG5vdCBjYWNoZWQsIGFuZCByZWFkaW5nIHJlbW90ZWx5IGZhaWxlZFxuIjsKKwl9CisJJHNlbGYtPntzdm19LT57dXVpZH07Cit9CisKK3N1YiBzdm0geworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPntzdm19IGlmICRzZWxmLT57c3ZtfTsKKwlteSAkc3ZtOworCSMgc2VlIGlmIHdlIGhhdmUgaXQgaW4gb3VyIGNvbmZpZywgZmlyc3Q6CisJZXZhbCB7CisJCW15ICRzZWN0aW9uID0gInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfSI7CisJCSRzdm0gPSB7CisJCSAgc291cmNlID0+IHRtcF9jb25maWcoJy0tZ2V0JywgIiRzZWN0aW9uLnN2bS1zb3VyY2UiKSwKKwkJICB1dWlkID0+IHRtcF9jb25maWcoJy0tZ2V0JywgIiRzZWN0aW9uLnN2bS11dWlkIiksCisJCSAgcmVwbGFjZSA9PiB0bXBfY29uZmlnKCctLWdldCcsICIkc2VjdGlvbi5zdm0tcmVwbGFjZSIpLAorCQl9CisJfTsKKwlpZiAoJHN2bSAmJiAkc3ZtLT57c291cmNlfSAmJiAkc3ZtLT57dXVpZH0gJiYgJHN2bS0+e3JlcGxhY2V9KSB7CisJCSRzZWxmLT57c3ZtfSA9ICRzdm07CisJfQorCSRzZWxmLT57c3ZtfTsKK30KKworc3ViIF9zZXRfc3ZtX3ZhcnMgeworCW15ICgkc2VsZiwgJHJhKSA9IEBfOworCXJldHVybiAkcmEgaWYgJHNlbGYtPnN2bTsKKworCW15IEBlcnIgPSAoICJ1c2VTdm1Qcm9wcyBzZXQsIGJ1dCBmYWlsZWQgdG8gcmVhZCBTVk0gcHJvcGVydGllc1xuIiwKKwkJICAgICIoc3ZtOnNvdXJjZSwgc3ZtOnV1aWQpICIsCisJCSAgICAiZnJvbSB0aGUgZm9sbG93aW5nIFVSTHM6XG4iICk7CisJc3ViIHJlYWRfc3ZtX3Byb3BzIHsKKwkJbXkgKCRzZWxmLCAkcmEsICRwYXRoLCAkcikgPSBAXzsKKwkJbXkgJHByb3BzID0gKCRyYS0+Z2V0X2RpcigkcGF0aCwgJHIpKVsyXTsKKwkJbXkgJHNyYyA9ICRwcm9wcy0+eydzdm06c291cmNlJ307CisJCW15ICR1dWlkID0gJHByb3BzLT57J3N2bTp1dWlkJ307CisJCXJldHVybiB1bmRlZiBpZiAoISRzcmMgfHwgISR1dWlkKTsKKworCQljaG9tcCgkc3JjLCAkdXVpZCk7CisKKwkJJHV1aWQgPX4gbXteWzAtOWEtZlwtXXszMCx9JH1pCisJCSAgICBvciBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bTp1dWlkIGlzICckdXVpZCdcbiI7CisKKwkJIyB0aGUgJyEnIGlzIHVzZWQgdG8gbWFyayB0aGUgcmVwb3Nfcm9vdCEvcmVsYXRpdmUvcGF0aAorCQkkc3JjID1+IHN7Lz8hLz99ey99OworCQkkc3JjID1+IHN7LyskfXt9OyAjIG5vIHRyYWlsaW5nIHNsYXNoZXMgcGxlYXNlCisJCSMgdXNlcm5hbWUgaXMgb2Ygbm8gaW50ZXJlc3QKKwkJJHNyYyA9fiBzeyheW2EtelwrXSo6Ly8pW14vQF0qQH17JDF9OworCisJCW15ICRyZXBsYWNlID0gYWRkX3BhdGhfdG9fdXJsKCRyYS0+dXJsLCAkcGF0aCk7CisKKwkJbXkgJHNlY3Rpb24gPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9IjsKKwkJdG1wX2NvbmZpZygiJHNlY3Rpb24uc3ZtLXNvdXJjZSIsICRzcmMpOworCQl0bXBfY29uZmlnKCIkc2VjdGlvbi5zdm0tcmVwbGFjZSIsICRyZXBsYWNlKTsKKwkJdG1wX2NvbmZpZygiJHNlY3Rpb24uc3ZtLXV1aWQiLCAkdXVpZCk7CisJCSRzZWxmLT57c3ZtfSA9IHsKKwkJCXNvdXJjZSA9PiAkc3JjLAorCQkJdXVpZCA9PiAkdXVpZCwKKwkJCXJlcGxhY2UgPT4gJHJlcGxhY2UKKwkJfTsKKwl9CisKKwlteSAkciA9ICRyYS0+Z2V0X2xhdGVzdF9yZXZudW07CisJbXkgJHBhdGggPSAkc2VsZi0+cGF0aDsKKwlteSAldHJpZWQ7CisJd2hpbGUgKGxlbmd0aCAkcGF0aCkgeworCQlteSAkdHJ5ID0gYWRkX3BhdGhfdG9fdXJsKCRzZWxmLT51cmwsICRwYXRoKTsKKwkJdW5sZXNzICgkdHJpZWR7JHRyeX0pIHsKKwkJCXJldHVybiAkcmEgaWYgJHNlbGYtPnJlYWRfc3ZtX3Byb3BzKCRyYSwgJHBhdGgsICRyKTsKKwkJCSR0cmllZHskdHJ5fSA9IDE7CisJCX0KKwkJJHBhdGggPX4gcyMvP1teL10rJCMjOworCX0KKwlkaWUgIlBhdGg6ICckcGF0aCcgc2hvdWxkIGJlICcnXG4iIGlmICRwYXRoIG5lICcnOworCXJldHVybiAkcmEgaWYgJHNlbGYtPnJlYWRfc3ZtX3Byb3BzKCRyYSwgJHBhdGgsICRyKTsKKwkkdHJpZWR7IGFkZF9wYXRoX3RvX3VybCgkc2VsZi0+dXJsLCAkcGF0aCkgfSA9IDE7CisKKwlpZiAoJHJhLT57cmVwb3Nfcm9vdH0gZXEgJHNlbGYtPnVybCkgeworCQlkaWUgQGVyciwgKG1hcCB7ICIgICRfXG4iIH0ga2V5cyAldHJpZWQpLCAiXG4iOworCX0KKworCSMgbm9wZSwgbWFrZSBzdXJlIHdlJ3JlIGNvbm5lY3RlZCB0byB0aGUgcmVwb3NpdG9yeSByb290OgorCW15ICRvazsKKwlteSBAdHJpZWRfYjsKKwkkcGF0aCA9ICRyYS0+e3N2bl9wYXRofTsKKwkkcmEgPSBHaXQ6OlNWTjo6UmEtPm5ldygkcmEtPntyZXBvc19yb290fSk7CisJd2hpbGUgKGxlbmd0aCAkcGF0aCkgeworCQlteSAkdHJ5ID0gYWRkX3BhdGhfdG9fdXJsKCRyYS0+dXJsLCAkcGF0aCk7CisJCXVubGVzcyAoJHRyaWVkeyR0cnl9KSB7CisJCQkkb2sgPSAkc2VsZi0+cmVhZF9zdm1fcHJvcHMoJHJhLCAkcGF0aCwgJHIpOworCQkJbGFzdCBpZiAkb2s7CisJCQkkdHJpZWR7JHRyeX0gPSAxOworCQl9CisJCSRwYXRoID1+IHMjLz9bXi9dKyQjIzsKKwl9CisJZGllICJQYXRoOiAnJHBhdGgnIHNob3VsZCBiZSAnJ1xuIiBpZiAkcGF0aCBuZSAnJzsKKwkkb2sgfHw9ICRzZWxmLT5yZWFkX3N2bV9wcm9wcygkcmEsICRwYXRoLCAkcik7CisJJHRyaWVkeyBhZGRfcGF0aF90b191cmwoJHJhLT51cmwsICRwYXRoKSB9ID0gMTsKKwlpZiAoISRvaykgeworCQlkaWUgQGVyciwgKG1hcCB7ICIgICRfXG4iIH0ga2V5cyAldHJpZWQpLCAiXG4iOworCX0KKwlHaXQ6OlNWTjo6UmEtPm5ldygkc2VsZi0+dXJsKTsKK30KKworc3ViIHN2bnN5bmMgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPntzdm5zeW5jfSBpZiAkc2VsZi0+e3N2bnN5bmN9OworCisJaWYgKCRzZWxmLT5ub19tZXRhZGF0YSkgeworCQlkaWUgIkNhbid0IGhhdmUgYm90aCAnbm9NZXRhZGF0YScgYW5kICIsCisJCSAgICAiJ3VzZVN2bnN5bmNQcm9wcycgb3B0aW9ucyBzZXQhXG4iOworCX0KKwlpZiAoJHNlbGYtPnJld3JpdGVfcm9vdCkgeworCQlkaWUgIkNhbid0IGhhdmUgYm90aCAndXNlU3Zuc3luY1Byb3BzJyBhbmQgJ3Jld3JpdGVSb290JyAiLAorCQkgICAgIm9wdGlvbnMgc2V0IVxuIjsKKwl9CisJaWYgKCRzZWxmLT5yZXdyaXRlX3V1aWQpIHsKKwkJZGllICJDYW4ndCBoYXZlIGJvdGggJ3VzZVN2bnN5bmNQcm9wcycgYW5kICdyZXdyaXRlVVVJRCcgIiwKKwkJICAgICJvcHRpb25zIHNldCFcbiI7CisJfQorCisJbXkgJHN2bnN5bmM7CisJIyBzZWUgaWYgd2UgaGF2ZSBpdCBpbiBvdXIgY29uZmlnLCBmaXJzdDoKKwlldmFsIHsKKwkJbXkgJHNlY3Rpb24gPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9IjsKKworCQlteSAkdXJsID0gdG1wX2NvbmZpZygnLS1nZXQnLCAiJHNlY3Rpb24uc3Zuc3luYy11cmwiKTsKKwkJKCR1cmwpID0gKCR1cmwgPX4gbXteKFthLXpcK10rOi8vXFMrKSR9KSBvcgorCQkgICBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bjpzeW5jLWZyb20tdXJsIGlzICckdXJsJ1xuIjsKKworCQlteSAkdXVpZCA9IHRtcF9jb25maWcoJy0tZ2V0JywgIiRzZWN0aW9uLnN2bnN5bmMtdXVpZCIpOworCQkoJHV1aWQpID0gKCR1dWlkID1+IG17XihbMC05YS1mXC1dezMwLH0pJH1pKSBvcgorCQkgICBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bjpzeW5jLWZyb20tdXVpZCBpcyAnJHV1aWQnXG4iOworCisJCSRzdm5zeW5jID0geyB1cmwgPT4gJHVybCwgdXVpZCA9PiAkdXVpZCB9CisJfTsKKwlpZiAoJHN2bnN5bmMgJiYgJHN2bnN5bmMtPnt1cmx9ICYmICRzdm5zeW5jLT57dXVpZH0pIHsKKwkJcmV0dXJuICRzZWxmLT57c3Zuc3luY30gPSAkc3Zuc3luYzsKKwl9CisKKwlteSAkZXJyID0gInVzZVN2bnN5bmNQcm9wcyBzZXQsIGJ1dCBmYWlsZWQgdG8gcmVhZCAiIC4KKwkgICAgICAgICAgInN2bnN5bmMgcHJvcGVydHk6IHN2bjpzeW5jLWZyb20tIjsKKwlteSAkcnAgPSAkc2VsZi0+cmEtPnJldl9wcm9wbGlzdCgwKTsKKworCW15ICR1cmwgPSAkcnAtPnsnc3ZuOnN5bmMtZnJvbS11cmwnfSBvciBkaWUgJGVyciAuICJ1cmxcbiI7CisJKCR1cmwpID0gKCR1cmwgPX4gbXteKFthLXpcK10rOi8vXFMrKSR9KSBvcgorCSAgICAgICAgICAgZGllICJkb2Vzbid0IGxvb2sgcmlnaHQgLSBzdm46c3luYy1mcm9tLXVybCBpcyAnJHVybCdcbiI7CisKKwlteSAkdXVpZCA9ICRycC0+eydzdm46c3luYy1mcm9tLXV1aWQnfSBvciBkaWUgJGVyciAuICJ1dWlkXG4iOworCSgkdXVpZCkgPSAoJHV1aWQgPX4gbXteKFswLTlhLWZcLV17MzAsfSkkfWkpIG9yCisJICAgICAgICAgICBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bjpzeW5jLWZyb20tdXVpZCBpcyAnJHV1aWQnXG4iOworCisJbXkgJHNlY3Rpb24gPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9IjsKKwl0bXBfY29uZmlnKCctLWFkZCcsICIkc2VjdGlvbi5zdm5zeW5jLXV1aWQiLCAkdXVpZCk7CisJdG1wX2NvbmZpZygnLS1hZGQnLCAiJHNlY3Rpb24uc3Zuc3luYy11cmwiLCAkdXJsKTsKKwlyZXR1cm4gJHNlbGYtPntzdm5zeW5jfSA9IHsgdXJsID0+ICR1cmwsIHV1aWQgPT4gJHV1aWQgfTsKK30KKworIyB0aGlzIGFsbG93cyB1cyB0byBtZW1vaXplIG91ciBTVk46OlJhIFVVSUQgbG9jYWxseSBhbmQgYXZvaWQgYQorIyByZW1vdGUgbG9va3VwICh1c2VmdWwgZm9yICdnaXQgc3ZuIGxvZycpLgorc3ViIHJhX3V1aWQgeworCW15ICgkc2VsZikgPSBAXzsKKwl1bmxlc3MgKCRzZWxmLT57cmFfdXVpZH0pIHsKKwkJbXkgJGtleSA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0udXVpZCI7CisJCW15ICR1dWlkID0gZXZhbCB7IHRtcF9jb25maWcoJy0tZ2V0JywgJGtleSkgfTsKKwkJaWYgKCEkQCAmJiAkdXVpZCAmJiAkdXVpZCA9fiAvXihbYS1mXGRcLV17MzAsfSkkL2kpIHsKKwkJCSRzZWxmLT57cmFfdXVpZH0gPSAkdXVpZDsKKwkJfSBlbHNlIHsKKwkJCWRpZSAicmFfdXVpZCBjYWxsZWQgd2l0aG91dCBVUkxcbiIgdW5sZXNzICRzZWxmLT51cmw7CisJCQkkc2VsZi0+e3JhX3V1aWR9ID0gJHNlbGYtPnJhLT5nZXRfdXVpZDsKKwkJCXRtcF9jb25maWcoJy0tYWRkJywgJGtleSwgJHNlbGYtPntyYV91dWlkfSk7CisJCX0KKwl9CisJJHNlbGYtPntyYV91dWlkfTsKK30KKworc3ViIF9zZXRfcmVwb3Nfcm9vdCB7CisJbXkgKCRzZWxmLCAkcmVwb3Nfcm9vdCkgPSBAXzsKKwlteSAkayA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0ucmVwb3NSb290IjsKKwkkcmVwb3Nfcm9vdCB8fD0gJHNlbGYtPnJhLT57cmVwb3Nfcm9vdH07CisJdG1wX2NvbmZpZygkaywgJHJlcG9zX3Jvb3QpOworCSRyZXBvc19yb290OworfQorCitzdWIgcmVwb3Nfcm9vdCB7CisJbXkgKCRzZWxmKSA9IEBfOworCW15ICRrID0gInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS5yZXBvc1Jvb3QiOworCWV2YWwgeyB0bXBfY29uZmlnKCctLWdldCcsICRrKSB9IHx8ICRzZWxmLT5fc2V0X3JlcG9zX3Jvb3Q7Cit9CisKK3N1YiByYSB7CisJbXkgKCRzZWxmKSA9IHNoaWZ0OworCW15ICRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCRzZWxmLT51cmwpOworCSRzZWxmLT5fc2V0X3JlcG9zX3Jvb3QoJHJhLT57cmVwb3Nfcm9vdH0pOworCWlmICgkc2VsZi0+dXNlX3N2bV9wcm9wcyAmJiAhJHNlbGYtPntzdm19KSB7CisJCWlmICgkc2VsZi0+bm9fbWV0YWRhdGEpIHsKKwkJCWRpZSAiQ2FuJ3QgaGF2ZSBib3RoICdub01ldGFkYXRhJyBhbmQgIiwKKwkJCSAgICAiJ3VzZVN2bVByb3BzJyBvcHRpb25zIHNldCFcbiI7CisJCX0gZWxzaWYgKCRzZWxmLT51c2Vfc3Zuc3luY19wcm9wcykgeworCQkJZGllICJDYW4ndCBoYXZlIGJvdGggJ3VzZVN2bnN5bmNQcm9wcycgYW5kICIsCisJCQkgICAgIid1c2VTdm1Qcm9wcycgb3B0aW9ucyBzZXQhXG4iOworCQl9CisJCSRyYSA9ICRzZWxmLT5fc2V0X3N2bV92YXJzKCRyYSk7CisJCSRzZWxmLT57LXdhbnRfcmV2cHJvcHN9ID0gMTsKKwl9CisJJHJhOworfQorCisjIHByb3Bfd2FsayhQQVRILCBSRVYsIFNVQikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWN1cnNpdmVseSB0cmF2ZXJzZSBQQVRIIGF0IHJldmlzaW9uIFJFViBhbmQgaW52b2tlIFNVQiBmb3IgZWFjaAorIyBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhIFNWTiBwcm9wZXJ0eS4gIFNVQiB3aWxsIGJlIGludm9rZWQgYXMKKyMgZm9sbG93czogICZTVUIoZ3MsIHBhdGgsIHByb3BzKTsgIHdoZXJlIGBncycgaXMgdGhpcyBpbnN0YW5jZSBvZgorIyBHaXQ6OlNWTiwgYHBhdGgnIHRoZSBwYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHByb3BlcnRpZXMKKyMgYHByb3BzJyB3ZXJlIGZvdW5kLiAgVGhlIGBwYXRoJyB3aWxsIGJlIHJlbGF0aXZlIHRvIHBvaW50IG9mIGNoZWNrb3V0LAorIyB0aGF0IGlzLCBpZiB1cmw6Ly9yZXBvL3RydW5rIGlzIHRoZSBjdXJyZW50IEdpdCBicmFuY2gsIGFuZCB0aGF0CisjIGRpcmVjdG9yeSBjb250YWlucyBhIHN1Yi1kaXJlY3RvcnkgYGQnLCBTVUIgd2lsbCBiZSBpbnZva2VkIHdpdGggYC9kLycKKyMgYXMgYHBhdGgnIChub3RlIHRoZSB0cmFpbGluZyBgLycpLgorc3ViIHByb3Bfd2FsayB7CisJbXkgKCRzZWxmLCAkcGF0aCwgJHJldiwgJHN1YikgPSBAXzsKKworCSRwYXRoID1+IHMjXi8jIzsKKwlteSAoJGRpcmVudCwgdW5kZWYsICRwcm9wcykgPSAkc2VsZi0+cmEtPmdldF9kaXIoJHBhdGgsICRyZXYpOworCSRwYXRoID1+IHMjXi8qIy8jZzsKKwlteSAkcCA9ICRwYXRoOworCSMgU3RyaXAgdGhlIGlycmVsZXZhbnQgcGFydCBvZiB0aGUgcGF0aC4KKwkkcCA9fiBzI14vK1xRQHtbJHNlbGYtPnBhdGhdfVxFKC98JCkjLyM7CisJIyBFbnN1cmUgdGhlIHBhdGggaXMgdGVybWluYXRlZCBieSBhIGAvJy4KKwkkcCA9fiBzIy8qJCMvIzsKKworCSMgVGhlIHByb3BlcnRpZXMgY29udGFpbiBhbGwgdGhlIGludGVybmFsIFNWTiBzdHVmZiBub2JvZHkKKwkjICh1c3VhbGx5KSBjYXJlcyBhYm91dC4KKwlteSAkaW50ZXJlc3RpbmdfcHJvcHMgPSAwOworCWZvcmVhY2ggKGtleXMgJXskcHJvcHN9KSB7CisJCSMgSWYgaXQgZG9lc24ndCBzdGFydCB3aXRoIGBzdm46JywgaXQgbXVzdCBiZSBhCisJCSMgdXNlci1kZWZpbmVkIHByb3BlcnR5LgorCQkrKyRpbnRlcmVzdGluZ19wcm9wcyBhbmQgbmV4dCBpZiAkXyAhfiAvXnN2bjovOworCQkjIEZJWE1FOiBGcmFnaWxlLCBpZiBTVk4gYWRkcyBuZXcgcHVibGljIHByb3BlcnRpZXMsCisJCSMgdGhpcyBuZWVkcyB0byBiZSB1cGRhdGVkLgorCQkrKyRpbnRlcmVzdGluZ19wcm9wcyBpZiAvXnN2bjooPzppZ25vcmV8a2V5d29yZHN8ZXhlY3V0YWJsZQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ZW9sLXN0eWxlfG1pbWUtdHlwZQorCQkJCQkJIHxleHRlcm5hbHN8bmVlZHMtbG9jaykkL3g7CisJfQorCSYkc3ViKCRzZWxmLCAkcCwgJHByb3BzKSBpZiAkaW50ZXJlc3RpbmdfcHJvcHM7CisKKwlmb3JlYWNoIChzb3J0IGtleXMgJSRkaXJlbnQpIHsKKwkJbmV4dCBpZiAkZGlyZW50LT57JF99LT57a2luZH0gIT0gJFNWTjo6Tm9kZTo6ZGlyOworCQkkc2VsZi0+cHJvcF93YWxrKCRzZWxmLT5wYXRoIC4gJHAgLiAkXywgJHJldiwgJHN1Yik7CisJfQorfQorCitzdWIgbGFzdF9yZXYgeyAoJF9bMF0tPmxhc3RfcmV2X2NvbW1pdClbMF0gfQorc3ViIGxhc3RfY29tbWl0IHsgKCRfWzBdLT5sYXN0X3Jldl9jb21taXQpWzFdIH0KKworIyByZXR1cm5zIHRoZSBuZXdlc3QgU1ZOIHJldmlzaW9uIG51bWJlciBhbmQgbmV3ZXN0IGNvbW1pdCBTSEExCitzdWIgbGFzdF9yZXZfY29tbWl0IHsKKwlteSAoJHNlbGYpID0gQF87CisJaWYgKGRlZmluZWQgJHNlbGYtPntsYXN0X3Jldn0gJiYgZGVmaW5lZCAkc2VsZi0+e2xhc3RfY29tbWl0fSkgeworCQlyZXR1cm4gKCRzZWxmLT57bGFzdF9yZXZ9LCAkc2VsZi0+e2xhc3RfY29tbWl0fSk7CisJfQorCW15ICRjID0gOjp2ZXJpZnlfcmVmKCRzZWxmLT5yZWZuYW1lLideMCcpOworCWlmICgkYyAmJiAhJHNlbGYtPnVzZV9zdm1fcHJvcHMgJiYgISRzZWxmLT5ub19tZXRhZGF0YSkgeworCQlteSAkcmV2ID0gKDo6Y210X21ldGFkYXRhKCRjKSlbMV07CisJCWlmIChkZWZpbmVkICRyZXYpIHsKKwkJCSgkc2VsZi0+e2xhc3RfcmV2fSwgJHNlbGYtPntsYXN0X2NvbW1pdH0pID0gKCRyZXYsICRjKTsKKwkJCXJldHVybiAoJHJldiwgJGMpOworCQl9CisJfQorCW15ICRtYXBfcGF0aCA9ICRzZWxmLT5tYXBfcGF0aDsKKwl1bmxlc3MgKC1lICRtYXBfcGF0aCkgeworCQkoJHNlbGYtPntsYXN0X3Jldn0sICRzZWxmLT57bGFzdF9jb21taXR9KSA9ICh1bmRlZiwgdW5kZWYpOworCQlyZXR1cm4gKHVuZGVmLCB1bmRlZik7CisJfQorCW15ICgkcmV2LCAkY29tbWl0KSA9ICRzZWxmLT5yZXZfbWFwX21heCgxKTsKKwkoJHNlbGYtPntsYXN0X3Jldn0sICRzZWxmLT57bGFzdF9jb21taXR9KSA9ICgkcmV2LCAkY29tbWl0KTsKKwlyZXR1cm4gKCRyZXYsICRjb21taXQpOworfQorCitzdWIgZ2V0X2ZldGNoX3JhbmdlIHsKKwlteSAoJHNlbGYsICRtaW4sICRtYXgpID0gQF87CisJJG1heCB8fD0gJHNlbGYtPnJhLT5nZXRfbGF0ZXN0X3Jldm51bTsKKwkkbWluIHx8PSAkc2VsZi0+cmV2X21hcF9tYXg7CisJKCsrJG1pbiwgJG1heCk7Cit9CisKK3N1YiB0bXBfY29uZmlnIHsKKwlteSAoQGFyZ3MpID0gQF87CisJbXkgJG9sZF9kZWZfY29uZmlnID0gIiRFTlZ7R0lUX0RJUn0vc3ZuL2NvbmZpZyI7CisJbXkgJGNvbmZpZyA9ICIkRU5We0dJVF9ESVJ9L3N2bi8ubWV0YWRhdGEiOworCWlmICghIC1mICRjb25maWcgJiYgLWYgJG9sZF9kZWZfY29uZmlnKSB7CisJCXJlbmFtZSAkb2xkX2RlZl9jb25maWcsICRjb25maWcgb3IKKwkJICAgICAgIGRpZSAiRmFpbGVkIHJlbmFtZSAkb2xkX2RlZl9jb25maWcgPT4gJGNvbmZpZzogJCFcbiI7CisJfQorCW15ICRvbGRfY29uZmlnID0gJEVOVntHSVRfQ09ORklHfTsKKwkkRU5We0dJVF9DT05GSUd9ID0gJGNvbmZpZzsKKwkkQCA9IHVuZGVmOworCW15IEByZXQgPSBldmFsIHsKKwkJdW5sZXNzICgtZiAkY29uZmlnKSB7CisJCQlta2ZpbGUoJGNvbmZpZyk7CisJCQlvcGVuIG15ICRmaCwgJz4nLCAkY29uZmlnIG9yCisJCQkgICAgZGllICJDYW4ndCBvcGVuICRjb25maWc6ICQhXG4iOworCQkJcHJpbnQgJGZoICI7IFRoaXMgZmlsZSBpcyB1c2VkIGludGVybmFsbHkgYnkgIiwKKwkJCSAgICAgICAgICAiZ2l0LXN2blxuIiBvciBkaWUKKwkJCQkgICJDb3VsZG4ndCB3cml0ZSB0byAkY29uZmlnOiAkIVxuIjsKKwkJCXByaW50ICRmaCAiOyBZb3Ugc2hvdWxkIG5vdCBoYXZlIHRvIGVkaXQgaXRcbiIgb3IKKwkJCSAgICAgIGRpZSAiQ291bGRuJ3Qgd3JpdGUgdG8gJGNvbmZpZzogJCFcbiI7CisJCQljbG9zZSAkZmggb3IgZGllICJDb3VsZG4ndCBjbG9zZSAkY29uZmlnOiAkIVxuIjsKKwkJfQorCQljb21tYW5kKCdjb25maWcnLCBAYXJncyk7CisJfTsKKwlteSAkZXJyID0gJEA7CisJaWYgKGRlZmluZWQgJG9sZF9jb25maWcpIHsKKwkJJEVOVntHSVRfQ09ORklHfSA9ICRvbGRfY29uZmlnOworCX0gZWxzZSB7CisJCWRlbGV0ZSAkRU5We0dJVF9DT05GSUd9OworCX0KKwlkaWUgJGVyciBpZiAkZXJyOworCXdhbnRhcnJheSA/IEByZXQgOiAkcmV0WzBdOworfQorCitzdWIgdG1wX2luZGV4X2RvIHsKKwlteSAoJHNlbGYsICRzdWIpID0gQF87CisJbXkgJG9sZF9pbmRleCA9ICRFTlZ7R0lUX0lOREVYX0ZJTEV9OworCSRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJHNlbGYtPntpbmRleH07CisJJEAgPSB1bmRlZjsKKwlteSBAcmV0ID0gZXZhbCB7CisJCW15ICgkZGlyLCAkYmFzZSkgPSAoJHNlbGYtPntpbmRleH0gPX4gbSNeKC4qPykvPyhbXi9dKykkIyk7CisJCW1rcGF0aChbJGRpcl0pIHVubGVzcyAtZCAkZGlyOworCQkmJHN1YjsKKwl9OworCW15ICRlcnIgPSAkQDsKKwlpZiAoZGVmaW5lZCAkb2xkX2luZGV4KSB7CisJCSRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJG9sZF9pbmRleDsKKwl9IGVsc2UgeworCQlkZWxldGUgJEVOVntHSVRfSU5ERVhfRklMRX07CisJfQorCWRpZSAkZXJyIGlmICRlcnI7CisJd2FudGFycmF5ID8gQHJldCA6ICRyZXRbMF07Cit9CisKK3N1YiBhc3NlcnRfaW5kZXhfY2xlYW4geworCW15ICgkc2VsZiwgJHRyZWVpc2gpID0gQF87CisKKwkkc2VsZi0+dG1wX2luZGV4X2RvKHN1YiB7CisJCWNvbW1hbmRfbm9pc3koJ3JlYWQtdHJlZScsICR0cmVlaXNoKSB1bmxlc3MgLWUgJHNlbGYtPntpbmRleH07CisJCW15ICR4ID0gY29tbWFuZF9vbmVsaW5lKCd3cml0ZS10cmVlJyk7CisJCW15ICgkeSkgPSAoY29tbWFuZChxdy9jYXQtZmlsZSBjb21taXQvLCAkdHJlZWlzaCkgPX4KKwkJICAgICAgICAgICAvXnRyZWUgKCQ6OnNoYTEpL21vKTsKKwkJcmV0dXJuIGlmICR5IGVxICR4OworCisJCXdhcm4gIkluZGV4IG1pc21hdGNoOiAkeSAhPSAkeFxucmVyZWFkaW5nICR0cmVlaXNoXG4iOworCQl1bmxpbmsgJHNlbGYtPntpbmRleH0gb3IgZGllICJ1bmxpbmsgJHNlbGYtPntpbmRleH06ICQhXG4iOworCQljb21tYW5kX25vaXN5KCdyZWFkLXRyZWUnLCAkdHJlZWlzaCk7CisJCSR4ID0gY29tbWFuZF9vbmVsaW5lKCd3cml0ZS10cmVlJyk7CisJCWlmICgkeSBuZSAkeCkgeworCQkJZmF0YWwgInRyZWVzICgkdHJlZWlzaCkgJHkgIT0gJHhcbiIsCisJCQkgICAgICAiU29tZXRoaW5nIGlzIHNlcmlvdXNseSB3cm9uZy4uLiI7CisJCX0KKwl9KTsKK30KKworc3ViIGdldF9jb21taXRfcGFyZW50cyB7CisJbXkgKCRzZWxmLCAkbG9nX2VudHJ5KSA9IEBfOworCW15ICglc2VlbiwgQHJldCwgQHRtcCk7CisJIyBsZWdhY3kgc3VwcG9ydCBmb3IgJ3NldC10cmVlJzsgdGhpcyBpcyBvbmx5IHVzZWQgYnkgc2V0X3RyZWVfY2I6CisJaWYgKG15ICRpcCA9ICRzZWxmLT57aW5qZWN0X3BhcmVudHN9KSB7CisJCWlmIChteSAkY29tbWl0ID0gZGVsZXRlICRpcC0+eyRsb2dfZW50cnktPntyZXZpc2lvbn19KSB7CisJCQlwdXNoIEB0bXAsICRjb21taXQ7CisJCX0KKwl9CisJaWYgKG15ICRjdXIgPSA6OnZlcmlmeV9yZWYoJHNlbGYtPnJlZm5hbWUuJ14wJykpIHsKKwkJcHVzaCBAdG1wLCAkY3VyOworCX0KKwlpZiAobXkgJGlwZCA9ICRzZWxmLT57aW5qZWN0X3BhcmVudHNfZGNvbW1pdH0pIHsKKwkJaWYgKG15ICRjb21taXQgPSBkZWxldGUgJGlwZC0+eyRsb2dfZW50cnktPntyZXZpc2lvbn19KSB7CisJCQlwdXNoIEB0bXAsIEAkY29tbWl0OworCQl9CisJfQorCXB1c2ggQHRtcCwgJF8gZm9yZWFjaCAoQHskbG9nX2VudHJ5LT57cGFyZW50c319LCBAdG1wKTsKKwl3aGlsZSAobXkgJHAgPSBzaGlmdCBAdG1wKSB7CisJCW5leHQgaWYgJHNlZW57JHB9OworCQkkc2VlbnskcH0gPSAxOworCQlwdXNoIEByZXQsICRwOworCX0KKwlAcmV0OworfQorCitzdWIgcmV3cml0ZV9yb290IHsKKwlteSAoJHNlbGYpID0gQF87CisJcmV0dXJuICRzZWxmLT57LXJld3JpdGVfcm9vdH0gaWYgZXhpc3RzICRzZWxmLT57LXJld3JpdGVfcm9vdH07CisJbXkgJGsgPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9LnJld3JpdGVSb290IjsKKwlteSAkcndyID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZShxdy9jb25maWcgLS1nZXQvLCAkaykgfTsKKwlpZiAoJHJ3cikgeworCQkkcndyID1+IHMjLyskIyM7CisJCWlmICgkcndyICF+IG0jXlthLXpcK10rOi8vIykgeworCQkJZGllICIkcndyIGlzIG5vdCBhIHZhbGlkIFVSTCAoa2V5OiAkaylcbiI7CisJCX0KKwl9CisJJHNlbGYtPnstcmV3cml0ZV9yb290fSA9ICRyd3I7Cit9CisKK3N1YiByZXdyaXRlX3V1aWQgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPnstcmV3cml0ZV91dWlkfSBpZiBleGlzdHMgJHNlbGYtPnstcmV3cml0ZV91dWlkfTsKKwlteSAkayA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0ucmV3cml0ZVVVSUQiOworCW15ICRyd2lkID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZShxdy9jb25maWcgLS1nZXQvLCAkaykgfTsKKwlpZiAoJHJ3aWQpIHsKKwkJJHJ3aWQgPX4gcyMvKyQjIzsKKwkJaWYgKCRyd2lkICF+IG0jXlthLWYwLTldezh9LSg/OlthLWYwLTldezR9LSl7M31bYS1mMC05XXsxMn0kIykgeworCQkJZGllICIkcndpZCBpcyBub3QgYSB2YWxpZCBVVUlEIChrZXk6ICRrKVxuIjsKKwkJfQorCX0KKwkkc2VsZi0+ey1yZXdyaXRlX3V1aWR9ID0gJHJ3aWQ7Cit9CisKK3N1YiBtZXRhZGF0YV91cmwgeworCW15ICgkc2VsZikgPSBAXzsKKwlteSAkdXJsID0gJHNlbGYtPnJld3JpdGVfcm9vdCB8fCAkc2VsZi0+dXJsOworCXJldHVybiBjYW5vbmljYWxpemVfdXJsKCBhZGRfcGF0aF90b191cmwoICR1cmwsICRzZWxmLT5wYXRoICkgKTsKK30KKworc3ViIGZ1bGxfdXJsIHsKKwlteSAoJHNlbGYpID0gQF87CisJcmV0dXJuIGNhbm9uaWNhbGl6ZV91cmwoIGFkZF9wYXRoX3RvX3VybCggJHNlbGYtPnVybCwgJHNlbGYtPnBhdGggKSApOworfQorCitzdWIgZnVsbF9wdXNodXJsIHsKKwlteSAoJHNlbGYpID0gQF87CisJaWYgKCRzZWxmLT57cHVzaHVybH0pIHsKKwkJcmV0dXJuIGNhbm9uaWNhbGl6ZV91cmwoIGFkZF9wYXRoX3RvX3VybCggJHNlbGYtPntwdXNodXJsfSwgJHNlbGYtPnBhdGggKSApOworCX0gZWxzZSB7CisJCXJldHVybiAkc2VsZi0+ZnVsbF91cmw7CisJfQorfQorCitzdWIgc2V0X2NvbW1pdF9oZWFkZXJfZW52IHsKKwlteSAoJGxvZ19lbnRyeSkgPSBAXzsKKwlteSAlZW52OworCWZvcmVhY2ggbXkgJG5lZCAocXcvTkFNRSBFTUFJTCBEQVRFLykgeworCQlmb3JlYWNoIG15ICRhYyAocXcvQVVUSE9SIENPTU1JVFRFUi8pIHsKKwkJCSRlbnZ7IkdJVF8ke2FjfV8ke25lZH0ifSA9ICRFTlZ7IkdJVF8ke2FjfV8ke25lZH0ifTsKKwkJfQorCX0KKworCSRFTlZ7R0lUX0FVVEhPUl9OQU1FfSA9ICRsb2dfZW50cnktPntuYW1lfTsKKwkkRU5We0dJVF9BVVRIT1JfRU1BSUx9ID0gJGxvZ19lbnRyeS0+e2VtYWlsfTsKKwkkRU5We0dJVF9BVVRIT1JfREFURX0gPSAkRU5We0dJVF9DT01NSVRURVJfREFURX0gPSAkbG9nX2VudHJ5LT57ZGF0ZX07CisKKwkkRU5We0dJVF9DT01NSVRURVJfTkFNRX0gPSAoZGVmaW5lZCAkbG9nX2VudHJ5LT57Y29tbWl0X25hbWV9KQorCQkJCQkJPyAkbG9nX2VudHJ5LT57Y29tbWl0X25hbWV9CisJCQkJCQk6ICRsb2dfZW50cnktPntuYW1lfTsKKwkkRU5We0dJVF9DT01NSVRURVJfRU1BSUx9ID0gKGRlZmluZWQgJGxvZ19lbnRyeS0+e2NvbW1pdF9lbWFpbH0pCisJCQkJCQk/ICRsb2dfZW50cnktPntjb21taXRfZW1haWx9CisJCQkJCQk6ICRsb2dfZW50cnktPntlbWFpbH07CisJXCVlbnY7Cit9CisKK3N1YiByZXN0b3JlX2NvbW1pdF9oZWFkZXJfZW52IHsKKwlteSAoJGVudikgPSBAXzsKKwlmb3JlYWNoIG15ICRuZWQgKHF3L05BTUUgRU1BSUwgREFURS8pIHsKKwkJZm9yZWFjaCBteSAkYWMgKHF3L0FVVEhPUiBDT01NSVRURVIvKSB7CisJCQlteSAkayA9ICJHSVRfJHthY31fJHtuZWR9IjsKKwkJCWlmIChkZWZpbmVkICRlbnYtPnska30pIHsKKwkJCQkkRU5WeyRrfSA9ICRlbnYtPnska307CisJCQl9IGVsc2UgeworCQkJCWRlbGV0ZSAkRU5WeyRrfTsKKwkJCX0KKwkJfQorCX0KK30KKworc3ViIGdjIHsKKwljb21tYW5kX25vaXN5KCdnYycsICctLWF1dG8nKTsKK307CisKK3N1YiBkb19naXRfY29tbWl0IHsKKwlteSAoJHNlbGYsICRsb2dfZW50cnkpID0gQF87CisJbXkgJGxyID0gJHNlbGYtPmxhc3RfcmV2OworCWlmIChkZWZpbmVkICRsciAmJiAkbHIgPj0gJGxvZ19lbnRyeS0+e3JldmlzaW9ufSkgeworCQlkaWUgIkxhc3QgZmV0Y2hlZCByZXZpc2lvbiBvZiAiLCAkc2VsZi0+cmVmbmFtZSwKKwkJICAgICIgd2FzIHIkbHIsIGJ1dCB3ZSBhcmUgYWJvdXQgdG8gZmV0Y2g6ICIsCisJCSAgICAiciRsb2dfZW50cnktPntyZXZpc2lvbn0hXG4iOworCX0KKwlpZiAobXkgJGMgPSAkc2VsZi0+cmV2X21hcF9nZXQoJGxvZ19lbnRyeS0+e3JldmlzaW9ufSkpIHsKKwkJY3JvYWsgIiRsb2dfZW50cnktPntyZXZpc2lvbn0gPSAkYyBhbHJlYWR5IGV4aXN0cyEgIiwKKwkJICAgICAgIldoeSBhcmUgd2UgcmVmZXRjaGluZyBpdD9cbiI7CisJfQorCW15ICRvbGRfZW52ID0gc2V0X2NvbW1pdF9oZWFkZXJfZW52KCRsb2dfZW50cnkpOworCW15ICR0cmVlID0gJGxvZ19lbnRyeS0+e3RyZWV9OworCWlmICghZGVmaW5lZCAkdHJlZSkgeworCQkkdHJlZSA9ICRzZWxmLT50bXBfaW5kZXhfZG8oc3ViIHsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfb25lbGluZSgnd3JpdGUtdHJlZScpIH0pOworCX0KKwlkaWUgIlRyZWUgaXMgbm90IGEgdmFsaWQgc2hhMTogJHRyZWVcbiIgaWYgJHRyZWUgIX4gL14kOjpzaGExJC9vOworCisJbXkgQGV4ZWMgPSAoJ2dpdCcsICdjb21taXQtdHJlZScsICR0cmVlKTsKKwlmb3JlYWNoICgkc2VsZi0+Z2V0X2NvbW1pdF9wYXJlbnRzKCRsb2dfZW50cnkpKSB7CisJCXB1c2ggQGV4ZWMsICctcCcsICRfOworCX0KKwlkZWZpbmVkKG15ICRwaWQgPSBvcGVuMyhteSAkbXNnX2ZoLCBteSAkb3V0X2ZoLCAnPiZTVERFUlInLCBAZXhlYykpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBjcm9hayAkITsKKwliaW5tb2RlICRtc2dfZmg7CisKKwkjIHdlIGFsd2F5cyBnZXQgVVRGLTggZnJvbSBTVk4sIGJ1dCB3ZSBtYXkgd2FudCBvdXIgY29tbWl0cyBpbgorCSMgYSBkaWZmZXJlbnQgZW5jb2RpbmcuCisJaWYgKG15ICRlbmMgPSBHaXQ6OmNvbmZpZygnaTE4bi5jb21taXRlbmNvZGluZycpKSB7CisJCXJlcXVpcmUgRW5jb2RlOworCQlFbmNvZGU6OmZyb21fdG8oJGxvZ19lbnRyeS0+e2xvZ30sICdVVEYtOCcsICRlbmMpOworCX0KKwlwcmludCAkbXNnX2ZoICRsb2dfZW50cnktPntsb2d9IG9yIGNyb2FrICQhOworCXJlc3RvcmVfY29tbWl0X2hlYWRlcl9lbnYoJG9sZF9lbnYpOworCXVubGVzcyAoJHNlbGYtPm5vX21ldGFkYXRhKSB7CisJCXByaW50ICRtc2dfZmggIlxuZ2l0LXN2bi1pZDogJGxvZ19lbnRyeS0+e21ldGFkYXRhfVxuIgorCQkgICAgICAgICAgICAgIG9yIGNyb2FrICQhOworCX0KKwkkbXNnX2ZoLT5mbHVzaCA9PSAwIG9yIGNyb2FrICQhOworCWNsb3NlICRtc2dfZmggb3IgY3JvYWsgJCE7CisJY2hvbXAobXkgJGNvbW1pdCA9IGRvIHsgbG9jYWwgJC87IDwkb3V0X2ZoPiB9KTsKKwljbG9zZSAkb3V0X2ZoIG9yIGNyb2FrICQhOworCXdhaXRwaWQgJHBpZCwgMDsKKwljcm9hayAkPyBpZiAkPzsKKwlpZiAoJGNvbW1pdCAhfiAvXiQ6OnNoYTEkL28pIHsKKwkJZGllICJGYWlsZWQgdG8gY29tbWl0LCBpbnZhbGlkIHNoYTE6ICRjb21taXRcbiI7CisJfQorCisJJHNlbGYtPnJldl9tYXBfc2V0KCRsb2dfZW50cnktPntyZXZpc2lvbn0sICRjb21taXQsIDEpOworCisJJHNlbGYtPntsYXN0X3Jldn0gPSAkbG9nX2VudHJ5LT57cmV2aXNpb259OworCSRzZWxmLT57bGFzdF9jb21taXR9ID0gJGNvbW1pdDsKKwlwcmludCAiciRsb2dfZW50cnktPntyZXZpc2lvbn0iIHVubGVzcyAkOjpfcSA+IDE7CisJaWYgKGRlZmluZWQgJGxvZ19lbnRyeS0+e3N2bV9yZXZpc2lvbn0pIHsKKwkJIHByaW50ICIgKFxAJGxvZ19lbnRyeS0+e3N2bV9yZXZpc2lvbn0pIiB1bmxlc3MgJDo6X3EgPiAxOworCQkgJHNlbGYtPnJldl9tYXBfc2V0KCRsb2dfZW50cnktPntzdm1fcmV2aXNpb259LCAkY29tbWl0LAorCQkgICAgICAgICAgICAgICAgICAgMCwgJHNlbGYtPnN2bV91dWlkKTsKKwl9CisJcHJpbnQgIiA9ICRjb21taXQgKCRzZWxmLT57cmVmX2lkfSlcbiIgdW5sZXNzICQ6Ol9xID4gMTsKKwlpZiAoLS0kX2djX25yID09IDApIHsKKwkJJF9nY19uciA9ICRfZ2NfcGVyaW9kOworCQlnYygpOworCX0KKwlyZXR1cm4gJGNvbW1pdDsKK30KKworc3ViIG1hdGNoX3BhdGhzIHsKKwlteSAoJHNlbGYsICRwYXRocywgJHIpID0gQF87CisJcmV0dXJuIDEgaWYgJHNlbGYtPnBhdGggZXEgJyc7CisJaWYgKG15ICRwYXRoID0gJHBhdGhzLT57Ii8iLiRzZWxmLT5wYXRofSkgeworCQlyZXR1cm4gKCRwYXRoLT57YWN0aW9ufSBlcSAnRCcpID8gMCA6IDE7CisJfQorCSRzZWxmLT57cGF0aF9yZWdleH0gfHw9IHFye14vXFFAe1skc2VsZi0+cGF0aF19XEUvfTsKKwlpZiAoZ3JlcCAvJHNlbGYtPntwYXRoX3JlZ2V4fS8sIGtleXMgJSRwYXRocykgeworCQlyZXR1cm4gMTsKKwl9CisJbXkgJGMgPSAnJzsKKwlmb3JlYWNoIChzcGxpdCBtIy8jLCAkc2VsZi0+cGF0aCkgeworCQkkYyAuPSAiLyRfIjsKKwkJbmV4dCB1bmxlc3MgKCRwYXRocy0+eyRjfSAmJgorCQkgICAgICAgICAgICAgKCRwYXRocy0+eyRjfS0+e2FjdGlvbn0gPX4gL15bQVJdJC8pKTsKKwkJaWYgKCRzZWxmLT5yYS0+Y2hlY2tfcGF0aCgkc2VsZi0+cGF0aCwgJHIpID09CisJCSAgICAkU1ZOOjpOb2RlOjpkaXIpIHsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdWIgZmluZF9wYXJlbnRfYnJhbmNoIHsKKwlteSAoJHNlbGYsICRwYXRocywgJHJldikgPSBAXzsKKwlyZXR1cm4gdW5kZWYgdW5sZXNzICRzZWxmLT5mb2xsb3dfcGFyZW50OworCXVubGVzcyAoZGVmaW5lZCAkcGF0aHMpIHsKKwkJbXkgJGVycl9oYW5kbGVyID0gJFNWTjo6RXJyb3I6OmhhbmRsZXI7CisJCSRTVk46OkVycm9yOjpoYW5kbGVyID0gXCZHaXQ6OlNWTjo6UmE6OnNraXBfdW5rbm93bl9yZXZzOworCQkkc2VsZi0+cmEtPmdldF9sb2coWyRzZWxmLT5wYXRoXSwgJHJldiwgJHJldiwgMCwgMSwgMSwKKwkJCQkgICBzdWIgeyAkcGF0aHMgPSAkX1swXSB9KTsKKwkJJFNWTjo6RXJyb3I6OmhhbmRsZXIgPSAkZXJyX2hhbmRsZXI7CisJfQorCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkcGF0aHM7CisKKwkjIGxvb2sgZm9yIGEgcGFyZW50IGZyb20gYW5vdGhlciBicmFuY2g6CisJbXkgQGJfcGF0aF9jb21wb25lbnRzID0gc3BsaXQgbSMvIywgJHNlbGYtPnBhdGg7CisJbXkgQGFfcGF0aF9jb21wb25lbnRzOworCW15ICRpOworCXdoaWxlIChAYl9wYXRoX2NvbXBvbmVudHMpIHsKKwkJJGkgPSAkcGF0aHMtPnsnLycuam9pbignLycsIEBiX3BhdGhfY29tcG9uZW50cyl9OworCQlsYXN0IGlmICRpICYmIGRlZmluZWQgJGktPntjb3B5ZnJvbV9wYXRofTsKKwkJdW5zaGlmdChAYV9wYXRoX2NvbXBvbmVudHMsIHBvcChAYl9wYXRoX2NvbXBvbmVudHMpKTsKKwl9CisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRpICYmIGRlZmluZWQgJGktPntjb3B5ZnJvbV9wYXRofTsKKwlteSAkYnJhbmNoX2Zyb20gPSAkaS0+e2NvcHlmcm9tX3BhdGh9OworCWlmIChAYV9wYXRoX2NvbXBvbmVudHMpIHsKKwkJcHJpbnQgU1RERVJSICJicmFuY2hfZnJvbTogJGJyYW5jaF9mcm9tID0+ICI7CisJCSRicmFuY2hfZnJvbSAuPSAnLycuam9pbignLycsIEBhX3BhdGhfY29tcG9uZW50cyk7CisJCXByaW50IFNUREVSUiAkYnJhbmNoX2Zyb20sICJcbiI7CisJfQorCW15ICRyID0gJGktPntjb3B5ZnJvbV9yZXZ9OworCW15ICRyZXBvc19yb290ID0gJHNlbGYtPnJhLT57cmVwb3Nfcm9vdH07CisJbXkgJHVybCA9ICRzZWxmLT5yYS0+dXJsOworCW15ICRuZXdfdXJsID0gY2Fub25pY2FsaXplX3VybCggYWRkX3BhdGhfdG9fdXJsKCAkdXJsLCAkYnJhbmNoX2Zyb20gKSApOworCXByaW50IFNUREVSUiAgIkZvdW5kIHBvc3NpYmxlIGJyYW5jaCBwb2ludDogIiwKKwkgICAgICAgICAgICAgICIkbmV3X3VybCA9PiAiLCAkc2VsZi0+ZnVsbF91cmwsICIsICRyXG4iCisJICAgICAgICAgICAgICB1bmxlc3MgJDo6X3EgPiAxOworCSRicmFuY2hfZnJvbSA9fiBzI14vIyM7CisJbXkgJGdzID0gJHNlbGYtPm90aGVyX2dzKCRuZXdfdXJsLCAkdXJsLAorCQkgICAgICAgICAgICAgICAgICRicmFuY2hfZnJvbSwgJHIsICRzZWxmLT57cmVmX2lkfSk7CisJbXkgKCRyMCwgJHBhcmVudCkgPSAkZ3MtPmZpbmRfcmV2X2JlZm9yZSgkciwgMSk7CisJeworCQlteSAoJGJhc2UsICRoZWFkKTsKKwkJaWYgKCFkZWZpbmVkICRyMCB8fCAhZGVmaW5lZCAkcGFyZW50KSB7CisJCQkoJGJhc2UsICRoZWFkKSA9IHBhcnNlX3JldmlzaW9uX2FyZ3VtZW50KDAsICRyKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgkcjAgPCAkcikgeworCQkJCSRncy0+cmEtPmdldF9sb2coWyRncy0+cGF0aF0sICRyMCArIDEsICRyLCAxLAorCQkJCQkwLCAxLCBzdWIgeyAkYmFzZSA9ICRfWzFdIC0gMSB9KTsKKwkJCX0KKwkJfQorCQlpZiAoZGVmaW5lZCAkYmFzZSAmJiAkYmFzZSA8PSAkcikgeworCQkJJGdzLT5mZXRjaCgkYmFzZSwgJHIpOworCQl9CisJCSgkcjAsICRwYXJlbnQpID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoJHIsIDEpOworCX0KKwlpZiAoZGVmaW5lZCAkcjAgJiYgZGVmaW5lZCAkcGFyZW50KSB7CisJCXByaW50IFNUREVSUiAiRm91bmQgYnJhbmNoIHBhcmVudDogKCRzZWxmLT57cmVmX2lkfSkgJHBhcmVudFxuIgorCQkgICAgICAgICAgICAgdW5sZXNzICQ6Ol9xID4gMTsKKwkJbXkgJGVkOworCQlpZiAoJHNlbGYtPnJhLT5jYW5fZG9fc3dpdGNoKSB7CisJCQkkc2VsZi0+YXNzZXJ0X2luZGV4X2NsZWFuKCRwYXJlbnQpOworCQkJcHJpbnQgU1RERVJSICJGb2xsb3dpbmcgcGFyZW50IHdpdGggZG9fc3dpdGNoXG4iCisJCQkgICAgICAgICAgICAgdW5sZXNzICQ6Ol9xID4gMTsKKwkJCSMgZG9fc3dpdGNoIHdvcmtzIHdpdGggc3ZuL3RydW5rID49IHIyMjMxMiwgYnV0IHRoYXQKKwkJCSMgaXMgbm90IGluY2x1ZGVkIHdpdGggU1ZOIDEuNC4zICh0aGUgbGF0ZXN0IHZlcnNpb24KKwkJCSMgYXQgdGhlIG1vbWVudCksIHNvIHdlIGNhbid0IHJlbHkgb24gaXQKKwkJCSRzZWxmLT57bGFzdF9yZXZ9ID0gJHIwOworCQkJJHNlbGYtPntsYXN0X2NvbW1pdH0gPSAkcGFyZW50OworCQkJJGVkID0gR2l0OjpTVk46OkZldGNoZXItPm5ldygkc2VsZiwgJGdzLT5wYXRoKTsKKwkJCSRncy0+cmEtPmdzX2RvX3N3aXRjaCgkcjAsICRyZXYsICRncywKKwkJCQkJICAgICAgJHNlbGYtPmZ1bGxfdXJsLCAkZWQpCisJCQkgIG9yIGRpZSAiU1ZOIGNvbm5lY3Rpb24gZmFpbGVkIHNvbWV3aGVyZS4uLlxuIjsKKwkJfSBlbHNpZiAoJHNlbGYtPnJhLT50cmVlc19tYXRjaCgkbmV3X3VybCwgJHIwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmZ1bGxfdXJsLCAkcmV2KSkgeworCQkJcHJpbnQgU1RERVJSICJUcmVlcyBtYXRjaDpcbiIsCisJCQkgICAgICAgICAgICAgIiAgJG5ld191cmxcQCRyMFxuIiwKKwkJCSAgICAgICAgICAgICAiICAke1wkc2VsZi0+ZnVsbF91cmx9XEAkcmV2XG4iLAorCQkJICAgICAgICAgICAgICJGb2xsb3dpbmcgcGFyZW50IHdpdGggbm8gY2hhbmdlc1xuIgorCQkJICAgICAgICAgICAgIHVubGVzcyAkOjpfcSA+IDE7CisJCQkkc2VsZi0+dG1wX2luZGV4X2RvKHN1YiB7CisJCQkgICAgY29tbWFuZF9ub2lzeSgncmVhZC10cmVlJywgJHBhcmVudCk7CisJCQl9KTsKKwkJCSRzZWxmLT57bGFzdF9jb21taXR9ID0gJHBhcmVudDsKKwkJfSBlbHNlIHsKKwkJCXByaW50IFNUREVSUiAiRm9sbG93aW5nIHBhcmVudCB3aXRoIGRvX3VwZGF0ZVxuIgorCQkJICAgICAgICAgICAgIHVubGVzcyAkOjpfcSA+IDE7CisJCQkkZWQgPSBHaXQ6OlNWTjo6RmV0Y2hlci0+bmV3KCRzZWxmKTsKKwkJCSRzZWxmLT5yYS0+Z3NfZG9fdXBkYXRlKCRyZXYsICRyZXYsICRzZWxmLCAkZWQpCisJCQkgIG9yIGRpZSAiU1ZOIGNvbm5lY3Rpb24gZmFpbGVkIHNvbWV3aGVyZS4uLlxuIjsKKwkJfQorCQlwcmludCBTVERFUlIgIlN1Y2Nlc3NmdWxseSBmb2xsb3dlZCBwYXJlbnRcbiIgdW5sZXNzICQ6Ol9xID4gMTsKKwkJcmV0dXJuICRzZWxmLT5tYWtlX2xvZ19lbnRyeSgkcmV2LCBbJHBhcmVudF0sICRlZCk7CisJfQorCXJldHVybiB1bmRlZjsKK30KKworc3ViIGRvX2ZldGNoIHsKKwlteSAoJHNlbGYsICRwYXRocywgJHJldikgPSBAXzsKKwlteSAkZWQ7CisJbXkgKCRsYXN0X3JldiwgQHBhcmVudHMpOworCWlmIChteSAkbGMgPSAkc2VsZi0+bGFzdF9jb21taXQpIHsKKwkJIyB3ZSBjYW4gaGF2ZSBhIGJyYW5jaCB0aGF0IHdhcyBkZWxldGVkLCB0aGVuIHJlLWFkZGVkCisJCSMgdW5kZXIgdGhlIHNhbWUgbmFtZSBidXQgY29waWVkIGZyb20gYW5vdGhlciBwYXRoLCBpbgorCQkjIHdoaWNoIGNhc2Ugd2UnbGwgaGF2ZSBtdWx0aXBsZSBwYXJlbnRzICh3ZSBkb24ndAorCQkjIHdhbnQgdG8gYnJlYWsgdGhlIG9yaWdpbmFsIHJlZiwgbm9yIGxvc2UgY29weXBhdGggaW5mbyk6CisJCWlmIChteSAkbG9nX2VudHJ5ID0gJHNlbGYtPmZpbmRfcGFyZW50X2JyYW5jaCgkcGF0aHMsICRyZXYpKSB7CisJCQlwdXNoIEB7JGxvZ19lbnRyeS0+e3BhcmVudHN9fSwgJGxjOworCQkJcmV0dXJuICRsb2dfZW50cnk7CisJCX0KKwkJJGVkID0gR2l0OjpTVk46OkZldGNoZXItPm5ldygkc2VsZik7CisJCSRsYXN0X3JldiA9ICRzZWxmLT57bGFzdF9yZXZ9OworCQkkZWQtPntjfSA9ICRsYzsKKwkJQHBhcmVudHMgPSAoJGxjKTsKKwl9IGVsc2UgeworCQkkbGFzdF9yZXYgPSAkcmV2OworCQlpZiAobXkgJGxvZ19lbnRyeSA9ICRzZWxmLT5maW5kX3BhcmVudF9icmFuY2goJHBhdGhzLCAkcmV2KSkgeworCQkJcmV0dXJuICRsb2dfZW50cnk7CisJCX0KKwkJJGVkID0gR2l0OjpTVk46OkZldGNoZXItPm5ldygkc2VsZik7CisJfQorCXVubGVzcyAoJHNlbGYtPnJhLT5nc19kb191cGRhdGUoJGxhc3RfcmV2LCAkcmV2LCAkc2VsZiwgJGVkKSkgeworCQlkaWUgIlNWTiBjb25uZWN0aW9uIGZhaWxlZCBzb21ld2hlcmUuLi5cbiI7CisJfQorCSRzZWxmLT5tYWtlX2xvZ19lbnRyeSgkcmV2LCBcQHBhcmVudHMsICRlZCk7Cit9CisKK3N1YiBta2VtcHR5ZGlycyB7CisJbXkgKCRzZWxmLCAkcikgPSBAXzsKKworCXN1YiBzY2FuIHsKKwkJbXkgKCRyLCAkZW1wdHlfZGlycywgJGxpbmUpID0gQF87CisJCWlmIChkZWZpbmVkICRyICYmICRsaW5lID1+IC9ecihcZCspJC8pIHsKKwkJCXJldHVybiAwIGlmICQxID4gJHI7CisJCX0gZWxzaWYgKCRsaW5lID1+IC9eICBcK2VtcHR5X2RpcjogKC4rKSQvKSB7CisJCQkkZW1wdHlfZGlycy0+eyQxfSA9IDE7CisJCX0gZWxzaWYgKCRsaW5lID1+IC9eICBcLWVtcHR5X2RpcjogKC4rKSQvKSB7CisJCQlteSBAZCA9IGdyZXAge21bXlxRJDFcRSgvfCQpXX0gKGtleXMgJSRlbXB0eV9kaXJzKTsKKwkJCWRlbGV0ZSBAJGVtcHR5X2RpcnN7QGR9OworCQl9CisJCTE7ICMgY29udGludWUKKwl9OworCisJbXkgJWVtcHR5X2RpcnMgPSAoKTsKKwlteSAkZ3pfZmlsZSA9ICIkc2VsZi0+e2Rpcn0vdW5oYW5kbGVkLmxvZy5neiI7CisJaWYgKC1mICRnel9maWxlKSB7CisJCWlmICghY2FuX2NvbXByZXNzKCkpIHsKKwkJCXdhcm4gIkNvbXByZXNzOjpabGliIGNvdWxkIG5vdCBiZSBmb3VuZDsgIiwKKwkJCSAgICAgImVtcHR5IGRpcmVjdG9yaWVzIGluICRnel9maWxlIHdpbGwgbm90IGJlIHJlYWRcbiI7CisJCX0gZWxzZSB7CisJCQlteSAkZ3ogPSBDb21wcmVzczo6WmxpYjo6Z3pvcGVuKCRnel9maWxlLCAicmIiKSBvcgorCQkJCWRpZSAiVW5hYmxlIHRvIG9wZW4gJGd6X2ZpbGU6ICQhXG4iOworCQkJbXkgJGxpbmU7CisJCQl3aGlsZSAoJGd6LT5nenJlYWRsaW5lKCRsaW5lKSA+IDApIHsKKwkJCQlzY2FuKCRyLCBcJWVtcHR5X2RpcnMsICRsaW5lKSBvciBsYXN0OworCQkJfQorCQkJJGd6LT5nemNsb3NlOworCQl9CisJfQorCisJaWYgKG9wZW4gbXkgJGZoLCAnPCcsICIkc2VsZi0+e2Rpcn0vdW5oYW5kbGVkLmxvZyIpIHsKKwkJYmlubW9kZSAkZmggb3IgY3JvYWsgImJpbm1vZGU6ICQhIjsKKwkJd2hpbGUgKDwkZmg+KSB7CisJCQlzY2FuKCRyLCBcJWVtcHR5X2RpcnMsICRfKSBvciBsYXN0OworCQl9CisJCWNsb3NlICRmaDsKKwl9CisKKwlteSAkc3RyaXAgPSBxci9cQVxRQHtbJHNlbGYtPnBhdGhdfVxFKD86XC98JCkvOworCWZvcmVhY2ggbXkgJGQgKHNvcnQga2V5cyAlZW1wdHlfZGlycykgeworCQkkZCA9IHVyaV9kZWNvZGUoJGQpOworCQkkZCA9fiBzLyRzdHJpcC8vOworCQluZXh0IHVubGVzcyBsZW5ndGgoJGQpOworCQluZXh0IGlmIC1kICRkOworCQlpZiAoLWUgJGQpIHsKKwkJCXdhcm4gIiRkIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgImNyZWF0aW5nIGVtcHR5IGRpcmVjdG9yeTogJGRcbiI7CisJCQlta3BhdGgoWyRkXSk7CisJCX0KKwl9Cit9CisKK3N1YiBnZXRfdW50cmFja2VkIHsKKwlteSAoJHNlbGYsICRlZCkgPSBAXzsKKwlteSBAb3V0OworCW15ICRoID0gJGVkLT57ZW1wdHl9OworCWZvcmVhY2ggKHNvcnQga2V5cyAlJGgpIHsKKwkJbXkgJGFjdCA9ICRoLT57JF99ID8gJytlbXB0eV9kaXInIDogJy1lbXB0eV9kaXInOworCQlwdXNoIEBvdXQsICIgICRhY3Q6ICIgLiB1cmlfZW5jb2RlKCRfKTsKKwkJd2FybiAiVzogJGFjdDogJF9cbiI7CisJfQorCWZvcmVhY2ggbXkgJHQgKHF3L2Rpcl9wcm9wIGZpbGVfcHJvcC8pIHsKKwkJJGggPSAkZWQtPnskdH0gb3IgbmV4dDsKKwkJZm9yZWFjaCBteSAkcGF0aCAoc29ydCBrZXlzICUkaCkgeworCQkJbXkgJHBwYXRoID0gJHBhdGggZXEgJycgPyAnLicgOiAkcGF0aDsKKwkJCWZvcmVhY2ggbXkgJHByb3AgKHNvcnQga2V5cyAleyRoLT57JHBhdGh9fSkgeworCQkJCW5leHQgaWYgJFNLSVBfUFJPUHskcHJvcH07CisJCQkJbXkgJHYgPSAkaC0+eyRwYXRofS0+eyRwcm9wfTsKKwkJCQlteSAkdF9wcGF0aF9wcm9wID0gIiR0OiAiIC4KKwkJCQkgICAgICAgICAgICAgICAgICAgIHVyaV9lbmNvZGUoJHBwYXRoKSAuICcgJyAuCisJCQkJICAgICAgICAgICAgICAgICAgICB1cmlfZW5jb2RlKCRwcm9wKTsKKwkJCQlpZiAoZGVmaW5lZCAkdikgeworCQkJCQlwdXNoIEBvdXQsICIgICskdF9wcGF0aF9wcm9wICIgLgorCQkJCQkgICAgICAgICAgIHVyaV9lbmNvZGUoJHYpOworCQkJCX0gZWxzZSB7CisJCQkJCXB1c2ggQG91dCwgIiAgLSR0X3BwYXRoX3Byb3AiOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlmb3JlYWNoIG15ICR0IChxdy9hYnNlbnRfZmlsZSBhYnNlbnRfZGlyZWN0b3J5LykgeworCQkkaCA9ICRlZC0+eyR0fSBvciBuZXh0OworCQlmb3JlYWNoIG15ICRwYXJlbnQgKHNvcnQga2V5cyAlJGgpIHsKKwkJCWZvcmVhY2ggbXkgJHBhdGggKHNvcnQgQHskaC0+eyRwYXJlbnR9fSkgeworCQkJCXB1c2ggQG91dCwgIiAgJHQ6ICIgLgorCQkJCSAgICAgICAgICAgdXJpX2VuY29kZSgiJHBhcmVudC8kcGF0aCIpOworCQkJCXdhcm4gIlc6ICR0OiAkcGFyZW50LyRwYXRoICIsCisJCQkJICAgICAiSW5zdWZmaWNpZW50IHBlcm1pc3Npb25zP1xuIjsKKwkJCX0KKwkJfQorCX0KKwlcQG91dDsKK30KKworc3ViIGdldF90eiB7CisJIyBzb21lIHN5c3RtZXMgZG9uJ3QgaGFuZGxlIG9yIG1pc2hhbmRsZSAleiwgc28gYmUgY3JlYXRpdmUuCisJbXkgJHQgPSBzaGlmdCB8fCB0aW1lOworCW15ICRnbSA9IHRpbWVsb2NhbChnbXRpbWUoJHQpKTsKKwlteSAkc2lnbiA9IHF3KCArICsgLSApWyAkdCA8PT4gJGdtIF07CisJcmV0dXJuIHNwcmludGYoIiVzJTAyZCUwMmQiLCAkc2lnbiwgKGdtdGltZShhYnMoJHQgLSAkZ20pKSlbMiwxXSk7Cit9CisKKyMgcGFyc2Vfc3ZuX2RhdGUoREFURSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR2l2ZW4gYSBkYXRlIChpbiBVVEMpIGZyb20gU3VidmVyc2lvbiwgcmV0dXJuIGEgc3RyaW5nIGluIHRoZSBmb3JtYXQKKyMgIjxUWiBPZmZzZXQ+IDxsb2NhbCBkYXRlL3RpbWU+IiB0aGF0IEdpdCB3aWxsIHVzZS4KKyMKKyMgQnkgZGVmYXVsdCB0aGUgcGFyc2VkIGRhdGUgd2lsbCBiZSBpbiBVVEM7IGlmICRHaXQ6OlNWTjo6X2xvY2FsdGltZQorIyBpcyB0cnVlIHdlJ2xsIGNvbnZlcnQgaXQgdG8gdGhlIGxvY2FsIHRpbWV6b25lIGluc3RlYWQuCitzdWIgcGFyc2Vfc3ZuX2RhdGUgeworCW15ICRkYXRlID0gc2hpZnQgfHwgcmV0dXJuICcrMDAwMCAxOTcwLTAxLTAxIDAwOjAwOjAwJzsKKwlteSAoJFksJG0sJGQsJEgsJE0sJFMpID0gKCRkYXRlID1+IC9eKFxkezR9KVwtKFxkXGQpXC0oXGRcZClUCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxkXGQpXDooXGRcZClcOihcZFxkKVwuXGQqWiQveCkgb3IKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9hayAiVW5hYmxlIHRvIHBhcnNlIGRhdGU6ICRkYXRlXG4iOworCW15ICRwYXJzZWRfZGF0ZTsgICAgIyBTZXQgbmV4dC4KKworCWlmICgkR2l0OjpTVk46Ol9sb2NhbHRpbWUpIHsKKwkJIyBUcmFuc2xhdGUgdGhlIFN1YnZlcnNpb24gZGF0ZXRpbWUgdG8gYW4gZXBvY2ggdGltZS4KKwkJIyBCZWdpbiBieSBzd2l0Y2hpbmcgb3Vyc2VsdmVzIHRvICRkYXRlJ3MgdGltZXpvbmUsIFVUQy4KKwkJbXkgJG9sZF9lbnZfVFogPSAkRU5We1RafTsKKwkJJEVOVntUWn0gPSAnVVRDJzsKKworCQlteSAkZXBvY2hfaW5fVVRDID0KKwkJICAgIFBPU0lYOjpzdHJmdGltZSgnJXMnLCAkUywgJE0sICRILCAkZCwgJG0gLSAxLCAkWSAtIDE5MDApOworCisJCSMgRGV0ZXJtaW5lIG91ciBsb2NhbCB0aW1lem9uZSAoaW5jbHVkaW5nIERTVCkgYXQgdGhlCisJCSMgdGltZSBvZiAkZXBvY2hfaW5fVVRDLiAgJEdpdDo6U1ZOOjpMb2c6OlRaIHN0b3JlZCB0aGUKKwkJIyB2YWx1ZSBvZiBUWiwgaWYgYW55LCBhdCB0aGUgdGltZSB3ZSB3ZXJlIHJ1bi4KKwkJaWYgKGRlZmluZWQgJEdpdDo6U1ZOOjpMb2c6OlRaKSB7CisJCQkkRU5We1RafSA9ICRHaXQ6OlNWTjo6TG9nOjpUWjsKKwkJfSBlbHNlIHsKKwkJCWRlbGV0ZSAkRU5We1RafTsKKwkJfQorCisJCW15ICRvdXJfVFogPSBnZXRfdHooKTsKKworCQkjIFRoaXMgY29udmVydHMgJGVwb2NoX2luX1VUQyBpbnRvIG91ciBsb2NhbCB0aW1lem9uZS4KKwkJbXkgKCRzZWMsICRtaW4sICRob3VyLCAkbWRheSwgJG1vbiwgJHllYXIsCisJCSAgICAkd2RheSwgJHlkYXksICRpc2RzdCkgPSBsb2NhbHRpbWUoJGVwb2NoX2luX1VUQyk7CisKKwkJJHBhcnNlZF9kYXRlID0gc3ByaW50ZignJXMgJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQnLAorCQkJCSAgICAgICAkb3VyX1RaLCAkeWVhciArIDE5MDAsICRtb24gKyAxLAorCQkJCSAgICAgICAkbWRheSwgJGhvdXIsICRtaW4sICRzZWMpOworCisJCSMgUmVzZXQgdXMgdG8gdGhlIHRpbWV6b25lIGluIGVmZmVjdCB3aGVuIHdlIGVudGVyZWQKKwkJIyB0aGlzIHJvdXRpbmUuCisJCWlmIChkZWZpbmVkICRvbGRfZW52X1RaKSB7CisJCQkkRU5We1RafSA9ICRvbGRfZW52X1RaOworCQl9IGVsc2UgeworCQkJZGVsZXRlICRFTlZ7VFp9OworCQl9CisJfSBlbHNlIHsKKwkJJHBhcnNlZF9kYXRlID0gIiswMDAwICRZLSRtLSRkICRIOiRNOiRTIjsKKwl9CisKKwlyZXR1cm4gJHBhcnNlZF9kYXRlOworfQorCitzdWIgb3RoZXJfZ3MgeworCW15ICgkc2VsZiwgJG5ld191cmwsICR1cmwsCisJICAgICRicmFuY2hfZnJvbSwgJHIsICRvbGRfcmVmX2lkKSA9IEBfOworCW15ICRncyA9IEdpdDo6U1ZOLT5maW5kX2J5X3VybCgkbmV3X3VybCwgJHVybCwgJGJyYW5jaF9mcm9tKTsKKwl1bmxlc3MgKCRncykgeworCQlteSAkcmVmX2lkID0gJG9sZF9yZWZfaWQ7CisJCSRyZWZfaWQgPX4gcy9cQFxkKy0qJC8vOworCQkkcmVmX2lkIC49ICJcQCRyIjsKKwkJIyBqdXN0IGdyb3cgYSB0YWlsIGlmIHdlJ3JlIG5vdCB1bmlxdWUgZW5vdWdoIDp4CisJCSRyZWZfaWQgLj0gJy0nIHdoaWxlIGZpbmRfcmVmKCRyZWZfaWQpOworCQlteSAoJHUsICRwLCAkcmVwb19pZCkgPSAoJG5ld191cmwsICcnLCAkcmVmX2lkKTsKKwkJaWYgKCR1ID1+IHMjXlxRJHVybFxFKC98JCkjIykgeworCQkJJHAgPSAkdTsKKwkJCSR1ID0gJHVybDsKKwkJCSRyZXBvX2lkID0gJHNlbGYtPntyZXBvX2lkfTsKKwkJfQorCQl3aGlsZSAoMSkgeworCQkJIyBJdCBpcyBwb3NzaWJsZSB0byB0YWcgdHdvIGRpZmZlcmVudCBzdWJkaXJlY3RvcmllcyBhdAorCQkJIyB0aGUgc2FtZSByZXZpc2lvbi4gIElmIHRoZSB1cmwgZm9yIGFuIGV4aXN0aW5nIHJlZgorCQkJIyBkb2VzIG5vdCBtYXRjaCwgd2UgbXVzdCBlaXRoZXIgZmluZCBhIHJlZiB3aXRoIGEKKwkJCSMgbWF0Y2hpbmcgdXJsIG9yIGNyZWF0ZSBhIG5ldyByZWYgYnkgZ3Jvd2luZyBhIHRhaWwuCisJCQkkZ3MgPSBHaXQ6OlNWTi0+aW5pdCgkdSwgJHAsICRyZXBvX2lkLCAkcmVmX2lkLCAxKTsKKwkJCW15ICh1bmRlZiwgJG1heF9jb21taXQpID0gJGdzLT5yZXZfbWFwX21heCgxKTsKKwkJCWxhc3QgaWYgKCEkbWF4X2NvbW1pdCk7CisJCQlteSAoJHVybCkgPSA6OmNtdF9tZXRhZGF0YSgkbWF4X2NvbW1pdCk7CisJCQlsYXN0IGlmICgkdXJsIGVxICRncy0+bWV0YWRhdGFfdXJsKTsKKwkJCSRyZWZfaWQgLj0gJy0nOworCQl9CisJCXByaW50IFNUREVSUiAiSW5pdGlhbGl6aW5nIHBhcmVudDogJHJlZl9pZFxuIiB1bmxlc3MgJDo6X3EgPiAxOworCX0KKwkkZ3MKK30KKworc3ViIGNhbGxfYXV0aG9yc19wcm9nIHsKKwlteSAoJG9yaWdfYXV0aG9yKSA9IEBfOworCSRvcmlnX2F1dGhvciA9IGNvbW1hbmRfb25lbGluZSgncmV2LXBhcnNlJywgJy0tc3EtcXVvdGUnLCAkb3JpZ19hdXRob3IpOworCW15ICRhdXRob3IgPSBgJDo6X2F1dGhvcnNfcHJvZyAkb3JpZ19hdXRob3JgOworCWlmICgkPyAhPSAwKSB7CisJCWRpZSAiJDo6X2F1dGhvcnNfcHJvZyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJD9cbiIKKwl9CisJaWYgKCRhdXRob3IgPX4gL15ccyooLis/KVxzKjwoLiopPlxzKiQvKSB7CisJCW15ICgkbmFtZSwgJGVtYWlsKSA9ICgkMSwgJDIpOworCQkkZW1haWwgPSB1bmRlZiBpZiBsZW5ndGggJDIgPT0gMDsKKwkJcmV0dXJuIFskbmFtZSwgJGVtYWlsXTsKKwl9IGVsc2UgeworCQlkaWUgIkF1dGhvcjogJG9yaWdfYXV0aG9yOiAkOjpfYXV0aG9yc19wcm9nIHJldHVybmVkICIKKwkJCS4gImludmFsaWQgYXV0aG9yIGZvcm1hdDogJGF1dGhvclxuIjsKKwl9Cit9CisKK3N1YiBjaGVja19hdXRob3IgeworCW15ICgkYXV0aG9yKSA9IEBfOworCWlmICghZGVmaW5lZCAkYXV0aG9yIHx8IGxlbmd0aCAkYXV0aG9yID09IDApIHsKKwkJJGF1dGhvciA9ICcobm8gYXV0aG9yKSc7CisJfQorCWlmICghZGVmaW5lZCAkOjp1c2Vyc3skYXV0aG9yfSkgeworCQlpZiAoZGVmaW5lZCAkOjpfYXV0aG9yc19wcm9nKSB7CisJCQkkOjp1c2Vyc3skYXV0aG9yfSA9IGNhbGxfYXV0aG9yc19wcm9nKCRhdXRob3IpOworCQl9IGVsc2lmIChkZWZpbmVkICQ6Ol9hdXRob3JzKSB7CisJCQlkaWUgIkF1dGhvcjogJGF1dGhvciBub3QgZGVmaW5lZCBpbiAkOjpfYXV0aG9ycyBmaWxlXG4iOworCQl9CisJfQorCSRhdXRob3I7Cit9CisKK3N1YiBmaW5kX2V4dHJhX3N2a19wYXJlbnRzIHsKKwlteSAoJHNlbGYsICRlZCwgJHRpY2tldHMsICRwYXJlbnRzKSA9IEBfOworCSMgYWhhISAgc3ZrOm1lcmdlIHByb3BlcnR5IGNoYW5nZWQuLi4KKwlteSBAdGlja2V0cyA9IHNwbGl0ICJcbiIsICR0aWNrZXRzOworCW15IEBrbm93bl9wYXJlbnRzOworCWZvciBteSAkdGlja2V0ICggQHRpY2tldHMgKSB7CisJCW15ICgkdXVpZCwgJHBhdGgsICRyZXYpID0gc3BsaXQgLzovLCAkdGlja2V0OworCQlpZiAoICR1dWlkIGVxICRzZWxmLT5yYV91dWlkICkgeworCQkJbXkgJHJlcG9zX3Jvb3QgPSAkc2VsZi0+dXJsOworCQkJbXkgJGJyYW5jaF9mcm9tID0gJHBhdGg7CisJCQkkYnJhbmNoX2Zyb20gPX4gc3teL317fTsKKwkJCW15ICRncyA9ICRzZWxmLT5vdGhlcl9ncyhhZGRfcGF0aF90b191cmwoICRyZXBvc19yb290LCAkYnJhbmNoX2Zyb20gKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAkcmVwb3Nfcm9vdCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAkYnJhbmNoX2Zyb20sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgJHJldiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+e3JlZl9pZH0pOworCQkJaWYgKCBteSAkY29tbWl0ID0gJGdzLT5yZXZfbWFwX2dldCgkcmV2LCAkdXVpZCkgKSB7CisJCQkJIyB3YWhleSEgIHdlIGZvdW5kIGl0LCBidXQgaXQgbWlnaHQgYmUKKwkJCQkjIGFuIG9sZCBvbmUgKCEpCisJCQkJcHVzaCBAa25vd25fcGFyZW50cywgWyAkcmV2LCAkY29tbWl0IF07CisJCQl9CisJCX0KKwl9CisJIyBPcmRlcmluZyBtYXR0ZXJzOyBoaWdoZXN0LW51bWJlcmVkIGNvbW1pdCBtZXJnZSB0aWNrZXRzCisJIyBmaXJzdCwgYXMgdGhleSBtYXkgYWNjb3VudCBmb3IgbGF0ZXIgbWVyZ2UgdGlja2V0IGFkZGl0aW9ucworCSMgb3IgY2hhbmdlcy4KKwlAa25vd25fcGFyZW50cyA9IG1hcCB7JF8tPlsxXX0gc29ydCB7JGItPlswXSA8PT4gJGEtPlswXX0gQGtub3duX3BhcmVudHM7CisJZm9yIG15ICRwYXJlbnQgKCBAa25vd25fcGFyZW50cyApIHsKKwkJbXkgQGNtZCA9ICgncmV2LWxpc3QnLCAkcGFyZW50LCBtYXAgeyAiXiRfIiB9IEAkcGFyZW50cyApOworCQlteSAoJG1zZ19maCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKEBjbWQpOworCQlteSAkbmV3OworCQl3aGlsZSAoIDwkbXNnX2ZoPiApIHsKKwkJCSRuZXc9MTtsYXN0OworCQl9CisJCWNvbW1hbmRfY2xvc2VfcGlwZSgkbXNnX2ZoLCAkY3R4KTsKKwkJaWYgKCAkbmV3ICkgeworCQkJcHJpbnQgU1RERVJSCisJCQkgICAgIkZvdW5kIG1lcmdlIHBhcmVudCAoc3ZrOm1lcmdlIHRpY2tldCk6ICRwYXJlbnRcbiI7CisJCQlwdXNoIEAkcGFyZW50cywgJHBhcmVudDsKKwkJfQorCX0KK30KKworc3ViIGxvb2t1cF9zdm5fbWVyZ2UgeworCW15ICR1dWlkID0gc2hpZnQ7CisJbXkgJHVybCA9IHNoaWZ0OworCW15ICRtZXJnZSA9IHNoaWZ0OworCisJbXkgKCRzb3VyY2UsICRyZXZzKSA9IHNwbGl0ICI6IiwgJG1lcmdlOworCW15ICRwYXRoID0gJHNvdXJjZTsKKwkkcGF0aCA9fiBze14vfXt9OworCW15ICRncyA9IEdpdDo6U1ZOLT5maW5kX2J5X3VybCgkdXJsLiRzb3VyY2UsICR1cmwsICRwYXRoKTsKKwlpZiAoICEkZ3MgKSB7CisJCXdhcm4gIkNvdWxkbid0IGZpbmQgcmV2bWFwIGZvciAkdXJsJHNvdXJjZVxuIjsKKwkJcmV0dXJuOworCX0KKwlteSBAcmFuZ2VzID0gc3BsaXQgIiwiLCAkcmV2czsKKwlteSAoJHRpcCwgJHRpcF9jb21taXQpOworCW15IEBtZXJnZWRfY29tbWl0X3JhbmdlczsKKwkjIGZpbmQgdGhlIHRpcAorCWZvciBteSAkcmFuZ2UgKCBAcmFuZ2VzICkgeworCQlteSAoJGJvdHRvbSwgJHRvcCkgPSBzcGxpdCAiLSIsICRyYW5nZTsKKwkJJHRvcCB8fD0gJGJvdHRvbTsKKwkJbXkgJGJvdHRvbV9jb21taXQgPSAkZ3MtPmZpbmRfcmV2X2FmdGVyKCAkYm90dG9tLCAxLCAkdG9wICk7CisJCW15ICR0b3BfY29tbWl0ID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoICR0b3AsIDEsICRib3R0b20gKTsKKworCQl1bmxlc3MgKCR0b3BfY29tbWl0IGFuZCAkYm90dG9tX2NvbW1pdCkgeworCQkJd2FybiAiVzp1bmtub3duIHBhdGgvcmV2IGluIHN2bjptZXJnZWluZm8gIgorCQkJCS4iZGlycHJvcDogJHNvdXJjZTokcmFuZ2VcbiI7CisJCQluZXh0OworCQl9CisKKwkJaWYgKHNjYWxhcihjb21tYW5kKCdyZXYtcGFyc2UnLCAiJGJvdHRvbV9jb21taXReQCIpKSkgeworCQkJcHVzaCBAbWVyZ2VkX2NvbW1pdF9yYW5nZXMsCisJCQkgICAgICIkYm90dG9tX2NvbW1pdF4uLiR0b3BfY29tbWl0IjsKKwkJfSBlbHNlIHsKKwkJCXB1c2ggQG1lcmdlZF9jb21taXRfcmFuZ2VzLCAiJHRvcF9jb21taXQiOworCQl9CisKKwkJaWYgKCAhZGVmaW5lZCAkdGlwIG9yICR0b3AgPiAkdGlwICkgeworCQkJJHRpcCA9ICR0b3A7CisJCQkkdGlwX2NvbW1pdCA9ICR0b3BfY29tbWl0OworCQl9CisJfQorCXJldHVybiAoJHRpcF9jb21taXQsIEBtZXJnZWRfY29tbWl0X3Jhbmdlcyk7Cit9CisKK3N1YiBfcmV2X2xpc3QgeworCW15ICgkbXNnX2ZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoCisJCSJyZXYtbGlzdCIsIEBfLAorCSAgICAgICApOworCW15IEBydjsKKwl3aGlsZSAoIDwkbXNnX2ZoPiApIHsKKwkJY2hvbXA7CisJCXB1c2ggQHJ2LCAkXzsKKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRtc2dfZmgsICRjdHgpOworCUBydjsKK30KKworc3ViIGNoZWNrX2NoZXJyeV9waWNrIHsKKwlteSAkYmFzZSA9IHNoaWZ0OworCW15ICR0aXAgPSBzaGlmdDsKKwlteSAkcGFyZW50cyA9IHNoaWZ0OworCW15IEByYW5nZXMgPSBAXzsKKwlteSAlY29tbWl0cyA9IG1hcCB7ICRfID0+IDEgfQorCQlfcmV2X2xpc3QoIi0tbm8tbWVyZ2VzIiwgJHRpcCwgIi0tbm90IiwgJGJhc2UsIEAkcGFyZW50cywgIi0tIik7CisJZm9yIG15ICRyYW5nZSAoIEByYW5nZXMgKSB7CisJCWRlbGV0ZSBAY29tbWl0c3tfcmV2X2xpc3QoJHJhbmdlLCAiLS0iKX07CisJfQorCWZvciBteSAkY29tbWl0IChrZXlzICVjb21taXRzKSB7CisJCWlmIChoYXNfbm9fY2hhbmdlcygkY29tbWl0KSkgeworCQkJZGVsZXRlICRjb21taXRzeyRjb21taXR9OworCQl9CisJfQorCXJldHVybiAoa2V5cyAlY29tbWl0cyk7Cit9CisKK3N1YiBoYXNfbm9fY2hhbmdlcyB7CisJbXkgJGNvbW1pdCA9IHNoaWZ0OworCisJbXkgQHJldnMgPSBzcGxpdCAvIC8sIGNvbW1hbmRfb25lbGluZSgKKwkJcXcocmV2LWxpc3QgLS1wYXJlbnRzIC0xIC1tKSwgJGNvbW1pdCk7CisKKwkjIENvbW1pdHMgd2l0aCBubyBwYXJlbnRzLCBlLmcuIHRoZSBzdGFydCBvZiBhIHBhcnRpYWwgYnJhbmNoLAorCSMgaGF2ZSBjaGFuZ2VzIGJ5IGRlZmluaXRpb24uCisJcmV0dXJuIDEgaWYgKEByZXZzIDwgMik7CisKKwkjIENvbW1pdHMgd2l0aCBtdWx0aXBsZSBwYXJlbnRzLCBlLmcgYSBtZXJnZSwgaGF2ZSBubyBjaGFuZ2VzCisJIyBieSBkZWZpbml0aW9uLgorCXJldHVybiAwIGlmIChAcmV2cyA+IDIpOworCisJcmV0dXJuIChjb21tYW5kX29uZWxpbmUoInJldi1wYXJzZSIsICIkY29tbWl0Xnt0cmVlfSIpIGVxCisJCWNvbW1hbmRfb25lbGluZSgicmV2LXBhcnNlIiwgIiRjb21taXR+MV57dHJlZX0iKSk7Cit9CisKK3N1YiB0aWVfZm9yX3BlcnNpc3RlbnRfbWVtb2l6YXRpb24geworCW15ICRoYXNoID0gc2hpZnQ7CisJbXkgJHBhdGggPSBzaGlmdDsKKworCWlmICgkY2FuX3VzZV95YW1sKSB7CisJCXRpZSAlJGhhc2ggPT4gJ0dpdDo6U1ZOOjpNZW1vaXplOjpZQU1MJywgIiRwYXRoLnlhbWwiOworCX0gZWxzZSB7CisJCXRpZSAlJGhhc2ggPT4gJ01lbW9pemU6OlN0b3JhYmxlJywgIiRwYXRoLmRiIiwgJ25zdG9yZSc7CisJfQorfQorCisjIFRoZSBHSVRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBhbHdheXMgc2V0IHVudGlsIGFmdGVyIHRoZSBjb21tYW5kCisjIGxpbmUgYXJndW1lbnRzIGFyZSBwcm9jZXNzZWQsIHNvIHdlIGNhbid0IG1lbW9pemUgaW4gYSBCRUdJTiBibG9jay4KK3sKKwlteSAkbWVtb2l6ZWQgPSAwOworCisJc3ViIG1lbW9pemVfc3ZuX21lcmdlaW5mb19mdW5jdGlvbnMgeworCQlyZXR1cm4gaWYgJG1lbW9pemVkOworCQkkbWVtb2l6ZWQgPSAxOworCisJCW15ICRjYWNoZV9wYXRoID0gIiRFTlZ7R0lUX0RJUn0vc3ZuLy5jYWNoZXMvIjsKKwkJbWtwYXRoKFskY2FjaGVfcGF0aF0pIHVubGVzcyAtZCAkY2FjaGVfcGF0aDsKKworCQlteSAlbG9va3VwX3N2bl9tZXJnZV9jYWNoZTsKKwkJbXkgJWNoZWNrX2NoZXJyeV9waWNrX2NhY2hlOworCQlteSAlaGFzX25vX2NoYW5nZXNfY2FjaGU7CisKKwkJdGllX2Zvcl9wZXJzaXN0ZW50X21lbW9pemF0aW9uKFwlbG9va3VwX3N2bl9tZXJnZV9jYWNoZSwKKwkJICAgICIkY2FjaGVfcGF0aC9sb29rdXBfc3ZuX21lcmdlIik7CisJCW1lbW9pemUgJ2xvb2t1cF9zdm5fbWVyZ2UnLAorCQkJU0NBTEFSX0NBQ0hFID0+ICdGQVVMVCcsCisJCQlMSVNUX0NBQ0hFID0+IFsnSEFTSCcgPT4gXCVsb29rdXBfc3ZuX21lcmdlX2NhY2hlXSwKKwkJOworCisJCXRpZV9mb3JfcGVyc2lzdGVudF9tZW1vaXphdGlvbihcJWNoZWNrX2NoZXJyeV9waWNrX2NhY2hlLAorCQkgICAgIiRjYWNoZV9wYXRoL2NoZWNrX2NoZXJyeV9waWNrIik7CisJCW1lbW9pemUgJ2NoZWNrX2NoZXJyeV9waWNrJywKKwkJCVNDQUxBUl9DQUNIRSA9PiAnRkFVTFQnLAorCQkJTElTVF9DQUNIRSA9PiBbJ0hBU0gnID0+IFwlY2hlY2tfY2hlcnJ5X3BpY2tfY2FjaGVdLAorCQk7CisKKwkJdGllX2Zvcl9wZXJzaXN0ZW50X21lbW9pemF0aW9uKFwlaGFzX25vX2NoYW5nZXNfY2FjaGUsCisJCSAgICAiJGNhY2hlX3BhdGgvaGFzX25vX2NoYW5nZXMiKTsKKwkJbWVtb2l6ZSAnaGFzX25vX2NoYW5nZXMnLAorCQkJU0NBTEFSX0NBQ0hFID0+IFsnSEFTSCcgPT4gXCVoYXNfbm9fY2hhbmdlc19jYWNoZV0sCisJCQlMSVNUX0NBQ0hFID0+ICdGQVVMVCcsCisJCTsKKwl9CisKKwlzdWIgdW5tZW1vaXplX3N2bl9tZXJnZWluZm9fZnVuY3Rpb25zIHsKKwkJcmV0dXJuIGlmIG5vdCAkbWVtb2l6ZWQ7CisJCSRtZW1vaXplZCA9IDA7CisKKwkJTWVtb2l6ZTo6dW5tZW1vaXplICdsb29rdXBfc3ZuX21lcmdlJzsKKwkJTWVtb2l6ZTo6dW5tZW1vaXplICdjaGVja19jaGVycnlfcGljayc7CisJCU1lbW9pemU6OnVubWVtb2l6ZSAnaGFzX25vX2NoYW5nZXMnOworCX0KKworCXN1YiBjbGVhcl9tZW1vaXplZF9tZXJnZWluZm9fY2FjaGVzIHsKKwkJZGllICJPbmx5IGNhbGwgdGhpcyBtZXRob2QgaW4gbm9uLW1lbW9pemVkIGNvbnRleHQiIGlmICgkbWVtb2l6ZWQpOworCisJCW15ICRjYWNoZV9wYXRoID0gIiRFTlZ7R0lUX0RJUn0vc3ZuLy5jYWNoZXMvIjsKKwkJcmV0dXJuIHVubGVzcyAtZCAkY2FjaGVfcGF0aDsKKworCQlmb3IgbXkgJGNhY2hlX2ZpbGUgKCgiJGNhY2hlX3BhdGgvbG9va3VwX3N2bl9tZXJnZSIsCisJCQkJICAgICAiJGNhY2hlX3BhdGgvY2hlY2tfY2hlcnJ5X3BpY2siLAorCQkJCSAgICAgIiRjYWNoZV9wYXRoL2hhc19ub19jaGFuZ2VzIikpIHsKKwkJCWZvciBteSAkc3VmZml4IChxdyh5YW1sIGRiKSkgeworCQkJCW15ICRmaWxlID0gIiRjYWNoZV9maWxlLiRzdWZmaXgiOworCQkJCW5leHQgdW5sZXNzIC1lICRmaWxlOworCQkJCXVubGluaygkZmlsZSkgb3IgZGllICJ1bmxpbmsoJGZpbGUpIGZhaWxlZDogJCFcbiI7CisJCQl9CisJCX0KKwl9CisKKworCU1lbW9pemU6Om1lbW9pemUgJ0dpdDo6U1ZOOjpyZXBvc19yb290JzsKK30KKworRU5EIHsKKwkjIEZvcmNlIGNhY2hlIHdyaXRlb3V0IGV4cGxpY2l0bHkgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcgorCSMgZ2xvYmFsIGRlc3RydWN0aW9uIHRvIGF2b2lkIHNlZ2ZhdWx0IGluIFN0b3JhYmxlOgorCSMgaHR0cDovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTM2MDg3CisJdW5tZW1vaXplX3N2bl9tZXJnZWluZm9fZnVuY3Rpb25zKCk7Cit9CisKK3N1YiBwYXJlbnRzX2V4Y2x1ZGUgeworCW15ICRwYXJlbnRzID0gc2hpZnQ7CisJbXkgQGNvbW1pdHMgPSBAXzsKKwlyZXR1cm4gdW5sZXNzIEBjb21taXRzOworCisJbXkgQGV4Y2x1ZGVkOworCW15ICRleGNsdWRlZDsKKwlkbyB7CisJCW15IEBjbWQgPSAoJ3Jldi1saXN0JywgIi0xIiwgQGNvbW1pdHMsICItLW5vdCIsIEAkcGFyZW50cyApOworCQkkZXhjbHVkZWQgPSBjb21tYW5kX29uZWxpbmUoQGNtZCk7CisJCWlmICggJGV4Y2x1ZGVkICkgeworCQkJbXkgQG5ldzsKKwkJCW15ICRmb3VuZDsKKwkJCWZvciBteSAkY29tbWl0ICggQGNvbW1pdHMgKSB7CisJCQkJaWYgKCAkY29tbWl0IGVxICRleGNsdWRlZCApIHsKKwkJCQkJcHVzaCBAZXhjbHVkZWQsICRjb21taXQ7CisJCQkJCSRmb3VuZCsrOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJcHVzaCBAbmV3LCAkY29tbWl0OworCQkJCX0KKwkJCX0KKwkJCWRpZSAic2F3IGNvbW1pdCAnJGV4Y2x1ZGVkJyBpbiByZXYtbGlzdCBvdXRwdXQsICIKKwkJCQkuImJ1dCB3ZSBkaWRuJ3QgYXNrIGZvciB0aGF0IGNvbW1pdCAod2FudGVkOiBAY29tbWl0cyAtLW5vdCBAJHBhcmVudHMpIgorCQkJCQl1bmxlc3MgJGZvdW5kOworCQkJQGNvbW1pdHMgPSBAbmV3OworCQl9CisJfQorCQl3aGlsZSAoJGV4Y2x1ZGVkIGFuZCBAY29tbWl0cyk7CisKKwlyZXR1cm4gQGV4Y2x1ZGVkOworfQorCisKKyMgbm90ZTogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIHZhcmlvdXMgZGlycHJvcHMKKyMgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkCitzdWIgZmluZF9leHRyYV9zdm5fcGFyZW50cyB7CisJbXkgKCRzZWxmLCAkZWQsICRtZXJnZWluZm8sICRwYXJlbnRzKSA9IEBfOworCSMgYWhhISAgc3ZrOm1lcmdlIHByb3BlcnR5IGNoYW5nZWQuLi4KKworCW1lbW9pemVfc3ZuX21lcmdlaW5mb19mdW5jdGlvbnMoKTsKKworCSMgV2UgZmlyc3Qgc2VhcmNoIGZvciBtZXJnZWQgdGlwcyB3aGljaCBhcmUgbm90IGluIG91cgorCSMgaGlzdG9yeS4gIFRoZW4sIHdlIGZpZ3VyZSBvdXQgd2hpY2ggZ2l0IHJldmlzaW9ucyBhcmUgaW4KKwkjIHRoYXQgdGlwLCBidXQgbm90IHRoaXMgcmV2aXNpb24uICBJZiBhbGwgb2YgdGhvc2UgcmV2aXNpb25zCisJIyBhcmUgbm93IG1hcmtlZCBhcyBtZXJnZSwgd2UgY2FuIGFkZCB0aGUgdGlwIGFzIGEgcGFyZW50LgorCW15IEBtZXJnZXMgPSBzcGxpdCAiXG4iLCAkbWVyZ2VpbmZvOworCW15IEBtZXJnZV90aXBzOworCW15ICR1cmwgPSAkc2VsZi0+dXJsOworCW15ICR1dWlkID0gJHNlbGYtPnJhX3V1aWQ7CisJbXkgQGFsbF9yYW5nZXM7CisJZm9yIG15ICRtZXJnZSAoIEBtZXJnZXMgKSB7CisJCW15ICgkdGlwX2NvbW1pdCwgQHJhbmdlcykgPQorCQkJbG9va3VwX3N2bl9tZXJnZSggJHV1aWQsICR1cmwsICRtZXJnZSApOworCQl1bmxlc3MgKCEkdGlwX2NvbW1pdCBvcgorCQkJCWdyZXAgeyAkXyBlcSAkdGlwX2NvbW1pdCB9IEAkcGFyZW50cyApIHsKKwkJCXB1c2ggQG1lcmdlX3RpcHMsICR0aXBfY29tbWl0OworCQkJcHVzaCBAYWxsX3JhbmdlcywgQHJhbmdlczsKKwkJfSBlbHNlIHsKKwkJCXB1c2ggQG1lcmdlX3RpcHMsIHVuZGVmOworCQl9CisJfQorCisJbXkgJWV4Y2x1ZGVkID0gbWFwIHsgJF8gPT4gMSB9CisJCXBhcmVudHNfZXhjbHVkZSgkcGFyZW50cywgZ3JlcCB7IGRlZmluZWQgfSBAbWVyZ2VfdGlwcyk7CisKKwkjIGNoZWNrIG1lcmdlIHRpcHMgZm9yIG5ldyBwYXJlbnRzCisJbXkgQG5ld19wYXJlbnRzOworCWZvciBteSAkbWVyZ2VfdGlwICggQG1lcmdlX3RpcHMgKSB7CisJCW15ICRzcGVjID0gc2hpZnQgQG1lcmdlczsKKwkJbmV4dCB1bmxlc3MgJG1lcmdlX3RpcCBhbmQgJGV4Y2x1ZGVkeyRtZXJnZV90aXB9OworCisJCSMgY2hlY2sgb3V0ICduZXcnIHRpcHMKKwkJbXkgJG1lcmdlX2Jhc2U7CisJCWV2YWwgeworCQkJJG1lcmdlX2Jhc2UgPSBjb21tYW5kX29uZWxpbmUoCisJCQkJIm1lcmdlLWJhc2UiLAorCQkJCUAkcGFyZW50cywgJG1lcmdlX3RpcCwKKwkJCSk7CisJCX07CisJCWlmICgkQCkgeworCQkJZGllICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbWVyZ2UtYmFzZSIKKwkJCQl1bmxlc3MgJEAtPmlzYSgiR2l0OjpFcnJvcjo6Q29tbWFuZCIpOworCisJCQl3YXJuICJXOiBDYW5ub3QgZmluZCBjb21tb24gYW5jZXN0b3IgYmV0d2VlbiAiLgorCQkJICAgICAiQCRwYXJlbnRzIGFuZCAkbWVyZ2VfdGlwLiBJZ25vcmluZyBtZXJnZSBpbmZvLlxuIjsKKwkJCW5leHQ7CisJCX0KKworCQkjIGRvdWJsZSBjaGVjayB0aGF0IHRoZXJlIGFyZSBubyBtaXNzaW5nIG5vbi1tZXJnZSBjb21taXRzCisJCW15IChAaW5jb21wbGV0ZSkgPSBjaGVja19jaGVycnlfcGljaygKKwkJCSRtZXJnZV9iYXNlLCAkbWVyZ2VfdGlwLAorCQkJJHBhcmVudHMsCisJCQlAYWxsX3JhbmdlcywKKwkJICAgICAgICk7CisKKwkJaWYgKCBAaW5jb21wbGV0ZSApIHsKKwkJCXdhcm4gIlc6c3ZuIGNoZXJyeS1waWNrIGlnbm9yZWQgKCRzcGVjKSAtIG1pc3NpbmcgIgorCQkJCS5AaW5jb21wbGV0ZS4iIGNvbW1pdChzKSAoZWcgJGluY29tcGxldGVbMF0pXG4iOworCQl9IGVsc2UgeworCQkJd2FybgorCQkJCSJGb3VuZCBtZXJnZSBwYXJlbnQgKHN2bjptZXJnZWluZm8gcHJvcCk6ICIsCisJCQkJCSRtZXJnZV90aXAsICJcbiI7CisJCQlwdXNoIEBuZXdfcGFyZW50cywgJG1lcmdlX3RpcDsKKwkJfQorCX0KKworCSMgY2F0ZXIgZm9yIG1lcmdlcyB3aGljaCBtZXJnZSBjb21taXRzIGZyb20gbXVsdGlwbGUgYnJhbmNoZXMKKwlpZiAoIEBuZXdfcGFyZW50cyA+IDEgKSB7CisJCWZvciAoIG15ICRpID0gMDsgJGkgPD0gJCNuZXdfcGFyZW50czsgJGkrKyApIHsKKwkJCWZvciAoIG15ICRqID0gMDsgJGogPD0gJCNuZXdfcGFyZW50czsgJGorKyApIHsKKwkJCQluZXh0IGlmICRpID09ICRqOworCQkJCW5leHQgdW5sZXNzICRuZXdfcGFyZW50c1skaV07CisJCQkJbmV4dCB1bmxlc3MgJG5ld19wYXJlbnRzWyRqXTsKKwkJCQlteSAkcmV2cyA9IGNvbW1hbmRfb25lbGluZSgKKwkJCQkJInJldi1saXN0IiwgIi0xIiwKKwkJCQkJIiRuZXdfcGFyZW50c1skaV0uLiRuZXdfcGFyZW50c1skal0iLAorCQkJCSAgICAgICApOworCQkJCWlmICggISRyZXZzICkgeworCQkJCQl1bmRlZigkbmV3X3BhcmVudHNbJGpdKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcHVzaCBAJHBhcmVudHMsIGdyZXAgeyBkZWZpbmVkIH0gQG5ld19wYXJlbnRzOworfQorCitzdWIgbWFrZV9sb2dfZW50cnkgeworCW15ICgkc2VsZiwgJHJldiwgJHBhcmVudHMsICRlZCkgPSBAXzsKKwlteSAkdW50cmFja2VkID0gJHNlbGYtPmdldF91bnRyYWNrZWQoJGVkKTsKKworCW15IEBwYXJlbnRzID0gQCRwYXJlbnRzOworCW15ICRwcyA9ICRlZC0+e3BhdGhfc3RyaXB9IHx8ICIiOworCWZvciBteSAkcGF0aCAoIGdyZXAgeyBtLyRwcy8gfSAleyRlZC0+e2Rpcl9wcm9wfX0gKSB7CisJCW15ICRwcm9wcyA9ICRlZC0+e2Rpcl9wcm9wfXskcGF0aH07CisJCWlmICggJHByb3BzLT57InN2azptZXJnZSJ9ICkgeworCQkJJHNlbGYtPmZpbmRfZXh0cmFfc3ZrX3BhcmVudHMKKwkJCQkoJGVkLCAkcHJvcHMtPnsic3ZrOm1lcmdlIn0sIFxAcGFyZW50cyk7CisJCX0KKwkJaWYgKCAkcHJvcHMtPnsic3ZuOm1lcmdlaW5mbyJ9ICkgeworCQkJJHNlbGYtPmZpbmRfZXh0cmFfc3ZuX3BhcmVudHMKKwkJCQkoJGVkLAorCQkJCSAkcHJvcHMtPnsic3ZuOm1lcmdlaW5mbyJ9LAorCQkJCSBcQHBhcmVudHMpOworCQl9CisJfQorCisJb3BlbiBteSAkdW4sICc+PicsICIkc2VsZi0+e2Rpcn0vdW5oYW5kbGVkLmxvZyIgb3IgY3JvYWsgJCE7CisJcHJpbnQgJHVuICJyJHJldlxuIiBvciBjcm9hayAkITsKKwlwcmludCAkdW4gJF8sICJcbiIgZm9yZWFjaCBAJHVudHJhY2tlZDsKKwlteSAlbG9nX2VudHJ5ID0gKCBwYXJlbnRzID0+IFxAcGFyZW50cywgcmV2aXNpb24gPT4gJHJldiwKKwkgICAgICAgICAgICAgICAgICBsb2cgPT4gJycpOworCisJbXkgJGhlYWRyZXY7CisJbXkgJGxvZ2dlZCA9IGRlbGV0ZSAkc2VsZi0+e2xvZ2dlZF9yZXZfcHJvcHN9OworCWlmICghJGxvZ2dlZCB8fCAkc2VsZi0+ey13YW50X3JldnByb3BzfSkgeworCQlteSAkcnAgPSAkc2VsZi0+cmEtPnJldl9wcm9wbGlzdCgkcmV2KTsKKwkJZm9yZWFjaCAoc29ydCBrZXlzICUkcnApIHsKKwkJCW15ICR2ID0gJHJwLT57JF99OworCQkJaWYgKC9ec3ZuOihhdXRob3J8ZGF0ZXxsb2cpJC8pIHsKKwkJCQkkbG9nX2VudHJ5eyQxfSA9ICR2OworCQkJfSBlbHNpZiAoJF8gZXEgJ3N2bTpoZWFkcmV2JykgeworCQkJCSRoZWFkcmV2ID0gJHY7CisJCQl9IGVsc2UgeworCQkJCXByaW50ICR1biAiICByZXZfcHJvcDogIiwgdXJpX2VuY29kZSgkXyksICcgJywKKwkJCQkJICB1cmlfZW5jb2RlKCR2KSwgIlxuIjsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCW1hcCB7ICRsb2dfZW50cnl7JF99ID0gJGxvZ2dlZC0+eyRffSB9IGtleXMgJSRsb2dnZWQ7CisJfQorCWNsb3NlICR1biBvciBjcm9hayAkITsKKworCSRsb2dfZW50cnl7ZGF0ZX0gPSBwYXJzZV9zdm5fZGF0ZSgkbG9nX2VudHJ5e2RhdGV9KTsKKwkkbG9nX2VudHJ5e2xvZ30gLj0gIlxuIjsKKwlteSAkYXV0aG9yID0gJGxvZ19lbnRyeXthdXRob3J9ID0gY2hlY2tfYXV0aG9yKCRsb2dfZW50cnl7YXV0aG9yfSk7CisJbXkgKCRuYW1lLCAkZW1haWwpID0gZGVmaW5lZCAkOjp1c2Vyc3skYXV0aG9yfSA/IEB7JDo6dXNlcnN7JGF1dGhvcn19CisJCQkJCQkgICAgICAgOiAoJGF1dGhvciwgdW5kZWYpOworCisJbXkgKCRjb21taXRfbmFtZSwgJGNvbW1pdF9lbWFpbCkgPSAoJG5hbWUsICRlbWFpbCk7CisJaWYgKCRfdXNlX2xvZ19hdXRob3IpIHsKKwkJbXkgJG5hbWVfZmllbGQ7CisJCWlmICgkbG9nX2VudHJ5e2xvZ30gPX4gL0Zyb206XHMrKC4qXFMpXHMqXG4vaSkgeworCQkJJG5hbWVfZmllbGQgPSAkMTsKKwkJfSBlbHNpZiAoJGxvZ19lbnRyeXtsb2d9ID1+IC9TaWduZWQtb2ZmLWJ5OlxzKyguKlxTKVxzKlxuL2kpIHsKKwkJCSRuYW1lX2ZpZWxkID0gJDE7CisJCX0KKwkJaWYgKCFkZWZpbmVkICRuYW1lX2ZpZWxkKSB7CisJCQlpZiAoIWRlZmluZWQgJGVtYWlsKSB7CisJCQkJJGVtYWlsID0gJG5hbWU7CisJCQl9CisJCX0gZWxzaWYgKCRuYW1lX2ZpZWxkID1+IC8oLio/KVxzKzwoLiopPi8pIHsKKwkJCSgkbmFtZSwgJGVtYWlsKSA9ICgkMSwgJDIpOworCQl9IGVsc2lmICgkbmFtZV9maWVsZCA9fiAvKC4qKUAvKSB7CisJCQkoJG5hbWUsICRlbWFpbCkgPSAoJDEsICRuYW1lX2ZpZWxkKTsKKwkJfSBlbHNlIHsKKwkJCSgkbmFtZSwgJGVtYWlsKSA9ICgkbmFtZV9maWVsZCwgJG5hbWVfZmllbGQpOworCQl9CisJfQorCWlmIChkZWZpbmVkICRoZWFkcmV2ICYmICRzZWxmLT51c2Vfc3ZtX3Byb3BzKSB7CisJCWlmICgkc2VsZi0+cmV3cml0ZV9yb290KSB7CisJCQlkaWUgIkNhbid0IGhhdmUgYm90aCAndXNlU3ZtUHJvcHMnIGFuZCAncmV3cml0ZVJvb3QnICIsCisJCQkgICAgIm9wdGlvbnMgc2V0IVxuIjsKKwkJfQorCQlpZiAoJHNlbGYtPnJld3JpdGVfdXVpZCkgeworCQkJZGllICJDYW4ndCBoYXZlIGJvdGggJ3VzZVN2bVByb3BzJyBhbmQgJ3Jld3JpdGVVVUlEJyAiLAorCQkJICAgICJvcHRpb25zIHNldCFcbiI7CisJCX0KKwkJbXkgKCR1dWlkLCAkcikgPSAkaGVhZHJldiA9fiBte14oW2EtZlxkXC1dezMwLH0pOihcZCspJH1pOworCQkjIHdlIGRvbid0IHdhbnQgIlNWTTogaW5pdGlhbGl6aW5nIG1pcnJvciBmb3IganVuayIgLi4uCisJCXJldHVybiB1bmRlZiBpZiAkciA9PSAwOworCQlteSAkc3ZtID0gJHNlbGYtPnN2bTsKKwkJaWYgKCR1dWlkIG5lICRzdm0tPnt1dWlkfSkgeworCQkJZGllICJVVUlEIG1pc21hdGNoIG9uIFNWTSBwYXRoOlxuIiwKKwkJCSAgICAiZXhwZWN0ZWQ6ICRzdm0tPnt1dWlkfVxuIiwKKwkJCSAgICAiICAgICBnb3Q6ICR1dWlkXG4iOworCQl9CisJCW15ICRmdWxsX3VybCA9ICRzZWxmLT5mdWxsX3VybDsKKwkJJGZ1bGxfdXJsID1+IHMjXlxRJHN2bS0+e3JlcGxhY2V9XEUoL3wkKSMkc3ZtLT57c291cmNlfSQxIyBvcgorCQkgICAgICAgICAgICAgZGllICJGYWlsZWQgdG8gcmVwbGFjZSAnJHN2bS0+e3JlcGxhY2V9JyB3aXRoICIsCisJCSAgICAgICAgICAgICAgICAgIickc3ZtLT57c291cmNlfScgaW4gJGZ1bGxfdXJsXG4iOworCQkjIHRocm93IGF3YXkgdXNlcm5hbWUgZm9yIHN0b3JpbmcgaW4gcmVjb3JkcworCQlyZW1vdmVfdXNlcm5hbWUoJGZ1bGxfdXJsKTsKKwkJJGxvZ19lbnRyeXttZXRhZGF0YX0gPSAiJGZ1bGxfdXJsXEAkciAkdXVpZCI7CisJCSRsb2dfZW50cnl7c3ZtX3JldmlzaW9ufSA9ICRyOworCQkkZW1haWwgfHw9ICIkYXV0aG9yXEAkdXVpZCI7CisJCSRjb21taXRfZW1haWwgfHw9ICIkYXV0aG9yXEAkdXVpZCI7CisJfSBlbHNpZiAoJHNlbGYtPnVzZV9zdm5zeW5jX3Byb3BzKSB7CisJCW15ICRmdWxsX3VybCA9IGNhbm9uaWNhbGl6ZV91cmwoCisJCQlhZGRfcGF0aF90b191cmwoICRzZWxmLT5zdm5zeW5jLT57dXJsfSwgJHNlbGYtPnBhdGggKQorCQkpOworCQlyZW1vdmVfdXNlcm5hbWUoJGZ1bGxfdXJsKTsKKwkJbXkgJHV1aWQgPSAkc2VsZi0+c3Zuc3luYy0+e3V1aWR9OworCQkkbG9nX2VudHJ5e21ldGFkYXRhfSA9ICIkZnVsbF91cmxcQCRyZXYgJHV1aWQiOworCQkkZW1haWwgfHw9ICIkYXV0aG9yXEAkdXVpZCI7CisJCSRjb21taXRfZW1haWwgfHw9ICIkYXV0aG9yXEAkdXVpZCI7CisJfSBlbHNlIHsKKwkJbXkgJHVybCA9ICRzZWxmLT5tZXRhZGF0YV91cmw7CisJCXJlbW92ZV91c2VybmFtZSgkdXJsKTsKKwkJbXkgJHV1aWQgPSAkc2VsZi0+cmV3cml0ZV91dWlkIHx8ICRzZWxmLT5yYS0+Z2V0X3V1aWQ7CisJCSRsb2dfZW50cnl7bWV0YWRhdGF9ID0gIiR1cmxcQCRyZXYgIiAuICR1dWlkOworCQkkZW1haWwgfHw9ICIkYXV0aG9yXEAiIC4gJHV1aWQ7CisJCSRjb21taXRfZW1haWwgfHw9ICIkYXV0aG9yXEAiIC4gJHV1aWQ7CisJfQorCSRsb2dfZW50cnl7bmFtZX0gPSAkbmFtZTsKKwkkbG9nX2VudHJ5e2VtYWlsfSA9ICRlbWFpbDsKKwkkbG9nX2VudHJ5e2NvbW1pdF9uYW1lfSA9ICRjb21taXRfbmFtZTsKKwkkbG9nX2VudHJ5e2NvbW1pdF9lbWFpbH0gPSAkY29tbWl0X2VtYWlsOworCVwlbG9nX2VudHJ5OworfQorCitzdWIgZmV0Y2ggeworCW15ICgkc2VsZiwgJG1pbl9yZXYsICRtYXhfcmV2LCBAcGFyZW50cykgPSBAXzsKKwlteSAoJGxhc3RfcmV2LCAkbGFzdF9jb21taXQpID0gJHNlbGYtPmxhc3RfcmV2X2NvbW1pdDsKKwlteSAoJGJhc2UsICRoZWFkKSA9ICRzZWxmLT5nZXRfZmV0Y2hfcmFuZ2UoJG1pbl9yZXYsICRtYXhfcmV2KTsKKwkkc2VsZi0+cmEtPmdzX2ZldGNoX2xvb3BfY29tbW9uKCRiYXNlLCAkaGVhZCwgWyRzZWxmXSk7Cit9CisKK3N1YiBzZXRfdHJlZV9jYiB7CisJbXkgKCRzZWxmLCAkbG9nX2VudHJ5LCAkdHJlZSwgJHJldiwgJGRhdGUsICRhdXRob3IpID0gQF87CisJJHNlbGYtPntpbmplY3RfcGFyZW50c30gPSB7ICRyZXYgPT4gJHRyZWUgfTsKKwkkc2VsZi0+ZmV0Y2godW5kZWYsIHVuZGVmKTsKK30KKworc3ViIHNldF90cmVlIHsKKwlteSAoJHNlbGYsICR0cmVlKSA9IChzaGlmdCwgc2hpZnQpOworCW15ICRsb2dfZW50cnkgPSA6OmdldF9jb21taXRfZW50cnkoJHRyZWUpOworCXVubGVzcyAoJHNlbGYtPntsYXN0X3Jldn0pIHsKKwkJZmF0YWwoIk11c3QgaGF2ZSBhbiBleGlzdGluZyByZXZpc2lvbiB0byBjb21taXQiKTsKKwl9CisJbXkgJWVkX29wdHMgPSAoIHIgPT4gJHNlbGYtPntsYXN0X3Jldn0sCisJICAgICAgICAgICAgICAgIGxvZyA9PiAkbG9nX2VudHJ5LT57bG9nfSwKKwkgICAgICAgICAgICAgICAgcmEgPT4gJHNlbGYtPnJhLAorCSAgICAgICAgICAgICAgICB0cmVlX2EgPT4gJHNlbGYtPntsYXN0X2NvbW1pdH0sCisJICAgICAgICAgICAgICAgIHRyZWVfYiA9PiAkdHJlZSwKKwkgICAgICAgICAgICAgICAgZWRpdG9yX2NiID0+IHN1YiB7CisJCQkgICAgICAgJHNlbGYtPnNldF90cmVlX2NiKCRsb2dfZW50cnksICR0cmVlLCBAXykgfSwKKwkgICAgICAgICAgICAgICAgc3ZuX3BhdGggPT4gJHNlbGYtPnBhdGggKTsKKwlpZiAoIUdpdDo6U1ZOOjpFZGl0b3ItPm5ldyhcJWVkX29wdHMpLT5hcHBseV9kaWZmKSB7CisJCXByaW50ICJObyBjaGFuZ2VzXG5yJHNlbGYtPntsYXN0X3Jldn0gPSAkdHJlZVxuIjsKKwl9Cit9CisKK3N1YiByZWJ1aWxkX2Zyb21fcmV2X2RiIHsKKwlteSAoJHNlbGYsICRwYXRoKSA9IEBfOworCW15ICRyID0gLTE7CisJb3BlbiBteSAkZmgsICc8JywgJHBhdGggb3IgY3JvYWsgIm9wZW46ICQhIjsKKwliaW5tb2RlICRmaCBvciBjcm9hayAiYmlubW9kZTogJCEiOworCXdoaWxlICg8JGZoPikgeworCQlsZW5ndGgoJF8pID09IDQxIG9yIGNyb2FrICJpbmNvbnNpc3RlbnQgc2l6ZSBpbiAoJF8pICE9IDQxIjsKKwkJY2hvbXAoJF8pOworCQkrKyRyOworCQluZXh0IGlmICRfIGVxICgnMCcgeCA0MCk7CisJCSRzZWxmLT5yZXZfbWFwX3NldCgkciwgJF8pOworCQlwcmludCAiciRyID0gJF9cbiI7CisJfQorCWNsb3NlICRmaCBvciBjcm9hayAiY2xvc2U6ICQhIjsKKwl1bmxpbmsgJHBhdGggb3IgY3JvYWsgInVubGluazogJCEiOworfQorCitzdWIgcmVidWlsZCB7CisJbXkgKCRzZWxmKSA9IEBfOworCW15ICRtYXBfcGF0aCA9ICRzZWxmLT5tYXBfcGF0aDsKKwlteSAkcGFydGlhbCA9ICgtZSAkbWFwX3BhdGggJiYgISAteiAkbWFwX3BhdGgpOworCXJldHVybiB1bmxlc3MgOjp2ZXJpZnlfcmVmKCRzZWxmLT5yZWZuYW1lLideMCcpOworCWlmICghJHBhcnRpYWwgJiYgKCRzZWxmLT51c2Vfc3ZtX3Byb3BzIHx8ICRzZWxmLT5ub19tZXRhZGF0YSkpIHsKKwkJbXkgJHJldl9kYiA9ICRzZWxmLT5yZXZfZGJfcGF0aDsKKwkJJHNlbGYtPnJlYnVpbGRfZnJvbV9yZXZfZGIoJHJldl9kYik7CisJCWlmICgkc2VsZi0+dXNlX3N2bV9wcm9wcykgeworCQkJbXkgJHN2bV9yZXZfZGIgPSAkc2VsZi0+cmV2X2RiX3BhdGgoJHNlbGYtPnN2bV91dWlkKTsKKwkJCSRzZWxmLT5yZWJ1aWxkX2Zyb21fcmV2X2RiKCRzdm1fcmV2X2RiKTsKKwkJfQorCQkkc2VsZi0+dW5saW5rX3Jldl9kYl9zeW1saW5rOworCQlyZXR1cm47CisJfQorCXByaW50ICJSZWJ1aWxkaW5nICRtYXBfcGF0aCAuLi5cbiIgaWYgKCEkcGFydGlhbCk7CisJbXkgKCRiYXNlX3JldiwgJGhlYWQpID0gKCRwYXJ0aWFsID8gJHNlbGYtPnJldl9tYXBfbWF4X25vcmVidWlsZCgxKSA6CisJCSh1bmRlZiwgdW5kZWYpKTsKKwlteSAoJGxvZywgJGN0eCkgPQorCSAgICBjb21tYW5kX291dHB1dF9waXBlKHF3L3Jldi1saXN0IC0tcHJldHR5PXJhdyAtLXJldmVyc2UvLAorCQkJCSgkaGVhZCA/ICIkaGVhZC4uIiA6ICIiKSAuICRzZWxmLT5yZWZuYW1lLAorCQkJCSctLScpOworCW15ICRtZXRhZGF0YV91cmwgPSAkc2VsZi0+bWV0YWRhdGFfdXJsOworCXJlbW92ZV91c2VybmFtZSgkbWV0YWRhdGFfdXJsKTsKKwlteSAkc3ZuX3V1aWQgPSAkc2VsZi0+cmV3cml0ZV91dWlkIHx8ICRzZWxmLT5yYV91dWlkOworCW15ICRjOworCXdoaWxlICg8JGxvZz4pIHsKKwkJaWYgKCBte15jb21taXQgKCQ6OnNoYTEpJH0gKSB7CisJCQkkYyA9ICQxOworCQkJbmV4dDsKKwkJfQorCQluZXh0IHVubGVzcyBze15ccyooZ2l0LXN2bi1pZDopfXskMX07CisJCW15ICgkdXJsLCAkcmV2LCAkdXVpZCkgPSA6OmV4dHJhY3RfbWV0YWRhdGEoJF8pOworCQlyZW1vdmVfdXNlcm5hbWUoJHVybCk7CisKKwkJIyBpZ25vcmUgbWVyZ2VzIChmcm9tIHNldC10cmVlKQorCQluZXh0IGlmICghZGVmaW5lZCAkcmV2IHx8ICEkdXVpZCk7CisKKwkJIyBpZiB3ZSBtZXJnZWQgb3Igb3RoZXJ3aXNlIHN0YXJ0ZWQgZWxzZXdoZXJlLCB0aGlzIGlzCisJCSMgaG93IHdlIGJyZWFrIG91dCBvZiBpdAorCQlpZiAoKCR1dWlkIG5lICRzdm5fdXVpZCkgfHwKKwkJICAgICgkbWV0YWRhdGFfdXJsICYmICR1cmwgJiYgKCR1cmwgbmUgJG1ldGFkYXRhX3VybCkpKSB7CisJCQluZXh0OworCQl9CisJCWlmICgkcGFydGlhbCAmJiAkaGVhZCkgeworCQkJcHJpbnQgIlBhcnRpYWwtcmVidWlsZGluZyAkbWFwX3BhdGggLi4uXG4iOworCQkJcHJpbnQgIkN1cnJlbnRseSBhdCAkYmFzZV9yZXYgPSAkaGVhZFxuIjsKKwkJCSRoZWFkID0gdW5kZWY7CisJCX0KKworCQkkc2VsZi0+cmV2X21hcF9zZXQoJHJldiwgJGMpOworCQlwcmludCAiciRyZXYgPSAkY1xuIjsKKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRsb2csICRjdHgpOworCXByaW50ICJEb25lIHJlYnVpbGRpbmcgJG1hcF9wYXRoXG4iIGlmICghJHBhcnRpYWwgfHwgISRoZWFkKTsKKwlteSAkcmV2X2RiX3BhdGggPSAkc2VsZi0+cmV2X2RiX3BhdGg7CisJaWYgKC1mICRzZWxmLT5yZXZfZGJfcGF0aCkgeworCQl1bmxpbmsgJHNlbGYtPnJldl9kYl9wYXRoIG9yIGNyb2FrICJ1bmxpbms6ICQhIjsKKwl9CisJJHNlbGYtPnVubGlua19yZXZfZGJfc3ltbGluazsKK30KKworIyByZXZfbWFwOgorIyBUaWU6OkZpbGUgc2VlbXMgdG8gYmUgcHJvbmUgdG8gb2Zmc2V0IGVycm9ycyBpZiByZXZpc2lvbnMgZ2V0IHNwYXJzZSwKKyMgaXQncyBub3QgdGhhdCBmYXN0LCBlaXRoZXIuICBUaWU6OkZpbGUgaXMgYWxzbyBub3QgaW4gUGVybCA1LjYuICBTbworIyBvbmUgb2YgbXkgZmF2b3JpdGUgbW9kdWxlcyBpcyBvdXQgOjwgIE5leHQgdXAgd291bGQgYmUgb25lIG9mIHRoZSBEQk0KKyMgbW9kdWxlcywgYnV0IEknbSBub3Qgc3VyZSB3aGljaCBpcyBtb3N0IHBvcnRhYmxlLi4uCisjCisjIFRoaXMgaXMgdGhlIHJlcGxhY2VtZW50IGZvciB0aGUgcmV2X2RiIGZvcm1hdCwgd2hpY2ggd2FzIHRvbyBiaWcKKyMgYW5kIGluZWZmaWNpZW50IGZvciBsYXJnZSByZXBvc2l0b3JpZXMgd2l0aCBhIGxvdCBvZiBzcGFyc2UgaGlzdG9yeQorIyAobWFpbmx5IHRhZ3MpCisjCisjIFRoZSBmb3JtYXQgaXMgdGhpczoKKyMgICAtIDI0IGJ5dGVzIGZvciBldmVyeSByZWNvcmQsCisjICAgICAqIDQgYnl0ZXMgZm9yIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGluZyBhbiBTVk4gcmV2aXNpb24gbnVtYmVyCisjICAgICAqIDIwIGJ5dGVzIHJlcHJlc2VudGluZyB0aGUgc2hhMSBvZiBhIGdpdCBjb21taXQKKyMgICAtIE5vIGVtcHR5IHBhZGRpbmcgcmVjb3JkcyBsaWtlIHRoZSBvbGQgZm9ybWF0CisjICAgICAoZXhjZXB0IHRoZSBsYXN0IHJlY29yZCwgd2hpY2ggY2FuIGJlIG92ZXJ3cml0dGVuKQorIyAgIC0gbmV3IHJlY29yZHMgYXJlIHdyaXR0ZW4gYXBwZW5kLW9ubHkgc2luY2UgU1ZOIHJldmlzaW9uIG51bWJlcnMKKyMgICAgIGluY3JlYXNlIG1vbm90b25pY2FsbHkKKyMgICAtIGxvb2t1cHMgb24gU1ZOIHJldmlzaW9uIG51bWJlciBhcmUgZG9uZSB2aWEgYSBiaW5hcnkgc2VhcmNoCisjICAgLSBQaXBpbmcgdGhlIGZpbGUgdG8geHhkIC1jMjQgaXMgYSBnb29kIHdheSBvZiBkdW1waW5nIGl0IGZvcgorIyAgICAgdmlld2luZyBvciBlZGl0aW5nIChwaXBlZCBiYWNrIHRocm91Z2ggeHhkIC1yKSwgc2hvdWxkIHRoZSBuZWVkCisjICAgICBldmVyIGFyaXNlLgorIyAgIC0gVGhlIGxhc3QgcmVjb3JkIGNhbiBiZSBwYWRkaW5nIHJldmlzaW9uIHdpdGggYW4gYWxsLXplcm8gc2hhMQorIyAgICAgVGhpcyBpcyB1c2VkIHRvIG9wdGltaXplIGZldGNoIHBlcmZvcm1hbmNlIHdoZW4gdXNpbmcgbXVsdGlwbGUKKyMgICAgICJmZXRjaCIgZGlyZWN0aXZlcyBpbiAuZ2l0L2NvbmZpZworIworIyBUaGVzZSBmaWxlcyBhcmUgZGlzcG9zYWJsZSB1bmxlc3Mgbm9NZXRhZGF0YSBvciB1c2VTdm1Qcm9wcyBpcyBzZXQKKworc3ViIF9yZXZfbWFwX3NldCB7CisJbXkgKCRmaCwgJHJldiwgJGNvbW1pdCkgPSBAXzsKKworCWJpbm1vZGUgJGZoIG9yIGNyb2FrICJiaW5tb2RlOiAkISI7CisJbXkgJHNpemUgPSAoc3RhdCgkZmgpKVs3XTsKKwkoJHNpemUgJSAyNCkgPT0gMCBvciBjcm9hayAiaW5jb25zaXN0ZW50IHNpemU6ICRzaXplIjsKKworCW15ICR3cl9vZmZzZXQgPSAwOworCWlmICgkc2l6ZSA+IDApIHsKKwkJc3lzc2VlaygkZmgsIC0yNCwgU0VFS19FTkQpIG9yIGNyb2FrICJzZWVrOiAkISI7CisJCW15ICRyZWFkID0gc3lzcmVhZCgkZmgsIG15ICRidWYsIDI0KSBvciBjcm9hayAicmVhZDogJCEiOworCQkkcmVhZCA9PSAyNCBvciBjcm9hayAicmVhZCBvbmx5ICRyZWFkIGJ5dGVzICghPSAyNCkiOworCQlteSAoJGxhc3RfcmV2LCAkbGFzdF9jb21taXQpID0gdW5wYWNrKHJldl9tYXBfZm10LCAkYnVmKTsKKwkJaWYgKCRsYXN0X2NvbW1pdCBlcSAoJzAnIHg0MCkpIHsKKwkJCWlmICgkc2l6ZSA+PSA0OCkgeworCQkJCXN5c3NlZWsoJGZoLCAtNDgsIFNFRUtfRU5EKSBvciBjcm9hayAic2VlazogJCEiOworCQkJCSRyZWFkID0gc3lzcmVhZCgkZmgsICRidWYsIDI0KSBvcgorCQkJCSAgICBjcm9hayAicmVhZDogJCEiOworCQkJCSRyZWFkID09IDI0IG9yCisJCQkJICAgIGNyb2FrICJyZWFkIG9ubHkgJHJlYWQgYnl0ZXMgKCE9IDI0KSI7CisJCQkJKCRsYXN0X3JldiwgJGxhc3RfY29tbWl0KSA9CisJCQkJICAgIHVucGFjayhyZXZfbWFwX2ZtdCwgJGJ1Zik7CisJCQkJaWYgKCRsYXN0X2NvbW1pdCBlcSAoJzAnIHg0MCkpIHsKKwkJCQkJY3JvYWsgImluY29uc2lzdGVudCAucmV2X21hcFxuIjsKKwkJCQl9CisJCQl9CisJCQlpZiAoJGxhc3RfcmV2ID49ICRyZXYpIHsKKwkJCQljcm9hayAibGFzdF9yZXYgaXMgaGlnaGVyITogJGxhc3RfcmV2ID49ICRyZXYiOworCQkJfQorCQkJJHdyX29mZnNldCA9IC0yNDsKKwkJfQorCX0KKwlzeXNzZWVrKCRmaCwgJHdyX29mZnNldCwgU0VFS19FTkQpIG9yIGNyb2FrICJzZWVrOiAkISI7CisJc3lzd3JpdGUoJGZoLCBwYWNrKHJldl9tYXBfZm10LCAkcmV2LCAkY29tbWl0KSwgMjQpID09IDI0IG9yCisJICBjcm9hayAid3JpdGU6ICQhIjsKK30KKworc3ViIF9yZXZfbWFwX3Jlc2V0IHsKKwlteSAoJGZoLCAkcmV2LCAkY29tbWl0KSA9IEBfOworCW15ICRjID0gX3Jldl9tYXBfZ2V0KCRmaCwgJHJldik7CisJJGMgZXEgJGNvbW1pdCBvciBkaWUgIl9yZXZfbWFwX3Jlc2V0KEBfKSBjb21taXQgJGMgZG9lcyBub3QgbWF0Y2ghXG4iOworCW15ICRvZmZzZXQgPSBzeXNzZWVrKCRmaCwgMCwgU0VFS19DVVIpIG9yIGNyb2FrICJzZWVrOiAkISI7CisJdHJ1bmNhdGUgJGZoLCAkb2Zmc2V0IG9yIGNyb2FrICJ0cnVuY2F0ZTogJCEiOworfQorCitzdWIgbWtmaWxlIHsKKwlteSAoJHBhdGgpID0gQF87CisJdW5sZXNzICgtZSAkcGF0aCkgeworCQlteSAoJGRpciwgJGJhc2UpID0gKCRwYXRoID1+IG0jXiguKj8pLz8oW14vXSspJCMpOworCQlta3BhdGgoWyRkaXJdKSB1bmxlc3MgLWQgJGRpcjsKKwkJb3BlbiBteSAkZmgsICc+PicsICRwYXRoIG9yIGRpZSAiQ291bGRuJ3QgY3JlYXRlICRwYXRoOiAkIVxuIjsKKwkJY2xvc2UgJGZoIG9yIGRpZSAiQ291bGRuJ3QgY2xvc2UgKGNyZWF0ZSkgJHBhdGg6ICQhXG4iOworCX0KK30KKworc3ViIHJldl9tYXBfc2V0IHsKKwlteSAoJHNlbGYsICRyZXYsICRjb21taXQsICR1cGRhdGVfcmVmLCAkdXVpZCkgPSBAXzsKKwlkZWZpbmVkICRjb21taXQgb3IgZGllICJtaXNzaW5nIGFyZzNcbiI7CisJbGVuZ3RoICRjb21taXQgPT0gNDAgb3IgZGllICJhcmczIG11c3QgYmUgYSBmdWxsIFNIQTEgaGV4c3VtXG4iOworCW15ICRkYiA9ICRzZWxmLT5tYXBfcGF0aCgkdXVpZCk7CisJbXkgJGRiX2xvY2sgPSAiJGRiLmxvY2siOworCW15ICRzaWdtYXNrOworCSR1cGRhdGVfcmVmIHx8PSAwOworCWlmICgkdXBkYXRlX3JlZikgeworCQkkc2lnbWFzayA9IFBPU0lYOjpTaWdTZXQtPm5ldygpOworCQlteSAkc2lnbmV3ID0gUE9TSVg6OlNpZ1NldC0+bmV3KFNJR0lOVCwgU0lHSFVQLCBTSUdURVJNLAorCQkJU0lHQUxSTSwgU0lHVVNSMSwgU0lHVVNSMik7CisJCXNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJHNpZ25ldywgJHNpZ21hc2spIG9yCisJCQljcm9hayAiQ2FuJ3QgYmxvY2sgc2lnbmFsczogJCEiOworCX0KKwlta2ZpbGUoJGRiKTsKKworCSRMT0NLRklMRVN7JGRiX2xvY2t9ID0gMTsKKwlteSAkc3luYzsKKwkjIGJvdGggb2YgdGhlc2Ugb3B0aW9ucyBtYWtlIG91ciAucmV2X2RiIGZpbGUgdmVyeSwgdmVyeSBpbXBvcnRhbnQKKwkjIGFuZCB3ZSBjYW4ndCBhZmZvcmQgdG8gbG9zZSBpdCBiZWNhdXNlIHJlYnVpbGQoKSB3b24ndCB3b3JrCisJaWYgKCRzZWxmLT51c2Vfc3ZtX3Byb3BzIHx8ICRzZWxmLT5ub19tZXRhZGF0YSkgeworCQkkc3luYyA9IDE7CisJCWNvcHkoJGRiLCAkZGJfbG9jaykgb3IgZGllICJyZXZfbWFwX3NldChAXyk6ICIsCisJCQkJCSAgICJGYWlsZWQgdG8gY29weTogIiwKKwkJCQkJICAgIiRkYiA9PiAkZGJfbG9jayAoJCEpXG4iOworCX0gZWxzZSB7CisJCXJlbmFtZSAkZGIsICRkYl9sb2NrIG9yIGRpZSAicmV2X21hcF9zZXQoQF8pOiAiLAorCQkJCQkgICAgIkZhaWxlZCB0byByZW5hbWU6ICIsCisJCQkJCSAgICAiJGRiID0+ICRkYl9sb2NrICgkISlcbiI7CisJfQorCisJc3lzb3BlbihteSAkZmgsICRkYl9sb2NrLCBPX1JEV1IgfCBPX0NSRUFUKQorCSAgICAgb3IgY3JvYWsgIkNvdWxkbid0IG9wZW4gJGRiX2xvY2s6ICQhXG4iOworCWlmICgkdXBkYXRlX3JlZiBlcSAncmVzZXQnKSB7CisJCWNsZWFyX21lbW9pemVkX21lcmdlaW5mb19jYWNoZXMoKTsKKwkJX3Jldl9tYXBfcmVzZXQoJGZoLCAkcmV2LCAkY29tbWl0KTsKKwl9IGVsc2UgeworCQlfcmV2X21hcF9zZXQoJGZoLCAkcmV2LCAkY29tbWl0KTsKKwl9CisKKwlpZiAoJHN5bmMpIHsKKwkJJGZoLT5mbHVzaCBvciBkaWUgIkNvdWxkbid0IGZsdXNoICRkYl9sb2NrOiAkIVxuIjsKKwkJJGZoLT5zeW5jIG9yIGRpZSAiQ291bGRuJ3Qgc3luYyAkZGJfbG9jazogJCFcbiI7CisJfQorCWNsb3NlICRmaCBvciBjcm9hayAkITsKKwlpZiAoJHVwZGF0ZV9yZWYpIHsKKwkJJF9oZWFkID0gJHNlbGY7CisJCW15ICRub3RlID0gIiI7CisJCSRub3RlID0gIiAoJHVwZGF0ZV9yZWYpIiBpZiAoJHVwZGF0ZV9yZWYgIX4gL15cZCokLyk7CisJCWNvbW1hbmRfbm9pc3koJ3VwZGF0ZS1yZWYnLCAnLW0nLCAiciRyZXYkbm90ZSIsCisJCSAgICAgICAgICAgICAgJHNlbGYtPnJlZm5hbWUsICRjb21taXQpOworCX0KKwlyZW5hbWUgJGRiX2xvY2ssICRkYiBvciBkaWUgInJldl9tYXBfc2V0KEBfKTogIiwgIkZhaWxlZCB0byByZW5hbWU6ICIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkZGJfbG9jayA9PiAkZGIgKCQhKVxuIjsKKwlkZWxldGUgJExPQ0tGSUxFU3skZGJfbG9ja307CisJaWYgKCR1cGRhdGVfcmVmKSB7CisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAkc2lnbWFzaykgb3IKKwkJCWNyb2FrICJDYW4ndCByZXN0b3JlIHNpZ25hbCBtYXNrOiAkISI7CisJfQorfQorCisjIElmIHdhbnRfY29tbWl0LCB0aGlzIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIChyZXYsIGNvbW1pdCkgd2hlcmUKKyMgY29tbWl0IF9tdXN0XyBiZSBhIHZhbGlkIGNvbW1pdCBpbiB0aGUgYXJjaGl2ZS4KKyMgT3RoZXJ3aXNlLCBpdCdsbCByZXR1cm4gdGhlIG1heCByZXZpc2lvbiAod2hldGhlciBvciBub3QgdGhlCisjIGNvbW1pdCBpcyB2YWxpZCBvciBqdXN0IGEgMHg0MCBwbGFjZWhvbGRlcikuCitzdWIgcmV2X21hcF9tYXggeworCW15ICgkc2VsZiwgJHdhbnRfY29tbWl0KSA9IEBfOworCSRzZWxmLT5yZWJ1aWxkOworCW15ICgkciwgJGMpID0gJHNlbGYtPnJldl9tYXBfbWF4X25vcmVidWlsZCgkd2FudF9jb21taXQpOworCSR3YW50X2NvbW1pdCA/ICgkciwgJGMpIDogJHI7Cit9CisKK3N1YiByZXZfbWFwX21heF9ub3JlYnVpbGQgeworCW15ICgkc2VsZiwgJHdhbnRfY29tbWl0KSA9IEBfOworCW15ICRtYXBfcGF0aCA9ICRzZWxmLT5tYXBfcGF0aDsKKwlzdGF0ICRtYXBfcGF0aCBvciByZXR1cm4gJHdhbnRfY29tbWl0ID8gKDAsIHVuZGVmKSA6IDA7CisJc3lzb3BlbihteSAkZmgsICRtYXBfcGF0aCwgT19SRE9OTFkpIG9yIGNyb2FrICJvcGVuOiAkISI7CisJYmlubW9kZSAkZmggb3IgY3JvYWsgImJpbm1vZGU6ICQhIjsKKwlteSAkc2l6ZSA9IChzdGF0KCRmaCkpWzddOworCSgkc2l6ZSAlIDI0KSA9PSAwIG9yIGNyb2FrICJpbmNvbnNpc3RlbnQgc2l6ZTogJHNpemUiOworCisJaWYgKCRzaXplID09IDApIHsKKwkJY2xvc2UgJGZoIG9yIGNyb2FrICJjbG9zZTogJCEiOworCQlyZXR1cm4gJHdhbnRfY29tbWl0ID8gKDAsIHVuZGVmKSA6IDA7CisJfQorCisJc3lzc2VlaygkZmgsIC0yNCwgU0VFS19FTkQpIG9yIGNyb2FrICJzZWVrOiAkISI7CisJc3lzcmVhZCgkZmgsIG15ICRidWYsIDI0KSA9PSAyNCBvciBjcm9hayAicmVhZDogJCEiOworCW15ICgkciwgJGMpID0gdW5wYWNrKHJldl9tYXBfZm10LCAkYnVmKTsKKwlpZiAoJHdhbnRfY29tbWl0ICYmICRjIGVxICgnMCcgeDQwKSkgeworCQlpZiAoJHNpemUgPCA0OCkgeworCQkJcmV0dXJuICR3YW50X2NvbW1pdCA/ICgwLCB1bmRlZikgOiAwOworCQl9CisJCXN5c3NlZWsoJGZoLCAtNDgsIFNFRUtfRU5EKSBvciBjcm9hayAic2VlazogJCEiOworCQlzeXNyZWFkKCRmaCwgJGJ1ZiwgMjQpID09IDI0IG9yIGNyb2FrICJyZWFkOiAkISI7CisJCSgkciwgJGMpID0gdW5wYWNrKHJldl9tYXBfZm10LCAkYnVmKTsKKwkJaWYgKCRjIGVxICgnMCd4NDApKSB7CisJCQljcm9hayAiUGVudWx0aW1hdGUgcmVjb3JkIGlzIGFsbC16ZXJvZXMgaW4gJG1hcF9wYXRoIjsKKwkJfQorCX0KKwljbG9zZSAkZmggb3IgY3JvYWsgImNsb3NlOiAkISI7CisJJHdhbnRfY29tbWl0ID8gKCRyLCAkYykgOiAkcjsKK30KKworc3ViIHJldl9tYXBfZ2V0IHsKKwlteSAoJHNlbGYsICRyZXYsICR1dWlkKSA9IEBfOworCW15ICRtYXBfcGF0aCA9ICRzZWxmLT5tYXBfcGF0aCgkdXVpZCk7CisJcmV0dXJuIHVuZGVmIHVubGVzcyAtZSAkbWFwX3BhdGg7CisKKwlzeXNvcGVuKG15ICRmaCwgJG1hcF9wYXRoLCBPX1JET05MWSkgb3IgY3JvYWsgIm9wZW46ICQhIjsKKwlteSAkYyA9IF9yZXZfbWFwX2dldCgkZmgsICRyZXYpOworCWNsb3NlKCRmaCkgb3IgY3JvYWsgImNsb3NlOiAkISI7CisJJGMKK30KKworc3ViIF9yZXZfbWFwX2dldCB7CisJbXkgKCRmaCwgJHJldikgPSBAXzsKKworCWJpbm1vZGUgJGZoIG9yIGNyb2FrICJiaW5tb2RlOiAkISI7CisJbXkgJHNpemUgPSAoc3RhdCgkZmgpKVs3XTsKKwkoJHNpemUgJSAyNCkgPT0gMCBvciBjcm9hayAiaW5jb25zaXN0ZW50IHNpemU6ICRzaXplIjsKKworCWlmICgkc2l6ZSA9PSAwKSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisKKwlteSAoJGwsICR1KSA9ICgwLCAkc2l6ZSAtIDI0KTsKKwlteSAoJHIsICRjLCAkYnVmKTsKKworCXdoaWxlICgkbCA8PSAkdSkgeworCQlteSAkaSA9IGludCgoJGwvMjQgKyAkdS8yNCkgLyAyKSAqIDI0OworCQlzeXNzZWVrKCRmaCwgJGksIFNFRUtfU0VUKSBvciBjcm9hayAic2VlazogJCEiOworCQlzeXNyZWFkKCRmaCwgbXkgJGJ1ZiwgMjQpID09IDI0IG9yIGNyb2FrICJyZWFkOiAkISI7CisJCW15ICgkciwgJGMpID0gdW5wYWNrKHJldl9tYXBfZm10LCAkYnVmKTsKKworCQlpZiAoJHIgPCAkcmV2KSB7CisJCQkkbCA9ICRpICsgMjQ7CisJCX0gZWxzaWYgKCRyID4gJHJldikgeworCQkJJHUgPSAkaSAtIDI0OworCQl9IGVsc2UgeyAjICRyID09ICRyZXYKKwkJCXJldHVybiAkYyBlcSAoJzAnIHggNDApID8gdW5kZWYgOiAkYzsKKwkJfQorCX0KKwl1bmRlZjsKK30KKworIyBGaW5kcyB0aGUgZmlyc3Qgc3ZuIHJldmlzaW9uIHRoYXQgZXhpc3RzIG9uIChpZiAkZXFfb2sgaXMgdHJ1ZSkgb3IKKyMgYmVmb3JlICRyZXYgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4gIEl0IHdpbGwgbm90IHNlYXJjaCBhbnkgbG93ZXIKKyMgdGhhbiAkbWluX3Jldi4gIFJldHVybnMgdGhlIGdpdCBjb21taXQgaGFzaCBhbmQgc3ZuIHJldmlzaW9uIG51bWJlcgorIyBpZiBmb3VuZCwgZWxzZSAodW5kZWYsIHVuZGVmKS4KK3N1YiBmaW5kX3Jldl9iZWZvcmUgeworCW15ICgkc2VsZiwgJHJldiwgJGVxX29rLCAkbWluX3JldikgPSBAXzsKKwktLSRyZXYgdW5sZXNzICRlcV9vazsKKwkkbWluX3JldiB8fD0gMTsKKwlteSAkbWF4X3JldiA9ICRzZWxmLT5yZXZfbWFwX21heDsKKwkkcmV2ID0gJG1heF9yZXYgaWYgKCRyZXYgPiAkbWF4X3Jldik7CisJd2hpbGUgKCRyZXYgPj0gJG1pbl9yZXYpIHsKKwkJaWYgKG15ICRjID0gJHNlbGYtPnJldl9tYXBfZ2V0KCRyZXYpKSB7CisJCQlyZXR1cm4gKCRyZXYsICRjKTsKKwkJfQorCQktLSRyZXY7CisJfQorCXJldHVybiAodW5kZWYsIHVuZGVmKTsKK30KKworIyBGaW5kcyB0aGUgZmlyc3Qgc3ZuIHJldmlzaW9uIHRoYXQgZXhpc3RzIG9uIChpZiAkZXFfb2sgaXMgdHJ1ZSkgb3IKKyMgYWZ0ZXIgJHJldiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiAgSXQgd2lsbCBub3Qgc2VhcmNoIGFueSBoaWdoZXIKKyMgdGhhbiAkbWF4X3Jldi4gIFJldHVybnMgdGhlIGdpdCBjb21taXQgaGFzaCBhbmQgc3ZuIHJldmlzaW9uIG51bWJlcgorIyBpZiBmb3VuZCwgZWxzZSAodW5kZWYsIHVuZGVmKS4KK3N1YiBmaW5kX3Jldl9hZnRlciB7CisJbXkgKCRzZWxmLCAkcmV2LCAkZXFfb2ssICRtYXhfcmV2KSA9IEBfOworCSsrJHJldiB1bmxlc3MgJGVxX29rOworCSRtYXhfcmV2IHx8PSAkc2VsZi0+cmV2X21hcF9tYXg7CisJd2hpbGUgKCRyZXYgPD0gJG1heF9yZXYpIHsKKwkJaWYgKG15ICRjID0gJHNlbGYtPnJldl9tYXBfZ2V0KCRyZXYpKSB7CisJCQlyZXR1cm4gKCRyZXYsICRjKTsKKwkJfQorCQkrKyRyZXY7CisJfQorCXJldHVybiAodW5kZWYsIHVuZGVmKTsKK30KKworc3ViIF9uZXcgeworCW15ICgkY2xhc3MsICRyZXBvX2lkLCAkcmVmX2lkLCAkcGF0aCkgPSBAXzsKKwl1bmxlc3MgKGRlZmluZWQgJHJlcG9faWQgJiYgbGVuZ3RoICRyZXBvX2lkKSB7CisJCSRyZXBvX2lkID0gJGRlZmF1bHRfcmVwb19pZDsKKwl9CisJdW5sZXNzIChkZWZpbmVkICRyZWZfaWQgJiYgbGVuZ3RoICRyZWZfaWQpIHsKKwkJIyBBY2Nlc3MgdGhlIHByZWZpeCBvcHRpb24gZnJvbSB0aGUgZ2l0LXN2biBtYWluIHByb2dyYW0gaWYgaXQncyBsb2FkZWQuCisJCW15ICRwcmVmaXggPSBkZWZpbmVkICY6Om9wdF9wcmVmaXggPyA6Om9wdF9wcmVmaXgoKSA6ICIiOworCQkkX1syXSA9ICRyZWZfaWQgPQorCQkgICAgICAgICAgICAgInJlZnMvcmVtb3Rlcy8kcHJlZml4JGRlZmF1bHRfcmVmX2lkIjsKKwl9CisJJF9bMV0gPSAkcmVwb19pZDsKKwlteSAkZGlyID0gIiRFTlZ7R0lUX0RJUn0vc3ZuLyRyZWZfaWQiOworCisJIyBPbGRlciByZXBvcyBpbXBvcnRlZCBieSB1cyB1c2VkICRHSVRfRElSL3N2bi9mb28gaW5zdGVhZCBvZgorCSMgJEdJVF9ESVIvc3ZuL3JlZnMvcmVtb3Rlcy9mb28gd2hlbiB0cmFja2luZyByZWZzL3JlbW90ZXMvZm9vCisJaWYgKCRyZWZfaWQgPX4gbXtecmVmcy9yZW1vdGVzLyguKil9KSB7CisJCW15ICRvbGRfZGlyID0gIiRFTlZ7R0lUX0RJUn0vc3ZuLyQxIjsKKwkJaWYgKC1kICRvbGRfZGlyICYmICEgLWQgJGRpcikgeworCQkJJGRpciA9ICRvbGRfZGlyOworCQl9CisJfQorCisJJF9bM10gPSAkcGF0aCA9ICcnIHVubGVzcyAoZGVmaW5lZCAkcGF0aCk7CisJbWtwYXRoKFskZGlyXSk7CisJbXkgJG9iaiA9IGJsZXNzIHsKKwkJcmVmX2lkID0+ICRyZWZfaWQsIGRpciA9PiAkZGlyLCBpbmRleCA9PiAiJGRpci9pbmRleCIsCisJICAgICAgICBjb25maWcgPT4gIiRFTlZ7R0lUX0RJUn0vc3ZuL2NvbmZpZyIsCisJICAgICAgICBtYXBfcm9vdCA9PiAiJGRpci8ucmV2X21hcCIsIHJlcG9faWQgPT4gJHJlcG9faWQgfSwgJGNsYXNzOworCisJIyBFbnN1cmUgaXQgZ2V0cyBjYW5vbmljYWxpemVkCisJJG9iai0+cGF0aCgkcGF0aCk7CisKKwlyZXR1cm4gJG9iajsKK30KKworc3ViIHBhdGggeworCW15ICRzZWxmID0gc2hpZnQ7CisKKwlpZiAoQF8pIHsKKwkJbXkgJHBhdGggPSBzaGlmdDsKKwkJJHNlbGYtPntfcGF0aH0gPSBjYW5vbmljYWxpemVfcGF0aCgkcGF0aCk7CisJCXJldHVybjsKKwl9CisKKwlyZXR1cm4gJHNlbGYtPntfcGF0aH07Cit9CisKK3N1YiB1cmwgeworCW15ICRzZWxmID0gc2hpZnQ7CisKKwlpZiAoQF8pIHsKKwkJbXkgJHVybCA9IHNoaWZ0OworCQkkc2VsZi0+e3VybH0gPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOworCQlyZXR1cm47CisJfQorCisJcmV0dXJuICRzZWxmLT57dXJsfTsKK30KKworIyBmb3IgcmVhZC1vbmx5IGFjY2VzcyBvZiBvbGQgLnJldl9kYiBmb3JtYXRzCitzdWIgdW5saW5rX3Jldl9kYl9zeW1saW5rIHsKKwlteSAoJHNlbGYpID0gQF87CisJbXkgJGxpbmsgPSAkc2VsZi0+cmV2X2RiX3BhdGg7CisJJGxpbmsgPX4gcy9cLltcdy1dKyQvLyBvciBjcm9hayAibWlzc2luZyBVVUlEIGF0IHRoZSBlbmQgb2YgJGxpbmsiOworCWlmICgtbCAkbGluaykgeworCQl1bmxpbmsgJGxpbmsgb3IgY3JvYWsgInVubGluazogJGxpbmsgZmFpbGVkISI7CisJfQorfQorCitzdWIgcmV2X2RiX3BhdGggeworCW15ICgkc2VsZiwgJHV1aWQpID0gQF87CisJbXkgJGRiX3BhdGggPSAkc2VsZi0+bWFwX3BhdGgoJHV1aWQpOworCSRkYl9wYXRoID1+IHN7L1wucmV2X21hcFwufXsvXC5yZXZfZGJcLn0KKwkgICAgb3IgY3JvYWsgIm1hcF9wYXRoOiAkZGJfcGF0aCBkb2VzIG5vdCBjb250YWluICcvLnJldl9tYXAuJyAhIjsKKwkkZGJfcGF0aDsKK30KKworIyB0aGUgbmV3IHJlcGxhY2VtZW50IGZvciAucmV2X2RiCitzdWIgbWFwX3BhdGggeworCW15ICgkc2VsZiwgJHV1aWQpID0gQF87CisJJHV1aWQgfHw9ICRzZWxmLT5yYV91dWlkOworCSIkc2VsZi0+e21hcF9yb290fS4kdXVpZCI7Cit9CisKK3N1YiB1cmlfZW5jb2RlIHsKKwlteSAoJGYpID0gQF87CisJJGYgPX4gcyMoW15hLXpBLVowLTlcKiFcOl9cLi9cLV0pI3VjIHNwcmludGYoIiUlJTAyeCIsb3JkKCQxKSkjZWc7CisJJGYKK30KKworc3ViIHVyaV9kZWNvZGUgeworCW15ICgkZikgPSBAXzsKKwkkZiA9fiBzIyUoWzAtOWEtZkEtRl17Mn0pI2NocihoZXgoJDEpKSNlZzsKKwkkZgorfQorCitzdWIgcmVtb3ZlX3VzZXJuYW1lIHsKKwkkX1swXSA9fiBze14oW146XSo6Ly8pW15AXStAfXskMX07Cit9CisKKzE7CmRpZmYgLS1naXQgYS9wZXJsL0dpdC9TVk4vRWRpdG9yLnBtIGIvcGVybC9HaXQvU1ZOL0VkaXRvci5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmJjMjBhCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvU1ZOL0VkaXRvci5wbQpAQCAtMCwwICsxLDU1OSBAQAorcGFja2FnZSBHaXQ6OlNWTjo6RWRpdG9yOwordXNlIHZhcnMgcXcvQElTQSAkX3JtZGlyICRfY3Bfc2ltaWxhcml0eSAkX2ZpbmRfY29waWVzX2hhcmRlciAkX3JlbmFtZV9saW1pdC87Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFNWTjo6Q29yZTsKK3VzZSBTVk46OkRlbHRhOwordXNlIENhcnAgcXcvY3JvYWsvOwordXNlIElPOjpGaWxlOwordXNlIEdpdCBxdy9jb21tYW5kIGNvbW1hbmRfb25lbGluZSBjb21tYW5kX25vaXN5IGNvbW1hbmRfb3V0cHV0X3BpcGUKKyAgICAgICAgICAgY29tbWFuZF9pbnB1dF9waXBlIGNvbW1hbmRfY2xvc2VfcGlwZQorICAgICAgICAgICBjb21tYW5kX2JpZGlfcGlwZSBjb21tYW5kX2Nsb3NlX2JpZGlfcGlwZS87CitCRUdJTiB7CisJQElTQSA9IHF3KFNWTjo6RGVsdGE6OkVkaXRvcik7Cit9CisKK3N1YiBuZXcgeworCW15ICgkY2xhc3MsICRvcHRzKSA9IEBfOworCWZvcmVhY2ggKHF3L3N2bl9wYXRoIHIgcmEgdHJlZV9hIHRyZWVfYiBsb2cgZWRpdG9yX2NiLykgeworCQlkaWUgIiRfIHJlcXVpcmVkIVxuIiB1bmxlc3MgKGRlZmluZWQgJG9wdHMtPnskX30pOworCX0KKworCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJbXkgJG1vZHMgPSBnZW5lcmF0ZV9kaWZmKCRvcHRzLT57dHJlZV9hfSwgJG9wdHMtPnt0cmVlX2J9KTsKKwlteSAkdHlwZXMgPSBjaGVja19kaWZmX3BhdGhzKCRvcHRzLT57cmF9LCAkb3B0cy0+e3N2bl9wYXRofSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcHRzLT57cn0sICRtb2RzKTsKKworCSMgJG9wdHMtPntyYX0gZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgdXNlZCBhZnRlciB0aGlzOgorCW15IEBjZSAgPSAkb3B0cy0+e3JhfS0+Z2V0X2NvbW1pdF9lZGl0b3IoJG9wdHMtPntsb2d9LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3B0cy0+e2VkaXRvcl9jYn0sICRwb29sKTsKKwlteSAkc2VsZiA9IFNWTjo6RGVsdGE6OkVkaXRvci0+bmV3KEBjZSwgJHBvb2wpOworCWJsZXNzICRzZWxmLCAkY2xhc3M7CisJZm9yZWFjaCAocXcvc3ZuX3BhdGggciB0cmVlX2EgdHJlZV9iLykgeworCQkkc2VsZi0+eyRffSA9ICRvcHRzLT57JF99OworCX0KKwkkc2VsZi0+e3VybH0gPSAkb3B0cy0+e3JhfS0+e3VybH07CisJJHNlbGYtPnttb2RzfSA9ICRtb2RzOworCSRzZWxmLT57dHlwZXN9ID0gJHR5cGVzOworCSRzZWxmLT57cG9vbH0gPSAkcG9vbDsKKwkkc2VsZi0+e2JhdH0gPSB7ICcnID0+ICRzZWxmLT5vcGVuX3Jvb3QoJHNlbGYtPntyfSwgJHNlbGYtPntwb29sfSkgfTsKKwkkc2VsZi0+e3JtfSA9IHsgfTsKKwkkc2VsZi0+e3BhdGhfcHJlZml4fSA9IGxlbmd0aCAkc2VsZi0+e3N2bl9wYXRofSA/CisJICAgICAgICAgICAgICAgICAgICAgICAiJHNlbGYtPntzdm5fcGF0aH0vIiA6ICcnOworCSRzZWxmLT57Y29uZmlnfSA9ICRvcHRzLT57Y29uZmlnfTsKKwkkc2VsZi0+e21lcmdlaW5mb30gPSAkb3B0cy0+e21lcmdlaW5mb307CisJcmV0dXJuICRzZWxmOworfQorCitzdWIgZ2VuZXJhdGVfZGlmZiB7CisJbXkgKCR0cmVlX2EsICR0cmVlX2IpID0gQF87CisJbXkgQGRpZmZfdHJlZSA9IHF3KGRpZmYtdHJlZSAteiAtcik7CisJaWYgKCRfY3Bfc2ltaWxhcml0eSkgeworCQlwdXNoIEBkaWZmX3RyZWUsICItQyRfY3Bfc2ltaWxhcml0eSI7CisJfSBlbHNlIHsKKwkJcHVzaCBAZGlmZl90cmVlLCAnLUMnOworCX0KKwlwdXNoIEBkaWZmX3RyZWUsICctLWZpbmQtY29waWVzLWhhcmRlcicgaWYgJF9maW5kX2NvcGllc19oYXJkZXI7CisJcHVzaCBAZGlmZl90cmVlLCAiLWwkX3JlbmFtZV9saW1pdCIgaWYgZGVmaW5lZCAkX3JlbmFtZV9saW1pdDsKKwlwdXNoIEBkaWZmX3RyZWUsICR0cmVlX2EsICR0cmVlX2I7CisJbXkgKCRkaWZmX2ZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQGRpZmZfdHJlZSk7CisJbG9jYWwgJC8gPSAiXDAiOworCW15ICRzdGF0ZSA9ICdtZXRhJzsKKwlteSBAbW9kczsKKwl3aGlsZSAoPCRkaWZmX2ZoPikgeworCQljaG9tcCAkXzsgIyB0aGlzIGdldHMgcmlkIG9mIHRoZSB0cmFpbGluZyAiXDAiCisJCWlmICgkc3RhdGUgZXEgJ21ldGEnICYmIC9eOihcZHs2fSlccyhcZHs2fSlccworCQkJCQkoJDo6c2hhMSlccygkOjpzaGExKVxzCisJCQkJCShbTVRDUkFEXSlcZCokL3hvKSB7CisJCQlwdXNoIEBtb2RzLCB7CW1vZGVfYSA9PiAkMSwgbW9kZV9iID0+ICQyLAorCQkJCQlzaGExX2EgPT4gJDMsIHNoYTFfYiA9PiAkNCwKKwkJCQkJY2hnID0+ICQ1IH07CisJCQlpZiAoJDUgPX4gL14oPzpDfFIpJC8pIHsKKwkJCQkkc3RhdGUgPSAnZmlsZV9hJzsKKwkJCX0gZWxzZSB7CisJCQkJJHN0YXRlID0gJ2ZpbGVfYic7CisJCQl9CisJCX0gZWxzaWYgKCRzdGF0ZSBlcSAnZmlsZV9hJykgeworCQkJbXkgJHggPSAkbW9kc1skI21vZHNdIG9yIGNyb2FrICJFbXB0eSBhcnJheVxuIjsKKwkJCWlmICgkeC0+e2NoZ30gIX4gL14oPzpDfFIpJC8pIHsKKwkJCQljcm9hayAiRXJyb3IgcGFyc2luZyAkXywgJHgtPntjaGd9XG4iOworCQkJfQorCQkJJHgtPntmaWxlX2F9ID0gJF87CisJCQkkc3RhdGUgPSAnZmlsZV9iJzsKKwkJfSBlbHNpZiAoJHN0YXRlIGVxICdmaWxlX2InKSB7CisJCQlteSAkeCA9ICRtb2RzWyQjbW9kc10gb3IgY3JvYWsgIkVtcHR5IGFycmF5XG4iOworCQkJaWYgKGV4aXN0cyAkeC0+e2ZpbGVfYX0gJiYgJHgtPntjaGd9ICF+IC9eKD86Q3xSKSQvKSB7CisJCQkJY3JvYWsgIkVycm9yIHBhcnNpbmcgJF8sICR4LT57Y2hnfVxuIjsKKwkJCX0KKwkJCWlmICghZXhpc3RzICR4LT57ZmlsZV9hfSAmJiAkeC0+e2NoZ30gPX4gL14oPzpDfFIpJC8pIHsKKwkJCQljcm9hayAiRXJyb3IgcGFyc2luZyAkXywgJHgtPntjaGd9XG4iOworCQkJfQorCQkJJHgtPntmaWxlX2J9ID0gJF87CisJCQkkc3RhdGUgPSAnbWV0YSc7CisJCX0gZWxzZSB7CisJCQljcm9hayAiRXJyb3IgcGFyc2luZyAkX1xuIjsKKwkJfQorCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJGRpZmZfZmgsICRjdHgpOworCVxAbW9kczsKK30KKworc3ViIGNoZWNrX2RpZmZfcGF0aHMgeworCW15ICgkcmEsICRwZngsICRyZXYsICRtb2RzKSA9IEBfOworCW15ICV0eXBlczsKKwkkcGZ4IC49ICcvJyBpZiBsZW5ndGggJHBmeDsKKworCXN1YiB0eXBlX2RpZmZfcGF0aHMgeworCQlteSAoJHJhLCAkdHlwZXMsICRwYXRoLCAkcmV2KSA9IEBfOworCQlteSBAcCA9IHNwbGl0IG0jLysjLCAkcGF0aDsKKwkJbXkgJGMgPSBzaGlmdCBAcDsKKwkJdW5sZXNzIChkZWZpbmVkICR0eXBlcy0+eyRjfSkgeworCQkJJHR5cGVzLT57JGN9ID0gJHJhLT5jaGVja19wYXRoKCRjLCAkcmV2KTsKKwkJfQorCQl3aGlsZSAoQHApIHsKKwkJCSRjIC49ICcvJyAuIHNoaWZ0IEBwOworCQkJbmV4dCBpZiBkZWZpbmVkICR0eXBlcy0+eyRjfTsKKwkJCSR0eXBlcy0+eyRjfSA9ICRyYS0+Y2hlY2tfcGF0aCgkYywgJHJldik7CisJCX0KKwl9CisKKwlmb3JlYWNoIG15ICRtIChAJG1vZHMpIHsKKwkJZm9yZWFjaCBteSAkZiAocXcvZmlsZV9hIGZpbGVfYi8pIHsKKwkJCW5leHQgdW5sZXNzIGRlZmluZWQgJG0tPnskZn07CisJCQlteSAoJGRpcikgPSAoJG0tPnskZn0gPX4gbSNeKC4qPykvPyg/OlteL10rKSQjKTsKKwkJCWlmIChsZW5ndGggJHBmeC4kZGlyICYmICEgZGVmaW5lZCAkdHlwZXN7JGRpcn0pIHsKKwkJCQl0eXBlX2RpZmZfcGF0aHMoJHJhLCBcJXR5cGVzLCAkcGZ4LiRkaXIsICRyZXYpOworCQkJfQorCQl9CisJfQorCVwldHlwZXM7Cit9CisKK3N1YiBzcGxpdF9wYXRoIHsKKwlyZXR1cm4gKCRfWzBdID1+IG0jXiguKj8pLz8oW14vXSspJCMpOworfQorCitzdWIgcmVwb19wYXRoIHsKKwlteSAoJHNlbGYsICRwYXRoKSA9IEBfOworCWlmIChteSAkZW5jID0gJHNlbGYtPntwYXRobmFtZWVuY29kaW5nfSkgeworCQlyZXF1aXJlIEVuY29kZTsKKwkJRW5jb2RlOjpmcm9tX3RvKCRwYXRoLCAkZW5jLCAnVVRGLTgnKTsKKwl9CisJJHNlbGYtPntwYXRoX3ByZWZpeH0uKGRlZmluZWQgJHBhdGggPyAkcGF0aCA6ICcnKTsKK30KKworc3ViIHVybF9wYXRoIHsKKwlteSAoJHNlbGYsICRwYXRoKSA9IEBfOworCWlmICgkc2VsZi0+e3VybH0gPX4gbSNeaHR0cHM/Oi8vIykgeworCQkkcGF0aCA9fiBzIShbXn5hLXpBLVowLTlfLi8tXSkhdWMgc3ByaW50ZigiJSUlMDJ4IixvcmQoJDEpKSFlZzsKKwl9CisJJHNlbGYtPnt1cmx9IC4gJy8nIC4gJHNlbGYtPnJlcG9fcGF0aCgkcGF0aCk7Cit9CisKK3N1YiBybWRpcnMgeworCW15ICgkc2VsZikgPSBAXzsKKwlteSAkcm0gPSAkc2VsZi0+e3JtfTsKKwlkZWxldGUgJHJtLT57Jyd9OyAjIHdlIG5ldmVyIGRlbGV0ZSB0aGUgdXJsIHdlJ3JlIHRyYWNraW5nCisJcmV0dXJuIHVubGVzcyAlJHJtOworCisJZm9yZWFjaCAoa2V5cyAlJHJtKSB7CisJCW15IEBkID0gc3BsaXQgbSMvIywgJF87CisJCW15ICRjID0gc2hpZnQgQGQ7CisJCSRybS0+eyRjfSA9IDE7CisJCXdoaWxlIChAZCkgeworCQkJJGMgLj0gJy8nIC4gc2hpZnQgQGQ7CisJCQkkcm0tPnskY30gPSAxOworCQl9CisJfQorCWRlbGV0ZSAkcm0tPnskc2VsZi0+e3N2bl9wYXRofX07CisJZGVsZXRlICRybS0+eycnfTsgIyB3ZSBuZXZlciBkZWxldGUgdGhlIHVybCB3ZSdyZSB0cmFja2luZworCXJldHVybiB1bmxlc3MgJSRybTsKKworCW15ICgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9scy10cmVlIC0tbmFtZS1vbmx5IC1yIC16LywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnt0cmVlX2J9KTsKKwlsb2NhbCAkLyA9ICJcMCI7CisJd2hpbGUgKDwkZmg+KSB7CisJCWNob21wOworCQlteSBAZG4gPSBzcGxpdCBtIy8jLCAkXzsKKwkJd2hpbGUgKHBvcCBAZG4pIHsKKwkJCWRlbGV0ZSAkcm0tPntqb2luICcvJywgQGRufTsKKwkJfQorCQl1bmxlc3MgKCUkcm0pIHsKKwkJCWNsb3NlICRmaDsKKwkJCXJldHVybjsKKwkJfQorCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKKworCW15ICgkciwgJHAsICRiYXQpID0gKCRzZWxmLT57cn0sICRzZWxmLT57cG9vbH0sICRzZWxmLT57YmF0fSk7CisJZm9yZWFjaCBteSAkZCAoc29ydCB7ICRiID1+IHRyIy8jLyMgPD0+ICRhID1+IHRyIy8jLyMgfSBrZXlzICUkcm0pIHsKKwkJJHNlbGYtPmNsb3NlX2RpcmVjdG9yeSgkYmF0LT57JGR9LCAkcCk7CisJCW15ICgkZG4pID0gKCRkID1+IG0jXiguKj8pLz8oPzpbXi9dKykkIyk7CisJCXByaW50ICJcdEQrXHQkZC9cbiIgdW5sZXNzICQ6Ol9xOworCQkkc2VsZi0+U1VQRVI6OmRlbGV0ZV9lbnRyeSgkZCwgJHIsICRiYXQtPnskZG59LCAkcCk7CisJCWRlbGV0ZSAkYmF0LT57JGR9OworCX0KK30KKworc3ViIG9wZW5fb3JfYWRkX2RpciB7CisJbXkgKCRzZWxmLCAkZnVsbF9wYXRoLCAkYmF0b24sICRkZWxldGlvbnMpID0gQF87CisJbXkgJHQgPSAkc2VsZi0+e3R5cGVzfS0+eyRmdWxsX3BhdGh9OworCWlmICghZGVmaW5lZCAkdCkgeworCQlkaWUgIiRmdWxsX3BhdGggbm90IGtub3duIGluIHIkc2VsZi0+e3J9IG9yIHdlIGhhdmUgYSBidWchXG4iOworCX0KKwl7CisJCW5vIHdhcm5pbmdzICdvbmNlJzsKKwkJIyBTVk46Ok5vZGU6Om5vbmUgYW5kIFNWTjo6Tm9kZTo6ZmlsZSBhcmUgdXNlZCBvbmx5IG9uY2UsCisJCSMgc28gd2UncmUgc2h1dHRpbmcgdXAgUGVybCdzIHdhcm5pbmdzIGFib3V0IHRoZW0uCisJCWlmICgkdCA9PSAkU1ZOOjpOb2RlOjpub25lIHx8IGRlZmluZWQoJGRlbGV0aW9ucy0+eyRmdWxsX3BhdGh9KSkgeworCQkJcmV0dXJuICRzZWxmLT5hZGRfZGlyZWN0b3J5KCRmdWxsX3BhdGgsICRiYXRvbiwKKwkJCSAgICB1bmRlZiwgLTEsICRzZWxmLT57cG9vbH0pOworCQl9IGVsc2lmICgkdCA9PSAkU1ZOOjpOb2RlOjpkaXIpIHsKKwkJCXJldHVybiAkc2VsZi0+b3Blbl9kaXJlY3RvcnkoJGZ1bGxfcGF0aCwgJGJhdG9uLAorCQkJICAgICRzZWxmLT57cn0sICRzZWxmLT57cG9vbH0pOworCQl9ICMgbm8gd2FybmluZ3MgJ29uY2UnCisJCXByaW50IFNUREVSUiAiJGZ1bGxfcGF0aCBhbHJlYWR5IGV4aXN0cyBpbiByZXBvc2l0b3J5IGF0ICIsCisJCSAgICAiciRzZWxmLT57cn0gYW5kIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSAoIiwKKwkJICAgICgkdCA9PSAkU1ZOOjpOb2RlOjpmaWxlID8gJ2ZpbGUnIDogJ3Vua25vd24nKSwiLyR0KVxuIjsKKwl9ICMgbm8gd2FybmluZ3MgJ29uY2UnCisJZXhpdCAxOworfQorCitzdWIgZW5zdXJlX3BhdGggeworCW15ICgkc2VsZiwgJHBhdGgsICRkZWxldGlvbnMpID0gQF87CisJbXkgJGJhdCA9ICRzZWxmLT57YmF0fTsKKwlteSAkcmVwb19wYXRoID0gJHNlbGYtPnJlcG9fcGF0aCgkcGF0aCk7CisJcmV0dXJuICRiYXQtPnsnJ30gdW5sZXNzIChsZW5ndGggJHJlcG9fcGF0aCk7CisKKwlteSBAcCA9IHNwbGl0IG0jLysjLCAkcmVwb19wYXRoOworCW15ICRjID0gc2hpZnQgQHA7CisJJGJhdC0+eyRjfSB8fD0gJHNlbGYtPm9wZW5fb3JfYWRkX2RpcigkYywgJGJhdC0+eycnfSwgJGRlbGV0aW9ucyk7CisJd2hpbGUgKEBwKSB7CisJCW15ICRjMCA9ICRjOworCQkkYyAuPSAnLycgLiBzaGlmdCBAcDsKKwkJJGJhdC0+eyRjfSB8fD0gJHNlbGYtPm9wZW5fb3JfYWRkX2RpcigkYywgJGJhdC0+eyRjMH0sICRkZWxldGlvbnMpOworCX0KKwlyZXR1cm4gJGJhdC0+eyRjfTsKK30KKworIyBTdWJyb3V0aW5lIHRvIGNvbnZlcnQgYSBnbG9iYmluZyBwYXR0ZXJuIHRvIGEgcmVndWxhciBleHByZXNzaW9uLgorIyBGcm9tIHBlcmwgY29va2Jvb2suCitzdWIgZ2xvYjJwYXQgeworCW15ICRnbG9ic3RyID0gc2hpZnQ7CisJbXkgJXBhdG1hcCA9ICgnKicgPT4gJy4qJywgJz8nID0+ICcuJywgJ1snID0+ICdbJywgJ10nID0+ICddJyk7CisJJGdsb2JzdHIgPX4gc3soLil9IHsgJHBhdG1hcHskMX0gfHwgIlxRJDEiIH1nZTsKKwlyZXR1cm4gJ14nIC4gJGdsb2JzdHIgLiAnJCc7Cit9CisKK3N1YiBjaGVja19hdXRvcHJvcCB7CisJbXkgKCRzZWxmLCAkcGF0dGVybiwgJHByb3BlcnRpZXMsICRmaWxlLCAkZmJhdCkgPSBAXzsKKwkjIENvbnZlcnQgdGhlIGdsb2JiaW5nIHBhdHRlcm4gdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uCisJbXkgJHJlZ2V4ID0gZ2xvYjJwYXQoJHBhdHRlcm4pOworCSMgQ2hlY2sgaWYgdGhlIHBhdHRlcm4gbWF0Y2hlcyB0aGUgZmlsZSBuYW1lLgorCWlmKCRmaWxlID1+IG0vKCRyZWdleCkvKSB7CisJCSMgUGFyc2UgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB0byBzZXQuCisJCW15IEBwcm9wcyA9IHNwbGl0KC87LywgJHByb3BlcnRpZXMpOworCQlmb3JlYWNoIG15ICRwcm9wIChAcHJvcHMpIHsKKwkJCSMgUGFyc2UgJ25hbWU9dmFsdWUnIHN5bnRheCBhbmQgc2V0IHRoZSBwcm9wZXJ0eS4KKwkJCWlmICgkcHJvcCA9fiAvKFtePV0rKT0oLiopLykgeworCQkJCW15ICgkbiwkdikgPSAoJDEsJDIpOworCQkJCWZvciAoJG4sICR2KSB7CisJCQkJCXMvXlxzKy8vOyBzL1xzKyQvLzsKKwkJCQl9CisJCQkJJHNlbGYtPmNoYW5nZV9maWxlX3Byb3AoJGZiYXQsICRuLCAkdik7CisJCQl9CisJCX0KKwl9Cit9CisKK3N1YiBhcHBseV9hdXRvcHJvcHMgeworCW15ICgkc2VsZiwgJGZpbGUsICRmYmF0KSA9IEBfOworCW15ICRjb25mX3QgPSAkeyRzZWxmLT57Y29uZmlnfX17J2NvbmZpZyd9OworCW5vIHdhcm5pbmdzICdvbmNlJzsKKwkjIENoZWNrIFttaXNjZWxsYW55XS9lbmFibGUtYXV0by1wcm9wcyBpbiBzdm4gY29uZmlndXJhdGlvbi4KKwlpZiAoU1ZOOjpfQ29yZTo6c3ZuX2NvbmZpZ19nZXRfYm9vbCgKKwkJJGNvbmZfdCwKKwkJJFNWTjo6X0NvcmU6OlNWTl9DT05GSUdfU0VDVElPTl9NSVNDRUxMQU5ZLAorCQkkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR19PUFRJT05fRU5BQkxFX0FVVE9fUFJPUFMsCisJCTApKSB7CisJCSMgQXV0by1wcm9wcyBhcmUgZW5hYmxlZC4gIEVudW1lcmF0ZSB0aGVtIHRvIGxvb2sgZm9yIG1hdGNoZXMuCisJCW15ICRjYWxsYmFjayA9IHN1YiB7CisJCQkkc2VsZi0+Y2hlY2tfYXV0b3Byb3AoJF9bMF0sICRfWzFdLCAkZmlsZSwgJGZiYXQpOworCQl9OworCQlTVk46Ol9Db3JlOjpzdm5fY29uZmlnX2VudW1lcmF0ZSgKKwkJCSRjb25mX3QsCisJCQkkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR19TRUNUSU9OX0FVVE9fUFJPUFMsCisJCQkkY2FsbGJhY2spOworCX0KK30KKworc3ViIEEgeworCW15ICgkc2VsZiwgJG0sICRkZWxldGlvbnMpID0gQF87CisJbXkgKCRkaXIsICRmaWxlKSA9IHNwbGl0X3BhdGgoJG0tPntmaWxlX2J9KTsKKwlteSAkcGJhdCA9ICRzZWxmLT5lbnN1cmVfcGF0aCgkZGlyLCAkZGVsZXRpb25zKTsKKwlteSAkZmJhdCA9ICRzZWxmLT5hZGRfZmlsZSgkc2VsZi0+cmVwb19wYXRoKCRtLT57ZmlsZV9ifSksICRwYmF0LAorCQkJCQl1bmRlZiwgLTEpOworCXByaW50ICJcdEFcdCRtLT57ZmlsZV9ifVxuIiB1bmxlc3MgJDo6X3E7CisJJHNlbGYtPmFwcGx5X2F1dG9wcm9wcygkZmlsZSwgJGZiYXQpOworCSRzZWxmLT5jaGdfZmlsZSgkZmJhdCwgJG0pOworCSRzZWxmLT5jbG9zZV9maWxlKCRmYmF0LHVuZGVmLCRzZWxmLT57cG9vbH0pOworfQorCitzdWIgQyB7CisJbXkgKCRzZWxmLCAkbSwgJGRlbGV0aW9ucykgPSBAXzsKKwlteSAoJGRpciwgJGZpbGUpID0gc3BsaXRfcGF0aCgkbS0+e2ZpbGVfYn0pOworCW15ICRwYmF0ID0gJHNlbGYtPmVuc3VyZV9wYXRoKCRkaXIsICRkZWxldGlvbnMpOworCW15ICRmYmF0ID0gJHNlbGYtPmFkZF9maWxlKCRzZWxmLT5yZXBvX3BhdGgoJG0tPntmaWxlX2J9KSwgJHBiYXQsCisJCQkJJHNlbGYtPnVybF9wYXRoKCRtLT57ZmlsZV9hfSksICRzZWxmLT57cn0pOworCXByaW50ICJcdENcdCRtLT57ZmlsZV9hfSA9PiAkbS0+e2ZpbGVfYn1cbiIgdW5sZXNzICQ6Ol9xOworCSRzZWxmLT5jaGdfZmlsZSgkZmJhdCwgJG0pOworCSRzZWxmLT5jbG9zZV9maWxlKCRmYmF0LHVuZGVmLCRzZWxmLT57cG9vbH0pOworfQorCitzdWIgZGVsZXRlX2VudHJ5IHsKKwlteSAoJHNlbGYsICRwYXRoLCAkcGJhdCkgPSBAXzsKKwlteSAkcnBhdGggPSAkc2VsZi0+cmVwb19wYXRoKCRwYXRoKTsKKwlteSAoJGRpciwgJGZpbGUpID0gc3BsaXRfcGF0aCgkcnBhdGgpOworCSRzZWxmLT57cm19LT57JGRpcn0gPSAxOworCSRzZWxmLT5TVVBFUjo6ZGVsZXRlX2VudHJ5KCRycGF0aCwgJHNlbGYtPntyfSwgJHBiYXQsICRzZWxmLT57cG9vbH0pOworfQorCitzdWIgUiB7CisJbXkgKCRzZWxmLCAkbSwgJGRlbGV0aW9ucykgPSBAXzsKKwlteSAoJGRpciwgJGZpbGUpID0gc3BsaXRfcGF0aCgkbS0+e2ZpbGVfYn0pOworCW15ICRwYmF0ID0gJHNlbGYtPmVuc3VyZV9wYXRoKCRkaXIsICRkZWxldGlvbnMpOworCW15ICRmYmF0ID0gJHNlbGYtPmFkZF9maWxlKCRzZWxmLT5yZXBvX3BhdGgoJG0tPntmaWxlX2J9KSwgJHBiYXQsCisJCQkJJHNlbGYtPnVybF9wYXRoKCRtLT57ZmlsZV9hfSksICRzZWxmLT57cn0pOworCXByaW50ICJcdFJcdCRtLT57ZmlsZV9hfSA9PiAkbS0+e2ZpbGVfYn1cbiIgdW5sZXNzICQ6Ol9xOworCSRzZWxmLT5hcHBseV9hdXRvcHJvcHMoJGZpbGUsICRmYmF0KTsKKwkkc2VsZi0+Y2hnX2ZpbGUoJGZiYXQsICRtKTsKKwkkc2VsZi0+Y2xvc2VfZmlsZSgkZmJhdCx1bmRlZiwkc2VsZi0+e3Bvb2x9KTsKKworCSgkZGlyLCAkZmlsZSkgPSBzcGxpdF9wYXRoKCRtLT57ZmlsZV9hfSk7CisJJHBiYXQgPSAkc2VsZi0+ZW5zdXJlX3BhdGgoJGRpciwgJGRlbGV0aW9ucyk7CisJJHNlbGYtPmRlbGV0ZV9lbnRyeSgkbS0+e2ZpbGVfYX0sICRwYmF0KTsKK30KKworc3ViIE0geworCW15ICgkc2VsZiwgJG0sICRkZWxldGlvbnMpID0gQF87CisJbXkgKCRkaXIsICRmaWxlKSA9IHNwbGl0X3BhdGgoJG0tPntmaWxlX2J9KTsKKwlteSAkcGJhdCA9ICRzZWxmLT5lbnN1cmVfcGF0aCgkZGlyLCAkZGVsZXRpb25zKTsKKwlteSAkZmJhdCA9ICRzZWxmLT5vcGVuX2ZpbGUoJHNlbGYtPnJlcG9fcGF0aCgkbS0+e2ZpbGVfYn0pLAorCQkJCSRwYmF0LCRzZWxmLT57cn0sJHNlbGYtPntwb29sfSk7CisJcHJpbnQgIlx0JG0tPntjaGd9XHQkbS0+e2ZpbGVfYn1cbiIgdW5sZXNzICQ6Ol9xOworCSRzZWxmLT5jaGdfZmlsZSgkZmJhdCwgJG0pOworCSRzZWxmLT5jbG9zZV9maWxlKCRmYmF0LHVuZGVmLCRzZWxmLT57cG9vbH0pOworfQorCitzdWIgVCB7CisJbXkgKCRzZWxmLCAkbSwgJGRlbGV0aW9ucykgPSBAXzsKKworCSMgV29yayBhcm91bmQgc3VidmVyc2lvbiBpc3N1ZSA0MDkxOiB0b2dnbGluZyB0aGUgImlzIGEKKwkjIHN5bWxpbmsiIHByb3BlcnR5IHJlcXVpcmVzIHJlbW92aW5nIGFuZCByZS1hZGRpbmcgYQorCSMgZmlsZSBvciBlbHNlICJzdm4gdXAiIG9uIGFmZmVjdGVkIGNsaWVudHMgdHJpcHMgYW4KKwkjIGFzc2VydGlvbiBhbmQgYWJvcnRzLgorCWlmICgoJG0tPnttb2RlX2J9ID1+IC9eMTIwLyAmJiAkbS0+e21vZGVfYX0gIX4gL14xMjAvKSB8fAorCSAgICAoJG0tPnttb2RlX2J9ICF+IC9eMTIwLyAmJiAkbS0+e21vZGVfYX0gPX4gL14xMjAvKSkgeworCQkkc2VsZi0+RCh7CisJCQltb2RlX2EgPT4gJG0tPnttb2RlX2F9LCBtb2RlX2IgPT4gJzAwMDAwMCcsCisJCQlzaGExX2EgPT4gJG0tPntzaGExX2F9LCBzaGExX2IgPT4gJzAnIHggNDAsCisJCQljaGcgPT4gJ0QnLCBmaWxlX2IgPT4gJG0tPntmaWxlX2J9CisJCX0pOworCQkkc2VsZi0+QSh7CisJCQltb2RlX2EgPT4gJzAwMDAwMCcsIG1vZGVfYiA9PiAkbS0+e21vZGVfYn0sCisJCQlzaGExX2EgPT4gJzAnIHggNDAsIHNoYTFfYiA9PiAkbS0+e3NoYTFfYn0sCisJCQljaGcgPT4gJ0EnLCBmaWxlX2IgPT4gJG0tPntmaWxlX2J9CisJCX0pOworCQlyZXR1cm47CisJfQorCisJJHNlbGYtPk0oJG0sICRkZWxldGlvbnMpOworfQorCitzdWIgY2hhbmdlX2ZpbGVfcHJvcCB7CisJbXkgKCRzZWxmLCAkZmJhdCwgJHBuYW1lLCAkcHZhbCkgPSBAXzsKKwkkc2VsZi0+U1VQRVI6OmNoYW5nZV9maWxlX3Byb3AoJGZiYXQsICRwbmFtZSwgJHB2YWwsICRzZWxmLT57cG9vbH0pOworfQorCitzdWIgY2hhbmdlX2Rpcl9wcm9wIHsKKwlteSAoJHNlbGYsICRwYmF0LCAkcG5hbWUsICRwdmFsKSA9IEBfOworCSRzZWxmLT5TVVBFUjo6Y2hhbmdlX2Rpcl9wcm9wKCRwYmF0LCAkcG5hbWUsICRwdmFsLCAkc2VsZi0+e3Bvb2x9KTsKK30KKworc3ViIF9jaGdfZmlsZV9nZXRfYmxvYiAoJCQkJCkgeworCW15ICgkc2VsZiwgJGZiYXQsICRtLCAkd2hpY2gpID0gQF87CisJbXkgJGZoID0gJDo6X3JlcG9zaXRvcnktPnRlbXBfYWNxdWlyZSgiZ2l0X2Jsb2JfJHdoaWNoIik7CisJaWYgKCRtLT57Im1vZGVfJHdoaWNoIn0gPX4gL14xMjAvKSB7CisJCXByaW50ICRmaCAnbGluayAnIG9yIGNyb2FrICQhOworCQkkc2VsZi0+Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwnc3ZuOnNwZWNpYWwnLCcqJyk7CisJfSBlbHNpZiAoJG0tPnttb2RlX2F9ID1+IC9eMTIwLyAmJiAkbS0+eyJtb2RlXyR3aGljaCJ9ICF+IC9eMTIwLykgeworCQkkc2VsZi0+Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwnc3ZuOnNwZWNpYWwnLHVuZGVmKTsKKwl9CisJbXkgJGJsb2IgPSAkbS0+eyJzaGExXyR3aGljaCJ9OworCXJldHVybiAoJGZoLCkgaWYgKCRibG9iID1+IC9eMHs0MH0kLyk7CisJbXkgJHNpemUgPSAkOjpfcmVwb3NpdG9yeS0+Y2F0X2Jsb2IoJGJsb2IsICRmaCk7CisJY3JvYWsgIkZhaWxlZCB0byByZWFkIG9iamVjdCAkYmxvYiIgaWYgKCRzaXplIDwgMCk7CisJJGZoLT5mbHVzaCA9PSAwIG9yIGNyb2FrICQhOworCXNlZWsgJGZoLCAwLCAwIG9yIGNyb2FrICQhOworCisJbXkgJGV4cCA9IDo6bWQ1c3VtKCRmaCk7CisJc2VlayAkZmgsIDAsIDAgb3IgY3JvYWsgJCE7CisJcmV0dXJuICgkZmgsICRleHApOworfQorCitzdWIgY2hnX2ZpbGUgeworCW15ICgkc2VsZiwgJGZiYXQsICRtKSA9IEBfOworCWlmICgkbS0+e21vZGVfYn0gPX4gLzc1NSQvICYmICRtLT57bW9kZV9hfSAhfiAvNzU1JC8pIHsKKwkJJHNlbGYtPmNoYW5nZV9maWxlX3Byb3AoJGZiYXQsJ3N2bjpleGVjdXRhYmxlJywnKicpOworCX0gZWxzaWYgKCRtLT57bW9kZV9ifSAhfiAvNzU1JC8gJiYgJG0tPnttb2RlX2F9ID1+IC83NTUkLykgeworCQkkc2VsZi0+Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwnc3ZuOmV4ZWN1dGFibGUnLHVuZGVmKTsKKwl9CisJbXkgKCRmaF9hLCAkZXhwX2EpID0gX2NoZ19maWxlX2dldF9ibG9iICRzZWxmLCAkZmJhdCwgJG0sICdhJzsKKwlteSAoJGZoX2IsICRleHBfYikgPSBfY2hnX2ZpbGVfZ2V0X2Jsb2IgJHNlbGYsICRmYmF0LCAkbSwgJ2InOworCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJbXkgJGF0ZCA9ICRzZWxmLT5hcHBseV90ZXh0ZGVsdGEoJGZiYXQsICRleHBfYSwgJHBvb2wpOworCWlmICgtcyAkZmhfYSkgeworCQlteSAkdHhzdHJlYW0gPSBTVk46OlR4RGVsdGE6Om5ldyAoJGZoX2EsICRmaF9iLCAkcG9vbCk7CisJCW15ICRyZXMgPSBTVk46OlR4RGVsdGE6OnNlbmRfdHhzdHJlYW0oJHR4c3RyZWFtLCBAJGF0ZCwgJHBvb2wpOworCQlpZiAoZGVmaW5lZCAkcmVzKSB7CisJCQlkaWUgIlVuZXhwZWN0ZWQgcmVzdWx0IGZyb20gc2VuZF90eHN0cmVhbTogJHJlc1xuIiwKKwkJCSAgICAiKFNWTjo6Q29yZTo6VkVSU0lPTjogJFNWTjo6Q29yZTo6VkVSU0lPTilcbiI7CisJCX0KKwl9IGVsc2UgeworCQlteSAkZ290ID0gU1ZOOjpUeERlbHRhOjpzZW5kX3N0cmVhbSgkZmhfYiwgQCRhdGQsICRwb29sKTsKKwkJZGllICJDaGVja3N1bSBtaXNtYXRjaFxuZXhwZWN0ZWQ6ICRleHBfYlxuZ290OiAkZ290XG4iCisJCSAgICBpZiAoJGdvdCBuZSAkZXhwX2IpOworCX0KKwlHaXQ6OnRlbXBfcmVsZWFzZSgkZmhfYiwgMSk7CisJR2l0Ojp0ZW1wX3JlbGVhc2UoJGZoX2EsIDEpOworCSRwb29sLT5jbGVhcjsKK30KKworc3ViIEQgeworCW15ICgkc2VsZiwgJG0sICRkZWxldGlvbnMpID0gQF87CisJbXkgKCRkaXIsICRmaWxlKSA9IHNwbGl0X3BhdGgoJG0tPntmaWxlX2J9KTsKKwlteSAkcGJhdCA9ICRzZWxmLT5lbnN1cmVfcGF0aCgkZGlyLCAkZGVsZXRpb25zKTsKKwlwcmludCAiXHREXHQkbS0+e2ZpbGVfYn1cbiIgdW5sZXNzICQ6Ol9xOworCSRzZWxmLT5kZWxldGVfZW50cnkoJG0tPntmaWxlX2J9LCAkcGJhdCk7Cit9CisKK3N1YiBjbG9zZV9lZGl0IHsKKwlteSAoJHNlbGYpID0gQF87CisJbXkgKCRwLCRiYXQpID0gKCRzZWxmLT57cG9vbH0sICRzZWxmLT57YmF0fSk7CisJZm9yZWFjaCAoc29ydCB7ICRiID1+IHRyIy8jLyMgPD0+ICRhID1+IHRyIy8jLyMgfSBrZXlzICUkYmF0KSB7CisJCW5leHQgaWYgJF8gZXEgJyc7CisJCSRzZWxmLT5jbG9zZV9kaXJlY3RvcnkoJGJhdC0+eyRffSwgJHApOworCX0KKwkkc2VsZi0+Y2xvc2VfZGlyZWN0b3J5KCRiYXQtPnsnJ30sICRwKTsKKwkkc2VsZi0+U1VQRVI6OmNsb3NlX2VkaXQoJHApOworCSRwLT5jbGVhcjsKK30KKworc3ViIGFib3J0X2VkaXQgeworCW15ICgkc2VsZikgPSBAXzsKKwkkc2VsZi0+U1VQRVI6OmFib3J0X2VkaXQoJHNlbGYtPntwb29sfSk7Cit9CisKK3N1YiBERVNUUk9ZIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCSRzZWxmLT5TVVBFUjo6REVTVFJPWShAXyk7CisJJHNlbGYtPntwb29sfS0+Y2xlYXI7Cit9CisKKyMgdGhpcyBkcml2ZXMgdGhlIGVkaXRvcgorc3ViIGFwcGx5X2RpZmYgeworCW15ICgkc2VsZikgPSBAXzsKKwlteSAkbW9kcyA9ICRzZWxmLT57bW9kc307CisJbXkgJW8gPSAoIEQgPT4gMCwgQyA9PiAxLCBSID0+IDIsIEEgPT4gMywgTSA9PiA0LCBUID0+IDUgKTsKKwlteSAlZGVsZXRpb25zOworCisJZm9yZWFjaCBteSAkbSAoQCRtb2RzKSB7CisJCWlmICgkbS0+e2NoZ30gZXEgIkQiKSB7CisJCQkkZGVsZXRpb25zeyRtLT57ZmlsZV9ifX0gPSAxOworCQl9CisJfQorCisJZm9yZWFjaCBteSAkbSAoc29ydCB7ICRveyRhLT57Y2hnfX0gPD0+ICRveyRiLT57Y2hnfX0gfSBAJG1vZHMpIHsKKwkJbXkgJGYgPSAkbS0+e2NoZ307CisJCWlmIChkZWZpbmVkICRveyRmfSkgeworCQkJJHNlbGYtPiRmKCRtLCBcJWRlbGV0aW9ucyk7CisJCX0gZWxzZSB7CisJCQlmYXRhbCgiSW52YWxpZCBjaGFuZ2UgdHlwZTogJGYiKTsKKwkJfQorCX0KKworCWlmIChkZWZpbmVkKCRzZWxmLT57bWVyZ2VpbmZvfSkpIHsKKwkJJHNlbGYtPmNoYW5nZV9kaXJfcHJvcCgkc2VsZi0+e2JhdH17Jyd9LCAic3ZuOm1lcmdlaW5mbyIsCisJCQkgICAgICAgICAgICAgICAkc2VsZi0+e21lcmdlaW5mb30pOworCX0KKwkkc2VsZi0+cm1kaXJzIGlmICRfcm1kaXI7CisJaWYgKEAkbW9kcyA9PSAwICYmICFkZWZpbmVkKCRzZWxmLT57bWVyZ2VpbmZvfSkpIHsKKwkJJHNlbGYtPmFib3J0X2VkaXQ7CisJfSBlbHNlIHsKKwkJJHNlbGYtPmNsb3NlX2VkaXQ7CisJfQorCXJldHVybiBzY2FsYXIgQCRtb2RzOworfQorCisxOworX19FTkRfXworCitHaXQ6OlNWTjo6RWRpdG9yIC0gY29tbWl0IGRyaXZlciBmb3IgImdpdCBzdm4gc2V0LXRyZWUiIGFuZCBkY29tbWl0CisKKz1oZWFkMSBTWU5PUFNJUworCisJdXNlIEdpdDo6U1ZOOjpFZGl0b3I7CisJdXNlIEdpdDo6U1ZOOjpSYTsKKworCW15ICRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCR1cmwpOworCW15ICVvcHRzID0gKAorCQlyID0+IDE5LAorCQlsb2cgPT4gImxvZyBtZXNzYWdlIiwKKwkJcmEgPT4gJHJhLAorCQljb25maWcgPT4gU1ZOOjpDb3JlOjpjb25maWdfZ2V0X2NvbmZpZygkc3ZuX2NvbmZpZ19kaXIpLAorCQl0cmVlX2EgPT4gIiRjb21taXReIiwKKwkJdHJlZV9iID0+ICIkY29tbWl0IiwKKwkJZWRpdG9yX2NiID0+IHN1YiB7IHByaW50ICJDb21taXR0ZWQgciRfWzBdXG4iOyB9LAorCQltZXJnZWluZm8gPT4gIi9icmFuY2hlcy9mb286MS0xMCIsCisJCXN2bl9wYXRoID0+ICJ0cnVuayIKKwkpOworCUdpdDo6U1ZOOjpFZGl0b3ItPm5ldyhcJW9wdHMpLT5hcHBseV9kaWZmIG9yIHByaW50ICJObyBjaGFuZ2VzXG4iOworCisJbXkgJHJlID0gR2l0OjpTVk46OkVkaXRvcjo6Z2xvYjJwYXQoInRydW5rLyoiKTsKKwlpZiAoJGJyYW5jaG5hbWUgPX4gLyRyZS8pIHsKKwkJcHJpbnQgIm1hdGNoZWQhXG4iOworCX0KKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgbW9kdWxlIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUgImdpdCBzdm4iIGNvbW1hbmQuCitEbyBub3QgdXNlIGl0IHVubGVzcyB5b3UgYXJlIGRldmVsb3BpbmcgZ2l0LXN2bi4KKworVGhpcyBtb2R1bGUgYWRhcHRzIHRoZSBDPFNWTjo6RGVsdGE6OkVkaXRvcj4gb2JqZWN0IHJldHVybmVkIGJ5CitDPFNWTjo6RGVsdGE6OmdldF9jb21taXRfZWRpdG9yPiBhbmQgZHJpdmVzIGl0IHRvIGNvbnZleSB0aGUKK2RpZmZlcmVuY2UgYmV0d2VlbiB0d28gZ2l0IHRyZWUgb2JqZWN0cyB0byBhIHJlbW90ZSBTdWJ2ZXJzaW9uCityZXBvc2l0b3J5LgorCitUaGUgaW50ZXJmYWNlIHdpbGwgY2hhbmdlIGFzIGdpdC1zdm4gZXZvbHZlcy4KKworPWhlYWQxIERFUEVOREVOQ0lFUworCitTdWJ2ZXJzaW9uIHBlcmwgYmluZGluZ3MsCit0aGUgY29yZSBMPENhcnA+IGFuZCBMPElPOjpGaWxlPiBtb2R1bGVzLAorYW5kIGdpdCdzIEw8R2l0PiBoZWxwZXIgbW9kdWxlLgorCitDPEdpdDo6U1ZOOjpFZGl0b3I+IGhhcyBub3QgYmVlbiB0ZXN0ZWQgdXNpbmcgY2FsbGVycyBvdGhlciB0aGFuCitCPGdpdC1zdm4+IGl0c2VsZi4KKworPWhlYWQxIFNFRSBBTFNPCisKK0w8U1ZOOjpEZWx0YT4sCitMPEdpdDo6U1ZOOjpGZXRjaGVyPi4KKworPWhlYWQxIElOQ09NUEFUSUJJTElUSUVTCisKK05vbmUgcmVwb3J0ZWQuCisKKz1oZWFkMSBCVUdTCisKK05vbmUuCmRpZmYgLS1naXQgYS9wZXJsL0dpdC9TVk4vRmV0Y2hlci5wbSBiL3BlcmwvR2l0L1NWTi9GZXRjaGVyLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NmE3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vRmV0Y2hlci5wbQpAQCAtMCwwICsxLDYwNCBAQAorcGFja2FnZSBHaXQ6OlNWTjo6RmV0Y2hlcjsKK3VzZSB2YXJzIHF3L0BJU0EgJF9pZ25vcmVfcmVnZXggJF9wcmVzZXJ2ZV9lbXB0eV9kaXJzICRfcGxhY2Vob2xkZXJfZmlsZW5hbWUKKyAgICAgICAgICAgIEBkZWxldGVkX2dwYXRoICVhZGRlZF9wbGFjZWhvbGRlciAkcmVwb19pZC87Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFNWTjo6RGVsdGE7Cit1c2UgQ2FycCBxdy9jcm9hay87Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcvZGlybmFtZS87Cit1c2UgSU86OkZpbGUgcXcvLzsKK3VzZSBHaXQgcXcvY29tbWFuZCBjb21tYW5kX29uZWxpbmUgY29tbWFuZF9ub2lzeSBjb21tYW5kX291dHB1dF9waXBlCisgICAgICAgICAgIGNvbW1hbmRfaW5wdXRfcGlwZSBjb21tYW5kX2Nsb3NlX3BpcGUKKyAgICAgICAgICAgY29tbWFuZF9iaWRpX3BpcGUgY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUvOworQkVHSU4geworCUBJU0EgPSBxdyhTVk46OkRlbHRhOjpFZGl0b3IpOworfQorCisjIGZpbGUgYmF0b24gbWVtYmVyczogcGF0aCwgbW9kZV9hLCBtb2RlX2IsIHBvb2wsIGZoLCBibG9iLCBiYXNlCitzdWIgbmV3IHsKKwlteSAoJGNsYXNzLCAkZ2l0X3N2biwgJHN3aXRjaF9wYXRoKSA9IEBfOworCW15ICRzZWxmID0gU1ZOOjpEZWx0YTo6RWRpdG9yLT5uZXc7CisJYmxlc3MgJHNlbGYsICRjbGFzczsKKwlpZiAoZXhpc3RzICRnaXRfc3ZuLT57bGFzdF9jb21taXR9KSB7CisJCSRzZWxmLT57Y30gPSAkZ2l0X3N2bi0+e2xhc3RfY29tbWl0fTsKKwkJJHNlbGYtPntlbXB0eV9zeW1saW5rc30gPQorCQkgICAgICAgICAgICAgICAgICBfbWFya19lbXB0eV9zeW1saW5rcygkZ2l0X3N2biwgJHN3aXRjaF9wYXRoKTsKKwl9CisKKwkjIHNvbWUgb3B0aW9ucyBhcmUgcmVhZCBnbG9iYWxseSwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGxvY2FsbHkKKwkjIHBlciBbc3ZuLXJlbW90ZSAiLi4uIl0gc2VjdGlvbi4gIENvbW1hbmQtbGluZSBvcHRpb25zIHdpbGwgKk5PVCoKKwkjIG92ZXJyaWRlIG9wdGlvbnMgc2V0IGluIGFuIFtzdm4tcmVtb3RlICIuLi4iXSBzZWN0aW9uCisJJHJlcG9faWQgPSAkZ2l0X3N2bi0+e3JlcG9faWR9OworCW15ICRrID0gInN2bi1yZW1vdGUuJHJlcG9faWQuaWdub3JlLXBhdGhzIjsKKwlteSAkdiA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsICRrKSB9OworCSRzZWxmLT57aWdub3JlX3JlZ2V4fSA9ICR2OworCisJJGsgPSAic3ZuLXJlbW90ZS4kcmVwb19pZC5wcmVzZXJ2ZS1lbXB0eS1kaXJzIjsKKwkkdiA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsICctLWJvb2wnLCAkaykgfTsKKwlpZiAoJHYgJiYgJHYgZXEgJ3RydWUnKSB7CisJCSRfcHJlc2VydmVfZW1wdHlfZGlycyA9IDE7CisJCSRrID0gInN2bi1yZW1vdGUuJHJlcG9faWQucGxhY2Vob2xkZXItZmlsZW5hbWUiOworCQkkdiA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsICRrKSB9OworCQkkX3BsYWNlaG9sZGVyX2ZpbGVuYW1lID0gJHY7CisJfQorCisJIyBMb2FkIHRoZSBsaXN0IG9mIHBsYWNlaG9sZGVyIGZpbGVzIGFkZGVkIGR1cmluZyBwcmV2aW91cyBpbnZvY2F0aW9ucy4KKwkkayA9ICJzdm4tcmVtb3RlLiRyZXBvX2lkLmFkZGVkLXBsYWNlaG9sZGVyIjsKKwkkdiA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldC1hbGwnLCAkaykgfTsKKwlpZiAoJF9wcmVzZXJ2ZV9lbXB0eV9kaXJzICYmICR2KSB7CisJCSMgY29tbWFuZCgpIHByaW50cyBlcnJvcnMgdG8gc3RkZXJyLCBzbyB3ZSBvbmx5IGNhbGwgaXQgaWYKKwkJIyBjb21tYW5kX29uZWxpbmUoKSBzdWNjZWVkZWQuCisJCW15IEB2ID0gY29tbWFuZCgnY29uZmlnJywgJy0tZ2V0LWFsbCcsICRrKTsKKwkJJGFkZGVkX3BsYWNlaG9sZGVyeyBkaXJuYW1lKCRfKSB9ID0gJF8gZm9yZWFjaCBAdjsKKwl9CisKKwkkc2VsZi0+e2VtcHR5fSA9IHt9OworCSRzZWxmLT57ZGlyX3Byb3B9ID0ge307CisJJHNlbGYtPntmaWxlX3Byb3B9ID0ge307CisJJHNlbGYtPnthYnNlbnRfZGlyfSA9IHt9OworCSRzZWxmLT57YWJzZW50X2ZpbGV9ID0ge307CisJcmVxdWlyZSBHaXQ6OkluZGV4SW5mbzsKKwkkc2VsZi0+e2dpaX0gPSAkZ2l0X3N2bi0+dG1wX2luZGV4X2RvKHN1YiB7IEdpdDo6SW5kZXhJbmZvLT5uZXcgfSk7CisJJHNlbGYtPntwYXRobmFtZWVuY29kaW5nfSA9IEdpdDo6Y29uZmlnKCdzdm4ucGF0aG5hbWVlbmNvZGluZycpOworCSRzZWxmOworfQorCisjIHRoaXMgdXNlcyB0aGUgUmEgb2JqZWN0LCBzbyBpdCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZG9fe3N3aXRjaCx1cGRhdGV9LAorIyBub3QgaW5zaWRlIHRoZW0gKHdoZW4gdGhlIEdpdDo6U1ZOOjpGZXRjaGVyIG9iamVjdCBpcyBwYXNzZWQpIHRvCisjIGRvX3tzd2l0Y2gsdXBkYXRlfQorc3ViIF9tYXJrX2VtcHR5X3N5bWxpbmtzIHsKKwlteSAoJGdpdF9zdm4sICRzd2l0Y2hfcGF0aCkgPSBAXzsKKwlteSAkYm9vbCA9IEdpdDo6Y29uZmlnX2Jvb2woJ3N2bi5icm9rZW5TeW1saW5rV29ya2Fyb3VuZCcpOworCXJldHVybiB7fSBpZiAoIWRlZmluZWQoJGJvb2wpKSB8fCAoZGVmaW5lZCgkYm9vbCkgJiYgISAkYm9vbCk7CisKKwlteSAlcmV0OworCW15ICgkcmV2LCAkY210KSA9ICRnaXRfc3ZuLT5sYXN0X3Jldl9jb21taXQ7CisJcmV0dXJuIHt9IHVubGVzcyAoJHJldiAmJiAkY210KTsKKworCSMgYWxsb3cgdGhlIHdhcm5pbmcgdG8gYmUgcHJpbnRlZCBmb3IgZWFjaCByZXZpc2lvbiB3ZSBmZXRjaCB0bworCSMgZW5zdXJlIHRoZSB1c2VyIHNlZXMgaXQuICBUaGUgdXNlciBjYW4gYWxzbyBkaXNhYmxlIHRoZSB3b3JrYXJvdW5kCisJIyBvbiB0aGUgcmVwb3NpdG9yeSBldmVuIHdoaWxlIGdpdCBzdm4gaXMgcnVubmluZyBhbmQgdGhlIG5leHQKKwkjIHJldmlzaW9uIGZldGNoZWQgd2lsbCBza2lwIHRoaXMgZXhwZW5zaXZlIGZ1bmN0aW9uLgorCW15ICRwcmludGVkX3dhcm5pbmc7CisJY2hvbXAobXkgJGVtcHR5X2Jsb2IgPSBgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS1zdGRpbiA8IC9kZXYvbnVsbGApOworCW15ICgkbHMsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9scy10cmVlIC1yIC16LywgJGNtdCk7CisJbG9jYWwgJC8gPSAiXDAiOworCW15ICRwZnggPSBkZWZpbmVkKCRzd2l0Y2hfcGF0aCkgPyAkc3dpdGNoX3BhdGggOiAkZ2l0X3N2bi0+cGF0aDsKKwkkcGZ4IC49ICcvJyBpZiBsZW5ndGgoJHBmeCk7CisJd2hpbGUgKDwkbHM+KSB7CisJCWNob21wOworCQlzL1xBMTAwNjQ0IGJsb2IgJGVtcHR5X2Jsb2JcdC8vbyBvciBuZXh0OworCQl1bmxlc3MgKCRwcmludGVkX3dhcm5pbmcpIHsKKwkJCXByaW50IFNUREVSUiAiU2Nhbm5pbmcgZm9yIGVtcHR5IHN5bWxpbmtzLCAiLAorCQkJICAgICAgICAgICAgICJ0aGlzIG1heSB0YWtlIGEgd2hpbGUgaWYgeW91IGhhdmUgIiwKKwkJCQkgICAgICJtYW55IGVtcHR5IGZpbGVzXG4iLAorCQkJCSAgICAgIllvdSBtYXkgZGlzYWJsZSB0aGlzIHdpdGggYCIsCisJCQkJICAgICAiZ2l0IGNvbmZpZyBzdm4uYnJva2VuU3ltbGlua1dvcmthcm91bmQgIiwKKwkJCQkgICAgICJmYWxzZScuXG4iLAorCQkJCSAgICAgIlRoaXMgbWF5IGJlIGRvbmUgaW4gYSBkaWZmZXJlbnQgIiwKKwkJCQkgICAgICJ0ZXJtaW5hbCB3aXRob3V0IHJlc3RhcnRpbmcgIiwKKwkJCQkgICAgICJnaXQgc3ZuXG4iOworCQkJJHByaW50ZWRfd2FybmluZyA9IDE7CisJCX0KKwkJbXkgJHBhdGggPSAkXzsKKwkJbXkgKHVuZGVmLCAkcHJvcHMpID0KKwkJICAgICAgICAgICAgICAgJGdpdF9zdm4tPnJhLT5nZXRfZmlsZSgkcGZ4LiRwYXRoLCAkcmV2LCB1bmRlZik7CisJCWlmICgkcHJvcHMtPnsnc3ZuOnNwZWNpYWwnfSkgeworCQkJJHJldHskcGF0aH0gPSAxOworCQl9CisJfQorCWNvbW1hbmRfY2xvc2VfcGlwZSgkbHMsICRjdHgpOworCVwlcmV0OworfQorCisjIHJldHVybnMgdHJ1ZSBpZiBhIGdpdmVuIHBhdGggaXMgaW5zaWRlIGEgIi5naXQiIGRpcmVjdG9yeQorc3ViIGluX2RvdF9naXQgeworCSRfWzBdID1+IG17KD86XnwvKVwuZ2l0KD86L3wkKX07Cit9CisKKyMgcmV0dXJuIHZhbHVlOiAwIC0tIGRvbid0IGlnbm9yZSwgMSAtLSBpZ25vcmUKK3N1YiBpc19wYXRoX2lnbm9yZWQgeworCW15ICgkc2VsZiwgJHBhdGgpID0gQF87CisJcmV0dXJuIDEgaWYgaW5fZG90X2dpdCgkcGF0aCk7CisJcmV0dXJuIDEgaWYgZGVmaW5lZCgkc2VsZi0+e2lnbm9yZV9yZWdleH0pICYmCisJICAgICAgICAgICAgJHBhdGggPX4gbSEkc2VsZi0+e2lnbm9yZV9yZWdleH0hOworCXJldHVybiAwIHVubGVzcyBkZWZpbmVkKCRfaWdub3JlX3JlZ2V4KTsKKwlyZXR1cm4gMSBpZiAkcGF0aCA9fiBtISRfaWdub3JlX3JlZ2V4IW87CisJcmV0dXJuIDA7Cit9CisKK3N1YiBzZXRfcGF0aF9zdHJpcCB7CisJbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKKwkkc2VsZi0+e3BhdGhfc3RyaXB9ID0gcXIvXlxRJHBhdGhcRShcL3wkKS8gaWYgbGVuZ3RoICRwYXRoOworfQorCitzdWIgb3Blbl9yb290IHsKKwl7IHBhdGggPT4gJycgfTsKK30KKworc3ViIG9wZW5fZGlyZWN0b3J5IHsKKwlteSAoJHNlbGYsICRwYXRoLCAkcGIsICRyZXYpID0gQF87CisJeyBwYXRoID0+ICRwYXRoIH07Cit9CisKK3N1YiBnaXRfcGF0aCB7CisJbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKKwlpZiAobXkgJGVuYyA9ICRzZWxmLT57cGF0aG5hbWVlbmNvZGluZ30pIHsKKwkJcmVxdWlyZSBFbmNvZGU7CisJCUVuY29kZTo6ZnJvbV90bygkcGF0aCwgJ1VURi04JywgJGVuYyk7CisJfQorCWlmICgkc2VsZi0+e3BhdGhfc3RyaXB9KSB7CisJCSRwYXRoID1+IHMhJHNlbGYtPntwYXRoX3N0cmlwfSEhIG9yCisJCSAgZGllICJGYWlsZWQgdG8gc3RyaXAgcGF0aCAnJHBhdGgnICgkc2VsZi0+e3BhdGhfc3RyaXB9KVxuIjsKKwl9CisJJHBhdGg7Cit9CisKK3N1YiBkZWxldGVfZW50cnkgeworCW15ICgkc2VsZiwgJHBhdGgsICRyZXYsICRwYikgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkcGF0aCk7CisKKwlteSAkZ3BhdGggPSAkc2VsZi0+Z2l0X3BhdGgoJHBhdGgpOworCXJldHVybiB1bmRlZiBpZiAoJGdwYXRoIGVxICcnKTsKKworCSMgcmVtb3ZlIGVudGlyZSBkaXJlY3Rvcmllcy4KKwlteSAoJHRyZWUpID0gKGNvbW1hbmQoJ2xzLXRyZWUnLCAnLXonLCAkc2VsZi0+e2N9LCAiLi8kZ3BhdGgiKQorCSAgICAgICAgICAgICAgICAgPX4gL1xBMDQwMDAwIHRyZWUgKFthLWZcZF17NDB9KVx0XFEkZ3BhdGhcRVwwLyk7CisJaWYgKCR0cmVlKSB7CisJCW15ICgkbHMsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9scy10cmVlCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtciAtLW5hbWUtb25seSAtei8sCisJCQkJICAgICAgICAgICAgICAgICAgICAgJHRyZWUpOworCQlsb2NhbCAkLyA9ICJcMCI7CisJCXdoaWxlICg8JGxzPikgeworCQkJY2hvbXA7CisJCQlteSAkcm1wYXRoID0gIiRncGF0aC8kXyI7CisJCQkkc2VsZi0+e2dpaX0tPnJlbW92ZSgkcm1wYXRoKTsKKwkJCXByaW50ICJcdERcdCRybXBhdGhcbiIgdW5sZXNzICQ6Ol9xOworCQl9CisJCXByaW50ICJcdERcdCRncGF0aC9cbiIgdW5sZXNzICQ6Ol9xOworCQljb21tYW5kX2Nsb3NlX3BpcGUoJGxzLCAkY3R4KTsKKwl9IGVsc2UgeworCQkkc2VsZi0+e2dpaX0tPnJlbW92ZSgkZ3BhdGgpOworCQlwcmludCAiXHREXHQkZ3BhdGhcbiIgdW5sZXNzICQ6Ol9xOworCX0KKwkjIERvbid0IGFkZCB0byBAZGVsZXRlZF9ncGF0aCBpZiB3ZSdyZSBkZWxldGluZyBhIHBsYWNlaG9sZGVyIGZpbGUuCisJcHVzaCBAZGVsZXRlZF9ncGF0aCwgJGdwYXRoIHVubGVzcyAkYWRkZWRfcGxhY2Vob2xkZXJ7ZGlybmFtZSgkcGF0aCl9OworCSRzZWxmLT57ZW1wdHl9LT57JHBhdGh9ID0gMDsKKwl1bmRlZjsKK30KKworc3ViIG9wZW5fZmlsZSB7CisJbXkgKCRzZWxmLCAkcGF0aCwgJHBiLCAkcmV2KSA9IEBfOworCW15ICgkbW9kZSwgJGJsb2IpOworCisJZ290byBvdXQgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkcGF0aCk7CisKKwlteSAkZ3BhdGggPSAkc2VsZi0+Z2l0X3BhdGgoJHBhdGgpOworCSgkbW9kZSwgJGJsb2IpID0gKGNvbW1hbmQoJ2xzLXRyZWUnLCAnLXonLCAkc2VsZi0+e2N9LCAiLi8kZ3BhdGgiKQorCSAgICAgICAgICAgICAgICAgICAgID1+IC9cQShcZHs2fSkgYmxvYiAoW2EtZlxkXXs0MH0pXHRcUSRncGF0aFxFXDAvKTsKKwl1bmxlc3MgKGRlZmluZWQgJG1vZGUgJiYgZGVmaW5lZCAkYmxvYikgeworCQlkaWUgIiRwYXRoIHdhcyBub3QgZm91bmQgaW4gY29tbWl0ICRzZWxmLT57Y30gKHIkcmV2KVxuIjsKKwl9CisJaWYgKCRtb2RlIGVxICcxMDA2NDQnICYmICRzZWxmLT57ZW1wdHlfc3ltbGlua3N9LT57JHBhdGh9KSB7CisJCSRtb2RlID0gJzEyMDAwMCc7CisJfQorb3V0OgorCXsgcGF0aCA9PiAkcGF0aCwgbW9kZV9hID0+ICRtb2RlLCBtb2RlX2IgPT4gJG1vZGUsIGJsb2IgPT4gJGJsb2IsCisJICBwb29sID0+IFNWTjo6UG9vbC0+bmV3LCBhY3Rpb24gPT4gJ00nIH07Cit9CisKK3N1YiBhZGRfZmlsZSB7CisJbXkgKCRzZWxmLCAkcGF0aCwgJHBiLCAkY3BfcGF0aCwgJGNwX3JldikgPSBAXzsKKwlteSAkbW9kZTsKKworCWlmICghJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkcGF0aCkpIHsKKwkJbXkgKCRkaXIsICRmaWxlKSA9ICgkcGF0aCA9fiBtI14oLio/KS8/KFteL10rKSQjKTsKKwkJZGVsZXRlICRzZWxmLT57ZW1wdHl9LT57JGRpcn07CisJCSRtb2RlID0gJzEwMDY0NCc7CisKKwkJaWYgKCRhZGRlZF9wbGFjZWhvbGRlcnskZGlyfSkgeworCQkJIyBSZW1vdmUgb3VyIHBsYWNlaG9sZGVyIGZpbGUsIGlmIHdlIGNyZWF0ZWQgb25lLgorCQkJZGVsZXRlX2VudHJ5KCRzZWxmLCAkYWRkZWRfcGxhY2Vob2xkZXJ7JGRpcn0pCisJCQkJdW5sZXNzICRwYXRoIGVxICRhZGRlZF9wbGFjZWhvbGRlcnskZGlyfTsKKwkJCWRlbGV0ZSAkYWRkZWRfcGxhY2Vob2xkZXJ7JGRpcn0KKwkJfQorCX0KKworCXsgcGF0aCA9PiAkcGF0aCwgbW9kZV9hID0+ICRtb2RlLCBtb2RlX2IgPT4gJG1vZGUsCisJICBwb29sID0+IFNWTjo6UG9vbC0+bmV3LCBhY3Rpb24gPT4gJ0EnIH07Cit9CisKK3N1YiBhZGRfZGlyZWN0b3J5IHsKKwlteSAoJHNlbGYsICRwYXRoLCAkY3BfcGF0aCwgJGNwX3JldikgPSBAXzsKKwlnb3RvIG91dCBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRwYXRoKTsKKwlteSAkZ3BhdGggPSAkc2VsZi0+Z2l0X3BhdGgoJHBhdGgpOworCWlmICgkZ3BhdGggZXEgJycpIHsKKwkJbXkgKCRscywgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKHF3L2xzLXRyZWUKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1yIC0tbmFtZS1vbmx5IC16LywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+e2N9KTsKKwkJbG9jYWwgJC8gPSAiXDAiOworCQl3aGlsZSAoPCRscz4pIHsKKwkJCWNob21wOworCQkJJHNlbGYtPntnaWl9LT5yZW1vdmUoJF8pOworCQkJcHJpbnQgIlx0RFx0JF9cbiIgdW5sZXNzICQ6Ol9xOworCQkJcHVzaCBAZGVsZXRlZF9ncGF0aCwgJGdwYXRoOworCQl9CisJCWNvbW1hbmRfY2xvc2VfcGlwZSgkbHMsICRjdHgpOworCQkkc2VsZi0+e2VtcHR5fS0+eyRwYXRofSA9IDA7CisJfQorCW15ICgkZGlyLCAkZmlsZSkgPSAoJHBhdGggPX4gbSNeKC4qPykvPyhbXi9dKykkIyk7CisJZGVsZXRlICRzZWxmLT57ZW1wdHl9LT57JGRpcn07CisJJHNlbGYtPntlbXB0eX0tPnskcGF0aH0gPSAxOworCisJaWYgKCRhZGRlZF9wbGFjZWhvbGRlcnskZGlyfSkgeworCQkjIFJlbW92ZSBvdXIgcGxhY2Vob2xkZXIgZmlsZSwgaWYgd2UgY3JlYXRlZCBvbmUuCisJCWRlbGV0ZV9lbnRyeSgkc2VsZiwgJGFkZGVkX3BsYWNlaG9sZGVyeyRkaXJ9KTsKKwkJZGVsZXRlICRhZGRlZF9wbGFjZWhvbGRlcnskZGlyfQorCX0KKworb3V0OgorCXsgcGF0aCA9PiAkcGF0aCB9OworfQorCitzdWIgY2hhbmdlX2Rpcl9wcm9wIHsKKwlteSAoJHNlbGYsICRkYiwgJHByb3AsICR2YWx1ZSkgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkZGItPntwYXRofSk7CisJJHNlbGYtPntkaXJfcHJvcH0tPnskZGItPntwYXRofX0gfHw9IHt9OworCSRzZWxmLT57ZGlyX3Byb3B9LT57JGRiLT57cGF0aH19LT57JHByb3B9ID0gJHZhbHVlOworCXVuZGVmOworfQorCitzdWIgYWJzZW50X2RpcmVjdG9yeSB7CisJbXkgKCRzZWxmLCAkcGF0aCwgJHBiKSA9IEBfOworCXJldHVybiB1bmRlZiBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRwYXRoKTsKKwkkc2VsZi0+e2Fic2VudF9kaXJ9LT57JHBiLT57cGF0aH19IHx8PSBbXTsKKwlwdXNoIEB7JHNlbGYtPnthYnNlbnRfZGlyfS0+eyRwYi0+e3BhdGh9fX0sICRwYXRoOworCXVuZGVmOworfQorCitzdWIgYWJzZW50X2ZpbGUgeworCW15ICgkc2VsZiwgJHBhdGgsICRwYikgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkcGF0aCk7CisJJHNlbGYtPnthYnNlbnRfZmlsZX0tPnskcGItPntwYXRofX0gfHw9IFtdOworCXB1c2ggQHskc2VsZi0+e2Fic2VudF9maWxlfS0+eyRwYi0+e3BhdGh9fX0sICRwYXRoOworCXVuZGVmOworfQorCitzdWIgY2hhbmdlX2ZpbGVfcHJvcCB7CisJbXkgKCRzZWxmLCAkZmIsICRwcm9wLCAkdmFsdWUpID0gQF87CisJcmV0dXJuIHVuZGVmIGlmICRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJGZiLT57cGF0aH0pOworCWlmICgkcHJvcCBlcSAnc3ZuOmV4ZWN1dGFibGUnKSB7CisJCWlmICgkZmItPnttb2RlX2J9ICE9IDEyMDAwMCkgeworCQkJJGZiLT57bW9kZV9ifSA9IGRlZmluZWQgJHZhbHVlID8gMTAwNzU1IDogMTAwNjQ0OworCQl9CisJfSBlbHNpZiAoJHByb3AgZXEgJ3N2bjpzcGVjaWFsJykgeworCQkkZmItPnttb2RlX2J9ID0gZGVmaW5lZCAkdmFsdWUgPyAxMjAwMDAgOiAxMDA2NDQ7CisJfSBlbHNlIHsKKwkJJHNlbGYtPntmaWxlX3Byb3B9LT57JGZiLT57cGF0aH19IHx8PSB7fTsKKwkJJHNlbGYtPntmaWxlX3Byb3B9LT57JGZiLT57cGF0aH19LT57JHByb3B9ID0gJHZhbHVlOworCX0KKwl1bmRlZjsKK30KKworc3ViIGFwcGx5X3RleHRkZWx0YSB7CisJbXkgKCRzZWxmLCAkZmIsICRleHApID0gQF87CisJcmV0dXJuIHVuZGVmIGlmICRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJGZiLT57cGF0aH0pOworCW15ICRmaCA9ICQ6Ol9yZXBvc2l0b3J5LT50ZW1wX2FjcXVpcmUoJ3N2bl9kZWx0YScpOworCSMgJGZoIGdldHMgYXV0by1jbG9zZWQoKSBieSBTVk46OlR4RGVsdGE6OmFwcGx5KCksCisJIyAoYnV0ICRiYXNlIGRvZXMgbm90LCkgc28gZHVwKCkgaXQgZm9yIHJlYWRpbmcgaW4gY2xvc2VfZmlsZQorCW9wZW4gbXkgJGR1cCwgJzwmJywgJGZoIG9yIGNyb2FrICQhOworCW15ICRiYXNlID0gJDo6X3JlcG9zaXRvcnktPnRlbXBfYWNxdWlyZSgnZ2l0X2Jsb2InKTsKKworCWlmICgkZmItPntibG9ifSkgeworCQlteSAoJGJhc2VfaXNfbGluaywgJHNpemUpOworCisJCWlmICgkZmItPnttb2RlX2F9IGVxICcxMjAwMDAnICYmCisJCSAgICAhICRzZWxmLT57ZW1wdHlfc3ltbGlua3N9LT57JGZiLT57cGF0aH19KSB7CisJCQlwcmludCAkYmFzZSAnbGluayAnIG9yIGRpZSAicHJpbnQgJCFcbiI7CisJCQkkYmFzZV9pc19saW5rID0gMTsKKwkJfQorCXJldHJ5OgorCQkkc2l6ZSA9ICQ6Ol9yZXBvc2l0b3J5LT5jYXRfYmxvYigkZmItPntibG9ifSwgJGJhc2UpOworCQlkaWUgIkZhaWxlZCB0byByZWFkIG9iamVjdCAkZmItPntibG9ifSIgaWYgKCRzaXplIDwgMCk7CisKKwkJaWYgKGRlZmluZWQgJGV4cCkgeworCQkJc2VlayAkYmFzZSwgMCwgMCBvciBjcm9hayAkITsKKwkJCW15ICRnb3QgPSA6Om1kNXN1bSgkYmFzZSk7CisJCQlpZiAoJGdvdCBuZSAkZXhwKSB7CisJCQkJbXkgJGVyciA9ICJDaGVja3N1bSBtaXNtYXRjaDogIi4KKwkJCQkgICAgICAgIiRmYi0+e3BhdGh9ICRmYi0+e2Jsb2J9XG4iIC4KKwkJCQkgICAgICAgImV4cGVjdGVkOiAkZXhwXG4iIC4KKwkJCQkgICAgICAgIiAgICAgZ290OiAkZ290XG4iOworCQkJCWlmICgkYmFzZV9pc19saW5rKSB7CisJCQkJCXdhcm4gJGVyciwKKwkJCQkJICAgICAiUmV0cnlpbmcuLi4gKHBvc3NpYmx5ICIsCisJCQkJCSAgICAgImEgYmFkIHN5bWxpbmsgZnJvbSBTVk4pXG4iOworCQkJCQkkOjpfcmVwb3NpdG9yeS0+dGVtcF9yZXNldCgkYmFzZSk7CisJCQkJCSRiYXNlX2lzX2xpbmsgPSAwOworCQkJCQlnb3RvIHJldHJ5OworCQkJCX0KKwkJCQlkaWUgJGVycjsKKwkJCX0KKwkJfQorCX0KKwlzZWVrICRiYXNlLCAwLCAwIG9yIGNyb2FrICQhOworCSRmYi0+e2ZofSA9ICRmaDsKKwkkZmItPntiYXNlfSA9ICRiYXNlOworCVsgU1ZOOjpUeERlbHRhOjphcHBseSgkYmFzZSwgJGR1cCwgdW5kZWYsICRmYi0+e3BhdGh9LCAkZmItPntwb29sfSkgXTsKK30KKworc3ViIGNsb3NlX2ZpbGUgeworCW15ICgkc2VsZiwgJGZiLCAkZXhwKSA9IEBfOworCXJldHVybiB1bmRlZiBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRmYi0+e3BhdGh9KTsKKworCW15ICRoYXNoOworCW15ICRwYXRoID0gJHNlbGYtPmdpdF9wYXRoKCRmYi0+e3BhdGh9KTsKKwlpZiAobXkgJGZoID0gJGZiLT57Zmh9KSB7CisJCWlmIChkZWZpbmVkICRleHApIHsKKwkJCXNlZWsoJGZoLCAwLCAwKSBvciBjcm9hayAkITsKKwkJCW15ICRnb3QgPSA6Om1kNXN1bSgkZmgpOworCQkJaWYgKCRnb3QgbmUgJGV4cCkgeworCQkJCWRpZSAiQ2hlY2tzdW0gbWlzbWF0Y2g6ICRwYXRoXG4iLAorCQkJCSAgICAiZXhwZWN0ZWQ6ICRleHBcbiAgICBnb3Q6ICRnb3RcbiI7CisJCQl9CisJCX0KKwkJaWYgKCRmYi0+e21vZGVfYn0gPT0gMTIwMDAwKSB7CisJCQlzeXNzZWVrKCRmaCwgMCwgMCkgb3IgY3JvYWsgJCE7CisJCQlteSAkcmQgPSBzeXNyZWFkKCRmaCwgbXkgJGJ1ZiwgNSk7CisKKwkJCWlmICghZGVmaW5lZCAkcmQpIHsKKwkJCQljcm9hayAic3lzcmVhZDogJCFcbiI7CisJCQl9IGVsc2lmICgkcmQgPT0gMCkgeworCQkJCXdhcm4gIiRwYXRoIGhhcyBtb2RlIDEyMDAwMCIsCisJCQkJICAgICAiIGJ1dCBpdCBwb2ludHMgdG8gbm90aGluZ1xuIiwKKwkJCQkgICAgICJjb252ZXJ0aW5nIHRvIGFuIGVtcHR5IGZpbGUgd2l0aCBtb2RlIiwKKwkJCQkgICAgICIgMTAwNjQ0XG4iOworCQkJCSRmYi0+e21vZGVfYn0gPSAnMTAwNjQ0JzsKKwkJCX0gZWxzaWYgKCRidWYgbmUgJ2xpbmsgJykgeworCQkJCXdhcm4gIiRwYXRoIGhhcyBtb2RlIDEyMDAwMCIsCisJCQkJICAgICAiIGJ1dCBpcyBub3QgYSBsaW5rXG4iOworCQkJfSBlbHNlIHsKKwkJCQlteSAkdG1wX2ZoID0gJDo6X3JlcG9zaXRvcnktPnRlbXBfYWNxdWlyZSgKKwkJCQkJJ3N2bl9oYXNoJyk7CisJCQkJbXkgJHJlczsKKwkJCQl3aGlsZSAoJHJlcyA9IHN5c3JlYWQoJGZoLCBteSAkc3RyLCAxMDI0KSkgeworCQkJCQlteSAkb3V0ID0gc3lzd3JpdGUoJHRtcF9maCwgJHN0ciwgJHJlcyk7CisJCQkJCWRlZmluZWQoJG91dCkgJiYgJG91dCA9PSAkcmVzCisJCQkJCQlvciBjcm9haygid3JpdGUgIiwKKwkJCQkJCQlHaXQ6OnRlbXBfcGF0aCgkdG1wX2ZoKSwKKwkJCQkJCQkiOiAkIVxuIik7CisJCQkJfQorCQkJCWRlZmluZWQgJHJlcyBvciBjcm9hayAkITsKKworCQkJCSgkZmgsICR0bXBfZmgpID0gKCR0bXBfZmgsICRmaCk7CisJCQkJR2l0Ojp0ZW1wX3JlbGVhc2UoJHRtcF9maCwgMSk7CisJCQl9CisJCX0KKworCQkkaGFzaCA9ICQ6Ol9yZXBvc2l0b3J5LT5oYXNoX2FuZF9pbnNlcnRfb2JqZWN0KAorCQkJCUdpdDo6dGVtcF9wYXRoKCRmaCkpOworCQkkaGFzaCA9fiAvXlthLWZcZF17NDB9JC8gb3IgZGllICJub3QgYSBzaGExOiAkaGFzaFxuIjsKKworCQlHaXQ6OnRlbXBfcmVsZWFzZSgkZmItPntiYXNlfSwgMSk7CisJCUdpdDo6dGVtcF9yZWxlYXNlKCRmaCwgMSk7CisJfSBlbHNlIHsKKwkJJGhhc2ggPSAkZmItPntibG9ifSBvciBkaWUgIm5vIGJsb2IgaW5mb3JtYXRpb25cbiI7CisJfQorCSRmYi0+e3Bvb2x9LT5jbGVhcjsKKwkkc2VsZi0+e2dpaX0tPnVwZGF0ZSgkZmItPnttb2RlX2J9LCAkaGFzaCwgJHBhdGgpIG9yIGNyb2FrICQhOworCXByaW50ICJcdCRmYi0+e2FjdGlvbn1cdCRwYXRoXG4iIGlmICRmYi0+e2FjdGlvbn0gJiYgISAkOjpfcTsKKwl1bmRlZjsKK30KKworc3ViIGFib3J0X2VkaXQgeworCW15ICRzZWxmID0gc2hpZnQ7CisJJHNlbGYtPntucn0gPSAkc2VsZi0+e2dpaX0tPntucn07CisJZGVsZXRlICRzZWxmLT57Z2lpfTsKKwkkc2VsZi0+U1VQRVI6OmFib3J0X2VkaXQoQF8pOworfQorCitzdWIgY2xvc2VfZWRpdCB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKworCWlmICgkX3ByZXNlcnZlX2VtcHR5X2RpcnMpIHsKKwkJbXkgQGVtcHR5X2RpcnM7CisKKwkJIyBBbnkgZW50cnkgZmxhZ2dlZCBhcyBlbXB0eSB0aGF0IGFsc28gaGFzIGFuIGFzc29jaWF0ZWQKKwkJIyBkaXJfcHJvcCByZXByZXNlbnRzIGEgbmV3bHkgY3JlYXRlZCBlbXB0eSBkaXJlY3RvcnkuCisJCWZvcmVhY2ggbXkgJGkgKGtleXMgJXskc2VsZi0+e2VtcHR5fX0pIHsKKwkJCXB1c2ggQGVtcHR5X2RpcnMsICRpIGlmIGV4aXN0cyAkc2VsZi0+e2Rpcl9wcm9wfS0+eyRpfTsKKwkJfQorCisJCSMgU2VhcmNoIGZvciBkaXJlY3RvcmllcyB0aGF0IGhhdmUgYmVjb21lIGVtcHR5IGR1ZSBzdWJzZXF1ZW50CisJCSMgZmlsZSBkZWxldGVzLgorCQlwdXNoIEBlbXB0eV9kaXJzLCAkc2VsZi0+ZmluZF9lbXB0eV9kaXJlY3RvcmllcygpOworCisJCSMgRmluYWxseSwgYWRkIGEgcGxhY2Vob2xkZXIgZmlsZSB0byBlYWNoIGVtcHR5IGRpcmVjdG9yeS4KKwkJJHNlbGYtPmFkZF9wbGFjZWhvbGRlcl9maWxlKCRfKSBmb3JlYWNoIChAZW1wdHlfZGlycyk7CisKKwkJJHNlbGYtPnN0YXNoX3BsYWNlaG9sZGVyX2xpc3QoKTsKKwl9CisKKwkkc2VsZi0+e2dpdF9jb21taXRfb2t9ID0gMTsKKwkkc2VsZi0+e25yfSA9ICRzZWxmLT57Z2lpfS0+e25yfTsKKwlkZWxldGUgJHNlbGYtPntnaWl9OworCSRzZWxmLT5TVVBFUjo6Y2xvc2VfZWRpdChAXyk7Cit9CisKK3N1YiBmaW5kX2VtcHR5X2RpcmVjdG9yaWVzIHsKKwlteSAoJHNlbGYpID0gQF87CisJbXkgQGVtcHR5X2RpcnM7CisJbXkgJWRpcnMgPSBtYXAgeyBkaXJuYW1lKCRfKSA9PiAxIH0gQGRlbGV0ZWRfZ3BhdGg7CisKKwlmb3JlYWNoIG15ICRkaXIgKHNvcnQga2V5cyAlZGlycykgeworCQluZXh0IGlmICRkaXIgZXEgIi4iOworCisJCSMgSWYgdGhlcmUgaGF2ZSBiZWVuIGFueSBhZGRpdGlvbnMgdG8gdGhpcyBkaXJlY3RvcnksIHRoZXJlIGlzCisJCSMgbm8gcmVhc29uIHRvIGNoZWNrIGlmIGl0IGlzIGVtcHR5LgorCQlteSAkc2tpcF9hZGRlZCA9IDA7CisJCWZvcmVhY2ggbXkgJHQgKHF3L2Rpcl9wcm9wIGZpbGVfcHJvcC8pIHsKKwkJCWZvcmVhY2ggbXkgJHBhdGggKGtleXMgJXsgJHNlbGYtPnskdH0gfSkgeworCQkJCWlmIChleGlzdHMgJHNlbGYtPnskdH0tPntkaXJuYW1lKCRwYXRoKX0pIHsKKwkJCQkJJHNraXBfYWRkZWQgPSAxOworCQkJCQlsYXN0OworCQkJCX0KKwkJCX0KKwkJCWxhc3QgaWYgJHNraXBfYWRkZWQ7CisJCX0KKwkJbmV4dCBpZiAkc2tpcF9hZGRlZDsKKworCQkjIFVzZSBgZ2l0IGxzLXRyZWVgIHRvIGdldCB0aGUgZmlsZW5hbWVzIG9mIHRoaXMgZGlyZWN0b3J5CisJCSMgdGhhdCBleGlzdGVkIHByaW9yIHRvIHRoaXMgcGFydGljdWxhciBjb21taXQuCisJCW15ICRscyA9IGNvbW1hbmQoJ2xzLXRyZWUnLCAnLXonLCAnLS1uYW1lLW9ubHknLAorCQkJCSAkc2VsZi0+e2N9LCAiJGRpci8iKTsKKwkJbXkgJWZpbGVzID0gbWFwIHsgJF8gPT4gMSB9IHNwbGl0KC9cMC8sICRscyk7CisKKwkJIyBSZW1vdmUgdGhlIGZpbGVuYW1lcyB0aGF0IHdlcmUgZGVsZXRlZCBkdXJpbmcgdGhpcyBjb21taXQuCisJCWRlbGV0ZSAkZmlsZXN7JF99IGZvcmVhY2ggKEBkZWxldGVkX2dwYXRoKTsKKworCQkjIFJlcG9ydCB0aGUgZGlyZWN0b3J5IGlmIHRoZXJlIGFyZSBubyBmaWxlbmFtZXMgbGVmdC4KKwkJcHVzaCBAZW1wdHlfZGlycywgJGRpciB1bmxlc3MgKHNjYWxhciAlZmlsZXMpOworCX0KKwlAZW1wdHlfZGlyczsKK30KKworc3ViIGFkZF9wbGFjZWhvbGRlcl9maWxlIHsKKwlteSAoJHNlbGYsICRkaXIpID0gQF87CisJbXkgJHBhdGggPSAiJGRpci8kX3BsYWNlaG9sZGVyX2ZpbGVuYW1lIjsKKwlteSAkZ3BhdGggPSAkc2VsZi0+Z2l0X3BhdGgoJHBhdGgpOworCisJbXkgJGZoID0gJDo6X3JlcG9zaXRvcnktPnRlbXBfYWNxdWlyZSgkZ3BhdGgpOworCW15ICRoYXNoID0gJDo6X3JlcG9zaXRvcnktPmhhc2hfYW5kX2luc2VydF9vYmplY3QoR2l0Ojp0ZW1wX3BhdGgoJGZoKSk7CisJR2l0Ojp0ZW1wX3JlbGVhc2UoJGZoLCAxKTsKKwkkc2VsZi0+e2dpaX0tPnVwZGF0ZSgnMTAwNjQ0JywgJGhhc2gsICRncGF0aCkgb3IgY3JvYWsgJCE7CisKKwkjIFRoZSBkaXJlY3Rvcnkgc2hvdWxkIG5vIGxvbmdlciBiZSBjb25zaWRlcmVkIGVtcHR5LgorCWRlbGV0ZSAkc2VsZi0+e2VtcHR5fS0+eyRkaXJ9IGlmIGV4aXN0cyAkc2VsZi0+e2VtcHR5fS0+eyRkaXJ9OworCisJIyBLZWVwIHRyYWNrIG9mIGFueSBwbGFjZWhvbGRlciBmaWxlcyB3ZSBjcmVhdGUuCisJJGFkZGVkX3BsYWNlaG9sZGVyeyRkaXJ9ID0gJHBhdGg7Cit9CisKK3N1YiBzdGFzaF9wbGFjZWhvbGRlcl9saXN0IHsKKwlteSAoJHNlbGYpID0gQF87CisJbXkgJGsgPSAic3ZuLXJlbW90ZS4kcmVwb19pZC5hZGRlZC1wbGFjZWhvbGRlciI7CisJbXkgJHYgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQtYWxsJywgJGspIH07CisJY29tbWFuZF9ub2lzeSgnY29uZmlnJywgJy0tdW5zZXQtYWxsJywgJGspIGlmICR2OworCWZvcmVhY2ggKHZhbHVlcyAlYWRkZWRfcGxhY2Vob2xkZXIpIHsKKwkJY29tbWFuZF9ub2lzeSgnY29uZmlnJywgJy0tYWRkJywgJGssICRfKTsKKwl9Cit9CisKKzE7CitfX0VORF9fCisKK0dpdDo6U1ZOOjpGZXRjaGVyIC0gdHJlZSBkZWx0YSBjb25zdW1lciBmb3IgImdpdCBzdm4gZmV0Y2giCisKKz1oZWFkMSBTWU5PUFNJUworCisgICAgdXNlIFNWTjo6Q29yZTsKKyAgICB1c2UgU1ZOOjpSYTsKKyAgICB1c2UgR2l0OjpTVk47CisgICAgdXNlIEdpdDo6U1ZOOjpGZXRjaGVyOworICAgIHVzZSBHaXQ7CisKKyAgICBteSAkZ3MgPSBHaXQ6OlNWTi0+ZmluZF9ieV91cmwoJHVybCk7CisgICAgbXkgJHJhID0gU1ZOOjpSYS0+bmV3KHVybCA9PiAkdXJsKTsKKyAgICBteSAkZWRpdG9yID0gR2l0OjpTVk46OkZldGNoZXItPm5ldygkZ3MpOworICAgIG15ICRyZXBvcnRlciA9ICRyYS0+ZG9fdXBkYXRlKCRTVk46OkNvcmU6OklOVkFMSURfUkVWTlVNLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAkZWRpdG9yKTsKKyAgICAkcmVwb3J0ZXItPnNldF9wYXRoKCcnLCAkb2xkX3JldiwgMCk7CisgICAgJHJlcG9ydGVyLT5maW5pc2hfcmVwb3J0OworICAgIG15ICR0cmVlID0gJGdzLT50bXBfaW5kZXhfZG8oc3ViIHsgY29tbWFuZF9vbmVsaW5lKCd3cml0ZS10cmVlJykgfSk7CisKKyAgICBmb3JlYWNoIG15ICRwYXRoIChrZXlzICV7JGVkaXRvci0+e2Rpcl9wcm9wfSkgeworICAgICAgICBteSAkcHJvcHMgPSAkZWRpdG9yLT57ZGlyX3Byb3B9eyRwYXRofTsKKyAgICAgICAgZm9yZWFjaCBteSAkcHJvcCAoa2V5cyAlJHByb3BzKSB7CisgICAgICAgICAgICBwcmludCAicHJvcGVydHkgJHByb3AgYXQgJHBhdGggY2hhbmdlZCB0byAkcHJvcHMtPnskcHJvcH1cbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yZWFjaCBteSAkcGF0aCAoa2V5cyAleyRlZGl0b3ItPntlbXB0eX0pIHsKKyAgICAgICAgbXkgJGFjdGlvbiA9ICRlZGl0b3ItPntlbXB0eX17JHBhdGh9ID8gJ2FkZGVkJyA6ICdyZW1vdmVkJzsKKyAgICAgICAgcHJpbnQgImVtcHR5IGRpcmVjdG9yeSAkcGF0aCAkYWN0aW9uXG4iOworICAgIH0KKyAgICBmb3JlYWNoIG15ICRwYXRoIChrZXlzICV7JGVkaXRvci0+e2ZpbGVfcHJvcH0pIHsgLi4uIH0KKyAgICBmb3JlYWNoIG15ICRwYXJlbnQgKGtleXMgJXskZWRpdG9yLT57YWJzZW50X2Rpcn19KSB7CisgICAgICAgIG15IEBjaGlsZHJlbiA9IEB7JGVkaXRvci0+e2Fic3RlbnRfZGlyfXskcGFyZW50fX07CisgICAgICAgIHByaW50ICJjYW5ub3QgZmV0Y2ggZGlyZWN0b3J5ICRwYXJlbnQvJF86IG5vdCBhdXRob3JpemVkP1xuIgorICAgICAgICAgICAgZm9yZWFjaCBAY2hpbGRyZW47CisgICAgfQorICAgIGZvcmVhY2ggbXkgJHBhcmVudCAoa2V5cyAleyRlZGl0b3ItPnthYnNlbnRfZmlsZX0pIHsgLi4uIH0KKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgaXMgYSBzdWJjbGFzcyBvZiBDPFNWTjo6RGVsdGE6OkVkaXRvcj4sIHdoaWNoIG1lYW5zIGl0IGltcGxlbWVudHMKK2NhbGxiYWNrcyB0byBhY3QgYXMgYSBjb25zdW1lciBvZiBTdWJ2ZXJzaW9uIHRyZWUgZGVsdGFzLiAgVGhpcworcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBjYWxsYmFja3MgaXMgbWVhbnQgdG8gc3RvcmUKK2luZm9ybWF0aW9uIGFib3V0IHRoZSByZXN1bHRpbmcgY29udGVudCB3aGljaCBCPGdpdCBzdm4gZmV0Y2g+IGNvdWxkCit1c2UgdG8gcG9wdWxhdGUgbmV3IGNvbW1pdHMgYW5kIG5ldyBlbnRyaWVzIGZvciBGPHVuaGFuZGxlZC5sb2c+LgorTW9yZSBzcGVjaWZpY2FsbHk6CisKKz1vdmVyCisKKz1pdGVtICogQWRkaXRpb25zLCByZW1vdmFscywgYW5kIG1vZGlmaWNhdGlvbnMgb2YgZmlsZXMgYXJlIHByb3BhZ2F0ZWQKK3RvIGdpdC1zdm4ncyBpbmRleCBmaWxlIEY8JEdJVF9ESVIvc3ZuLyRyZWZuYW1lL2luZGV4PiB1c2luZworQjxnaXQgdXBkYXRlLWluZGV4Pi4KKworPWl0ZW0gKiBDaGFuZ2VzIGluIFN1YnZlcnNpb24gcGF0aCBwcm9wZXJ0aWVzIGFyZSByZWNvcmRlZCBpbiB0aGUKK0M8ZGlyX3Byb3A+IGFuZCBDPGZpbGVfcHJvcD4gZmllbGRzICh3aGljaCBhcmUgaGFzaGVzKS4KKworPWl0ZW0gKiBBZGRpdGlvbiBhbmQgcmVtb3ZhbCBvZiBlbXB0eSBkaXJlY3RvcmllcyBhcmUgaW5kaWNhdGVkIGJ5CitlbnRyaWVzIHdpdGggdmFsdWUgMSBhbmQgMCByZXNwZWN0aXZlbHkgaW4gdGhlIEM8ZW1wdHk+IGhhc2guCisKKz1pdGVtICogUGF0aHMgdGhhdCBhcmUgcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbnZleWVkIChwcmVzdW1hYmx5IGR1ZQordG8gcGVybWlzc2lvbnMpIGFyZSByZWNvcmRlZCBpbiB0aGUgQzxhYnNlbnRfZmlsZT4gYW5kCitDPGFic2VudF9kaXJzPiBoYXNoZXMuICBGb3IgZWFjaCBrZXksIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGlzCithIGxpc3Qgb2YgcGF0aHMgdW5kZXIgdGhhdCBkaXJlY3RvcnkgdGhhdCB3ZXJlIHByZXNlbnQgYnV0Citjb3VsZCBub3QgYmUgY29udmV5ZWQuCisKKz1iYWNrCisKK1RoZSBpbnRlcmZhY2UgaXMgdW5zdGFibGUuICBEbyBub3QgdXNlIHRoaXMgbW9kdWxlIHVubGVzcyB5b3UgYXJlCitkZXZlbG9waW5nIGdpdC1zdm4uCisKKz1oZWFkMSBERVBFTkRFTkNJRVMKKworTDxTVk46OkRlbHRhPiBmcm9tIHRoZSBTdWJ2ZXJzaW9uIHBlcmwgYmluZGluZ3MsCit0aGUgY29yZSBMPENhcnA+LCBMPEZpbGU6OkJhc2VuYW1lPiwgYW5kIEw8SU86OkZpbGU+IG1vZHVsZXMsCithbmQgZ2l0J3MgTDxHaXQ+IGhlbHBlciBtb2R1bGUuCisKK0M8R2l0OjpTVk46OkZldGNoZXI+IGhhcyBub3QgYmVlbiB0ZXN0ZWQgdXNpbmcgY2FsbGVycyBvdGhlciB0aGFuCitCPGdpdC1zdm4+IGl0c2VsZi4KKworPWhlYWQxIFNFRSBBTFNPCisKK0w8U1ZOOjpEZWx0YT4sCitMPEdpdDo6U1ZOOjpFZGl0b3I+LgorCis9aGVhZDEgSU5DT01QQVRJQklMSVRJRVMKKworTm9uZSByZXBvcnRlZC4KKworPWhlYWQxIEJVR1MKKworTm9uZS4KZGlmZiAtLWdpdCBhL3BlcmwvR2l0L1NWTi9HbG9iU3BlYy5wbSBiL3BlcmwvR2l0L1NWTi9HbG9iU3BlYy5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTVmNWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvU1ZOL0dsb2JTcGVjLnBtCkBAIC0wLDAgKzEsNjEgQEAKK3BhY2thZ2UgR2l0OjpTVk46Okdsb2JTcGVjOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworc3ViIG5ldyB7CisJbXkgKCRjbGFzcywgJGdsb2IsICRwYXR0ZXJuX29rKSA9IEBfOworCW15ICRyZSA9ICRnbG9iOworCSRyZSA9fiBzIS8rJCEhZzsgIyBubyBuZWVkIGZvciB0cmFpbGluZyBzbGFzaGVzCisJbXkgKEBsZWZ0LCBAcmlnaHQsIEBwYXR0ZXJucyk7CisJbXkgJHN0YXRlID0gImxlZnQiOworCW15ICRkaWVfbXNnID0gIk9ubHkgb25lIHNldCBvZiB3aWxkY2FyZCBkaXJlY3RvcmllcyAiIC4KKwkJCQkiKGUuZy4gJyonIG9yICcqLyovKicpIGlzIHN1cHBvcnRlZDogJyRnbG9iJ1xuIjsKKwlmb3IgbXkgJHBhcnQgKHNwbGl0KG18L3wsICRnbG9iKSkgeworCQlpZiAoJHBhcnQgPX4gL1wqLyAmJiAkcGFydCBuZSAiKiIpIHsKKwkJCWRpZSAiSW52YWxpZCBwYXR0ZXJuIGluICckZ2xvYic6ICRwYXJ0XG4iOworCQl9IGVsc2lmICgkcGF0dGVybl9vayAmJiAkcGFydCA9fiAvW3t9XS8gJiYKKwkJCSAkcGFydCAhfiAvXlx7W157fV0rXH0vKSB7CisJCQlkaWUgIkludmFsaWQgcGF0dGVybiBpbiAnJGdsb2InOiAkcGFydFxuIjsKKwkJfQorCQlpZiAoJHBhcnQgZXEgIioiKSB7CisJCQlkaWUgJGRpZV9tc2cgaWYgJHN0YXRlIGVxICJyaWdodCI7CisJCQkkc3RhdGUgPSAicGF0dGVybiI7CisJCQlwdXNoKEBwYXR0ZXJucywgIlteL10qIik7CisJCX0gZWxzaWYgKCRwYXR0ZXJuX29rICYmICRwYXJ0ID1+IC9eXHsoLiopXH0kLykgeworCQkJZGllICRkaWVfbXNnIGlmICRzdGF0ZSBlcSAicmlnaHQiOworCQkJJHN0YXRlID0gInBhdHRlcm4iOworCQkJbXkgJHAgPSBxdW90ZW1ldGEoJDEpOworCQkJJHAgPX4gcy9cXCwvfC9nOworCQkJcHVzaChAcGF0dGVybnMsICIoPzokcCkiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgkc3RhdGUgZXEgImxlZnQiKSB7CisJCQkJcHVzaChAbGVmdCwgJHBhcnQpOworCQkJfSBlbHNlIHsKKwkJCQlwdXNoKEByaWdodCwgJHBhcnQpOworCQkJCSRzdGF0ZSA9ICJyaWdodCI7CisJCQl9CisJCX0KKwl9CisJbXkgJGRlcHRoID0gQHBhdHRlcm5zOworCWlmICgkZGVwdGggPT0gMCkgeworCQlkaWUgIk9uZSAnKicgaXMgbmVlZGVkIGluIGdsb2I6ICckZ2xvYidcbiI7CisJfQorCW15ICRsZWZ0ID0gam9pbignLycsIEBsZWZ0KTsKKwlteSAkcmlnaHQgPSBqb2luKCcvJywgQHJpZ2h0KTsKKwkkcmUgPSBqb2luKCcvJywgQHBhdHRlcm5zKTsKKwkkcmUgPSBqb2luKCdcLycsCisJCSAgIGdyZXAobGVuZ3RoLCBxdW90ZW1ldGEoJGxlZnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCRyZSkoPz0vfFwkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlbWV0YSgkcmlnaHQpKSk7CisJbXkgJGxlZnRfcmUgPSBxci9eXC9cUSRsZWZ0XEUoXC98JCkvOworCWJsZXNzIHsgbGVmdCA9PiAkbGVmdCwgcmlnaHQgPT4gJHJpZ2h0LCBsZWZ0X3JlZ2V4ID0+ICRsZWZ0X3JlLAorCSAgICAgICAgcmVnZXggPT4gcXIvJHJlLywgZ2xvYiA9PiAkZ2xvYiwgZGVwdGggPT4gJGRlcHRoIH0sICRjbGFzczsKK30KKworc3ViIGZ1bGxfcGF0aCB7CisJbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKKwlyZXR1cm4gKGxlbmd0aCAkc2VsZi0+e2xlZnR9ID8gIiRzZWxmLT57bGVmdH0vIiA6ICcnKSAuCisJICAgICAgICRwYXRoIC4gKGxlbmd0aCAkc2VsZi0+e3JpZ2h0fSA/ICIvJHNlbGYtPntyaWdodH0iIDogJycpOworfQorCisxOwpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL0xvZy5wbSBiL3BlcmwvR2l0L1NWTi9Mb2cucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjMWM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0L1NWTi9Mb2cucG0KQEAgLTAsMCArMSwzOTUgQEAKK3BhY2thZ2UgR2l0OjpTVk46OkxvZzsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2l0OjpTVk46OlV0aWxzIHF3KGZhdGFsKTsKK3VzZSBHaXQgcXcoY29tbWFuZCBjb21tYW5kX29uZWxpbmUgY29tbWFuZF9vdXRwdXRfcGlwZSBjb21tYW5kX2Nsb3NlX3BpcGUpOwordXNlIFBPU0lYIHF3L3N0cmZ0aW1lLzsKK3VzZSBjb25zdGFudCBjb21taXRfbG9nX3NlcGFyYXRvciA9PiAoJy0nIHggNzIpIC4gIlxuIjsKK3VzZSB2YXJzIHF3LyRUWiAkbGltaXQgJGNvbG9yICRwYWdlciAkbm9uX3JlY3Vyc2l2ZSAkdmVyYm9zZSAkb25lbGluZQorICAgICAgICAgICAgJXJ1c2VycyAkc2hvd19jb21taXQgJGluY3JlbWVudGFsLzsKKworIyBPcHRpb24gc2V0IGluIGdpdC1zdm4KK291ciAkX2dpdF9mb3JtYXQ7CisKK3N1YiBjbXRfc2hvd2FibGUgeworCW15ICgkYykgPSBAXzsKKwlyZXR1cm4gMSBpZiBkZWZpbmVkICRjLT57cn07CisKKwkjIGJpZyBjb21taXQgbWVzc2FnZSBnb3QgdHJ1bmNhdGVkIGJ5IHRoZSAxNmsgcHJldHR5IGJ1ZmZlciBpbiByZXYtbGlzdAorCWlmICgkYy0+e2x9ICYmICRjLT57bH0tPlstMV0gZXEgIi4uLlxuIiAmJgorCQkJCSRjLT57YV9yYXd9ID1+IC9cQChbYS1mXGRcLV0rKT4kLykgeworCQlAeyRjLT57bH19ID0gKCk7CisJCW15IEBsb2cgPSBjb21tYW5kKHF3L2NhdC1maWxlIGNvbW1pdC8sICRjLT57Y30pOworCisJCSMgc2hpZnQgb2ZmIHRoZSBoZWFkZXJzCisJCXNoaWZ0IEBsb2cgd2hpbGUgKCRsb2dbMF0gbmUgJycpOworCQlzaGlmdCBAbG9nOworCisJCSMgVE9ETzogbWFrZSAkYy0+e2x9IG5vdCBoYXZlIGEgdHJhaWxpbmcgbmV3bGluZSBpbiB0aGUgZnV0dXJlCisJCUB7JGMtPntsfX0gPSBtYXAgeyAiJF9cbiIgfSBncmVwICEvXmdpdC1zdm4taWQ6IC8sIEBsb2c7CisKKwkJKHVuZGVmLCAkYy0+e3J9LCB1bmRlZikgPSA6OmV4dHJhY3RfbWV0YWRhdGEoCisJCQkJKGdyZXAoL15naXQtc3ZuLWlkOiAvLCBAbG9nKSlbLTFdKTsKKwl9CisJcmV0dXJuIGRlZmluZWQgJGMtPntyfTsKK30KKworc3ViIGxvZ191c2VfY29sb3IgeworCXJldHVybiAkY29sb3IgfHwgR2l0LT5yZXBvc2l0b3J5LT5nZXRfY29sb3Jib29sKCdjb2xvci5kaWZmJyk7Cit9CisKK3N1YiBnaXRfc3ZuX2xvZ19jbWQgeworCW15ICgkcl9taW4sICRyX21heCwgQGFyZ3MpID0gQF87CisJbXkgJGhlYWQgPSAnSEVBRCc7CisJbXkgKEBmaWxlcywgQGxvZ19vcHRzKTsKKwlmb3JlYWNoIG15ICR4IChAYXJncykgeworCQlpZiAoJHggZXEgJy0tJyB8fCBAZmlsZXMpIHsKKwkJCXB1c2ggQGZpbGVzLCAkeDsKKwkJfSBlbHNlIHsKKwkJCWlmICg6OnZlcmlmeV9yZWYoIiR4XjAiKSkgeworCQkJCSRoZWFkID0gJHg7CisJCQl9IGVsc2UgeworCQkJCXB1c2ggQGxvZ19vcHRzLCAkeDsKKwkJCX0KKwkJfQorCX0KKworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IDo6d29ya2luZ19oZWFkX2luZm8oJGhlYWQpOworCisJcmVxdWlyZSBHaXQ6OlNWTjsKKwkkZ3MgfHw9IEdpdDo6U1ZOLT5fbmV3OworCW15IEBjbWQgPSAocXcvbG9nIC0tYWJicmV2LWNvbW1pdCAtLXByZXR0eT1yYXcgLS1kZWZhdWx0LywKKwkgICAgICAgICAgICRncy0+cmVmbmFtZSk7CisJcHVzaCBAY21kLCAnLXInIHVubGVzcyAkbm9uX3JlY3Vyc2l2ZTsKKwlwdXNoIEBjbWQsIHF3Ly0tcmF3IC0tbmFtZS1zdGF0dXMvIGlmICR2ZXJib3NlOworCXB1c2ggQGNtZCwgJy0tY29sb3InIGlmIGxvZ191c2VfY29sb3IoKTsKKwlwdXNoIEBjbWQsIEBsb2dfb3B0czsKKwlpZiAoZGVmaW5lZCAkcl9tYXggJiYgJHJfbWF4ID09ICRyX21pbikgeworCQlwdXNoIEBjbWQsICctLW1heC1jb3VudD0xJzsKKwkJaWYgKG15ICRjID0gJGdzLT5yZXZfbWFwX2dldCgkcl9tYXgpKSB7CisJCQlwdXNoIEBjbWQsICRjOworCQl9CisJfSBlbHNpZiAoZGVmaW5lZCAkcl9tYXgpIHsKKwkJaWYgKCRyX21heCA8ICRyX21pbikgeworCQkJKCRyX21pbiwgJHJfbWF4KSA9ICgkcl9tYXgsICRyX21pbik7CisJCX0KKwkJbXkgKHVuZGVmLCAkY19tYXgpID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoJHJfbWF4LCAxLCAkcl9taW4pOworCQlteSAodW5kZWYsICRjX21pbikgPSAkZ3MtPmZpbmRfcmV2X2FmdGVyKCRyX21pbiwgMSwgJHJfbWF4KTsKKwkJIyBJZiB0aGVyZSBhcmUgbm8gY29tbWl0cyBpbiB0aGUgcmFuZ2UsIGJvdGggJGNfbWF4IGFuZCAkY19taW4KKwkJIyB3aWxsIGJlIHVuZGVmaW5lZC4gIElmIHRoZXJlIGlzIGF0IGxlYXN0IDEgY29tbWl0IGluIHRoZQorCQkjIHJhbmdlLCBib3RoIHdpbGwgYmUgZGVmaW5lZC4KKwkJcmV0dXJuICgpIGlmICFkZWZpbmVkICRjX21pbiB8fCAhZGVmaW5lZCAkY19tYXg7CisJCWlmICgkY19taW4gZXEgJGNfbWF4KSB7CisJCQlwdXNoIEBjbWQsICctLW1heC1jb3VudD0xJywgJGNfbWluOworCQl9IGVsc2UgeworCQkJcHVzaCBAY21kLCAnLS1ib3VuZGFyeScsICIkY19taW4uLiRjX21heCI7CisJCX0KKwl9CisJcmV0dXJuIChAY21kLCBAZmlsZXMpOworfQorCisjIGFkYXB0ZWQgZnJvbSBwYWdlci5jCitzdWIgY29uZmlnX3BhZ2VyIHsKKwlpZiAoISAtdCAqU1RET1VUKSB7CisJCSRFTlZ7R0lUX1BBR0VSX0lOX1VTRX0gPSAnZmFsc2UnOworCQkkcGFnZXIgPSB1bmRlZjsKKwkJcmV0dXJuOworCX0KKwljaG9tcCgkcGFnZXIgPSBjb21tYW5kX29uZWxpbmUocXcodmFyIEdJVF9QQUdFUikpKTsKKwlpZiAoJHBhZ2VyIGVxICdjYXQnKSB7CisJCSRwYWdlciA9IHVuZGVmOworCX0KKwkkRU5We0dJVF9QQUdFUl9JTl9VU0V9ID0gZGVmaW5lZCgkcGFnZXIpOworfQorCitzdWIgcnVuX3BhZ2VyIHsKKwlyZXR1cm4gdW5sZXNzIGRlZmluZWQgJHBhZ2VyOworCXBpcGUgbXkgKCRyZmQsICR3ZmQpIG9yIHJldHVybjsKKwlkZWZpbmVkKG15ICRwaWQgPSBmb3JrKSBvciBmYXRhbCAiQ2FuJ3QgZm9yazogJCEiOworCWlmICghJHBpZCkgeworCQlvcGVuIFNURE9VVCwgJz4mJywgJHdmZCBvcgorCQkgICAgICAgICAgICAgICAgICAgICBmYXRhbCAiQ2FuJ3QgcmVkaXJlY3QgdG8gc3Rkb3V0OiAkISI7CisJCXJldHVybjsKKwl9CisJb3BlbiBTVERJTiwgJzwmJywgJHJmZCBvciBmYXRhbCAiQ2FuJ3QgcmVkaXJlY3Qgc3RkaW46ICQhIjsKKwkkRU5We0xFU1N9IHx8PSAnRlJTWCc7CisJZXhlYyAkcGFnZXIgb3IgZmF0YWwgIkNhbid0IHJ1biBwYWdlcjogJCEgKCRwYWdlcikiOworfQorCitzdWIgZm9ybWF0X3N2bl9kYXRlIHsKKwlteSAkdCA9IHNoaWZ0IHx8IHRpbWU7CisJcmVxdWlyZSBHaXQ6OlNWTjsKKwlteSAkZ21vZmYgPSBHaXQ6OlNWTjo6Z2V0X3R6KCR0KTsKKwlyZXR1cm4gc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTICRnbW9mZiAoJWEsICVkICViICVZKSIsIGxvY2FsdGltZSgkdCkpOworfQorCitzdWIgcGFyc2VfZ2l0X2RhdGUgeworCW15ICgkdCwgJHR6KSA9IEBfOworCSMgRGF0ZTo6UGFyc2UgaXNuJ3QgaW4gdGhlIHN0YW5kYXJkIFBlcmwgZGlzdHJvIDooCisJaWYgKCR0eiA9fiBzL15cKy8vKSB7CisJCSR0ICs9IHR6X3RvX3Nfb2Zmc2V0KCR0eik7CisJfSBlbHNpZiAoJHR6ID1+IHMvXlwtLy8pIHsKKwkJJHQgLT0gdHpfdG9fc19vZmZzZXQoJHR6KTsKKwl9CisJcmV0dXJuICR0OworfQorCitzdWIgc2V0X2xvY2FsX3RpbWV6b25lIHsKKwlpZiAoZGVmaW5lZCAkVFopIHsKKwkJJEVOVntUWn0gPSAkVFo7CisJfSBlbHNlIHsKKwkJZGVsZXRlICRFTlZ7VFp9OworCX0KK30KKworc3ViIHR6X3RvX3Nfb2Zmc2V0IHsKKwlteSAoJHR6KSA9IEBfOworCSR0eiA9fiBzLyhcZFxkKSQvLzsKKwlyZXR1cm4gKCQxICogNjApICsgKCR0eiAqIDM2MDApOworfQorCitzdWIgZ2V0X2F1dGhvcl9pbmZvIHsKKwlteSAoJGRlc3QsICRhdXRob3IsICR0LCAkdHopID0gQF87CisJJGF1dGhvciA9fiBzLyg/Ol5ccyp8XHMqJCkvL2c7CisJJGRlc3QtPnthX3Jhd30gPSAkYXV0aG9yOworCW15ICRhdTsKKwlpZiAoJDo6X2F1dGhvcnMpIHsKKwkJJGF1ID0gJHJ1c2Vyc3skYXV0aG9yfSB8fCB1bmRlZjsKKwl9CisJaWYgKCEkYXUpIHsKKwkJKCRhdSkgPSAoJGF1dGhvciA9fiAvPChbXj5dKylcQFtePl0rPiQvKTsKKwl9CisJJGRlc3QtPnt0fSA9ICR0OworCSRkZXN0LT57dHp9ID0gJHR6OworCSRkZXN0LT57YX0gPSAkYXU7CisJJGRlc3QtPnt0X3V0Y30gPSBwYXJzZV9naXRfZGF0ZSgkdCwgJHR6KTsKK30KKworc3ViIHByb2Nlc3NfY29tbWl0IHsKKwlteSAoJGMsICRyX21pbiwgJHJfbWF4LCAkZGVmZXIpID0gQF87CisJaWYgKGRlZmluZWQgJHJfbWluICYmIGRlZmluZWQgJHJfbWF4KSB7CisJCWlmICgkcl9taW4gPT0gJGMtPntyfSAmJiAkcl9taW4gPT0gJHJfbWF4KSB7CisJCQlzaG93X2NvbW1pdCgkYyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMSBpZiAkcl9taW4gPT0gJHJfbWF4OworCQlpZiAoJHJfbWluIDwgJHJfbWF4KSB7CisJCQkjIHdlIG5lZWQgdG8gcmV2ZXJzZSB0aGUgcHJpbnQgb3JkZXIKKwkJCXJldHVybiAwIGlmIChkZWZpbmVkICRsaW1pdCAmJiAtLSRsaW1pdCA8IDApOworCQkJcHVzaCBAJGRlZmVyLCAkYzsKKwkJCXJldHVybiAxOworCQl9CisJCWlmICgkcl9taW4gIT0gJHJfbWF4KSB7CisJCQlyZXR1cm4gMSBpZiAoJHJfbWluIDwgJGMtPntyfSk7CisJCQlyZXR1cm4gMSBpZiAoJHJfbWF4ID4gJGMtPntyfSk7CisJCX0KKwl9CisJcmV0dXJuIDAgaWYgKGRlZmluZWQgJGxpbWl0ICYmIC0tJGxpbWl0IDwgMCk7CisJc2hvd19jb21taXQoJGMpOworCXJldHVybiAxOworfQorCitteSAkbF9mbXQ7CitzdWIgc2hvd19jb21taXQgeworCW15ICRjID0gc2hpZnQ7CisJaWYgKCRvbmVsaW5lKSB7CisJCW15ICR4ID0gIlxuIjsKKwkJaWYgKG15ICRsID0gJGMtPntsfSkgeworCQkJd2hpbGUgKCRsLT5bMF0gPX4gL15ccyokLykgeyBzaGlmdCBAJGwgfQorCQkJJHggPSAkbC0+WzBdOworCQl9CisJCSRsX2ZtdCB8fD0gJ0EnIC4gbGVuZ3RoKCRjLT57cn0pOworCQlwcmludCAncicscGFjaygkbF9mbXQsICRjLT57cn0pLCcgfCAnOworCQlwcmludCAiJGMtPntjfSB8ICIgaWYgJHNob3dfY29tbWl0OworCQlwcmludCAkeDsKKwl9IGVsc2UgeworCQlzaG93X2NvbW1pdF9ub3JtYWwoJGMpOworCX0KK30KKworc3ViIHNob3dfY29tbWl0X2NoYW5nZWRfcGF0aHMgeworCW15ICgkYykgPSBAXzsKKwlyZXR1cm4gdW5sZXNzICRjLT57Y2hhbmdlZH07CisJcHJpbnQgIkNoYW5nZWQgcGF0aHM6XG4iLCBAeyRjLT57Y2hhbmdlZH19OworfQorCitzdWIgc2hvd19jb21taXRfbm9ybWFsIHsKKwlteSAoJGMpID0gQF87CisJcHJpbnQgY29tbWl0X2xvZ19zZXBhcmF0b3IsICJyJGMtPntyfSB8ICI7CisJcHJpbnQgIiRjLT57Y30gfCAiIGlmICRzaG93X2NvbW1pdDsKKwlwcmludCAiJGMtPnthfSB8ICIsIGZvcm1hdF9zdm5fZGF0ZSgkYy0+e3RfdXRjfSksICcgfCAnOworCW15ICRucl9saW5lID0gMDsKKworCWlmIChteSAkbCA9ICRjLT57bH0pIHsKKwkJd2hpbGUgKCRsLT5bJCMkbF0gZXEgIlxuIiAmJiAkIyRsID4gMAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRsLT5bKCQjJGwgLSAxKV0gZXEgIlxuIikgeworCQkJcG9wIEAkbDsKKwkJfQorCQkkbnJfbGluZSA9IHNjYWxhciBAJGw7CisJCWlmICghJG5yX2xpbmUpIHsKKwkJCXByaW50ICIxIGxpbmVcblxuXG4iOworCQl9IGVsc2UgeworCQkJaWYgKCRucl9saW5lID09IDEpIHsKKwkJCQkkbnJfbGluZSA9ICcxIGxpbmUnOworCQkJfSBlbHNlIHsKKwkJCQkkbnJfbGluZSAuPSAnIGxpbmVzJzsKKwkJCX0KKwkJCXByaW50ICRucl9saW5lLCAiXG4iOworCQkJc2hvd19jb21taXRfY2hhbmdlZF9wYXRocygkYyk7CisJCQlwcmludCAiXG4iOworCQkJcHJpbnQgJF8gZm9yZWFjaCBAJGw7CisJCX0KKwl9IGVsc2UgeworCQlwcmludCAiMSBsaW5lXG4iOworCQlzaG93X2NvbW1pdF9jaGFuZ2VkX3BhdGhzKCRjKTsKKwkJcHJpbnQgIlxuIjsKKworCX0KKwlmb3JlYWNoIG15ICR4IChxdy9yYXcgc3RhdCBkaWZmLykgeworCQlpZiAoJGMtPnskeH0pIHsKKwkJCXByaW50ICJcbiI7CisJCQlwcmludCAkXyBmb3JlYWNoIEB7JGMtPnskeH19CisJCX0KKwl9Cit9CisKK3N1YiBjbWRfc2hvd19sb2cgeworCW15IChAYXJncykgPSBAXzsKKwlteSAoJHJfbWluLCAkcl9tYXgpOworCW15ICRyX2xhc3QgPSAtMTsgIyBwcmV2ZW50IGR1cGVzCisJc2V0X2xvY2FsX3RpbWV6b25lKCk7CisJaWYgKGRlZmluZWQgJDo6X3JldmlzaW9uKSB7CisJCWlmICgkOjpfcmV2aXNpb24gPX4gL14oXGQrKTooXGQrKSQvKSB7CisJCQkoJHJfbWluLCAkcl9tYXgpID0gKCQxLCAkMik7CisJCX0gZWxzaWYgKCQ6Ol9yZXZpc2lvbiA9fiAvXlxkKyQvKSB7CisJCQkkcl9taW4gPSAkcl9tYXggPSAkOjpfcmV2aXNpb247CisJCX0gZWxzZSB7CisJCQlmYXRhbCAiLXIkOjpfcmV2aXNpb24gaXMgbm90IHN1cHBvcnRlZCwgdXNlICIsCisJCQkJInN0YW5kYXJkICdnaXQgbG9nJyBhcmd1bWVudHMgaW5zdGVhZCI7CisJCX0KKwl9CisKKwljb25maWdfcGFnZXIoKTsKKwlAYXJncyA9IGdpdF9zdm5fbG9nX2NtZCgkcl9taW4sICRyX21heCwgQGFyZ3MpOworCWlmICghQGFyZ3MpIHsKKwkJcHJpbnQgY29tbWl0X2xvZ19zZXBhcmF0b3IgdW5sZXNzICRpbmNyZW1lbnRhbCB8fCAkb25lbGluZTsKKwkJcmV0dXJuOworCX0KKwlteSAkbG9nID0gY29tbWFuZF9vdXRwdXRfcGlwZShAYXJncyk7CisJcnVuX3BhZ2VyKCk7CisJbXkgKEBrLCAkYywgJGQsICRzdGF0KTsKKwlteSAkZXNjX2NvbG9yID0gcXIvKD86XDAzM1xbKD86KD86XGQrOykqXGQqKT9tKSovOworCXdoaWxlICg8JGxvZz4pIHsKKwkJaWYgKC9eJHtlc2NfY29sb3J9Y29tbWl0ICg/Oi0gKT8oJDo6c2hhMV9zaG9ydCkvbykgeworCQkJbXkgJGNtdCA9ICQxOworCQkJaWYgKCRjICYmIGNtdF9zaG93YWJsZSgkYykgJiYgJGMtPntyfSAhPSAkcl9sYXN0KSB7CisJCQkJJHJfbGFzdCA9ICRjLT57cn07CisJCQkJcHJvY2Vzc19jb21taXQoJGMsICRyX21pbiwgJHJfbWF4LCBcQGspIG9yCisJCQkJCQkJCWdvdG8gb3V0OworCQkJfQorCQkJJGQgPSB1bmRlZjsKKwkJCSRjID0geyBjID0+ICRjbXQgfTsKKwkJfSBlbHNpZiAoL14ke2VzY19jb2xvcn1hdXRob3IgKC4rKSAoXGQrKSAoW1wtXCtdP1xkKykkL28pIHsKKwkJCWdldF9hdXRob3JfaW5mbygkYywgJDEsICQyLCAkMyk7CisJCX0gZWxzaWYgKC9eJHtlc2NfY29sb3J9KD86dHJlZXxwYXJlbnR8Y29tbWl0dGVyKSAvbykgeworCQkJIyBpZ25vcmUKKwkJfSBlbHNpZiAoL14ke2VzY19jb2xvcn06XGR7Nn0gXGR7Nn0gJDo6c2hhMV9zaG9ydC9vKSB7CisJCQlwdXNoIEB7JGMtPntyYXd9fSwgJF87CisJCX0gZWxzaWYgKC9eJHtlc2NfY29sb3J9W0FDUk1EVF1cdC8pIHsKKwkJCSMgd2UgY291bGQgYWRkICRTVk4tPntzdm5fcGF0aH0gaGVyZSwgYnV0IHRoYXQgcmVxdWlyZXMKKwkJCSMgcmVtb3RlIGFjY2VzcyBhdCB0aGUgbW9tZW50IChyZXBvX3BhdGhfc3BsaXQpLi4uCisJCQlzI14oJHtlc2NfY29sb3J9KShbQUNSTURUXSlcdCMkMSAgICQyICNvOworCQkJcHVzaCBAeyRjLT57Y2hhbmdlZH19LCAkXzsKKwkJfSBlbHNpZiAoL14ke2VzY19jb2xvcn1kaWZmIC9vKSB7CisJCQkkZCA9IDE7CisJCQlwdXNoIEB7JGMtPntkaWZmfX0sICRfOworCQl9IGVsc2lmICgkZCkgeworCQkJcHVzaCBAeyRjLT57ZGlmZn19LCAkXzsKKwkJfSBlbHNpZiAoL15cIC4rXCBcfFxzKlxkK1wgJGVzY19jb2xvcltcK1wtXSoKKwkJICAgICAgICAgICRlc2NfY29sb3IqW1wrXC1dKiRlc2NfY29sb3IkL3gpIHsKKwkJCSRzdGF0ID0gMTsKKwkJCXB1c2ggQHskYy0+e3N0YXR9fSwgJF87CisJCX0gZWxzaWYgKCRzdGF0ICYmIC9eIFxkKyBmaWxlcyBjaGFuZ2VkLCBcZCsgaW5zZXJ0aW9ucy8pIHsKKwkJCXB1c2ggQHskYy0+e3N0YXR9fSwgJF87CisJCQkkc3RhdCA9IHVuZGVmOworCQl9IGVsc2lmICgvXiR7ZXNjX2NvbG9yfSAgICAoZ2l0LXN2bi1pZDouKykkL28pIHsKKwkJCSgkYy0+e3VybH0sICRjLT57cn0sIHVuZGVmKSA9IDo6ZXh0cmFjdF9tZXRhZGF0YSgkMSk7CisJCX0gZWxzaWYgKHMvXiR7ZXNjX2NvbG9yfSAgICAvL28pIHsKKwkJCXB1c2ggQHskYy0+e2x9fSwgJF87CisJCX0KKwl9CisJaWYgKCRjICYmIGRlZmluZWQgJGMtPntyfSAmJiAkYy0+e3J9ICE9ICRyX2xhc3QpIHsKKwkJJHJfbGFzdCA9ICRjLT57cn07CisJCXByb2Nlc3NfY29tbWl0KCRjLCAkcl9taW4sICRyX21heCwgXEBrKTsKKwl9CisJaWYgKEBrKSB7CisJCSgkcl9taW4sICRyX21heCkgPSAoJHJfbWF4LCAkcl9taW4pOworCQlwcm9jZXNzX2NvbW1pdCgkXywgJHJfbWluLCAkcl9tYXgpIGZvcmVhY2ggcmV2ZXJzZSBAazsKKwl9CitvdXQ6CisJY2xvc2UgJGxvZzsKKwlwcmludCBjb21taXRfbG9nX3NlcGFyYXRvciB1bmxlc3MgJGluY3JlbWVudGFsIHx8ICRvbmVsaW5lOworfQorCitzdWIgY21kX2JsYW1lIHsKKwlteSAkcGF0aCA9IHBvcDsKKworCWNvbmZpZ19wYWdlcigpOworCXJ1bl9wYWdlcigpOworCisJbXkgKCRmaCwgJGN0eCwgJHJldik7CisKKwlpZiAoJF9naXRfZm9ybWF0KSB7CisJCSgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZSgnYmxhbWUnLCBAXywgJHBhdGgpOworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQkJaWYgKCRsaW5lID1+IC9eXF4/KFtbOnhkaWdpdDpdXSspXHMvKSB7CisJCQkJIyBVbmNvbW1pdHRlZCBlZGl0cyBzaG93IHVwIGFzIGEgcmV2IElEIG9mCisJCQkJIyBhbGwgemVyb3MsIHdoaWNoIHdlIGNhbid0IGxvb2sgdXAgd2l0aAorCQkJCSMgY210X21ldGFkYXRhCisJCQkJaWYgKCQxICF+IC9eMCskLykgeworCQkJCQkodW5kZWYsICRyZXYsIHVuZGVmKSA9CisJCQkJCQk6OmNtdF9tZXRhZGF0YSgkMSk7CisJCQkJCSRyZXYgPSAnMCcgaWYgKCEkcmV2KTsKKwkJCQl9IGVsc2UgeworCQkJCQkkcmV2ID0gJzAnOworCQkJCX0KKwkJCQkkcmV2ID0gc3ByaW50ZignJS0xMHMnLCAkcmV2KTsKKwkJCQkkbGluZSA9fiBzL15cXj9bWzp4ZGlnaXQ6XV0rKFxzKS8kcmV2JDEvOworCQkJfQorCQkJcHJpbnQgJGxpbmU7CisJCX0KKwl9IGVsc2UgeworCQkoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoJ2JsYW1lJywgJy1wJywgQF8sICdIRUFEJywKKwkJCQkJCSAgJy0tJywgJHBhdGgpOworCQlteSAoJHNoYTEpOworCQlteSAlYXV0aG9yczsKKwkJbXkgQGJ1ZmZlcjsKKwkJbXkgJWRzaGE7ICNkaXN0aW5jdCBzaGEga2V5cworCisJCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCQlwdXNoIEBidWZmZXIsICRsaW5lOworCQkJaWYgKCRsaW5lID1+IC9eKFtbOnhkaWdpdDpdXXs0MH0pXHNcZCtcc1xkKy8pIHsKKwkJCQkkZHNoYXskMX0gPSAxOworCQkJfQorCQl9CisKKwkJbXkgJHMyciA9IDo6Y210X3NoYTJyZXZfYmF0Y2goW2tleXMgJWRzaGFdKTsKKworCQlmb3JlYWNoIG15ICRsaW5lIChAYnVmZmVyKSB7CisJCQlpZiAoJGxpbmUgPX4gL14oW1s6eGRpZ2l0Ol1dezQwfSlcc1xkK1xzXGQrLykgeworCQkJCSRyZXYgPSAkczJyLT57JDF9OworCQkJCSRyZXYgPSAnMCcgaWYgKCEkcmV2KQorCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eYXV0aG9yICguKikvKSB7CisJCQkJJGF1dGhvcnN7JHJldn0gPSAkMTsKKwkJCQkkYXV0aG9yc3skcmV2fSA9fiBzL1xzL18vZzsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXlx0KC4qKSQvKSB7CisJCQkJcHJpbnRmKCIlNnMgJTEwcyAlc1xuIiwgJHJldiwgJGF1dGhvcnN7JHJldn0sICQxKTsKKwkJCX0KKwkJfQorCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKK30KKworMTsKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L1NWTi9NZW1vaXplL1lBTUwucG0gYi9wZXJsL0dpdC9TVk4vTWVtb2l6ZS9ZQU1MLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NzZiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vTWVtb2l6ZS9ZQU1MLnBtCkBAIC0wLDAgKzEsOTMgQEAKK3BhY2thZ2UgR2l0OjpTVk46Ok1lbW9pemU6OllBTUw7Cit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OwordXNlIFlBTUw6OkFueSAoKTsKKworIyBiYXNlZCBvbiBNZW1vaXplOjpTdG9yYWJsZS4KKworc3ViIFRJRUhBU0ggeworCW15ICRwYWNrYWdlID0gc2hpZnQ7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJbXkgJHRydWVoYXNoID0gKC1lICRmaWxlbmFtZSkgPyBZQU1MOjpBbnk6OkxvYWRGaWxlKCRmaWxlbmFtZSkgOiB7fTsKKwlteSAkc2VsZiA9IHtGSUxFTkFNRSA9PiAkZmlsZW5hbWUsIEggPT4gJHRydWVoYXNofTsKKwlibGVzcyAkc2VsZiA9PiAkcGFja2FnZTsKK30KKworc3ViIFNUT1JFIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCSRzZWxmLT57SH17JF9bMF19ID0gJF9bMV07Cit9CisKK3N1YiBGRVRDSCB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwkkc2VsZi0+e0h9eyRfWzBdfTsKK30KKworc3ViIEVYSVNUUyB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlleGlzdHMgJHNlbGYtPntIfXskX1swXX07Cit9CisKK3N1YiBERVNUUk9ZIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCVlBTUw6OkFueTo6RHVtcEZpbGUoJHNlbGYtPntGSUxFTkFNRX0sICRzZWxmLT57SH0pOworfQorCitzdWIgU0NBTEFSIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCXNjYWxhcigleyRzZWxmLT57SH19KTsKK30KKworc3ViIEZJUlNUS0VZIHsKKwknRmFrZSBoYXNoIGZyb20gR2l0OjpTVk46Ok1lbW9pemU6OllBTUwnOworfQorCitzdWIgTkVYVEtFWSB7CisJdW5kZWY7Cit9CisKKzE7CitfX0VORF9fCisKKz1oZWFkMSBOQU1FCisKK0dpdDo6U1ZOOjpNZW1vaXplOjpZQU1MIC0gc3RvcmUgTWVtb2l6ZWQgZGF0YSBpbiBZQU1MIGZvcm1hdAorCis9aGVhZDEgU1lOT1BTSVMKKworICAgIHVzZSBNZW1vaXplOworICAgIHVzZSBHaXQ6OlNWTjo6TWVtb2l6ZTo6WUFNTDsKKworICAgIHRpZSBteSAlY2FjaGUgPT4gJ0dpdDo6U1ZOOjpNZW1vaXplOjpZQU1MJywgJGZpbGVuYW1lOworICAgIG1lbW9pemUoJ3Nsb3dfZnVuY3Rpb24nLCBTQ0FMQVJfQ0FDSEUgPT4gW0hBU0ggPT4gXCVjYWNoZV0pOworICAgIHNsb3dfZnVuY3Rpb24oYXJndW1lbnRzKTsKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB0byB0aWUgYSBoYXNoIHRvIGEKK1lBTUwgZmlsZS4gIFRoZSBmaWxlIGlzIHJlYWQgd2hlbiB0aGUgaGFzaCBpcyBpbml0aWFsaXplZCBhbmQKK3Jld3JpdHRlbiB3aGVuIHRoZSBoYXNoIGlzIGRlc3Ryb3llZC4KKworVGhlIGludGVudCBpcyB0byBhbGxvdyBMPE1lbW9pemU+IHRvIGJhY2sgaXRzIGNhY2hlIHdpdGggYSBmaWxlIGluCitZQU1MIGZvcm1hdCwganVzdCBsaWtlIEw8TWVtb2l6ZTo6U3RvcmFibGU+IGFsbG93cyBMPE1lbW9pemU+IHRvCitiYWNrIGl0cyBjYWNoZSB3aXRoIGEgZmlsZSBpbiBTdG9yYWJsZSBmb3JtYXQuICBVbmxpa2UgdGhlIFN0b3JhYmxlCitmb3JtYXQsIHRoZSBZQU1MIGZvcm1hdCBpcyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBhbmQgZmFpcmx5IHN0YWJsZS4KKworQ2FycHMgb24gZXJyb3IuCisKKz1oZWFkMSBESUFHTk9TVElDUworCitTZWUgTDxZQU1MOjpBbnk+LgorCis9aGVhZDEgREVQRU5ERU5DSUVTCisKK0w8WUFNTDo6QW55PiBmcm9tIENQQU4uCisKKz1oZWFkMSBJTkNPTVBBVElCSUxJVElFUworCitOb25lIHJlcG9ydGVkLgorCis9aGVhZDEgQlVHUworCitUaGUgZW50aXJlIGNhY2hlIGlzIHJlYWQgaW50byBhIFBlcmwgaGFzaCB3aGVuIGxvYWRpbmcgdGhlIGZpbGUsCitzbyB0aGlzIGlzIG5vdCB2ZXJ5IHNjYWxhYmxlLgpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL01pZ3JhdGlvbi5wbSBiL3BlcmwvR2l0L1NWTi9NaWdyYXRpb24ucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkYWYzNQotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0L1NWTi9NaWdyYXRpb24ucG0KQEAgLTAsMCArMSwyNTggQEAKK3BhY2thZ2UgR2l0OjpTVk46Ok1pZ3JhdGlvbjsKKyMgdGhlc2UgdmVyc2lvbiBudW1iZXJzIGRvIE5PVCBjb3JyZXNwb25kIHRvIGFjdHVhbCB2ZXJzaW9uIG51bWJlcnMKKyMgb2YgZ2l0IG5vciBnaXQtc3ZuLiAgVGhleSBhcmUganVzdCByZWxhdGl2ZS4KKyMKKyMgdjAgbGF5b3V0OiAuZ2l0LyRpZC9pbmZvL3VybCwgcmVmcy9oZWFkcy8kaWQtSEVBRAorIworIyB2MSBsYXlvdXQ6IC5naXQvJGlkL2luZm8vdXJsLCByZWZzL3JlbW90ZXMvJGlkCisjCisjIHYyIGxheW91dDogLmdpdC9zdm4vJGlkL2luZm8vdXJsLCByZWZzL3JlbW90ZXMvJGlkCisjCisjIHYzIGxheW91dDogLmdpdC9zdm4vJGlkLCByZWZzL3JlbW90ZXMvJGlkCisjICAgICAgICAgICAgLSBpbmZvL3VybCBtYXkgcmVtYWluIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorIyAgICAgICAgICAgIC0gdGhpcyBpcyB3aGF0IHdlIG1pZ3JhdGUgdXAgdG8gdGhpcyBsYXlvdXQgYXV0b21hdGljYWxseSwKKyMgICAgICAgICAgICAtIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdpdCBzdm4gaW5pdCBvbiBzaW5nbGUgYnJhbmNoZXMKKyMgdjMuMSBsYXlvdXQgKGF1dG8gbWlncmF0ZWQpOgorIyAgICAgICAgICAgIC0gLnJldl9kYiA9PiAucmV2X2RiLiRVVUlELCAucmV2X2RiIHdpbGwgcmVtYWluIGFzIGEgc3ltbGluaworIyAgICAgICAgICAgICAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisjCisjIHY0IGxheW91dDogLmdpdC9zdm4vJHJlcG9faWQvJGlkLCByZWZzL3JlbW90ZXMvJHJlcG9faWQvJGlkCisjICAgICAgICAgICAgLSB0aGlzIGlzIG9ubHkgY3JlYXRlZCBmb3IgbmV3bHkgbXVsdGktaW5pdC1lZAorIyAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLiAgU2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlCisjICAgICAgICAgICAgICAtLXVzZS1zZXBhcmF0ZS1yZW1vdGVzIG9wdGlvbiBpbiBnaXQtY2xvbmUgKG5vdyBkZWZhdWx0KQorIyAgICAgICAgICAgIC0gd2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgbWlncmF0ZSB0byB0aGlzIChmb2xsb3dpbmcKKyMgICAgICAgICAgICAgIHRoZSBleGFtcGxlIHNldCBieSBjb3JlIGdpdCkKKyMKKyMgdjUgbGF5b3V0OiAucmV2X2RiLiRVVUlEID0+IC5yZXZfbWFwLiRVVUlECisjICAgICAgICAgICAgLSBuZXdlciwgbW9yZS1lZmZpY2llbnQgZm9ybWF0IHRoYXQgdXNlcyAyNC1ieXRlcyBwZXIgcmVjb3JkCisjICAgICAgICAgICAgICB3aXRoIG5vIGZpbGxlciBzcGFjZS4KKyMgICAgICAgICAgICAtIHVzZSB4eGQgLWMyNCA8IC5yZXZfbWFwLiRVVUlEIHRvIHZpZXcgYW5kIGRlYnVnCisjICAgICAgICAgICAgLSBUaGlzIGlzIGEgb25lLXdheSBtaWdyYXRpb24sIHJlcG9zaXRvcmllcyB1cGRhdGVkIHRvIHRoZQorIyAgICAgICAgICAgICAgbmV3IGZvcm1hdCB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZSBvbGQgZ2l0LXN2biB3aXRob3V0CisjICAgICAgICAgICAgICByZWJ1aWxkaW5nIHRoZSAucmV2X2RiLiAgUmVidWlsZGluZyB0aGUgcmV2X2RiIGlzIG5vdAorIyAgICAgICAgICAgICAgcG9zc2libGUgaWYgbm9NZXRhZGF0YSBvciB1c2VTdm1Qcm9wcyBhcmUgc2V0OyBidXQgc2hvdWxkCisjICAgICAgICAgICAgICBiZSBubyBwcm9ibGVtIGZvciB1c2VycyB0aGF0IHVzZSB0aGUgKHNlbnNpYmxlKSBkZWZhdWx0cy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgQ2FycCBxdy9jcm9hay87Cit1c2UgRmlsZTo6UGF0aCBxdy9ta3BhdGgvOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3L2Rpcm5hbWUgYmFzZW5hbWUvOworCitvdXIgJF9taW5pbWl6ZTsKK3VzZSBHaXQgcXcoCisJY29tbWFuZAorCWNvbW1hbmRfbm9pc3kKKwljb21tYW5kX291dHB1dF9waXBlCisJY29tbWFuZF9jbG9zZV9waXBlCispOworCitzdWIgbWlncmF0ZV9mcm9tX3YwIHsKKwlteSAkZ2l0X2RpciA9ICRFTlZ7R0lUX0RJUn07CisJcmV0dXJuIHVuZGVmIHVubGVzcyAtZCAkZ2l0X2RpcjsKKwlteSAoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUocXcvcmV2LXBhcnNlIC0tc3ltYm9saWMgLS1hbGwvKTsKKwlteSAkbWlncmF0ZWQgPSAwOworCXdoaWxlICg8JGZoPikgeworCQljaG9tcDsKKwkJbXkgKCRpZCwgJG9yaWdfcmVmKSA9ICgkXywgJF8pOworCQluZXh0IHVubGVzcyAkaWQgPX4gcyNecmVmcy9oZWFkcy8oLispLUhFQUQkIyQxIzsKKwkJbmV4dCB1bmxlc3MgLWYgIiRnaXRfZGlyLyRpZC9pbmZvL3VybCI7CisJCW15ICRuZXdfcmVmID0gInJlZnMvcmVtb3Rlcy8kaWQiOworCQlpZiAoOjp2ZXJpZnlfcmVmKCIkbmV3X3JlZl4wIikpIHsKKwkJCXByaW50IFNUREVSUiAiVzogJG9yaWdfcmVmIGlzIHByb2JhYmx5IGFuIG9sZCAiLAorCQkJICAgICAgICAgICAgICJicmFuY2ggdXNlZCBieSBhbiBhbmNpZW50IHZlcnNpb24gb2YgIiwKKwkJCQkgICAgICJnaXQtc3ZuLlxuIiwKKwkJCQkgICAgICJIb3dldmVyLCAkbmV3X3JlZiBhbHNvIGV4aXN0cy5cbiIsCisJCQkJICAgICAiV2Ugd2lsbCBub3QgYmUgYWJsZSAiLAorCQkJCSAgICAgInRvIHVzZSB0aGlzIGJyYW5jaCB1bnRpbCB0aGlzICIsCisJCQkJICAgICAiYW1iaWd1aXR5IGlzIHJlc29sdmVkLlxuIjsKKwkJCW5leHQ7CisJCX0KKwkJcHJpbnQgU1RERVJSICJNaWdyYXRpbmcgZnJvbSB2MCBsYXlvdXQuLi5cbiIgaWYgISRtaWdyYXRlZDsKKwkJcHJpbnQgU1RERVJSICJSZW5hbWluZyByZWY6ICRvcmlnX3JlZiA9PiAkbmV3X3JlZlxuIjsKKwkJY29tbWFuZF9ub2lzeSgndXBkYXRlLXJlZicsICRuZXdfcmVmLCAkb3JpZ19yZWYpOworCQljb21tYW5kX25vaXN5KCd1cGRhdGUtcmVmJywgJy1kJywgJG9yaWdfcmVmLCAkb3JpZ19yZWYpOworCQkkbWlncmF0ZWQrKzsKKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7CisJcHJpbnQgU1RERVJSICJEb25lIG1pZ3JhdGluZyBmcm9tIHYwIGxheW91dC4uLlxuIiBpZiAkbWlncmF0ZWQ7CisJJG1pZ3JhdGVkOworfQorCitzdWIgbWlncmF0ZV9mcm9tX3YxIHsKKwlteSAkZ2l0X2RpciA9ICRFTlZ7R0lUX0RJUn07CisJbXkgJG1pZ3JhdGVkID0gMDsKKwlyZXR1cm4gJG1pZ3JhdGVkIHVubGVzcyAtZCAkZ2l0X2RpcjsKKwlteSAkc3ZuX2RpciA9ICIkZ2l0X2Rpci9zdm4iOworCisJIyBqdXN0IGluIGNhc2Ugc29tZWJvZHkgdXNlZCAnc3ZuJyBhcyB0aGVpciAkaWQgYXQgc29tZSBwb2ludC4uLgorCXJldHVybiAkbWlncmF0ZWQgaWYgLWQgJHN2bl9kaXIgJiYgISAtZiAiJHN2bl9kaXIvaW5mby91cmwiOworCisJcHJpbnQgU1RERVJSICJNaWdyYXRpbmcgZnJvbSBhIGdpdC1zdm4gdjEgbGF5b3V0Li4uXG4iOworCW1rcGF0aChbJHN2bl9kaXJdKTsKKwlwcmludCBTVERFUlIgIkRhdGEgZnJvbSBhIHByZXZpb3VzIHZlcnNpb24gb2YgZ2l0LXN2biBleGlzdHMsIGJ1dFxuXHQiLAorCSAgICAgICAgICAgICAiJHN2bl9kaXJcblx0KHJlcXVpcmVkIGZvciB0aGlzIHZlcnNpb24gIiwKKwkgICAgICAgICAgICAgIigkOjpWRVJTSU9OKSBvZiBnaXQtc3ZuKSBkb2VzIG5vdCBleGlzdC5cbiI7CisJbXkgKCRmaCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKHF3L3Jldi1wYXJzZSAtLXN5bWJvbGljIC0tYWxsLyk7CisJd2hpbGUgKDwkZmg+KSB7CisJCW15ICR4ID0gJF87CisJCW5leHQgdW5sZXNzICR4ID1+IHMjXnJlZnMvcmVtb3Rlcy8jIzsKKwkJY2hvbXAgJHg7CisJCW5leHQgdW5sZXNzIC1mICIkZ2l0X2Rpci8keC9pbmZvL3VybCI7CisJCW15ICR1ID0gZXZhbCB7IDo6ZmlsZV90b19zKCIkZ2l0X2Rpci8keC9pbmZvL3VybCIpIH07CisJCW5leHQgdW5sZXNzICR1OworCQlteSAkZG4gPSBkaXJuYW1lKCIkZ2l0X2Rpci9zdm4vJHgiKTsKKwkJbWtwYXRoKFskZG5dKSB1bmxlc3MgLWQgJGRuOworCQlpZiAoJHggZXEgJ3N2bicpIHsgIyB0aGV5IHVzZWQgJ3N2bicgYXMgR0lUX1NWTl9JRDoKKwkJCW1rcGF0aChbIiRnaXRfZGlyL3N2bi9zdm4iXSk7CisJCQlwcmludCBTVERFUlIgIiAtICRnaXRfZGlyLyR4L2luZm8gPT4gIiwKKwkJCSAgICAgICAgICAgICAgICAiJGdpdF9kaXIvc3ZuLyR4L2luZm9cbiI7CisJCQlyZW5hbWUgIiRnaXRfZGlyLyR4L2luZm8iLCAiJGdpdF9kaXIvc3ZuLyR4L2luZm8iIG9yCisJCQkgICAgICAgY3JvYWsgIiQhOiAkeCI7CisJCQkjIGRvbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IHRoZXNlLCB0aGV5IHByb2JhYmx5CisJCQkjIGRvbid0IGV4aXN0IHdpdGggcmVwb3MgdGhpcyBvbGQgKHNhdmUgZm9yIGluZGV4LAorCQkJIyBhbmQgd2UgY2FuIGVhc2lseSByZWdlbmVyYXRlIHRoYXQpCisJCQlmb3JlYWNoIG15ICRmIChxdy91bmhhbmRsZWQubG9nIGluZGV4IC5yZXZfZGIvKSB7CisJCQkJcmVuYW1lICIkZ2l0X2Rpci8keC8kZiIsICIkZ2l0X2Rpci9zdm4vJHgvJGYiOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpbnQgU1RERVJSICIgLSAkZ2l0X2Rpci8keCA9PiAkZ2l0X2Rpci9zdm4vJHhcbiI7CisJCQlyZW5hbWUgIiRnaXRfZGlyLyR4IiwgIiRnaXRfZGlyL3N2bi8keCIgb3IKKwkJCSAgICAgICBjcm9hayAiJCE6ICR4IjsKKwkJfQorCQkkbWlncmF0ZWQrKzsKKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7CisJcHJpbnQgU1RERVJSICJEb25lIG1pZ3JhdGluZyBmcm9tIGEgZ2l0LXN2biB2MSBsYXlvdXRcbiI7CisJJG1pZ3JhdGVkOworfQorCitzdWIgcmVhZF9vbGRfdXJscyB7CisJbXkgKCRsX21hcCwgJHBmeCwgJHBhdGgpID0gQF87CisJbXkgQGRpcjsKKwlmb3JlYWNoICg8JHBhdGgvKj4pIHsKKwkJaWYgKC1yICIkXy9pbmZvL3VybCIpIHsKKwkJCSRwZnggLj0gJy8nIGlmICRwZnggJiYgJHBmeCAhfiBtIS8kITsKKwkJCW15ICRyZWZfaWQgPSAkcGZ4IC4gYmFzZW5hbWUgJF87CisJCQlteSAkdXJsID0gOjpmaWxlX3RvX3MoIiRfL2luZm8vdXJsIik7CisJCQkkbF9tYXAtPnskcmVmX2lkfSA9ICR1cmw7CisJCX0gZWxzaWYgKC1kICRfKSB7CisJCQlwdXNoIEBkaXIsICRfOworCQl9CisJfQorCWZvcmVhY2ggKEBkaXIpIHsKKwkJbXkgJHggPSAkXzsKKwkJJHggPX4gcyFeXFEkRU5We0dJVF9ESVJ9XEUvc3ZuLyEhbzsKKwkJcmVhZF9vbGRfdXJscygkbF9tYXAsICR4LCAkXyk7CisJfQorfQorCitzdWIgbWlncmF0ZV9mcm9tX3YyIHsKKwlteSBAY2ZnID0gY29tbWFuZChxdy9jb25maWcgLWwvKTsKKwlyZXR1cm4gaWYgZ3JlcCAvXnN2bi1yZW1vdGVcLi4rXC51cmw9LywgQGNmZzsKKwlteSAlbF9tYXA7CisJcmVhZF9vbGRfdXJscyhcJWxfbWFwLCAnJywgIiRFTlZ7R0lUX0RJUn0vc3ZuIik7CisJbXkgJG1pZ3JhdGVkID0gMDsKKworCXJlcXVpcmUgR2l0OjpTVk47CisJZm9yZWFjaCBteSAkcmVmX2lkIChzb3J0IGtleXMgJWxfbWFwKSB7CisJCWV2YWwgeyBHaXQ6OlNWTi0+aW5pdCgkbF9tYXB7JHJlZl9pZH0sICcnLCB1bmRlZiwgJHJlZl9pZCkgfTsKKwkJaWYgKCRAKSB7CisJCQlHaXQ6OlNWTi0+aW5pdCgkbF9tYXB7JHJlZl9pZH0sICcnLCAkcmVmX2lkLCAkcmVmX2lkKTsKKwkJfQorCQkkbWlncmF0ZWQrKzsKKwl9CisJJG1pZ3JhdGVkOworfQorCitzdWIgbWluaW1pemVfY29ubmVjdGlvbnMgeworCXJlcXVpcmUgR2l0OjpTVk47CisJcmVxdWlyZSBHaXQ6OlNWTjo6UmE7CisKKwlteSAkciA9IEdpdDo6U1ZOOjpyZWFkX2FsbF9yZW1vdGVzKCk7CisJbXkgJG5ld191cmxzID0ge307CisJbXkgJHJvb3RfcmVwb3MgPSB7fTsKKwlmb3JlYWNoIG15ICRyZXBvX2lkIChrZXlzICUkcikgeworCQlteSAkdXJsID0gJHItPnskcmVwb19pZH0tPnt1cmx9IG9yIG5leHQ7CisJCW15ICRmZXRjaCA9ICRyLT57JHJlcG9faWR9LT57ZmV0Y2h9IG9yIG5leHQ7CisJCW15ICRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCR1cmwpOworCisJCSMgc2tpcCBleGlzdGluZyBjYXNlcyB3aGVyZSB3ZSBhbHJlYWR5IGNvbm5lY3QgdG8gdGhlIHJvb3QKKwkJaWYgKCgkcmEtPnVybCBlcSAkcmEtPntyZXBvc19yb290fSkgfHwKKwkJICAgICgkcmEtPntyZXBvc19yb290fSBlcSAkcmVwb19pZCkpIHsKKwkJCSRyb290X3JlcG9zLT57JHJhLT51cmx9ID0gJHJlcG9faWQ7CisJCQluZXh0OworCQl9CisKKwkJbXkgJHJvb3RfcmEgPSBHaXQ6OlNWTjo6UmEtPm5ldygkcmEtPntyZXBvc19yb290fSk7CisJCW15ICRyb290X3BhdGggPSAkcmEtPnVybDsKKwkJJHJvb3RfcGF0aCA9fiBzI15cUSRyYS0+e3JlcG9zX3Jvb3R9XEUoL3wkKSMjOworCQlmb3JlYWNoIG15ICRwYXRoIChrZXlzICUkZmV0Y2gpIHsKKwkJCW15ICRyZWZfaWQgPSAkZmV0Y2gtPnskcGF0aH07CisJCQlteSAkZ3MgPSBHaXQ6OlNWTi0+bmV3KCRyZWZfaWQsICRyZXBvX2lkLCAkcGF0aCk7CisKKwkJCSMgbWFrZSBzdXJlIHdlIGNhbiByZWFkIHdoZW4gY29ubmVjdGluZyB0bworCQkJIyBhIGhpZ2hlciBsZXZlbCBvZiBhIHJlcG9zaXRvcnkKKwkJCW15ICgkbGFzdF9yZXYsIHVuZGVmKSA9ICRncy0+bGFzdF9yZXZfY29tbWl0OworCQkJaWYgKCFkZWZpbmVkICRsYXN0X3JldikgeworCQkJCSRsYXN0X3JldiA9IGV2YWwgeworCQkJCQkkcm9vdF9yYS0+Z2V0X2xhdGVzdF9yZXZudW07CisJCQkJfTsKKwkJCQluZXh0IGlmICRAOworCQkJfQorCQkJbXkgJG5ldyA9ICRyb290X3BhdGg7CisJCQkkbmV3IC49IGxlbmd0aCAkcGF0aCA/ICIvJHBhdGgiIDogJyc7CisJCQlldmFsIHsKKwkJCQkkcm9vdF9yYS0+Z2V0X2xvZyhbJG5ld10sICRsYXN0X3JldiwgJGxhc3RfcmV2LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCBzdWIgeyB9KTsKKwkJCX07CisJCQluZXh0IGlmICRAOworCQkJJG5ld191cmxzLT57JHJhLT57cmVwb3Nfcm9vdH19LT57JG5ld30gPQorCQkJICAgICAgICB7IHJlZl9pZCA9PiAkcmVmX2lkLAorCQkJCSAgb2xkX3JlcG9faWQgPT4gJHJlcG9faWQsCisJCQkJICBvbGRfcGF0aCA9PiAkcGF0aCB9OworCQl9CisJfQorCisJbXkgQGVtcHRpZWQ7CisJZm9yZWFjaCBteSAkdXJsIChrZXlzICUkbmV3X3VybHMpIHsKKwkJIyBzZWUgaWYgd2UgY2FuIHJlLXVzZSBhbiBleGlzdGluZyBbc3ZuLXJlbW90ZSAicmVwb19pZCJdCisJCSMgaW5zdGVhZCBvZiBjcmVhdGluZyBhKG4gdWdseSkgbmV3IHNlY3Rpb246CisJCW15ICRyZXBvX2lkID0gJHJvb3RfcmVwb3MtPnskdXJsfSB8fCAkdXJsOworCisJCW15ICRmZXRjaCA9ICRuZXdfdXJscy0+eyR1cmx9OworCQlmb3JlYWNoIG15ICRwYXRoIChrZXlzICUkZmV0Y2gpIHsKKwkJCW15ICR4ID0gJGZldGNoLT57JHBhdGh9OworCQkJR2l0OjpTVk4tPmluaXQoJHVybCwgJHBhdGgsICRyZXBvX2lkLCAkeC0+e3JlZl9pZH0pOworCQkJbXkgJHBmeCA9ICJzdm4tcmVtb3RlLiR4LT57b2xkX3JlcG9faWR9IjsKKworCQkJbXkgJG9sZF9mZXRjaCA9IHF1b3RlbWV0YSgiJHgtPntvbGRfcGF0aH06Ii4KKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIiR4LT57cmVmX2lkfSIpOworCQkJY29tbWFuZF9ub2lzeShxdy9jb25maWcgLS11bnNldC8sCisJCQkgICAgICAgICAgICAgICIkcGZ4LmZldGNoIiwgJ14nLiAkb2xkX2ZldGNoIC4gJyQnKTsKKwkJCWRlbGV0ZSAkci0+eyR4LT57b2xkX3JlcG9faWR9fS0+CisJCQkgICAgICAge2ZldGNofS0+eyR4LT57b2xkX3BhdGh9fTsKKwkJCWlmICgha2V5cyAleyRyLT57JHgtPntvbGRfcmVwb19pZH19LT57ZmV0Y2h9fSkgeworCQkJCWNvbW1hbmRfbm9pc3kocXcvY29uZmlnIC0tdW5zZXQvLAorCQkJCSAgICAgICAgICAgICAgIiRwZngudXJsIik7CisJCQkJcHVzaCBAZW1wdGllZCwgJHgtPntvbGRfcmVwb19pZH0KKwkJCX0KKwkJfQorCX0KKwlpZiAoQGVtcHRpZWQpIHsKKwkJbXkgJGZpbGUgPSAkRU5We0dJVF9DT05GSUd9IHx8ICIkRU5We0dJVF9ESVJ9L2NvbmZpZyI7CisJCXByaW50IFNUREVSUiA8PEVPRjsKK1RoZSBmb2xsb3dpbmcgW3N2bi1yZW1vdGVdIHNlY3Rpb25zIGluIHlvdXIgY29uZmlnIGZpbGUgKCRmaWxlKSBhcmUgZW1wdHkKK2FuZCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQ6CitFT0YKKwkJcHJpbnQgU1RERVJSICJbc3ZuLXJlbW90ZSBcIiRfXCJdXG4iIGZvcmVhY2ggQGVtcHRpZWQ7CisJfQorfQorCitzdWIgbWlncmF0aW9uX2NoZWNrIHsKKwltaWdyYXRlX2Zyb21fdjAoKTsKKwltaWdyYXRlX2Zyb21fdjEoKTsKKwltaWdyYXRlX2Zyb21fdjIoKTsKKwltaW5pbWl6ZV9jb25uZWN0aW9ucygpIGlmICRfbWluaW1pemU7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9wZXJsL0dpdC9TVk4vUHJvbXB0LnBtIGIvcGVybC9HaXQvU1ZOL1Byb21wdC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTZmOGFmCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvU1ZOL1Byb21wdC5wbQpAQCAtMCwwICsxLDIwMiBAQAorcGFja2FnZSBHaXQ6OlNWTjo6UHJvbXB0OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3JlcXVpcmUgU1ZOOjpDb3JlOwordXNlIHZhcnMgcXcvJF9ub19hdXRoX2NhY2hlICRfdXNlcm5hbWUvOworCitzdWIgc2ltcGxlIHsKKwlteSAoJGNyZWQsICRyZWFsbSwgJGRlZmF1bHRfdXNlcm5hbWUsICRtYXlfc2F2ZSwgJHBvb2wpID0gQF87CisJJG1heV9zYXZlID0gdW5kZWYgaWYgJF9ub19hdXRoX2NhY2hlOworCSRkZWZhdWx0X3VzZXJuYW1lID0gJF91c2VybmFtZSBpZiBkZWZpbmVkICRfdXNlcm5hbWU7CisJaWYgKGRlZmluZWQgJGRlZmF1bHRfdXNlcm5hbWUgJiYgbGVuZ3RoICRkZWZhdWx0X3VzZXJuYW1lKSB7CisJCWlmIChkZWZpbmVkICRyZWFsbSAmJiBsZW5ndGggJHJlYWxtKSB7CisJCQlwcmludCBTVERFUlIgIkF1dGhlbnRpY2F0aW9uIHJlYWxtOiAkcmVhbG1cbiI7CisJCQlTVERFUlItPmZsdXNoOworCQl9CisJCSRjcmVkLT51c2VybmFtZSgkZGVmYXVsdF91c2VybmFtZSk7CisJfSBlbHNlIHsKKwkJdXNlcm5hbWUoJGNyZWQsICRyZWFsbSwgJG1heV9zYXZlLCAkcG9vbCk7CisJfQorCSRjcmVkLT5wYXNzd29yZChfcmVhZF9wYXNzd29yZCgiUGFzc3dvcmQgZm9yICciIC4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNyZWQtPnVzZXJuYW1lIC4gIic6ICIsICRyZWFsbSkpOworCSRjcmVkLT5tYXlfc2F2ZSgkbWF5X3NhdmUpOworCSRTVk46Ol9Db3JlOjpTVk5fTk9fRVJST1I7Cit9CisKK3N1YiBzc2xfc2VydmVyX3RydXN0IHsKKwlteSAoJGNyZWQsICRyZWFsbSwgJGZhaWx1cmVzLCAkY2VydF9pbmZvLCAkbWF5X3NhdmUsICRwb29sKSA9IEBfOworCSRtYXlfc2F2ZSA9IHVuZGVmIGlmICRfbm9fYXV0aF9jYWNoZTsKKwlwcmludCBTVERFUlIgIkVycm9yIHZhbGlkYXRpbmcgc2VydmVyIGNlcnRpZmljYXRlIGZvciAnJHJlYWxtJzpcbiI7CisJeworCQlubyB3YXJuaW5ncyAnb25jZSc7CisJCSMgQWxsIHZhcmlhYmxlcyBTVk46OkF1dGg6OlNTTDo6KiBhcmUgdXNlZCBvbmx5IG9uY2UsCisJCSMgc28gd2UncmUgc2h1dHRpbmcgdXAgUGVybCB3YXJuaW5ncyBhYm91dCB0aGlzLgorCQlpZiAoJGZhaWx1cmVzICYgJFNWTjo6QXV0aDo6U1NMOjpVTktOT1dOQ0EpIHsKKwkJCXByaW50IFNUREVSUiAiIC0gVGhlIGNlcnRpZmljYXRlIGlzIG5vdCBpc3N1ZWQgIiwKKwkJCSAgICAiYnkgYSB0cnVzdGVkIGF1dGhvcml0eS4gVXNlIHRoZVxuIiwKKwkJCSAgICAiICAgZmluZ2VycHJpbnQgdG8gdmFsaWRhdGUgIiwKKwkJCSAgICAidGhlIGNlcnRpZmljYXRlIG1hbnVhbGx5IVxuIjsKKwkJfQorCQlpZiAoJGZhaWx1cmVzICYgJFNWTjo6QXV0aDo6U1NMOjpDTk1JU01BVENIKSB7CisJCQlwcmludCBTVERFUlIgIiAtIFRoZSBjZXJ0aWZpY2F0ZSBob3N0bmFtZSAiLAorCQkJICAgICJkb2VzIG5vdCBtYXRjaC5cbiI7CisJCX0KKwkJaWYgKCRmYWlsdXJlcyAmICRTVk46OkF1dGg6OlNTTDo6Tk9UWUVUVkFMSUQpIHsKKwkJCXByaW50IFNUREVSUiAiIC0gVGhlIGNlcnRpZmljYXRlIGlzIG5vdCB5ZXQgdmFsaWQuXG4iOworCQl9CisJCWlmICgkZmFpbHVyZXMgJiAkU1ZOOjpBdXRoOjpTU0w6OkVYUElSRUQpIHsKKwkJCXByaW50IFNUREVSUiAiIC0gVGhlIGNlcnRpZmljYXRlIGhhcyBleHBpcmVkLlxuIjsKKwkJfQorCQlpZiAoJGZhaWx1cmVzICYgJFNWTjo6QXV0aDo6U1NMOjpPVEhFUikgeworCQkJcHJpbnQgU1RERVJSICIgLSBUaGUgY2VydGlmaWNhdGUgaGFzICIsCisJCQkgICAgImFuIHVua25vd24gZXJyb3IuXG4iOworCQl9CisJfSAjIG5vIHdhcm5pbmdzICdvbmNlJworCXByaW50ZiBTVERFUlIKKwkgICAgICAgICJDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbjpcbiIuCisJICAgICAgICAiIC0gSG9zdG5hbWU6ICVzXG4iLgorCSAgICAgICAgIiAtIFZhbGlkOiBmcm9tICVzIHVudGlsICVzXG4iLgorCSAgICAgICAgIiAtIElzc3VlcjogJXNcbiIuCisJICAgICAgICAiIC0gRmluZ2VycHJpbnQ6ICVzXG4iLAorCSAgICAgICAgbWFwICRjZXJ0X2luZm8tPiRfLCBxdyhob3N0bmFtZSB2YWxpZF9mcm9tIHZhbGlkX3VudGlsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3Vlcl9kbmFtZSBmaW5nZXJwcmludCk7CisJbXkgJGNob2ljZTsKK3Byb21wdDoKKwlwcmludCBTVERFUlIgJG1heV9zYXZlID8KKwkgICAgICAiKFIpZWplY3QsIGFjY2VwdCAodCllbXBvcmFyaWx5IG9yIGFjY2VwdCAocCllcm1hbmVudGx5PyAiIDoKKwkgICAgICAiKFIpZWplY3Qgb3IgYWNjZXB0ICh0KWVtcG9yYXJpbHk/ICI7CisJU1RERVJSLT5mbHVzaDsKKwkkY2hvaWNlID0gbGMoc3Vic3RyKDxTVERJTj4gfHwgJ1InLCAwLCAxKSk7CisJaWYgKCRjaG9pY2UgPX4gL150JC9pKSB7CisJCSRjcmVkLT5tYXlfc2F2ZSh1bmRlZik7CisJfSBlbHNpZiAoJGNob2ljZSA9fiAvXnIkL2kpIHsKKwkJcmV0dXJuIC0xOworCX0gZWxzaWYgKCRtYXlfc2F2ZSAmJiAkY2hvaWNlID1+IC9ecCQvaSkgeworCQkkY3JlZC0+bWF5X3NhdmUoJG1heV9zYXZlKTsKKwl9IGVsc2UgeworCQlnb3RvIHByb21wdDsKKwl9CisJJGNyZWQtPmFjY2VwdGVkX2ZhaWx1cmVzKCRmYWlsdXJlcyk7CisJJFNWTjo6X0NvcmU6OlNWTl9OT19FUlJPUjsKK30KKworc3ViIHNzbF9jbGllbnRfY2VydCB7CisJbXkgKCRjcmVkLCAkcmVhbG0sICRtYXlfc2F2ZSwgJHBvb2wpID0gQF87CisJJG1heV9zYXZlID0gdW5kZWYgaWYgJF9ub19hdXRoX2NhY2hlOworCXByaW50IFNUREVSUiAiQ2xpZW50IGNlcnRpZmljYXRlIGZpbGVuYW1lOiAiOworCVNUREVSUi0+Zmx1c2g7CisJY2hvbXAobXkgJGZpbGVuYW1lID0gPFNURElOPik7CisJJGNyZWQtPmNlcnRfZmlsZSgkZmlsZW5hbWUpOworCSRjcmVkLT5tYXlfc2F2ZSgkbWF5X3NhdmUpOworCSRTVk46Ol9Db3JlOjpTVk5fTk9fRVJST1I7Cit9CisKK3N1YiBzc2xfY2xpZW50X2NlcnRfcHcgeworCW15ICgkY3JlZCwgJHJlYWxtLCAkbWF5X3NhdmUsICRwb29sKSA9IEBfOworCSRtYXlfc2F2ZSA9IHVuZGVmIGlmICRfbm9fYXV0aF9jYWNoZTsKKwkkY3JlZC0+cGFzc3dvcmQoX3JlYWRfcGFzc3dvcmQoIlBhc3N3b3JkOiAiLCAkcmVhbG0pKTsKKwkkY3JlZC0+bWF5X3NhdmUoJG1heV9zYXZlKTsKKwkkU1ZOOjpfQ29yZTo6U1ZOX05PX0VSUk9SOworfQorCitzdWIgdXNlcm5hbWUgeworCW15ICgkY3JlZCwgJHJlYWxtLCAkbWF5X3NhdmUsICRwb29sKSA9IEBfOworCSRtYXlfc2F2ZSA9IHVuZGVmIGlmICRfbm9fYXV0aF9jYWNoZTsKKwlpZiAoZGVmaW5lZCAkcmVhbG0gJiYgbGVuZ3RoICRyZWFsbSkgeworCQlwcmludCBTVERFUlIgIkF1dGhlbnRpY2F0aW9uIHJlYWxtOiAkcmVhbG1cbiI7CisJfQorCW15ICR1c2VybmFtZTsKKwlpZiAoZGVmaW5lZCAkX3VzZXJuYW1lKSB7CisJCSR1c2VybmFtZSA9ICRfdXNlcm5hbWU7CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSICJVc2VybmFtZTogIjsKKwkJU1RERVJSLT5mbHVzaDsKKwkJY2hvbXAoJHVzZXJuYW1lID0gPFNURElOPik7CisJfQorCSRjcmVkLT51c2VybmFtZSgkdXNlcm5hbWUpOworCSRjcmVkLT5tYXlfc2F2ZSgkbWF5X3NhdmUpOworCSRTVk46Ol9Db3JlOjpTVk5fTk9fRVJST1I7Cit9CisKK3N1YiBfcmVhZF9wYXNzd29yZCB7CisJbXkgKCRwcm9tcHQsICRyZWFsbSkgPSBAXzsKKwlteSAkcGFzc3dvcmQgPSAnJzsKKwlpZiAoZXhpc3RzICRFTlZ7R0lUX0FTS1BBU1N9KSB7CisJCW9wZW4oUEgsICItfCIsICRFTlZ7R0lUX0FTS1BBU1N9LCAkcHJvbXB0KTsKKwkJJHBhc3N3b3JkID0gPFBIPjsKKwkJJHBhc3N3b3JkID1+IHMvW1wwMTJcMDE1XS8vOyAjIFxuXHIKKwkJY2xvc2UoUEgpOworCX0gZWxzZSB7CisJCXByaW50IFNUREVSUiAkcHJvbXB0OworCQlTVERFUlItPmZsdXNoOworCQlyZXF1aXJlIFRlcm06OlJlYWRLZXk7CisJCVRlcm06OlJlYWRLZXk6OlJlYWRNb2RlKCdub2VjaG8nKTsKKwkJd2hpbGUgKGRlZmluZWQobXkgJGtleSA9IFRlcm06OlJlYWRLZXk6OlJlYWRLZXkoMCkpKSB7CisJCQlsYXN0IGlmICRrZXkgPX4gL1tcMDEyXDAxNV0vOyAjIFxuXHIKKwkJCSRwYXNzd29yZCAuPSAka2V5OworCQl9CisJCVRlcm06OlJlYWRLZXk6OlJlYWRNb2RlKCdyZXN0b3JlJyk7CisJCXByaW50IFNUREVSUiAiXG4iOworCQlTVERFUlItPmZsdXNoOworCX0KKwkkcGFzc3dvcmQ7Cit9CisKKzE7CitfX0VORF9fCisKK0dpdDo6U1ZOOjpQcm9tcHQgLSBhdXRoZW50aWNhdGlvbiBjYWxsYmFja3MgZm9yIGdpdC1zdm4KKworPWhlYWQxIFNZTk9QU0lTCisKKyAgICB1c2UgR2l0OjpTVk46OlByb21wdCBxdyhzaW1wbGUgc3NsX2NsaWVudF9jZXJ0IHNzbF9jbGllbnRfY2VydF9wdworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9zZXJ2ZXJfdHJ1c3QgdXNlcm5hbWUpOworICAgIHVzZSBTVk46OkNsaWVudCAoKTsKKworICAgIG15ICRjYWNoZWRfc2ltcGxlID0gU1ZOOjpDbGllbnQ6OmdldF9zaW1wbGVfcHJvdmlkZXIoKTsKKyAgICBteSAkZ2l0X3NpbXBsZSA9IFNWTjo6Q2xpZW50OjpnZXRfc2ltcGxlX3Byb21wdF9wcm92aWRlcihcJnNpbXBsZSwgMik7CisgICAgbXkgJGNhY2hlZF9zc2wgPSBTVk46OkNsaWVudDo6Z2V0X3NzbF9zZXJ2ZXJfdHJ1c3RfZmlsZV9wcm92aWRlcigpOworICAgIG15ICRnaXRfc3NsID0gU1ZOOjpDbGllbnQ6OmdldF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9wcm92aWRlcigKKyAgICAgICAgXCZzc2xfc2VydmVyX3RydXN0KTsKKyAgICBteSAkY2FjaGVkX2NlcnQgPSBTVk46OkNsaWVudDo6Z2V0X3NzbF9jbGllbnRfY2VydF9maWxlX3Byb3ZpZGVyKCk7CisgICAgbXkgJGdpdF9jZXJ0ID0gU1ZOOjpDbGllbnQ6OmdldF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X3Byb3ZpZGVyKAorICAgICAgICBcJnNzbF9jbGllbnRfY2VydCwgMik7CisgICAgbXkgJGNhY2hlZF9jZXJ0X3B3ID0gU1ZOOjpDbGllbnQ6OmdldF9zc2xfY2xpZW50X2NlcnRfcHdfZmlsZV9wcm92aWRlcigpOworICAgIG15ICRnaXRfY2VydF9wdyA9IFNWTjo6Q2xpZW50OjpnZXRfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9wcm92aWRlcigKKyAgICAgICAgXCZzc2xfY2xpZW50X2NlcnRfcHcsIDIpOworICAgIG15ICRjYWNoZWRfdXNlcm5hbWUgPSBTVk46OkNsaWVudDo6Z2V0X3VzZXJuYW1lX3Byb3ZpZGVyKCk7CisgICAgbXkgJGdpdF91c2VybmFtZSA9IFNWTjo6Q2xpZW50OjpnZXRfdXNlcm5hbWVfcHJvbXB0X3Byb3ZpZGVyKAorICAgICAgICBcJnVzZXJuYW1lLCAyKTsKKworICAgIG15ICRjdHggPSBuZXcgU1ZOOjpDbGllbnQoCisgICAgICAgIGF1dGggPT4gWworICAgICAgICAgICAgJGNhY2hlZF9zaW1wbGUsICRnaXRfc2ltcGxlLAorICAgICAgICAgICAgJGNhY2hlZF9zc2wsICRnaXRfc3NsLAorICAgICAgICAgICAgJGNhY2hlZF9jZXJ0LCAkZ2l0X2NlcnQsCisgICAgICAgICAgICAkY2FjaGVkX2NlcnRfcHcsICRnaXRfY2VydF9wdywKKyAgICAgICAgICAgICRjYWNoZWRfdXNlcm5hbWUsICRnaXRfdXNlcm5hbWUKKyAgICAgICAgXSk7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIG1vZHVsZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlICJnaXQgc3ZuIiBjb21tYW5kLgorSXQgaW1wbGVtZW50cyBnaXQtc3ZuJ3MgYXV0aGVudGljYXRpb24gcG9saWN5LiAgRG8gbm90IHVzZSBpdCB1bmxlc3MKK3lvdSBhcmUgZGV2ZWxvcGluZyBnaXQtc3ZuLgorCitUaGUgaW50ZXJmYWNlIHdpbGwgY2hhbmdlIGFzIGdpdC1zdm4gZXZvbHZlcy4KKworPWhlYWQxIERFUEVOREVOQ0lFUworCitMPFNWTjo6Q29yZT4uCisKKz1oZWFkMSBTRUUgQUxTTworCitMPFNWTjo6Q2xpZW50Pi4KKworPWhlYWQxIElOQ09NUEFUSUJJTElUSUVTCisKK05vbmUgcmVwb3J0ZWQuCisKKz1oZWFkMSBCVUdTCisKK05vbmUuCmRpZmYgLS1naXQgYS9wZXJsL0dpdC9TVk4vUmEucG0gYi9wZXJsL0dpdC9TVk4vUmEucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5Yzk3YgotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0L1NWTi9SYS5wbQpAQCAtMCwwICsxLDY2OCBAQAorcGFja2FnZSBHaXQ6OlNWTjo6UmE7Cit1c2UgdmFycyBxdy9ASVNBICRjb25maWdfZGlyICRfaWdub3JlX3JlZnNfcmVnZXggJF9sb2dfd2luZG93X3NpemUvOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBTVk46OkNsaWVudDsKK3VzZSBHaXQ6OlNWTjo6VXRpbHMgcXcoCisJY2Fub25pY2FsaXplX3VybAorCWNhbm9uaWNhbGl6ZV9wYXRoCisJYWRkX3BhdGhfdG9fdXJsCispOworCit1c2UgU1ZOOjpSYTsKK0JFR0lOIHsKKwlASVNBID0gcXcoU1ZOOjpSYSk7Cit9CisKK215ICgkcmFfaW52YWxpZCwgJGNhbl9kb19zd2l0Y2gsICVpZ25vcmVkX2VyciwgJFJBKTsKKworQkVHSU4geworCSMgZW5mb3JjZSB0ZW1wb3JhcnkgcG9vbCB1c2FnZSBmb3Igc29tZSBzaW1wbGUgZnVuY3Rpb25zCisJbm8gc3RyaWN0ICdyZWZzJzsKKwlmb3IgbXkgJGYgKHF3L3Jldl9wcm9wbGlzdCBnZXRfbGF0ZXN0X3Jldm51bSBnZXRfdXVpZCBnZXRfcmVwb3Nfcm9vdAorCSAgICAgICAgICAgICAgZ2V0X2ZpbGUvKSB7CisJCW15ICRTVVBFUiA9ICJTVVBFUjo6JGYiOworCQkqJGYgPSBzdWIgeworCQkJbXkgJHNlbGYgPSBzaGlmdDsKKwkJCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJCQlteSBAcmV0ID0gJHNlbGYtPiRTVVBFUihAXywkcG9vbCk7CisJCQkkcG9vbC0+Y2xlYXI7CisJCQl3YW50YXJyYXkgPyBAcmV0IDogJHJldFswXTsKKwkJfTsKKwl9Cit9CisKK3N1YiBfYXV0aF9wcm92aWRlcnMgKCkgeworCW15IEBydiA9ICgKKwkgIFNWTjo6Q2xpZW50OjpnZXRfc2ltcGxlX3Byb3ZpZGVyKCksCisJICBTVk46OkNsaWVudDo6Z2V0X3NzbF9zZXJ2ZXJfdHJ1c3RfZmlsZV9wcm92aWRlcigpLAorCSAgU1ZOOjpDbGllbnQ6OmdldF9zaW1wbGVfcHJvbXB0X3Byb3ZpZGVyKAorCSAgICBcJkdpdDo6U1ZOOjpQcm9tcHQ6OnNpbXBsZSwgMiksCisJICBTVk46OkNsaWVudDo6Z2V0X3NzbF9jbGllbnRfY2VydF9maWxlX3Byb3ZpZGVyKCksCisJICBTVk46OkNsaWVudDo6Z2V0X3NzbF9jbGllbnRfY2VydF9wcm9tcHRfcHJvdmlkZXIoCisJICAgIFwmR2l0OjpTVk46OlByb21wdDo6c3NsX2NsaWVudF9jZXJ0LCAyKSwKKwkgIFNWTjo6Q2xpZW50OjpnZXRfc3NsX2NsaWVudF9jZXJ0X3B3X2ZpbGVfcHJvdmlkZXIoKSwKKwkgIFNWTjo6Q2xpZW50OjpnZXRfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9wcm92aWRlcigKKwkgICAgXCZHaXQ6OlNWTjo6UHJvbXB0Ojpzc2xfY2xpZW50X2NlcnRfcHcsIDIpLAorCSAgU1ZOOjpDbGllbnQ6OmdldF91c2VybmFtZV9wcm92aWRlcigpLAorCSAgU1ZOOjpDbGllbnQ6OmdldF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9wcm92aWRlcigKKwkgICAgXCZHaXQ6OlNWTjo6UHJvbXB0Ojpzc2xfc2VydmVyX3RydXN0KSwKKwkgIFNWTjo6Q2xpZW50OjpnZXRfdXNlcm5hbWVfcHJvbXB0X3Byb3ZpZGVyKAorCSAgICBcJkdpdDo6U1ZOOjpQcm9tcHQ6OnVzZXJuYW1lLCAyKQorCSk7CisKKwkjIGVhcmxpZXIgMS42LnggdmVyc2lvbnMgd291bGQgc2VnZmF1bHQsIGFuZCA8PSAxLjUueCBkaWRuJ3QgaGF2ZQorCSMgdGhpcyBmdW5jdGlvbgorCWlmICg6OmNvbXBhcmVfc3ZuX3ZlcnNpb24oJzEuNi4xNScpID49IDApIHsKKwkJbXkgJGNvbmZpZyA9IFNWTjo6Q29yZTo6Y29uZmlnX2dldF9jb25maWcoJGNvbmZpZ19kaXIpOworCQlteSAoJHAsIEBhKTsKKwkJIyBjb25maWdfZ2V0X2NvbmZpZyByZXR1cm5zIGFsbCBjb25maWcgZmlsZXMgZnJvbQorCQkjIH4vLnN1YnZlcnNpb24sIGF1dGhfZ2V0X3BsYXRmb3JtX3NwZWNpZmljX2NsaWVudF9wcm92aWRlcnMKKwkJIyBqdXN0IHdhbnRzIHRoZSBjb25maWcgImZpbGUiLgorCQlAYSA9ICgkY29uZmlnLT57J2NvbmZpZyd9LCB1bmRlZik7CisJCSRwID0gU1ZOOjpDb3JlOjphdXRoX2dldF9wbGF0Zm9ybV9zcGVjaWZpY19jbGllbnRfcHJvdmlkZXJzKEBhKTsKKwkJIyBJbnNlcnQgdGhlIHJldHVybiB2YWx1ZSBmcm9tCisJCSMgYXV0aF9nZXRfcGxhdGZvcm1fc3BlY2lmaWNfcHJvdmlkZXJzCisJCXVuc2hpZnQgQHJ2LCBAJHA7CisJfQorCVxAcnY7Cit9CisKKworc3ViIG5ldyB7CisJbXkgKCRjbGFzcywgJHVybCkgPSBAXzsKKwkkdXJsID0gY2Fub25pY2FsaXplX3VybCgkdXJsKTsKKwlyZXR1cm4gJFJBIGlmICgkUkEgJiYgJFJBLT51cmwgZXEgJHVybCk7CisKKwk6Ol9yZXFfc3ZuKCk7CisKKwlTVk46Ol9Db3JlOjpzdm5fY29uZmlnX2Vuc3VyZSgkY29uZmlnX2RpciwgdW5kZWYpOworCW15ICgkYmF0b24sICRjYWxsYmFja3MpID0gU1ZOOjpDb3JlOjphdXRoX29wZW5faGVscGVyKF9hdXRoX3Byb3ZpZGVycyk7CisJbXkgJGNvbmZpZyA9IFNWTjo6Q29yZTo6Y29uZmlnX2dldF9jb25maWcoJGNvbmZpZ19kaXIpOworCSRSQSA9IHVuZGVmOworCW15ICRkb250X3N0b3JlX3Bhc3N3b3JkcyA9IDE7CisJbXkgJGNvbmZfdCA9ICR7JGNvbmZpZ317J2NvbmZpZyd9OworCXsKKwkJbm8gd2FybmluZ3MgJ29uY2UnOworCQkjIFRoZSB1c2FnZSBvZiAkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR18qIHZhcmlhYmxlcworCQkjIHByb2R1Y2VzIHdhcm5pbmdzIHRoYXQgdmFyaWFibGVzIGFyZSB1c2VkIG9ubHkgb25jZS4KKwkJIyBJIGhhZCBub3QgZm91bmQgdGhlIGJldHRlciB3YXkgdG8gc2h1dCB0aGVtIHVwLCBzbworCQkjIHRoZSB3YXJuaW5ncyBvZiB0eXBlICdvbmNlJyBhcmUgZGlzYWJsZWQgaW4gdGhpcyBibG9jay4KKwkJaWYgKFNWTjo6X0NvcmU6OnN2bl9jb25maWdfZ2V0X2Jvb2woJGNvbmZfdCwKKwkJICAgICRTVk46Ol9Db3JlOjpTVk5fQ09ORklHX1NFQ1RJT05fQVVUSCwKKwkJICAgICRTVk46Ol9Db3JlOjpTVk5fQ09ORklHX09QVElPTl9TVE9SRV9QQVNTV09SRFMsCisJCSAgICAxKSA9PSAwKSB7CisJCQlTVk46Ol9Db3JlOjpzdm5fYXV0aF9zZXRfcGFyYW1ldGVyKCRiYXRvbiwKKwkJCSAgICAkU1ZOOjpfQ29yZTo6U1ZOX0FVVEhfUEFSQU1fRE9OVF9TVE9SRV9QQVNTV09SRFMsCisJCQkgICAgYmxlc3MgKFwkZG9udF9zdG9yZV9wYXNzd29yZHMsICJfcF92b2lkIikpOworCQl9CisJCWlmIChTVk46Ol9Db3JlOjpzdm5fY29uZmlnX2dldF9ib29sKCRjb25mX3QsCisJCSAgICAkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR19TRUNUSU9OX0FVVEgsCisJCSAgICAkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR19PUFRJT05fU1RPUkVfQVVUSF9DUkVEUywKKwkJICAgIDEpID09IDApIHsKKwkJCSRHaXQ6OlNWTjo6UHJvbXB0Ojpfbm9fYXV0aF9jYWNoZSA9IDE7CisJCX0KKwl9ICMgbm8gd2FybmluZ3MgJ29uY2UnCisKKwlteSAkc2VsZiA9IFNWTjo6UmEtPm5ldyh1cmwgPT4gJHVybCwgYXV0aCA9PiAkYmF0b24sCisJICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9PiAkY29uZmlnLAorCQkJICAgICAgcG9vbCA9PiBTVk46OlBvb2wtPm5ldywKKwkgICAgICAgICAgICAgICAgICAgICAgYXV0aF9wcm92aWRlcl9jYWxsYmFja3MgPT4gJGNhbGxiYWNrcyk7CisJJFJBID0gYmxlc3MgJHNlbGYsICRjbGFzczsKKworCSMgTWFrZSBzdXJlIGl0cyBjYW5vbmljYWxpemVkCisJJHNlbGYtPnVybCgkdXJsKTsKKwkkc2VsZi0+e3N2bl9wYXRofSA9ICR1cmw7CisJJHNlbGYtPntyZXBvc19yb290fSA9ICRzZWxmLT5nZXRfcmVwb3Nfcm9vdDsKKwkkc2VsZi0+e3N2bl9wYXRofSA9fiBzI15cUSRzZWxmLT57cmVwb3Nfcm9vdH1cRSgvfCQpIyM7CisJJHNlbGYtPntjYWNoZX0gPSB7IGNoZWNrX3BhdGggPT4geyByID0+IDAsIGRhdGEgPT4ge30gfSwKKwkgICAgICAgICAgICAgICAgICAgZ2V0X2RpciA9PiB7IHIgPT4gMCwgZGF0YSA9PiB7fSB9IH07CisKKwlyZXR1cm4gJFJBOworfQorCitzdWIgdXJsIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCisJaWYgKEBfKSB7CisJCW15ICR1cmwgPSBzaGlmdDsKKwkJJHNlbGYtPnt1cmx9ID0gY2Fub25pY2FsaXplX3VybCgkdXJsKTsKKwkJcmV0dXJuOworCX0KKworCXJldHVybiAkc2VsZi0+e3VybH07Cit9CisKK3N1YiBjaGVja19wYXRoIHsKKwlteSAoJHNlbGYsICRwYXRoLCAkcikgPSBAXzsKKwlteSAkY2FjaGUgPSAkc2VsZi0+e2NhY2hlfS0+e2NoZWNrX3BhdGh9OworCWlmICgkciA9PSAkY2FjaGUtPntyfSAmJiBleGlzdHMgJGNhY2hlLT57ZGF0YX0tPnskcGF0aH0pIHsKKwkJcmV0dXJuICRjYWNoZS0+e2RhdGF9LT57JHBhdGh9OworCX0KKwlteSAkcG9vbCA9IFNWTjo6UG9vbC0+bmV3OworCW15ICR0ID0gJHNlbGYtPlNVUEVSOjpjaGVja19wYXRoKCRwYXRoLCAkciwgJHBvb2wpOworCSRwb29sLT5jbGVhcjsKKwlpZiAoJHIgIT0gJGNhY2hlLT57cn0pIHsKKwkJJXskY2FjaGUtPntkYXRhfX0gPSAoKTsKKwkJJGNhY2hlLT57cn0gPSAkcjsKKwl9CisJJGNhY2hlLT57ZGF0YX0tPnskcGF0aH0gPSAkdDsKK30KKworc3ViIGdldF9kaXIgeworCW15ICgkc2VsZiwgJGRpciwgJHIpID0gQF87CisJbXkgJGNhY2hlID0gJHNlbGYtPntjYWNoZX0tPntnZXRfZGlyfTsKKwlpZiAoJHIgPT0gJGNhY2hlLT57cn0pIHsKKwkJaWYgKG15ICR4ID0gJGNhY2hlLT57ZGF0YX0tPnskZGlyfSkgeworCQkJcmV0dXJuIHdhbnRhcnJheSA/IEAkeCA6ICR4LT5bMF07CisJCX0KKwl9CisJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKKwlteSAoJGQsIHVuZGVmLCAkcHJvcHMpID0gJHNlbGYtPlNVUEVSOjpnZXRfZGlyKCRkaXIsICRyLCAkcG9vbCk7CisJbXkgJWRpcmVudHMgPSBtYXAgeyAkXyA9PiB7IGtpbmQgPT4gJGQtPnskX30tPmtpbmQgfSB9IGtleXMgJSRkOworCSRwb29sLT5jbGVhcjsKKwlpZiAoJHIgIT0gJGNhY2hlLT57cn0pIHsKKwkJJXskY2FjaGUtPntkYXRhfX0gPSAoKTsKKwkJJGNhY2hlLT57cn0gPSAkcjsKKwl9CisJJGNhY2hlLT57ZGF0YX0tPnskZGlyfSA9IFsgXCVkaXJlbnRzLCAkciwgJHByb3BzIF07CisJd2FudGFycmF5ID8gKFwlZGlyZW50cywgJHIsICRwcm9wcykgOiBcJWRpcmVudHM7Cit9CisKK3N1YiBERVNUUk9ZIHsKKwkjIGRvIG5vdCBjYWxsIHRoZSByZWFsIERFU1RST1kgc2luY2Ugd2Ugc3RvcmUgb3Vyc2VsdmVzIGluICRSQQorfQorCisjIGdldF9sb2cocGF0aHMsIHN0YXJ0LCBlbmQsIGxpbWl0LAorIyAgICAgICAgIGRpc2NvdmVyX2NoYW5nZWRfcGF0aHMsIHN0cmljdF9ub2RlX2hpc3RvcnksIHJlY2VpdmVyKQorc3ViIGdldF9sb2cgeworCW15ICgkc2VsZiwgQGFyZ3MpID0gQF87CisJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKKworCSMgc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfdCBvYmplY3RzIHBhc3NlZCB0byBnZXRfbG9nIGFyZSBsaWtlbHkgdG8gYmUKKwkjIG92ZXJ3cml0dGVuIGV2ZW4gaWYgb25seSB0aGUgcmVmcyBhcmUgY29waWVkIHRvIGFuIGV4dGVybmFsIHZhcmlhYmxlLAorCSMgc28gd2Ugc2hvdWxkIGR1cCB0aGUgc3RydWN0dXJlcyBpbiB0aGVpciBlbnRpcmV0eS4gIFVzaW5nIGFuCisJIyBleHRlcm5hbGx5IHBhc3NlZCBwb29sIChpbnN0ZWFkIG9mIG91ciB0ZW1wb3JhcnkgYW5kIHF1aWNrbHkgY2xlYXJlZAorCSMgcG9vbCBpbiBHaXQ6OlNWTjo6UmEpIGRvZXMgbm90IGhlbHAgbWF0dGVycyBhdCBhbGwuLi4KKwlteSAkcmVjZWl2ZXIgPSBwb3AgQGFyZ3M7CisJbXkgJHByZWZpeCA9ICIvIi4kc2VsZi0+e3N2bl9wYXRofTsKKwkkcHJlZml4ID1+IHMjLysoJCkjIzsKKwlteSAkcHJlZml4X3JlZ2V4ID0gcXIjXlxRJHByZWZpeFxFIzsKKwlwdXNoKEBhcmdzLCBzdWIgeworCQlteSAoJHBhdGhzKSA9ICRfWzBdOworCQlyZXR1cm4gJiRyZWNlaXZlcihAXykgdW5sZXNzICRwYXRoczsKKwkJJF9bMF0gPSAoKTsKKwkJZm9yZWFjaCBteSAkcCAoa2V5cyAlJHBhdGhzKSB7CisJCQlteSAkaSA9ICRwYXRocy0+eyRwfTsKKwkJCSMgTWFrZSBwYXRoIHJlbGF0aXZlIHRvIG91ciB1cmwsIG5vdCByZXBvc19yb290CisJCQkkcCA9fiBzLyRwcmVmaXhfcmVnZXgvLzsKKwkJCW15ICVzID0gbWFwIHsgJF8gPT4gJGktPiRfOyB9CisJCQkJcXcvY29weWZyb21fcGF0aCBjb3B5ZnJvbV9yZXYgYWN0aW9uLzsKKwkJCWlmICgkc3snY29weWZyb21fcGF0aCd9KSB7CisJCQkJJHN7J2NvcHlmcm9tX3BhdGgnfSA9fiBzLyRwcmVmaXhfcmVnZXgvLzsKKwkJCQkkc3snY29weWZyb21fcGF0aCd9ID0gY2Fub25pY2FsaXplX3BhdGgoJHN7J2NvcHlmcm9tX3BhdGgnfSk7CisJCQl9CisJCQkkX1swXXskcH0gPSBcJXM7CisJCX0KKwkJJiRyZWNlaXZlcihAXyk7CisJfSk7CisKKworCSMgdGhlIGxpbWl0IHBhcmFtZXRlciB3YXMgbm90IHN1cHBvcnRlZCBpbiBTVk4gMS4xLngsIHNvIHdlCisJIyBkcm9wIGl0LiAgVGhlcmVmb3JlLCB0aGUgcmVjZWl2ZXIgY2FsbGJhY2sgcGFzc2VkIHRvIGl0CisJIyBpcyBtYWRlIGF3YXJlIG9mIHRoaXMgbGltaXRhdGlvbiBieSBiZWluZyB3cmFwcGVkIGlmCisJIyB0aGUgbGltaXQgcGFzc2VkIHRvIGlzIGJlaW5nIHdyYXBwZWQuCisJaWYgKDo6Y29tcGFyZV9zdm5fdmVyc2lvbignMS4yLjAnKSA8PSAwKSB7CisJCW15ICRsaW1pdCA9IHNwbGljZShAYXJncywgMywgMSk7CisJCWlmICgkbGltaXQgPiAwKSB7CisJCQlteSAkcmVjZWl2ZXIgPSBwb3AgQGFyZ3M7CisJCQlwdXNoKEBhcmdzLCBzdWIgeyAmJHJlY2VpdmVyKEBfKSBpZiAoLS0kbGltaXQgPj0gMCkgfSk7CisJCX0KKwl9CisJbXkgJHJldCA9ICRzZWxmLT5TVVBFUjo6Z2V0X2xvZyhAYXJncywgJHBvb2wpOworCSRwb29sLT5jbGVhcjsKKwkkcmV0OworfQorCitzdWIgdHJlZXNfbWF0Y2ggeworCW15ICgkc2VsZiwgJHVybDEsICRyZXYxLCAkdXJsMiwgJHJldjIpID0gQF87CisJbXkgJGN0eCA9IFNWTjo6Q2xpZW50LT5uZXcoYXV0aCA9PiBfYXV0aF9wcm92aWRlcnMpOworCW15ICRvdXQgPSBJTzo6RmlsZS0+bmV3X3RtcGZpbGU7CisKKwkjIG9sZGVyIFNWTiAoMS4xLngpIGRvZXNuJ3QgdGFrZSAkcG9vbCBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIgZm9yCisJIyAkY3R4LT5kaWZmKCksIHNvIHdlJ2xsIGNyZWF0ZSBhIGRlZmF1bHQgb25lCisJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ld19kZWZhdWx0X3N1YjsKKworCSRyYV9pbnZhbGlkID0gMTsgIyB0aGlzIHdpbGwgb3BlbiBhIG5ldyBTVk46OlJhIGNvbm5lY3Rpb24gdG8gJHVybDEKKwkkY3R4LT5kaWZmKFtdLCAkdXJsMSwgJHJldjEsICR1cmwyLCAkcmV2MiwgMSwgMSwgMCwgJG91dCwgJG91dCk7CisJJG91dC0+Zmx1c2g7CisJbXkgJHJldCA9ICgoJG91dC0+c3RhdClbN10gPT0gMCk7CisJY2xvc2UgJG91dCBvciBjcm9hayAkITsKKworCSRyZXQ7Cit9CisKK3N1YiBnZXRfY29tbWl0X2VkaXRvciB7CisJbXkgKCRzZWxmLCAkbG9nLCAkY2IsICRwb29sKSA9IEBfOworCisJbXkgQGxvY2sgPSAoOjpjb21wYXJlX3N2bl92ZXJzaW9uKCcxLjIuMCcpID49IDApID8gKHVuZGVmLCAwKSA6ICgpOworCSRzZWxmLT5TVVBFUjo6Z2V0X2NvbW1pdF9lZGl0b3IoJGxvZywgJGNiLCBAbG9jaywgJHBvb2wpOworfQorCitzdWIgZ3NfZG9fdXBkYXRlIHsKKwlteSAoJHNlbGYsICRyZXZfYSwgJHJldl9iLCAkZ3MsICRlZGl0b3IpID0gQF87CisJbXkgJG5ldyA9ICgkcmV2X2EgPT0gJHJldl9iKTsKKwlteSAkcGF0aCA9ICRncy0+cGF0aDsKKworCWlmICgkbmV3ICYmIC1lICRncy0+e2luZGV4fSkgeworCQl1bmxpbmsgJGdzLT57aW5kZXh9IG9yIGRpZQorCQkgICJDb3VsZG4ndCB1bmxpbmsgaW5kZXg6ICRncy0+e2luZGV4fTogJCFcbiI7CisJfQorCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJJGVkaXRvci0+c2V0X3BhdGhfc3RyaXAoJHBhdGgpOworCW15IChAcGMpID0gc3BsaXQgbSMvIywgJHBhdGg7CisJbXkgJHJlcG9ydGVyID0gJHNlbGYtPmRvX3VwZGF0ZSgkcmV2X2IsIChAcGMgPyBzaGlmdCBAcGMgOiAnJyksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAkZWRpdG9yLCAkcG9vbCk7CisJbXkgQGxvY2sgPSAoOjpjb21wYXJlX3N2bl92ZXJzaW9uKCcxLjIuMCcpID49IDApID8gKHVuZGVmKSA6ICgpOworCisJIyBTaW5jZSB3ZSBjYW4ndCByZWx5IG9uIHN2bl9yYV9yZXBhcmVudCBiZWluZyBhdmFpbGFibGUsIHdlJ2xsCisJIyBqdXN0IGhhdmUgdG8gZG8gc29tZSBtYWdpYyB3aXRoIHNldF9wYXRoIHRvIG1ha2UgaXQgc28KKwkjIHdlIG9ubHkgd2FudCBhIHBhcnRpYWwgcGF0aC4KKwlteSAkc3AgPSAnJzsKKwlteSAkZmluYWwgPSBqb2luKCcvJywgQHBjKTsKKwl3aGlsZSAoQHBjKSB7CisJCSRyZXBvcnRlci0+c2V0X3BhdGgoJHNwLCAkcmV2X2IsIDAsIEBsb2NrLCAkcG9vbCk7CisJCSRzcCAuPSAnLycgaWYgbGVuZ3RoICRzcDsKKwkJJHNwIC49IHNoaWZ0IEBwYzsKKwl9CisJZGllICJCVUc6ICckc3AnICE9ICckZmluYWwnXG4iIGlmICgkc3AgbmUgJGZpbmFsKTsKKworCSRyZXBvcnRlci0+c2V0X3BhdGgoJHNwLCAkcmV2X2EsICRuZXcsIEBsb2NrLCAkcG9vbCk7CisKKwkkcmVwb3J0ZXItPmZpbmlzaF9yZXBvcnQoJHBvb2wpOworCSRwb29sLT5jbGVhcjsKKwkkZWRpdG9yLT57Z2l0X2NvbW1pdF9va307Cit9CisKKyMgdGhpcyByZXF1aXJlcyBTVk4gMS40LjMgb3IgbGF0ZXIgKGRvX3N3aXRjaCBkaWRuJ3Qgd29yayBiZWZvcmUgMS40LjMsIGFuZAorIyBzdm5fcmFfcmVwYXJlbnQgZGlkbid0IHdvcmsgYmVmb3JlIDEuNCkKK3N1YiBnc19kb19zd2l0Y2ggeworCW15ICgkc2VsZiwgJHJldl9hLCAkcmV2X2IsICRncywgJHVybF9iLCAkZWRpdG9yKSA9IEBfOworCW15ICRwYXRoID0gJGdzLT5wYXRoOworCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisKKwlteSAkb2xkX3VybCA9ICRzZWxmLT51cmw7CisJbXkgJGZ1bGxfdXJsID0gYWRkX3BhdGhfdG9fdXJsKCAkc2VsZi0+dXJsLCAkcGF0aCApOworCW15ICgkcmEsICRyZXBhcmVudGVkKTsKKworCWlmICgkb2xkX3VybCA9fiBtI15zdm4oXCtzc2gpPzovLyMgfHwKKwkgICAgKCRmdWxsX3VybCA9fiBtI15odHRwcz86Ly8jICYmCisJICAgICBjYW5vbmljYWxpemVfdXJsKCRmdWxsX3VybCkgbmUgJGZ1bGxfdXJsKSkgeworCQkkX1swXSA9IHVuZGVmOworCQkkc2VsZiA9IHVuZGVmOworCQkkUkEgPSB1bmRlZjsKKwkJJHJhID0gR2l0OjpTVk46OlJhLT5uZXcoJGZ1bGxfdXJsKTsKKwkJJHJhX2ludmFsaWQgPSAxOworCX0gZWxzaWYgKCRvbGRfdXJsIG5lICRmdWxsX3VybCkgeworCQlTVk46Ol9SYTo6c3ZuX3JhX3JlcGFyZW50KAorCQkJJHNlbGYtPntzZXNzaW9ufSwKKwkJCWNhbm9uaWNhbGl6ZV91cmwoJGZ1bGxfdXJsKSwKKwkJCSRwb29sCisJCSk7CisJCSRzZWxmLT51cmwoJGZ1bGxfdXJsKTsKKwkJJHJlcGFyZW50ZWQgPSAxOworCX0KKworCSRyYSB8fD0gJHNlbGY7CisJJHVybF9iID0gY2Fub25pY2FsaXplX3VybCgkdXJsX2IpOworCW15ICRyZXBvcnRlciA9ICRyYS0+ZG9fc3dpdGNoKCRyZXZfYiwgJycsIDEsICR1cmxfYiwgJGVkaXRvciwgJHBvb2wpOworCW15IEBsb2NrID0gKDo6Y29tcGFyZV9zdm5fdmVyc2lvbignMS4yLjAnKSA+PSAwKSA/ICh1bmRlZikgOiAoKTsKKwkkcmVwb3J0ZXItPnNldF9wYXRoKCcnLCAkcmV2X2EsIDAsIEBsb2NrLCAkcG9vbCk7CisJJHJlcG9ydGVyLT5maW5pc2hfcmVwb3J0KCRwb29sKTsKKworCWlmICgkcmVwYXJlbnRlZCkgeworCQlTVk46Ol9SYTo6c3ZuX3JhX3JlcGFyZW50KCRzZWxmLT57c2Vzc2lvbn0sICRvbGRfdXJsLCAkcG9vbCk7CisJCSRzZWxmLT51cmwoJG9sZF91cmwpOworCX0KKworCSRwb29sLT5jbGVhcjsKKwkkZWRpdG9yLT57Z2l0X2NvbW1pdF9va307Cit9CisKK3N1YiBsb25nZXN0X2NvbW1vbl9wYXRoIHsKKwlteSAoJGdzdiwgJGdsb2JzKSA9IEBfOworCW15ICVjb21tb247CisJbXkgJGNvbW1vbl9tYXggPSBzY2FsYXIgQCRnc3Y7CisKKwlmb3JlYWNoIG15ICRncyAoQCRnc3YpIHsKKwkJbXkgQHRtcCA9IHNwbGl0IG0jLyMsICRncy0+cGF0aDsKKwkJbXkgJHAgPSAnJzsKKwkJZm9yZWFjaCAoQHRtcCkgeworCQkJJHAgLj0gbGVuZ3RoKCRwKSA/ICIvJF8iIDogJF87CisJCQkkY29tbW9ueyRwfSB8fD0gMDsKKwkJCSRjb21tb257JHB9Kys7CisJCX0KKwl9CisJJGdsb2JzIHx8PSBbXTsKKwkkY29tbW9uX21heCArPSBzY2FsYXIgQCRnbG9iczsKKwlmb3JlYWNoIG15ICRnbG9iIChAJGdsb2JzKSB7CisJCW15IEB0bXAgPSBzcGxpdCBtIy8jLCAkZ2xvYi0+e3BhdGh9LT57bGVmdH07CisJCW15ICRwID0gJyc7CisJCWZvcmVhY2ggKEB0bXApIHsKKwkJCSRwIC49IGxlbmd0aCgkcCkgPyAiLyRfIiA6ICRfOworCQkJJGNvbW1vbnskcH0gfHw9IDA7CisJCQkkY29tbW9ueyRwfSsrOworCQl9CisJfQorCisJbXkgJGxvbmdlc3RfcGF0aCA9ICcnOworCWZvcmVhY2ggKHNvcnQge2xlbmd0aCAkYiA8PT4gbGVuZ3RoICRhfSBrZXlzICVjb21tb24pIHsKKwkJaWYgKCRjb21tb257JF99ID09ICRjb21tb25fbWF4KSB7CisJCQkkbG9uZ2VzdF9wYXRoID0gJF87CisJCQlsYXN0OworCQl9CisJfQorCSRsb25nZXN0X3BhdGg7Cit9CisKK3N1YiBnc19mZXRjaF9sb29wX2NvbW1vbiB7CisJbXkgKCRzZWxmLCAkYmFzZSwgJGhlYWQsICRnc3YsICRnbG9icykgPSBAXzsKKwlyZXR1cm4gaWYgKCRiYXNlID4gJGhlYWQpOworCW15ICRpbmMgPSAkX2xvZ193aW5kb3dfc2l6ZTsKKwlteSAoJG1pbiwgJG1heCkgPSAoJGJhc2UsICRoZWFkIDwgJGJhc2UgKyAkaW5jID8gJGhlYWQgOiAkYmFzZSArICRpbmMpOworCW15ICRsb25nZXN0X3BhdGggPSBsb25nZXN0X2NvbW1vbl9wYXRoKCRnc3YsICRnbG9icyk7CisJbXkgJHJhX3VybCA9ICRzZWxmLT51cmw7CisJbXkgJGZpbmRfdHJhaWxpbmdfZWRnZTsKKwl3aGlsZSAoMSkgeworCQlteSAlcmV2czsKKwkJbXkgJGVycjsKKwkJbXkgJGVycl9oYW5kbGVyID0gJFNWTjo6RXJyb3I6OmhhbmRsZXI7CisJCSRTVk46OkVycm9yOjpoYW5kbGVyID0gc3ViIHsKKwkJCSgkZXJyKSA9IEBfOworCQkJc2tpcF91bmtub3duX3JldnMoJGVycik7CisJCX07CisJCXN1YiBfY2IgeworCQkJbXkgKCRwYXRocywgJHIsICRhdXRob3IsICRkYXRlLCAkbG9nKSA9IEBfOworCQkJWyAkcGF0aHMsCisJCQkgIHsgYXV0aG9yID0+ICRhdXRob3IsIGRhdGUgPT4gJGRhdGUsIGxvZyA9PiAkbG9nIH0gXTsKKwkJfQorCQkkc2VsZi0+Z2V0X2xvZyhbJGxvbmdlc3RfcGF0aF0sICRtaW4sICRtYXgsIDAsIDEsIDEsCisJCSAgICAgICAgICAgICAgIHN1YiB7ICRyZXZzeyRfWzFdfSA9IF9jYihAXykgfSk7CisJCWlmICgkZXJyKSB7CisJCQlwcmludCAiQ2hlY2tlZCB0aHJvdWdoIHIkbWF4XHIiOworCQl9IGVsc2UgeworCQkJJGZpbmRfdHJhaWxpbmdfZWRnZSA9IDE7CisJCX0KKwkJaWYgKCRlcnIgYW5kICRmaW5kX3RyYWlsaW5nX2VkZ2UpIHsKKwkJCXByaW50IFNUREVSUiAiUGF0aCAnJGxvbmdlc3RfcGF0aCcgIiwKKwkJCQkgICAgICJ3YXMgcHJvYmFibHkgZGVsZXRlZDpcbiIsCisJCQkJICAgICAkZXJyLT5leHBhbmRlZF9tZXNzYWdlLAorCQkJCSAgICAgIlxuV2lsbCBhdHRlbXB0IHRvIGZvbGxvdyAiLAorCQkJCSAgICAgInJldmlzaW9ucyByJG1pbiAuLiByJG1heCAiLAorCQkJCSAgICAgImNvbW1pdHRlZCBiZWZvcmUgdGhlIGRlbGV0aW9uXG4iOworCQkJbXkgJGhpID0gJG1heDsKKwkJCXdoaWxlICgtLSRoaSA+PSAkbWluKSB7CisJCQkJbXkgJG9rOworCQkJCSRzZWxmLT5nZXRfbG9nKFskbG9uZ2VzdF9wYXRoXSwgJG1pbiwgJGhpLAorCQkJCSAgICAgICAgICAgICAgIDAsIDEsIDEsIHN1YiB7CisJCQkJICAgICAgICAgICAgICAgJG9rID0gJF9bMV07CisJCQkJICAgICAgICAgICAgICAgJHJldnN7JF9bMV19ID0gX2NiKEBfKSB9KTsKKwkJCQlpZiAoJG9rKSB7CisJCQkJCXByaW50IFNUREVSUiAiciRtaW4gLi4gciRvayBPS1xuIjsKKwkJCQkJbGFzdDsKKwkJCQl9CisJCQl9CisJCQkkZmluZF90cmFpbGluZ19lZGdlID0gMDsKKwkJfQorCQkkU1ZOOjpFcnJvcjo6aGFuZGxlciA9ICRlcnJfaGFuZGxlcjsKKworCQlteSAlZXhpc3RzID0gbWFwIHsgJF8tPnBhdGggPT4gJF8gfSBAJGdzdjsKKwkJZm9yZWFjaCBteSAkciAoc29ydCB7JGEgPD0+ICRifSBrZXlzICVyZXZzKSB7CisJCQlteSAoJHBhdGhzLCAkbG9nZ2VkKSA9IEB7JHJldnN7JHJ9fTsKKworCQkJZm9yZWFjaCBteSAkZ3MgKCRzZWxmLT5tYXRjaF9nbG9icyhcJWV4aXN0cywgJHBhdGhzLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ2xvYnMsICRyKSkgeworCQkJCWlmICgkZ3MtPnJldl9tYXBfbWF4ID49ICRyKSB7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCW5leHQgdW5sZXNzICRncy0+bWF0Y2hfcGF0aHMoJHBhdGhzLCAkcik7CisJCQkJJGdzLT57bG9nZ2VkX3Jldl9wcm9wc30gPSAkbG9nZ2VkOworCQkJCWlmIChteSAkbGFzdF9jb21taXQgPSAkZ3MtPmxhc3RfY29tbWl0KSB7CisJCQkJCSRncy0+YXNzZXJ0X2luZGV4X2NsZWFuKCRsYXN0X2NvbW1pdCk7CisJCQkJfQorCQkJCW15ICRsb2dfZW50cnkgPSAkZ3MtPmRvX2ZldGNoKCRwYXRocywgJHIpOworCQkJCWlmICgkbG9nX2VudHJ5KSB7CisJCQkJCSRncy0+ZG9fZ2l0X2NvbW1pdCgkbG9nX2VudHJ5KTsKKwkJCQl9CisJCQkJJEdpdDo6U1ZOOjpJTkRFWF9GSUxFU3skZ3MtPntpbmRleH19ID0gMTsKKwkJCX0KKwkJCWZvcmVhY2ggbXkgJGcgKEAkZ2xvYnMpIHsKKwkJCQlteSAkayA9ICJzdm4tcmVtb3RlLiRnLT57cmVtb3RlfS4iIC4KKwkJCQkgICAgICAgICIkZy0+e3R9LW1heFJldiI7CisJCQkJR2l0OjpTVk46OnRtcF9jb25maWcoJGssICRyKTsKKwkJCX0KKwkJCWlmICgkcmFfaW52YWxpZCkgeworCQkJCSRfWzBdID0gdW5kZWY7CisJCQkJJHNlbGYgPSB1bmRlZjsKKwkJCQkkUkEgPSB1bmRlZjsKKwkJCQkkc2VsZiA9IEdpdDo6U1ZOOjpSYS0+bmV3KCRyYV91cmwpOworCQkJCSRyYV9pbnZhbGlkID0gdW5kZWY7CisJCQl9CisJCX0KKwkJIyBwcmUtZmlsbCB0aGUgLnJldl9kYiBzaW5jZSBpdCdsbCBldmVudHVhbGx5IGdldCBmaWxsZWQgaW4KKwkJIyB3aXRoICcwJyB4NDAgaWYgc29tZXRoaW5nIG5ldyBnZXRzIGNvbW1pdHRlZAorCQlmb3JlYWNoIG15ICRncyAoQCRnc3YpIHsKKwkJCW5leHQgaWYgJGdzLT5yZXZfbWFwX21heCA+PSAkbWF4OworCQkJbmV4dCBpZiBkZWZpbmVkICRncy0+cmV2X21hcF9nZXQoJG1heCk7CisJCQkkZ3MtPnJldl9tYXBfc2V0KCRtYXgsIDAgeDQwKTsKKwkJfQorCQlmb3JlYWNoIG15ICRnIChAJGdsb2JzKSB7CisJCQlteSAkayA9ICJzdm4tcmVtb3RlLiRnLT57cmVtb3RlfS4kZy0+e3R9LW1heFJldiI7CisJCQlHaXQ6OlNWTjo6dG1wX2NvbmZpZygkaywgJG1heCk7CisJCX0KKwkJbGFzdCBpZiAkbWF4ID49ICRoZWFkOworCQkkbWluID0gJG1heCArIDE7CisJCSRtYXggKz0gJGluYzsKKwkJJG1heCA9ICRoZWFkIGlmICgkbWF4ID4gJGhlYWQpOworCX0KKwlHaXQ6OlNWTjo6Z2MoKTsKK30KKworc3ViIGdldF9kaXJfZ2xvYmJlZCB7CisJbXkgKCRzZWxmLCAkbGVmdCwgJGRlcHRoLCAkcikgPSBAXzsKKworCW15IEB4ID0gZXZhbCB7ICRzZWxmLT5nZXRfZGlyKCRsZWZ0LCAkcikgfTsKKwlyZXR1cm4gdW5sZXNzIHNjYWxhciBAeCA9PSAzOworCW15ICRkaXJlbnRzID0gJHhbMF07CisJbXkgQGZpbmFsZW50czsKKwlmb3JlYWNoIG15ICRkZSAoa2V5cyAlJGRpcmVudHMpIHsKKwkJbmV4dCBpZiAkZGlyZW50cy0+eyRkZX0tPntraW5kfSAhPSAkU1ZOOjpOb2RlOjpkaXI7CisJCWlmICgkZGVwdGggPiAxKSB7CisJCQlteSBAYXJncyA9ICgiJGxlZnQvJGRlIiwgJGRlcHRoIC0gMSwgJHIpOworCQkJZm9yZWFjaCBteSAkZGlyICgkc2VsZi0+Z2V0X2Rpcl9nbG9iYmVkKEBhcmdzKSkgeworCQkJCXB1c2ggQGZpbmFsZW50cywgIiRkZS8kZGlyIjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXB1c2ggQGZpbmFsZW50cywgJGRlOworCQl9CisJfQorCUBmaW5hbGVudHM7Cit9CisKKyMgcmV0dXJuIHZhbHVlOiAwIC0tIGRvbid0IGlnbm9yZSwgMSAtLSBpZ25vcmUKK3N1YiBpc19yZWZfaWdub3JlZCB7CisJbXkgKCRnLCAkcCkgPSBAXzsKKwlteSAkcmVmbmFtZSA9ICRnLT57cmVmfS0+ZnVsbF9wYXRoKCRwKTsKKwlyZXR1cm4gMSBpZiBkZWZpbmVkKCRnLT57aWdub3JlX3JlZnNfcmVnZXh9KSAmJgorCSAgICAgICAgICAgICRyZWZuYW1lID1+IG0hJGctPntpZ25vcmVfcmVmc19yZWdleH0hOworCXJldHVybiAwIHVubGVzcyBkZWZpbmVkKCRfaWdub3JlX3JlZnNfcmVnZXgpOworCXJldHVybiAxIGlmICRyZWZuYW1lID1+IG0hJF9pZ25vcmVfcmVmc19yZWdleCFvOworCXJldHVybiAwOworfQorCitzdWIgbWF0Y2hfZ2xvYnMgeworCW15ICgkc2VsZiwgJGV4aXN0cywgJHBhdGhzLCAkZ2xvYnMsICRyKSA9IEBfOworCisJc3ViIGdldF9kaXJfY2hlY2sgeworCQlteSAoJHNlbGYsICRleGlzdHMsICRnLCAkcikgPSBAXzsKKworCQlteSBAZGlycyA9ICRzZWxmLT5nZXRfZGlyX2dsb2JiZWQoJGctPntwYXRofS0+e2xlZnR9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGctPntwYXRofS0+e2RlcHRofSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyKTsKKworCQlmb3JlYWNoIG15ICRkZSAoQGRpcnMpIHsKKwkJCW15ICRwID0gJGctPntwYXRofS0+ZnVsbF9wYXRoKCRkZSk7CisJCQluZXh0IGlmICRleGlzdHMtPnskcH07CisJCQluZXh0IGlmIChsZW5ndGggJGctPntwYXRofS0+e3JpZ2h0fSAmJgorCQkJCSAoJHNlbGYtPmNoZWNrX3BhdGgoJHAsICRyKSAhPQorCQkJCSAgJFNWTjo6Tm9kZTo6ZGlyKSk7CisJCQluZXh0IHVubGVzcyAkcCA9fiAvJGctPntwYXRofS0+e3JlZ2V4fS87CisJCQkkZXhpc3RzLT57JHB9ID0gR2l0OjpTVk4tPmluaXQoJHNlbGYtPnVybCwgJHAsIHVuZGVmLAorCQkJCQkgJGctPntyZWZ9LT5mdWxsX3BhdGgoJGRlKSwgMSk7CisJCX0KKwl9CisJZm9yZWFjaCBteSAkZyAoQCRnbG9icykgeworCQlpZiAobXkgJHBhdGggPSAkcGF0aHMtPnsiLyRnLT57cGF0aH0tPntsZWZ0fSJ9KSB7CisJCQlpZiAoJHBhdGgtPnthY3Rpb259ID1+IC9eW0FSXSQvKSB7CisJCQkJZ2V0X2Rpcl9jaGVjaygkc2VsZiwgJGV4aXN0cywgJGcsICRyKTsKKwkJCX0KKwkJfQorCQlmb3JlYWNoIChrZXlzICUkcGF0aHMpIHsKKwkJCWlmICgvJGctPntwYXRofS0+e2xlZnRfcmVnZXh9LyAmJgorCQkJICAgICEvJGctPntwYXRofS0+e3JlZ2V4fS8pIHsKKwkJCQluZXh0IGlmICRwYXRocy0+eyRffS0+e2FjdGlvbn0gIX4gL15bQVJdJC87CisJCQkJZ2V0X2Rpcl9jaGVjaygkc2VsZiwgJGV4aXN0cywgJGcsICRyKTsKKwkJCX0KKwkJCW5leHQgdW5sZXNzIC8kZy0+e3BhdGh9LT57cmVnZXh9LzsKKwkJCW15ICRwID0gJDE7CisJCQlteSAkcGF0aG5hbWUgPSAkZy0+e3BhdGh9LT5mdWxsX3BhdGgoJHApOworCQkJbmV4dCBpZiBpc19yZWZfaWdub3JlZCgkZywgJHApOworCQkJbmV4dCBpZiAkZXhpc3RzLT57JHBhdGhuYW1lfTsKKwkJCW5leHQgaWYgKCRzZWxmLT5jaGVja19wYXRoKCRwYXRobmFtZSwgJHIpICE9CisJCQkgICAgICAgICAkU1ZOOjpOb2RlOjpkaXIpOworCQkJJGV4aXN0cy0+eyRwYXRobmFtZX0gPSBHaXQ6OlNWTi0+aW5pdCgKKwkJCSAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+dXJsLCAkcGF0aG5hbWUsIHVuZGVmLAorCQkJICAgICAgICAgICAgICAgICAgICAgICRnLT57cmVmfS0+ZnVsbF9wYXRoKCRwKSwgMSk7CisJCX0KKwkJbXkgJGMgPSAnJzsKKwkJZm9yZWFjaCAoc3BsaXQgbSMvIywgJGctPntwYXRofS0+e2xlZnR9KSB7CisJCQkkYyAuPSAiLyRfIjsKKwkJCW5leHQgdW5sZXNzICgkcGF0aHMtPnskY30gJiYKKwkJCSAgICAgICAgICAgICAoJHBhdGhzLT57JGN9LT57YWN0aW9ufSA9fiAvXltBUl0kLykpOworCQkJZ2V0X2Rpcl9jaGVjaygkc2VsZiwgJGV4aXN0cywgJGcsICRyKTsKKwkJfQorCX0KKwl2YWx1ZXMgJSRleGlzdHM7Cit9CisKK3N1YiBtaW5pbWl6ZV91cmwgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPnVybCBpZiAoJHNlbGYtPnVybCBlcSAkc2VsZi0+e3JlcG9zX3Jvb3R9KTsKKwlteSAkdXJsID0gJHNlbGYtPntyZXBvc19yb290fTsKKwlteSBAY29tcG9uZW50cyA9IHNwbGl0KG0hLyEsICRzZWxmLT57c3ZuX3BhdGh9KTsKKwlteSAkYyA9ICcnOworCWRvIHsKKwkJJHVybCA9IGFkZF9wYXRoX3RvX3VybCgkdXJsLCAkYyk7CisJCWV2YWwgeworCQkJbXkgJHJhID0gKHJlZiAkc2VsZiktPm5ldygkdXJsKTsKKwkJCW15ICRsYXRlc3QgPSAkcmEtPmdldF9sYXRlc3RfcmV2bnVtOworCQkJJHJhLT5nZXRfbG9nKCIiLCAkbGF0ZXN0LCAwLCAxLCAwLCAxLCBzdWIge30pOworCQl9OworCX0gd2hpbGUgKCRAICYmICgkYyA9IHNoaWZ0IEBjb21wb25lbnRzKSk7CisKKwlyZXR1cm4gY2Fub25pY2FsaXplX3VybCgkdXJsKTsKK30KKworc3ViIGNhbl9kb19zd2l0Y2ggeworCW15ICRzZWxmID0gc2hpZnQ7CisJdW5sZXNzIChkZWZpbmVkICRjYW5fZG9fc3dpdGNoKSB7CisJCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJCW15ICRyZXAgPSBldmFsIHsKKwkJCSRzZWxmLT5kb19zd2l0Y2goMSwgJycsIDAsICRzZWxmLT51cmwsCisJCQkgICAgICAgICAgICAgICAgIFNWTjo6RGVsdGE6OkVkaXRvci0+bmV3LCAkcG9vbCk7CisJCX07CisJCWlmICgkQCkgeworCQkJJGNhbl9kb19zd2l0Y2ggPSAwOworCQl9IGVsc2UgeworCQkJJHJlcC0+YWJvcnRfcmVwb3J0KCRwb29sKTsKKwkJCSRjYW5fZG9fc3dpdGNoID0gMTsKKwkJfQorCQkkcG9vbC0+Y2xlYXI7CisJfQorCSRjYW5fZG9fc3dpdGNoOworfQorCitzdWIgc2tpcF91bmtub3duX3JldnMgeworCW15ICgkZXJyKSA9IEBfOworCW15ICRlcnJubyA9ICRlcnItPmFwcl9lcnIoKTsKKwkjIE1heWJlIHRoZSBicmFuY2ggd2UncmUgdHJhY2tpbmcgZGlkbid0CisJIyBleGlzdCB3aGVuIHRoZSByZXBvIHN0YXJ0ZWQsIHNvIGl0J3MKKwkjIG5vdCBhbiBlcnJvciBpZiBpdCBkb2Vzbid0LCBqdXN0IGNvbnRpbnVlCisJIworCSMgV29uZGVyZnVsbHkgY29uc2lzdGVudCBsaWJyYXJ5LCBlaD8KKwkjIDE2MDAxMyAtIHN2bjovLyBhbmQgZmlsZTovLworCSMgMTc1MDAyIC0gaHR0cChzKTovLworCSMgMTc1MDA3IC0gaHR0cChzKTovLyAodGhpcyByZXBvIHJlcXVpcmVkIGF1dGhvcml6YXRpb24sIHRvby4uLikKKwkjICAgTW9yZSBjb2RlcyBtYXkgYmUgZGlzY292ZXJlZCBsYXRlci4uLgorCWlmICgkZXJybm8gPT0gMTc1MDA3IHx8ICRlcnJubyA9PSAxNzUwMDIgfHwgJGVycm5vID09IDE2MDAxMykgeworCQlteSAkZXJyX2tleSA9ICRlcnItPmV4cGFuZGVkX21lc3NhZ2U7CisJCSMgcmV2aXNpb24gbnVtYmVycyBjaGFuZ2UgZXZlcnkgdGltZSwgZmlsdGVyIHRoZW0gb3V0CisJCSRlcnJfa2V5ID1+IHMvXGQrL1wwL2c7CisJCSRlcnJfa2V5ID0gIiRlcnJub1wwJGVycl9rZXkiOworCQl1bmxlc3MgKCRpZ25vcmVkX2VycnskZXJyX2tleX0pIHsKKwkJCXdhcm4gIlc6IElnbm9yaW5nIGVycm9yIGZyb20gU1ZOLCBwYXRoIHByb2JhYmx5ICIsCisJCQkgICAgICJkb2VzIG5vdCBleGlzdDogKCRlcnJubyk6ICIsCisJCQkgICAgICRlcnItPmV4cGFuZGVkX21lc3NhZ2UsIlxuIjsKKwkJCXdhcm4gIlc6IERvIG5vdCBiZSBhbGFybWVkIGF0IHRoZSBhYm92ZSBtZXNzYWdlICIsCisJCQkgICAgICJnaXQtc3ZuIGlzIGp1c3Qgc2VhcmNoaW5nIGFnZ3Jlc3NpdmVseSBmb3IgIiwKKwkJCSAgICAgIm9sZCBoaXN0b3J5LlxuIiwKKwkJCSAgICAgIlRoaXMgbWF5IHRha2UgYSB3aGlsZSBvbiBsYXJnZSByZXBvc2l0b3JpZXNcbiI7CisJCQkkaWdub3JlZF9lcnJ7JGVycl9rZXl9ID0gMTsKKwkJfQorCQlyZXR1cm47CisJfQorCWRpZSAiRXJyb3IgZnJvbSBTVk4sICgkZXJybm8pOiAiLCAkZXJyLT5leHBhbmRlZF9tZXNzYWdlLCJcbiI7Cit9CisKKzE7CitfX0VORF9fCisKK0dpdDo6U1ZOOjpSYSAtIFN1YnZlcnNpb24gcmVtb3RlIGFjY2VzcyBmdW5jdGlvbnMgZm9yIGdpdC1zdm4KKworPWhlYWQxIFNZTk9QU0lTCisKKyAgICB1c2UgR2l0OjpTVk46OlJhOworCisgICAgbXkgJHJhID0gR2l0OjpTVk46OlJhLT5uZXcoJGJyYW5jaHVybCk7CisgICAgbXkgKCRkaXJlbnRzLCAkZmV0Y2hlZF9yZXZudW0sICRwcm9wcykgPQorICAgICAgICAkcmEtPmdldF9kaXIoJy4nLCAkU1ZOOjpDb3JlOjpJTlZBTElEX1JFVk5VTSk7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIEw8U1ZOOjpSYT4gbW9kdWxlIGZvciB1c2UgYnkgQjxnaXQtc3ZuPi4KK0l0IGZpbGxzIGluIHNvbWUgZGVmYXVsdCBwYXJhbWV0ZXJzIChzdWNoIGFzIHRoZSBhdXRoZW50aWNhdGlvbgorc2NoZW1lKSwgc21vb3RocyBvdmVyIGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gbGlic3ZuIHZlcnNpb25zLCBhZGRzCitjYWNoaW5nLCBhbmQgaW1wbGVtZW50cyBzb21lIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBCPGdpdC1zdm4+LgorCitEbyBub3QgdXNlIGl0IHVubGVzcyB5b3UgYXJlIGRldmVsb3BpbmcgZ2l0LXN2bi4gIFRoZSBpbnRlcmZhY2Ugd2lsbAorY2hhbmdlIGFzIGdpdC1zdm4gZXZvbHZlcy4KKworPWhlYWQxIERFUEVOREVOQ0lFUworCitTdWJ2ZXJzaW9uIHBlcmwgYmluZGluZ3MsCitMPEdpdDo6U1ZOPi4KKworQzxHaXQ6OlNWTjo6UmE+IGhhcyBub3QgYmVlbiB0ZXN0ZWQgdXNpbmcgY2FsbGVycyBvdGhlciB0aGFuCitCPGdpdC1zdm4+IGl0c2VsZi4KKworPWhlYWQxIFNFRSBBTFNPCisKK0w8U1ZOOjpSYT4uCisKKz1oZWFkMSBJTkNPTVBBVElCSUxJVElFUworCitOb25lIHJlcG9ydGVkLgorCis9aGVhZDEgQlVHUworCitOb25lLgpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL1V0aWxzLnBtIGIvcGVybC9HaXQvU1ZOL1V0aWxzLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOGNmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vVXRpbHMucG0KQEAgLTAsMCArMSwyMzIgQEAKK3BhY2thZ2UgR2l0OjpTVk46OlV0aWxzOworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgU1ZOOjpDb3JlOworCit1c2UgYmFzZSBxdyhFeHBvcnRlcik7CisKK291ciBARVhQT1JUX09LID0gcXcoCisJZmF0YWwKKwljYW5fY29tcHJlc3MKKwljYW5vbmljYWxpemVfcGF0aAorCWNhbm9uaWNhbGl6ZV91cmwKKwlqb2luX3BhdGhzCisJYWRkX3BhdGhfdG9fdXJsCispOworCisKKz1oZWFkMSBOQU1FCisKK0dpdDo6U1ZOOjpVdGlscyAtIHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYWNyb3NzIEdpdDo6U1ZOCisKKz1oZWFkMSBTWU5PUFNJUworCisgICAgdXNlIEdpdDo6U1ZOOjpVdGlscyBxdyhmdW5jdGlvbnMgdG8gaW1wb3J0KTsKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgbW9kdWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyB3aGljaCBhcmUgdXNlZnVsIGFjcm9zcyBtYW55IGRpZmZlcmVudAorcGFydHMgb2YgR2l0OjpTVk4uICBNb3N0bHkgaXQncyBhIHBsYWNlIHRvIHB1dCB1dGlsaXR5IGZ1bmN0aW9ucworcmF0aGVyIHRoYW4gZHVwbGljYXRlIHRoZSBjb2RlIG9yIGhhdmUgY2xhc3NlcyBncmFiYmluZyBhdCBvdGhlcgorY2xhc3Nlcy4KKworPWhlYWQxIEZVTkNUSU9OUworCitBbGwgZnVuY3Rpb25zIGNhbiBiZSBpbXBvcnRlZCBvbmx5IG9uIHJlcXVlc3QuCisKKz1oZWFkMyBmYXRhbAorCisgICAgZmF0YWwoQG1lc3NhZ2UpOworCitEaXNwbGF5IGEgbWVzc2FnZSBhbmQgZXhpdCB3aXRoIGEgZmF0YWwgZXJyb3IgY29kZS4KKworPWN1dAorCisjIE5vdGU6IG5vdCBjZXJ0YWluIHdoeSB0aGlzIGlzIGluIHVzZSBpbnN0ZWFkIG9mIGRpZS4gIFByb2JhYmx5IGJlY2F1c2UKKyMgdGhlIGV4aXQgY29kZSBvZiBkaWUgaXMgMjU1PyAgRG9lc24ndCBhcHBlYXIgdG8gYmUgdXNlZCBjb25zaXN0ZW50bHkuCitzdWIgZmF0YWwgKEApIHsgcHJpbnQgU1RERVJSICJAX1xuIjsgZXhpdCAxIH0KKworCis9aGVhZDMgY2FuX2NvbXByZXNzCisKKyAgICBteSAkY2FuX2NvbXByZXNzID0gY2FuX2NvbXByZXNzOworCitSZXR1cm5zIHRydWUgaWYgQ29tcHJlc3M6OlpsaWIgaXMgYXZhaWxhYmxlLCBmYWxzZSBvdGhlcndpc2UuCisKKz1jdXQKKworbXkgJGNhbl9jb21wcmVzczsKK3N1YiBjYW5fY29tcHJlc3MgeworCXJldHVybiAkY2FuX2NvbXByZXNzIGlmIGRlZmluZWQgJGNhbl9jb21wcmVzczsKKworCXJldHVybiAkY2FuX2NvbXByZXNzID0gZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWI7IH07Cit9CisKKworPWhlYWQzIGNhbm9uaWNhbGl6ZV9wYXRoCisKKyAgICBteSAkY2Fub25jYWxpemVkX3BhdGggPSBjYW5vbmljYWxpemVfcGF0aCgkcGF0aCk7CisKK0NvbnZlcnRzICRwYXRoIGludG8gYSBjYW5vbmljYWwgZm9ybSB3aGljaCBpcyBzYWZlIHRvIHBhc3MgdG8gdGhlIFNWTgorQVBJIGFzIGEgZmlsZSBwYXRoLgorCis9Y3V0CisKKyMgVHVybiBmb28vLi4vYmFyIGludG8gYmFyCitzdWIgX2NvbGxhcHNlX2RvdGRvdCB7CisJbXkgJHBhdGggPSBzaGlmdDsKKworCTEgd2hpbGUgJHBhdGggPX4gc3svW14vXSsvK1wuXC59e307CisJMSB3aGlsZSAkcGF0aCA9fiBze1teL10rLytcLlwuL317fTsKKwkxIHdoaWxlICRwYXRoID1+IHN7W14vXSsvK1wuXC59e307CisKKwlyZXR1cm4gJHBhdGg7Cit9CisKKworc3ViIGNhbm9uaWNhbGl6ZV9wYXRoIHsKKwlteSAkcGF0aCA9IHNoaWZ0OworCW15ICRydjsKKworCSMgVGhlIDEuNyB3YXkgdG8gZG8gaXQKKwlpZiAoIGRlZmluZWQgJlNWTjo6X0NvcmU6OnN2bl9kaXJlbnRfY2Fub25pY2FsaXplICkgeworCQkkcGF0aCA9IF9jb2xsYXBzZV9kb3Rkb3QoJHBhdGgpOworCQkkcnYgPSBTVk46Ol9Db3JlOjpzdm5fZGlyZW50X2Nhbm9uaWNhbGl6ZSgkcGF0aCk7CisJfQorCSMgVGhlIDEuNiB3YXkgdG8gZG8gaXQKKwkjIFRoaXMgY2FuIHJldHVybiB1bmRlZiBvbiBzdWJ2ZXJzaW9uLXBlcmwtMS40LjItMi5lbDUgKENlbnRPUyA1LjIpCisJZWxzaWYgKCBkZWZpbmVkICZTVk46Ol9Db3JlOjpzdm5fcGF0aF9jYW5vbmljYWxpemUgKSB7CisJCSRwYXRoID0gX2NvbGxhcHNlX2RvdGRvdCgkcGF0aCk7CisJCSRydiA9IFNWTjo6X0NvcmU6OnN2bl9wYXRoX2Nhbm9uaWNhbGl6ZSgkcGF0aCk7CisJfQorCisJcmV0dXJuICRydiBpZiBkZWZpbmVkICRydjsKKworCSMgTm8gU1ZOIEFQSSBjYW5vbmljYWxpemF0aW9uIGlzIGF2YWlsYWJsZSwgb3IgdGhlIFNWTiBBUEkKKwkjIGRpZG4ndCByZXR1cm4gYSBzdWNjZXNzZnVsIHJlc3VsdCwgZG8gaXQgb3Vyc2VsdmVzCisJcmV0dXJuIF9jYW5vbmljYWxpemVfcGF0aF9vdXJzZWx2ZXMoJHBhdGgpOworfQorCisKK3N1YiBfY2Fub25pY2FsaXplX3BhdGhfb3Vyc2VsdmVzIHsKKwlteSAoJHBhdGgpID0gQF87CisJbXkgJGRvdF9zbGFzaF9hZGRlZCA9IDA7CisJaWYgKHN1YnN0cigkcGF0aCwgMCwgMSkgbmUgIi8iKSB7CisJCSRwYXRoID0gIi4vIiAuICRwYXRoOworCQkkZG90X3NsYXNoX2FkZGVkID0gMTsKKwl9CisJJHBhdGggPX4gcyMvKyMvI2c7CisJJHBhdGggPX4gcyMvXC4oPzovfCQpIy8jZzsKKwkkcGF0aCA9IF9jb2xsYXBzZV9kb3Rkb3QoJHBhdGgpOworCSRwYXRoID1+IHMjLyQjI2c7CisJJHBhdGggPX4gcyNeXC4vIyMgaWYgJGRvdF9zbGFzaF9hZGRlZDsKKwkkcGF0aCA9fiBzI15cLiQjIzsKKwlyZXR1cm4gJHBhdGg7Cit9CisKKworPWhlYWQzIGNhbm9uaWNhbGl6ZV91cmwKKworICAgIG15ICRjYW5vbmljYWxpemVkX3VybCA9IGNhbm9uaWNhbGl6ZV91cmwoJHVybCk7CisKK0NvbnZlcnRzICR1cmwgaW50byBhIGNhbm9uaWNhbCBmb3JtIHdoaWNoIGlzIHNhZmUgdG8gcGFzcyB0byB0aGUgU1ZOCitBUEkgYXMgYSBVUkwuCisKKz1jdXQKKworc3ViIGNhbm9uaWNhbGl6ZV91cmwgeworCW15ICR1cmwgPSBzaGlmdDsKKworCSMgVGhlIDEuNyB3YXkgdG8gZG8gaXQKKwlpZiAoIGRlZmluZWQgJlNWTjo6X0NvcmU6OnN2bl91cmlfY2Fub25pY2FsaXplICkgeworCQlyZXR1cm4gU1ZOOjpfQ29yZTo6c3ZuX3VyaV9jYW5vbmljYWxpemUoJHVybCk7CisJfQorCSMgVGhlcmUgd2Fzbid0IGEgMS42IHdheSB0byBkbyBpdCwgc28gd2UgZG8gaXQgb3Vyc2VsZi4KKwllbHNlIHsKKwkJcmV0dXJuIF9jYW5vbmljYWxpemVfdXJsX291cnNlbHZlcygkdXJsKTsKKwl9Cit9CisKKworc3ViIF9jYW5vbmljYWxpemVfdXJsX3BhdGggeworCW15ICgkdXJpX3BhdGgpID0gQF87CisKKwlteSBAcGFydHM7CisJZm9yZWFjaCBteSAkcGFydCAoc3BsaXQgbXsvK30sICR1cmlfcGF0aCkgeworCQkkcGFydCA9fiBzLyhbXn5cdy4lKy1dfCUoPyFbYS1mQS1GMC05XXsyfSkpL3NwcmludGYoIiUlJTAyWCIsb3JkKCQxKSkvZWc7CisJCXB1c2ggQHBhcnRzLCAkcGFydDsKKwl9CisKKwlyZXR1cm4gam9pbignLycsIEBwYXJ0cyk7Cit9CisKK3N1YiBfY2Fub25pY2FsaXplX3VybF9vdXJzZWx2ZXMgeworCW15ICgkdXJsKSA9IEBfOworCWlmICgkdXJsID1+IG0jXihbXjpdKyk6Ly8oW14vXSopKC4qKSQjKSB7CisJCW15ICgkc2NoZW1lLCAkZG9tYWluLCAkdXJpKSA9ICgkMSwgJDIsIF9jYW5vbmljYWxpemVfdXJsX3BhdGgoY2Fub25pY2FsaXplX3BhdGgoJDMpKSk7CisJCSR1cmwgPSAiJHNjaGVtZTovLyRkb21haW4kdXJpIjsKKwl9CisJJHVybDsKK30KKworCis9aGVhZDMgam9pbl9wYXRocworCisgICAgbXkgJG5ld19wYXRoID0gam9pbl9wYXRocyhAcGF0aHMpOworCitBcHBlbmRzIEBwYXRocyB0b2dldGhlciBpbnRvIGEgc2luZ2xlIHBhdGguICBBbnkgZW1wdHkgcGF0aHMgYXJlIGlnbm9yZWQuCisKKz1jdXQKKworc3ViIGpvaW5fcGF0aHMgeworCW15IEBwYXRocyA9IEBfOworCisJQHBhdGhzID0gZ3JlcCB7IGRlZmluZWQgJF8gJiYgbGVuZ3RoICRfIH0gQHBhdGhzOworCisJcmV0dXJuICcnIHVubGVzcyBAcGF0aHM7CisJcmV0dXJuICRwYXRoc1swXSBpZiBAcGF0aHMgPT0gMTsKKworCW15ICRuZXdfcGF0aCA9IHNoaWZ0IEBwYXRoczsKKwkkbmV3X3BhdGggPX4gc3svKyR9e307CisKKwlteSAkbGFzdF9wYXRoID0gcG9wIEBwYXRoczsKKwkkbGFzdF9wYXRoID1+IHN7Xi8rfXt9OworCisJZm9yIG15ICRwYXRoIChAcGF0aHMpIHsKKwkJJHBhdGggPX4gc3teLyt9e307CisJCSRwYXRoID1+IHN7LyskfXt9OworCQkkbmV3X3BhdGggLj0gIi8kcGF0aCI7CisJfQorCisJcmV0dXJuICRuZXdfcGF0aCAuPSAiLyRsYXN0X3BhdGgiOworfQorCisKKz1oZWFkMyBhZGRfcGF0aF90b191cmwKKworICAgIG15ICRuZXdfdXJsID0gYWRkX3BhdGhfdG9fdXJsKCR1cmwsICRwYXRoKTsKKworQXBwZW5kcyAkcGF0aCBvbnRvIHRoZSAkdXJsLiAgSWYgJHBhdGggaXMgZW1wdHksICR1cmwgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLgorCis9Y3V0CisKK3N1YiBhZGRfcGF0aF90b191cmwgeworCW15KCR1cmwsICRwYXRoKSA9IEBfOworCisJcmV0dXJuICR1cmwgaWYgIWRlZmluZWQgJHBhdGggb3IgIWxlbmd0aCAkcGF0aDsKKworCSMgU3RyaXAgdHJhaWxpbmcgYW5kIGxlYWRpbmcgc2xhc2hlcyBzbyB3ZSBkb24ndAorCSMgd2luZCB1cCB3aXRoIGh0dHA6Ly94LmNvbS8vL3BhdGgKKwkkdXJsICA9fiBzey8rJH17fTsKKwkkcGF0aCA9fiBze14vK317fTsKKworCSMgSWYgYSBwYXRoIGhhcyBhICUgaW4gaXQsIFVSSSBlc2NhcGUgaXQgc28gaXQncyBub3QKKwkjIG1pc3Rha2VuIGZvciBhIFVSSSBlc2NhcGUgbGF0ZXIuCisJJHBhdGggPX4gc3slfXslMjV9ZzsKKworCXJldHVybiBqb2luICcvJywgJHVybCwgJHBhdGg7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9wZXJsL01ha2VmaWxlIGIvcGVybC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQ5NmZjCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9NYWtlZmlsZQpAQCAtMCwwICsxLDg5IEBACisjCisjIE1ha2VmaWxlIGZvciBwZXJsIHN1cHBvcnQgbW9kdWxlcyBhbmQgcm91dGluZQorIworbWFrZmlsZTo9cGVybC5tYWsKK21vZHVsZXMgPQorCitQRVJMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBFUkxfUEFUSCkpCitwcmVmaXhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKHByZWZpeCkpCitsb2NhbGVkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGxvY2FsZWRpcikpCisKK2lmbmRlZiBWCisJUVVJRVQgPSBACitlbmRpZgorCithbGwgaW5zdGFsbCBpbnN0bGliZGlyOiAkKG1ha2ZpbGUpCisJJChRVUlFVCkkKE1BS0UpIC1mICQobWFrZmlsZSkgJEAKKworY2xlYW46CisJJChRVUlFVCl0ZXN0IC1mICQobWFrZmlsZSkgJiYgJChNQUtFKSAtZiAkKG1ha2ZpbGUpICRAIHx8IGV4aXQgMAorCSQoUk0pIHBwcG9ydC5oCisJJChSTSkgJChtYWtmaWxlKQorCSQoUk0pICQobWFrZmlsZSkub2xkCisJJChSTSkgUE0uc3RhbXAKKworJChtYWtmaWxlKTogUE0uc3RhbXAKKworaWZkZWYgTk9fUEVSTF9NQUtFTUFLRVIKK2luc3RkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKHByZWZpeCkvbGliKQorCittb2R1bGVzICs9IEdpdAorbW9kdWxlcyArPSBHaXQvSTE4TgorbW9kdWxlcyArPSBHaXQvSW5kZXhJbmZvCittb2R1bGVzICs9IEdpdC9TVk4KK21vZHVsZXMgKz0gR2l0L1NWTi9NZW1vaXplL1lBTUwKK21vZHVsZXMgKz0gR2l0L1NWTi9GZXRjaGVyCittb2R1bGVzICs9IEdpdC9TVk4vRWRpdG9yCittb2R1bGVzICs9IEdpdC9TVk4vR2xvYlNwZWMKK21vZHVsZXMgKz0gR2l0L1NWTi9Mb2cKK21vZHVsZXMgKz0gR2l0L1NWTi9NaWdyYXRpb24KK21vZHVsZXMgKz0gR2l0L1NWTi9Qcm9tcHQKK21vZHVsZXMgKz0gR2l0L1NWTi9SYQorbW9kdWxlcyArPSBHaXQvU1ZOL1V0aWxzCisKKyQobWFrZmlsZSk6IC4uL0dJVC1DRkxBR1MgTWFrZWZpbGUKKwllY2hvIGFsbDogcHJpdmF0ZS1FcnJvci5wbSBHaXQucG0gR2l0L0kxOE4ucG0gPiAkQAorCXNldCAtZTsgXAorCWZvciBpIGluICQobW9kdWxlcyk7IFwKKwlkbyBcCisJCWlmIHRlc3QgJCRpID0gJCR7aSUvKn07IFwKKwkJdGhlbiBcCisJCQlzdWJkaXI9OyBcCisJCWVsc2UgXAorCQkJc3ViZGlyPS8kJHtpJS8qfTsgXAorCQlmaTsgXAorCQllY2hvICcJJChSTSkgYmxpYi9saWIvJyQkaScucG0nID4+ICRAOyBcCisJCWVjaG8gJwlta2RpciAtcCBibGliL2xpYickJHN1YmRpciA+PiAkQDsgXAorCQllY2hvICcJY3AgJyQkaScucG0gYmxpYi9saWIvJyQkaScucG0nID4+ICRAOyBcCisJZG9uZQorCWVjaG8gJwkkKFJNKSBibGliL2xpYi9FcnJvci5wbScgPj4gJEAKKwknJChQRVJMX1BBVEhfU1EpJyAtTUVycm9yIC1lICdleGl0KCQkRXJyb3I6OlZFUlNJT04gPCAwLjE1MDA5KScgfHwgXAorCWVjaG8gJwljcCBwcml2YXRlLUVycm9yLnBtIGJsaWIvbGliL0Vycm9yLnBtJyA+PiAkQAorCWVjaG8gaW5zdGFsbDogPj4gJEAKKwlzZXQgLWU7IFwKKwlmb3IgaSBpbiAkKG1vZHVsZXMpOyBcCisJZG8gXAorCQlpZiB0ZXN0ICQkaSA9ICQke2klLyp9OyBcCisJCXRoZW4gXAorCQkJc3ViZGlyPTsgXAorCQllbHNlIFwKKwkJCXN1YmRpcj0vJCR7aSUvKn07IFwKKwkJZmk7IFwKKwkJZWNobyAnCSQoUk0pICIkJChERVNURElSKSQoaW5zdGRpcl9TUSkvJyQkaScucG0iJyA+PiAkQDsgXAorCQllY2hvICcJbWtkaXIgLXAgIiQkKERFU1RESVIpJChpbnN0ZGlyX1NRKSckJHN1YmRpciciJyA+PiAkQDsgXAorCQllY2hvICcJY3AgJyQkaScucG0gIiQkKERFU1RESVIpJChpbnN0ZGlyX1NRKS8nJCRpJy5wbSInID4+ICRAOyBcCisJZG9uZQorCWVjaG8gJwkkKFJNKSAiJCQoREVTVERJUikkKGluc3RkaXJfU1EpL0Vycm9yLnBtIicgPj4gJEAKKwknJChQRVJMX1BBVEhfU1EpJyAtTUVycm9yIC1lICdleGl0KCQkRXJyb3I6OlZFUlNJT04gPCAwLjE1MDA5KScgfHwgXAorCWVjaG8gJwljcCBwcml2YXRlLUVycm9yLnBtICIkJChERVNURElSKSQoaW5zdGRpcl9TUSkvRXJyb3IucG0iJyA+PiAkQAorCWVjaG8gaW5zdGxpYmRpcjogPj4gJEAKKwllY2hvICcJZWNobyAkKGluc3RkaXJfU1EpJyA+PiAkQAorZWxzZQorJChtYWtmaWxlKTogTWFrZWZpbGUuUEwgLi4vR0lULUNGTEFHUworCSQoUEVSTF9QQVRIKSAkPCBQUkVGSVg9JyQocHJlZml4X1NRKScgSU5TVEFMTF9CQVNFPScnIC0tbG9jYWxlZGlyPSckKGxvY2FsZWRpcl9TUSknCitlbmRpZgorCisjIHRoaXMgaXMganVzdCBhZGRlZCBjb21mb3J0IGZvciBjYWxsaW5nIG1ha2UgZGlyZWN0bHkgaW4gcGVybCBkaXIKKyMgKGV2ZW4gdGhvdWdoIEdJVC1DRkxBR1MgYXJlbid0IHVzZWQgeWV0LiBJZiBldmVyKQorLi4vR0lULUNGTEFHUzoKKwkkKE1BS0UpIC1DIC4uIEdJVC1DRkxBR1MKZGlmZiAtLWdpdCBhL3BlcmwvTWFrZWZpbGUuUEwgYi9wZXJsL01ha2VmaWxlLlBMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMjliYTkKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL01ha2VmaWxlLlBMCkBAIC0wLDAgKzEsNjIgQEAKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRXh0VXRpbHM6Ok1ha2VNYWtlcjsKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgRmlsZTo6RmluZDsKKworIyBEb24ndCBmb3JnZXQgdG8gdXBkYXRlIHRoZSBwZXJsL01ha2VmaWxlLCB0b28uCisjIERvbid0IGZvcmdldCB0byB0ZXN0IHdpdGggTk9fUEVSTF9NQUtFTUFLRVI9WWVzUGxlYXNlCisKKyMgU2FuaXR5OiBkaWUgYXQgZmlyc3QgdW5rbm93biBvcHRpb24KK0dldG9wdDo6TG9uZzo6Q29uZmlndXJlIHF3LyBwYXNzX3Rocm91Z2ggLzsKKworbXkgJGxvY2FsZWRpciA9ICcnOworR2V0T3B0aW9ucygibG9jYWxlZGlyPXMiID0+IFwkbG9jYWxlZGlyKTsKKworc3ViIE1ZOjpwb3N0YW1ibGUgeworCXJldHVybiA8PCdNQUtFX0ZSQUcnOworaW5zdGxpYmRpcjoKKwlAZWNobyAnJChJTlNUQUxMU0lURUxJQiknCisKK2lmbmVxICgsJChERVNURElSKSkKK2lmZXEgKDAsJChzaGVsbCBleHByICckKE1NX1ZFUlNJT04pJyAnPicgNi4xMCkpCiskKGVycm9yIEV4dFV0aWxzOjpNYWtlTWFrZXIgdmVyc2lvbiAiJChNTV9WRVJTSU9OKSIgaXMgb2xkZXIgdGhhbiA2LjExIGFuZCBzbyBcCisJaXMgbGlrZWx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBERVNURElSIG1lY2hhbmlzbS4gIFRyeSBzZXR0aW5nIFwKKwlOT19QRVJMX01BS0VNQUtFUj0xIGluc3RlYWQpCitlbmRpZgorZW5kaWYKKworTUFLRV9GUkFHCit9CisKKyMgRmluZCBhbGwgdGhlIC5wbSBmaWxlcyBpbiAiR2l0LyIgYW5kIEdpdC5wbQorbXkgJXBtOworZmluZCBzdWIgeworCXJldHVybiB1bmxlc3MgL1wucG0kLzsKKworCSMgc29tZXRpbWVzIEZpbGU6OkZpbmQgcHJlcGVuZHMgYSAuLyAgU3RyaXAgaXQuCisJbXkgJHBtX3BhdGggPSAkRmlsZTo6RmluZDo6bmFtZTsKKwkkcG1fcGF0aCA9fiBze15cLi99e307CisKKwkkcG17JHBtX3BhdGh9ID0gJyQoSU5TVF9MSUJESVIpLycuJHBtX3BhdGg7Cit9LCAiR2l0IiwgIkdpdC5wbSI7CisKKworIyBXZSBjb21lIHdpdGggb3VyIG93biBidW5kbGVkIEVycm9yLnBtLiBJdCdzIG5vdCBpbiB0aGUgc2V0IG9mIGRlZmF1bHQKKyMgUGVybCBtb2R1bGVzIHNvIGluc3RhbGwgaXQgaWYgaXQncyBub3QgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0geWV0LgoraWYgKCAhZXZhbCB7IHJlcXVpcmUgRXJyb3IgfSB8fCAkRXJyb3I6OlZFUlNJT04gPCAwLjE1MDA5KSB7CisJJHBteydwcml2YXRlLUVycm9yLnBtJ30gPSAnJChJTlNUX0xJQkRJUikvRXJyb3IucG0nOworfQorCisjIHJlZGlyZWN0IHN0ZG91dCwgb3RoZXJ3aXNlIHRoZSBtZXNzYWdlICJXcml0aW5nIHBlcmwubWFrIGZvciBHaXQiCisjIGRpc3J1cHRzIHRoZSBvdXRwdXQgZm9yIHRoZSB0YXJnZXQgJ2luc3RsaWJkaXInCitvcGVuIFNURE9VVCwgIj4mU1RERVJSIjsKKworV3JpdGVNYWtlZmlsZSgKKwlOQU1FICAgICAgICAgICAgPT4gJ0dpdCcsCisJVkVSU0lPTl9GUk9NICAgID0+ICdHaXQucG0nLAorCVBNCQk9PiBcJXBtLAorCVBNX0ZJTFRFUgk9PiBxcVtcJChQRVJMKSAtcGUgInM8XFxRKytMT0NBTEVESVIrK1xcRT48JGxvY2FsZWRpcj4iXSwKKwlNQUtFRklMRQk9PiAncGVybC5tYWsnLAorCUlOU1RBTExTSVRFTUFOM0RJUiA9PiAnJChTSVRFUFJFRklYKS9zaGFyZS9tYW4vbWFuMycKKyk7CmRpZmYgLS1naXQgYS9wZXJsL3ByaXZhdGUtRXJyb3IucG0gYi9wZXJsL3ByaXZhdGUtRXJyb3IucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlOWNkOQotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvcHJpdmF0ZS1FcnJvci5wbQpAQCAtMCwwICsxLDgyNyBAQAorIyBFcnJvci5wbQorIworIyBDb3B5cmlnaHQgKGMpIDE5OTctOCBHcmFoYW0gQmFyciA8Z2JhcnJAdGkuY29tPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCisjCisjIEJhc2VkIG9uIG15IG9yaWdpbmFsIEVycm9yLnBtLCBhbmQgRXhjZXB0aW9ucy5wbSBieSBQZXRlciBTZWliZWwKKyMgPHBldGVyQHdlYmxvZ2ljLmNvbT4gYW5kIGFkYXB0ZWQgYnkgSmVzc2UgR2xpY2sgPGpnbGlja0BzaWcuYnNoLmNvbT4uCisjCisjIGJ1dCBtb2RpZmllZCAqKipzaWduaWZpY2FudGx5KioqCisKK3BhY2thZ2UgRXJyb3I7CisKK3VzZSBzdHJpY3Q7Cit1c2UgdmFycyBxdygkVkVSU0lPTik7Cit1c2UgNS4wMDQ7CisKKyRWRVJTSU9OID0gIjAuMTUwMDkiOworCit1c2Ugb3ZlcmxvYWQgKAorCSciIicJICAgPT4JJ3N0cmluZ2lmeScsCisJJzArJwkgICA9PgkndmFsdWUnLAorCSdib29sJyAgICAgPT4Jc3ViIHsgcmV0dXJuIDE7IH0sCisJJ2ZhbGxiYWNrJyA9PgkxCispOworCiskRXJyb3I6OkRlcHRoID0gMDsJIyBEZXB0aCB0byBwYXNzIHRvIGNhbGxlcigpCiskRXJyb3I6OkRlYnVnID0gMDsJIyBHZW5lcmF0ZSB2ZXJib3NlIHN0YWNrIHRyYWNlcworQEVycm9yOjpTVEFDSyA9ICgpOwkjIENsYXVzZSBzdGFjayBmb3IgdHJ5CiskRXJyb3I6OlRIUk9XTiA9IHVuZGVmOwkjIGxhc3QgZXJyb3IgdGhyb3duLCBhIHdvcmthcm91bmQgdW50aWwgZGllICRyZWYgd29ya3MKKworbXkgJExBU1Q7CQkjIExhc3QgZXJyb3IgY3JlYXRlZAorbXkgJUVSUk9SOwkJIyBMYXN0IGVycm9yIGFzc29jaWF0ZWQgd2l0aCBwYWNrYWdlCisKK3N1YiB0aHJvd19FcnJvcl9TaW1wbGUKK3sKKyAgICBteSAkYXJncyA9IHNoaWZ0OworICAgIHJldHVybiBFcnJvcjo6U2ltcGxlLT5uZXcoJGFyZ3MtPnsndGV4dCd9KTsKK30KKworJEVycm9yOjpPYmplY3RpZnlDYWxsYmFjayA9IFwmdGhyb3dfRXJyb3JfU2ltcGxlOworCisKKyMgRXhwb3J0ZWQgc3VicyBhcmUgZGVmaW5lZCBpbiBFcnJvcjo6c3VicworCitzdWIgaW1wb3J0IHsKKyAgICBzaGlmdDsKKyAgICBsb2NhbCAkRXhwb3J0ZXI6OkV4cG9ydExldmVsID0gJEV4cG9ydGVyOjpFeHBvcnRMZXZlbCArIDE7CisgICAgRXJyb3I6OnN1YnMtPmltcG9ydChAXyk7Cit9CisKKyMgSSByZWFsbHkgd2FudCB0byB1c2UgbGFzdCBmb3IgdGhlIG5hbWUgb2YgdGhpcyBtZXRob2QsIGJ1dCBpdCBpcyBhIGtleXdvcmQKKyMgd2hpY2ggcHJldmVudCB0aGUgc3ludGF4ICBsYXN0IEVycm9yCisKK3N1YiBwcmlvciB7CisgICAgc2hpZnQ7ICMgaWdub3JlCisKKyAgICByZXR1cm4gJExBU1QgdW5sZXNzIEBfOworCisgICAgbXkgJHBrZyA9IHNoaWZ0OworICAgIHJldHVybiBleGlzdHMgJEVSUk9SeyRwa2d9ID8gJEVSUk9SeyRwa2d9IDogdW5kZWYKKwl1bmxlc3MgcmVmKCRwa2cpOworCisgICAgbXkgJG9iaiA9ICRwa2c7CisgICAgbXkgJGVyciA9IHVuZGVmOworICAgIGlmKCRvYmotPmlzYSgnSEFTSCcpKSB7CisJJGVyciA9ICRvYmotPnsnX19FcnJvcl9fJ30KKwkgICAgaWYgZXhpc3RzICRvYmotPnsnX19FcnJvcl9fJ307CisgICAgfQorICAgIGVsc2lmKCRvYmotPmlzYSgnR0xPQicpKSB7CisJJGVyciA9ICR7KiRvYmp9eydfX0Vycm9yX18nfQorCSAgICBpZiBleGlzdHMgJHsqJG9ian17J19fRXJyb3JfXyd9OworICAgIH0KKworICAgICRlcnI7Cit9CisKK3N1YiBmbHVzaCB7CisgICAgc2hpZnQ7ICNpZ25vcmUKKworICAgIHVubGVzcyAoQF8pIHsKKyAgICAgICAkTEFTVCA9IHVuZGVmOworICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBteSAkcGtnID0gc2hpZnQ7CisgICAgcmV0dXJuIHVubGVzcyByZWYoJHBrZyk7CisKKyAgICB1bmRlZiAkRVJST1J7JHBrZ30gaWYgZGVmaW5lZCAkRVJST1J7JHBrZ307Cit9CisKKyMgUmV0dXJuIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGUgYWJvdXQgd2hlcmUgdGhlIGVycm9yCisjIGhhcHBlbmVkLiBUaGUgLXN0YWNrdHJhY2UgZWxlbWVudCBvbmx5IGV4aXN0cyBpZiAkRXJyb3I6OkRFQlVHCisjIHdhcyBzZXQgd2hlbiB0aGUgZXJyb3Igd2FzIGNyZWF0ZWQKKworc3ViIHN0YWNrdHJhY2UgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisKKyAgICByZXR1cm4gJHNlbGYtPnsnLXN0YWNrdHJhY2UnfQorCWlmIGV4aXN0cyAkc2VsZi0+eyctc3RhY2t0cmFjZSd9OworCisgICAgbXkgJHRleHQgPSBleGlzdHMgJHNlbGYtPnsnLXRleHQnfSA/ICRzZWxmLT57Jy10ZXh0J30gOiAiRGllZCI7CisKKyAgICAkdGV4dCAuPSBzcHJpbnRmKCIgYXQgJXMgbGluZSAlZC5cbiIsICRzZWxmLT5maWxlLCAkc2VsZi0+bGluZSkKKwl1bmxlc3MoJHRleHQgPX4gL1xuJC9zKTsKKworICAgICR0ZXh0OworfQorCisjIEFsbG93IGVycm9yIHByb3BhZ2F0aW9uLCBpZQorIworIyAkYmVyLT5lbmNvZGUoLi4uKSBvcgorIyAgICByZXR1cm4gRXJyb3ItPnByaW9yKCRiZXIpLT5hc3NvY2lhdGUoJGxkYXApOworCitzdWIgYXNzb2NpYXRlIHsKKyAgICBteSAkZXJyID0gc2hpZnQ7CisgICAgbXkgJG9iaiA9IHNoaWZ0OworCisgICAgcmV0dXJuIHVubGVzcyByZWYoJG9iaik7CisKKyAgICBpZigkb2JqLT5pc2EoJ0hBU0gnKSkgeworCSRvYmotPnsnX19FcnJvcl9fJ30gPSAkZXJyOworICAgIH0KKyAgICBlbHNpZigkb2JqLT5pc2EoJ0dMT0InKSkgeworCSR7KiRvYmp9eydfX0Vycm9yX18nfSA9ICRlcnI7CisgICAgfQorICAgICRvYmogPSByZWYoJG9iaik7CisgICAgJEVSUk9SeyByZWYoJG9iaikgfSA9ICRlcnI7CisKKyAgICByZXR1cm47Cit9CisKK3N1YiBuZXcgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkoJHBrZywkZmlsZSwkbGluZSkgPSBjYWxsZXIoJEVycm9yOjpEZXB0aCk7CisKKyAgICBteSAkZXJyID0gYmxlc3MgeworCSctcGFja2FnZScgPT4gJHBrZywKKwknLWZpbGUnICAgID0+ICRmaWxlLAorCSctbGluZScgICAgPT4gJGxpbmUsCisJQF8KKyAgICB9LCAkc2VsZjsKKworICAgICRlcnItPmFzc29jaWF0ZSgkZXJyLT57Jy1vYmplY3QnfSkKKwlpZihleGlzdHMgJGVyci0+eyctb2JqZWN0J30pOworCisgICAgIyBUbyBhbHdheXMgY3JlYXRlIGEgc3RhY2t0cmFjZSB3b3VsZCBiZSB2ZXJ5IGluZWZmaWNpZW50LCBzbworICAgICMgd2Ugb25seSBkbyBpdCBpZiAkRXJyb3I6OkRlYnVnIGlzIHNldAorCisgICAgaWYoJEVycm9yOjpEZWJ1ZykgeworCXJlcXVpcmUgQ2FycDsKKwlsb2NhbCAkQ2FycDo6Q2FycExldmVsID0gJEVycm9yOjpEZXB0aDsKKwlteSAkdGV4dCA9IGRlZmluZWQoJGVyci0+eyctdGV4dCd9KSA/ICRlcnItPnsnLXRleHQnfSA6ICJFcnJvciI7CisJbXkgJHRyYWNlID0gQ2FycDo6bG9uZ21lc3MoJHRleHQpOworCSMgUmVtb3ZlIHRyeSBjYWxscyBmcm9tIHRoZSB0cmFjZQorCSR0cmFjZSA9fiBzLyhcblxzK1xTK19fQU5PTl9fW15cbl0rKT9cblxzK2V2YWxbXlxuXStcblxzK0Vycm9yOjpzdWJzOjp0cnlbXlxuXSsoPz1cbikvL3NvZzsKKwkkdHJhY2UgPX4gcy8oXG5ccytcUytfX0FOT05fX1teXG5dKyk/XG5ccytldmFsW15cbl0rXG5ccytFcnJvcjo6c3Viczo6cnVuX2NsYXVzZXNbXlxuXStcblxzK0Vycm9yOjpzdWJzOjp0cnlbXlxuXSsoPz1cbikvL3NvZzsKKwkkZXJyLT57Jy1zdGFja3RyYWNlJ30gPSAkdHJhY2UKKyAgICB9CisKKyAgICAkQCA9ICRMQVNUID0gJEVSUk9SeyRwa2d9ID0gJGVycjsKK30KKworIyBUaHJvdyBhbiBlcnJvci4gdGhpcyBjb250YWlucyBzb21lIHZlcnkgZ29yeSBjb2RlLgorCitzdWIgdGhyb3cgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbG9jYWwgJEVycm9yOjpEZXB0aCA9ICRFcnJvcjo6RGVwdGggKyAxOworCisgICAgIyBpZiB3ZSBhcmUgbm90IHJldGhyb3ctaW5nIHRoZW4gY3JlYXRlIHRoZSBvYmplY3QgdG8gdGhyb3cKKyAgICAkc2VsZiA9ICRzZWxmLT5uZXcoQF8pIHVubGVzcyByZWYoJHNlbGYpOworCisgICAgZGllICRFcnJvcjo6VEhST1dOID0gJHNlbGY7Cit9CisKKyMgc3ludGFjdGljIHN1Z2FyIGZvcgorIworIyAgICBkaWUgd2l0aCBFcnJvciggLi4uICk7CisKK3N1YiB3aXRoIHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIGxvY2FsICRFcnJvcjo6RGVwdGggPSAkRXJyb3I6OkRlcHRoICsgMTsKKworICAgICRzZWxmLT5uZXcoQF8pOworfQorCisjIHN5bnRhY3RpYyBzdWdhciBmb3IKKyMKKyMgICAgcmVjb3JkIEVycm9yKCAuLi4gKSBhbmQgcmV0dXJuOworCitzdWIgcmVjb3JkIHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIGxvY2FsICRFcnJvcjo6RGVwdGggPSAkRXJyb3I6OkRlcHRoICsgMTsKKworICAgICRzZWxmLT5uZXcoQF8pOworfQorCisjIGNhdGNoIGNsYXVzZSBmb3IKKyMKKyMgdHJ5IHsgLi4uIH0gY2F0Y2ggQ0xBU1Mgd2l0aCB7IC4uLiB9CisKK3N1YiBjYXRjaCB7CisgICAgbXkgJHBrZyA9IHNoaWZ0OworICAgIG15ICRjb2RlID0gc2hpZnQ7CisgICAgbXkgJGNsYXVzZXMgPSBzaGlmdCB8fCB7fTsKKyAgICBteSAkY2F0Y2ggPSAkY2xhdXNlcy0+eydjYXRjaCd9IHx8PSBbXTsKKworICAgIHVuc2hpZnQgQCRjYXRjaCwgICRwa2csICRjb2RlOworCisgICAgJGNsYXVzZXM7Cit9CisKKyMgT2JqZWN0IHF1ZXJ5IG1ldGhvZHMKKworc3ViIG9iamVjdCB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBleGlzdHMgJHNlbGYtPnsnLW9iamVjdCd9ID8gJHNlbGYtPnsnLW9iamVjdCd9IDogdW5kZWY7Cit9CisKK3N1YiBmaWxlIHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIGV4aXN0cyAkc2VsZi0+eyctZmlsZSd9ID8gJHNlbGYtPnsnLWZpbGUnfSA6IHVuZGVmOworfQorCitzdWIgbGluZSB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBleGlzdHMgJHNlbGYtPnsnLWxpbmUnfSA/ICRzZWxmLT57Jy1saW5lJ30gOiB1bmRlZjsKK30KKworc3ViIHRleHQgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgZXhpc3RzICRzZWxmLT57Jy10ZXh0J30gPyAkc2VsZi0+eyctdGV4dCd9IDogdW5kZWY7Cit9CisKKyMgb3ZlcmxvYWQgbWV0aG9kcworCitzdWIgc3RyaW5naWZ5IHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIGRlZmluZWQgJHNlbGYtPnsnLXRleHQnfSA/ICRzZWxmLT57Jy10ZXh0J30gOiAiRGllZCI7Cit9CisKK3N1YiB2YWx1ZSB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBleGlzdHMgJHNlbGYtPnsnLXZhbHVlJ30gPyAkc2VsZi0+eyctdmFsdWUnfSA6IHVuZGVmOworfQorCitwYWNrYWdlIEVycm9yOjpTaW1wbGU7CisKK0BFcnJvcjo6U2ltcGxlOjpJU0EgPSBxdyhFcnJvcik7CisKK3N1YiBuZXcgeworICAgIG15ICRzZWxmICA9IHNoaWZ0OworICAgIG15ICR0ZXh0ICA9ICIiIC4gc2hpZnQ7CisgICAgbXkgJHZhbHVlID0gc2hpZnQ7CisgICAgbXkoQGFyZ3MpID0gKCk7CisKKyAgICBsb2NhbCAkRXJyb3I6OkRlcHRoID0gJEVycm9yOjpEZXB0aCArIDE7CisKKyAgICBAYXJncyA9ICggLWZpbGUgPT4gJDEsIC1saW5lID0+ICQyKQorCWlmKCR0ZXh0ID1+IHMvXHMrYXRccysoXFMrKVxzK2xpbmVccysoXGQrKSg/Oixccyo8W14+XSo+XHMrbGluZVxzK1xkKyk/XC4/XG4/JC8vcyk7CisgICAgcHVzaChAYXJncywgJy12YWx1ZScsIDAgKyAkdmFsdWUpCisJaWYgZGVmaW5lZCgkdmFsdWUpOworCisgICAgJHNlbGYtPlNVUEVSOjpuZXcoLXRleHQgPT4gJHRleHQsIEBhcmdzKTsKK30KKworc3ViIHN0cmluZ2lmeSB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkdGV4dCA9ICRzZWxmLT5TVVBFUjo6c3RyaW5naWZ5OworICAgICR0ZXh0IC49IHNwcmludGYoIiBhdCAlcyBsaW5lICVkLlxuIiwgJHNlbGYtPmZpbGUsICRzZWxmLT5saW5lKQorCXVubGVzcygkdGV4dCA9fiAvXG4kL3MpOworICAgICR0ZXh0OworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBJbnNwaXJlZCBieSBjb2RlIGZyb20gSmVzc2UgR2xpY2sgPGpnbGlja0BzaWcuYnNoLmNvbT4gYW5kCisjIFBldGVyIFNlaWJlbCA8cGV0ZXJAd2VibG9naWMuY29tPgorCitwYWNrYWdlIEVycm9yOjpzdWJzOworCit1c2UgRXhwb3J0ZXIgKCk7Cit1c2UgdmFycyBxdyhARVhQT1JUX09LIEBJU0EgJUVYUE9SVF9UQUdTKTsKKworQEVYUE9SVF9PSyAgID0gcXcodHJ5IHdpdGggZmluYWxseSBleGNlcHQgb3RoZXJ3aXNlKTsKKyVFWFBPUlRfVEFHUyA9ICh0cnkgPT4gXEBFWFBPUlRfT0spOworCitASVNBID0gcXcoRXhwb3J0ZXIpOworCisKK3N1YiBibGVzc2VkIHsKKwlteSAkaXRlbSA9IHNoaWZ0OworCWxvY2FsICRAOyAjIGRvbid0IGtpbGwgYW4gb3V0ZXIgJEAKKwlyZWYgJGl0ZW0gYW5kIGV2YWwgeyAkaXRlbS0+Y2FuKCdjYW4nKSB9OworfQorCisKK3N1YiBydW5fY2xhdXNlcyAoJCQkXEApIHsKKyAgICBteSgkY2xhdXNlcywkZXJyLCR3YW50YXJyYXksJHJlc3VsdCkgPSBAXzsKKyAgICBteSAkY29kZSA9IHVuZGVmOworCisgICAgJGVyciA9ICRFcnJvcjo6T2JqZWN0aWZ5Q2FsbGJhY2stPih7J3RleHQnID0+JGVycn0pIHVubGVzcyByZWYoJGVycik7CisKKyAgICBDQVRDSDogeworCisJIyBjYXRjaAorCW15ICRjYXRjaDsKKwlpZihkZWZpbmVkKCRjYXRjaCA9ICRjbGF1c2VzLT57J2NhdGNoJ30pKSB7CisJICAgIG15ICRpID0gMDsKKworCSAgICBDQVRDSExPT1A6CisJICAgIGZvciggOyAkaSA8IEAkY2F0Y2ggOyAkaSArPSAyKSB7CisJCW15ICRwa2cgPSAkY2F0Y2gtPlskaV07CisJCXVubGVzcyhkZWZpbmVkICRwa2cpIHsKKwkJICAgICNleGNlcHQKKwkJICAgIHNwbGljZShAJGNhdGNoLCRpLDIsJGNhdGNoLT5bJGkrMV0tPigpKTsKKwkJICAgICRpIC09IDI7CisJCSAgICBuZXh0IENBVENITE9PUDsKKwkJfQorCQllbHNpZihibGVzc2VkKCRlcnIpICYmICRlcnItPmlzYSgkcGtnKSkgeworCQkgICAgJGNvZGUgPSAkY2F0Y2gtPlskaSsxXTsKKwkJICAgIHdoaWxlKDEpIHsKKwkJCW15ICRtb3JlID0gMDsKKwkJCWxvY2FsKCRFcnJvcjo6VEhST1dOKTsKKwkJCW15ICRvayA9IGV2YWwgeworCQkJICAgIGlmKCR3YW50YXJyYXkpIHsKKwkJCQlAeyRyZXN1bHR9ID0gJGNvZGUtPigkZXJyLFwkbW9yZSk7CisJCQkgICAgfQorCQkJICAgIGVsc2lmKGRlZmluZWQoJHdhbnRhcnJheSkpIHsKKwkJCSAgICAgICAgQHskcmVzdWx0fSA9ICgpOworCQkJCSRyZXN1bHQtPlswXSA9ICRjb2RlLT4oJGVycixcJG1vcmUpOworCQkJICAgIH0KKwkJCSAgICBlbHNlIHsKKwkJCQkkY29kZS0+KCRlcnIsXCRtb3JlKTsKKwkJCSAgICB9CisJCQkgICAgMTsKKwkJCX07CisJCQlpZiggJG9rICkgeworCQkJICAgIG5leHQgQ0FUQ0hMT09QIGlmICRtb3JlOworCQkJICAgIHVuZGVmICRlcnI7CisJCQl9CisJCQllbHNlIHsKKwkJCSAgICAkZXJyID0gZGVmaW5lZCgkRXJyb3I6OlRIUk9XTikKKwkJCQkgICAgPyAkRXJyb3I6OlRIUk9XTiA6ICRAOworICAgICAgICAgICAgICAgICRlcnIgPSAkRXJyb3I6Ok9iamVjdGlmeUNhbGxiYWNrLT4oeyd0ZXh0JyA9PiRlcnJ9KQorICAgICAgICAgICAgICAgICAgICB1bmxlc3MgcmVmKCRlcnIpOworCQkJfQorCQkJbGFzdCBDQVRDSDsKKwkJICAgIH07CisJCX0KKwkgICAgfQorCX0KKworCSMgb3RoZXJ3aXNlCisJbXkgJG93aXNlOworCWlmKGRlZmluZWQoJG93aXNlID0gJGNsYXVzZXMtPnsnb3RoZXJ3aXNlJ30pKSB7CisJICAgIG15ICRjb2RlID0gJGNsYXVzZXMtPnsnb3RoZXJ3aXNlJ307CisJICAgIG15ICRtb3JlID0gMDsKKwkgICAgbXkgJG9rID0gZXZhbCB7CisJCWlmKCR3YW50YXJyYXkpIHsKKwkJICAgIEB7JHJlc3VsdH0gPSAkY29kZS0+KCRlcnIsXCRtb3JlKTsKKwkJfQorCQllbHNpZihkZWZpbmVkKCR3YW50YXJyYXkpKSB7CisJCSAgICBAeyRyZXN1bHR9ID0gKCk7CisJCSAgICAkcmVzdWx0LT5bMF0gPSAkY29kZS0+KCRlcnIsXCRtb3JlKTsKKwkJfQorCQllbHNlIHsKKwkJICAgICRjb2RlLT4oJGVycixcJG1vcmUpOworCQl9CisJCTE7CisJICAgIH07CisJICAgIGlmKCAkb2sgKSB7CisJCXVuZGVmICRlcnI7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCSRlcnIgPSBkZWZpbmVkKCRFcnJvcjo6VEhST1dOKQorCQkJPyAkRXJyb3I6OlRIUk9XTiA6ICRAOworCisgICAgICAgICRlcnIgPSAkRXJyb3I6Ok9iamVjdGlmeUNhbGxiYWNrLT4oeyd0ZXh0JyA9PiRlcnJ9KQorICAgICAgICAgICAgdW5sZXNzIHJlZigkZXJyKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgJGVycjsKK30KKworc3ViIHRyeSAoJjskKSB7CisgICAgbXkgJHRyeSA9IHNoaWZ0OworICAgIG15ICRjbGF1c2VzID0gQF8gPyBzaGlmdCA6IHt9OworICAgIG15ICRvayA9IDA7CisgICAgbXkgJGVyciA9IHVuZGVmOworICAgIG15IEByZXN1bHQgPSAoKTsKKworICAgIHVuc2hpZnQgQEVycm9yOjpTVEFDSywgJGNsYXVzZXM7CisKKyAgICBteSAkd2FudGFycmF5ID0gd2FudGFycmF5KCk7CisKKyAgICBkbyB7CisJbG9jYWwgJEVycm9yOjpUSFJPV04gPSB1bmRlZjsKKyAgICBsb2NhbCAkQCA9IHVuZGVmOworCisJJG9rID0gZXZhbCB7CisJICAgIGlmKCR3YW50YXJyYXkpIHsKKwkJQHJlc3VsdCA9ICR0cnktPigpOworCSAgICB9CisJICAgIGVsc2lmKGRlZmluZWQgJHdhbnRhcnJheSkgeworCQkkcmVzdWx0WzBdID0gJHRyeS0+KCk7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCSR0cnktPigpOworCSAgICB9CisJICAgIDE7CisJfTsKKworCSRlcnIgPSBkZWZpbmVkKCRFcnJvcjo6VEhST1dOKSA/ICRFcnJvcjo6VEhST1dOIDogJEAKKwkgICAgdW5sZXNzICRvazsKKyAgICB9OworCisgICAgc2hpZnQgQEVycm9yOjpTVEFDSzsKKworICAgICRlcnIgPSBydW5fY2xhdXNlcygkY2xhdXNlcywkZXJyLHdhbnRhcnJheSxAcmVzdWx0KQorCXVubGVzcygkb2spOworCisgICAgJGNsYXVzZXMtPnsnZmluYWxseSd9LT4oKQorCWlmKGRlZmluZWQoJGNsYXVzZXMtPnsnZmluYWxseSd9KSk7CisKKyAgICBpZiAoZGVmaW5lZCgkZXJyKSkKKyAgICB7CisgICAgICAgIGlmIChibGVzc2VkKCRlcnIpICYmICRlcnItPmNhbigndGhyb3cnKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgJGVycjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpZSAkZXJyOworICAgICAgICB9CisgICAgfQorCisgICAgd2FudGFycmF5ID8gQHJlc3VsdCA6ICRyZXN1bHRbMF07Cit9CisKKyMgRWFjaCBjbGF1c2UgYWRkcyBhIHN1YiB0byB0aGUgbGlzdCBvZiBjbGF1c2VzLiBUaGUgZmluYWxseSBjbGF1c2UgaXMKKyMgYWx3YXlzIHRoZSBsYXN0LCBhbmQgdGhlIG90aGVyd2lzZSBjbGF1c2UgaXMgYWx3YXlzIGFkZGVkIGp1c3QgYmVmb3JlCisjIHRoZSBmaW5hbGx5IGNsYXVzZS4KKyMKKyMgQWxsIGNsYXVzZXMsIGV4Y2VwdCB0aGUgZmluYWxseSBjbGF1c2UsIGFkZCBhIHN1YiB3aGljaCB0YWtlcyBvbmUgYXJndW1lbnQKKyMgdGhpcyBhcmd1bWVudCB3aWxsIGJlIHRoZSBlcnJvciBiZWluZyB0aHJvd24uIFRoZSBzdWIgd2lsbCByZXR1cm4gYSBjb2RlIHJlZgorIyBpZiB0aGF0IGNsYXVzZSBjYW4gaGFuZGxlIHRoYXQgZXJyb3IsIG90aGVyd2lzZSB1bmRlZiBpcyByZXR1cm5lZC4KKyMKKyMgVGhlIG90aGVyd2lzZSBjbGF1c2UgYWRkcyBhIHN1YiB3aGljaCB1bmNvbmRpdGlvbmFsbHkgcmV0dXJucyB0aGUgdXNlcnMKKyMgY29kZSByZWZlcmVuY2UsIHRoaXMgaXMgd2h5IGl0IGlzIGZvcmNlZCB0byBiZSBsYXN0LgorIworIyBUaGUgY2F0Y2ggY2xhdXNlIGlzIGRlZmluZWQgaW4gRXJyb3IucG0sIGFzIHRoZSBzeW50YXggY2F1c2VzIGl0IHRvCisjIGJlIGNhbGxlZCBhcyBhIG1ldGhvZAorCitzdWIgd2l0aCAoJjskKSB7CisgICAgQF8KK30KKworc3ViIGZpbmFsbHkgKCYpIHsKKyAgICBteSAkY29kZSA9IHNoaWZ0OworICAgIG15ICRjbGF1c2VzID0geyAnZmluYWxseScgPT4gJGNvZGUgfTsKKyAgICAkY2xhdXNlczsKK30KKworIyBUaGUgZXhjZXB0IGNsYXVzZSBpcyBhIGJsb2NrIHdoaWNoIHJldHVybnMgYSBoYXNocmVmIG9yIGEgbGlzdCBvZgorIyBrZXktdmFsdWUgcGFpcnMsIHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUgY2xhc3NlcyBhbmQgdGhlIHZhbHVlcyBhcmUgc3Vicy4KKworc3ViIGV4Y2VwdCAoJjskKSB7CisgICAgbXkgJGNvZGUgPSBzaGlmdDsKKyAgICBteSAkY2xhdXNlcyA9IHNoaWZ0IHx8IHt9OworICAgIG15ICRjYXRjaCA9ICRjbGF1c2VzLT57J2NhdGNoJ30gfHw9IFtdOworCisgICAgbXkgJHN1YiA9IHN1YiB7CisJbXkgJHJlZjsKKwlteShAYXJyYXkpID0gJGNvZGUtPigkX1swXSk7CisJaWYoQGFycmF5ID09IDEgJiYgcmVmKCRhcnJheVswXSkpIHsKKwkgICAgJHJlZiA9ICRhcnJheVswXTsKKwkgICAgJHJlZiA9IFsgJSRyZWYgXQorCQlpZihVTklWRVJTQUw6OmlzYSgkcmVmLCdIQVNIJykpOworCX0KKwllbHNlIHsKKwkgICAgJHJlZiA9IFxAYXJyYXk7CisJfQorCUAkcmVmCisgICAgfTsKKworICAgIHVuc2hpZnQgQHskY2F0Y2h9LCB1bmRlZiwgJHN1YjsKKworICAgICRjbGF1c2VzOworfQorCitzdWIgb3RoZXJ3aXNlICgmOyQpIHsKKyAgICBteSAkY29kZSA9IHNoaWZ0OworICAgIG15ICRjbGF1c2VzID0gc2hpZnQgfHwge307CisKKyAgICBpZihleGlzdHMgJGNsYXVzZXMtPnsnb3RoZXJ3aXNlJ30pIHsKKwlyZXF1aXJlIENhcnA7CisJQ2FycDo6Y3JvYWsoIk11bHRpcGxlIG90aGVyd2lzZSBjbGF1c2VzIik7CisgICAgfQorCisgICAgJGNsYXVzZXMtPnsnb3RoZXJ3aXNlJ30gPSAkY29kZTsKKworICAgICRjbGF1c2VzOworfQorCisxOworX19FTkRfXworCis9aGVhZDEgTkFNRQorCitFcnJvciAtIEVycm9yL2V4Y2VwdGlvbiBoYW5kbGluZyBpbiBhbiBPTy1pc2ggd2F5CisKKz1oZWFkMSBTWU5PUFNJUworCisgICAgdXNlIEVycm9yIHF3KDp0cnkpOworCisgICAgdGhyb3cgRXJyb3I6OlNpbXBsZSggIkEgc2ltcGxlIGVycm9yIik7CisKKyAgICBzdWIgeHl6IHsKKyAgICAgICAgLi4uCisJcmVjb3JkIEVycm9yOjpTaW1wbGUoIkEgc2ltcGxlIGVycm9yIikKKwkgICAgYW5kIHJldHVybjsKKyAgICB9CisKKyAgICB1bmxpbmsoJGZpbGUpIG9yIHRocm93IEVycm9yOjpTaW1wbGUoIiRmaWxlOiAkISIsJCEpOworCisgICAgdHJ5IHsKKwlkb19zb21lX3N0dWZmKCk7CisJZGllICJlcnJvciEiIGlmICRjb25kaXRpb247CisJdGhyb3cgRXJyb3I6OlNpbXBsZSAtdGV4dCA9PiAiT29wcyEiIGlmICRvdGhlcl9jb25kaXRpb247CisgICAgfQorICAgIGNhdGNoIEVycm9yOjpJTyB3aXRoIHsKKwlteSAkRSA9IHNoaWZ0OworCXByaW50IFNUREVSUiAiRmlsZSAiLCAkRS0+eyctZmlsZSd9LCAiIGhhZCBhIHByb2JsZW1cbiI7CisgICAgfQorICAgIGV4Y2VwdCB7CisJbXkgJEUgPSBzaGlmdDsKKwlteSAkZ2VuZXJhbF9oYW5kbGVyPXN1YiB7c2VuZF9tZXNzYWdlICRFLT57LWRlc2NyaXB0aW9ufX07CisJcmV0dXJuIHsKKwkgICAgVXNlckV4Y2VwdGlvbjEgPT4gJGdlbmVyYWxfaGFuZGxlciwKKwkgICAgVXNlckV4Y2VwdGlvbjIgPT4gJGdlbmVyYWxfaGFuZGxlcgorCX07CisgICAgfQorICAgIG90aGVyd2lzZSB7CisJcHJpbnQgU1RERVJSICJXZWxsIEkgZG9uJ3Qga25vdyB3aGF0IHRvIHNheVxuIjsKKyAgICB9CisgICAgZmluYWxseSB7CisJY2xvc2VfdGhlX2dhcmFnZV9kb29yX2FscmVhZHkoKTsgIyBTaG91bGQgYmUgcmVsaWFibGUKKyAgICB9OyAjIERvbid0IGZvcmdldCB0aGUgdHJhaWxpbmcgOyBvciB5b3UgbWlnaHQgYmUgc3VycHJpc2VkCisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGUgQzxFcnJvcj4gcGFja2FnZSBwcm92aWRlcyB0d28gaW50ZXJmYWNlcy4gRmlyc3RseSBDPEVycm9yPiBwcm92aWRlcworYSBwcm9jZWR1cmFsIGludGVyZmFjZSB0byBleGNlcHRpb24gaGFuZGxpbmcuIFNlY29uZGx5IEM8RXJyb3I+IGlzIGEKK2Jhc2UgY2xhc3MgZm9yIGVycm9ycy9leGNlcHRpb25zIHRoYXQgY2FuIGVpdGhlciBiZSB0aHJvd24sIGZvcgorc3Vic2VxdWVudCBjYXRjaCwgb3IgY2FuIHNpbXBseSBiZSByZWNvcmRlZC4KKworRXJyb3JzIGluIHRoZSBjbGFzcyBDPEVycm9yPiBzaG91bGQgbm90IGJlIHRocm93biBkaXJlY3RseSwgYnV0IHRoZQordXNlciBzaG91bGQgdGhyb3cgZXJyb3JzIGZyb20gYSBzdWItY2xhc3Mgb2YgQzxFcnJvcj4uCisKKz1oZWFkMSBQUk9DRURVUkFMIElOVEVSRkFDRQorCitDPEVycm9yPiBleHBvcnRzIHN1YnJvdXRpbmVzIHRvIHBlcmZvcm0gZXhjZXB0aW9uIGhhbmRsaW5nLiBUaGVzZSB3aWxsCitiZSBleHBvcnRlZCBpZiB0aGUgQzw6dHJ5PiB0YWcgaXMgdXNlZCBpbiB0aGUgQzx1c2U+IGxpbmUuCisKKz1vdmVyIDQKKworPWl0ZW0gdHJ5IEJMT0NLIENMQVVTRVMKKworQzx0cnk+IGlzIHRoZSBtYWluIHN1YnJvdXRpbmUgY2FsbGVkIGJ5IHRoZSB1c2VyLiBBbGwgb3RoZXIgc3Vicm91dGluZXMKK2V4cG9ydGVkIGFyZSBjbGF1c2VzIHRvIHRoZSB0cnkgc3Vicm91dGluZS4KKworVGhlIEJMT0NLIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCwgaWYgbm8gZXJyb3IgaXMgdGhyb3csIHRyeSB3aWxsIHJldHVybgordGhlIHJlc3VsdCBvZiB0aGUgYmxvY2suCisKK0M8Q0xBVVNFUz4gYXJlIHRoZSBzdWJyb3V0aW5lcyBiZWxvdywgd2hpY2ggZGVzY3JpYmUgd2hhdCB0byBkbyBpbiB0aGUKK2V2ZW50IG9mIGFuIGVycm9yIGJlaW5nIHRocm93biB3aXRoaW4gQkxPQ0suCisKKz1pdGVtIGNhdGNoIENMQVNTIHdpdGggQkxPQ0sKKworVGhpcyBjbGF1c2VzIHdpbGwgY2F1c2UgYWxsIGVycm9ycyB0aGF0IHNhdGlzZnkgQzwkZXJyLUU8Z3Q+aXNhKENMQVNTKT4KK3RvIGJlIGNhdWdodCBhbmQgaGFuZGxlZCBieSBldmFsdWF0aW5nIEM8QkxPQ0s+LgorCitDPEJMT0NLPiB3aWxsIGJlIHBhc3NlZCB0d28gYXJndW1lbnRzLiBUaGUgZmlyc3Qgd2lsbCBiZSB0aGUgZXJyb3IKK2JlaW5nIHRocm93bi4gVGhlIHNlY29uZCBpcyBhIHJlZmVyZW5jZSB0byBhIHNjYWxhciB2YXJpYWJsZS4gSWYgdGhpcwordmFyaWFibGUgaXMgc2V0IGJ5IHRoZSBjYXRjaCBibG9jayB0aGVuLCBvbiByZXR1cm4gZnJvbSB0aGUgY2F0Y2gKK2Jsb2NrLCB0cnkgd2lsbCBjb250aW51ZSBwcm9jZXNzaW5nIGFzIGlmIHRoZSBjYXRjaCBibG9jayB3YXMgbmV2ZXIKK2ZvdW5kLgorCitUbyBwcm9wYWdhdGUgdGhlIGVycm9yIHRoZSBjYXRjaCBibG9jayBtYXkgY2FsbCBDPCRlcnItRTxndD50aHJvdz4KKworSWYgdGhlIHNjYWxhciByZWZlcmVuY2UgYnkgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBub3Qgc2V0LCBhbmQgdGhlCitlcnJvciBpcyBub3QgdGhyb3duLiBUaGVuIHRoZSBjdXJyZW50IHRyeSBibG9jayB3aWxsIHJldHVybiB3aXRoIHRoZQorcmVzdWx0IGZyb20gdGhlIGNhdGNoIGJsb2NrLgorCis9aXRlbSBleGNlcHQgQkxPQ0sKKworV2hlbiBDPHRyeT4gaXMgbG9va2luZyBmb3IgYSBoYW5kbGVyLCBpZiBhbiBleGNlcHQgY2xhdXNlIGlzIGZvdW5kCitDPEJMT0NLPiBpcyBldmFsdWF0ZWQuIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIGJsb2NrIHNob3VsZCBiZSBhCitIQVNIUkVGIG9yIGEgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnMsIHdoZXJlIHRoZSBrZXlzIGFyZSBjbGFzcyBuYW1lcworYW5kIHRoZSB2YWx1ZXMgYXJlIENPREUgcmVmZXJlbmNlcyBmb3IgdGhlIGhhbmRsZXIgb2YgZXJyb3JzIG9mIHRoYXQKK3R5cGUuCisKKz1pdGVtIG90aGVyd2lzZSBCTE9DSworCitDYXRjaCBhbnkgZXJyb3IgYnkgZXhlY3V0aW5nIHRoZSBjb2RlIGluIEM8QkxPQ0s+CisKK1doZW4gZXZhbHVhdGVkIEM8QkxPQ0s+IHdpbGwgYmUgcGFzc2VkIG9uZSBhcmd1bWVudCwgd2hpY2ggd2lsbCBiZSB0aGUKK2Vycm9yIGJlaW5nIHByb2Nlc3NlZC4KKworT25seSBvbmUgb3RoZXJ3aXNlIGJsb2NrIG1heSBiZSBzcGVjaWZpZWQgcGVyIHRyeSBibG9jaworCis9aXRlbSBmaW5hbGx5IEJMT0NLCisKK0V4ZWN1dGUgdGhlIGNvZGUgaW4gQzxCTE9DSz4gZWl0aGVyIGFmdGVyIHRoZSBjb2RlIGluIHRoZSB0cnkgYmxvY2sgaGFzCitzdWNjZXNzZnVsbHkgY29tcGxldGVkLCBvciBpZiB0aGUgdHJ5IGJsb2NrIHRocm93cyBhbiBlcnJvciB0aGVuCitDPEJMT0NLPiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBoYW5kbGVyIGhhcyBjb21wbGV0ZWQuCisKK0lmIHRoZSBoYW5kbGVyIHRocm93cyBhbiBlcnJvciB0aGVuIHRoZSBlcnJvciB3aWxsIGJlIGNhdWdodCwgdGhlCitmaW5hbGx5IGJsb2NrIHdpbGwgYmUgZXhlY3V0ZWQgYW5kIHRoZSBlcnJvciB3aWxsIGJlIHJlLXRocm93bi4KKworT25seSBvbmUgZmluYWxseSBibG9jayBtYXkgYmUgc3BlY2lmaWVkIHBlciB0cnkgYmxvY2sKKworPWJhY2sKKworPWhlYWQxIENMQVNTIElOVEVSRkFDRQorCis9aGVhZDIgQ09OU1RSVUNUT1JTCisKK1RoZSBDPEVycm9yPiBvYmplY3QgaXMgaW1wbGVtZW50ZWQgYXMgYSBIQVNILiBUaGlzIEhBU0ggaXMgaW5pdGlhbGl6ZWQKK3dpdGggdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXNzZWQgdG8gaXQncyBjb25zdHJ1Y3Rvci4gVGhlIGVsZW1lbnRzCit0aGF0IGFyZSB1c2VkIGJ5LCBvciBhcmUgcmV0cmlldmFibGUgYnkgdGhlIEM8RXJyb3I+IGNsYXNzIGFyZSBsaXN0ZWQKK2JlbG93LCBvdGhlciBjbGFzc2VzIG1heSBhZGQgdG8gdGhlc2UuCisKKwktZmlsZQorCS1saW5lCisJLXRleHQKKwktdmFsdWUKKwktb2JqZWN0CisKK0lmIEM8LWZpbGU+IG9yIEM8LWxpbmU+IGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMKK3RoZW4gdGhlc2Ugd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIHdoZXJlCit0aGUgY29uc3RydWN0b3Igd2FzIGNhbGxlZCBmcm9tLgorCitJZiB0aGUgZXJyb3IgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIG9iamVjdCB0aGVuIHRoZSBvYmplY3Qgc2hvdWxkIGJlCitwYXNzZWQgYXMgdGhlIEM8LW9iamVjdD4gYXJndW1lbnQuIFRoaXMgd2lsbCBhbGxvdyB0aGUgQzxFcnJvcj4gcGFja2FnZQordG8gYXNzb2NpYXRlIHRoZSBlcnJvciB3aXRoIHRoZSBvYmplY3QuCisKK1RoZSBDPEVycm9yPiBwYWNrYWdlIHJlbWVtYmVycyB0aGUgbGFzdCBlcnJvciBjcmVhdGVkLCBhbmQgYWxzbyB0aGUKK2xhc3QgZXJyb3IgYXNzb2NpYXRlZCB3aXRoIGEgcGFja2FnZS4gVGhpcyBjb3VsZCBlaXRoZXIgYmUgdGhlIGxhc3QKK2Vycm9yIGNyZWF0ZWQgYnkgYSBzdWIgaW4gdGhhdCBwYWNrYWdlLCBvciB0aGUgbGFzdCBlcnJvciB3aGljaCBwYXNzZWQKK2FuIG9iamVjdCBibGVzc2VkIGludG8gdGhhdCBwYWNrYWdlIGFzIHRoZSBDPC1vYmplY3Q+IGFyZ3VtZW50LgorCis9b3ZlciA0CisKKz1pdGVtIHRocm93ICggWyBBUkdTIF0gKQorCitDcmVhdGUgYSBuZXcgQzxFcnJvcj4gb2JqZWN0IGFuZCB0aHJvdyBhbiBlcnJvciwgd2hpY2ggd2lsbCBiZSBjYXVnaHQKK2J5IGEgc3Vycm91bmRpbmcgQzx0cnk+IGJsb2NrLCBpZiB0aGVyZSBpcyBvbmUuIE90aGVyd2lzZSBpdCB3aWxsIGNhdXNlCit0aGUgcHJvZ3JhbSB0byBleGl0LgorCitDPHRocm93PiBtYXkgYWxzbyBiZSBjYWxsZWQgb24gYW4gZXhpc3RpbmcgZXJyb3IgdG8gcmUtdGhyb3cgaXQuCisKKz1pdGVtIHdpdGggKCBbIEFSR1MgXSApCisKK0NyZWF0ZSBhIG5ldyBDPEVycm9yPiBvYmplY3QgYW5kIHJldHVybnMgaXQuIFRoaXMgaXMgZGVmaW5lZCBmb3IKK3N5bnRhY3RpYyBzdWdhciwgZWcKKworICAgIGRpZSB3aXRoIFNvbWU6OkVycm9yICggLi4uICk7CisKKz1pdGVtIHJlY29yZCAoIFsgQVJHUyBdICkKKworQ3JlYXRlIGEgbmV3IEM8RXJyb3I+IG9iamVjdCBhbmQgcmV0dXJucyBpdC4gVGhpcyBpcyBkZWZpbmVkIGZvcgorc3ludGFjdGljIHN1Z2FyLCBlZworCisgICAgcmVjb3JkIFNvbWU6OkVycm9yICggLi4uICkKKwlhbmQgcmV0dXJuOworCis9YmFjaworCis9aGVhZDIgU1RBVElDIE1FVEhPRFMKKworPW92ZXIgNAorCis9aXRlbSBwcmlvciAoIFsgUEFDS0FHRSBdICkKKworUmV0dXJuIHRoZSBsYXN0IGVycm9yIGNyZWF0ZWQsIG9yIHRoZSBsYXN0IGVycm9yIGFzc29jaWF0ZWQgd2l0aAorQzxQQUNLQUdFPgorCis9aXRlbSBmbHVzaCAoIFsgUEFDS0FHRSBdICkKKworRmx1c2ggdGhlIGxhc3QgZXJyb3IgY3JlYXRlZCwgb3IgdGhlIGxhc3QgZXJyb3IgYXNzb2NpYXRlZCB3aXRoCitDPFBBQ0tBR0U+Lkl0IGlzIG5lY2Vzc2FyeSB0byBjbGVhciB0aGUgZXJyb3Igc3RhY2sgYmVmb3JlIGV4aXRpbmcgdGhlCitwYWNrYWdlIG9yIHVuY2F1Z2h0IGVycm9ycyBnZW5lcmF0ZWQgdXNpbmcgQzxyZWNvcmQ+IHdpbGwgYmUgcmVwb3J0ZWQuCisKKyAgICAgJEVycm9yLT5mbHVzaDsKKworPWN1dAorCis9YmFjaworCis9aGVhZDIgT0JKRUNUIE1FVEhPRFMKKworPW92ZXIgNAorCis9aXRlbSBzdGFja3RyYWNlCisKK0lmIHRoZSB2YXJpYWJsZSBDPCRFcnJvcjo6RGVidWc+IHdhcyBub24temVybyB3aGVuIHRoZSBlcnJvciB3YXMKK2NyZWF0ZWQsIHRoZW4gQzxzdGFja3RyYWNlPiByZXR1cm5zIGEgc3RyaW5nIGNyZWF0ZWQgYnkgY2FsbGluZworQzxDYXJwOjpsb25nbWVzcz4uIElmIHRoZSB2YXJpYWJsZSB3YXMgemVybyB0aGUgQzxzdGFja3RyYWNlPiByZXR1cm5zCit0aGUgdGV4dCBvZiB0aGUgZXJyb3IgYXBwZW5kZWQgd2l0aCB0aGUgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyIG9mCit3aGVyZSB0aGUgZXJyb3Igd2FzIGNyZWF0ZWQsIHByb3ZpZGluZyB0aGUgdGV4dCBkb2VzIG5vdCBlbmQgd2l0aCBhCituZXdsaW5lLgorCis9aXRlbSBvYmplY3QKKworVGhlIG9iamVjdCB0aGlzIGVycm9yIHdhcyBhc3NvY2lhdGVkIHdpdGgKKworPWl0ZW0gZmlsZQorCitUaGUgZmlsZSB3aGVyZSB0aGUgY29uc3RydWN0b3Igb2YgdGhpcyBlcnJvciB3YXMgY2FsbGVkIGZyb20KKworPWl0ZW0gbGluZQorCitUaGUgbGluZSB3aGVyZSB0aGUgY29uc3RydWN0b3Igb2YgdGhpcyBlcnJvciB3YXMgY2FsbGVkIGZyb20KKworPWl0ZW0gdGV4dAorCitUaGUgdGV4dCBvZiB0aGUgZXJyb3IKKworPWJhY2sKKworPWhlYWQyIE9WRVJMT0FEIE1FVEhPRFMKKworPW92ZXIgNAorCis9aXRlbSBzdHJpbmdpZnkKKworQSBtZXRob2QgdGhhdCBjb252ZXJ0cyB0aGUgb2JqZWN0IGludG8gYSBzdHJpbmcuIFRoaXMgbWV0aG9kIG1heSBzaW1wbHkKK3JldHVybiB0aGUgc2FtZSBhcyB0aGUgQzx0ZXh0PiBtZXRob2QsIG9yIGl0IG1heSBhcHBlbmQgbW9yZQoraW5mb3JtYXRpb24uIEZvciBleGFtcGxlIHRoZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLgorCitCeSBkZWZhdWx0IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEM8LXRleHQ+IGFyZ3VtZW50IHRoYXQgd2FzIHBhc3NlZCB0bwordGhlIGNvbnN0cnVjdG9yLCBvciB0aGUgc3RyaW5nIEM8IkRpZWQiPiBpZiBub25lIHdhcyBnaXZlbi4KKworPWl0ZW0gdmFsdWUKKworQSBtZXRob2QgdGhhdCB3aWxsIHJldHVybiBhIHZhbHVlIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUKK2Vycm9yLiBGb3IgZXhhbXBsZSBpZiBhbiBlcnJvciB3YXMgY3JlYXRlZCBkdWUgdG8gdGhlIGZhaWx1cmUgb2YgYQorc3lzdGVtIGNhbGwsIHRoZW4gdGhpcyBtYXkgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIG9mIEM8JCE+IGF0IHRoZQordGltZS4KKworQnkgZGVmYXVsdCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDPC12YWx1ZT4gYXJndW1lbnQgdGhhdCB3YXMgcGFzc2VkCit0byB0aGUgY29uc3RydWN0b3IuCisKKz1iYWNrCisKKz1oZWFkMSBQUkUtREVGSU5FRCBFUlJPUiBDTEFTU0VTCisKKz1vdmVyIDQKKworPWl0ZW0gRXJyb3I6OlNpbXBsZQorCitUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGhvbGQgc2ltcGxlIGVycm9yIHN0cmluZ3MgYW5kIHZhbHVlcy4gSXQncworY29uc3RydWN0b3IgdGFrZXMgdHdvIGFyZ3VtZW50cy4gVGhlIGZpcnN0IGlzIGEgdGV4dCB2YWx1ZSwgdGhlIHNlY29uZAoraXMgYSBudW1lcmljIHZhbHVlLiBUaGVzZSB2YWx1ZXMgYXJlIHdoYXQgd2lsbCBiZSByZXR1cm5lZCBieSB0aGUKK292ZXJsb2FkIG1ldGhvZHMuCisKK0lmIHRoZSB0ZXh0IHZhbHVlIGVuZHMgd2l0aCBDPGF0IGZpbGUgbGluZSAxPiBhcyAkQCBzdHJpbmdzIGRvLCB0aGVuCit0aGlzIGluZm9tYXRpb24gd2lsbCBiZSB1c2VkIHRvIHNldCB0aGUgQzwtZmlsZT4gYW5kIEM8LWxpbmU+IGFyZ3VtZW50cworb2YgdGhlIGVycm9yIG9iamVjdC4KKworVGhpcyBjbGFzcyBpcyB1c2VkIGludGVybmFsbHkgaWYgYW4gZXZhbCdkIGJsb2NrIGRpZSdzIHdpdGggYW4gZXJyb3IKK3RoYXQgaXMgYSBwbGFpbiBzdHJpbmcuIChVbmxlc3MgQzwkRXJyb3I6Ok9iamVjdGlmeUNhbGxiYWNrPiBpcyBtb2RpZmllZCkKKworPWJhY2sKKworPWhlYWQxICRFcnJvcjo6T2JqZWN0aWZ5Q2FsbGJhY2sKKworVGhpcyB2YXJpYWJsZSBob2xkcyBhIHJlZmVyZW5jZSB0byBhIHN1YnJvdXRpbmUgdGhhdCBjb252ZXJ0cyBlcnJvcnMgdGhhdAorYXJlIHBsYWluIHN0cmluZ3MgdG8gb2JqZWN0cy4gSXQgaXMgdXNlZCBieSBFcnJvci5wbSB0byBjb252ZXJ0IHRleHR1YWwKK2Vycm9ycyB0byBvYmplY3RzLCBhbmQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHVzZXIuCisKK0l0IGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQgd2hpY2ggaXMgYSBoYXNoIHJlZmVyZW5jZSB0byBuYW1lZCBwYXJhbWV0ZXJzLgorQ3VycmVudGx5IHRoZSBvbmx5IG5hbWVkIHBhcmFtZXRlciBwYXNzZWQgaXMgQzwndGV4dCc+IHdoaWNoIGlzIHRoZSB0ZXh0CitvZiB0aGUgZXJyb3IsIGJ1dCBvdGhlcnMgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgZnV0dXJlLgorCitGb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIGNvZGUgd2lsbCBjYXVzZSBFcnJvci5wbSB0byB0aHJvdyBvYmplY3RzIG9mIHRoZQorY2xhc3MgTXlFcnJvcjo6QmFyIGJ5IGRlZmF1bHQ6CisKKyAgICBzdWIgdGhyb3dfTXlFcnJvcl9CYXIKKyAgICB7CisgICAgICAgIG15ICRhcmdzID0gc2hpZnQ7CisgICAgICAgIG15ICRlcnIgPSBNeUVycm9yOjpCYXItPm5ldygpOworICAgICAgICAkZXJyLT57J015QmFyVGV4dCd9ID0gJGFyZ3MtPnsndGV4dCd9OworICAgICAgICByZXR1cm4gJGVycjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxvY2FsICRFcnJvcjo6T2JqZWN0aWZ5Q2FsbGJhY2sgPSBcJnRocm93X015RXJyb3JfQmFyOworCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgaGVyZS4KKyAgICB9CisKKz1oZWFkMSBLTk9XTiBCVUdTCisKK05vbmUsIGJ1dCB0aGF0IGRvZXMgbm90IG1lYW4gdGhlcmUgYXJlIG5vdCBhbnkuCisKKz1oZWFkMSBBVVRIT1JTCisKK0dyYWhhbSBCYXJyIDxnYmFyckBwb2JveC5jb20+CisKK1RoZSBjb2RlIHRoYXQgaW5zcGlyZWQgbWUgdG8gd3JpdGUgdGhpcyB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5CitQZXRlciBTZWliZWwgPHBldGVyQHdlYmxvZ2ljLmNvbT4gYW5kIGFkYXB0ZWQgYnkgSmVzc2UgR2xpY2sKKzxqZ2xpY2tAc2lnLmJzaC5jb20+LgorCis9aGVhZDEgTUFJTlRBSU5FUgorCitTaGxvbWkgRmlzaCA8c2hsb21pZkBpZ2x1Lm9yZy5pbD4KKworPWhlYWQxIFBBU1QgTUFJTlRBSU5FUlMKKworQXJ1biBLdW1hciBVIDx1X2FydW5rdW1hckB5YWhvby5jb20+CisKKz1jdXQKZGlmZiAtLWdpdCBhL3BrdC1saW5lLmMgYi9wa3QtbGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYmExNWYKLS0tIC9kZXYvbnVsbAorKysgYi9wa3QtbGluZS5jCkBAIC0wLDAgKzEsMjQyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqcGFja2V0X3RyYWNlX3ByZWZpeCA9ICJnaXQiOworc3RhdGljIGNvbnN0IGNoYXIgdHJhY2Vfa2V5W10gPSAiR0lUX1RSQUNFX1BBQ0tFVCI7CisKK3ZvaWQgcGFja2V0X3RyYWNlX2lkZW50aXR5KGNvbnN0IGNoYXIgKnByb2cpCit7CisJcGFja2V0X3RyYWNlX3ByZWZpeCA9IHhzdHJkdXAocHJvZyk7Cit9CisKK3N0YXRpYyB2b2lkIHBhY2tldF90cmFjZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4sIGludCB3cml0ZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIG91dDsKKworCWlmICghdHJhY2Vfd2FudCh0cmFjZV9rZXkpKQorCQlyZXR1cm47CisKKwkvKiArMzIgaXMganVzdCBhIGd1ZXNzIGZvciBoZWFkZXIgKyBxdW90aW5nICovCisJc3RyYnVmX2luaXQoJm91dCwgbGVuKzMyKTsKKworCXN0cmJ1Zl9hZGRmKCZvdXQsICJwYWNrZXQ6ICUxMnMlYyAiLAorCQkgICAgcGFja2V0X3RyYWNlX3ByZWZpeCwgd3JpdGUgPyAnPicgOiAnPCcpOworCisJaWYgKChsZW4gPj0gNCAmJiAhcHJlZml4Y21wKGJ1ZiwgIlBBQ0siKSkgfHwKKwkgICAgKGxlbiA+PSA1ICYmICFwcmVmaXhjbXAoYnVmKzEsICJQQUNLIikpKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJm91dCwgIlBBQ0sgLi4uIik7CisJCXVuc2V0ZW52KHRyYWNlX2tleSk7CisJfQorCWVsc2UgeworCQkvKiBYWFggd2Ugc2hvdWxkIHJlYWxseSBoYW5kbGUgcHJpbnRhYmxlIHV0ZjggKi8KKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQkvKiBzdXBwcmVzcyBuZXdsaW5lcyAqLworCQkJaWYgKGJ1ZltpXSA9PSAnXG4nKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGJ1ZltpXSA+PSAweDIwICYmIGJ1ZltpXSA8PSAweDdlKQorCQkJCXN0cmJ1Zl9hZGRjaCgmb3V0LCBidWZbaV0pOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9hZGRmKCZvdXQsICJcXCVvIiwgYnVmW2ldKTsKKwkJfQorCX0KKworCXN0cmJ1Zl9hZGRjaCgmb3V0LCAnXG4nKTsKKwl0cmFjZV9zdHJidWYodHJhY2Vfa2V5LCAmb3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKK30KKworLyoKKyAqIFdyaXRlIGEgcGFja2V0aXplZCBzdHJlYW0sIHdoZXJlIGVhY2ggbGluZSBpcyBwcmVjZWRlZCBieQorICogaXRzIGxlbmd0aCAoaW5jbHVkaW5nIHRoZSBoZWFkZXIpIGFzIGEgNC1ieXRlIGhleCBudW1iZXIuCisgKiBBIGxlbmd0aCBvZiAnemVybycgbWVhbnMgZW5kIG9mIHN0cmVhbSAoYW5kIGEgbGVuZ3RoIG9mIDEtMworICogd291bGQgYmUgYW4gZXJyb3IpLgorICoKKyAqIFRoaXMgaXMgYWxsIHByZXR0eSBzdHVwaWQsIGJ1dCB3ZSB1c2UgdGhpcyBwYWNrZXRpemVkIGxpbmUKKyAqIGZvcm1hdCB0byBtYWtlIGEgc3RyZWFtaW5nIGZvcm1hdCBwb3NzaWJsZSB3aXRob3V0IGV2ZXIKKyAqIG92ZXItcnVubmluZyB0aGUgcmVhZCBidWZmZXJzLiBUaGF0IHdheSB3ZSdsbCBuZXZlciByZWFkCisgKiBpbnRvIHdoYXQgbWlnaHQgYmUgdGhlIHBhY2sgZGF0YSAod2hpY2ggc2hvdWxkIGdvIHRvIGFub3RoZXIKKyAqIHByb2Nlc3MgZW50aXJlbHkpLgorICoKKyAqIFRoZSB3cml0aW5nIHNpZGUgY291bGQgdXNlIHN0ZGlvLCBidXQgc2luY2UgdGhlIHJlYWRpbmcKKyAqIHNpZGUgY2FuJ3QsIHdlIHN0YXkgd2l0aCBwdXJlIHJlYWQvd3JpdGUgaW50ZXJmYWNlcy4KKyAqLworc3NpemVfdCBzYWZlX3dyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzc2l6ZV90IG4pCit7CisJc3NpemVfdCBubiA9IG47CisJd2hpbGUgKG4pIHsKKwkJaW50IHJldCA9IHh3cml0ZShmZCwgYnVmLCBuKTsKKwkJaWYgKHJldCA+IDApIHsKKwkJCWJ1ZiA9IChjaGFyICopIGJ1ZiArIHJldDsKKwkJCW4gLT0gcmV0OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFyZXQpCisJCQlkaWUoIndyaXRlIGVycm9yIChkaXNrIGZ1bGw/KSIpOworCQlkaWVfZXJybm8oIndyaXRlIGVycm9yIik7CisJfQorCXJldHVybiBubjsKK30KKworLyoKKyAqIElmIHdlIGJ1ZmZlcmVkIHRoaW5ncyB1cCBhYm92ZSAod2UgZG9uJ3QsIGJ1dCB3ZSBzaG91bGQpLAorICogd2UnZCBmbHVzaCBpdCBoZXJlCisgKi8KK3ZvaWQgcGFja2V0X2ZsdXNoKGludCBmZCkKK3sKKwlwYWNrZXRfdHJhY2UoIjAwMDAiLCA0LCAxKTsKKwlzYWZlX3dyaXRlKGZkLCAiMDAwMCIsIDQpOworfQorCit2b2lkIHBhY2tldF9idWZfZmx1c2goc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXBhY2tldF90cmFjZSgiMDAwMCIsIDQsIDEpOworCXN0cmJ1Zl9hZGQoYnVmLCAiMDAwMCIsIDQpOworfQorCisjZGVmaW5lIGhleChhKSAoaGV4Y2hhclsoYSkgJiAxNV0pCitzdGF0aWMgY2hhciBidWZmZXJbMTAwMF07CitzdGF0aWMgdW5zaWduZWQgZm9ybWF0X3BhY2tldChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKwlzdGF0aWMgY2hhciBoZXhjaGFyW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJdW5zaWduZWQgbjsKKworCW4gPSB2c25wcmludGYoYnVmZmVyICsgNCwgc2l6ZW9mKGJ1ZmZlcikgLSA0LCBmbXQsIGFyZ3MpOworCWlmIChuID49IHNpemVvZihidWZmZXIpLTQpCisJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGltcG9zc2libHkgbG9uZyBsaW5lIik7CisJbiArPSA0OworCWJ1ZmZlclswXSA9IGhleChuID4+IDEyKTsKKwlidWZmZXJbMV0gPSBoZXgobiA+PiA4KTsKKwlidWZmZXJbMl0gPSBoZXgobiA+PiA0KTsKKwlidWZmZXJbM10gPSBoZXgobik7CisJcGFja2V0X3RyYWNlKGJ1ZmZlcis0LCBuLTQsIDEpOworCXJldHVybiBuOworfQorCit2b2lkIHBhY2tldF93cml0ZShpbnQgZmQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwl1bnNpZ25lZCBuOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwluID0gZm9ybWF0X3BhY2tldChmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlzYWZlX3dyaXRlKGZkLCBidWZmZXIsIG4pOworfQorCit2b2lkIHBhY2tldF9idWZfd3JpdGUoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJdW5zaWduZWQgbjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbiA9IGZvcm1hdF9wYWNrZXQoZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJc3RyYnVmX2FkZChidWYsIGJ1ZmZlciwgbik7Cit9CisKK3N0YXRpYyBpbnQgc2FmZV9yZWFkKGludCBmZCwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBzaXplLCBpbnQgcmV0dXJuX2xpbmVfZmFpbCkKK3sKKwlzc2l6ZV90IHJldCA9IHJlYWRfaW5fZnVsbChmZCwgYnVmZmVyLCBzaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJZGllX2Vycm5vKCJyZWFkIGVycm9yIik7CisJZWxzZSBpZiAocmV0IDwgc2l6ZSkgeworCQlpZiAocmV0dXJuX2xpbmVfZmFpbCkKKwkJCXJldHVybiAtMTsKKworCQlkaWUoIlRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5Iik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYWNrZXRfbGVuZ3RoKGNvbnN0IGNoYXIgKmxpbmVsZW4pCit7CisJaW50IG47CisJaW50IGxlbiA9IDA7CisKKwlmb3IgKG4gPSAwOyBuIDwgNDsgbisrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IGxpbmVsZW5bbl07CisJCWxlbiA8PD0gNDsKKwkJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7CisJCQlsZW4gKz0gYyAtICcwJzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID49ICdhJyAmJiBjIDw9ICdmJykgeworCQkJbGVuICs9IGMgLSAnYScgKyAxMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID49ICdBJyAmJiBjIDw9ICdGJykgeworCQkJbGVuICs9IGMgLSAnQScgKyAxMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBwYWNrZXRfcmVhZF9pbnRlcm5hbChpbnQgZmQsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgaW50IHJldHVybl9saW5lX2ZhaWwpCit7CisJaW50IGxlbiwgcmV0OworCWNoYXIgbGluZWxlbls0XTsKKworCXJldCA9IHNhZmVfcmVhZChmZCwgbGluZWxlbiwgNCwgcmV0dXJuX2xpbmVfZmFpbCk7CisJaWYgKHJldHVybl9saW5lX2ZhaWwgJiYgcmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlsZW4gPSBwYWNrZXRfbGVuZ3RoKGxpbmVsZW4pOworCWlmIChsZW4gPCAwKQorCQlkaWUoInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIiwgbGluZWxlbik7CisJaWYgKCFsZW4pIHsKKwkJcGFja2V0X3RyYWNlKCIwMDAwIiwgNCwgMCk7CisJCXJldHVybiAwOworCX0KKwlsZW4gLT0gNDsKKwlpZiAobGVuID49IHNpemUpCisJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIsIGxlbik7CisJcmV0ID0gc2FmZV9yZWFkKGZkLCBidWZmZXIsIGxlbiwgcmV0dXJuX2xpbmVfZmFpbCk7CisJaWYgKHJldHVybl9saW5lX2ZhaWwgJiYgcmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlidWZmZXJbbGVuXSA9IDA7CisJcGFja2V0X3RyYWNlKGJ1ZmZlciwgbGVuLCAwKTsKKwlyZXR1cm4gbGVuOworfQorCitpbnQgcGFja2V0X3JlYWQoaW50IGZkLCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIHNpemUpCit7CisJcmV0dXJuIHBhY2tldF9yZWFkX2ludGVybmFsKGZkLCBidWZmZXIsIHNpemUsIDEpOworfQorCitpbnQgcGFja2V0X3JlYWRfbGluZShpbnQgZmQsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgc2l6ZSkKK3sKKwlyZXR1cm4gcGFja2V0X3JlYWRfaW50ZXJuYWwoZmQsIGJ1ZmZlciwgc2l6ZSwgMCk7Cit9CisKK2ludCBwYWNrZXRfZ2V0X2xpbmUoc3RydWN0IHN0cmJ1ZiAqb3V0LAorCWNoYXIgKipzcmNfYnVmLCBzaXplX3QgKnNyY19sZW4pCit7CisJaW50IGxlbjsKKworCWlmICgqc3JjX2xlbiA8IDQpCisJCXJldHVybiAtMTsKKwlsZW4gPSBwYWNrZXRfbGVuZ3RoKCpzcmNfYnVmKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmICghbGVuKSB7CisJCSpzcmNfYnVmICs9IDQ7CisJCSpzcmNfbGVuIC09IDQ7CisJCXBhY2tldF90cmFjZSgiMDAwMCIsIDQsIDApOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCpzcmNfbGVuIDwgbGVuKQorCQlyZXR1cm4gLTI7CisKKwkqc3JjX2J1ZiArPSA0OworCSpzcmNfbGVuIC09IDQ7CisJbGVuIC09IDQ7CisKKwlzdHJidWZfYWRkKG91dCwgKnNyY19idWYsIGxlbik7CisJKnNyY19idWYgKz0gbGVuOworCSpzcmNfbGVuIC09IGxlbjsKKwlwYWNrZXRfdHJhY2Uob3V0LT5idWYsIG91dC0+bGVuLCAwKTsKKwlyZXR1cm4gbGVuOworfQpkaWZmIC0tZ2l0IGEvcGt0LWxpbmUuaCBiL3BrdC1saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmZWIwYwotLS0gL2Rldi9udWxsCisrKyBiL3BrdC1saW5lLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBQS1RMSU5FX0gKKyNkZWZpbmUgUEtUTElORV9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworLyoKKyAqIFNpbGx5IHBhY2tldGl6ZWQgbGluZSB3cml0aW5nIGludGVyZmFjZQorICovCit2b2lkIHBhY2tldF9mbHVzaChpbnQgZmQpOwordm9pZCBwYWNrZXRfd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7Cit2b2lkIHBhY2tldF9idWZfZmx1c2goc3RydWN0IHN0cmJ1ZiAqYnVmKTsKK3ZvaWQgcGFja2V0X2J1Zl93cml0ZShzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworaW50IHBhY2tldF9yZWFkX2xpbmUoaW50IGZkLCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIHNpemUpOworaW50IHBhY2tldF9yZWFkKGludCBmZCwgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBzaXplKTsKK2ludCBwYWNrZXRfZ2V0X2xpbmUoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjaGFyICoqc3JjX2J1Ziwgc2l6ZV90ICpzcmNfbGVuKTsKK3NzaXplX3Qgc2FmZV93cml0ZShpbnQsIGNvbnN0IHZvaWQgKiwgc3NpemVfdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcG8vLmdpdGlnbm9yZSBiL3BvLy5naXRpZ25vcmUKaW5kZXggYTg5Y2Y0NC4uNzk2Yjk2ZCAxMDA2NDQKLS0tIGEvcG8vLmdpdGlnbm9yZQorKysgYi9wby8uZ2l0aWdub3JlCkBAIC0xLDIgKzEgQEAKLSoubXNnCi0qfgorL2J1aWxkCmRpZmYgLS1naXQgYS9wby9SRUFETUUgYi9wby9SRUFETUUKaW5kZXggMGY1ODM3ZC4uYzE1MjBlOCAxMDA2NDQKLS0tIGEvcG8vUkVBRE1FCisrKyBiL3BvL1JFQURNRQpAQCAtMSwyNTEgKzEsMjkyIEBACi1Mb2NhbGl6aW5nIGdpdC1ndWkgZm9yIHlvdXIgbGFuZ3VhZ2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29yZSBHSVQgVHJhbnNsYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT0KIAotVGhpcyBzaG9ydCBub3RlIGlzIHRvIGhlbHAgeW91LCB3aG8gcmVhZHMgYW5kIHdyaXRlcyBFbmdsaXNoIGFuZCB5b3VyCi1vd24gbGFuZ3VhZ2UsIGhlbHAgdXMgZ2V0dGluZyBnaXQtZ3VpIGxvY2FsaXplZCBmb3IgbW9yZSBsYW5ndWFnZXMuICBJdAotZG9lcyBub3QgdHJ5IHRvIGJlIGEgY29tcHJlaGVuc2l2ZSBtYW51YWwgb2YgR05VIGdldHRleHQsIHdoaWNoIGlzIHRoZQotaTE4biBmcmFtZXdvcmsgd2UgdXNlLCBidXQgdHJpZXMgdG8gaGVscCB5b3UgZ2V0IHN0YXJ0ZWQgYnkgY292ZXJpbmcgdGhlCi1iYXNpY3MgYW5kIGhvdyBpdCBpcyB1c2VkIGluIHRoaXMgcHJvamVjdC4KK1RoaXMgZGlyZWN0b3J5IGhvbGRzIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBjb3JlIG9mIEdpdC4gVGhpcyBkb2N1bWVudAorZGVzY3JpYmVzIGhvdyB5b3UgY2FuIGNvbnRyaWJ1dGUgdG8gdGhlIGVmZm9ydCBvZiBlbmhhbmNpbmcgdGhlIGxhbmd1YWdlCitjb3ZlcmFnZSBhbmQgbWFpbnRhaW5pbmcgdGhlIHRyYW5zbGF0aW9uLgogCi0xLiBHZXR0aW5nIHN0YXJ0ZWQuCitUaGUgbG9jYWxpemF0aW9uIChsMTBuKSBjb29yZGluYXRvciwgSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldEBnbWFpbC5jb20+LAorY29vcmRpbmF0ZXMgb3VyIGxvY2FsaXphdGlvbiBlZmZvcnQgaW4gdGhlIGwxMCBjb29yZGluYXRvciByZXBvc2l0b3J5OgogCi1Zb3Ugd291bGQgZmlyc3QgbmVlZCB0byBoYXZlIGEgd29ya2luZyAiZ2l0Ii4gIFlvdXIgZGlzdHJpYnV0aW9uIG1heQotaGF2ZSBpdCBhcyAiZ2l0LWNvcmUiIHBhY2thZ2UgKGRvIG5vdCBnZXQgIkdOVSBJbnRlcmFjdGl2ZSBUb29scyIgLS0KLXRoYXQgaXMgYSBkaWZmZXJlbnQgImdpdCIpLiAgWW91IHdvdWxkIGFsc28gbmVlZCBHTlUgZ2V0dGV4dCB0b29sY2hhaW4KLXRvIHRlc3QgdGhlIHJlc3VsdGluZyB0cmFuc2xhdGlvbiBvdXQuICBBbHRob3VnaCB5b3UgY2FuIHdvcmsgb24gbWVzc2FnZQotdHJhbnNsYXRpb24gZmlsZXMgd2l0aCBhIHJlZ3VsYXIgdGV4dCBlZGl0b3IsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGhhdmUKLXNwZWNpYWxpemVkIHNvLWNhbGxlZCAicG8gZmlsZSBlZGl0b3JzIiAoZS5nLiBlbWFjcyBwby1tb2RlLCBLQmFiZWwsCi1wb2VkaXQsIEdUcmFuc2xhdG9yIC0tLSBhbnkgb2YgdGhlbSB3b3VsZCB3b3JrIHdlbGwpLiAgUGxlYXNlIGluc3RhbGwKLXRoZW0uCisgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbDEwbi9naXQtcG8vCiAKLVlvdSB3b3VsZCB0aGVuIG5lZWQgdG8gY2xvbmUgdGhlIGdpdC1ndWkgcHJvamVjdCByZXBvc2l0b3J5IGFuZCBjcmVhdGUKLWEgZmVhdHVyZSBicmFuY2ggdG8gYmVnaW4gd29ya2luZzoKK0FzIGEgY29udHJpYnV0b3IgZm9yIGEgbGFuZ3VhZ2UgWFgsIHlvdSBzaG91bGQgZmlyc3QgY2hlY2sgVEVBTVMgZmlsZSBpbgordGhpcyBkaXJlY3RvcnkgdG8gc2VlIHdoZXRoZXIgYSBkZWRpY2F0ZWQgcmVwb3NpdG9yeSBmb3IgeW91ciBsYW5ndWFnZSBYWAorZXhpc3RzLiBGb3JrIHRoZSBkZWRpY2F0ZWQgcmVwb3NpdG9yeSBhbmQgc3RhcnQgdG8gd29yayBpZiBpdCBleGlzdHMuCiAKLQkkIGdpdCBjbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L2dpdC1ndWkuZ2l0Ci0JJCBjZCBnaXQtZ3VpLmdpdAotCSQgZ2l0IGNoZWNrb3V0IC1iIG15LXRyYW5zbGF0aW9uCitJZiB5b3UgYXJlIHRoZSBmaXJzdCBjb250cmlidXRvciBmb3IgdGhlIGxhbmd1YWdlIFhYLCBwbGVhc2UgZm9yayB0aGlzCityZXBvc2l0b3J5LCBwcmVwYXJlIGFuZC9vciB1cGRhdGUgdGhlIHRyYW5zbGF0ZWQgbWVzc2FnZSBmaWxlIHBvL1hYLnBvCisoZGVzY3JpYmVkIGxhdGVyKSwgYW5kIGFzayB0aGUgbDEwbiBjb29yZGluYXRvciB0byBwdWxsIHlvdXIgd29yay4KIAotVGhlICJnaXQgY2hlY2tvdXQiIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyBicmFuY2ggdG8ga2VlcCB5b3VyIHdvcmsKLWlzb2xhdGVkIGFuZCB0byBtYWtlIGl0IHNpbXBsZSB0byBwb3N0IHlvdXIgcGF0Y2ggc2VyaWVzIHdoZW4KLWNvbXBsZXRlZC4gIFlvdSB3aWxsIGJlIHdvcmtpbmcgb24gdGhpcyBicmFuY2guCitJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29udHJpYnV0b3JzIGZvciB0aGUgc2FtZSBsYW5ndWFnZSwgcGxlYXNlIGZpcnN0Citjb29yZGluYXRlIGFtb25nIHlvdXJzZWx2ZXMgYW5kIG5vbWluYXRlIHRoZSB0ZWFtIGxlYWRlciBmb3IgeW91cgorbGFuZ3VhZ2UsIHNvIHRoYXQgdGhlIGwxMG4gY29vcmRpbmF0b3Igb25seSBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIG9uZQorcGVyc29uIHBlciBsYW5ndWFnZS4KKworVGhlIG92ZXJhbGwgZGF0YS1mbG93IGxvb2tzIGxpa2UgdGhpczoKKworICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBHaXQgc291cmNlIGNvZGUgICB8IC0tLSgxKS0tLT4gfCBMMTBuIGNvb3JkaW5hdG9yIHwKKyAgICB8IHJlcG9zaXRvcnkgICAgICAgIHwgPC0tLSg0KS0tLSB8IHJlcG9zaXRvcnkgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMikgICAgKDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMYW5ndWFnZSBUZWFtIFhYIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworCisgKiBUcmFuc2xhdGFibGUgc3RyaW5ncyBhcmUgbWFya2VkIGluIHRoZSBzb3VyY2UgZmlsZS4KKyAqIEwxMG4gY29vcmRpbmF0b3IgcHVsbHMgZnJvbSB0aGUgc291cmNlICgxKQorICogTDEwbiBjb29yZGluYXRvciB1cGRhdGVzIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHBvL2dpdC5wb3QKKyAqIExhbmd1YWdlIHRlYW0gcHVsbHMgZnJvbSBMMTBuIGNvb3JkaW5hdG9yICgyKQorICogTGFuZ3VhZ2UgdGVhbSB1cGRhdGVzIHRoZSBtZXNzYWdlIGZpbGUgcG8vWFgucG8KKyAqIEwxMG4gY29vcmRpbmF0b3IgcHVsbHMgZnJvbSBMYW5ndWFnZSB0ZWFtICgzKQorICogTDEwbiBjb29yZGluYXRvciBhc2tzIHRoZSByZXN1bHQgdG8gYmUgcHVsbGVkICg0KS4KIAogCi0yLiBTdGFydGluZyBhIG5ldyBsYW5ndWFnZS4KK01haW50YWluaW5nIHRoZSBwby9naXQucG90IGZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSW4gdGhlIGdpdC1ndWkgZGlyZWN0b3J5IGlzIGEgcG8vIHN1YmRpcmVjdG9yeS4gIEl0IGhhcyBhIGhhbmRmdWwgb2YKLWZpbGVzIHdob3NlIG5hbWVzIGVuZCB3aXRoICIucG8iLiAgSXMgdGhlcmUgYSBmaWxlIHRoYXQgaGFzIG1lc3NhZ2VzCi1pbiB5b3VyIGxhbmd1YWdlPworKFRoaXMgaXMgZG9uZSBieSB0aGUgbDEwbiBjb29yZGluYXRvcikuCiAKLUlmIHlvdSBkbyBub3Qga25vdyB3aGF0IHlvdXIgbGFuZ3VhZ2Ugc2hvdWxkIGJlIG5hbWVkLCB5b3UgbmVlZCB0byBmaW5kCi1pdC4gIFRoaXMgY3VycmVudGx5IGZvbGxvd3MgSVNPIDYzOS0xIHR3byBsZXR0ZXIgY29kZXM6CitUaGUgcG8vZ2l0LnBvdCBmaWxlIGNvbnRhaW5zIGEgbWVzc2FnZSBjYXRhbG9nIGV4dHJhY3RlZCBmcm9tIEdpdCdzCitzb3VyY2VzLiBUaGUgbDEwbiBjb29yZGluYXRvciBtYWludGFpbnMgaXQgYnkgYWRkaW5nIG5ldyB0cmFuc2xhdGlvbnMgd2l0aAorbXNnaW5pdCgxKSwgb3IgdXBkYXRlIGV4aXN0aW5nIG9uZXMgd2l0aCBtc2dtZXJnZSgxKS4gIEluIG9yZGVyIHRvIHVwZGF0ZQordGhlIEdpdCBzb3VyY2VzIHRvIGV4dHJhY3QgdGhlIG1lc3NhZ2VzIGZyb20sIHRoZSBsMTBuIGNvb3JkaW5hdG9yIGlzCitleHBlY3RlZCB0byBwdWxsIGZyb20gdGhlIG1haW4gZ2l0IHJlcG9zaXRvcnkgYXQgc3RyYXRlZ2ljIHBvaW50IGluCitoaXN0b3J5IChlLmcuIHdoZW4gYSBtYWpvciByZWxlYXNlIGFuZCByZWxlYXNlIGNhbmRpZGF0ZXMgYXJlIHRhZ2dlZCksCithbmQgdGhlbiBydW4gIm1ha2UgcG90IiBhdCB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KIAotCWh0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvcGhwL2NvZGVfbGlzdC5waHAKLQotRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgcHJlcGFyaW5nIGEgdHJhbnNsYXRpb24gZm9yIEFmcmlrYWFucywgdGhlCi1sYW5ndWFnZSBjb2RlIGlzICJhZiIuICBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgdHJhbnNsYXRpb24gZm9yIHlvdXIKLWxhbmd1YWdlLCB5b3UgZG8gbm90IGhhdmUgdG8gcGVyZm9ybSBhbnkgc3RlcCBpbiB0aGlzIHNlY3Rpb24sIGJ1dCBrZWVwCi1yZWFkaW5nLCBiZWNhdXNlIHdlIGFyZSBjb3ZlcmluZyB0aGUgYmFzaWNzLgotCi1JZiB5b3UgZGlkIG5vdCBmaW5kIHlvdXIgbGFuZ3VhZ2UsIHlvdSB3b3VsZCBuZWVkIHRvIHN0YXJ0IG9uZSB5b3Vyc2VsZi4KLUNvcHkgcG8vZ2l0LWd1aS5wb3QgZmlsZSB0byBwby9hZi5wbyAocmVwbGFjZSAiYWYiIHdpdGggdGhlIGNvZGUgZm9yCi15b3VyIGxhbmd1YWdlKS4gIEVkaXQgdGhlIGZpcnN0IHNldmVyYWwgbGluZXMgdG8gbWF0Y2ggZXhpc3RpbmcgKi5wbwotZmlsZXMgdG8gbWFrZSBpdCBjbGVhciB0aGlzIGlzIGEgdHJhbnNsYXRpb24gdGFibGUgZm9yIGdpdC1ndWkgcHJvamVjdCwKLWFuZCB5b3UgYXJlIHRoZSBwcmltYXJ5IHRyYW5zbGF0b3IuICBUaGUgcmVzdWx0IG9mIHlvdXIgZWRpdGluZyB3b3VsZAotbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgotCi0gICAgIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHRvIEFmcmlrYWFucwotICAgICMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQotICAgICMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdC1ndWkgcGFja2FnZS4KLSAgICAjIFlPVVIgTkFNRSA8WU9VUkBFLU1BSUwuQUREUkVTUz4sIDIwMDcuCi0gICAgIwotICAgICMsIGZ1enp5Ci0gICAgbXNnaWQgIiIKLSAgICBtc2dzdHIgIiIKLSAgICAiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCi0gICAgIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSAgICAiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMDctMjQgMjI6MTkrMDMwMFxuIgotICAgICJQTy1SZXZpc2lvbi1EYXRlOiAyMDA3LTA3LTI1IDE4OjAwKzA5MDBcbiIKLSAgICAiTGFzdC1UcmFuc2xhdG9yOiBZT1VSIE5BTUUgPFlPVVJARS1NQUlMLkFERFJFU1M+XG4iCi0gICAgIkxhbmd1YWdlLVRlYW06IEFmcmlrYWFuc1xuIgotICAgICJNSU1FLVZlcnNpb246IDEuMFxuIgotICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSAgICAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotCi1Zb3Ugd2lsbCBmaW5kIG1hbnkgcGFpcnMgb2YgYSAibXNnaWQiIGxpbmUgZm9sbG93ZWQgYnkgYSAibXNnc3RyIiBsaW5lLgotVGhlc2UgcGFpcnMgZGVmaW5lIGhvdyBtZXNzYWdlcyBpbiBnaXQtZ3VpIGFwcGxpY2F0aW9uIGFyZSB0cmFuc2xhdGVkIHRvCi15b3VyIGxhbmd1YWdlLiAgWW91ciBwcmltYXJpbHkgam9iIGlzIHRvIGZpbGwgaW4gdGhlIGVtcHR5IGRvdWJsZSBxdW90ZQotcGFpcnMgb24gbXNnc3RyIGxpbmVzIHdpdGggdGhlIHRyYW5zbGF0aW9uIG9mIHRoZSBzdHJpbmdzIG9uIHRoZWlyCi1tYXRjaGluZyBtc2dpZCBsaW5lcy4gIEEgZmV3IHRpcHM6Ci0KLSAtIENvbnRyb2wgY2hhcmFjdGVycywgc3VjaCBhcyBuZXdsaW5lcywgYXJlIHdyaXR0ZW4gaW4gYmFja3NsYXNoCi0gICBzZXF1ZW5jZSBzaW1pbGFyIHRvIHN0cmluZyBsaXRlcmFscyBpbiB0aGUgQyBwcm9ncmFtbWluZyBsYW5ndWFnZS4KLSAgIFdoZW4gdGhlIHN0cmluZyBnaXZlbiBvbiBhIG1zZ2lkIGxpbmUgaGFzIHN1Y2ggYSBiYWNrc2xhc2ggc2VxdWVuY2UsCi0gICB5b3Ugd291bGQgdHlwaWNhbGx5IHdhbnQgdG8gaGF2ZSBjb3JyZXNwb25kaW5nIG9uZXMgaW4gdGhlIHN0cmluZyBvbgotICAgeW91ciBtc2dzdHIgbGluZS4KLQotIC0gU29tZSBtZXNzYWdlcyBjb250YWluIGFuIG9wdGlvbmFsIGNvbnRleHQgaW5kaWNhdG9yIGF0IHRoZSBlbmQsCi0gICBmb3IgZXhhbXBsZSAiQEBub3VuIiBvciAiQEB2ZXJiIi4gIFRoaXMgaW5kaWNhdG9yIGFsbG93cyB0aGUKLSAgIHNvZnR3YXJlIHRvIHNlbGVjdCB0aGUgY29ycmVjdCB0cmFuc2xhdGlvbiBkZXBlbmRpbmcgdXBvbiB0aGUgdXNlLgotICAgVGhlIGluZGljYXRvciBpcyBub3QgYWN0dWFsbHkgcGFydCBvZiB0aGUgbWVzc2FnZSBhbmQgd2lsbCBub3QKLSAgIGJlIHNob3duIHRvIHRoZSBlbmQtdXNlci4KLQotICAgSWYgeW91ciBsYW5ndWFnZSBkb2VzIG5vdCByZXF1aXJlIGEgZGlmZmVyZW50IHRyYW5zbGF0aW9uIHlvdQotICAgd2lsbCBzdGlsbCBuZWVkIHRvIHRyYW5zbGF0ZSBib3RoIG1lc3NhZ2VzLgotCi0gLSBPZnRlbiB0aGUgbWVzc2FnZXMgYmVpbmcgdHJhbnNsYXRlZCBhcmUgZm9ybWF0IHN0cmluZ3MgZ2l2ZW4gdG8KLSAgICJwcmludGYoKSItbGlrZSBmdW5jdGlvbnMuICBNYWtlIHN1cmUgIiVzIiwgIiVkIiwgYW5kICIlJSIgaW4geW91cgotICAgdHJhbnNsYXRlZCBtZXNzYWdlcyBtYXRjaCB0aGUgb3JpZ2luYWwuCi0KLSAgIFdoZW4geW91IGhhdmUgdG8gY2hhbmdlIHRoZSBvcmRlciBvZiB3b3JkcywgeW91IGNhbiBhZGQgIjxudW1iZXI+JCIKLSAgIGJldHdlZW4gJyUnIGFuZCB0aGUgY29udmVyc2lvbiAoJ3MnLCAnZCcsIGV0Yy4pIHRvIHNheSAiPG51bWJlcj4tdGgKLSAgIHBhcmFtZXRlciB0byB0aGUgZm9ybWF0IHN0cmluZyBpcyB1c2VkIGF0IHRoaXMgcG9pbnQiLiAgRm9yIGV4YW1wbGUsCi0gICBpZiB0aGUgb3JpZ2luYWwgbWVzc2FnZSBpcyBsaWtlIHRoaXM6Ci0KLQkiTGVuZ3RoIGlzICVkLCBXZWlnaHQgaXMgJWQiCi0KLSAgIGFuZCBpZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHlvdXIgdHJhbnNsYXRpb24gbmVlZHMgdG8gc2F5IHdlaWdodCBmaXJzdAotICAgYW5kIHRoZW4gbGVuZ3RoLCB5b3UgY2FuIHNheSBzb21ldGhpbmcgbGlrZToKLQotCSJXRUlHSFQgSVMgJTIkZCwgTEVOR1RIIElTICUxJGQiCi0KLSAgIEEgZm9ybWF0IHNwZWNpZmljYXRpb24gd2l0aCBhICcqJyAoYXN0ZXJpc2spIHJlZmVycyB0byAqdHdvKiBhcmd1bWVudHMKLSAgIGluc3RlYWQgb2Ygb25lLCBoZW5jZSB0aGUgc3VjY2VlZGluZyBhcmd1bWVudCBudW1iZXIgaXMgdHdvIGhpZ2hlcgotICAgaW5zdGVhZCBvZiBvbmUuIFNvLCBhIG1lc3NhZ2UgbGlrZSB0aGlzCi0KLQkiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKLQotICAgaXMgZXF1aXZhbGVudCB0bwotCi0JIiUxJHMgLi4uICUyJCppIG9mICU0JCppICU2JHMgKCU3JDNpJSUpIgotCi0gLSBBIGxvbmcgbWVzc2FnZSBjYW4gYmUgc3BsaXQgYWNyb3NzIG11bHRpcGxlIGxpbmVzIGJ5IGVuZGluZyB0aGUKLSAgIHN0cmluZyB3aXRoIGEgZG91YmxlIHF1b3RlLCBhbmQgc3RhcnRpbmcgYW5vdGhlciBzdHJpbmcgb24gdGhlIG5leHQKLSAgIGxpbmUgd2l0aCBhbm90aGVyIGRvdWJsZSBxdW90ZS4gIFRoZXkgd2lsbCBiZSBjb25jYXRlbmF0ZWQgaW4gdGhlCi0gICByZXN1bHQuICBGb3IgZXhhbXBsZToKLQotICAgIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODkKLSAgICMsIHRjbC1mb3JtYXQKLSAgIG1zZ2lkICIiCi0gICAiT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCi0gICAibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCi0gICBtc2dzdHIgIiIKLSAgICJIRVJFIFlPVSBXSUxMIFdSSVRFIFlPVVIgVFJBTlNMQVRJT04gT0YgVEhFIEFCT1ZFIExPTkcgIgotICAgIk1FU1NBR0UgSU4gWU9VUiBMQU5HVUFHRS4iCi0KLVlvdSBjYW4gdGVzdCB5b3VyIHRyYW5zbGF0aW9uIGJ5IHJ1bm5pbmcgIm1ha2UgaW5zdGFsbCIsIHdoaWNoIHdvdWxkCi1jcmVhdGUgcG8vYWYubXNnIGZpbGUgYW5kIGluc3RhbGxzIHRoZSByZXN1bHQsIGFuZCB0aGVuIHJ1bm5pbmcgdGhlCi1yZXN1bHRpbmcgZ2l0LWd1aSB1bmRlciB5b3VyIGxvY2FsZToKLQotCSQgbWFrZSBpbnN0YWxsCi0JJCBMQU5HPWFmIGdpdC1ndWkKLQotVGhlcmUgaXMgYSB0cmljayB0byB0ZXN0IHlvdXIgdHJhbnNsYXRpb24gd2l0aG91dCBmaXJzdCBpbnN0YWxsaW5nOgotCi0JJCBtYWtlCi0JJCBMQU5HPWFmIC4vZ2l0LWd1aS5zaAotCi1XaGVuIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciB0cmFuc2xhdGlvbiwgY29tbWl0IHlvdXIgY2hhbmdlcyB0aGVuIHN1Ym1pdAoteW91ciBwYXRjaCBzZXJpZXMgdG8gdGhlIG1haW50YWluZXIgYW5kIHRoZSBHaXQgbWFpbGluZyBsaXN0OgotCi0JJCBlZGl0IHBvL2FmLnBvCi0JLi4uIGJlIHN1cmUgdG8gdXBkYXRlIExhc3QtVHJhbnNsYXRvcjogYW5kCi0JLi4uIFBPLVJldmlzaW9uLURhdGU6IGxpbmVzLgotCSQgZ2l0IGFkZCBwby9hZi5wbwotCSQgZ2l0IGNvbW1pdCAtcyAtbSAnZ2l0LWd1aTogYWRkZWQgQWZyaWthYW5zIHRyYW5zbGF0aW9uLicKLQkkIGdpdCBzZW5kLWVtYWlsIC0tdG8gJ2dpdEB2Z2VyLmtlcm5lbC5vcmcnIFwKLQkgICAtLWNjICdQYXQgVGhveXRzIDxwYXR0aG95dHNAdXNlcnMuc291cmNlZm9yZ2UubmV0PicgXAotCSAgIC0tc3ViamVjdCAnZ2l0LWd1aTogQWZyaWthYW5zIHRyYW5zbGF0aW9uJyBcCi0JICAgbWFzdGVyLi4KK0xhbmd1YWdlIGNvbnRyaWJ1dG9ycyB1c2UgdGhpcyBmaWxlIHRvIHByZXBhcmUgdHJhbnNsYXRpb25zIGZvciB0aGVpcgorbGFuZ3VhZ2UsIGJ1dCB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgdG8gbW9kaWZ5IGl0LgogCiAKLTMuIFVwZGF0aW5nIHlvdXIgdHJhbnNsYXRpb24uCitJbml0aWFsaXppbmcgYSBYWC5wbyBmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZXJlIG1heSBhbHJlYWR5IGJlIGEgdHJhbnNsYXRpb24gZm9yIHlvdXIgbGFuZ3VhZ2UsIGFuZCB5b3UgbWF5IHdhbnQKLXRvIGNvbnRyaWJ1dGUgYW4gdXBkYXRlLiAgVGhpcyBtYXkgYmUgYmVjYXVzZSB5b3Ugd291bGQgd2FudCB0byBpbXByb3ZlCi10aGUgdHJhbnNsYXRpb24gb2YgZXhpc3RpbmcgbWVzc2FnZXMsIG9yIGJlY2F1c2UgdGhlIGdpdC1ndWkgc29mdHdhcmUKLWl0c2VsZiB3YXMgdXBkYXRlZCBhbmQgdGhlcmUgYXJlIG5ldyBtZXNzYWdlcyB0aGF0IG5lZWQgdHJhbnNsYXRpb24uCisoVGhpcyBpcyBkb25lIGJ5IHRoZSBsYW5ndWFnZSB0ZWFtcykuCiAKLUluIGFueSBjYXNlLCBtYWtlIHN1cmUgeW91IGFyZSB1cC10by1kYXRlIGJlZm9yZSBzdGFydGluZyB5b3VyIHdvcms6CitJZiB5b3VyIGxhbmd1YWdlIFhYIGRvZXMgbm90IGhhdmUgdHJhbnNsYXRlZCBtZXNzYWdlIGZpbGUgcG8vWFgucG8geWV0LAoreW91IGFkZCBhIHRyYW5zbGF0aW9uIGZvciB0aGUgZmlyc3QgdGltZSBieSBydW5uaW5nOgogCi0JJCBnaXQgY2hlY2tvdXQgbWFzdGVyCi0JJCBnaXQgcHVsbAorICAgIG1zZ2luaXQgLS1sb2NhbGU9WFgKIAotSW4gdGhlIGZvcm1lciBjYXNlLCB5b3Ugd2lsbCBlZGl0IHBvL2FmLnBvIChhZ2FpbiwgcmVwbGFjZSAiYWYiIHdpdGgKLXlvdXIgbGFuZ3VhZ2UgY29kZSksIGFuZCBhZnRlciB0ZXN0aW5nIGFuZCB1cGRhdGluZyB0aGUgTGFzdC1UcmFuc2xhdG9yOgotYW5kIFBPLVJldmlzaW9uLURhdGU6IGxpbmVzLCAiYWRkL2NvbW1pdC9wdXNoIiBhcyBpbiB0aGUgcHJldmlvdXMKLXNlY3Rpb24uCitpbiB0aGUgcG8vIGRpcmVjdG9yeSwgd2hlcmUgWFggaXMgdGhlIGxvY2FsZSwgZS5nLiAiZGUiLCAiaXMiLCAicHRfQlIiLAorInpoX0NOIiwgZXRjLgogCi1CeSBjb21wYXJpbmcgIlBPVC1DcmVhdGlvbi1EYXRlOiIgbGluZSBpbiBwby9naXQtZ3VpLnBvdCBmaWxlIGFuZAotcG8vYWYucG8gZmlsZSwgeW91IGNhbiB0ZWxsIGlmIHRoZXJlIGFyZSBuZXcgbWVzc2FnZXMgdGhhdCBuZWVkIHRvIGJlCi10cmFuc2xhdGVkLiAgWW91IHdvdWxkIG5lZWQgdGhlIEdOVSBnZXR0ZXh0IHBhY2thZ2UgdG8gcGVyZm9ybSB0aGlzCi1zdGVwLgorVGhlbiBlZGl0IHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBjb3B5cmlnaHQgaW5mbyBpbiB5b3VyIG5ldyBYWC5wbwordG8gYmUgY29ycmVjdCwgZS5nLiBmb3IgSWNlbGFuZGljOgogCi0JJCBtc2dtZXJnZSAtVSBwby9hZi5wbyBwby9naXQtZ3VpLnBvdAorICAgIEBAIC0xLDYgKzEsNiBAQAorICAgIC0jIEljZWxhbmRpYyB0cmFuc2xhdGlvbnMgZm9yIFBBQ0tBR0UgcGFja2FnZS4KKyAgICAtIyBDb3B5cmlnaHQgKEMpIDIwMTAgVEhFIFBBQ0tBR0UnUyBDT1BZUklHSFQgSE9MREVSCisgICAgLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIFBBQ0tBR0UgcGFja2FnZS4KKyAgICArIyBJY2VsYW5kaWMgdHJhbnNsYXRpb25zIGZvciBHaXQuCisgICAgKyMgQ29weXJpZ2h0IChDKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uIDxhdmFyYWJAZ21haWwuY29tPgorICAgICsjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyAgICAgIyDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbiA8YXZhcmFiQGdtYWlsLmNvbT4sIDIwMTAuCiAKLVRoaXMgdXBkYXRlcyBwby9hZi5wbyAoYWdhaW4sIHJlcGxhY2UgImFmIiB3aXRoIHlvdXIgbGFuZ3VhZ2UKLWNvZGUpIHNvIHRoYXQgaXQgY29udGFpbnMgbXNnaWQgbGluZXMgKGkuZS4gdGhlIG9yaWdpbmFsKSB0aGF0Ci15b3VyIHRyYW5zbGF0aW9uIGRpZCBub3QgaGF2ZSBiZWZvcmUuICBUaGVyZSBhcmUgYSBmZXcgdGhpbmdzIHRvCi13YXRjaCBvdXQgZm9yOgorQW5kIGNoYW5nZSByZWZlcmVuY2VzIHRvIFBBQ0tBR0UgVkVSU0lPTiBpbiB0aGUgUE8gSGVhZGVyIEVudHJ5IHRvCitqdXN0ICJHaXQiOgogCi0gLSBUaGUgb3JpZ2luYWwgdGV4dCBpbiBFbmdsaXNoIG9mIGFuIG9sZGVyIG1lc3NhZ2UgeW91IGFscmVhZHkKLSAgIHRyYW5zbGF0ZWQgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQuICBZb3Ugd2lsbCBub3RpY2UgYSBjb21tZW50IGxpbmUKLSAgIHRoYXQgYmVnaW5zIHdpdGggIiMsIGZ1enp5IiBpbiBmcm9udCBvZiBzdWNoIGEgbWVzc2FnZS4gIG1zZ21lcmdlCi0gICB0b29sIG1hZGUgaXRzIGJlc3QgZWZmb3J0IHRvIG1hdGNoIHlvdXIgb2xkIHRyYW5zbGF0aW9uIHdpdGggdGhlCi0gICBtZXNzYWdlIGZyb20gdGhlIHVwZGF0ZWQgc29mdHdhcmUsIGJ1dCB5b3UgbWF5IGZpbmQgY2FzZXMgdGhhdCBpdAotICAgbWF0Y2hlZCB5b3VyIG9sZCB0cmFuc2xhdGVkIG1lc3NhZ2UgdG8gYSBuZXcgbXNnaWQgYW5kIHRoZSBwYWlyaW5nCi0gICBkb2VzIG5vdCBtYWtlIGFueSBzZW5zZSAtLSB5b3Ugd291bGQgbmVlZCB0byBmaXggdGhlbSwgYW5kIHRoZW4KLSAgIHJlbW92ZSB0aGUgIiMsIGZ1enp5IiBsaW5lIGZyb20gdGhlIG1lc3NhZ2UgKHlvdXIgZml4ZWQgdHJhbnNsYXRpb24KLSAgIG9mIHRoZSBtZXNzYWdlIHdpbGwgbm90IGJlIHVzZWQgYmVmb3JlIHlvdSByZW1vdmUgdGhlIG1hcmtlcikuCisgICAgcGVybCAtcGkgLWUgJ3MvKD88PSJQcm9qZWN0LUlkLVZlcnNpb246IClQQUNLQUdFIFZFUlNJT04vR2l0LycgWFgucG8KIAotIC0gTmV3IG1lc3NhZ2VzIGFkZGVkIHRvIHRoZSBzb2Z0d2FyZSB3aWxsIGhhdmUgbXNnc3RyIGxpbmVzIHdpdGggZW1wdHkKLSAgIHN0cmluZ3MuICBZb3Ugd291bGQgbmVlZCB0byB0cmFuc2xhdGUgdGhlbS4KK09uY2UgeW91IGFyZSBkb25lIHRlc3RpbmcgdGhlIHRyYW5zbGF0aW9uIChzZWUgYmVsb3cpLCBjb21taXQgdGhlIHJlc3VsdAorYW5kIGFzayB0aGUgbDEwbiBjb29yZGluYXRvciB0byBwdWxsIGZyb20geW91LgogCi1UaGUgcG8vZ2l0LWd1aS5wb3QgZmlsZSBpcyB1cGRhdGVkIGJ5IHRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbgotY29vcmRpbmF0b3IgZnJvbSB0aW1lIHRvIHRpbWUuICBZb3UgX2NvdWxkXyB1cGRhdGUgaXQgeW91cnNlbGYsIGJ1dAotdHJhbnNsYXRvcnMgYXJlIGRpc2NvdXJhZ2VkIGZyb20gZG9pbmcgc28gYmVjYXVzZSB3ZSB3b3VsZCB3YW50IGFsbAotbGFuZ3VhZ2UgdGVhbXMgdG8gYmUgd29ya2luZyBvZmYgb2YgdGhlIHNhbWUgdmVyc2lvbiBvZiBnaXQtZ3VpLnBvdC4KIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorVXBkYXRpbmcgYSBYWC5wbyBmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhpcyBzZWN0aW9uIGlzIGEgbm90ZSB0byB0aGUgaW50ZXJuYXRpb25hbGl6YXRpb24gY29vcmRpbmF0b3IsIGFuZAotdHJhbnNsYXRvcnMgZG8gbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgaXQgdG9vIG11Y2guCisoVGhpcyBpcyBkb25lIGJ5IHRoZSBsYW5ndWFnZSB0ZWFtcykuCiAKLVRoZSBtZXNzYWdlIHRlbXBsYXRlIGZpbGUgcG8vZ2l0LWd1aS5wb3QgbmVlZHMgdG8gYmUga2VwdCB1cCB0byBkYXRlCi1yZWxhdGl2ZSB0byB0aGUgc29mdHdhcmUgdGhlIHRyYW5zbGF0aW9ucyBhcHBseSB0bywgYW5kIGl0IGlzIHRoZQotcmVzcG9uc2liaWxpdHkgb2YgdGhlIGludGVybmF0aW9uYWxpemF0aW9uIGNvb3JkaW5hdG9yLgorSWYgeW91IGFyZSByZXBsYWNpbmcgdHJhbnNsYXRpb24gc3RyaW5ncyBpbiBhbiBleGlzdGluZyBYWC5wbyBmaWxlIHRvCitpbXByb3ZlIHRoZSB0cmFuc2xhdGlvbiwganVzdCBlZGl0IHRoZSBmaWxlLgogCi1XaGVuIHVwZGF0aW5nIHBvL2dpdC1ndWkucG90IGZpbGUsIGhvd2V2ZXIsIF9uZXZlcl8gcnVuICJtc2dtZXJnZSAtVQotcG8veHgucG8iIGZvciBpbmRpdmlkdWFsIGxhbmd1YWdlIHRyYW5zbGF0aW9ucywgdW5sZXNzIHlvdSBhcmUgYWJzb2x1dGVseQotc3VyZSB0aGF0IHRoZXJlIGlzIG5vIG91dHN0YW5kaW5nIHdvcmsgb24gdHJhbnNsYXRpb24gZm9yIGxhbmd1YWdlIHh4LgotRG9pbmcgc28gd2lsbCBjcmVhdGUgdW5uZWNlc3NhcnkgbWVyZ2UgY29uZmxpY3RzIGFuZCBmb3JjZSBuZWVkbGVzcwotcmUtdHJhbnNsYXRpb24gb24gdHJhbnNsYXRvcnMuICBUaGUgdHJhbnNsYXRvciBob3dldmVyIG1heSBub3QgaGF2ZSBhY2Nlc3MKLXRvIHRoZSBtc2dtZXJnZSB0b29sLCBpbiB3aGljaCBjYXNlIHRoZSBjb29yZGluYXRvciBtYXkgcnVuIGl0IGZvciB0aGUKLXRyYW5zbGF0b3IgYXMgYSBzZXJ2aWNlLgorSWYgdGhlcmUncyBhbiBleGlzdGluZyBYWC5wbyBmaWxlIGZvciB5b3VyIGxhbmd1YWdlLCBidXQgdGhlIHJlcG9zaXRvcnkKK29mIHRoZSBsMTBuIGNvb3JkaW5hdG9yIGhhcyBuZXdlciBwby9naXQucG90IGZpbGUsIHlvdSB3b3VsZCBuZWVkIHRvIGZpcnN0CitwdWxsIGZyb20gdGhlIGwxMG4gY29vcmRpbmF0b3IgKHNlZSB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZG9jdW1lbnQgZm9yIGl0cworVVJMKSwgYW5kIHRoZW4gdXBkYXRlIHRoZSBleGlzdGluZyB0cmFuc2xhdGlvbiBieSBydW5uaW5nOgogCi1CdXQgbWlzdGFrZXMgZG8gaGFwcGVuLiAgU3VwcG9zZSBhIHRyYW5zbGF0aW9uIHdhcyBiYXNlZCBvbiBhbiBvbGRlcgotdmVyc2lvbiBYLCB0aGUgUE9UIGZpbGUgd2FzIHVwZGF0ZWQgYXQgdmVyc2lvbiBZIGFuZCB0aGVuIG1zZ21lcmdlIHdhcyBydW4KLWF0IHZlcnNpb24gWiBmb3IgdGhlIGxhbmd1YWdlLCBhbmQgdGhlIHRyYW5zbGF0b3Igc2VudCBpbiBhIHBhdGNoIGJhc2VkIG9uCi12ZXJzaW9uIFg6CisgICAgbXNnbWVyZ2UgLS1hZGQtbG9jYXRpb24gLS1iYWNrdXA9b2ZmIC1VIFhYLnBvIGdpdC5wb3QKIAotICAgICAgICAgPyB0cmFuc2xhdGVkCi0gICAgICAgIC8KLSAgICAtLS1YLS0tWS0tLVogKG1hc3RlcikKK2luIHRoZSBwby8gZGlyZWN0b3J5LCB3aGVyZSBYWC5wbyBpcyB0aGUgZmlsZSB5b3Ugd2FudCB0byB1cGRhdGUuCiAKLVRoZSBjb29yZGluYXRvciBjb3VsZCByZWNvdmVyIGZyb20gc3VjaCBhIG1pc3Rha2UgYnkgZmlyc3QgYXBwbHlpbmcgdGhlCi1wYXRjaCB0byBYLCByZXBsYWNlIHRoZSB0cmFuc2xhdGVkIGZpbGUgaW4gWiwgYW5kIHRoZW4gcnVubmluZyBtc2dtZXJnZQotYWdhaW4gYmFzZWQgb24gdGhlIHVwZGF0ZWQgUE9UIGZpbGUgYW5kIGNvbW1pdCB0aGUgcmVzdWx0LiAgVGhlIHNlcXVlbmNlCi13b3VsZCBsb29rIGxpa2UgdGhpczoKK09uY2UgeW91IGFyZSBkb25lIHRlc3RpbmcgdGhlIHRyYW5zbGF0aW9uIChzZWUgYmVsb3cpLCBjb21taXQgdGhlIHJlc3VsdAorYW5kIGFzayB0aGUgbDEwbiBjb29yZGluYXRvciB0byBwdWxsIGZyb20geW91LgogCi0gICAgJCBnaXQgY2hlY2tvdXQgWAotICAgICQgZ2l0IGFtIC1zIHh4LnBhdGNoCi0gICAgJCBnaXQgY2hlY2tvdXQgbWFzdGVyCi0gICAgJCBnaXQgY2hlY2tvdXQgSEVBREB7MX0gcG8veHgucG8KLSAgICAkIG1zZ21lcmdlIC1VIHBvL3h4LnBvIHBvL2dpdC1ndWkucG90Ci0gICAgJCBnaXQgY29tbWl0IC1jIEhFQURAezF9IHBvL3h4LnBvCiAKLVN0YXRlIGluIHRoZSBtZXNzYWdlIHRoYXQgdGhlIHRyYW5zbGF0ZWQgbWVzc2FnZXMgYXJlIGJhc2VkIG9uIGEgc2xpZ2h0bHkKLW9sZGVyIHZlcnNpb24sIGFuZCBtc2dtZXJnZSB3YXMgcnVuIHRvIGluY29ycG9yYXRlIGNoYW5nZXMgdG8gbWVzc2FnZQotdGVtcGxhdGVzIGZyb20gdGhlIHVwZGF0ZWQgUE9UIGZpbGUuICBUaGUgcmVzdWx0IG5lZWRzIHRvIGJlIGZ1cnRoZXIKLXRyYW5zbGF0ZWQsIGJ1dCBhdCBsZWFzdCB0aGUgbWVzc2FnZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgYnkgdGhlIHBhdGNoIHRoYXQKLXdlcmUgbm90IGNoYW5nZWQgYnkgdGhlIFBPVCB1cGRhdGUgd2lsbCBzdXJ2aXZlIHRoZSBwcm9jZXNzIGFuZCBkbyBub3QKLW5lZWQgdG8gYmUgcmUtdHJhbnNsYXRlZC4KK1Rlc3RpbmcgeW91ciBjaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoVGhpcyBpcyBkb25lIGJ5IHRoZSBsYW5ndWFnZSB0ZWFtcywgYWZ0ZXIgY3JlYXRpbmcgb3IgdXBkYXRpbmcgWFgucG8gZmlsZSkuCisKK0JlZm9yZSB5b3Ugc3VibWl0IHlvdXIgY2hhbmdlcyBnbyBiYWNrIHRvIHRoZSB0b3AtbGV2ZWwgYW5kIGRvOgorCisgICAgbWFrZQorCitPbiBzeXN0ZW1zIHdpdGggR05VIGdldHRleHQgKGkuZS4gbm90IFNvbGFyaXMpIHRoaXMgd2lsbCBjb21waWxlIHlvdXIKK2NoYW5nZWQgUE8gZmlsZSB3aXRoIGBtc2dmbXQgLS1jaGVja2AsIHRoZSAtLWNoZWNrIG9wdGlvbiBmbGFncyBtYW55Citjb21tb24gZXJyb3JzLCBlLmcuIG1pc3NpbmcgcHJpbnRmIGZvcm1hdCBzdHJpbmdzLCBvciB0cmFuc2xhdGVkCittZXNzYWdlcyB0aGF0IGRldmlhdGUgZnJvbSB0aGUgb3JpZ2luYWxzIGluIHdoZXRoZXIgdGhleSBiZWdpbi9lbmQKK3dpdGggYSBuZXdsaW5lIG9yIG5vdC4KKworCitNYXJraW5nIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhUaGlzIGlzIGRvbmUgYnkgdGhlIGNvcmUgZGV2ZWxvcGVycykuCisKK0JlZm9yZSBzdHJpbmdzIGNhbiBiZSB0cmFuc2xhdGVkIHRoZXkgZmlyc3QgaGF2ZSB0byBiZSBtYXJrZWQgZm9yCit0cmFuc2xhdGlvbi4KKworR2l0IHVzZXMgYW4gaW50ZXJuYXRpb25hbGl6YXRpb24gaW50ZXJmYWNlIHRoYXQgd3JhcHMgdGhlIHN5c3RlbSdzCitnZXR0ZXh0IGxpYnJhcnksIHNvIG1vc3Qgb2YgdGhlIGFkdmljZSBpbiB5b3VyIGdldHRleHQgZG9jdW1lbnRhdGlvbgorKG9uIEdOVSBzeXN0ZW1zIGBpbmZvIGdldHRleHRgIGluIGEgdGVybWluYWwpIGFwcGxpZXMuCisKK0dlbmVyYWwgYWR2aWNlOgorCisgLSBEb24ndCBtYXJrIGV2ZXJ5dGhpbmcgZm9yIHRyYW5zbGF0aW9uLCBvbmx5IHN0cmluZ3Mgd2hpY2ggd2lsbCBiZQorICAgcmVhZCBieSBodW1hbnMgKHRoZSBwb3JjZWxhaW4gaW50ZXJmYWNlKSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KKworICAgVGhlIG91dHB1dCBmcm9tIEdpdCdzIHBsdW1iaW5nIHV0aWxpdGllcyB3aWxsIHByaW1hcmlseSBiZSByZWFkIGJ5CisgICBwcm9ncmFtcyBhbmQgd291bGQgYnJlYWsgc2NyaXB0cyB1bmRlciBub24tQyBsb2NhbGVzIGlmIGl0IHdhcworICAgdHJhbnNsYXRlZC4gUGx1bWJpbmcgc3RyaW5ncyBzaG91bGQgbm90IGJlIHRyYW5zbGF0ZWQsIHNpbmNlCisgICB0aGV5J3JlIHBhcnQgb2YgR2l0J3MgQVBJLgorCisgLSBBZGp1c3QgdGhlIHN0cmluZ3Mgc28gdGhhdCB0aGV5J3JlIGVhc3kgdG8gdHJhbnNsYXRlLiBNb3N0IG9mIHRoZQorICAgYWR2aWNlIGluIGBpbmZvICcoZ2V0dGV4dClQcmVwYXJpbmcgU3RyaW5ncydgIGFwcGxpZXMgaGVyZS4KKworIC0gSWYgc29tZXRoaW5nIGlzIHVuY2xlYXIgb3IgYW1iaWd1b3VzIHlvdSBjYW4gdXNlIGEgIlRSQU5TTEFUT1JTIgorICAgY29tbWVudCB0byB0ZWxsIHRoZSB0cmFuc2xhdG9ycyB3aGF0IHRvIG1ha2Ugb2YgaXQuIFRoZXNlIHdpbGwgYmUKKyAgIGV4dHJhY3RlZCBieSB4Z2V0dGV4dCgxKSBhbmQgcHV0IGluIHRoZSBwby8qLnBvIGZpbGVzLCBlLmcuIGZyb20KKyAgIGdpdC1hbS5zaDoKKworICAgICAgICMgVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisgICAgICAgIyBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyAgICAgICAjIGlucHV0IGF0IHRoaXMgcG9pbnQuCisgICAgICAgZ2V0dGV4dCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorCisgICBPciBpbiBDLCBmcm9tIGJ1aWx0aW4vcmV2ZXJ0LmM6CisKKyAgICAgICAvKiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2siICovCisgICAgICAgZGllKF8oIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSwgYWN0aW9uX25hbWUob3B0cykpOworCitXZSBwcm92aWRlIHdyYXBwZXJzIGZvciBDLCBTaGVsbCBhbmQgUGVybCBwcm9ncmFtcy4gSGVyZSdzIGhvdyB0aGV5J3JlCit1c2VkOgorCitDOgorCisgLSBJbmNsdWRlIGJ1aWx0aW4uaCBhdCB0aGUgdG9wLCBpdCdsbCBwdWxsIGluIGdldHRleHQuaCwgd2hpY2gKKyAgIGRlZmluZXMgdGhlIGdldHRleHQgaW50ZXJmYWNlLiBDb25zdWx0IHdpdGggdGhlIGxpc3QgaWYgeW91IG5lZWQgdG8KKyAgIHVzZSBnZXR0ZXh0LmggZGlyZWN0bHkuCisKKyAtIFRoZSBDIGludGVyZmFjZSBpcyBhIHN1YnNldCBvZiB0aGUgbm9ybWFsIEdOVSBnZXR0ZXh0CisgICBpbnRlcmZhY2UuIFdlIGN1cnJlbnRseSBleHBvcnQgdGhlc2UgZnVuY3Rpb25zOgorCisgICAtIF8oKQorCisgICAgTWFyayBhbmQgdHJhbnNsYXRlIGEgc3RyaW5nLiBFLmcuOgorCisgICAgICAgIHByaW50ZihfKCJIRUFEIGlzIG5vdyBhdCAlcyIpLCBoZXgpOworCisgICAtIFFfKCkKKworICAgIE1hcmsgYW5kIHRyYW5zbGF0ZSBhIHBsdXJhbCBzdHJpbmcuIEUuZy46CisKKyAgICAgICAgcHJpbnRmKFFfKCIlZCBjb21taXQiLCAiJWQgY29tbWl0cyIsIG51bWJlcl9vZl9jb21taXRzKSk7CisKKyAgICBUaGlzIGlzIGp1c3QgYSB3cmFwcGVyIGZvciB0aGUgbmdldHRleHQoKSBmdW5jdGlvbi4KKworICAgLSBOXygpCisKKyAgICBBIG5vLW9wIHBhc3MtdGhyb3VnaCBtYWNybyBmb3IgbWFya2luZyBzdHJpbmdzIGluc2lkZSBzdGF0aWMKKyAgICBpbml0aWFsaXphdGlvbnMsIGUuZy46CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKnJlc2V0X3R5cGVfbmFtZXNbXSA9IHsKKyAgICAgICAgICAgIE5fKCJtaXhlZCIpLCBOXygic29mdCIpLCBOXygiaGFyZCIpLCBOXygibWVyZ2UiKSwgTl8oImtlZXAiKSwgTlVMTAorICAgICAgICB9OworCisgICAgQW5kIHRoZW4sIGxhdGVyOgorCisgICAgICAgIGRpZShfKCIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIpLAorICAgICAgICAgICAgICAgXyhyZXNldF90eXBlX25hbWVzW3Jlc2V0X3R5cGVdKSk7CisKKyAgICBIZXJlIF8oKSBjb3VsZG4ndCBoYXZlIHN0YXRpY2FsbHkgZGV0ZXJtaW5lZCB3aGF0IHRoZSB0cmFuc2xhdGlvbgorICAgIHN0cmluZyB3aWxsIGJlLCBidXQgc2luY2UgaXQgd2FzIGFscmVhZHkgbWFya2VkIGZvciB0cmFuc2xhdGlvbgorICAgIHdpdGggTl8oKSB0aGUgbG9vay11cCBpbiB0aGUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgc3VjY2VlZC4KKworU2hlbGw6CisKKyAtIFRoZSBHaXQgZ2V0dGV4dCBzaGVsbCBpbnRlcmZhY2UgaXMganVzdCBhIHdyYXBwZXIgZm9yCisgICBnZXR0ZXh0LnNoLiBJbXBvcnQgaXQgcmlnaHQgYWZ0ZXIgZ2l0LXNoLXNldHVwIGxpa2UgdGhpczoKKworICAgICAgIC4gZ2l0LXNoLXNldHVwCisgICAgICAgLiBnaXQtc2gtaTE4bgorCisgICBBbmQgdGhlbiB1c2UgdGhlIGdldHRleHQgb3IgZXZhbF9nZXR0ZXh0IGZ1bmN0aW9uczoKKworICAgICAgICMgRm9yIGNvbnN0YW50IGludGVyZmFjZSBtZXNzYWdlczoKKyAgICAgICBnZXR0ZXh0ICJBIG1lc3NhZ2UgZm9yIHRoZSB1c2VyIjsgZWNobworCisgICAgICAgIyBUbyBpbnRlcnBvbGF0ZSB2YXJpYWJsZXM6CisgICAgICAgZGV0YWlscz0ib2ggbm9lcyIKKyAgICAgICBldmFsX2dldHRleHQgIkFuIGVycm9yIG9jY3VyZWQ6IFwkZGV0YWlscyI7IGVjaG8KKworICAgSW4gYWRkaXRpb24gd2UgaGF2ZSB3cmFwcGVycyBmb3IgbWVzc2FnZXMgdGhhdCBlbmQgd2l0aCBhIHRyYWlsaW5nCisgICBuZXdsaW5lLiBJLmUuIHlvdSBjb3VsZCB3cml0ZSB0aGUgYWJvdmUgYXM6CisKKyAgICAgICAjIEZvciBjb25zdGFudCBpbnRlcmZhY2UgbWVzc2FnZXM6CisgICAgICAgZ2V0dGV4dGxuICJBIG1lc3NhZ2UgZm9yIHRoZSB1c2VyIgorCisgICAgICAgIyBUbyBpbnRlcnBvbGF0ZSB2YXJpYWJsZXM6CisgICAgICAgZGV0YWlscz0ib2ggbm9lcyIKKyAgICAgICBldmFsX2dldHRleHRsbiAiQW4gZXJyb3Igb2NjdXJlZDogXCRkZXRhaWxzIgorCisgICBNb3JlIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGludGVyZmFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIEdOVSBpbmZvCisgICBwYWdlOiBgaW5mbyAnKGdldHRleHQpc2gnYC4gTG9va2luZyBhdCBnaXQtYW0uc2ggKHRoZSBmaXJzdCBzaGVsbAorICAgY29tbWFuZCB0byBiZSB0cmFuc2xhdGVkKSBmb3IgZXhhbXBsZXMgaXMgYWxzbyB1c2VmdWw6CisKKyAgICAgICBnaXQgbG9nIC0tcmV2ZXJzZSAtcCAtLWdyZXA9aTE4biBnaXQtYW0uc2gKKworUGVybDoKKworIC0gVGhlIEdpdDo6STE4TiBtb2R1bGUgcHJvdmlkZXMgYSBsaW1pdGVkIHN1YnNldCBvZiB0aGUKKyAgIExvY2FsZTo6TWVzc2FnZXMgZnVuY3Rpb25hbGl0eSwgZS5nLjoKKworICAgICAgIHVzZSBHaXQ6OkkxOE47CisgICAgICAgcHJpbnQgX18oIldlbGNvbWUgdG8gR2l0IVxuIik7CisgICAgICAgcHJpbnRmIF9fKCJUaGUgZm9sbG93aW5nIGVycm9yIG9jY3VyZWQ6ICVzXG4iKSwgJGVycm9yOworCisgICBSdW4gYHBlcmxkb2MgcGVybC9HaXQvSTE4Ti5wbWAgZm9yIG1vcmUgaW5mby4KKworCitUZXN0aW5nIG1hcmtlZCBzdHJpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V2ZW4gaWYgeW91J3ZlIGNvcnJlY3RseSBtYXJrZWQgcG9yY2VsYWluIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uCitzb21ldGhpbmcgaW4gdGhlIHRlc3Qgc3VpdGUgbWlnaHQgc3RpbGwgZGVwZW5kIG9uIHRoZSBVUyBFbmdsaXNoCit2ZXJzaW9uIG9mIHRoZSBzdHJpbmdzLCBlLmcuIHRvIGdyZXAgc29tZSBlcnJvciBtZXNzYWdlIG9yIG90aGVyCitvdXRwdXQuCisKK1RvIHNtb2tlIG91dCBpc3N1ZXMgbGlrZSB0aGVzZSBHaXQgY2FuIGJlIGNvbXBpbGVkIHdpdGggZ2V0dGV4dCBwb2lzb24KK3N1cHBvcnQsIGF0IHRoZSB0b3AtbGV2ZWw6CisKKyAgICBtYWtlIEdFVFRFWFRfUE9JU09OPVllc1BsZWFzZQorCitUaGF0J2xsIGdpdmUgeW91IGEgZ2l0IHdoaWNoIGVtaXRzIGdpYmJlcmlzaCBvbiBldmVyeSBjYWxsIHRvCitnZXR0ZXh0LiBJdCdzIG9idmlvdXNseSBub3QgbWVhbnQgdG8gYmUgaW5zdGFsbGVkLCBidXQgeW91IHNob3VsZCBydW4KK3RoZSB0ZXN0IHN1aXRlIHdpdGggaXQ6CisKKyAgICBjZCB0ICYmIHByb3ZlIC1qIDkgLi90WzAtOV0qLnNoCisKK0lmIHRlc3RzIGJyZWFrIHdpdGggaXQgeW91IHNob3VsZCBpbnNwZWN0IHRoZW0gbWFudWFsbHkgYW5kIHNlZSBpZgord2hhdCB5b3UncmUgdHJhbnNsYXRpbmcgaXMgc2FuZSwgaS5lLiB0aGF0IHlvdSdyZSBub3QgdHJhbnNsYXRpbmcKK3BsdW1iaW5nIG91dHB1dC4KKworSWYgbm90IHlvdSBzaG91bGQgcmVwbGFjZSBjYWxscyB0byBncmVwIHdpdGggdGVzdF9pMThuZ3JlcCwgb3IKK3Rlc3RfY21wIGNhbGxzIHdpdGggdGVzdF9pMThuY21wLiBJZiB0aGF0J3Mgbm90IGVub3VnaCB5b3UgY2FuIHNraXAKK3RoZSB3aG9sZSB0ZXN0IGJ5IG1ha2luZyBpdCBkZXBlbmQgb24gdGhlIENfTE9DQUxFX09VVFBVVAorcHJlcmVxdWlzaXRlLiBTZWUgZXhpc3RpbmcgdGVzdCBmaWxlcyB3aXRoIHRoaXMgcHJlcmVxdWlzaXRlIGZvcgorZXhhbXBsZXMuCmRpZmYgLS1naXQgYS9wby9URUFNUyBiL3BvL1RFQU1TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOWU5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9URUFNUwpAQCAtMCwwICsxLDQ4IEBACitDb3JlIEdpdCB0cmFuc2xhdGlvbiBsYW5ndWFnZSB0ZWFtcworKHBsZWFzZSBrZWVwIHRoZSBsaXN0IHNvcnRlZCBhbHBoYWJldGljYWxseSBvbiBsYW5ndWFnZSBmaWVsZCkKKworTGFuZ3VhZ2U6CWRhIChEYW5pc2gpCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vZ2l0LWRhL2dpdC1wby8KK0xlYWRlcjoJCUJ5cmlhbCBKZW5zZW4gPGJ5cmlhbEB2aXAuY3liZXJjaXR5LmRrPgorCitMYW5ndWFnZToJZGUgKEdlcm1hbikKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9yYWxmdGgvZ2l0LXBvLWRlCitMZWFkZXI6CQlSYWxmIFRoaWVsb3cgPHJhbGYudGhpZWxvd0Bnb29nbGVtYWlsLmNvbT4KK01lbWJlcnM6CVRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CisJCUphbiBLcsO8Z2VyIDxqa0Bqay5ncz4KKwkJQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPgorCitMYW5ndWFnZToJaXMgKEljZWxhbmRpYykKK0xlYWRlcjoJCcOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uIDxhdmFyYWJAZ21haWwuY29tPgorCitMYW5ndWFnZToJaXQgKEl0YWxpYW4pCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vcXVpenpsby9naXQtcG8taXQvCitMZWFkZXI6CQlNYXJjbyBQYW9sb25lIDxtYXJjb3Bhb2xvbmUgQVQgZ21haWwuY29tPgorTWVtYmVyczoJU3RlZmFubyBMYXR0YXJpbmkgPHN0ZWZhbm8ubGF0dGFyaW5pIEFUIGdtYWlsLmNvbT4KKworTGFuZ3VhZ2U6CW5sIChEdXRjaCkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS92ZnItbmwvZ2l0LXBvLworTGVhZGVyOgkJVmluY2VudCB2YW4gUmF2ZXN0ZWlqbiA8dmZyQGx5eC5vcmc+CisKK0xhbmd1YWdlOglwdF9QVCAoUG9ydHVndWVzZSAtIFBvcnR1Z2FsKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL21hcmNvbXNvdXNhL2dpdC1sMTBuLXB0X1BULworTGVhZGVyOgkJTWFyY28gU291c2EgPG1hcmNvbXNvdXNhIEFUIGdtYWlsLmNvbT4KKworTGFuZ3VhZ2U6CXN2IChTd2VkaXNoKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL25hZm1vL2dpdC1sMTBuLXN2LworTGVhZGVyOgkJUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+CisKK0xhbmd1YWdlOgl2aSAoVmlldG5hbWVzZSkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS92bndpbGRtYW4vZ2l0LworTGVhZGVyOgkJVHLhuqduIE5n4buNYyBRdcOibiA8dm53aWxkbWFuIEFUIGdtYWlsLmNvbT4KK01lbWJlcnM6CU5ndXnhu4VuIFRow6FpIE5n4buNYyBEdXkgPHBjbG91ZHMgQVQgZ21haWwuY29tPgorCitMYW5ndWFnZToJemhfQ04gKFNpbXBsaWZpZWQgQ2hpbmVzZSkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9nb3RnaXQvZ2l0LXBvLXpoX0NOLworTGVhZGVyOgkJSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldEBnbWFpbC5jb20+CitNZW1iZXJzOglSaWt1IDxsdS5yaWt1IEFUIGdtYWlsLmNvbT4KKwkJWmh1YW5nIFlhIDx6aHVhbmd5YSBBVCBtZS5jb20+CisJCUxpYW4gQ2hlbmcgPHJoeXRobS5tYWlsIEFUIGdtYWlsLmNvbT4KKwkJWWljaGFvIFl1IDx5eWMxOTkyIEFUIGdtYWlsLmNvbT4KKwkJd3MzMzg5IDx3aWxsc21pdGgzMzg5IEFUIGdtYWlsLmNvbT4KKwkJVGh5bnNvbiA8bGFueGluZ2NhbiBBVCBnbWFpbC5jb20+CmRpZmYgLS1naXQgYS9wby9kYS5wbyBiL3BvL2RhLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYTg4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9wby9kYS5wbwpAQCAtMCwwICsxLDM1MDMgQEAKKyMgRGFuaXNoIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUEFDS0FHRSBwYWNrYWdlLgorIyBCeXJpYWwgSmVuc2VuIDxieXJpYWxAdmlwLmN5YmVyY2l0eS5kaz4sIDIwMTIuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0wMy0xNiAyMDoxOCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMi0wNC0xMCAxODo0MSswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBCeXJpYWwgSmVuc2VuIDxieXJpYWxAdmlwLmN5YmVyY2l0eS5kaz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBEYW5pc2ggPGRhbnNrQGRhbnNrLWdydXBwZW4uZGs+XG4iCisiTGFuZ3VhZ2U6IGRhXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGFkdmljZS5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAiIgorCisjLgorIy4gKiBNZXNzYWdlIHVzZWQgYm90aCB3aGVuICdnaXQgY29tbWl0JyBmYWlscyBhbmQgd2hlbgorIy4gKiBvdGhlciBjb21tYW5kcyBkb2luZyBhIG1lcmdlIGRvLgorIy4KKyM6IGFkdmljZS5jOjY0Cittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsXG4iCisiYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPicgYXNcbiIKKyJhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQsXG4iCisib3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjM5Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0ZWQuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclLipzJ1xuIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclLipzJ1xuIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjEzMzYKK21zZ2lkICIgMCBmaWxlcyBjaGFuZ2VkXG4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVkIGZpbGUgY2hhbmdlZCIKK21zZ2lkX3BsdXJhbCAiICVkIGZpbGVzIGNoYW5nZWQiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkaWZmLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICIsICVkIGluc2VydGlvbigrKSIKK21zZ2lkX3BsdXJhbCAiLCAlZCBpbnNlcnRpb25zKCspIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGlmZi5jOjEzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAlZCBkZWxldGlvbigtKSIKK21zZ2lkX3BsdXJhbCAiLCAlZCBkZWxldGlvbnMoLSkiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkaWZmLmM6MzQyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo1OQorbXNnaWQgImNvdWxkIG5vdCBydW4gZ3BnLiIKK21zZ3N0ciAiIgorCisjOiBncGctaW50ZXJmYWNlLmM6NzEKK21zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCittc2dzdHIgIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjgyCittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoxMjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoxMjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQgJXMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogcmVtb3RlLmM6MTYxMworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogcmVtb3RlLmM6MTYyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMjAgYnVpbHRpbi9tZXJnZS5jOjg2NCBidWlsdGluL21lcmdlLmM6OTg1CisjOiBidWlsdGluL21lcmdlLmM6MTA5NSBidWlsdGluL21lcmdlLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEyMiBidWlsdGluL21lcmdlLmM6MzM0IGJ1aWx0aW4vbWVyZ2UuYzo4NjcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDk3IGJ1aWx0aW4vbWVyZ2UuYzoxMTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE0MworbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE0NgorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE1OSBzZXF1ZW5jZXIuYzo2ODUgc2VxdWVuY2VyLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTc3Cittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNzkKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgcmV2ZXJ0LiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxODIKK21zZ2lkICJDb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIgb3IgImNoZXJyeS1waWNrIgorIzogc2VxdWVuY2VyLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjk4Cittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMDEKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFpbmxpbmUgd2FzIHNwZWNpZmllZCBidXQgY29tbWl0ICVzIGlzIG5vdCBhIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKyMuICJjaGVycnktcGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExCisjOiBzZXF1ZW5jZXIuYzozMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ1MCBzZXF1ZW5jZXIuYzo5MDkgYnVpbHRpbi9sb2cuYzoyODggYnVpbHRpbi9sb2cuYzo3MTMKKyM6IGJ1aWx0aW4vbG9nLmM6MTMyOSBidWlsdGluL2xvZy5jOjE1NDggYnVpbHRpbi9tZXJnZS5jOjM0OAorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE4MQorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ1MworbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjU3OAorbXNnaWQgIk5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjYzMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGtleTogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjY2NgorbXNnaWQgImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjY3Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjY4NyBzZXF1ZW5jZXIuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjcwNiBzZXF1ZW5jZXIuYzo4NDAKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzA4Cittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MTAKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjczNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzM2Cittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZm9ybWF0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo5MjcKK21zZ2lkICJDYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6OTI4Cittc2dpZCAiQ2FuJ3QgY2hlcnJ5LXBpY2sgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzNAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDAgd3Qtc3RhdHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDIgd3Qtc3RhdHVzLmM6MTU5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNTEKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTY5Cittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3MworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NQorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NgorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzgKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZpbGVzOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjA3Cittc2dpZCAiYnVnIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIxMgorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjEzCittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIxNAorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjE1Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjE2Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjE3Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjE4Cittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjQ4Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNTAKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjUyCittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGU6ICAgJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcGllZDogICAgICVzIC0+ICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkOiAgICAlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kaWZpZWQ6ICAgJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtZWQ6ICAgICVzIC0+ICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlY2hhbmdlOiAlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93bjogICAgJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVubWVyZ2VkOiAgICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJidWc6IHVuaGFuZGxlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3MTMKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjcyMAorbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzMxCittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzQ1Cittc2dpZCAiVW50cmFja2VkIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc0NworbXNnaWQgIklnbm9yZWQiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzUxCittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3NTcKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCVzXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzYzCittc2dpZCAiICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50JXNcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3NjcKK21zZ2lkICIgKHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzY5IHd0LXN0YXR1cy5jOjc3MiB3dC1zdGF0dXMuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQlc1xuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc3MAorbXNnaWQgIiAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzczCittc2dpZCAiICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc3NgorbXNnaWQgIiAod29ya2luZyBkaXJlY3RvcnkgY2xlYW4pIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjg4NAorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODkwCittc2dpZCAiSW5pdGlhbCBjb21taXQgb24gIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjkwNQorbXNnaWQgImJlaGluZCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6OTA4IHd0LXN0YXR1cy5jOjkxMQorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo5MTMKK21zZ2lkICIsIGJlaGluZCAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NjcgYnVpbHRpbi9jb21taXQuYzoyOTgKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGggJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTkyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTUgYnVpbHRpbi9hZGQuYzo0NTYgYnVpbHRpbi9ybS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI3NgorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI5MAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk3Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozNTMKK21zZ2lkICJubyBmaWxlcyBhZGRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM1OQorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozOTEKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM5MworbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MjAgYnVpbHRpbi9jbGVhbi5jOjk1IGJ1aWx0aW4vY29tbWl0LmM6MzU4IGJ1aWx0aW4vbXYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjE2MgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQ3NiBidWlsdGluL212LmM6MjI5IGJ1aWx0aW4vcm0uYzoyNjAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjU4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBFT0YiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NgorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo3MQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgInJlbW90ZSAiIGluICJyZW1vdGUgYnJhbmNoICclcycgbm90IGZvdW5kIgorIzogYnVpbHRpbi9icmFuY2guYzoxNjMKK21zZ2lkICJyZW1vdGUgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcxCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc3Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGJyYW5jaCAnJXMnIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlc2JyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyAlc2JyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgJXNicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjQKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJlaGluZCAlZF0gIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkXSAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQsIGJlaGluZCAlZF0gIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAxCittc2dpZCAiKG5vIGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjYKK21zZ2lkICJzb21lIHJlZnMgY291bGQgbm90IGJlIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NzkKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjA0Cittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOQorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc0NgorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUxIGJ1aWx0aW4vY2xvbmUuYzo1NTgKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwOQorbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo1NgorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2MAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNSBidWlsdGluL2NoZWNrb3V0LmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjEyIGJ1aWx0aW4vcmVzZXQuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjM0IGJ1aWx0aW4vY2hlY2tvdXQuYzozOTIKK21zZ2lkICJjb3JydXB0IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2NCBidWlsdGluL2NoZWNrb3V0LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzAyIGJ1aWx0aW4vY2hlY2tvdXQuYzo0OTggYnVpbHRpbi9jbG9uZS5jOjU4MworIzogYnVpbHRpbi9tZXJnZS5jOjgxMQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzE5IGJ1aWx0aW4vZGlmZi5jOjMwMiBidWlsdGluL21lcmdlLmM6NDA4Cittc2dpZCAiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDE0Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NjUKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIiCisKKyMuIFRoZSBzaW5ndWxhciB2ZXJzaW9uCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIG5ld19icmFuY2hfbmFtZSAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2OTIKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2OTYKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzIyCittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiIgorCisjLiBjYXNlICgxKQorIzogYnVpbHRpbi9jaGVja291dC5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIiIKKworIy4gY2FzZSAoMSk6IHdhbnQgYSB0cmVlCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTcyCittc2dpZCAiLUIgY2Fubm90IGJlIHVzZWQgd2l0aCAtYiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTgxCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg0Cittc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtYi8tQi8tLW9ycGhhbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg2Cittc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTkyCittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5OTkKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDUKK21zZ2lkICItLW9ycGhhbiBhbmQgLWJ8LUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwNworbXNnaWQgIi0tb3JwaGFuIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTcKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC1mIGFuZCAtbSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUxCittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBjaGVja291dDogdXBkYXRpbmcgcGF0aHMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLlxuIgorIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDYxCittc2dpZCAiZ2l0IGNoZWNrb3V0OiB1cGRhdGluZyBwYXRocyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDY2Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA2OQorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA4OAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwOTEKK21zZ2lkICItLW91cnMvLS10aGVpcnMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzgKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgyCittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTU1IGJ1aWx0aW4vY2xlYW4uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE1OSBidWlsdGluL2NsZWFuLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2MiBidWlsdGluL2NsZWFuLmM6MTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBub3QgcmVtb3ZlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgcmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDggYnVpbHRpbi9kaWZmLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NDkKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjYzOQorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0MworbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjczCittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDYgYnVpbHRpbi9jbG9uZS5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0MgorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MgorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTkKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKyJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjIwNSBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjIwOAorbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzI1Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY3Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzMKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDA2IGJ1aWx0aW4vY29tbWl0LmM6NDI3IGJ1aWx0aW4vY29tbWl0LmM6NDczCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2NgorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU1MCBidWlsdGluL2NvbW1pdC5jOjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NzkKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpZGVudCBzdHJpbmc6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NzAgYnVpbHRpbi9jb21taXQuYzo3MDMgYnVpbHRpbi9jb21taXQuYzoxMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjgyIGJ1aWx0aW4vc2hvcnRsb2cuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4NAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2OTQKK21zZ2lkICJjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3MAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgJXMuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzk2Cittc2dpZCAiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc5OQorbXNnaWQgIiIKKyIgTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODA0Cittc2dpZCAiIgorIiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDMKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg4MAorbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODk1IGJ1aWx0aW4vdGFnLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBleGlzdGluZyBhdXRob3IgZm91bmQgd2l0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTkwIGJ1aWx0aW4vY29tbWl0LmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDMwCittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNDEKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgJXMgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNDUKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NQorbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NworbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi8tLWZpeHVwLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjMKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4MAorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODIKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDg0Cittc2dpZCAiQ2xldmVyLi4uIGFtZW5kaW5nIHRoZSBsYXN0IG9uZSB3aXRoIGRpcnR5IGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODYKK21zZ2lkICJFeHBsaWNpdCBwYXRocyBzcGVjaWZpZWQgd2l0aG91dCAtaSBub3IgLW87IGFzc3VtaW5nIC0tb25seSBwYXRocy4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwOTYgYnVpbHRpbi90YWcuYzo1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTAxCittc2dpZCAiUGF0aHMgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyODAKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTI4MgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjMKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNQorbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQxNQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTIgYnVpbHRpbi9tZXJnZS5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ2NgorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTQgYnVpbHRpbi9tZXJnZS5jOjkzNSBidWlsdGluL21lcmdlLmM6OTY4Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM1Cittc2dpZCAiY2Fubm90IGxvY2sgSEVBRCByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM5Cittc2dpZCAiY2Fubm90IHVwZGF0ZSBIRUFEIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NTAKK21zZ2lkICIiCisiUmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBvciBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VhcmNoaW5nIHRvIGRlc2NyaWJlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzYKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDYyCittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ4MgorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0dGlzaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6Mjk3Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gJWQgdHJlZXMgZ2l2ZW46ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMAorbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjU4Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiISAlLSpzICUtKnMgLT4gJXMgIChjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI3MyBidWlsdGluL2ZldGNoLmM6MzUxCittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mjg0Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyODYgYnVpbHRpbi9mZXRjaC5jOjMxMyBidWlsdGluL2ZldGNoLmM6MzMxCittc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyOTgKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwMgorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzQ3Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM0NworbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1MworbXNnaWQgIihub24tZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mzg0IGJ1aWx0aW4vZmV0Y2guYzo2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZylcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTQ4Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NDkKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY2NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg5OAorbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTgKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NzAKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTcyCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTkxCittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo3OAorbXNnaWQgIlRvbyBtYW55IG9wdGlvbnMgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBvYmplY3QgZGlyZWN0b3J5ICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLiBZb3UgbWF5IGFsc29cbiIKKyJydW4gXCJnaXQgZ2NcIiBtYW51YWxseS4gU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6MjU2Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjaGRpcjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NDc4IGJ1aWx0aW4vZ3JlcC5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg4Cittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTQzCittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk2NgorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTcxCittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk3NAorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5ODIKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBwYXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgb2YgYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMyMiBidWlsdGluL2luaXQtZGIuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBnaXQgbGluayAlcyIKK21zZ3N0ciAiIgorCisjLgorIy4gKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisjLiAqIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gKiAiIiwgYW5kIHRoZSBsYXN0ICclcyVzJyBpcyB0aGUgdmVyYmF0aW0gZGlyZWN0b3J5IG5hbWUuCisjLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIwCittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIxCittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NDAKK21zZ2lkICJjYW5ub3QgdGVsbCBjd2QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTIxIGJ1aWx0aW4vaW5pdC1kYi5jOjUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NzgKK21zZ2lkICJDYW5ub3QgYWNjZXNzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6Mzk1IGJ1aWx0aW4vbG9nLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHR5cGU6ICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTk2Cittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjY2OQorbXNnaWQgIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6Njk0Cittc2dpZCAiTmVlZCBleGFjdGx5IG9uZSByYW5nZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo3MDIKK21zZ2lkICJOb3QgYSByYW5nZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo3MzkKK21zZ2lkICJDb3VsZCBub3QgZXh0cmFjdCBlbWFpbCBmcm9tIGNvbW1pdHRlciBpZGVudGl0eS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo3ODUKK21zZ2lkICJDb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODc5CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKK21zZ2lkICJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29tbWl0dGVyIGluZm8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE4Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMAorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXggYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyNSBidWlsdGluL3Nob3J0bG9nLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzAKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjMyCittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQxMAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTMwIGJ1aWx0aW4vbG9nLmM6MTUzMiBidWlsdGluL2xvZy5jOjE1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkxCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQxCittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NgorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MCBidWlsdGluL21lcmdlLmM6Mjg3Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzE3Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM2MgorbXNnaWQgIldyaXRpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzY0Cittc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NjI5Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Njc5Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2OTYKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDkKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODkxCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkxNQorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDU3Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDU5Cittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDYxCittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZSB0cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExODgKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMDQgZ2l0LXB1bGwuc2g6MzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIwNyBnaXQtcHVsbC5zaDozNAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIxMQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjE0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjIzCittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMjgKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1uby1mZiB3aXRoIC0tZmYtb25seS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzUKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI2NgorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNjkKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3MQorbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjc1IGJ1aWx0aW4vbWVyZ2UuYzoxMzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2MgorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4NSBidWlsdGluL21lcmdlLmM6MTU2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU1MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTIKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTUKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTgKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoPyAlLipzIGlzIGluIGluZGV4PyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTQwCittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTcxCittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTczCittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTg0Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTg3Cittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTQ1Cittc2dpZCAiY2FuJ3QgZmRvcGVuICdzaG93JyBvdXRwdXQgZmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNzUgYnVpbHRpbi90YWcuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE4OQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjEwIGJ1aWx0aW4vbm90ZXMuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIxNQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBub3RlIGNvbnRlbnRzIGhhcyBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1MSBidWlsdGluL3RhZy5jOjUyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTMgYnVpbHRpbi90YWcuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNzIgYnVpbHRpbi9ub3Rlcy5jOjQ0NSBidWlsdGluL25vdGVzLmM6NDQ3CisjOiBidWlsdGluL25vdGVzLmM6NTA3IGJ1aWx0aW4vbm90ZXMuYzo1NjEgYnVpbHRpbi9ub3Rlcy5jOjY0NAorIzogYnVpbHRpbi9ub3Rlcy5jOjY0OSBidWlsdGluL25vdGVzLmM6NzI0IGJ1aWx0aW4vbm90ZXMuYzo3NjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NjggYnVpbHRpbi9yZXNldC5jOjI5MyBidWlsdGluL3RhZy5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Mjk5Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiB0aGUKKyMuIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzIGl0cyB2YWx1ZQorIzogYnVpbHRpbi9ub3Rlcy5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTAwIGJ1aWx0aW4vbm90ZXMuYzo1NTQgYnVpbHRpbi9ub3Rlcy5jOjYyNworIzogYnVpbHRpbi9ub3Rlcy5jOjYzOSBidWlsdGluL25vdGVzLmM6NzEyIGJ1aWx0aW4vbm90ZXMuYzo3NTkKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDMzCittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTEzIGJ1aWx0aW4vbm90ZXMuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1ODUgYnVpbHRpbi9ub3Rlcy5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYzNQorbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzE0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAlcyBkb2VzIG5vdCBhY2NlcHQgbmVnYXRpdmUgZm9ybSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHZhbHVlICclcycgZm9yIG9wdGlvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo0NAorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2MworbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMTEKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHByZXZlbnQgeW91IGZyb20gbG9zaW5nIGhpc3RvcnksIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcyB3ZXJlIHJlamVjdGVkXG4iCisiTWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuICdnaXQgcHVsbCcpIGJlZm9yZSBwdXNoaW5nIGFnYWluLiAgU2VlIHRoZVxuIgorIidOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIHNlY3Rpb24gb2YgJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTYxCittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTc2Cittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3NworbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgyCittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4MworbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTg4Cittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjc0Cittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjc2Cittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAibWl4ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAic29mdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJoYXJkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImtlZXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc3Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc5Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjk2Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMzAKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTMzCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAyCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTEKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzAgYnVpbHRpbi9yZXZlcnQuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgInByb2dyYW0gZXJyb3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMDkKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjI0Cittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlIGZpbGUgYW5kIHRoZSBIRUFEXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXhcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnNcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdmVyaWZ5IHRoZSB0YWcgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjI0NworbXNnaWQgIiIKKyJcbiIKKyIjXG4iCisiIyBXcml0ZSBhIHRhZyBtZXNzYWdlXG4iCisiIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCisiI1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjU0Cittc2dpZCAiIgorIlxuIgorIiNcbiIKKyIjIFdyaXRlIGEgdGFnIG1lc3NhZ2VcbiIKKyIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCisiI1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjk0Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjI5NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjMyMQorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozMzQKK21zZ2lkICJ0YWcgaGVhZGVyIHRvbyBiaWcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzY2Cittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MjEKK21zZ2lkICJzd2l0Y2ggJ3BvaW50cy1hdCcgcmVxdWlyZXMgYW4gb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTAyCittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUwNgorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MTQKK21zZ2lkICJvbmx5IG9uZSAtRiBvciAtbSBvcHRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MzQKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBsb2NrIHRoZSByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCB1cGRhdGUgdGhlIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU2NworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjQ5Cittc2dpZCAiWW91IG5lZWQgdG8gc2V0IHlvdXIgY29tbWl0dGVyIGluZm8gZmlyc3QiCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjEzNgorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjE0NworbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjE1NgorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MjY4Cittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjM1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZm9ybWF0ICRwYXRjaF9mb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjM1NworbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NDExCittc2dpZCAiLWQgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBEbyBub3QgdXNlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NDc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICRkb3Rlc3Qgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NDc5Cittc2dpZCAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjUwNgorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjU3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NzQ4Cittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWFtLnNoOjc1OQorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6Nzk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJEZJUlNUTElORSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6ODQwCittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo4NjYKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJGFyZyciCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDo5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmcnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTE3Cittc2dpZCAiQmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlY2tpbmcgb3V0ICckc3RhcnRfaGVhZCcgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPHZhbGlkYnJhbmNoPicuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQwCittc2dpZCAid29uJ3QgYmlzZWN0IG9uIHNlZWtlZCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQ0Cittc2dpZCAiQmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjE4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjE4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUwCittc2dpZCAiJ2dpdCBiaXNlY3QgYmFkJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjM2MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJGJyYW5jaCcuXG4iCisiVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDozOTAKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDA4Cittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDc0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICIiCisKKyM6IGdpdC1wdWxsLnNoOjIxCittc2dpZCAiIgorIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuXG4iCisiUGxlYXNlLCBmaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiwgb3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCittc2dzdHIgIiIKKworIzogZ2l0LXB1bGwuc2g6MjUKK21zZ2lkICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcHVsbC5zaDoxOTcKK21zZ2lkICJ1cGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXB1bGwuc2g6MjUzCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcHVsbC5zaDoyNTcKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjUxCittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo4OQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjMgZ2l0LXN0YXNoLnNoOjEzNgorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDAKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDMKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MTU2Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjIyMworbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MjI3Cittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjIzNQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MjUzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozNTIKK21zZ2lkICJObyBzdGFzaCBmb3VuZC4iCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjM1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MzY1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjM5MworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDEyCittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQxNgorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDI0Cittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDI2Cittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDYwCittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQ5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTkKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjU3MAorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICckcmVtb3RldXJsJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjE0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRwYXRoJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxNTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkdpdGRpciAnJGEnIGlzIHBhcnQgb2YgdGhlIHN1Ym1vZHVsZSBwYXRoICckYicgb3IgdmljZSB2ZXJzYSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0NworIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRwYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM0NworIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRwcmVmaXgkcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckcGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckcGF0aCcgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQyMAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjUxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBwYXRoICckcGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1MzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU1MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTY2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckcGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDAgZ2l0LXN1Ym1vZHVsZS5zaDo5MjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwOAorbXNnaWQgIi0tIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzY2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Nzk3Cittc2dpZCAiYmxvYiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjc5OAorbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJG5hbWUnIgorbXNnc3RyICIiCmRpZmYgLS1naXQgYS9wby9kZS5wbyBiL3BvL2RlLnBvCmluZGV4IGJhZWJmZjIuLjBkYjlhOWIgMTAwNjQ0Ci0tLSBhL3BvL2RlLnBvCisrKyBiL3BvL2RlLnBvCkBAIC0xLDI1OTIgKzEsNjIxNiBAQAotIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHRvIEdlcm1hbi4KLSMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZSwgZXQgYWwuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQgcGFja2FnZS4KLSMgQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPiwgMjAwNworIyBHZXJtYW4gdHJhbnNsYXRpb25zIGZvciBHaXQuCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIFJhbGYgVGhpZWxvdyA8cmFsZi50aGllbG93QGdvb2dsZW1haWwuY29tPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIFJhbGYgVGhpZWxvdyA8cmFsZi50aGllbG93QGdvb2dsZW1haWwuY29tPiwgMjAxMCwgMjAxMSwgMjAxMi4KICMKIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWlcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDEtMjYgMjI6MjIrMDEwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDEtMjYgMjI6MjUrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPlxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0IDEuNy4xMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTA5LTA1IDA2OjIwKzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTAzLTI4IDE4OjQ2KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFJhbGYgVGhpZWxvdyA8cmFsZi50aGllbG93QGdvb2dsZW1haWwuY29tPlxuIgogIkxhbmd1YWdlLVRlYW06IEdlcm1hblxuIgorIkxhbmd1YWdlOiBkZVxuIgogIk1JTUUtVmVyc2lvbjogMS4wXG4iCiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgogCi0jOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzkzIGdpdC1ndWkuc2g6ODA3IGdpdC1ndWkuc2g6ODIwIGdpdC1ndWkuc2g6OTAzCi0jOiBnaXQtZ3VpLnNoOjkyMgotbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgotbXNnc3RyICJnaXQtZ3VpOiBQcm9ncmFtbWZlaGxlciIKKyM6IGFkdmljZS5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAiSGlud2VpczogJS4qc1xuIgogCi0jOiBnaXQtZ3VpLnNoOjc0MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgotbXNnc3RyICJVbmfDvGx0aWdlIFplaWNoZW5zYXR6LUFuZ2FiZSBpbiAlczoiCi0KLSM6IGdpdC1ndWkuc2g6Nzc5Ci1tc2dpZCAiTWFpbiBGb250IgotbXNnc3RyICJQcm9ncmFtbXNjaHJpZnRhcnQiCi0KLSM6IGdpdC1ndWkuc2g6NzgwCi1tc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCi1tc2dzdHIgIlZlcmdsZWljaC1TY2hyaWZ0YXJ0IgotCi0jOiBnaXQtZ3VpLnNoOjc5NAotbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKLW1zZ3N0ciAiR2l0IGthbm4gaW0gUEFUSCBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uIgotCi0jOiBnaXQtZ3VpLnNoOjgyMQotbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgotbXNnc3RyICJHaXQgVmVyc2lvbnNhbmdhYmUga2FubiBuaWNodCBlcmthbm50IHdlcmRlbjoiCi0KLSM6IGdpdC1ndWkuc2g6ODM5Ci0jLCB0Y2wtZm9ybWF0CisjLgorIy4gKiBNZXNzYWdlIHVzZWQgYm90aCB3aGVuICdnaXQgY29tbWl0JyBmYWlscyBhbmQgd2hlbgorIy4gKiBvdGhlciBjb21tYW5kcyBkb2luZyBhIG1lcmdlIGRvLgorIy4KKyM6IGFkdmljZS5jOjcwCiBtc2dpZCAiIgotIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgotIlxuIgotIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCi0iXG4iCi0iJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgotIlxuIgotIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSxcbiIKKyJhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+JyBhc1xuIgorImFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdCxcbiIKKyJvciB1c2UgJ2dpdCBjb21taXQgLWEnLiIKIG1zZ3N0ciAiIgotIkRpZSBWZXJzaW9uIHZvbiBHaXQga2FubiBuaWNodCBiZXN0aW1tdCB3ZXJkZW4uXG4iCi0iXG4iCi0iwrslc8KrIGJlaGF1cHRldCwgZXMgc2VpIFZlcnNpb24gwrslc8KrLlxuIgotIlxuIgotIiVzIGJlbsO2dGlndCBtaW5kZXN0ZW5zIEdpdCAxLjUuMCBvZGVyIGjDtmhlci5cbiIKLSJcbiIKLSJTb2xsIGFuZ2Vub21tZW4gd2VyZGVuLCDCuyVzwqsgc2VpIFZlcnNpb24gMS41LjA/XG4iCisiS29ycmlnaWVyZSBkaWVzIGltIEFyYmVpdHNiYXVtLFxuIgorInVuZCBiZW51dHplIGRhbm4gJ2dpdCBhZGQvcm0gPERhdGVpPidcbiIKKyJ1bSBkaWUgQXVmbMO2c3VuZyBlbnRzcHJlY2hlbmQgenUgbWFya2llcmVuIHVuZCBlaW56dXRyYWdlbixcbiIKKyJvZGVyIGJlbnV0emUgJ2dpdCBjb21taXQgLWEnLiIKIAotIzogZ2l0LWd1aS5zaDoxMTI4Ci1tc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgotbXNnc3RyICJHaXQtVmVyemVpY2huaXMgbmljaHQgZ2VmdW5kZW46IgorIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiJyVzJyBzaWVodCBuaWNodCB3aWUgZWluZSB2MiBQYWtldGRhdGVpIGF1cyIKIAotIzogZ2l0LWd1aS5zaDoxMTQ2Ci1tc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKKyM6IGJ1bmRsZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVyIEtvcGZiZXJlaWNoOiAlcyVzICglZCkiCisKKyM6IGJ1bmRsZS5jOjg5IGJ1aWx0aW4vY29tbWl0LmM6Njk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1bmRsZS5jOjE0MAorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICJEZW0gUHJvamVrdGFyY2hpdiBmZWhsZW4gZm9sZ2VuZGUgdm9yYXVzZ2VzZXR6dGUgVmVyc2lvbmVuOiIKKworIzogYnVuZGxlLmM6MTY0IHNlcXVlbmNlci5jOjU1MCBzZXF1ZW5jZXIuYzo5ODIgYnVpbHRpbi9sb2cuYzoyOTAKKyM6IGJ1aWx0aW4vbG9nLmM6NzI3IGJ1aWx0aW4vbG9nLmM6MTMxMyBidWlsdGluL2xvZy5jOjE1MjkgYnVpbHRpbi9tZXJnZS5jOjM0NworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE4MQorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICJFaW5yaWNodHVuZyBkZXMgUmV2aXNpb25zZ2FuZ3MgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1bmRsZS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyAlZCByZWZzIgorbXNnc3RyWzBdICJEYXMgUGFrZXQgZW50aMOkbHQgJWQgUmVmZXJlbnoiCittc2dzdHJbMV0gIkRhcyBQYWtldCBlbnRow6RsdCAlZCBSZWZlcmVuemVuIgorCisjOiBidW5kbGUuYzoxOTIKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAiRGFzIFBha2V0IHNwZWljaGVydCBlaW5lIGtvbXBsZXR0ZSBIaXN0b3JpZS4iCisKKyM6IGJ1bmRsZS5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmIgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnMiCittc2dzdHJbMF0gIkRhcyBQYWtldCBiZW7DtnRpZ3QgZGllc2UgUmVmZXJlbnoiCittc2dzdHJbMV0gIkRhcyBQYWtldCBiZW7DtnRpZ3QgZGllc2UgJWQgUmVmZXJlbnplbiIKKworIzogYnVuZGxlLmM6Mjk0Cittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAiXCJyZXYtbGlzdFwiIGFiZ2Vicm9jaGVuIgorCisjOiBidW5kbGUuYzozMDAgYnVpbHRpbi9sb2cuYzoxMjA5IGJ1aWx0aW4vc2hvcnRsb2cuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVzIEFyZ3VtZW50OiAlcyIKKworIzogYnVuZGxlLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJSZWZlcmVueiAnJXMnIHdpcmQgZHVyY2ggXCJyZXYtbGlzdFwiIE9wdGlvbmVuIGF1c2dlc2NobG9zc2VuIgorCisjOiBidW5kbGUuYzozODAKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAiRXJzdGVsbHVuZyBlaW5lcyBsZWVyZW4gUGFrZXRzIHp1csO8Y2tnZXdpZXNlbi4iCisKKyM6IGJ1bmRsZS5jOjM5OAorbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIktvbm50ZSBQYWtldG9iamVrdGUgbmljaHQgZXJzdGVsbGVuIgorCisjOiBidW5kbGUuYzo0MTYKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAiRXJzdGVsbHVuZyBkZXIgUGFrZXRvYmpla3RlIGFiZ2Vicm9jaGVuIgorCisjOiBidW5kbGUuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICJrYW5uICclcycgbmljaHQgZXJzdGVsbGVuIgorCisjOiBidW5kbGUuYzo0NDEKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgIkVyc3RlbGx1bmcgZGVyIFBha2V0aW5kZXhkYXRlaSBhYmdlYnJvY2hlbiIKKworIzogY29tbWl0LmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICJrb25udGUgJXMgbmljaHQgcGFyc2VuIgorCisjOiBjb21taXQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyBpc3Qga2VpbmUgVmVyc2lvbiEiCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiU3BlaWNoZXIgdmVyYnJhdWNodCIKKworIzogY29ubmVjdGVkLmM6MzkKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICJLb25udGUgJ2dpdCByZXYtbGlzdCcgbmljaHQgYXVzZsO8aHJlbiIKKworIzogY29ubmVjdGVkLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0OiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIG5hY2ggcmV2LWxpc3Q6ICVzIgorCisjOiBjb25uZWN0ZWQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbjogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaGxpZcOfZW4gdm9uIHJldi1saXN0J3MgU3RhbmRhcmQtRWluZ2FiZTogJXMiCisKKyM6IGRhdGUuYzo5NQorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgImluIGRlciBadWt1bmZ0IgorCisjOiBkYXRlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gInZvciAlbHUgU2VrdW5kZSIKK21zZ3N0clsxXSAidm9yICVsdSBTZWt1bmRlbiIKKworIzogZGF0ZS5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICJ2b3IgJWx1IE1pbnV0ZSIKK21zZ3N0clsxXSAidm9yICVsdSBNaW51dGVuIgorCisjOiBkYXRlLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGhvdXJzIGFnbyIKK21zZ3N0clswXSAidm9yICVsdSBTdHVuZGUiCittc2dzdHJbMV0gInZvciAlbHUgU3R1bmRlbiIKKworIzogZGF0ZS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGRheXMgYWdvIgorbXNnc3RyWzBdICJ2b3IgJWx1IFRhZyIKK21zZ3N0clsxXSAidm9yICVsdSBUYWdlbiIKKworIzogZGF0ZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB3ZWVrcyBhZ28iCittc2dzdHJbMF0gInZvciAlbHUgV29jaGUiCittc2dzdHJbMV0gInZvciAlbHUgV29jaGVuIgorCisjOiBkYXRlLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICJ2b3IgJWx1IE1vbmF0IgorbXNnc3RyWzFdICJ2b3IgJWx1IE1vbmF0ZW4iCisKKyM6IGRhdGUuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIiCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyIKK21zZ3N0clswXSAidm9yICVsdSBKYWhyIgorbXNnc3RyWzFdICJ2b3IgJWx1IEphaHJlbiIKKworIzogZGF0ZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlcywgdW5kICVsdSBNb25hdCIKK21zZ3N0clsxXSAiJXMsIHVuZCAlbHUgTW9uYXRlbiIKKworIzogZGF0ZS5jOjE1NCBkYXRlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIGFnbyIKK21zZ3N0clswXSAidm9yICVsdSBKYWhyIgorbXNnc3RyWzFdICJ2b3IgJWx1IEphaHJlbiIKKworIzogZGlmZi5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJS4qcydcbiIKIG1zZ3N0ciAiIgotIkVzIGtvbm50ZSBuaWNodCBpbiBkYXMgb2JlcnN0ZSBWZXJ6ZWljaG5pcyBkZXIgQXJiZWl0c2tvcGllIGdld2VjaHNlbHQgIgotIndlcmRlbjoiCisiICBGZWhsZXIgYmVpbSBQYXJzZW4gZGVzIGFiZ2VzY2huaXR0ZW5lbiBcImRpcnN0YXRcIiBQcm96ZW50c2F0emVzICclLipzJ1xuIgogCi0jOiBnaXQtZ3VpLnNoOjExNTQKLW1zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCi1tc2dzdHIgIkJsb8OfZXMgUHJvamVrdGFyY2hpdiBrYW5uIG5pY2h0IGJlbnV0enQgd2VyZGVuOiIKKyM6IGRpZmYuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclLipzJ1xuIgorbXNnc3RyICIgIFVuYmVrYW5udGVyIFwiZGlyc3RhdFwiIFBhcmFtZXRlciAnJS4qcydcbiIKIAotIzogZ2l0LWd1aS5zaDoxMTYyCi1tc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgIktlaW4gQXJiZWl0c3ZlcnplaWNobmlzIgotCi0jOiBnaXQtZ3VpLnNoOjEzMzQgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKLW1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgotbXNnc3RyICJEYXRlaXN0YXR1cyBha3R1YWxpc2llcmVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjEzOTAKLW1zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgotbXNnc3RyICJOYWNoIGdlw6RuZGVydGVuIERhdGVpZW4gc3VjaGVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE0NTQKLW1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICJBdWZydWZlbiBkZXIgRWludHJhZ2VuLVZvcmJlcmVpdGVuLUtvbnRyb2xsZSAowrtwcmVwYXJlLWNvbW1pdCBob29rwqspLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE0NzEKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgotbXNnc3RyICIiCi0iRWludHJhZ2VuIGFiZ2VsZWhudCBkdXJjaCBFaW50cmFnZW4tVm9yYmVyZWl0ZW4tS29udHJvbGxlICjCu3ByZXBhcmUtY29tbWl0ICIKLSJob29rwqspLiIKLQotIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKLW1zZ2lkICJSZWFkeS4iCi1tc2dzdHIgIkJlcmVpdC4iCi0KLSM6IGdpdC1ndWkuc2g6MTc4NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCi1tc2dzdHIgIk51ciAlcyB2b24gJXMgRGF0ZWllbiB3ZXJkZW4gYW5nZXplaWd0LiIKLQotIzogZ2l0LWd1aS5zaDoxOTEzCi1tc2dpZCAiVW5tb2RpZmllZCIKLW1zZ3N0ciAiVW52ZXLDpG5kZXJ0IgotCi0jOiBnaXQtZ3VpLnNoOjE5MTUKLW1zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAiVmVyw6RuZGVydCwgbmljaHQgYmVyZWl0Z2VzdGVsbHQiCi0KLSM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKLW1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKLW1zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIEVpbnRyYWdlbiIKLQotIzogZ2l0LWd1aS5zaDoxOTE3IGdpdC1ndWkuc2g6MTkyNQotbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICJUZWlsd2Vpc2UgYmVyZWl0Z2VzdGVsbHQgenVtIEVpbnRyYWdlbiIKLQotIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgotbXNnc3RyICJCZXJlaXRnZXN0ZWxsdCB6dW0gRWludHJhZ2VuLCBmZWhsZW5kIgotCi0jOiBnaXQtZ3VpLnNoOjE5MjAKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAiRGF0ZWl0eXAgZ2XDpG5kZXJ0LCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKLQotIzogZ2l0LWd1aS5zaDoxOTIxCi1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKLW1zZ3N0ciAiRGF0ZWl0eXAgZ2XDpG5kZXJ0LCBiZXJlaXRnZXN0ZWxsdCIKLQotIzogZ2l0LWd1aS5zaDoxOTIzCi1tc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJOaWNodCB1bnRlciBWZXJzaW9uc2tvbnRyb2xsZSwgbmljaHQgYmVyZWl0Z2VzdGVsbHQiCi0KLSM6IGdpdC1ndWkuc2g6MTkyOAotbXNnaWQgIk1pc3NpbmciCi1tc2dzdHIgIkZlaGxlbmQiCi0KLSM6IGdpdC1ndWkuc2g6MTkyOQotbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKLW1zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIEzDtnNjaGVuIgotCi0jOiBnaXQtZ3VpLnNoOjE5MzAKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCi1tc2dzdHIgIkJlcmVpdGdlc3RlbGx0IHp1bSBMw7ZzY2hlbiwgdHJvdHpkZW0gdm9yaGFuZGVuIgotCi0jOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKLSM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKLW1zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgotbXNnc3RyICJLb25mbGlrdGF1ZmzDtnN1bmcgbsO2dGlnIgotCi0jOiBnaXQtZ3VpLnNoOjE5NzIKLW1zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICJHaXRrIHdpcmQgZ2VzdGFydGV0Li4uIGJpdHRlIHdhcnRlbi4iCi0KLSM6IGdpdC1ndWkuc2g6MTk4NAotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgotbXNnc3RyICJHaXRrIGthbm4gaW0gUEFUSCBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uIgotCi0jOiBnaXQtZ3VpLnNoOjIwNDMKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKLW1zZ3N0ciAiwrtHaXQgZ3Vpwqsga2FubiBpbSBQQVRIIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iCi0KLSM6IGdpdC1ndWkuc2g6MjQ1NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2Ci1tc2dpZCAiUmVwb3NpdG9yeSIKLW1zZ3N0ciAiUHJvamVrdGFyY2hpdiIKLQotIzogZ2l0LWd1aS5zaDoyNDU2Ci1tc2dpZCAiRWRpdCIKLW1zZ3N0ciAiQmVhcmJlaXRlbiIKLQotIzogZ2l0LWd1aS5zaDoyNDU4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKLW1zZ2lkICJCcmFuY2giCi1tc2dzdHIgIlp3ZWlnIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAotbXNnaWQgIkNvbW1pdEBAbm91biIKLW1zZ3N0ciAiVmVyc2lvbiIKLQotIzogZ2l0LWd1aS5zaDoyNDY0IGxpYi9tZXJnZS50Y2w6MTIxIGxpYi9tZXJnZS50Y2w6MTUwIGxpYi9tZXJnZS50Y2w6MTY4Ci1tc2dpZCAiTWVyZ2UiCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiIKLQotIzogZ2l0LWd1aS5zaDoyNDY1IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKLW1zZ2lkICJSZW1vdGUiCi1tc2dzdHIgIkV4dGVybmUgQXJjaGl2ZSIKLQotIzogZ2l0LWd1aS5zaDoyNDY4Ci1tc2dpZCAiVG9vbHMiCi1tc2dzdHIgIldlcmt6ZXVnZSIKLQotIzogZ2l0LWd1aS5zaDoyNDc3Ci1tc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCi1tc2dzdHIgIkFyYmVpdHNrb3BpZSBpbSBEYXRlaW1hbmFnZXIiCi0KLSM6IGdpdC1ndWkuc2g6MjQ4MwotbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgotbXNnc3RyICJBa3R1ZWxsZW4gWndlaWcgZHVyY2hibMOkdHRlcm4iCi0KLSM6IGdpdC1ndWkuc2g6MjQ4NwotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCi1tc2dzdHIgIkVpbmVuIFp3ZWlnIGR1cmNoYmzDpHR0ZXJuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI0OTIKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgotbXNnc3RyICJBa3R1ZWxsZW4gWndlaWcgZGFyc3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDoyNDk2Ci1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKLW1zZ3N0ciAiQWxsZSBad2VpZ2UgZGFyc3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDoyNTAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCi1tc2dzdHIgIlp3ZWlnIMK7JXPCqyBkdXJjaGJsw6R0dGVybiIKLQotIzogZ2l0LWd1aS5zaDoyNTA1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKLW1zZ3N0ciAiSGlzdG9yaWUgdm9uIMK7JXPCqyBkYXJzdGVsbGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI1MTAgbGliL2RhdGFiYXNlLnRjbDoyNyBsaWIvZGF0YWJhc2UudGNsOjY3Ci1tc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKLW1zZ3N0ciAiRGF0ZW5iYW5rc3RhdGlzdGlrIgotCi0jOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAotbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgotbXNnc3RyICJEYXRlbmJhbmsga29tcHJpbWllcmVuIgotCi0jOiBnaXQtZ3VpLnNoOjI1MTYKLW1zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCi1tc2dzdHIgIkRhdGVuYmFuayDDvGJlcnByw7xmZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAotIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCi1tc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKLW1zZ3N0ciAiRGVza3RvcC1JY29uIGVyc3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCi1tc2dpZCAiUXVpdCIKLW1zZ3N0ciAiQmVlbmRlbiIKLQotIzogZ2l0LWd1aS5zaDoyNTQ3Ci1tc2dpZCAiVW5kbyIKLW1zZ3N0ciAiUsO8Y2tnw6RuZ2lnIgotCi0jOiBnaXQtZ3VpLnNoOjI1NTAKLW1zZ2lkICJSZWRvIgotbXNnc3RyICJXaWVkZXJob2xlbiIKLQotIzogZ2l0LWd1aS5zaDoyNTU0IGdpdC1ndWkuc2g6MzEwOQotbXNnaWQgIkN1dCIKLW1zZ3N0ciAiQXVzc2NobmVpZGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI1NTcgZ2l0LWd1aS5zaDozMTEyIGdpdC1ndWkuc2g6MzE4NiBnaXQtZ3VpLnNoOjMyNTkKLSM6IGxpYi9jb25zb2xlLnRjbDo2OQotbXNnaWQgIkNvcHkiCi1tc2dzdHIgIktvcGllcmVuIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjAgZ2l0LWd1aS5zaDozMTE1Ci1tc2dpZCAiUGFzdGUiCi1tc2dzdHIgIkVpbmbDvGdlbiIKLQotIzogZ2l0LWd1aS5zaDoyNTYzIGdpdC1ndWkuc2g6MzExOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKLW1zZ2lkICJEZWxldGUiCi1tc2dzdHIgIkzDtnNjaGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjcgZ2l0LWd1aS5zaDozMTIyIGdpdC1ndWkuc2g6MzI2MyBsaWIvY29uc29sZS50Y2w6NzEKLW1zZ2lkICJTZWxlY3QgQWxsIgotbXNnc3RyICJBbGxlIGF1c3fDpGhsZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjU3NgotbXNnaWQgIkNyZWF0ZS4uLiIKLW1zZ3N0ciAiRXJzdGVsbGVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODIKLW1zZ2lkICJDaGVja291dC4uLiIKLW1zZ3N0ciAiVW1zdGVsbGVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODgKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgIlVtYmVuZW5uZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjU5MwotbXNnaWQgIkRlbGV0ZS4uLiIKLW1zZ3N0ciAiTMO2c2NoZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjU5OAotbXNnaWQgIlJlc2V0Li4uIgotbXNnc3RyICJadXLDvGNrc2V0emVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI2MDgKLW1zZ2lkICJEb25lIgotbXNnc3RyICJGZXJ0aWciCi0KLSM6IGdpdC1ndWkuc2g6MjYxMAotbXNnaWQgIkNvbW1pdEBAdmVyYiIKLW1zZ3N0ciAiRWludHJhZ2VuIgotCi0jOiBnaXQtZ3VpLnNoOjI2MTkgZ2l0LWd1aS5zaDozMDUwCi1tc2dpZCAiTmV3IENvbW1pdCIKLW1zZ3N0ciAiTmV1ZSBWZXJzaW9uIgotCi0jOiBnaXQtZ3VpLnNoOjI2MjcgZ2l0LWd1aS5zaDozMDU3Ci1tc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCi1tc2dzdHIgIkxldHp0ZSBuYWNoYmVzc2VybiIKLQotIzogZ2l0LWd1aS5zaDoyNjM3IGdpdC1ndWkuc2g6MzAxMSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5Ci1tc2dpZCAiUmVzY2FuIgotbXNnc3RyICJOZXUgbGFkZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjY0MwotbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKLW1zZ3N0ciAiWnVtIEVpbnRyYWdlbiBiZXJlaXRzdGVsbGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI2NDkKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKLW1zZ3N0ciAiR2XDpG5kZXJ0ZSBEYXRlaWVuIGJlcmVpdHN0ZWxsZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjY1NQotbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCi1tc2dzdHIgIkF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgotCi0jOiBnaXQtZ3VpLnNoOjI2NjEgbGliL2luZGV4LnRjbDo0MTIKLW1zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKLW1zZ3N0ciAiw4RuZGVydW5nZW4gdmVyd2VyZmVuIgotCi0jOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQotbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgotbXNnc3RyICJXZW5pZ2VyIFplaWxlbiBhbnplaWdlbiIKLQotIzogZ2l0LWd1aS5zaDoyNjczIGdpdC1ndWkuc2g6MzMxNCBnaXQtZ3VpLnNoOjMzNDUKLW1zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKLW1zZ3N0ciAiTWVociBaZWlsZW4gYW56ZWlnZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjY4MCBnaXQtZ3VpLnNoOjMwMjQgZ2l0LWd1aS5zaDozMTMzCi1tc2dpZCAiU2lnbiBPZmYiCi1tc2dzdHIgIkFiemVpY2huZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjY5NgotbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgotbXNnc3RyICJMb2thbGVzIFp1c2FtbWVuZsO8aHJlbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzAxCi1tc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBhYmJyZWNoZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjcxMyBnaXQtZ3VpLnNoOjI3NDEKLW1zZ2lkICJBZGQuLi4iCi1tc2dzdHIgIkhpbnp1ZsO8Z2VuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3MTcKLW1zZ2lkICJQdXNoLi4uIgotbXNnc3RyICJWZXJzZW5kZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjcyMQotbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCi1tc2dzdHIgIlp3ZWlnIGzDtnNjaGVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3MzEgZ2l0LWd1aS5zaDozMjkyCi1tc2dpZCAiT3B0aW9ucy4uLiIKLW1zZ3N0ciAiT3B0aW9uZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc0MgotbXNnaWQgIlJlbW92ZS4uLiIKLW1zZ3N0ciAiRW50ZmVybmVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAotbXNnaWQgIkhlbHAiCi1tc2dzdHIgIkhpbGZlIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3V0ICVzIgotbXNnc3RyICLDnGJlciAlcyIKLQotIzogZ2l0LWd1aS5zaDoyNzgzCi1tc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCi1tc2dzdHIgIk9ubGluZS1Eb2t1bWVudGF0aW9uIgotCi0jOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Ci1tc2dpZCAiU2hvdyBTU0ggS2V5IgotbXNnc3RyICJTU0gtU2NobMO8c3NlbCBhbnplaWdlbiIKLQotIzogZ2l0LWd1aS5zaDoyODkzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCi1tc2dzdHIgIiIKLSJGZWhsZXI6IFZlcnplaWNobmlzIMK7JXPCqyBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuOiBEYXRlaSBvZGVyIFZlcnplaWNobmlzICIKLSJuaWNodCBnZWZ1bmRlbiIKLQotIzogZ2l0LWd1aS5zaDoyOTI2Ci1tc2dpZCAiQ3VycmVudCBCcmFuY2g6IgotbXNnc3RyICJBa3R1ZWxsZXIgWndlaWc6IgotCi0jOiBnaXQtZ3VpLnNoOjI5NDcKLW1zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgotbXNnc3RyICJCZXJlaXRzdGVsbHVuZyAoenVtIEVpbnRyYWdlbikiCi0KLSM6IGdpdC1ndWkuc2g6Mjk2NwotbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCi1tc2dzdHIgIk5pY2h0IGJlcmVpdGdlc3RlbGx0ZSDDhG5kZXJ1bmdlbiIKLQotIzogZ2l0LWd1aS5zaDozMDE3Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAiQWxsZXMgYmVyZWl0c3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDozMDM2IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKLW1zZ2lkICJQdXNoIgotbXNnc3RyICJWZXJzZW5kZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzA3MQotbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJFcnN0ZSBWZXJzaW9uc2Jlc2NocmVpYnVuZzoiCi0KLSM6IGdpdC1ndWkuc2g6MzA3MgotbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJOYWNoZ2ViZXNzZXJ0ZSBCZXNjaHJlaWJ1bmc6IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzMKLW1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJOYWNoZ2ViZXNzZXJ0ZSBlcnN0ZSBCZXNjaHJlaWJ1bmc6IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzQKLW1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiTmFjaGdlYmVzc2VydGUgWnVzYW1tZW5mw7xocnVuZ3MtQmVzY2hyZWlidW5nOiIKLQotIzogZ2l0LWd1aS5zaDozMDc1Ci1tc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1CZXNjaHJlaWJ1bmc6IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzYKLW1zZ2lkICJDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIlZlcnNpb25zYmVzY2hyZWlidW5nOiIKLQotIzogZ2l0LWd1aS5zaDozMTI1IGdpdC1ndWkuc2g6MzI2NyBsaWIvY29uc29sZS50Y2w6NzMKLW1zZ2lkICJDb3B5IEFsbCIKLW1zZ3N0ciAiQWxsZSBrb3BpZXJlbiIKLQotIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Ci1tc2dpZCAiRmlsZToiCi1tc2dzdHIgIkRhdGVpOiIKLQotIzogZ2l0LWd1aS5zaDozMjU1Ci1tc2dpZCAiUmVmcmVzaCIKLW1zZ3N0ciAiQWt0dWFsaXNpZXJlbiIKLQotIzogZ2l0LWd1aS5zaDozMjc2Ci1tc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJTY2hyaWZ0Z3LDtsOfZSB2ZXJrbGVpbmVybiIKLQotIzogZ2l0LWd1aS5zaDozMjgwCi1tc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJTY2hyaWZ0Z3LDtsOfZSB2ZXJncsO2w59lcm4iCi0KLSM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQotbXNnaWQgIkVuY29kaW5nIgotbXNnc3RyICJaZWljaGVua29kaWVydW5nIgotCi0jOiBnaXQtZ3VpLnNoOjMyOTkKLW1zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCi1tc2dzdHIgIktvbnRleHQgYW53ZW5kZW4vdW1rZWhyZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzMwNAotbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKLW1zZ3N0ciAiWmVpbGUgYW53ZW5kZW4vdW1rZWhyZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzMyMwotbXNnaWQgIlJ1biBNZXJnZSBUb29sIgotbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnIgotCi0jOiBnaXQtZ3VpLnNoOjMzMjgKLW1zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCi1tc2dzdHIgIkV4dGVybmUgVmVyc2lvbiBiZW51dHplbiIKLQotIzogZ2l0LWd1aS5zaDozMzMyCi1tc2dpZCAiVXNlIExvY2FsIFZlcnNpb24iCi1tc2dzdHIgIkxva2FsZSBWZXJzaW9uIGJlbnV0emVuIgotCi0jOiBnaXQtZ3VpLnNoOjMzMzYKLW1zZ2lkICJSZXZlcnQgVG8gQmFzZSIKLW1zZ3N0ciAiVXJzcHLDvG5nbGljaGUgVmVyc2lvbiBiZW51dHplbiIKLQotIzogZ2l0LWd1aS5zaDozMzU0Ci1tc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiRGllc2Ugw4RuZGVydW5nZW4gaW0gVW50ZXJtb2R1bCBkYXJzdGVsbGVuIgotCi0jOiBnaXQtZ3VpLnNoOjMzNTgKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJBa3R1ZWxsZW4gWndlaWcgaW0gVW50ZXJtb2R1bCBkYXJzdGVsbGVuIgotCi0jOiBnaXQtZ3VpLnNoOjMzNjIKLW1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIkFsbGUgWndlaWdlIGltIFVudGVybW9kdWwgZGFyc3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDozMzY3Ci1tc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJHaXQgZ3VpIGltIFVudGVybW9kdWwgc3RhcnRlbiIKLQotIzogZ2l0LWd1aS5zaDozMzg5Ci1tc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgotbXNnc3RyICJLb250ZXh0IGF1cyBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzM5MQotbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCi1tc2dzdHIgIlplaWxlbiBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKLQotIzogZ2l0LWd1aS5zaDozMzkzCi1tc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgotbXNnc3RyICJaZWlsZSBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKLQotIzogZ2l0LWd1aS5zaDozMzk2Ci1tc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgotbXNnc3RyICJLb250ZXh0IHp1ciBCZXJlaXRzdGVsbHVuZyBoaW56dWbDvGdlbiIKLQotIzogZ2l0LWd1aS5zaDozMzk4Ci1tc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKLW1zZ3N0ciAiWmVpbGVuIHp1ciBCZXJlaXRzdGVsbHVuZyBoaW56dWbDvGdlbiIKLQotIzogZ2l0LWd1aS5zaDozNDAwCi1tc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgotbXNnc3RyICJaZWlsZSB6dXIgQmVyZWl0c3RlbGx1bmcgaGluenVmw7xnZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzQyNAotbXNnaWQgIkluaXRpYWxpemluZy4uLiIKLW1zZ3N0ciAiSW5pdGlhbGlzaWVyZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MzU0MQotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjIxMAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgotIlxuIgotIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgotImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgotImJ5ICVzOlxuIgotIlxuIgotbXNnc3RyICIiCi0iTcO2Z2xpY2hlcndlaXNlIGdpYnQgZXMgUHJvYmxlbWUgbWl0IG1hbmNoZW4gVW1nZWJ1bmdzdmFyaWFibGVuLlxuIgotIlxuIgotIkRpZSBmb2xnZW5kZW4gVW1nZWJ1bmdzdmFyaWFibGVuIGvDtm5uZW4gdmVybXV0bGljaCBuaWNodCBcbiIKLSJ2b24gJXMgYW4gR2l0IHdlaXRlcmdlZ2ViZW4gd2VyZGVuOlxuIgotIlxuIgotCi0jOiBnaXQtZ3VpLnNoOjM1NzAKLW1zZ2lkICIiCi0iXG4iCi0iVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgotIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKLW1zZ3N0ciAiIgotIlxuIgotIkRpZXMgaXN0IGVpbiBiZWthbm50ZXMgUHJvYmxlbSBkZXIgVGNsLVZlcnNpb24sIGRpZVxuIgotImluIEN5Z3dpbiBtaXRnZWxpZWZlcnQgd2lyZC4iCi0KLSM6IGdpdC1ndWkuc2g6MzU3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJcbiIKLSJcbiIKLSJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCi0iaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCi0idXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKLSJ+Ly5naXRjb25maWcgZmlsZS5cbiIKLW1zZ3N0ciAiIgotIlxuIgotIlxuIgotIlVtIGRlbiBOYW1lbiDCuyVzwqsgenUgw6RuZGVybiwgc29sbHRlbiBTaWUgZGllIFxuIgotImdld8O8bnNjaHRlbiBXZXJ0ZSBmw7xyIGRpZSBFaW5zdGVsbHVuZyB1c2VyLm5hbWUgdW5kIFxuIgotInVzZXIuZW1haWwgaW4gSWhyZSBEYXRlaSB+Ly5naXRjb25maWcgZWluZsO8Z2VuLlxuIgotCi0jOiBsaWIvYWJvdXQudGNsOjI2Ci1tc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgotbXNnc3RyICJnaXQtZ3VpIC0gZWluZSBncmFmaXNjaGUgT2JlcmZsw6RjaGUgZsO8ciBHaXQuIgotCi0jOiBsaWIvYmxhbWUudGNsOjcyCi1tc2dpZCAiRmlsZSBWaWV3ZXIiCi1tc2dzdHIgIkRhdGVpLUJyb3dzZXIiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzgKLW1zZ2lkICJDb21taXQ6IgotbXNnc3RyICJWZXJzaW9uOiIKLQotIzogbGliL2JsYW1lLnRjbDoyNzEKLW1zZ2lkICJDb3B5IENvbW1pdCIKLW1zZ3N0ciAiVmVyc2lvbiBrb3BpZXJlbiIKLQotIzogbGliL2JsYW1lLnRjbDoyNzUKLW1zZ2lkICJGaW5kIFRleHQuLi4iCi1tc2dzdHIgIlRleHQgc3VjaGVuLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjI4NAotbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCi1tc2dzdHIgIlZvbGxlIEtvcGllLUVya2VubnVuZyIKLQotIzogbGliL2JsYW1lLnRjbDoyODgKLW1zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKLW1zZ3N0ciAiSGlzdG9yaWVuLUtvbnRleHQgYW56ZWlnZW4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6MjkxCi1tc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKLW1zZ3N0ciAiRWx0ZXJudmVyc2lvbiBhbm5vdGllcmVuIgotCi0jOiBsaWIvYmxhbWUudGNsOjQ1MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlYWRpbmcgJXMuLi4iCi1tc2dzdHIgIiVzIGxlc2VuLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjU1NwotbXNnaWQgIkxvYWRpbmcgY29weS9tb3ZlIHRyYWNraW5nIGFubm90YXRpb25zLi4uIgotbXNnc3RyICJBbm5vdGllcnVuZ2VuIGbDvHIgS29waWVyZW4vVmVyc2NoaWViZW4gd2VyZGVuIGdlbGFkZW4uLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NTc3Ci1tc2dpZCAibGluZXMgYW5ub3RhdGVkIgotbXNnc3RyICJaZWlsZW4gYW5ub3RpZXJ0IgotCi0jOiBsaWIvYmxhbWUudGNsOjc2OQotbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIkFubm90aWVydW5nZW4gZsO8ciB1cnNwcsO8bmdsaWNoZW4gT3J0IHdlcmRlbiBnZWxhZGVuLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjc3MgotbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgotbXNnc3RyICJBbm5vdGllcnVuZyB2b2xsc3TDpG5kaWcuIgotCi0jOiBsaWIvYmxhbWUudGNsOjgwMgotbXNnaWQgIkJ1c3kiCi1tc2dzdHIgIlZlcmFyYmVpdHVuZyBsw6R1ZnQiCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODAzCi1tc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCi1tc2dzdHIgIkFubm90aWVydW5nIGzDpHVmdCBiZXJlaXRzLiIKLQotIzogbGliL2JsYW1lLnRjbDo4NDIKLW1zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgotbXNnc3RyICJJbnRlbnNpdmUgS29waWUtRXJrZW5udW5nIGzDpHVmdC4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo5MTAKLW1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCi1tc2dzdHIgIkFubm90aWVydW5nIGxhZGVuLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjk2MwotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgIkF1dG9yOiIKLQotIzogbGliL2JsYW1lLnRjbDo5NjcKLW1zZ2lkICJDb21taXR0ZXI6IgotbXNnc3RyICJFaW50cmFnZW5kZXI6IgotCi0jOiBsaWIvYmxhbWUudGNsOjk3MgotbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgotbXNnc3RyICJVcnNwcsO8bmdsaWNoZSBEYXRlaToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAyMAotbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKLW1zZ3N0ciAiWndlaWdzcGl0emUgKMK7SEVBRMKrKSBrYW5uIG5pY2h0IGdlZnVuZGVuIHdlcmRlbjoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTA3NQotbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgotbXNnc3RyICJFbHRlcm52ZXJzaW9uIGthbm4gbmljaHQgZ2VmdW5kZW4gd2VyZGVuOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDkwCi1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgotbXNnc3RyICJFbHRlcm52ZXJzaW9uIGthbm4gbmljaHQgYW5nZXplaWd0IHdlcmRlbiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDkxIGxpYi9kaWZmLnRjbDozMjAKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXMgVmVyZ2xlaWNoczoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTIzMQotbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgotbXNnc3RyICJVcnNwcsO8bmdsaWNoIHZvbjoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTIzNwotbXNnaWQgIkluIEZpbGU6IgotbXNnc3RyICJJbiBEYXRlaToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI0MgotbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKLW1zZ3N0ciAiS29waWVydCBvZGVyIHZlcnNjaG9iZW4gZHVyY2g6IgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxNCBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxOQotbXNnaWQgIkNoZWNrb3V0IEJyYW5jaCIKLW1zZ3N0ciAiQXVmIFp3ZWlnIHVtc3RlbGxlbiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKLW1zZ2lkICJDaGVja291dCIKLW1zZ3N0ciAiVW1zdGVsbGVuIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgotIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKLW1zZ2lkICJDYW5jZWwiCi1tc2dzdHIgIkFiYnJlY2hlbiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI4NyBsaWIvdG9vbHNfZGxnLnRjbDozMjgKLW1zZ2lkICJSZXZpc2lvbiIKLW1zZ3N0ciAiVmVyc2lvbiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI4MAotbXNnaWQgIk9wdGlvbnMiCi1tc2dzdHIgIk9wdGlvbmVuIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKLW1zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIsOcYmVybmFobWV6d2VpZyBhbmZvcmRlcm4iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Ci1tc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgotbXNnc3RyICJWZXJiaW5kdW5nIHp1IGxva2FsZW0gWndlaWcgbMO2c2VuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjIKLW1zZ2lkICJDcmVhdGUgQnJhbmNoIgotbXNnc3RyICJad2VpZyBlcnN0ZWxsZW4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyNwotbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgotbXNnc3RyICJOZXVlbiBad2VpZyBlcnN0ZWxsZW4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MQotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAiRXJzdGVsbGVuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDAKLW1zZ2lkICJCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiWndlaWduYW1lIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCi1tc2dpZCAiTmFtZToiCi1tc2dzdHIgIk5hbWU6IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiUGFzc2VuZCB6dSDDnGJlcm5haG1lendlaWctTmFtZSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Ci1tc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCi1tc2dzdHIgIkFuZmFuZ3N2ZXJzaW9uIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKLW1zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKLW1zZ3N0ciAiRXhpc3RpZXJlbmRlbiBad2VpZyBha3R1YWxpc2llcmVuOiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Ci1tc2dpZCAiTm8iCi1tc2dzdHIgIk5laW4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAotbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgotbXNnc3RyICJOdXIgU2NobmVsbHp1c2FtbWVuZsO8aHJ1bmciCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQotbXNnaWQgIlJlc2V0IgotbXNnc3RyICJadXLDvGNrc2V0emVuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTcKLW1zZ2lkICJDaGVja291dCBBZnRlciBDcmVhdGlvbiIKLW1zZ3N0ciAiQXJiZWl0c2tvcGllIHVtc3RlbGxlbiBuYWNoIEVyc3RlbGxlbiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgotbXNnc3RyICJCaXR0ZSB3w6RobGVuIFNpZSBlaW5lbiDDnGJlcm5haG1lendlaWcuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgotbXNnc3RyICLDnGJlcm5haG1lendlaWcgwrslc8KrIGlzdCBrZWluIFp3ZWlnIGltIGV4dGVybmVuIFByb2pla3RhcmNoaXYuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTUzIGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4NgotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBad2VpZ25hbWVuIGFuLiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgIsK7JXPCqyBpc3Qga2VpbiB6dWzDpHNzaWdlciBad2VpZ25hbWUuIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKLW1zZ2lkICJEZWxldGUgQnJhbmNoIgotbXNnc3RyICJad2VpZyBsw7ZzY2hlbiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIwCi1tc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiTG9rYWxlbiBad2VpZyBsw7ZzY2hlbiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Ci1tc2dpZCAiTG9jYWwgQnJhbmNoZXMiCi1tc2dzdHIgIkxva2FsZSBad2VpZ2UiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MgotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgotbXNnc3RyICJOdXIgbMO2c2NoZW4sIHdlbm4genVzYW1tZW5nZWbDvGhydCBuYWNoIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCi1tc2dzdHIgIkltbWVyIChLZWluZSBadXNhbW1lbmbDvGhydW5nc3Byw7xmdW5nKSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKLW1zZ3N0ciAiRm9sZ2VuZGUgWndlaWdlIHNpbmQgbm9jaCBuaWNodCBtaXQgwrslc8KrIHp1c2FtbWVuZ2Vmw7xocnQ6IgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE3Ci1tc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCi0iXG4iCi0iRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCi1tc2dzdHIgIiIKLSJEYXMgV2llZGVyaGVyc3RlbGxlbiB2b24gZ2Vsw7ZzY2h0ZW4gWndlaWdlbiBpc3QgbnVyIG1pdCBncsO2w59lcmVtIEF1ZndhbmQgIgotIm3DtmdsaWNoLlxuIgotIlxuIgotIlNvbGxlbiBkaWUgYXVzZ2V3w6RobHRlbiBad2VpZ2UgZ2Vsw7ZzY2h0IHdlcmRlbj8iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgogIiVzIgogbXNnc3RyICIiCi0iRmVobGVyIGJlaW0gTMO2c2NoZW4gZGVyIFp3ZWlnZTpcbiIKKyJGZWhsZXIgaW4gJ2RpZmYuZGlyc3RhdCcgS29uZmlndXJhdGlvbnN2YXJpYWJsZSBnZWZ1bmRlbjpcbiIKICIlcyIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgotbXNnaWQgIlJlbmFtZSBCcmFuY2giCi1tc2dzdHIgIlp3ZWlnIHVtYmVuZW5uZW4iCisjOiBkaWZmLmM6MTQwMQorbXNnaWQgIiAwIGZpbGVzIGNoYW5nZWQiCittc2dzdHIgIiAwIERhdGVpZW4gZ2XDpG5kZXJ0IgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjYKLW1zZ2lkICJSZW5hbWUiCi1tc2dzdHIgIlVtYmVuZW5uZW4iCisjOiBkaWZmLmM6MTQwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgJWQgZmlsZSBjaGFuZ2VkIgorbXNnaWRfcGx1cmFsICIgJWQgZmlsZXMgY2hhbmdlZCIKK21zZ3N0clswXSAiICVkIERhdGVpIGdlw6RuZGVydCIKK21zZ3N0clsxXSAiICVkIERhdGVpZW4gZ2XDpG5kZXJ0IgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKLW1zZ2lkICJCcmFuY2g6IgotbXNnc3RyICJad2VpZzoiCisjOiBkaWZmLmM6MTQyMgorIywgYy1mb3JtYXQKK21zZ2lkICIsICVkIGluc2VydGlvbigrKSIKK21zZ2lkX3BsdXJhbCAiLCAlZCBpbnNlcnRpb25zKCspIgorbXNnc3RyWzBdICIsICVkIFplaWxlIGhpbnp1Z2Vmw7xndCgrKSIKK21zZ3N0clsxXSAiLCAlZCBaZWlsZW4gaGluenVnZWbDvGd0KCspIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKLW1zZ2lkICJOZXcgTmFtZToiCi1tc2dzdHIgIk5ldWVyIE5hbWU6IgorIzogZGlmZi5jOjE0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAlZCBkZWxldGlvbigtKSIKK21zZ2lkX3BsdXJhbCAiLCAlZCBkZWxldGlvbnMoLSkiCittc2dzdHJbMF0gIiwgJWQgWmVpbGUgZW50ZmVybnQoLSkiCittc2dzdHJbMV0gIiwgJWQgWmVpbGVuIGVudGZlcm50KC0pIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCi1tc2dzdHIgIkJpdHRlIHfDpGhsZW4gU2llIGVpbmVuIFp3ZWlnIHp1bSB1bWJlbmVubmVuLiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MjAyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJad2VpZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gVW1iZW5lbm5lbiB2b24gwrslc8KrLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjE3Ci1tc2dpZCAiU3RhcnRpbmcuLi4iCi1tc2dzdHIgIlN0YXJ0ZW4uLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNgotbXNnaWQgIkZpbGUgQnJvd3NlciIKLW1zZ3N0ciAiRGF0ZWktQnJvd3NlciIKLQotIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyAlcy4uLiIKLW1zZ3N0ciAiJXMgbGFkZW4uLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxODcKLW1zZ2lkICJbVXAgVG8gUGFyZW50XSIKLW1zZ3N0ciAiW05hY2ggb2Jlbl0iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNjcgbGliL2Jyb3dzZXIudGNsOjI3MwotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCi1tc2dzdHIgIkRhdGVpZW4gZGVzIFp3ZWlncyBkdXJjaGJsw6R0dGVybiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5OAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyOAotbXNnaWQgIkJyb3dzZSIKLW1zZ3N0ciAiQmzDpHR0ZXJuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKLW1zZ3N0ciAiw4RuZGVydW5nZW4gwrslc8KrIHZvbiDCuyVzwqsgYW5mb3JkZXJuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKLW1zZ3N0ciAiRmVobGVyOiDCuyVzwqsga2FubiBuaWNodCBhbHMgWndlaWcgb2RlciBWZXJzaW9uIGVya2FubnQgd2VyZGVuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQotIzogbGliL3NzaGtleS50Y2w6NTMKLW1zZ2lkICJDbG9zZSIKLW1zZ3N0ciAiU2NobGllw59lbiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCi1tc2dzdHIgIlp3ZWlnIMK7JXPCqyBleGlzdGllcnQgbmljaHQuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCi1tc2dzdHIgIkZlaGxlciBiZWltIEVpbnJpY2h0ZW4gZGVyIHZlcmVpbmZhY2h0ZW4gZ2l0LXB1bGwgZsO8ciDCuyVzwqsuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjM0NjAKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgotIlxuIgotIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCi0iQSBtZXJnZSBpcyByZXF1aXJlZC4iCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgogbXNnc3RyICIiCi0iWndlaWcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLlxuIgotIlxuIgotIlp3ZWlnIGthbm4gbmljaHQgbWl0IMK7JXPCqyBzY2huZWxsenVzYW1tZW5nZWbDvGhydCB3ZXJkZW4uIFJlZ3Vsw6RyZXMgIgotIlp1c2FtbWVuZsO8aHJlbiBpc3Qgbm90d2VuZGlnLiIKKyJGZWhsZXIgYmVpbSBQYXJzZW4gZGVzIC0tZGlyc3RhdC8tWCBPcHRpb25zcGFyYW1ldGVyczpcbiIKKyIlcyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc21ldGhvZGUgwrslc8KrIG5pY2h0IHVudGVyc3TDvHR6dC4iCisjOiBncGctaW50ZXJmYWNlLmM6NTkKK21zZ2lkICJjb3VsZCBub3QgcnVuIGdwZy4iCittc2dzdHIgImtvbm50ZSBncGcgbmljaHQgYXVzZsO8aHJlbiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgotbXNnc3RyICJBa3R1YWxpc2llcmVuIHZvbiDCuyVzwqsgZmVobGdlc2NobGFnZW4uIgorIzogZ3BnLWludGVyZmFjZS5jOjcxCittc2dpZCAiZ3BnIGRpZCBub3QgYWNjZXB0IHRoZSBkYXRhIgorbXNnc3RyICJncGcgaGF0IGRpZSBEYXRlbiBuaWNodCBha3plcHRpZXJ0IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAotbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKLW1zZ3N0ciAiQmVyZWl0c3RlbGx1bmcgKMK7aW5kZXjCqykgaXN0IHp1ciBCZWFyYmVpdHVuZyBnZXNwZXJydCAowrtsb2NrZWTCqykuIgorIzogZ3BnLWludGVyZmFjZS5jOjgyCittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcgYmVpbSBTaWduaWVyZW4gZGVyIERhdGVuIGZlaGxnZXNjaGxhZ2VuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OQorIzogZ3JlcC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiclcyc6IGtvbm50ZSBuaWNodCBsZXNlbiAlcyIKKworIzogZ3JlcC5jOjEzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIiclcyc6ICVzIgorCisjOiBncmVwLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkICVzIgorbXNnc3RyICInJXMnOiByZWFkKCkgenUga3VyeiAlcyIKKworIzogaGVscC5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgIlZvcmhhbmRlbmUgR2l0LUtvbW1hbmRvcyBpbiAnJXMnIgorCisjOiBoZWxwLmM6MjE5Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICJWb3JoYW5kZW5lIEdpdC1Lb21tYW5kb3MgaXJnZW5kd28gaW4gZGVpbmVtICRQQVRIIgorCisjOiBoZWxwLmM6Mjc1CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgogbXNnc3RyICIiCi0iRGVyIGxldHp0ZSBnZWxhZGVuZSBTdGF0dXMgc3RpbW10IG5pY2h0IG1laHIgbWl0IGRlbSBQcm9qZWt0YXJjaGl2IMO8YmVyZWluLlxuIgotIlxuIgotIkVpbiBhbmRlcmVzIEdpdC1Qcm9ncmFtbSBoYXQgZGFzIFByb2pla3RhcmNoaXYgc2VpdCBkZW0gbGV0enRlbiBMYWRlbiAiCi0iZ2XDpG5kZXJ0LiAgVm9yIGRlbSBXZWNoc2VsbiBkZXMgbG9rYWxlbiBad2VpZ3MgbXVzcyBuZXUgZ2VsYWRlbiB3ZXJkZW4uXG4iCi0iXG4iCi0iRXMgd2lyZCBnbGVpY2ggbmV1IGdlbGFkZW4uXG4iCisiJyVzJyBzY2hlaW50IGVpbiBnaXQtS29tbWFuZG8genUgc2Vpbiwga29ubnRlIGFiZXJcbiIKKyJuaWNodCBhdXNnZWbDvGhydCB3ZXJkZW4uIFZpZWxsZWljaHQgaXN0IGdpdC0lcyBmZWhsZXJoYWZ0PyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgotbXNnc3RyICJBcmJlaXRza29waWUgdW1zdGVsbGVuIGF1ZiDCuyVzwqsuLi4iCisjOiBoZWxwLmM6MzMyCittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIlVoIG9oLiBLZWluZSBHaXQtS29tbWFuZG9zIGF1ZiBkZWluZW0gU3lzdGVtIHZvcmhhbmRlbi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Ci1tc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCi1tc2dzdHIgIkRhdGVpZW4gYWt0dWFsaXNpZXJ0IgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3J0ZWQgY2hlY2tvdXQgb2YgJyVzJyAoZmlsZSBsZXZlbCBtZXJnaW5nIGlzIHJlcXVpcmVkKS4iCi1tc2dzdHIgIiIKLSJBdWYgWndlaWcgwrslc8KrIHVtc3RlbGxlbiBhYmdlYnJvY2hlbiAoWnVzYW1tZW5mw7xocmVuIGRlciBEYXRlaWVuIGlzdCAiCi0ibm90d2VuZGlnKS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3Ci1tc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBkZXIgRGF0ZWllbiBpc3Qgbm90d2VuZGlnLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKLW1zZ3N0ciAiRXMgd2lyZCBhdWYgWndlaWcgwrslc8KrIHZlcmJsaWViZW4uIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgorIzogaGVscC5jOjM1NAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCi0iXG4iCi0iSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCi0iQ2hlY2tvdXQnLiIKKyJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuXG4iCisiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnIgogbXNnc3RyICIiCi0iRGllIEFyYmVpdHNrb3BpZSBpc3QgbmljaHQgYXVmIGVpbmVtIGxva2FsZW4gWndlaWcuXG4iCi0iXG4iCi0iV2VubiBTaWUgYXVmIGVpbmVtIFp3ZWlnIGFyYmVpdGVuIG3DtmNodGVuLCBlcnN0ZWxsZW4gU2llIGJpdHRlIGpldHp0IGVpbmVuICIKLSJad2VpZyBtaXQgZGVyIEF1c3dhaGwgwrtBYmdldHJlbm50ZSBBcmJlaXRza29waWUtVmVyc2lvbsKrLiIKKyJXYXJudW5nOiBEdSBoYXN0IGRhcyBuaWNodCBleGlzdGllcmVuZGUgR2l0LUtvbW1hbmRvICclcycgYXVzZ2Vmw7xocnQuXG4iCisiU2V0emUgZm9ydCB1bnRlciBkZXIgQW5uYWhtZSBkYXMgZHUgJyVzJyBnZW1laW50IGhhc3QiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgIlVtZ2VzdGVsbHQgYXVmIMK7JXPCqy4iCisjOiBoZWxwLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImluICUwLjFmIHNlY29uZHMgYXV0b21hdGljYWxseS4uLiIKK21zZ3N0ciAiYXV0b21hdGlzY2ggaW4gJTAuMWYgU2VrdW5kZW4uLi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKLW1zZ3N0ciAiWnVyw7xja3NldHplbiB2b24gwrslc8KrIG5hY2ggwrslc8KrIHdpcmQgZm9sZ2VuZGUgVmVyc2lvbmVuIHZlcndlcmZlbjoiCisjOiBoZWxwLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdDogJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZC4gU2VlICdnaXQgLS1oZWxwJy4iCittc2dzdHIgImdpdDogJyVzJyBpc3Qga2VpbiBHaXQtS29tbWFuZG8uIFNpZWhlICdnaXQgLS1oZWxwJy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Ci1tc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKLW1zZ3N0ciAiIgotIlZlcndvcmZlbmUgVmVyc2lvbmVuIGvDtm5uZW4gbnVyIG1pdCBncsO2w59lcmVtIEF1ZndhbmQgd2llZGVyaGVyZ2VzdGVsbHQgIgotIndlcmRlbi4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXQgJyVzJz8iCi1tc2dzdHIgIsK7JXPCqyB6dXLDvGNrc2V0emVuPyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjcgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCi1tc2dpZCAiVmlzdWFsaXplIgotbXNnc3RyICJEYXJzdGVsbGVuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQotIywgdGNsLWZvcm1hdAorIzogaGVscC5jOjM3MAogbXNnaWQgIiIKLSJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgogIlxuIgotIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCAiCi0ieW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCiAiXG4iCi0iVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyJIYXN0IGR1IGRhcyBnZW1laW50PyIKK21zZ3N0clsxXSAiIgorIlxuIgorIkhhc3QgZHUgZWluZXMgdm9uIGRpZXNlbiBnZW1laW50PyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIodW5nw7xsdGlnZSBWZXJzaW9uKVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5mb19jYWNoZSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiYWRkaW5mb19jYWNoZSBmw7xyIFBmYWQgJyVzJyBmZWhsZ2VzY2hsYWdlbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjY4Cittc2dpZCAiZXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXIgQsOkdW1lIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlcyBQZmFkZXMgJyVzJyVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiRW50ZmVybmUgJXMgdW0gUGxhdHogZsO8ciBVbnRlcnZlcnplaWNobmlzIHp1IHNjaGFmZmVuXG4iCisKKyMuIHNvbWV0aGluZyBlbHNlIGV4aXN0cworIy4gLi4gYnV0IG5vdCBzb21lIG90aGVyIGVycm9yICh3aG8gcmVhbGx5IGNhcmVzIHdoYXQ/KQorIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njk3IG1lcmdlLXJlY3Vyc2l2ZS5jOjcxOAorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogdmllbGxlaWNodCBlaW4gVmVyemVpY2huaXMvRGF0ZWktS29uZmxpa3Q/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJ2ZXJ3ZWlnZXJlLCBkYSB1bmJlb2JhY2h0ZXRlIERhdGVpZW4gaW4gJyVzJyB2ZXJsb3JlbiBnZWhlbiB3w7xyZGVuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgImthbm4gT2JqZWt0ICVzICclcycgbmljaHQgbGVzZW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICJCbG9iIGVyd2FydGV0IGbDvHIgJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzczIGJ1aWx0aW4vY2xvbmUuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5ZmZm5lbiB2b24gJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBlaW5lciBzeW1ib2xpc2NoZW4gVmVya27DvHBmdW5nIGbDvHIgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIndlacOfIG5pY2h0IHdhcyBtaXQgJTA2byAlcyAnJXMnIHp1IG1hY2hlbiBpc3QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkyMQorbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICJGZWhsZXIgYmVpIEF1c2bDvGhydW5nIGRlciBpbnRlcm5lbiBadXNhbW1lbmbDvGhydW5nIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAiS29ubnRlICVzIG5pY2h0IHp1ciBEYXRlbmJhbmsgaGluenVmw7xnZW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0MQorbXNnaWQgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlIGluIHRoZSB0cmVlIgorbXNnc3RyICJuaWNodCB1bnRlcnN0w7x0enRlciBPYmpla3R0eXAgaW0gQmF1bSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAyMCBtZXJnZS1yZWN1cnNpdmUuYzoxMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZS4iCiBtc2dzdHIgIiIKLSJMb2thbGVyIFp3ZWlnIGthbm4gbmljaHQgZ2VzZXR6dCB3ZXJkZW4uXG4iCi0iXG4iCi0iRGllc2UgQXJiZWl0c2tvcGllIGlzdCBudXIgdGVpbHdlaXNlIHVtZ2VzdGVsbHQuIERpZSBEYXRlaWVuIHNpbmQga29ycmVrdCAiCi0iYWt0dWFsaXNpZXJ0LCBhYmVyIGVpbmlnZSBpbnRlcm5lIEdpdC1EYXRlaWVuIGtvbm50ZW4gbmljaHQgZ2XDpG5kZXJ0ICIKKyJLT05GTElLVCAoJXMvbMO2c2NoZW4pOiAlcyBnZWzDtnNjaHQgaW4gJXMgdW5kICVzIGluICVzLiBTdGFuZCAlcyB2b24gJXMgd3VyZGUgIgorImltIEFyYmVpdHNiZXJlaWNoIGdlbGFzc2VuLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAyNiBtZXJnZS1yZWN1cnNpdmUuYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMvbMO2c2NoZW4pOiAlcyBnZWzDtnNjaHQgaW4gJXMgdW5kICVzIGluICVzLiBTdGFuZCAlcyB2b24gJXMgd3VyZGUgIgorImltIEFyYmVpdHNiZXJlaWNoIGJlaSAlcyBnZWxhc3Nlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwODAKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgInVtYmVuZW5uZW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwODAKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICJ1bWJlbmFubnQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIGlzdCBlaW4gVmVyemVpY2huaXMgaW4gJXMsIGbDvGdlIGVzIHN0YXR0ZGVzc2VuIGFscyAlcyBoaW56dSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKHVtYmVuZW5uZW4vdW1iZW5lbm5lbik6IEJlbmVubmUgdW0gXCIlc1wiLT5cIiVzXCIgaW4gWndlaWcgXCIlc1wiICIKKyJ1bmQgXCIlc1wiLT5cIiVzXCIgaW4gWndlaWcgXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNjMKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAoYmxlaWJ0IHVuYXVmZ2Vsw7ZzdCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKHVtYmVuZW5uZW4vdW1iZW5lbm5lbik6IEJlbmVubmUgdW0gJXMtPiVzIGluICVzLiBCZW5lbm5lIHVtICVzLT4lcyAiCisiaW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiCittc2dzdHIgIkJlbmVubmUgc3RhdHRkZXNzZW4gJXMgbmFjaCAlcyB1bmQgJXMgbmFjaCAlcyB1bSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICVzIGFkZGVkIGluICVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKHVtYmVuZW5uZW4vaGluenVmw7xnZW4pOiBCZW5lbm5lIHVtICVzLT4lcyBpbiAlcy4gJXMgaGluenVnZWbDvGd0IGluICIKKyIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorbXNnc3RyICJGw7xnZSB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaSAlcyBoaW56dSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ2MSBtZXJnZS1yZWN1cnNpdmUuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJGw7xnZSBzdGF0dGRlc3NlbiBhbHMgJXMgaGluenUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJrYW5uIE9iamVrdCAlcyBuaWNodCBsZXNlbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAiT2JqZWt0ICVzIGlzdCBrZWluIEJsb2IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NjMKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIsOkbmRlcm4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NjMKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAiZ2XDpG5kZXJ0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTczCittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiSW5oYWx0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTgwCittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAiaGluenVmw7xnZW4vaGluenVmw7xnZW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICIlcyBhdXNnZWxhc3NlbiAoRXJnZWJuaXMgZGVyIFp1c2FtbWVuZsO8aHJ1bmcgZXhpc3RpZXJ0IGJlcmVpdHMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiYXV0b21hdGlzY2hlIFp1c2FtbWVuZsO8aHJ1bmcgdm9uICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjMyIGdpdC1zdWJtb2R1bGUuc2g6ODY5Cittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJVbnRlcnByb2pla3QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIktPTkZMSUtUICglcyk6IFp1c2FtbWVuZsO8aHJ1bmdza29uZmxpa3QgaW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIkVudGZlcm5lICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzQ4Cittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgIkRhdGVpL1ZlcnplaWNobmlzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzU0Cittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgIlZlcnplaWNobmlzL0RhdGVpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gQWRkaW5nICVzIGFzICVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKCVzKTogRXMgZXhpc3RpZXJ0IGJlcmVpdHMgZWluIFZlcnplaWNobmlzICVzIGluICVzLiBGw7xnZSAlcyBhbHMgJXMgIgorImhpbnp1LiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2OQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIkbDvGdlICVzIGhpbnp1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzg2Cittc2dpZCAiRmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iCittc2dzdHIgIkZhdGFsZXIgRmVobGVyIGJlaSBkZXIgWnVzYW1tZW5mw7xocnVuZy4gU29sbHRlIG5pY2h0IHBhc3NpZXJlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MDUKK21zZ2lkICJBbHJlYWR5IHVwLXRvLWRhdGUhIgorbXNnc3RyICJCZXJlaXRzIGFrdHVlbGwhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGRlciBCw6R1bWUgJXMgdW5kICVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVucHJvY2Vzc2VkIHBhdGg/Pz8gJXMiCittc2dzdHIgInVudmVyYXJiZWl0ZXRlciBQZmFkPz8/ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODg5Cittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmc6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICIldSBnZW1laW5zYW1lbiBWb3JmYWhyZW4gZ2VmdW5kZW4iCittc2dzdHJbMV0gIiV1IGdlbWVpbnNhbWUgVm9yZmFocmVuIGdlZnVuZGVuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTM5Cittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5nIGhhdCBrZWluZSBWZXJzaW9uIHp1csO8Y2tnZWdlYmVuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiS29ubnRlIE9iamVrdCAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMDggYnVpbHRpbi9tZXJnZS5jOjY5NgorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIktvbm50ZSBCZXJlaXRzdGVsbHVuZyBuaWNodCBzY2hyZWliZW4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NDk0Cittc2dpZCAiLi4uIgorbXNnc3RyICIuLi4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICJWZXJ3ZW5kdW5nOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uCisjOiBwYXJzZS1vcHRpb25zLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICAgICAgb2RlcjogJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHJlbW90ZS5jOjE2MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAiRGVpbiBad2VpZyBpc3Qgdm9yICclcycgdW0gJWQgVmVyc2lvbi5cbiIKK21zZ3N0clsxXSAiRGVpbiBad2VpZyBpc3Qgdm9yICclcycgdW0gJWQgVmVyc2lvbmVuLlxuIgorCisjOiByZW1vdGUuYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJEZWluIFp3ZWlnIGlzdCB6dSAnJXMnIHVtICVkIFZlcnNpb24gaGludGVyaGVyLCB1bmQga2FubiB2b3JnZXNwdWx0IHdlcmRlbi5cbiIKK21zZ3N0clsxXSAiIgorIkRlaW4gWndlaWcgaXN0IHp1ICclcycgdW0gJWQgVmVyc2lvbmVuIGhpbnRlcmhlciwgdW5kIGthbm4gdm9yZ2VzcHVsdCAiCiAid2VyZGVuLlxuIgotIlxuIgotIkRpZXMgaXN0IGVpbiBpbnRlcm5lciBQcm9ncmFtbWZlaGxlciB2b24gJXMuIFByb2dyYW1tIHdpcmQgamV0enQgYWJnZWJyb2NoZW4uIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Ci1tc2dpZCAiU2VsZWN0IgotbXNnc3RyICJBdXN3w6RobGVuIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCi1tc2dpZCAiRm9udCBGYW1pbHkiCi1tc2dzdHIgIlNjaHJpZnRmYW1pbGllIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Ci1tc2dpZCAiRm9udCBTaXplIgotbXNnc3RyICJTY2hyaWZ0Z3LDtsOfZSIKLQotIzogbGliL2Nob29zZV9mb250LnRjbDo5MQotbXNnaWQgIkZvbnQgRXhhbXBsZSIKLW1zZ3N0ciAiU2NocmlmdGJlaXNwaWVsIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworIzogcmVtb3RlLmM6MTY0NgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVGhpcyBpcyBleGFtcGxlIHRleHQuXG4iCi0iSWYgeW91IGxpa2UgdGhpcyB0ZXh0LCBpdCBjYW4gYmUgeW91ciBmb250LiIKLW1zZ3N0ciAiIgotIkRpZXMgaXN0IGVpbiBCZWlzcGllbHRleHQuXG4iCi0iV2VubiBJaG5lbiBkaWVzZXIgVGV4dCBnZWbDpGxsdCwgc29sbHRlbiBTaWUgZGllc2UgU2NocmlmdGFydCB3w6RobGVuLiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorIkRlaW4gWndlaWcgdW5kICclcycgc2luZCBkaXZlcmdpZXJ0LFxuIgorInVuZCBoYWJlbiBqZXdlaWxzICVkIHVuZCAlZCB1bnRlcnNjaGllZGxpY2hlIFZlcnNpb25lbi5cbiIKK21zZ3N0clsxXSAiIgorIkRlaW4gWndlaWcgdW5kICclcycgc2luZCBkaXZlcmdpZXJ0LFxuIgorInVuZCBoYWJlbiBqZXdlaWxzICVkIHVuZCAlZCB1bnRlcnNjaGllZGxpY2hlIFZlcnNpb25lbi5cbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOAotbXNnaWQgIkdpdCBHdWkiCi1tc2dzdHIgIkdpdCBHdWkiCisjOiBzZXF1ZW5jZXIuYzoxMjEgYnVpbHRpbi9tZXJnZS5jOjg2NCBidWlsdGluL21lcmdlLmM6OTc3CisjOiBidWlsdGluL21lcmdlLmM6MTA4NyBidWlsdGluL21lcmdlLmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCB6dW0gU2NocmVpYmVuIMO2ZmZuZW4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg2Ci1tc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgotbXNnc3RyICJOZXVlcyBQcm9qZWt0YXJjaGl2IgorIzogc2VxdWVuY2VyLmM6MTIzIGJ1aWx0aW4vbWVyZ2UuYzozMzMgYnVpbHRpbi9tZXJnZS5jOjg2NworIzogYnVpbHRpbi9tZXJnZS5jOjEwODkgYnVpbHRpbi9tZXJnZS5jOjExMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgIktvbm50ZSBuaWNodCBuYWNoICclcycgc2NocmVpYmVuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MwotbXNnaWQgIk5ldy4uLiIKLW1zZ3N0ciAiTmV1Li4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MQotbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIlByb2pla3RhcmNoaXYga2xvbmVuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgotbXNnaWQgIkNsb25lLi4uIgotbXNnc3RyICJLbG9uZW4uLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNgotbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiUHJvamVrdGFyY2hpdiDDtmZmbmVuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExOQotbXNnaWQgIk9wZW4uLi4iCi1tc2dzdHIgIsOWZmZuZW4uLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCi1tc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKLW1zZ3N0ciAiWnVsZXR6dCBiZW51dHp0ZSBQcm9qZWt0YXJjaGl2ZSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzgKLW1zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKLW1zZ3N0ciAiWnVsZXR6dCBiZW51dHp0ZXMgUHJvamVrdGFyY2hpdiDDtmZmbmVuOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiUHJvamVrdGFyY2hpdiDCuyVzwqsga29ubnRlIG5pY2h0IGVyc3RlbGx0IHdlcmRlbjoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzkxCi1tc2dpZCAiRGlyZWN0b3J5OiIKLW1zZ3N0ciAiVmVyemVpY2huaXM6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUyCi1tc2dpZCAiR2l0IFJlcG9zaXRvcnkiCi1tc2dzdHIgIkdpdCBQcm9qZWt0YXJjaGl2IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIlZlcnplaWNobmlzIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkRhdGVpIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY2Ci1tc2dpZCAiQ2xvbmUiCi1tc2dzdHIgIktsb25lbiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzkKLW1zZ2lkICJTb3VyY2UgTG9jYXRpb246IgotbXNnc3RyICJIZXJrdW5mdDoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkwCi1tc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCi1tc2dzdHIgIlppZWx2ZXJ6ZWljaG5pczoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCi1tc2dpZCAiQ2xvbmUgVHlwZToiCi1tc2dzdHIgIkFydCBkZXMgS2xvbmVuczoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4Ci1tc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgotbXNnc3RyICJTdGFuZGFyZCAoc2NobmVsbCwgdGVpbHdlaXNlIHJlZHVuZGFudCwgSGFyZGxpbmtzKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKLW1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCi1tc2dzdHIgIkFsbGVzIGtvcGllcmVuIChsYW5nc2FtZXIsIHZvbGxlIFJlZHVuZGFueikiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIwCi1tc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCi1tc2dzdHIgIlZlcmtuw7xwZnQgKHNjaG5lbGwsIG5pY2h0IGVtcGZvaGxlbiwga2VpbiBCYWNrdXApIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwMwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTkKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCi1tc2dzdHIgIktlaW4gR2l0LVByb2pla3RhcmNoaXYgaW4gwrslc8KrIGdlZnVuZGVuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTIKLW1zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIlN0YW5kYXJkIGlzdCBudXIgZsO8ciBsb2thbGUgUHJvamVrdGFyY2hpdmUgdmVyZsO8Z2Jhci4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk2Ci1tc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiVmVya27DvHBmdCBpc3QgbnVyIGbDvHIgbG9rYWxlIFByb2pla3RhcmNoaXZlIHZlcmbDvGdiYXIuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiUHJvamVrdGFyY2hpdiDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyOAotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgotbXNnc3RyICJEZXIgVXJzcHJ1bmdzb3J0IGtvbm50ZSBuaWNodCBlaW5nZXJpY2h0ZXQgd2VyZGVuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAotbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCi1tc2dzdHIgIk9iamVrdGUgd2VyZGVuIGdlesOkaGx0IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQotbXNnaWQgImJ1Y2tldHMiCi1tc2dzdHIgIkJ1Y2tldHMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgotbXNnc3RyICJLb3BpZW4gdm9uIE9iamVrdGVuL0luZm8vQWx0ZXJuYXRlcyBrb25udGVuIG5pY2h0IGVyc3RlbGx0IHdlcmRlbjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKLW1zZ3N0ciAiVm9uIMK7JXPCqyBrb25udGUgbmljaHRzIGdla2xvbnQgd2VyZGVuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI5Ci1tc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgotbXNnc3RyICJEZXIgwrttYXN0ZXLCqy1ad2VpZyB3dXJkZSBub2NoIG5pY2h0IGluaXRpYWxpc2llcnQuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNgotbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCi1tc2dzdHIgIkhhcmRsaW5rcyBuaWNodCB2ZXJmw7xnYmFyLiBTdGF0dGRlc3NlbiB3aXJkIGtvcGllcnQuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKLW1zZ3N0ciAiS29waWVyZW4gdm9uIMK7JXPCqyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTkKLW1zZ2lkICJDb3B5aW5nIG9iamVjdHMiCi1tc2dzdHIgIk9iamVrdGRhdGVuYmFuayBrb3BpZXJlbiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjAKLW1zZ2lkICJLaUIiCi1tc2dzdHIgIktCIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCi1tc2dzdHIgIk9iamVrdCBrYW5uIG5pY2h0IGtvcGllcnQgd2VyZGVuOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKLW1zZ2lkICJMaW5raW5nIG9iamVjdHMiCi1tc2dzdHIgIk9iamVrdGUgdmVybGlua2VuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NQotbXNnaWQgIm9iamVjdHMiCi1tc2dzdHIgIk9iamVrdGUiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCi1tc2dzdHIgIkbDvHIgT2JqZWt0IGtvbm50ZSBrZWluIEhhcmRsaW5rIGVyc3RlbGx0IHdlcmRlbjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4Ci1tc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiIgotIlp3ZWlnZSB1bmQgT2JqZWt0ZSBrb25udGVuIG5pY2h0IGFuZ2Vmb3JkZXJ0IHdlcmRlbi4gIEtvbnRyb2xsaWVyZW4gU2llIGRpZSAiCi0iQXVzZ2FiZW4gYXVmIGRlciBLb25zb2xlIGbDvHIgd2VpdGVyZSBBbmdhYmVuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSJNYXJraWVydW5nZW4ga29ubnRlbiBuaWNodCBhbmdlZm9yZGVydCB3ZXJkZW4uICBLb250cm9sbGllcmVuIFNpZSBkaWUgIgotIkF1c2dhYmVuIGF1ZiBkZXIgS29uc29sZSBmw7xyIHdlaXRlcmUgQW5nYWJlbi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCi1tc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiIgotIkRpZSBad2VpZ3NwaXR6ZSAoSEVBRCkga29ubnRlIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4gIEtvbnRyb2xsaWVyZW4gU2llIGRpZSAiCi0iQXVzZ2FiZW4gYXVmIGRlciBLb25zb2xlIGbDvHIgd2VpdGVyZSBBbmdhYmVuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKLW1zZ3N0ciAiVmVyemVpY2huaXMgwrslc8KrIGthbm4gbmljaHQgYXVmZ2Vyw6R1bXQgd2VyZGVuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDgKLW1zZ2lkICJDbG9uZSBmYWlsZWQuIgotbXNnc3RyICJLbG9uZW4gZmVobGdlc2NobGFnZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQotbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKLW1zZ3N0ciAiS2VpbiB2b3JlaW5nZXN0ZWxsdGVyIFp3ZWlnIGdlZnVuZGVuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCi1tc2dzdHIgIsK7JXPCqyB3dXJkZSBuaWNodCBhbHMgVmVyc2lvbiBnZWZ1bmRlbi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Ci1tc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgIkFyYmVpdHNrb3BpZSBlcnN0ZWxsZW4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKLSM6IGxpYi9pbmRleC50Y2w6MTk4Ci1tc2dpZCAiZmlsZXMiCi1tc2dzdHIgIkRhdGVpZW4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTY4Ci1tc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCi1tc2dzdHIgIkVyc3RlbGxlbiBkZXIgQXJiZWl0c2tvcGllIGZlaGxnZXNjaGxhZ2VuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDExCi1tc2dpZCAiT3BlbiIKLW1zZ3N0ciAiw5ZmZm5lbiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIxCi1tc2dpZCAiUmVwb3NpdG9yeToiCi1tc2dzdHIgIlByb2pla3RhcmNoaXY6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiUHJvamVrdGFyY2hpdiDCuyVzwqsga29ubnRlIG5pY2h0IGdlw7ZmZm5ldCB3ZXJkZW4uIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMKLW1zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgotbXNnc3RyICJBYmdldHJlbm50ZSBBcmJlaXRza29waWUtVmVyc2lvbiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjYwCi1tc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCi1tc2dzdHIgIlZlcnNpb24gUmVnZXhwLUF1c2RydWNrOiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjc0Ci1tc2dpZCAiTG9jYWwgQnJhbmNoIgotbXNnc3RyICJMb2thbGVyIFp3ZWlnIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKLW1zZ2lkICJUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIsOcYmVybmFobWV6d2VpZyIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjg0IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzgKLW1zZ2lkICJUYWciCi1tc2dzdHIgIk1hcmtpZXJ1bmciCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKLW1zZ3N0ciAiVW5nw7xsdGlnZSBWZXJzaW9uOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjMzOAotbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKLW1zZ3N0ciAiS2VpbmUgVmVyc2lvbiBhdXNnZXfDpGhsdC4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKLW1zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKLW1zZ3N0ciAiVmVyc2lvbnMtQXVzZHJ1Y2sgaXN0IGxlZXIuIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMxCi1tc2dpZCAiVXBkYXRlZCIKLW1zZ3N0ciAiQWt0dWFsaXNpZXJ0IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Ci1tc2dpZCAiVVJMIgotbXNnc3RyICJVUkwiCi0KLSM6IGxpYi9jb21taXQudGNsOjkKKyM6IHNlcXVlbmNlci5jOjE0NAogbXNnaWQgIiIKLSJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgotIlxuIgotIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCi0idG8gYW1lbmQuXG4iCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKIG1zZ3N0ciAiIgotIktlaW5lIFZlcnNpb24genVyIE5hY2hiZXNzZXJ1bmcgdm9yaGFuZGVuLlxuIgotIlxuIgotIlNpZSBzaW5kIGRhYmVpLCBkaWUgZXJzdGUgVmVyc2lvbiB6dSDDvGJlcnRyYWdlbi4gRXMgZ2lidCBrZWluZSBleGlzdGllcmVuZGUgIgotIlZlcnNpb24sIGRpZSBTaWUgbmFjaGJlc3Nlcm4ga8O2bm50ZW4uXG4iCisibmFjaCBBdWZsw7ZzdW5nIGRlciBLb25mbGlrdGUsIG1hcmtpZXJlIGRpZSBrb3JyaWdpZXJ0ZW4gUGZhZGVcbiIKKyJtaXQgJ2dpdCBhZGQgPFBmYWRlPicgb2RlciAnZ2l0IHJtIDxQZmFkZT4nIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxOAorIzogc2VxdWVuY2VyLmM6MTQ3CiBtc2dpZCAiIgotIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgotIlxuIgotIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCi0iY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKLSJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCiBtc2dzdHIgIiIKLSJOYWNoYmVzc2VydW5nIHfDpGhyZW4gWnVzYW1tZW5mw7xocnVuZyBuaWNodCBtw7ZnbGljaC5cbiIKLSJcbiIKLSJTaWUgaGFiZW4gZGFzIFp1c2FtbWVuZsO8aHJlbiB2b24gVmVyc2lvbmVuIGFuZ2VmYW5nZW4sIGFiZXIgbm9jaCBuaWNodCAiCi0iYmVlbmRldC4gU2llIGvDtm5uZW4ga2VpbmUgdm9yaWdlIMOcYmVydHJhZ3VuZyBuYWNoYmVzc2Vybiwgc29sYW5nZSBlaW5lICIKLSJ1bmZlcnRpZ2UgWnVzYW1tZW5mw7xocnVuZyBleGlzdGllcnQuIERhenUgbcO8c3NlbiBTaWUgZGllIFp1c2FtbWVuZsO8aHJ1bmcgIgotImJlZW5kZW4gb2RlciBhYmJyZWNoZW4uXG4iCisibmFjaCBBdWZsw7ZzdW5nIGRlciBLb25mbGlrdGUsIG1hcmtpZXJlIGRpZSBrb3JyaWdpZXJ0ZW4gUGZhZGVcbiIKKyJtaXQgJ2dpdCBhZGQgPFBmYWRlPicgb2RlciAnZ2l0IHJtIDxQZmFkZT4ndW5kIHRyYWdlIGRhcyBFcmdlYm5pcyBlaW4gbWl0ICIKKyInZ2l0IGNvbW1pdCciCiAKLSM6IGxpYi9jb21taXQudGNsOjQ4Ci1tc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXIgVmVyc2lvbnNkYXRlbiBmw7xyIE5hY2hiZXNzZXJuOiIKKyM6IHNlcXVlbmNlci5jOjE2MCBzZXF1ZW5jZXIuYzo3NTggc2VxdWVuY2VyLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAiS29ubnRlIG5pY2h0IG5hY2ggJXMgc2NocmVpYmVuIgogCi0jOiBsaWIvY29tbWl0LnRjbDo3NQotbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCi1tc2dzdHIgIkJlbnV0emVybmFtZSBrb25udGUgbmljaHQgYmVzdGltbXQgd2VyZGVuOiIKKyM6IHNlcXVlbmNlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaSBOYWNoYmVyZWl0dW5nIHZvbiAlcyIKIAotIzogbGliL2NvbW1pdC50Y2w6ODAKLW1zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgotbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IHZvbiBHSVRfQ09NTUlUVEVSX0lOREVOVDoiCisjOiBzZXF1ZW5jZXIuYzoxNzgKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisiRGVpbmUgbG9rYWxlbiDDhG5kZXJ1bmdlbiB3w7xyZGVuIHZvbiBcImNoZXJyeS1waWNrXCIgw7xiZXJzY2hyaWViZW4gd2VyZGVuLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCi1tc2dzdHIgIldhcm5pbmc6IFRjbC9UayB1bnRlcnN0w7x0enQgZGllIFplaWNoZW5jb2RpZXJ1bmcgwrslc8KrIG5pY2h0LiIKKyM6IHNlcXVlbmNlci5jOjE4MAorbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSByZXZlcnQuIgorbXNnc3RyICJEZWluZSBsb2thbGVuIMOEbmRlcnVuZ2VuIHfDvHJkZW4gdm9uIFwicmV2ZXJ0XCIgw7xiZXJzY2hyaWViZW4gd2VyZGVuLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTQ5CisjOiBzZXF1ZW5jZXIuYzoxODMKK21zZ2lkICJDb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgIlRyYWdlIGRlaW5lIMOEbmRlcnVuZ2VuIGVpbiBvZGVyIGJlbnV0emUgXCJzdGFzaFwiIHVtIGZvcnR6dWZhaHJlbi4iCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiIG9yICJjaGVycnktcGljayIKKyM6IHNlcXVlbmNlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczogS29ubnRlIG5ldWUgQmVyZWl0c3RlbGx1bmdzZGF0ZWkgbmljaHQgc2NocmVpYmVuIgorCisjOiBzZXF1ZW5jZXIuYzoyNjEKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIGNvbW1pdFxuIgorbXNnc3RyICJLb25udGUgVmVyc2lvbiBkZXIgWndlaWdzcGl0emUgKEhFQUQpIG5pY2h0IGF1ZmzDtnNlblxuIgorCisjOiBzZXF1ZW5jZXIuYzoyODIKK21zZ2lkICJVbmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWVcbiIKK21zZ3N0ciAiS29ubnRlIHp3aXNjaGVuZ2VzcGVpY2hlcnRlbiBCYXVtIG5pY2h0IGFrdHVhbGlzaWVyZW5cbiIKKworIzogc2VxdWVuY2VyLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIKK21zZ3N0ciAiS29ubnRlIFZlcnNpb24gJXMgbmljaHQgcGFyc2VuXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlc1xuIgorbXNnc3RyICJLb25udGUgRWx0ZXJudmVyc2lvbiAlcyBuaWNodCBwYXJzZW5cbiIKKworIzogc2VxdWVuY2VyLmM6Mzk1Cittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiRGVpbmUgQmVyZWl0c3RlbGx1bmdzZGF0ZWkgaXN0IG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnQuIgorCisjOiBzZXF1ZW5jZXIuYzozOTgKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFEIgorbXNnc3RyICJEdSBoYXN0IGtlaW5lIGfDvGx0aWdlIFp3ZWlnc3BpdHplIChIRUFEKSIKKworIzogc2VxdWVuY2VyLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAiIgorIlZlcnNpb24gJXMgaXN0IGVpbmUgWnVzYW1tZW5mw7xocnVuZywgYWJlciBkaWUgT3B0aW9uIC1tIHd1cmRlIG5pY2h0ICIKKyJhbmdlZ2ViZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIgorbXNnc3RyICJWZXJzaW9uICVzIGhhdCBrZWluZW4gRWx0ZXJudGVpbCAlZCIKKworIzogc2VxdWVuY2VyLmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCittc2dzdHIgIiIKKyJIYXVwdGxpbmllIHd1cmRlIHNwZXppZml6aWVydCwgYWJlciBWZXJzaW9uICVzIGlzdCBrZWluZSBadXNhbW1lbmbDvGhydW5nLiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlICJyZXZlcnQiIG9yCisjLiAiY2hlcnJ5LXBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMQorIzogc2VxdWVuY2VyLmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6IGthbm4gRWx0ZXJudmVyc2lvbiAlcyBuaWNodCBwYXJzZW4iCisKKyM6IHNlcXVlbmNlci5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiS2FubiBrZWluZSBWZXJzaW9uc2Jlc2NocmVpYnVuZyBmw7xyICVzIGJla29tbWVuIgorCisjOiBzZXF1ZW5jZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAiS29ubnRlICVzIG5pY2h0IHp1csO8Y2tzZXR6ZW4uLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBhbndlbmRlbi4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6NTUzCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgImxlZXJlIE1lbmdlIHZvbiBWZXJzaW9uZW4gw7xiZXJnZWJlbiIKKworIzogc2VxdWVuY2VyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IEZlaGxlciBiZWltIExlc2VuIGRlciBCZXJlaXRzdGVsbHVuZyIKKworIzogc2VxdWVuY2VyLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IEZlaGxlciBiZWltIEFrdHVhbGlzaWVyZW4gZGVyIEJlcmVpdHN0ZWxsdW5nIgorCisjOiBzZXF1ZW5jZXIuYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICVzIGR1cmluZyBhICVzIgorbXNnc3RyICJLYW5uICVzIG5pY2h0IHfDpGhyZW5kIGVpbmVzICVzIGR1cmNoZsO8aHJlbiIKKworIzogc2VxdWVuY2VyLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBsaW5lICVkLiIKK21zZ3N0ciAiS29ubnRlIFplaWxlICVkIG5pY2h0IHBhcnNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjY1MQorbXNnaWQgIk5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAiS2VpbmUgVmVyc2lvbmVuIGdlcGFyc3QuIgorCisjOiBzZXF1ZW5jZXIuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXMiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCDDtmZmbmVuIgorCisjOiBzZXF1ZW5jZXIuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgJXMuIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgbGVzZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICVzIgorbXNnc3RyICJVbmJlbnV0emJhcmVzIEluc3RydWt0aW9uc2JsYXR0OiAlcyIKKworIzogc2VxdWVuY2VyLmM6NzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgU2NobMO8c3NlbDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgZsO8ciAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJXMiCittc2dzdHIgIkZlaGxlcmhhZnRlcyBPcHRpb25zYmxhdHQ6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3MzkKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJcImNoZXJyeS1waWNrXCIgb2RlciBcInJldmVydFwiIGlzdCBiZXJlaXRzIGltIEdhbmciCisKKyM6IHNlcXVlbmNlci5jOjc0MAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCittc2dzdHIgInZlcnN1Y2hlIFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKKworIzogc2VxdWVuY2VyLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiS29ubnRlIFwic2VxdWVuY2VyXCItVmVyemVpY2huaXMgJXMgbmljaHQgZXJzdGVsbGVuIgorCisjOiBzZXF1ZW5jZXIuYzo3NjAgc2VxdWVuY2VyLmM6ODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRWlucGFja2VuIHZvbiAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjc3OSBzZXF1ZW5jZXIuYzo5MTMKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImtlaW4gXCJjaGVycnktcGlja1wiIG9kZXIgXCJyZXZlcnRcIiBpbSBHYW5nIgorCisjOiBzZXF1ZW5jZXIuYzo3ODEKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJrYW5uIFp3ZWlnc3BpdHplIChIRUFEKSBuaWNodCBhdWZsw7ZzZW4iCisKKyM6IHNlcXVlbmNlci5jOjc4MworbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJrYW5uIG5pY2h0IGFiYnJlY2hlbjogYmluIGF1ZiBlaW5lbSBad2VpZywgZGVyIG5vY2ggZ2Vib3JlbiB3aXJkIgorCisjOiBzZXF1ZW5jZXIuYzo4MDUgYnVpbHRpbi9hcHBseS5jOjM5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJLYW5uICVzIG5pY2h0IMO2ZmZuZW46ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJLYW5uICVzIG5pY2h0IGxlc2VuOiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODA5Cittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiVW5lcndhcnRldGVzIERhdGVpZW5kZSIKKworIzogc2VxdWVuY2VyLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorImdlc3BlaWNoZXJ0ZSBcInByZS1jaGVycnktcGlja1wiIERhdGVpIGRlciBad2VpZ3NwaXR6ZSAoSEVBRCkgJyVzJyBpc3QgIgorImJlc2Now6RkaWd0IgorCisjOiBzZXF1ZW5jZXIuYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZvcm1hdCAlcy4iCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBmb3JtYXRpZXJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjEwMDAKK21zZ2lkICJDYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIkthbm4gbmljaHQgenUgaW5pdGlhbGVyIFZlcnNpb24genVyw7xja3NldHplbi4iCisKKyM6IHNlcXVlbmNlci5jOjEwMDEKK21zZ2lkICJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIkthbm4gXCJjaGVycnktcGlja1wiIG5pY2h0IGluIGVpbmVtIGxlZXJlbSBLb3BmIGF1c2bDvGhyZW4uIgorCisjOiBzaGExX25hbWUuYzoxMDQ0Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiWndlaWdzcGl0emUgKEhFQUQpIHplaWd0IGF1ZiBrZWluZW4gWndlaWciCisKKyM6IHNoYTFfbmFtZS5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIktlaW4gc29sY2hlciBad2VpZyAnJXMnIgorCisjOiBzaGExX25hbWUuYzoxMDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICJLZWluIGVudGZlcm50ZXMgUHJvamVrdGFyY2hpdiBmw7xyIFp3ZWlnICclcycga29uZmlndXJpZXJ0LiIKKworIzogc2hhMV9uYW1lLmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorIlp3ZWlnICclcycgZGVzIGVudGZlcm50ZW4gUHJvamVrdGFyY2hpdnMgaXN0IGtlaW4gZ2Vmb2xndGVyIMOcYmVybmFobWV6d2VpZyIKKworIzogd3JhcHBlci5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCBjdXJyZW50IHVzZXIgaW4gdGhlIHBhc3N3ZCBmaWxlOiAlcyIKK21zZ3N0ciAia29ubnRlIGFrdHVlbGxlbiBCZW51dHplciBuaWNodCBpbiBQYXNzd29ydC1EYXRlaSBmaW5kZW46ICVzIgorCisjOiB3cmFwcGVyLmM6NDE0Cittc2dpZCAibm8gc3VjaCB1c2VyIgorbXNnc3RyICJrZWluIHNvbGNoZXIgQmVudXR6ZXIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiTmljaHQgenVzYW1tZW5nZWbDvGhydGUgUGZhZGU6IgorCisjOiB3dC1zdGF0dXMuYzoxNjcgd3Qtc3RhdHVzLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emUgXCJnaXQgcmVzZXQgJXMgPERhdGVpPi4uLlwiIHp1bSBIZXJhdXNuZWhtZW4gYXVzIGRlciAiCisiQmVyZWl0c3RlbGx1bmcpIgorCisjOiB3dC1zdGF0dXMuYzoxNjkgd3Qtc3RhdHVzLmM6MTk2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAoYmVudXR6ZSBcImdpdCBybSAtLWNhY2hlZCA8RGF0ZWk+Li4uXCIgenVtIEhlcmF1c25laG1lbiBhdXMgZGVyICIKKyJCZXJlaXRzdGVsbHVuZykiCisKKyM6IHd0LXN0YXR1cy5jOjE3MworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAoYmVudXR6ZSBcImdpdCBhZGQvcm0gPERhdGVpPi4uLlwiIHVtIGRpZSBBdWZsw7ZzdW5nIHp1IG1hcmtpZXJlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE3NSB3dC1zdGF0dXMuYzoxNzkKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgIChiZW51dHplIFwiZ2l0IGFkZC9ybSA8RGF0ZWk+Li4uXCIgdW0gZGllIEF1ZmzDtnN1bmcgZW50c3ByZWNoZW5kIHp1ICIKKyJtYXJraWVyZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNzcKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAoYmVudXR6ZSBcImdpdCBhZGQvcm0gPERhdGVpPi4uLlwiIHVtIGRpZSBBdWZsw7ZzdW5nIHp1IG1hcmtpZXJlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE4OAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAienVtIEVpbnRyYWdlbiBiZXJlaXRnZXN0ZWxsdGUgw4RuZGVydW5nZW46IgorCisjOiB3dC1zdGF0dXMuYzoyMDYKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIsOEbmRlcnVuZ2VuLCBkaWUgbmljaHQgenVtIEVpbnRyYWdlbiBiZXJlaXRnZXN0ZWxsdCBzaW5kOiIKKworIzogd3Qtc3RhdHVzLmM6MjEwCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKGJlbnV0emUgXCJnaXQgYWRkIDxEYXRlaT4uLi5cIiB6dW0gQmVyZWl0c3RlbGxlbikiCisKKyM6IHd0LXN0YXR1cy5jOjIxMgorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgIChiZW51dHplIFwiZ2l0IGFkZC9ybSA8RGF0ZWk+Li4uXCIgenVtIEJlcmVpdHN0ZWxsZW4pIgorCisjOiB3dC1zdGF0dXMuYzoyMTMKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIiAgKHVzZSBcImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgogbXNnc3RyICIiCi0iRGVyIGxldHp0ZSBnZWxhZGVuZSBTdGF0dXMgc3RpbW10IG5pY2h0IG1laHIgbWl0IGRlbSBQcm9qZWt0YXJjaGl2IMO8YmVyZWluLlxuIgotIlxuIgotIkVpbiBhbmRlcmVzIEdpdC1Qcm9ncmFtbSBoYXQgZGFzIFByb2pla3RhcmNoaXYgc2VpdCBkZW0gbGV0enRlbiBMYWRlbiAiCi0iZ2XDpG5kZXJ0LiAgVm9yIGRlbSBFaW50cmFnZW4gZWluZXIgbmV1ZW4gVmVyc2lvbiBtdXNzIG5ldSBnZWxhZGVuIHdlcmRlbi5cbiIKLSJcbiIKLSJFcyB3aXJkIGdsZWljaCBuZXUgZ2VsYWRlbi5cbiIKKyIgIChiZW51dHplIFwiZ2l0IGNoZWNrb3V0IC0tIDxEYXRlaT4uLi5cIiB1bSBkaWUgw4RuZGVydW5nZW4gaW0gIgorIkFyYmVpdHN2ZXJ6ZWljaG5pcyB6dSB2ZXJ3ZXJmZW4pIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKLSJiZWZvcmUgY29tbWl0dGluZy5cbiIKKyM6IHd0LXN0YXR1cy5jOjIxNQorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKIG1zZ3N0ciAiIgotIk5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4ga8O2bm5lbiBuaWNodCBlaW5nZXRyYWdlbiB3ZXJkZW4uXG4iCi0iXG4iCi0iRGllIERhdGVpIMK7JXPCqyBoYXQgbm9jaCBuaWNodCBhdWZnZWzDtnN0ZSBadXNhbW1lbmbDvGhydW5ncy1Lb25mbGlrdGUuIFNpZSAiCi0ibcO8c3NlbiBkaWVzZSBLb25mbGlrdGUgYXVmbMO2c2VuLCBiZXZvciBTaWUgZWludHJhZ2VuIGvDtm5uZW4uXG4iCisiICAodHJhZ2UgZWluIG9kZXIgdmVyd2VyZmUgZGVuIHVuYmVvYmFjaHRldGVuIG9kZXIgZ2XDpG5kZXJ0ZW4gSW5oYWx0IGluIGRlbiAiCisiVW50ZXJwcm9qZWt0ZW4pIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgotIlxuIgotIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCi1tc2dzdHIgIiIKLSJVbmJla2FubnRlciBEYXRlaXp1c3RhbmQgwrslc8KrLlxuIgotIlxuIgotIkRhdGVpIMK7JXPCqyBrYW5uIG5pY2h0IGVpbmdldHJhZ2VuIHdlcmRlbi5cbiIKKyM6IHd0LXN0YXR1cy5jOjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmaWxlczoiCittc2dzdHIgIiVzIERhdGVpZW46IgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODgKLW1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKLW1zZ3N0ciAiIgotIktlaW5lIMOEbmRlcnVuZ2VuIHZvcmhhbmRlbiwgZGllIGVpbmdldHJhZ2VuIHdlcmRlbiBrw7ZubnRlbi5cbiIKLSJcbiIKLSJTaWUgbcO8c3NlbiBtaW5kZXN0ZW5zIGVpbmUgRGF0ZWkgYmVyZWl0c3RlbGxlbiwgYmV2b3IgU2llIGVpbnRyYWdlbiBrw7ZubmVuLlxuIgorIzogd3Qtc3RhdHVzLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgIChiZW51dHplIFwiZ2l0ICVzIDxEYXRlaT4uLi5cIiB6dW0gRWluZsO8Z2VuIGluIGRpZSBFaW50cmFndW5nKSIKIAotIzogbGliL2NvbW1pdC50Y2w6MjAzCi1tc2dpZCAiIgotIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKLSJcbiIKLSJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgotIlxuIgotIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKLSItIFNlY29uZCBsaW5lOiBCbGFua1xuIgotIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKLW1zZ3N0ciAiIgotIkJpdHRlIGdlYmVuIFNpZSBlaW5lIFZlcnNpb25zYmVzY2hyZWlidW5nIGVpbi5cbiIKLSJcbiIKLSJFaW5lIGd1dGUgVmVyc2lvbnNiZXNjaHJlaWJ1bmcgZW50aMOkbHQgZm9sZ2VuZGUgQWJzY2huaXR0ZTpcbiIKLSJcbiIKLSItIEVyc3RlIFplaWxlOiBFaW5lIFp1c2FtbWVuZmFzc3VuZywgd2FzIG1hbiBnZW1hY2h0IGhhdC5cbiIKLSJcbiIKLSItIFp3ZWl0ZSBaZWlsZTogTGVlcnplaWxlXG4iCi0iXG4iCi0iLSBSZXN0OiBFaW5lIGF1c2bDvGhybGljaGUgQmVzY2hyZWlidW5nLCB3YXJ1bSBkaWVzZSDDhG5kZXJ1bmcgaGlsZnJlaWNoIGlzdC5cbiIKLQotIzogbGliL2NvbW1pdC50Y2w6MjM0Ci1tc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCi1tc2dzdHIgIkF1ZnJ1ZmVuIGRlciBWb3ItRWludHJhZ2VuLUtvbnRyb2xsZSAowrtwcmUtY29tbWl0IGhvb2vCqykuLi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjI0OQotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgotbXNnc3RyICJFaW50cmFnZW4gYWJnZWxlaG50IGR1cmNoIFZvci1FaW50cmFnZW4tS29udHJvbGxlICjCu3ByZS1jb21taXQgaG9va8KrKS4iCi0KLSM6IGxpYi9jb21taXQudGNsOjI3MgotbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICJBdWZydWZlbiBkZXIgVmVyc2lvbnNiZXNjaHJlaWJ1bmdzLUtvbnRyb2xsZSAowrtjb21taXQtbWVzc2FnZSBob29rwqspLi4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDoyODcKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiIgotIkVpbnRyYWdlbiBhYmdlbGVobnQgZHVyY2ggVmVyc2lvbnNiZXNjaHJlaWJ1bmdzLUtvbnRyb2xsZSAowrtjb21taXQtbWVzc2FnZSAiCi0iaG9va8KrKS4iCi0KLSM6IGxpYi9jb21taXQudGNsOjMwMAotbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKLW1zZ3N0ciAiw4RuZGVydW5nZW4gZWludHJhZ2VuLi4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDozMTYKLW1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCi1tc2dzdHIgIndyaXRlLXRyZWUgZmVobGdlc2NobGFnZW46IgotCi0jOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgotbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgotbXNnc3RyICJFaW50cmFnZW4gZmVobGdlc2NobGFnZW4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDozMzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgotbXNnc3RyICJWZXJzaW9uIMK7JXPCqyBzY2hlaW50IGJlc2Now6RkaWd0IHp1IHNlaW4iCi0KLSM6IGxpYi9jb21taXQudGNsOjMzOQotbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKLW1zZ3N0ciAiIgotIktlaW5lIMOEbmRlcnVuZ2VuIGVpbnp1dHJhZ2VuLlxuIgotIlxuIgotIkVzIGdpYnQga2VpbmUgZ2XDpG5kZXJ0ZSBEYXRlaSBiZWkgZGllc2VyIFZlcnNpb24gdW5kIGVzIHd1cmRlIGF1Y2ggbmljaHRzICIKLSJ6dXNhbW1lbmdlZsO8aHJ0LlxuIgotIlxuIgotIkRhcyBBcmJlaXRzdmVyemVpY2huaXMgd2lyZCBkYWhlciBqZXR6dCBuZXUgZ2VsYWRlbi5cbiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzQ2Ci1tc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgotbXNnc3RyICJLZWluZSDDhG5kZXJ1bmdlbiwgZGllIGVpbmdldHJhZ2VuIHdlcmRlbiBrw7ZubmVuLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzYwCi1tc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAiY29tbWl0LXRyZWUgZmVobGdlc2NobGFnZW46IgotCi0jOiBsaWIvY29tbWl0LnRjbDozODEKLW1zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCi1tc2dzdHIgInVwZGF0ZS1yZWYgZmVobGdlc2NobGFnZW46IgotCi0jOiBsaWIvY29tbWl0LnRjbDo0NjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCi1tc2dzdHIgIlZlcnNpb24gJXMgw7xiZXJ0cmFnZW46ICVzIgotCi0jOiBsaWIvY29uc29sZS50Y2w6NTkKLW1zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICJWZXJhcmJlaXR1bmcuIEJpdHRlIHdhcnRlbi4uLiIKLQotIzogbGliL2NvbnNvbGUudGNsOjE4NgotbXNnaWQgIlN1Y2Nlc3MiCi1tc2dzdHIgIkVyZm9sZ3JlaWNoIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MjAwCi1tc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgotbXNnc3RyICJGZWhsZXI6IEtvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQzCi1tc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIkFuemFobCB1bnZlcmtuw7xwZnRlciBPYmpla3RlIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ0Ci1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIkZlc3RwbGF0dGVucGxhdHogdm9uIHVudmVya27DvHBmdGVuIE9iamVrdGVuIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ1Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJBbnphaGwga29tcHJpbWllcnRlciBPYmpla3RlIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ2Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgotbXNnc3RyICJBbnphaGwgS29tcHJpbWllcnVuZ3NlaW5oZWl0ZW4iCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIkZlc3RwbGF0dGVucGxhdHogdm9uIGtvbXByaW1pZXJ0ZW4gT2JqZWt0ZW4iCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKLW1zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgotbXNnc3RyICJLb21wcmltaWVydGUgT2JqZWt0ZSwgZGllIHp1bSBBdWZyw6R1bWVuIHZvcmdlc2VoZW4gc2luZCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OQotbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCi1tc2dzdHIgIkRhdGVpZW4gaW0gTcO8bGxlaW1lciIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo3MgotbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCi1tc2dzdHIgIk9iamVrdGRhdGVuYmFuayBrb21wcmltaWVyZW4iCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKLW1zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKLW1zZ3N0ciAiRGllIE9iamVrdGRhdGVuYmFuayBkdXJjaCDCu2ZzY2stb2JqZWN0c8KrIMO8YmVycHLDvGZlbiBsYXNzZW4iCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKLSJcbiIKLSJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKLSJ0aGUgZGF0YWJhc2UuXG4iCi0iXG4iCi0iQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCi1tc2dzdHIgIiIKLSJEaWVzZXMgUHJvamVrdGFyY2hpdiBlbnRow6RsdCB1bmdlZsOkaHIgJWkgbmljaHQgdmVya27DvHBmdGUgT2JqZWt0ZS5cbiIKLSJcbiIKLSJGw7xyIGVpbmUgb3B0aW1hbGUgUGVyZm9ybWFuY2Ugd2lyZCBlbXBmb2hsZW4sIGRpZSBEYXRlbmJhbmsgZGVzIFByb2pla3RhcmNoaXZzIHp1IGtvbXByaW1pZXJlbi5cbiIKLSJcbiIKLSJTb2xsIGRpZSBEYXRlbmJhbmsgamV0enQga29tcHJpbWllcnQgd2VyZGVuPyIKLQotIzogbGliL2RhdGUudGNsOjI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKLW1zZ3N0ciAiVW5nw7xsdGlnZXMgRGF0dW0gdm9uIEdpdDogJXMiCi0KLSM6IGxpYi9kaWZmLnRjbDo2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKLSJcbiIKLSJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCi0idGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKLSJ0aGUgc2FtZSBzdGF0ZS4iCi1tc2dzdHIgIiIKLSJLZWluZSDDhG5kZXJ1bmdlbiBmZXN0c3RlbGxiYXIuXG4iCi0iXG4iCi0iwrslc8KrIGVudGjDpGx0IGtlaW5lIMOEbmRlcnVuZ2VuLiBad2FyIHd1cmRlIGRhcyDDhG5kZXJ1bmdzZGF0dW0gZGllc2VyIERhdGVpIHZvbiAiCi0iZWluZW0gYW5kZXJlbiBQcm9ncmFtbSBtb2RpZml6aWVydCwgYWJlciBkZXIgSW5oYWx0IGRlciBEYXRlaSBpc3QgIgotInVudmVyw6RuZGVydC5cbiIKLSJcbiIKLSJEYXMgQXJiZWl0c3ZlcnplaWNobmlzIHdpcmQgamV0enQgbmV1IGdlbGFkZW4sIHVtIGRpZXNlIMOEbmRlcnVuZyBiZWkgYWxsZW4gIgotIkRhdGVpZW4genUgcHLDvGZlbi4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxMDQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCi1tc2dzdHIgIlZlcmdsZWljaCB2b24gwrslc8KrIGxhZGVuLi4uIgotCi0jOiBsaWIvZGlmZi50Y2w6MTI1Ci1tc2dpZCAiIgotIkxPQ0FMOiBkZWxldGVkXG4iCi0iUkVNT1RFOlxuIgotbXNnc3RyICIiCi0iTE9LQUw6IGdlbMO2c2NodFxuIgotIkFOREVSRVM6XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxMzAKLW1zZ2lkICIiCi0iUkVNT1RFOiBkZWxldGVkXG4iCi0iTE9DQUw6XG4iCi1tc2dzdHIgIiIKLSJBTkRFUkVTOiBnZWzDtnNjaHRcbiIKLSJMT0tBTDpcbiIKLQotIzogbGliL2RpZmYudGNsOjEzNwotbXNnaWQgIkxPQ0FMOlxuIgotbXNnc3RyICJMT0tBTDpcbiIKLQotIzogbGliL2RpZmYudGNsOjE0MAotbXNnaWQgIlJFTU9URTpcbiIKLW1zZ3N0ciAiQU5ERVJFUzpcbiIKLQotIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCi1tc2dzdHIgIkRhdGVpIMK7JXPCqyBrYW5uIG5pY2h0IGFuZ2V6ZWlndCB3ZXJkZW4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyMDMKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXIgRGF0ZWk6IgotCi0jOiBsaWIvZGlmZi50Y2w6MjEwCi1tc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgotbXNnc3RyICJHaXQtUHJvamVrdGFyY2hpdiAoVW50ZXJwcm9qZWt0KSIKLQotIzogbGliL2RpZmYudGNsOjIyMgotbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKLW1zZ3N0ciAiKiBCaW7DpHJkYXRlaSAoSW5oYWx0IHdpcmQgbmljaHQgYW5nZXplaWd0KSIKLQotIzogbGliL2RpZmYudGNsOjIyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgotIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgotbXNnc3RyICIiCi0iKiBEYXRlaSBuaWNodCB1bnRlciBWZXJzaW9uc2tvbnRyb2xsZSwgRGF0ZWlncsO2w59lICVkIEJ5dGVzLlxuIgotIiogTnVyIGVyc3RlICVkIEJ5dGVzIHdlcmRlbiBhbmdlemVpZ3QuXG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iXG4iCi0iKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCi0iKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgotbXNnc3RyICIiCi0iXG4iCi0iKiBEYXRlaSBuaWNodCB1bnRlciBWZXJzaW9uc2tvbnRyb2xsZSwgaGllciBhYmdlc2Nobml0dGVuIGR1cmNoICVzLlxuIgotIiogWnVtIEFuc2VoZW4gZGVyIHZvbGxzdMOkbmRpZ2VuIERhdGVpIGV4dGVybmVuIEVkaXRvciBiZW51dHplbi5cbiIKLQotIzogbGliL2RpZmYudGNsOjQ4MgotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICIiCi0iRmVobGVyIGJlaW0gSGVyYXVzbmVobWVuIGRlcyBnZXfDpGhsdGVuIEtvbnRleHRzIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcuIgotCi0jOiBsaWIvZGlmZi50Y2w6NDg5Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBCZXJlaXRzdGVsbGVuIGRlcyBnZXfDpGhsdGVuIEtvbnRleHRzLiIKLQotIzogbGliL2RpZmYudGNsOjU2OAotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBIZXJhdXNuZWhtZW4gZGVyIGdld8OkaGx0ZW4gWmVpbGUgYXVzIGRlciBCZXJlaXRzdGVsbHVuZy4iCi0KLSM6IGxpYi9kaWZmLnRjbDo1NzYKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgIkZlaGxlciBiZWltIEJlcmVpdHN0ZWxsZW4gZGVyIGdld8OkaGx0ZW4gWmVpbGUuIgotCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0MwotbXNnaWQgIkRlZmF1bHQiCi1tc2dzdHIgIlZvcmVpbnN0ZWxsdW5nIgotCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN5c3RlbSAoJXMpIgotbXNnc3RyICJTeXN0ZW13ZWl0ICglcykiCi0KLSM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Ci1tc2dpZCAiT3RoZXIiCi1tc2dzdHIgIkFuZGVyZSIKLQotIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNAotbXNnaWQgImVycm9yIgorIzogd3Qtc3RhdHVzLmM6MjQ0Cittc2dpZCAiYnVnIgogbXNnc3RyICJGZWhsZXIiCiAKLSM6IGxpYi9lcnJvci50Y2w6MzYKLW1zZ2lkICJ3YXJuaW5nIgotbXNnc3RyICJXYXJudW5nIgorIzogd3Qtc3RhdHVzLmM6MjQ5Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAiYmVpZGUgZ2Vsw7ZzY2h0OiIKIAotIzogbGliL2Vycm9yLnRjbDo5NAotbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCisjOiB3dC1zdGF0dXMuYzoyNTAKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgInZvbiB1bnMgaGluenVnZWbDvGd0OiIKKworIzogd3Qtc3RhdHVzLmM6MjUxCittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAidm9uIGRlbmVuIGdlbMO2c2NodDoiCisKKyM6IHd0LXN0YXR1cy5jOjI1MgorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICJ2b24gZGVuZW4gaGluenVnZWbDvGd0OiIKKworIzogd3Qtc3RhdHVzLmM6MjUzCittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgInZvbiB1bnMgZ2Vsw7ZzY2h0OiIKKworIzogd3Qtc3RhdHVzLmM6MjU0Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgInZvbiBiZWlkZW4gaGluenVnZWbDvGd0OiIKKworIzogd3Qtc3RhdHVzLmM6MjU1Cittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgInZvbiBiZWlkZW4gZ2XDpG5kZXJ0OiIKKworIzogd3Qtc3RhdHVzLmM6Mjg1Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAibmV1ZSBWZXJzaW9uZW4sICIKKworIzogd3Qtc3RhdHVzLmM6Mjg3Cittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICJnZcOkbmRlcnRlciBJbmhhbHQsICIKKworIzogd3Qtc3RhdHVzLmM6Mjg5Cittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAidW5iZW9iYWNodGV0ZXIgSW5oYWx0LCAiCisKKyM6IHd0LXN0YXR1cy5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZTogICAlcyIKK21zZ3N0ciAibmV1ZSBEYXRlaTogICAlcyIKKworIzogd3Qtc3RhdHVzLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcGllZDogICAgICVzIC0+ICVzIgorbXNnc3RyICJrb3BpZXJ0OiAgICAgJXMgLT4gJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkOiAgICAlcyIKK21zZ3N0ciAiZ2Vsw7ZzY2h0OiAgICAlcyIKKworIzogd3Qtc3RhdHVzLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGlmaWVkOiAgICVzIgorbXNnc3RyICJnZcOkbmRlcnQ6ICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWVkOiAgICAlcyAtPiAlcyIKK21zZ3N0ciAidW1iZW5hbm50OiAgICAlcyAtPiAlcyIKKworIzogd3Qtc3RhdHVzLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGVjaGFuZ2U6ICVzIgorbXNnc3RyICJUeXDDpG5kZXJ1bmc6ICVzIgorCisjOiB3dC1zdGF0dXMuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93bjogICAgJXMiCittc2dzdHIgInVuYmVrYW5udDogICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bm1lcmdlZDogICAlcyIKK21zZ3N0ciAibmljaHQgenVzYW1tZW5nZWbDvGhydDogICAlcyIKKworIzogd3Qtc3RhdHVzLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImJ1ZzogdW5oYW5kbGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICJGZWhsZXI6IHVuYmVoYW5kZWx0ZXIgRGlmZmVyZW56LVN0YXR1cyAlYyIKKworIzogd3Qtc3RhdHVzLmM6Nzg1Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICJEdSBoYXN0IG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIFBmYWRlLiIKKworIzogd3Qtc3RhdHVzLmM6Nzg4IHd0LXN0YXR1cy5jOjkxMgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAoYmVoZWJlIGRpZSBLb25mbGlrdGUgdW5kIGbDvGhyZSBcImdpdCBjb21taXRcIiBhdXMpIgorCisjOiB3dC1zdGF0dXMuYzo3OTEKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgogbXNnc3RyICIiCi0iU2llIG3DvHNzZW4gZGllIG9iaWdlbiBGZWhsZXIgenVlcnN0IGJlaGViZW4sIGJldm9yIFNpZSBlaW50cmFnZW4ga8O2bm5lbi4iCisiQWxsZSBLb25mbGlrdGUgc2luZCBiZWhvYmVuLCBhYmVyIGR1IGJpc3QgaW1tZXIgbm9jaCBiZWltIFp1c2FtbWVuZsO8aHJlbi4iCiAKLSM6IGxpYi9pbmRleC50Y2w6NgotbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKLW1zZ3N0ciAiQmVyZWl0c3RlbGx1bmcga2FubiBuaWNodCB3aWVkZXIgZnJlaWdlZ2ViZW4gd2VyZGVuLiIKKyM6IHd0LXN0YXR1cy5jOjc5NAorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKGJlbnV0emUgXCJnaXQgY29tbWl0XCIgdW0gZGllIFp1c2FtbWVuZsO8aHJ1bmcgYWJ6dXNjaGxpZcOfZW4pIgogCi0jOiBsaWIvaW5kZXgudGNsOjE1Ci1tc2dpZCAiSW5kZXggRXJyb3IiCi1tc2dzdHIgIkZlaGxlciBpbiBCZXJlaXRzdGVsbHVuZyIKKyM6IHd0LXN0YXR1cy5jOjgwNAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiRWluZSBcImFtXCItU2l0enVuZyBpc3QgaW0gR2FuZ2UuIgogCi0jOiBsaWIvaW5kZXgudGNsOjE3CisjOiB3dC1zdGF0dXMuYzo4MDcKK21zZ2lkICJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIkRlciBha3R1ZWxsZSBQYXRjaCBpc3QgbGVlci4iCisKKyM6IHd0LXN0YXR1cy5jOjgxMQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIikiCittc2dzdHIgIiAgKGJlaGViZSBkaWUgS29uZmxpa3RlIHVuZCBmw7xocmUgZGFubiBcImdpdCBhbSAtLXJlc29sdmVkXCIgYXVzKSIKKworIzogd3Qtc3RhdHVzLmM6ODEzCittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAoYmVudXR6ZSBcImdpdCBhbSAtLXNraXBcIiB1bSBkaWVzZW4gUGF0Y2ggYXVzenVsYXNzZW4pIgorCisjOiB3dC1zdGF0dXMuYzo4MTUKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiIKKyIgIChiZW51dHplIFwiZ2l0IGFtIC0tYWJvcnRcIiB1bSBkZW4gdXJzcHLDvG5nbGljaGVuIFp3ZWlnIHdpZWRlcmhlcnp1c3RlbGxlbikiCisKKyM6IHd0LXN0YXR1cy5jOjg3MyB3dC1zdGF0dXMuYzo4ODMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIkR1IGJpc3QgZ2VyYWRlIGJlaW0gTmV1YXVmYmF1LiIKKworIzogd3Qtc3RhdHVzLmM6ODc2Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGJlaGViZSBkaWUgS29uZmxpa3RlIHVuZCBmw7xocmUgZGFubiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjg3OAorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYmVudXR6ZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdW0gZGllc2VuIFBhdGNoIGF1c3p1bGFzc2VuKSIKKworIzogd3Qtc3RhdHVzLmM6ODgwCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisiICAoYmVudXR6ZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHVtIGRlbiB1cnNwcsO8bmdsaWNoZW4gWndlaWcgYXVzenVjaGVja2VuKSIKKworIzogd3Qtc3RhdHVzLmM6ODg2Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChhbGxlIEtvbmZsaWt0ZSBiZWhvYmVuOiBmw7xocmUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBhdXMpIgorCisjOiB3dC1zdGF0dXMuYzo4ODgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiRHUgdGVpbHN0IGdlcmFkZSBlaW5lIFZlcnNpb24gd8OkaHJlbmQgZWluZXMgTmV1YXVmYmF1cyBhdWYuIgorCisjOiB3dC1zdGF0dXMuYzo4OTEKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKFNvYmFsZCBkZWluIEFyYmVpdHN2ZXJ6ZWljaG5pcyBzYXViZXIgaXN0LCBmw7xocmUgXCJnaXQgcmViYXNlIC0tY29udGludWUiCisiXCIgYXVzKSIKKworIzogd3Qtc3RhdHVzLmM6ODkzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJEdSBlZGl0aWVyc3QgZ2VyYWRlIGVpbmUgVmVyc2lvbiB3w6RocmVuZCBlaW5lcyBOZXVhdWZiYXVzLiIKKworIzogd3Qtc3RhdHVzLmM6ODk2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emUgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB1bSBkaWUgYWt0dWVsbGUgVmVyc2lvbiBuYWNoenViZXNzZXJuKSIKKworIzogd3Qtc3RhdHVzLmM6ODk4CiBtc2dpZCAiIgotIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgotInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCiBtc2dzdHIgIiIKLSJEYXMgQWt0dWFsaXNpZXJlbiBkZXIgR2l0LUJlcmVpdHN0ZWxsdW5nIGlzdCBmZWhsZ2VzY2hsYWdlbi4gRWluZSBhbGxnZW1laW5lICIKLSJHaXQtQWt0dWFsaXNpZXJ1bmcgd2lyZCBqZXR6dCBnZXN0YXJ0ZXQsIHVtIGdpdC1ndWkgd2llZGVyIG1pdCBnaXQgenUgIgotInN5bmNocm9uaXNpZXJlbi4iCisiICAoYmVudXR6ZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIHNvYmFsZCBkZWluZSDDhG5kZXJ1bmdlbiBhYmdlc2NobG9zc2VuICIKKyJzaW5kKSIKIAotIzogbGliL2luZGV4LnRjbDoyOAotbXNnaWQgIkNvbnRpbnVlIgotbXNnc3RyICJGb3J0c2V0emVuIgorIzogd3Qtc3RhdHVzLmM6OTA4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcuIgorbXNnc3RyICJEdSBmw7xocnN0IGdlcmFkZSBcImNoZXJyeS1waWNrXCIgYXVzLiIKIAotIzogbGliL2luZGV4LnRjbDozMQotbXNnaWQgIlVubG9jayBJbmRleCIKLW1zZ3N0ciAiQmVyZWl0c3RlbGx1bmcgZnJlaWdlYmVuIgorIzogd3Qtc3RhdHVzLmM6OTE1Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICAoYWxsZSBLb25mbGlrdGUgYmVob2JlbjogZsO8aHJlIFwiZ2l0IGNvbW1pdFwiIGF1cykiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mjg5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgotbXNnc3RyICJEYXRlaSDCuyVzwqsgYXVzIGRlciBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCisjOiB3dC1zdGF0dXMuYzo5MjQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICJEdSBiaXN0IGdlcmFkZSBiZWltIEhhbGJpZXJlbi4iCiAKLSM6IGxpYi9pbmRleC50Y2w6MzI4Ci1tc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKLW1zZ3N0ciAiQmVyZWl0IHp1bSBFaW50cmFnZW4uIgotCi0jOiBsaWIvaW5kZXgudGNsOjM0MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyAlcyIKLW1zZ3N0ciAiwrslc8KrIGhpbnp1ZsO8Z2VuLi4uIgotCi0jOiBsaWIvaW5kZXgudGNsOjM5OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgotbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiBEYXRlaSDCuyVzwqsgdmVyd2VyZmVuPyIKLQotIzogbGliL2luZGV4LnRjbDo0MDAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCi1tc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGRlbiBnZXfDpGhsdGVuICVpIERhdGVpZW4gdmVyd2VyZmVuPyIKLQotIzogbGliL2luZGV4LnRjbDo0MDgKLW1zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCisjOiB3dC1zdGF0dXMuYzo5MjcKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCiBtc2dzdHIgIiIKLSJBbGxlIG5pY2h0IGJlcmVpdGdlc3RlbGx0ZW4gw4RuZGVydW5nZW4gd2VyZGVuIGJlaW0gVmVyd2VyZmVuIHZlcmxvcmVuIGdlaGVuLiIKKyIgIChiZW51dHplIFwiZ2l0IGJpc2VjdCByZXNldFwiIHVtIHp1bSB1cnNwcsO8bmdsaWNoZW4gWndlaWcgenVyw7xja3p1a2VocmVuKSIKIAotIzogbGliL2luZGV4LnRjbDo0MTEKLW1zZ2lkICJEbyBOb3RoaW5nIgotbXNnc3RyICJOaWNodHMgdHVuIgorIzogd3Qtc3RhdHVzLmM6OTc4Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiQXVmIFp3ZWlnICIKIAotIzogbGliL2luZGV4LnRjbDo0MjkKLW1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCi1tc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGdld8OkaGx0ZW4gRGF0ZWllbiB2ZXJ3ZXJmZW4iCisjOiB3dC1zdGF0dXMuYzo5ODUKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJJbSBNb21lbnQgYXVmIGtlaW5lbSBad2VpZy4iCiAKLSM6IGxpYi9pbmRleC50Y2w6NDMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nICVzIgotbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiAlcyB2ZXJ3ZXJmZW4iCisjOiB3dC1zdGF0dXMuYzo5OTcKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiSW5pdGlhbGUgVmVyc2lvbiIKIAotIzogbGliL21lcmdlLnRjbDoxMworIzogd3Qtc3RhdHVzLmM6MTAxMQorbXNnaWQgIlVudHJhY2tlZCIKK21zZ3N0ciAiVW5iZW9iYWNodGV0ZSIKKworIzogd3Qtc3RhdHVzLmM6MTAxMworbXNnaWQgIklnbm9yZWQiCittc2dzdHIgIklnbm9yaWVydGUiCisKKyM6IHd0LXN0YXR1cy5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAiVW5iZW9iYWNodGV0ZSBEYXRlaWVuIG5pY2h0IGF1ZmdlbGlzdGV0JXMiCisKKyM6IHd0LXN0YXR1cy5jOjEwMTcKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKGJlbnV0emUgZGllIE9wdGlvbiAtdSB1bSB1bmJlb2JhY2h0ZXRlbiBEYXRlaWVuIGFuenV6ZWlnZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMDIzCittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4iCisKKyM6IHd0LXN0YXR1cy5jOjEwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQlc1xuIgorbXNnc3RyICJrZWluZSDDhG5kZXJ1bmdlbiB6dW0gRWludHJhZ2VuIGhpbnp1Z2Vmw7xndCVzXG4iCisKKyM6IHd0LXN0YXR1cy5jOjEwMjkKK21zZ2lkICIgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpIgorbXNnc3RyICIgKGJlbnV0emUgXCJnaXQgYWRkXCIgdW5kL29kZXIgXCJnaXQgY29tbWl0IC1hXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCVzXG4iCittc2dzdHIgIiIKKyJuaWNodHMgenVtIEVpbnRyYWdlbiBoaW56dWdlZsO8Z3QsIGFiZXIgZXMgZ2lidCB1bmJlb2JhY2h0ZXRlIERhdGVpZW4lc1xuIgorCisjOiB3dC1zdGF0dXMuYzoxMDMzCittc2dpZCAiICh1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spIgorbXNnc3RyICIgKGJlbnV0emUgXCJnaXQgYWRkXCIgenVtIEJlb2JhY2h0ZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMDM1IHd0LXN0YXR1cy5jOjEwMzggd3Qtc3RhdHVzLmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCVzXG4iCittc2dzdHIgIm5pY2h0cyB6dW0gRWludHJhZ2VuJXNcbiIKKworIzogd3Qtc3RhdHVzLmM6MTAzNgorbXNnaWQgIiAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiCittc2dzdHIgIiAoRXJzdGVsbGUvS29waWVyZSBEYXRlaWVuIHVuZCBiZW51dHplIFwiZ2l0IGFkZFwiIHp1bSBCZW9iYWNodGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTAzOQorbXNnaWQgIiAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIChiZW51dHplIGRpZSBPcHRpb24gLXUgdW0gdW5iZW9iYWNodGV0ZSBEYXRlaWVuIGFuenV6ZWlnZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMDQyCittc2dpZCAiICh3b3JraW5nIGRpcmVjdG9yeSBjbGVhbikiCittc2dzdHIgIiAoQXJiZWl0c3ZlcnplaWNobmlzIHNhdWJlcikiCisKKyM6IHd0LXN0YXR1cy5jOjExNTAKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEIChrZWluIFp3ZWlnKSIKKworIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIkluaXRpYWwgY29tbWl0IG9uICIKK21zZ3N0ciAiSW5pdGlhbGUgVmVyc2lvbiBhdWYgIgorCisjOiB3dC1zdGF0dXMuYzoxMTcxCittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAiaGludGVyaGVyICIKKworIzogd3Qtc3RhdHVzLmM6MTE3NCB3dC1zdGF0dXMuYzoxMTc3Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICJ2b3JhdXMgIgorCisjOiB3dC1zdGF0dXMuYzoxMTc5Cittc2dpZCAiLCBiZWhpbmQgIgorbXNnc3RyICIsIGhpbnRlcmhlciAiCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1OCBidWlsdGluL2Nsb25lLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgZW50ZmVybmVuIgorCisjOiBidWlsdGluL2FkZC5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgInVuZXJ3YXJ0ZXRlciBEaWZmZXJlbnotU3RhdHVzICVjIgorCisjOiBidWlsdGluL2FkZC5jOjY3IGJ1aWx0aW4vY29tbWl0LmM6MjI5Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZyBkZXIgRGF0ZWllbiBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9hZGQuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICJlbnRmZXJuZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGggJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICJQZmFkICclcycgYmVmaW5kZXQgc2ljaCBpbiBVbnRlcnByb2pla3QgJyUuKnMnIgorCisjOiBidWlsdGluL2FkZC5jOjE5MgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICIiCisiTmljaHQgYmVyZWl0Z2VzdGVsbHRlIMOEbmRlcnVuZ2VuIG5hY2ggQWt0dWFsaXNpZXJ1bmcgZGVyIEJlcmVpdHN0ZWxsdW5nOiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTUgYnVpbHRpbi9hZGQuYzo0NTkgYnVpbHRpbi9ybS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICJQZmFkc3BlemlmaWthdGlvbiAnJXMnIHN0aW1tdCBtaXQga2VpbmVuIERhdGVpZW4gw7xiZXJlaW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiJyVzJyBpc3Qgw7xiZXIgZWluZW0gc3ltYm9saXNjaGVuIExpbmsiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc2Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJLb25udGUgZGllIEJlcmVpdHN0ZWxsdW5nIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2FkZC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgenVtIFNjaHJlaWJlbiDDtmZmbmVuLiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTAKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIktvbm50ZSBQYXRjaCBuaWNodCBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIktvbm50ZSBWZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2FkZC5jOjI5NworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiTGVlcmVyIFBhdGNoLiBBYmdlYnJvY2hlbi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBhbndlbmRlbi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiBQZmFkZSB3ZXJkZW4gZHVyY2ggZWluZSBkZWluZXIgXCIuZ2l0aWdub3JlXCIgRGF0ZWllbiAiCisiaWdub3JpZXJ0OlxuIgorCisjOiBidWlsdGluL2FkZC5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICJWZXJ3ZW5kZSAtZiB3ZW5uIGR1IGRpZXNlIHdpcmtsaWNoIGhpbnp1ZsO8Z2VuIG3DtmNodGVzdC5cbiIKKworIzogYnVpbHRpbi9hZGQuYzozNTMKK21zZ2lkICJubyBmaWxlcyBhZGRlZCIKK21zZ3N0ciAia2VpbmUgRGF0ZWllbiBoaW56dWdlZsO8Z3QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU5Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiSGluenVmw7xnZW4gdm9uIERhdGVpZW4gZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkxCittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BIHVuZCAtdSBzaW5kIHp1ZWluYW5kZXIgaW5rb21wYXRpYmVsIgorCisjOiBidWlsdGluL2FkZC5jOjM5MworbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uIC0taWdub3JlLW1pc3Npbmcga2FubiBudXIgenVzYW1tZW4gbWl0IC0tZHJ5LXJ1biBiZW51dHp0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJOaWNodHMgc3BlemlmaXppZXJ0LCBuaWNodHMgaGluenVnZWbDvGd0LlxuIgorCisjOiBidWlsdGluL2FkZC5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAiV29sbHRlc3QgZHUgdmllbGxlaWNodCAnZ2l0IGFkZCAuJyBzYWdlbj9cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0MjAgYnVpbHRpbi9jbGVhbi5jOjk1IGJ1aWx0aW4vY29tbWl0LmM6Mjg5IGJ1aWx0aW4vbXYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjE2MgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiQmVyZWl0c3RlbGx1bmdzZGF0ZWkgYmVzY2jDpGRpZ3QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgwIGJ1aWx0aW4vYXBwbHkuYzo0NDMyIGJ1aWx0aW4vbXYuYzoyMjkgYnVpbHRpbi9ybS5jOjI2MAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiS29ubnRlIG5ldWUgQmVyZWl0c3RlbGx1bmdzZGF0ZWkgbmljaHQgc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjU3Cittc2dpZCAiZ2l0IGFwcGx5IFtvcHRpb25zXSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbT3B0aW9uZW5dIFs8UGF0Y2g+Li4uXSIKKworIzogYnVpbHRpbi9hcHBseS5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGUgT3B0aW9uIGbDvHIgTGVlcnplaWNoZW46ICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJuaWNodCBlcmthbm50ZSBPcHRpb24genVtIElnbm9yaWVyZW4gdm9uIExlZXJ6ZWljaGVuOiAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIkthbm4gcmVndWzDpHJlbiBBdXNkcnVjayBmw7xyIFplaXRzdGVtcGVsICVzIG5pY2h0IHZlcmFyYmVpdGVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAiQXVzZsO8aHJ1bmcgZGVzIHJlZ3Vsw6RyZW4gQXVzZHJ1Y2tzIGdhYiAlZCB6dXLDvGNrLiBFaW5nYWJlOiAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJLb25udGUga2VpbmVuIERhdGVpbmFtZW4gaW4gWmVpbGUgJWQgZGVzIFBhdGNoZXMgZmluZGVuLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IHVuZ8O8bHRpZ2VzICdnaXQtZGlmZicgLSBlcndhcnRldGUgL2Rldi9udWxsLCBlcmhpZWx0ICVzIGluIFplaWxlICIKKyIlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0OQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogdW5nw7xsdGlnZXMgJ2dpdC1kaWZmJyAtIElua29uc2lzdGVudGVyIG5ldWVyIERhdGVpbmFtZSBpbiBaZWlsZSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogdW5nw7xsdGlnZXMgJ2dpdC1kaWZmJyAtIElua29uc2lzdGVudGVyIGFsdGVyIERhdGVpbmFtZSBpbiBaZWlsZSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk1NworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IHVuZ8O8bHRpZ2VzICdnaXQtZGlmZicgLSBlcndhcnRldGUgL2Rldi9udWxsIGluIFplaWxlICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgInJlY291bnQ6IHVuZXJ3YXJ0ZXRlIFplaWxlOiAlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJQYXRjaC1GcmFnbWVudCBvaG5lIEtvcGZiZXJlaWNoIGJlaSBaZWlsZSAlZDogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0NzYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgotbXNnc3RyICIiCi0iWnVzYW1tZW5mw7xocmVuIGthbm4gbmljaHQgZ2xlaWNoemVpdGlnIG1pdCBOYWNoYmVzc2VybiBkdXJjaGdlZsO8aHJ0IHdlcmRlbi5cbiIKLSJcbiIKLSJTaWUgbcO8c3NlbiB6dWVyc3QgZGllIE5hY2hiZXNzZXJ1bmdzLVZlcnNpb24gYWJzY2hsaWXDn2VuLCBiZXZvciBTaWUgIgotInp1c2FtbWVuZsO8aHJlbiBrw7ZubmVuLlxuIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorIkRlbSBLb3BmYmVyZWljaCB2b24gXCJnaXQgZGlmZlwiIGZlaGxlbiBJbmZvcm1hdGlvbmVuIHp1bSBEYXRlaW5hbWVuLCB3ZW5uICIKKyIlZCB2b3Jhbmdlc3RlbGx0ZXIgVGVpbCBkZXMgUGZhZGVzIGVudGZlcm50IHdpcmQgKFplaWxlICVkKSIKK21zZ3N0clsxXSAiIgorIkRlbSBLb3BmYmVyZWljaCB2b24gXCJnaXQgZGlmZlwiIGZlaGxlbiBJbmZvcm1hdGlvbmVuIHp1bSBEYXRlaW5hbWVuLCB3ZW5uICIKKyIlZCB2b3Jhbmdlc3RlbGx0ZSBUZWlsZSBkZXMgUGZhZGVzIGVudGZlcm50IHdlcmRlbiAoWmVpbGUgJWQpIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI3CisjOiBidWlsdGluL2FwcGx5LmM6MTYzNgorbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJuZXVlIERhdGVpIGjDpG5ndCB2b24gYWx0ZW4gSW5oYWx0ZW4gYWIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjM4Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiZW50ZmVybnRlIERhdGVpIGhhdCBub2NoIEluaGFsdGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiZmVobGVyaGFmdGVyIFBhdGNoIGJlaSBaZWlsZSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIm5ldWUgRGF0ZWkgJXMgaMOkbmd0IHZvbiBhbHRlbiBJbmhhbHRlbiBhYiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiZW50ZmVybnRlIERhdGVpICVzIGhhdCBub2NoIEluaGFsdGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqIFdhcm51bmc6IERhdGVpICVzIHdpcmQgbGVlciwgYWJlciBuaWNodCBlbnRmZXJudC4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxODUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImZlaGxlcmhhZnRlciBCaW7DpHItUGF0Y2ggYmVpIFplaWxlICVkOiAlLipzIgorCisjLiB0aGVyZSBoYXMgdG8gYmUgb25lIGh1bmsgKGZvcndhcmQgaHVuaykKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxODgwCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVyIEJpbsOkci1QYXRjaCBiZWkgWmVpbGUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgIlBhdGNoIG1pdCBudXR6bG9zZW4gSW5mb3JtYXRpb25lbiBiZWkgWmVpbGUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImtvbm50ZSBzeW1ib2xpc2NoZSBWZXJrbsO8cGZ1bmcgJXMgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgImtvbm50ZSAlcyBuaWNodCDDtmZmbmVuIG9kZXIgbGVzZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTMxCittc2dpZCAib29wcyIKK21zZ3N0ciAiVXBzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFplaWxlbmFuZmFuZzogJyVjJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICJQYXRjaC1CZXJlaWNoICMlZCBlcmZvbGdyZWljaCBhbmdld2VuZGV0IGJlaSAlZCAoJWQgWmVpbGUgdmVyc2V0enQpIgorbXNnc3RyWzFdICIiCisiUGF0Y2gtQmVyZWljaCAjJWQgZXJmb2xncmVpY2ggYW5nZXdlbmRldCBiZWkgJWQgKCVkIFplaWxlbiB2ZXJzZXR6dCkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIktvbnRleHQgcmVkdXppZXJ0IHp1ICglbGQvJWxkKSB1bSBQYXRjaC1CZXJlaWNoIGJlaSAlZCBhbnp1d2VuZGVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mjc4OQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCiBtc2dzdHIgIiIKLSJEZXIgbGV0enRlIGdlbGFkZW5lIFN0YXR1cyBzdGltbXQgbmljaHQgbWVociBtaXQgZGVtIFByb2pla3RhcmNoaXYgw7xiZXJlaW4uXG4iCi0iXG4iCi0iRWluIGFuZGVyZXMgR2l0LVByb2dyYW1tIGhhdCBkYXMgUHJvamVrdGFyY2hpdiBzZWl0IGRlbSBsZXR6dGVuIExhZGVuICIKLSJnZcOkbmRlcnQuICBWb3IgZWluZW0gWnVzYW1tZW5mw7xocmVuIG11c3MgbmV1IGdlbGFkZW4gd2VyZGVuLlxuIgotIlxuIgotIkVzIHdpcmQgZ2xlaWNoIG5ldSBnZWxhZGVuLlxuIgorImJlaSBkZXIgU3VjaGUgbmFjaDpcbiIKKyIlLipzIgogCi0jOiBsaWIvbWVyZ2UudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2FwcGx5LmM6MjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICJrZWluZSBEYXRlbiBpbiBCaW7DpHItUGF0Y2ggZsO8ciAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlIEJpbsOkci1QYXRjaCBuaWNodCBhdWYgJyVzJyBhbndlbmRlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyJCaW7DpHItUGF0Y2ggZsO8ciAnJXMnIGVyemV1Z3QgZmFsc2NoZXMgRXJnZWJuaXMgKGVyd2FydGV0ZSAlcywgYmVrYW0gJXMpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAiQW53ZW5kdW5nIGRlcyBQYXRjaGVzIGZlaGxnZXNjaGxhZ2VuOiAlczolbGQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAia2FubiAlcyBuaWNodCBhdXNjaGVja2VuIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzEwNSBidWlsdGluL2FwcGx5LmM6MzExNCBidWlsdGluL2FwcGx5LmM6MzE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIG9mICVzIGZhaWxlZCIKK21zZ3N0ciAiS29ubnRlICVzIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzEzOCBidWlsdGluL2FwcGx5LmM6MzM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAiUGZhZCAlcyB3dXJkZSB1bWJlbmFubnQvZ2Vsw7ZzY2h0IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzIxOSBidWlsdGluL2FwcGx5LmM6MzM3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzIGlzdCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyMjMgYnVpbHRpbi9hcHBseS5jOjMzNjYgYnVpbHRpbi9hcHBseS5jOjMzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIgorbXNnc3RyICIlczogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjI4IGJ1aWx0aW4vYXBwbHkuYzozMzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXMgZW50c3ByaWNodCBuaWNodCBkZXIgQmVyZWl0c3RlbGx1bmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzMwCittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAiTMO2c2NoLVBhdGNoIGhpbnRlcmzDpHNzdCBEYXRlaWluaGFsdGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlczogZmFsc2NoZXIgVHlwIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzQwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzIGlzdCB2b20gVHlwICVvLCBlcndhcnRldGUgJW8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXMgaXN0IGJlcmVpdHMgYmVyZWl0Z2VzdGVsbHQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgZXhpc3RpZXJ0IGJlcmVpdHMgaW0gQXJiZWl0c3ZlcnplaWNobmlzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgIm5ldWVyIE1vZHVzICglbykgdm9uICVzIGVudHNwcmljaHQgbmljaHQgZGVtIGFsdGVuIE1vZHVzICglbykiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAibmV1ZXIgTW9kdXMgKCVvKSB2b24gJXMgZW50c3ByaWNodCBuaWNodCBkZW0gYWx0ZW4gTW9kdXMgKCVvKSB2b24gJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXM6IFBhdGNoIGtvbm50ZSBuaWNodCBhbmdld2VuZGV0IHdlcmRlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIlByw7xmZSBQYXRjaCAlcy4uLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2MDYgYnVpbHRpbi9jaGVja291dC5jOjIxMyBidWlsdGluL3Jlc2V0LmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIm1ha2VfY2FjaGVfZW50cnkgZsO8ciBQZmFkICclcycgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAia29ubnRlICVzIG5pY2h0IGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgZW50ZmVybmVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJwcm9qZWN0ICVzIgorbXNnc3RyICJmZWhsZXJoYWZ0ZXIgUGF0Y2ggZsO8ciBVbnRlcnByb2pla3QgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzgxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICJrb25udGUgbmV1IGVyc3RlbGx0ZSBEYXRlaSAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAia2FubiBpbnRlcm5lbiBTcGVpY2hlciBmw7xyIGViZW4gZXJzdGVsbHRlIERhdGVpICVzIG5pY2h0IGVyemV1Z2VuIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc4OSBidWlsdGluL2FwcGx5LmM6Mzg5NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAia2FubiBmw7xyICVzIGtlaW5lbiBFaW50cmFnIGluIGRlbiBad2lzY2hlbnNwZWljaGVyIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAic2NobGllw59lIERhdGVpICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODcxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAia29ubnRlIERhdGVpICclcycgbWl0IE1vZHVzICVvIG5pY2h0IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAiUGF0Y2ggJXMgc2F1YmVyIGFuZ2V3ZW5kZXQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTY2Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgImludGVybmVyIEZlaGxlciIKKworIy4gU2F5IHRoaXMgZXZlbiB3aXRob3V0IC0tdmVyYm9zZQorIzogYnVpbHRpbi9hcHBseS5jOjM5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICJXZW5kZSBQYXRjaCAlJXMgbWl0ICVkIFp1csO8Y2t3ZWlzdW5nIGFuLi4uIgorbXNnc3RyWzFdICJXZW5kZSBQYXRjaCAlJXMgbWl0ICVkIFp1csO8Y2t3ZWlzdW5nZW4gYW4uLi4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTc5CisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAiVmVya8O8cnplIE5hbWUgdm9uIC5yZWogRGF0ZWkgenUgJS4qcy5yZWoiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIlBhdGNoLUJlcmVpY2ggIyVkIHNhdWJlciBhbmdld2VuZGV0LiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICJQYXRjaC1CZXJlaWNoICMlZCB6dXLDvGNrZ2V3aWVzZW4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDE1MworbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAibmljaHQgZXJrYW5udGUgRWluZ2FiZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQxNjQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgQmVyZWl0c3RlbGx1bmdzZGF0ZWkgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjgzIGJ1aWx0aW4vYXBwbHkuYzo0Mjg2Cittc2dpZCAicGF0aCIKK21zZ3N0ciAiUGZhZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyODQKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJ3ZW5kZXQga2VpbmUgw4RuZGVydW5nZW4gaW0gYW5nZWdlYmVuZW4gUGZhZCBhbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyODcKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJ3ZW5kZXQgw4RuZGVydW5nZW4gbnVyIGltIGFuZ2VnZWJlbmVuIFBmYWQgYW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0Mjg5Cittc2dpZCAibnVtIgorbXNnc3RyICJBbnphaGwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjkwCittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgIiIKKyJlbnRmZXJudCA8QW56YWhsPiB2b3Jhbmdlc3RlbGx0ZSBTY2hyw6Rnc3RyaWNoZSB2b24gaGVya8O2bW1saWNoZW4gIgorIkRpZmZlcmVuenBmYWRlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyOTMKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJpZ25vcmllcnQgaGluenVnZWbDvGd0ZSBaZWlsZW4gZGVzIFBhdGNoZXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0Mjk1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICIiCisiYW5zdGF0dCBkZXIgQW53ZW5kdW5nIGRlcyBQYXRjaGVzLCB3aXJkIGRlciBcImRpZmZzdGF0XCIgZsO8ciBkaWUgRWluZ2FiZSAiCisiYXVzZ2VnZWJlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyOTkKK21zZ2lkICJzaG93cyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAiIgorInplaWd0IGRpZSBBbnphaGwgdm9uIGhpbnp1Z2Vmw7xndGVuL2VudGZlcm50ZW4gWmVpbGVuIGluIERlemltYWxub3RhdGlvbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDEKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICIiCisiYW5zdGF0dCBkZXIgQW53ZW5kdW5nIGRlcyBQYXRjaGVzLCB3aXJkIGVpbmUgWnVzYW1tZW5mYXNzdW5nIGbDvHIgZGllIEVpbmdhYmUgIgorImF1c2dlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzAzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiIgorImFuc3RhdHQgZGVyIEFud2VuZHVuZyBkZXMgUGF0Y2hlcywgemVpZ2Ugb2IgUGF0Y2ggYW5nZXdlbmRldCB3ZXJkZW4ga2FubiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDUKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIiIKKyJzdGVsbHQgc2ljaGVyLCBkYXNzIGRlciBQYXRjaCBpbiBkZXIgYWt0dWVsbGVuIEJlcmVpdHN0ZWxsdW5nIGFuZ2V3ZW5kZXQgIgorIndlcmRlbiBrYW5uIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwNworbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJ3ZW5kZXQgZWluZW4gUGF0Y2ggYW4sIG9obmUgw4RuZGVydW5nZW4gaW0gQXJiZWl0c3p3ZWlnIHZvcnp1bmVobWVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwOQorbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICJ3ZW5kZXQgZGVuIFBhdGNoIGFuIChCZW51dHp1bmcgbWl0IC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzExCittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiIgorInZlcnN1Y2h0IDMtV2VnZS1adXNhbW1lbmbDvGhydW5nLCB3ZW5uIGRlciBQYXRjaCBuaWNodCBhbmdld2VuZGV0IHdlcmRlbiAiCisia29ubnRlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMxMworbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisiZXJzdGVsbHQgZWluZSB0ZW1wb3LDpHJlIEJlcmVpdHN0ZWxsdW5nIGJhc2llcmVuZCBhdWYgZGVuIGludGVncmllcnRlbiAiCisiQmVyZWl0c3RlbGx1bmdzaW5mb3JtYXRpb25lbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMTUKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiUGZhZGUgc2luZCBnZXRyZW5udCBkdXJjaCBOVUwgWmVpY2hlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMTgKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgIiIKKyJzdGVsbHQgc2ljaGVyLCBkYXNzIG1pbmRlc3RlbnMgPEFuemFobD4gWmVpbGVuIGRlcyBLb250ZXh0ZXMgw7xiZXJlaW5zdGltbWVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMxOQorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiQWt0aW9uIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMyMAorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICJlcm1pdHRlbHQgbmV1ZSBvZGVyIGdlw6RuZGVydGUgWmVpbGVuIGRpZSBGZWhsZXIgaW4gTGVlcnplaWNoZW4gaGFiZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzIzIGJ1aWx0aW4vYXBwbHkuYzo0MzI2Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAiaWdub3JpZXJ0IMOEbmRlcnVuZ2VuIGluIExlZXJ6ZWljaGVuIGJlaSBkZXIgU3VjaGUgZGVzIEtvbnRleHRlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMjkKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAid2VuZGV0IGRlbiBQYXRjaCBpbiB1bWdla2VocnRlciBSZWloZW5mb2xnZSBhbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMzEKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAiZXJ3YXJ0ZXQga2VpbmVuIEtvbnRleHQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzMzCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgIiIKKyJoaW50ZXJsw6Rzc3QgenVyw7xja2dld2llc2VuZSBQYXRjaC1CZXJlaWNoZSBpbiBkZW4gZW50c3ByZWNoZW5kZW4gKi5yZWogIgorIkRhdGVpZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzM1Cittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgImVybGF1YnQgc2ljaCDDvGJlcmxhcHBlbmRlIFBhdGNoLUJlcmVpY2hlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMzNgorbXNnaWQgImJlIHZlcmJvc2UiCittc2dzdHIgImVyd2VpdGVydGUgQXVzZ2FiZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzM4Cittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgInRvbGVyaWVydCBmZWhsZXJoYWZ0IGVya2FubnRlbiBmZWhsZW5kZW4gWmVpbGVudW1icnVjaCBhbSBEYXRlaWVuZGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzQxCittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICJ2ZXJ0cmF1dCBuaWNodCBkZW4gWmVpbGVubnVtbWVybiBpbSBLb3BmIGRlcyBQYXRjaC1CZXJlaWNoZXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzQzCittc2dpZCAicm9vdCIKK21zZ3N0ciAiV3VyemVsdmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzQ0Cittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAic3RlbGx0IDxXdXJ6ZWx2ZXJ6ZWljaG5pcz4gdm9yIGFsbGUgRGF0ZWluYW1lbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNjYKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSBhdcOfZXJoYWxiIGVpbmVzIFByb2pla3RhcmNoaXZzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM3NAorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXggYXXDn2VyaGFsYiBlaW5lcyBQcm9qZWt0YXJjaGl2cyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNzcKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQgYXXDn2VyaGFsYiBlaW5lcyBQcm9qZWt0YXJjaGl2cyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnIgorbXNnc3RyICJrYW5uIFBhdGNoICclcycgbmljaHQgw7ZmZm5lbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAidW50ZXJkcsO8Y2t0ZSAlZCBGZWhsZXIgaW4gTGVlcnplaWNoZW4iCittc2dzdHJbMV0gInVudGVyZHLDvGNrdGUgJWQgRmVobGVyIGluIExlZXJ6ZWljaGVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDQxMyBidWlsdGluL2FwcGx5LmM6NDQyMworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCBaZWlsZSBmw7xndCBGZWhsZXIgaW4gTGVlcnplaWNoZW4gaGluenUuIgorbXNnc3RyWzFdICIlZCBaZWlsZW4gZsO8Z2VuIEZlaGxlciBpbiBMZWVyemVpY2hlbiBoaW56dS4iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgIktvbm50ZSBBcmNoaXYtRGF0ZWkgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgIktvbm50ZSBBdXNnYWJlIG5pY2h0IHVtbGVpdGVuLiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogRXh0ZXJuZXMgQXJjaGl2IG9obmUgVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo1OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogaGFiZSBBQ0svTkFLIGVyd2FydGV0LCBhYmVyIEVPRiBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJGZWhsZXIgYW0gYW5kZXJlbiBFbmRlOiAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjYKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiBQcm90b2tvbGxmZWhsZXIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjcxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiBlcndhcnRldGUgZWluZSBTcMO8bHVuZyAoZmx1c2gpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE0NAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCi0iXG4iCi0iWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCi0ibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgogbXNnc3RyICIiCi0iWnVzYW1tZW5mw7xocnVuZyBtaXQgS29uZmxpa3Rlbi5cbiIKLSJcbiIKLSJEaWUgRGF0ZWkgwrslc8KrIGVudGjDpGx0IEtvbmZsaWt0ZSBiZWltIFp1c2FtbWVuZsO8aHJlbi4gU2llIG3DvHNzZW4gZGllc2UgIgotIktvbmZsaWt0ZSBwZXIgSGFuZCBhdWZsw7ZzZW4uIEFuc2NobGllw59lbmQgbcO8c3NlbiBTaWUgZGllIERhdGVpIHdpZWRlciAiCi0iYmVyZWl0c3RlbGxlbiB1bmQgZWludHJhZ2VuLCB1bSBkaWUgWnVzYW1tZW5mw7xocnVuZyBhYnp1c2NobGllw59lbi4gRXJzdCAiCi0iZGFuYWNoIGthbm4gZWluZSBuZXVlIFp1c2FtbWVuZsO8aHJ1bmcgYmVnb25uZW4gd2VyZGVuLlxuIgorImVudGZlcm5lIFp3ZWlnICclcycsIGRlciB6dXNhbW1lbmdlZsO8aHJ0IHd1cmRlIG1pdFxuIgorIiAgICAgICAgICclcycsIGFiZXIgbm9jaCBuaWNodCBtaXQgZGVyIFp3ZWlnc3BpdHplIChIRUFEKSB6dXNhbW1lbmdlZsO8aHJ0ICIKKyJ3dXJkZS4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6NTUKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTQ4CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKLSJcbiIKLSJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKLSJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCiBtc2dzdHIgIiIKLSJFcyBsaWVnZW4gw4RuZGVydW5nZW4gdm9yLlxuIgotIlxuIgotIkRpZSBEYXRlaSDCuyVzwqsgd3VyZGUgZ2XDpG5kZXJ0LiAgU2llIHNvbGx0ZW4genVlcnN0IGRpZSBiZXJlaXRnZXN0ZWxsdGUgIgotIlZlcnNpb24gYWJzY2hsaWXDn2VuLCBiZXZvciBTaWUgZWluZSBadXNhbW1lbmbDvGhydW5nIGJlZ2lubmVuLiAgTWl0IGRpZXNlciAiCi0iUmVpaGVuZm9sZ2Uga8O2bm5lbiBTaWUgbcO2Z2xpY2hlIEtvbmZsaWt0ZSBiZWltIFp1c2FtbWVuZsO8aHJlbiB3ZXNlbnRsaWNoICIKLSJlaW5mYWNoZXIgYmVoZWJlbiBvZGVyIGFiYnJlY2hlbi5cbiIKKyJlbnRmZXJuZSBad2VpZyAnJXMnIG5pY2h0LCBkZXIgbm9jaCBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0IHd1cmRlIG1pdFxuIgorIiAgICAgICAgICclcycsIG9id29obCBlciBtaXQgZGVyIFp3ZWlnc3BpdHplIChIRUFEKSB6dXNhbW1lbmdlZsO8aHJ0IHd1cmRlLiIKIAotIzogbGliL21lcmdlLnRjbDoxMDcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyBvZiAlcyIKLW1zZ3N0ciAiJXMgdm9uICVzIgorIzogYnVpbHRpbi9icmFuY2guYzoxODAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgImthbm4gLWEgbmljaHQgbWl0IC1kIGJlbnV0emVuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEyMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgotbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gdm9uICVzIHVuZCAlcy4uLiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTg2Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICJLb25udGUgVmVyc2lvbnNvYmpla3QgZsO8ciBad2VpZ3NwaXR6ZSAoSEVBRCkgbmljaHQgbmFjaHNjaGxhZ2VuLiIKIAotIzogbGliL21lcmdlLnRjbDoxMzEKLW1zZ2lkICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGVyZm9sZ3JlaWNoIGFiZ2VzY2hsb3NzZW4uIgorIzogYnVpbHRpbi9icmFuY2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgYnJhbmNoICclcycgd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgb24uIgorbXNnc3RyICIiCisiS2FubiBad2VpZyAnJXMnIG5pY2h0IGVudGZlcm5lbiwgZGEgZHUgZGljaCBnZXJhZGUgYXVmIGRpZXNlbSBiZWZpbmRlc3QuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEzMwotbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgotbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gZmVobGdlc2NobGFnZW4uIEtvbmZsaWt0YXVmbMO2c3VuZyBpc3Qgbm90d2VuZGlnLiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJleHRlcm5lciBad2VpZyAnJXMnIG5pY2h0IGdlZnVuZGVuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjE1OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdlIEludG8gJXMiCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBpbiDCuyVzwqsiCisjOiBidWlsdGluL2JyYW5jaC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJad2VpZyAnJXMnIG5pY2h0IGdlZnVuZGVuLiIKIAotIzogbGliL21lcmdlLnRjbDoxNzcKLW1zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKLW1zZ3N0ciAiWnVzYW1tZW56dWbDvGhyZW5kZSBWZXJzaW9uIgorIzogYnVpbHRpbi9icmFuY2guYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJLb25udGUgVmVyc2lvbnNvYmpla3QgZsO8ciAnJXMnIG5pY2h0IG5hY2hzY2hsYWdlbi4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjEyCisjOiBidWlsdGluL2JyYW5jaC5jOjIxNgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKIG1zZ3N0ciAiIgotIkFiYnJ1Y2ggZGVyIE5hY2hiZXNzZXJ1bmcgaXN0IG5pY2h0IG3DtmdsaWNoLlxuIgotIlxuIgotIlNpZSBtw7xzc2VuIGRpZSBOYWNoYmVzc2VydW5nIGRlciBWZXJzaW9uIGFic2NobGllw59lbi5cbiIKKyJEZXIgWndlaWcgJyVzJyBpc3QgbmljaHQgdm9sbHN0w6RuZGlnIHp1c2FtbWVuZ2Vmw7xocnQuXG4iCisiV2VubiBkdSBzaWNoZXIgYmlzdCBkaWVzZW4gWndlaWcgenUgZW50ZmVybmVuLCBmw7xocmUgJ2dpdCBicmFuY2ggLUQgJXMnIGF1cy4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjIyCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEVudGZlcm5lbiBkZXMgZXh0ZXJuZW4gWndlaWdlcyAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRW50ZmVybmVuIGRlcyBad2VpZ2VzICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiRXh0ZXJuZXIgWndlaWcgJXMgZW50ZmVybnQgKHdhciAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJad2VpZyAlcyBlbnRmZXJudCAod2FyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMzkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZyBkZXIgS29uZmlndXJhdGlvbnNkYXRlaSBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorbXNnc3RyICJad2VpZyAnJXMnIHplaWd0IGF1ZiBrZWluZSBWZXJzaW9uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGJlaGluZCAlZF0iCittc2dzdHIgIlslczogJWQgaGludGVyaGVyXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2JlaGluZCAlZF0iCittc2dzdHIgIlslZCBoaW50ZXJoZXJdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkXSIKK21zZ3N0ciAiWyVzOiAlZCB2b3JhdXNdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJbYWhlYWQgJWRdIgorbXNnc3RyICJbJWQgdm9yYXVzXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBhaGVhZCAlZCwgYmVoaW5kICVkXSIKK21zZ3N0ciAiWyVzOiAlZCB2b3JhdXMsICVkIGhpbnRlcmhlcl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlthaGVhZCAlZCwgYmVoaW5kICVkXSIKK21zZ3N0ciAiWyVkIHZvcmF1cywgJWQgaGludGVyaGVyXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MzUKK21zZ2lkICIobm8gYnJhbmNoKSIKK21zZ3N0ciAiKGtlaW4gWndlaWcpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYwMAorbXNnaWQgInNvbWUgcmVmcyBjb3VsZCBub3QgYmUgcmVhZCIKK21zZ3N0ciAiS29ubnRlIGVpbmlnZSBSZWZlcmVuemVuIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxMworbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICIiCisiS2FubiBha3R1ZWxsZW4gWndlaWcgbmljaHQgdW1iZW5lbm5lbiwgc29sYW5nZSBkdSBkaWNoIGF1ZiBrZWluZW0gYmVmaW5kZXN0LiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgWndlaWctTmFtZTogJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJCcmFuY2ggcmVuYW1lIGZhaWxlZCIKK21zZ3N0ciAiVW1iZW5lbm51bmcgZGVzIFp3ZWlnZXMgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICJmYWxzY2ggYmVuYW5udGVuIFp3ZWlnICclcycgdW1iZW5hbm50IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICJad2VpZyB1bWJlbmFubnQgenUgJXMsIGFiZXIgWndlaWdzcGl0emUgKEhFQUQpIGlzdCBuaWNodCBha3R1YWxpc2llcnQhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MworbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorIlp3ZWlnIGlzdCB1bWJlbmFubnQsIGFiZXIgZGllIEFrdHVhbGlzaWVydW5nIGRlciBLb25maWd1cmF0aW9uc2RhdGVpIGlzdCAiCisiZmVobGdlc2NobGFnZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIk1pc3NnZWJpbGRldGVyIE9iamVrdG5hbWUgJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBicmFuY2ggZGVzY3JpcHRpb24gdGVtcGxhdGU6ICVzIgorbXNnc3RyICJLb25udGUgQmVzY2hyZWlidW5nc3ZvcmxhZ2UgZsO8ciBad2VpZyBuaWNodCBzY2hyZWliZW46ICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJLb25udGUgWndlaWdzcGl0emUgKEhFQUQpIG5pY2h0IGFscyBnw7xsdGlnZSBSZWZlcmVueiBhdWZsw7ZzZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4OCBidWlsdGluL2Nsb25lLmM6NTYxCittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIlp3ZWlnc3BpdHplIChIRUFEKSB3dXJkZSBuaWNodCB1bnRlciBcInJlZnMvaGVhZHNcIiBnZWZ1bmRlbiEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA4Cittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiB1bmQgLS12ZXJib3NlIHNpbmQgaW5rb21wYXRpYmVsIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg1NworbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLWEgdW5kIC1yIGJlaSAnZ2l0IGJyYW5jaCcgbWFjaGVuIG1pdCBlaW5lbSBad2VpZ25hbWVuIGtlaW5lbiAiCisiU2lubi4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyBpc3QgaW4gT3JkbnVuZ1xuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjU2Cittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAiVW0gZWluIFBha2V0IHp1IGVyc3RlbGxlbiB3aXJkIGVpbiBQcm9qZWt0YXJjaGl2IGJlbsO2dGlndC4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjAKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIlp1bSBFbnRwYWNrZW4gd2lyZCBlaW4gUHJvamVrdGFyY2hpdiBiZW7DtnRpZ3QuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIlBmYWQgJyVzJyBoYXQgbmljaHQgdW5zZXJlIFZlcnNpb24uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiUGZhZCAnJXMnIGhhdCBuaWNodCBkZXJlbiBWZXJzaW9uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJQZmFkICclcycgaGF0IG5pY2h0IGFsbGUgbm90d2VuZGlnZW4gVmVyc2lvbmVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIlBmYWQgJyVzJyBoYXQgbmljaHQgZGllIG5vdHdlbmRpZ2VuIFZlcnNpb25lbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgIlBmYWQgJyVzJzoga2FubiBuaWNodCB6dXNhbW1lbmbDvGhyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIktvbm50ZSBFcmdlYm5pcyBkZXIgWnVzYW1tZW5mw7xocnVuZyB2b24gJyVzJyBuaWNodCBoaW56dWbDvGdlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzUgYnVpbHRpbi9jaGVja291dC5jOjM5MgorbXNnaWQgImNvcnJ1cHQgaW5kZXggZmlsZSIKK21zZ3N0ciAiYmVzY2jDpGRpZ3RlIEJlcmVpdHN0ZWxsdW5nc2RhdGVpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjY1IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICJQZmFkICclcycgaXN0IG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzAzIGJ1aWx0aW4vY2hlY2tvdXQuYzo0OTggYnVpbHRpbi9jbG9uZS5jOjU4NgorIzogYnVpbHRpbi9tZXJnZS5jOjgxMQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiS29ubnRlIG5ldWUgQmVyZWl0c3RlbGx1bmdzZGF0ZWkgbmljaHQgc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQxNAorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJEdSBtdXNzdCB6dWVyc3QgZGVpbmUgYWt0dWVsbGUgQmVyZWl0c3RlbGx1bmcgYXVmbMO2c2VuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJ1xuIgorbXNnc3RyICJLb25udGUgXCJyZWZsb2dcIiBmw7xyICclcycgbmljaHQgZHVyY2hmw7xocmVuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NjYKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiWndlaWdzcGl0emUgKEhFQUQpIGlzdCBqZXR6dCBiZWkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiU2V0emUgWndlaWcgJyVzJyB6dXLDvGNrXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIkJlcmVpdHMgYXVmICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiR2V3ZWNoc2VsdCB6dSB6dXLDvGNrZ2VzZXR6dGVtIFp3ZWlnICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJHZXdlY2hzZWx0IHp1IGVpbmVtIG5ldWVuIFp3ZWlnICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJHZXdlY2hzZWx0IHp1IFp3ZWlnICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIgLi4uIHVuZCAlZCB3ZWl0ZXJlLlxuIgorCisjLiBUaGUgc2luZ3VsYXIgdmVyc2lvbgorIzogYnVpbHRpbi9jaGVja291dC5jOjY0NgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQWJvcnQgbWVyZ2U/XG4iCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKICJcbiIKLSJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCiAiXG4iCi0iQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCi1tc2dzdHIgIiIKLSJadXNhbW1lbmbDvGhyZW4gYWJicmVjaGVuP1xuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyJXYXJudW5nOiBEdSBiaXN0IHVtICVkIFZlcnNpb24gaGludGVyaGVyLCBuaWNodCB2ZXJidW5kZW4genVcbiIKKyJlaW5lbSBkZWluZXIgWndlaWdlOlxuIgogIlxuIgotIldlbm4gU2llIGFiYnJlY2hlbiwgZ2VoZW4gYWxsZSBub2NoIG5pY2h0IGVpbmdldHJhZ2VuZW4gw4RuZGVydW5nZW4gIgotInZlcmxvcmVuLlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyJXYXJudW5nOiBEdSBiaXN0IHVtICVkIFZlcnNpb25lbiBoaW50ZXJoZXIsIG5pY2h0IHZlcmJ1bmRlbiB6dVxuIgorImVpbmVtIGRlaW5lciBad2VpZ2U6XG4iCiAiXG4iCi0iWnVzYW1tZW5mw7xocmVuIGpldHp0IGFiYnJlY2hlbj8iCisiJXNcbiIKIAotIzogbGliL21lcmdlLnRjbDoyMjgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NjQKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlJlc2V0IGNoYW5nZXM/XG4iCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgogIlxuIgotIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyIgZ2l0IGJyYW5jaCBuZXdfYnJhbmNoX25hbWUgJXNcbiIKICJcbiIKLSJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKIG1zZ3N0ciAiIgotIsOEbmRlcnVuZ2VuIHp1csO8Y2tzZXR6ZW4/XG4iCisiV2VubiBkdSBkaWVzZSBkdXJjaCBlaW5lbiBuZXVlbiBad2VpZyBiZWhhbHRlbiBtw7ZjaHRlc3QsIGRhbm4ga8O2bm50ZSBqZXR6dFxuIgorImVpbiBndXRlciBaZWl0cHVua3Qgc2VpbiBkaWVzIHp1IHR1biBtaXQ6XG4iCiAiXG4iCi0iV2VubiBTaWUgenVyw7xja3NldHplbiwgZ2VoZW4gYWxsZSBub2NoIG5pY2h0IGVpbmdldHJhZ2VuZW4gw4RuZGVydW5nZW4gIgotInZlcmxvcmVuLlxuIgorIiBnaXQgYnJhbmNoIG5ldWVyX3p3ZWlnX25hbWUgJXNcbiIKICJcbiIKLSLDhG5kZXJ1bmdlbiBqZXR6dCB6dXLDvGNrc2V0emVuPyIKIAotIzogbGliL21lcmdlLnRjbDoyMzkKLW1zZ2lkICJBYm9ydGluZyIKLW1zZ3N0ciAiQWJicnVjaCIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2OTQKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICJpbnRlcm5lciBGZWhsZXIgaW0gUmV2aXNpb25zZ2FuZyIKIAotIzogbGliL21lcmdlLnRjbDoyMzkKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAiRGF0ZWllbiB6dXLDvGNrZ2VzZXR6dCIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2OTgKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiVm9yaGVyaWdlIFBvc2l0aW9uIGRlciBad2VpZ3NwaXR6ZSAoSEVBRCkgd2FyIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI2NwotbXNnaWQgIkFib3J0IGZhaWxlZC4iCi1tc2dzdHIgIkFiYnJ1Y2ggZmVobGdlc2NobGFnZW4uIgorIzogYnVpbHRpbi9jaGVja291dC5jOjcyNCBidWlsdGluL2NoZWNrb3V0LmM6OTE5Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiZHUgYmlzdCBhdWYgZWluZW0gWndlaWcsIGRlciBub2NoIGdlYm9yZW4gd2lyZCIKIAotIzogbGliL21lcmdlLnRjbDoyNjkKLW1zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCi1tc2dzdHIgIkFiYnJ1Y2ggZHVyY2hnZWbDvGhydC4gQmVyZWl0LiIKKyMuIGNhc2UgKDEpCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZlcmVuejogJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjgKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgotbXNnc3RyICJLb25mbGlrdCBkdXJjaCBCYXNpc3ZlcnNpb24gZXJzZXR6ZW4/IgorIy4gY2FzZSAoMSk6IHdhbnQgYSB0cmVlCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiUmVmZXJlbnogaXN0IGtlaW4gQmF1bTogJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjkKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKLW1zZ3N0ciAiS29uZmxpa3QgZHVyY2ggZGllc2VuIFp3ZWlnIGVyc2V0emVuPyIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzYKK21zZ2lkICItQiBjYW5ub3QgYmUgdXNlZCB3aXRoIC1iIgorbXNnc3RyICItQiBrYW5uIG5pY2h0IG1pdCAtYiBiZW51dHp0IHdlcmRlbiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTAKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/IgotbXNnc3RyICJLb25mbGlrdCBkdXJjaCBhbmRlcmVuIFp3ZWlnIGVyc2V0emVuPyIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODUKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBvcHRpb25zIgorbXNnc3RyICItLXBhdGNoIGlzdCBpbmtvbXBhdGliZWwgbWl0IGFsbGVuIGFuZGVyZW4gT3B0aW9uZW4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg4Cittc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtYi8tQi8tLW9ycGhhbiIKK21zZ3N0ciAiLS1kZXRhY2gga2FubiBuaWNodCBtaXQgLWIvLUIvLS1vcnBoYW4gYmVudXR6dCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5OTAKK21zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorbXNnc3RyICItLWRldGFjaCBrYW5uIG5pY2h0IG1pdCAtdCBiZW51dHp0IHdlcmRlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk5NgorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayBiZW7DtnRpZ3QgZWluZW4gWndlaWduYW1lbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDMKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIlZlcm1pc3NlIFp3ZWlnbmFtZW47IHZlcnN1Y2hlIC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwOQorbXNnaWQgIi0tb3JwaGFuIGFuZCAtYnwtQiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLW9ycGhhbiB1bmQgLWJ8LUIgc2luZCBnZWdlbnNlaXRpZyBleGtsdXNpdiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTEKK21zZ2lkICItLW9ycGhhbiBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorbXNnc3RyICItLW9ycGhhbiBrYW5uIG5pY2h0IG1pdCAtdCBiZW51dHp0IHdlcmRlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjEKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC1mIGFuZCAtbSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC1mIHVuZCAtbSBzaW5kIGlua29tcGF0aWJlbCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTUKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAidW5nw7xsdGlnZSBQZmFkc3BlemlmaWthdGlvbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNjMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIk5vdGUgdGhhdCB0aGUgZGlmZiBzaG93cyBvbmx5IGNvbmZsaWN0aW5nIGNoYW5nZXMuXG4iCi0iXG4iCi0iJXMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiIKLSJcbiIKLSJUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdW5kb25lIG9ubHkgYnkgcmVzdGFydGluZyB0aGUgbWVyZ2UuIgorImdpdCBjaGVja291dDogdXBkYXRpbmcgcGF0aHMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLlxuIgorIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgogbXNnc3RyICIiCi0iSGlud2VpczogRGVyIFZlcmdsZWljaCB6ZWlndCBudXIga29uZmxpa3R2ZXJ1cnNhY2hlbmRlIMOEbmRlcnVuZ2VuIGFuLlxuIgotIlxuIgotIsK7JXPCqyB3aXJkIMO8YmVyc2NocmllYmVuLlxuIgotIlxuIgotIkRpZXNlIE9wZXJhdGlvbiBrYW5uIG51ciByw7xja2fDpG5naWcgZ2VtYWNodCB3ZXJkZW4sIHdlbm4gZGllXG4iCi0iWnVzYW1tZW5mw7xocnVuZyBlcm5ldXQgZ2VzdGFydGV0IHdpcmQuIgorImdpdCBjaGVja291dDogRGllIEFrdHVhbGlzaWVydW5nIHZvbiBQZmFkZW4gaXN0IGlua29tcGF0aWJlbCBtaXQgZGVtIFdlY2hzZWwgIgorInZvbiBad2VpZ2VuLlxuIgorIkhhc3QgZHUgYmVhYnNpY2h0aWd0ICclcycgYXVzenVjaGVja2VuLCB3ZWxjaGVyIG5pY2h0IGFscyBWZXJzaW9uIGF1ZmdlbMO2c3QgIgorIndlcmRlbiBrYW5uPyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6NDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKLW1zZ3N0ciAiRGF0ZWkgwrslc8KrIGhhdCBuaWNodCBhdWZnZWzDtnN0ZSBLb25mbGlrdGUuIFRyb3R6ZGVtIGJlcmVpdHN0ZWxsZW4/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKLW1zZ3N0ciAiQXVmbMO2c3VuZyBoaW56dWdlZsO8Z3QgZsO8ciAlcyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTQxCi1tc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorIzogYnVpbHRpbi9jaGVja291dC5jOjEwNjUKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IHVwZGF0aW5nIHBhdGhzIGlzIGluY29tcGF0aWJsZSB3aXRoIHN3aXRjaGluZyBicmFuY2hlcy4iCiBtc2dzdHIgIiIKLSJLb25mbGlrdGUgZHVyY2ggZ2Vsw7ZzY2h0ZSBEYXRlaWVuIG9kZXIgc3ltYm9saXNjaGUgTGlua3Mga8O2bm5lbiBuaWNodCBkdXJjaCAiCi0iZGFzIFp1c2FtZW5mw7xocnVuZ3N3ZXJremV1ZyBnZWzDtnN0IHdlcmRlbi4iCisiZ2l0IGNoZWNrb3V0OiBEaWUgQWt0dWFsaXNpZXJ1bmcgdm9uIFBmYWRlbiBpc3QgaW5rb21wYXRpYmVsIG1pdCBkZW0gV2VjaHNlbCAiCisidm9uIFp3ZWlnZW4uIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKLW1zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgotbXNnc3RyICJLb25mbGlrdC1EYXRlaSBleGlzdGllcnQgbmljaHQiCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3MAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQiCittc2dzdHIgImdpdCBjaGVja291dDogLS1kZXRhY2ggbmltbXQga2VpbiBQZmFkLUFyZ3VtZW50IgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKLW1zZ3N0ciAiS2VpbiBHVUkgWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1Zzogwrslc8KrIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciCi1tc2dzdHIgIlVuYmVrYW5udGVzIFp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWc6IMK7JXPCqyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzAzCi1tc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcgbMOkdWZ0IGJlcmVpdHMuIFNvbGwgZXMgYWJnZWJyb2NoZW4gd2VyZGVuPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzIzCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3MwogbXNnaWQgIiIKLSJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgdW5kIC0tbWVyZ2Ugc2luZCBpbmtvbXBhdGliZWwgd2VublxuIgorImR1IGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgYXVzY2hlY2tzdC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDkyCittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0LiIKK21zZ3N0ciAiS2FubiBad2VpZyBudXIgenUgZWluZXIgVmVyc2lvbiB3ZWNoc2Vsbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDk1Cittc2dpZCAiLS1vdXJzLy0tdGhlaXJzIGlzIGluY29tcGF0aWJsZSB3aXRoIHN3aXRjaGluZyBicmFuY2hlcy4iCittc2dzdHIgIi0tb3Vycy8tLXRoZWlycyBpc3QgaW5rb21wYXRpYmVsIG1pdCBkZW4gV2VjaHNlbG4gdm9uIFp3ZWlnZW4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzgKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IHVuZCAtWCBrw7ZubmVuIG5pY2h0IHp1c2FtbWVuIGJlbnV0enQgd2VyZGVuIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODIKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1uIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgYXVmIFwidHJ1ZVwiIGdlc2V0enQgdW5kIHdlZGVyIC1uIG5vY2ggLWYgZ2VnZWJlbjsgIgorIlPDpHViZXJ1bmcgdmVyd2VpZ2VydCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg1Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1uIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gIgorImNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHN0YW5kYXJkbcOkw59pZyBhdWYgXCJ0cnVlXCIgZ2VzZXR6dCB1bmQgd2VkZXIgLW4gbm9jaCAtZiAiCisiZ2VnZWJlbjsgU8OkdWJlcnVuZyB2ZXJ3ZWlnZXJ0IgorCisjOiBidWlsdGluL2NsZWFuLmM6MTU1IGJ1aWx0aW4vY2xlYW4uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIlfDvHJkZSAlcyBlbnRmZXJuZW5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE1OSBidWlsdGluL2NsZWFuLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIkVudGZlcm5lICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNjIgYnVpbHRpbi9jbGVhbi5jOjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFbnRmZXJuZW4gdm9uICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIG5vdCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiV8O8cmRlIG5pY2h0IGVudGZlcm5lbiAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCByZW1vdmluZyAlc1xuIgorbXNnc3RyICJFbnRmZXJuZSBuaWNodCAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgZGlyZWN0b3J5LiIKK21zZ3N0ciAiUmVmZXJlbnppZXJ0ZXMgUHJvamVrdGFyY2hpdiAnJXMnIGlzdCBrZWluIGxva2FsZXMgVmVyemVpY2huaXMuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiB2b24gVmVyemVpY2huaXMgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwOCBidWlsdGluL2RpZmYuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgZXhpc3RpZXJ0IHVuZCBpc3Qga2VpbiBWZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlc1xuIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgbGVzZW5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFZlcmtuw7xwZnVuZyAnJXMnIG5pY2h0IGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgIktvbm50ZSBEYXRlaSBuaWNodCBuYWNoICclcycga29waWVyZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiRmVydGlnLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJLb25udGUgenUga2xvbmVuZGVuIGV4dGVybmVyIFp3ZWlnICVzIG5pY2h0IGZpbmRlbi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NTIKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKyJFeHRlcm5lIFp3ZWlnc3BpdHplIChIRUFEKSBiZXppZWh0IHNpY2ggYXVmIGVpbmUgbmljaHQgZXhpc3RpZXJlbmRlIFJlZmVyZW56ICIKKyJ1bmQga2FubiBuaWNodCBhdXNnZWNoZWNrdCB3ZXJkZW4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NDIKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJadSB2aWVsZSBBcmd1bWVudGUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjQ2Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICJEdSBtdXNzdCBlaW4gUHJvamVrdGFyY2hpdiB6dW0gS2xvbmVuIGFuZ2ViZW4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlIHVuZCAtLW9yaWdpbiAlcyBPcHRpb25lbiBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJQcm9qZWt0YXJjaGl2ICclcycgZXhpc3RpZXJ0IG5pY2h0LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY3NgorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLWRlcHRoIHdpcmQgaW4gbG9rYWxlbiBLbG9uZW4gaWdub3JpZXJ0OyBiZW51dHplIHN0YXR0ZGVzc2VuIGZpbGU6Ly8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIlppZWxwZmFkICclcycgZXhpc3RpZXJ0IGJlcmVpdHMgdW5kIGlzdCBrZWluIGxlZXJlcyBWZXJ6ZWljaG5pcy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJBcmJlaXRzYmF1bSAnJXMnIGV4aXN0aWVydCBiZXJlaXRzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwOSBidWlsdGluL2Nsb25lLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICJLb25udGUgZsO8aHJlbmRlIFZlcnplaWNobmlzc2Ugdm9uICclcycgbmljaHQgZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJy4iCittc2dzdHIgIktvbm50ZSBBcmJlaXRzdmVyemVpY2huaXMgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJLbG9uZSBpbiBibG/Dn2VzIFByb2pla3RhcmNoaXYgJyVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIktsb25lIG5hY2ggJyVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorbXNnc3RyICJXZWnDnyBuaWNodCB3aWUgJXMgenUga2xvbmVuIGlzdC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgImV4dGVybmVyIFp3ZWlnICVzIG5pY2h0IGltIGFuZGVyZW4gUHJvamVrdGFyY2hpdiAlcyBnZWZ1bmRlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0NQorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgIkR1IHNjaGVpbnN0IGVpbiBsZWVyZXMgUHJvamVrdGFyY2hpdiBnZWtsb250IHp1IGhhYmVuLiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiT3B0aW9uIC0tY29tbWFuZCBtdXNzIHp1ZXJzdCBhbmdlZ2ViZW4gd2VyZGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQzCittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiRGVpbiBOYW1lIHVuZCBFLU1haWwgQWRyZXNzZSB3dXJkZW4gYXV0b21hdGlzY2ggYXVmIEJhc2lzXG4iCisiZGVpbmVzIEJlbnV0emVyLSB1bmQgUmVjaG5lcm5hbWVucyBrb25maWd1cmllcnQuIEJpdHRlIHByw7xmZSwgZGFzcyBkaWVzZVxuIgorInp1dHJlZmZlbmQgc2luZC4gRHUga2FubnN0IGRpZXNlIE1lbGR1bmcgdW50ZXJkcsO8Y2tlbiwgaW5kZW0gZHUgZGllc2VcbiIKKyJleHBsaXppdCBzZXR6dDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJEZWluIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgZGVpbmVAZW1haWxhZHJlc3NlLmRlXG4iCisiXG4iCisiTmFjaGRlbSBkdSBkYXMgZ2V0YW4gaGFzdCwga2FubnN0IGR1IGRlaW5lIElkZW50aXTDpHQgZsO8ciBkaWVzZSBWZXJzaW9uICIKKyLDpG5kZXJuIG1pdDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTUKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyJEdSBmcmFndGVzdCBkaWUgasO8bmdzdGUgVmVyc2lvbiBuYWNoenViZXNzZXJuLCBhYmVyIGRhcyB3w7xyZGUgZGllc2UgbGVlclxuIgorIm1hY2hlbi4gRHUga2FubnN0IERlaW4gS29tbWFuZG8gbWl0IC0tYWxsb3ctZW1wdHkgd2llZGVyaG9sZW4sIG9kZXIgZGllXG4iCisiVmVyc2lvbiBtaXQgXCJnaXQgcmVzZXQgSEVBRF5cIiB2b2xsc3TDpG5kaWcgZW50ZmVybmVuLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwCittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgcmVzZXQnXG4iCittc2dzdHIgIiIKKyJEZXIgbGV0enRlIFwiY2hlcnJ5LXBpY2tcIiBpc3QgamV0enQgbGVlciwgbcO2Z2xpY2hlcndlaXNlIGR1cmNoIGVpbmUgIgorIktvbmZsaWt0YXVmbMO2c3VuZy5cbiIKKyJXZW5uIGR1IGRpZXMgdHJvdHpkZW0gZWludHJhZ2VuIHdpbGxzdCwgYmVudXR6ZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisiQW5kZXJuZmFsbHMgYmVudXR6ZSBiaXR0ZSAnZ2l0IHJlc2V0J1xuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjI1NgorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRW50cGFja2VuIGRlcyBCYXVtLU9iamVrdGVzIGRlciBad2VpZ3NwaXR6ZSAoSEVBRCkuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjI5OAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJLb25udGUgdGVtcG9yw6RyZSBCZXJlaXRzdGVsbHVuZyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMwNAorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImludGVyYWt0aXZlcyBIaW56dWbDvGdlbiBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMzcgYnVpbHRpbi9jb21taXQuYzozNTggYnVpbHRpbi9jb21taXQuYzo0MDgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgIktvbm50ZSBuZXdfaW5kZXggRGF0ZWkgbmljaHQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4OQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAiIgorIkthbm4ga2VpbmUgcGFydGllbGxlIEVpbnRyYWd1bmcgZHVyY2hmw7xocmVuLCB3w6RocmVuZCBlaW5lIFp1c2FtbWVuZsO8aHJ1bmcgaW0gIgorIkdhbmdlIGlzdC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzkxCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisiS2FubiBrZWluZSBwYXJ0aWVsbGUgRWludHJhZ3VuZyBkdXJjaGbDvGhyZW4sIHfDpGhyZW5kIFwiY2hlcnJ5LXBpY2tcIiBpbSAiCisiR2FuZ2UgaXN0LiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MDEKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIkthbm4gQmVyZWl0c3RlbGx1bmcgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDIxCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgdGVtcG9yw6RyZSBCZXJlaXRzdGVsbHVuZ3NkYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ5NiBidWlsdGluL2NvbW1pdC5jOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdDogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgVmVyc2lvbjogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTI1Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAiRmVobGVyaGFmdGVyIC0tYXV0aG9yIFBhcmFtZXRlciIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlkZW50IHN0cmluZzogJyVzJyIKK21zZ3N0ciAiRmVobGVyaGFmdGUgSWRlbnRpZmlrYXRpb25zLVN0cmluZzogJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MjMgYnVpbHRpbi9jb21taXQuYzo2NTYgYnVpbHRpbi9jb21taXQuYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIktvbm50ZSBWZXJzaW9uICVzIG5pY2h0IG5hY2hzY2hsYWdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MzUgYnVpbHRpbi9zaG9ydGxvZy5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIobGVzZSBMb2ctTmFjaHJpY2h0IHZvbiBTdGFuZGFyZC1FaW5nYWJlKVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzNworbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJLb25udGUgTG9nIG5pY2h0IHZvbiBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIExvZy1EYXRlaSAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY0NworbXNnaWQgImNvbW1pdCBoYXMgZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiVmVyc2lvbiBoYXQgZWluZSBsZWVyZSBCZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYzCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJLb25udGUgTUVSR0VfTVNHIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY2NworbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgIktvbm50ZSBTUVVBU0hfTVNHIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjMKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICJLb25udGUgVmVyc2lvbnN2b3JsYWdlIG5pY2h0IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXMgc2llaHQgc28gYXVzLCBhbHMgdHLDpGdzdCBkdSBlaW5lIFp1c2FtbWVuZsO8aHJ1bmcgZWluLlxuIgorIkZhbGxzIGRhcyBuaWNodCBrb3JyZWt0IGlzdCwgZW50ZmVybmUgYml0dGUgZGllIERhdGVpXG4iCisiXHQlc1xuIgorInVuZCB2ZXJzdWNoZSBlcyBlcm5ldXQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVzIHNpZWh0IHNvIGF1cywgYWxzIHRyw6Rnc3QgZHUgZWluIFwiY2hlcnJ5LXBpY2tcIiBlaW4uXG4iCisiRmFsbHMgZGFzIG5pY2h0IGtvcnJla3QgaXN0LCBlbnRmZXJuZSBiaXR0ZSBkaWUgRGF0ZWlcbiIKKyJcdCVzXG4iCisidW5kIHZlcnN1Y2hlIGVzIGVybmV1dC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NTEKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJCaXR0ZSBnZWJlIGVpbmUgVmVyc2lvbnNiZXNjaHJlaWJ1bmcgZsO8ciBkZWluZSDDhG5kZXJ1bmdlbiBlaW4uIFplaWxlbixcbiIKKyJkaWUgbWl0ICcjJyBiZWdpbm5lbiwgd2VyZGVuIGlnbm9yaWVydCwgdW5kIGVpbmUgbGVlcmUgVmVyc2lvbnNiZXNjaHJlaWJ1bmdcbiIKKyJicmljaHQgZGllIEVpbnRyYWd1bmcgYWIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzU2Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICcjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkJpdHRlIGdlYmUgZWluZSBWZXJzaW9uc2Jlc2NocmVpYnVuZyBmw7xyIGRlaW5lIMOEbmRlcnVuZ2VuIGVpbi4gWmVpbGVuLCBkaWVcbiIKKyJtaXQgJyMnIGJlZ2lubmVuLCB3ZXJkZW4gYmVpYmVoYWx0ZW47IHdlbm4gZHUgbcO2Y2h0ZXN0LCBrYW5uc3QgZHUgZGllc2UgIgorImVudGZlcm5lbi5cbiIKKyJFaW5lIGxlZXJlIFZlcnNpb25zYmVzY2hyZWlidW5nIGJyaWNodCBkaWUgRWludHJhZ3VuZyBhYi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICVzIgorbXNnc3RyICIlc0F1dG9yOiAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICVzIgorbXNnc3RyICIlc0VpbnRyYWdlbmRlcjogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzk2Cittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIkthbm4gQmVyZWl0c3RlbGx1bmcgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODMzCittc2dpZCAiRXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIkZlaGxlciBiZWltIEVyemV1Z2VuIGRlciBad2VpZ2UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQ4IGJ1aWx0aW4vdGFnLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiQml0dGUgbGllZmVyZSBlaW5lIEJlc2NocmVpYnVuZyBlbnR3ZWRlciBtaXQgZGVyIE9wdGlvbiAtbSBvZGVyIC1GLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBleGlzdGluZyBhdXRob3IgZm91bmQgd2l0aCAnJXMnIgorbXNnc3RyICJLZWluIGV4aXN0aWVyZW5kZXIgQXV0b3IgbWl0ICclcycgZ2VmdW5kZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk2MCBidWlsdGluL2NvbW1pdC5jOjExNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBNb2R1cyAnJXMnIGbDvHIgdW5iZW9iYWNodGV0ZSBEYXRlaWVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDAKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJWZXJ3ZW5kdW5nIHZvbiAtLXJlc2V0LWF1dGhvciB1bmQgLS1hdXRob3IgbWFjaHQga2VpbmVuIFNpbm4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMTEKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiRHUgaGFzdCBuaWNodHMgenVtIG5hY2hiZXNzZXJuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDE0Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiRWluZSBadXNhbW1lbmbDvGhydW5nIGlzdCBpbSBHYW5nZSAtLSBrYW5uIG5pY2h0IG5hY2hiZXNzZXJuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDE2Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hlcnJ5LXBpY2sgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiXCJjaGVycnktcGlja1wiIGlzdCBpbSBHYW5nZSAtLSBrYW5uIG5pY2h0IG5hY2hiZXNzZXJuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDE5Cittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb25lbiAtLXNxdWFzaCB1bmQgLS1maXh1cCBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSBiZW51dHp0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAyOQorbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICJOdXIgZWluZXMgdm9uIC1jLy1DLy1GLy0tZml4dXAga2FubiBiZW51dHp0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAzMQorbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi8tLWZpeHVwLiIKK21zZ3N0ciAiT3B0aW9uIC1tIGthbm4gbmljaHQgbWl0IC1jLy1DLy1GLy0tZml4dXAga29tYmluaWVydCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAzOQorbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtLWF1dGhvciBrYW5uIG51ciBtaXQgLUMsIC1jIG9kZXIgLS1hbWVuZCBiZW51dHp0IHdlcmRlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU2Cittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisiTnVyIGVpbmVzIHZvbiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBrYW5uIGJlbnV0enQgIgorIndlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1OAorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiLS1pbmNsdWRlLy0tb25seSBtYWNoZW4gb2huZSBQZmFkZSBrZWluZW4gU2lubi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2MAorbXNnaWQgIkNsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iCittc2dzdHIgIiIKKyJLbHVnLi4uIGRpZSBsZXR6dGUgVmVyc2lvbiBtaXQgZWluZXIgdW5zYXViZXJlbiBCZXJlaXRzdGVsbHVuZyBuYWNoYmVzc2Vybi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2MgorbXNnaWQgIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG5vciAtbzsgYXNzdW1pbmcgLS1vbmx5IHBhdGhzLi4uIgorbXNnc3RyICIiCisiRXhwbGl6aXRlIFBmYWRlIG9obmUgLWkgb2RlciAtbyBhbmdlZ2ViZW47IHVudGVyIGRlciBBbm5haG1lIHZvbiAtLW9ubHkgIgorIlBmYWRlbi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDcyIGJ1aWx0aW4vdGFnLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBcImNsZWFudXBcIiBNb2R1cyAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDc3Cittc2dpZCAiUGF0aHMgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiUGZhZGUgbWl0IC1hIG1hY2hlbiBrZWluZW4gU2lubi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTI2MAorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIktvbm50ZSBuZXUgZXJzdGVsbHRlIFZlcnNpb24gbmljaHQgbmFjaHNjaGxhZ2VuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjYyCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJLb25udGUgbmV1bGljaCBlcnN0ZWxsdGUgVmVyc2lvbiBuaWNodCBhbmFseXNpZXJlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMwMworbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgImxvc2dlbMO2c3RlIFp3ZWlnc3BpdHplIChIRUFEKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzA1Cittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAoQmFzaXMtVmVyc2lvbikiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ0OQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAiS29ubnRlIFZlcnNpb24gZGVyIFp3ZWlnc3BpdHplIChIRUFEKSBuaWNodCBhbmFseXNpZXJlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NyBidWlsdGluL21lcmdlLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBMZXNlbiDDtmZmbmVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIkJlc2Now6RkaWd0ZSBNRVJHRV9IRUFELURhdGVpICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIktvbm50ZSBNRVJHRV9NT0RFIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICJLb25udGUgVmVyc2lvbnNiZXNjaHJlaWJ1bmcgbmljaHQgbGVzZW46ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICJFaW50cmFndW5nIGFiZ2Vicm9jaGVuOyBkdSBoYXN0IGRpZSBCZXNjaHJlaWJ1bmcgbmljaHQgZWRpdGllcnQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJFaW50cmFndW5nIGF1ZmdydW5kIGxlZXJlciBWZXJzaW9uc2Jlc2NocmVpYnVuZyBhYmdlYnJvY2hlbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTU0IGJ1aWx0aW4vbWVyZ2UuYzo5MzUgYnVpbHRpbi9tZXJnZS5jOjk2MAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVzIFZlcnNpb25zb2JqZWt0ZXMuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzUKK21zZ2lkICJjYW5ub3QgbG9jayBIRUFEIHJlZiIKK21zZ3N0ciAiS2FubiBSZWZlcmVueiBkZXIgWndlaWdzcGl0emUgKEhFQUQpIG5pY2h0IHNwZXJyZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzkKK21zZ2lkICJjYW5ub3QgdXBkYXRlIEhFQUQgcmVmIgorbXNnc3RyICJLYW5uIFJlZmVyZW56IGRlciBad2VpZ3NwaXR6ZSAoSEVBRCkgbmljaHQgYWt0dWFsaXNpZXJlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5MAorbXNnaWQgIiIKKyJSZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIG9yIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJEYXMgUHJvamVrdGFyY2hpdiB3dXJkZSBha3R1YWxpc2llcnQsIGFiZXIgZGllIFwibmV3X2luZGV4XCItRGF0ZWlcbiIKKyJrb25udGUgbmljaHQgZ2VzY2hyaWViZW4gd2VyZGVuLiBQcsO8ZmUsIGRhc3MgZGVpbmUgRmVzdHBsYXR0ZSBuaWNodFxuIgorInZvbGwgdW5kIERlaW4gS29udGluZ2VudCBuaWNodCBhdWZnZWJyYXVjaHQgaXN0IHVuZCBmw7xocmVcbiIKKyJhbnNjaGxpZcOfZW5kIFwiZ2l0IHJlc2V0IEhFQURcIiB6dSBXaWVkZXJoZXJzdGVsbHVuZyBhdXMuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYW5ub3RpZXJ0ZSBNYXJraWVydW5nICVzIGlzdCBuaWNodCB2ZXJmw7xnYmFyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgImFubm90aWVydGUgTWFya2llcnVuZyAlcyBoYXQga2VpbmVuIGVpbmdlYmV0dGV0ZW4gTmFtZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAiTWFya2llcnVuZyAnJXMnIGlzdCBlaWdlbnRsaWNoICclcycgaGllciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiJXMgaXN0IGtlaW4gZ8O8bHRpZ2VyIE9iamVrdC1OYW1lIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyBpc3Qga2VpbiBnw7xsdGlnZXMgJyVzJyBPYmpla3QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICJrZWluIE1hcmtpZXJ1bmcgZW50c3ByaWNodCBleGFrdCAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInNlYXJjaGluZyB0byBkZXNjcmliZSAlc1xuIgorbXNnc3RyICJzdWNoZSB6dXIgQmVzY2hyZWlidW5nIHZvbiAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJiZWVuZGV0ZSBTdWNoZSBiZWkgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIktlaW5lIGFubm90aWVydGVuIE1hcmtpZXJ1bmdlbiBrw7ZubmVuICclcycgYmVzY2hyZWliZW4uXG4iCisiSmVkb2NoIGdhYiBlcyBuaWNodCBhbm5vdGllcnRlIE1hcmtpZXJ1bmdlbjogdmVyc3VjaGUgLS10YWdzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisiS2VpbmUgTWFya2llcnVuZ2VuIGvDtm5uZW4gJyVzJyBiZXNjaHJlaWJlbi5cbiIKKyJWZXJzdWNoZSAtLWFsd2F5cyBvZGVyIGVyc3RlbGxlIGVpbmlnZSBNYXJraWVydW5nZW4uIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICIlbHUgVmVyc2lvbmVuIGR1cmNobGF1ZmVuXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisibWVociBhbHMgJWkgTWFya2llcnVuZ2VuIGdlZnVuZGVuOyBGw7xocmUgZGllIGVyc3RlbiAlaSBhdWZcbiIKKyJTdWNoZSBiZWkgJXMgYXVmZ2VnZWJlblxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDM2Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyBpc3QgaW5rb21wYXRpYmVsIG1pdCAtLWFiYnJldj0wIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDYyCittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIktlaW5lIE5hbWVuIGdlZnVuZGVuLCBrYW5uIG5pY2h0cyBiZXNjaHJlaWJlbi4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0ODIKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdHRpc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSBpc3QgaW5rb21wYXRpYmVsIG1pdCBWZXJzaW9uZW4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMnOiBrZWluZSByZWd1bMOkcmUgRGF0ZWkgb2RlciBzeW1ib2xpc2NoZXIgTGluayIKKworIzogYnVpbHRpbi9kaWZmLmM6MjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBPcHRpb246ICVzIgorCisjOiBidWlsdGluL2RpZmYuYzozMDEKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiS2VpbiBHaXQtUHJvamVrdGFyY2hpdiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJPYmpla3QgJyVzJyBpc3QgdW5nw7xsdGlnLiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiAlZCB0cmVlcyBnaXZlbjogJyVzJyIKK21zZ3N0ciAiTWVociBhbHMgJWQgWndlaWdlIGFuZ2VnZWJlbjogJyVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIk1laHIgYWxzIHp3ZWkgQmxvYnMgYW5nZWdlYmVuOiAnJXMnIgorCisjOiBidWlsdGluL2RpZmYuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAidW5iZWhhbmRlbHRlcyBPYmpla3QgJyVzJyBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDAKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiS29ubnRlIGV4dGVybmUgUmVmZXJlbnogZGVyIFp3ZWlnc3BpdHplIChIRUFEKSBuaWNodCBmaW5kZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIk9iamVrdCAlcyBuaWNodCBnZWZ1bmRlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI1OQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW2FrdHVlbGxdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiEgJS0qcyAlLSpzIC0+ICVzICAoY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2gpIgorbXNnc3RyICIhICUtKnMgJS0qcyAtPiAlcyAgKGthbm4gbmljaHQgaW0gYWt0dWVsbGVuIFp3ZWlnIGFuZm9yZGVybikiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNzQgYnVpbHRpbi9mZXRjaC5jOjM2MAorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIlt6dXLDvGNrZ2V3aWVzZW5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mjg1Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJbTWFya2llcnVuZ3Nha3R1YWxpc2llcnVuZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyODcgYnVpbHRpbi9mZXRjaC5jOjMyMiBidWlsdGluL2ZldGNoLmM6MzQwCittc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorbXNnc3RyICIgIChrYW5uIGxva2FsZSBSZWZlcmVueiBuaWNodCBha3R1YWxpc2llcmVuKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwNQorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW25ldWUgTWFya2llcnVuZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMDgKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltuZXVlciBad2VpZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMTEKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIltuZXVlIFJlZmVyZW56XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICJrYW5uIGxva2FsZSBSZWZlcmVueiBuaWNodCBha3R1YWxpc2llcmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzU2Cittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ1bmcgZXJ6d3VuZ2VuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYyCittc2dpZCAiKG5vbi1mYXN0LWZvcndhcmQpIgorbXNnc3RyICIoa2VpbiBWb3JzcHVsZW4pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzkzIGJ1aWx0aW4vZmV0Y2guYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgImthbm4gJXMgbmljaHQgw7ZmZm5lbjogJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIGhhdCBuaWNodCBhbGxlIGVyZm9yZGVybGljaGVuIE9iamVrdGUgZ2VzZW5kZXRcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiVm9uICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisiRWluaWdlIGxva2FsZSBSZWZlcmVuemVuIGtvbm50ZW4gbmljaHQgYWt0dWFsaXNpZXJ0IHdlcmRlbjsgdmVyc3VjaGVcbiIKKyInZ2l0IHJlbW90ZSBwcnVuZSAlcycgdW0gamVkZW4gw6RsdGVyZW4sIHdpZGVyc3Byw7xjaGxpY2hlbiBad2VpZyB6dSBlbnRmZXJuZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyB3aXJkIHVucmVmZXJlbnppZXJ0KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyB3dXJkZSB1bnJlZmVyZW56aWVydCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTcKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIltnZWzDtnNjaHRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTU4IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NQorbXNnaWQgIihub25lKSIKK21zZ3N0ciAiKG5pY2h0cykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisiRGFzIEFuZm9yZGVybiBpbiBkZW4gYWt0dWVsbGVuIFp3ZWlnICVzIHZvbiBlaW5lbSBuaWNodC1ibG/Dn2VuIFByb2pla3RhcmNoaXYgIgorInd1cmRlIHZlcndlaWdlcnQuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGZldGNoIGZyb20gJXMiCittc2dzdHIgIldlacOfIG5pY2h0IHdpZSB2b24gJXMgYW5nZWZvcmRlcnQgd2lyZC4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiT3B0aW9uIFwiJXNcIiBXZXJ0IFwiJXNcIiBpc3QgbmljaHQgZ8O8bHRpZyBmw7xyICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiT3B0aW9uIFwiJXNcIiB3aXJkIGlnbm9yaWVydCBmw7xyICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiRm9yZGVyZSBhbiB2b24gJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg5MCBidWlsdGluL3JlbW90ZS5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIktvbm50ZSBuaWNodCB2b24gJXMgYW5mb3JkZXJuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTA3Cittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJLZWluIGV4dGVybmVzIFByb2pla3RhcmNoaXYgYW5nZWdlYmVuLiBCaXR0ZSBnZWJlIGVudHdlZGVyIGVpbmUgVVJMXG4iCisib2RlciBkZW4gTmFtZW4gZGVzIGV4dGVybmVuIEFyY2hpdnMgYW4sIHZvbiB3ZWxjaGVtIG5ldWVcbiIKKyJWZXJzaW9uZW4gYW5nZWZvcmRlcnQgd2VyZGVuIHNvbGxlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MjcKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICJEdSBtdXNzdCBkZW4gTmFtZW4gZGVyIE1hcmtpZXJ1bmcgYW5nZWJlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NzkKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgYWt6ZXB0aWVydCBrZWluIFByb2pla3RhcmNoaXYgYWxzIEFyZ3VtZW50IgorCisjOiBidWlsdGluL2ZldGNoLmM6OTgxCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCBtYWNodCBrZWluZW4gU2lubiBtaXQgUmVmZXJlbnpzcGV6aWZpa2F0aW9uZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiS2VpbiBleHRlcm5lcyBBcmNoaXYgKGVpbnplbG4gb2RlciBHcnVwcGUpOiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMDAKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyJBYmhvbGVuIGVpbmVyIEdydXBwZSBtaXQgQW5nYWJlIHZvbiBSZWZlcmVuenNwZXppZmlrYXRpb25lbiBtYWNodCBrZWluZW4gIgorIlNpbm4uIgorCisjOiBidWlsdGluL2djLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgJXM6ICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJS4qcyIKK21zZ3N0ciAienUgbGFuZ2VzIE9iamVrdC1WZXJ6ZWljaG5pcyAlLipzIgorCisjOiBidWlsdGluL2djLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiIgorIkRpZSBEYXRlbmJhbmsgZGVzIFByb2pla3RhcmNoaXZzIHdpcmQgZsO8ciBlaW5lIG9wdGltYWxlIFBlcmZvcm1hbmNlICIKKyJrb21wcmltaWVydC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLiBZb3UgbWF5IGFsc29cbiIKKyJydW4gXCJnaXQgZ2NcIiBtYW51YWxseS4gU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorIkRpZSBEYXRlbmJhbmsgZGVzIFByb2pla3RhcmNoaXZzIHdpcmQgZsO8ciBlaW5lIG9wdGltYWxlIFBlcmZvcm1hbmNlXG4iCisia29tcHJpbWllcnQuIER1IGthbm5zdCBhdWNoIFwiZ2l0IGdjXCIgbWFudWVsbCBhdXNmw7xocmVuLlxuIgorIlNpZWhlIFwiZ2l0IGhlbHAgZ2NcIiBmw7xyIHdlaXRlcmUgSW5mb3JtYXRpb25lbi5cbiIKKworIzogYnVpbHRpbi9nYy5jOjI1MQorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorIkVzIGdpYnQgenUgdmllbGUgdW5lcnJlaWNoYmFyZSBsb3NlIE9iamVrdGU7IGbDvGhyZSAnZ2l0IHBydW5lJyBhdXMsIHVtIGRpZXNlICIKKyJ6dSBlbnRmZXJuZW4uIgorCisjOiBidWlsdGluL2dyZXAuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiBGZWhsZXIgYmVpbSBFcnpldWdlbiBlaW5lcyBUaHJlYWQ6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNoZGlyOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gVmVyemVpY2huaXN3ZWNoc2VsOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NTMwIGJ1aWx0aW4vZ3JlcC5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgImtvbm50ZSBad2VpZyAoJXMpIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAia2FubiBcImdyZXBcIiBuaWNodCBtaXQgT2JqZWt0ZW4gZGVzIFR5cHMgJXMgZHVyY2hmw7xocmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiU2NoYWx0ZXIgJyVjJyBlcndhcnRldCBlaW5lbiBudW1lcmlzY2hlbiBXZXJ0IgorCisjOiBidWlsdGluL2dyZXAuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAia2FubiAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNworbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4uIgorbXNnc3RyICJrZWluZSBNdXN0ZXIgYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG9iamVjdCAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZXMgT2JqZWt0ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo5NzIKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBhcmJlaXRldCBudXIgaW5uZXJoYWxiIGRlcyBBcmJlaXRzYmF1bXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5NQorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iCittc2dzdHIgIi0tY2FjaGVkIG9kZXIgLS11bnRyYWNrZWQga2FubiBuaWNodCBtaXQgLS1uby1pbmRleCBiZW51dHp0IHdlcmRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAwMAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzLiIKK21zZ3N0ciAiLS1uby1pbmRleCBvZGVyIC0tdW50cmFja2VkIGthbm4gbmljaHQgbWl0IFZlcnNpb25lbiBiZW51dHp0IHdlcmRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAwMworbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorIi0tW25vLV1leGx1ZGUtc3RhbmRhcmQga2FubiBuaWNodCBtaXQgYmVvYmFjaHRldGVuIEluaGFsdGVuIGJlbnV0enQgd2VyZGVuIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDExCittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuLiIKK21zZ3N0ciAic293b2hsIC0tY2FjaGVkIGFscyBhdWNoIFp3ZWlnZSBnZWdlYmVuIgorCisjOiBidWlsdGluL2hlbHAuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVzIEhpbGZlZm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6OTMKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJLb25udGUgZW1hY3NjbGllbnQgbmljaHQgc3RhcnRlbi4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwNgorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiS29ubnRlIFZlcnNpb24gZGVzIGVtYWNzY2xpZW50IG5pY2h0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJWZXJzaW9uIGRlcyBlbWFjc2NsaWVudCAnJWQnIGlzdCB6dSBhbHQgKDwgMjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTMyIGJ1aWx0aW4vaGVscC5jOjE2MCBidWlsdGluL2hlbHAuYzoxNjkgYnVpbHRpbi9oZWxwLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyc6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiAnJXMnOiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzogUGZhZCBmw7xyIG5pY2h0IHVudGVyc3TDvHR6dGVuIEhhbmRidWNoYmV0cmFjaHRlci5cbiIKKyJEdSBrw7ZubnRlc3Qgc3RhdHRkZXNzZW4gJ21hbi48V2Vya3pldWc+LmNtZCcgYmVudXR6ZW4uIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzogS29tbWFuZG8gZsO8ciB1bnRlcnN0w7x0enRlbiBIYW5kYnVjaGJldHJhY2h0ZXIuXG4iCisiRHUga8O2bm50ZXN0IHN0YXR0ZGVzc2VuICdtYW4uPFdlcmt6ZXVnPi5wYXRoJyBiZW51dHplbi4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjI5OQorbXNnaWQgIlRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZ2l0IGNvbW1hbmRzIGFyZToiCittc2dzdHIgIkRpZSBhbGxnZW1laW4gdmVyd2VuZGV0ZW4gR2l0LUtvbW1hbmRvcyBzaW5kOiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIiclcyc6IHVuYmVrYW5udGVyIEhhbmRidWNoLUJldHJhY2h0ZXIuIgorCisjOiBidWlsdGluL2hlbHAuYzozODQKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImtlaW4gSGFuZGJ1Y2gtQmV0cmFjaHRlciBrb25udGUgbWl0IGRpZXNlciBBbmZyYWdlIHVtZ2VoZW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM5MgorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImtlaW4gSW5mb3JtYXRpb25zLUJldHJhY2h0ZXIga29ubnRlIG1pdCBkaWVzZXIgQW5mcmFnZSB1bWdlaGVuIgorCisjOiBidWlsdGluL2hlbHAuYzo0NDcgYnVpbHRpbi9oZWxwLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICJWZXJ3ZW5kdW5nOiAlcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYGdpdCAlcycgaXMgYWxpYXNlZCB0byBgJXMnIgorbXNnc3RyICJmw7xyIGBnaXQgJXMnIHd1cmRlIGRlciBBbGlhcyBgJXMnIGFuZ2VsZWd0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgIk9iamVrdC1UeXBlbiBwYXNzZW4gYmVpICVzIG5pY2h0IHp1c2FtbWVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxOTAKK21zZ2lkICJvYmplY3Qgb2YgdW5leHBlY3RlZCB0eXBlIgorbXNnc3RyICJPYmpla3QgaGF0IHVuZXJ3YXJ0ZXRlbiBUeXAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAia2FubiAlZCBCeXRlIG5pY2h0IGxlc2VuIgorbXNnc3RyWzFdICJrYW5uICVkIEJ5dGVzIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMzcKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgInp1IGZyw7xoZXMgRGF0ZWllbmRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMzgKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgRWluZ2FiZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjUwCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgInZlcndlbmRldGUgbWVociBCeXRlcyBhbHMgdmVyZsO8Z2JhciB3YXJlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU3Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAiUGFrZXQgaXN0IHp1IGdyb8OfIGbDvHIgZGllIGFrdHVlbGxlIERlZmluaXRpb24gdm9uIG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICJrb25udGUgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJLYW5uIFBha2V0ZGF0ZWkgJyVzJyBuaWNodCDDtmZmbmVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTIKK21zZ2lkICJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIKK21zZ3N0ciAiUGFrZXRzaWduYXR1ciBzdGltbXQgbmljaHQgw7xiZXJlaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIgorbXNnc3RyICJQYWtldCBoYXQgZWluIHVuZ8O8bHRpZ2VzIE9iamVrdCBiZWkgVmVyc2F0eiAlbHU6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAiRGVrb21wcmltaWVydW5nIGdhYiAlZCB6dXLDvGNrIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0ODMKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJXZXJ0IGbDvHIgVmVyc2F0eiBiZWkgRGlmZmVyZW56b2JqZWt0IMO8YmVyZ2VsYXVmZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ5MQorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAiIgorIldlcnQgZsO8ciBWZXJzYXR6IGJlaSBEaWZmZXJlbnpvYmpla3QgbGllZ3QgYXXDn2VyaGFsYiBkZXMgZ8O8bHRpZ2VuIEJlcmVpY2hzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAiVW5iZWthbm50ZXIgT2JqZWt0LVR5cCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMwCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAiS2FubiBQYWtldGRhdGVpICVzIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAiZnLDvGh6ZWl0aWdlcyBFbmRlIGRlciBQYWtldGRhdGVpLCB2ZXJtaXNzZSAlbHUgQnl0ZSIKK21zZ3N0clsxXSAiZnLDvGh6ZWl0aWdlcyBFbmRlIGRlciBQYWtldGRhdGVpLCB2ZXJtaXNzZSAlbHUgQnl0ZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU1OAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICJlcm5zdGhhZnRlIElua29uc2lzdGVueiBuYWNoIERla29tcHJpbWllcnVuZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NjQ5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjY1NSBidWlsdGluL2luZGV4LXBhY2suYzo2NzgKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjcxMiBidWlsdGluL2luZGV4LXBhY2suYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJTSEExIEtPTExJU0lPTiBNSVQgJXMgR0VGVU5ERU4gISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NjUyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTcwCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAia2FubiAlcyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAiS2FubiBleGlzdGllcmVuZGVzIE9iamVrdCAlcyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBCbG9iLU9iamVrdCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIE9iamVrdC1UeXAgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0OQorbXNnaWQgIkVycm9yIGluIG9iamVjdCIKK21zZ3N0ciAiRmVobGVyIGluIE9iamVrdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICJOaWNodCBhbGxlIEtpbmQtT2JqZWt0ZSB2b24gJXMgc2luZCBlcnJlaWNoYmFyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjEgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ3Cittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICJLb25udGUgRGF0ZWl1bnRlcnNjaGllZCBuaWNodCBhbndlbmRlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTg2Cittc2dpZCAiUmVjZWl2aW5nIG9iamVjdHMiCittc2dzdHIgIkVtcGZhbmdlIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk4NgorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIkluZGl6aWVyZSBPYmpla3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDEyCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICJQYWtldCBpc3QgYmVzY2jDpGRpZ3QgKFNIQTEgdW50ZXJzY2hpZWRsaWNoKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTAxNworbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAia2FubiBQYWtldGRhdGVpIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDIwCittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICJQYWtldGVuZGUgZW50aMOkbHQgbmljaHQgdmVyd2VuZGJhcmVuIEluaGFsdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTAzMQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uIFwicGFyc2VfcGFja19vYmplY3RzKClcIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTA1NAorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIkzDtnNlIFVudGVyc2NoaWVkZSBhdWYiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMDUKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdWZsw7ZzZW4gZGVyIFVudGVyc2NoaWVkZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAiUGFrZXQgaGF0ICVkIHVuYXVmZ2Vsw7ZzdGUgVW50ZXJzY2hpZWQiCittc2dzdHJbMV0gIlBha2V0IGhhdCAlZCB1bmF1ZmdlbMO2c3RlIFVudGVyc2NoaWVkZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAiS29ubnRlIGFuZ2Vow6RuZ3RlcyBPYmpla3QgKCVkKSBuaWNodCBrb21wcmltaWVyZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgImxva2FsZXMgT2JqZWt0ICVzIGlzdCBiZXNjaMOkZGlndCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI1MgorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hsaWXDn2VuIGRlciBQYWtldGRhdGVpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAiS2FubiBQYWtldGJlc2NocmVpYnVuZ3NkYXRlaSAnJXMnIG5pY2h0IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAiS2FubiBlYmVuIGVyc3RlbGx0ZSBQYWtldGJlc2NocmVpYnVuZ3NkYXRlaSAnJXMnIG5pY2h0IHNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyODYKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJLYW5uIFBha2V0ZGF0ZWkgbmljaHQgc3BlaWNoZXJuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjk3Cittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgIkthbm4gSW5kZXhkYXRlaSBuaWNodCBzcGVpY2hlcm4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIkthbm4gZXhpc3RpZXJlbmRlIFBha2V0ZGF0ZWkgJyVzJyBuaWNodCDDtmZmbmVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIkthbm4gZXhpc3RpZXJlbmRlIEluZGV4ZGF0ZWkgZsO8ciBQYWtldCAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAia2VpbiBVbnRlcnNjaGllZDogJWQgT2JqZWt0IgorbXNnc3RyWzFdICJrZWluIFVudGVyc2NoaWVkOiAlZCBPYmpla3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gIkzDpG5nZSBkZXIgT2JqZWt0LUxpc3RlID0gJWQ6ICVsdSBPYmpla3QiCittc2dzdHJbMV0gIkzDpG5nZSBkZXIgT2JqZWt0LUxpc3RlID0gJWQ6ICVsdSBPYmpla3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDgxCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIkthbm4gbmljaHQgenVyw7xjayB6dSBBcmJlaXRzdmVyemVpY2huaXMgd2VjaHNlbG4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjUgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyOAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU0MCBidWlsdGluL2luZGV4LXBhY2suYzoxNTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAiJXMgaXN0IHVuZ8O8bHRpZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU1OAorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIGthbm4gbmljaHQgb2huZSAtLXN0ZGluIGJlbnV0enQgd2VyZGVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTYyIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgIk5hbWUgZGVyIFBha2V0ZGF0ZWkgJyVzJyBlbmRldCBuaWNodCBtaXQgJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU4MQorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiLS12ZXJpZnkgb2huZSBOYW1lIGRlciBQYWtldGRhdGVpIGFuZ2VnZWJlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIktvbm50ZSBHcnVwcGVuc2NocmVpYnJlY2h0IGbDvHIgJXMgbmljaHQgc2V0emVuLiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBuYW1lICVzIgorbXNnc3RyICJ6dSBsYW5nZXIgVm9ybGFnZW4tTmFtZSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiS2FubiAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICJrYW5uIFZvcmxhZ2UgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAia2FubiBWZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICJrYW5uIFZlcmtuw7xwZnVuZyAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHN5bWxpbmsgJXMiCittc2dzdHIgInp1IGxhbmdlIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAia2FubiAnJXMnIG5pY2h0IG1pdCAnJXMnIHN5bWJvbGlzY2ggdmVya27DvHBmZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgImthbm4gJyVzJyBuaWNodCBuYWNoICclcycga29waWVyZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiaWdub3JpZXJlIFZvcmxhZ2UgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIHBhdGggJXMiCittc2dzdHIgInp1IGxhbmdlciBWb3JsYWdlbi1QZmFkICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCAlcyIKK21zZ3N0ciAia2VpbmUgVm9ybGFnZW4gaW4gJyVzJyBnZWZ1bmRlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBvZiBhIHdyb25nIGZvcm1hdCB2ZXJzaW9uICVkIGZyb20gJyVzJyIKK21zZ3N0ciAia29waWVyZSBrZWluZSBWb3JsYWdlbiBtaXQgZWluZXIgZmFsc2NoZW4gRm9ybWF0dmVyc2lvbiAlZCB2b24gJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBHaXQtVmVyemVpY2huaXMgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMyMyBidWlsdGluL2luaXQtZGIuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgImthbm4gbmljaHQgbWl0IERhdGVpdHlwICVkIHVtZ2VoZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAiS29ubnRlICVzIG5pY2h0IG5hY2ggJXMgdmVyc2NoaWViZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGdpdCBsaW5rICVzIgorbXNnc3RyICJLb25udGUgZ2l0LVZlcmtuw7xwZnVuZyAlcyBuaWNodCBlcnN0ZWxsZW4iCisKKyMuCisjLiAqIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJyVzJyBpcyBlaXRoZXIgIlJlaW5pdGlhbGl6ZWQKKyMuICogZXhpc3RpbmciIG9yICJJbml0aWFsaXplZCBlbXB0eSIsIHRoZSBzZWNvbmQgIiBzaGFyZWQiIG9yCisjLiAqICIiLCBhbmQgdGhlIGxhc3QgJyVzJXMnIGlzIHRoZSB2ZXJiYXRpbSBkaXJlY3RvcnkgbmFtZS4KKyMuCisjOiBidWlsdGluL2luaXQtZGIuYzo0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMlcyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiVzJXMgR2l0LVByb2pla3RhcmNoaXYgaW4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MjEKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorbXNnc3RyICJSZWluaXRpYWxpc2llcnRlIGV4aXN0aWVyZW5kZXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMQorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICJJbml0aWFsaXNpZXJ0ZSBsZWVyZXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMgorbXNnaWQgIiBzaGFyZWQiCittc2dzdHIgIiBnZW1laW5zYW1lcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDQxCittc2dpZCAiY2Fubm90IHRlbGwgY3dkIgorbXNnc3RyICJrYW5uIGFrdHVlbGxlcyBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgZXJtaXR0ZWxuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjIgYnVpbHRpbi9pbml0LWRiLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAia2FubiBWZXJ6ZWljaG5pcyAlcyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgImthbm4gbmljaHQgaW4gVmVyemVpY2huaXMgJXMgd2VjaHNlbG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKG9kZXIgLS13b3JrLXRyZWU9PFZlcnplaWNobmlzPikgbmljaHQgZXJsYXVidCBvaG5lIFNwZXppZml6aWVydW5nIHZvbiAlcyAiCisiKG9kZXIgLS1naXQtZGlyPTxWZXJ6ZWljaG5pcz4pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NzkKK21zZ2lkICJDYW5ub3QgYWNjZXNzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIkthbm4gbmljaHQgYXVmIGFrdHVlbGxlcyBBcmJlaXRzdmVyemVpY2huaXMgenVncmVpZmVuLiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIkthbm4gbmljaHQgYXVmIEFyYmVpdHNiYXVtICclcycgenVncmVpZmVuLiIKKworIzogYnVpbHRpbi9sb2cuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJsZXR6dGUgQXVzZ2FiZTogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo0MDMgYnVpbHRpbi9sb2cuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJLYW5uIE9iamVrdCAlcyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdHlwZTogJWQiCittc2dzdHIgIlVuYmVrYW5udGVyIFR5cDogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjA4Cittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiZm9ybWF0LmhlYWRlcnMgb2huZSBXZXJ0IgorCisjOiBidWlsdGluL2xvZy5jOjY4MgorbXNnaWQgIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIKK21zZ3N0ciAiTmFtZSBkZXMgQXVzZ2FiZXZlcnplaWNobmlzc2VzIGlzdCB6dSBsYW5nLiIKKworIzogYnVpbHRpbi9sb2cuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiS2FubiBQYXRjaC1EYXRlaSAlcyBuaWNodCDDtmZmbmVuIgorCisjOiBidWlsdGluL2xvZy5jOjcwNworbXNnaWQgIk5lZWQgZXhhY3RseSBvbmUgcmFuZ2UuIgorbXNnc3RyICJCcmF1Y2hlIGdlbmF1IGVpbmVuIFZlcnNpb25zYmVyZWljaC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NzE1Cittc2dpZCAiTm90IGEgcmFuZ2UuIgorbXNnc3RyICJLZWluIFZlcnNpb25zYmVyZWljaC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6Nzg5Cittc2dpZCAiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAiQW5zY2hyZWliZW4gYmVuw7Z0aWd0IEUtTWFpbC1Gb3JtYXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgInVuZ8O8bHRpZ2VzIGluLXJlcGx5LXRvOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo5MzUKK21zZ2lkICJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiWndlaSBBdXNnYWJldmVyemVpY2huaXNzZT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb21taXR0ZXIgaW5mbyAlcyIKK21zZ3N0ciAidW5lY2h0ZSBFaW5yZWljaGVyLUluZm9ybWF0aW9uZW4gJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIwMgorbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiLW4gdW5kIC1rIHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIwNAorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXggYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItLXN1YmplY3QtcHJlZml4IHVuZCAtayBzY2hsaWXDn2VuIHNpY2ggZ2VnZW5zZWl0aWcgYXVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTIKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtb25seSBtYWNodCBrZWluZW4gU2lubiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE0Cittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtc3RhdHVzIG1hY2h0IGtlaW5lbiBTaW5uIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTYKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sgbWFjaHQga2VpbmVuIFNpbm4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzOQorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICJTdGFuZGFyZC1BdXNnYWJlIG9kZXIgVmVyemVpY2huaXMsIHdlbGNoZXMgdm9uIGJlaWRlbT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJLb25udGUgVmVyemVpY2huaXMgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL2xvZy5jOjEzOTQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlciBBdXNnYWJlZGF0ZWllbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKyJLb25udGUgZ2Vmb2xndGVuLCBleHRlcm5lbiBad2VpZyBuaWNodCBmaW5kZW4sIGJpdHRlIGdlYmUgPHVwc3RyZWFtPiBtYW51ZWxsICIKKyJhbi5cbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTExIGJ1aWx0aW4vbG9nLmM6MTUxMyBidWlsdGluL2xvZy5jOjE1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIlVuYmVrYW5udGUgVmVyc2lvbiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkwCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJTY2hhbHRlciAnbScgZXJmb3JkZXJ0IGVpbmVuIFdlcnQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIktvbm50ZSBadXNhbW1lbmbDvGhydW5nc3N0cmF0ZWdpZSAnJXMnIG5pY2h0IGZpbmRlbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJWZXJmw7xnYmFyZSBTdHJhdGVnaWVuIHNpbmQ6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJWZXJmw7xnYmFyZSBiZW51dHplcmRlZmluaWVydGUgU3RyYXRlZ2llbiBzaW5kOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0MAorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICJLb25udGUgXCJzdGFzaFwiIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1Cittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICJcInN0YXNoXCIgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAia2VpbiBnw7xsdGlnZXMgT2JqZWt0OiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OSBidWlsdGluL21lcmdlLmM6Mjg2Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAicmVhZC10cmVlIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MzE2Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiAobmljaHRzIHp1IHF1ZXRzY2hlbikiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJRdWV0c2NoZSBWZXJzaW9uIC0tIFp3ZWlnc3BpdHplIChIRUFEKSB3aXJkIG5pY2h0IGFrdHVhbGlzaWVydFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MzYxCittc2dpZCAiV3JpdGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICJTY2hyZWliZSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6MzYzCittc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCittc2dzdHIgIlNjaGxpZcOfZSBTUVVBU0hfTVNHIGFiIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiIgorIktlaW5lIFp1c2FtbWVuZsO8aHJ1bmdzYmVzY2hyZWlidW5nIC0tIFp3ZWlnc3BpdHplIChIRUFEKSB3aXJkIG5pY2h0ICIKKyJha3R1YWxpc2llcnRcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICInJXMnIHplaWd0IGF1ZiBrZWluZSBWZXJzaW9uIgorCisjOiBidWlsdGluL21lcmdlLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgU3RyaW5nOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjYyOAorbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgIlwiZ2l0IHdyaXRlLXRyZWVcIiBzY2hsdWcgYmVpbSBTY2hyZWliZW4gZWluZXMgQmF1bWVzIGZlaGwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NzgKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiCittc2dzdHIgIkxlc2VuIGRlcyBad2lzY2hlbnNwZWljaGVycyBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcwOQorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIkVzIHdpcmQgbnVyIGRpZSBadXNhbW1lbmbDvGhydW5nIHZvbiB6d2VpIFp3ZWlnZW4gYmVoYW5kZWx0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJVbmJla2FubnRlIE9wdGlvbiBmw7xyIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgImtvbm50ZSAlcyBuaWNodCBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICJrb25udGUgbmljaHQgdm9uICclcycgbGVzZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisiWnVzYW1tZW5mw7xocnVuZyB3dXJkZSBuaWNodCBlaW5nZXRyYWdlbjsgYmVudXR6ZSAnZ2l0IGNvbW1pdCcgdW0gZGllICIKKyJadXNhbW1lbmbDvGhydW5nIGFienVzY2hsaWXDn2VuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODkxCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJCaXR0ZSBnZWJlIGVpbmUgVmVyc2lvbnNiZXNjaHJlaWJ1bmcgZWluIHVtIHp1IGVya2zDpHJlbiwgd2FydW0gZGllc2UgIgorIlp1c2FtbWVuZsO8aHJ1bmcgZXJmb3JkZXJsaWNoIGlzdCxcbiIKKyJpbnNiZXNvbmRlcmUgd2VubiBlcyBlaW5lbiBha3R1YWxpc2llcnRlbiwgZXh0ZXJuZW4gWndlaWcgbWl0IGVpbmVtIFRoZW1hLSIKKyJad2VpZyB6dXNhbW1lbmbDvGhydC5cbiIKKyJcbiIKKyJaZWlsZW4gYmVnaW5uZW5kIG1pdCAnIycgd2VyZGVuIGlnbm9yaWVydCwgdW5kIGVpbmUgbGVlcmUgQmVzY2hyZWlidW5nICIKKyJicmljaHQgZGllIEVpbnRyYWd1bmcgYWIuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MTUKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIkxlZXJlIFZlcnNpb25zYmVzY2hyZWlidW5nIgorCisjOiBidWlsdGluL21lcmdlLmM6OTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiV3VuZGVyYmFyLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKyJBdXRvbWF0aXNjaGUgWnVzYW1tZW5mw7xocnVuZyBmZWhsZ2VzY2hsYWdlbjsgYmVoZWJlIGRpZSBLb25mbGlrdGUgdW5kIHRyYWdlICIKKyJkYW5uIGRhcyBFcmdlYm5pcyBlaW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IgorbXNnc3RyICInJXMnIGlzdCBrZWluZSBWZXJzaW9uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA0OQorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiRHUgYmVmaW5kZXN0IGRpY2ggYXVmIGtlaW5lbSBad2VpZy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDUxCittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJLZWluIGV4dGVybmVzIEFyY2hpdiBmw7xyIGRlbiBha3R1ZWxsZW4gWndlaWcuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1MworbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorIkVzIGlzdCBrZWluIGV4dGVybmVzIFN0YW5kYXJkLVByb2pla3RhcmNoaXYgZsO8ciBkZW4gYWt0dWVsbGVuIFp3ZWlnICIKKyJkZWZpbmllcnQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICJLZWluIGV4dGVybmVyIMOcYmVybmFobWV6d2VpZyBmw7xyICVzIHZvbiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDUgYnVpbHRpbi9tZXJnZS5jOjEzMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBuaWNodHMgd2FzIHdpciB6dXNhbW1lbmbDvGhyZW4ga8O2bm5lbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIkVzIGdpYnQga2VpbmUgWnVzYW1tZW5mw7xocnVuZyB6dW0gQWJicmVjaGVuICh2ZXJtaXNzZSBNRVJHRV9IRUFEKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMjkgZ2l0LXB1bGwuc2g6MzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorIkR1IGhhc3QgZGVpbmUgWnVzYW1tZW5mw7xocnVuZyBuaWNodCBhYmdlc2NobG9zc2VuIChNRVJHRV9IRUFEIGV4aXN0aWVydCkuXG4iCisiQml0dGUgdHJhZ2UgZGVpbmUgw4RuZGVydW5nZW4gZWluLCBiZXZvciBkdSB6dXNhbW1lbmbDvGhyZW4ga2FubnN0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzIgZ2l0LXB1bGwuc2g6MzQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIiIKKyJEdSBoYXN0IGRlaW5lIFp1c2FtbWVuZsO8aHJ1bmcgbmljaHQgYWJnZXNjaGxvc3NlbiAoTUVSR0VfSEVBRCBleGlzdGllcnQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzYKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorIkR1IGhhc3QgXCJjaGVycnktcGlja1wiIG5pY2h0IGFiZ2VzY2hsb3NzZW4gKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RpZXJ0KS5cbiIKKyJCaXR0ZSB0cmFnZSBkZWluZSDDhG5kZXJ1bmdlbiBlaW4sIGJldm9yIGR1IHp1c2FtbWVuZsO8aHJlbiBrYW5uc3QuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzOQorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiIgorIkR1IGhhc3QgXCJjaGVycnktcGlja1wiIG5pY2h0IGFiZ2VzY2hsb3NzZW4gKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RpZXJ0KS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjQ4Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIkR1IGthbm5zdCAtLXNxdWFzaCBuaWNodCBtaXQgLS1uby1mZiBrb21iaW5pZXJlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjUzCittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tbm8tZmYgd2l0aCAtLWZmLW9ubHkuIgorbXNnc3RyICJEdSBrYW5uc3QgLS1uby1mZiBuaWNodCBtaXQgLS1mZi0tb25seSBrb21iaW5pZXJlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjYwCittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIktlaW5lIFZlcnNpb24gYW5nZWdlYmVuIHVuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBpc3QgbmljaHQgZ2VzZXR6dC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjkyCittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiS2FubiBudXIgZXhha3QgZWluZSBWZXJzaW9uIGluIGVpbmVtIGxlZXJlbiBad2VpZyB6dXNhbW1lbmbDvGhyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5NQorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICJCaW4gYXVmIGVpbmVtIFp3ZWlnLCBkZXIgbm9jaCBnZWJvcmVuIHdpcmQ7IGthbm4gbmljaHQgcXVldHNjaGVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTcKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAibmljaHQgdm9yenVzcHVsZW5kZSBWZXJzaW9uIG1hY2h0IGluIGVpbmVtIGxlZXJlbiBad2VpZyBrZWluZW4gU2lubiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIkFrdHVhbGlzaWVyZSAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgIlByb2JpZXJlIHdpcmtsaWNoIHRyaXZpYWxlIFwiaW4taW5kZXhcIi1adXNhbW1lbmbDvGhydW5nLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIk5laW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDg5Cittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICJWb3JzcHVsZW4gbmljaHQgbcO2Z2xpY2gsIGJyZWNoZSBhYi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTEyIGJ1aWx0aW4vbWVyZ2UuYzoxNTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICJSw7xja2xhdWYgZGVzIFp3ZWlnZXMgYmlzIHp1bSBVcnNwcnVuZy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAiUHJvYmllcmUgWnVzYW1tZW5mw7xocnVuZ3NzdHJhdGVnaWUgJXMuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIktlaW5lIFp1c2FtbWVuZsO8aHJ1bmdzc3RyYXRlZ2llIGJlaGFuZGVsdCBkaWVzZSBadXNhbW1lbmbDvGhydW5nLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZyBtaXQgU3RyYXRlZ2llICVzIGZlaGxnZXNjaGxhZ2VuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAiQmVudXR6ZSBcIiVzXCIgdW0gZGllIEF1ZmzDtnN1bmcgcGVyIEhhbmQgdm9yenViZXJlaXRlbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIkF1dG9tYXRpc2NoZSBadXNhbW1lbmbDvGhydW5nIGFiZ2VzY2hsb3NzZW47IGhhbHRlLCB3aWUgZ2V3w7xuc2NodCwgdm9yIGRlciAiCisiRWludHJhZ3VuZyBhblxuIgorCisjOiBidWlsdGluL212LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAiUHLDvGZlIFVtYmVuZW5udW5nIHZvbiAnJXMnIG5hY2ggJyVzJ1xuIgorCisjOiBidWlsdGluL212LmM6MTEyCittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAidW5nw7xsdGlnZSBRdWVsbGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTUKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICJrYW5uIFZlcnplaWNobmlzIG5pY2h0IGluIHNpY2ggc2VsYnN0IHZlcnNjaGllYmVuIgorCisjOiBidWlsdGluL212LmM6MTE4Cittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAia2FubiBWZXJ6ZWljaG5pcyBuaWNodCDDvGJlciBEYXRlaSB2ZXJzY2hpZWJlbiIKKworIzogYnVpbHRpbi9tdi5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJIdWg/ICUuKnMgaXMgaW4gaW5kZXg/IgorbXNnc3RyICJIdWg/ICUuKnMgaXN0IGluIGRlciBCZXJlaXRzdGVsbHVuZz8iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNDAKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJRdWVsbHZlcnplaWNobmlzIGlzdCBsZWVyIgorCisjOiBidWlsdGluL212LmM6MTcxCittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAibmljaHQgdW50ZXIgVmVyc2lvbnNrb250cm9sbGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzMKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgIlppZWwgZXhpc3RpZXJ0IGJlcmVpdHMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAiw7xiZXJzY2hyZWliZSAnJXMnIgorCisjOiBidWlsdGluL212LmM6MTg0Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAiS2FubiBuaWNodCDDvGJlcnNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAibWVocmVyZSBRdWVsbGVuIGbDvHIgZGFzIHNlbGJlIFppZWwiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCBRdWVsbGU9JXMsIFppZWw9JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiQmVuZW5uZSAlcyBuYWNoICVzIHVtXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyMTUgYnVpbHRpbi9yZW1vdGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIlVtYmVuZW5udW5nIHZvbiAnJXMnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL25vdGVzLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJrb25udGUgJ3Nob3cnIGbDvHIgT2JqZWt0ICclcycgbmljaHQgc3RhcnRlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE0NQorbXNnaWQgImNhbid0IGZkb3BlbiAnc2hvdycgb3V0cHV0IGZkIgorbXNnc3RyICJrb25udGUgRGF0ZWktRGVza3JpcHRvciBmw7xyIEF1c2dhYmUgdm9uICdzaG93JyBuaWNodCDDtmZmbmVuIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIlNjaGxpZcOfZW4gZGVyIFZlcmJpbmR1bmcgenUgJ3Nob3cnIGlzdCBmw7xyIE9iamVrdCAnJXMnIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImtvbm50ZSAnc2hvdycgZsO8ciBPYmpla3QgJyVzJyBuaWNodCBhYnNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNzUgYnVpbHRpbi90YWcuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgImtvbm50ZSBEYXRlaSAnJXMnIG5pY2h0IGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE4OQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiQml0dGUgbGllZmVyZSBkZW4gTm90aXotSW5oYWx0IHVudGVyIFZlcndlbmR1bmcgZGVyIE9wdGlvbiAtbSBvZGVyIC1GLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIxMCBidWlsdGluL25vdGVzLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICJFbnRmZXJuZSBOb3RpeiBmw7xyIE9iamVrdCAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjE1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICJLb25udGUgTm90aXotT2JqZWt0IG5pY2h0IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbm90ZSBjb250ZW50cyBoYXMgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICJEaWUgTm90aXotSW5oYWx0ZSB3dXJkZW4gaW4gJXMgYmVsYXNzZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTEgYnVpbHRpbi90YWcuYzo1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAia2FubiAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUzIGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAia29ubnRlICclcycgbmljaHQgw7ZmZm5lbiBvZGVyIGxlc2VuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcyIGJ1aWx0aW4vbm90ZXMuYzo0NDUgYnVpbHRpbi9ub3Rlcy5jOjQ0NworIzogYnVpbHRpbi9ub3Rlcy5jOjUwNyBidWlsdGluL25vdGVzLmM6NTYxIGJ1aWx0aW4vbm90ZXMuYzo2NDQKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NDkgYnVpbHRpbi9ub3Rlcy5jOjcyNCBidWlsdGluL25vdGVzLmM6NzY2CisjOiBidWlsdGluL25vdGVzLmM6OTY4IGJ1aWx0aW4vcmVzZXQuYzoyOTMgYnVpbHRpbi90YWcuYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGFscyBnw7xsdGlnZSBSZWZlcmVueiBhdWZsw7ZzZW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gZGVzIE9iamVrdGVzICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6Mjk5Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICJLYW5uIHVuaW5pdGlhbGlzaWVydGVuL3VucmVmZXJlbnppZXJ0ZW4gTm90aXotQmF1bSBuaWNodCBlaW50cmFnZW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgbm90ZXMucmV3cml0ZU1vZGUgV2VydDogJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorIk5ldXNjaHJlaWJlbiBkZXIgTm90aXplbiBpbiAlcyB6dXLDvGNrZ2V3aWVzZW4gKGF1w59lcmhhbGIgdm9uIHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiB0aGUKKyMuIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzIGl0cyB2YWx1ZQorIzogYnVpbHRpbi9ub3Rlcy5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyICVzIFdlcnQ6ICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJGZWhsZXJoYWZ0ZSBFaW5nYWJlemVpbGU6ICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBLb3BpZXJlbiBkZXIgTm90aXplbiB2b24gJyVzJyBuYWNoICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDAgYnVpbHRpbi9ub3Rlcy5jOjU1NCBidWlsdGluL25vdGVzLmM6NjI3CisjOiBidWlsdGluL25vdGVzLmM6NjM5IGJ1aWx0aW4vbm90ZXMuYzo3MTIgYnVpbHRpbi9ub3Rlcy5jOjc1OQorIzogYnVpbHRpbi9ub3Rlcy5jOjEwMzMKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICJ6dSB2aWVsZSBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTMgYnVpbHRpbi9ub3Rlcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJLZWluIE5vdGl6IGbDvHIgT2JqZWt0ICVzIGdlZnVuZGVuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIktvbm50ZSBOb3RpemVuIG5pY2h0IGhpbnp1ZsO8Z2VuLiBFeGlzdGllcmVuZGUgTm90aXplbiBmw7xyIE9iamVrdCAlcyAiCisiZ2VmdW5kZW4uIFZlcndlbmRlICctZicgdW0gZGllIGV4aXN0aWVyZW5kZW4gTm90aXplbiB6dSDDvGJlcnNjaHJlaWJlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1ODUgYnVpbHRpbi9ub3Rlcy5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIsOcYmVyc2NocmVpYmUgZXhpc3RpZXJlbmRlIE5vdGl6ZW4gZsO8ciBPYmpla3QgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYzNQorbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAienUgd2VuaWcgUGFyYW1ldGVyIgorCisjOiBidWlsdGluL25vdGVzLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIkthbm4gTm90aXplbiBuaWNodCBrb3BpZXJlbi4gRXhpc3RpZXJlbmRlIE5vdGl6ZW4gZsO8ciBPYmpla3QgJXMgZ2VmdW5kZW4uICIKKyJWZXJ3ZW5kZSAnLWYnIHVtIGRpZSBleGlzdGllcmVuZGVuIE5vdGl6ZW4genUgw7xiZXJzY2hyZWliZW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICJLZWluZSBOb3RpemVuIGbDvHIgUXVlbGwtT2JqZWt0ICVzLiBLb3BpZSBuaWNodCBtw7ZnbGljaC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb25lbiAtbS8tRi8tYy8tQyBzaW5kIGbDvHIgZGFzIFVudGVya29tbWFuZG8gJ2VkaXQnIHZlcmFsdGV0LlxuIgorIkJpdHRlIGJlbnV0emUgc3RhdHRkZXNzZW4gJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICJPYmpla3QgJXMgaGF0IGtlaW5lIE5vdGl6XG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMTAzIGJ1aWx0aW4vcmVtb3RlLmM6MTU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJVbmJla2FubnRlcyBVbnRlcmtvbW1hbmRvOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJGZWhsZXIgYmVpbSBLb21wcmltaWVyZW4gKCVkKSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIk5pY2h0IHVudGVyc3TDvHR6dGUgQmVyZWl0c3RlbGx1bmdzdmVyc2lvbiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2UgQmVyZWl0c3RlbGx1bmdzdmVyc2lvbiAnJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICVzIGRvZXMgbm90IGFjY2VwdCBuZWdhdGl2ZSBmb3JtIgorbXNnc3RyICJPcHRpb24gJXMgYWt6ZXB0aWVydCBrZWluZSBuZWdhdGl2ZSBGb3JtIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHZhbHVlICclcycgZm9yIG9wdGlvbiAlcyIKK21zZ3N0ciAia29ubnRlIFdlcnQgJyVzJyBmw7xyIE9wdGlvbiAlcyBuaWNodCBwYXJzZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQ1Cittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJLdXJ6c2NocmlmdCBmw7xyIE1hcmtpZXJ1bmcgb2huZSA8TWFya2llcnVuZz4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjY0Cittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgIi0tZGVsZXRlIGFremVwdGllcnQgbnVyIHJlaW5lIFJlZmVyZW56LU5hbWVuIGFscyBaaWVsIgorCisjOiBidWlsdGluL3B1c2guYzo5OQorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyJVbSBlaW5lIFZhcmlhbnRlIHBlcm1hbmVudCB6dSB2ZXJ3ZW5kZW4sIHNpZWhlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgIgorImNvbmZpZycuIgorCisjOiBidWlsdGluL3B1c2guYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgogIiVzIgogbXNnc3RyICIiCi0iRmVobGVyIGJlaW0gQWJydWZlbiBkZXIgRGF0ZWl2ZXJzaW9uZW46XG4iCisiRGVyIE5hbWUgZGVzIGV4dGVybmVuIMOcYmVybmFobWV6d2VpZ2VzIHN0aW1tdCBuaWNodCBtaXQgZGVtIE5hbWVuIGRlaW5lc1xuIgorImFrdHVlbGxlbiBad2VpZ2VzIMO8YmVyZWluLiBVbSBhdWYgZGVuIMOcYmVybmFobWV6d2VpZyBpbiBkZW0gZXh0ZXJuZW5cbiIKKyJQcm9qZWt0YXJjaGl2IHp1IHZlcnNlbmRlbiwgYmVudXR6ZTpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlVtIGF1ZiBkZW4gWndlaWcgbWl0IGRlbSBzZWxiZW4gTmFtZW4gaW4gZGVtIGV4dGVybmVuIFByb2pla2FyY2hpdlxuIgorInp1IHZlcnNlbmRlbiwgYmVudXR6ZTpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKICIlcyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzQzCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3B1c2guYzoxMjEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCiAiXG4iCi0iJXMiCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKIG1zZ3N0ciAiIgotIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcga29ubnRlIG5pY2h0IGdlc3RhcnRldCB3ZXJkZW46XG4iCisiRHUgYmVmaW5kZXN0IGRpY2ggc2ljaCBpbSBNb21lbnQgYXVmIGtlaW5lbSBad2VpZy5cbiIKKyJVbSBkaWUgSGlzdG9yaWUsIGbDvGhyZW5kIHp1bSBha3R1ZWxsZW4gKGZyZWlzdGVoZW5kZSBad2VpZ3NwaXR6ZSAoSEVBRCkpXG4iCisiU3RhdHVzIHp1IHZlcnNlbmRlbiwgYmVudXR6ZVxuIgogIlxuIgotIiVzIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxOYW1lLWRlcy1leHRlcm5lbi1ad2VpZ2VzPlxuIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKLW1zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcgc3RhcnRlbi4uLiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6Mzc1IGxpYi9tZXJnZXRvb2wudGNsOjM4MwotbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyBmZWhsZ2VzY2hsYWdlbi4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAiVW5nw7xsdGlnZSBnbG9iYWxlIFplaWNoZW5rb2RpZXJ1bmcgwrslc8KrIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgotbXNnc3RyICJVbmfDvGx0aWdlIEFyY2hpdi1aZWljaGVua29kaWVydW5nIMK7JXPCqyIKLQotIzogbGliL29wdGlvbi50Y2w6MTE3Ci1tc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKLW1zZ3N0ciAiVm9yZWluc3RlbGx1bmdlbiB3aWVkZXJoZXJzdGVsbGVuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjEKLW1zZ2lkICJTYXZlIgotbXNnc3RyICJTcGVpY2hlcm4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIFJlcG9zaXRvcnkiCi1tc2dzdHIgIlByb2pla3RhcmNoaXYgJXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzMgotbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCi1tc2dzdHIgIkdsb2JhbCAoQWxsZSBQcm9qZWt0YXJjaGl2ZSkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzOAotbXNnaWQgIlVzZXIgTmFtZSIKLW1zZ3N0ciAiQmVudXR6ZXJuYW1lIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMzkKLW1zZ2lkICJFbWFpbCBBZGRyZXNzIgotbXNnc3RyICJFLU1haWwtQWRyZXNzZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQxCi1tc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzLVZlcnNpb25lbiB6dXNhbW1lbmZhc3NlbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTQyCi1tc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgotbXNnc3RyICJBdXNmw7xocmxpY2hrZWl0IGRlciBadXNhbW1lbmbDvGhyZW4tTWVsZHVuZ2VuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDMKLW1zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgotbXNnc3RyICJWZXJnbGVpY2hzc3RhdGlzdGlrIG5hY2ggWnVzYW1tZW5mw7xocmVuIGFuemVpZ2VuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDQKLW1zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ2Ci1tc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKLW1zZ3N0ciAiQXVmIERhdGVpw6RuZGVydW5nc2RhdHVtIHZlcmxhc3NlbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ3Ci1tc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgotbXNnc3RyICLDnGJlcm5haG1lendlaWdlIGF1ZnLDpHVtZW4gd8OkaHJlbmQgQW5mb3JkZXJ1bmciCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0OAotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgotbXNnc3RyICJQYXNzZW5kIHp1IMOcYmVybmFobWV6d2VpZyIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ5Ci1tc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCi1tc2dzdHIgIktvcGllLUFubm90aWVyZW4gbnVyIGJlaSBnZcOkbmRlcnRlbiBEYXRlaWVuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTAKLW1zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKLW1zZ3N0ciAiTWluZGVzdHphaGwgWmVpY2hlbiBmw7xyIEtvcGllLUFubm90aWVyZW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MQotbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgotbXNnc3RyICJBbnphaGwgVGFnZSBmw7xyIEhpc3Rvcmllbi1Lb250ZXh0IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTIKLW1zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgotbXNnc3RyICJBbnphaGwgZGVyIEtvbnRleHR6ZWlsZW4gYmVpbSBWZXJnbGVpY2giCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MwotbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCi1tc2dzdHIgIlRleHRicmVpdGUgZGVyIFZlcnNpb25zYmVzY2hyZWlidW5nIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTQKLW1zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCi1tc2dzdHIgIk5hbWVuc3ZvcnNjaGxhZyBmw7xyIG5ldWUgWndlaWdlIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTUKLW1zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCi1tc2dzdHIgIlZvcmVpbmdlc3RlbGx0ZSBaZWljaGVua29kaWVydW5nIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyMDMKLW1zZ2lkICJDaGFuZ2UiCi1tc2dzdHIgIsOEbmRlcm4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjIzMAotbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgotbXNnc3RyICJXw7ZydGVyYnVjaCBSZWNodHNjaHJlaWJwcsO8ZnVuZzoiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI1NAotbXNnaWQgIkNoYW5nZSBGb250IgotbXNnc3RyICJTY2hyaWZ0YXJ0IMOkbmRlcm4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjI1OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNob29zZSAlcyIKLW1zZ3N0ciAiJXMgd8OkaGxlbiIKLQotIzogbGliL29wdGlvbi50Y2w6MjY0Ci1tc2dpZCAicHQuIgotbXNnc3RyICJwdC4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjI3OAotbXNnaWQgIlByZWZlcmVuY2VzIgotbXNnc3RyICJFaW5zdGVsbHVuZ2VuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDozMTQKLW1zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgotbXNnc3RyICJPcHRpb25lbiBrb25udGVuIG5pY2h0IGdlc3BlaWNoZXJ0IHdlcmRlbjoiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxOQotbXNnaWQgIkFkZCBSZW1vdGUiCi1tc2dzdHIgIkV4dGVybmVzIEFyY2hpdiBoaW56dWbDvGdlbiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjI0Ci1tc2dpZCAiQWRkIE5ldyBSZW1vdGUiCi1tc2dzdHIgIk5ldWVzIGV4dGVybmVzIEFyY2hpdiBoaW56dWbDvGdlbiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjI4IGxpYi90b29sc19kbGcudGNsOjM2Ci1tc2dpZCAiQWRkIgotbXNnc3RyICJIaW56dWbDvGdlbiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjM3Ci1tc2dpZCAiUmVtb3RlIERldGFpbHMiCi1tc2dzdHIgIkVpbnplbGhlaXRlbiBkZXMgZXh0ZXJuZW4gQXJjaGl2cyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCi1tc2dpZCAiTG9jYXRpb246IgotbXNnc3RyICJBZHJlc3NlOiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjYyCi1tc2dpZCAiRnVydGhlciBBY3Rpb24iCi1tc2dzdHIgIldlaXRlcmUgQWt0aW9uIGpldHp0IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKLW1zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKLW1zZ3N0ciAiR2xlaWNoIGFuZm9yZGVybiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjcxCi1tc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKLW1zZ3N0ciAiRXh0ZXJuZXMgQXJjaGl2IGluaXRpYWxpc2llcmVuIHVuZCBkYWhpbiB2ZXJzZW5kZW4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NwotbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCi1tc2dzdHIgIk5pY2h0cyB0dW4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDEKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgotbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gTmFtZW4gZGVzIGV4dGVybmVuIEFyY2hpdnMgYW4uIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTE0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgIsK7JXPCqyBpc3Qga2VpbiB6dWzDpHNzaWdlciBOYW1lIGVpbmVzIGV4dGVybmVuIEFyY2hpdnMuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gSGluenVmw7xnZW4gZGVzIGV4dGVybmVuIEFyY2hpdnMgwrslc8KrIGF1cyBIZXJrdW5mdHNvcnQgwrslc8KrLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMyBsaWIvdHJhbnNwb3J0LnRjbDo2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmV0Y2ggJXMiCi1tc2dzdHIgIsK7JXPCqyBhbmZvcmRlcm4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyB0aGUgJXMiCi1tc2dzdHIgIsK7JXPCqyBhbmZvcmRlcm4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgotbXNnc3RyICJJbml0aWFsaXNpZXJlbiBlaW5lcyBleHRlcm5lbiBBcmNoaXZzIGFuIEFkcmVzc2Ugwrslc8KrIGlzdCBuaWNodCBtw7ZnbGljaC4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NjMKLSM6IGxpYi90cmFuc3BvcnQudGNsOjgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicHVzaCAlcyIKLW1zZ3N0ciAiwrslc8KrIHZlcnNlbmRlbi4uLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCi1tc2dzdHIgIkVpbnJpY2h0ZW4gdm9uIMK7JXPCqyBhbiDCuyVzwqsiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozNAotbXNnaWQgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCi1tc2dzdHIgIlp3ZWlnIGluIGV4dGVybmVtIEFyY2hpdiBsw7ZzY2hlbiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0NwotbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKLW1zZ3N0ciAiSW4gUHJvamVrdGFyY2hpdiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKLW1zZ2lkICJSZW1vdGU6IgotbXNnc3RyICJFeHRlcm5lcyBBcmNoaXY6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQotbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCi1tc2dzdHIgIkFkcmVzc2U6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Ci1tc2dpZCAiQnJhbmNoZXMiCi1tc2dzdHIgIlp3ZWlnZSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKLW1zZ2lkICJEZWxldGUgT25seSBJZiIKLW1zZ3N0ciAiTnVyIGzDtnNjaGVuLCB3ZW5uIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQotbXNnaWQgIk1lcmdlZCBJbnRvOiIKLW1zZ3N0ciAiWnVzYW1tZW5nZWbDvGhydCBtaXQ6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgotbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKLW1zZ3N0ciAiRsO8ciDCu1p1c2FtbWVuZsO8aHJlbiBtaXTCqyBtdXNzIGVpbiBad2VpZyBhbmdlZ2ViZW4gd2VyZGVuLiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyOAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKICJcbiIKLSIgLSAlcyIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKIG1zZ3N0ciAiIgotIkZvbGdlbmRlIFp3ZWlnZSBzaW5kIG5vY2ggbmljaHQgbWl0IMK7JXPCqyB6dXNhbW1lbmdlZsO8aHJ0OlxuIgorIkRlciBha3R1ZWxsZSBad2VpZyAlcyBoYXQga2VpbmVuIFp3ZWlnIGltIGV4dGVybmVuIFByb2pla3RhcmNoaXYuXG4iCisiVW0gZGVuIGFrdHVlbGxlbiBad2VpZyB6dSB2ZXJzZW5kZW4gdW5kIGRhcyBGZXJuYXJjaGl2IGFscyBleHRlcm5lc1xuIgorIlByb2pla3RhcmNoaXYgenUgdmVyd2VuZGVuLCBiZW51dHplXG4iCiAiXG4iCi0iIC0gJXMiCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3B1c2guYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIkRlciBha3R1ZWxsZSBad2VpZyAlcyBoYXQgbWVocmVyZSBleHRlcm5lIFp3ZWlnZSwgVmVyc2FuZCB2ZXJ3ZWlnZXJ0LiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTM5CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKLSJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCiBtc2dzdHIgIiIKLSJFaW4gb2RlciBtZWhyZXJlIFp1c2FtbWVuZsO8aHJ1bmdlbiBzaW5kIGZlaGxnZXNjaGxhZ2VuLCBkYSBTaWUgbmljaHQgZGllICIKLSJub3R3ZW5kaWdlbiBWZXJzaW9uZW4gdm9yaGVyIGFuZ2Vmb3JkZXJ0IGhhYmVuLiAgU2llIHNvbGx0ZW4gdmVyc3VjaGVuLCAiCi0ienVlcnN0IHZvbiDCuyVzwqsgYW56dWZvcmRlcm4uIgorIkR1IHZlcnNlbmRlc3QgbmFjaCAnJXMnLCB3ZWxjaGVzIGtlaW4gZXh0ZXJuZXMgUHJvamVrdGFyY2hpdiBkZWluZXNcbiIKKyJha3R1ZWxsZW4gWndlaWdlcyAnJXMnIGlzdCwgb2huZSBtaXIgbWl0enV0ZWlsZW4sIHdhcyBpY2ggdmVyc2VuZGVuXG4iCisic29sbCwgdW0gd2VsY2hlbiBleHRlcm5lbiBad2VpZyB6dSBha3R1YWxpc2llcmVuLiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCi1tc2dzdHIgIkJpdHRlIHfDpGhsZW4gU2llIG1pbmRlc3RlbnMgZWluZW4gWndlaWcsIGRlciBnZWzDtnNjaHQgd2VyZGVuIHNvbGwuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCi1tc2dzdHIgIlp3ZWlnZSBhdWYgwrslc8KrIHdlcmRlbiBnZWzDtnNjaHQiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkyCi1tc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCi1tc2dzdHIgIktlaW4gUHJvamVrdGFyY2hpdiBhdXNnZXfDpGhsdC4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCi1tc2dzdHIgIsK7JXPCqyBsYWRlbi4uLiIKLQotIzogbGliL3JlbW90ZS50Y2w6MTYzCi1tc2dpZCAiUmVtb3ZlIFJlbW90ZSIKLW1zZ3N0ciAiRXh0ZXJuZXMgQXJjaGl2IGVudGZlcm5lbiIKLQotIzogbGliL3JlbW90ZS50Y2w6MTY4Ci1tc2dpZCAiUHJ1bmUgZnJvbSIKLW1zZ3N0ciAiQXVmcsOkdW1lbiB2b24iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE3MwotbXNnaWQgIkZldGNoIGZyb20iCi1tc2dzdHIgIkFuZm9yZGVybiB2b24iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIxNQotbXNnaWQgIlB1c2ggdG8iCi1tc2dzdHIgIlZlcnNlbmRlbiBuYWNoIgotCi0jOiBsaWIvc2VhcmNoLnRjbDoyMQotbXNnaWQgIkZpbmQ6IgotbXNnc3RyICJTdWNoZW46IgotCi0jOiBsaWIvc2VhcmNoLnRjbDoyMwotbXNnaWQgIk5leHQiCi1tc2dzdHIgIk7DpGNoc3RlciIKLQotIzogbGliL3NlYXJjaC50Y2w6MjQKLW1zZ2lkICJQcmV2IgotbXNnc3RyICJWb3JpZ2VyIgotCi0jOiBsaWIvc2VhcmNoLnRjbDoyNQotbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgotbXNnc3RyICJHcm/Dny0vS2xlaW5zY2hyZWlidW5nIHVudGVyc2NoZWlkZW4iCi0KLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgotbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCi1tc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgVmVya27DvHBmdW5nOiIKLQotIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCi1tc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXMgSWNvbnM6IgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKLW1zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZ3Nwcm9ncmFtbSBuaWNodCB1bnRlcnN0w7x0enQiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQotbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgotbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZyBuaWNodCB2ZXJmw7xnYmFyIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKLW1zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCi1tc2dzdHIgIlVuYmVudXR6YmFyZSBLb25maWd1cmF0aW9uIGRlciBSZWNodHNjaHJlaWJwcsO8ZnVuZyIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgotbXNnc3RyICJXw7ZydGVyYnVjaCBhdWYgJXMgenVyw7xja2dlc2V0enQuIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKLW1zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgotbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZ3Nwcm9ncmFtbSBtaXQgRmVobGVyIGFiZ2Vicm9jaGVuIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6ODAKLW1zZ2lkICJVbnJlY29nbml6ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiVW5iZWthbm50ZXMgUmVjaHRzY2hyZWlicHLDvGZ1bmdzcHJvZ3JhbW0iCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKLW1zZ2lkICJObyBTdWdnZXN0aW9ucyIKLW1zZ3N0ciAiS2VpbmUgVm9yc2NobMOkZ2UiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKLW1zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIlVuZXJ3YXJ0ZXRlcyBFT0Ygdm9tIFJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCi1tc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCi1tc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nIGZlaGxnZXNjaGxhZ2VuIgotCi0jOiBsaWIvc3Noa2V5LnRjbDozMQotbXNnaWQgIk5vIGtleXMgZm91bmQuIgotbXNnc3RyICJLZWluZSBTY2hsw7xzc2VsIGdlZnVuZGVuLiIKLQotIzogbGliL3NzaGtleS50Y2w6MzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgotbXNnc3RyICLDlmZmZW50bGljaGVyIFNjaGzDvHNzZWwgZ2VmdW5kZW4gaW46ICVzIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo0MAotbXNnaWQgIkdlbmVyYXRlIEtleSIKLW1zZ3N0ciAiU2NobMO8c3NlbCBlcnpldWdlbiIKLQotIzogbGliL3NzaGtleS50Y2w6NTYKLW1zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKLW1zZ3N0ciAiSW4gWndpc2NoZW5hYmxhZ2Uga29waWVyZW4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjcwCi1tc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCi1tc2dzdHIgIklociBPcGVuU1NIIMO2ZmZlbmxpY2hlciBTY2hsw7xzc2VsIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo3OAotbXNnaWQgIkdlbmVyYXRpbmcuLi4iCi1tc2dzdHIgIkVyemV1Z2VuLi4uIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo4NAotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9wdXNoLmM6MTUxCiBtc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgorInB1c2guZGVmYXVsdCBpcyB1bnNldDsgaXRzIGltcGxpY2l0IHZhbHVlIGlzIGNoYW5naW5nIGluXG4iCisiR2l0IDIuMCBmcm9tICdtYXRjaGluZycgdG8gJ3NpbXBsZScuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlXG4iCisiYW5kIG1haW50YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yIGFmdGVyIHRoZSBkZWZhdWx0IGNoYW5nZXMsIHVzZTpcbiIKICJcbiIKLSIlcyIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igbm93LCB1c2U6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyJcbiIKKyJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ3B1c2guZGVmYXVsdCcgZm9yIGZ1cnRoZXIgIgorImluZm9ybWF0aW9uLlxuIgorIih0aGUgJ3NpbXBsZScgbW9kZSB3YXMgaW50cm9kdWNlZCBpbiBHaXQgMS43LjExLiBVc2UgdGhlIHNpbWlsYXIgbW9kZVxuIgorIidjdXJyZW50JyBpbnN0ZWFkIG9mICdzaW1wbGUnIGlmIHlvdSBzb21ldGltZXMgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdCkiCiBtc2dzdHIgIiIKLSJLb25udGUgwrtzc2gta2V5Z2VuwqsgbmljaHQgc3RhcnRlbjpcbiIKKyIncHVzaC5kZWZhdWx0JyBpc3QgbmljaHQgZ2VzZXR6dDsgZGVyIGltcGxpeml0IGdlc2V0enRlIFdlcnRcbiIKKyJ3aXJkIGluIEdpdCAyLjAgdm9uICdtYXRjaGluZycgbmFjaCAnc2ltcGxlJyBnZcOkbmRlcnQuIFVtIGRpZXNlIE1lbGR1bmcgenVcbiIKKyJ1bnRlcmRyw7xja2VuIHVuZCBkYXMgYWt0dWVsbGUgVmVyaGFsdGVuIG5hY2ggw4RuZGVydW5nIGRlcyBTdGFuZGFyZHdlcnRlc1xuIgorImJlaXp1YmVoYWx0ZW4sIGJlbnV0emU6IgogIlxuIgotIiVzIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyJcbiIKKyJVbSBkaWVzZSBNZWxkdW5nIHp1IHVudGVyZHLDvGNrZW4gdW5kIGRhcyBuZXVlIFZlcmhhbHRlbiBqZXR6dCB6dSDDvGJlcm5laG1lbixcbiIKKyJiZW51dHplOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisiRsO8aHJlICdnaXQgaGVscCBjb25maWcnIGF1cyB1bmQgc3VjaGUgbmFjaCAncHVzaC5kZWZhdWx0JyBmw7xyIHdlaXRlcmUgIgorIkluZm9ybWF0aW9uZW4uXG4iCisiKERlciBNb2R1cyAnc2ltcGxlJyB3dXJkZSBpbiBHaXQgMS43LjExIGVpbmdlZsO8aHJ0LiBCZW51dHplIGRlbiDDpGhubGljaGVuIgorIiBNb2R1cyAnY3VycmVudCcgYW5zdGF0dCAnc2ltcGxlJywgZmFsbHMgZHUgZ2VsZWdlbnRsaWNoIMOkbHRlcmUgVmVyc2lvbmVuIHZvbiIKKyIgR2l0IGJlbnV0enQuKSIKIAotIzogbGliL3NzaGtleS50Y2w6MTExCi1tc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgotbXNnc3RyICJTY2hsw7xzc2VsZXJ6ZXVndW5nIGZlaGxnZXNjaGxhZ2VuLiIKLQotIzogbGliL3NzaGtleS50Y2w6MTE4Ci1tc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAiU2NobMO8c3NlbGVyemV1Z3VuZyBlcmZvbGdyZWljaCwgYWJlciBrZWluZSBTY2hsw7xzc2VsIGdlZnVuZGVuLiIKLQotIzogbGliL3NzaGtleS50Y2w6MTIxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgotbXNnc3RyICJJaHIgU2NobMO8c3NlbCBpc3QgYWJnZWxlZ3QgaW46ICVzIgotCi0jOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgotbXNnc3RyICIlcyAuLi4gJSppIHZvbiAlKmkgJXMgKCUzaSUlKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKLW1zZ2lkICJBZGQgVG9vbCIKLW1zZ3N0ciAiV2Vya3pldWcgaGluenVmw7xnZW4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjI4Ci1tc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCi1tc2dzdHIgIk5ldWVzIEtvbW1hbmRvIGbDvHIgV2Vya3pldWcgaGluenVmw7xnZW4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjMzCi1tc2dpZCAiQWRkIGdsb2JhbGx5IgotbXNnc3RyICJHbG9iYWwgaGluenVmw7xnZW4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ1Ci1tc2dpZCAiVG9vbCBEZXRhaWxzIgotbXNnc3RyICJFaW56ZWxoZWl0ZW4gZGVzIFdlcmt6ZXVncyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDgKLW1zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKLW1zZ3N0ciAiQmVudXR6ZW4gU2llIGVpbmVuIFNjaHLDpGdzdHJpY2ggwrsvwqssIHVtIFVudGVybWVuw7xzIHp1IGVyc3RlbGxlbjoiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjYxCi1tc2dpZCAiQ29tbWFuZDoiCi1tc2dzdHIgIktvbW1hbmRvOiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NzQKLW1zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgotbXNnc3RyICJCZXN0w6R0aWd1bmdzZnJhZ2Ugdm9yIFN0YXJ0ZW4gYW56ZWlnZW4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjgwCi1tc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCi1tc2dzdHIgIkJlbnV0emVyIG5hY2ggVmVyc2lvbiBmcmFnZW4gKHNldHp0ICRSRVZJU0lPTikiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjg1Ci1tc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCi1tc2dzdHIgIkJlbnV0emVyIG5hY2ggenVzw6R0emxpY2hlbiBBcmd1bWVudGVuIGZyYWdlbiAoc2V0enQgJEFSR1MpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo5MgotbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKLW1zZ3N0ciAiS2VpbiBBdXNnYWJlZmVuc3RlciB6ZWlnZW4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjk3Ci1tc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKLW1zZ3N0ciAiTnVyIHN0YXJ0ZW4sIHdlbm4gZWluIFZlcmdsZWljaCBnZXfDpGhsdCBpc3QgKCRGSUxFTkFNRSBpc3QgbmljaHQgbGVlcikiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjEyMQotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCi1tc2dzdHIgIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBXZXJremV1Z25hbWVuIGFuLiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiV2Vya3pldWcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTUxCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3B1c2guYzoxOTkKIG1zZ2lkICIiCi0iQ291bGQgbm90IGFkZCB0b29sOlxuIgotIiVzIgorIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCiBtc2dzdHIgIiIKLSJXZXJremV1ZyBrb25udGUgbmljaHQgaGluenVnZWbDvGd0IHdlcmRlbjpcbiIKKyJEdSBoYXN0IGtlaW5lIFJlZmVyZW56c3BlemlmaWthdGlvbmVuIHp1bSBWZXJzZW5kZW4gYW5nZWdlYmVuLCB1bmQgcHVzaC4iCisiZGVmYXVsdCBpc3QgXCJub3RoaW5nXCIuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDYKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIE1lcmdlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLiAnZ2l0IHB1bGwnKVxuIgorImJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiQWt0dWFsaXNpZXJ1bmdlbiB3dXJkZW4genVyw7xja2dld2llc2VuLCB3ZWlsIGRpZSBTcGl0emUgZGVpbmVzIGFrdHVlbGxlblxuIgorIlp3ZWlnZXMgaGludGVyIHNlaW5lbSBleHRlcm5lbiBHZWdlbnN0w7xjayB6dXLDvGNrZ2VmYWxsZW4gaXN0LiBGw7xocmUgZGllXG4iCisiZXh0ZXJuZW4gw4RuZGVydW5nZW4genVzYW1tZW4gKHouQi4gJ2dpdCBwdWxsJykgYmV2b3IgZHUgZXJuZXV0IHZlcnNlbmRlc3QuXG4iCisiU2llaGUgYXVjaCBkaWUgU2VrdGlvbiAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJ1xuIgorImbDvHIgd2VpdGVyZSBEZXRhaWxzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjEyCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gSWYgeW91IGRpZCBub3QgaW50ZW5kIHRvIHB1c2ggdGhhdCBicmFuY2gsIHlvdSBtYXkgd2FudCB0b1xuIgorInNwZWNpZnkgYnJhbmNoZXMgdG8gcHVzaCBvciBzZXQgdGhlICdwdXNoLmRlZmF1bHQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKyJ0byAnc2ltcGxlJywgJ2N1cnJlbnQnIG9yICd1cHN0cmVhbScgdG8gcHVzaCBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKyJBa3R1YWxpc2llcnVuZ2VuIHd1cmRlbiB6dXLDvGNrZ2V3aWVzZW4sIHdlaWwgZGllIFNwaXR6ZSBlaW5lcyB2ZXJzZW5kZXRlblxuIgorIlp3ZWlnZXMgaGludGVyIHNlaW5lbSBleHRlcm5lbiBHZWdlbnN0w7xjayB6dXLDvGNrZ2VmYWxsZW4gaXN0LiBXZW5uIGR1IG5pY2h0XG4iCisiYmVhYnNpY2h0aWd0IGhhc3QsIGRpZXNlbiBad2VpZyB6dSB2ZXJzZW5kZW4sIGthbm5zdCBkdSBhdWNoIGRlbiB6dSAiCisidmVyc2VuZGVuZGVuXG4iCisiWndlaWcgc3BlemlmaXppZXJlbiBvZGVyIGRpZSBLb25maWd1cmF0aW9uc3ZhcmlhYmxlICdwdXNoLmRlZmF1bHQnIHp1ICIKKyInc2ltcGxlJywgJ2N1cnJlbnQnXG4iCisib2RlciAndXBzdHJlYW0nIHNldHplbiwgdW0gbnVyIGRlbiBha3R1ZWxsZW4gWndlaWcgenUgdmVyc2VuZGVuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjE4Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBtZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwnKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkFrdHVhbGlzaWVydW5nZW4gd3VyZGVuIHp1csO8Y2tnZXdpZXNlbiwgd2VpbCBkaWUgU3BpdHplIGVpbmVzIHZlcnNlbmRldGVuXG4iCisiWndlaWdlcyBoaW50ZXIgc2VpbmVtIGV4dGVybmVuIEdlZ2Vuc3TDvGNrIHp1csO8Y2tnZWZhbGxlbiBpc3QuIENoZWNrZSBkaWVzZW5cbiIKKyJad2VpZyBhdXMgdW5kIGbDvGhyZSBkaWUgZXh0ZXJuZW4gw4RuZGVydW5nZW4genVzYW1tZW4gKHouQi4gJ2dpdCBwdWxsJylcbiIKKyJiZXZvciBkdSBlcm5ldXQgdmVyc2VuZGVzdC5cbiIKKyJTaWVoZSBhdWNoIGRpZSBTZWt0aW9uICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnXG4iCisiZsO8ciB3ZWl0ZXJlIERldGFpbHMuIgorCisjOiBidWlsdGluL3B1c2guYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICJWZXJzZW5kZSBuYWNoICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gVmVyc2VuZGVuIGVpbmlnZXIgUmVmZXJlbnplbiBuYWNoICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBQcm9qZWt0YXJjaGl2ICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NQorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCiAiXG4iCi0iJXMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE5MAotbXNnaWQgIlJlbW92ZSBUb29sIgotbXNnc3RyICJXZXJremV1ZyBlbnRmZXJuZW4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE5NgotbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgotbXNnc3RyICJXZXJremV1Z2tvbW1hbmRvcyBlbnRmZXJuZW4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjIwMAotbXNnaWQgIlJlbW92ZSIKLW1zZ3N0ciAiRW50ZmVybmVuIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKLW1zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgotbXNnc3RyICIoV2Vya3pldWdlIGbDvHIgbG9rYWxlcyBBcmNoaXYgd2VyZGVuIGluIEJsYXUgYW5nZXplaWd0KSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6Mjk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgotbXNnc3RyICJLb21tYW5kbyBhdWZydWZlbjogJXMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjMxMQotbXNnaWQgIkFyZ3VtZW50cyIKLW1zZ3N0ciAiQXJndW1lbnRlIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozNDgKLW1zZ2lkICJPSyIKLW1zZ3N0ciAiT2siCi0KLSM6IGxpYi90b29scy50Y2w6NzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCi1tc2dzdHIgIlVtIMK7JXPCqyB6dSBzdGFydGVuLCBtdXNzIGVpbmUgRGF0ZWkgYXVzZ2V3w6RobHQgc2Vpbi4iCi0KLSM6IGxpYi90b29scy50Y2w6OTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKLW1zZ3N0ciAiV29sbGVuIFNpZSAlcyB3aXJrbGljaCBzdGFydGVuPyIKLQotIzogbGliL3Rvb2xzLnRjbDoxMTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sOiAlcyIKLW1zZ3N0ciAiV2Vya3pldWc6ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjExMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmc6ICVzIgotbXNnc3RyICJTdGFydGVuOiAlcyIKLQotIzogbGliL3Rvb2xzLnRjbDoxNDkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgotbXNnc3RyICJXZXJremV1ZyBlcmZvbGdyZWljaCBhYmdlc2NobG9zc2VuOiAlcyIKLQotIzogbGliL3Rvb2xzLnRjbDoxNTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGZhaWxlZDogJXMiCi1tc2dzdHIgIldlcmt6ZXVnIGZlaGxnZXNjaGxhZ2VuOiAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCi1tc2dzdHIgIk5ldWUgw4RuZGVydW5nZW4gdm9uIMK7JXPCqyBob2xlbiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCi1tc2dzdHIgIkF1ZnLDpHVtZW4gdm9uIMK7JXPCqyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKLW1zZ3N0ciAiw5xiZXJuYWhtZXp3ZWlnZSBhdWZyw6R1bWVuIHVuZCBlbnRmZXJuZW4sIGRpZSBpbiDCuyVzwqsgZ2Vsw7ZzY2h0IHd1cmRlbiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCi1tc2dzdHIgIsOEbmRlcnVuZ2VuIG5hY2ggwrslc8KrIHZlcnNlbmRlbiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCi1tc2dzdHIgIlNwaWVnZWxuIG5hY2ggJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjgyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKLW1zZ3N0ciAiJXMgJXMgbmFjaCAlcyB2ZXJzZW5kZW4iCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjEwMAotbXNnaWQgIlB1c2ggQnJhbmNoZXMiCi1tc2dzdHIgIlp3ZWlnZSB2ZXJzZW5kZW4iCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjExNAotbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKLW1zZ3N0ciAiTG9rYWxlIFp3ZWlnZSIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCi1tc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKLW1zZ3N0ciAiWmllbC1Qcm9qZWt0YXJjaGl2IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjkKLW1zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgotbXNnc3RyICJOZXR6d2Vyay1FaW5zdGVsbHVuZ2VuIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKLW1zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCiBtc2dzdHIgIiIKLSLDnGJlcnNjaHJlaWJlbiB2b24gZXhpc3RpZXJlbmRlbiBad2VpZ2VuIGVyendpbmdlbiAoa8O2bm50ZSDDhG5kZXJ1bmdlbiBsw7ZzY2hlbikiCisiS2VpbiBaaWVsIHp1bSBWZXJzZW5kZW4ga29uZmlndXJpZXJ0LlxuIgorIkVudHdlZGVyIHNwZXppZml6aWVyc3QgZHUgZGllIFVSTCB2b24gZGVyIEtvbW1hbmRvemVpbGUgb2RlciBrb25maWd1cmllcnN0ICIKKyJlaW4gZXh0ZXJuZXMgUHJvamVrdGFyY2hpdiB1bnRlciBCZW51dHp1bmcgdm9uXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxOYW1lPiA8VVJMPlxuIgorIlxuIgorInVuZCB2ZXJzZW5kZXN0IGRhbm4gdW50ZXIgQmVudXR6dW5nIGRpZXNlcyBOYW1lbnNcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPE5hbWU+XG4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQotbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgotbXNnc3RyICJLb21wYWt0ZXMgRGF0ZW5mb3JtYXQgYmVudXR6ZW4gKGbDvHIgbGFuZ3NhbWUgTmV0enZlcmJpbmR1bmdlbikiCisjOiBidWlsdGluL3B1c2guYzozMTAKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIHVuZCAtLXRhZ3Mgc2luZCBpbmtvbXBhdGliZWwiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQotbXNnaWQgIkluY2x1ZGUgdGFncyIKLW1zZ3N0ciAiTWl0IE1hcmtpZXJ1bmdlbiDDvGJlcnRyYWdlbiIKKyM6IGJ1aWx0aW4vcHVzaC5jOjMxMQorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsIGthbm4gbmljaHQgbWl0IFJlZmVyZW56c3BlemlmaWthdGlvbmVuIGtvbWJpbmllcnQgd2VyZGVuIgorCisjOiBidWlsdGluL3B1c2guYzozMTYKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yIHVuZCAtLXRhZ3Mgc2luZCBpbmtvbXBhdGliZWwiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjMxNworbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIGthbm4gbmljaHQgbWl0IFJlZmVyZW56c3BlemlmaWthdGlvbmVuIGtvbWJpbmllcnQgd2VyZGVuIgorCisjOiBidWlsdGluL3B1c2guYzozMjIKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgdW5kIC0tbWlycm9yIHNpbmQgaW5rb21wYXRpYmVsIgorCisjOiBidWlsdGluL3B1c2guYzo0MTAKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiLS1kZWxldGUgaXN0IGlua29tcGF0aWJlbCBtaXQgLS1hbGwsIC0tbWlycm9yIHVuZCAtLXRhZ3MiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxMgorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICItLWRlbGV0ZSBtYWNodCBvaG5lIGlyZ2VuZGVpbmUgUmVmZXJlbnoga2VpbmVuIFNpbm4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIkFrdHVhbGlzaWVyZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3IgaXN0IGdlZsOkaHJsaWNoIHVuZCB2ZXJhbHRldDsgYml0dGVcbiIKKyJcdCBiZW51dHplIHN0YXR0ZGVzc2VuIC0tbWlycm9yPWZldGNoIG9kZXIgLS1taXJyb3I9cHVzaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJ1bmJla2FubnRlcyBBcmd1bWVudCBmw7xyIE9wdGlvbiAtLW1pcnJvcjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAiQW5nYWJlIGVpbmVzIEhhdXB0endlaWdlcyBtYWNodCBtaXQgLS1taXJyb3Iga2VpbmVuIFNpbm4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiIgorImRpZSBBbmdhYmUgdm9uIHp1IGZvbGdlbmRlbiBad2VpZ2VuIG1hY2h0IG51ciBtaXQgZGVtIEFiaG9sZW4gdm9uICIKKyJTcGllZ2VsYXJjaGl2ZW4gU2lubiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTUgYnVpbHRpbi9yZW1vdGUuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiZXh0ZXJuZXMgUHJvamVrdGFyY2hpdiAlcyBleGlzdGllcnQgYmVyZWl0cyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTkgYnVpbHRpbi9yZW1vdGUuYzo2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbiBnw7xsdGlnZXIgTmFtZSBmw7xyIGVpbiBleHRlcm5lcyBQcm9qZWt0YXJjaGl2IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgIktvbm50ZSBzeW1ib2xpc2NoZSBSZWZlcmVueiBmw7xyIEhhdXB0endlaWcgdm9uICclcycgbmljaHQgZWlucmljaHRlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAibWVociBhbHMgZWluICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAiS29ubnRlIEFiaG9sdW5nc3p1b3JkbnVuZyBmw7xyIFJlZmVyZW56c3BlemlmaWthdGlvbiAlcyBuaWNodCBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDAgYnVpbHRpbi9yZW1vdGUuYzo0NDgKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIow7xiZXJlaW5zdGltbWVuZCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUyCittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIihsw7ZzY2hlKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OTUgYnVpbHRpbi9yZW1vdGUuYzo2MDEgYnVpbHRpbi9yZW1vdGUuYzo2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIHRvICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGFuICclcycgYW5ow6RuZ2VuLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MzkgYnVpbHRpbi9yZW1vdGUuYzo3OTIgYnVpbHRpbi9yZW1vdGUuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorbXNnc3RyICJLZWluIHNvbGNoZXMgZXh0ZXJuZXMgQXJjaGl2OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIktvbm50ZSBTZWt0aW9uICclcycgaW4gS29uZmlndXJhdGlvbiBuaWNodCBuYWNoICclcycgdW1iZW5lbm5lbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjIgYnVpbHRpbi9yZW1vdGUuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICJLb25udGUgU2VrdGlvbiAnJXMnIG5pY2h0IGF1cyBLb25maWd1cmF0aW9uIGVudGZlcm5lbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisiS2VpbmUgQWt0dWFsaXNpZXJ1bmcgZGVyIG5pY2h0IHN0YW5kYXJkbcOkw59pZ2VuIFJlZmVyZW56c3BlemlmaWthdGlvbiB6dW0gIgorIkFiaG9sZW5cbiIKKyJcdCVzXG4iCisiXHRCaXR0ZSBha3R1YWxpc2llcmUsIGZhbGxzIG5vdHdlbmRpZywgZGllIEtvbmZpZ3VyYXRpb24gbWFudWVsbC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYW5ow6RuZ2VuLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBicmFuY2ggJXMiCittc2dzdHIgIktvbm50ZSBad2VpZyAlcyBuaWNodCBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODM0Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJIaW53ZWlzOiBFaW4gWndlaWcgYXXDn2VyaGFsYiBkZXIgL3JlZnMvcmVtb3Rlcy8gSGllcmFjaGllIHd1cmRlIG5pY2h0ICIKKyJlbnRmZXJudDtcbiIKKyJ1bSBkaWVzZW4genUgZW50ZmVybmVuLCBiZW51dHplOiIKK21zZ3N0clsxXSAiIgorIkhpbndlaXM6IEVpbmlnZSBad2VpZ2UgYXXDn2VyIGRlciAvcmVmcy9yZW1vdGVzLyBIaWVyYXJjaGllIHd1cmRlbiBuaWNodCAiCisiZW50ZmVybnQ7XG4iCisidW0gZGllc2UgenUgZW50ZmVybmVuLCBiZW51dHplOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIgbmV1ICh3aXJkIGJlaSBuw6RjaHN0ZXIgQWJob2x1bmcgaW4gcmVtb3Rlcy8lcyBnZXNwZWljaGVydCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ2Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiBnZWZvbGd0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk0OAorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIgdmVyYWx0ZXQgKGJlbnV0emUgJ2dpdCByZW1vdGUgcHJ1bmUnIHp1bSBFbnRmZXJuZW4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk1MAorbXNnaWQgIiA/Pz8iCittc2dzdHIgIiA/Pz8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIKK21zZ3N0ciAidW5nw7xsdGlnZXMgYnJhbmNoLiVzLm1lcmdlOyBrYW5uIG5pY2h0IGF1ZiA+IDEgWndlaWcgbmV1IGF1ZmJhdWVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJiYXV0IG5ldSBhdWYgZXh0ZXJuZW4gWndlaWcgJXMgYXVmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIGbDvGhydCBtaXQgZXh0ZXJuZW0gWndlaWcgJXMgenVzYW1tZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMgorbXNnaWQgIiAgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiAgICB1bmQgbWl0IGV4dGVybmVtIFp3ZWlnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICJmw7xocnQgbWl0IGV4dGVybmVtIFp3ZWlnICVzIHp1c2FtbWVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDUKK21zZ2lkICIgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiAgIHVuZCBtaXQgZXh0ZXJuZW0gWndlaWciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MQorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiZXJzdGVsbHQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NAorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAiZ2Vsw7ZzY2h0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTgKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICJha3R1ZWxsIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJ2b3JzcHVsYmFyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjQKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAibG9rYWwgbmljaHQgYWt0dWVsbCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIGVyendpbmd0IFZlcnNhbmR0IG5hY2ggJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgdmVyc2VuZGV0IG5hY2ggJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBlcnp3aW5ndCBWZXJzYW5kIG5hY2ggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIHZlcnNlbmRldCBuYWNoICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiogZXh0ZXJuZXMgUHJvamVrdGFyY2hpdiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwgenVtIEFiaG9sZW46ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjAgYnVpbHRpbi9yZW1vdGUuYzoxMjg1Cittc2dpZCAiKG5vIFVSTCkiCittc2dzdHIgIihrZWluZSBVUkwpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjkgYnVpbHRpbi9yZW1vdGUuYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwgenVtIFZlcnNlbmRlbjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMyBidWlsdGluL3JlbW90ZS5jOjExMzUgYnVpbHRpbi9yZW1vdGUuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIEhhdXB0endlaWc6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiIgorIiAgSGF1cHR6d2VpZyAoZXh0ZXJuZXIgSGF1cHR6d2VpZyBpc3QgbWVocmRldXRpZywga8O2bm50ZSBlaW5lciBkZXIgZm9sZ2VuZGVuICIKKyJzZWluKTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgZXh0ZXJuZXIgWndlaWc6JXMiCittc2dzdHJbMV0gIiAgZXh0ZXJuZSBad2VpZ2U6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NCBidWlsdGluL3JlbW90ZS5jOjExODEKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAoWnVzdGFuZCBuaWNodCBhYmdlZnJhZ3QpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjMKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICBMb2thbGVyIFp3ZWlnIGtvbmZpZ3VyaWVydCBmw7xyICdnaXQgcHVsbCc6IgorbXNnc3RyWzFdICIgIExva2FsZSBad2VpZ2Uga29uZmlndXJpZXJ0IGbDvHIgJ2dpdCBwdWxsJzoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MQorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAgTG9rYWxlIFJlZmVyZW56ZW4gd2VyZGVuIHZvbiAnZ2l0IHB1c2gnIGdlc3BpZWdlbHQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICBMb2thbGUgUmVmZXJlbnoga29uZmlndXJpZXJ0IGbDvHIgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clsxXSAiICBMb2thbGUgUmVmZXJlbnplbiBrb25maWd1cmllcnQgZsO8ciAnZ2l0IHB1c2gnJXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTYKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICJLYW5uIEhhdXB0endlaWcgZGVzIGV4dGVybmVuIFByb2pla3RhcmNoaXZzIG5pY2h0IGJlc3RpbW1lbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE4Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIiIKKyJNZWhyZXJlIEhhdXB0endlaWdlIGltIGV4dGVybmVuIFByb2pla3RhcmNoaXYuIEJpdHRlIHfDpGhsZSBleHBsaXppdCBlaW5lbiAiCisiYXVzIG1pdDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgZW50ZmVybmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAia2VpbmUgZ8O8bHRpZ2UgUmVmZXJlbno6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgZWlucmljaHRlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyB3aXJkIHVucmVmZXJlbnppZXJ0ISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIHd1cmRlIHVucmVmZXJlbnppZXJ0ISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgImVudGZlcm5lIHZlcmFsdGV0ZSBad2VpZ2Ugdm9uICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFt3w7xyZGUgdmVyYWx0ZXRlbiBad2VpZyBlbnRmZXJuZW5dICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiogW3ZlcmFsdGV0ZW4gWndlaWcgZW50ZmVybnRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODcgYnVpbHRpbi9yZW1vdGUuYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIktlaW4gc29sY2hlcyBleHRlcm5lcyBQcm9qZWt0YXJjaGl2ICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQxNAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgImtlaW4gZXh0ZXJuZXMgUHJvamVrdGFyY2hpdiBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ0NworbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUgbWFjaHQga2VpbmVuIFNpbm4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgInVuZ8O8bHRpZ2VzIGFsdGVzIFVSTCBGb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICJLZWluZSBzb2xjaGUgVVJMIGdlZnVuZGVuOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDk3Cittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICJXZXJkZSBrZWluZSBVUkxzIGVudGZlcm5lbiwgZGllIG5pY2h0IGbDvHIgZGVuIFZlcnNhbmQgYmVzdGltbXQgc2luZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAibWl4ZWQiCittc2dzdHIgIm1peGVkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJzb2Z0IgorbXNnc3RyICJzb2Z0IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJoYXJkIgorbXNnc3RyICJoYXJkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAienVzYW1tZW5mw7xocmVuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJrZWVwIgorbXNnc3RyICJrZWVwIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzcKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAiRHUgaGFzdCBrZWluZSBnw7xsdGlnZSBad2VpZ3NwaXR6ZSAoSEVBRCkuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzkKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBGaW5kZW4gZGVzIEJhdW1lcyBkZXIgWndlaWdzcGl0emUgKEhFQUQpLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBGaW5kZW4gZGVzIEJhdW1lcyB2b24gJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTYKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICJLb25udGUgbmV1ZSBCZXJlaXRzdGVsbHVuZ3NkYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJad2VpZ3NwaXR6ZSAoSEVBRCkgaXN0IGpldHp0IGJlaSAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjEzMAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICJLb25udGUgQmVyZWl0c3RlbGx1bmcgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMzMKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiTmljaHQgYmVyZWl0Z2VzdGVsbHRlIMOEbmRlcnVuZ2VuIG5hY2ggWnVyw7xja3NldHp1bmc6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIiIKKyJLYW5uIGtlaW5lICclcycgWnVyw7xja3NldHp1bmcgZHVyY2hmw7xocmVuLCB3w6RocmVuZCBlaW5lIFp1c2FtbWVuZsO8aHJ1bmcgaW0gIgorIkdhbmdlIGlzdC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiS29ubnRlIE9iamVrdCAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDgKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggaXN0IGlua29tcGF0aWJlbCBtaXQgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxNworbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgbWl0IFBmYWRlbiBpc3QgdmVyYWx0ZXQ7IGJlbnV0emUgc3RhdHRkZXNzZW4gJ2dpdCByZXNldCAtLSA8UGZhZGU+Jy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICJFaW5lICclcycgWnVyw7xja3NldHp1bmcgbWl0IFBmYWRlbiBpc3QgbmljaHQgbcO2Z2xpY2guIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICInJXMnIFp1csO8Y2tzZXR6dW5nIGlzdCBpbiBlaW5lbSBibG/Dn2VuIFByb2pla3RhcmNoaXYgbmljaHQgZXJsYXVidCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAiS29ubnRlIEJlcmVpdHN0ZWxsdW5nc2RhdGVpIG5pY2h0IHp1IFZlcnNpb24gJyVzJyB6dXLDvGNrc2V0emVuLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MCBidWlsdGluL3JldmVydC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlczogJXMga2FubiBuaWNodCBtaXQgJXMgYmVudXR6dCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTMxCittc2dpZCAicHJvZ3JhbSBlcnJvciIKK21zZ3N0ciAiUHJvZ3JhbW1mZWhsZXIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjIxCittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAiXCJyZXZlcnRcIiBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzYKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgIlwiY2hlcnJ5LXBpY2tcIiBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9ybS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGUgZmlsZSBhbmQgdGhlIEhFQURcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiJyVzJyBoYXQgYmVyZWl0Z2VzdGVsbHRlbiBJbmhhbHQgdW50ZXJzY2hpZWRsaWNoIHp1IGRlciBEYXRlaSB1bmQgZGVyXG4iCisiWndlaWdzcGl0emUgKEhFQUQpIChiZW51dHplIC1mIHVtIGRpZSBFbnRmZXJudW5nIHp1IGVyendpbmdlbikiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleFxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyInJXMnIGhhdCDDhG5kZXJ1bmdlbiBpbiBkZXIgQmVyZWl0c3RlbGx1bmdcbiIKKyIoYmVudXR6ZSAtLWNhY2hlZCB1bSBkaWUgRGF0ZWkgenUgYmVoYWx0ZW4sIG9kZXIgLWYgdW0gZGllIEVudGZlcm51bmcgenUgIgorImVyendpbmdlbikiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnNcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiJyVzJyBoYXQgbG9rYWxlIE1vZGlmaWthdGlvbmVuXG4iCisiKGJlbnV0emUgLS1jYWNoZWQgdW0gZGllIERhdGVpIHp1IGJlaGFsdGVuLCBvZGVyIC1mIHVtIGRpZSBFbnRmZXJudW5nIHp1ICIKKyJlcnp3aW5nZW4pIgorCisjOiBidWlsdGluL3JtLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgIiclcycgd2lyZCBuaWNodCBvaG5lIC1yIHJla3Vyc2l2IGVudGZlcm50IgorCisjOiBidWlsdGluL3JtLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtOiBrb25udGUgJXMgbmljaHQgZW50ZmVybmVuIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKK21zZ3N0ciAiZmVobGVuZGVyIEF1dG9yOiAlcyIKKworIzogYnVpbHRpbi90YWcuYzo2MAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgImZlaGxlcmhhZnRlcyBPYmpla3QgYmVpICclcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICJNYXJraWVydW5nc25hbWUgenUgbGFuZzogJS4qcy4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiTWFya2llcnVuZyAnJXMnIG5pY2h0IGdlZnVuZGVuLiIKKworIzogYnVpbHRpbi90YWcuYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJHZWzDtnNjaHRlIE1hcmtpZXJ1bmcgJyVzJyAod2FyICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdmVyaWZ5IHRoZSB0YWcgJyVzJyIKK21zZ3N0ciAiS29ubnRlIE1hcmtpZXJ1bmcgJyVzJyBuaWNodCB2ZXJpZml6aWVyZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQ5Cittc2dpZCAiIgorIlxuIgorIiNcbiIKKyIjIFdyaXRlIGEgdGFnIG1lc3NhZ2VcbiIKKyIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZC5cbiIKKyIjXG4iCittc2dzdHIgIiIKKyJcbiIKKyIjXG4iCisiIyBHZWJlIGVpbmUgTWFya2llcnVuZ3NiZXNjaHJlaWJ1bmcgZWluXG4iCisiIyBaZWlsZW4sIGRpZSBtaXQgJyMnIGJlZ2lubmVuLCB3ZXJkZW4gaWdub3JpZXJ0LlxuIgorIiNcbiIKKworIzogYnVpbHRpbi90YWcuYzoyNTYKK21zZ2lkICIiCisiXG4iCisiI1xuIgorIiMgV3JpdGUgYSB0YWcgbWVzc2FnZVxuIgorIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKKyIjXG4iCittc2dzdHIgIiIKKyJcbiIKKyIjXG4iCisiIyBHZWJlIGVpbmUgTWFya2llcnVuZ3NiZXNjaHJlaWJ1bmcgZWluXG4iCisiIyBaZWlsZW4sIGRpZSBtaXQgJyMnIGJlZ2lubmVuLCB3ZXJkZW4gYmVoYWx0ZW47IGR1IGRhcmZzdCBkaWVzZVxuIgorIiMgc2VsYnN0IGVudGZlcm5lbiB3ZW5uIGR1IG3DtmNodGVzdC5cbiIKKyIjXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAia29ubnRlIE1hcmtpZXJ1bmcgbmljaHQgc2lnbmllcmVuIgorCisjOiBidWlsdGluL3RhZy5jOjMwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAia29ubnRlIE1hcmtpZXJ1bmdzZGF0ZWkgbmljaHQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL3RhZy5jOjMyNQorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgInVuZ8O8bHRpZ2VyIE9iamVrdC1UeXAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzM4Cittc2dpZCAidGFnIGhlYWRlciB0b28gYmlnLiIKK21zZ3N0ciAiTWFya2llcnVuZ3Nrb3BmIHp1IGdyb8OfLiIKKworIzogYnVpbHRpbi90YWcuYzozNzAKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgImtlaW5lIE1hcmtpZXJ1bmdzYmVzY2hyZWlidW5nPyIKKworIzogYnVpbHRpbi90YWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiRGllIE1hcmtpZXJ1bmdzYmVzY2hyZWlidW5nIHd1cmRlIGdlbGFzc2VuIGluICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1Cittc2dpZCAic3dpdGNoICdwb2ludHMtYXQnIHJlcXVpcmVzIGFuIG9iamVjdCIKK21zZ3N0ciAiT3B0aW9uICdwb2ludHMtYXQnIGVyZm9yZGVydCBlaW4gT2JqZWt0IgorCisjOiBidWlsdGluL3RhZy5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAiZmVobGVyaGFmdGVyIE9iamVrdC1OYW1lICclcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIHVuZCAtbiBzaW5kIGlua29tcGF0aWJlbCIKKworIzogYnVpbHRpbi90YWcuYzo1MjMKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICItbiBPcHRpb24gaXN0IG51ciBlcmxhdWJ0IG1pdCAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTI1Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICItLWNvbnRhaW5zIE9wdGlvbiBpc3QgbnVyIGVybGF1YnQgbWl0IC1sLiIKKworIzogYnVpbHRpbi90YWcuYzo1MjcKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICItLXBvaW50cy1hdCBPcHRpb24gaXN0IG51ciBlcmxhdWJ0IG1pdCAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTM1Cittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJudXIgZWluZSAtRiBvZGVyIC1tIE9wdGlvbiBpc3QgZXJsYXVidC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTU1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICJ6dSB2aWVsZSBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBNYXJraWVydW5nc25hbWUuIgorCisjOiBidWlsdGluL3RhZy5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTWFya2llcnVuZyAnJXMnIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGxvY2sgdGhlIHJlZiIKK21zZ3N0ciAiJXM6IGthbm4gUmVmZXJlbnogbmljaHQgc3BlcnJlbiIKKworIzogYnVpbHRpbi90YWcuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCB1cGRhdGUgdGhlIHJlZiIKK21zZ3N0ciAiJXM6IGthbm4gUmVmZXJlbnogbmljaHQgYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi90YWcuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJBa3R1YWxpc2llcnRlIE1hcmtpZXJ1bmcgJyVzJyAod2FyICVzKVxuIgorCisjOiBnaXQuYzoxNgorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuIgorbXNnc3RyICIiCisiU2llaGUgJ2dpdCBoZWxwIDxLb21tYW5kbz4nIGbDvHIgd2VpdGVyZSBJbmZvcm1hdGlvbmVuIHp1IGVpbmVtIHNwZXppZmlzY2hlbiAiCisiS29tbWFuZG8iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxMzMgcGFyc2Utb3B0aW9ucy5oOjIzNQorbXNnaWQgIm4iCittc2dzdHIgIkFuemFobCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE0MQorbXNnaWQgInRpbWUiCittc2dzdHIgIlplaXQiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNDkKK21zZ2lkICJmaWxlIgorbXNnc3RyICJEYXRlaSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE1MQorbXNnaWQgIndoZW4iCittc2dzdHIgIndhbm4iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTYKK21zZ2lkICJuby1vcCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkiCittc2dzdHIgIktlaW4gRWZmZWt0IChSw7xja3fDpHJ0c2tvbXBhdGliaWxpdMOkdCkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMjgKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgImVyd2VpdGVydGUgQXVzZ2FiZW4iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzAKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICJ3ZW5pZ2VyIEF1c2dhYmVuIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjM2Cittc2dpZCAidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiCittc2dzdHIgImJlbnV0emUgPG4+IFppZmZlcm4genVyIEFuemVpZ2Ugdm9uIFNIQS0xcyIKKworIzogY29tbW9uLWNtZHMuaDo4Cittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICJzdGVsbHQgRGF0ZWlpbmhhbHRlIHp1ciBFaW50cmFndW5nIGJlcmVpdCIKKworIzogY29tbW9uLWNtZHMuaDo5Cittc2dpZCAiRmluZCBieSBiaW5hcnkgc2VhcmNoIHRoZSBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICIiCisiRmluZGV0IMO8YmVyIGVpbmUgQmluw6Ryc3VjaGUgZGllIMOEbmRlcnVuZ2VuLCBkaWUgZWluZW4gRmVobGVyIHZlcnVyc2FjaHQgaGFiZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MTAKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAiWmVpZ3QgYW4sIGVyc3RlbGx0IG9kZXIgZW50ZmVybnQgWndlaWdlIgorCisjOiBjb21tb24tY21kcy5oOjExCittc2dpZCAiQ2hlY2tvdXQgYSBicmFuY2ggb3IgcGF0aHMgdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiQ2hlY2t0IFp3ZWlnZSBvZGVyIFBmYWRlIGltIEFyYmVpdHN6d2VpZyBhdXMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTIKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIktsb250IGVpbiBQcm9qZWt0YXJjaGl2IGluIGVpbmVtIG5ldWVuIFZlcnplaWNobmlzIgorCisjOiBjb21tb24tY21kcy5oOjEzCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIlRyw6RndCDDhG5kZXJ1bmdlbiBpbiBkYXMgUHJvamVrdGFyY2hpdiBlaW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MTQKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICJaZWlndCDDhG5kZXJ1bmdlbiB6d2lzY2hlbiBWZXJzaW9uZW4sIFZlcnNpb24gdW5kIEFyYmVpdHN6d2VpZywgZXRjLiBhbiIKKworIzogY29tbW9uLWNtZHMuaDoxNQorbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkzDpGR0IE9iamVrdGUgdW5kIFJlZmVyZW56ZW4gdm9uIGVpbmVtIGFuZGVyZW4gUHJvamVrdGFyY2hpdiBoZXJ1bnRlciIKKworIzogY29tbW9uLWNtZHMuaDoxNgorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAiU3RlbGx0IFplaWxlbiBkYXIsIGRpZSBlaW5lbSBNdXN0ZXIgZW50c3ByZWNoZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MTcKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgZ2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiIgorIkVyc3RlbGx0IGVpbiBsZWVyZXMgR2l0LVByb2pla3RhcmNoaXYgb2RlciBpbml0aWFsaXNpZXJ0IGVpbiBiZXN0ZWhlbmRlcyBuZXUiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTgKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJaZWlndCBWZXJzaW9uc2hpc3RvcmllIGFuIgorCisjOiBjb21tb24tY21kcy5oOjE5Cittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIkbDvGhydCB6d2VpIG9kZXIgbWVociBFbnR3aWNrbHVuZ3N6d2VpZ2UgenVzYW1tZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjAKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIiIKKyJWZXJzY2hpZWJ0IG9kZXIgYmVuZW5udCBlaW5lIERhdGVpLCBlaW4gVmVyemVpY2huaXMsIG9kZXIgZWluZSBzeW1ib2xpc2NoZSAiCisiVmVya27DvHBmdW5nIHVtIgorCisjOiBjb21tb24tY21kcy5oOjIxCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgbWVyZ2Ugd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIiIKKyJGb3JkZXJ0IE9iamVrdGUgdm9uIGVpbmVtIGV4dGVybmVuIFByb2pla3RhcmNoaXYgYW4gdW5kIGbDvGhydCBzaWUgbWl0IGVpbmVtICIKKyJhbmRlcmVuIFByb2pla3RhcmNoaXYgb2RlciBlaW5lbSBsb2thbGVuIFp3ZWlnIHp1c2FtbWVuIgorCisjOiBjb21tb24tY21kcy5oOjIyCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJBa3R1YWxpc2llcnQgZXh0ZXJuZSBSZWZlcmVuemVuIG1pdHNhbXQgZGVuIHZlcmJ1bmRlbmVuIE9iamVrdGVuIgorCisjOiBjb21tb24tY21kcy5oOjIzCittc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKK21zZ3N0ciAiQmF1dCBsb2thbGUgVmVyc2lvbmVuIGF1ZiBlaW5lbSBha3R1ZWxsZXJlbSBleHRlcm5lbiBad2VpZyBuZXUgYXVmIgorCisjOiBjb21tb24tY21kcy5oOjI0Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIiIKKyJTZXR6dCBkaWUgYWt0dWVsbGUgWndlaWdzcGl0emUgKEhFQUQpIHp1IGVpbmVtIHNwZXppZml6aWVydGVuIFp1c3RhbmQgenVyw7xjayIKKworIzogY29tbW9uLWNtZHMuaDoyNQorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJMw7ZzY2h0IERhdGVpZW4gaW0gQXJiZWl0c3p3ZWlnIHVuZCB2b24gZGVyIEJlcmVpdHN0ZWxsdW5nIgorCisjOiBjb21tb24tY21kcy5oOjI2Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIlplaWd0IHZlcnNjaGllZGVuZSBBcnRlbiB2b24gT2JqZWt0ZW4gYW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjcKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICJaZWlndCBkZW4gWnVzdGFuZCBkZXMgQXJiZWl0c3p3ZWlnZXMgYW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjgKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiIgorIkVyemV1Z3QsIGxpc3RldCBhdWYsIGzDtnNjaHQgb2RlciB2ZXJpZml6aWVydCBlaW4gbWl0IEdQRyBzaWduaWVydGVzICIKKyJNYXJraWVydW5nc29iamVrdCIKKworIzogZ2l0LWFtLnNoOjUwCittc2dpZCAiWW91IG5lZWQgdG8gc2V0IHlvdXIgY29tbWl0dGVyIGluZm8gZmlyc3QiCittc2dzdHIgIkR1IG11c3N0IHp1ZXJzdCBkaWUgSW5mb3JtYXRpb25lbiBkZXMgRWludHJhZ2VuZGVuIHNldHplbi4iCisKKyM6IGdpdC1hbS5zaDo5NQorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiRHUgc2NoZWluc3Qgc2VpdCBkZW0gbGV0enRlbiBnZXNjaGVpdGVydGVuICdhbScgZGllIFp3ZWlnc3BpdHplIChIRUFEKVxuIgorImdlw6RuZGVydCB6dSBoYWJlbi5cbiIKKyJLZWluZSBadXLDvGNrc2V0enVuZyB6dSBPUklHX0hFQUQuIgorCisjOiBnaXQtYW0uc2g6MTA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiRjbWRsaW5lIC0tcmVzb2x2ZWRcIi5cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJXZW5uIGR1IGRhcyBQcm9ibGVtIGdlbMO2c3QgaGFzdCwgZsO8aHJlIFwiJGNtZGxpbmUgLS1yZXNvbHZlZFwiIGF1cy5cbiIKKyJGYWxscyBkdSBkaWVzZW4gUGF0Y2ggYXVzbGFzc2VuIG3DtmNodGVzdCwgZsO8aHJlIHN0YXR0ZGVzc2VuIFwiJGNtZGxpbmUgLS1za2lwIgorIlwiIGF1cy5cbiIKKyJVbSBkZW4gdXJzcHLDvG5nbGljaGVuIFp3ZWlnIHdpZWRlcmhlcnp1c3RlbGxlbiB1bmQgZGllIEFud2VuZHVuZyBkZXIgIgorIlBhdGNoZXNcbiIKKyJhYnp1YnJlY2hlbiwgZsO8aHJlIFwiJGNtZGxpbmUgLS1hYm9ydFwiIGF1cy4iCisKKyM6IGdpdC1hbS5zaDoxMjEKK21zZ2lkICJDYW5ub3QgZmFsbCBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4iCittc2dzdHIgIkthbm4gbmljaHQgenUgMy1XZWdlLVp1c2FtbWVuZsO8aHJ1bmcgenVyw7xja2ZhbGxlbi4iCisKKyM6IGdpdC1hbS5zaDoxMzcKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiRGVtIFByb2pla3RhcmNoaXYgZmVobGVuIG5vdHdlbmRpZ2UgQmxvYnMgdW0gYXVmIGVpbmUgMy1XZWdlLVp1c2FtbWVuZsO8aHJ1bmcgIgorInp1csO8Y2t6dWZhbGxlbi4iCisKKyM6IGdpdC1hbS5zaDoxMzkKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICIiCisiVmVyd2VuZGUgSW5mb3JtYXRpb25lbiBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIHVtIGVpbmVuIEJhc2lzYmF1bSAiCisibmFjaHp1c3RlbGxlbiIKKworIzogZ2l0LWFtLnNoOjE1NAorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKyJIYXN0IGR1IGRlbiBQYXRjaCBwZXIgSGFuZCBlZGl0aWVydD9cbiIKKyJFciBrYW5uIG5pY2h0IGF1ZiBkaWUgQmxvYnMgaW4gc2VpbmVyICdpbmRleCcgWmVpbGUgYW5nZXdlbmRldCB3ZXJkZW4uIgorCisjOiBnaXQtYW0uc2g6MTYzCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICJGYWxsZSB6dXLDvGNrIHp1bSBQYXRjaGVuIGRlciBCYXNpcyB1bmQgZGVyIDMtV2VnZS1adXNhbW1lbmbDvGhydW5nLi4uIgorCisjOiBnaXQtYW0uc2g6MTc5Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZyBkZXIgw4RuZGVydW5nZW4gZmVobGdlc2NobGFnZW4iCisKKyM6IGdpdC1hbS5zaDoyNzQKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiRXMga2FubiBudXIgZWluZSBTdEdJVCBQYXRjaC1TZXJpZSBhdWYgZWlubWFsIGFuZ2V3ZW5kZXQgd2VyZGVuLiIKKworIzogZ2l0LWFtLnNoOjM2MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZm9ybWF0ICRwYXRjaF9mb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIlBhdGNoLUZvcm1hdCAkcGF0Y2hfZm9ybWF0IHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LiIKKworIzogZ2l0LWFtLnNoOjM2MworbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiUGF0Y2gtRm9ybWF0ZXJrZW5udW5nIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogZ2l0LWFtLnNoOjM4OQorbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorIkRpZSAtYi8tLWJpbmFyeSBPcHRpb24gaGF0IHNlaXQgTGFuZ2VtIGtlaW5lbiBFZmZla3QgdW5kIHdpcmRcbiIKKyJlbnRmZXJudC4gQml0dGUgbmljaHQgbWVociB2ZXJ3ZW5kZW4uIgorCisjOiBnaXQtYW0uc2g6NDc3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICRkb3Rlc3Qgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorIlZvcmhlcmlnZXMgVmVyemVpY2huaXMgZGVzIE5ldWF1ZmJhdXMgJGRvdGVzdCBleGlzdGllcnQgbm9jaCwgYWJlciBtYm94ICIKKyJnZWdlYmVuLiIKKworIzogZ2l0LWFtLnNoOjQ4MgorbXNnaWQgIlBsZWFzZSBtYWtlIHVwIHlvdXIgbWluZC4gLS1za2lwIG9yIC0tYWJvcnQ/IgorbXNnc3RyICJCaXR0ZSB3ZXJkZSBkaXIga2xhci4gLS1za2lwIG9kZXIgLS1hYm9ydD8iCisKKyM6IGdpdC1hbS5zaDo1MDkKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICJFcyBpc3Qga2VpbmUgQXVmbMO2c3VuZyBpbSBHYW5nZSwgZXMgd2lyZCBuaWNodCBmb3J0Z2VzZXR6dC4iCisKKyM6IGdpdC1hbS5zaDo1NzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICRmaWxlcykiCittc2dzdHIgIiIKKyJVbnNhdWJlcmUgQmVyZWl0c3RlbGx1bmc6IGthbm4gUGF0Y2hlcyBuaWNodCBhbndlbmRlbiAodW5zYXViZXI6ICRmaWxlcykiCisKKyM6IGdpdC1hbS5zaDo2NzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRjaCBpcyBlbXB0eS4gIFdhcyBpdCBzcGxpdCB3cm9uZz9cbiIKKyJJZiB5b3Ugd291bGQgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgaW5zdGVhZCBydW4gXCIkY21kbGluZSAtLXNraXBcIi5cbiIKKyJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcgcnVuIFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorIlBhdGNoIGlzdCBsZWVyLiBXdXJkZSBlciBmYWxzY2ggYXVmZ2V0ZWlsdD9cbiIKKyJXZW5uIGR1IGRpZXNlbiBQYXRjaCBhdXNsYXNzZW4gbcO2Y2h0ZXN0LCBmw7xocmUgc3RhdHRkZXNzZW4gXCIkY21kbGluZSAtLXNraXAiCisiXCIgYXVzLlxuIgorIlVtIGRlbiB1cnNwcsO8bmdsaWNoZW4gWndlaWcgd2llZGVyaGVyenVzdGVsbGVuIHVuZCBkaWUgQW53ZW5kdW5nIGRlciAiCisiUGF0Y2hlc1xuIgorImFienVicmVjaGVuLCBmw7xocmUgXCIkY21kbGluZSAtLWFib3J0XCIgYXVzLiIKKworIzogZ2l0LWFtLnNoOjcwNgorbXNnaWQgIlBhdGNoIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBlLW1haWwgYWRkcmVzcy4iCittc2dzdHIgIlBhdGNoIGVudGjDpGx0IGtlaW5lIGfDvGx0aWdlIGVNYWlsLUFkcmVzc2UuIgorCisjOiBnaXQtYW0uc2g6NzUzCittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICIiCisiS2FubiBuaWNodCBpbnRlcmFrdGl2IHNlaW4sIG9obmUgZGFzcyBkaWUgU3RhbmRhcmQtRWluZ2FiZSBtaXQgZWluZW0gIgorIlRlcm1pbmFsIHZlcmJ1bmRlbiBpc3QuIgorCisjOiBnaXQtYW0uc2g6NzU3Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJCZXNjaHJlaWJ1bmcgZGVyIEVpbnRyYWd1bmcgaXN0OiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYW0uc2g6NzY0Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorbXNnc3RyICJBbndlbmRlbj8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbCAiCisKKyM6IGdpdC1hbS5zaDo4MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAkRklSU1RMSU5FIgorbXNnc3RyICJXZW5kZSBhbjogJEZJUlNUTElORSIKKworIzogZ2l0LWFtLnNoOjgyMQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorIktlaW5lIMOEbmRlcnVuZ2VuIC0gaGFzdCBkdSB2ZXJnZXNzZW4gJ2dpdCBhZGQnIHp1IGJlbnV0emVuP1xuIgorIldlbm4ga2VpbmUgw4RuZGVydW5nZW4gbWVociB6dW0gQmVyZWl0c3RlbGxlbiB2b3JoYW5kZW4gc2luZCwga8O2bm50ZW5cbiIKKyJkaWVzZSBiZXJlaXRzIGFuZGVyd2VpdGlnIGVpbmdlZsO8Z3Qgd29yZGVuIHNlaW47IGR1IGvDtm5udGVzdCBkaWVzZW4gUGF0Y2hcbiIKKyJhdXNsYXNzZW4uIgorCisjOiBnaXQtYW0uc2g6ODI5Cittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXhcbiIKKyJkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPyIKK21zZ3N0ciAiIgorIkR1IGhhc3QgaW1tZXIgbm9jaCBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBQZmFkZSBpbiBkZXIgQmVyZWl0c3RlbGx1bmcuXG4iCisiSGFzdCBkdSB2ZXJnZXNzZW4gJ2dpdCBhZGQnIHp1IGJlbnV0emVuPyIKKworIzogZ2l0LWFtLnNoOjg0NQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4gLS0gUGF0Y2hlcyBiZXJlaXRzIGFuZ2V3ZW5kZXQuIgorCisjOiBnaXQtYW0uc2g6ODU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FIgorbXNnc3RyICJBbndlbmR1bmcgZGVzIFBhdGNoZXMgZmVobGdlc2NobGFnZW4gYmVpICRtc2dudW0gJEZJUlNUTElORSIKKworIzogZ2l0LWFtLnNoOjg3NgorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgIndlbmRlIHp1IGxlZXJlciBIaXN0b3JpZSBhbiIKKworIzogZ2l0LWJpc2VjdC5zaDo0OAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICJEdSBtdXNzdCBtaXQgXCJnaXQgYmlzZWN0IHN0YXJ0XCIgYmVnaW5uZW4uIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIldpbGxzdCBkdSwgZGFzcyBpY2ggZXMgZsO8ciBkaWNoIG1hY2hlIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGUgT3B0aW9uOiAnJGFyZyciCisKKyM6IGdpdC1iaXNlY3Quc2g6OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyRhcmcnIHNjaGVpbnQga2VpbmUgZ8O8bHRpZ2UgVmVyc2lvbiB6dSBzZWluIgorCisjOiBnaXQtYmlzZWN0LnNoOjExNworbXNnaWQgIkJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBad2VpZ3NwaXR6ZSAoSEVBRCkgLSBad2VpZ3NwaXR6ZSAoSEVBRCkgd2lyZCBiZW7DtnRpZ3QiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlY2tpbmcgb3V0ICckc3RhcnRfaGVhZCcgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPHZhbGlkYnJhbmNoPicuIgorbXNnc3RyICIiCisiQXVzY2hlY2tlbiB2b24gJyRzdGFydF9oZWFkJyBmZWhsZ2VzY2hsYWdlbi4gVmVyc3VjaGUgJ2dpdCBiaXNlY3QgcmVzZXQgIgorIjxndWVsdGlnZXJ6d2VpZz4nLiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDAKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gc2Vla2VkIHRyZWUiCittc2dzdHIgIlwiYmlzZWN0XCIgYXVmIGdlc3VjaHRlbSBad2VpZyBuaWNodCBtw7ZnbGljaCIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDQKK21zZ2lkICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICJVbmfDvGx0aWdlIFp3ZWlnc3BpdHplIChIRUFEKSAtIG1lcmt3w7xyZGlnZSBzeW1ib2xpc2NoZSBSZWZlcmVueiIKKworIzogZ2l0LWJpc2VjdC5zaDoxODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICRzdGF0ZSIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgXCJiaXNlY3Rfd3JpdGVcIiBBcmd1bWVudDogJHN0YXRlIgorCisjOiBnaXQtYmlzZWN0LnNoOjIxOAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZlcmVuei1FaW5nYWJlOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIlBsZWFzZSBjYWxsICdiaXNlY3Rfc3RhdGUnIHdpdGggYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiQml0dGUgcnVmZSAnYmlzZWN0X3N0YXRlJyBtaXQgbWluZGVzdGVucyBlaW5lbSBBcmd1bWVudCBhdWYuIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZlcmVuei1FaW5nYWJlOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjI1MAorbXNnaWQgIidnaXQgYmlzZWN0IGJhZCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICInZ2l0IGJpc2VjdCBiYWQnIGthbm4gbnVyIGVpbiBBcmd1bWVudCBlbnRnZWdlbm5laG1lbi4iCisKKyMuIGhhdmUgYmFkIGJ1dCBub3QgZ29vZC4gIHdlIGNvdWxkIGJpc2VjdCBhbHRob3VnaAorIy4gdGhpcyBpcyBsZXNzIG9wdGltdW0uCisjOiBnaXQtYmlzZWN0LnNoOjI3MworbXNnaWQgIldhcm5pbmc6IGJpc2VjdGluZyBvbmx5IHdpdGggYSBiYWQgY29tbWl0LiIKK21zZ3N0ciAiV2FybnVuZzogaGFsYmllcmUgbnVyIG1pdCBlaW5lciBmZWhsZXJoYWZ0ZW4gVmVyc2lvbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICJCaXN0IGR1IHNpY2hlciBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4OQorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSBnb29kIGFuZCBvbmUgYmFkIHJldmlzaW9ucy5cbiIKKyIoWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0IGJhZFwiIGFuZCBcImdpdCBiaXNlY3QgZ29vZFwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyJEdSBtdXNzdCBtaW5kZXN0ZW5zIGVpbmUga29ycmVrdGUgdW5kIGVpbmUgZmVobGVyaGFmdGUgVmVyc2lvbiBhbmdlYmVuLlxuIgorIihEdSBrYW5uc3QgZGFmw7xyIFwiZ2l0IGJpc2VjdCBiYWRcIiB1bmQgXCJnaXQgYmlzZWN0IGdvb2RcIiBiZW51dHplbi4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lIGdvb2QgYW5kIG9uZSBiYWQgcmV2aXNpb25zLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgYmFkXCIgYW5kIFwiZ2l0IGJpc2VjdCBnb29kXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIkR1IG11c3N0IG1pdCBcImdpdCBiaXNlY3Qgc3RhcnRcIiBiZWdpbm5lbi5cbiIKKyJEYW5hY2ggbXVzc3QgZHUgbWluZGVzdGVucyBlaW5lIGtvcnJla3RlIHVuZCBlaW5lIGZlaGxlcmhhZnRlIFZlcnNpb24gIgorImFuZ2ViZW4uXG4iCisiKER1IGthbm5zdCBkYWbDvHIgXCJnaXQgYmlzZWN0IGJhZFwiIHVuZCBcImdpdCBiaXNlY3QgZ29vZFwiIGJlbnV0emVuLikiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzQ3IGdpdC1iaXNlY3Quc2g6NDc0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJXaXIgc2luZCBuaWNodCBiZWltIEhhbGJpZXJlbi4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyRpbnZhbGlkJyBpc3Qga2VpbmUgZ8O8bHRpZ2UgVmVyc2lvbiIKKworIzogZ2l0LWJpc2VjdC5zaDozNjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyRicmFuY2gnLlxuIgorIlRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiS29ubnRlIGRpZSB1cnNwcsO8bmdsaWNoZSBad2VpZ3NwaXR6ZSAoSEVBRCkgJyRicmFuY2gnIG5pY2h0IGF1c2NoZWNrZW4uXG4iCisiVmVyc3VjaGUgJ2dpdCBiaXNlY3QgcmVzZXQgPFZlcnNpb24+Jy4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkwCittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAiS2VpbmUgTG9nLURhdGVpIGdlZ2ViZW4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICJrYW5uICRmaWxlIG5pY2h0IGbDvHIgZGFzIEFic3BpZWxlbiBsZXNlbiIKKworIzogZ2l0LWJpc2VjdC5zaDo0MDgKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIj8/IFdhcyByZWRlc3QgZHUgZGE/IgorCisjOiBnaXQtYmlzZWN0LnNoOjQyMAorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAiZsO8aHJlICRjb21tYW5kIGF1cyIKKworIzogZ2l0LWJpc2VjdC5zaDo0MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorIkF1c2bDvGhydW5nIGRlciBIYWxiaWVydW5nIGZlaGxnZXNjaGxhZ2VuOlxuIgorIlLDvGNra2VocndlcnQgJHJlcyB2b24gJyRjb21tYW5kJyBpc3QgPCAwIG9kZXIgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1MworbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJBdXNmw7xocnVuZyBkZXIgSGFsYmllcnVuZyBrYW5uIG5pY2h0IG1laHIgZm9ydGdlc2V0enQgd2VyZGVuIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJBdXNmw7xocnVuZyBkZXIgSGFsYmllcnVuZyBmZWhsZ2VzY2hsYWdlbjpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgd3VyZGUgbWl0IEZlaGxlcndlcnQgJHJlcyBiZWVuZGV0IgorCisjOiBnaXQtYmlzZWN0LnNoOjQ2NgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiSGFsYmllcnVuZyBlcmZvbGdyZWljaCBhdXNnZWbDvGhydCIKKworIzogZ2l0LXB1bGwuc2g6MjEKK21zZ2lkICIiCisiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy5cbiIKKyJQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uLCBvciB1c2UgJ2dpdCBjb21taXQgLWEnLiIKK21zZ3N0ciAiIgorIlwicHVsbFwiIGlzdCBuaWNodCBtw7ZnbGljaCwgd2VpbCBkdSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaWVuIGhhc3QuXG4iCisiQml0dGUga29ycmlnaWVyZSBkaWVzIGltIEFyYmVpdHNiYXVtIHVuZCBiZW51dHplIGRhbm4gJ2dpdCBhZGQvcm0gPERhdGVpPidcbiIKKyJ1bSBkaWUgQXVmbMO2c3VuZyBlbnRzcHJlY2hlbmQgenUgbWFya2llcmVuLCBvZGVyIGJlbnV0emUgJ2dpdCBjb21taXQgLWEnLiIKKworIzogZ2l0LXB1bGwuc2g6MjUKK21zZ2lkICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIlwicHVsbFwiIGlzdCBuaWNodCBtw7ZnbGljaCwgd2VpbCBkdSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaWVuIGhhc3QuIgorCisjOiBnaXQtcHVsbC5zaDoxOTcKK21zZ2lkICJ1cGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKyJBa3R1YWxpc2llcmUgZWluZSB1bmdlYm9yZW5lbiBad2VpZyBtaXQgw4RuZGVydW5nZW4sIGRpZSB6dXIgQmVyZWl0c3RlbGx1bmcgIgorImhpbnp1Z2Vmw7xndCB3dXJkZW4iCisKKyMuIFRoZSBmZXRjaCBpbnZvbHZlZCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2guCisjLiBUaGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggZmlsZSBpcyBzdGlsbCBiYXNlZCBvbiB0aGUKKyMuICRvcmlnX2hlYWQgY29tbWl0LCBidXQgd2UgYXJlIG1lcmdpbmcgaW50byAkY3Vycl9oZWFkLgorIy4gRmlyc3QgdXBkYXRlIHRoZSB3b3JraW5nIHRyZWUgdG8gbWF0Y2ggJGN1cnJfaGVhZC4KKyM6IGdpdC1wdWxsLnNoOjIyOAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IGZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiV2FybmluZzogZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJXYXJuaW5nOiBjb21taXQgJG9yaWdfaGVhZC4iCittc2dzdHIgIiIKKyJXYXJudW5nOiBEaWUgQW5mb3JkZXJ1bmcgYWt0dWFsaXNpZXJ0ZSBkaWUgU3BpdHplIGRlcyBha3R1ZWxsZW4gWndlaWdlcy5cbiIKKyJXYXJudW5nOiBTcHVsZSBkZWluZW4gQXJiZWl0c3p3ZWlnIHZvbiBWZXJzaW9uICRvcmlnX2hlYWQgdm9yLiIKKworIzogZ2l0LXB1bGwuc2g6MjUzCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiS2FubiBuaWNodCBtZWhyZXJlIFp3ZWlnZSBpbiBlaW5lbiB1bmdlYm9yZW5lbiBad2VpZyB6dXNhbW1lbmbDvGhyZW4iCisKKyM6IGdpdC1wdWxsLnNoOjI1NworbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIKK21zZ3N0ciAia2FubiBuaWNodCBhdWYgbWVocmVyZSBad2VpZ2UgbmV1IGF1ZmJhdWVuIgorCisjOiBnaXQtcmViYXNlLnNoOjUyCittc2dpZCAiIgorIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBpbnN0ZWFkLlxuIgorIlRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHJlYmFzaW5nLCBydW4gXCJnaXQgcmViYXNlIC0tYWJvcnQiCisiXCIuIgorbXNnc3RyICIiCisiV2VubiBkdSBkYXMgUHJvYmxlbSBhdWZnZWzDtnN0IGhhc3QsIGbDvGhyZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIGF1cy5cbiIKKyJGYWxscyBkdSBkaWVzZW4gUGF0Y2ggYXVzbGFzc2VuIG3DtmNodGVzdCwgZsO8aHJlIHN0YXR0ZGVzc2VuIFwiZ2l0IHJlYmFzZSAtLSIKKyJza2lwXCIgYXVzLlxuIgorIlVtIGRlbiB1cnNwcsO8bmdsaWNoZW4gWndlaWcgd2llZGVyaGVyenVzdGVsbGVuIHVuZCBkZW4gTmV1YXVmYmF1ICIKKyJhYnp1YnJlY2hlbixcbiIKKyJmw7xocmUgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiBhdXMuIgorCisjOiBnaXQtcmViYXNlLnNoOjE1OQorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICJEZXIgXCJwcmUtcmViYXNlIGhvb2tcIiBoYXQgZGVuIE5ldWF1ZmJhdSB6dXLDvGNrZ2V3aWVzZW4uIgorCisjOiBnaXQtcmViYXNlLnNoOjE2NAorbXNnaWQgIkl0IGxvb2tzIGxpa2UgZ2l0LWFtIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiXCJnaXQtYW1cIiBzY2hlaW50IGltIEdhbmdlIHp1IHNlaW4uIEthbm4gbmljaHQgbmV1IGF1ZmJhdWVuLiIKKworIzogZ2l0LXJlYmFzZS5zaDoyOTUKK21zZ2lkICJUaGUgLS1leGVjIG9wdGlvbiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24iCittc2dzdHIgIkRpZSAtLWV4ZWMgT3B0aW9uIG11c3MgbWl0IGRlciAtLWludGVyYWN0aXZlIE9wdGlvbiBiZW51dHp0IHdlcmRlbiIKKworIzogZ2l0LXJlYmFzZS5zaDozMDAKK21zZ2lkICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorbXNnc3RyICJLZWluIE5ldWF1ZmJhdSBpbSBHYW5nZT8iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzEzCittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiS2FubiBad2VpZ3NwaXR6ZSAoSEVBRCkgbmljaHQgbGVzZW4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzE2Cittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisiRHUgbXVzc3QgYWxsZSBadXNhbW1lbmbDvGhydW5nc2tvbmZsaWt0ZSBlZGl0aWVyZW4gdW5kIGRpZXNlIGRhbm5cbiIKKyJtaXR0ZWxzIFwiZ2l0IGFkZFwiIGFscyBhdWZnZWzDtnN0IG1hcmtpZXJlbiIKKworIzogZ2l0LXJlYmFzZS5zaDozMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJGhlYWRfbmFtZSIKK21zZ3N0ciAiS29ubnRlIG5pY2h0IHp1ICRoZWFkX25hbWUgenVyw7xja2dlaGVuIgorCisjOiBnaXQtcmViYXNlLnNoOjM1MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICRzdGF0ZV9kaXJfYmFzZSBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS4iCittc2dzdHIgIiIKKyJFcyBzaWVodCBzbyBhdXMsIGFscyBvYiBlcyBkYXMgVmVyemVpY2huaXMgJHN0YXRlX2Rpcl9iYXNlIGJlcmVpdHMgZ2lidFxuIgorInVuZCBlcyBrw7ZubnRlIGVpbiBhbmRlcmVyIE5ldWF1ZmJhdSBpbSBHYW5nZSBzZWluLiBXZW5uIGRhcyBkZXIgRmFsbCBpc3QsXG4iCisicHJvYmllcmUgYml0dGVcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJXZW5uIGRhcyBuaWNodCBkZXIgRmFsbCBpc3QsIHByb2JpZXJlIGJpdHRlXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorInVuZCBmw7xocmUgZGllc2VzIEtvbW1hbmRvIG5vY2htYWwgYXVzLiBFcyB3aXJkIGFuZ2VoYWx0ZW4sIGZhbGxzIG5vY2hcbiIKKyJldHdhcyBTY2jDvHR6ZW5zd2VydGVzIHZvcmhhbmRlbiBpc3QuIgorCisjOiBnaXQtcmViYXNlLnNoOjM5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAkdXBzdHJlYW1fbmFtZSIKK21zZ3N0ciAidW5nw7xsdGlnZXIgw5xiZXJuYWhtZXp3ZWlnICR1cHN0cmVhbV9uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjQxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIiRvbnRvX25hbWU6IGVzIGdpYnQgbWVociBhbHMgZWluZSBadXNhbW1lbmbDvGhydW5nc2Jhc2lzIgorCisjOiBnaXQtcmViYXNlLnNoOjQyMiBnaXQtcmViYXNlLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJG9udG9fbmFtZTogZXMgZ2lidCBrZWluZSBadXNhbW1lbmbDvGhydW5nc2Jhc2lzIgorCisjOiBnaXQtcmViYXNlLnNoOjQzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICRvbnRvX25hbWUiCittc2dzdHIgIiRvbnRvX25hbWUgemVpZ3QgYXVmIGtlaW5lIGfDvGx0aWdlIFZlcnNpb24iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2g6ICRicmFuY2hfbmFtZSIKK21zZ3N0ciAiZmF0YWw6IFp3ZWlnICRicmFuY2hfbmFtZSBuaWNodCBnZWZ1bmRlbiIKKworIzogZ2l0LXJlYmFzZS5zaDo0NzQKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJCaXR0ZSB0cmFnZSBkaWUgw4RuZGVydW5nZW4gZWluIG9kZXIgYmVudXR6ZSBcInN0YXNoXCIuIgorCisjOiBnaXQtcmViYXNlLnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICJBa3R1ZWxsZXIgWndlaWcgJGJyYW5jaF9uYW1lIGlzdCBhdWYgZGVtIG5ldXN0ZW4gU3RhbmQuIgorCisjOiBnaXQtcmViYXNlLnNoOjQ5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICIiCisiQWt0dWVsbGVyIFp3ZWlnICRicmFuY2hfbmFtZSBpc3QgYXVmIGRlbSBuZXVzdGVuIFN0YW5kLCBOZXVhdWZiYXUgZXJ6d3VuZ2VuLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1MDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAkbWIgdG8gJG9udG86IgorbXNnc3RyICLDhG5kZXJ1bmdlbiB2b24gJG1iIHp1ICRvbnRvOiIKKworIy4gRGV0YWNoIEhFQUQgYW5kIHJlc2V0IHRoZSB0cmVlCisjOiBnaXQtcmViYXNlLnNoOjUxNQorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKK21zZ3N0ciAiIgorIlp1bsOkY2hzdCB3aXJkIGRpZSBad2VpZ3NwaXR6ZSB6dXLDvGNrZ2VzcHVsdCwgdW0gZGVpbmUgw4RuZGVydW5nZW5cbiIKKyJkYXJhdWYgbmV1IGFuenV3ZW5kZW4uLi4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCittc2dzdHIgIiRicmFuY2hfbmFtZSB6dSAkb250b19uYW1lIHZvcmdlc3B1bHQuIgorCisjOiBnaXQtc3Rhc2guc2g6NTEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciBtaXQgUGFyYW1ldGVybiBpc3QgbmljaHQgaW1wbGVtZW50aWVydCIKKworIzogZ2l0LXN0YXNoLnNoOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIkR1IGhhc3QgYmlzaGVyIG5vY2gga2VpbmUgaW5pdGlhbGUgVmVyc2lvbiIKKworIzogZ2l0LXN0YXNoLnNoOjg5Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIkthbm4gZGVuIGFrdHVlbGxlbiBadXN0YW5kIGRlciBCZXJlaXRzdGVsbHVuZyBuaWNodCBzcGVpY2hlcm4iCisKKyM6IGdpdC1zdGFzaC5zaDoxMjMgZ2l0LXN0YXNoLnNoOjEzNgorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICJLYW5uIGRlbiBha3R1ZWxsZW4gWnVzdGFuZCBkZXMgQXJiZWl0c2JhdW1lcyBuaWNodCBzcGVpY2hlcm4iCisKKyM6IGdpdC1zdGFzaC5zaDoxNDAKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICJLZWluZSDDhG5kZXJ1bmdlbiBhdXNnZXfDpGhsdCIKKworIzogZ2l0LXN0YXNoLnNoOjE0MworbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICJLYW5uIHRlbXBvcsOkcmUgQmVyZWl0c3RlbGx1bmcgbmljaHQgZW50ZmVybmVuIChrYW5uIG5pY2h0IHBhc3NpZXJlbikiCisKKyM6IGdpdC1zdGFzaC5zaDoxNTYKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiS2FubiBadXN0YW5kIGRlcyBBcmJlaXRzYmF1bWVzIG5pY2h0IGF1ZnplaWNobmVuIgorCisjLiBUUkFOU0xBVE9SUzogJG9wdGlvbiBpcyBhbiBpbnZhbGlkIG9wdGlvbiwgbGlrZQorIy4gYC0tYmxhaC1ibGFoJy4gVGhlIDcgc3BhY2VzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisjLiBzZWNvbmQgbGluZSBjb3JyZXNwb25kIHRvICJlcnJvcjogIi4gU28geW91IHNob3VsZCBsaW5lCisjLiB1cCB0aGUgc2Vjb25kIGxpbmUgd2l0aCBob3dldmVyIG1hbnkgY2hhcmFjdGVycyB0aGUKKyMuIHRyYW5zbGF0aW9uIG9mICJlcnJvcjogIiB0YWtlcyBpbiB5b3VyIGxhbmd1YWdlLiBFLmcuIGluCisjLiBFbmdsaXNoIHRoaXMgaXM6CisjLgorIy4gJCBnaXQgc3Rhc2ggc2F2ZSAtLWJsYWgtYmxhaCAyPiYxIHwgaGVhZCAtbiAyCisjLiBlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogLS1ibGFoLWJsYWgKKyMuIFRvIHByb3ZpZGUgYSBtZXNzYWdlLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJy0tYmxhaC1ibGFoJworIzogZ2l0LXN0YXNoLnNoOjIwMgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAkb3B0aW9uXG4iCisiICAgICAgIFRvIHByb3ZpZGUgYSBtZXNzYWdlLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorbXNnc3RyICIiCisiRmVobGVyOiB1bmJla2FubnRlIE9wdGlvbiBmw7xyICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgICAgVW0gZWluZSBCZXNjaHJlaWJ1bmcgYW56dWdlYmVuLCBiZW51dHplIFwiZ2l0IHN0YXNoIHNhdmUgLS0gIgorIickb3B0aW9uJ1wiIgorCisjOiBnaXQtc3Rhc2guc2g6MjIzCittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICJLZWluZSBsb2thbGVuIMOEbmRlcnVuZ2VuIHp1bSBTcGVpY2hlcm4iCisKKyM6IGdpdC1zdGFzaC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiS2FubiBcInN0YXNoXCIgbmljaHQgaW5pdGlhbGlzaWVyZW4iCisKKyM6IGdpdC1zdGFzaC5zaDoyMzUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIkthbm4gZGVuIGFrdHVlbGxlbiBTdGF0dXMgbmljaHQgc3BlaWNoZXJuIgorCisjOiBnaXQtc3Rhc2guc2g6MjUzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJLYW5uIMOEbmRlcnVuZ2VuIGFtIEFyYmVpdHNiYXVtIG5pY2h0IGVudGZlcm5lbiIKKworIzogZ2l0LXN0YXNoLnNoOjM1MgorbXNnaWQgIk5vIHN0YXNoIGZvdW5kLiIKK21zZ3N0ciAiS2VpbiBcInN0YXNoXCIgZ2VmdW5kZW4uIgorCisjOiBnaXQtc3Rhc2guc2g6MzU5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICJadSB2aWVsZSBSZXZpc2lvbmVuIGFuZ2VnZWJlbjogJFJFViIKKworIzogZ2l0LXN0YXNoLnNoOjM2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNlIGlzdCBrZWluZSBnw7xsdGlnZSBSZWZlcmVueiIKKworIzogZ2l0LXN0YXNoLnNoOjM5MworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyBpc3Qga2VpbmUgXCJzdGFzaFwiLWFydGlnZSBWZXJzaW9uIgorCisjOiBnaXQtc3Rhc2guc2g6NDA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyRhcmdzJyBpc3Qga2VpbmUgXCJzdGFzaFwiLVJlZmVyZW56IgorCisjOiBnaXQtc3Rhc2guc2g6NDEyCittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgInVuZsOkaGlnIGRpZSBCZXJlaXRzdGVsbHVuZyB6dSBha3R1YWxpc2llcmVuIgorCisjOiBnaXQtc3Rhc2guc2g6NDE2Cittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICIiCisiS2FubiBcInN0YXNoXCIgbmljaHQgYW53ZW5kZW4sIHNvbGFuZyBlaW5lIFp1c2FtbWVuZsO8aHJ1bmcgaW0gR2FuZ2UgaXN0IgorCisjOiBnaXQtc3Rhc2guc2g6NDI0Cittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiS29uZmxpa3RlIGluIGRlciBCZXJlaXRzdGVsbHVuZy4gVmVyc3VjaGUgZXMgb2huZSAtLWluZGV4LiIKKworIzogZ2l0LXN0YXNoLnNoOjQyNgorbXNnaWQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgIktvbm50ZSBCZXJlaXRzdGVsbHVuZ3NiYXVtIG5pY2h0IHNwZWljaGVybiIKKworIzogZ2l0LXN0YXNoLnNoOjQ2MAorbXNnaWQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgorbXNnc3RyICJLYW5uIGdlw6RuZGVydGUgRGF0ZWllbiBuaWNodCBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKKworIzogZ2l0LXN0YXNoLnNoOjQ3NAorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiQmVyZWl0c3RlbGx1bmcgd3VyZGUgbmljaHQgYXVzZ2VsYWdlcnQuIgorCisjOiBnaXQtc3Rhc2guc2g6NDkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICJHZWzDtnNjaHQgJHtSRVZ9ICgkcykiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTogS29ubnRlIFwic3Rhc2hcIi1FaW50cmFnIG5pY2h0IGzDtnNjaGVuIgorCisjOiBnaXQtc3Rhc2guc2g6NDk5Cittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJLZWluIFp3ZWlnbmFtZSBzcGV6aWZpemllcnQiCisKKyM6IGdpdC1zdGFzaC5zaDo1NzAKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihadXIgV2llZGVyaGVyc3RlbGx1bmcgZ2ViZSBcImdpdCBzdGFzaCBhcHBseVwiIGVpbikiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyRyZW1vdGV1cmwnIgorbXNnc3RyICJLYW5uIGVpbmUgS29tcG9uZW50ZSB2b24gVVJMICckcmVtb3RldXJsJyBuaWNodCBleHRyYWhpZXJlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKyJLZWluZSBVbnRlcnByb2pla3QtWnVvcmRudW5nIGluIC5naXRtb2R1bGVzIGbDvHIgUGZhZCAnJHNtX3BhdGgnIGdlZnVuZGVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBmYWlsZWQiCittc2dzdHIgIktsb25lbiB2b24gJyR1cmwnIGluIFVudGVycHJvamVrdC1QZmFkICckc21fcGF0aCcgZmVobGdlc2NobGFnZW4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJHaXRkaXIgJyRhJyBpcyBwYXJ0IG9mIHRoZSBzdWJtb2R1bGUgcGF0aCAnJGInIG9yIHZpY2UgdmVyc2EiCittc2dzdHIgIiIKKyJHaXQtVmVyemVpY2huaXMgJyRhJyBpc3QgVGVpbCBkZXMgVW50ZXJwcm9qZWt0LVBmYWRlcyAnJGInLCBvZGVyIHVtZ2VrZWhydCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgInJlcG8gVVJMOiAnJHJlcG8nIG11c3MgYWJzb2x1dCBzZWluIG9kZXIgbWl0IC4vfC4uLyBiZWdpbm5lbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICInJHNtX3BhdGgnIGV4aXN0aWVydCBiZXJlaXRzIGluIGRlciBCZXJlaXRzdGVsbHVuZyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisiRGVyIGZvbGdlbmRlIFBmYWQgd2lyZCBkdXJjaCBlaW5lIGRlaW5lciBcIi5naXRpZ25vcmVcIiBEYXRlaWVuIGlnbm9yaWVydDpcbiIKKyIkc21fcGF0aFxuIgorIkJlbnV0emUgLWYgd2VubiBkdSBkaWVzZW4gd2lya2xpY2ggaGluenVmw7xnZW4gbcO2Y2h0ZXN0LiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisiRsO8Z2UgZXhpc3RpZXJlbmRlcyBQcm9qZWt0YXJjaGl2IGluICckc21fcGF0aCcgZGVyIEJlcmVpdHN0ZWxsdW5nIGhpbnp1LiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICInJHNtX3BhdGgnIGV4aXN0aWVydCBiZXJlaXRzIHVuZCBpc3Qga2VpbiBnw7xsdGlnZXMgR2l0LVByb2pla3RhcmNoaXYiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzYwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIlVuZsOkaGlnIFVudGVycHJvamVrdCAnJHNtX3BhdGgnIGF1c3p1Y2hlY2tlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkhpbnp1ZsO8Z2VuIHZvbiBVbnRlcnByb2pla3QgJyRzbV9wYXRoJyBmZWhsZ2VzY2hsYWdlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiUmVnaXN0aWVydW5nIHZvbiBVbnRlcnByb2pla3QgJyRzbV9wYXRoJyBmZWhsZ2VzY2hsYWdlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICckcHJlZml4JHNtX3BhdGgnIgorbXNnc3RyICJCZXRyZXRlICckcHJlZml4JHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQyNworIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBpbmcgYXQgJyRzbV9wYXRoJzsgc2NyaXB0IHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cy4iCittc2dzdHIgIlN0b3BwZSBiZWkgJyRzbV9wYXRoJzsgU2tyaXB0IGdhYiBuaWNodC1OdWxsIFN0YXR1cyB6dXLDvGNrLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiS2VpbmUgVVJMIGbDvHIgVW50ZXJwcm9qZWt0LVBmYWQgJyRzbV9wYXRoJyBpbiAuZ2l0bW9kdWxlcyBnZWZ1bmRlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0ODAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIlJlZ2lzdHJpZXJ1bmcgZGVyIFVSTCBmw7xyIFVudGVycHJvamVrdC1QZmFkICckc21fcGF0aCcgZmVobGdlc2NobGFnZW4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJVbnRlcnByb2pla3QgJyRuYW1lJyAoJHVybCkgaXN0IGbDvHIgUGZhZCAnJHNtX3BhdGgnIHJlZ2lzdHJpZXJ0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisiUmVnaXN0cmllcnVuZyBkZXMgQWt0dWFsaXNpZXJ1bmdzbW9kdXMgZsO8ciBVbnRlcnByb2pla3QtUGZhZCAnJHNtX3BhdGgnICIKKyJmZWhsZ2VzY2hsYWdlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIG5vdCBpbml0aWFsaXplZFxuIgorIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICIiCisiVW50ZXJwcm9qZWt0LVBmYWQgJyRzbV9wYXRoJyBpc3QgbmljaHQgaW5pdGlhbGlzaWVydFxuIgorIlZpZWxsZWljaHQgbcO2Y2h0ZXN0IGR1ICd1cGRhdGUgLS1pbml0JyBiZW51dHplbj8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjAzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIktvbm50ZSBha3R1ZWxsZSBWZXJzaW9uIGluIFVudGVycHJvamVrdC1QZmFkICckc21fcGF0aCcgbmljaHQgZmluZGVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyMgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIktvbm50ZSBpbiBVbnRlcnByb2pla3QtUGZhZCAnJHNtX3BhdGgnIG5pY2h0IGFuZm9yZGVybiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJOZXVhdWZiYXUgdm9uICckc2hhMScgaW4gVW50ZXJwcm9qZWt0LVBmYWQgJyRzbV9wYXRoJyBuaWNodCBtw7ZnbGljaCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICJVbnRlcnByb2pla3QtUGZhZCAnJHNtX3BhdGgnOiBuZXUgYXVmZ2ViYXV0IGluICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisiWnVzYW1tZW5mw7xocnVuZyB2b24gJyRzaGExJyBpbiBVbnRlcnByb2pla3QtUGZhZCAnJHNtX3BhdGgnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIlVudGVycHJvamVrdC1QZmFkICckc21fcGF0aCc6IHp1c2FtbWVuZ2Vmw7xocnQgaW4gJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIktvbm50ZSAnJHNoYTEnIGluIFVudGVycHJvamVrdC1QZmFkICckc21fcGF0aCcgbmljaHQgYXVzY2hlY2tlbi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICJVbnRlcnByb2pla3QtUGZhZDogJyRzbV9wYXRoJzogJyRzaGExJyBhdXNnZWNoZWNrdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzEgZ2l0LXN1Ym1vZHVsZS5zaDo5OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiRmVobGVyIGJlaSBSZWt1cnNpb24gaW4gVW50ZXJwcm9qZWt0LVBmYWQgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3NzkKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICJEaWUgLS1jYWNoZWQgT3B0aW9uIGthbm4gbmljaHQgbWl0IGRlciAtLWZpbGVzIE9wdGlvbiBiZW51dHp0IHdlcmRlbiIKKworIy4gdW5leHBlY3RlZCB0eXBlCisjOiBnaXQtc3VibW9kdWxlLnNoOjgxOQorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJ1bmVyd2FydGV0ZXIgTW9kdXMgJG1vZF9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIFdhcm51bmc6ICRuYW1lIGJlaW5oYWx0ZXQgbmljaHQgVmVyc2lvbiAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIFdhcm51bmc6ICRuYW1lIGJlaW5oYWx0ZXQgbmljaHQgVmVyc2lvbiAkc2hhMV9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisiICBXYXJudW5nOiAkbmFtZSBiZWluaGFsdGV0IG5pY2h0IGRpZSBWZXJzaW9uZW4gJHNoYTFfc3JjIHVuZCAkc2hhMV9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODY4Cittc2dpZCAiYmxvYiIKK21zZ3N0ciAiQmxvYiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDYKK21zZ2lkICIjIFN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICIjIFVudGVycHJvamVrdGUgZ2XDpG5kZXJ0LCBhYmVyIG5pY2h0IGFrdHVhbGlzaWVydDoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTA4Cittc2dpZCAiIyBTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICIjIMOEbmRlcnVuZ2VuIGluIFVudGVycHJvamVrdCB6dW0gRWludHJhZ2VuOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMDU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICckbmFtZSciCittc2dzdHIgIlN5bmNocm9uaXNpZXJlIFVudGVycHJvamVrdC1VUkwgZsO8ciAnJG5hbWUnIgorCisjfiBtc2dpZCAiZGlmZiBzZXR1cCBmYWlsZWQiCisjfiBtc2dzdHIgImRpZmZfc2V0dXBfZG9uZSBmZWhsZ2VzY2hsYWdlbiIKKworI34gbXNnaWQgIm1lcmdlLXJlY3Vyc2l2ZTogZGlzayBmdWxsPyIKKyN+IG1zZ3N0ciAibWVyZ2UtcmVjdXJzaXZlOiBGZXN0cGxhdHRlIHZvbGw/IgorCisjfiBtc2dpZCAiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIKKyN+IG1zZ3N0ciAiZGlmZl9zZXR1cF9kb25lIGZlaGxnZXNjaGxhZ2VuIgorCisjfiBtc2dpZCAiLWQgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBEbyBub3QgdXNlLiIKKyN+IG1zZ3N0ciAiLWQgT3B0aW9uIHdpcmQgbmljaHQgbMOkbmdlciB1bnRlcnN0w7x0enQuIE5pY2h0IGJlbnV0emVuLiIKKworI34gbXNnaWQgIiVzOiBoYXMgYmVlbiBkZWxldGVkL3JlbmFtZWQiCisjfiBtc2dzdHIgIiVzIHd1cmRlIGdlbMO2c2NodC91bWJlbmFubnQiCisKKyN+IG1zZ2lkICInJXMnOiBub3QgYSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4iCisjfiBtc2dzdHIgIiclcycgaXN0IGtlaW4gRG9rdW1lbnRhdGlvbnN2ZXJ6ZWljaG5pcyIKKworI34gbXNnaWQgIi0tIgorI34gbXNnc3RyICItLSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBleHRyYWN0IGVtYWlsIGZyb20gY29tbWl0dGVyIGlkZW50aXR5LiIKKyN+IG1zZ3N0ciAiS29ubnRlIEUtTWFpbC1BZHJlc3NlIGRlcyBFaW5yZWljaGVycyBuaWNodCBleHRyYWhpZXJlbi4iCisKKyN+IG1zZ2lkICJjaGVycnktcGljayIKKyN+IG1zZ3N0ciAiY2hlcnJ5LXBpY2siCisKKyN+IG1zZ2lkICJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIgorI34gbXNnc3RyICJCaXR0ZSBnZWJlIGRpZSBWZXJzaW9uc2Jlc2NocmVpYnVuZyBmw7xyIGRlaW5lIMOEbmRlcnVuZ2VuIGVpbi4iCisKKyN+IG1zZ2lkICJUb28gbWFueSBvcHRpb25zIHNwZWNpZmllZCIKKyN+IG1zZ3N0ciAiWnUgdmllbGUgT3B0aW9uZW4gYW5nZWdlYmVuIgorCisjfiBtc2dpZCAiIgorI34gIlRvIHByZXZlbnQgeW91IGZyb20gbG9zaW5nIGhpc3RvcnksIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcyB3ZXJlICIKKyN+ICJyZWplY3RlZFxuIgorI34gIk1lcmdlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLiAnZ2l0IHB1bGwnKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi4gIFNlZSAiCisjfiAidGhlXG4iCisjfiAiJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgc2VjdGlvbiBvZiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlVtIGRpY2ggdm9yIFZlcmx1c3Qgdm9uIEhpc3RvcmllIHp1IGJld2FocmVuLCB3dXJkZW4gbmljaHQgdm9yenVzcHVsZW5kZSAiCisjfiAiQWt0dWFsaXNpZXJ1bmdlbiB6dXLDvGNrZ2V3aWVzZW4uXG4iCisjfiAiRsO8aHJlIGRpZSBleHRlcm5lbiDDhG5kZXJ1bmdlbiB6dXNhbW1lbiAoei5CLiAnZ2l0IHB1bGwnKSBiZXZvciBkdSBlcm5ldXQgIgorI34gInZlcnNlbmRlc3QuIFNpZWhlIGF1Y2ggZGllICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIFNla3Rpb24gdm9uIFxuIgorI34gIidnaXQgcHVzaCAtLWhlbHAnIGbDvHIgd2VpdGVyZSBEZXRhaWxzLlxuIgpkaWZmIC0tZ2l0IGEvcG8vZ2l0LnBvdCBiL3BvL2dpdC5wb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2MTE1OAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2dpdC5wb3QKQEAgLTAsMCArMSw4OTc2IEBACisjIFNPTUUgREVTQ1JJUFRJVkUgVElUTEUuCisjIENvcHlyaWdodCAoQykgWUVBUiBUSEUgUEFDS0FHRSdTIENPUFlSSUdIVCBIT0xERVIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIFBBQ0tBR0UgcGFja2FnZS4KKyMgRklSU1QgQVVUSE9SIDxFTUFJTEBBRERSRVNTPiwgWUVBUi4KKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBQQUNLQUdFIFZFUlNJT05cbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMC0xNiAwODozOCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSStaT05FXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGVUxMIE5BTUUgPEVNQUlMQEFERFJFU1M+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTEFOR1VBR0UgPExMQGxpLm9yZz5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNFVFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPUlOVEVHRVI7IHBsdXJhbD1FWFBSRVNTSU9OO1xuIgorCisjOiBhZHZpY2UuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiAlLipzXG4iCittc2dzdHIgIiIKKworIy4KKyMuICogTWVzc2FnZSB1c2VkIGJvdGggd2hlbiAnZ2l0IGNvbW1pdCcgZmFpbHMgYW5kIHdoZW4KKyMuICogb3RoZXIgY29tbWFuZHMgZG9pbmcgYSBtZXJnZSBkby4KKyMuCisjOiBhZHZpY2UuYzo3MAorbXNnaWQgIiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLFxuIgorImFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nIGFzXG4iCisiYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LFxuIgorIm9yIHVzZSAnZ2l0IGNvbW1pdCAtYScuIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzoxMAorbXNnaWQgImdpdCBhcmNoaXZlIFtvcHRpb25zXSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzoxMQorbXNnaWQgImdpdCBhcmNoaXZlIC0tbGlzdCIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6MTIKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFtvcHRpb25zXSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzoxMworbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjMyMgorbXNnaWQgImZtdCIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6MzIyCittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjMyMyBidWlsdGluL2xvZy5jOjEwNzkKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjMyNAorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjMyNSBidWlsdGluL2FyY2hpdmUuYzo5MSBidWlsdGluL2JsYW1lLmM6MjM4OQorIzogYnVpbHRpbi9ibGFtZS5jOjIzOTAgYnVpbHRpbi9jb25maWcuYzo1NiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjQyCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjQ0IGJ1aWx0aW4vZ3JlcC5jOjgwMSBidWlsdGluL2hhc2gtb2JqZWN0LmM6NzcKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0OTQgYnVpbHRpbi9scy1maWxlcy5jOjQ5NyBidWlsdGluL25vdGVzLmM6NTQwCisjOiBidWlsdGluL25vdGVzLmM6Njk3IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTA3IHBhcnNlLW9wdGlvbnMuaDoxNDkKK21zZ2lkICJmaWxlIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozMjYgYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjMyOAorbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjMyOQorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjMzMAorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjMzMQorbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6MzM5Cittc2dpZCAiY29tcHJlc3MgYmV0dGVyIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozNDIKK21zZ2lkICJsaXN0IHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdHMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjM0NCBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2Nsb25lLmM6ODUKK21zZ2lkICJyZXBvIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozNDUgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6MzQ2IGJ1aWx0aW4vYXJjaGl2ZS5jOjk1IGJ1aWx0aW4vbm90ZXMuYzo2MTkKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozNDcgYnVpbHRpbi9hcmNoaXZlLmM6OTYKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6ODkgYnVpbHRpbi9jb21taXQuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoxNDAKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoxNjQgc2VxdWVuY2VyLmM6NTYyIHNlcXVlbmNlci5jOjk5NCBidWlsdGluL2xvZy5jOjI5MAorIzogYnVpbHRpbi9sb2cuYzo3MjcgYnVpbHRpbi9sb2cuYzoxMzEzIGJ1aWx0aW4vbG9nLmM6MTUyOSBidWlsdGluL21lcmdlLmM6MzQ3CisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTgxCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgJWQgcmVmIgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zICVkIHJlZnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidW5kbGUuYzoxOTIKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVuZGxlLmM6Mjk0Cittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzozMDAgYnVpbHRpbi9sb2cuYzoxMjA5IGJ1aWx0aW4vc2hvcnRsb2cuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MzgwCittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6Mzk4Cittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzo0MTYKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjQ0MQorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6MzkKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW46ICVzIgorbXNnc3RyICIiCisKKyM6IGRhdGUuYzo5NQorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgIiIKKworIzogZGF0ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgZGF5cyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHdlZWtzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTU0IGRhdGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGlmZi5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJS4qcydcbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJS4qcydcbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzozNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjU5Cittc2dpZCAiY291bGQgbm90IHJ1biBncGcuIgorbXNnc3RyICIiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo3MQorbXNnaWQgImdwZyBkaWQgbm90IGFjY2VwdCB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBncGctaW50ZXJmYWNlLmM6ODIKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgIiIKKworIzogZ3JlcC5jOjE0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiIKKworIzogZ3JlcC5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogZ3JlcC5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjE5Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozMzIKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuXG4iCisiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gJTAuMWYgc2Vjb25kcyBhdXRvbWF0aWNhbGx5Li4uIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzcwCittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmZvX2NhY2hlIGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI2OAorbXNnaWQgImVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICIiCisKKyMuIHNvbWV0aGluZyBlbHNlIGV4aXN0cworIy4gLi4gYnV0IG5vdCBzb21lIG90aGVyIGVycm9yICh3aG8gcmVhbGx5IGNhcmVzIHdoYXQ/KQorIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njk3IG1lcmdlLXJlY3Vyc2l2ZS5jOjcxOAorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzczIGJ1aWx0aW4vY2xvbmUuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MjIKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NDIKK21zZ2lkICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSBpbiB0aGUgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDIxIG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDI3IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDgxCittc2dpZCAicmVuYW1lIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwODEKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNjQKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gJXMgYWRkZWQgaW4gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NjIgbWVyZ2UtcmVjdXJzaXZlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NjQKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU2NAorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NzQKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODEKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MzMgZ2l0LXN1Ym1vZHVsZS5zaDo4NjkKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NDkKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzU1Cittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzg3Cittc2dpZCAiRmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTgwNgorbXNnaWQgIkFscmVhZHkgdXAtdG8tZGF0ZSEiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnByb2Nlc3NlZCBwYXRoPz8/ICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4OTAKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTk0MAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDA5IGJ1aWx0aW4vbWVyZ2UuYzo2OTYKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo0OTQKK21zZ2lkICIuLi4iCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uCisjOiBwYXJzZS1vcHRpb25zLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiByZW1vdGUuYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiByZW1vdGUuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHNlcXVlbmNlci5jOjEyMyBidWlsdGluL21lcmdlLmM6ODY0IGJ1aWx0aW4vbWVyZ2UuYzo5NzcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDg3IGJ1aWx0aW4vbWVyZ2UuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTI1IGJ1aWx0aW4vbWVyZ2UuYzozMzMgYnVpbHRpbi9tZXJnZS5jOjg2NworIzogYnVpbHRpbi9tZXJnZS5jOjEwODkgYnVpbHRpbi9tZXJnZS5jOjExMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTQ2Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTQ5Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTYyIHNlcXVlbmNlci5jOjc3MCBzZXF1ZW5jZXIuYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxODAKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE4MgorbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSByZXZlcnQuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE4NQorbXNnaWQgIkNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2siCisjOiBzZXF1ZW5jZXIuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjYKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIGNvbW1pdFxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI4NworbXNnaWQgIlVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDAzCittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MDYKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFpbmxpbmUgd2FzIHNwZWNpZmllZCBidXQgY29tbWl0ICVzIGlzIG5vdCBhIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKyMuICJjaGVycnktcGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExCisjOiBzZXF1ZW5jZXIuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjU2NQorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjY2MworbXNnaWQgIk5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGtleTogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc1MQorbXNnaWQgImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzUyCittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc3MiBzZXF1ZW5jZXIuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc5MSBzZXF1ZW5jZXIuYzo5MjUKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzkzCittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3OTUKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MTcgYnVpbHRpbi9hcHBseS5jOjQwMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODIxCittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZm9ybWF0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMDEyCittc2dpZCAiQ2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEwMTMKK21zZ2lkICJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogc2hhMV9uYW1lLmM6MTA0NAorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIiIKKworIzogc2hhMV9uYW1lLmM6MTA0NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzaGExX25hbWUuYzoxMDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNoYTFfbmFtZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKworIzogd3JhcHBlci5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzo0MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCittc2dzdHIgIiIKKworIzogd3JhcHBlci5jOjQyNworbXNnaWQgIm5vIHN1Y2ggdXNlciIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDAKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTY3IHd0LXN0YXR1cy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTY5IHd0LXN0YXR1cy5jOjE5NgorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc1IHd0LXN0YXR1cy5jOjE3OQorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzcKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxODgKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjA2Cittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIxMAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIxMgorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIxMworbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyMTUKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI0NAorbXNnaWQgImJ1ZyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNDkKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI1MAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNTEKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI1MgorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI1MworbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI1NAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI1NQorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI4NQorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Mjg3Cittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI4OQorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlOiAgICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3BpZWQ6ICAgICAlcyAtPiAlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZDogICAgJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGlmaWVkOiAgICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWVkOiAgICAlcyAtPiAlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidHlwZWNoYW5nZTogJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd246ICAgICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bm1lcmdlZDogICAlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Nzg1Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc4OCB3dC1zdGF0dXMuYzo5MTIKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc5MQorbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Nzk0Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo4MDQKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODA3Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjgxMQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODEzCittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODE1Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjg3MyB3dC1zdGF0dXMuYzo4ODMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODc2Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODc4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjg4MAorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo4ODYKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODg4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODkxCittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODkzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjg5NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODk4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjkwOAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo5MTUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjkyNAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6OTI3Cittc2dpZCAiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjk3OAorbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6OTg1Cittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo5OTcKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMDExCittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEwMTMKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMDE3Cittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMDIzCittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEwNDMgd3Qtc3RhdHVzLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIGRpcmVjdG9yeSBjbGVhblxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNTgKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNjQKK21zZ2lkICJJbml0aWFsIGNvbW1pdCBvbiAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE3OQorbXNnaWQgImJlaGluZCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE4MiB3dC1zdGF0dXMuYzoxMTg1Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExODcKK21zZ2lkICIsIGJlaGluZCAiCittc2dzdHIgIiIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU4IGJ1aWx0aW4vY2xvbmUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTkKK21zZ2lkICJnaXQgYWRkIFtvcHRpb25zXSBbLS1dIDxmaWxlcGF0dGVybj4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NjcgYnVpbHRpbi9jb21taXQuYzoyMzAKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGggJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTkyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTUgYnVpbHRpbi9hZGQuYzo0NjAgYnVpbHRpbi9ybS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI3NgorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI5MAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk3Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEzCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE5IGJ1aWx0aW4vY2xlYW4uYzo1MiBidWlsdGluL2ZldGNoLmM6NzggYnVpbHRpbi9tdi5jOjYzCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjc2IGJ1aWx0aW4vcHVzaC5jOjM4OCBidWlsdGluL3JlbW90ZS5jOjEyNTMKKyM6IGJ1aWx0aW4vcm0uYzoxMzMKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIwIGJ1aWx0aW4vYXBwbHkuYzo0MzU0IGJ1aWx0aW4vY29tbWl0LmM6MTE1NAorIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6ODIgYnVpbHRpbi9mc2NrLmM6NjEzIGJ1aWx0aW4vbG9nLmM6MTQ3NworIzogYnVpbHRpbi9tdi5jOjYyIGJ1aWx0aW4vcmVhZC10cmVlLmM6MTEyCittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMyMgorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjMgYnVpbHRpbi9jaGVja291dC5jOjEwMjggYnVpbHRpbi9yZXNldC5jOjI0OAorbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI0Cittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI2Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjcKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjgKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMzAKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMxCittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozNTQKK21zZ2lkICJubyBmaWxlcyBhZGRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM2MAorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozOTIKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM5NAorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MjEgYnVpbHRpbi9jbGVhbi5jOjk1IGJ1aWx0aW4vY29tbWl0LmM6MjkwIGJ1aWx0aW4vbXYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjE2MgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MSBidWlsdGluL2FwcGx5LmM6NDQ1MCBidWlsdGluL212LmM6MjI5IGJ1aWx0aW4vcm0uYzoyNjAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjU3Cittc2dpZCAiZ2l0IGFwcGx5IFtvcHRpb25zXSBbPHBhdGNoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjU0Cittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2NTYKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiIgorCisjLiB0aGVyZSBoYXMgdG8gYmUgb25lIGh1bmsgKGZvcndhcmQgaHVuaykKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxODk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjIwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjE0OQorbXNnaWQgIm9vcHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTU2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzEyMyBidWlsdGluL2FwcGx5LmM6MzEzMiBidWlsdGluL2FwcGx5LmM6MzE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIG9mICVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE1NiBidWlsdGluL2FwcGx5LmM6MzM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzIzNyBidWlsdGluL2FwcGx5LmM6MzM5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNDEgYnVpbHRpbi9hcHBseS5jOjMzODQgYnVpbHRpbi9hcHBseS5jOjM0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjQ2IGJ1aWx0aW4vYXBwbHkuYzozNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM0OAorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzU1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2MjQgYnVpbHRpbi9jaGVja291dC5jOjIxNSBidWlsdGluL3Jlc2V0LmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1YnByb2plY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MDcgYnVpbHRpbi9hcHBseS5jOjM5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvc2luZyBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5ODQKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiIgorCisjLiBTYXkgdGhpcyBldmVuIHdpdGhvdXQgLS12ZXJib3NlCisjOiBidWlsdGluL2FwcGx5LmM6Mzk4NworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAyMQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQxNzEKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQxODIKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzAxIGJ1aWx0aW4vYXBwbHkuYzo0MzA0IGJ1aWx0aW4vY2xvbmUuYzo5MQorIzogYnVpbHRpbi9mZXRjaC5jOjYzCittc2dpZCAicGF0aCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwMgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDUKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA3Cittc2dpZCAibnVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA4Cittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMTEKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzEzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzE3Cittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMxOQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMjEKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzIzCittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzI1Cittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMjcKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMyOQorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMzEKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMzMyBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTk3IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjAKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMzNgorbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMzNworbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMzOAorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzQxIGJ1aWx0aW4vYXBwbHkuYzo0MzQ0Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM0NworbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzQ5Cittc2dpZCAiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNTEKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM1MworbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzU2Cittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNTkKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNjEKK21zZ2lkICJyb290IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzYyCittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM4NAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM5MgorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzOTUKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIHBhdGNoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NDMxIGJ1aWx0aW4vYXBwbHkuYzo0NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NTgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IEVPRiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY2Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjcxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3Cittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTkKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNQorbXNnaWQgImdpdCBibGFtZSBbb3B0aW9uc10gW3Jldi1vcHRzXSBbcmV2XSBbLS1dIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMwIGJ1aWx0aW4vc2hvcnRsb2cuYzoxNQorbXNnaWQgIltyZXYtb3B0c10gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzczCittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM3NAorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzNzUKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzNzYKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzc3Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzNzgKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM3OQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM4MAorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzODEKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzODIKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzgzCittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzg0Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzg1Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM4NgorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM4NworbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzg4Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzg5Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzkwCittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM5MSBidWlsdGluL2JsYW1lLmM6MjM5MgorbXNnaWQgInNjb3JlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzkxCittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM5MgorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzOTMKK21zZ2lkICJuLG0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzOTMKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzCittc2dpZCAiZ2l0IGJyYW5jaCBbb3B0aW9uc10gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0Cittc2dpZCAiZ2l0IGJyYW5jaCBbb3B0aW9uc10gWy1sXSBbLWZdIDxicmFuY2huYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNQorbXNnaWQgImdpdCBicmFuY2ggW29wdGlvbnNdIFstcl0gKC1kIHwgLUQpIDxicmFuY2huYW1lPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2Cittc2dpZCAiZ2l0IGJyYW5jaCBbb3B0aW9uc10gKC1tIHwgLU0pIFs8b2xkYnJhbmNoPl0gPG5ld2JyYW5jaD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4MQorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4NworbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBicmFuY2ggJyVzJyB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBvbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZSBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDAKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzM4CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYmVoaW5kICVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJbYmVoaW5kICVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJbYWhlYWQgJWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTM3Cittc2dpZCAiKG5vIGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDIKK21zZ2lkICJzb21lIHJlZnMgY291bGQgbm90IGJlIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTUKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQwCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NQorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjQKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjYKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyNworbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjgKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczMAorbXNnaWQgImNoYW5nZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzM0Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzM1Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczOCBidWlsdGluL2JyYW5jaC5jOjc0NCBidWlsdGluL2JyYW5jaC5jOjc2NQorIzogYnVpbHRpbi9icmFuY2guYzo3NzEgYnVpbHRpbi9jb21taXQuYzoxMzYyIGJ1aWx0aW4vY29tbWl0LmM6MTM2MworIzogYnVpbHRpbi9jb21taXQuYzoxMzY0IGJ1aWx0aW4vY29tbWl0LmM6MTM2NSBidWlsdGluL3RhZy5jOjQ3MAorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczOSBidWlsdGluL2JyYW5jaC5jOjc0NQorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTEKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUyCittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTQKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1NQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTYKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1NworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTgKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OQorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzYxCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjIKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiAod2hlbiBhbHJlYWR5IGV4aXN0cykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjUKK21zZ2lkICJwcmludCBvbmx5IG5vdCBtZXJnZWQgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NzEKK21zZ2lkICJwcmludCBvbmx5IG1lcmdlZCBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc3NQorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4OAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkzIGJ1aWx0aW4vY2xvbmUuYzo1NjEKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMworbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4OTEKK21zZ2lkICItYSBhbmQgLXIgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IG1ha2Ugc2Vuc2Ugd2l0aCBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tIgorInRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG4iCisiXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTYKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjAKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI0NworbXNnaWQgImdpdCBjYXQtZmlsZSAoLXR8LXN8LWV8LXB8PHR5cGU+fC0tdGV4dGNvbnYpIDxvYmplY3Q+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNDgKK21zZ2lkICJnaXQgY2F0LWZpbGUgKC0tYmF0Y2h8LS1iYXRjaC1jaGVjaykgPCA8bGlzdF9vZl9vYmplY3RzPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6MjY2Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNjcKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNjgKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNzAKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI3MQorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNzMKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6Mjc1Cittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNzgKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTEKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IGF0dHIuLi5dIFstLV0gcGF0aG5hbWUuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTIKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCBhdHRyLi4uXSA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxOQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMAorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3NQorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzCittc2dpZCAiaW5wdXQgcGF0aHMgYXJlIHRlcm1pbmF0ZWQgYnkgYSBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFtvcHRpb25zXSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODcKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTg4Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTAKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTIKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5NAorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDAKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwMgorbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAzIGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJzdHJpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwNAorbXNnaWQgIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwNworbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNQorbXNnaWQgImdpdCBjaGVja291dCBbb3B0aW9uc10gPGJyYW5jaD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFtvcHRpb25zXSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExOCBidWlsdGluL2NoZWNrb3V0LmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjM2IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzkgYnVpbHRpbi9jaGVja291dC5jOjI0MgorIzogYnVpbHRpbi9jaGVja291dC5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0OCBidWlsdGluL2NoZWNrb3V0LmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjY1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjYKK21zZ2lkICJjb3JydXB0IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI5NSBidWlsdGluL2NoZWNrb3V0LmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzMzIGJ1aWx0aW4vY2hlY2tvdXQuYzo1MzQgYnVpbHRpbi9jbG9uZS5jOjU4NgorIzogYnVpbHRpbi9tZXJnZS5jOjgxMQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ4Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2MDIKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIiCisKKyMuIFRoZSBzaW5ndWxhciB2ZXJzaW9uCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIG5ld19icmFuY2hfbmFtZSAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzAKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzQKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzYxIGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTAKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICIiCisKKyMuIGNhc2UgKDEpCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiIgorCisjLiBjYXNlICgxKTogd2FudCBhIHRyZWUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NjEKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTY0IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTcyIGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzUgYnVpbHRpbi9jaGVja291dC5jOjk4MAorIzogYnVpbHRpbi9jaGVja291dC5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA5IGJ1aWx0aW4vZ2MuYzoxNzcKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTAgYnVpbHRpbi9jaGVja291dC5jOjEwMTIgYnVpbHRpbi9jbG9uZS5jOjg5CisjOiBidWlsdGluL3JlbW90ZS5jOjE2OSBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMQorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEzCittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxNAorbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTUKK21zZ2lkICJkZXRhY2ggdGhlIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDE2Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTgKK21zZ2lkICJuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDE4Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDE5Cittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDIxCittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjMKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAyNAorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDI1IGJ1aWx0aW4vbWVyZ2UuYzoyMTUKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjYgYnVpbHRpbi9sb2cuYzoxMTExIHBhcnNlLW9wdGlvbnMuaDoyNDEKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAyNworbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMzAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCBuby1zdWNoLWJyYW5jaCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTQKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzEKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzgKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMTMKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuXG4iCisiRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyVzJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI5Cittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxOQorbXNnaWQgImdpdCBjbGVhbiBbLWRdIFstZl0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUxCittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUzCittc2dpZCAiZm9yY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjU1Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1NiBidWlsdGluL2Rlc2NyaWJlLmM6NDEzIGJ1aWx0aW4vZ3JlcC5jOjgwMworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5MSBidWlsdGluL25hbWUtcmV2LmM6MjMxIGJ1aWx0aW4vc2hvdy1yZWYuYzoxOTkKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1NworbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1OAorbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjYwCittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzgKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgyCittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTU1IGJ1aWx0aW4vY2xlYW4uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE1OSBidWlsdGluL2NsZWFuLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2MiBidWlsdGluL2NsZWFuLmM6MTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBub3QgcmVtb3ZlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgcmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzYKK21zZ2lkICJnaXQgY2xvbmUgW29wdGlvbnNdIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0IGJ1aWx0aW4vZmV0Y2guYzo4MiBidWlsdGluL21lcmdlLmM6MjEyCisjOiBidWlsdGluL3B1c2guYzozOTkKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY2Cittc2dpZCAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY3IGJ1aWx0aW4vY2xvbmUuYzo2OSBidWlsdGluL2luaXQtZGIuYzo0ODgKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcyCittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc0Cittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc2Cittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc4Cittc2dpZCAic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwIGJ1aWx0aW4vY2xvbmUuYzo4MgorbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgzIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NQorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODQgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODYKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODcgYnVpbHRpbi9jb2x1bW4uYzoyNiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgIm5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4Cittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyCittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMgYnVpbHRpbi9mZXRjaC5jOjgzIGJ1aWx0aW4vZ3JlcC5jOjc0OAorbXNnaWQgImRlcHRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTYKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NAorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTggYnVpbHRpbi9pbml0LWRiLmM6NDk1Cittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTkKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwOCBidWlsdGluL2RpZmYuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU1MgorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjkwCittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6Njk0Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MjQKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1NyBidWlsdGluL2Nsb25lLmM6NzcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gY2xvbmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODc5Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjkKK21zZ2lkICJnaXQgY29sdW1uIFtvcHRpb25zXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI2Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9jb2x1bW4uYzoyOAorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzQKK21zZ2lkICJnaXQgY29tbWl0IFtvcHRpb25zXSBbLS1dIDxmaWxlcGF0dGVybj4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozOQorbXNnaWQgImdpdCBzdGF0dXMgW29wdGlvbnNdIFstLV0gPGZpbGVwYXR0ZXJuPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTYKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MQorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IHJlc2V0J1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MjU3Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mjk5Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMDUKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzM4IGJ1aWx0aW4vY29tbWl0LmM6MzU5IGJ1aWx0aW4vY29tbWl0LmM6NDA5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzkwCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzkyCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDAyCittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDIyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTA5IGJ1aWx0aW4vY29tbWl0LmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUzOAorbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlkZW50IHN0cmluZzogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU5NiBidWlsdGluL2NvbW1pdC5jOjYyOSBidWlsdGluL2NvbW1pdC5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwOCBidWlsdGluL3Nob3J0bG9nLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MTAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjIwCittc2dpZCAiY29tbWl0IGhhcyBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjM2Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjQwCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzA1Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMzCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzM4Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICcjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzc4Cittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MTUKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMCBidWlsdGluL3RhZy5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhpc3RpbmcgYXV0aG9yIGZvdW5kIHdpdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk0MiBidWlsdGluL2NvbW1pdC5jOjExNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTgyCittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5MworbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTk2Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5OAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDAxCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMTEKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMTMKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYvLS1maXh1cC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDIxCittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMzgKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDQwCittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA0MgorbXNnaWQgIkNsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDQ0Cittc2dpZCAiRXhwbGljaXQgcGF0aHMgc3BlY2lmaWVkIHdpdGhvdXQgLWkgbm9yIC1vOyBhc3N1bWluZyAtLW9ubHkgcGF0aHMuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU0IGJ1aWx0aW4vdGFnLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1OQorbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTU2IGJ1aWx0aW4vY29tbWl0LmM6MTM4NAorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTggYnVpbHRpbi9jb21taXQuYzoxMzg2Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTYwIGJ1aWx0aW4vY29tbWl0LmM6MTM4OCBidWlsdGluL3B1c2guYzozODkKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjMgYnVpbHRpbi9jb21taXQuYzoxMzkwCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY1IGJ1aWx0aW4vY29tbWl0LmM6MTM5MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjM2CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjM5IGJ1aWx0aW4vdGFnLmM6NDYxCittc2dpZCAibW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjYgYnVpbHRpbi9jb21taXQuYzoxMzkzCittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2OQorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzAgcGFyc2Utb3B0aW9ucy5oOjE1MQorbXNnaWQgIndoZW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTcxCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MworbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjQyCittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyNDQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjg1Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyODcKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTQKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NQorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTcKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1OCBidWlsdGluL3RhZy5jOjQ1OQorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU5Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1OQorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MCBidWlsdGluL2djLmM6MTc4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjAKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYxIGJ1aWx0aW4vbWVyZ2UuYzoyMDYgYnVpbHRpbi9ub3Rlcy5jOjUzNworIzogYnVpbHRpbi9ub3Rlcy5jOjY5NCBidWlsdGluL3RhZy5jOjQ1NworbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYxCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYzCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY0Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjUKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjYKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NyBidWlsdGluL2xvZy5jOjEwNjggYnVpbHRpbi9yZXZlcnQuYzoxMDkKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY4Cittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2OQorbXNnaWQgImZvcmNlIGVkaXQgb2YgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzcwIGJ1aWx0aW4vdGFnLmM6NDYyCittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzEKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzIgYnVpbHRpbi9tZXJnZS5jOjIxMyBidWlsdGluL3RhZy5jOjQ2MworbXNnaWQgImtleSBpZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzMgYnVpbHRpbi9tZXJnZS5jOjIxNAorbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjLiBlbmQgY29tbWl0IG1lc3NhZ2Ugb3B0aW9ucworIzogYnVpbHRpbi9jb21taXQuYzoxMzc2Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc3Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OAorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzkKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODAKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODIKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBob29rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzkxCittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5MgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTcKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQwMAorbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDMyCittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3MCBidWlsdGluL21lcmdlLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg0Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM3IGJ1aWx0aW4vbWVyZ2UuYzo5MzUgYnVpbHRpbi9tZXJnZS5jOjk2MAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU1OAorbXNnaWQgImNhbm5vdCBsb2NrIEhFQUQgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU2MgorbXNnaWQgImNhbm5vdCB1cGRhdGUgSEVBRCByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTczCittc2dpZCAiIgorIlJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgb3IgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc2V0IEhFQURcIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcKK21zZ2lkICJnaXQgY29uZmlnIFtvcHRpb25zXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUyCittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MworbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NAorbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NQorbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTYKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NworbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4Cittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OQorbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYwCittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MQorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjIKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MworbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NAorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjUKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NgorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NworbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjgKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5IGJ1aWx0aW4vY29uZmlnLmM6NzAKK21zZ2lkICJzbG90IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjkKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBbZGVmYXVsdF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcyCittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0Cittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzUKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzYKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzgKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6NjkKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxNQorbXNnaWQgImdpdCBkZXNjcmliZSBbb3B0aW9uc10gPGNvbW1pdHRpc2g+KiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTYKK21zZ2lkICJnaXQgZGVzY3JpYmUgW29wdGlvbnNdIC0tZGlydHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJzZWFyY2hpbmcgdG8gZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwMworbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNAorbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNQorbXNnaWQgInVzZSBhbnkgcmVmIGluIC5naXQvcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA2Cittc2dpZCAidXNlIGFueSB0YWcgaW4gLmdpdC9yZWZzL3RhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNworbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMAorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMgorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxNAorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxNiBidWlsdGluL25hbWUtcmV2LmM6MjM4Cittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTcKK21zZ2lkICJtYXJrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTgKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQzNgorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NjIKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDgyCittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXR0aXNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozMDEKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiAlZCB0cmVlcyBnaXZlbjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjIKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2MzUKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2MzcKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0MAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0MworbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2NDUKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0NworbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2NDkKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjUxCittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY1MgorbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIxCittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIyCittc2dpZCAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIzCittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYyCittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjUKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NworbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjkKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MQorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzMKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzQKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1Cittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzkKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODEKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODQKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NSBidWlsdGluL2xvZy5jOjEwODMKK21zZ2lkICJkaXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg2Cittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODkKK21zZ2lkICJkZWZhdWx0IG1vZGUgZm9yIHJlY3Vyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNTkKK21zZ2lkICJbdXAgdG8gZGF0ZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIhICUtKnMgJS0qcyAtPiAlcyAgKGNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mjc0IGJ1aWx0aW4vZmV0Y2guYzozNjAKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyODUKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI4NyBidWlsdGluL2ZldGNoLmM6MzIyIGJ1aWx0aW4vZmV0Y2guYzozNDAKK21zZ2lkICIgICh1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwNQorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzA4Cittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMTEKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNTYKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNjIKK21zZ2lkICIobm9uLWZhc3QtZm9yd2FyZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM5MyBidWlsdGluL2ZldGNoLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTU3Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTggYnVpbHRpbi9yZW1vdGUuYzoxMDU1Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gZmV0Y2ggZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4OTMgYnVpbHRpbi9yZW1vdGUuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTIKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTMyCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTg0Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk4NgorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMDUKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTMKK21zZ2lkICJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl18LS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NTMgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjU2IGJ1aWx0aW4vZ3JlcC5jOjc4NworIzogYnVpbHRpbi9tZXJnZS5jOjE4OCBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU2IGJ1aWx0aW4vc2hvdy1yZWYuYzoxOTIKKyM6IGJ1aWx0aW4vdGFnLmM6NDQ4IHBhcnNlLW9wdGlvbnMuaDoxMzMgcGFyc2Utb3B0aW9ucy5oOjIzNQorbXNnaWQgIm4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjU0Cittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY1NworbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjYwCittc2dpZCAidGV4dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjEKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjYyCittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo5NzkKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFtvcHRpb25zXSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjk5NAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OTk2Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OTk4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMDAwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciB0Y2wiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMDAzCittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMDA0Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAwNAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMDA1Cittc2dpZCAia2V5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAwNgorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MDgKK21zZ2lkICJnaXQgZnNjayBbb3B0aW9uc10gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MTQKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE1Cittc2dpZCAic2hvdyBkYW5nbGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYxNgorbXNnaWQgInJlcG9ydCB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYxNworbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYxOAorbXNnaWQgIm1ha2UgaW5kZXggb2JqZWN0cyBoZWFkIG5vZGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYxOQorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjAKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjEKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjIzCittc2dpZCAid3JpdGUgZGFuZ2xpbmcgb2JqZWN0cyBpbiAuZ2l0L2xvc3QtZm91bmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyMgorbXNnaWQgImdpdCBnYyBbb3B0aW9uc10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgb2JqZWN0IGRpcmVjdG9yeSAlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxNzkKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6MTgxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxODIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS4gWW91IG1heSBhbHNvXG4iCisicnVuIFwiZ2l0IGdjXCIgbWFudWFsbHkuIFNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjI0OQorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoyMgorbXNnaWQgImdpdCBncmVwIFtvcHRpb25zXSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNoZGlyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo1MzEgYnVpbHRpbi9ncmVwLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3MjkKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczMQorbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczMworbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzUKK21zZ2lkICJzZWFyY2ggYWxzbyBpbiBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczOAorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc0MAorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQyCittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQ0Cittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NDYKK21zZ2lkICJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQ5Cittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc1MworbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc1NgorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NTkKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NjIKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzY1Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzY2Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzY3Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzY5Cittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NzEKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzczCittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzc2Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc3OAorbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzgwCittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3ODEKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3ODMKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3ODUKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc4OAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc5MQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzkzCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc5NAorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzk3Cittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTkKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDIKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDQKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA2Cittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTgKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjAKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMgorbXNnaWQgInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNgorbXNnaWQgInBhZ2VyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyOQorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzAgYnVpbHRpbi9zaG93LXJlZi5jOjIwMQorbXNnaWQgInNob3cgdXNhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIxCittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTc2Cittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5OQorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAwNAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDA3Cittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMTUKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo2MAorbXNnaWQgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPnwtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSBbLS1dICIKKyI8ZmlsZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjYxCittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwgPGxpc3Qtb2YtcGF0aHM+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3MgorbXNnaWQgInR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjcyCittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjczCittc2dpZCAid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjc0Cittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjc2Cittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjc3Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0Cittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0NQorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTMKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLW1hbnwtLXdlYnwtLWluZm9dIFtjb21tYW5kXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo5MworbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA2Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEzMiBidWlsdGluL2hlbHAuYzoxNjAgYnVpbHRpbi9oZWxwLmM6MTY5IGJ1aWx0aW4vaGVscC5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoyOTkKK21zZ2lkICJUaGUgbW9zdCBjb21tb25seSB1c2VkIGdpdCBjb21tYW5kcyBhcmU6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM4NAorbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzozOTIKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0NyBidWlsdGluL2hlbHAuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImBnaXQgJXMnIGlzIGFsaWFzZWQgdG8gYCVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTkwCittc2dpZCAib2JqZWN0IG9mIHVuZXhwZWN0ZWQgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMzcKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjM4Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNTAKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNTcKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjkyCittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICVsdTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDgzCittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0OTEKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMwCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU1OAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjY0OSBidWlsdGluL2luZGV4LXBhY2suYzo2NTUgYnVpbHRpbi9pbmRleC1wYWNrLmM6Njc4CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MTIgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo2NTIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzAKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ5Cittc2dpZCAiRXJyb3IgaW4gb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjEgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ3Cittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk4NgorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk4NgorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTAxMgorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDE3Cittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwMjAKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTAzMQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTA1NAorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEwNgorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjUzCittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUga2VlcCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjg3Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjk4Cittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDgyCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyNiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI5CisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NTkKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTYzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU4MgorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgcGF0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIG9mIGEgd3JvbmcgZm9ybWF0IHZlcnNpb24gJWQgZnJvbSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgZ2l0IGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMjMgYnVpbHRpbi9pbml0LWRiLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZ2l0IGxpbmsgJXMiCittc2dzdHIgIiIKKworIy4KKyMuICogVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAnJXMnIGlzIGVpdGhlciAiUmVpbml0aWFsaXplZAorIy4gKiBleGlzdGluZyIgb3IgIkluaXRpYWxpemVkIGVtcHR5IiwgdGhlIHNlY29uZCAiIHNoYXJlZCIgb3IKKyMuICogIiIsIGFuZCB0aGUgbGFzdCAnJXMlcycgaXMgdGhlIHZlcmJhdGltIGRpcmVjdG9yeSBuYW1lLgorIy4KKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyVzIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MjEKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMQorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMgorbXNnaWQgIiBzaGFyZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDQxCittc2dpZCAiY2Fubm90IHRlbGwgY3dkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2NworbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tc2hhcmVkIgorIls9PHBlcm1pc3Npb25zPl1dIFtkaXJlY3RvcnldIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MAorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MQorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTMgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3NworbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyMiBidWlsdGluL2luaXQtZGIuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTc5Cittc2dpZCAiQ2Fubm90IGFjY2VzcyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MzcKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8c2luY2U+Li48dW50aWw+XSBbWy0tXSA8cGF0aD4uLi5dXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzozOAorbXNnaWQgIiAgIG9yOiBnaXQgc2hvdyBbb3B0aW9uc10gPG9iamVjdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDAKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwMQorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTAyCittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo0MDMgYnVpbHRpbi9sb2cuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdHlwZTogJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo2MDgKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjgyCittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo3MDcKK21zZ2lkICJOZWVkIGV4YWN0bHkgb25lIHJhbmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjcxNQorbXNnaWQgIk5vdCBhIHJhbmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjc4OQorbXNnaWQgIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjg5MAorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggW29wdGlvbnNdIFs8c2luY2U+IHwgPHJldmlzaW9uIHJhbmdlPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo5MzUKK21zZ2lkICJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwNjMKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA2NgorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA3MAorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA3MgorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA3NAorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwNzUKK21zZ2lkICJzZngiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDc2Cittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDc4Cittc2dpZCAic3RhcnQgbnVtYmVyaW5nIHBhdGNoZXMgYXQgPG4+IGluc3RlYWQgb2YgMSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwODAKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDgzCittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA4NgorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA4OQorbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDkxCittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5MworbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTUKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk2Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5NworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk4IGJ1aWx0aW4vbG9nLmM6MTEwMAorbXNnaWQgImVtYWlsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5OAorbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwMAorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwMgorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTAzCittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwNCBidWlsdGluL2xvZy5jOjExMDcKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExMDUKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwOAorbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTEyCittc2dpZCAiZW5hYmxlIG1lc3NhZ2UgdGhyZWFkaW5nLCBzdHlsZXM6IHNoYWxsb3csIGRlZXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTE0Cittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTExNQorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExMTcKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb21taXR0ZXIgaW5mbyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMDIKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjA0Cittc2dpZCAiLS1zdWJqZWN0LXByZWZpeCBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjEyCittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTQKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE2Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzOQorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM5NAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0MworbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTExIGJ1aWx0aW4vbG9nLmM6MTUxMyBidWlsdGluL2xvZy5jOjE1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQwOAorbXNnaWQgImdpdCBscy1maWxlcyBbb3B0aW9uc10gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ2MworbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ2NQorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjcKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDY5Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3MQorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDczCittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzUKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDc4Cittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ4MAorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ4MgorbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZSBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0ODUKK21zZ2lkICJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0ODgKK21zZ2lkICJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5MAorbXNnaWQgInNob3cgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0OTIKK21zZ2lkICJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5NQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5OAorbXNnaWQgInJlYWQgYWRkaXRpb25hbCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgcGF0dGVybnMgaW4gPGZpbGU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDAKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDMKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTA2Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDcKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTA4Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTEwCittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoyNworbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI1Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyNworbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjkKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMgorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMzCittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUgYnVpbHRpbi9scy10cmVlLmM6MTM3Cittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDAKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MgorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NDMKK21zZ2lkICJnaXQgbWVyZ2UgW29wdGlvbnNdIFs8Y29tbWl0Pi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0Cittc2dpZCAiZ2l0IG1lcmdlIFtvcHRpb25zXSA8bXNnPiBIRUFEIDxjb21taXQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NQorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4MworbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4NgorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg3Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg5Cittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTIKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk0Cittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTYKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5OAorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMAorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMiBidWlsdGluL25vdGVzLmM6ODcwIGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMworbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA0Cittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDUKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDcKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxMQorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDAKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1Cittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5IGJ1aWx0aW4vbWVyZ2UuYzoyODYKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTYKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzYxCittc2dpZCAiV3JpdGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNjMKK21zZ2lkICJGaW5pc2hpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2MjgKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NzgKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcwOQorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4OTEKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTE1Cittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA0OQorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1MQorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1MworbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTQ1IGJ1aWx0aW4vbWVyZ2UuYzoxMzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMjkgZ2l0LXB1bGwuc2g6MzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzMiBnaXQtcHVsbC5zaDozNAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzNgorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjM5Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjQ4Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNTMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1uby1mZiB3aXRoIC0tZmYtb25seS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNjAKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5MgorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTUKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5NworbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODkKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MTIgYnVpbHRpbi9tZXJnZS5jOjE1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyNgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYXwtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjcKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWF8LS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyOAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjkKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjk4Cittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjk5Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjEwMAorbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjEwMgorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo4Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFtvcHRpb25zXSBbLUwgbmFtZTEgWy1MIG9yaWcgWy1MIG5hbWUyXV1dIGZpbGUxIG9yaWdfZmlsZSAiCisiZmlsZTIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzMKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM0Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDIKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MworbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWdfZmlsZS9maWxlMiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY3Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MworbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI0Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU1Cittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNAorbXNnaWQgImdpdCBtdiBbb3B0aW9uc10gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6NjQKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjY1Cittc2dpZCAic2tpcCBtb3ZlL3JlbmFtZSBlcnJvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjExMgorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjExNQorbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjExOAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJIdWg/ICUuKnMgaXMgaW4gaW5kZXg/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNDAKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzEKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzMKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIxNSBidWlsdGluL3JlbW90ZS5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MTc1Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFtvcHRpb25zXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MTc2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFtvcHRpb25zXSAtLWFsbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MTc3Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFtvcHRpb25zXSAtLXN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyMjkKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjIzMAorbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjMyCittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjIzNAorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjIzNQorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjM2Cittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGFkZCBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICgtYyB8IC1DKSAiCisiPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGFwcGVuZCBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAoLWMgfCAtQykgIgorIjxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzEKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5PiBdIDxub3Rlc19yZWY+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIHBydW5lIFstbiB8IC12XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBnZXQtcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MgorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDcKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUyCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTMKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTgKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYzCittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NjgKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MworbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXNfcmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwCittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NQorbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDgKK21zZ2lkICJjYW4ndCBmZG9wZW4gJ3Nob3cnIG91dHB1dCBmZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE3OCBidWlsdGluL3RhZy5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTkyCittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMTMgYnVpbHRpbi9ub3Rlcy5jOjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjE4Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG5vdGUgY29udGVudHMgaGFzIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjU0IGJ1aWx0aW4vdGFnLmM6NTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1NiBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3NSBidWlsdGluL25vdGVzLmM6NDQ4IGJ1aWx0aW4vbm90ZXMuYzo0NTAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTAgYnVpbHRpbi9ub3Rlcy5jOjU2NCBidWlsdGluL25vdGVzLmM6NjQ3CisjOiBidWlsdGluL25vdGVzLmM6NjUyIGJ1aWx0aW4vbm90ZXMuYzo3MjcgYnVpbHRpbi9ub3Rlcy5jOjc2OQorIzogYnVpbHRpbi9ub3Rlcy5jOjk3MSBidWlsdGluL3Jlc2V0LmM6MjkzIGJ1aWx0aW4vdGFnLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMDIKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIHRoZQorIy4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMgaXRzIHZhbHVlCisjOiBidWlsdGluL25vdGVzLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDMgYnVpbHRpbi9ub3Rlcy5jOjU1NyBidWlsdGluL25vdGVzLmM6NjMwCisjOiBidWlsdGluL25vdGVzLmM6NjQyIGJ1aWx0aW4vbm90ZXMuYzo3MTUgYnVpbHRpbi9ub3Rlcy5jOjc2MgorIzogYnVpbHRpbi9ub3Rlcy5jOjEwMzYKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTYgYnVpbHRpbi9ub3Rlcy5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzggYnVpbHRpbi9ub3Rlcy5jOjY5NQorbXNnaWQgIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0MSBidWlsdGluL25vdGVzLmM6Njk4Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0MyBidWlsdGluL25vdGVzLmM6NTQ2IGJ1aWx0aW4vbm90ZXMuYzo3MDAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDMgYnVpbHRpbi90YWcuYzo0NzYKK21zZ2lkICJvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0NCBidWlsdGluL25vdGVzLmM6NzAxCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NDcgYnVpbHRpbi9ub3Rlcy5jOjcwNAorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQ5IGJ1aWx0aW4vbm90ZXMuYzo2MTcKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4OCBidWlsdGluL25vdGVzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NjE4Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYyMAorbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MzgKK21zZ2lkICJ0b28gZmV3IHBhcmFtZXRlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg2NworbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODY5Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcxCittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc1Cittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc3Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc5Cittc2dpZCAiYWJvcnQgbm90ZXMgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTg2Cittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5ODkKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTA3MAorbXNnaWQgIm5vdGVzX3JlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTA3MQorbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlc19yZWY+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMTA2IGJ1aWx0aW4vcmVtb3RlLmM6MTU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMKK21zZ2lkICJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFtvcHRpb25zLi4uXSBbPCByZWYtbGlzdCB8IDwgb2JqZWN0LWxpc3RdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQKK21zZ2lkICJnaXQgcGFjay1vYmplY3RzIFtvcHRpb25zLi4uXSBiYXNlLW5hbWUgWzwgcmVmLWxpc3QgfCA8IG9iamVjdC1saXN0XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE4MyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAlcyBkb2VzIG5vdCBhY2NlcHQgbmVnYXRpdmUgZm9ybSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHZhbHVlICclcycgZm9yIG9wdGlvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NDgKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NTAKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1MgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1NQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NTYKK21zZ2lkICJ2ZXJzaW9uWyxvZmZzZXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1NworbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDYwCittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NjIKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDY0Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ2NgorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDY4Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NzAKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NzIKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDc0Cittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NzYKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDc4Cittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODAKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ4MgorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDg0Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDg3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDkwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ5MworbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0OTUKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDk3Cittc2dpZCAia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ5OCBwYXJzZS1vcHRpb25zLmg6MTQxCittc2dpZCAidGltZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0OTkKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1MDIKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1MDQKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjUwNgorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTA4Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo2Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbb3B0aW9uc10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNAorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE1Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW58LS1kcnktcnVuXSBbLXF8LS1xdWlldF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEyCittc2dpZCAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzMworbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM2Cittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo0NQorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2NAorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjk5Cittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxNTEKK21zZ2lkICIiCisicHVzaC5kZWZhdWx0IGlzIHVuc2V0OyBpdHMgaW1wbGljaXQgdmFsdWUgaXMgY2hhbmdpbmcgaW5cbiIKKyJHaXQgMi4wIGZyb20gJ21hdGNoaW5nJyB0byAnc2ltcGxlJy4gVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2VcbiIKKyJhbmQgbWFpbnRhaW4gdGhlIGN1cnJlbnQgYmVoYXZpb3IgYWZ0ZXIgdGhlIGRlZmF1bHQgY2hhbmdlcywgdXNlOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvciBub3csIHVzZTpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IHNpbXBsZVxuIgorIlxuIgorIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAncHVzaC5kZWZhdWx0JyBmb3IgZnVydGhlciAiCisiaW5mb3JtYXRpb24uXG4iCisiKHRoZSAnc2ltcGxlJyBtb2RlIHdhcyBpbnRyb2R1Y2VkIGluIEdpdCAxLjcuMTEuIFVzZSB0aGUgc2ltaWxhciBtb2RlXG4iCisiJ2N1cnJlbnQnIGluc3RlYWQgb2YgJ3NpbXBsZScgaWYgeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxOTkKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyMDYKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIE1lcmdlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLiAnZ2l0IHB1bGwnKVxuIgorImJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIElmIHlvdSBkaWQgbm90IGludGVuZCB0byBwdXNoIHRoYXQgYnJhbmNoLCB5b3UgbWF5IHdhbnQgdG9cbiIKKyJzcGVjaWZ5IGJyYW5jaGVzIHRvIHB1c2ggb3Igc2V0IHRoZSAncHVzaC5kZWZhdWx0JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlXG4iCisidG8gJ3NpbXBsZScsICdjdXJyZW50JyBvciAndXBzdHJlYW0nIHRvIHB1c2ggb25seSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxOAorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgbWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk1Cittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzEwCittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjMxMQorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzE2Cittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjMxNworbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzIyCittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzgyCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozODMKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4NAorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozODYKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozODcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzkwCittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozOTEKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozOTIKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk0Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozOTUgYnVpbHRpbi9wdXNoLmM6Mzk2Cittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk3Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDAwCittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDEwCittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDEyCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzozNgorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFtbLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD5dICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTA4Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExMQorbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTEzCittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNQorbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTcKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTkKK21zZ2lkICIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIxCittc2dpZCAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMgorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI2Cittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMgorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMworbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFnc3wtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMyBidWlsdGluL3JlbW90ZS5jOjMyCittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNCBidWlsdGluL3JlbW90ZS5jOjM3Cittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtZCB8IDxicmFuY2g+KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNworbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAgYnVpbHRpbi9yZW1vdGUuYzo2OAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxIGJ1aWx0aW4vcmVtb3RlLmM6NjkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIgYnVpbHRpbi9yZW1vdGUuYzo3MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNworbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQyCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLWQgfCA8YnJhbmNoPl0pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDcKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0OAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjUzCittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU4Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MworbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjUKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY4Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcwCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzIKK21zZ2lkICJwdXNofGZldGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTczCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NSBidWlsdGluL3JlbW90ZS5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk5IGJ1aWx0aW4vcmVtb3RlLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Mjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDAgYnVpbHRpbi9yZW1vdGUuYzo0NDgKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUyCittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OTUgYnVpbHRpbi9yZW1vdGUuYzo2MDEgYnVpbHRpbi9yZW1vdGUuYzo2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MzkgYnVpbHRpbi9yZW1vdGUuYzo3OTIgYnVpbHRpbi9yZW1vdGUuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjYyIGJ1aWx0aW4vcmVtb3RlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGJyYW5jaCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgzNAorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ2Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NDgKK21zZ2lkICIgc3RhbGUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgdG8gcmVtb3ZlKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk1MAorbXNnaWQgIiA/Pz8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDAyCittc2dpZCAiICAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwNQorbXNnaWQgIiAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTEKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU0Cittc2dpZCAiZGVsZXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OAorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYxCittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjQKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDkxCittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTIwIGJ1aWx0aW4vcmVtb3RlLmM6MTI4NQorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOSBidWlsdGluL3JlbW90ZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMyBidWlsdGluL3JlbW90ZS5jOjExMzUgYnVpbHRpbi9yZW1vdGUuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU0IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MQorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjMKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MQorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk5Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwMQorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE2Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTgKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMQorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg3IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwNworbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDE0Cittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MzYKK21zZ2lkICJtYW5pcHVsYXRlIHB1c2ggVVJMcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MzgKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ0MAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ0NworbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDk3Cittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU2OQorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTgKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxOQorbXNnaWQgImdpdCByZXBsYWNlIC1sIFs8cGF0dGVybj5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjExOAorbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjExOQorbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTIwCittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjExCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgcGF0aC4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo1NgorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNQorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI2Cittc2dpZCAiZ2l0IHJlc2V0IFstcV0gPGNvbW1pdD4gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNworbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAibWl4ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAic29mdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJoYXJkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgIm1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImtlZXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc3Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc5Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjk2Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMzAKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTMzCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyMzgKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDAKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjQxCittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDMgYnVpbHRpbi9yZXNldC5jOjI0NQorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI0NworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwOAorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzE3Cittc2dpZCAiLS1taXhlZCB3aXRoIHBhdGhzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IHJlc2V0IC0tIDxwYXRocz4nIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjMzOQorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbb3B0aW9uc10gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozNDQKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozNDYKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0NjQKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFtvcHRpb25zXSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFtvcHRpb25zXSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyCittc2dpZCAiZ2l0IHJldmVydCBbb3B0aW9uc10gPGNvbW1pdC1pc2g+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjI4Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFtvcHRpb25zXSA8Y29tbWl0LWlzaD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyOQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MCBidWlsdGluL3JldmVydC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgInJlc3VtZSByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA2Cittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMAorbXNnaWQgInBhcmVudCBudW1iZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMworbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjUKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjYKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjcKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyOAorbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyOQorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTMzCittc2dpZCAicHJvZ3JhbSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyMworbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzgKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjE0Cittc2dpZCAiZ2l0IHJtIFtvcHRpb25zXSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZSBmaWxlIGFuZCB0aGUgSEVBRFxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4XG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MTM0Cittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MTM1Cittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjEzNgorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMzcKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MTM5Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxMworbXNnaWQgImdpdCBzaG9ydGxvZyBbLW5dIFstc10gWy1lXSBbLXddIFtyZXYtb3B0c10gWy0tXSBbPGNvbW1pdC1pZD4uLi4gXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjUzCittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNTUKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjU3Cittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjU4Cittc2dpZCAid1ssaTFbLGkyXV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI1OQorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6OQorbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hfC0tYWxsXSBbLXJ8LS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXSBbLS0iCisiY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdIFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS0iCisiaW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdIFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgIgorIjxnbG9iPikuLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMAorbXNnaWQgImdpdCBzaG93LWJyYW5jaCAoLWd8LS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUzCittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NQorbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NworbXNnaWQgInNob3cgPG4+IG1vcmUgY29tbWl0cyBhZnRlciB0aGUgY29tbW9uIGFuY2VzdG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTkKK21zZ2lkICJzeW5vbnltIHRvIG1vcmU9LTEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjYKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzAKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MgorbXNnaWQgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzQKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NgorbXNnaWQgInNob3cgY29tbWl0cyB3aGVyZSBubyBwYXJlbnQgY29tZXMgYmVmb3JlIGl0cyBjaGlsZHJlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc4Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzkKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTAKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcXwtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZHwtLWRlcmVmZXJlbmNlXSBbLXN8LS1oYXNoIgorIls9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbcGF0dGVybipdICIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTEKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz1wYXR0ZXJuXSA8IHJlZi1saXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODMKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcgYnVpbHRpbi9zaG93LXJlZi5jOjE4OQorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxOTEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTkzCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxOTcKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTk5Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjcKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFtvcHRpb25zXSBuYW1lIFtyZWZdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6MzgKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6MzkKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MCBidWlsdGluL3VwZGF0ZS1yZWYuYzoxOAorbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjE4Cittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyMgorbXNnaWQgIiIKKyJnaXQgdGFnIFstYXwtc3wtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz58LUYgPGZpbGU+XSA8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyMworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSBcbiIKKyJcdFx0WzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyNgorbXNnaWQgImdpdCB0YWcgLXYgPHRhZ25hbWU+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB2ZXJpZnkgdGhlIHRhZyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQ5Cittc2dpZCAiIgorIlxuIgorIiNcbiIKKyIjIFdyaXRlIGEgdGFnIG1lc3NhZ2VcbiIKKyIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZC5cbiIKKyIjXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyNTYKK21zZ2lkICIiCisiXG4iCisiI1xuIgorIiMgV3JpdGUgYSB0YWcgbWVzc2FnZVxuIgorIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKKyIjXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyOTgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAwCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzI1Cittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjMzOAorbXNnaWQgInRhZyBoZWFkZXIgdG9vIGJpZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozNzAKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQyNQorbXNnaWQgInN3aXRjaCAncG9pbnRzLWF0JyByZXF1aXJlcyBhbiBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0NDcKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQ0OQorbXNnaWQgInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDUxCittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0NTIKK21zZ2lkICJ2ZXJpZnkgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQ1NAorbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDU2Cittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDU4Cittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0NjAKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDY0Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQ2NQorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0NjYKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0NjgKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDcxCittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDc3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MjUKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MjcKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTM1Cittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTU1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgbG9jayB0aGUgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgdXBkYXRlIHRoZSByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NDAxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbb3B0aW9uc10gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcxNworbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcyMAorbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzIzCittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3MjUKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcyNworbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3MjkKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjczMgorbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjczNgorbXNnaWQgImxpa2UgLS1yZWZyZXNoLCBidXQgaWdub3JlIGFzc3VtZS11bmNoYW5nZWQgc2V0dGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc0MAorbXNnaWQgIjxtb2RlPiA8b2JqZWN0PiA8cGF0aD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NDEKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NDUKK21zZ2lkICIoKy8tKXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NDYKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc1MAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc1MworbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc1NgorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NTkKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2MgorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzY0Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2NgorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2OAorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NzIKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc3NgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc4MAorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6Nzg0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc4NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc4OQorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzkzCittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6NworbXNnaWQgImdpdCB1cGRhdGUtcmVmIFtvcHRpb25zXSAtZCA8cmVmbmFtZT4gWzxvbGR2YWw+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzo4Cittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgW29wdGlvbnNdICAgIDxyZWZuYW1lPiA8bmV3dmFsPiBbPG9sZHZhbD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjE5Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MjEKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjYKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE0Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTYKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12fC0tdmVyYm9zZV0gWy1zfC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY2Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjgKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxNworbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdnwtLXZlcmJvc2VdIDx0YWc+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjczCittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjcKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzAKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjE2Cittc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE1NgorbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjI4Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzAKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzYKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjgKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDo5Cittc2dpZCAiRmluZCBieSBiaW5hcnkgc2VhcmNoIHRoZSBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTAKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjExCittc2dpZCAiQ2hlY2tvdXQgYSBicmFuY2ggb3IgcGF0aHMgdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjEyCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjE0Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjE1Cittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjE2Cittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTcKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgZ2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjE4Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjE5Cittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyMAorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjIxCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgbWVyZ2Ugd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyMgorbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjIzCittc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjI0Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyNQorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjYKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjI3Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjI4Cittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjUwCittc2dpZCAiWW91IG5lZWQgdG8gc2V0IHlvdXIgY29tbWl0dGVyIGluZm8gZmlyc3QiCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjk1Cittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjEwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIkY21kbGluZSAtLXJlc29sdmVkXCIuXG4iCisiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiRjbWRsaW5lIC0tc2tpcFwiIGluc3RlYWQuXG4iCisiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIkY21kbGluZSAtLWFib3J0XCIuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDoxMjEKK21zZ2lkICJDYW5ub3QgZmFsbCBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjEzNworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjEzOQorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjE1NAorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjE2MworbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MTc5Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6Mjc0Cittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjM2MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZm9ybWF0ICRwYXRjaF9mb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjM2MworbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6Mzg5Cittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo0NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJGRvdGVzdCBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo0ODIKK21zZ2lkICJQbGVhc2UgbWFrZSB1cCB5b3VyIG1pbmQuIC0tc2tpcCBvciAtLWFib3J0PyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NTA5Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NTc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAkZmlsZXMpIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo2NzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRjaCBpcyBlbXB0eS4gIFdhcyBpdCBzcGxpdCB3cm9uZz9cbiIKKyJJZiB5b3Ugd291bGQgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgaW5zdGVhZCBydW4gXCIkY21kbGluZSAtLXNraXBcIi5cbiIKKyJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcgcnVuIFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NzA2Cittc2dpZCAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NzUzCittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo3NTcKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYW0uc2g6NzY0Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo4MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAkRklSU1RMSU5FIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo4MjEKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjgyOQorbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4XG4iCisiZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz8iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjg0NQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6ODU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo4NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29weSBvZiB0aGUgcGF0Y2ggdGhhdCBmYWlsZWQgaXMgZm91bmQgaW46XG4iCisiICAgJGRvdGVzdC9wYXRjaCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6ODc2Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ4Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMTcKK21zZ2lkICJCYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVja2luZyBvdXQgJyRzdGFydF9oZWFkJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8dmFsaWRicmFuY2g+Jy4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDAKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gc2Vla2VkIHRyZWUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDQKK21zZ2lkICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzIKK21zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTAKK21zZ2lkICInZ2l0IGJpc2VjdCBiYWQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiIgorCisjLiBoYXZlIGJhZCBidXQgbm90IGdvb2QuICB3ZSBjb3VsZCBiaXNlY3QgYWx0aG91Z2gKKyMuIHRoaXMgaXMgbGVzcyBvcHRpbXVtLgorIzogZ2l0LWJpc2VjdC5zaDoyNzMKK21zZ2lkICJXYXJuaW5nOiBiaXNlY3Rpbmcgb25seSB3aXRoIGEgYmFkIGNvbW1pdC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjg5Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lIGdvb2QgYW5kIG9uZSBiYWQgcmV2aXNpb25zLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgYmFkXCIgYW5kIFwiZ2l0IGJpc2VjdCBnb29kXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lIGdvb2QgYW5kIG9uZSBiYWQgcmV2aXNpb25zLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgYmFkXCIgYW5kIFwiZ2l0IGJpc2VjdCBnb29kXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjM0NyBnaXQtYmlzZWN0LnNoOjQ3NAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjM1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDozNjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyRicmFuY2gnLlxuIgorIlRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkwCittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjQwOAorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjQyMAorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjQyNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDUzCittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDo0NTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDY2Cittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGdpdC1wdWxsLnNoOjIxCittc2dpZCAiIgorIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuXG4iCisiUGxlYXNlLCBmaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiwgb3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCittc2dzdHIgIiIKKworIzogZ2l0LXB1bGwuc2g6MjUKK21zZ2lkICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcHVsbC5zaDoxOTcKK21zZ2lkICJ1cGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIy4gVGhlIGZldGNoIGludm9sdmVkIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaC4KKyMuIFRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBmaWxlIGlzIHN0aWxsIGJhc2VkIG9uIHRoZQorIy4gJG9yaWdfaGVhZCBjb21taXQsIGJ1dCB3ZSBhcmUgbWVyZ2luZyBpbnRvICRjdXJyX2hlYWQuCisjLiBGaXJzdCB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB0byBtYXRjaCAkY3Vycl9oZWFkLgorIzogZ2l0LXB1bGwuc2g6MjI4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJXYXJuaW5nOiBmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorIldhcm5pbmc6IGNvbW1pdCAkb3JpZ19oZWFkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcHVsbC5zaDoyNTMKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGdpdC1wdWxsLnNoOjI1NworbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjUzCittc2dpZCAiIgorIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBpbnN0ZWFkLlxuIgorIlRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHJlYmFzaW5nLCBydW4gXCJnaXQgcmViYXNlIC0tYWJvcnQiCisiXCIuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTYwCittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjUKK21zZ2lkICJJdCBsb29rcyBsaWtlIGdpdC1hbSBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDoyOTYKK21zZ2lkICJUaGUgLS1leGVjIG9wdGlvbiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDozMDEKK21zZ2lkICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzEyCittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzE5Cittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjMyMgorbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjM0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzU5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJHN0YXRlX2Rpcl9iYXNlIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjQwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAkdXBzdHJlYW1fbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjQyOAorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDo0MzEgZ2l0LXJlYmFzZS5zaDo0MzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGlzIG5vIG1lcmdlIGJhc2UiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDo0NDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDYzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2g6ICRicmFuY2hfbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjQ4MworbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDo1MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjUwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIGZyb20gJG1iIHRvICRvbnRvOiIKK21zZ3N0ciAiIgorCisjLiBEZXRhY2ggSEVBRCBhbmQgcmVzZXQgdGhlIHRyZWUKKyM6IGdpdC1yZWJhc2Uuc2g6NTI0Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjUxCittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo4OQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjMgZ2l0LXN0YXNoLnNoOjEzNgorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDAKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDMKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MTU2Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICRvcHRpb24gaXMgYW4gaW52YWxpZCBvcHRpb24sIGxpa2UKKyMuIGAtLWJsYWgtYmxhaCcuIFRoZSA3IHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorIy4gc2Vjb25kIGxpbmUgY29ycmVzcG9uZCB0byAiZXJyb3I6ICIuIFNvIHlvdSBzaG91bGQgbGluZQorIy4gdXAgdGhlIHNlY29uZCBsaW5lIHdpdGggaG93ZXZlciBtYW55IGNoYXJhY3RlcnMgdGhlCisjLiB0cmFuc2xhdGlvbiBvZiAiZXJyb3I6ICIgdGFrZXMgaW4geW91ciBsYW5ndWFnZS4gRS5nLiBpbgorIy4gRW5nbGlzaCB0aGlzIGlzOgorIy4KKyMuICQgZ2l0IHN0YXNoIHNhdmUgLS1ibGFoLWJsYWggMj4mMSB8IGhlYWQgLW4gMgorIy4gZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6IC0tYmxhaC1ibGFoCisjLiBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICctLWJsYWgtYmxhaCcKKyM6IGdpdC1zdGFzaC5zaDoyMDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgICBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MjIzCittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MjM1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoyNTMKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjM1MgorbXNnaWQgIk5vIHN0YXNoIGZvdW5kLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MzU5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozNjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MzkzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MTIKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDE2Cittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MjQKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MjYKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0NjAKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDc1Cittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQ5MworIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NTAwCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo1NzEKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJHJlbW90ZXVybCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNsb25lIG9mICckdXJsJyBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJHaXRkaXIgJyRhJyBpcyBwYXJ0IG9mIHRoZSBzdWJtb2R1bGUgcGF0aCAnJGInIG9yIHZpY2UgdmVyc2EiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzMzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIGl0LiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzYwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQxMworIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRwcmVmaXgkc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckc21fcGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0ODAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSByZWdpc3RlcmVkIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyMgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzEgZ2l0LXN1Ym1vZHVsZS5zaDo5OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjc3OQorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIiIKKworIy4gdW5leHBlY3RlZCB0eXBlCisjOiBnaXQtc3VibW9kdWxlLnNoOjgxOQorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODY4Cittc2dpZCAiYmxvYiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwNgorbXNnaWQgIiMgU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDgKK21zZ2lkICIjIFN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMDU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICckbmFtZSciCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvL2lzLnBvIGIvcG8vaXMucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5MmE4YgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2lzLnBvCkBAIC0wLDAgKzEsOTMgQEAKKyMgSWNlbGFuZGljIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+LCAyMDEwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDktMjAgMTQ6NDQrMDAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDYtMDUgMTk6MDYgKzAwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uIDxhdmFyYWJAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiTGFuZ3VhZ2U6IGlzXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LmM6NQorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIKK21zZ3N0ciAiU2rDoSAnZ2l0IGhlbHAgU0tJUFVOJyB0aWwgYcOwIHNqw6EgaGrDoWxwIGZ5cmlyIHRpbHRla25hIHNraXB1bi4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LmM6MTAKK21zZ2lkICJURVNUOiBBIEMgdGVzdCBzdHJpbmciCittc2dzdHIgIlRJTFJBVU46IEMgdGlscmF1bmFzdHJlbmd1ciIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzoxMworIywgYy1mb3JtYXQKK21zZ2lkICJURVNUOiBBIEMgdGVzdCBzdHJpbmcgJXMiCittc2dzdHIgIlRJTFJBVU46IEMgdGlscmF1bmFzdHJlbmd1ciAlcyIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzoxNgorIywgYy1mb3JtYXQKK21zZ2lkICJURVNUOiBIZWxsbyBXb3JsZCEiCittc2dzdHIgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIhIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5jOjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRFU1Q6IE9sZCBFbmdsaXNoIFJ1bmVzIgorbXNnc3RyICJUSUxSQVVOOiDhmrvhm5Yg4Zqz4Zq54Zqr4ZqmIOGapuGaq+GbjyDhmrvhm5Yg4ZuS4Zqi4Zue4ZuWIOGaqeGaviDhmqbhmqvhm5cg4Zua4Zqq4Zq+4Zue4ZuWIOGavuGaqeGaseGapuGaueGbluGaquGaseGbnuGaouGblyDhmrnhm4HhmqYg4Zqm4ZqqIOGaueGbluGbpeGaqyIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICJURVNUOiDigJhzaW5nbGXigJkgYW5kIOKAnGRvdWJsZeKAnSBxdW90ZXMiCittc2dzdHIgIlRJTFJBVU46IOKAmmVpbmZhbGRhcuKAmCBvZyDigJ50dsO2ZmFsZGFy4oCcIGfDpnNhbGFwcGlyIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5zaDo4Cittc2dpZCAiVEVTVDogQSBTaGVsbCB0ZXN0IHN0cmluZyIKK21zZ3N0ciAiVElMUkFVTjogU2tlbGphcnRpbHJhdW5hc3RyZW5ndXIiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LnNoOjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICJURVNUOiBBIFNoZWxsIHRlc3QgJHZhcmlhYmxlIgorbXNnc3RyICJUSUxSQVVOOiBTa2VsamFydGlscmF1bmFzdHJlbmd1ciBtZcOwIGJyZXl0dW5uaSAkdmFyaWFibGUiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LnBlcmw6OAorbXNnaWQgIlRFU1Q6IEEgUGVybCB0ZXN0IHN0cmluZyIKK21zZ3N0ciAiVElMUkFVTjogUGVybCB0aWxyYXVuYXN0cmVuZ3VyIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5wZXJsOjExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlRFU1Q6IEEgUGVybCB0ZXN0IHZhcmlhYmxlICVzIgorbXNnc3RyICJUSUxSQVVOOiBQZXJsIHRpbHJhdW5hc3RyZW5ndXIgbWXDsCBicmV5dHVubmkgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJyVzJyBpcyBlaXRoZXIgIlJlaW5pdGlhbGl6ZWQKKyMuIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gIiIsIGFuZCB0aGUgbGFzdCAnJXMlcycgaXMgdGhlIHZlcmJhdGltIGRpcmVjdG9yeSBuYW1lLgorIzogYnVpbHRpbi9pbml0LWRiLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIEdpdCBsaW5kIMOtICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU2Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyIKK21zZ3N0ciAiRW5kdXJnZXLDsGkiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NgorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICJCasOzIHRpbCB0w7NtYSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU3Cittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAiIHNhbWVpZ2lubGVnYSIKZGlmZiAtLWdpdCBhL3BvL2l0LnBvIGIvcG8vaXQucG8KaW5kZXggMWJkOGI4ZS4uZmU2MWYxYSAxMDA2NDQKLS0tIGEvcG8vaXQucG8KKysrIGIvcG8vaXQucG8KQEAgLTEsMjU5MSArMSw1MzY3IEBACi0jIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gSXRhbGlhbgotIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCi0jIFBhb2xvIENpYXJyb2NjaGkgPHBhb2xvLmNpYXJyb2NjaGlAZ21haWwuY29tPiwgMjAwNwotIyBNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT4sIDIwMDcuCi0jCi0jCisjIEl0YWxpYW4gdHJhbnNsYXRpb25zIGZvciBHaXQuCisjIENvcHlyaWdodCAoQykgMjAxMiBNYXJjbyBQYW9sb25lIDxtYXJjb3Bhb2xvbmVAZ21haWwuY29tPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCiBtc2dpZCAiIgogbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI2IDE1OjQ3LTA4MDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAxLTI4IDEwOjA0KzAxMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IE1pY2hlbGUgQmFsbGFiaW8gPGJhcnJhX2N1ZGFAa2F0YW1haWwuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IEl0YWxpYW4gPHRwQGxpc3RzLmxpbnV4Lml0PlxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMDYtMDggMTA6MjArMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMDYtMTQgMTQ6MTMrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWFyY28gUGFvbG9uZSA8bWFyY29wYW9sb25lQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuXG4iCisiTGFuZ3VhZ2U6IGl0XG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCiAKLSM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3OTMgZ2l0LWd1aS5zaDo4MDcgZ2l0LWd1aS5zaDo4MjAgZ2l0LWd1aS5zaDo5MDMKLSM6IGdpdC1ndWkuc2g6OTIyCi1tc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCi1tc2dzdHIgImdpdC1ndWk6IGVycm9yZSBncmF2ZSIKKyM6IGFkdmljZS5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAic3VnZ2VyaW1lbnRvOiAlLipzXG4iCiAKLSM6IGdpdC1ndWkuc2g6NzQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCi1tc2dzdHIgIkNhcmF0dGVyaSBub24gdmFsaWRpIHNwZWNpZmljYXRpIGluICVzOiIKLQotIzogZ2l0LWd1aS5zaDo3NzkKLW1zZ2lkICJNYWluIEZvbnQiCi1tc2dzdHIgIkNhcmF0dGVyaSBwcmluY2lwYWxpIgotCi0jOiBnaXQtZ3VpLnNoOjc4MAotbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgotbXNnc3RyICJDYXJhdHRlcmkgcGVyIGNvbmZyb250aSBlIHRlcm1pbmFsZSIKLQotIzogZ2l0LWd1aS5zaDo3OTQKLW1zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCi1tc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgZ2l0IG5lbCBQQVRIIgotCi0jOiBnaXQtZ3VpLnNoOjgyMQotbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgotbXNnc3RyICJJbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBsYSB2ZXJzaW9uZSBkaSBHaXQ6IgotCi0jOiBnaXQtZ3VpLnNoOjgzOQotIywgdGNsLWZvcm1hdAorIy4KKyMuICogTWVzc2FnZSB1c2VkIGJvdGggd2hlbiAnZ2l0IGNvbW1pdCcgZmFpbHMgYW5kIHdoZW4KKyMuICogb3RoZXIgY29tbWFuZHMgZG9pbmcgYSBtZXJnZSBkby4KKyMuCisjOiBhZHZpY2UuYzo3MAogbXNnaWQgIiIKLSJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKLSJcbiIKLSIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgotIlxuIgotIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKLSJcbiIKLSJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsXG4iCisiYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPicgYXNcbiIKKyJhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQsXG4iCisib3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCiBtc2dzdHIgIiIKLSJMYSB2ZXJzaW9uZSBkaSBHaXQgbm9uIHB1w7IgZXNzZXJlIGRldGVybWluYXRhLlxuIgotIlxuIgotIiVzIHJpcG9ydGEgY2hlIGxhIHZlcnNpb25lIMOoICclcycuXG4iCi0iXG4iCi0iJXMgcmljaGllZGUgYWxtZW5vIEdpdCAxLjUuMCBvIHN1cGVyaW9yZS5cbiIKLSJcbiIKLSJBc3N1bWVyZSBjaGUgJyVzJyBzaWEgYWxsYSB2ZXJzaW9uZSAxLjUuMD9cbiIKIAotIzogZ2l0LWd1aS5zaDoxMTI4Ci1tc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgotbXNnc3RyICJOb24gdHJvdm8gbGEgZGlyZWN0b3J5IGRpIGdpdDogIgotCi0jOiBnaXQtZ3VpLnNoOjExNDYKLW1zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgotbXNnc3RyICJJbXBvc3NpYmlsZSBzcG9zdGFyc2kgc3VsbGEgZGlyZWN0b3J5IHByaW5jaXBhbGUgZGVsIHByb2dldHRvOiIKLQotIzogZ2l0LWd1aS5zaDoxMTU0Ci1tc2dpZCAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6IgotbXNnc3RyICJJbXBvc3NpYmlsZSB1c2FyZSB1biBhcmNoaXZpbyBzZW56YSBkaXJlY3RvcnkgZGkgbGF2b3JvOiIKLQotIzogZ2l0LWd1aS5zaDoxMTYyCi1tc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgIk5lc3N1bmEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKLQotIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2Ci1tc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKLW1zZ3N0ciAiQ29udHJvbGxvIGRlbGxvIHN0YXRvIGRlaSBmaWxlIGluIGNvcnNvLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjEzOTAKLW1zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgotbXNnc3RyICJSaWNlcmNhIGRpIGZpbGUgbW9kaWZpY2F0aSBpbiBjb3Jzby4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNDU0Ci1tc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKLW1zZ3N0ciAiQXZ2aW8gcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTQ3MQotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgIlJldmlzaW9uZSByaWZpdXRhdGEgZGFsIHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKLQotIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKLW1zZ2lkICJSZWFkeS4iCi1tc2dzdHIgIlByb250by4iCi0KLSM6IGdpdC1ndWkuc2g6MTc4NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCi1tc2dzdHIgIlNhcmFubm8gbW9zdHJhdGkgc29sbyAlcyBmaWxlIHN1ICVzLiIKLQotIzogZ2l0LWd1aS5zaDoxOTEzCi1tc2dpZCAiVW5tb2RpZmllZCIKLW1zZ3N0ciAiTm9uIG1vZGlmaWNhdG8iCi0KLSM6IGdpdC1ndWkuc2g6MTkxNQotbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJNb2RpZmljYXRvLCBub24gcHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjE5MTYgZ2l0LWd1aS5zaDoxOTI0Ci1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIlByZXBhcmF0byBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDoxOTE3IGdpdC1ndWkuc2g6MTkyNQotbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICJQYXJ0aSBwcmVwYXJhdGUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MTkxOCBnaXQtZ3VpLnNoOjE5MjYKLW1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKLW1zZ3N0ciAiUHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lLCBtYW5jYW50ZSIKLQotIzogZ2l0LWd1aS5zaDoxOTIwCi1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIlRpcG8gZGkgZmlsZSBtb2RpZmljYXRvLCBub24gcHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjE5MjEKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgotbXNnc3RyICJUaXBvIGRpIGZpbGUgbW9kaWZpY2F0bywgcHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjE5MjMKLW1zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIk5vbiB0cmFjY2lhdG8sIG5vbiBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MTkyOAotbXNnaWQgIk1pc3NpbmciCi1tc2dzdHIgIk1hbmNhbnRlIgotCi0jOiBnaXQtZ3VpLnNoOjE5MjkKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCi1tc2dzdHIgIlByZXBhcmF0byBwZXIgbGEgcmltb3ppb25lIgotCi0jOiBnaXQtZ3VpLnNoOjE5MzAKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCi1tc2dzdHIgIlByZXBhcmF0byBhbGxhIHJpbW96aW9uZSwgYW5jb3JhIHByZXNlbnRlIgotCi0jOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKLSM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKLW1zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgotbXNnc3RyICJSaWNoaWVkZSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIgotCi0jOiBnaXQtZ3VpLnNoOjE5NzIKLW1zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICJBdnZpbyBkaSBnaXRrLi4uIGF0dGVuZGVyZS4uLiIKLQotIzogZ2l0LWd1aS5zaDoxOTg0Ci1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCi1tc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgZ2l0ayBuZWwgUEFUSCIKLQotIzogZ2l0LWd1aS5zaDoyMDQzCi1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXQgZ3VpIGluIFBBVEgiCi1tc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgZ2l0IGd1aSBuZWwgUEFUSCIKLQotIzogZ2l0LWd1aS5zaDoyNDU1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKLW1zZ2lkICJSZXBvc2l0b3J5IgotbXNnc3RyICJBcmNoaXZpbyIKLQotIzogZ2l0LWd1aS5zaDoyNDU2Ci1tc2dpZCAiRWRpdCIKLW1zZ3N0ciAiTW9kaWZpY2EiCi0KLSM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCi1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICJSYW1vIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAotbXNnaWQgIkNvbW1pdEBAbm91biIKLW1zZ3N0ciAiUmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKLW1zZ2lkICJNZXJnZSIKLW1zZ3N0ciAiRnVzaW9uZSAoTWVyZ2UpIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjUgbGliL2Nob29zZV9yZXYudGNsOjU1NwotbXNnaWQgIlJlbW90ZSIKLW1zZ3N0ciAiUmVtb3RvIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjgKLW1zZ2lkICJUb29scyIKLW1zZ3N0ciAiQWNjZXNzb3JpIgotCi0jOiBnaXQtZ3VpLnNoOjI0NzcKLW1zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKLW1zZ3N0ciAiRXNwbG9yYSBjb3BpYSBkaSBsYXZvcm8iCi0KLSM6IGdpdC1ndWkuc2g6MjQ4MwotbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgotbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkZWwgcmFtbyBhdHR1YWxlIgotCi0jOiBnaXQtZ3VpLnNoOjI0ODcKLW1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgotbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkZWwgcmFtby4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNDkyCi1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKLW1zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRlbCByYW1vIGF0dHVhbGUiCi0KLSM6IGdpdC1ndWkuc2g6MjQ5NgotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCi1tc2dzdHIgIlZpc3VhbGl6emEgbGEgY3Jvbm9sb2dpYSBkaSB0dXR0aSBpIHJhbWkiCi0KLSM6IGdpdC1ndWkuc2g6MjUwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgotbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkaSAlcyIKLQotIzogZ2l0LWd1aS5zaDoyNTA1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKLW1zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRpICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI1MTAgbGliL2RhdGFiYXNlLnRjbDoyNyBsaWIvZGF0YWJhc2UudGNsOjY3Ci1tc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKLW1zZ3N0ciAiU3RhdGlzdGljaGUgZGVsbCdhcmNoaXZpbyIKLQotIzogZ2l0LWd1aS5zaDoyNTEzIGxpYi9kYXRhYmFzZS50Y2w6MzQKLW1zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKLW1zZ3N0ciAiQ29tcHJpbWkgbCdhcmNoaXZpbyIKLQotIzogZ2l0LWd1aS5zaDoyNTE2Ci1tc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgotbXNnc3RyICJWZXJpZmljYSBsJ2FyY2hpdmlvIgotCi0jOiBnaXQtZ3VpLnNoOjI1MjMgZ2l0LWd1aS5zaDoyNTI3IGdpdC1ndWkuc2g6MjUzMSBsaWIvc2hvcnRjdXQudGNsOjgKLSM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgotbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCi1tc2dzdHIgIkNyZWEgaWNvbmEgZGVza3RvcCIKLQotIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCi1tc2dpZCAiUXVpdCIKLW1zZ3N0ciAiRXNjaSIKLQotIzogZ2l0LWd1aS5zaDoyNTQ3Ci1tc2dpZCAiVW5kbyIKLW1zZ3N0ciAiQW5udWxsYSIKLQotIzogZ2l0LWd1aS5zaDoyNTUwCi1tc2dpZCAiUmVkbyIKLW1zZ3N0ciAiUmlwZXRpIgotCi0jOiBnaXQtZ3VpLnNoOjI1NTQgZ2l0LWd1aS5zaDozMTA5Ci1tc2dpZCAiQ3V0IgotbXNnc3RyICJUYWdsaWEiCi0KLSM6IGdpdC1ndWkuc2g6MjU1NyBnaXQtZ3VpLnNoOjMxMTIgZ2l0LWd1aS5zaDozMTg2IGdpdC1ndWkuc2g6MzI1OQotIzogbGliL2NvbnNvbGUudGNsOjY5Ci1tc2dpZCAiQ29weSIKLW1zZ3N0ciAiQ29waWEiCi0KLSM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKLW1zZ2lkICJQYXN0ZSIKLW1zZ3N0ciAiSW5jb2xsYSIKLQotIzogZ2l0LWd1aS5zaDoyNTYzIGdpdC1ndWkuc2g6MzExOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKLW1zZ2lkICJEZWxldGUiCi1tc2dzdHIgIkVsaW1pbmEiCi0KLSM6IGdpdC1ndWkuc2g6MjU2NyBnaXQtZ3VpLnNoOjMxMjIgZ2l0LWd1aS5zaDozMjYzIGxpYi9jb25zb2xlLnRjbDo3MQotbXNnaWQgIlNlbGVjdCBBbGwiCi1tc2dzdHIgIlNlbGV6aW9uYSB0dXR0byIKLQotIzogZ2l0LWd1aS5zaDoyNTc2Ci1tc2dpZCAiQ3JlYXRlLi4uIgotbXNnc3RyICJDcmVhLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODIKLW1zZ2lkICJDaGVja291dC4uLiIKLW1zZ3N0ciAiQXR0aXZhLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODgKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgIlJpbm9taW5hIgotCi0jOiBnaXQtZ3VpLnNoOjI1OTMKLW1zZ2lkICJEZWxldGUuLi4iCi1tc2dzdHIgIkVsaW1pbmEuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjU5OAotbXNnaWQgIlJlc2V0Li4uIgotbXNnc3RyICJSaXByaXN0aW5hLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI2MDgKLW1zZ2lkICJEb25lIgotbXNnc3RyICJGYXR0byIKLQotIzogZ2l0LWd1aS5zaDoyNjEwCi1tc2dpZCAiQ29tbWl0QEB2ZXJiIgotbXNnc3RyICJOdW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKLW1zZ2lkICJOZXcgQ29tbWl0IgotbXNnc3RyICJOdW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MjYyNyBnaXQtZ3VpLnNoOjMwNTcKLW1zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKLW1zZ3N0ciAiQ29ycmVnZ2kgbCd1bHRpbWEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjI2MzcgZ2l0LWd1aS5zaDozMDExIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKLW1zZ2lkICJSZXNjYW4iCi1tc2dzdHIgIkFuYWxpenphIG51b3ZhbWVudGUiCi0KLSM6IGdpdC1ndWkuc2g6MjY0MwotbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKLW1zZ3N0ciAiUHJlcGFyYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDoyNjQ5Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCi1tc2dzdHIgIlByZXBhcmEgaSBmaWxlIG1vZGlmaWNhdGkgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MjY1NQotbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCi1tc2dzdHIgIkFubnVsbGEgcHJlcGFyYXppb25lIgotCi0jOiBnaXQtZ3VpLnNoOjI2NjEgbGliL2luZGV4LnRjbDo0MTIKLW1zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKLW1zZ3N0ciAiQW5udWxsYSBtb2RpZmljaGUiCi0KLSM6IGdpdC1ndWkuc2g6MjY2OSBnaXQtZ3VpLnNoOjMzMTAgZ2l0LWd1aS5zaDozMzQxCi1tc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCi1tc2dzdHIgIk1vc3RyYSBtZW5vIGNvbnRlc3RvIgotCi0jOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQotbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgotbXNnc3RyICJNb3N0cmEgcGnDuSBjb250ZXN0byIKLQotIzogZ2l0LWd1aS5zaDoyNjgwIGdpdC1ndWkuc2g6MzAyNCBnaXQtZ3VpLnNoOjMxMzMKLW1zZ2lkICJTaWduIE9mZiIKLW1zZ3N0ciAiU2lnbiBPZmYiCi0KLSM6IGdpdC1ndWkuc2g6MjY5NgotbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgotbXNnc3RyICJGdXNpb25lIGxvY2FsZS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzAxCi1tc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCi1tc2dzdHIgIkludGVycm9tcGkgZnVzaW9uZS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQotbXNnaWQgIkFkZC4uLiIKLW1zZ3N0ciAiQWdnaXVuZ2kuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjcxNwotbXNnaWQgIlB1c2guLi4iCi1tc2dzdHIgIlByb3BhZ2EuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjcyMQotbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCi1tc2dzdHIgIkVsaW1pbmEgcmFtby4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzMxIGdpdC1ndWkuc2g6MzI5MgotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgIk9wemlvbmkuLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc0MgotbXNnaWQgIlJlbW92ZS4uLiIKLW1zZ3N0ciAiUmltdW92aS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJBaXV0byIKLQotIzogZ2l0LWd1aS5zaDoyNzU1IGdpdC1ndWkuc2g6Mjc1OSBsaWIvYWJvdXQudGNsOjE0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm91dCAlcyIKLW1zZ3N0ciAiSW5mb3JtYXppb25pIHN1ICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI3ODMKLW1zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKLW1zZ3N0ciAiRG9jdW1lbnRhemlvbmUgc3VsIHdlYiIKLQotIzogZ2l0LWd1aS5zaDoyNzg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NgotbXNnaWQgIlNob3cgU1NIIEtleSIKLW1zZ3N0ciAiTW9zdHJhIGNoYXZlIFNTSCIKLQotIzogZ2l0LWd1aS5zaDoyODkzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgogbXNnc3RyICIiCi0iZXJyb3JlIGdyYXZlOiBpbXBvc3NpYmlsZSBlZmZldHR1YXJlIGxvIHN0YXQgZGVsIHBhdGggJXM6IGZpbGUgbyBkaXJlY3RvcnkgIgotIm5vbiB0cm92YXRhIgogCi0jOiBnaXQtZ3VpLnNoOjI5MjYKLW1zZ2lkICJDdXJyZW50IEJyYW5jaDoiCi1tc2dzdHIgIlJhbW8gYXR0dWFsZToiCisjOiBidW5kbGUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgImhlYWRlciBub24gcmljb25vc2NpdXRvOiAlcyVzICglZCkiCiAKLSM6IGdpdC1ndWkuc2g6Mjk0NwotbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCi1tc2dzdHIgIk1vZGlmaWNoZSBwcmVwYXJhdGUgKHNhcmFubm8gbmVsbGEgbnVvdmEgcmV2aXNpb25lKSIKKyM6IGJ1bmRsZS5jOjg5IGJ1aWx0aW4vY29tbWl0LmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYXByaXJlICclcyciCiAKLSM6IGdpdC1ndWkuc2g6Mjk2NwotbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCi1tc2dzdHIgIk1vZGlmaWNoZSBub24gcHJlcGFyYXRlIgorIzogYnVuZGxlLmM6MTQwCittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCittc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDozMDE3Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAiUHJlcGFyYSBtb2RpZmljYXRpIgorIzogYnVuZGxlLmM6MTY0IHNlcXVlbmNlci5jOjU1MCBzZXF1ZW5jZXIuYzo5ODIgYnVpbHRpbi9sb2cuYzoyODkKKyM6IGJ1aWx0aW4vbG9nLmM6NzIwIGJ1aWx0aW4vbG9nLmM6MTMwOSBidWlsdGluL2xvZy5jOjE1MjggYnVpbHRpbi9tZXJnZS5jOjM0NworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE4MQorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzAzNiBsaWIvdHJhbnNwb3J0LnRjbDoxMDQgbGliL3RyYW5zcG9ydC50Y2w6MTkzCi1tc2dpZCAiUHVzaCIKLW1zZ3N0ciAiUHJvcGFnYSAoUHVzaCkiCisjOiBidW5kbGUuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyAlZCByZWYiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgJWQgcmVmcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCiAKLSM6IGdpdC1ndWkuc2g6MzA3MQotbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdnaW8gZGkgcmV2aXNpb25lIGluaXppYWxlOiIKKyM6IGJ1bmRsZS5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmIgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgogCi0jOiBnaXQtZ3VpLnNoOjMwNzIKLW1zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiTWVzc2FnZ2lvIGRpIHJldmlzaW9uZSBjb3JyZXR0bzoiCisjOiBidW5kbGUuYzoyOTAKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzA3MwotbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIk1lc3NhZ2dpbyBpbml6aWFsZSBkaSByZXZpc2lvbmUgY29ycmV0dG86IgorIzogYnVuZGxlLmM6Mjk2IGJ1aWx0aW4vbG9nLmM6MTIwNSBidWlsdGluL3Nob3J0bG9nLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byBub24gcmljb25vc2NpdXRvOiAlcyIKIAotIzogZ2l0LWd1aS5zaDozMDc0Ci1tc2dpZCAiQW1lbmRlZCBNZXJnZSBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIk1lc3NhZ2dpbyBkaSBmdXNpb25lIGNvcnJldHRvOiIKKyM6IGJ1bmRsZS5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAiaWwgcmVmICclcycgw6ggZXNjbHVzbyBkYWxsZSBvcHppb25pIGRpIHJldi1saXN0IgogCi0jOiBnaXQtZ3VpLnNoOjMwNzUKLW1zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIk1lc3NhZ2dpbyBkaSBmdXNpb25lOiIKKyM6IGJ1bmRsZS5jOjM3NgorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzA3NgotbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiTWVzc2FnZ2lvIGRpIHJldmlzaW9uZToiCisjOiBidW5kbGUuYzozOTQKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzEyNSBnaXQtZ3VpLnNoOjMyNjcgbGliL2NvbnNvbGUudGNsOjczCi1tc2dpZCAiQ29weSBBbGwiCi1tc2dzdHIgIkNvcGlhIHR1dHRvIgorIzogYnVuZGxlLmM6NDEyCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Ci1tc2dpZCAiRmlsZToiCi1tc2dzdHIgIkZpbGU6IgorIzogYnVuZGxlLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlICclcyciCiAKLSM6IGdpdC1ndWkuc2g6MzI1NQotbXNnaWQgIlJlZnJlc2giCi1tc2dzdHIgIlJpbmZyZXNjYSIKKyM6IGJ1bmRsZS5jOjQzNworbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjMyNzYKLW1zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCi1tc2dzdHIgIkRpbWludWlzY2kgZGltZW5zaW9uZSBjYXJhdHRlcmkiCisjOiBjb21taXQuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYW5hbGl6emFyZSAlcyIKIAotIzogZ2l0LWd1aS5zaDozMjgwCi1tc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJBdW1lbnRhIGRpbWVuc2lvbmUgY2FyYXR0ZXJpIgorIzogY29tbWl0LmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMgbm9uIMOoIHVuIGNvbW1pdCEiCiAKLSM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQotbXNnaWQgIkVuY29kaW5nIgotbXNnc3RyICJDb2RpZmljYSIKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibWVtb3JpYSBlc2F1cml0YSIKIAotIzogZ2l0LWd1aS5zaDozMjk5Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgotbXNnc3RyICJBcHBsaWNhL0ludmVydGkgc2V6aW9uZSIKKyM6IGNvbm5lY3RlZC5jOjM5Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBlc2VndWlyZSAnZ2l0LXJldi1saXN0JyIKIAotIzogZ2l0LWd1aS5zaDozMzA0Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgotbXNnc3RyICJBcHBsaWNhL0ludmVydGkgcmlnYSIKKyM6IGNvbm5lY3RlZC5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiCittc2dzdHIgInNjcml0dHVyYSBuZWxsYSByZXYtbGlzdCBub24gcml1c2NpdGE6ICVzIgogCi0jOiBnaXQtZ3VpLnNoOjMzMjMKLW1zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiQXZ2aWEgcHJvZ3JhbW1hIGVzdGVybm8gcGVyIGxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkiCisjOiBjb25uZWN0ZWQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbjogJXMiCittc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDozMzI4Ci1tc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgotbXNnc3RyICJVc2EgdmVyc2lvbmUgcmVtb3RhIgorIzogZGF0ZS5jOjk1Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiaW4gZnV0dXJvIgogCi0jOiBnaXQtZ3VpLnNoOjMzMzIKLW1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKLW1zZ3N0ciAiVXNhIHZlcnNpb25lIGxvY2FsZSIKKyM6IGRhdGUuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJWx1IHNlY29uZG8gZmEiCittc2dzdHJbMV0gIiVsdSBzZWNvbmRpIGZhIgogCi0jOiBnaXQtZ3VpLnNoOjMzMzYKLW1zZ2lkICJSZXZlcnQgVG8gQmFzZSIKLW1zZ3N0ciAiUml0b3JuYSBhbGxhIHJldmlzaW9uZSBjb211bmUiCisjOiBkYXRlLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgbWludXRlcyBhZ28iCittc2dzdHJbMF0gIiVsdSB1biBtaW51dG8gZmEiCittc2dzdHJbMV0gIiVsdSBtaW51dGkgZmEiCiAKLSM6IGdpdC1ndWkuc2g6MzM1NAotbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIlZpc3VhbGl6emEgcXVlc3RlIG1vZGlmaWNoZSBuZWwgc290dG9tb2R1bG8iCisjOiBkYXRlLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGhvdXJzIGFnbyIKK21zZ3N0clswXSAiJWx1IG9yYSBmYSIKK21zZ3N0clsxXSAiJWx1IG9yZSBmYSIKIAotIzogZ2l0LWd1aS5zaDozMzU4Ci1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRlbCByYW1vIGF0dHVhbGUgbmVsIHNvdHRvbW9kdWxvIgorIzogZGF0ZS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGRheXMgYWdvIgorbXNnc3RyWzBdICIlbHUgZ2lvcm5vIGZhIgorbXNnc3RyWzFdICIlbHUgZ2lvcm5pIGZhIgogCi0jOiBnaXQtZ3VpLnNoOjMzNjIKLW1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIlZpc3VhbGl6emEgbGEgY3Jvbm9sb2dpYSBkaSB0dXR0aSBpIHJhbWkgbmVsIHNvdHRvbW9kdWxvIgorIzogZGF0ZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiVsdSBzZXR0aW1hbmEgZmEiCittc2dzdHJbMV0gIiVsdSBzZXR0aW1hbmUgZmEiCiAKLSM6IGdpdC1ndWkuc2g6MzM2NwotbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiQXZ2aWEgZ2l0IGd1aSBuZWwgc290dG9tb2R1bG8iCisjOiBkYXRlLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlbHUgbWVzZSBmYSIKK21zZ3N0clsxXSAiJWx1IG1lc2kgZmEiCiAKLSM6IGdpdC1ndWkuc2g6MzM4OQotbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUgZGVsbGEgc2V6aW9uZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKyM6IGRhdGUuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIiCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyIKK21zZ3N0clswXSAiJWx1IGFubm8iCittc2dzdHJbMV0gIiVsdSBhbm5pIgogCi0jOiBnaXQtZ3VpLnNoOjMzOTEKLW1zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgotbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsZSBsaW5lZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKyM6IGRhdGUuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsICVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlbHUgbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJXMsICVsdSBtZXNlIGZhIgorbXNnc3RyWzFdICIlcywgJWx1IG1lc2kgZmEiCiAKLSM6IGdpdC1ndWkuc2g6MzM5MwotbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUgZGVsbGEgbGluZWEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisjOiBkYXRlLmM6MTU0IGRhdGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMgYWdvIgorbXNnc3RyWzBdICIlbHUgYW5ubyBmYSIKK21zZ3N0clsxXSAiJWx1IGFubmkgZmEiCiAKLSM6IGdpdC1ndWkuc2g6MzM5NgotbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKLW1zZ3N0ciAiUHJlcGFyYSBzZXppb25lIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorIzogZGlmZi5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJS4qcydcbiIKK21zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjMzOTgKLW1zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgotbXNnc3RyICJQcmVwYXJhIGxpbmVlIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorIzogZGlmZi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyUuKnMnXG4iCittc2dzdHIgIiAgUGFyYW1ldHJvIGRpcnN0YXQgJyUuKnMnIHNjb25vc2NpdXRvXG4iCiAKLSM6IGdpdC1ndWkuc2g6MzQwMAotbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKLW1zZ3N0ciAiUHJlcGFyYSBsaW5lYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDozNDI0Ci1tc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgotbXNnc3RyICJJbml6aWFsaXp6YXppb25lLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjM1NDEKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzoyMTAKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKLSJcbiIKLSJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKLSJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKLSJieSAlczpcbiIKLSJcbiIKLW1zZ3N0ciAiIgotIlBvc3NpYmlsaSBwcm9ibGVtaSBjb24gbGUgdmFyaWFiaWxpIGQnYW1iaWVudGUuXG4iCi0iXG4iCi0iTGUgc2VndWVudGkgdmFyaWFiaWxpIGQnYW1iaWVudGUgc2FyYW5ubyBwcm9iYWJpbG1lbnRlXG4iCi0iaWdub3JhdGUgZGEgdHV0dGkgaSBzb3R0b3Byb2Nlc3NpIGRpIEdpdCBhdnZpYXRpXG4iCi0iZGEgJXM6XG4iCi0iXG4iCi0KLSM6IGdpdC1ndWkuc2g6MzU3MAotbXNnaWQgIiIKLSJcbiIKLSJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCi0iVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgotbXNnc3RyICIiCi0iXG4iCi0iQ2nDsiDDqCBkb3Z1dG8gYSB1biBwcm9ibGVtYSBjb25vc2NpdXRvXG4iCi0iY2F1c2F0byBkYWxsJ2VzZWd1aWJpbGUgVGNsIGRpc3RyaWJ1aXRvIGRhIEN5Z3dpbi4iCi0KLSM6IGdpdC1ndWkuc2g6MzU3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJcbiIKLSJcbiIKLSJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCi0iaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCi0idXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKLSJ+Ly5naXRjb25maWcgZmlsZS5cbiIKLW1zZ3N0ciAiIgotIlxuIgotIlxuIgotIlVuYSBidW9uYSBhbHRlcm5hdGl2YSBhICVzXG4iCi0iY29uc2lzdGUgbmVsbCdhc3NlZ25hcmUgdmFsb3JpIGFsbGUgdmFyaWFiaWxpIGRpIGNvbmZpZ3VyYXppb25lXG4iCi0idXNlci5uYW1lIGUgdXNlci5lbWFpbCBuZWwgdHVvIGZpbGUgfi8uZ2l0Y29uZmlnIHBlcnNvbmFsZS5cbiIKLQotIzogbGliL2Fib3V0LnRjbDoyNgotbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKLW1zZ3N0ciAiZ2l0LWd1aSAtIHVuJ2ludGVyZmFjY2lhIGdyYWZpY2EgcGVyIEdpdC4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzIKLW1zZ2lkICJGaWxlIFZpZXdlciIKLW1zZ3N0ciAiTW9zdHJhIGZpbGUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzgKLW1zZ2lkICJDb21taXQ6IgotbXNnc3RyICJSZXZpc2lvbmU6IgotCi0jOiBsaWIvYmxhbWUudGNsOjI3MQotbXNnaWQgIkNvcHkgQ29tbWl0IgotbXNnc3RyICJDb3BpYSByZXZpc2lvbmUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjc1Ci1tc2dpZCAiRmluZCBUZXh0Li4uIgotbXNnc3RyICJUcm92YSB0ZXN0by4uLiIKLQotIzogbGliL2JsYW1lLnRjbDoyODQKLW1zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgotbXNnc3RyICJSaWNlcmNhIGFjY3VyYXRhIGRlbGxlIGNvcGllIgotCi0jOiBsaWIvYmxhbWUudGNsOjI4OAotbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgotbXNnc3RyICJNb3N0cmEgY29udGVzdG8gbmVsbGEgY3Jvbm9sb2dpYSIKLQotIzogbGliL2JsYW1lLnRjbDoyOTEKLW1zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgotbXNnc3RyICJBbm5vdGEgbGEgcmV2aXNpb25lIHByZWNlZGVudGUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NDUwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVhZGluZyAlcy4uLiIKLW1zZ3N0ciAiTGV0dHVyYSBkaSAlcy4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo1NTcKLW1zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAiQ2FyaWNhbWVudG8gYW5ub3RhemlvbmkgcGVyIGNvcGllL3Nwb3N0YW1lbnRpLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjU3NwotbXNnaWQgImxpbmVzIGFubm90YXRlZCIKLW1zZ3N0ciAibGluZWUgYW5ub3RhdGUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzY5Ci1tc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAiQ2FyaWNhbWVudG8gYW5ub3RhemlvbmkgcGVyIHBvc2l6aW9uZSBvcmlnaW5hcmlhLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjc3MgotbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgotbXNnc3RyICJBbm5vdGF6aW9uZSBjb21wbGV0YXRhLiIKLQotIzogbGliL2JsYW1lLnRjbDo4MDIKLW1zZ2lkICJCdXN5IgotbXNnc3RyICJPY2N1cGF0byIKLQotIzogbGliL2JsYW1lLnRjbDo4MDMKLW1zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKLW1zZ3N0ciAiSWwgcHJvY2Vzc28gZGkgYW5ub3RhemlvbmUgw6ggZ2nDoCBpbiBjb3Jzby4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODQyCi1tc2dpZCAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiIKLW1zZ3N0ciAiUmljZXJjYSBhY2N1cmF0YSBkZWxsZSBjb3BpZSBpbiBjb3Jzby4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo5MTAKLW1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCi1tc2dzdHIgIkNhcmljYW1lbnRvIGFubm90YXppb25pLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjk2MwotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgIkF1dG9yZToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6OTY3Ci1tc2dpZCAiQ29tbWl0dGVyOiIKLW1zZ3N0ciAiUmV2aXNpb25lIGNyZWF0YSBkYToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6OTcyCi1tc2dpZCAiT3JpZ2luYWwgRmlsZToiCi1tc2dzdHIgIkZpbGUgb3JpZ2luYXJpbzoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAyMAotbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBsYSByZXZpc2lvbmUgSEVBRDoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTA3NQotbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgotbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDkwCi1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgotbXNnc3RyICJJbXBvc3NpYmlsZSB2aXN1YWxpenphcmUgbGEgcmV2aXNpb25lIHByZWNlZGVudGUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTA5MSBsaWIvZGlmZi50Y2w6MzIwCi1tc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKLW1zZ3N0ciAiRXJyb3JlIG5lbCBjYXJpY2FtZW50byBkZWxsZSBkaWZmZXJlbnplOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjMxCi1tc2dpZCAiT3JpZ2luYWxseSBCeToiCi1tc2dzdHIgIkluIG9yaWdpbmUgZGE6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEyMzcKLW1zZ2lkICJJbiBGaWxlOiIKLW1zZ3N0ciAiTmVsIGZpbGU6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEyNDIKLW1zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCi1tc2dzdHIgIkNvcGlhdG8gbyBzcG9zdGF0byBxdWkgZGE6IgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxNCBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxOQotbXNnaWQgIkNoZWNrb3V0IEJyYW5jaCIKLW1zZ3N0ciAiQXR0aXZhIHJhbW8iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIzCi1tc2dpZCAiQ2hlY2tvdXQiCi1tc2dzdHIgIkF0dGl2YSIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjM1Ci0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMwIGxpYi9icm93c2VyLnRjbDoyODIKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKLSM6IGxpYi9vcHRpb24udGNsOjEyNSBsaWIvcmVtb3RlX2FkZC50Y2w6MzIgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MgotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDAgbGliL3Rvb2xzX2RsZy50Y2w6MjA0IGxpYi90b29sc19kbGcudGNsOjM1MgotIzogbGliL3RyYW5zcG9ydC50Y2w6MTA4Ci1tc2dpZCAiQ2FuY2VsIgotbXNnc3RyICJBbm51bGxhIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg3IGxpYi90b29sc19kbGcudGNsOjMyOAotbXNnaWQgIlJldmlzaW9uIgotbXNnc3RyICJSZXZpc2lvbmUiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM2IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDoyODAKLW1zZ2lkICJPcHRpb25zIgotbXNnc3RyICJPcHppb25pIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKLW1zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIlJlY3VwZXJhIGR1cGxpY2F0byBsb2NhbGUgZGkgcmFtbyByZW1vdG8iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Ci1tc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgotbXNnc3RyICJTdGFjY2EgZGEgcmFtbyBsb2NhbGUiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgotbXNnaWQgIkNyZWF0ZSBCcmFuY2giCi1tc2dzdHIgIkNyZWEgcmFtbyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI3Ci1tc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCi1tc2dzdHIgIkNyZWEgbnVvdm8gcmFtbyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxCi1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICJDcmVhIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDAKLW1zZ2lkICJCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiTm9tZSBkZWwgcmFtbyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQzIGxpYi9yZW1vdGVfYWRkLnRjbDozOSBsaWIvdG9vbHNfZGxnLnRjbDo1MAotbXNnaWQgIk5hbWU6IgotbXNnc3RyICJOb21lOiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU4Ci1tc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCi1tc2dzdHIgIkFwcGFpYSBub21lIGRlbCBkdXBsaWNhdG8gbG9jYWxlIGRpIHJhbW8gcmVtb3RvIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKLW1zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKLW1zZ3N0ciAiUmV2aXNpb25lIGluaXppYWxlIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKLW1zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKLW1zZ3N0ciAiQWdnaW9ybmEgcmFtbyBlc2lzdGVudGU6IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKLW1zZ2lkICJObyIKLW1zZ3N0ciAiTm8iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAotbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgotbXNnc3RyICJTb2xvIGZhc3QgZm9yd2FyZCIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTcxCi1tc2dpZCAiUmVzZXQiCi1tc2dzdHIgIlJpcHJpc3RpbmEiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NwotbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgotbXNnc3RyICJBdHRpdmEgZG9wbyBsYSBjcmVhemlvbmUiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzEKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKLW1zZ3N0ciAiU2NlZ2xpZXJlIHVuIGR1cGxpY2F0byBsb2NhbGUgZGkgcmFtbyByZW1vdG8iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIiIKLSJJbCBkdXBsaWNhdG8gbG9jYWxlIGRlbCByYW1vIHJlbW90byAlcyBub24gw6ggdW4gcmFtbyBuZWxsJ2FyY2hpdmlvIHJlbW90by4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Ci1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAiSW5zZXJpcmUgdW4gbm9tZSBwZXIgaWwgcmFtby4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgotbXNnc3RyICInJXMnIG5vbiDDqCB1dGlsaXp6YWJpbGUgY29tZSBub21lIGRpIHJhbW8uIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKLW1zZ2lkICJEZWxldGUgQnJhbmNoIgotbXNnc3RyICJFbGltaW5hIHJhbW8iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAotbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCi1tc2dzdHIgIkVsaW1pbmEgcmFtbyBsb2NhbGUiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNwotbXNnaWQgIkxvY2FsIEJyYW5jaGVzIgotbXNnc3RyICJSYW1pIGxvY2FsaSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCi1tc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCi1tc2dzdHIgIkNhbmNlbGxhIHNvbG8gc2UgZnVzbyBjb24gdW4gYWx0cm8gcmFtbyIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Ci1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgotbXNnc3RyICJTZW1wcmUgKG5vbiB2ZXJpZmljYXJlIGxlIGZ1c2lvbmkpIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgotbXNnc3RyICJJIHJhbWkgc2VndWVudGkgbm9uIHNvbm8gc3RhdGkgZnVzaSBjb21wbGV0YW1lbnRlIGluICVzOiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNwotbXNnaWQgIiIKLSJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgotIlxuIgotIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgotbXNnc3RyICIiCi0iUmlwcmlzdGluYXJlIHJhbWkgY2FuY2VsbGF0aSDDqCBkaWZmaWNpbGUuXG4iCi0iXG4iCi0iQ2FuY2VsbGFyZSBpIHJhbWkgc2VsZXppb25hdGk/IgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKICIlcyIKIG1zZ3N0ciAiIgotIkltcG9zc2liaWxlIGNhbmNlbGxhcmUgaSByYW1pOlxuIgorIlRyb3ZhdGkgZXJyb3JpIG5lbGxhIHZhcmlhYmlsZSBkaSBjb25maWd1cmF6aW9uZSAnZGlmZi5kaXJzdGF0JzpcbiIKICIlcyIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgotbXNnaWQgIlJlbmFtZSBCcmFuY2giCi1tc2dzdHIgIlJpbm9taW5hIHJhbW8iCisjOiBkaWZmLmM6MTQwMAorbXNnaWQgIiAwIGZpbGVzIGNoYW5nZWRcbiIKK21zZ3N0ciAiIDAgZmlsZSBtb2RpZmljYXRpXG4iCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgotbXNnaWQgIlJlbmFtZSIKLW1zZ3N0ciAiUmlub21pbmEiCisjOiBkaWZmLmM6MTQwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgJWQgZmlsZSBjaGFuZ2VkIgorbXNnaWRfcGx1cmFsICIgJWQgZmlsZXMgY2hhbmdlZCIKK21zZ3N0clswXSAiICVkIGZpbGUgbW9kaWZpY2F0byIKK21zZ3N0clsxXSAiICVkIGZpbGUgbW9kaWZpY2F0aSIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM2Ci1tc2dpZCAiQnJhbmNoOiIKLW1zZ3N0ciAiUmFtbzoiCisjOiBkaWZmLmM6MTQyMQorIywgYy1mb3JtYXQKK21zZ2lkICIsICVkIGluc2VydGlvbigrKSIKK21zZ2lkX3BsdXJhbCAiLCAlZCBpbnNlcnRpb25zKCspIgorbXNnc3RyWzBdICIsICVkIGluc2VyemlvbmUoKykiCittc2dzdHJbMV0gIiwgJWQgaW5zZXJ6aW9uaSgrKSIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM5Ci1tc2dpZCAiTmV3IE5hbWU6IgotbXNnc3RyICJOdW92byBOb21lOiIKKyM6IGRpZmYuYzoxNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJWQgZGVsZXRpb24oLSkiCittc2dpZF9wbHVyYWwgIiwgJWQgZGVsZXRpb25zKC0pIgorbXNnc3RyWzBdICIuICVkIHJpbW96aW9uZSgtKSIKK21zZ3N0clsxXSAiLCAlZCByaW1vemlvbmkoLSkiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo3NQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKLW1zZ3N0ciAiU2NlZ2xpZXJlIHVuIHJhbW8gZGEgcmlub21pbmFyZS4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiSWwgcmFtbyAnJXMnIGVzaXN0ZSBnacOgLiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCi1tc2dzdHIgIkltcG9zc2liaWxlIHJpbm9taW5hcmUgJyVzJy4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxNwotbXNnaWQgIlN0YXJ0aW5nLi4uIgotbXNnc3RyICJBdnZpbyBpbiBjb3Jzby4uLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI2Ci1tc2dpZCAiRmlsZSBCcm93c2VyIgotbXNnc3RyICJGaWxlIGJyb3dzZXIiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxMjYgbGliL2Jyb3dzZXIudGNsOjE0MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvYWRpbmcgJXMuLi4iCi1tc2dzdHIgIkNhcmljYW1lbnRvICVzLi4uIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTg3Ci1tc2dpZCAiW1VwIFRvIFBhcmVudF0iCi1tc2dzdHIgIltEaXJlY3Rvcnkgc3VwZXJpb3JlXSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI2NyBsaWIvYnJvd3Nlci50Y2w6MjczCi1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAiRXNwbG9yYSBpIGZpbGUgZGVsIHJhbW8iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTgKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKLW1zZ2lkICJCcm93c2UiCi1tc2dzdHIgIkVzcGxvcmEiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgotbXNnc3RyICJSZWN1cGVybyAlcyBkYSAlcyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCi1tc2dzdHIgImVycm9yZSBncmF2ZTogaW1wb3NzaWJpbGUgcmlzb2x2ZXJlICVzIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQotIzogbGliL3NzaGtleS50Y2w6NTMKLW1zZ2lkICJDbG9zZSIKLW1zZ3N0ciAiQ2hpdWRpIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKLW1zZ3N0ciAiSWwgcmFtbyAnJXMnIG5vbiBlc2lzdGUuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGNvbmZpZ3VyYXJlIGdpdC1wdWxsIHNlbXBsaWZpY2F0byBwZXIgJyVzJy4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5Ci0jLCB0Y2wtZm9ybWF0CisjOiBkaWZmLmM6MzQ3OAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCi0iXG4iCi0iSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKLSJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCiBtc2dzdHIgIiIKLSJJbCByYW1vICclcycgZXNpc3RlIGdpw6AuXG4iCi0iXG4iCi0iTm9uIHB1w7IgZWZmZXR0dWFyZSB1biAnZmFzdC1mb3J3YXJkJyBhICVzLlxuIgotIkUnIG5lY2Vzc2FyaWEgdW5hIGZ1c2lvbmUuIgorIkFuYWxpc2kgZGVsIHBhcmFtZXRybyBkZWxsJ29wemlvbmUgLS1kaXJzdGF0Ly1YIG5vbiByaXVzY2l0YTpcbiIKKyIlcyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJMYSBzdHJhdGVnaWEgZGkgZnVzaW9uZSAnJXMnIG5vbiDDqCBzdXBwb3J0YXRhLiIKKyM6IGdwZy1pbnRlcmZhY2UuYzo1OQorbXNnaWQgImNvdWxkIG5vdCBydW4gZ3BnLiIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBlc2VndWlyZSBncGcuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgJyVzJy4iCisjOiBncGctaW50ZXJmYWNlLmM6NzEKK21zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCittc2dzdHIgImdwZyBub24gaGEgYWNjZXR0YXRvIGkgZGF0aSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKLW1zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCisjOiBncGctaW50ZXJmYWNlLmM6ODIKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyBub24gw6ggcml1c2NpdG8gYSBmaXJtYXJlIGkgZGF0aSIKKworIzogZ3JlcC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiclcyc6IGltcG9zc2liaWxlIGxlZ2dlcmUgJXMiCisKKyM6IGdyZXAuYzoxMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6ICVzIgorbXNnc3RyICInJXMnOiAlcyIKKworIzogZ3JlcC5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCAlcyIKIG1zZ3N0ciAiIgotIkwnYXJlYSBkaSBwcmVwYXJhemlvbmUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgKGluZGljZSkgw6ggZ2nDoCBibG9jY2F0YS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5CisjOiBoZWxwLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiY29tYW5kaSBnaXQgZGlzcG9uaWJpbGkgaW4gJyVzJyIKKworIzogaGVscC5jOjIxNAorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAiY29tYW5kaSBnaXQgZGlzcG9uaWJpbGkgYWx0cm92ZSBuZWwgdHVvICRQQVRIIgorCisjOiBoZWxwLmM6MjcwCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgogbXNnc3RyICIiCi0iTCd1bHRpbW8gc3RhdG8gYW5hbGl6emF0byBub24gY29ycmlzcG9uZGUgYWxsbyBzdGF0byBkZWxsJ2FyY2hpdmlvLlxuIgotIlxuIgotIlVuIGFsdHJvIHByb2dyYW1tYSBHaXQgaGEgbW9kaWZpY2F0byBxdWVzdG8gYXJjaGl2aW8gZGFsbCd1bHRpbWEgYW5hbGlzaS4gIgotIkJpc29nbmEgZWZmZXR0dWFyZSB1bmEgbnVvdmEgYW5hbGlzaSBwcmltYSBkaSBwb3RlciBjYW1iaWFyZSBpbCByYW1vICIKLSJhdHR1YWxlLlxuIgotIlxuIgotIkxhIG51b3ZhIGFuYWxpc2kgY29taW5jZXLDoCBvcmEuXG4iCisiJyVzJyBzZW1icmEgZXNzZXJlIHVuIGNvbWFuZG8gZ2l0LCBtYSBub24gw6ggc3RhdG9cbiIKKyJwb3NzaWJpbGUgZXNlZ3VpcmxvLiBGb3JzZSBnaXQtJXMgw6ggY29ycm90dG8/IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCi1tc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyBhICclcycgaW4gY29yc28uLi4iCisjOiBoZWxwLmM6MzI3Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIk9oIG9oLiBJbCB0dW8gc2lzdGVtYSBub24gcmlwb3J0YSBhbGN1biBjb21hbmRvIEdpdC4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Ci1tc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCi1tc2dzdHIgImZpbGUgcHJlc2VudGkgbmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgotbXNnc3RyICJBdHRpdmF6aW9uZSBkaSAnJXMnIGZhbGxpdGEgKHJpY2hpZXN0YSB1bmEgZnVzaW9uZSBhIGxpdmVsbG8gZmlsZSkuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NwotbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgotbXNnc3RyICJFJyByaWNoaWVzdGEgdW5hIGZ1c2lvbmUgYSBsaXZlbGxvIGZpbGUuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgotbXNnc3RyICJTaSByaW1hcnLDoCBzdWwgcmFtbyAnJXMnLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKKyM6IGhlbHAuYzozNDkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgotIlxuIgotIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgIgotIkNoZWNrb3V0Jy4iCisiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LlxuIgorIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJyIKIG1zZ3N0ciAiIgotIk5vbiBzaSDDqCBwacO5IHN1IHVuIHJhbW8gbG9jYWxlXG4iCi0iXG4iCi0iU2Ugc2kgdnVvbGUgcmltYW5lcmUgc3UgdW4gcmFtbywgY3JlYXJuZSB1bm8gb3JhIGEgcGFydGlyZSBkYSAnUXVlc3RhICIKLSJyZXZpc2lvbmUgYXR0aXZhIHN0YWNjYXRhJy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgIkF0dGl2YXppb25lIGRpICclcycgY29tcGxldGF0YS4iCisjOiBoZWxwLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImluICUwLjFmIHNlY29uZHMgYXV0b21hdGljYWxseS4uLiIKK21zZ3N0ciAiYXV0b21hdGljYW1lbnRlIHRyYSAlMC4xZiBzZWNvbmRpLi4uIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCi1tc2dzdHIgIiIKLSJSaXByaXN0aW5hcmUgJyVzJyBhICclcycgY29tcG9ydGVyw6AgbGEgcGVyZGl0YSBkZWxsZSBzZWd1ZW50aSByZXZpc2lvbmk6IgorIzogaGVscC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcycgbm9uIMOoIHVuIGNvbWFuZG8gZ2l0LiBWZWRpICdnaXQgLS1oZWxwJy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Ci1tc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKLW1zZ3N0ciAiUmljb21wb3JyZSBsZSByZXZpc2lvbmkgcGVyZHV0ZSBwb3RyZWJiZSBub24gZXNzZXJlIHNlbXBsaWNlLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAnJXMnPyIKLW1zZ3N0ciAiUmlwcmlzdGluYXJlICclcyc/IgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKLW1zZ2lkICJWaXN1YWxpemUiCi1tc2dzdHIgIlZpc3VhbGl6emEiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1Ci0jLCB0Y2wtZm9ybWF0CisjOiBoZWxwLmM6MzY1CiBtc2dpZCAiIgotIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCiAiXG4iCi0iVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKLSJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKICJcbiIKLSJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKLW1zZ3N0ciAiIgotIkltcG9zc2liaWxlIHByZXBhcmFyZSBpbCByYW1vIGF0dHVhbGUuXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKICJcbiIKLSJRdWVzdGEgZGlyZWN0b3J5IGRpIGxhdm9ybyDDqCBzdGF0YSBjb252ZXJ0aXRhIHNvbG8gcGFyemlhbG1lbnRlLiBJIGZpbGUgc29ubyAiCi0ic3RhdGkgYWdnaW9ybmF0aSBjb3JyZXR0YW1lbnRlLCBtYSBsJ2FnZ2lvcm5hbWVudG8gZGkgdW4gZmlsZSBkaSBHaXQgaGEgIgotInByb2RvdHRvIGRlZ2xpIGVycm9yaS5cbiIKKyJJbnRlbmRldmkgcXVlc3RvPyIKK21zZ3N0clsxXSAiIgogIlxuIgotIlF1ZXN0byBub24gc2FyZWJiZSBkb3Z1dG8gc3VjY2VkZXJlLiAgJXMgb3JhIHRlcm1pbmVyw6Agc2VuemEgYWx0cmUgYXppb25pLiIKKyJJbnRlbmRldmkgdW5vIGRpIHF1ZXN0aT8iCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MzkKLW1zZ2lkICJTZWxlY3QiCi1tc2dzdHIgIlNlbGV6aW9uYSIKKyM6IHBhcnNlLW9wdGlvbnMuYzo0OTMKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo1MwotbXNnaWQgIkZvbnQgRmFtaWx5IgotbXNnc3RyICJGYW1pZ2xpYSBkaSBjYXJhdHRlcmkiCisjOiBwYXJzZS1vcHRpb25zLmM6NTExCisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAiICAgdXNvOiAlcyIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo3NAotbXNnaWQgIkZvbnQgU2l6ZSIKLW1zZ3N0ciAiRGltZW5zaW9uZSBjYXJhdHRlcmkiCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisjLiBvbmUgaW4gInVzYWdlOiAlcyIgdHJhbnNsYXRpb24KKyM6IHBhcnNlLW9wdGlvbnMuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICJvcHB1cmU6ICVzIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkxCi1tc2dpZCAiRm9udCBFeGFtcGxlIgotbXNnc3RyICJFc2VtcGlvIGNhcmF0dGVyaSIKKyM6IHBhcnNlLW9wdGlvbnMuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTAzCisjOiByZW1vdGUuYzoxNjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIklsIHR1byBicmFuY2ggw6ggYXZhbnRpIHJpc3BldHRvIGEgJyVzJyBkaSAlZCBjb21taXQuXG4iCittc2dzdHJbMV0gIklsIHR1byBicmFuY2ggw6ggYXZhbnRpIHJpc3BldHRvIGEgJyVzJyBkaSAlZCBjb21taXQuXG4iCisKKyM6IHJlbW90ZS5jOjE2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHJlbW90ZS5jOjE2NDMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgotIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMjEgYnVpbHRpbi9tZXJnZS5jOjg2NSBidWlsdGluL21lcmdlLmM6OTc4CisjOiBidWlsdGluL21lcmdlLmM6MTA4OCBidWlsdGluL21lcmdlLmM6MTA5OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGFwcmlyZSAnJXMnIHBlciBsYSBzY3JpdHR1cmEiCisKKyM6IHNlcXVlbmNlci5jOjEyMyBidWlsdGluL21lcmdlLmM6MzMzIGJ1aWx0aW4vbWVyZ2UuYzo4NjgKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDkwIGJ1aWx0aW4vbWVyZ2UuYzoxMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHNjcml2ZXJlIHN1ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjE0NAorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgogbXNnc3RyICIiCi0iUXVlc3RvIMOoIHVuIHRlc3RvIGQnZXNlbXBpby5cbiIKLSJTZSB0aSBwaWFjZSBxdWVzdG8gdGVzdG8sIHNjZWdsaSBxdWVzdG8gY2FyYXR0ZXJlLiIKKyJkb3BvIGF2ZXIgcmlzb2x0byBpIGNvbmZsaXR0aSwgc2VnbmEgaSBwYXRoIGNvcnJldHRpXG4iCisiY29uICdnaXQgYWRkIDxwYXRoPicgbyAnZ2l0IHJtIDxwYXRoPiciCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKLW1zZ2lkICJHaXQgR3VpIgotbXNnc3RyICJHaXQgR3VpIgorIzogc2VxdWVuY2VyLmM6MTQ3Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyJkb3BvIGF2ZXIgcmlzb2x0byBpIGNvbmZsaXR0aSwgc2VnbmEgaSBwYXRoIGNvcnJldHRpXG4iCisiY29uICdnaXQgYWRkIDxwYXRoPicgbyAnZ2l0IHJtIDxwYXRoPicgZWQgZXNlZ3VpcmVcbiIKKyJpbCBjb21taXQgZGVsIHJpc3VsdGF0byBjb24gJ2dpdCBjb21taXQnIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg2Ci1tc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgotbXNnc3RyICJDcmVhIG51b3ZvIGFyY2hpdmlvIgorIzogc2VxdWVuY2VyLmM6MTYwIHNlcXVlbmNlci5jOjc1OCBzZXF1ZW5jZXIuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHNjcml2ZXJlIHN1ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzCi1tc2dpZCAiTmV3Li4uIgotbXNnc3RyICJOdW92by4uLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzEKLW1zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICJDbG9uYSBhcmNoaXZpbyBlc2lzdGVudGUiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2Ci1tc2dpZCAiQ2xvbmUuLi4iCi1tc2dzdHIgIkNsb25hLi4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTYKLW1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkFwcmkgYXJjaGl2aW8gZXNpc3RlbnRlIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExOQotbXNnaWQgIk9wZW4uLi4iCi1tc2dzdHIgIkFwcmkuLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCi1tc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKLW1zZ3N0ciAiQXJjaGl2aSByZWNlbnRpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzOAotbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgotbXNnc3RyICJBcHJpIGFyY2hpdmlvIHJlY2VudGU6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxMwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgotbXNnc3RyICJJbXBvc3NpYmlsZSBjcmVhcmUgbCdhcmNoaXZpbyAlczoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzkxCi1tc2dpZCAiRGlyZWN0b3J5OiIKLW1zZ3N0ciAiRGlyZWN0b3J5OiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1MgotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgotbXNnc3RyICJBcmNoaXZpbyBHaXQiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiTGEgZGlyZWN0b3J5ICVzIGVzaXN0ZSBnacOgLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiSWwgZmlsZSAlcyBlc2lzdGUgZ2nDoC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY2Ci1tc2dpZCAiQ2xvbmUiCi1tc2dzdHIgIkNsb25hIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OQotbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCi1tc2dzdHIgIlBvc2l6aW9uZSBzb3JnZW50ZToiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkwCi1tc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCi1tc2dzdHIgIkRpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmU6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgotbXNnaWQgIkNsb25lIFR5cGU6IgotbXNnc3RyICJUaXBvIGRpIGNsb25lOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKLW1zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCi1tc2dzdHIgIlN0YW5kYXJkICh2ZWxvY2UsIHNlbWktcmlkb25kYW50ZSwgY29uIGhhcmRsaW5rKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKLW1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCi1tc2dzdHIgIkNvcGlhIGNvbXBsZXRhIChwacO5IGxlbnRvLCBiYWNrdXAgcmlkb25kYW50ZSkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIwCi1tc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCi1tc2dzdHIgIlNoYXJlZCAoaWwgcGnDuSB2ZWxvY2UsIG5vbiByYWNjb21hbmRhdG8sIG5lc3N1biBiYWNrdXApIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwMwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTkKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCi1tc2dzdHIgIiVzIG5vbiDDqCB1biBhcmNoaXZpbyBHaXQuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MgotbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiU3RhbmRhcmQgw6ggZGlzcG9uaWJpbGUgc29sbyBwZXIgYXJjaGl2aSBsb2NhbGkuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NgotbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIlNoYXJlZCDDqCBkaXNwb25pYmlsZSBzb2xvIHBlciBhcmNoaXZpIGxvY2FsaS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJJbCBmaWxlL2RpcmVjdG9yeSAlcyBlc2lzdGUgZ2nDoC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGNvbmZpZ3VyYXJlIG9yaWdpbiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDAKLW1zZ2lkICJDb3VudGluZyBvYmplY3RzIgotbXNnc3RyICJDYWxjb2xvIG9nZ2V0dGkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQxCi1tc2dpZCAiYnVja2V0cyIKKyM6IHNlcXVlbmNlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcyIKIG1zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgY29waWFyZSBvZ2dldHRpL2luZm8vYWx0ZXJuYXRlOiAlcyIKKyM6IHNlcXVlbmNlci5jOjE3OAorbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVycnktcGljay4iCittc2dzdHIgIkxlIHR1ZSBtb2RpZmljaGUgbG9jYWxpIHZlcnJhbm5vIHNvdnJhc2NyaXR0ZSBkYSBjaGVycnktcGljayIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgotbXNnc3RyICJOaWVudGUgZGEgY2xvbmFyZSBkYSAlcy4iCisjOiBzZXF1ZW5jZXIuYzoxODAKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgcmV2ZXJ0LiIKK21zZ3N0ciAiTGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgdmVycmFubm8gc292cmFzY3JpdHRlIGRhIHJldmVydC4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOQotbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKLW1zZ3N0ciAiSWwgcmFtbyAnbWFzdGVyJyBub24gw6ggc3RhdG8gaW5pemlhbGl6emF0by4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2Ci1tc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgdXRpbGl6emFyZSBnbGkgaGFyZGxpbmsuIFNpIHJpY29ycmVyw6AgYWxsYSBjb3BpYS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2xvbmluZyBmcm9tICVzIgotbXNnc3RyICJDbG9uYXppb25lIGRhICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQotbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiQ29waWEgZGVnbGkgb2dnZXR0aSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjAKLW1zZ2lkICJLaUIiCi1tc2dzdHIgIktpQiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgotbXNnc3RyICJJbXBvc3NpYmlsZSBjb3BpYXJlIG9nZ2V0dG86ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NAotbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiQ29sbGVnYW1lbnRvIG9nZ2V0dGkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk1Ci1tc2dpZCAib2JqZWN0cyIKLW1zZ3N0ciAib2dnZXR0aSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKLW1zZ3N0ciAiSGFyZGxpbmsgaW1wb3NzaWJpbGUgc3VsbCdvZ2dldHRvOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTgKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorIzogc2VxdWVuY2VyLmM6MTgzCittc2dpZCAiQ29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSByYW1pIGUgb2dnZXR0aS4gQ29udHJvbGxhcmUgaSBkZXR0YWdsaSBmb3JuaXRpIGRhbGxhICIKLSJjb25zb2xlLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2siCisjOiBzZXF1ZW5jZXIuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIHNjcml2ZXJlIGlsIG51b3ZvIGluZGV4IGZpbGUiCisKKyM6IHNlcXVlbmNlci5jOjI2MQorbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0XG4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmlzb2x2ZXJlIGlsIGNvbW1pdCBIRUFEXG4iCisKKyM6IHNlcXVlbmNlci5jOjI4MgorbXNnaWQgIlVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsZSBldGljaGV0dGUuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSAiCi0iY29uc29sZS4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCi1tc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKKyM6IHNlcXVlbmNlci5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzXG4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYW5hbGl6emFyZSBpbCBjb21taXQgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBIRUFELiBDb250cm9sbGFyZSBpIGRldHRhZ2xpIGZvcm5pdGkgZGFsbGEgY29uc29sZS4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCi1tc2dzdHIgIkltcG9zc2liaWxlIHJpcHVsaXJlICVzIgorIzogc2VxdWVuY2VyLmM6Mzk1Cittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAotbXNnaWQgIkNsb25lIGZhaWxlZC4iCi1tc2dzdHIgIkNsb25hemlvbmUgbm9uIHJpdXNjaXRhLiIKKyM6IHNlcXVlbmNlci5jOjM5OAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQiCittc2dzdHIgIk5vbiBoYWkgdW4gSEVBRCB2YWxpZG8iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE1Ci1tc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgotbXNnc3RyICJOb24gw6ggc3RhdG8gdHJvdmF0byB1biByYW1vIHByZWRlZmluaXRvLiIKKyM6IHNlcXVlbmNlci5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgIklsIGNvbW1pdCAlcyDDqCB1biBtZXJnZSBtYSBub24gw6ggc3RhdGEgc3BlY2lmaWNhdGEgbCdvcHppb25lIC1tLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCi1tc2dzdHIgIkltcG9zc2liaWxlIHJpc29sdmVyZSAlcyBjb21lIHVuYSByZXZpc2lvbmUuIgorIzogc2VxdWVuY2VyLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAotbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgotbXNnc3RyICJDcmVhemlvbmUgZGlyZWN0b3J5IGRpIGxhdm9ybyIKKyM6IHNlcXVlbmNlci5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKLSM6IGxpYi9pbmRleC50Y2w6MTk4Ci1tc2dpZCAiZmlsZXMiCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKyMuICJjaGVycnktcGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExCisjOiBzZXF1ZW5jZXIuYzo0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgb3R0ZW5lcmUgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBwZXIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJldmVydCBkaSAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6NTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhcHBsaWNhcmUgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjU1MworbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICLDqCBzdGF0byBwYXNzYXRvIHVuIHNldCBkaSBjb21taXQgdnVvdG8iCisKKyM6IHNlcXVlbmNlci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBsZXR0dXJhIGRpIGluZGV4IG5vbiByaXVzY2l0YSIKKworIzogc2VxdWVuY2VyLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IGFnZ2lvcm5hbWVudG8gZGkgaW5kZXggbm9uIHJpdXNjaXRvIgorCisjOiBzZXF1ZW5jZXIuYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICVzIGR1cmluZyBhICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgbGluZSAlZC4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYW5hbGl6emFyZSBsYSByaWdhICVkLiIKKworIzogc2VxdWVuY2VyLmM6NjUxCittc2dpZCAiTm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICJOZXNzdW4gY29tbWl0IGFuYWxpenphdG8uIgorCisjOiBzZXF1ZW5jZXIuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXMiCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYXByaXJlICVzIgorCisjOiBzZXF1ZW5jZXIuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgJXMuIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjcwMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGtleTogJXMiCittc2dzdHIgIkNoaWF2ZSBub24gdmFsaWRhOiAlcyIKKworIzogc2VxdWVuY2VyLmM6NzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVmFsb3JlIG5vbiB2YWxpZG8gcGVyICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MzkKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICLDqCBnacOgIGluIGNvcnNvIHVuJ29wZXJhemlvbmUgZGkgY2hlcnJ5LXBpY2sgbyBkaSByZXZlcnQiCisKKyM6IHNlcXVlbmNlci5jOjc0MAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCittc2dzdHIgInByb3ZhIFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS0gYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzYwIHNlcXVlbmNlci5jOjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcy4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Nzc5IHNlcXVlbmNlci5jOjkxMworbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAibmVzc3VuYSBvcGVyYXppb25lIGRpIGNoZXJyeS1waWNrIG8gcmV2ZXJ0IGluIGNvcnNvIgorCisjOiBzZXF1ZW5jZXIuYzo3ODEKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6NzgzCittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODA1IGJ1aWx0aW4vYXBwbHkuYzozNjk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjgwOQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgImZpbmUgZGVsIGZpbGUgaW5hdHRlc2EiCisKKyM6IHNlcXVlbmNlci5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEwMDAKK21zZ2lkICJDYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJldmVydCBjb21lIGNvbW1pdCBpbml6aWFsZSIKKworIzogc2VxdWVuY2VyLmM6MTAwMQorbXNnaWQgIkNhbid0IGNoZXJyeS1waWNrIGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorCisjOiBzaGExX25hbWUuYzo4NjQKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIG5vbiBwdW50YSBhZCB1biBicmFuY2giCisKKyM6IHNoYTFfbmFtZS5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAiTmVzc3VuIGJyYW5jaCBlc2lzdGVudGU6ICclcyciCisKKyM6IHNoYTFfbmFtZS5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiTmVzc3VuIHVwc3RyZWFtIGNvbmZpZ3VyYXRvIHBlciBpbCBicmFuY2ggJyVzJyIKKworIzogc2hhMV9uYW1lLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgbCd1dGVudGUgY29ycmVudGUgbmVsIGZpbGUgcGFzc3dkOiAlcyIKKworIzogd3JhcHBlci5jOjQxNAorbXNnaWQgIm5vIHN1Y2ggdXNlciIKK21zZ3N0ciAidXRlbnRlIG5vbiBlc2lzdGVudGUiCisKKyM6IHd0LXN0YXR1cy5jOjEzNQorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDEgd3Qtc3RhdHVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDMgd3Qtc3RhdHVzLmM6MTYwCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0NAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBjb21lIGFwcHJvcHJpYXRvIHBlciBsYSByaXNvbHV6aW9uZSkiCisKKyM6IHd0LXN0YXR1cy5jOjE1MgorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzAKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc0Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc3Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3OQorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmlsZXM6IgorbXNnc3RyICIlcyBmaWxlOiIKKworIzogd3Qtc3RhdHVzLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIwOAorbXNnaWQgImJ1ZyIKK21zZ3N0ciAiYnVnIgorCisjOiB3dC1zdGF0dXMuYzoyMTMKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICJlbnRyYW1iaSBlbGltaW5hdGk6IgorCisjOiB3dC1zdGF0dXMuYzoyMTQKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgImFnZ2l1bnRvIGRhIG5vaToiCisKKyM6IHd0LXN0YXR1cy5jOjIxNQorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgImVsaW1pbmF0byBkYSBsb3JvOiIKKworIzogd3Qtc3RhdHVzLmM6MjE2Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgImFnZ2l1bnRvIGRhIGxvcm86IgorCisjOiB3dC1zdGF0dXMuYzoyMTcKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiZWxpbWluYXRvIGRhIG5vaToiCisKKyM6IHd0LXN0YXR1cy5jOjIxOAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICJlbnRyYW1iaSBhZ2dpdW50aToiCisKKyM6IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICJlbnRyYW1iaSBtb2RpZmljYXRpOiIKKworIzogd3Qtc3RhdHVzLmM6MjQ5Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAibnVvdmkgY29tbWl0LCAiCisKKyM6IHd0LXN0YXR1cy5jOjI1MQorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAiY29udGVudXRvIG1vZGlmaWNhdG8sICIKKworIzogd3Qtc3RhdHVzLmM6MjUzCittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGU6ICAgJXMiCittc2dzdHIgIm51b3ZvIGZpbGU6ICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3BpZWQ6ICAgICAlcyAtPiAlcyIKK21zZ3N0ciAiY29waWF0bzogICAgICVzIC0+ICVzIgorCisjOiB3dC1zdGF0dXMuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZDogICAgJXMiCittc2dzdHIgImVsaW1pbmF0bzogICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJtb2RpZmllZDogICAlcyIKK21zZ3N0ciAibW9kaWZpY2F0bzogICAlcyIKKworIzogd3Qtc3RhdHVzLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtZWQ6ICAgICVzIC0+ICVzIgorbXNnc3RyICJyaW5vbWluYXRvOiAgICAlcyAtPiAlcyIKKworIzogd3Qtc3RhdHVzLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGVjaGFuZ2U6ICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duOiAgICAlcyIKK21zZ3N0ciAic2Nvbm9zY2l1dG86ICAgICVzIgorCisjOiB3dC1zdGF0dXMuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5tZXJnZWQ6ICAgJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImJ1ZzogdW5oYW5kbGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjczNworbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgIlN1bCBicmFuY2ggIgorCisjOiB3dC1zdGF0dXMuYzo3NDQKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc1NQorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICJDb21taXQgaW5pemlhbGUiCisKKyM6IHd0LXN0YXR1cy5jOjc2OQorbXNnaWQgIlVudHJhY2tlZCIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3NzEKK21zZ2lkICJJZ25vcmVkIgorbXNnc3RyICJJZ25vcmF0byIKKworIzogd3Qtc3RhdHVzLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Nzc1Cittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3ODEKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIgorCisjOiB3dC1zdGF0dXMuYzo3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQlc1xuIgorbXNnc3RyICJuZXNzdW5hIG1vZGlmaWNhIGFnZ2l1bnRhIGFsIGNvbW1pdCVzXG4iCisKKyM6IHd0LXN0YXR1cy5jOjc4NworbXNnaWQgIiAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIikiCittc2dzdHIgIiAodXNhIFwiZ2l0IGFkZFwiIGUvbyBcImdpdCBjb21taXQgLWFcIikiCisKKyM6IHd0LXN0YXR1cy5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQlc1xuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc5MQorbXNnaWQgIiAodXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3OTMgd3Qtc3RhdHVzLmM6Nzk2IHd0LXN0YXR1cy5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCVzXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Nzk0Cittc2dpZCAiIChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3OTcKK21zZ2lkICIgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODAwCittc2dpZCAiICh3b3JraW5nIGRpcmVjdG9yeSBjbGVhbikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6OTA4Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAobmVzc3VuIGJyYW5jaCkiCisKKyM6IHd0LXN0YXR1cy5jOjkxNAorbXNnaWQgIkluaXRpYWwgY29tbWl0IG9uICIKK21zZ3N0ciAiQ29tbWl0IGluaXppYWxlIHN1ICIKKworIzogd3Qtc3RhdHVzLmM6OTI5Cittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAiaW5kaWV0cm8gIgorCisjOiB3dC1zdGF0dXMuYzo5MzIgd3Qtc3RhdHVzLmM6OTM1Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICJhdmFudGkgIgorCisjOiB3dC1zdGF0dXMuYzo5MzcKK21zZ2lkICIsIGJlaGluZCAiCittc2dzdHIgIiwgaW5kaWV0cm8gIgorCisjOiBidWlsdGluL2FkZC5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgInN0YXR1cyBkaWZmICVjIGluYXR0ZXNvIgorCisjOiBidWlsdGluL2FkZC5jOjY3IGJ1aWx0aW4vY29tbWl0LmM6MjI2Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJhZ2dpb3JuYW1lbnRvIGRlaSBmaWxlIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9hZGQuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICJlbGltaW5hICclcydcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aCAnJXMnIGlzIGluIHN1Ym1vZHVsZSAnJS4qcyciCittc2dzdHIgIklsIHBhdGggJyVzJyDDqCBuZWwgc290dG9tb2R1bG8gJyUuKnMnIgorCisjOiBidWlsdGluL2FkZC5jOjE5MgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTk1IGJ1aWx0aW4vYWRkLmM6NDU2IGJ1aWx0aW4vcm0uYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIiclcycgc2kgdHJvdmEgb2x0cmUgdW4gbGluayBzaW1ib2xpY28iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc2Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgaW5kZXgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGFwcmlyZSAnJXMnIHBlciBsYSBzY3JpdHR1cmEuIgorCisjOiBidWlsdGluL2FkZC5jOjI5MAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBzY3JpdmVyZSBsYSBwYXRjaCIKKworIzogYnVpbHRpbi9hZGQuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBlc2VndWlyZSBsbyBzdGF0IGRpICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk3Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICJQYXRjaCB2dW90YS4gT3BlcmF6aW9uZSBpbnRlcnJvdHRhLiIKKworIzogYnVpbHRpbi9hZGQuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICclcyciCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYXBwbGljYXJlICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICJJIHNlZ3VlbnRpIHBhdGggc29ubyBzdGF0aSBpZ25vcmF0aSBkYSB1bm8gbyBwacO5IGRlaSB0dW9pIGZpbGUgLmdpdGlnbm9yZTpcbiIKKworIzogYnVpbHRpbi9hZGQuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKK21zZ3N0ciAiVXNhIC1mIHNlIHZ1b2kgZGF2dmVybyBhZ2dpdW5nZXJsaS5cbiIKKworIzogYnVpbHRpbi9hZGQuYzozNTMKK21zZ2lkICJubyBmaWxlcyBhZGRlZCIKK21zZ3N0ciAibmVzc3VuIGZpbGUgYWdnaXVudG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU5Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiYWdnaXVudGEgZGVpIGZpbGUgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2FkZC5jOjM5MQorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSBlIC11IHNvbm8gcmVjaXByb2NhbWVudGUgaW5jb21wYXRpYmlsaSIKKworIzogYnVpbHRpbi9hZGQuYzozOTMKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICJMJ29wemlvbmUgLS1pZ25vcmUtbWlzc2luZyBwdcOyIGVzc2VyZSB1c2F0YSBzb2xvIGNvbiAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICJGb3JzZSBpbnRlbmRldmkgZGlyZSAnZ2l0IGFkZCAuJz9cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0MjAgYnVpbHRpbi9jbGVhbi5jOjk1IGJ1aWx0aW4vY29tbWl0LmM6Mjg2IGJ1aWx0aW4vbXYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjE2MgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiaW5kZXggZmlsZSBjb3Jyb3R0byIKKworIzogYnVpbHRpbi9hZGQuYzo0NzYgYnVpbHRpbi9hcHBseS5jOjQxMDggYnVpbHRpbi9tdi5jOjIyOSBidWlsdGluL3JtLmM6MjYwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBudW92byBpbmRleCBmaWxlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NTMKK21zZ2lkICJnaXQgYXBwbHkgW29wdGlvbnNdIFs8cGF0Y2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGFwcGx5IFtvcHppb25pXSBbPHBhdGNoPi4uLl0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIGhhIHJlc3RpdHVpdG8gJWQgcGVyIGwnaW5wdXQ6ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgaWwgbm9tZSBkZWwgZmlsZSBuZWxsYSBwYXRjaCBhbGxhIHJpZ2EgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGdpdC1kaWZmIGVycmF0byAtIGF0dGVzbyAvZGV2L251bGwsIHJpY2V2dXRvICVzIGFsbGEgcmlnYSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBnaXQtZGlmZiBlcnJhdG8gLSBudW92byBub21lIGRlbCBmaWxlIGluY29uc2lzdGVudGUgYWxsYSByaWdhICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGdpdC1kaWZmIGVycmF0byAtIHZlY2NoaW8gbm9tZSBkZWwgZmlsZSBpbmNvbnNpc3RlbnRlIGFsbGEgcmlnYSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0OQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGdpdC1kaWZmIGVycmF0byAtIGF0dGVzbyAvZGV2L251bGxhIGFsbGEgcmlnYSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjEzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvdW50OiByaWdhIGluYXR0ZXNhOiAlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJmcmFtbWVudG8gZGkgcGF0Y2ggc2VuemEgaW50ZXN0YXppb25lIGFsbGEgcmlnYSAlZDogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjI4Cittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgImlsIG51b3ZvIGZpbGUgZGlwZW5kZSBkYSBjb250ZW51dGkgcHJlY2VkZW50aSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2MzAKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJpbCBmaWxlIGVsaW1pbmF0byBoYSBhbmNvcmEgZGVpIGNvbnRlbnV0aSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJpbCBudW92byBmaWxlICVzIGRpcGVuZGUgZGEgY29udGVudXRpIHByZWNlZGVudGkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgImlsIGZpbGUgZWxpbWluYXRvICVzIGhhIGFuY29yYSBkZWkgY29udGVudXRpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY5NworIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiBhdHRlbnppb25lOiBpbCBmaWxlICVzIGRpdmVudGEgdnVvdG8gbWEgbm9uIMOoIGVsaW1pbmF0byIKKworIzogYnVpbHRpbi9hcHBseS5jOjE4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAicGF0Y2ggYmluYXJpYSBjb3Jyb3R0YSBhbGxhIHJpZ2EgJWQ6ICUuKnMiCisKKyMuIHRoZXJlIGhhcyB0byBiZSBvbmUgaHVuayAoZm9yd2FyZCBodW5rKQorIzogYnVpbHRpbi9hcHBseS5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJwYXRjaCBiaW5hcmlhIG5vbiByaWNvbm9zY2l1dGEgYWxsYSByaWdhICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTk1OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgbGluayBzaW1ib2xpY28gJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBvIGxlZ2dlcmUgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTIzCittc2dpZCAib29wcyIKK21zZ3N0ciAib29wcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICJpbml6aW8gZGVsbGEgcmlnYSBub24gdmFsaWRvOiAnJWMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mjc2MworIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJkdXJhbnRlIGxhIHJpY2VyY2EgcGVyOlxuIgorIiUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgImRhdGkgZGVsbGEgcGF0Y2ggYmluYXJpYSBtYW5jYW50aSBwZXIgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgImxhIHBhdGNoIGJpbmFyaWEgbm9uIHB1w7IgZXNzZXJlIGFwcGxpY2F0YSBhICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIgorbXNnc3RyICJsYSBwYXRjaCBiaW5hcmlhIHN1ICclcycgY3JlYSByaXN1bHRhdGkgbm9uIGNvcnJldHRpIChhdHRlc28gJXMsIHJpY2V2dXRvICVzKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgInBhdGNoIG5vbiByaXVzY2l0YTogJXM6JWxkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA0NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgImxhIHBhdGNoICVzIMOoIHN0YXRhIHJpbm9taW5hdGEvZWxpbWluYXRhIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA1MiBidWlsdGluL2FwcGx5LmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIG9mICVzIGZhaWxlZCIKK21zZ3N0ciAibGV0dHVyYSBkaSAlcyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDg0Cittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAibGEgcmltb3ppb25lIGRlbGxhIHBhdGNoIGxhc2NpYSBjb250ZW51dGkgZGVsIGZpbGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXM6IGVzaXN0ZSBnacOgIG5lbGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBoYXMgYmVlbiBkZWxldGVkL3JlbmFtZWQiCittc2dzdHIgIiVzOiDDqCBzdGF0YSBlbGltaW5hdGEvcmlub21pbmF0YSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxNDggYnVpbHRpbi9hcHBseS5jOjMxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIgorbXNnc3RyICIlczogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IG5vbiBlc2lzdGUgaW4gaW5kZXgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXM6IG5vbiBjb3JyaXNwb25kZSBhIGluZGV4IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXM6IHRpcG8gZXJyYXRvIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzIGhhIGlsIHRpcG8gJW8sIGF0dGVzbyAlbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlczogZXNpc3RlIGdpw6AgaW4gaW5kZXgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczogbGEgcGF0Y2ggbm9uIHB1w7IgZXNzZXJlIGFwcGxpY2F0YSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIkNvbnRyb2xsbyBkZWxsYSBwYXRjaCAlcy4uLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMzNDggYnVpbHRpbi9jaGVja291dC5jOjIxMiBidWlsdGluL3Jlc2V0LmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIm1ha2VfY2FjaGVfZW50cnkgbm9uIHJpdXNjaXRvIHBlciBpbCBwYXRoICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmltdW92ZXJlICVzIGRhIGluZGV4IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJwcm9qZWN0ICVzIgorbXNnc3RyICJwYXRjaCBjb3Jyb3R0YSBwZXIgaWwgc290dG9wcm9nZXR0byAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGxvIHN0YXQgZGVsIGZpbGUgYXBwZW5hIGNyZWF0byAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSBsYSB2b2NlIGRlbGxhIGNhY2hlIHBlciAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvc2luZyBmaWxlICclcyciCittc2dzdHIgImNoaXVzdXJhIGRlbCBmaWxlICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNjEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSAnJXMnIGluIG1vZGFsaXTDoCAlbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAiUGF0Y2ggJXMgYXBwbGljYXRhIGNvcnJldHRhbWVudGUuIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzY3NgorbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICJlcnJvcmUgaW50ZXJubyIKKworIy4gU2F5IHRoaXMgZXZlbiB3aXRob3V0IC0tdmVyYm9zZQorIzogYnVpbHRpbi9hcHBseS5jOjM2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIkZyYW1tZW50byAjJWQgYXBwbGljYXRvIGNvcnJldHRhbWVudGUuIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzcxMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIkZyYW1tZW50byAjJWQgcmVzcGludG8uIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzg0NAorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiaW5wdXQgbm9uIHJpY29ub3NjaXV0byIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4NTUKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGluZGV4IGZpbGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTcwIGJ1aWx0aW4vYXBwbHkuYzozOTczCittc2dpZCAicGF0aCIKK21zZ3N0ciAicGF0aCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5NzEKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJub24gYXBwbGljYSBsZSBtb2RpZmljaGUgY29ycmlzcG9uZGVudGkgYWwgcGF0aCBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5NzQKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJhcHBsaWNhIGxlIG1vZGlmaWNoZSBjb3JyaXNwb25kZW50aSBhbCBwYXRoIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk3NgorbXNnaWQgIm51bSIKK21zZ3N0ciAibnVtIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk3NworbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTgwCittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiaWdub3JhIGxlIGFnZ2l1bnRlIGNyZWF0ZSBkYWxsYSBwYXRjaCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5ODIKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgImludmVjZSBkaSBhcHBsaWNhcmUgbGEgcGF0Y2gsIG1vc3RyYSBsJ291dHB1dCBkaSBkaWZmc3RhdCBwZXIgbCdpbnB1dCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5ODYKK21zZ2lkICJzaG93cyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAibW9zdHJhIGlsIG51bWVybyBkaSByaWdoZSBhZ2dpdW50ZSBlIGVsaW1pbmF0ZSBpbiBub3RhemlvbmUgZGVjaW1hbGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTg4Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiaW52ZWNlIGRpIGFwcGxpY2FyZSBsYSBwYXRjaCwgbW9zdHJhIHVuIHJpYXNzdW50byBwZXIgbCdpbnB1dCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5OTAKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICJpbnZlY2UgZGkgYXBwbGljYXJlIGxhIHBhdGNoLCB2ZXJpZmljYSBzZSBwdcOyIGVzc2VyZSBhcHBsaWNhdGEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTkyCittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJhc3NpY3VyYSBjaGUgbGEgcGF0Y2ggc2lhIGFwcGxpY2FiaWxlIGFsbCdhdHR1YWxlIGluZGV4IgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk5NAorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTk2Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgImFwcGxpY2EgYW5jaGUgbGEgcGF0Y2ggKGRhIHVzYXJlIGNvbiAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk5OAorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDAwCittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgImkgcGF0aCBzb25vIHNlcGFyYXRpIGNvbiB1biBjYXJhdHRlcmUgTlVMIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAwMworbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAiYXNzaWN1cmEgYWxtZW5vIDxuPiByaWdoZSBkaSBjb250ZXN0byBjb3JyaXNwb25kZW50ZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMDQKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgImF6aW9uZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMDUKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAicmlsZXZhIHJpZ2hlIG51b3ZlIG8gbW9kaWZpY2F0ZSBjaGUgaGFubm8gZXJyb3JpIGRpIHNwYXppIGJpYW5jaGkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDA4IGJ1aWx0aW4vYXBwbHkuYzo0MDExCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAxNAorbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICJhcHBsaWNhIGxhIHBhdGNoIGluIG1hbmllcmEgaW52ZXJzYSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMTYKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAxOAorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICJsYXNjaWEgaSBmcmFtbWVudGkgcmVzcGludGkgbmVpIGZpbGUgLnJlaiBjb3JyaXNwb25kZW50aSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMjAKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAiY29uc2VudGUgbGEgc292cmFwcG9zaXppb25lIGRlaSBmcmFtbWVudGkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDIxCittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAiZGV0dGFnbGlhdG8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDIzCittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMjYKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMjgKK21zZ2lkICJyb290IgorbXNnc3RyICJyYWRpY2UiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDI5Cittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAiYW50ZXBvbmUgPHJvb3Q+IGEgdHV0dGkgaSBub21pIGZpbGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDUwCittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1pbmRleCBhbCBkaSBmdW9yaSBkaSB1biByZXBvc2l0b3J5IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA1MworbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCBhbCBkaSBmdW9yaSBkaSB1biByZXBvc2l0b3J5IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIHBhdGNoICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBsYSBwYXRjaCAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA4MworIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwODkgYnVpbHRpbi9hcHBseS5jOjQwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgcmlnYSBhZ2dpdW5nZSBlcnJvcmkgZGkgc3BhemkgYmlhbmNoaS4iCittc2dzdHJbMV0gIiVkIHJpZ2hlIGFnZ2l1bmdvbm8gZXJyb3JpIGRpIHNwYXppIGJpYW5jaGkuIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGNyZWFyZSBpbCBmaWxlIGRlbCByZXBvc2l0b3J5ICclcyciCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByZWRpcmlnZXJlIGwnb3V0cHV0IgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgImdpdCBhcmNoaXZlOiBSZW1vdGUgbm9uIGhhIHVuIFVSTCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NTgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IEVPRiIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGF0dGVzbyBBQ0svTkFLLCByaWNldnV0byBFT0YiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiZXJyb3JlIHJlbW90bzogJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY2Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZXJyb3JlIGRlbCBwcm90b2NvbGxvIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo3MQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogYXR0ZXNvIHVuIGZsdXNoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTgwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICJpbXBvc3NpYmlsZSB1c2FyZSAtYSBjb24gLWQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTg2Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGJyYW5jaCAnJXMnIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiaWwgYnJhbmNoIHJlbW90byAnJXMnIG5vbiDDqCBzdGF0byB0cm92YXRvLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiYnJhbmNoICclcycgbm9uIHRyb3ZhdG8uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIHJpbW96aW9uZSBkZWwgYnJhbmNoIHJlbW90byAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIHJpbW96aW9uZSBkZWwgYnJhbmNoICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiUmFtbyByZW1vdG8gJXMgZWxpbWluYXRvIChlcmEgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiUmFtbyAlcyBlbGltaW5hdG8gKGVyYSAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjM5Cittc2dpZCAiVXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiQWdnaW9ybmFtZW50byBkZWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSBmYWxsaXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBwb2ludCBhdCBhIGNvbW1pdCIKK21zZ3N0ciAiaWwgYnJhbmNoICclcycgbm9uIHB1bnRhIGFkIHVuIGNvbW1pdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBiZWhpbmQgJWRdIgorbXNnc3RyICJbJXM6IGRpZXRybyAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIltiZWhpbmQgJWRdIgorbXNnc3RyICJbZGlldHJvICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBhaGVhZCAlZF0iCittc2dzdHIgIlslczogYXZhbnRpICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlthaGVhZCAlZCwgYmVoaW5kICVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUzNQorbXNnaWQgIihubyBicmFuY2gpIgorbXNnc3RyICIobmVzc3VuIGJyYW5jaCkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjAwCittc2dpZCAic29tZSByZWZzIGNvdWxkIG5vdCBiZSByZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjEzCittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiTm9tZSBkZWwgYnJhbmNoIG5vbiB2YWxpZG86ICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM4Cittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAiUmFtbyByaW5vbWluYXRvIGluICVzLCBtYSBIRUFEIG5vbiDDqCBhZ2dpb3JuYXRvISIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTMKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJJbCBicmFuY2ggw6ggc3RhdG8gcmlub21pbmF0bywgbWEgbCdhZ2dpb3JuYW1lbnRvIGRlbCBmaWxlIGRpIGNvbmZpZ3VyYXppb25lICIKKyLDqCBmYWxsaXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIm5vbWUgZGVsbCdvZ2dldHRvICVzIGVycmF0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODMKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4OCBidWlsdGluL2Nsb25lLmM6NTU4Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIGUgLS12ZXJib3NlIG5vbiBzb25vIGNvbXBhdGliaWxpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg1NworbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKyJsZSBvcHppb25pIC1hIGUgLXIgcGVyICdnaXQgYnJhbmNoJyBub24gaGFubm8gc2Vuc28gY29uIGlsIG5vbWUgZGkgdW4gYnJhbmNoIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMgw6ggY29ycmV0dG9cbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo1NgorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2MAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgImlsIHBhdGggJyVzJyBub24gaGEgbGEgbm9zdHJhIHZlcnNpb25lIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiaWwgcGF0aCAnJXMnIG5vbiBoYSBsYSBsb3JvIHZlcnNpb25lIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgImlsIHBhdGggJyVzJyBub24gaGEgbGUgdmVyc2lvbmkgbmVjZXNzYXJpZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzQgYnVpbHRpbi9jaGVja291dC5jOjM5MgorbXNnaWQgImNvcnJ1cHQgaW5kZXggZmlsZSIKK21zZ3N0ciAiZmlsZSBpbmRleCBjb3Jyb3R0byIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2NCBidWlsdGluL2NoZWNrb3V0LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzAyIGJ1aWx0aW4vY2hlY2tvdXQuYzo0OTggYnVpbHRpbi9jbG9uZS5jOjU4MworIzogYnVpbHRpbi9tZXJnZS5jOjgxMgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgbnVvdm8gZmlsZSBpbmRleCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMxOSBidWlsdGluL2RpZmYuYzozMDIgYnVpbHRpbi9tZXJnZS5jOjQwOAorbXNnaWQgImRpZmZfc2V0dXBfZG9uZSBmYWlsZWQiCittc2dzdHIgImRpZmZfc2V0dXBfZG9uZSBub24gcml1c2NpdG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTQKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiw6ggbmVjZXNzYXJpbyByaXNvbHZlcmUgcHJpbWEgbCdhdHR1YWxlIGluZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU2NgorbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICJIRUFEIHNpIHRyb3ZhIG9yYSBhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTczCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlJpcHJpc3RpbmEgaWwgYnJhbmNoICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiU2kgw6ggZ2nDoCBzdSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiU2kgw6ggcGFzc2F0aSBhbCBicmFuY2ggJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gZSAlZCBhbHRyaS5cbiIKKworIy4gVGhlIHNpbmd1bGFyIHZlcnNpb24KKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggbmV3X2JyYW5jaF9uYW1lICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJTZSBzaSB2dW9sZSBtYW50ZW5lcmxlIGNyZWFuZG8gdW4gbnVvdm8gYnJhbmNoLCBxdWVzdG8gcG90cmViYmUgZXNzZXJlXG4iCisidW4gYnVvbiBtb21lbnRvIHBlciBmYXJsbyBjb246XG4iCisiXG4iCisiIGdpdCBicmFuY2ggbnVvdm9fbm9tZV9icmFuY2ggJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY5NAorbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY5OAorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICJMYSBwcmVjZWRlbnRlIHBvc2l6aW9uZSBkaSBIRUFEIGVyYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjcyNAorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIiIKKworIy4gY2FzZSAoMSkKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJyaWZlcmltZW50byBub24gdmFsaWRvOiAlcyIKKworIy4gY2FzZSAoMSk6IHdhbnQgYSB0cmVlCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTc0Cittc2dpZCAiLUIgY2Fubm90IGJlIHVzZWQgd2l0aCAtYiIKK21zZ3N0ciAiLUIgbm9uIHB1w7IgZXNzZXJlIHVzYXRhIGNvbiAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk4MworbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIG9wdGlvbnMiCittc2dzdHIgIi0tcGF0Y2ggbm9uIMOoIGNvbXBhdGliaWxlIGNvbiB0dXR0ZSBsZSBhbHRyZSBvcHppb25pIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg2Cittc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtYi8tQi8tLW9ycGhhbiIKK21zZ3N0ciAiLS1kZXRhY2ggbm9uIHB1w7IgZXNzZXJlIHVzYXRhIGNvbiAtYi8tQi8tLW9ycGhhbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk4OAorbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCittc2dzdHIgIi0tZGV0YWNoIG5vbiBwdcOyIGVzc2VyZSB1c2F0YSBjb24gLXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5OTQKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tdHJhY2sgbmVjZXNzaXRhIGRlbCBub21lIGRpIHVuIGJyYW5jaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDEKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIk5vbWUgZGVsIGJyYW5jaCBtYW5jYW50ZTsgcHJvdmEgY29uIC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwNworbXNnaWQgIi0tb3JwaGFuIGFuZCAtYnwtQiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA5Cittc2dpZCAiLS1vcnBoYW4gY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKK21zZ3N0ciAiLS1vcnBoYW4gbm9uIHB1w7IgZXNzZXJlIHVzYXRhIGNvbiAtdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTkKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC1mIGFuZCAtbSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC1mIGUgLW0gbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUzCittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBjaGVja291dDogdXBkYXRpbmcgcGF0aHMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLlxuIgorIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDYzCittc2dpZCAiZ2l0IGNoZWNrb3V0OiB1cGRhdGluZyBwYXRocyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDY4Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBub24gcHJlbmRlIHVuIHBhdGggY29tZSBhcmdvbWVudG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDcxCittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDkwCittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA5MworbXNnaWQgIi0tb3Vycy8tLXRoZWlycyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgorbXNnc3RyICItLW91cnMvLS10aGVpcnMgbm9uIHNvbm8gY29tcGF0aWJpbGkgY29uIGlsIHBhc3NhZ2dpbyBhaSBicmFuY2guIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzgKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IGUgLVggbm9uIHBvc3Nvbm8gZXNzZXJlIHVzYXRpIGluc2llbWUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MgorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLW4gbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSDDqCBpbXBvc3RhdG8gYSB2ZXJvLCBtYSBuw6kgLW4gbsOpIC1mIHNvbm8gc3RhdGUgc3BlY2lmaWNhdGU7ICIKKyJjbGVhbiBpbnRlcnJvdHRvIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODUKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLW4gbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugw6ggdmVybyBwZXIgZGVmYXVsdCwgbWEgbsOpIC1uIG7DqSAtZiBzb25vIHN0YXRlIHNwZWNpZmljYXRlOyAiCisiY2xlYW4gaW50ZXJyb3R0byIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE1NSBidWlsdGluL2NsZWFuLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNTkgYnVpbHRpbi9jbGVhbi5jOjE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICJSaW1vemlvbmUgZGkgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2MiBidWlsdGluL2NsZWFuLmM6MTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgInJpbW96aW9uZSBkaSAlcyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgbm90IHJlbW92ZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHJlbW92aW5nICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIGRpcmVjdG9yeS4iCittc2dzdHIgImlsIHJlcG9zaXRvcnkgZGkgcmlmZXJpbWVudG8gJyVzJyBub24gw6ggdW5hIGRpcmVjdG9yeSBsb2NhbGUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImFwZXJ0dXJhIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgImNyZWF6aW9uZSBkZWxsYSBkaXJlY3RvcnkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDggYnVpbHRpbi9kaWZmLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAic3RhdCBkaSAnJXMnIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgZXNpc3RlIGUgbm9uIMOoIHVuYSBkaXJlY3RvcnkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAic3RhdCBkaSAlcyBub24gcml1c2NpdG9cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgInJpbW96aW9uZSBkZWwgbGluayAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiY3JlYXppb25lIGRlbCBsaW5rICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAiY29waWEgZGVsIGZpbGUgaW4gJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiZmF0dG8uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgdHJvdmFyZSBpbCBicmFuY2ggcmVtb3RvICVzIGRhIGNsb25hcmUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTQ5Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisibCdIRUFEIHJlbW90byBzaSByaWZlcmlzY2UgYWQgdW4gcmVmIGluZXNpc3RlbnRlLCBpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCAiCisiY2hlY2tvdXQuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MzkKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJUcm9wcGkgYXJnb21lbnRpLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0MworbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiRGV2aSBzcGVjaWZpY2FyZSB1biByZXBvc2l0b3J5IGRhIGNsb25hcmUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAibGUgb3B6aW9uaSAtLWJhcmUgZSAtLW9yaWdpbiAlcyBub24gc29ubyBjb21wYXRpYmlsaS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJpbCByZXBvc2l0b3J5ICclcycgbm9uIGVzaXN0ZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY3MworbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorImlsIHBhdGggZGkgZGVzdGluYXppb25lICclcycgZXNpc3RlIGdpw6AgZSBub24gw6ggdW5hIGRpcmVjdG9yeSB2dW90YS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDYgYnVpbHRpbi9jbG9uZS5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJDbG9uZSBuZWwgcmVwb3NpdG9yeSBzcG9nbGlvICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gY2xvbmUgJXMiCittc2dzdHIgIk5vbiBzbyBjb21lIGNsb25hcmUgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIklsIGJyYW5jaCByZW1vdG8gJXMgbm9uIMOoIHN0YXRvIHRyb3ZhdG8gaW4gdXBzdHJlYW0gJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NDIKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJTZW1icmEgY2hlIHR1IGFiYmlhIGNsb25hdG8gdW4gcmVwb3NpdG9yeSB2dW90by4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIi0tY29tbWFuZCBkZXZlIGVzc2VyZSBpbCBwcmltbyBhcmdvbWVudG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDMKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJJbCB0dW8gbm9tZSBlIGwnaW5kaXJpenpvIGVtYWlsIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgYXV0b21hdGljYW1lbnRlIHVzYW5kb1xuIgorImlsIHR1byBub21lIHV0ZW50ZSBlZCBpbCBub21lIGhvc3QuIFBlciBmYXZvcmUsIHZlcmlmaWNhIGNoZSBzaWFubyBlc2F0dGkuXG4iCisiw4ggcG9zc2liaWxlIGVsaW1pbmFyZSBxdWVzdG8gbWVzc2FnZ2lvIGltcG9zdGFuZG9saSBlc3BsaWNpdGFtZW50ZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJUdW8gTm9tZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB0dUBlc2VtcGlvLmNvbVxuIgorIlxuIgorIkRvcG8gcXVlc3RhIG9wZXJhemlvbmUsIHB1b2kgcmlwcmlzdGluYXJlIGwnaWRlbnRpdMOgIHVzYXRhIGluIHF1ZXN0byBjb21taXQgY29uOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NQorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwCittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgcmVzZXQnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoyNTMKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoyOTUKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMwMQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImFkZCBpbnRlcmF0dGl2byBub24gcml1c2NpdG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzM0IGJ1aWx0aW4vY29tbWl0LmM6MzU1IGJ1aWx0aW4vY29tbWl0LmM6NDA1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBmaWxlIG5ld19pbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzozODYKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIHVuIGNvbW1pdCBwYXJ6aWFsZSBkdXJhbnRlIHVuIG1lcmdlLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozODgKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIHVuIGNvbW1pdCBwYXJ6aWFsZSBkdXJhbnRlIHVuIGNoZXJyeS1waWNrLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDE4Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDkzIGJ1aWx0aW4vY29tbWl0LmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0OiAlcyIKK21zZ3N0ciAiY29tbWl0IG5vbiB2YWxpZG86ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUyMgorbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFtZXRybyAtLWF1dGhvciBtYWxmb3JtYXRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaWRlbnQgc3RyaW5nOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjIwIGJ1aWx0aW4vY29tbWl0LmM6NjUzIGJ1aWx0aW4vY29tbWl0LmM6OTY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIHRyb3ZhcmUgaWwgY29tbWl0ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzMiBidWlsdGluL3Nob3J0bG9nLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIihsZXR0dXJhIGRlbCBtZXNzYWdnaW8gZGkgbG9nIGRhbGxvIHN0YW5kYXJkIGlucHV0KVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgaWwgbG9nIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBkaSBsb2cgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NDQKK21zZ2lkICJjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgImlsIGNvbW1pdCBoYSB1biBtZXNzYWdnaW8gdnVvdG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYwCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY2NAorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgbGVnZ2VyZSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjAKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIHNjcml2ZXJlIGlsIG1vZGVsbG8gZGkgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZW1icmEgY2hlIHNpIHN0aWEgZXNlZ3VlbmRvIGlsIGNvbW1pdCBkaSB1biBtZXJnZS5cbiIKKyJTZSBsJ29wZXJhemlvbmUgbm9uIMOoIGNvcnJldHRhLCBwZXIgZmF2b3JlIGVsaW1pbmEgaWwgZmlsZVxuIgorIlx0JXNcbiIKKyJlIHJpcHJvdmEuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlbWJyYSBjaGUgc2kgc3RpYSBlc2VndWVuZG8gaWwgY29tbWl0IGRpIHVuIGNoZXJyeS1waWNrLlxuIgorIlNlIGwnb3BlcmF6aW9uZSBub24gw6ggY29ycmV0dGEsIHBlciBmYXZvcmUgcmltdW92aSBpbCBmaWxlXG4iCisiXHQlc1xuIgorImUgcmlwcm92YS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NDgKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJQZXIgZmF2b3JlIGluc2VyaXNjaSBpbCBtZXNzYWdnaW8gZGkgY29tbWl0IHBlciBsZSBtb2RpZmljaGUuIExlIHJpZ2hlXG4iCisiY2hlIGluaXppYW5vIGNvbiAnIycgdmVycmFubm8gaWdub3JhdGUsIGUgdW4gbWVzc2FnZ2lvIHZ1b3RvIGFubnVsbGEgaWwgY29tbWl0LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc1MworbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnIycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJQZXIgZmF2b3JlIGluc2VyaXNjaSBpbCBtZXNzYWdnaW8gZGkgY29tbWl0IHBlciBsZSBtb2RpZmljaGUuIExlXG4iCisicmlnaGUgY2hlIGluaXppYW5vIGNvbiAnIycgdmVycmFubm8gbWFudGVudXRlOyBwb3Nzb25vIGNvbXVucXVlIGVzc2VyZVxuIgorInJpbW9zc2UgbWFudWFsbWVudGUuIFVuIG1lc3NhZ2dpbyB2dW90byBhbm51bGxhIGlsIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICVzIgorbXNnc3RyICIlc0F1dG9yZTogICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlcyIKK21zZ3N0ciAiJXNDb21taXR0ZXI6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc5MworbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlIGluZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMAorbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQ1IGJ1aWx0aW4vdGFnLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiUGVyIGZhdm9yZSwgc3BlY2lmaWNhIGlsIG1lc3NhZ2dpbyB1c2FuZG8gbCdvcHppb25lIC1tIG8gLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGV4aXN0aW5nIGF1dGhvciBmb3VuZCB3aXRoICclcyciCittc2dzdHIgIk5lc3N1biBhdXRvcmUgZXNpc3RlbnRlIHRyb3ZhdG8gY29uICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTU3IGJ1aWx0aW4vY29tbWl0LmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTcKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJMJ3VzbyBkaSBlbnRyYW1iZSBsZSBvcHppb25pIC0tcmVzZXQtYXV0aG9yIGUgLS1hdXRob3Igbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDgKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMTEKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxMworbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDE2Cittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiTGUgb3B6aW9uaSAtLXNxdWFzaCBlIC0tZml4dXAgbm9uIHBvc3Nvbm8gZXNzZXJlIHVzYXRlIGluc2llbWUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAyNgorbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICJTb2xvIHVuYSBkZWxsZSBvcHppb25pIC1jLy1DLy1GLy0tZml4dXAgcHXDsiBlc3NlcmUgdXNhdGEuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMjgKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYvLS1maXh1cC4iCittc2dzdHIgIkwnb3B6aW9uZSAtbSBub24gcHXDsiBlc3NlcmUgY29tYmluYXRhIGNvbiAtYy8tQy8tRi8tLWZpeHVwLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDM2Cittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiTCdvcHppb25lIC0tcmVzZXQtYXV0aG9yIHB1w7IgZXNzZXJlIHVzYXRhIHNvbG8gY29uIC1DLCAtYyBvIC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTMKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJQdcOyIGVzc2VyZSB1c2F0YSBzb2xvIHVuYSBkZWxsZSBvcHppb25pIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS0iCisiaW50ZXJhY3RpdmUvLS1wYXRjaCAuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTUKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIkRldmkgc3BlY2lmaWNhcmUgdW4gcGF0aCBzZSB1c2kgLS1pbmNsdWRlLy0tb25seS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NworbXNnaWQgIkNsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU5Cittc2dpZCAiRXhwbGljaXQgcGF0aHMgc3BlY2lmaWVkIHdpdGhvdXQgLWkgbm9yIC1vOyBhc3N1bWluZyAtLW9ubHkgcGF0aHMuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY5IGJ1aWx0aW4vdGFnLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA3NAorbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIkkgcGF0aCBjb24gLWEgbm9uIGhhbm5vIHNlbnNvLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjU3Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSB0cm92YXJlIGlsIGNvbW1pdCBhcHBlbmEgY3JlYXRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyNTkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYW5hbGl6emFyZSBpbCBjb21taXQgYXBwZW5hIGNyZWF0byIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzAwCittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMDIKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIChyb290LWNvbW1pdCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ0NgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbW1pdCBIRUFEIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODQgYnVpbHRpbi9tZXJnZS5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGFwcmlyZSAnJXMnIHBlciBsYSBsZXR0dXJhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAiRmlsZSBNRVJHRV9IRUFEIGNvcnJvdHRvICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgbGVnZ2VyZSBNRVJHRV9NT0RFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdDogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIkNvbW1pdCBpbnRlcnJvdHRvOyBpbCBtZXNzYWdnaW8gbm9uIMOoIHN0YXRvIG1vZGlmaWNhdG8uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJJbnRlcnJ1emlvbmUgZGVsIGNvbW1pdCBhIGNhdXNhIGRpIHVuIG1lc3NhZ2dpbyBkaSBjb21taXQgdnVvdG8uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU1MSBidWlsdGluL21lcmdlLmM6OTM2IGJ1aWx0aW4vbWVyZ2UuYzo5NjEKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAic2NyaXR0dXJhIGRlbGwnb2dnZXR0byBkaSBjb21taXQgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzIKK21zZ2lkICJjYW5ub3QgbG9jayBIRUFEIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzYKK21zZ2lkICJjYW5ub3QgdXBkYXRlIEhFQUQgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NworbXNnaWQgIiIKKyJSZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIG9yIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJJbCByZXBvc2l0b3J5IMOoIHN0YXRvIGFnZ2lvcm5hdG8sIG1hIG5vbiDDqCBzdGF0byBwb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZVxuIgorIm5ld19pbmRleC4gVmVyaWZpY2EgY2hlIGwndW5pdMOgIGRpc2NvIG5vbiBzaWEgcGllbmEgbyBjaGUgbGEgcXVvdGEgbm9uIHNpYVxuIgorInN0YXRhIHN1cGVyYXRhLCBlZCBlc2VndWkgXCJnaXQgcmVzZXQgSEVBRFwiIHBlciBpbCByaXByaXN0aW5vLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAiaWwgdGFnICclcycgw6ggZGF2dmVybyAnJXMnIHF1aSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiTm9uIMOoIGlsIG5vbWUgZGkgdW4gb2dnZXR0byB2YWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIG5vbiDDqCB1biBvZ2dldHRvICclcycgdmFsaWRvIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAibmVzc3VuIHRhZyBjb3JyaXNwb25kZSBlc2F0dGFtZW50ZSBhICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VhcmNoaW5nIHRvIGRlc2NyaWJlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIk5lc3N1biB0YWcgcHXDsiBkZXNjcml2ZXJlICclcycuXG4iCisiUHJvdmEgY29uIC0tYWx3YXlzLCBvIGNyZWEgZGVpIHRhZy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQzNgorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLWFiYnJldj0wIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDYyCittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ4MgorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0dGlzaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMnOiBub24gw6ggdW4gZmlsZSByZWdvbGFyZSBvIHVuIGxpbmsgc2ltYm9saWNvIgorCisjOiBidWlsdGluL2RpZmYuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICJvcHppb25lIG5vbiB2YWxpZGE6ICVzIgorCisjOiBidWlsdGluL2RpZmYuYzoyOTcKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTm9uIMOoIHVuIHJlcG9zaXRvcnkgZ2l0IgorCisjOiBidWlsdGluL2RpZmYuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIm9nZ2V0dG8gbm9uIHZhbGlkbyAnJXMnIHNwZWNpZmljYXRvLiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiAlZCB0cmVlcyBnaXZlbjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAicGnDuSBkaSBkdWUgYmxvYiBzcGVjaWZpY2F0aTogJyVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIm9nZ2V0dG8gbm9uIGdlc3RpdG8gJyVzJyBzcGVjaWZpY2F0by4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDAKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIm9nZ2V0dG8gJXMgbm9uIHRyb3ZhdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNTkKK21zZ2lkICJbdXAgdG8gZGF0ZV0iCittc2dzdHIgIlthZ2dpb3JuYXRvXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIhICUtKnMgJS0qcyAtPiAlcyAgKGNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mjc0IGJ1aWx0aW4vZmV0Y2guYzozNjAKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJbcmVzcGludG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mjg1Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJbdGFnIGFnZ2lvcm5hdGFdIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mjg3IGJ1aWx0aW4vZmV0Y2guYzozMjIgYnVpbHRpbi9mZXRjaC5jOjM0MAorbXNnaWQgIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIKK21zZ3N0ciAiICAoaW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBpbCByZWYgbG9jYWxlKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwNQorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW251b3ZhIHRhZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMDgKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltudW92byBicmFuY2hdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzExCittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJbbnVvdm8gcmVmXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGlsIHJlZiBsb2NhbGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNTYKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJhZ2dpb3JuYW1lbnRvIGZvcnphdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNjIKK21zZ2lkICIobm9uLWZhc3QtZm9yd2FyZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM5MyBidWlsdGluL2ZldGNoLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJXM6ICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyBub24gaGEgaW52aWF0byB0dXR0aSBnbGkgb2dnZXR0aSBuZWNlc3NhcmlcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiRGEgJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKyJub24gw6ggc3RhdG8gcG9zc2liaWxlIGFnZ2lvcm5hcmUgYWxjdW5pIHJlZiBsb2NhbGk7IHByb3ZhIGNvblxuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgcGVyIHJpbXVvdmVyZSBvZ25pIGJyYW5jaCBjaGUgdmFkYSBpbiBjb25mbGl0dG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTU3Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbZWxpbWluYXRvXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU1OCBidWlsdGluL3JlbW90ZS5jOjEwNTUKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIihuZXNzdW5vKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY3NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiTCdvcHppb25lIFwiJXNcIiDDqCBpZ25vcmF0YSBwZXIgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4OTAgYnVpbHRpbi9yZW1vdGUuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MDcKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk5lc3N1biByZXBvc2l0b3J5IHJlbW90byBzcGVjaWZpY2F0by4gUGVyIGZhdm9yZSwgc3BlY2lmaWNhIHVuIFVSTCBvXG4iCisiaWwgbm9tZSBkaSB1biByZW1vdGUgZGEgY3VpIHByZWxldmFyZSBudW92ZSByZXZpc2lvbmkuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTI3Cittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiRGV2aSBzcGVjaWZpY2FyZSBpbCBub21lIGRpIHVuIHRhZy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NzkKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgbm9uIHJpY2hpZWRlIGlsIHJlcG9zaXRvcnkgY29tZSBhcmdvbWVudG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5ODEKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDAwCittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIlcyBub24gdmFsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBvYmplY3QgZGlyZWN0b3J5ICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLiBZb3UgbWF5IGFsc29cbiIKKyJydW4gXCJnaXQgZ2NcIiBtYW51YWxseS4gU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6MjUxCittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6IGNyZWF6aW9uZSBkZWwgdGhyZWFkIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2hkaXI6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ3OCBidWlsdGluL2dyZXAuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIHRyZWUgKCVzKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgInN3aXRjaCAnJWMnIHJpY2hpZWRlIHVuIHZhbG9yZSBudW1lcmljbyIKKworIzogYnVpbHRpbi9ncmVwLmM6NjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSAnJXMnIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODUKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuLiIKK21zZ3N0ciAibmVzc3VuIG1vZGVsbG8gc3BlY2lmaWNhdG8uIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG9iamVjdCAlcyIKK21zZ3N0ciAib2dnZXR0byAlcyBlcnJhdG8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk0MAorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5NjMKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXguIgorbXNnc3RyICItLWNhY2hlZCBvIC0tdW50cmFja2VkIG5vbiBwdcOyIGVzc2VyZSB1c2F0byBjb24gLS1uby1pbmRleC4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk2OAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzLiIKK21zZ3N0ciAiLS1uby1pbmRleCBvIC0tdW50cmFja2VkIG5vbiBwb3Nzb25vIGVzc2VyZSB1c2F0ZSBjb24gbGUgcmV2aXNpb25pLiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTcxCittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk3OQorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgImZvcm1hdG8gZGkgYWl1dG8gJyVzJyBub24gcmljb25vc2NpdXRvIgorCisjOiBidWlsdGluL2hlbHAuYzo4NworbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgIkVzZWN1emlvbmUgZGkgZW1hY3NjbGllbnQgbm9uIHJpdXNjaXRhLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTAwCittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICJWZXJpZmljYSBkZWxsYSB2ZXJzaW9uZSBkaSBlbWFjc2NsaWVudCBub24gcml1c2NpdGEuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAibGEgdmVyc2lvbmUgJyVkJyBkaSBlbWFjc2NsaWVudCDDqCB0cm9wcG8gdmVjY2hpYSAoPDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNiBidWlsdGluL2hlbHAuYzoxNTQgYnVpbHRpbi9oZWxwLmM6MTYzIGJ1aWx0aW4vaGVscC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIKK21zZ3N0ciAiZXNlY3V6aW9uZSBkaSAnJXMnIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IHBhdGggYWQgdW4gdmlzdWFsaXp6YXRvcmUgbWFuIHBhZ2VzIG5vbiBzdXBwb3J0YXRvLlxuIgorIlVzYSBpbnZlY2UgJ21hbi48dG9vbD4uY21kJy4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiBjb21hbmRvIHBlciB2aXN1YWxpenphdG9yZSBtYW4gcGFnZXMgc3VwcG9ydGF0by5cbiIKKyJQZXIgZmF2b3JlIHVzYSAnbWFuLjx0b29sPi5wYXRoJyBpbnZlY2UuIgorCisjOiBidWlsdGluL2hlbHAuYzoyODcKK21zZ2lkICJUaGUgbW9zdCBjb21tb25seSB1c2VkIGdpdCBjb21tYW5kcyBhcmU6IgorbXNnc3RyICJJIGNvbWFuZGkgZ2l0IHVzYXRpIHBpw7kgZGkgZnJlcXVlbnRlIHNvbm86IgorCisjOiBidWlsdGluL2hlbHAuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiJyVzJzogdmlzdWFsaXp6YXRvcmUgbWFuIHNjb25vc2NpdXRvLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzcyCittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJuZXNzdW4gdmlzdWFsaXp6YXRvcmUgbWFuIGhhIGdlc3RpdG8gbGEgcmljaGllc3RhIgorCisjOiBidWlsdGluL2hlbHAuYzozODAKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJuZXNzdW4gdmlzdWFsaXp6YXRvcmUgaW5mbyBoYSBnZXN0aXRvIGxhIHJpY2hpZXN0YSIKKworIzogYnVpbHRpbi9oZWxwLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5LiIKK21zZ3N0ciAiJyVzJzogbm9uIMOoIHVuYSBkaXJlY3RvcnkgZGVsbGEgZG9jdW1lbnRhemlvbmUuIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzIgYnVpbHRpbi9oZWxwLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICJ1c286ICVzJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJgZ2l0ICVzJyBpcyBhbGlhc2VkIHRvIGAlcyciCittc2dzdHIgIidnaXQgJXMgw6ggdW4gYWxpYXMgZGkgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4OQorbXNnaWQgIm9iamVjdCBvZiB1bmV4cGVjdGVkIHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjM2Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICJFT0YgcHJlbWF0dXJvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMzcKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICJlcnJvcmUgZGkgbGV0dHVyYSBpbiBpbnB1dCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjQ5Cittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgInVzYXRpIHBpw7kgYnl0ZSBkaSBxdWVsbGkgZGlzcG9uaWJpbGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1NgorbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgInBhY2sgdHJvcHBvIGxhcmdvIHBlciBsYSBkZWZpbml6aW9uZSBjb3JyZW50ZSBkaSBvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgaWwgZmlsZSBwYWNrICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MQorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJsYSBmaXJtYSBkZWwgcGFjayBub24gY29pbmNpZGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ1MAorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDU4Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICJ0aXBvIGRpIG9nZ2V0dG8gJWQgc2Nvbm9zY2l1dG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ5NQorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTAKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICJub24gw6ggcG9zc2liaWxlIGxlZ2dlcmUgbCdvZ2dldHRvICVzIGVzaXN0ZW50ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAiVFJPVkFUQSBDT0xMSVNJT05FIFNIQTEgQ09OICVzICEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJvZ2dldHRvIGJsb2IgJXMgbm9uIHZhbGlkbyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIiVzIG5vbiB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjYxMgorbXNnaWQgIkVycm9yIGluIG9iamVjdCIKK21zZ3N0ciAiRXJyb3JlIG5lbGwnb2dnZXR0byIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICJOb24gdHV0dGkgZ2xpIG9nZ2V0dGkgZmlnbGlvIGRpICVzIHNvbm8gcmFnZ2l1bmdpYmlsaSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Njg3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjcxMworbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAiYXBwbGljYXppb25lIGRlbCBkZWx0YSBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg1MAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICJSaWNlemlvbmUgZGVnbGkgb2dnZXR0aSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODUwCittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAiSW5kaWNpenphemlvbmUgZGVnbGkgb2dnZXR0aSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODcyCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICJpbCBwYWNrIMOoIGNvcnJvdHRvIChTSEExIG5vbiBjb3JyaXNwb25kZSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg3NworbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4ODAKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTAzCittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAiUmlzb2x1emlvbmUgZGVpIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5NTQKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICJjb25mdXNpb25lIGFsIGRpIGzDoCBkZWxsYSBmb2xsaWEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAicGFjayBoYSAlZCBkZWx0YSBpcnJpc29sdG8iCittc2dzdHJbMV0gInBhY2sgaGEgJWQgZGVsdGEgaXJyaXNvbHRpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAibCdvZ2dldHRvIGxvY2FsZSAlcyDDqCBjb3Jyb3R0byIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEwMQorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICJlcnJvcmUgbmVsbGEgY2hpdXN1cmEgZGVsIGZpbGUgcGFjayIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUga2VlcCBmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUga2VlcCAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMzUKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcmNoaXZpYXJlIGlsIGZpbGUgcGFjayIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE0NgorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcmNoaXZpYXJlIGluZGV4IGZpbGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIGFwcmlyZSBpbCBmaWxlIHBhY2sgJyVzJyBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gIm5vbiBkZWx0YTogJWQgb2dnZXR0byIKK21zZ3N0clsxXSAibm9uIGRlbHRhOiAlZCBvZ2dldHRpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gImx1bmdoZXp6YSBkZWxsYSBjYXRlbmEgPSAlZDogJWx1IG9nZ2V0dG8iCittc2dzdHJbMV0gImx1bmdoZXp6YSBkZWxsYSBjYXRlbmEgPSAlZDogJWx1IG9nZ2V0dGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzMzAKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzc0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzNzcKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzODkgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIiVzIGVycmF0byIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwNworbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIG5vbiBwdcOyIGVzc2VyZSB1c2F0byBzZW56YSAtLXN0ZGluIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDExIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgImlsIG5vbWUgZGVsIGZpbGUgcGFjayAnJXMnIG5vbiB0ZXJtaW5hIGNvbiAnLnBhY2snIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDMwCittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICItLXZlcmlmeSBzZW56YSB1biBub21lIGRlbCBmaWxlIHBhY2sgc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2libGUgcmVuZGVyZSAlcyBzY3JpdmliaWxlIGRhbCBncnVwcG8iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBsbyBzdGF0IGRpICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBwYXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgb2YgYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMyMiBidWlsdGluL2luaXQtZGIuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIGVzaXN0ZSBnacOgIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgImltcG9zc2liaWxlIGdlc3RpcmUgaWwgdGlwbyBkaSBmaWxlICVkIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgImltcG9zc2liaWxlIHNwb3N0YXJlICVzIGluICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBnaXQgbGluayAlcyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBjcmVhcmUgaWwgbGluayBnaXQgJXMiCisKKyMuCisjLiAqIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJyVzJyBpcyBlaXRoZXIgIlJlaW5pdGlhbGl6ZWQKKyMuICogZXhpc3RpbmciIG9yICJJbml0aWFsaXplZCBlbXB0eSIsIHRoZSBzZWNvbmQgIiBzaGFyZWQiIG9yCisjLiAqICIiLCBhbmQgdGhlIGxhc3QgJyVzJXMnIGlzIHRoZSB2ZXJiYXRpbSBkaXJlY3RvcnkgbmFtZS4KKyMuCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMlcyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiVzJXMgcmVwb3NpdG9yeSBHaXQgaW4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MjAKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorbXNnc3RyICJSZWluaXppYWxpenphdG8gdW4gZXNpc3RlbnRlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MjAKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSIKK21zZ3N0ciAiSW5pemlhbGl6emF0byB1biIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIxCittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAiIGNvbmRpdmlzbyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDQwCittc2dpZCAiY2Fubm90IHRlbGwgY3dkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyMSBidWlsdGluL2luaXQtZGIuYzo1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyIlcyAobyAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm9uIGNvbnNlbnRpdG8gc2VuemEgc3BlY2lmaWNhcmUgJXMgKG8gLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU3OAorbXNnaWQgIkNhbm5vdCBhY2Nlc3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWNjZWRlcmUgYWxsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIGNvcnJlbnRlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIk91dHB1dCBmaW5hbGU6ICVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDAxIGJ1aWx0aW4vbG9nLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBsZWdnZXJlIGwnb2dnZXR0byAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAiVGlwbyBzY29ub3NjaXV0bzogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjAyCittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiZm9ybWF0LmhlYWRlcnMgbm9uIGhhIGFsY3VuIHZhbG9yZSIKKworIzogYnVpbHRpbi9sb2cuYzo2NzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgImlsIG5vbWUgZGVsbGEgZGlyZWN0b3J5IGRpIG91dHB1dCDDqCB0cm9wcG8gbHVuZ28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIkltcG9zc2liaWxlIGFwcmlyZSBpbCBmaWxlIHBhdGNoICVzIgorCisjOiBidWlsdGluL2xvZy5jOjcwMQorbXNnaWQgIk5lZWQgZXhhY3RseSBvbmUgcmFuZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NzA5Cittc2dpZCAiTm90IGEgcmFuZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6Nzg2Cittc2dpZCAiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgaW4tcmVwbHktdG86ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTMyCittc2dpZCAiVHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgIkR1ZSBkaXJlY3RvcnkgZGkgb3V0cHV0PyIKKworIzogYnVpbHRpbi9sb2cuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGNvbW1pdHRlciBpbmZvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE5OAorbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMDAKK21zZ2lkICItLXN1YmplY3QtcHJlZml4IGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMDgKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtb25seSBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxMAorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxMgorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1jaGVjayBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzNQorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICJzdGFuZGFyZCBvdXRwdXQsIG8gZGlyZWN0b3J5LCBxdWFsZSBkZWkgZHVlPyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgY3JlYXJlIGxhIGRpcmVjdG9yeSAnJXMnIgorCisjOiBidWlsdGluL2xvZy5jOjEzOTAKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiQ3JlYXppb25lIGRlaSBmaWxlIGRpIG91dHB1dCBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTEwIGJ1aWx0aW4vbG9nLmM6MTUxMiBidWlsdGluL2xvZy5jOjE1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIkNvbW1pdCAlcyBzY29ub3NjaXV0byIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkwCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJsbyBzd2l0Y2ggJ20nIHJpY2hpZWRlIHVuIHZhbG9yZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHRyb3ZhcmUgbGEgc3RyYXRlZ2lhIGRpIG1lcmdlICclcycuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiTGUgc3RyYXRlZ2llIGRpc3BvbmliaWxpIHNvbm86IgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJMZSBzdHJhdGVnaWUgcGVyc29uYWxpenphdGUgZGlzcG9uaWJpbGkgc29ubzoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDAKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBlc2VndWlyZSBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDUKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgImVzZWN1emlvbmUgZGkgc3Rhc2ggbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgIm5vbiDDqCB1biBvZ2dldHRvIHZhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9tZXJnZS5jOjI4NgorbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgInJlYWQtdHJlZSBub24gcml1c2NpdG8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTYKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzYxCittc2dpZCAiV3JpdGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICJTY3JpdHR1cmEgZGkgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM2MworbXNnaWQgIkZpbmlzaGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICJDb21wbGV0YW1lbnRvIGRpIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJOZXNzdW4gbWVzc2FnZ2lvIGRpIG1lcmdlIC0tIEhFQUQgbm9uIHZpZW5lIGFnZ2lvcm5hdG9cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICInJXMnIG5vbiBwdW50YSBhZCB1biBjb21taXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiU3RyaW5nYSBicmFuY2guJXMubWVyZ2VvcHRpb25zIGVycmF0YTogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2MjkKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NzkKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiCittc2dzdHIgImxldHR1cmEgZGVsbGEgY2FjaGUgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL21lcmdlLmM6Njk3Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NyaXZlcmUgaW5kZXguIgorCisjOiBidWlsdGluL21lcmdlLmM6NzEwCittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIk9wemlvbmUgcGVyIG1lcmdlLXJlY3Vyc2l2ZSBzY29ub3NjaXV0YTogLVglcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgIm5vbiDDqCBwb3NzaWJpbGUgc2NyaXZlcmUgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgZGEgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg5MgorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MTYKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIk1lc3NhZ2dpbyBkaSBjb21taXQgdnVvdG8uIgorCisjOiBidWlsdGluL21lcmdlLmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiU3BsZW5kaWRvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKyJNZXJnZSBhdXRvbWF0aWNvIGZhbGxpdG87IHJpc29sdmkgaSBjb25mbGl0dGkgZWQgZXNlZ3VpcmUgaWwgY29tbWl0XG4iCisiZGVsIHJpc3VsdGF0by5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQiCittc2dzdHIgIiclcycgbm9uIMOoIHVuIGNvbW1pdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTAKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5lc3N1biBicmFuY2ggY29ycmVudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1MgorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTmVzc3VuIHJlbW90ZSBwZXIgaWwgYnJhbmNoIGNvcnJlbnRlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTQKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5lc3N1biB1cHN0cmVhbSBkaSBkZWZhdWx0IGRlZmluaXRvIHBlciBpbCBicmFuY2ggY29ycmVudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTQ2IGJ1aWx0aW4vbWVyZ2UuYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiVzIC0gbm9uIMOoIHF1YWxjb3NhIHBlciBjdWkgcG9zc2lhbW8gZXNlZ3VpcmUgaWwgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjE0Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJOb24gYyfDqCBuZXNzdW4gbWVyZ2UgZGEgaW50ZXJyb21wZXJlIChtYW5jYSBNRVJHRV9IRUFEKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzAgZ2l0LXB1bGwuc2g6MzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorIklsIG1lcmdlIG5vbiDDqCBzdGF0byBjb25jbHVzbyAoZXNpc3RlIE1FUkdFX0hFQUQpLlxuIgorIlBlciBmYXZvcmUsIGVzZWd1aSBpbCBjb21taXQgZGVsbGUgbW9kaWZpY2hlIHByaW1hIGRlbCBtZXJnZS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjMzIGdpdC1wdWxsLnNoOjM0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICJJbCBtZXJnZSBub24gw6ggc3RhdG8gY29uY2x1c28gKGVzaXN0ZSBNRVJHRV9IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjM3Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCittc2dzdHIgIiIKKyJJbCBjaGVycnktcGljayBub24gw6ggc3RhdG8gY29uY2x1c28gKGVzaXN0ZSBDSEVSUllfUElDS19IRUFEKS5cbiIKKyJQZXIgZmF2b3JlLCBlc2VndWkgaWwgY29tbWl0IGRlbGxlIG1vZGlmaWNoZSBwcmltYSBkZWwgbWVyZ2UuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI0MAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiSWwgdHVvIGNoZXJyeS1waWNrIG5vbiDDqCBzdGF0byBjb25jbHVzbyAoQ0hFUlJZX1BJQ0tfSEVBRCBlc2lzdGUpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNDkKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY29tYmluYXJlIC0tc3F1YXNoIGNvbiAtLW5vLW9mZi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjU0Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tbm8tZmYgd2l0aCAtLWZmLW9ubHkuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjb21iaW5hcmUgLS1uby1mZiBjb24gLS1mZi1vbmx5LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNjEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiTmVzc3VuIGNvbW1pdCBzcGVjaWZpY2F0byBlIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vbiBkZWZpbml0by4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjkzCittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5NgorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk4Cittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGkgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIk5vLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5MAorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiRmFzdC1mb3J3YXJkIG5vbiBwb3NzaWJpbGUsIHN0b3AuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUxMyBidWlsdGluL21lcmdlLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUxNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAiVGVudGF0aXZvIGNvbiBsYSBzdHJhdGVnaWEgZGkgbWVyZ2UgJXMuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIk5lc3N1bmEgc3RyYXRlZ2lhIGRpIG1lcmdlIGhhIGdlc3RpdG8gaWwgbWVyZ2UuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJNZXJnZSBjb24gbGEgc3RyYXRlZ2lhICVzIGZhbGxpdG8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIiIKKyJJbCBtZXJnZSBhdXRvbWF0aWNvIMOoIGFuZGF0byBhIGJ1b24gZmluZTsgZmVybWF0byBwcmltYSBkZWwgY29tbWl0IGNvbWUgIgorInJpY2hpZXN0b1xuIgorCisjOiBidWlsdGluL212LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTEyCittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTE1Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAibm9uIMOoIHBvc3NpYmlsZSBzcG9zdGFyZSBsYSBkaXJlY3RvcnkgaW4gc8OpIHN0ZXNzYSIKKworIzogYnVpbHRpbi9tdi5jOjExOAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIm5vbiDDqCBwb3NzaWJpbGUgc3Bvc3RhcmUgbGEgZGlyZWN0b3J5IHN1IHVuIGZpbGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoPyAlLipzIGlzIGluIGluZGV4PyIKK21zZ3N0ciAiRWg/ICUuKnMgc2kgdHJvdmEgaW4gaW5kZXg/IgorCisjOiBidWlsdGluL212LmM6MTQwCittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAibGEgZGlyZWN0b3J5IHNvcmdlbnRlIMOoIHZ1b3RhIgorCisjOiBidWlsdGluL212LmM6MTcxCittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAibm9uIMOoIHNvdHRvIGNvbnRyb2xsbyBkaSB2ZXJzaW9uZSIKKworIzogYnVpbHRpbi9tdi5jOjE3MworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAibGEgZGVzdGluYXppb25lIGVzaXN0ZSIKKworIzogYnVpbHRpbi9tdi5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICJzb3ZyYXNjcml0dHVyYSBkaSAlcyBpbiBjb3JzbyIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIkltcG9zc2liaWxlIHNvdnJhc2NyaXZlcmUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgImZvbnRpIG11bHRpcGxlIHBlciBsYSBzdGVzc2EgZGVzdGluYXppb25lIgorCisjOiBidWlsdGluL212LmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywgc29yZ2VudGU9JXMsIGRlc3RpbmF6aW9uZT0lcyIKKworIzogYnVpbHRpbi9tdi5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICJSaW5vbWluYXppb25lIGRpICVzIGluICVzIGluIGNvcnNvXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyMTUgYnVpbHRpbi9yZW1vdGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgInJpbm9taW5hIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL25vdGVzLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhdnZpYXJlICdzaG93JyBwZXIgbCdvZ2dldHRvICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDUKK21zZ2lkICJjYW4ndCBmZG9wZW4gJ3Nob3cnIG91dHB1dCBmZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE3NSBidWlsdGluL3RhZy5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBjcmVhcmUgaWwgZmlsZSAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTg5Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICJQZXIgZmF2b3JlIHNwZWNpZmljYSBpbCBjb250ZW51dG8gZGVsbGUgbm90ZSB1c2FuZG8gbGUgb3B6aW9uaSAtbSBvIC1GIgorCisjOiBidWlsdGluL25vdGVzLmM6MjEwIGJ1aWx0aW4vbm90ZXMuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIlJpbW96aW9uZSBkZWxsYSBub3RhIHBlciBsJ29nZ2V0dG8gJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIxNQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgbCdvZ2dldHRvIG5vdGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG5vdGUgY29udGVudHMgaGFzIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiSWwgY29udGVudXRvIGRlbGxhIG5vdGEgw6ggc3RhdG8gbGFzY2lhdG8gaW4gJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTEgYnVpbHRpbi90YWcuYzo1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUzIGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhcHJpcmUgbyBsZWdnZXJlICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNzIgYnVpbHRpbi9ub3Rlcy5jOjQ0NSBidWlsdGluL25vdGVzLmM6NDQ3CisjOiBidWlsdGluL25vdGVzLmM6NTA3IGJ1aWx0aW4vbm90ZXMuYzo1NjEgYnVpbHRpbi9ub3Rlcy5jOjY0NAorIzogYnVpbHRpbi9ub3Rlcy5jOjY0OSBidWlsdGluL25vdGVzLmM6NzI0IGJ1aWx0aW4vbm90ZXMuYzo3NjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NjggYnVpbHRpbi9yZXNldC5jOjI5MyBidWlsdGluL3RhZy5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiTGV0dHVyYSBkZWxsJ29nZ2V0dG8gJyVzJyBub24gcml1c2NpdGEuIgorCisjOiBidWlsdGluL25vdGVzLmM6Mjk5Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICJWYWxvcmUgZGkgbm90ZXMucmV3cml0ZU1vZGUgZXJyYXRvOiAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaXNjcml2ZXJlIGxlIG5vdGUgaW4gJXMgKGFsIGRpIGZ1b3JpIGRpIHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiB0aGUKKyMuIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzIGl0cyB2YWx1ZQorIzogYnVpbHRpbi9ub3Rlcy5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIlZhbG9yZSBkaSAlcyBlcnJhdG86ICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJSaWdhIGRpIGlucHV0IG1hbGZvcm1hdGE6ICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJDb3BpYSBkZWxsZSBub3RlIGRhICclcycgYSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUwMCBidWlsdGluL25vdGVzLmM6NTU0IGJ1aWx0aW4vbm90ZXMuYzo2MjcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MzkgYnVpbHRpbi9ub3Rlcy5jOjcxMiBidWlsdGluL25vdGVzLmM6NzU5CisjOiBidWlsdGluL25vdGVzLmM6MTAzMworbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgInRyb3BwaSBwYXJhbWV0cmkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTMgYnVpbHRpbi9ub3Rlcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJOZXNzdW5hIG5vdGEgdHJvdmF0YSBwZXIgbCdvZ2dldHRvICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTg1IGJ1aWx0aW4vbm90ZXMuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICJTb3ZyYXNjcml0dHVyYSBkZWxsZSBub3RlIGVzaXN0ZW50aSBwZXIgbCdvZ2dldHRvICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MzUKK21zZ2lkICJ0b28gZmV3IHBhcmFtZXRlcnMiCittc2dzdHIgInRyb3BwaSBwb2NoaSBwYXJhbWV0cmkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgY29waWFyZSBsZSBub3RlLiBUcm92YXRlIG5vdGUgZXNpc3RlbnRpIHBlciBsJ29nZ2V0dG8gJXMuIFVzYSAiCisiJy1mJyBwZXIgc292cmFzY3JpdmVyZSBsZSBub3RlIGVzaXN0ZW50aSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAiTm90ZSBtYW5jYW50aSBwZXIgbCdvZ2dldHRvIHNvcmdlbnRlICVzLiBJbXBvc3NpYmlsZSBjb3BpYXJlLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisiTGUgb3B6aW9uaSAtbS8tRi8tYy8tQyBwZXIgaWwgc290dG9jb21hbmRvICdlZGl0JyBzb25vIGRlcHJlY2F0ZS5cbiIKKyJQZXIgZmF2b3JlIHVzYSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW52ZWNlLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICJMJ29nZ2V0dG8gJXMgbm9uIGhhIG5vdGUuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMTAzIGJ1aWx0aW4vcmVtb3RlLmM6MTU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJTb3R0b2NvbWFuZG8gc2Nvbm9zY2l1dG86ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAidmVyc2lvbmUgJXMgZGkgaW5kZXggbm9uIHN1cHBvcnRhdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJ2ZXJzaW9uZSAnJXMnIGRpIGluZGV4IGVycmF0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAlcyBkb2VzIG5vdCBhY2NlcHQgbmVnYXRpdmUgZm9ybSIKK21zZ3N0ciAibCdvcHppb25lICVzIG5vbiBhY2NldHRhIGZvcm1lIG5lZ2F0aXZlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHZhbHVlICclcycgZm9yIG9wdGlvbiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBpbCB2YWxvcmUgJyVzJyBwZXIgbCdvcHppb25lICVzIgorCisjOiBidWlsdGluL3B1c2guYzo0NQorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2NAorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICItLWRlbGV0ZSBhY2NldHRhIHNvbG8gbm9taSBkZWkgcmVmIGRpIGRlc3RpbmF6aW9uZSBpbiBjaGlhcm8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjk5Cittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICIiCisiSWwgYnJhbmNoIGNvcnJlbnRlICVzIG5vbiBoYSBhbGN1biBicmFuY2ggdXBzdHJlYW0uXG4iCisiUGVyIGVzZWd1aXJlIGlsIHB1c2ggZGVsIGJyYW5jaCBjb3JyZW50ZSBlZCBpbXBvc3RhcmUgcmVtb3RlIGNvbWUgdXBzdHJlYW0sIHVzYVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIklsIGJyYW5jaCBjb3JyZW50ZSAlcyBoYSBicmFuY2ggbXVsdGlwbGkgaW4gdXBzdHJlYW07IHB1c2ggbm9uIGVzZWd1aXRvLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTc0Cittc2dpZCAiIgorIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCittc2dzdHIgIiIKKyJOb24gw6ggc3RhdG8gc3BlY2lmaWNhdG8gYWxjdW4gcmVmc3BlYyBwZXIgaWwgcHVzaCwgZSBwdXNoLmRlZmF1bHQgw6ggXCJub3RoaW5nXCIuIgorCisjOiBidWlsdGluL3B1c2guYzoxODEKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIE1lcmdlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLiAnZ2l0IHB1bGwnKVxuIgorImJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIElmIHlvdSBkaWQgbm90IGludGVuZCB0byBwdXNoIHRoYXQgYnJhbmNoLCB5b3UgbWF5IHdhbnQgdG9cbiIKKyJzcGVjaWZ5IGJyYW5jaGVzIHRvIHB1c2ggb3Igc2V0IHRoZSAncHVzaC5kZWZhdWx0JyBjb25maWd1cmF0aW9uXG4iCisidmFyaWFibGUgdG8gJ2N1cnJlbnQnIG9yICd1cHN0cmVhbScgdG8gcHVzaCBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTkzCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBtZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwnKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAicmVwb3NpdG9yeSAnJXMnIGVycmF0byIKKworIzogYnVpbHRpbi9wdXNoLmM6MjcwCittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKyJOZXNzdW5hIGRlc3RpbmF6aW9uZSBwZXIgaWwgcHVzaCBjb25maWd1cmF0YS5cbiIKKyJTcGVjaWZpY2EgdW4gVVJMIGRhbGxhIHJpZ2EgZGkgY29tYW5kbyBvcHB1cmUgY29uZmlndXJhcmUgdW4gcmVwb3NpdG9yeSAiCisicmVtb3RvIHVzYW5kb1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bm9tZT4gPHVybD5cbiIKKyJcbiIKKyJlIHBvaSBlc2VndWlyZSBpbCBwdXNoIHVzYW5kbyBpbCBub21lIGRlbCByZW1vdGVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5vbWU+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4NQorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgZSAtLXRhZ3Mgbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4NgorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjkxCittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLW1pcnJvciBlIC0tdGFncyBub24gc29ubyBjb21wYXRpYmlsaSIKKworIzogYnVpbHRpbi9wdXNoLmM6MjkyCittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyOTcKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgZSAtLW1pcnJvciBub24gc29ubyBjb21wYXRpYmlsaSIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzg1Cittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gLS1hbGwsIC0tbWlycm9yIGUgLS10YWdzIgorCisjOiBidWlsdGluL3B1c2guYzozODcKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUgbm9uIGhhIHNlbnNvIHNlbnphIGFsY3VuIHJlZiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAiQWdnaW9ybmFtZW50byBkaSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Igw6ggcGVyaWNvbG9zbyBlIGRlcHJlY2F0bzsgcGVyIGZhdm9yZVxuIgorIlx0IHVzYSBpbnZlY2UgLS1taXJyb3ItZmV0Y2ggbyAtLW1pcnJvci1wdXNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byBkaSBtaXJyb3Igc2Nvbm9zY2l1dG86ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NQorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgInNwZWNpZmljYXJlIHVuIGJyYW5jaCBtYXN0ZXIgY29uIC0tbWlycm9yIG5vbiBoYSBzZW5zbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk1IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImlsIHJlbW90byAlcyBlc2lzdGUgZ2nDoC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk5IGJ1aWx0aW4vcmVtb3RlLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgbm9uIMOoIHVuIG5vbWUgZGkgcmVtb3RvIHZhbGlkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGNvbmZpZ3VyYXJlIGlsIG1hc3RlciAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICJwacO5IGRpIHVuICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MCBidWlsdGluL3JlbW90ZS5jOjQ0OAorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIihjb3JyaXNwb25kZW50ZSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUyCittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIihlbGltaW5hKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OTUgYnVpbHRpbi9yZW1vdGUuYzo2MDEgYnVpbHRpbi9yZW1vdGUuYzo2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIHRvICclcyciCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYWdnaXVuZ2VyZSAnJXMnIGEgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MzkgYnVpbHRpbi9yZW1vdGUuYzo3OTIgYnVpbHRpbi9yZW1vdGUuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorbXNnc3RyICJSZW1vdGUgbm9uIGVzaXN0ZW50ZTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHJpbm9taW5hcmUgbGEgc2V6aW9uZSBkaSBjb25maWd1cmF6aW9uZSBkYSAnJXMnIGluICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjYyIGJ1aWx0aW4vcmVtb3RlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByaW11b3ZlcmUgbGEgc2V6aW9uZSBkaSBjb25maWd1cmF6aW9uZSAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgJyVzJyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBpbXBvc3RhcmUgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImVsaW1pbmF6aW9uZSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImNyZWF6aW9uZSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBicmFuY2ggJXMiCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmltdW92ZXJlIGlsIGJyYW5jaCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MzQKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIk5vdGE6IHVuIGJyYW5jaCBhbCBkaSBmdW9yaSBkZWxsYSBnZXJhcmNoaWEgcmVmcy9yZW1vdGVzLyBub24gw6ggc3RhdG8gIgorImVsaW1pbmF0bztcbiIKKyJwZXIgZWxpbWluYXJsbywgdXNhcmU6IgorbXNnc3RyWzFdICIiCisiTm90YTogYWxjdW5pIGJyYW5jaCBhbCBkaSBmdW9yaSBkZWxsYSBnZXJhcmNoaWEgcmVmcy9yZW1vdGVzLyBub24gc29ubyBzdGF0aSAiCisiZWxpbWluYXRpO1xuIgorInBlciBlbGltaW5hcmxpLCB1c2FyZToiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk0NgorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ4Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiB2ZWNjaGlvICh1c2FyZSAnZ2l0IHJlbW90ZSBwcnVuZScgcGVyIHJpbXVvdmVybG8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk1MAorbXNnaWQgIiA/Pz8iCittc2dzdHIgIj8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICIiCisiYnJhbmNoLiVzLm1lcmdlIG5vbiB2YWxpZG87IGltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJlYmFzZSBzdSA+IDEgYnJhbmNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIgbWVyZ2UgY29uIGlsIHJlbW90ZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDAyCittc2dpZCAiICAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgIGUgY29uIGlsIHJlbW90ZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAibWVyZ2UgY29uIGlsIHJlbW90ZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDA1Cittc2dpZCAiICAgYW5kIHdpdGggcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MQorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiY3JlYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU0Cittc2dpZCAiZGVsZXRlIgorbXNnc3RyICJlbGltaW5hIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTgKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICJhZ2dpb3JuYXRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2NAorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICJsb2NhbGUgbm9uIGFnZ2lvcm5hdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgZXNlZ3VlIGlsIHB1c2ggc3UgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiByZW1vdGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTIwIGJ1aWx0aW4vcmVtb3RlLmM6MTI4NQorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIobmVzc3VuIFVSTCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOSBidWlsdGluL3JlbW90ZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMyBidWlsdGluL3JlbW90ZS5jOjExMzUgYnVpbHRpbi9yZW1vdGUuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIGJyYW5jaCBIRUFEOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiIKKyIgIGJyYW5jaCBIRUFEIChsJ0hFQUQgcmVtb3RvIMOoIGFtYmlndW8sIHBvdHJlYmJlIGVzc2VyZSB1bm8gZGVpIHNlZ3VlbnRpKTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgQnJhbmNoIHJlbW90bzolcyIKK21zZ3N0clsxXSAiICBCcmFuY2ggcmVtb3RpOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTQgYnVpbHRpbi9yZW1vdGUuYzoxMTgxCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE2MworbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgIEJyYW5jaCBsb2NhbGUgY29uZmlndXJhdG8gcGVyICdnaXQgcHVsbCc6IgorbXNnc3RyWzFdICIgIEJyYW5jaCBsb2NhbGkgY29uZmlndXJhdGkgcGVyICdnaXQgcHVsbCc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzEKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICBSZWYgbG9jYWxlIGNvbmZpZ3VyYXRvIHBlciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzFdICIgIFJlZiBsb2NhbGkgY29uZmlndXJhdGkgcGVyICdnaXQgcHVzaCclczoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNgorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgIkltcG9zc2liaWxlIGRldGVybWluYXJlIGwnSEVBRCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxOAorbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGVsaW1pbmFyZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgIk5vbiDDqCB1biByZWYgdmFsaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBjb25maWd1cmFyZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM4NyBidWlsdGluL3JlbW90ZS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiUmVtb3RlICclcycgbm9uIGVzaXN0ZW50ZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDE0Cittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAibmVzc3VuIHJlbW90ZSBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDQ3Cittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiTmVzc3VuYSBVUkwgdHJvdmF0YTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5NworbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJzb2Z0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImhhcmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAibWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAia2VlcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzcKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzkKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTYKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHNjcml2ZXJlIGlsIG51b3ZvIGluZGV4IGZpbGUuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIG9yYSBzaSB0cm92YSBhICVzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTMwCittc2dpZCAiQ291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgbGVnZ2VyZSBpbmRleCIKKworIzogYnVpbHRpbi9yZXNldC5jOjEzMworbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4gJXMgcmVzZXQgbmVsIGNvcnNvIGRpIHVuIG1lcmdlLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGFuYWxpenphcmUgbCdvZ2dldHRvICclcycuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAyCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxMQorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1taXhlZCBjb24gaSBwYXRoIMOoIGRlcHJlY2F0YTsgdXNhIGludmVjZSAnZ2l0IHJlc2V0IC0tIDxwYXRoPicuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIlcyByZXNldCBub24gw6ggY29uc2VudGl0byBpbiB1biByZXBvc2l0b3J5IHNwb2dsaW8iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIiIKKyJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHJpcHJpc3RpbmFyZSBpbmRleCBmaWxlICIKKyJhbGxhIHJldmlzaW9uZSAnJXMnLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MCBidWlsdGluL3JldmVydC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlczogJXMgbm9uIHB1w7IgZXNzZXJlIHVzYXRhIGNvbiAlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMzEKK21zZ2lkICJwcm9ncmFtIGVycm9yIgorbXNnc3RyICJlcnJvcmUgZGVsIHByb2dyYW1tYSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMjEKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJyZXZlcnQgbm9uIHJpdXNjaXRvIgorCisjOiBidWlsdGluL3JldmVydC5jOjIzNgorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiY2hlcnJ5LXBpY2sgbm9uIHJpdXNjaXRvIgorCisjOiBidWlsdGluL3JtLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZSBmaWxlIGFuZCB0aGUgSEVBRFxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4XG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIiclcycgY29udGllbmUgZGVsbGUgbW9kaWZpY2hlIGxvY2FsaVxuIgorIih1c2EgLS1jYWNoZWQgcGVyIG1hbnRlbmVyZSBpbCBmaWxlLCBvIC1mIHBlciBmb3J6YXJlIGxhIHJpbW96aW9uZSkiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtOiBub24gw6ggcG9zc2liaWxlIGVsaW1pbmFyZSAlcyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGF1dGhvcjogJXMiCittc2dzdHIgIkF1dG9yZSBtYW5jYW50ZTogJXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICJub21lIHRhZyB0cm9wcG8gbHVuZ286ICUuKnMuLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgInRhZyAnJXMnIG5vbiB0cm92YXRvLiIKKworIzogYnVpbHRpbi90YWcuYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJUYWcgJyVzJyBlbGltaW5hdG8gKGVyYSAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHZlcmlmeSB0aGUgdGFnICclcyciCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgdmVyaWZpY2FyZSBpbCB0YWcgJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzoyNDkKK21zZ2lkICIiCisiXG4iCisiI1xuIgorIiMgV3JpdGUgYSB0YWcgbWVzc2FnZVxuIgorIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgd2lsbCBiZSBpZ25vcmVkLlxuIgorIiNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiNcbiIKKyIjIFNjcml2ZXJlIHVuIG1lc3NhZ2dpbyBhc3NvY2lhdG8gYWwgdGFnXG4iCisiIyBMZSByaWdoZSBjaGUgaW5pemlhbm8gY29uICcjJyB2ZXJyYW5ubyBpZ25vcmF0ZS5cbiIKKyIjXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjU2Cittc2dpZCAiIgorIlxuIgorIiNcbiIKKyIjIFdyaXRlIGEgdGFnIG1lc3NhZ2VcbiIKKyIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCisiI1xuIgorbXNnc3RyICIiCisiXG4iCisiI1xuIgorIiMgU2NyaXZlcmUgdW4gbWVzc2FnZ2lvIGFzc29jaWF0byBhbCB0YWdcbiIKKyIjIExlIHJpZ2hlIGNoZSBpbml6aWFubyBjb24gJyMnIHZlcnJhbm5vIG1hbnRlbnV0ZTsgcG9zc29ubyBlc3NlcmUgY29tdW5xdWUgIgorInJpbW9zc2UgbWFudWFsbWVudGUuXG4iCisiI1xuIgorCisjOiBidWlsdGluL3RhZy5jOjI5OAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgImltcG9zc2liaWxlIGZpcm1hcmUgaWwgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjMwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSBkaSB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzI1Cittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAidGlwbyBkaSBvZ2dldHRvIGVycmF0by4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzM4Cittc2dpZCAidGFnIGhlYWRlciB0b28gYmlnLiIKK21zZ3N0ciAiaW50ZXN0YXppb25lIGRlbCB0YWcgdHJvcHBvIGdyYW5kZS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzcwCittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICJuZXNzdW4gbWVzc2FnZ2lvIHBlciBpbCB0YWc/IgorCisjOiBidWlsdGluL3RhZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICJJbCBtZXNzYWdnaW8gZGVsIHRhZyDDqCBzdGF0byBsYXNjaWF0byBpbiAlc1xuIgorCisjOiBidWlsdGluL3RhZy5jOjQyNQorbXNnaWQgInN3aXRjaCAncG9pbnRzLWF0JyByZXF1aXJlcyBhbiBvYmplY3QiCittc2dzdHIgImxvIHN3aXRjaCAncG9pbnRzLWF0JyByaWNoaWVkZSB1biBvZ2dldHRvIgorCisjOiBidWlsdGluL3RhZy5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAibm9tZSBvZ2dldHRvICclcycgbWFsZm9ybWF0byIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gZSAtbiBub24gc29ubyBjb21wYXRpYmlsaSIKKworIzogYnVpbHRpbi90YWcuYzo1MjMKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJsJ29wemlvbmUgLW4gw6ggY29uc2VudGl0YSBzb2xvIGNvbiAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTI1Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJsJ29wemlvbmUgLS1jb250YWlucyDDqCBjb25zZW50aXRhIHNvbG8gY29uIC1sLiIKKworIzogYnVpbHRpbi90YWcuYzo1MjcKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJsJ29wemlvbmUgLS1wb2ludHMtYXQgw6ggY29uc2VudGl0YSBzb2xvIGNvbiAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTM1Cittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLDqCBjb25zZW50aXRhIHVuYSBzb2xhIG9wemlvbmUgdHJhIC1GIGUgLW0uIgorCisjOiBidWlsdGluL3RhZy5jOjU1NQorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAidHJvcHBpIHBhcmFtZXRyaSIKKworIzogYnVpbHRpbi90YWcuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIiclcycgbm9uIMOoIHVuIG5vbWUgdGFnIHZhbGlkby4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJpbCB0YWcgJyVzJyBlc2lzdGUgZ2nDoCIKKworIzogYnVpbHRpbi90YWcuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBsb2NrIHRoZSByZWYiCittc2dzdHIgIiVzOiBpbXBvc3NpYmlsZSByaXNlcnZhcmUgaWwgcmVmIgorCisjOiBidWlsdGluL3RhZy5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHVwZGF0ZSB0aGUgcmVmIgorbXNnc3RyICIlczogaW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBpbCByZWYiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiVGFnICclcycgYWdnaW9ybmF0byAoZXJhICVzKVxuIgorCisjOiBnaXQuYzoxNgorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuIgorbXNnc3RyICIiCisiVmVkaSAnZ2l0IGhlbHAgPGNvbWFuZG8+IHBlciBtYWdnaW9yaSBpbmZvcm1hemlvbmkgc3UgdW4gY29tYW5kbyAiCisic3BlY2lmaWNvLiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjEzMyBwYXJzZS1vcHRpb25zLmg6MjM1Cittc2dpZCAibiIKK21zZ3N0ciAibiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE0MQorbXNnaWQgInRpbWUiCittc2dzdHIgInRlbXBvIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTQ5Cittc2dpZCAiZmlsZSIKIG1zZ3N0ciAiZmlsZSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKLW1zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKLW1zZ3N0ciAiQXR0aXZhemlvbmUgaW5pemlhbGUgbm9uIHJpdXNjaXRhLiIKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTEKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJxdWFuZG8iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQotbXNnaWQgIk9wZW4iCi1tc2dzdHIgIkFwcmkiCisjOiBwYXJzZS1vcHRpb25zLmg6MTU2Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMQotbXNnaWQgIlJlcG9zaXRvcnk6IgotbXNnc3RyICJBcmNoaXZpbzoiCisjOiBwYXJzZS1vcHRpb25zLmg6MjI4Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICJwacO5IGRldHRhZ2xpYXRvIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgYWNjZWRlcmUgYWxsJ2FyY2hpdmlvICVzOiIKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzAKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICJtZW5vIGRldHRhZ2xpYXRvIgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMKLW1zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgotbXNnc3RyICJRdWVzdGEgcmV2aXNpb25lIGF0dGl2YSBzdGFjY2F0YSIKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzYKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAidXNhcmUgPG4+IGNpZnJlIHBlciBtb3N0cmFyZSBnbGkgaGFzaCBTSEEtMSIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjYwCi1tc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCi1tc2dzdHIgIkVzcHJlc3Npb25lIGRpIHJldmlzaW9uZToiCisjOiBjb21tb24tY21kcy5oOjgKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFnZ2l1bmdlIGlsIGNvbnRlbnV0byBkZWwgZmlsZSBhIGluZGV4IgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzQKLW1zZ2lkICJMb2NhbCBCcmFuY2giCi1tc2dzdHIgIlJhbW8gbG9jYWxlIgorIzogY29tbW9uLWNtZHMuaDo5Cittc2dpZCAiRmluZCBieSBiaW5hcnkgc2VhcmNoIHRoZSBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJDZXJjYSBtZWRpYW50ZSByaWNlcmNhIGJpbmFyaWEgbGEgbW9kaWZpY2EgY2hlIGhhIGludHJvZG90dG8gdW4gYnVnIgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKLW1zZ2lkICJUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIkR1cGxpY2F0byBsb2NhbGUgZGkgcmFtbyByZW1vdG8iCisjOiBjb21tb24tY21kcy5oOjEwCittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkVsZW5jYSwgY3JlYSBvIGVsaW1pbmEgYnJhbmNoIgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAotbXNnaWQgIlRhZyIKLW1zZ3N0ciAiRXRpY2hldHRhIgorIzogY29tbW9uLWNtZHMuaDoxMQorbXNnaWQgIkNoZWNrb3V0IGEgYnJhbmNoIG9yIHBhdGhzIHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjMxNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgotbXNnc3RyICJSZXZpc2lvbmUgbm9uIHZhbGlkYTogJXMiCisjOiBjb21tb24tY21kcy5oOjEyCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJDbG9uYSB1biByZXBvc2l0b3J5IGluIHVuYSBudW92YSBkaXJlY3RvcnkiCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMzgKLW1zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCi1tc2dzdHIgIk5lc3N1bmEgcmV2aXNpb25lIHNlbGV6aW9uYXRhLiIKKyM6IGNvbW1vbi1jbWRzLmg6MTMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVnaXN0cmEgbW9kaWZpY2hlIG5lbCByZXBvc2l0b3J5IgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQ2Ci1tc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCi1tc2dzdHIgIkwnZXNwcmVzc2lvbmUgZGkgcmV2aXNpb25lIMOoIHZ1b3RhLiIKKyM6IGNvbW1vbi1jbWRzLmg6MTQKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzEKLW1zZ2lkICJVcGRhdGVkIgotbXNnc3RyICJBZ2dpb3JuYXRvIgorIzogY29tbW9uLWNtZHMuaDoxNQorbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlNjYXJpY2Egb2dnZXR0aSBlIHJlZiBkYSB1biBhbHRybyByZXBvc2l0b3J5IgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Ci1tc2dpZCAiVVJMIgotbXNnc3RyICJVUkwiCisjOiBjb21tb24tY21kcy5oOjE2Cittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICJTdGFtcGEgbGUgcmlnaGUgY29ycmlzcG9uZGVudGkgYWQgdW4gbW9kZWxsbyIKIAotIzogbGliL2NvbW1pdC50Y2w6OQorIzogY29tbW9uLWNtZHMuaDoxNworbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBnaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICJDcmVhIHVuIHJlcG9zaXRvcnkgZ2l0IHZ1b3RvIG8gcmVpbml6aWFsaXp6YSB1bm8gZXNpc3RlbnRlIgorCisjOiBjb21tb24tY21kcy5oOjE4Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAiTW9zdHJhIGxvZyBkZWwgY29tbWl0IgorCisjOiBjb21tb24tY21kcy5oOjE5Cittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIlVuaXNjZSBkdWUgbyBwacO5IGNyb25vbG9naWUgZGkgc3ZpbHVwcG8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjAKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIlNwb3N0YSBvIHJpbm9taW5hIHVuIGZpbGUsIHVuYSBkaXJlY3RvcnkgbyB1biBsaW5rIHNpbWJvbGljbyIKKworIzogY29tbW9uLWNtZHMuaDoyMQorbXNnaWQgIkZldGNoIGZyb20gYW5kIG1lcmdlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICJDb21iaW5hIGZldGNoZSArIG1lcmdlIGRhIHVuIGFsdHJvIHJlcG9zaXRvcnkgbyB1biBicmFuY2ggbG9jYWxlIgorCisjOiBjb21tb24tY21kcy5oOjIyCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJBZ2dpb3JuYSBpIHJlZiByZW1vdGkgaW5zaWVtZSBhZ2xpIG9nZ2V0dGkgYXNzb2NpYXRpIgorCisjOiBjb21tb24tY21kcy5oOjIzCittc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjI0Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIlJpcHJpc3RpbmEgbCdIRUFEIGNvcnJlbnRlIGFsbG8gc3RhdG8gc3BlY2lmaWNhdG8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjUKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjI2Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIk1vc3RyYSB2YXJpIHRpcGkgZGkgb2dnZXR0aSIKKworIzogY29tbW9uLWNtZHMuaDoyNworbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyOAorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHIgorbXNnc3RyICJDcmVhLCBlbGVuY2EsIGVsaW1pbmEgbyB2ZXJpZmljYSB1biBvZ2dldHRvIHRhZyBmaXJtYXRvIGNvbiBHUEciCisKKyM6IGdpdC1hbS5zaDo1MAorbXNnaWQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgorbXNnc3RyICLDiCBuZWNlc3NhcmlvIGltcG9zdGFyZSBsZSBpbmZvcm1hemlvbmkgc3VsIGNvbW1pdHRlciIKKworIzogZ2l0LWFtLnNoOjk1CiBtc2dpZCAiIgotIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCi0iXG4iCi0iWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKLSJ0byBhbWVuZC5cbiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgogbXNnc3RyICIiCi0iTm9uIGMnw6ggbmllbnRlIGRhIGNvcnJlZ2dlcmUuXG4iCi0iXG4iCi0iU3RhaSBwZXIgY3JlYXJlIGxhIHJldmlzaW9uZSBpbml6aWFsZS4gTm9uIGVzaXN0ZSB1bmEgcmV2aXNpb25lIHByZWNlZGVudGUgIgotImRhIGNvcnJlZ2dlcmUuXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4CisjOiBnaXQtYW0uc2g6MTA1CisjLCBzaC1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCi0iXG4iCi0iWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKLSJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgotImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCisiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0gcnVuIFwiJGNtZGxpbmUgLS1yZXNvbHZlZFwiLlxuIgorIklmIHlvdSB3b3VsZCBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBpbnN0ZWFkIHJ1biBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZyBydW4gXCIkY21kbGluZSAtLWFib3J0XCIuIgogbXNnc3RyICIiCi0iTm9uIMOoIHBvc3NpYmlsZSBlZmZldHR1YXJlIHVuYSBjb3JyZXppb25lIGR1cmFudGUgdW5hIGZ1c2lvbmUuXG4iCi0iXG4iCi0iSW4gcXVlc3RvIG1vbWVudG8gc2kgc3RhIGVmZmV0dHVhbmRvIHVuYSBmdXNpb25lIGNoZSBub24gw6ggc3RhdGEgZGVsIHR1dHRvICIKLSJjb21wbGV0YXRhLiBOb24gcHVvaSBjb3JyZWdnZXJlIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlIGEgbWVubyBjaGUgcHJpbWEgdHUgIgotIm5vbiBpbnRlcnJvbXBhIGwnb3BlcmF6aW9uZSBkaSBmdXNpb25lIGluIGNvcnNvLlxuIgorIlF1YW5kbyBoYWkgcmlzb2x0byBpbCBwcm9ibGVtYSBlc2VndWkgXCIkY21kbGluZSAtLXJlc29sdmVkXCIuXG4iCisiU2UgdnVvaSBzYWx0YXJlIHF1ZXN0YSBwYXRjaCwgZXNlZ3VpIGludmVjZSBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorIlBlciByaXByaXN0aW5hcmUgaWwgYnJhbmNoIG9yaWdpbmFsZSBlIGludGVycm9tcGVyZSBsJ2FwcGxpY2F6aW9uZSBkZWxsZSAiCisicGF0Y2ggZXNlZ3VpIFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKIAotIzogbGliL2NvbW1pdC50Y2w6NDgKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCi1tc2dzdHIgIkVycm9yZSBkdXJhbnRlIGlsIGNhcmljYW1lbnRvIGRlaSBkYXRpIGRlbGxhIHJldmlzaW9uZSBkYSBjb3JyZWdnZXJlOiIKKyM6IGdpdC1hbS5zaDoxMjEKK21zZ2lkICJDYW5ub3QgZmFsbCBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4iCittc2dzdHIgIiIKIAotIzogbGliL2NvbW1pdC50Y2w6NzUKLW1zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgotbXNnc3RyICJJbXBvc3NpYmlsZSBvdHRlbmVyZSBsYSB0dWEgaWRlbnRpdMOgOiIKKyM6IGdpdC1hbS5zaDoxMzcKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jb21taXQudGNsOjgwCi1tc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKLW1zZ3N0ciAiR0lUX0NPTU1JVFRFUl9JREVOVCBub24gdmFsaWRhOiIKLQotIzogbGliL2NvbW1pdC50Y2w6MTI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCi1tc2dzdHIgImF0dGVuemlvbmU6IFRjbCBub24gc3VwcG9ydGEgbGEgY29kaWZpY2EgJyVzJy4iCi0KLSM6IGxpYi9jb21taXQudGNsOjE0OQorIzogZ2l0LWFtLnNoOjE1NAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgogbXNnc3RyICIiCi0iTCd1bHRpbW8gc3RhdG8gYW5hbGl6emF0byBub24gY29ycmlzcG9uZGUgYWxsbyBzdGF0byBkZWxsJ2FyY2hpdmlvLlxuIgotIlxuIgotIlVuIGFsdHJvIHByb2dyYW1tYSBHaXQgaGEgbW9kaWZpY2F0byBxdWVzdG8gYXJjaGl2aW8gZGFsbCd1bHRpbWEgYW5hbGlzaS4gIgotIkJpc29nbmEgZWZmZXR0dWFyZSB1bmEgbnVvdmEgYW5hbGlzaSBwcmltYSBkaSBwb3RlciBjcmVhcmUgdW5hIG51b3ZhICIKLSJyZXZpc2lvbmUuXG4iCi0iXG4iCi0iTGEgbnVvdmEgYW5hbGlzaSBjb21pbmNlcsOgIG9yYS5cbiIKKyJMYSB0dWEgcGF0Y2ggw6ggc3RhdGEgbW9kaWZpY2F0YSBtYW51YWxtZW50ZT9cbiIKKyJOb24gcHXDsiBlc3NlcmUgYXBwbGljYXRhIGFpIGJsb2IgcmVnaXN0cmF0aSBuZWwgcHJvcHJpbyBpbmRleC4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE3MgotIywgdGNsLWZvcm1hdAorIzogZ2l0LWFtLnNoOjE2MworbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6Mjc1Cittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIlB1w7IgZXNzZXJlIGFwcGxpY2F0YSBzb2xvIHVuYSBzZXJpZSBkaSBwYXRjaCBTdEdJVCBwZXIgdm9sdGEiCisKKyM6IGdpdC1hbS5zaDozNjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZvcm1hdCAkcGF0Y2hfZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJJbCBmb3JtYXRvIHBhdGNoICRwYXRjaF9mb3JtYXQgbm9uIMOoIHN1cHBvcnRhdG8uIgorCisjOiBnaXQtYW0uc2g6MzY0Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJSaWxldmFtZW50byBkZWwgZm9ybWF0byBkZWxsYSBwYXRjaCBub24gcml1c2NpdG8uIgorCisjOiBnaXQtYW0uc2g6NDE4Cittc2dpZCAiLWQgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBEbyBub3QgdXNlLiIKK21zZ3N0ciAibCdvcHppb25lIC1kIG5vbiDDqCBwacO5IHN1cHBvcnRhdGEuICBOb24gdXRpbGl6emFybGEuIgorCisjOiBnaXQtYW0uc2g6NDgxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICRkb3Rlc3Qgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NDg2Cittc2dpZCAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iCittc2dzdHIgIlBlciBmYXZvcmUsIGRlY2lkaXRpLiAtLXNraXAgbyAtLWFib3J0PyIKKworIzogZ2l0LWFtLnNoOjUxMworbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjU3OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NjcxCisjLCBzaC1mb3JtYXQKIG1zZ2lkICIiCi0iVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKLSJiZWZvcmUgY29tbWl0dGluZy5cbiIKKyJQYXRjaCBpcyBlbXB0eS4gIFdhcyBpdCBzcGxpdCB3cm9uZz9cbiIKKyJJZiB5b3Ugd291bGQgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgaW5zdGVhZCBydW4gXCIkY21kbGluZSAtLXNraXBcIi5cbiIKKyJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcgcnVuIFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKIG1zZ3N0ciAiIgotIk5vbiDDqCBwb3NzaWJpbGUgY3JlYXJlIHVuYSByZXZpc2lvbmUgY29uIGZpbGUgbm9uIHNvdHRvcG9zdGkgYSBmdXNpb25lLlxuIgotIlxuIgotIklsIGZpbGUgJXMgcHJlc2VudGEgZGVpIGNvbmZsaXR0aS4gRGV2aSByaXNvbHZlcmxpIGUgcHJlcGFyYXJlIGlsIGZpbGUgcGVyICIKLSJjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZSBwcmltYSBkaSBlZmZldHR1YXJlIHF1ZXN0YSBhemlvbmUuXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4MAotIywgdGNsLWZvcm1hdAorIzogZ2l0LWFtLnNoOjcwOAorbXNnaWQgIlBhdGNoIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBlLW1haWwgYWRkcmVzcy4iCittc2dzdHIgIkxhIHBhdGNoIG5vbiBjb250aWVuZSB1biBpbmRpcml6em8gZW1haWwgdmFsaWRvLiIKKworIzogZ2l0LWFtLnNoOjc1NQorbXNnaWQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NzU5Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWFtLnNoOjc2NgorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsICIKK21zZ3N0ciAiQXBwbGljYXJlPyBzw6xbeV0vbm9bbl0vbW9kaWZpY2FbZV0vdmlzdWFsaXp6YSBwYXRjaFt2XS9hY2NldHRhIHR1dHRvW2FdICIKKworIzogZ2l0LWFtLnNoOjgwMgorIywgc2gtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICRGSVJTVExJTkUiCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjgyMwogbXNnaWQgIiIKLSJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKIG1zZ3N0ciAiIgotIlN0YXRvIGRpIGZpbGUgJXMgc2Nvbm9zY2l1dG8uXG4iCi0iXG4iCi0iUXVlc3RvIHByb2dyYW1tYSBub24gcHXDsiBjcmVhcmUgdW5hIHJldmlzaW9uZSBjb250ZW5lbnRlIGlsIGZpbGUgJXMuXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4OAorIzogZ2l0LWFtLnNoOjgzMQogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXhcbiIKKyJkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPyIKIG1zZ3N0ciAiIgotIk5lc3N1bmEgbW9kaWZpY2EgcGVyIGxhIG51b3ZhIHJldmlzaW9uZS5cbiIKLSJcbiIKLSJEZXZpIHByZXBhcmFyZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSBhbG1lbm8gMSBmaWxlIHByaW1hIGRpIGVmZmV0dHVhcmUgIgotInF1ZXN0YSBvcGVyYXppb25lLlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMDMKKyM6IGdpdC1hbS5zaDo4NDcKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EgLS0gcGF0Y2ggZ2nDoCBhcHBsaWNhdGEuIgorCisjOiBnaXQtYW0uc2g6ODU3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FIgorbXNnc3RyICJQYXRjaCBub24gcml1c2NpdGEgYSAkbXNnbnVtICRGSVJTVExJTkUiCisKKyM6IGdpdC1hbS5zaDo4NzMKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDgKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiRGV2aSBpbml6aWFyZSBjb24gXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAiVnVvaSBjaGUgbWUgbmUgb2NjdXBpIGlvIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAib3B6aW9uZSBub24gcmljb25vc2NpdXRhOiAnJGFyZyciCisKKyM6IGdpdC1iaXNlY3Quc2g6OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyRhcmcnIG5vbiBzZW1icmEgZXNzZXJlIHVuYSByZXZpc2lvbmUgdmFsaWRhIgorCisjOiBnaXQtYmlzZWN0LnNoOjExNworbXNnaWQgIkJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0CiBtc2dpZCAiIgotIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKLSJcbiIKLSJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgotIlxuIgotIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKLSItIFNlY29uZCBsaW5lOiBCbGFua1xuIgotIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKKyJDaGVja2luZyBvdXQgJyRzdGFydF9oZWFkJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8dmFsaWRicmFuY2g+Jy4iCiBtc2dzdHIgIiIKLSJCaXNvZ25hIGZvcm5pcmUgdW4gbWVzc2FnZ2lvIGRpIHJldmlzaW9uZS5cbiIKLSJcbiIKLSJVbiBidW9uIG1lc3NhZ2dpbyBkaSByZXZpc2lvbmUgaGEgaWwgc2VndWVudGUgZm9ybWF0bzpcbiIKLSJcbiIKLSItIFByaW1hIGxpbmVhOiBkZXNjcml2aSBpbiB1bmEgZnJhc2UgY2nDsiBjaGUgaGFpIGZhdHRvLlxuIgotIi0gU2Vjb25kYSBsaW5lYTogdnVvdGEuXG4iCi0iLSBUZXJ6YSBsaW5lYTogc3BpZWdhIGEgY29zYSBzZXJ2ZSBsYSB0dWEgbW9kaWZpY2EuXG4iCisiQ2hlY2tvdXQgZGkgJyRzdGFydF9oZWFkJyBub24gcml1c2NpdG8uIFByb3ZhICdnaXQgYmlzZWN0IHJlc2V0ICIKKyI8YnJhbmNoLXZhbGlkbz4nLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjM0Ci1tc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCi1tc2dzdHIgIkF2dmlvIHByZS1jb21taXQgaG9vay4uLiIKKyM6IGdpdC1iaXNlY3Quc2g6MTQwCittc2dpZCAid29uJ3QgYmlzZWN0IG9uIHNlZWtlZCB0cmVlIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jb21taXQudGNsOjI0OQotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgotbXNnc3RyICJSZXZpc2lvbmUgcmlmaXV0YXRhIGRhbCBwcmUtY29tbWl0IGhvb2suIgorIzogZ2l0LWJpc2VjdC5zaDoxNDQKK21zZ2lkICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICJIRUFEIGVycmF0byAtIHN0cmFubyByZWYgc2ltYm9saWNvIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNzIKLW1zZ2lkICJDYWxsaW5nIGNvbW1pdC1tc2cgaG9vay4uLiIKLW1zZ3N0ciAiQXZ2aW8gY29tbWl0LW1zZyBob29rLi4uIgorIzogZ2l0LWJpc2VjdC5zaDoxODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICRzdGF0ZSIKK21zZ3N0ciAiQXJnb21lbnRvIGJpc2VjdF93cml0ZSBlcnJhdG86ICRzdGF0ZSIKIAotIzogbGliL2NvbW1pdC50Y2w6Mjg3Ci1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgIlJldmlzaW9uZSByaWZpdXRhdGEgZGFsIGNvbW1pdC1tc2cgaG9vay4iCisjOiBnaXQtYmlzZWN0LnNoOjIxOAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMDAKLW1zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCi1tc2dzdHIgIkFyY2hpdmlhemlvbmUgbW9kaWZpY2hlLi4uIgorIzogZ2l0LWJpc2VjdC5zaDoyMzIKK21zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIlBlciBmYXZvcmUsIGNoaWFtYSAnYmlzZWN0X3N0YXRlJyBjb24gYWxtZW5vIHVuIGFyZ29tZW50by4iCiAKLSM6IGxpYi9jb21taXQudGNsOjMxNgotbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAid3JpdGUtdHJlZSBub24gcml1c2NpdG86IgorIzogZ2l0LWJpc2VjdC5zaDoyNDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzE3IGxpYi9jb21taXQudGNsOjM2MSBsaWIvY29tbWl0LnRjbDozODIKLW1zZ2lkICJDb21taXQgZmFpbGVkLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUuIgorIzogZ2l0LWJpc2VjdC5zaDoyNTAKK21zZ2lkICInZ2l0IGJpc2VjdCBiYWQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiJ2dpdCBiaXNlY3QgYmFkJyBwdcOyIHByZW5kZXJlIHVuIHNvbG8gYXJnb21lbnRvLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKLW1zZ3N0ciAiTGEgcmV2aXNpb25lICVzIHNlbWJyYSBlc3NlcmUgZGFubmVnZ2lhdGEiCisjLiBoYXZlIGJhZCBidXQgbm90IGdvb2QuICB3ZSBjb3VsZCBiaXNlY3QgYWx0aG91Z2gKKyMuIHRoaXMgaXMgbGVzcyBvcHRpbXVtLgorIzogZ2l0LWJpc2VjdC5zaDoyNzMKK21zZ2lkICJXYXJuaW5nOiBiaXNlY3Rpbmcgb25seSB3aXRoIGEgYmFkIGNvbW1pdC4iCittc2dzdHIgIiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzM5CisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIlNlaSBzaWN1cm8/IFtZL25dICIKKworIzogZ2l0LWJpc2VjdC5zaDoyODkKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgZ29vZCBhbmQgb25lIGJhZCByZXZpc2lvbnMuXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCBiYWRcIiBhbmQgXCJnaXQgYmlzZWN0IGdvb2RcIiBmb3IgdGhhdC4pIgogbXNnc3RyICIiCi0iTmVzc3VuYSBtb2RpZmljYSBwZXIgbGEgbnVvdmEgcmV2aXNpb25lLlxuIgotIlxuIgotIlF1ZXN0YSByZXZpc2lvbmUgbm9uIG1vZGlmaWNhIGFsY3VuIGZpbGUgZSBub24gZWZmZXR0dWEgYWxjdW5hIGZ1c2lvbmUuXG4iCi0iXG4iCi0iU2kgcHJvY2VkZXLDoCBzdWJpdG8gYWQgdW5hIG51b3ZhIGFuYWxpc2kuXG4iCisiRGV2aSBzcGVjaWZpY2FyZSBhbG1lbm8gdW5hIHJldmlzaW9uZSBjb3JyZXR0YSBlZCB1bmEgZXJyYXRhLlxuIgorIihQdW9pIHVzYXJlIFwiZ2l0IGJpc2VjdCBiYWRcIiBlIFwiZ2l0IGJpc2VjdCBnb29kXCIgcGVyIHF1ZXN0byBzY29wby4pIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNDYKLW1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCi1tc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EgcGVyIGxhIG51b3ZhIHJldmlzaW9uZS4iCi0KLSM6IGxpYi9jb21taXQudGNsOjM2MAotbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCi1tc2dzdHIgImNvbW1pdC10cmVlIG5vbiByaXVzY2l0bzoiCi0KLSM6IGxpYi9jb21taXQudGNsOjM4MQotbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKLW1zZ3N0ciAidXBkYXRlLXJlZiBub24gcml1c2NpdG86IgotCi0jOiBsaWIvY29tbWl0LnRjbDo0NjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCi1tc2dzdHIgIkNyZWF0YSByZXZpc2lvbmUgJXM6ICVzIgotCi0jOiBsaWIvY29uc29sZS50Y2w6NTkKLW1zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICJFbGFib3JhemlvbmUgaW4gY29yc28uLi4gYXR0ZW5kZXJlLi4uIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MTg2Ci1tc2dpZCAiU3VjY2VzcyIKLW1zZ3N0ciAiU3VjY2Vzc28iCi0KLSM6IGxpYi9jb25zb2xlLnRjbDoyMDAKLW1zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCi1tc2dzdHIgIkVycm9yZTogY29tYW5kbyBub24gcml1c2NpdG8iCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKLW1zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAiTnVtZXJvIGRpIG9nZ2V0dGkgc2xlZ2F0aSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NAotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgotbXNnc3RyICJTcGF6aW8gc3UgZGlzY28gdXRpbGl6emF0byBkYSBvZ2dldHRpIHNsZWdhdGkiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKLW1zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIk51bWVybyBkaSBvZ2dldHRpIGltcGFjY2hldHRhdGkiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKLW1zZ2lkICJOdW1iZXIgb2YgcGFja3MiCi1tc2dzdHIgIk51bWVybyBkaSBwYWNjaGV0dGkiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIlNwYXppbyBzdSBkaXNjbyB1dGlsaXp6YXRvIGRhIG9nZ2V0dGkgaW1wYWNjaGV0dGF0aSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OAotbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCi1tc2dzdHIgIk9nZ2V0dGkgaW1wYWNjaGV0dGF0aSBjaGUgYXR0ZW5kb25vIGxhIHBvdGF0dXJhIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ5Ci1tc2dpZCAiR2FyYmFnZSBmaWxlcyIKLW1zZ3N0ciAiRmlsZSBpbnV0aWxpIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjcyCi1tc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKLW1zZ3N0ciAiQ29tcHJlc3Npb25lIGRlbGwnYXJjaGl2aW8gaW4gY29yc28iCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKLW1zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKLW1zZ3N0ciAiVmVyaWZpY2EgZGVsbCdhcmNoaXZpbyBjb24gZnNjay1vYmplY3RzIGluIGNvcnNvIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjEwNwotIywgdGNsLWZvcm1hdAorIzogZ2l0LWJpc2VjdC5zaDoyOTIKIG1zZ2lkICIiCi0iVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgotIlxuIgotIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgotInRoZSBkYXRhYmFzZS5cbiIKLSJcbiIKLSJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lIGdvb2QgYW5kIG9uZSBiYWQgcmV2aXNpb25zLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgYmFkXCIgYW5kIFwiZ2l0IGJpc2VjdCBnb29kXCIgZm9yIHRoYXQuKSIKIG1zZ3N0ciAiIgotIlF1ZXN0byBhcmNoaXZpbyBhdHR1YWxtZW50ZSBoYSBjaXJjYSAlaSBvZ2dldHRpIHNsZWdhdGkuXG4iCi0iXG4iCi0iUGVyIG1hbnRlbmVyZSBidW9uZSBwcmVzdGF6aW9uaSBzaSByYWNjb21hbmRhIGRpIGNvbXByaW1lcmUgbCdhcmNoaXZpby5cbiIKLSJcbiIKLSJDb21wcmltZXJlIGwnYXJjaGl2aW8gb3JhPyIKIAotIzogbGliL2RhdGUudGNsOjI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKLW1zZ3N0ciAiR2l0IGhhIHJlc3RpdHVpdG8gdW5hIGRhdGEgbm9uIHZhbGlkYTogJXMiCisjOiBnaXQtYmlzZWN0LnNoOjM0NyBnaXQtYmlzZWN0LnNoOjQ3NAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiTm9uIHN0aWFtbyBlc2VndWVuZG8gdW4gYmlzZWN0LiIKIAotIzogbGliL2RpZmYudGNsOjY0Ci0jLCB0Y2wtZm9ybWF0CisjOiBnaXQtYmlzZWN0LnNoOjM1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIickaW52YWxpZCcgbm9uIMOoIHVuIGNvbW1pdCB2YWxpZG8iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzYzCisjLCBzaC1mb3JtYXQKIG1zZ2lkICIiCi0iTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iJXMgaGFzIG5vIGNoYW5nZXMuXG4iCi0iXG4iCi0iVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgotInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCi0iXG4iCi0iQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCi0idGhlIHNhbWUgc3RhdGUuIgorIkNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJGJyYW5jaCcuXG4iCisiVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCiBtc2dzdHIgIiIKLSJOb24gc29ubyBzdGF0ZSB0cm92YXRlIGRpZmZlcmVuemUuXG4iCi0iXG4iCi0iJXMgbm9uIGhhIG1vZGlmaWNoZS5cbiIKLSJcbiIKLSJMYSBkYXRhIGRpIG1vZGlmaWNhIGRpIHF1ZXN0byBmaWxlIMOoIHN0YXRhIGNhbWJpYXRhIGRhIHVuJ2FsdHJhICIKLSJhcHBsaWNhemlvbmUsIG1hIGlsIGNvbnRlbnV0byBkZWwgZmlsZSDDqCByaW1hc3RvIGludmFyaWF0by5cbiIKLSJcbiIKLSJTaSBwcm9jZWRlcsOgIGF1dG9tYXRpY2FtZW50ZSBhZCB1bmEgbnVvdmEgYW5hbGlzaSBwZXIgdHJvdmFyZSBhbHRyaSBmaWxlIGNoZSAiCi0icG90cmViYmVybyBhdmVyZSBsbyBzdGVzc28gc3RhdG8uIgogCi0jOiBsaWIvZGlmZi50Y2w6MTA0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgotbXNnc3RyICJDYXJpY2FtZW50byBkZWxsZSBkaWZmZXJlbnplIGRpICVzLi4uIgorIzogZ2l0LWJpc2VjdC5zaDozOTAKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJOZXNzdW4gZmlsZSBkaSBsb2cgc3BlY2lmaWNhdG8iCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjUKKyM6IGdpdC1iaXNlY3Quc2g6MzkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDA4Cittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyBkaSBjb3NhIHNpIHN0YSBwYXJsYW5kbz8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDIwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICJzdG8gZXNlZ3VlbmRvICRjb21tYW5kIgorCisjOiBnaXQtYmlzZWN0LnNoOjQyNworIywgc2gtZm9ybWF0CiBtc2dpZCAiIgotIkxPQ0FMOiBkZWxldGVkXG4iCi0iUkVNT1RFOlxuIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgogbXNnc3RyICIiCi0iTE9DQUxFOiBjYW5jZWxsYXRvXG4iCi0iUkVNT1RPOlxuIgorImJpc2VjdCBydW4gbm9uIHJpdXNjaXRvOlxuIgorImlsIGNvZGljZSBkaSB1c2NpdGEgJHJlcyBkYSAnJGNvbW1hbmQnIMOoIDwgMCBvcHB1cmUgPj0gMTI4IgogCi0jOiBsaWIvZGlmZi50Y2w6MTMwCisjOiBnaXQtYmlzZWN0LnNoOjQ1MworbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJiaXNlY3QgcnVuIG5vbiBwdcOyIHBpw7kgcHJvc2VndWlyZSIKKworIzogZ2l0LWJpc2VjdC5zaDo0NTkKKyMsIHNoLWZvcm1hdAogbXNnaWQgIiIKLSJSRU1PVEU6IGRlbGV0ZWRcbiIKLSJMT0NBTDpcbiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgogbXNnc3RyICIiCi0iUkVNT1RPOiBjYW5jZWxsYXRvXG4iCi0iTE9DQUxFOlxuIgorImJpc2VjdCBydW4gbm9uIHJpdXNjaXRvOlxuIgorImJpc2VjdF9zdGF0ZSAkc3RhdGUgw6ggdXNjaXRvIGNvbiBpbCBjb2RpY2UgZGkgZXJyb3JlICRyZXMiCiAKLSM6IGxpYi9kaWZmLnRjbDoxMzcKLW1zZ2lkICJMT0NBTDpcbiIKLW1zZ3N0ciAiTE9DQUxFOlxuIgorIzogZ2l0LWJpc2VjdC5zaDo0NjYKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgImJpc2VjdCBydW4gZXNlZ3VpdG8gY29uIHN1Y2Nlc3NvIgogCi0jOiBsaWIvZGlmZi50Y2w6MTQwCi1tc2dpZCAiUkVNT1RFOlxuIgotbXNnc3RyICJSRU1PVE86XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgotbXNnc3RyICJJbXBvc3NpYmlsZSB2aXN1YWxpenphcmUgJXMiCi0KLSM6IGxpYi9kaWZmLnRjbDoyMDMKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgotbXNnc3RyICJFcnJvcmUgbmVsIGNhcmljYW1lbnRvIGRlbCBmaWxlOiIKLQotIzogbGliL2RpZmYudGNsOjIxMAotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKLW1zZ3N0ciAiQXJjaGl2aW8gR2l0IChzb3R0b3Byb2dldHRvKSIKLQotIzogbGliL2RpZmYudGNsOjIyMgotbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKLW1zZ3N0ciAiKiBGaWxlIGJpbmFyaW8gKGlsIGNvbnRlbnV0byBub24gc2Fyw6AgbW9zdHJhdG8pLiIKLQotIzogbGliL2RpZmYudGNsOjIyNwotIywgdGNsLWZvcm1hdAorIzogZ2l0LXB1bGwuc2g6MjEKIG1zZ2lkICIiCi0iKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKLSIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKKyJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLlxuIgorIlBsZWFzZSwgZml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24sIG9yIHVzZSAnZ2l0IGNvbW1pdCAtYScuIgogbXNnc3RyICIiCi0iKiBJbCBmaWxlIG5vbiB0cmFjY2lhdG8gw6ggZGkgJWQgYnl0ZS5cbiIKLSIqIFNhcmFubm8gdmlzdWFsaXp6YXRpIHNvbG8gaSBwcmltaSAlZCBieXRlLlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6MjMzCi0jLCB0Y2wtZm9ybWF0CisjOiBnaXQtcHVsbC5zaDoyNQorbXNnaWQgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiSWwgcHVsbCBub24gw6ggcG9zc2liaWxlIHBlcmNow6kgY2kgc29ubyBmaWxlIGRpIGN1aSBub24gw6ggc3RhdG8gZXNlZ3VpdG8gaWwgIgorIm1lcmdlLiIKKworIzogZ2l0LXB1bGwuc2g6MTk3Cittc2dpZCAidXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyMuIFRoZSBmZXRjaCBpbnZvbHZlZCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2guCisjLiBUaGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggZmlsZSBpcyBzdGlsbCBiYXNlZCBvbiB0aGUKKyMuICRvcmlnX2hlYWQgY29tbWl0LCBidXQgd2UgYXJlIG1lcmdpbmcgaW50byAkY3Vycl9oZWFkLgorIy4gRmlyc3QgdXBkYXRlIHRoZSB3b3JraW5nIHRyZWUgdG8gbWF0Y2ggJGN1cnJfaGVhZC4KKyM6IGdpdC1wdWxsLnNoOjIyOAorIywgc2gtZm9ybWF0CiBtc2dpZCAiIgotIlxuIgotIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgotIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKKyJXYXJuaW5nOiBmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorIldhcm5pbmc6IGZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiV2FybmluZzogY29tbWl0ICRvcmlnX2hlYWQuIgogbXNnc3RyICIiCi0iXG4iCi0iKiAlcyBub24gdmlzdWFsaXp6YSBjb21wbGV0YW1lbnRlIHF1ZXN0byBmaWxlIG5vbiB0cmFjY2lhdG8uXG4iCi0iKiBQZXIgdmlzdWFsaXp6YXJlIGlsIGZpbGUgY29tcGxldG8sIHVzYXJlIHVuIHByb2dyYW1tYSBlc3Rlcm5vLlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6NDgyCi1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgIkltcG9zc2liaWxlIHJpbXVvdmVyZSBsYSBzZXppb25lIHNjZWx0YSBkYWxsYSBudW92YSByZXZpc2lvbmUuIgorIzogZ2l0LXB1bGwuc2g6MjUzCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgbWVyZ2UgZGkgYnJhbmNoIG11bHRpcGxpIGluIHVuIGhlYWQgdnVvdG8iCiAKLSM6IGxpYi9kaWZmLnRjbDo0ODkKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgIkltcG9zc2liaWxlIHByZXBhcmFyZSBsYSBzZXppb25lIHNjZWx0YSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisjOiBnaXQtcHVsbC5zaDoyNTcKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMiCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJlYmFzZSBzdSBicmFuY2ggbXVsdGlwbGkiCiAKLSM6IGxpYi9kaWZmLnRjbDo1NjgKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGxhIHJpZ2Egc2NlbHRhIGRhbGxhIG51b3ZhIHJldmlzaW9uZS4iCisjOiBnaXQtc3Rhc2guc2g6NTEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciBjb24gcGFyYW1ldHJpIG5vbiDDqCBpbXBsZW1lbnRhdG8iCiAKLSM6IGxpYi9kaWZmLnRjbDo1NzYKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgIkltcG9zc2liaWxlIHByZXBhcmFyZSBsYSByaWdhIHNjZWx0YSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisjOiBnaXQtc3Rhc2guc2g6NzQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAiTm9uIGhhaSBhbmNvcmEgdW4gY29tbWl0IGluaXppYWxlIgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0MwotbXNnaWQgIkRlZmF1bHQiCi1tc2dzdHIgIlByZWRlZmluaXRvIgorIzogZ2l0LXN0YXNoLnNoOjg5Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIkltcG9zc2liaWxlIHNhbHZhcmUgbG8gc3RhdG8gY29ycmVudGUgZGkgaW5kZXgiCiAKLSM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3lzdGVtICglcykiCi1tc2dzdHIgIkNvZGlmaWNhIGRpIHNpc3RlbWEgKCVzKSIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKLW1zZ2lkICJPdGhlciIKLW1zZ3N0ciAiQWx0cm8iCi0KLSM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTQKLW1zZ2lkICJlcnJvciIKLW1zZ3N0ciAiZXJyb3JlIgotCi0jOiBsaWIvZXJyb3IudGNsOjM2Ci1tc2dpZCAid2FybmluZyIKLW1zZ3N0ciAiYXR0ZW56aW9uZSIKLQotIzogbGliL2Vycm9yLnRjbDo5NAotbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCisjOiBnaXQtc3Rhc2guc2g6MTIzIGdpdC1zdGFzaC5zaDoxMzYKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKIG1zZ3N0ciAiIgotIkJpc29nbmEgY29ycmVnZ2VyZSBnbGkgZXJyb3JpIHN1ZGRldHRpIHByaW1hIGRpIGNyZWFyZSB1bmEgbnVvdmEgcmV2aXNpb25lLiIKIAotIzogbGliL2luZGV4LnRjbDo2Ci1tc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgotbXNnc3RyICJJbXBvc3NpYmlsZSBzYmxvY2NhcmUgbCdhY2Nlc3NvIGFsbCdpbmRpY2UiCisjOiBnaXQtc3Rhc2guc2g6MTQwCittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAiTmVzc3VuYSBtb2RpZmljYSBzZWxlemlvbmF0YSIKIAotIzogbGliL2luZGV4LnRjbDoxNQotbXNnaWQgIkluZGV4IEVycm9yIgotbXNnc3RyICJFcnJvcmUgbmVsbCdpbmRpY2UiCisjOiBnaXQtc3Rhc2guc2g6MTQzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIiIKIAotIzogbGliL2luZGV4LnRjbDoxNworIzogZ2l0LXN0YXNoLnNoOjE1NgorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuCisjLiAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKyMuIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorIy4gVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisjOiBnaXQtc3Rhc2guc2g6MjAyCisjLCBzaC1mb3JtYXQKIG1zZ2lkICIiCi0iVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCi0icmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKKyJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgICBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKIG1zZ3N0ciAiIgotIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbCdpbmRpY2UuIE9yYSBzYXLDoCBhdnZpYXRhIHVuYSBudW92YSBhbmFsaXNpIGNoZSAiCi0iYWdnaW9ybmVyw6AgZ2l0LWd1aS4iCisiZXJyb3JlOiBvcHppb25lIHNjb25vc2NpdXRhIHBlciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICAgIFBlciBhZ2dpdW5nZXJlIHVuIG1lc3NhZ2dpbywgdXNhcmUgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgogCi0jOiBsaWIvaW5kZXgudGNsOjI4Ci1tc2dpZCAiQ29udGludWUiCi1tc2dzdHIgIkNvbnRpbnVhIgorIzogZ2l0LXN0YXNoLnNoOjIyMworbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiTmVzc3VuYSBtb2RpZmljYSBsb2NhbGUgZGEgc2FsdmFyZSIKIAotIzogbGliL2luZGV4LnRjbDozMQotbXNnaWQgIlVubG9jayBJbmRleCIKLW1zZ3N0ciAiU2Jsb2NjYSBsJ2FjY2Vzc28gYWxsJ2luZGljZSIKKyM6IGdpdC1zdGFzaC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgaW5pemlhbGl6emFyZSBzdGFzaCIKIAotIzogbGliL2luZGV4LnRjbDoyODkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCi1tc2dzdHIgIiVzIG5vbiBmYXLDoCBwYXJ0ZSBkZWxsYSBwcm9zc2ltYSByZXZpc2lvbmUiCisjOiBnaXQtc3Rhc2guc2g6MjM1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzYWx2YXJlIGxvIHN0YXRvIGF0dHVhbGUiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzI4Ci1tc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKLW1zZ3N0ciAiUHJvbnRvIHBlciBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZS4iCi0KLSM6IGxpYi9pbmRleC50Y2w6MzQxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWRkaW5nICVzIgotbXNnc3RyICJBZ2dpdW50YSBkaSAlcyBpbiBjb3JzbyIKLQotIzogbGliL2luZGV4LnRjbDozOTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKLW1zZ3N0ciAiQW5udWxsYXJlIGxlIG1vZGlmaWNoZSBuZWwgZmlsZSAlcz8iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDAwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgotbXNnc3RyICJBbm51bGxhcmUgbGUgbW9kaWZpY2hlIGluIHF1ZXN0aSAlaSBmaWxlPyIKLQotIzogbGliL2luZGV4LnRjbDo0MDgKLW1zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCisjOiBnaXQtc3Rhc2guc2g6MjUzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgogbXNnc3RyICIiCi0iVHV0dGUgbGUgbW9kaWZpY2hlIG5vbiBwcmVwYXJhdGUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgc2FyYW5ubyBwZXJzZSBwZXIgIgotInNlbXByZS4iCiAKLSM6IGxpYi9pbmRleC50Y2w6NDExCi1tc2dpZCAiRG8gTm90aGluZyIKLW1zZ3N0ciAiTm9uIGZhcmUgbmllbnRlIgorIzogZ2l0LXN0YXNoLnNoOjM1MgorbXNnaWQgIk5vIHN0YXNoIGZvdW5kLiIKK21zZ3N0ciAiTmVzc3VubyBzdGFzaCB0cm92YXRvLiIKIAotIzogbGliL2luZGV4LnRjbDo0MjkKLW1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCi1tc2dzdHIgIkFubnVsbG8gbGUgbW9kaWZpY2hlIG5laSBmaWxlIHNlbGV6aW9uYXRpIgorIzogZ2l0LXN0YXNoLnNoOjM1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiVHJvcHBlIHJldmlzaW9uaSBzcGVjaWZpY2F0ZTogJFJFViIKIAotIzogbGliL2luZGV4LnRjbDo0MzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgJXMiCi1tc2dzdHIgIkFubnVsbG8gbGUgbW9kaWZpY2hlIGluICVzIgorIzogZ2l0LXN0YXNoLnNoOjM2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNlIG5vbiDDqCB1biByaWZlcmltZW50byB2YWxpZG8iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTMKKyM6IGdpdC1zdGFzaC5zaDozOTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIickYXJncycgbm9uIMOoIHVuIGNvbW1pdCBkaSB0aXBvIHN0YXNoIgorCisjOiBnaXQtc3Rhc2guc2g6NDA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyRhcmdzJyBub24gw6ggdW4gcmVmZXJpbWVudG8gYSB1bm8gc3Rhc2giCisKKyM6IGdpdC1zdGFzaC5zaDo0MTIKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBpbmRleCIKKworIzogZ2l0LXN0YXNoLnNoOjQxNgorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXBwbGljYXJlIHVubyBzdGFzaCBuZWwgbWV6em8gZGkgdW4gbWVyZ2UiCisKKyM6IGdpdC1zdGFzaC5zaDo0MjQKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICJDaSBzb25vIGNvbmZsaXR0aSBpbiBpbmRleC4gUHJvdmEgc2VuemEgLS1pbmRleC4iCisKKyM6IGdpdC1zdGFzaC5zaDo0MjYKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0NjAKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDc0Cittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIiR7UkVWfSBlbGltaW5hdGEgKCRzKSIKKworIzogZ2l0LXN0YXNoLnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiBub24gw6ggc3RhdG8gcG9zc2liaWxlIHJpbXVvdmVyZSBsYSB2b2NlIGRpIHN0YXNoIgorCisjOiBnaXQtc3Rhc2guc2g6NDk5Cittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJOb21lIGRlbCBicmFuY2ggbm9uIHNwZWNpZmljYXRvIgorCisjOiBnaXQtc3Rhc2guc2g6NTcwCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIoUGVyIHJpcHJpc3RpbmFybGkgZGlnaXRhIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICckcmVtb3RldXJsJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEwOQorIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjE1MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxNjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkdpdGRpciAnJGEnIGlzIHBhcnQgb2YgdGhlIHN1Ym1vZHVsZSBwYXRoICckYicgb3IgdmljZSB2ZXJzYSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0OQorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAicmVwbyBVUkw6ICckcmVwbycgZGV2ZSBlc3NlcmUgYXNzb2x1dG8gbyBpbml6aWFyZSBjb24gLi98Li4vIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI2NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcgZXNpc3RlIGdpw6AgaW4gaW5kZXgiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcwCisjLCBzaC1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCisiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIGl0LiIKIG1zZ3N0ciAiIgotIk5vbiBwb3NzbyBlZmZldHR1YXJlIGZ1c2lvbmkgZHVyYW50ZSB1bmEgY29ycmV6aW9uZS5cbiIKLSJcbiIKLSJCaXNvZ25hIGZpbmlyZSBkaSBjb3JyZWdnZXJlIHF1ZXN0YSByZXZpc2lvbmUgcHJpbWEgZGkgaW5pemlhcmUgdW5hICIKLSJxdWFsdW5xdWUgZnVzaW9uZS5cbiIKKyJJbCBzZWd1ZW50ZSBwYXRoIMOoIGlnbm9yYXRvIGRhIHVubyBkZWkgdHVvaSBmaWxlIC5naXRpZ25vcmU6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2EgLWYgc2UgdnVvaSBkYXZ2ZXJvIGFnZ2l1bmdlcmxvLiIKIAotIzogbGliL21lcmdlLnRjbDoyNworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIKK21zZ3N0ciAiJyRzbV9wYXRoJyBlc2lzdGUgZ2nDoCBlIG5vbiDDqCB1biByZXBvc2l0b3J5IGdpdCB2YWxpZG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjk3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRwcmVmaXgkc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckc21fcGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorbXNnc3RyICIiCisiSW50ZXJydXppb25lIGEgJyRzbV9wYXRoJzsgbG8gc2NyaXB0IGhhIHJlc3RpdHVpdG8gdW5vIHN0YXRvIGRpdmVyc28gZGEgemVyby4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDA2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSByZWdpc3RlcmVkIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjUyNAorIywgc2gtZm9ybWF0CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBub3QgaW5pdGlhbGl6ZWRcbiIKKyJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKIG1zZ3N0ciAiIgotIkwndWx0aW1vIHN0YXRvIGFuYWxpenphdG8gbm9uIGNvcnJpc3BvbmRlIGFsbG8gc3RhdG8gZGVsbCdhcmNoaXZpby5cbiIKLSJcbiIKLSJVbiBhbHRybyBwcm9ncmFtbWEgR2l0IGhhIG1vZGlmaWNhdG8gcXVlc3RvIGFyY2hpdmlvIGRhbGwndWx0aW1hIGFuYWxpc2kuIgotIkJpc29nbmEgZWZmZXR0dWFyZSB1bmEgbnVvdmEgYW5hbGlzaSBwcmltYSBkaSBwb3RlciBlZmZldHR1YXJlIHVuYSBmdXNpb25lLlxuIgotIlxuIgotIkxhIG51b3ZhIGFuYWxpc2kgY29taW5jZXLDoCBvcmEuXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6NDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCi0iXG4iCi0iWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCi0ibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorIzogZ2l0LXN1Ym1vZHVsZS5zaDo1MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKIG1zZ3N0ciAiIgotIlNlaSBuZWwgbWV6em8gZGkgdW5hIGZ1c2lvbmUgY29uIGNvbmZsaXR0aS5cbiIKLSJcbiIKLSJJbCBmaWxlICVzIGhhIGRlaSBjb25mbGl0dGkuXG4iCi0iXG4iCi0iQmlzb2duYSByaXNvbHZlcmUgaSBjb25mbGl0dGksIHByZXBhcmFyZSBpbCBmaWxlIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIGVkICIKLSJpbmZpbmUgY3JlYXJsYSBwZXIgY29tcGxldGFyZSBsYSBmdXNpb25lIGF0dHVhbGUuIFNvbG8gYSBxdWVzdG8gcHVudG8gcG90cmFpICIKLSJpbml6aWFyZSB1bidhbHRyYSBmdXNpb25lLlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjU1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKLSJcbiIKLSJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgotIlxuIgotIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgotIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKIG1zZ3N0ciAiIgotIlNlaSBuZWwgbWV6em8gZGkgdW5hIG1vZGlmaWNhLlxuIgotIlxuIgotIklsIGZpbGUgJXMgw6ggc3RhdG8gbW9kaWZpY2F0by5cbiIKLSJcbiIKLSJCaXNvZ25hIGNvbXBsZXRhcmUgbGEgY3JlYXppb25lIGRlbGxhIHJldmlzaW9uZSBhdHR1YWxlIHByaW1hIGRpIGluaXppYXJlICIKLSJ1bmEgZnVzaW9uZS4gSW4gcXVlc3RvIG1vZG8gc2Fyw6AgcGnDuSBmYWNpbGUgaW50ZXJyb21wZXJlIHVuYSBmdXNpb25lIG5vbiAiCi0icml1c2NpdGEsIG5lbCBjYXNvIGNlIG5lIGZvc3NlIGJpc29nbm8uXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgb2YgJXMiCi1tc2dzdHIgIiVzIGRpICVzIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEyMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgotbXNnc3RyICJGdXNpb25lIGRpICVzIGUgJXMgaW4gY29yc28uLi4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTMxCi1tc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCi1tc2dzdHIgIkZ1c2lvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzMwotbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgotbXNnc3RyICJGdXNpb25lIG5vbiByaXVzY2l0YS4gQmlzb2duYSByaXNvbHZlcmUgaSBjb25mbGl0dGkuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjE1OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdlIEludG8gJXMiCi1tc2dzdHIgIkZ1c2lvbmUgaW4gJXMiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTc3Ci1tc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCi1tc2dzdHIgIlJldmlzaW9uZSBkYSBmb25kZXJlIgotCi0jOiBsaWIvbWVyZ2UudGNsOjIxMgotbXNnaWQgIiIKLSJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCi0iXG4iCi0iWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgogbXNnc3RyICIiCi0iSW50ZXJydXppb25lIGltcG9zc2liaWxlIGR1cmFudGUgdW5hIGNvcnJlemlvbmUuXG4iCi0iXG4iCi0iQmlzb2duYSBmaW5pcmUgZGkgY29ycmVnZ2VyZSBxdWVzdGEgcmV2aXNpb25lLlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIyMgotbXNnaWQgIiIKLSJBYm9ydCBtZXJnZT9cbiIKLSJcbiIKLSJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKLSJcbiIKLSJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKIG1zZ3N0ciAiIgotIkludGVycm9tcGVyZSBmdXNpb25lP1xuIgotIlxuIgotIkwnaW50ZXJydXppb25lIGRlbGxhIGZ1c2lvbmUgYXR0dWFsZSBjYXVzZXLDoCBsYSBwZXJkaXRhIGRpICpUVVRURSogbGUgIgotIm1vZGlmaWNoZSBub24gYW5jb3JhIHByZXNlbnRpIG5lbGwnYXJjaGl2aW8uXG4iCi0iXG4iCi0iQ29udGludWFyZSBjb24gbCdpbnRlcnJ1emlvbmUgZGVsbGEgZnVzaW9uZSBhdHR1YWxlPyIKIAotIzogbGliL21lcmdlLnRjbDoyMjgKLW1zZ2lkICIiCi0iUmVzZXQgY2hhbmdlcz9cbiIKLSJcbiIKLSJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCi0iXG4iCi0iQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCisjOiBnaXQtc3VibW9kdWxlLnNoOjU3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKIG1zZ3N0ciAiIgotIlJpcHJpc3RpbmFyZSBsYSByZXZpc2lvbmUgYXR0dWFsZSBlIGFubnVsbGFyZSBsZSBtb2RpZmljaGU/XG4iCi0iXG4iCi0iTCdhbm51bGxhbWVudG8gZGVsbGUgbW9kaWZpY2hlIGNhdXNlcsOgIGxhIHBlcmRpdGEgZGkgKlRVVFRFKiBsZSBtb2RpZmljaGUgIgotIm5vbiBhbmNvcmEgcHJlc2VudGkgbmVsbCdhcmNoaXZpby5cbiIKLSJcbiIKLSJDb250aW51YXJlIGNvbiBsJ2FubnVsbGFtZW50byBkZWxsZSBtb2RpZmljaGUgYXR0dWFsaT8iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjM5Ci1tc2dpZCAiQWJvcnRpbmciCi1tc2dzdHIgIkludGVycnV6aW9uZSIKLQotIzogbGliL21lcmdlLnRjbDoyMzkKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAicmlwcmlzdGlubyBmaWxlIgotCi0jOiBsaWIvbWVyZ2UudGNsOjI2NwotbXNnaWQgIkFib3J0IGZhaWxlZC4iCi1tc2dzdHIgIkludGVycnV6aW9uZSBub24gcml1c2NpdGEuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjI2OQotbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKLW1zZ3N0ciAiSW50ZXJydXppb25lIGNvbXBsZXRhdGEuIFByb250by4iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjgKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgotbXNnc3RyICJJbXBvcnJlIGxhIHJpc29sdXppb25lIGFsbGEgcmV2aXNpb25lIGNvbXVuZT8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjkKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKLW1zZ3N0ciAiSW1wb3JyZSBsYSByaXNvbHV6aW9uZSBhbCByYW1vIGF0dHVhbGU/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCi1tc2dzdHIgIkltcG9ycmUgbGEgcmlzb2x1emlvbmUgYWxsJ2FsdHJvIHJhbW8/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgotIlxuIgotIiVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4iCi0iXG4iCi0iVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVuZG9uZSBvbmx5IGJ5IHJlc3RhcnRpbmcgdGhlIG1lcmdlLiIKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTc3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKIG1zZ3N0ciAiIgotIlNpIHN0YW5ubyBtb3N0cmFuZG8gc29sbyBsZSBtb2RpZmljaGUgY29uIGNvbmZsaXR0aS5cbiIKLSJcbiIKLSIlcyBzYXLDoCBzb3ZyYXNjcml0dG8uXG4iCi0iXG4iCi0iUXVlc3RhIG9wZXJhemlvbmUgcHXDsiBlc3NlcmUgbW9kaWZpY2F0YSBzb2xvIHJpY29taW5jaWFuZG8gbGEgZnVzaW9uZS4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCisjOiBnaXQtc3VibW9kdWxlLnNoOjU4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKIG1zZ3N0ciAiIgotIklsIGZpbGUgJXMgc2VtYnJhIGNvbnRlbmVyZSBjb25mbGl0dGkgbm9uIHJpc29sdGksIHByZXBhcmFyZSBwZXIgbGEgcHJvc3NpbWEgIgotInJldmlzaW9uZT8iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgorIzogZ2l0LXN1Ym1vZHVsZS5zaDo1ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCiBtc2dzdHIgIiIKLSJMYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIHBlciAlcyDDqCBwcmVwYXJhdGEgcGVyIGxhIHByb3NzaW1hIHJldmlzaW9uZSIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTQxCi1tc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDUgZ2l0LXN1Ym1vZHVsZS5zaDo5MjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKIG1zZ3N0ciAiIgotIk5vbiDDqCBwb3NzaWJpbGUgcmlzb2x2ZXJlIGkgY29uZmxpdHRpIHBlciBjYW5jZWxsYXppb25pIG8gbGluayBjb24gdW4gIgotInByb2dyYW1tYSBlc3Rlcm5vIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKLW1zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgotbXNnc3RyICJOb24gZXNpc3RlIHVuIGZpbGUgY29uIGNvbmZsaXR0aS4iCisjOiBnaXQtc3VibW9kdWxlLnNoOjcxMworbXNnaWQgIi0tY2FjaGVkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1maWxlcyIKK21zZ3N0ciAiLS1jYWNoZWQgbm9uIHB1w7IgZXNzZXJlIHVzYXRhIGNvbiAtLWZpbGVzIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKLW1zZ3N0ciAiJyVzJyBub24gw6ggdW5hIEdVSSBwZXIgbGEgcmlzb2x1emlvbmUgZGVpIGNvbmZsaXR0aS4iCisjLiB1bmV4cGVjdGVkIHR5cGUKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIm1vZGFsaXTDoCAkbW9kX2RzdCBpbmF0dGVzYSIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MjY4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgotbXNnc3RyICJJbCBwcm9ncmFtbWEgJyVzJyBub24gw6ggc3VwcG9ydGF0byIKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIEF0dGVuemlvbmU6ICRuYW1lIG5vbiBjb250aWVuZSBjb21taXQgJHNoYTFfc3JjIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKLW1zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKLW1zZ3N0ciAiTGEgcmlzb2x1emlvbmUgZGVpIGNvbmZsaXR0aSDDqCBnacOgIGF2dmlhdGEsIHRlcm1pbmFybGE/IgorIzogZ2l0LXN1Ym1vZHVsZS5zaDo3NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAgQXR0ZW56aW9uZTogJG5hbWUgbm9uIGNvbnRpZW5lIGNvbW1pdCAkc2hhMV9kc3QiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMyMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgotIiVzIgorIzogZ2l0LXN1Ym1vZHVsZS5zaDo3NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiAgQXR0ZW56aW9uZTogJG5hbWUgbm9uIGNvbnRpZW5lIGNvbW1pdCAkc2hhMV9zcmMgZSAkc2hhMV9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODAyCittc2dpZCAiYmxvYiIKK21zZ3N0ciAiYmxvYiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MDMKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgInNvdHRvbW9kdWxvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg0MAorbXNnaWQgIiMgU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCiBtc2dzdHIgIiIKLSJFcnJvcmU6IHJldmlzaW9uZSBub24gdHJvdmF0YTpcbiIKLSIlcyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKLSJcbiIKLSIlcyIKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQyCittc2dpZCAiIyBTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgYXZ2aWFyZSBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpOlxuIgotIlxuIgotIiVzIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKLW1zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCi1tc2dzdHIgIkF2dmlvIGRlbCBwcm9ncmFtbWEgcGVyIGxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgaW4gY29yc28uLi4iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKLW1zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCi1tc2dzdHIgIlJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgbm9uIHJpdXNjaXRhLiIKLQotIzogbGliL29wdGlvbi50Y2w6MTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgorIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyRuYW1lJyIKIG1zZ3N0ciAiIgotIkxhIGNvZGlmaWNhIGRlaSBjYXJhdHRlcmkgJyVzJyBzcGVjaWZpY2F0YSBwZXIgdHV0dGkgZ2xpIGFyY2hpdmkgbm9uIMOoIHZhbGlkYSIKIAotIzogbGliL29wdGlvbi50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAiIgotIkxhIGNvZGlmaWNhIGRlaSBjYXJhdHRlcmkgJyVzJyBzcGVjaWZpY2F0YSBwZXIgbCdhcmNoaXZpbyBhdHR1YWxlICBub24gw6ggIgotInZhbGlkYSIKKyN+IG1zZ2lkICItLSIKKyN+IG1zZ3N0ciAiLS0iCiAKLSM6IGxpYi9vcHRpb24udGNsOjExNwotbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCi1tc2dzdHIgIlJpcHJpc3RpbmEgdmFsb3JpIHByZWRlZmluaXRpIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjEKLW1zZ2lkICJTYXZlIgotbXNnc3RyICJTYWx2YSIKLQotIzogbGliL29wdGlvbi50Y2w6MTMxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQXJjaGl2aW8gZGkgJXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzMgotbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCi1tc2dzdHIgIlR1dHRpIGdsaSBhcmNoaXZpIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMzgKLW1zZ2lkICJVc2VyIE5hbWUiCi1tc2dzdHIgIk5vbWUgdXRlbnRlIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMzkKLW1zZ2lkICJFbWFpbCBBZGRyZXNzIgotbXNnc3RyICJJbmRpcml6em8gRW1haWwiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MQotbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgotbXNnc3RyICJSaWVwaWxvZ28gbmVsbGUgcmV2aXNpb25pIGRpIGZ1c2lvbmUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MgotbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKLW1zZ3N0ciAiUHJvbGlzc2l0w6AgZGVsbGEgZnVzaW9uZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQzCi1tc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKLW1zZ3N0ciAiTW9zdHJhIHN0YXRpc3RpY2hlIGRlbGxlIGRpZmZlcmVuemUgZG9wbyBsYSBmdXNpb25lIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDQKLW1zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiUHJvZ3JhbW1hIGRhIHV0aWxpenphcmUgcGVyIGxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NgotbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCi1tc2dzdHIgIkZpZGF0aSBkZWxsZSBkYXRlIGRpIG1vZGlmaWNhIGRlaSBmaWxlIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDcKLW1zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCi1tc2dzdHIgIiIKLSJFZmZldHR1YSBwb3RhdHVyYSBkZWkgZHVwbGljYXRpIGxvY2FsaSBkaSByYW1pIHJlbW90aSBkdXJhbnRlIGlsIHJlY3VwZXJvIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDgKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKLW1zZ3N0ciAiQXBwYWlhIGR1cGxpY2F0aSBsb2NhbGkgZGkgcmFtaSByZW1vdGkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0OQotbXNnaWQgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIgotbXNnc3RyICJSaWNlcmNhIGNvcGllIHNvbG8gbmVpIGZpbGUgbW9kaWZpY2F0aSIKLQotIzogbGliL29wdGlvbi50Y2w6MTUwCi1tc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCi1tc2dzdHIgIk51bWVybyBtaW5pbW8gZGkgbGV0dGVyZSBjaGUgYXR0aXZhbm8gbGEgcmljZXJjYSBkZWxsZSBjb3BpZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTUxCi1tc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCi1tc2dzdHIgIkdpb3JuaSBkaSBjb250ZXN0byBuZWxsYSBjcm9ub2xvZ2lhIGRlbGxlIGFubm90YXppb25pIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTIKLW1zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgotbXNnc3RyICJOdW1lcm8gZGkgbGluZWUgZGkgY29udGVzdG8gbmVsbGUgZGlmZmVyZW56ZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTUzCi1tc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKLW1zZ3N0ciAiTGFyZ2hlenphIGRlbCBtZXNzYWdnaW8gZGkgcmV2aXNpb25lIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTQKLW1zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCi1tc2dzdHIgIk1vZGVsbG8gcGVyIGlsIG5vbWUgZGkgdW4gbnVvdm8gcmFtbyIKLQotIzogbGliL29wdGlvbi50Y2w6MTU1Ci1tc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgotbXNnc3RyICJDb2RpZmljYSBwcmVkZWZpbml0YSBwZXIgaWwgY29udGVudXRvIGRlaSBmaWxlIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyMDMKLW1zZ2lkICJDaGFuZ2UiCi1tc2dzdHIgIkNhbWJpYSIKLQotIzogbGliL29wdGlvbi50Y2w6MjMwCi1tc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCi1tc2dzdHIgIkxpbmd1YSBkaXppb25hcmlvOiIKLQotIzogbGliL29wdGlvbi50Y2w6MjU0Ci1tc2dpZCAiQ2hhbmdlIEZvbnQiCi1tc2dzdHIgIkNhbWJpYSBjYXJhdHRlcmkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI1OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNob29zZSAlcyIKLW1zZ3N0ciAiU2NlZ2xpICVzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNjQKLW1zZ2lkICJwdC4iCi1tc2dzdHIgInB0LiIKLQotIzogbGliL29wdGlvbi50Y2w6Mjc4Ci1tc2dpZCAiUHJlZmVyZW5jZXMiCi1tc2dzdHIgIlByZWZlcmVuemUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjMxNAotbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCi1tc2dzdHIgIkltcG9zc2liaWxlIHNhbHZhcmUgY29tcGxldGFtZW50ZSBsZSBvcHppb25pOiIKLQotIzogbGliL3JlbW90ZS50Y2w6MTYzCi1tc2dpZCAiUmVtb3ZlIFJlbW90ZSIKLW1zZ3N0ciAiUmltdW92aSBhcmNoaXZpbyByZW1vdG8iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE2OAotbXNnaWQgIlBydW5lIGZyb20iCi1tc2dzdHIgIkVmZmV0dHVhIHBvdGF0dXJhIGRhIgotCi0jOiBsaWIvcmVtb3RlLnRjbDoxNzMKLW1zZ2lkICJGZXRjaCBmcm9tIgotbXNnc3RyICJSZWN1cGVyYSBkYSIKLQotIzogbGliL3JlbW90ZS50Y2w6MjE1Ci1tc2dpZCAiUHVzaCB0byIKLW1zZ3N0ciAiUHJvcGFnYSB2ZXJzbyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE5Ci1tc2dpZCAiQWRkIFJlbW90ZSIKLW1zZ3N0ciAiQWdnaXVuZ2kgYXJjaGl2aW8gcmVtb3RvIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjQKLW1zZ2lkICJBZGQgTmV3IFJlbW90ZSIKLW1zZ3N0ciAiQWdnaXVuZ2kgbnVvdm8gYXJjaGl2aW8gcmVtb3RvIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjggbGliL3Rvb2xzX2RsZy50Y2w6MzYKLW1zZ2lkICJBZGQiCi1tc2dzdHIgIkFnZ2l1bmdpIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzcKLW1zZ2lkICJSZW1vdGUgRGV0YWlscyIKLW1zZ3N0ciAiRGV0dGFnbGkgc3VsbCdhcmNoaXZpbyByZW1vdG8iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo1MAotbXNnaWQgIkxvY2F0aW9uOiIKLW1zZ3N0ciAiUG9zaXppb25lOiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjYyCi1tc2dpZCAiRnVydGhlciBBY3Rpb24iCi1tc2dzdHIgIkFsdHJhIGF6aW9uZSIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjY1Ci1tc2dpZCAiRmV0Y2ggSW1tZWRpYXRlbHkiCi1tc2dzdHIgIlJlY3VwZXJhIHN1Yml0byIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjcxCi1tc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKLW1zZ3N0ciAiSW5pemlhbGl6emEgbCdhcmNoaXZpbyByZW1vdG8gZSBwcm9wYWdhIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzcKLW1zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgotbXNnc3RyICJOb24gZmFyZSBhbHRybyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMQotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgIkluc2VyaXJlIHVuIG5vbWUgcGVyIGwnYXJjaGl2aW8gcmVtb3RvLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjExNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgcmVtb3RlIG5hbWUuIgotbXNnc3RyICInJXMnIG5vbiDDqCB1dGlsaXp6YWJpbGUgY29tZSBub21lIGRpIGFyY2hpdmlvIHJlbW90by4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBhZ2dpdW5nZXJlIGwnYXJjaGl2aW8gcmVtb3RvICclcycgcG9zdG8gaW4gJyVzJy4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMgbGliL3RyYW5zcG9ydC50Y2w6NgotIywgdGNsLWZvcm1hdAotbXNnaWQgImZldGNoICVzIgotbXNnc3RyICJyZWN1cGVyYSBkYSAlcyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEzNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKLW1zZ3N0ciAiUmVjdXBlcm8gJXMiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBpbml6aWFsaXp6YXJlIGwnYXJjaGl2aW8gcG9zdG8gaW4gJyVzJy4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NjMKLSM6IGxpYi90cmFuc3BvcnQudGNsOjgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicHVzaCAlcyIKLW1zZ3N0ciAicHJvcGFnYSB2ZXJzbyAlcyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCi1tc2dzdHIgIkltcG9zdG8gJXMgKGluICVzKSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Ci1tc2dpZCAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKLW1zZ3N0ciAiRWxpbWluYSByYW1vIHJlbW90byIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0NwotbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKLW1zZ3N0ciAiRGEgYXJjaGl2aW8iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTAgbGliL3RyYW5zcG9ydC50Y2w6MTM0Ci1tc2dpZCAiUmVtb3RlOiIKLW1zZ3N0ciAiUmVtb3RvOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo2NiBsaWIvdHJhbnNwb3J0LnRjbDoxNDkKLW1zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgotbXNnc3RyICJQb3NpemlvbmUgc3BlY2lmaWNhOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4NAotbXNnaWQgIkJyYW5jaGVzIgotbXNnc3RyICJSYW1pIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEwOQotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIgotbXNnc3RyICJFbGltaW5hIHNvbG8gc2UiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTExCi1tc2dpZCAiTWVyZ2VkIEludG86IgotbXNnc3RyICJGdXNvIGluOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTIKLW1zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCi1tc2dzdHIgIlNpIHJpY2hpZWRlIHVuIHJhbW8gcGVyICdGdXNvIGluJy4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgotIlxuIgotIiAtICVzIgotbXNnc3RyICIiCi0iSSByYW1pIHNlZ3VlbnRpIG5vbiBzb25vIHN0YXRpIGZ1c2kgY29tcGxldGFtZW50ZSBpbiAlczpcbiIKLSJcbiIKLSIgLSAlcyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCi0ibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCi1tc2dzdHIgIiIKLSJJbXBvc3NpYmlsZSB2ZXJpZmljYXJlIHVuYSBvIHBpw7kgZnVzaW9uaTogbWFuY2FubyBsZSByZXZpc2lvbmkgbmVjZXNzYXJpZS4gIgotIlByb3ZhIHByaW1hIGEgcmVjdXBlcmFybGUgZGEgJXMuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNwotbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKLW1zZ3N0ciAiU2NlZ2xpZXJlIHVubyBvIHBpw7kgcmFtaSBkYSBjYW5jZWxsYXJlLiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgotbXNnc3RyICJDYW5jZWxsYXppb25lIHJhbWkgZGEgJXMiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkyCi1tc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCi1tc2dzdHIgIk5lc3N1biBhcmNoaXZpbyBzZWxlemlvbmF0by4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCi1tc2dzdHIgIkFuYWxpc2kgaW4gY29yc28gJXMuLi4iCi0KLSM6IGxpYi9zZWFyY2gudGNsOjIxCi1tc2dpZCAiRmluZDoiCi1tc2dzdHIgIlRyb3ZhOiIKLQotIzogbGliL3NlYXJjaC50Y2w6MjMKLW1zZ2lkICJOZXh0IgotbXNnc3RyICJTdWNjIgotCi0jOiBsaWIvc2VhcmNoLnRjbDoyNAotbXNnaWQgIlByZXYiCi1tc2dzdHIgIlByZWMiCi0KLSM6IGxpYi9zZWFyY2gudGNsOjI1Ci1tc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCi1tc2dzdHIgIkRpc3Rpbmd1aSBtYWl1c2NvbGUiCi0KLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgotbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCi1tc2dzdHIgIkltcG9zc2liaWxlIHNjcml2ZXJlIHNob3J0Y3V0OiIKLQotIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCi1tc2dzdHIgIkltcG9zc2liaWxlIHNjcml2ZXJlIGljb25hOiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiQ29ycmV0dG9yZSBvcnRvZ3JhZmljbyBub24gc3VwcG9ydGF0byIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Ci1tc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCi1tc2dzdHIgIkNvcnJlemlvbmUgb3J0b2dyYWZpY2EgaW5kaXNwb25pYmlsZSIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Ci1tc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgotbXNnc3RyICJMYSBjb25maWd1cmF6aW9uZSBkZWwgY29ycmV0dG9yZSBvcnRvZ3JhZmljbyBub24gw6ggdmFsaWRhIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCi1tc2dzdHIgIklsIGRpemlvbmFyaW8gw6ggc3RhdG8gcmVpbXBvc3RhdG8gc3UgJXMuIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKLW1zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgotbXNnc3RyICJJbCBjb3JyZXR0b3JlIG9ydG9ncmFmaWNvIGhhIHJpcG9ydGF0byB1biBlcnJvcmUgYWxsJ2F2dmlvIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6ODAKLW1zZ2lkICJVbnJlY29nbml6ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiQ29ycmV0dG9yZSBvcnRvZ3JhZmljbyBub24gcmljb25vc2NpdXRvIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Ci1tc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCi1tc2dzdHIgIk5lc3N1biBzdWdnZXJpbWVudG8iCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKLW1zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIklsIGNvcnJldHRvcmUgb3J0b2dyYWZpY28gaGEgbWFuZGF0byB1biBFT0YgaW5hc3BldHRhdG8iCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKLW1zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKLW1zZ3N0ciAiRXJyb3JlIG5lbCBjb3JyZXR0b3JlIG9ydG9ncmFmaWNvIgotCi0jOiBsaWIvc3Noa2V5LnRjbDozMQotbXNnaWQgIk5vIGtleXMgZm91bmQuIgotbXNnc3RyICJDaGlhdmkgbm9uIHRyb3ZhdGUuIgotCi0jOiBsaWIvc3Noa2V5LnRjbDozNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCi1tc2dzdHIgIkNoaWF2ZSBwdWJibGljYSB0cm92YXRhIGluOiAlcyIKLQotIzogbGliL3NzaGtleS50Y2w6NDAKLW1zZ2lkICJHZW5lcmF0ZSBLZXkiCi1tc2dzdHIgIkNyZWEgY2hpYXZlIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo1NgotbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgotbXNnc3RyICJDb3BpYSBuZWdsaSBhcHB1bnRpIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo3MAotbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgotbXNnc3RyICJMYSB0dWEgY2hpYXZlIHB1YmJsaWNhIE9wZW5TU0giCi0KLSM6IGxpYi9zc2hrZXkudGNsOjc4Ci1tc2dpZCAiR2VuZXJhdGluZy4uLiIKLW1zZ3N0ciAiQ3JlYXppb25lIGNoaWF2ZSBpbiBjb3Jzby4uLiIKLQotIzogbGliL3NzaGtleS50Y2w6ODQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCi0iXG4iCi0iJXMiCi1tc2dzdHIgIiIKLSJJbXBvc3NpYmlsZSBhdnZpYXJlIHNzaC1rZXlnZW46XG4iCi0iXG4iCi0iJXMiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjExMQotbXNnaWQgIkdlbmVyYXRpb24gZmFpbGVkLiIKLW1zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbGEgY3JlYXppb25lIGRlbGxhIGNoaWF2ZS4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjExOAotbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCi1tc2dzdHIgIkxhIGNoaWF2ZSDDqCBzdGF0YSBjcmVhdGEgY29uIHN1Y2Nlc3NvLCBtYSBub24gw6ggc3RhdGEgdHJvdmF0YS4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjEyMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKLW1zZ3N0ciAiTGEgY2hpYXZlIMOoIGluOiAlcyIKLQotIzogbGliL3N0YXR1c19iYXIudGNsOjgzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKLW1zZ3N0ciAiJTEkcyAuLi4gJTYkczogJTIkKmkgZGkgJTQkKmkgKCU3JDNpJSUpIgotCi0jOiBsaWIvdG9vbHMudGNsOjc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVubmluZyAlcyByZXF1aXJlcyBhIHNlbGVjdGVkIGZpbGUuIgotbXNnc3RyICJCaXNvZ25hIHNlbGV6aW9uYXJlIHVuIGZpbGUgcHJpbWEgZGkgZXNlZ3VpcmUgJXMuIgotCi0jOiBsaWIvdG9vbHMudGNsOjkwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCi1tc2dzdHIgIlZ1b2kgZGF2dmVybyBlc2VndWlyZSAlcz8iCi0KLSM6IGxpYi90b29scy50Y2w6MTEwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbDogJXMiCi1tc2dzdHIgIkFjY2Vzc29yaW86ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjExMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmc6ICVzIgotbXNnc3RyICJFc2VndW86ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjE0OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCi1tc2dzdHIgIklsIHByb2dyYW1tYSBlc3Rlcm5vIMOoIHRlcm1pbmF0byBjb24gc3VjY2Vzc286ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjE1MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKLW1zZ3N0ciAiSWwgcHJvZ3JhbW1hIGVzdGVybm8gaGEgcmlwb3J0YXRvIHVuIGVycm9yZTogJXMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjIyCi1tc2dpZCAiQWRkIFRvb2wiCi1tc2dzdHIgIkFnZ2l1bmdpIGFjY2Vzc29yaW8iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjI4Ci1tc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCi1tc2dzdHIgIkFnZ2l1bmdpIHVuIG51b3ZvIGNvbWFuZG8iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjMzCi1tc2dpZCAiQWRkIGdsb2JhbGx5IgotbXNnc3RyICJBZ2dpdW5naSBwZXIgdHV0dGkgZ2xpIGFyY2hpdmkiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ1Ci1tc2dpZCAiVG9vbCBEZXRhaWxzIgotbXNnc3RyICJEZXR0YWdsaSBzdWxsJ2FjY2Vzc29yaW8iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ4Ci1tc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCi1tc2dzdHIgIlV0aWxpenphIGlsIHNlcGFyYXRvcmUgJy8nIHBlciBjcmVhcmUgdW4gYWxiZXJvIGRpIHNvdHRvbWVudToiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjYxCi1tc2dpZCAiQ29tbWFuZDoiCi1tc2dzdHIgIkNvbWFuZG86IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3NAotbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCi1tc2dzdHIgIk1vc3RyYSB1bmEgZmluZXN0cmEgZGkgZGlhbG9nbyBwcmltYSBkZWxsJ2F2dmlvIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4MAotbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgotbXNnc3RyICJDaGllZGkgYWxsJ3V0ZW50ZSBkaSBzY2VnbGllcmUgdW5hIHJldmlzaW9uZSAoaW1wb3N0YSAkUkVWSVNJT04pIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4NQotbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgotbXNnc3RyICJDaGllZGkgYWxsJ3V0ZW50ZSBkaSBmb3JuaXJlIGFyZ29tZW50aSBhZ2dpdW50aXZpIChpbXBvc3RhICRBUkdTKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKLW1zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCi1tc2dzdHIgIk5vbiBtb3N0cmFyZSBsYSBmaW5lc3RyYSBkaSBjb21hbmRvIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo5NwotbXNnaWQgIlJ1biBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCAoJEZJTEVOQU1FIG5vdCBlbXB0eSkiCi1tc2dzdHIgIkF2dmlhIHNvbG8gc2Ugw6ggc2VsZXppb25hdGEgdW5hIGRpZmZlcmVuemEgKCRGSUxFTkFNRSBub24gw6ggdnVvdG8pIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjEKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgotbXNnc3RyICJCaXNvZ25hIGRhcmUgdW4gbm9tZSBhbGwnYWNjZXNzb3Jpby4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjEyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkwnYWNjZXNzb3JpbyAnJXMnIGVzaXN0ZSBnacOgLiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTUxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKLSIlcyIKLW1zZ3N0ciAiIgotIkltcG9zc2liaWxlIGFnZ2l1bmdlcmUgbCdhY2Nlc3NvcmlvOlxuIgotIlxuIgotIiVzIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTAKLW1zZ2lkICJSZW1vdmUgVG9vbCIKLW1zZ3N0ciAiUmltdW92aSBhY2Nlc3NvcmlvIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTYKLW1zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKLW1zZ3N0ciAiUmltdW92aSBpIGNvbWFuZGkgYWNjZXNzb3JpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDAKLW1zZ2lkICJSZW1vdmUiCi1tc2dzdHIgIlJpbXVvdmkiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjIzNgotbXNnaWQgIihCbHVlIGRlbm90ZXMgcmVwb3NpdG9yeS1sb2NhbCB0b29scykiCi1tc2dzdHIgIihJbCBjb2xvcmUgYmx1IGluZGljYSBhY2Nlc3NvcmkgcGVyIGwnYXJjaGl2aW8gbG9jYWxlKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6Mjk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgotbXNnc3RyICJBdnZpYSBpbCBjb21hbmRvOiAlcyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzExCi1tc2dpZCAiQXJndW1lbnRzIgotbXNnc3RyICJBcmdvbWVudGkiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjM0OAotbXNnaWQgIk9LIgotbXNnc3RyICJPSyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCi1tc2dzdHIgIlJlY3VwZXJvIG51b3ZlIG1vZGlmaWNoZSBkYSAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCi1tc2dzdHIgInBvdGF0dXJhIHJlbW90YSBkaSAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKLW1zZ3N0ciAiRWZmZXR0dWEgcG90YXR1cmEgZGVpIGR1cGxpY2F0aSBsb2NhbGkgZGkgcmFtaSByZW1vdGkgY2FuY2VsbGF0aSBkYSAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCi1tc2dzdHIgIlByb3BhZ2F6aW9uZSBtb2RpZmljaGUgYSAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCi1tc2dzdHIgIk1pcnJvcmluZyB2ZXJzbyAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6ODIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgotbXNnc3RyICJQcm9wYWdhemlvbmUgJXMgJXMgYSAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCi1tc2dpZCAiUHVzaCBCcmFuY2hlcyIKLW1zZ3N0ciAiUHJvcGFnYSByYW1pIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKLW1zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCi1tc2dzdHIgIlJhbWkgZGkgb3JpZ2luZSIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCi1tc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQXJjaGl2aW8gZGkgZGVzdGluYXppb25lIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjkKLW1zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgotbXNnc3RyICJPcHppb25pIGRpIHRyYXNmZXJpbWVudG8iCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3MQotbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgotbXNnc3RyICJTb3ZyYXNjcml2aSByYW1vIGVzaXN0ZW50ZSAoYWxjdW5lIG1vZGlmaWNoZSBwb3RyZWJiZXJvIGVzc2VyZSBwZXJzZSkiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQotbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgotbXNnc3RyICJVdGlsaXp6YSAndGhpbiBwYWNrJyAocGVyIGNvbm5lc3Npb25pIGxlbnRlKSIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTc5Ci1tc2dpZCAiSW5jbHVkZSB0YWdzIgotbXNnc3RyICJJbmNsdWRpIGV0aWNoZXR0ZSIKKyN+IG1zZ2lkICJDb3VsZCBub3QgZXh0cmFjdCBlbWFpbCBmcm9tIGNvbW1pdHRlciBpZGVudGl0eS4iCisjfiBtc2dzdHIgIiIKKyN+ICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGVzdHJhcnJlIGwnaW5kaXJpenpvIGVtYWlsIGRhbGwnaWRlbnRpdMOgIGRlbCAiCisjfiAiY29tbWl0dGVyLiIKZGlmZiAtLWdpdCBhL3BvL25sLnBvIGIvcG8vbmwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzOTllMgotLS0gL2Rldi9udWxsCisrKyBiL3BvL25sLnBvCkBAIC0wLDAgKzEsMzQ5MyBAQAorIyBEdXRjaCB0cmFuc2xhdGlvbnMgZm9yIEdpdC4KKyMgQ29weXJpZ2h0IChDKSAyMDEyIFZpbmNlbnQgdmFuIFJhdmVzdGVpam4gPHZmckBseXgub3JnPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIFZpbmNlbnQgdmFuIFJhdmVzdGVpam4gPHZmckBseXgub3JnPiwgMjAxMi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdpdFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTAyLTI4IDA5OjE3KzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTAzLTA3IDEyOjAyKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFZpbmNlbnQgdmFuIFJhdmVzdGVpam4gPHZmckBseXgub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IER1dGNoXG4iCisiTGFuZ3VhZ2U6IG5sXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9QVNDSUlcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGFkdmljZS5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAiIgorCisjLgorIy4gKiBNZXNzYWdlIHVzZWQgYm90aCB3aGVuICdnaXQgY29tbWl0JyBmYWlscyBhbmQgd2hlbgorIy4gKiBvdGhlciBjb21tYW5kcyBkb2luZyBhIG1lcmdlIGRvLgorIy4KKyM6IGFkdmljZS5jOjY0Cittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsXG4iCisiYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPicgYXNcbiIKKyJhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQsXG4iCisib3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjM5Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0ZWQuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclLipzJ1xuIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclLipzJ1xuIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjEzMzEKK21zZ2lkICIgMCBmaWxlcyBjaGFuZ2VkXG4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjEzMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVkIGZpbGUgY2hhbmdlZCIKK21zZ2lkX3BsdXJhbCAiICVkIGZpbGVzIGNoYW5nZWQiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkaWZmLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICIsICVkIGluc2VydGlvbigrKSIKK21zZ2lkX3BsdXJhbCAiLCAlZCBpbnNlcnRpb25zKCspIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGlmZi5jOjEzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAlZCBkZWxldGlvbigtKSIKK21zZ2lkX3BsdXJhbCAiLCAlZCBkZWxldGlvbnMoLSkiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkaWZmLmM6MzM2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo1OQorbXNnaWQgImNvdWxkIG5vdCBydW4gZ3BnLiIKK21zZ3N0ciAiIgorCisjOiBncGctaW50ZXJmYWNlLmM6NzEKK21zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCittc2dzdHIgIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjgyCittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoxMjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoxMzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoxMzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQgJXMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogcmVtb3RlLmM6MTYxMworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogcmVtb3RlLmM6MTYyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMjAgYnVpbHRpbi9tZXJnZS5jOjg2MiBidWlsdGluL21lcmdlLmM6OTgzCisjOiBidWlsdGluL21lcmdlLmM6MTA5MyBidWlsdGluL21lcmdlLmM6MTEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEyMiBidWlsdGluL21lcmdlLmM6MzM0IGJ1aWx0aW4vbWVyZ2UuYzo4NjUKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDk1IGJ1aWx0aW4vbWVyZ2UuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE0MgorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE1NCBzZXF1ZW5jZXIuYzo2ODAgc2VxdWVuY2VyLmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTcyCittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNzQKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgcmV2ZXJ0LiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNzcKK21zZ2lkICJDb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIgb3IgImNoZXJyeS1waWNrIgorIzogc2VxdWVuY2VyLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjkzCittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyOTYKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFpbmxpbmUgd2FzIHNwZWNpZmllZCBidXQgY29tbWl0ICVzIGlzIG5vdCBhIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKyMuICJjaGVycnktcGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExCisjOiBzZXF1ZW5jZXIuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ0NSBzZXF1ZW5jZXIuYzo5MDQgYnVpbHRpbi9sb2cuYzoyODYgYnVpbHRpbi9sb2cuYzo3MDkKKyM6IGJ1aWx0aW4vbG9nLmM6MTMyNSBidWlsdGluL2xvZy5jOjE1NDQgYnVpbHRpbi9tZXJnZS5jOjM0OAorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE4MQorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ0OAorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjU3MworbXNnaWQgIk5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGtleTogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjY2MQorbXNnaWQgImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjYyCittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjY4MiBzZXF1ZW5jZXIuYzo3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjcwMSBzZXF1ZW5jZXIuYzo4MzUKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzAzCittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MDUKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzMxCittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZm9ybWF0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo5MjIKK21zZ2lkICJDYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6OTIzCittc2dpZCAiQ2FuJ3QgY2hlcnJ5LXBpY2sgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzNAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDAgd3Qtc3RhdHVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDIgd3Qtc3RhdHVzLmM6MTU5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNTEKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTY5Cittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3MworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NQorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NgorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzgKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZpbGVzOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjA3Cittc2dpZCAiYnVnIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIxMgorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjEzCittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIxNAorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjE1Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjE2Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjE3Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjE4Cittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjQ4Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNTAKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjUyCittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGU6ICAgJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcGllZDogICAgICVzIC0+ICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkOiAgICAlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kaWZpZWQ6ICAgJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtZWQ6ICAgICVzIC0+ICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlY2hhbmdlOiAlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93bjogICAgJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVubWVyZ2VkOiAgICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJidWc6IHVuaGFuZGxlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3MTMKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjcyMAorbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzMxCittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzQ1Cittc2dpZCAiVW50cmFja2VkIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc0NworbXNnaWQgIklnbm9yZWQiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzUxCittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3NTcKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCVzXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzYzCittc2dpZCAiICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50JXNcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3NjcKK21zZ2lkICIgKHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzY5IHd0LXN0YXR1cy5jOjc3MiB3dC1zdGF0dXMuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQlc1xuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc3MAorbXNnaWQgIiAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzczCittc2dpZCAiICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc3NgorbXNnaWQgIiAod29ya2luZyBkaXJlY3RvcnkgY2xlYW4pIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjg4NAorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6ODkwCittc2dpZCAiSW5pdGlhbCBjb21taXQgb24gIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjkwNQorbXNnaWQgImJlaGluZCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6OTA4IHd0LXN0YXR1cy5jOjkxMQorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo5MTMKK21zZ2lkICIsIGJlaGluZCAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NjcgYnVpbHRpbi9jb21taXQuYzoyOTgKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGggJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTkyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTUgYnVpbHRpbi9hZGQuYzo0NTYgYnVpbHRpbi9ybS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI3NgorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI5MAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk3Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozNTMKK21zZ2lkICJubyBmaWxlcyBhZGRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM1OQorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozOTEKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM5MworbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MjAgYnVpbHRpbi9jbGVhbi5jOjk1IGJ1aWx0aW4vY29tbWl0LmM6MzU4IGJ1aWx0aW4vbXYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjE2MgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQ3NiBidWlsdGluL212LmM6MjI5IGJ1aWx0aW4vcm0uYzoyNjAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjU4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBFT0YiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NgorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo3MQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgInJlbW90ZSAiIGluICJyZW1vdGUgYnJhbmNoICclcycgbm90IGZvdW5kIgorIzogYnVpbHRpbi9icmFuY2guYzoxNjMKK21zZ2lkICJyZW1vdGUgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcxCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc3Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGJyYW5jaCAnJXMnIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlc2JyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyAlc2JyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgJXNicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjQKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJlaGluZCAlZF0gIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkXSAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQsIGJlaGluZCAlZF0gIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAxCittc2dpZCAiKG5vIGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjIKK21zZ2lkICJzb21lIHJlZnMgY291bGQgbm90IGJlIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NzUKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjAwCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxNQorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc0MgorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzQ3IGJ1aWx0aW4vY2xvbmUuYzo1NTgKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwNQorbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo1NgorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2MAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNSBidWlsdGluL2NoZWNrb3V0LmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjEyIGJ1aWx0aW4vcmVzZXQuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjM0IGJ1aWx0aW4vY2hlY2tvdXQuYzozOTIKK21zZ2lkICJjb3JydXB0IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2NCBidWlsdGluL2NoZWNrb3V0LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzAyIGJ1aWx0aW4vY2hlY2tvdXQuYzo0OTggYnVpbHRpbi9jbG9uZS5jOjU4MworIzogYnVpbHRpbi9tZXJnZS5jOjgwOQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzE5IGJ1aWx0aW4vZGlmZi5jOjI5OCBidWlsdGluL21lcmdlLmM6NDA2Cittc2dpZCAiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDE0Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NjUKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIiCisKKyMuIFRoZSBzaW5ndWxhciB2ZXJzaW9uCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIG5ld19icmFuY2hfbmFtZSAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2OTIKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2OTYKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzIyCittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiIgorCisjLiBjYXNlICgxKQorIzogYnVpbHRpbi9jaGVja291dC5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIiIKKworIy4gY2FzZSAoMSk6IHdhbnQgYSB0cmVlCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTcyCittc2dpZCAiLUIgY2Fubm90IGJlIHVzZWQgd2l0aCAtYiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTgxCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg0Cittc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtYi8tQi8tLW9ycGhhbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg2Cittc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTkyCittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5OTkKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDUKK21zZ2lkICItLW9ycGhhbiBhbmQgLWJ8LUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwNworbXNnaWQgIi0tb3JwaGFuIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTcKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC1mIGFuZCAtbSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUxCittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBjaGVja291dDogdXBkYXRpbmcgcGF0aHMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLlxuIgorIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDYxCittc2dpZCAiZ2l0IGNoZWNrb3V0OiB1cGRhdGluZyBwYXRocyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDY2Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA2OQorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA4OAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwOTEKK21zZ2lkICItLW91cnMvLS10aGVpcnMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzgKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgyCittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTU1IGJ1aWx0aW4vY2xlYW4uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE1OSBidWlsdGluL2NsZWFuLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2MiBidWlsdGluL2NsZWFuLmM6MTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBub3QgcmVtb3ZlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgcmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDggYnVpbHRpbi9kaWZmLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NDkKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjYzOQorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0MworbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjczCittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDYgYnVpbHRpbi9jbG9uZS5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0MgorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MgorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTkKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKyJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjIwNSBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjIwOAorbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzI1Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY3Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzMKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDA2IGJ1aWx0aW4vY29tbWl0LmM6NDI3IGJ1aWx0aW4vY29tbWl0LmM6NDczCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2NgorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU1MCBidWlsdGluL2NvbW1pdC5jOjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NzkKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpZGVudCBzdHJpbmc6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NzAgYnVpbHRpbi9jb21taXQuYzo3MDMgYnVpbHRpbi9jb21taXQuYzoxMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjgyIGJ1aWx0aW4vc2hvcnRsb2cuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4NAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2OTQKK21zZ2lkICJjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3MAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgJXMuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzk2Cittc2dpZCAiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc5OQorbXNnaWQgIiIKKyIgTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODA0Cittc2dpZCAiIgorIiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDMKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg4MAorbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODk1IGJ1aWx0aW4vdGFnLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBleGlzdGluZyBhdXRob3IgZm91bmQgd2l0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTkwIGJ1aWx0aW4vY29tbWl0LmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDMwCittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNDEKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgJXMgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNDUKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NQorbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NworbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi8tLWZpeHVwLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjMKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4MAorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODIKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDg0Cittc2dpZCAiQ2xldmVyLi4uIGFtZW5kaW5nIHRoZSBsYXN0IG9uZSB3aXRoIGRpcnR5IGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODYKK21zZ2lkICJFeHBsaWNpdCBwYXRocyBzcGVjaWZpZWQgd2l0aG91dCAtaSBub3IgLW87IGFzc3VtaW5nIC0tb25seSBwYXRocy4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwOTYgYnVpbHRpbi90YWcuYzo1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTAxCittc2dpZCAiUGF0aHMgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyODAKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTI4MgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjMKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNQorbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQxNQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTIgYnVpbHRpbi9tZXJnZS5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ2NgorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTQgYnVpbHRpbi9tZXJnZS5jOjkzMyBidWlsdGluL21lcmdlLmM6OTY2Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM1Cittc2dpZCAiY2Fubm90IGxvY2sgSEVBRCByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM5Cittc2dpZCAiY2Fubm90IHVwZGF0ZSBIRUFEIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NTAKK21zZ2lkICIiCisiUmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBvciBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VhcmNoaW5nIHRvIGRlc2NyaWJlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzYKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDYyCittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ4MgorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0dGlzaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MjkzCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gJWQgdHJlZXMgZ2l2ZW46ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMAorbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjU4Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiISAlLSpzICUtKnMgLT4gJXMgIChjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI3MyBidWlsdGluL2ZldGNoLmM6MzUxCittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mjg0Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyODYgYnVpbHRpbi9mZXRjaC5jOjMxMyBidWlsdGluL2ZldGNoLmM6MzMxCittc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyOTgKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwMgorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzQ3Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM0NworbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1MworbXNnaWQgIihub24tZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mzg0IGJ1aWx0aW4vZmV0Y2guYzo2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZylcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTQ4Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NDkKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY2NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg5OAorbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTgKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NzAKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTcyCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTkxCittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo3OAorbXNnaWQgIlRvbyBtYW55IG9wdGlvbnMgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBvYmplY3QgZGlyZWN0b3J5ICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLiBZb3UgbWF5IGFsc29cbiIKKyJydW4gXCJnaXQgZ2NcIiBtYW51YWxseS4gU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6MjU2Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjaGRpcjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NDc4IGJ1aWx0aW4vZ3JlcC5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg5Cittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTQ0Cittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk2NworbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTcyCittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk3NQorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5ODMKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBwYXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgb2YgYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMyMiBidWlsdGluL2luaXQtZGIuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBnaXQgbGluayAlcyIKK21zZ3N0ciAiIgorCisjLgorIy4gKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisjLiAqIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gKiAiIiwgYW5kIHRoZSBsYXN0ICclcyVzJyBpcyB0aGUgdmVyYmF0aW0gZGlyZWN0b3J5IG5hbWUuCisjLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIwCittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIxCittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NDAKK21zZ2lkICJjYW5ub3QgdGVsbCBjd2QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTIxIGJ1aWx0aW4vaW5pdC1kYi5jOjUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NzgKK21zZ2lkICJDYW5ub3QgYWNjZXNzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MzkzIGJ1aWx0aW4vbG9nLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHR5cGU6ICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTkyCittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjY2NQorbXNnaWQgIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjkwCittc2dpZCAiTmVlZCBleGFjdGx5IG9uZSByYW5nZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo2OTgKK21zZ2lkICJOb3QgYSByYW5nZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo3MzUKK21zZ2lkICJDb3VsZCBub3QgZXh0cmFjdCBlbWFpbCBmcm9tIGNvbW1pdHRlciBpZGVudGl0eS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo3ODEKK21zZ2lkICJDb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo5NDgKK21zZ2lkICJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29tbWl0dGVyIGluZm8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE0Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxNgorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXggYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMSBidWlsdGluL3Nob3J0bG9nLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI0Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjYKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MQorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQwNgorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTI2IGJ1aWx0aW4vbG9nLmM6MTUyOCBidWlsdGluL2xvZy5jOjE1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkxCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQxCittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NgorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MCBidWlsdGluL21lcmdlLmM6Mjg3Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzE3Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM2MgorbXNnaWQgIldyaXRpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzY0Cittc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NjI3Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Njc3Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2OTQKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDcKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODg5Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkxMworbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTUKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTcKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTkKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4NgorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIwMiBnaXQtcHVsbC5zaDozMQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjA1IGdpdC1wdWxsLnNoOjM0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjA5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMTIKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMjEKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIyNgorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLW5vLWZmIHdpdGggLS1mZi1vbmx5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzMworbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjY0Cittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI2NworbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjY5Cittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzMgYnVpbHRpbi9tZXJnZS5jOjEzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDYwCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDgzIGJ1aWx0aW4vbWVyZ2UuYzoxNTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjExMgorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjExNQorbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjExOAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJIdWg/ICUuKnMgaXMgaW4gaW5kZXg/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNDAKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzEKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzMKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDUKK21zZ2lkICJjYW4ndCBmZG9wZW4gJ3Nob3cnIG91dHB1dCBmZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE3NSBidWlsdGluL3RhZy5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTg5Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMTAgYnVpbHRpbi9ub3Rlcy5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjE1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG5vdGUgY29udGVudHMgaGFzIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUxIGJ1aWx0aW4vdGFnLmM6NTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1MyBidWlsdGluL3RhZy5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3MiBidWlsdGluL25vdGVzLmM6NDQ1IGJ1aWx0aW4vbm90ZXMuYzo0NDcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDcgYnVpbHRpbi9ub3Rlcy5jOjU2MSBidWlsdGluL25vdGVzLmM6NjQ0CisjOiBidWlsdGluL25vdGVzLmM6NjQ5IGJ1aWx0aW4vbm90ZXMuYzo3MjQgYnVpbHRpbi9ub3Rlcy5jOjc2NgorIzogYnVpbHRpbi9ub3Rlcy5jOjk2OCBidWlsdGluL3Jlc2V0LmM6MjkzIGJ1aWx0aW4vdGFnLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOTkKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIHRoZQorIy4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMgaXRzIHZhbHVlCisjOiBidWlsdGluL25vdGVzLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDAgYnVpbHRpbi9ub3Rlcy5jOjU1NCBidWlsdGluL25vdGVzLmM6NjI3CisjOiBidWlsdGluL25vdGVzLmM6NjM5IGJ1aWx0aW4vbm90ZXMuYzo3MTIgYnVpbHRpbi9ub3Rlcy5jOjc1OQorIzogYnVpbHRpbi9ub3Rlcy5jOjEwMzMKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTMgYnVpbHRpbi9ub3Rlcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4NSBidWlsdGluL25vdGVzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NjM1Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjExMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICVzIGRvZXMgbm90IGFjY2VwdCBuZWdhdGl2ZSBmb3JtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgdmFsdWUgJyVzJyBmb3Igb3B0aW9uICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQ0Cittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzCittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjExMQorbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gcHJldmVudCB5b3UgZnJvbSBsb3NpbmcgaGlzdG9yeSwgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzIHdlcmUgcmVqZWN0ZWRcbiIKKyJNZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy4gJ2dpdCBwdWxsJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uICBTZWUgdGhlXG4iCisiJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgc2VjdGlvbiBvZiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxNjEKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxNzYKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTc3Cittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxODIKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgzCittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxODgKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyNzQKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyNzYKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJzb2Z0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImhhcmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAia2VlcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzcKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzkKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTYKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjEzMAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMzMKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDIKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxMQorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MCBidWlsdGluL3JldmVydC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI2Cittc2dpZCAicHJvZ3JhbSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjIwOQorbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMjQKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGUgZmlsZSBhbmQgdGhlIEhFQURcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleFxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uc1xuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBhdXRob3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB2ZXJpZnkgdGhlIHRhZyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQ3Cittc2dpZCAiIgorIlxuIgorIiNcbiIKKyIjIFdyaXRlIGEgdGFnIG1lc3NhZ2VcbiIKKyIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZC5cbiIKKyIjXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyNTQKK21zZ2lkICIiCisiXG4iCisiI1xuIgorIiMgV3JpdGUgYSB0YWcgbWVzc2FnZVxuIgorIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKKyIjXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyOTQKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjk2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzIxCittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjMzNAorbXNnaWQgInRhZyBoZWFkZXIgdG9vIGJpZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozNjYKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQyMQorbXNnaWQgInN3aXRjaCAncG9pbnRzLWF0JyByZXF1aXJlcyBhbiBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MDIKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA0Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUxNAorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUzNAorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU2MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGxvY2sgdGhlIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHVwZGF0ZSB0aGUgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NDkKK21zZ2lkICJZb3UgbmVlZCB0byBzZXQgeW91ciBjb21taXR0ZXIgaW5mbyBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MTM1Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MTQ0Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MTUzCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDoyNjUKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MzUyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmb3JtYXQgJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MzU0Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo0MDYKK21zZ2lkICItZCBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIERvIG5vdCB1c2UuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo0NjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJGRvdGVzdCBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo0NzQKK21zZ2lkICJQbGVhc2UgbWFrZSB1cCB5b3VyIG1pbmQuIC0tc2tpcCBvciAtLWFib3J0PyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NTAxCittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NTY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAkZmlsZXMpIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo3NDMKK21zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYW0uc2g6NzU0Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo3OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAkRklSU1RMSU5FIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo4MzUKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjg2MQorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMTcKK21zZ2lkICJCYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVja2luZyBvdXQgJyRzdGFydF9oZWFkJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8dmFsaWRicmFuY2g+Jy4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDAKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gc2Vla2VkIHRyZWUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDQKK21zZ2lkICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzIKK21zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTAKK21zZ2lkICInZ2l0IGJpc2VjdCBiYWQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDozNTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickaW52YWxpZCcgaXMgbm90IGEgdmFsaWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzYzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICckYnJhbmNoJy5cbiIKKyJUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5MAorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDozOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDo0MDgKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDo0NzQKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy4iCittc2dzdHIgIiIKKworIzogZ2l0LXB1bGwuc2g6MjEKK21zZ2lkICIiCisiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy5cbiIKKyJQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uLCBvciB1c2UgJ2dpdCBjb21taXQgLWEnLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcHVsbC5zaDoyNQorbXNnaWQgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1wdWxsLnNoOjE5NworbXNnaWQgInVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcHVsbC5zaDoyNTMKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGdpdC1wdWxsLnNoOjI1NworbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NTEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjg5Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjEyMyBnaXQtc3Rhc2guc2g6MTM2Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjE0MAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjE0MworbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNTYKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MjIzCittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MjM1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoyNTMKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjM1MgorbXNnaWQgIk5vIHN0YXNoIGZvdW5kLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MzU5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozNjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MzkzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MTIKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDE2Cittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MjQKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MjYKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0NjAKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQ5OQorbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NTcwCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyRyZW1vdGV1cmwnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJHBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDbG9uZSBvZiAnJHVybCcgaW50byBzdWJtb2R1bGUgcGF0aCAnJHBhdGgnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0NworIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRwYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM0NworIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRwcmVmaXgkcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckcGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckcGF0aCcgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQyMAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjUxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBwYXRoICckcGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1MzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU1MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTY2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckcGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDAgZ2l0LXN1Ym1vZHVsZS5zaDo5MjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwOAorbXNnaWQgIi0tIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzY2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Nzk3Cittc2dpZCAiYmxvYiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjc5OAorbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJG5hbWUnIgorbXNnc3RyICIiCmRpZmYgLS1naXQgYS9wby9wdF9QVC5wbyBiL3BvL3B0X1BULnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxN2VjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9wby9wdF9QVC5wbwpAQCAtMCwwICsxLDQ5ODAgQEAKKyMgUG9ydHVndWVzZSB0cmFuc2xhdGlvbnMgZm9yIEdpdCBwYWNrYWdlLgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgTWFyY28gU291c2EgPG1hcmNvbXNvdXNhIEFUIGdtYWlsLmNvbT4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgorIyBDb250cmlidXRlcnM6CisjICAgLSBNYXJjbyBTb3VzYSA8bWFyY29tc291c2EgQVQgZ21haWwuY29tPgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMDUtMDggMTY6MDYrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMDUtMTQgMjE6MTcrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWFyY28gU291c2EgPG1hcmNvbXNvdXNhIEFUIGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBQb3J0dWd1ZXNlXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiTGFuZ3VhZ2U6IHB0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGFkdmljZS5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAiZGljYTogJS4qc1xuIgorCisjLgorIy4gKiBNZXNzYWdlIHVzZWQgYm90aCB3aGVuICdnaXQgY29tbWl0JyBmYWlscyBhbmQgd2hlbgorIy4gKiBvdGhlciBjb21tYW5kcyBkb2luZyBhIG1lcmdlIGRvLgorIy4KKyM6IGFkdmljZS5jOjcwCittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsXG4iCisiYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPicgYXNcbiIKKyJhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQsXG4iCisib3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgImNhYmXDp2FsaG8gbsOjbyByZWNvbmhlY2lkbzogJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo4OQorIzogYnVpbHRpbi9jb21taXQuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3NzaXZlbCBhYnJpciAnJXMnIgorCisjOiBidW5kbGUuYzoxNDAKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoxNjQKKyM6IHNlcXVlbmNlci5jOjUzMworIzogc2VxdWVuY2VyLmM6OTY1CisjOiBidWlsdGluL2xvZy5jOjI4OQorIzogYnVpbHRpbi9sb2cuYzo3MTkKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzNQorIzogYnVpbHRpbi9sb2cuYzoxNTU0CisjOiBidWlsdGluL21lcmdlLmM6MzQ3CisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTgxCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgJWQgcmVmIgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zICVkIHJlZnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidW5kbGUuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVuZGxlLmM6MjkwCittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAicmV2LWxpc3QgbW9ycmV1IgorCisjOiBidW5kbGUuYzoyOTYKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzMQorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG8gbsOjbyByZWNvbmhlY2lkbzogJXMiCisKKyM6IGJ1bmRsZS5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzozNzYKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzozOTQKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgcGF3biBwYWNrLW9iamVjdHMiCisKKyM6IGJ1bmRsZS5jOjQxMgorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIm7Do28gY29uc2VndWUgY3JlYXIgJyVzJyIKKworIzogYnVuZGxlLmM6NDM3Cittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAibsOjbyBjb25zaWdvIHBhcnNlYXIgJXMiCisKKyM6IGNvbW1pdC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIG7Do28gw6kgdW0gY29tbWl0ISIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibWVtw7NyaWEgZXNnb3RhZGEiCisKKyM6IGNvbm5lY3RlZC5jOjM5Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGV4ZWN1dGFyICdnaXQgcmV2LWxpc3QnIgorCisjOiBjb25uZWN0ZWQuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkYXRlLmM6OTUKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICIiCisKKyM6IGRhdGUuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IGhvdXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgaG91cnMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGRheXMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgeWVhciIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjE1NAorIzogZGF0ZS5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgeWVhciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkaWZmLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclLipzJ1xuIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclLipzJ1xuIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjE0MDAKK21zZ2lkICIgMCBmaWxlcyBjaGFuZ2VkXG4iCittc2dzdHIgIiAwIGZpY2hlcm9zIG1vZGlmaWNhZG9zXG4iCisKKyM6IGRpZmYuYzoxNDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlZCBmaWxlIGNoYW5nZWQiCittc2dpZF9wbHVyYWwgIiAlZCBmaWxlcyBjaGFuZ2VkIgorbXNnc3RyWzBdICIgJWQgZmljaGVpcm8gbW9kaWZpY2FkbyIKK21zZ3N0clsxXSAiICVkIGZpY2hlaXJvcyBtb2RpZmljYWRvcyIKKworIzogZGlmZi5jOjE0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAlZCBpbnNlcnRpb24oKykiCittc2dpZF9wbHVyYWwgIiwgJWQgaW5zZXJ0aW9ucygrKSIKK21zZ3N0clswXSAiLCAlZCBhZGnDp8OjbygrKSIKK21zZ3N0clsxXSAiLCAlZCBhZGnDp8O1ZXMoKykiCisKKyM6IGRpZmYuYzoxNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJWQgZGVsZXRpb24oLSkiCittc2dpZF9wbHVyYWwgIiwgJWQgZGVsZXRpb25zKC0pIgorbXNnc3RyWzBdICIsICVkIGVsaW1pbmFkbygtKSIKK21zZ3N0clsxXSAiLCAlZCBlbGltaW5hZG9zKC0pIgorCisjOiBkaWZmLmM6MzQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo1OQorbXNnaWQgImNvdWxkIG5vdCBydW4gZ3BnLiIKK21zZ3N0ciAibsOjbyBjb25zZWd1ZSBlamVjdXRhciBncGcuIgorCisjOiBncGctaW50ZXJmYWNlLmM6NzEKK21zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCittc2dzdHIgIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjgyCittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoxMjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoxMjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6ICVzIgorbXNnc3RyICInJXMnOiAlcyIKKworIzogZ3JlcC5jOjEzMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjE0Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozMjcKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuXG4iCisiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gJTAuMWYgc2Vjb25kcyBhdXRvbWF0aWNhbGx5Li4uIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzY1Cittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogcmVtb3RlLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJBIHN1YSByYW1hIGVzdMOhIMOgIGZyZW50ZSBkZSAnJXMnIHBlbG8gY29tbWl0ICVkLlxuIgorbXNnc3RyWzFdICJBIHN1YSByYW1hIGVzdMOhIMOgIGZyZW50ZSBkZSAnJXMnIHBlbG9zIGNvbW1pdGVzICVkLlxuIgorCisjOiByZW1vdGUuYzoxNjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHJlbW90ZS5jOjE2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogc2VxdWVuY2VyLmM6MTIxCisjOiBidWlsdGluL21lcmdlLmM6ODY1CisjOiBidWlsdGluL21lcmdlLmM6OTc4CisjOiBidWlsdGluL21lcmdlLmM6MTA4OAorIzogYnVpbHRpbi9tZXJnZS5jOjEwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMjMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMzMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NjgKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDkwCisjOiBidWlsdGluL21lcmdlLmM6MTEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyIHBhcmEgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTQ0Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTQ3Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTYwCisjOiBzZXF1ZW5jZXIuYzo3NDEKKyM6IHNlcXVlbmNlci5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBncmF2YXIgcGFyYSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE3OAorbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVycnktcGljay4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTgwCittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHJldmVydC4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTgzCittc2dpZCAiQ29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiIG9yICJjaGVycnktcGljayIKKyM6IHNlcXVlbmNlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI2MQorbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0XG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjgyCittc2dpZCAiVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIGNvbW1pdCAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXNcbiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIGNvbW1pdCBwYXJlbnQgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6MzU4Cittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiTyBzZXUgZmljaGVpcm8gZGUgw61uZGljZSDDqSBuw6NvIGZ1bmRpZG8uIgorCisjOiBzZXF1ZW5jZXIuYzozNjEKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFEIgorbXNnc3RyICJWb2PDqiBuw6NvIHRlbSB1bWEgSEVBRCB2w6FsaWRhIgorCisjOiBzZXF1ZW5jZXIuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlICJyZXZlcnQiIG9yCisjLiAiY2hlcnJ5LXBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMQorIzogc2VxdWVuY2VyLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIG9idGVyIG1lbnNhZ2VtIGNvbW1pdCBwYXJhICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjUzNgorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICJwYXNzYWRvIGNvbW1pdCBjb20gbyBzZXQgdmF6aW8iCisKKyM6IHNlcXVlbmNlci5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICVzIGR1cmFudGUgdW0gJXMiCisKKyM6IHNlcXVlbmNlci5jOjYyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgbGluZSAlZC4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBwYXJzZWFyIGxpbmhhICVkLiIKKworIzogc2VxdWVuY2VyLmM6NjM0Cittc2dpZCAiTm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICJOZW5odW0gY29tbWl0IHBhcnNlYWRvLiIKKworIzogc2VxdWVuY2VyLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAlcy4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBsZXIgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGtleTogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVmFsb3IgaW52w6FsaWRvIHBhcmEgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjcyMgorbXNnaWQgImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzIzCittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc0MworIzogc2VxdWVuY2VyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3NjIKKyM6IHNlcXVlbmNlci5jOjg5NgorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3NjQKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc2NgorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc4OAorIzogYnVpbHRpbi9hcHBseS5jOjM2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6NzkyCittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZm9ybWF0ICVzLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGZvcm1hdGVhciAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjk4MworbXNnaWQgIkNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo5ODQKK21zZ2lkICJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogc2hhMV9uYW1lLmM6ODY0Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBzaGExX25hbWUuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIk7Do28gZXhpc3RlIHJhbWEgJyVzJyIKKworIzogc2hhMV9uYW1lLmM6ODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNoYTFfbmFtZS5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzUKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgImNhbWluaG9zIG7Do28gZnVuZGlkb3M6IgorCisjOiB3dC1zdGF0dXMuYzoxNDEKKyM6IHd0LXN0YXR1cy5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQzCisjOiB3dC1zdGF0dXMuYzoxNjAKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ0Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYWRkL3JtIDxmaWNoZWlybz4uLi5cIiBwYXJhIG1hcmNhciBjb21vIHJlc29sdmlkbykiCisKKyM6IHd0LXN0YXR1cy5jOjE1MgorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiTXVkYW7Dp2FzIGEgc2VyZW0gY29tbWl0YWRhcyIKKworIzogd3Qtc3RhdHVzLmM6MTcwCittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYWRkIDxmaWNoZWlybz4uLi5cIiBwYXJhIGFjdHVhbGl6YXIgbyBxdWUgdmFpIHNlciBjb21taXRhZG8pIgorCisjOiB3dC1zdGF0dXMuYzoxNzYKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IGFkZC9ybSA8ZmljaGVpcm8+Li4uXCIgcGFyYSBhY3R1YWxpemFyIG8gcXVlIHZhaSBzZXIgY29tbWl0YWRvKSIKKworIzogd3Qtc3RhdHVzLmM6MTc3Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc5Cittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmaWxlczoiCittc2dzdHIgIiVzIGZpY2hlcm9zOiIKKworIzogd3Qtc3RhdHVzLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIwOAorbXNnaWQgImJ1ZyIKK21zZ3N0ciAiZXJybyIKKworIzogd3Qtc3RhdHVzLmM6MjEzCittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAiZWxpbWluYWRvcyBlbSBhbWJvczoiCisKKyM6IHd0LXN0YXR1cy5jOjIxNAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAiYWRpY2lvbmFkbyBwb3IgbsOzczoiCisKKyM6IHd0LXN0YXR1cy5jOjIxNQorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgImVsaW1pbmFkb3MgcG9yIGVsZXM6IgorCisjOiB3dC1zdGF0dXMuYzoyMTYKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAiYWRpY2lvbmFkb3MgcG9yIGVsZXM6IgorCisjOiB3dC1zdGF0dXMuYzoyMTcKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiZWxpbWluYWRvcyBwb3IgbsOzczoiCisKKyM6IHd0LXN0YXR1cy5jOjIxOAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICJhZGljaW9uYWRvcyBlbSBhbWJvczoiCisKKyM6IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICJtb2RpZmljYWRvcyBlbSBhbWJvczoiCisKKyM6IHd0LXN0YXR1cy5jOjI0OQorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgIm5vdm9zIGNvbW1pdHMsICIKKworIzogd3Qtc3RhdHVzLmM6MjUxCittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICJjb250ZcO6ZG8gbW9kaWZpY2FkbywgIgorCisjOiB3dC1zdGF0dXMuYzoyNTMKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJjb250ZcO6ZG8gbsOjbyBzZWd1aWRvIgorCisjOiB3dC1zdGF0dXMuYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGU6ICAgJXMiCittc2dzdHIgIm5vdm8gZmljaGVpcm86ICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3BpZWQ6ICAgICAlcyAtPiAlcyIKK21zZ3N0ciAiY29waWFkbzogICAgICVzIC0+ICVzIgorCisjOiB3dC1zdGF0dXMuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZDogICAgJXMiCittc2dzdHIgImVsaW1pbmFkbzogICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJtb2RpZmllZDogICAlcyIKK21zZ3N0ciAibW9kaWZpY2FkbzogICAlcyIKKworIzogd3Qtc3RhdHVzLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtZWQ6ICAgICVzIC0+ICVzIgorbXNnc3RyICJtdWRhZG8gZGUgbm9tZTogICAgJXMgLT4gJXMiCisKKyM6IHd0LXN0YXR1cy5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlY2hhbmdlOiAlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93bjogICAgJXMiCittc2dzdHIgImRlc2NvbmhlY2lkbzogICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bm1lcmdlZDogICAlcyIKK21zZ3N0ciAibsOjbyBmdW5kaWRvczogICAlcyIKKworIzogd3Qtc3RhdHVzLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImJ1ZzogdW5oYW5kbGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjczNworbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgIk5hIHJhbWEiCisKKyM6IHd0LXN0YXR1cy5jOjc0NAorbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIk7Do28gZXN0w6EgZW0gbmVuaHVtYSByYW1hLiIKKworIzogd3Qtc3RhdHVzLmM6NzU1Cittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIkNvbW1pdCBpbmljaWFsIgorCisjOiB3dC1zdGF0dXMuYzo3NjkKK21zZ2lkICJVbnRyYWNrZWQiCittc2dzdHIgIk7Do28gc2VndWlkbyIKKworIzogd3Qtc3RhdHVzLmM6NzcxCittc2dpZCAiSWdub3JlZCIKK21zZ3N0ciAiSWdub3JhZG8iCisKKyM6IHd0LXN0YXR1cy5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc3NQorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzgxCittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiU2VtIG11ZGFuw6dhcyIKKworIzogd3Qtc3RhdHVzLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0JXNcbiIKK21zZ3N0ciAibmVuaHVtYSBhbHRlcmHDp8OjbyBhZGljaW9uYWRvIGFvIGNvbW1pdCVzXG4iCisKKyM6IHd0LXN0YXR1cy5jOjc4NworbXNnaWQgIiAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIikiCittc2dzdHIgIiAodXNhIFwiZ2l0IGFkZFwiIGUvb3UgXCJnaXQgY29tbWl0IC1hXCIpIgorCisjOiB3dC1zdGF0dXMuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50JXNcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3OTEKK21zZ2lkICIgKHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiCittc2dzdHIgIiAodXNhIFwiZ2l0IGFkZFwiIHBhcmEgc2VndWlyKSIKKworIzogd3Qtc3RhdHVzLmM6NzkzCisjOiB3dC1zdGF0dXMuYzo3OTYKKyM6IHd0LXN0YXR1cy5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCVzXG4iCittc2dzdHIgIm5hZGEgcGFyYSBmYXplciBjb21taXQlc1xuIgorCisjOiB3dC1zdGF0dXMuYzo3OTQKK21zZ2lkICIgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc5NworbXNnaWQgIiAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo4MDAKK21zZ2lkICIgKHdvcmtpbmcgZGlyZWN0b3J5IGNsZWFuKSIKK21zZ3N0ciAiIChkaXJlY3TDs3JpbyBkZSB0cmFiYWxobyB2YWNpbykiCisKKyM6IHd0LXN0YXR1cy5jOjkwOAorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKE7Do28gw6kgcmFtYSkiCisKKyM6IHd0LXN0YXR1cy5jOjkxNAorbXNnaWQgIkluaXRpYWwgY29tbWl0IG9uICIKK21zZ3N0ciAiQ29tbWl0IGluaWNpYWwgZW0gIgorCisjOiB3dC1zdGF0dXMuYzo5MjkKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJhdHLDoXMgIgorCisjOiB3dC1zdGF0dXMuYzo5MzIKKyM6IHd0LXN0YXR1cy5jOjkzNQorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAiYSBmcmVudGUgIgorCisjOiB3dC1zdGF0dXMuYzo5MzcKK21zZ2lkICIsIGJlaGluZCAiCittc2dzdHIgIiwgYXRyw6FzICIKKworIzogYnVpbHRpbi9hZGQuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NjcKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MjgyCittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJGYWxvdSBhIGF0dWFsaXphw6fDo28gZG9zIGZpY2hlaXJvcyIKKworIzogYnVpbHRpbi9hZGQuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICJlbGltaW5hciAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGggJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTkyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTUKKyM6IGJ1aWx0aW4vYWRkLmM6NDU2CisjOiBidWlsdGluL3JtLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc2Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gaW5kw61jZSIKKworIzogYnVpbHRpbi9hZGQuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciAnJXMnIHBhcmEgZXNjcmV2ZXIuIgorCisjOiBidWlsdGluL2FkZC5jOjI5MAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiTsOjbyBjb25zZWd1ZSBlc2NyZXZlciBwYXRjaCIKKworIzogYnVpbHRpbi9hZGQuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI5NworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiUGF0Y2ggdmF6aW8uIEFib3J0ZWQuIgorCisjOiBidWlsdGluL2FkZC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFwbGljYXIgbyAnJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjMxMgorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzUzCittc2dpZCAibm8gZmlsZXMgYWRkZWQiCittc2dzdHIgIm5lbmh1bSBmaWNoZWlyb3MgYWRpY2lvbmFkbyIKKworIzogYnVpbHRpbi9hZGQuYzozNTkKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJmYWxob3UgYSBhZGljaW9uYXIgZmljaGVpcm9zIgorCisjOiBidWlsdGluL2FkZC5jOjM5MQorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkzCittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQyMAorIzogYnVpbHRpbi9jbGVhbi5jOjk1CisjOiBidWlsdGluL2NvbW1pdC5jOjM0MgorIzogYnVpbHRpbi9tdi5jOjgyCisjOiBidWlsdGluL3JtLmM6MTYyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJmaWNoZWlybyBpbmRleCBjb3JydXB0byIKKworIzogYnVpbHRpbi9hZGQuYzo0NzYKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDkzCisjOiBidWlsdGluL212LmM6MjI5CisjOiBidWlsdGluL3JtLmM6MjYwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgImVzcGHDp28gZW0gYnJhY28gbsOjbyByZWNvbmhlY2lkbzogJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50ICVzIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMzg3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSBjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjIxCittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2MjMKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY4NworIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiIgorCisjLiB0aGVyZSBoYXMgdG8gYmUgb25lIGh1bmsgKGZvcndhcmQgaHVuaykKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxODY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTk1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjIwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG8gbGVyICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjExNgorbXNnaWQgIm9vcHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICJjb21lw6dvIGRlIGxpbmhhIGludsOhbGlkbzogJyVjJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSB0byBhcHBseSBmcmFnbWVudCBhdCAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mjc3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDQ1CisjOiBidWlsdGluL2FwcGx5LmM6MzA2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIG9mICVzIGZhaWxlZCIKK21zZ3N0ciAibGVyICVzIGZhbGhvdSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwNzcKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXM6IGrDoSBleGlzdGUgbm8gZXNwYcOnbyBkZSB0cmFiYWxobyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGhhcyBiZWVuIGRlbGV0ZWQvcmVuYW1lZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE0MQorIzogYnVpbHRpbi9hcHBseS5jOjMxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIgorbXNnc3RyICIlczogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiBuw6NvIHRlbSBjb3JyZXNwb25kZW5jaWEgYW8gaW5kZXgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI0MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBqw6EgZXhpc3RlIG5vIGluZMOtY2UiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSVzJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzMzCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjEyCisjOiBidWlsdGluL3Jlc2V0LmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1YnByb2plY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc2l2ZWwgJ3N0YXQnIG8gbm92byBmaWNoZWlybyBjcmVhZG8gJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvc2luZyBmaWxlICclcyciCittc2dzdHIgImZlY2hhciBmaWNoZXJvICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTk3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzY1MworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNjYxCittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIiIKKworIy4gU2F5IHRoaXMgZXZlbiB3aXRob3V0IC0tdmVyYm9zZQorIzogYnVpbHRpbi9hcHBseS5jOjM2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODI5Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICJlbnRyYWRhIG7Do28gcmVjb25oZWNpZGEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODQwCittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIGZpY2hlcm8gaW5kw61jZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMzUKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IGZvcmEgZGUgdW0gcmVwb3NpdG9yaW8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDM4Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIGZvcmEgZGUgdW0gcmVwb3NpdG9yaW8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3NzaXZlbCBhYnJpciBwYXRjaCAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA2OAorIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwNzQKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NTgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IEVPRiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJlcnJvIHJlbW90bzogJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY2Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjcxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4MAorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgdXNhciAtYSBjb20gdW0gLWQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTg2Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGJyYW5jaCAnJXMnIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAicmFtYSByZW1vdGEgJyVzIG7Do28gZW5jb250cmFkYS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgInJhbWEgJyVzJyBuw6NvIGVuY29udHJhZG8uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJybyBhIGVsaW1pbmFyIHJhbWEgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJFbGltaW5hciByYW1hICVzIChlcmEgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzOQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgcG9pbnQgYXQgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkXSAiCittc2dzdHIgImF0csOhcyAlZF0gIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZF0gIgorbXNnc3RyICJhIGZyZW50ZSAlZF0gIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCwgYmVoaW5kICVkXSAiCittc2dzdHIgImEgZnJlbnRlICVkLCBhdHLDoXMgJWRdICIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MjEKK21zZ2lkICIobm8gYnJhbmNoKSIKK21zZ3N0ciAiKG7Do28gw6kgcmFtYSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg2Cittc2dpZCAic29tZSByZWZzIGNvdWxkIG5vdCBiZSByZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTk5Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiTm9tZSBkYSByYW1hIGludsOhbGlkYTogJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjQKK21zZ2lkICJCcmFuY2ggcmVuYW1lIGZhaWxlZCIKK21zZ3N0ciAiRmFsaG91IHJlbm9tZWHDp8OjbyBkYSByYW1hIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiUmVub21lYWRvIHVtYSByYW1hIGVycm9uZWEgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzOQorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjkKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc3NAorIzogYnVpbHRpbi9jbG9uZS5jOjU1OAorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzk0Cittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiBlIC0tdmVyYm9zZSBzw6NvIGluY29tcGF0w612ZWlzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MworbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIGVzdMOhIGJlbVxuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjU2Cittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTMKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNQorIzogYnVpbHRpbi9jaGVja291dC5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgYWxsIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIzNAorIzogYnVpbHRpbi9jaGVja291dC5jOjM5MgorbXNnaWQgImNvcnJ1cHQgaW5kZXggZmlsZSIKK21zZ3N0ciAiZmljaGVpcm8gaW5kZXggY29ycnVwdG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMDIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0OTgKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1ODMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMxOQorIzogYnVpbHRpbi9kaWZmLmM6MzAyCisjOiBidWlsdGluL21lcmdlLmM6NDA4Cittc2dpZCAiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDE0Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NjYKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCDDqSBhZ29yYSBlbSAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUmVzZXQgcmFtYSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIkrDoSBlbSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJNdWRhZG8gcGFyYSBhIG5vdmEgcmFtYSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiTXVkYWRvIHBhcmEgYSByYW1hICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIgLi4uIGUgJWQgbWFpcy5cbiIKKworIy4gVGhlIHNpbmd1bGFyIHZlcnNpb24KKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggbmV3X2JyYW5jaF9uYW1lICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY5MworbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY5NworbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MjMKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICIiCisKKyMuIGNhc2UgKDEpCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiIgorCisjLiBjYXNlICgxKTogd2FudCBhIHRyZWUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzMKK21zZ2lkICItQiBjYW5ub3QgYmUgdXNlZCB3aXRoIC1iIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODIKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODUKK21zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC1iLy1CLy0tb3JwaGFuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODcKK21zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5OTMKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDAKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDYKK21zZ2lkICItLW9ycGhhbiBhbmQgLWJ8LUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwOAorbXNnaWQgIi0tb3JwaGFuIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTgKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC1mIGFuZCAtbSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUyCittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBjaGVja291dDogdXBkYXRpbmcgcGF0aHMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLlxuIgorIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDYyCittc2dpZCAiZ2l0IGNoZWNrb3V0OiB1cGRhdGluZyBwYXRocyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDY3Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3MAorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA4OQorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwOTIKK21zZ2lkICItLW91cnMvLS10aGVpcnMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzgKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgyCittc2dpZCAiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1uIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg1Cittc2dpZCAiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLW4gbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTU1CisjOiBidWlsdGluL2NsZWFuLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNTkKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiRWxpbWluYW5kbyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTYyCisjOiBidWlsdGluL2NsZWFuLmM6MTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBub3QgcmVtb3ZlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgcmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImZhbGhvdSBhIGFicmlyICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiZmFsaG91IGEgY3JpYXIgbyBkaXJlY3TDs3JpbyAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA4CisjOiBidWlsdGluL2RpZmYuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgImZhbGhvdSBhIGNvcGlhciBvIGZpY2hlaXJvIHBhcmEgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICJ0ZXJtaW5hZG8uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU0OQorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjM5Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiRGVtYXNpYWRvcyBwYXJhbWV0cm9zLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0MworbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjczCittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDYKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAiQ2xvbmFuZG8gZW0gdW0gcmVwb3NpdG9yaW8gbnUgKGJhcmUpICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICJDbG9uYXIgZW0gJyVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorbXNnc3RyICJOw6NvIHNlaSBjb21vIGNsb25hciAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODQyCittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDMKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJPIHNldSBub21lIGUgZW5kZXJlw6dvIGRlIGUtbWFpbCBmb3JhbSBjb25maWd1cmFkb3MgYXV0b21hdGljYW1lbnRlIGNvbSBiYXNlXG4iCisibm8gbyBzZXUgdXN1YXJpbyBlIG5vbWUgZGEgbWFxdWluYS4gUG9yIGZhdm9yLCB2ZXJpZmlxdWUgc2UgZWxlcyBzw6NvIHByZWNpc29zLlxuIgorIlZvY8OqIHBvZGUgc3VwcmltaXIgZXN0YSBtZW5zYWdlbSwgY29uZmlndXJhbmRvLWxvcyBleHBsaWNpdGFtZW50ZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJPIHRldSBOb21lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHR1QGV4YW1wbG8uY29tXG4iCisiXG4iCisiQXDDs3MgZmF6ZXIgaXNzbywgdm9jw6ogcG9kZSBjb3JyZWdpciBhIGlkZW50aWRhZGUgdXNhZGEgZW0gZXN0ZSBjb21taXQgY29tOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NQorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwCittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgcmVzZXQnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMDkKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTEKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1NworbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImZhbGhvdSBhZGljaW9uYXIgaW50ZXJhdGl2byIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTAKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDExCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ0MgorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ0NAorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ1NAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIGluZMOtY2UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTQ5CisjOiBidWlsdGluL2NvbW1pdC5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdDogJXMiCittc2dzdHIgImNvbW1pdCBpbnbDoWxpZG86ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU3OAorbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlkZW50IHN0cmluZzogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY3NworIzogYnVpbHRpbi9jb21taXQuYzo3MTAKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4OQorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjkxCittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3NzaXZlbCBsZXIgbyBmaWNoZWlybyBkZSBsb2cgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDEKK21zZ2lkICJjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgImEgbWVuc2FnZW0gZG8gY29tbWl0IGVzdMOhIHZhemlhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxNworbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAibsOjbyDDqSBwb3NzaXZlbCBsZXIgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyMQorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgIm7Do28gw6kgcG9zc2l2ZWwgbGVyIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc2l2ZWwgbGVyICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzc3Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODA1Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODEwCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICcjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJXMiCittc2dzdHIgIiVzQXV0b3I6ICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJXMiCittc2dzdHIgIiVzQ29tbWl0YWRvcjogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODUwCittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4ODcKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkwMgorIzogYnVpbHRpbi90YWcuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGV4aXN0aW5nIGF1dGhvciBmb3VuZCB3aXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDE0CisjOiBidWlsdGluL2NvbW1pdC5jOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NAorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY1Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIlZvY8OqIG7Do28gdGVtIG5hZGEgYSBjb3JyZWdpci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2OAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDcwCittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hlcnJ5LXBpY2sgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNzMKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4MworbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4NQorbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi8tLWZpeHVwLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwOTMKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTExMAorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMTIKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTE0Cittc2dpZCAiQ2xldmVyLi4uIGFtZW5kaW5nIHRoZSBsYXN0IG9uZSB3aXRoIGRpcnR5IGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMTYKK21zZ2lkICJFeHBsaWNpdCBwYXRocyBzcGVjaWZpZWQgd2l0aG91dCAtaSBub3IgLW87IGFzc3VtaW5nIC0tb25seSBwYXRocy4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjYKKyM6IGJ1aWx0aW4vdGFnLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEzMQorbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzE1Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMTcKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU4Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjAKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIChyb290LWNvbW1pdCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1MAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NTQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzYKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NjEKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzUKK21zZ2lkICJjYW5ub3QgbG9jayBIRUFEIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzkKK21zZ2lkICJjYW5ub3QgdXBkYXRlIEhFQUQgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5MAorbXNnaWQgIiIKKyJSZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIG9yIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJzZWFyY2hpbmcgdG8gZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQzNgorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NjIKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAiTmVuaHVtIG5vbWUgZW5jb250cmFkbywgbsOjbyBkZXNjcmV2ZSBuYWRhLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ4MgorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0dGlzaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6Mjk3Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIk7Do28gw6kgdW0gcmVwb3NpdG9yaW8gZ2l0IgorCisjOiBidWlsdGluL2RpZmYuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiAlZCB0cmVlcyBnaXZlbjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAwCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICJvYmplY3RvICVzIG7Do28gZW5jb250cmFkbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI1OQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW0FjdHVhbGl6YWRhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIhICUtKnMgJS0qcyAtPiAlcyAgKGNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mjc0CisjOiBidWlsdGluL2ZldGNoLmM6MzYwCittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW3JlamVpdGFkb10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyODUKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIltldGlxdWV0YSBhY3R1YWxpemFkYV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyODcKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMjIKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNDAKK21zZ2lkICIgICh1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwNQorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW25vdmEgZXRpcXVldGFdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzA4Cittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJbbm92YSByYW1hXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMxMQorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW25vdmEgcmVmXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNTYKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJhY3R1YWxpemHDp8OjbyBmb3LDp2FkYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM2MgorbXNnaWQgIihub24tZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiKG5vbi1mYXN0LWZvcndhcmQpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzkzCisjOiBidWlsdGluL2ZldGNoLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJuw6NvIMOpIHBvc3NpdmVsIGFicmlyICVzOiAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICJQYXJhICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTU3Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbZWxpbWluYWRvXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU1OAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU1Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIobmVuaHVtKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY3NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIkJhaXhhbmRvICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4OTAKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTA3Cittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJOZW5odW0gcmVwb3NpdMOzcmlvIHJlbW90byBlc3BlY2lmaWNhZG8uIFBvciBmYXZvciwgZXNwZWNpZmlxdWUgdW0gVVJMIG91IG9cbiIKKyJub21lIHJlbW90byBhIHBhcnRpciBkbyBxdWFsIG5vdmFzIHJldmlzw7VlcyBkZXZlbSBzZXIgb2J0aWRhLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkyNworbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIlZvY8OqIHByZWNpc2EgZXNwZWNpZmljYXIgdW0gbm9tZSBkYSBldGlxdWV0YS4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NzkKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTgxCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAwMAorbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAiSW52w6FsaWRvICVzOiAnJXMnIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBvYmplY3QgZGlyZWN0b3J5ICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLiBZb3UgbWF5IGFsc29cbiIKKyJydW4gXCJnaXQgZ2NcIiBtYW51YWxseS4gU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6MjUxCittc2dpZCAiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNoZGlyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo0NzgKKyM6IGJ1aWx0aW4vZ3JlcC5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg4Cittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTQzCittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk2NgorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTcxCittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk3NAorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5ODIKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJmb3JtYXRvIGFqdWRhIG7Do28gcmVjb25oZWNpZG8gJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6ODcKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwMAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoxMjYKKyM6IGJ1aWx0aW4vaGVscC5jOjE1NAorIzogYnVpbHRpbi9oZWxwLmM6MTYzCisjOiBidWlsdGluL2hlbHAuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6Mjg3Cittc2dpZCAiVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBnaXQgY29tbWFuZHMgYXJlOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzozNzIKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzgwCittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMgorIzogYnVpbHRpbi9oZWxwLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJgZ2l0ICVzJyBpcyBhbGlhc2VkIHRvIGAlcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTA0Cittc2dpZCAib2JqZWN0IG9mIHVuZXhwZWN0ZWQgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTEKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyCittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjQKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzEKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc2l2ZWwgY3JlYXIgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgIk7Do28gw6kgcG9zc2l2ZWwgYWJyaXIgbyBmaWNoZWlybyBwYWNrZmlsZSAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDYKK21zZ2lkICJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJWx1OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNDUKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM1MworbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAib2plY3RvIGNvbSB0aXBvIGRlc2NvbmhlY2lkbyAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzkwCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAiTsOjbyDDqSBwb3NzaXZlbCBwcmVhZCBwYWNrIGZpbGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDA1Cittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvYmplY3RvIGV4aXN0ZW50ZSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAiaW52w6FsaWRvIG9iamVjdG8gYmxvYiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgImludsOhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUwMgorbXNnaWQgIkVycm9yIGluIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTc2CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo2MDIKK21zZ2lkICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzA2Cittc2dpZCAiUmVjZWl2aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzA2Cittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MjgKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzMzCittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICJOw6NvIMOpIHBvc3NpdmVsIGZzdGF0IHBhY2tmaWxlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzYKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzU0Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAiUmVzb2x2ZW5kbyBkZWx0YXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODkwCittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3NzaXZlbCBlc2NyZXZlciBvIGZpY2hlcm8ga2VwcCAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcyciCittc2dzdHIgIk7Do28gw6kgcG9zc2l2ZWwgZmVjaGFyIG8gZmljaGVybyBlc2NyaXRvICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkyNAorbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgIk7Do28gw6kgcG9zc2l2ZWwgZ3VhcmRhciBvIGZpY2hlcm8gcGFjayIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTM1Cittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgIk7Do28gw6kgcG9zc2l2ZWwgZ3VhcmRhciBmaWNoZXJvIGluZGV4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJOw6NvIMOpIHBvc3NpdmVsIGFicmlyIG8gZXhpc3RlbnRlIGZpY2hlaXJvIHBhY2sgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAiTsOjbyDDqSBwb3NzaXZlbCBhYnJpciBvIGZpY2hlaXJvICdwYWNrIGlkeCcgcGFyYSAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTA3Cittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE0MAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE0MworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgImludsOhbGlkbyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE3MworbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzcKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExODcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NgorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjIwCittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbmRpciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgc3ltbGluayAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIHBhdGggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBvZiBhIHdyb25nIGZvcm1hdCB2ZXJzaW9uICVkIGZyb20gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGdpdCBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzIyCisjOiBidWlsdGluL2luaXQtZGIuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIGrDoSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZ2l0IGxpbmsgJXMiCittc2dzdHIgIiIKKworIy4KKyMuICogVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAnJXMnIGlzIGVpdGhlciAiUmVpbml0aWFsaXplZAorIy4gKiBleGlzdGluZyIgb3IgIkluaXRpYWxpemVkIGVtcHR5IiwgdGhlIHNlY29uZCAiIHNoYXJlZCIgb3IKKyMuICogIiIsIGFuZCB0aGUgbGFzdCAnJXMlcycgaXMgdGhlIHZlcmJhdGltIGRpcmVjdG9yeSBuYW1lLgorIy4KKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyVzIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MjAKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICJJbmljaWFsaXphZGEgdmF6aW8iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMQorbXNnaWQgIiBzaGFyZWQiCittc2dzdHIgIiBwYXJ0aWxoYWRvIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NDAKK21zZ2lkICJjYW5ub3QgdGVsbCBjd2QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTIxCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC1kaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU3OAorbXNnaWQgIkNhbm5vdCBhY2Nlc3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo0MDEKKyM6IGJ1aWx0aW4vbG9nLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjUxMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHR5cGU6ICVkIgorbXNnc3RyICJUaXBvIGRlc2NvbmhlY2lkbzogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjAyCittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjY3NQorbXNnaWQgIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIKK21zZ3N0ciAibm9tZSBkbyBkaXJldMOzcmlvIGRlIHNhw61kYSDDqSBkZW1hc2lhZG8gbG9uZ28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIk7Do28gw6kgcG9zc2l2ZWwgYWJyaXIgbyBmaWNoZWlybyBwYXRjaCAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo3MDAKK21zZ2lkICJOZWVkIGV4YWN0bHkgb25lIHJhbmdlLiIKK21zZ3N0ciAiTmVjZXNzaXRhIGRlIGV4YXRhbWVudGUgdW0gaW50ZXJ2YWxvLiIKKworIzogYnVpbHRpbi9sb2cuYzo3MDgKK21zZ2lkICJOb3QgYSByYW5nZS4iCittc2dzdHIgIk7Do28gw6kgdW0gaW50ZXJ2YWxvLiIKKworIzogYnVpbHRpbi9sb2cuYzo3NDUKK21zZ2lkICJDb3VsZCBub3QgZXh0cmFjdCBlbWFpbCBmcm9tIGNvbW1pdHRlciBpZGVudGl0eS4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBleHRyYWlyIGEgaWRlbnRpZGFkZSBkbyBjb21taXR0ZXIgZG8gZS1tYWlsLiIKKworIzogYnVpbHRpbi9sb2cuYzo3OTEKK21zZ2lkICJDb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICJDYXJ0YSBkZSBhcHJlc2VudGHDp8OjbyBuZWNlc3NpdGEgdW0gbW9kZWxvIGRlIGUtbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjk1OAorbXNnaWQgIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICJEb2lzIGRpcmV0w7NyaW9zIGRlIHNhw61kYT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb21taXR0ZXIgaW5mbyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjQKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI2Cittc2dpZCAiLS1zdWJqZWN0LXByZWZpeCBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjM0Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzYKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjM4Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2MQorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICJzYcOtZGEgcGFkcsOjbywgb3UgZGlyZXTDs3JpbywgcXVhbCBkZWxlcz8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQxNgorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICJGYWxob3UgYW8gY3JpYXIgZmljaGVpcm9zIGRlIHNhw61kYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzNgorIzogYnVpbHRpbi9sb2cuYzoxNTM4CisjOiBidWlsdGluL2xvZy5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIkNvbW1pdCBkZXNjb25oZWNpZG8gJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJBcyBlc3RyYXTDqWdpYXMgZGlzcG9uw612ZWlzIHPDo286IgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJFc3RyYXTDqWdpYXMgcGVyc29uYWxpemFkYXMgZGlzcG9uw612ZWlzIHPDo286IgorCisjOiBidWlsdGluL21lcmdlLmM6MjQwCittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NQorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAiZmFsaG91IG8gc3Rhc2giCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5CisjOiBidWlsdGluL21lcmdlLmM6Mjg2Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzE2Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiAobmFkYSBwYXJhIHNxdWFzaCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNjEKK21zZ2lkICJXcml0aW5nIFNRVUFTSF9NU0ciCittc2dzdHIgIkVzY3JldmVuZG8gU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM2MworbXNnaWQgIkZpbmlzaGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICJUZXJtaW5hbmRvIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjYyOQorbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY3OQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Njk3Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzEwCittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIk7Do28gY29tbWl0YW5kbyB1bSBtZXJnZTsgdXNhICdnaXQgY29tbWl0JyBwYXJhIGNvbXBsZXRhciBvIG1lcmdlLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODkyCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkxNgorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiTWVuc2FnZW0gZGUgY29tbWl0IHZhemlhLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIkZhc3Rhc3RpY28uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTAwOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBuw6NvIMOpIHVtIGNvbW1pdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTAKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5lbmh1bWEgcmFtYSBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDUyCittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDU0Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZSB0cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDYKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMTQKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzAKKyM6IGdpdC1wdWxsLnNoOjMxCittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzMKKyM6IGdpdC1wdWxsLnNoOjM0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjM3Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNDAKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNDkKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI1NAorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLW5vLWZmIHdpdGggLS1mZi1vbmx5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI2MQorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjkzCittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5NgorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk4Cittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIkFjdHVhbGl6YW5kbyAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiTsOjby5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0OTAKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MTMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJGdW5kaXIgY29tIGEgZXN0cmF0w6lnaWEgJXMgZmFsaG91LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTIKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICJmb250ZSBpbnbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTUKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTgKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoPyAlLipzIGlzIGluIGluZGV4PyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTQwCittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAibyBkaXJlY3RvcmlvIGZvbnRlIGVzdMOhIHZhemlvIgorCisjOiBidWlsdGluL212LmM6MTcxCittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAibsOjbyBlc3TDoSBubyBjb250cm9sbyBkZSB2ZXJzw7VlcyIKKworIzogYnVpbHRpbi9tdi5jOjE3MworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAiZXhpc3RlIGRlc3Rpbm8iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAic3Vic2NyZXZlbmRvICclcyciCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJOw6NvIGNvbnNlZ3VlIHN1YnNjcmV2ZXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIm3Dumx0aXBsYXMgZm9udGVzIHBhcmEgbyBtZXNtbyBhbHZvIgorCisjOiBidWlsdGluL212LmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiTXVkYXIgZGUgbm9tZSAlcyBwYXJhICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyMTUKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICJtdWRhciBkZSBub21lICclcycgZmFsaG91IgorCisjOiBidWlsdGluL25vdGVzLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDUKK21zZ2lkICJjYW4ndCBmZG9wZW4gJ3Nob3cnIG91dHB1dCBmZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE3NQorIzogYnVpbHRpbi90YWcuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE4OQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjEwCisjOiBidWlsdGluL25vdGVzLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbm90ZSBjb250ZW50cyBoYXMgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTEKKyM6IGJ1aWx0aW4vdGFnLmM6NTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgIm7Do28gY29uc2VndWUgbGVyICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTMKKyM6IGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcyCisjOiBidWlsdGluL25vdGVzLmM6NDQ1CisjOiBidWlsdGluL25vdGVzLmM6NDQ3CisjOiBidWlsdGluL25vdGVzLmM6NTA3CisjOiBidWlsdGluL25vdGVzLmM6NTYxCisjOiBidWlsdGluL25vdGVzLmM6NjQ0CisjOiBidWlsdGluL25vdGVzLmM6NjQ5CisjOiBidWlsdGluL25vdGVzLmM6NzI0CisjOiBidWlsdGluL25vdGVzLmM6NzY2CisjOiBidWlsdGluL25vdGVzLmM6OTY4CisjOiBidWlsdGluL3Jlc2V0LmM6MjkzCisjOiBidWlsdGluL3RhZy5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Mjk5Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiB0aGUKKyMuIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzIGl0cyB2YWx1ZQorIzogYnVpbHRpbi9ub3Rlcy5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIkludsOhbGlkbyAlcyB2YWxvcjogJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTAwCisjOiBidWlsdGluL25vdGVzLmM6NTU0CisjOiBidWlsdGluL25vdGVzLmM6NjI3CisjOiBidWlsdGluL25vdGVzLmM6NjM5CisjOiBidWlsdGluL25vdGVzLmM6NzEyCisjOiBidWlsdGluL25vdGVzLmM6NzU5CisjOiBidWlsdGluL25vdGVzLmM6MTAzMworbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgImRlbWFzaWFkbyBwYXJhbWV0cm9zIgorCisjOiBidWlsdGluL25vdGVzLmM6NTEzCisjOiBidWlsdGluL25vdGVzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgIk5lbmh1bWEgbm90YSBlbmNvbnRyYWRhIHBhcmEgbyBvYmplY3RvICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4NQorIzogYnVpbHRpbi9ub3Rlcy5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYzNQorbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTEwMworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzE5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAlcyBkb2VzIG5vdCBhY2NlcHQgbmVnYXRpdmUgZm9ybSIKK21zZ3N0ciAib3DDp8OjbyAlcyBuw6NvIGFjZWl0YSBmb3JtYXRvIG5lZ2F0aXZvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHZhbHVlICclcycgZm9yIG9wdGlvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo0NQorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2NAorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICItLWRlbGV0ZSBzw7MgYWNlaXRhIG5vbWVzIHNpbXBsZXMgcGFyYSBvIHJlZiBkZSBkZXN0aW5vIgorCisjOiBidWlsdGluL3B1c2guYzo5OQorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTc0Cittc2dpZCAiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxODEKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIE1lcmdlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLiAnZ2l0IHB1bGwnKVxuIgorImJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIElmIHlvdSBkaWQgbm90IGludGVuZCB0byBwdXNoIHRoYXQgYnJhbmNoLCB5b3UgbWF5IHdhbnQgdG9cbiIKKyJzcGVjaWZ5IGJyYW5jaGVzIHRvIHB1c2ggb3Igc2V0IHRoZSAncHVzaC5kZWZhdWx0JyBjb25maWd1cmF0aW9uXG4iCisidmFyaWFibGUgdG8gJ2N1cnJlbnQnIG9yICd1cHN0cmVhbScgdG8gcHVzaCBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTkzCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBtZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwnKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICJQdXNoaW5nIHBhcmEgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICJyZXBvc2l0b3JpbyBpbnbDoWxpZG8gJyVzJyIKKworIzogYnVpbHRpbi9wdXNoLmM6MjcwCittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgcmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyODUKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIGUgLS10YWdzIGFyZSBzw6NvIGluY29tcGF0w612ZWlzIgorCisjOiBidWlsdGluL3B1c2guYzoyODYKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5MQorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyOTIKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NworbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4NQorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4NworbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIkFjdHVhbGl6YW5kbyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvIG1pcnJvciBuw6NvIGNvbmhlY2lkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NworbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTUKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIm8gcmVtb3RvICVzIGrDoSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk5CisjOiBidWlsdGluL3JlbW90ZS5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICInJXMnIG7Do28gw6kgdW0gbm9tYmUgcmVtb3RvIHZhbGlkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgY29uZmlndXJhciBhIHJhbWEgbWFzdGVyICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Mjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDAKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDQ4Cittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ1MgorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIoZWxpbWluYWRvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OTUKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjAxCisjOiBidWlsdGluL3JlbW90ZS5jOjYwNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcycgdG8gJyVzJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFkaWNpb25hciBvICclcycgcGFyYSBvICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjM5CisjOiBidWlsdGluL3JlbW90ZS5jOjc5MgorIzogYnVpbHRpbi9yZW1vdGUuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgcmVub21icmFyIGEgc2Vjw6fDo28gZGEgY29uZmlndXJhw6fDo28gZGUgJyVzJyBwYXJhICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjYyCisjOiBidWlsdGluL3JlbW90ZS5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCByZW1vdmVyIGEgc2Vjw6fDo28gZGEgY29uZmlndXJhw6fDo28gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZXNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWRpY2lvbmFyICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgJyVzJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGF0cmlidWlyICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJmYWxob3UgZWxpbWluYXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImZhbGhvdSBhIGNyaWFyICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgYnJhbmNoICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgcmVtb3ZlciByYW1hICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgzNAorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ2Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgInNlZ3VpZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ4Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NTAKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiRnVuZGlyIGNvbSBzZXJ2aWRvciByZW1vdG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMgorbXNnaWQgIiAgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiAgICBlIGNvbSByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIkZ1bmRpciBjb20gc2Vydmlkb3IgcmVtb3RvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDUKK21zZ2lkICIgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiAgIGUgY29tIHJlbW90byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUxCittc2dpZCAiY3JlYXRlIgorbXNnc3RyICJjcmVhZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NAorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAiZWxpbWluYWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTgKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICJhY3R1YWxpemFkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYxCittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAiZmFzdC1mb3J3YXJkYWJsZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDY0Cittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgImxvY2FsIGRlc2F0dWFsaXphZGEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiogcmVtb3RhICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyMAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMjg1Cittc2dpZCAiKG5vIFVSTCkiCittc2dzdHIgIihuZW5odW0gVVJMKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTI5CisjOiBidWlsdGluL3JlbW90ZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM1CisjOiBidWlsdGluL3JlbW90ZS5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIlJhbWEgSEVBRDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIlJhbWEgcmVtb3RhOiVzIgorbXNnc3RyWzFdICJSYW1hcyByZW1vdGFzOiVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU0CisjOiBidWlsdGluL3JlbW90ZS5jOjExODEKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTYzCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzEKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNgorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE4Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNvbmZpZ3VyYXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIkFwYWdhbmRvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM4NworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIk7Do28gZXhpc3RlIGVzdGUgcmVtb3RvICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQxNAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgIk5lbmh1bSByZW1vdG8gZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NDcKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICJOZW5odW0gVVJMIGVuY29udHJhZG86ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTcKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAibWl4ZWQiCittc2dzdHIgIm1pc3R1cmEiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgInNvZnQiCittc2dzdHIgImxldmUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImhhcmQiCittc2dzdHIgImZvcnRlIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAianVudGFyIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJrZWVwIgorbXNnc3RyICJtYW50ZXIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo3NworbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICJOw6NvIHRlbnMgYSBIRUFEIHbDoWxpZGEuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzkKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTYKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIkhFQUQgw6kgYWdvcmEgZW0gJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMzAKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTMzCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG9iamV0byAnJXMnLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMgorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzExCittc2dpZCAiLS1taXhlZCB3aXRoIHBhdGhzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IHJlc2V0IC0tIDxwYXRocz4nIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjcwCisjOiBidWlsdGluL3JldmVydC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTMxCittc2dpZCAicHJvZ3JhbSBlcnJvciIKK21zZ3N0ciAiZXJybyBkbyBwcm9ncmFtYSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMjEKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJmYWxob3UgbyByZXZlcnQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjM2Cittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICJjaGVycnktcGljayBmYWxob3UiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlIGZpbGUgYW5kIHRoZSBIRUFEXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXhcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnNcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKK21zZ3N0ciAiQXV0b3IgZW0gZmFsdGE6ICVzIgorCisjOiBidWlsdGluL3RhZy5jOjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJldGlxdWV0YSAnJXMnIG7Do28gZm9pIGVuY29udHJhZGEuIgorCisjOiBidWlsdGluL3RhZy5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHZlcmlmeSB0aGUgdGFnICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyNDkKK21zZ2lkICIiCisiXG4iCisiI1xuIgorIiMgV3JpdGUgYSB0YWcgbWVzc2FnZVxuIgorIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgd2lsbCBiZSBpZ25vcmVkLlxuIgorIiNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjI1NgorbXNnaWQgIiIKKyJcbiIKKyIjXG4iCisiIyBXcml0ZSBhIHRhZyBtZXNzYWdlXG4iCisiIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiI1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjMwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjMyNQorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozMzgKK21zZ2lkICJ0YWcgaGVhZGVyIHRvbyBiaWcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzcwCittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICJuZW5odW1hIG1lbnNhamUgcGFyYSBhIGV0aXF1ZXRhPyIKKworIzogYnVpbHRpbi90YWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQyNQorbXNnaWQgInN3aXRjaCAncG9pbnRzLWF0JyByZXF1aXJlcyBhbiBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gZSAtbiBhcmUgc8OjbyBpbmNvbXBhdMOtdmVpcyIKKworIzogYnVpbHRpbi90YWcuYzo1MjMKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTI1Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTI3Cittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUzNQorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU1NQorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAiZGVtYXNpYWRvIHBhcmFtZXRyb3MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJldGlxdWV0YSAnJXMnIGrDoSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgbG9jayB0aGUgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgdXBkYXRlIHRoZSByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjE2Cittc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDo4Cittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6OQorbXNnaWQgIkZpbmQgYnkgYmluYXJ5IHNlYXJjaCB0aGUgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjEwCittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkxpc3RhciwgY3JpYXIgb3UgYXBhZ2FyIHJhbWFzIgorCisjOiBjb21tb24tY21kcy5oOjExCittc2dpZCAiQ2hlY2tvdXQgYSBicmFuY2ggb3IgcGF0aHMgdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjEyCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiR3JhdmFyIGFsdGVyYcOnw7VlcyBwYXJhIG8gcmVwb3NpdMOzcmlvIgorCisjOiBjb21tb24tY21kcy5oOjE0Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjE1Cittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjE2Cittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTcKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgZ2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjE4Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAiTW9zdHJhZG8gbG9ncyBkZSBjb21taXRzIgorCisjOiBjb21tb24tY21kcy5oOjE5Cittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyMAorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjIxCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgbWVyZ2Ugd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyMgorbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjIzCittc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjI0Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyNQorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjYKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjI3Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiTW9zdHJhciBvIGVzdGFkbyBsb3MgcmFtb3MgZGFzIMOhcnZvcmVzIGRlIHRyYWJhbGhvIgorCisjOiBjb21tb24tY21kcy5oOjI4Cittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjUwCittc2dpZCAiWW91IG5lZWQgdG8gc2V0IHlvdXIgY29tbWl0dGVyIGluZm8gZmlyc3QiCittc2dzdHIgIk5lY2Vzc2l0YXMgcHJpbWVpcm8gZGUgZXNwZWNpZmljaWFyIG9zIHRldXMgZGFkb3MgZGUgY29tbWl0dGVyIgorCisjOiBnaXQtYW0uc2g6MTM3Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MTU0Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MTYzCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDoyNzUKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MzYyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmb3JtYXQgJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MzY0Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJGYWxob3UgYSBkZXRlY8Onw6NvIGRvIGZvcm1hdG8gZG8gcGF0Y2guIgorCisjOiBnaXQtYW0uc2g6NDE4Cittc2dpZCAiLWQgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBEbyBub3QgdXNlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NDgxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICRkb3Rlc3Qgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NDg2Cittc2dpZCAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjUxMworbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjU3OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NzU1Cittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWFtLnNoOjc2NgorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsICIKK21zZ3N0ciAiQXBsaWNhcj8gU2ltW3ldL1tuXcOjby9bZV1kaXRhci9bdl1lciBwYXRjaC9bYV1jZWl0YXIgdG9kb3MgIgorCisjOiBnaXQtYW0uc2g6ODAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJEZJUlNUTElORSIKK21zZ3N0ciAiQXBsaWNhbmRvOiAkRklSU1RMSU5FIgorCisjOiBnaXQtYW0uc2g6ODQ3Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICJOZW5odW1hIG11ZGFuw6dhIC0tIErDoSBmb2kgYXBsaWNhZG8gbyBwYXRjaC4iCisKKyM6IGdpdC1hbS5zaDo4NzMKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAiUXVlcmVzIHF1ZSBldSBmYcOnYSBwb3Igc8OtIFtZL25dPyIKKworIzogZ2l0LWJpc2VjdC5zaDo5NQorIywgc2gtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRhcmcnIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjExNworbXNnaWQgIkJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgb3V0ICckc3RhcnRfaGVhZCcgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPHZhbGlkYnJhbmNoPicuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQwCittc2dpZCAid29uJ3QgYmlzZWN0IG9uIHNlZWtlZCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQ0Cittc2dpZCAiQmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjE4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjE4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUwCittc2dpZCAiJ2dpdCBiaXNlY3QgYmFkJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICJUZW5zIGEgY2VydGV6YSBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjM1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDozNjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyRicmFuY2gnLlxuIgorIlRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkwCittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAiTmVuaHVtIGZpY2hlaXJvIGRlIGxvZyBkYWRvIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjQwOAorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ3NAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiTsOjbyBlc3RhbW9zIGEgYmlzc2VjY2lvbmFyLiIKKworIzogZ2l0LXB1bGwuc2g6MjEKK21zZ2lkICIiCisiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy5cbiIKKyJQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uLCBvciB1c2UgJ2dpdCBjb21taXQgLWEnLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcHVsbC5zaDoyNQorbXNnaWQgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1wdWxsLnNoOjE5NworbXNnaWQgInVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcHVsbC5zaDoyNTMKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGdpdC1wdWxsLnNoOjI1NworbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZmF6ZXIgcmViYXNlIGNvbSB2w6FyaWFzIHJhbWFzIgorCisjOiBnaXQtc3Rhc2guc2g6NTEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIlR1IGFpbmRhIG7Do28gdGVucyBvIGNvbW1pdCBpbmljaWFsIgorCisjOiBnaXQtc3Rhc2guc2g6ODkKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MTIzCisjOiBnaXQtc3Rhc2guc2g6MTM2Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjE0MAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIk7Do28gaMOhIGFsdGVyYcOnw7VlcyBzZWxlY2Npb25hZGFzIgorCisjOiBnaXQtc3Rhc2guc2g6MTQzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjE1NgorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoyMjMKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIlNlbSBhbHRlcmHDp8O1ZXMgbG9jYWlzIHBhcmEgZ3VhcmRhciIKKworIzogZ2l0LXN0YXNoLnNoOjIyNworbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBpbmljaWFsaXphciBvIHN0YXNoIgorCisjOiBnaXQtc3Rhc2guc2g6MjM1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoyNTMKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjM1MgorbXNnaWQgIk5vIHN0YXNoIGZvdW5kLiIKK21zZ3N0ciAibmVuaHVtIHN0YXNoIGVuY29udHJhZG8uIgorCisjOiBnaXQtc3Rhc2guc2g6MzU5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozNjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MzkzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MTIKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDE2Cittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MjQKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MjYKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICJOw6NvIGZvaSBwb3NpdmVsIGd1YXJkYXIgbyBpbmRleCB0cmVlIgorCisjOiBnaXQtc3Rhc2guc2g6NDYwCittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQ5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiRGVpeGFkbyBjYWlyICR7UkVWfSAoJHMpIgorCisjOiBnaXQtc3Rhc2guc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTkKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIk5lbmh1bSBub21lIHBhcmEgYSByYW1hIGVzcGVjaWZpY2FkbyIKKworIzogZ2l0LXN0YXNoLnNoOjU3MAorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICckcmVtb3RldXJsJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEwOQorIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjE1MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxNjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkdpdGRpciAnJGEnIGlzIHBhcnQgb2YgdGhlIHN1Ym1vZHVsZSBwYXRoICckYicgb3IgdmljZSB2ZXJzYSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0OQorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI2NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjk3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRwcmVmaXgkc21fcGF0aCciCittc2dzdHIgIkVudHJhbmRvICckcHJlZml4JHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM2MworIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBpbmcgYXQgJyRzbV9wYXRoJzsgc2NyaXB0IHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cy4iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQyMgorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBub3QgaW5pdGlhbGl6ZWRcbiIKKyJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjUzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU4MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwNAorIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcxMgorbXNnaWQgIi0tIgorbXNnc3RyICItLSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3NzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3NzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3NzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MDEKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjgwMgorbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAic3VibcOzZHVsb3MiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICckbmFtZSciCittc2dzdHIgIiIKKworI34gbXNnaWQgImNoZXJyeS1waWNrIgorI34gbXNnc3RyICJjaGVycnktcGljayIKKworI34gbXNnaWQgIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4iCisjfiBtc2dzdHIgIlBvciBmYXZvciBpbnNpcmEgYSBtZW5zYWdlbSBkZSBjb21taXQgZGFzIHN1YXMgYWx0ZXJhw6fDtWVzLiIKKworI34gbXNnaWQgIlRvbyBtYW55IG9wdGlvbnMgc3BlY2lmaWVkIgorI34gbXNnc3RyICJEZW1hc2lhZGFzIG9ww6fDtWVzIGVzcGVjaWZpY2FkYXMiCmRpZmYgLS1naXQgYS9wby9zdi5wbyBiL3BvL3N2LnBvCmluZGV4IGZjYjA2M2YuLjliM2FhNzQgMTAwNjQ0Ci0tLSBhL3BvL3N2LnBvCisrKyBiL3BvL3N2LnBvCkBAIC0xLDI2MDUgKzEsOTUzNiBAQAotIyBTd2VkaXNoIHRyYW5zbGF0aW9uIG9mIGdpdC1ndWkuCi0jIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFNoYXduIFBlYXJjZSwgZXQgYWwuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCisjIFN3ZWRpc2ggdHJhbnNsYXRpb25zIGZvciBHaXQuCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIFBldGVyIGtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPiwgMjAxMCwgMjAxMSwgMjAxMi4KICMKLSMgUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+LCAyMDA3LTIwMDguCi0jIE1pa2FlbCBNYWdudXNzb24gPG1pa2FjaHVAZ21haWwuY29tPiwgMjAwOC4KIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IHN2XG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTA5LTEyIDIxOjExKzAxMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA5LTEyIDIxOjEyKzAxMDBcbiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdCAxLjcuMTJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMC0xNiAwODozOCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMi0xMC0xNiAwODozNiswMTAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT5cbiIKICJMYW5ndWFnZS1UZWFtOiBTd2VkaXNoIDx0cC1zdkBsaXN0b3IudHAtc3Yuc2U+XG4iCisiTGFuZ3VhZ2U6IHN2XG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0IgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKIAotIzogZ2l0LWd1aS5zaDo3ODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGZvbnQgc3BlY2lmaWVkIGluICVzOiIKLW1zZ3N0ciAiT2dpbHRpZ3QgdGVja2Vuc25pdHQgYW5naXZldCBpICVzOiIKKyM6IGFkdmljZS5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAidGlwczogJS4qc1xuIgogCi0jOiBnaXQtZ3VpLnNoOjgzMQotbXNnaWQgIk1haW4gRm9udCIKLW1zZ3N0ciAiSHV2dWR0ZWNrZW5zbml0dCIKLQotIzogZ2l0LWd1aS5zaDo4MzIKLW1zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKLW1zZ3N0ciAiRGlmZi9rb25zb2x0ZWNrZW5zbml0dCIKLQotIzogZ2l0LWd1aS5zaDo4NDUgZ2l0LWd1aS5zaDo4NTkgZ2l0LWd1aS5zaDo4NzIgZ2l0LWd1aS5zaDo5NTUgZ2l0LWd1aS5zaDo5NzQKLSM6IGdpdC1ndWkuc2g6Mjk2NAotbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgotbXNnc3RyICJnaXQtZ3VpOiDDtmRlc2RpZ2VydCBmZWwiCi0KLSM6IGdpdC1ndWkuc2g6ODQ2Ci1tc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgotbXNnc3RyICJIaXR0YXIgaW50ZSBnaXQgaSBQQVRILiIKLQotIzogZ2l0LWd1aS5zaDo4NzMKLW1zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKLW1zZ3N0ciAiS2FuIGludGUgdG9sa2EgdmVyc2lvbnNzdHLDpG5nIGZyw6VuIEdpdDoiCi0KLSM6IGdpdC1ndWkuc2g6ODkxCi0jLCB0Y2wtZm9ybWF0CisjLgorIy4gKiBNZXNzYWdlIHVzZWQgYm90aCB3aGVuICdnaXQgY29tbWl0JyBmYWlscyBhbmQgd2hlbgorIy4gKiBvdGhlciBjb21tYW5kcyBkb2luZyBhIG1lcmdlIGRvLgorIy4KKyM6IGFkdmljZS5jOjcwCiBtc2dpZCAiIgotIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgotIlxuIgotIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCi0iXG4iCi0iJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgotIlxuIgotIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSxcbiIKKyJhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+JyBhc1xuIgorImFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdCxcbiIKKyJvciB1c2UgJ2dpdCBjb21taXQgLWEnLiIKIG1zZ3N0ciAiIgotIkthbiBpbnRlIGF2Z8O2cmEgR2l0cyB2ZXJzaW9uLlxuIgotIlxuIgotIiVzIHPDpGdlciBhdHQgZGVzcyB2ZXJzaW9uIMOkciBcIiVzXCIuXG4iCi0iXG4iCi0iJXMga3LDpHZlciBtaW5zdCBHaXQgMS41LjAgZWxsZXIgc2VuYXJlLlxuIgotIlxuIgotIkFudGEgYXR0IFwiJXNcIiDDpHIgdmVyc2lvbiAxLjUuMD9cbiIKKyJSw6R0dGEgZGVtIGkgZGluIGFyYmV0c2thdGFsb2csXG4iCisib2NoIGFudsOkbmQgc2VkYW4gXCJnaXQgYWRkL3JtIDxmaWw+XCIgc29tXG4iCisibMOkbXBsaWd0IGbDtnIgYXR0IGFuZ2UgbMO2c25pbmcgb2NoIGNoZWNrYSBpbixcbiIKKyJlbGxlciBhbnbDpG5kIFwiZ2l0IGNvbW1pdCAtYVwiLiIKIAotIzogZ2l0LWd1aS5zaDoxMTgwCi1tc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgotbXNnc3RyICJHaXQta2F0YWxvZ2VuIGhpdHRhZGVzIGludGU6IgorIzogYXJjaGl2ZS5jOjEwCittc2dpZCAiZ2l0IGFyY2hpdmUgW29wdGlvbnNdIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFtmbGFnZ29yXSA8dHLDpGQtaWd0PiBbPHPDtmt2w6RnPi4uLl0iCiAKLSM6IGdpdC1ndWkuc2g6MTIwMQotbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCi1tc2dzdHIgIkthbiBpbnRlIGfDpSB0aWxsIGLDtnJqYW4gcMOlIGFyYmV0c2thdGFsb2dlbjoiCisjOiBhcmNoaXZlLmM6MTEKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKIAotIzogZ2l0LWd1aS5zaDoxMjA5Ci1tc2dpZCAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6IgotbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSBuYWtldCBhcmtpdjoiCi0KLSM6IGdpdC1ndWkuc2g6MTIxNwotbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgotbXNnc3RyICJJbmdlbiBhcmJldHNrYXRhbG9nIgotCi0jOiBnaXQtZ3VpLnNoOjEzODkgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKLW1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgotbXNnc3RyICJVcHBkYXRlcmFyIGZpbHN0YXR1cy4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNDQ1Ci1tc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKLW1zZ3N0ciAiU8O2a2VyIGVmdGVyIMOkbmRyYWRlIGZpbGVyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE1MDkKLW1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICIiCi0iQW5yb3BhciBrcm9rZW4gZsO2ciBmw7ZyYmVyZWRlbHNlIGF2IGluY2hlY2tuaW5nc21lZGRlbGFuZGUgKHByZXBhcmUtY29tbWl0LSIKLSJtc2cpLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE1MjYKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgotbXNnc3RyICIiCi0iSW5jaGVja25pbmdlbiBhdnZpc2FkZXMgYXYga3Jva2VuIGbDtnIgZsO2cmJlcmVkZWxzZSBhdiBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlICIKLSIocHJlcGFyZS1jb21taXQtbXNnKS4iCi0KLSM6IGdpdC1ndWkuc2g6MTY4NCBsaWIvYnJvd3Nlci50Y2w6MjQ2Ci1tc2dpZCAiUmVhZHkuIgotbXNnc3RyICJLbGFyLiIKLQotIzogZ2l0LWd1aS5zaDoxODQyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKLW1zZ3N0ciAiVmlzYXIgZW5kYXN0ICVzIGF2ICVzIGZpbGVyLiIKLQotIzogZ2l0LWd1aS5zaDoxOTY4Ci1tc2dpZCAiVW5tb2RpZmllZCIKLW1zZ3N0ciAiT2bDtnLDpG5kcmFkZSIKLQotIzogZ2l0LWd1aS5zaDoxOTcwCi1tc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIkbDtnLDpG5kcmFkZSwgZWoga8O2YWRlIgotCi0jOiBnaXQtZ3VpLnNoOjE5NzEgZ2l0LWd1aS5zaDoxOTc5Ci1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIkvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjE5NzIgZ2l0LWd1aS5zaDoxOTgwCi1tc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIkRlbGFyIGvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjE5NzMgZ2l0LWd1aS5zaDoxOTgxCi1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCi1tc2dzdHIgIkvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nLCBzYWtuYWRlIgotCi0jOiBnaXQtZ3VpLnNoOjE5NzUKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAiRmlsdHlwIMOkbmRyYWQsIGVqIGvDtmFkZSIKLQotIzogZ2l0LWd1aS5zaDoxOTc2Ci1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKLW1zZ3N0ciAiRmlsdHlwIMOkbmRyYWQsIGvDtmFkZSIKLQotIzogZ2l0LWd1aS5zaDoxOTc4Ci1tc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJFaiBzcMOlcmFkZSwgZWoga8O2YWRlIgotCi0jOiBnaXQtZ3VpLnNoOjE5ODMKLW1zZ2lkICJNaXNzaW5nIgotbXNnc3RyICJTYWtuYWRlIgotCi0jOiBnaXQtZ3VpLnNoOjE5ODQKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCi1tc2dzdHIgIkvDtmFkZSBmw7ZyIGJvcnR0YWduaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjE5ODUKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCi1tc2dzdHIgIkvDtmFkZSBmw7ZyIGJvcnR0YWduaW5nLCBmb3J0ZmFyYW5kZSBuw6RydmFyYW5kZSIKLQotIzogZ2l0LWd1aS5zaDoxOTg3IGdpdC1ndWkuc2g6MTk4OCBnaXQtZ3VpLnNoOjE5ODkgZ2l0LWd1aS5zaDoxOTkwCi0jOiBnaXQtZ3VpLnNoOjE5OTEgZ2l0LWd1aS5zaDoxOTkyCi1tc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKLW1zZ3N0ciAiS3LDpHZlciBrb25mbGlrdGhhbnRlcmluZyBlZnRlciBzYW1tYW5zbGFnbmluZyIKLQotIzogZ2l0LWd1aS5zaDoyMDI3Ci1tc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAiU3RhcnRhciBnaXRrLi4uIHbDpG50YS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyMDM5Ci1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCi1tc2dzdHIgIkhpdHRhZGUgaW50ZSBnaXRrIGkgUEFUSC4iCi0KLSM6IGdpdC1ndWkuc2g6MjA5OAotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgotbXNnc3RyICJIaXR0YWRlIGludGUgZ2l0IGd1aSBpIFBBVEguIgotCi0jOiBnaXQtZ3VpLnNoOjI1MTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgotbXNnaWQgIlJlcG9zaXRvcnkiCi1tc2dzdHIgIkFya2l2IgotCi0jOiBnaXQtZ3VpLnNoOjI1MTYKLW1zZ2lkICJFZGl0IgotbXNnc3RyICJSZWRpZ2VyYSIKLQotIzogZ2l0LWd1aS5zaDoyNTE4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjYKLW1zZ2lkICJCcmFuY2giCi1tc2dzdHIgIkdyZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjUyMSBsaWIvY2hvb3NlX3Jldi50Y2w6NTUzCi1tc2dpZCAiQ29tbWl0QEBub3VuIgotbXNnc3RyICJJbmNoZWNrbmluZyIKLQotIzogZ2l0LWd1aS5zaDoyNTI0IGxpYi9tZXJnZS50Y2w6MTIxIGxpYi9tZXJnZS50Y2w6MTUwIGxpYi9tZXJnZS50Y2w6MTY4Ci1tc2dpZCAiTWVyZ2UiCi1tc2dzdHIgIlNsw6UgaWhvcCIKLQotIzogZ2l0LWd1aS5zaDoyNTI1IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjIKLW1zZ2lkICJSZW1vdGUiCi1tc2dzdHIgIkZqw6RycmFya2l2IgotCi0jOiBnaXQtZ3VpLnNoOjI1MjgKLW1zZ2lkICJUb29scyIKLW1zZ3N0ciAiVmVya3R5ZyIKLQotIzogZ2l0LWd1aS5zaDoyNTM3Ci1tc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCi1tc2dzdHIgIlV0Zm9yc2thIGFyYmV0c2tvcGlhIgotCi0jOiBnaXQtZ3VpLnNoOjI1NDMKLW1zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKLW1zZ3N0ciAiQmzDpGRkcmEgaSBncmVuZW5zIGZpbGVyIgotCi0jOiBnaXQtZ3VpLnNoOjI1NDcKLW1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgotbXNnc3RyICJCbMOkZGRyYSBmaWxlciBww6UgZ3Jlbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNTUyCi1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKLW1zZ3N0ciAiVmlzdWFsaXNlcmEgZ3JlbmVucyBoaXN0b3JpayIKLQotIzogZ2l0LWd1aS5zaDoyNTU2Ci1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKLW1zZ3N0ciAiVmlzdWFsaXNlcmEgYWxsYSBncmVuYXJzIGhpc3RvcmlrIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKLW1zZ3N0ciAiQmzDpGRkcmEgaSBmaWxlciBmw7ZyICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgotbXNnc3RyICJWaXN1YWxpc2VyYSBoaXN0b3JpayBmw7ZyICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI1NzAgbGliL2RhdGFiYXNlLnRjbDo0MCBsaWIvZGF0YWJhc2UudGNsOjY2Ci1tc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKLW1zZ3N0ciAiRGF0YWJhc3N0YXRpc3RpayIKLQotIzogZ2l0LWd1aS5zaDoyNTczIGxpYi9kYXRhYmFzZS50Y2w6MzMKLW1zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKLW1zZ3N0ciAiS29tcHJpbWVyYSBkYXRhYmFzIgotCi0jOiBnaXQtZ3VpLnNoOjI1NzYKLW1zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCi1tc2dzdHIgIlZlcmlmaWVyYSBkYXRhYmFzIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODMgZ2l0LWd1aS5zaDoyNTg3IGdpdC1ndWkuc2g6MjU5MSBsaWIvc2hvcnRjdXQudGNsOjgKLSM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgotbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCi1tc2dzdHIgIlNrYXBhIHNrcml2Ym9yZHNpa29uIgotCi0jOiBnaXQtZ3VpLnNoOjI1OTkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTYKLW1zZ2lkICJRdWl0IgotbXNnc3RyICJBdnNsdXRhIgotCi0jOiBnaXQtZ3VpLnNoOjI2MDcKLW1zZ2lkICJVbmRvIgotbXNnc3RyICLDhW5ncmEiCi0KLSM6IGdpdC1ndWkuc2g6MjYxMAotbXNnaWQgIlJlZG8iCi1tc2dzdHIgIkfDtnIgb20iCi0KLSM6IGdpdC1ndWkuc2g6MjYxNCBnaXQtZ3VpLnNoOjMxOTAKLW1zZ2lkICJDdXQiCi1tc2dzdHIgIktsaXBwIHV0IgotCi0jOiBnaXQtZ3VpLnNoOjI2MTcgZ2l0LWd1aS5zaDozMTkzIGdpdC1ndWkuc2g6MzI2NyBnaXQtZ3VpLnNoOjMzNDAKLSM6IGxpYi9jb25zb2xlLnRjbDo2OQotbXNnaWQgIkNvcHkiCi1tc2dzdHIgIktvcGllcmEiCi0KLSM6IGdpdC1ndWkuc2g6MjYyMCBnaXQtZ3VpLnNoOjMxOTYKLW1zZ2lkICJQYXN0ZSIKLW1zZ3N0ciAiS2xpc3RyYSBpbiIKLQotIzogZ2l0LWd1aS5zaDoyNjIzIGdpdC1ndWkuc2g6MzE5OSBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjgKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzkKLW1zZ2lkICJEZWxldGUiCi1tc2dzdHIgIlRhIGJvcnQiCi0KLSM6IGdpdC1ndWkuc2g6MjYyNyBnaXQtZ3VpLnNoOjMyMDMgZ2l0LWd1aS5zaDozMzQ0IGxpYi9jb25zb2xlLnRjbDo3MQotbXNnaWQgIlNlbGVjdCBBbGwiCi1tc2dzdHIgIk1hcmtlcmEgYWxsYSIKLQotIzogZ2l0LWd1aS5zaDoyNjM2Ci1tc2dpZCAiQ3JlYXRlLi4uIgotbXNnc3RyICJTa2FwYS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNjQyCi1tc2dpZCAiQ2hlY2tvdXQuLi4iCi1tc2dzdHIgIkNoZWNrYSB1dC4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNjQ4Ci1tc2dpZCAiUmVuYW1lLi4uIgotbXNnc3RyICJCeXQgbmFtbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNjUzCi1tc2dpZCAiRGVsZXRlLi4uIgotbXNnc3RyICJUYSBib3J0Li4uIgotCi0jOiBnaXQtZ3VpLnNoOjI2NTgKLW1zZ2lkICJSZXNldC4uLiIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGwuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjY2OAotbXNnaWQgIkRvbmUiCi1tc2dzdHIgIkbDpHJkaWciCi0KLSM6IGdpdC1ndWkuc2g6MjY3MAotbXNnaWQgIkNvbW1pdEBAdmVyYiIKLW1zZ3N0ciAiQ2hlY2thIGluIgotCi0jOiBnaXQtZ3VpLnNoOjI2NzkgZ2l0LWd1aS5zaDozMTMxCi1tc2dpZCAiTmV3IENvbW1pdCIKLW1zZ3N0ciAiTnkgaW5jaGVja25pbmciCi0KLSM6IGdpdC1ndWkuc2g6MjY4NyBnaXQtZ3VpLnNoOjMxMzgKLW1zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKLW1zZ3N0ciAiTMOkZ2cgdGlsbCBmw7ZyZWfDpWVuZGUgaW5jaGVja25pbmciCi0KLSM6IGdpdC1ndWkuc2g6MjY5NyBnaXQtZ3VpLnNoOjMwOTIgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDEKLW1zZ2lkICJSZXNjYW4iCi1tc2dzdHIgIlPDtmsgcMOlIG55dHQiCi0KLSM6IGdpdC1ndWkuc2g6MjcwMwotbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKLW1zZ3N0ciAiS8O2YSBmw7ZyIGluY2hlY2tuaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjI3MDkKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKLW1zZ3N0ciAiS8O2YSDDpG5kcmFkZSBmaWxlciBmw7ZyIGluY2hlY2tuaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjI3MTUKLW1zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgotbXNnc3RyICJUYSBib3J0IGZyw6VuIGluY2hlY2tuaW5nc2vDtiIKLQotIzogZ2l0LWd1aS5zaDoyNzIxIGxpYi9pbmRleC50Y2w6NDE1Ci1tc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCi1tc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXIiCi0KLSM6IGdpdC1ndWkuc2g6MjcyOSBnaXQtZ3VpLnNoOjMzOTEgZ2l0LWd1aS5zaDozNDIyCi1tc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCi1tc2dzdHIgIlZpc2EgbWluZHJlIHNhbW1hbmhhbmciCi0KLSM6IGdpdC1ndWkuc2g6MjczMyBnaXQtZ3VpLnNoOjMzOTUgZ2l0LWd1aS5zaDozNDI2Ci1tc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCi1tc2dzdHIgIlZpc2EgbWVyIHNhbW1hbmhhbmciCi0KLSM6IGdpdC1ndWkuc2g6Mjc0MCBnaXQtZ3VpLnNoOjMxMDUgZ2l0LWd1aS5zaDozMjE0Ci1tc2dpZCAiU2lnbiBPZmYiCi1tc2dzdHIgIlNrcml2IHVuZGVyIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTYKLW1zZ2lkICJMb2NhbCBNZXJnZS4uLiIKLW1zZ3N0ciAiTG9rYWwgc2FtbWFuc2xhZ25pbmcuLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc2MQotbXNnaWQgIkFib3J0IE1lcmdlLi4uIgotbXNnc3RyICJBdmJyeXQgc2FtbWFuc2xhZ25pbmcuLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc3MyBnaXQtZ3VpLnNoOjI4MDEKLW1zZ2lkICJBZGQuLi4iCi1tc2dzdHIgIkzDpGdnIHRpbGwuLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc3NwotbXNnaWQgIlB1c2guLi4iCi1tc2dzdHIgIlPDpG5kLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3ODEKLW1zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgotbXNnc3RyICJUYSBib3J0IGdyZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc5MSBnaXQtZ3VpLnNoOjMzNzMKLW1zZ2lkICJPcHRpb25zLi4uIgotbXNnc3RyICJBbHRlcm5hdGl2Li4uIgotCi0jOiBnaXQtZ3VpLnNoOjI4MDIKLW1zZ2lkICJSZW1vdmUuLi4iCi1tc2dzdHIgIlRhIGJvcnQuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjgxMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCi1tc2dpZCAiSGVscCIKLW1zZ3N0ciAiSGrDpGxwIgotCi0jOiBnaXQtZ3VpLnNoOjI4MTUgZ2l0LWd1aS5zaDoyODE5IGxpYi9hYm91dC50Y2w6MTQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3V0ICVzIgotbXNnc3RyICJPbSAlcyIKLQotIzogZ2l0LWd1aS5zaDoyODQzCi1tc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCi1tc2dzdHIgIldlYmJkb2t1bWVudGF0aW9uIgotCi0jOiBnaXQtZ3VpLnNoOjI4NDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Ci1tc2dpZCAiU2hvdyBTU0ggS2V5IgotbXNnc3RyICJWaXNhIFNTSC1ueWNrZWwiCi0KLSM6IGdpdC1ndWkuc2g6Mjk2NQotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgotbXNnc3RyICIiCi0iw7ZkZXNkaWdlcnQ6IGt1bmRlIGludGUgdGEgc3RhdHVzIHDDpSBzw7ZrdsOkZ2VuICVzOiBGaWwgZWxsZXIga2F0YWxvZyBzYWtuYXMiCi0KLSM6IGdpdC1ndWkuc2g6Mjk5NwotbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKLW1zZ3N0ciAiQWt0dWVsbCBncmVuOiIKLQotIzogZ2l0LWd1aS5zaDozMDIzCi1tc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKLW1zZ3N0ciAiS8O2YWRlIMOkbmRyaW5nYXIgKGtvbW1lciBhdHQgY2hlY2thcyBpbikiCi0KLSM6IGdpdC1ndWkuc2g6MzA0MwotbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCi1tc2dzdHIgIk9rw7ZhZGUgw6RuZHJpbmdhciIKLQotIzogZ2l0LWd1aS5zaDozMDk4Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAiS8O2YSDDpG5kcmFkZSIKLQotIzogZ2l0LWd1aS5zaDozMTE3IGxpYi90cmFuc3BvcnQudGNsOjEwNyBsaWIvdHJhbnNwb3J0LnRjbDoxOTYKLW1zZ2lkICJQdXNoIgotbXNnc3RyICJTw6RuZCIKLQotIzogZ2l0LWd1aS5zaDozMTUyCi1tc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIklubGVkYW5kZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKLQotIzogZ2l0LWd1aS5zaDozMTUzCi1tc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIlV0w7ZrYXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZToiCi0KLSM6IGdpdC1ndWkuc2g6MzE1NAotbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIlV0w7ZrYXQgaW5sZWRhbmRlIGluY2hlY2tuaW5nc21lZGRlbGFuZGU6IgotCi0jOiBnaXQtZ3VpLnNoOjMxNTUKLW1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiVXTDtmthdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgc2FtbWFuc2xhZ25pbmc6IgotCi0jOiBnaXQtZ3VpLnNoOjMxNTYKLW1zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIkluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBzYW1tYW5zbGFnbmluZzoiCi0KLSM6IGdpdC1ndWkuc2g6MzE1NwotbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZToiCi0KLSM6IGdpdC1ndWkuc2g6MzIwNiBnaXQtZ3VpLnNoOjMzNDggbGliL2NvbnNvbGUudGNsOjczCi1tc2dpZCAiQ29weSBBbGwiCi1tc2dzdHIgIktvcGllcmEgYWxsYSIKLQotIzogZ2l0LWd1aS5zaDozMjMwIGxpYi9ibGFtZS50Y2w6MTA0Ci1tc2dpZCAiRmlsZToiCi1tc2dzdHIgIkZpbDoiCi0KLSM6IGdpdC1ndWkuc2g6MzMzNgotbXNnaWQgIlJlZnJlc2giCi1tc2dzdHIgIlVwcGRhdGVyYSIKLQotIzogZ2l0LWd1aS5zaDozMzU3Ci1tc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJNaW5za2EgdGVja2Vuc25pdHRzc3RvcmxlayIKLQotIzogZ2l0LWd1aS5zaDozMzYxCi1tc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICLDlmthIHRlY2tlbnNuaXR0c3N0b3JsZWsiCi0KLSM6IGdpdC1ndWkuc2g6MzM2OSBsaWIvYmxhbWUudGNsOjI4MQotbXNnaWQgIkVuY29kaW5nIgotbXNnc3RyICJUZWNrZW5rb2RuaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjMzODAKLW1zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCi1tc2dzdHIgIkFudsOkbmQvw6V0ZXJzdMOkbGwgZGVsIgotCi0jOiBnaXQtZ3VpLnNoOjMzODUKLW1zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCi1tc2dzdHIgIkFudsOkbmQvw6V0ZXJzdMOkbGwgcmFkIgotCi0jOiBnaXQtZ3VpLnNoOjM0MDQKLW1zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiU3RhcnRhIHZlcmt0eWcgZsO2ciBzYW1tYW5zbGFnbmluZyIKLQotIzogZ2l0LWd1aS5zaDozNDA5Ci1tc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgotbXNnc3RyICJBbnbDpG5kIHZlcnNpb25lbiBmcsOlbiBmasOkcnJhcmtpdmV0IgotCi0jOiBnaXQtZ3VpLnNoOjM0MTMKLW1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKLW1zZ3N0ciAiQW52w6RuZCBsb2thbGEgdmVyc2lvbmVuIgotCi0jOiBnaXQtZ3VpLnNoOjM0MTcKLW1zZ2lkICJSZXZlcnQgVG8gQmFzZSIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGwgdGlsbCBiYXN2ZXJzaW9uZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzQzNQotbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIlZpc3VhbGlzZXJhIMOkbmRyaW5nYXJuYSBpIHVuZGVybW9kdWxlbiIKLQotIzogZ2l0LWd1aS5zaDozNDM5Ci1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiVmlzdWFsaXNlcmEgZ3JlbmVucyBoaXN0b3JpayBpIHVuZGVybW9kdWxlbiIKLQotIzogZ2l0LWd1aS5zaDozNDQzCi1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJWaXN1YWxpc2VyYSBhbGxhIGdyZW5hcnMgaGlzdG9yaWsgaSB1bmRlcm1vZHVsZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzQ0OAotbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiU3RhcnRhIGdpdCBndWkgaSB1bmRlcm1vZHVsZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzQ4MwotbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiVGEgYm9ydCBkZWwgdXIgaW5jaGVja25pbmdza8O2IgotCi0jOiBnaXQtZ3VpLnNoOjM0ODUKLW1zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgotbXNnc3RyICJUYSBib3J0IHJhZGVyIHVyIGluY2hlY2tuaW5nc2vDtiIKLQotIzogZ2l0LWd1aS5zaDozNDg3Ci1tc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgotbXNnc3RyICJUYSBib3J0IHJhZCB1ciBpbmNoZWNrbmluZ3Nrw7YiCi0KLSM6IGdpdC1ndWkuc2g6MzQ5MAotbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKLW1zZ3N0ciAiU3TDpGxsIGRlbCBpIGluY2hlY2tuaW5nc2vDtiIKLQotIzogZ2l0LWd1aS5zaDozNDkyCi1tc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKLW1zZ3N0ciAiU3TDpGxsIHJhZGVyIGkgaW5jaGVja25pbmdza8O2IgotCi0jOiBnaXQtZ3VpLnNoOjM0OTQKLW1zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCi1tc2dzdHIgIlN0w6RsbCByYWQgaSBpbmNoZWNrbmluZ3Nrw7YiCi0KLSM6IGdpdC1ndWkuc2g6MzUxOQotbXNnaWQgIkluaXRpYWxpemluZy4uLiIKLW1zZ3N0ciAiSW5pdGllcmFyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjM2NTgKLSMsIHRjbC1mb3JtYXQKKyM6IGFyY2hpdmUuYzoxMgogbXNnaWQgIiIKLSJQb3NzaWJsZSBlbnZpcm9ubWVudCBpc3N1ZXMgZXhpc3QuXG4iCi0iXG4iCi0iVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHByb2JhYmx5XG4iCi0iZ29pbmcgdG8gYmUgaWdub3JlZCBieSBhbnkgR2l0IHN1YnByb2Nlc3MgcnVuXG4iCi0iYnkgJXM6XG4iCi0iXG4iCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFtvcHRpb25zXSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgogbXNnc3RyICIiCi0iRGV0IGZpbm5zIG3DtmpsaWdhIHByb2JsZW0gbWVkIG1pbGrDtnZhcmlhYmxlci5cbiIKLSJcbiIKLSJGw7ZsamFuZGUgbWlsasO2dmFyaWFibGVyIGtvbW1lciB0cm9saWdlbiBhdHRcbiIKLSJpZ25vcmVyYXMgYXYgYWxsYSBHaXQtdW5kZXJwcm9jZXNzZXIgc29tIGvDtnJzXG4iCi0iYXYgJXM6XG4iCi0iXG4iCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPGFya2l2PiBbLS1leGVjIDxrbWQ+XSBbZmxhZ2dvcl0gPHRyw6RkLWlndD4gIgorIls8c8O2a3bDpGc+Li4uXSIKIAotIzogZ2l0LWd1aS5zaDozNjg3CisjOiBhcmNoaXZlLmM6MTMKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8YXJraXY+IFstLWV4ZWMgPGttZD5dIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjMyMgorbXNnaWQgImZtdCIKK21zZ3N0ciAiZm10IgorCisjOiBhcmNoaXZlLmM6MzIyCittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgImFya2l2Zm9ybWF0IgorCisjOiBhcmNoaXZlLmM6MzIzIGJ1aWx0aW4vbG9nLmM6MTA3OQorbXNnaWQgInByZWZpeCIKK21zZ3N0ciAicHJlZml4IgorCisjOiBhcmNoaXZlLmM6MzI0Cittc2dpZCAicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIKK21zZ3N0ciAibMOkZ2cgdGlsbCBwcmVmaXggdGlsbCB2YXJqZSBzw7ZrdsOkZyBpIGFya2l2ZXQiCisKKyM6IGFyY2hpdmUuYzozMjUgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9ibGFtZS5jOjIzODkKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzkwIGJ1aWx0aW4vY29uZmlnLmM6NTYgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0NCBidWlsdGluL2dyZXAuYzo4MDEgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjc3CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDk0IGJ1aWx0aW4vbHMtZmlsZXMuYzo0OTcgYnVpbHRpbi9ub3Rlcy5jOjU0MAorIzogYnVpbHRpbi9ub3Rlcy5jOjY5NyBidWlsdGluL3JlYWQtdHJlZS5jOjEwNyBwYXJzZS1vcHRpb25zLmg6MTQ5Cittc2dpZCAiZmlsZSIKK21zZ3N0ciAiZmlsIgorCisjOiBhcmNoaXZlLmM6MzI2IGJ1aWx0aW4vYXJjaGl2ZS5jOjkyCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJza3JpdiBhcmtpdmV0IHRpbGwgZmlsZW4iCisKKyM6IGFyY2hpdmUuYzozMjgKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJsw6RzIC5naXRhdHRyaWJ1dGVzIGkgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBhcmNoaXZlLmM6MzI5Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAicmFwcG9ydGVyYSBhcmtpdmVyYWRlIGZpbGVyIHDDpSBzdGFuZGFyZCBmZWwiCisKKyM6IGFyY2hpdmUuYzozMzAKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICJlbmRhc3Qgc3BhcmEiCisKKyM6IGFyY2hpdmUuYzozMzEKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgImtvbXByaW1lcmEgc25hYmJhcmUiCisKKyM6IGFyY2hpdmUuYzozMzkKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgImtvbXByaW1lcmEgYsOkdHRyZSIKKworIzogYXJjaGl2ZS5jOjM0MgorbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAidmlzYSB1bmRlcnN0w7ZkZGEgYXJraXZmb3JtYXQiCisKKyM6IGFyY2hpdmUuYzozNDQgYnVpbHRpbi9hcmNoaXZlLmM6OTMgYnVpbHRpbi9jbG9uZS5jOjg1Cittc2dpZCAicmVwbyIKK21zZ3N0ciAiYXJraXYiCisKKyM6IGFyY2hpdmUuYzozNDUgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAiaMOkbXRhIGFya2l2ZXQgZnLDpW4gZmrDpHJyYXJraXZldCA8YXJraXY+IgorCisjOiBhcmNoaXZlLmM6MzQ2IGJ1aWx0aW4vYXJjaGl2ZS5jOjk1IGJ1aWx0aW4vbm90ZXMuYzo2MTkKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJrb21tYW5kbyIKKworIzogYXJjaGl2ZS5jOjM0NyBidWlsdGluL2FyY2hpdmUuYzo5NgorbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAic8O2a3bDpGcgdGlsbCBrb21tYW5kb3QgZ2l0LXVwbG9hZC1hcmNoaXZlIHDDpSBmasOkcnJlbiIKKworIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiJyVzJyBzZXIgaW50ZSB1dCBzb20gZW4gdjItYnVuZGxlLWZpbCIKKworIzogYnVuZGxlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICJva8OkbnQgaHV2dWQ6ICVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6ODkgYnVpbHRpbi9jb21taXQuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIgorCisjOiBidW5kbGUuYzoxNDAKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiQXJraXZldCBzYWtuYXIgZGVzc2EgbsO2ZHbDpG5kaWdhIGluY2hlY2tuaW5nYXI6IgorCisjOiBidW5kbGUuYzoxNjQgc2VxdWVuY2VyLmM6NTYyIHNlcXVlbmNlci5jOjk5NCBidWlsdGluL2xvZy5jOjI5MAorIzogYnVpbHRpbi9sb2cuYzo3MjcgYnVpbHRpbi9sb2cuYzoxMzEzIGJ1aWx0aW4vbG9nLmM6MTUyOSBidWlsdGluL21lcmdlLmM6MzQ3CisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTgxCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSByZXZpc2lvbnN0cmF2ZXJzZXJpbmciCisKKyM6IGJ1bmRsZS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyAlZCByZWZzIgorbXNnc3RyWzBdICJQYWtldGV0IChidW5kbGVuKSBpbm5laMOlbGxlciAlZCByZWZlcmVucyIKK21zZ3N0clsxXSAiUGFrZXRldCAoYnVuZGxlbikgaW5uZWjDpWxsZXIgJWQgcmVmZXJlbnNlciIKKworIzogYnVuZGxlLmM6MTkyCittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIlBha2V0ZXQgKGJ1bmRsZW4pIGJlc2tyaXZlciBlbiBrb21wbGV0dCBoaXN0b3Jpay4iCisKKyM6IGJ1bmRsZS5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmIgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnMiCittc2dzdHJbMF0gIlBha2V0ZXQgKGJ1bmRsZW4pIGtyw6R2ZXIgZGVubmEgcmVmZXJlbnMiCittc2dzdHJbMV0gIlBha2V0ZXQgKGJ1bmRsZW4pIGtyw6R2ZXIgZGVzc2EgJWQgcmVmZXJlbnNlciIKKworIzogYnVuZGxlLmM6Mjk0Cittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAicmV2LWxpc3QgZG9nIgorCisjOiBidW5kbGUuYzozMDAgYnVpbHRpbi9sb2cuYzoxMjA5IGJ1aWx0aW4vc2hvcnRsb2cuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAib2vDpG50IGFyZ3VtZW50OiAlcyIKKworIzogYnVuZGxlLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJyZWZlcmVuc2VuIFwiJXNcIiBleGtsdWRlcmFzIGF2IGFyZ3VtZW50ZW4gdGlsbCByZXYtbGlzdCIKKworIzogYnVuZGxlLmM6MzgwCittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIlbDpGdyYXIgc2thcGEgZXR0IHRvbXQgcGFrZXQgKGJ1bmRsZSkuIgorCisjOiBidW5kbGUuYzozOTgKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICJLdW5kZSBpbnRlIHN0YXJ0YSBwYWNrLW9iamVjdHMiCisKKyM6IGJ1bmRsZS5jOjQxNgorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJwYWNrLW9iamVjdHMgbWlzc2x5Y2thZGVzIgorCisjOiBidW5kbGUuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBza2FwYSBcIiVzXCIiCisKKyM6IGJ1bmRsZS5jOjQ0MQorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiaW5kZXgtcGFjayBkb2ciCisKKyM6IGNvbW1pdC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSAlcyIKKworIzogY29tbWl0LmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMgw6RyIGludGUgZW4gaW5jaGVja25pbmchIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1pbm5ldCBzbHV0IgorCisjOiBjb25uZWN0ZWQuYzozOQorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIkt1bmRlIGludGUga8O2cmEgXCJnaXQgcmV2LWxpc3RcIiIKKworIzogY29ubmVjdGVkLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0OiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgdGlsbCByZXYtbGlzdDogJXMiCisKKyM6IGNvbm5lY3RlZC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdMOkbmdhIHJldi1saXN0OnMgc3RhbmRhcmQgaW46ICVzIgorCisjOiBkYXRlLmM6OTUKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJpIGZyYW10aWRlbiIKKworIzogZGF0ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICIlbHUgc2VrdW5kIHNlZGFuIgorbXNnc3RyWzFdICIlbHUgc2VrdW5kZXIgc2VkYW4iCisKKyM6IGRhdGUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiJWx1IG1pbnV0IHNlZGFuIgorbXNnc3RyWzFdICIlbHUgbWludXRlciBzZWRhbiIKKworIzogZGF0ZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gIiVsdSB0aW1tZSBzZWRhbiIKK21zZ3N0clsxXSAiJWx1IHRpbW1hciBzZWRhbiIKKworIzogZGF0ZS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGRheXMgYWdvIgorbXNnc3RyWzBdICIlbHUgZGFnIHNlZGFuIgorbXNnc3RyWzFdICIlbHUgZGFnYXIgc2VkYW4iCisKKyM6IGRhdGUuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgd2Vla3MgYWdvIgorbXNnc3RyWzBdICIlbHUgdmVja2Egc2VkYW4iCittc2dzdHJbMV0gIiVsdSB2ZWNrb3Igc2VkYW4iCisKKyM6IGRhdGUuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVsdSBtw6VuYWQgc2VkYW4iCittc2dzdHJbMV0gIiVsdSBtw6VuYWRlciBzZWRhbiIKKworIzogZGF0ZS5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgeWVhciIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIgorbXNnc3RyWzBdICIlbHUgw6VyIgorbXNnc3RyWzFdICIlbHUgw6VyIgorCisjOiBkYXRlLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCAlbHUgbcOlbmFkIHNlZGFuIgorbXNnc3RyWzFdICIlcywgJWx1IG3DpW5hZGVyIHNlZGFuIgorCisjOiBkYXRlLmM6MTU0IGRhdGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMgYWdvIgorbXNnc3RyWzBdICIlbHUgw6VyIHNlZGFuIgorbXNnc3RyWzFdICIlbHUgw6VyIHNlZGFuIgorCisjOiBkaWZmLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclLipzJ1xuIgorbXNnc3RyICIgIE1pc3NseWNrYWRlcyB0b2xrYSBkaXJzdGF0LWF2c2vDpHJuaW5nc3Byb2NlbnRhbmRlbCBcIiUuKnNcIlxuIgorCisjOiBkaWZmLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJS4qcydcbiIKK21zZ3N0ciAiICBPa8OkbmQgZGlyc3RhdC1wYXJhbWV0ZXIgXCIlLipzXCJcbiIKKworIzogZGlmZi5jOjIxMAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iXG4iCi0iVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgotIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKLW1zZ3N0ciAiIgotIlxuIgotIkRldHRhIGJlcm9yIHDDpSBldHQga8OkbnQgcHJvYmxlbSBtZWRcbiIKLSJUY2wtYmluw6RyZW4gc29tIGbDtmxqZXIgbWVkIEN5Z3dpbi4iCi0KLSM6IGdpdC1ndWkuc2g6MzY5MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJcbiIKLSJcbiIKLSJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCi0iaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCi0idXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKLSJ+Ly5naXRjb25maWcgZmlsZS5cbiIKLW1zZ3N0ciAiIgotIlxuIgotIlxuIgotIkR1IGthbiBlcnPDpHR0YSAlc1xuIgotIm1lZCBhdHQgbMOkZ2dhIGluIHbDpHJkZW4gZsO2ciBpbnN0w6RsbG5pbmdhcm5hXG4iCi0idXNlci5uYW1lIG9jaCB1c2VyLmVtYWlsIGkgZGluIHBlcnNvbmxpZ2FcbiIKLSJ+Ly5naXRjb25maWctZmlsLlxuIgotCi0jOiBsaWIvYWJvdXQudGNsOjI2Ci1tc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgotbXNnc3RyICJnaXQtZ3VpIC0gZXR0IGdyYWZpc2t0IGFudsOkbmRhcmdyw6Ruc3NuaXR0IGbDtnIgR2l0LiIKLQotIzogbGliL2JsYW1lLnRjbDo3MgotbXNnaWQgIkZpbGUgVmlld2VyIgotbXNnc3RyICJGaWx2aXNhcmUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzgKLW1zZ2lkICJDb21taXQ6IgotbXNnc3RyICJJbmNoZWNrbmluZzoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MjcxCi1tc2dpZCAiQ29weSBDb21taXQiCi1tc2dzdHIgIktvcGllcmEgaW5jaGVja25pbmciCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjc1Ci1tc2dpZCAiRmluZCBUZXh0Li4uIgotbXNnc3RyICJTw7ZrIHRleHQuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjg0Ci1tc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKLW1zZ3N0ciAiR8O2ciBmdWxsIGtvcGllcmluZ3NpZ2Vua8Okbm5pbmciCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjg4Ci1tc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCi1tc2dzdHIgIlZpc2EgaGlzdG9yaWtzYW1tYW5oYW5nIgotCi0jOiBsaWIvYmxhbWUudGNsOjI5MQotbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCi1tc2dzdHIgIktsYW5kcmEgZsO2csOkbGRyYWluY2hlY2tuaW5nIgotCi0jOiBsaWIvYmxhbWUudGNsOjQ1MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlYWRpbmcgJXMuLi4iCi1tc2dzdHIgIkzDpHNlciAlcy4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo1ODEKLW1zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAiTMOkc2VyIGFubm90ZXJpbmdhciBmw7ZyIGtvcGllcmluZy9mbHl0dG5pbmcuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NjAxCi1tc2dpZCAibGluZXMgYW5ub3RhdGVkIgotbXNnc3RyICJyYWRlciBhbm5vdGVyYWRlIgotCi0jOiBsaWIvYmxhbWUudGNsOjc5MwotbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIkzDpHNlciBpbiBhbm5vdGVyaW5nIGF2IG9yaWdpbmFscGxhY2VyaW5nLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjc5NgotbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgotbXNnc3RyICJBbm5vdGVyaW5nIGZ1bGxib3JkYWQuIgotCi0jOiBsaWIvYmxhbWUudGNsOjgyNgotbXNnaWQgIkJ1c3kiCi1tc2dzdHIgIlVwcHRhZ2VuIgotCi0jOiBsaWIvYmxhbWUudGNsOjgyNwotbXNnaWQgIkFubm90YXRpb24gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuIgotbXNnc3RyICJBbm5vdGVyaW5nc3Byb2Nlc3Mga8O2cnMgcmVkYW4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjg2NgotbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCi1tc2dzdHIgIkvDtnIgZ3J1bmRsaWcga29waWVyaW5nc2lnZW5rw6RubmluZy4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo5MzQKLW1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCi1tc2dzdHIgIkzDpHNlciBpbiBhbm5vdGVyaW5nLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjk4NwotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgIkbDtnJmYXR0YXJlOiIKLQotIzogbGliL2JsYW1lLnRjbDo5OTEKLW1zZ2lkICJDb21taXR0ZXI6IgotbXNnc3RyICJJbmNoZWNrYXJlOiIKLQotIzogbGliL2JsYW1lLnRjbDo5OTYKLW1zZ2lkICJPcmlnaW5hbCBGaWxlOiIKLW1zZ3N0ciAiVXJzcHJ1bmdsaWcgZmlsOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDQ0Ci1tc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgotbXNnc3RyICJIaXR0YXIgaW50ZSBpbmNoZWNrbmluZyBmw7ZyIEhFQUQ6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEwOTkKLW1zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKLW1zZ3N0ciAiSGl0dGFyIGludGUgZsO2csOkbGRyYWluY2hlY2tuaW5nOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMTE0Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgotbXNnc3RyICJLYW4gaW50ZSB2aXNhIGbDtnLDpGxkZXIiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTExNSBsaWIvZGlmZi50Y2w6MzIzCi1tc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKLW1zZ3N0ciAiRmVsIHZpZCBpbmzDpHNuaW5nIGF2IGRpZmZlcmVuczoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI1NQotbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgotbXNnc3RyICJVcnNwcnVuZ2xpZ2VuIGF2OiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjYxCi1tc2dpZCAiSW4gRmlsZToiCi1tc2dzdHIgIkkgZmlsZW46IgotCi0jOiBsaWIvYmxhbWUudGNsOjEyNjYKLW1zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCi1tc2dzdHIgIktvcGllcmFkIGVsbGVyIGZseXR0YWQgaGl0IGF2OiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTYgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjEKLW1zZ2lkICJDaGVja291dCBCcmFuY2giCi1tc2dzdHIgIkNoZWNrYSB1dCBncmVuIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNgotbXNnaWQgIkNoZWNrb3V0IgotbXNnc3RyICJDaGVja2EgdXQiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMwIGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNwotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg2Ci0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQ1IGxpYi9tZXJnZS50Y2w6MTcyCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjcgbGliL3JlbW90ZV9hZGQudGNsOjM0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDMKLSM6IGxpYi90b29sc19kbGcudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjIwMiBsaWIvdG9vbHNfZGxnLnRjbDozNDUKLSM6IGxpYi90cmFuc3BvcnQudGNsOjExMQotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAiQXZicnl0IgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNSBsaWIvYnJvd3Nlci50Y2w6MjkxIGxpYi90b29sc19kbGcudGNsOjMyMQotbXNnaWQgIlJldmlzaW9uIgotbXNnc3RyICJSZXZpc2lvbiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzkgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI4NwotbXNnaWQgIk9wdGlvbnMiCi1tc2dzdHIgIkFsdGVybmF0aXYiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgotbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAiSMOkbXRhIHNww6VyYW5kZSBncmVuIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NwotbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiS29wcGxhIGJvcnQgZnLDpW4gbG9rYWwgZ3JlbiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIzCi1tc2dpZCAiQ3JlYXRlIEJyYW5jaCIKLW1zZ3N0ciAiU2thcGEgZ3JlbiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI4Ci1tc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCi1tc2dzdHIgIlNrYXBhIG55IGdyZW4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4OQotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAiU2thcGEiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MgotbXNnaWQgIkJyYW5jaCBOYW1lIgotbXNnc3RyICJOYW1uIHDDpSBncmVuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDQgbGliL3JlbW90ZV9hZGQudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjUxCi1tc2dpZCAiTmFtZToiCi1tc2dzdHIgIk5hbW46IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTcKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiQW52w6RuZCBuYW1uIHDDpSBzcMOlcmFkIGdyZW4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgotbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgotbXNnc3RyICJJbmxlZGFuZGUgcmV2aXNpb24iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgotbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgotbXNnc3RyICJVcHBkYXRlcmEgYmVmaW50bGlnIGdyZW46IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKLW1zZ2lkICJObyIKLW1zZ3N0ciAiTmVqIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKLW1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKLW1zZ3N0ciAiRW5kYXN0IHNuYWJic3BvbG5pbmciCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQotbXNnaWQgIlJlc2V0IgotbXNnc3RyICLDhXRlcnN0w6RsbCIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Ci1tc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCi1tc2dzdHIgIkNoZWNrYSB1dCBuw6RyIHNrYXBhZCIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMgotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgotbXNnc3RyICJWw6RsaiBlbiBncmVuIGF0dCBzcMOlcmEuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgotbXNnc3RyICJEZW4gc3DDpXJhZGUgZ3JlbmVuICVzIMOkciBpbnRlIGVuIGdyZW4gaSBmasOkcnJhcmtpdmV0LiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTIKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgotbXNnc3RyICJBbmdlIGV0dCBuYW1uIGbDtnIgZ3JlbmVuLiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NSBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTEyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgIlwiJXNcIiBrYW4gaW50ZSBhbnbDpG5kYXMgc29tIG5hbW4gcMOlIGdyZW5lbi4iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNgotbXNnaWQgIkRlbGV0ZSBCcmFuY2giCi1tc2dzdHIgIlRhIGJvcnQgZ3JlbiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIxCi1tc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiVGEgYm9ydCBsb2thbCBncmVuIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzkKLW1zZ2lkICJMb2NhbCBCcmFuY2hlcyIKLW1zZ3N0ciAiTG9rYWxhIGdyZW5hciIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUxCi1tc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCi1tc2dzdHIgIlRhIGJhcmEgYm9ydCBvbSBzYW1tYW5zbGFnZW4gbWVkIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTMgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMjAKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCi1tc2dzdHIgIkFsbHRpZCAodXRmw7ZyIGludGUgc2FtbWFuc2xhZ25pbmdzdGVzdCkiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCi1tc2dzdHIgIkbDtmxqYW5kZSBncmVuYXIgw6RyIGludGUgdGlsbCBmdWxsbyBzYW1tYW5zbGFnbmEgbWVkICVzOiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxOAotbXNnaWQgIiIKLSJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgotIlxuIgotIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgotbXNnc3RyICIiCi0iRGV0IGthbiB2YXJhIHN2w6VydCBhdHQgw6V0ZXJzdMOkbGxhIGJvcnR0YWduYSBncmVuYXIuXG4iCi0iXG4iCi0iVGEgYm9ydCBkZSB2YWxkYSBncmVuYXJuYT8iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgogIiVzIgogbXNnc3RyICIiCi0iS3VuZGUgaW50ZSB0YSBib3J0IGdyZW5hcjpcbiIKKyJIaXR0YWRlIGZlbCBpIGtvbmZpZ3VyYXRpb25zdmFyaWFiZWxuIFwiZGlmZi5kaXJzdGF0XCI6XG4iCiAiJXMiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxNSBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjMKLW1zZ2lkICJSZW5hbWUgQnJhbmNoIgotbXNnc3RyICJCeXQgbmFtbiBww6UgZ3JlbiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI4Ci1tc2dpZCAiUmVuYW1lIgotbXNnc3RyICJCeXQgbmFtbiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM4Ci1tc2dpZCAiQnJhbmNoOiIKLW1zZ3N0ciAiR3JlbjoiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo0NgotbXNnaWQgIk5ldyBOYW1lOiIKLW1zZ3N0ciAiTnl0dCBuYW1uOiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjgxCi1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgotbXNnc3RyICJWw6RsaiBlbiBncmVuIGF0dCBieXRhIG5hbW4gcMOlLiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwMiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyByZWRhbi4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgotbXNnc3RyICJLdW5kZSBpbnRlIGJ5dGEgbmFtbiBww6UgXCIlc1wiLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjE3Ci1tc2dpZCAiU3RhcnRpbmcuLi4iCi1tc2dzdHIgIlN0YXJ0YXIuLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNwotbXNnaWQgIkZpbGUgQnJvd3NlciIKLW1zZ3N0ciAiRmlsYmzDpGRkcmFyZSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyAlcy4uLiIKLW1zZ3N0ciAiTMOkc2VyICVzLi4uIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTg3Ci1tc2dpZCAiW1VwIFRvIFBhcmVudF0iCi1tc2dzdHIgIltVcHAgdGlsbCBmw7Zyw6RsZGVyXSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI2OSBsaWIvYnJvd3Nlci50Y2w6Mjc2Ci1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAiQmzDpGRkcmEgZmlsZXIgcMOlIGdyZW5lbiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI4MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQwNAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyNwotbXNnaWQgIkJyb3dzZSIKLW1zZ3N0ciAiQmzDpGRkcmEiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgotbXNnc3RyICJIw6RtdGFyICVzIGZyw6VuICVzIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKLW1zZ3N0ciAiw7ZkZXNkaWdlcnQ6IEt1bmRlIGludGUgc2zDpSB1cHAgJXMiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMwCi0jOiBsaWIvc3Noa2V5LnRjbDo1NQotbXNnaWQgIkNsb3NlIgotbXNnc3RyICJTdMOkbmciCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgotbXNnc3RyICJHcmVuZW4gXCIlc1wiIGZpbm5zIGludGUuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCi1tc2dzdHIgIkt1bmRlIGludGUga29uZmlndXJlcmEgZsO2cmVua2xhZCBnaXQtcHVsbCBmw7ZyICclcycuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjM0NTgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgotIlxuIgotIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCi0iQSBtZXJnZSBpcyByZXF1aXJlZC4iCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgogbXNnc3RyICIiCi0iR3JlbmVuIFwiJXNcIiBmaW5ucyByZWRhbi5cbiIKLSJcbiIKLSJEZW4ga2FuIGludGUgc25hYmJzcG9sYXMgdGlsbCAlcy5cbiIKLSJFbiBzYW1tYW5zbGFnbmluZyBrcsOkdnMuIgorIk1pc3NseWNrYWRlcyB0b2xrYSBhcmd1bWVudCB0aWxsIGZsYWdnYW4gLS1kaXJzdGF0Ly1YO1xuIgorIiVzIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI0MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIlNhbW1hbnNsYWduaW5nc3N0cmF0ZWdpbiBcIiVzXCIgc3TDtmRzIGludGUuIgorIzogZ3BnLWludGVyZmFjZS5jOjU5Cittc2dpZCAiY291bGQgbm90IHJ1biBncGcuIgorbXNnc3RyICJrdW5kZSBpbnRlIGvDtnJhIGdwZy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgdXBwZGF0ZXJhIFwiJXNcIi4iCisjOiBncGctaW50ZXJmYWNlLmM6NzEKK21zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCittc2dzdHIgImdwZyBnb2R0b2cgaW50ZSBkYXRhIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAotbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKLW1zZ3N0ciAiS8O2b21yw6VkZXQgKGluZGV4KSDDpHIgcmVkYW4gbMOlc3QuIgorIzogZ3BnLWludGVyZmFjZS5jOjgyCittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcgbWlzc2x5Y2thZGVzIHNpZ25lcmEgZGF0YSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKKyM6IGdyZXAuYzoxNDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICJcIiVzXCIga3VuZGUgaW50ZSBsw6RzYSAlcyIKKworIzogZ3JlcC5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIlwiJXNcIjogJXMiCisKKyM6IGdyZXAuYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQgJXMiCittc2dzdHIgIlwiJXNcIjoga29ydCBsw6RzbmluZyAlcyIKKworIzogaGVscC5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgImdpdC1rb21tYW5kb24gdGlsbGfDpG5nbGlnYSBpIFwiJXNcIiIKKworIzogaGVscC5jOjIxOQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAiZ2l0LWtvbW1hbmRvbiBmcsOlbiBhbmRyYSBwbGF0c2VyIGkgZGluICRQQVRIIgorCisjOiBoZWxwLmM6Mjc1CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgogbXNnc3RyICIiCi0iRGV0IHNlbmFzdGUgaW5sw6RzdGEgdGlsbHN0w6VuZGV0IG1vdHN2YXJhciBpbnRlIHRpbGxzdMOlbmRldCBpIGFya2l2ZXQuXG4iCi0iXG4iCi0iRXR0IGFubmF0IEdpdC1wcm9ncmFtIGhhciDDpG5kcmF0IGFya2l2ZXQgc2VkYW4gc2VuYXN0ZSBhdnPDtmtuaW5nZW4uIER1IG3DpXN0ZSAiCi0idXRmw7ZyYSBlbiBueSBzw7ZrbmluZyBpbm5hbiBkZW4gYWt0dWVsbGEgZ3JlbmVuIGthbiDDpG5kcmFzLlxuIgotIlxuIgotIlPDtmtuaW5nZW4ga29tbWVyIGF0dCBzdGFydGFzIGF1dG9tYXRpc2t0IG51LlxuIgorIlwiJXNcIiB2ZXJrYXIgdmFyYSBldHQgZ2l0LWtvbW1hbmRvLCBtZW4gdmkga2FuIGludGVcbiIKKyJrw7ZyYSBkZXQuIEthbnNrZSBnaXQtJXMgw6RyIHRyYXNpZ3Q/IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCi1tc2dzdHIgIlVwcGRhdGVyYXIgYXJiZXRza2F0YWxvZ2VuIHRpbGwgXCIlc1wiLi4uIgorIzogaGVscC5jOjMzMgorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICJPaiBkw6UuIERpdHQgc3lzdGVtIHJhcHBvcnRlcmFyIGluZ2EgR2l0LWtvbW1hbmRvbiBhbGxzLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKLW1zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKLW1zZ3N0ciAiZmlsZXIgdXRjaGVja2FkZSIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgotbXNnc3RyICJBdmJyeXRlciB1dGNoZWNrbmluZyBhdiBcIiVzXCIgKHNhbW1hbnNsYWduaW5nIHDDpSBmaWxuaXbDpSBrcsOkdnMpLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKLW1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKLW1zZ3N0ciAiU2FtbWFuc2xhZ25pbmcgcMOlIGZpbG5pdsOlIGtyw6R2cy4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCi1tc2dzdHIgIlN0YW5uYXIgcMOlIGdyZW5lbiBcIiVzXCIuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgorIzogaGVscC5jOjM1NAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCi0iXG4iCi0iSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCi0iQ2hlY2tvdXQnLiIKKyJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuXG4iCisiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnIgogbXNnc3RyICIiCi0iRHUgw6RyIGludGUgbMOkbmdyZSBww6UgZW4gbG9rYWwgZ3Jlbi5cbiIKLSJcbiIKLSJPbSBkdSB2aWxsZSB2YXJhIHDDpSBlbiBncmVuIHNrYXBhciBkdSBlbiBudSwgYmFzZXJhZCBww6UgXCJEZW5uYSBmcsOlbmtvcHBsYWRlICIKLSJ1dGNoZWNrbmluZ1wiLiIKKyJWQVJOSU5HOiBEdSBhbnJvcGFkZSBldHQgR2l0LWtvbW1hbmRvIHZpZCBuYW1uIFwiJXNcIiwgc29tIGludGUgZmlubnMuXG4iCisiRm9ydHPDpHR0ZXIgdW5kZXIgZsO2cnV0c8OkdHRuaW5nZW4gYXR0IGR1IG1lbmFkZSBcIiVzXCIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgIkNoZWNrYWRlIHV0IFwiJXNcIi4iCisjOiBoZWxwLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImluICUwLjFmIHNlY29uZHMgYXV0b21hdGljYWxseS4uLiIKK21zZ3N0ciAiYXV0b21hdGlza3Qgb20gJTAuMWYgc2VrdW5kZXIuLi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKLW1zZ3N0ciAiIgotIk9tIGR1IMOldGVyc3TDpGxsZXIgXCIlc1wiIHRpbGwgXCIlc1wiIGfDpXIgZsO2bGphbmRlIGluY2hlY2tuaW5nYXIgZsO2cmxvcmFkZToiCisjOiBoZWxwLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdDogJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZC4gU2VlICdnaXQgLS1oZWxwJy4iCittc2dzdHIgImdpdDogXCIlc1wiIMOkciBpbnRlIGV0dCBnaXQta29tbWFuZG8uIFNlIFwiZ2l0IC0taGVscFwiLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTcKLW1zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgotbXNnc3RyICJEZXQga2Fuc2tlIGludGUgw6RyIHPDpSBlbmtlbHQgYXR0IMOldGVyc2thcGEgZsO2cmxvcmFkZSBpbmNoZWNrbmluZ2FyLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAnJXMnPyIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGxhIFwiJXNcIj8iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTY3IGxpYi9tZXJnZS50Y2w6MTY0IGxpYi90b29sc19kbGcudGNsOjMzNgotbXNnaWQgIlZpc3VhbGl6ZSIKLW1zZ3N0ciAiVmlzdWFsaXNlcmEiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCi0iXG4iCi0iVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKLSJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKLSJcbiIKLSJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKLW1zZ3N0ciAiIgotIkt1bmRlIGludGUgc3TDpGxsYSBpbiBha3R1ZWxsIGdyZW4uXG4iCi0iXG4iCi0iQXJiZXRza2F0YWxvZ2VuIGhhciBiYXJhIHbDpHhsYXRzIGRlbHZpcy4gVmkgdXBwZGF0ZXJhZGUgZmlsZXJuYSB1dGFuICIKLSJwcm9ibGVtLCBtZW4ga3VuZGUgaW50ZSB1cHBkYXRlcmEgZW4gaW50ZXJuIGZpbCBpIEdpdC5cbiIKLSJcbiIKLSJEZXR0YSBza3VsbGUgaW50ZSBoYSBow6RudC4gJXMga29tbWVyIG51IHN0w6RuZ2FzIG9jaCBnZSB1cHAuIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCi1tc2dpZCAiU2VsZWN0IgotbXNnc3RyICJWw6RsaiIKLQotIzogbGliL2Nob29zZV9mb250LnRjbDo1NQotbXNnaWQgIkZvbnQgRmFtaWx5IgotbXNnc3RyICJUZWNrZW5zbml0dHNmYW1pbGoiCi0KLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKLW1zZ2lkICJGb250IFNpemUiCi1tc2dzdHIgIlN0b3JsZWsiCi0KLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTMKLW1zZ2lkICJGb250IEV4YW1wbGUiCi1tc2dzdHIgIkV4ZW1wZWwiCi0KLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTA1Ci1tc2dpZCAiIgotIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgotIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCi1tc2dzdHIgIiIKLSJEZXR0YSDDpHIgZW4gZXhlbXBlbHRleHQuXG4iCi0iT20gZHUgdHlja2VyIG9tIGRlbiBow6RyIHRleHRlbiBrYW4gZGVuIHZhcmEgZGl0dCB0ZWNrZW5zbml0dC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKLW1zZ2lkICJHaXQgR3VpIgotbXNnc3RyICJHaXQgR3VpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk0Ci1tc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgotbXNnc3RyICJTa2FwYSBueXR0IGFya2l2IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzCi1tc2dpZCAiTmV3Li4uIgotbXNnc3RyICJOeXR0Li4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OAotbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIktsb25hIGJlZmludGxpZ3QgYXJraXYiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExCi1tc2dpZCAiQ2xvbmUuLi4iCi1tc2dzdHIgIktsb25hLi4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExOCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTcKLW1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIsOWcHBuYSBiZWZpbnRsaWd0IGFya2l2IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyNAotbXNnaWQgIk9wZW4uLi4iCi1tc2dzdHIgIsOWcHBuYS4uLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzcKLW1zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgotbXNnc3RyICJTZW5hc3RlIGFya2l2ZW4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTQzCi1tc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCi1tc2dzdHIgIsOWcHBuYSB0aWRpZ2FyZSBhcmtpdjoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIkt1bmRlIGludGUgc2thcGEgYXJraXZldCAlczoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk5Ci1tc2dpZCAiRGlyZWN0b3J5OiIKLW1zZ3N0ciAiS2F0YWxvZzoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDI5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTEKLW1zZ2lkICJHaXQgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiR2l0YXJraXYiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDU0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiS2F0YWxvZ2VuICVzIGZpbm5zIHJlZGFuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiRmlsZW4gJXMgZmlubnMgcmVkYW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MwotbXNnaWQgIkNsb25lIgotbXNnc3RyICJLbG9uYSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODYKLW1zZ2lkICJTb3VyY2UgTG9jYXRpb246IgotbXNnc3RyICJQbGF0cyBmw7ZyIGvDpGxsa29kOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTUKLW1zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKLW1zZ3N0ciAiTcOlbGthdGFsb2c6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNQotbXNnaWQgIkNsb25lIFR5cGU6IgotbXNnc3RyICJUeXAgYXYga2xvbjoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTEwCi1tc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgotbXNnc3RyICJTdGFuZGFyZCAoc25hYmIsIHNlbWlyZWR1bmRhbnQsIGjDpXJkYSBsw6Rua2FyKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTUKLW1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCi1tc2dzdHIgIkZ1bGwga29waWEgKGzDpW5nc2FtbWFyZSwgcmVkdW5kYW50IHPDpGtlcmhldHNrb3BpYSkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIwCi1tc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCi1tc2dzdHIgIkRlbGFkIChzbmFiYmFzdCwgcmVrb21tZW5kZXJhcyBlaiwgaW5nZW4gc8Oka2VyaGV0c2tvcGlhKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDMKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE5Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgotbXNnc3RyICJJbnRlIGV0dCBHaXRhcmtpdjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCi1tc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICJTdGFuZGFyZCDDpHIgZW5kYXN0IHRpbGxnw6RuZ2xpZ3QgZsO2ciBsb2thbGEgYXJraXYuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NgotbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIkRlbGF0IMOkciBlbmRhc3QgdGlsbGfDpG5nbGlndCBmw7ZyIGxva2FsYSBhcmtpdi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJQbGF0c2VuICVzIGZpbm5zIHJlZGFuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBrb25maWd1cmVyYSB1cnNwcnVuZyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDAKLW1zZ2lkICJDb3VudGluZyBvYmplY3RzIgotbXNnc3RyICJSw6RrbmFyIG9iamVrdCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDEKLW1zZ2lkICJidWNrZXRzIgotbXNnc3RyICJoaW5rYXIiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgotbXNnc3RyICJLdW5kZSBpbnRlIGtvcGllcmEgb2JqZWt0L2luZm8vYWx0ZXJuYXRpdjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKLW1zZ3N0ciAiSW5nZW50aW5nIGF0dCBrbG9uYSBmcsOlbiAlcy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOQotbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKLW1zZ3N0ciAiR3JlbmVuIFwibWFzdGVyXCIgaGFyIGludGUgaW5pdGllcmF0cy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2Ci1tc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKLW1zZ3N0ciAiSMOlcmRhIGzDpG5rYXIgw6RyIGludGUgdGlsbGfDpG5nbGlnYS4gRmFsbGVyIHRpbGxiYWthIHDDpSBrb3BpZXJpbmcuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKLW1zZ3N0ciAiS2xvbmFyIGZyw6VuICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQotbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiS29waWVyYXIgb2JqZWt0IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAotbXNnaWQgIktpQiIKLW1zZ3N0ciAiS2lCIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCi1tc2dzdHIgIkt1bmRlIGludGUga29waWVyYSBvYmpla3Q6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NAotbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiTMOkbmthciBvYmpla3QiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk1Ci1tc2dpZCAib2JqZWN0cyIKLW1zZ3N0ciAib2JqZWt0IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgotbXNnc3RyICJLdW5kZSBpbnRlIGjDpXJkbMOkbmthIG9iamVrdDogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4Ci1tc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgZ3JlbmFyIG9jaCBvYmpla3QuIFNlIGtvbnNvbHV0ZGF0YSBmw7ZyIGRldGFsamVyLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIkt1bmRlIGludGUgaMOkbXRhIHRhZ2dhci4gU2Uga29uc29sdXRkYXRhIGbDtnIgZGV0YWxqZXIuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5MwotbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIkt1bmRlIGludGUgYXZnw7ZyYSBIRUFELiBTZSBrb25zb2x1dGRhdGEgZsO2ciBkZXRhbGplci4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCi1tc2dzdHIgIkt1bmRlIGludGUgc3TDpGRhIHVwcCAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDgKLW1zZ2lkICJDbG9uZSBmYWlsZWQuIgotbXNnc3RyICJLbG9uaW5nIG1pc3NseWNrYWRlcy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE1Ci1tc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgotbXNnc3RyICJIw6RtdGFkZSBpbmdlbiBzdGFuZGFyZGdyZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBzbMOlIHVwcCAlcyB0aWxsIG7DpWdvbiBpbmNoZWNrbmluZy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Ci1tc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgIlNrYXBhciBhcmJldHNrYXRhbG9nIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOSBsaWIvaW5kZXgudGNsOjcwIGxpYi9pbmRleC50Y2w6MTMzCi0jOiBsaWIvaW5kZXgudGNsOjIwMQotbXNnaWQgImZpbGVzIgotbXNnc3RyICJmaWxlciIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKLW1zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKLW1zZ3N0ciAiSW5sZWRhbmRlIGZpbHV0Y2hlY2tuaW5nIG1pc3NseWNrYWRlcy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMgotbXNnaWQgIk9wZW4iCi1tc2dzdHIgIsOWcHBuYSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIyCi1tc2dpZCAiUmVwb3NpdG9yeToiCi1tc2dzdHIgIkFya2l2OiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIGFya2l2ZXQgJXM6IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTIKLW1zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgotbXNnc3RyICJEZW5uYSBmcsOlbmtvcHBsYWRlIHV0Y2hlY2tuaW5nIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKLW1zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKLW1zZ3N0ciAiUmV2aXNpb25zdXR0cnljazoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3MgotbXNnaWQgIkxvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiTG9rYWwgZ3JlbiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjc3Ci1tc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgotbXNnc3RyICJTcMOlcmFuZGUgZ3JlbiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjgyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDMKLW1zZ2lkICJUYWciCi1tc2dzdHIgIlRhZ2ciCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKLW1zZ3N0ciAiT2dpbHRpZyByZXZpc2lvbjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDIKLW1zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCi1tc2dzdHIgIkluZ2VuIHJldmlzaW9uIHZhbGQuIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCi1tc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCi1tc2dzdHIgIlJldmlzaW9uc3V0dHJ5Y2tldCDDpHIgdG9tdC4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzYKLW1zZ2lkICJVcGRhdGVkIgotbXNnc3RyICJVcHBkYXRlcmFkIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTY0Ci1tc2dpZCAiVVJMIgotbXNnc3RyICJXZWJiYWRyZXNzIgotCi0jOiBsaWIvY29tbWl0LnRjbDo5Ci1tc2dpZCAiIgotIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCi0iXG4iCi0iWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKLSJ0byBhbWVuZC5cbiIKLW1zZ3N0ciAiIgotIkRldCBmaW5ucyBpbmdlbnRpbmcgYXR0IHV0w7ZrYS5cbiIKLSJcbiIKLSJEdSBow6VsbGVyIHDDpSBhdHQgc2thcGEgZGVuIGlubGVkYW5kZSBpbmNoZWNrbmluZ2VuLiBEZXQgZmlubnMgaW5nZW4gdGlkaWdhcmUgIgotImluY2hlY2tuaW5nIGF0dCB1dMO2a2EuXG4iCi0KLSM6IGxpYi9jb21taXQudGNsOjE4Ci1tc2dpZCAiIgotIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgotIlxuIgotIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCi0iY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKLSJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgotbXNnc3RyICIiCi0iS2FuIGludGUgdXTDtmthIHZpZCBzYW1tYW5zbGFnbmluZy5cbiIKLSJcbiIKLSJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4gc2FtbWFuc2xhZ25pbmcgc29tIGludGUgw6RyIGZ1bGxib3JkYWQuIER1IGthbiBpbnRlICIKLSJ1dMO2a2EgdGlkaWdhcmUgaW5jaGVja25pbmdhciBvbSBkdSBpbnRlIGbDtnJzdCBhdmJyeXRlciBkZW4gcMOlZ8OlZW5kZSAiCi0ic2FtbWFuc2xhZ25pbmdlbi5cbiIKLQotIzogbGliL2NvbW1pdC50Y2w6NDgKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCi1tc2dzdHIgIkZlbCB2aWQgaW5sw6RzbmluZyBhdiBpbmNoZWNrbmluZ3NkYXRhIGbDtnIgdXTDtmtuaW5nOiIKLQotIzogbGliL2NvbW1pdC50Y2w6NzUKLW1zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgotbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSBkaW4gaWRlbnRpdGV0OiIKLQotIzogbGliL2NvbW1pdC50Y2w6ODAKLW1zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgotbXNnc3RyICJGZWxha3RpZyBHSVRfQ09NTUlUVEVSX0lERU5UOiIKLQotIzogbGliL2NvbW1pdC50Y2w6MTI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCi1tc2dzdHIgInZhcm5pbmc6IFRjbCBzdMO2ZGVyIGludGUgdGVja2Vua29kbmluZ2VuIFwiJXNcIi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjE0OQotbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCi1tc2dzdHIgIiIKLSJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKLSJcbiIKLSJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKLSJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGR1IGthbiBnw7ZyYSBlbiBueSBpbmNoZWNrbmluZy5cbiIKLSJcbiIKLSJTw7ZrbmluZ2VuIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKLQotIzogbGliL2NvbW1pdC50Y2w6MTcyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCi0iYmVmb3JlIGNvbW1pdHRpbmcuXG4iCi1tc2dzdHIgIiIKLSJPc2FtbWFuc2xhZ25hIGZpbGVyIGthbiBpbnRlIGNoZWNrYXMgaW4uXG4iCi0iXG4iCi0iRmlsZW4gJXMgaGFyIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0ZXIuIER1IG3DpXN0ZSBsw7ZzYSBkZW0gb2NoIGvDtmEgZmlsZW4gIgotImlubmFuIGR1IGNoZWNrYXIgaW4gZGVuLlxuIgotCi0jOiBsaWIvY29tbWl0LnRjbDoxODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgotIlxuIgotIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCi1tc2dzdHIgIiIKLSJPa8OkbmQgZmlsc3RhdHVzICVzIHVwcHTDpGNrdC5cbiIKLSJcbiIKLSJGaWxlbiAlcyBrYW4gaW50ZSBjaGVja2FzIGluIGF2IHByb2dyYW1tZXQuXG4iCi0KLSM6IGxpYi9jb21taXQudGNsOjE4OAotbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgotbXNnc3RyICIiCi0iSW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4uXG4iCi0iXG4iCi0iRHUgbcOlc3RlIGvDtmEgw6V0bWluc3RvbmUgZW4gZmlsIGlubmFuIGR1IGthbiBjaGVja2EgaW4uXG4iCi0KLSM6IGxpYi9jb21taXQudGNsOjIwMwotbXNnaWQgIiIKLSJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCi0iXG4iCi0iQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKLSJcbiIKLSItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCi0iLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKLSItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCi1tc2dzdHIgIiIKLSJBbmdlIGV0dCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlLlxuIgotIlxuIgotIkV0dCBicmEgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBoYXIgZsO2bGphbmRlIGZvcm1hdDpcbiIKLSJcbiIKLSItIEbDtnJzdGEgcmFkZW46IEJlc2tyaXYgaSBlbiBtZW5pbmcgdmFkIGR1IGdqb3JkZS5cbiIKLSItIEFuZHJhIHJhZGVuOiBUb21cbiIKLSItIEbDtmxqYW5kZSByYWRlcjogQmVza3JpdiB2YXJmw7ZyIGRldCBow6RyIMOkciBlbiBicmEgw6RuZHJpbmcuXG4iCi0KLSM6IGxpYi9jb21taXQudGNsOjIzNAotbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgotbXNnc3RyICJBbnJvcGFyIGtyb2tlbiBmw7ZyZSBpbmNoZWNrbmluZyAocHJlLWNvbW1pdCkuLi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjI0OQotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgotbXNnc3RyICJJbmNoZWNrbmluZ2VuIGF2dmlzYWRlcyBhdiBrcm9rZW4gZsO2cmUgaW5jaGVja25pbmcgKHByZS1jb21taXQpLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MjcyCi1tc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCi1tc2dzdHIgIkFucm9wYXIga3Jva2VuIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAoY29tbWl0LW1zZykuLi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjI4NwotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgotbXNnc3RyICJJbmNoZWNrbmluZyBhdnZpc2FkIGF2IGtyb2tlbiBmw7ZyIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgKGNvbW1pdC1tc2cpLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzAwCi1tc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgotbXNnc3RyICJDaGVja2FyIGluIMOkbmRyaW5nYXIuLi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjMxNgotbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAid3JpdGUtdHJlZSBtaXNzbHlja2FkZXM6IgotCi0jOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgotbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgotbXNnc3RyICJJbmNoZWNrbmluZ2VuIG1pc3NseWNrYWRlcy4iCi0KLSM6IGxpYi9jb21taXQudGNsOjMzNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCi1tc2dzdHIgIkluY2hlY2tuaW5nZW4gJXMgdmVya2FyIHZhcmEgdHJhc2lnIgotCi0jOiBsaWIvY29tbWl0LnRjbDozMzkKLW1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCi1tc2dzdHIgIiIKLSJJbmdhIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbi5cbiIKLSJcbiIKLSJJbmdhIGZpbGVyIMOkbmRyYWRlcyBhdiBpbmNoZWNrbmluZ2VuIG9jaCBkZXQgdmFyIGludGUgZW4gc2FtbWFuc2xhZ25pbmcuXG4iCi0iXG4iCi0iRW4gc8O2a25pbmcga29tbWVyIGF0dCBzdGFydGFzIGF1dG9tYXRpc2t0IG51LlxuIgotCi0jOiBsaWIvY29tbWl0LnRjbDozNDYKLW1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCi1tc2dzdHIgIkluZ2Egw6RuZHJpbmdhciBhdHQgY2hlY2thIGluLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzYwCi1tc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAiY29tbWl0LXRyZWUgbWlzc2x5Y2thZGVzOiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzgxCi1tc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgotbXNnc3RyICJ1cGRhdGUtcmVmIG1pc3NseWNrYWRlczoiCi0KLSM6IGxpYi9jb21taXQudGNsOjQ2OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKLW1zZ3N0ciAiU2thcGFkZSBpbmNoZWNrbmluZ2VuICVzOiAlcyIKLQotIzogbGliL2NvbnNvbGUudGNsOjU5Ci1tc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAiQXJiZXRhci4uLiB2w6RudGEuLi4iCi0KLSM6IGxpYi9jb25zb2xlLnRjbDoxODYKLW1zZ2lkICJTdWNjZXNzIgotbXNnc3RyICJMeWNrYWRlcyIKLQotIzogbGliL2NvbnNvbGUudGNsOjIwMAotbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKLW1zZ3N0ciAiRmVsOiBLb21tYW5kbyBtaXNzbHlja2FkZXMiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDIKLW1zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAiQW50YWwgbMO2c2Egb2JqZWt0IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQzCi1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIkRpc2t1dHJ5bW1lIGFudsOkbnQgYXYgbMO2c2Egb2JqZWt0IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ0Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJBbnRhbCBwYWNrYWRlIG9iamVrdCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NQotbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKLW1zZ3N0ciAiQW50YWwgcGFrZXQiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIkRpc2t1dHJ5bW1lIGFudsOkbnQgYXYgcGFja2FkZSBvYmpla3QiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKLW1zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgotbXNnc3RyICJQYWNrYWRlIG9iamVrdCBzb20gdsOkbnRhciBww6Ugc3TDpGRuaW5nIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ4Ci1tc2dpZCAiR2FyYmFnZSBmaWxlcyIKLW1zZ3N0ciAiU2tyw6RwZmlsZXIiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKLW1zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgotbXNnc3RyICJLb21wcmltZXJhciBvYmpla3RkYXRhYmFzZW4iCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKLW1zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKLW1zZ3N0ciAiVmVyaWZpZXJhciBvYmpla3RkYXRhYmFzZW4gbWVkIGZzY2stb2JqZWN0cyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgotIlxuIgotIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgotInRoZSBkYXRhYmFzZS5cbiIKLSJcbiIKLSJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKLW1zZ3N0ciAiIgotIkFya2l2ZXQgaGFyIGbDtnIgbsOkcnZhcmFuZGUgb21rcmluZyAlaSBsw7ZzYSBvYmpla3QuXG4iCi0iXG4iCi0iRsO2ciBhdHQgYmliZWjDpWxsYSBvcHRpbWFsIHByZXN0YW5kYSByZWtvbW1lbmRlcmFzIGRldCDDpSBkZXQgYmVzdMOkbWRhc3RlIGF0dCAiCi0iZHUga29tcHJpbWVyYXIgZGF0YWJhc2VuLlxuIgotIlxuIgotIktvbXByaW1lcmEgZGF0YWJhc2VuIG51PyIKLQotIzogbGliL2RhdGUudGNsOjI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKLW1zZ3N0ciAiT2dpbHRpZ3QgZGF0dW0gZnLDpW4gR2l0OiAlcyIKLQotIzogbGliL2RpZmYudGNsOjY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgotIlxuIgotIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgotIlxuIgotIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKLSJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgotInRoZSBzYW1lIHN0YXRlLiIKLW1zZ3N0ciAiIgotIkhpdHRhZGUgaW5nYSBza2lsbG5hZGVyLlxuIgotIlxuIgotIiVzIGlubmVow6VsbGVyIGluZ2Egw6RuZHJpbmdhci5cbiIKLSJcbiIKLSJNb2RpZmllcmluZ3NkYXR1bSBmw7ZyIGZpbGVuIHVwcGRhdGVyYWRlcyBhdiBldHQgYW5uYXQgcHJvZ3JhbSwgbWVuICIKLSJpbm5laMOlbGxldCBpIGZpbGVuIGhhciBpbnRlIMOkbmRyYXRzLlxuIgotIlxuIgotIkVuIHPDtmtuaW5nIGtvbW1lciBhdXRvbWF0aXNrdCBhdHQgc3RhcnRhcyBmw7ZyIGF0dCBoaXR0YSBhbmRyYSBmaWxlciBzb20ga2FuICIKLSJ2YXJhIGkgc2FtbWEgdGlsbHN0w6VuZC4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxMDQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCi1tc2dzdHIgIkzDpHNlciBkaWZmZXJlbnMgZsO2ciAlcy4uLiIKLQotIzogbGliL2RpZmYudGNsOjEyNQotbXNnaWQgIiIKLSJMT0NBTDogZGVsZXRlZFxuIgotIlJFTU9URTpcbiIKLW1zZ3N0ciAiIgotIkxPS0FMOiBib3J0dGFnZW5cbiIKLSJGSsOEUlI6XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxMzAKLW1zZ2lkICIiCi0iUkVNT1RFOiBkZWxldGVkXG4iCi0iTE9DQUw6XG4iCi1tc2dzdHIgIiIKLSJGSsOEUlI6IGJvcnR0YWdlblxuIgotIkxPS0FMOlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MTM3Ci1tc2dpZCAiTE9DQUw6XG4iCi1tc2dzdHIgIkxPS0FMOlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MTQwCi1tc2dpZCAiUkVNT1RFOlxuIgotbXNnc3RyICJGSsOEUlI6XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMyMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgotbXNnc3RyICJLYW4gaW50ZSB2aXNhICVzIgotCi0jOiBsaWIvZGlmZi50Y2w6MjAzCi1tc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKLW1zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBhdiBmaWw6IgotCi0jOiBsaWIvZGlmZi50Y2w6MjEwCi1tc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgotbXNnc3RyICJHaXRhcmtpdiAodW5kZXJwcm9qZWt0KSIKLQotIzogbGliL2RpZmYudGNsOjIyMgotbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKLW1zZ3N0ciAiKiBCaW7DpHJmaWwgKHZpc2FyIGludGUgaW5uZWjDpWxsZXQpLiIKLQotIzogbGliL2RpZmYudGNsOjIyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgotIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgotbXNnc3RyICIiCi0iKiBEZW4gb3Nww6VyYWRlIGZpbGVuIMOkciAlZCBieXRlLlxuIgotIiogVmlzYXIgZW5kYXN0IGlubGVkYW5kZSAlZCBieXRlLlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MjMzCi0jLCB0Y2wtZm9ybWF0CisjOiBoZWxwLmM6MzcwCiBtc2dpZCAiIgogIlxuIgotIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgotIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKLW1zZ3N0ciAiIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgogIlxuIgotIiogRGVuIG9zcMOlcmFkZSBmaWxlbiBrbGlwcHRlcyBow6RyIGF2ICVzLlxuIgotIiogRsO2ciBhdHQgc2UgaGVsYSBmaWxlbiwgYW52w6RuZCBldHQgZXh0ZXJudCByZWRpZ2VyaW5nc3Byb2dyYW0uXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyJNZW5hZGUgZHUgZGV0dGE/IgorbXNnc3RyWzFdICIiCisiXG4iCisiTWVuYWRlIGR1IGV0dCBhdiBkZXNzYT8iCiAKLSM6IGxpYi9kaWZmLnRjbDo0ODUKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IGRlbiB2YWxkYSBkZWxlbiBmcsOlbiBrw7ZuLiIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAiKGZlbGFrdGlnIGluY2hlY2tuaW5nKVxuIgogCi0jOiBsaWIvZGlmZi50Y2w6NDkyCi1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIGRlbiB2YWxkYSBkZWxlbiB0aWxsIGvDtm4uIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZm9fY2FjaGUgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgImFkZGluZm9fY2FjaGUgbWlzc2x5Y2thZGVzIGbDtnIgc8O2a3bDpGdlbiBcIiVzXCIiCiAKLSM6IGxpYi9kaWZmLnRjbDo1NzEKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IGRlbiB2YWxkYSByYWRlbiBmcsOlbiBrw7ZuLiIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI2OAorbXNnaWQgImVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJmZWwgdmlkIGJ5Z2dhbmRlIGF2IHRyw6RkIgogCi0jOiBsaWIvZGlmZi50Y2w6NTc5Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIGRlbiB2YWxkYSByYWRlbiB0aWxsIGvDtm4uIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBzw7ZrdsOkZ2VuIFwiJXNcIiVzIgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0MwotbXNnaWQgIkRlZmF1bHQiCi1tc2dzdHIgIlN0YW5kYXJkIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgIlRhciBib3J0ICVzIGbDtnIgYXR0IGfDtnJhIHBsYXRzIGbDtnIgdW5kZXJrYXRhbG9nXG4iCiAKLSM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3lzdGVtICglcykiCi1tc2dzdHIgIlN5c3RlbWV0cyAoJXMpIgorIy4gc29tZXRoaW5nIGVsc2UgZXhpc3RzCisjLiAuLiBidXQgbm90IHNvbWUgb3RoZXIgZXJyb3IgKHdobyByZWFsbHkgY2FyZXMgd2hhdD8pCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo2OTcgbWVyZ2UtcmVjdXJzaXZlLmM6NzE4Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiBrYW5za2UgZW4gSy9GLWtvbmZsaWt0PyIKIAotIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKLW1zZ2lkICJPdGhlciIKLW1zZ3N0ciAiQW5uYW4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJ2w6RncmFyIGbDtnJsb3JhIG9zcMOlcmFkIGZpbCB2aWQgXCIlc1wiIgogCi0jOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE2Ci1tc2dpZCAiZXJyb3IiCi1tc2dzdHIgImZlbCIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2Egb2JqZWt0ZXQgJXM6IFwiJXNcIiIKIAotIzogbGliL2Vycm9yLnRjbDozNgotbXNnaWQgIndhcm5pbmciCi1tc2dzdHIgInZhcm5pbmciCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiYmxvYiBmw7ZydsOkbnRhZGVzIGbDtnIgJXMgXCIlc1wiIgogCi0jOiBsaWIvZXJyb3IudGNsOjk2Ci1tc2dpZCAiWW91IG11c3QgY29ycmVjdCB0aGUgYWJvdmUgZXJyb3JzIGJlZm9yZSBjb21taXR0aW5nLiIKLW1zZ3N0ciAiRHUgbcOlc3RlIHLDpHR0YSB0aWxsIGZlbGVuIG92YW4gaW5uYW4gZHUgY2hlY2thciBpbi4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NzMgYnVpbHRpbi9jbG9uZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIFwiJXNcIiIKIAotIzogbGliL2luZGV4LnRjbDo2Ci1tc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgotbXNnc3RyICJLdW5kZSBpbnRlIGzDpXNhIHVwcCBpbmRleGV0LiIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgc2thcGEgc3ltYm9saXNrYSBsw6Rua2VuIFwiJXNcIiIKIAotIzogbGliL2luZGV4LnRjbDoxNwotbXNnaWQgIkluZGV4IEVycm9yIgotbXNnc3RyICJJbmRleGZlbCIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICJ2ZXQgaW50ZSBodXIgJTA2byAlcyBcIiVzXCIgc2thbGwgaGFudGVyYXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6MTkKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkyMgorbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICJNaXNzbHlja2FkZXMgZXhla3ZlcmEgaW50ZXJuIHNhbW1hbnNsYWduaW5nIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCAlcyB0aWxsIGRhdGFiYXNlbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTQyCittc2dpZCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgaW4gdGhlIHRyZWUiCittc2dzdHIgIm9iamVrdHR5cCBzb20gZWogc3TDtmRzIHVwcHTDpGNrdGVzIGkgdHLDpGRldCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAyMSBtZXJnZS1yZWN1cnNpdmUuYzoxMDM1CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvICIKLSJyZXN5bmNocm9uaXplIGdpdC1ndWkuIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKIG1zZ3N0ciAiIgotIk1pc3NseWNrYWRlcyBtZWQgYXR0IHVwcGRhdGVyYSBHaXRpbmRleGV0LiBFbiBvbXPDtmtuaW5nIGtvbW1lciBhdHQgc3RhcnRhcyAiCi0iYXV0b21hdGlza3QgZsO2ciBhdHQgc3lua3JvbmlzZXJhIG9tIGdpdC1ndWkuIgorIktPTkZMSUtUICglcy9yYWRlcmEpOiAlcyByYWRlcmFkIGkgJXMgb2NoICVzIGkgJXMuIFZlcnNpb25lbiAlcyBhdiAlcyBsw6RtbmFkICIKKyJpIHRyw6RkZXQuIgogCi0jOiBsaWIvaW5kZXgudGNsOjMwCi1tc2dpZCAiQ29udGludWUiCi1tc2dzdHIgIkZvcnRzw6R0dCIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMjcgbWVyZ2UtcmVjdXJzaXZlLmM6MTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKCVzL3JhZGVyYSk6ICVzIHJhZGVyYWQgaSAlcyBvY2ggJXMgaSAlcy4gVmVyc2lvbmVuICVzIGF2ICVzIGzDpG1uYWQgIgorImkgdHLDpGRldCB2aWQgJXMuIgogCi0jOiBsaWIvaW5kZXgudGNsOjMzCi1tc2dpZCAiVW5sb2NrIEluZGV4IgotbXNnc3RyICJMw6VzIHVwcCBpbmRleCIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwODEKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgIm5hbW5ieXRlIgogCi0jOiBsaWIvaW5kZXgudGNsOjI5MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAiVGFyIGJvcnQgJXMgZsO2ciBpbmNoZWNrbmluZ3Nrw7ZuIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA4MQorbXNnaWQgInJlbmFtZWQiCittc2dzdHIgIm5hbW5ieXR0IgogCi0jOiBsaWIvaW5kZXgudGNsOjMzMQotbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCi1tc2dzdHIgIlJlZG8gYXR0IGNoZWNrYSBpbi4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyDDpHIgZW4ga2F0YWxvZyBpICVzIGzDpGdnZXIgdGlsbCBzb20gJXMgaXN0w6RsbGV0IgogCi0jOiBsaWIvaW5kZXgudGNsOjM0NAotIywgdGNsLWZvcm1hdAorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKG5hbW5ieXRlL25hbW5ieXRlKTogTmFtbmJ5dGUgXCIlc1wiLT5cIiVzXCIgcMOlIGdyZW5lbiBcIiVzXCIgIgorIm5hbW5ieXRlIFwiJXNcIi0+XCIlc1wiIGkgXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNjQKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAobMOkbW5hZCBvbMO2c3QpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIktPTkZMSUtUIChuYW1uYnl0ZS9uYW1uYnl0ZSk6IE5hbW5ieXRlICVzLT4lcyBpICVzLiBOYW1uYnl0ZSAlcy0+JXMgaSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIKK21zZ3N0ciAiQnl0ZXIgbmFtbiBww6UgJXMgdGlsbCAlcyBvY2ggJXMgdGlsbCAlcyBpc3TDpGxsZXQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAlcyBhZGRlZCBpbiAlcyIKK21zZ3N0ciAiS09ORkxJS1QgKG5hbW5ieXRlL3RpbGzDpGdnKTogTmFtbmJ5dGUgJXMtPiVzIGkgJXMuICVzIHRpbGxhZ2QgaSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgc2FtbWFuc2xhZ2VuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDYyIG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIkzDpGdnZXIgdGlsbCBzb20gJXMgaXN0w6RsbGVyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2Egb2JqZWt0ZXQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIm9iamVrdGV0ICVzIMOkciBpbnRlIGVuIGJsb2IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NjQKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIsOkbmRyYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU2NAorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICLDpG5kcmFkIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTc0Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiaW5uZWjDpWxsIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTgxCittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAidGlsbMOkZ2cvdGlsbMOkZ2ciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICJIb3BwYWRlIMO2dmVyICVzIChzYW1tYW5zbGFnZW4gc2FtbWEgc29tIGJlZmludGxpZykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICJTbMOlciBpaG9wICVzIGF1dG9tYXRpc2t0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjMzIGdpdC1zdWJtb2R1bGUuc2g6ODY5Cittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJ1bmRlcm1vZHVsIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJLT05GTElLVCAoJXMpOiBTYW1tYW5zbGFnbmluZ3Nrb25mbGlrdCBpICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICJUYXIgYm9ydCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc0OQorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJmaWwva2F0YWxvZyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc1NQorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICJrYXRhbG9nL2ZpbCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcyk6IERldCBmaW5ucyBlbiBrYXRhbG9nIG1lZCBuYW1uZXQgJXMgaSAlcy4gTMOkZ2dlciB0aWxsICVzIHNvbSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc3MAorIywgYy1mb3JtYXQKIG1zZ2lkICJBZGRpbmcgJXMiCiBtc2dzdHIgIkzDpGdnZXIgdGlsbCAlcyIKIAotIzogbGliL2luZGV4LnRjbDo0MDEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGwgw6RuZHJpbmdhcm5hIGkgZmlsZW4gJXM/IgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc4NworbXNnaWQgIkZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIgorbXNnc3RyICLDlmRlc2RpZ2VydCBzYW1tYW5zbGFnbmluZ3NmZWwsIGJvcmRlIGludGUgaW50csOkZmZhLiIKIAotIzogbGliL2luZGV4LnRjbDo0MDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCi1tc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXJuYSBpIGRlc3NhICVpIGZpbGVyPyIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MDYKK21zZ2lkICJBbHJlYWR5IHVwLXRvLWRhdGUhIgorbXNnc3RyICJSZWRhbiDDoCBqb3VyISIKIAotIzogbGliL2luZGV4LnRjbDo0MTEKLW1zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCi1tc2dzdHIgIiIKLSJBbGxhIG9rw7ZhZGUgw6RuZHJpbmdhciBrb21tZXIgcGVybWFuZW50IGfDpSBmw7ZybG9yYWRlIHZpZCDDpXRlcnN0w6RsbG5pbmdlbi4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAic2FtbWFuc2xhZ25pbmcgYXYgdHLDpGRlbiAlcyBvY2ggJXMgbWlzc2x5Y2thZGVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjQxNAotbXNnaWQgIkRvIE5vdGhpbmciCi1tc2dzdHIgIkfDtnIgaW5nZW50aW5nIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnByb2Nlc3NlZCBwYXRoPz8/ICVzIgorbXNnc3RyICJPYmVoYW5kbGFkIHPDtmt2w6RnPz8/ICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjQzMgotbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGxlciB2YWxkYSBmaWxlciIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4OTAKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiU2zDpXIgaWhvcDoiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDM2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nICVzIgotbXNnc3RyICLDhXRlcnN0w6RsbGVyICVzIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkwMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAiaGl0dGFkZSAldSBnZW1lbnNhbSBmw7ZyZmFkZXI6IgorbXNnc3RyWzFdICJoaXR0YWRlICV1IGdlbWVuc2FtbWEgZsO2cmbDpGRlcjoiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTMKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5NDAKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgInNhbW1hbnNsYWduaW5nZW4gcmV0dXJuZXJhZGUgaW5nZW4gaW5jaGVja25pbmciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHRvbGthIG9iamVrdGV0IFwiJXNcIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjAwOSBidWlsdGluL21lcmdlLmM6Njk2Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgaW5kZXhldC4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo0OTQKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgImFudsOkbmRuaW5nOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uCisjOiBwYXJzZS1vcHRpb25zLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICAgICBlbGxlcjogJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHJlbW90ZS5jOjE2MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAiRGluIGdyZW4gbGlnZ2VyIGbDtnJlIFwiJXNcIiBtZWQgJWQgaW5jaGVja25pbmcuXG4iCittc2dzdHJbMV0gIkRpbiBncmVuIGxpZ2dlciBmw7ZyZSBcIiVzXCIgbWVkICVkIGluY2hlY2tuaW5nYXIuXG4iCisKKyM6IHJlbW90ZS5jOjE2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAiIgorIkRpbiBncmVuIGxpZ2dlciBlZnRlciBcIiVzXCIgbWVkICVkIGluY2hlY2tuaW5nLCBvY2gga2FuIHNuYWJic3BvbGFzLlxuIgorbXNnc3RyWzFdICIiCisiRGluIGdyZW4gbGlnZ2VyIGVmdGVyIFwiJXNcIiBtZWQgJWQgaW5jaGVja25pbmdhciwgb2NoIGthbiBzbmFiYnNwb2xhcy5cbiIKKworIzogcmVtb3RlLmM6MTY0NgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCi1tc2dzdHIgIiIKLSJLYW4gaW50ZSBzbMOlIGlob3AgdmlkIHV0w7ZrbmluZy5cbiIKLSJcbiIKLSJEdSBtw6VzdGUgZ8O2cmEgZsOkcmRpZyB1dMO2a25pbmdlbiBhdiBpbmNoZWNrbmluZ2VuIGlubmFuIGR1IHDDpWLDtnJqYXIgbsOlZ29uICIKLSJzbGFncyBzYW1tYW5zbGFnbmluZy5cbiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorIkRpbiBncmVuIG9jaCBcIiVzXCIgaGFyIGRpdmVyZ2VyYXQsXG4iCisib2NoIGhhciAlZCByZXNwZWt0aXZlICVkIG9saWthIGluY2hlY2tuaW5nLlxuIgorbXNnc3RyWzFdICIiCisiRGluIGdyZW4gb2NoIFwiJXNcIiBoYXIgZGl2ZXJnZXJhdCxcbiIKKyJvY2ggaGFyICVkIHJlc3Bla3RpdmUgJWQgb2xpa2EgaW5jaGVja25pbmdhci5cbiIKIAotIzogbGliL21lcmdlLnRjbDoyNworIzogc2VxdWVuY2VyLmM6MTIzIGJ1aWx0aW4vbWVyZ2UuYzo4NjQgYnVpbHRpbi9tZXJnZS5jOjk3NworIzogYnVpbHRpbi9tZXJnZS5jOjEwODcgYnVpbHRpbi9tZXJnZS5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiS3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIGbDtnIgc2tyaXZuaW5nIgorCisjOiBzZXF1ZW5jZXIuYzoxMjUgYnVpbHRpbi9tZXJnZS5jOjMzMyBidWlsdGluL21lcmdlLmM6ODY3CisjOiBidWlsdGluL21lcmdlLmM6MTA4OSBidWlsdGluL21lcmdlLmM6MTEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgdGlsbCBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjE0NgogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCiBtc2dzdHIgIiIKLSJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKLSJcbiIKLSJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKLSJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGR1IGthbiB1dGbDtnJhIGVuIHNhbW1hbnNsYWduaW5nLlxuIgotIlxuIgotIlPDtmtuaW5nZW4ga29tbWVyIGF0dCBzdGFydGFzIGF1dG9tYXRpc2t0IG51LlxuIgorImVmdGVyIGF0dCBoYSBsw7ZzdCBrb25mbGlrdGVybmEsIG1hcmtlcmEgZGUgcsOkdHRhZGUgc8O2a3bDpGdhcm5hXG4iCisibWVkIFwiZ2l0IGFkZCA8c8O2a3bDpGdhcj5cIiBlbGxlciBcImdpdCBybSA8c8O2a3bDpGdhcj5cIiIKIAotIzogbGliL21lcmdlLnRjbDo0NQotIywgdGNsLWZvcm1hdAorIzogc2VxdWVuY2VyLmM6MTQ5CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgotIlxuIgotIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgotIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgogbXNnc3RyICIiCi0iRHUgw6RyIG1pdHQgaSBlbiBzYW1tYW5zbGFnbmluZyBtZWQga29uZmxpa3Rlci5cbiIKLSJcbiIKLSJGaWxlbiAlcyBoYXIgc2FtbWFuc2xhZ25pbmdza29uZmxpa3Rlci5cbiIKLSJcbiIKLSJEdSBtw6VzdGUgbMO2c2EgZGVtLCBrw7ZhIGZpbGVuIG9jaCBjaGVja2EgaW4gZsO2ciBhdHQgZnVsbGJvcmRhIGRlbiBha3R1ZWxsYSAiCi0ic2FtbWFuc2xhZ25pbmdlbi4gTsOkciBkdSBnam9ydCBkZXQga2FuIGR1IHDDpWLDtnJqYSBlbiBueSBzYW1tYW5zbGFnbmluZy5cbiIKKyJlZnRlciBhdHQgaGEgbMO2c3Qga29uZmxpa3Rlcm5hLCBtYXJrZXJhIGRlIHLDpHR0YWRlIHPDtmt2w6RnYXJuYVxuIgorIm1lZCBcImdpdCBhZGQgPHPDtmt2w6RnYXI+XCIgZWxsZXIgXCJnaXQgcm0gPHPDtmt2w6RnYXI+XCJcbiIKKyJvY2ggY2hlY2thIGluIHJlc3VsdGF0ZXQgbWVkIFwiZ2l0IGNvbW1pdFwiIgogCi0jOiBsaWIvbWVyZ2UudGNsOjU1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKLSJcbiIKLSJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgotIlxuIgotIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgotIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKKyM6IHNlcXVlbmNlci5jOjE2MiBzZXF1ZW5jZXIuYzo3NzAgc2VxdWVuY2VyLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgdGlsbCAlcyIKKworIzogc2VxdWVuY2VyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzIgorbXNnc3RyICJGZWwgdmlkIG9tYnJ5dG5pbmcgYXYgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE4MAorbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVycnktcGljay4iCittc2dzdHIgIkRpbmEgbG9rYWxhIMOkbmRyaW5nYXIgc2t1bGxlIHNrcml2YXMgw7Z2ZXIgYXYgXCJjaGVycnktcGlja1wiLiIKKworIzogc2VxdWVuY2VyLmM6MTgyCittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHJldmVydC4iCittc2dzdHIgIkRpbmEgbG9rYWxhIMOkbmRyaW5nYXIgc2t1bGxlIHNrcml2YXMgw7Z2ZXIgYXYgXCJyZXZlcnRcIi4iCisKKyM6IHNlcXVlbmNlci5jOjE4NQorbXNnaWQgIkNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiQ2hlY2thIGluIGRpbmEgw6RuZHJpbmdhciBlbGxlciBhbnbDpG5kIFwic3Rhc2hcIiBmw7ZyIGF0dCBmb3J0c8OkdHRhLiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIgb3IgImNoZXJyeS1waWNrIgorIzogc2VxdWVuY2VyLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiBLdW5kZSBpbnRlIHNrcml2YSBueSBpbmRleGZpbCIKKworIzogc2VxdWVuY2VyLmM6MjY2Cittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXRcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBiZXN0w6RtbWEgSEVBRDpzIGluY2hlY2tuaW5nXG4iCisKKyM6IHNlcXVlbmNlci5jOjI4NworbXNnaWQgIlVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIgorbXNnc3RyICJLYW4gaW50ZSB1cHBkYXRlcmEgY2FjaGV0csOkZFxuIgorCisjOiBzZXF1ZW5jZXIuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGNvbW1pdCAlc1xuIgorbXNnc3RyICJLdW5kZSBpbnRlIHRvbGthIGluY2hlY2tuaW5nZW4gJXNcbiIKKworIzogc2VxdWVuY2VyLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iCittc2dzdHIgIkt1bmRlIGludGUgdG9sa2EgZsO2csOkbGRyYWluY2hlY2tuaW5nZW4gJXNcbiIKKworIzogc2VxdWVuY2VyLmM6NDAzCittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiRGluIGluZGV4ZmlsIGhhciBpbnRlIHNsYWdpdHMgaWhvcC4iCisKKyM6IHNlcXVlbmNlci5jOjQwNgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQiCittc2dzdHIgIkR1IGhhciBpbmdlbiBnaWx0aWcgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAiSW5jaGVja25pbmcgJXMgw6RyIGVuIHNhbW1hbnNsYWduaW5nLCBtZW4gZmxhZ2dhbiAtbSBhbmdhdnMgaW50ZS4iCisKKyM6IHNlcXVlbmNlci5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIkluY2hlY2tuaW5nICVzIGhhciBpbnRlIGbDtnLDpGxkZXIgJWQiCisKKyM6IHNlcXVlbmNlci5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJNYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorbXNnc3RyICJIdXZ1ZGxpbmplIGFuZ2F2cywgbWVuIGluY2hlY2tuaW5nZW4gJXMgw6RyIGludGUgZW4gc2FtbWFuc2xhZ25pbmciCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSAicmV2ZXJ0IiBvcgorIy4gImNoZXJyeS1waWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEKKyM6IHNlcXVlbmNlci5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzOiBrYW4gaW50ZSB0b2xrYSBmw7Zyw6RsZHJhaW5jaGVja25pbmdlbiAlcyIKKworIzogc2VxdWVuY2VyLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBmw7ZyICVzIgorCisjOiBzZXF1ZW5jZXIuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDpW5ncmEgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgImt1bmRlIGludGUgdGlsbMOkbXBhICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzo1NjUKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAiZGVuIGFuZ2l2bmEgdXBwc8OkdHRuaW5nZW4gaW5jaGVja25pbmdhciDDpHIgdG9tIgorCisjOiBzZXF1ZW5jZXIuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogbWlzc2x5Y2thZGVzIGzDpHNhIGluZGV4ZXQiCisKKyM6IHNlcXVlbmNlci5jOjU3OAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBtaXNzbHlja2FkZXMgdXBwZGF0ZXJhIGluZGV4ZXQiCisKKyM6IHNlcXVlbmNlci5jOjYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJXMgZHVyaW5nIGEgJXMiCittc2dzdHIgImthbiBpbnRlICVzIHVuZGVyIGVuICVzIgorCisjOiBzZXF1ZW5jZXIuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorbXNnc3RyICJLYW4gaW50ZSB0b2xrYSByYWQgJWQuIgorCisjOiBzZXF1ZW5jZXIuYzo2NjMKK21zZ2lkICJObyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIkluZ2EgaW5jaGVja25pbmdhciBsw6RzdGVzLiIKKworIzogc2VxdWVuY2VyLmM6Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSAlcyIKKworIzogc2VxdWVuY2VyLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJVbnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJXMiCittc2dzdHIgIk9hbnbDpG5kYmFydCBtYW51czogJXMiCisKKyM6IHNlcXVlbmNlci5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGtleTogJXMiCittc2dzdHIgIkZlbGFrdGlnIG55Y2tlbDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIkZlbGFrdGlndCB2w6RyZGUgZsO2ciAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJXMiCittc2dzdHIgIlRyYXNpZ3QgbWFudXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3NTEKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJlbiBcImNoZXJyeS1waWNrXCIgZWxsZXIgXCJyZXZlcnRcIiBww6Vnw6VyIHJlZGFuIgorCisjOiBzZXF1ZW5jZXIuYzo3NTIKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIgorbXNnc3RyICJ0ZXN0YSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEgXCJzZXF1ZW5jZXJcIi1rYXRhbG9nZW4gXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzo3NzIgc2VxdWVuY2VyLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzLiIKK21zZ3N0ciAiRmVsIHZpZCBvbWJyeXRuaW5nIGF2ICVzLiIKKworIzogc2VxdWVuY2VyLmM6NzkxIHNlcXVlbmNlci5jOjkyNQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiaW5nZW4gXCJjaGVycnktcGlja1wiIGVsbGVyIFwicmV2ZXJ0XCIgcMOlZ8OlciIKKworIzogc2VxdWVuY2VyLmM6NzkzCittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAia2FuIGludGUgYmVzdMOkbW1hIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjc5NQorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJrYW4gaW50ZSBhdmJyeXRhIGZyw6VuIGVuIGdyZW4gc29tIMOkbm51IGludGUgw6RyIGbDtmRkIgorCisjOiBzZXF1ZW5jZXIuYzo4MTcgYnVpbHRpbi9hcHBseS5jOjQwMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjgyMQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgIm92w6RudGF0IGZpbHNsdXQiCisKKyM6IHNlcXVlbmNlci5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgInNwYXJhZCBIRUFELWZpbCBmcsOlbiBmw7ZyZSBcImNoZXJyeS1waWNrXCIsIFwiJXNcIiwgw6RyIHRyYXNpZyIKKworIzogc2VxdWVuY2VyLmM6ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorbXNnc3RyICJLdW5kZSBpbnRlIGZvcm1hdGVyYSAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjEwMTIKK21zZ2lkICJDYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIkthbiBpbnRlIMOlbmdyYSBzb20gZsO2cnN0YSBpbmNoZWNrbmluZyIKKworIzogc2VxdWVuY2VyLmM6MTAxMworbXNnaWQgIkNhbid0IGNoZXJyeS1waWNrIGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiS2FuIGludGUgZ8O2cmEgXCJjaGVycnktcGlja1wiIGkgZXR0IHRvbXQgaHV2dWQiCisKKyM6IHNoYTFfbmFtZS5jOjEwNDQKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIHBla2FyIGludGUgcMOlIGVuIGdyZW4iCisKKyM6IHNoYTFfbmFtZS5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIk9rw6RuZCBncmVuOiBcIiVzXCIiCisKKyM6IHNoYTFfbmFtZS5jOjEwNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgIkluZ2VuIHN0YW5kYXJkdXBwc3Ryw7ZtIGFuZ2l2ZW4gZsO2ciBncmVuZW4gXCIlc1wiIgorCisjOiBzaGExX25hbWUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJVcHBzdHLDtm1zZ3JlbmVuIFwiJXNcIiDDpHIgaW50ZSBsYWdyYWQgc29tIGVuIGZqw6RycnNww6VyYW5kZSBncmVuIgorCisjOiB3cmFwcGVyLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgImthbiBpbnRlIGtvbW1hIMOldCBcIiVzXCI6ICVzIgorCisjOiB3cmFwcGVyLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwIGN1cnJlbnQgdXNlciBpbiB0aGUgcGFzc3dkIGZpbGU6ICVzIgorbXNnc3RyICJrYW4gaW50ZSBzbMOlIHVwcCBha3R1ZWxsIGFudsOkbmRhcmUgaSBwYXNzd2QtZmlsZW46ICVzIgorCisjOiB3cmFwcGVyLmM6NDI3Cittc2dpZCAibm8gc3VjaCB1c2VyIgorbXNnc3RyICJva8OkbmQgYW52w6RuZGFyZSIKKworIzogd3Qtc3RhdHVzLmM6MTQwCittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICJFaiBzYW1tYW5zbGFnbmEgc8O2a3bDpGdhcjoiCisKKyM6IHd0LXN0YXR1cy5jOjE2NyB3dC1zdGF0dXMuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc2V0ICVzIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJlc2V0ICVzIDxmaWw+Li4uXCIgZsO2ciBhdHQgdGEgYm9ydCBmcsOlbiBrw7YpIgorCisjOiB3dC1zdGF0dXMuYzoxNjkgd3Qtc3RhdHVzLmM6MTk2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWw+Li4uXCIgZsO2ciBhdHQgdGEgYm9ydCBmcsOlbiBrw7YpIgorCisjOiB3dC1zdGF0dXMuYzoxNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYWRkIDxmaWw+Li4uXCIgZsO2ciBhdHQgYW5nZSBsw7ZzbmluZykiCisKKyM6IHd0LXN0YXR1cy5jOjE3NSB3dC1zdGF0dXMuYzoxNzkKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYWRkL3JtIDxmaWw+Li4uXCIgc29tIGzDpG1wbGlndCBmw7ZyIGF0dCBhbmdlIGzDtnNuaW5nKSIKKworIzogd3Qtc3RhdHVzLmM6MTc3Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcm0gPGZpbD4uLi5cIiBmw7ZyIGF0dCBhbmdlIGzDtnNuaW5nKSIKKworIzogd3Qtc3RhdHVzLmM6MTg4Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICLDhG5kcmluZ2FyIGF0dCBjaGVja2EgaW46IgorCisjOiB3dC1zdGF0dXMuYzoyMDYKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIsOEbmRyaW5nYXIgZWogaSBpbmNoZWNrbmluZ3Nrw7ZuOiIKKworIzogd3Qtc3RhdHVzLmM6MjEwCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCiBtc2dzdHIgIiIKLSJEdSDDpHIgbWl0dCBpIGVuIMOkbmRyaW5nLlxuIgotIlxuIgotIkZpbGVuICVzIGhhciDDpG5kcmluZ2FyLlxuIgotIlxuIgotIkR1IGLDtnIgZnVsbGJvcmRhIGRlbiBha3R1ZWxsYSBpbmNoZWNrbmluZ2VuIGlubmFuIGR1IHDDpWLDtnJqYXIgZW4gIgotInNhbW1hbnNsYWduaW5nLiBPbSBkdSBnw7ZyIGRldCBibGlyIGRldCBlbmtsYXJlIGF0dCBhdmJyeXRhIGVuIG1pc3NseWNrYWQgIgotInNhbW1hbnNsYWduaW5nLCBvbSBkZXQgc2t1bGxlIHZhcmEgbsO2ZHbDpG5kaWd0LlxuIgorIiAgKGFudsOkbmQgXCJnaXQgYWRkIDxmaWw+Li4uXCIgZsO2ciBhdHQgdXBwZGF0ZXJhIHZhZCBzb20gc2thbGwgY2hlY2thcyBpbikiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgb2YgJXMiCi1tc2dzdHIgIiVzIGF2ICVzIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEyMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgotbXNnc3RyICJTbMOlciBpaG9wICVzIG9jaCAlcy4uLiIKLQotIzogbGliL21lcmdlLnRjbDoxMzEKLW1zZ2lkICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIKLW1zZ3N0ciAiU2FtbWFuc2xhZ25pbmdlbiBhdnNsdXRhZGVzIGZyYW1nw6VuZ3NyaWt0LiIKLQotIzogbGliL21lcmdlLnRjbDoxMzMKLW1zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKLW1zZ3N0ciAiU2FtbWFuc2xhZ25pbmdlbiBtaXNzbHlja2FkZXMuIER1IG3DpXN0ZSBsw7ZzYSBrb25mbGlrdGVybmEuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjE1OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdlIEludG8gJXMiCi1tc2dzdHIgIlNsw6UgaWhvcCBpICVzIgotCi0jOiBsaWIvbWVyZ2UudGNsOjE3NwotbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgotbXNnc3RyICJSZXZpc2lvbmVyIGF0dCBzbMOlIGlob3AiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjEyCi1tc2dpZCAiIgotIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCisjOiB3dC1zdGF0dXMuYzoyMTIKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKIG1zZ3N0ciAiIgotIkthbiBpbnRlIGF2YnJ5dGEgdmlkIHV0w7ZrbmluZy5cbiIKLSJcbiIKLSJEdSBtw6VzdGUgZ8O2cmEgZGlnIGbDpHJkaWcgbWVkIGF0dCB1dMO2a2EgaW5jaGVja25pbmdlbi5cbiIKKyIgIChhbnbDpG5kIFwiZ2l0IGFkZC9ybSA8ZmlsPi4uLlwiIGbDtnIgYXR0IHVwcGRhdGVyYSB2YWQgc29tIHNrYWxsIGNoZWNrYXMgaW4pIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIyMgorIzogd3Qtc3RhdHVzLmM6MjEzCiBtc2dpZCAiIgotIkFib3J0IG1lcmdlP1xuIgotIlxuIgotIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorIiAgKHVzZSBcImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgogbXNnc3RyICIiCi0iQXZicnl0IHNhbW1hbnNsYWduaW5nP1xuIgotIlxuIgotIk9tIGR1IGF2YnJ5dGVyIHNhbW1hbnNsYWduaW5nZW4ga29tbWVyICpBTExBKiBlaiBpbmNoZWNrYWRlIMOkbmRyaW5nYXIgYXR0IGfDpSAiCi0iZsO2cmxvcmFkZS5cbiIKLSJcbiIKLSJHw6UgdmlkYXJlIG1lZCBhdHQgYXZicnl0YSBkZW4gYWt0dWVsbGEgc2FtbWFuc2xhZ25pbmdlbj8iCisiICAoYW52w6RuZCBcImdpdCBjaGVja291dCAtLSA8ZmlsPi4uLlwiIGbDtnIgYXR0IGbDtnJrYXN0YSDDpG5kcmluZ2FyIGkgIgorImFyYmV0c2thdGFsb2dlbikiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjI4Ci1tc2dpZCAiIgotIlJlc2V0IGNoYW5nZXM/XG4iCi0iXG4iCi0iUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorIzogd3Qtc3RhdHVzLmM6MjE1Cittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgogbXNnc3RyICIiCi0iw4V0ZXJzdMOkbGwgw6RuZHJpbmdhcj9cbiIKLSJcbiIKLSJPbSBkdSDDpXRlcnN0w6RsbGVyIMOkbmRyaW5nYXJuYSBrb21tZXIgKkFMTEEqIGVqIGluY2hlY2thZGUgw6RuZHJpbmdhciBhdHQgZ8OlICIKLSJmw7ZybG9yYWRlLlxuIgotIlxuIgotIkfDpSB2aWRhcmUgbWVkIGF0dCDDpXRlcnN0w6RsbGEgZGUgYWt0dWVsbGEgw6RuZHJpbmdhcm5hPyIKKyIgIChjaGVja2EgaW4gZWxsZXIgZsO2cmthc3RhIG9zcMOlcmF0IGVsbGVyIMOkbmRyYXQgaW5uZWjDpWxsIGkgdW5kZXJtb2R1bGVyKSIKIAotIzogbGliL21lcmdlLnRjbDoyMzkKLW1zZ2lkICJBYm9ydGluZyIKLW1zZ3N0ciAiQXZicnl0ZXIiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjM5Ci1tc2dpZCAiZmlsZXMgcmVzZXQiCi1tc2dzdHIgImZpbGVyIMOldGVyc3TDpGxsZGEiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjY3Ci1tc2dpZCAiQWJvcnQgZmFpbGVkLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIGF2YnJ5dGEuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjI2OQotbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKLW1zZ3N0ciAiQXZicnl0bmluZyBmdWxsYm9yZGFkLiBSZWRvLiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6OAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCi1tc2dzdHIgIlR2aW5nYSBsw7ZzbmluZyBhdHQgYW52w6RuZGEgYmFzdmVyc2lvbmVuPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6OQotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgotbXNnc3RyICJUdmluZ2EgbMO2c25pbmcgYXR0IGFudsOkbmRhIGRlbiBha3R1ZWxsYSBncmVuZW4/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCi1tc2dzdHIgIlR2aW5nYSBsw7ZzbmluZyBhdHQgYW52w6RuZGEgZGVuIGFuZHJhIGdyZW5lbj8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIk5vdGUgdGhhdCB0aGUgZGlmZiBzaG93cyBvbmx5IGNvbmZsaWN0aW5nIGNoYW5nZXMuXG4iCi0iXG4iCi0iJXMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiIKLSJcbiIKLSJUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdW5kb25lIG9ubHkgYnkgcmVzdGFydGluZyB0aGUgbWVyZ2UuIgorIzogd3Qtc3RhdHVzLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgogbXNnc3RyICIiCi0iT2JzZXJ2ZXJhIGF0dCBkaWZmZW4gZW5kYXN0IHZpc2FyIGRlIMOkbmRyaW5nYXIgc29tIHN0w6VyIGkga29uZmxpa3QuXG4iCi0iXG4iCi0iJXMga29tbWVyIGF0dCBza3JpdmFzIMO2dmVyLlxuIgotIlxuIgotIkR1IG3DpXN0ZSBzdGFydGEgb20gc2FtbWFuc2xhZ25pbmdlbiBmw7ZyIGF0dCBnw7ZyYSBkZW4gaMOkciBvcGVyYXRpb25lbiBvZ2pvcmQuIgorIiAgKGFudsOkbmQgXCJnaXQgJXMgPGZpbD4uLi5cIiBmw7ZyIGF0dCB0YSBtZWQgaSBkZXQgc29tIHNrYWxsIGNoZWNrYXMgaW4pIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgotbXNnc3RyICJGaWxlbiAlcyB2ZXJrYXIgaW5uZWjDpWxsYSBvbMO2c3RhIGtvbmZsaWt0ZXIuIFZpbGwgZHUga8O2YSDDpG5kw6U/IgorIzogd3Qtc3RhdHVzLmM6MjQ0Cittc2dpZCAiYnVnIgorbXNnc3RyICJwcm9ncmFtZmVsIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKLW1zZ3N0ciAiTMOkZ2dlciB0aWxsIGzDtnNuaW5nIGbDtnIgJXMiCisjOiB3dC1zdGF0dXMuYzoyNDkKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICJib3J0dGFnZXQgYXYgYsOkZ2dlOiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTQxCi1tc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgotbXNnc3RyICJLYW4gaW50ZSBsw7ZzYSBib3J0dGFnbmluZ3MtIGVsbGVyIGzDpG5ra29uZmxpa3RlciBtZWQgZXR0IHZlcmt0eWciCisjOiB3dC1zdGF0dXMuYzoyNTAKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgInRpbGxhZ3QgYXYgb3NzOiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Ci1tc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKLW1zZ3N0ciAiS29uZmxpa3RmaWwgZXhpc3RlcmFyIGludGUiCisjOiB3dC1zdGF0dXMuYzoyNTEKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICJib3J0dGFnZXQgYXYgZGVtOiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MjY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90IGEgR1VJIG1lcmdlIHRvb2w6ICclcyciCi1tc2dzdHIgIkludGUgZXR0IGdyYWZpc2t0IHZlcmt0eWcgZsO2ciBzYW1tYW5zbGFnbmluZzogJXMiCisjOiB3dC1zdGF0dXMuYzoyNTIKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAidGlsbGFndCBhdiBkZW06IgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciCi1tc2dzdHIgIlZlcmt0eWdldCBcIiVzXCIgZsO2ciBzYW1tYW5zbGFnbmluZyBzdMO2ZHMgaW50ZSIKKyM6IHd0LXN0YXR1cy5jOjI1MworbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICJib3J0dGFnZXQgYXYgb3NzOiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzAzCi1tc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCi1tc2dzdHIgIlZlcmt0eWdldCBmw7ZyIHNhbW1hbnNsYWduaW5nIGvDtnJzIHJlZGFuLiBWaWxsIGR1IGF2c2x1dGEgZGV0PyIKKyM6IHd0LXN0YXR1cy5jOjI1NAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICJ0aWxsYWd0IGF2IGLDpGdnZToiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMyMwotIywgdGNsLWZvcm1hdAorIzogd3Qtc3RhdHVzLmM6MjU1Cittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgIsOkbmRyYXQgYXYgYsOkZ2dlOiIKKworIzogd3Qtc3RhdHVzLmM6Mjg1Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAibnlhIGluY2hlY2tuaW5nYXIsICIKKworIzogd3Qtc3RhdHVzLmM6Mjg3Cittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICLDpG5kcmF0IGlubmVow6VsbCwgIgorCisjOiB3dC1zdGF0dXMuYzoyODkKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJvc3DDpXJhdCBpbm5laMOlbGwsICIKKworIzogd3Qtc3RhdHVzLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlOiAgICVzIgorbXNnc3RyICJueSBmaWw6ICAgICAlcyIKKworIzogd3Qtc3RhdHVzLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcGllZDogICAgICVzIC0+ICVzIgorbXNnc3RyICJrb3BpZXJhZDogICAlcyAtPiAlcyIKKworIzogd3Qtc3RhdHVzLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQ6ICAgICVzIgorbXNnc3RyICJib3J0dGFnZW46ICAlcyIKKworIzogd3Qtc3RhdHVzLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGlmaWVkOiAgICVzIgorbXNnc3RyICLDpG5kcmFkOiAgICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWVkOiAgICAlcyAtPiAlcyIKK21zZ3N0ciAibmFtbmJ5dGU6ICAgJXMgLT4gJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlY2hhbmdlOiAlcyIKK21zZ3N0ciAidHlwYnl0ZTogICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duOiAgICAlcyIKK21zZ3N0ciAib2vDpG5kOiAgICAgICVzIgorCisjOiB3dC1zdGF0dXMuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5tZXJnZWQ6ICAgJXMiCittc2dzdHIgIm9zYW1tYW5zbC46ICVzIgorCisjOiB3dC1zdGF0dXMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgInByb2dyYW1mZWw6IGRpZmYtc3RhdHVzICVjIGVqIGhhbnRlcmFkIgorCisjOiB3dC1zdGF0dXMuYzo3ODUKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIkR1IGhhciBlaiBzYW1tYW5zbGFnbmEgc8O2a3bDpGdhci4iCisKKyM6IHd0LXN0YXR1cy5jOjc4OCB3dC1zdGF0dXMuYzo5MTIKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgIChyw6R0dGEga29uZmxpa3RlciBvY2gga8O2ciBcImdpdCBjb21taXRcIikiCisKKyM6IHd0LXN0YXR1cy5jOjc5MQorbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIkFsbGEga29uZmxpa3RlciBoYXIgcsOkdHRhdHMgbWVuIGR1IMOkciBmb3J0ZmFyYW5kZSBpIGVuIHNhbW1hbnNsYWduaW5nLiIKKworIzogd3Qtc3RhdHVzLmM6Nzk0Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBjb21taXRcIiBmw7ZyIGF0dCBzbHV0ZsO2cmEgc2FtbWFuc2xhZ25pbmdlbikiCisKKyM6IHd0LXN0YXR1cy5jOjgwNAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiRHUgw6RyIGkgbWl0dGVuIGF2IGVuIGvDtnJuaW5nIGF2IFwiZ2l0IGFtXCIuIgorCisjOiB3dC1zdGF0dXMuYzo4MDcKK21zZ2lkICJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIkFrdHVlbGwgcGF0Y2ggw6RyIHRvbS4iCisKKyM6IHd0LXN0YXR1cy5jOjgxMQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIikiCittc2dzdHIgIiAgKHLDpHR0YSBrb25mbGlrdGVyIG9jaCBrw7ZyIHNlZGFuIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIikiCisKKyM6IHd0LXN0YXR1cy5jOjgxMworbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IGFtIC0tc2tpcFwiIGbDtnIgYXR0IGhvcHBhIMO2dmVyIHBhdGNoZW4pIgorCisjOiB3dC1zdGF0dXMuYzo4MTUKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYW0gLS1hYm9ydFwiIGbDtnIgYXR0IMOldGVyc3TDpGxsYSB1cnNwcnVuZ3NncmVuZW4pIgorCisjOiB3dC1zdGF0dXMuYzo4NzMgd3Qtc3RhdHVzLmM6ODgzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJEdSBow6VsbGVyIHDDpSBtZWQgZW4gb21iYXNlcmluZy4iCisKKyM6IHd0LXN0YXR1cy5jOjg3NgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyw6R0dGEga29uZmxpa3RlciBvY2gga8O2ciBzZWRhbiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6ODc4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBmw7ZyIGF0dCBob3BwYSDDtnZlciBwYXRjaGVuKSIKKworIzogd3Qtc3RhdHVzLmM6ODgwCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgZsO2ciBhdHQgY2hlY2thIHV0IHVyc3BydW5nc2dyZW5lbikiCisKKyM6IHd0LXN0YXR1cy5jOjg4NgorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYWxsYSBrb25mbGlrdGVyIHLDpHR0YWRlOiBrw7ZyIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzo4ODgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiRHUgaMOlbGxlciBww6UgYXR0IGRlbGEgdXBwIGVuIGluY2hlY2tuaW5nIGkgZW4gb21iYXNlcmluZy4iCisKKyM6IHd0LXN0YXR1cy5jOjg5MQorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChTw6UgZm9ydCBkaW4gYXJiZXRza2F0YWxvZyDDpHIgcmVuLCBrw7ZyIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzo4OTMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkR1IGjDpWxsZXIgcMOlIGF0dCByZWRpZ2VyYSBlbiBpbmNoZWNrbmluZyB1bmRlciBlbiBvbWJhc2VyaW5nLiIKKworIzogd3Qtc3RhdHVzLmM6ODk2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiIgorIiAgKGFudsOkbmQgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiBmw7ZyIGF0dCBsw6RnZ2EgdGlsbCBww6UgYWt0dWVsbCBpbmNoZWNrbmluZykiCisKKyM6IHd0LXN0YXR1cy5jOjg5OAogbXNnaWQgIiIKLSJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgbsOkciBkdSDDpHIgbsO2amQgbWVkIGRpbmEgw6RuZHJpbmdhcikiCisKKyM6IHd0LXN0YXR1cy5jOjkwOAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nLiIKK21zZ3N0ciAiRHUgaMOlbGxlciBww6UgbWVkIGVuIFwiY2hlcnJ5LXBpY2tcIi4iCisKKyM6IHd0LXN0YXR1cy5jOjkxNQorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKGFsbGEga29uZmxpa3RlciBoYXIgcsOkdHRhdHM6IGvDtnIgXCJnaXQgY29tbWl0XCIpIgorCisjOiB3dC1zdGF0dXMuYzo5MjQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICJEdSBow6VsbGVyIHDDpSBtZWQgZW4gXCJiaXNlY3RcIi4iCisKKyM6IHd0LXN0YXR1cy5jOjkyNworbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKGFudsOkbmQgXCJnaXQgYmlzZWN0IHJlc2V0XCIgZsO2ciBhdHQga29tbWEgdGlsbGJha2EgdGlsbCB1cnNwcnVuZ3NncmVuZW4pIgorCisjOiB3dC1zdGF0dXMuYzo5NzgKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICJQw6UgZ3JlbmVuICIKKworIzogd3Qtc3RhdHVzLmM6OTg1Cittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiSW50ZSBww6UgbsOlZ29uIGdyZW4gZsO2ciBuw6RydmFyYW5kZS4iCisKKyM6IHd0LXN0YXR1cy5jOjk5NworbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICJGw7Zyc3RhIGluY2hlY2tuaW5nIgorCisjOiB3dC1zdGF0dXMuYzoxMDExCittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJPc3DDpXJhZGUgZmlsZXIiCisKKyM6IHd0LXN0YXR1cy5jOjEwMTMKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICJJZ25vcmVyYWRlIGZpbGVyIgorCisjICVzIMOkciBuw6RzdGEgc3Ryw6RuZyBlbGxlciB0b20uCisjOiB3dC1zdGF0dXMuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIk9zcMOlcmFkZSBmaWxlciB2aXNhcyBlaiVzIgorCisjOiB3dC1zdGF0dXMuYzoxMDE3Cittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIChhbnbDpG5kIGZsYWdnYW4gLXUgZsO2ciBhdHQgdmlzYSBvc3DDpXJhZGUgZmlsZXIpIgorCisjOiB3dC1zdGF0dXMuYzoxMDIzCittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiSW5nYSDDpG5kcmluZ2FyIgorCisjOiB3dC1zdGF0dXMuYzoxMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisiaW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4gKGFudsOkbmQgXCJnaXQgYWRkXCIgb2NoL2VsbGVyIFwiZ2l0IGNvbW1pdCAtYSIKKyJcIilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICJpbmdhIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpblxuIgorCisjOiB3dC1zdGF0dXMuYzoxMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyJpbmdldCBrw7ZhdCBmw7ZyIGluY2hlY2tuaW5nLCBtZW4gb3Nww6VyYWRlIGZpbGVyIGZpbm5zIChzcMOlcmEgbWVkIFwiZ2l0IGFkZCIKKyJcIilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAiaW5nZXQga8O2YXQgZsO2ciBpbmNoZWNrbmluZywgbWVuIG9zcMOlcmFkZSBmaWxlciBmaW5uc1xuIgorCisjOiB3dC1zdGF0dXMuYzoxMDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICJpbmdldCBhdHQgY2hlY2thIGluIChza2FwYS9rb3BpZXJhIGZpbGVyIG9jaCBzcMOlcmEgbWVkIFwiZ2l0IGFkZFwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxMDQzIHd0LXN0YXR1cy5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAiaW5nZXQgYXR0IGNoZWNrYSBpblxuIgorCisjOiB3dC1zdGF0dXMuYzoxMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgImluZ2V0IGF0dCBjaGVja2EgaW4gKGFudsOkbmQgLXUgZsO2ciBhdHQgdmlzYSBvc3DDpXJhZGUgZmlsZXIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgZGlyZWN0b3J5IGNsZWFuXG4iCittc2dzdHIgImluZ2V0IGF0dCBjaGVja2EgaW4sIGFyYmV0c2thdGFsb2dlbiByZW5cbiIKKworIzogd3Qtc3RhdHVzLmM6MTE1OAorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKGluZ2VuIGdyZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMTY0Cittc2dpZCAiSW5pdGlhbCBjb21taXQgb24gIgorbXNnc3RyICJGw7Zyc3RhIGluY2hlY2tuaW5nIHDDpSAiCisKKyM6IHd0LXN0YXR1cy5jOjExNzkKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJlZnRlciAiCisKKyM6IHd0LXN0YXR1cy5jOjExODIgd3Qtc3RhdHVzLmM6MTE4NQorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAiZsO2cmUgIgorCisjOiB3dC1zdGF0dXMuYzoxMTg3Cittc2dpZCAiLCBiZWhpbmQgIgorbXNnc3RyICIsIGVmdGVyICIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU4IGJ1aWx0aW4vY2xvbmUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCBsw6Rua2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9hZGQuYzoxOQorbXNnaWQgImdpdCBhZGQgW29wdGlvbnNdIFstLV0gPGZpbGVwYXR0ZXJuPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbZmxhZ2dvcl0gWy0tXSA8ZmlsbcO2bnN0ZXI+Li4uIgorCisjOiBidWlsdGluL2FkZC5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgImRpZmYtc3RhdHVzICVjIGbDtnJ2w6RudGFkZXMgaW50ZSIKKworIzogYnVpbHRpbi9hZGQuYzo2NyBidWlsdGluL2NvbW1pdC5jOjIzMAorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHVwcGRhdGVyYSBmaWxlciIKKworIzogYnVpbHRpbi9hZGQuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICJ0YSBib3J0IFwiJXNcIlxuIgorCisjOiBidWlsdGluL2FkZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRoICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAiU8O2a3bDpGdlbiBcIiVzXCIgw6RyIGkgdW5kZXJtb2R1bGVuIFwiJS4qc1wiIgorCisjOiBidWlsdGluL2FkZC5jOjE5MgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICJPc3DDpXJhZGUgw6RuZHJpbmdhciBlZnRlciBhdHQgaGEgdXBwZGF0ZXJhdCBpbmRleGV0OiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTUgYnVpbHRpbi9hZGQuYzo0NjAgYnVpbHRpbi9ybS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICJzw7ZrdsOkZ3NhbmdpdmVsc2VuIFwiJXNcIiBtb3RzdmFyYWRlIGludGUgbsOlZ3JhIGZpbGVyIgorCisjOiBidWlsdGluL2FkZC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIlwiJXNcIiDDpHIgcMOlIGFuZHJhIHNpZGFuIGF2IGVuIHN5bWJvbGlzayBsw6RuayIKKworIzogYnVpbHRpbi9hZGQuYzoyNzYKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIkt1bmRlIGludGUgbMOkc2EgaW5kZXhldCIKKworIzogYnVpbHRpbi9hZGQuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIFwiJXNcIiBmw7ZyIHNrcml2bmluZyIKKworIzogYnVpbHRpbi9hZGQuYzoyOTAKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIkt1bmRlIGludGUgc2tyaXZhIHBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHRhIHN0YXR1cyBww6UgXCIlc1wiIgorCisjOiBidWlsdGluL2FkZC5jOjI5NworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiVG9tIHBhdGNoLiBBdmJyeXRlci4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHRpbGzDpG1wYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEzCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICJGw7ZsamFuZGUgc8O2a3bDpGdhciBpZ25vcmVyYXMgYXYgZW4gYXYgZGluYSAuZ2l0aWdub3JlLWZpbGVyOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjMxOSBidWlsdGluL2NsZWFuLmM6NTIgYnVpbHRpbi9mZXRjaC5jOjc4IGJ1aWx0aW4vbXYuYzo2MworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3NiBidWlsdGluL3B1c2guYzozODggYnVpbHRpbi9yZW1vdGUuYzoxMjUzCisjOiBidWlsdGluL3JtLmM6MTMzCittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAidGVzdGvDtnJuaW5nIgorCisjOiBidWlsdGluL2FkZC5jOjMyMCBidWlsdGluL2FwcGx5LmM6NDM1NCBidWlsdGluL2NvbW1pdC5jOjExNTQKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjgyIGJ1aWx0aW4vZnNjay5jOjYxMyBidWlsdGluL2xvZy5jOjE0NzcKKyM6IGJ1aWx0aW4vbXYuYzo2MiBidWlsdGluL3JlYWQtdHJlZS5jOjExMgorbXNnaWQgImJlIHZlcmJvc2UiCittc2dzdHIgInZhciBwcmF0c2FtIgorCisjOiBidWlsdGluL2FkZC5jOjMyMgorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgInBsb2NrYSBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9hZGQuYzozMjMgYnVpbHRpbi9jaGVja291dC5jOjEwMjggYnVpbHRpbi9yZXNldC5jOjI0OAorbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJ2w6RsaiBzdHlja2VuIGludGVyYWt0aXZ0IgorCisjOiBidWlsdGluL2FkZC5jOjMyNAorbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAicmVkaWdlcmEgYWt0dWVsbCBkaWZmIG9jaCBhcHBsaWNlcmEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJ0aWxsw6V0IGzDpGdnYSB0aWxsIGFubmFycyBpZ25vcmVyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2FkZC5jOjMyNgorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICJ1cHBkYXRlcmEgc3DDpXJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI3Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICJyZWdpc3RyZXJhIGVuZGFzdCBhdHQgc8O2a3bDpGdlbiBrb21tZXIgbMOkZ2dhcyB0aWxsIHNlbmFyZSIKKworIzogYnVpbHRpbi9hZGQuYzozMjgKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgImzDpGdnIHRpbGwgw6RuZHJpbmdhciBmcsOlbiBhbGxhIHNww6VyYWRlIG9jaCBvc3DDpXJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI5Cittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJsw6RnZyBpbnRlIHRpbGwsIHVwcGRhdGVyYSBlbmRhc3QgaW5kZXhldCIKKworIzogYnVpbHRpbi9hZGQuYzozMzAKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICJob3BwYSBiYXJhIMO2dmVyIGZpbGVyIHNvbSBpbnRlIGthbiBsw6RnZ2FzIHRpbGwgcMOlIGdydW5kIGF2IGZlbCIKKworIzogYnVpbHRpbi9hZGQuYzozMzEKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgInNlIG9tIC0gw6R2ZW4gc2FrbmFkZSAtIGZpbGVyIGlnbm9yZXJhcyBpIHRlc3Rrw7ZybmluZyIKKworIzogYnVpbHRpbi9hZGQuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKK21zZ3N0ciAiQW52w6RuZCAtZiBvbSBkdSB2ZXJrbGlnZW4gdmlsbCBsw6RnZ2EgdGlsbCBkZW0uXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU0Cittc2dpZCAibm8gZmlsZXMgYWRkZWQiCittc2dzdHIgImluZ2EgZmlsZXIgaGFyIGxhZ3RzIHRpbGwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzYwCittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpGdnYSB0aWxsIGZpbGVyIgorCisjOiBidWlsdGluL2FkZC5jOjM5MgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSBvY2ggLXUgw6RyIMO2bXNlc2lkaWd0IGlua29tcGF0aWJsYSIKKworIzogYnVpbHRpbi9hZGQuYzozOTQKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICJGbGFnZ2FuIC0taWdub3JlLW1pc3Npbmcga2FuIGVuZGFzdCBhbnbDpG5kYXMgdGlsbHNhbW1hbnMgbWVkIC0tZHJ5LXJ1biIKKworIzogYnVpbHRpbi9hZGQuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIkluZ2V0IGFuZ2l2ZXQsIGluZ2V0IHRpbGxhZ3QuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICJLYW5za2UgbWVuYWRlIGR1IGF0dCBza3JpdmEgXCJnaXQgYWRkIC5cIj9cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0MjEgYnVpbHRpbi9jbGVhbi5jOjk1IGJ1aWx0aW4vY29tbWl0LmM6MjkwIGJ1aWx0aW4vbXYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjE2MgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiaW5kZXhmaWxlbiB0cmFzaWciCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgxIGJ1aWx0aW4vYXBwbHkuYzo0NDUwIGJ1aWx0aW4vbXYuYzoyMjkgYnVpbHRpbi9ybS5jOjI2MAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgbnkgaW5kZXhmaWwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo1NworbXNnaWQgImdpdCBhcHBseSBbb3B0aW9uc10gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgW2ZsYWdnb3JdIFs8cGF0Y2g+Li4uXSIKKworIzogYnVpbHRpbi9hcHBseS5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAib2vDpG50IGFsdGVybmF0aXYgZsO2ciB3aGl0ZXNwYWNlOiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJva8OkbnQgYWx0ZXJuYXRpdiBmw7ZyIGlnbm9yZS13aGl0ZXNwYWNlOiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiS2FuIGludGUgZsO2cmJlcmVkYSByZWd1bGrDpHJ0IHV0dHJ5Y2sgZsO2ciB0aWRzc3TDpG1wZWxuICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAicmVnZXhlYyByZXR1cm5lcmFkZSAlZCBmw7ZyIGluZGF0YTogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAia2FuIGludGUgaGl0dGEgZmlsbmFtbiBpIHBhdGNoZW4gcMOlIHJhZCAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZMOlbGlnIGdpdC1kaWZmIC0gZsO2cnbDpG50YWRlIC9kZXYvbnVsbCwgZmljayAlcyBww6UgcmFkICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGTDpWxpZyBnaXQtZGlmZiAtIG1vdHPDpGdhbmRlIG55dHQgZmlsbmFtbiBww6UgcmFkICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGTDpWxpZyBnaXQtZGlmZiAtIG1vdHPDpGdhbmRlIGdhbW1hbHQgZmlsbmFtbiBww6UgcmFkICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZMOlbGlnIGdpdC1kaWZmIC0gZsO2cnbDpG50YWRlIC9kZXYvbnVsbCBww6UgcmFkICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgInJlY291bnQ6IGbDtnJ2w6RudGFkZSByYWQ6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgInBhdGNoLWZyYWdtZW50IHV0YW4gaHV2dWQgcMOlIHJhZCAlZDogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorImdpdC1kaWZmLWh1dnVkZXQgc2FrbmFyIGZpbG5hbW5zaW5mb3JtYXRpb24gbsOkciAlZCBsZWRhbmRlIHPDtmt2w6Rnc2tvbXBvbmVudFxuIgorInRhcyBib3J0IChyYWQgJWQpIgorbXNnc3RyWzFdICIiCisiZ2l0LWRpZmYtaHV2dWRldCBzYWtuYXIgZmlsbmFtbnNpbmZvcm1hdGlvbiBuw6RyICVkIGxlZGFuZGUgIgorInPDtmt2w6Rnc2tvbXBvbmVudGVyXG4iCisidGFzIGJvcnQgKHJhZCAlZCkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjU0Cittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIm55IGZpbCBiZXJvciBww6UgZ2FtbWFsdCBpbm5laMOlbGwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjU2Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiYm9ydHRhZ2VuIGZpbCBoYXIgZm9ydGZhcmFuZGUgaW5uZWjDpWxsIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInRyYXNpZyBwYXRjaCBww6UgcmFkICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibnlhIGZpbGVuICVzIGJlcm9yIHDDpSBnYW1tYWx0IGlubmVow6VsbCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiYm9ydHRhZ25hIGZpbGVuICVzIGhhciBmb3J0ZmFyYW5kZSBpbm5laMOlbGwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqIHZhcm5pbmc6IGZpbGVuICVzIGJsaXIgdG9tIG1lbiBoYXIgaW50ZSB0YWdpdHMgYm9ydCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAidHJhc2lnIGJpbsOkcnBhdGNoIHDDpSByYWQgJWQ6ICUuKnMiCisKKyMuIHRoZXJlIGhhcyB0byBiZSBvbmUgaHVuayAoZm9yd2FyZCBodW5rKQorIzogYnVpbHRpbi9hcHBseS5jOjE4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJiaW7DpHJwYXRjaGVuIHDDpSByYWQgJWQga8Okbm5zIGludGUgaWdlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE5ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAicGF0Y2ggbWVkIGJhcmEgc2tyw6RwIHDDpSByYWQgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Egc3ltYm9saXNrYSBsw6Rua2VuICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBvciByZWFkICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBlbGxlciBsw6RzYSAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjIxNDkKK21zZ2lkICJvb3BzIgorbXNnc3RyICJob3Bwc2FuIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgImZlbGFrdGlnIGlubGVkbmluZyBww6UgcmFkOiBcIiVjXCIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiU3R5Y2tlICVkIGx5Y2thZGVzIHDDpSAlZCAob2Zmc2V0ICVkIHJhZCkuIgorbXNnc3RyWzFdICJTdHlja2UgJWQgbHlja2FkZXMgcMOlICVkIChvZmZzZXQgJWQgcmFkZXIpLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSB0byBhcHBseSBmcmFnbWVudCBhdCAlZCIKK21zZ3N0ciAiU2FtbWFuaGFuZyByZWR1Y2VyYXQgdGlsbCAoJWxkLyVsZCkgZsO2ciBhdHQgdGlsbMOkbXBhIGZyYWdtZW50IHZpZCAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjI4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorInZpZCBzw7ZrbmluZyBlZnRlcjpcbiIKKyIlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICJzYWtuYXIgYmluw6RyYSBwYXRjaGRhdGEgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJiaW7DpHJwYXRjaGVuIGthbiBpbnRlIHRpbGzDpG1wYXMgcMOlIFwiJXNcIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgImJpbsOkcnBhdGNoZW4gcMOlIFwiJXNcIiBnZXIgZmVsYWt0aWd0IHJlc3VsdGF0IChmw7ZydsOkbnRhZGUgJXMsIGZpY2sgJXMpIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mjk1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAicGF0Y2ggbWlzc2x5Y2thZGVzOiAlczolbGQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAia2FuIGludGUgY2hlY2thIHV0ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzEyMyBidWlsdGluL2FwcGx5LmM6MzEzMiBidWlsdGluL2FwcGx5LmM6MzE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIG9mICVzIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpHNhICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE1NiBidWlsdGluL2FwcGx5LmM6MzM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAic8O2a3bDpGdlbiAlcyBoYXIgw6RuZHJhdCBuYW1uL3RhZ2l0cyBib3J0IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzIzNyBidWlsdGluL2FwcGx5LmM6MzM5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBmaW5ucyBpbnRlIGkgaW5kZXhldCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNDEgYnVpbHRpbi9hcHBseS5jOjMzODQgYnVpbHRpbi9hcHBseS5jOjM0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIgorbXNnc3RyICIlczogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjQ2IGJ1aWx0aW4vYXBwbHkuYzozNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXM6IG1vdHN2YXJhciBpbnRlIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzQ4Cittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAicGF0Y2ggZsO2ciBib3J0dGFnbmluZyBsw6RtbmFyIGt2YXIgZmlsaW5uZWjDpWxsIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzQxNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXM6IGZlbCB0eXAiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgaGFyIHR5cGVuICVvLCBmw7ZydsOkbnRhZGUgJW8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IGZpbm5zIHJlZGFuIGkgaW5kZXhldCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczogZmlubnMgcmVkYW4gaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAibnl0dCBsw6RnZSAoJW8pIGbDtnIgJXMgbW90c3ZhcmFyIGludGUgZ2FtbWFsdCBsw6RnZSAoJW8pIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgIm55dHQgbMOkZ2UgKCVvKSBmw7ZyICVzIG1vdHN2YXJhciBpbnRlIGdhbW1hbHQgbMOkZ2UgKCVvKSBmw7ZyICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzU1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzOiBwYXRjaGVuIGthbiBpbnRlIHRpbGzDpG1wYXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICJLb250cm9sbGVyYXIgcGF0Y2hlbiAlcy4uLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2MjQgYnVpbHRpbi9jaGVja291dC5jOjIxNSBidWlsdGluL3Jlc2V0LmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIm1ha2VfY2FjaGVfZW50cnkgbWlzc2x5Y2thZGVzIGbDtnIgc8O2a3bDpGdlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAia2FuIGludGUgdGEgYm9ydCAlcyBmcsOlbiBpbmRleGV0IgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJwcm9qZWN0ICVzIgorbXNnc3RyICJ0cmFzaWcgcGF0Y2ggZsO2ciB1bmRlcnByb2pla3RldCAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgImthbiBpbnRlIHRhIHN0YXR1cyBww6UgbnlsaWdlbiBza2FwYWRlIGZpbGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgImthbiBpbnRlIHNrYXBhIHPDpGtlcmhldHNtaW5uZSBmw7ZyIG55bGlnZW4gc2thcGFkZSBmaWxlbiAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MDcgYnVpbHRpbi9hcHBseS5jOjM5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgImthbiBpbnRlIGzDpGdnYSB0aWxsIGNhY2hlcG9zdCBmw7ZyICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAic3TDpG5nZXIgZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzg4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgImthbiBpbnRlIHNrcml2YSBmaWxlbiBcIiVzXCIgbMOkZ2UgJW8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIlRpbGzDpG1wYWRlIHBhdGNoZW4gJXMgcmVudC4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTg0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgImludGVybnQgZmVsIgorCisjLiBTYXkgdGhpcyBldmVuIHdpdGhvdXQgLS12ZXJib3NlCisjOiBidWlsdGluL2FwcGx5LmM6Mzk4NworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIlRpbGzDpG1wYWRlIHBhdGNoZW4gJSVzIG1lZCAlZCByZWZ1c2VyYWQuLi4iCittc2dzdHJbMV0gIlRpbGzDpG1wYWRlIHBhdGNoZW4gJSVzIG1lZCAlZCByZWZ1c2VyYWRlLi4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgInRydW5rZXJhciAucmVqLWZpbG5hbW5ldCB0aWxsICUuKnMucmVqIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICJTdHlja2UgJWQgdGlsbMOkbXBhZGVzIHJlbnQuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAyMQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIlJlZnVzZXJhciBzdHlja2UgJWQuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDE3MQorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiaW5kYXRhIGvDpG5ucyBpbnRlIGlnZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MTgyCittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgaW5kZXhmaWxlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDEgYnVpbHRpbi9hcHBseS5jOjQzMDQgYnVpbHRpbi9jbG9uZS5jOjkxCisjOiBidWlsdGluL2ZldGNoLmM6NjMKK21zZ2lkICJwYXRoIgorbXNnc3RyICJzw7ZrdsOkZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDIKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJ0aWxsw6RtcGEgaW50ZSDDpG5kcmluZ2FyIHNvbSBtb3RzdmFyYXIgZ2l2ZW4gc8O2a3bDpGciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA1Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAidGlsbMOkbXBhIMOkbmRyaW5nYXIgc29tIG1vdHN2YXJhciBnaXZlbiBzw7ZrdsOkZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDcKK21zZ2lkICJudW0iCittc2dzdHIgImFudGFsIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwOAorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICJ0YSBib3J0IDxhbnRhbD4gaW5sZWRhbmRlIHNuZWRzdHJlY2sgZnLDpW4gdHJhZGl0aW9uZWxsYSBkaWZmLXPDtmt2w6RnYXIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzExCittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiaWdub3JlcmEgdGlsbMOkZ2cgZ2pvcmRhIGF2IHBhdGNoZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzEzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJpc3TDpGxsZXQgZsO2ciBhdHQgdGlsbMOkbXBhIHBhdGNoZW4sIHNrcml2IHV0IGRpZmZzdGF0IGbDtnIgaW5kYXRhIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMxNworbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgInZpc2EgYW50YWwgdGlsbGFnZGEgb2NoIGJvcnR0YWduYSByYWRlciBkZWNpbWFsdCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMTkKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJpc3TDpGxsZXQgZsO2ciBhdHQgdGlsbMOkbXBhIHBhdGNoZW4sIHNrcml2IHV0IGVuIHN1bW1lcmluZyBhdiBpbmRhdGEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzIxCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiaXN0w6RsbGV0IGbDtnIgYXR0IHRpbGzDpG1wYSBwYXRjaGVuLCBzZSBvbSBwYXRjaGVuIGthbiB0aWxsw6RtcGFzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMyMworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAic2UgdGlsbCBhdHQgcGF0Y2hlbiBrYW4gdGlsbMOkbXBhcyBww6UgYWt0dWVsbHQgaW5kZXgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzI1Cittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgInRpbGzDpG1wYSBlbiBwYXRjaCB1dGFuIGF0dCByw7ZyYSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzI3Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgInRpbGzDpG1wYSBvY2tzw6UgcGF0Y2hlbiAoYW52w6RuZCBtZWQgLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMjkKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJmw7Zyc8O2ayBlbiB0cmV2w6Rnc3NhbW1hbnNsYWduaW5nIG9tIHBhdGNoZW4gaW50ZSBrYW4gdGlsbMOkbXBhcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMzEKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiYnlnZyBldHQgdGVtcG9yw6RydCBpbmRleCBiYXNlcmF0IHDDpSBpbmJ5Z2dkIGluZGV4aW5mb3JtYXRpb24iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzMzIGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTcgYnVpbHRpbi9scy1maWxlcy5jOjQ2MAorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJzw7ZrdsOkZ2FyIGF2ZGVsYXMgbWVkIE5VTC10ZWNrZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzM2Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICJzZSB0aWxsIGF0dCDDpXRtaW5zdG9uZSA8bj4gcmFkZXIgc2FtbWFuaGFuZyDDpHIgbGlrYSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMzcKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgIsOldGfDpHJkIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMzOAorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICJkZXRla3RlcmEgbnlhIGVsbGVyIMOkbmRyYWRlIHJhZGVyIHNvbSBoYXIgZmVsIGkgYmxhbmt0ZWNrZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzQxIGJ1aWx0aW4vYXBwbHkuYzo0MzQ0Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAiaWdub3JlcmEgw6RuZHJpbmdhciBpIGJsYW5rdGVja2VuIGbDtnIgc2FtbWFuaGFuZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNDcKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAidGlsbMOkbXBhIHBhdGNoZW4gYmFrbMOkbmdlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNDkKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAiZsO2cnbDpG50YSBpbnRlIG1pbnN0IGVuIHJhZCBzYW1tYW5oYW5nIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM1MQorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICJsw6RtbmEgcmVmdXNlcmFkZSBzdHlja2VuIGkgbW90c3ZhcmFuZGUgKi5yZWotZmlsZXIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzUzCittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgInRpbGzDpXQgw7Z2ZXJsYXBwYW5kZSBzdHlja2VuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM1NgorbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICJ0b2xlcmVyYSBmZWxha3RpZ3QgZGV0ZWt0ZXJhZGUgc2FrbmFkZSBueXJhZHN0ZWNrZW4gdmlkIGZpbHNsdXQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzU5Cittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICJsaXRlIGludGUgcMOlIGFudGFsZXQgbGluamVyIGkgc3R5Y2tlaHV2dWRlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNjEKK21zZ2lkICJyb290IgorbXNnc3RyICJyb3QiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzYyCittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAibMOkZ2cgdGlsbCA8cm90PiBpIGFsbGEgZmlsbmFtbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzODQKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSB1dGFuZsO2ciBhcmtpdiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzOTIKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IHV0YW5mw7ZyIGFya2l2IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM5NQorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCB1dGFuZsO2ciBhcmtpdiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgcGF0Y2hlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gInVuZGVydHJ5Y2t0ZSAlZCBmZWwgaSBibGFua3N0ZWciCittc2dzdHJbMV0gInVuZGVydHJ5Y2t0ZSAlZCBmZWwgaSBibGFua3N0ZWciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NDMxIGJ1aWx0aW4vYXBwbHkuYzo0NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIHJhZCBsw6RnZ2VyIHRpbGwgZmVsIGkgYmxhbmtzdGVnLiIKK21zZ3N0clsxXSAiJWQgcmFkZXIgbMOkZ2dlciB0aWxsIGZlbCBpIGJsYW5rc3RlZy4iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEgYXJraXZmaWxlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAia3VuZGUgaW50ZSBvbWRpcmlnZXJhIHV0ZGF0YSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogRmrDpHJyIHV0YW4gVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo1OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZsO2cnbDpG50YWRlIEFDSy9OQUssIGZpY2sgRU9GIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgImZqw6RycmZlbDogJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY2Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogcHJvdG9rb2xsZmVsIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo3MQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZsO2cnbDpG50YWRlIGVuIHTDtm1uaW5nIChmbHVzaCkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNworbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgInV0ZsO2ciAnZ2l0IGJpc2VjdCBuZXh0JyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE5Cittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAidXBwZGF0ZXJhIEJJU0VDVF9IRUFEIGlzdMOkbGxldCBmw7ZyIGF0dCBjaGVja2EgdXQgYWt0dWVsbCBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1Cittc2dpZCAiZ2l0IGJsYW1lIFtvcHRpb25zXSBbcmV2LW9wdHNdIFtyZXZdIFstLV0gZmlsZSIKK21zZ3N0ciAiZ2l0IGJsYW1lIFtmbGFnZ29yXSBbcmV2LWZsYWdnb3JdIFtyZXZdIFstLV0gZmlsIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzAgYnVpbHRpbi9zaG9ydGxvZy5jOjE1Cittc2dpZCAiW3Jldi1vcHRzXSBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiCittc2dzdHIgIltyZXYtZmxhZ2dvcl0gZG9rdW1lbnRlcmFzIGkgZ2l0LXJldi1saXN0KDEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM3MworbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIlZpc2Ega2xhbmRyaW5nc3Bvc3RlciBuw6RyIHZpIGhpdHRhciBkZW0sIGludGVyYWt0aXZ0IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM3NAorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIlZpc2EgYmxhbmsgU0hBLTEgZsO2ciBncsOkbnNpbmNoZWNrbmluZ2FyIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM3NQorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiQmVoYW5kbGEgaW50ZSByb3RpbmNoZWNrbmluZ2FyIHNvbSBncsOkbnNlciAoU3RhbmRhcmQ6IGF2KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzNzYKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICJWaXNhIHN0YXRpc3RpayDDtnZlciBhcmJldHNrb3N0bmFkIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM3NworbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICJWaXNhIHV0ZGF0YXBvw6RuZyBmw7ZyIGtsYW5kcmluZ3Nwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzc4Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIlZpc2Egb3JpZ2luYWxmaWxuYW1uIChTdGFuZGFyZDogYXV0bykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzc5Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJWaXNhIHVyc3BydW5nbGlndCByYWRudW1tZXIgKFN0YW5kYXJkOiBhdikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzgwCittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAiVmlzYSBpIGV0dCBmb3JtYXQgYXZzZXR0IGbDtnIgbWFza2lua29uc3VtdGlvbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzODEKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIlZpc2EgcG9yc2xpbnNmb3JtYXQgbWVkIHBlci1yYWQtaW5jaGVja25pbmdzaW5mb3JtYXRpb24iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzgyCittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiQW52w6RuZCBzYW1tYSB1dGRhdGFsw6RnZSBzb20gZ2l0LWFubm90YXRlIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM4MworbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVmlzYSByw6UgdGlkc3N0w6RtcGVsIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM4NAorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVmlzYSBsw6VuZyBpbmNoZWNrbmluZ3MtU0hBMSAoU3RhbmRhcmQ6IGF2KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzODUKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJVbmRlcnRyeWNrIGbDtnJmYXR0YXJuYW1uIG9jaCB0aWRzc3TDpG1wZWwgKFN0YW5kYXJkOiBhdikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzg2Cittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJWaXNhIGbDtnJmYXR0YXJlbnMgZS1wb3N0IGlzdMOkbGxldCBmw7ZyIG5hbW4gKFN0YW5kYXJkOiBhdikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzg3Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIklnbm9yZXJhIMOkbmRyaW5nYXIgaSBibGFua3N0ZWciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzg4Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICJTbMO2c2EgZXh0cmEgY3lrbGVyIG1lZCBhdHQgaGl0dGEgYsOkdHRyZSB0csOkZmYiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzg5Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICJBbnbDpG5kIHJldmlzaW9uZXIgZnLDpW4gPGZpbD4gaXN0w6RsbGV0IGbDtnIgYXR0IGFucm9wYSBnaXQtcmV2LWxpc3QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzkwCittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAiQW52w6RuZCA8ZmlsPnMgaW5uZWjDpWxsIHNvbSBzbHV0Z2lsdGlnIGJpbGQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzkxIGJ1aWx0aW4vYmxhbWUuYzoyMzkyCittc2dpZCAic2NvcmUiCittc2dzdHIgInBvw6RuZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzOTEKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJIaXR0YSBrb3BpZXJhZGUgcmFkZXIgaW51dGkgb2NoIG1lbGxhbiBmaWxlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzOTIKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJIaXR0YSBmbHl0dGFkZSByYWRlciBpbnV0aSBvY2ggbWVsbGFuIGZpbGVyIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM5MworbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM5MworbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJCZWhhbmRsYSBlbmRhc3QgcmFkaW50ZXJ2YWxsZXQgbixtLCBtZWQgYsO2cmphbiBww6UgMSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMworbXNnaWQgImdpdCBicmFuY2ggW29wdGlvbnNdIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggW2ZsYWdnb3JdIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQKK21zZ2lkICJnaXQgYnJhbmNoIFtvcHRpb25zXSBbLWxdIFstZl0gPGJyYW5jaG5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbZmxhZ2dvcl0gWy1sXSBbLWZdIDxncmVubmFtbj4gWzxzdGFydHB1bmt0Pl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjUKK21zZ2lkICJnaXQgYnJhbmNoIFtvcHRpb25zXSBbLXJdICgtZCB8IC1EKSA8YnJhbmNobmFtZT4uLi4iCittc2dzdHIgImdpdCBicmFuY2ggW2ZsYWdnb3JdIFstcl0gKC1kIHwgLUQpIDxncmVubmFtbj4uLi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYKK21zZ2lkICJnaXQgYnJhbmNoIFtvcHRpb25zXSAoLW0gfCAtTSkgWzxvbGRicmFuY2g+XSA8bmV3YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbZmxhZ2dvcl0gKC1tIHwgLU0pIFs8Z2FtbWFsX2dyZW4+XSA8bnlfZ3Jlbj4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorInRhciBib3J0IGdyZW5lbiBcIiVzXCIgc29tIGhhciBzbGFnaXRzIGlob3AgbWVkXG4iCisiICAgICAgICAgXCIlc1wiLCBtZW4gw6RubnUgaW50ZSBzbGFnaXRzIGlob3AgbWVkIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJ0YXIgaW50ZSBib3J0IGdyZW5lbiBcIiVzXCIgc29tIGludGUgaGFyIHNsYWdpdHMgaWhvcCBtZWRcbiIKKyIgICAgICAgICBcIiVzXCIsIHRyb3RzIGF0dCBkZW4gaGFyIHNsYWdpdHMgaWhvcCBtZWQgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTgxCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICJrYW4gaW50ZSBhbmdlIC1hIG1lZCAtZCIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODcKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIkt1bmRlIGludGUgc2zDpSB1cHAgaW5jaGVja25pbmdzb2JqZWt0IGbDtnIgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgYnJhbmNoICclcycgd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgb24uIgorbXNnc3RyICJLYW4gaW50ZSB0YSBib3J0IGdyZW5lbiBcIiVzXCIgc29tIGR1IGJlZmlubmVyIGRpZyBww6UgZsO2ciBuw6RydmFyYW5kZS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJmasOkcnJncmVuZW4gXCIlc1wiIGhpdHRhZGVzIGludGUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJncmVuZW4gXCIlc1wiIGhpdHRhZGVzIGludGUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIkt1bmRlIGludGUgc2zDpSB1cHAgaW5jaGVja25pbmdzb2JqZWt0IGbDtnIgXCIlc1wiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKyJHcmVuZW4gXCIlc1wiIGhhciBpbnRlIHNsYWdpdHMgc2FtbWFuIGkgc2luIGhlbGhldC5cbiIKKyJPbSBkdSDDpHIgc8Oka2VyIHDDpSBhdHQgZHUgdmlsbCB0YSBib3J0IGRlbiwga8O2ciBcImdpdCBicmFuY2ggLUQgJXNcIi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRmVsIHZpZCBib3J0dGFnbmluZyBhdiBmasOkcnJncmVuZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRmVsIHZpZCBib3J0dGFnbmluZyBhdiBncmVuZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZSBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIlRvZyBib3J0IGZqw6RycmdyZW5lbiAlcyAodmFyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIlRvZyBib3J0IGdyZW5lbiAlcyAodmFyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDAKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJNaXNzbHlja2FkZXMgdXBwZGF0ZXJhIGtvbmZpZ3VyYXRpb25zZmlsIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzOAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBwb2ludCBhdCBhIGNvbW1pdCIKK21zZ3N0ciAiZ3JlbmVuIFwiJXNcIiBwZWthciBpbnRlIHDDpSBlbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBiZWhpbmQgJWRdIgorbXNnc3RyICJbJXM6IGJha29tICVkXSAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIltiZWhpbmQgJWRdIgorbXNnc3RyICJbYmFrb20gJWRdICIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBhaGVhZCAlZF0iCittc2dzdHIgIlslczogZsO2cmUgJWRdICIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkXSIKK21zZ3N0ciAiW2bDtnJlICVkXSAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIlslczogZsO2cmUgJWQsIGJha29tICVkXSAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlthaGVhZCAlZCwgYmVoaW5kICVkXSIKK21zZ3N0ciAiW2bDtnJlICVkLCBiYWtvbSAlZF0gIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUzNworbXNnaWQgIihubyBicmFuY2gpIgorbXNnc3RyICIoaW5nZW4gZ3JlbikiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjAyCittc2dpZCAic29tZSByZWZzIGNvdWxkIG5vdCBiZSByZWFkIgorbXNnc3RyICJ2aXNzYSByZWZlcmVuc2VyIGt1bmRlIGludGUgbMOkc2FzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxNQorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICIiCisia3VuZGUgaW50ZSBieXRhIG5hbW4gcMOlIGFrdHVlbGwgZ3JlbiBuw6RyIGR1IGludGUgYmVmaW5uZXIgZGlnIHDDpSBuw6Vnb24uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICJGZWxha3RpZ3QgbmFtbiBww6UgZ3JlbjogXCIlc1wiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MAorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYnl0YSBuYW1uIHDDpSBncmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiQnl0dGUgYm9ydCBuYW1uIHDDpSBlbiBmZWxha3RpZ3QgbmFtbmdpdmVuIGdyZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICJHcmVuZW4gbmFtbmJ5dHQgdGlsbCAlcywgbWVuIEhFQUQgaGFyIGludGUgdXBwZGF0ZXJhdHMhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NQorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiR3JlbmVuIG5hbW5ieXR0LCBtZW4gbWlzc2x5Y2thZGVzIHVwcGRhdGVyYSBrb25maWd1cmF0aW9uc2ZpbGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgImZlbGZvcm1hdCBvYmpla3RuYW1uICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRlbXBsYXRlOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZ3JlbmJlc2tyaXZuaW5nc21hbGw6ICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyNAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiQWxsbcOkbm5hIGZsYWdnb3IiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI2Cittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgInZpc2EgaGFzaCBvY2ggw6RyZW5kZXJhZCwgYW5nZSB0dsOlIGfDpW5nZXIgZsO2ciB1cHBzdHLDtm1zZ3JlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjcKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICJ1bmRlcnRyeWNrIGluZm9ybWF0aW9uc21lZGRlbGFuZGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyOAorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJzdMOkbGwgaW4gc3DDpXJuaW5nc2zDpGdlIChzZSBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzMwCittc2dpZCAiY2hhbmdlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIsOkbmRyYSB1cHBzdHLDtm1zaW5mb3JtYXRpb24iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzM0Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJhbnbDpG5kIGbDpHJnYWQgdXRkYXRhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczNQorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgImFyYmV0YSBww6UgZmrDpHJyc3DDpXJhbmRlIGdyZW5hciIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzggYnVpbHRpbi9icmFuY2guYzo3NDQgYnVpbHRpbi9icmFuY2guYzo3NjUKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzcxIGJ1aWx0aW4vY29tbWl0LmM6MTM2MiBidWlsdGluL2NvbW1pdC5jOjEzNjMKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NCBidWlsdGluL2NvbW1pdC5jOjEzNjUgYnVpbHRpbi90YWcuYzo0NzAKK21zZ2lkICJjb21taXQiCittc2dzdHIgImluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczOSBidWlsdGluL2JyYW5jaC5jOjc0NQorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgInZpc2EgZW5kYXN0IGdyZW5hciBzb20gaW5uZWjDpWxsZXIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTEKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICJTcGVjaWZpa2EgZ2l0LWJyYW5jaC3DpXRnw6RyZGVyOiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTIKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAidmlzYSBiw6VkZSBmasOkcnJzcMOlcmFuZGUgb2NoIGxva2FsYSBncmVuYXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU0Cittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgInRhIGJvcnQgaGVsdCBzYW1tYW5zbGFnZW4gZ3JlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTUKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICJ0YSBib3J0IGdyZW4gKMOkdmVuIG9tIGludGUgaGVsdCBzYW1tYW5zbGFnZW4pIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1NgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJmbHl0dGEvdGEgYm9ydCBlbiBncmVuIG9jaCBkZXNzIHJlZmxvZ2ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU3Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiZmx5dHRhL3RhIGJvcnQgZW4gZ3Jlbiwgw6R2ZW4gb20gbcOlbGV0IGZpbm5zIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICJsaXN0YSBuYW1uIHDDpSBncmVuYXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU5Cittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgInNrYXBhIGdyZW5lbnMgcmVmbG9nZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjEKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAicmVkaWdlcmEgYmVza3Jpdm5pbmcgZsO2ciBncmVuZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzYyCittc2dpZCAiZm9yY2UgY3JlYXRpb24gKHdoZW4gYWxyZWFkeSBleGlzdHMpIgorbXNnc3RyICJ0dmluZ2Egc2thcGFuZGUgKG7DpHIgZGVuIHJlZGFuIGZpbm5zKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjUKK21zZ2lkICJwcmludCBvbmx5IG5vdCBtZXJnZWQgYnJhbmNoZXMiCittc2dzdHIgInZpc2EgZW5kYXN0IGVqIHNhbW1hbnNsYWduYSBncmVuYXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzcxCittc2dpZCAicHJpbnQgb25seSBtZXJnZWQgYnJhbmNoZXMiCittc2dzdHIgInZpc2EgZW5kYXN0IHNhbW1hbnNsYWduYSBncmVuYXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzc1Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJ2aXNhIGdyZW5hciBpIHNwYWx0ZXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzg4Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBzbMOlIHVwcCBIRUFEIHNvbSBnaWx0aWcgcmVmZXJlbnMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkzIGJ1aWx0aW4vY2xvbmUuYzo1NjEKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiSEVBRCBoaXR0YWRlcyBpbnRlIHVuZGVyIHJlZnMvaGVhZHMhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMworbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gb2NoIC0tdmVyYm9zZSDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZ3JlbmVuIFwiJXNcIiBmaW5ucyBpbnRlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIkdyZW5lbiBcIiVzXCIgaGFyIGluZ2VuIHVwcHN0csO2bXNpbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4OTEKK21zZ2lkICItYSBhbmQgLXIgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IG1ha2Ugc2Vuc2Ugd2l0aCBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisiZmxhZ2dvcm5hIC1hIG9jaCAtciBww6UgXCJnaXQgYnJhbmNoXCIga2FuIGludGUgYW5nZXMgdGlsbHNhbW1hbnMgbWVkIGV0dCAiCisiZ3Jlbm5hbW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tIgorInRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvXG4iCittc2dzdHIgIiIKKyJGbGFnZ2FuIC0tc2V0LXVwc3RyZWFtIHJla29tbWVuZGVyYXMgZWogb2NoIGtvbW1lciB0YXMgYm9ydC4gQW52w6RuZCAtLXRyYWNrICIKKyJlbGxlciAtLXNldC11cHN0cmVhbS10b1xuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBtYWtlICclcycgdHJhY2sgJyVzJywgZG8gdGhpczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk9tIGR1IHZpbGwgZ8O2cmEgc8OlIGF0dCBcIiVzXCIgc3DDpXJhciBcIiVzXCIgZ8O2ciBkdSBzw6UgaMOkcjpcbiIKKyJcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKK21zZ3N0ciAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gJXNcbiIKK21zZ3N0ciAiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gJXNcbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIMOkciBva2VqXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTYKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICJCZWjDtnZlciBldHQgYXJraXYgZsO2ciBhdHQgc2thcGEgZXR0IHBha2V0IChidW5kbGUpLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2MAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiQmVow7Z2ZXIgZXR0IGFya2l2IGbDtnIgYXR0IHBhY2thIHVwcCBldHQgcGFrZXQgKGJ1bmRsZSkuIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6MjQ3Cittc2dpZCAiZ2l0IGNhdC1maWxlICgtdHwtc3wtZXwtcHw8dHlwZT58LS10ZXh0Y29udikgPG9iamVjdD4iCittc2dzdHIgImdpdCBjYXQtZmlsZSAoLXR8LXN8LWV8LXB8PHR5cD58LS10ZXh0Y29udikgPG9iamVrdD4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNDgKK21zZ2lkICJnaXQgY2F0LWZpbGUgKC0tYmF0Y2h8LS1iYXRjaC1jaGVjaykgPCA8bGlzdF9vZl9vYmplY3RzPiIKK21zZ3N0ciAiZ2l0IGNhdC1maWxlICgtLWJhdGNofC0tYmF0Y2gtY2hlY2spIDwgPG9iamVrdGxpc3RhPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI2NgorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPHR5cD4ga2FuIHZhcmEgZW4gYXY6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6MjY3Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAidmlzYSBvYmpla3R0eXAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNjgKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICJ2aXNhIG9iamVrdHN0b3JsZWsiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNzAKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgImF2c2x1dGEgbWVkIG5vbGwgbsOkciBkZXQgaW50ZSB1cHBzdMOldHQgbsOlZ290IGZlbCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI3MQorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJ2aXNhIG9iamVrdGV0cyBpbm5laMOlbGwgc255Z2d0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6MjczCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImbDtnIgYmxvYi1vYmpla3QsIGvDtnIgdGV4dGNvbnYgcMOlIG9iamVrdGV0cyBpbm5laMOlbGwiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNzUKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgInZpc2EgaW5mb3JtYXRpb24gb2NoIGlubmVow6VsbCBmw7ZyIG9iamVrdCBzb20gbGlzdGFzIHDDpSBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI3OAorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAidmlzYSBpbmZvcm1hdGlvbiBmw7ZyIG9iamVrdCBzb20gbGlzdGFzIHDDpSBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTEKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IGF0dHIuLi5dIFstLV0gcGF0aG5hbWUuLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgYXR0ci4uLl0gWy0tXSBzw7ZrdsOkZy4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTIKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCBhdHRyLi4uXSA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgYXR0ci4uLl0gPCA8c8O2a3bDpGdzbGlzdGE+IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxOQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAidmlzYSBhbGxhIGF0dHJpYnV0IHNvbSBzYXR0cyBww6UgZmlsZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIwCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgImFudsOkbmQgLmdpdGF0dHJpYnV0ZXMgZW5kYXN0IGZyw6VuIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3NQorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsw6RzIGZpbG5hbW4gZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzCittc2dpZCAiaW5wdXQgcGF0aHMgYXJlIHRlcm1pbmF0ZWQgYnkgYSBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAic8O2a3bDpGdhciBhdmRlbGFzIG1lZCBudWxsLXRlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjEyNgorbXNnaWQgImdpdCBjaGVja291dC1pbmRleCBbb3B0aW9uc10gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFtmbGFnZ29yXSBbLS1dIFs8ZmlsPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODcKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiY2hlY2thIHV0IGFsbGEgZmlsZXIgaSBpbmRleGV0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTg4Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICJ0dmluZ2Egw7Z2ZXJza3Jpdm5pbmcgYXYgYmVmaW50bGlnYSBmaWxlciIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5MAorbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgImluZ2VuIHZhcm5pbmcgZsO2ciBleGlzdGVyYW5kZSBmaWxlciBvY2ggZmlsZXIgZWogaSBpbmRleGV0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTkyCittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICJjaGVja2EgaW50ZSB1dCBueWEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTQKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAidXBwZGF0ZXJhIHN0YXQtaW5mb3JtYXRpb24gaSBpbmRleGZpbGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAwCittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsw6RzIGxpc3RhbiDDtnZlciBzw7ZrdsOkZ2FyIGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAyCittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICJza3JpdiBpbm5laMOlbGwgdGlsbCB0ZW1wb3LDpHJhIGZpbGVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAzIGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJzdHJpbmciCittc2dzdHIgInN0csOkbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDQKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICJuw6RyIGZpbGVyIHNrYXBhcywgbMOkZ2cgdGlsbCA8c3Ryw6RuZz4gZsO2cnN0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA3Cittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgImtvcGllcmEgdXQgZmlsZXIgZnLDpW4gbmFtbmdpdmVuIGV0YXBwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUKK21zZ2lkICJnaXQgY2hlY2tvdXQgW29wdGlvbnNdIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgW2ZsYWdnb3JdIDxncmVuPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFtvcHRpb25zXSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFtmbGFnZ29yXSBbPGdyZW4+XSAtLSA8ZmlsPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJzw7ZrdsOkZ2VuIFwiJXNcIiBoYXIgaW50ZSB2w6VyIHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTggYnVpbHRpbi9jaGVja291dC5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJzw7ZrdsOkZ2VuIFwiJXNcIiBoYXIgaW50ZSBkZXJhcyB2ZXJzaW9uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgInPDtmt2w6RnZW4gXCIlc1wiIGlubmVow6VsbGVyIGludGUgYWxsYSBuw7ZkdsOkbmRpZ2EgdmVyc2lvbmVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgaW5uZWjDpWxsZXIgaW50ZSBuw7ZkdsOkbmRpZ2EgdmVyc2lvbmVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICJzw7ZrdsOkZyBcIiVzXCI6IGthbiBpbnRlIHNsw6UgaWhvcCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCBzYW1tYW5zbGFnbmluZ3NyZXN1bHRhdCBmw7ZyIFwiJXNcIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIzNiBidWlsdGluL2NoZWNrb3V0LmM6MjM5IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICJcIiVzXCIga2FuIGludGUgYW52w6RuZGFzIHZpZCB1cHBkYXRlcmluZyBhdiBzw7ZrdsOkZ2FyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjQ4IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICJcIiVzXCIga2FuIGludGUgYW52w6RuZGFzIG1lZCAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIkthbiBpbnRlIHVwcGRhdGVyYSBzw7ZrdsOkZ2FyIG9jaCB2w6R4bGEgdGlsbCBncmVuZW4gXCIlc1wiIHNhbXRpZGlndC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjUgYnVpbHRpbi9jaGVja291dC5jOjQyNgorbXNnaWQgImNvcnJ1cHQgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW5kZXhmaWxlbiDDpHIgdHJhc2lnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjk1IGJ1aWx0aW4vY2hlY2tvdXQuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICJzw7ZrdsOkZ2VuIFwiJXNcIiBoYXIgaW50ZSBzbGFnaXRzIGlob3AiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMzMgYnVpbHRpbi9jaGVja291dC5jOjUzNCBidWlsdGluL2Nsb25lLmM6NTg2CisjOiBidWlsdGluL21lcmdlLmM6ODExCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBueSBpbmRleGZpbCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0OAorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJkdSBtw6VzdGUgbMO2c2EgZGl0dCBiZWZpbnRsaWdhIGluZGV4IGbDtnJzdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJ1xuIgorbXNnc3RyICJLYW4gaW50ZSBza2FwYSByZWZlcmVuc2xvZyBmw7ZyIFwiJXNcIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjAyCittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQgw6RyIG51IHDDpSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLDhXRlcnN0w6RsbCBncmVuIFwiJXNcIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJSZWRhbiBww6UgXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlbDpHhsYWRlIHRpbGwgb2NoIG5vbGxzdMOkbGxkZSBncmVuZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiVsOkeGxhZGUgdGlsbCBlbiBueSBncmVuIFwiJXNcIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlbDpHhsYWRlIHRpbGwgZ3JlbmVuIFwiJXNcIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gb2NoICVkIHRpbGwuXG4iCisKKyMuIFRoZSBzaW5ndWxhciB2ZXJzaW9uCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCisiVmFybmluZzogZHUgbMOkbW5hciAlZCBpbmNoZWNrbmluZyBiYWtvbSBkaWcgc29tIGludGUgw6RyIGFuc2x1dGVuIHRpbGxcbiIKKyJuw6Vnb24gYXYgZGluYSBncmVuYXI6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clsxXSAiIgorIlZhcm5pbmc6IGR1IGzDpG1uYXIgJWQgaW5jaGVja25pbmdhciBiYWtvbSBkaWcgc29tIGludGUgw6RyIGFuc2x1dGEgdGlsbFxuIgorIm7DpWdvbiBhdiBkaW5hIGdyZW5hcjpcbiIKKyJcbiIKKyIlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggbmV3X2JyYW5jaF9uYW1lICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJPbSBkdSB2aWxsIGJlaMOlbGxhIGRlbSBnZW5vbSBhdHQgc2thcGEgZW4gbnkgZ3JlbiDDpHIgbnUgZW4gYnJhIHRpZHB1bmt0XG4iCisiYXR0IGfDtnJhIHPDpSwgbWVkOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIG55dHRfZ3Jlbm5hbW4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczMAorbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgImludGVybnQgZmVsIHZpZCBnZW5vbWfDpW5nIGF2IHJldmlzaW9uZXIgKHJldmlzaW9uIHdhbGspIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzM0Cittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIlRpZGlnYXJlIHBvc2l0aW9uIGbDtnIgSEVBRCB2YXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NjEgYnVpbHRpbi9jaGVja291dC5jOjk1MAorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIkR1IMOkciBww6UgZW4gZ3JlbiBzb20gw6RubnUgaW50ZSDDpHIgZsO2ZGQiCisKKyMuIGNhc2UgKDEpCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgcmVmZXJlbnM6ICVzIgorCisjLiBjYXNlICgxKTogd2FudCBhIHRyZWUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICJyZWZlcmVuc2VuIMOkciBpbnRlIGV0dCB0csOkZDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NjEKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAic8O2a3bDpGdhciBrYW4gaW50ZSBhbnbDpG5kYXMgdmlkIGJ5dGUgYXYgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2NCBidWlsdGluL2NoZWNrb3V0LmM6OTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIlwiJXNcIiBrYW4gaW50ZSBhbnbDpG5kYXMgdmlkIGJ5dGUgYXYgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk3MiBidWlsdGluL2NoZWNrb3V0LmM6OTc1IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODAKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIlwiJXNcIiBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIFwiJXNcIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAiS2FuIGludGUgdsOkeGxhIGdyZW4gdGlsbCBpY2tlLWluY2hlY2tuaW5nZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwOSBidWlsdGluL2djLmM6MTc3Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJ1bmRlcnRyeWNrIGbDtnJsb3Bwc3JhcHBvcnRlcmluZyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTAgYnVpbHRpbi9jaGVja291dC5jOjEwMTIgYnVpbHRpbi9jbG9uZS5jOjg5CisjOiBidWlsdGluL3JlbW90ZS5jOjE2OSBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAiZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTEKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAic2thcGEgb2NoIGNoZWNrYSB1dCBlbiBueSBncmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMworbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giCittc2dzdHIgInNrYXBhL25vbGxzdMOkbGwgb2NoIGNoZWNrYSB1dCBlbiBncmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxNAorbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgInNrYXBhIHJlZmxvZ2cgZsO2ciBueSBncmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxNQorbXNnaWQgImRldGFjaCB0aGUgSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgImtvcHBsYSBmcsOlbiBIRUFEIHZpZCBuYW1uZ2l2ZW4gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDE2Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgInPDpHR0IHVwcHN0csO2bXNpbmZvcm1hdGlvbiBmw7ZyIG55IGdyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDE4Cittc2dpZCAibmV3IGJyYW5jaCIKK21zZ3N0ciAibnkgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTgKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgIm55IGdyZW4gdXRhbiBmw7Zyw6RsZGVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxOQorbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiY2hlY2thIHV0IHbDpXIgdmVyc2lvbiBmw7ZyIGVqIHNhbW1hbnNsYWduYSBmaWxlciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjEKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiY2hlY2thIHV0IGRlcmFzIHZlcnNpb24gZsO2ciBlaiBzYW1tYW5zbGFnbmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDIzCittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgInR2aW5nYSB1dGNoZWNrbmluZyAoa2FzdGEgYm9ydCBsb2thbGEgw6RuZHJpbmdhcikiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDI0Cittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgInV0ZsO2ciBlbiAzLXbDpGdzc2FtbWFuc2xhZ25pbmcgZsO2ciBkZW4gbnlhIGdyZW5lbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjUgYnVpbHRpbi9tZXJnZS5jOjIxNQorbXNnaWQgInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIKK21zZ3N0ciAidXBwZGF0ZXJhIGlnbm9yZXJhZGUgZmlsZXIgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjYgYnVpbHRpbi9sb2cuYzoxMTExIHBhcnNlLW9wdGlvbnMuaDoyNDEKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAic3RpbCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjcKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICJrb25mbGlrdHN0aWwgKG1lcmdlIGVsbGVyIGRpZmYzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMzAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCBuby1zdWNoLWJyYW5jaCciCittc2dzdHIgImbDtnJ1dHNww6UgXCJnaXQgY2hlY2tvdXQgZ3Jlbi1zYWtuYXNcIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTQKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiBvY2ggLS1vcnBoYW4gw6RyIMO2bXNlc2lkaWd0IHV0ZXNsdXRhbmRlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3MQorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayBiZWjDtnZlciBldHQgbmFtbiBww6UgZW4gZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzgKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIkdyZW5uYW1uIHNha25hczsgZsO2cnPDtmsgbWVkIC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTExMworbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJmZWxha3RpZyBzw7ZrdsOkZ3NhbmdpdmVsc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS5cbiIKKyJEaWQgeW91IGludGVuZCB0byBjaGVja291dCAnJXMnIHdoaWNoIGNhbiBub3QgYmUgcmVzb2x2ZWQgYXMgY29tbWl0PyIKK21zZ3N0ciAiIgorIkthbiBpbnRlIHVwcGRhdGVyYSBzw7ZrdsOkZ2FyIG9jaCB2w6R4bGEgdGlsbCBncmVuZW4gXCIlc1wiIHNhbXRpZGlndC5cbiIKKyJWaWxsZSBkdSBjaGVja2EgdXQgXCIlc1wiIHNvbSBpbnRlIGthbiBsw7ZzYXMgc29tIGVuIHV0Y2hlY2tuaW5nPyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIHRhciBpbnRlIGVuIHPDtmt2w6RnIHNvbSBhcmd1bWVudCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI5Cittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2Ugb2NoIC0tbWVyZ2Ugw6RyIGlua29tcGF0aWJsYSBuw6RyXG4iCisiZHUgY2hlY2thciB1dCBmcsOlbiBpbmRleGV0LiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE5Cittc2dpZCAiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1uXSBbLXFdIFstZSA8bcO2bnN0ZXI+XSBbLXggfCAtWF0gWy0tXSA8c8O2a3bDpGdhcj4uLi4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJza3JpdiBpbnRlIHV0IG5hbW4gcMOlIGJvcnR0YWduYSBmaWxlciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUzCittc2dpZCAiZm9yY2UiCittc2dzdHIgInR2aW5nYSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjU1Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICJ0YSBib3J0IGhlbGEga2F0YWxvZ2VyIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTYgYnVpbHRpbi9kZXNjcmliZS5jOjQxMyBidWlsdGluL2dyZXAuYzo4MDMKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0OTEgYnVpbHRpbi9uYW1lLXJldi5jOjIzMSBidWlsdGluL3Nob3ctcmVmLmM6MTk5Cittc2dpZCAicGF0dGVybiIKK21zZ3N0ciAibcO2bnN0ZXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1NworbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICJsw6RnZyB0aWxsIDxtw7Zuc3Rlcj4gdGlsbCBpZ25vcmVyaW5nc3JlZ2xlciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjU4Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAidGEgw6R2ZW4gYm9ydCBpZ25vcmVyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjAKK21zZ2lkICJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJ0YSBlbmRhc3QgYm9ydCBpZ25vcmVyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzgKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IG9jaCAtWCBrYW4gaW50ZSBhbnbDpG5kYXMgc2FtdGlkaWd0IgorCisjOiBidWlsdGluL2NsZWFuLmM6ODIKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1uIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2F0dCB0aWxsIHRydWUsIG1lbiB2YXJrZW4gLW4gZWxsZXIgLWYgYW5nYXZzOyB2w6RncmFyICIKKyJzdMOkZGEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBoYXIgc3RhbmRhcmR2w6RyZGV0IHRydWUsIG1lbiB2YXJrZW4gLW4gZWxsZXIgLWYgYW5nYXZzOyAiCisidsOkZ3JhciBzdMOkZGEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNTUgYnVpbHRpbi9jbGVhbi5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiU2t1bGxlIHRhIGJvcnQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE1OSBidWlsdGluL2NsZWFuLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIlRhciBib3J0ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNjIgYnVpbHRpbi9jbGVhbi5jOjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBub3QgcmVtb3ZlICVzXG4iCittc2dzdHIgIlNrdWxsZSBpbnRlIHRhIGJvcnQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgcmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiVGFyIGludGUgYm9ydCAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzYKK21zZ2lkICJnaXQgY2xvbmUgW29wdGlvbnNdIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBbZmxhZ2dvcl0gWy0tXSA8YXJraXY+IFs8a2F0Pl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NCBidWlsdGluL2ZldGNoLmM6ODIgYnVpbHRpbi9tZXJnZS5jOjIxMgorIzogYnVpbHRpbi9wdXNoLmM6Mzk5Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJ0dmluZ2EgZsO2cmxvcHBzcmFwcG9ydGVyaW5nIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjYKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAic2thcGEgaW50ZSBuw6Vnb24gdXRjaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NyBidWlsdGluL2Nsb25lLmM6NjkgYnVpbHRpbi9pbml0LWRiLmM6NDg4Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJza2FwYSBldHQgbmFrZXQgKFwiYmFyZVwiKSBhcmtpdiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcyCittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgInNrYXBhIGV0dCBzcGVnZWxhcmtpdiAoaW1wbGljZXJhciBcImJhcmVcIikiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NAorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJmw7ZyIGF0dCBrbG9uYSBmcsOlbiBldHQgbG9rYWx0IGFya2l2IgorCisjOiBidWlsdGluL2Nsb25lLmM6NzYKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAic2thcGEgaW50ZSBsb2thbGEgaMOlcmRhIGzDpG5rYXIsIGtvcGllcmEgYWxsdGlkIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzgKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAic2thcGEgc29tIGV0dCBkZWxhdCBhcmtpdiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwIGJ1aWx0aW4vY2xvbmUuYzo4MgorbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgImluaXRpZXJhIHVuZGVybW9kdWxlciBpIGtsb25lbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgzIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NQorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAibWFsbGthdGFsb2ciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NCBidWlsdGluL2luaXQtZGIuYzo0ODYKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICJrYXRhbG9nIGF0dCBhbnbDpG5kYSBtYWxsYXIgZnLDpW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NgorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJyZWZlcmVuc2Fya2l2IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODcgYnVpbHRpbi9jb2x1bW4uYzoyNiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgIm5hbWUiCittc2dzdHIgIm5hbW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4OAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAiYW52w6RuZCA8bmFtbj4gaXN0w6RsbGV0IGbDtnIgXCJvcmlnaW5cIiBmw7ZyIGF0dCBzcMOlcmEgdXBwc3Ryw7ZtcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAiY2hlY2thIHV0IDxncmVuPiBpc3TDpGxsZXQgZsO2ciBmasOkcnJlbnMgSEVBRCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyCittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAic8O2a3bDpGcgdGlsbCBnaXQtdXBsb2FkLXBhY2sgcMOlIGZqw6RycmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMgYnVpbHRpbi9mZXRjaC5jOjgzIGJ1aWx0aW4vZ3JlcC5jOjc0OAorbXNnaWQgImRlcHRoIgorbXNnc3RyICJkanVwIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiCittc2dzdHIgInNrYXBhIGVuIGdydW5kIGtsb24gcMOlIGRldHRhIGRqdXAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NgorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAia2xvbmEgZW5kYXN0IGVuIGdyZW4sIEhFQUQgZWxsZXIgLS1icmFuY2giCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NyBidWlsdGluL2luaXQtZGIuYzo0OTQKK21zZ2lkICJnaXRkaXIiCittc2dzdHIgImdpdGthdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgInNlcGFyZXJhIGdpdGthdGFsb2dlbiBmcsOlbiBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAibnlja2VsPXbDpHJkZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAic3TDpGxsIGluIGtvbmZpZ3VyYXRpb24gaSBkZXQgbnlhIGFya2l2ZXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCBkaXJlY3RvcnkuIgorbXNnc3RyICJyZWZlcmVuc2Fya2l2ZXQgXCIlc1wiIMOkciBpbnRlIGVuIGxva2FsIGthdGFsb2cuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBrYXRhbG9nZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA4IGJ1aWx0aW4vZGlmZi5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBzdGF0dXMgcMOlIFwiJXNcIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgZmlubnMgb2NoIMOkciBpbmdlbiBrYXRhbG9nIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzXG4iCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBzdGF0dXMgcMOlICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBsw6Rua2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBrb3BpZXJhIGZpbGVuIHRpbGwgXCIlc1wiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgImtsYXJ0LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJLdW5kZSBpbnRlIGhpdHRhIGZqw6RycmdyZW5lbiAlcyBmw7ZyIGF0dCBrbG9uYS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NTIKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKyJIRUFEIGhvcyBmasOkcnJlbiBwZWthciBww6UgZW4gb2JlZmludGxpZyByZWZlcmVucywga2FuIGludGUgY2hlY2thIHV0LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjkwCittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiRsO2ciBtw6VuZ2EgYXJndW1lbnQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6Njk0Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICJEdSBtw6VzdGUgYW5nZSBldHQgYXJraXYgYXR0IGtsb25hLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgImZsYWdnb3JuYSAtLWJhcmUgb2NoIC0tb3JpZ2luICVzIMOkciBpbmtvbXBhdGlibGEuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiYXJraXZldCBcIiVzXCIgZmlubnMgaW50ZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcyNAorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLWRlcHRoIGlnbm9yZXJhcyBpIGxva2FsYSBrbG9uaW5nYXI7IGFudsOkbmQgZmlsZTovLyBpc3TDpGxsZXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiZGVzdGluYXRpb25zc8O2a3bDpGdlbiBcIiVzXCIgZmlubnMgcmVkYW4gb2NoIMOkciBpbnRlIGVuIHRvbSBrYXRhbG9nLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImFyYmV0c3Ryw6RkZXQgXCIlc1wiIGZpbm5zIHJlZGFuLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1NyBidWlsdGluL2Nsb25lLmM6NzcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGlubGVkYW5kZSBrYXRhbG9nZXIgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcycuIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGFyYmV0c2thdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIktsb25hciB0aWxsIGV0dCBuYWtldCBhcmtpdiBcIiVzXCIuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICJLbG9uYXIgdGlsbCBcIiVzXCIuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBjbG9uZSAlcyIKK21zZ3N0ciAiVmV0IGludGUgaHVyIG1hbiBrbG9uYXIgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIkZqw6RycmdyZW5lbiAlcyBoaXR0YWRlcyBpbnRlIGkgdXBwc3Ryw7Ztc2Fya2l2ZXQgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NzkKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJEdSB2ZXJrYXIgaGEga2xvbmF0IGV0dCB0b210IGFya2l2LiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo5Cittc2dpZCAiZ2l0IGNvbHVtbiBbb3B0aW9uc10iCittc2dzdHIgImdpdCBjb2x1bW4gW2ZsYWdnb3JdIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI2Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICJzbMOlIHVwcCBrb25maWd1cmF0aW9uc3ZhcmlhYmxlciIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNyBidWlsdGluL2NvbHVtbi5jOjI4Cittc2dpZCAibGF5b3V0IHRvIHVzZSIKK21zZ3N0ciAidXRzZWVuZGUgYXR0IGFudsOkbmRhIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI5Cittc2dpZCAiTWF4aW11bSB3aWR0aCIKK21zZ3N0ciAiTWF4aW1hbCBicmVkZCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIlNwYWx0ZnlsbG5hZCBpIHbDpG5zdGVya2FudGVuIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIlNwYWx0ZnlsbG5hZCBpIGjDtmdlcmthbnRlbiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICJTcGFsdGZ5bGxuYWQgbWVsbGFuIHNwYWx0ZXIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIi0tY29tbWFuZCBtw6VzdGUgdmFyYSBmw7Zyc3RhIGFyZ3VtZW50IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM0Cittc2dpZCAiZ2l0IGNvbW1pdCBbb3B0aW9uc10gWy0tXSA8ZmlsZXBhdHRlcm4+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFtmbGFnZ29yXSBbLS1dIDxmaWxtw7ZzdGVyPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozOQorbXNnaWQgImdpdCBzdGF0dXMgW29wdGlvbnNdIFstLV0gPGZpbGVwYXR0ZXJuPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbZmxhZ2dvcl0gWy0tXSA8ZmlsbcO2bnN0ZXI+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiRGl0dCBuYW1uIG9jaCBlLXBvc3RhZHJlc3Mga29uZmlndXJlcmFkZXMgYXV0b21hdGlza3QgYmFzZXJhdCBww6VcbiIKKyJkaXR0IGFudsOkbmRhci1pZCBvY2ggdsOkcmRuYW1uLiBLb250cm9sbGVyYSBhdHQgZGUgw6RyIHJpa3RpZ2EuIER1XG4iCisia2FuIGbDtnJoaW5kcmEgZGV0IGjDpHIgbWVkZGVsYW5kZXQgZ2Vub20gYXR0IHN0w6RsbGEgZGVtIGV4cGxpY2l0OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIkRpdHQgbmFtblwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBkdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIk7DpHIgZHUgZ2pvcnQgZGV0IGthbiBkdSByw6R0dGEgaWRlbnRpdGV0ZW4gc29tIGFudsOkbmRlcyBmw7ZyIGRlbiBow6RyXG4iCisiaW5jaGVja25pbmdlbiBtZWQ6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU2Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisiRHUgYmFkIG9tIGF0dCB1dMO2a2EgZGVuIHNlbmFzdGUgaW5jaGVja25pbmdlbiwgbWVuIG9tIGR1IGfDtnIgZGV0XG4iCisiYmxpciBkZW4gdG9tLiBEdSBrYW4ga8O2cmEga29tbWFuZG90IHDDpSBueXR0IG1lZCAtLWFsbG93LWVtcHR5LCBlbGxlclxuIgorInPDpSBrYW4gZHUgdGEgYm9ydCBpbmNoZWNrbmluZ2VuIGhlbHQgbWVkIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjEKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKyJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAiIgorIkRlbiB0aWRpZ2FyZSBcImNoZXJyeS1waWNrXCI6ZW4gw6RyIG51IHRvbSwga2Fuc2tlIHDDpSBncnVuZCBhdiBlbiBsw7ZzdFxuIgorImtvbmZsaWt0LiBPbSBkdSB2aWxsIGNoZWNrYSBpbiBkZW4gw6RuZMOlIGFudsOkbmRlciBkdTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisiQW5uYXJzIGFudsOkbmRlciBkdSBcImdpdCByZXNldFwiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MjU3Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICJtaXNzbHlja2FkZXMgcGFja2EgdXBwIEhFQUQ6cyB0csOkZG9iamVrdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoyOTkKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSB0ZW1wb3LDpHIgaW5kZXhmaWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzA1Cittc2dpZCAiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIKK21zZ3N0ciAiaW50ZXJha3RpdiB0aWxsw6RnZ25pbmcgbWlzc2x5Y2thZGVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMzOCBidWlsdGluL2NvbW1pdC5jOjM1OSBidWlsdGluL2NvbW1pdC5jOjQwOQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZmlsZW4gbmV3X2luZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5MAorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAia2FuIGludGUgdXRmw7ZyYSBlbiBkZWx2aXMgaW5jaGVja25pbmcgdW5kZXIgZW4gc2FtbWFuc2xhZ25pbmcuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5MgorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAia2FuIGludGUgdXRmw7ZyYSBlbiBkZWx2aXMgaW5jaGVja25pbmcgdW5kZXIgZW4gY2hlcnJ5LXBpY2suIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMgorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgaW5kZXhldCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MjIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIHRlbXBvcsOkciBpbmRleGZpbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MDkgYnVpbHRpbi9jb21taXQuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQ6ICVzIgorbXNnc3RyICJmZWxha3RpZyBpbmNoZWNrbmluZzogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTM4Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAiZmVsZm9ybWFkIFwiLS1hdXRob3JcIi1mbGFnZ2EiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpZGVudCBzdHJpbmc6ICclcyciCittc2dzdHIgIkZlbGFrdGlnIGluZHJhZ25pbmdzc3Ryw6RuZzogXCIlc1wiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU5NiBidWlsdGluL2NvbW1pdC5jOjYyOSBidWlsdGluL2NvbW1pdC5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzbMOlIHVwcCBpbmNoZWNrbmluZ2VuICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwOCBidWlsdGluL3Nob3J0bG9nLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIihsw6RzZXIgbG9nZ21lZGRlbGFuZGUgZnLDpW4gc3RhbmRhcmQgaW4pXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjEwCittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgbG9nZyBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBsb2dnZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYyMAorbXNnaWQgImNvbW1pdCBoYXMgZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiaW5jaGVja25pbmdlbiBoYXIgZXR0IHRvbXQgbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MzYKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY0MAorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzA1Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgaW5jaGVja25pbmdzbWFsbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGV0IHZlcmthciBzb20gZHUgY2hlY2thciBpbiBlbiBzYW1tYW5zbGFnbmluZy5cbiIKKyJPbSBkZXQgaW50ZSBzdMOkbW1lciB0YXIgZHUgYm9ydCBmaWxlblxuIgorIlx0JXNcbiIKKyJvY2ggZsO2cnPDtmtlciBpZ2VuLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEZXQgdmVya2FyIHNvbSBkdSBjaGVja2FyIGluIGVuIGNoZXJyeS1waWNrLlxuIgorIk9tIGRldCBpbnRlIHN0w6RtbWVyIHRhciBkdSBib3J0IGZpbGVuXG4iCisiXHQlc1xuIgorIm9jaCBmw7Zyc8O2a2VyIGlnZW4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMzCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiQW5nZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCBmw7ZyIGRpbmEgw6RuZHJpbmdhci4gUmFkZXIgc29tIGlubGVkc1xuIgorIm1lZCBcIiNcIiBrb21tZXIgaWdub3JlcmFzLCBvY2ggZXR0IHRvbXQgbWVkZGVsYW5kZSBhdmJyeXRlciBpbmNoZWNrbmluZ2VuLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczOAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnIycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJBbmdlIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IGbDtnIgZGluYSDDpG5kcmluZ2FyLiBSYWRlciBzb20gaW5sZWRzXG4iCisibWVkIFwiI1wiIGtvbW1lciBiZWjDpWxsYXM7IGR1IGthbiBzasOkbHYgdGEgYm9ydCBkZW0gb20gZHUgdmlsbC5cbiIKKyJFdHQgdG9tdCBtZWRkZWxhbmRlIGF2YnJ5dGVyIGluY2hlY2tuaW5nZW4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlcyIKK21zZ3N0ciAiJXNGw7ZyZmF0dGFyZTogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlcyIKK21zZ3N0ciAiJXNJbmNoZWNrYXJlOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzgKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiS2FuIGludGUgbMOkc2EgaW5kZXhldCIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MTUKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiRmVsIHZpZCBieWdnYW5kZSBhdiB0csOkZCIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MzAgYnVpbHRpbi90YWcuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICJBbmdlIG1lZGRlbGFuZGV0IGVuIGF2IGZsYWdnb3JuYSAtbSBlbGxlciAtRi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhpc3RpbmcgYXV0aG9yIGZvdW5kIHdpdGggJyVzJyIKK21zZ3N0ciAiSGl0dGFkZSBpbmdlbiBiZWZpbnRsaWcgZsO2cmZhdHRhcmUgbWVkIFwiJXNcIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5NDIgYnVpbHRpbi9jb21taXQuYzoxMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiT2dpbHRpZ3QgbMOkZ2UgZsO2ciBvc3DDpXJhZGUgZmlsZXI6IFwiJXNcIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5ODIKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSBiw6VkZSAtLXJlc2V0LWF1dGhvciBvY2ggLS1hdXRob3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTkzCittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIkR1IGhhciBpbmdldCBhdHQgdXTDtmthLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTYKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4gc2FtbWFuc2xhZ25pbmcgLS0ga2FuIGludGUgdXTDtmthLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4gY2hlcnJ5LXBpY2sgLS0ga2FuIGludGUgdXTDtmthLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDAxCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiRmxhZ2dvcm5hIC0tc3F1YXNoIG9jaCAtLWZpeHVwIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxMQorbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICJFbmRhc3QgZW4gYXYgLWMvLUMvLUYvLS1maXh1cCBrYW4gYW52w6RuZGFzLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDEzCittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLy0tZml4dXAuIgorbXNnc3RyICJGbGFnZ2FuIC1tIGthbiBpbnRlIGtvbWJpbmVyYXMgbWVkIC1jLy1DLy1GLy0tZml4dXAuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMjEKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICItLXJlc2V0LWF1dGhvciBrYW4gZW5kYXN0IGFudsOkbmRhcyBtZWQgLUMsIC1jIGVsbGVyIC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMzgKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJFbmRhc3QgZW4gYXYgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2gga2FuIGFudsOkbmRhcy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA0MAorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiRHUgbcOlc3RlIGFuZ2Ugc8O2a3bDpGdhciB0aWxsc2FtbWFucyBtZWQgLS1pbmNsdWRlLy0tb25seS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA0MgorbXNnaWQgIkNsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iCittc2dzdHIgIlNtYXJ0Li4uIHV0w7ZrYSBkZW4gc2VuYXN0ZSBtZWQgc211dHNpZ3QgaW5kZXguIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNDQKK21zZ2lkICJFeHBsaWNpdCBwYXRocyBzcGVjaWZpZWQgd2l0aG91dCAtaSBub3IgLW87IGFzc3VtaW5nIC0tb25seSBwYXRocy4uLiIKK21zZ3N0ciAiRXhwbGljaXRhIHPDtmt2w6RnYXIgYW5nYXZzIHV0YW4gLWkgZWxsZXIgLW87IGFudGFyIC0tb25seSBzw7ZrdsOkZ2FyLi4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTQgYnVpbHRpbi90YWcuYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIkZlbGFrdGlndCBzdMOkZG5pbmdzbMOkZ2UgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1OQorbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIkthbiBpbnRlIGFuZ2Ugc8O2a3bDpGdhciBtZWQgLWEuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTYgYnVpbHRpbi9jb21taXQuYzoxMzg0Cittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICJ2aXMga29uY2lzIHN0YXR1cyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTU4IGJ1aWx0aW4vY29tbWl0LmM6MTM4NgorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJ2aXNhIGluZm9ybWF0aW9uIG9tIGdyZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2MCBidWlsdGluL2NvbW1pdC5jOjEzODggYnVpbHRpbi9wdXNoLmM6Mzg5Cittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgIm1hc2tpbmzDpHNiYXIgdXRkYXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjMgYnVpbHRpbi9jb21taXQuYzoxMzkwCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgInRlcm1pbmVyYSBwb3N0ZXIgbWVkIE5VTCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY1IGJ1aWx0aW4vY29tbWl0LmM6MTM5MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjM2CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjM5IGJ1aWx0aW4vdGFnLmM6NDYxCittc2dpZCAibW9kZSIKK21zZ3N0ciAibMOkZ2UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2NiBidWlsdGluL2NvbW1pdC5jOjEzOTMKK21zZ2lkICJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgInZpc2Egb3Nww6VyYWRlIGZpbGVyLCB2YWxmcmlhIGzDpGdlbjogYWxsYSwgbm9ybWFsLCBuby4gKFN0YW5kYXJkOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjkKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgInZpc2EgaWdub3JlcmFkZSBmaWxlciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTcwIHBhcnNlLW9wdGlvbnMuaDoxNTEKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJuw6RyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzEKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmVyYSDDpG5kcmluZ2FyIGkgdW5kZXJtb2R1bGVyLCB2YWxmcml0dCBuw6RyOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTczCittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAidmlzYSBvc3DDpXJhZGUgZmlsZXIgaSBzcGFsdGVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyNDIKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJrdW5kZSBpbnRlIHNsw6UgdXBwIGVuIHByZWNpcyBza2FwYWQgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTI0NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBlbiBwcmVjaXMgc2thcGFkIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyODUKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJmcsOlbmtvcHBsYWQgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjg3Cittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAocm90aW5jaGVja25pbmcpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTQKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICJ1bmRlcnRyeWNrIHNhbW1hbmZhdHRuaW5nIGVmdGVyIGZyYW1nw6VuZ3NyaWsgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NQorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAidmlzYSBkaWZmIGkgbWFsbGVuIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NworbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTggYnVpbHRpbi90YWcuYzo0NTkKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsw6RzIG1lZGRlbGFuZGUgZnLDpW4gZmlsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTkKK21zZ2lkICJhdXRob3IiCittc2dzdHIgImbDtnJmYXR0YXJlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTkKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAiw7Z2ZXJzdHlyIGbDtnJmYXR0YXJlIGbDtnIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYwIGJ1aWx0aW4vZ2MuYzoxNzgKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXR1bSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYwCittc2dpZCAib3ZlcnJpZGUgZGF0ZSBmb3IgY29tbWl0IgorbXNnc3RyICLDtnZlcnN0eXIgZGF0dW0gZsO2ciBpbmNoZWNrbmlnbmVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjEgYnVpbHRpbi9tZXJnZS5jOjIwNiBidWlsdGluL25vdGVzLmM6NTM3CisjOiBidWlsdGluL25vdGVzLmM6Njk0IGJ1aWx0aW4vdGFnLmM6NDU3Cittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAibWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYxCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImluY2hlY2tuaW5nc21lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLDpXRlcmFudsOkbmQgb2NoIHJlZGlnZXJhIG1lZGRlbGFuZGUgZnLDpW4gYW5naXZlbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYzCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIsOldGVyYW52w6RuZCBtZWRkZWxhbmRlIGZyw6VuIGFuZ2l2ZW4gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJhbnbDpG5kIGF1dG9zcXVhc2gtZm9ybWF0ZXJhdCBtZWRkZWxhbmRlIGbDtnIgYXR0IGZpeGEgYW5naXZlbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gc3F1YXNoIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJhbnbDpG5kIGF1dG9zcXVhc2gtZm9ybWF0ZXJhdCBtZWRkZWxhbmRlIGbDtnIgYXR0IHNsw6UgaWhvcCBtZWQgYW5naXZlbiAiCisiaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NgorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgImphZyDDpHIgbnUgZsO2cmZhdHRhcmUgYXYgaW5jaGVja25pbmdlbiAoYW52w6RuZHMgbWVkIC1DLy1jLy0tYW1lbmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjcgYnVpbHRpbi9sb2cuYzoxMDY4IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA5Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICJsw6RnZyB0aWxsIFNpZ25lZC1vZmYtYnk6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjgKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgImFudsOkbmQgYW5naXZlbiBtYWxsZmlsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjkKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAidHZpbmdhIHJlZGlnZXJpbmcgYXYgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgInN0YW5kYXJkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAgYnVpbHRpbi90YWcuYzo0NjIKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJodXIgYmxhbmtzdGVnIG9jaCAja29tbWVudGFyZXIgc2thbGwgdGFzIGJvcnQgZnLDpW4gbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzcxCittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImlua2x1ZGVyYSBzdGF0dXMgaSBtYWxsZW4gZsO2ciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzcyIGJ1aWx0aW4vbWVyZ2UuYzoyMTMgYnVpbHRpbi90YWcuYzo0NjMKK21zZ2lkICJrZXkgaWQiCittc2dzdHIgIm55Y2tlbC1pZCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzczIGJ1aWx0aW4vbWVyZ2UuYzoyMTQKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIkdQRy1zaWduZXJhIGluY2hlY2tuaW5nIgorCisjLiBlbmQgY29tbWl0IG1lc3NhZ2Ugb3B0aW9ucworIzogYnVpbHRpbi9jb21taXQuYzoxMzc2Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBpbmNoZWNrbmluZ2VucyBpbm5laMOlbGwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3NworbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiY2hlY2thIGluIGFsbGEgw6RuZHJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OAorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBhbmdpdm5hIGZpbGVyIHRpbGwgaW5kZXhldCBmw7ZyIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzkKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAibMOkZ2cgdGlsbCBmaWxlciBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgwCittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAibMOkZ2cgdGlsbCDDpG5kcmluZ2FyIGludGVyYWt0aXZ0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODEKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgImNoZWNrYSBlbmRhc3QgaW4gYW5naXZuYSBmaWxlciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgyCittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgaG9vayIKK21zZ3N0ciAiZsO2cmJpZ8OlIHByZS1jb21taXQta3JvayIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgzCittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAidmlzYSB2YWQgc29tIHNrdWxsZSBjaGVja2FzIGluIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTEKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgImzDpGdnIHRpbGwgZsO2cmVnw6VlbmRlIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTIKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgImbDtnJiaWfDpSBwb3N0LXJld3JpdGUta3JvayIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzk3Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAib2sgYXR0IHJlZ2lzdHJlcmEgZW4gdG9tIMOkbmRyaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MDAKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICJvayBhdHQgcmVnaXN0cmVyYSBlbiDDpG5kcmluZyBtZWQgdG9tdCBtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MzIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgSEVBRDpzIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzAgYnVpbHRpbi9tZXJnZS5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBcIiVzXCIgZsO2ciBsw6RzbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIlRyYXNpZyBNRVJHRV9IRUFELWZpbCAoJXMpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIE1FUkdFX01PREUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgaW5jaGVja25pbmdzbWVkZGVsYW5kZTogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIkF2YnJ5dGVyIGluY2hlY2tuaW5nOyBtZWRkZWxhbmRldCBpbnRlIHJlZGlnZXJhdC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgIkF2YnJ5dGVyIHDDpSBncnVuZCBhdiB0b210IGluY2hlY2tuaW5nc21lZGRlbGFuZGUuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzNyBidWlsdGluL21lcmdlLmM6OTM1IGJ1aWx0aW4vbWVyZ2UuYzo5NjAKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgaW5jaGVja25pbmdzb2JqZWt0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NTgKK21zZ2lkICJjYW5ub3QgbG9jayBIRUFEIHJlZiIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6VzYSBIRUFELXJlZmVyZW5zIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NjIKK21zZ2lkICJjYW5ub3QgdXBkYXRlIEhFQUQgcmVmIgorbXNnc3RyICJrdW5kZSBpbnRlIHVwcGRhdGVyYSBIRUFELXJlZmVyZW5zIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzMKK21zZ2lkICIiCisiUmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBvciBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiQXJraXZldCBoYXIgdXBwZGF0ZXJhdHMsIG1lbiBrdW5kZSBpbnRlIHNrcml2YSBmaWxlblxuIgorIm5ld19pbmRleC4gS29udHJvbGxlcmEgYXR0IGRpc2tlbiBpbnRlIMOkciBmdWxsIG9jaFxuIgorImF0dCBrdm90ZW4gaW50ZSBoYXIgw7Z2ZXJza3JpZGl0cywgb2NoIGvDtnIgc2VkYW5cbiIKKyJcImdpdCByZXNldCBIRUFEXCIgZsO2ciBhdHQgw6V0ZXJzdMOkbGxhLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3Cittc2dpZCAiZ2l0IGNvbmZpZyBbb3B0aW9uc10iCittc2dzdHIgImdpdCBjb25maWcgW2ZsYWdnb3JdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUyCittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIktvbmZpZ3VyYXRpb25zZmlsZW5zIHBsYXRzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUzCittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBnbG9iYWwga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTQKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICJhbnbDpG5kIHN5c3RlbWV0cyBrb25maWd1cmF0aW9uc2ZpbCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NQorbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICJhbnbDpG5kIGFya2l2ZXRzIGtvbmZpZ3VyYXRpb25zZmlsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU2Cittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICJhbnbDpG5kIGFuZ2l2ZW4ga29uZmlndXJhdGlvbnNpbCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NworbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiw4V0Z8OkcmQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTgKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiaMOkbXRhIHbDpHJkZTogbmFtbiBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU5Cittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJow6RtdGEgYWxsYSB2w6RyZGVuOiBueWNrZWwgW3bDpHJkZS1yZWd1dHRyXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJow6RtdGEgdsOkcmRlbiBmw7ZyIHJlZ3V0dHI6IG5hbW4tcmVndXR0ciBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxCittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgImVyc8OkdHQgYWxsYSBtb3RzdmFyYW5kZSB2YXJpYWJsZXI6IG5hbW4gdsOkcmRlIFt2w6RyZGUtcmVndXR0cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjIKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgImzDpGdnIHRpbGwgZW4gbnkgdmFyaWFiZWw6IG5hbW4gdsOkcmRlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzCittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAidGEgYm9ydCBlbiB2YXJpYWJlbDogbmFtbiBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY0Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgInRhIGJvcnQgYWxsYSB0csOkZmZhcjogbmFtbiBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1Cittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICJieXQgbmFtbiBww6Ugc2VrdGlvbjogZ2FtbWFsdC1uYW1uIG55dHQtbmFtbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NgorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgInRhIGJvcnQgZW4gc2VrdGlvbjogbmFtbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NworbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJ2aXNhIGFsbGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjgKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAiw7ZwcG5hIHRleHRyZWRpZ2VyaW5nc3Byb2dyYW0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjkgYnVpbHRpbi9jb25maWcuYzo3MAorbXNnaWQgInNsb3QiCittc2dzdHIgInBsYXRzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5Cittc2dpZCAiZmluZCB0aGUgY29sb3IgY29uZmlndXJlZDogW2RlZmF1bHRdIgorbXNnc3RyICJoaXR0YSBkZW4gaW5zdMOkbGxkYSBmw6RyZ2VuOiBbZGVmYXVsdF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzAKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgImhpdHRhIGbDpHJnaW5zdMOkbGxuaW5nZW46IFtzdGRvdXQtaXMtdHR5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MQorbXNnaWQgIlR5cGUiCittc2dzdHIgIlR5cCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MgorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAidsOkcmRldCDDpHIgXCJ0cnVlXCIgZWxsZXIgXCJmYWxzZVwiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczCittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgInbDpHJkZXQgw6RyIGV0dCBkZWNpbWFsdCB0YWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgInbDpHJkZXQgw6RyIC0tYm9vbCBlbGxlciAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgInbDpHJkZXQgw6RyIGVuIHPDtmt2w6RnIChmaWwtIGVsbGVyIGthdGFsb2duYW1uKSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NgorbXNnaWQgIk90aGVyIgorbXNnc3RyICJBbmRyYSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NworbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAidGVybWluZXJhIHbDpHJkZW4gbWVkIE5VTC1ieXRlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICJyZXNwZWt0ZXJhIGlua2x1ZGVyaW5nc2RpcmVrdGl2IHZpZCB1cHBzbGFnIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo2OQorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxNQorbXNnaWQgImdpdCBkZXNjcmliZSBbb3B0aW9uc10gPGNvbW1pdHRpc2g+KiIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFtmbGFnZ29yXSA8aW5jaGVja25pbmctaWd0PioiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxNgorbXNnaWQgImdpdCBkZXNjcmliZSBbb3B0aW9uc10gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFtmbGFnZ29yXSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiZGVuIGFubm90ZXJhZGUgdGFnZ2VuICVzIGludGUgdGlsbGfDpG5nbGlnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgImRlbiBhbm5vdGVyYWRlIHRhZ2dlbiAlcyBoYXIgaW5nZXQgaW5iw6RkZGF0IG5hbW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAidGFnZ2VuIFwiJXNcIiDDpHIgaSB2ZXJrbGlnaGV0ZW4gXCIlc1wiIGjDpHIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIk9iamVrdG5hbW5ldCDDpHIgaW50ZSBnaWx0aWd0OiAlcyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMgw6RyIGludGUgZXR0IGdpbHRpZ3QgXCIlc1wiLW9iamVrdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgImluZ2VuIHRhZ2cgbW90c3ZhcmFyIFwiJXNcIiBleGFrdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJzZWFyY2hpbmcgdG8gZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAic8O2a2VyIGbDtnIgYXR0IGJlc2tyaXZhICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgImF2c2x1dGFkZSBzw7ZrbmluZyBww6UgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIkluZ2EgYW5ub3RlcmFkZSB0YWdnYXIga2FuIGJlc2tyaXZhIFwiJXNcIi5cbiIKKyJEZXQgZmlubnMgZG9jayBvYW5ub3RlcmFkZSB0YWdnYXI6IHRlc3RhIC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIkluZ2EgdGFnZ2FyIGthbiBiZXNrcml2YSBcIiVzXCIuXG4iCisiVGVzdGEgLS1hbHdheXMsIGVsbGVyIHNrYXBhIG7DpWdyYSB0YWdnYXIuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICJ0cmF2ZXJzZXJhZGUgJWx1IGluY2hlY2tuaW5nYXJcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyJtZXIgw6RuICVpIHRhZ2dhciBoaXR0YWRlczsgbGlzdGFyIGRlICVpIHNlbmFzdGVcbiIKKyJnYXYgdXBwIHPDtmtuaW5nZW4gdmlkICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDMKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICJoaXR0YSB0YWdnZW4gc29tIGtvbW1lciBlZnRlciBpbmNoZWNrbmluZ2VuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA0Cittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAiZmVsc8O2ayBzw7Zrc3RyYXRlZ2luIHDDpSBzdGFuZGFyZCBmZWwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDUKK21zZ2lkICJ1c2UgYW55IHJlZiBpbiAuZ2l0L3JlZnMiCittc2dzdHIgImFudsOkbmQgYWxsYSByZWZlcmVuc2VyIGkgLmdpdC9yZWZzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA2Cittc2dpZCAidXNlIGFueSB0YWcgaW4gLmdpdC9yZWZzL3RhZ3MiCittc2dzdHIgImFudsOkbmQgYWxsYSB0YWdnYXIgaSAuZ2l0L3JlZnMvdGFncyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNworbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgImFudsOkbmQgYWxsdGlkIGzDpW5ndCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTAKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICJza3JpdiBlbmRhc3QgdXQgZXhha3RhIHRyw6RmZmFyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDEyCittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiw7Z2ZXJ2w6RnIGRlIDxuPiBueWFzdGUgdGFnZ2FybmEgKHN0YW5kYXJkOiAxMCkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTQKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLDtnZlcnbDpGcgZW5kYXN0IHRhZ2dhciBzb20gbW90c3ZhcmFyIDxtw7Zuc3Rlcj4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTYgYnVpbHRpbi9uYW1lLXJldi5jOjIzOAorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAidmlzYSBmw7Zya29ydGFkZSBpbmNoZWNrbmluZ3NvYmpla3Qgc29tIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDE3Cittc2dpZCAibWFyayIKK21zZ3N0ciAibcOkcmtlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDE4Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICJsw6RnZyB0aWxsIDxtw6Rya2U+IHDDpSBsb3J0aWd0IGFyYmV0c3Ryw6RkIChzdGFuZGFyZDogXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzYKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIMOkciBpbmtvbXBhdGliZWwgbWVkIC0tYWJicmV2PTAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NjIKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAiSW5nYSBuYW1uIGhpdHRhZGVzLCBrYW4gaW50ZSBiZXNrcml2YSBuw6Vnb3QuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDgyCittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXR0aXNoZXMiCittc2dzdHIgIi0tZGlydHkgw6RyIGlua29tcGF0aWJlbHQgbWVkIFwiY29tbWl0dGlzaFwiLXbDpHJkZW4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICJcIiVzXCI6IGludGUgZW4gbm9ybWFsIGZpbCBlbGxlciBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIm9naWx0aWcgZmxhZ2dhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzAxCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIkludGUgZXR0IGdpdC1hcmtpdiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJvYmpla3RldCBcIiVzXCIgc29tIGFuZ2F2cyDDpHIgZmVsYWt0aWd0LiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiAlZCB0cmVlcyBnaXZlbjogJyVzJyIKK21zZ3N0ciAibWVyIMOkbiAlZCB0csOkZCBhbmdhdnM6IFwiJXNcIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIm1lciDDpG4gdHbDpSBibG9iYmFyIGFuZ2F2czogXCIlc1wiIgorCisjOiBidWlsdGluL2RpZmYuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAiZWogaGFudGVyYXQgb2JqZWt0IFwiJXNcIiBhbmdhdnMuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjIKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LWZsYWdnb3JdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjM1Cittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAidmlzYSBmw7ZybG9wcCBlZnRlciA8bj4gb2JqZWt0IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjM3Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICJ2w6RsaiBoYW50ZXJpbmcgYXYgc2lnbmVyYWRlIHRhZ2dhciIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0MAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgInbDpGxqIGhhbnRlcmluZyBhdiB0YWdnYXIgc29tIGhhciB0YWdnZmlsdHJlcmFkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2NDMKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAiRHVtcCBtw6Rya2VuIHRpbGwgZmlsZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2NDUKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIkltcG9ydGVyYSBtw6Rya2VuIGZyw6VuIGZpbGVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjQ3Cittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIkZlamthIHRhZ2dhcmUgbsOkciB0YWdnZW4gc2FrbmFyIGVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjQ5Cittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIlNrcml2IHV0IGhlbGEgdHLDpGRldCBmw7ZyIHZhcmplIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjUxCittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIkFudsOkbmQgZG9uZS1mdW5rdGlvbmVuIGbDtnIgYXR0IGF2c2x1dGEgc3Ryw7ZtbWVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjUyCittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJIb3BwYSDDtnZlciBza3Jpdm5pbmcgYXYgYmxvYi1kYXRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBmZXRjaCBbPGZsYWdnb3I+XSBbPGFya2l2PiBbPHJlZnNwZWM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzxmbGFnZ29yPl0gPGdydXBwPiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIyCittc2dpZCAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iCittc2dzdHIgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8ZmxhZ2dvcj5dIFsoPGFya2l2PiB8IDxncnVwcD4pLi4uXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIzCittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgImjDpG10YSBmcsOlbiBhbGxhIGZqw6RycmFyIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjIKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgImzDpGdnIHRpbGwgaSAuZ2l0L0ZFVENIX0hFQUQgaXN0w6RsbGV0IGbDtnIgYXR0IHNrcml2YSDDtnZlciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY0Cittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICJzw7ZrdsOkZyB0aWxsIHVwbG9hZCBwYWNrIHDDpSBmasOkcnJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAidHZpbmdhIMO2dmVyc2tyaXZuaW5nIGF2IGxva2FsIGdyZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NworbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAiaMOkbXRhIGZyw6VuIGZsZXJhIGZqw6RycmFyIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjkKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJow6RtdGEgYWxsYSB0YWdnYXIgb2NoIGFzc29jaWVyYWRlIG9iamVrdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcxCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJow6RtdGEgaW50ZSBhbGxhIHRhZ2dhciAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjczCittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgInJlbnNhIGZqw6RycnNww6VyYW5kZSBncmVuYXIgZWogbMOkbmdyZSBww6UgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NAorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAib24tZGVtYW5kIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzUKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJzdHlyIHJla3Vyc2l2IGjDpG10bmluZyBhdiB1bmRlcm1vZHVsZXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3OQorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICJiZWjDpWxsIGjDpG10YWRlIHBha2V0IgorCisjOiBidWlsdGluL2ZldGNoLmM6ODEKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAidGlsbMOldCB1cHBkYXRlcmluZyBhdiBIRUFELXJlZmVyZW5zIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODQKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICJmw7ZyZGp1cGEgaGlzdG9yaWsgZsO2ciBncnVuZCBrbG9uIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUgYnVpbHRpbi9sb2cuYzoxMDgzCittc2dpZCAiZGlyIgorbXNnc3RyICJrYXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NgorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgImzDpGdnIHRpbGwgaSBiw7ZyamFuIGF2IHVuZGVybW9kdWxlbnMgc8O2a3bDpGdzdXRkYXRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODkKK21zZ2lkICJkZWZhdWx0IG1vZGUgZm9yIHJlY3Vyc2lvbiIKK21zZ3N0ciAic3RhbmRhcmRsw6RnZSBmw7ZyIHJla3Vyc2lvbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMQorbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICJLdW5kZSBpbnRlIGhpdHRhIGZqw6Ryci1yZWZlcmVuc2VuIEhFQUQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAib2JqZWt0ZXQgJXMgaGl0dGFkZXMgaW50ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI1OQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW8Ogam91cl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiISAlLSpzICUtKnMgLT4gJXMgIChjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCkiCittc2dzdHIgIiEgJS0qcyAlLSpzIC0+ICVzICAoa2FuIGludGUgaMOkbXRhIGkgYWt0dWVsbCBncmVuKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI3NCBidWlsdGluL2ZldGNoLmM6MzYwCittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW3JlZnVzZXJhZF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyODUKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlt1cHBkYXRlcmFkIHRhZ2ddIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mjg3IGJ1aWx0aW4vZmV0Y2guYzozMjIgYnVpbHRpbi9mZXRjaC5jOjM0MAorbXNnaWQgIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIKK21zZ3N0ciAiICAoa3VuZGUgaW50ZSB1cHBkYXRlcmEgbG9rYWwgcmVmKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwNQorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW255IHRhZ2ddIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzA4Cittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJbbnkgZ3Jlbl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMTEKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIltueSByZWZdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzU2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgImt1bmRlIGludGUgdXBwZGF0ZXJhIGxva2FsIHJlZiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1NgorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgInR2aW5nYWQgdXBwZGF0ZXJpbmciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNjIKK21zZ2lkICIobm9uLWZhc3QtZm9yd2FyZCkiCittc2dzdHIgIihlaiBzbmFiYnNwb2xhZCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozOTMgYnVpbHRpbi9mZXRjaC5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hICVzOiAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIKK21zZ3N0ciAiJXMgc8OkbmRlIGludGUgYWxsYSBuw7ZkdsOkbmRpZ2Egb2JqZWt0XG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIkZyw6VuICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisidmlzc2EgbG9rYWxhIHJlZmVyZW5zZXIga3VuZGUgaW50ZSB1cHBkYXRlcmFzOyB0ZXN0YSBhdHQga8O2cmFcbiIKKyIgXCJnaXQgcmVtb3RlIHBydW5lICVzXCIgZsO2ciBhdHQgdGEgYm9ydCBnYW1sYSBncmVuYXIgc29tIHN0w6VyIGkga29uZmxpa3QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIGtvbW1lciBibGkgZGluZ2xhbmRlKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBoYXIgYmxpdml0IGRpbmdsYW5kZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTcKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIltib3J0dGFnZW5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTU4IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NQorbXNnaWQgIihub25lKSIKK21zZ3N0ciAiKGluZ2VuKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY3NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIlbDpGdyYXIgaMOkbXRhIHRpbGwgYWt0dWVsbCBncmVuICVzIGkgZXR0IGlja2UtbmFrZXQgYXJraXYiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gZmV0Y2ggZnJvbSAlcyIKK21zZ3N0ciAiVmV0IGludGUgaHVyIG1hbiBow6RtdGFyIGZyw6VuICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIkZsYWdnYW4gXCIlc1wiIG9jaCB2w6RyZGV0IFwiJXNcIiDDpHIgaW50ZSBnaWx0aWd0IGbDtnIgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJGbGFnZ2FuIFwiJXNcIiBpZ25vcmVyYXMgZsO2ciAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIkjDpG10YXIgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg5MyBidWlsdGluL3JlbW90ZS5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIkt1bmRlIGludGUgaMOkbXRhICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTEyCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJJbmdldCBmasOkcnJhcmtpdiBhbmdhdnMuIEFuZ2UgYW50aW5nZW4gZW4gVVJMIGVsbGVyIG5hbW5ldCBww6UgZXR0XG4iCisiZmrDpHJyYXJraXYgc29tIG55YSBpbmNoZWNrbmluZ2FyIHNrYWxsIGjDpG10YXMgZnLDpW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTMyCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiRHUgbcOlc3RlIGFuZ2UgbmFtbmV0IHDDpSBlbiB0YWdnLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk4NAorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCB0YXIgaW50ZSBuYW1uZXQgcMOlIGV0dCBhcmtpdiBzb20gYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5ODYKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImZldGNoIC0tYWxsIGthbiBpbnRlIGFuZ2VzIG1lZCByZWZlcmVuc3NwZWNpZmlrYXRpb25lciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk5NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICJGasOkcnJlbiBlbGxlciBmasOkcnJncnVwcGVuIGZpbm5zIGludGU6ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAwNQorbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiS2FuIGludGUgaMOkbXRhIGZyw6VuIGdydXBwIG9jaCBhbmdlIHJlZmVyZW5zc3BlY2lmaWthdGlvbmVyIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxMworbXNnaWQgImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XXwtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZWRkZWxhbmRlPl0gWy0tbG9nWz08bj5dfC0tbm8tbG9nXSBbLS1maWxlIDxmaWw+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjUzIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY1NiBidWlsdGluL2dyZXAuYzo3ODcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODggYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NiBidWlsdGluL3Nob3ctcmVmLmM6MTkyCisjOiBidWlsdGluL3RhZy5jOjQ0OCBwYXJzZS1vcHRpb25zLmg6MTMzIHBhcnNlLW9wdGlvbnMuaDoyMzUKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NTQKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgImZ5bGwgaSBsb2dnZW4gbWVkIHNvbSBtZXN0IDxuPiBwb3N0ZXIgZnLDpW4gc2hvcnRsb2ciCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY1NworbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgImFsaWFzIGbDtnIgLS1sb2cgKGF2csOlZHMpIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjAKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJ0ZXh0IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjEKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgImlubGVkIG1lZGRlbGFuZGUgbWVkIDx0ZXh0PiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjYyCittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgImZpbCBhdHQgbMOkc2EgZnLDpW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OTc5Cittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbb3B0aW9uc10gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgW2ZsYWdnb3JdIFs8bcO2bnN0ZXI+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo5OTQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiY2l0ZXJhIHBsYXRzaMOlbGxhcmUgcGFzc2FuZGUgZsO2ciBza2FsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjk5NgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAiY2l0ZXJhIHBsYXRzaMOlbGxhcmUgcGFzc2FuZGUgZsO2ciBwZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjk5OAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICJjaXRlcmEgcGxhdHNow6VsbGFyZSBwYXNzYW5kZSBmw7ZyIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMDAwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciB0Y2wiCittc2dzdHIgImNpdGVyYSBwbGF0c2jDpWxsYXJlIHBhc3NhbmRlIGbDtnIgdGNsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwMDMKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAidmlzYSBlbmRhc3QgPG4+IHRyw6RmZmFkZSByZWZzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwMDQKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgImZvcm1hdCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMDA0Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAiZm9ybWF0IGF0dCBhbnbDpG5kYSBmw7ZyIHV0ZGF0YSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMDA1Cittc2dpZCAia2V5IgorbXNnc3RyICJueWNrZWwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAwNgorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAiZsOkbHRuYW1uIGF0dCBzb3J0ZXJhIHDDpSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA4Cittc2dpZCAiZ2l0IGZzY2sgW29wdGlvbnNdIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFtmbGFnZ29yXSBbPG9iamVrdD4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo2MTQKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInZpc2Egb27DpWJhcmEgb2JqZWt0IgorCisjOiBidWlsdGluL2ZzY2suYzo2MTUKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgInZpc2EgZGluZ2xhbmRlIG9iamVrdCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE2Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgInJhcHBvcnRlcmEgdGFnZ2FyIgorCisjOiBidWlsdGluL2ZzY2suYzo2MTcKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAicmFwcG9ydGVyYSByb3Rub2RlciIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE4Cittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgImfDtnIgaW5kZXhvamVrdCB0aWxsIGh1dnVkbm9kZXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYxOQorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiZ8O2ciByZWZsb2dnYXIgdGlsbCBodXZ1ZG5vZGVyIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyMAorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJ0YSDDpHZlbiBow6Ruc3luIHRpbGwgcGFrZXQgb2NoIGFsdGVybmF0aXZhIG9iamVrdCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjIxCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICJha3RpdmVyYSBzdHJpa3RhcmUga29udHJvbGwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyMworbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICJza3JpdiBkaW5nbGFuZGUgb2JqZWt0IGkgLmdpdC9sb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjQgYnVpbHRpbi9wcnVuZS5jOjEzNAorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgInZpc2EgZsO2cmxvcHAiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyMgorbXNnaWQgImdpdCBnYyBbb3B0aW9uc10iCittc2dzdHIgImdpdCBnYyBbZmxhZ2dvcl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICJGZWxha3RpZ3QgJXM6IFwiJXNcIiIKKworIzogYnVpbHRpbi9nYy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgb2JqZWN0IGRpcmVjdG9yeSAlLipzIgorbXNnc3RyICJ0b2tpZ3QgbMOlbmcgb2JqZWt0a2F0YWxvZyAlLipzIgorCisjOiBidWlsdGluL2djLmM6MTc5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgInJlbnNhIGVqIHJlZmVyZXJhZGUgb2JqZWt0IgorCisjOiBidWlsdGluL2djLmM6MTgxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICJ2YXIgbWVyIGdydW5kbGlnICjDtmthciBrw7ZydGlkZW4pIgorCisjOiBidWlsdGluL2djLmM6MTgyCittc2dpZCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIKK21zZ3N0ciAiYWt0aXZlcmEgYXV0by1nYy1sw6RnZSIKKworIzogYnVpbHRpbi9nYy5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLiBZb3UgbWF5IGFsc29cbiIKKyJydW4gXCJnaXQgZ2NcIiBtYW51YWxseS4gU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKK21zZ3N0ciAiIgorIlBhY2thciBhcmtpdmV0IGF1dG9tYXRpc2t0IGbDtnIgb3B0aW1hbCBwcmVzdGFuZGEuIER1IGthbiDDpHZlblxuIgorImvDtnJhIFwiZ2l0IGdjXCIgbWFudWVsbHQuIFNlIFwiZ2l0IGhlbHAgZ2NcIiBmw7ZyIG1lciBpbmZvcm1hdGlvbi5cbiIKKworIzogYnVpbHRpbi9nYy5jOjI0OQorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorIkRldCBmaW5ucyBmw7ZyIG3DpW5nYSBvbsOlYmFyYSBsw7ZzYSBvYmpla3Q7IGvDtnIgXCJnaXQgcHJ1bmVcIiBmw7ZyIGF0dCB0YSBib3J0ICIKKyJkZW0uIgorCisjOiBidWlsdGluL2dyZXAuYzoyMgorbXNnaWQgImdpdCBncmVwIFtvcHRpb25zXSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFtmbGFnZ29yXSBbLWVdIDxtw7Zuc3Rlcj4gWzxyZXY+Li4uXSBbWy0tXSA8c8O2a3bDpGc+Li4uXSIKKworIzogYnVpbHRpbi9ncmVwLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiZ3JlcDogbWlzc2x5Y2thZGVzIHNrYXBhIHRyw6VkLiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjaGRpcjogJXMiCittc2dzdHIgIkt1bmRlIGludGUgYnl0YSBrYXRhbG9nIChjaGRpcik6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo1MzEgYnVpbHRpbi9ncmVwLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSB0csOkZCAoJXMpIgorCisjOiBidWlsdGluL2dyZXAuYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBcImdyZXBcIiBmcsOlbiBvYmpla3QgYXYgdHlwZW4gJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJmbGFnZ2FuIFwiJWNcIiBhbnRhciBldHQgbnVtZXJpc2t0IHbDpHJkZSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgImthbiBpbnRlIMO2cHBuYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcyOQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgInPDtmsgaSBpbmRleGV0IGlzdMOkbGxldCBmw7ZyIGkgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzEKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAic8O2ayBpIGlubmVow6VsIHNvbSBpbnRlIGhhbnRlcmFzIGF2IGdpdCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMzCittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJzw7ZrIGkgYsOlZGUgc3DDpXJhZGUgb2NoIG9zcMOlcmFkZSBmaWxlciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM1Cittc2dpZCAic2VhcmNoIGFsc28gaW4gaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAic8O2ayDDpHZlbiBpIGlnbm9yZXJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczOAorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJ2aXMgcmFkZXIgc29tIGludGUgdHLDpGZmYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc0MAorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgInNraWZ0bMOkZ2Vzb2vDpG5zbGlnIHPDtmtuaW5nIgorCisjOiBidWlsdGluL2dyZXAuYzo3NDIKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAibWF0Y2hhIGVuZGFzdCBtw7Zuc3RlciB2aWQgb3JkZ3LDpG5zZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc0NAorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgImhhbnRlcmEgYmluw6RyZmlsZXIgc29tIHRleHQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc0NgorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAidHLDpGZmYSBpbnRlIG3Dtm5zdGVyIGkgYmluw6RyZmlsZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc0OQorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAiZ8OlIHNvbSBtZXN0IG5lZCA8ZGp1cD4gbml2w6VlciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzUzCittc2dpZCAidXNlIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgImFudsOkbmQgdXTDtmthZGUgUE9TSVgtcmVndWxqw6RyYSB1dHRyeWNrIgorCisjOiBidWlsdGluL2dyZXAuYzo3NTYKK21zZ2lkICJ1c2UgYmFzaWMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyAoZGVmYXVsdCkiCittc2dzdHIgImFudsOkbmQgZ3J1bmRsw6RnZ2FuZGUgUE9TSVgtcmVndWxqw6RyYSB1dHRyeWNrIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc1OQorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICJ0b2xrYSBtw7Zuc3RlciBzb20gZml4ZXJhZGUgc3Ryw6RuZ2FyIgorCisjOiBidWlsdGluL2dyZXAuYzo3NjIKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgImFudsOkbmQgUGVybGtvbXBhdGlibGEgcmVndWxqw6RyYSB1dHRyeWNrIgorCisjOiBidWlsdGluL2dyZXAuYzo3NjUKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAidmlzYSByYWRudW1tZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc2NgorbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJ2aXNhIGludGUgZmlsbmFtbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzY3Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgInZpc2EgZmlsbmFtbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzY5Cittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAidmlzYSBmaWxuYW1uIHJlbGF0aXZhIHRpbGwgdG9wcGthdGFsb2dlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzcxCittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBmaWxuYW1uIGlzdMOkbGxldCBmw7ZyIHRyw6RmZmFkZSByYWRlciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzczCittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgInN5bm9ueW0gZsO2ciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzc2Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBuYW1uIHDDpSBmaWxlciB1dGFuIHRyw6RmZmFyIgorCisjOiBidWlsdGluL2dyZXAuYzo3NzgKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJza3JpdiBOVUwgZWZ0ZXIgZmlsbmFtbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzgwCittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAidmlzYSBhbnRhbCB0csOkZmZhciBpc3TDpGxsZXQgZsO2ciB0csOkZmZhZGUgcmFkZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc4MQorbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICJsanVzbWFya2VyYSB0csOkZmZhciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzgzCittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgInNrcml2IHRvbW1hIHJhZGVyIG1lbGxhbiB0csOkZmZhciBmcsOlbiBvbGlrYSBmaWxlciIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzg1Cittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAidmlzYSBmaWxuYW1uIGVuZGFzdCBlbiBnw6VuZyBvdmFuZsO2ciB0csOkZmZhciBmcsOlbiBzYW1tYSBmaWwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc4OAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJ2aXNhIDxuPiByYWRlciBzYW1tYW5oYW5nIGbDtnJlIG9jaCBlZnRlciB0csOkZmZhciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzkxCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAidmlzYSA8bj4gcmFkZXIgc2FtbWFuaGFuZyBmw7ZyZSB0csOkZmZhciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzkzCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJ2aXNhIDxuPiByYWRlciBzYW1tYW5oYW5nIGVmdGVyIHRyw6RmZmFyIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTQKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJnZW52w6RnIGbDtnIgLUMgTlVNIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTcKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJ2aXNhIGVuIHJhZCBtZWQgZnVua3Rpb25zbmFtbmV0IGbDtnJlIHRyw6RmZmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTkKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAidmlzYSBkZW4gb21rcmluZ2xpZ2dhbmRlIGZ1bmt0aW9uZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwMgorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICJsw6RzIG3Dtm5zdGVyIGZyw6VuIGZpbCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA0Cittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJ0csOkZmZhIDxtw7Zuc3Rlcj4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNgorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgImtvbWJpbmVyYSBtw7Zuc3RlciBzb20gYW5nZXMgbWVkIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTgKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAiYW5nZSB0csOkZmYgbWVkIHNsdXRzdGF0dXNrb2QgdXRhbiB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgInZpc2EgZW5kYXN0IHRyw6RmZmFyIGZyw6VuIGZpbGVyIHNvbSB0csOkZmZhciBhbGxhIG3Dtm5zdGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjIKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAidmlzYSBhbmFseXN0csOkZCBmw7ZyIGdyZXAtdXR0cnljayIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI2Cittc2dpZCAicGFnZXIiCittc2dzdHIgImJsw6RkZHJhcmUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICJ2aXNhIHRyw6RmZmFkZSBmaWxlciBpIGZpbGJsw6RkZHJhcmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjkKK21zZ2lkICJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiCittc2dzdHIgInRpbGzDpXQgYW5yb3BhIGdyZXAoMSkgKGlnbm9yZXJhcyBhdiBkZXR0YSBieWdnZSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMCBidWlsdGluL3Nob3ctcmVmLmM6MjAxCittc2dpZCAic2hvdyB1c2FnZSIKK21zZ3N0ciAidmlzYSBhbnbDpG5kbmluZyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIxCittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgImluZ2V0IG3Dtm5zdGVyIGFuZ2F2cy4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkzNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgb2JqZWN0ICVzIgorbXNnc3RyICJmZWxha3RpZ3Qgb2JqZWt0ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo5NzYKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBmdW5nZXJhciBlbmRhc3QgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5OQorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iCittc2dzdHIgIi0tY2FjaGVkIG9jaCAtLXVudHJhY2tlZCBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC0tbm8taW5kZXguIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDA0Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIgorbXNnc3RyICItLW5vLWluZGV4IG9jaCAtLXVudHJhY2tlZCBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIHJldmlzaW9uZXIuIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDA3Cittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMuIgorbXNnc3RyICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBrYW4gaW50ZSBhbnbDpG5kYXMgZsO2ciBzcMOlcmF0IGlubmVow6VsbC4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMTUKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICJiw6VkZSAtLWNhY2hlZCBvY2ggdHLDpGQgYW5nYXZzLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjYwCittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+fC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dIFstLV0gIgorIjxmaWxlPi4uLiIKK21zZ3N0ciAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cD5dIFstd10gWy0tcGF0aD08ZmlsPnwtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSBbLS1dICIKKyI8ZmlsPi4uLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjYxCittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwgPGxpc3Qtb2YtcGF0aHM+IgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMgPCA8c8O2a3bDpGdzbGlzdGE+IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6NzIKK21zZ2lkICJ0eXBlIgorbXNnc3RyICJ0eXAiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3MgorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJvYmpla3R0eXAiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3MworbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJza3JpdiBvYmpla3RldCB0aWxsIG9iamVrdGRhdGFiYXNlbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjc0Cittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgImzDpHMgb2JqZWt0ZXQgZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3NgorbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJzcGFyYSBmaWxlbiBzb20gZGVuIMOkciB1dGFuIGZpbGVyIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6NzcKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAiaGFudGVyYSBmaWxlbiBzb20gb20gZGVuIGtvbSBmcsOlbiBzw7ZrdsOkZ2VuIgorCisjOiBidWlsdGluL2hlbHAuYzo0MworbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgInZpc2EgYWxsYSB0aWxsZ8OkbmdsaWdhIGtvbW1hbmRvbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJ2aXNhIG1hbnVhbHNpZGEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ1Cittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgInZpc2EgbWFudWFsIGkgd2ViYmzDpHNhcmUiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgInZpc2EgaW5mby1zaWRhIgorCisjOiBidWlsdGluL2hlbHAuYzo1MworbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tbWFufC0td2VifC0taW5mb10gW2NvbW1hbmRdIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLW1hbnwtLXdlYnwtLWluZm9dIFtrb21tYW5kb10iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJva8OkbnQgaGrDpGxwZm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6OTMKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgc3RhcnRhIGVtYWNzY2xpZW50LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA2Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICJLdW5kZSBpbnRlIHRvbGthIGVtYWNzY2xpZW50LXZlcnNpb24uIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAiZW1hY3NjbGllbnQgdmVyc2lvbiBcIiVkXCIgZsO2ciBnYW1tYWwgKDwgMjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTMyIGJ1aWx0aW4vaGVscC5jOjE2MCBidWlsdGluL2hlbHAuYzoxNjkgYnVpbHRpbi9oZWxwLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyc6ICVzIgorbXNnc3RyICJleGVjIG1pc3NseWNrYWRlcyBmw7ZyIFwiJXNcIjogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIlwiJXNcIjogc8O2a3bDpGcgZsO2ciBtYW4tdmlzYXJlIHNvbSBlaiBzdMO2ZHMuXG4iCisiQW52w6RuZCBcIm1hbi48dmVya3R5Zz4uY21kXCIgaXN0w6RsbGV0LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIlwiJXNcIjoga29tbWFuZG8gZsO2ciBtYW4tdmlzYXJlIHNvbSBzdMO2ZHMuXG4iCisiQW52w6RuZCBcIm1hbi48dmVya3R5Zz4ucGF0aFwiIGlzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjI5OQorbXNnaWQgIlRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZ2l0IGNvbW1hbmRzIGFyZToiCittc2dzdHIgIkRlIG1lc3QgYW52w6RuZGEgZ2l0LWtvbW1hbmRvbmEgw6RyOiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIlwiJXNcIjogb2vDpG5kIG1hbi12aXNhcmUuIgorCisjOiBidWlsdGluL2hlbHAuYzozODQKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImluZ2VuIG1hbi12aXNhcmUgaGFudGVyYWRlIGbDtnJmcsOlZ2FuIgorCisjOiBidWlsdGluL2hlbHAuYzozOTIKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJpbmdlbiBpbmZvLXZpc2FyZSBoYW50ZXJhZGUgZsO2cmZyw6VnYW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0NyBidWlsdGluL2hlbHAuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgImFudsOkbmRuaW5nOiAlcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYGdpdCAlcycgaXMgYWxpYXNlZCB0byBgJXMnIgorbXNnc3RyICJcImdpdCAlc1wiIMOkciBldHQgYWxpYXMgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAib2JqZWt0dHlwIHN0w6RtbWVyIGludGUgw7Z2ZXJlbnMgdmlkICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxOTAKK21zZ2lkICJvYmplY3Qgb2YgdW5leHBlY3RlZCB0eXBlIgorbXNnc3RyICJvYmpla3QgYXYgb3bDpG50YWQgdHlwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gImthbiBpbnRlIGZ5bGxhICVkIGJ5dGUiCittc2dzdHJbMV0gImthbiBpbnRlIGZ5bGxhICVkIGJ5dGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIzNworbXNnaWQgImVhcmx5IEVPRiIKK21zZ3N0ciAidGlkaWd0IGZpbHNsdXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIzOAorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgImluZGF0YWzDpHNmZWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1MAorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICJhbnbDpG5kZSBmbGVyIGJ5dGUgw6RuIHRpbGxnw6RuZ2xpZ3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1NworbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgInBha2V0IGbDtnIgc3RvcnQgZsO2ciBudXZhcmFuZGUgZGVmaW5pdGlvbiBhdiBvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgcGFrZXRmaWxlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJwYWtldHNpZ25hdHVyIHN0w6RtbWVyIGludGUgw7Z2ZXJlbnMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICJwYWtldHZlcnNpb24gJTxQUkl1MzI+IHN0w7ZkcyBlaiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICVsdTogJXMiCittc2dzdHIgInBha2V0ZXQgaGFyIGZlbGFrdGlndCBvYmpla3QgdmlkIGluZGV4ICVsdTogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICJpbmZsYXRlIHJldHVybmVyYWRlICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0ODMKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJpbmRleHbDpHJkZXNwaWxsIGbDtnIgZGVsdGFiYXNvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ5MQorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAiZGVsdGFiYXNpbmRleCB1dGFuZsO2ciBncsOkbnNlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgIm9rw6RuZCBvYmpla3R0eXAgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMAorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJwcmVhZFwiIHDDpSBwYWtldGZpbCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gImbDtnIgdGlkaWd0IHNsdXQgcMOlIHBha2V0ZmlsZW4sICVsdSBieXRlIHNha25hcyIKK21zZ3N0clsxXSAiZsO2ciB0aWRpZ3Qgc2x1dCBww6UgcGFrZXRmaWxlbiwgJWx1IGJ5dGUgc2FrbmFzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NTgKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiYWxsdmFybGlnIGluZmxhdGUtaW5rb25zZWt2ZW5zIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo2NDkgYnVpbHRpbi9pbmRleC1wYWNrLmM6NjU1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjY3OAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzEyIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIlNIQTEtS09MTElTSU9OIFVQUFTDhENLVCBWSUQgJXMgISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NjUyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTcwCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgYmVmaW50bGlndCBvYmpla3QgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJvZ2lsdGlndCBibG9iLW9iamVrdCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIm9naWx0aWd0ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NDkKK21zZ2lkICJFcnJvciBpbiBvYmplY3QiCittc2dzdHIgIkZlbCBpIG9iamVrdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICJJbnRlIGFsbGEgYmFybm9iamVrdCBmw7ZyICVzIGthbiBuw6VzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjEgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ3Cittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGlsbMOkbXBhIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5ODYKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiVGFyIGVtb3Qgb2JqZWt0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5ODYKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICJTa2FwYXIgaW5kZXggZsO2ciBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwMTIKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgInBha2V0ZXQgw6RyIHRyYXNpZ3QgKFNIQTEgc3TDpG1tZXIgaW50ZSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwMTcKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJmc3RhdFwiIHDDpSBwYWtldGZpbCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTAyMAorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAicGFrZXQgaGFyIHNrcsOkcCBpIHNsdXRldCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTAzMQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgImbDtnJ2aXJyYWQgYm9ydG9tIHZhbnZldHQgaSBwYXJzZV9wYWNrX29iamVjdHMoKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTA1NAorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIkFuYWx5c2VyYXIgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIHRyw6VkOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEwNgorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgImbDtnJ2aXJyYWQgYm9ydG9tIHZhbnZldHQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0ciAic2x1dGbDtnJkZXMgbWVkICVkIGxva2FsYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIk92w6RudGFkIHN2YW5zY2hlY2tzdW1tYSBmw7ZyICVzICh0cmFzaWcgZGlzaz8pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICJwYWtldGV0IGhhciAlZCBvYW5hbHlzZXJhdCBkZWx0YSIKK21zZ3N0clsxXSAicGFrZXRldCBoYXIgJWQgb2FuYWx5c2VyYWRlIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICJrdW5kZSBpbnRlIHV0ZsO2cmEgXCJkZWZsYXRlXCIgcMOlIHRpbGxhZ3Qgb2JqZWt0ICglZCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgImxva2FsdCBvYmpla3QgJXMgw6RyIHRyYXNpZ3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTMKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiZmVsIHZpZCBzdMOkbmduaW5nIGF2IHBha2V0ZmlsIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdGEgc2tyaXZhIFwia2VlcFwiLWZpbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcyciCittc2dzdHIgImFrbiBpbnRlIHN0w6RuZ2Egc2tyaXZlbiBcImtlZXBcIi1maWwgXCIlc1wiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjg3Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgc3BhcmEgcGFrZXRmaWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTgKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAia2FuIGludGUgc3BhcmEgaW5kZXhmaWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAiZmVsYWt0aWcgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgImZlbGFrdGlndCBhbnRhbCB0csOlZGFyIGFuZ2l2ZXQgKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM0MSBidWlsdGluL2luZGV4LXBhY2suYzoxNTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgInRyw6Vkc3TDtmQgc2FrbmFzLCBpZ25vcmVyYXIgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIkthbiBpbnRlIMO2cHBuYSBiZWZpbnRsaWcgcGFrZXRmaWwgXCIlc1wiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIkthbiBpbnRlIMO2cHBuYSBiZWZpbnRsaWd0IHBha2V0LWlkeC1maWwgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAiaWNrZS1kZWx0YTogJWQgb2JqZWt0IgorbXNnc3RyWzFdICJpY2tlLWRlbHRhOiAlZCBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAia2VkamVsw6RuZ2QgPSAlZDogJWx1IG9iamVrdCIKK21zZ3N0clsxXSAia2VkamVsw6RuZ2QgPSAlZDogJWx1IG9iamVrdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4MgorbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICJLYW4gaW50ZSBnw6UgdGlsbGJha2EgdGlsbCBhcmJldHNrYXRhbG9nZW4gKGN3ZCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyOQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU0MSBidWlsdGluL2luZGV4LXBhY2suYzoxNTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NTkKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NjMgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU3MworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAicGFrZXRmaWxuYW1uZXQgXCIlc1wiIHNsdXRhciBpbnRlIG1lZCBcIi5wYWNrXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1ODIKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIi0tdmVyaWZ5IGFuZ2F2cyB1dGFuIHBha2V0ZmlsbmFtbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIkt1bmRlIGludGUgZ8O2cmEgJXMgc2tyaXZiYXIgZsO2ciBncnVwcGVuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIG5hbWUgJXMiCittc2dzdHIgInRva2lndCBsw6VuZ3QgbmFtbiBww6UgbWFsbGVuICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0YSBzdGF0dXMgcMOlIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdGEgc3RhdHVzIHDDpSBtYWxsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbmRpciAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEga2F0YWxvZ2VuIChvcGVuZGlyKSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBsw6RuayAocmVhZGxpbmspIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIgorbXNnc3RyICJ0b2tpZ3QgbMOlbmcgc3ltYm9saXNrIGzDpG5rICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBza2FwYSBzeW1ib2xpc2sgbMOkbmsgXCIlc1wiIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAia2FuIGludGUga29waWVyYSBcIiVzXCIgdGlsbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiaWdub3JlcmFyIG1hbGxlbiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgcGF0aCAlcyIKK21zZ3N0ciAidG9raWd0IGzDpW5nIG1hbGxzw7ZrdsOkZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgJXMiCittc2dzdHIgIm1hbGxhcm5hIGhpdHRhZGVzIGludGUgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgb2YgYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcyciCittc2dzdHIgImtvcGllcmFkZSBpbnRlIG1hbGxhciBmcsOlbiBmZWxha3RpZyBmb3JtYXR2ZXJzaW9uICVkIGZyw6VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJ0b2tpZyBnaXQta2F0YWxvZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzIzIGJ1aWx0aW4vaW5pdC1kYi5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgZmlubnMgcmVkYW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAia2FuIGludGUgaGFudGVyYSBmaWx0eXAgJWQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAia2FuIGludGUgZmx5dHRhICVzIHRpbGwgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGdpdCBsaW5rICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIGdpdGzDpG5rICVzIgorCisjLgorIy4gKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisjLiAqIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gKiAiIiwgYW5kIHRoZSBsYXN0ICclcyVzJyBpcyB0aGUgdmVyYmF0aW0gZGlyZWN0b3J5IG5hbWUuCisjLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIEdpdC1hcmtpdiBpICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIxCittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyIKK21zZ3N0ciAiT21pbml0aWVyYWRlIGJlZmludGxpZ3QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMQorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICJJbml0aWVyYWRlIHRvbXQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMgorbXNnaWQgIiBzaGFyZWQiCittc2dzdHIgIiBkZWxhdCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDQxCittc2dpZCAiY2Fubm90IHRlbGwgY3dkIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBha3R1ZWxsIGthdGFsb2cgKGN3ZCkiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2NworbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tc2hhcmVkIgorIls9PHBlcm1pc3Npb25zPl1dIFtkaXJlY3RvcnldIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PG1hbGxrYXRhbG9nPl0gWy0tc2hhcmVkIgorIls9PGJlaMO2cmlnaGV0ZXI+XV0gW2thdGFsb2ddIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTAKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAiYmVow7ZyaWdoZXRlciIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkxCittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICJhbmdlIGF0dCBnaXQtYXJraXZldCBza2FsbCBkZWxhcyBibGFuZCBmbGVyYSBhbnbDpG5kYXJlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTMgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3NworbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICJ2YXIgdHlzdCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTIyIGJ1aWx0aW4vaW5pdC1kYi5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgImthbiBpbnRlIHNrYXBhIGthdGFsb2dlbiAobWtkaXIpICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICJrYW4gaW50ZSBieXRhIGthdGFsb2cgKGNoZGlyKSB0aWxsICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorIiVzIChlbGxlciAtLXdvcmstdHJlZT08a2F0YWxvZz4pIGludGUgdGlsbMOldGV0IHV0YW4gYXR0IGFuZ2UgJXMgKGVsbGVyIC0tZ2l0LSIKKyJkaXI9PGthdGFsb2c+KSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTc5Cittc2dpZCAiQ2Fubm90IGFjY2VzcyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJLYW4gaW50ZSBrb21tYSDDpXQgYWt0dWVsbCBhcmJldHNrYXRhbG9nIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiS2FuIGludGUga29tbWEgw6V0IGFyYmV0c2thdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MzcKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8c2luY2U+Li48dW50aWw+XSBbWy0tXSA8cGF0aD4uLi5dXG4iCittc2dzdHIgImdpdCBsb2cgWzxmbGFnZ29yPl0gWzxzZWRhbj4uLjx0aWxsPl0gW1stLV0gPHPDtmt2w6RnPi4uLl1cbiIKKworIzogYnVpbHRpbi9sb2cuYzozOAorbXNnaWQgIiAgIG9yOiBnaXQgc2hvdyBbb3B0aW9uc10gPG9iamVjdD4uLi4iCittc2dzdHIgIiAgICAgZWxsZXI6IGdpdCBzaG93IFtmbGFnZ29yXSA8b2JqZWt0Pi4uLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDAKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAidW5kZXJ0cnljayBkaWZmLXV0ZGF0YSIKKworIzogYnVpbHRpbi9sb2cuYzoxMDEKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAidmlzYSBrw6RsbGtvZCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDIKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJkZWtvcmVyaW5nc2ZsYWdnb3IiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAiU2x1dHV0ZGF0YTogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo0MDMgYnVpbHRpbi9sb2cuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIG9iamVrdGV0ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHR5cGU6ICVkIgorbXNnc3RyICJPa8OkbmQgdHlwOiAlZCIKKworIzogYnVpbHRpbi9sb2cuYzo2MDgKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyB1dGFuIHbDpHJkZSIKKworIzogYnVpbHRpbi9sb2cuYzo2ODIKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIm5hbW5ldCBww6UgdXRkYXRha2F0YWxvZ2VuIMOkciBmw7ZyIGzDpW5ndCIKKworIzogYnVpbHRpbi9sb2cuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiS2FuIGludGUgw7ZwcG5hIHBhdGNoZmlsZW4gJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NzA3Cittc2dpZCAiTmVlZCBleGFjdGx5IG9uZSByYW5nZS4iCittc2dzdHIgIkJlaMO2dmVyIHByZWNpcyBldHQgaW50ZXJ2YWxsLiIKKworIzogYnVpbHRpbi9sb2cuYzo3MTUKK21zZ2lkICJOb3QgYSByYW5nZS4iCittc2dzdHIgIkludGUgZXR0IGludGVydmFsbC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6Nzg5Cittc2dpZCAiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAiT21zbGFnc2JyZXZldCBiZWjDtnZlciBlLXBvc3Rmb3JtYXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgInRva2lndCBpbi1yZXBseS10bzogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODkwCittc2dpZCAiZ2l0IGZvcm1hdC1wYXRjaCBbb3B0aW9uc10gWzxzaW5jZT4gfCA8cmV2aXNpb24gcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbZmxhZ2dvcl0gWzxzZWRhbj4gfCA8cmV2aXNpb25zaW50ZXJ2YWxsPl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTM1Cittc2dpZCAiVHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgIlR2w6UgdXRkYXRha2F0YWxvZ2VyPyIKKworIzogYnVpbHRpbi9sb2cuYzoxMDYzCittc2dpZCAidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiYW52w6RuZCBbUEFUQ0ggbi9tXSDDpHZlbiBmw7ZyIGVuIGVuc2FtIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjEwNjYKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAiYW52w6RuZCBbUEFUQ0hdIMOkdmVuIGbDtnIgZmxlcmEgcGF0Y2hhciIKKworIzogYnVpbHRpbi9sb2cuYzoxMDcwCittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgInNrcml2IHBhdGNoYXJuYSBww6Ugc3RuYWRhcmQgdXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA3MgorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICJnZW5lcmVyYSBldHQgZsO2bGplYnJldiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDc0Cittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICJhbnbDpG5kIGVua2VsIG51bW1lcnNla3ZlbnMgZsO2ciB1dGRhdGFmaWxuYW1uIgorCisjOiBidWlsdGluL2xvZy5jOjEwNzUKK21zZ2lkICJzZngiCittc2dzdHIgInNmeCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDc2Cittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgImFudsOkbmQgPHNmeD4gaXN0w6RsbGV0IGbDtnIgXCIucGF0Y2hcIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDc4Cittc2dpZCAic3RhcnQgbnVtYmVyaW5nIHBhdGNoZXMgYXQgPG4+IGluc3RlYWQgb2YgMSIKK21zZ3N0ciAiYsO2cmphIG51bXJlcmEgcGF0Y2hhciBww6UgPG4+IGlzdMOkbGxldCBmw7ZyIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA4MAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiQW52w6RuZCBbPHByZWZpeD5dIGlzdMOkbGxldCBmw7ZyIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA4MworbXNnaWQgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIKK21zZ3N0ciAic3BhcmEgZmlsZXJuYSBpIDxrYXRhbG9nPiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDg2Cittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgInRhIGludGUgYm9ydCBlbGxlciBsw6RnZyB0aWxsIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA4OQorbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgInNrcml2IGludGUgYmluw6RyYSBkaWZmYXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5MQorbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAidGEgaW50ZSBtZWQgcGF0Y2hhciBzb20gbW90c3ZhcmFyIGVuIHVwcHN0csO2bXNpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9sb2cuYzoxMDkzCittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICJ2aXNhIHBhdGNoZm9ybWF0IGlzdMOkbGxldCBmw7ZyIHN0YW5kYXJkIChwYXRjaCArIHN0YXQpIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTUKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIkUtcG9zdCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk2Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICJodXZ1ZCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk3Cittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAibMOkZ2cgdGlsbCBlLXBvc3RodXZ1ZCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk4IGJ1aWx0aW4vbG9nLmM6MTEwMAorbXNnaWQgImVtYWlsIgorbXNnc3RyICJlcG9zdCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk4Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgIkzDpGdnIHRpbGwgbW90dGFnYXJodXZ1ZCAoXCJUbzpcIikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwMAorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICJMw6RnZyB0aWxsIGtvcGllaHV2dWQgKFwiQ2M6XCIpIgorCisjOiBidWlsdGluL2xvZy5jOjExMDIKK21zZ2lkICJtZXNzYWdlLWlkIgorbXNnc3RyICJtZWRkZWxhbmRlLWlkIgorCisjOiBidWlsdGluL2xvZy5jOjExMDMKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgIkfDtnIgZGV0IGbDtnJzdGEgYnJldmV0IGV0dCBzdmFyIHRpbGwgPG1lZGRlbGFuZGUtaWQ+IgorCisjOiBidWlsdGluL2xvZy5jOjExMDQgYnVpbHRpbi9sb2cuYzoxMTA3Cittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgImdyw6RucyIKKworIzogYnVpbHRpbi9sb2cuYzoxMTA1Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAiYmlmb2dhIHBhdGNoZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwOAorbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgImfDtnIgcGF0Y2hlbiBldHQgaW5saW5lLW9iamVrdCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTEyCittc2dpZCAiZW5hYmxlIG1lc3NhZ2UgdGhyZWFkaW5nLCBzdHlsZXM6IHNoYWxsb3csIGRlZXAiCittc2dzdHIgImFrdGl2ZXJhIGJyZXZ0csOlZG5pbmcsIHR5cGVyOiBzaGFsbG93LCBkZWVwIgorCisjOiBidWlsdGluL2xvZy5jOjExMTQKK21zZ2lkICJzaWduYXR1cmUiCittc2dzdHIgInNpZ25hdHVyIgorCisjOiBidWlsdGluL2xvZy5jOjExMTUKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgImzDpGdnIHRpbGwgc2lnbmF0dXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTExNworbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgInZpc2EgaW50ZSBmaWxuYW1uIGbDtnIgcGF0Y2hhciIKKworIzogYnVpbHRpbi9sb2cuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGNvbW1pdHRlciBpbmZvICVzIgorbXNnc3RyICJmZWxha3RpZyBpbmNoZWNrYXJpbmZvcm1hdGlvbiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjAyCittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItbiBvY2ggLWsga2FuIGludGUgYW52w6RuZGFzIHNhbXRpZGlndC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIwNAorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXggYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItLXN1YmplY3QtcHJlZml4IG9jaCAtayBrYW4gaW50ZSBhbnbDpG5kYXMgc2FtdGlkaWd0LiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjEyCittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAia2FuIGludGUgYW52w6RuZGEgLS1uYW1lLW9ubHkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxNAorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAia2FuIGludGUgYW52w6RuZGEgLS1uYW1lLXN0YXR1cyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE2Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJrYW4gaW50ZSBhbnbDpG5kYSAtLWNoZWNrIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzkKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAic3RhbmRhcmQgdXQsIGVsbGVyIGthdGFsb2csIHZpbGtlbiBza2FsbCBkZXQgdmFyYT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIGthdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM5NAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICJNaXNzbHlja2FkZXMgc2thcGEgdXRkYXRhZmlsZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0MworbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzx1cHBzdHLDtm0+IFs8aHV2dWQ+IFs8Z3LDpG5zPl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBlbiBzcMOlcmFkIGZqw6RycmdyZW4sIGFuZ2UgPHVwcHN0csO2bT4gbWFudWVsbHQuXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUxMSBidWlsdGluL2xvZy5jOjE1MTMgYnVpbHRpbi9sb2cuYzoxNTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICJPa8OkbmQgaW5jaGVja25pbmcgJXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MDgKK21zZ2lkICJnaXQgbHMtZmlsZXMgW29wdGlvbnNdIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgW2ZsYWdnb3JdIFs8ZmlsPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjMKK21zZ2lkICJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIgorbXNnc3RyICJpZGVudGlmaWVyYSBmaWxzdGF0dXMgbWVkIHRhZ2dhciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ2NQorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICJhbnbDpG5kIHNtw6UgYm9rc3TDpHZlciBmw7ZyIFwiYW50YSBvZsO2csOkbmRyYWRlXCItZmlsZXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjcKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAidmlzYSBjYWNoYWRlIGZpbGVyIGkgdXRkYXRhIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjkKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzYSBib3J0dGFnbmEgZmlsZXIgaSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzEKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc2EgbW9kaWZpZXJhZGUgZmlsZXIgaSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzMKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc2EgYW5kcmEgZmlsZXIgaSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzUKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzYSBpZ25vcmVyYWRlIGZpbGVyIGkgdXRkYXRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDc4Cittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc2Ega8O2YXQgaW5uZWjDpWxscyBvYmpla3RuYW1uIGkgdXRkYXRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDgwCittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAidmlzYSBmaWxlciBpIGZpbHN5c3RlbWV0IHNvbSBiZWjDtnZlciB0YXMgYm9ydCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ4MgorbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZSBvbmx5IgorbXNnc3RyICJ2aXNhIGVuZGFzdCBuYW1uIGbDtnIgXCJhbmRyYVwiIGthdGFsb2dlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ4NQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgInZpc2EgaW50ZSB0b21tYSBrYXRhbG9nZXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0ODgKK21zZ2lkICJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc2EgZWogc2FtbWFuc2xhZ25hIGZpbGVyIGkgdXRkYXRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDkwCittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgInZpc2EgXCJyZXNvbHZlLXVuZG9cIi1pbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5MgorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAiaG9wcGEgw7Z2ZXIgZmlsZXIgc29tIG1vdHN2YXJhciBtw7Zuc3RlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5NQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgImV4a2x1ZGVyYSBtw7Zuc3RlciBzb20gbMOkc2VzIGZyw6VuIDxmaWw+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDk4Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgImzDpHMgeXR0ZXJsaWdhcmUgcGVyLWthdGFsb2ctZXhrbHVkZXJpbmdzbcO2bnN0ZXIgZnLDpW4gPGZpbD4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDAKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICJsw6RnZyB0aWxsIGdpdDpzIHN0YW5kYXJkZXhrbHVkZXJpbmdhciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUwMworbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJnw7ZyIHV0ZGF0YSByZWxhdGl2IHRpbGwgcHJvamVrdGV0cyB0b3Bwa2F0YWxvZyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUwNgorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAib20gZW4gPGZpbD4gaW50ZSDDpHIgaW5kZXhldCwgYmV0cmFrdGEgZGV0IHNvbSBldHQgZmVsIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTA3Cittc2dpZCAidHJlZS1pc2giCittc2dzdHIgInRyw6RkLWlndCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUwOAorbXNnaWQgInByZXRlbmQgdGhhdCBwYXRocyByZW1vdmVkIHNpbmNlIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQiCittc2dzdHIgImzDpXRzYXMgYXR0IHPDtmt2w6RnYXIgYm9ydHRhZ25hIHNlZGFuIDx0csOkZC1pZ3Q+IGZvcnRmYXJhbmRlIGZpbm5zIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTEwCittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAidmlzYSBmZWxzw7ZrbmluZ3N1dGRhdGEiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjI3Cittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLXRyZWUgWzxmbGFnZ29yPl0gPHRyw6RkLWlndD4gWzxzw7ZrdsOkZz4uLi5dIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjUKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgInZpc2EgZW5kYXN0IHRyw6RkIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjcKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgInJla3Vyc2VyYSBuZXIgaSB1bmRlcnRyw6RkIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjkKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICJ2aXNhIHRyw6RkIG1lZGFuIHJla3Vyc2VyaW5nIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5lcmEgcG9zdGVyIG1lZCBOVUwtYnl0ZSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMzCittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiaW5rbHVkZXJhIG9iamVrdHN0b3JsZWsiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNSBidWlsdGluL2xzLXRyZWUuYzoxMzcKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBmaWxuYW1uIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDAKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICJhbnbDpG5kIGZ1bGxzdMOkbmRpZ2Egc8O2a3bDpGdzbmFtbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQyCittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICJ2aXNhIGhlbGEgdHLDpGRldDsgaW50ZSBiYXJhIGFrdHVlbGwga2F0YWxvZyAoaW1wbGljZXJhciAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MworbXNnaWQgImdpdCBtZXJnZSBbb3B0aW9uc10gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFtmbGFnZ29yXSBbPGluY2hlY2tuaW5nPi4uLl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NAorbXNnaWQgImdpdCBtZXJnZSBbb3B0aW9uc10gPG1zZz4gSEVBRCA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlIFtmbGFnZ29yXSA8bWVkZGVsYW5kZT4gSEVBRCA8aW5jaGVja25pbmc+IgorCisjOiBidWlsdGluL21lcmdlLmM6NDUKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tYWJvcnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiZmxhZ2dhbiBcIm1cIiBiZWjDtnZlciBldHQgdsOkcmRlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2luIFwiJXNcIi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJUaWxsZ8OkbmdsaWdhIHN0cmF0ZWdpZXIgw6RyOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiVGlsbGfDpG5nbGlnYSBza3LDpGRkYXJzeWRkYSBzdHJhdGVnaWVyIMOkcjoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODMKK21zZ2lkICJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICJ2aXNhIGludGUgZW4gZGlmZnN0YXQgbsOkciBzYW1tYW5zbGFnbmluZ2VuIMOkciBmw6RyZGlnIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg2Cittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICJ2aXNhIGVuIGRpZmZzdGF0IG7DpHIgc2FtbWFuc2xhZ25pbmdlbiDDpHIgZsOkcmRpZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4NworbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIihzeW5vbnltIHRpbGwgLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4OQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorImzDpGdnIHRpbGwgKHNvbSBtZXN0IDxuPikgcG9zdGVyIGZyw6VuIHNob3J0bG9nIHRpbGwgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTIKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAic2thcGEgZW4gZW5zYW0gaW5jaGVja25pbmcgaXN0w6RsbGV0IGbDtnIgZW4gc2FtbWFuc2xhZ25pbmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTQKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgInV0ZsO2ciBlbiBpbmNoZWNrbmluZyBvbSBzYW1tYW5zbGFnbmluZ2VuIGx5Y2thZGVzIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTYKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgInJlZGlnZXJhIG1lZGRlbGFuZGUgaW5uYW4gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTgKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICJ0aWxsw6V0IHNuYWJic3BvbG5pbmcgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMAorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgImF2YnJ5dCBvbSBzbmFiYnNwb2xuaW5nIGludGUgw6RyIG3DtmpsaWciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDIgYnVpbHRpbi9ub3Rlcy5jOjg3MCBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICJzdHJhdGVnaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMworbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAic2FtbWFuc2xhZ25pbnNzdHJhdGVnaSBhdHQgYW52w6RuZGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDQKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgImFsdGVybmF0aXY9dsOkcmRlIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA1Cittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiYWx0ZXJuYXRpdiBmw7ZyIHZhbGQgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDcKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgImluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciAoaWNrZSBzbmFiYnNwb2xhbmRlKSBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxMQorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJhdmJyeXQgZGVuIHDDpWfDpWVuZGUgc2FtbWFuc2xhZ25pbmdlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0MAorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICJrdW5kZSBrw7ZyYSBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDUKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgInN0YXNoIG1pc3NseWNrYWRlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICJpbnRlIGV0dCBnaWx0aWd0IG9iamVrdDogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9tZXJnZS5jOjI4NgorbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgInJlYWQtdHJlZSBtaXNzbHlja2FkZXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTYKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIChpbmdldCBhdHQgcGxhdHRhIHRpbGwpIgorCisjOiBidWlsdGluL21lcmdlLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiVGlsbHBsYXR0bmluZ3NpbmNoZWNrbmluZyAtLSB1cHBkYXRlcmFyIGludGUgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MzYxCittc2dpZCAiV3JpdGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICJTa3JpdmVyIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNjMKK21zZ2lkICJGaW5pc2hpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiQXZzbHV0YXIgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIkluZ2V0IHNhbW1hbnNsYWduaW5nc21lZGRlbGFuZGUgLS0gdXBwZGF0ZXJhciBpbnRlIEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICJcIiVzXCIgdmVya2FyIGludGUgcGVrYSBww6UgZW4gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiRmVsYWt0aWcgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucy1zdHLDpG5nOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjYyOAorbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgImdpdCB3cml0ZS10cmVlIG1pc3NseWNrYWRlcyBza3JpdmEgZXR0IHRyw6RkIgorCisjOiBidWlsdGluL21lcmdlLmM6Njc4Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICJtaXNzbHlja2FkcyBsw6RzYSBjYWNoZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDkKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJIYW50ZXJhciBpbnRlIG7DpWdvdCBhbm5hdCDDpG4gZW4gc2FtbWFuc2xhZ25pbmcgYXYgdHbDpSBodXZ1ZGVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJGZWxha3RpZyBmbGFnZ2EgZsO2ciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIkt1bmRlIGludGUgbMOkc2EgZnLDpW4gXCIlc1wiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIkNoZWNrYXIgaW50ZSBpbiBzYW1tYW5zbGFnbmluZ2VuOyBhbnbDpG5kIFwiZ2l0IGNvbW1pdFwiIGbDtnIgYXR0IHNsdXRmw7ZyYSAiCisiZGVuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODkxCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJBbmdlIGV0dCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgYXR0IGbDtnJrbGFyYSB2YXJmw7ZyIHNhbW1hbnNsYWduaW5nZW5cbiIKKyLDpHIgbsO2ZHbDpG5kaWcsIHNwZWNpZWxsdCBvbSBkZW4gc2zDpXIgaW4gZW4gdXBwZGF0ZXJhZCB1cHBzdHLDtm0gaSBlblxuIgorInRlbWFncmVuLlxuIgorIlxuIgorIlJhZGVyIHNvbSBpbmxlZHMgbWVkIFwiI1wiIGtvbW1lciBpZ25vcmVyYXMsIG9jaCBldHQgdG9tdCBtZWRkZWxhbmRlXG4iCisiYXZicnl0ZXIgaW5jaGVja25pbmdlbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkxNQorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiVG9tdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkyNworIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIlVuZGVyYmFydC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSBzbMOlIGlob3AgYXV0b21hdGlza3Q7IGZpeGEga29uZmxpa3RlciBvY2ggY2hlY2thIGluIHJlc3VsdGF0ZXQuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZW4gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQ5Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICJJbnRlIHDDpSBuw6Vnb24gZ3Jlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDUxCittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJJbmdlbiBmasOkcnIgZsO2ciBha3R1ZWxsIGdyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1MworbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiSW5nZW4gc3RhbmRhcmR1cHBzdHLDtm0gYW5naXZlbiBmw7ZyIGFrdHVlbGwgZ3Jlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZSB0cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIkluZ2VuIGZqw6RycnNww6VyYW5kZSBncmVuIGbDtnIgJXMgZnLDpW4gJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTQ1IGJ1aWx0aW4vbWVyZ2UuYzoxMzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiVzIC0gaW50ZSBuw6Vnb3Qgdmkga2FuIHNsw6UgaWhvcCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIkRldCBmaW5ucyBpbmdlbiBzYW1tYW5zbGFnbmluZyBhdHQgYXZicnl0YSAoTUVSR0VfSEVBRCBzYWtuYXMpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMjkgZ2l0LXB1bGwuc2g6MzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorIkR1IGhhciBpbnRlIGF2c2x1dGF0IHNhbW1hbnNsYWduaW5nZW4gKE1FUkdFX0hFQUQgZmlubnMpLlxuIgorIkNoZWNrYSBpbiBkaW5hIMOkbmRyaW5nYXIgaW5uYW4gZHUga2FuIHNsw6UgaWhvcC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjMyIGdpdC1wdWxsLnNoOjM0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICJEdSBoYXIgaW50ZSBhdnNsdXRhdCBzYW1tYW5zbGFnbmluZ2VuIChNRVJHRV9IRUFEIGZpbm5zKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjM2Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCittc2dzdHIgIiIKKyJEdSBoYXIgaW50ZSBhdnNsdXRhdCBkaW4gXCJjaGVycnktcGlja1wiIChDSEVSUllfUElDS19IRUFEIGZpbm5zKS5cbiIKKyJDaGVja2EgaW4gZGluYSDDpG5kcmluZ2FyIGlubmFuIGR1IGthbiBzbMOlIGlob3AuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzOQorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiRHUgaGFyIGludGUgYXZzbHV0YXQgZGluIFwiY2hlcnJ5LXBpY2tcIiAoQ0hFUlJZX1BJQ0tfSEVBRCBmaW5ucykuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI0OAorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICJEdSBrYW4gaW50ZSBrb21iaW5lcmEgLS1zcXVhc2ggbWVkIC0tbm8tZmYuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI1MworbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLW5vLWZmIHdpdGggLS1mZi1vbmx5LiIKK21zZ3N0ciAiRHUga2FuIGludGUga29tYmluZXJhIC0tbm8tZmYgbWVkIC0tZmYtb25seS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjYwCittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIkluZ2VuIGluY2hlY2tuaW5nIGFuZ2l2ZW4gb2NoIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIMOkciBlaiBzYXR0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTIKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICJLYW4gZW5kYXN0IHNsw6UgaWhvcCBlbiBlbmRhIGluY2hlY2tuaW5nIGkgZXR0IHRvbXQgaHV2dWQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5NQorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICJTdMO2ZGVyIGludGUgZW4gdGlsbHBsYXR0bmluZ3NpbmNoZWNrbmluZyBww6UgZXR0IHRvbXQgaHV2dWQgw6RubnUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk3Cittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIklja2Utc25hYmJzcG9sYWQgaW5jaGVja25pbmcga2FuIGludGUgYW52w6RuZGFzIG1lZCBldHQgdG9tdCBodXZ1ZCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIlVwcGRhdGVyYXIgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICJGw7Zyc8O2a2VyIHJpa3RpZ3QgZW5rZWwgc2FtbWFuc2xhZ25pbmcgaSBpbmRleGV0Li4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIk5lai5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODkKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIkthbiBpbnRlIHNuYWJic3BvbGEsIGF2YnJ5dGVyLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MTIgYnVpbHRpbi9tZXJnZS5jOjE1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIsOFdGVyc3BvbGFyIHRyw6RkZXQgdGlsbCBvcsO2cnQuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIkbDtnJzw7ZrZXIgc2FtbWFuc2xhZ25pbnNzdHJhdGVnaW4gJXMuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIkluZ2VuIHNhbW1hbnNsYWduaW5nc3N0cmF0ZWdpIGhhbnRlcmFkZSBzYW1tYW5zbGFnbmluZ2VuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiU2FtbWFuc2xhZ25pbmcgbWVkIHN0cmF0ZWdpbiAlcyBtaXNzbHlja2FkZXMuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICJBbnbDpG5kZXIgJXMgZsO2ciBhdHQgZsO2cmJlcmVkYSBsw7ZzbmluZyBmw7ZyIGhhbmQuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIiIKKyJBdXRvbWF0aXNrIHNhbW1hbnNsYWduaW5nIGx5Y2thZGVzOyBzdG9wcGFyIGbDtnJlIGluY2hlY2tuaW5nIHNvbSDDtm5za2F0XG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjI2Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hfC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hfC0tYWxsXSA8aW5jaGVja25pbmc+IDxpbmNoZWNrbmluZz4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjI3Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hfC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYXwtLWFsbF0gLS1vY3RvcHVzIDxpbmNoZWNrbmluZz4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjI4Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8aW5jaGVja25pbmc+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyOQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGluY2hlY2tuaW5nPiA8aW5jaGVja25pbmc+IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzo5OAorbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAic2tyaXYgdXQgYWxsYSBnZW1lbnNhbW1hIGFuZsOkZGVyIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzo5OQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAiaGl0dGEgYW5mYWRlciBmw7ZyIGVua2VsIG4tdsOkZ3NzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTAwCittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgInZpc2EgcmV2aXNpb25lciBzb20gaW50ZSBrYW4gbsOlcyBmcsOlbiBhbmRyYSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTAyCittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICLDpHIgZGVuIGbDtnJzdGEgYW5mYWRlciB0aWxsIGRlbiBhbmRyYT8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjgKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgW29wdGlvbnNdIFstTCBuYW1lMSBbLUwgb3JpZyBbLUwgbmFtZTJdXV0gZmlsZTEgb3JpZ19maWxlICIKKyJmaWxlMiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFthbHRlcm5hdGl2XSBbLUwgbmFtbjEgWy1MIG9yaWcgWy1MIG5hbW4yXV1dIGZpbDEgb3JpZ2ZpbCBmaWwyIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozMworbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgInPDpG5kIHJlc3VsdGF0IHRpbGwgc3RhbmRhcmQgdXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM0Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgImFudsOkbmQgZGlmZjMtYmFzZXJhZCBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgImbDtnIga29uZmxpa3RlciwgYW52w6RuZCB2w6VyIHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM3Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgImbDtnIga29uZmxpa3RlciwgYW52w6RuZCBkZXJhcyB2ZXJzaW9uIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgImbDtnIga29uZmxpa3RlciwgYW52w6RuZCBlbiBmw7ZyZW5hZCB2ZXJzaW9uIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MgorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIgorbXNnc3RyICJmw7ZyIGtvbmZsaWt0ZXIsIGFudsOkbmQgZGVubmEgbWFya8O2cnN0b3JsZWsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQzCittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICJ2YXJuYSBpbnRlIG9tIGtvbmZsaWt0ZXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZ19maWxlL2ZpbGUyIgorbXNnc3RyICJzw6R0dCBldGlrZXR0ZXIgZsO2ciBmaWwxL29yaWdmaWwvZmlsMiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NworbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUzCittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgImluZGF0YSDDpHIgTlVMLXRlcm1pbmVyYWQiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI0Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJ0aWxsw6V0IHNha25hZGUgb2JqZWt0IgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NQorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAidGlsbMOldCBza2FwYSBtZXIgw6RuIGV0dCB0csOkZCIKKworIzogYnVpbHRpbi9tdi5jOjE0Cittc2dpZCAiZ2l0IG12IFtvcHRpb25zXSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgW2ZsYWdnb3JdIDxrw6RsbGE+Li4uIDxtw6VsPiIKKworIzogYnVpbHRpbi9tdi5jOjY0Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJ0dmluZ2EgZmx5dHRhL8OkbmRyYSBuYW1uIMOkdmVuIG9tIG3DpWxldCBmaW5ucyIKKworIzogYnVpbHRpbi9tdi5jOjY1Cittc2dpZCAic2tpcCBtb3ZlL3JlbmFtZSBlcnJvcnMiCittc2dzdHIgImhvcHBhIMO2dmVyIGZlbCB2aWQgZmx5dHQvbmFtbsOkbmRyaW5nIgorCisjOiBidWlsdGluL212LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAiS29udHJvbGxlcmFyIG5hbW5ieXRlIGF2IFwiJXNcIiB0aWxsIFwiJXNcIlxuIgorCisjOiBidWlsdGluL212LmM6MTEyCittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAiZmVsYWt0aWcga8OkbGxhIgorCisjOiBidWlsdGluL212LmM6MTE1Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAia2FuIGludGUgZmx5dHRhIGthdGFsb2cgdGlsbCBzaWcgc2rDpGx2IgorCisjOiBidWlsdGluL212LmM6MTE4Cittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgZmx5dHRhIGthdGFsb2cgw7Z2ZXIgZmlsIgorCisjOiBidWlsdGluL212LmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aD8gJS4qcyBpcyBpbiBpbmRleD8iCittc2dzdHIgIlZhZD8gJS4qcyDDpHIgaSBpbmRleGV0PyIKKworIzogYnVpbHRpbi9tdi5jOjE0MAorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgImvDpGxsa2F0YWxvZ2VuIMOkciB0b20iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzEKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICJpbnRlIHZlcnNpb25zaGFudGVyYWQiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzMKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgImRlc3RpbmF0aW9uZW4gZmlubnMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAic2tyaXZlciDDtnZlciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJLYW4gaW50ZSBza3JpdmEgw7Z2ZXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgImZsZXJhIGvDpGxsb3IgZsO2ciBzYW1tYSBtw6VsIgorCisjOiBidWlsdGluL212LmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywga8OkbGxhPSVzLCBtw6VsPSVzIgorCisjOiBidWlsdGluL212LmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIkJ5dGVyIG5hbW4gcMOlICVzIHRpbGwgJXNcbiIKKworIzogYnVpbHRpbi9tdi5jOjIxNSBidWlsdGluL3JlbW90ZS5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGJ5dGEgbmFtbiBww6UgXCIlc1wiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MTc1Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFtvcHRpb25zXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFtmbGFnZ29yXSA8aW5jaGVja25pbmc+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MTc2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFtvcHRpb25zXSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFtmbGFnZ29yXSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjE3NworbXNnaWQgImdpdCBuYW1lLXJldiBbb3B0aW9uc10gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFtmbGFnZ29yXSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjI5Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJza3JpdiBlbmRhc3QgbmFtbiAoaW5nZW4gU0hBLTEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjMwCittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJhbnbDpG5kIGVuZGFzdCB0YWdnYXIgZsO2ciBhdHQgbmFtbmdlIGluY2hlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyMzIKK21zZ2lkICJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiYW52w6RuZCBlbmRhc3QgcmVmZXJlbnNlciBzb20gbW90c3ZhcmFyIDxtw7Zuc3Rlcj4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyMzQKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICJsaXN0YSBhbGxhIGluY2hlY2tuaW5nYXIgc29tIGthbiBuw6VzIGFsbGEgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjIzNQorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAibMOkcyBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjIzNgorbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIgorbXNnc3RyICJ0aWxsw6V0IGF0dCBza3JpdmEgXCJvZGVmaW5pZXJhZGVcIiBuYW1uIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBbbGlzdCBbPG9iamVrdD5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGFkZCBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICgtYyB8IC1DKSAiCisiPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIGFkZCBbLWZdIFstbSA8bWVkZD4gfCAtRiA8ZmlsPiB8ICgtYyB8IC0iCisiQykgPG9iamVrdD5dIFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBjb3B5IFstZl0gPGZyw6VuLW9iamVrdD4gPHRpbGwtb2JqZWt0PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGFwcGVuZCBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAoLWMgfCAtQykgIgorIjxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBhcHBlbmQgWy1tIDxtZWRkPiB8IC1GIDxmaWw+IHwgKC1jIHwgLUMpICIKKyI8b2JqZWt0Pl0gWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIGVkaXQgWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIHNob3cgWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5PiBdIDxub3Rlc19yZWY+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVnaT4gXSAiCisiPGFudGVja25pbmdzcmVmPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIHJlbW92ZSBbPG9iamVrdD4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBwcnVuZSBbLW4gfCAtdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gcHJ1bmUgWy1uIHwgLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MgorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWt0Pl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDcKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgWzxmbGFnZ29yPl0gWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUyCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzxmbGFnZ29yPl0gPGZyw6VuLW9iamVrdD4gPHRpbGwtb2JqZWt0PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcsOlbi1vYmpla3Q+IDx0aWxsLW9iamVrdD5dLi4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NTgKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhcHBlbmQgWzxmbGFnZ29yPl0gWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYzCittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGVkaXQgWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY4Cittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlc19yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgWzxmbGFnZ29yPl0gPGFudGVja25pbmdzcmVmPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwCittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NQorbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImt1bmRlIGludGUgc3RhcnRhIFwic2hvd1wiIGbDtnIgb2JqZWt0ZXQgXCIlc1wiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTQ4Cittc2dpZCAiY2FuJ3QgZmRvcGVuICdzaG93JyBvdXRwdXQgZmQiCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIChmZG9wZW4pIFwic2hvd1wiLXV0ZGF0YS1maWxoYW5kdGFnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImt1bmRlIGludGUgc3TDpG5nYSByw7ZyZXQgdGlsbCBcInNob3dcIiBmw7ZyIG9iamVrdGV0IFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImt1bmRlIGludGUgYXZzbHV0YSBcInNob3dcIiBmw7ZyIG9iamVrdGV0IFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE3OCBidWlsdGluL3RhZy5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBmaWxlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTIKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgIkFuZ2UgaW5uZWjDpWxsIGbDtnIgYW50ZWNrbmluZ2VuIG1lZCBhbnRpbmdlbiAtbSBlbGxlciAtRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIxMyBidWlsdGluL25vdGVzLmM6OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICJUYXIgYm9ydCBhbnRlY2tuaW5nIGbDtnIgb2JqZWt0ZXQgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIxOAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgYW50ZWNrbmluZ3NvYmpla3QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG5vdGUgY29udGVudHMgaGFzIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiQW50ZWNrbmluZ2VucyBpbm5laMOlbGwgaGFyIGzDpG1uYXRzIGt2YXIgaSAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1NCBidWlsdGluL3RhZy5jOjU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1NiBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIGVsbGVyIGzDpHNhIFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3NSBidWlsdGluL25vdGVzLmM6NDQ4IGJ1aWx0aW4vbm90ZXMuYzo0NTAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTAgYnVpbHRpbi9ub3Rlcy5jOjU2NCBidWlsdGluL25vdGVzLmM6NjQ3CisjOiBidWlsdGluL25vdGVzLmM6NjUyIGJ1aWx0aW4vbm90ZXMuYzo3MjcgYnVpbHRpbi9ub3Rlcy5jOjc2OQorIzogYnVpbHRpbi9ub3Rlcy5jOjk3MSBidWlsdGluL3Jlc2V0LmM6MjkzIGJ1aWx0aW4vdGFnLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJLdW5kZSBpbnRlIHNsw6UgdXBwIFwiJXNcIiBzb20gZW4gZ2lsdGlnIHJlZmVyZW5zLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgIkt1bmRlIGludGUgbMOkc2Egb2JqZWt0ZXQgXCIlc1wiLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwMgorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAiS2FuIGludGUgY2hlY2thIGluIG9pbml0aWVyYXQvb3JlZmVyZXJhdCBhbnRlY2tuaW5nc3Ryw6RkIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiRmVsYWt0aWd0IHbDpHJkZSBmw7ZyIG5vdGVzLnJld3JpdGVNb2RlOiAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJWw6RncmFyIHNrcml2YSDDtnZlciBhbnRlY2tuaW5nYXIgaSAlcyAodXRhbmbDtnIgcmVmcy9ub3Rlcy8pIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIHRoZQorIy4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMgaXRzIHZhbHVlCisjOiBidWlsdGluL25vdGVzLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiRmVsYWt0aWd0IHbDpHJkZSBww6UgJXM6IFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIkZlbGFrdGlnIGluZGF0YXJhZDogXCIlc1wiLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGtvcGllcmEgYW50ZWNrbmluZ2FyIGZyw6VuIFwiJXNcIiB0aWxsIFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUwMyBidWlsdGluL25vdGVzLmM6NTU3IGJ1aWx0aW4vbm90ZXMuYzo2MzAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NDIgYnVpbHRpbi9ub3Rlcy5jOjcxNSBidWlsdGluL25vdGVzLmM6NzYyCisjOiBidWlsdGluL25vdGVzLmM6MTAzNgorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgImbDtnIgbcOlbmdhIHBhcmFtZXRyYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTYgYnVpbHRpbi9ub3Rlcy5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJJbmdhIGFudGVja25pbmdhciBoaXR0YWRlcyBmw7ZyIG9iamVrdGV0ICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzOCBidWlsdGluL25vdGVzLmM6Njk1Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAiYW50ZWNrbmluZ3Npbm5laMOlbGwgc29tIHN0csOkbmciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NDEgYnVpbHRpbi9ub3Rlcy5jOjY5OAorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJhbnRlY2tuaW5nc2lubmVow6VsbCBpIGVuIGZpbCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0MyBidWlsdGluL25vdGVzLmM6NTQ2IGJ1aWx0aW4vbm90ZXMuYzo3MDAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDMgYnVpbHRpbi90YWcuYzo0NzYKK21zZ2lkICJvYmplY3QiCittc2dzdHIgIm9iamVrdCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0NCBidWlsdGluL25vdGVzLmM6NzAxCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLDpXRlcmFudsOkbmQgb2NoIHJlZGlnZXJhIGFuZ2l2ZXQgYW50ZWNrbmluZ3NvYmpla3QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NDcgYnVpbHRpbi9ub3Rlcy5jOjcwNAorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiw6V0ZXJhbnbDpG5kIGFuZ2l2ZXQgYW50ZWNrbmluZ3NvYmpla3QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NDkgYnVpbHRpbi9ub3Rlcy5jOjYxNworbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgImVyc8OkdHQgYmVmaW50bGlnYSBhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJLYW4gaW50ZSBsw6RnZ2EgdGlsbCBhbnRlY2tuaW5nYXIuIEhpdHRhZGUgYmVmaW50bGlnYSBhbnRlY2tuaW5nYXIgZsO2ciAiCisib2JqZWt0ZXQgJXMuIEFudsOkbmQgXCItZlwiIGbDtnIgYXR0IHNrcml2YSDDtnZlciBiZWZpbnRsaWdhIGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4OCBidWlsdGluL25vdGVzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiU2tyaXZlciDDtnZlciBiZWZpbnRsaWdhIGFudGVja25pbmdhciBmw7ZyIG9iamVrdGV0ICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MTgKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibMOkcyBvYmpla3QgZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MjAKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAibMOkcyBvbXNrcml2bmluZ3NpbnN0w6RsbG5pbmcgZsO2ciA8a29tbWFuZG8+IChpbXBsaWNlcmFyIC0tc3RkaW4pIgorCisjOiBidWlsdGluL25vdGVzLmM6NjM4Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICJmw7ZyIGbDpSBwYXJhbWV0cmFyIgorCisjOiBidWlsdGluL25vdGVzLmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGtvcGllcmEgYW50ZWNrbmluZ2FyLiBIaXR0YWRlIGJlZmludGxpZ2EgYW50ZWNrbmluZ2FyIGbDtnIgb2JqZWt0ZXQgIgorIiVzLiBBbnbDpG5kIFwiLWZcIiBmw7ZyIGF0dCBza3JpdmEgw7Z2ZXIgYmVmaW50bGlnYSBhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIkFudGVja25pbmdhciBww6Uga8OkbGxvYmpla3RldCAlcyBzYWtuYXMuIEthbiBpbnRlIGtvcGllcmEuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyJGbGFnZ29ybmEgLW0vLUYvLWMvLUMgcmVrb21tZW5kZXJhcyBpbnRlIGbDtnIgdW5kZXJrb21tYW5kb3QgXCJlZGl0XCIuXG4iCisiQW52w6RuZCBcImdpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUNcIiBpc3TDpGxsZXQuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NjcKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIkFsbG3DpG5uYSBmbGFnZ29yIgorCisjOiBidWlsdGluL25vdGVzLmM6ODY5Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiRmxhZ2dvciBmw7ZyIHNhbW1hbnNsYWduaW5nIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcxCittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorImzDpHMga29uZmxpa3RlciBpIGFudGVja25pbmdhciBtZWQgYW5naXZlbiBzdHJhdGVnaSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3MworbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIkNoZWNrYXIgaW4gZWogc2FtbWFuc2xhZ25hIGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3NQorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIiIKKyJmw6RyZGlnc3TDpGxsIHNhbW1hbnNsYWduaW5nIGF2IGFudGVja25pbmdhciBnZW5vbSBhdHQgY2hlY2thIGluIGVqICIKKyJzYW1tYW5zbGFnbmEgYW50ZWNrbmluZ2FyIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc3Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiQXZicnl0IGzDtnNuaW5nIGF2IHNhbW1hbnNsYWduaW5nIGF2IGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3OQorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICJhdmJyeXQgc2FtbWFuc2xhZ25pbmcgYXYgYW50ZWNrbmluZ2FyIgorCisjOiBidWlsdGluL25vdGVzLmM6OTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICJPYmpla3RldCAlcyBoYXIgaW5nZW4gYW50ZWNrbmluZ1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTg2Cittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICJmw7Zyc8O2ayBhdHQgdGEgYm9ydCBpY2tlLWV4aXN0ZXJhbmRlIGFudGVja25pbmdhciDDpHIgaW50ZSBldHQgZmVsIgorCisjOiBidWlsdGluL25vdGVzLmM6OTg5Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImzDpHMgb2JqZWt0bmFtbiBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwNzAKK21zZ2lkICJub3Rlc19yZWYiCittc2dzdHIgImFudGVja25pbmdhci1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDcxCittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzX3JlZj4iCittc2dzdHIgImFudsOkbmQgYW50ZWNrbmluZ2FyIGZyw6VuIDxhbnRlY2tuaW5nc3JlZj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMTA2IGJ1aWx0aW4vcmVtb3RlLmM6MTU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJPa8OkbnQgdW5kZXJrb21tYW5kbzogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMKK21zZ2lkICJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFtvcHRpb25zLi4uXSBbPCByZWYtbGlzdCB8IDwgb2JqZWN0LWxpc3RdIgorbXNnc3RyICJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFtmbGFnZ29yLi4uXSBbPCByZWZsaXN0YSB8IDwgb2JqZWt0bGlzdGFdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0Cittc2dpZCAiZ2l0IHBhY2stb2JqZWN0cyBbb3B0aW9ucy4uLl0gYmFzZS1uYW1lIFs8IHJlZi1saXN0IHwgPCBvYmplY3QtbGlzdF0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgW2ZsYWdnb3IuLi5dIGJhc25hbW4gWzwgcmVmbGlzdGEgfCA8IG9iamVrdGxpc3RhXSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJmZWwgaSBkZWZsYXRlICglZCkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICJpbmRleHZlcnNpb25lbiAlcyBzdMO2ZHMgZWoiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJmZWxha3RpZyBpbmRleHZlcnNpb24gXCIlc1wiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICVzIGRvZXMgbm90IGFjY2VwdCBuZWdhdGl2ZSBmb3JtIgorbXNnc3RyICJmbGFnZ2FuICVzIGdvZHRhciBpbnRlIG5lZ2F0aXYgZm9ybSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSB2YWx1ZSAnJXMnIGZvciBvcHRpb24gJXMiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgdsOkcmRldCBcIiVzXCIgZsO2ciBmbGFnZ2FuICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NDgKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAidmlzYSBpbnRlIGbDtnJsb3Bwc2luZGlrYXRvciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDUwCittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAidmlzYSBmw7ZybG9wcHNpbmRpa2F0b3IiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1MgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICJ2aXNhIGbDtnJsb3Bwc2luZGlrYXRvciB1bmRlciBvYmpla3Rza3Jpdm5pbmdzZmFzZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1NQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAic29tIC0tYWxsLXByb2dyZXNzIG7DpHIgZsO2cmxvcHBzbcOkdGFyZW4gdmlzYXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1NgorbXNnaWQgInZlcnNpb25bLG9mZnNldF0iCittc2dzdHIgInZlcnNpb25bLG9mZnNldF0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1NworbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgInNrcml2IHBha2V0aW5kZXhmaWxlbiBpIGFuZ2l2ZW4gaW5kZXhmb3JtYXR2ZXJzaW9uIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NjAKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICJtYXhpbWFsIHN0b3JsZWsgcMOlIHZhcmplIHV0ZGF0YXBha2V0ZmlsIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NjIKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgImlnbm9yZXJhIGzDpW5hZGUgb2JqZWt0IGZyw6VuIGFsdGVybmF0aXZhIG9iamVrdGxhZ2VyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NjQKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgImlnbm9yZXJhIHBhY2thZGUgb2JqZWt0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NjYKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICJiZWdyw6Ruc2EgcGFrZXRmw7Zuc3RlciBlZnRlciBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ2OAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgImJlZ3LDpG5zYSBwYWtldGbDtm5zdGVyIGVmdGVyIG1pbm5lIGbDtnJ1dG9tIG9iamVrdGdyw6RucyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDcwCittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIm1heGltYWwgbMOkbmdkIHDDpSBkZWx0YWtlZGphIHRpbGzDpXRlbiBpIHNsdXRsaWd0IHBha2V0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NzIKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgIsOldGVyYW52w6RuZCBiZWZpbnRsaWdhIGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NzQKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICLDpXRlcmFudsOkbmQgYmVmaW50bGlnYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ3NgorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAiYW52w6RuZCBPRlNfREVMVEEtb2JqZWt0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NzgKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICJhbnbDpG5kIHRyw6VkYXIgdmlkIHPDtmtuaW5nIGVmdGVyIGLDpHN0YSBkZWx0YXRyw6RmZmFyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODAKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICJmw7Zyc8O2ayBpbnRlIHNrYXBhIHRvbSBwYWtldHV0ZGF0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDgyCittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibMOkcyByZXZpc2lvbnNhcmd1bWVudCBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDg0Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgImJlZ3LDpG5zYSBvYmpla3QgdGlsbCBkZSBzb20gw6RubnUgaW50ZSBwYWNrYXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiaW5rbHVkZXJhIG9iamVrdCBzb20ga2FuIG7DpXMgZnLDpW4gbsOlZ29uIHJlZmVyZW5zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0OTAKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgImlua2x1ZGVyYSBvYmpla3Qgc29tIHJlZmVyZXJhcyBmcsOlbiByZWZlcmVuc2xvZ2dwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ5MworbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAic2tyaXYgcGFrZXQgcMOlIHN0YW5kYXJkIHV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0OTUKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgImlua2x1ZGVyYSB0YWdnb2JqZWt0IHNvbSByZWZlcmVyYXIgb2JqZWt0IHNvbSBza2FsbCBwYWNrYXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ5NworbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiYmVow6VsbCBvbsOlYmFyYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ5OCBwYXJzZS1vcHRpb25zLmg6MTQxCittc2dpZCAidGltZSIKK21zZ3N0ciAidGlkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0OTkKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAicGFja2EgdXBwIG9uw6ViYXJhIG9iamVrdCBueWFyZSDDpG4gPHRpZD4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjUwMgorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICJza2FwYSB0dW5uYSBwYWtldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTA0Cittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAiaWdub3JlcmEgcGFrZXQgc29tIGhhciB0aWxsaMO2cmFuZGUgLmtlZXAtZmlsIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1MDYKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICJrb21wcmltZXJpbmdzZ3JhZCBmw7ZyIHBha2V0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1MDgKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAiZ8O2bSBpbnRlIGluY2hlY2tuaW5nYXIgbWVkIHltcG5pbmdhciAoXCJncmFmdHNcIikiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6NgorbXNnaWQgImdpdCBwYWNrLXJlZnMgW29wdGlvbnNdIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFtmbGFnZ29yXSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNAorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAicGFja2EgYWxsdCIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNQorbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICJ0YSBib3J0IGzDtnNhIHJlZmVyZW5zZXIgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW58LS1kcnktcnVuXSBbLXF8LS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1ufC0tZHJ5LXJ1bl0gWy1xfC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDx0aWQ+XSBbLS1dIFs8aHV2dWQ+Li4uXSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzMgorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAidGEgaW50ZSBib3J0LCBiYXJhIHZpc2EiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzMKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgInJhcHBvcnRlcmEgYm9ydHRhZ25hIG9iamVrdCIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNgorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJsw6V0IHRpZCBnw6UgdXQgZsO2ciBvYmpla3Qgw6RsZHJlIMOkbiA8dGlkPiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzxmbGFnZ29yPl0gWzxhcmtpdj4gWzxyZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL3B1c2guYzo0NQorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAidGFnZ2bDtnJrb3J0bmluZyB1dGFuIDx0YWdnPiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjQKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgZ29kdGFyIGVuZGFzdCBlbmtsYSBtw6VscmVmZXJlbnNuYW1uIgorCisjOiBidWlsdGluL3B1c2guYzo5OQorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyJGw7ZyIGF0dCB2w6RsamEgZXR0IGF2IGFsdGVybmF0aXZlbiBwZXJtYW5lbnQsIHNlIHB1c2guZGVmYXVsdCBpIFwiZ2l0IGhlbHAgIgorImNvbmZpZ1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKICIlcyIKIG1zZ3N0ciAiIgotIkZlbCB2aWQgaMOkbXRuaW5nIGF2IHZlcnNpb25lcjpcbiIKKyJVcHBzdHLDtm1zZ3JlbmVuIGbDtnIgZGluIG51dmFyYW5kZSBncmVuIHN0w6RtbWVyIGludGUgw7Z2ZXJlbnNcbiIKKyJtZWQgbmFtbmV0IHDDpSBkaW4gYWt0dWVsbGEgZ3Jlbi4gRsO2ciBhdHQgc8OkbmRhIHRpbGwgdXBwc3Ryw7Ztc2dyZW5lblxuIgorImkgZmrDpHJyYXJraXZldCBhbnbDpG5kZXIgZHVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIkbDtnIgYXR0IHPDpG5kYSB0aWxsIGdyZW5lbiBtZWQgc2FtbWEgbmFtbiBpIGZqw6RycmFya2l2ZXQgYW52w6RuZGVyIGR1XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzICVzXG4iCiAiJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MwotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9wdXNoLmM6MTIxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgogIlxuIgotIiVzIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCiBtc2dzdHIgIiIKLSJLdW5kZSBpbnRlIHN0YXJ0YSB2ZXJrdHlnIGbDtnIgc2FtbWFuc2xhZ25pbmc6XG4iCisiRHUgw6RyIGludGUgcMOlIG7DpWdvbiBncmVuIGbDtnIgbsOkcnZhcmFuZGUuXG4iCisiRsO2ciBhdHQgc8OkbmRhIGluIGhpc3RvcmlrZW4gc29tIGxlZGVyIHRpbGwgZGVuIGFrdHVlbGxhIChmcsOlbmtvcHBsYXRcbiIKKyJIRUFEKSBzaXR1YXRpb25lbiBhbnbDpG5kZXIgZHVcbiIKICJcbiIKLSIlcyIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtbi1ww6UtZmrDpHJyZ3Jlbj5cbiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzQ3Ci1tc2dpZCAiUnVubmluZyBtZXJnZSB0b29sLi4uIgotbXNnc3RyICJLw7ZyIHZlcmt0eWcgZsO2ciBzYW1tYW5zbGFnbmluZy4uLiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6Mzc1IGxpYi9tZXJnZXRvb2wudGNsOjM4MwotbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKLW1zZ3N0ciAiVmVya3R5Z2V0IGbDtnIgc2FtbWFuc2xhZ25pbmcgbWlzc2x5Y2thZGVzLiIKLQotIzogbGliL29wdGlvbi50Y2w6MTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgotbXNnc3RyICJEZW4gZ2xvYmFsYSB0ZWNrZW5rb2RuaW5nZW4gXCIlc1wiIMOkciBvZ2lsdGlnIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgotbXNnc3RyICJBcmtpdmV0cyB0ZWNrZW5rb2RuaW5nIFwiJXNcIiDDpHIgb2dpbHRpZyIKLQotIzogbGliL29wdGlvbi50Y2w6MTE5Ci1tc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGwgc3RhbmRhcmR2w6RyZGVuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjMKLW1zZ2lkICJTYXZlIgotbXNnc3RyICJTcGFyYSIKLQotIzogbGliL29wdGlvbi50Y2w6MTMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQXJraXZldCAlcyIKLQotIzogbGliL29wdGlvbi50Y2w6MTM0Ci1tc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKLW1zZ3N0ciAiR2xvYmFsdCAoYWxsYSBhcmtpdikiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MAotbXNnaWQgIlVzZXIgTmFtZSIKLW1zZ3N0ciAiQW52w6RuZGFybmFtbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTQxCi1tc2dpZCAiRW1haWwgQWRkcmVzcyIKLW1zZ3N0ciAiRS1wb3N0YWRyZXNzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDMKLW1zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKLW1zZ3N0ciAiU3VtbWVyYSBzYW1tYW5zbGFnbmluZ3NpbmNoZWNrbmluZ2FyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDQKLW1zZ2lkICJNZXJnZSBWZXJib3NpdHkiCi1tc2dzdHIgIlByYXRzYW1oZXQgZsO2ciBzYW1tYW5zbGFnbmluZ2FyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDUKLW1zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgotbXNnc3RyICJWaXNhIGRpZmZzdGF0aXN0aWsgZWZ0ZXIgc2FtbWFuc2xhZ25pbmciCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NgotbXNnaWQgIlVzZSBNZXJnZSBUb29sIgotbXNnc3RyICJBbnbDpG5kIHZlcmt0eWcgZsO2ciBzYW1tYW5zbGFnbmluZyIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ4Ci1tc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKLW1zZ3N0ciAiTGl0YSBww6UgZmlsw6RuZHJpbmdzdGlkc3N0w6RtcGxhciIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ5Ci1tc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgotbXNnc3RyICJTdMOkZGEgc3DDpXJhZGUgZ3JlbmFyIHZpZCBow6RtdG5pbmciCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MAotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgotbXNnc3RyICJNYXRjaGEgc3DDpXJhZGUgZ3JlbmFyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTEKLW1zZ2lkICJVc2UgVGV4dGNvbnYgRm9yIERpZmZzIGFuZCBCbGFtZXMiCi1tc2dzdHIgIkFudsOkbmQgVGV4dGNvbnYgZsO2ciBkaWZmIG9jaCBrbGFuZHJpbmciCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MgotbXNnaWQgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIgotbXNnc3RyICJLbGFuZHJhIGtvcGllcmluZyBiYXJhIGkgw6RuZHJhZGUgZmlsZXIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MwotbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgotbXNnc3RyICJNaW5zdGEgYW50YWwgdGVja2VuIGF0dCBrbGFuZHJhIGtvcGllcmluZyBmw7ZyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTQKLW1zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKLW1zZ3N0ciAiSGlzdG9yaWtyYWRpZSBmw7ZyIGtsYW5kcmluZyAoZGFnYXIpIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTUKLW1zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgotbXNnc3RyICJBbnRhbCByYWRlciBzYW1tYW5oYW5nIGkgZGlmZmVyZW5zZXIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NgotbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCi1tc2dzdHIgIlRleHRicmVkZCBmw7ZyIGluY2hlY2tuaW5nc21lZGRlbGFuZGUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NwotbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKLW1zZ3N0ciAiTWFsbCBmw7ZyIG5hbW4gcMOlIG55YSBncmVuYXIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1OAotbXNnaWQgIkRlZmF1bHQgRmlsZSBDb250ZW50cyBFbmNvZGluZyIKLW1zZ3N0ciAiU3RhbmRhcmR0ZWNrZW5rb2RuaW5nIGbDtnIgZmlsaW5uZWjDpWxsIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyMDQKLW1zZ2lkICJDaGFuZ2UiCi1tc2dzdHIgIsOEbmRyYSIKLQotIzogbGliL29wdGlvbi50Y2w6MjMxCi1tc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCi1tc2dzdHIgIlN0YXZuaW5nc29yZGxpc3RhOiIKLQotIzogbGliL29wdGlvbi50Y2w6MjYxCi1tc2dpZCAiQ2hhbmdlIEZvbnQiCi1tc2dzdHIgIkJ5dCB0ZWNrZW5zbml0dCIKLQotIzogbGliL29wdGlvbi50Y2w6MjY1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hvb3NlICVzIgotbXNnc3RyICJWw6RsaiAlcyIKLQotIzogbGliL29wdGlvbi50Y2w6MjcxCi1tc2dpZCAicHQuIgotbXNnc3RyICJwLiIKLQotIzogbGliL29wdGlvbi50Y2w6Mjg1Ci1tc2dpZCAiUHJlZmVyZW5jZXMiCi1tc2dzdHIgIkluc3TDpGxsbmluZ2FyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDozMjIKLW1zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgotbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBoZWx0IHNwYXJhIGFsdGVybmF0aXY6IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjAKLW1zZ2lkICJBZGQgUmVtb3RlIgotbXNnc3RyICJMw6RnZyB0aWxsIGZqw6RycmFya2l2IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjUKLW1zZ2lkICJBZGQgTmV3IFJlbW90ZSIKLW1zZ3N0ciAiTMOkZ2cgdGlsbCBueXR0IGZqw6RycmFya2l2IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzAgbGliL3Rvb2xzX2RsZy50Y2w6MzcKLW1zZ2lkICJBZGQiCi1tc2dzdHIgIkzDpGdnIHRpbGwiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozOQotbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgotbXNnc3RyICJEZXRhbGplciBmw7ZyIGZqw6RycmFya2l2IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKLW1zZ2lkICJMb2NhdGlvbjoiCi1tc2dzdHIgIlBsYXRzOiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjYwCi1tc2dpZCAiRnVydGhlciBBY3Rpb24iCi1tc2dzdHIgIll0dGVybGlnYXJlIMOldGfDpHJkIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjMKLW1zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKLW1zZ3N0ciAiSMOkbXRhIG9tZWRlbGJhcnQiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2OQotbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCi1tc2dzdHIgIkluaXRpZXJhIGZqw6RycmFya2l2IG9jaCBzw6RuZCB0aWxsIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzUKLW1zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgotbXNnc3RyICJHw7ZyIGluZ2VudCBtZXIgbnUiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDAKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgotbXNnc3RyICJBbmdlIGV0dCBuYW1uIGbDtnIgZmrDpHJyYXJraXZldC4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKLW1zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBzb20gbmFtbiBww6UgZmrDpHJyYXJraXZldC4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgotbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIGZqw6RycmFya2l2ZXQgXCIlc1wiIHDDpSBwbGF0c2VuIFwiJXNcIi4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzIgbGliL3RyYW5zcG9ydC50Y2w6NgotIywgdGNsLWZvcm1hdAotbXNnaWQgImZldGNoICVzIgotbXNnc3RyICJow6RtdGEgJXMiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyB0aGUgJXMiCi1tc2dzdHIgIkjDpG10YXIgJXMiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgotbXNnc3RyICJWZXQgaW50ZSBodXIgYXJraXZldCBww6UgcGxhdHNlbiBcIiVzXCIgc2thbGwgaW5pdGllcmFzLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MiBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo2MwotIzogbGliL3RyYW5zcG9ydC50Y2w6ODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJwdXNoICVzIgotbXNnc3RyICJzw6RuZCAlcyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCi1tc2dzdHIgIktvbmZpZ3VyZXJhciAlcyAocMOlICVzKSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Ci1tc2dpZCAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKLW1zZ3N0ciAiVGEgYm9ydCBncmVuIGZyw6VuIGZqw6RycmFya2l2IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ4Ci1tc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgotbXNnc3RyICJGcsOlbiBhcmtpdiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MSBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKLW1zZ2lkICJSZW1vdGU6IgotbXNnc3RyICJGasOkcnJhcmtpdjoiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NzIgbGliL3RyYW5zcG9ydC50Y2w6MTU0Ci1tc2dpZCAiQXJiaXRyYXJ5IExvY2F0aW9uOiIKLW1zZ3N0ciAiR29kdHlja2xpZyBwbGF0czoiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODgKLW1zZ2lkICJCcmFuY2hlcyIKLW1zZ3N0ciAiR3JlbmFyIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMAotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIgotbXNnc3RyICJUYSBlbmRhc3QgYm9ydCBvbSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTIKLW1zZ2lkICJNZXJnZWQgSW50bzoiCi1tc2dzdHIgIlNhbW1hbnNsYWdlbiBpOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTMKLW1zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCi1tc2dzdHIgIkVuIGdyZW4ga3LDpHZzIGbDtnIgXCJTYW1tYW5zbGFnZW4gaVwiLiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODUKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyOAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKICJcbiIKLSIgLSAlcyIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKIG1zZ3N0ciAiIgotIkbDtmxqYW5kZSBncmVuYXIgaGFyIGludGUgaGVsdCBzbGFnaXRzIHNhbW1hbiBpICVzOlxuIgorIkRlbiBha3R1ZWxsYSBncmVuZW4gJXMgaGFyIGluZ2VuIHVwcHN0csO2bXNncmVuLlxuIgorIkbDtnIgYXR0IHPDpG5kYSBha3R1ZWxsIGdyZW4gb2NoIGFuZ2UgZmrDpHJyYXJraXYgc29tIHVwcHN0csO2bSBhbnbDpG5kZXIgZHVcbiIKICJcbiIKLSIgLSAlcyIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxOTAKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcHVzaC5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiRGVuIGFrdHVlbGxhIGdyZW5lbiAlcyBoYXIgZmxlcmEgdXBwc3Ryw7Ztc2dyZW5hciwgdsOkZ3JhciBzw6RuZGEuIgorCisjOiBidWlsdGluL3B1c2guYzoxMzkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgotIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKIG1zZ3N0ciAiIgotIkVuIGVsbGVyIGZsZXJhIGF2IHNhbW1hbnNsYWduaW5nc3Rlc3Rlcm5hIG1pc3NseWNrYWRlcyBlZnRlcnNvbSBkdSBpbnRlIGhhciAiCi0iaMOkbXRhdCBkZSBuw7ZkdsOkbmRpZ2EgaW5jaGVja25pbmdhcm5hLiBGw7Zyc8O2ayBow6RtdGEgZnLDpW4gJXMgZsO2cnN0LiIKKyJEdSBzw6RuZGVyIHRpbGwgZmrDpHJyZW4gXCIlc1wiLCBzb20gaW50ZSDDpHIgdXBwc3Ryw7ZtcyBmw7ZyIGRlblxuIgorImFrdHVlbGxhIGdyZW5lbiBcIiVzXCIsIHV0YW4gYXR0IHRhbGEgb20gZsO2ciBtaWcgdmFkIHNvbVxuIgorInNrYWxsIHPDpG5kYXMgZsO2ciBhdHQgdXBwZGF0ZXJhIGZqw6RycmdyZW5lbi4iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA4Ci1tc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgotbXNnc3RyICJWw6RsaiBlbiBlbGxlciBmbGVyYSBncmVuYXIgYXR0IHRhIGJvcnQuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCi1tc2dzdHIgIlRhciBib3J0IGdyZW5hciBmcsOlbiAlcyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTMKLW1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKLW1zZ3N0ciAiSW5nZXQgYXJraXYgbWFya2VyYXQuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNjYW5uaW5nICVzLi4uIgotbXNnc3RyICJTw7ZrZXIgJXMuLi4iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE2MwotbXNnaWQgIlJlbW92ZSBSZW1vdGUiCi1tc2dzdHIgIlRhIGJvcnQgZmrDpHJyYXJraXYiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE2OAotbXNnaWQgIlBydW5lIGZyb20iCi1tc2dzdHIgIlRhIGJvcnQgZnLDpW4iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE3MwotbXNnaWQgIkZldGNoIGZyb20iCi1tc2dzdHIgIkjDpG10YSBmcsOlbiIKLQotIzogbGliL3JlbW90ZS50Y2w6MjE1Ci1tc2dpZCAiUHVzaCB0byIKLW1zZ3N0ciAiU8OkbmQgdGlsbCIKLQotIzogbGliL3NlYXJjaC50Y2w6MjIKLW1zZ2lkICJGaW5kOiIKLW1zZ3N0ciAiU8O2azoiCi0KLSM6IGxpYi9zZWFyY2gudGNsOjI0Ci1tc2dpZCAiTmV4dCIKLW1zZ3N0ciAiTsOkc3RhIgotCi0jOiBsaWIvc2VhcmNoLnRjbDoyNQotbXNnaWQgIlByZXYiCi1tc2dzdHIgIkbDtnJlZyIKLQotIzogbGliL3NlYXJjaC50Y2w6MjYKLW1zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKLW1zZ3N0ciAiU2tpbGogcMOlIFZFUlNBTEVSL2dlbWVuZXIiCi0KLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgotbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCi1tc2dzdHIgIkthbiBpbnRlIHNrcml2YSBnZW52w6RnOiIKLQotIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCi1tc2dzdHIgIkthbiBpbnRlIHNrcml2YSBpa29uOiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiU3Rhdm5pbmdza29udHJvbGxwcm9ncmFtbWV0IHN0w7ZkcyBpbnRlIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKLW1zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKLW1zZ3N0ciAiU3Rhdm5pbmdza29udHJvbGwgw6RyIGVqIHRpbGxnw6RuZ2xpZyIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Ci1tc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgotbXNnc3RyICJPZ2lsdGlnIGluc3TDpGxsbmluZyBmw7ZyIHN0YXZuaW5nc2tvbnRyb2xsIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCi1tc2dzdHIgIsOFdGVyc3TDpGxsZXIgb3JkbGlzdGFuIHRpbGwgJXMuIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKLW1zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgotbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbCBtaXNzbHlja2FkZXMgdHlzdCB2aWQgc3RhcnQiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAotbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbHByb2dyYW1tZXQga8Okbm5zIGludGUgaWdlbiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgotbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgotbXNnc3RyICJJbmdhIGbDtnJzbGFnIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Ci1tc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJPdsOkbnRhdCBmaWxzbHV0IGZyw6VuIHN0YXZuaW5nc2tvbnRyb2xsIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCi1tc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCi1tc2dzdHIgIlN0YXZuaW5nc2tvbnRyb2xsIG1pc3NseWNrYWRlcyIKLQotIzogbGliL3NzaGtleS50Y2w6MzEKLW1zZ2lkICJObyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAiSW5nYSBueWNrbGFyIGhpdHRhZGVzLiIKLQotIzogbGliL3NzaGtleS50Y2w6MzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgotbXNnc3RyICJIaXR0YWRlIMO2cHBlbiBueWNrZWwgaTogJXMiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjQwCi1tc2dpZCAiR2VuZXJhdGUgS2V5IgotbXNnc3RyICJTa2FwYSBueWNrZWwiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjU4Ci1tc2dpZCAiQ29weSBUbyBDbGlwYm9hcmQiCi1tc2dzdHIgIktvcGllcmEgdGlsbCBVcmtsaXBwIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo3MgotbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgotbXNnc3RyICJEaW4gw7ZwcG5hIE9wZW5TU0gtbnlja2VsIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo4MAotbXNnaWQgIkdlbmVyYXRpbmcuLi4iCi1tc2dzdHIgIlNrYXBhci4uLiIKLQotIzogbGliL3NzaGtleS50Y2w6ODYKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcHVzaC5jOjE1MQogbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgc3NoLWtleWdlbjpcbiIKKyJwdXNoLmRlZmF1bHQgaXMgdW5zZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSBpcyBjaGFuZ2luZyBpblxuIgorIkdpdCAyLjAgZnJvbSAnbWF0Y2hpbmcnIHRvICdzaW1wbGUnLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZVxuIgorImFuZCBtYWludGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciBhZnRlciB0aGUgZGVmYXVsdCBjaGFuZ2VzLCB1c2U6XG4iCiAiXG4iCi0iJXMiCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBtYXRjaGluZ1xuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBhZG9wdCB0aGUgbmV3IGJlaGF2aW9yIG5vdywgdXNlOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisiU2VlICdnaXQgaGVscCBjb25maWcnIGFuZCBzZWFyY2ggZm9yICdwdXNoLmRlZmF1bHQnIGZvciBmdXJ0aGVyICIKKyJpbmZvcm1hdGlvbi5cbiIKKyIodGhlICdzaW1wbGUnIG1vZGUgd2FzIGludHJvZHVjZWQgaW4gR2l0IDEuNy4xMS4gVXNlIHRoZSBzaW1pbGFyIG1vZGVcbiIKKyInY3VycmVudCcgaW5zdGVhZCBvZiAnc2ltcGxlJyBpZiB5b3Ugc29tZXRpbWVzIHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQpIgogbXNnc3RyICIiCi0iS3VuZGUgaW50ZSBzdGFydGEgc3NoLWtleWdlbjpcbiIKKyJwdXNoLmRlZmF1bHQgaGFyIGludGUgc3TDpGxsdHMgaW47IGRlc3MgdW5kZXJmw7Zyc3TDpWRkYSB2w6RyZGVcbiIKKyLDpG5kcmFzIGkgR2l0IDIuMCBmcsOlbiBcIm1hdGNoaW5nXCIgdGlsbCBcInNpbXBsZVwiLiBGw7ZyIGF0dFxuIgorInVuZGVydHJ5Y2thIGRldCBow6RyIG1lZGRlbGFuZGV0IG9jaCBiZWjDpWxsYSBudXZhcmFuZGUgYmV0ZWVuZGVcbiIKKyJlZnRlciBhdHQgZsO2cnZhbGV0IMOkbmRyYXMsXG4iCisic2tyaXZlciBkdTpcbiIKICJcbiIKLSIlcyIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisiXG4iCisiRsO2ciBhdHQgdW5kZXJ0cnlja2EgbWVkZGVsYW5kZXQgb2NoIHbDpGxqYSBkZXQgbnlhIGJldGVlbmRldCBudSBza3JpdmVyIGR1OlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisiU2UgXCJnaXQgaGVscCBjb25maWdcIiBvY2ggc8O2ayBlZnRlciBcInB1c2guZGVmYXVsdFwiIGbDtnIgeXR0ZXJsaWdhcmUgXG4iCisiaW5mb3JtYXRpb24uIChMw6RnZXQgXCJzaW1wbGVcIiBpbnRyb2R1Y2VyYWRlcyBpIEdpdCAxLjcuMTEuIEFudsOkbmQgZGV0XG4iCisibGlrbmFuZGUgbMOkZ2V0IFwiY3VycmVudFwiIGlzdMOkbGxldCBmw7ZyIFwic2ltcGxlXCIgb20gZHUgaWJsYW5kIGFudsOkbmRlclxuIgorIsOkbGRyZSB2ZXJzaW9uZXIgYXYgR2l0LikiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjExMwotbXNnaWQgIkdlbmVyYXRpb24gZmFpbGVkLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgc2thcGEuIgotCi0jOiBsaWIvc3Noa2V5LnRjbDoxMjAKLW1zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgotbXNnc3RyICJMeWNrYWRlcyBza2FwYSBueWNrZWxuLCBtZW4gaGl0dGFyIGludGUgbsOlZ29uIG55Y2tlbC4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjEyMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKLW1zZ3N0ciAiRGluIG55Y2tlbCBmaW5ucyBpOiAlcyIKLQotIzogbGliL3N0YXR1c19iYXIudGNsOjg2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKLW1zZ3N0ciAiJXMuLi4gJSppIGF2ICUqaSAlcyAoJTNpJSUpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgotbXNnaWQgIkFkZCBUb29sIgotbXNnc3RyICJMw6RnZyB0aWxsIHZlcmt0eWciCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjI4Ci1tc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCi1tc2dzdHIgIkzDpGdnIHRpbGwgbnl0dCB2ZXJrdHlnc2tvbW1hbmRvIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozNAotbXNnaWQgIkFkZCBnbG9iYWxseSIKLW1zZ3N0ciAiTMOkZ2cgdGlsbCBnbG9iYWx0IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0NgotbXNnaWQgIlRvb2wgRGV0YWlscyIKLW1zZ3N0ciAiRGV0YWxqZXIgZsO2ciB2ZXJrdHlnIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0OQotbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgotbXNnc3RyICJBbnbDpG5kIFwiL1wiLWF2ZGVsYXJlIGbDtnIgYXR0IHNrYXBhIGV0dCB1bmRlcm1lbnl0csOkZDoiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjYwCi1tc2dpZCAiQ29tbWFuZDoiCi1tc2dzdHIgIktvbW1hbmRvOiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NzEKLW1zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgotbXNnc3RyICJWaXNhIGRpYWxvZyBpbm5hbiBwcm9ncmFtbWV0IHN0YXJ0YXMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjc3Ci1tc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCi1tc2dzdHIgIkJlIGFudsOkbmRhcmVuIHbDpGxqYSBlbiB2ZXJzaW9uIChzw6R0dGVyICRSRVZJU0lPTikiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjgyCi1tc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCi1tc2dzdHIgIkJlIGFudsOkbmRhcmVuIG9tIHl0dGVybGlnYXJlIHBhcmFtZXRyYXIgKHPDpHR0ZXIgJEFSR1MpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4OQotbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKLW1zZ3N0ciAiVmlzYSBpbnRlIGtvbW1hbmRvdHMgdXRkYXRhZsO2bnN0ZXIiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjk0Ci1tc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKLW1zZ3N0ciAiS8O2ciBlbmRhc3Qgb20gZW4gZGlmZiBoYXIgbWFya2VyYXRzICgkRklMRU5BTUUgw6RyIGludGUgdG9tdCkiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjExOAotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCi1tc2dzdHIgIkFuZ2UgZXR0IG5hbW4gZsO2ciB2ZXJrdHlnZXQuIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJWZXJrdHlnZXQgXCIlc1wiIGZpbm5zIHJlZGFuLiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTQ4Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3B1c2guYzoxOTkKIG1zZ2lkICIiCi0iQ291bGQgbm90IGFkZCB0b29sOlxuIgotIiVzIgorIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCiBtc2dzdHIgIiIKLSJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIHZlcmt0eWdldDpcbiIKLSIlcyIKKyJEdSBhbmdhdiBpbmdhIHJlZmVyZW5zc3BlY2lmaWthdGlvbmVyIGF0dCBzw6RuZGEsIG9jaCBwdXNoLmRlZmF1bHQgw6RyICIKKyJcIm5vdGhpbmdcIi4iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE4NwotbXNnaWQgIlJlbW92ZSBUb29sIgotbXNnc3RyICJUYSBib3J0IHZlcmt0eWciCisjOiBidWlsdGluL3B1c2guYzoyMDYKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIE1lcmdlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLiAnZ2l0IHB1bGwnKVxuIgorImJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiVXBwZGF0ZXJpbmdhciBhdnZpc2FkZXMgZMOlIMOkbmRlbiBww6UgZGluIGJlZmludGxpZ2EgZ3JlbiDDpHIgYmFrb21cbiIKKyJkZXNzIGZqw6Rycm1vdHN2YXJpZ2hldC4gU2zDpSBpaG9wIGZqw6RycsOkbmRyaW5nYXJuYSAodC5leC4gXCJnaXQgcHVsbFwiKVxuIgorImlubmFuIGR1IHPDpG5kZXIgaWdlbi5cbiIKKyJTZSBhdnNuaXR0ZXQgXCJOb3RlIGFib3V0IGZhc3QtZm9yd2FyZFwiIGkgXCJnaXQgcHVzaCAtLWhlbHBcIiBmw7ZyIGRldGFsamVyLiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTkzCi1tc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCi1tc2dzdHIgIlRhIGJvcnQgdmVya3R5Z3Nrb21tYW5kb24iCisjOiBidWlsdGluL3B1c2guYzoyMTIKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBJZiB5b3UgZGlkIG5vdCBpbnRlbmQgdG8gcHVzaCB0aGF0IGJyYW5jaCwgeW91IG1heSB3YW50IHRvXG4iCisic3BlY2lmeSBicmFuY2hlcyB0byBwdXNoIG9yIHNldCB0aGUgJ3B1c2guZGVmYXVsdCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdzaW1wbGUnLCAnY3VycmVudCcgb3IgJ3Vwc3RyZWFtJyB0byBwdXNoIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorIlVwcGRhdGVyaW5nYXIgYXZ2aXNhZGVzIGTDpSDDpG5kZW4gcMOlIGVuIGluc8OkbmQgZ3JlbiDDpHIgYmFrb20gZGVzc1xuIgorImZqw6Rycm1vdHN2YXJpZ2hldC4gT20gZGV0IGludGUgdmFyIG1lbmluZ2VuIGF0dCBzw6RuZGEgaW4gZ3JlbmVuLCBiw7ZyXG4iCisiZHUgc3BlY2lmaWNlcmEgZ3JlbmFyIGF0dCBzw6RuZGEsIGVsbGVyIMOkbmRyYSBpbnN0w6RsbG5pbmdzdmFyaWFiZWxuXG4iCisiXCJwdXNoLWRlZmF1bHRcIiB0aWxsIFwic2ltcGxlXCIsIFwiY3VycmVudFwiIGVsbGVyIFwidXBzdHJlYW1cIiBmw7ZyIGF0dCAiCisiZW5kYXN0XG4iCisic8OkbmRhIGFrdHVlbGwgZ3Jlbi4iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE5OAotbXNnaWQgIlJlbW92ZSIKLW1zZ3N0ciAiVGEgYm9ydCIKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxOAorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgbWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJVcHBkYXRlcmluZ2FyIGF2dmlzYWRlcyBkw6Ugw6RuZGVuIHDDpSBlbiBncmVuIHNvbSBzw6RuZHMgaW4gw6RyIGJha29tIGRlc3NcbiIKKyJmasOkcnJtb3RzdmFyaWdoZXQuIENoZWNrYSB1dCBncmVuZW4gb2NoIHNsw6UgaWhvcCBmasOkcnLDpG5kcmluZ2FybmEgKHQuZXguXG4iCisiXCJnaXQgcHVsbFwiKSBpbm5hbiBkdSBzw6RuZGVyIGlnZW4uXG4iCisiU2UgYXZzbml0dGV0IFwiTm90ZSBhYm91dCBmYXN0LWZvcndhcmRcIiBpIFwiZ2l0IHB1c2ggLS1oZWxwXCIgZsO2ciBkZXRhbGplci4iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjIzMQotbXNnaWQgIihCbHVlIGRlbm90ZXMgcmVwb3NpdG9yeS1sb2NhbCB0b29scykiCi1tc2dzdHIgIihCbMOldHQgYW5nZXIgdmVya3R5ZyBsb2thbGEgZsO2ciBhcmtpdmV0KSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIlPDpG5kZXIgdGlsbCAlc1xuIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW4gQ29tbWFuZDogJXMiCi1tc2dzdHIgIkvDtnIga29tbWFuZG90OiAlcyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHPDpG5kYSB2aXNzYSByZWZlcmVuc2VyIHRpbGwgXCIlc1wiIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozMDYKLW1zZ2lkICJBcmd1bWVudHMiCi1tc2dzdHIgIkFyZ3VtZW50IgorIzogYnVpbHRpbi9wdXNoLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgImZlbGFrdGlndCBhcmtpdiBcIiVzXCIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjM0MQotbXNnaWQgIk9LIgotbXNnc3RyICJPSyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NQorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiSW5nZW4gZGVzdGluYXRpb24gaGFyIGFuZ2l2aXRzLlxuIgorIkFuZ2UgYW50aW5nZW4gVVJMOmVuIHDDpSBrb21tYW5kb3JhZGVuIGVsbGVyIHN0w6RsbCBpbiBldHQgdXBwc3Ryw7Ztc2Fya2l2IG1lZFxuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtbj4gPHVybD5cbiIKKyJcbiIKKyJvY2ggc8OkbmQgc2VkYW4gbWVkIGhqw6RscCBhdiBmasOkcnJuYW1uZXRcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbW4+XG4iCiAKLSM6IGxpYi90b29scy50Y2w6NzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCi1tc2dzdHIgIkbDtnIgYXR0IHN0YXJ0YSAlcyBtw6VzdGUgZHUgdsOkbGphIGVuIGZpbC4iCisjOiBidWlsdGluL3B1c2guYzozMTAKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIG9jaCAtLXRhZ3Mgw6RyIGlua29tcGF0aWJsYSIKIAotIzogbGliL3Rvb2xzLnRjbDo5MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgotbXNnc3RyICLDhHIgZHUgc8Oka2VyIHDDpSBhdHQgZHUgdmlsbCBzdGFydGEgJXM/IgorIzogYnVpbHRpbi9wdXNoLmM6MzExCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwga2FuIGludGUga29tYmluZXJhcyBtZWQgcmVmZXJlbnNzcGVjaWZpa2F0aW9uZXIiCiAKLSM6IGxpYi90b29scy50Y2w6MTEwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbDogJXMiCi1tc2dzdHIgIlZlcmt0eWc6ICVzIgorIzogYnVpbHRpbi9wdXNoLmM6MzE2Cittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLW1pcnJvciBvY2ggLS10YWdzIMOkciBpbmtvbXBhdGlibGEiCiAKLSM6IGxpYi90b29scy50Y2w6MTExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVubmluZzogJXMiCi1tc2dzdHIgIkV4ZWt2ZXJhcjogJXMiCisjOiBidWlsdGluL3B1c2guYzozMTcKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLW1pcnJvciBrYW4gaW50ZSBrb21iaW5lcmFzIG1lZCByZWZlcmVuc3NwZWNpZmlrYXRpb25lciIKIAotIzogbGliL3Rvb2xzLnRjbDoxNDkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgotbXNnc3RyICJWZXJrdHlnZXQgYXZzbHV0YWRlcyBmcmFtZ8OlbmdzcmlrdDogJXMiCisjOiBidWlsdGluL3B1c2guYzozMjIKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgb2NoIC0tbWlycm9yIMOkciBpbmtvbXBhdGlibGEiCiAKLSM6IGxpYi90b29scy50Y2w6MTUxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBmYWlsZWQ6ICVzIgotbXNnc3RyICJWZXJrdHlnZXQgbWlzc2x5Y2thZGVzOiAlcyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4MgorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgImFya2l2IgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKLW1zZ3N0ciAiSMOkbXRhciBueWEgw6RuZHJpbmdhciBmcsOlbiAlcyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4MworbXNnaWQgInB1c2ggYWxsIHJlZnMiCittc2dzdHIgInPDpG5kIGFsbGEgcmVmZXJlbnNlciIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCi1tc2dzdHIgImZqw6RycmJvcnR0YWduaW5nICVzIgorIzogYnVpbHRpbi9wdXNoLmM6Mzg0Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICJzcGVnbGEgYWxsYSByZWZlcmVuc2VyIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgotbXNnc3RyICJUYXIgYm9ydCBzcMOlcmFuZGUgZ3JlbmFyIHNvbSB0YWdpdHMgYm9ydCBmcsOlbiAlcyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4NgorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICJ0YSBib3J0IHJlZmVyZW5zZXIiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgotbXNnc3RyICJTw6RuZGVyIMOkbmRyaW5nYXIgdGlsbCAlcyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4NworbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAic8OkbmQgdGFnZ2FyIChrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC0tYWxsIGVsbGVyIC0tbWlycm9yKSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCi1tc2dzdHIgIlNwZWdsYXIgdGlsbCAlcyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5MAorbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgInR2aW5nYSB1cHBkYXRlcmluZ2FyIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo4MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCi1tc2dzdHIgIlPDpG5kZXIgJXMgJXMgdGlsbCAlcyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5MQorbXNnaWQgImNoZWNrIgorbXNnc3RyICJrb250cm9sbGVyYSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTAyCi1tc2dpZCAiUHVzaCBCcmFuY2hlcyIKLW1zZ3N0ciAiU8OkbmQgZ3JlbmFyIgorIzogYnVpbHRpbi9wdXNoLmM6MzkyCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJzdHlyIHJla3Vyc2l2IGluc8OkbmRuaW5nIGF2IHVuZGVybW9kdWxlciIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTE3Ci1tc2dpZCAiU291cmNlIEJyYW5jaGVzIgotbXNnc3RyICJLw6RsbGdyZW5hciIKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NAorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgImFudsOkbmQgdHVubmEgcGFrZXQiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEzMQotbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkRlc3RpbmF0aW9uc2Fya2l2IgorIzogYnVpbHRpbi9wdXNoLmM6Mzk1IGJ1aWx0aW4vcHVzaC5jOjM5NgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICJwcm9ncmFtIGbDtnIgYXR0IHRhIGVtb3QgcGFrZXQiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3MgotbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCi1tc2dzdHIgIsOWdmVyZsO2cmluZ3NhbHRlcm5hdGl2IgorIzogYnVpbHRpbi9wdXNoLmM6Mzk3Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgInN0w6RsbCBpbiB1cHBzdHLDtm0gZsO2ciBnaXQgcHVsbC9zdGF0dXMiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3NAotbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgotbXNnc3RyICJUdmluZ2Egw7Z2ZXJza3Jpdm5pbmcgYXYgYmVmaW50bGlnIGdyZW4gKGthbiBrYXN0YSBib3J0IMOkbmRyaW5nYXIpIgorIzogYnVpbHRpbi9wdXNoLmM6NDAwCittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgInRhIGJvcnQgbG9rYWx0IGJvcnR0YWduYSByZWZlcmVuc2VyIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzgKLW1zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKLW1zZ3N0ciAiQW52w6RuZCB0dW50IHBha2V0IChmw7ZyIGzDpW5nc2FtbWEgbsOkdHZlcmtzYW5zbHV0bmluZ2FyKSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxMAorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSDDpHIgaW1rb21wYXRpYmVsIG1lZCAtLWFsbCwgLS1taXJyb3Igb2NoIC0tdGFncyIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTgyCi1tc2dpZCAiSW5jbHVkZSB0YWdzIgotbXNnc3RyICJUYSBtZWQgdGFnZ2FyIgorIzogYnVpbHRpbi9wdXNoLmM6NDEyCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIGthbiBpbnRlIGFudsOkbmRhcyB1dGFuIHJlZmVyZW5zZXIiCiAKLSN+IG1zZ2lkICJDYW5ub3QgdXNlIGZ1bm55IC5naXQgZGlyZWN0b3J5OiIKLSN+IG1zZ3N0ciAiS2FuIGludGUgYW52w6RuZGEgdW5kZXJsaWcgLmdpdC1rYXRhbG9nOiIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MzYKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbWy1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+XSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgW1stbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4Pl0gIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PGZpbD5dICgtLWVtcHR5IHwgPHRyw6RkLWlndDE+IFs8dHLDpGQtaWd0Mj4gWzx0csOkZC1pZ3QzPl1dKSIKIAotI34gbXNnaWQgIlByZWZlcmVuY2VzLi4uIgotI34gbXNnc3RyICJJbnN0w6RsbG5pbmdhci4uLiIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTA4Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAic2tyaXYgcmVzdWx0ZXJhbmRlIGluZGV4IHRpbGwgPGZpbD4iCiAKLSN+IG1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIHRlc3QuKSIKLSN+IG1zZ3N0ciAiQWxsdGlkICh1dGbDtnIgaW50ZSBzYW1tYW5zbGFnbmluZ3N0ZXN0KS4iCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExMQorbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICJ0w7ZtIGJhcmEgaW5kZXhldCIKIAotI34gbXNnaWQgIlVSTDoiCi0jfiBtc2dzdHIgIldlYmJhZHJlc3M6IgorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTMKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICJTYW1tYW5zbGFnbmluZyIKIAotI34gbXNnaWQgIkRlbGV0ZSBSZW1vdGUgQnJhbmNoIgotI34gbXNnc3RyICJUYSBib3J0IGZqw6RycmdyZW4iCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNQorbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgInV0ZsO2ciBlbiBzYW1tYW5zbGFnbmluZyBpIHRpbGzDpGdnIHRpbGwgZW4gbMOkc25pbmciCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE3Cittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICIzLXbDpGdzc2FtbWFuc2xhZ25pbmcgb20gc2FtbWFuc2xhZ25pbmcgcMOlIGZpbG5pdsOlIGVqIGtyw6R2cyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTkKK21zZ2lkICIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIgorbXNnc3RyICIzLXbDpGdzc2FtbWFuc2xhZ25pbmcgbsOkciBkZXQgZmlubnMgdGlsbMOkZ2cgb2NoIGJvcnR0YWduaW5nYXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIxCittc2dpZCAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAic29tIC1tLCBtZW4ga2FzdGEgYm9ydCBlaiBzYW1tYW5zbGFnbmEgcG9zdGVyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMgorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPHVuZGVya2F0YWxvZz4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICJsw6RzIGluIHRyw6RkZXQgaSBpbmRleGV0IHVuZGVyIDx1bmRlcmthdGFsb2c+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjYKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICJ1cHBkYXRlcmEgYXJiZXRza2F0YWxvZ2VuIG1lZCByZXN1bHRhdGV0IGZyw6VuIHNhbW1hbnNsYWduaW5nZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICJ0aWxsw6V0IGV4cGxpY2l0IGlnbm9yZXJhZGUgZmlsZXIgYXR0IHNrcml2YXMgw7Z2ZXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMyCittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICJrb250cm9sbGVyYSBpbnRlIGFyYmV0c2thdGFsb2dlbiBlZnRlciBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgInVwcGRhdGVyYSBpbnRlIGluZGV4ZXQgZWxsZXIgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiaG9wcGEgw7Z2ZXIgYXR0IGFwcGxpY2VyYSBmaWx0ZXIgZsO2ciBnbGVzIHV0Y2hlY2tuaW5nIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiZmVsc8O2ayB1bnBhY2stdHJlZXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMgorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzfC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8Z3Jlbj5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzfC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1uPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMyBidWlsdGluL3JlbW90ZS5jOjMyCittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDxnYW1tYWw+IDxueT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQgYnVpbHRpbi9yZW1vdGUuYzozNworbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbW4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLWQgfCA8YnJhbmNoPikiCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbW4+ICgtYSB8IC1kIHwgPGdyZW4+KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1uPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNworbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncnVwcD4gfCA8ZmrDpHJyPikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbW4+IDxncmVuPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMCBidWlsdGluL3JlbW90ZS5jOjY4Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbW4+IDxueXVybD4gWzxnYW1tYWx1cmw+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjY5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1uPiA8bnl1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyIGJ1aWx0aW4vcmVtb3RlLmM6NzAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbW4+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3Cittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbPGZsYWdnb3I+XSA8bmFtbj4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDIKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtZCB8IDxicmFuY2g+XSkiCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbW4+ICgtYSB8IC1kIHwgPGdyZW4+XSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDcKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1uPiA8Z3Jlbj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1uPiA8Z3Jlbj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTMKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzxmbGFnZ29yPl0gPG5hbW4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU4Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzxmbGFnZ29yPl0gPG5hbW4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYzCittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFs8ZmxhZ2dvcj5dIFs8Z3J1cHA+IHwgPGZqw6Rycj5dLi4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICJVcHBkYXRlcmFyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMAorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKyItLW1pcnJvciDDpHIgZmFybGlnIG9jaCBmw7Zyw6VsZHJhZDsgYW52w6RuZFxuIgorIlx0IC0tbWlycm9yPWZldGNoIGVsbGVyIC0tbWlycm9yPXB1c2ggaXN0w6RsbGV0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgIm9rw6RudCBhcmd1bWVudCB0aWxsIG1pcnJvcjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYzCittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAiaMOkbXRhIGZqw6RycmdyZW5hcm5hIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgImltcG9ydGVyYSBhbGxhIHRhZ2dhciBvY2ggYXNzb2NpZXJhZGUgb2JqZWt0IHZpZCBow6RtdG5pbmciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY4Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICJlbGxlciBow6RtdGEgaW50ZSBuw6VncmEgdGFnZ2FyIGFsbHMgKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcwCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAiZ3JlbihhcikgYXR0IHNww6VyYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICJodXZ1ZGdyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyCittc2dpZCAicHVzaHxmZXRjaCIKK21zZ3N0ciAicHVzaHxmZXRjaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzMKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAic3TDpGxsIGluIGFya2l2IHNvbSBzcGVnZWwgYXR0IHPDpG5kYSBlbGxlciB0YSBlbW90IGZyw6VuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NQorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgImF0dCBhbmdlIGVuIG1hc3Rlci1ncmVuIGdlciBpbmdlbiBtZW5pbmcgbWVkIC0tbWlycm9yIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NworbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgImF0dCBhbmdlIGdyZW5hciBhdHQgc3DDpXJhIGdlciBtZW5pbmcgYmFyYSBtZWQgaMOkbXRuaW5nc3NwZWdsYXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk1IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImZqw6RycmFya2l2ZXQgJXMgZmlubnMgcmVkYW4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5OSBidWlsdGluL3JlbW90ZS5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZXR0IGdpbHRpZ3QgbmFtbiBww6UgZmrDpHJyYXJraXYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza2FwYSBtYXN0ZXIgXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICJtZXIgw6RuIGVuICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgbWFwcG5pbmcgZsO2ciByZWZlcmVuc3NwZWNpZmlrYXRpb24gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDQwIGJ1aWx0aW4vcmVtb3RlLmM6NDQ4Cittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiKG1hdGNoYW5kZSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUyCittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIih0YSBib3J0KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OTUgYnVpbHRpbi9yZW1vdGUuYzo2MDEgYnVpbHRpbi9yZW1vdGUuYzo2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIHRvICclcyciCittc2dzdHIgIkt1bmRlIGludGUgdGlsbMOkbXBhIFwiJXNcIiBww6UgXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYzOSBidWlsdGluL3JlbW90ZS5jOjc5MiBidWlsdGluL3JlbW90ZS5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJXMiCittc2dzdHIgIkluZ2V0IHPDpWRhbnQgZmrDpHJyYXJraXY6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVuYW1lIGNvbmZpZyBzZWN0aW9uICclcycgdG8gJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBieXRhIG5hbW4gcMOlIGtvbmZpZ3VyYXRpb25zc2VrdGlvbmVuIFwiJXNcIiB0aWxsIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjIgYnVpbHRpbi9yZW1vdGUuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHRhIGJvcnQga29uZmlndXJhdGlvbnNzZWt0aW9uZW4gXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKyJVcHBkYXRlcmFyIGludGUgaWNrZS1zdGFuZGFyZCBow6RtdG5pbmdzcmVmZXJlbnNzcGVjaWZpa2F0aW9uXG4iCisiXHQlc1xuIgorIlx0VXBwZGF0ZXJhIGtvbmZpZ3VyYXRpb25lbiBtYW51ZWxsdCBvbSBuw7ZkdsOkbmRpZ3QuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcyciCittc2dzdHIgIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgcMOlIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHPDpHR0YSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGJyYW5jaCAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IGdyZW5lbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MzQKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIk9ic2VydmVyYTogRW4gZ3JlbiB1dGFuZsO2ciBoaWVyYXJraW4gcmVmcy9yZW1vdGVzLyB0b2dzIGludGUgYm9ydDtcbiIKKyJmw7ZyIGF0dCB0YSBib3J0IGRlbiwgYW52w6RuZDoiCittc2dzdHJbMV0gIiIKKyJPYnNlcnZlcmE6IE7DpWdyYSBncmVuYXIgdXRhbmbDtnIgaGllcmFya2luIHJlZnMvcmVtb3Rlcy8gdG9ncyBpbnRlIGJvcnQ7XG4iCisiZsO2ciBhdHQgdGEgYm9ydCBkZW0sIGFudsOkbmQ6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBueSAobsOkc3RhIGjDpG10bmluZyBzcGFyYXIgaSByZW1vdGVzLyVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NDYKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIHNww6VyYWQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ4Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiBmw7ZybGVnYWQgKGFudsOkbmQgXCJnaXQgcmVtb3RlIHBydW5lXCIgZsO2ciBhdHQgdGEgYm9ydCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTUwCittc2dpZCAiID8/PyIKK21zZ3N0ciAiID8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICJvZ2lsdGlnIGJyYW5jaC4lcy5tZXJnZTsga2FuIGludGUgb21iYXNlcmEgw7Z2ZXIgPiAxIGdyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgIm9tYmFzZXJhcyBww6UgZmrDpHJyZW4gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIgc2FtbWFuc2zDpXMgbWVkIGZqw6RycmVuICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDIKK21zZ2lkICIgICAgYW5kIHdpdGggcmVtb3RlIgorbXNnc3RyICIgICAgb2NoIG1lZCBmasOkcnJlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAic2FtbWFuc2zDpXMgbWVkIGZqw6RycmVuICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDUKK21zZ2lkICIgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiAgIG9jaCBtZWQgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MQorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAic2thcGEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NAorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAidGEgYm9ydCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU4Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAiw6Bqb3VyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJrYW4gc25hYmJzcG9sYXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2NAorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICJsb2thbCBmw7Zyw6VsZHJhZCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIHR2aW5nYXIgdGlsbCAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyBzw6RuZGVyIHRpbGwgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyB0dmluZ2FyIHRpbGwgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIHPDpG5kZXIgdGlsbCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDkxCittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgImZyw6VnYSBpbnRlIGZqw6RycmFyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiogZmrDpHJyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIEjDpG10LVVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyMCBidWlsdGluL3JlbW90ZS5jOjEyODUKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKGluZ2VuIFVSTCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOSBidWlsdGluL3JlbW90ZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgIFPDpG5kLVVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMyBidWlsdGluL3JlbW90ZS5jOjExMzUgYnVpbHRpbi9yZW1vdGUuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIEhFQUQtZ3JlbjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIgIEhFQUQtZ3JlbiAoSEVBRCBww6UgZmrDpHJyIMOkciB0dmV0eWRpZywga2FuIHZhcmEgZW4gYXYgZsO2bGphbmRlKTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgRmrDpHJyZ3JlbjolcyIKK21zZ3N0clsxXSAiICBGasOkcnJncmVuYXI6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NCBidWlsdGluL3JlbW90ZS5jOjExODEKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAoc3RhdHVzIGludGUgZsO2cmZyw6VnYWQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjMKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICBMb2thbCBncmVuIGtvbmZpZ3VyZXJhZCBmw7ZyIFwiZ2l0IHB1bGxcIjoiCittc2dzdHJbMV0gIiAgTG9rYWxhIGdyZW5hciBrb25maWd1cmVyYWRlIGbDtnIgXCJnaXQgcHVsbFwiOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcxCittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICBMb2thbGEgcmVmZXJlbnNlciBzcGVnbGFzIGF2IFwiZ2l0IHB1c2hcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIgIExva2FsIHJlZmVyZW5zIGtvbmZpZ3VyZXJhZCBmw7ZyIFwiZ2l0IHB1c2hcIiVzOiIKK21zZ3N0clsxXSAiICBMb2thbGEgcmVmZXJlbnNlciBrb25maWd1cmVyYWRlIGbDtnIgXCJnaXQgcHVzaFwiJXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTkKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgInPDpHR0IHJlZnMvcmVtb3Rlcy88bmFtbj4vSEVBRCBlbmxpZ3QgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwMQorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgInRhIGJvcnQgcmVmcy9yZW1vdGVzLzxuYW1uPi9IRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTYKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICJLYW4gaW50ZSBiZXN0w6RtbWEgSEVBRCBww6UgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxOAorbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICJGbGVyYSBIRUFELWdyZW5hciBww6UgZmrDpHJyZW4uIFbDpGxqIGVuIGV4cGxpY2l0IG1lZDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHRhIGJvcnQgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJJbnRlIGVuIGdpbHRpZyByZWZlcmVuczogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIkt1bmRlIGludGUgc3TDpGxsYSBpbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBrb21tZXIgYmxpIGRpbmdsYW5kZSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBoYXIgYmxpdml0IGRpbmdsYW5kZSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICJSZW5zYXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiICogW3NrdWxsZSByZW5zYV0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICogW3JlbnNhZF0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMQorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgInJlbnNhIGZqw6RycmFyIGVmdGVyIGjDpG10bmluZyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg3IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICJJbmdlbiBzw6VkYW4gZmrDpHJyIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDA3Cittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBncmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MTQKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICJpbmdlbiBmasOkcnIgYW5nYXZzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MzYKK21zZ2lkICJtYW5pcHVsYXRlIHB1c2ggVVJMcyIKK21zZ3N0ciAibWFuaXB1bGVyYSBVUkw6YXIgZsO2ciBzw6RuZG5pbmciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzOAorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgImzDpGdnIHRpbGwgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NDAKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAidGEgYm9ydCBVUkw6YXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ0NworbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUgZ2VyIGluZ2VuIG1lbmluZyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiRmVsYWt0aWcgZ2FtbWFsdCBVUkwtbcO2bnN0ZXI6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICJJbmdlbiBzw6VkYW4gVVJMIGhpdHRhZGVzOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDk3Cittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICJLb21tZXIgaW50ZSB0YSBib3J0IGFsbGEgaWNrZS1zw6RuZC1VUkw6ZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU2OQorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgInZhciBwcmF0c2FtOyBtw6VzdGUgc2tyaXZhcyBmw7ZyZSBldHQgdW5kZXJrb21tYW5kbyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPG9iamVrdD4gPGVyc8OkdHRuaW5nPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTgKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPG9iamVrdD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE5Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWwgWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCByZXBsYWNlIC1sIFs8bcO2bnN0ZXI+XSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTE4Cittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgInZpc2EgZXJzw6R0dG5pbmdzcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTE5Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAidGEgYm9ydCBlcnPDpHR0bmluZ3NyZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMjAKK21zZ2lkICJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIgorbXNnc3RyICJlcnPDpHR0IHJlZmVyZW5zZW4gb20gZGVuIGZpbm5zIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjExCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgcGF0aC4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IHBhdGguLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjU2Cittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgInJlZ2lzdHJlcmEgcmVuYSBsw7ZzbmluZ2FyIGkgaW5kZXhldCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI1Cittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxpbmNoZWNrbmluZz5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjYKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSA8Y29tbWl0PiBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgImdpdCByZXNldCBbLXFdIDxpbmNoZWNrbmluZz4gWy0tXSA8c8O2a3bDpGdhcj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNworbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs8aW5jaGVja25pbmc+XSBbLS1dIFs8c8O2a3bDpGdhcj4uLi5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAiYmxhbmRhZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAic29mdCIKK21zZ3N0ciAibWp1ayIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiaGFyZCIKK21zZ3N0ciAiaMOlcmQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgIm1lcmdlIgorbXNnc3RyICJzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAia2VlcCIKK21zZ3N0ciAiYmVow6VsbCIKKworIzogYnVpbHRpbi9yZXNldC5jOjc3Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIkR1IGhhciBpbnRlIGVuIGdpbHRpZyBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc5Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSB0csOkZGVyIGbDtnIgSEVBRC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSB0csOkZGVyIGbDtnIgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTYKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrcml2YSBueSBpbmRleGZpbC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIkhFQUQgw6RyIG51IHDDpSAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjEzMAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMzMKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiT2vDtmFkZSDDpG5kcmluZ2FyIGVmdGVyIMOldGVyc3TDpGxsbmluZzoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiS2FuIGludGUgdXRmw7ZyYSBlbiAlcyDDpXRlcnN0w6RsbG5pbmcgbWl0dCBpIGVuIHNhbW1hbnNsYWduaW5nLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjIzOAorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgInZhciB0eXN0LCByYXBwb3J0ZXJhIGVuZGFzdCBmZWwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDAKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAiw6V0ZXJzdMOkbGwgSEVBRCBvY2ggaW5kZXgiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDEKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgIsOldGVyc3TDpGxsIGVuZGFzdCBIRUFEIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjQzIGJ1aWx0aW4vcmVzZXQuYzoyNDUKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICLDpXRlcnN0w6RsbCBIRUFELCBpbmRleCBvY2ggYXJiZXRza2F0YWxvZyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI0NworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiw6V0ZXJzdMOkbGwgSEVBRCBtZW4gYmVow6VsbCBsb2thbGEgw6RuZHJpbmdhciIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJLYW4gaW50ZSB0b2xrYSBvYmpla3RldCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDgKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggw6RyIGlua29tcGF0aWJlbCBtZWQgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxNworbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgcmVrb21tZW5kZXJhcyBpbnRlIG1lZCBzw7ZrdsOkZ2FyOyBhbnbDpG5kIFwiZ2l0IHJlc2V0IC0tIDxzw7ZrdsOkZ2FyPlwiLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIkthbiBpbnRlIGfDtnJhICVzIMOldGVyc3TDpGxsbmluZyBtZWQgc8O2a3bDpGdhci4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzIMOldGVyc3TDpGxsbmluZyB0aWxsw6V0cyBpbnRlIGkgZXR0IG5ha2V0IGFya2l2IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICJLdW5kZSBpbnRlIMOldGVyc3TDpGxsYSBpbmRleGZpbGVuIHRpbGwgdmVyc2lvbmVuIFwiJXNcIi4iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzM5Cittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFtvcHRpb25zXSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFtvcHRpb25zXSAtLSBbPGFyZ3VtZW50Pi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzQ0Cittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICJiZWjDpWxsIFwiLS1cIiBzw6RudCBzb20gYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzQ2Cittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICJzbHV0YSB0b2xrYSBlZnRlciBmw7Zyc3RhIGFyZ3VtZW50IHNvbSBpbnRlIMOkciBmbGFnZ2EiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDY0Cittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbb3B0aW9uc10gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbb3B0aW9uc10gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgW2ZsYWdnb3JdIC0tIFs8YXJndW1lbnQ+Li4uXVxuIgorIiAgICAgZWxsZXI6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZ3VtZW50Pi4uLl1cbiIKKyIgICAgIGVsbGVyOiBnaXQgcmV2LXBhcnNlIFtmbGFnZ29yXSBbPGFyZ3VtZW50Pi4uLl1cbiIKKyJcbiIKKyJLw7ZyIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZsO2ciBtZXIgaW5mb3JtYXRpb24gb20gZGVuIGbDtnJzdGEgIgorInZhcmlhbnRlbi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjIKK21zZ2lkICJnaXQgcmV2ZXJ0IFtvcHRpb25zXSA8Y29tbWl0LWlzaD4iCittc2dzdHIgImdpdCByZXZlcnQgW2ZsYWdnb3JdIDxpbmNoZWNrbmluZy1pZ3Q+IgorCisjOiBidWlsdGluL3JldmVydC5jOjIzCittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPHVuZGVya29tbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjI4Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFtvcHRpb25zXSA8Y29tbWl0LWlzaD4iCittc2dzdHIgImdpdCBjaGVycnktcGljayBbZmxhZ2dvcl0gPGluY2hlY2tuaW5nLWlndD4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjkKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPHVuZGVya29tbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcwIGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcyBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkICVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMworbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImF2c2x1dGEgcmV2ZXJ0LSBlbGxlciBjaGVycnktcGljay1zZWt2ZW5zIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgInJlc3VtZSByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIsOldGVydXBwdGEgcmV2ZXJ0LSBlbGxlciBjaGVycnktcGljay1zZWt2ZW5zIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNQorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImF2YnJ5dCByZXZlcnQtIGVsbGVyIGNoZXJyeS1waWNrLXNla3ZlbnMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA2Cittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgImNoZWNrYSBpbnRlIGluIGF1dG9tYXRpc2t0IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJyZWRpZ2VyYSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJwYXJlbnQgbnVtYmVyIgorbXNnc3RyICJudW1tZXIgcMOlIGbDtnLDpGxkZXIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInNhbW1hbnNsYWduaW5zc3RyYXRlZ2kiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEzCittc2dpZCAib3B0aW9uIgorbXNnc3RyICJhbHRlcm5hdGl2IgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgImFsdGVybmF0aXYgZm/MiHIgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJsw6RnZyB0aWxsIGluY2hlY2tuaW5nc25hbW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI2Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIgorbXNnc3RyICJ0aWxsw6V0IHNuYWJic3BvbG5pbmciCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI3Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgImJlaMOlbGwgaW5jaGVja25pbmdhciBzb20gYsO2cmphciBzb20gdG9tbWEiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJ0aWxsw6V0IGluY2hlY2tuaW5nYXIgbWVkIHRvbXQgbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjkKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiYmVow6VsbCByZWR1bmRhbnRhLCB0b21tYSBpbmNoZWNrbmluZ2FyIgorCisjOiBidWlsdGluL3JldmVydC5jOjEzMworbXNnaWQgInByb2dyYW0gZXJyb3IiCittc2dzdHIgInByb2dyYW1mZWwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjIzCittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAiXCJyZXZlcnRcIiBtaXNzbHlja2FkZXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjM4Cittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICJcImNoZXJyeS1waWNrXCIgbWlzc2x5Y2thZGVzIgorCisjOiBidWlsdGluL3JtLmM6MTQKK21zZ2lkICJnaXQgcm0gW29wdGlvbnNdIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gW2ZsYWdnb3JdIFstLV0gPGZpbD4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlIGZpbGUgYW5kIHRoZSBIRUFEXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlwiJXNcIiBoYXIga8O2YXQgw6RuZHJpbmdhciBzb20gc2tpbGplciBzaWcgYsOlZGUgZnLDpW4gZmlsZW4gb2NoIEhFQURcbiIKKyIoYW52w6RuZCAtZiBmw7ZyIGF0dCB0dmluZ2EgYm9ydHRhZ25pbmcpIgorCisjOiBidWlsdGluL3JtLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXhcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXCIlc1wiIGhhciBrw7ZhZGUgw6RuZHJpbmdhciBpIGluZGV4ZXRcbiIKKyIoYW52w6RuZCAtLWNhY2hlZCBmw7ZyIGF0dCBiZWjDpWxsYSBmaWxlbiBlbGxlciAtZiBmw7ZyIGF0dCB0dmluZ2EgYm9ydHRhZ25pbmcpIgorCisjOiBidWlsdGluL3JtLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlwiJXNcIiBoYXIgbG9rYWxhIMOkbmRyaW5nYXJcbiIKKyIoYW52w6RuZCAtLWNhY2hlZCBmw7ZyIGF0dCBiZWjDpWxsYSBmaWxlbiBlbGxlciAtZiBmw7ZyIGF0dCB0dmluZ2EgYm9ydHRhZ25pbmcpIgorCisjOiBidWlsdGluL3JtLmM6MTM0Cittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAibGlzdGEgaW50ZSBib3J0dGFnbmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAidGEgYmFyYSBib3J0IGZyw6VuIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMzYKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiw7Z2ZXJzdHlyIMOgam91ci10ZXN0ZXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMzcKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAidGlsbMOldCByZWt1cnNpdiBib3J0dGFnbmluZyIKKworIzogYnVpbHRpbi9ybS5jOjEzOQorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICJhdnNsdXRhIG1lZCBub2xsc3RhdHVzIMOkdmVuIG9tIGluZ2V0IHRyw6RmZmFkZXMiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAidGFyIGludGUgYm9ydCBcIiVzXCIgcmVrdXJzaXZ0IHV0YW4gLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06IGthbiBpbnRlIHRhIGJvcnQgJXMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxMworbXNnaWQgImdpdCBzaG9ydGxvZyBbLW5dIFstc10gWy1lXSBbLXddIFtyZXYtb3B0c10gWy0tXSBbPGNvbW1pdC1pZD4uLi4gXSIKK21zZ3N0ciAiIgorImdpdCBzaG9ydGxvZyBbLW5dIFstc10gWy1lXSBbLXddIFtyZXYtZmxhZ2dvcl0gWy0tXSBbPGluY2hlY2tuaW5nLWlkPi4uLiBdIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKK21zZ3N0ciAiRsO2cmZhdHRhcmUgc2FrbmFzOiAlcyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI1MworbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAic29ydGVyYSB1dGRhdGEgZW5saWd0IGFudGFsIGluY2hlY2tuaW5nYXIgcGVyIGbDtnJmYXR0YXJlIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjU1Cittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIlVuZGVydHJ5Y2sgYmVza3Jpdm5pbmdhciwgdmlzYSBiYXJhIGFudGFsIGluY2hlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNTcKK21zZ2lkICJTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yIgorbXNnc3RyICJWaXNhIGUtcG9zdGFkcmVzcyBmw7ZyIHZhcmplIGbDtnJmYXR0YXJlIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjU4Cittc2dpZCAid1ssaTFbLGkyXV0iCittc2dzdHIgIndbLGkxWyxpMl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjU5Cittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICJSYWRicnl0IHV0ZGF0YSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjkKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYXwtLWFsbF0gWy1yfC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl0gWy0tIgorImN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXSBbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0tIgorImluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXSBbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8ICIKKyI8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LWJyYW5jaCBbLWF8LS1hbGxdIFstcnwtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdIFstLSIKKyJjdXJyZW50XSBbLS1jb2xvcls9PG7DpHI+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV0gWy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLSIKKyJpbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV0gWy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCAiCisiPG3Dtm5zdGVyPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTAKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nfC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nfC0tcmVmbG9nKVs9PG4+Wyw8YmFzPl1dIFstLWxpc3RdIFs8cmVmPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgInZpc2EgZmrDpHJyc3DDpXJhbmRlIG9jaCBsb2thbGEgZ3JlbmFyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUzCittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgInZpc2EgZmrDpHJyc3DDpXJhbmRlIGdyZW5hciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NQorbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgImbDpHJnYSBcIiohKy1cIiBlbmxpZ3QgZ3JlbmVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU3Cittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgInZpc2EgPG4+IHl0dGVybGlnYXJlIGluY2hlY2tuaW5nYXIgZWZ0ZXIgZ2VtZW5zYW0gYW5mYWRlciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OQorbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAic3lub255bSB0aWxsIG1vcmU9LTEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjAKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAidW5kZXJ0eWNrIG5hbW5zdHLDpG5nYXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiaW5rbHVkZXJhIGFrdHVlbGwgZ3JlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAibmFtbmdlIGluY2hlY2tuaW5nYXIgbWVkIGRlcmFzIG9iamVrdG5hbW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjYKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICJ2aXNhIG3DtmpsaWdhIHNhbW1hbnNsYW5pbmdzYmFzZXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICJ2aXNhIHJlZmVyZW5zZXIgc29tIGludGUga2FuIG7DpXMgZnLDpW4gbsOlZ29uIGFubmFuIHJlZmVyZW5zIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcwCittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICJ2aXNhIGluY2hlY2tuaW5nYXIgaSB0b3BvbG9naXNrIG9yZG5pbmciCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzIKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgaW5jaGVja25pbmdhciBpbnRlIHDDpSBkZW4gZsO2cnN0YSBncmVuZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzQKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgInZpc2Egc2FtbWFuc2xhZ25pbmdhciBzb20gZW5kYXN0IGthbiBuw6VzIGZyw6VuIGVuIHNwZXRzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc2Cittc2dpZCAic2hvdyBjb21taXRzIHdoZXJlIG5vIHBhcmVudCBjb21lcyBiZWZvcmUgaXRzIGNoaWxkcmVuIgorbXNnc3RyICJ2aXNhIGluY2hlY2tuaW5nYXIgZMOkciBpbmdlbiBmw7Zyw6RsZGVyIGtvbW1lciBmw7ZyZSBkZXNzIGJhcm4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzgKK21zZ2lkICI8bj5bLDxiYXNlPl0iCittc2dzdHIgIjxuPlssPGJhcz5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc5Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgInZpc2EgPG4+IG55YXN0ZSByZWZsb2dncG9zdGVyIG1lZCBiw7ZyamFuIHDDpSBiYXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMAorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xfC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kfC0tZGVyZWZlcmVuY2VdIFstc3wtLWhhc2giCisiWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFtwYXR0ZXJuKl0gIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcXwtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZHwtLWRlcmVmZXJlbmNlXSBbLXN8LS1oYXNoIgorIls9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbbcO2bnN0ZXIqXSAiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMQorbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPXBhdHRlcm5dIDwgcmVmLWxpc3QiCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPW3Dtm5zdGVyXSA8IHJlZmxpc3RhIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTgyCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdGFnZ2FyIChrYW4ga29tYmluZXJhcyBtZWQgaHV2dWRlbikiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODMKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBodXZ1ZGVuIChrYW4ga29tYmluZXJhcyBtZWQgdGFnZ2FyKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgInN0cmlrdGFyZSByZWZlcmVuc2tvbnRyb2xsLCBrcsOkdmVyIGV4YWt0IHJlZmVyZW5zc8O2a3bDpGciCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcgYnVpbHRpbi9zaG93LXJlZi5jOjE4OQorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlIgorbXNnc3RyICJ2aXNhIEhFQUQtcmVmZXJlbnNlbiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE5MQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICJhdnJlZmVyZXJhIHRhZ2dhciB0aWxsIG9iamVrdC1pZCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE5MworbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAidmlzYSBTSEExLWhhc2ggZW5kYXN0IG1lZCA8bj4gc2lmZnJvciIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE5NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICJ2aXNhIGludGUgcmVzdWx0YXQgcMOlIHN0YW5kYXJkIHV0IChhbnbDpG5kYmFydCBtZWQgLS12ZXJpZnkpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTk5Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAidmlzYSByZWZlcmVuc2VyIGZyw6VuIHN0YW5kYXJkIGluIHNvbSBpbnRlIGZpbm5zIGkgbG9rYWx0IGFya2l2IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjcKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFtvcHRpb25zXSBuYW1lIFtyZWZdIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFtmbGFnZ29yXSBuYW1uIFtyZWZdIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjM4Cittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAiIgorInVuZGVydHJ5Y2sgZmVsbWVkZGVsYW5kZW4gZsO2ciBpY2tlLXN5bWJvbGlza2EgKGZyw6Vua29wcGxhZGUpIHJlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6MzkKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgImbDtnJrb3J0YSByZWYtdXRkYXRhIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjE4Cittc2dpZCAicmVhc29uIgorbXNnc3RyICJza8OkbCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MCBidWlsdGluL3VwZGF0ZS1yZWYuYzoxOAorbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJza8OkbCB0aWxsIHVwcGRhdGVyaW5nZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjIKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWF8LXN8LXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+fC1GIDxmaWxlPl0gPHRhZ25hbWU+IFs8aGVhZD5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyBbLWF8LXN8LXUgPG55Y2tlbC1pZD5dIFstZl0gWy1tIDxtZWRkPnwtRiA8ZmlsPl0gPHRhZ2duYW1uPiBbPGh1dnVkPl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA8dGFnZ25hbW4+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjI0Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0gXG4iCisiXHRcdFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW5bPGFudGFsPl1dIFstLWNvbnRhaW5zIDxpbmNoZWNrbmluZz5dIFstLXBvaW50cy1hdCA8b2JqZWt0Pl0gXG4iCisiXHRcdFs8bcO2bnN0ZXI+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzoyNgorbXNnaWQgImdpdCB0YWcgLXYgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC12IDx0YWdnbmFtbj4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICJmZWxmb3JtYXQgb2JqZWt0IHZpZCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICJ0YWdnbmFtbmV0IGbDtnIgbMOlbmd0OiAlLipzLi4uIgorCisjOiBidWlsdGluL3RhZy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJ0YWdnZW4gXCIlc1wiIGhpdHRhZGVzIGludGUuIgorCisjOiBidWlsdGluL3RhZy5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRvZyBib3J0IHRhZ2cgXCIlc1wiICh2YXIgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB2ZXJpZnkgdGhlIHRhZyAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGJla3LDpGZ0YSB0YWdnZW4gXCIlc1wiIgorCisjOiBidWlsdGluL3RhZy5jOjI0OQorbXNnaWQgIiIKKyJcbiIKKyIjXG4iCisiIyBXcml0ZSBhIHRhZyBtZXNzYWdlXG4iCisiIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCisiI1xuIgorbXNnc3RyICIiCisiXG4iCisiI1xuIgorIiMgU2tyaXYgZXR0IHRhZ2dtZWRkZWxhbmRlXG4iCisiIyBSYWRlciBzb20gaW5sZWRzIG1lZCBcIiNcIiBpZ25vcmVyYXMuXG4iCisiI1xuIgorCisjOiBidWlsdGluL3RhZy5jOjI1NgorbXNnaWQgIiIKKyJcbiIKKyIjXG4iCisiIyBXcml0ZSBhIHRhZyBtZXNzYWdlXG4iCisiIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorIiNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiNcbiIKKyIjIFNrcml2IGV0dCB0YWdnbWVkZGVsYW5kZVxuIgorIiMgUmFkZXIgc29tIGlubGVkcyBtZWQgXCIjXCIga29tbWVyIGJlaMOlbGxhczsgZHUga2FuIHNqw6RsdiB0YSBib3J0IGRlbSBvbVxuIgorIiMgZHUgdmlsbC5cbiIKKyIjXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzaWduZXJhIHRhZ2dlbiIKKworIzogYnVpbHRpbi90YWcuYzozMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIHRhZ2ctZmlsZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzI1Cittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAiZmVsYWt0aWcgb2JqZWt0dHlwIgorCisjOiBidWlsdGluL3RhZy5jOjMzOAorbXNnaWQgInRhZyBoZWFkZXIgdG9vIGJpZy4iCittc2dzdHIgInRhZ2dodXZ1ZCBmw7ZyIHN0b3J0LiIKKworIzogYnVpbHRpbi90YWcuYzozNzAKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgImluZ2V0IHRhZ2dtZWRkZWxhbmRlPyIKKworIzogYnVpbHRpbi90YWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiVGFnZ21lZGRlbGFuZGV0IGhhciBsw6RtbmF0cyBpICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1Cittc2dpZCAic3dpdGNoICdwb2ludHMtYXQnIHJlcXVpcmVzIGFuIG9iamVjdCIKK21zZ3N0ciAiZmxhZ2dhbiBcInBvaW50cy1hdFwiIGJlaMO2dmVyIGV0dCBvYmplY3QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJmZWxmb3JtYXQgb2JqZWt0bmFtbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDQ3Cittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgImxpc3RhIHRhZ2duYW1uIgorCisjOiBidWlsdGluL3RhZy5jOjQ0OQorbXNnaWQgInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIgorbXNnc3RyICJ2aXNhIDxuPiByYWRlciBmcsOlbiB2YXJqZSB0YWdnbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi90YWcuYzo0NTEKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAidGEgYm9ydCB0YWdnYXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDUyCittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgInZlcmlmaWVyYSB0YWdnYXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDU0Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBhdHQgc2thcGEgdGFnZ2FyIgorCisjOiBidWlsdGluL3RhZy5jOjQ1NgorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAiYW5ub3RlcmFkIHRhZ2csIGJlaMO2dmVyIG1lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDU4Cittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgInRhZ2dtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL3RhZy5jOjQ2MAorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgImFubm90ZXJhZCBvY2ggR1BHLXNpZ25lcmFkIHRhZ2ciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDY0Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiYW52w6RuZCBhbm5hbiBueWNrZWwgZsO2ciBhdHQgc2lnbmVyYSB0YWdnZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDY1Cittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAiZXJzw6R0dCB0YWdnZW4gb20gZGVuIGZpbm5zIgorCisjOiBidWlsdGluL3RhZy5jOjQ2NgorbXNnaWQgInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIKK21zZ3N0ciAibGlzdGEgdGFnZ2FyIGkgc3BhbHRlciIKKworIzogYnVpbHRpbi90YWcuYzo0NjgKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICJBbHRlcm5hdGl2IGbDtnIgbGlzdG5pbmcgYXYgdGFnZ2FyIgorCisjOiBidWlsdGluL3RhZy5jOjQ3MQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdGFnZ2FyIHNvbSBpbm5laMOlbGxlciBpbmNoZWNrbmluZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjQ3NworbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJ2aXNhIGVuZGFzdCB0YWdnYXIgZsO2ciBvYmpla3RldCIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gb2NoIC1uIMOkciBpbmtvbXBhdGlibGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiRmxhZ2dhbiAtbiDDpHIgZW5kYXN0IHRpbGzDpXRlbiB0aWxsc2FtbWFucyBtZWQgLWwuIgorCisjOiBidWlsdGluL3RhZy5jOjUyNQorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiRmxhZ2dhbiAtLWNvbnRhaW5zIMOkciBlbmRhc3QgdGlsbMOldGVuIHRpbGxzYW1tYW5zIG1lZCAtbCIKKworIzogYnVpbHRpbi90YWcuYzo1MjcKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJGbGFnZ2FuIC0tcG9pbnRzLWF0IMOkciBlbmRhc3QgdGlsbMOldGVuIHRpbGxzYW1tYW5zIG1lZCAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTM1Cittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJlbmRhc3QgZW4gYXYgZmxhZ2dvcm5hIC1GIGVsbGVyIC1tIHRpbGzDpXRzLiIKKworIzogYnVpbHRpbi90YWcuYzo1NTUKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgImbDtnIgbcOlbmdhIHBhcmFtZXRyYXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZXR0IGdpbHRpZ3QgdGFnZ25hbW4uIgorCisjOiBidWlsdGluL3RhZy5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAidGFnZ2VuIFwiJXNcIiBmaW5ucyByZWRhbiIKKworIzogYnVpbHRpbi90YWcuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBsb2NrIHRoZSByZWYiCittc2dzdHIgIiVzOiBrYW4gaW50ZSBsw6VzYSByZWZlcmVuc2VuIgorCisjOiBidWlsdGluL3RhZy5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHVwZGF0ZSB0aGUgcmVmIgorbXNnc3RyICIlczoga2FuIGludGUgdXBwZGF0ZXJhIHJlZmVyZW5zZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiVXBwZGF0ZXJhZCB0YWdnIFwiJXNcIiAodmFyICVzKVxuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjQwMQorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggW29wdGlvbnNdIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggW2ZsYWdnb3JdIFstLV0gWzxmaWw+Li4uXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3MTcKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgImZvcnRzw6R0dCB1cHBkYXRlcmEgw6R2ZW4gbsOkciBpbmRleCBpbnRlIMOkciDDoGpvdXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzIwCittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlZnJlc2g6IGlnbm9yZXJhIHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3MjMKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAiaWdub3JlcmEgaW50ZSBueWEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzI1Cittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgImzDpXQgZmlsZXIgZXJzw6R0dGEga2F0YWxvZ2VyIG9jaCBvbXbDpG50IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcyNworbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImzDpGdnIG3DpHJrZSB0aWxsIGZpbGVyIHNvbSBzYWtuYXMgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzI5Cittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgInVwcGRhdGVyYSDDpHZlbiBvbSBpbmRleGV0IGlubmVow6VsbGVyIGVqIHNhbW1hbnNsYWduYSBwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzMyCittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJ1cHBkYXRlcmEgc3RhdHVzaW5mb3JtYXRpb24iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzM2Cittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICJzb20gLS1yZWZyZXNoLCBtZW4gaWdub3JlcmEgYXNzdW1lLXVuY2hhbmdlZC1pbnN0w6RsbG5pbmciCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzQwCittc2dpZCAiPG1vZGU+IDxvYmplY3Q+IDxwYXRoPiIKK21zZ3N0ciAiPGzDpGdlPiA8b2JqZWt0PiA8c8O2a3bDpGc+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc0MQorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBhbmdpdmVuIHBvc3QgaSBpbmRleGV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc0NQorbXNnaWQgIigrLy0peCIKK21zZ3N0ciAiKCsvLSl4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc0NgorbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICLDtnZlcnN0eXIgZXhla3ZlcmluZ3NiaXRlbiBmw7ZyIGFuZ2l2bmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzUwCittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICJtYXJrZXJhIGZpbGVyIHNvbSBcIsOkbmRyYXMgaW50ZVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc1MworbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAicmVuc2EgXCJhc3N1bWUtdW5jaGFuZ2VkXCItYml0ZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzU2Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAibWFya2VyYSBmaWxlciBzb20gXCJlbmRhc3QgaW5kZXhcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NTkKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAidMO2bSBcInNraXAtd29ya3RyZWVcIi1iaXRlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NjIKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAibMOkZ2cgZW5kYXN0IHRpbGwgaW5kZXhldDsgbMOkZ2cgaW50ZSB0aWxsIGlubmVow6VsbGV0IGkgb2JqZWt0ZGF0YWJhc2VuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2NAorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgInRhIGJvcnQgbmFtbmdpdm5hIHPDtmt2w6RnYXIgw6R2ZW4gb20gZGUgZmlubnMgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzY2Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICJtZWQgLS1zdGRpbjogaW5kYXRhcmFkZXIgdGVybWluZXJhcyBtZWQgbnVsbC1ieXRlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2OAorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImzDpHMgbGlzdGEgw7Z2ZXIgc8O2a3bDpGdhciBhdHQgdXBwZGF0ZXJhIGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc3MgorbXNnaWQgImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IgorbXNnc3RyICJsw6RnZyBwb3N0ZXIgZnLDpW4gZnLDpW4gc3RhbmRhcmQgaW4gdGlsbCBpbmRleGV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc3NgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiw6V0ZXJmeWxsIGV0YXBwIDIgb2NoIDMgZnLDpW4gYW5naXZuYSBzw7ZrdsOkZ2FyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc4MAorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICJ1cHBkYXRlcmEgZW5kYXN0IHBvc3RlciBzb20gc2tpbGplciBzaWcgZnLDpW4gSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3ODQKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJpZ25vcmVyYSBmaWxlciBzb20gc2FrbmFzIGkgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc4NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAicmFwb3J0ZXJhIMOldGfDpHJkZXIgcMOlIHN0YW5kYXJkIHV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc4OQorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIoZsO2ciBwb3JzbGluKSBnbMO2bSBzcGFyYWRlIG9sw7ZzdGEga29uZmxpa3RlciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3OTMKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAic2tyaXYgaW5kZXggaSBkZXR0YSBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjcKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbb3B0aW9uc10gLWQgPHJlZm5hbWU+IFs8b2xkdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFtmbGFnZ29yXSAtZCA8cmVmbmFtbj4gWzxnYW1tYWx0dsOkcmRlPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjgKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbb3B0aW9uc10gICAgPHJlZm5hbWU+IDxuZXd2YWw+IFs8b2xkdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFtmbGFnZ29yXSAgICA8cmVmbmFtbj4gPGdhbW1hbHR2w6RyZGU+IFs8bnl0dHbDpHJkZT5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxOQorbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICJ0YSBib3J0IHJlZmVyZW5zZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjIxCittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgInVwcGRhdGVyYSA8cmVmbmFtbj4gaW50ZSBkZXQgZGVuIHBla2FyIHDDpSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo2Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE0Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAidXBwZGF0ZXJhIGluZm9ybWF0aW9uc2ZpbGVybmEgZnLDpW4gZ3J1bmRlbiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU2Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdnwtLXZlcmJvc2VdIFstc3wtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12fC0tdmVyYm9zZV0gWy1zfC0tc3RhdC1vbmx5XSA8cGFrZXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjYKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJwcmF0c2FtIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjgKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAidmlzYSBlbmRhc3Qgc3RhdGlzdGlrIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxNworbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdnwtLXZlcmJvc2VdIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXZ8LS12ZXJib3NlXSA8dGFnZz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjczCittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJ2aXNhIGlubmVow6VsbCBmw7ZyIHRhZyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTMKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICI8cHJlZml4Pi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI3Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJ2aXNhIHRyw6Rkb2JqZWt0IGbDtnIgdW5kZXJrYXRhbG9nZW4gPHByZWZpeD4iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMwCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAiZW5kYXN0IGFudsOkbmRiYXJ0IHZpZCBmZWxzw7ZrbmluZyIKKworIzogZ2l0LmM6MTYKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIKK21zZ3N0ciAiIgorIlNlIFwiZ2l0IGhlbHAgPGtvbW1hbmRvPlwiIGbDtnIgbWVyIGluZm9ybWF0aW9uIG9tIGV0dCBzcGVjaWZpa3Qga29tbWFuZG8uIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTU2Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICJpbmdlbiBmdW5rdGlvbiAoYmFrw6V0a29tcGF0aWJpbGl0ZXQpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjI4Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICJ2YXIgbWVyIHByYXRzYW0iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzAKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICJ2YXIgbWVyIHR5c3QiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzYKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAiYW52w6RuZCA8bj4gc2lmZnJvciBmw7ZyIGF0dCB2aXNhIFNIQS0xOm9yIgorCisjOiBjb21tb24tY21kcy5oOjgKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkzDpGdnIGZpbGlubmVow6VsbCB0aWxsIGluZGV4ZXQiCisKKyM6IGNvbW1vbi1jbWRzLmg6OQorbXNnaWQgIkZpbmQgYnkgYmluYXJ5IHNlYXJjaCB0aGUgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiQmluw6Ryc8O2ayBmw7ZyIGF0dCBoaXR0YSDDpG5kcmluZ2VuIHNvbSBpbnRyb2R1Y2VyYWRlIGV0dCBmZWwiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTAKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAiVmlzYSwgc2thcGEgZWxsZXIgdGEgYm9ydCBncmVuYXIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTEKK21zZ2lkICJDaGVja291dCBhIGJyYW5jaCBvciBwYXRocyB0byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJDaGVja2EgdXQgZW4gZ3JlbiBlbGxlciBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogY29tbW9uLWNtZHMuaDoxMgorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiS2xvbmEgZXR0IGFya2l2IHRpbGwgZW4gbnkga2F0YWxvZyIKKworIzogY29tbW9uLWNtZHMuaDoxMworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJQcm90b2tvbGxmw7ZyIMOkbmRyaW5nYXIgaSBhcmtpdmV0IgorCisjOiBjb21tb24tY21kcy5oOjE0Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiVmlzYSDDpG5kcmluZ2FyIG1lbGxhbiBpbmNoZWNrbmluZ2FyLCBtZWQgYXJiZXRza2F0YWxvZ2VuLCBvc3YiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTUKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJIw6RtdGEgb2JqZWt0IG9jaCByZWZlcmVuc2VyIGZyw6VuIGFubmF0IGFya2l2IgorCisjOiBjb21tb24tY21kcy5oOjE2Cittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICJWaXNhIHJhZGVyIHNvbSBtb3RzdmFyYXIgbcO2bnN0ZXIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTcKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgZ2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiU2thcGEgdG9tdCBnaXQtYXJraXYgZWxsZXIgb21pbml0aWVyYSBldHQgYmVmaW50bGlndCIKKworIzogY29tbW9uLWNtZHMuaDoxOAorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIlZpc2EgaW5jaGVja25pbmdzbG9nZ2FyIgorCisjOiBjb21tb24tY21kcy5oOjE5Cittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIlNsw6UgaWhvcCB0dsOlIGVsbGVyIGZsZXJhIHV0dmVja2xpbmdzaGlzdG9yaWVyIgorCisjOiBjb21tb24tY21kcy5oOjIwCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJGbHl0dGEgZWxsZXIgYnl0IG5hbW4gcMOlIGVuIGZpbCwga2F0YWxvZyBlbGxlciBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjEKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBtZXJnZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiSMOkbXRhIGZyw6VuIG9jaCBzbMOlIGlob3AgbWVkIGFubmF0IGFya2l2IGVsbGVyIGVuIGxva2FsIGdyZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjIKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIlVwcGRhdGVyYSBmasOkcnItcmVmZXJlbnNlciBvY2ggdGlsbGjDtnJhbmRlIG9iamVrdCIKKworIzogY29tbW9uLWNtZHMuaDoyMworbXNnaWQgIkZvcndhcmQtcG9ydCBsb2NhbCBjb21taXRzIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQiCittc2dzdHIgIkZyYW3DpXRhbnBhc3NhIGxva2FsYSBrb21tYW5kb24gcMOlIHVwcGRhdGVyYXQgdXBwc3Ryw7Ztc2h1dnVkIgorCisjOiBjb21tb24tY21kcy5oOjI0Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIsOFdGVyc3TDpGxsIGFrdHVlbGwgSEVBRCB0aWxsIGFuZ2l2ZXQgdGlsbHN0w6VuZCIKKworIzogY29tbW9uLWNtZHMuaDoyNQorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJUYSBib3J0IGZpbGVyIGZyw6VuIGFyYmV0c2thdGFsb2dlbiBvY2ggZnLDpW4gaW5kZXhldCIKKworIzogY29tbW9uLWNtZHMuaDoyNgorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICJWaXNhIG9saWthIHNvcnRlcnMgb2JqZWt0IgorCisjOiBjb21tb24tY21kcy5oOjI3Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiVmlzYSBzdGF0dXMgZsO2ciBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjgKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiU2thcGEsIHZpc2EsIHRhIGJvcnQgZWxsZXIgdmVyaWZpZXJhIEdQRy1zaWduZXJhdCB0YWdnb2JqZWt0IgorCisjOiBnaXQtYW0uc2g6NTAKK21zZ2lkICJZb3UgbmVlZCB0byBzZXQgeW91ciBjb21taXR0ZXIgaW5mbyBmaXJzdCIKK21zZ3N0ciAiRHUgbcOlc3RlIHN0w6RsbGEgaW4gZGluIGluY2hlY2thcmluZm9ybWF0aW9uIGbDtnJzdCIKKworIzogZ2l0LWFtLnNoOjk1Cittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyJEdSB2ZXJrYXIgaGEgZmx5dHRhdCBIRUFEIHNlZGFuIFwiYW1cIiBzaXN0IG1pc3NseWNrYWRlcy5cbiIKKyLDhXRlcnN0w6RsbGVyIGludGUgdGlsbCBPUklHX0hFQUQiCisKKyM6IGdpdC1hbS5zaDoxMDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJGNtZGxpbmUgLS1yZXNvbHZlZFwiLlxuIgorIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIkY21kbGluZSAtLXNraXBcIiBpbnN0ZWFkLlxuIgorIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorIk7DpHIgZHUgaGFyIGzDtnN0IHByb2JsZW1ldCBrw7ZyIGR1IFwiJGNtZGxpbmUgLS1yZXNvbHZlZFwiLlxuIgorIk9tIGR1IHZpbGwgaG9wcGEgw7Z2ZXIgcGF0Y2hlbiBrw7ZyIGR1IGlzdMOkbGxldCBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorIkbDtnIgYXR0IMOldGVyc3TDpGxsYSBvcmlnaW5hbGdyZW5lbiBvY2ggYXZicnl0YSBrw7ZyIGR1IFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKKworIzogZ2l0LWFtLnNoOjEyMQorbXNnaWQgIkNhbm5vdCBmYWxsIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLiIKK21zZ3N0ciAiS2FuIGludGUgZmFsbGEgdGlsbGJha2EgcMOlIHRyZXbDpGdzc2FtbWFuc2xhZ25pbmcuIgorCisjOiBnaXQtYW0uc2g6MTM3Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIkFya2l2ZXQgc2FrbmFyIG9iamVrdCBzb20gYmVow7Z2cyBmw7ZyIGF0dCBmYWxsYSB0aWxsYmFrYSBww6UgMy0iCisidsOkZ3NzYW1tYW5zbGFnbmluZy4iCisKKyM6IGdpdC1hbS5zaDoxMzkKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICJBbnbDpG5kZXIgaW5kZXhpbmZvIGbDtnIgYXR0IMOldGVza2FwYSBldHQgYmFzdHLDpGQuLi4iCisKKyM6IGdpdC1hbS5zaDoxNTQKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiSGFyIGR1IGhhbmRyZWRpZ2VyYXQgZGluIHBhdGNoP1xuIgorIkRlbiBrYW4gaW50ZSB0aWxsw6RtcGFzIHDDpSBibG9iYmFyIHNvbSBhbnRlY2tuYXRzIGkgZGVzcyBpbmRleC4iCisKKyM6IGdpdC1hbS5zaDoxNjMKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIiIKKyJGYWxsZXIgdGlsbGJha2EgcMOlIGF0dCBwYWNoYSBncnVuZHZlcnNpb25lbiBvY2ggdHJldsOkZ3NzYW1tYW5zbGFnbmluZy4uLiIKKworIzogZ2l0LWFtLnNoOjE3OQorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgIk1pc3NseWNrYWRzIHNsw6UgaWhvcCDDpG5kcmluZ2FybmEuIgorCisjOiBnaXQtYW0uc2g6Mjc0Cittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIkVuZGFzdCBlbiBTdEdJVC1wYXRjaHNlcmllIGthbiB0aWxsw6RtcGFzIMOldCBnw6VuZ2VuIgorCisjOiBnaXQtYW0uc2g6MzYxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmb3JtYXQgJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiUGF0Y2hmb3JtYXRldCAkcGF0Y2hfZm9ybWF0IHN0w7ZkcyBpbnRlLiIKKworIzogZ2l0LWFtLnNoOjM2MworbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGRldGVrdGVyYSBwYXRjaGZvcm1hdC4iCisKKyM6IGdpdC1hbS5zaDozODkKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyJGbGFnZ2FuIC1iLy0tYmluYXJ5IGhhciB2YXJpdCB1dGFuIGZ1bmt0aW9uIGzDpG5nZSwgb2NoXG4iCisia29tbWVyIHRhcyBib3J0LiBWaSBiZXIgZGlnIGF0dCBpbnRlIGFudsOkbmRhIGRlbiBsw6RuZ3JlLiIKKworIzogZ2l0LWFtLnNoOjQ3NworIywgc2gtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAkZG90ZXN0IHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgInRpZGlnYXJlIHJlYmFzZS1rYXRhbG9nICRkb3Rlc3QgZmlubnMgZm9ydGZhcmFuZGUsIG1lbiBtYm94IGFuZ2F2cy4iCisKKyM6IGdpdC1hbS5zaDo0ODIKK21zZ2lkICJQbGVhc2UgbWFrZSB1cCB5b3VyIG1pbmQuIC0tc2tpcCBvciAtLWFib3J0PyIKK21zZ3N0ciAiQmVzdMOkbSBkaWcuIC0tc2tpcCBlbGxlciAtLWFib3J0PyIKKworIzogZ2l0LWFtLnNoOjUwOQorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIkzDtnNuaW5nc29wZXJhdGlvbiBww6Vnw6VyIGludGUsIHZpIMOldGVydXBwdGFyIGludGUuIgorCisjOiBnaXQtYW0uc2g6NTc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAkZmlsZXMpIgorbXNnc3RyICJTbXV0c2lndCBpbmRleDoga2FuIGludGUgdGlsbMOkbXBhIHBhdGNoYXIgKHNtdXRzaWdhOiAkZmlsZXMpIgorCisjOiBnaXQtYW0uc2g6Njc5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiUGF0Y2ggaXMgZW1wdHkuICBXYXMgaXQgc3BsaXQgd3Jvbmc/XG4iCisiSWYgeW91IHdvdWxkIHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIGluc3RlYWQgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJQYXRjaGVuIMOkciB0b20uIERlbGFkZXMgZGVuIHVwcCBmZWxha3RpZ3Q/XG4iCisiT20gZHUgdmlsbCBob3BwYSDDtnZlciBwYXRjaGVuIGvDtnIgZHUgaXN0w6RsbGV0IFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisiRsO2ciBhdHQgw6V0ZXJzdMOkbGxhIG9yaWdpbmFsZ3JlbmVuIG9jaCBhdmJyeXRhIGvDtnIgZHUgXCIkY21kbGluZSAtLWFib3J0XCIuIgorCisjOiBnaXQtYW0uc2g6NzA2Cittc2dpZCAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKK21zZ3N0ciAiUGF0Y2hlbiBoYXIgaW50ZSBuw6Vnb24gZ2lsdGlnIGUtcG9zdGFkcmVzcy4iCisKKyM6IGdpdC1hbS5zaDo3NTMKK21zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCittc2dzdHIgIiIKKyJrYW4gaW50ZSB2YXJhIGludGVyYWt0aXYgb20gc3RhbmRhcmQgaW4gaW50ZSDDpHIgYW5zbHV0ZW4gdGlsbCBlbiB0ZXJtaW5hbC4iCisKKyM6IGdpdC1hbS5zaDo3NTcKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIkluY2hlY2tuaW5nc2tyb3BwZW4gw6RyOiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYW0uc2g6NzY0Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorbXNnc3RyICJUaWxsw6RtcGE/IFk9amEvTj1uZWovRT1yZWRpZ2VyYS9WPXZpc2EgcGF0Y2gvQT1nb2R0YSBhbGxhICIKKworIzogZ2l0LWFtLnNoOjgwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICRGSVJTVExJTkUiCittc2dzdHIgIlRpbGzDpG1wYXI6ICRGSVJTVExJTkUiCisKKyM6IGdpdC1hbS5zaDo4MjEKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKyJJbmdhIMOkbmRyaW5nYXIgLSBnbMO2bWRlIGR1IGFudsOkbmRhIFwiZ2l0IGFkZFwiP1xuIgorIk9tIGRldCBpbnRlIMOkciBuw6Vnb3Qga3ZhciBhdHQga8O2YSBrYW4gZGV0IGjDpG5kYSBhdHQgbsOlZ290IGFubmF0IHJlZGFuXG4iCisiaW50cm9kdWNlcmF0IHNhbW1hIMOkbmRyaW5nYXI7IGthbnNrZSBkdSBiw7ZyIGhvcHBhIMO2dmVyIHBhdGNoZW4uIgorCisjOiBnaXQtYW0uc2g6ODI5Cittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXhcbiIKKyJkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPyIKK21zZ3N0ciAiIgorIkR1IGhhciBmb3J0ZmFyYW5kZSBzw7ZrdsOkZ2FyIHNvbSBpbnRlIHNsYWdpdHMgc2FtbWFuIGkgZGl0dCBpbmRleFxuIgorImdsw7ZtZGUgZHUgYW52w6RuZGEgXCJnaXQgYWRkXCI/IgorCisjOiBnaXQtYW0uc2g6ODQ1Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIgLS0gUGF0Y2hlbiBoYXIgcmVkYW4gdGlsbMOkbXBhdHMuIgorCisjOiBnaXQtYW0uc2g6ODU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FIgorbXNnc3RyICJQYXRjaGVuIG1pc3NseWNrYWRlcyB2aWQgJG1zZ251bSAkRklSU1RMSU5FIgorCisjOiBnaXQtYW0uc2g6ODU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvcHkgb2YgdGhlIHBhdGNoIHRoYXQgZmFpbGVkIGlzIGZvdW5kIGluOlxuIgorIiAgICRkb3Rlc3QvcGF0Y2giCittc2dzdHIgIiIKKyJFbiBrb3BpYSBhdiBwYXRjaGVuIHNvbSBtaXNzbHlja2FkZXMgZmlubnMgaTpcbiIKKyIgICAkZG90ZXN0L3BhdGNoIgorCisjOiBnaXQtYW0uc2g6ODc2Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAidGlsbMOkbXBhciBww6UgZW4gdG9tIGhpc3RvcmlrIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ4Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIkR1IG3DpXN0ZSBzdGFydGEgbWVkIFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIlZpbGwgZHUgYXR0IGphZyBza2EgZ8O2cmEgZGV0IMOldCBkaWcgW1k9amEvTj1uZWpdPyIKKworIzogZ2l0LWJpc2VjdC5zaDo5NQorIywgc2gtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRhcmcnIgorbXNnc3RyICJmbGFnZ2FuIGvDpG5ucyBpbnRlIGlnZW46IFwiJGFyZ1wiIgorCisjOiBnaXQtYmlzZWN0LnNoOjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIlwiJGFyZ1wiIHZlcmthciBpbnRlIHZhcmEgZW4gZ2lsdGlnIHJldmlzaW9uIgorCisjOiBnaXQtYmlzZWN0LnNoOjExNworbXNnaWQgIkJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiRmVsYWt0aWd0IEhFQUQgLSBKYWcgYmVow7Z2ZXIgZXR0IEhFQUQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlY2tpbmcgb3V0ICckc3RhcnRfaGVhZCcgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPHZhbGlkYnJhbmNoPicuIgorbXNnc3RyICIiCisiTWlzc2x5Y2thZGVzIGNoZWNrYSB1dCBcIiRzdGFydF9oZWFkXCIuIEbDtnJzw7ZrIFwiZ2l0IGJpc2VjdCByZXNldCAiCisiPGdpbHRpZ2dyZW4+XCIiCisKKyMgY29naXRvLXJlbGF0ZXJhdAorIzogZ2l0LWJpc2VjdC5zaDoxNDAKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gc2Vla2VkIHRyZWUiCittc2dzdHIgImvDtnIgaW50ZSBcImJpc2VjdFwiIHDDpSBldHQgXCJzZWVrZWRcIi10csOkZCIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDQKK21zZ2lkICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICJGZWxha3RpZ3QgSEVBRCAtIGtvbnN0aWcgc3ltYm9saXNrIHJlZmVyZW5zIgorCisjOiBnaXQtYmlzZWN0LnNoOjE4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJHN0YXRlIgorbXNnc3RyICJGZWxha3RpZ3QgYXJndW1lbnQgdGlsbCBiaXNlY3Rfd3JpdGU6ICRzdGF0ZSIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIkZlbGFrdGlnIHJldi1pbmRhdGE6ICRhcmciCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIgorbXNnc3RyICJBbnJvcGEgXCJiaXNlY3Rfc3RhdGVcIiBtZWQgbWluc3QgZXR0IGFyZ3VtZW50LiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIkZlbGFrdGlnIHJldi1pbmRhdGE6ICRyZXYiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUwCittc2dpZCAiJ2dpdCBiaXNlY3QgYmFkJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIlwiZ2l0IGJpc2VjdCBiYWRcIiBrYW4gYmFyYSB0YSBldHQgYXJndW1lbnQuIgorCisjLiBoYXZlIGJhZCBidXQgbm90IGdvb2QuICB3ZSBjb3VsZCBiaXNlY3QgYWx0aG91Z2gKKyMuIHRoaXMgaXMgbGVzcyBvcHRpbXVtLgorIzogZ2l0LWJpc2VjdC5zaDoyNzMKK21zZ2lkICJXYXJuaW5nOiBiaXNlY3Rpbmcgb25seSB3aXRoIGEgYmFkIGNvbW1pdC4iCittc2dzdHIgIlZhcm5pbmc6IHV0ZsO2ciBcImJpc2VjdFwiIG1lZCBlbmRhc3QgZW4gZMOlbGlnIGluY2hlY2tuaW5nIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIsOEciBkdSBzw6RrZXIgW1k9amEvTj1uZWpdPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjg5Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lIGdvb2QgYW5kIG9uZSBiYWQgcmV2aXNpb25zLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgYmFkXCIgYW5kIFwiZ2l0IGJpc2VjdCBnb29kXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIkR1IG3DpXN0ZSBhbmdlIMOldG1pbnN0b25lIGVuIGJyYSBvY2ggZW4gZMOlbGlnIHZlcnNpb24uXG4iCisiKER1IGthbiBhbnbDpG5kYSBcImdpdCBiaXNlY3QgYmFkXCIgb2NoIFwiZ2l0IGJpc2VjdCBnb29kXCIgZsO2ciBkZXR0YS4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lIGdvb2QgYW5kIG9uZSBiYWQgcmV2aXNpb25zLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgYmFkXCIgYW5kIFwiZ2l0IGJpc2VjdCBnb29kXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIkR1IG3DpXN0ZSBzdGFydGEgbWVkIFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIkR1IG3DpXN0ZSBzZWRhbiBhbmdlIMOldG1pbnN0b25lIGVuIGJyYSBvY2ggZW4gZMOlbGlnIHZlcnNpb24uXG4iCisiKER1IGthbiBhbnbDpG5kYSBcImdpdCBiaXNlY3QgYmFkXCIgb2NoIFwiZ2l0IGJpc2VjdCBnb29kXCIgZsO2ciBkZXR0YS4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjM0NyBnaXQtYmlzZWN0LnNoOjQ3NAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiVmkgdXRmw7ZyIGluZ2VuIGJpc2VjdCBmw7ZyIHRpbGxmw6RsbGV0LiIKKworIzogZ2l0LWJpc2VjdC5zaDozNTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickaW52YWxpZCcgaXMgbm90IGEgdmFsaWQgY29tbWl0IgorbXNnc3RyICJcIiRpbnZhbGlkXCIgw6RyIGludGUgZW4gZ2lsdGlnIGluY2hlY2tuaW5nIgorCisjOiBnaXQtYmlzZWN0LnNoOjM2MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJGJyYW5jaCcuXG4iCisiVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIGNoZWNrYSB1dCBvcmlnaW5hbC1IRUFEIFwiJGJyYW5jaFwiLlxuIgorIkbDtnJzw7ZrIFwiZ2l0IGJpc2VjdCByZXNldCA8aW5jaGVja25pbmc+XCIuIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5MAorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIkluZ2VuIGxvZ2dmaWwgYW5naXZlbiIKKworIzogZ2l0LWJpc2VjdC5zaDozOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgImthbiBpbnRlIGzDpHNhICRmaWxlIGbDtnIgdXBwc3BlbG5pbmciCisKKyM6IGdpdC1iaXNlY3Quc2g6NDA4Cittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyB2YWQgbWVuYXIgZHU/IgorCisjOiBnaXQtYmlzZWN0LnNoOjQyMAorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAia8O2ciAkY29tbWFuZCIKKworIzogZ2l0LWJpc2VjdC5zaDo0MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorIlwiYmlzZWN0XCIta8O2cm5pbmdlbiBtaXNzbHlja2FkZXM6XG4iCisiZmVsa29kICRyZXMgZnLDpW4gXCIkY29tbWFuZFwiIMOkciA8IDAgZWxsZXIgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1MworbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJcImJpc2VjdFwiLWvDtnJuaW5nZW4ga2FuIGludGUgZm9ydHPDpHR0YSBsw6RuZ3JlIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJcImJpc2VjdFwiLWvDtnJuaW5nZW4gbWlzc2x5Y2thZGVzOlxuIgorIlwiYmlzZWN0X3N0YXRlICRzdGF0ZVwiIGF2c2x1dGFkZXMgbWVkIGZlbGtvZGVuICRyZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDY2Cittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICJcImJpc2VjdFwiLWvDtnJuaW5nZW4gbHlja2FkZXMiCisKKyM6IGdpdC1wdWxsLnNoOjIxCittc2dpZCAiIgorIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuXG4iCisiUGxlYXNlLCBmaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiwgb3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCittc2dzdHIgIiIKKyJEdSBrYW4gaW50ZSBnw7ZyYSBlbiBcInB1bGxcIiBkw6UgZHUgaGFyIMOkbmRyaW5nYXIgc29tIGludGUgY2hlY2thdHMgaW4uXG4iCisiUsOkdHRhIGRlbSBpIGRpbiBhcmJldHNrYXRhbG9nIG9jaCBhbnbDpG5kIHNlZGFuIFwiZ2l0IGFkZC9ybSA8ZmlsPlwiXG4iCisiZMOkciBkZXQgw6RyIGzDpG1wbGlndCBmw7ZyIGF0dCBhbmdlIGzDtnNuaW5nLCBlbGxlciBhbnbDpG5kIFwiZ2l0IGNvbW1pdCAtYVwiLiIKKworIzogZ2l0LXB1bGwuc2g6MjUKK21zZ2lkICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiRHUga2FuIGludGUgZ8O2cmEgZW4gXCJwdWxsXCIgZMOlIGR1IGhhciDDpG5kcmluZ2FyIHNvbSBpbnRlIGNoZWNrYXRzIGluLiIKKworIzogZ2l0LXB1bGwuc2g6MTk3Cittc2dpZCAidXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4IgorbXNnc3RyICJ1cHBkYXRlcmFyIGVuIG9mw7ZkZCBncmVuIG1lZCDDpG5kcmluZ2FyIHNvbSBsYWd0cyB0aWxsIGkgaW5kZXhldCIKKworIy4gVGhlIGZldGNoIGludm9sdmVkIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaC4KKyMuIFRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBmaWxlIGlzIHN0aWxsIGJhc2VkIG9uIHRoZQorIy4gJG9yaWdfaGVhZCBjb21taXQsIGJ1dCB3ZSBhcmUgbWVyZ2luZyBpbnRvICRjdXJyX2hlYWQuCisjLiBGaXJzdCB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB0byBtYXRjaCAkY3Vycl9oZWFkLgorIzogZ2l0LXB1bGwuc2g6MjI4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJXYXJuaW5nOiBmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorIldhcm5pbmc6IGNvbW1pdCAkb3JpZ19oZWFkLiIKK21zZ3N0ciAiIgorIlZhcm5pbmc6IGZldGNoIHVwcGRhdGVyYWRlIGh1dnVkZXQgZsO2ciBha3R1ZWxsIGdyZW4uXG4iCisiVmFybmluZzogc25hYmJzcG9sYXIgZGluIGFyYmV0c2thdGFsb2cgZnLDpW5cbiIKKyJWYXJuaW5nOiBpbmNoZWNrbmluZ2VuICRvcmlnX2hlYWQuIgorCisjOiBnaXQtcHVsbC5zaDoyNTMKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICJLYW4gaW50ZSBzbMOlIGlob3AgZmxlcmEgZ3JlbmFyIGkgZXR0IHRvbXQgaHV2dWQuIgorCisjOiBnaXQtcHVsbC5zaDoyNTcKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMiCittc2dzdHIgIkthbiBpbnRlIHV0ZsO2cmEgZW4gXCJyZWJhc2VcIiBvdmFucMOlIGZsZXJhIGdyZW5hciIKKworIzogZ2l0LXJlYmFzZS5zaDo1MworbXNnaWQgIiIKKyJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyJUbyBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCByZWJhc2luZywgcnVuIFwiZ2l0IHJlYmFzZSAtLWFib3J0IgorIlwiLiIKK21zZ3N0ciAiIgorIk7DpHIgZHUgaGFyIGzDtnN0IHByb2JsZW1ldCBrw7ZyIGR1IFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiT20gZHUgdmlsbCBob3BwYSDDtnZlciBwYXRjaGVuIGvDtnIgZHUgaXN0w6RsbGV0IFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJGw7ZyIGF0dCDDpXRlcnN0w6RsbGEgb3JpZ2luYWxncmVuZW4gb2NoIGF2YnJ5dGEga8O2ciBkdSBcImdpdCByZWJhc2UgLS1hYm9ydFwiLiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjAKK21zZ2lkICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKK21zZ3N0ciAiS3Jva2VuIHByZS1yZWJhc2UgdsOkZ3JhZGUgb21iYXNlcmluZ2VuLiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjUKK21zZ2lkICJJdCBsb29rcyBsaWtlIGdpdC1hbSBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIkRldCB2ZXJrYXIgc29tIGVuIGdpdC1hbSBrw7Zycy4gS2FuIGludGUgb21iYXNlcmEuIgorCisjOiBnaXQtcmViYXNlLnNoOjI5NgorbXNnaWQgIlRoZSAtLWV4ZWMgb3B0aW9uIG11c3QgYmUgdXNlZCB3aXRoIHRoZSAtLWludGVyYWN0aXZlIG9wdGlvbiIKK21zZ3N0ciAiRmxhZ2dhbiAtLWV4ZWMgbcOlc3RlIGFudsOkbmRhcyB0aWxsc2FtbWFucyBtZWQgZmxhZ2dhbiAtLWludGVyYWN0aXZlIgorCisjOiBnaXQtcmViYXNlLnNoOjMwMQorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgIkluZ2VuIG9tYmFzZXJpbmcgcMOlZ8Olcj8iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzEyCittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICLDhXRnw6RyZGVuIC0tZWRpdC10b2RvIGthbiBlbmRhc3QgYW52w6RuZGFzIHVuZGVyIGludGVyYWt0aXYgb21iYXNlcmluZy4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzE5Cittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiS2FuIGludGUgbMOkc2EgSEVBRCIKKworIzogZ2l0LXJlYmFzZS5zaDozMjIKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJEdSBtw6VzdGUgcmVkaWdlcmEgYWxsYSBzYW1tYW5zbGFnbmluZ3Nrb25mbGlrdGVyIG9jaFxuIgorImTDpHJlZnRlciBtYXJrZXJhIGRlbSBzb20gbMO2c3RhIG1lZCBnaXQgYWRkIgorCisjOiBnaXQtcmViYXNlLnNoOjM0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorbXNnc3RyICJLdW5kZSBpbnRlIGZseXR0YSB0aWxsYmFrYSB0aWxsICRoZWFkX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzU5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJHN0YXRlX2Rpcl9iYXNlIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLiIKK21zZ3N0ciAiIgorIkRldCB2ZXJrYXIgc29tIGthdGFsb2dlbiAkc3RhdGVfZGlyX2Jhc2UgcmVkYW4gZXhpc3RlcmFyLCBvY2hcbiIKKyJqYWcgdW5kcmFyIG9tIGR1IHJlZGFuIMOkciBtaXR0IGkgZW4gYW5uYW4gb21iYXNlcmluZy4gT20gc8OlIMOkclxuIgorImZhbGxldCwgZsO2cnPDtmtcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJPbSBzw6UgaW50ZSDDpHIgZmFsbGV0LCBrw7ZyXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorIm9jaCBrw7ZyIHByb2dyYW1tZXQgaWdlbi4gSmFnIGF2c2x1dGFyIGlmYWxsIGR1IGZvcnRmYXJhbmRlIGhhclxuIgorIm7DpWdvdCBhdiB2w6RyZGUgZMOkci4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICR1cHN0cmVhbV9uYW1lIgorbXNnc3RyICJvZ2lsdGlnIHVwcHN0csO2bSAkdXBzdHJlYW1fbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo0MjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIgorbXNnc3RyICIkb250b19uYW1lOiBtZXIgw6RuIGVuIHNhbW1hbnNsYWduaW5nc2JhcyBmaW5ucyIKKworIzogZ2l0LXJlYmFzZS5zaDo0MzEgZ2l0LXJlYmFzZS5zaDo0MzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGlzIG5vIG1lcmdlIGJhc2UiCittc2dzdHIgIiRvbnRvX25hbWU6IGluZ2VuIHNhbW1hbnNsYWduaW5nc2JhcyBmaW5ucyIKKworIzogZ2l0LXJlYmFzZS5zaDo0NDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorbXNnc3RyICJQZWthIHDDpSBlbiBnaWx0aWcgaW5jaGVja25pbmc6ICRvbnRvX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDYzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2g6ICRicmFuY2hfbmFtZSIKK21zZ3N0ciAiw7ZkZXNkaWdlcnQ6IGluZ2VuIHPDpWRhbiBncmVuOiAkYnJhbmNoX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDgzCittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiQ2hlY2thIGluIGVsbGVyIGFudsOkbmQgXCJzdGFzaFwiIHDDpSBkZW0uIgorCisjOiBnaXQtcmViYXNlLnNoOjUwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICJBa3R1ZWxsIGdyZW4gJGJyYW5jaF9uYW1lIMOkciDDoCBqb3VyLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiQWt0dWVsbCBncmVuICRicmFuY2hfbmFtZSDDpHIgw6Agam91ciwgb21iYXNlcmluZyBmcmFtdHZpbmdhZC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIGZyb20gJG1iIHRvICRvbnRvOiIKK21zZ3N0ciAiw4RuZHJpbmdhciBmcsOlbiAkbWIgdGlsbCAkb250bzoiCisKKyMuIERldGFjaCBIRUFEIGFuZCByZXNldCB0aGUgdHJlZQorIzogZ2l0LXJlYmFzZS5zaDo1MjQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi4iCittc2dzdHIgIiIKKyJGw7Zyc3QsIHNwb2xhciB0aWxsYmFrYSBodXZ1ZGV0IGbDtnIgYXR0IHNwZWxhIGF2IGRpdHQgYXJiZXRlIG92YW5ww6UgZGV0Li4uIgorCisjOiBnaXQtcmViYXNlLnNoOjUzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJGJyYW5jaF9uYW1lIHRvICRvbnRvX25hbWUuIgorbXNnc3RyICJTbmFiYnNwb2xhZGUgJGJyYW5jaF9uYW1lIHRpbGwgJG9udG9fbmFtZS4iCisKKyM6IGdpdC1zdGFzaC5zaDo1MQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiXCJnaXQgc3Rhc2ggY2xlYXJcIiBtZWQgcGFyYW1ldHJhciBoYXIgaW50ZSBpbXBsZW1lbnRlcmF0cyIKKworIzogZ2l0LXN0YXNoLnNoOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIkR1IGhhciBpbnRlIGRlbiBmw7Zyc3RhIGluY2hlY2tuaW5nZW4gw6RubnUiCisKKyM6IGdpdC1zdGFzaC5zaDo4OQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICJLYW4gaW50ZSBzcGFyYSBha3R1ZWxsdCB0aWxsc3TDpW5kIGbDtnIgaW5kZXhldCIKKworIzogZ2l0LXN0YXNoLnNoOjEyMyBnaXQtc3Rhc2guc2g6MTM2Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIkthbiBpbnRlIHNwYXJhIGFrdHVlbGx0IHRpbGxzdMOlbmQgZsO2ciBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGdpdC1zdGFzaC5zaDoxNDAKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIgdmFsZGEiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDMKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiS2FuIGludGUgdGEgYm9ydCB0ZW1wb3LDpHJ0IGluZGV4IChrYW4gaW50ZSBpbnRyw6RmZmEpIgorCisjOiBnaXQtc3Rhc2guc2g6MTU2Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIkthbiBpbnRlIHJlZ2lzdHJlcmEgdGlsbHN0w6VuZCBmw7ZyIGFyYmV0c2thdGFsb2ciCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuCisjLiAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKyMuIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorIy4gVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisjOiBnaXQtc3Rhc2guc2g6MjAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCittc2dzdHIgIiIKKyJmZWw6IGZlbGFrdGlnIGZsYWdnYSBmw7ZyIFwic3Rhc2ggc2F2ZVwiOiAkb3B0aW9uXG4iCisiICAgICBGw7ZyIGF0dCBhbmdlIGV0dCBtZWRkZWxhbmRlLCBhbnbDpG5kIGdpdCBzdGFzaCBzYXZlIC0tIFwiJG9wdGlvblwiIgorCisjOiBnaXQtc3Rhc2guc2g6MjIzCittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICJJbmdhIGxva2FsYSDDpG5kcmluZ2FyIGF0dCBzcGFyYSIKKworIzogZ2l0LXN0YXNoLnNoOjIyNworbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICJLYW4gaW50ZSBpbml0aWVyYSBcInN0YXNoXCIiCisKKyM6IGdpdC1zdGFzaC5zaDoyMzUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIkthbiBpbnRlIHNwYXJhIGFrdHVlbGwgc3RhdHVzIgorCisjOiBnaXQtc3Rhc2guc2g6MjUzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJLYW4gaW50ZSB0YSBib3J0IMOkbmRyaW5nYXIgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGdpdC1zdGFzaC5zaDozNTIKK21zZ2lkICJObyBzdGFzaCBmb3VuZC4iCittc2dzdHIgIkluZ2VuIFwic3Rhc2hcIiBoaXR0YWRlcy4iCisKKyM6IGdpdC1zdGFzaC5zaDozNTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6ICRSRVYiCittc2dzdHIgIkbDtnIgbcOlbmdhIHJldmlzaW9uZXIgYW5naXZuYTogJFJFViIKKworIzogZ2l0LXN0YXNoLnNoOjM2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNlIMOkciBpbnRlIGVuIGdpbHRpZyByZWZlcmVucy4iCisKKyM6IGdpdC1zdGFzaC5zaDozOTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIlwiJGFyZ3NcIiDDpHIgaW50ZSBlbiBcInN0YXNoXCItbGlrbmFuZGUgaW5jaGVja25pbmciCisKKyM6IGdpdC1zdGFzaC5zaDo0MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICJcIiRhcmdzXCIgw6RyIGludGUgZW4gXCJzdGFzaFwiLXJlZmVyZW5zIgorCisjOiBnaXQtc3Rhc2guc2g6NDEyCittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImthbiBpbnRlIHVwcGRhdGVyYSBpbmRleGV0IgorCisjOiBnaXQtc3Rhc2guc2g6NDE2Cittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJLYW4gaW50ZSB0aWxsw6RtcGEgZW4gXCJzdGFzaFwiIG1pdHQgaSBlbiBzYW1tYW5zbGFnbmluZyIKKworIzogZ2l0LXN0YXNoLnNoOjQyNAorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIktvbmZsaWt0ZXIgaSBpbmRleGV0LiBUZXN0YSB1dGFuIC0taW5kZXguIgorCisjOiBnaXQtc3Rhc2guc2g6NDI2Cittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzcGFyYSBpbmRleHRyw6RkIgorCisjOiBnaXQtc3Rhc2guc2g6NDYwCittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIkthbiBpbnRlIHRhIGJvcnQgw6RuZHJhZGUgZmlsZXIgdXIga8O2biIKKworIzogZ2l0LXN0YXNoLnNoOjQ3NQorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiSW5kZXhldCBoYXIgaW50ZSB0YWdpdHMgdXIga8O2bi4iCisKKyM6IGdpdC1zdGFzaC5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIkthc3RhZGUgJHtSRVZ9ICgkcykiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTogS3VuZGUgaW50ZSBrYXN0YSBcInN0YXNoXCItcG9zdCIKKworIzogZ2l0LXN0YXNoLnNoOjUwMAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiSW5nZXQgZ3Jlbm5hbW4gYW5nYXZzIgorCisjOiBnaXQtc3Rhc2guc2g6NTcxCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIoRsO2ciBhdHQgw6V0ZXJzdMOkbGxhIGRlbSwgc2tyaXYgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyRyZW1vdGV1cmwnIgorbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0IGVuIGtvbXBvbmVudCBmcsOlbiB1cmw6ZW4gXCIkcmVtb3RldXJsXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisiSGl0dGFkZSBpbmdlbiB1bmRlcm1vZHVsbWFwcG5pbmcgaSAuZ2l0bW9kdWxlcyBmw7ZyIHPDtmt2w6RnZW4gXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBmYWlsZWQiCittc2dzdHIgIk1pc3NseWNrYWRlcyBrbG9uYSBcIiR1cmxcIiB0aWxsIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJHNtX3BhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkdpdGRpciAnJGEnIGlzIHBhcnQgb2YgdGhlIHN1Ym1vZHVsZSBwYXRoICckYicgb3IgdmljZSB2ZXJzYSIKK21zZ3N0ciAiR2l0a2F0YWxvZyBcIiRhXCIgaW5nw6VyIGkgdW5kZXJrYXRhbG9nc8O2a3bDpGdlbiBcIiRiXCIgZWxsZXIgb212w6RudCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgImFya2l2LVVSTDogXCIkcmVwb1wiIG3DpXN0ZSB2YXJhIGFic29sdXQgZWxsZXIgYsO2cmphIG1lZCAuL3wuLi8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzI5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiXCIkc21fcGF0aFwiIGZpbm5zIHJlZGFuIGkgaW5kZXhldCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisiRsO2bGphbmRlIHPDtmt2w6RnYXIgaWdub3JlcmFzIGF2IGVuIGF2IGRpbmEgLmdpdGlnbm9yZS1maWxlcjpcbiIKKyIkc21fcGF0aFxuIgorIkFudsOkbmQgLWYgb20gZHUgdmVya2xpZ2VuIHZpbGwgbMOkZ2dhIHRpbGwgZGVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkzDpGdnZXIgdGlsbCBiZWZpbnRsaWd0IGFya2l2IGkgXCIkc21fcGF0aFwiIGkgaW5kZXhldCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICJcIiRzbV9wYXRoXCIgZmlubnMgcmVkYW4gb2NoIMOkciBpbnRlIGV0dCBnaWx0aWd0IGdpdC1hcmtpdiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiS2FuIGludGUgY2hlY2thIHV0IHVuZGVybW9kdWxlbiBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzY1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJNaXNzbHlja2FkZXMgbMOkZ2dhIHRpbGwgdW5kZXJtb2R1bGVuIFwiJHNtX3BhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHJlZ2lzdHJlcmEgdW5kZXJtb2R1bGVuIFwiJHNtX3BhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICckcHJlZml4JHNtX3BhdGgnIgorbXNnc3RyICJHw6VyIGluIGkgXCIkcHJlZml4JHNtX3BhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckc21fcGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorbXNnc3RyICIiCisiU3RvcHBhciBww6UgXCIkc21fcGF0aFwiOyBza3JpcHRldCByZXR1cm5lcmFkZSBlbiBzdGF0dXMgc2tpbGQgZnLDpW4gbm9sbC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIkhpdHRhZGUgaW5nZW4gdXJsIGbDtnIgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkc21fcGF0aFwiIGkgLmdpdG1vZHVsZXMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJNaXNzbHlja2FkZXMgcmVnaXN0cmVyYSB1cmwgZsO2ciB1bmRlcmthdGFsb2dzw7ZrdsOkZyBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJVbmRlcm1vZHVsZW4gXCIkbmFtZVwiICgkdXJsKSByZWdpc3RyZXJhZCBmw7ZyIHPDtmt2w6RnZW4gXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisiTWlzc2x5Y2thZGVzIHJlZ2lzdHJlcmEgdXBwZGF0ZXJpbmdzbMOkZ2UgZsO2ciB1bmRlcm1vZHVsc8O2a3bDpGcgXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKyJVbmRlcm1vZHVsZW4gXCIkc21fcGF0aFwiIGhhciBpbnRlIGluaXRpZXJhdHNcbiIKKyJLYW5za2UgZHUgdmlsbCBrw7ZyYSBcInVwZGF0ZSAtLWluaXRcIj8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjAzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIkthbiBpbnRlIGhpdHRhIGFrdHVlbGwgcmV2aXNpb24gaSB1bmRlcm1vZHVsc8O2a3bDpGcgXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyMgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIkthbiBpbnRlIGjDpG10YSBpIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiS2FuIGludGUgb21iYXNlcmEgXCIkc2hhMVwiIGkgdW5kZXJtb2R1bHPDtmt2w6RnIFwiJHNtX3BhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICJVbmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRzbV9wYXRoXCI6IG9tYmFzZXJhZGUgaW4gaSBcIiRzaGExXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBzbMOlIGlob3AgXCIkc2hhMVwiIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIlVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJHNtX3BhdGhcIjogc2FtbWFuc2xhZ2VuIGkgXCIkc2hhMVwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0OAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiS2FuIGludGUgY2hlY2thIHV0IFwiJHNoYTFcIiBpIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJHNtX3BhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIlVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJHNtX3BhdGhcIjogY2hlY2thZGUgdXQgXCIkc2hhMVwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY3MSBnaXQtc3VibW9kdWxlLnNoOjk5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJNaXNzbHlja2FkZXMgcmVrdXJzZXJhIGluIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjc3OQorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIkZsYWdnYW4gLS1jYWNoZWQga2FuIGludGUgYW52w6RuZGFzIG1lZCBmbGFnZ2FuIC0tZmlsZXMiCisKKyMuIHVuZXhwZWN0ZWQgdHlwZQorIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAib3bDpG50YXQgbMOkZ2UgJG1vZF9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIFZhcm5pbmc6ICRuYW1lIGlubmVow6VsbGVyIGludGUgaW5jaGVja25pbmcgJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICBWYXJuaW5nOiAkbmFtZSBpbm5laMOlbGxlciBpbnRlIGluY2hlY2tuaW5nICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiAgVmFybmluZzogJG5hbWUgaW5uZWjDpWxsZXIgaW50ZSBpbmNoZWNrbmluZ2FyICRzaGExX3NyYyBvY2ggJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg2OAorbXNnaWQgImJsb2IiCittc2dzdHIgImJsb2IiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTA2Cittc2dpZCAiIyBTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiIyBVbmRlcm1vZHVsZXIgw6RuZHJhZGUgbWVuIGludGUgdXBwZGF0ZXJhZGU6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwOAorbXNnaWQgIiMgU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiIyBVbmRlcm1vZHVsZXJzIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbjoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJG5hbWUnIgorbXNnc3RyICJTeW5rcm9uaXNlcmFyIHVuZGVybW9kdWwtdXJsIGbDtnIgXCIkbmFtZVwiIgorCisjfiBtc2dpZCAiIDAgZmlsZXMgY2hhbmdlZCIKKyN+IG1zZ3N0ciAiIDAgZmlsZXIgw6RuZHJhZGUiCisKKyN+IG1zZ2lkICIgJWQgZmlsZSBjaGFuZ2VkIgorI34gbXNnaWRfcGx1cmFsICIgJWQgZmlsZXMgY2hhbmdlZCIKKyN+IG1zZ3N0clswXSAiICVkIGZpbCDDpG5kcmFkIgorI34gbXNnc3RyWzFdICIgJWQgZmlsZXIgw6RuZHJhZGUiCisKKyN+IG1zZ2lkICIsICVkIGluc2VydGlvbigrKSIKKyN+IG1zZ2lkX3BsdXJhbCAiLCAlZCBpbnNlcnRpb25zKCspIgorI34gbXNnc3RyWzBdICIsICVkIHRpbGzDpGdnKCspIgorI34gbXNnc3RyWzFdICIsICVkIHRpbGzDpGdnKCspIgorCisjfiBtc2dpZCAiLCAlZCBkZWxldGlvbigtKSIKKyN+IG1zZ2lkX3BsdXJhbCAiLCAlZCBkZWxldGlvbnMoLSkiCisjfiBtc2dzdHJbMF0gIiwgJWQgYm9ydHRhZ25pbmcoLSkiCisjfiBtc2dzdHJbMV0gIiwgJWQgYm9ydHRhZ25pbmdhcigtKSIKKworI34gbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKKyN+IG1zZ3N0ciAiUGFja2FyIGFya2l2ZXQgYXV0b21hdGlza3QgZsO2ciBvcHRpbWFsIHByZXN0YW5kYS5cbiIKKworI34gbXNnaWQgIiAodXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKSIKKyN+IG1zZ3N0ciAiIChzcMOlcmEgbWVkIFwiZ2l0IGFkZFwiKSIKKworI34gbXNnaWQgIi1CIGNhbm5vdCBiZSB1c2VkIHdpdGggLWIiCisjfiBtc2dzdHIgIi1CIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgLWIiCisKKyN+IG1zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBvcHRpb25zIgorI34gbXNnc3RyICItLXBhdGNoIMOkciBpbmtvbXBhdGliZWwgbWVkIGFsbGEgYW5kcmEgZmxhZ2dvciIKKworI34gbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLWIvLUIvLS1vcnBoYW4iCisjfiBtc2dzdHIgIi0tZGV0Y2FoIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgLWIvLUIvLS1vcnBoYW4iCisKKyN+IG1zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorI34gbXNnc3RyICItLWRldGFjaCBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC10IgorCisjfiBtc2dpZCAiLS1vcnBoYW4gYW5kIC1ifC1CIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCisjfiBtc2dzdHIgIi0tb3JwaGFuIG9jaCAtYnwtQiBrYW4gaW50ZSBhbnbDpG5kYXMgc2FtdGlkaWd0IgorCisjfiBtc2dpZCAiLS1vcnBoYW4gY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKKyN+IG1zZ3N0ciAiLS1vcnBoYW4ga2FuIGludGUgYW52w6RuZGFzIG1lZCAtdCIKKworI34gbXNnaWQgImdpdCBjaGVja291dDogLWYgYW5kIC1tIGFyZSBpbmNvbXBhdGlibGUiCisjfiBtc2dzdHIgImdpdCBjaGVja291dDogLWYgb2NoIC1tIMOkciBpbmtvbXBhdGlibGEiCiAKICN+IG1zZ2lkICIiCi0jfiAiVW5hYmxlIHRvIHN0YXJ0IGdpdGs6XG4iCi0jfiAiXG4iCi0jfiAiJXMgZG9lcyBub3QgZXhpc3QiCisjfiAiZ2l0IGNoZWNrb3V0OiB1cGRhdGluZyBwYXRocyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgogI34gbXNnc3RyICIiCi0jfiAiS2FuIGludGUgc3RhcnRhIGdpdGs6XG4iCisjfiAiZ2l0IGNoZWNrb3V0OiB1cHBkYXRlcmEgc8O2a3bDpGdhciDDpHIgaW5rb21wYXRpYmVsdCBtZWQgYXR0IHbDpHhsYSBncmVuLiIKKworI34gbXNnaWQgImRpZmYgc2V0dXAgZmFpbGVkIgorI34gbXNnc3RyICJtaXNzbHlja2FkZXMgc8OkdHRhIHVwcCBmw7ZyIGRpZmYiCisKKyN+IG1zZ2lkICJtZXJnZS1yZWN1cnNpdmU6IGRpc2sgZnVsbD8iCisjfiBtc2dzdHIgIm1lcmdlLXJlY3Vyc2l2ZTogZGlzayBmdWxsPyIKKworI34gbXNnaWQgImRpZmZfc2V0dXBfZG9uZSBmYWlsZWQiCisjfiBtc2dzdHIgImRpZmZfc2V0dXBfZG9uZSBtaXNzbHlja2FkZXMiCisKKyN+IG1zZ2lkICIlczogaGFzIGJlZW4gZGVsZXRlZC9yZW5hbWVkIgorI34gbXNnc3RyICIlczogaGFyIHRhZ2l0cyBib3J0L8OkbmRyYXQgbmFtbiIKKworI34gbXNnaWQgIiclcyc6IG5vdCBhIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5LiIKKyN+IG1zZ3N0ciAiXCIlc1wiOiBpbnRlIGVuIGRva3VtZW50YXRpb25za2F0YWxvZy4iCisKKyN+IG1zZ2lkICItZCBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIERvIG5vdCB1c2UuIgorI34gbXNnc3RyICJGbGFnZ2FuIC1kIHN0w7ZkcyBpbnRlIGzDpGdyZS4gQW52w6RuZCBpbnRlLiIKKworI34gbXNnaWQgImNoZXJyeS1waWNrIgorI34gbXNnc3RyICJjaGVycnktcGljayIKKworI34gbXNnaWQgIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4iCisjfiBtc2dzdHIgIkFuZ2UgZXR0IGluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBkaW5hIMOkbmRyaW5nYXIuIgorCisjfiBtc2dpZCAiQ291bGQgbm90IGV4dHJhY3QgZW1haWwgZnJvbSBjb21taXR0ZXIgaWRlbnRpdHkuIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIGV4dHJhaGVyYSBlLXBvc3RhZHJlc3MgZnLDpW4gaW5jaGVja2FyZW5zIGlkZW50aXRldC4iCisKKyN+IG1zZ2lkICItLSIKKyN+IG1zZ3N0ciAiLS0iCisKKyN+IG1zZ2lkICIjIENoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKKyN+IG1zZ3N0ciAiIyDDhG5kcmFkZSBtZW4gaW50ZSB1cHBkYXRlcmFkZToiCisKKyN+IG1zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKKyN+IG1zZ3N0ciAiRGV0IGZpbm5zIHJlZGFuIGVuIGdyZW4gc29tIGhldGVyIFwiJXNcIiIKKworI34gbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCAzIHZlcnNpb25zIgorI34gbXNnc3RyICJzw7ZrdsOkZ2VuIFwiJXNcIiBoYXIgaW50ZSBhbGxhIDMgdmVyc2lvbmVybmEiCisKKyN+IG1zZ2lkICJnaXQgY2hlY2tvdXQ6IHdlIGRvIG5vdCBsaWtlICclcycgYXMgYSBicmFuY2ggbmFtZS4iCisjfiBtc2dzdHIgImdpdCBjaGVja291dDogdmkgdHlja2VyIGludGUgb20gXCIlc1wiIHNvbSBuYW1uIHDDpSBlbiBncmVuLiIKKworI34gbXNnaWQgImdpdCBjaGVja291dDogYnJhbmNoICVzIGFscmVhZHkgZXhpc3RzIgorI34gbXNnc3RyICJnaXQgY2hlY2tvdXQ6IGdyZW5lbiAlcyBmaW5ucyByZWRhbiIKKworI34gbXNnaWQgIlBhdGhzIHdpdGggLS1pbnRlcmFjdGl2ZSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKKyN+IG1zZ3N0ciAiS2FuIGludGUgYW5nZSBzw7ZrdsOkZ2FyIG1lZCAtLWludGVyYWN0aXZlLiIKKworI34gbXNnaWQgIk5vIEhFQUQgY29tbWl0IHRvIGNvbXBhcmUgd2l0aCAoeWV0KSIKKyN+IG1zZ3N0ciAiSW5nZW4gSEVBRC1pbmNoZWNrbmluZyBhdHQgasOkbWbDtnJhIG1lZCAow6RubnUpIgorCisjfiBtc2dpZCAiY2Fubm90IG1peCAtLWZpeGVkLXN0cmluZ3MgYW5kIHJlZ2V4cCIKKyN+IG1zZ3N0ciAia2FuIGludGUgYmxhbmRhIC0tZml4ZWQtc3RyaW5ncyBvY2ggcmVndWxqw6RyYSB1dHRyeWNrIgorCisjfiBtc2dpZCAiJXM7IHdpbGwgb3ZlcndyaXRlISIKKyN+IG1zZ3N0ciAiJXM7IGtvbW1lciBza3JpdmEgw7Z2ZXIhIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIHdyaXRlIGN1cnJlbnQgbm90ZXMgdHJlZSB0byBkYXRhYmFzZSIKKyN+IG1zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgYWt0dWVsbHQgYW50ZWNrbmluZ3N0csOkZCB0aWxsIGRhdGFiYXNlbiIKKworIyBGSVhNRTogVW50cmFuc2xhdGFibGUhCisjCisjfiBtc2dpZCAiUmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorI34gbXNnc3RyICJWw6RncmFyICVzIGFudGVja25pbmdhciBpICVzICh1dGFuZsO2ciByZWZzL25vdGVzLykiCisKKyN+IG1zZ2lkICJhZGQiCisjfiBtc2dzdHIgImFkZCIKKworI34gbXNnaWQgImNvcHkiCisjfiBtc2dzdHIgImNvcHkiCisKKyN+IG1zZ2lkICJzaG93IgorI34gbXNnc3RyICJzaG93IgorCisjfiBtc2dpZCAicmVtb3ZlIgorI34gbXNnc3RyICJyZW1vdmUiCisKKyN+IG1zZ2lkICJwcnVuZSIKKyN+IG1zZ3N0ciAicHJ1bmUiCisKKyN+IG1zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaXMgbm90IHRyYWNraW5nIGFueXRoaW5nLiIKKyN+IG1zZ3N0ciAiRGVuIGFrdHVlbGxhIGdyZW5lbiAlcyBzcMOlcmFyIGluZ2VudGluZy4iCisKKyN+IG1zZ2lkICJObyBkZXN0aW5hdGlvbiBjb25maWd1cmVkIHRvIHB1c2ggdG8uIgorI34gbXNnc3RyICJIYXIgaW50ZSBzdMOkbGx0IGluIG7DpWdvbiBkZXN0aW5hdGlvbiBhdHQgc8OkbmRhIHRpbGwuIgorCisjfiBtc2dpZCAiUmVmbG9nIGFjdGlvbiBtZXNzYWdlIHRvbyBsb25nOiAlLipzLi4uIgorI34gbXNnc3RyICJSZWZsb2ctaMOkbmRlbHNlbWVkZGVsYW5kZSBmw7ZyIGzDpW5ndDogJS4qcy4uLiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IGbDtnIgJXMiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgZXh0cmFjdCBhdXRob3IgZW1haWwgZnJvbSAlcyIKKyN+IG1zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgZsO2cmZhdHRhcmVucyBlLXBvc3RhZHJlc3MgZnLDpW4gJXMiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgZXh0cmFjdCBhdXRob3IgdGltZSBmcm9tICVzIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSBmw7ZyZmF0dGFydGlkIGZyw6VuICVzIgorCisjfiBtc2dpZCAiTm8gYXV0aG9yIGluZm9ybWF0aW9uIGZvdW5kIGluICVzIgorI34gbXNnc3RyICJIaXR0YWRlIGluZ2VuIGbDtnJmYXR0YXJpbmZvcm1hdGlvbiBpICVzIgorCisjfiBtc2dpZCAiY2hlcnJ5LXBpY2sgLS1mZiBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tc2lnbm9mZiIKKyN+IG1zZ3N0ciAiY2hlcnJ5LXBpY2sgLS1mZiBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC0tc2lnbm9mZiIKKworI34gbXNnaWQgImNoZXJyeS1waWNrIC0tZmYgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWNvbW1pdCIKKyN+IG1zZ3N0ciAiY2hlcnJ5LXBpY2sgLS1mZiBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC0tbm8tY29tbWl0IgorCisjfiBtc2dpZCAiY2hlcnJ5LXBpY2sgLS1mZiBjYW5ub3QgYmUgdXNlZCB3aXRoIC14IgorI34gbXNnc3RyICJjaGVycnktcGljayAtLWZmIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgLXgiCisKKyN+IG1zZ2lkICJjaGVycnktcGljayAtLWZmIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1lZGl0IgorI34gbXNnc3RyICJjaGVycnktcGljayAtLWZmIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgLS1lZGl0IgorCisjfiBtc2dpZCAiY29tbWl0dGVyIGluZm8gdG9vIGxvbmcuIgorI34gbXNnc3RyICJpbmNoZWNrYXJpbmZvcm1hdGlvbiBmw7ZyIGzDpW5nLiIKKworI34gbXNnaWQgIiIKICN+ICJcbiIKLSN+ICIlcyBmaW5ucyBpbnRlIgorI34gIiNcbiIKKyN+ICIjIFdyaXRlIGEgdGFnIG1lc3NhZ2VcbiIKKyN+ICIjXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICIjXG4iCisjfiAiIyBTa3JpdiBldHQgdGFnZ21lZGRlbGFuZGVcbiIKKyN+ICIjXG4iCiAKLSN+IG1zZ2lkICJBcHBsZSIKLSN+IG1zZ3N0ciAiw4RwcGxlIgotCi0jfiBtc2dpZCAiTm90IGNvbm5lY3RlZCB0byBhc3BlbGwiCi0jfiBtc2dzdHIgIkludGUgYW5zbHV0ZW4gdGlsbCBhc3BlbGwiCisjfiBtc2dpZCAic2lnbmluZyBrZXkgdmFsdWUgdG9vIGxvbmcgKCUuMTBzLi4uKSIKKyN+IG1zZ3N0ciAic2lnbmVyaW5nc255Y2tlbHbDpHJkZXQgZsO2ciBsw6VuZ3QgKCUuMTBzLi4uKSIKZGlmZiAtLWdpdCBhL3BvL3ZpLnBvIGIvcG8vdmkucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2MTdhMwotLS0gL2Rldi9udWxsCisrKyBiL3BvL3ZpLnBvCkBAIC0wLDAgKzEsOTYxMyBAQAorIyBWaWV0bmFtZXNlIHRyYW5zbGF0aW9uIGZvciBHSVQtQ09SRS4KKyMgQ29weXJpZ2h0IChDKSAyMDEyLCBUcuG6p24gTmfhu41jIFF1w6JuLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWNvcmUgcGFja2FnZS4KKyMgRmlyc3QgdHJhbnNsYXRlZCBieSBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPiwgMjAxMi4KKyMgTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eSA8cGNsb3Vkc0BnbWFpbC5jb20+LCAyMDEyLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LXYxLjguMC1yYzItNC1nNDJlNTVcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0xMC0xNiAwODozOCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMi0xMC0xNyAwODowOSswNzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFZpZXRuYW1lc2UgPHRyYW5zbGF0aW9uLXRlYW0tdmlAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiB2aVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPTE7XG4iCisiWC1Qb2VkaXQtU291cmNlQ2hhcnNldDogVVRGLThcbiIKKyJYLVBvZWRpdC1CYXNlcGF0aDogLi4vXG4iCisKKyM6IGFkdmljZS5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAiZ+G7o2kgw706ICUuKnNcbiIKKworIy4KKyMuICogTWVzc2FnZSB1c2VkIGJvdGggd2hlbiAnZ2l0IGNvbW1pdCcgZmFpbHMgYW5kIHdoZW4KKyMuICogb3RoZXIgY29tbWFuZHMgZG9pbmcgYSBtZXJnZSBkby4KKyMuCisjOiBhZHZpY2UuYzo3MAorbXNnaWQgIiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLFxuIgorImFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nIGFzXG4iCisiYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LFxuIgorIm9yIHVzZSAnZ2l0IGNvbW1pdCAtYScuIgorbXNnc3RyICIiCisiU+G7rWEgY2jDum5nIHRyb25nIGPDonkgbMOgbSB2aeG7h2MsXG4iCisidsOgIHNhdSDEkcOzIGTDuW5nIGzhu4duaCBgZ2l0IGFkZC9ybSA8dOG6rXAtdGluPidcbiIKKyJkw6BuaCByacOqbmcgY2hvIHZp4buHYyDEkcOhbmggZOG6pXUgY+G6p24gZ2nhuqNpIHF1eeG6v3QgdsOgIHThuqFvIGzhuqduIGNodXnhu4NuIGdpYW8sXG4iCisiaG/hurdjIGzDoCBkw7luZyBs4buHbmggYGdpdCBjb21taXQgLWEnLiIKKworIzogYXJjaGl2ZS5jOjEwCittc2dpZCAiZ2l0IGFyY2hpdmUgW29wdGlvbnNdIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFtjw6FjLXTDuXktY2jhu41uXSA8dHJlZS1pc2g+IFs8xJHGsOG7nW5nLWThuqtuPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxMQorbXNnaWQgImdpdCBhcmNoaXZlIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MTIKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFtvcHRpb25zXSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPGtobz4gWy0tZXhlYyA8bOG7h25oPl0gW2PDoWMtdMO5eS1jaOG7jW5dIDx0cmVlLWlzaD4gWzzEkcaw4budbmctIgorImThuqtuPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxMworbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxraG8+IFstLWV4ZWMgPGzhu4duaD5dIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjMyMgorbXNnaWQgImZtdCIKK21zZ3N0ciAiZm10IgorCisjOiBhcmNoaXZlLmM6MzIyCittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgIsSR4buLbmggZOG6oW5nIGzGsHUgdHLhu68iCisKKyM6IGFyY2hpdmUuYzozMjMgYnVpbHRpbi9sb2cuYzoxMDc5Cittc2dpZCAicHJlZml4IgorbXNnc3RyICJ0aeG7gW4gdOG7kSIKKworIzogYXJjaGl2ZS5jOjMyNAorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIm7hu5FpIHRow6ptIHRp4buBbiB04buRIHbDoG8gdOG7q25nIMSRxrDhu51uZyBk4bqrbiB04bqtcCB0aW4gdHJvbmcga2hvIGzGsHUiCisKKyM6IGFyY2hpdmUuYzozMjUgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9ibGFtZS5jOjIzODkKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzkwIGJ1aWx0aW4vY29uZmlnLmM6NTYgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0NCBidWlsdGluL2dyZXAuYzo4MDEgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjc3CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDk0IGJ1aWx0aW4vbHMtZmlsZXMuYzo0OTcgYnVpbHRpbi9ub3Rlcy5jOjU0MAorIzogYnVpbHRpbi9ub3Rlcy5jOjY5NyBidWlsdGluL3JlYWQtdHJlZS5jOjEwNyBwYXJzZS1vcHRpb25zLmg6MTQ5Cittc2dpZCAiZmlsZSIKK21zZ3N0ciAidOG6rXAtdGluIgorCisjOiBhcmNoaXZlLmM6MzI2IGJ1aWx0aW4vYXJjaGl2ZS5jOjkyCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJnaGkga2hvIGzGsHUgdsOgbyB04bqtcCB0aW4gbsOgeSIKKworIzogYXJjaGl2ZS5jOjMyOAorbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIsSR4buNYyAuZ2l0YXR0cmlidXRlcyB0cm9uZyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgorCisjOiBhcmNoaXZlLmM6MzI5Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6FjIHThuq1wIHRpbiDEkcaw4bujYyBsxrB1IHRy4buvIHbDoG8gc3RkZXJyICjEkeG6p3UgcmEgbOG7l2kgY2h14bqpbikiCisKKyM6IGFyY2hpdmUuYzozMzAKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICJjaOG7iSBsxrB1IgorCisjOiBhcmNoaXZlLmM6MzMxCittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICJuw6luIG5oYW5oIGjGoW4iCisKKyM6IGFyY2hpdmUuYzozMzkKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgIm7DqW4gbmjhu48gaMahbiIKKworIzogYXJjaGl2ZS5jOjM0MgorbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6FjIGtp4buDdSBuw6kgxJHGsOG7o2MgaOG7lyB0cuG7oyIKKworIzogYXJjaGl2ZS5jOjM0NCBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2Nsb25lLmM6ODUKK21zZ2lkICJyZXBvIgorbXNnc3RyICJraG8iCisKKyM6IGFyY2hpdmUuYzozNDUgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAibmjhuq1uIGtobyBsxrB1IHThu6sga2hvIGNo4bupYSA8a2hvPiB0csOqbiBtw6F5IGNo4bunIgorCisjOiBhcmNoaXZlLmM6MzQ2IGJ1aWx0aW4vYXJjaGl2ZS5jOjk1IGJ1aWx0aW4vbm90ZXMuYzo2MTkKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJs4buHbmgiCisKKyM6IGFyY2hpdmUuYzozNDcgYnVpbHRpbi9hcmNoaXZlLmM6OTYKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDEkeG6v24gbOG7h25oIGdpdC11cGxvYWQtcGFjayB0csOqbiBtw6F5IGNo4bunIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICJgJXMnIGtow7RuZyBnaeG7kW5nIG5oxrAgdOG6rXAgdGluIHYyIGJ1bmRsZSAoY+G7pW0pIgorCisjOiBidW5kbGUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgInBo4bqnbiDEkeG6p3UgKGhlYWRlcikga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW46ICVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6ODkgYnVpbHRpbi9jb21taXQuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gYCVzJyIKKworIzogYnVuZGxlLmM6MTQwCittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCittc2dzdHIgIktow7MgY2jhu6lhIHRoaeG6v3Ugbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIGPhuqduIHRyxrDhu5tjIGjhur90IG7DoHk6IgorCisjOiBidW5kbGUuYzoxNjQgc2VxdWVuY2VyLmM6NTYyIHNlcXVlbmNlci5jOjk5NCBidWlsdGluL2xvZy5jOjI5MAorIzogYnVpbHRpbi9sb2cuYzo3MjcgYnVpbHRpbi9sb2cuYzoxMzEzIGJ1aWx0aW4vbG9nLmM6MTUyOSBidWlsdGluL21lcmdlLmM6MzQ3CisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTgxCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIkPDoGkgxJHhurd0IHZp4buHYyBkaSBjaHV54buDbiBxdWEgY8OhYyDEkWnhu4NtIHjDqXQgbOG6oWkgZ+G6t3AgbOG7l2kiCisKKyM6IGJ1bmRsZS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyAlZCByZWZzIgorbXNnc3RyWzBdICJCdW5kbGUgY2jhu6lhICVkIHRoYW0gY2hp4bq/dSAocmVmcykiCittc2dzdHJbMV0gIkJ1bmRsZSBjaOG7qWEgJWQgdGhhbSBjaGnhur91IChyZWZzKSIKKworIzogYnVuZGxlLmM6MTkyCittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIkzhu4duaCBidW5kbGUgZ2hpIGzhuqFpIHRvw6BuIGLhu5kgbOG7i2NoIHPhu60uIgorCisjOiBidW5kbGUuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzIgorbXNnc3RyWzBdICJM4buHbmggYnVuZGxlIHnDqnUgY+G6p3UgdGhhbSBjaGnhur91IChyZWZzKSBuw6B5IgorbXNnc3RyWzFdICJM4buHbmggYnVuZGxlIHnDqnUgY+G6p3UgJWQgdGhhbSBjaGnhur91IChyZWZzKSBuw6B5IgorCisjOiBidW5kbGUuYzoyOTQKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJyZXYtbGlzdCBi4buLIGNo4bq/dCIKKworIzogYnVuZGxlLmM6MzAwIGJ1aWx0aW4vbG9nLmM6MTIwOSBidWlsdGluL3Nob3J0bG9nLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgIsSR4buRaSBz4buRIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uOiAlcyIKKworIzogYnVuZGxlLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJ0aGFtIGNoaeG6v3UgYCVzJyBi4buLIGxv4bqhaSB0cuG7qyBi4bufaSBjw6FjIHTDuXkgY2jhu41uIHJldi1saXN0IgorCisjOiBidW5kbGUuYzozODAKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAiVOG7qyBjaOG7kWkgdOG6oW8gbeG7mXQgYnVuZGxlIHRy4buRbmcgcuG7l25nLiIKKworIzogYnVuZGxlLmM6Mzk4Cittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHPhuqNuIHNpbmggcGFjay1vYmplY3RzIgorCisjOiBidW5kbGUuYzo0MTYKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAicGFjay1vYmplY3RzIMSRw6MgY2jhur90IgorCisjOiBidW5kbGUuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gYCVzJyIKKworIzogYnVuZGxlLmM6NDQxCittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICJpbmRleC1wYWNrIMSRw6MgY2jhur90IgorCisjOiBjb21taXQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCAlcyIKKworIzogY29tbWl0LmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbOG6p24gY29tbWl0ISIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJj4bqhbiBi4buZIG5o4bubIgorCisjOiBjb25uZWN0ZWQuYzozOQorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIktow7RuZyB0aOG7gyBjaOG6oXkgYGdpdCByZXYtbGlzdCciCisKKyM6IGNvbm5lY3RlZC5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgdsOgbyByZXYtbGlzdDogJXMiCisKKyM6IGNvbm5lY3RlZC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluOiAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSRw7NuZyDEkeG6p3UgdsOgbyBjaHXhuqluIHN0ZGluIGPhu6dhIHJldi1saXN0OiAlcyIKKworIzogZGF0ZS5jOjk1Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAidHJvbmcgdMawxqFuZyBsYWkiCisKKyM6IGRhdGUuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJWx1IGdpw6J5IHRyxrDhu5tjIgorbXNnc3RyWzFdICIlbHUgZ2nDonkgdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiJWx1IHBow7p0IHRyxrDhu5tjIgorbXNnc3RyWzFdICIlbHUgcGjDunQgdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IGhvdXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgaG91cnMgYWdvIgorbXNnc3RyWzBdICIlbHUgZ2nhu50gdHLGsOG7m2MiCittc2dzdHJbMV0gIiVsdSBnaeG7nSB0csaw4bubYyIKKworIzogZGF0ZS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGRheXMgYWdvIgorbXNnc3RyWzBdICIlbHUgbmfDoHkgdHLGsOG7m2MiCittc2dzdHJbMV0gIiVsdSBuZ8OgeSB0csaw4bubYyIKKworIzogZGF0ZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiVsdSB0deG6p24gdHLGsOG7m2MiCittc2dzdHJbMV0gIiVsdSB0deG6p24gdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVsdSB0aMOhbmcgdHLGsOG7m2MiCittc2dzdHJbMV0gIiVsdSB0aMOhbmcgdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIiCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyIKK21zZ3N0clswXSAiJWx1IG7Eg20iCittc2dzdHJbMV0gIiVsdSBuxINtIgorCisjOiBkYXRlLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCAlbHUgdGjDoW5nIHRyxrDhu5tjIgorbXNnc3RyWzFdICIlcywgJWx1IHRow6FuZyB0csaw4bubYyIKKworIzogZGF0ZS5jOjE1NCBkYXRlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIGFnbyIKK21zZ3N0clswXSAiJWx1IG7Eg20gdHLGsOG7m2MiCittc2dzdHJbMV0gIiVsdSBuxINtIHRyxrDhu5tjIgorCisjOiBkaWZmLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclLipzJ1xuIgorbXNnc3RyICIgIEfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCBkaXJzdGF0IGPhuq90IGLhu48gcGjhuqduIHRyxINtIGAlLipzJ1xuIgorCisjOiBkaWZmLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJS4qcydcbiIKK21zZ3N0ciAiICBLaMO0bmcgaGnhu4N1IMSR4buRaSBz4buRIGRpcnN0YXQgYCUuKnMnXG4iCisKKyM6IGRpZmYuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJUw6xtIHRo4bqleSBjw6FjIGzhu5dpIHRyb25nIGJp4bq/biBj4bqldSBow6xuaCAnZGlmZi5kaXJzdGF0JzpcbiIKKyIlcyIKKworIzogZGlmZi5jOjM0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCDEkeG7kWkgc+G7kSB0w7l5IGNo4buNbiAtLWRpcnN0YXQvLVg6XG4iCisiJXMiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo1OQorbXNnaWQgImNvdWxkIG5vdCBydW4gZ3BnLiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNo4bqheSBncGcuIgorCisjOiBncGctaW50ZXJmYWNlLmM6NzEKK21zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCittc2dzdHIgImdwZyDEkcOjIGtow7RuZyDEkeG7k25nIMO9IGThu68gbGnhu4d1IgorCisjOiBncGctaW50ZXJmYWNlLmM6ODIKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyBn4bq3cCBs4buXaSBraGkga8O9IGThu68gbGnhu4d1IgorCisjOiBncmVwLmM6MTQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiYCVzJzoga2jDtG5nIHRo4buDIMSR4buNYyAlcyIKKworIzogZ3JlcC5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgImAlcyc6ICVzIgorCisjOiBncmVwLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkICVzIgorbXNnc3RyICJgJXMnOiDEkeG7jWMgbmfhuq9uICVzIgorCisjOiBoZWxwLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiY8OhYyBs4buHbmggZ2l0IHPhurVuIHPDoG5nIMSR4buDIGTDuW5nIHRyb25nIGAlcyciCisKKyM6IGhlbHAuYzoyMTkKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgImPDoWMgbOG7h25oIGdpdCBz4bq1biBzw6BuZyDEkeG7gyBkw7luZyB04burIG3hu5l0IG7GoWkga2jDoWMgdHJvbmcgJFBBVEggY+G7p2EgYuG6oW4iCisKKyM6IGhlbHAuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisiYCVzJyB0csO0bmcgbmjGsCBsw6AgbeG7mXQgbOG7h25oIGdpdCwgbmjGsG5nIGNow7puZyB0w7RpIGtow7RuZ1xuIgorInRo4buDIHRo4buxYyB0aGkgbsOzLiBDw7MgbOG6vSBsw6AgbOG7h25oIGdpdC0lcyDEkcOjIGLhu4sgaOG7j25nPyIKKworIzogaGVscC5jOjMzMgorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICLhu5BpIGNow6AuIEjhu4cgdGjhu5FuZyBj4bunYSBi4bqhbiBiw6FvIHLhurFuZyBjaOG6s25nIGPDsyBs4buHbmggR2l0IG7DoG8gY+G6oy4iCisKKyM6IGhlbHAuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC5cbiIKKyJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcyciCittc2dzdHIgIiIKKyJD4bqiTkggQsOBTzogQuG6oW4gxJHDoyBn4buNaSBs4buHbmggR2l0IGPDsyB0w6puIGAlcycsIG3DoCBuw7MgbOG6oWkga2jDtG5nIGPDsyBz4bq1bi5cbiIKKyJHaeG6oyDEkeG7i25oIHLhurFuZyDDvSBi4bqhbiBsw6AgYCVzJyIKKworIzogaGVscC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iCittc2dzdHIgInRyb25nICUwLjFmIGdpw6J5IG3hu5l0IGPDoWNoIHThu7EgxJHhu5luZy4uLiIKKworIzogaGVscC5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6IGAlcycga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbOG7h25oIGPhu6dhIGdpdC4gWGVtIGBnaXQgLS1oZWxwJy4iCisKKyM6IGhlbHAuYzozNzAKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyJDw7MgcGjhuqNpIMO9IGLhuqFuIGzDoCBjw6FpIG7DoHkga2jDtG5nPyIKK21zZ3N0clsxXSAiIgorIlxuIgorIkPDsyBwaOG6o2kgw70gYuG6oW4gbMOgIG3hu5l0IHRyb25nIHPhu5Egbmjhu69uZyBjw6FpIG7DoHkga2jDtG5nPyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIoY29tbWl0IHNhaSlcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZm9fY2FjaGUgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgImFkZGluZm9fY2FjaGUgZ+G6t3AgbOG7l2kgxJHhu5FpIHbhu5tpIMSRxrDhu51uZyBk4bqrbiBgJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNjgKK21zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHjDonkgZOG7sW5nIGPDonkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6oW8gxJHGsOG7nW5nIGThuqtuIGAlcyclcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgIkfhu6EgYuG7jyAlcyDEkeG7gyB04bqhbyBjaOG7lyAocm9vbSkgY2hvIHRoxrAgbeG7pWMgY29uXG4iCisKKyMuIHNvbWV0aGluZyBlbHNlIGV4aXN0cworIy4gLi4gYnV0IG5vdCBzb21lIG90aGVyIGVycm9yICh3aG8gcmVhbGx5IGNhcmVzIHdoYXQ/KQorIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njk3IG1lcmdlLXJlY3Vyc2l2ZS5jOjcxOAorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogY8OzIGzhur0gbMOgIG3hu5l0IHh1bmcgxJHhu5l0IEQvRj8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgInThu6sgY2jhu5FpIMSRw7NuZyB04bqtcCB0aW4ga2jDtG5nIMSRxrDhu6NjIHRoZW8gduG6v3QgdOG6oWkgYCVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIMSR4buRaSB0xrDhu6NuZyAlcyBgJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIGJsb2IgxJHGsOG7o2MgbW9uZyDEkeG7o2kgY2hvICVzIGAlcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc3MyBidWlsdGluL2Nsb25lLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBt4bufIGAlcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6oW8gbGnDqm4ga+G6v3QgdMaw4bujbmcgdHLGsG5nIChzeW1saW5rKSBgJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSBwaOG6o2kgbMOgbSBnw6wgduG7m2kgJTA2byAlcyBgJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MjIKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRo4buxYyBoaeG7h24gdHLhu5luIG7hu5lpIGLhu5kiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjDqm0gJXMgdsOgbyBjxqEgc+G7nyBk4buvIGxp4buHdSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTQyCittc2dpZCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgaW4gdGhlIHRyZWUiCittc2dzdHIgImtp4buDdSDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgdHJvbmcgY8OieSAodHJlZSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMjEgbWVyZ2UtcmVjdXJzaXZlLmM6MTAzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQgKCVzL3jDs2EpOiAlcyBi4buLIHjDs2EgdHJvbmcgJXMgdsOgICVzIHRyb25nICVzLiBQaGnDqm4gYuG6o24gJXMgY+G7p2EgJXMgIgorImPDsm4gbOG6oWkgdHJvbmcgY8OieSAodHJlZSkuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDI3IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICglcy94w7NhKTogJXMgYuG7iyB4w7NhIHRyb25nICVzIHbDoCAlcyB0cm9uZyAlcy4gUGhpw6puIGLhuqNuICVzIGPhu6dhICVzICIKKyJjw7JuIGzhuqFpIHRyb25nIGPDonkgKHRyZWUpIHThuqFpICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA4MQorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAixJHhu5VpIHTDqm4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwODEKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICLEkcOjIMSR4buVaSB0w6puIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyBsw6AgbeG7mXQgdGjGsCBt4bulYyB0cm9uZyAlcyB0aGF5IHbDoG8gxJHDsyB0aMOqbSB2w6BvIG5oxrAgbMOgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoxJHhu5VpLXTDqm4vxJHhu5VpLXTDqm4pOiDEkOG7lWkgdMOqbiBcIiVzXCItPlwiJXNcIiB0cm9uZyBuaMOhbmggXCIlc1wiIMSR4buVaSAiCisidMOqbiBcIiVzXCItPlwiJXNcIiB0cm9uZyBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE2NAorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIChj4bqnbiBnaeG6o2kgcXV54bq/dCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQgKMSR4buVaS10w6puL8SR4buVaS10w6puKTogxJDhu5VpIHTDqm4gJXMtPiVzIHRyb25nICVzLiDEkOG7lWkgdMOqbiAlcy0+JXMgdHJvbmcgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiCittc2dzdHIgIsSQYW5nIMSR4buVaSB0w6puICVzIHRow6BuaCAlcyB0aGF5IHbDrCAlcyB0aMOgbmggJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAlcyBhZGRlZCBpbiAlcyIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICjEkeG7lWktdMOqbi90aMOqbSk6IMSQ4buVaSB0w6puICVzLT4lcyB0cm9uZyAlcy4gJXMgxJHGsOG7o2MgdGjDqm0gdsOgbyB0cm9uZyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorbXNnc3RyICJUaMOqbSBow7JhIHRy4buZbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ2MiBtZXJnZS1yZWN1cnNpdmUuYzoxNjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJUaGF5IHbDoG8gxJHDsyB0aMOqbSB2w6BvICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyDEkeG7kWkgdMaw4bujbmcgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyAlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBibG9iIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTY0Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICJz4butYSDEkeG7lWkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NjQKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAixJHDoyBz4butYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgIm7hu5lpIGR1bmciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODEKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICJ0aMOqbS90aMOqbSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIsSQw6MgYuG7jyBxdWEgJXMgKMSRw6MgY8OzIHPhurVuIGzhuqduIGjDsmEgdHLhu5luIG7DoHkpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiVOG7sS3EkeG7mW5nLWjDsmEtdHLhu5luICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjMzIGdpdC1zdWJtb2R1bGUuc2g6ODY5Cittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJtw7QtxJF1bi1jb24iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIlhVTkcgxJDhu5hUICglcyk6IFh1bmcgxJHhu5l0IGjDsmEgdHLhu5luIHRyb25nICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICLEkGFuZyB4w7NhICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzQ5Cittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgInThuq1wLXRpbi90aMawLW3hu6VjIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzU1Cittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgInRoxrAtbeG7pWMvdOG6rXAgdGluIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gQWRkaW5nICVzIGFzICVzIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQgKCVzKTog4bueIMSRw6J5IGtow7RuZyBjw7MgdGjGsCBt4bulYyBuw6BvIGPDsyB0w6puICVzIHRyb25nICVzLiBUaMOqbSAlcyBuaMawIGzDoCAiCisiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICJUaMOqbSBcIiVzXCIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3ODcKK21zZ2lkICJGYXRhbCBtZXJnZSBmYWlsdXJlLCBzaG91bGRuJ3QgaGFwcGVuLiIKK21zZ3N0ciAiVmnhu4djIGjDsmEgdHLhu5luIGjhu49uZyBuZ2hpw6ptIHRy4buNbmcsIGtow7RuZyBuw6puIMSR4buDIHjhuqN5IHJhLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTgwNgorbXNnaWQgIkFscmVhZHkgdXAtdG8tZGF0ZSEiCittc2dzdHIgIsSQw6MgY+G6rXAgbmjhuq10IHLhu5NpISIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgImjDsmEgdHLhu5luIGPDonkgKHRyZWUpICVzIHbDoCAlcyBn4bq3cCBs4buXaSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnByb2Nlc3NlZCBwYXRoPz8/ICVzIgorbXNnc3RyICLEkMaw4budbmcgZOG6q24gY2jGsGEgxJHGsOG7o2MgeOG7rSBsw70/Pz8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4OTAKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAixJBhbmcgdHLhu5luOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkwMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAidMOsbSB0aOG6pXkgJXUgdOG7lSB0acOqbiBjaHVuZzoiCittc2dzdHJbMV0gInTDrG0gdGjhuqV5ICV1IHThu5UgdGnDqm4gY2h1bmc6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTQwCittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICJow7JhIHRy4buZbiBraMO0bmcgdHLhuqMgduG7gSBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIG7DoG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggxJHhu5FpIHTGsOG7o25nIGAlcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMDkgYnVpbHRpbi9tZXJnZS5jOjY5NgorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NDk0Cittc2dpZCAiLi4uIgorbXNnc3RyICIuLi4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICJjw6FjaCBkw7luZzogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbgorIzogcGFyc2Utb3B0aW9ucy5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiAgICAgaG/hurdjOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAlcyIKKworIzogcmVtb3RlLmM6MTYzMgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJOaMOhbmggY+G7p2EgYuG6oW4gbMOgIMSR4bqndSBj4bunYSBgJXMnIGLhu59pICVkIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkuXG4iCittc2dzdHJbMV0gIk5ow6FuaCBj4bunYSBi4bqhbiBsw6AgxJHhuqd1IGPhu6dhIGAlcycgYuG7n2kgJWQgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KS5cbiIKKworIzogcmVtb3RlLmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCisiTmjDoW5oIGPhu6dhIGLhuqFuIHRow6wg4bufIMSR4bqxbmcgc2F1IGAlcycgYuG7n2kgJWQgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSwgdsOgIGPDsyB0aOG7gyAiCisixJHGsOG7o2MgZmFzdC1mb3J3YXJkLlxuIgorbXNnc3RyWzFdICIiCisiTmjDoW5oIGPhu6dhIGLhuqFuIHRow6wg4bufIMSR4bqxbmcgc2F1IGAlcycgYuG7n2kgJWQgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSwgdsOgIGPDsyB0aOG7gyAiCisixJHGsOG7o2MgZmFzdC1mb3J3YXJkLlxuIgorCisjOiByZW1vdGUuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorIk5ow6FuaCBj4bunYSBi4bqhbiB2w6AgYCVzJyBi4buLIHBow6JuIGvhu7MsXG4iCisidsOgIGPDsyAlZCB2w6AgJWQgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBraMOhYyBuaGF1IGNobyB04burbmcgY8OhaSxcbiIKKyJ0xrDGoW5nIOG7qW5nIHbhu5tpIG3hu5dpIGzhuqduLlxuIgorbXNnc3RyWzFdICIiCisiWW91ciBicmFuY2ggYW5kIGAlcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMyBidWlsdGluL21lcmdlLmM6ODY0IGJ1aWx0aW4vbWVyZ2UuYzo5NzcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDg3IGJ1aWx0aW4vbWVyZ2UuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIktow7RuZyB0aOG7gyBt4bufICVzJyDEkeG7gyBnaGkiCisKKyM6IHNlcXVlbmNlci5jOjEyNSBidWlsdGluL21lcmdlLmM6MzMzIGJ1aWx0aW4vbWVyZ2UuYzo4NjcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDg5IGJ1aWx0aW4vbWVyZ2UuYzoxMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIHbDoG8gYCVzJyIKKworIzogc2VxdWVuY2VyLmM6MTQ2Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyJzYXUga2hpIGdp4bqjaSBxdXnhur90IGPDoWMgeHVuZyDEkeG7mXQsIMSRw6FuaCBk4bqldSDEkcaw4budbmcgZOG6q24gxJHDoyBz4butYVxuIgorInbhu5tpIGzhu4duaCBgZ2l0IGFkZCA8xJHGsOG7nW5nX2ThuqtuPicgaG/hurdjIGBnaXQgcm0gPMSRxrDhu51uZ19k4bqrbj4nIgorCisjOiBzZXF1ZW5jZXIuYzoxNDkKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorInNhdSBraGkgZ2nhuqNpIHF1eeG6v3QgY8OhYyB4dW5nIMSR4buZdCwgxJHDoW5oIGThuqV1IMSRxrDhu51uZyBk4bqrbiDEkcOjIHPhu61hXG4iCisiduG7m2kgbOG7h25oIGBnaXQgYWRkIDzEkcaw4budbmdfZOG6q24+JyBob+G6t2MgYGdpdCBybSA8xJHGsOG7nW5nX2ThuqtuPidcbiIKKyJ2w6AgY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBr4bq/dCBxdeG6oyBi4bqxbmcgbOG7h25oIGBnaXQgY29tbWl0JyIKKworIzogc2VxdWVuY2VyLmM6MTYyIHNlcXVlbmNlci5jOjc3MCBzZXF1ZW5jZXIuYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIHbDoG8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcyIKK21zZ3N0ciAiTOG7l2kgYmFvIGLhu41jICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxODAKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJDw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4gY8OzIHRo4buDIGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oIGNoZXJyeS1waWNrLiIKKworIzogc2VxdWVuY2VyLmM6MTgyCittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHJldmVydC4iCittc2dzdHIgIkPDoWMgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSBj4bunYSBi4bqhbiBjw7MgdGjhu4MgYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggcmV2ZXJ0LiIKKworIzogc2VxdWVuY2VyLmM6MTg1Cittc2dpZCAiQ29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICJDaHV54buDbiBnaWFvIChjb21taXQpIGPDoWMgdGhheSDEkeG7lWkgY+G7p2EgYuG6oW4gaGF5IHN0YXNoIGNow7puZyDEkeG7gyB44butIGzDvS4iCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiIG9yICJjaGVycnktcGljayIKKyM6IHNlcXVlbmNlci5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczogS2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMgbeG7m2kiCisKKyM6IHNlcXVlbmNlci5jOjI2NgorbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0XG4iCittc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgY29tbWl0IChs4bqnbiBjaHV54buDbiBnaWFvKSBIRUFEXG4iCisKKyM6IHNlcXVlbmNlci5jOjI4NworbXNnaWQgIlVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IGPDonkgYuG7mSBuaOG7myDEkeG7h21cbiIKKworIzogc2VxdWVuY2VyLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGNvbW1pdCAobOG6p24gY2h1eeG7g24gZ2lhbykgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjb21taXQgKGzhuqduIGNodXnhu4NuIGdpYW8pIGNoYSBt4bq5ICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjQwMworbXNnaWQgIllvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgIlThuq1wIHRpbiBsxrB1IG3hu6VjIGzhu6VjIGPhu6dhIGLhuqFuIGtow7RuZyDEkcaw4bujYyBow7JhIHRy4buZbi4iCisKKyM6IHNlcXVlbmNlci5jOjQwNgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQiCittc2dzdHIgIkLhuqFuIGtow7RuZyBjw7MgSEVBRCBuw6BvIGjhu6NwIGzhu4ciCisKKyM6IHNlcXVlbmNlci5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgIiIKKyJM4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpICVzIGzDoCBt4buZdCBs4bqnbiBow7JhIHRy4buZbiBuaMawbmcga2jDtG5nIMSRxrBhIHJhIHTDuXkgY2jhu41uIC0iCisibS4iCisKKyM6IHNlcXVlbmNlci5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgJXMga2jDtG5nIGPDsyBjaGEgbeG6uSAlZCIKKworIzogc2VxdWVuY2VyLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCittc2dzdHIgIiIKKyJMdeG7k25nIGNow61uaCDEkcaw4bujYyBjaOG7iSByYSBuaMawbmcgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSAlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCAiCisibOG6p24gaMOyYSB0cuG7mW4uIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKyMuICJjaGVycnktcGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExCisjOiBzZXF1ZW5jZXIuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlczoga2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGzhuqduIGNodXnhu4NuIGdpYW8gbeG6uSBj4bunYSAlcyIKKworIzogc2VxdWVuY2VyLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgdGjDtG5nIMSRaeG7h3AgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBjaG8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcmV2ZXJ0ICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgYXBwbHkgKMOhcCBk4bulbmcgbWnhur9uZyB2w6EpICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzo1NjUKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSB0cuG7kW5nIHLhu5duZyDEkeG6t3QgbMOgIGjhu6NwIHF1eSBjw6FjaCIKKworIzogc2VxdWVuY2VyLmM6NTczCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IGfhurdwIGzhu5dpIMSR4buNYyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IHNlcXVlbmNlci5jOjU3OAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBn4bq3cCBs4buXaSBraGkgbMOgbSB0xrDGoWkgbeG7m2kgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBzZXF1ZW5jZXIuYzo2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICVzIGR1cmluZyBhICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgJXMgdHJvbmcga2hpICVzIgorCisjOiBzZXF1ZW5jZXIuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorbXNnc3RyICJLaMO0bmcgcGjDom4gdMOtY2ggxJHGsOG7o2MgZMOybmcgJWQuIgorCisjOiBzZXF1ZW5jZXIuYzo2NjMKK21zZ2lkICJObyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIktow7RuZyBjw7MgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBuw6BvIMSRxrDhu6NjIHBow6JuIHTDrWNoLiIKKworIzogc2VxdWVuY2VyLmM6Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyAlcyIKKworIzogc2VxdWVuY2VyLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJVbnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJXMiCittc2dzdHIgIkLhuqNuZyBjaOG7iSB0aOG7iyBraMO0bmcgdGjhu4MgZMO5bmcgxJHGsOG7o2M6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICJLaMOzYSBraMO0bmcgxJHDum5nOiAlcyIKKworIzogc2VxdWVuY2VyLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiR2nDoSB0cuG7iyBraMO0bmcgaOG7o3AgbOG7hyAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJXMiCittc2dzdHIgIkLhuqNuZyB0w7l5IGNo4buNbiBk4buLIGjDrG5oOiAlcyIKKworIzogc2VxdWVuY2VyLmM6NzUxCittc2dpZCAiYSBjaGVycnktcGljayBvciByZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAibeG7mXQgdGhhbyB0w6FjIGNoZXJyeS1waWNrIGhv4bq3YyByZXZlcnQgxJFhbmcgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiIKKworIzogc2VxdWVuY2VyLmM6NzUyCittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKK21zZ3N0ciAiaMOjeSB0aOG7rSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyB0aMawIG3hu6VjIHjhur9wIGTDo3kgJXMiCisKKyM6IHNlcXVlbmNlci5jOjc3MiBzZXF1ZW5jZXIuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorbXNnc3RyICJM4buXaSBiYW8gYuG7jWMgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo3OTEgc2VxdWVuY2VyLmM6OTI1Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJraMO0bmcgY2hlcnJ5LXBpY2sgaGF5IHJldmVydCB0cm9uZyB0aeG6v24gdHLDrG5oIgorCisjOiBzZXF1ZW5jZXIuYzo3OTMKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjc5NQorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgaOG7p3kgYuG7jyB04burIG3hu5l0IG5ow6FuaCBtw6AgbsOzIGPDsm4gY2jGsGEgxJHGsOG7o2MgdOG6oW8gcmEiCisKKyM6IHNlcXVlbmNlci5jOjgxNyBidWlsdGluL2FwcGx5LmM6NDAwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjgyMQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgImvhur90IHRow7pjIHThuq1wIHRpbiDEkeG7mXQgeHXhuqV0IgorCisjOiBzZXF1ZW5jZXIuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICJ04bqtcCB0aW4gSEVBRCAncHJlLWNoZXJyeS1waWNrJyDEkcOjIGzGsHUgYCVzJyBi4buLIGjhu49uZyIKKworIzogc2VxdWVuY2VyLmM6ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu4tuaCBk4bqhbmcgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzoxMDEyCittc2dpZCAiQ2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcmV2ZXJ0IG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkga2jhu59pIHThuqFvIgorCisjOiBzZXF1ZW5jZXIuYzoxMDEzCittc2dpZCAiQ2FuJ3QgY2hlcnJ5LXBpY2sgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2hlcnJ5LXBpY2sgdsOgbyBt4buZdCDEkeG6p3UgKGhlYWQpIHRy4buRbmcgcuG7l25nIgorCisjOiBzaGExX25hbWUuYzoxMDQ0Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCBraMO0bmcgY2jhu4kgxJHhur9uIG3hu5l0IG5ow6FuaCBuw6BvIGPhuqMiCisKKyM6IHNoYTFfbmFtZS5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIktow7RuZyBjw7MgbmjDoW5oIG7DoG8gbmjGsCB0aOG6vzogYCVzJyIKKworIzogc2hhMV9uYW1lLmM6MTA0OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aMaw4bujbmcgbmd14buTbiAodXBzdHJlYW0pIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGNobyBuaMOhbmggYCVzJyIKKworIzogc2hhMV9uYW1lLmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorIk5ow6FuaCB0aMaw4bujbmcgbmd14buTbiAodXBzdHJlYW0pIGAlcycga2jDtG5nIMSRxrDhu6NjIGzGsHUgbOG6oWkgbmjGsCBsw6AgbeG7mXQgbmjDoW5oICIKKyIncmVtb3RlLXRyYWNraW5nJyIKKworIzogd3JhcHBlci5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdHJ1eSBj4bqtcCBgJXMnOiAlcyIKKworIzogd3JhcHBlci5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCBjdXJyZW50IHVzZXIgaW4gdGhlIHBhc3N3ZCBmaWxlOiAlcyIKK21zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IG5nxrDhu51pIGTDuW5nIGhp4buHbiB04bqhaSB0cm9uZyB04bqtcCB0aW4gcGFzc3dkOiAlcyIKKworIzogd3JhcHBlci5jOjQyNworbXNnaWQgIm5vIHN1Y2ggdXNlciIKK21zZ3N0ciAia2jDtG5nIGPDsyBuZ8aw4budaSBkw7luZyBuaMawIHbhuq15IgorCisjOiB3dC1zdGF0dXMuYzoxNDAKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgIk5o4buvbmcgxJHGsOG7nW5nIGThuqtuIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luOiIKKworIzogd3Qtc3RhdHVzLmM6MTY3IHd0LXN0YXR1cy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IHJlc2V0ICVzIDx04bqtcC10aW4+Li4uXCIgxJHhu4MgYuG7jyBt4buZdCBzdGFnZSAodHLhuqFuZyB0aMOhaSkpIgorCisjOiB3dC1zdGF0dXMuYzoxNjkgd3Qtc3RhdHVzLmM6MTk2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBybSAtLWNhY2hlZCA8dOG6rXAtdGluPi4uLlwiIMSR4buDIGLhu48gdHLhuqFuZyB0aMOhaSAoc3RhZ2UpKSIKKworIzogd3Qtc3RhdHVzLmM6MTczCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBhZGQgPHThuq1wLXRpbj4uLi5cIiDEkeG7gyDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGdp4bqjaSBxdXnhur90KSIKKworIzogd3Qtc3RhdHVzLmM6MTc1IHd0LXN0YXR1cy5jOjE3OQorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0IGFkZC9ybSA8dOG6rXAtdGluPi4uLlwiIG5oxrAgbMOgIG3hu5l0IGPDoWNoICB0aMOtY2ggaOG7o3AgxJHhu4MgxJHDoW5oIGThuqV1ICIKKyJsw6AgY+G6p24gxJHGsOG7o2MgZ2nhuqNpIHF1eeG6v3QpIgorCisjOiB3dC1zdGF0dXMuYzoxNzcKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgcm0gPHThuq1wLXRpbj4uLi5cIiDEkeG7gyDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGdp4bqjaSBxdXnhur90KSIKKworIzogd3Qtc3RhdHVzLmM6MTg4Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJOaOG7r25nIHRoYXkgxJHhu5VpIHPhur0gxJHGsOG7o2MgY2h1eeG7g24gZ2lhbzoiCisKKyM6IHd0LXN0YXR1cy5jOjIwNgorbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAiIgorIkPDoWMgdGhheSDEkeG7lWkga2jDtG5nIMSRxrDhu6NjIMSR4bq3dCB0cuG6oW5nIHRow6FpIChzdGFnZSkgY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCk6IgorCisjOiB3dC1zdGF0dXMuYzoyMTAKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0IGFkZCA8dOG6rXAtdGluPi4uLlwiIMSR4buDIGPhuq1wIG5o4bqtdCBuaOG7r25nIGfDrCBj4bqnbiBjaHV54buDbiBnaWFvICIKKyIoY29tbWl0KSkiCisKKyM6IHd0LXN0YXR1cy5jOjIxMgorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAoZMO5bmcgXCJnaXQgYWRkL3JtIDx04bqtcC10aW4+Li4uXCIgxJHhu4MgY+G6rXAgbmjhuq10IG5o4buvbmcgZ8OsIHPhur0gxJHGsOG7o2MgY2h1eeG7g24gZ2lhbykiCisKKyM6IHd0LXN0YXR1cy5jOjIxMworbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0IGNoZWNrb3V0IC0tIDx04bqtcC10aW4+Li4uXCIgxJHhu4MgYuG7jyB0aGF5IMSR4buVaSB0cm9uZyB0aMawIG3hu6VjIGzDoG0gIgorInZp4buHYykiCisKKyM6IHd0LXN0YXR1cy5jOjIxNQorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgaG/hurdjIGzDoCBsb+G6oWkgYuG7jyBjw6FjIG7hu5lpIGR1bmcga2jDtG5nLWLhu4stdGhlby124bq/dCBoYXkgIgorIsSRw6MgYuG7iyBjaOG7iW5oIHPhu61hIHRyb25nIG3DtC3EkXVuLWNvbikiCisKKyM6IHd0LXN0YXR1cy5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0ICVzIDx04bqtcC10aW4+Li4uXCIgxJHhu4MgdGjDqm0gdsOgbyBuaOG7r25nIGfDrCBj4bqnbiBjaHV54buDbiBnaWFvICIKKyIoY29tbWl0KSkiCisKKyM6IHd0LXN0YXR1cy5jOjI0NAorbXNnaWQgImJ1ZyIKK21zZ3N0ciAibOG7l2kiCisKKyM6IHd0LXN0YXR1cy5jOjI0OQorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgImLhu4sgeMOzYSBi4bufaSBj4bqjIGhhaToiCisKKyM6IHd0LXN0YXR1cy5jOjI1MAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAixJHGsOG7o2MgdGjDqm0gdsOgbyBi4bufaSBjaMO6bmcgdMO0aToiCisKKyM6IHd0LXN0YXR1cy5jOjI1MQorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgImLhu4sgeMOzYSDEkWkgYuG7n2kgaOG7jToiCisKKyM6IHd0LXN0YXR1cy5jOjI1MgorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICLEkcaw4bujYyB0aMOqbSB2w6BvIGLhu59pIGjhu406IgorCisjOiB3dC1zdGF0dXMuYzoyNTMKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiYuG7iyB4w7NhIGLhu59pIGNow7puZyB0w7RpOiIKKworIzogd3Qtc3RhdHVzLmM6MjU0Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgIsSRxrDhu6NjIHRow6ptIHbDoG8gYuG7n2kgY+G6oyBoYWk6IgorCisjOiB3dC1zdGF0dXMuYzoyNTUKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAiYuG7iyBz4butYSBi4bufaSBj4bqjIGhhaToiCisKKyM6IHd0LXN0YXR1cy5jOjI4NQorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgbeG7m2ksICIKKworIzogd3Qtc3RhdHVzLmM6Mjg3Cittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICJu4buZaSBkdW5nIMSRxrDhu6NjIHPhu61hIMSR4buVaSwgIgorCisjOiB3dC1zdGF0dXMuYzoyODkKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJu4buZaSBkdW5nIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSwgIgorCisjOiB3dC1zdGF0dXMuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGU6ICAgJXMiCittc2dzdHIgInThuq1wIHRpbiBt4bubaTogICAlcyIKKworIzogd3Qtc3RhdHVzLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcGllZDogICAgICVzIC0+ICVzIgorbXNnc3RyICLEkcOjIHNhbyBjaMOpcDogICAgICVzIC0+ICVzIgorCisjOiB3dC1zdGF0dXMuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZDogICAgJXMiCittc2dzdHIgIsSRw6MgeMOzYTogICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJtb2RpZmllZDogICAlcyIKK21zZ3N0ciAixJHDoyBz4butYSDEkeG7lWk6ICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWVkOiAgICAlcyAtPiAlcyIKK21zZ3N0ciAixJHDoyDEkeG7lWkgdMOqbjogICAgJXMgLT4gJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0eXBlY2hhbmdlOiAlcyIKK21zZ3N0ciAixJHhu5VpLWtp4buDdTogJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duOiAgICAlcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdTogICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bm1lcmdlZDogICAlcyIKK21zZ3N0ciAiY2jGsGEgaMOyYSB0cuG7mW46ICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJidWc6IHVuaGFuZGxlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAibOG7l2k6IGtow7RuZyBs4bqleSDEkcaw4bujYyB0cuG6oW5nIHRow6FpIGzhu4duaCBkaWZmICVjIgorCisjOiB3dC1zdGF0dXMuYzo3ODUKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIkLhuqFuIGPDsyBuaOG7r25nIMSRxrDhu51uZyBk4bqrbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbi4iCisKKyM6IHd0LXN0YXR1cy5jOjc4OCB3dC1zdGF0dXMuYzo5MTIKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgIChz4butYSBjw6FjIHh1bmcgxJHhu5l0IHNhdSDEkcOzIGNo4bqheSBcImdpdCBjb21taXRcIikiCisKKyM6IHd0LXN0YXR1cy5jOjc5MQorbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIlThuqV0IGPhuqMgY8OhYyB4dW5nIMSR4buZdCDEkcOjIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90IG5oxrBuZyBi4bqhbiB24bqrbiDEkWFuZyBow7JhIHRy4buZbi4iCisKKyM6IHd0LXN0YXR1cy5jOjc5NAorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IGNvbW1pdFwiIMSR4buDIGhvw6BuIHThuqV0IHZp4buHYyBow7JhIHRy4buZbikiCisKKyM6IHd0LXN0YXR1cy5jOjgwNAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiQuG6oW4gxJFhbmcg4bufIGdp4buvYSBj4bunYSBt4buZdCBwaGnDqm4gJ2FtJy4iCisKKyM6IHd0LXN0YXR1cy5jOjgwNworbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiTWnhur9uZyB2w6EgaGnhu4duIHThuqFpIGLhu4sgdHLhu5FuZyBy4buXbmcuIgorCisjOiB3dC1zdGF0dXMuYzo4MTEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLXJlc29sdmVkXCIpIgorbXNnc3RyICIgIChz4butYSBjw6FjIHh1bmcgxJHhu5l0IHbDoCBzYXUgxJHDsyBjaOG6oXkgbOG7h25oIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIikiCisKKyM6IHd0LXN0YXR1cy5jOjgxMworbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBhbSAtLXNraXBcIiDEkeG7gyBi4buPIHF1YSBs4bqnbiB2w6EgbsOgeSkiCisKKyM6IHd0LXN0YXR1cy5jOjgxNQorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgYW0gLS1hYm9ydFwiIMSR4buDIHBo4bulYyBo4buTaSBs4bqhaSBuaMOhbmggbmd1ecOqbiB0aOG7p3kpIgorCisjOiB3dC1zdGF0dXMuYzo4NzMgd3Qtc3RhdHVzLmM6ODgzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJC4bqhbiBoaeG7h24gbmF5IMSRYW5nIHRo4buxYyBoaeG7h24gdmnhu4djIHJlYmFzZSAodMOhaSBj4bqldSB0csO6YykuIgorCisjOiB3dC1zdGF0dXMuYzo4NzYKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoc+G7rWEgY8OhYyB4dW5nIMSR4buZdCB2w6Agc2F1IMSRw7MgY2jhuqF5IGzhu4duaCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6ODc4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIChkw7luZyBcImdpdCByZWJhc2UgLS1za2lwXCIgxJHhu4MgYuG7jyBxdWEgbOG6p24gdsOhIG7DoHkpIgorCisjOiB3dC1zdGF0dXMuYzo4ODAKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgxJHhu4MgY2hlY2stb3V0IG5ow6FuaCBuZ3V5w6puIHRo4buneSkiCisKKyM6IHd0LXN0YXR1cy5jOjg4NgorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKGtoaSB04bqldCBj4bqjIGPDoWMgeHVuZyDEkeG7mXQgxJHDoyBz4butYSB4b25nOiBjaOG6oXkgbOG7h25oIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzo4ODgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiIgorIkLhuqFuIGhp4buHbiB04bqhaSDEkWFuZyBj4bqvdCDEkcO0aSBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIHRyb25nIGtoaSDEkWFuZyB0aOG7sWMgaGnhu4duIHZp4buHYyAiCisicmViYXNlLiIKKworIzogd3Qtc3RhdHVzLmM6ODkxCittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChN4buZdCBraGkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBj4bunYSBi4bqhbiDEkcOjIGfhu41uIGfDoG5nLCBjaOG6oXkgXCJnaXQgcmViYXNlIC0tY29udGludWUiCisiXCIpIgorCisjOiB3dC1zdGF0dXMuYzo4OTMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkLhuqFuIGhp4buHbiDEkWFuZyBz4butYSBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIHRyb25nIGtoaSBi4bqhbiB0aOG7sWMgaGnhu4duIHJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjg5NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiIKKyIgIChkw7luZyBcImdpdCBjb21taXQgLS1hbWVuZFwiIMSR4buDIHR1IGLhu5UgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBoaeG7h24gdOG6oWkpIgorCisjOiB3dC1zdGF0dXMuYzo4OTgKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiIKKyIgIChkw7luZyBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG3hu5l0IGtoaSBi4bqhbiBj4bqjbSB0aOG6pXkgaMOgaSBsw7JuZyB24buBIG5o4buvbmcgIgorInRoYXkgxJHhu5VpIGPhu6dhIG3DrG5oKSIKKworIzogd3Qtc3RhdHVzLmM6OTA4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcuIgorbXNnc3RyICJC4bqhbiBoaeG7h24gbmF5IMSRYW5nIHRo4buxYyBoaeG7h24gdmnhu4djIGNoZXJyeS1waWNrLiIKKworIzogd3Qtc3RhdHVzLmM6OTE1Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICAoa2hpIHThuqV0IGPhuqMgY8OhYyB4dW5nIMSR4buZdCDEkcOjIHPhu61hIHhvbmc6IGNo4bqheSBs4buHbmggXCJnaXQgY29tbWl0XCIpIgorCisjOiB3dC1zdGF0dXMuYzo5MjQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICJC4bqhbiBoaeG7h24gdOG6oWkgxJFhbmcgdGjhu7FjIGhp4buHbiB2aeG7h2MgYmlzZWN0IChjaGlhIMSRw7RpKS4iCisKKyM6IHd0LXN0YXR1cy5jOjkyNworbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgYmlzZWN0IHJlc2V0XCIgxJHhu4MgcXVheSB0cuG7nyBs4bqhaSBuaMOhbmggbmd1ecOqbiB0aOG7p3kpIgorCisjOiB3dC1zdGF0dXMuYzo5NzgKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICJUcsOqbiBuaMOhbmggIgorCisjOiB3dC1zdGF0dXMuYzo5ODUKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJIaeG7h24gdOG6oWkgY2jhurNuZyDhu58gbmjDoW5oIG7DoG8gY+G6oy4iCisKKyM6IHd0LXN0YXR1cy5jOjk5NworbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICJM4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIGto4bufaSDEkeG6p3UiCisKKyM6IHd0LXN0YXR1cy5jOjEwMTEKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIk5o4buvbmcgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSIKKworIzogd3Qtc3RhdHVzLmM6MTAxMworbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIk5o4buvbmcgdOG6rXAgdGluIGLhu4sgbOG7nSDEkWkiCisKKyM6IHd0LXN0YXR1cy5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAiTmjhu69uZyB04bqtcCB0aW4ga2jDtG5nIGLhu4sgdGhlbyB24bq/dCBraMO0bmcgxJHGsOG7o2MgbGnhu4d0IGvDqiByYSAlcyIKKworIzogd3Qtc3RhdHVzLmM6MTAxNworbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAoZMO5bmcgdMO5eSBjaOG7jW4gLXUgxJHhu4MgaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSkiCisKKyM6IHd0LXN0YXR1cy5jOjEwMjMKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8iCisKKyM6IHd0LXN0YXR1cy5jOjEwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyJraMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gxJHGsOG7o2MgdGjDqm0gdsOgbyBjb21taXQgKGTDuW5nIFwiZ2l0IGFkZFwiIHbDoC9ob+G6t2MgXCJnaXQgIgorImNvbW1pdCAtYVwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgImtow7RuZyBjw7MgdGhheSDEkeG7lWkgbsOgbyDEkcaw4bujYyB0aMOqbSB2w6BvIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdClcbiIKKworIzogd3Qtc3RhdHVzLmM6MTAzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICIiCisia2jDtG5nIGPDsyBnw6wgxJHGsOG7o2MgdGjDqm0gdsOgbyBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIG5oxrBuZyBjw7Mgbmjhu69uZyB04bqtcCB0aW4gIgorImtow7RuZyDEkcaw4bujYyB0aGVvIGThuqV1IHbhur90IGhp4buHbiBkaeG7h24gKGTDuW5nIFwiZ2l0IGFkZFwiIMSR4buDIMSRxrBhIHbDoG8gdGhlbyBkw7VpKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICIiCisia2jDtG5nIGPDsyBnw6wgxJHGsOG7o2MgdGjDqm0gdsOgbyBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIG5oxrBuZyBjw7Mgbmjhu69uZyB04bqtcCB0aW4gIgorImtow7RuZyDEkcaw4bujYyB0aGVvIGThuqV1IHbhur90IGhp4buHbiBkaeG7h25cbiIKKworIzogd3Qtc3RhdHVzLmM6MTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAiIgorIiBraMO0bmcgY8OzIGfDrCDEkeG7gyBjb21taXQgKHThuqFvL3Nhby1jaMOpcCBjw6FjIHThuq1wIHRpbiB2w6AgZMO5bmcgXCJnaXQgYWRkXCIgxJHhu4MgdGhlbyAiCisiZMO1aSBk4bqldSB24bq/dClcbiIKKworIzogd3Qtc3RhdHVzLmM6MTA0MyB3dC1zdGF0dXMuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgImtow7RuZyBjw7MgZ8OsIMSR4buDIGNodXnhu4NuIGdpYW8gKGNvbW1pdClcbiIKKworIzogd3Qtc3RhdHVzLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICIiCisia2jDtG5nIGPDsyBnw6wgxJHhu4MgY2h1eeG7g24gZ2lhbyAoY29tbWl0KSAoZMO5bmcgLXUgxJHhu4MgYuG7jyBjw6FjIHThuq1wIHRpbiBj4bqnbiB0aGVvIGThuqV1ICIKKyJ24bq/dClcbiIKKworIzogd3Qtc3RhdHVzLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyBkaXJlY3RvcnkgY2xlYW5cbiIKK21zZ3N0ciAia2jDtG5nIGPDsyBnw6wgxJHhu4MgY2h1eeG7g24gZ2lhbyAoY29tbWl0KSwgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBz4bqhY2ggc+G6vVxuIgorCisjOiB3dC1zdGF0dXMuYzoxMTU4Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAoa2jDtG5nIG5ow6FuaCkiCisKKyM6IHd0LXN0YXR1cy5jOjExNjQKK21zZ2lkICJJbml0aWFsIGNvbW1pdCBvbiAiCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkga2jhu59pIHThuqFvIHRyw6puICIKKworIzogd3Qtc3RhdHVzLmM6MTE3OQorbXNnaWQgImJlaGluZCAiCittc2dzdHIgIsSR4bqxbmcgc2F1ICIKKworIzogd3Qtc3RhdHVzLmM6MTE4MiB3dC1zdGF0dXMuYzoxMTg1Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICJwaMOtYSB0csaw4bubYyAiCisKKyM6IHd0LXN0YXR1cy5jOjExODcKK21zZ2lkICIsIGJlaGluZCAiCittc2dzdHIgIiwgxJHhurFuZyBzYXUgIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgImLhu48gbGnDqm4ga+G6v3QgKHVubGluaykgJXMga2jDtG5nIHRow6BuaCBjw7RuZyIKKworIzogYnVpbHRpbi9hZGQuYzoxOQorbXNnaWQgImdpdCBhZGQgW29wdGlvbnNdIFstLV0gPGZpbGVwYXR0ZXJuPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbY8OhYy10w7l5LWNo4buNbl0gWy0tXSA8beG6q3UtdOG6rXAtdGluPi4uLiIKKworIzogYnVpbHRpbi9hZGQuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICJ0cuG6oW5nIHRow6FpIGzhu4duaCBkaWZmIGtow7RuZyBuaMawIG1vbmcgxJHhu6NpICVjIgorCisjOiBidWlsdGluL2FkZC5jOjY3IGJ1aWx0aW4vY29tbWl0LmM6MjMwCittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJD4bqtcCBuaOG6rXQgdOG6rXAgdGluIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2FkZC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgImfhu6EgYuG7jyBgJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGggJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICLEkMaw4budbmcgZOG6q24gYCVzJyB0aMOsIOG7nyB0cm9uZyBtw7QtxJF1bi1jb24gYCUuKnMnIgorCisjOiBidWlsdGluL2FkZC5jOjE5MgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICIiCisiQ8OhYyB0aGF5IMSR4buVaSBraMO0bmcgxJHGsOG7o2MgbMawdSB0cuG6oW5nIHRow6FpIHNhdSBraGkgbMOgbSB0xrDGoWkgbeG7m2kgbOG6oWkgYuG6o25nIG3hu6VjIGzhu6VjOiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTUgYnVpbHRpbi9hZGQuYzo0NjAgYnVpbHRpbi9ybS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICJwYXRoc3BlYyBgJXMnIGtow7RuZyBraOG7m3AgduG7m2kgYuG6pXQga+G7syB04bqtcCB0aW4gbsOgbyIKKworIzogYnVpbHRpbi9hZGQuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJgJXMnIG7hurFtIG5nb8OgaSBt4buZdCBsacOqbiBr4bq/dCB0xrDhu6NuZyB0csawbmciCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc2Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hZGQuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIktow7RuZyB0aOG7gyBt4bufIGAlcycgxJHhu4MgZ2hpIgorCisjOiBidWlsdGluL2FkZC5jOjI5MAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSByYSBtaeG6v25nIHbDoSIKKworIzogYnVpbHRpbi9hZGQuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRy4bqhbmcgdGjDoWkgduG7gSBgJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjI5NworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiTWnhur9uZyB2w6EgdHLhu5FuZyBy4buXbmcuIMSQw6MgYuG7jyBxdWEuIgorCisjOiBidWlsdGluL2FkZC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGFwcGx5ICjDoXAgZOG7pW5nIG1p4bq/bmcgdsOhKSBgJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjMxMworbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorIkPDoWMgxJHGsOG7nW5nIGThuqtuIHRoZW8gc2F1IMSRw6J5IHPhur0gYuG7iyBs4budIMSRaSBi4bufaSBt4buZdCB0cm9uZyBjw6FjIHThuq1wIHRpbiAuZ2l0aWdub3JlICIKKyJj4bunYSBi4bqhbjpcbiIKKworIzogYnVpbHRpbi9hZGQuYzozMTkgYnVpbHRpbi9jbGVhbi5jOjUyIGJ1aWx0aW4vZmV0Y2guYzo3OCBidWlsdGluL212LmM6NjMKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NzYgYnVpbHRpbi9wdXNoLmM6Mzg4IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MworIzogYnVpbHRpbi9ybS5jOjEzMworbXNnaWQgImRyeSBydW4iCittc2dzdHIgImNo4bqheSB0aOG7rSIKKworIzogYnVpbHRpbi9hZGQuYzozMjAgYnVpbHRpbi9hcHBseS5jOjQzNTQgYnVpbHRpbi9jb21taXQuYzoxMTU0CisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo4MiBidWlsdGluL2ZzY2suYzo2MTMgYnVpbHRpbi9sb2cuYzoxNDc3CisjOiBidWlsdGluL212LmM6NjIgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTIKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJjaGkgdGnhur90IgorCisjOiBidWlsdGluL2FkZC5jOjMyMgorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgInPhu61hIGLhurFuZyBjw6FjaCB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDI4IGJ1aWx0aW4vcmVzZXQuYzoyNDgKK21zZ2lkICJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAiY2jhu41uIGBodW5rcycgbeG7mXQgY8OhY2ggdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL2FkZC5jOjMyNAorbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAic+G7rWEgZGlmZiBoaeG7h24gbmF5IHbDoCDDoXAgZOG7pW5nIG7DsyIKKworIzogYnVpbHRpbi9hZGQuYzozMjUKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgImNobyBwaMOpcCB0aMOqbSBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIGtow6FjIgorCisjOiBidWlsdGluL2FkZC5jOjMyNgorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICJj4bqtcCBuaOG6rXQgY8OhYyB04bqtcCB0aW4gxJHGsOG7o2MgdGhlbyB24bq/dCIKKworIzogYnVpbHRpbi9hZGQuYzozMjcKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgImNo4buJIGdoaSBs4bqhaSBz4buxIHZp4buHYyBtw6AgxJHGsOG7nW5nIGThuqtuIHPhur0gxJHGsOG7o2MgdGjDqm0gdsOgbyBzYXUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI4Cittc2dpZCAiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICIiCisidGjDqm0gY8OhYyB0aGF5IMSR4buVaSB04burIHThuqV0IGPhuqMgY8OhYyB04bqtcCB0aW4gY8OzIGPFqW5nIG5oxrAga2jDtG5nIMSRxrDhu6NjIHRoZW8gZMO1aSBk4bqldSAiCisiduG6v3QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI5Cittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjDqm0sIGNo4buJIGzDoG0gdMawxqFpIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hZGQuYzozMzAKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICJjaGllIGLhu48gcXVhIG5o4buvbmcgdOG6rXAgdGluIG3DoCBuw7Mga2jDtG5nIHRo4buDIMSRxrDhu6NjIHRow6ptIHbDoG8gYuG7n2kgdsOsIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2FkZC5jOjMzMQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorImtp4buDbSB0cmEgeGVtIC0gdGjhuq1tIGNow60gdGhp4bq/dSAtIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIHRyb25nIHF1w6EgdHLDrG5oIGNo4bqheSB0aOG7rSIKKworIzogYnVpbHRpbi9hZGQuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKK21zZ3N0ciAiU+G7rSBk4bulbmcgdMO5eSBjaOG7jW4gLWYgbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgbXXhu5FuIHRow6ptIGNow7puZyB2w6BvLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjM1NAorbXNnaWQgIm5vIGZpbGVzIGFkZGVkIgorbXNnc3RyICJjaMawYSBjw7MgdOG6rXAgdGluIG7DoG8gxJHGsOG7o2MgdGjDqm0gdsOgbyIKKworIzogYnVpbHRpbi9hZGQuYzozNjAKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJ0aMOqbSB04bqtcCB0aW4gZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkyCittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BIHbDoCAtdSB4dW5nIGto4bqvYyBuaGF1IgorCisjOiBidWlsdGluL2FkZC5jOjM5NAorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIlTDuXkgY2jhu41uIC0taWdub3JlLW1pc3NpbmcgY2jhu4kgY8OzIHRo4buDIMSRxrDhu6NjIGTDuW5nIGPDuW5nIHbhu5tpIC0tZHJ5LXJ1biIKKworIzogYnVpbHRpbi9hZGQuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIktow7RuZyBjw7MgZ8OsIMSRxrDhu6NjIGNo4buJIHJhLCBraMO0bmcgY8OzIGfDrCDEkcaw4bujYyB0aMOqbSB2w6BvLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAiQ8OzIGzhur0gYuG6oW4gbXXhu5FuIGzDoCBgZ2l0IGFkZCAuJyBwaOG6o2kga2jDtG5nP1xuIgorCisjOiBidWlsdGluL2FkZC5jOjQyMSBidWlsdGluL2NsZWFuLmM6OTUgYnVpbHRpbi9jb21taXQuYzoyOTAgYnVpbHRpbi9tdi5jOjgyCisjOiBidWlsdGluL3JtLmM6MTYyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJ04bqtcCB0aW4gZ2hpIGLhuqNuZyBt4bulYyBs4bulYyBi4buLIGjhu49uZyIKKworIzogYnVpbHRpbi9hZGQuYzo0ODEgYnVpbHRpbi9hcHBseS5jOjQ0NTAgYnVpbHRpbi9tdi5jOjIyOSBidWlsdGluL3JtLmM6MjYwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyBt4bubaSIKKworIzogYnVpbHRpbi9hcHBseS5jOjU3Cittc2dpZCAiZ2l0IGFwcGx5IFtvcHRpb25zXSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbY8OhYy10w7l5LWNo4buNbl0gWzxtaeG6v25nLXbDoT4uLi5dIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIHTDuXkgY2jhu41uIHbhu4Ega2hv4bqjbmcgdHLhuq9uZyBgJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAia2jDtG5nIG5o4bqtbiByYSB0w7l5IGNo4buNbiBi4buPIHF1YSBraG/huqNuZyB0cuG6r25nIGAlcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBjaHXhuqluIGLhu4sgYmnhu4N1IHRo4bupYyBjaMOtbmggcXVpIGThuqV1IHbhur90IHRo4budaSBnaWFuICh0aW1lc3RhbXAgcmVnZXhwKSAiCisiJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJ0aGkgaMOgbmggYmnhu4N1IHRo4bupYyBjaMOtbmggcXV5IHRy4bqjIHbhu4EgJWQgY2hvIGvhur90IHh14bqldDogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IHTDqm4gdOG6rXAgdGluIHRyb25nIG1p4bq/bmcgdsOhIHThuqFpIGTDsm5nICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBnaXQtZGlmZiBzYWkgLSBtb25nIMSR4bujaSAvZGV2L251bGwsIMSRw6Mgbmjhuq1uICVzIHRyw6puIGTDsm5nICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGdpdC1kaWZmIHNhaSAtIHTDqm4gdOG6rXAgdGluIG3hu5tpIG3DonUgdGh14bqlbiB0csOqbiBkw7JuZyAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBnaXQtZGlmZiBzYWkgLSB0w6puIHThuq1wIHRpbiBjxakgbcOidSB0aHXhuqVuIHRyw6puIGTDsm5nICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgc2FpIC0gbW9uZyDEkeG7o2kgL2Rldi9udWxsIHRyw6puIGTDsm5nICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgImNoaSB0aeG6v3Q6IGTDsm5nIGtow7RuZyDEkcaw4bujYyBtb25nIMSR4bujaTogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAibWnhur9uZyB2w6EgcGjDom4gbeG6o25oIG3DoCBraMO0bmcgY8OzIHBo4bqnbiDEkeG6p3UgdOG6oWkgZMOybmcgJWQ6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIiIKKyJwaOG6p24gxJHhuqd1IGRpZmYgY2hvIGdpdCAgdGhp4bq/dSB0aMO0bmcgdGluIHTDqm4gdOG6rXAgdGluIGtoaSBn4buhIGLhu48gxJFpICVkIHRyb25nICIKKyJ0aMOgbmggcGjhuqduIGThuqtuIMSR4bqndSB0w6puIGPhu6dhIMSRxrDhu51uZyBk4bqrbiAoZMOybmcgJWQpIgorbXNnc3RyWzFdICIiCisicGjhuqduIMSR4bqndSBkaWZmIGNobyBnaXQgIHRoaeG6v3UgdGjDtG5nIHRpbiB0w6puIHThuq1wIHRpbiBraGkgZ+G7oSBi4buPIMSRaSAlZCB0cm9uZyAiCisidGjDoG5oIHBo4bqnbiBk4bqrbiDEkeG6p3UgdMOqbiBj4bunYSDEkcaw4budbmcgZOG6q24gKGTDsm5nICVkKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2NTQKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAidOG6rXAgdGluIG3hu5tpIHBo4bulIHRodeG7mWMgdsOgbyBu4buZaSBkdW5nIGPFqSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2NTYKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJ04bqtcCB0aW4gxJHDoyB4w7NhIHbhuqtuIGPDsm4gbuG7mWkgZHVuZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJtaeG6v25nIHbDoSBo4buPbmcgdOG6oWkgZMOybmcgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJ04bqtcCB0aW4gbeG7m2kgJXMgcGjhu6UgdGh14buZYyB2w6BvIG7hu5lpIGR1bmcgY8WpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJ04bqtcCB0aW4gxJHDoyB4w7NhICVzIHbhuqtuIGPDsm4gbuG7mWkgZHVuZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogY+G6o25oIGLDoW86IHThuq1wIHRpbiAlcyB0cuG7nyBuw6puIHRy4buRbmcgcuG7l25nIG5oxrBuZyBraMO0bmcgYuG7iyB4w7NhIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJtaeG6v25nIHbDoSDEkeG7i25oIGThuqFuZyBuaOG7iyBwaMOibiBzYWkgaOG7j25nIHThuqFpIGTDsm5nICVkOiAlLipzIgorCisjLiB0aGVyZSBoYXMgdG8gYmUgb25lIGh1bmsgKGZvcndhcmQgaHVuaykKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxODk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAibWnhur9uZyB2w6EgxJHhu4tuaCBk4bqhbmcgbmjhu4sgcGjDom4ga2jDtG5nIMSRxrDhu6NjIG5o4bqtbiByYSB04bqhaSBkw7JuZyAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE5ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAidsOhIGNo4buJIHbhu5tpICdnYXJiYWdlJyB04bqhaSBkw7JuZyAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBsacOqbiBr4bq/dCB0xrDhu6NuZyB0csawbmcgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIMSR4buDIMSR4buNYyBoYXkgZ2hpICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjE0OQorbXNnaWQgIm9vcHMiCittc2dzdHIgIsO0aT8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNjcxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAic2FpIGto4bufaSDEkeG6p3UgZMOybmc6IGAlYyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiS2jhu5FpIGThu68gbGnhu4d1ICMlZCB0aMOgbmggY8O0bmcgdOG6oWkgJWQgKG9mZnNldCAlZCBkw7JuZykuIgorbXNnc3RyWzFdICJLaOG7kWkgZOG7ryBsaeG7h3UgIyVkIHRow6BuaCBjw7RuZyB04bqhaSAlZCAob2Zmc2V0ICVkIGTDsm5nKS4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIk7hu5lpIGR1bmcgYuG7iyBnaeG6o20geHXhu5FuZyAoJWxkLyVsZCkgxJHhu4Mgw6FwIGThu6VuZyBt4bqjbmggZOG7ryBsaeG7h3UgdOG6oWkgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJUcm9uZyBraGkgxJFhbmcgdMOsbSBraeG6v20gY2hvOlxuIgorIiUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgInRoaeG6v3UgZOG7ryBsaeG7h3UgY+G7p2EgbWnhur9uZyB2w6EgxJHhu4tuaCBk4bqhbmcgbmjhu4sgcGjDom4gY2hvIGAlcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJtaeG6v25nIHbDoSDEkeG7i25oIGThuqFuZyBuaOG7iyBwaMOibiBraMO0bmcgxJHGsOG7o2Mgw6FwIGThu6VuZyBjaG8gYCVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyJ2w6Egbmjhu4sgcGjDom4gY2hvIGAlcycgdOG6oW8gcmEga+G6v3QgcXXhuqMga2jDtG5nIGNow61uaCB4w6FjIChtb25nIGNo4budICVzLCBs4bqhaSBuaOG6rW4gIgorIiVzKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgInbDoSBn4bq3cCBs4buXaTogJXM6JWxkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBcImNoZWNrb3V0XCIgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTIzIGJ1aWx0aW4vYXBwbHkuYzozMTMyIGJ1aWx0aW4vYXBwbHkuYzozMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgb2YgJXMgZmFpbGVkIgorbXNnc3RyICLEkeG7jWMgJXMgZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTU2IGJ1aWx0aW4vYXBwbHkuYzozMzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gJXMgxJHDoyBi4buLIHjDs2EvxJHhu5VpIHTDqm4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjM3IGJ1aWx0aW4vYXBwbHkuYzozMzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IGtow7RuZyB04buTbiB04bqhaSB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjQxIGJ1aWx0aW4vYXBwbHkuYzozMzg0IGJ1aWx0aW4vYXBwbHkuYzozNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyIKK21zZ3N0ciAiJXM6ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI0NiBidWlsdGluL2FwcGx5LmM6MzQwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiBraMO0bmcga2jhu5twIHRyb25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM0OAorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgImxv4bqhaSBi4buPIG1p4bq/bmcgdsOhIMSR4buDIGzhuqFpIG7hu5lpIGR1bmcgdOG6rXAgdGluIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzQxNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXM6IHNhaSBraeG7g3UiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgY8OzIGtp4buDdSAlbywgbW9uZyBjaOG7nSAlbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlczogxJHDoyBjw7MgdOG7qyB0csaw4bubYyB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXM6IMSRw6Mgc+G6tW4gY8OzIHRyb25nIHRoxrAgbeG7pWMgxJFhbmcgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAiY2jhur8gxJHhu5kgbeG7m2kgKCVvKSBj4bunYSAlcyBraMO0bmcga2jhu5twIHbhu5tpIGNo4bq/IMSR4buZIGPFqSAoJW8pIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgImNo4bq/IMSR4buZIG3hu5tpICglbykgY+G7p2EgJXMga2jDtG5nIGto4bubcCB24bubaSBjaOG6vyDEkeG7mSBjxakgKCVvKSBj4bunYSAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczogbWnhur9uZyB2w6Ega2jDtG5nIMSRxrDhu6NjIMOhcCBk4bulbmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIG1p4bq/bmcgdsOhICVzLi4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzYyNCBidWlsdGluL2NoZWNrb3V0LmM6MjE1IGJ1aWx0aW4vcmVzZXQuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAibWFrZV9jYWNoZV9lbnRyeSBn4bq3cCBs4buXaSDEkeG7kWkgduG7m2kgxJHGsOG7nW5nIGThuqtuIGAlcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGfhu6EgYuG7jyAlcyB04burIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJwcm9qZWN0ICVzIgorbXNnc3RyICJtaeG6v25nIHbDoSBzYWkgaOG7j25nIGNobyBk4buxIMOhbiBjb24gKHN1YnByb2plY3QpICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRy4bqhbmcgdGjDoWkgduG7gSB04bqtcCB0aW4gJXMgbeG7m2kgaMahbiDEkcOjIMSRxrDhu6NjIHThuqFvIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvICdiYWNraW5nIHN0b3JlJyBjaG8gdOG6rXAgdGluIMSRxrDhu6NjIHThuqFvIG3hu5tpIGjGoW4gJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODA3IGJ1aWx0aW4vYXBwbHkuYzozOTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdGjDqm0gbeG7pWMgbmjhu5sgdOG6oW0gY2hvICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAixJFhbmcgxJHDs25nIHThuq1wIHRpbiBgJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzg4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdsOgbyB04bqtcCB0aW4gYCVzJyBjaOG6vyDEkeG7mSAobW9kZSkgJW8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIsSQw6Mgw6FwIGThu6VuZyBtaeG6v25nIHbDoCAlcyBt4buZdCBjw6FjaCBz4bqhY2ggc+G6vS4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTg0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgImzhu5dpIG7hu5lpIGLhu5kiCisKKyMuIFNheSB0aGlzIGV2ZW4gd2l0aG91dCAtLXZlcmJvc2UKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAixJBhbmcgw6FwIGThu6VuZyBtaeG6v25nIHbDoSAlJXMgduG7m2kgJWQgbOG6p24gdOG7qyBjaOG7kWkuLi4iCittc2dzdHJbMV0gIsSQYW5nIMOhcCBk4bulbmcgbWnhur9uZyB2w6EgJSVzIHbhu5tpICVkIGzhuqduIHThu6sgY2jhu5FpLi4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgIsSRYW5nIGPhuq90IGPhu6V0IHTDqm4gdOG6rXAgdGluIC5yZWogdGjDoG5oICUuKnMucmVqIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICJLaOG7kWkgbmjhu5sgIyVkIMSRxrDhu6NjIMOhcCBk4bulbmcgZ+G7jW4gZ8OgbmcuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAyMQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgImh1bmsgIyVkIGLhu4sgdOG7qyBjaOG7kWkuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDE3MQorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAia2jDtG5nIHRo4burYSBuaOG6rW4gxJHhuqd1IHbDoG8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MTgyCittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzAxIGJ1aWx0aW4vYXBwbHkuYzo0MzA0IGJ1aWx0aW4vY2xvbmUuYzo5MQorIzogYnVpbHRpbi9mZXRjaC5jOjYzCittc2dpZCAicGF0aCIKK21zZ3N0ciAixJHGsOG7nW5nLWThuqtuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwMgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgImtow7RuZyDDoXAgZOG7pW5nIGPDoWMgdGhheSDEkeG7lWkga2jhu5twIHbhu5tpIMSRxrDhu51uZyBk4bqrbiDEkcOjIGNobyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDUKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLDoXAgZOG7pW5nIGPDoWMgdGhheSDEkeG7lWkga2jhu5twIHbhu5tpIMSRxrDhu51uZyBk4bqrbiDEkcOjIGNobyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDcKK21zZ2lkICJudW0iCittc2dzdHIgInPhu5EiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA4Cittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgImfhu6EgYuG7jyA8c+G7kT4gcGjhuqduIGThuqtuIMSR4bqndSAoc2xhc2hlKSB04burIMSRxrDhu51uZyBk4bqrbiBkaWZmIGPhu5UgxJFp4buDbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMTEKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJs4budIMSRaSBwaOG6p24gcGjhu6UgdGjDqm0gdOG6oW8gcmEgYuG7n2kgbWnhur9uZyB2w6EiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzEzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICIiCisidGhheSB2w6wgw6FwIGThu6VuZyBt4buZdCBtaeG6v25nIHbDoSwga+G6v3QgeHXhuqV0IGvhur90IHF14bqjIHThu6sgbOG7h25oIGRpZmZzdGF0IGNobyDEkeG6p3UgcmEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzE3Cittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyBz4buRIGzGsOG7o25nIGPDoWMgZMOybmcgxJHGsOG7o2MgdGjDqm0gdsOgbyB2w6AgeMOzYSDEkWkgdGhlbyBrw70gaGnhu4d1IHRo4bqtcCBwaMOibiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMTkKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJ0aGF5IHbDrCDDoXAgZOG7pW5nIG3hu5l0IG1p4bq/bmcgdsOhLCBr4bq/dCB4deG6pXQga+G6v3QgcXXhuqMgY2hvIMSR4bqndSB2w6BvIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMyMQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgInRoYXkgdsOsIMOhcCBk4bulbmcgbWnhur9uZyB2w6EsIGjDo3kgeGVtIHhlbSBtaeG6v25nIHbDoSBjw7MgdGjDrWNoIGjhu6NwIGtow7RuZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMjMKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgImjDo3kgY2jhuq9jIGNo4bqvbiBsw6AgbWnhur9uZyB2w6EgdGjDrWNoIGjhu6NwIHbhu5tpIGLhuqNuZyBt4bulYyBs4bulYyBoaeG7h24gaMOgbmgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzI1Cittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIsOhcCBk4bulbmcgbeG7mXQgbWnhur9uZyB2w6EgbcOgIGtow7RuZyDEkeG7mW5nIGNo4bqhbSDEkeG6v24gY8OieSBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMjcKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAiIgorIsSR4buTbmcgdGjhu51pIMOhcCBk4bulbmcgbWnhur9uZyB2w6EgKGTDuW5nIHbhu5tpIHTDuXkgY2jhu41uIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzI5Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAidGjhu60gaMOyYSB0cuG7mW4ga2nhu4N1IHRocmVlLXdheSBu4bq/dSB2aeG7h2MgdsOhIGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIMSRxrDhu6NjIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMzMQorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisieMOieSBk4buxbmcgYuG6o25nIG3hu6VjIGzhu6VjIHThuqFtIHRo4budaSB0csOqbiBjxqEgc+G7nyB0aMO0bmcgdGluIGLhuqNuZyBt4bulYyBs4bulYyDEkcaw4bujYyBuaMO6bmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzMzIGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTcgYnVpbHRpbi9scy1maWxlcy5jOjQ2MAorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJjw6FjIMSRxrDhu51uZyBk4bqrbiBi4buLIG5nxINuIGPDoWNoIGLhu59pIGvDvSB04buxIE5VTEwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzM2Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICLEkeG6o20gYuG6o28gcuG6sW5nIGPDsyDDrXQgbmjhuqV0IDxuPiBkw7JuZyBu4buZaSBkdW5nIGto4bubcCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMzcKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgImjDoG5oIMSR4buZbmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzM4Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgInTDrG0gdGjhuqV5IG3hu5l0IGTDsm5nIG3hu5tpIGhv4bq3YyBi4buLIHPhu61hIMSR4buVaSBtw6AgbsOzIGPDsyBs4buXaSBkbyBraG/huqNuZyB0cuG6r25nIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM0MSBidWlsdGluL2FwcGx5LmM6NDM0NAorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgImzhu50gxJFpIHPhu7EgdGhheSDEkeG7lWkgZG8ga2hv4bqjbmcgdHLhuq9uZyBraGkgcXXDqXQgbuG7mWkgZHVuZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNDcKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiw6FwIGThu6VuZyBtaeG6v25nIHbDoSB0aGVvIGNoaeG7gXUgbmfGsOG7o2MiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzQ5Cittc2dpZCAiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiCittc2dzdHIgIsSR4burbmcgaHkgduG7jW5nIGPDsyDDrXQgbmjhuqV0IG3hu5l0IGTDsm5nIG7hu5lpIGR1bmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzUxCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgIsSR4buDIGzhuqFpIGto4buRaSBk4buvIGxp4buHdSBi4buLIHThu6sgY2jhu5FpIHRyb25nIGPDoWMgdOG6rXAgdGluICoucmVqIHTGsMahbmcg4bupbmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzUzCittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgImNobyBwaMOpcCBjaOG7k25nIGto4buRaSBuaOG7myIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNTYKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorIsSRw6MgZMOyIHTDrG0gdGjhuqV5IGR1bmcgc2FpIGtow7RuZyBjaMOtbmggeMOhYyB0aGnhur91IGTDsm5nIG3hu5tpIHThuqFpIGN14buRaSB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzU5Cittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICJraMO0bmcgdGluIHPhu5EgbMaw4bujbmcgZMOybmcgdHJvbmcgcGjhuqduIMSR4bqndSBraOG7kWkgZOG7ryBsaeG7h3UiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzYxCittc2dpZCAicm9vdCIKK21zZ3N0ciAicm9vdCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNjIKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICJ0cmVvIHRow6ptIDxyb290PiB2w6BvIHThuqV0IGPhuqMgY8OhYyB0w6puIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzODQKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSDhu58gbmdvw6BpIG3hu5l0IGtobyBjaOG7qWEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzkyCittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1pbmRleCDhu58gbmdvw6BpIG3hu5l0IGtobyBjaOG7qWEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0Mzk1Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIOG7nyBuZ2/DoGkgbeG7mXQga2hvIGNo4bupYSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyBtaeG6v25nIHbDoSBgJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICLEkcOjIGNo4bqlbSBk4bupdCAlZCBs4buXaSBraG/huqNuZyB0cuG6r25nIgorbXNnc3RyWzFdICLEkcOjIGNo4bqlbSBk4bupdCAlZCBs4buXaSBraG/huqNuZyB0cuG6r25nIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDQzMSBidWlsdGluL2FwcGx5LmM6NDQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCBkw7JuZyB0aMOqbSBraG/huqNuZyB0cuG6r25nIGzhu5dpLiIKK21zZ3N0clsxXSAiJWQgZMOybmcgdGjDqm0ga2hv4bqjbmcgdHLhuq9uZyBs4buXaS4iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyB04bqtcCB0aW4ga2hvIChsxrB1IHRy4buvLCBuw6luKSBgJXMnIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgImtow7RuZyB0aOG7gyBjaHV54buDbiBoxrDhu5tuZyBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IE3DoXkgY2jhu6cga2jDtG5nIGPDsyDEkeG7i2EgY2jhu4kgVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo1OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogbW9uZyDEkeG7o2kgQUNLL05BSywgbmjhuq1uIEVPRiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJs4buXaSBtw6F5IGNo4bunOiAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjYKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiBs4buXaSBnaWFvIHRo4bupYyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NzEKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IMSRw6MgbW9uZyBjaOG7nSBt4buZdCBmbHVzaCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3Cittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAidGjhu7FjIGhp4buHbiBgZ2l0IGJpc2VjdCBuZXh0JyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE5Cittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAiIgorImPhuq1wIG5o4bqtdCBCSVNFQ1RfSEVBRCB0aGF5IHbDrCBs4bqleSByYSAoY2hlY2tpbmcgb3V0KSBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpICIKKyJoaeG7h24gaMOgbmgiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNQorbXNnaWQgImdpdCBibGFtZSBbb3B0aW9uc10gW3Jldi1vcHRzXSBbcmV2XSBbLS1dIGZpbGUiCittc2dzdHIgImdpdCBibGFtZSBbY8OhYy10w7l5LWNo4buNbl0gW3Jldi1vcHRzXSBbcmV2XSBbLS1dIHThuq1wLXRpbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMwIGJ1aWx0aW4vc2hvcnRsb2cuYzoxNQorbXNnaWQgIltyZXYtb3B0c10gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICJbcmV2LW9wdHNdIMSRxrDhu6NjIG3DtCB04bqjIHRyb25nIGdpdC1yZXYtbGlzdCgxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzNzMKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICJIaeG7g24gdGjhu4sgY8OhYyBt4bulYyBgYmxhbWUnIG5oxrAgbMOgIGNow7puZyB0YSB0aOG6pXkgY2jDum5nLCB0xINuZyBk4bqnbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzNzQKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiSGnhu4NuIHRo4buLIFNIQS0xIHRy4buRbmcgY2hvIG5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyBiacOqbiBnaeG7m2kgKE3hurdjIMSR4buLbmg6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzc1Cittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJLaMO0bmcgY29pIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBn4buRYyBsw6AgZ2nhu5tpIGjhuqFuIChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM3NgorbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0aOG7kW5nIGvDqiBjw7RuZyBz4bupYyBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzNzcKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGvhur90IHh14bqldCDEkWnhu4NtIHPhu5EgY8OzIGPDoWMgbeG7pWMgdGluIGBibGFtZSciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzc4Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiBn4buRYyAoTeG6t2MgxJHhu4tuaDogYXV0bykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzc5Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJIaeG7g24gdGjhu4sgc+G7kSBkw7JuZyBn4buRYyAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzODAKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICJIaeG7g24gdGjhu4sg4bufIMSR4buLbmggZOG6oW5nIMSRw6MgdGhp4bq/dCBr4bq/IGNobyBz4buxIHRpw6p1IGTDuW5nIGLhurFuZyBtw6F5IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM4MQorbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIMSR4buLbmggZOG6oW5nICdwb3JjZWxhaW4nIHbhu5tpIHRow7RuZyB0aW4gY2h1eeG7g24gZ2lhbyBt4buXaSBkw7JuZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzODIKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJEw7luZyBjw7luZyBjaOG6vyDEkeG7mSB4deG6pXQgcmEgdsOzaWdpdC1hbm5vdGF0ZSAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzODMKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkhp4buDbiB0aOG7iyBk4bqldSB24bq/dCB0aOG7nWkgZ2lhbiBk4bqhbmcgdGjDtCAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzODQKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkhp4buDbiB0aOG7iyBTSEExIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgZOG6oW5nIGTDoGkgKE3hurdjIMSR4buLbmg6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzg1Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiS2jDtG5nIGhp4buDbiB0aOG7iyB0w6puIHTDoWMgZ2nhuqMgdsOgIGThuqV1IHbhur90IHRo4budaSBnaWFuIChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM4NgorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRoxrAgxJFp4buHbiB04butIGPhu6dhIHTDoWMgZ2nhuqMgdGhheSB2w6wgdMOqbiAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzODcKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAiQuG7jyBxdWEgY8OhYyBraMOhYyBiaeG7h3QgZG8ga2hv4bqjbmcgdHLhuq9uZyBnw6J5IHJhIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM4OAorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiVGnDqnUgdGjhu6UgdGjDqm0gbsSDbmcgdMOgaSBuZ3V5w6puIG3DoXkgbcOzYyDEkeG7gyB0w6xtIGtp4bq/bSB04buRdCBoxqFuIG7hu69hIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM4OQorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAiIgorIlPhu60gZOG7pW5nIMSRaeG7g20geMOpdCBkdXnhu4d0IChyZXZpc2lvbikgdOG7qyA8dOG6rXAgdGluPiB0aGF5IHbDrCBn4buNaSBgZ2l0LXJldi1saXN0JyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzOTAKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICJT4butIGThu6VuZyBu4buZaSBkdW5nIGPhu6dhIDx04bqtcCB0aW4+IG5oxrAgbMOgIOG6o25oIGN14buRaSBjw7luZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzOTEgYnVpbHRpbi9ibGFtZS5jOjIzOTIKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAixJFp4buDbSBz4buRIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM5MQorbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIlTDrG0gY8OhYyBi4bqjbiBzYW8gY2jDqXAgZMOybmcgdHJvbmcgdsOgIG5nYW5nIHF1YSB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzkyCittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiVMOsbSBjw6FjIGRpIGNodXnhu4NuIGTDsm5nIHRyb25nIHbDoCBuZ2FuZyBxdWEgdOG6rXAgdGluIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM5MworbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjM5MworbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJY4butIGzDvSBjaOG7iSBkw7JuZyB2w7luZyBuLG0sIHTDrW5oIHThu6sgMSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMworbXNnaWQgImdpdCBicmFuY2ggW29wdGlvbnNdIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggW2PDoWMtdMO5eS1jaOG7jW5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQKK21zZ2lkICJnaXQgYnJhbmNoIFtvcHRpb25zXSBbLWxdIFstZl0gPGJyYW5jaG5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbY8OhYy10w7l5LWNo4buNbl0gWy1sXSBbLWZdIDx0w6puLW5ow6FuaD4gWzzEkWnhu4NtLcSR4bqndT5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1Cittc2dpZCAiZ2l0IGJyYW5jaCBbb3B0aW9uc10gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaG5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFtjw6FjLXTDuXktY2jhu41uXSBbLXJdICgtZCB8IC1EKSA8dMOqbi1uaMOhbmg+IC4uLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNgorbXNnaWQgImdpdCBicmFuY2ggW29wdGlvbnNdICgtbSB8IC1NKSBbPG9sZGJyYW5jaD5dIDxuZXdicmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFtjw6FjLXTDuXktY2jhu41uXSAoLW0gfCAtTSkgWzxuaMOhbmgtY8WpPl0gPG5ow6FuaC1t4bubaT4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIsSRYW5nIHjDs2EgbmjDoW5oIGAlcycgbcOgIG7DsyBs4bqhaSDEkcOjIMSRxrDhu6NjIGjDsmEgdHLhu5luIHbDoG9cbiIKKyIgICAgICAgICBgJXMnLCBuaMawbmcgduG6q24gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4gdsOgbyBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisia2jDtG5nIHjDs2EgbmjDoW5oIGAlcycgY8OhaSBtw6AgY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW5nIHbDoG9cbiIKKyIgICAgICAgICBgJXMnLCBjaG8gZMO5IGzDoCBuw7MgxJHDoyDEkcaw4bujYyBow7JhIHRy4buZbiB2w6BvIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4MQorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGTDuW5nIHTDuXkgY2jhu41uIC1hIHbhu5tpIC1kIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4NworbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0ga2nhur9tIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIChjb21taXQpIGNobyBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBicmFuY2ggJyVzJyB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBvbi4iCittc2dzdHIgIktow7RuZyB0aOG7gyB4w7NhIG5ow6FuaCBgJXMnIGPDoWkgbcOgIGLhuqFuIGhp4buHbiBuYXkgxJFhbmcg4bufLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSBuaMOhbmggbcOheSBjaOG7pyBgJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IG5ow6FuaCBgJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSBraeG6v20gxJHhu5FpIHTGsOG7o25nIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgY2hvIGAlcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIk5ow6FuaCBgJXMnIGtow7RuZyDEkcaw4bujYyB0cuG7mW4gbeG7mXQgY8OhY2ggxJHhuqd5IMSR4bunLlxuIgorIk7hur91IGLhuqFuIHRo4buxYyBz4buxIG114buRbiB4w7NhIG7DsywgdGjDrCBjaOG6oXkgbOG7h25oIGBnaXQgYnJhbmNoIC1EICVzJy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSRYW5nIHjDs2EgbmjDoW5oIG3DoXkgY2jhu6cgYCVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkzhu5dpIGtoaSB4b8OhIGLhu48gbmjDoW5oIGAlcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiTmjDoW5oIG3DoXkgY2jhu6cgXCIlc1wiIMSRw6MgYuG7iyB4w7NhICh04burbmcgbMOgICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIk5ow6FuaCBgJXMnIMSRw6MgYuG7iyB4w7NhICh04burbmcgbMOgICVzKVxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MAorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIkPhuq1wIG5o4bqtdCB04bqtcCB0aW4gY+G6pXUgaMOsbmggZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzM4CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorbXNnc3RyICJuaMOhbmggYCVzJyBraMO0bmcgY2jhu4kgxJHhur9uIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgbsOgbyBj4bqjIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGJlaGluZCAlZF0iCittc2dzdHIgIlslczogxJHhurFuZyBzYXUgJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJbYmVoaW5kICVkXSIKK21zZ3N0ciAiW8SR4bqxbmcgc2F1ICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBhaGVhZCAlZF0iCittc2dzdHIgIlslczogcGjDrWEgdHLGsOG7m2MgJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJbYWhlYWQgJWRdIgorbXNnc3RyICJbcGjDrWEgdHLGsOG7m2MgJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICJbJXM6IHRyxrDhu5tjICVkLCBzYXUgJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJbYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIlt0csaw4bubYyAlZCwgc2F1ICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MzcKK21zZ2lkICIobm8gYnJhbmNoKSIKK21zZ3N0ciAiKGtow7RuZyBuaMOhbmgpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYwMgorbXNnaWQgInNvbWUgcmVmcyBjb3VsZCBub3QgYmUgcmVhZCIKK21zZ3N0ciAibeG7mXQgc+G7kSB0aGFtIGNoaeG6v3UgxJHDoyBraMO0bmcgdGjhu4MgxJHhu41jIMSRxrDhu6NjIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxNQorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu5VpIHTDqm4gbmjDoW5oIGhp4buHbiBow6BuaCB0cm9uZyBraGkgbsOzIGNo4bqzbmcg4bufIMSRw6J1IGPhuqMuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICJTYWkgdMOqbiBuaMOhbmg6IGAlcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQwCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIsSQ4buVaSB0w6puIG5ow6FuaCBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIsSQw6MgxJHhu5VpIHTDqm4gbmjDoW5oIGtodXnhur90IGRhbmggYCVzJyDEkWkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIk5ow6FuaCBi4buLIMSR4buVaSB0w6puIHRow6BuaCAlcywgbmjGsG5nIEhFQUQgbOG6oWkga2jDtG5nIMSRxrDhu6NjIGPhuq1wIG5o4bqtdCEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU1Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJOaMOhbmggYuG7iyDEkeG7lWkgdMOqbiwgbmjGsG5nIGPhuq1wIG5o4bqtdCB04bqtcCB0aW4gY+G6pXUgaMOsbmggZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAidMOqbiDEkeG7kWkgdMaw4bujbmcgZOG7iyBow6xuaCAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZTogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdsOgbyBt4bqrdSBtw7QgdOG6oyBuaMOhbmg6ICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyNAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gY2h1bmciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI2Cittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgImhp4buDbiB0aOG7iyBtw6MgYsSDbSB2w6AgY2jhu6cgxJHhu4EsIMSRxrBhIHJhIGhhaSBs4bqnbiBjaG8gbmjDoW5oIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyNworbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgIlRodSBo4buTaSBjw6FjIHRow7RuZyDEkWnhu4dwIHRow7RuZyB0aW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI4Cittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiCittc2dzdHIgImPDoGkgxJHhurd0IGNo4bq/IMSR4buZIHRoZW8gduG6v3QgKHhlbSBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzMwCittc2dpZCAiY2hhbmdlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgInRoYXkgxJHhu5VpIHRow7RuZyB0aW4gdGjGsOG7o25nIG5ndeG7k24gKHVwc3RyZWFtKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzQKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgInPhu60gZOG7pW5nIGvhur90IHh14bqldCBjw7MgdMO0IG3DoHUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzM1Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAidGhhbyB0w6FjIHRyw6puIG5ow6FuaCBgcmVtb3RlLXRyYWNraW5nJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzggYnVpbHRpbi9icmFuY2guYzo3NDQgYnVpbHRpbi9icmFuY2guYzo3NjUKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzcxIGJ1aWx0aW4vY29tbWl0LmM6MTM2MiBidWlsdGluL2NvbW1pdC5jOjEzNjMKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NCBidWlsdGluL2NvbW1pdC5jOjEzNjUgYnVpbHRpbi90YWcuYzo0NzAKK21zZ2lkICJjb21taXQiCittc2dzdHIgImNvbW1pdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzkgYnVpbHRpbi9icmFuY2guYzo3NDUKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyBuaMOhbmggbcOgIG7DsyBjaOG7qWEgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTEKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICJIw6BuaCDEkeG7mW5nIGdpdC1icmFuY2g6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1MgorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJsaeG7h3Qga8OqIGPhuqMgbmjDoW5oIGByZW1vdGUtdHJhY2tpbmcnIHbDoCBu4buZaSBi4buZIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1NAorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICJ4w7NhIG3hu5l0IGPDoWNoIMSR4bqneSDEkeG7pyBuaMOhbmggxJHDoyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTUKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICJ4b8OhIG5ow6FuaCAoY2hvIGTDuSBsw6AgY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4pIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1NgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJkaSBjaHV54buDbiBoYXkgxJHhu5VpIHTDqm4gbeG7mXQgbmjDoW5oIHbDoCByZWZsb2cgY+G7p2EgbsOzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1NworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImRpIGNodXnhu4MgaG/hurdjIMSR4buVaSB0w6puIG3hu5l0IG5ow6FuaCwgdGjhuq1tICBjaMOtIGPhuqMga2hpIMSRw61jaCDEkcOjIGPDsyBz4bq1biIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTgKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6FjIHTDqm4gbmjDoW5oIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OQorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJ04bqhbyByZWZsb2cgY+G7p2EgbmjDoW5oIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2MQorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICJz4butYSBtw7QgdOG6oyBjaG8gbmjDoW5oIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2MgorbXNnaWQgImZvcmNlIGNyZWF0aW9uICh3aGVuIGFscmVhZHkgZXhpc3RzKSIKK21zZ3N0ciAiw6lwIGJ14buZYyB04bqhbyAoa2hpIMSRw6Mgc+G6tW4gdOG7k24gdOG6oWkgcuG7k2kpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NQorbXNnaWQgInByaW50IG9ubHkgbm90IG1lcmdlZCBicmFuY2hlcyIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIGPDoWMgbmjDoW5oIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc3MQorbXNnaWQgInByaW50IG9ubHkgbWVyZ2VkIGJyYW5jaGVzIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgY8OhYyBuaMOhbmggxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzc1Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJsaeG7h3Qga8OqIGPDoWMgbmjDoW5oIHRyb25nIGPDoWMgY+G7mXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzg4Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBnaeG6o2kgcXV54bq/dCBIRUFEIG5oxrAgbMOgIG3hu5l0IHRoYW0gY2hp4bq/dSAocmVmKSBo4bujcCBs4buHLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTMgYnVpbHRpbi9jbG9uZS5jOjU2MQorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkgSEVBRCDhu58gZMaw4bubaSByZWZzL2hlYWRzISIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTMKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIHbDoCAtLXZlcmJvc2UgeHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIm5ow6FuaCBgJXMnIGNoxrBhIHPhurVuIGPDsyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICJOaMOhbmggYCVzJyBraMO0bmcgY8OzIHRow7RuZyB0aW4gdGjGsOG7o25nIG5ndeG7k24gKHVwc3RyZWFtKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4OTEKK21zZ2lkICItYSBhbmQgLXIgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IG1ha2Ugc2Vuc2Ugd2l0aCBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisiaGFpIHTDuXkgY2jhu41uIC1hIHbDoCAtciDDoXAgZOG7pW5nIGNobyBs4buHbmggYGdpdCBicmFuY2gnIGtow7RuZyBo4bujcCBsw70gxJHhu5FpIHbhu5tpIHTDqm4gIgorIm5ow6FuaCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtLXNldC11cHN0cmVhbSBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gQ29uc2lkZXIgdXNpbmcgLS0iCisidHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG9cbiIKK21zZ3N0ciAiIgorIkPhu50gLS1zZXQtdXBzdHJlYW0gYuG7iyBwaOG6o24gxJHhu5FpIHbDoCBz4bq9IGLhu4sgeMOzYSBi4buPLiBOw6puIGTDuW5nIC0tdHJhY2sgaG/hurdjIC0tc2V0LSIKKyJ1cHN0cmVhbS10b1xuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBtYWtlICclcycgdHJhY2sgJyVzJywgZG8gdGhpczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk7hur91IGLhuqFuIG114buRbiBgJXMnIHRoZW8gZMO1aSBgJXMnLCB0aOG7sWMgaGnhu4duIGzhu4duaCBzYXU6XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCittc2dzdHIgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iCittc2dzdHIgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICJgJXMnIHThu5F0XG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTYKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICJD4bqnbiBt4buZdCBraG8gY2jhu6lhIMSR4buDIG3DoCB04bqhbyBt4buZdCBidW5kbGUuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICJD4bqnbiBt4buZdCBraG8gY2jhu6lhIMSR4buDIG3DoCBidW5nIG3hu5l0IGJ1bmRsZS4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNDcKK21zZ2lkICJnaXQgY2F0LWZpbGUgKC10fC1zfC1lfC1wfDx0eXBlPnwtLXRleHRjb252KSA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IGNhdC1maWxlICgtdHwtc3wtZXwtcHw8a2nhu4N1PnwtLXRleHRjb252KSA8xJHhu5FpIHTGsOG7o25nPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI0OAorbXNnaWQgImdpdCBjYXQtZmlsZSAoLS1iYXRjaHwtLWJhdGNoLWNoZWNrKSA8IDxsaXN0X29mX29iamVjdHM+IgorbXNnc3RyICJnaXQgY2F0LWZpbGUgKC0tYmF0Y2h8LS1iYXRjaC1jaGVjaykgPCA8ZGFuaC1zw6FjaC3EkeG7kWktdMaw4bujbmc+IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6MjY2Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICI8a2nhu4N1PiBsw6AgbeG7mXQgdHJvbmcgc+G7kTogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNjcKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICJoaeG7g24gdGjhu4sga2nhu4N1IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI2OAorbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgImhp4buDbiB0aOG7iyBrw61jaCB0aMaw4bubYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNzAKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgInRob8OhdCB24bubaSAwIGtoaSBraMO0bmcgY8OzIGzhu5dpIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6MjcxCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImluIG7hu5lpIGR1bmcgxJHhu5FpIHTGsOG7o25nIGThuqFuZyBk4buFIMSR4buNYyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI3MworbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJ24bubaSDEkeG7kWkgdMaw4bujbmcgYmxvYiwgY2jhuqF5IGzhu4duaCB0ZXh0Y29udiB0csOqbiBu4buZaSBkdW5nIGPhu6dhIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI3NQorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyB0aMO0bmcgdGluIHbDoCBu4buZaSBkdW5nIGPhu6dhIGPDoWMgxJHhu5FpIHTGsOG7o25nIGzhuqV5IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI3OAorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdGjDtG5nIHRpbiB24buBIMSR4buRaSB0xrDhu6NuZyBmZWQgIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTEKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IGF0dHIuLi5dIFstLV0gcGF0aG5hbWUuLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgYXR0ci4uLl0gWy0tXSB0w6puLcSRxrDhu51uZy1k4bqrbi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTIKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCBhdHRyLi4uXSA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiIgorImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IGF0dHIuLi5dIDwgPGRhbmgtc8OhY2gtxJHGsOG7nW5nLWThuqtuPiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTkKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgImLDoW8gY8OhbyB04bqldCBj4bqjIGPDoWMgdGh14buZYyB0w61uaCDEkeG6t3QgdHLDqm4gdOG6rXAgdGluIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMAorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJjaOG7iSBz4butIGThu6VuZyAuZ2l0YXR0cmlidXRlcyB04burIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjc1Cittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgIsSR4buNYyB0w6puIHThuq1wIHRpbiB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzCittc2dpZCAiaW5wdXQgcGF0aHMgYXJlIHRlcm1pbmF0ZWQgYnkgYSBudWxsIGNoYXJhY3RlciIKK21zZ3N0ciAiY8OhYyDEkcaw4budbmcgZOG6q24gxJHGsOG7o2MgIG5nxINuIGPDoWNoIGLhu59pIGvDvSB04buxIG51bGwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMjYKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggW29wdGlvbnNdIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbY8OhYy10w7l5LWNo4buNbl0gWy0tXSBbPHThuq1wLXRpbj4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTg3Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgImzhuqV5IHJhIHRvw6BuIGLhu5kgY8OhYyB04bqtcCB0aW4gdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTg4Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICLDqXAgYnXhu5ljIGdoaSDEkcOoIGzDqm4gdOG6rXAgdGluIMSRw6Mgc+G6tW4gY8OzIHThu6sgdHLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTAKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICIiCisia2jDtG5nIGPhuqNuaCBiw6FvIGNobyBuaOG7r25nIHThuq1wIHRpbiB04buTbiB04bqhaSB2w6Aga2jDtG5nIGPDsyB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTIKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgImtow7RuZyBjaGVja291dCBjw6FjIHThuq1wIHRpbiBt4bubaSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5NAorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICJj4bqtcCBuaOG6rXQgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB0cm9uZyB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMgbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDAKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiDEkeG7jWMgZGFuaCBzw6FjaCDEkcaw4budbmcgZOG6q24gdOG7qyB0aGnhur90IGLhu4sgbmjhuq1wIGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDIKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgImdoaSBu4buZaSBkdW5nIHbDoG8gdOG6rXAgdGluIHThuqFtIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAzIGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJzdHJpbmciCittc2dzdHIgImNodeG7l2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDQKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICJraGkgdOG6oW8gY8OhYyB04bqtcCB0aW4sIG7hu5FpIHRow6ptIDxjaHXhu5dpPiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwNworbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICJzYW8gY2jDqXAgcmEgY8OhYyB04bqtcCB0aW4gdOG7qyB0cuG6oW5nIHRow6FpIMSRxrDhu6NjIMSR4bq3dCB0w6puIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUKK21zZ2lkICJnaXQgY2hlY2tvdXQgW29wdGlvbnNdIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgW2PDoWMtdMO5eS1jaOG7jW5dIDxuaMOhbmg+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYKK21zZ2lkICJnaXQgY2hlY2tvdXQgW29wdGlvbnNdIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgW2PDoWMtdMO5eS1jaOG7jW5dIFs8bmjDoW5oPl0gLS0gPHThuq1wLXRpbj4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTYgYnVpbHRpbi9jaGVja291dC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIGAlcycga2jDtG5nIGPDsyBjw6FjIHBoacOqbiBi4bqjbiBj4bunYSBjaMO6bmcgdGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTggYnVpbHRpbi9jaGVja291dC5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gYCVzJyBraMO0bmcgY8OzIGPDoWMgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gYCVzJyBraMO0bmcgY8OzIHThuqV0IGPhuqMgY8OhYyBwaGnDqm4gYuG6o24gY+G6p24gdGhp4bq/dCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiBgJXMnIGtow7RuZyBjw7MgY8OhYyBwaGnDqm4gYuG6o24gY+G6p24gdGhp4bq/dCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIGAlcyc6IGtow7RuZyB0aOG7gyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRow6ptIGvhur90IHF14bqjIGjDsmEgdHLhu5luIGNobyBgJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjM2IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzkgYnVpbHRpbi9jaGVja291dC5jOjI0MgorIzogYnVpbHRpbi9jaGVja291dC5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgImAlcycga2jDtG5nIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIHbhu5tpIGPDoWMgxJHGsOG7nW5nIGThuqtuIGPhuq1wIG5o4bqtdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0OCBidWlsdGluL2NoZWNrb3V0LmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiYCVzJyBraMO0bmcgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgduG7m2kgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCBjw6FjIMSRxrDhu51uZyBk4bqrbiB2w6AgY2h1eeG7g24gxJHhur9uIG5ow6FuaCBgJXMnIGPDuW5nIG3hu5l0IGzDumMuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjY1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjYKK21zZ2lkICJjb3JydXB0IGluZGV4IGZpbGUiCittc2dzdHIgInThuq1wIHRpbiBnaGkgYuG6o25nIG3hu6VjIGzhu6VjIGLhu4sgaOG7j25nIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjk1IGJ1aWx0aW4vY2hlY2tvdXQuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gYCVzJyBraMO0bmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMzMgYnVpbHRpbi9jaGVja291dC5jOjUzNCBidWlsdGluL2Nsb25lLmM6NTg2CisjOiBidWlsdGluL21lcmdlLmM6ODExCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyBt4bubaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0OAorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJi4bqhbiBj4bqnbiBwaOG6o2kgZ2nhuqNpIHF1eeG6v3QgYuG6o25nIG3hu6VjIGzhu6VjIGhp4buHbiB04bqhaSBj4bunYSBi4bqhbiB0csaw4bubYyDEkcOjISIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJ1xuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiByZWZsb2cgY2hvIGAlcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYwMgorbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICJIRUFEIGhp4buHbiBnaeG7nSB04bqhaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLEkOG6t3QgbOG6oWkgbmjDoW5oIGAlcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAixJDDoyBz4bq1biBzw6BuZyB0csOqbiBgJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIsSQw6MgY2h1eeG7g24gdOG7m2kgdsOgIHJlc2V0IG5ow6FuaCBgJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAixJDDoyBjaHV54buDbiDEkeG6v24gbmjDoW5oIG3hu5tpIGAlcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYyMAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLEkMOjIGNodXnhu4NuIMSR4bq/biBuaMOhbmggYCVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gdsOgIG5oaeG7gXUgaMahbiAlZC5cbiIKKworIy4gVGhlIHNpbmd1bGFyIHZlcnNpb24KKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyJD4bqjbmggYsOhbzogYuG6oW4gxJHDoyBy4budaSBi4buPICVkIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgbOG6oWkgxJHhurFuZyBzYXUsIGtow7RuZyDEkcaw4bujYyAiCisia+G6v3QgbuG7kWkgxJHhur9uXG4iCisiYuG6pXQga+G7syBuaMOhbmggbsOgbyBj4bunYSBi4bqhbjpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzFdICIiCisiQ+G6o25oIGLDoW86IGLhuqFuIMSRw6MgcuG7nWkgYuG7jyAlZCBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIGzhuqFpIMSR4bqxbmcgc2F1LCBraMO0bmcgxJHGsOG7o2MgIgorImvhur90IG7hu5FpIMSR4bq/blxuIgorImLhuqV0IGvhu7MgbmjDoW5oIG7DoG8gY+G7p2EgYuG6oW46XG4iCisiXG4iCisiJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIG5ld19icmFuY2hfbmFtZSAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiTuG6v3UgYuG6oW4gbXXhu5FuIGdp4buvIGNow7puZyBi4bqxbmcgY8OhY2ggdOG6oW8gcmEgbeG7mXQgbmjDoW5oIG3hu5tpLCDEkcOieSBjw7MgbOG6vSBsw6AgbeG7mXQgdGjhu51pICIKKyLEkWnhu4NtIHRow61jaCBo4bujcFxuIgorIsSR4buDIGzDoG0gdGjhur8gYuG6sW5nIGzhu4duaDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCB0w6puX25ow6FuaF9t4bubaSAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzMwCittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAibOG7l2kgbuG7mWkgYuG7mSB0cm9uZyBraGkgZGkgY2h1eeG7g24gcXVhIGPDoWMgxJFp4buDbSB4w6l0IGzhuqFpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzM0Cittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIlbhu4sgdHLDrSBr4bq/IHRyxrDhu5tjIGPhu6dhIEhFQUQgbMOgIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzYxIGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTAKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJC4bqhbiB04bqhaSBuaMOhbmggbcOgIG7DsyBjaMawYSBo4buBIMSRxrDhu6NjIHNpbmggcmEiCisKKyMuIGNhc2UgKDEpCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAidGhhbSBjaGnhur91IHNhaTogJXMiCisKKyMuIGNhc2UgKDEpOiB3YW50IGEgdHJlZQorIzogYnVpbHRpbi9jaGVja291dC5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgInRoYW0gY2hp4bq/dSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBjw6J5ICh0cmVlKTolcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2MQorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJjw6FjIMSRxrDhu51uZyBk4bqrbiBraMO0bmcgdGjhu4MgZMO5bmcgY8O5bmcgduG7m2kgY8OhYyBuaMOhbmggY2h1eeG7g24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NjQgYnVpbHRpbi9jaGVja291dC5jOjk2OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJgJXMnIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSBjw6FjIG5ow6FuaCBjaHV54buDbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk3MiBidWlsdGluL2NoZWNrb3V0LmM6OTc1IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODAKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgImAlcycga2jDtG5nIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIHbhu5tpIGAlcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyBjaHV54buDbiBuaMOhbmggxJHhur9uIG3hu5l0IG5vbi1jb21taXQgYCVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDkgYnVpbHRpbi9nYy5jOjE3NworbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiY2jhurduIGPDoWMgYsOhbyBjw6FvIHRp4bq/biB0csOsbmggaG/huqF0IMSR4buZbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEyIGJ1aWx0aW4vY2xvbmUuYzo4OQorIzogYnVpbHRpbi9yZW1vdGUuYzoxNjkgYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJicmFuY2giCittc2dzdHIgIm5ow6FuaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTEKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAidOG6oW8gdsOgIGNoZWNrb3V0IG3hu5l0IG5ow6FuaCBt4bubaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTMKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICJjcmVhdGUvcmVzZXQgdsOgIGNoZWNrb3V0IG3hu5l0IG5ow6FuaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTQKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJ04bqhbyByZWZsb2cgY2hvIG5ow6FuaCBt4bubaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTUKK21zZ2lkICJkZXRhY2ggdGhlIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJy4budaSBi4buPIEhFQUQgdOG6oWkgbOG6p24gY2h1eeG7g24gZ2lhbyBkYW5oIG5naMSpYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTYKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAixJHhurd0IHRow7RuZyB0aW4gdGjGsOG7o25nIG5ndeG7k24gKHVwc3RyZWFtKSBjaG8gbmjDoW5oIG3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxOAorbXNnaWQgIm5ldyBicmFuY2giCittc2dzdHIgIm5ow6FuaCBt4bubaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTgKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgIm5ow6FuaCBt4buTIGPDtGkgbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDE5Cittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICIiCisibOG6pXkgcmEgKGNoZWNrb3V0KSBwaGnDqm4gYuG6o24gY+G7p2EgY2jDum5nIHRhIGNobyBjw6FjIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjEKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorImzhuqV5IHJhIChjaGVja291dCkgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyBo4buNIGNobyBjw6FjIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjMKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAiw6lwIGJ14buZYyBs4bqleSByYSAoY2hlY2tvdXQpIChi4buPIMSRaSBuaOG7r25nIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAyNAorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJ0aOG7sWMgaGnhu4duIGjDsmEgdHLhu5luIGtp4buDdSAzLXdheSB24bubaSBuaMOhbmggbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDI1IGJ1aWx0aW4vbWVyZ2UuYzoyMTUKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgImPhuq1wIG5o4bqtdCBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjYgYnVpbHRpbi9sb2cuYzoxMTExIHBhcnNlLW9wdGlvbnMuaDoyNDEKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAia2nhu4N1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAyNworbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgInh1bmcgxJHhu5l0IGtp4buDdSAoaMOyYSB0cuG7mW4gaGF5IGRpZmYzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMzAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCBuby1zdWNoLWJyYW5jaCciCittc2dzdHIgImfhu6NpIMO9IHRo4bupIGhhaSBgZ2l0IGNoZWNrb3V0IGtow7RuZy1uaMOhbmgtbsOgby1uaMawLXbhuq15JyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTQKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIlTDuXkgY2jhu41uIC1ifC1CIHbDoCAtLW9ycGhhbiBsb+G6oWkgdOG7qyBs4bqrbiBuaGF1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3MQorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayBj4bqnbiB0w6puIG3hu5l0IG5ow6FuaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzgKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIlRoaeG6v3UgdMOqbiBuaMOhbmg7IGjDo3kgdGjhu60gLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTEzCittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDEkcOjIGNobyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLlxuIgorIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCB2w6AgY2h1eeG7g24gdGjDoG5oIG5ow6FuaCBgJXMnIGPDuW5nIGzDumNcbiIKKyJC4bqhbiDEkcOjIGPDsyDDvSDEkeG7i25oIGNoZWNrb3V0IGAlcycgY8OhaSBtw6Aga2jDtG5nIHRo4buDIMSRxrDhu6NjIHBow6JuIGdp4bqjaSBuaMawIGzDoCBs4bqnbiAiCisiY2h1eeG7g24gZ2lhbyAoY29tbWl0KT8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBraMO0bmcgbmjhuq1uIG3hu5l0IMSR4buRaSBz4buRIMSRxrDhu51uZyBk4bqrbiBgJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyOQorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIHbDoCAtLW1lcmdlIGzDoCB4dW5nIGto4bqvYyB24bubaSBuaGF1IGtoaVxuIgorImNoZWNrb3V0IGLhuqNuZyBt4bulYyBs4bulYyAoaW5kZXgpLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE5Cittc2dpZCAiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLW5dIFstcV0gWy1lIDxt4bqrdT5dIFsteCB8IC1YXSBbLS1dIDzEkcaw4budbmctZOG6q24+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTEKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyB0w6puIGPhu6dhIGPDoWMgdOG6rXAgdGluIMSRw6MgZ+G7oSBi4buPIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTMKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAiw6lwIGJ14buZYyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjU1Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICJn4buhIGLhu48gdG/DoG4gYuG7mSB0aMawIG3hu6VjIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTYgYnVpbHRpbi9kZXNjcmliZS5jOjQxMyBidWlsdGluL2dyZXAuYzo4MDMKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0OTEgYnVpbHRpbi9uYW1lLXJldi5jOjIzMSBidWlsdGluL3Nob3ctcmVmLmM6MTk5Cittc2dpZCAicGF0dGVybiIKK21zZ3N0ciAibeG6q3UiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1NworbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICJ0aMOqbSA8beG6q3U+IHbDoG8gdHJvbmcgcXVpIHThuq9jIGLhu48gcXVhIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTgKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICLEkeG7k25nIHRo4budaSBn4buhIGLhu48gY+G6oyBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjAKK21zZ2lkICJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJjaOG7iSBn4buhIGLhu48gbmjhu69uZyB04bqtcCB0aW4gYuG7iyBi4buPIHF1YSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjc4Cittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIteCB2w6AgLVgga2jDtG5nIHRo4buDIGTDuW5nIGPDuW5nIG3hu5l0IGzDumMgduG7m2kgbmhhdSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgyCittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIMSRxrDhu6NjIMSR4bq3dCB0aMOgbmggdHJ1ZSB2w6Aga2jDtG5nIMSRxrBhIHJhIHTDuXkgY2jhu41uICAtbiBtw6AgY8WpbmcgIgorImtow7RuZyAtZjsgdOG7qyBjaOG7kWkgbOG7h25oIGThu41uIGThurlwIChjbGVhbikiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBt4bq3YyDEkeG7i25oIMSRxrDhu6NjIMSR4bq3dCB0aMOgbmggdHJ1ZSB2w6Aga2jDtG5nIMSRxrBhIHJhIHTDuXkgY2jhu41uICAtbiAiCisibcOgIGPFqW5nIGtow7RuZyAtZjsgdOG7qyBjaOG7kWkgbOG7h25oIGThu41uIGThurlwIChjbGVhbikiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNTUgYnVpbHRpbi9jbGVhbi5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiQ8OzIHRo4buDIGfhu6EgYuG7jyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTU5IGJ1aWx0aW4vY2xlYW4uYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAixJBhbmcgZ+G7oSBi4buPICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNjIgYnVpbHRpbi9jbGVhbi5jOjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgZ+G7oSBi4buPICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIG5vdCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGfhu6EgYuG7jyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCByZW1vdmluZyAlc1xuIgorbXNnc3RyICJLaMO0bmcgeMOzYSAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzYKK21zZ2lkICJnaXQgY2xvbmUgW29wdGlvbnNdIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBbY8OhYy10w7l5LWNo4buNbl0gWy0tXSA8a2hvPiBbPHQubeG7pWM+XSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0IGJ1aWx0aW4vZmV0Y2guYzo4MiBidWlsdGluL21lcmdlLmM6MjEyCisjOiBidWlsdGluL3B1c2guYzozOTkKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIsOpcCBideG7mWMgYsOhbyBjw6FvIHRp4bq/biB0csOsbmgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NgorbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICJraMO0bmcgdOG6oW8gbeG7mXQgY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NyBidWlsdGluL2Nsb25lLmM6NjkgYnVpbHRpbi9pbml0LWRiLmM6NDg4Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJ04bqhbyBraG8gY2jhu6lhIGJhcmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MgorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICJ04bqhbyBraG8gYuG6o24gc2FvIChtaXJyb3IpIChuZ+G7pSDDvSBsw6AgYmFyZSkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NAorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLEkeG7gyBuaMOibiBi4bqjbiB04burIGtobyBu4buZaSBi4buZIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzYKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAia2jDtG5nIHPhu60gZOG7pW5nIGxpw6puIGvhur90IGPhu6luZyBu4buZaSBi4buZLCBsdcO0biBzYW8gY2jDqXAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3OAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJjw6BpIMSR4bq3dCDEkcOieSBsw6Aga2hvIGNoaWEgc+G6uyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwIGJ1aWx0aW4vY2xvbmUuYzo4MgorbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgImto4bufaSB04bqhbyBtw7QtxJF1bi1jb24gdHJvbmcgYuG6o24gc2FvIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODMgYnVpbHRpbi9pbml0LWRiLmM6NDg1Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICJ0aMawLW3hu6VjLXThuqFtIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODQgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAidGjGsCBt4bulYyBtw6AgdOG6oWkgxJHDsyBjw6FjIG3huqt1IHPhur0gxJHGsOG7o2MgZMO5bmciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NgorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJraG8gdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODcgYnVpbHRpbi9jb2x1bW4uYzoyNiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgIm5hbWUiCittc2dzdHIgInTDqm4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4OAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAiZMO5bmcgPHTDqm4+IHRoYXkgdsOsIGBvcmlnaW4nIMSR4buDIHRoZW8gZMO1aSB0aMaw4bujbmcgbmd14buTbiAodXB0cmVhbSkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgImzhuqV5IHJhIG5ow6FuaCAoY2hlY2tvdXQgPG5ow6FuaD4pIHRoYXkgdsOsIEhFQUQgY+G7p2EgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyCittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIMSR4bq/biBnaXQtdXBsb2FkLXBhY2sgdHLDqm4gbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzIGJ1aWx0aW4vZmV0Y2guYzo4MyBidWlsdGluL2dyZXAuYzo3NDgKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAixJHhu5kgc8OidSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICJ04bqhbyBi4bqjbiBzYW8ga2jDtG5nIMSR4bqneSDEkeG7pyBjaG8gbeG7qWMgc8OidSDEkcOjIGNobyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2Cittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICJuaMOibiBi4bqjbiAoY2xvbmUpIGNo4buJIG3hu5l0IG5ow6FuaCwgSEVBRCBob+G6t2MgLS1icmFuY2giCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NyBidWlsdGluL2luaXQtZGIuYzo0OTQKK21zZ2lkICJnaXRkaXIiCittc2dzdHIgImdpdGRpciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgImtow7RuZyBkw7luZyBjaHVuZyB0aMawIG3hu6VjIGTDoG5oIHJpw6puZyBjaG8gZ2l0IHbDoCB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTkKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgImtow7NhPWdpw6EgdHLhu4siCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgIsSR4bq3dCBj4bqldSBow6xuaCBiw6puIHRyb25nIG3hu5l0IGtobyBjaOG7qWEgbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCBkaXJlY3RvcnkuIgorbXNnc3RyICJraG8gdGhhbSBjaGnhur91IGAlcycga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdGjGsCBt4bulYyBu4buZaSBi4buZLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJ04bqhbyB0aMawIG3hu6VjIFwiJXNcIiBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwOCBidWlsdGluL2RpZmYuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBzdGF0IChs4bqleSB0cuG6oW5nIHRow6FpIHbhu4EpIGAlcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIHThu5NuIHThuqFpIG5oxrBuZyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCB0aMawIG3hu6VjIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzXG4iCittc2dzdHIgImzhu5dpIHN0YXQgKGzhuqV5IHRy4bqhbmcgdGjDoWkgduG7gSkgJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHThuqFvIMSRxrDhu6NjIGxpw6puIGvhur90IG3hu4FtICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGNow6lwIHThuq1wIHRpbiB04bubaSBgJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgImhvw6BuIHThuqV0LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgbmjDoW5oIG3DoXkgY2jhu6cgJXMgxJHhu4MgbmjDom4gYuG6o24gKGNsb25lKS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NTIKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgInJlZmVycyBIRUFEIG3DoXkgY2jhu6cgIGNo4buJIMSR4bq/biByZWYga2jDtG5nIHThu5NuIHThuqFpLCBraMO0bmcgdGjhu4MgY2hlY2tvdXQuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OTAKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJDw7MgcXXDoSBuaGnhu4F1IMSR4buRaSBz4buRLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY5NAorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiQuG6oW4gcGjhuqNpIGNo4buJIMSR4buLbmggbeG7mXQga2hvIMSR4buDIG3DoCBuaMOibiBi4bqjbiAoY2xvbmUpLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgInTDuXkgY2jhu41uIC0tYmFyZSB2w6AgLS1vcmlnaW4gJXMgeHVuZyBraOG6r2MgbmhhdS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJraG8gY2jhu6lhIGAlcycgY2jGsGEgdOG7k24gdOG6oWkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MjQKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCBi4buLIGzhu50gxJFpIGtoaSBuaMOibiBi4bqjbiBu4buZaSBi4buZOyBow6N5IHPhu60gZOG7pW5nIGZpbGU6Ly8gxJHhu4MgdGhheSB0aOG6vy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIMSRw61jaCBgJXMnIMSRw6MgY8OzIHThu6sgdHLGsOG7m2MgdsOgIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHRoxrAgbeG7pWMgcuG7l25nLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImPDonkgbMOgbSB2aeG7h2MgYCVzJyDEkcOjIHPhurVuIHThu5NuIHThuqFpIHLhu5NpLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1NyBidWlsdGluL2Nsb25lLmM6NzcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gY8OhYyB0aMawIG3hu6VjIGThuqtuIMSR4bqndSBj4bunYSBgJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnLiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIGPDonkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBkaXIgYCVzJy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIsSQYW5nIG5ow6JuIGLhuqNuIHRow6BuaCBraG8gY2jhu6lhIGJhcmUgYCVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIsSQYW5nIG5ow6JuIGLhuqNuIHRow6BuaCBgJXMnLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gY2xvbmUgJXMiCittc2dzdHIgIktow7RuZyBiaeG6v3QgbMOgbSBjw6FjaCBuw6BvIMSR4buDIG5ow6JuIGLhuqNuIChjbG9uZSkgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIk5ow6FuaCBtw6F5IGNo4bunICVzIGtow7RuZyB0w6xtIHRo4bqleSB0cm9uZyB0aMaw4bujbmcgbmd14buTbiAodXBzdHJlYW0pICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODc5Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiQuG6oW4gaMOsbmggbmjGsCBsw6AgxJHDoyBuaMOibiBi4bqjbiBt4buZdCBraG8gdHLhu5FuZyBy4buXbmcuIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjkKK21zZ2lkICJnaXQgY29sdW1uIFtvcHRpb25zXSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbY8OhYy10w7l5LWNo4buNbl0iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjYKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgInTDrG0ga2nhur9tIGJp4bq/biBj4bqldSBow6xuaCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNyBidWlsdGluL2NvbHVtbi5jOjI4Cittc2dpZCAibGF5b3V0IHRvIHVzZSIKK21zZ3N0ciAiYuG7kSBj4bulYyDEkeG7gyBkw7luZyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIsSQ4buZIHLhu5luZyB04buRaSDEkWEiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICJDaMOobiB0aMOqbSBraG/huqNuZyB0cuG7kW5nIHbDoG8gYuG7nSBiw6puIHRyw6FpIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIkNow6huIHRow6ptIGtob+G6o25nIHRy4bqvbmcgdsOgbyB0aeG6v3AgZ2nDoXAgYsOqbiBwaOG6o2kiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAiQ2jDqG4gdGjDqm0ga2hv4bqjbmcgdHLhuq9uZyBnaeG7r2EgY8OhYyBj4buZdCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIHBo4bqjaSBsw6AgxJHhu5FpIHPhu5EgxJHhuqd1IHRpw6puIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM0Cittc2dpZCAiZ2l0IGNvbW1pdCBbb3B0aW9uc10gWy0tXSA8ZmlsZXBhdHRlcm4+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFtjw6FjLXTDuXktY2jhu41uXSBbLS1dIDxt4bqrdS104bqtcC10aW4+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5Cittc2dpZCAiZ2l0IHN0YXR1cyBbb3B0aW9uc10gWy0tXSA8ZmlsZXBhdHRlcm4+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFtjw6FjLXTDuXktY2jhu41uXSBbLS1dIDxt4bqrdS104bqtcC10aW4+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiVMOqbiB2w6AgxJHhu4thIGNo4buJIHRoxrAgxJFp4buHbiB04butIGPhu6dhIGLhuqFuIMSRxrDhu6NjIGPhuqV1IGjDrG5oIG3hu5l0IGPDoWNoIHThu7EgxJHhu5luZyB0csOqbiBjxqEgIgorInPhu59cbiIKKyJ0w6BpIGtob+G6o24gdsOgIMSR4buLYSBjaOG7iSBtw6F5IGNo4bunIGPhu6dhIGLhuqFuLiBYaW4gaMOjeSBraeG7g20gdHJhIHhlbSBjaMO6bmcgY8OzIGNow61uaCAiCisieMOhYyBraMO0bmcuXG4iCisiQuG6oW4gY8OzIHRo4buDIGNo4bq3biBuaOG7r25nIHRow7RuZyBiw6FvIGtp4buDdSBuw6B5IGLhurFuZyBjw6FjaCBjw6BpIMSR4bq3dCBjw6FjIHRow7RuZyB0aW4gIgorInRyw6puIG3hu5l0IGPDoWNoIHLDtSByw6BuZzpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJUw6puIGPhu6dhIGLhuqFuXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIlNhdSBraGkgdGjhu7FjIGhp4buHbiB4b25nLCBi4bqhbiBjw7MgdGjhu4Mgc+G7rWEgY2jhu69hIMSR4buLbmggZGFuaCDEkcaw4bujYyBz4butIGThu6VuZyBjaG8gbOG6p24gIgorImNodXnhu4NuIGdpYW8gKGNvbW1pdCkgbsOgeSB24bubaSBs4buHbmg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU2Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisiQuG6oW4gxJHDoyB5w6p1IGPhuqd1IGFtZW5kICh0dSBi4buVKSBwaOG6p24gbOG7m24gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIGfhuqduIMSRw6J5LCAiCisibmjGsG5nIGzDoG0gbmjGsCB0aOG6v1xuIgorImPDsyB0aOG7gyBsw6BtIGNobyBuw7MgdHLhu58gbsOqbiB0cuG7kW5nIHLhu5duZy4gQuG6oW4gY8OzIHRo4buDIGzhurdwIGzhuqFpIGzhu4duaCBj4bunYSBtw6xuaCBi4bqxbmcgIgorIi0tYWxsb3ctZW1wdHksXG4iCisiaG/hurdjIGzDoCBi4bqhbiBn4buhIGLhu48gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIG3hu5l0IGPDoWNoIGhvw6BuIHRvw6BuIGLhurFuZyBs4buHbmg6XG4iCisiXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MQorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IHJlc2V0J1xuIgorbXNnc3RyICIiCisiTOG6p24gY2hlcnJ5LXBpY2sgdHLGsOG7m2MgaGnhu4duIG5heSB0cuG7kW5nIHLhu5duZywgY8OzIGzhur0gbMOgIGLhu59pIHbDrCBz4buxIHBow6JuIGdp4bqjaSB4dW5nICIKKyLEkeG7mXQuXG4iCisiTuG6v3UgYuG6oW4gbXXhu5FuIGNodXnhu4NuIGdpYW8gbsOzIGNobyBkw7kgdGjhur8gbsOgbyDEkWkgbuG7r2EsIHPhu60gZOG7pW5nOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKyJO4bq/dSBraMO0bmcsIGjDo3kgdGjhu60gZMO5bmcgYGdpdCByZXNldCdcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoyNTcKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB0aMOhbyBk4buhIEhFQUQgxJHhu5FpIHTGsOG7o25nIGPDonkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mjk5Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBi4bqjbmcgbeG7pWMgbOG7pWMgdOG6oW0gdGjhu51pIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMwNQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgInZp4buHYyB0aMOqbSB0xrDGoW5nIHTDoWMgZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzM4IGJ1aWx0aW4vY29tbWl0LmM6MzU5IGJ1aWx0aW4vY29tbWl0LmM6NDA5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyBt4bubaSAobmV3X2luZGV4KSIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTAKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiB2aeG7h2MgY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBj4bulYyBi4buZIHRyb25nIGtoaSDEkWFuZyDEkcaw4bujYyBow7JhICIKKyJ0cuG7mW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5MgorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIHZp4buHYyBjaHV54buDbiBnaWFvIChjb21taXQpIGLhu5kgcGjhuq1uIHRyb25nIGtoaSDEkWFuZyBjaGVycnktIgorInBpY2suIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMgorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAia2jDtG5nIMSR4buNYyDEkcaw4bujYyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDIyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyB04bqhbSB0aOG7nWkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTA5IGJ1aWx0aW4vY29tbWl0LmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0OiAlcyIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTM4Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAixJHhu5FpIHPhu5EgLS1hdXRob3IgYuG7iyBk4buLIGjDrG5oIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaWRlbnQgc3RyaW5nOiAnJXMnIgorbXNnc3RyICJDaHXhu5dpIHRo4buldCBs4buBIMSR4bqndSBkw7JuZyBk4buLIGjDrG5oOiBgJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU5NiBidWlsdGluL2NvbW1pdC5jOjYyOSBidWlsdGluL2NvbW1pdC5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0ga2nhur9tIGNvbW1pdCAobOG6p24gY2h1eeG7g24gZ2lhbykgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjA4IGJ1aWx0aW4vc2hvcnRsb2cuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiKMSRYW5nIMSR4buNYyB0aMO0bmcgxJFp4buHcCBuaOG6rXQga8O9IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbilcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MTAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBuaOG6rXQga8O9IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIMSR4buNYyDEkcaw4bujYyB04buHcCBuaOG6rXQga8O9IGAlcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjIwCittc2dpZCAiY29tbWl0IGhhcyBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIGPDsyBnaGkgY2jDuiB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MzYKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY0MAorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyBgJXMnLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDUKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIG3huqt1IGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiTsOzIHRyw7RuZyBnaeG7kW5nIHbhu5tpIHZp4buHYyBi4bqhbiDEkWFuZyBjaHV54buDbiBnaWFvIG3hu5l0IGzhuqduIGjDsmEgdHLhu5luLlxuIgorIk7hur91IGtow7RuZyBwaOG6o2kgduG6rXksIHhpbiBow6N5IGfhu6EgYuG7jyB04bqtcCB0aW5cbiIKKyJcdCVzXG4iCisidsOgIHRo4butIGzhuqFpLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOw7MgdHLDtG5nIGdp4buRbmcgduG7m2kgdmnhu4djIGLhuqFuIMSRYW5nIGNodXnhu4NuIGdpYW8gbeG7mXQgbOG6p24gY2hlcnJ5LXBpY2suXG4iCisiTuG6v3Uga2jDtG5nIHBo4bqjaSB24bqteSwgeGluIGjDo3kgZ+G7oSBi4buPIHThuq1wIHRpblxuIgorIlx0JXNcbiIKKyJ2w6AgdGjhu60gbOG6oWkuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMzCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSMOjeSBuaOG6rXAgdsOgbyBjw6FjIHRow7RuZyB0aW4gxJHhu4MgZ2nhuqNpIHRow61jaCBjw6FjIHRoYXkgxJHhu5VpIGPhu6dhIGLhuqFuLiBOaOG7r25nIGTDsm5nICIKKyLEkcaw4bujY1xuIgorImLhuq90IMSR4bqndSBi4bqxbmcgYCMnIHPhur0gxJHGsOG7o2MgYuG7jyBxdWEsIHBo4bqnbiBjaMO6IHRow61jaCBuw6B5IG7hur91IHLhu5duZyBz4bq9IGzDoG0gaOG7p3kgYuG7jyAiCisibOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzgKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSMOjeSBuaOG6rXAgdsOgbyBjw6FjIHRow7RuZyB0aW4gxJHhu4MgZ2nhuqNpIHRow61jaCBjw6FjIHRoYXkgxJHhu5VpIGPhu6dhIGLhuqFuLk5o4buvbmcgZMOybmcgIgorIsSRxrDhu6NjXG4iCisiYuG6r3QgxJHhuqd1IGLhurFuZyBgIycgc+G6vSDEkcaw4bujYyBi4buPIHF1YTsgYuG6oW4gY8OzIHRo4buDIHjDs2EgY2jDum5nIMSRaSBu4bq/dSBtdeG7kW4uXG4iCisiUGjhuqduIGNow7ogdGjDrWNoIG7DoHkgbuG6v3UgcuG7l25nIHPhur0gbMOgbSBo4buneSBi4buPIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlcyIKK21zZ3N0ciAiJXNUw6FjIGdp4bqjOiAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICVzIgorbXNnc3RyICIlc05nxrDhu51pIGNodXnhu4NuIGdpYW8gKGNvbW1pdCk6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3OAorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJraMO0bmcgxJHhu41jIMSRxrDhu6NjIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MTUKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHjDonkgZOG7sW5nIGPDonkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODMwIGJ1aWx0aW4vdGFnLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiWGluIGjDo3kgw6FwIGThu6VuZyB0aMO0bmcgxJFp4buHcCBz4butIGThu6VuZyBob+G6t2MgbMOgIHTDuXkgY2jhu41uIC1tIGhv4bq3YyBsw6AgLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGV4aXN0aW5nIGF1dGhvciBmb3VuZCB3aXRoICclcyciCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSB0w6FjIGdp4bqjIGPDsyBz4bq1biB24bubaSBgJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk0MiBidWlsdGluL2NvbW1pdC5jOjExNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICJDaOG6vyDEkeG7mSBjaG8gY8OhYyB04bqtcCB0aW4ga2jDtG5nIGLhu4sgdGhlbyB24bq/dCBraMO0bmcgaOG7o3AgbOG7hyBgJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk4MgorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIlPhu60gZOG7pW5nIGPhuqMgaGFpIHTDuXkgY2jhu41uIC0tcmVzZXQtYXV0aG9yIHbDoCAtLWF1dGhvciBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5MworbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICJLaMO0bmcgY8OzIGfDrCDEkeG7gyBhbWVuZCAodHUgYuG7lSkgY+G6oy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTk2Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiIgorIkLhuqFuIMSRYW5nIOG7nyBnaeG7r2EgY+G7p2EgcXXDoSB0csOsbmggaMOyYSB0cuG7mW4gLS0ga2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gYW1lbmQgKHR1IGLhu5UpLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICIiCisiQuG6oW4gxJFhbmcg4bufIGdp4buvYSBj4bunYSBxdcOhIHRyw6xuaCBjaGVycnktcGljayAtLSBraMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiBhbWVuZCAodHUgIgorImLhu5UpLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDAxCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiAtLXNxdWFzaCB2w6AgLS1maXh1cCBraMO0bmcgdGjhu4Mgc+G7rSBk4bulbmcgY8O5bmcgduG7m2kgbmhhdSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDExCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIkNo4buJIG3hu5l0IHTDuXkgY2jhu41uIHRyb25nIHPhu5EgLWMvLUMvLUYvLS1maXh1cCDEkcaw4bujYyBz4butIGThu6VuZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDEzCittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLy0tZml4dXAuIgorbXNnc3RyICJUw7l5IGNo4buNbiAtbSBraMO0bmcgdGjhu4MgxJHGsOG7o2MgdOG7lSBo4bujcCBjw7luZyB24bubaSAtYy8tQy8tRi8tLWZpeHVwLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDIxCittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiIgorIi0tcmVzZXQtYXV0aG9yIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSB0w7l5IGNo4buNbiAtQywgLWMgaGF5IC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMzgKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJDaOG7iSBt4buZdCB0cm9uZyBjw6FjIHTDuXkgY2jhu41uIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIMSRxrDhu6NjICIKKyJz4butIGThu6VuZy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA0MAorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiS2jDtG5nIMSRxrDhu51uZyBk4bqrbiB24bubaSBjw6FjIHTDuXkgY2jhu41uIC0taW5jbHVkZS8tLW9ubHkga2jDtG5nIGjhu6NwIGzDvS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA0MgorbXNnaWQgIkNsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iCittc2dzdHIgIkdp4buPaS4uLiAgdHUgYuG7lSBjw6FpIGN14buRaSB24bubaSBi4bqjbmcgbeG7pWMgbOG7pWMgcGhpIG5naMSpYS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA0NAorbXNnaWQgIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG5vciAtbzsgYXNzdW1pbmcgLS1vbmx5IHBhdGhzLi4uIgorbXNnc3RyICIiCisiTmjhu69uZyDEkcaw4budbmcgZOG6q24gcsO1IHLDoG5nIMSRxrDhu6NjIGNo4buJIHJhIGtow7RuZyBjw7MgdMO5eSBjaOG7jW4gLWkgY8Wpbmcga2jDtG5nIC1vOyDEkWFuZyAiCisiZ2nhuqMgxJHhu4tuaCAtLW9ubHkgbmjhu69uZy3Ekcaw4budbmctZOG6q24uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NCBidWlsdGluL3RhZy5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgZOG7jW4gZOG6uXAga2jDtG5nIGjhu6NwIGzhu4cgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1OQorbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIkPDoWMgxJHGsOG7nW5nIGThuqtuIHbhu5tpIHTDuXkgY2jhu41uIC1hIGtow7RuZyBo4bujcCBsw70uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTYgYnVpbHRpbi9jb21taXQuYzoxMzg0Cittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICJoaeG7g24gdGjhu4sgdHLhuqFuZyB0aMOhaSDhu58gZOG6oW5nIHPDumMgdMOtY2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE1OCBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRow7RuZyB0aW4gbmjDoW5oIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjAgYnVpbHRpbi9jb21taXQuYzoxMzg4IGJ1aWx0aW4vcHVzaC5jOjM4OQorbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICJr4bq/dCB4deG6pXQgZOG6oW5nIG3DoXktY8OzLXRo4buDLcSR4buNYyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTYzIGJ1aWx0aW4vY29tbWl0LmM6MTM5MAorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICJjaOG6pW0gZOG7qXQgY8OhYyBt4bulYyBi4bqxbmcgTlVMIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjUgYnVpbHRpbi9jb21taXQuYzoxMzkzIGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2MzYKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2MzkgYnVpbHRpbi90YWcuYzo0NjEKK21zZ2lkICJtb2RlIgorbXNnc3RyICJjaOG6vyDEkeG7mSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY2IGJ1aWx0aW4vY29tbWl0LmM6MTM5MworbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgIGThuqV1IHbhur90LCBjw6FjIGNo4bq/IMSR4buZIHTDuXkgY2jhu41uOiAgYWxsLCAiCisibm9ybWFsLCBuby4gKE3hurdjIMSR4buLbmg6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2OQorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIOG6qW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MCBwYXJzZS1vcHRpb25zLmg6MTUxCittc2dpZCAid2hlbiIKK21zZ3N0ciAia2hpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzEKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyJi4buPIHF1YSBjw6FjIHRoYXkgxJHhu5VpIHRyb25nIG3DtC3EkXVuIGNvbiwgdMO5eSBjaOG7jW4ga2hpOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoTeG6t2MgxJHhu4tuaDogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTczCittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGRhbmggc8OhY2ggY8OhYyB04bqtcC10aW4gY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIHRyb25nIGPDoWMgY+G7mXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTI0MgorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgImtow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIG3hu5tpIGjGoW4gxJHDoyDEkcaw4bujYyB04bqhbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjQ0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCBj4bunYSDEkeG7kWkgdMaw4bujbmcgY2h1eeG7g24gZ2lhbyBt4bubaSBoxqFuIMSRw6MgxJHGsOG7o2MgdOG6oW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTI4NQorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgIsSRw6MgcuG7nWkga2jhu49pIEhFQUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTI4NworbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKHJvb3QtY29tbWl0KSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU0Cittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyB04buVbmcga+G6v3Qgc2F1IGtoaSBjaHV54buDbiBnaWFvIHRow6BuaCBjw7RuZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU1Cittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJoaeG7g24gdGjhu4sgc+G7sSBraMOhYyBiaeG7h3QgdHJvbmcgbeG6q3UgdGluIG5o4bqvbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTcKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIGdoaSBjaMO6IGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU4IGJ1aWx0aW4vdGFnLmM6NDU5Cittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAixJHhu41jIGNow7ogdGjDrWNoIHThu6sgdOG6rXAgdGluIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTkKK21zZ2lkICJhdXRob3IiCittc2dzdHIgInTDoWMgZ2nhuqMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1OQorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICJnaGkgxJHDqCB0w6FjIGdp4bqjIGNobyBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MCBidWlsdGluL2djLmM6MTc4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAibmfDoHkgdGjDoW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjAKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgImdoaSDEkcOoIG5nw6B5IHRow6FuZyBjaG8gY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjEgYnVpbHRpbi9tZXJnZS5jOjIwNiBidWlsdGluL25vdGVzLmM6NTM3CisjOiBidWlsdGluL25vdGVzLmM6Njk0IGJ1aWx0aW4vdGFnLmM6NDU3Cittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAidGjDtG5nIMSRaeG7h3AiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MQorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJjaMO6IHRow61jaCBj4bunYSBs4bqnbiBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisiZMO5bmcgbOG6oWkgY8OhYyBnaGkgY2jDuiB04burIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgxJHDoyBjaG8gbmjGsG5nIGPDsyBjaG8gc+G7rWEgY2jhu69hIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjMKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiZMO5bmcgbOG6oWkgY8OhYyBnaGkgY2jDuiB04burIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJkw7luZyBnaGkgY2jDuiBjw7MgxJHhu4tuaCBk4bqhbmcgYXV0b3NxdWFzaCDEkeG7gyBz4butYSBjaOG7r2EgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIGNo4buJIHJhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjUKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorImTDuW5nIGzhu51pIG5o4bqvbiBjw7MgxJHhu4tuaCBk4bqhbmcgdOG7sSDEkeG7mW5nIG7DqW4gxJHhu4MgbsOpbiBs4bqhaSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gxJHDoyBjaOG7iSAiCisicmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NgorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIiIKKyJs4bqnbiBjaHV54buDbiBnaWFvIG5o4bqtbiB0w7RpIGzDoCB0w6FjIGdp4bqjICjEkcaw4bujYyBkw7luZyB24bubaSB0w7l5IGNo4buNbiAtQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY3IGJ1aWx0aW4vbG9nLmM6MTA2OCBidWlsdGluL3JldmVydC5jOjEwOQorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAidGjDqm0gZMOybmcgU2lnbmVkLW9mZi1ieToiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2OAorbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAic+G7rSBk4bulbmcgdOG6rXAgdGluIG3huqt1IMSRw6MgY2hvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjkKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiw6lwIGJ14buZYyBz4butYSBs4bqnbiBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIm3hurdjIMSR4buLbmgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MCBidWlsdGluL3RhZy5jOjQ2MgorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgImzDoG0gdGjhur8gbsOgbyDEkeG7gyBj4bqvdCBi4buPIGtob+G6o25nIHRy4bqvbmcgdsOgICNnaGljaMO6IHThu6sgbeG6qXUgdGluIG5o4bqvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzcxCittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImJhbyBn4buTbSBjw6FjIHRy4bqhbmcgdGjDoWkgZ2hpIG3huqt1IGdoaSBjaMO6IGNodXnhu4NuIGdpYW8gKGNvbW1pdCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MiBidWlsdGluL21lcmdlLmM6MjEzIGJ1aWx0aW4vdGFnLmM6NDYzCittc2dpZCAia2V5IGlkIgorbXNnc3RyICJpZCBraMOzYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzczIGJ1aWx0aW4vbWVyZ2UuYzoyMTQKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgImvDvSBs4bqnbiBjb21taXQgZMO5bmcgR1BHIgorCisjLiBlbmQgY29tbWl0IG1lc3NhZ2Ugb3B0aW9ucworIzogYnVpbHRpbi9jb21taXQuYzoxMzc2Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIkPDoWMgdMO5eSBu4buZaSBkdW5nIGdoaSBjaMO6IGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc3Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJjaHV54buDbiBnaWFvIHThuqV0IGPhuqMgY8OhYyB04bqtcCB0aW4gY8OzIHRoYXkgxJHhu5VpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzgKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgInRow6ptIGPDoWMgdOG6rXAgdGluIMSRw6MgY2jhu4kgcmEgdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMgxJHhu4MgY2h1eeG7g24gZ2lhbyAoY29tbWl0KSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc5Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgInRow6ptIGPDoWMgdOG6rXAtdGluIGLhurFuZyB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MAorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgInRow6ptIGPDoWMgdGhheSDEkeG7lWkgYuG6sW5nIHTGsMahbmcgdMOhYyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgxCittc2dpZCAiY29tbWl0IG9ubHkgc3BlY2lmaWVkIGZpbGVzIgorbXNnc3RyICJjaOG7iSBjaHV54buDbiBnaWFvIGPDoWMgdOG6rXAgdGluIMSRw6MgY2jhu4kgcmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MgorbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGhvb2siCittc2dzdHIgInbDsm5nIHF1YSBtw7NjIChob29rKSBwcmUtY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODMKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICJoaeG7g24gdGjhu4sgeGVtIGPDoWkgZ8OsIGPDsyB0aOG7gyDEkcaw4bujYyBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTEKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgInR1IGLhu5UgKGFtZW5kKSBs4bqnbiBjb21taXQgdHLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5MgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAidsOybmcgcXVhIG3Ds2MgKGhvb2spIHBvc3QtcmV3cml0ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzk3Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAib2sgxJHhu4MgZ2hpIGzhuqFpIG3hu5l0IHRoYXkgxJHhu5VpIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MDAKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICJvayDEkeG7gyBnaGkgY8OhYyB0aGF5IMSR4buVaSB24bubaSBs4budaSBuaOG6r24gdHLhu5FuZyBy4buXbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGNvbW1pdCAobOG6p24gY2h1eeG7g24gZ2lhbykgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDcwIGJ1aWx0aW4vbWVyZ2UuYzo1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gYCVzJyDEkeG7gyDEkeG7jWMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICJU4bqtcCB0aW4gTUVSR0VfSEVBRCBzYWkgaOG7j25nICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyB0aMO0bmcgxJFp4buHcCAobWVzc2FnZSkgY29tbWl0IChs4bqnbiBjaHV54buDbiBnaWFvKTogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKyLEkGFuZyBi4buPIHF1YSB2aeG7h2MgY2h1eeG7g24gZ2lhbyAoY29tbWl0KTsgYuG6oW4gxJHDoyBraMO0bmcgYmnDqm4gc2/huqFuIHRow7RuZyDEkWnhu4dwICIKKyIobWVzc2FnZSkuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisixJBhbmcgYuG7jyBxdWEgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBi4bufaSB2w6wgdGjDtG5nIMSRaeG7h3AgY+G7p2EgbsOzIHRy4buRbmcgcuG7l25nLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzcgYnVpbHRpbi9tZXJnZS5jOjkzNSBidWlsdGluL21lcmdlLmM6OTYwCittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgxJHhu5FpIHTGsOG7o25nIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU1OAorbXNnaWQgImNhbm5vdCBsb2NrIEhFQUQgcmVmIgorbXNnc3RyICJraMO0bmcgdGjhu4Mga2jDs2EgSEVBRCByZWYgKHRoYW0gY2hp4bq/dSkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU2MgorbXNnaWQgImNhbm5vdCB1cGRhdGUgSEVBRCByZWYiCittc2dzdHIgImtow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgcmVmICh0aGFtIGNoaeG6v3UpIEhFQUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3MworbXNnaWQgIiIKKyJSZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIG9yIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJLaG8gY2jhu6lhIMSRw6MgaG/DoG4gdOG6pXQgdmnhu4djIGPhuq1wIG5o4bqtdCwgbmjGsG5nIGtow7RuZyB0aOG7gyBnaGkgdsOgb1xuIgorInThuq1wIHRpbiBuZXdfaW5kZXggKGLhuqNuZyBt4bulYyBs4bulYyBt4bubaSkuIEjDo3kga2nhu4NtIHRyYSB4ZW0gxJHEqWEgY8OzIGLhu4sgxJHhuqd5IHF1w6FcbiIKKyJoYXkgcXVvdGEgKGjhuqFuIG5naOG6oWNoIMSRxKlhIGPhu6luZykgYuG7iyB2xrDhu6N0IHF1w6EsIHbDoCBzYXUgxJHDsyBcImdpdCByZXNldCBIRUFEXCIgxJHhu4MgIgorImto4bqvYyBwaOG7pWMuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcKK21zZ2lkICJnaXQgY29uZmlnIFtvcHRpb25zXSIKK21zZ3N0ciAiZ2l0IGNvbmZpZyBbY8OhYy10w7l5LWNo4buNbl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTIKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiVuG7iyB0csOtIHThuq1wIHRpbiBj4bqldSBow6xuaCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MworbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgIsSR4bq3dCB04bqtcCB0aW4gY+G6pXUgaMOsbmggY+G6p24gdG/DoG4gY+G7pWMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTQKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICJz4butIGThu6VuZyB04bqtcCB0aW4gY+G6pXUgaMOsbmggaOG7hyB0aOG7kW5nIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU1Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgImTDuW5nIHThuq1wIHRpbiBj4bqldSBow6xuaCBj4bunYSBraG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTYKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgInPhu60gZOG7pW5nIHThuq1wIHRpbiBj4bqldSBow6xuaCDEkcOjIGNobyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NworbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiSMOgbmggxJHhu5luZyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OAorbXNnaWQgImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJs4bqleSBnacOhLXRy4buLOiB0w6puIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTkKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImzhuqV5IHThuqV0IGPhuqMgZ2nDoS10cuG7izoga2jDs2EgW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJs4bqleSBnacOhIHRy4buLIGNobyByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MQorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICJ0aGF5IHRo4bq/IHThuqV0IGPhuqMgY8OhYyBiaeG6v24ga2jhu5twIG3huqt1OiB0w6puIGdpw6EtdHLhu4sgW3ZhbHVlX3JlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MgorbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAidGjDqm0gYmnhur9uIG3hu5tpOiB0w6puIGdpw6EtdHLhu4siCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjMKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJn4buhIGLhu48gYmnhur9uOiB0w6puIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjQKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiZ+G7oSBi4buPIG3hu41pIGPDoWkga2jhu5twOiB0w6puIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjUKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgIsSR4buVaSB0w6puIGNoxrDGoW5nOiB0w6puLWPFqSB0w6puLW3hu5tpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY2Cittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAiZ+G7oSBi4buPIGNoxrDGoW5nOiB0w6puIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY3Cittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgImxp4buHdCBrw6ogdOG6pXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjgKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAibeG7nyBt4buZdCB0csOsbmggYmnDqm4gc2/huqFuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5IGJ1aWx0aW4vY29uZmlnLmM6NzAKK21zZ2lkICJzbG90IgorbXNnc3RyICJraGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjkKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBbZGVmYXVsdF0iCittc2dzdHIgInTDrG0gY+G6pXUgaMOsbmggbcOgdSBz4bqvYzogW23hurdjIMSR4buLbmhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcwCittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICJ0w6xtIGPDoWMgY8OgaSDEkeG6t3QgduG7gSBtw6B1IHPhuq9jOiBbc3Rkb3V0LWzDoC10dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiS2nhu4N1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcyCittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJnacOhIHRy4buLIGzDoCBcInRydWVcIiBob+G6t2MgXCJmYWxzZVwiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczCittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgImdpw6EgdHLhu4sg4bufIGThuqFuZyBz4buRIHRo4bqtcCBwaMOibiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NAorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAiZ2nDoSB0cuG7iyBsw6AgLS1ib29sIGhv4bq3YyAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgImdpw6EgdHLhu4sgbMOgIMSRxrDhu51uZyBk4bqrbiAodMOqbiB04bqtcCB0aW4gaGF5IHRoxrAgbeG7pWMpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2Cittc2dpZCAiT3RoZXIiCittc2dzdHIgIktow6FjIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJjaOG6pW0gZOG7qXQgZ2nDoSB0cuG7iyB24bubaSBieXRlIE5VTCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OAorbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKK21zZ3N0ciAidMO0biB0cuG7jW5nIGvhu4MgY8OgIGPDoWMgaMaw4bubbmcgdHJvbmcgdMOsbSBraeG6v20iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjY5Cittc2dpZCAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSIKK21zZ3N0ciAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjE1Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFtvcHRpb25zXSA8Y29tbWl0dGlzaD4qIgorbXNnc3RyICJnaXQgZGVzY3JpYmUgW2PDoWMtdMO5eS1jaOG7jW5dIDxjb21taXR0aXNoPioiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxNgorbXNnaWQgImdpdCBkZXNjcmliZSBbb3B0aW9uc10gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFtjw6FjLXTDuXktY2jhu41uXSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAidGjhursgxJHDoyDEkcaw4bujYyBnaGkgY2jDuiAlcyBraMO0bmcgc+G6tW4gxJHhu4MgZMO5bmciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAidGjhursgxJHGsOG7o2MgY2jDuiBnaeG6o2kgJXMga2jDtG5nIGPDsyB0w6puIG5ow7puZyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICJ0aOG6uyBgJXMnIMSRw6MgdGjhu7FjIHPhu7Eg4bufIMSRw6J5IGAlcycgcuG7k2kiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIktow7RuZyBwaOG6o2kgdMOqbiDEkeG7kWkgdMaw4bujbmcgJXMgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGAlcycgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgImtow7RuZyBjw7MgdGjhursgbsOgbyBraOG7m3AgY2jDrW5oIHjDoWMgduG7m2kgYCVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJzZWFyY2hpbmcgdG8gZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAixJBhbmcgdMOsbSBraeG6v20gxJHhu4MgbcO0IHThuqMgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAidmnhu4djIHTDrG0ga2nhur9tIMSRw6Mga+G6v3QgdGjDumMgdOG6oWkgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIktow7RuZyBjw7MgdGjhursgxJHGsOG7o2MgY2jDuiBnaeG6o2kgbsOgbyDEkcaw4bujYyBtw7QgdOG6oyBsw6AgYCVzJy5cbiIKKyJUdXkgbmhpw6puLCDhu58gxJHDonkgY8OzIG5o4buvbmcgdGjhursga2jDtG5nIMSRxrDhu6NjIGNow7ogZ2nhuqNpOiBow6N5IHRo4butIC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIktow7RuZyBjw7MgdGjhursgKHRhZykgY8OzIHRo4buDIG3DtCB04bqjIGAlcycuXG4iCisiSMOjeSB0aOG7rSAtLWFsd2F5cywgaG/hurd0IHThuqFvIG3hu5l0IHPhu5EgdGjhursuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICLEkcOjIHh1ecOqbiAlbHUgcXVhIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdClcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyJ0w6xtIHRo4bqleSBuaGnhu4F1IGjGoW4gJWkgdGjhursgKHRhZyk7IMSRw6MgbGnhu4d0IGvDqiAlaSBn4bqnbiDEkcOieSBuaOG6pXRcbiIKKyJi4buPIMSRaSB0w6xtIGtp4bq/bSB04bqhaSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAzCittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAidMOsbSBjw6FjIHRo4bq7IG3DoCBuw7MgxJHhur9uIHRyxrDhu5tjIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDQKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICJjaGnhur9uIGzGsOG7o2MgdMOsbSBraeG6v20gdHLDqm4gxJHhuqd1IHJhIGzhu5dpIGNodeG6qW4gc3RkZXJyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA1Cittc2dpZCAidXNlIGFueSByZWYgaW4gLmdpdC9yZWZzIgorbXNnc3RyICJz4butIGThu6VuZyBi4bqldCBr4buzIHJlZiBuw6BvIHRyb25nIC5naXQvcmVmcyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNgorbXNnaWQgInVzZSBhbnkgdGFnIGluIC5naXQvcmVmcy90YWdzIgorbXNnc3RyICJz4butIGThu6VuZyBi4bqldCBr4buzIHRo4bq7IG7DoG8gdHJvbmcgLmdpdC9yZWZzL3RhZ3MiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDcKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICJsdcO0biBkw7luZyDEkeG7i25oIGThuqFuZyBkw6BpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDEwCittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAiY2jhu4kgeHXhuqV0IG5o4buvbmcgZ8OsIGto4bubcCBjaMOtbmggeMOhYyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMgorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgImNvaSBuaMawICA8bj4gdGjhursgZ+G6p24gxJHDonkgbmjhuqV0ICht4bq3YyDEkeG7i25oOiAxMCkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTQKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJjaOG7iSBjw6JuIG5o4bqvYyDEkeG6v24gbmjhu69uZyB0aOG6uyBraOG7m3AgduG7m2kgIDxt4bqrdT4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTYgYnVpbHRpbi9uYW1lLXJldi5jOjIzOAorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIHbhuq9uIHThuq90IG5oxrAgbMOgIGZhbGxiYWNrIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDE3Cittc2dpZCAibWFyayIKK21zZ3N0ciAiZOG6pXUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTgKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgInRow6ptIDxk4bqldT4gdHLDqm4gY8OieSB0aMawIG3hu6VjIGzDoG0gdmnhu4djIGLhuqluICht4bq3YyDEkeG7i25oIFwiLWRpcnR5XCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDM2Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyBsw6AgeHVuZyBraOG6r2MgduG7m2kgdMO5eSBjaOG7jW4gLS1hYmJyZXY9MCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ2MgorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgY8OhYyB0w6puLCBraMO0bmcgdGjhu4MgbcO0IHThuqMgZ8OsIGPhuqMuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDgyCittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXR0aXNoZXMiCittc2dzdHIgIi0tZGlydHkgbMOgIHh1bmcga2jhuq9jIHbhu5tpIGPDoWMgdMO5eSBjaOG7jW4gZMOgbmggY2hvIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICJgJXMnOiBraMO0bmcgcGjhuqNpIHThuq1wIHRpbiBiw6xuaCB0aMaw4budbmcgaGF5IGxpw6puIGvhur90IHTGsOG7o25nIHRyxrBuZyIKKworIzogYnVpbHRpbi9kaWZmLmM6MjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAidMO5eSBjaOG7jW4gc2FpOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzAxCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIktow7RuZyBwaOG6o2kgbMOgIGtobyBnaXQiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIMSRw6MgY2hvIGAlcycga2jDtG5nIGjhu6NwIGzhu4cuIgorCisjOiBidWlsdGluL2RpZmYuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuICVkIHRyZWVzIGdpdmVuOiAnJXMnIgorbXNnc3RyICLEkcOjIGNo4buJIHJhIG5oaeG7gXUgaMahbiAlZCBjw6J5ICh0cmVlKTogYCVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIsSRw6MgY2hvIG5oaeG7gXUgaMahbiBoYWkgxJHhu5FpIHTGsOG7o25nIGJsb2I6IGAlcyciCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICLEkcOjIGNobyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIHRo4buDIG7huq9tIGdp4buvIGAlcycuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjIKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjM1Cittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRp4bq/biB0cmnhu4NuIHNhdSA8bj4gxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjM3Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICJjaOG7jW4gxJFp4buBdSBraGnhu4NuIGPhu6dhIHRo4bq7IMSRw6Mga8O9IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjQwCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAiY2jhu41uIHPhu7EgeOG7rSBsw70gY+G7p2EgY8OhYyB0aOG6uywgY8OhaSBtw6AgxJHDoW5oIHRo4bq7IGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIGzhu41jIHJhIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjQzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIsSQ4buVIGPDoWMgxJHDoW5oIGThuqV1IG7DoHkgdsOgbyB04bqtcC10aW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2NDUKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIm5o4bqtcCB2w6BvIMSRw6FuaCBk4bqldSB04burIHThuq1wIHRpbiBuw6B5IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjQ3Cittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIkzDoG0gZ2nhuqMgbeG7mXQgY8OhaSB0aOG6uyBraGkgdGjhursgYuG7iyB0aGnhur91IG3hu5l0IGPDoWkiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2NDkKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiWHXhuqV0IHJhIHRvw6BuIGLhu5kgY8OieSBjaG8gbeG7l2kgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY1MQorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICJT4butIGThu6VuZyB0w61uaCBuxINuZyBkb25lIMSR4buDIGNo4bqlbSBk4bupdCBsdeG7k25nIGThu68gbGnhu4d1IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjUyCittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJC4buPIHF1YSBr4bq/dCB4deG6pXQgY+G7p2EgZOG7ryBsaeG7h3UgYmxvYiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwCittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxjw6FjLXTDuXktY2jhu41uPl0gWzxraG8tY2jhu6lhPiBbPHJlZnNwZWM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzxjw6FjLXTDuXktY2jhu41uPl0gWzxuaMOzbT4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMgorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPGPDoWMtdMO5eS1jaOG7jW4+XSBbKDxraG8+IHwgPG5ow7NtPikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjMKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPGPDoWMtdMO5eS1jaOG7jW4+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwCittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAiZmV0Y2ggdOG7qyB04bqldCBj4bqjIGPDoWMgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYyCittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJu4buRaSB0aMOqbSB2w6BvIC5naXQvRkVUQ0hfSEVBRCB0aGF5IHbDrCBnaGkgxJHDqCBsw6puIG7DsyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY0Cittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gxJHhur9uIGfDs2kgKHBhY2spIHThuqNpIGzDqm4gdHLDqm4gbcOheSBjaOG7pyBjdeG7kWkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgIsOpcCBideG7mWMgZ2hpIMSRw6ggbMOqbiBuaMOhbmggbuG7mWkgYuG7mSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY3Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICJmZXRjaCB04burIG5oaeG7gXUgbcOheSBjaOG7pyBjw7luZyBsw7pjIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjkKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJs4bqleSAoZmV0Y2gpIHThuqV0IGPhuqMgY8OhYyB0aOG6uyBjw7luZyB24bubaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBsacOqbiBxdWFuIMSR4bq/biBuw7MiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MQorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAia2jDtG5nIGzhuqV5IChmZXRjaCkgdOG6pXQgY+G6oyBjw6FjIHRo4bq7ICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzMKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAiIgorImPhuq90IGPhu6V0IChwcnVuZSkgY8OhYyBuaMOhbmggYHJlbW90ZS10cmFja2luZycga2jDtG5nIGPDsm4gdOG7k24gdOG6oWkgdHLDqm4gbcOheSBjaOG7pyAiCisibuG7r2EiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NAorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAia2hpLWPhuqduIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzUKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLEkWnhu4F1IGtoaeG7g24gdmnhu4djIGzhuqV5IHbhu4EgKGZldGNoKSDEkeG7hyBxdXkgdHJvbmcgY8OhYyBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3OQorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICJnaeG7ryBjw6FjIGfDs2kgxJHDoyB04bqjaSB24buBIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODEKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAiY2hvIHBow6lwIGPhuq1wIG5o4bqtdCByZWYgKHRoYW0gY2hp4bq/dSkgSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg0Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAibMOgbSBzw6J1IGjGoW4gbOG7i2NoIHPhu60gY+G7p2EgYuG6o24gc2FvIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUgYnVpbHRpbi9sb2cuYzoxMDgzCittc2dpZCAiZGlyIgorbXNnc3RyICJ0beG7pWMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NgorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgInNv4bqhbiBz4bq1biBjw6FpIG7DoHkgY2hvIGvhur90IHh14bqldCDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODkKK21zZ2lkICJkZWZhdWx0IG1vZGUgZm9yIHJlY3Vyc2lvbiIKK21zZ3N0ciAiY2jhur8gxJHhu5kgbeG6t2MgxJHhu4tuaCBjaG8gxJHhu4cgcXVpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBtw6F5IGNo4bunIGNobyB0aGFtIGNoaeG6v3UgSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgxJHhu5FpIHTGsOG7o25nICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjU5Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJbxJHDoyBj4bqtcCBuaOG6rXRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiEgJS0qcyAlLSpzIC0+ICVzICAoY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2gpIgorbXNnc3RyICIhICUtKnMgJS0qcyAtPiAlcyAgKGtow7RuZyB0aOG7gyBmZXRjaCAobOG6pXkpIHbhu4EgbmjDoW5oIGhp4buHbiBow6BuaCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNzQgYnVpbHRpbi9mZXRjaC5jOjM2MAorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltC4buLIHThu6sgY2jhu5FpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI4NQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiW2Phuq1wIG5o4bqtdCB0aOG6u10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyODcgYnVpbHRpbi9mZXRjaC5jOjMyMiBidWlsdGluL2ZldGNoLmM6MzQwCittc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorbXNnc3RyICIgIChraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IHRoYW0gY2hp4bq/dSAocmVmKSBu4buZaSBi4buZKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwNQorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW3Ro4bq7IG3hu5tpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwOAorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW25ow6FuaCBt4bubaV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMTEKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIltyZWYgKHRoYW0gY2hp4bq/dSkgbeG7m2ldIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzU2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgImtow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgdGhhbSBjaGnhur91IChyZWYpIG7hu5lpIGLhu5kiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNTYKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJjxrDhu6FuZyBi4bupYyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNjIKK21zZ2lkICIobm9uLWZhc3QtZm9yd2FyZCkiCittc2dzdHIgIihub24tZmFzdC1mb3J3YXJkKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM5MyBidWlsdGluL2ZldGNoLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyAlczogJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIMSRw6Mga2jDtG5nIGfhu61pIHThuqV0IGPhuqMgY8OhYyDEkeG7kWkgdMaw4bujbmcgY+G6p24gdGhp4bq/dFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICJU4burICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisibeG7mXQgc+G7kSB0aGFtIGNoaeG6v3UgKHJlZnMpIG7hu5lpIGLhu5kga2jDtG5nIHRo4buDIMSRxrDhu6NjIGPhuq1wIG5o4bqtdDsgaMOjeSB0aOG7rSBjaOG6oXlcbiIKKyIgYGdpdCByZW1vdGUgcHJ1bmUgJXMnIMSR4buDIGLhu48gxJFpIG5o4buvbmcgbmjDoW5oIGPFqSwgaGF5IGLhu4sgeHVuZyDEkeG7mXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIHPhur0gdHLhu58gdGjDoG5oIGtow7RuZyDEkeG6p3UgKGtow7RuZyDEkcaw4bujYyBxdeG6o24gbMO9KSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgxJHDoyB0cuG7nyB0aMOgbmgga2jDtG5nIMSR4bqndSAoa2jDtG5nIMSRxrDhu6NjIHF14bqjbiBsw70pKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU1NworbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW8SRw6MgeMOzYV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTggYnVpbHRpbi9yZW1vdGUuYzoxMDU1Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIoa2jDtG5nKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY3NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJU4burIGNo4buRaSB2aeG7h2MgbOG6pXkgKGZldGNoKSB2w6BvIHRyb25nIG5ow6FuaCBoaeG7h24gdOG6oWkgJXMgY+G7p2EgbeG7mXQga2hvIGNo4bupYSBraMO0bmcgIgorInBo4bqjaSBraG8gdHLhuqduIChiYXJlKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIgorbXNnc3RyICJLaMO0bmcgYmnhur90IGzDoG0gY8OhY2ggbsOgbyDEkeG7gyBs4bqleSB24buBIChmZXRjaCkgdOG7qyAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICJUw7l5IGNo4buNbiBcIiVzXCIgY8OzIGdpw6EgdHLhu4sgXCIlc1wiIGzDoCBraMO0bmcgaOG7o3AgbOG7hyBjaG8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJUw7l5IGNo4buNbiBcIiVzXCIgYuG7iyBi4buPIHF1YSB24bubaSAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIsSQYW5nIGzhuqV5IChmZXRjaCkgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg5MyBidWlsdGluL3JlbW90ZS5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBmZXRjaCAobOG6pXkpICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTEyCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJDaMawYSBjaOG7iSByYSBraG8gY2jhu6lhIG3DoXkgY2jhu6cuICBYaW4gaMOjeSBjaOG7iSDEkeG7i25oIGhv4bq3YyBsw6AgVVJMIGhv4bq3Y1xuIgorInTDqm4gbcOheSBjaOG7pyB04burIGPDoWkgbcOgIG5o4buvbmcgxJFp4buDbSB4w6l0IGR1eeG7h3QgbeG7m2kgY8OzIHRo4buDIMSRxrDhu6NjIGZldGNoIChs4bqleSB24buBKS4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MzIKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICJC4bqhbiBwaOG6o2kgxJHhu4tuaCByw7UgdMOqbiB0aOG6uy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5ODQKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAibOG7h25oIGzhuqV5IHbhu4EgXCJmZXRjaCAtLWFsbFwiIGtow7RuZyBs4bqleSDEkeG7kWkgc+G7kSBraG8gY2jhu6lhIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTg2Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJs4buHbmggbOG6pXkgduG7gSBcImZldGNoIC0tYWxsXCIga2jDtG5nIGjhu6NwIGzDvSB24bubaSByZWZzcGVjcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk5NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICJraMO0bmcgY8OzIG5ow7NtIG3DoXkgY2jhu6cgaGF5IG3DoXkgY2jhu6cgbmjGsCB0aOG6vzogJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDA1Cittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJWaeG7h2MgbOG6pXkgduG7gSBj4bqjIG3hu5l0IG5ow7NtIHbDoCBjaOG7iSDEkeG7i25oIHJlZnNwZWNzIGtow7RuZyBo4bujcCBsw70iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjEzCittc2dpZCAiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dfC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPHRow7RuZyDEkWnhu4dwPl0gWy0tbG9nWz08bj5dfC0tbm8tbG9nXSBbLS1maWxlIDx04bqtcC10aW4+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjUzIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY1NiBidWlsdGluL2dyZXAuYzo3ODcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODggYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NiBidWlsdGluL3Nob3ctcmVmLmM6MTkyCisjOiBidWlsdGluL3RhZy5jOjQ0OCBwYXJzZS1vcHRpb25zLmg6MTMzIHBhcnNlLW9wdGlvbnMuaDoyMzUKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NTQKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgImfhuq9uIG5o4bqtdCBrw70gduG7m2kgw610IG5o4bqldCA8bj4gbeG7pWMgdOG7qyBs4buHbmggYHNob3J0bG9nJyIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjU3Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiYsOtIGRhbmggY2hvIC0tbG9nIChraMO0bmcgxJHGsOG7o2MgZMO5bmcpIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjAKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJ2xINuIGLhuqNuIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjEKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgImTDuW5nIDx2xINuIGLhuqNuIHRoxrDhu51uZz4gxJHhu4MgYuG6r3QgxJHhuqd1IGdoaSBjaMO6IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjIKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAidOG6rXAgdGluIMSR4buDIMSR4buNYyBk4buvIGxp4buHdSB04burIMSRw7MiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OTc5Cittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbb3B0aW9uc10gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgW2PDoWMtdMO5eS1jaOG7jW5dIFs8beG6q3U+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo5OTQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAidHLDrWNoIGThuqtuIMSR4buDIHBow7kgaOG7o3AgY2hvIGjhu4cgduG7jyAoc2hlbGwpIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjk5NgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAidHLDrWNoIGThuqtuIMSR4buDIHBow7kgaOG7o3AgY2hvIHBlcmwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OTk4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgInRyw61jaCBk4bqrbiDEkeG7gyBwaMO5IGjhu6NwIGNobyBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAwMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgdGNsIgorbXNnc3RyICJ0csOtY2ggZOG6q24gxJHhu4MgcGjDuSBo4bujcCBjaG8gdGNsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwMDMKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGNo4buJIDxuPiB0aGFtIGNoaeG6v3Uga2jhu5twIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwMDQKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgIsSR4buLbmggZOG6oW5nIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwMDQKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICLEkeG7i25oIGThuqFuZyBz4bq9IGTDuW5nIGNobyDEkeG6p3UgcmEiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAwNQorbXNnaWQgImtleSIKK21zZ3N0ciAia2jDs2EiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAwNgorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAidMOqbiB0csaw4budbmcgY+G6p24gc+G6r3AgeOG6v3AiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYwOAorbXNnaWQgImdpdCBmc2NrIFtvcHRpb25zXSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgZnNjayBbY8OhYy10w7l5LWNo4buNbl0gWzzEkeG7kWktdMaw4bujbmc+Li4uXSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE0Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIHRo4buDIMSR4buNYyDEkcaw4bujYyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE1Cittc2dpZCAic2hvdyBkYW5nbGluZyBvYmplY3RzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSRxrDhu6NjIHF14bqjbiBsw70iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYxNgorbXNnaWQgInJlcG9ydCB0YWdzIgorbXNnc3RyICJiw6FvIGPDoW8gY8OhYyB0aOG6uyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE3Cittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgImLDoW8gY8OhbyBub2RlIGfhu5FjIgorCisjOiBidWlsdGluL2ZzY2suYzo2MTgKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAidOG6oW8gYCBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMnIgorCisjOiBidWlsdGluL2ZzY2suYzo2MTkKK21zZ2lkICJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiCittc2dzdHIgInThuqFvICByZWZsb2dzIGhlYWQgbm9kZXMgKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjAKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAiY8WpbmcgY8OibiBuaOG6r2MgxJHhur9uIGPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kgdsOgIHRoYXkgdGjhur8iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyMQorbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAiY2hvIHBow6lwIGtp4buDbSB0cmEgaOG6oW4gY2jhur8gaMahbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjIzCittc2dpZCAid3JpdGUgZGFuZ2xpbmcgb2JqZWN0cyBpbiAuZ2l0L2xvc3QtZm91bmQiCittc2dzdHIgImdoaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgxJHGsOG7o2MgcXXhuqNuIGzDvSB0cm9uZyAuZ2l0L2xvc3QtZm91bmQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyNCBidWlsdGluL3BydW5lLmM6MTM0Cittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHF1w6EgdHLDrG5oIgorCisjOiBidWlsdGluL2djLmM6MjIKK21zZ2lkICJnaXQgZ2MgW29wdGlvbnNdIgorbXNnc3RyICJnaXQgZ2MgW2PDoWMtdMO5eS1jaOG7jW5dIgorCisjOiBidWlsdGluL2djLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAiJXMga2jDtG5nIGjhu6NwIGzhu4c6IGAlcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJS4qcyIKK21zZ3N0ciAidGjGsCBt4bulYyDEkeG7kWkgdMaw4bujbmcgZMOgaSBt4buZdCBjw6FjaCDEkWnDqm4gcuG7kyAgJS4qcyIKKworIzogYnVpbHRpbi9nYy5jOjE3OQorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJ4w7NhIGLhu48gY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSRxrDhu6NjIHRoYW0gY2hp4bq/dSIKKworIzogYnVpbHRpbi9nYy5jOjE4MQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAiY+G6qW4gdGjhuq1uIGjGoW4gbuG7r2EgKHTEg25nIHRo4budaSBnaWFuIGNo4bqheSkiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxODIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICJi4bqtdCBjaOG6vyDEkeG7mSBhdXRvLWdjIgorCisjOiBidWlsdGluL2djLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuIFlvdSBtYXkgYWxzb1xuIgorInJ1biBcImdpdCBnY1wiIG1hbnVhbGx5LiBTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICIiCisiVOG7sSDEkeG7mW5nIMSRw7NuZyBnw7NpIGtobyBjaOG7qWEgxJHhu4MgdOG7kWkgxrB1IGjDs2EgaGnhu4d1IHN14bqldCBsw6BtIHZp4buHYy5cbiIKKyJjaOG6oXkgbOG7h25oIFwiZ2l0IGdjXCIgbeG7mXQgY8OhY2ggdGjhu6cgY8O0bmcuIEjDo3kgeGVtIFwiZ2l0IGhlbHAgZ2NcIiDEkeG7gyBiaeG6v3QgdGjDqm0gIgorImNoaSB0aeG6v3QuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNDkKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKyJDw7MgcXXDoSBuaGnhu4F1IMSR4buRaSB0xrDhu6NuZyB04buxIGRvIGtow7RuZyDEkcaw4bujYyBkw7luZyDEkeG6v247IGjDo3kgY2jhuqF5IGzhu4duaCBgZ2l0IHBydW5lJyAiCisixJHhu4MgeMOzYSBi4buPIGNow7puZyDEkWkuIgorCisjOiBidWlsdGluL2dyZXAuYzoyMgorbXNnaWQgImdpdCBncmVwIFtvcHRpb25zXSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFtjw6FjLXTDuXktY2jhu41uXSBbLWVdIDxt4bqrdT4gWzxyZXY+Li4uXSBbWy0tXSA8xJHGsOG7nW5nLWThuqtuPi4uLl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6IGfhurdwIGzhu5dpIHThuqFvIHR1eeG6v24gKHRocmVhZCk6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNoZGlyOiAlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kgduG7m2kgbOG7h25oIGNoZGlyOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NTMxIGJ1aWx0aW4vZ3JlcC5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgY8OieSAoJXMpIgorCisjOiBidWlsdGluL2dyZXAuYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gbOG7h25oIGdyZXAgKGzhu41jIHTDrG0pIHThu6sgxJHhu5FpIHTGsOG7o25nIHRodeG7mWMga2nhu4N1ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiY2h1eeG7g24gxJHhur9uIGAlYycgbW9uZyBjaOG7nSBt4buZdCBnacOhIHRy4buLIGLhurFuZyBz4buRIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAia2jDtG5nIG3hu58gxJHGsOG7o2MgYCVzJyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzI5Cittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAidMOsbSB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMgdGhheSB2w6wgdHJvbmcgY8OieSBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMxCittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgInTDrG0gdHJvbmcgbuG7mWkgZHVuZyBraMO0bmcgxJHGsOG7o2MgcXXhuqNuIGzDvSBi4bufaSBnaXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczMworbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAidMOsbSBraeG6v20gY8OhYyB04bqtcCB0aW4gxJHGsOG7o2MgdsOgIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBk4bqldSB24bq/dCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM1Cittc2dpZCAic2VhcmNoIGFsc28gaW4gaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAidMOsbSBj4bqjIHRyb25nIGPDoWMgdOG6rXAgdGluIMSRw6MgYuG7iyBs4budIMSRaSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM4Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyAgbmjhu69uZyBkw7JuZyBraMO0bmcga2jhu5twIHbhu5tpIG3huqt1IgorCisjOiBidWlsdGluL2dyZXAuYzo3NDAKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICJwaMOibiBiaeG7h3QgY2jhu68gaG9hL3RoxrDhu51uZyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQyCittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgImNo4buJIGto4bubcCBt4bqrdSB04bqhaSDEkcaw4budbmcgcmFuaCBnaeG7m2kgdOG7qyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQ0Cittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAieOG7rSBsw70gdOG6rXAgdGluIG5o4buLIHBow6JuIG5oxrAgbMOgIGThuqFuZyB2xINuIGLhuqNuIHRoxrDhu51uZyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQ2Cittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICJraMO0bmcga2jhu5twIG3huqt1IHRyb25nIGPDoWMgdOG6rXAgdGluIG5o4buLIHBow6JuIgorCisjOiBidWlsdGluL2dyZXAuYzo3NDkKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgImdp4bqjbSB4deG7kW5nIMOtdCBuaOG6pXQgbeG7qWMgPHPDonU+IgorCisjOiBidWlsdGluL2dyZXAuYzo3NTMKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiZMO5bmcgYmnhu4N1IHRo4bupYyBjaMOtbmggcXVpIFBPU0lYIGPDsyBt4bufIHLhu5luZyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzU2Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJz4butIGThu6VuZyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkga2nhu4N1IFBPU0lYICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzU5Cittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgImRp4buFbiBk4buLY2ggY8OhYyBt4bqrdSBuaMawIGzDoCBjaHXhu5dpIGPhu5EgxJHhu4tuaCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzYyCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJz4butIGThu6VuZyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkgdMawxqFuZyB0aMOtY2ggUGVybCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzY1Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgImhp4buDbiB0aOG7iyBz4buRIGPhu6dhIGTDsm5nIgorCisjOiBidWlsdGluL2dyZXAuYzo3NjYKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzY3Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHTDqm4gdOG6rXAgdGluIgorCisjOiBidWlsdGluL2dyZXAuYzo3NjkKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJoaeG7g24gdGjhu4sgdMOqbiB04bqtcCB0aW4gdMawxqFuZyDEkeG7kWkgduG7m2kgdGjGsCBt4bulYyDEkeG7iW5oICh0b3ApIgorCisjOiBidWlsdGluL2dyZXAuYzo3NzEKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiB0aGF5IHbDrCBuaOG7r25nIGTDsm5nIGto4bubcCB24bubaSBt4bqrdSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzczCittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgIsSR4buTbmcgbmdoxKlhIHbhu5tpIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo3NzYKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyB0w6puIGNobyBuaOG7r25nIHThuq1wIHRpbiBraMO0bmcga2jhu5twIHbhu5tpIG3huqt1IgorCisjOiBidWlsdGluL2dyZXAuYzo3NzgKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJ0aMOqbSBOVUwgdsOgbyBzYXUgdMOqbiB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc4MAorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBz4buRIGzGsOG7o25nIGto4bubcCB0aGF5IHbDrCBuaOG7r25nIGTDsm5nIGto4bubcCB24bubaSBt4bqrdSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzgxCittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgInTDtCBzw6FuZyBjw6FpIGto4bubcCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzgzCittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBkw7JuZyB0cuG7kW5nIGdp4buvYSBjw6FjIGzhuqduIGto4bubcCB04burIGPDoWMgdOG6rXAgdGluIGtow6FjIGJp4buHdCIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzg1Cittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiBt4buZdCBs4bqnbiBwaMOtYSB0csOqbiBjw6FjIGzhuqduIGto4bubcCB04burIGPDuW5nIG3hu5l0IHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzg4Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyA8bj4gZMOybmcgbuG7mWkgZHVuZyBwaMOtYSB0csaw4bubYyB2w6Agc2F1IGPDoWMgbOG6p24ga2jhu5twIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTEKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgPG4+IGTDsm5nIG7hu5lpIGR1bmcgdHLGsOG7m2Mga2jhu5twIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTMKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyA8bj4gZMOybmcgbuG7mWkgZHVuZyBzYXUga2jhu5twIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTQKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJE4bqhbmcgdOG6r3QgY2hvIC1DIFPhu5AiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc5NworbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBkw7JuZyB2w7NpIHTDqm4gaMOgbSB0csaw4bubYyBjw6FjIGzhuqduIGto4bubcCIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzk5Cittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgImhp4buDbiB0aOG7iyBow6BtIGJhbyBxdWFuaCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODAyCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgIsSR4buNYyBt4bqrdSB04burIHThuq1wLXRpbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA0Cittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJtYXRjaCA8beG6q3U+IgorCisjOiBidWlsdGluL2dyZXAuYzo4MDYKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICJ04buVIGjhu6NwIG3huqt1IMSRxrDhu6NjIGNo4buJIHJhIHbhu5tpIHTDuXkgY2jhu41uIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTgKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAixJHGsGEgcmEgZ+G7o2kgw70gduG7m2kgdHLhuqFuZyB0aMOhaSB0aG/DoXQgbcOgIGtow7RuZyBjw7Mga+G6v3QgeHXhuqV0IgorCisjOiBidWlsdGluL2dyZXAuYzo4MjAKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyBjw6FpIGto4bubcCB04burIHThuq1wIHRpbiBtw6AgbsOzIGto4bubcCB0b8OgbiBi4buZIGPDoWMgbeG6q3UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMgorbXNnaWQgInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OieSBwaMOibiB0w61jaCBjw7ogcGjDoXAgY2hvIGJp4buDdSB0aOG7qWMgYGdyZXAnICh0w6xtIGtp4bq/bSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNgorbXNnaWQgInBhZ2VyIgorbXNnc3RyICJ0cmFuZyBnaeG6pXkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB04bqtcCB0aW4ga2jhu5twIHRyb25nIHRyYW5nIGdp4bqleSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI5Cittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICJjaG8gcGjDqXAgZ+G7jWkgZ3JlcCgxKSAoYuG7iyBi4buPIHF1YSBi4bufaSBs4bqnbiBk4buLY2ggbsOgeSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMCBidWlsdGluL3Nob3ctcmVmLmM6MjAxCittc2dpZCAic2hvdyB1c2FnZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWNoIGTDuW5nIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjEKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuLiIKK21zZ3N0ciAiY2jGsGEgY2jhu4kgcmEgbeG6q3UuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG9iamVjdCAlcyIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIHNhaSAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTc2Cittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgY2jhu4kgbMOgbSB2aeG7h2MgdHLDqm4gY8OieS1sw6BtLXZp4buHYyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTk5Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4LiIKK21zZ3N0ciAiLS1jYWNoZWQgaGF5IC0tdW50cmFja2VkIGtow7RuZyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSAtLW5vLWluZGV4LiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAwNAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzLiIKK21zZ3N0ciAiIgorIi0tbm8taW5kZXggaGF5IC0tdW50cmFja2VkIGtow7RuZyDEkcaw4bujYyBz4butIGThu6VuZyBjw7luZyB24bubaSBjw6FjIHTDuXkgY2jhu41uIGxpw6puICIKKyJxdWFuIMSR4bq/biByZXZzLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAwNworbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIGNobyBu4buZaSBkdW5nIGzGsHUgZOG6pXUgduG6v3QuIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDE1Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuLiIKK21zZ3N0ciAiY+G6oyBoYWkgLS1jYWNoZWQgdsOgIGPDoWMgY8OieSBwaOG6o2kgxJHGsOG7o2MgY2jhu4kgcmEuIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6NjAKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT58LS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gWy0tXSAiCisiPGZpbGU+Li4uIgorbXNnc3RyICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8a2nhu4N1Pl0gWy13XSBbLS1wYXRoPTx04bqtcC10aW4+fC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDx04bqtcC10aW4+Li4uIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6NjEKK21zZ2lkICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMgPCA8bGlzdC1vZi1wYXRocz4iCittc2dzdHIgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyA8IDxkYW5oLXPDoWNoLcSRxrDhu51uZy1k4bqrbj4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3MgorbXNnaWQgInR5cGUiCittc2dzdHIgImtp4buDdSIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjcyCittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgImtp4buDdSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3MworbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJnaGkgxJHhu5FpIHTGsOG7o25nIHbDoG8gZOG7ryBsaeG7h3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6NzQKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAixJHhu41jIMSR4buRaSB0xrDhu6NuZyB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4gc3RkaW4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3NgorbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJsxrB1IGPDoWMgdOG6rXAgdGluIG3DoCBuw7Mga2jDtG5nIGPDsyBjw6FjIGLhu5kgbOG7jWMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3NworbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICJ44butIGzDvSB04bqtcCB0aW4gbmjGsCBsw6AgbsOzIMSRYW5nIOG7nyB0aMawIG3hu6VjIG7DoHkiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzCittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGRhbmggc8OhY2ggY8OhYyBjw6J1IGzhu4duaCBuZ8aw4budaSBkw7luZyBjw7MgdGjhu4Mgc+G7rSBk4bulbmciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0Cittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRyYW5nIG1hbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDUKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGjGsOG7m25nIGThuqtuIHPhu60gZOG7pW5nIHRyb25nIHRyw6xuaCBkdXnhu4d0IHdlYiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDcKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAiaGnhu4duIHRyYW5nIGluZm8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUzCittc2dpZCAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1tYW58LS13ZWJ8LS1pbmZvXSBbY29tbWFuZF0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tbWFufC0td2VifC0taW5mb10gW2zhu4duaF0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIMSR4buLbmggZOG6oW5nIHRy4bujIGdpw7pwIGAlcyciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjkzCittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiTOG7l2kga2jhu59pIGNo4bqheSBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwNgorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHBow6JuIHTDrWNoIHBoacOqbiBi4bqjbiBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJwaGnDqm4gYuG6o24gY+G7p2EgZW1hY3NjbGllbnQgYCVkJyBxdcOhIGPFqSAoPCAyMikuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMzIgYnVpbHRpbi9oZWxwLmM6MTYwIGJ1aWx0aW4vaGVscC5jOjE2OSBidWlsdGluL2hlbHAuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJzogJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB0aOG7sWMgdGhpIGAlcyc6ICVzIgorCisjOiBidWlsdGluL2hlbHAuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJgJXMnOiDEkcaw4budbmcgZOG6q24ga2jDtG5nIGjhu5cgdHLhu6MgYuG7mSB0csOsbmggY2hp4bq/dSBtYW4uXG4iCisiSMOjeSBjw6JuIG5o4bqvYyDEkeG6v24gdmnhu4djIHPhu60gZOG7pW5nICdtYW4uPHRvb2w+LmNtZCcgxJHhu4MgdGhheSB0aOG6vy4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJgJXMnOiBjbWQgKGzhu4duaCkgaOG7lyB0cuG7oyBi4buZIHRyw6xuaCBjaGnhur91IG1hbi5cbiIKKyJIw6N5IGPDom4gbmjhuq9jIMSR4bq/biB2aeG7h2Mgc+G7rSBk4bulbmcgJ21hbi48dG9vbD4ucGF0aCcgxJHhu4MgdGhheSB0aOG6vy4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjI5OQorbXNnaWQgIlRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZ2l0IGNvbW1hbmRzIGFyZToiCittc2dzdHIgIk5o4buvbmcgbOG7h25oIGdpdCBoYXkgxJHGsOG7o2Mgc+G7rSBk4bulbmcgbmjhuqV0IGzDoDoiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICJgJXMnOiBraMO0bmcgcsO1IGNoxrDGoW5nIHRyw6xuaCB4ZW0gbWFuLiIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzg0Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJraMO0bmcgY8OzIHRyw6xuaCB4ZW0gdHLhu6MgZ2nDunAgZOG6oW5nIG1hbnBhZ2UgdGnhur9wIGjhu6NwIHbhu5tpIHnDqnUgY+G6p3UiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM5MgorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImtow7RuZyBjw7MgdHLDrG5oIHhlbSB0cuG7oyBnacO6cCBk4bqhbmcgaW5mbyB0aeG6v3AgaOG7o3AgduG7m2kgecOqdSBj4bqndSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ3IGJ1aWx0aW4vaGVscC5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAiY8OhY2ggc+G7rSBk4bulbmc6ICVzJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJgZ2l0ICVzJyBpcyBhbGlhc2VkIHRvIGAlcyciCittc2dzdHIgImBnaXQgJXMnIMSRxrDhu6NjIMSR4bq3dCBiw60gZGFuaCB0aMOgbmggYCVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIGtow7RuZyBraOG7m3AgdOG6oWkgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE5MAorbXNnaWQgIm9iamVjdCBvZiB1bmV4cGVjdGVkIHR5cGUiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBj4bunYSBraeG7g3Uga2jDtG5nIG1vbmcgxJHhu6NpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gImtow7RuZyB0aOG7gyDEkWnhu4FuIHbDoG8gJWQgYnl0ZSIKK21zZ3N0clsxXSAia2jDtG5nIHRo4buDIMSRaeG7gW4gdsOgbyAlZCBieXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMzcKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgInbhu6thIMSRw7puZyBsw7pjIEVPRiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjM4Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAibOG7l2kgxJHhu41jIOG7nyDEkeG6p3UgdsOgbyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjUwCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgInPhu60gZOG7pW5nIG5oaeG7gXUgaMahbiBz4buRIGzGsOG7o25nIGJ5dGUgbcOgIG7DsyBz4bq1biBjw7MiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1NworbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgInBhY2sgcXXDoSBs4bubbiBzbyB24bubaSDEkeG7i25oIG5naMSpYSBoaeG7h24gdOG6oWkgY+G7p2Ega2nhu4N1IG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gYCVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIHBhY2tmaWxlIGAlcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJjaOG7ryBrw70gY2hvIHBhY2sga2jDtG5nIGto4bubcCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgImtow7RuZyBo4buXIHRy4bujIHBoacOqbiBi4bqjbiBwYWNrICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICVsdTogJXMiCittc2dzdHIgInBhY2sgY8OzIMSR4buRaSB0xrDhu6NuZyBzYWkga2hv4bqjbmcgYsO5IChvZmZzZXQpICVsdTogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICJ44bqjIG7DqW4gdHLhuqMgduG7gSAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDgzCittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAidHLDoG4gZ2nDoSB0cuG7iyBraG/huqNuZyBiw7kgY2hvIMSR4buRaSB0xrDhu6NuZyBkZWx0YSBjxqEgc+G7nyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDkxCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJraG/huqNuZyBiw7kgY8ahIHPhu58gY2hvIGRlbHRhIG7hurFtIG5nb8OgaSBwaOG6oW0gdmkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IGtp4buDdSDEkeG7kWkgdMaw4bujbmcgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMAorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBjaOG6oXkgaMOgbSBwcmVhZCBjaG8gdOG6rXAgdGluIHBhY2siCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJ04bqtcCB0aW4gcGFjayBi4buLIGvhur90IHRow7pjIHPhu5ttLCAlbHUgYnl0ZSBi4buLIHRoaeG6v3UiCittc2dzdHJbMV0gInThuq1wIHRpbiBwYWNrIGLhu4sga+G6v3QgdGjDumMgc+G7m20sICVsdSBieXRlIGLhu4sgdGhp4bq/dSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTU4Cittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgInPhu7EgbcOidSB0aHXhuqtuIHjhuqMgbsOpbiBuZ2hpw6ptIHRy4buNbmciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjY0OSBidWlsdGluL2luZGV4LXBhY2suYzo2NTUgYnVpbHRpbi9pbmRleC1wYWNrLmM6Njc4CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MTIgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAiU+G7sCBWQSBDSOG6oE0gU0hBMSDEkMODIFjhuqJZIFJBIFbhu5pJICVzISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NjUyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTcwCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyDEkeG7kWkgdMaw4bujbmcgxJHDoyB04buTbiB04bqhaSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBibG9iIGtow7RuZyBo4bujcCBs4buHICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAiJXMga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0OQorbXNnaWQgIkVycm9yIGluIG9iamVjdCIKK21zZ3N0ciAiTOG7l2kgdHJvbmcgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIktow7RuZyBwaOG6o2kgdOG6pXQgY+G6oyBjw6FjIMSR4buRaSB0xrDhu6NuZyBjb24gY+G7p2EgJXMgbMOgIGPDsyB0aOG7gyB24bubaSB04bubaSDEkcaw4bujYyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODIxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NworbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMOhcCBk4bulbmcgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk4NgorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLEkGFuZyBuaOG6rW4gduG7gSBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTg2Cittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ8OhYyDEkeG7kWkgdMaw4bujbmcgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDEyCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICJwYWNrIGLhu4sgc2FpIGjhu49uZyAoU0hBMSBraMO0bmcga2jhu5twKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTAxNworbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGZzdGF0IHBhY2tmaWxlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDIwCittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICJwYWNrIGPDsyBwaOG6p24gdGjhu6thIOG7nyBjdeG7kWkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwMzEKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJs4buZbiB44buZbiBoxqFuIGPhuqMgxJFpw6puIHLhu5Mga2hpIGNo4bqheSBow6BtIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDU0Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAixJBhbmcgcGjDom4gZ2nhuqNpIGPDoWMgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdHV54bq/bjogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMDYKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICJs4buZbiB44buZbiBoxqFuIGPhuqMgxJFpw6puIHLhu5MiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0ciAixJHhuqd5IMSR4bunIHbhu5tpICVkIMSR4buRaSB0xrDhu6NuZyBu4buZaSBi4buZIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICJU4buVbmcga2nhu4NtIHRyYSB0YWlsIGtow7RuZyBuaMawIG1vbmcgxJHhu6NpIGNobyAlcyAoxJHEqWEgaOG7j25nPykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gInBhY2sgY8OzICVkIGRlbHRhIGNoxrBhIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90IgorbXNnc3RyWzFdICJwYWNrIGPDsyAlZCBkZWx0YSBjaMawYSDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHjhuqMgxJHhu5FpIHTGsOG7o25nIG7hu5FpIHRow6ptICglZCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBu4buZaSBi4buZICVzIGLhu4sgaOG7j25nIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjUzCittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgImfhurdwIGzhu5dpIHRyb25nIGtoaSDEkcOzbmcgdOG6rXAgdGluIHBhY2siCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBnaeG7ryBs4bqhaSBgJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHDs25nIHThuq1wIHRpbiBnaeG7ryBs4bqhaSDEkcOjIMSRxrDhu6NjIGdoaSBgJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjg3Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzGsHUgdOG6rXAgdGluIHBhY2siCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTgKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzGsHUgdHLhu68gdOG6rXAgdGluIGdoaSBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICJzYWkgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgInPhu5EgdHV54bq/biBjaOG7iSByYSBraMO0bmcgaOG7o3AgbOG7hyAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAia2jDtG5nIGjhu5cgdHLhu6MgxJFhIHR1eeG6v24sIGLhu48gcXVhICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gcGFjayDEkcOjIHPhurVuIGPDsyBgJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyBt4bufIHThuq1wIHRpbiAncGFjayBpZHgnIGNobyBgJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gImtow7RuZyBkZWx0YTogJWQgxJHhu5FpIHTGsOG7o25nIgorbXNnc3RyWzFdICJraMO0bmcgZGVsdGE6ICVkIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICJjaGnhu4F1IGTDoGkgeMOtY2ggPSAlZDogJWx1IMSR4buRaSB0xrDhu6NuZyIKK21zZ3N0clsxXSAiY2hp4buBdSBkw6BpIHjDrWNoID0gJWQ6ICVsdSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0ODIKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHF1YXkgbOG6oWkgY3dkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjkKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NDEgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIiVzIHNhaSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU1OQorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIGtow7RuZyB0aOG7gyDEkcaw4bujYyBkw7luZyBtw6Aga2jDtG5nIGPDsyAtLXN0ZGluIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTYzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgInTDqm4gdOG6rXAgdGluIHBhY2tmaWxlIGAlcycga2jDtG5nIMSRxrDhu6NjIGvhur90IHRow7pjIGLhurFuZyDEkXXDtGkgJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU4MgorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiZMO5bmcgdMO5eSBjaOG7jW4gLS12ZXJpZnkgbcOgIGtow7RuZyDEkcawYSByYSB0w6puIHBhY2tmaWxlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzDoG0gJXMgxJHGsOG7o2MgZ2hpIGLhu59pIG5ow7NtIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIG5hbWUgJXMiCittc2dzdHIgInTDqm4gbeG6q3UgZMOgaSBt4buZdCBjw6FjaCDEkWnDqm4gcuG7kyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRy4bqhbmcgdGjDoWkgKHN0YXQpIHbhu4EgYCVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHN0YXQgKGzhuqV5IHRy4bqhbmcgdGjDoWkgduG7gSkgbeG6q3UgYCVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG9wZW5kaXIgYCVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyByZWFkbGluayBgJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHN5bWxpbmsgJXMiCittc2dzdHIgImxpw6puIGvhur90IHTGsOG7o25nIHRyxrBuZyBkw6BpIG3hu5l0IGPDoWNoIMSRacOqbiBy4buTICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gbGnDqm4ga+G6v3QgdMaw4bujbmcgdHLGsG5nIChzeW1saW5rKSBgJXMnIGAlcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBzYW8gY2jDqXAgJXMgc2FuZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICLEkWFuZyBs4budIMSRaSBt4bqrdSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgcGF0aCAlcyIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIG3huqt1IGTDoGkgbeG7mXQgY8OhY2ggxJFpw6puIHLhu5MgICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCAlcyIKK21zZ3N0ciAiY8OhYyBt4bqrdSBraMO0bmcgxJHGsOG7o2MgdMOsbSB0aOG6pXkgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgb2YgYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcyciCittc2dzdHIgImtow7RuZyBzYW8gY2jDqXAgY8OhYyBt4bqrdSBj4bunYSBwaGnDqm4gYuG6o24gc2FpIMSR4buLbmggZOG6oW5nICVkIHThu6sgYCVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJ0aMawIG3hu6VjIGdpdCDEkWnDqm4gcuG7kyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzIzIGJ1aWx0aW4vaW5pdC1kYi5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgxJHDoyBjw7MgdOG7qyB0csaw4bubYyBy4buTaSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbuG6r20gKGhhbmRsZSkgdOG6rXAgdGluIGtp4buDdSAlZCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICJraMO0bmcgZGkgY2h1eeG7g24gxJHGsOG7o2MgJXMgdsOgbyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZ2l0IGxpbmsgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyBsacOqbiBr4bq/dCBnaXQgYCVzJyIKKworIy4KKyMuICogVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAnJXMnIGlzIGVpdGhlciAiUmVpbml0aWFsaXplZAorIy4gKiBleGlzdGluZyIgb3IgIkluaXRpYWxpemVkIGVtcHR5IiwgdGhlIHNlY29uZCAiIHNoYXJlZCIgb3IKKyMuICogIiIsIGFuZCB0aGUgbGFzdCAnJXMlcycgaXMgdGhlIHZlcmJhdGltIGRpcmVjdG9yeSBuYW1lLgorIy4KKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyVzIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiJXMlcyBraG8gR2l0IHRyb25nICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIxCittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyIKK21zZ3N0ciAiS2jhu59pIHThuqFvIGzhuqFpIMSRw6Mgc+G6tW4gY8OzIHLhu5NpIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MjEKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSIKK21zZ3N0ciAiS2jhu59pIHThuqFvIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MjIKK21zZ2lkICIgc2hhcmVkIgorbXNnc3RyICIgxJHDoyBjaGlhIHPhursiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ0MQorbXNnaWQgImNhbm5vdCB0ZWxsIGN3ZCIKK21zZ3N0ciAia2jDtG5nIG7Ds2kgY2h1eeG7h24gxJHGsOG7o2MgduG7m2kgbOG7h25oIGN3ZCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDY3Cittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS1zaGFyZWQiCisiWz08cGVybWlzc2lvbnM+XV0gW2RpcmVjdG9yeV0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGjGsC1t4bulYy104bqhbT5dIFstLXNoYXJlZFs9PGPDoWMtIgorInF1eeG7gW4+XV0gW3RoxrAtbeG7pWNdIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTAKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAiY8OhYyBxdXnhu4FuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTEKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgImNo4buJIHJhIGPDoWkgbcOgIGtobyBnaXQgxJHGsOG7o2MgY2hpYSBz4bq7IGdp4buvYSBuaGnhu4F1IG5nxrDhu51pIGTDuW5nIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTMgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3NworbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICJpbSBs4bq3bmciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyMiBidWlsdGluL2luaXQtZGIuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbWtkaXIgKHThuqFvIHRoxrAgbeG7pWMpOiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNoZGlyIChjaHV54buDbiDEkeG7lWkgdGjGsCBt4bulYykgc2FuZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyIlcyAoaG/hurdjIC0td29yay10cmVlPTx0aMawLW3hu6VjPikga2jDtG5nIGNobyBwaMOpcCBraMO0bmcgY2jhu4kgxJHhu4tuaCAlcyAoaG/hurdjIC0tZ2l0LSIKKyJkaXI9PHRoxrAtbeG7pWM+KSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTc5Cittc2dpZCAiQ2Fubm90IGFjY2VzcyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdHJ1eSBj4bqtcCB0aMawIG3hu6VjIGzDoG0gdmnhu4djIGhp4buHbiBow6BuaCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB0cnV5IGPhuq1wIGPDonkgKHRyZWUpIGzDoG0gdmnhu4djIGAlcyciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MzcKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8c2luY2U+Li48dW50aWw+XSBbWy0tXSA8cGF0aD4uLi5dXG4iCittc2dzdHIgImdpdCBsb2cgWzxjw6FjLXTDuXktY2jhu41uPl0gWzxr4buDLXThu6s+Li48Y2hvLcSR4bq/bj5dIFtbLS1dIDzEkcaw4budbmctZOG6q24+Li4uXVxuIgorCisjOiBidWlsdGluL2xvZy5jOjM4Cittc2dpZCAiICAgb3I6IGdpdCBzaG93IFtvcHRpb25zXSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiICAgb3I6IGdpdCBzaG93IFtjw6FjLXTDuXktY2jhu41uXSA8xJHhu5FpLXTGsOG7o25nPi4uLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDAKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAiY2jhurduIG3hu41pIGvhur90IHh14bqldCB04burIGRpZmYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTAxCittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgImhp4buDbiB0aOG7iyBtw6Mgbmd14buTbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDIKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJjw6FjIHTDuXkgY2jhu41uIHRyYW5nIHRyw60iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAiS+G6v3QgeHXhuqV0IGN14buRaSBjw7luZzogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo0MDMgYnVpbHRpbi9sb2cuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jIMSR4buRaSB0xrDhu6NuZyAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAiS2jDtG5nIG5o4bqtbiByYSBraeG7g3U6ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjYwOAorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgImZvcm1hdC5oZWFkZXJzIGtow7RuZyBjw7MgZ2nDoSB0cuG7iyBj4bulIHRo4buDIgorCisjOiBidWlsdGluL2xvZy5jOjY4MgorbXNnaWQgIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIKK21zZ3N0ciAidMOqbiBj4bunYSB0aMawIG3hu6VjIGvhur90IHh14bqldCBxdcOhIGTDoGkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBt4bufIHThuq1wIHRpbiBtaeG6v25nIHbDoTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NzA3Cittc2dpZCAiTmVlZCBleGFjdGx5IG9uZSByYW5nZS4iCittc2dzdHIgIkPhuqduIGNow61uaCB4w6FjIG3hu5l0IHbDuW5nLiIKKworIzogYnVpbHRpbi9sb2cuYzo3MTUKK21zZ2lkICJOb3QgYSByYW5nZS4iCittc2dzdHIgIktow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHbDuW5nLiIKKworIzogYnVpbHRpbi9sb2cuYzo3ODkKK21zZ2lkICJDb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICInQ292ZXIgbGV0dGVyJyBj4bqnbiBjaG8gxJHhu4tuaCBk4bqhbmcgdGjGsCIKKworIzogYnVpbHRpbi9sb2cuYzo4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiaW4tcmVwbHktdG8gxJFpw6puIHLhu5M6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjg5MAorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggW29wdGlvbnNdIFs8c2luY2U+IHwgPHJldmlzaW9uIHJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggW2PDoWMtdMO5eS1jaOG7jW5dIFs8a+G7gy104burPiB8IDx2w7luZy14ZW0teMOpdD5dIgorCisjOiBidWlsdGluL2xvZy5jOjkzNQorbXNnaWQgIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICJIYWkgdGjGsCBt4bulYyBr4bq/dCB4deG6pXQ/IgorCisjOiBidWlsdGluL2xvZy5jOjEwNjMKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICJkw7luZyBbUEFUQ0ggbi9tXSBuZ2F5IGPhuqMgduG7m2kgbWnhur9uZyB2w6EgxJHGoW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA2NgorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICJkw7luZyBbVsOBXSBuZ2F5IGPhuqMgduG7m2kgY8OhYyBtaeG6v25nIHbDoSBwaOG7qWMgdOG6oXAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA3MAorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICJoaeG7g24gdGjhu4sgbWnhur9uZyB2w6EgcmEgxJHhuqd1IHJhIGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA3MgorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICJ04bqhbyBiw6wgdGjGsCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDc0Cittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICJz4butIGThu6VuZyBjaOG7l2kgZMOjeSBz4buRIGThuqFuZyDEkcahbiBnaeG6o24gY2hvIHTDqm4gdOG6rXAtdGluIHh14bqldCByYSIKKworIzogYnVpbHRpbi9sb2cuYzoxMDc1Cittc2dpZCAic2Z4IgorbXNnc3RyICJzZngiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA3NgorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICJz4butIGThu6VuZyA8c2Z4PiB0aGF5IGNobyAnLnBhdGNoJyIKKworIzogYnVpbHRpbi9sb2cuYzoxMDc4Cittc2dpZCAic3RhcnQgbnVtYmVyaW5nIHBhdGNoZXMgYXQgPG4+IGluc3RlYWQgb2YgMSIKK21zZ3N0ciAiYuG6r3QgxJHhuqd1IMSRw6FuaCBz4buRIG1p4bq/bmcgdsOhIHThu6sgPG4+IHRoYXkgdsOsIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA4MAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiRMO5bmcgWzx0aeG7gW4tdOG7kT5dIHRoYXkgY2hvIFtWw4FdIgorCisjOiBidWlsdGluL2xvZy5jOjEwODMKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgImzGsHUgY8OhYyB04bqtcCB0aW4ga+G6v3QgcXXhuqMgdHJvbmcgPHQubeG7pWM+IgorCisjOiBidWlsdGluL2xvZy5jOjEwODYKK21zZ2lkICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIKK21zZ3N0ciAia2jDtG5nIHN0cmlwL2FkZCBbVsOBXSIKKworIzogYnVpbHRpbi9sb2cuYzoxMDg5Cittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAia2jDtG5nIGvhur90IHh14bqldCBkaWZmIChuaOG7r25nIGtow6FjIGJp4buHdCkgbmjhu4sgcGjDom4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5MQorbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAia2jDtG5nIGJhbyBn4buTbSBtaeG6v25nIHbDoSBraOG7m3AgduG7m2kgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyB0aMaw4bujbmcgbmd14buTbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDkzCittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICJoaeG7g24gdGjhu4sgxJHhu4tuaCBk4bqhbmcgbWnhur9uZyB2w6EgdGhheSB2w6wgbeG6t2MgxJHhu4tuaCAobWnhur9uZyB2w6EgKyB0aOG7kW5nIGvDqikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5NQorbXNnaWQgIk1lc3NhZ2luZyIKK21zZ3N0ciAiTOG7nWkgbmjhuq9uIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTYKK21zZ2lkICJoZWFkZXIiCittc2dzdHIgIsSR4bqndSDEkeG7gSB0aMawIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTcKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICJ0aMOqbSDEkeG6p3UgxJHhu4EgdGjGsCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk4IGJ1aWx0aW4vbG9nLmM6MTEwMAorbXNnaWQgImVtYWlsIgorbXNnc3RyICJ0aMawIMSRaeG7h24gdOG7rSIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk4Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgInRow6ptIFRvOiDEkeG6p3UgxJHhu4EgdGjGsCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTAwCittc2dpZCAiYWRkIENjOiBoZWFkZXIiCittc2dzdHIgInRow6ptIENjOiDEkeG6p3UgxJHhu4EgdGjGsCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTAyCittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAibWVzc2FnZS1pZCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTAzCittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICJkw7luZyB0aMawIMSR4bqndSB0acOqbiDEkeG7gyB0cuG6oyBs4budaSA8bWVzc2FnZS1pZD4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwNCBidWlsdGluL2xvZy5jOjExMDcKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAicmFuaCBnaeG7m2kiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwNQorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgIsSRw61uaCBrw6htIG1p4bq/bmcgdsOhIgorCisjOiBidWlsdGluL2xvZy5jOjExMDgKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICJkw7luZyBtaeG6v25nIHbDoSBsw6BtIG7hu5lpIGR1bmciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTExMgorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICJjaG8gcGjDqXAgbHXhu5NuZyBs4budaSBuaOG6r24sIGtp4buDdTogYHNoYWxsb3cnLCBgZGVlcCciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTExNAorbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAiY2jhu68ga8O9IgorCisjOiBidWlsdGluL2xvZy5jOjExMTUKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgInRow6ptIGNo4buvIGvDvSIKKworIzogYnVpbHRpbi9sb2cuYzoxMTE3Cittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyBjw6FjIHTDqm4gdOG6rXAgdGluIGPhu6dhIG1p4bq/bmcgdsOhIgorCisjOiBidWlsdGluL2xvZy5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29tbWl0dGVyIGluZm8gJXMiCittc2dzdHIgInRow7RuZyB0aW4gbmfGsOG7nWkgY2h1eeG7g24gZ2lhbyBraMO0bmcgY8OzIHRo4buxYyAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjAyCittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItbiB2w6AgIC1rIGxv4bqhaSB04burIGzhuqtuIG5oYXUuIgorCisjOiBidWlsdGluL2xvZy5jOjEyMDQKK21zZ2lkICItLXN1YmplY3QtcHJlZml4IGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiLS1zdWJqZWN0LXByZWZpeCB2w6AgLWsgeHVuZyBraOG6r2MgbmhhdS4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxMgorbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1vbmx5IGtow7RuZyBo4bujcCBsw70iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxNAorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2xvZy5jOjEyMTYKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sga2jDtG5nIGjhu6NwIGzDvSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjM5Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIsSR4bqndSByYSBjaHXhuqluLCBoYXkgdGjGsCBt4bulYywgY2jhu41uIGPDoWkgbsOgbz8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyBgJXMnIgorCisjOiBidWlsdGluL2xvZy5jOjEzOTQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHThuqFvIGPDoWMgdOG6rXAgdGluIGvhur90IHh14bqldCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQzCittc2dpZCAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0iCittc2dzdHIgImdpdCBjaGVycnkgWy12XSBbPHRoxrDhu6NuZy1uZ3Xhu5NuPiBbPGhlYWQ+IFs8Z2nhu5tpLWjhuqFuPl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSBuaMOhbmggbeG6oW5nIGLhu4sgdGhlbyB24bq/dCwgaMOjeSBjaOG7iSDEkeG7i25oIDx0aMaw4bujbmctbmd14buTbj4gbeG7mXQgY8OhY2ggIgorInRo4bunIGPDtG5nLlxuIgorCisjOiBidWlsdGluL2xvZy5jOjE1MTEgYnVpbHRpbi9sb2cuYzoxNTEzIGJ1aWx0aW4vbG9nLmM6MTUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpICVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDA4Cittc2dpZCAiZ2l0IGxzLWZpbGVzIFtvcHRpb25zXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLWZpbGVzIFtjw6FjLXTDuXktY2jhu41uXSBbPHThuq1wLXRpbj4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYzCittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAibmjhuq1uIGThuqFuZyBjw6FjIHRy4bqhbmcgdGjDoWkgdOG6rXAgdGluIHbhu5tpIHRo4bq7IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDY1Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgIiIKKyJkw7luZyBjaOG7ryBjw6FpIHZp4bq/dCB0aMaw4budbmcgY2hvIGPDoWMgdOG6rXAgdGluICdhc3N1bWUgdW5jaGFuZ2VkJyAoZ2nhuqMgxJHhu4tuaCBraMO0bmcgIgorInRoYXkgxJHhu5VpKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ2NworbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB04bqtcCB0aW4gxJHGsOG7o2Mgbmjhu5sgdOG6oW0gdsOgbyDEkeG6p3UgcmEgKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDY5Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiDEkcOjIHjDs2EgdHJvbmcga+G6v3QgeHXhuqV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDcxCittc2dpZCAic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB04bqtcCB0aW4gxJHDoyBi4buLIHPhu61hIMSR4buVaSByYSBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzMKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiBraMOhYyB0cm9uZyBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzUKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIGLhu4sgYuG7jyBxdWEgdHJvbmcga+G6v3QgeHXhuqV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDc4Cittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImhp4buDbiB0aOG7iyB0w6puIMSR4buRaSB0xrDhu6NuZyBj4bunYSBu4buZaSBkdW5nIMSRxrDhu6NjIGzGsHUgdHLhuqFuZyB0aMOhaSDhu58ga+G6v3QgeHXhuqV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDgwCittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIHRyw6puIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbcOgIG7DsyBj4bqnbiDEkcaw4bujYyBn4buhIGLhu48iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0ODIKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWUgb25seSIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIHTDqm4gY+G7p2EgY8OhYyB0aMawIG3hu6VjICdraMOhYyciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0ODUKK21zZ2lkICJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIgorbXNnc3RyICJraMO0bmcgaGnhu4NuIHRo4buLIHRoxrAgbeG7pWMgcuG7l25nIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDg4Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB04bqtcCB0aW4gY2jGsGEgaMOyYSB0cuG7mW4gdHJvbmcga+G6v3QgeHXhuqV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDkwCittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgImhp4buDbiB0aOG7iyB0aMO0bmcgdGluIHJlc29sdmUtdW5kbyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5MgorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAiYuG7jyBxdWEgbmjhu69uZyB04bqtcCB0aW4ga2jhu5twIHbhu5tpIG3hu5l0IG3huqt1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDk1Cittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAibeG6q3UgbG/huqFpIHRy4burIMSRxrDhu6NjIMSR4buNYyB04burIDx04bqtcCB0aW4+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDk4Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgIsSR4buNYyB0aMOqbSBjw6FjIG3huqt1IG5nb+G6oWkgdHLhu6sgbeG7l2kgdGjGsCBt4bulYyB0cm9uZyA8dOG6rXAgdGluPiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUwMAorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgInRow6ptIGxv4bqhaSB0cuG7qyB0acOqdSBjaHXhuqluIGtp4buDdSBnaXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDMKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAibMOgbSBjaG8ga+G6v3QgeHXhuqV0IGxpw6puIHF1YW4gxJHhur9uIHRoxrAgbeG7pWMg4bufIG3hu6ljIGNhbyBuaOG6pXQgKGfhu5FjKSBj4bunYSBk4buxIMOhbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUwNgorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAibuG6v3UgPHThuq1wIHRpbj4gYuG6pXQga+G7syBraMO0bmcg4bufIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYywgeOG7rSBsw70gbsOzIG5oxrAgbeG7mXQgbOG7l2kiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDcKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAidHJlZS1pc2giCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDgKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisiZ2nhuqMgxJHhu4tuaCBy4bqxbmcgY8OhYyDEkcaw4budbmcgZOG6q24gxJHDoyBi4buLIGfhu6EgYuG7jyBr4buDIHThu6sgPHRyZWUtaXNoPiBuYXkgduG6q24gaGnhu4duIGRp4buHbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUxMAorbXNnaWQgInNob3cgZGVidWdnaW5nIGRhdGEiCittc2dzdHIgImhp4buDbiB0aOG7iyBk4buvIGxp4buHdSBn4buhIGzhu5dpIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoyNworbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBscy10cmVlIFs8Y8OhYy10w7l5LWNo4buNbj5dIDx0cmVlLWlzaD4gWzzEkcaw4budbmctZOG6q24+Li4uXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI1Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgY8OhYyB0cmVlIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjcKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgIsSR4buHIHF1eSB2w6BvIGPDoWMgdGjGsCBt4bulYyBjb24iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOQorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6J5IGtoaSDEkeG7hyBxdXkiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMgorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgImNo4bqlbSBk4bupdCBt4bulYyB0aW4gduG7m2kgYnl0ZSBOVUwiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMworbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgImfhu5NtIGPhuqMga8OtY2ggdGjGsOG7m2MgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUgYnVpbHRpbi9scy10cmVlLmM6MTM3Cittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAiY2jhu4kgbGnhu4d0IGvDqiB0w6puIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAiZMO5bmcgdMOqbiDEkcaw4budbmcgZOG6q24gxJHhuqd5IMSR4bunIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDIKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgImxp4buHdCBrw6ogY8OieSBt4bulYyB0aW47IGtow7RuZyBjaOG7iSB0aMawIG3hu6VjIGhp4buHbiBow6BuaCAobmfhu6Ugw70gLS1mdWxsLW5hbWUpIgorCisjOiBidWlsdGluL21lcmdlLmM6NDMKK21zZ2lkICJnaXQgbWVyZ2UgW29wdGlvbnNdIFs8Y29tbWl0Pi4uLl0iCittc2dzdHIgImdpdCBtZXJnZSBbY8OhYy10w7l5LWNo4buNbl0gWzxjb21taXQ+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0Cittc2dpZCAiZ2l0IG1lcmdlIFtvcHRpb25zXSA8bXNnPiBIRUFEIDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UgW2PDoWMtdMO5eS1jaOG7jW5dIDx0aW4tbmjhuq9uPiBIRUFEIDxjb21taXQ+IgorCisjOiBidWlsdGluL21lcmdlLmM6NDUKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tYWJvcnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAic3dpdGNoIGBtJyB5w6p1IGPhuqd1IG3hu5l0IGdpw6EgdHLhu4siCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IGNoaeG6v24gbMaw4bujYyBow7JhIHRy4buZbiBgJXMnLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkPDoWMgY2hp4bq/biBsxrDhu6NjIHPhurVuIHPDoG5nIGzDoDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkPDoWMgY2hp4bq/biBsxrDhu6NjIHTDuXkgY2jhu4luaCBz4bq1biBzw6BuZyBsw6A6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTgzCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyB0aOG7kW5nIGvDqiBraMOhYyBiaeG7h3QgdOG6oWkgY3Xhu5FpIGPhu6dhIGzhuqduIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg2Cittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdGjhu5FuZyBrw6oga2jDoWMgYmnhu4d0IHThuqFpIGN14buRaSBj4bunYSBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4NworbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIijEkeG7k25nIG5naMSpYSB24bubaSAtLXN0YXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg5Cittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJ0aMOqbSAow610IG5o4bqldCA8bj4pIG3hu6VjIHThu6sgc2hvcnRsb2cgY2hvIGdoaSBjaMO6IGNodXnhu4NuIGdpYW8gaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTIKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAidOG6oW8gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSDEkcawb24gdGhheSB2w6wgdGjhu7FjIGhp4buHbiB2aeG7h2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTQKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgInRo4buxYyBoaeG7h24gY2h1eeG7g24gZ2lhbyBu4bq/dSBow7JhIHRy4buZbiB0aMOgbmggY8O0bmcgKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk2Cittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICJz4butYSBjaMO6IHRow61jaCB0csaw4bubYyBraGkgY2h1eeG7g24gZ2lhbyAoY29tbWl0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5OAorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgImNobyBwaMOpcCBmYXN0LWZvcndhcmQgKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjAwCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiYuG7jyBxdWEgbuG6v3UgZmFzdC1mb3J3YXJkIGtow7RuZyB0aOG7gyDEkcaw4bujYyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMiBidWlsdGluL25vdGVzLmM6ODcwIGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgImNoaeG6v24gbMaw4bujYyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMworbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAiY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIHPhur0gZMO5bmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDQKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgInTDuXlfY2jhu41uPWdpw6FfdHLhu4siCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDUKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJ0w7l5IGNo4buNbiBjaG8gY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIMSRw6MgY2jhu41uIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA3Cittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICIiCisiaMOyYSB0cuG7mW4gZ2hpIGNow7ogY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyAoZMOgbmggY2hvIGjDsmEgdHLhu5luIG5vbi1mYXN0LWZvcndhcmQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjExCittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImLDo2kgYuG7jyBxdcOhIHRyw6xuaCBow7JhIHRy4buZbiBoaeG7h24gdOG6oWkgxJFhbmcgdGjhu7FjIGhp4buHbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0MAorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2jhuqF5IHN0YXNoLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NQorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAic3Rhc2ggZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5IGJ1aWx0aW4vbWVyZ2UuYzoyODYKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICJyZWFkLXRyZWUgZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTYKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIChraMO0bmcgY8OzIGfDrCDEkeG7gyBzcXVhc2gpIgorCisjOiBidWlsdGluL21lcmdlLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiU3F1YXNoIGNvbW1pdCAtLSBraMO0bmcgY+G6rXAgbmjhuq10IEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM2MQorbXNnaWQgIldyaXRpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAixJBhbmcgZ2hpIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNjMKK21zZ2lkICJGaW5pc2hpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiSG/DoG4gdGjDoG5oIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJLaMO0bmcgdGjDtG5nIMSRaeG7h3AgaMOyYSB0cuG7mW4gLS0ga2jDtG5nIGPhuq1wIG5o4bqtdCBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiYCVzJyBraMO0bmcgY2jhu4kgxJHhur9uIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgbsOgbyBj4bqjIgorCisjOiBidWlsdGluL21lcmdlLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIkNodeG7l2kgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzYWk6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NjI4Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAibOG7h25oIGdpdCB3cml0ZS10cmVlIGfhurdwIGzhu5dpIGtoaSBnaGkgbeG7mXQgY8OieSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY3OAorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyBi4buZIG5o4bubIHThuqFtIgorCisjOiBidWlsdGluL21lcmdlLmM6NzA5Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiS2jDtG5nIGPhuqdtIG7huq9tIGfDrCBuZ2/DoGkgaGFpIGhlYWQgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbiBjaG8gbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgdOG7qyBgJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIlbhuqtuIGNoxrBhIGjDsmEgdHLhu5luIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KTsgc+G7rSBk4bulbmcgbOG7h25oIGBnaXQgY29tbWl0JyDEkeG7gyAiCisiaG/DoG4gdOG6pXQgdmnhu4djIGjDsmEgdHLhu5luLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODkxCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJIw6N5IG5o4bqtcCB2w6BvIGPDoWMgdGjDtG5nIHRpbiDEkeG7gyBnaeG6o2kgdGjDrWNoIHThuqFpIHNhbyBz4buxIGjDsmEgdHLhu5luIG7DoHkgbMOgIGPhuqduICIKKyJ0aGnhur90LFxuIgorIsSR4bq3YyBiaeG7h3QgbMOgIGtoaSBuw7MgaMOyYSB0cuG7mW4gdGjGsOG7o25nIG5ndeG7k24gxJHDoyBj4bqtcCBuaOG6rXQgdsOgbyB0cm9uZyBt4buZdCBuaMOhbmggIgorInRvcGljLlxuIgorIlxuIgorIk5o4buvbmcgZMOybmcgxJHGsOG7o2MgYuG6r3QgxJHhuqd1IGLhurFuZyAnIycgc+G6vSDEkcaw4bujYyBi4buPIHF1YSwgdsOgIHBo4bqnbiBjaMO6IHRow61jaCBuw6B5IG7hur91ICIKKyJy4buXbmdcbiIKKyJz4bq9IGzDoG0gaOG7p3kgYuG7jyBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTE1Cittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICJDaMO6IHRow61jaCBj4bunYSBs4bqnbiBjb21taXQgKGNodXnhu4NuIGdpYW8pIGLhu4sgdHLhu5FuZyBy4buXbmcuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiVGjhuqduIGvhu7MuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorIlZp4buHYyB04buxIMSR4buZbmcgaMOyYSB0cuG7mW4gZ+G6t3AgbOG7l2k7IGjDo3kgc+G7rWEgY8OhYyB4dW5nIMSR4buZdCBzYXUgxJHDsyBjaHV54buDbiBnaWFvICIKKyIoY29tbWl0KSBr4bq/dCBxdeG6oy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQiCittc2dzdHIgIiVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhuqduIGNvbW1pdCAoY2h1eeG7g24gZ2lhbykiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQ5Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICJraMO0bmcgcGjhuqNpIG5ow6FuaCBoaeG7h24gaMOgbmgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDUxCittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJLaMO0bmcgY8OzIG3DoXkgY2jhu6cgY2hvIG5ow6FuaCBoaeG7h24gaMOgbmguIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1MworbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aMaw4bujbmcgbmd14buTbiBt4bq3YyDEkeG7i25oIMSRxrDhu6NjIMSR4buLbmggbmdoxKlhIGNobyBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAiS2jDtG5nIG5ow6FuaCBt4bqhbmcgdGhlbyB24bq/dCBjaG8gJXMgdOG7qyAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDUgYnVpbHRpbi9tZXJnZS5jOjEzMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBz4buRIHRo4bupIGNow7puZyB0w7RpIGPDsyB0aOG7gyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIiIKKyLhu54gxJHDonkga2jDtG5nIGPDsyBs4bqnbiBow7JhIHRy4buZbiBuw6BvIMSRxrDhu6NjIGjhu6d5IGLhu48gZ2nhu69hIGNo4burbmcgY+G6oyAodGhp4bq/dSBNRVJHRV9IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjI5IGdpdC1wdWxsLnNoOjMxCittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCittc2dzdHIgIiIKKyJC4bqhbiBjaMawYSBr4bq/dCB0aMO6YyB2aeG7h2MgaMOyYSB0cuG7mW5nIChNRVJHRV9IRUFEIHbhuqtuIHThu5NuIHThuqFpKS5cbiIKKyJIw6N5IGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgY8OhYyB0aGF5IMSR4buVaSB0csaw4bubYyBraGkgYuG6oW4gY8OzIHRo4buDIGjDsmEgdHLhu5luLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzIgZ2l0LXB1bGwuc2g6MzQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIkLhuqFuIGNoxrBhIGvhur90IHRow7pjIHZp4buHYyBow7JhIHRy4buZbmcgKE1FUkdFX0hFQUQgduG6q24gdOG7k24gdOG6oWkpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzYKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorIkLhuqFuIGNoxrBhIGvhur90IHRow7pjIHZp4buHYyBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCB24bqrbiB04buTbiB04bqhaSkuXG4iCisiSMOjeSBjaHV54buDbiBnaWFvIChjb21taXQpIGPDoWMgdGhheSDEkeG7lWkgdHLGsOG7m2Mga2hpIGLhuqFuIGPDsyB0aOG7gyBow7JhIHRy4buZbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjM5Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICJC4bqhbiBjaMawYSBr4bq/dCB0aMO6YyB2aeG7h2MgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgduG6q24gdOG7k24gdOG6oWkpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNDgKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiQuG6oW4ga2jDtG5nIHRo4buDIGvhur90IGjhu6NwIC0tc3F1YXNoIHbhu5tpIC0tbm8tZmYuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI1MworbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLW5vLWZmIHdpdGggLS1mZi1vbmx5LiIKK21zZ3N0ciAiQuG6oW4ga2jDtG5nIHRo4buDIGvhur90IGjhu6NwIC0tbm8tZmYgduG7m2kgLS1mZi1vbmx5LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNjAKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiIgorIktow7RuZyBjaOG7iSByYSBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIHbDoCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBjaMawYSDEkcaw4bujYyAiCisixJHhurd0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTIKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGjDsmEgdHLhu5luIG3hu5l0IGPDoWNoIMSRw7puZyDEkeG6r24gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSB2w6BvIG3hu5l0ICIKKyJoZWFkIHLhu5duZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTUKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAiU3F1YXNoIGNvbW1pdCB2w6BvIG3hu5l0IGhlYWQgdHLhu5FuZyBy4buXbmcgduG6q24gY2jGsGEgxJHGsOG7o2MgaOG7lyB0cuG7oyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTcKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorIkNodXnhu4NuIGdpYW8gKGNvbW1pdCkga2jDtG5nLWZhc3QtZm9yd2FyZCBraMO0bmcgaOG7o3AgbMO9IOG7nyB0cm9uZyBt4buZdCBoZWFkIHRy4buRbmcgIgorInLhu5duZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIsSQYW5nIGPhuq1wIG5o4bqtdCAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgIsSQYW5nIHRo4butIGjDsmEgdHLhu5luIGtp4buDdSAndHJpdmlhbCBpbi1pbmRleCcuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiS2jDtG5nLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4OQorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiVGjhu7FjIGhp4buHbiBs4buHbmggZmFzdC1mb3J3YXJkIGzDoCBraMO0bmcgdGjhu4MgxJHGsOG7o2MsIMSRYW5nIGLhu48gcXVhLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MTIgYnVpbHRpbi9tZXJnZS5jOjE1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIsSQYW5nIHR1YSBs4bqhaSBjw6J5IHRow6BuaCB0aOG7nWkgeGEgeMawYS4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAixJBhbmcgdGjhu60gY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luICVzLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICJLaMO0bmcgY8OzIGNoaeG6v24gbMaw4bujYyBow7JhIHRy4buZbiBuw6BvIMSRxrDhu6NjIG7huq9tIGdp4buvIChoYW5kbGUpIHPhu7EgaMOyYSB0cuG7mW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJIw7JhIHRy4buZbiB24bubaSBjaGnhur9uIGzGsOG7o2MgJXMgZ+G6t3AgbOG7l2kuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICJT4butIGThu6VuZyAlcyDEkeG7gyBjaHXhuqluIGLhu4sgZ2nhuqNpIHF1eeG6v3QgYuG6sW5nIHRheS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIkjDsmEgdHLhu5luIHThu7EgxJHhu5luZyDEkcOjIHRy4bufIG7Dqm4gdOG7kXQ7IGLhu4sgZOG7q25nIHRyxrDhu5tjIGtoaSB2aeG7h2MgY2h1eeG7g24gZ2lhbyDEkcaw4bujYyB5w6p1ICIKKyJj4bqndVxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyNgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYXwtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYXwtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjI3Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hfC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYXwtLWFsbF0gLS1vY3RvcHVzIDxs4bqnbiBjb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyOAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGzhuqduIGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjI5Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6OTgKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgInh14bqldCByYSB04bqldCBj4bqjIGPDoWMgw7RuZyBiw6AsIHThu5UgdGnDqm4gY2h1bmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjk5Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICJ0w6xtIHThu5UgdGnDqm4gY+G7p2EgaMOyYSB0cuG7mW4gbi13YXkgxJHGoW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjEwMAorbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICJsaeG7h3Qga8OqIGPDoWMgJ3JldicgbcOgIG7DsyBraMO0bmcgdGjhu4MgxJHhu41jIMSRxrDhu6NjIHThu6sgY8OhaSBraMOhYyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTAyCittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICJsw6AgY2hhIG3hurkgxJHhuqd1IHRpw6puIGPhu6dhIGPDoWkga2jDoWM/IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo4Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFtvcHRpb25zXSBbLUwgbmFtZTEgWy1MIG9yaWcgWy1MIG5hbWUyXV1dIGZpbGUxIG9yaWdfZmlsZSAiCisiZmlsZTIiCittc2dzdHIgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbY8OhYy10w7l5LWNo4buNbl0gWy1MIHTDqm4xIFstTCBn4buRYyBbLUwgdMOqbjJdXV0gdOG6rXAtdGluMSB04bqtcC10aW4tIgorImfhu5FjIHThuq1wLXRpbjIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjMzCittc2dpZCAic2VuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZ+G7rWkga+G6v3QgcXXhuqMgdsOgbyDEkeG6p3UgcmEgdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzQKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAiZMO5bmcga2nhu4N1ICBow7JhIGThu7FhIHRyw6puIGRpZmYzIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAixJHhu4MgdHLDoW5oIHh1bmcgxJHhu5l0LCBz4butIGThu6VuZyBwaGnDqm4gYuG6o24gY+G7p2EgY2jDum5nIHRhIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNworbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICLEkeG7gyB0csOhbmggeHVuZyDEkeG7mXQsIHPhu60gZOG7pW5nIHBoacOqbiBi4bqjbiBj4bunYSBo4buNIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgIsSR4buDIHRyw6FuaCB4dW5nIMSR4buZdCwgc+G7rSBk4bulbmcgcGhpw6puIGLhuqNuIGvhur90IGjhu6NwIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MgorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIgorbXNnc3RyICLEkeG7gyB0csOhbmggeHVuZyDEkeG7mXQsIGjDo3kgc+G7rSBk4bulbmcga8OtY2ggdGjGsOG7m2MgYuG7mSB04bqhbyBuw6B5IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MworbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAia2jDtG5nIGPhuqNuaCBiw6FvIHbhu4EgY8OhYyB4dW5nIMSR4buZdCB44bqjeSByYSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnX2ZpbGUvZmlsZTIiCittc2dzdHIgIsSR4bq3dCBuaMOjbiBjaG8gdOG6rXAtdGluLTEvdOG6rXAtdGluLWfhu5FjL3Thuq1wLXRpbi0yIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY3Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTMKK21zZ2lkICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIKK21zZ3N0ciAixJHhuqd1IHbDoG8gxJHGsOG7o2MgY2jhuqVtIGThu6l0IGLhu59pIE5VTCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTQgYnVpbHRpbi93cml0ZS10cmVlLmM6MjQKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgImNobyBwaMOpcCB0aGnhur91IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTUKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgImNobyBwaMOpcCB04bqhbyBuaGnhu4F1IGjGoW4gbeG7mXQgY8OieSIKKworIzogYnVpbHRpbi9tdi5jOjE0Cittc2dpZCAiZ2l0IG12IFtvcHRpb25zXSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgW2PDoWMtdMO5eS1jaOG7jW5dIDxuZ3Xhu5NuPi4uLiA8xJHDrWNoPiIKKworIzogYnVpbHRpbi9tdi5jOjY0Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLDqXAgYnXhu5ljIGRpIGNodXnhu4NuIGhheSDEkeG7lWkgdMOqbiB0aOG6rW0gY2jDrSBj4bqjIGtoaSDEkcOtY2ggxJHDoyB04buTbiB04bqhaSIKKworIzogYnVpbHRpbi9tdi5jOjY1Cittc2dpZCAic2tpcCBtb3ZlL3JlbmFtZSBlcnJvcnMiCittc2dzdHIgImLhu48gcXVhIGPDoWMgbOG7l2kgbGnDqm4gcXVhbiDEkeG6v24gZGkgY2h1eeG7g24sIMSR4buVaSB0w6puIgorCisjOiBidWlsdGluL212LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSB2aeG7h2MgxJHhu5VpIHTDqm4gY+G7p2EgYCVzJyB0aMOgbmggYCVzJ1xuIgorCisjOiBidWlsdGluL212LmM6MTEyCittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAibmd14buTbiBzYWkiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTUKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gbeG7mXQgdGjGsCBt4bulYyB2w6BvIHRyb25nIGNow61uaCBuw7MgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTgKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICJraMO0bmcgZGkgY2h1eeG7g24gxJHGsOG7o2MgdGjGsCBt4bulYyB0aMO0bmcgcXVhIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9tdi5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJIdWg/ICUuKnMgaXMgaW4gaW5kZXg/IgorbXNnc3RyICJI4bqjPyAlLipzIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyDDoD8iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNDAKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJ0aMawIG3hu6VjIG5ndeG7k24gbMOgIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL212LmM6MTcxCittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAia2jDtG5nIG7hurFtIGTGsOG7m2kgc+G7sSBxdeG6o24gbMO9IG3DoyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL212LmM6MTczCittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICLEkcOtY2ggxJHDoyB04buTbiB04bqhaSBz4bq1biBy4buTaSIKKworIzogYnVpbHRpbi9tdi5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICLEkWFuZyBnaGkgxJHDqCBsw6puIGAlcyciCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIMSRw6giCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIk5oaeG7gXUgbmd14buTbiBjaG8gY8O5bmcgbeG7mXQgxJHDrWNoIgorCisjOiBidWlsdGluL212LmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywgbmd14buTbj0lcywgxJHDrWNoPSVzIgorCisjOiBidWlsdGluL212LmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIsSQ4buVaSB0w6puICVzIHRow6BuaCAlc1xuIgorCisjOiBidWlsdGluL212LmM6MjE1IGJ1aWx0aW4vcmVtb3RlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICLEkeG7lWkgdMOqbiAlcyBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjE3NQorbXNnaWQgImdpdCBuYW1lLXJldiBbb3B0aW9uc10gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbY8OhYy10w7l5LWNo4buNbl0gPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoxNzYKK21zZ2lkICJnaXQgbmFtZS1yZXYgW29wdGlvbnNdIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgW2PDoWMtdMO5eS1jaOG7jW5dIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MTc3Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFtvcHRpb25zXSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgW2PDoWMtdMO5eS1jaOG7jW5dIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyMjkKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyB0w6puIChraMO0bmcgU0hBLTEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjMwCittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJjaOG7iSBkw7luZyBjw6FjIHRo4bq7IMSR4buDIMSR4bq3dCB0w6puIGNobyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyMzIKK21zZ2lkICJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiY2jhu4kgc+G7rSBk4bulbmcgY8OhYyB0aGFtIGNoaeG6v3UgKHJlZnMpIGto4bubcCB24bubaSA8beG6q3U+IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjM0Cittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAiIgorImxp4buHdCBrw6ogdOG6pXQgY+G6oyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gY8OzIHRo4buDIMSR4buNYyDEkcaw4bujYyB04burIHThuqV0IGPhuqMgY8OhYyB0aGFtIGNoaeG6v3UiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyMzUKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgIsSR4buNYyB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyMzYKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyIKK21zZ3N0ciAiY2hvIHBow6lwIGhp4buDbiB0aOG7iyBjw6FjIHTDqm4gYGNoxrBhIMSR4buLbmggbmdoxKlhJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIFtsaXN0IFs8xJHhu5FpLXTGsOG7o25nPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gYWRkIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgKC1jIHwgLUMpICIKKyI8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGFkZCBbLWZdIFstbSA8bOG7nWktbmjhuq9uPiB8IC1GIDx04bqtcC10aW4+IHwgKC1jIHwgIgorIi1DKSA8xJHhu5FpLXTGsOG7o25nPl0gWzzEkeG7kWktdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGNvcHkgWy1mXSA8dOG7qy3EkeG7kWktdMaw4bujbmc+IDzEkeG6v24txJHhu5FpLXTGsOG7o25nPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGFwcGVuZCBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAoLWMgfCAtQykgIgorIjxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gYXBwZW5kIFstbSA8bOG7nWktbmjhuq9uPiB8IC1GIDx04bqtcC10aW4+IHwgKC1jIHwgLSIKKyJDKSA8xJHhu5FpLXTGsOG7o25nPl0gWzzEkeG7kWktdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBlZGl0IFs8xJHhu5FpLXTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gc2hvdyBbPMSR4buRaS10xrDhu6NuZz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+IF0gPG5vdGVzX3JlZj4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxjaGnhur9uLWzGsOG7o2M+IF0gPG5vdGVzX3JlZj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gcmVtb3ZlIFs8xJHhu5FpLXTGsOG7o25nPi4uLl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIHBydW5lIFstbiB8IC12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gcHJ1bmUgWy1uIHwgLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGlzdCBbPMSR4buRaSB0xrDhu6NuZz5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3Cittc2dpZCAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYWRkIFs8Y8OhYy10w7l5LWNo4buNbj5dIFs8xJHhu5FpLXTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MgorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs8Y8OhYy10w7l5LWNo4buNbj5dIDx04burLcSR4buRaS10xrDhu6NuZz4gPMSR4bq/bi3EkeG7kWktdMaw4bujbmc+IgorCisjOiBidWlsdGluL25vdGVzLmM6NTMKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPHThu6stxJHhu5FpLXTGsOG7o25nPiA8xJHhur9uLcSR4buRaS10xrDhu6NuZz5dLi4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NTgKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhcHBlbmQgWzxjw6FjLXTDuXktY2jhu41uPl0gWzzEkeG7kWktdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYzCittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGVkaXQgWzzEkeG7kWkgdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY4Cittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgWzzEkeG7kWkgdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlc19yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgWzxjw6FjLXTDuXktY2jhu41uPl0gPG5vdGVzX3JlZj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NAorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8Y8OhYy10w7l5LWNo4buNbj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxjw6FjLXTDuXktY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MAorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPMSR4buRaSB0xrDhu6NuZz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODUKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPGPDoWMtdMO5eS1jaOG7jW4+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkwCittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4Mga2jhu59pIGNo4bqheSAnc2hvdycgY2hvIMSR4buRaSB0xrDhu6NuZyBgJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTQ4Cittc2dpZCAiY2FuJ3QgZmRvcGVuICdzaG93JyBvdXRwdXQgZmQiCittc2dzdHIgImtow7RuZyB0aOG7gyBmZG9wZW4gJ3Nob3cnIChs4buHbmggaGnhu4NuIHRo4buLKSBtw7QgdOG6oyB04bqtcCB0aW4gKGZkKSBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSRw7NuZyDEkcaw4budbmcg4buRbmcgY2hvIGzhu4duaCAnc2hvdycgY2hvIMSR4buRaSB0xrDhu6NuZyBgJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5pc2ggJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGhvw6BuIHRow6BuaCBgc2hvdycgY2hvIMSR4buRaSB0xrDhu6NuZyBgJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTc4IGJ1aWx0aW4vdGFnLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdOG6rXAgdGluIGAlcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTIKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgIiIKKyJYaW4gaMOjeSDDoXAgZOG7pW5nIG7hu5lpIGR1bmcgY+G7p2EgZ2hpIGNow7ogc+G7rSBk4bulbmcgaG/hurdjIGzDoCB0w7l5IGNo4buNbiAtbSBob+G6t2MgbMOgIC1GIgorCisjOiBidWlsdGluL25vdGVzLmM6MjEzIGJ1aWx0aW4vbm90ZXMuYzo5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIsSQYW5nIGfhu6EgYuG7jyBnaGkgY2jDuiAobm90ZSkgY2hvIMSR4buRaSB0xrDhu6NuZyAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjE4Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIMSR4buRaSB0xrDhu6NuZyBnaGkgY2jDuiAobm90ZSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG5vdGUgY29udGVudHMgaGFzIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiTuG7mWkgZHVuZyBnaGkgY2jDuiBjw7JuIGzhuqFpICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6MjU0IGJ1aWx0aW4vdGFnLmM6NTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgYCVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1NiBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIMSR4buDIMSR4buNYyBoYXkgZ2hpIGAlcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNzUgYnVpbHRpbi9ub3Rlcy5jOjQ0OCBidWlsdGluL25vdGVzLmM6NDUwCisjOiBidWlsdGluL25vdGVzLmM6NTEwIGJ1aWx0aW4vbm90ZXMuYzo1NjQgYnVpbHRpbi9ub3Rlcy5jOjY0NworIzogYnVpbHRpbi9ub3Rlcy5jOjY1MiBidWlsdGluL25vdGVzLmM6NzI3IGJ1aWx0aW4vbm90ZXMuYzo3NjkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NzEgYnVpbHRpbi9yZXNldC5jOjI5MyBidWlsdGluL3RhZy5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGdp4bqjaSBxdXnhur90IGAlcycgbmjGsCBsw6AgbeG7mXQgdGhhbSBjaGnhur91IChyZWYpIGjhu6NwIGzhu4cuIgorCisjOiBidWlsdGluL25vdGVzLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buNYyDEkeG7kWkgdMaw4bujbmcgYCVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMDIKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBjaMawYSDEkcaw4bujYyBraOG7n2kgdOG6oW8gaG/hurdjIGtow7RuZyDEkcaw4bujYyB0aGFtIGNoaeG6v3UgIgorImPDonkgZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICJHacOhIHRy4buLIG5vdGVzLnJld3JpdGVNb2RlIHNhaTogYCVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiVOG7qyBjaOG7kWkgZ2hpIMSRw6ggZ2hpIGNow7ogdHJvbmcgJXMgKG7hurFtIG5nb8OgaSBj4bunYSByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgdGhlCisjLiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcyBpdHMgdmFsdWUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJHacOhIHRy4buLICVzIHNhaTogYCVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIkTDsm5nIG5o4bqtcCB2w6BvIGThu4sgaMOsbmg6IGAlcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgc2FvIGNow6lwIGdoaSBjaMO6IChub3RlKSB04burIGAlcycgdOG7m2kgYCVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUwMyBidWlsdGluL25vdGVzLmM6NTU3IGJ1aWx0aW4vbm90ZXMuYzo2MzAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NDIgYnVpbHRpbi9ub3Rlcy5jOjcxNSBidWlsdGluL25vdGVzLmM6NzYyCisjOiBidWlsdGluL25vdGVzLmM6MTAzNgorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgInF1w6Egbmhp4buBdSDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxNiBidWlsdGluL25vdGVzLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSBnaGkgY2jDuiBjaG8gxJHhu5FpIHTGsOG7o25nICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzOCBidWlsdGluL25vdGVzLmM6Njk1Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAibuG7mWkgZHVuZyBnaGkgY2jDuiAobm90ZSkgbuG6sW0gdHJvbmcgbeG7mXQgY2h14buXaSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0MSBidWlsdGluL25vdGVzLmM6Njk4Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgIm7hu5lpIGR1bmcgZ2hpIGNow7ogKG5vdGUpIG7hurFtIHRyb25nIG3hu5l0IHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0MyBidWlsdGluL25vdGVzLmM6NTQ2IGJ1aWx0aW4vbm90ZXMuYzo3MDAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDMgYnVpbHRpbi90YWcuYzo0NzYKK21zZ2lkICJvYmplY3QiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0NCBidWlsdGluL25vdGVzLmM6NzAxCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJkw7luZyBs4bqhaSBuaMawbmcgY8OzIHPhu61hIGNo4buvYSDEkeG7kWkgdMaw4bujbmcgbm90ZSDEkcOjIGNo4buJIHJhIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQ3IGJ1aWx0aW4vbm90ZXMuYzo3MDQKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgImTDuW5nIGzhuqFpIMSR4buRaSB0xrDhu6NuZyBnaGkgY2jDuiAobm90ZSkgxJHDoyBjaOG7iSByYSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0OSBidWlsdGluL25vdGVzLmM6NjE3Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAidGhheSB0aOG6vyBnaGkgY2jDuiB0csaw4bubYyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyB0aMOqbSBjw6FjIGdoaSBjaMO6LiDEkMOjIHTDrG0gdGjhuqV5IGPDoWMgZ2hpIGNow7ogxJHDoyBjw7Mgc+G6tW4gY2hvIMSR4buRaSB0xrDhu6NuZyAiCisiJXMuIFPhu60gZOG7pW5nIHTDuXkgY2jhu41uICctZicgxJHhu4MgZ2hpIMSRw6ggbMOqbiBjw6FjIGdoaSBjaMO6IGPFqSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4OCBidWlsdGluL25vdGVzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAixJBhbmcgZ2hpIMSRw6ggbMOqbiBnaGkgY2jDuiBjxakgY2hvIMSR4buRaSB0xrDhu6NuZyAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NjE4Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgIsSR4buNYyBjw6FjIMSR4buRaSB0xrDhu6NuZyB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MjAKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAidOG6o2kgY+G6pXUgaMOsbmggY2jDqXAgbOG6oWkgY2hvIDxs4buHbmg+IChuZ+G6p20gxJHhu4tuaCBsw6AgLS1zdGRpbikiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MzgKK21zZ2lkICJ0b28gZmV3IHBhcmFtZXRlcnMiCittc2dzdHIgInF1w6Egw610IMSR4buRaSBz4buRIgorCisjOiBidWlsdGluL25vdGVzLmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBzYW8gY2jDqXAgY8OhYyBnaGkgY2jDui4gxJDDoyB0w6xtIHRo4bqleSBjw6FjIGdoaSBjaMO6IMSRw6MgY8OzIHPhurVuIGNobyDEkeG7kWkgIgorInTGsOG7o25nICVzLiBT4butIGThu6VuZyB0w7l5IGNo4buNbiAnLWYnIMSR4buDIGdoaSDEkcOoIGzDqm4gY8OhYyBnaGkgY2jDuiBjxakiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIlRoaeG6v3UgZ2hpIGNow7ogdHLDqm4gxJHhu5FpIHTGsOG7o25nIG5ndeG7kW4gJXMuIEtow7RuZyB0aOG7gyBzYW8gY2jDqXAuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyJDw6FjIHTDuXkgY2jhu41uIC1tLy1GLy1jLy1DIMSRw6MgY+G7lSBraMO0bmcgY8OybiBkw7luZyBu4buvYSBjaG8gbOG7h25oIGNvbiBgZWRpdCcuXG4iCisiWGluIGjDo3kgc+G7rSBk4bulbmcgbOG7h25oIHNhdSDEkeG7gyB0aGF5IHRo4bq/OiBgZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NjcKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIlTDuXkgY2jhu41uIGNodW5nIgorCisjOiBidWlsdGluL25vdGVzLmM6ODY5Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gduG7gSBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3MQorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKyJwaMOibiBnaeG6o2kgY8OhYyB4dW5nIMSR4buZdCBgbm90ZXMnIHPhu60gZOG7pW5nIGNoaeG6v24gbMaw4bujYyDEkcOjIMSRxrBhIHJhIChtYW51YWwvb3Vycy8iCisidGhlaXJzL3VuaW9uL2NhdF9zb3J0X3VuaXEpIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiQ2h1eeG7g24gZ2lhbyBjw6FjIG5vdGUgY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzUKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICIiCisiY8OhYyBub3RlIGN14buRaSBjw7luZyDEkcaw4bujYyBow7JhIHRy4buZbiBi4bufaSBjw6FjIG5vdGUgY2jGsGEgaMOyYSB0cuG7mW4gY+G7p2EgbOG6p24gY2h1eeG7g24gIgorImdpYW8iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzcKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJI4buneSBi4buPIHBow6JuIGdp4bqjaSBnaGkgY2jDuiAobm90ZSkgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzkKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiYuG7jyBxdWEgaMOyYSB0cuG7mW4gY8OhYyBnaGkgY2jDuiAobm90ZSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIsSQ4buRaSB0xrDhu6NuZyAlcyBraMO0bmcgY8OzIGdoaSBjaMO6IChub3RlKVxuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTg2Cittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICJj4buRIGfhuq9uZyBn4buhIGLhu48gbeG7mXQgbm90ZSBjaMawYSB04burbmcgdOG7k24gdOG6oWkga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbOG7l2kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5ODkKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAixJHhu41jIHTDqm4gxJHhu5FpIHTGsOG7o25nIHThu6sgdGhp4bq/dCBi4buLIG5o4bqtcCBjaHXhuqluIgorCisjOiBidWlsdGluL25vdGVzLmM6MTA3MAorbXNnaWQgIm5vdGVzX3JlZiIKK21zZ3N0ciAibm90ZXNfcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6MTA3MQorbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlc19yZWY+IgorbXNnc3RyICJkw7luZyBgbm90ZXMnIHThu6sgPG5vdGVzX3JlZj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMTA2IGJ1aWx0aW4vcmVtb3RlLmM6MTU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJLaMO0bmcgaGnhu4N1IGPDonUgbOG7h25oIGNvbjogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMKK21zZ2lkICJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFtvcHRpb25zLi4uXSBbPCByZWYtbGlzdCB8IDwgb2JqZWN0LWxpc3RdIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbY8OhYy10w7l5LWNo4buNbi4uLl0gWzwgZGFuaC1zw6FjaC1yZWYgfCA8IGRhbmgtc8OhY2gtIgorIsSR4buRaS10xrDhu6NuZ10iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQKK21zZ2lkICJnaXQgcGFjay1vYmplY3RzIFtvcHRpb25zLi4uXSBiYXNlLW5hbWUgWzwgcmVmLWxpc3QgfCA8IG9iamVjdC1saXN0XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgW2PDoWMtdMO5eS1jaOG7jW4uLi5dIGJhc2UtbmFtZSBbPCBkYW5oLXPDoWNoLXJlZiB8IDwgZGFuaC1zw6FjaC0iCisixJHhu5FpLXTGsOG7o25nXSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJs4buXaSBnaeG6o2kgbsOpbiAoJWQpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAicGhpw6puIGLhuqNuIG3hu6VjIGzhu6VjIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAicGhpw6puIGLhuqNuIG3hu6VjIGzhu6VjIHNhaSBgJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICVzIGRvZXMgbm90IGFjY2VwdCBuZWdhdGl2ZSBmb3JtIgorbXNnc3RyICJ0w7l5IGNo4buNbiAlcyBraMO0bmcgY2jhuqVwIG5o4bqtbiBk4bqhbmcgdGjhu6ljIMOibSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSB2YWx1ZSAnJXMnIGZvciBvcHRpb24gJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBnacOhIHRy4buLIGAlcycgY2hvIHTDuXkgY2jhu41uICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NDgKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyBi4buZIMSRbyB0aeG6v24gdHLDrG5oIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NTAKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJoaeG7g24gdGjhu4sgYuG7mSDEkW8gdGnhur9uIHRyw6xuaCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDUyCittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgImhp4buDbiB0aOG7iyBi4buZIMSRbyB0aeG6v24gdHJp4buDbiB0cm9uZyBzdeG7kXQgcGhhIGdoaSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1NQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAidMawxqFuZyB04buxIC0tYWxsLXByb2dyZXNzIGtoaSBi4buZIMSRbyB0aeG6v24gdHLDrG5oIMSRxrDhu6NjIHh14bqldCBoaeG7h24iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1NgorbXNnaWQgInZlcnNpb25bLG9mZnNldF0iCittc2dzdHIgInBoacOqbiBi4bqjblssb2Zmc2V0XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDU3Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAiZ2hpIHThuq1wIHRpbiBi4bqjbmcgbeG7pWMgbOG7pWMgZ8OzaSAocGFjaykg4bufIHBoacOqbiBi4bqjbiDEkeG7i25oIGThuqFuZyBpZHggxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ2MAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgImtjw61oIHRoxrDhu5tjIHThu5FpIMSRYSBjaG8gdOG6rXAgdGluIGfDs2kgxJHGsOG7o2MgdOG6oW8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ2MgorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiYuG7jyBxdWEgY8OhYyDEkeG7kWkgdMaw4bujbmcgdmF5IG3GsOG7o24gdOG7qyBraG8gxJHhu5FpIHTGsOG7o25nIHRoYXkgdGjhur8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ2NAorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiYuG7jyBxdWEgY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHDs25nIGfDs2kiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ2NgorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgImdp4bubaSBo4bqhbiBj4butYSBz4buVIMSRw7NuZyBnw7NpIHRoZW8gxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NjgKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICJnaeG7m2kgaOG6oW4gY+G7rWEgc+G7lSDEkcOzbmcgZ8OzaSB0aGVvIGLhu5kgbmjhu5sgY+G7mW5nIHRow6ptIHbhu5tpIGdp4bubaSBo4bqhbiDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ3MAorbXNnaWQgIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIgorbXNnc3RyICLEkeG7mSBkw6BpIHThu5FpIMSRYSBj4bunYSBjaHXhu5dpIG3Ds2MgeMOtY2ggYGRlbHRhJyDEkcaw4bujYyBwaMOpcCB0cm9uZyBnw7NpIGvhur90IHF14bqjIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NzIKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgImTDuW5nIGzhuqFpIGPDoWMgZGVsdGEgc+G6tW4gY8OzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NzQKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICJkw7luZyBs4bqhaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBz4bq1biBjw7MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ3NgorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAiZMO5bmcgY8OhYyDEkeG7kWkgdMaw4bujbmcgT0ZTX0RFTFRBIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NzgKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICJz4butIGThu6VuZyBjw6FjIHR1eeG6v24gdHLDrG5oIGtoaSB0w6xtIGtp4bq/bSBjaG8gY8OhYyBt4bqrdSBraOG7m3AgZGVsdGEgdOG7kXQgbmjhuqV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODAKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8ga+G6v3QgeHXhuqV0IGfDs2kgKHBhY2spIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODIKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIgxJHhu41jIHRoYW0gc+G7kSBgcmV2aXNpb24nIHThu6sgdGhp4bq/dCBi4buLIG5o4bqtcCBjaHXhuqluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODQKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAiZ2nhu5tpIGjhuqFuIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRow6BuaCBuaOG7r25nIGPDoWkgbcOgIGNow7puZyB24bqrbiBjaMawYSDEkcaw4bujYyDEkcOzbmcgZ8OzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDg3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgImJhbyBn4buTbSBjw6FjIMSR4buRaSB0xrDhu6NuZyBjw7MgdGjhu4MgxJHhu41jIMSRxrDhu6NjIHThu6sgYuG6pXQga+G7syB0aGFtIGNoaeG6v3UgbsOgbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDkwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICJiYW8gZ+G7k20gY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHGsOG7o2MgdGhhbSBjaGnhur91IGLhu59pIGPDoWMgbeG7pWMgcmVmbG9nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0OTMKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgInh14bqldCBnw7NpIHJhIMSR4bqndSByYSB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0OTUKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgImJhbyBn4buTbSBjw6FjIMSR4buRaSB0xrDhu6NuZyB0aGFtIGNoaeG6v3UgxJHhur9uIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIMSRw7NuZyBnw7NpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0OTcKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImdp4buvIGzhuqFpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtow7RuZyB0aOG7gyDEkeG7jWMgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ5OCBwYXJzZS1vcHRpb25zLmg6MTQxCittc2dpZCAidGltZSIKK21zZ3N0ciAidGjhu51pLWdpYW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ5OQorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICIiCisieOG6oyBuw6luIChn4buhIGto4buPaSBnw7NpKSBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgdGjhu4MgxJHhu41jIMSRxrDhu6NjIG3hu5tpIGjGoW4gPHRo4budaS1naWFuPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTAyCittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgInThuqFvIGfDs2kgbmjhurkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjUwNAorbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgImLhu48gcXVhIGPDoWMgZ8OzaSBtw6AgbsOzIGPDsyB04bqtcCB0aW4gLmtlZXAgxJFpIGvDqG0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjUwNgorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIm3hu6ljIG7DqW4gZ8OzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTA4Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgImtow7RuZyDhuqluIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBi4bufaSBgZ3JhZnRzJyIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo2Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbb3B0aW9uc10iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgW2PDoWMtdMO5eS1jaOG7jW5dIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE0Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICLEkcOzbmcgZ8OzaSBt4buNaSB0aOG7qSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNQorbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICJwcnVuZSAoY+G6r3QgY+G7pXQpIG5o4buvbmcgdGhhbSBjaGnhur91IChyZWZzKSBi4buLIG3huqV0ICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW58LS1kcnktcnVuXSBbLXF8LS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1ufC0tZHJ5LXJ1bl0gWy1xfC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDx0aOG7nWktZ2lhbj5dIFstLV0gWzxoZWFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgImtow7RuZyBn4buhIGLhu48sIGNo4buJIGhp4buDbiB0aOG7iyIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzMworbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiYsOhbyBjw6FvIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRw6MgcHJ1bmUiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzYKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiY8OhYyDEkeG7kWkgdMaw4bujbmcgaOG6v3QgaOG6oW4gY8WpIGjGoW4ga2hv4bqjbmcgPHRo4budaSBnaWFuPiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzxjw6FjLXTDuXktY2jhu41uPl0gWzxraG8tY2jhu6lhPiBbPHJlZnNwZWM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQ1Cittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJkw7luZyB04buRYyBrw70gdGFnIGtow7RuZyBjw7MgPHRo4bq7PiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjQKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgY2jhu4kgY2jhuqVwIG5o4bqtbiBjw6FjIHTDqm4gdGhhbSBjaGnhur91IChyZWYpIGThuqFuZyB0aMaw4budbmciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjk5Cittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorIlxuIgorIsSQ4buDIGNo4buNbiBt4buXaSB0w7l5IGNo4buNbiBt4buZdCBjw6FjaCBj4buRIMSR4buLbmgsIHhlbSBwdXNoLmRlZmF1bHQgdHJvbmcgYGdpdCBoZWxwICIKKyJjb25maWcnLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKK21zZ3N0ciAiIgorIk5ow6FuaCB0aMaw4bujbmcgbmd14buTbiAodXBzdHJlYW0pIGPhu6dhIG5ow6FuaCBoaeG7h24gdOG6oWkgY+G7p2EgYuG6oW4ga2jDtG5nIGto4bubcFxuIgorInbhu5tpIHTDqm4gY+G7p2EgbmjDoW5oIGhp4buHbiB04bqhaSBj4bunYSBi4bqhbi4gIMSQ4buDIHB1c2ggxJHhur9uIG5ow6FuaCB0aMaw4bujbmcgbmd14buTblxuIgorInRyw6puIG3DoXkgY2jhu6csIHPhu60gZOG7pW5nXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyLEkOG7gyBwdXNoIHThu5tpIG5ow6FuaCBjw7luZyB0w6puIHRyw6puIG3DoXkgY2jhu6csIHPhu60gZOG7pW5nXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzICVzXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKyJC4bqhbiBoaeG7h24gbmF5IGtow7RuZyDhu58gbeG7mXQgbmjDoW5oLlxuIgorIsSQ4buDIHB1c2ggbOG7i2NoIHPhu60gaMaw4bubbmcgdOG7m2kgdHLhuqFuZyB0aMOhaSBoaeG7h24gaMOgbmggKEhFQUQgxJHDoyBi4buLIHTDoWNoIHLhu51pKVxuIgorIm5nYXkgYsOieSBnaeG7nSwgc+G7rSBk4bulbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8dMOqbi1j4bunYS1uaMOhbmgtbcOheS1jaOG7pz5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICIiCisiTmjDoW5oIGhp4buHbiB04bqhaSAlcyBraMO0bmcgY8OzIG5ow6FuaCB0aMaw4bujbmcgbmd14buTbiAodXBzdHJlYW0pIG7DoG8uXG4iCisixJDhu4MgcHVzaCAoxJHhuql5IGzDqm4pIG5ow6FuaCBoaeG7h24gdOG6oWkgdsOgIMSR4bq3dCBtw6F5IGNo4bunIG5oxrAgbMOgIHRoxrDhu6NuZyBuZ3Xhu5NuICIKKyIodXBzdHJlYW0pLCBz4butIGThu6VuZ1xuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIk5ow6FuaCBoaeG7h24gdOG6oWkgJXMgY8OzIMSRYSBuaMOhbmggdGjGsOG7o25nIG5ndeG7k24gKHVwc3RyZWFtKSwgdOG7qyBjaOG7kWkgcHVzaC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiQuG6oW4gxJFhbmcgcHVzaCAoxJHhuql5IGzDqm4pIG3DoXkgY2jhu6cgYCVzJywgbcOgIG7DsyBraMO0bmcgcGjhuqNpIGzDoCB0aMaw4bujbmcgbmd14buTbiAiCisiKHVwc3RyZWFtKSBj4bunYVxuIgorIm5ow6FuaCBoaeG7h24gdOG6oWkgYCVzJyBj4bunYSBi4bqhbiwgbcOgIGtow7RuZyBiw6FvIGNobyB0w7RpIGJp4bq/dCBsw6AgY8OhaSBnw6wgxJHGsOG7o2MgcHVzaFxuIgorIsSR4buDIGPhuq1wIG5o4bqtdCBuaMOhbmggbcOheSBjaOG7pyBuw6BvLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTUxCittc2dpZCAiIgorInB1c2guZGVmYXVsdCBpcyB1bnNldDsgaXRzIGltcGxpY2l0IHZhbHVlIGlzIGNoYW5naW5nIGluXG4iCisiR2l0IDIuMCBmcm9tICdtYXRjaGluZycgdG8gJ3NpbXBsZScuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlXG4iCisiYW5kIG1haW50YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yIGFmdGVyIHRoZSBkZWZhdWx0IGNoYW5nZXMsIHVzZTpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igbm93LCB1c2U6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyJcbiIKKyJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ3B1c2guZGVmYXVsdCcgZm9yIGZ1cnRoZXIgIgorImluZm9ybWF0aW9uLlxuIgorIih0aGUgJ3NpbXBsZScgbW9kZSB3YXMgaW50cm9kdWNlZCBpbiBHaXQgMS43LjExLiBVc2UgdGhlIHNpbWlsYXIgbW9kZVxuIgorIidjdXJyZW50JyBpbnN0ZWFkIG9mICdzaW1wbGUnIGlmIHlvdSBzb21ldGltZXMgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdCkiCittc2dzdHIgIiIKKyJiaeG6v24gcHVzaC5kZWZhdWx0IGNoxrBhIMSRxrDhu6NjIMSR4bq3dDsgZ2nDoSB0cuG7iyBuZ+G6p20gxJHhu4tuaCBj4bunYSBuw7NcbiIKKyLEkcOjIMSRxrDhu6NjIHRoYXkgxJHhu5VpIHRyb25nIEdpdCAyLjAgdOG7qyAnbWF0Y2hpbmcnIHRow6BuaCAnc2ltcGxlJy5cbiIKKyLEkOG7gyBraMO0bmcgaGnhu4NuIHRo4buLIG5o4bqvYyBuaOG7nyBuw6B5IHbDoCBkdXkgdHLDrCBjw6FjaCB44butIGzDvSBzYXVcbiIKKyJuaOG7r25nIHRoYXkgxJHhu5VpIG3hurdjIMSR4buLbmggbsOgeSwgaMOjeSBjaOG6oXkgbOG7h25oOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyJcbiIKKyLEkOG7gyBraMO0bmcgaGnhu4NuIHRo4buLIG5o4bqvYyBuaOG7nyBuw6B5IHbDoCDDoXAgZOG7pW5nIGPDoWNoIHjhu60gbMO9IG3hu5tpLCBow6N5IGNo4bqheSBs4buHbmg6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyJcbiIKKyJYZW0gYGdpdCBoZWxwIGNvbmZpZycgdsOgIHTDrG0gxJHhur9uIGBwdXNoLmRlZmF1bHQnIMSR4buDIGPDsyB0aMOqbSB0aMO0bmcgdGluLlxuIgorIihjaOG6vyDEkeG7mSAnc2ltcGxlJyDEkcaw4bujYyBi4bqvdCDEkeG6p3Ugc+G7rSBk4bulbmcgdOG7qyBHaXQgMS43LjExLiBT4butIGThu6VuZyBjaOG6vyDEkeG7mSB0xrDGoW5nICIKKyJ04buxXG4iCisiYGN1cnJlbnQnIHRoYXkgdsOsIGBzaW1wbGUnIG7hur91IGLhuqFuIHRo4buJbmggdGhv4bqjbmcgcGjhuqNpIHPhu60gZOG7pW5nIGLhuqNuIEdpdCBjxakpIgorCisjOiBidWlsdGluL3B1c2guYzoxOTkKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorIkLhuqFuIMSRw6Mga2jDtG5nIGNo4buJIHJhIG3hu5l0IHJlZnNwZWNzIG7DoG8gxJHhu4MgcHVzaCwgdsOgIHB1c2guZGVmYXVsdCBsw6AgXCJraMO0bmcgbMOgICIKKyJnw6wgY+G6o1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA2Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBNZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy4gJ2dpdCBwdWxsJylcbiIKKyJiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIlZp4buHYyBj4bqtcCBuaOG6rXQgYuG7iyB04burIGNo4buRaSBi4bufaSB2w6wgxJHhuqd1IG3DunQgY+G7p2EgbmjDoW5oIMSRxrDhu6NjIHB1c2ggbuG6sW0gxJHhurFuZyBzYXUgYuG7mVxuIgorInBo4bqtbiB0xrDGoW5nIOG7qW5nIGPhu6dhIG3DoXkgY2jhu6cuIEjDsmEgdHLhu5luIHbhu5tpIGPDoWMgdGhheSDEkeG7lWkgdOG7qyBtw6F5IGNo4bunICh2LmQuIGBnaXQgIgorInB1bGwnKVxuIgorInRyxrDhu5tjIGtoaSBs4bqhaSBwdXNoIGzhuqduIG7hu69hLlxuIgorIlhlbSB0cm9uZyBwaOG6p24gJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgdOG7qyBs4buHbmggYGdpdCBwdXNoIC0taGVscCcgxJHhu4MgY8OzICIKKyJ0aMO0bmcgdGluIGNoaSB0aeG6v3QuIgorCisjOiBidWlsdGluL3B1c2guYzoyMTIKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBJZiB5b3UgZGlkIG5vdCBpbnRlbmQgdG8gcHVzaCB0aGF0IGJyYW5jaCwgeW91IG1heSB3YW50IHRvXG4iCisic3BlY2lmeSBicmFuY2hlcyB0byBwdXNoIG9yIHNldCB0aGUgJ3B1c2guZGVmYXVsdCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdzaW1wbGUnLCAnY3VycmVudCcgb3IgJ3Vwc3RyZWFtJyB0byBwdXNoIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorIlZp4buHYyBj4bqtcCBuaOG6rXQgYuG7iyB04burIGNo4buRaSBi4bufaSB2w6wgxJHhuqd1IG3DunQgY+G7p2EgbmjDoW5oIMSRxrDhu6NjIHB1c2ggbuG6sW0gxJHhurFuZyBzYXUgYuG7mVxuIgorInBo4bqtbiB0xrDGoW5nIOG7qW5nIGPhu6dhIG3DoXkgY2jhu6cuIE7hur91IGLhuqFuIGtow7RuZyBjw7Mgw70gxJHhu4tuaCBwdXNoIG5ow6FuaCDEkcOzLCBi4bqhbiBjw7MgbOG6vSAiCisibXXhu5FuXG4iCisiY2jhu4kgxJHhu4tuaCBjw6FjIG5ow6FuaCDEkeG7gyBwdXNoIGhv4bq3dCBsw6AgxJHhurd0IG7hu5lpIGR1bmcgY2hvIGJp4bq/biBj4bqldSBow6xuaCAncHVzaC4iCisiZGVmYXVsdCdcbiIKKyJ0aMOgbmggJ3NpbXBsZScsICdjdXJyZW50JyBob+G6t2MgJ3Vwc3RyZWFtJyDEkeG7gyBjaOG7iSBwdXNoIG5ow6FuaCBoaeG7h24gaMOgbmggbcOgICIKKyJ0aMO0aS4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxOAorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgbWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJWaeG7h2MgY+G6rXAgbmjhuq10IGLhu4sgdOG7qyBjaOG7kWkgYuG7n2kgdsOsIMSR4bqndSBtw7p0IGPhu6dhIG5ow6FuaCDEkcaw4bujYyBwdXNoIG7hurFtIMSR4bqxbmcgc2F1IGLhu5lcbiIKKyJwaOG6rW4gdMawxqFuZyDhu6luZyBj4bunYSBtw6F5IGNo4bunLiBDaGVja291IG5ow6FuaCBuw6B5IHbDoCBow7JhIHRy4buZbiB24bubaSBjw6FjIHRoYXkgxJHhu5VpICIKKyJ04burIG3DoXkgY2jhu6dcbiIKKyIodi5kLiBgZ2l0IHB1bGwnKSB0csaw4bubYyBraGkgbOG6oWkgcHVzaCBs4bqnbiBu4buvYS5cbiIKKyJYZW0gdHJvbmcgcGjhuqduICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIHThu6sgbOG7h25oIGBnaXQgcHVzaCAtLWhlbHAnIMSR4buDIGPDsyAiCisidGjDtG5nIHRpbiBjaGkgdGnhur90LiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAixJBhbmcgcHVzaCAoxJHhuql5KSBsw6puICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHB1c2ggKMSR4bqpeSBsw6puKSBt4buZdCBz4buRIHRoYW0gY2hp4bq/dSAocmVmKSDEkeG6v24gYCVzJyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgInJlcG9zaXRvcnkgKGtobykgc2FpIGAlcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NQorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiQ2jGsGEgY+G6pXUgaMOsbmggxJHDrWNoIMSR4buDIHB1c2ggKMSR4bqpeSBsw6puKS5cbiIKKyJIb+G6t2MgbMOgIGNo4buJIHJhIFVSTCB04burIGTDsm5nIGzhu4duaCBob+G6t2MgbMOgIGPhuqV1IGjDrG5oIG3hu5l0IGtobyBtw6F5IGNo4bunIHPhu60gZOG7pW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDx0w6puPiA8dXJsPlxuIgorIlxuIgorInbDoCBzYXUgxJHDsyBwdXNoIHPhu60gZOG7pW5nIHTDqm4gbcOheSBjaOG7p1xuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8dMOqbj5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzEwCittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCB2w6AgLS10YWdzIHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjMxMQorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsIGtow7RuZyB0aOG7gyDEkcaw4bujYyB04buVIGjhu6NwIGPDuW5nIHbhu5tpIHJlZnNwZWNzIgorCisjOiBidWlsdGluL3B1c2guYzozMTYKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yIHbDoCAtLXRhZ3MgeHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi9wdXNoLmM6MzE3Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3Iga2jDtG5nIHRo4buDIMSRxrDhu6NjIHThu5UgaOG7o3AgY8O5bmcgduG7m2kgcmVmc3BlY3MiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjMyMgorbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCB2w6AgLS1taXJyb3IgeHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi9wdXNoLmM6MzgyCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAia2hvIgorCisjOiBidWlsdGluL3B1c2guYzozODMKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICJwdXNoIHThuqV0IGPhuqMgcmVmcyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzg0Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICJtaXJyb3IgdOG6pXQgY+G6oyByZWZzIgorCisjOiBidWlsdGluL3B1c2guYzozODYKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAieMOzYSByZWZzIgorCisjOiBidWlsdGluL3B1c2guYzozODcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIiIKKyJjw6FjIHRo4bq7IHB1c2ggKGtow7RuZyB0aOG7gyBz4butIGThu6VuZyBjw7luZyB24bubaSBjw6FjIHTDuXkgY2jhu41uIC0tYWxsIGhheSAtLW1pcnJvcikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5MAorbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgIsOpcCBideG7mWMgY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL3B1c2guYzozOTEKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAia2nhu4NtIHRyYSIKKworIzogYnVpbHRpbi9wdXNoLmM6MzkyCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLEkWnhu4F1IGtoaeG7g24gdmnhu4djIMSR4bqpeSBsw6puIChwdXNoKSDEkeG7hyBxdWkgY+G7p2EgbcO0LcSRdW4tY29uIgorCisjOiBidWlsdGluL3B1c2guYzozOTQKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICJ04bqhbyBnw7NpIG5o4bq5IgorCisjOiBidWlsdGluL3B1c2guYzozOTUgYnVpbHRpbi9wdXNoLmM6Mzk2Cittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgIm5o4bqtbiB24buBIGNoxrDGoW5nIHRyw6xuaCBwYWNrIgorCisjOiBidWlsdGluL3B1c2guYzozOTcKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAixJHhurd0IHRoxrDhu6NuZyBuZ3Xhu5NuICh1cHN0cmVhbSkgY2hvIGdpdCBwdWxsL3N0YXR1cyIKKworIzogYnVpbHRpbi9wdXNoLmM6NDAwCittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgInBydW5lIChj4bqvdCBj4buldCkgbmjhu69uZyB0aGFtIGNoaeG6v3UgKHJlZnMpIGLhu4sgZ+G7oSBi4buPIgorCisjOiBidWlsdGluL3B1c2guYzo0MTAKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiLS1kZWxldGUgbMOgIHh1bmcga2jhuq9jIHbhu5tpIGPDoWMgdMO5eSBjaOG7jW4gLS1hbGwsIC0tbWlycm9yIHbDoCAtLXRhZ3MiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxMgorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICItLWRlbGV0ZSBraMO0bmcgaOG7o3AgbMO9IG7hur91IGtow7RuZyBjw7MgYuG6pXQga+G7syB0aGFtIGNoaeG6v3UgKHJlZnMpIG7DoG8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MzYKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbWy1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+XSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgW1stbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08dGnhu4FuLSIKKyJ04buRPl0gWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gIgorIlstLWluZGV4LW91dHB1dD08dOG6rXAtdGluPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLSIKKyJpc2gzPl1dKSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMDgKK21zZ2lkICJ3cml0ZSByZXN1bHRpbmcgaW5kZXggdG8gPGZpbGU+IgorbXNnc3RyICJnaGkgbeG7pWMgbOG7pWMga+G6v3QgcXXhuqMgdsOgbyA8dOG6rXAtdGluPiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTEKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAiY2jhu4kgduG7m2kgYuG6o25nIG3hu6VjIGzhu6VjIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExMworbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIkjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNQorbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgInRo4buxYyBoaeG7h24gbeG7mXQgaMOyYSB0cuG7mW4gdGjDqm0gdsOgbyB2aeG7h2MgxJHhu41jIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNworbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAiIgorImjDsmEgdHLhu5luIGtp4buDdSBgMy13YXknIG7hur91IGtow7RuZyBjw7MgdOG6rXAgdGluIG3hu6ljIGjDsmEgdHLhu5luIG7DoG8gxJHGsOG7o2MgecOqdSBj4bqndSAiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE5Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAiaMOyYSB0cuG7mW4gMy13YXkgdHJvbmcgc+G7sSBoaeG7h24gZGnhu4duIGPhu6dhIGBhZGRzJyB2w6AgYHJlbW92ZXMnIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMQorbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgImdp4buRbmcgduG7m2kgLW0sIG5oxrBuZyBi4buPIHF1YSBjw6FjIG3hu6VjIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMgorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPHRoxrAtbeG7pWMtY29uPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIsSR4buNYyBjw6J5IHbDoG8gdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIGTGsOG7m2kgPHRoxrBfbeG7pWNfY29uPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI2Cittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAiY+G6rXAgbmjhuq10IGPDonkgbMOgbSB2aeG7h2MgduG7m2kga+G6v3QgcXXhuqMgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICJjaG8gcGjDqXAgY8OhYyB04bqtcCB0aW4gcsO1IHLDoG5nIGLhu4sgbOG7nSDEkWkgxJHGsOG7o2MgZ2hpIMSRw6giCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMyCittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICJraMO0bmcga2nhu4NtIHRyYSBjw6J5IGzDoG0gdmnhu4djIHNhdSBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgImtow7RuZyBj4bqtcCBuaOG6rXQgYuG6o25nIG3hu6VjIGzhu6VjIGhheSBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiYuG7jyBxdWEgw6FwIGThu6VuZyBi4buZIGzhu41jIGzhuqV5IHJhIChjaGVja291dCkgdGjGsGEgdGjhu5t0IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiZ+G7oSBs4buXaSB1bnBhY2stdHJlZXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMgorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzfC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8bmjDoW5oPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3N8LS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPHTDqm4+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzIGJ1aWx0aW4vcmVtb3RlLmM6MzIKK21zZ2lkICJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW5hbWUgPHTDqm4tY8WpPiA8dMOqbi1t4bubaT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQgYnVpbHRpbi9yZW1vdGUuYzozNworbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUgPHTDqm4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLWQgfCA8YnJhbmNoPikiCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPHTDqm4+ICgtYSB8IC1kIHwgPG5ow6FuaD4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPHTDqm4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDx0w6puPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPG5ow7NtPiB8IDxtw6F5LWNo4bunPikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPHTDqm4+IDxuaMOhbmg+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NjgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8dMOqbj4gPHVybC1t4bubaT4gWzx1cmwtY8WpPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEgYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8dMOqbj4gPHVybC1t4bubaT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIgYnVpbHRpbi9yZW1vdGUuYzo3MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8dMOqbj4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjcKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8Y8OhYy10w7l5LWNo4buNbj5dIDx0w6puPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0MgorbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC1kIHwgPGJyYW5jaD5dKSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8dMOqbj4gKC1hIHwgLWQgfCA8bmjDoW5oPl0pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ3Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8dMOqbj4gPG5ow6FuaD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDx0w6puPiA8bmjDoW5oPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1MworbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPGPDoWMtdMO5eS1jaOG7jW4+XSA8dMOqbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTgKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbPGPDoWMtdMO5eS1jaOG7jW4+XSA8dMOqbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjMKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxjw6FjLXTDuXktY2jhu41uPl0gWzxuaMOzbT4gfCA8bcOheS1jaOG7pz5dLi4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICLEkGFuZyBj4bqtcCBuaOG6rXQgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9yIG5ndXkgaGnhu4NtIHbDoCBraMO0bmcgZMO5bmcgbuG7r2E7IHhpbiBow6N5XG4iCisiXHQgc+G7rSBk4bulbmcgdMO5eSBjaOG7jW4gLS1taXJyb3I9ZmV0Y2ggaG/hurdjIC0tbWlycm9yPXB1c2ggxJHhu4MgdGhheSB0aOG6vyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IHRoYW0gc+G7kSBtw6F5IGLhuqNuIHNhbyAobWlycm9yKTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYzCittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAibOG6pXkgduG7gSAoZmV0Y2gpIGPDoWMgbmjDoW5oIHThu6sgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjUKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICIiCisibmjhuq1wIHbDoG8gdOG6pXQgY+G6oyBjw6FjIMSR4buRaSB0xrDhu6NuZyB0aOG6uyB2w6AgdGjDoG5oIHBo4bqnbiBsacOqbiBxdWFuIGtoaSBs4bqleSB24buBIChmZXRjaCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY4Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICJob+G6t2Mga2jDtG5nIGzhuqV5IHbhu4EgKGZldGNoKSBi4bqldCBr4buzIHRo4bq7IG7DoG8gKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcwCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAiY8OhYyBuaMOhbmggdGhlbyB24bq/dCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICJuaMOhbmggbWFzdGVyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MgorbXNnaWQgInB1c2h8ZmV0Y2giCittc2dzdHIgInB1c2h8ZmV0Y2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTczCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIsSR4bq3dCBtw6F5IGNo4bunIChyZW1vdGUpIG5oxrAgbMOgIG3hu5l0IG3DoXkgYuG6o24gc2FvIMSR4buDIHB1c2ggaGF5IGZldGNoIHThu6sgxJHDsyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICLEkWFuZyBjaOG7iSDEkeG7i25oIG3hu5l0IG5ow6FuaCBtYXN0ZXIga2jDtG5nIGjhu6NwIGzDvSB24bubaSB0w7l5IGNo4buNbiAtLW1pcnJvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICJjaOG7iSDEkeG7i25oIG5o4buvbmcgbmjDoW5oIMSR4buDIHRoZW8gduG6v3QgY2jhu4kgaOG7o3AgbMO9IHbhu5tpIGPDoWMgJ2ZldGNoIG1pcnJvciciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk1IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIm3DoXkgY2jhu6cgJXMgxJHDoyB04buTbiB04bqhaSBy4buTaS4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk5IGJ1aWx0aW4vcmVtb3RlLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgImAlcycga2jDtG5nIHBo4bqjaSB0w6puIG3DoXkgY2jhu6cgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY8OgaSDEkeG6t3QgbmjDoW5oIG1hc3RlciBgJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICJuaGnhu4F1IGjGoW4gbeG7mXQgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgw6FuaCB44bqhIChtYXApIGZldGNoIGNobyByZWZzcGVjICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MCBidWlsdGluL3JlbW90ZS5jOjQ0OAorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIiht4bqrdSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUyCittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIih4b8OhKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OTUgYnVpbHRpbi9yZW1vdGUuYzo2MDEgYnVpbHRpbi9yZW1vdGUuYzo2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIHRvICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyBu4buRaSB0aMOqbSBgJXMnIHbDoG8gYCVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MzkgYnVpbHRpbi9yZW1vdGUuYzo3OTIgYnVpbHRpbi9yZW1vdGUuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorbXNnc3RyICJLaMO0bmcgY8OzIG3DoXkgY2jhu6cgbsOgbyBuaMawIHRo4bq/OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7lWkgdMOqbiBjaMawxqFuZyAoc2VjdGlvbikgY+G6pXUgaMOsbmggdOG7qyBgJXMnIHRow6BuaCBgJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY2MiBidWlsdGluL3JlbW90ZS5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyBn4buhIGLhu48gY2jGsMahbmcgKHNlY3Rpb24pIGPhuqV1IGjDrG5oIGAlcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIktow7RuZyBj4bqtcCBuaOG6rXQgJ25vbi1kZWZhdWx0IGZldGNoIHJlc3BlYydcbiIKKyJcdCVzXG4iCisiXHRYaW4gaMOjeSBj4bqtcCBuaOG6rXQgcGjhuqduIGPhuqV1IGjDrG5oIG3hu5l0IGPDoWNoIHRo4bunIGPDtG5nIG7hur91IHRo4bqleSBj4bqnbiB0aGnhur90LiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbuG7kWkgdGjDqm0gYCVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhurd0IGAlcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJ2aeG7h2MgeG/DoSAlcyBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgInThuqFvICVzIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGJyYW5jaCAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGfhu6EgYuG7jyBuaMOhbmggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODM0Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJDaMO6IMO9OiBN4buZdCBuaMOhbmggbuG6sW0gbmdvw6BpIGjhu4cgdGjhu5FuZyByZWZzL3JlbW90ZXMvIMSRw6Mga2jDtG5nIMSRxrDhu6NjIGfhu6EgYuG7jyDEkWk7XG4iCisixJHhu4MgeMOzYSDEkWksIHPhu60gZOG7pW5nOiIKK21zZ3N0clsxXSAiIgorIkNow7ogw706IE3hu5l0IHPhu5EgbmjDoW5oIG7hurFtIG5nb8OgaSBo4buHIHRo4buRbmcgcmVmcy9yZW1vdGVzLyDEkcOjIGtow7RuZyDEkcaw4bujYyBn4buhIGLhu48gIgorIsSRaTtcbiIKKyLEkeG7gyB4w7NhIMSRaSwgc+G7rSBk4bulbmc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBt4bubaSAobOG6p24gbOG6pXkgduG7gSB0aeG6v3AgdGhlbyBz4bq9IGzGsHUgdHJvbmcgcmVtb3Rlcy8lcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ2Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDEkcaw4bujYyB0aGVvIHbhur90IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk0OAorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIgY8WpIChkw7luZyBgZ2l0IHJlbW90ZSBwcnVuZScgxJHhu4MgZ+G7oSBi4buPKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NTAKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgImJyYW5jaC4lcy5tZXJnZSBraMO0bmcgaOG7o3AgbOG7hzsga2jDtG5nIHRo4buDIHJlYmFzZSB24buBIHBow61hID4gMSBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgInRo4buxYyBoaeG7h24gcmViYXNlIHRyw6puIG3DoXkgY2jhu6cgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIgaMOyYSB0cuG7mW4gduG7m2kgbcOheSBjaOG7pyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDAyCittc2dpZCAiICAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgIHbDoCB24bubaSBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICJow7JhIHRy4buZbiB24bubaSBtw6F5IGNo4bunICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDUKK21zZ2lkICIgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiAgIHbDoCB24bubaSBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTEKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgInThuqFvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTQKK21zZ2lkICJkZWxldGUiCittc2dzdHIgInhvw6EiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OAorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIsSRw6MgY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJjw7MtdGjhu4MtZmFzdC1mb3J3YXJkIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjQKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAiZOG7ryBsaeG7h3UgbuG7mWkgYuG7mSDEkcOjIGPFqSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIMOpcCBideG7mWMgdGjDoG5oICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIHB1c2ggdOG7m2kgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDDqXAgYnXhu5ljIHRow6BuaCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgcHVzaCB04bubaSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDkxCittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgImtow7RuZyB0cnV5IHbhuqVuIGPDoWMgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIG3DoXkgY2jhu6cgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIMSR4buDIGzhuqV5IHbhu4EgKGZldGNoKTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyMCBidWlsdGluL3JlbW90ZS5jOjEyODUKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKGtow7RuZyBjw7MgVVJMKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTI5IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIMSR4buDIMSR4bqpeSBsw6puIChwdXNoKTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMyBidWlsdGluL3JlbW90ZS5jOjExMzUgYnVpbHRpbi9yZW1vdGUuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIE5ow6FuaCBIRUFEOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiAgbmjDoW5oIEhFQUQgKEhFQUQgbcOheSBjaOG7pyBjaMawYSByw7UgcsOgbmcsIGPDsyBs4bq9IGzDoCBt4buZdCB0cm9uZyBz4buRIHNhdSk6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIE5ow6FuaCB0csOqbiBtw6F5IGNo4bunOiVzIgorbXNnc3RyWzFdICIgIE5o4buvbmcgbmjDoW5oIHRyw6puIG3DoXkgY2jhu6c6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NCBidWlsdGluL3JlbW90ZS5jOjExODEKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAodHLhuqFuZyB0aMOhaSBraMO0bmcgxJHGsOG7o2MgecOqdSBj4bqndSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE2MworbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgIE5ow6FuaCBu4buZaSBi4buZIMSRw6MgxJHGsOG7o2MgY+G6pXUgaMOsbmggY2hvIGzhu4duaCBgZ2l0IHB1bGwnOiIKK21zZ3N0clsxXSAiICBOaOG7r25nIG5ow6FuaCBu4buZaSBi4buZIMSRw6MgxJHGsOG7o2MgY+G6pXUgaMOsbmggY2hvIGzhu4duaCBgZ2l0IHB1bGwnOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcxCittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICByZWZzIG7hu5lpIGLhu5kgc+G6vSDEkcaw4bujYyBwaOG6o24gY2hp4bq/dSBi4bufaSBs4buHbmggYGdpdCBwdXNoJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIgIFRoYW0gY2hp4bq/dSBu4buZaSBi4buZIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGNobyBs4buHbmggYGdpdCBwdXNoJyVzOiIKK21zZ3N0clsxXSAiICBOaOG7r25nIHRoYW0gY2hp4bq/dSBu4buZaSBi4buZIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGNobyBs4buHbmggYGdpdCBwdXNoJyVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk5Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICLEkeG6t3QgcmVmcy9yZW1vdGVzLzx0w6puPi9IRUFEIGNobyBwaMO5IGjhu6NwIHbhu5tpIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwMQorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgInjDs2EgcmVmcy9yZW1vdGVzLzx0w6puPi9IRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTYKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgeMOhYyDEkeG7i25oIMSRxrDhu6NjIEhFQUQgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE4Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIk5oaeG7gXUgbmjDoW5oIEhFQUQgbcOheSBjaOG7py4gSMOjeSBjaOG7jW4gcsO1IHLDoG5nIG3hu5l0OiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyB4w7NhIGLhu48gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJLaMO0bmcgcGjhuqNpIGzDoCB0aGFtIGNoaeG6v3UgKHJlZikgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBjw6BpIMSR4bq3dCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBz4bq9IHRy4bufIHRow6BuaCBraMO0bmcgxJHhuqd1IChraMO0bmcgxJHGsOG7o2MgcXXhuqNuIGzDvSkhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgxJHDoyB0cuG7nyB0aMOgbmgga2jDtG5nIMSR4bqndSAoa2jDtG5nIMSRxrDhu6NjIHF14bqjbiBsw70pISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIsSQYW5nIHjDqW4gYuG7m3QgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiICogW27Dqm4geMOpbiBi4bubdF0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICpbxJHDoyB4w6luIGLhu5tdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjEKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJj4bqvdCBtw6F5IGNo4bunIHNhdSBraGkgbOG6pXkgduG7gSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg3IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICJLaMO0bmcgY8OzIG3DoXkgY2jhu6cgbsOgbyBjw7MgdMOqbiBgJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MDcKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICJ0aMOqbSBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQxNAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgImNoxrBhIGNo4buJIHJhIG3DoXkgY2jhu6cgbsOgbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM2Cittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIsSR4bqpeSBjw6FjIGBVUkwnIGLhurFuZyB0YXkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzOAorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgInRow6ptIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDQwCittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgInjDs2EgVVJMcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDQ3Cittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJLaeG7g3UgbeG6q3UgVVJMIGPFqSBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBVUkwgbmjGsCB24bqteTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5NworbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiU+G6vSBraMO0bmcgeMOzYSBuaOG7r25nIMSR4buLYSBjaOG7iSBVUkwga2jDtG5nLXB1c2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU2OQorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgImNoaSB0aeG6v3Q7IHBo4bqjaSDEkcaw4bujYyDEkeG6t3QgdHLGsOG7m2MgbeG7mXQgbOG7h25oLWNvbiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPMSR4buRaS10xrDhu6NuZz4gPHRoYXktdGjhur8+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxOAorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgcmVwbGFjZSAtZCA8xJHhu5FpIHTGsOG7o25nPi4uLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTkKK21zZ2lkICJnaXQgcmVwbGFjZSAtbCBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWwgWzxt4bqrdT5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMTgKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6FjIHJlZnMgdGhheSB0aOG6vyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTE5Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAieMOzYSB0aGFtIGNoaeG6v3UgKHJlZnMpIHRoYXkgdGjhur8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyMAorbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgInRoYXkgdGjhur8gdGhhbSBjaGnhur91IChyZWYpIG7hur91IG7DsyDEkcOjIHPhurVuIGPDsyIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMQorbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IHBhdGguLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCBwYXRoLi4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo1NgorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICJz4buVIGdoaSBk4buNbiBz4bqhY2ggY8OhYyBwaMOibiBnaeG6o2kgdHJvbmcgYuG6o24gbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNQorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNgorbXNnaWQgImdpdCByZXNldCBbLXFdIDxjb21taXQ+IFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gPGNvbW1pdD4gWy0tXSA8Y8OhYy3Ekcaw4budbmctZOG6q24+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjcKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPGNvbW1pdD5dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPGNvbW1pdD5dIFstLV0gWzxjw6FjLcSRxrDhu51uZy1k4bqrbj4uLi5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAicGhhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAic29mdCIKK21zZ3N0ciAibeG7gW0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImhhcmQiCittc2dzdHIgImPhu6luZyIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAibWVyZ2UiCittc2dzdHIgImjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJrZWVwIgorbXNnc3RyICJnaeG7ryBs4bqhaSIKKworIzogYnVpbHRpbi9yZXNldC5jOjc3Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIkLhuqFuIGtow7RuZyBjw7MgSEVBRCBuw6BvIGjhu6NwIGzhu4cuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzkKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdMOsbSBjw6J5IGPhu6dhIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB0w6xtIGPDonkgY+G7p2EgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTYKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyBt4bubaS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIkhFQUQgaGnhu4duIGdp4budIHThuqFpICVzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTMwCittc2dpZCAiQ291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTMzCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIk5o4buvbmcgdGhheSDEkeG7lWkgYuG7iyBi4buPIHRy4bqhbmcgdGjDoWkgKHN0YWdlKSBzYXUga2hpIHJlc2V0OiIKKworIzogYnVpbHRpbi9yZXNldC5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiBt4buZdCAlcyByZXNldCDhu58gZ2nhu69hIGPhu6dhIHF1w6EgdHLDrG5oIGjDsmEgdHLhu5luLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjIzOAorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgImzDoG0gdmnhu4djIOG7nyBjaOG6vyDEkeG7mSBpbSBs4bq3bmcsIGNo4buJIGhp4buDbiB0aOG7iyBraGkgY8OzIGzhu5dpIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjQwCittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIsSR4bq3dCBs4bqhaSAocmVzZXQpIEhFQUQgdsOgIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI0MQorbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAiY2jhu4kgxJHhurd0IGzhuqFpIChyZXNldCkgSEVBRCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI0MyBidWlsdGluL3Jlc2V0LmM6MjQ1Cittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAixJHhurd0IGzhuqFpIEhFQUQsIGLhuqNuZyBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI0NworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAixJHhurd0IGzhuqFpIEhFQUQgbmjGsG5nIGdp4buvIGzhuqFpIGPDoWMgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggxJHhu5FpIHTGsOG7o25nIGAlcycuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA4Cittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoIHh1bmcga2jhuq9jIHbhu5tpIC0te2hhcmQsbWl4ZWQsc29mdH0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTcKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLW1peGVkIHbhu5tpIGPDoWMgxJHGsOG7nW5nIGThuqtuIGtow7RuZyBjw7JuIGTDuW5nIG7hu69hOyBow6N5IHRoYXkgdGjhur8gYuG6sW5nIGzhu4duaCBgZ2l0ICIKKyJyZXNldCAtLSA8xJHGsOG7nW5nX2ThuqtuPicuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gbOG7h25oICVzIHJlc2V0IHbhu5tpIGPDoWMgxJHGsOG7nW5nIGThuqtuLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXMgcmVzZXQga2jDtG5nIMSRxrDhu6NjIHBow6lwIHRyw6puIGtobyBiYXJlICh0csOqbiBtw6F5IGNo4bunKSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4bq3dCBs4bqhaSAocmVzZXQpIGLhuqNuZyBt4bulYyBs4bulYyB0aMOgbmggxJFp4buDbSB4w6l0IGzhuqFpIGAlcycuIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjMzOQorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbb3B0aW9uc10gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbY8OhYy10w7l5LWNo4buNbl0gLS0gWzx0aC5z4buRPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzQ0Cittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICJnaeG7ryAnLS0nIGNodXnhu4NuIHF1YSBsw6BtIHRoYW0gc+G7kSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozNDYKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgImThu6tuZyBwaMOibiB0w61jaCBzYXUgxJHhu5FpIHPhu5EgxJHhuqd1IHRpw6puIGtow7RuZyBjw7MgdMO5eSBjaOG7jW4iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDY0Cittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbb3B0aW9uc10gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbb3B0aW9uc10gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgW2PDoWMtdMO5eS1jaOG7jW5dIC0tIFs8xJEuc+G7kT4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPMSRLnPhu5E+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFtjw6FjLXTDuXktY2jhu41uXSBbPMSRLnPhu5E+Li4uXVxuIgorIlxuIgorIkNo4bqheSBs4buHbmggXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiDEkeG7gyBjw7MgdGjDqm0gdGjDtG5nIHRpbiB24buBIGPDoWNoIGTDuW5nLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMgorbXNnaWQgImdpdCByZXZlcnQgW29wdGlvbnNdIDxjb21taXQtaXNoPiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbY8OhYy10w7l5LWNo4buNbl0gPGNvbW1pdC1pc2g+IgorCisjOiBidWlsdGluL3JldmVydC5jOjIzCittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPGzhu4duaC1jb24+IgorCisjOiBidWlsdGluL3JldmVydC5jOjI4Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFtvcHRpb25zXSA8Y29tbWl0LWlzaD4iCittc2dzdHIgImdpdCBjaGVycnktcGljayBbY8OhYy10w7l5LWNo4buNbl0gPGNvbW1pdC1pc2g+IgorCisjOiBidWlsdGluL3JldmVydC5jOjI5Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIDxs4buHbmgtY29uPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MCBidWlsdGluL3JldmVydC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlczogJXMga2jDtG5nIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIHbhu5tpICVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMworbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImvhur90IHRow7pjIGNoZXJyeS1waWNrIGhheSByZXZlcnQgbGnDqm4gdGnhur9wIG5oYXUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAicGjhu6VjIGjhu5NpIGzhuqFpIGNoZXJyeS1waWNrIGhheSByZXZlcnQgbGnDqm4gdGnhur9wIG5oYXUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAia2jDtG5nIGNoZXJyeS1waWNrIGhheSByZXZlcnQgbGnDqm4gdGnhur9wIG5oYXUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA2Cittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgImtow7RuZyBjb21taXQgbeG7mXQgY8OhY2ggdOG7sSDEkeG7mW5nLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAic+G7rWEgbOG6oWkgY2jDuiB0aMOtY2ggY2hvIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJwYXJlbnQgbnVtYmVyIgorbXNnc3RyICJz4buRIGPhu6dhIGNoYSBt4bq5IgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEzCittc2dpZCAib3B0aW9uIgorbXNnc3RyICJ0w7l5IGNo4buNbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJ0w7l5IGNo4buNbiBjaG8gY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAibuG7kWkgdGjDqm0gdMOqbiBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiY2hvIHBow6lwIGZhc3QtZm9yd2FyZCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjcKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiY+G6pW0ga2jhu59pIHThuqFvIGzhuqduIGNodXnhu4NuIGdpYW8gdHLhu5FuZyBy4buXbmciCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJjaOG6pXAgbmjhuq1uIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgbcOgIGtow7RuZyBnaGkgY2jDuiBnw6wiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgImdp4buvIGzhuqFpIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBkxrAgdGjhu6thLCBy4buXbmciCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTMzCittc2dpZCAicHJvZ3JhbSBlcnJvciIKK21zZ3N0ciAibOG7l2kgY2jGsMahbmcgdHLDrG5oIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyMworbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgInJldmVydCBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzgKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgImNoZXJyeS1waWNrIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL3JtLmM6MTQKK21zZ2lkICJnaXQgcm0gW29wdGlvbnNdIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gW2PDoWMtdMO5eS1jaOG7jW5dIFstLV0gPHThuq1wLXRpbj4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlIGZpbGUgYW5kIHRoZSBIRUFEXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorImAlcycgY8OzIG7hu5lpIGR1bmcgxJHGsOG7o2MgbMawdSB0cuG6oW5nIHRow6FpIGtow6FjIGJp4buHdCB04burIGPhuqMgdOG6rXAgdGluIHbDoCBj4bqjIEhFQURcbiIKKyIoZMO5bmcgdMO5eSBjaOG7jW4gLWYgxJHhu4Mgw6lwIGJ14buZYyBn4buhIGLhu48pIgorCisjOiBidWlsdGluL3JtLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXhcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiYCVzJyBjw7MgY8OhYyB0aGF5IMSR4buVaSDEkcaw4bujYyBsxrB1IHRy4bqhbmcgdGjDoWkgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjXG4iCisiKGTDuW5nIHTDuXkgY2jhu41uIC0tY2FjaGVkIMSR4buDIGdp4buvIHThuq1wIHRpbiwgaG/hurdjIC1mIMSR4buDIMOpcCBideG7mWMgZ+G7oSBi4buPKSIKKworIzogYnVpbHRpbi9ybS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uc1xuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJgJXMnIGPDsyBjw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5lcbiIKKyIoZMO5bmcgdMO5eSBjaOG7jW4gLS1jYWNoZWQgxJHhu4MgZ2nhu68gdOG6rXAgdGluLCBob+G6t2MgLWYgxJHhu4Mgw6lwIGJ14buZYyBn4buhIGLhu48pIgorCisjOiBidWlsdGluL3JtLmM6MTM0Cittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAia2jDtG5nIGxp4buHdCBrw6ogY8OhYyB04bqtcCB0aW4gxJHDoyBn4buhIGLhu48iCisKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiY2jhu4kgZ+G7oSBi4buPIHThu6sgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMzYKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiZ2hpIMSRw6ggbMOqbiBraeG7g20gdHJhIGPhuq1wIG5o4bqtdCIKKworIzogYnVpbHRpbi9ybS5jOjEzNworbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICJjaG8gcGjDqXAgZ+G7oSBi4buPIMSR4buHIHF1aSIKKworIzogYnVpbHRpbi9ybS5jOjEzOQorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICJ0aG/DoXQgcmEgduG7m2kgdHLhuqFuZyB0aMOhaSBraMOhYyBraMO0bmcgdGjhuq1tIGNow60gbuG6v3Uga2jDtG5nIGPDsyBnw6wga2jhu5twIgorCisjOiBidWlsdGluL3JtLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgImtow7RuZyB0aOG7gyBn4buhIGLhu48gYCVzJyBt4buZdCBjw6FjaCDEkeG7hyBxdWkgbcOgIGtow7RuZyBjw7MgdMO5eSBjaOG7jW4gLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06IGtow7RuZyB0aOG7gyBn4buhIGLhu48gJXMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxMworbXNnaWQgImdpdCBzaG9ydGxvZyBbLW5dIFstc10gWy1lXSBbLXddIFtyZXYtb3B0c10gWy0tXSBbPGNvbW1pdC1pZD4uLi4gXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFstbl0gWy1zXSBbLWVdIFstd10gW3Jldi1vcHRzXSBbLS1dIFs8Y29tbWl0LWlkPi4uLiBdIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKK21zZ3N0ciAiVGhp4bq/dSB0w6puIHTDoWMgZ2nhuqM6ICVzIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjUzCittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICJz4bqvcCB44bq/cCBr4bq/dCB4deG6pXQgdHXDom4gdGhlbyBz4buRIGzGsOG7o25nIGNodXnhu4NuIGdpYW8gdHLDqm4gbeG7l2kgdMOhYyBnaeG6oyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI1NQorbXNnaWQgIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IgorbXNnc3RyICJDaOG6t24gbeG7jWkgbcO0IHThuqMgbOG6p24gY2h1eeG7g24gZ2lhbywgY2jhu4kgxJHGsGEgcmEgc+G7kSBsxrDhu6NuZyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjU3Cittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRoxrAgxJFp4buHbiB04butIGNobyB04burbmcgdMOhYyBnaeG6oyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI1OAorbXNnaWQgIndbLGkxWyxpMl1dIgorbXNnc3RyICJ3WyxpMVssaTJdXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI1OQorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiTmfhuq90IGTDsm5nIGtoaSBxdcOhIGTDoGkiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo5Cittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWF8LS1hbGxdIFstcnwtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdIFstLSIKKyJjdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV0gWy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLSIKKyJpbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV0gWy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCAiCisiPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hfC0tYWxsXSBbLXJ8LS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXSBbLS0iCisiY3VycmVudF0gWy0tY29sb3JbPTxraGk+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV0gWy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLSIKKyJpbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV0gWy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCAiCisiPGdsb2I+KS4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMAorbXNnaWQgImdpdCBzaG93LWJyYW5jaCAoLWd8LS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWd8LS1yZWZsb2cpWz08bj5bLDxu4buBbj5dXSBbLS1saXN0XSBbPHJlZj5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyBuaMOhbmggcmVtb3RlLXRyYWNraW5nIHbDoCBu4buZaSBi4buZIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUzCittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIG5ow6FuaCByZW1vdGUtdHJhY2tpbmciCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTUKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICJtw6B1ICcqISstJyB0xrDGoW5nIOG7qW5nIHbhu5tpIG5ow6FuaCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NworbXNnaWQgInNob3cgPG4+IG1vcmUgY29tbWl0cyBhZnRlciB0aGUgY29tbW9uIGFuY2VzdG9yIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdGjDqm0gPG4+IGzhuqduIGNodXnhu4NuIGdpYW8gc2F1IGNoYSBt4bq5IGNodW5nIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU5Cittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICLEkeG7k25nIG5naMSpYSB24bubaSBtb3JlPS0xIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYwCittc2dpZCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiCittc2dzdHIgImNo4bq3biBjw6FjIGNodeG7l2kgxJHhurd0IHTDqm4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiYmFvIGfhu5NtIG5ow6FuaCBoaeG7h24gaMOgbmgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgIsSR4bq3dCB0w6puIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBi4bqxbmcgY8OhYyB0w6puIGPhu6dhIMSR4buRaSB0xrDhu6NuZyBj4bunYSBjaMO6bmciCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjYKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbeG7jWkgY8ahIHPhu58gY8OzIHRo4buDIGTDuW5nIMSR4buDIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY4Cittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdGhhbSBjaGnhur91IGtow7RuZyB0aOG7gyDEkcaw4bujYyDEkeG7jWMgYuG7n2kgYuG6pXQga+G7syB0aGFtIGNoaeG6v3Uga2jDoWMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzAKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gdGhlbyB0aOG7qSB04buxIHTDtHDDtCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MgorbXNnaWQgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGtow7RuZyBu4bqxbSB0csOqbiBuaMOhbmggxJHhuqd1IHRpw6puIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc0Cittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyBs4bqnbiBow7JhIHRy4buZbiBjw7MgdGjhu4MgxJHhu41jIMSRxrDhu6NjIGNo4buJIHThu6sgbeG7mXQgxJHhuqd1IG3DunQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzYKK21zZ2lkICJzaG93IGNvbW1pdHMgd2hlcmUgbm8gcGFyZW50IGNvbWVzIGJlZm9yZSBpdHMgY2hpbGRyZW4iCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gbsahaSBtw6AgY2hhIG3hurkgxJHhur9uIHRyxrDhu5tjIGNvbiBj4bunYSBuw7MiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzgKK21zZ2lkICI8bj5bLDxiYXNlPl0iCittc2dzdHIgIjxuPlssPGPGoSBz4bufPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzkKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIDxuPiBjw6FjIG3hu6VjIGByZWYtbG9nJyBn4bqnbiBuaOG6pXQga+G7gyB04burIG7hu4FuIChiYXNlKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEwCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXF8LS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWR8LS1kZXJlZmVyZW5jZV0gWy1zfC0taGFzaCIKKyJbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gW3BhdHRlcm4qXSAiCittc2dzdHIgIiIKKyJnaXQgc2hvdy1yZWYgWy1xfC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kfC0tZGVyZWZlcmVuY2VdIFstc3wtLWhhc2giCisiWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFtt4bqrdSpdICIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjExCittc2dpZCAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9cGF0dGVybl0gPCByZWYtbGlzdCIKK21zZ3N0ciAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9beG6q3VdIDwgcmVmLWxpc3QiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgdGjhursgKGPDsyB0aOG7gyB04buVIGjhu6NwIGPDuW5nIHbhu5tpIMSR4bqndSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODMKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgxJHhuqd1IChjw7MgdGjhu4MgdOG7lSBo4bujcCBjw7luZyB24bubaSB0aOG6uykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICIiCisidmnhu4djIGtp4buDbSB0cmEgdGhhbSBjaGnhur91IGNow61uaCB4w6FjLCDEkcOyaSBo4buPaSBjaMOtbmggeMOhYyDEkcaw4budbmcgZOG6q24gdGhhbSBjaGnhur91ICIKKyIocmVmKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4NyBidWlsdGluL3Nob3ctcmVmLmM6MTg5Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UiCittc2dzdHIgImhp4buDbiB0aOG7iyB0aGFtIGNoaeG6v3UgY+G7p2EgSEVBRCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE5MQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICJiw6NpIGLhu48gdGhhbSBjaGnhur91IGPDoWMgdGjhursgdGjDoG5oIHJhIGPDoWMgSUQgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTkzCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbcOjIGLEg20gU0hBMSBz4butIGThu6VuZyA8bj4gY2jhu68gc+G7kSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE5NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICIiCisia2jDtG5nIGhp4buDbiB0aOG7iyBr4bq/dCBxdeG6oyByYSDEkeG6p3UgcmEgY2h14bqpbiAoc3Rkb3V0KSAoY2jhu4kgaOG7r3UgZOG7pW5nIHbhu5tpIC0tdmVyaWZ5KSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE5OQorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJoaeG7g24gdGjhu4sgY8OhYyB0aGFtIGNoaeG6v3UgKHJlZnMpIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiAoc3RkaW4pIGPDoWkgbcOgIGtow7RuZyDhu58gIgorImtobyBu4buZaSBi4buZIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjcKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFtvcHRpb25zXSBuYW1lIFtyZWZdIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmICBbY8OhYy10w7l5LWNo4buNbl0gdMOqbiBbdC5jaGnhur91XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzozOAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIiIKKyJjaOG6t24gY8OhYyB0aMO0bmcgdGluIGzhu5dpIGNobyBjw6FjIHRoYW0gY2hp4bq/dSAocmVmcykgYG5vbi1zeW1ib2xpYycgKGLhu4sgdMOhY2ggcmEpIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjM5Cittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICJsw6BtIG5n4bqvbiBr4bq/dCB4deG6pXQgcmVmICh0aGFtIGNoaeG6v3UpIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjE4Cittc2dpZCAicmVhc29uIgorbXNnc3RyICJsw70gZG8iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAgYnVpbHRpbi91cGRhdGUtcmVmLmM6MTgKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAibMO9IGRvIGPhuq1wIG5o4bqtdCIKKworIzogYnVpbHRpbi90YWcuYzoyMgorbXNnaWQgIiIKKyJnaXQgdGFnIFstYXwtc3wtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz58LUYgPGZpbGU+XSA8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYXwtc3wtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz58LUYgPHThuq1wLXRpbj5dIDx0w6puLXRo4bq7PiBbPGhlYWQ+XSIKKworIzogYnVpbHRpbi90YWcuYzoyMworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC1kIDx0w6puLXRo4bq7Pi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyNAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dIFxuIgorIlx0XHRbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLXBvaW50cy1hdCA8xJHhu5FpLXTGsOG7o25nPl0gXG4iCisiXHRcdFs8beG6q3U+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzoyNgorbXNnaWQgImdpdCB0YWcgLXYgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC12IDx0w6puLXRo4bq7Pi4uLiIKKworIzogYnVpbHRpbi90YWcuYzo2MAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBk4buLIGjDrG5oIHThuqFpIGAlcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICJ0w6puIHRo4bq7IHF1w6EgZMOgaTogJS4qcy4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IHTDrG0gdGjhuqV5IHRo4bq7IGAlcycuIgorCisjOiBidWlsdGluL3RhZy5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRo4bq7IMSRw6MgYuG7iyB4w7NhIGAlcycgKHRyxrDhu5tjIGzDoCAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHZlcmlmeSB0aGUgdGFnICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB0aOG6qW0gdHJhIHRo4bq7IGAlcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQ5Cittc2dpZCAiIgorIlxuIgorIiNcbiIKKyIjIFdyaXRlIGEgdGFnIG1lc3NhZ2VcbiIKKyIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZC5cbiIKKyIjXG4iCittc2dzdHIgIiIKKyJcbiIKKyIjXG4iCisiIyBWaeG6v3QgY8OhYyBnaGkgY2jDuiBjaG8gKHRo4bq7KSB0YWdcbiIKKyIjIE5o4buvbmcgZMOybmcgxJHGsOG7o2MgYuG6r3QgxJHhuqd1IGLhurFuZyAnIycgc+G6vSDEkcaw4bujYyBi4buPIHF1YS5cbiIKKyIjXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjU2Cittc2dpZCAiIgorIlxuIgorIiNcbiIKKyIjIFdyaXRlIGEgdGFnIG1lc3NhZ2VcbiIKKyIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCisiI1xuIgorbXNnc3RyICIiCisiXG4iCisiI1xuIgorIiMgVmnhur90IGPDoWMgZ2hpIGNow7ogY2hvICh0aOG6uykgdGFnXG4iCisiIyBOaOG7r25nIGTDsm5nIMSRxrDhu6NjIGLhuq90IMSR4bqndSBi4bqxbmcgJyMnIHPhur0gxJHGsOG7o2MgYuG7jyBxdWE7IGLhuqFuIGPDsyB0aOG7gyB4w7NhIGNow7puZyDEkWkgIgorIm7hur91IG114buRbi5cbiIKKyIjXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGvDvSB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzozMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdsOgbyB04bqtcCB0aW4gbMawdSB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzozMjUKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIHNhaS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzM4Cittc2dpZCAidGFnIGhlYWRlciB0b28gYmlnLiIKK21zZ3N0ciAixJHhuqd1IHRo4bq7ICh0YWcpIHF1w6EgbOG7m24uIgorCisjOiBidWlsdGluL3RhZy5jOjM3MAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAia2jDtG5nIGPDsyB0aMO0bmcgxJFp4buHcCAobWVzc2FnZSkgY2hvIHRo4bq7ICh0YWcpPyIKKworIzogYnVpbHRpbi90YWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiTuG7mWkgZHVuZyBnaGkgY2jDuiBjw7JuIGzhuqFpICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1Cittc2dpZCAic3dpdGNoICdwb2ludHMtYXQnIHJlcXVpcmVzIGFuIG9iamVjdCIKK21zZ3N0ciAiY2h1eeG7g24gxJHhur9uICdwb2ludHMtYXQnIHnDqnUgY+G6p24gbeG7mXQgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3RhZy5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAidMOqbiDEkeG7kWkgdMaw4bujbmcgZOG7iyBow6xuaCBgJXMnIgorCisjOiBidWlsdGluL3RhZy5jOjQ0NworbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICJjaOG7iSBsaeG7h3Qga8OqIHTDqm4gY8OhYyB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzo0NDkKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIDxuPiBkw7JuZyBjaG8gbeG7l2kgZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDUxCittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgInjDs2EgdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDUyCittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgInRo4bqpbSB0cmEgdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDU0Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIlTDuXkgY2jhu41uIHThuqFvIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0NTYKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgIsSR4buDIGNow7ogZ2nhuqNpIGNobyB0aOG6uywgY+G6p24gbeG7mXQgbOG7nWkgZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDU4Cittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgInRpbiBuaOG6r24gY2hvIHRo4bq7ICh0YWcpIgorCisjOiBidWlsdGluL3RhZy5jOjQ2MAorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgInRo4bq7IGNow7ogZ2nhuqNpIHbDoCBrw70ga2nhu4N1IEdQRyIKKworIzogYnVpbHRpbi90YWcuYzo0NjQKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJkw7luZyBraMOhbyBraMOhYyDEkeG7gyBrw70gdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDY1Cittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAidGhheSB0aOG6vyBu4bq/dSB0YWcgxJHDsyDEkcOjIGPDsyB0csaw4bubYyIKKworIzogYnVpbHRpbi90YWcuYzo0NjYKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgImhp4buDbiB0aOG7iyBkYW5oIHPDoWNoIHRo4bq7IHRyb25nIGPDoWMgY+G7mXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDY4Cittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiBsaeG7h3Qga8OqIHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjQ3MQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIG5o4buvbmcgbmjDoW5oIG3DoCBuw7MgY2jhu6lhIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDc3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBjw6FjIHRo4bq7IGPhu6dhIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gdsOgIC1uIHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLW4gY2jhu4kgY2hvIHBow6lwIGTDuW5nIHbhu5tpIC1sLiIKKworIzogYnVpbHRpbi90YWcuYzo1MjUKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgInTDuXkgY2jhu41uIC0tY29udGFpbnMgY2jhu4kgY2hvIHBow6lwIGTDuW5nIHbhu5tpIC1sLiIKKworIzogYnVpbHRpbi90YWcuYzo1MjcKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtLXBvaW50cy1hdCBjaOG7iSBjaG8gcGjDqXAgZMO5bmcgduG7m2kgLWwuIgorCisjOiBidWlsdGluL3RhZy5jOjUzNQorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiY2jhu4kgY8OzIG3hu5l0IHTDuXkgY2jhu41uIC1GIGhv4bq3YyAtbSBsw6AgxJHGsOG7o2MgcGjDqXAuIgorCisjOiBidWlsdGluL3RhZy5jOjU1NQorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAicXXDoSBuaGnhu4F1IMSR4buRaSBz4buRIgorCisjOiBidWlsdGluL3RhZy5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiYCVzJyBraMO0bmcgcGjhuqNpIHRo4bq7IGjhu6NwIGzhu4cuIgorCisjOiBidWlsdGluL3RhZy5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiVGjhursgYCVzJyDEkcOjIHThu5NuIHThuqFpIHLhu5NpIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGxvY2sgdGhlIHJlZiIKK21zZ3N0ciAiJXM6IGtow7RuZyB0aOG7gyBraMOzYSByZWYgKHRoYW0gY2hp4bq/dSkiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgdXBkYXRlIHRoZSByZWYiCittc2dzdHIgIiVzOiBraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IHJlZiAodGhhbSBjaGnhur91KSIKKworIzogYnVpbHRpbi90YWcuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJUaOG6uyDEkcOjIGPhuq1wIG5o4bqtdCBgJXMnIChjxakgbMOgICVzKVxuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjQwMQorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggW29wdGlvbnNdIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggW2PDoWMtdMO5eS1jaOG7jW5dIFs8dOG6rXAtdGluPi4uLl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzE3Cittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICJ0aeG6v3AgdOG7pWMgbMOgbSBt4bubaSBuZ2F5IGPhuqMga2hpIGLhuqNuZyBt4bulYyBs4bulYyBj4bqnbiDEkcaw4bujYyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzIwCittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlZnJlc2g6IGzhu50gxJFpIG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3MjMKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAia2jDtG5nIGLhu48gcXVhIGPDoWMgdOG6rXAgdGluIG3hu5tpIHThuqFvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcyNQorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICLEkeG7gyBjw6FjIHThuq1wIHRpbiB0aGF5IHRo4bq/IGPDoWMgdGjGsCBt4bulYyB2w6AgYHZpY2UtdmVyc2EnIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcyNworbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgInRow7RuZyBiw6FvIGPDoWMgdOG6rXAtdGluIHRoaeG6v3UgdHJvbmcgdGjGsC1t4bulYyBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3MjkKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorImzDoG0gdMawxqFpIG3hu5tpIHRo4bqtbSBjaMOtIGtoaSBi4bqjbmcgbeG7pWMgbOG7pWMgY2jhu6lhIGPDoWMgbeG7pWMgdGluIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjczMgorbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAibOG6pXkgbOG6oWkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3MzYKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgImdp4buRbmcgLS1yZWZyZXNoLCBuaMawbmcgYuG7jyBxdWEgY8OhYyBjw6BpIMSR4bq3dCBgYXNzdW1lLXVuY2hhbmdlZCciCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzQwCittc2dpZCAiPG1vZGU+IDxvYmplY3Q+IDxwYXRoPiIKK21zZ3N0ciAiPG1vZGU+IDzEkeG7kWkgdMaw4bujbmc+IDzEkcaw4budbmcgZOG6q24+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc0MQorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAidGjDqm0gY8OhYyB04bqtcCB0aW4gxJHDoyBjaOG7iSByYSB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NDUKK21zZ2lkICIoKy8tKXgiCittc2dzdHIgIigrLy0peCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NDYKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAiZ2hpIMSRw6ggbMOqbiBiw610IHRoaSBow6BuaCBj4bunYSBjw6FjIHThuq1wIHRpbiDEkcaw4bujYyBsaeG7h3Qga8OqIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc1MAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAixJDDoW5oIGThuqV1IGPDoWMgdOG6rXAgdGluIGzDoCBcImtow7RuZyB0aGF5IMSR4buVaVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc1MworbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAieMOzYSBiw610ICBhc3N1bWVkLXVuY2hhbmdlZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NTYKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICLEkcOhbmggZOG6pXUgY8OhYyB04bqtcCB0aW4gbMOgIGBjaOG7iS3EkeG7jWMnIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc1OQorbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICJ4w7NhIGLDrXQgc2tpcC13b3JrdHJlZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NjIKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorImNo4buJIHRow6ptIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjOyBraMO0bmcgdGjDqm0gbuG7mWkgZHVuZyB2w6BvIGPGoSBz4bufIGThu68gbGnhu4d1IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NjQKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICIiCisiZ+G7oSBi4buPIGPDoWMgxJHGsOG7nW5nIGThuqtuIMSRxrDhu6NjIMSR4bq3dCB0w6puIHRo4bqtbSBjaMOtIGPhuqMga2hpIG7DsyBoaeG7h24gZGnhu4duIHRyb25nIHRoxrAgbeG7pWMgIgorImzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2NgorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAiduG7m2kgdMO5eSBjaOG7jW4gLS1zdGRpbjogY8OhYyBkw7JuZyDEkeG6p3UgdsOgbyDEkcaw4bujYyBjaOG6pW0gZOG7qXQgYuG7n2kga8O9IHThu7EgbnVsbCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NjgKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLEkeG7jWMgZGFuaCBzw6FjaCDEkcaw4budbmcgZOG6q24gY+G6p24gY+G6rXAgbmjhuq10IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NzIKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBjw6FjIG3hu6VjIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NzYKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgInBo4bulYyBo4buTaSBjw6FjIHRy4bqhbmcgdGjDoWkgIzIgdsOgICMzIGNobyBjw6FjIMSRxrDhu51uZyBk4bqrbiDEkcaw4bujYyBsaeG7h3Qga8OqIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc4MAorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICJjaOG7iSBj4bqtcCBuaOG6rXQgY8OhYyBt4bulYyB0aW4gbcOgIG7DsyBraMOhYyBiaeG7h3Qgc28gduG7m2kgSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3ODQKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJi4buPIHF1YSBjw6FjIHThuq1wLXRpbiB0aGnhur91IHRyb25nIHRoxrAtbeG7pWMgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6Nzg3Cittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJiw6FvIGPDoW8gY8OhYyB0aGFvIHTDoWMgcmEgdGhp4bq/dCBi4buLIHh14bqldCBjaHXhuqluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc4OQorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIoY2hvIGBwb3JjZWxhaW5zJykgcXXDqm4gY8OhYyB4dW5nIMSR4buZdCBjaMawYSDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCDEkcOjIGdoaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3OTMKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiZ2hpIG3hu6VjIGzhu6VjIOG7nyDEkeG7i25oIGThuqFuZyBuw6B5IgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzo3Cittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgW29wdGlvbnNdIC1kIDxyZWZuYW1lPiBbPG9sZHZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbY8OhYy10w7l5LWNo4buNbl0gLWQgPHJlZm5hbWU+IFs8Ymnhur9uLWPFqT5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzo4Cittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgW29wdGlvbnNdICAgIDxyZWZuYW1lPiA8bmV3dmFsPiBbPG9sZHZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbY8OhYy10w7l5LWNo4buNbl0gICAgPHJlZm5hbWU+IDxiaeG6v24tbeG7m2k+IFs8Ymnhur9uLWPFqT5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxOQorbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICJ4w7NhIHRoYW0gY2hp4bq/dSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MjEKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAiY+G6rXAgbmjhuq10IDx0w6puLXRoYW0tY2hp4bq/dT4ga2jDtG5nIHBo4bqjaSBjw6FpIG7DsyBjaOG7iSB04bubaSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo2Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE0Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAiY+G6rXAgbmjhuq10IGPDoWMgdOG6rXAgdGluIHRow7RuZyB0aW4gdOG7qyDEkWnhu4NtIHh14bqldCBwaMOhdCIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU2Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdnwtLXZlcmJvc2VdIFstc3wtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12fC0tdmVyYm9zZV0gWy1zfC0tc3RhdC1vbmx5XSA8Z8OzaT4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NgorbXNnaWQgInZlcmJvc2UiCittc2dzdHIgImNoaSB0aeG6v3QiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2OAorbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgdGjhu5FuZyBrw6oiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE3Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12fC0tdmVyYm9zZV0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdnwtLXZlcmJvc2VdIDx0aOG6uz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjczCittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbuG7mWkgZHVuZyBj4bunYSB0aOG6uyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTMKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTx0aeG7gW4tdOG7kT4vXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjxp4buBbiB04buRPi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI3Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJnaGkgxJHhu5FpIHTGsOG7o25nIGPDonkgKHRyZWUpIGNobyA8dGnhu4FuIHThu5E+IHRoxrAgbeG7pWMgY29uIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMAorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgImNo4buJIGjhu691IMOtY2gga2hpIGPhuqduIGfhu6EgbOG7l2kiCisKKyM6IGdpdC5jOjE2Cittc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iCittc2dzdHIgIiIKKyJDaOG6oXkgbOG7h25oIGBnaXQgaGVscCA8dMOqbi1s4buHbmg+JyDEkeG7gyBjw7MgdGjDqm0gdGjDtG5nIHRpbiB24buBIGzhu4duaCDEkcaw4bujYyBjaOG7iSByYS4iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTYKK21zZ2lkICJuby1vcCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkiCittc2dzdHIgIm5vLW9wICh0xrDGoW5nIHRow61jaCBuZ8aw4bujYykiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMjgKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgImNoaSB0aeG6v3QgaMahbiBu4buvYSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzMAorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgImltIGzhurduZyBoxqFuIG7hu69hIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjM2Cittc2dpZCAidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiCittc2dzdHIgInPhu60gZOG7pW5nIDxuPiBjaOG7ryBz4buRIMSR4buDIGhp4buDbiB0aOG7iyBTSEEtMXMiCisKKyM6IGNvbW1vbi1jbWRzLmg6OAorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiVGjDqm0gbuG7mWkgZHVuZyB04bqtcCB0aW4gdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGNvbW1vbi1jbWRzLmg6OQorbXNnaWQgIkZpbmQgYnkgYmluYXJ5IHNlYXJjaCB0aGUgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiVMOsbSBraeG6v20gYuG6sW5nIMSRaeG7gXUgdHJhIG5o4buLIHBow6JuIGPDoWMgdGhheSDEkeG7lWkgbcOgIG7DsyBi4bqvdCDEkeG6p3UgbOG7l2kiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTAKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAiTGnhu4d0IGvDqiwgdOG6oW8gaGF5IGzDoCB4w7NhIGPDoWMgbmjDoW5oIgorCisjOiBjb21tb24tY21kcy5oOjExCittc2dpZCAiQ2hlY2tvdXQgYSBicmFuY2ggb3IgcGF0aHMgdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiQ2hlY2tvdXQgbeG7mXQgbmjDoW5oIGhheSBjw6FjIMSRxrDhu51uZyBk4bqrbiB04bubaSBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBjb21tb24tY21kcy5oOjEyCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJOaMOibiBi4bqjbiBt4buZdCBraG8gY2jhu6lhIMSR4bq/biBt4buZdCB0aMawIG3hu6VjIG3hu5tpIgorCisjOiBjb21tb24tY21kcy5oOjEzCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIkdoaSBjw6FjIHRoYXkgxJHhu5VpIHbDoG8ga2hvIGNo4bupYSIKKworIzogY29tbW9uLWNtZHMuaDoxNAorbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIiIKKyJIaeG7g24gdGjhu4sgY8OhYyB0aGF5IMSR4buVaSBnaeG7r2Egbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpLCBjb21taXQgdsOgIGPDonkgbMOgbSAiCisidmnhu4djLCB2LnYuLiIKKworIzogY29tbW9uLWNtZHMuaDoxNQorbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkPDoWMgxJHhu5FpIHTGsOG7o25nIHbDoCB0aGFtIGNoaeG6v3UgxJHGsOG7o2MgdOG6o2kgduG7gSB04burIGtobyBjaOG7qWEga2jDoWMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTYKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIkluIHJhIG5o4buvbmcgZMOybmcga2jhu5twIHbhu5tpIG3hu5l0IG3huqt1IgorCisjOiBjb21tb24tY21kcy5oOjE3Cittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IGdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIiIKKyJU4bqhbyBt4buZdCBraG8gZ2l0IHRy4buRbmcgcuG7l25nIGhheSBraOG7n2kgdOG6oW8gbOG6oWkgbeG7mXQga2hvIMSRw6MgdOG7k24gdOG6oWkgdOG7qyB0csaw4bubYyIKKworIzogY29tbW9uLWNtZHMuaDoxOAorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgImhp4buDbiB0aOG7iyBuaOG6rXQga8O9IGPDoWMgbOG6p24gY29tbWl0IChjaHV54buDbiBnaWFvKSIKKworIzogY29tbW9uLWNtZHMuaDoxOQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICIiCisiSOG7o3AgbmjhuqV0IGhhaSBoYXkgbmhp4buBdSBoxqFuIGzhu4tjaCBz4butIGPhu6dhIGPDoWMgbmjDoCBwaMOhdCB0cmnhu4NuIHBo4bqnbiBt4buBbSBs4bqhaSB24bubaSAiCisibmhhdSIKKworIzogY29tbW9uLWNtZHMuaDoyMAorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAiRGkgY2h1eeG7g24sIMSR4buVaSB0w6puIG3hu5l0IHThuq1wIHRpbiwgdGjGsCBt4bulYyBoYXkgbGnDqm4ga+G6v3QgdMaw4bujbmcgdHLGsG5nIgorCisjOiBjb21tb24tY21kcy5oOjIxCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgbWVyZ2Ugd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIkZldGNoIChs4bqleSB24buBKSB2w6AgaMOyYSB0cuG7mW5nIHbhu5tpIGtobyBraMOhYyBoYXkgbmjDoW5oIG7hu5lpIGLhu5kiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjIKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIiIKKyJD4bqtcCBuaOG6rXQgdGhhbSBjaGnhur91IChyZWZzKSBtw6F5IGNo4bunIGPDuW5nIHbhu5tpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGxpw6puIHF1YW4gxJHhur9uIG7DsyIKKworIzogY29tbW9uLWNtZHMuaDoyMworbXNnaWQgIkZvcndhcmQtcG9ydCBsb2NhbCBjb21taXRzIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQiCittc2dzdHIgIiIKKyJGb3J3YXJkLXBvcnQgbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIG7hu5lpIGLhu5kgdOG7m2kgaGVhZCB0aMaw4bujbmcgbmd14buTbiDEkcOjIGPhuq1wIG5o4bqtdCIKKworIzogY29tbW9uLWNtZHMuaDoyNAorbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICLEkOG6t3QgbOG6oWkgSEVBRCBoaeG7h24gaMOgbmggdGjDoG5oIG3hu5l0IHRy4bqhbmcgdGjDoWkgxJHGsOG7o2MgY2jhu4kgcmEiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjUKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiR+G7oSBi4buPIGPDoWMgdOG6rXAgdGluIHThu6sgY8OieSBsw6BtIHZp4buHYyB2w6AgdOG7qyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjYKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGPDoWMga2nhu4N1IGtow6FjIG5oYXUgY+G7p2EgY8OhYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGNvbW1vbi1jbWRzLmg6MjcKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICJIaeG7g24gdGjhu4sgdHLhuqFuZyB0aMOhaSBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBjb21tb24tY21kcy5oOjI4Cittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIiIKKyJU4bqhbywgbGnhu4d0IGvDqiwgeMOzYSBoYXkgeMOhYyB0aOG7sWMgbeG7mXQgxJHhu5FpIHTGsOG7o25nIHRo4bq7ICh0YWcpIG3DoCBuw7MgxJHGsOG7o2Mga8O9IHPhu60gZOG7pW5nICIKKyJHUEciCisKKyM6IGdpdC1hbS5zaDo1MAorbXNnaWQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgorbXNnc3RyICJC4bqhbiBj4bqnbiDEkeG6t3QgdGjDtG5nIHRpbiB24buBIG5nxrDhu51pIGNodXnhu4NuIGdpYW8gbcOjIG5ndeG7k24gdHLGsOG7m2MgxJHDoyIKKworIzogZ2l0LWFtLnNoOjk1Cittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyJC4bqhbiBjw7MgbOG6vSDEkcOjIGPDsyBIRUFEIMSRw6MgYuG7iyBkaSBjaHV54buDbiDEkWkga+G7gyB04burIGzhuqduICdhbScgdGjhuqV0IGLhuqFpIGN14buRaSBjw7luZy5cbiIKKyJLaMO0bmcgdGjhu4MgY2h1eeG7g24gdOG7m2kgT1JJR19IRUFEIgorCisjOiBnaXQtYW0uc2g6MTA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiRjbWRsaW5lIC0tcmVzb2x2ZWRcIi5cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJLaGkgYuG6oW4gY+G6p24gZ2nhuqNpIHF1eeG6v3QgduG6pW4gxJHhu4EgbsOgeSBow6N5IGNo4bqheSBs4buHbmggXCIkY21kbGluZSAtLXJlc29sdmVkXCIuXG4iCisiTuG6v3UgYuG6oW4gY8OzIMO9IMSR4buLbmggYuG7jyBxdWEgbWnhur9uZyB2w6EsIHRoYXkgdsOgbyDEkcOzIGLhuqFuIGNo4bqheSBcIiRjbWRsaW5lIC0tc2tpcCIKKyJcIi5cbiIKKyLEkOG7gyBwaOG7pWMgaOG7k2kgbOG6oWkgdGjDoG5oIG5ow6FuaCBuZ3V5w6puIHRo4buneSB2w6AgZOG7q25nIHZp4buHYyB2w6EgbOG6oWkgdGjDrCBjaOG6oXkgIgorIlwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKKworIzogZ2l0LWFtLnNoOjEyMQorbXNnaWQgIkNhbm5vdCBmYWxsIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLiIKK21zZ3N0ciAixJBhbmcgdHLhu58gbOG6oWkgxJHhu4MgaMOyYSB0cuG7mW4ga2nhu4N1ICd0aHJlZS13YXknLiIKKworIzogZ2l0LWFtLnNoOjEzNworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIktobyB0aGnhur91IMSR4buRaSB0xrDhu6NuZyBibG9iIGPhuqduIHRoaeG6v3QgxJHhu4MgdHLhu58gduG7gSB0csOqbiAnMy13YXkgbWVyZ2UnLiIKKworIzogZ2l0LWFtLnNoOjEzOQorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIiIKKyJT4butIGThu6VuZyB0aMO0bmcgdGluIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyDEkeG7gyBj4bqldSB0csO6YyBs4bqhaSBt4buZdCBjw6J5ICh0cmVlKSBjxqEgc+G7ny4uLiIKKworIzogZ2l0LWFtLnNoOjE1NAorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKyJC4bqhbiDEkcOjIHPhu61hIG1p4bq/bmcgdsOhIGPhu6dhIG3DrG5oIGLhurFuZyBjw6FjaCB0aOG7pyBjw7RuZyDDoD9cbiIKKyJOw7Mga2jDtG5nIHRo4buDIMOhcCBk4bulbmcgY8OhYyBibG9iIMSRw6MgxJHGsOG7o2MgZ2hpIGzhuqFpIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyBj4bunYSBuw7MuIgorCisjOiBnaXQtYW0uc2g6MTYzCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICLEkGFuZyB0cuG7nyBs4bqhaSDEkeG7gyB2w6EgY8ahIHPhu58gdsOgICczLXdheSBtZXJnZScuLi4iCisKKyM6IGdpdC1hbS5zaDoxNzkKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdHLhu5luIHbDoG8gY8OhYyB0aGF5IMSR4buVaS4iCisKKyM6IGdpdC1hbS5zaDoyNzQKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiQ2jhu4kgY8OzIG3hu5l0IHPDqi1yaSBtaeG6v25nIHbDoSBTdEdJVCDEkcaw4bujYyDDoXAgZOG7pW5nIG3hu5l0IGzDumMiCisKKyM6IGdpdC1hbS5zaDozNjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZvcm1hdCAkcGF0Y2hfZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICLEkOG7i25oIGThuqFuZyBtaeG6v25nIHbDoSAkcGF0Y2hfZm9ybWF0IGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujLiIKKworIzogZ2l0LWFtLnNoOjM2MworbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiRMOyIHTDrG0gxJHhu4tuaCBk4bqhbmcgbWnhur9uZyB2w6EgZ+G6t3AgbOG7l2kuIgorCisjOiBnaXQtYW0uc2g6Mzg5Cittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisiVMO5eSBjaOG7jW4gLWIvLS1iaW5hcnkgxJHDoyBraMO0bmcgZMO5bmcgdOG7qyBsw6J1IHLhu5NpLCB2w6BcbiIKKyJuw7Mgc+G6vSDEkcaw4bujYyBi4buPIMSRaS4gWGluIMSR4burbmcgc+G7rSBk4bulbmcgbsOzIHRow6ptIG7hu69hLiIKKworIzogZ2l0LWFtLnNoOjQ3NworIywgc2gtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAkZG90ZXN0IHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgInRoxrAgbeG7pWMgcmViYXNlIHRyxrDhu5tjICRkb3Rlc3QgduG6q24gY2jGsGEgc+G6tW4gc8OgbmcgbmjGsG5nIG1ib3ggxJHGsOG7o2MgxJHGsGEgcmEuIgorCisjOiBnaXQtYW0uc2g6NDgyCittc2dpZCAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iCittc2dzdHIgIlhpbiBow6N5IHLDtSByw6BuZy4gLS1za2lwIGhheSAtLWFib3J0PyIKKworIzogZ2l0LWFtLnNoOjUwOQorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIiIKKyJUaGFvIHTDoWMgcGjDom4gZ2nhuqNpIGtow7RuZyDEkWFuZyDEkcaw4bujYyB0aeG6v24gaMOgbmgsIGNow7puZyB0YSBraMO0bmcgcGjhu6VjIGjhu5NpIGzhuqFpLiIKKworIzogZ2l0LWFtLnNoOjU3NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJGZpbGVzKSIKK21zZ3N0ciAiQuG6o25nIG3hu6VjIGzhu6VjIHNhaToga2jDtG5nIHRo4buDIMOhcCBk4bulbmcgY8OhYyBtaeG6v25nIHbDoSAoc2FpOiAkZmlsZXMpIgorCisjOiBnaXQtYW0uc2g6Njc5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiUGF0Y2ggaXMgZW1wdHkuICBXYXMgaXQgc3BsaXQgd3Jvbmc/XG4iCisiSWYgeW91IHdvdWxkIHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIGluc3RlYWQgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJNaeG6v25nIHbDoSB0cuG7kW5nIHLhu5duZy4gIE7DsyDEkcOjIGLhu4sgY2hpYSBj4bqvdCBzYWkgcGjhuqNpIGtow7RuZz9cbiIKKyJO4bq/dSBi4bqhbiB0aMOtY2ggYuG7jyBxdWEgbWnhur9uZyB2w6EgbsOgeSwgaMOjeSBjaOG6oXkgbOG7h25oIHNhdSDEkeG7gyB0aGF5IHRo4bq/IFwiJGNtZGxpbmUgIgorIi0tc2tpcFwiLlxuIgorIsSQ4buDIHBo4bulYyBo4buTaSBs4bqhaSBuaMOhbmggbmd1ecOqbiB0aOG7p3kgdsOgIGThu6tuZyB2w6EgbOG6oWkgaMOjeSBjaOG6oXkgbOG7h25oIFwiJGNtZGxpbmUgLS0iCisiYWJvcnRcIi4iCisKKyM6IGdpdC1hbS5zaDo3MDYKK21zZ2lkICJQYXRjaCBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuIgorbXNnc3RyICJNaeG6v25nIHbDoSBraMO0bmcgY8OzIMSR4buLYSBjaOG7iSBlLW1haWwgaOG7o3AgbOG7hy4iCisKKyM6IGdpdC1hbS5zaDo3NTMKK21zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgxJHGsOG7o2MgdMawxqFuZyB0w6FjIG3DoCBraMO0bmcgY8OzIHN0ZGluIGvhur90IG7hu5FpIHbhu5tpIG3hu5l0IHRoaeG6v3QgYuG7iyBjdeG7kWkiCisKKyM6IGdpdC1hbS5zaDo3NTcKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIlRow6JuIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgbMOgOiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYW0uc2g6NzY0Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorbXNnc3RyICIiCisiw4FwIGThu6VuZz8gxJHhu5NuZyDDvSBbeV0va2jDtG5nIFtuXS9jaOG7iW5oIHPhu61hIFtlXS9oaeG7g24gdGjhu4sgbWnhur9uZyBbdl3DoS/EkeG7k25nIMO9IHThuqV0ICIKKyJj4bqjIFthXSAiCisKKyM6IGdpdC1hbS5zaDo4MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAkRklSU1RMSU5FIgorbXNnc3RyICLEkGFuZyDDoXAgZOG7pW5nIChtaeG6v25nIHbDoSk6ICRGSVJTVExJTkUiCisKKyM6IGdpdC1hbS5zaDo4MjEKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKyJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gLSBi4bqhbiDEkcOjIHF1w6puIHPhu60gZOG7pW5nIGzhu4duaCBgZ2l0IGFkZCcgw6A/XG4iCisiTuG6v3Ug4bufIMSRw6J5IGtow7RuZyBjw7MgZ8OsIGPDsm4gbOG6oWkgc3RhZ2UsIHTDrG5oIGPhu50gbMOgIGPDsyBt4buZdCBz4buRIHRo4bupIGtow6FjXG4iCisixJHDoyBz4bq1biDEkcaw4bujYyDEkcawYSB2w6BvIHbhu5tpIGPDuW5nIG7hu5lpIGR1bmcgdGhheSDEkeG7lWk7IGLhuqFuIGPDsyBs4bq9IG114buRbiBi4buPIHF1YSBtaeG6v25nICIKKyJ2w6EgbsOgeS4iCisKKyM6IGdpdC1hbS5zaDo4MjkKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleFxuIgorImRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/IgorbXNnc3RyICIiCisiQuG6oW4gduG6q24gY8OzIG5o4buvbmcgxJHGsOG7nW5nIGThuqtuIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyBj4bunYSBtw6xuaFxuIgorImLhuqFuIMSRw6MgcXXDqm4gc+G7rSBk4bulbmcgbOG7h25oIGBnaXQgYWRkJyDDoD8iCisKKyM6IGdpdC1hbS5zaDo4NDUKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIktow7RuZyB0aGF5IMSR4buVaSBnw6wgY+G6oyAtLSBNaeG6v25nIHbDoSDEkcOjIMSRxrDhu6NjIMOhcCBk4bulbmcgcuG7k2kuIgorCisjOiBnaXQtYW0uc2g6ODU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FIgorbXNnc3RyICJWw6EgZ+G6t3AgbOG7l2kgdOG6oWkgJG1zZ251bSAkRklSU1RMSU5FIgorCisjOiBnaXQtYW0uc2g6ODU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvcHkgb2YgdGhlIHBhdGNoIHRoYXQgZmFpbGVkIGlzIGZvdW5kIGluOlxuIgorIiAgICRkb3Rlc3QvcGF0Y2giCittc2dzdHIgIiIKKyJC4bqjbiBzYW8gY2jDqXAgY+G7p2EgbWnhur9uZyB2w6EgbcOgIG7DsyBn4bq3cCBs4buXaSB0aMOsIMSRxrDhu6NjIHTDrG0gdGjhuqV5IHRyb25nOlxuIgorIiAgICRkb3Rlc3QvcGF0Y2giCisKKyM6IGdpdC1hbS5zaDo4NzYKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICLDoXAgZOG7pW5nIHbDoG8gbeG7mXQgbOG7i2NoIHPhu60gdHLhu5FuZyBy4buXbmciCisKKyM6IGdpdC1iaXNlY3Quc2g6NDgKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiQuG6oW4gY+G6p24ga2jhu59pIMSR4bqndSBi4bqxbmcgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAiQuG6oW4gY8OzIG114buRbiB0w7RpIHRo4buxYyBoaeG7h24gxJFp4buBdSBuw6B5IGNobyBi4bqhbiBraMO0bmcgW1kvbl0/ICIKKworIzogZ2l0LWJpc2VjdC5zaDo5NQorIywgc2gtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRhcmcnIgorbXNnc3RyICJraMO0bmcgY8O0bmcgbmjhuq1uIHTDuXkgY2jhu41uOiAnJGFyZyciCisKKyM6IGdpdC1iaXNlY3Quc2g6OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyRhcmcnIGtow7RuZyBjw7MgduG6uyBuaMawIGzDoCBt4buZdCBz4buxIHjDqXQgbOG6oWkgaOG7o3AgbOG7hyIKKworIzogZ2l0LWJpc2VjdC5zaDoxMTcKK21zZ2lkICJCYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIkhFQUQgc2FpIC0gVMO0aSBj4bqnbiBt4buZdCBIRUFEIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNoZWNraW5nIG91dCAnJHN0YXJ0X2hlYWQnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDx2YWxpZGJyYW5jaD4nLiIKK21zZ3N0ciAiIgorIlZp4buHYyBjaGVja291dCAnJHN0YXJ0X2hlYWQnIGfhurdwIGzhu5dpLiBIw6N5IHRo4butIGBnaXQgYmlzZWN0IHJlc2V0ICIKKyI8bmjDoW5oX2jhu6NwX2zhu4c+Jy4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQwCittc2dpZCAid29uJ3QgYmlzZWN0IG9uIHNlZWtlZCB0cmVlIgorbXNnc3RyICJz4bq9IGtow7RuZyBiaXNlY3QgdHLDqm0gY8OieSDEkcaw4bujYyBzZWVrIgorCisjOiBnaXQtYmlzZWN0LnNoOjE0NAorbXNnaWQgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIkhFQUQgc2FpIC0gdGhhbSBjaGnhur91IChyZWYpIHTGsOG7o25nIHRyxrBuZyBr4buzIGzhuqEiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiCittc2dzdHIgIsSQ4buRaSBz4buRIGJpc2VjdF93cml0ZSBzYWk6ICRzdGF0ZSIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIsSQ4bqndSB2w6BvIHJldiBzYWk6ICRhcmciCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIgorbXNnc3RyICJIw6N5IGfhu41pIGzhu4duaGwgJ2Jpc2VjdF9zdGF0ZScgduG7m2kgw610IG5o4bqldCBt4buZdCDEkeG7kWkgc+G7kS4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICLEkOG6p3UgdsOgbyByZXYgc2FpOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjI1MAorbXNnaWQgIidnaXQgYmlzZWN0IGJhZCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICJgZ2l0IGJpc2VjdCBiYWQnIGPDsyB0aOG7gyBs4bqleSBjaOG7iSBt4buZdCDEkeG7kWkgc+G7kS4iCisKKyMuIGhhdmUgYmFkIGJ1dCBub3QgZ29vZC4gIHdlIGNvdWxkIGJpc2VjdCBhbHRob3VnaAorIy4gdGhpcyBpcyBsZXNzIG9wdGltdW0uCisjOiBnaXQtYmlzZWN0LnNoOjI3MworbXNnaWQgIldhcm5pbmc6IGJpc2VjdGluZyBvbmx5IHdpdGggYSBiYWQgY29tbWl0LiIKK21zZ3N0ciAiIgorIkPhuqNuaCBiw6FvOiBjaOG7iSB0aOG7sWMgaGnhu4duIHZp4buHYyBiaXNlY3QgduG7m2kgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBzYWkuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIkLhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIGNoxrBhIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjg5Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lIGdvb2QgYW5kIG9uZSBiYWQgcmV2aXNpb25zLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgYmFkXCIgYW5kIFwiZ2l0IGJpc2VjdCBnb29kXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIkLhuqFuIHBo4bqjaSBjaOG7iSBjaG8gdMO0aSDDrXQgbmjhuqV0IG3hu5l0IMSRaeG7g20geMOpdCBkdXnhu4d0IHThu5F0IHbDoCBt4buZdCDEkWnhu4NtIHNhaS5cbiIKKyIoQuG6oW4gY8OzIHRo4buDIHPhu60gZOG7pW5nIFwiZ2l0IGJpc2VjdCBiYWRcIiB2w6AgXCJnaXQgYmlzZWN0IGdvb2RcIiBjaG8gY8OhaSDEkcOzLikiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjkyCittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgZ29vZCBhbmQgb25lIGJhZCByZXZpc2lvbnMuXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCBiYWRcIiBhbmQgXCJnaXQgYmlzZWN0IGdvb2RcIiBmb3IgdGhhdC4pIgorbXNnc3RyICIiCisiQuG6oW4gY+G6p24gYuG6r3QgxJHhuqd1IGLhurFuZyBs4buHbmggXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiQuG6oW4gc2F1IMSRw7MgY+G6p24gcGjhuqNpIGNo4buJIGNobyB0w7RpIMOtdCBuaOG6pXQgbeG7mXQgxJFp4buDbSB4w6l0IGR1eeG7h3QgxJHDum5nIHbDoCBt4buZdCDEkWnhu4NtICIKKyJzYWkuXG4iCisiKELhuqFuIGPDsyB0aOG7gyBz4butIGThu6VuZyBcImdpdCBiaXNlY3QgYmFkXCIgdsOgIFwiZ2l0IGJpc2VjdCBnb29kXCIgY2hvIGNow7puZy4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjM0NyBnaXQtYmlzZWN0LnNoOjQ3NAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiQ2jDum5nIHTDtGkga2jDtG5nIGJpc2VjdC4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyRpbnZhbGlkJyBraMO0bmcgcGjhuqNpIGzDoCBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIGjhu6NwIGzhu4ciCisKKyM6IGdpdC1iaXNlY3Quc2g6MzYzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICckYnJhbmNoJy5cbiIKKyJUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBjaGVjay1vdXQgSEVBRCBuZ3V5w6puIHRo4buneSBj4bunYSAnJGJyYW5jaCcuXG4iCisiSMOjeSB0aOG7rSBgZ2l0IGJpc2VjdCByZXNldCA8bOG6p24tY2h1eeG7g24tZ2lhbz4nLiIKKworIzogZ2l0LWJpc2VjdC5zaDozOTAKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJDaMawYSBjaOG7iSByYSB04bqtcCB0aW4gZ2hpIG5o4bqtdCBrw70iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jICRmaWxlIMSR4buDIHRoYW8gZGnhu4VuIGzhuqFpIgorCisjOiBnaXQtYmlzZWN0LnNoOjQwOAorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8gYuG6oW4gxJFhbmcgbsOzaSBnw6wgdGjhur8/IgorCisjOiBnaXQtYmlzZWN0LnNoOjQyMAorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAixJFhbmcgY2jhuqF5IGzhu4duaCAkY29tbWFuZCIKKworIzogZ2l0LWJpc2VjdC5zaDo0MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorImNo4bqheSBiaXNlY3QgZ+G6t3AgbOG7l2k6XG4iCisibcOjIHRy4bqjIHbhu4EgJHJlcyB04burIGzhu4duaCAnJGNvbW1hbmQnIGzDoCA8IDAgaG/hurdjID49IDEyOCIKKworIzogZ2l0LWJpc2VjdC5zaDo0NTMKK21zZ2lkICJiaXNlY3QgcnVuIGNhbm5vdCBjb250aW51ZSBhbnkgbW9yZSIKK21zZ3N0ciAiYmlzZWN0IGtow7RuZyB0aOG7gyB0aeG6v3AgdOG7pWMgdGjDqm0gxJHGsOG7o2MgbuG7r2EiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDU5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAiIgorImNo4bqheSBiaXNlY3QgZ+G6t3AgbOG7l2k6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIMSRw6MgdGhvw6F0IHJhIHbhu5tpIG3DoyBs4buXaSAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ2NgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiYmlzZWN0IGNo4bqheSB0aMOgbmggY8O0bmciCisKKyM6IGdpdC1wdWxsLnNoOjIxCittc2dpZCAiIgorIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuXG4iCisiUGxlYXNlLCBmaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiwgb3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCittc2dzdHIgIiIKKyJQdWxsIGzDoCBraMO0bmcgdGjhu4MgxJHGsOG7o2MgYuG7n2kgdsOsIGLhuqFuIGPDsyBuaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbi5cbiIKKyJYaW4gaMOjeSBz4butYSBjaOG7r2EgY2jDum5nIHRyxrDhu5tjLCB2w6Agc2F1IMSRw7Mgc+G7rSBk4bulbmcgbOG7h25oIGBnaXQgYWRkL3JtIDx04bqtcC10aW4+J1xuIgorIsSR4buDIHBow6ogY2h14bqpbiB2aeG7h2MgxJHDoW5oIGThuqV1IMSRw6J5IGPhuqduIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90LCBob+G6t2MgbMOgIHPhu60gZOG7pW5nIGBnaXQgIgorImNvbW1pdCAtYScuIgorCisjOiBnaXQtcHVsbC5zaDoyNQorbXNnaWQgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiRnVsbCBsw6Aga2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gYuG7n2kgdsOsIGLhuqFuIGPDsyBuaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbi4iCisKKyM6IGdpdC1wdWxsLnNoOjE5NworbXNnaWQgInVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorIsSRYW5nIGPhuq1wIG5o4bqtdCBt4buZdCBuaMOhbmggY2jGsGEgxJHGsOG7o2Mgc2luaCByYSB24bubaSBjw6FjIHRoYXkgxJHhu5VpIMSRxrDhu6NjIHRow6ptIHbDoG8gIgorImLhuqNuZyBt4bulYyBs4bulYyIKKworIy4gVGhlIGZldGNoIGludm9sdmVkIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaC4KKyMuIFRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBmaWxlIGlzIHN0aWxsIGJhc2VkIG9uIHRoZQorIy4gJG9yaWdfaGVhZCBjb21taXQsIGJ1dCB3ZSBhcmUgbWVyZ2luZyBpbnRvICRjdXJyX2hlYWQuCisjLiBGaXJzdCB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB0byBtYXRjaCAkY3Vycl9oZWFkLgorIzogZ2l0LXB1bGwuc2g6MjI4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJXYXJuaW5nOiBmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorIldhcm5pbmc6IGNvbW1pdCAkb3JpZ19oZWFkLiIKK21zZ3N0ciAiIgorIkPhuqNuaCBiw6FvOiBmZXRjaCDEkcOjIGPhuq1wIG5o4bqtdCBoZWFkIG5ow6FuaCBoaeG7h24gdOG6oWkuXG4iCisiQ+G6o25oIGLDoW86IMSRYW5nIGZhc3QtZm9yd2FyZCBjw6J5IGzDoG0gdmnhu4djIGPhu6dhIGLhuqFuIHThu6tcbiIKKyJD4bqjbmggYsOhbzogY29tbWl0ICRvcmlnX2hlYWQuIgorCisjOiBnaXQtcHVsbC5zaDoyNTMKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgaMOyYSB0cuG7mW4gbmhp4buBdSBuaMOhbmggdsOgIHRyb25nIG3hu5l0IGhlYWQgdHLhu5FuZyBy4buXbmciCisKKyM6IGdpdC1wdWxsLnNoOjI1NworbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gbOG7h25oIHJlYmFzZSAoY8ahIGPhuqV1IGzhuqFpKSB0csOqbiBuaGnhu4F1IG5ow6FuaCIKKworIzogZ2l0LXJlYmFzZS5zaDo1MworbXNnaWQgIiIKKyJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyJUbyBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCByZWJhc2luZywgcnVuIFwiZ2l0IHJlYmFzZSAtLWFib3J0IgorIlwiLiIKK21zZ3N0ciAiIgorIktoaSBi4bqhbiBj4bqnbiBnaeG6o2kgcXV54bq/dCB24bqlbiDEkeG7gSBuw6B5IGjDo3kgY2jhuqF5IGzhu4duaCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIk7hur91IGLhuqFuIGPDsyDDvSDEkeG7i25oIGLhu48gcXVhIG1p4bq/bmcgdsOhLCB0aGF5IHbDoG8gxJHDsyBi4bqhbiBjaOG6oXkgXCJnaXQgcmViYXNlIC0tc2tpcCIKKyJcIi5cbiIKKyLEkOG7gyBwaOG7pWMgaOG7k2kgbOG6oWkgdGjDoG5oIG5ow6FuaCBuZ3V5w6puIHRo4buneSB2w6AgZOG7q25nIHZp4buHYyB2w6EgbOG6oWkgdGjDrCBjaOG6oXkgXCJnaXQgIgorInJlYmFzZSAtLWFib3J0XCIuIgorCisjOiBnaXQtcmViYXNlLnNoOjE2MAorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICJob29rIChjaMawxqFuZyB0csOsbmggbcOzYyB2w6BvIGdpdCkgcHJlLXJlYmFzZSB04burIGNo4buRaSByZWJhc2UuIgorCisjOiBnaXQtcmViYXNlLnNoOjE2NQorbXNnaWQgIkl0IGxvb2tzIGxpa2UgZ2l0LWFtIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiIgorIkjDrG5oIG5oxrAgxJFhbmcgdHJvbmcgcXXDoSB0csOsbmggdGjhu7FjIGhp4buHbiBs4buHbmggZ2l0LWFtLiBLaMO0bmcgdGjhu4MgY2jhuqF5IGzhu4duaCAiCisicmViYXNlLiIKKworIzogZ2l0LXJlYmFzZS5zaDoyOTYKK21zZ2lkICJUaGUgLS1leGVjIG9wdGlvbiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24iCittc2dzdHIgIlTDuXkgY2jhu41uIC0tZXhlYyBwaOG6o2kgxJHGsOG7o2Mgc+G7rSBk4bulbmcgY8O5bmcgduG7m2kgdMO5eSBjaOG7jW4gLS1pbnRlcmFjdGl2ZSIKKworIzogZ2l0LXJlYmFzZS5zaDozMDEKK21zZ2lkICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorbXNnc3RyICJLaMO0bmcgY8OzIHRp4bq/biB0csOsbmggcmViYXNlIG7DoG8gcGjhuqNpIGtow7RuZz8iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzEyCittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICIiCisiSMOgbmggxJHhu5luZyBgLS1lZGl0LXRvZG8nIGNo4buJIGPDsyB0aOG7gyBkw7luZyB0cm9uZyBxdcOhIHRyw6xuaCBgcmViYXNlJyAoc+G7rWEgbOG7i2NoICIKKyJz4butKSB0xrDGoW5nIHTDoWMuIgorCisjOiBnaXQtcmViYXNlLnNoOjMxOQorbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgSEVBRCIKKworIzogZ2l0LXJlYmFzZS5zaDozMjIKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJC4bqhbiBwaOG6o2kgc+G7rWEgdOG6pXQgY+G6oyBjw6FjIGzhuqduIGjDsmEgdHLhu5luIHh1bmcgxJHhu5l0IHbDoCBzYXVcbiIKKyLEkcOzIMSRw6FuaCBk4bqldSBjaMO6bmcgbMOgIGPhuqduIHjhu60gbMO9IHPhu60gZOG7pW5nIGzhu4duaCBnaXQgYWRkIgorCisjOiBnaXQtcmViYXNlLnNoOjM0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcXVheSB0cuG7nyBs4bqhaSAkaGVhZF9uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjM1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICRzdGF0ZV9kaXJfYmFzZSBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS4iCittc2dzdHIgIiIKKyJIw6xuaCBuaMawIGzDoCDhu58gxJHDonkgc+G6tW4gY8OzIG3hu5l0IHRoxrAgbeG7pWMgJHN0YXRlX2Rpcl9iYXNlIGRpcmVjdG9yeSwgdsOgXG4iCisiVMO0aSB04buxIGjhu49pIGPDsyBwaOG6o2kgYuG6oW4gxJFhbmcg4bufIGdp4buvYSBt4buZdCBs4buHbmggcmViYXNlIGtow6FjLiAgTuG6v3UgxJHDum5nIGzDoFxuIgorIm5oxrAgduG6rXksIHhpbiBow6N5IHRo4butXG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiTuG6v3Uga2jDtG5nIHBo4bqjaSB0aOG6vywgaMOjeSB0aOG7rVxuIgorIlx0JGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyJ2w6AgY2jhuqF5IFTDlEkgbOG6p24gbuG7r2EuICBUw5RJICBk4burbmcgbOG6oWkgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGLhuqFuIHbhuqtuXG4iCisiY8OzIG3hu5l0IHPhu5EgdGjhu6kgcXXDvSBnacOhIOG7nyDEkcOieS5cbiIKKyJcbiIKKyJUw5RJOiBsw6AgbOG7h25oIGLhuqFuIHbhu6thIGfhu41pISIKKworIzogZ2l0LXJlYmFzZS5zaDo0MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJHVwc3RyZWFtX25hbWUiCittc2dzdHIgInRoxrDhu6NuZyBuZ3Xhu5NuIGtow7RuZyBo4bujcCBs4buHICR1cHN0cmVhbV9uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjQyOAorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIiRvbnRvX25hbWU6IOG7nyDEkcOieSBjw7Mgbmhp4buBdSBoxqFuIG3hu5l0IgorCisjOiBnaXQtcmViYXNlLnNoOjQzMSBnaXQtcmViYXNlLnNoOjQzNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJG9udG9fbmFtZTog4bufIMSRw6J5IGtow7RuZyBjw7MgZ8OsIMSR4buDIGjDsmEgdHLhu5luIgorCisjOiBnaXQtcmViYXNlLnNoOjQ0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICRvbnRvX25hbWUiCittc2dzdHIgIktow7RuZyBjaOG7iSDEkeG6v24gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSBraMO0bmcgaOG7o3AgbOG7hzogJG9udG9fbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo0NjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaDogJGJyYW5jaF9uYW1lIgorbXNnc3RyICJuZ2hpw6ptIHRy4buNbmc6IGtow7RuZyBjw7MgbmjDoW5oIG5oxrAgdGjhur86ICRicmFuY2hfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo0ODMKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJYaW4gaMOjeSBjb21taXQgaG/hurdjIHN0YXNoIGNow7puZy4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIk5ow6FuaCBoaeG7h24gdOG6oWkgJGJyYW5jaF9uYW1lIMSRw6MgxJHGsOG7o2MgY+G6rXAgbmjhuq10IHLhu5NpLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiTmjDoW5oIGhp4buHbiB04bqhaSAkYnJhbmNoX25hbWUgxJHDoyDEkcaw4bujYyBj4bqtcCBuaOG6rXQgcuG7k2ksIGzhu4duaCByZWJhc2Ugw6lwIGJ14buZYy4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIGZyb20gJG1iIHRvICRvbnRvOiIKK21zZ3N0ciAiVGhheSDEkeG7lWkgdOG7qyAkbWIgdGjDoG5oICRvbnRvOiIKKworIy4gRGV0YWNoIEhFQUQgYW5kIHJlc2V0IHRoZSB0cmVlCisjOiBnaXQtcmViYXNlLnNoOjUyNAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKK21zZ3N0ciAiIgorIlRyxrDhu5tjIHRpw6puLCBkaSBjaHV54buDbiBoZWFkIMSR4buDIHhlbSBs4bqhaSBjw6FjIGPDtG5nIHZp4buHYyB0csOqbiDEkeG7iW5oIGPhu6dhIG7Dsy4uLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1MzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICRicmFuY2hfbmFtZSB0byAkb250b19uYW1lLiIKK21zZ3N0ciAiRmFzdC1mb3J3YXJkICRicmFuY2hfbmFtZSB0aMOgbmggJG9udG9fbmFtZS4iCisKKyM6IGdpdC1zdGFzaC5zaDo1MQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBjbGVhciB24bubaSBjw6FjIHRoYW0gc+G7kSBsw6AgY2jGsGEgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiAoa2jDtG5nIG5o4bqtbiDEkeG7kWkgc+G7kSkiCisKKyM6IGdpdC1zdGFzaC5zaDo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICJC4bqhbiBjaMawYSBjw7JuIGPDsyBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIGto4bufaSB04bqhbyIKKworIzogZ2l0LXN0YXNoLnNoOjg5Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbOG6oWkgdHLhuqFuZyB0aMOhaSBi4bqjbmcgbeG7pWMgbOG7pWMgaGnhu4duIGjDoG5oIgorCisjOiBnaXQtc3Rhc2guc2g6MTIzIGdpdC1zdGFzaC5zaDoxMzYKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4bqhaSB0cuG6oW5nIHRow6FpIGPDonktbMOgbS12aeG7h2MgaGnhu4duIGjDoG5oIgorCisjOiBnaXQtc3Rhc2guc2g6MTQwCittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAiQ2jGsGEgY8OzIHRoYXkgxJHhu5VpIG7DoG8gxJHGsOG7o2MgY2jhu41uIgorCisjOiBnaXQtc3Rhc2guc2g6MTQzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIktow7RuZyB0aOG7gyBn4buhIGLhu48gYuG6o25nIG3hu6VjIGzhu6VjIHThuqFtIHRo4budaSAoa2jDtG5nIHRo4buDIHjhuqN5IHJhKSIKKworIzogZ2l0LXN0YXNoLnNoOjE1NgorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGzhuqFpIHRy4bqhbmcgdGjDoWkgY8OieSBsw6BtIHZp4buHYyBoaeG7h24gaMOgbmgiCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuCisjLiAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKyMuIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorIy4gVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisjOiBnaXQtc3Rhc2guc2g6MjAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCittc2dzdHIgIiIKKyJs4buXaToga2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbiBjaG8gJ3N0YXNoIHNhdmUnOiAkb3B0aW9uXG4iCisiICAgICAgIMSQ4buDIGN1bmcgY+G6pXAgbeG7mXQgdGjDtG5nIMSRaeG7h3AsIHPhu60gZOG7pW5nIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKKworIzogZ2l0LXN0YXNoLnNoOjIyMworbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBu4buZaSBi4buZIG7DoG8gxJHGsOG7o2MgZ2hpIGzhuqFpIgorCisjOiBnaXQtc3Rhc2guc2g6MjI3Cittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIktow7RuZyB0aOG7gyBraOG7n2kgdOG6oW8gc3Rhc2giCisKKyM6IGdpdC1zdGFzaC5zaDoyMzUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbOG6oWkgdHLhuqFuZyB0aMOhaSBoaeG7h24gaMOgbmgiCisKKyM6IGdpdC1zdGFzaC5zaDoyNTMKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBn4buhIGLhu48gY8OhYyB0aGF5IMSR4buVaSBjw6J5LWzDoG0tdmnhu4djIgorCisjOiBnaXQtc3Rhc2guc2g6MzUyCittc2dpZCAiTm8gc3Rhc2ggZm91bmQuIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgc3Rhc2ggbsOgby4iCisKKyM6IGdpdC1zdGFzaC5zaDozNTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6ICRSRVYiCittc2dzdHIgIkNo4buJIHJhIHF1w6Egbmhp4buBdSDEkWnhu4NtIHjDqXQgbOG6oWk6ICRSRVYiCisKKyM6IGdpdC1zdGFzaC5zaDozNjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSBraMO0bmcgcGjhuqNpIGzDoCB0aGFtIGNoaeG6v3UgaOG7o3AgbOG7hyIKKworIzogZ2l0LXN0YXNoLnNoOjM5MworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyBraMO0bmcgcGjhuqNpIGzDoCBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpIGdp4buRbmctc3Rhc2giCisKKyM6IGdpdC1zdGFzaC5zaDo0MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJGFyZ3MnIGtow7RuZyBwaOG6o2kgdGhhbSBjaGnhur91IMSR4bq/biBzdGFzaCIKKworIzogZ2l0LXN0YXNoLnNoOjQxMgorbXNnaWQgInVuYWJsZSB0byByZWZyZXNoIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjhu4MgbMOgbSB0xrDGoWkgbeG7m2kgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBnaXQtc3Rhc2guc2g6NDE2Cittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJLaMO0bmcgdGjhu4Mgw6FwIGThu6VuZyBt4buZdCBzdGFzaCDhu58gZ2nhu69hIGPhu6dhIHF1w6EgdHLDrG5oIGjDsmEgdHLhu5luIgorCisjOiBnaXQtc3Rhc2guc2g6NDI0Cittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiWHVuZyDEkeG7mXQgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjLiBIw6N5IHRo4butIG3DoCBraMO0bmcgZMO5bmcgdMO5eSBjaOG7jW4gLS1pbmRleC4iCisKKyM6IGdpdC1zdGFzaC5zaDo0MjYKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGzhuqFpIGPDonkgY2jhu4kgbeG7pWMiCisKKyM6IGdpdC1zdGFzaC5zaDo0NjAKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGLhu48gdHLhuqFuZyB0aMOtYSBj4bunYSBjw6FjIHThuq1wIHRpbiDEkcOjIMSRxrDhu6NjIHPhu61hIGNo4buvYSIKKworIzogZ2l0LXN0YXNoLnNoOjQ3NQorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiQuG6o25nIG3hu6VjIGzhu6VjIMSRw6Mga2jDtG5nIMSRxrDhu6NjIGLhu48gc3Rhc2guIgorCisjOiBnaXQtc3Rhc2guc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICLEkMOjIGjhuqEgeHXhu5FuZyAke1JFVn0gKCRzKSIKKworIzogZ2l0LXN0YXNoLnNoOjQ5MworIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiBLaMO0bmcgdGjhu4MgeMOzYSBi4buPIG3hu6VjIHN0YXNoIgorCisjOiBnaXQtc3Rhc2guc2g6NTAwCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJDaMawYSBjaOG7iSByYSB0w6puIGPhu6dhIG5ow6FuaCIKKworIzogZ2l0LXN0YXNoLnNoOjU3MQorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiKMSQ4buDIHBo4bulYyBo4buTaSBs4bqhaSBjaMO6bmcgaMOjeSBnw7UgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyRyZW1vdGV1cmwnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdGjDoW8gYuG7jyBt4buZdCB0aMOgbmggcGjhuqduIHJhIGto4buPaSB1cmwgJyRyZW1vdGV1cmwnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjE2NworIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSDDoW5oIHjhuqEgKG1hcHBpbmcpIG3DtC3EkXVuLWNvbiB0cm9uZyAuZ2l0bW9kdWxlcyBjaG8gxJHGsOG7nW5nIGThuqtuICIKKyInJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBmYWlsZWQiCittc2dzdHIgIk5ow6JuIGLhuqNuICckdXJsJyB2w6BvIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24gJyRzbV9wYXRoJyBn4bq3cCBs4buXaSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkdpdGRpciAnJGEnIGlzIHBhcnQgb2YgdGhlIHN1Ym1vZHVsZSBwYXRoICckYicgb3IgdmljZSB2ZXJzYSIKK21zZ3N0ciAiIgorIkdpdGRpciAnJGEnIGzDoCBi4buZIHBo4bqtbiBj4bunYSDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uICckYicgaG/hurdjIFwidmljZSB2ZXJzYVwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxMgorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiIgorInJlcG8gVVJMOiAnJHJlcG8nIHBo4bqjaSBsw6AgxJHGsOG7nW5nIGThuqtuIHR1eeG7h3QgxJHhu5FpIGhv4bq3YyBsw6AgYuG6r3QgxJHhuqd1IGLhurFuZyAuL3wuLi8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzI5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiJyRzbV9wYXRoJyB0aOG7sWMgc+G7sSDEkcOjIHThu5NuIHThuqFpIOG7nyBi4bqjbmcgbeG7pWMgbOG7pWMgcuG7k2kiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzMzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIGl0LiIKK21zZ3N0ciAiIgorIkPDoWMgxJHGsOG7nW5nIGThuqtuIHRoZW8gc2F1IMSRw6J5IHPhur0gYuG7iyBs4budIMSRaSBi4bufaSBt4buZdCB0cm9uZyBjw6FjIHThuq1wIHRpbiAuZ2l0aWdub3JlICIKKyJj4bunYSBi4bqhbjpcbiIKKyIkc21fcGF0aFxuIgorIlPhu60gZOG7pW5nIC1mIG7hur91IGLhuqFuIHRo4buxYyBz4buxIG114buRbiB0aMOqbSBuw7MgdsOgby4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAixJBhbmcgdGjDqm0gcmVwbyBjw7Mgc+G6tW4gdOG6oWkgJyRzbV9wYXRoJyB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICInJHNtX3BhdGgnIMSRw6MgdOG7k24gdOG6oWkgdOG7qyB0csaw4bubYyB2w6Aga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQga2hvIGdpdCBo4bujcCBs4buHIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM2MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2hlY2tvdXQgbcO0LcSRdW4gY29uICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzY1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdGjDqm0gbcO0LcSRdW4gY29uICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkcSDbmcga8O9IHbhu5tpIGjhu4cgdGjhu5FuZyBtw7QtxJF1biBjb24gJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICckcHJlZml4JHNtX3BhdGgnIgorbXNnc3RyICLEkGFuZyBuaOG6rXAgJyRwcmVmaXgkc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDI3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGluZyBhdCAnJHNtX3BhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKK21zZ3N0ciAiROG7q25nIGzhuqFpIHThuqFpICckc21fcGF0aCc7IHNjcmlwdCB0cuG6oyB24buBIHRy4bqhbmcgdGjDoWkga2jDoWMga2jDtG5nLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSB1cmwgY2hvIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24gJyRzbV9wYXRoJyB0cm9uZyAuZ2l0bW9kdWxlcyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0ODAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkcSDbmcga8O9IHVybCBjaG8gxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiTcO0LcSRdW4tY29uICckbmFtZScgKCR1cmwpIMSRxrDhu6NjIMSRxINuZyBrw70gY2hvIMSRxrDhu51uZyBk4bqrbiAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisiR+G6t3AgbOG7l2kga2hpIMSRxINuZyBrw70gY2jhur8gxJHhu5kgY+G6rXAgbmjhuq10IGNobyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBub3QgaW5pdGlhbGl6ZWRcbiIKKyJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiIgorIsSQxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24gJyRzbV9wYXRoJyBjaMawYSDEkcaw4bujYyBraOG7n2kgdOG6oW9cbiIKKyJDw7MgbOG6vSBi4bqhbiBtdeG7kW4gc+G7rSBk4bulbmcgbOG7h25oICd1cGRhdGUgLS1pbml0Jz8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjAzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKyJLaMO0bmcgdMOsbSB0aOG6pXkgxJFp4buDbSB4w6l0IGzhuqFpIGhp4buHbiBow6BuaCB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV5IHbhu4EgKGZldGNoKSB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHJlYmFzZSAnJHNoYTEnIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24gJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICLEkMaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uICckc21fcGF0aCc6IMSRxrDhu6NjIHJlYmFzZSB2w6BvIHRyb25nICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGjDsmEgdHLhu5luIChtZXJnZSkgJyRzaGExJyB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAixJDGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiAnJHNtX3BhdGgnOiDEkcaw4bujYyBow7JhIHRy4buZbiB2w6BvICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2hlY2tvdXQgJyRzaGExJyB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICLEkMaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uICckc21fcGF0aCc6IMSRxrDhu6NjIGNoZWNrb3V0ICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjcxIGdpdC1zdWJtb2R1bGUuc2g6OTk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7hyBxdXkgdsOgbyB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Nzc5Cittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gLS1jYWNoZWQga2jDtG5nIHRo4buDIGTDuW5nIGPDuW5nIHbhu5tpIHTDuXkgY2jhu41uIC0tZmlsZXMiCisKKyMuIHVuZXhwZWN0ZWQgdHlwZQorIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAiY2jhur8gxJHhu5kga2jDtG5nIG5oxrAgbW9uZyBjaOG7nSAkbW9kX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAgQ+G6o25oIGLDoW86ICRuYW1lIGtow7RuZyBjaOG7qWEgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KSAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIEPhuqNuaCBiw6FvOiAkbmFtZSBraMO0bmcgY2jhu6lhIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCkgJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg0MworIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiIgorIiAgQ+G6o25oIGLDoW86ICRuYW1lIGtow7RuZyBjaOG7qWEgbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIChjb21taXQpICRzaGExX3NyYyB2w6AgIgorIiRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NjgKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwNgorbXNnaWQgIiMgU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgIiMgTmjhu69uZyBtw7QtxJF1bi1jb24gxJHDoyBi4buLIHRoYXkgxJHhu5VpIG5oxrBuZyBjaMawYSDEkcaw4bujYyBj4bqtcCBuaOG6rXQ6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwOAorbXNnaWQgIiMgU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiIyBOaOG7r25nIHRoYXkgxJHhu5VpIG3DtC3EkXVuLWNvbiDEkcaw4bujYyBjaHV54buDbiBnaWFvIChjb21taXQpOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMDU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICckbmFtZSciCittc2dzdHIgIsSQYW5nIMSR4buTbmcgYuG7mSBow7NhIHVybCBtw7QtxJF1bi1jb24gY2hvICckbmFtZSciCisKKyN+IG1zZ2lkICIgMCBmaWxlcyBjaGFuZ2VkIgorI34gbXNnc3RyICIgMCBjw7MgdOG6rXAgdGluIG7DoG8gdGhheSDEkeG7lWkgY+G6oyIKKworI34gbXNnaWQgIiAlZCBmaWxlIGNoYW5nZWQiCisjfiBtc2dpZF9wbHVyYWwgIiAlZCBmaWxlcyBjaGFuZ2VkIgorI34gbXNnc3RyWzBdICIgJWQgdOG6rXAgdGluIHRoYXkgxJHhu5VpIgorI34gbXNnc3RyWzFdICIgJWQgdOG6rXAgdGluIHRoYXkgxJHhu5VpIgorCisjfiBtc2dpZCAiLCAlZCBpbnNlcnRpb24oKykiCisjfiBtc2dpZF9wbHVyYWwgIiwgJWQgaW5zZXJ0aW9ucygrKSIKKyN+IG1zZ3N0clswXSAiLCAlZCB0aMOqbSgrKSIKKyN+IG1zZ3N0clsxXSAiLCAlZCB0aMOqbSgrKSIKKworI34gbXNnaWQgIiwgJWQgZGVsZXRpb24oLSkiCisjfiBtc2dpZF9wbHVyYWwgIiwgJWQgZGVsZXRpb25zKC0pIgorI34gbXNnc3RyWzBdICIsICVkIHjDs2EoLSkiCisjfiBtc2dzdHJbMV0gIiwgJWQgeMOzYSgtKSIKKworI34gbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKKyN+IG1zZ3N0ciAiVOG7sSDEkeG7mW5nIMSRw7NuZyBnw7NpIGtobyBjaOG7qWEgxJHhu4MgdOG7kWkgxrB1IGjDs2EgaGnhu4d1IHN14bqldCBsw6BtIHZp4buHYy5cbiIKKworI34gbXNnaWQgIiAodXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKSIKKyN+IG1zZ3N0ciAiIChkw7luZyBcImdpdCBhZGRcIiDEkeG7gyB0aGVvIGTDtWkgZOG6pXUgduG6v3QpIgorCisjfiBtc2dpZCAiLUIgY2Fubm90IGJlIHVzZWQgd2l0aCAtYiIKKyN+IG1zZ3N0ciAidMO5eSBjaOG7jW4gLUIga2jDtG5nIHRo4buDIGTDuW5nIC1iIgorCisjfiBtc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgb3B0aW9ucyIKKyN+IG1zZ3N0ciAiLS1wYXRjaCB4dW5nIGto4bqvYyB24bubaSB04bqldCBj4bqjIGPDoWMgdMO5eSBjaOG7jW4ga2jDoWMiCisKKyN+IG1zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC1iLy1CLy0tb3JwaGFuIgorI34gbXNnc3RyICItLWRldGFjaCBraMO0bmcgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgduG7m2kgdMO5eSBjaOG7jW4gLWIvLUIvLS1vcnBoYW4iCisKKyN+IG1zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorI34gbXNnc3RyICItLWRldGFjaCBraMO0bmcgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgduG7m2kgdMO5eSBjaOG7jW4gLXQiCisKKyN+IG1zZ2lkICItLW9ycGhhbiBhbmQgLWJ8LUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKyN+IG1zZ3N0ciAiVMO5eSBjaOG7jW4gLS1vcnBoYW4gdsOgIC1ifC1CIGxv4bqhaSB04burIGzhuqtuIG5oYXUiCisKKyN+IG1zZ2lkICItLW9ycGhhbiBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorI34gbXNnc3RyICItLW9ycGhhbiBraMO0bmcgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgduG7m2kgdMO5eSBjaOG7jW4gLXQiCisKKyN+IG1zZ2lkICJnaXQgY2hlY2tvdXQ6IC1mIGFuZCAtbSBhcmUgaW5jb21wYXRpYmxlIgorI34gbXNnc3RyICJnaXQgY2hlY2tvdXQ6IGhhaSB0w7l5IGNo4buNbiAtZiB2w6AgLW0geHVuZyBraOG6r2MgbmhhdSIKKworI34gbXNnaWQgIiIKKyN+ICJnaXQgY2hlY2tvdXQ6IHVwZGF0aW5nIHBhdGhzIGlzIGluY29tcGF0aWJsZSB3aXRoIHN3aXRjaGluZyBicmFuY2hlcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJnaXQgY2hlY2tvdXQ6IHZp4buHYyBj4bqtcCBuaOG6rXQgY8OhYyDEkcaw4budbmcgZOG6q24gbMOgIHh1bmcga2jhuq9jIHbhu5tpIHZp4buHYyBjaHV54buDbiAiCisjfiAixJHhu5VpIGPDoWMgbmjDoW5oLiIKKworI34gbXNnaWQgImRpZmYgc2V0dXAgZmFpbGVkIgorI34gbXNnc3RyICJjw6BpIMSR4bq3dCBkaWZmIGfhurdwIGzhu5dpIgorCisjfiBtc2dpZCAibWVyZ2UtcmVjdXJzaXZlOiBkaXNrIGZ1bGw/IgorI34gbXNnc3RyICJtZXJnZS1yZWN1cnNpdmU6IMSRxKlhIGLhu4sgxJHhuqd5PyIKKworI34gbXNnaWQgImRpZmZfc2V0dXBfZG9uZSBmYWlsZWQiCisjfiBtc2dzdHIgImRpZmZfc2V0dXBfZG9uZSBn4bq3cCBs4buXaSIKKworI34gbXNnaWQgIi1kIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgRG8gbm90IHVzZS4iCisjfiBtc2dzdHIgIlTDuXkgY2jhu41uIC1kIGtow7RuZyBjw7JuIMSRxrDhu6NjIGjhu5cgdHLhu6MgbuG7r2EuIFhpbiDEkeG7q25nIHPhu60gZOG7pW5nLiIKKworI34gbXNnaWQgIiVzOiBoYXMgYmVlbiBkZWxldGVkL3JlbmFtZWQiCisjfiBtc2dzdHIgIiVzOiDEkcOjIMSRxrDhu6NjIHjDs2EvdGhheS10w6puIgorCisjfiBtc2dpZCAiJyVzJzogbm90IGEgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuIgorI34gbXNnc3RyICInJXMnOiBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCB0aMawIG3hu6VjIHTDoGkgbGnhu4d1LiIKKworI34gbXNnaWQgIi0tIgorI34gbXNnc3RyICItLSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBleHRyYWN0IGVtYWlsIGZyb20gY29tbWl0dGVyIGlkZW50aXR5LiIKKyN+IG1zZ3N0ciAiIgorI34gIktow7RuZyB0aOG7gyByw7p0IHRyw61jaCDEkeG7i2EgY2jhu4kgdGjGsCDEkWnhu4duIHThu60gdOG7qyDEkeG7i25oIGRhbmggbmfGsOG7nWkgY2h1eeG7g24gZ2lhbyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzXG4iCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjb21taXQgKGzhuqduIGNodXnhu4NuIGdpYW8pICVzXG4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiY2hlcnJ5LXBpY2siCisjfiBtc2dzdHIgIjwgQ2jhu41uIEQtTW9kIgpkaWZmIC0tZ2l0IGEvcG8vemhfQ04ucG8gYi9wby96aF9DTi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQxNThmCi0tLSAvZGV2L251bGwKKysrIGIvcG8vemhfQ04ucG8KQEAgLTAsMCArMSw5NTIwIEBACisjIENoaW5lc2UgdHJhbnNsYXRpb25zIGZvciBHaXQgcGFja2FnZQorIyBHaXQg6L2v5Lu25YyF55qE566A5L2T5Lit5paH57+76K+RLgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldCBBVCBnbWFpbC5jb20+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgQ29udHJpYnV0ZXJzOgorIyAgIC0gSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldCBBVCBnbWFpbC5jb20+CisjICAgLSBSaWt1IDxsdS5yaWt1IEFUIGdtYWlsLmNvbT4KKyMgICAtIFpodWFuZyBZYSA8emh1YW5neWEgQVQgbWUuY29tPgorIyAgIC0gTGlhbiBDaGVuZyA8cmh5dGhtLm1haWwgQVQgZ21haWwuY29tPgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTItMDktMTUgMTA6MjErMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMDktMDcgMTc6NTYrMDgwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldEBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2l0SHViIDxodHRwczovL2dpdGh1Yi5jb20vZ290Z2l0L2dpdC8+XG4iCisiTGFuZ3VhZ2U6IHpoX0NOXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGFkdmljZS5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAi5o+Q56S677yaJS4qc1xuIgorCisjLgorIy4gKiBNZXNzYWdlIHVzZWQgYm90aCB3aGVuICdnaXQgY29tbWl0JyBmYWlscyBhbmQgd2hlbgorIy4gKiBvdGhlciBjb21tYW5kcyBkb2luZyBhIG1lcmdlIGRvLgorIy4KKyM6IGFkdmljZS5jOjcwCittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsXG4iCisiYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPicgYXNcbiIKKyJhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQsXG4iCisib3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCittc2dzdHIgIiIKKyLor7flhYjlnKjlt6XkvZzljLrmlLnmraPmlofku7bvvIznhLblkI7phYzmg4Xkvb/nlKhcbiIKKyInZ2l0IGFkZC9ybSA8ZmlsZT4nIOagh+iusOino+WGs+aWueahiO+8jFxuIgorIuaIluS9v+eUqCAnZ2l0IGNvbW1pdCAtYSfjgIIiCisKKyM6IGFyY2hpdmUuYzoxMAorIywgZnV6enkKK21zZ2lkICJnaXQgYXJjaGl2ZSBbb3B0aW9uc10gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFwcGx5IFvpgInpobldIFs86KGl5LiBPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxMQorIywgZnV6enkKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZl77yaTkFDSyAlcyIKKworIzogYXJjaGl2ZS5jOjEyCittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbb3B0aW9uc10gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6MTMKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozMjIKK21zZ2lkICJmbXQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjMyMgorbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozMjMgYnVpbHRpbi9sb2cuYzoxMDc5Cittc2dpZCAicHJlZml4IgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozMjQKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozMjUgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9ibGFtZS5jOjIzMzIKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzMzIGJ1aWx0aW4vY29uZmlnLmM6NTYgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0NCBidWlsdGluL2dyZXAuYzo4MDAgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjc3CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDk0IGJ1aWx0aW4vbHMtZmlsZXMuYzo0OTcgYnVpbHRpbi9ub3Rlcy5jOjUzNworIzogYnVpbHRpbi9ub3Rlcy5jOjY5NCBidWlsdGluL3JlYWQtdHJlZS5jOjEwNyBwYXJzZS1vcHRpb25zLmg6MTQ5Cittc2dpZCAiZmlsZSIKK21zZ3N0ciAi5paH5Lu2IgorCisjOiBhcmNoaXZlLmM6MzI2IGJ1aWx0aW4vYXJjaGl2ZS5jOjkyCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozMjgKKyMsIGZ1enp5Cittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXPvvJrlt7Lnu4/lrZjlnKjkuo7lt6XkvZzljLrkuK0iCisKKyM6IGFyY2hpdmUuYzozMjkKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozMzAKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozMzEKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjMzOQorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6MzQyCittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzozNDQgYnVpbHRpbi9hcmNoaXZlLmM6OTMgYnVpbHRpbi9jbG9uZS5jOjg1Cittc2dpZCAicmVwbyIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6MzQ1IGJ1aWx0aW4vYXJjaGl2ZS5jOjk0Cittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjM0NiBidWlsdGluL2FyY2hpdmUuYzo5NSBidWlsdGluL25vdGVzLmM6NjE2CisjLCBmdXp6eQorbXNnaWQgImNvbW1hbmQiCittc2dzdHIgIui/kOihjCAkY29tbWFuZCIKKworIzogYXJjaGl2ZS5jOjM0NyBidWlsdGluL2FyY2hpdmUuYzo5NgorbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICInJXMnIOS4jeWDj+aYr+S4gOS4qiB2MiDniYjmnKznmoTljIXmlofku7YiCisKKyM6IGJ1bmRsZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qE5YyF5aS077yaJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo4OSBidWlsdGluL2NvbW1pdC5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIgorbXNnc3RyICLkuI3og73miZPlvIAgJyVzJyIKKworIzogYnVuZGxlLmM6MTQwCittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCittc2dzdHIgIueJiOacrOW6k+e8uuWwkei/meS6m+W/heWkh+eahOaPkOS6pO+8miIKKworIzogYnVuZGxlLmM6MTY0IHNlcXVlbmNlci5jOjU1NyBzZXF1ZW5jZXIuYzo5ODkgYnVpbHRpbi9sb2cuYzoyOTAKKyM6IGJ1aWx0aW4vbG9nLmM6NzI3IGJ1aWx0aW4vbG9nLmM6MTMxMyBidWlsdGluL2xvZy5jOjE1MjkgYnVpbHRpbi9tZXJnZS5jOjM0NworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE4MQorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICLniYjmnKzpgY3ljoborr7nva7lpLHotKUiCisKKyM6IGJ1bmRsZS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyAlZCByZWZzIgorbXNnc3RyWzBdICLov5nkuKrljIXkuK3lkKvmnIkgJWQg5Liq5byV55SoIgorbXNnc3RyWzFdICLov5nkuKrljIXkuK3lkKvmnIkgJWQg5Liq5byV55SoIgorCisjOiBidW5kbGUuYzoxOTIKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAi6L+Z5Liq5YyF6K6w5b2V5LiA5Liq5a6M5pW05Y6G5Y+y44CCIgorCisjOiBidW5kbGUuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzIgorbXNnc3RyWzBdICLov5nkuKrljIXpnIDopoHov5nkuKrlvJXnlKgiCittc2dzdHJbMV0gIui/meS4quWMhemcgOimgSAlZCDkuKrov5nkupvlvJXnlKgiCisKKyM6IGJ1bmRsZS5jOjI5NAorbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgInJldi1saXN0IOe7iOatoiIKKworIzogYnVuZGxlLmM6MzAwIGJ1aWx0aW4vbG9nLmM6MTIwOSBidWlsdGluL3Nob3J0bG9nLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveivhuWIq+eahOWPguaVsO+8miVzIgorCisjOiBidW5kbGUuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgIuW8leeUqCAnJXMnIOiiqyByZXYtbGlzdCDpgInpobnmjpLpmaQiCisKKyM6IGJ1bmRsZS5jOjM4MAorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICLkuI3og73liJvlu7rnqbrljIXjgIIiCisKKyM6IGJ1bmRsZS5jOjM5OAorbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIuS4jeiDveeUn+aIkCBwYWNrLW9iamVjdHMg6L+b56iLIgorCisjOiBidW5kbGUuYzo0MTYKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAicGFjay1vYmplY3RzIOe7iOatoiIKKworIzogYnVuZGxlLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Yib5bu6ICclcyciCisKKyM6IGJ1bmRsZS5jOjQ0MQorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiaW5kZXgtcGFjayDnu4jmraIiCisKKyM6IGNvbW1pdC5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6QICVzIgorCisjOiBjb21taXQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyDkuI3mmK/kuIDkuKrmj5DkuqQhIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIuWGheWtmOiAl+WwvSIKKworIzogY29ubmVjdGVkLmM6MzkKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICLkuI3og73miafooYwgJ2dpdCByZXYtbGlzdCciCisKKyM6IGNvbm5lY3RlZC5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiCittc2dzdHIgIuaXoOazleWGmeWFpSByZXYtbGlzdO+8miVzIgorCisjOiBjb25uZWN0ZWQuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbjogJXMiCittc2dzdHIgIuaXoOazleWFs+mXrSByZXYtbGlzdCDnmoTmoIflh4bovpPlhaXvvJolcyIKKworIzogZGF0ZS5jOjk1Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAi5Zyo5bCG5p2lIgorCisjOiBkYXRlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gIiVsdSDnp5Lpkp/kuYvliY0iCittc2dzdHJbMV0gIiVsdSDnp5Lpkp/kuYvliY0iCisKKyM6IGRhdGUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiJWx1IOWIhumSn+S5i+WJjSIKK21zZ3N0clsxXSAiJWx1IOWIhumSn+S5i+WJjSIKKworIzogZGF0ZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gIiVsdSDlsI/ml7bkuYvliY0iCittc2dzdHJbMV0gIiVsdSDlsI/ml7bkuYvliY0iCisKKyM6IGRhdGUuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBkYXlzIGFnbyIKK21zZ3N0clswXSAiJWx1IOWkqeS5i+WJjSIKK21zZ3N0clsxXSAiJWx1IOWkqeS5i+WJjSIKKworIzogZGF0ZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiVsdSDlkajkuYvliY0iCittc2dzdHJbMV0gIiVsdSDlkajkuYvliY0iCisKKyM6IGRhdGUuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVsdSDkuKrmnIjkuYvliY0iCittc2dzdHJbMV0gIiVsdSDkuKrmnIjkuYvliY0iCisKKyM6IGRhdGUuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIiCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyIKK21zZ3N0clswXSAiJWx1IOW5tCIKK21zZ3N0clsxXSAiJWx1IOW5tCIKKworIzogZGF0ZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlc++8jCVsdSDkuKrmnIjkuYvliY0iCittc2dzdHJbMV0gIiVz77yMJWx1IOS4quaciOS5i+WJjSIKKworIzogZGF0ZS5jOjE1NCBkYXRlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIGFnbyIKK21zZ3N0clswXSAiJWx1IOW5tOWJjSIKK21zZ3N0clsxXSAiJWx1IOW5tOWJjSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBkaWZmLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclLipzJ1xuIgorbXNnc3RyICIgIOaXoOazleino+aekCBkaXJzdGF0IOmYiOWAvCAnJS4qcydcbiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBkaWZmLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJS4qcydcbiIKK21zZ3N0ciAiICDmnKrnn6UgZGlyc3RhdCDlj4LmlbAgJyUuKnMnXG4iCisKKyM6IGRpZmYuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLlj5HnjrDphY3nva7lj5jph48gJ2RpZmYuZGlyc3RhdCcg5Lit55qE6ZSZ6K+v77yaXG4iCisiJXMiCisKKyM6IGRpZmYuYzoxNDAxCittc2dpZCAiIDAgZmlsZXMgY2hhbmdlZCIKK21zZ3N0ciAiIDAg5Liq5paH5Lu26KKr5L+u5pS5IgorCisjOiBkaWZmLmM6MTQwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgJWQgZmlsZSBjaGFuZ2VkIgorbXNnaWRfcGx1cmFsICIgJWQgZmlsZXMgY2hhbmdlZCIKK21zZ3N0clswXSAiICVkIOS4quaWh+S7tuiiq+S/ruaUuSIKK21zZ3N0clsxXSAiICVkIOS4quaWh+S7tuiiq+S/ruaUuSIKKworIzogZGlmZi5jOjE0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAlZCBpbnNlcnRpb24oKykiCittc2dpZF9wbHVyYWwgIiwgJWQgaW5zZXJ0aW9ucygrKSIKK21zZ3N0clswXSAi77yM5o+S5YWlICVkIOihjCgrKSIKK21zZ3N0clsxXSAi77yM5o+S5YWlICVkIOihjCgrKSIKKworIzogZGlmZi5jOjE0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAlZCBkZWxldGlvbigtKSIKK21zZ2lkX3BsdXJhbCAiLCAlZCBkZWxldGlvbnMoLSkiCittc2dzdHJbMF0gIu+8jOWIoOmZpCAlZCDooYwoLSkiCittc2dzdHJbMV0gIu+8jOWIoOmZpCAlZCDooYwoLSkiCisKKyM6IGRpZmYuYzozNDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgIiIKKyLml6Dms5Xop6PmnpAgLS1kaXJzdGF0Ly1YIOmAiemhueeahOWPguaVsO+8mlxuIgorIiVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6NTkKK21zZ2lkICJjb3VsZCBub3QgcnVuIGdwZy4iCittc2dzdHIgIuS4jeiDveaJp+ihjCBncGfjgIIiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo3MQorbXNnaWQgImdwZyBkaWQgbm90IGFjY2VwdCB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIOayoeacieaOpeWPl+aVsOaNriIKKworIzogZ3BnLWludGVyZmFjZS5jOjgyCittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcg5peg5rOV5Li65pWw5o2u562+5ZCNIgorCisjOiBncmVwLmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJ++8muaXoOazleivu+WPliAlcyIKKworIzogZ3JlcC5jOjEzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIiclcyfvvJolcyIKKworIzogZ3JlcC5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCAlcyIKK21zZ3N0ciAiJyVzJ++8muivu+WPluS4jeWujOaVtCAlcyIKKworIzogaGVscC5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgIuWcqCAnJXMnIOS4i+WPr+eUqOeahCBnaXQg5ZG95LukIgorCisjOiBoZWxwLmM6MjE5Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICLlnKggJFBBVEgg6Lev5b6E5Lit55qE5YW25LuW5Zyw5pa55Y+v55So55qEIGdpdCDlkb3ku6QiCisKKyM6IGhlbHAuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisiJyVzJyDlg4/mmK/kuIDkuKogZ2l0IOWRveS7pO+8jOS9huWNtOaXoOazlei/kOihjOOAglxuIgorIuWPr+iDveaYryBnaXQtJXMg5Y+X5o2f77yfIgorCisjOiBoZWxwLmM6MzMyCittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIuWUieWRgO+8jOaCqOeahOezu+e7n+S4reacquWPkeeOsCBHaXQg5ZG95Luk44CCIgorCisjOiBoZWxwLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuXG4iCisiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnIgorbXNnc3RyICIiCisi6K2m5ZGK77ya5oKo6L+Q6KGM5LiA5Liq5LiN5a2Y5Zyo55qEIEdpdCDlkb3ku6QgJyVzJ+OAgue7p+e7reaJp+ihjOWBh+WumuaCqOimgeimgei/kOihjOeahFxuIgorIuaYryAnJXMnIgorCisjOiBoZWxwLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImluICUwLjFmIHNlY29uZHMgYXV0b21hdGljYWxseS4uLiIKK21zZ3N0ciAi5ZyoICUwLjFmIOenkumSn+WQjuiHquWKqOi/kOihjC4uLiIKKworIzogaGVscC5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXTvvJonJXMnIOS4jeaYr+S4gOS4qiBnaXQg5ZG95Luk44CC5Y+C6KeBICdnaXQgLS1oZWxwJ+OAgiIKKworIzogaGVscC5jOjM3MAorbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorIuaCqOaMh+eahOaYr+i/meS4quS5iO+8nyIKK21zZ3N0clsxXSAiIgorIlxuIgorIuaCqOaMh+eahOaYr+i/meWFtuS4reeahOafkOS4gOS4quS5iO+8nyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICLvvIjlnY/mj5DkuqTvvIlcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZm9fY2FjaGUgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIuS4uui3r+W+hCAnJXMnIGFkZGluZm9fY2FjaGUg5aSx6LSlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNjgKK21zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAi5peg5rOV5Yib5bu65qCRIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAi5peg5rOV5Yib5bu66Lev5b6EICclcyclcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgIuWIoOmZpCAlcyDku6Xkvr/kuLrlrZDnm67lvZXnlZnlh7rnqbrpl7RcbiIKKworIy4gc29tZXRoaW5nIGVsc2UgZXhpc3RzCisjLiAuLiBidXQgbm90IHNvbWUgb3RoZXIgZXJyb3IgKHdobyByZWFsbHkgY2FyZXMgd2hhdD8pCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo2OTcgbWVyZ2UtcmVjdXJzaXZlLmM6NzE4Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAi77ya5Y+v6IO95piv5LiA5Liq55uu5b2VL+aWh+S7tuWGsueqge+8nyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAi5ouS57ud5Lii5byDICclcycg5Lit55qE5pyq6Lef6Liq5paH5Lu2IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgIuS4jeiDveivu+WPluWvueixoSAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiJXMgJyVzJyDlupTkuLrkuozov5vliLblr7nosaHvvIhibG9i77yJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NzMgYnVpbHRpbi9jbG9uZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICLml6Dms5XmiZPlvIAgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyciCittc2dzdHIgIuaXoOazleWIm+W7uuespuWPt+mTvuaOpSAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAi5LiN55+l6YGT5aaC5L2V5aSE55CGICUwNm8gJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTIyCittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIuaXoOazleaJp+ihjOWGhemDqOWQiOW5tiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgIuS4jeiDvea3u+WKoCAlcyDoh7Plr7nosaHlupMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0MgorbXNnaWQgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlIGluIHRoZSB0cmVlIgorbXNnc3RyICLlnKjmoJHkuK3mnInkuI3mlK/mjIHnmoTlr7nosaHnsbvlnosiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMjEgbWVyZ2UtcmVjdXJzaXZlLmM6MTAzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisi5Yay56qB77yIJTEkcy/liKDpmaTvvInvvJolMiRzIOWcqCAlMyRzIOS4reiiq+WIoOmZpO+8jOWcqCAlNSRzIOS4reiiqyAlNCRz44CCJTckcyDlnKggJTYkcyDkuK0iCisi55qE54mI5pys6KKr5L+d55WZ44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDI3IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIuWGsueqge+8iCUxJHMv5Yig6Zmk77yJ77yaJTIkcyDlnKggJTMkcyDkuK3ooqvliKDpmaTvvIzlnKggJTUkcyDkuK3ooqsgJTQkc+OAgiU3JHMg5ZyoICU2JHMg5LitIgorIueahOeJiOacrOS/neeVmeS6jiAlOCRzIOS4reOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA4MQorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAi6YeN5ZG95ZCNIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDgxCittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAi6YeN5ZG95ZCNIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyDmmK8gJXMg5Lit55qE5LiA5Liq55uu5b2V6ICM5LulICVzIOS4uuWQjeiiq+a3u+WKoCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisi5Yay56qB77yI6YeN5ZG95ZCNL+mHjeWRveWQje+8ie+8muWcqOWIhuaUryBcIiUzJHNcIiDkuK3ph43lkb3lkI0gXCIlMSRzXCItPlwiJTIkc1wi77yM5Zyo5YiG5pSvICIKKyJcIiU2JHNcIiDkuK3ph43lkb3lkI0gXCIlNCRzXCItPlwiJTUkc1wiJTckcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE2NAorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAi77yI55WZ5LiL5pyq6Kej5Yaz77yJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIuWGsueqge+8iOmHjeWRveWQjS/ph43lkb3lkI3vvInvvJrlnKggJTMkcyDkuK3ph43lkb3lkI0gJTEkcy0+JTIkc++8jOWcqCAlNiRzIOS4remHjeWRveWQjSAlNCRzLT4iCisiJTUkcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIKK21zZ3N0ciAi6ICM5piv6YeN5ZG95ZCNICVzIOiHsyAlcyDku6Xlj4ogJXMg6IezICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gJXMgYWRkZWQgaW4gJXMiCittc2dzdHIgIuWGsueqge+8iOmHjeWRveWQjS/mt7vliqDvvInvvJrlnKggJTMkcyDkuK3ph43lkb3lkI0gJTEkcy0+JTIkc+OAguWcqCAlNSRzIOS4rea3u+WKoCAlNCRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBtZXJnZWQgJXMiCittc2dzdHIgIua3u+WKoOWQiOW5tuWQjueahCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ2MiBtZXJnZS1yZWN1cnNpdmUuYzoxNjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICLogIzmmK/ku6UgJXMg5Li65ZCN5re75YqgIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5a+56LGhICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICLlr7nosaEgJXMg5LiN5piv5LiA5Liq5LqM6L+b5Yi25a+56LGh77yIYmxvYu+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU2NAorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAi5L+u5pS5IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTY0Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgIuS/ruaUuSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgIuWGheWuuSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU4MQorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgIua3u+WKoC/mt7vliqAiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICLnlaXov4cgJXPvvIjlt7Lnu4/lgZrov4fnm7jlkIzlkIjlubbvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICLoh6rliqjlkIjlubYgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MzMgZ2l0LXN1Ym1vZHVsZS5zaDo4NjkKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgIuWtkOaooee7hCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAi5Yay56qB77yIJXPvvInvvJrlkIjlubblhrLnqoHkuo4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIuWIoOmZpCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc0OQorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICLmlofku7Yv55uu5b2VIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzU1Cittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgIuebruW9lS/mlofku7YiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIuWGsueqge+8iCUxJHPvvInvvJrlnKggJTMkcyDkuK3mnInkuIDkuKrlkI3kuLogJTIkcyDnmoTnm67lvZXjgILku6UgJTUkcyDkuLrlkI3mt7vliqAgJTQkcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc3MAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIua3u+WKoCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc4NworbXNnaWQgIkZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIgorbXNnc3RyICLkuKXph43nmoTlkIjlubbplJnor6/vvIzkuI3lupTlj5HnlJ/jgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MDYKK21zZ2lkICJBbHJlYWR5IHVwLXRvLWRhdGUhIgorbXNnc3RyICLlt7Lnu4/mmK/mnIDmlrDnmoTvvIEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICLml6Dms5XlkIjlubbmoJEgJXMg5ZKMICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVucHJvY2Vzc2VkIHBhdGg/Pz8gJXMiCittc2dzdHIgIuacquWkhOeQhueahOi3r+W+hD8/PyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg5MAorbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICLlkIjlubbvvJoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gIuWPkeeOsCAldSDkuKrlhbHlkIznpZblhYjvvJoiCittc2dzdHJbMV0gIuWPkeeOsCAldSDkuKrlhbHlkIznpZblhYjvvJoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5NDAKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgIuWQiOW5tuacqui/lOWbnuaPkOS6pCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTk5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIuS4jeiDveino+aekOWvueixoSAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDA5IGJ1aWx0aW4vbWVyZ2UuYzo2OTYKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICLkuI3og73lhpnlhaXntKLlvJXjgIIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo0OTQKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgIueUqOazle+8miVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisjLiBvbmUgaW4gInVzYWdlOiAlcyIgdHJhbnNsYXRpb24KKyM6IHBhcnNlLW9wdGlvbnMuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgIOaIlu+8miVzIgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IHBhcnNlLW9wdGlvbnMuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHJlbW90ZS5jOjE2MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAi5oKo55qE5YiG5pSv6aKG5YWIICclcycg5YWxICVkIOS4quaPkOS6pOOAglxuIgorbXNnc3RyWzFdICLmgqjnmoTliIbmlK/pooblhYggJyVzJyDlhbEgJWQg5Liq5o+Q5Lqk44CCXG4iCisKKyM6IHJlbW90ZS5jOjE2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAi5oKo55qE5YiG5pSv6JC95ZCOICclcycg5YWxICVkIOS4quaPkOS6pO+8jOW5tuS4lOWPr+S7peW/q+i/m+OAglxuIgorbXNnc3RyWzFdICLmgqjnmoTliIbmlK/okL3lkI4gJyVzJyDlhbEgJWQg5Liq5o+Q5Lqk77yM5bm25LiU5Y+v5Lul5b+r6L+b44CCXG4iCisKKyM6IHJlbW90ZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisi5oKo55qE5YiG5pSv5ZKMICclcycg5Ye6546w5LqG5YGP56a777yMXG4iCisi5bm25LiU5YiG5Yir5pyJICVkIOWSjCAlZCDlpITkuI3lkIznmoTmj5DkuqTjgIJcbiIKK21zZ3N0clsxXSAiIgorIuaCqOeahOWIhuaUr+WSjCAnJXMnIOWHuueOsOS6huWBj+emu++8jFxuIgorIuW5tuS4lOWIhuWIq+aciSAlZCDlkowgJWQg5aSE5LiN5ZCM55qE5o+Q5Lqk44CCXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMSBidWlsdGluL21lcmdlLmM6ODY0IGJ1aWx0aW4vbWVyZ2UuYzo5NzcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDg3IGJ1aWx0aW4vbWVyZ2UuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIuS4jeiDveS4uuWGmeWFpeaJk+W8gCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxMjMgYnVpbHRpbi9tZXJnZS5jOjMzMyBidWlsdGluL21lcmdlLmM6ODY3CisjOiBidWlsdGluL21lcmdlLmM6MTA4OSBidWlsdGluL21lcmdlLmM6MTEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95YaZ5YWlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjE0NAorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisi5Yay56qB6Kej5Yaz5a6M5q+V5ZCO77yM55SoICdnaXQgYWRkIDxwYXRocz4nIOaIliAnZ2l0IHJtIDxwYXRocz4nXG4iCisi5ZG95Luk5qCH6K6w5L+u5q2j5ZCO55qE5paH5Lu2IgorCisjOiBzZXF1ZW5jZXIuYzoxNDcKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorIuWGsueqgeino+WGs+WujOavleWQju+8jOeUqCAnZ2l0IGFkZCA8cGF0aHM+JyDmiJYgJ2dpdCBybSA8cGF0aHM+J1xuIgorIuWvueS/ruato+WQjueahOaWh+S7tuWBmuagh+iusO+8jOeEtuWQjueUqCAnZ2l0IGNvbW1pdCcg5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzoxNjAgc2VxdWVuY2VyLmM6NzY1IHNlcXVlbmNlci5jOjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiCittc2dzdHIgIuS4jeiDveWGmeWFpSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzIgorbXNnc3RyICLplJnor6/mlLblsL4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE3OAorbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVycnktcGljay4iCittc2dzdHIgIuaCqOeahOacrOWcsOS/ruaUueWwhuiiq+aLo+mAieaTjeS9nOimhuebluOAgiIKKworIzogc2VxdWVuY2VyLmM6MTgwCittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHJldmVydC4iCittc2dzdHIgIuaCqOeahOacrOWcsOS/ruaUueWwhuiiq+i/mOWOn+aTjeS9nOimhuebluOAgiIKKworIzogc2VxdWVuY2VyLmM6MTgzCittc2dpZCAiQ29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICLmj5DkuqTmgqjnmoTkv67mlLnmiJbkv53lrZjov5vluqblkI7lho3nu6fnu63jgIIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiIG9yICJjaGVycnktcGljayIKKyM6IHNlcXVlbmNlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlc++8muaXoOazleWGmeWFpeaWsOe0ouW8leaWh+S7tiIKKworIzogc2VxdWVuY2VyLmM6MjYxCittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXRcbiIKK21zZ3N0ciAi5LiN6IO96Kej5p6QIEhFQUQg5o+Q5LqkXG4iCisKKyM6IHNlcXVlbmNlci5jOjI4MgorbXNnaWQgIlVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIgorbXNnc3RyICLkuI3og73mm7TmlrDnvJPlrZhcbiIKKworIzogc2VxdWVuY2VyLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5o+Q5LqkICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlc1xuIgorbXNnc3RyICLkuI3og73op6PmnpDniLbmj5DkuqQgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk4Cittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAi5oKo55qE57Si5byV5paH5Lu25pyq5a6M5oiQ5ZCI5bm244CCIgorCisjOiBzZXF1ZW5jZXIuYzo0MDEKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFEIgorbXNnc3RyICLmgqjmsqHmnInkuIDkuKrmnInmlYjnmoQgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAi5o+Q5LqkICVzIOaYr+S4gOS4quWQiOW5tuaPkOS6pOS9huacquaPkOS+myAtbSDpgInpobnjgIIiCisKKyM6IHNlcXVlbmNlci5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIuaPkOS6pCAlcyDmsqHmnInniLbmj5DkuqQgJWQiCisKKyM6IHNlcXVlbmNlci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorbXNnc3RyICLmjIflrprkuobkuLvnur/kvYbmj5DkuqQgJXMg5LiN5piv5LiA5Liq5ZCI5bm244CCIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKyMuICJjaGVycnktcGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExCisjOiBzZXF1ZW5jZXIuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlc++8muS4jeiDveino+aekOeItuaPkOS6pCAlcyIKKworIzogc2VxdWVuY2VyLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICLkuI3og73lvpfliLAgJXMg55qE5o+Q5Lqk6K+05piOIgorCisjOiBzZXF1ZW5jZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAi5LiN6IO96L+Y5Y6fICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzo1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICLkuI3og73lupTnlKggJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjU2MAorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICLmj5DkvpvkuobnqbrnmoTmj5DkuqTpm4YiCisKKyM6IHNlcXVlbmNlci5jOjU2OAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVz77ya5peg5rOV6K+75Y+W57Si5byVIgorCisjOiBzZXF1ZW5jZXIuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlc++8muaXoOazleWIt+aWsOe0ouW8lSIKKworIzogc2VxdWVuY2VyLmM6NjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKK21zZ3N0ciAi5peg5rOVICVzIOWcqOS4gOS4qiAlcyDov4fnqIvkuK0iCisKKyM6IHNlcXVlbmNlci5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgbGluZSAlZC4iCittc2dzdHIgIuS4jeiDveino+aekOesrCAlZCDooYzjgIIiCisKKyM6IHNlcXVlbmNlci5jOjY1OAorbXNnaWQgIk5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAi5rKh5pyJ5o+Q5Lqk6KKr6Kej5p6Q44CCIgorCisjOiBzZXF1ZW5jZXIuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXMiCittc2dzdHIgIuS4jeiDveaJk+W8gCAlcyIKKworIzogc2VxdWVuY2VyLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAi5LiN6IO96K+75Y+WICVz44CCIgorCisjOiBzZXF1ZW5jZXIuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICVzIgorbXNnc3RyICLml6DnlKjnmoTmjIfku6TooajljZXvvJolcyIKKworIzogc2VxdWVuY2VyLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAi5peg5pWI6ZSu5ZCN77yaJXMiCisKKyM6IHNlcXVlbmNlci5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiVzIOeahOWAvOaXoOaViO+8miVzIgorCisjOiBzZXF1ZW5jZXIuYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICVzIgorbXNnc3RyICLpnZ7ms5XnmoTpgInpobnooajljZXvvJolcyIKKworIzogc2VxdWVuY2VyLmM6NzQ2Cittc2dpZCAiYSBjaGVycnktcGljayBvciByZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5LiA5Liq5ouj6YCJ5oiW6L+Y5Y6f5pON5L2c5bey5Zyo6L+b6KGMIgorCisjOiBzZXF1ZW5jZXIuYzo3NDcKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIgorbXNnc3RyICLlsJ3or5UgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLkuI3og73liJvlu7rluo/liJfnm67lvZUgJXMiCisKKyM6IHNlcXVlbmNlci5jOjc2NyBzZXF1ZW5jZXIuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorbXNnc3RyICLplJnor6/mlLblsL4gJXPjgIIiCisKKyM6IHNlcXVlbmNlci5jOjc4NiBzZXF1ZW5jZXIuYzo5MjAKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuaLo+mAieaIlui/mOWOn+aTjeS9nOW5tuacqui/m+ihjCIKKworIzogc2VxdWVuY2VyLmM6Nzg4Cittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAi5LiN6IO96Kej5p6QIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjc5MAorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICLkuI3og73ku47lsJrmnKrlu7rnq4vnmoTliIbmlK/nu4jmraIiCisKKyM6IHNlcXVlbmNlci5jOjgxMiBidWlsdGluL2FwcGx5LmM6NDAwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgIuS4jeiDveaJk+W8gCAlc++8miVzIgorCisjOiBzZXF1ZW5jZXIuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICLkuI3og73or7vlj5YgJXPvvJolcyIKKworIzogc2VxdWVuY2VyLmM6ODE2Cittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi5oSP5aSW55qE5paH5Lu257uT5p2fIgorCisjOiBzZXF1ZW5jZXIuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICLkv53lrZjmi6PpgInmj5DkuqTliY3nmoQgSEVBRCDmlofku7YgJyVzJyDmjZ/lnY8iCisKKyM6IHNlcXVlbmNlci5jOjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZm9ybWF0ICVzLiIKK21zZ3N0ciAi5LiN6IO95qC85byP5YyWICVz44CCIgorCisjOiBzZXF1ZW5jZXIuYzoxMDA3Cittc2dpZCAiQ2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICLkuI3og73kvZzkuLrliJ3lp4vmj5DkuqTov5jljp8iCisKKyM6IHNlcXVlbmNlci5jOjEwMDgKK21zZ2lkICJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIuS4jeiDveaLo+mAieWIsOepuuWIhuaUryIKKworIzogc2hhMV9uYW1lLmM6MTA0NAorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIkhFQUQg5rKh5pyJ5oyH5ZCR5LiA5Liq5YiG5pSvIgorCisjOiBzaGExX25hbWUuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICLmsqHmnInmraTliIbmlK/vvJonJXMnIgorCisjOiBzaGExX25hbWUuYzoxMDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICLlsJrmnKrnu5nliIbmlK8gJyVzJyDorr7nva7kuIrmuLgiCisKKyM6IHNoYTFfbmFtZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIuS4iua4uOWIhuaUryAnJXMnIOayoeacieWtmOWCqOS4uuS4gOS4qui/nOeoi+i3n+i4quWIhuaUryIKKworIzogd3JhcHBlci5jOjQwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIKK21zZ3N0ciAi5LiN6IO95Yib5bu6ICclcyciCisKKyM6IHdyYXBwZXIuYzo0MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCittc2dzdHIgIuaXoOazleWcqCBwYXNzd2Qg5paH5Lu25Lit5p+l6K+i5Yiw6K+l55So5oi377yaJXMiCisKKyM6IHdyYXBwZXIuYzo0MjcKK21zZ2lkICJubyBzdWNoIHVzZXIiCittc2dzdHIgIuaXoOatpOeUqOaItyIKKworIzogd3Qtc3RhdHVzLmM6MTQwCittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICLmnKrlkIjlubbnmoTot6/lvoTvvJoiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTY3IHd0LXN0YXR1cy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJlc2V0ICVzIDxmaWxlPi4uLlwiIOaSpOWHuuaaguWtmOWMuu+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxNjkgd3Qtc3RhdHVzLmM6MTk2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiDmkqTlh7rmmoLlrZjljLrvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTczCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBhZGQgPGZpbGU+Li4uXCIg5qCH6K6w6Kej5Yaz5pa55qGI77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE3NSB3dC1zdGF0dXMuYzoxNzkKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAg77yI6YWM5oOF5L2/55SoIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiDmoIforrDop6PlhrPmlrnmoYjvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTc3Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIOagh+iusOino+WGs+aWueahiO+8iSIKKworIzogd3Qtc3RhdHVzLmM6MTg4Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICLopoHmj5DkuqTnmoTlj5jmm7TvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjIwNgorbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAi5bCa5pyq5pqC5a2Y5Lul5aSH5o+Q5Lqk55qE5Y+Y5pu077yaIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjIxMAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBhZGQgPGZpbGU+Li4uXCIg5pu05paw6KaB5o+Q5Lqk55qE5YaF5a6577yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjIxMgorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIg5pu05paw6KaB5o+Q5Lqk55qE5YaF5a6577yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjIxMworbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIg5Lii5byD5bel5L2c5Yy655qE5pS55Yqo77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjIxNQorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiICDvvIjmj5DkuqTmiJbkuKLlvIPlrZDmqKHnu4TkuK3mnKrot5/ouKrmiJbkv67mlLnnmoTlhoXlrrnvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCAlcyA8ZmlsZT4uLi5cIiDku6XljIXlkKvopoHmj5DkuqTnmoTlhoXlrrnvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjI0NAorbXNnaWQgImJ1ZyIKK21zZ3N0ciAiYnVnIgorCisjOiB3dC1zdGF0dXMuYzoyNDkKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICLlj4zmlrnliKDpmaTvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI1MAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAi55Sx5oiR5Lus5re75Yqg77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNTEKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICLnlLHku5bku6zliKDpmaTvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI1MgorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICLnlLHku5bku6zmt7vliqDvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI1MworbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICLnlLHmiJHku6zliKDpmaTvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI1NAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICLlj4zmlrnmt7vliqDvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI1NQorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICLlj4zmlrnkv67mlLnvvJoiCisKKyMgIOivkeiAhe+8muacq+WwvuS4pOS4quWtl+iKguWPr+iDveiiq+WIoOWHj++8jOWmguaenOe/u+ivkeS4uuS4reaWh+agh+eCueS8muWHuueOsOWNiuS4quaxieWtlworIzogd3Qtc3RhdHVzLmM6Mjg1Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAi5paw5o+Q5LqkLCAiCisKKyMgIOivkeiAhe+8muacq+WwvuS4pOS4quWtl+iKguWPr+iDveiiq+WIoOWHj++8jOWmguaenOe/u+ivkeS4uuS4reaWh+agh+eCueS8muWHuueOsOWNiuS4quaxieWtlworIzogd3Qtc3RhdHVzLmM6Mjg3Cittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICLkv67mlLnnmoTlhoXlrrksICIKKworIyAg6K+R6ICF77ya5pyr5bC+5Lik5Liq5a2X6IqC5Y+v6IO96KKr5Yig5YeP77yM5aaC5p6c57+76K+R5Li65Lit5paH5qCH54K55Lya5Ye6546w5Y2K5Liq5rGJ5a2XCisjOiB3dC1zdGF0dXMuYzoyODkKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICLmnKrot5/ouKrnmoTlhoXlrrksICIKKworIyAg6K+R6ICF77ya5Li65L+d6K+B5Zyo6L6T5Ye65Lit5a+56b2Q77yM5rOo5oSP6LCD5pW05Y+l5Lit56m65qC877yBCisjOiB3dC1zdGF0dXMuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGU6ICAgJXMiCittc2dzdHIgIuaWsOaWh+S7tu+8miAgICAlcyIKKworIyAg6K+R6ICF77ya5Li65L+d6K+B5Zyo6L6T5Ye65Lit5a+56b2Q77yM5rOo5oSP6LCD5pW05Y+l5Lit56m65qC877yBCisjOiB3dC1zdGF0dXMuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29waWVkOiAgICAgJXMgLT4gJXMiCittc2dzdHIgIuaLt+i0ne+8miAgICAgICVzIC0+ICVzIgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IHd0LXN0YXR1cy5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkOiAgICAlcyIKK21zZ3N0ciAi5Yig6Zmk77yaICAgICAgJXMiCisKKyMgIOivkeiAhe+8muS4uuS/neivgeWcqOi+k+WHuuS4reWvuem9kO+8jOazqOaEj+iwg+aVtOWPpeS4reepuuagvO+8gQorIzogd3Qtc3RhdHVzLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGlmaWVkOiAgICVzIgorbXNnc3RyICLkv67mlLnvvJogICAgICAlcyIKKworIyAg6K+R6ICF77ya5Li65L+d6K+B5Zyo6L6T5Ye65Lit5a+56b2Q77yM5rOo5oSP6LCD5pW05Y+l5Lit56m65qC877yBCisjOiB3dC1zdGF0dXMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1lZDogICAgJXMgLT4gJXMiCittc2dzdHIgIumHjeWRveWQje+8miAgICAlcyAtPiAlcyIKKworIyAg6K+R6ICF77ya5Li65L+d6K+B5Zyo6L6T5Ye65Lit5a+56b2Q77yM5rOo5oSP6LCD5pW05Y+l5Lit56m65qC877yBCisjOiB3dC1zdGF0dXMuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidHlwZWNoYW5nZTogJXMiCittc2dzdHIgIuexu+Wei+WPmOabtO+8miAgJXMiCisKKyMgIOivkeiAhe+8muS4uuS/neivgeWcqOi+k+WHuuS4reWvuem9kO+8jOazqOaEj+iwg+aVtOWPpeS4reepuuagvO+8gQorIzogd3Qtc3RhdHVzLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd246ICAgICVzIgorbXNnc3RyICLmnKrnn6XvvJogICAgICAlcyIKKworIyAg6K+R6ICF77ya5Li65L+d6K+B5Zyo6L6T5Ye65Lit5a+56b2Q77yM5rOo5oSP6LCD5pW05Y+l5Lit56m65qC877yBCisjOiB3dC1zdGF0dXMuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5tZXJnZWQ6ICAgJXMiCittc2dzdHIgIuacquWQiOW5tu+8miAgICAlcyIKKworIzogd3Qtc3RhdHVzLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImJ1ZzogdW5oYW5kbGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICJidWfvvJrmnKrlpITnkIbnmoTlt67lvILnirbmgIEgJWMiCisKKyM6IHd0LXN0YXR1cy5jOjc4NQorbXNnaWQgIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIKK21zZ3N0ciAi5oKo5pyJ5bCa5pyq5ZCI5bm255qE6Lev5b6E44CCIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjc4OCB3dC1zdGF0dXMuYzo5MTIKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgIO+8iOino+WGs+WGsueqgeW5tui/kOihjCBcImdpdCBjb21taXRcIu+8iSIKKworIzogd3Qtc3RhdHVzLmM6NzkxCittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAi5omA5pyJ5Yay56qB5bey6Kej5Yaz5L2G5oKo5LuN5aSE5LqO5ZCI5bm25Lit44CCIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjc5NAorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGNvbW1pdFwiIOe7k+adn+WQiOW5tu+8iSIKKworIzogd3Qtc3RhdHVzLmM6ODA0Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICLmgqjmraPlpITkuo7kuIDkuKogYW0g6L+H56iL5Lit44CCIgorCisjOiB3dC1zdGF0dXMuYzo4MDcKK21zZ2lkICJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIuW9k+WJjeeahOihpeS4geS4uuepuuOAgiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzo4MTEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLXJlc29sdmVkXCIpIgorbXNnc3RyICIgIO+8iOino+WGs+WGsueqge+8jOeEtuWQjui/kOihjCBcImdpdCBhbSAtLXJlc29sdmVkXCLvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6ODEzCittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGFtIC0tc2tpcFwiIOi3s+i/h+atpOihpeS4ge+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzo4MTUKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGFtIC0tYWJvcnRcIiDmgaLlpI3ljp/mnInliIbmlK/vvIkiCisKKyM6IHd0LXN0YXR1cy5jOjg3MyB3dC1zdGF0dXMuYzo4ODMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIuaCqOato+WcqOWPmOWfuuOAgiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzo4NzYKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICDvvIjop6PlhrPlhrLnqoHvvIznhLblkI7ov5DooYwgXCJnaXQgcmViYXNlIC0tY29udGludWVcIu+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzo4NzgKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiDot7Pov4fmraTooaXkuIHvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6ODgwCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZWJhc2UgLS1hYm9ydFwiIOS7peajgOWHuuWOn+acieWIhuaUr++8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzo4ODYKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI5omA5pyJ5Yay56qB5bey6Kej5Yaz77ya6L+Q6KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjg4OAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLmgqjmraPlnKjlj5jln7rov4fnqIvkuK3mi4bliIbkuIDkuKrmj5DkuqTjgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6ODkxCittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI5LiA5pem5oKo5bel5L2c55uu5b2V5o+Q5Lqk5bmy5YeA5ZCO77yM6L+Q6KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjg5MworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAi5oKo5q2j5Zyo5Y+Y5Z+66L+H56iL5Lit57yW6L6R5LiA5Liq5o+Q5Lqk44CCIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjg5NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIg5L+u6KGl5b2T5YmN5o+Q5Lqk77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjg5OAorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIKK21zZ3N0ciAiICDvvIjlvZPmgqjlr7nmgqjnmoTkv67mlLnmu6HmhI/lkI7miafooYwgXCJnaXQgcmViYXNlIC0tY29udGludWVcIu+8iSIKKworIzogd3Qtc3RhdHVzLmM6OTA4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcuIgorbXNnc3RyICLmgqjmraPlnKjlgZrmi6PpgInmk43kvZzjgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6OTE1Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICDvvIjop6PlhrPmiYDmnInlhrLnqoHlkI7vvIzmiafooYwgXCJnaXQgY29tbWl0XCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjkyNAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIuaCqOato+WcqOWBmuS6jOWIhuafpeaJvuOAgiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzo5MjcKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGJpc2VjdCByZXNldFwiIOS7peWbnuWIsOWOn+acieWIhuaUr++8iSIKKworIzogd3Qtc3RhdHVzLmM6OTc4Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAi5L2N5LqO5YiG5pSvICIKKworIzogd3Qtc3RhdHVzLmM6OTg1Cittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAi5b2T5YmN5LiN5Zyo5Lu75L2V5YiG5pSv5LiK44CCIgorCisjOiB3dC1zdGF0dXMuYzo5OTcKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAi5Yid5aeL5o+Q5LqkIgorCisjOiB3dC1zdGF0dXMuYzoxMDExCisjLCBmdXp6eQorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5pyq6Lef6Liq55qEIgorCisjOiB3dC1zdGF0dXMuYzoxMDEzCisjLCBmdXp6eQorbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIuW/veeVpeeahCIKKworIzogd3Qtc3RhdHVzLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICLmnKrot5/ouKrnmoTmlofku7bmsqHmnInliJflh7olcyIKKworIyAg6K+R6ICF77ya5Lit5paH5a2X56ym5Liy5ou85o6l77yM5Y+v5Yig6Zmk5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMDE3Cittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAi77yI5L2/55SoIC11IOWPguaVsOaYvuekuuacqui3n+i4queahOaWh+S7tu+8iSIKKworIzogd3Qtc3RhdHVzLmM6MTAyMworbXNnaWQgIk5vIGNoYW5nZXMiCittc2dzdHIgIuayoeacieS/ruaUuSIKKworIyAg6K+R6ICF77ya5Lit5paH5a2X56ym5Liy5ou85o6l77yM5Y+v5Yig6Zmk5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMDI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIilcbiIKK21zZ3N0ciAi77yI5L2/55SoIFwiZ2l0IGFkZFwiIOWSjC/miJYgXCJnaXQgY29tbWl0IC1hXCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjEwMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgIuS/ruaUueWwmuacquWKoOWFpeaPkOS6pCVzXG4iCisKKyM6IHd0LXN0YXR1cy5jOjEwMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIuepuuaPkOS6pOS9huWtmOWcqOacqui3n+i4quaWh+S7tiVzXG4iCisKKyM6IHd0LXN0YXR1cy5jOjEwMzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICLnqbrmj5DkuqTkvYblrZjlnKjmnKrot5/ouKrmlofku7Ylc1xuIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjEwNDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICLvvIjmlrDlu7ov5ou36LSd55qE5paH5Lu25L2/55SoIFwiZ2l0IGFkZFwiIOW7uueri+i3n+i4qu+8iSIKKworIzogd3Qtc3RhdHVzLmM6MTA0MyB3dC1zdGF0dXMuYzoxMDQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICLml6Dpobvmj5DkuqQlc1xuIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjEwNDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgIu+8iOS9v+eUqCAtdSDmmL7npLrmnKrot5/ouKrmlofku7bvvIkiCisKKyMgIOivkeiAhe+8muS4reaWh+Wtl+espuS4suaLvOaOpe+8jOWPr+WIoOmZpOWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTA1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgZGlyZWN0b3J5IGNsZWFuXG4iCittc2dzdHIgIu+8iOW5suWHgOeahOW3peS9nOWMuu+8iSIKKworIzogd3Qtc3RhdHVzLmM6MTE1OAorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUTvvIjpnZ7liIbmlK/vvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWPpeWwvuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTE2NAorbXNnaWQgIkluaXRpYWwgY29tbWl0IG9uICIKK21zZ3N0ciAi5Yid5aeL5o+Q5Lqk5LqOICIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5Y+l5bC+56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMTc5Cittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAi6JC95ZCOICIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5Y+l5bC+56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMTgyIHd0LXN0YXR1cy5jOjExODUKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgIumihuWFiCAiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWPpeWwvuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTE4NworbXNnaWQgIiwgYmVoaW5kICIKK21zZ3N0ciAi77yM6JC95ZCOICIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU4IGJ1aWx0aW4vY2xvbmUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICLml6Dms5XliKDpmaQgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoxOQorIywgZnV6enkKK21zZ2lkICJnaXQgYWRkIFtvcHRpb25zXSBbLS1dIDxmaWxlcGF0dGVybj4uLi4iCittc2dzdHIgImdpdCBhcHBseSBb6YCJ6aG5XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL2FkZC5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgIuaEj+WklueahOW3ruW8gueKtuaAgSAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo2NyBidWlsdGluL2NvbW1pdC5jOjIyOQorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAi5pu05paw5paH5Lu25aSx6LSlIgorCisjOiBidWlsdGluL2FkZC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgIuWIoOmZpCAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGggJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICLot6/lvoQgJyVzJyDlsZ7kuo7mqKHnu4QgJyUuKnMnIgorCisjOiBidWlsdGluL2FkZC5jOjE5MgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICLliLfmlrDntKLlvJXkuYvlkI7lsJrmnKrooqvmmoLlrZjnmoTlj5jmm7TvvJoiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTk1IGJ1aWx0aW4vYWRkLmM6NDYwIGJ1aWx0aW4vcm0uYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAi6Lev5b6EICclcycg5pyq5Yy56YWN5Lu75L2V5paH5Lu2IgorCisjOiBidWlsdGluL2FkZC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIiclcycg5L2N5LqO56ym5Y+36ZO+5o6l5LitIgorCisjOiBidWlsdGluL2FkZC5jOjI3NgorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAi5LiN6IO96K+75Y+W57Si5byVIgorCisjOiBidWlsdGluL2FkZC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi5LiN6IO95omT5byAICclcycg5Lul5YaZ5YWl44CCIgorCisjOiBidWlsdGluL2FkZC5jOjI5MAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAi5LiN6IO955Sf5oiQ6KGl5LiBIgorCisjOiBidWlsdGluL2FkZC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLkuI3og73mn6XnnIvmlofku7bnirbmgIEgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyOTcKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIuepuuihpeS4geOAguW8guW4uOe7iOatouOAgiIKKworIzogYnVpbHRpbi9hZGQuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICclcyciCittc2dzdHIgIuS4jeiDveW6lOeUqCAnJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjMxMworbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAi5LiL5YiX6Lev5b6E5qC55o2u5oKo55qE5LiA5LiqIC5naXRpZ25vcmUg5paH5Lu26ICM6KKr5b+955Wl77yaXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE5IGJ1aWx0aW4vY2xlYW4uYzo1MiBidWlsdGluL2ZldGNoLmM6NzggYnVpbHRpbi9tdi5jOjYzCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjc2IGJ1aWx0aW4vcHVzaC5jOjM4OCBidWlsdGluL3JlbW90ZS5jOjEyNTMKKyM6IGJ1aWx0aW4vcm0uYzoxMzMKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIwIGJ1aWx0aW4vYXBwbHkuYzo0MzU0IGJ1aWx0aW4vY29tbWl0LmM6MTE4NworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6ODIgYnVpbHRpbi9mc2NrLmM6NjEzIGJ1aWx0aW4vbG9nLmM6MTQ3NworIzogYnVpbHRpbi9tdi5jOjYyIGJ1aWx0aW4vcmVhZC10cmVlLmM6MTEyCittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAi5YaX6ZW/6L6T5Ye6IgorCisjOiBidWlsdGluL2FkZC5jOjMyMgorIywgZnV6enkKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICLkuqTkupLlvI/mt7vliqDlpLHotKUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDI4IGJ1aWx0aW4vcmVzZXQuYzoyNDgKK21zZ2lkICJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMyNAorbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMyNQorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMyNgorIywgZnV6enkKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5peg5rOV5a2Y5YKo5YyF5paH5Lu2IgorCisjOiBidWlsdGluL2FkZC5jOjMyNworbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMyOAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMyOQorIywgZnV6enkKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlc++8muaXoOazleWIt+aWsOe0ouW8lSIKKworIzogYnVpbHRpbi9hZGQuYzozMzAKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMxCittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIuS9v+eUqCAtZiDlj4LmlbDlpoLmnpzmgqjnoa7lrp7opoHmt7vliqDlroPku6zjgIJcbiIKKworIzogYnVpbHRpbi9hZGQuYzozNTQKK21zZ2lkICJubyBmaWxlcyBhZGRlZCIKK21zZ3N0ciAi5rKh5pyJ5paH5Lu26KKr5re75YqgIgorCisjOiBidWlsdGluL2FkZC5jOjM2MAorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIua3u+WKoOaWh+S7tuWksei0pSIKKworIzogYnVpbHRpbi9hZGQuYzozOTIKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLUEg5ZKMIC11IOmAiemhueS6kuaWpSIKKworIzogYnVpbHRpbi9hZGQuYzozOTQKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICLpgInpobkgLS1pZ25vcmUtbWlzc2luZyDlj6rog73lkowgLS1kcnktcnVuIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9hZGQuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIuayoeacieaMh+WumuaWh+S7tu+8jOS5n+ayoeacieaWh+S7tuiiq+a3u+WKoOOAglxuIgorCisjOiBidWlsdGluL2FkZC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAi5Lmf6K645oKo5oOz6KaB5omn6KGMICdnaXQgYWRkIC4n77yfXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDIxIGJ1aWx0aW4vY2xlYW4uYzo5NSBidWlsdGluL2NvbW1pdC5jOjI4OSBidWlsdGluL212LmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxNjIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgIue0ouW8leaWh+S7tuaNn+WdjyIKKworIzogYnVpbHRpbi9hZGQuYzo0ODEgYnVpbHRpbi9hcHBseS5jOjQ0NTAgYnVpbHRpbi9tdi5jOjIyOSBidWlsdGluL3JtLmM6MjYwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlhpnlhaXmlrDntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo1NworbXNnaWQgImdpdCBhcHBseSBbb3B0aW9uc10gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgW+mAiemhuV0gWzzooaXkuIE+Li4uXSIKKworIzogYnVpbHRpbi9hcHBseS5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qE56m655m95a2X56ym6YCJ6aG5ICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICLmnKrog73or4bliKvnmoTnqbrnmb3lrZfnrKblv73nlaXpgInpobkgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICLml6Dms5Xlh4blpIfml7bpl7TmiLPmraPliJnooajovr7lvI8gJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIOi/lOWbniAlZO+8jOi+k+WFpeS4uu+8miVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIuS4jeiDveWcqOihpeS4geeahOesrCAlZCDooYzmib7liLDmlofku7blkI0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHnvvJrplJnor6/nmoQgZ2l0LWRpZmYgLSDlupTkuLogL2Rldi9udWxs77yM5L2G5Zyo56ysICUyJGQg6KGM5b6X5YiwICUxJHMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBsee+8mumUmeivr+eahCBnaXQtZGlmZiAtIOesrCAlZCDooYzkuIrmlrDmlofku7blkI3kuI3kuIDoh7QiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBsee+8mumUmeivr+eahCBnaXQtZGlmZiAtIOesrCAlZCDooYzkuIrml6fmlofku7blkI3kuI3kuIDoh7QiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx577ya6ZSZ6K+v55qEIGdpdC1kaWZmIC0g56ysICVkIOihjOWkhOW6lOS4uiAvZGV2L251bGwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb3VudO+8muaEj+WklueahOihjO+8miUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIuesrCAlZCDooYznmoTooaXkuIHniYfmrrXmsqHmnInlpLTkv6Hmga/vvJolLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICLlvZPnp7vpmaQgJWQg5Liq5YmN5a+86Lev5b6E5ZCOIGdpdCBkaWZmIOWktOe8uuS5j+aWh+S7tuWQjeS/oeaBr++8iOesrCAlZCDooYzvvIkiCittc2dzdHJbMV0gIuW9k+enu+mZpCAlZCDkuKrliY3lr7zot6/lvoTlkI4gZ2l0IGRpZmYg5aS057y65LmP5paH5Lu25ZCN5L+h5oGv77yI56ysICVkIOihjO+8iSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2NTQKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi5paw5paH5Lu25L6d6LWW5pen5YaF5a65IgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY1NgorbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgIuWIoOmZpOeahOaWh+S7tuS7jeacieWGheWuuSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLooaXkuIHlnKjnrKwgJWQg6KGM5o2f5Z2PIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi5paw5paH5Lu2ICVzIOS+nei1luaXp+WGheWuuSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi5Yig6Zmk55qE5paH5Lu2ICVzIOS7jeacieWGheWuuSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiog6K2m5ZGK77ya5paH5Lu2ICVzIOaIkOS4uuepuuaWh+S7tuS9huW5tuacquWIoOmZpCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi5LqM6L+b5Yi26KGl5LiB5Zyo56ysICVkIOihjOaNn+Wdj++8miUuKnMiCisKKyMuIHRoZXJlIGhhcyB0byBiZSBvbmUgaHVuayAoZm9yd2FyZCBodW5rKQorIzogYnVpbHRpbi9hcHBseS5jOjE4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLmnKrog73or4bliKvnmoTkuozov5vliLbooaXkuIHkvY3kuo7nrKwgJWQg6KGMIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICLooaXkuIHmlofku7bnmoTnrKwgJWQg6KGM5Y+q5pyJ5Z6D5Zy+5pWw5o2uIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICLml6Dms5Xor7vlj5bnrKblj7fpk77mjqUgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIuS4jeiDveaJk+W8gOaIluivu+WPliAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjIxNDkKK21zZ2lkICJvb3BzIgorbXNnc3RyICLlk47lk58iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNjcxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAi5peg5pWI55qE6KGM6aaW5a2X56ym77yaJyVjJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICLlnZcgIyVkIOaIkOWKn+W6lOeUqOS6jiAlZCAo5YGP56e7ICVkIOihjO+8iSIKK21zZ3N0clsxXSAi5Z2XICMlZCDmiJDlip/lupTnlKjkuo4gJWQgKOWBj+enuyAlZCDooYzvvIkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIuS4iuS4i+aWh+WHj+WwkeWIsO+8iCVsZC8lbGTvvInku6XlnKjnrKwgJWQg6KGM5bqU55So6KGl5LiB54mH5q61IgorCisjOiBidWlsdGluL2FwcGx5LmM6MjgwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisi5b2T5p+l6K+i77yaXG4iCisiJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAi57y65aSxICclcycg55qE5LqM6L+b5Yi26KGl5LiB5pWw5o2uIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkyOQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAi5LqM6L+b5Yi26KGl5LiB5pyq5bqU55So5YiwICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIgorbXNnc3RyICLliLAgJyVzJyDnmoTkuozov5vliLbooaXkuIHkuqfnlJ/kuobkuI3mraPnoa7nmoTnu5PmnpzvvIjlupTkuLogJXPvvIzljbTkuLogJXPvvIkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTU2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICLmiZPooaXkuIHlpLHotKXvvJolczolbGQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAi5LiN6IO95qOA5Ye6ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzEyMyBidWlsdGluL2FwcGx5LmM6MzEzMiBidWlsdGluL2FwcGx5LmM6MzE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIG9mICVzIGZhaWxlZCIKK21zZ3N0ciAi6K+75Y+WICVzIOWksei0pSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxNTYgYnVpbHRpbi9hcHBseS5jOjMzNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgIui3r+W+hCAlcyDlt7Lnu4/ooqvph43lkb3lkI0v5Yig6ZmkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzIzNyBidWlsdGluL2FwcGx5LmM6MzM5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVz77ya5LiN5a2Y5Zyo5LqO57Si5byV5LitIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI0MSBidWlsdGluL2FwcGx5LmM6MzM4NCBidWlsdGluL2FwcGx5LmM6MzQwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMiCittc2dzdHIgIiVz77yaJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjQ2IGJ1aWx0aW4vYXBwbHkuYzozNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXPvvJrlkozntKLlvJXkuI3ljLnphY0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzQ4Cittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAi56e76Zmk6KGl5LiB5LuN55WZ5LiL5LqG5paH5Lu25YaF5a65IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzQxNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXPvvJrplJnor6/nsbvlnosiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMg55qE57G75Z6L5pivICVv77yM5bqU5Li6ICVvIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVz77ya5bey57uP5a2Y5Zyo5LqO57Si5byV5LitIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVz77ya5bey57uP5a2Y5Zyo5LqO5bel5L2c5Yy65LitIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzU0MworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgIiUyJHMg55qE5paw5qih5byP77yIJTEkb++8ieWSjOaXp+aooeW8j++8iCUzJG/vvInkuI3ljLnphY0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAiJTIkcyDnmoTmlrDmqKHlvI/vvIglMSRv77yJ5ZKMICU0JHMg55qE5pen5qih5byP77yIJTMkb++8ieS4jeWMuemFjSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlc++8muihpeS4geacquW6lOeUqCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIuajgOafpeihpeS4gSAlcy4uLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2MjQgYnVpbHRpbi9jaGVja291dC5jOjIxNSBidWlsdGluL3Jlc2V0LmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIuWvuei3r+W+hCAnJXMnIOeahCBtYWtlX2NhY2hlX2VudHJ5IOaTjeS9nOWksei0pSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICLkuI3og73ku47ntKLlvJXkuK3np7vpmaQgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1YnByb2plY3QgJXMiCittc2dzdHIgIuWtkOmhueebriAlcyDmjZ/lnY/nmoTooaXkuIEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73mnprkuL7mlrDlu7rmlofku7YgJyVzJyDnmoTnirbmgIEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICLkuI3og73kuLrmlrDlu7rmlofku7YgJXMg5Yib5bu65ZCO56uv5a2Y5YKoIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzgwNyBidWlsdGluL2FwcGx5LmM6MzkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAi5peg5rOV5Li6ICVzIOa3u+WKoOe8k+WtmOadoeebriIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvc2luZyBmaWxlICclcyciCittc2dzdHIgIuWFs+mXreaWh+S7tiAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzg4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIuS4jeiDveWGmeaWh+S7tiAnJXMnIOadg+mZkCAlbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAi5oiQ5Yqf5bqU55So6KGl5LiBICVz44CCIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk4NAorbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICLlhoXpg6jplJnor68iCisKKyMuIFNheSB0aGlzIGV2ZW4gd2l0aG91dCAtLXZlcmJvc2UKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAi5bqU55SoICUlcyDkuKrooaXkuIHvvIzlhbbkuK0gJWQg5Liq6KKr5ouS57udLi4uIgorbXNnc3RyWzFdICLlupTnlKggJSVzIOS4quihpeS4ge+8jOWFtuS4rSAlZCDkuKrooqvmi5Lnu50uLi4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTk3CisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAi5oiq55+tIC5yZWog5paH5Lu25ZCN5Li6ICUuKnMucmVqIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICLnrKwgIyVkIOS4queJh+auteaIkOWKn+W6lOeUqOOAgiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICLmi5Lnu53nrKwgIyVkIOS4queJh+auteOAgiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQxNzEKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgIuacquiDveivhuWIq+eahOi+k+WFpSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQxODIKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5Xor7vlj5bntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzAxIGJ1aWx0aW4vYXBwbHkuYzo0MzA0IGJ1aWx0aW4vY2xvbmUuYzo5MQorIzogYnVpbHRpbi9mZXRjaC5jOjYzCittc2dpZCAicGF0aCIKK21zZ3N0ciAi6Lev5b6EIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwMgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIuS4jeimgeW6lOeUqOS4jue7meWHuui3r+W+hOWQkeWMuemFjeeahOWPmOabtCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDUKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLlupTnlKjkuI7nu5nlh7rot6/lvoTlkJHljLnphY3nmoTlj5jmm7QiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA3Cittc2dpZCAibnVtIgorbXNnc3RyICLmlbDlrZciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA4Cittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgIuS7juS8oOe7n+eahCBkaWZmIOi3r+W+hOS4reenu+mZpCA85pWw5a2XPiDkuKrliY3lr7zot6/lvoQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzExCittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAi5b+955Wl6KGl5LiB5Lit55qE5re75Yqg55qE5paH5Lu2IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMxMworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi5LiN5bqU55So6KGl5LiB77yM6ICM5piv5pi+56S66L6T5YWl55qE5beu5byC57uf6K6h77yIZGlmZnN0YXTvvIkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzE3CisjLCBmdXp6eQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIuS7peaVsOWtl+aWueW8j+aYvuekuua3u+WKoOaIluWIoOmZpOihjOeahOaVsOmHjyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMTkKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICLkuI3lupTnlKjooaXkuIHvvIzogIzmmK/mmL7npLrovpPlhaXnmoTmpoLopoEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzIxCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAi5LiN5bqU55So6KGl5LiB77yM6ICM5piv5p+l55yL6KGl5LiB5piv5ZCm5Y+v5bqU55SoIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMyMworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAi56Gu6K6k6KGl5LiB5Y+v5Lul5bqU55So5Yiw5b2T5YmN57Si5byVIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMyNQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLlupTnlKjooaXkuIHogIzkuI3kv67mlLnlt6XkvZzljLoiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzI3Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgIui/mOW6lOeUqOatpOihpeS4ge+8iOS4jiAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2sg6YCJ6aG55ZCM5pe25L2/55So77yJIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMyOQorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIuWmguaenOS4gOS4quihpeS4geS4jeiDveW6lOeUqOWImeWwneivleS4iei3r+WQiOW5tiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMzEKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5Yib5bu65LiA5Liq5Li05pe257Si5byV5Z+65LqO5bWM5YWl55qE57Si5byV5L+h5oGvIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMzMyBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTk3IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjAKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAi6Lev5b6E5LulIE5VTCDlrZfnrKbliIbpmpQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzM2Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICLnoa7kv53oh7PlsJHljLnphY0gPG4+IOihjOS4iuS4i+aWhyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMzcKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgIuWKqOS9nCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMzgKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAi5qOA5p+l5paw5aKe5ZKM5L+u5pS555qE6KGM5Lit6Ze055qE56m655m95a2X56ym5rul55SoIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM0MSBidWlsdGluL2FwcGx5LmM6NDM0NAorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgIuafpeaJvuS4iuS4i+aWh+aXtuW/veeVpeepuueZveWtl+espueahOWPmOabtCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNDcKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAi5Y+N5ZCR5bqU55So6KGl5LiBIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM0OQorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICLml6DpnIDoh7PlsJHkuIDooYzkuIrkuIvmlociCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzUxCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgIuWwhuaLkue7neeahOihpeS4geeJh+auteS/neWtmOWcqOWvueW6lOeahCAqLnJlaiDmlofku7bkuK0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzUzCittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgIuWFgeiuuOmHjeWPoOeahOihpeS4geeJh+autSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNTYKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi5YWB6K645LiN5q2j56Gu55qE5paH5Lu25pyr5bC+5o2i6KGM56ymIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM1OQorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAi5LiN5L+h5Lu76KGl5LiB54mH5q6155qE5aS05L+h5oGv5Lit55qE6KGM5Y+3IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM2MQorbXNnaWQgInJvb3QiCittc2dzdHIgIuagueebruW9lSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzNjIKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICLkuLrmiYDmnInmlofku7blkI3liY3mt7vliqAgPOagueebruW9lT4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0Mzg0Cittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLTN3YXkg5Zyo5LiA5Liq54mI5pys5bqT5LmL5aSWIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM5MgorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXgg5Zyo5LiA5Liq54mI5pys5bqT5LmL5aSWIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM5NQorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCDlnKjkuIDkuKrniYjmnKzlupPkuYvlpJYiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NDExCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJyIKK21zZ3N0ciAi5LiN6IO95omT5byA6KGl5LiBICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIuaKkeWItuS4i+S7jeaciSAlZCDkuKrnqbrnmb3lrZfnrKbor6/nlKgiCittc2dzdHJbMV0gIuaKkeWItuS4i+S7jeaciSAlZCDkuKrnqbrnmb3lrZfnrKbor6/nlKgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NDMxIGJ1aWx0aW4vYXBwbHkuYzo0NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIOihjOacieepuueZveWtl+espuivr+eUqOOAgiIKK21zZ3N0clsxXSAiJWQg6KGM5pyJ56m655m95a2X56ym6K+v55So44CCIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73liJvlu7rlvZLmoaPmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICLkuI3og73ph43lrprlkJHovpPlh7oiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJrmnKrmj5Dkvpvov5znqItVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjU4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBFT0YiCittc2dzdHIgImdpdCBhcmNoaXZl77ya5bqU5Li6QUNLL05BQ0vvvIzljbTlvpfliLBFT0YiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8mk5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgIui/nOeoi+mUmeivr++8miVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NgorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJrljY/orq7plJnor68iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjcxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZl77ya5bqU5Li65Yi35pawIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxOQorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1Cittc2dpZCAiZ2l0IGJsYW1lIFtvcHRpb25zXSBbcmV2LW9wdHNdIFtyZXZdIFstLV0gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzAgYnVpbHRpbi9zaG9ydGxvZy5jOjE1Cittc2dpZCAiW3Jldi1vcHRzXSBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzMTYKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzE3Cittc2dpZCAiU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjMxOAorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjMxOQorIywgZnV6enkKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICLmmL7npLrlt6XkvZzljLrnirbmgIEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzIwCittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzMjEKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjMyMgorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjMyMworbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzMjQKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzMjUKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzI2Cittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzI3Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzI4Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjMyOQorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjMzMAorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzMxCittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzMyCittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzMzCisjLCBmdXp6eQorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIua3u+WKoOaWh+S7tuWGheWuueiHs+e0ouW8lSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzMzQgYnVpbHRpbi9ibGFtZS5jOjIzMzUKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjMzNAorbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjIzMzUKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyMzM2CisjLCBmdXp6eQorbXNnaWQgIm4sbSIKK21zZ3N0ciAi5pWw5a2XIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjMzNgorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjMKK21zZ2lkICJnaXQgYnJhbmNoIFtvcHRpb25zXSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQKK21zZ2lkICJnaXQgYnJhbmNoIFtvcHRpb25zXSBbLWxdIFstZl0gPGJyYW5jaG5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1CisjLCBmdXp6eQorbXNnaWQgImdpdCBicmFuY2ggW29wdGlvbnNdIFstcl0gKC1kIHwgLUQpIDxicmFuY2huYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGFwcGx5IFvpgInpobldIFs86KGl5LiBPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYKK21zZ2lkICJnaXQgYnJhbmNoIFtvcHRpb25zXSAoLW0gfCAtTSkgWzxvbGRicmFuY2g+XSA8bmV3YnJhbmNoPiIKK21zZ3N0ciAiIgorCisjICDor5HogIXvvJrkv53mjIHljp/mjaLooYzmoLzlvI/vvIzlnKjovpPlh7rml7YgJXMg55qE5pu/5Luj5YaF5a655Lya6K6p5a2X56ym5Liy5Y+Y6ZW/CisjOiBidWlsdGluL2JyYW5jaC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyLlsIbopoHliKDpmaTnmoTliIbmlK8gJyVzJyDlt7Lnu4/ooqvlkIjlubbliLBcbiIKKyIgICAgICAgICAnJXMn77yM5L2G5pyq5ZCI5bm25YiwIEhFQUTjgIIiCisKKyMgIOivkeiAhe+8muS/neaMgeWOn+aNouihjOagvOW8j++8jOWcqOi+k+WHuuaXtiAlcyDnmoTmm7/ku6PlhoXlrrnkvJrorqnlrZfnrKbkuLLlj5jplb8KKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIuW5tuacquWIoOmZpOWIhuaUryAnJXMn77yMIOiZveeEtuWug+W3sue7j+WQiOW5tuWIsCBIRUFE77yMXG4iCisiICAgICAgICAg54S26ICM5Y205bCa5pyq6KKr5ZCI5bm25Yiw5YiG5pSvICclcycg44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4MQorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAi5LiN6IO95bCGIC1hIOWSjCAtZCDlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTg3Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICLml6Dms5Xmn6Xor6IgSEVBRCDmjIflkJHnmoTmj5DkuqTlr7nosaEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGJyYW5jaCAnJXMnIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG9uLiIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk5oKo5b2T5YmN5omA5Zyo55qE5YiG5pSvICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLov5znqIvliIbmlK8gJyVzJyDmnKrlj5HnjrDjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIuWIhuaUryAnJXMnIOacquWPkeeOsOOAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICLml6Dms5Xmn6Xor6IgJyVzJyDmjIflkJHnmoTmj5DkuqTlr7nosaEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIuWIhuaUryAnJXMnIOayoeacieWujOWFqOWQiOW5tuOAglxuIgorIuWmguaenOaCqOehruiupOimgeWIoOmZpOWug++8jOaJp+ihjCAnZ2l0IGJyYW5jaCAtRCAlcyfjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAi5Yig6Zmk6L+c56iL5YiG5pSvICclcycg5pe25Ye66ZSZIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAi5Yig6Zmk5YiG5pSvICclcycg5pe25Ye66ZSZIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZSBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIuW3suWIoOmZpOi/nOeoi+WIhuaUryAlc++8iOabvuS4uiAlc++8ieOAglxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAi5bey5Yig6Zmk5YiG5pSvICVz77yI5pu+5Li6ICVz77yJ44CCXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQwCittc2dpZCAiVXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi5peg5rOV5pu05pawIGNvbmZpZyDmlofku7YiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzM4CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorbXNnc3RyICLliIbmlK8gJyVzJyDmnKrmjIflkJHkuIDkuKrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYmVoaW5kICVkXSIKK21zZ3N0ciAiWyVz77ya6JC95ZCOICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2JlaGluZCAlZF0iCittc2dzdHIgIlvokL3lkI4gJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkXSIKK21zZ3N0ciAiWyVz77ya6aKG5YWIICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkXSIKK21zZ3N0ciAiW+mihuWFiCAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIlslc++8mumihuWFiCAlZO+8jOiQveWQjiAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlthaGVhZCAlZCwgYmVoaW5kICVkXSIKK21zZ3N0ciAiW+mihuWFiCAlZO+8jOiQveWQjiAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTM3Cittc2dpZCAiKG5vIGJyYW5jaCkiCittc2dzdHIgIu+8iOmdnuWIhuaUr++8iSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDIKK21zZ2lkICJzb21lIHJlZnMgY291bGQgbm90IGJlIHJlYWQiCittc2dzdHIgIuS4gOS6m+W8leeUqOS4jeiDveivu+WPliIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTUKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAi5peg5rOV6YeN5ZG95ZCN5b2T5YmN5YiG5pSv5Zug5Li65LiN5aSE5LqO5Lu75L2V5YiG5pSv5LiK44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICLml6DmlYjnmoTliIbmlK/lkI3vvJonJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MAorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICLliIbmlK/ph43lkb3lkI3lpLHotKUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICLph43lkb3lkI3mjonkuIDkuKrplJnor6/lkb3lkI3nmoTml6fliIbmlK8gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAi5YiG5pSv6YeN5ZG95ZCN5Li6ICVz77yM5L2GIEhFQUQg5rKh5pyJ5pu05paw77yBIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NQorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi5YiG5pSv6KKr6YeN5ZG95ZCN77yM5L2G5pu05pawIGNvbmZpZyDmlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAi6Z2e5rOV55qE5a+56LGh5ZCNICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRlbXBsYXRlOiAlcyIKK21zZ3N0ciAi5LiN6IO95YaZ5YiG5pSv5o+P6L+w5qih54mI77yaJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI0CisjLCBmdXp6eQorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAi5peg5pWI6YCJ6aG577yaJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI2Cittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjcKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI4Cittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzAKK21zZ2lkICJjaGFuZ2UgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczNAorIywgZnV6enkKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgIuS4jeiDvei+k+WHuumHjeWumuWQkSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzUKKyMsIGZ1enp5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiJXMg5rKh5pyJ5p2l6IeqICVzIOeahOi/nOeoi+i3n+i4quWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzggYnVpbHRpbi9icmFuY2guYzo3NDQgYnVpbHRpbi9icmFuY2guYzo3NjUKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzcxIGJ1aWx0aW4vY29tbWl0LmM6MTM5NSBidWlsdGluL2NvbW1pdC5jOjEzOTYKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5NyBidWlsdGluL2NvbW1pdC5jOjEzOTggYnVpbHRpbi90YWcuYzo0NzAKKyMsIGZ1enp5Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICLvvIjlnY/mj5DkuqTvvIlcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzkgYnVpbHRpbi9icmFuY2guYzo3NDUKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUxCittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1MgorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU0Cittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTUKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU2Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTcKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU4CisjLCBmdXp6eQorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICLml6DmlYjnmoTliIbmlK/lkI3vvJonJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OQorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzYxCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjIKKyMsIGZ1enp5Cittc2dpZCAiZm9yY2UgY3JlYXRpb24gKHdoZW4gYWxyZWFkeSBleGlzdHMpIgorbXNnc3RyICLov5znqIsgJXMg5bey57uP5a2Y5Zyo44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NQorIywgZnV6enkKK21zZ2lkICJwcmludCBvbmx5IG5vdCBtZXJnZWQgYnJhbmNoZXMiCittc2dzdHIgIuaXoOazleenu+mZpOWIhuaUryAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NzEKK21zZ2lkICJwcmludCBvbmx5IG1lcmdlZCBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc3NQorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4OAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLml6Dms5XlsIYgSEVBRCDop6PmnpDkuLrmnInmlYjlvJXnlKjjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkzIGJ1aWx0aW4vY2xvbmUuYzo1NjEKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiSEVBRCDmsqHmnInkvY3kuo4gL3JlZnMvaGVhZHMg5LmL5LiL77yBIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMworbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4g5ZKMIC0tdmVyYm9zZSDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi54mI5pys5bqTICclcycg5LiN5a2Y5ZyoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4OTEKK21zZ2lkICItYSBhbmQgLXIgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IG1ha2Ugc2Vuc2Ugd2l0aCBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICInZ2l0IGJyYW5jaCcg55qEIC1hIOWSjCAtciDpgInpobnluKbkuIDkuKrliIbmlK/lkI3lj4LmlbDmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tIgorInRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG4iCisiXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCittc2dzdHIgIiAgSEVBROWIhuaUr++8miVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyDlj6/ku6VcbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo1NgorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIumcgOimgeS4gOS4queJiOacrOW6k+adpeWIm+W7uuWMheOAgiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2MAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAi6ZyA6KaB5LiA5Liq54mI5pys5bqT5p2l6Kej5YyF44CCIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6MjQ3Cittc2dpZCAiZ2l0IGNhdC1maWxlICgtdHwtc3wtZXwtcHw8dHlwZT58LS10ZXh0Y29udikgPG9iamVjdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI0OAorbXNnaWQgImdpdCBjYXQtZmlsZSAoLS1iYXRjaHwtLWJhdGNoLWNoZWNrKSA8IDxsaXN0X29mX29iamVjdHM+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNjYKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI2NworIywgZnV6enkKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICLlnY/nmoTlr7nosaHnsbvlnovjgIIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNjgKKyMsIGZ1enp5Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAi5Z2P5a+56LGhICVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6MjcwCittc2dpZCAiZXhpdCB3aXRoIHplcm8gd2hlbiB0aGVyZSdzIG5vIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzoyNzEKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6MjczCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjI3NQorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6Mjc4CisjLCBmdXp6eQorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5LiN6IO95LuO5qCH5YeG6L6T5YWl5Lit6K+75Y+W5pel5b+X5L+h5oGvIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMQorbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgYXR0ci4uLl0gWy0tXSBwYXRobmFtZS4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMgorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy1hIHwgLS1hbGwgfCBhdHRyLi4uXSA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxOQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMAorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3NQorIywgZnV6enkKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi77yI5q2j5LuO5qCH5YeG6L6T5YWl5Lit6K+75Y+W5pel5b+X5L+h5oGv77yJXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzCisjLCBmdXp6eQorbXNnaWQgImlucHV0IHBhdGhzIGFyZSB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBjaGFyYWN0ZXIiCittc2dzdHIgIui3r+W+hOS7pSBOVUwg5a2X56ym5YiG6ZqUIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFtvcHRpb25zXSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODcKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTg4Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTAKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTIKKyMsIGZ1enp5Cittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICLkuI3og73mo4Dlh7ogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTQKKyMsIGZ1enp5Cittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgIuaXoOazleWGmeaWsOeahOe0ouW8leaWh+S7tiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwMAorIywgZnV6enkKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIu+8iOato+S7juagh+WHhui+k+WFpeS4reivu+WPluaXpeW/l+S/oeaBr++8iVxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAyCittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDMgYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA0Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA3Cittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI1CisjLCBmdXp6eQorbXNnaWQgImdpdCBjaGVja291dCBbb3B0aW9uc10gPGJyYW5jaD4iCittc2dzdHIgImdpdCBhcHBseSBb6YCJ6aG5XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFtvcHRpb25zXSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGFwcGx5IFvpgInpobldIFs86KGl5LiBPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTYgYnVpbHRpbi9jaGVja291dC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAi6Lev5b6EICclcycg5rKh5pyJ5oiR5Lus55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAi6Lev5b6EICclcycg5rKh5pyJ5LuW5Lus55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIui3r+W+hCAnJXMnIOayoeacieWFqOmDqOW/hemhu+eahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIui3r+W+hCAnJXMnIOayoeacieW/hemhu+eahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAicGF0aCAnJXMn77ya5peg5rOV5ZCI5bm2IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICLml6Dms5XkuLogJyVzJyDmt7vliqDlkIjlubbnu5PmnpwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzYgYnVpbHRpbi9jaGVja291dC5jOjIzOSBidWlsdGluL2NoZWNrb3V0LmM6MjQyCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIiVz77yaJXMg5LiN6IO95ZKMICVzIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0OCBidWlsdGluL2NoZWNrb3V0LmM6MjUxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVz77yaJXMg5LiN6IO95ZKMICVzIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2NSBidWlsdGluL2NoZWNrb3V0LmM6NDI2Cittc2dpZCAiY29ycnVwdCBpbmRleCBmaWxlIgorbXNnc3RyICLmjZ/lnY/nmoTntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyOTUgYnVpbHRpbi9jaGVja291dC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgIui3r+W+hCAnJXMnIOacquWQiOW5tiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMzMyBidWlsdGluL2NoZWNrb3V0LmM6NTM0IGJ1aWx0aW4vY2xvbmUuYzo1ODYKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MTEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIuaXoOazleWGmeaWsOeahOe0ouW8leaWh+S7tiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0OAorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLmgqjpnIDopoHlhYjop6PlhrPlvZPliY3ntKLlvJXnmoTlhrLnqoEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcydcbiIKK21zZ3N0ciAi5LiN6IO95a+5ICclcycg5omn6KGMIHJlZmxvZyDmk43kvZxcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYwMgorbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICJIRUFEIOebruWJjeS9jeS6jiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLph43nva7liIbmlK8gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICLlt7Lnu4/kvY3kuo4gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLliIfmjaLlubbph43nva7liIbmlK8gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIuWIh+aNouWIsOS4gOS4quaWsOWIhuaUryAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAi5YiH5o2i5Yiw5YiG5pSvICclcydcbiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4g5Y+K5YW25a6DICVkIOS4quOAglxuIgorCisjLiBUaGUgc2luZ3VsYXIgdmVyc2lvbgorIzogYnVpbHRpbi9jaGVja291dC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIuitpuWRiu+8muaCqOato+S4ouS4iyAlZCDkuKrmj5DkuqTvvIzmnKrlkozku7vkvZXliIbmlK/lhbPogZTvvJpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzFdICIiCisi6K2m5ZGK77ya5oKo5q2j5Lii5LiLICVkIOS4quaPkOS6pO+8jOacquWSjOS7u+S9leWIhuaUr+WFs+iBlO+8mlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCBuZXdfYnJhbmNoX25hbWUgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuWmguaenOaCqOaDs+imgemAmui/h+WIm+W7uuaWsOWIhuaUr+S/neWtmOS7luS7rO+8jOi/meWPr+iDveaYr+S4gOS4quWlveaXtuWAmeOAglxuIgorIuWmguS4i+aTjeS9nO+8mlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIG5ld19icmFuY2hfbmFtZSAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzMwCittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAi5Zyo54mI5pys6YGN5Y6G5pe26YGH5Yiw5YaF6YOo6ZSZ6K+vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzM0Cittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIuS5i+WJjeeahCBIRUFEIOS9jee9ruaYryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjc2MSBidWlsdGluL2NoZWNrb3V0LmM6OTUwCittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAi5oKo5L2N5LqO5LiA5Liq5bCa5pyq5Yid5aeL5YyW55qE5YiG5pSvIgorCisjLiBjYXNlICgxKQorIzogYnVpbHRpbi9jaGVja291dC5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIuaXoOaViOW8leeUqO+8miVzIgorCisjLiBjYXNlICgxKTogd2FudCBhIHRyZWUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICLlvJXnlKjkuI3mmK/kuIDkuKrmoJHvvJolcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2MQorIywgZnV6enkKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiLS1vdXJzLy0tdGhlaXJzIOWSjOWIh+aNouWIhuaUr+S4jeWFvOWuueOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2NCBidWlsdGluL2NoZWNrb3V0LmM6OTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICIlc++8miVzIOS4jeiDveWSjCAlcyDlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzIgYnVpbHRpbi9jaGVja291dC5jOjk3NSBidWlsdGluL2NoZWNrb3V0LmM6OTgwCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiJXPvvJolcyDkuI3og73lkowgJXMg5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAi5peg5rOV5YiH5o2i5YiG5pSv5Yiw5LiA5Liq6Z2e5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwOSBidWlsdGluL2djLmM6MTc3Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEyIGJ1aWx0aW4vY2xvbmUuYzo4OQorIzogYnVpbHRpbi9yZW1vdGUuYzoxNjkgYnVpbHRpbi9yZW1vdGUuYzoxNzEKKyMsIGZ1enp5Cittc2dpZCAiYnJhbmNoIgorbXNnc3RyICLkvY3kuo7liIbmlK8gIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMQorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEzCittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxNAorIywgZnV6enkKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLliJflh7rjgIHliJvlu7rmiJbliKDpmaTliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDE1Cittc2dpZCAiZGV0YWNoIHRoZSBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxNgorIywgZnV6enkKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAi5bCa5pyq57uZ5YiG5pSvICclcycg6K6+572u5LiK5ri4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxOAorIywgZnV6enkKK21zZ2lkICJuZXcgYnJhbmNoIgorbXNnc3RyICJb5paw5YiG5pSvXSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTgKKyMsIGZ1enp5Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICLmsqHmnInlvZPliY3liIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDE5Cittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDIxCittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjMKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAyNAorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDI1IGJ1aWx0aW4vbWVyZ2UuYzoyMTUKKyMsIGZ1enp5Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICLmm7TmlrDmlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDI2IGJ1aWx0aW4vbG9nLmM6MTExMSBwYXJzZS1vcHRpb25zLmg6MjQxCittc2dpZCAic3R5bGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjcKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDMwCittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgbm8tc3VjaC1icmFuY2gnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDU0CisjLCBmdXp6eQorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLW4g5ZKMIC1rIOS6kuaWpeOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzEKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tdHJhY2sg6ZyA6KaB5LiA5Liq5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3OAorbXNnaWQgIk1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAi57y65bCR5YiG5pSv5ZCN77yb5bCd6K+VIC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTExMworbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICLml6DmlYjnmoTot6/lvoTop4TmoLwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTIwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuXG4iCisiRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyVzJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXTvvJrmm7TmlrDot6/lvoTlkozliIfmjaLliIbmlK/kuI3lhbzlrrnjgIJcbiIKKyLmgqjmmK/mg7PopoHmo4Dlh7ogJyVzJyDkvYbmnKrog73lsIblhbbop6PmnpDkuLrmj5DkuqTkuYjvvJ8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciCittc2dzdHIgImdpdCBjaGVja291dO+8mi0tZGV0YWNoIOS4jei3n+i3r+W+hOWPguaVsCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjkKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXTvvJrlnKjku47ntKLlvJXmo4Dlh7rml7bvvIwtLW91cnMvLS10aGVpcnPjgIEtLWZvcmNlIOWSjCAtLW1lcmdlIOS4jeWFvOWuueOAgiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE5Cittc2dpZCAiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTEKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTMKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTUKKyMsIGZ1enp5Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICLkuKTkuKrovpPlh7rnm67lvZXvvJ8iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1NiBidWlsdGluL2Rlc2NyaWJlLmM6NDEzIGJ1aWx0aW4vZ3JlcC5jOjgwMgorIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5MSBidWlsdGluL25hbWUtcmV2LmM6MjMxIGJ1aWx0aW4vc2hvdy1yZWYuYzoxOTkKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1NworbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1OAorbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjYwCittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzgKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IOWSjCAtWCDkuI3og73lkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MgorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLW4gbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSDorr7nva7kuLogdHJ1ZSDkuJTmnKrmj5DkvpsgLW4g5oiWIC1mIOmAiemhue+8jOaLkue7neaJp+ihjOa4heeQhuWKqOS9nCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg1Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1uIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gIgorImNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIOm7mOiupOS4uiB0cnVlIOS4lOacquaPkOS+myAtbiDmiJYgLWYg6YCJ6aG577yM5ouS57ud5omn6KGM5riF55CG5Yqo5L2cIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTU1IGJ1aWx0aW4vY2xlYW4uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIuWwhuWIoOmZpCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTU5IGJ1aWx0aW4vY2xlYW4uYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAi5q2j5Yig6ZmkICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNjIgYnVpbHRpbi9jbGVhbi5jOjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICLml6Dms5XliKDpmaQgJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgbm90IHJlbW92ZSAlc1xuIgorbXNnc3RyICLkuI3kvJrliKDpmaQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgcmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAi5pyq5Yig6ZmkICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNgorbXNnaWQgImdpdCBjbG9uZSBbb3B0aW9uc10gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjQgYnVpbHRpbi9mZXRjaC5jOjgyIGJ1aWx0aW4vbWVyZ2UuYzoyMTIKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5OQorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjYKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjcgYnVpbHRpbi9jbG9uZS5jOjY5IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4OAorIywgZnV6enkKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIuS4jeaYr+S4gOS4qiBnaXQg54mI5pys5bqTIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzIKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzQKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzYKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzgKKyMsIGZ1enp5Cittc2dpZCAic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiCittc2dzdHIgIuS4jeaYr+S4gOS4qiBnaXQg54mI5pys5bqTIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODAgYnVpbHRpbi9jbG9uZS5jOjgyCittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODMgYnVpbHRpbi9pbml0LWRiLmM6NDg1CisjLCBmdXp6eQorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAi5paH5Lu2L+ebruW9lSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NgorbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3IGJ1aWx0aW4vY29sdW1uLmM6MjYgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKKyMsIGZ1enp5Cittc2dpZCAibmFtZSIKK21zZ3N0ciAi6YeN5ZG95ZCNIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODgKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIKK21zZ2lkICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MyBidWlsdGluL2ZldGNoLmM6ODMgYnVpbHRpbi9ncmVwLmM6NzQ3Cittc2dpZCAiZGVwdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NgorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTcgYnVpbHRpbi9pbml0LWRiLmM6NDk0Cittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OCBidWlsdGluL2luaXQtZGIuYzo0OTUKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCisjLCBmdXp6eQorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6K6w5b2V5Y+Y5pu05Yiw54mI5pys5bqTIgorCisjOiBidWlsdGluL2Nsb25lLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgZGlyZWN0b3J5LiIKK21zZ3N0ciAi5byV55So54mI5pys5bqTICclcycg5LiN5piv5LiA5Liq5pys5Zyw55uu5b2V44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuaXoOazleWIm+W7uuebruW9lSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA4IGJ1aWx0aW4vZGlmZi5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgIuaXoOazleaemuS4viAnJXMnIOeKtuaAgSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMg5a2Y5Zyo5LiU5LiN5piv5LiA5Liq55uu5b2VIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzXG4iCittc2dzdHIgIuaXoOazleaemuS4viAlcyDnirbmgIFcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAi5peg5rOV5Yib5bu66ZO+5o6lICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICLml6Dms5Xmi7fotJ3mlofku7boh7MgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICLlrozmiJDjgIJcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAi5LiN6IO95Y+R546w6KaB5YWL6ZqG55qE6L+c56iL5YiG5pSvICVz44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTUyCittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICLov5znqIsgSEVBRCDmjIflkJHkuIDkuKrkuI3lrZjlnKjnmoTlvJXnlKjvvIzml6Dms5Xmo4Dlh7rjgIJcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0MgorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIuWkquWkmuWPguaVsOOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0NgorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAi5oKo5b+F6aG75oyH5a6a5LiA5Liq54mI5pys5bqT5p2l5YWL6ZqG44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlIOWSjCAtLW9yaWdpbiAlcyDpgInpobnkuI3lhbzlrrnjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLniYjmnKzlupMgJyVzJyDkuI3lrZjlnKgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NzYKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCDlnKjmnKzlnLDlhYvpmobooqvlv73nlaXvvIzmlLnkuLogZmlsZTovLyDljY/orq7or5Xor5XjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAi55uu5qCH6Lev5b6EICclcycg5bey57uP5a2Y5Zyo77yM5bm25LiU5LiN5piv5LiA5Liq56m655uu5b2V44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi5bel5L2c5Yy6ICclcycg5bey57uP5a2Y5Zyo44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA5IGJ1aWx0aW4vY2xvbmUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIuS4jeiDveS4uiAnJXMnIOWIm+W7uuWFiOWvvOebruW9lSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJy4iCittc2dzdHIgIuS4jeiDveS4uiAnJXMnIOWIm+W7uuW3peS9nOWMuuebruW9leOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAi5YWL6ZqG5Yiw6KO454mI5pys5bqTICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICLmraPlhYvpmobliLAgJyVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorbXNnc3RyICLkuI3nn6XpgZPlpoLkvZXlhYvpmoYgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIui/nOeoi+WIhuaUryAlcyDlnKjkuIrmuLggJXMg5pyq5Y+R546wIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODQ1Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAi5oKo5Ly85LmO5YWL6ZqG5LqG5LiA5Liq56m654mI5pys5bqT44CCIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjkKK21zZ2lkICJnaXQgY29sdW1uIFtvcHRpb25zXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI2Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9jb2x1bW4uYzoyOAorIywgZnV6enkKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICLmnKzlnLDlt7Lov4fml7YiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzEKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIOW/hemhu+aYr+esrOS4gOS4quWPguaVsCIKKworIzogYnVpbHRpbi9jb21taXQuYzozMworIywgZnV6enkKK21zZ2lkICJnaXQgY29tbWl0IFtvcHRpb25zXSBbLS1dIDxmaWxlcGF0dGVybj4uLi4iCittc2dzdHIgImdpdCBhcHBseSBb6YCJ6aG5XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4CisjLCBmdXp6eQorbXNnaWQgImdpdCBzdGF0dXMgW29wdGlvbnNdIFstLV0gPGZpbGVwYXR0ZXJuPi4uLiIKK21zZ3N0ciAiZ2l0IGFwcGx5IFvpgInpobldIFs86KGl5LiBPi4uLl0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDMKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyLmgqjnmoTlp5PlkI3lkozpgq7ku7blnLDlnYDln7rkuo7nmbvlvZXlkI3lkozkuLvmnLrlkI3ov5vooYzkuoboh6rliqjorr7nva7jgILor7fmo4Dmn6XlroPku6zmraPnoa5cbiIKKyLkuI7lkKbjgILmgqjlj6/ku6XpgJrov4fkuIvpnaLnmoTlkb3ku6Tlr7nlhbbov5vooYzmmI7noa7lnLDorr7nva7ku6XlhY3lho3lh7rnjrDmnKzmj5DnpLrkv6Hmga/vvJpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisi6K6+572u5a6M5q+V5ZCO77yM5oKo5Y+v5Lul55So5LiL6Z2i55qE5ZG95Luk5p2l5L+u5q2j5pys5qyh5o+Q5Lqk5omA5L2/55So55qE55So5oi36Lqr5Lu977yaXG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU1Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisi5oKo6KaB5L+u6KGl5pyA6L+R55qE5o+Q5Lqk77yM5L2G6L+Z5LmI5YGa5Lya6K6p5a6D5oiQ5Li656m65o+Q5Lqk44CC5oKo5Y+v5Lul6YeN5aSN5oKo55qE5ZG95Luk5bm25bim5LiKXG4iCisiLS1hbGxvdy1lbXB0eSDpgInpobnvvIzmiJbogIXmgqjlj6/nlKjlkb3ku6QgXCJnaXQgcmVzZXQgSEVBRF5cIiDmlbTkuKrliKDpmaTor6Xmj5DkuqTjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MAorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IHJlc2V0J1xuIgorbXNnc3RyICIiCisi5LmL5YmN55qE5ouj6YCJ5pON5L2c546w5Zyo5piv5LiA5Liq56m65o+Q5Lqk77yM5Y+v6IO95piv55Sx5Yay56qB6Kej5Yaz5a+86Ie055qE44CC5aaC5p6c5oKo5peg6K665aaC5L2VXG4iCisi5Lmf6KaB5o+Q5Lqk77yM5L2/55So5ZG95Luk77yaXG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorIuWQpuWIme+8jOivt+S9v+eUqOWRveS7pCAnZ2l0IHJlc2V0J1xuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjI1NgorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAi5peg5rOV6Kej5YyFIEhFQUQg5qCR5a+56LGhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjI5OAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICLkuI3og73liJvlu7rkuLTml7bntKLlvJUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzA0Cittc2dpZCAiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIKK21zZ3N0ciAi5Lqk5LqS5byP5re75Yqg5aSx6LSlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMzNyBidWlsdGluL2NvbW1pdC5jOjM1OCBidWlsdGluL2NvbW1pdC5jOjQwOAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAi5peg5rOV5YaZIG5ld19pbmRleCDmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzg5Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICLlnKjlkIjlubbov4fnqIvkuK3kuI3og73lgZrpg6jliIbmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzkxCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLlnKjmi6PpgInov4fnqIvkuK3kuI3og73lgZrpg6jliIbmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDAxCittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLml6Dms5Xor7vlj5bntKLlvJUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDIxCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlhpnkuLTml7bntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTEwIGJ1aWx0aW4vY29tbWl0LmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0OiAlcyIKK21zZ3N0ciAi5peg5pWI55qE5o+Q5Lqk77yaJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTM5Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAi6Z2e5rOV55qEIC0tYXV0aG9yIOWPguaVsCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlkZW50IHN0cmluZzogJyVzJyIKK21zZ3N0ciAi6Z2e5rOV55qE6Lqr5Lu95a2X56ym5Liy77yaJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MzggYnVpbHRpbi9jb21taXQuYzo2NzEgYnVpbHRpbi9jb21taXQuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveafpeivouaPkOS6pCAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NTAgYnVpbHRpbi9zaG9ydGxvZy5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICLvvIjmraPku47moIflh4bovpPlhaXkuK3or7vlj5bml6Xlv5fkv6Hmga/vvIlcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NTIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5LiN6IO95LuO5qCH5YeG6L6T5YWl5Lit6K+75Y+W5pel5b+X5L+h5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5bml6Xlv5fmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NjIKK21zZ2lkICJjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgIuaPkOS6pOivtOaYjuS4uuepuiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NzgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgIuS4jeiDveivu+WPliBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjgyCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAi5LiN6IO96K+75Y+WIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIuS4jeiDveivu+WPliAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczOAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIuS4jeiDveWGmeaPkOS6pOaooeeJiCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisi5Ly85LmO5oKo5q2j5Zyo5YGa5LiA5Liq5ZCI5bm25o+Q5Lqk44CC5aaC5p6c5LiN5a+577yM6K+35Yig6Zmk5paH5Lu2XG4iCisiXHQlc1xuIgorIueEtuWQjumHjeivleOAglxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLkvLzkuY7mgqjmraPlnKjlgZrkuIDkuKrmi6PpgInmj5DkuqTjgILlpoLmnpzkuI3lr7nvvIzor7fliKDpmaTmlofku7ZcbiIKKyJcdCVzXG4iCisi54S25ZCO6YeN6K+V44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzY2Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisi6K+35Li65oKo55qE5Y+Y5pu06L6T5YWl5o+Q5Lqk6K+05piO44CC5LulICcjJyDlvIDlp4vnmoTooYzlsIbooqvlv73nlaXvvIzogIzkuIDkuKrnqbrnmoTmj5DkuqRcbiIKKyLor7TmmI7lsIbkvJrnu4jmraLmj5DkuqTjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzEKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisi6K+35Li65oKo55qE5Y+Y5pu06L6T5YWl5o+Q5Lqk6K+05piO44CC5LulICcjJyDlvIDlp4vnmoTooYzlsIbooqvkv53nlZnvvIzmgqjlj6/ku6XliKDpmaTlroPku6xcbiIKKyLlpoLmnpzmgqjmg7Pov5nmoLflgZrnmoTor53jgILogIzkuIDkuKrnqbrnmoTmj5DkuqTor7TmmI7lsIbkvJrnu4jmraLmj5DkuqTjgIJcbiIKKworIyAg6K+R6ICF77ya5Li65L+d6K+B5Zyo6L6T5Ye65Lit5a+56b2Q77yM5rOo5oSP6LCD5pW05Y+l5Lit56m65qC877yBCisjOiBidWlsdGluL2NvbW1pdC5jOjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJXMiCittc2dzdHIgIiVz5L2c6ICF77yaICAgICAlcyIKKworIyAg6K+R6ICF77ya5Li65L+d6K+B5Zyo6L6T5Ye65Lit5a+56b2Q77yM5rOo5oSP6LCD5pW05Y+l5Lit56m65qC877yBCisjOiBidWlsdGluL2NvbW1pdC5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJXMiCittc2dzdHIgIiVz5o+Q5Lqk6ICF77yaICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODExCittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIuaXoOazleivu+WPlue0ouW8lSIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDgKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAi5peg5rOV5Yib5bu65qCR5a+56LGhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg2MyBidWlsdGluL3RhZy5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIuivt+S9v+eUqCAtbSDmiJbogIUgLUYg6YCJ6aG55o+Q5L6b5o+Q5Lqk6K+05piO44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGV4aXN0aW5nIGF1dGhvciBmb3VuZCB3aXRoICclcyciCittc2dzdHIgIuayoeacieaJvuWIsOWMuemFjSAnJXMnIOeahOS9nOiAhSIKKworIzogYnVpbHRpbi9jb21taXQuYzo5NzUgYnVpbHRpbi9jb21taXQuYzoxMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAi5peg5pWI55qE5pyq6L+96Liq5paH5Lu25Y+C5pWwICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxNQorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuWQjOaXtuS9v+eUqCAtLXJlc2V0LWF1dGhvciDlkowgLS1hdXRob3Ig5rKh5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMjYKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAi5oKo5rKh5pyJ5Y+v5L+u6KGl55qE5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMjkKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLmgqjmraPlpITkuo7kuIDkuKrlkIjlubbov4fnqIvkuK0gLS0g5peg5rOV5L+u6KGl5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMzEKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLmgqjmraPlpITkuo7kuIDkuKrmi6PpgInov4fnqIvkuK0gLS0g5peg5rOV5L+u6KGl5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMzQKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLpgInpobkgLS1zcXVhc2gg5ZKMIC0tZml4dXAg5LiN6IO95ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNDQKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAi5Y+q6IO955So5LiA5LiqIC1jLy1DLy1GLy0tZml4dXAg6YCJ6aG544CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNDYKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYvLS1maXh1cC4iCittc2dzdHIgIumAiemhuSAtbSDkuI3og73lkowgLWMvLUMvLUYvLS1maXh1cCDlkIzml7bkvb/nlKjjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NAorbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIOWPquiDveWSjCAtQ+OAgS1jIOaIliAtLWFtZW5kIOWQjOaXtuS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDcxCittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICLlj6rog73nlKjkuIDkuKogLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2gg6YCJ6aG544CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNzMKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIuWPguaVsCAtLWluY2x1ZGUvLS1vbmx5IOS4jei3n+i3r+W+hOayoeacieaEj+S5ieOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDc1Cittc2dpZCAiQ2xldmVyLi4uIGFtZW5kaW5nIHRoZSBsYXN0IG9uZSB3aXRoIGRpcnR5IGluZGV4LiIKK21zZ3N0ciAi6IGq5piOLi4uIOWcqOe0ouW8leS4jeW5suWHgOS4i+S/ruihpeacgOWQjueahOaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDc3Cittc2dpZCAiRXhwbGljaXQgcGF0aHMgc3BlY2lmaWVkIHdpdGhvdXQgLWkgbm9yIC1vOyBhc3N1bWluZyAtLW9ubHkgcGF0aHMuLi4iCittc2dzdHIgIuaMh+WumuS6huaYjuehrueahOi3r+W+hOiAjOayoeacieS9v+eUqCAtaSDmiJYgLW8g6YCJ6aG577yb6K6k5Li65pivIC0tb25seSBwYXRocy4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDg3IGJ1aWx0aW4vdGFnLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICLml6DmlYjnmoTmuIXnkIbmqKHlvI8gJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA5MgorbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIui3r+W+hOWSjCAtYSDpgInpobnlkIzml7bkvb/nlKjmsqHmnInmhI/kuYnjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4OSBidWlsdGluL2NvbW1pdC5jOjE0MTcKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkxIGJ1aWx0aW4vY29tbWl0LmM6MTQxOQorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5MyBidWlsdGluL2NvbW1pdC5jOjE0MjEgYnVpbHRpbi9wdXNoLmM6Mzg5Cittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk2IGJ1aWx0aW4vY29tbWl0LmM6MTQyMworbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5OCBidWlsdGluL2NvbW1pdC5jOjE0MjYgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjYzNgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjYzOSBidWlsdGluL3RhZy5jOjQ2MQorbXNnaWQgIm1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk5IGJ1aWx0aW4vY29tbWl0LmM6MTQyNgorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDIKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjAzIHBhcnNlLW9wdGlvbnMuaDoxNTEKK21zZ2lkICJ3aGVuIgorbXNnc3RyICLkvZXml7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwNAorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDYKKyMsIGZ1enp5Cittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAi5peg5pWI55qE5pyq6L+96Liq5paH5Lu25Y+C5pWwICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTI3NQorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIuaXoOazleaJvuWIsOaWsOWIm+W7uueahOaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjc3Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICLkuI3og73op6PmnpDmlrDliJvlu7rnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMxOAorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgIuWIhuemu+WktOaMh+mSiCIKKworIyAg6K+R6ICF77ya5Lit5paH5a2X56ym5Liy5ou85o6l77yM5Y+v5Yig6Zmk5YmN5a+856m65qC8CisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjAKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAi77yI5qC55o+Q5Lqk77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODcKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4OAorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTAKKyMsIGZ1enp5Cittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAi5LiN6IO95b6X5YiwICVzIOeahOaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzkxIGJ1aWx0aW4vdGFnLmM6NDU5Cittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTIKK21zZ2lkICJhdXRob3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzkyCisjLCBmdXp6eQorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICLlkIjlubbmnKrov5Tlm57mj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5MyBidWlsdGluL2djLmM6MTc4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTMKKyMsIGZ1enp5Cittc2dpZCAib3ZlcnJpZGUgZGF0ZSBmb3IgY29tbWl0IgorbXNnc3RyICLlkIjlubbmnKrov5Tlm57mj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5NCBidWlsdGluL21lcmdlLmM6MjA2IGJ1aWx0aW4vbm90ZXMuYzo1MzQKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTEgYnVpbHRpbi90YWcuYzo0NTcKKyMsIGZ1enp5Cittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAi5pegIHRhZyDor7TmmI7vvJ8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5NAorIywgZnV6enkKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi56m65o+Q5Lqk5L+h5oGv44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTUKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTYKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTcKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5OAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5OQorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDAwIGJ1aWx0aW4vbG9nLmM6MTA2OCBidWlsdGluL3JldmVydC5jOjEwOQorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MDEKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDAyCisjLCBmdXp6eQorbXNnaWQgImZvcmNlIGVkaXQgb2YgY29tbWl0IgorbXNnc3RyICLlkIjlubbmnKrov5Tlm57mj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQwMworbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDAzIGJ1aWx0aW4vdGFnLmM6NDYyCittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MDQKKyMsIGZ1enp5Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIuS4jeiDveWGmeaPkOS6pOaooeeJiCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDA1IGJ1aWx0aW4vbWVyZ2UuYzoyMTMgYnVpbHRpbi90YWcuYzo0NjMKK21zZ2lkICJrZXkgaWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDA2IGJ1aWx0aW4vbWVyZ2UuYzoyMTQKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIiIKKworIy4gZW5kIGNvbW1pdCBtZXNzYWdlIG9wdGlvbnMKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQwOQorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQxMAorbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MTEKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDEyCisjLCBmdXp6eQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICLkuqTkupLlvI/mt7vliqDlpLHotKUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQxMworIywgZnV6enkKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICLkuqTkupLlvI/mt7vliqDlpLHotKUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQxNAorIywgZnV6enkKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgIuaXoOazlei/mOWOn+S/ruaUueeahOaWh+S7tiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDE1Cittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgaG9vayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MTYKKyMsIGZ1enp5Cittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAi6KaB5o+Q5Lqk55qE5Y+Y5pu077yaIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MjQKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDI1Cittc2dpZCAiYnlwYXNzIHBvc3QtcmV3cml0ZSBob29rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQzMAorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDMzCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NjQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEIOaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyIGJ1aWx0aW4vbWVyZ2UuYzo1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAi5LiN6IO95Li66K+75YWl5omT5byAICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICLmjZ/lnY/nmoQgTUVSR0VfSEVBRCDmlofku7bvvIglc++8iSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAi5LiN6IO96K+75Y+WIE1FUkdFX01PREUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgIuS4jeiDveivu+WPluaPkOS6pOivtOaYju+8miVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICLnu4jmraLmj5DkuqTvvJvmgqjmnKrmm7TmlLnmnaXoh6rmqKHniYjnmoTmj5DkuqTor7TmmI7jgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgIue7iOatouaPkOS6pOWboOS4uuaPkOS6pOivtOaYjuS4uuepuuOAglxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NjkgYnVpbHRpbi9tZXJnZS5jOjkzNSBidWlsdGluL21lcmdlLmM6OTYwCittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgIuaXoOazleWGmeaPkOS6pOWvueixoSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTkwCittc2dpZCAiY2Fubm90IGxvY2sgSEVBRCByZWYiCittc2dzdHIgIuaXoOazlemUgeWumiBIRUFEIOW8leeUqCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk0Cittc2dpZCAiY2Fubm90IHVwZGF0ZSBIRUFEIHJlZiIKK21zZ3N0ciAi5peg5rOV5pu05pawIEhFQUQg5byV55SoIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDUKK21zZ2lkICIiCisiUmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBvciBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi54mI5pys5bqT5bey5pu05paw77yM5L2G5peg5rOV5YaZIG5ld19pbmRleCDmlofku7bjgILmo4Dmn6XmmK/lkKbno4Hnm5jlt7Lmu6FcbiIKKyLmiJbno4Hnm5jphY3pop3lt7LogJflsL3vvIznhLblkI7miafooYwgXCJnaXQgcmVzZXQgSEVBRFwiIOaBouWkjeOAgiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3Cittc2dpZCAiZ2l0IGNvbmZpZyBbb3B0aW9uc10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MgorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTMKKyMsIGZ1enp5Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAi5peg5rOV5pu05pawIGNvbmZpZyDmlofku7YiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTQKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTUKKyMsIGZ1enp5Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgIumcgOimgeS4gOS4queJiOacrOW6k+adpeino+WMheOAgiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NgorIywgZnV6enkKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgIuacqumihOacn+eahOaWh+S7tue7k+adnyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NworIywgZnV6enkKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgIuWKqOS9nCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OAorbXNnaWQgImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTkKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjEKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYyCittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjMKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjQKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1Cittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjYKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjcKK21zZ2lkICJsaXN0IGFsbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY4Cittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OSBidWlsdGluL2NvbmZpZy5jOjcwCittc2dpZCAic2xvdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5Cittc2dpZCAiZmluZCB0aGUgY29sb3IgY29uZmlndXJlZDogW2RlZmF1bHRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzAKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MQorbXNnaWQgIlR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MgorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczCittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NAorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc1Cittc2dpZCAidmFsdWUgaXMgYSBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSBuYW1lKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2Cittc2dpZCAiT3RoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NworbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjY5Cittc2dpZCAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTUKK21zZ2lkICJnaXQgZGVzY3JpYmUgW29wdGlvbnNdIDxjb21taXR0aXNoPioiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjE2Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFtvcHRpb25zXSAtLWRpcnR5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICLms6jph4ogdGFnICVzIOaXoOaViCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICLms6jph4ogdGFnICVzIOayoeacieW1jOWFpeWQjeensCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICJ0YWcgJyVzJyDnmoTnoa7mmK/lnKggJyVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5Liq5pyJ5pWI55qE5a+56LGh5ZCNICVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyDkuI3mmK/kuIDkuKrmnInmlYjnmoQgJyVzJyDlr7nosaEiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICLmsqHmnIkgdGFnIOWHhuehruWMuemFjSAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInNlYXJjaGluZyB0byBkZXNjcmliZSAlc1xuIgorbXNnc3RyICLmkJzntKLmj4/ov7AgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAi5a6M5oiQ5pCc57SiICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyLmsqHmnInms6jph4ogdGFnIOiDveaPj+i/sCAnJXMn44CCXG4iCisi54S26ICM77yM5pyJ6Z2e5rOo6YeKIHRhZ++8muWwneivlSAtLXRhZ3PjgIIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIuayoeacieazqOmHiiB0YWcg6IO95o+P6L+wICclcyfjgIJcbiIKKyLlsJ3or5UgLS1hbHdheXPvvIzmiJbogIXliJvlu7rkuIDkupsgdGFn44CCIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICLlt7LpgY3ljoYgJWx1IOS4quaPkOS6pFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorIuWPkeeOsOWkmuS6jiAlaSDkuKogdGFn77yM5YiX5Ye65pyA6L+R55qEICVpIOS4qlxuIgorIuWcqCAlcyDmlL7lvIPmkJzntKJcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwMworbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNAorbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNQorbXNnaWQgInVzZSBhbnkgcmVmIGluIC5naXQvcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA2Cittc2dpZCAidXNlIGFueSB0YWcgaW4gLmdpdC9yZWZzL3RhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNworbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMAorIywgZnV6enkKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICLmsqHmnIkgdGFnIOWHhuehruWMuemFjSAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDEyCittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDE0CisjLCBmdXp6eQorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIui+k+WHuuWSjOaooeW8j+WMuemFjeeahOihjCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxNiBidWlsdGluL25hbWUtcmV2LmM6MjM4Cittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTcKK21zZ2lkICJtYXJrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTgKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQzNgorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcg5LiOIC0tYWJicmV2PTAg5LiN5YW85a65IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDYyCittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIuayoeacieWPkeeOsOWQjeensO+8jOaXoOazleaPj+i/sOS7u+S9leS4nOilv+OAgiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ4MgorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0dGlzaGVzIgorbXNnc3RyICItLWRpcnR5IOS4jeiDveS4juaPkOS6pOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9kaWZmLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiclcyfvvJrkuI3mmK/kuIDkuKrmraPop4Tmlofku7bmiJbnrKblj7fpk77mjqUiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIuaXoOaViOmAiemhue+8miVzIgorCisjOiBidWlsdGluL2RpZmYuYzozMDEKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5LiN5piv5LiA5LiqIGdpdCDniYjmnKzlupMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAi5o+Q5L6b5LqG5peg5pWI5a+56LGhICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gJWQgdHJlZXMgZ2l2ZW46ICclcyciCittc2dzdHIgIuaPkOS+m+S6hui2hei/hyAlZCDkuKrmoJHlr7nosaHvvJonJXMnIgorCisjOiBidWlsdGluL2RpZmYuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAi5o+Q5L6b5LqG6LaF6L+H5Lik5Liq5LqM6L+b5Yi25a+56LGh77yIYmxvYu+8ie+8miclcyciCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICLmj5Dkvpvkuobml6Dms5XlpITnkIbnmoTlr7nosaEgJyVzJ+OAgiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjIyCittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjM1CisjLCBmdXp6eQorbXNnaWQgInNob3cgcHJvZ3Jlc3MgYWZ0ZXIgPG4+IG9iamVjdHMiCittc2dzdHIgIuaYvuekuuWQhOenjeexu+Wei+eahOWvueixoSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjYzNworbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjQwCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjQzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0NQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjQ3Cittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjY0OQorbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo2NTEKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6NjUyCittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMAorIywgZnV6enkKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBhcHBseSBb6YCJ6aG5XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjEKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjIKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjMKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwCittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjIKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY0Cittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY3Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2OQorIywgZnV6enkKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLmm7TmlrDov5znqIvlvJXnlKjlkoznm7jlhbPnmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MQorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzMKKyMsIGZ1enp5Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgIiVzIOayoeacieadpeiHqiAlcyDnmoTov5znqIvot5/ouKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NAorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzUKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3OQorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MQorIywgZnV6enkKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAi5peg5rOV5pu05pawIEhFQUQg5byV55SoIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODQKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NSBidWlsdGluL2xvZy5jOjEwODMKK21zZ2lkICJkaXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg2CisjLCBmdXp6eQorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgIuaXoOazlemAkuW9kui/m+WtkOaooee7hOi3r+W+hCAnJHNtX3BhdGgnIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODkKK21zZ2lkICJkZWZhdWx0IG1vZGUgZm9yIHJlY3Vyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIuaXoOazleWPkeeOsOi/nOeoiyBIRUFEIOW8leeUqCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICLlr7nosaEgJXMg5pyq5Y+R546wIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjYwCittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJb5pyA5pawXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI3NAorIywgYy1mb3JtYXQKK21zZ2lkICIhICUtKnMgJS0qcyAtPiAlcyAgKGNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoKSIKK21zZ3N0ciAiISAlLSpzICUtKnMgLT4gJXMgIO+8iOWcqOW9k+WJjeWIhuaUr+S4i+S4jeiDveiOt+WPlu+8iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI3NSBidWlsdGluL2ZldGNoLmM6MzYxCittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW+W3suaLkue7nV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyODYKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlt0YWfmm7TmlrBdIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyODggYnVpbHRpbi9mZXRjaC5jOjMyMyBidWlsdGluL2ZldGNoLmM6MzQxCittc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorbXNnc3RyICIgIO+8iOS4jeiDveabtOaWsOacrOWcsOW8leeUqO+8iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwNgorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW+aWsHRhZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIlvmlrDliIbmlK9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzEyCittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJb5paw5byV55SoXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1NworbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICLkuI3og73mm7TmlrDmnKzlnLDlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNTcKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICLlvLrliLbmm7TmlrAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNjMKK21zZ2lkICIobm9uLWZhc3QtZm9yd2FyZCkiCittc2dzdHIgIu+8iOmdnuW/q+i/m+W8j++8iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM5NCBidWlsdGluL2ZldGNoLmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICLml6Dms5XmiZPlvIAgJXPvvJolc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIKK21zZ3N0ciAiJXMg5pyq5Y+R6YCB5omA5pyJ5b+F6aG755qE5a+56LGhXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIuadpeiHqiAlLipzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorIuS4gOS6m+acrOWcsOW8leeUqOS4jeiDveiiq+abtOaWsO+8m+Wwneivlei/kOihjFxuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycg5p2l5Yig6Zmk5pen55qE44CB5pyJ5Yay56qB55qE5YiG5pSvIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAg77yIJXMg5bCG5oiQ5Li65oKs56m654q25oCB77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICDvvIglcyDlt7LmiJDkuLrmgqznqbrnirbmgIHvvIkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTgKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIlvlt7LliKDpmaRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTU5IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NQorbXNnaWQgIihub25lKSIKK21zZ3N0ciAi77yI5peg77yJIgorCisjOiBidWlsdGluL2ZldGNoLmM6Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5ouS57ud6I635Y+W5Yiw6Z2e6KO454mI5pys5bqT55qE5b2T5YmN5YiG5pSvICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGZldGNoIGZyb20gJXMiCittc2dzdHIgIuS4jeefpemBk+WmguS9leS7jiAlcyDojrflj5YiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAi6YCJ6aG5IFwiJXNcIiDnmoTlgLwgXCIlc1wiIOWvueS6jiAlcyDmmK/ml6DmlYjnmoQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICLpgInpobkgXCIlc1wiIOS4uiAlcyDmiYDlv73nlaVcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICLmraPlnKjojrflj5YgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg5NCBidWlsdGluL3JlbW90ZS5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIuS4jeiDveiOt+WPliAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkxMworbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICLmnKrmjIflrprov5znqIvniYjmnKzlupPjgILor7fpgJrov4fkuIDkuKpVUkzmiJbov5znqIvniYjmnKzlupPlkI3mjIflrprvvIznlKjku6Xojrflj5bmlrDmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MzMKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICLmgqjpnIDopoHmjIflrprkuIDkuKogdGFnIOWQjeensOOAgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk4NQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCDkuI3og73luKbkuIDkuKrniYjmnKzlupPlj4LmlbAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5ODcKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImZldGNoIC0tYWxsIOW4puW8leeUqOihqOi+vuW8j+ayoeacieS7u+S9leaEj+S5iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICLmsqHmnInov5nmoLfnmoTov5znqIvmiJbov5znqIvnu4TvvJolcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMDYKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuiOt+WPlue7hOW5tuaMh+WumuW8leeUqOihqOi+vuW8j+ayoeacieaEj+S5iSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTMKK21zZ2lkICJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl18LS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NTMgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjU2IGJ1aWx0aW4vZ3JlcC5jOjc4NgorIzogYnVpbHRpbi9tZXJnZS5jOjE4OCBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU2IGJ1aWx0aW4vc2hvdy1yZWYuYzoxOTIKKyM6IGJ1aWx0aW4vdGFnLmM6NDQ4IHBhcnNlLW9wdGlvbnMuaDoxMzMgcGFyc2Utb3B0aW9ucy5oOjIzNQorbXNnaWQgIm4iCittc2dzdHIgIuaVsOWtlyIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjU0Cittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY1NworbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjYwCittc2dpZCAidGV4dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjEKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjYyCisjLCBmdXp6eQorbXNnaWQgImZpbGUgdG8gcmVhZCBmcm9tIgorbXNnc3RyICLkuI3og73or7sgJXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OTc5CisjLCBmdXp6eQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgW29wdGlvbnNdIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgYXBwbHkgW+mAiemhuV0gWzzooaXkuIE+Li4uXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo5OTQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjk5NgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjk5OAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAwMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgdGNsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAwMworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAwNAorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwMDQKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAwNQorbXNnaWQgImtleSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwMDYKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA4CisjLCBmdXp6eQorbXNnaWQgImdpdCBmc2NrIFtvcHRpb25zXSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgW+mAiemhuV0gWzzooaXkuIE+Li4uXSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE0Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYxNQorIywgZnV6enkKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgIue0ouW8leWvueixoeS4rSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE2Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE3Cittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE4Cittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE5Cittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyMAorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyMQorbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjMKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjQgYnVpbHRpbi9wcnVuZS5jOjEzNAorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjIyCittc2dpZCAiZ2l0IGdjIFtvcHRpb25zXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAi5peg5pWI55qEICVz77yaJyVzJyIKKworIzogYnVpbHRpbi9nYy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgb2JqZWN0IGRpcmVjdG9yeSAlLipzIgorbXNnc3RyICLkuI3mraPluLjnmoTplb/lr7nosaHnm67lvZUgJS4qcyIKKworIzogYnVpbHRpbi9nYy5jOjE3OQorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxODEKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjE4MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIuiHquWKqOaJk+WMheeJiOacrOW6k+S7peaxguacgOS9s+aAp+iDveOAglxuIgorCisjOiBidWlsdGluL2djLmM6MjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuIFlvdSBtYXkgYWxzb1xuIgorInJ1biBcImdpdCBnY1wiIG1hbnVhbGx5LiBTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICIiCisi6Ieq5Yqo5omT5YyF54mI5pys5bqT5Lul5rGC5pyA5L2z5oCn6IO944CC5oKo6L+Y5Y+v5Lul5omL5Yqo6L+Q6KGMIFwiZ2l0IGdjXCLjgIJcbiIKKyLlj4Lop4EgXCJnaXQgaGVscCBnY1wiIOS7peiOt+WPluabtOWkmuS/oeaBr+OAglxuIgorCisjOiBidWlsdGluL2djLmM6MjUxCittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICLmnInlpKrlpJrkuI3lj6/ovr7nmoTmnb7mlaPlr7nosaHvvIzov5DooYwgJ2dpdCBwcnVuZScg5Yig6Zmk5a6D5Lus44CCIgorCisjOiBidWlsdGluL2dyZXAuYzoyMgorbXNnaWQgImdpdCBncmVwIFtvcHRpb25zXSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiZ3JlcO+8muaXoOazleWIm+W7uue6v+eoi++8miVzIgorCisjOiBidWlsdGluL2dyZXAuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNoZGlyOiAlcyIKK21zZ3N0ciAi5peg5rOV5YiH5o2i55uu5b2V77yaJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjUzMCBidWlsdGluL2dyZXAuYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICLml6Dms5Xor7vlj5bmoJHvvIglc++8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgIuaXoOazleaKk+WPluadpeiHquS6jiAlcyDnsbvlnovnmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLlvIDlhbMgYCVjJyDmnJ/mnJvkuIDkuKrmlbDlrZflgLwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICLkuI3og73miZPlvIAgJyVzJyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzI4Cittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzAKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAiIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczMgorIywgZnV6enkKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIu+8iOS9v+eUqCAtdSDlj4LmlbDmmL7npLrmnKrot5/ouKrnmoTmlofku7bvvIkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczNAorbXNnaWQgInNlYXJjaCBhbHNvIGluIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM3Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM5Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NDEKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NDMKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc0NQorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NDgKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzUyCittc2dpZCAidXNlIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzU1Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc1OAorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc2MQorbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NjQKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NjUKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NjYKKyMsIGZ1enp5Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIiVz5paH5Lu277yaIgorCisjOiBidWlsdGluL2dyZXAuYzo3NjgKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc3MAorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NzIKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3NzUKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzc3CisjLCBmdXp6eQorbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgIuS4uuaJgOacieaWh+S7tuWQjeWJjea3u+WKoCA85qC555uu5b2VPiIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzc5Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3ODAKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3ODIKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3ODQKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc4NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc5MAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzkyCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc5MworbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzk2Cittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTgKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDEKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDMKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA1Cittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTcKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTkKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMgorbXNnaWQgInBhZ2VyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNQorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjYgYnVpbHRpbi9zaG93LXJlZi5jOjIwMQorbXNnaWQgInNob3cgdXNhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE3Cittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgIuacquaPkOS+m+aooeW8j+WMuemFjeOAgiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTMxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBvYmplY3QgJXMiCittc2dzdHIgIuWdj+WvueixoSAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTcyCittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICItLW9wZW4tZmlsZXMtaW4tcGFnZXIg5LuF55So5LqO5bel5L2c5Yy6IgorCisjOiBidWlsdGluL2dyZXAuYzo5OTUKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXguIgorbXNnc3RyICItLWNhY2hlZCDmiJYgLS11bnRyYWNrZWQg5LiN6IO95LiOIC0tbm8taW5kZXgg5ZCM5pe25L2/55So44CCIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDAwCittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIgorbXNnc3RyICItLW5vLWluZGV4IOaIliAtLXVudHJhY2tlZCDkuI3og73lkozniYjmnKzlkIzml7bkvb/nlKjjgIIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMDMKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cy4iCittc2dzdHIgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIOS4jeiDveeUqOS6juW3sui3n+i4quWGheWuueOAgiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAxMQorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbi4iCittc2dzdHIgIuWQjOaXtue7meWHuuS6hiAtLWNhY2hlZCDlkozmoJHlr7nosaHjgIIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo2MAorbXNnaWQgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPnwtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSBbLS1dICIKKyI8ZmlsZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjYxCittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwgPGxpc3Qtb2YtcGF0aHM+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3MgorbXNnaWQgInR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjcyCisjLCBmdXp6eQorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICLlnY/nmoTlr7nosaHnsbvlnovjgIIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3MworbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3NAorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3NgorbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo3NworbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzCisjLCBmdXp6eQorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgIuWcqCAnJXMnIOS4i+WPr+eUqOeahCBnaXQg5ZG95LukIgorCisjOiBidWlsdGluL2hlbHAuYzo0NAorbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDUKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0NworbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUzCittc2dpZCAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1tYW58LS13ZWJ8LS1pbmZvXSBbY29tbWFuZF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgIuacquiDveivhuWIq+eahOW4ruWKqeagvOW8jyAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzo5MworbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgIuaXoOazleWQr+WKqCBlbWFjc2NsaWVudOOAgiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA2Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICLml6Dms5Xop6PmnpAgZW1hY3NjbGllbnQg54mI5pys44CCIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAiZW1hY3NjbGllbnQg54mI5pysICclZCcg5aSq6ICBICg8IDIyKeOAgiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTMyIGJ1aWx0aW4vaGVscC5jOjE2MCBidWlsdGluL2hlbHAuYzoxNjkgYnVpbHRpbi9oZWxwLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyc6ICVzIgorbXNnc3RyICLml6Dms5XmiafooYwgJyVzJ++8miVzIgorCisjOiBidWlsdGluL2hlbHAuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMn77ya5LiN5pSv5oyB55qEIG1hbiDmiYvlhozmn6XnnIvlmajnmoTot6/lvoTjgIJcbiIKKyLor7fkvb/nlKggJ21hbi48dG9vbD4uY21kJ+OAgiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IOaUr+aMgeeahCBtYW4g5omL5YaM5p+l55yL5Zmo5ZG95Luk44CCXG4iCisi6K+35L2/55SoICdtYW4uPHRvb2w+LnBhdGgn44CCIgorCisjOiBidWlsdGluL2hlbHAuYzoyOTkKK21zZ2lkICJUaGUgbW9zdCBjb21tb25seSB1c2VkIGdpdCBjb21tYW5kcyBhcmU6IgorbXNnc3RyICLmnIDluLjnlKjnmoQgZ2l0IOWRveS7pOacie+8miIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIiclcyfvvJrmnKrnn6XnmoQgbWFuIOafpeeci+WZqOOAgiIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzg0Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICLmsqHmnIkgbWFuIOafpeeci+WZqOWkhOeQhuatpOivt+axgiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzkyCittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAi5rKh5pyJIGluZm8g5p+l55yL5Zmo5aSE55CG5q2k6K+35rGCIgorCisjOiBidWlsdGluL2hlbHAuYzo0NDcgYnVpbHRpbi9oZWxwLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICLnlKjms5XvvJolcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYGdpdCAlcycgaXMgYWxpYXNlZCB0byBgJXMnIgorbXNnc3RyICJgZ2l0ICVzJyDmmK8gYCVzJyDnmoTliKvlkI0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAiJXMg55qE5a+56LGh57G75Z6L5LiN5Yy56YWNIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxOTAKK21zZ2lkICJvYmplY3Qgb2YgdW5leHBlY3RlZCB0eXBlIgorbXNnc3RyICLmhI/lpJbnmoTnsbvlnovnmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAi5peg5rOV5aGr5YWFICVkIOWtl+iKgiIKK21zZ3N0clsxXSAi5peg5rOV5aGr5YWFICVkIOWtl+iKgiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjM3Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICLov4fml6nnmoTmlofku7bnu5PmnZ/nrKbvvIhFT0bvvIkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIzOAorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgIui+k+WFpeS4iueahOivu+mUmeivryIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjUwCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgIueUqOaOieS6hui2hei/h+WPr+eUqOeahOWtl+iKgiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU3Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAi5YyF5aSq5aSn6LaF6L+H5LqG5b2T5YmNIG9mZl90IOeahOWumuS5iSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Yib5bu6ICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICLml6Dms5XmiZPlvIDljIXmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjkyCittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgIuWMheetvuWQjeS4jeWMuemFjSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICVsdTogJXMiCittc2dzdHIgIuWMheS4reaciemUmeivr+eahOWvueixoeS9jeS6jiAlbHXvvJolcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgIuino+WOi+e8qei/lOWbniAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDgzCittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAi5YGP56e75YC86KaG55uW5LqGIGRlbHRhIOWfuuWHhuWvueixoSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDkxCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJkZWx0YSDln7rlh4blgY/np7votornlYwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICLmnKrnn6Xlr7nosaHnsbvlnosgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMAorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgIuaXoOazleivu+WPluWMheaWh+S7tiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gIuWMheaWh+S7tui/h+aXqee7k+adn++8jOe8uuWwkSAlbHUg5a2X6IqCIgorbXNnc3RyWzFdICLljIXmlofku7bov4fml6nnu5PmnZ/vvIznvLrlsJEgJWx1IOWtl+iKgiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTU4Cittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgIuino+WOi+e8qeS4pemHjeeahOS4jeS4gOiHtCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NjQ5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjY1NSBidWlsdGluL2luZGV4LXBhY2suYzo2NzgKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjcxMiBidWlsdGluL2luZGV4LXBhY2suYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICLlj5HnjrAgJXMg5Ye6546wIFNIQTEg5Yay56qB77yBIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo2NTIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzAKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICLkuI3og73or7sgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIuS4jeiDveivu+WPlueOsOWtmOWvueixoSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgIuaXoOaViOeahOS6jOi/m+WItuWvueixoe+8iGJsb2LvvIklcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIuaXoOaViOeahCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ5Cittc2dpZCAiRXJyb3IgaW4gb2JqZWN0IgorbXNnc3RyICLlr7nosaHkuK3lh7rplJkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiJXMg55qE5omA5pyJ5a2Q5a+56LGh5bm26Z2e6YO95Y+v6L6+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjEgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ3Cittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICLml6Dms5XlupTnlKggZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk4NgorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLmjqXmlLblr7nosaHkuK0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk4NgorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIue0ouW8leWvueixoeS4rSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTAxMgorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAi5YyF5Yay56qB77yIU0hBMSDkuI3ljLnphY3vvIkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwMTcKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgIuS4jeiDveaemuS4vuWMheaWh+S7tueKtuaAgSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTAyMAorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAi5YyF55qE57uT5bC+5pyJ5Z6D5Zy+5pWw5o2uIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDMxCittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAicGFyc2VfcGFja19vYmplY3RzKCkg5Lit6YGH5Yiw5LiN5Y+v55CG5Za755qE6Zeu6aKYIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDU0Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAi5aSE55CGIGRlbHRhIOS4rSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTA2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVw77ya5peg5rOV5Yib5bu657q/56iL77yaJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMDYKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICLkuI3lj6/nkIbllrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gIuWMheaciSAlZCDkuKrmnKrop6PlhrPnmoQgZGVsdGEiCittc2dzdHJbMV0gIuWMheaciSAlZCDkuKrmnKrop6PlhrPnmoQgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgIuS4jeiDvee8qeWwj+mZhOWKoOWvueixoe+8iCVk77yJIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICLmnKzlnLDlr7nosaEgJXMg5bey5o2f5Z2PIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjUzCittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgIuWFs+mXreWMheaWh+S7tuaXtuWHuumUmSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUga2VlcCBmaWxlICclcyciCittc2dzdHIgIuaXoOazleWGmeS/neeVmeaWh+S7tiAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICLml6Dms5XlhbPpl63kv53nlZnmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI4NworbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgIuaXoOazleWtmOWCqOWMheaWh+S7tiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5OAorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlrZjlgqjntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgIuWdj+eahOe0ouW8leeJiOacrCAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM0MSBidWlsdGluL2luZGV4LXBhY2suYzoxNTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5omT5byA546w5a2Y5YyF5paH5Lu2ICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAi5peg5rOV5Li6ICVzIOaJk+W8gOWMhee0ouW8leaWh+S7tiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICLpnZ4gZGVsdGHvvJolZCDkuKrlr7nosaEiCittc2dzdHJbMV0gIumdniBkZWx0Ye+8miVkIOS4quWvueixoSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICLpk77plb8gPSAlZDogJWx1IOWvueixoSIKK21zZ3N0clsxXSAi6ZO+6ZW/ID0gJWQ6ICVsdSDlr7nosaEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0ODIKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAi5peg5rOV6L+U5Zue5b2T5YmN5bel5L2c55uu5b2VIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjkKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NDEgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIumUmeivr+mAiemhuSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU1OQorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIOS4jeiDveWSjCAtLXN0ZGluIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU2MyBidWlsdGluL2luZGV4LXBhY2suYzoxNTczCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICLljIXlkI0gJyVzJyDmsqHmnInku6UgJy5wYWNrJyDnu5PlsL4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1ODIKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIi0tdmVyaWZ5IOayoeacieaPkOS+m+WMheWQjeWPguaVsCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIuS4jeiDveiuvue9riAlcyDkuLrnu4Tlj6/lhpkiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgbmFtZSAlcyIKK21zZ3N0ciAi5aSq6ZW/55qE5qih54mI5ZCNICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLkuI3og73mnprkuL4gJyVzJyDnirbmgIEiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgIuS4jeiDveaemuS4vuaooeeJiCAnJXMnIOeKtuaAgSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAi5LiN6IO95omT5byA55uu5b2VICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5bpk77mjqUgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIgorbXNnc3RyICLlpKrplb/nmoTnrKblj7fpk77mjqUgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgIuS4jeiDveiHqiAnJXMnIOWIsCAnJXMnIOWIm+W7uuespuWPt+mTvuaOpSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95ou36LSdICclcycg6IezICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAi5b+955Wl5qih54mIICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBwYXRoICVzIgorbXNnc3RyICLlpKrplb/nmoTmqKHniYjot6/lvoQgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kICVzIgorbXNnc3RyICLmqKHniYjmnKrmib7liLAgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgb2YgYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcyciCittc2dzdHIgIuayoeacieS7jiAnJTIkcycg5aSN5Yi25bim5pyJ6ZSZ6K+v54mI5pysICUxJGQg55qE5qih54mIIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGdpdCBkaXJlY3RvcnkgJXMiCittc2dzdHIgIuS4jeato+W4uOeahCBnaXQg55uu5b2VICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMjMgYnVpbHRpbi9pbml0LWRiLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyDlt7Lnu4/lrZjlnKgiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAi5LiN6IO95aSE55CGICVkIOexu+Wei+eahOaWh+S7tiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICLkuI3og73np7vliqggJXMg6IezICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBnaXQgbGluayAlcyIKK21zZ3N0ciAi5LiN6IO95Yib5bu6IGdpdCBsaW5rICVzIgorCisjLgorIy4gKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisjLiAqIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gKiAiIiwgYW5kIHRoZSBsYXN0ICclcyVzJyBpcyB0aGUgdmVyYmF0aW0gZGlyZWN0b3J5IG5hbWUuCisjLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIEdpdCDniYjmnKzlupPkuo4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MjEKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorbXNnc3RyICLph43mlrDliJ3lp4vljJbnjrDlrZjnmoQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMQorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICLliJ3lp4vljJbnqbrnmoQiCisKKyMgIOivkeiAhe+8muS4reaWh+Wtl+espuS4suaLvOaOpe+8jOWPr+WIoOmZpOWJjeWvvOepuuagvAorIzogYnVpbHRpbi9pbml0LWRiLmM6NDIyCittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAi5YWx5LqrIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NDEKK21zZ2lkICJjYW5ub3QgdGVsbCBjd2QiCittc2dzdHIgIuaXoOazleiOt+efpeW9k+WJjei3r+W+hCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDY3Cittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS1zaGFyZWQiCisiWz08cGVybWlzc2lvbnM+XV0gW2RpcmVjdG9yeV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkwCittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkxCittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MyBidWlsdGluL3BydW5lLXBhY2tlZC5jOjc3CisjLCBmdXp6eQorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICLmm7TliqDlronpnZkiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyMiBidWlsdGluL2luaXQtZGIuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICLkuI3og73liJvlu7rnm67lvZUgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgIuS4jeiDveWIh+aNouebruW9leWIsCAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyLkuI3lhYHorrggJXPvvIjmiJYgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT7vvInogIzmsqHmnInmjIflrpogJXPvvIjmiJYgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5Pu+8iSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTc5Cittc2dpZCAiQ2Fubm90IGFjY2VzcyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLkuI3og73orr/pl67lvZPliY3lt6XkvZznm67lvZUiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICLkuI3og73orr/pl67lt6XkvZzljLogJyVzJyIKKworIzogYnVpbHRpbi9sb2cuYzozNworIywgZnV6enkKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8c2luY2U+Li48dW50aWw+XSBbWy0tXSA8cGF0aD4uLi5dXG4iCittc2dzdHIgImdpdCBhcHBseSBb6YCJ6aG5XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL2xvZy5jOjM4CisjLCBmdXp6eQorbXNnaWQgIiAgIG9yOiBnaXQgc2hvdyBbb3B0aW9uc10gPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCBhcHBseSBb6YCJ6aG5XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL2xvZy5jOjEwMAorbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTAxCisjLCBmdXp6eQorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICLlnY/nmoTmupAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTAyCittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIuacgOe7iOi+k+WHuu+8miVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDAzIGJ1aWx0aW4vbG9nLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5a+56LGhICVzIgorCisjOiBidWlsdGluL2xvZy5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHR5cGU6ICVkIgorbXNnc3RyICLmnKrnn6XnsbvlnovvvJolZCIKKworIzogYnVpbHRpbi9sb2cuYzo2MDgKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyDmsqHmnInlgLwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjgyCittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICLovpPlh7rnm67lvZXlkI3lpKrplb8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIuaXoOazleaJk+W8gOihpeS4geaWh+S7tiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo3MDcKK21zZ2lkICJOZWVkIGV4YWN0bHkgb25lIHJhbmdlLiIKK21zZ3N0ciAi5Y+q6ZyA6KaB5LiA5Liq6IyD5Zu044CCIgorCisjOiBidWlsdGluL2xvZy5jOjcxNQorbXNnaWQgIk5vdCBhIHJhbmdlLiIKK21zZ3N0ciAi5LiN5piv5LiA5Liq6IyD5Zu044CCIgorCisjOiBidWlsdGluL2xvZy5jOjc4OQorbXNnaWQgIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIuS/oeWwgemcgOimgemCruS7tuWcsOWdgOagvOW8jyIKKworIzogYnVpbHRpbi9sb2cuYzo4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAi5LiN5q2j5bi455qEIGluLXJlcGx5LXRv77yaJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODkwCittc2dpZCAiZ2l0IGZvcm1hdC1wYXRjaCBbb3B0aW9uc10gWzxzaW5jZT4gfCA8cmV2aXNpb24gcmFuZ2U+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjkzNQorbXNnaWQgIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICLkuKTkuKrovpPlh7rnm67lvZXvvJ8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA2MworbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDY2Cittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDcwCittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDcyCittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDc0Cittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA3NQorbXNnaWQgInNmeCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwNzYKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwNzgKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA4MAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwODMKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDg2Cittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDg5Cittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTEKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDkzCittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5NQorIywgZnV6enkKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIuWQiOW5tu+8miIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5Y+l5bC+56m65qC8CisjOiBidWlsdGluL2xvZy5jOjEwOTYKKyMsIGZ1enp5Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICLpooblhYggIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTcKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5OCBidWlsdGluL2xvZy5jOjExMDAKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTgKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExMDAKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExMDIKK21zZ2lkICJtZXNzYWdlLWlkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwMworbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExMDQgYnVpbHRpbi9sb2cuYzoxMTA3Cittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTA1Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExMDgKKyMsIGZ1enp5Cittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAi5b+955Wl6KGl5LiB5Lit55qE5re75Yqg55qE5paH5Lu2IgorCisjOiBidWlsdGluL2xvZy5jOjExMTIKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExMTQKK21zZ2lkICJzaWduYXR1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTE1Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTExNworIywgZnV6enkKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICLml6Dms5XmiZPlvIDooaXkuIHmlofku7YgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb21taXR0ZXIgaW5mbyAlcyIKK21zZ3N0ciAi6Jma5YGH55qE5o+Q5Lqk6ICF5L+h5oGvICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyMDIKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIi1uIOWSjCAtayDkupLmlqXjgIIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIwNAorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXggYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItLXN1YmplY3QtcHJlZml4IOWSjCAtayDkupLmlqXjgIIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxMgorbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1vbmx5IOaXoOaEj+S5iSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE0Cittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtc3RhdHVzIOaXoOaEj+S5iSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE2Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWNoZWNrIOaXoOaEj+S5iSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjM5Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIuagh+WHhui+k+WHuuaIluebruW9le+8jOWTquS4gOS4qu+8nyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuS4jeiDveWIm+W7uuebruW9lSAnJXMnIgorCisjOiBidWlsdGluL2xvZy5jOjEzOTQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAi5peg5rOV5Yib5bu66L6T5Ye65paH5Lu2IgorCisjOiBidWlsdGluL2xvZy5jOjE0NDMKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICLkuI3og73mib7liLDot5/ouKrnmoTov5znqIvliIbmlK/vvIzor7fmiYvlt6XmjIflrpogPHVwc3RyZWFtPuOAglxuIgorCisjOiBidWlsdGluL2xvZy5jOjE1MTEgYnVpbHRpbi9sb2cuYzoxNTEzIGJ1aWx0aW4vbG9nLmM6MTUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAi5pyq55+l5o+Q5LqkICVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDA4CisjLCBmdXp6eQorbXNnaWQgImdpdCBscy1maWxlcyBbb3B0aW9uc10gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBb6YCJ6aG5XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYzCittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDY1Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ2NworbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjkKKyMsIGZ1enp5Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuWIoOmZpOeahOaWh+S7tiAlcyDku43mnInlhoXlrrkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzEKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3MworbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDc1Cittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3OAorbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0ODAKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0ODIKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWUgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDg1CisjLCBmdXp6eQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgIuS4pOS4qui+k+WHuuebruW9le+8nyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ4OAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDkwCittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5MgorIywgZnV6enkKK21zZ2lkICJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iCittc2dzdHIgIui+k+WHuuWSjOaooeW8j+WMuemFjeeahOihjCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5NQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ5OAorbXNnaWQgInJlYWQgYWRkaXRpb25hbCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgcGF0dGVybnMgaW4gPGZpbGU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDAKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDMKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTA2Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDcKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTA4Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTEwCittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoyNworIywgZnV6enkKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgW+mAiemhuV0gWzzooaXkuIE+Li4uXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI1Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyNworIywgZnV6enkKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgIuWPmOWfuuWIsOi/nOeoiyAlcyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI5Cittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMworIywgZnV6enkKK21zZ2lkICJpbmNsdWRlIG9iamVjdCBzaXplIgorbXNnc3RyICLmj5Dkvpvkuobml6DmlYjlr7nosaEgJyVzJ+OAgiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNworbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDIKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQzCisjLCBmdXp6eQorbXNnaWQgImdpdCBtZXJnZSBbb3B0aW9uc10gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IGFwcGx5IFvpgInpobldIFs86KGl5LiBPi4uLl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NAorbXNnaWQgImdpdCBtZXJnZSBbb3B0aW9uc10gPG1zZz4gSEVBRCA8Y29tbWl0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NDUKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTAKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIuW8gOWFsyBgbScg6ZyA6KaB5LiA5Liq5YC8IgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIuS4jeiDveaJvuWIsOWQiOW5tuetlueVpSAnJXMn44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAi5Y+v55So55qE562W55Wl5pyJ77yaIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLlj6/nlKjnmoToh6rlrprkuYnnrZbnlaXmnInvvJoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODMKK21zZ2lkICJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODYKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4NworbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4OQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTkyCisjLCBmdXp6eQorbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICLlnKjlkIjlubbov4fnqIvkuK3kuI3og73lgZrpg6jliIbmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTQKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NgorIywgZnV6enkKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgIuWwmuacquaaguWtmOS7peWkh+aPkOS6pOeahOWPmOabtO+8miIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5OAorIywgZnV6enkKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICLlj6/lv6vov5siCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDAKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDIgYnVpbHRpbi9ub3Rlcy5jOjg2NyBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDMKKyMsIGZ1enp5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICLlsJ3or5XlkIjlubbnrZbnlaUgJXMuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNAorbXNnaWQgIm9wdGlvbj12YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA1Cittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA3Cittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTEKKyMsIGZ1enp5Cittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgIuaXoOazleS/neWtmOW9k+WJjee0ouW8leeKtuaAgSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0MAorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICLkuI3og73ov5vooYzov5vluqbkv53lrZjjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDUKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgIui/m+W6puS/neWtmOWksei0pSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjlr7nosaHvvJolcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OSBidWlsdGluL21lcmdlLmM6Mjg2Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAi6K+75Y+W5qCR5aSx6LSlIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTYKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIO+8iOaXoOWPr+WOi+e8qe+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIuWOi+e8qeaPkOS6pCAtLSDmnKrmm7TmlrAgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MzYxCittc2dpZCAiV3JpdGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICLlhpnlhaUgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM2MworbXNnaWQgIkZpbmlzaGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICLlrozmiJAgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIuaXoOWQiOW5tuS/oeaBryAtLSDmnKrmm7TmlrAgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycg5rKh5pyJ5oyH5ZCR5LiA5Liq5o+Q5LqkIgorCisjOiBidWlsdGluL21lcmdlLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIuWdj+eahCBicmFuY2guJXMubWVyZ2VvcHRpb25zIOWtl+espuS4su+8miVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NjI4Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUg5peg5rOV5YaZ5YWl5LiA5qCR5a+56LGhIgorCisjOiBidWlsdGluL21lcmdlLmM6Njc4Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICLml6Dms5Xor7vlj5bnvJPlrZgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDkKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICLkuI3og73lpITnkIbkuKTkuKrlpLTlkIjlubbkuYvlpJbnmoTku7vkvZXmk43kvZzjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAibWVyZ2UtcmVjdXJzaXZlIOeahOacquefpemAiemhue+8mi1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICLkuI3og73lhpkgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICLkuI3og73ku44gJyVzJyDor7vlj5YiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLmnKrmj5DkuqTlkIjlubbvvIzkvb/nlKggJ2dpdCBjb21taXQnIOWujOaIkOatpOasoeWQiOW5tuOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODkxCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyLor7fovpPlhaXkuIDkuKrmj5DkuqTkv6Hmga/ku6Xop6Pph4rmraTlkIjlubbnmoTlv4XopoHmgKfvvIzlsKTlhbbmmK/lsIbkuIDkuKrmm7TmlrDlkI7nmoTkuIrmuLjliIbmlK9cbiIKKyLlkIjlubbliLDkuLvpopjliIbmlK/jgIJcbiIKKyJcbiIKKyLku6UgJyMnIOW8gOWktOeahOihjOWwhuiiq+W/veeVpe+8jOiAjOS4lOepuuaPkOS6pOivtOaYjuWwhuS8mue7iOatouaPkOS6pOOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTE1Cittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICLnqbrmj5DkuqTkv6Hmga/jgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICLlpKrmo5LkuobjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICLoh6rliqjlkIjlubblpLHotKXvvIzkv67mraPlhrLnqoHnhLblkI7mj5DkuqTkv67mraPnmoTnu5PmnpzjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQiCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5o+Q5LqkIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA0OQorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi5rKh5pyJ5b2T5YmN5YiG5pSv44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1MQorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi5b2T5YmN5YiG5pSv5rKh5pyJ5a+55bqU55qE6L+c56iL54mI5pys5bqT44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1MworbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi5b2T5YmN5YiG5pSv5rKh5pyJ5a6a5LmJ6buY6K6k55qE5LiK5ri45YiG5pSv44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICIlcyDmsqHmnInmnaXoh6ogJXMg55qE6L+c56iL6Lef6Liq5YiG5pSvIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0NSBidWlsdGluL21lcmdlLmM6MTMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIlcyAtIOS4jeiDveiiq+WQiOW5tiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuayoeacieimgee7iOatoueahOWQiOW5tu+8iE1FUkdFX0hFQUQg5Lii5aSx77yJ44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIyOSBnaXQtcHVsbC5zaDozMQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIgorbXNnc3RyICIiCisi5oKo5bCa5pyq57uT5p2f5oKo55qE5ZCI5bm277yI5a2Y5ZyoIE1FUkdFX0hFQUTvvInjgIJcbiIKKyLor7flnKjlkIjlubbliY3lhYjmj5DkuqTmgqjnmoTkv67mlLnjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjMyIGdpdC1wdWxsLnNoOjM0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICLmgqjlsJrmnKrnu5PmnZ/mgqjnmoTlkIjlubbvvIjlrZjlnKggTUVSR0VfSEVBRO+8ieOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzYKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorIuaCqOWwmuacque7k+adn+aCqOeahOaLo+mAie+8iOWtmOWcqCBDSEVSUllfUElDS19IRUFE77yJ44CCXG4iCisi6K+35Zyo5ZCI5bm25YmN5YWI5o+Q5Lqk5oKo55qE5L+u5pS544CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzOQorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAi5oKo5bCa5pyq57uT5p2f5oKo55qE5ouj6YCJ77yI5a2Y5ZyoIENIRVJSWV9QSUNLX0hFQUTvvInjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjQ4Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIuaCqOS4jeiDveWwhiAtLXNxdWFzaCDkuI4gLS1uby1mZiDlkIzml7bkvb/nlKjjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjUzCittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tbm8tZmYgd2l0aCAtLWZmLW9ubHkuIgorbXNnc3RyICLmgqjkuI3og73lsIYgLS1uby1mZiDkuI4gLS1mZi1vbmx5IOWQjOaXtuS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNjAKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAi5pyq5oyH5a6a5o+Q5Lqk5bm25LiUIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIOacquiuvue9ruOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTIKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICLlj6rog73lsIbkuIDkuKrmj5DkuqTlkIjlubbliLDnqbrliIbmlK/kuIoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk1Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIuWwmuS4jeaUr+aMgeWIsOepuuWIhuaUr+eahOWOi+e8qeaPkOS6pCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTcKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAi5Yiw56m65YiG5pSv55qE6Z2e5b+r6L+b5byP5o+Q5Lqk5rKh5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAi5pu05pawICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAi5bCd6K+V6Z2e5bi45bCP55qE57Si5byV5YaF5ZCI5bm2Li4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIuaXoOOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4OQorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAi5peg5rOV5b+r6L+b77yM57uI5q2i44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUxMiBidWlsdGluL21lcmdlLmM6MTU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAi5bCG5qCR5Zue5rua6Iez5Y6f5aeL54q25oCBLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICLlsJ3or5XlkIjlubbnrZbnlaUgJXMuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIuayoeacieWQiOW5tuetlueVpeWkhOeQhuatpOWQiOW5tuOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAi5L2/55So562W55WlICVzIOWQiOW5tuWksei0peOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAi5L2/55SoICVzIOS7peWHhuWkh+aJi+W3peino+WGs+OAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICLoh6rliqjlkIjlubbov5vlsZXpobrliKnvvIzmjInopoHmsYLlnKjmj5DkuqTliY3lgZzmraJcbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjYKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWF8LS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjI3Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hfC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjgKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjI5Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzo5OAorIywgZnV6enkKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgIuWPkeeOsCAldSDkuKrlhbHlkIznpZblhYjvvJoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjk5Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjEwMAorbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjEwMgorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo4Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFtvcHRpb25zXSBbLUwgbmFtZTEgWy1MIG9yaWcgWy1MIG5hbWUyXV1dIGZpbGUxIG9yaWdfZmlsZSAiCisiZmlsZTIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzMKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM0Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDIKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MworbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWdfZmlsZS9maWxlMiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY3Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MworbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI0CisjLCBmdXp6eQorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi5o6l5pS25a+56LGh5LitIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NQorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTQKK21zZ2lkICJnaXQgbXYgW29wdGlvbnNdIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjY0Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzo2NQorIywgZnV6enkKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAi56iL5bqP6ZSZ6K+vIgorCisjOiBidWlsdGluL212LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAi5qOA5p+lICclcycg5YiwICclcycg55qE6YeN5ZG95ZCNXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTIKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICLlnY/nmoTmupAiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTUKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICLkuI3og73lsIbnm67lvZXnp7vliqjliLDoh6rouqsiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTgKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICLkuI3og73lsIbnm67lvZXnp7vliqjliLDmlofku7YiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoPyAlLipzIGlzIGluIGluZGV4PyIKK21zZ3N0ciAi5Zev77yfJS4qcyDlnKjntKLlvJXkuK3vvJ8iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNDAKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICLmupDnm67lvZXkuLrnqboiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzEKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICLkuI3lnKjniYjmnKzmjqfliLbkuYvkuIsiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzMKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgIuebruagh+W3suWtmOWcqCIKKworIzogYnVpbHRpbi9tdi5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICLopobnm5YgJyVzJyIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIuS4jeiDveimhuebliIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAi5ZCM5LiA55uu5qCH5YW35pyJ5aSa5Liq5rqQIgorCisjOiBidWlsdGluL212LmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlc++8jOa6kD0lc++8jOebruaghz0lcyIKKworIzogYnVpbHRpbi9tdi5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICLph43lkb3lkI0gJXMg6IezICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyMTUgYnVpbHRpbi9yZW1vdGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIumHjeWRveWQjSAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjE3NQorIywgZnV6enkKK21zZ2lkICJnaXQgbmFtZS1yZXYgW29wdGlvbnNdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgYXBwbHkgW+mAiemhuV0gWzzooaXkuIE+Li4uXSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjE3NgorbXNnaWQgImdpdCBuYW1lLXJldiBbb3B0aW9uc10gLS1hbGwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjE3NworbXNnaWQgImdpdCBuYW1lLXJldiBbb3B0aW9uc10gLS1zdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjI5Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyMzAKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjIzMgorIywgZnV6enkKK21zZ2lkICJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAi6L6T5Ye65ZKM5qih5byP5Yy56YWN55qE6KGMIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjM0Cittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjM1Cittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyMzYKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjMKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjQKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gYWRkIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgKC1jIHwgLUMpICIKKyI8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlc19yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gYXBwZW5kIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICgtYyB8IC1DKSAiCisiPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjkKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+IF0gPG5vdGVzX3JlZj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzEKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXNfcmVmPl0gcHJ1bmUgWy1uIHwgLXZdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzX3JlZj5dIGdldC1yZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5Cittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NAorIywgZnV6enkKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBhcHBseSBb6YCJ6aG5XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDkKK21zZ2lkICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MAorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NQorIywgZnV6enkKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBhcHBseSBb6YCJ6aG5XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NQorbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlc19yZWY+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzcKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgyCittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NworbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIuS4jeiDveS4uuWvueixoSAnJXMnIOW8gOWniyAnc2hvdyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDUKK21zZ2lkICJjYW4ndCBmZG9wZW4gJ3Nob3cnIG91dHB1dCBmZCIKK21zZ3N0ciAi5LiN6IO95omT5byAICdzaG93JyDovpPlh7rmlofku7blj6Xmn4QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAi5peg5rOV5Li65a+56LGhICclcycg55qEICdzaG93JyDlhbPpl63nrqHpgZMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICLml6Dms5XkuLrlr7nosaEgJyVzJyDlrozmiJAgJ3Nob3cnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTc1IGJ1aWx0aW4vdGFnLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73liJvlu7rmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE4OQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAi6K+36YCa6L+HIC1tIOaIliAtRiDpgInpobnkuLrms6jop6Pmj5DkvpvlhoXlrrkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMTAgYnVpbHRpbi9ub3Rlcy5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAi5Yig6Zmk5a+56LGhICVzIOeahOazqOino1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjE1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICLkuI3og73lhpnms6jop6Plr7nosaEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG5vdGUgY29udGVudHMgaGFzIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAi5rOo6Kej5YaF5a656KKr55WZ5Zyo5paH5Lu2ICVzIOS4rSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1MSBidWlsdGluL3RhZy5jOjU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5YgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1MyBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgIuS4jeiDveaJk+W8gOaIluivu+WPliAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcyIGJ1aWx0aW4vbm90ZXMuYzo0NDUgYnVpbHRpbi9ub3Rlcy5jOjQ0NworIzogYnVpbHRpbi9ub3Rlcy5jOjUwNyBidWlsdGluL25vdGVzLmM6NTYxIGJ1aWx0aW4vbm90ZXMuYzo2NDQKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NDkgYnVpbHRpbi9ub3Rlcy5jOjcyNCBidWlsdGluL25vdGVzLmM6NzY2CisjOiBidWlsdGluL25vdGVzLmM6OTY4IGJ1aWx0aW4vcmVzZXQuYzoyOTMgYnVpbHRpbi90YWcuYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIuaXoOazleino+aekCAnJXMnIOS4uuS4gOS4quacieaViOW8leeUqOOAgiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgIuaXoOazleivu+WPluWvueixoSAnJXMn44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6Mjk5Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICLkuI3og73mj5DkuqTmnKrliJ3lp4vljJYv5pyq5byV55So55qE5rOo6Kej5qCRIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi5Z2P55qEIG5vdGVzLnJld3JpdGVNb2RlIOWAvO+8miclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIuaLkue7neWQkSAlc++8iOWcqCByZWZzL25vdGVzLyDkuYvlpJbvvInlhpnlhaXms6jop6MiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgdGhlCisjLiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcyBpdHMgdmFsdWUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICLlnY/nmoQgJXMg5YC877yaJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIumdnuazleeahOi+k+WFpeihjO+8miclcyfjgIIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIuaXoOazleS7jiAnJXMnIOWIsCAnJXMnIOaLt+i0neazqOinoyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUwMCBidWlsdGluL25vdGVzLmM6NTU0IGJ1aWx0aW4vbm90ZXMuYzo2MjcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MzkgYnVpbHRpbi9ub3Rlcy5jOjcxMiBidWlsdGluL25vdGVzLmM6NzU5CisjOiBidWlsdGluL25vdGVzLmM6MTAzMworbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgIuWPguaVsOWkquWkmiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxMyBidWlsdGluL25vdGVzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgIuacquWPkeeOsOWvueixoSAlcyDnmoTms6jop6PjgIIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzUgYnVpbHRpbi9ub3Rlcy5jOjY5MgorIywgZnV6enkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICLms6jop6PlhoXlrrnooqvnlZnlnKjmlofku7YgJXMg5LitIgorCisjOiBidWlsdGluL25vdGVzLmM6NTM4IGJ1aWx0aW4vbm90ZXMuYzo2OTUKKyMsIGZ1enp5Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgIuaXoOazleWtmOWCqOe0ouW8leaWh+S7tiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0MCBidWlsdGluL25vdGVzLmM6NTQzIGJ1aWx0aW4vbm90ZXMuYzo2OTcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDAgYnVpbHRpbi90YWcuYzo0NzYKKyMsIGZ1enp5Cittc2dpZCAib2JqZWN0IgorbXNnc3RyICLlnY/lr7nosaEgJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NDEgYnVpbHRpbi9ub3Rlcy5jOjY5OAorIywgZnV6enkKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIuS4jeiDveWGmeazqOino+WvueixoSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0NCBidWlsdGluL25vdGVzLmM6NzAxCisjLCBmdXp6eQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAi5LiN6IO95YaZ5rOo6Kej5a+56LGhIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQ2IGJ1aWx0aW4vbm90ZXMuYzo2MTQKKyMsIGZ1enp5Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W546w5a2Y5a+56LGhICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLkuI3og73mt7vliqDms6jop6PjgILlj5HnjrDlr7nosaEgJXMg5bey5a2Y5Zyo5rOo6Kej44CC5L2/55SoICctZicg6KaG55uW546w5a2Y5rOo6KejIgorCisjOiBidWlsdGluL25vdGVzLmM6NTg1IGJ1aWx0aW4vbm90ZXMuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICLopobnm5blr7nosaEgJXMg546w5a2Y5rOo6KejXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MTUKKyMsIGZ1enp5Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgIuWdj+WvueixoSAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYxNworbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MzUKK21zZ2lkICJ0b28gZmV3IHBhcmFtZXRlcnMiCittc2dzdHIgIuWPguaVsOWkquWwkSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIuS4jeiDveaLt+i0neazqOino+OAguWPkeeOsOWvueixoSAlcyDlt7LlrZjlnKjms6jop6PjgILkvb/nlKggJy1mJyDopobnm5bnjrDlrZjms6jop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIua6kOWvueixoSAlcyDnvLrlsJHms6jop6PjgILkuI3og73mi7fotJ3jgIIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorIuWtkOWRveS7pCAnZWRpdCcg55qE6YCJ6aG5IC1tLy1GLy1jLy1DIOW3suW8g+eUqOOAglxuIgorIuivt+aNoueUqCAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQyfjgIJcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg2NAorIywgZnV6enkKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIuaXoOaViOmAiemhue+8miVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODY2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODY4Cittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc2CisjLCBmdXp6eQorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICJwYXRoICclcyfvvJrml6Dms5XlkIjlubYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIuWvueixoSAlcyDmsqHmnInms6jop6NcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk4MworbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTg2CisjLCBmdXp6eQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLvvIjmraPku47moIflh4bovpPlhaXkuK3or7vlj5bml6Xlv5fkv6Hmga/vvIlcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwNjcKK21zZ2lkICJub3Rlc19yZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwNjgKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXNfcmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTEwMyBidWlsdGluL3JlbW90ZS5jOjE1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAi5pyq55+l5a2Q5ZG95Luk77yaJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMKK21zZ2lkICJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFtvcHRpb25zLi4uXSBbPCByZWYtbGlzdCB8IDwgb2JqZWN0LWxpc3RdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQKK21zZ2lkICJnaXQgcGFjay1vYmplY3RzIFtvcHRpb25zLi4uXSBiYXNlLW5hbWUgWzwgcmVmLWxpc3QgfCA8IG9iamVjdC1saXN0XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE4MyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgIuWOi+e8qemUmeivryAoJWQpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAi5LiN5pSv5oyB55qE57Si5byV54mI5pysICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAi5Z2P55qE57Si5byV54mI5pysICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gJXMgZG9lcyBub3QgYWNjZXB0IG5lZ2F0aXZlIGZvcm0iCittc2dzdHIgIumAiemhuSAlcyDkuI3mjqXlj5flkKblrprmoLzlvI8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgdmFsdWUgJyVzJyBmb3Igb3B0aW9uICVzIgorbXNnc3RyICLkuI3og73op6PmnpDpgInpobkgJTEkcyDnmoTlgLwgJyUyJHMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NDgKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NTAKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1MgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1NQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NTYKK21zZ2lkICJ2ZXJzaW9uWyxvZmZzZXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ1NworbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDYwCisjLCBmdXp6eQorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgIuaXoOazleWIm+W7uui+k+WHuuaWh+S7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDYyCittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ2NAorIywgZnV6enkKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIuS4jeiDveivu+WPluWvueixoSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDY2Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NjgKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ3MAorbXNnaWQgIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ3MgorIywgZnV6enkKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgIuWkhOeQhiBkZWx0YSDkuK0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ3NAorIywgZnV6enkKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICLkuI3og73or7vlj5bnjrDlrZjlr7nosaEgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ3NgorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NzgKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ4MAorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDgyCisjLCBmdXp6eQorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIu+8iOato+S7juagh+WHhui+k+WFpeS4reivu+WPluaXpeW/l+S/oeaBr++8iVxuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODQKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0OTAKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDkzCittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ5NQorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0OTcKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDk4IHBhcnNlLW9wdGlvbnMuaDoxNDEKK21zZ2lkICJ0aW1lIgorbXNnc3RyICLml7bpl7QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ5OQorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjUwMgorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjUwNAorbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTA2Cittc2dpZCAicGFjayBjb21wcmVzc2lvbiBsZXZlbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1MDgKKyMsIGZ1enp5Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIuS4jeiDveWGmeaPkOS6pOaooeeJiCIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo2Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbb3B0aW9uc10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNAorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE1Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW58LS1kcnktcnVuXSBbLXF8LS1xdWlldF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEyCittc2dpZCAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKKyMsIGZ1enp5Cittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICLkuI3kvJrliKDpmaQgJXNcbiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzMworIywgZnV6enkKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgIuS4jeiDveivu+WPluWvueixoSAlcyIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNgorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE0CisjLCBmdXp6eQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgYXBwbHkgW+mAiemhuV0gWzzooaXkuIE+Li4uXSIKKworIzogYnVpbHRpbi9wdXNoLmM6NDUKK21zZ2lkICJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iCittc2dzdHIgInRhZyDnroDlhpnmsqHmnInot58gPHRhZz4g5Y+C5pWwIgorCisjOiBidWlsdGluL3B1c2guYzo2NAorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICItLWRlbGV0ZSDlj6rmjqXlj5fnroDljZXnmoTnm67moIflvJXnlKjlkI0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjk5Cittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorIlxuIgorIuS4uuS6huawuOS5heWcsOmAieaLqeS7u+S4gOmAiemhue+8jOWPguingSAnZ2l0IGhlbHAgY29uZmlnJyDkuK3nmoQgcHVzaC5kZWZhdWx044CCIgorCisjOiBidWlsdGluL3B1c2guYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorbXNnc3RyICIiCisi5aaC5p6c5oKo5b2T5YmN5YiG5pSv55qE5LiK5ri45YiG5pSv5ZKM5oKo5b2T5YmN5YiG5pSv5ZCN5LiN5Yy56YWN77yM5Li65o6o6YCB5Yiw6L+c56iL55qEXG4iCisi5LiK5ri45YiG5pSv77yM5L2/55SoXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyLkuLrmjqjpgIHoh7Pov5znqIvlkIzlkI3liIbmlK/vvIzkvb/nlKhcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIuaCqOW9k+WJjeS4jeWcqOS4gOS4quWIhuaUr+S4iuOAglxuIgorIueOsOWcqOS4uuaOqOmAgeW9k+WJje+8iOWIhuemu+WktOaMh+mSiO+8ieeahOWOhuWPsu+8jOS9v+eUqFxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIuW9k+WJjeWIhuaUryAlcyDmsqHmnInlr7nlupTnmoTkuIrmuLjliIbmlK/jgIJcbiIKKyLkuLrmjqjpgIHlvZPliY3liIbmlK/lubblu7rnq4vkuI7ov5znqIvkuIrmuLjnmoTot5/ouKrvvIzkvb/nlKhcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICLlvZPliY3liIbmlK8gJXMg5pyJ5aSa5Liq5LiK5ri45YiG5pSv77yM5ouS57ud5o6o6YCB44CCIgorCisjOiBidWlsdGluL3B1c2guYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorIuaCqOato+aOqOmAgeiHs+i/nOeoiyAnJXMn77yI5YW25bm26Z2e5b2T5YmN5YiG5pSvICclcycg55qE5LiK5ri477yJ77yMXG4iCisi6ICM5rKh5pyJ5ZGK6K+J5oiR6KaB5o6o6YCB5LuA5LmI44CB5pu05paw5ZOq5Liq6L+c56iL5YiG5pSv44CCIgorCisjICDor5HogIXvvJrlrZfnrKbkuLLpppbooYzooYzpppbopoHmt7vliqDigJx3YXJuaW5nOiDigJ3lrZfkuLLvvIzmlYXmraTpppbooYzopoHovoPlhbbkvZnooYznn60KKyM6IGJ1aWx0aW4vcHVzaC5jOjE1MQorbXNnaWQgIiIKKyJwdXNoLmRlZmF1bHQgaXMgdW5zZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSBpcyBjaGFuZ2luZyBpblxuIgorIkdpdCAyLjAgZnJvbSAnbWF0Y2hpbmcnIHRvICdzaW1wbGUnLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZVxuIgorImFuZCBtYWludGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciBhZnRlciB0aGUgZGVmYXVsdCBjaGFuZ2VzLCB1c2U6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBtYXRjaGluZ1xuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBhZG9wdCB0aGUgbmV3IGJlaGF2aW9yIG5vdywgdXNlOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisiU2VlICdnaXQgaGVscCBjb25maWcnIGFuZCBzZWFyY2ggZm9yICdwdXNoLmRlZmF1bHQnIGZvciBmdXJ0aGVyICIKKyJpbmZvcm1hdGlvbi5cbiIKKyIodGhlICdzaW1wbGUnIG1vZGUgd2FzIGludHJvZHVjZWQgaW4gR2l0IDEuNy4xMS4gVXNlIHRoZSBzaW1pbGFyIG1vZGVcbiIKKyInY3VycmVudCcgaW5zdGVhZCBvZiAnc2ltcGxlJyBpZiB5b3Ugc29tZXRpbWVzIHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQpIgorbXNnc3RyICIiCisicHVzaC5kZWZhdWx0IOacquiuvue9ru+8jOWug+eahOm7mOiupOWAvOWwhuS8muWcqCBHaXQgMi4wIOeUsSAnbWF0Y2hpbmcnXG4iCisi5L+u5pS55Li6ICdzaW1wbGUn44CC6Iul6KaB5LiN5YaN5pi+56S65pys5L+h5oGv5bm25Zyo5YW26buY6K6k5YC85pS55Y+Y5ZCO57u05oyB5b2T5YmN5L2/55So5Lmg5oOv77yMXG4iCisi6L+b6KGM5aaC5LiL6K6+572u77yaXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBtYXRjaGluZ1xuIgorIlxuIgorIuiLpeimgeS4jeWGjeaYvuekuuacrOS/oeaBr+W5tuS7jueOsOWcqOW8gOWni+mHh+eUqOaWsOeahOS9v+eUqOS5oOaDr++8jOiuvue9ru+8mlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisi5Y+C6KeBICdnaXQgaGVscCBjb25maWcnIOW5tuafpeaJviAncHVzaC5kZWZhdWx0JyDku6Xojrflj5bmm7TlpJrkv6Hmga/jgIJcbiIKKyLvvIgnc2ltcGxlJyDmqKHlvI/nlLEgR2l0IDEuNy4xMSDniYjmnKzlvJXlhaXjgILlpoLmnpzmgqjmnInml7bopoHkvb/nlKjogIHniYjmnKznmoQgR2l077yMXG4iCisi5Li65L+d5oyB5YW85a6577yM6K+355SoICdjdXJyZW50JyDku6Pmm78gJ3NpbXBsZScg5qih5byP77yJIgorCisjOiBidWlsdGluL3B1c2guYzoxOTkKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAi5oKo5rKh5pyJ5Li65o6o6YCB5oyH5a6a5Lu75L2V5byV55So6KGo6L6+5byP77yM5bm25LiUIHB1c2guZGVmYXVsdCDkuLogXCJub3RoaW5nXCLjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwNgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gTWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuICdnaXQgcHVsbCcpXG4iCisiYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLmm7TmlrDooqvmi5Lnu53vvIzlm6DkuLrmgqjlvZPliY3liIbmlK/nmoTmnIDmlrDmj5DkuqTokL3lkI7kuo7lhbblr7nlupTnmoTov5znqIvliIbmlK/jgIJcbiIKKyLlho3mrKHmjqjpgIHliY3vvIzlhYjkuI7ov5znqIvlj5jmm7TlkIjlubbvvIjlpoIgJ2dpdCBwdWxsJ++8ieOAguivpuingVxuIgorIidnaXQgcHVzaCAtLWhlbHAnIOS4reeahCAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyDlsI/oioLjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIElmIHlvdSBkaWQgbm90IGludGVuZCB0byBwdXNoIHRoYXQgYnJhbmNoLCB5b3UgbWF5IHdhbnQgdG9cbiIKKyJzcGVjaWZ5IGJyYW5jaGVzIHRvIHB1c2ggb3Igc2V0IHRoZSAncHVzaC5kZWZhdWx0JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlXG4iCisidG8gJ3NpbXBsZScsICdjdXJyZW50JyBvciAndXBzdHJlYW0nIHRvIHB1c2ggb25seSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisi5pu05paw6KKr5ouS57ud77yM5Zug5Li65o6o6YCB55qE5LiA5Liq5YiG5pSv55qE5pyA5paw5o+Q5Lqk6JC95ZCO5LqO5YW25a+55bqU55qE6L+c56iL5YiG5pSv44CCXG4iCisi5aaC5p6c5oKo5bm26Z2e5pyJ5oSP5o6o6YCB6K+l5YiG5pSv77yM5oKo5Y+v5Lul5Zyo5o6o6YCB5pe25oyH5a6a6KaB5o6o6YCB55qE5YiG5pSv77yM5oiW6ICF5bCGXG4iCisi6YWN572u5Y+Y6YePICdwdXNoLmRlZmF1bHQnIOiuvue9ruS4uiAnc2ltcGxlJ+OAgSdjdXJyZW50JyDmiJYgJ3Vwc3RyZWFtJ1xuIgorIuS7peS+v+WPquaOqOmAgeW9k+WJjeWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjE4Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBtZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwnKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIuabtOaWsOiiq+aLkue7ne+8jOWboOS4uuaOqOmAgeeahOS4gOS4quWIhuaUr+eahOacgOaWsOaPkOS6pOiQveWQjuS6juWFtuWvueW6lOeahOi/nOeoi+WIhuaUr+OAglxuIgorIuajgOWHuuivpeWIhuaUr+W5tuS4jui/nOeoi+WPmOabtOWQiOW5tu+8iOWmgiAnZ2l0IHB1bGwn77yJ77yM54S25ZCO5YaN5o6o6YCB44CC6K+m6KeBXG4iCisiJ2dpdCBwdXNoIC0taGVscCcg5Lit55qEICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIOWwj+iKguOAgiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAi5o6o6YCB5YiwICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAi5peg5rOV5o6o6YCB5LiA5Lqb5byV55So5YiwICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICLlnY/nmoTniYjmnKzlupMgJyVzJyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk1Cittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKyLmsqHmnInphY3nva7mjqjpgIHnm67moIfjgIJcbiIKKyLmiJbogIXpgJrov4flkb3ku6TooYzmjIflrppVUkzvvIzmiJbogIXnlKjkuIvpnaLlkb3ku6TphY3nva7kuIDkuKrov5znqIvniYjmnKzlupNcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisi54S25ZCO5L2/55So6K+l6L+c56iL54mI5pys5bqT5ZCN5omn6KGM5o6o6YCBXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorCisjOiBidWlsdGluL3B1c2guYzozMTAKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIOWSjCAtLXRhZ3Mg5LiN5YW85a65IgorCisjOiBidWlsdGluL3B1c2guYzozMTEKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLWFsbCDkuI3og73lkozlvJXnlKjooajovr7lvI/lkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjMxNgorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3Ig5ZKMIC0tdGFncyDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjMxNworbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIOS4jeiDveWSjOW8leeUqOihqOi+vuW8j+WQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9wdXNoLmM6MzIyCittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIOWSjCAtLW1pcnJvciDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4MgorIywgZnV6enkKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICLlnY/nmoTniYjmnKzlupMgJyVzJyIKKworIzogYnVpbHRpbi9wdXNoLmM6MzgzCittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozODQKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzg2CisjLCBmdXp6eQorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICLliKDpmaQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4NworbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozOTAKKyMsIGZ1enp5Cittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAi5by65Yi25pu05pawIgorCisjOiBidWlsdGluL3B1c2guYzozOTEKK21zZ2lkICJjaGVjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozOTIKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk0Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozOTUgYnVpbHRpbi9wdXNoLmM6Mzk2Cittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk3Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDAwCittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDEwCittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlIOS4jiAtLWFsbOOAgS0tbWlycm9yIOWPiiAtLXRhZ3Mg5LiN5YW85a65IgorCisjOiBidWlsdGluL3B1c2guYzo0MTIKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUg5pyq5o6l5Lu75L2V5byV55So5rKh5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjM2Cittc2dpZCAiIgorImdpdCByZWFkLXRyZWUgW1stbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4Pl0gIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PGZpbGU+XSAoLS1lbXB0eSB8IDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMDgKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAi5o2f5Z2P55qE57Si5byV5paH5Lu2IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExMQorIywgZnV6enkKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAi5LiN6IO96K+75Y+W57Si5byVIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExMworIywgZnV6enkKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICLlkIjlubbvvJoiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE1Cittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNworbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExOQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjEKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIyCisjLCBmdXp6eQorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAi55uu5b2VL+aWh+S7tiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNgorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKKyMsIGZ1enp5Cittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICLlv73nlaXnmoQiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMyCisjLCBmdXp6eQorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAi5pi+56S65bel5L2c5Yy654q25oCBIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMworbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFnc3wtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMyBidWlsdGluL3JlbW90ZS5jOjMyCittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNCBidWlsdGluL3JlbW90ZS5jOjM3Cittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtZCB8IDxicmFuY2g+KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNworbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAgYnVpbHRpbi9yZW1vdGUuYzo2OAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxIGJ1aWx0aW4vcmVtb3RlLmM6NjkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIgYnVpbHRpbi9yZW1vdGUuYzo3MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNworbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQyCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLWQgfCA8YnJhbmNoPl0pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDcKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0OAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjUzCittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU4Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MworbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIuabtOaWsCAlcyDkuK0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9yIOmAiemhueWNsemZqeS4lOi/h+aXtu+8jOivt+S9v+eUqCAtLW1pcnJvcj1mZXRjaFxuIgorIlx0IOaIliAtLW1pcnJvcj1wdXNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquefpeeahOmVnOWDj+WPguaVsO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworIywgZnV6enkKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICIgIOi/nOeoi+WIhuaUr++8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjgKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzAKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxCisjLCBmdXp6eQorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgIiAg6L+c56iL5YiG5pSv77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyCittc2dpZCAicHVzaHxmZXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MworbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAi5oyH5a6a5LiA5LiqIG1hc3RlciDliIbmlK/lubbkvb/nlKggLS1taXJyb3Ig6YCJ6aG55rKh5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NworbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIuaMh+Wumuimgei3n+i4queahOWIhuaUr+WPquWcqOS4juiOt+WPlumVnOWDj+WQjOaXtuS9v+eUqOaJjeacieaEj+S5iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTUgYnVpbHRpbi9yZW1vdGUuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi6L+c56iLICVzIOW3sue7j+WtmOWcqOOAgiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTkgYnVpbHRpbi9yZW1vdGUuYzo2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDkuKrmnInmlYjnmoTov5znqIvlkI3np7AiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAi5peg5rOV6K6+572uIG1hc3RlciAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICLlpJrkuo7kuIDkuKogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICLml6Dms5XlvpfliLDlvJXnlKjooajovr7lvI8gJXMg55qE6I635Y+W5YiX6KGoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MCBidWlsdGluL3JlbW90ZS5jOjQ0OAorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIu+8iOWMuemFje+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTIKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAi77yI5Yig6Zmk77yJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5NSBidWlsdGluL3JlbW90ZS5jOjYwMSBidWlsdGluL3JlbW90ZS5jOjYwNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95re75YqgICclcycg6IezICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjM5IGJ1aWx0aW4vcmVtb3RlLmM6NzkyIGJ1aWx0aW4vcmVtb3RlLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAlcyIKK21zZ3N0ciAi5rKh5pyJ6L+Z5qC355qE6L+c56iL77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73ph43lkb3lkI3phY3nva7lsI/oioIgJyVzJyDliLAgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjIgYnVpbHRpbi9yZW1vdGUuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICLkuI3og73np7vpmaTphY3nva7lsI/oioIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisi5rKh5pyJ5pu05paw6Z2e6buY6K6k55qE6I635Y+W5byV55So6KGo6L6+5byPXG4iCisiXHQlc1xuIgorIlx05aaC5p6c5b+F6KaB6K+35omL5Yqo5pu05paw6YWN572u44CCIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcyciCittc2dzdHIgIuS4jeiDvei/veWKoCAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0ICclcyciCittc2dzdHIgIuS4jeiDveiuvue9riAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5Yig6ZmkICclcycg5aSx6LSlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5Yib5bu6ICclcycg5aSx6LSlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGJyYW5jaCAlcyIKK21zZ3N0ciAi5peg5rOV56e76Zmk5YiG5pSvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgzNAorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICLms6jmhI/vvJpyZWYvcmVtb3RlcyDlsYLnuqfkuYvlpJbnmoTkuIDkuKrliIbmlK/mnKrooqvnp7vpmaTjgILopoHliKDpmaTlroPvvIzkvb/nlKjvvJoiCittc2dzdHJbMV0gIuazqOaEj++8mnJlZi9yZW1vdGVzIOWxgue6p+S5i+WklueahOS4gOS6m+WIhuaUr+acquiiq+enu+mZpOOAguimgeWIoOmZpOWug+S7rO+8jOS9v+eUqO+8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIg5paw55qE77yI5LiL5LiA5qyh6I635Y+W5bCG5a2Y5YKo5LqOIHJlbW90ZXMvJXPvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ2Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDlt7Lot5/ouKoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ4Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiDov4fml7bvvIjkvb/nlKggJ2dpdCByZW1vdGUgcHJ1bmUnIOadpeenu+mZpO+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NTAKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgIuaXoOaViOeahCBicmFuY2guJXMubWVyZ2XvvIzkuI3og73lj5jln7rliLDkuIDkuKrku6XkuIrnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgIuWPmOWfuuWIsOi/nOeoiyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiDkuI7ov5znqIsgJXMg5ZCI5bm2IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDIKK21zZ2lkICIgICAgYW5kIHdpdGggcmVtb3RlIgorbXNnc3RyICIgICAg5LiU5pyJ6L+c56iLIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICLkuI7ov5znqIsgJXMg5ZCI5bm2IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDUKK21zZ2lkICIgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiAgIOS4lOaciei/nOeoiyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUxCittc2dpZCAiY3JlYXRlIgorbXNnc3RyICLliJvlu7oiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NAorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAi5Yig6ZmkIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTgKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICLmnIDmlrAiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MQorbXNnaWQgImZhc3QtZm9yd2FyZGFibGUiCittc2dzdHIgIuWPr+W/q+i/myIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDY0Cittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgIuacrOWcsOW3sui/h+aXtiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIOW8uuWItuaOqOmAgeiHsyAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyDmjqjpgIHoh7MgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDlvLrliLbmjqjpgIHoh7MgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIOaOqOmAgeiHsyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDkxCisjLCBmdXp6eQorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICLkuI3kvJrliKDpmaQgJXNcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIOi/nOeoiyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICDojrflj5blnLDlnYDvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTIwIGJ1aWx0aW4vcmVtb3RlLmM6MTI4NQorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIo5pegIFVSTCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOSBidWlsdGluL3JlbW90ZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgIOaOqOmAgeWcsOWdgO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzMgYnVpbHRpbi9yZW1vdGUuYzoxMTM1IGJ1aWx0aW4vcmVtb3RlLmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBIRUFE5YiG5pSv77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIgIEhFQUQg5YiG5pSv77yI6L+c56iLIEhFQUQg5qih57OK77yM5Y+v6IO95piv5LiL5YiX5Lit55qE5LiA5Liq77yJ77yaXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIOi/nOeoi+WIhuaUr++8miVzIgorbXNnc3RyWzFdICIgIOi/nOeoi+WIhuaUr++8miVzIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NCBidWlsdGluL3JlbW90ZS5jOjExODEKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIu+8iOeKtuaAgeacquafpeivou+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTYzCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAg5Li6ICdnaXQgcHVsbCcg6YWN572u55qE5pys5Zyw5YiG5pSv77yaIgorbXNnc3RyWzFdICIgIOS4uiAnZ2l0IHB1bGwnIOmFjee9rueahOacrOWcsOWIhuaUr++8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcxCittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICDmnKzlnLDlvJXnlKjlsIblnKggJ2dpdCBwdXNoJyDml7booqvplZzlg48iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICDkuLogJ2dpdCBwdXNoJyDphY3nva7nmoTmnKzlnLDlvJXnlKglc++8miIKK21zZ3N0clsxXSAiICDkuLogJ2dpdCBwdXNoJyDphY3nva7nmoTmnKzlnLDlvJXnlKglc++8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk5Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwMQorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE2Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAi5peg5rOV56Gu5a6a6L+c56iLIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxOAorbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICLlpJrkuKrov5znqIsgSEVBRCDliIbmlK/jgILor7fmmI7noa7lnLDpgInmi6nkuIDkuKrnlKjlkb3ku6TvvJoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICLml6Dms5XliKDpmaQgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjlvJXnlKjvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAi5LiN6IO96K6+572uICVzIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMg5bCG5oiQ5Li65oKs56m654q25oCB77yBIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDlt7LmiJDkuLrmgqznqbrnirbmgIHvvIEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICLkv67liaogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkzvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFvlsIbliKDpmaRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFvlt7LliKDpmaRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjEKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM4NyBidWlsdGluL3JlbW90ZS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAi5rKh5pyJ5q2k6L+c56iLICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwNworIywgZnV6enkKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICLkvY3kuo7liIbmlK8gIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MTQKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICLmnKrmjIflrprov5znqIsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNgorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzOAorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDQwCisjLCBmdXp6eQorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICLliKDpmaQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ0NworbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUg5peg5oSP5LmJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICLml6DmlYjnmoTml6dVUkzljLnphY3mqKHniYjvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAi5pyq5om+5Yiw5q2kVVJM77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5NworbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAi5bCG5LiN5Lya5Yig6Zmk5omA5pyJ6Z2e5o6o6YCBVVJM5Zyw5Z2AIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NjkKK21zZ2lkICJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE4Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTkKK21zZ2lkICJnaXQgcmVwbGFjZSAtbCBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMTgKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMTkKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyMAorbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMQorbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IHBhdGguLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NTYKKyMsIGZ1enp5Cittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgIiVz77ya5bey57uP5a2Y5Zyo5LqO57Si5byV5LitIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjUKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNgorbXNnaWQgImdpdCByZXNldCBbLXFdIDxjb21taXQ+IFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjcKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPGNvbW1pdD5dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgIm1peGVkIgorbXNnc3RyICLmt7fmnYIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgInNvZnQiCittc2dzdHIgIui9r+aApyIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiaGFyZCIKK21zZ3N0ciAi56Gs5oCnIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAi5ZCI5bm2IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJrZWVwIgorbXNnc3RyICLkv53mjIEiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo3NworbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICLmgqjmsqHmnInkuIDkuKrmnInmlYjnmoQgSEVBROOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc5Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAi5peg5rOV5om+5YiwIEhFQUQg5oyH5ZCR55qE5qCR44CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIuaXoOazleaJvuWIsCAlcyDmjIflkJHnmoTmoJHjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo5NgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIuS4jeiDveWGmeWFpeaWsOeahOe0ouW8leaWh+S7tuOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCDnjrDlnKjkvY3kuo4gJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMzAKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAi5LiN6IO96K+75Y+W57Si5byVIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTMzCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIumHjee9ruWQjuaSpOWHuuaaguWtmOWMuueahOWPmOabtO+8miIKKworIyAg6K+R6ICF77ya5rGJ5a2X5LmL6Ze05peg56m65qC877yM5pWF5Yig6ZmkJXPliY3lkI7nqbrmoLwKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAi5Zyo5ZCI5bm26L+H56iL5Lit5LiN6IO95YGaJXPph43nva7mk43kvZzjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyMzgKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDAKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjQxCittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDMgYnVpbHRpbi9yZXNldC5jOjI0NQorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI0NworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIuS4jeiDveino+aekOWvueixoSAnJXMn44CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA4Cittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoIOS4jiAtLXtoYXJkLG1peGVkLHNvZnR9IOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxNworbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1taXhlZCDluKbot6/lvoTlt7LlvIPnlKjvvIzogIzmmK/nlKggJ2dpdCByZXNldCAtLSA8cGF0aHM+J+OAgiIKKworIyAg6K+R6ICF77ya5rGJ5a2X5LmL6Ze05peg56m65qC877yM5pWF5Yig6ZmkJXPliY3lkI7nqbrmoLwKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICLkuI3og73luKbot6/lvoTov5vooYwlc+mHjee9ruOAgiIKKworIyAg6K+R6ICF77ya5rGJ5a2X5LmL6Ze05peg56m65qC877yM5pWF5Yig6ZmkJXPliY3lkI7nqbrmoLwKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIuS4jeiDveWvueijuOeJiOacrOW6k+i/m+ihjCVz6YeN572uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICLkuI3og73ph43nva7ntKLlvJXmlofku7boh7PniYjmnKwgJyVzJ+OAgiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozMzkKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFtvcHRpb25zXSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IGFwcGx5IFvpgInpobldIFs86KGl5LiBPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzQ0Cittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzQ2Cittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDY0Cittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbb3B0aW9uc10gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbb3B0aW9uc10gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMgorbXNnaWQgImdpdCByZXZlcnQgW29wdGlvbnNdIDxjb21taXQtaXNoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjIzCittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyOAorbXNnaWQgImdpdCBjaGVycnktcGljayBbb3B0aW9uc10gPGNvbW1pdC1pc2g+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjkKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAi5ouj6YCJ5aSx6LSlIgorCisjOiBidWlsdGluL3JldmVydC5jOjcwIGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVz77yaJXMg5LiN6IO95ZKMICVzIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDMKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNQorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDYKKyMsIGZ1enp5Cittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgIuS4jeiDveS9nOS4uuWIneWni+aPkOS6pOi/mOWOnyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKKyMsIGZ1enp5Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuepuuaPkOS6pOS/oeaBr+OAgiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJwYXJlbnQgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCisjLCBmdXp6eQorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLlsJ3or5XlkIjlubbnrZbnlaUgJXMuLi5cbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTMKKyMsIGZ1enp5Cittc2dpZCAib3B0aW9uIgorbXNnc3RyICLliqjkvZwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIuWwneivleWQiOW5tuetlueVpSAlcy4uLlxuIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNgorIywgZnV6enkKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgIu+8iOmdnuW/q+i/m+W8j++8iSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjcKKyMsIGZ1enp5Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIuS4jeiDveS9nOS4uuWIneWni+aPkOS6pOi/mOWOnyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjgKKyMsIGZ1enp5Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLmj5DkuqTor7TmmI7kuLrnqboiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5CisjLCBmdXp6eQorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICLlkIjlubbmnKrov5Tlm57mj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTMzCittc2dpZCAicHJvZ3JhbSBlcnJvciIKK21zZ3N0ciAi56iL5bqP6ZSZ6K+vIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyMworbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgIui/mOWOn+Wksei0pSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzgKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgIuaLo+mAieWksei0pSIKKworIzogYnVpbHRpbi9ybS5jOjE0CisjLCBmdXp6eQorbXNnaWQgImdpdCBybSBbb3B0aW9uc10gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBhcHBseSBb6YCJ6aG5XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL3JtLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZSBmaWxlIGFuZCB0aGUgSEVBRFxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyInJXMnIOaaguWtmOeahOWGheWuueWSjOW3peS9nOWMuuWPiiBIRUFEIOS4reeahOmDveS4jeS4gOagt1xuIgorIu+8iOS9v+eUqCAtZiDlvLrliLbliKDpmaTvvIkiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleFxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyInJXMnIOacieWPmOabtOW3suaaguWtmOiHs+e0ouW8leS4rVxuIgorIu+8iOS9v+eUqCAtLWNhY2hlZCDkv53lrZjmlofku7bvvIzmiJbnlKggLWYg5by65Yi25Yig6Zmk77yJIgorCisjOiBidWlsdGluL3JtLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIiclcycg5pyJ5pys5Zyw5L+u5pS5XG4iCisi77yI5L2/55SoIC0tY2FjaGVkIOS/neWtmOaWh+S7tu+8jOaIlueUqCAtZiDlvLrliLbliKDpmaTvvIkiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMzQKKyMsIGZ1enp5Cittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAi5peg5rOV6L+Y5Y6f5L+u5pS555qE5paH5Lu2IgorCisjOiBidWlsdGluL3JtLmM6MTM1CisjLCBmdXp6eQorbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLkuI3og73ku47ntKLlvJXkuK3np7vpmaQgJXMiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMzYKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MTM3Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjEzOQorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAi5pyq5o+Q5L6bIC1yIOmAiemhueS4jeS8mumAkuW9kuWIoOmZpCAnJXMnIgorCisjOiBidWlsdGluL3JtLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJt77ya5LiN6IO95Yig6ZmkICVzIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTMKK21zZ2lkICJnaXQgc2hvcnRsb2cgWy1uXSBbLXNdIFstZV0gWy13XSBbcmV2LW9wdHNdIFstLV0gWzxjb21taXQtaWQ+Li4uIF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGF1dGhvcjogJXMiCittc2dzdHIgIue8uuWwkeS9nOiAhe+8miVzIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjUzCittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNTUKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjU3Cittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjU4Cittc2dpZCAid1ssaTFbLGkyXV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI1OQorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6OQorbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hfC0tYWxsXSBbLXJ8LS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXSBbLS0iCisiY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdIFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS0iCisiaW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdIFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgIgorIjxnbG9iPikuLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMAorbXNnaWQgImdpdCBzaG93LWJyYW5jaCAoLWd8LS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MQorIywgZnV6enkKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIiVzIOayoeacieadpeiHqiAlcyDnmoTov5znqIvot5/ouKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTMKKyMsIGZ1enp5Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIiVzIOayoeacieadpeiHqiAlcyDnmoTov5znqIvot5/ouKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTUKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTcKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU5Cittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjAKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYyCisjLCBmdXp6eQorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLmsqHmnInlvZPliY3liIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQKKyMsIGZ1enp5Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICLkuI3og73lhpnms6jop6Plr7nosaEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjYKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzAKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MgorbXNnaWQgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzQKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NgorbXNnaWQgInNob3cgY29tbWl0cyB3aGVyZSBubyBwYXJlbnQgY29tZXMgYmVmb3JlIGl0cyBjaGlsZHJlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc4Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzkKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTAKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcXwtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZHwtLWRlcmVmZXJlbmNlXSBbLXN8LS1oYXNoIgorIls9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbcGF0dGVybipdICIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTEKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz1wYXR0ZXJuXSA8IHJlZi1saXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODIKKyMsIGZ1enp5Cittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAiLS1hbGwg5LiN6IO95ZKM5byV55So6KGo6L6+5byP5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTgzCisjLCBmdXp6eQorbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgIi0tYWxsIOS4jeiDveWSjOW8leeUqOihqOi+vuW8j+WQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4NyBidWlsdGluL3Nob3ctcmVmLmM6MTg5Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE5MQorIywgZnV6enkKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAi5byV55So5LiN5piv5LiA5Liq5qCR77yaJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxOTMKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE5NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxOTkKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NworbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgW29wdGlvbnNdIG5hbWUgW3JlZl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzozOAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzozOQorbXNnaWQgInNob3J0ZW4gcmVmIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjE4Cittc2dpZCAicmVhc29uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAgYnVpbHRpbi91cGRhdGUtcmVmLmM6MTgKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIyCittc2dpZCAiIgorImdpdCB0YWcgWy1hfC1zfC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPnwtRiA8ZmlsZT5dIDx0YWduYW1lPiBbPGhlYWQ+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIzCittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyNAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dIFxuIgorIlx0XHRbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjI2Cittc2dpZCAiZ2l0IHRhZyAtdiA8dGFnbmFtZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo2MAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgIumdnuazleeahOWvueixoeS6jiAnJXMnIgorCisjOiBidWlsdGluL3RhZy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIKK21zZ3N0ciAidGFnIOWQjeWtl+WkqumVv++8miUuKnMuLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgInRhZyAnJXMnIOacquWPkeeOsOOAgiIKKworIzogYnVpbHRpbi90YWcuYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICLlt7LliKDpmaQgdGFnICclcyfvvIjmm77kuLogJXPvvIlcbiIKKworIzogYnVpbHRpbi90YWcuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHZlcmlmeSB0aGUgdGFnICclcyciCittc2dzdHIgIuS4jeiDveagoemqjCB0YWcgJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzoyNDkKK21zZ2lkICIiCisiXG4iCisiI1xuIgorIiMgV3JpdGUgYSB0YWcgbWVzc2FnZVxuIgorIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgd2lsbCBiZSBpZ25vcmVkLlxuIgorIiNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiNcbiIKKyIjIOi+k+WFpeS4gOS4qiB0YWcg6K+05piOXG4iCisiIyDku6UgJyMnIOW8gOWktOeahOihjOWwhuiiq+W/veeVpeOAglxuIgorIiNcbiIKKworIzogYnVpbHRpbi90YWcuYzoyNTYKK21zZ2lkICIiCisiXG4iCisiI1xuIgorIiMgV3JpdGUgYSB0YWcgbWVzc2FnZVxuIgorIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKKyIjXG4iCittc2dzdHIgIiIKKyJcbiIKKyIjXG4iCisiIyDovpPlhaXkuIDkuKogdGFnIOivtOaYjlxuIgorIiMg5LulICcjJyDlvIDlpLTnmoTooYzlsIbooqvlv73nlaXvvIzmgqjlj6/ku6XliKDpmaTlroPku6zlpoLmnpzmgqjmg7Pov5nmoLflgZrjgIJcbiIKKyIjXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAi5peg5rOV562+572yIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzozMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgIuaXoOazleWGmSB0YWcg5paH5Lu2IgorCisjOiBidWlsdGluL3RhZy5jOjMyNQorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgIuWdj+eahOWvueixoeexu+Wei+OAgiIKKworIzogYnVpbHRpbi90YWcuYzozMzgKK21zZ2lkICJ0YWcgaGVhZGVyIHRvbyBiaWcuIgorbXNnc3RyICJ0YWcg5aS05L+h5oGv5aSq5aSn44CCIgorCisjOiBidWlsdGluL3RhZy5jOjM3MAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAi5pegIHRhZyDor7TmmI7vvJ8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgInRhZyDor7TmmI7ooqvkv53nlZnlnKggJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo0MjUKK21zZ2lkICJzd2l0Y2ggJ3BvaW50cy1hdCcgcmVxdWlyZXMgYW4gb2JqZWN0IgorbXNnc3RyICLlvIDlhbMgJ3BvaW50cy1hdCcg6ZyA6KaB5LiA5Liq5a+56LGhIgorCisjOiBidWlsdGluL3RhZy5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAi6Z2e5rOV55qE5a+56LGh5ZCNICclcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDQ3Cittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0NDkKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQ1MQorIywgZnV6enkKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAi5Yig6ZmkIgorCisjOiBidWlsdGluL3RhZy5jOjQ1MgorbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDU0Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0NTYKKyMsIGZ1enp5Cittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICLms6jph4ogdGFnICVzIOayoeacieW1jOWFpeWQjeensCIKKworIzogYnVpbHRpbi90YWcuYzo0NTgKKyMsIGZ1enp5Cittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgIuaXoCB0YWcg6K+05piO77yfIgorCisjOiBidWlsdGluL3RhZy5jOjQ2MAorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0NjQKKyMsIGZ1enp5Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAi5peg5rOV562+572yIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0NjUKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDY2Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDY4Cittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQ3MQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQ3NworbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIOWSjCAtbiDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiLW4g6YCJ6aG55Y+q5YWB6K645ZKMIC1sIOWQjOaXtuS9v+eUqOOAgiIKKworIzogYnVpbHRpbi90YWcuYzo1MjUKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgIi0tY29udGFpbnMg6YCJ6aG55Y+q5YWB6K645ZKMIC1sIOWQjOaXtuS9v+eUqOOAgiIKKworIzogYnVpbHRpbi90YWcuYzo1MjcKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICItLXBvaW50cy1hdCDpgInpobnlj6rlhYHorrjlkowgLWwg5ZCM5pe25L2/55So44CCIgorCisjOiBidWlsdGluL3RhZy5jOjUzNQorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAi5Y+q5YWB6K645LiA5LiqIC1GIOaIliAtbSDpgInpobnjgIIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTU1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICLlpKrlpJrlj4LmlbAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOS4quacieaViOeahHRhZ+WQjeensOOAgiIKKworIzogYnVpbHRpbi90YWcuYzo1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgInRhZyAnJXMnIOW3suWtmOWcqCIKKworIzogYnVpbHRpbi90YWcuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBsb2NrIHRoZSByZWYiCittc2dzdHIgIiVz77ya5LiN6IO96ZSB5a6a5byV55SoIgorCisjOiBidWlsdGluL3RhZy5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHVwZGF0ZSB0aGUgcmVmIgorbXNnc3RyICIlc++8muS4jeiDveabtOaWsOW8leeUqCIKKworIzogYnVpbHRpbi90YWcuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICLlt7Lmm7TmlrB0YWcgJyVzJ++8iOabvuS4uiAlc++8iVxuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjQwMQorIywgZnV6enkKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFtvcHRpb25zXSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgW+mAiemhuV0gWzzooaXkuIE+Li4uXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3MTcKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3MjAKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcyMworIywgZnV6enkKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAi5peg5rOV5a2Y5YKo57Si5byV5paH5Lu2IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcyNQorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzI3Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcyOQorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzMyCittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzM2Cittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzQwCittc2dpZCAiPG1vZGU+IDxvYmplY3Q+IDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc0MQorIywgZnV6enkKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgIua3u+WKoOaWh+S7tuWGheWuueiHs+e0ouW8lSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NDUKK21zZ2lkICIoKy8tKXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NDYKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc1MAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc1MworbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc1NgorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NTkKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2MgorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzY0Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2NgorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2OAorIywgZnV6enkKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLvvIjmraPku47moIflh4bovpPlhaXkuK3or7vlj5bml6Xlv5fkv6Hmga/vvIlcbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NzIKKyMsIGZ1enp5Cittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgIuS4jeiDveS7juagh+WHhui+k+WFpeS4reivu+WPluaXpeW/l+S/oeaBryIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NzYKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3ODAKK21zZ2lkICJvbmx5IHVwZGF0ZSBlbnRyaWVzIHRoYXQgZGlmZmVyIGZyb20gSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc4NAorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3ODcKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3ODkKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc5MworbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjcKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbb3B0aW9uc10gLWQgPHJlZm5hbWU+IFs8b2xkdmFsPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6OAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFtvcHRpb25zXSAgICA8cmVmbmFtZT4gPG5ld3ZhbD4gWzxvbGR2YWw+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxOQorbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjIxCittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo2Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNAorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU2Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdnwtLXZlcmJvc2VdIFstc3wtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NgorIywgZnV6enkKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICLlhpfplb/ovpPlh7oiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2OAorbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE3Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12fC0tdmVyYm9zZV0gPHRhZz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6NzMKK21zZ2lkICJwcmludCB0YWcgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTMKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyNworbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMAorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgIiIKKworIzogZ2l0LmM6MTYKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIKK21zZ3N0ciAi5Y+C6KeBICdnaXQgaGVscCA8Y29tbWFuZD4nIOS7peiOt+W+l+ivpeeJueWumuWRveS7pOeahOivpue7huS/oeaBr+OAgiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE1NgorbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAi56m65pON5L2c77yI5ZCR5ZCO5YW85a6577yJIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjI4Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICLmm7TliqDor6bnu4YiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzAKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICLmm7TliqDlronpnZkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzYKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAi55SoIDxuPiDkvY3mlbDlrZfmmL7npLogU0hBLTEg5ZOI5biM5YC8IgorCisjOiBjb21tb24tY21kcy5oOjgKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIua3u+WKoOaWh+S7tuWGheWuueiHs+e0ouW8lSIKKworIzogY29tbW9uLWNtZHMuaDo5Cittc2dpZCAiRmluZCBieSBiaW5hcnkgc2VhcmNoIHRoZSBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICLpgJrov4fkuozliIbmn6Xmib7lrprkvY3lvJXlhaUgYnVnIOeahOWPmOabtCIKKworIzogY29tbW9uLWNtZHMuaDoxMAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICLliJflh7rjgIHliJvlu7rmiJbliKDpmaTliIbmlK8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MTEKK21zZ2lkICJDaGVja291dCBhIGJyYW5jaCBvciBwYXRocyB0byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLmo4Dlh7rkuIDkuKrliIbmlK/miJbot6/lvoTliLDlt6XkvZzljLoiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTIKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIuWFi+mahuS4gOS4queJiOacrOW6k+WIsOS4gOS4quaWsOebruW9lSIKKworIzogY29tbW9uLWNtZHMuaDoxMworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICLorrDlvZXlj5jmm7TliLDniYjmnKzlupMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTQKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICLmmL7npLrmj5DkuqTkuYvpl7TjgIHmj5DkuqTlkozlt6XkvZzljLrkuYvpl7TnrYnnmoTlt67lvIIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTUKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLku47lj6blpJbkuIDkuKrniYjmnKzlupPkuIvovb3lr7nosaHlkozlvJXnlKgiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTYKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIui+k+WHuuWSjOaooeW8j+WMuemFjeeahOihjCIKKworIzogY29tbW9uLWNtZHMuaDoxNworbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBnaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICLliJvlu7rkuIDkuKrnqbrnmoQgZ2l0IOeJiOacrOW6k+aIluiAhemHjeaWsOWIneWni+WMluS4gOS4qiIKKworIzogY29tbW9uLWNtZHMuaDoxOAorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIuaYvuekuuaPkOS6pOaXpeW/lyIKKworIzogY29tbW9uLWNtZHMuaDoxOQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICLlkIjlubbkuKTkuKrmiJbmm7TlpJrlvIDlj5Hljoblj7IiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjAKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIuenu+WKqOaIlumHjeWRveWQjeS4gOS4quaWh+S7tuOAgeebruW9leaIluespuWPt+mTvuaOpSIKKworIzogY29tbW9uLWNtZHMuaDoyMQorbXNnaWQgIkZldGNoIGZyb20gYW5kIG1lcmdlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICLojrflj5blubblkIjlubblj6blpJbnmoTniYjmnKzlupPmiJbkuIDkuKrmnKzlnLDliIbmlK8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjIKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIuabtOaWsOi/nOeoi+W8leeUqOWSjOebuOWFs+eahOWvueixoSIKKworIzogY29tbW9uLWNtZHMuaDoyMworbXNnaWQgIkZvcndhcmQtcG9ydCBsb2NhbCBjb21taXRzIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQiCittc2dzdHIgIuacrOWcsOaPkOS6pOi9rOenu+iHs+abtOaWsOWQjueahOS4iua4uOWIhuaUr+S4rSIKKworIzogY29tbW9uLWNtZHMuaDoyNAorbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICLph43nva7lvZPliY1IRUFE5Yiw5oyH5a6a54q25oCBIgorCisjOiBjb21tb24tY21kcy5oOjI1Cittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIuS7juW3peS9nOWMuuWSjOe0ouW8leS4reWIoOmZpOaWh+S7tiIKKworIzogY29tbW9uLWNtZHMuaDoyNgorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICLmmL7npLrlkITnp43nsbvlnovnmoTlr7nosaEiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjcKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICLmmL7npLrlt6XkvZzljLrnirbmgIEiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjgKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAi5Yib5bu644CB5YiX5Ye644CB5Yig6Zmk5oiW5qCh6aqM5LiA5LiqR1BH562+5ZCN55qEIHRhZyDlr7nosaEiCisKKyM6IGdpdC1hbS5zaDo1MAorbXNnaWQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgorbXNnc3RyICLmgqjpnIDopoHlhYjorr7nva7kvaDnmoTmj5DkuqTogIXkv6Hmga8iCisKKyM6IGdpdC1hbS5zaDo5NQorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICLmgqjlpb3lg4/lnKjkuIrkuIDmrKEgJ2FtJyDlpLHotKXlkI7np7vliqjkuoYgSEVBROOAguacquWbnumAgOiHsyBPUklHX0hFQUQiCisKKyM6IGdpdC1hbS5zaDoxMDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJGNtZGxpbmUgLS1yZXNvbHZlZFwiLlxuIgorIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIkY21kbGluZSAtLXNraXBcIiBpbnN0ZWFkLlxuIgorIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorIuW9k+aCqOino+WGs+S6huatpOmXrumimOWQju+8jOaJp+ihjCBcIiRjbWRsaW5lIC0tcmVzb2x2ZWRcIuOAglxuIgorIuWmguaenOaCqOaDs+i3s+i/h+atpOihpeS4ge+8jOWImeaJp+ihjCBcIiRjbWRsaW5lIC0tc2tpcFwi44CCXG4iCisi6KaB5oGi5aSN5Y6f5YiG5pSv5bm25YGc5q2i5omT6KGl5LiB77yM5omn6KGMIFwiJGNtZGxpbmUgLS1hYm9ydFwi44CCIgorCisjOiBnaXQtYW0uc2g6MTIxCittc2dpZCAiQ2Fubm90IGZhbGwgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuIgorbXNnc3RyICLml6Dms5XmsYLliqnkuo7kuInot6/lkIjlubbjgIIiCisKKyM6IGdpdC1hbS5zaDoxMzcKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICLniYjmnKzlupPnvLrkuY/lv4XopoHnmoTkuozov5vliLblr7nosaHvvIhibG9i77yJ5Lul6L+b6KGM5LiJ6Lev5ZCI5bm244CCIgorCisjOiBnaXQtYW0uc2g6MTM5Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAi5pu05paw57Si5byV5L+h5oGv5Lul6YeN5bu65Z+65qCRLi4uIgorCisjOiBnaXQtYW0uc2g6MTU0Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIuaCqOaYr+WQpuabvuaJi+WKqOe8lui+kei/h+aCqOeahOihpeS4ge+8n1xuIgorIuaXoOazleW6lOeUqOihpeS4geWIsOe0ouW8leS4reeahOS6jOi/m+WItuWvueixoe+8iGJsb2LvvInkuIrjgIIiCisKKyM6IGdpdC1hbS5zaDoxNjMKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIui9rOiAjOWcqOWfuuehgOeJiOacrOS4iuaJk+ihpeS4geWPiui/m+ihjOS4iei3r+WQiOW5ti4uLiIKKworIzogZ2l0LWFtLnNoOjE3OQorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgIuaXoOazleWQiOW5tuWPmOabtOOAgiIKKworIzogZ2l0LWFtLnNoOjI3NAorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICLkuIDmrKHlj6rog73mnInkuIDkuKogU3RHSVQg6KGl5LiB6Zif5YiX6KKr5bqU55SoIgorCisjOiBnaXQtYW0uc2g6MzYxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmb3JtYXQgJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAi5LiN5pSv5oyBICRwYXRjaF9mb3JtYXQg6KGl5LiB5qC85byP44CCIgorCisjOiBnaXQtYW0uc2g6MzYzCittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICLooaXkuIHmoLzlvI/mo4DmtYvlpLHotKXjgIIiCisKKyM6IGdpdC1hbS5zaDozODkKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyLlj4LmlbAgLWIvLS1iaW5hcnkg5bey57uP5b6I6ZW/5pe26Ze05LiN5YGa5Lu75L2V5a6e6LSo5pON5L2c5LqG77yM5bm25LiU5bCG6KKr5Yig6Zmk44CCXG4iCisi6K+35LiN6KaB5YaN5L2/55So5a6D5LqG44CCIgorCisjOiBnaXQtYW0uc2g6NDc3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICRkb3Rlc3Qgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAi5LmL5YmN55qE5Y+Y5Z+655uu5b2VICRkb3Rlc3Qg5LuN54S25a2Y5Zyo5L2G57uZ5Ye65LqGbWJveOOAgiIKKworIzogZ2l0LWFtLnNoOjQ4MgorbXNnaWQgIlBsZWFzZSBtYWtlIHVwIHlvdXIgbWluZC4gLS1za2lwIG9yIC0tYWJvcnQ/IgorbXNnc3RyICLor7fkuIvlhrPlv4PjgIItLXNraXAg5oiW5pivIC0tYWJvcnQg77yfIgorCisjOiBnaXQtYW0uc2g6NTA5Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAi6Kej5Yaz5pON5L2c5pyq6L+b6KGM77yM5oiR5Lus5LiN5Lya57un57ut44CCIgorCisjOiBnaXQtYW0uc2g6NTc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAkZmlsZXMpIgorbXNnc3RyICLohI/nmoTntKLlvJXvvJrkuI3og73lupTnlKjooaXkuIHvvIjohI/mlofku7bvvJokZmlsZXPvvIkiCisKKyM6IGdpdC1hbS5zaDo2NzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRjaCBpcyBlbXB0eS4gIFdhcyBpdCBzcGxpdCB3cm9uZz9cbiIKKyJJZiB5b3Ugd291bGQgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgaW5zdGVhZCBydW4gXCIkY21kbGluZSAtLXNraXBcIi5cbiIKKyJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcgcnVuIFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorIuihpeS4geS4uuepuuOAguaYr+S4jeaYr+WIh+WIhumUmeivr++8n1xuIgorIuWmguaenOaCqOaDs+imgei3s+i/h+i/meS4quihpeS4ge+8jOaJp+ihjCBcIiRjbWRsaW5lIC0tc2tpcFwi44CCXG4iCisi6KaB5oGi5aSN5Y6f5YiG5pSv5bm25YGc5q2i5omT6KGl5LiB77yM5omn6KGMIFwiJGNtZGxpbmUgLS1hYm9ydFwi44CCIgorCisjOiBnaXQtYW0uc2g6NzA2Cittc2dpZCAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKK21zZ3N0ciAi6KGl5LiB5Lit5rKh5pyJ5LiA5Liq5pyJ5pWI55qE6YKu5Lu25Zyw5Z2A44CCIgorCisjOiBnaXQtYW0uc2g6NzUzCittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICLmoIflh4bovpPlhaXmsqHmnInlkoznu4jnq6/lhbPogZTvvIzkuI3og73ov5vooYzkuqTkupLlvI/mk43kvZzjgIIiCisKKyM6IGdpdC1hbS5zaDo3NTcKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIuaPkOS6pOWGheWuueS4uu+8miIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5Y+l5bC+56m65qC8CisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1hbS5zaDo3NjQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbCAiCittc2dzdHIgIuW6lOeUqO+8n1t5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorCisjOiBnaXQtYW0uc2g6ODAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJEZJUlNUTElORSIKK21zZ3N0ciAi5q2j5bqU55So77yaJEZJUlNUTElORSIKKworIzogZ2l0LWFtLnNoOjgyMQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorIuayoeacieWPmOabtCDigJTigJQg5oKo5piv5LiN5piv5b+Y5LqG5omn6KGMICdnaXQgYWRkJ++8n1xuIgorIuWmguaenOayoeacieS7gOS5iOimgea3u+WKoOWIsOaaguWtmOWMuueahO+8jOWImeW+iOWPr+iDveaYr+WFtuWug+aPkOS6pOW3sue7j+W8leWFpeS6huebuOWQjOeahOWPmOabtOOAglxuIgorIuaCqOS5n+iuuOaDs+imgei3s+i/h+i/meS4quihpeS4geOAgiIKKworIzogZ2l0LWFtLnNoOjgyOQorbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4XG4iCisiZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz8iCittc2dzdHIgIuaCqOeahOe0ouW8leS4reS7jeacieacquWQiOW5tueahOi3r+W+hOOAguaCqOaYr+WQpuW/mOS6huaJp+ihjCAnZ2l0IGFkZCfvvJ8iCisKKyM6IGdpdC1hbS5zaDo4NDUKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIuayoeacieWPmOabtCAtLSDooaXkuIHlt7Lnu4/lupTnlKjov4fjgIIiCisKKyM6IGdpdC1hbS5zaDo4NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAkbXNnbnVtICRGSVJTVExJTkUiCittc2dzdHIgIuihpeS4geWksei0peS6jiAkbXNnbnVtICRGSVJTVExJTkUiCisKKyM6IGdpdC1hbS5zaDo4NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29weSBvZiB0aGUgcGF0Y2ggdGhhdCBmYWlsZWQgaXMgZm91bmQgaW46XG4iCisiICAgJGRvdGVzdC9wYXRjaCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6ODc2Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAi5q2j5bqU55So5Yiw5LiA5Liq56m65Y6G5Y+y5LiKIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ4Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIuaCqOmcgOimgeaJp+ihjCBcImdpdCBiaXNlY3Qgc3RhcnRcIiDmnaXlvIDlp4siCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWPpeWwvuepuuagvAorIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICLmgqjmg7PorqnmiJHkuLrmgqjov5nmoLflgZrkuYhbWS9uXe+8nyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qE6YCJ6aG577yaJyRhcmcnIgorCisjOiBnaXQtYmlzZWN0LnNoOjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIickYXJnJyDnnIvotbfmnaXkuI3lg4/mmK/kuIDkuKrmnInmlYjnmoTniYjmnKwiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTE3Cittc2dpZCAiQmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICLlnY/nmoQgSEVBRCAtIOaIkemcgOimgeS4gOS4qiBIRUFEIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNoZWNraW5nIG91dCAnJHN0YXJ0X2hlYWQnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDx2YWxpZGJyYW5jaD4nLiIKK21zZ3N0ciAi5qOA5Ye6ICckc3RhcnRfaGVhZCcg5aSx6LSl44CC5bCd6K+VICdnaXQgYmlzZWN0IHJlc2V0IDx2YWxpZGJyYW5jaD4n44CCIgorCisjOiBnaXQtYmlzZWN0LnNoOjE0MAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBzZWVrZWQgdHJlZSIKK21zZ3N0ciAi5LiN5Lya5Zyo5bey5p+l5om+6L+H55qE5qCR5LiK5LqM5YiG5p+l5om+IgorCisjOiBnaXQtYmlzZWN0LnNoOjE0NAorbXNnaWQgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIuWdj+eahCBIRUFEIC0g5aWH5oCq55qE56ym5Y+35byV55SoIgorCisjOiBnaXQtYmlzZWN0LnNoOjE4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJHN0YXRlIgorbXNnc3RyICLlnY/nmoQgYmlzZWN0X3dyaXRlIOWPguaVsO+8miRzdGF0ZSIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIui+k+WFpeWdj+eahOeJiOacrO+8miRhcmciCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIgorbXNnc3RyICLor7flnKjosIPnlKggJ2Jpc2VjdF9zdGF0ZScg5pe26Lef6Iez5bCR5LiA5Liq5Y+C5pWw44CCIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAi6L6T5YWl5Z2P55qE54mI5pys77yaJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTAKK21zZ2lkICInZ2l0IGJpc2VjdCBiYWQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiJ2dpdCBiaXNlY3QgYmFkJyDlj6rog73luKbkuIDkuKrlj4LmlbDjgIIiCisKKyMuIGhhdmUgYmFkIGJ1dCBub3QgZ29vZC4gIHdlIGNvdWxkIGJpc2VjdCBhbHRob3VnaAorIy4gdGhpcyBpcyBsZXNzIG9wdGltdW0uCisjOiBnaXQtYmlzZWN0LnNoOjI3MworbXNnaWQgIldhcm5pbmc6IGJpc2VjdGluZyBvbmx5IHdpdGggYSBiYWQgY29tbWl0LiIKK21zZ3N0ciAi6K2m5ZGK77ya5Zyo5LuF5pyJ5LiA5Liq5Z2P5o+Q5Lqk5LiL6L+b6KGM5LqM5YiG5p+l5om+44CCIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHlj6XlsL7nqbrmoLwKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDoyNzkKK21zZ2lkICJBcmUgeW91IHN1cmUgW1kvbl0/ICIKK21zZ3N0ciAi5oKo56Gu6K6k5LmIW1kvbl3vvJ8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4OQorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSBnb29kIGFuZCBvbmUgYmFkIHJldmlzaW9ucy5cbiIKKyIoWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0IGJhZFwiIGFuZCBcImdpdCBiaXNlY3QgZ29vZFwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyLmgqjpnIDopoHnu5nmiJHoh7PlsJHkuIDkuKrlpb3niYjmnKzlkozkuIDkuKrlnY/niYjmnKzjgIJcbiIKKyLvvIjmgqjlj6/ku6XnlKggXCJnaXQgYmlzZWN0IGJhZFwiIOWSjCBcImdpdCBiaXNlY3QgZ29vZFwiIOWRveS7pOadpeagh+ivhuOAgu+8iSIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTIKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSBnb29kIGFuZCBvbmUgYmFkIHJldmlzaW9ucy5cbiIKKyIoWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0IGJhZFwiIGFuZCBcImdpdCBiaXNlY3QgZ29vZFwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyLmgqjpnIDopoHmiafooYwgXCJnaXQgYmlzZWN0IHN0YXJ0XCIg5p2l5byA5aeL44CCXG4iCisi54S25ZCO6ZyA6KaB5o+Q5L6b5oiR6Iez5bCR5LiA5Liq5aW954mI5pys5ZKM5LiA5Liq5Z2P54mI5pys44CCXG4iCisi77yI5oKo5Y+v5Lul55SoIFwiZ2l0IGJpc2VjdCBiYWRcIiDlkowgXCJnaXQgYmlzZWN0IGdvb2RcIiDlkb3ku6TmnaXmoIfor4bjgILvvIkiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzQ3IGdpdC1iaXNlY3Quc2g6NDc0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICLmiJHku6zmsqHmnInlnKjkuozliIbmn6Xmib7jgIIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyRpbnZhbGlkJyDkuI3mmK/kuIDkuKrmnInmlYjnmoTmj5DkuqQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzYzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICckYnJhbmNoJy5cbiIKKyJUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorIuS4jeiDveajgOWHuuWOn+WniyBIRUFEICckYnJhbmNoJ+OAglxuIgorIuWwneivlSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PifjgIIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkwCittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAi5pyq5o+Q5L6b5pel5b+X5paH5Lu2IgorCisjOiBnaXQtYmlzZWN0LnNoOjM5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAi5LiN6IO96K+75Y+WICRmaWxlIOadpemHjeaUviIKKworIzogZ2l0LWJpc2VjdC5zaDo0MDgKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIj8/IOaCqOWcqOivtOS7gOS5iD8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDIwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICLov5DooYwgJGNvbW1hbmQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDI3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyLkuozliIbmn6Xmib7ov5DooYzlpLHotKXvvJpcbiIKKyLlkb3ku6QgJyRjb21tYW5kJyDnmoTpgIDlh7rnoIEgJHJlcyDmiJbogIXlsI/kuo4gMCDmiJbogIXlpKfkuo7nrYnkuo4gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1MworbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICLkuozliIbmn6Xmib7kuI3og73nu6fnu63ov5DooYwiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDU5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAiIgorIuS6jOWIhuafpeaJvui/kOihjOWksei0pe+8mlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyDpgIDlh7rnoIHkuLogJHJlcyIKKworIzogZ2l0LWJpc2VjdC5zaDo0NjYKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgIuS6jOWIhuafpeaJvui/kOihjOaIkOWKnyIKKworIzogZ2l0LXB1bGwuc2g6MjEKK21zZ2lkICIiCisiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy5cbiIKKyJQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uLCBvciB1c2UgJ2dpdCBjb21taXQgLWEnLiIKK21zZ3N0ciAiIgorIlB1bGwg5LiN5Y+v55So77yM5Zug5Li65oKo5bCa5pyJ5pyq5ZCI5bm255qE5paH5Lu244CC6K+35YWI5Zyo5bel5L2c5Yy65pS55q2j5paH5Lu277yMXG4iCisi54S25ZCO6YWM5oOF5L2/55SoICdnaXQgYWRkL3JtIDxmaWxlPicg5qCH6K6w6Kej5Yaz5pa55qGI77yMXG4iCisi5oiW6ICF5L2/55SoICdnaXQgY29tbWl0IC1hJ+OAgiIKKworIzogZ2l0LXB1bGwuc2g6MjUKK21zZ2lkICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiUHVsbCDkuI3lj6/nlKjvvIzlm6DkuLrmgqjlsJrmnInmnKrlkIjlubbnmoTmlofku7bjgIIiCisKKyM6IGdpdC1wdWxsLnNoOjE5NworbXNnaWQgInVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi5pu05paw5bCa5pyq6K+e55Sf55qE5YiG5pSv77yM5Y+Y5pu05re75Yqg6Iez57Si5byVIgorCisjLiBUaGUgZmV0Y2ggaW52b2x2ZWQgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoLgorIy4gVGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IGZpbGUgaXMgc3RpbGwgYmFzZWQgb24gdGhlCisjLiAkb3JpZ19oZWFkIGNvbW1pdCwgYnV0IHdlIGFyZSBtZXJnaW5nIGludG8gJGN1cnJfaGVhZC4KKyMuIEZpcnN0IHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIHRvIG1hdGNoICRjdXJyX2hlYWQuCisjOiBnaXQtcHVsbC5zaDoyMjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorIldhcm5pbmc6IGZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiV2FybmluZzogY29tbWl0ICRvcmlnX2hlYWQuIgorbXNnc3RyICIiCisi6K2m5ZGK77yaZmV0Y2gg5pu05paw5LqG5b2T5YmN55qE5YiG5pSv44CC5oKo55qE5bel5L2c5Yy6XG4iCisi6K2m5ZGK77ya5LuO5Y6f5o+Q5LqkICRvcmlnX2hlYWQg5b+r6L+b44CCIgorCisjOiBnaXQtcHVsbC5zaDoyNTMKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICLml6Dms5XlsIblpJrkuKrliIbmlK/lkIjlubbliLDnqbrliIbmlK8iCisKKyM6IGdpdC1wdWxsLnNoOjI1NworbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIKK21zZ3N0ciAi5peg5rOV5Y+Y5Z+65Yiw5aSa5Liq5YiG5pSvIgorCisjOiBnaXQtcmViYXNlLnNoOjUyCittc2dpZCAiIgorIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBpbnN0ZWFkLlxuIgorIlRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHJlYmFzaW5nLCBydW4gXCJnaXQgcmViYXNlIC0tYWJvcnQiCisiXCIuIgorbXNnc3RyICIiCisi5b2T5oKo6Kej5Yaz5LqG5q2k6Zeu6aKY5ZCO77yM5omn6KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLjgIJcbiIKKyLlpoLmnpzmgqjmg7Pot7Pov4fmraTooaXkuIHvvIzliJnmiafooYwgXCJnaXQgcmViYXNlIC0tc2tpcFwi44CCXG4iCisi6KaB5oGi5aSN5Y6f5YiG5pSv5bm25YGc5q2i5Y+Y5Z+677yM5omn6KGMIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCLjgIIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTU5Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIumSqeWtkCBwcmUtcmViYXNlIOaLkue7neWPmOWfuuOAgiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjQKK21zZ2lkICJJdCBsb29rcyBsaWtlIGdpdC1hbSBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIuS8vOS5juato+WkhOS6juWcqCBnaXQtYW0g55qE5omn6KGM6L+H56iL5Lit44CC5peg5rOV5Y+Y5Z+644CCIgorCisjOiBnaXQtcmViYXNlLnNoOjI5NQorbXNnaWQgIlRoZSAtLWV4ZWMgb3B0aW9uIG11c3QgYmUgdXNlZCB3aXRoIHRoZSAtLWludGVyYWN0aXZlIG9wdGlvbiIKK21zZ3N0ciAi6YCJ6aG5IC0tZXhlYyDlv4XpobvlkozpgInpobkgLS1pbnRlcmFjdGl2ZSDlkIzml7bkvb/nlKgiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzAwCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAi5rKh5pyJ5q2j5Zyo6L+b6KGM55qE5Y+Y5Z+677yfIgorCisjOiBnaXQtcmViYXNlLnNoOjMxMworbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIuS4jeiDveivu+WPliBIRUFEIgorCisjOiBnaXQtcmViYXNlLnNoOjMxNgorbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorIuaCqOW/hemhu+e8lui+keaJgOacieeahOWQiOW5tuWGsueqge+8jOeEtuWQjumAmui/hyBnaXQgYWRkXG4iCisi5ZG95Luk5bCG5a6D5Lus5qCH6K6w5Li65bey6Kej5YazIgorCisjOiBnaXQtcmViYXNlLnNoOjMzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorbXNnc3RyICLml6Dms5Xnp7vlm54gJGhlYWRfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDozNTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAkc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuIgorbXNnc3RyICIiCisi5aW95YOP5bey5pyJ5LiA5LiqICRzdGF0ZV9kaXJfYmFzZSDnm67lvZXvvIzmiJHmgIDnlpHmgqjmraPlpITkuo7lj6blpJbkuIDkuKrlj5jln7rov4fnqIvkuK3jgIJcbiIKKyLlpoLmnpzmmK/ov5nmoLfvvIzor7flsJ3or5XmiafooYxcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyLlpoLmnpzkuI3mmK/ov5nmoLfvvIzor7fmiafooYxcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisi54S25ZCO5YaN6YeN5paw5omn6KGM5Y+Y5Z+644CC5Li66YG/5YWN5oKo5Lii5aSx6YeN6KaB5pWw5o2u77yM5oiR5bey57uP5YGc5q2i5b2T5YmN5pON5L2c44CCIgorCisjOiBnaXQtcmViYXNlLnNoOjM5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAkdXBzdHJlYW1fbmFtZSIKK21zZ3N0ciAi5peg5pWI55qE5LiK5ri4ICR1cHN0cmVhbV9uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjQxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIiRvbnRvX25hbWU6IOacieS4gOS4quS7peS4iueahOWQiOW5tuWfuuWHhiIKKworIzogZ2l0LXJlYmFzZS5zaDo0MjIgZ2l0LXJlYmFzZS5zaDo0MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGlzIG5vIG1lcmdlIGJhc2UiCittc2dzdHIgIiRvbnRvX25hbWU6IOayoeacieWQiOW5tuWfuuWHhiIKKworIzogZ2l0LXJlYmFzZS5zaDo0MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorbXNnc3RyICLmsqHmnInmjIflkJHkuIDkuKrmnInmlYjnmoTmj5DkuqTvvJokb250b19uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjQ1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoOiAkYnJhbmNoX25hbWUiCittc2dzdHIgIuS4pemHjemUmeivr++8muaXoOatpOWIhuaUr++8miRicmFuY2hfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo0NzQKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICLor7fmj5DkuqTmiJbkuLrlroPku6zkv53lrZjov5vluqbjgIIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIuW9k+WJjeWIhuaUryAkYnJhbmNoX25hbWUg5piv5pyA5paw55qE44CCIgorCisjOiBnaXQtcmViYXNlLnNoOjQ5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICLlvZPliY3liIbmlK8gJGJyYW5jaF9uYW1lIOaYr+acgOaWsOeahO+8jOW8uuWItuWPmOWfuuOAgiIKKworIzogZ2l0LXJlYmFzZS5zaDo1MDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAkbWIgdG8gJG9udG86IgorbXNnc3RyICLlj5jmm7Tku44gJG1iIOWIsCAkb250b++8miIKKworIy4gRGV0YWNoIEhFQUQgYW5kIHJlc2V0IHRoZSB0cmVlCisjOiBnaXQtcmViYXNlLnNoOjUxNQorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKK21zZ3N0ciAi6aaW5YWI77yM6YeN572u5aS05oyH6ZKI5Lul5L6/5Zyo5LiK6Z2i6YeN5pS+5oKo55qE5bel5L2cLi4uIgorCisjOiBnaXQtcmViYXNlLnNoOjUyMworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJGJyYW5jaF9uYW1lIHRvICRvbnRvX25hbWUuIgorbXNnc3RyICLlv6vov5sgJGJyYW5jaF9uYW1lIOiHsyAkb250b19uYW1l44CCIgorCisjOiBnaXQtc3Rhc2guc2g6NTEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciDkuI3mlK/mjIHlj4LmlbAiCisKKyM6IGdpdC1zdGFzaC5zaDo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICLmgqjlsJrmnKrlu7rnq4vliJ3lp4vmj5DkuqQiCisKKyM6IGdpdC1zdGFzaC5zaDo4OQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICLml6Dms5Xkv53lrZjlvZPliY3ntKLlvJXnirbmgIEiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjMgZ2l0LXN0YXNoLnNoOjEzNgorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICLml6Dms5Xkv53lrZjlvZPliY3lt6XkvZzljLrnirbmgIEiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDAKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICLmsqHmnInpgInmi6nlj5jmm7QiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDMKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk5Li05pe257Si5byV77yI5LiN5bqU5Y+R55Sf77yJIgorCisjOiBnaXQtc3Rhc2guc2g6MTU2Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIuS4jeiDveiusOW9leW3peS9nOWMuueKtuaAgSIKKworIy4gVFJBTlNMQVRPUlM6ICRvcHRpb24gaXMgYW4gaW52YWxpZCBvcHRpb24sIGxpa2UKKyMuIGAtLWJsYWgtYmxhaCcuIFRoZSA3IHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorIy4gc2Vjb25kIGxpbmUgY29ycmVzcG9uZCB0byAiZXJyb3I6ICIuIFNvIHlvdSBzaG91bGQgbGluZQorIy4gdXAgdGhlIHNlY29uZCBsaW5lIHdpdGggaG93ZXZlciBtYW55IGNoYXJhY3RlcnMgdGhlCisjLiB0cmFuc2xhdGlvbiBvZiAiZXJyb3I6ICIgdGFrZXMgaW4geW91ciBsYW5ndWFnZS4gRS5nLiBpbgorIy4gRW5nbGlzaCB0aGlzIGlzOgorIy4KKyMuICQgZ2l0IHN0YXNoIHNhdmUgLS1ibGFoLWJsYWggMj4mMSB8IGhlYWQgLW4gMgorIy4gZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6IC0tYmxhaC1ibGFoCisjLiBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICctLWJsYWgtYmxhaCcKKyM6IGdpdC1zdGFzaC5zaDoyMDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgICBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKK21zZ3N0ciAiIgorIumUmeivr++8midzdGFzaCBzYXZlJyDnmoTmnKrnn6XpgInpobnvvJokb3B0aW9uXG4iCisiICAgICAg6KaB5o+Q5L6b5LiA5Liq5o+P6L+w5L+h5oGv77yM5L2/55SoIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKKworIzogZ2l0LXN0YXNoLnNoOjIyMworbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAi5rKh5pyJ6KaB5L+d5a2Y55qE5pys5Zyw5L+u5pS5IgorCisjOiBnaXQtc3Rhc2guc2g6MjI3Cittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIuaXoOazleWIneWni+WMliBzdGFzaCIKKworIzogZ2l0LXN0YXNoLnNoOjIzNQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAi5peg5rOV5L+d5a2Y5b2T5YmN54q25oCBIgorCisjOiBnaXQtc3Rhc2guc2g6MjUzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICLml6Dms5XliKDpmaTlt6XkvZzljLrlj5jmm7QiCisKKyM6IGdpdC1zdGFzaC5zaDozNTIKK21zZ2lkICJObyBzdGFzaCBmb3VuZC4iCittc2dzdHIgIuacquWPkeeOsCBzdGFzaOOAgiIKKworIzogZ2l0LXN0YXNoLnNoOjM1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAi5oyH5a6a5LqG5aSq5aSa55qE54mI5pys77yaJFJFViIKKworIzogZ2l0LXN0YXNoLnNoOjM2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNlIOS4jeaYr+acieaViOeahOW8leeUqCIKKworIzogZ2l0LXN0YXNoLnNoOjM5MworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyDkuI3mmK8gc3Rhc2gg5qC35o+Q5LqkIgorCisjOiBnaXQtc3Rhc2guc2g6NDA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyRhcmdzJyDkuI3mmK/kuIDkuKogc3Rhc2gg5byV55SoIgorCisjOiBnaXQtc3Rhc2guc2g6NDEyCittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIuaXoOazleWIt+aWsOe0ouW8lSIKKworIzogZ2l0LXN0YXNoLnNoOjQxNgorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAi5peg5rOV5Zyo5ZCI5bm26L+H56iL5Lit5oGi5aSN6L+b5bqmIgorCisjOiBnaXQtc3Rhc2guc2g6NDI0Cittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAi57Si5byV5Lit5pyJ5Yay56qB44CC5bCd6K+V5LiN5L2/55SoIC0taW5kZXjjgIIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MjYKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLkuI3og73kv53lrZjntKLlvJXmoJEiCisKKyM6IGdpdC1zdGFzaC5zaDo0NjAKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAi5peg5rOV6L+Y5Y6f5L+u5pS555qE5paH5Lu2IgorCisjOiBnaXQtc3Rhc2guc2g6NDc1Cittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICLntKLlvJXnmoTov5vluqbmsqHmnInooqvmgaLlpI3jgIIiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIuS4ouW8g+S6hiAke1JFVn0gKCRzKSIKKworIzogZ2l0LXN0YXNoLnNoOjQ5MworIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ977ya5LiN6IO95Lii5byD6L+b5bqm5p2h55uuIgorCisjOiBnaXQtc3Rhc2guc2g6NTAwCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICLmnKrmjIflrprliIbmlK/lkI0iCisKKyM6IGdpdC1zdGFzaC5zaDo1NzEKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIu+8iOS4uuaBouWkjeaVsOaNrui+k+WFpSBcImdpdCBzdGFzaCBhcHBseVwi77yJIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICckcmVtb3RldXJsJyIKK21zZ3N0ciAi5peg5rOV5LuOIHVybCAnJHJlbW90ZXVybCcg5Yml56a75LiA5Liq57uE5Lu2IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjE2NworIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi5pyq5ZyoIC5naXRtb2R1bGVzIOS4reWPkeeOsOi3r+W+hCAnJHNtX3BhdGgnIOeahOWtkOaooee7hOaYoOWwhCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNsb25lIG9mICckdXJsJyBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgZmFpbGVkIgorbXNnc3RyICLml6Dms5XlhYvpmoYgJyR1cmwnIOWIsOWtkOaooee7hOi3r+W+hCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIyMworIywgc2gtZm9ybWF0Cittc2dpZCAiR2l0ZGlyICckYScgaXMgcGFydCBvZiB0aGUgc3VibW9kdWxlIHBhdGggJyRiJyBvciB2aWNlIHZlcnNhIgorbXNnc3RyICJHaXRkaXIgJyRhJyDlnKjlrZDmqKHnu4Tot6/lvoQgJyRiJyDkuYvkuIvmiJbogIXnm7jlj40iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICLniYjmnKzlupNVUkzvvJonJHJlcG8nIOW/hemhu+aYr+e7neWvuei3r+W+hOaIluS7pSAuL3wuLi8g6LW35aeLIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMyOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcg5bey57uP5a2Y5Zyo5LqO57Si5byV5LitIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMzMworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyLku6XkuIvot6/lvoTooqvmgqjnmoTkuIDkuKogLmdpdGlnbm9yZSDmlofku7bmiYDlv73nlaXvvJpcbiIKKyIkc21fcGF0aFxuIgorIuWmguaenOaCqOehruWunuaDs+a3u+WKoOWug++8jOS9v+eUqCAtZiDlj4LmlbDjgIIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi5re75Yqg5L2N5LqOICckc21fcGF0aCcg55qE546w5a2Y54mI5pys5bqT5Yiw57Si5byVIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM0NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCcg5bey5a2Y5Zyo5LiU5LiN5piv5LiA5Liq5pyJ5pWI55qEIGdpdCDniYjmnKzlupMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzYwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIuS4jeiDveajgOWHuuWtkOaooee7hCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAi5peg5rOV5re75Yqg5a2Q5qih57uEICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIuaXoOazleazqOWGjOWtkOaooee7hCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQxMworIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRwcmVmaXgkc21fcGF0aCciCittc2dzdHIgIuato+WcqOi/m+WFpSAnJHByZWZpeCRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckc21fcGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorbXNnc3RyICLlgZzmraLkuo4gJyRzbV9wYXRoJ++8jOiEmuacrOi/lOWbnumdnumbtuWAvOOAgiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAi5ZyoIC5naXRtb2R1bGVzIOS4reacquaJvuWIsOWtkOaooee7hOi3r+W+hCAnJHNtX3BhdGgnIOeahCB1cmwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICLml6Dms5XkuLrlrZDmqKHnu4Tot6/lvoQgJyRzbV9wYXRoJyDms6jlhowgdXJsIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi5a2Q5qih57uEICckbmFtZScgKCR1cmwpIOW3suS4uui3r+W+hCAnJHNtX3BhdGgnIOazqOWGjCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi5peg5rOV5Li65a2Q5qih57uE6Lev5b6EICckc21fcGF0aCcg5rOo5YaM5pu05paw5qih5byPIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKyLlrZDmqKHnu4Tot6/lvoQgJyRzbV9wYXRoJyDmsqHmnInliJ3lp4vljJZcbiIKKyLkuZ/orrjmgqjmg7PnlKggJ3VwZGF0ZSAtLWluaXQn77yfIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwMworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICLml6Dms5XlnKjlrZDmqKHnu4Tot6/lvoQgJyRzbV9wYXRoJyDkuK3mib7liLDlvZPliY3niYjmnKwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi5peg5rOV5Zyo5a2Q5qih57uE6Lev5b6EICckc21fcGF0aCcg5Lit6I635Y+WIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIuaXoOazleWcqOWtkOaooee7hOi3r+W+hCAnJHNtX3BhdGgnIOS4reWPmOWfuiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIuWtkOaooee7hOi3r+W+hCAnJHNtX3BhdGgn77ya5Y+Y5Z+66IezICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICLml6Dms5XlkIjlubYgJyRzaGExJyDliLDlrZDmqKHnu4Tot6/lvoQgJyRzbV9wYXRoJyDkuK0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAi5a2Q5qih57uE6Lev5b6EICckc21fcGF0aCfvvJrlt7LlkIjlubblhaUgJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIuaXoOazleWcqOWtkOaooee7hOi3r+W+hCAnJHNtX3BhdGgnIOS4reajgOWHuiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAi5a2Q5qih57uE6Lev5b6EICckc21fcGF0aCfvvJrmo4Dlh7ogJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzEgZ2l0LXN1Ym1vZHVsZS5zaDo5OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi5peg5rOV6YCS5b2S6L+b5a2Q5qih57uE6Lev5b6EICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Nzc5Cittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAi6YCJ6aG5IC0tY2FjaGVkIOS4jeiDveWSjOmAiemhuSAtLWZpbGVzIOWQjOaXtuS9v+eUqCIKKworIy4gdW5leHBlY3RlZCB0eXBlCisjOiBnaXQtc3VibW9kdWxlLnNoOjgxOQorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICLmhI/lpJbnmoTmqKHlvI8gJG1vZF9kc3QiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAg6K2m5ZGK77yaJG5hbWUg5pyq5YyF5ZCr5o+Q5LqkICRzaGExX3NyYyIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBnaXQtc3VibW9kdWxlLnNoOjg0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICDorablkYrvvJokbmFtZSDmnKrljIXlkKvmj5DkuqQgJHNoYTFfZHN0IgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIgIOitpuWRiu+8miRuYW1lIOacquWMheWQq+aPkOS6pCAkc2hhMV9zcmMg5ZKMICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NjgKK21zZ2lkICJibG9iIgorbXNnc3RyICLkuozov5vliLblr7nosaEiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTA2Cittc2dpZCAiIyBTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiIyDlrZDmqKHnu4Tlt7Lkv67mlLnkvYblsJrmnKrmm7TmlrDvvJoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTA4Cittc2dpZCAiIyBTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICLopoHmj5DkuqTnmoTlrZDmqKHnu4Tlj5jmm7TvvJoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJG5hbWUnIgorbXNnc3RyICLkuLogJyRuYW1lJyDlkIzmraXlrZDmqKHnu4QgdXJsIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyN+IG1zZ2lkICIgKHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiCisjfiBtc2dzdHIgIu+8iOS9v+eUqCBcImdpdCBhZGRcIiDlu7rnq4vot5/ouKrvvIkiCisKKyN+IG1zZ2lkICItQiBjYW5ub3QgYmUgdXNlZCB3aXRoIC1iIgorI34gbXNnc3RyICItQiDkuI3og73lkowgLWIg5ZCM5pe25L2/55SoIgorCisjfiBtc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgb3B0aW9ucyIKKyN+IG1zZ3N0ciAiLS1wYXRjaCDpgInpobnlkozlhbbku5bpgInpobnkuI3lhbzlrrkiCisKKyN+IG1zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC1iLy1CLy0tb3JwaGFuIgorI34gbXNnc3RyICItLWRldGFjaCDkuI3og73lkowgLWIvLUIvLS1vcnBoYW4g5ZCM5pe25L2/55SoIgorCisjfiBtc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKKyN+IG1zZ3N0ciAiLS1kZXRhY2gg5LiN6IO95ZKMIC10IOWQjOaXtuS9v+eUqCIKKworI34gbXNnaWQgIi0tb3JwaGFuIGFuZCAtYnwtQiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorI34gbXNnc3RyICItLW9ycGhhbiDlkowgLWJ8LUIg5LqS5palIgorCisjfiBtc2dpZCAiLS1vcnBoYW4gY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKKyN+IG1zZ3N0ciAiLS1vcnBoYW4g5LiN6IO95ZKMIC10IOWQjOaXtuS9v+eUqCIKKworI34gbXNnaWQgImdpdCBjaGVja291dDogLWYgYW5kIC1tIGFyZSBpbmNvbXBhdGlibGUiCisjfiBtc2dzdHIgImdpdCBjaGVja291dO+8mi1mIOWSjCAtbSDkuI3lhbzlrrkiCisKKyN+IG1zZ2lkICIiCisjfiAiZ2l0IGNoZWNrb3V0OiB1cGRhdGluZyBwYXRocyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgorI34gbXNnc3RyICJnaXQgY2hlY2tvdXTvvJrmm7TmlrDot6/lvoTlkozliIfmjaLliIbmlK/kuI3lhbzlrrnjgIIiCisKKyN+IG1zZ2lkICJkaWZmIHNldHVwIGZhaWxlZCIKKyN+IG1zZ3N0ciAiZGlmZiDorr7nva7lpLHotKUiCisKKyN+IG1zZ2lkICJtZXJnZS1yZWN1cnNpdmU6IGRpc2sgZnVsbD8iCisjfiBtc2dzdHIgIm1lcmdlLXJlY3Vyc2l2Ze+8muejgeebmOW3sua7oe+8nyIKKworI34gbXNnaWQgImRpZmZfc2V0dXBfZG9uZSBmYWlsZWQiCisjfiBtc2dzdHIgImRpZmZfc2V0dXBfZG9uZSDlpLHotKUiCmRpZmYgLS1naXQgYS9wcGMvc2hhMS5jIGIvcHBjL3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzZhMTkyCi0tLSAvZGV2L251bGwKKysrIGIvcHBjL3NoYTEuYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogU0hBLTEgaW1wbGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgorICoKKyAqIFRoaXMgdmVyc2lvbiBhc3N1bWVzIHdlIGFyZSBydW5uaW5nIG9uIGEgYmlnLWVuZGlhbiBtYWNoaW5lLgorICogSXQgY2FsbHMgYW4gZXh0ZXJuYWwgc2hhMV9jb3JlKCkgdG8gcHJvY2VzcyBibG9ja3Mgb2YgNjQgYnl0ZXMuCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInNoYTEuaCIKKworZXh0ZXJuIHZvaWQgcHBjX3NoYTFfY29yZSh1aW50MzJfdCAqaGFzaCwgY29uc3QgdW5zaWduZWQgY2hhciAqcCwKKwkJCSAgdW5zaWduZWQgaW50IG5ibG9ja3MpOworCitpbnQgcHBjX1NIQTFfSW5pdChwcGNfU0hBX0NUWCAqYykKK3sKKwljLT5oYXNoWzBdID0gMHg2NzQ1MjMwMTsKKwljLT5oYXNoWzFdID0gMHhFRkNEQUI4OTsKKwljLT5oYXNoWzJdID0gMHg5OEJBRENGRTsKKwljLT5oYXNoWzNdID0gMHgxMDMyNTQ3NjsKKwljLT5oYXNoWzRdID0gMHhDM0QyRTFGMDsKKwljLT5sZW4gPSAwOworCWMtPmNudCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwcGNfU0hBMV9VcGRhdGUocHBjX1NIQV9DVFggKmMsIGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBuKQoreworCXVuc2lnbmVkIGxvbmcgbmI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHB0cjsKKworCWMtPmxlbiArPSAodWludDY0X3QpIG4gPDwgMzsKKwl3aGlsZSAobiAhPSAwKSB7CisJCWlmIChjLT5jbnQgfHwgbiA8IDY0KSB7CisJCQluYiA9IDY0IC0gYy0+Y250OworCQkJaWYgKG5iID4gbikKKwkJCQluYiA9IG47CisJCQltZW1jcHkoJmMtPmJ1Zi5iW2MtPmNudF0sIHAsIG5iKTsKKwkJCWlmICgoYy0+Y250ICs9IG5iKSA9PSA2NCkgeworCQkJCXBwY19zaGExX2NvcmUoYy0+aGFzaCwgYy0+YnVmLmIsIDEpOworCQkJCWMtPmNudCA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQluYiA9IG4gPj4gNjsKKwkJCXBwY19zaGExX2NvcmUoYy0+aGFzaCwgcCwgbmIpOworCQkJbmIgPDw9IDY7CisJCX0KKwkJbiAtPSBuYjsKKwkJcCArPSBuYjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBwcGNfU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyICpoYXNoLCBwcGNfU0hBX0NUWCAqYykKK3sKKwl1bnNpZ25lZCBpbnQgY250ID0gYy0+Y250OworCisJYy0+YnVmLmJbY250KytdID0gMHg4MDsKKwlpZiAoY250ID4gNTYpIHsKKwkJaWYgKGNudCA8IDY0KQorCQkJbWVtc2V0KCZjLT5idWYuYltjbnRdLCAwLCA2NCAtIGNudCk7CisJCXBwY19zaGExX2NvcmUoYy0+aGFzaCwgYy0+YnVmLmIsIDEpOworCQljbnQgPSAwOworCX0KKwlpZiAoY250IDwgNTYpCisJCW1lbXNldCgmYy0+YnVmLmJbY250XSwgMCwgNTYgLSBjbnQpOworCWMtPmJ1Zi5sWzddID0gYy0+bGVuOworCXBwY19zaGExX2NvcmUoYy0+aGFzaCwgYy0+YnVmLmIsIDEpOworCW1lbWNweShoYXNoLCBjLT5oYXNoLCAyMCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9wcGMvc2hhMS5oIGIvcHBjL3NoYTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDA1ZjczCi0tLSAvZGV2L251bGwKKysrIGIvcHBjL3NoYTEuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogU0hBLTEgaW1wbGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgorICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50MzJfdCBoYXNoWzVdOworCXVpbnQzMl90IGNudDsKKwl1aW50NjRfdCBsZW47CisJdW5pb24geworCQl1bnNpZ25lZCBjaGFyIGJbNjRdOworCQl1aW50NjRfdCBsWzhdOworCX0gYnVmOworfSBwcGNfU0hBX0NUWDsKKworaW50IHBwY19TSEExX0luaXQocHBjX1NIQV9DVFggKmMpOworaW50IHBwY19TSEExX1VwZGF0ZShwcGNfU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqcCwgdW5zaWduZWQgbG9uZyBuKTsKK2ludCBwcGNfU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyICpoYXNoLCBwcGNfU0hBX0NUWCAqYyk7CisKKyNkZWZpbmUgZ2l0X1NIQV9DVFgJcHBjX1NIQV9DVFgKKyNkZWZpbmUgZ2l0X1NIQTFfSW5pdAlwcGNfU0hBMV9Jbml0CisjZGVmaW5lIGdpdF9TSEExX1VwZGF0ZQlwcGNfU0hBMV9VcGRhdGUKKyNkZWZpbmUgZ2l0X1NIQTFfRmluYWwJcHBjX1NIQTFfRmluYWwKZGlmZiAtLWdpdCBhL3BwYy9zaGExcHBjLlMgYi9wcGMvc2hhMXBwYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTFlZWYKLS0tIC9kZXYvbnVsbAorKysgYi9wcGMvc2hhMXBwYy5TCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogU0hBLTEgaW1wbGVtZW50YXRpb24gZm9yIFBvd2VyUEMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgorICovCisKKy8qCisgKiBQb3dlclBDIGNhbGxpbmcgY29udmVudGlvbjoKKyAqICVyMCAtIHZvbGF0aWxlIHRlbXAKKyAqICVyMSAtIHN0YWNrIHBvaW50ZXIuCisgKiAlcjIgLSByZXNlcnZlZAorICogJXIzLSVyMTIgLSBJbmNvbWluZyBhcmd1bWVudHMgJiByZXR1cm4gdmFsdWVzOyB2b2xhdGlsZS4KKyAqICVyMTMtJXIzMSAtIENhbGxlZS1zYXZlIHJlZ2lzdGVycworICogJWxyIC0gUmV0dXJuIGFkZHJlc3MsIHZvbGF0aWxlCisgKiAlY3RyIC0gdm9sYXRpbGUKKyAqCisgKiBSZWdpc3RlciB1c2FnZSBpbiB0aGlzIHJvdXRpbmU6CisgKiAlcjAgLSB0ZW1wCisgKiAlcjMgLSBhcmd1bWVudCAocG9pbnRlciB0byA1IHdvcmRzIG9mIFNIQSBzdGF0ZSkKKyAqICVyNCAtIGFyZ3VtZW50IChwb2ludGVyIHRvIGRhdGEgdG8gaGFzaCkKKyAqICVyNSAtIENvbnN0YW50IEsgaW4gU0hBIHJvdW5kIChpbml0aWFsbHkgbnVtYmVyIG9mIGJsb2NrcyB0byBoYXNoKQorICogJXI2LSVyMTAgLSBXb3JraW5nIGNvcGllcyBvZiBTSEEgdmFyaWFibGVzIEEuLkUgKGFjdHVhbGx5IEUuLkEgb3JkZXIpCisgKiAlcjExLSVyMjYgLSBEYXRhIGJlaW5nIGhhc2hlZCBXW10uCisgKiAlcjI3LSVyMzEgLSBQcmV2aW91cyBjb3BpZXMgb2YgQS4uRSwgZm9yIGZpbmFsIGFkZCBiYWNrLgorICogJWN0ciAtIGxvb3AgY291bnQKKyAqLworCisKKy8qCisgKiBXZSByb2xsIHRoZSByZWdpc3RlcnMgZm9yIEEsIEIsIEMsIEQsIEUgYXJvdW5kIG9uIGVhY2gKKyAqIGl0ZXJhdGlvbjsgRSBvbiBpdGVyYXRpb24gdCBpcyBEIG9uIGl0ZXJhdGlvbiB0KzEsIGFuZCBzbyBvbi4KKyAqIFdlIHVzZSByZWdpc3RlcnMgNiAtIDEwIGZvciB0aGlzLiAgKFJlZ2lzdGVycyAyNyAtIDMxIGhvbGQKKyAqIHRoZSBwcmV2aW91cyB2YWx1ZXMuKQorICovCisjZGVmaW5lIFJBKHQpCSgoKHQpKzQpJTUrNikKKyNkZWZpbmUgUkIodCkJKCgodCkrMyklNSs2KQorI2RlZmluZSBSQyh0KQkoKCh0KSsyKSU1KzYpCisjZGVmaW5lIFJEKHQpCSgoKHQpKzEpJTUrNikKKyNkZWZpbmUgUkUodCkJKCgodCkrMCklNSs2KQorCisvKiBXZSB1c2UgcmVnaXN0ZXJzIDExIC0gMjYgZm9yIHRoZSBXIHZhbHVlcyAqLworI2RlZmluZSBXKHQpCSgodCklMTYrMTEpCisKKy8qIFJlZ2lzdGVyIDUgaXMgdXNlZCBmb3IgdGhlIGNvbnN0YW50IGsgKi8KKworLyoKKyAqIFRoZSBiYXNpYyBTSEEtMSByb3VuZCBmdW5jdGlvbiBpczoKKyAqIEUgKz0gUk9UTChBLDUpICsgRihCLEMsRCkgKyBXW2ldICsgSzsgIEIgPSBST1RMKEIsMzApCisgKiBUaGVuIHRoZSB2YXJpYWJsZXMgYXJlIHJlbmFtZWQ6IChBLEIsQyxELEUpID0gKEUsQSxCLEMsRCkuCisgKgorICogRXZlcnkgMjAgcm91bmRzLCB0aGUgZnVuY3Rpb24gRigpIGFuZCB0aGUgY29uc3RhbnQgSyBjaGFuZ2VzOgorICogLSAyMCByb3VuZHMgb2YgZjAoYixjLGQpID0gImJpdCB3aXNlIGIgPyBjIDogZCIgPSAgKF5iICYgZCkgKyAoYiAmIGMpCisgKiAtIDIwIHJvdW5kcyBvZiBmMShiLGMsZCkgPSBiXmNeZCA9IChiXmQpXmMKKyAqIC0gMjAgcm91bmRzIG9mIGYyKGIsYyxkKSA9IG1ham9yaXR5KGIsYyxkKSA9IChiJmQpICsgKChiXmQpJmMpCisgKiAtIDIwIG1vcmUgcm91bmRzIG9mIGYxKGIsYyxkKQorICoKKyAqIFRoZXNlIGFyZSBhbGwgc2NoZWR1bGVkIGZvciBuZWFyLW9wdGltYWwgcGVyZm9ybWFuY2Ugb24gYSBHNC4KKyAqIFRoZSBHNCBpcyBhIDMtaXNzdWUgb3V0LW9mLW9yZGVyIG1hY2hpbmUgd2l0aCAzIEFMVXMsIGJ1dCBpdCBjYW4gb25seQorICogKmNvbnNpZGVyKiBzdGFydGluZyB0aGUgb2xkZXN0IDMgaW5zdHJ1Y3Rpb25zIHBlciBjeWNsZS4gIFNvIHRvIGdldAorICogbWF4aW11bSBwZXJmb3JtYW5jZSBvdXQgb2YgaXQsIHlvdSBoYXZlIHRvIHRyZWF0IGl0IGFzIGFuIGluLW9yZGVyCisgKiBtYWNoaW5lLiAgV2hpY2ggbWVhbnMgaW50ZXJsZWF2aW5nIHRoZSBjb21wdXRhdGlvbiByb3VuZCB0IHdpdGggdGhlCisgKiBjb21wdXRhdGlvbiBvZiBXW3QrNF0uCisgKgorICogVGhlIGZpcnN0IDE2IHJvdW5kcyB1c2UgVyB2YWx1ZXMgbG9hZGVkIGRpcmVjdGx5IGZyb20gbWVtb3J5LCB3aGlsZSB0aGUKKyAqIHJlbWFpbmluZyA2NCB1c2UgdmFsdWVzIGNvbXB1dGVkIGZyb20gdGhvc2UgZmlyc3QgMTYuICBXZSBwcmVsb2FkCisgKiA0IHZhbHVlcyBiZWZvcmUgc3RhcnRpbmcsIHNvIHRoZXJlIGFyZSB0aHJlZSBraW5kcyBvZiByb3VuZHM6CisgKiAtIFRoZSBmaXJzdCAxMiAoYWxsIGYwKSBhbHNvIGxvYWQgdGhlIFcgdmFsdWVzIGZyb20gbWVtb3J5LgorICogLSBUaGUgbmV4dCA2NCBjb21wdXRlIFcoaSs0KSBpbiBwYXJhbGxlbC4gOCpmMCwgMjAqZjEsIDIwKmYyLCAxNipmMS4KKyAqIC0gVGhlIGxhc3QgNCAoYWxsIGYxKSBkbyBub3QgZG8gYW55dGhpbmcgd2l0aCBXLgorICoKKyAqIFRoZXJlZm9yZSwgd2UgaGF2ZSA2IGRpZmZlcmVudCByb3VuZCBmdW5jdGlvbnM6CisgKiBTVEVQRDBfTE9BRCh0LHMpIC0gUGVyZm9ybSByb3VuZCB0IGFuZCBsb2FkIFcocykuICBzIDwgMTYKKyAqIFNURVBEMF9VUERBVEUodCxzKSAtIFBlcmZvcm0gcm91bmQgdCBhbmQgY29tcHV0ZSBXKHMpLiAgcyA+PSAxNi4KKyAqIFNURVBEMV9VUERBVEUodCxzKQorICogU1RFUEQyX1VQREFURSh0LHMpCisgKiBTVEVQRDEodCkgLSBQZXJmb3JtIHJvdW5kIHQgd2l0aCBubyBsb2FkIG9yIHVwZGF0ZS4KKyAqCisgKiBUaGUgRzUgaXMgbW9yZSBmdWxseSBvdXQtb2Ytb3JkZXIsIGFuZCBjYW4gZmluZCB0aGUgcGFyYWxsZWxpc20KKyAqIGJ5IGl0c2VsZi4gIFRoZSBiaWcgbGltaXQgaXMgdGhhdCBpdCBoYXMgYSAyLWN5Y2xlIEFMVSBsYXRlbmN5LCBzbworICogZXZlbiB0aG91Z2ggaXQncyAyLXdheSwgdGhlIGNvZGUgaGFzIHRvIGJlIHNjaGVkdWxlZCBhcyBpZiBpdCdzCisgKiA0LXdheSwgd2hpY2ggY2FuIGJlIGEgbGltaXQuICBUbyBoZWxwIGl0LCB3ZSB0cnkgdG8gc2NoZWR1bGUgdGhlCisgKiByZWFkIG9mIFJBKHQpIGFzIGxhdGUgYXMgcG9zc2libGUgc28gaXQgZG9lc24ndCBzdGFsbCB3YWl0aW5nIGZvcgorICogdGhlIHByZXZpb3VzIHJvdW5kJ3MgUkUodC0xKSwgYW5kIHdlIHRyeSB0byByb3RhdGUgUkIodCkgYXMgZWFybHkKKyAqIGFzIHBvc3NpYmxlIHdoaWxlIHJlYWRpbmcgUkModCkgKD0gUkIodC0xKSkgYXMgbGF0ZSBhcyBwb3NzaWJsZS4KKyAqLworCisvKiB0aGUgaW5pdGlhbCBsb2Fkcy4gKi8KKyNkZWZpbmUgTE9BRFcocykgXAorCWx3eglXKHMpLChzKSo0KCVyNCkKKworLyoKKyAqIFBlcmZvcm0gYSBzdGVwIHdpdGggRjAsIGFuZCBsb2FkIFcocykuICBVc2VzIFcocykgYXMgYSB0ZW1wb3JhcnkKKyAqIGJlZm9yZSBsb2FkaW5nIGl0LgorICogVGhpcyBpcyBhY3R1YWxseSAxMCBpbnN0cnVjdGlvbnMsIHdoaWNoIGlzIGFuIGF3a3dhcmQgZml0LgorICogSXQgY2FuIGV4ZWN1dGUgZ3JvdXBlZCBhcyBsaXN0ZWQsIG9yIGRlbGF5ZWQgb25lIGluc3RydWN0aW9uLgorICogKElmIGRlbGF5ZWQgdHdvIGluc3RydWN0aW9ucywgdGhlcmUgaXMgYSBzdGFsbCBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZQorICogc2Vjb25kIGxpbmUuKSAgVGh1cywgdHdvIGl0ZXJhdGlvbnMgdGFrZSA3IGN5Y2xlcywgMy41IGN5Y2xlcyBwZXIgcm91bmQuCisgKi8KKyNkZWZpbmUgU1RFUEQwX0xPQUQodCxzKSBcCithZGQgUkUodCksUkUodCksVyh0KTsgYW5kYyAgICVyMCxSRCh0KSxSQih0KTsgIGFuZCAgICBXKHMpLFJDKHQpLFJCKHQpOyBcCithZGQgUkUodCksUkUodCksJXIwOyAgcm90bHdpICVyMCxSQSh0KSw1OyAgICAgIHJvdGx3aSBSQih0KSxSQih0KSwzMDsgICBcCithZGQgUkUodCksUkUodCksVyhzKTsgYWRkICAgICVyMCwlcjAsJXI1OyAgICAgIGx3eiAgICBXKHMpLChzKSo0KCVyNCk7ICBcCithZGQgUkUodCksUkUodCksJXIwCisKKy8qCisgKiBUaGlzIGlzIGxpa2V3aXNlIGF3a3dhcmQsIDEzIGluc3RydWN0aW9ucy4gIEhvd2V2ZXIsIGl0IGNhbiBhbHNvCisgKiBleGVjdXRlIHN0YXJ0aW5nIHdpdGggMiBvdXQgb2YgMyBwb3NzaWJsZSBtb2R1bGksIHNvIGl0IGRvZXMgMiByb3VuZHMKKyAqIGluIDkgY3ljbGVzLCA0LjUgY3ljbGVzL3JvdW5kLgorICovCisjZGVmaW5lIFNURVBEMF9VUERBVEUodCxzLGxvYWRrLi4uKSBcCithZGQgUkUodCksUkUodCksVyh0KTsgYW5kYyAgICVyMCxSRCh0KSxSQih0KTsgeG9yICAgIFcocyksVygocyktMTYpLFcoKHMpLTMpOyBcCithZGQgUkUodCksUkUodCksJXIwOyAgYW5kICAgICVyMCxSQyh0KSxSQih0KTsgeG9yICAgIFcocyksVyhzKSxXKChzKS04KTsgICAgICBcCithZGQgUkUodCksUkUodCksJXIwOyAgcm90bHdpICVyMCxSQSh0KSw1OyAgICAgeG9yICAgIFcocyksVyhzKSxXKChzKS0xNCk7ICAgICBcCithZGQgUkUodCksUkUodCksJXI1OyAgbG9hZGs7IHJvdGx3aSBSQih0KSxSQih0KSwzMDsgIHJvdGx3aSBXKHMpLFcocyksMTsgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjAKKworLyogTmljZWx5IG9wdGltYWwuICBDb252ZW5pZW50bHksIGFsc28gdGhlIG1vc3QgY29tbW9uLiAqLworI2RlZmluZSBTVEVQRDFfVVBEQVRFKHQscyxsb2Fkay4uLikgXAorYWRkIFJFKHQpLFJFKHQpLFcodCk7IHhvciAgICAlcjAsUkQodCksUkIodCk7IHhvciAgICBXKHMpLFcoKHMpLTE2KSxXKChzKS0zKTsgXAorYWRkIFJFKHQpLFJFKHQpLCVyNTsgIGxvYWRrOyB4b3IgJXIwLCVyMCxSQyh0KTsgIHhvciBXKHMpLFcocyksVygocyktOCk7ICAgICAgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIHJvdGx3aSAlcjAsUkEodCksNTsgICAgIHhvciAgICBXKHMpLFcocyksVygocyktMTQpOyAgICAgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIHJvdGx3aSBSQih0KSxSQih0KSwzMDsgIHJvdGx3aSBXKHMpLFcocyksMQorCisvKgorICogVGhlIG5ha2VkIHZlcnNpb24sIG5vIFVQREFURSwgZm9yIHRoZSBsYXN0IDQgcm91bmRzLiAgMyBjeWNsZXMgcGVyLgorICogV2UgY291bGQgdXNlIFcocykgYXMgYSB0ZW1wIHJlZ2lzdGVyLCBidXQgd2UgZG9uJ3QgbmVlZCBpdC4KKyAqLworI2RlZmluZSBTVEVQRDEodCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkICAgUkUodCksUkUodCksVyh0KTsgeG9yICAgICVyMCxSRCh0KSxSQih0KTsgXAorcm90bHdpIFJCKHQpLFJCKHQpLDMwOyAgYWRkICAgUkUodCksUkUodCksJXI1OyAgeG9yICAgICVyMCwlcjAsUkModCk7ICAgXAorYWRkICAgIFJFKHQpLFJFKHQpLCVyMDsgcm90bHdpICVyMCxSQSh0KSw1OyAgICAgLyogc3BhcmUgc2xvdCAqLyAgICAgICAgXAorYWRkICAgIFJFKHQpLFJFKHQpLCVyMAorCisvKgorICogMTQgaW5zdHJ1Y3Rpb25zLCA1IGN5Y2xlcyBwZXIuICBUaGUgbWFqb3JpdHkgZnVuY3Rpb24gaXMgYSBiaXQKKyAqIGF3a3dhcmQgdG8gY29tcHV0ZS4gIFRoaXMgY2FuIGV4ZWN1dGUgd2l0aCBhIDEtaW5zdHJ1Y3Rpb24gZGVsYXksCisgKiBidXQgaXQgY2F1c2VzIGEgMi1pbnN0cnVjdGlvbiBkZWxheSwgd2hpY2ggdHJpZ2dlcnMgYSBzdGFsbC4KKyAqLworI2RlZmluZSBTVEVQRDJfVVBEQVRFKHQscyxsb2Fkay4uLikgXAorYWRkIFJFKHQpLFJFKHQpLFcodCk7IGFuZCAgICAlcjAsUkQodCksUkIodCk7IHhvciAgICBXKHMpLFcoKHMpLTE2KSxXKChzKS0zKTsgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIHhvciAgICAlcjAsUkQodCksUkIodCk7IHhvciAgICBXKHMpLFcocyksVygocyktOCk7ICAgICAgXAorYWRkIFJFKHQpLFJFKHQpLCVyNTsgIGxvYWRrOyBhbmQgJXIwLCVyMCxSQyh0KTsgIHhvciBXKHMpLFcocyksVygocyktMTQpOyAgICAgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIHJvdGx3aSAlcjAsUkEodCksNTsgICAgIHJvdGx3aSBXKHMpLFcocyksMTsgICAgICAgICAgICAgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIHJvdGx3aSBSQih0KSxSQih0KSwzMAorCisjZGVmaW5lIFNURVAwX0xPQUQ0KHQscykJCVwKKwlTVEVQRDBfTE9BRCh0LHMpOwkJXAorCVNURVBEMF9MT0FEKCh0KzEpLChzKSsxKTsJXAorCVNURVBEMF9MT0FEKCh0KSsyLChzKSsyKTsJXAorCVNURVBEMF9MT0FEKCh0KSszLChzKSszKQorCisjZGVmaW5lIFNURVBVUDQoZm4sIHQsIHMsIGxvYWRrLi4uKQkJXAorCVNURVAjI2ZuIyNfVVBEQVRFKHQscywpOwkJXAorCVNURVAjI2ZuIyNfVVBEQVRFKCh0KSsxLChzKSsxLCk7CVwKKwlTVEVQIyNmbiMjX1VQREFURSgodCkrMiwocykrMiwpOwlcCisJU1RFUCMjZm4jI19VUERBVEUoKHQpKzMsKHMpKzMsbG9hZGspCisKKyNkZWZpbmUgU1RFUFVQMjAoZm4sIHQsIHMsIGxvYWRrLi4uKQlcCisJU1RFUFVQNChmbiwgdCwgcywpOwkJXAorCVNURVBVUDQoZm4sICh0KSs0LCAocykrNCwpOwlcCisJU1RFUFVQNChmbiwgKHQpKzgsIChzKSs4LCk7CVwKKwlTVEVQVVA0KGZuLCAodCkrMTIsIChzKSsxMiwpOwlcCisJU1RFUFVQNChmbiwgKHQpKzE2LCAocykrMTYsIGxvYWRrKQorCisJLmdsb2JsCXBwY19zaGExX2NvcmUKK3BwY19zaGExX2NvcmU6CisJc3R3dQklcjEsLTgwKCVyMSkKKwlzdG13CSVyMTMsNCglcjEpCisKKwkvKiBMb2FkIHVwIEEgLSBFICovCisJbG13CSVyMjcsMCglcjMpCisKKwltdGN0cgklcjUKKworMToKKwlMT0FEVygwKQorCWxpcwklcjUsMHg1YTgyCisJbXIJUkUoMCksJXIzMQorCUxPQURXKDEpCisJbXIJUkQoMCksJXIzMAorCW1yCVJDKDApLCVyMjkKKwlMT0FEVygyKQorCW9yaQklcjUsJXI1LDB4Nzk5OQkvKiBLMC0xOSAqLworCW1yCVJCKDApLCVyMjgKKwlMT0FEVygzKQorCW1yCVJBKDApLCVyMjcKKworCVNURVAwX0xPQUQ0KDAsIDQpCisJU1RFUDBfTE9BRDQoNCwgOCkKKwlTVEVQMF9MT0FENCg4LCAxMikKKwlTVEVQVVA0KEQwLCAxMiwgMTYsKQorCVNURVBVUDQoRDAsIDE2LCAyMCwgbGlzICVyNSwweDZlZDkpCisKKwlvcmkJJXI1LCVyNSwweGViYTEJLyogSzIwLTM5ICovCisJU1RFUFVQMjAoRDEsIDIwLCAyNCwgbGlzICVyNSwweDhmMWIpCisKKwlvcmkJJXI1LCVyNSwweGJjZGMJLyogSzQwLTU5ICovCisJU1RFUFVQMjAoRDIsIDQwLCA0NCwgbGlzICVyNSwweGNhNjIpCisKKwlvcmkJJXI1LCVyNSwweGMxZDYJLyogSzYwLTc5ICovCisJU1RFUFVQNChEMSwgNjAsIDY0LCkKKwlTVEVQVVA0KEQxLCA2NCwgNjgsKQorCVNURVBVUDQoRDEsIDY4LCA3MiwpCisJU1RFUFVQNChEMSwgNzIsIDc2LCkKKwlhZGRpCSVyNCwlcjQsNjQKKwlTVEVQRDEoNzYpCisJU1RFUEQxKDc3KQorCVNURVBEMSg3OCkKKwlTVEVQRDEoNzkpCisKKwkvKiBBZGQgcmVzdWx0cyB0byBvcmlnaW5hbCB2YWx1ZXMgKi8KKwlhZGQJJXIzMSwlcjMxLFJFKDApCisJYWRkCSVyMzAsJXIzMCxSRCgwKQorCWFkZAklcjI5LCVyMjksUkMoMCkKKwlhZGQJJXIyOCwlcjI4LFJCKDApCisJYWRkCSVyMjcsJXIyNyxSQSgwKQorCisJYmRuegkxYgorCisJLyogU2F2ZSBmaW5hbCBoYXNoLCByZXN0b3JlIHJlZ2lzdGVycywgYW5kIHJldHVybiAqLworCXN0bXcJJXIyNywwKCVyMykKKwlsbXcJJXIxMyw0KCVyMSkKKwlhZGRpCSVyMSwlcjEsODAKKwlibHIKZGlmZiAtLWdpdCBhL3ByZWxvYWQtaW5kZXguYyBiL3ByZWxvYWQtaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWNiMDhkCi0tLSAvZGV2L251bGwKKysrIGIvcHJlbG9hZC1pbmRleC5jCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IExpbnVzIFRvcnZhbGRzCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaWZkZWYgTk9fUFRIUkVBRFMKK3N0YXRpYyB2b2lkIHByZWxvYWRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppbmRleCwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQoreworCTsgLyogbm90aGluZyAqLworfQorI2Vsc2UKKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworLyoKKyAqIE1vc3RseSByYW5kb21seSBjaG9zZW4gbWF4aW11bSB0aHJlYWQgY291bnRzOiB3ZQorICogY2FwIHRoZSBwYXJhbGxlbGlzbSB0byAyMCB0aHJlYWRzLCBhbmQgd2Ugd2FudAorICogdG8gaGF2ZSBhdCBsZWFzdCA1MDAgbHN0YXQncyBwZXIgdGhyZWFkIGZvciBpdCB0bworICogYmUgd29ydGggc3RhcnRpbmcgYSB0aHJlYWQuCisgKi8KKyNkZWZpbmUgTUFYX1BBUkFMTEVMICgyMCkKKyNkZWZpbmUgVEhSRUFEX0NPU1QgKDUwMCkKKworc3RydWN0IHRocmVhZF9kYXRhIHsKKwlwdGhyZWFkX3QgcHRocmVhZDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4OworCWNvbnN0IGNoYXIgKipwYXRoc3BlYzsKKwlpbnQgb2Zmc2V0LCBucjsKK307CisKK3N0YXRpYyB2b2lkICpwcmVsb2FkX3RocmVhZCh2b2lkICpfZGF0YSkKK3sKKwlpbnQgbnI7CisJc3RydWN0IHRocmVhZF9kYXRhICpwID0gX2RhdGE7CisJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IHAtPmluZGV4OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNlcCA9IGluZGV4LT5jYWNoZSArIHAtPm9mZnNldDsKKwlzdHJ1Y3QgY2FjaGVfZGVmIGNhY2hlOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKworCWluaXRfcGF0aHNwZWMoJnBhdGhzcGVjLCBwLT5wYXRoc3BlYyk7CisJbWVtc2V0KCZjYWNoZSwgMCwgc2l6ZW9mKGNhY2hlKSk7CisJbnIgPSBwLT5ucjsKKwlpZiAobnIgKyBwLT5vZmZzZXQgPiBpbmRleC0+Y2FjaGVfbnIpCisJCW5yID0gaW5kZXgtPmNhY2hlX25yIC0gcC0+b2Zmc2V0OworCisJZG8geworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gKmNlcCsrOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlpZiAoY2Vfc3RhZ2UoY2UpKQorCQkJY29udGludWU7CisJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsKKwkJaWYgKGNlX3VwdG9kYXRlKGNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNlX3BhdGhfbWF0Y2goY2UsICZwYXRoc3BlYykpCisJCQljb250aW51ZTsKKwkJaWYgKHRocmVhZGVkX2hhc19zeW1saW5rX2xlYWRpbmdfcGF0aCgmY2FjaGUsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSkpCisJCQljb250aW51ZTsKKwkJaWYgKGxzdGF0KGNlLT5uYW1lLCAmc3QpKQorCQkJY29udGludWU7CisJCWlmIChpZV9tYXRjaF9zdGF0KGluZGV4LCBjZSwgJnN0LCBDRV9NQVRDSF9SQUNZX0lTX0RJUlRZKSkKKwkJCWNvbnRpbnVlOworCQljZV9tYXJrX3VwdG9kYXRlKGNlKTsKKwl9IHdoaWxlICgtLW5yID4gMCk7CisJZnJlZV9wYXRoc3BlYygmcGF0aHNwZWMpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwcmVsb2FkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwlpbnQgdGhyZWFkcywgaSwgd29yaywgb2Zmc2V0OworCXN0cnVjdCB0aHJlYWRfZGF0YSBkYXRhW01BWF9QQVJBTExFTF07CisKKwlpZiAoIWNvcmVfcHJlbG9hZF9pbmRleCkKKwkJcmV0dXJuOworCisJdGhyZWFkcyA9IGluZGV4LT5jYWNoZV9uciAvIFRIUkVBRF9DT1NUOworCWlmICh0aHJlYWRzIDwgMikKKwkJcmV0dXJuOworCWlmICh0aHJlYWRzID4gTUFYX1BBUkFMTEVMKQorCQl0aHJlYWRzID0gTUFYX1BBUkFMTEVMOworCW9mZnNldCA9IDA7CisJd29yayA9IERJVl9ST1VORF9VUChpbmRleC0+Y2FjaGVfbnIsIHRocmVhZHMpOworCWZvciAoaSA9IDA7IGkgPCB0aHJlYWRzOyBpKyspIHsKKwkJc3RydWN0IHRocmVhZF9kYXRhICpwID0gZGF0YStpOworCQlwLT5pbmRleCA9IGluZGV4OworCQlwLT5wYXRoc3BlYyA9IHBhdGhzcGVjOworCQlwLT5vZmZzZXQgPSBvZmZzZXQ7CisJCXAtPm5yID0gd29yazsKKwkJb2Zmc2V0ICs9IHdvcms7CisJCWlmIChwdGhyZWFkX2NyZWF0ZSgmcC0+cHRocmVhZCwgTlVMTCwgcHJlbG9hZF90aHJlYWQsIHApKQorCQkJZGllKCJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZGVkIGxzdGF0Iik7CisJfQorCWZvciAoaSA9IDA7IGkgPCB0aHJlYWRzOyBpKyspIHsKKwkJc3RydWN0IHRocmVhZF9kYXRhICpwID0gZGF0YStpOworCQlpZiAocHRocmVhZF9qb2luKHAtPnB0aHJlYWQsIE5VTEwpKQorCQkJZGllKCJ1bmFibGUgdG8gam9pbiB0aHJlYWRlZCBsc3RhdCIpOworCX0KK30KKyNlbmRpZgorCitpbnQgcmVhZF9pbmRleF9wcmVsb2FkKHN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwlpbnQgcmV0dmFsID0gcmVhZF9pbmRleChpbmRleCk7CisKKwlwcmVsb2FkX2luZGV4KGluZGV4LCBwYXRoc3BlYyk7CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3ByZXR0eS5jIGIvcHJldHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxZWE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3ByZXR0eS5jCkBAIC0wLDAgKzEsMTQ0MyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorCitzdGF0aWMgY2hhciAqdXNlcl9mb3JtYXQ7CitzdGF0aWMgc3RydWN0IGNtdF9mbXRfbWFwIHsKKwljb25zdCBjaGFyICpuYW1lOworCWVudW0gY21pdF9mbXQgZm9ybWF0OworCWludCBpc190Zm9ybWF0OworCWludCBpc19hbGlhczsKKwljb25zdCBjaGFyICp1c2VyX2Zvcm1hdDsKK30gKmNvbW1pdF9mb3JtYXRzOworc3RhdGljIHNpemVfdCBidWlsdGluX2Zvcm1hdHNfbGVuOworc3RhdGljIHNpemVfdCBjb21taXRfZm9ybWF0c19sZW47CitzdGF0aWMgc2l6ZV90IGNvbW1pdF9mb3JtYXRzX2FsbG9jOworc3RhdGljIHN0cnVjdCBjbXRfZm10X21hcCAqZmluZF9jb21taXRfZm9ybWF0KGNvbnN0IGNoYXIgKnNvdWdodCk7CisKK3N0YXRpYyB2b2lkIHNhdmVfdXNlcl9mb3JtYXQoc3RydWN0IHJldl9pbmZvICpyZXYsIGNvbnN0IGNoYXIgKmNwLCBpbnQgaXNfdGZvcm1hdCkKK3sKKwlmcmVlKHVzZXJfZm9ybWF0KTsKKwl1c2VyX2Zvcm1hdCA9IHhzdHJkdXAoY3ApOworCWlmIChpc190Zm9ybWF0KQorCQlyZXYtPnVzZV90ZXJtaW5hdG9yID0gMTsKKwlyZXYtPmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9VU0VSRk9STUFUOworfQorCitzdGF0aWMgaW50IGdpdF9wcmV0dHlfZm9ybWF0c19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJc3RydWN0IGNtdF9mbXRfbWFwICpjb21taXRfZm9ybWF0ID0gTlVMTDsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmZtdDsKKwlpbnQgaTsKKworCWlmIChwcmVmaXhjbXAodmFyLCAicHJldHR5LiIpKQorCQlyZXR1cm4gMDsKKworCW5hbWUgPSB2YXIgKyBzdHJsZW4oInByZXR0eS4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVpbHRpbl9mb3JtYXRzX2xlbjsgaSsrKSB7CisJCWlmICghc3RyY21wKGNvbW1pdF9mb3JtYXRzW2ldLm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIDA7CisJfQorCisJZm9yIChpID0gYnVpbHRpbl9mb3JtYXRzX2xlbjsgaSA8IGNvbW1pdF9mb3JtYXRzX2xlbjsgaSsrKSB7CisJCWlmICghc3RyY21wKGNvbW1pdF9mb3JtYXRzW2ldLm5hbWUsIG5hbWUpKSB7CisJCQljb21taXRfZm9ybWF0ID0gJmNvbW1pdF9mb3JtYXRzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWNvbW1pdF9mb3JtYXQpIHsKKwkJQUxMT0NfR1JPVyhjb21taXRfZm9ybWF0cywgY29tbWl0X2Zvcm1hdHNfbGVuKzEsCisJCQkgICBjb21taXRfZm9ybWF0c19hbGxvYyk7CisJCWNvbW1pdF9mb3JtYXQgPSAmY29tbWl0X2Zvcm1hdHNbY29tbWl0X2Zvcm1hdHNfbGVuXTsKKwkJbWVtc2V0KGNvbW1pdF9mb3JtYXQsIDAsIHNpemVvZigqY29tbWl0X2Zvcm1hdCkpOworCQljb21taXRfZm9ybWF0c19sZW4rKzsKKwl9CisKKwljb21taXRfZm9ybWF0LT5uYW1lID0geHN0cmR1cChuYW1lKTsKKwljb21taXRfZm9ybWF0LT5mb3JtYXQgPSBDTUlUX0ZNVF9VU0VSRk9STUFUOworCWdpdF9jb25maWdfc3RyaW5nKCZmbXQsIHZhciwgdmFsdWUpOworCWlmICghcHJlZml4Y21wKGZtdCwgImZvcm1hdDoiKSB8fCAhcHJlZml4Y21wKGZtdCwgInRmb3JtYXQ6IikpIHsKKwkJY29tbWl0X2Zvcm1hdC0+aXNfdGZvcm1hdCA9IGZtdFswXSA9PSAndCc7CisJCWZtdCA9IHN0cmNocihmbXQsICc6JykgKyAxOworCX0gZWxzZSBpZiAoc3RyY2hyKGZtdCwgJyUnKSkKKwkJY29tbWl0X2Zvcm1hdC0+aXNfdGZvcm1hdCA9IDE7CisJZWxzZQorCQljb21taXRfZm9ybWF0LT5pc19hbGlhcyA9IDE7CisJY29tbWl0X2Zvcm1hdC0+dXNlcl9mb3JtYXQgPSBmbXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY29tbWl0X2Zvcm1hdHModm9pZCkKK3sKKwlzdHJ1Y3QgY210X2ZtdF9tYXAgYnVpbHRpbl9mb3JtYXRzW10gPSB7CisJCXsgInJhdyIsCUNNSVRfRk1UX1JBVywJCTAgfSwKKwkJeyAibWVkaXVtIiwJQ01JVF9GTVRfTUVESVVNLAkwIH0sCisJCXsgInNob3J0IiwJQ01JVF9GTVRfU0hPUlQsCQkwIH0sCisJCXsgImVtYWlsIiwJQ01JVF9GTVRfRU1BSUwsCQkwIH0sCisJCXsgImZ1bGxlciIsCUNNSVRfRk1UX0ZVTExFUiwJMCB9LAorCQl7ICJmdWxsIiwJQ01JVF9GTVRfRlVMTCwJCTAgfSwKKwkJeyAib25lbGluZSIsCUNNSVRfRk1UX09ORUxJTkUsCTEgfQorCX07CisJY29tbWl0X2Zvcm1hdHNfbGVuID0gQVJSQVlfU0laRShidWlsdGluX2Zvcm1hdHMpOworCWJ1aWx0aW5fZm9ybWF0c19sZW4gPSBjb21taXRfZm9ybWF0c19sZW47CisJQUxMT0NfR1JPVyhjb21taXRfZm9ybWF0cywgY29tbWl0X2Zvcm1hdHNfbGVuLCBjb21taXRfZm9ybWF0c19hbGxvYyk7CisJbWVtY3B5KGNvbW1pdF9mb3JtYXRzLCBidWlsdGluX2Zvcm1hdHMsCisJICAgICAgIHNpemVvZigqYnVpbHRpbl9mb3JtYXRzKSpBUlJBWV9TSVpFKGJ1aWx0aW5fZm9ybWF0cykpOworCisJZ2l0X2NvbmZpZyhnaXRfcHJldHR5X2Zvcm1hdHNfY29uZmlnLCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBjbXRfZm10X21hcCAqZmluZF9jb21taXRfZm9ybWF0X3JlY3Vyc2l2ZShjb25zdCBjaGFyICpzb3VnaHQsCisJCQkJCQkJY29uc3QgY2hhciAqb3JpZ2luYWwsCisJCQkJCQkJaW50IG51bV9yZWRpcmVjdGlvbnMpCit7CisJc3RydWN0IGNtdF9mbXRfbWFwICpmb3VuZCA9IE5VTEw7CisJc2l6ZV90IGZvdW5kX21hdGNoX2xlbiA9IDA7CisJaW50IGk7CisKKwlpZiAobnVtX3JlZGlyZWN0aW9ucyA+PSBjb21taXRfZm9ybWF0c19sZW4pCisJCWRpZSgiaW52YWxpZCAtLXByZXR0eSBmb3JtYXQ6ICIKKwkJICAgICInJXMnIHJlZmVyZW5jZXMgYW4gYWxpYXMgd2hpY2ggcG9pbnRzIHRvIGl0c2VsZiIsCisJCSAgICBvcmlnaW5hbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29tbWl0X2Zvcm1hdHNfbGVuOyBpKyspIHsKKwkJc2l6ZV90IG1hdGNoX2xlbjsKKworCQlpZiAocHJlZml4Y21wKGNvbW1pdF9mb3JtYXRzW2ldLm5hbWUsIHNvdWdodCkpCisJCQljb250aW51ZTsKKworCQltYXRjaF9sZW4gPSBzdHJsZW4oY29tbWl0X2Zvcm1hdHNbaV0ubmFtZSk7CisJCWlmIChmb3VuZCA9PSBOVUxMIHx8IGZvdW5kX21hdGNoX2xlbiA+IG1hdGNoX2xlbikgeworCQkJZm91bmQgPSAmY29tbWl0X2Zvcm1hdHNbaV07CisJCQlmb3VuZF9tYXRjaF9sZW4gPSBtYXRjaF9sZW47CisJCX0KKwl9CisKKwlpZiAoZm91bmQgJiYgZm91bmQtPmlzX2FsaWFzKSB7CisJCWZvdW5kID0gZmluZF9jb21taXRfZm9ybWF0X3JlY3Vyc2l2ZShmb3VuZC0+dXNlcl9mb3JtYXQsCisJCQkJCQkgICAgIG9yaWdpbmFsLAorCQkJCQkJICAgICBudW1fcmVkaXJlY3Rpb25zKzEpOworCX0KKworCXJldHVybiBmb3VuZDsKK30KKworc3RhdGljIHN0cnVjdCBjbXRfZm10X21hcCAqZmluZF9jb21taXRfZm9ybWF0KGNvbnN0IGNoYXIgKnNvdWdodCkKK3sKKwlpZiAoIWNvbW1pdF9mb3JtYXRzKQorCQlzZXR1cF9jb21taXRfZm9ybWF0cygpOworCisJcmV0dXJuIGZpbmRfY29tbWl0X2Zvcm1hdF9yZWN1cnNpdmUoc291Z2h0LCBzb3VnaHQsIDApOworfQorCit2b2lkIGdldF9jb21taXRfZm9ybWF0KGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGNtdF9mbXRfbWFwICpjb21taXRfZm9ybWF0OworCisJcmV2LT51c2VfdGVybWluYXRvciA9IDA7CisJaWYgKCFhcmcgfHwgISphcmcpIHsKKwkJcmV2LT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfREVGQVVMVDsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXByZWZpeGNtcChhcmcsICJmb3JtYXQ6IikgfHwgIXByZWZpeGNtcChhcmcsICJ0Zm9ybWF0OiIpKSB7CisJCXNhdmVfdXNlcl9mb3JtYXQocmV2LCBzdHJjaHIoYXJnLCAnOicpICsgMSwgYXJnWzBdID09ICd0Jyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc3RyY2hyKGFyZywgJyUnKSkgeworCQlzYXZlX3VzZXJfZm9ybWF0KHJldiwgYXJnLCAxKTsKKwkJcmV0dXJuOworCX0KKworCWNvbW1pdF9mb3JtYXQgPSBmaW5kX2NvbW1pdF9mb3JtYXQoYXJnKTsKKwlpZiAoIWNvbW1pdF9mb3JtYXQpCisJCWRpZSgiaW52YWxpZCAtLXByZXR0eSBmb3JtYXQ6ICVzIiwgYXJnKTsKKworCXJldi0+Y29tbWl0X2Zvcm1hdCA9IGNvbW1pdF9mb3JtYXQtPmZvcm1hdDsKKwlyZXYtPnVzZV90ZXJtaW5hdG9yID0gY29tbWl0X2Zvcm1hdC0+aXNfdGZvcm1hdDsKKwlpZiAoY29tbWl0X2Zvcm1hdC0+Zm9ybWF0ID09IENNSVRfRk1UX1VTRVJGT1JNQVQpIHsKKwkJc2F2ZV91c2VyX2Zvcm1hdChyZXYsIGNvbW1pdF9mb3JtYXQtPnVzZXJfZm9ybWF0LAorCQkJCSBjb21taXRfZm9ybWF0LT5pc190Zm9ybWF0KTsKKwl9Cit9CisKKy8qCisgKiBHZW5lcmljIHN1cHBvcnQgZm9yIHByZXR0eS1wcmludGluZyB0aGUgaGVhZGVyCisgKi8KK3N0YXRpYyBpbnQgZ2V0X29uZV9saW5lKGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoOzspIHsKKwkJY2hhciBjID0gKm1zZysrOworCQlpZiAoIWMpCisJCQlicmVhazsKKwkJcmV0Kys7CisJCWlmIChjID09ICdcbicpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogSGlnaCBiaXQgc2V0LCBvciBJU08tMjAyMi1JTlQgKi8KK3N0YXRpYyBpbnQgbm9uX2FzY2lpKGludCBjaCkKK3sKKwlyZXR1cm4gIWlzYXNjaWkoY2gpIHx8IGNoID09ICdcMDMzJzsKK30KKworaW50IGhhc19ub25fYXNjaWkoY29uc3QgY2hhciAqcykKK3sKKwlpbnQgY2g7CisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoKGNoID0gKnMrKykgIT0gJ1wwJykgeworCQlpZiAobm9uX2FzY2lpKGNoKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19yZmM4MjJfc3BlY2lhbChjaGFyIGNoKQoreworCXN3aXRjaCAoY2gpIHsKKwljYXNlICcoJzoKKwljYXNlICcpJzoKKwljYXNlICc8JzoKKwljYXNlICc+JzoKKwljYXNlICdbJzoKKwljYXNlICddJzoKKwljYXNlICc6JzoKKwljYXNlICc7JzoKKwljYXNlICdAJzoKKwljYXNlICcsJzoKKwljYXNlICcuJzoKKwljYXNlICciJzoKKwljYXNlICdcXCc6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBoYXNfcmZjODIyX3NwZWNpYWxzKGNvbnN0IGNoYXIgKnMsIGludCBsZW4pCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoaXNfcmZjODIyX3NwZWNpYWwoc1tpXSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX3JmYzgyMl9xdW90ZWQoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICpzLCBpbnQgbGVuKQoreworCWludCBpOworCisJLyoganVzdCBhIGd1ZXNzLCB3ZSBtYXkgaGF2ZSB0byBhbHNvIGJhY2tzbGFzaC1xdW90ZSAqLworCXN0cmJ1Zl9ncm93KG91dCwgbGVuICsgMik7CisKKwlzdHJidWZfYWRkY2gob3V0LCAnIicpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlzd2l0Y2ggKHNbaV0pIHsKKwkJY2FzZSAnIic6CisJCWNhc2UgJ1xcJzoKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsICdcXCcpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlzdHJidWZfYWRkY2gob3V0LCBzW2ldKTsKKwkJfQorCX0KKwlzdHJidWZfYWRkY2gob3V0LCAnIicpOworfQorCitzdGF0aWMgaW50IGlzX3JmYzIwNDdfc3BlY2lhbChjaGFyIGNoKQoreworCXJldHVybiAobm9uX2FzY2lpKGNoKSB8fCAoY2ggPT0gJz0nKSB8fCAoY2ggPT0gJz8nKSB8fCAoY2ggPT0gJ18nKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9yZmMyMDQ3KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLAorCQkgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisJc3RhdGljIGNvbnN0IGludCBtYXhfbGVuZ3RoID0gNzg7IC8qIHBlciByZmMyODIyICovCisJaW50IGk7CisJaW50IGxpbmVfbGVuOworCisJLyogSG93IG1hbnkgYnl0ZXMgYXJlIGFscmVhZHkgdXNlZCBvbiB0aGUgY3VycmVudCBsaW5lPyAqLworCWZvciAoaSA9IHNiLT5sZW4gLSAxOyBpID49IDA7IGktLSkKKwkJaWYgKHNiLT5idWZbaV0gPT0gJ1xuJykKKwkJCWJyZWFrOworCWxpbmVfbGVuID0gc2ItPmxlbiAtIChpKzEpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWludCBjaCA9IGxpbmVbaV07CisJCWlmIChub25fYXNjaWkoY2gpIHx8IGNoID09ICdcbicpCisJCQlnb3RvIG5lZWRxdW90ZTsKKwkJaWYgKChpICsgMSA8IGxlbikgJiYgKGNoID09ICc9JyAmJiBsaW5lW2krMV0gPT0gJz8nKSkKKwkJCWdvdG8gbmVlZHF1b3RlOworCX0KKwlzdHJidWZfYWRkX3dyYXBwZWRfYnl0ZXMoc2IsIGxpbmUsIGxlbiwgMCwgMSwgbWF4X2xlbmd0aCAtIGxpbmVfbGVuKTsKKwlyZXR1cm47CisKK25lZWRxdW90ZToKKwlzdHJidWZfZ3JvdyhzYiwgbGVuICogMyArIHN0cmxlbihlbmNvZGluZykgKyAxMDApOworCXN0cmJ1Zl9hZGRmKHNiLCAiPT8lcz9xPyIsIGVuY29kaW5nKTsKKwlsaW5lX2xlbiArPSBzdHJsZW4oZW5jb2RpbmcpICsgNTsgLyogNSBmb3IgPT8/cT8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJdW5zaWduZWQgY2ggPSBsaW5lW2ldICYgMHhGRjsKKworCQlpZiAobGluZV9sZW4gPj0gbWF4X2xlbmd0aCAtIDIpIHsKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiPz1cbiA9PyVzP3E/IiwgZW5jb2RpbmcpOworCQkJbGluZV9sZW4gPSBzdHJsZW4oZW5jb2RpbmcpICsgNSArIDE7IC8qID0/P3E/IHBsdXMgU1AgKi8KKwkJfQorCisJCS8qCisJCSAqIFdlIGVuY29kZSAnICcgdXNpbmcgJz0yMCcgZXZlbiB0aG91Z2ggcmZjMjA0NworCQkgKiBhbGxvd3MgdXNpbmcgJ18nIGZvciByZWFkYWJpbGl0eS4gIFVuZm9ydHVuYXRlbHksCisJCSAqIG1hbnkgcHJvZ3JhbXMgZG8gbm90IHVuZGVyc3RhbmQgdGhpcyBhbmQganVzdAorCQkgKiBsZWF2ZSB0aGUgdW5kZXJzY29yZSBpbiBwbGFjZS4KKwkJICovCisJCWlmIChpc19yZmMyMDQ3X3NwZWNpYWwoY2gpIHx8IGNoID09ICcgJyB8fCBjaCA9PSAnXG4nKSB7CisJCQlzdHJidWZfYWRkZihzYiwgIj0lMDJYIiwgY2gpOworCQkJbGluZV9sZW4gKz0gMzsKKwkJfQorCQllbHNlIHsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgY2gpOworCQkJbGluZV9sZW4rKzsKKwkJfQorCX0KKwlzdHJidWZfYWRkc3RyKHNiLCAiPz0iKTsKK30KKwordm9pZCBwcF91c2VyX2luZm8oY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICBjb25zdCBjaGFyICp3aGF0LCBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJICBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICplbmNvZGluZykKK3sKKwljaGFyICpkYXRlOworCWludCBuYW1lbGVuOworCXVuc2lnbmVkIGxvbmcgdGltZTsKKwlpbnQgdHo7CisKKwlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQorCQlyZXR1cm47CisJZGF0ZSA9IHN0cmNocihsaW5lLCAnPicpOworCWlmICghZGF0ZSkKKwkJcmV0dXJuOworCW5hbWVsZW4gPSArK2RhdGUgLSBsaW5lOworCXRpbWUgPSBzdHJ0b3VsKGRhdGUsICZkYXRlLCAxMCk7CisJdHogPSBzdHJ0b2woZGF0ZSwgTlVMTCwgMTApOworCisJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfRU1BSUwpIHsKKwkJY2hhciAqbmFtZV90YWlsID0gc3RyY2hyKGxpbmUsICc8Jyk7CisJCWludCBkaXNwbGF5X25hbWVfbGVuZ3RoOworCQlpbnQgZmluYWxfbGluZTsKKwkJaWYgKCFuYW1lX3RhaWwpCisJCQlyZXR1cm47CisJCXdoaWxlIChsaW5lIDwgbmFtZV90YWlsICYmIGlzc3BhY2UobmFtZV90YWlsWy0xXSkpCisJCQluYW1lX3RhaWwtLTsKKwkJZGlzcGxheV9uYW1lX2xlbmd0aCA9IG5hbWVfdGFpbCAtIGxpbmU7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsICJGcm9tOiAiKTsKKwkJaWYgKCFoYXNfcmZjODIyX3NwZWNpYWxzKGxpbmUsIGRpc3BsYXlfbmFtZV9sZW5ndGgpKSB7CisJCQlhZGRfcmZjMjA0NyhzYiwgbGluZSwgZGlzcGxheV9uYW1lX2xlbmd0aCwgZW5jb2RpbmcpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHN0cmJ1ZiBxdW90ZWQgPSBTVFJCVUZfSU5JVDsKKwkJCWFkZF9yZmM4MjJfcXVvdGVkKCZxdW90ZWQsIGxpbmUsIGRpc3BsYXlfbmFtZV9sZW5ndGgpOworCQkJYWRkX3JmYzIwNDcoc2IsIHF1b3RlZC5idWYsIHF1b3RlZC5sZW4sIGVuY29kaW5nKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZxdW90ZWQpOworCQl9CisJCWZvciAoZmluYWxfbGluZSA9IDA7IGZpbmFsX2xpbmUgPCBzYi0+bGVuOyBmaW5hbF9saW5lKyspCisJCQlpZiAoc2ItPmJ1ZltzYi0+bGVuIC0gZmluYWxfbGluZSAtIDFdID09ICdcbicpCisJCQkJYnJlYWs7CisJCWlmIChuYW1lbGVuIC0gZGlzcGxheV9uYW1lX2xlbmd0aCArIGZpbmFsX2xpbmUgPiA3OCkgeworCQkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwkJCWlmICghaXNzcGFjZShuYW1lX3RhaWxbMF0pKQorCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJfQorCQlzdHJidWZfYWRkKHNiLCBuYW1lX3RhaWwsIG5hbWVsZW4gLSBkaXNwbGF5X25hbWVfbGVuZ3RoKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZihzYiwgIiVzOiAlLipzJS4qc1xuIiwgd2hhdCwKKwkJCSAgICAgIChwcC0+Zm10ID09IENNSVRfRk1UX0ZVTExFUikgPyA0IDogMCwKKwkJCSAgICAgICIgICAgIiwgbmFtZWxlbiwgbGluZSk7CisJfQorCXN3aXRjaCAocHAtPmZtdCkgeworCWNhc2UgQ01JVF9GTVRfTUVESVVNOgorCQlzdHJidWZfYWRkZihzYiwgIkRhdGU6ICAgJXNcbiIsIHNob3dfZGF0ZSh0aW1lLCB0eiwgcHAtPmRhdGVfbW9kZSkpOworCQlicmVhazsKKwljYXNlIENNSVRfRk1UX0VNQUlMOgorCQlzdHJidWZfYWRkZihzYiwgIkRhdGU6ICVzXG4iLCBzaG93X2RhdGUodGltZSwgdHosIERBVEVfUkZDMjgyMikpOworCQlicmVhazsKKwljYXNlIENNSVRfRk1UX0ZVTExFUjoKKwkJc3RyYnVmX2FkZGYoc2IsICIlc0RhdGU6ICVzXG4iLCB3aGF0LCBzaG93X2RhdGUodGltZSwgdHosIHBwLT5kYXRlX21vZGUpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogbm90aW4nICovCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBpc19lbXB0eV9saW5lKGNvbnN0IGNoYXIgKmxpbmUsIGludCAqbGVuX3ApCit7CisJaW50IGxlbiA9ICpsZW5fcDsKKwl3aGlsZSAobGVuICYmIGlzc3BhY2UobGluZVtsZW4tMV0pKQorCQlsZW4tLTsKKwkqbGVuX3AgPSBsZW47CisJcmV0dXJuICFsZW47Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpza2lwX2VtcHR5X2xpbmVzKGNvbnN0IGNoYXIgKm1zZykKK3sKKwlmb3IgKDs7KSB7CisJCWludCBsaW5lbGVuID0gZ2V0X29uZV9saW5lKG1zZyk7CisJCWludCBsbCA9IGxpbmVsZW47CisJCWlmICghbGluZWxlbikKKwkJCWJyZWFrOworCQlpZiAoIWlzX2VtcHR5X2xpbmUobXNnLCAmbGwpKQorCQkJYnJlYWs7CisJCW1zZyArPSBsaW5lbGVuOworCX0KKwlyZXR1cm4gbXNnOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWVyZ2VfaW5mbyhjb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsKKworCWlmICgocHAtPmZtdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKSB8fCAocHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCkgfHwKKwkgICAgIXBhcmVudCB8fCAhcGFyZW50LT5uZXh0KQorCQlyZXR1cm47CisKKwlzdHJidWZfYWRkc3RyKHNiLCAiTWVyZ2U6Iik7CisKKwl3aGlsZSAocGFyZW50KSB7CisJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnQtPml0ZW07CisJCWNvbnN0IGNoYXIgKmhleCA9IE5VTEw7CisJCWlmIChwcC0+YWJicmV2KQorCQkJaGV4ID0gZmluZF91bmlxdWVfYWJicmV2KHAtPm9iamVjdC5zaGExLCBwcC0+YWJicmV2KTsKKwkJaWYgKCFoZXgpCisJCQloZXggPSBzaGExX3RvX2hleChwLT5vYmplY3Quc2hhMSk7CisJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKworCQlzdHJidWZfYWRkZihzYiwgIiAlcyIsIGhleCk7CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfaGVhZGVyKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqa2V5KQoreworCWludCBrZXlfbGVuID0gc3RybGVuKGtleSk7CisJY29uc3QgY2hhciAqbGluZSA9IGNvbW1pdC0+YnVmZmVyOworCisJd2hpbGUgKGxpbmUpIHsKKwkJY29uc3QgY2hhciAqZW9sID0gc3RyY2hyKGxpbmUsICdcbicpLCAqbmV4dDsKKworCQlpZiAobGluZSA9PSBlb2wpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCFlb2wpIHsKKwkJCXdhcm5pbmcoIm1hbGZvcm1lZCBjb21taXQgKGhlYWRlciBpcyBtaXNzaW5nIG5ld2xpbmUpOiAlcyIsCisJCQkJc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCQkJZW9sID0gbGluZSArIHN0cmxlbihsaW5lKTsKKwkJCW5leHQgPSBOVUxMOworCQl9IGVsc2UKKwkJCW5leHQgPSBlb2wgKyAxOworCQlpZiAoZW9sIC0gbGluZSA+IGtleV9sZW4gJiYKKwkJICAgICFzdHJuY21wKGxpbmUsIGtleSwga2V5X2xlbikgJiYKKwkJICAgIGxpbmVba2V5X2xlbl0gPT0gJyAnKSB7CisJCQlyZXR1cm4geG1lbWR1cHoobGluZSArIGtleV9sZW4gKyAxLCBlb2wgLSBsaW5lIC0ga2V5X2xlbiAtIDEpOworCQl9CisJCWxpbmUgPSBuZXh0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNoYXIgKnJlcGxhY2VfZW5jb2RpbmdfaGVhZGVyKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisJc3RydWN0IHN0cmJ1ZiB0bXAgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3Qgc3RhcnQsIGxlbjsKKwljaGFyICpjcCA9IGJ1ZjsKKworCS8qIGd1ZXNzIGlmIHRoZXJlIGlzIGFuIGVuY29kaW5nIGhlYWRlciBiZWZvcmUgYSBcblxuICovCisJd2hpbGUgKHN0cm5jbXAoY3AsICJlbmNvZGluZyAiLCBzdHJsZW4oImVuY29kaW5nICIpKSkgeworCQljcCA9IHN0cmNocihjcCwgJ1xuJyk7CisJCWlmICghY3AgfHwgKisrY3AgPT0gJ1xuJykKKwkJCXJldHVybiBidWY7CisJfQorCXN0YXJ0ID0gY3AgLSBidWY7CisJY3AgPSBzdHJjaHIoY3AsICdcbicpOworCWlmICghY3ApCisJCXJldHVybiBidWY7IC8qIHNob3VsZCBub3QgaGFwcGVuIGJ1dCBiZSBkZWZlbnNpdmUgKi8KKwlsZW4gPSBjcCArIDEgLSAoYnVmICsgc3RhcnQpOworCisJc3RyYnVmX2F0dGFjaCgmdG1wLCBidWYsIHN0cmxlbihidWYpLCBzdHJsZW4oYnVmKSArIDEpOworCWlmIChpc19lbmNvZGluZ191dGY4KGVuY29kaW5nKSkgeworCQkvKiB3ZSBoYXZlIHJlLWNvZGVkIHRvIFVURi04OyBkcm9wIHRoZSBoZWFkZXIgKi8KKwkJc3RyYnVmX3JlbW92ZSgmdG1wLCBzdGFydCwgbGVuKTsKKwl9IGVsc2UgeworCQkvKiBqdXN0IHJlcGxhY2VzIFhYWFggaW4gJ2VuY29kaW5nIFhYWFhcbicgKi8KKwkJc3RyYnVmX3NwbGljZSgmdG1wLCBzdGFydCArIHN0cmxlbigiZW5jb2RpbmcgIiksCisJCQkJCSAgbGVuIC0gc3RybGVuKCJlbmNvZGluZyBcbiIpLAorCQkJCQkgIGVuY29kaW5nLCBzdHJsZW4oZW5jb2RpbmcpKTsKKwl9CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnRtcCwgTlVMTCk7Cit9CisKK2NoYXIgKmxvZ21zZ19yZWVuY29kZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCSAgICAgIGNvbnN0IGNoYXIgKm91dHB1dF9lbmNvZGluZykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqdXRmOCA9ICJVVEYtOCI7CisJY29uc3QgY2hhciAqdXNlX2VuY29kaW5nOworCWNoYXIgKmVuY29kaW5nOworCWNoYXIgKm91dDsKKworCWlmICghKm91dHB1dF9lbmNvZGluZykKKwkJcmV0dXJuIE5VTEw7CisJZW5jb2RpbmcgPSBnZXRfaGVhZGVyKGNvbW1pdCwgImVuY29kaW5nIik7CisJdXNlX2VuY29kaW5nID0gZW5jb2RpbmcgPyBlbmNvZGluZyA6IHV0Zjg7CisJaWYgKCFzdHJjbXAodXNlX2VuY29kaW5nLCBvdXRwdXRfZW5jb2RpbmcpKQorCQlpZiAoZW5jb2RpbmcpIC8qIHdlJ2xsIHN0cmlwIGVuY29kaW5nIGhlYWRlciBsYXRlciAqLworCQkJb3V0ID0geHN0cmR1cChjb21taXQtPmJ1ZmZlcik7CisJCWVsc2UKKwkJCXJldHVybiBOVUxMOyAvKiBub3RoaW5nIHRvIGRvICovCisJZWxzZQorCQlvdXQgPSByZWVuY29kZV9zdHJpbmcoY29tbWl0LT5idWZmZXIsCisJCQkJICAgICAgb3V0cHV0X2VuY29kaW5nLCB1c2VfZW5jb2RpbmcpOworCWlmIChvdXQpCisJCW91dCA9IHJlcGxhY2VfZW5jb2RpbmdfaGVhZGVyKG91dCwgb3V0cHV0X2VuY29kaW5nKTsKKworCWZyZWUoZW5jb2RpbmcpOworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgbWFpbG1hcF9uYW1lKGNoYXIgKmVtYWlsLCBpbnQgZW1haWxfbGVuLCBjaGFyICpuYW1lLCBpbnQgbmFtZV9sZW4pCit7CisJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFpbF9tYXA7CisJaWYgKCFtYWlsX21hcCkgeworCQltYWlsX21hcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCptYWlsX21hcCkpOworCQlyZWFkX21haWxtYXAobWFpbF9tYXAsIE5VTEwpOworCX0KKwlyZXR1cm4gbWFpbF9tYXAtPm5yICYmIG1hcF91c2VyKG1haWxfbWFwLCBlbWFpbCwgZW1haWxfbGVuLCBuYW1lLCBuYW1lX2xlbik7Cit9CisKK3N0YXRpYyBzaXplX3QgZm9ybWF0X3BlcnNvbl9wYXJ0KHN0cnVjdCBzdHJidWYgKnNiLCBjaGFyIHBhcnQsCisJCQkJIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbiwgZW51bSBkYXRlX21vZGUgZG1vZGUpCit7CisJLyogY3VycmVudGx5IGFsbCBwbGFjZWhvbGRlcnMgaGF2ZSBzYW1lIGxlbmd0aCAqLworCWNvbnN0IGludCBwbGFjZWhvbGRlcl9sZW4gPSAyOworCWludCB0ejsKKwl1bnNpZ25lZCBsb25nIGRhdGUgPSAwOworCWNoYXIgcGVyc29uX25hbWVbMTAyNF07CisJY2hhciBwZXJzb25fbWFpbFsxMDI0XTsKKwlzdHJ1Y3QgaWRlbnRfc3BsaXQgczsKKwljb25zdCBjaGFyICpuYW1lX3N0YXJ0LCAqbmFtZV9lbmQsICptYWlsX3N0YXJ0LCAqbWFpbF9lbmQ7CisKKwlpZiAoc3BsaXRfaWRlbnRfbGluZSgmcywgbXNnLCBsZW4pIDwgMCkKKwkJZ290byBza2lwOworCisJbmFtZV9zdGFydCA9IHMubmFtZV9iZWdpbjsKKwluYW1lX2VuZCA9IHMubmFtZV9lbmQ7CisJbWFpbF9zdGFydCA9IHMubWFpbF9iZWdpbjsKKwltYWlsX2VuZCA9IHMubWFpbF9lbmQ7CisKKwlpZiAocGFydCA9PSAnTicgfHwgcGFydCA9PSAnRScpIHsgLyogbWFpbG1hcCBsb29rdXAgKi8KKwkJc25wcmludGYocGVyc29uX25hbWUsIHNpemVvZihwZXJzb25fbmFtZSksICIlLipzIiwKKwkJCSAoaW50KShuYW1lX2VuZCAtIG5hbWVfc3RhcnQpLCBuYW1lX3N0YXJ0KTsKKwkJc25wcmludGYocGVyc29uX21haWwsIHNpemVvZihwZXJzb25fbWFpbCksICIlLipzIiwKKwkJCSAoaW50KShtYWlsX2VuZCAtIG1haWxfc3RhcnQpLCBtYWlsX3N0YXJ0KTsKKwkJbWFpbG1hcF9uYW1lKHBlcnNvbl9tYWlsLCBzaXplb2YocGVyc29uX21haWwpLCBwZXJzb25fbmFtZSwgc2l6ZW9mKHBlcnNvbl9uYW1lKSk7CisJCW5hbWVfc3RhcnQgPSBwZXJzb25fbmFtZTsKKwkJbmFtZV9lbmQgPSBuYW1lX3N0YXJ0ICsgc3RybGVuKHBlcnNvbl9uYW1lKTsKKwkJbWFpbF9zdGFydCA9IHBlcnNvbl9tYWlsOworCQltYWlsX2VuZCA9IG1haWxfc3RhcnQgKyAgc3RybGVuKHBlcnNvbl9tYWlsKTsKKwl9CisJaWYgKHBhcnQgPT0gJ24nIHx8IHBhcnQgPT0gJ04nKSB7CS8qIG5hbWUgKi8KKwkJc3RyYnVmX2FkZChzYiwgbmFtZV9zdGFydCwgbmFtZV9lbmQtbmFtZV9zdGFydCk7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisJfQorCWlmIChwYXJ0ID09ICdlJyB8fCBwYXJ0ID09ICdFJykgewkvKiBlbWFpbCAqLworCQlzdHJidWZfYWRkKHNiLCBtYWlsX3N0YXJ0LCBtYWlsX2VuZC1tYWlsX3N0YXJ0KTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwl9CisKKwlpZiAoIXMuZGF0ZV9iZWdpbikKKwkJZ290byBza2lwOworCisJZGF0ZSA9IHN0cnRvdWwocy5kYXRlX2JlZ2luLCBOVUxMLCAxMCk7CisKKwlpZiAocGFydCA9PSAndCcpIHsJLyogZGF0ZSwgVU5JWCB0aW1lc3RhbXAgKi8KKwkJc3RyYnVmX2FkZChzYiwgcy5kYXRlX2JlZ2luLCBzLmRhdGVfZW5kIC0gcy5kYXRlX2JlZ2luKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwl9CisKKwkvKiBwYXJzZSB0eiAqLworCXR6ID0gc3RydG91bChzLnR6X2JlZ2luICsgMSwgTlVMTCwgMTApOworCWlmICgqcy50el9iZWdpbiA9PSAnLScpCisJCXR6ID0gLXR6OworCisJc3dpdGNoIChwYXJ0KSB7CisJY2FzZSAnZCc6CS8qIGRhdGUgKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hvd19kYXRlKGRhdGUsIHR6LCBkbW9kZSkpOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCWNhc2UgJ0QnOgkvKiBkYXRlLCBSRkMyODIyIHN0eWxlICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHNob3dfZGF0ZShkYXRlLCB0eiwgREFURV9SRkMyODIyKSk7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisJY2FzZSAncic6CS8qIGRhdGUsIHJlbGF0aXZlICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHNob3dfZGF0ZShkYXRlLCB0eiwgREFURV9SRUxBVElWRSkpOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCWNhc2UgJ2knOgkvKiBkYXRlLCBJU08gODYwMSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2RhdGUoZGF0ZSwgdHosIERBVEVfSVNPODYwMSkpOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCX0KKworc2tpcDoKKwkvKgorCSAqIHJlYWRpbmcgZnJvbSBlaXRoZXIgYSBib2d1cyBjb21taXQsIG9yIGEgcmVmbG9nIGVudHJ5IHdpdGgKKwkgKiAlZ24sICVnZSwgZXRjLjsgJ3NiJyBjYW5ub3QgYmUgdXBkYXRlZCwgYnV0IHdlIHN0aWxsIG5lZWQKKwkgKiB0byBjb21wdXRlIGEgdmFsaWQgcmV0dXJuIHZhbHVlLgorCSAqLworCWlmIChwYXJ0ID09ICduJyB8fCBwYXJ0ID09ICdlJyB8fCBwYXJ0ID09ICd0JyB8fCBwYXJ0ID09ICdkJworCSAgICB8fCBwYXJ0ID09ICdEJyB8fCBwYXJ0ID09ICdyJyB8fCBwYXJ0ID09ICdpJykKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKworCXJldHVybiAwOyAvKiB1bmtub3duIHBsYWNlaG9sZGVyICovCit9CisKK3N0cnVjdCBjaHVuayB7CisJc2l6ZV90IG9mZjsKKwlzaXplX3QgbGVuOworfTsKKworc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCB7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHJldHR5X2N0eDsKKwl1bnNpZ25lZCBjb21taXRfaGVhZGVyX3BhcnNlZDoxOworCXVuc2lnbmVkIGNvbW1pdF9tZXNzYWdlX3BhcnNlZDoxOworCXVuc2lnbmVkIGNvbW1pdF9zaWduYXR1cmVfcGFyc2VkOjE7CisJc3RydWN0IHsKKwkJY2hhciAqZ3BnX291dHB1dDsKKwkJY2hhciBnb29kX2JhZDsKKwkJY2hhciAqc2lnbmVyOworCX0gc2lnbmF0dXJlOworCWNoYXIgKm1lc3NhZ2U7CisJc2l6ZV90IHdpZHRoLCBpbmRlbnQxLCBpbmRlbnQyOworCisJLyogVGhlc2Ugb2Zmc2V0cyBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb21taXQgbWVzc2FnZS4gKi8KKwlzdHJ1Y3QgY2h1bmsgYXV0aG9yOworCXN0cnVjdCBjaHVuayBjb21taXR0ZXI7CisJc3RydWN0IGNodW5rIGVuY29kaW5nOworCXNpemVfdCBtZXNzYWdlX29mZjsKKwlzaXplX3Qgc3ViamVjdF9vZmY7CisJc2l6ZV90IGJvZHlfb2ZmOworCisJLyogVGhlIGZvbGxvd2luZyBvbmVzIGFyZSByZWxhdGl2ZSB0byB0aGUgcmVzdWx0IHN0cnVjdCBzdHJidWYuICovCisJc3RydWN0IGNodW5rIGFiYnJldl9jb21taXRfaGFzaDsKKwlzdHJ1Y3QgY2h1bmsgYWJicmV2X3RyZWVfaGFzaDsKKwlzdHJ1Y3QgY2h1bmsgYWJicmV2X3BhcmVudF9oYXNoZXM7CisJc2l6ZV90IHdyYXBfc3RhcnQ7Cit9OworCitzdGF0aWMgaW50IGFkZF9hZ2FpbihzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IGNodW5rICpjaHVuaykKK3sKKwlpZiAoY2h1bmstPmxlbikgeworCQlzdHJidWZfYWRkZHVwKHNiLCBjaHVuay0+b2ZmLCBjaHVuay0+bGVuKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlbid0IHNlZW4gdGhpcyBjaHVuayBiZWZvcmUuICBPdXIgY2FsbGVyIGlzIHN1cmVseQorCSAqIGdvaW5nIHRvIGFkZCBpdCB0aGUgaGFyZCB3YXkgbm93LiAgUmVtZW1iZXIgdGhlIG1vc3QgbGlrZWx5CisJICogc3RhcnQgb2YgdGhlIHRvLWJlLWFkZGVkIGNodW5rOiB0aGUgY3VycmVudCBlbmQgb2YgdGhlCisJICogc3RydWN0IHN0cmJ1Zi4KKwkgKi8KKwljaHVuay0+b2ZmID0gc2ItPmxlbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY29tbWl0X2hlYWRlcihzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0ICpjb250ZXh0KQoreworCWNvbnN0IGNoYXIgKm1zZyA9IGNvbnRleHQtPm1lc3NhZ2U7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBtc2dbaV07IGkrKykgeworCQlpbnQgZW9sOworCQlmb3IgKGVvbCA9IGk7IG1zZ1tlb2xdICYmIG1zZ1tlb2xdICE9ICdcbic7IGVvbCsrKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisKKwkJaWYgKGkgPT0gZW9sKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICghcHJlZml4Y21wKG1zZyArIGksICJhdXRob3IgIikpIHsKKwkJCWNvbnRleHQtPmF1dGhvci5vZmYgPSBpICsgNzsKKwkJCWNvbnRleHQtPmF1dGhvci5sZW4gPSBlb2wgLSBpIC0gNzsKKwkJfSBlbHNlIGlmICghcHJlZml4Y21wKG1zZyArIGksICJjb21taXR0ZXIgIikpIHsKKwkJCWNvbnRleHQtPmNvbW1pdHRlci5vZmYgPSBpICsgMTA7CisJCQljb250ZXh0LT5jb21taXR0ZXIubGVuID0gZW9sIC0gaSAtIDEwOworCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAobXNnICsgaSwgImVuY29kaW5nICIpKSB7CisJCQljb250ZXh0LT5lbmNvZGluZy5vZmYgPSBpICsgOTsKKwkJCWNvbnRleHQtPmVuY29kaW5nLmxlbiA9IGVvbCAtIGkgLSA5OworCQl9CisJCWkgPSBlb2w7CisJfQorCWNvbnRleHQtPm1lc3NhZ2Vfb2ZmID0gaTsKKwljb250ZXh0LT5jb21taXRfaGVhZGVyX3BhcnNlZCA9IDE7Cit9CisKK3N0YXRpYyBpbnQgaXN0aXRsZWNoYXIoY2hhciBjKQoreworCXJldHVybiAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwKKwkJKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fCBjID09ICcuJyB8fCBjID09ICdfJzsKK30KKworc3RhdGljIHZvaWQgZm9ybWF0X3Nhbml0aXplZF9zdWJqZWN0KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICptc2cpCit7CisJc2l6ZV90IHRyaW1sZW47CisJc2l6ZV90IHN0YXJ0X2xlbiA9IHNiLT5sZW47CisJaW50IHNwYWNlID0gMjsKKworCWZvciAoOyAqbXNnICYmICptc2cgIT0gJ1xuJzsgbXNnKyspIHsKKwkJaWYgKGlzdGl0bGVjaGFyKCptc2cpKSB7CisJCQlpZiAoc3BhY2UgPT0gMSkKKwkJCQlzdHJidWZfYWRkY2goc2IsICctJyk7CisJCQlzcGFjZSA9IDA7CisJCQlzdHJidWZfYWRkY2goc2IsICptc2cpOworCQkJaWYgKCptc2cgPT0gJy4nKQorCQkJCXdoaWxlICgqKG1zZysxKSA9PSAnLicpCisJCQkJCW1zZysrOworCQl9IGVsc2UKKwkJCXNwYWNlIHw9IDE7CisJfQorCisJLyogdHJpbSBhbnkgdHJhaWxpbmcgJy4nIG9yICctJyBjaGFyYWN0ZXJzICovCisJdHJpbWxlbiA9IDA7CisJd2hpbGUgKHNiLT5sZW4gLSB0cmltbGVuID4gc3RhcnRfbGVuICYmCisJCShzYi0+YnVmW3NiLT5sZW4gLSAxIC0gdHJpbWxlbl0gPT0gJy4nCisJCXx8IHNiLT5idWZbc2ItPmxlbiAtIDEgLSB0cmltbGVuXSA9PSAnLScpKQorCQl0cmltbGVuKys7CisJc3RyYnVmX3JlbW92ZShzYiwgc2ItPmxlbiAtIHRyaW1sZW4sIHRyaW1sZW4pOworfQorCitjb25zdCBjaGFyICpmb3JtYXRfc3ViamVjdChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqbXNnLAorCQkJICAgY29uc3QgY2hhciAqbGluZV9zZXBhcmF0b3IpCit7CisJaW50IGZpcnN0ID0gMTsKKworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqbGluZSA9IG1zZzsKKwkJaW50IGxpbmVsZW4gPSBnZXRfb25lX2xpbmUobGluZSk7CisKKwkJbXNnICs9IGxpbmVsZW47CisJCWlmICghbGluZWxlbiB8fCBpc19lbXB0eV9saW5lKGxpbmUsICZsaW5lbGVuKSkKKwkJCWJyZWFrOworCisJCWlmICghc2IpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX2dyb3coc2IsIGxpbmVsZW4gKyAyKTsKKwkJaWYgKCFmaXJzdCkKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGxpbmVfc2VwYXJhdG9yKTsKKwkJc3RyYnVmX2FkZChzYiwgbGluZSwgbGluZWxlbik7CisJCWZpcnN0ID0gMDsKKwl9CisJcmV0dXJuIG1zZzsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY29tbWl0X21lc3NhZ2Uoc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCAqYykKK3sKKwljb25zdCBjaGFyICptc2cgPSBjLT5tZXNzYWdlICsgYy0+bWVzc2FnZV9vZmY7CisJY29uc3QgY2hhciAqc3RhcnQgPSBjLT5tZXNzYWdlOworCisJbXNnID0gc2tpcF9lbXB0eV9saW5lcyhtc2cpOworCWMtPnN1YmplY3Rfb2ZmID0gbXNnIC0gc3RhcnQ7CisKKwltc2cgPSBmb3JtYXRfc3ViamVjdChOVUxMLCBtc2csIE5VTEwpOworCW1zZyA9IHNraXBfZW1wdHlfbGluZXMobXNnKTsKKwljLT5ib2R5X29mZiA9IG1zZyAtIHN0YXJ0OworCisJYy0+Y29tbWl0X21lc3NhZ2VfcGFyc2VkID0gMTsKK30KKworc3RhdGljIHZvaWQgZm9ybWF0X2RlY29yYXRpb24oc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpkOworCWNvbnN0IGNoYXIgKnByZWZpeCA9ICIgKCI7CisKKwlsb2FkX3JlZl9kZWNvcmF0aW9ucyhERUNPUkFURV9TSE9SVF9SRUZTKTsKKwlkID0gbG9va3VwX2RlY29yYXRpb24oJm5hbWVfZGVjb3JhdGlvbiwgJmNvbW1pdC0+b2JqZWN0KTsKKwl3aGlsZSAoZCkgeworCQlzdHJidWZfYWRkc3RyKHNiLCBwcmVmaXgpOworCQlwcmVmaXggPSAiLCAiOworCQlzdHJidWZfYWRkc3RyKHNiLCBkLT5uYW1lKTsKKwkJZCA9IGQtPm5leHQ7CisJfQorCWlmIChwcmVmaXhbMF0gPT0gJywnKQorCQlzdHJidWZfYWRkY2goc2IsICcpJyk7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl93cmFwKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLAorCQkJc2l6ZV90IHdpZHRoLCBzaXplX3QgaW5kZW50MSwgc2l6ZV90IGluZGVudDIpCit7CisJc3RydWN0IHN0cmJ1ZiB0bXAgPSBTVFJCVUZfSU5JVDsKKworCWlmIChwb3MpCisJCXN0cmJ1Zl9hZGQoJnRtcCwgc2ItPmJ1ZiwgcG9zKTsKKwlzdHJidWZfYWRkX3dyYXBwZWRfdGV4dCgmdG1wLCBzYi0+YnVmICsgcG9zLAorCQkJCShpbnQpIGluZGVudDEsIChpbnQpIGluZGVudDIsIChpbnQpIHdpZHRoKTsKKwlzdHJidWZfc3dhcCgmdG1wLCBzYik7CisJc3RyYnVmX3JlbGVhc2UoJnRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJld3JhcF9tZXNzYWdlX3RhaWwoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCAqYywKKwkJCQlzaXplX3QgbmV3X3dpZHRoLCBzaXplX3QgbmV3X2luZGVudDEsCisJCQkJc2l6ZV90IG5ld19pbmRlbnQyKQoreworCWlmIChjLT53aWR0aCA9PSBuZXdfd2lkdGggJiYgYy0+aW5kZW50MSA9PSBuZXdfaW5kZW50MSAmJgorCSAgICBjLT5pbmRlbnQyID09IG5ld19pbmRlbnQyKQorCQlyZXR1cm47CisJaWYgKGMtPndyYXBfc3RhcnQgPCBzYi0+bGVuKQorCQlzdHJidWZfd3JhcChzYiwgYy0+d3JhcF9zdGFydCwgYy0+d2lkdGgsIGMtPmluZGVudDEsIGMtPmluZGVudDIpOworCWMtPndyYXBfc3RhcnQgPSBzYi0+bGVuOworCWMtPndpZHRoID0gbmV3X3dpZHRoOworCWMtPmluZGVudDEgPSBuZXdfaW5kZW50MTsKKwljLT5pbmRlbnQyID0gbmV3X2luZGVudDI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeworCWNoYXIgcmVzdWx0OworCWNvbnN0IGNoYXIgKmNoZWNrOworfSBzaWduYXR1cmVfY2hlY2tbXSA9IHsKKwl7ICdHJywgIjogR29vZCBzaWduYXR1cmUgZnJvbSAiIH0sCisJeyAnQicsICI6IEJBRCBzaWduYXR1cmUgZnJvbSAiIH0sCit9OworCitzdGF0aWMgdm9pZCBwYXJzZV9zaWduYXR1cmVfbGluZXMoc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCAqY3R4KQoreworCWNvbnN0IGNoYXIgKmJ1ZiA9IGN0eC0+c2lnbmF0dXJlLmdwZ19vdXRwdXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaWduYXR1cmVfY2hlY2spOyBpKyspIHsKKwkJY29uc3QgY2hhciAqZm91bmQgPSBzdHJzdHIoYnVmLCBzaWduYXR1cmVfY2hlY2tbaV0uY2hlY2spOworCQljb25zdCBjaGFyICpuZXh0OworCQlpZiAoIWZvdW5kKQorCQkJY29udGludWU7CisJCWN0eC0+c2lnbmF0dXJlLmdvb2RfYmFkID0gc2lnbmF0dXJlX2NoZWNrW2ldLnJlc3VsdDsKKwkJZm91bmQgKz0gc3RybGVuKHNpZ25hdHVyZV9jaGVja1tpXS5jaGVjayk7CisJCW5leHQgPSBzdHJjaHJudWwoZm91bmQsICdcbicpOworCQljdHgtPnNpZ25hdHVyZS5zaWduZXIgPSB4bWVtZHVweihmb3VuZCwgbmV4dCAtIGZvdW5kKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXJzZV9jb21taXRfc2lnbmF0dXJlKHN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBheWxvYWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNpZ25hdHVyZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZ3BnX291dHB1dCA9IFNUUkJVRl9JTklUOworCWludCBzdGF0dXM7CisKKwljdHgtPmNvbW1pdF9zaWduYXR1cmVfcGFyc2VkID0gMTsKKworCWlmIChwYXJzZV9zaWduZWRfY29tbWl0KGN0eC0+Y29tbWl0LT5vYmplY3Quc2hhMSwKKwkJCQkmcGF5bG9hZCwgJnNpZ25hdHVyZSkgPD0gMCkKKwkJZ290byBvdXQ7CisJc3RhdHVzID0gdmVyaWZ5X3NpZ25lZF9idWZmZXIocGF5bG9hZC5idWYsIHBheWxvYWQubGVuLAorCQkJCSAgICAgIHNpZ25hdHVyZS5idWYsIHNpZ25hdHVyZS5sZW4sCisJCQkJICAgICAgJmdwZ19vdXRwdXQpOworCWlmIChzdGF0dXMgJiYgIWdwZ19vdXRwdXQubGVuKQorCQlnb3RvIG91dDsKKwljdHgtPnNpZ25hdHVyZS5ncGdfb3V0cHV0ID0gc3RyYnVmX2RldGFjaCgmZ3BnX291dHB1dCwgTlVMTCk7CisJcGFyc2Vfc2lnbmF0dXJlX2xpbmVzKGN0eCk7CisKKyBvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJmdwZ19vdXRwdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmc2lnbmF0dXJlKTsKK30KKworCitzdGF0aWMgaW50IGZvcm1hdF9yZWZsb2dfcGVyc29uKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCWNoYXIgcGFydCwKKwkJCQlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqbG9nLAorCQkJCWVudW0gZGF0ZV9tb2RlIGRtb2RlKQoreworCWNvbnN0IGNoYXIgKmlkZW50OworCisJaWYgKCFsb2cpCisJCXJldHVybiAyOworCisJaWRlbnQgPSBnZXRfcmVmbG9nX2lkZW50KGxvZyk7CisJaWYgKCFpZGVudCkKKwkJcmV0dXJuIDI7CisKKwlyZXR1cm4gZm9ybWF0X3BlcnNvbl9wYXJ0KHNiLCBwYXJ0LCBpZGVudCwgc3RybGVuKGlkZW50KSwgZG1vZGUpOworfQorCitzdGF0aWMgc2l6ZV90IGZvcm1hdF9jb21taXRfb25lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwbGFjZWhvbGRlciwKKwkJCQl2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMgPSBjb250ZXh0OworCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGMtPmNvbW1pdDsKKwljb25zdCBjaGFyICptc2cgPSBjLT5tZXNzYWdlOworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlpbnQgaDEsIGgyOworCisJLyogdGhlc2UgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBjb21taXQgKi8KKwlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CisJY2FzZSAnQyc6CisJCWlmIChwbGFjZWhvbGRlclsxXSA9PSAnKCcpIHsKKwkJCWNvbnN0IGNoYXIgKmVuZCA9IHN0cmNocihwbGFjZWhvbGRlciArIDIsICcpJyk7CisJCQljaGFyIGNvbG9yW0NPTE9SX01BWExFTl07CisJCQlpZiAoIWVuZCkKKwkJCQlyZXR1cm4gMDsKKwkJCWNvbG9yX3BhcnNlX21lbShwbGFjZWhvbGRlciArIDIsCisJCQkJCWVuZCAtIChwbGFjZWhvbGRlciArIDIpLAorCQkJCQkiLS1wcmV0dHkgZm9ybWF0IiwgY29sb3IpOworCQkJc3RyYnVmX2FkZHN0cihzYiwgY29sb3IpOworCQkJcmV0dXJuIGVuZCAtIHBsYWNlaG9sZGVyICsgMTsKKwkJfQorCQlpZiAoIXByZWZpeGNtcChwbGFjZWhvbGRlciArIDEsICJyZWQiKSkgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgR0lUX0NPTE9SX1JFRCk7CisJCQlyZXR1cm4gNDsKKwkJfSBlbHNlIGlmICghcHJlZml4Y21wKHBsYWNlaG9sZGVyICsgMSwgImdyZWVuIikpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIEdJVF9DT0xPUl9HUkVFTik7CisJCQlyZXR1cm4gNjsKKwkJfSBlbHNlIGlmICghcHJlZml4Y21wKHBsYWNlaG9sZGVyICsgMSwgImJsdWUiKSkgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgR0lUX0NPTE9SX0JMVUUpOworCQkJcmV0dXJuIDU7CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChwbGFjZWhvbGRlciArIDEsICJyZXNldCIpKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBHSVRfQ09MT1JfUkVTRVQpOworCQkJcmV0dXJuIDY7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisJY2FzZSAnbic6CQkvKiBuZXdsaW5lICovCisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisJCXJldHVybiAxOworCWNhc2UgJ3gnOgorCQkvKiAleDAwID09IE5VTCwgJXgwYSA9PSBMRiwgZXRjLiAqLworCQlpZiAoMCA8PSAoaDEgPSBoZXh2YWxfdGFibGVbMHhmZiAmIHBsYWNlaG9sZGVyWzFdXSkgJiYKKwkJICAgIGgxIDw9IDE2ICYmCisJCSAgICAwIDw9IChoMiA9IGhleHZhbF90YWJsZVsweGZmICYgcGxhY2Vob2xkZXJbMl1dKSAmJgorCQkgICAgaDIgPD0gMTYpIHsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgKGgxPDw0KXxoMik7CisJCQlyZXR1cm4gMzsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMDsKKwljYXNlICd3JzoKKwkJaWYgKHBsYWNlaG9sZGVyWzFdID09ICcoJykgeworCQkJdW5zaWduZWQgbG9uZyB3aWR0aCA9IDAsIGluZGVudDEgPSAwLCBpbmRlbnQyID0gMDsKKwkJCWNoYXIgKm5leHQ7CisJCQljb25zdCBjaGFyICpzdGFydCA9IHBsYWNlaG9sZGVyICsgMjsKKwkJCWNvbnN0IGNoYXIgKmVuZCA9IHN0cmNocihzdGFydCwgJyknKTsKKwkJCWlmICghZW5kKQorCQkJCXJldHVybiAwOworCQkJaWYgKGVuZCA+IHN0YXJ0KSB7CisJCQkJd2lkdGggPSBzdHJ0b3VsKHN0YXJ0LCAmbmV4dCwgMTApOworCQkJCWlmICgqbmV4dCA9PSAnLCcpIHsKKwkJCQkJaW5kZW50MSA9IHN0cnRvdWwobmV4dCArIDEsICZuZXh0LCAxMCk7CisJCQkJCWlmICgqbmV4dCA9PSAnLCcpIHsKKwkJCQkJCWluZGVudDIgPSBzdHJ0b3VsKG5leHQgKyAxLAorCQkJCQkJCQkgJm5leHQsIDEwKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoKm5leHQgIT0gJyknKQorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJld3JhcF9tZXNzYWdlX3RhaWwoc2IsIGMsIHdpZHRoLCBpbmRlbnQxLCBpbmRlbnQyKTsKKwkJCXJldHVybiBlbmQgLSBwbGFjZWhvbGRlciArIDE7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogdGhlc2UgZGVwZW5kIG9uIHRoZSBjb21taXQgKi8KKwlpZiAoIWNvbW1pdC0+b2JqZWN0LnBhcnNlZCkKKwkJcGFyc2Vfb2JqZWN0KGNvbW1pdC0+b2JqZWN0LnNoYTEpOworCisJc3dpdGNoIChwbGFjZWhvbGRlclswXSkgeworCWNhc2UgJ0gnOgkJLyogY29tbWl0IGhhc2ggKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCQlyZXR1cm4gMTsKKwljYXNlICdoJzoJCS8qIGFiYnJldmlhdGVkIGNvbW1pdCBoYXNoICovCisJCWlmIChhZGRfYWdhaW4oc2IsICZjLT5hYmJyZXZfY29tbWl0X2hhc2gpKQorCQkJcmV0dXJuIDE7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLAorCQkJCQkJICAgICBjLT5wcmV0dHlfY3R4LT5hYmJyZXYpKTsKKwkJYy0+YWJicmV2X2NvbW1pdF9oYXNoLmxlbiA9IHNiLT5sZW4gLSBjLT5hYmJyZXZfY29tbWl0X2hhc2gub2ZmOworCQlyZXR1cm4gMTsKKwljYXNlICdUJzoJCS8qIHRyZWUgaGFzaCAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBzaGExX3RvX2hleChjb21taXQtPnRyZWUtPm9iamVjdC5zaGExKSk7CisJCXJldHVybiAxOworCWNhc2UgJ3QnOgkJLyogYWJicmV2aWF0ZWQgdHJlZSBoYXNoICovCisJCWlmIChhZGRfYWdhaW4oc2IsICZjLT5hYmJyZXZfdHJlZV9oYXNoKSkKKwkJCXJldHVybiAxOworCQlzdHJidWZfYWRkc3RyKHNiLCBmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSwKKwkJCQkJCSAgICAgYy0+cHJldHR5X2N0eC0+YWJicmV2KSk7CisJCWMtPmFiYnJldl90cmVlX2hhc2gubGVuID0gc2ItPmxlbiAtIGMtPmFiYnJldl90cmVlX2hhc2gub2ZmOworCQlyZXR1cm4gMTsKKwljYXNlICdQJzoJCS8qIHBhcmVudCBoYXNoZXMgKi8KKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQkJaWYgKHAgIT0gY29tbWl0LT5wYXJlbnRzKQorCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIHNoYTFfdG9faGV4KHAtPml0ZW0tPm9iamVjdC5zaGExKSk7CisJCX0KKwkJcmV0dXJuIDE7CisJY2FzZSAncCc6CQkvKiBhYmJyZXZpYXRlZCBwYXJlbnQgaGFzaGVzICovCisJCWlmIChhZGRfYWdhaW4oc2IsICZjLT5hYmJyZXZfcGFyZW50X2hhc2hlcykpCisJCQlyZXR1cm4gMTsKKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQkJaWYgKHAgIT0gY29tbWl0LT5wYXJlbnRzKQorCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGZpbmRfdW5pcXVlX2FiYnJldigKKwkJCQkJcC0+aXRlbS0+b2JqZWN0LnNoYTEsCisJCQkJCWMtPnByZXR0eV9jdHgtPmFiYnJldikpOworCQl9CisJCWMtPmFiYnJldl9wYXJlbnRfaGFzaGVzLmxlbiA9IHNiLT5sZW4gLQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5hYmJyZXZfcGFyZW50X2hhc2hlcy5vZmY7CisJCXJldHVybiAxOworCWNhc2UgJ20nOgkJLyogbGVmdC9yaWdodC9ib3R0b20gKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgZ2V0X3JldmlzaW9uX21hcmsoTlVMTCwgY29tbWl0KSk7CisJCXJldHVybiAxOworCWNhc2UgJ2QnOgorCQlmb3JtYXRfZGVjb3JhdGlvbihzYiwgY29tbWl0KTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnZyc6CQkvKiByZWZsb2cgaW5mbyAqLworCQlzd2l0Y2gocGxhY2Vob2xkZXJbMV0pIHsKKwkJY2FzZSAnZCc6CS8qIHJlZmxvZyBzZWxlY3RvciAqLworCQljYXNlICdEJzoKKwkJCWlmIChjLT5wcmV0dHlfY3R4LT5yZWZsb2dfaW5mbykKKwkJCQlnZXRfcmVmbG9nX3NlbGVjdG9yKHNiLAorCQkJCQkJICAgIGMtPnByZXR0eV9jdHgtPnJlZmxvZ19pbmZvLAorCQkJCQkJICAgIGMtPnByZXR0eV9jdHgtPmRhdGVfbW9kZSwKKwkJCQkJCSAgICBjLT5wcmV0dHlfY3R4LT5kYXRlX21vZGVfZXhwbGljaXQsCisJCQkJCQkgICAgKHBsYWNlaG9sZGVyWzFdID09ICdkJykpOworCQkJcmV0dXJuIDI7CisJCWNhc2UgJ3MnOgkvKiByZWZsb2cgbWVzc2FnZSAqLworCQkJaWYgKGMtPnByZXR0eV9jdHgtPnJlZmxvZ19pbmZvKQorCQkJCWdldF9yZWZsb2dfbWVzc2FnZShzYiwgYy0+cHJldHR5X2N0eC0+cmVmbG9nX2luZm8pOworCQkJcmV0dXJuIDI7CisJCWNhc2UgJ24nOgorCQljYXNlICdOJzoKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ0UnOgorCQkJcmV0dXJuIGZvcm1hdF9yZWZsb2dfcGVyc29uKHNiLAorCQkJCQkJICAgIHBsYWNlaG9sZGVyWzFdLAorCQkJCQkJICAgIGMtPnByZXR0eV9jdHgtPnJlZmxvZ19pbmZvLAorCQkJCQkJICAgIGMtPnByZXR0eV9jdHgtPmRhdGVfbW9kZSk7CisJCX0KKwkJcmV0dXJuIDA7CS8qIHVua25vd24gJWcgcGxhY2Vob2xkZXIgKi8KKwljYXNlICdOJzoKKwkJaWYgKGMtPnByZXR0eV9jdHgtPnNob3dfbm90ZXMpIHsKKwkJCWZvcm1hdF9kaXNwbGF5X25vdGVzKGNvbW1pdC0+b2JqZWN0LnNoYTEsIHNiLAorCQkJCSAgICBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpLCAwKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChwbGFjZWhvbGRlclswXSA9PSAnRycpIHsKKwkJaWYgKCFjLT5jb21taXRfc2lnbmF0dXJlX3BhcnNlZCkKKwkJCXBhcnNlX2NvbW1pdF9zaWduYXR1cmUoYyk7CisJCXN3aXRjaCAocGxhY2Vob2xkZXJbMV0pIHsKKwkJY2FzZSAnRyc6CisJCQlpZiAoYy0+c2lnbmF0dXJlLmdwZ19vdXRwdXQpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgYy0+c2lnbmF0dXJlLmdwZ19vdXRwdXQpOworCQkJYnJlYWs7CisJCWNhc2UgJz8nOgorCQkJc3dpdGNoIChjLT5zaWduYXR1cmUuZ29vZF9iYWQpIHsKKwkJCWNhc2UgJ0cnOgorCQkJY2FzZSAnQic6CisJCQkJc3RyYnVmX2FkZGNoKHNiLCBjLT5zaWduYXR1cmUuZ29vZF9iYWQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1MnOgorCQkJaWYgKGMtPnNpZ25hdHVyZS5zaWduZXIpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgYy0+c2lnbmF0dXJlLnNpZ25lcik7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMjsKKwl9CisKKworCS8qIEZvciB0aGUgcmVzdCB3ZSBoYXZlIHRvIHBhcnNlIHRoZSBjb21taXQgaGVhZGVyLiAqLworCWlmICghYy0+Y29tbWl0X2hlYWRlcl9wYXJzZWQpCisJCXBhcnNlX2NvbW1pdF9oZWFkZXIoYyk7CisKKwlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CisJY2FzZSAnYSc6CS8qIGF1dGhvciAuLi4gKi8KKwkJcmV0dXJuIGZvcm1hdF9wZXJzb25fcGFydChzYiwgcGxhY2Vob2xkZXJbMV0sCisJCQkJICAgbXNnICsgYy0+YXV0aG9yLm9mZiwgYy0+YXV0aG9yLmxlbiwKKwkJCQkgICBjLT5wcmV0dHlfY3R4LT5kYXRlX21vZGUpOworCWNhc2UgJ2MnOgkvKiBjb21taXR0ZXIgLi4uICovCisJCXJldHVybiBmb3JtYXRfcGVyc29uX3BhcnQoc2IsIHBsYWNlaG9sZGVyWzFdLAorCQkJCSAgIG1zZyArIGMtPmNvbW1pdHRlci5vZmYsIGMtPmNvbW1pdHRlci5sZW4sCisJCQkJICAgYy0+cHJldHR5X2N0eC0+ZGF0ZV9tb2RlKTsKKwljYXNlICdlJzoJLyogZW5jb2RpbmcgKi8KKwkJc3RyYnVmX2FkZChzYiwgbXNnICsgYy0+ZW5jb2Rpbmcub2ZmLCBjLT5lbmNvZGluZy5sZW4pOworCQlyZXR1cm4gMTsKKwljYXNlICdCJzoJLyogcmF3IGJvZHkgKi8KKwkJLyogbWVzc2FnZV9vZmYgaXMgYWx3YXlzIGxlZnQgYXQgdGhlIGluaXRpYWwgbmV3bGluZSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBtc2cgKyBjLT5tZXNzYWdlX29mZiArIDEpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBOb3cgd2UgbmVlZCB0byBwYXJzZSB0aGUgY29tbWl0IG1lc3NhZ2UuICovCisJaWYgKCFjLT5jb21taXRfbWVzc2FnZV9wYXJzZWQpCisJCXBhcnNlX2NvbW1pdF9tZXNzYWdlKGMpOworCisJc3dpdGNoIChwbGFjZWhvbGRlclswXSkgeworCWNhc2UgJ3MnOgkvKiBzdWJqZWN0ICovCisJCWZvcm1hdF9zdWJqZWN0KHNiLCBtc2cgKyBjLT5zdWJqZWN0X29mZiwgIiAiKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnZic6CS8qIHNhbml0aXplZCBzdWJqZWN0ICovCisJCWZvcm1hdF9zYW5pdGl6ZWRfc3ViamVjdChzYiwgbXNnICsgYy0+c3ViamVjdF9vZmYpOworCQlyZXR1cm4gMTsKKwljYXNlICdiJzoJLyogYm9keSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBtc2cgKyBjLT5ib2R5X29mZik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsJLyogdW5rbm93biBwbGFjZWhvbGRlciAqLworfQorCitzdGF0aWMgc2l6ZV90IGZvcm1hdF9jb21taXRfaXRlbShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsCisJCQkJIHZvaWQgKmNvbnRleHQpCit7CisJaW50IGNvbnN1bWVkOworCXNpemVfdCBvcmlnX2xlbjsKKwllbnVtIHsKKwkJTk9fTUFHSUMsCisJCUFERF9MRl9CRUZPUkVfTk9OX0VNUFRZLAorCQlERUxfTEZfQkVGT1JFX0VNUFRZLAorCQlBRERfU1BfQkVGT1JFX05PTl9FTVBUWQorCX0gbWFnaWMgPSBOT19NQUdJQzsKKworCXN3aXRjaCAocGxhY2Vob2xkZXJbMF0pIHsKKwljYXNlICctJzoKKwkJbWFnaWMgPSBERUxfTEZfQkVGT1JFX0VNUFRZOworCQlicmVhazsKKwljYXNlICcrJzoKKwkJbWFnaWMgPSBBRERfTEZfQkVGT1JFX05PTl9FTVBUWTsKKwkJYnJlYWs7CisJY2FzZSAnICc6CisJCW1hZ2ljID0gQUREX1NQX0JFRk9SRV9OT05fRU1QVFk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAobWFnaWMgIT0gTk9fTUFHSUMpCisJCXBsYWNlaG9sZGVyKys7CisKKwlvcmlnX2xlbiA9IHNiLT5sZW47CisJY29uc3VtZWQgPSBmb3JtYXRfY29tbWl0X29uZShzYiwgcGxhY2Vob2xkZXIsIGNvbnRleHQpOworCWlmIChtYWdpYyA9PSBOT19NQUdJQykKKwkJcmV0dXJuIGNvbnN1bWVkOworCisJaWYgKChvcmlnX2xlbiA9PSBzYi0+bGVuKSAmJiBtYWdpYyA9PSBERUxfTEZfQkVGT1JFX0VNUFRZKSB7CisJCXdoaWxlIChzYi0+bGVuICYmIHNiLT5idWZbc2ItPmxlbiAtIDFdID09ICdcbicpCisJCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuIC0gMSk7CisJfSBlbHNlIGlmIChvcmlnX2xlbiAhPSBzYi0+bGVuKSB7CisJCWlmIChtYWdpYyA9PSBBRERfTEZfQkVGT1JFX05PTl9FTVBUWSkKKwkJCXN0cmJ1Zl9pbnNlcnQoc2IsIG9yaWdfbGVuLCAiXG4iLCAxKTsKKwkJZWxzZSBpZiAobWFnaWMgPT0gQUREX1NQX0JFRk9SRV9OT05fRU1QVFkpCisJCQlzdHJidWZfaW5zZXJ0KHNiLCBvcmlnX2xlbiwgIiAiLCAxKTsKKwl9CisJcmV0dXJuIGNvbnN1bWVkICsgMTsKK30KKworc3RhdGljIHNpemVfdCB1c2VyZm9ybWF0X3dhbnRfaXRlbShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsCisJCQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgdXNlcmZvcm1hdF93YW50ICp3ID0gY29udGV4dDsKKworCWlmICgqcGxhY2Vob2xkZXIgPT0gJysnIHx8ICpwbGFjZWhvbGRlciA9PSAnLScgfHwgKnBsYWNlaG9sZGVyID09ICcgJykKKwkJcGxhY2Vob2xkZXIrKzsKKworCXN3aXRjaCAoKnBsYWNlaG9sZGVyKSB7CisJY2FzZSAnTic6CisJCXctPm5vdGVzID0gMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHVzZXJmb3JtYXRfZmluZF9yZXF1aXJlbWVudHMoY29uc3QgY2hhciAqZm10LCBzdHJ1Y3QgdXNlcmZvcm1hdF93YW50ICp3KQoreworCXN0cnVjdCBzdHJidWYgZHVtbXkgPSBTVFJCVUZfSU5JVDsKKworCWlmICghZm10KSB7CisJCWlmICghdXNlcl9mb3JtYXQpCisJCQlyZXR1cm47CisJCWZtdCA9IHVzZXJfZm9ybWF0OworCX0KKwlzdHJidWZfZXhwYW5kKCZkdW1teSwgZm10LCB1c2VyZm9ybWF0X3dhbnRfaXRlbSwgdyk7CisJc3RyYnVmX3JlbGVhc2UoJmR1bW15KTsKK30KKwordm9pZCBmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgY29uc3QgY2hhciAqZm9ybWF0LCBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHJldHR5X2N0eCkKK3sKKwlzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0IGNvbnRleHQ7CisJc3RhdGljIGNvbnN0IGNoYXIgdXRmOFtdID0gIlVURi04IjsKKwljb25zdCBjaGFyICpvdXRwdXRfZW5jID0gcHJldHR5X2N0eC0+b3V0cHV0X2VuY29kaW5nOworCisJbWVtc2V0KCZjb250ZXh0LCAwLCBzaXplb2YoY29udGV4dCkpOworCWNvbnRleHQuY29tbWl0ID0gY29tbWl0OworCWNvbnRleHQucHJldHR5X2N0eCA9IHByZXR0eV9jdHg7CisJY29udGV4dC53cmFwX3N0YXJ0ID0gc2ItPmxlbjsKKwljb250ZXh0Lm1lc3NhZ2UgPSBjb21taXQtPmJ1ZmZlcjsKKwlpZiAob3V0cHV0X2VuYykgeworCQljaGFyICplbmMgPSBnZXRfaGVhZGVyKGNvbW1pdCwgImVuY29kaW5nIik7CisJCWlmIChzdHJjbXAoZW5jID8gZW5jIDogdXRmOCwgb3V0cHV0X2VuYykpIHsKKwkJCWNvbnRleHQubWVzc2FnZSA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIG91dHB1dF9lbmMpOworCQkJaWYgKCFjb250ZXh0Lm1lc3NhZ2UpCisJCQkJY29udGV4dC5tZXNzYWdlID0gY29tbWl0LT5idWZmZXI7CisJCX0KKwkJZnJlZShlbmMpOworCX0KKworCXN0cmJ1Zl9leHBhbmQoc2IsIGZvcm1hdCwgZm9ybWF0X2NvbW1pdF9pdGVtLCAmY29udGV4dCk7CisJcmV3cmFwX21lc3NhZ2VfdGFpbChzYiwgJmNvbnRleHQsIDAsIDAsIDApOworCisJaWYgKGNvbnRleHQubWVzc2FnZSAhPSBjb21taXQtPmJ1ZmZlcikKKwkJZnJlZShjb250ZXh0Lm1lc3NhZ2UpOworCWZyZWUoY29udGV4dC5zaWduYXR1cmUuZ3BnX291dHB1dCk7CisJZnJlZShjb250ZXh0LnNpZ25hdHVyZS5zaWduZXIpOworfQorCitzdGF0aWMgdm9pZCBwcF9oZWFkZXIoY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJICAgICAgY29uc3QgY2hhciAqKm1zZ19wLAorCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgcGFyZW50c19zaG93biA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKmxpbmUgPSAqbXNnX3A7CisJCWludCBsaW5lbGVuID0gZ2V0X29uZV9saW5lKCptc2dfcCk7CisKKwkJaWYgKCFsaW5lbGVuKQorCQkJcmV0dXJuOworCQkqbXNnX3AgKz0gbGluZWxlbjsKKworCQlpZiAobGluZWxlbiA9PSAxKQorCQkJLyogRW5kIG9mIGhlYWRlciAqLworCQkJcmV0dXJuOworCisJCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX1JBVykgeworCQkJc3RyYnVmX2FkZChzYiwgbGluZSwgbGluZWxlbik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghbWVtY21wKGxpbmUsICJwYXJlbnQgIiwgNykpIHsKKwkJCWlmIChsaW5lbGVuICE9IDQ4KQorCQkJCWRpZSgiYmFkIHBhcmVudCBsaW5lIGluIGNvbW1pdCIpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXBhcmVudHNfc2hvd24pIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCQkJaW50IG51bTsKKwkJCWZvciAocGFyZW50ID0gY29tbWl0LT5wYXJlbnRzLCBudW0gPSAwOworCQkJICAgICBwYXJlbnQ7CisJCQkgICAgIHBhcmVudCA9IHBhcmVudC0+bmV4dCwgbnVtKyspCisJCQkJOworCQkJLyogd2l0aCBlbm91Z2ggc2xvcCAqLworCQkJc3RyYnVmX2dyb3coc2IsIG51bSAqIDUwICsgMjApOworCQkJYWRkX21lcmdlX2luZm8ocHAsIHNiLCBjb21taXQpOworCQkJcGFyZW50c19zaG93biA9IDE7CisJCX0KKworCQkvKgorCQkgKiBNRURJVU0gPT0gREVGQVVMVCBzaG93cyBvbmx5IGF1dGhvciB3aXRoIGRhdGVzLgorCQkgKiBGVUxMIHNob3dzIGJvdGggYXV0aG9ycyBidXQgbm90IGRhdGVzLgorCQkgKiBGVUxMRVIgc2hvd3MgYm90aCBhdXRob3JzIGFuZCBkYXRlcy4KKwkJICovCisJCWlmICghbWVtY21wKGxpbmUsICJhdXRob3IgIiwgNykpIHsKKwkJCXN0cmJ1Zl9ncm93KHNiLCBsaW5lbGVuICsgODApOworCQkJcHBfdXNlcl9pbmZvKHBwLCAiQXV0aG9yIiwgc2IsIGxpbmUgKyA3LCBlbmNvZGluZyk7CisJCX0KKwkJaWYgKCFtZW1jbXAobGluZSwgImNvbW1pdHRlciAiLCAxMCkgJiYKKwkJICAgIChwcC0+Zm10ID09IENNSVRfRk1UX0ZVTEwgfHwgcHAtPmZtdCA9PSBDTUlUX0ZNVF9GVUxMRVIpKSB7CisJCQlzdHJidWZfZ3JvdyhzYiwgbGluZWxlbiArIDgwKTsKKwkJCXBwX3VzZXJfaW5mbyhwcCwgIkNvbW1pdCIsIHNiLCBsaW5lICsgMTAsIGVuY29kaW5nKTsKKwkJfQorCX0KK30KKwordm9pZCBwcF90aXRsZV9saW5lKGNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCisJCSAgIGNvbnN0IGNoYXIgKiptc2dfcCwKKwkJICAgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCSAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorCQkgICBpbnQgbmVlZF84Yml0X2N0ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHRpdGxlOworCisJc3RyYnVmX2luaXQoJnRpdGxlLCA4MCk7CisJKm1zZ19wID0gZm9ybWF0X3N1YmplY3QoJnRpdGxlLCAqbXNnX3AsCisJCQkJcHAtPnByZXNlcnZlX3N1YmplY3QgPyAiXG4iIDogIiAiKTsKKworCXN0cmJ1Zl9ncm93KHNiLCB0aXRsZS5sZW4gKyAxMDI0KTsKKwlpZiAocHAtPnN1YmplY3QpIHsKKwkJc3RyYnVmX2FkZHN0cihzYiwgcHAtPnN1YmplY3QpOworCQlhZGRfcmZjMjA0NyhzYiwgdGl0bGUuYnVmLCB0aXRsZS5sZW4sIGVuY29kaW5nKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkYnVmKHNiLCAmdGl0bGUpOworCX0KKwlzdHJidWZfYWRkY2goc2IsICdcbicpOworCisJaWYgKG5lZWRfOGJpdF9jdGUgPiAwKSB7CisJCWNvbnN0IGNoYXIgKmhlYWRlcl9mbXQgPQorCQkJIk1JTUUtVmVyc2lvbjogMS4wXG4iCisJCQkiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSVzXG4iCisJCQkiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIjsKKwkJc3RyYnVmX2FkZGYoc2IsIGhlYWRlcl9mbXQsIGVuY29kaW5nKTsKKwl9CisJaWYgKHBwLT5hZnRlcl9zdWJqZWN0KSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHBwLT5hZnRlcl9zdWJqZWN0KTsKKwl9CisJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfRU1BSUwpIHsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnRpdGxlKTsKK30KKwordm9pZCBwcF9yZW1haW5kZXIoY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICBjb25zdCBjaGFyICoqbXNnX3AsCisJCSAgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCSAgaW50IGluZGVudCkKK3sKKwlpbnQgZmlyc3QgPSAxOworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqbGluZSA9ICptc2dfcDsKKwkJaW50IGxpbmVsZW4gPSBnZXRfb25lX2xpbmUobGluZSk7CisJCSptc2dfcCArPSBsaW5lbGVuOworCisJCWlmICghbGluZWxlbikKKwkJCWJyZWFrOworCisJCWlmIChpc19lbXB0eV9saW5lKGxpbmUsICZsaW5lbGVuKSkgeworCQkJaWYgKGZpcnN0KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfU0hPUlQpCisJCQkJYnJlYWs7CisJCX0KKwkJZmlyc3QgPSAwOworCisJCXN0cmJ1Zl9ncm93KHNiLCBsaW5lbGVuICsgaW5kZW50ICsgMjApOworCQlpZiAoaW5kZW50KSB7CisJCQltZW1zZXQoc2ItPmJ1ZiArIHNiLT5sZW4sICcgJywgaW5kZW50KTsKKwkJCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gKyBpbmRlbnQpOworCQl9CisJCXN0cmJ1Zl9hZGQoc2IsIGxpbmUsIGxpbmVsZW4pOworCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCX0KK30KKworY2hhciAqcmVlbmNvZGVfY29tbWl0X21lc3NhZ2UoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICoqZW5jb2RpbmdfcCkKK3sKKwljb25zdCBjaGFyICplbmNvZGluZzsKKworCWVuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKwlpZiAoZW5jb2RpbmdfcCkKKwkJKmVuY29kaW5nX3AgPSBlbmNvZGluZzsKKwlyZXR1cm4gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgZW5jb2RpbmcpOworfQorCit2b2lkIHByZXR0eV9wcmludF9jb21taXQoY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJCSBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJdW5zaWduZWQgbG9uZyBiZWdpbm5pbmdfb2ZfYm9keTsKKwlpbnQgaW5kZW50ID0gNDsKKwljb25zdCBjaGFyICptc2cgPSBjb21taXQtPmJ1ZmZlcjsKKwljaGFyICpyZWVuY29kZWQ7CisJY29uc3QgY2hhciAqZW5jb2Rpbmc7CisJaW50IG5lZWRfOGJpdF9jdGUgPSBwcC0+bmVlZF84Yml0X2N0ZTsKKworCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX1VTRVJGT1JNQVQpIHsKKwkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgdXNlcl9mb3JtYXQsIHNiLCBwcCk7CisJCXJldHVybjsKKwl9CisKKwlyZWVuY29kZWQgPSByZWVuY29kZV9jb21taXRfbWVzc2FnZShjb21taXQsICZlbmNvZGluZyk7CisJaWYgKHJlZW5jb2RlZCkgeworCQltc2cgPSByZWVuY29kZWQ7CisJfQorCisJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfT05FTElORSB8fCBwcC0+Zm10ID09IENNSVRfRk1UX0VNQUlMKQorCQlpbmRlbnQgPSAwOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGNoZWNrIGFuZCBlbWl0IENvbnRlbnQtdHlwZTogdG8gbWFyayBpdAorCSAqIGFzIDgtYml0IGlmIHdlIGhhdmVuJ3QgZG9uZSBzby4KKwkgKi8KKwlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCAmJiBuZWVkXzhiaXRfY3RlID09IDApIHsKKwkJaW50IGksIGNoLCBpbl9ib2R5OworCisJCWZvciAoaW5fYm9keSA9IGkgPSAwOyAoY2ggPSBtc2dbaV0pOyBpKyspIHsKKwkJCWlmICghaW5fYm9keSkgeworCQkJCS8qIGF1dGhvciBjb3VsZCBiZSBub24gNy1iaXQgQVNDSUkgYnV0CisJCQkJICogdGhlIGxvZyBtYXkgYmUgc287IHNraXAgb3ZlciB0aGUKKwkJCQkgKiBoZWFkZXIgcGFydCBmaXJzdC4KKwkJCQkgKi8KKwkJCQlpZiAoY2ggPT0gJ1xuJyAmJiBtc2dbaSsxXSA9PSAnXG4nKQorCQkJCQlpbl9ib2R5ID0gMTsKKwkJCX0KKwkJCWVsc2UgaWYgKG5vbl9hc2NpaShjaCkpIHsKKwkJCQluZWVkXzhiaXRfY3RlID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXBwX2hlYWRlcihwcCwgZW5jb2RpbmcsIGNvbW1pdCwgJm1zZywgc2IpOworCWlmIChwcC0+Zm10ICE9IENNSVRfRk1UX09ORUxJTkUgJiYgIXBwLT5zdWJqZWN0KSB7CisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisJfQorCisJLyogU2tpcCBleGNlc3MgYmxhbmsgbGluZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBib2R5LCBpZiBhbnkuLi4gKi8KKwltc2cgPSBza2lwX2VtcHR5X2xpbmVzKG1zZyk7CisKKwkvKiBUaGVzZSBmb3JtYXRzIHRyZWF0IHRoZSB0aXRsZSBsaW5lIHNwZWNpYWxseS4gKi8KKwlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9PTkVMSU5FIHx8IHBwLT5mbXQgPT0gQ01JVF9GTVRfRU1BSUwpCisJCXBwX3RpdGxlX2xpbmUocHAsICZtc2csIHNiLCBlbmNvZGluZywgbmVlZF84Yml0X2N0ZSk7CisKKwliZWdpbm5pbmdfb2ZfYm9keSA9IHNiLT5sZW47CisJaWYgKHBwLT5mbXQgIT0gQ01JVF9GTVRfT05FTElORSkKKwkJcHBfcmVtYWluZGVyKHBwLCAmbXNnLCBzYiwgaW5kZW50KTsKKwlzdHJidWZfcnRyaW0oc2IpOworCisJLyogTWFrZSBzdXJlIHRoZXJlIGlzIGFuIEVPTE4gZm9yIHRoZSBub24tb25lbGluZSBjYXNlICovCisJaWYgKHBwLT5mbXQgIT0gQ01JVF9GTVRfT05FTElORSkKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKworCS8qCisJICogVGhlIGNhbGxlciBtYXkgYXBwZW5kIGFkZGl0aW9uYWwgYm9keSB0ZXh0IGluIGUtbWFpbAorCSAqIGZvcm1hdC4gIE1ha2Ugc3VyZSB3ZSBkaWQgbm90IHN0cmlwIHRoZSBibGFuayBsaW5lCisJICogYmV0d2VlbiB0aGUgaGVhZGVyIGFuZCB0aGUgYm9keS4KKwkgKi8KKwlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCAmJiBzYi0+bGVuIDw9IGJlZ2lubmluZ19vZl9ib2R5KQorCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCisJaWYgKHBwLT5zaG93X25vdGVzKQorCQlmb3JtYXRfZGlzcGxheV9ub3Rlcyhjb21taXQtPm9iamVjdC5zaGExLCBzYiwgZW5jb2RpbmcsCisJCQkJICAgICBOT1RFU19TSE9XX0hFQURFUiB8IE5PVEVTX0lOREVOVCk7CisKKwlmcmVlKHJlZW5jb2RlZCk7Cit9CisKK3ZvaWQgcHBfY29tbWl0X2Vhc3koZW51bSBjbWl0X2ZtdCBmbXQsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJICAgIHN0cnVjdCBzdHJidWYgKnNiKQoreworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBwcCA9IHswfTsKKwlwcC5mbXQgPSBmbXQ7CisJcHJldHR5X3ByaW50X2NvbW1pdCgmcHAsIGNvbW1pdCwgc2IpOworfQpkaWZmIC0tZ2l0IGEvcHJvZ3Jlc3MuYyBiL3Byb2dyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3MWY0OQotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyZXNzLmMKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBTaW1wbGUgdGV4dC1iYXNlZCBwcm9ncmVzcyBkaXNwbGF5IG1vZHVsZSBmb3IgR0lUCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKworI2RlZmluZSBUUF9JRFhfTUFYICAgICAgOAorCitzdHJ1Y3QgdGhyb3VnaHB1dCB7CisJb2ZmX3QgY3Vycl90b3RhbDsKKwlvZmZfdCBwcmV2X3RvdGFsOworCXN0cnVjdCB0aW1ldmFsIHByZXZfdHY7CisJdW5zaWduZWQgaW50IGF2Z19ieXRlczsKKwl1bnNpZ25lZCBpbnQgYXZnX21pc2VjczsKKwl1bnNpZ25lZCBpbnQgbGFzdF9ieXRlc1tUUF9JRFhfTUFYXTsKKwl1bnNpZ25lZCBpbnQgbGFzdF9taXNlY3NbVFBfSURYX01BWF07CisJdW5zaWduZWQgaW50IGlkeDsKKwljaGFyIGRpc3BsYXlbMzJdOworfTsKKworc3RydWN0IHByb2dyZXNzIHsKKwljb25zdCBjaGFyICp0aXRsZTsKKwlpbnQgbGFzdF92YWx1ZTsKKwl1bnNpZ25lZCB0b3RhbDsKKwl1bnNpZ25lZCBsYXN0X3BlcmNlbnQ7CisJdW5zaWduZWQgZGVsYXk7CisJdW5zaWduZWQgZGVsYXllZF9wZXJjZW50X3RyZXNob2xkOworCXN0cnVjdCB0aHJvdWdocHV0ICp0aHJvdWdocHV0OworfTsKKworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBwcm9ncmVzc191cGRhdGU7CisKK3N0YXRpYyB2b2lkIHByb2dyZXNzX2ludGVydmFsKGludCBzaWdudW0pCit7CisJcHJvZ3Jlc3NfdXBkYXRlID0gMTsKK30KKworc3RhdGljIHZvaWQgc2V0X3Byb2dyZXNzX3NpZ25hbCh2b2lkKQoreworCXN0cnVjdCBzaWdhY3Rpb24gc2E7CisJc3RydWN0IGl0aW1lcnZhbCB2OworCisJcHJvZ3Jlc3NfdXBkYXRlID0gMDsKKworCW1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOworCXNhLnNhX2hhbmRsZXIgPSBwcm9ncmVzc19pbnRlcnZhbDsKKwlzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CisJc2Euc2FfZmxhZ3MgPSBTQV9SRVNUQVJUOworCXNpZ2FjdGlvbihTSUdBTFJNLCAmc2EsIE5VTEwpOworCisJdi5pdF9pbnRlcnZhbC50dl9zZWMgPSAxOworCXYuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IDA7CisJdi5pdF92YWx1ZSA9IHYuaXRfaW50ZXJ2YWw7CisJc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmdiwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX3Byb2dyZXNzX3NpZ25hbCh2b2lkKQoreworCXN0cnVjdCBpdGltZXJ2YWwgdiA9IHt7MCx9LH07CisJc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmdiwgTlVMTCk7CisJc2lnbmFsKFNJR0FMUk0sIFNJR19JR04pOworCXByb2dyZXNzX3VwZGF0ZSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzcGxheShzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLCB1bnNpZ25lZCBuLCBjb25zdCBjaGFyICpkb25lKQoreworCWNvbnN0IGNoYXIgKmVvbCwgKnRwOworCisJaWYgKHByb2dyZXNzLT5kZWxheSkgeworCQlpZiAoIXByb2dyZXNzX3VwZGF0ZSB8fCAtLXByb2dyZXNzLT5kZWxheSkKKwkJCXJldHVybiAwOworCQlpZiAocHJvZ3Jlc3MtPnRvdGFsKSB7CisJCQl1bnNpZ25lZCBwZXJjZW50ID0gbiAqIDEwMCAvIHByb2dyZXNzLT50b3RhbDsKKwkJCWlmIChwZXJjZW50ID4gcHJvZ3Jlc3MtPmRlbGF5ZWRfcGVyY2VudF90cmVzaG9sZCkgeworCQkJCS8qIGluaGliaXQgdGhpcyBwcm9ncmVzcyByZXBvcnQgZW50aXJlbHkgKi8KKwkJCQljbGVhcl9wcm9ncmVzc19zaWduYWwoKTsKKwkJCQlwcm9ncmVzcy0+ZGVsYXkgPSAtMTsKKwkJCQlwcm9ncmVzcy0+dG90YWwgPSAwOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJcHJvZ3Jlc3MtPmxhc3RfdmFsdWUgPSBuOworCXRwID0gKHByb2dyZXNzLT50aHJvdWdocHV0KSA/IHByb2dyZXNzLT50aHJvdWdocHV0LT5kaXNwbGF5IDogIiI7CisJZW9sID0gZG9uZSA/IGRvbmUgOiAiICAgXHIiOworCWlmIChwcm9ncmVzcy0+dG90YWwpIHsKKwkJdW5zaWduZWQgcGVyY2VudCA9IG4gKiAxMDAgLyBwcm9ncmVzcy0+dG90YWw7CisJCWlmIChwZXJjZW50ICE9IHByb2dyZXNzLT5sYXN0X3BlcmNlbnQgfHwgcHJvZ3Jlc3NfdXBkYXRlKSB7CisJCQlwcm9ncmVzcy0+bGFzdF9wZXJjZW50ID0gcGVyY2VudDsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6ICUzdSUlICgldS8ldSklcyVzIiwKKwkJCQlwcm9ncmVzcy0+dGl0bGUsIHBlcmNlbnQsIG4sCisJCQkJcHJvZ3Jlc3MtPnRvdGFsLCB0cCwgZW9sKTsKKwkJCWZmbHVzaChzdGRlcnIpOworCQkJcHJvZ3Jlc3NfdXBkYXRlID0gMDsKKwkJCXJldHVybiAxOworCQl9CisJfSBlbHNlIGlmIChwcm9ncmVzc191cGRhdGUpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogJXUlcyVzIiwgcHJvZ3Jlc3MtPnRpdGxlLCBuLCB0cCwgZW9sKTsKKwkJZmZsdXNoKHN0ZGVycik7CisJCXByb2dyZXNzX3VwZGF0ZSA9IDA7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0aHJvdWdocHV0X3N0cmluZyhzdHJ1Y3QgdGhyb3VnaHB1dCAqdHAsIG9mZl90IHRvdGFsLAorCQkJICAgICAgdW5zaWduZWQgaW50IHJhdGUpCit7CisJaW50IGwgPSBzaXplb2YodHAtPmRpc3BsYXkpOworCWlmICh0b3RhbCA+IDEgPDwgMzApIHsKKwkJbCAtPSBzbnByaW50Zih0cC0+ZGlzcGxheSwgbCwgIiwgJXUuJTIuMnUgR2lCIiwKKwkJCSAgICAgIChpbnQpKHRvdGFsID4+IDMwKSwKKwkJCSAgICAgIChpbnQpKHRvdGFsICYgKCgxIDw8IDMwKSAtIDEpKSAvIDEwNzM3NDE5KTsKKwl9IGVsc2UgaWYgKHRvdGFsID4gMSA8PCAyMCkgeworCQlpbnQgeCA9IHRvdGFsICsgNTI0MzsgIC8qIGZvciByb3VuZGluZyAqLworCQlsIC09IHNucHJpbnRmKHRwLT5kaXNwbGF5LCBsLCAiLCAldS4lMi4ydSBNaUIiLAorCQkJICAgICAgeCA+PiAyMCwgKCh4ICYgKCgxIDw8IDIwKSAtIDEpKSAqIDEwMCkgPj4gMjApOworCX0gZWxzZSBpZiAodG90YWwgPiAxIDw8IDEwKSB7CisJCWludCB4ID0gdG90YWwgKyA1OyAgLyogZm9yIHJvdW5kaW5nICovCisJCWwgLT0gc25wcmludGYodHAtPmRpc3BsYXksIGwsICIsICV1LiUyLjJ1IEtpQiIsCisJCQkgICAgICB4ID4+IDEwLCAoKHggJiAoKDEgPDwgMTApIC0gMSkpICogMTAwKSA+PiAxMCk7CisJfSBlbHNlIHsKKwkJbCAtPSBzbnByaW50Zih0cC0+ZGlzcGxheSwgbCwgIiwgJXUgYnl0ZXMiLCAoaW50KXRvdGFsKTsKKwl9CisKKwlpZiAocmF0ZSA+IDEgPDwgMTApIHsKKwkJaW50IHggPSByYXRlICsgNTsgIC8qIGZvciByb3VuZGluZyAqLworCQlzbnByaW50Zih0cC0+ZGlzcGxheSArIHNpemVvZih0cC0+ZGlzcGxheSkgLSBsLCBsLAorCQkJICIgfCAldS4lMi4ydSBNaUIvcyIsCisJCQkgeCA+PiAxMCwgKCh4ICYgKCgxIDw8IDEwKSAtIDEpKSAqIDEwMCkgPj4gMTApOworCX0gZWxzZSBpZiAocmF0ZSkKKwkJc25wcmludGYodHAtPmRpc3BsYXkgKyBzaXplb2YodHAtPmRpc3BsYXkpIC0gbCwgbCwKKwkJCSAiIHwgJXUgS2lCL3MiLCByYXRlKTsKK30KKwordm9pZCBkaXNwbGF5X3Rocm91Z2hwdXQoc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgb2ZmX3QgdG90YWwpCit7CisJc3RydWN0IHRocm91Z2hwdXQgKnRwOworCXN0cnVjdCB0aW1ldmFsIHR2OworCXVuc2lnbmVkIGludCBtaXNlY3M7CisKKwlpZiAoIXByb2dyZXNzKQorCQlyZXR1cm47CisJdHAgPSBwcm9ncmVzcy0+dGhyb3VnaHB1dDsKKworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCisJaWYgKCF0cCkgeworCQlwcm9ncmVzcy0+dGhyb3VnaHB1dCA9IHRwID0gY2FsbG9jKDEsIHNpemVvZigqdHApKTsKKwkJaWYgKHRwKSB7CisJCQl0cC0+cHJldl90b3RhbCA9IHRwLT5jdXJyX3RvdGFsID0gdG90YWw7CisJCQl0cC0+cHJldl90diA9IHR2OworCQl9CisJCXJldHVybjsKKwl9CisJdHAtPmN1cnJfdG90YWwgPSB0b3RhbDsKKworCS8qCisJICogV2UgaGF2ZSB4ID0gYnl0ZXMgYW5kIHkgPSBtaWNyb3NlY3MuICBXZSB3YW50IHogPSBLaUIvczoKKwkgKgorCSAqCXogPSAoeCAvIDEwMjQpIC8gKHkgLyAxMDAwMDAwKQorCSAqCXogPSB4IC8geSAqIDEwMDAwMDAgLyAxMDI0CisJICoJeiA9IHggLyAoeSAqIDEwMjQgLyAxMDAwMDAwKQorCSAqCXogPSB4IC8geScKKwkgKgorCSAqIFRvIHNpbXBsaWZ5IHRoaW5ncyB3ZSdsbCBrZWVwIHRyYWNrIG9mIG1pc2Vjcywgb3IgMTAyNHRoIG9mIGEgc2VjCisJICogb2J0YWluZWQgd2l0aDoKKwkgKgorCSAqCXknID0geSAqIDEwMjQgLyAxMDAwMDAwCisJICoJeScgPSB5IC8gKDEwMDAwMDAgLyAxMDI0KQorCSAqCXknID0geSAvIDk3NworCSAqLworCW1pc2VjcyA9ICh0di50dl9zZWMgLSB0cC0+cHJldl90di50dl9zZWMpICogMTAyNDsKKwltaXNlY3MgKz0gKGludCkodHYudHZfdXNlYyAtIHRwLT5wcmV2X3R2LnR2X3VzZWMpIC8gOTc3OworCisJaWYgKG1pc2VjcyA+IDUxMikgeworCQl1bnNpZ25lZCBpbnQgY291bnQsIHJhdGU7CisKKwkJY291bnQgPSB0b3RhbCAtIHRwLT5wcmV2X3RvdGFsOworCQl0cC0+cHJldl90b3RhbCA9IHRvdGFsOworCQl0cC0+cHJldl90diA9IHR2OworCQl0cC0+YXZnX2J5dGVzICs9IGNvdW50OworCQl0cC0+YXZnX21pc2VjcyArPSBtaXNlY3M7CisJCXJhdGUgPSB0cC0+YXZnX2J5dGVzIC8gdHAtPmF2Z19taXNlY3M7CisJCXRwLT5hdmdfYnl0ZXMgLT0gdHAtPmxhc3RfYnl0ZXNbdHAtPmlkeF07CisJCXRwLT5hdmdfbWlzZWNzIC09IHRwLT5sYXN0X21pc2Vjc1t0cC0+aWR4XTsKKwkJdHAtPmxhc3RfYnl0ZXNbdHAtPmlkeF0gPSBjb3VudDsKKwkJdHAtPmxhc3RfbWlzZWNzW3RwLT5pZHhdID0gbWlzZWNzOworCQl0cC0+aWR4ID0gKHRwLT5pZHggKyAxKSAlIFRQX0lEWF9NQVg7CisKKwkJdGhyb3VnaHB1dF9zdHJpbmcodHAsIHRvdGFsLCByYXRlKTsKKwkJaWYgKHByb2dyZXNzLT5sYXN0X3ZhbHVlICE9IC0xICYmIHByb2dyZXNzX3VwZGF0ZSkKKwkJCWRpc3BsYXkocHJvZ3Jlc3MsIHByb2dyZXNzLT5sYXN0X3ZhbHVlLCBOVUxMKTsKKwl9Cit9CisKK2ludCBkaXNwbGF5X3Byb2dyZXNzKHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIHVuc2lnbmVkIG4pCit7CisJcmV0dXJuIHByb2dyZXNzID8gZGlzcGxheShwcm9ncmVzcywgbiwgTlVMTCkgOiAwOworfQorCitzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3Byb2dyZXNzX2RlbGF5KGNvbnN0IGNoYXIgKnRpdGxlLCB1bnNpZ25lZCB0b3RhbCwKKwkJCQkgICAgICAgdW5zaWduZWQgcGVyY2VudF90cmVzaG9sZCwgdW5zaWduZWQgZGVsYXkpCit7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IG1hbGxvYyhzaXplb2YoKnByb2dyZXNzKSk7CisJaWYgKCFwcm9ncmVzcykgeworCQkvKiB1bmxpa2VseSwgYnV0IGhlcmUncyBhIGdvb2QgZmFsbGJhY2sgKi8KKwkJZnByaW50ZihzdGRlcnIsICIlcy4uLlxuIiwgdGl0bGUpOworCQlmZmx1c2goc3RkZXJyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXByb2dyZXNzLT50aXRsZSA9IHRpdGxlOworCXByb2dyZXNzLT50b3RhbCA9IHRvdGFsOworCXByb2dyZXNzLT5sYXN0X3ZhbHVlID0gLTE7CisJcHJvZ3Jlc3MtPmxhc3RfcGVyY2VudCA9IC0xOworCXByb2dyZXNzLT5kZWxheWVkX3BlcmNlbnRfdHJlc2hvbGQgPSBwZXJjZW50X3RyZXNob2xkOworCXByb2dyZXNzLT5kZWxheSA9IGRlbGF5OworCXByb2dyZXNzLT50aHJvdWdocHV0ID0gTlVMTDsKKwlzZXRfcHJvZ3Jlc3Nfc2lnbmFsKCk7CisJcmV0dXJuIHByb2dyZXNzOworfQorCitzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3Byb2dyZXNzKGNvbnN0IGNoYXIgKnRpdGxlLCB1bnNpZ25lZCB0b3RhbCkKK3sKKwlyZXR1cm4gc3RhcnRfcHJvZ3Jlc3NfZGVsYXkodGl0bGUsIHRvdGFsLCAwLCAwKTsKK30KKwordm9pZCBzdG9wX3Byb2dyZXNzKHN0cnVjdCBwcm9ncmVzcyAqKnBfcHJvZ3Jlc3MpCit7CisJc3RvcF9wcm9ncmVzc19tc2cocF9wcm9ncmVzcywgImRvbmUiKTsKK30KKwordm9pZCBzdG9wX3Byb2dyZXNzX21zZyhzdHJ1Y3QgcHJvZ3Jlc3MgKipwX3Byb2dyZXNzLCBjb25zdCBjaGFyICptc2cpCit7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9ICpwX3Byb2dyZXNzOworCWlmICghcHJvZ3Jlc3MpCisJCXJldHVybjsKKwkqcF9wcm9ncmVzcyA9IE5VTEw7CisJaWYgKHByb2dyZXNzLT5sYXN0X3ZhbHVlICE9IC0xKSB7CisJCS8qIEZvcmNlIHRoZSBsYXN0IHVwZGF0ZSAqLworCQljaGFyIGJ1ZlsxMjhdLCAqYnVmcDsKKwkJc2l6ZV90IGxlbiA9IHN0cmxlbihtc2cpICsgNTsKKwkJc3RydWN0IHRocm91Z2hwdXQgKnRwID0gcHJvZ3Jlc3MtPnRocm91Z2hwdXQ7CisKKwkJYnVmcCA9IChsZW4gPCBzaXplb2YoYnVmKSkgPyBidWYgOiB4bWFsbG9jKGxlbiArIDEpOworCQlpZiAodHApIHsKKwkJCXVuc2lnbmVkIGludCByYXRlID0gIXRwLT5hdmdfbWlzZWNzID8gMCA6CisJCQkJCXRwLT5hdmdfYnl0ZXMgLyB0cC0+YXZnX21pc2VjczsKKwkJCXRocm91Z2hwdXRfc3RyaW5nKHRwLCB0cC0+Y3Vycl90b3RhbCwgcmF0ZSk7CisJCX0KKwkJcHJvZ3Jlc3NfdXBkYXRlID0gMTsKKwkJc3ByaW50ZihidWZwLCAiLCAlcy5cbiIsIG1zZyk7CisJCWRpc3BsYXkocHJvZ3Jlc3MsIHByb2dyZXNzLT5sYXN0X3ZhbHVlLCBidWZwKTsKKwkJaWYgKGJ1ZiAhPSBidWZwKQorCQkJZnJlZShidWZwKTsKKwl9CisJY2xlYXJfcHJvZ3Jlc3Nfc2lnbmFsKCk7CisJZnJlZShwcm9ncmVzcy0+dGhyb3VnaHB1dCk7CisJZnJlZShwcm9ncmVzcyk7Cit9CmRpZmYgLS1naXQgYS9wcm9ncmVzcy5oIGIvcHJvZ3Jlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTFlNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3Jlc3MuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIFBST0dSRVNTX0gKKyNkZWZpbmUgUFJPR1JFU1NfSAorCitzdHJ1Y3QgcHJvZ3Jlc3M7CisKK3ZvaWQgZGlzcGxheV90aHJvdWdocHV0KHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIG9mZl90IHRvdGFsKTsKK2ludCBkaXNwbGF5X3Byb2dyZXNzKHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIHVuc2lnbmVkIG4pOworc3RydWN0IHByb2dyZXNzICpzdGFydF9wcm9ncmVzcyhjb25zdCBjaGFyICp0aXRsZSwgdW5zaWduZWQgdG90YWwpOworc3RydWN0IHByb2dyZXNzICpzdGFydF9wcm9ncmVzc19kZWxheShjb25zdCBjaGFyICp0aXRsZSwgdW5zaWduZWQgdG90YWwsCisJCQkJICAgICAgIHVuc2lnbmVkIHBlcmNlbnRfdHJlc2hvbGQsIHVuc2lnbmVkIGRlbGF5KTsKK3ZvaWQgc3RvcF9wcm9ncmVzcyhzdHJ1Y3QgcHJvZ3Jlc3MgKipwcm9ncmVzcyk7Cit2b2lkIHN0b3BfcHJvZ3Jlc3NfbXNnKHN0cnVjdCBwcm9ncmVzcyAqKnByb2dyZXNzLCBjb25zdCBjaGFyICptc2cpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Byb21wdC5jIGIvcHJvbXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1MTgwNwotLS0gL2Rldi9udWxsCisrKyBiL3Byb21wdC5jCkBAIC0wLDAgKzEsNzIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicHJvbXB0LmgiCisjaW5jbHVkZSAiY29tcGF0L3Rlcm1pbmFsLmgiCisKK3N0YXRpYyBjaGFyICpkb19hc2twYXNzKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqcHJvbXB0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHBhc3M7CisJY29uc3QgY2hhciAqYXJnc1szXTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZXJyID0gMDsKKworCWFyZ3NbMF0gPSBjbWQ7CisJYXJnc1sxXQk9IHByb21wdDsKKwlhcmdzWzJdID0gTlVMTDsKKworCW1lbXNldCgmcGFzcywgMCwgc2l6ZW9mKHBhc3MpKTsKKwlwYXNzLmFyZ3YgPSBhcmdzOworCXBhc3Mub3V0ID0gLTE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmcGFzcykpCisJCXJldHVybiBOVUxMOworCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWZmZXIsIHBhc3Mub3V0LCAyMCkgPCAwKQorCQllcnIgPSAxOworCisJY2xvc2UocGFzcy5vdXQpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZwYXNzKSkKKwkJZXJyID0gMTsKKworCWlmIChlcnIpIHsKKwkJZXJyb3IoInVuYWJsZSB0byByZWFkIGFza3Bhc3MgcmVzcG9uc2UgZnJvbSAnJXMnIiwgY21kKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCXN0cmJ1Zl9zZXRsZW4oJmJ1ZmZlciwgc3RyY3NwbihidWZmZXIuYnVmLCAiXHJcbiIpKTsKKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWZmZXIsIE5VTEwpOworfQorCitjaGFyICpnaXRfcHJvbXB0KGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGZsYWdzKQoreworCWNoYXIgKnIgPSBOVUxMOworCisJaWYgKGZsYWdzICYgUFJPTVBUX0FTS1BBU1MpIHsKKwkJY29uc3QgY2hhciAqYXNrcGFzczsKKworCQlhc2twYXNzID0gZ2V0ZW52KCJHSVRfQVNLUEFTUyIpOworCQlpZiAoIWFza3Bhc3MpCisJCQlhc2twYXNzID0gYXNrcGFzc19wcm9ncmFtOworCQlpZiAoIWFza3Bhc3MpCisJCQlhc2twYXNzID0gZ2V0ZW52KCJTU0hfQVNLUEFTUyIpOworCQlpZiAoYXNrcGFzcyAmJiAqYXNrcGFzcykKKwkJCXIgPSBkb19hc2twYXNzKGFza3Bhc3MsIHByb21wdCk7CisJfQorCisJaWYgKCFyKQorCQlyID0gZ2l0X3Rlcm1pbmFsX3Byb21wdChwcm9tcHQsIGZsYWdzICYgUFJPTVBUX0VDSE8pOworCWlmICghcikgeworCQkvKiBwcm9tcHRzIGFscmVhZHkgY29udGFpbiAiOiAiIGF0IHRoZSBlbmQgKi8KKwkJZGllKCJjb3VsZCBub3QgcmVhZCAlcyVzIiwgcHJvbXB0LCBzdHJlcnJvcihlcnJubykpOworCX0KKwlyZXR1cm4gcjsKK30KKworY2hhciAqZ2l0X2dldHBhc3MoY29uc3QgY2hhciAqcHJvbXB0KQoreworCXJldHVybiBnaXRfcHJvbXB0KHByb21wdCwgUFJPTVBUX0FTS1BBU1MpOworfQpkaWZmIC0tZ2l0IGEvcHJvbXB0LmggYi9wcm9tcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGYzMjFhCi0tLSAvZGV2L251bGwKKysrIGIvcHJvbXB0LmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBQUk9NUFRfSAorI2RlZmluZSBQUk9NUFRfSAorCisjZGVmaW5lIFBST01QVF9BU0tQQVNTICgxPDwwKQorI2RlZmluZSBQUk9NUFRfRUNITyAgICAoMTw8MSkKKworY2hhciAqZ2l0X3Byb21wdChjb25zdCBjaGFyICpwcm9tcHQsIGludCBmbGFncyk7CitjaGFyICpnaXRfZ2V0cGFzcyhjb25zdCBjaGFyICpwcm9tcHQpOworCisjZW5kaWYgLyogUFJPTVBUX0ggKi8KZGlmZiAtLWdpdCBhL3F1b3RlLmMgYi9xdW90ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTIyOWYKLS0tIC9kZXYvbnVsbAorKysgYi9xdW90ZS5jCkBAIC0wLDAgKzEsNTM0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworaW50IHF1b3RlX3BhdGhfZnVsbHkgPSAxOworCisvKiBIZWxwIHRvIGNvcHkgdGhlIHRoaW5nIHByb3Blcmx5IHF1b3RlZCBmb3IgdGhlIHNoZWxsIHNhZmV0eS4KKyAqIGFueSBzaW5nbGUgcXVvdGUgaXMgcmVwbGFjZWQgd2l0aCAnXCcnLCBhbnkgZXhjbGFtYXRpb24gcG9pbnQKKyAqIGlzIHJlcGxhY2VkIHdpdGggJ1whJywgYW5kIHRoZSB3aG9sZSB0aGluZyBpcyBlbmNsb3NlZCBpbiBhCisgKgorICogRS5nLgorICogIG9yaWdpbmFsICAgICBzcV9xdW90ZSAgICAgcmVzdWx0CisgKiAgbmFtZSAgICAgPT0+IG5hbWUgICAgICA9PT4gJ25hbWUnCisgKiAgYSBiICAgICAgPT0+IGEgYiAgICAgICA9PT4gJ2EgYicKKyAqICBhJ2IgICAgICA9PT4gYSdcJydiICAgID09PiAnYSdcJydiJworICogIGEhYiAgICAgID09PiBhJ1whJ2IgICAgPT0+ICdhJ1whJ2InCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRfYnNfcXVvdGUoY2hhciBjKQoreworCXJldHVybiAoYyA9PSAnXCcnIHx8IGMgPT0gJyEnKTsKK30KKwordm9pZCBzcV9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisJY2hhciAqdG9fZnJlZSA9IE5VTEw7CisKKwlpZiAoZHN0LT5idWYgPT0gc3JjKQorCQl0b19mcmVlID0gc3RyYnVmX2RldGFjaChkc3QsIE5VTEwpOworCisJc3RyYnVmX2FkZGNoKGRzdCwgJ1wnJyk7CisJd2hpbGUgKCpzcmMpIHsKKwkJc2l6ZV90IGxlbiA9IHN0cmNzcG4oc3JjLCAiJyEiKTsKKwkJc3RyYnVmX2FkZChkc3QsIHNyYywgbGVuKTsKKwkJc3JjICs9IGxlbjsKKwkJd2hpbGUgKG5lZWRfYnNfcXVvdGUoKnNyYykpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoZHN0LCAiJ1xcIik7CisJCQlzdHJidWZfYWRkY2goZHN0LCAqc3JjKyspOworCQkJc3RyYnVmX2FkZGNoKGRzdCwgJ1wnJyk7CisJCX0KKwl9CisJc3RyYnVmX2FkZGNoKGRzdCwgJ1wnJyk7CisJZnJlZSh0b19mcmVlKTsKK30KKwordm9pZCBzcV9xdW90ZV9wcmludChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnNyYykKK3sKKwljaGFyIGM7CisKKwlmcHV0YygnXCcnLCBzdHJlYW0pOworCXdoaWxlICgoYyA9ICpzcmMrKykpIHsKKwkJaWYgKG5lZWRfYnNfcXVvdGUoYykpIHsKKwkJCWZwdXRzKCInXFwiLCBzdHJlYW0pOworCQkJZnB1dGMoYywgc3RyZWFtKTsKKwkJCWZwdXRjKCdcJycsIHN0cmVhbSk7CisJCX0gZWxzZSB7CisJCQlmcHV0YyhjLCBzdHJlYW0pOworCQl9CisJfQorCWZwdXRjKCdcJycsIHN0cmVhbSk7Cit9CisKK3ZvaWQgc3FfcXVvdGVfYXJndihzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIqKiBhcmd2LCBzaXplX3QgbWF4bGVuKQoreworCWludCBpOworCisJLyogQ29weSBpbnRvIGRlc3RpbmF0aW9uIGJ1ZmZlci4gKi8KKwlzdHJidWZfZ3Jvdyhkc3QsIDI1NSk7CisJZm9yIChpID0gMDsgYXJndltpXTsgKytpKSB7CisJCXN0cmJ1Zl9hZGRjaChkc3QsICcgJyk7CisJCXNxX3F1b3RlX2J1Zihkc3QsIGFyZ3ZbaV0pOworCQlpZiAobWF4bGVuICYmIGRzdC0+bGVuID4gbWF4bGVuKQorCQkJZGllKCJUb28gbWFueSBvciBsb25nIGFyZ3VtZW50cyIpOworCX0KK30KKworc3RhdGljIGNoYXIgKnNxX2RlcXVvdGVfc3RlcChjaGFyICphcmcsIGNoYXIgKipuZXh0KQoreworCWNoYXIgKmRzdCA9IGFyZzsKKwljaGFyICpzcmMgPSBhcmc7CisJY2hhciBjOworCisJaWYgKCpzcmMgIT0gJ1wnJykKKwkJcmV0dXJuIE5VTEw7CisJZm9yICg7OykgeworCQljID0gKisrc3JjOworCQlpZiAoIWMpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGMgIT0gJ1wnJykgeworCQkJKmRzdCsrID0gYzsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIFdlIHN0ZXBwZWQgb3V0IG9mIHNxICovCisJCXN3aXRjaCAoKisrc3JjKSB7CisJCWNhc2UgJ1wwJzoKKwkJCSpkc3QgPSAwOworCQkJaWYgKG5leHQpCisJCQkJKm5leHQgPSBOVUxMOworCQkJcmV0dXJuIGFyZzsKKwkJY2FzZSAnXFwnOgorCQkJYyA9ICorK3NyYzsKKwkJCWlmIChuZWVkX2JzX3F1b3RlKGMpICYmICorK3NyYyA9PSAnXCcnKSB7CisJCQkJKmRzdCsrID0gYzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJLyogRmFsbHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCWlmICghbmV4dCB8fCAhaXNzcGFjZSgqc3JjKSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWRvIHsKKwkJCQljID0gKisrc3JjOworCQkJfSB3aGlsZSAoaXNzcGFjZShjKSk7CisJCQkqZHN0ID0gMDsKKwkJCSpuZXh0ID0gc3JjOworCQkJcmV0dXJuIGFyZzsKKwkJfQorCX0KK30KKworY2hhciAqc3FfZGVxdW90ZShjaGFyICphcmcpCit7CisJcmV0dXJuIHNxX2RlcXVvdGVfc3RlcChhcmcsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHNxX2RlcXVvdGVfdG9fYXJndl9pbnRlcm5hbChjaGFyICphcmcsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKioqYXJndiwgaW50ICpuciwgaW50ICphbGxvYywKKwkJCQkgICAgICAgc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5KQoreworCWNoYXIgKm5leHQgPSBhcmc7CisKKwlpZiAoISphcmcpCisJCXJldHVybiAwOworCWRvIHsKKwkJY2hhciAqZGVxdW90ZWQgPSBzcV9kZXF1b3RlX3N0ZXAobmV4dCwgJm5leHQpOworCQlpZiAoIWRlcXVvdGVkKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYXJndikgeworCQkJQUxMT0NfR1JPVygqYXJndiwgKm5yICsgMSwgKmFsbG9jKTsKKwkJCSgqYXJndilbKCpucikrK10gPSBkZXF1b3RlZDsKKwkJfQorCQlpZiAoYXJyYXkpCisJCQlhcmd2X2FycmF5X3B1c2goYXJyYXksIGRlcXVvdGVkKTsKKwl9IHdoaWxlIChuZXh0KTsKKworCXJldHVybiAwOworfQorCitpbnQgc3FfZGVxdW90ZV90b19hcmd2KGNoYXIgKmFyZywgY29uc3QgY2hhciAqKiphcmd2LCBpbnQgKm5yLCBpbnQgKmFsbG9jKQoreworCXJldHVybiBzcV9kZXF1b3RlX3RvX2FyZ3ZfaW50ZXJuYWwoYXJnLCBhcmd2LCBuciwgYWxsb2MsIE5VTEwpOworfQorCitpbnQgc3FfZGVxdW90ZV90b19hcmd2X2FycmF5KGNoYXIgKmFyZywgc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5KQoreworCXJldHVybiBzcV9kZXF1b3RlX3RvX2FyZ3ZfaW50ZXJuYWwoYXJnLCBOVUxMLCBOVUxMLCBOVUxMLCBhcnJheSk7Cit9CisKKy8qIDEgbWVhbnM6IHF1b3RlIGFzIG9jdGFsCisgKiAwIG1lYW5zOiBxdW90ZSBhcyBvY3RhbCBpZiAocXVvdGVfcGF0aF9mdWxseSkKKyAqIC0xIG1lYW5zOiBuZXZlciBxdW90ZQorICogYzogcXVvdGUgYXMgIlxcYyIKKyAqLworI2RlZmluZSBYOCh4KSAgIHgsIHgsIHgsIHgsIHgsIHgsIHgsIHgKKyNkZWZpbmUgWDE2KHgpICBYOCh4KSwgWDgoeCkKK3N0YXRpYyBzaWduZWQgY2hhciBjb25zdCBzcV9sb29rdXBbMjU2XSA9IHsKKwkvKiAgICAgICAgICAgMCAgICAxICAgIDIgICAgMyAgICA0ICAgIDUgICAgNiAgICA3ICovCisJLyogMHgwMCAqLyAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICdhJywKKwkvKiAweDA4ICovICdiJywgJ3QnLCAnbicsICd2JywgJ2YnLCAncicsICAgMSwgICAxLAorCS8qIDB4MTAgKi8gWDE2KDEpLAorCS8qIDB4MjAgKi8gIC0xLCAgLTEsICciJywgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsCisJLyogMHgyOCAqLyBYMTYoLTEpLCBYMTYoLTEpLCBYMTYoLTEpLAorCS8qIDB4NTggKi8gIC0xLCAgLTEsICAtMSwgIC0xLCdcXCcsICAtMSwgIC0xLCAgLTEsCisJLyogMHg2MCAqLyBYMTYoLTEpLCBYOCgtMSksCisJLyogMHg3OCAqLyAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAgMSwKKwkvKiAweDgwICovIC8qIHNldCB0byAwICovCit9OworCitzdGF0aWMgaW5saW5lIGludCBzcV9tdXN0X3F1b3RlKGNoYXIgYykKK3sKKwlyZXR1cm4gc3FfbG9va3VwWyh1bnNpZ25lZCBjaGFyKWNdICsgcXVvdGVfcGF0aF9mdWxseSA+IDA7Cit9CisKKy8qIHJldHVybnMgdGhlIGxvbmdlc3QgcHJlZml4IG5vdCBuZWVkaW5nIGEgcXVvdGUgdXAgdG8gbWF4bGVuIGlmIHBvc2l0aXZlLgorICAgVGhpcyBzdG9wcyBhdCB0aGUgZmlyc3QgXDAgYmVjYXVzZSBpdCdzIG1hcmtlZCBhcyBhIGNoYXJhY3RlciBuZWVkaW5nIGFuCisgICBlc2NhcGUgKi8KK3N0YXRpYyBzaXplX3QgbmV4dF9xdW90ZV9wb3MoY29uc3QgY2hhciAqcywgc3NpemVfdCBtYXhsZW4pCit7CisJc2l6ZV90IGxlbjsKKwlpZiAobWF4bGVuIDwgMCkgeworCQlmb3IgKGxlbiA9IDA7ICFzcV9tdXN0X3F1b3RlKHNbbGVuXSk7IGxlbisrKTsKKwl9IGVsc2UgeworCQlmb3IgKGxlbiA9IDA7IGxlbiA8IG1heGxlbiAmJiAhc3FfbXVzdF9xdW90ZShzW2xlbl0pOyBsZW4rKyk7CisJfQorCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBDLXN0eWxlIG5hbWUgcXVvdGluZy4KKyAqCisgKiAoMSkgaWYgc2IgYW5kIGZwIGFyZSBib3RoIE5VTEwsIGluc3BlY3QgdGhlIGlucHV0IG5hbWUgYW5kIGNvdW50cyB0aGUKKyAqICAgICBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhcmUgbmVlZGVkIHRvIGhvbGQgY19zdHlsZSBxdW90ZWQgdmVyc2lvbiBvZiBuYW1lLAorICogICAgIGNvdW50aW5nIHRoZSBkb3VibGUgcXVvdGVzIGFyb3VuZCBpdCBidXQgbm90IHRlcm1pbmF0aW5nIE5VTCwgYW5kCisgKiAgICAgcmV0dXJucyBpdC4KKyAqICAgICBIb3dldmVyLCBpZiBuYW1lIGRvZXMgbm90IG5lZWQgY19zdHlsZSBxdW90aW5nLCBpdCByZXR1cm5zIDAuCisgKgorICogKDIpIGlmIHNiIG9yIGZwIGFyZSBub3QgTlVMTCwgaXQgZW1pdHMgdGhlIGNfc3R5bGUgcXVvdGVkIHZlcnNpb24KKyAqICAgICBvZiBuYW1lLCBlbmNsb3NlZCB3aXRoIGRvdWJsZSBxdW90ZXMgaWYgYXNrZWQgYW5kIG5lZWRlZCBvbmx5LgorICogICAgIFJldHVybiB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBpbiAoMSkuCisgKi8KK3N0YXRpYyBzaXplX3QgcXVvdGVfY19zdHlsZV9jb3VudGVkKGNvbnN0IGNoYXIgKm5hbWUsIHNzaXplX3QgbWF4bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwLCBpbnQgbm9fZHEpCit7CisjdW5kZWYgRU1JVAorI2RlZmluZSBFTUlUKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoc2IpIHN0cmJ1Zl9hZGRjaChzYiwgKGMpKTsgICAgICAgICAgXAorCQlpZiAoZnApIGZwdXRjKChjKSwgZnApOyAgICAgICAgICAgICAgICAgXAorCQljb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIEVNSVRCVUYocywgbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChzYikgc3RyYnVmX2FkZChzYiwgKHMpLCAobCkpOyAgICAgICBcCisJCWlmIChmcCkgZndyaXRlKChzKSwgKGwpLCAxLCBmcCk7ICAgICAgICBcCisJCWNvdW50ICs9IChsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSB3aGlsZSAoMCkKKworCXNpemVfdCBsZW4sIGNvdW50ID0gMDsKKwljb25zdCBjaGFyICpwID0gbmFtZTsKKworCWZvciAoOzspIHsKKwkJaW50IGNoOworCisJCWxlbiA9IG5leHRfcXVvdGVfcG9zKHAsIG1heGxlbik7CisJCWlmIChsZW4gPT0gbWF4bGVuIHx8IChtYXhsZW4gPCAwICYmICFwW2xlbl0pKQorCQkJYnJlYWs7CisKKwkJaWYgKCFub19kcSAmJiBwID09IG5hbWUpCisJCQlFTUlUKCciJyk7CisKKwkJRU1JVEJVRihwLCBsZW4pOworCQlFTUlUKCdcXCcpOworCQlwICs9IGxlbjsKKwkJY2ggPSAodW5zaWduZWQgY2hhcikqcCsrOworCQlpZiAobWF4bGVuID49IDApCisJCQltYXhsZW4gLT0gbGVuICsgMTsKKwkJaWYgKHNxX2xvb2t1cFtjaF0gPj0gJyAnKSB7CisJCQlFTUlUKHNxX2xvb2t1cFtjaF0pOworCQl9IGVsc2UgeworCQkJRU1JVCgoKGNoID4+IDYpICYgMDMpICsgJzAnKTsKKwkJCUVNSVQoKChjaCA+PiAzKSAmIDA3KSArICcwJyk7CisJCQlFTUlUKCgoY2ggPj4gMCkgJiAwNykgKyAnMCcpOworCQl9CisJfQorCisJRU1JVEJVRihwLCBsZW4pOworCWlmIChwID09IG5hbWUpICAgLyogbm8gZW5kaW5nIHF1b3RlIG5lZWRlZCAqLworCQlyZXR1cm4gMDsKKworCWlmICghbm9fZHEpCisJCUVNSVQoJyInKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3NpemVfdCBxdW90ZV9jX3N0eWxlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCwgaW50IG5vZHEpCit7CisJcmV0dXJuIHF1b3RlX2Nfc3R5bGVfY291bnRlZChuYW1lLCAtMSwgc2IsIGZwLCBub2RxKTsKK30KKwordm9pZCBxdW90ZV90d29fY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbm9kcSkKK3sKKwlpZiAocXVvdGVfY19zdHlsZShwcmVmaXgsIE5VTEwsIE5VTEwsIDApIHx8CisJICAgIHF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgTlVMTCwgMCkpIHsKKwkJaWYgKCFub2RxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnIicpOworCQlxdW90ZV9jX3N0eWxlKHByZWZpeCwgc2IsIE5VTEwsIDEpOworCQlxdW90ZV9jX3N0eWxlKHBhdGgsIHNiLCBOVUxMLCAxKTsKKwkJaWYgKCFub2RxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnIicpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHByZWZpeCk7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHBhdGgpOworCX0KK30KKwordm9pZCB3cml0ZV9uYW1lX3F1b3RlZChjb25zdCBjaGFyICpuYW1lLCBGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpCit7CisJaWYgKHRlcm1pbmF0b3IpIHsKKwkJcXVvdGVfY19zdHlsZShuYW1lLCBOVUxMLCBmcCwgMCk7CisJfSBlbHNlIHsKKwkJZnB1dHMobmFtZSwgZnApOworCX0KKwlmcHV0Yyh0ZXJtaW5hdG9yLCBmcCk7Cit9CisKK3ZvaWQgd3JpdGVfbmFtZV9xdW90ZWRwZngoY29uc3QgY2hhciAqcGZ4LCBzaXplX3QgcGZ4bGVuLAorCQkJICBjb25zdCBjaGFyICpuYW1lLCBGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpCit7CisJaW50IG5lZWRxdW90ZSA9IDA7CisKKwlpZiAodGVybWluYXRvcikgeworCQluZWVkcXVvdGUgPSBuZXh0X3F1b3RlX3BvcyhwZngsIHBmeGxlbikgPCBwZnhsZW4KKwkJCXx8IG5hbWVbbmV4dF9xdW90ZV9wb3MobmFtZSwgLTEpXTsKKwl9CisJaWYgKG5lZWRxdW90ZSkgeworCQlmcHV0YygnIicsIGZwKTsKKwkJcXVvdGVfY19zdHlsZV9jb3VudGVkKHBmeCwgcGZ4bGVuLCBOVUxMLCBmcCwgMSk7CisJCXF1b3RlX2Nfc3R5bGUobmFtZSwgTlVMTCwgZnAsIDEpOworCQlmcHV0YygnIicsIGZwKTsKKwl9IGVsc2UgeworCQlmd3JpdGUocGZ4LCBwZnhsZW4sIDEsIGZwKTsKKwkJZnB1dHMobmFtZSwgZnApOworCX0KKwlmcHV0Yyh0ZXJtaW5hdG9yLCBmcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXRoX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmluLCBpbnQgbGVuLAorCQkJCSBzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSBpbnQgcHJlZml4X2xlbik7CisKK3ZvaWQgd3JpdGVfbmFtZV9xdW90ZWRfcmVsYXRpdmUoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IGxlbiwKKwkJCQljb25zdCBjaGFyICpwcmVmaXgsIHNpemVfdCBwcmVmaXhfbGVuLAorCQkJCUZJTEUgKmZwLCBpbnQgdGVybWluYXRvcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwluYW1lID0gcGF0aF9yZWxhdGl2ZShuYW1lLCBsZW4sICZzYiwgcHJlZml4LCBwcmVmaXhfbGVuKTsKKwl3cml0ZV9uYW1lX3F1b3RlZChuYW1lLCBmcCwgdGVybWluYXRvcik7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCisvKgorICogR2l2ZSBwYXRoIGFzIHJlbGF0aXZlIHRvIHByZWZpeC4KKyAqCisgKiBUaGUgc3RyYnVmIG1heSBvciBtYXkgbm90IGJlIHVzZWQsIHNvIGRvIG5vdCBhc3N1bWUgaXQgY29udGFpbnMgdGhlCisgKiByZXR1cm5lZCBwYXRoLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9yZWxhdGl2ZShjb25zdCBjaGFyICppbiwgaW50IGxlbiwKKwkJCQkgc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgaW50IHByZWZpeF9sZW4pCit7CisJaW50IG9mZiwgaTsKKworCWlmIChsZW4gPCAwKQorCQlsZW4gPSBzdHJsZW4oaW4pOworCWlmIChwcmVmaXhfbGVuIDwgMCkgeworCQlpZiAocHJlZml4KQorCQkJcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOworCQllbHNlCisJCQlwcmVmaXhfbGVuID0gMDsKKwl9CisKKwlvZmYgPSAwOworCWkgPSAwOworCXdoaWxlIChpIDwgcHJlZml4X2xlbiAmJiBpIDwgbGVuICYmIHByZWZpeFtpXSA9PSBpbltpXSkgeworCQlpZiAocHJlZml4W2ldID09ICcvJykKKwkJCW9mZiA9IGkgKyAxOworCQlpKys7CisJfQorCWluICs9IG9mZjsKKwlsZW4gLT0gb2ZmOworCisJaWYgKGkgPj0gcHJlZml4X2xlbikKKwkJcmV0dXJuIGluOworCisJc3RyYnVmX3Jlc2V0KHNiKTsKKwlzdHJidWZfZ3JvdyhzYiwgbGVuKTsKKworCXdoaWxlIChpIDwgcHJlZml4X2xlbikgeworCQlpZiAocHJlZml4W2ldID09ICcvJykKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICIuLi8iKTsKKwkJaSsrOworCX0KKwlzdHJidWZfYWRkKHNiLCBpbiwgbGVuKTsKKworCXJldHVybiBzYi0+YnVmOworfQorCisvKiBxdW90ZSBwYXRoIGFzIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBwcmVmaXggKi8KK2NoYXIgKnF1b3RlX3BhdGhfcmVsYXRpdmUoY29uc3QgY2hhciAqaW4sIGludCBsZW4sCisJCQkgIHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpyZWwgPSBwYXRoX3JlbGF0aXZlKGluLCBsZW4sICZzYiwgcHJlZml4LCAtMSk7CisJc3RyYnVmX3Jlc2V0KG91dCk7CisJcXVvdGVfY19zdHlsZV9jb3VudGVkKHJlbCwgc3RybGVuKHJlbCksIG91dCwgTlVMTCwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCWlmICghb3V0LT5sZW4pCisJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiLi8iKTsKKworCXJldHVybiBvdXQtPmJ1ZjsKK30KKworLyoKKyAqIEMtc3R5bGUgbmFtZSB1bnF1b3RpbmcuCisgKgorICogUXVvdGVkIHNob3VsZCBwb2ludCBhdCB0aGUgb3BlbmluZyBkb3VibGUgcXVvdGUuCisgKiArIFJldHVybnMgMCBpZiBpdCB3YXMgYWJsZSB0byB1bnF1b3RlIHRoZSBzdHJpbmcgcHJvcGVybHksIGFuZCBhcHBlbmRzIHRoZQorICogICByZXN1bHQgaW4gdGhlIHN0cmJ1ZiBgc2InLgorICogKyBSZXR1cm5zIC0xIGluIGNhc2Ugb2YgZXJyb3IsIGFuZCBkb2Vzbid0IHRvdWNoIHRoZSBzdHJidWYuIFRob3VnaCBub3RlCisgKiAgIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIG1lbW9yeSBpbiB0aGUgc3RyYnVmLCBzbyBjYWxsaW5nCisgKiAgIHN0cmJ1Zl9yZWxlYXNlIGlzIG1hbmRhdG9yeSB3aGljaGV2ZXIgcmVzdWx0IHVucXVvdGVfY19zdHlsZSByZXR1cm5zLgorICoKKyAqIFVwZGF0ZXMgZW5kcCBwb2ludGVyIHRvIHBvaW50IGF0IG9uZSBwYXN0IHRoZSBlbmRpbmcgZG91YmxlIHF1b3RlIGlmIGdpdmVuLgorICovCitpbnQgdW5xdW90ZV9jX3N0eWxlKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpxdW90ZWQsIGNvbnN0IGNoYXIgKiplbmRwKQoreworCXNpemVfdCBvbGRsZW4gPSBzYi0+bGVuLCBsZW47CisJaW50IGNoLCBhYzsKKworCWlmICgqcXVvdGVkKysgIT0gJyInKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKDs7KSB7CisJCWxlbiA9IHN0cmNzcG4ocXVvdGVkLCAiXCJcXCIpOworCQlzdHJidWZfYWRkKHNiLCBxdW90ZWQsIGxlbik7CisJCXF1b3RlZCArPSBsZW47CisKKwkJc3dpdGNoICgqcXVvdGVkKyspIHsKKwkJICBjYXNlICciJzoKKwkJCWlmIChlbmRwKQorCQkJCSplbmRwID0gcXVvdGVkOworCQkJcmV0dXJuIDA7CisJCSAgY2FzZSAnXFwnOgorCQkJYnJlYWs7CisJCSAgZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlzd2l0Y2ggKChjaCA9ICpxdW90ZWQrKykpIHsKKwkJY2FzZSAnYSc6IGNoID0gJ1xhJzsgYnJlYWs7CisJCWNhc2UgJ2InOiBjaCA9ICdcYic7IGJyZWFrOworCQljYXNlICdmJzogY2ggPSAnXGYnOyBicmVhazsKKwkJY2FzZSAnbic6IGNoID0gJ1xuJzsgYnJlYWs7CisJCWNhc2UgJ3InOiBjaCA9ICdccic7IGJyZWFrOworCQljYXNlICd0JzogY2ggPSAnXHQnOyBicmVhazsKKwkJY2FzZSAndic6IGNoID0gJ1x2JzsgYnJlYWs7CisKKwkJY2FzZSAnXFwnOiBjYXNlICciJzoKKwkJCWJyZWFrOyAvKiB2ZXJiYXRpbSAqLworCisJCS8qIG9jdGFsIHZhbHVlcyB3aXRoIGZpcnN0IGRpZ2l0IG92ZXIgNCBvdmVyZmxvdyAqLworCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzoKKwkJCQkJYWMgPSAoKGNoIC0gJzAnKSA8PCA2KTsKKwkJCWlmICgoY2ggPSAqcXVvdGVkKyspIDwgJzAnIHx8ICc3JyA8IGNoKQorCQkJCWdvdG8gZXJyb3I7CisJCQkJCWFjIHw9ICgoY2ggLSAnMCcpIDw8IDMpOworCQkJaWYgKChjaCA9ICpxdW90ZWQrKykgPCAnMCcgfHwgJzcnIDwgY2gpCisJCQkJZ290byBlcnJvcjsKKwkJCQkJYWMgfD0gKGNoIC0gJzAnKTsKKwkJCQkJY2ggPSBhYzsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCQl9CisJCXN0cmJ1Zl9hZGRjaChzYiwgY2gpOworCQl9CisKKyAgZXJyb3I6CisJc3RyYnVmX3NldGxlbihzYiwgb2xkbGVuKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qIHF1b3RpbmcgYXMgYSBzdHJpbmcgbGl0ZXJhbCBmb3Igb3RoZXIgbGFuZ3VhZ2VzICovCisKK3ZvaWQgcGVybF9xdW90ZV9wcmludChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnNyYykKK3sKKwljb25zdCBjaGFyIHNxID0gJ1wnJzsKKwljb25zdCBjaGFyIGJxID0gJ1xcJzsKKwljaGFyIGM7CisKKwlmcHV0YyhzcSwgc3RyZWFtKTsKKwl3aGlsZSAoKGMgPSAqc3JjKyspKSB7CisJCWlmIChjID09IHNxIHx8IGMgPT0gYnEpCisJCQlmcHV0YyhicSwgc3RyZWFtKTsKKwkJZnB1dGMoYywgc3RyZWFtKTsKKwl9CisJZnB1dGMoc3EsIHN0cmVhbSk7Cit9CisKK3ZvaWQgcHl0aG9uX3F1b3RlX3ByaW50KEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqc3JjKQoreworCWNvbnN0IGNoYXIgc3EgPSAnXCcnOworCWNvbnN0IGNoYXIgYnEgPSAnXFwnOworCWNvbnN0IGNoYXIgbmwgPSAnXG4nOworCWNoYXIgYzsKKworCWZwdXRjKHNxLCBzdHJlYW0pOworCXdoaWxlICgoYyA9ICpzcmMrKykpIHsKKwkJaWYgKGMgPT0gbmwpIHsKKwkJCWZwdXRjKGJxLCBzdHJlYW0pOworCQkJZnB1dGMoJ24nLCBzdHJlYW0pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gc3EgfHwgYyA9PSBicSkKKwkJCWZwdXRjKGJxLCBzdHJlYW0pOworCQlmcHV0YyhjLCBzdHJlYW0pOworCX0KKwlmcHV0YyhzcSwgc3RyZWFtKTsKK30KKwordm9pZCB0Y2xfcXVvdGVfcHJpbnQoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzcmMpCit7CisJY2hhciBjOworCisJZnB1dGMoJyInLCBzdHJlYW0pOworCXdoaWxlICgoYyA9ICpzcmMrKykpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ1snOiBjYXNlICddJzoKKwkJY2FzZSAneyc6IGNhc2UgJ30nOgorCQljYXNlICckJzogY2FzZSAnXFwnOiBjYXNlICciJzoKKwkJCWZwdXRjKCdcXCcsIHN0cmVhbSk7CisJCWRlZmF1bHQ6CisJCQlmcHV0YyhjLCBzdHJlYW0pOworCQkJYnJlYWs7CisJCWNhc2UgJ1xmJzoKKwkJCWZwdXRzKCJcXGYiLCBzdHJlYW0pOworCQkJYnJlYWs7CisJCWNhc2UgJ1xyJzoKKwkJCWZwdXRzKCJcXHIiLCBzdHJlYW0pOworCQkJYnJlYWs7CisJCWNhc2UgJ1xuJzoKKwkJCWZwdXRzKCJcXG4iLCBzdHJlYW0pOworCQkJYnJlYWs7CisJCWNhc2UgJ1x0JzoKKwkJCWZwdXRzKCJcXHQiLCBzdHJlYW0pOworCQkJYnJlYWs7CisJCWNhc2UgJ1x2JzoKKwkJCWZwdXRzKCJcXHYiLCBzdHJlYW0pOworCQkJYnJlYWs7CisJCX0KKwl9CisJZnB1dGMoJyInLCBzdHJlYW0pOworfQpkaWZmIC0tZ2l0IGEvcXVvdGUuaCBiL3F1b3RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzMTU1YQotLS0gL2Rldi9udWxsCisrKyBiL3F1b3RlLmgKQEAgLTAsMCArMSw3NiBAQAorI2lmbmRlZiBRVU9URV9ICisjZGVmaW5lIFFVT1RFX0gKKworc3RydWN0IHN0cmJ1ZjsKKworLyogSGVscCB0byBjb3B5IHRoZSB0aGluZyBwcm9wZXJseSBxdW90ZWQgZm9yIHRoZSBzaGVsbCBzYWZldHkuCisgKiBhbnkgc2luZ2xlIHF1b3RlIGlzIHJlcGxhY2VkIHdpdGggJ1wnJywgYW55IGV4Y2xhbWF0aW9uIHBvaW50CisgKiBpcyByZXBsYWNlZCB3aXRoICdcIScsIGFuZCB0aGUgd2hvbGUgdGhpbmcgaXMgZW5jbG9zZWQgaW4gYQorICogc2luZ2xlIHF1b3RlIHBhaXIuCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHN5c3RlbSgpIGFzIGFuCisgKiBhcmd1bWVudDoKKyAqCisgKiBzcHJpbnRmKGNtZCwgImZvb2JhciAlcyAlcyIsIHNxX3F1b3RlKGFyZzApLCBzcV9xdW90ZShhcmcxKSkKKyAqCisgKiB3b3VsZCBiZSBhcHByb3ByaWF0ZS4gIElmIHRoZSBzeXN0ZW0oKSBpcyBnb2luZyB0byBjYWxsIHNzaCB0bworICogcnVuIHRoZSBjb21tYW5kIG9uIHRoZSBvdGhlciBzaWRlOgorICoKKyAqIHNwcmludGYoY21kLCAiZ2l0LWRpZmYtdHJlZSAlcyAlcyIsIHNxX3F1b3RlKGFyZzApLCBzcV9xdW90ZShhcmcxKSk7CisgKiBzcHJpbnRmKHJjbWQsICJzc2ggJXMgJXMiLCBzcV9xdW90ZShob3N0KSwgc3FfcXVvdGUoY21kKSk7CisgKgorICogTm90ZSB0aGF0IHRoZSBhYm92ZSBleGFtcGxlcyBsZWFrIG1lbW9yeSEgIFJlbWVtYmVyIHRvIGZyZWUgcmVzdWx0IGZyb20KKyAqIHNxX3F1b3RlKCkgaW4gYSByZWFsIGFwcGxpY2F0aW9uLgorICoKKyAqIHNxX3F1b3RlX2J1ZigpIHdyaXRlcyB0byBhbiBleGlzdGluZyBidWZmZXIgb2Ygc3BlY2lmaWVkIHNpemU7IGl0CisgKiB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gd3JpdHRlbgorICogZXhjbHVkaW5nIHRoZSBmaW5hbCBudWxsIHJlZ2FyZGxlc3Mgb2YgdGhlIGJ1ZmZlciBzaXplLgorICovCisKK2V4dGVybiB2b2lkIHNxX3F1b3RlX3ByaW50KEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqc3JjKTsKKworZXh0ZXJuIHZvaWQgc3FfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqc3JjKTsKK2V4dGVybiB2b2lkIHNxX3F1b3RlX2FyZ3Yoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICoqYXJndiwgc2l6ZV90IG1heGxlbik7CisKKy8qIFRoaXMgdW53cmFwcyB3aGF0IHNxX3F1b3RlKCkgcHJvZHVjZXMgaW4gcGxhY2UsIGJ1dCByZXR1cm5zCisgKiBOVUxMIGlmIHRoZSBpbnB1dCBkb2VzIG5vdCBsb29rIGxpa2Ugd2hhdCBzcV9xdW90ZSB3b3VsZCBoYXZlCisgKiBwcm9kdWNlZC4KKyAqLworZXh0ZXJuIGNoYXIgKnNxX2RlcXVvdGUoY2hhciAqKTsKKworLyoKKyAqIFNhbWUgYXMgdGhlIGFib3ZlLCBidXQgY2FuIGJlIHVzZWQgdG8gdW53cmFwIG1hbnkgYXJndW1lbnRzIGluIHRoZQorICogc2FtZSBzdHJpbmcgc2VwYXJhdGVkIGJ5IHNwYWNlLiBMaWtlIHNxX3F1b3RlLCBpdCB3b3JrcyBpbiBwbGFjZSwKKyAqIG1vZGlmeWluZyBhcmcgYW5kIGFwcGVuZGluZyBwb2ludGVycyBpbnRvIGl0IHRvIGFyZ3YuCisgKi8KK2V4dGVybiBpbnQgc3FfZGVxdW90ZV90b19hcmd2KGNoYXIgKmFyZywgY29uc3QgY2hhciAqKiphcmd2LCBpbnQgKm5yLCBpbnQgKmFsbG9jKTsKKworLyoKKyAqIFNhbWUgYXMgYWJvdmUsIGJ1dCBzdG9yZSB0aGUgdW5xdW90ZWQgc3RyaW5ncyBpbiBhbiBhcmd2X2FycmF5LiBXZSB3aWxsCisgKiBzdGlsbCBtb2RpZnkgYXJnIGluIHBsYWNlLCBidXQgdW5saWtlIHNxX2RlcXVvdGVfdG9fYXJndiwgdGhlIGFyZ3ZfYXJyYXkKKyAqIHdpbGwgZHVwbGljYXRlIGFuZCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgc3RyaW5ncy4KKyAqLworc3RydWN0IGFyZ3ZfYXJyYXk7CitleHRlcm4gaW50IHNxX2RlcXVvdGVfdG9fYXJndl9hcnJheShjaGFyICphcmcsIHN0cnVjdCBhcmd2X2FycmF5ICopOworCitleHRlcm4gaW50IHVucXVvdGVfY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKnF1b3RlZCwgY29uc3QgY2hhciAqKmVuZHApOworZXh0ZXJuIHNpemVfdCBxdW90ZV9jX3N0eWxlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKiwgRklMRSAqLCBpbnQgbm9fZHEpOworZXh0ZXJuIHZvaWQgcXVvdGVfdHdvX2Nfc3R5bGUoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKworZXh0ZXJuIHZvaWQgd3JpdGVfbmFtZV9xdW90ZWQoY29uc3QgY2hhciAqbmFtZSwgRklMRSAqLCBpbnQgdGVybWluYXRvcik7CitleHRlcm4gdm9pZCB3cml0ZV9uYW1lX3F1b3RlZHBmeChjb25zdCBjaGFyICpwZngsIHNpemVfdCBwZnhsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBGSUxFICosIGludCB0ZXJtaW5hdG9yKTsKK2V4dGVybiB2b2lkIHdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4sCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgc2l6ZV90IHByZWZpeF9sZW4sCisJCUZJTEUgKmZwLCBpbnQgdGVybWluYXRvcik7CisKKy8qIHF1b3RlIHBhdGggYXMgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHByZWZpeCAqLworZXh0ZXJuIGNoYXIgKnF1b3RlX3BhdGhfcmVsYXRpdmUoY29uc3QgY2hhciAqaW4sIGludCBsZW4sCisJCQkgIHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcHJlZml4KTsKKworLyogcXVvdGluZyBhcyBhIHN0cmluZyBsaXRlcmFsIGZvciBvdGhlciBsYW5ndWFnZXMgKi8KK2V4dGVybiB2b2lkIHBlcmxfcXVvdGVfcHJpbnQoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzcmMpOworZXh0ZXJuIHZvaWQgcHl0aG9uX3F1b3RlX3ByaW50KEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqc3JjKTsKK2V4dGVybiB2b2lkIHRjbF9xdW90ZV9wcmludChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnNyYyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVhY2hhYmxlLmMgYi9yZWFjaGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjc5NzA2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVhY2hhYmxlLmMKQEAgLTAsMCArMSwyNTAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVhY2hhYmxlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisKK3N0cnVjdCBjb25uZWN0aXZpdHlfcHJvZ3Jlc3MgeworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKK307CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9wcm9ncmVzcyhzdHJ1Y3QgY29ubmVjdGl2aXR5X3Byb2dyZXNzICpjcCkKK3sKKwljcC0+Y291bnQrKzsKKwlpZiAoKGNwLT5jb3VudCAmIDEwMjMpID09IDApCisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3AtPnByb2dyZXNzLCBjcC0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2Jsb2Ioc3RydWN0IGJsb2IgKmJsb2IsCisJCQkgc3RydWN0IG9iamVjdF9hcnJheSAqcCwKKwkJCSBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGNvbm5lY3Rpdml0eV9wcm9ncmVzcyAqY3ApCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gJmJsb2ItPm9iamVjdDsKKworCWlmICghYmxvYikKKwkJZGllKCJiYWQgYmxvYiBvYmplY3QiKTsKKwlpZiAob2JqLT5mbGFncyAmIFNFRU4pCisJCXJldHVybjsKKwlvYmotPmZsYWdzIHw9IFNFRU47CisJdXBkYXRlX3Byb2dyZXNzKGNwKTsKKwkvKiBOb3RoaW5nIHRvIGRvLCByZWFsbHkgLi4gVGhlIGJsb2IgbG9va3VwIHdhcyB0aGUgaW1wb3J0YW50IHBhcnQgKi8KK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19naXRsaW5rKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgc3RydWN0IG9iamVjdF9hcnJheSAqcCwKKwkJCSAgICBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJLyogSSBkb24ndCB0aGluayB3ZSB3YW50IHRvIHJlY3Vyc2UgaW50byB0aGlzLCByZWFsbHkuICovCit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwKKwkJCSBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpwLAorCQkJIHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsCisJCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBzdHJ1Y3QgY29ubmVjdGl2aXR5X3Byb2dyZXNzICpjcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmdHJlZS0+b2JqZWN0OworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwlzdHJ1Y3QgbmFtZV9wYXRoIG1lOworCisJaWYgKCF0cmVlKQorCQlkaWUoImJhZCB0cmVlIG9iamVjdCIpOworCWlmIChvYmotPmZsYWdzICYgU0VFTikKKwkJcmV0dXJuOworCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwl1cGRhdGVfcHJvZ3Jlc3MoY3ApOworCWlmIChwYXJzZV90cmVlKHRyZWUpIDwgMCkKKwkJZGllKCJiYWQgdHJlZSBvYmplY3QgJXMiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwlhZGRfb2JqZWN0KG9iaiwgcCwgcGF0aCwgbmFtZSk7CisJbWUudXAgPSBwYXRoOworCW1lLmVsZW0gPSBuYW1lOworCW1lLmVsZW1fbGVuID0gc3RybGVuKG5hbWUpOworCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQlpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkKKwkJCXByb2Nlc3NfdHJlZShsb29rdXBfdHJlZShlbnRyeS5zaGExKSwgcCwgJm1lLCBlbnRyeS5wYXRoLCBjcCk7CisJCWVsc2UgaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQorCQkJcHJvY2Vzc19naXRsaW5rKGVudHJ5LnNoYTEsIHAsICZtZSwgZW50cnkucGF0aCk7CisJCWVsc2UKKwkJCXByb2Nlc3NfYmxvYihsb29rdXBfYmxvYihlbnRyeS5zaGExKSwgcCwgJm1lLCBlbnRyeS5wYXRoLCBjcCk7CisJfQorCWZyZWUodHJlZS0+YnVmZmVyKTsKKwl0cmVlLT5idWZmZXIgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3RhZyhzdHJ1Y3QgdGFnICp0YWcsIHN0cnVjdCBvYmplY3RfYXJyYXkgKnAsCisJCQljb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgY29ubmVjdGl2aXR5X3Byb2dyZXNzICpjcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmdGFnLT5vYmplY3Q7CisKKwlpZiAob2JqLT5mbGFncyAmIFNFRU4pCisJCXJldHVybjsKKwlvYmotPmZsYWdzIHw9IFNFRU47CisJdXBkYXRlX3Byb2dyZXNzKGNwKTsKKworCWlmIChwYXJzZV90YWcodGFnKSA8IDApCisJCWRpZSgiYmFkIHRhZyBvYmplY3QgJXMiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwlpZiAodGFnLT50YWdnZWQpCisJCWFkZF9vYmplY3QodGFnLT50YWdnZWQsIHAsIE5VTEwsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCB3YWxrX2NvbW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgc3RydWN0IGNvbm5lY3Rpdml0eV9wcm9ncmVzcyAqY3ApCit7CisJaW50IGk7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBvYmplY3RfYXJyYXkgb2JqZWN0cyA9IE9CSkVDVF9BUlJBWV9JTklUOworCisJLyogV2FsayBhbGwgY29tbWl0cywgcHJvY2VzcyB0aGVpciB0cmVlcyAqLworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldnMpKSAhPSBOVUxMKSB7CisJCXByb2Nlc3NfdHJlZShjb21taXQtPnRyZWUsICZvYmplY3RzLCBOVUxMLCAiIiwgY3ApOworCQl1cGRhdGVfcHJvZ3Jlc3MoY3ApOworCX0KKworCS8qIFRoZW4gd2FsayBhbGwgdGhlIHBlbmRpbmcgb2JqZWN0cywgcmVjdXJzaXZlbHkgcHJvY2Vzc2luZyB0aGVtIHRvbyAqLworCWZvciAoaSA9IDA7IGkgPCByZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqcGVuZGluZyA9IHJldnMtPnBlbmRpbmcub2JqZWN0cyArIGk7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBlbmRpbmctPml0ZW07CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBwZW5kaW5nLT5uYW1lOworCQlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJCXByb2Nlc3NfdGFnKChzdHJ1Y3QgdGFnICopIG9iaiwgJm9iamVjdHMsIG5hbWUsIGNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJCXByb2Nlc3NfdHJlZSgoc3RydWN0IHRyZWUgKilvYmosICZvYmplY3RzLCBOVUxMLCBuYW1lLCBjcCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAob2JqLT50eXBlID09IE9CSl9CTE9CKSB7CisJCQlwcm9jZXNzX2Jsb2IoKHN0cnVjdCBibG9iICopb2JqLCAmb2JqZWN0cywgTlVMTCwgbmFtZSwgY3ApOworCQkJY29udGludWU7CisJCX0KKwkJZGllKCJ1bmtub3duIHBlbmRpbmcgb2JqZWN0ICVzICglcykiLCBzaGExX3RvX2hleChvYmotPnNoYTEpLCBuYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWRkX29uZV9yZWZsb2dfZW50KHVuc2lnbmVkIGNoYXIgKm9zaGExLCB1bnNpZ25lZCBjaGFyICpuc2hhMSwKKwkJY29uc3QgY2hhciAqZW1haWwsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wLCBpbnQgdHosCisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IChzdHJ1Y3QgcmV2X2luZm8gKiljYl9kYXRhOworCisJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KG9zaGExKTsKKwlpZiAob2JqZWN0KQorCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCAiIik7CisJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KG5zaGExKTsKKwlpZiAob2JqZWN0KQorCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCAiIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX29uZV9yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IChzdHJ1Y3QgcmV2X2luZm8gKiljYl9kYXRhOworCisJaWYgKCFvYmplY3QpCisJCWRpZSgiYmFkIG9iamVjdCByZWY6ICVzOiVzIiwgcGF0aCwgc2hhMV90b19oZXgoc2hhMSkpOworCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCBvYmplY3QsICIiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9vbmVfcmVmbG9nKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWZvcl9lYWNoX3JlZmxvZ19lbnQocGF0aCwgYWRkX29uZV9yZWZsb2dfZW50LCBjYl9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX29uZV90cmVlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgdHJlZSAqdHJlZSA9IGxvb2t1cF90cmVlKHNoYTEpOworCWlmICh0cmVlKQorCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJnRyZWUtPm9iamVjdCwgIiIpOworfQorCitzdGF0aWMgdm9pZCBhZGRfY2FjaGVfdHJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpbnQgaTsKKworCWlmIChpdC0+ZW50cnlfY291bnQgPj0gMCkKKwkJYWRkX29uZV90cmVlKGl0LT5zaGExLCByZXZzKTsKKwlmb3IgKGkgPSAwOyBpIDwgaXQtPnN1YnRyZWVfbnI7IGkrKykKKwkJYWRkX2NhY2hlX3RyZWUoaXQtPmRvd25baV0tPmNhY2hlX3RyZWUsIHJldnMpOworfQorCitzdGF0aWMgdm9pZCBhZGRfY2FjaGVfcmVmcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJaW50IGk7CisKKwlyZWFkX2NhY2hlKCk7CisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCS8qCisJCSAqIFRoZSBpbmRleCBjYW4gY29udGFpbiBibG9icyBhbmQgR0lUTElOS3MsIEdJVExJTktzIGFyZSBoYXNoZXMKKwkJICogdGhhdCBkb24ndCBhY3R1YWxseSBwb2ludCB0byBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5LCBpdCdzCisJCSAqIGFsbW9zdCBndWFyYW50ZWVkIHRoYXQgdGhleSBhcmUgTk9UIGJsb2JzLCBzbyB3ZSBkb24ndCBjYWxsCisJCSAqIGxvb2t1cF9ibG9iKCkgb24gdGhlbSwgdG8gYXZvaWQgcG9wdWxhdGluZyB0aGUgaGFzaCB0YWJsZQorCQkgKiB3aXRoIGludmFsaWQgaW5mb3JtYXRpb24KKwkJICovCisJCWlmIChTX0lTR0lUTElOSyhhY3RpdmVfY2FjaGVbaV0tPmNlX21vZGUpKQorCQkJY29udGludWU7CisKKwkJbG9va3VwX2Jsb2IoYWN0aXZlX2NhY2hlW2ldLT5zaGExKTsKKwkJLyoKKwkJICogV2UgY291bGQgYWRkIHRoZSBibG9icyB0byB0aGUgcGVuZGluZyBsaXN0LCBidXQgcXVpdGUKKwkJICogZnJhbmtseSwgd2UgZG9uJ3QgY2FyZS4gT25jZSB3ZSd2ZSBsb29rZWQgdGhlbSB1cCwgYW5kCisJCSAqIGFkZGVkIHRoZW0gYXMgb2JqZWN0cywgd2UndmUgcmVhbGx5IGRvbmUgZXZlcnl0aGluZworCQkgKiB0aGVyZSBpcyB0byBkbyBmb3IgYSBibG9iCisJCSAqLworCX0KKwlpZiAoYWN0aXZlX2NhY2hlX3RyZWUpCisJCWFkZF9jYWNoZV90cmVlKGFjdGl2ZV9jYWNoZV90cmVlLCByZXZzKTsKK30KKwordm9pZCBtYXJrX3JlYWNoYWJsZV9vYmplY3RzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IG1hcmtfcmVmbG9nLAorCQkJICAgIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MpCit7CisJc3RydWN0IGNvbm5lY3Rpdml0eV9wcm9ncmVzcyBjcDsKKworCS8qCisJICogU2V0IHVwIHJldmlzaW9uIHBhcnNpbmcsIGFuZCBtYXJrIHVzIGFzIGJlaW5nIGludGVyZXN0ZWQKKwkgKiBpbiBhbGwgb2JqZWN0IHR5cGVzLCBub3QganVzdCBjb21taXRzLgorCSAqLworCXJldnMtPnRhZ19vYmplY3RzID0gMTsKKwlyZXZzLT5ibG9iX29iamVjdHMgPSAxOworCXJldnMtPnRyZWVfb2JqZWN0cyA9IDE7CisKKwkvKiBBZGQgYWxsIHJlZnMgZnJvbSB0aGUgaW5kZXggZmlsZSAqLworCWFkZF9jYWNoZV9yZWZzKHJldnMpOworCisJLyogQWRkIGFsbCBleHRlcm5hbCByZWZzICovCisJZm9yX2VhY2hfcmVmKGFkZF9vbmVfcmVmLCByZXZzKTsKKworCS8qIEFkZCBhbGwgcmVmbG9nIGluZm8gKi8KKwlpZiAobWFya19yZWZsb2cpCisJCWZvcl9lYWNoX3JlZmxvZyhhZGRfb25lX3JlZmxvZywgcmV2cyk7CisKKwljcC5wcm9ncmVzcyA9IHByb2dyZXNzOworCWNwLmNvdW50ID0gMDsKKworCS8qCisJICogU2V0IHVwIHRoZSByZXZpc2lvbiB3YWxrIC0gdGhpcyB3aWxsIG1vdmUgYWxsIGNvbW1pdHMKKwkgKiBmcm9tIHRoZSBwZW5kaW5nIGxpc3QgdG8gdGhlIGNvbW1pdCB3YWxraW5nIGxpc3QuCisJICovCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXZzKSkKKwkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCXdhbGtfY29tbWl0X2xpc3QocmV2cywgJmNwKTsKKwlkaXNwbGF5X3Byb2dyZXNzKGNwLnByb2dyZXNzLCBjcC5jb3VudCk7Cit9CmRpZmYgLS1naXQgYS9yZWFjaGFibGUuaCBiL3JlYWNoYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMDgyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWFjaGFibGUuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgUkVBQ0hFQUJMRV9ICisjZGVmaW5lIFJFQUNIRUFCTEVfSAorCitzdHJ1Y3QgcHJvZ3Jlc3M7CitleHRlcm4gdm9pZCBtYXJrX3JlYWNoYWJsZV9vYmplY3RzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IG1hcmtfcmVmbG9nLCBzdHJ1Y3QgcHJvZ3Jlc3MgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVhZC1jYWNoZS5jIGIvcmVhZC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTc4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWFkLWNhY2hlLmMKQEAgLTAsMCArMSwxODk4IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjZGVmaW5lIE5PX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInZhcmludC5oIgorCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCByZWFsbHkpOworCisvKiBNYXNrIGZvciB0aGUgbmFtZSBsZW5ndGggaW4gY2VfZmxhZ3MgaW4gdGhlIG9uLWRpc2sgaW5kZXggKi8KKworI2RlZmluZSBDRV9OQU1FTUFTSyAgKDB4MGZmZikKKworLyogSW5kZXggZXh0ZW5zaW9ucy4KKyAqCisgKiBUaGUgZmlyc3QgbGV0dGVyIHNob3VsZCBiZSAnQScuLidaJyBmb3IgZXh0ZW5zaW9ucyB0aGF0IGFyZSBub3QKKyAqIG5lY2Vzc2FyeSBmb3IgYSBjb3JyZWN0IG9wZXJhdGlvbiAoaS5lLiBvcHRpbWl6YXRpb24gZGF0YSkuCisgKiBXaGVuIG5ldyBleHRlbnNpb25zIGFyZSBhZGRlZCB0aGF0IF9uZWVkc18gdG8gYmUgdW5kZXJzdG9vZCBpbgorICogb3JkZXIgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgaW5kZXggZmlsZSwgcGljayBjaGFyYWN0ZXIgdGhhdAorICogaXMgb3V0c2lkZSB0aGUgcmFuZ2UsIHRvIGNhdXNlIHRoZSByZWFkZXIgdG8gYWJvcnQuCisgKi8KKworI2RlZmluZSBDQUNIRV9FWFQocykgKCAoc1swXTw8MjQpfChzWzFdPDwxNil8KHNbMl08PDgpfChzWzNdKSApCisjZGVmaW5lIENBQ0hFX0VYVF9UUkVFIDB4NTQ1MjQ1NDUJLyogIlRSRUUiICovCisjZGVmaW5lIENBQ0hFX0VYVF9SRVNPTFZFX1VORE8gMHg1MjQ1NTU0MyAvKiAiUkVVQyIgKi8KKworc3RydWN0IGluZGV4X3N0YXRlIHRoZV9pbmRleDsKKworc3RhdGljIHZvaWQgc2V0X2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgbnIsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJaXN0YXRlLT5jYWNoZVtucl0gPSBjZTsKKwlhZGRfbmFtZV9oYXNoKGlzdGF0ZSwgY2UpOworfQorCitzdGF0aWMgdm9pZCByZXBsYWNlX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgbnIsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBpc3RhdGUtPmNhY2hlW25yXTsKKworCXJlbW92ZV9uYW1lX2hhc2gob2xkKTsKKwlzZXRfaW5kZXhfZW50cnkoaXN0YXRlLCBuciwgY2UpOworCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7Cit9CisKK3ZvaWQgcmVuYW1lX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgbnIsIGNvbnN0IGNoYXIgKm5ld19uYW1lKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkID0gaXN0YXRlLT5jYWNoZVtucl0sICpuZXc7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4obmV3X25hbWUpOworCisJbmV3ID0geG1hbGxvYyhjYWNoZV9lbnRyeV9zaXplKG5hbWVsZW4pKTsKKwljb3B5X2NhY2hlX2VudHJ5KG5ldywgb2xkKTsKKwluZXctPmNlX2ZsYWdzICY9IH5DRV9TVEFURV9NQVNLOworCW5ldy0+Y2VfbmFtZWxlbiA9IG5hbWVsZW47CisJbWVtY3B5KG5ldy0+bmFtZSwgbmV3X25hbWUsIG5hbWVsZW4gKyAxKTsKKworCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKGlzdGF0ZS0+Y2FjaGVfdHJlZSwgb2xkLT5uYW1lKTsKKwlyZW1vdmVfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCBucik7CisJYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgbmV3LCBBRERfQ0FDSEVfT0tfVE9fQUREfEFERF9DQUNIRV9PS19UT19SRVBMQUNFKTsKK30KKworLyoKKyAqIFRoaXMgb25seSB1cGRhdGVzIHRoZSAibm9uLWNyaXRpY2FsIiBwYXJ0cyBvZiB0aGUgZGlyZWN0b3J5CisgKiBjYWNoZSwgaWUgdGhlIHBhcnRzIHRoYXQgYXJlbid0IHRyYWNrZWQgYnkgR0lULCBhbmQgb25seSB1c2VkCisgKiB0byB2YWxpZGF0ZSB0aGUgY2FjaGUuCisgKi8KK3ZvaWQgZmlsbF9zdGF0X2NhY2hlX2luZm8oc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQoreworCWNlLT5jZV9jdGltZS5zZWMgPSAodW5zaWduZWQgaW50KXN0LT5zdF9jdGltZTsKKwljZS0+Y2VfbXRpbWUuc2VjID0gKHVuc2lnbmVkIGludClzdC0+c3RfbXRpbWU7CisJY2UtPmNlX2N0aW1lLm5zZWMgPSBTVF9DVElNRV9OU0VDKCpzdCk7CisJY2UtPmNlX210aW1lLm5zZWMgPSBTVF9NVElNRV9OU0VDKCpzdCk7CisJY2UtPmNlX2RldiA9IHN0LT5zdF9kZXY7CisJY2UtPmNlX2lubyA9IHN0LT5zdF9pbm87CisJY2UtPmNlX3VpZCA9IHN0LT5zdF91aWQ7CisJY2UtPmNlX2dpZCA9IHN0LT5zdF9naWQ7CisJY2UtPmNlX3NpemUgPSBzdC0+c3Rfc2l6ZTsKKworCWlmIChhc3N1bWVfdW5jaGFuZ2VkKQorCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVkFMSUQ7CisKKwlpZiAoU19JU1JFRyhzdC0+c3RfbW9kZSkpCisJCWNlX21hcmtfdXB0b2RhdGUoY2UpOworfQorCitzdGF0aWMgaW50IGNlX2NvbXBhcmVfZGF0YShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaW50IG1hdGNoID0gLTE7CisJaW50IGZkID0gb3BlbihjZS0+bmFtZSwgT19SRE9OTFkpOworCisJaWYgKGZkID49IDApIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaWYgKCFpbmRleF9mZChzaGExLCBmZCwgc3QsIE9CSl9CTE9CLCBjZS0+bmFtZSwgMCkpCisJCQltYXRjaCA9IGhhc2hjbXAoc2hhMSwgY2UtPnNoYTEpOworCQkvKiBpbmRleF9mZCgpIGNsb3NlZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGFscmVhZHkgKi8KKwl9CisJcmV0dXJuIG1hdGNoOworfQorCitzdGF0aWMgaW50IGNlX2NvbXBhcmVfbGluayhzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzaXplX3QgZXhwZWN0ZWRfc2l6ZSkKK3sKKwlpbnQgbWF0Y2ggPSAtMTsKKwl2b2lkICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc3RyYnVmX3JlYWRsaW5rKCZzYiwgY2UtPm5hbWUsIGV4cGVjdGVkX3NpemUpKQorCQlyZXR1cm4gLTE7CisKKwlidWZmZXIgPSByZWFkX3NoYTFfZmlsZShjZS0+c2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoYnVmZmVyKSB7CisJCWlmIChzaXplID09IHNiLmxlbikKKwkJCW1hdGNoID0gbWVtY21wKGJ1ZmZlciwgc2IuYnVmLCBzaXplKTsKKwkJZnJlZShidWZmZXIpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGludCBjZV9jb21wYXJlX2dpdGxpbmsoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJLyoKKwkgKiBXZSBkb24ndCBhY3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIC5naXQgZGlyZWN0b3J5CisJICogdW5kZXIgR0lUTElOSyBkaXJlY3RvcnkgYmUgYSB2YWxpZCBnaXQgZGlyZWN0b3J5LiBJdAorCSAqIG1pZ2h0IGV2ZW4gYmUgbWlzc2luZyAoaW4gY2FzZSBub2JvZHkgcG9wdWxhdGVkIHRoYXQKKwkgKiBzdWItcHJvamVjdCkuCisJICoKKwkgKiBJZiBzbywgd2UgY29uc2lkZXIgaXQgYWx3YXlzIHRvIG1hdGNoLgorCSAqLworCWlmIChyZXNvbHZlX2dpdGxpbmtfcmVmKGNlLT5uYW1lLCAiSEVBRCIsIHNoYTEpIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGhhc2hjbXAoc2hhMSwgY2UtPnNoYTEpOworfQorCitzdGF0aWMgaW50IGNlX21vZGlmaWVkX2NoZWNrX2ZzKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlzd2l0Y2ggKHN0LT5zdF9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGUkVHOgorCQlpZiAoY2VfY29tcGFyZV9kYXRhKGNlLCBzdCkpCisJCQlyZXR1cm4gREFUQV9DSEFOR0VEOworCQlicmVhazsKKwljYXNlIFNfSUZMTks6CisJCWlmIChjZV9jb21wYXJlX2xpbmsoY2UsIHhzaXplX3Qoc3QtPnN0X3NpemUpKSkKKwkJCXJldHVybiBEQVRBX0NIQU5HRUQ7CisJCWJyZWFrOworCWNhc2UgU19JRkRJUjoKKwkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCXJldHVybiBjZV9jb21wYXJlX2dpdGxpbmsoY2UpID8gREFUQV9DSEFOR0VEIDogMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gVFlQRV9DSEFOR0VEOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZV9tYXRjaF9zdGF0X2Jhc2ljKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZCA9IDA7CisKKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQorCQlyZXR1cm4gTU9ERV9DSEFOR0VEIHwgREFUQV9DSEFOR0VEIHwgVFlQRV9DSEFOR0VEOworCisJc3dpdGNoIChjZS0+Y2VfbW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRlJFRzoKKwkJY2hhbmdlZCB8PSAhU19JU1JFRyhzdC0+c3RfbW9kZSkgPyBUWVBFX0NIQU5HRUQgOiAwOworCQkvKiBXZSBjb25zaWRlciBvbmx5IHRoZSBvd25lciB4IGJpdCB0byBiZSByZWxldmFudCBmb3IKKwkJICogIm1vZGUgY2hhbmdlcyIKKwkJICovCisJCWlmICh0cnVzdF9leGVjdXRhYmxlX2JpdCAmJgorCQkgICAgKDAxMDAgJiAoY2UtPmNlX21vZGUgXiBzdC0+c3RfbW9kZSkpKQorCQkJY2hhbmdlZCB8PSBNT0RFX0NIQU5HRUQ7CisJCWJyZWFrOworCWNhc2UgU19JRkxOSzoKKwkJaWYgKCFTX0lTTE5LKHN0LT5zdF9tb2RlKSAmJgorCQkgICAgKGhhc19zeW1saW5rcyB8fCAhU19JU1JFRyhzdC0+c3RfbW9kZSkpKQorCQkJY2hhbmdlZCB8PSBUWVBFX0NIQU5HRUQ7CisJCWJyZWFrOworCWNhc2UgU19JRkdJVExJTks6CisJCS8qIFdlIGlnbm9yZSBtb3N0IG9mIHRoZSBzdF94eHggZmllbGRzIGZvciBnaXRsaW5rcyAqLworCQlpZiAoIVNfSVNESVIoc3QtPnN0X21vZGUpKQorCQkJY2hhbmdlZCB8PSBUWVBFX0NIQU5HRUQ7CisJCWVsc2UgaWYgKGNlX2NvbXBhcmVfZ2l0bGluayhjZSkpCisJCQljaGFuZ2VkIHw9IERBVEFfQ0hBTkdFRDsKKwkJcmV0dXJuIGNoYW5nZWQ7CisJZGVmYXVsdDoKKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogY2VfbW9kZSBpcyAlbyIsIGNlLT5jZV9tb2RlKTsKKwl9CisJaWYgKGNlLT5jZV9tdGltZS5zZWMgIT0gKHVuc2lnbmVkIGludClzdC0+c3RfbXRpbWUpCisJCWNoYW5nZWQgfD0gTVRJTUVfQ0hBTkdFRDsKKwlpZiAodHJ1c3RfY3RpbWUgJiYgY2UtPmNlX2N0aW1lLnNlYyAhPSAodW5zaWduZWQgaW50KXN0LT5zdF9jdGltZSkKKwkJY2hhbmdlZCB8PSBDVElNRV9DSEFOR0VEOworCisjaWZkZWYgVVNFX05TRUMKKwlpZiAoY2UtPmNlX210aW1lLm5zZWMgIT0gU1RfTVRJTUVfTlNFQygqc3QpKQorCQljaGFuZ2VkIHw9IE1USU1FX0NIQU5HRUQ7CisJaWYgKHRydXN0X2N0aW1lICYmIGNlLT5jZV9jdGltZS5uc2VjICE9IFNUX0NUSU1FX05TRUMoKnN0KSkKKwkJY2hhbmdlZCB8PSBDVElNRV9DSEFOR0VEOworI2VuZGlmCisKKwlpZiAoY2UtPmNlX3VpZCAhPSAodW5zaWduZWQgaW50KSBzdC0+c3RfdWlkIHx8CisJICAgIGNlLT5jZV9naWQgIT0gKHVuc2lnbmVkIGludCkgc3QtPnN0X2dpZCkKKwkJY2hhbmdlZCB8PSBPV05FUl9DSEFOR0VEOworCWlmIChjZS0+Y2VfaW5vICE9ICh1bnNpZ25lZCBpbnQpIHN0LT5zdF9pbm8pCisJCWNoYW5nZWQgfD0gSU5PREVfQ0hBTkdFRDsKKworI2lmZGVmIFVTRV9TVERFVgorCS8qCisJICogc3RfZGV2IGJyZWFrcyBvbiBuZXR3b3JrIGZpbGVzeXN0ZW1zIHdoZXJlIGRpZmZlcmVudAorCSAqIGNsaWVudHMgd2lsbCBoYXZlIGRpZmZlcmVudCB2aWV3cyBvZiB3aGF0ICJkZXZpY2UiCisJICogdGhlIGZpbGVzeXN0ZW0gaXMgb24KKwkgKi8KKwlpZiAoY2UtPmNlX2RldiAhPSAodW5zaWduZWQgaW50KSBzdC0+c3RfZGV2KQorCQljaGFuZ2VkIHw9IElOT0RFX0NIQU5HRUQ7CisjZW5kaWYKKworCWlmIChjZS0+Y2Vfc2l6ZSAhPSAodW5zaWduZWQgaW50KSBzdC0+c3Rfc2l6ZSkKKwkJY2hhbmdlZCB8PSBEQVRBX0NIQU5HRUQ7CisKKwkvKiBSYWNpbHkgc211ZGdlZCBlbnRyeT8gKi8KKwlpZiAoIWNlLT5jZV9zaXplKSB7CisJCWlmICghaXNfZW1wdHlfYmxvYl9zaGExKGNlLT5zaGExKSkKKwkJCWNoYW5nZWQgfD0gREFUQV9DSEFOR0VEOworCX0KKworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW50IGlzX3JhY3lfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCXJldHVybiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSAmJgorCQlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgJiYKKyNpZmRlZiBVU0VfTlNFQworCQkgLyogbmFub3NlY29uZCB0aW1lc3RhbXBlZCBmaWxlcyBjYW4gYWxzbyBiZSByYWN5ISAqLworCQkoaXN0YXRlLT50aW1lc3RhbXAuc2VjIDwgY2UtPmNlX210aW1lLnNlYyB8fAorCQkgKGlzdGF0ZS0+dGltZXN0YW1wLnNlYyA9PSBjZS0+Y2VfbXRpbWUuc2VjICYmCisJCSAgaXN0YXRlLT50aW1lc3RhbXAubnNlYyA8PSBjZS0+Y2VfbXRpbWUubnNlYykpCisjZWxzZQorCQlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPD0gY2UtPmNlX210aW1lLnNlYworI2VuZGlmCisJCSApOworfQorCitpbnQgaWVfbWF0Y2hfc3RhdChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJCSAgdW5zaWduZWQgaW50IG9wdGlvbnMpCit7CisJdW5zaWduZWQgaW50IGNoYW5nZWQ7CisJaW50IGlnbm9yZV92YWxpZCA9IG9wdGlvbnMgJiBDRV9NQVRDSF9JR05PUkVfVkFMSUQ7CisJaW50IGlnbm9yZV9za2lwX3dvcmt0cmVlID0gb3B0aW9ucyAmIENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFOworCWludCBhc3N1bWVfcmFjeV9pc19tb2RpZmllZCA9IG9wdGlvbnMgJiBDRV9NQVRDSF9SQUNZX0lTX0RJUlRZOworCisJLyoKKwkgKiBJZiBpdCdzIG1hcmtlZCBhcyBhbHdheXMgdmFsaWQgaW4gdGhlIGluZGV4LCBpdCdzCisJICogdmFsaWQgd2hhdGV2ZXIgdGhlIGNoZWNrZWQtb3V0IGNvcHkgc2F5cy4KKwkgKgorCSAqIHNraXAtd29ya3RyZWUgaGFzIHRoZSBzYW1lIGVmZmVjdCB3aXRoIGhpZ2hlciBwcmVjZWRlbmNlCisJICovCisJaWYgKCFpZ25vcmVfc2tpcF93b3JrdHJlZSAmJiBjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFpZ25vcmVfdmFsaWQgJiYgKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEludGVudC10by1hZGQgZW50cmllcyBoYXZlIG5vdCBiZWVuIGFkZGVkLCBzbyB0aGUgaW5kZXggZW50cnkKKwkgKiBieSBkZWZpbml0aW9uIG5ldmVyIG1hdGNoZXMgd2hhdCBpcyBpbiB0aGUgd29yayB0cmVlIHVudGlsIGl0CisJICogYWN0dWFsbHkgZ2V0cyBhZGRlZC4KKwkgKi8KKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfSU5URU5UX1RPX0FERCkKKwkJcmV0dXJuIERBVEFfQ0hBTkdFRCB8IFRZUEVfQ0hBTkdFRCB8IE1PREVfQ0hBTkdFRDsKKworCWNoYW5nZWQgPSBjZV9tYXRjaF9zdGF0X2Jhc2ljKGNlLCBzdCk7CisKKwkvKgorCSAqIFdpdGhpbiAxIHNlY29uZCBvZiB0aGlzIHNlcXVlbmNlOgorCSAqIAllY2hvIHh5enp5ID5maWxlICYmIGdpdC11cGRhdGUtaW5kZXggLS1hZGQgZmlsZQorCSAqIHJ1bm5pbmcgdGhpcyBjb21tYW5kOgorCSAqIAllY2hvIGZyb3R6ID5maWxlCisJICogd291bGQgZ2l2ZSBhIGZhbHNlbHkgY2xlYW4gY2FjaGUgZW50cnkuICBUaGUgbXRpbWUgYW5kCisJICogbGVuZ3RoIG1hdGNoIHRoZSBjYWNoZSwgYW5kIG90aGVyIHN0YXQgZmllbGRzIGRvIG5vdCBjaGFuZ2UuCisJICoKKwkgKiBXZSBjb3VsZCBkZXRlY3QgdGhpcyBhdCB1cGRhdGUtaW5kZXggdGltZSAodGhlIGNhY2hlIGVudHJ5CisJICogYmVpbmcgcmVnaXN0ZXJlZC91cGRhdGVkIHJlY29yZHMgdGhlIHNhbWUgdGltZSBhcyAibm93IikKKwkgKiBhbmQgZGVsYXkgdGhlIHJldHVybiBmcm9tIGdpdC11cGRhdGUtaW5kZXgsIGJ1dCB0aGF0IHdvdWxkCisJICogZWZmZWN0aXZlbHkgbWVhbiB3ZSBjYW4gbWFrZSBhdCBtb3N0IG9uZSBjb21taXQgcGVyIHNlY29uZCwKKwkgKiB3aGljaCBpcyBub3QgYWNjZXB0YWJsZS4gIEluc3RlYWQsIHdlIGNoZWNrIGNhY2hlIGVudHJpZXMKKwkgKiB3aG9zZSBtdGltZSBhcmUgdGhlIHNhbWUgYXMgdGhlIGluZGV4IGZpbGUgdGltZXN0YW1wIG1vcmUKKwkgKiBjYXJlZnVsbHkgdGhhbiBvdGhlcnMuCisJICovCisJaWYgKCFjaGFuZ2VkICYmIGlzX3JhY3lfdGltZXN0YW1wKGlzdGF0ZSwgY2UpKSB7CisJCWlmIChhc3N1bWVfcmFjeV9pc19tb2RpZmllZCkKKwkJCWNoYW5nZWQgfD0gREFUQV9DSEFOR0VEOworCQllbHNlCisJCQljaGFuZ2VkIHw9IGNlX21vZGlmaWVkX2NoZWNrX2ZzKGNlLCBzdCk7CisJfQorCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2ludCBpZV9tb2RpZmllZChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0LCB1bnNpZ25lZCBpbnQgb3B0aW9ucykKK3sKKwlpbnQgY2hhbmdlZCwgY2hhbmdlZF9mczsKKworCWNoYW5nZWQgPSBpZV9tYXRjaF9zdGF0KGlzdGF0ZSwgY2UsIHN0LCBvcHRpb25zKTsKKwlpZiAoIWNoYW5nZWQpCisJCXJldHVybiAwOworCS8qCisJICogSWYgdGhlIG1vZGUgb3IgdHlwZSBoYXMgY2hhbmdlZCwgdGhlcmUncyBubyBwb2ludCBpbiB0cnlpbmcKKwkgKiB0byByZWZyZXNoIHRoZSBlbnRyeSAtIGl0J3Mgbm90IGdvaW5nIHRvIG1hdGNoCisJICovCisJaWYgKGNoYW5nZWQgJiAoTU9ERV9DSEFOR0VEIHwgVFlQRV9DSEFOR0VEKSkKKwkJcmV0dXJuIGNoYW5nZWQ7CisKKwkvKgorCSAqIEltbWVkaWF0ZWx5IGFmdGVyIHJlYWQtdHJlZSBvciB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8sCisJICogdGhlIGxlbmd0aCBmaWVsZCBpcyB6ZXJvLCBhcyB3ZSBoYXZlIG5ldmVyIGV2ZW4gcmVhZCB0aGUKKwkgKiBsc3RhdCgyKSBpbmZvcm1hdGlvbiBvbmNlLCBhbmQgd2UgY2Fubm90IHRydXN0IERBVEFfQ0hBTkdFRAorCSAqIHJldHVybmVkIGJ5IGllX21hdGNoX3N0YXQoKSB3aGljaCBpbiB0dXJuIHdhcyByZXR1cm5lZCBieQorCSAqIGNlX21hdGNoX3N0YXRfYmFzaWMoKSB0byBzaWduYWwgdGhhdCB0aGUgZmlsZXNpemUgb2YgdGhlCisJICogYmxvYiBjaGFuZ2VkLiAgV2UgaGF2ZSB0byBhY3R1YWxseSBnbyB0byB0aGUgZmlsZXN5c3RlbSB0bworCSAqIHNlZSBpZiB0aGUgY29udGVudHMgbWF0Y2gsIGFuZCBpZiBzbywgc2hvdWxkIGFuc3dlciAidW5jaGFuZ2VkIi4KKwkgKgorCSAqIFRoZSBsb2dpYyBkb2VzIG5vdCBhcHBseSB0byBnaXRsaW5rcywgYXMgY2VfbWF0Y2hfc3RhdF9iYXNpYygpCisJICogYWxyZWFkeSBoYXMgY2hlY2tlZCB0aGUgYWN0dWFsIEhFQUQgZnJvbSB0aGUgZmlsZXN5c3RlbSBpbiB0aGUKKwkgKiBzdWJwcm9qZWN0LiAgSWYgaWVfbWF0Y2hfc3RhdCgpIGFscmVhZHkgc2FpZCBpdCBpcyBkaWZmZXJlbnQsCisJICogdGhlbiB3ZSBrbm93IGl0IGlzLgorCSAqLworCWlmICgoY2hhbmdlZCAmIERBVEFfQ0hBTkdFRCkgJiYKKwkgICAgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSB8fCBjZS0+Y2Vfc2l6ZSAhPSAwKSkKKwkJcmV0dXJuIGNoYW5nZWQ7CisKKwljaGFuZ2VkX2ZzID0gY2VfbW9kaWZpZWRfY2hlY2tfZnMoY2UsIHN0KTsKKwlpZiAoY2hhbmdlZF9mcykKKwkJcmV0dXJuIGNoYW5nZWQgfCBjaGFuZ2VkX2ZzOworCXJldHVybiAwOworfQorCitpbnQgYmFzZV9uYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqbmFtZTEsIGludCBsZW4xLCBpbnQgbW9kZTEsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUyLCBpbnQgbGVuMiwgaW50IG1vZGUyKQoreworCXVuc2lnbmVkIGNoYXIgYzEsIGMyOworCWludCBsZW4gPSBsZW4xIDwgbGVuMiA/IGxlbjEgOiBsZW4yOworCWludCBjbXA7CisKKwljbXAgPSBtZW1jbXAobmFtZTEsIG5hbWUyLCBsZW4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJYzEgPSBuYW1lMVtsZW5dOworCWMyID0gbmFtZTJbbGVuXTsKKwlpZiAoIWMxICYmIFNfSVNESVIobW9kZTEpKQorCQljMSA9ICcvJzsKKwlpZiAoIWMyICYmIFNfSVNESVIobW9kZTIpKQorCQljMiA9ICcvJzsKKwlyZXR1cm4gKGMxIDwgYzIpID8gLTEgOiAoYzEgPiBjMikgPyAxIDogMDsKK30KKworLyoKKyAqIGRmX25hbWVfY29tcGFyZSgpIGlzIGlkZW50aWNhbCB0byBiYXNlX25hbWVfY29tcGFyZSgpLCBleGNlcHQgaXQKKyAqIGNvbXBhcmVzIGNvbmZsaWN0aW5nIGRpcmVjdG9yeS9maWxlIGVudHJpZXMgYXMgZXF1YWwuIE5vdGUgdGhhdAorICogd2hpbGUgYSBkaXJlY3RvcnkgbmFtZSBjb21wYXJlcyBhcyBlcXVhbCB0byBhIHJlZ3VsYXIgZmlsZSwgdGhleQorICogdGhlbiBpbmRpdmlkdWFsbHkgY29tcGFyZSBfZGlmZmVyZW50bHlfIHRvIGEgZmlsZW5hbWUgdGhhdCBoYXMKKyAqIGEgZG90IGFmdGVyIHRoZSBiYXNlbmFtZSAoYmVjYXVzZSAnXDAnIDwgJy4nIDwgJy8nKS4KKyAqCisgKiBUaGlzIGlzIHVzZWQgYnkgcm91dGluZXMgdGhhdCB3YW50IHRvIHRyYXZlcnNlIHRoZSBnaXQgbmFtZXNwYWNlCisgKiBidXQgdGhlbiBoYW5kbGUgY29uZmxpY3RpbmcgZW50cmllcyB0b2dldGhlciB3aGVuIHBvc3NpYmxlLgorICovCitpbnQgZGZfbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgaW50IG1vZGUxLAorCQkgICAgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yLCBpbnQgbW9kZTIpCit7CisJaW50IGxlbiA9IGxlbjEgPCBsZW4yID8gbGVuMSA6IGxlbjIsIGNtcDsKKwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKworCWNtcCA9IG1lbWNtcChuYW1lMSwgbmFtZTIsIGxlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwkvKiBEaXJlY3RvcmllcyBhbmQgZmlsZXMgY29tcGFyZSBlcXVhbCAoc2FtZSBsZW5ndGgsIHNhbWUgbmFtZSkgKi8KKwlpZiAobGVuMSA9PSBsZW4yKQorCQlyZXR1cm4gMDsKKwljMSA9IG5hbWUxW2xlbl07CisJaWYgKCFjMSAmJiBTX0lTRElSKG1vZGUxKSkKKwkJYzEgPSAnLyc7CisJYzIgPSBuYW1lMltsZW5dOworCWlmICghYzIgJiYgU19JU0RJUihtb2RlMikpCisJCWMyID0gJy8nOworCWlmIChjMSA9PSAnLycgJiYgIWMyKQorCQlyZXR1cm4gMDsKKwlpZiAoYzIgPT0gJy8nICYmICFjMSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGMxIC0gYzI7Cit9CisKK2ludCBjYWNoZV9uYW1lX3N0YWdlX2NvbXBhcmUoY29uc3QgY2hhciAqbmFtZTEsIGludCBsZW4xLCBpbnQgc3RhZ2UxLCBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBzdGFnZTIpCit7CisJaW50IGxlbiA9IGxlbjEgPCBsZW4yID8gbGVuMSA6IGxlbjI7CisJaW50IGNtcDsKKworCWNtcCA9IG1lbWNtcChuYW1lMSwgbmFtZTIsIGxlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlpZiAobGVuMSA8IGxlbjIpCisJCXJldHVybiAtMTsKKwlpZiAobGVuMSA+IGxlbjIpCisJCXJldHVybiAxOworCisJaWYgKHN0YWdlMSA8IHN0YWdlMikKKwkJcmV0dXJuIC0xOworCWlmIChzdGFnZTEgPiBzdGFnZTIpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitpbnQgY2FjaGVfbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yKQoreworCXJldHVybiBjYWNoZV9uYW1lX3N0YWdlX2NvbXBhcmUobmFtZTEsIGxlbjEsIDAsIG5hbWUyLCBsZW4yLCAwKTsKK30KKworc3RhdGljIGludCBpbmRleF9uYW1lX3N0YWdlX3Bvcyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBzdGFnZSkKK3sKKwlpbnQgZmlyc3QsIGxhc3Q7CisKKwlmaXJzdCA9IDA7CisJbGFzdCA9IGlzdGF0ZS0+Y2FjaGVfbnI7CisJd2hpbGUgKGxhc3QgPiBmaXJzdCkgeworCQlpbnQgbmV4dCA9IChsYXN0ICsgZmlyc3QpID4+IDE7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW25leHRdOworCQlpbnQgY21wID0gY2FjaGVfbmFtZV9zdGFnZV9jb21wYXJlKG5hbWUsIG5hbWVsZW4sIHN0YWdlLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIGNlX3N0YWdlKGNlKSk7CisJCWlmICghY21wKQorCQkJcmV0dXJuIG5leHQ7CisJCWlmIChjbXAgPCAwKSB7CisJCQlsYXN0ID0gbmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZpcnN0ID0gbmV4dCsxOworCX0KKwlyZXR1cm4gLWZpcnN0LTE7Cit9CisKK2ludCBpbmRleF9uYW1lX3Bvcyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisJcmV0dXJuIGluZGV4X25hbWVfc3RhZ2VfcG9zKGlzdGF0ZSwgbmFtZSwgbmFtZWxlbiwgMCk7Cit9CisKKy8qIFJlbW92ZSBlbnRyeSwgcmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgZW50cmllcyB0byBnby4uICovCitpbnQgcmVtb3ZlX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgcG9zKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc107CisKKwlyZWNvcmRfcmVzb2x2ZV91bmRvKGlzdGF0ZSwgY2UpOworCXJlbW92ZV9uYW1lX2hhc2goY2UpOworCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7CisJaXN0YXRlLT5jYWNoZV9uci0tOworCWlmIChwb3MgPj0gaXN0YXRlLT5jYWNoZV9ucikKKwkJcmV0dXJuIDA7CisJbWVtbW92ZShpc3RhdGUtPmNhY2hlICsgcG9zLAorCQlpc3RhdGUtPmNhY2hlICsgcG9zICsgMSwKKwkJKGlzdGF0ZS0+Y2FjaGVfbnIgLSBwb3MpICogc2l6ZW9mKHN0cnVjdCBjYWNoZV9lbnRyeSAqKSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBSZW1vdmUgYWxsIGNhY2hlIGVudGVudHJpZXMgbWFya2VkIGZvciByZW1vdmFsLCB0aGF0IGlzIHdoZXJlCisgKiBDRV9SRU1PVkUgaXMgc2V0IGluIGNlX2ZsYWdzLiAgVGhpcyBpcyBtdWNoIG1vcmUgZWZmZWN0aXZlIHRoYW4KKyAqIGNhbGxpbmcgcmVtb3ZlX2luZGV4X2VudHJ5X2F0KCkgZm9yIGVhY2ggZW50cnkgdG8gYmUgcmVtb3ZlZC4KKyAqLwordm9pZCByZW1vdmVfbWFya2VkX2NhY2hlX2VudHJpZXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2VfYXJyYXkgPSBpc3RhdGUtPmNhY2hlOworCXVuc2lnbmVkIGludCBpLCBqOworCisJZm9yIChpID0gaiA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJaWYgKGNlX2FycmF5W2ldLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJCXJlbW92ZV9uYW1lX2hhc2goY2VfYXJyYXlbaV0pOworCQllbHNlCisJCQljZV9hcnJheVtqKytdID0gY2VfYXJyYXlbaV07CisJfQorCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7CisJaXN0YXRlLT5jYWNoZV9uciA9IGo7Cit9CisKK2ludCByZW1vdmVfZmlsZV9mcm9tX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIHBhdGgsIHN0cmxlbihwYXRoKSk7CisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC1wb3MtMTsKKwljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChpc3RhdGUtPmNhY2hlX3RyZWUsIHBhdGgpOworCXdoaWxlIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yICYmICFzdHJjbXAoaXN0YXRlLT5jYWNoZVtwb3NdLT5uYW1lLCBwYXRoKSkKKwkJcmVtb3ZlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgcG9zKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXJlX25hbWUoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IG5hbWVsZW4pCit7CisJcmV0dXJuIG5hbWVsZW4gIT0gY2VfbmFtZWxlbihjZSkgfHwgbWVtY21wKHBhdGgsIGNlLT5uYW1lLCBuYW1lbGVuKTsKK30KKworc3RhdGljIGludCBpbmRleF9uYW1lX3Bvc19hbHNvX3VubWVyZ2VkKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCWNvbnN0IGNoYXIgKnBhdGgsIGludCBuYW1lbGVuKQoreworCWludCBwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIHBhdGgsIG5hbWVsZW4pOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlpZiAocG9zID49IDApCisJCXJldHVybiBwb3M7CisKKwkvKiBtYXliZSB1bm1lcmdlZD8gKi8KKwlwb3MgPSAtMSAtIHBvczsKKwlpZiAocG9zID49IGlzdGF0ZS0+Y2FjaGVfbnIgfHwKKwkJCWNvbXBhcmVfbmFtZSgoY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc10pLCBwYXRoLCBuYW1lbGVuKSkKKwkJcmV0dXJuIC0xOworCisJLyogb3JkZXIgb2YgcHJlZmVyZW5jZTogc3RhZ2UgMiwgMSwgMyAqLworCWlmIChjZV9zdGFnZShjZSkgPT0gMSAmJiBwb3MgKyAxIDwgaXN0YXRlLT5jYWNoZV9uciAmJgorCQkJY2Vfc3RhZ2UoKGNlID0gaXN0YXRlLT5jYWNoZVtwb3MgKyAxXSkpID09IDIgJiYKKwkJCSFjb21wYXJlX25hbWUoY2UsIHBhdGgsIG5hbWVsZW4pKQorCQlwb3MrKzsKKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgaW50IGRpZmZlcmVudF9uYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBjYWNoZV9lbnRyeSAqYWxpYXMpCit7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCXJldHVybiBjZV9uYW1lbGVuKGFsaWFzKSAhPSBsZW4gfHwgbWVtY21wKGNlLT5uYW1lLCBhbGlhcy0+bmFtZSwgbGVuKTsKK30KKworLyoKKyAqIElmIHdlIGFkZCBhIGZpbGVuYW1lIHRoYXQgYWxpYXNlcyBpbiB0aGUgY2FjaGUsIHdlIHdpbGwgdXNlIHRoZQorICogbmFtZSB0aGF0IHdlIGFscmVhZHkgaGF2ZSAtIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSB0aGUgc2FtZQorICogYWxpYXMgdHdpY2UsIGJlY2F1c2UgdGhhdCBpbXBsaWVzIHRoYXQgdGhlcmUgd2VyZSBhY3R1YWxseSB0d28KKyAqIGRpZmZlcmVudCBmaWxlcyB3aXRoIGFsaWFzaW5nIG5hbWVzIQorICoKKyAqIFNvIHdlIHVzZSB0aGUgQ0VfQURERUQgZmxhZyB0byB2ZXJpZnkgdGhhdCB0aGUgYWxpYXMgd2FzIGFuIG9sZAorICogb25lIGJlZm9yZSB3ZSBhY2NlcHQgaXQgYXMKKyAqLworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqY3JlYXRlX2FsaWFzX2NlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBjYWNoZV9lbnRyeSAqYWxpYXMpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ldzsKKworCWlmIChhbGlhcy0+Y2VfZmxhZ3MgJiBDRV9BRERFRCkKKwkJZGllKCJXaWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIsIGNlLT5uYW1lLCBhbGlhcy0+bmFtZSk7CisKKwkvKiBPaywgY3JlYXRlIHRoZSBuZXcgZW50cnkgdXNpbmcgdGhlIG5hbWUgb2YgdGhlIGV4aXN0aW5nIGFsaWFzICovCisJbGVuID0gY2VfbmFtZWxlbihhbGlhcyk7CisJbmV3ID0geGNhbGxvYygxLCBjYWNoZV9lbnRyeV9zaXplKGxlbikpOworCW1lbWNweShuZXctPm5hbWUsIGFsaWFzLT5uYW1lLCBsZW4pOworCWNvcHlfY2FjaGVfZW50cnkobmV3LCBjZSk7CisJZnJlZShjZSk7CisJcmV0dXJuIG5ldzsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX2ludGVudF90b19hZGQoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWlmICh3cml0ZV9zaGExX2ZpbGUoIiIsIDAsIGJsb2JfdHlwZSwgc2hhMSkpCisJCWRpZSgiY2Fubm90IGNyZWF0ZSBhbiBlbXB0eSBibG9iIGluIHRoZSBvYmplY3QgZGF0YWJhc2UiKTsKKwloYXNoY3B5KGNlLT5zaGExLCBzaGExKTsKK30KKworaW50IGFkZF90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKnN0LCBpbnQgZmxhZ3MpCit7CisJaW50IHNpemUsIG5hbWVsZW4sIHdhc19zYW1lOworCW1vZGVfdCBzdF9tb2RlID0gc3QtPnN0X21vZGU7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgKmFsaWFzOworCXVuc2lnbmVkIGNlX29wdGlvbiA9IENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRXxDRV9NQVRDSF9SQUNZX0lTX0RJUlRZOworCWludCB2ZXJib3NlID0gZmxhZ3MgJiAoQUREX0NBQ0hFX1ZFUkJPU0UgfCBBRERfQ0FDSEVfUFJFVEVORCk7CisJaW50IHByZXRlbmQgPSBmbGFncyAmIEFERF9DQUNIRV9QUkVURU5EOworCWludCBpbnRlbnRfb25seSA9IGZsYWdzICYgQUREX0NBQ0hFX0lOVEVOVDsKKwlpbnQgYWRkX29wdGlvbiA9IChBRERfQ0FDSEVfT0tfVE9fQUREfEFERF9DQUNIRV9PS19UT19SRVBMQUNFfAorCQkJICAoaW50ZW50X29ubHkgPyBBRERfQ0FDSEVfTkVXX09OTFkgOiAwKSk7CisKKwlpZiAoIVNfSVNSRUcoc3RfbW9kZSkgJiYgIVNfSVNMTksoc3RfbW9kZSkgJiYgIVNfSVNESVIoc3RfbW9kZSkpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiLCBwYXRoKTsKKworCW5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CisJaWYgKFNfSVNESVIoc3RfbW9kZSkpIHsKKwkJd2hpbGUgKG5hbWVsZW4gJiYgcGF0aFtuYW1lbGVuLTFdID09ICcvJykKKwkJCW5hbWVsZW4tLTsKKwl9CisJc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobmFtZWxlbik7CisJY2UgPSB4Y2FsbG9jKDEsIHNpemUpOworCW1lbWNweShjZS0+bmFtZSwgcGF0aCwgbmFtZWxlbik7CisJY2UtPmNlX25hbWVsZW4gPSBuYW1lbGVuOworCWlmICghaW50ZW50X29ubHkpCisJCWZpbGxfc3RhdF9jYWNoZV9pbmZvKGNlLCBzdCk7CisJZWxzZQorCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfSU5URU5UX1RPX0FERDsKKworCWlmICh0cnVzdF9leGVjdXRhYmxlX2JpdCAmJiBoYXNfc3ltbGlua3MpCisJCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUoc3RfbW9kZSk7CisJZWxzZSB7CisJCS8qIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIGVudHJ5LCBwaWNrIHRoZSBtb2RlIGJpdHMgYW5kIHR5cGUKKwkJICogZnJvbSBpdCwgb3RoZXJ3aXNlIGFzc3VtZSB1bmV4ZWN1dGFibGUgcmVndWxhciBmaWxlLgorCQkgKi8KKwkJc3RydWN0IGNhY2hlX2VudHJ5ICplbnQ7CisJCWludCBwb3MgPSBpbmRleF9uYW1lX3Bvc19hbHNvX3VubWVyZ2VkKGlzdGF0ZSwgcGF0aCwgbmFtZWxlbik7CisKKwkJZW50ID0gKDAgPD0gcG9zKSA/IGlzdGF0ZS0+Y2FjaGVbcG9zXSA6IE5VTEw7CisJCWNlLT5jZV9tb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoZW50LCBzdF9tb2RlKTsKKwl9CisKKwkvKiBXaGVuIGNvcmUuaWdub3JlY2FzZT10cnVlLCBkZXRlcm1pbmUgaWYgYSBkaXJlY3Rvcnkgb2YgdGhlIHNhbWUgbmFtZSBidXQgZGlmZmVyaW5nCisJICogY2FzZSBhbHJlYWR5IGV4aXN0cyB3aXRoaW4gdGhlIEdpdCByZXBvc2l0b3J5LiAgSWYgaXQgZG9lcywgZW5zdXJlIHRoZSBkaXJlY3RvcnkKKwkgKiBjYXNlIG9mIHRoZSBmaWxlIGJlaW5nIGFkZGVkIHRvIHRoZSByZXBvc2l0b3J5IG1hdGNoZXMgKGlzIGZvbGRlZCBpbnRvKSB0aGUgZXhpc3RpbmcKKwkgKiBlbnRyeSdzIGRpcmVjdG9yeSBjYXNlLgorCSAqLworCWlmIChpZ25vcmVfY2FzZSkgeworCQljb25zdCBjaGFyICpzdGFydFB0ciA9IGNlLT5uYW1lOworCQljb25zdCBjaGFyICpwdHIgPSBzdGFydFB0cjsKKwkJd2hpbGUgKCpwdHIpIHsKKwkJCXdoaWxlICgqcHRyICYmICpwdHIgIT0gJy8nKQorCQkJCSsrcHRyOworCQkJaWYgKCpwdHIgPT0gJy8nKSB7CisJCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpmb3VuZGNlOworCQkJCSsrcHRyOworCQkJCWZvdW5kY2UgPSBpbmRleF9uYW1lX2V4aXN0cygmdGhlX2luZGV4LCBjZS0+bmFtZSwgcHRyIC0gY2UtPm5hbWUsIGlnbm9yZV9jYXNlKTsKKwkJCQlpZiAoZm91bmRjZSkgeworCQkJCQltZW1jcHkoKHZvaWQgKilzdGFydFB0ciwgZm91bmRjZS0+bmFtZSArIChzdGFydFB0ciAtIGNlLT5uYW1lKSwgcHRyIC0gc3RhcnRQdHIpOworCQkJCQlzdGFydFB0ciA9IHB0cjsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlhbGlhcyA9IGluZGV4X25hbWVfZXhpc3RzKGlzdGF0ZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCBpZ25vcmVfY2FzZSk7CisJaWYgKGFsaWFzICYmICFjZV9zdGFnZShhbGlhcykgJiYgIWllX21hdGNoX3N0YXQoaXN0YXRlLCBhbGlhcywgc3QsIGNlX29wdGlvbikpIHsKKwkJLyogTm90aGluZyBjaGFuZ2VkLCByZWFsbHkgKi8KKwkJZnJlZShjZSk7CisJCWlmICghU19JU0dJVExJTksoYWxpYXMtPmNlX21vZGUpKQorCQkJY2VfbWFya191cHRvZGF0ZShhbGlhcyk7CisJCWFsaWFzLT5jZV9mbGFncyB8PSBDRV9BRERFRDsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghaW50ZW50X29ubHkpIHsKKwkJaWYgKGluZGV4X3BhdGgoY2UtPnNoYTEsIHBhdGgsIHN0LCBIQVNIX1dSSVRFX09CSkVDVCkpCisJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBpbmRleCBmaWxlICVzIiwgcGF0aCk7CisJfSBlbHNlCisJCXJlY29yZF9pbnRlbnRfdG9fYWRkKGNlKTsKKworCWlmIChpZ25vcmVfY2FzZSAmJiBhbGlhcyAmJiBkaWZmZXJlbnRfbmFtZShjZSwgYWxpYXMpKQorCQljZSA9IGNyZWF0ZV9hbGlhc19jZShjZSwgYWxpYXMpOworCWNlLT5jZV9mbGFncyB8PSBDRV9BRERFRDsKKworCS8qIEl0IHdhcyBzdXNwZWN0ZWQgdG8gYmUgcmFjaWx5IGNsZWFuLCBidXQgaXQgdHVybnMgb3V0IHRvIGJlIE9rICovCisJd2FzX3NhbWUgPSAoYWxpYXMgJiYKKwkJICAgICFjZV9zdGFnZShhbGlhcykgJiYKKwkJICAgICFoYXNoY21wKGFsaWFzLT5zaGExLCBjZS0+c2hhMSkgJiYKKwkJICAgIGNlLT5jZV9tb2RlID09IGFsaWFzLT5jZV9tb2RlKTsKKworCWlmIChwcmV0ZW5kKQorCQk7CisJZWxzZSBpZiAoYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgY2UsIGFkZF9vcHRpb24pKQorCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBhZGQgJXMgdG8gaW5kZXgiLHBhdGgpOworCWlmICh2ZXJib3NlICYmICF3YXNfc2FtZSkKKwkJcHJpbnRmKCJhZGQgJyVzJ1xuIiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhZGRfZmlsZV90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdGF0IHN0OworCWlmIChsc3RhdChwYXRoLCAmc3QpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBzdGF0ICclcyciLCBwYXRoKTsKKwlyZXR1cm4gYWRkX3RvX2luZGV4KGlzdGF0ZSwgcGF0aCwgJnN0LCBmbGFncyk7Cit9CisKK3N0cnVjdCBjYWNoZV9lbnRyeSAqbWFrZV9jYWNoZV9lbnRyeSh1bnNpZ25lZCBpbnQgbW9kZSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlLAorCQlpbnQgcmVmcmVzaCkKK3sKKwlpbnQgc2l6ZSwgbGVuOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlpZiAoIXZlcmlmeV9wYXRoKHBhdGgpKSB7CisJCWVycm9yKCJJbnZhbGlkIHBhdGggJyVzJyIsIHBhdGgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobGVuKTsKKwljZSA9IHhjYWxsb2MoMSwgc2l6ZSk7CisKKwloYXNoY3B5KGNlLT5zaGExLCBzaGExKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIGxlbik7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKHN0YWdlKTsKKwljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCisJaWYgKHJlZnJlc2gpCisJCXJldHVybiByZWZyZXNoX2NhY2hlX2VudHJ5KGNlLCAwKTsKKworCXJldHVybiBjZTsKK30KKworaW50IGNlX3NhbWVfbmFtZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmEsIHN0cnVjdCBjYWNoZV9lbnRyeSAqYikKK3sKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihhKTsKKwlyZXR1cm4gY2VfbmFtZWxlbihiKSA9PSBsZW4gJiYgIW1lbWNtcChhLT5uYW1lLCBiLT5uYW1lLCBsZW4pOworfQorCitpbnQgY2VfcGF0aF9tYXRjaChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCXJldHVybiBtYXRjaF9wYXRoc3BlY19kZXB0aChwYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwLCBOVUxMKTsKK30KKworLyoKKyAqIFdlIGZ1bmRhbWVudGFsbHkgZG9uJ3QgbGlrZSBzb21lIHBhdGhzOiB3ZSBkb24ndCB3YW50CisgKiBkb3Qgb3IgZG90LWRvdCBhbnl3aGVyZSwgYW5kIGZvciBvYnZpb3VzIHJlYXNvbnMgZG9uJ3QKKyAqIHdhbnQgdG8gcmVjdXJzZSBpbnRvICIuZ2l0IiBlaXRoZXIuCisgKgorICogQWxzbywgd2UgZG9uJ3Qgd2FudCBkb3VibGUgc2xhc2hlcyBvciBzbGFzaGVzIGF0IHRoZQorICogZW5kIHRoYXQgY2FuIG1ha2UgcGF0aG5hbWVzIGFtYmlndW91cy4KKyAqLworc3RhdGljIGludCB2ZXJpZnlfZG90ZmlsZShjb25zdCBjaGFyICpyZXN0KQoreworCS8qCisJICogVGhlIGZpcnN0IGNoYXJhY3RlciB3YXMgJy4nLCBidXQgdGhhdAorCSAqIGhhcyBhbHJlYWR5IGJlZW4gZGlzY2FyZGVkLCB3ZSBub3cgdGVzdAorCSAqIHRoZSByZXN0LgorCSAqLworCisJLyogIi4iIGlzIG5vdCBhbGxvd2VkICovCisJaWYgKCpyZXN0ID09ICdcMCcgfHwgaXNfZGlyX3NlcCgqcmVzdCkpCisJCXJldHVybiAwOworCisJc3dpdGNoICgqcmVzdCkgeworCS8qCisJICogIi5naXQiIGZvbGxvd2VkIGJ5ICBOVUwgb3Igc2xhc2ggaXMgYmFkLiBUaGlzCisJICogc2hhcmVzIHRoZSBwYXRoIGVuZCB0ZXN0IHdpdGggdGhlICIuLiIgY2FzZS4KKwkgKi8KKwljYXNlICdnJzoKKwkJaWYgKHJlc3RbMV0gIT0gJ2knKQorCQkJYnJlYWs7CisJCWlmIChyZXN0WzJdICE9ICd0JykKKwkJCWJyZWFrOworCQlyZXN0ICs9IDI7CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlICcuJzoKKwkJaWYgKHJlc3RbMV0gPT0gJ1wwJyB8fCBpc19kaXJfc2VwKHJlc3RbMV0pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitpbnQgdmVyaWZ5X3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyIGM7CisKKwlpZiAoaGFzX2Rvc19kcml2ZV9wcmVmaXgocGF0aCkpCisJCXJldHVybiAwOworCisJZ290byBpbnNpZGU7CisJZm9yICg7OykgeworCQlpZiAoIWMpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGlzX2Rpcl9zZXAoYykpIHsKK2luc2lkZToKKwkJCWMgPSAqcGF0aCsrOworCQkJaWYgKChjID09ICcuJyAmJiAhdmVyaWZ5X2RvdGZpbGUocGF0aCkpIHx8CisJCQkgICAgaXNfZGlyX3NlcChjKSB8fCBjID09ICdcMCcpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJYyA9ICpwYXRoKys7CisJfQorfQorCisvKgorICogRG8gd2UgaGF2ZSBhbm90aGVyIGZpbGUgdGhhdCBoYXMgdGhlIGJlZ2lubmluZyBjb21wb25lbnRzIGJlaW5nIGEKKyAqIHByb3BlciBzdXBlcnNldCBvZiB0aGUgbmFtZSB3ZSdyZSB0cnlpbmcgdG8gYWRkPworICovCitzdGF0aWMgaW50IGhhc19maWxlX25hbWUoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcywgaW50IG9rX3RvX3JlcGxhY2UpCit7CisJaW50IHJldHZhbCA9IDA7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCWludCBzdGFnZSA9IGNlX3N0YWdlKGNlKTsKKwljb25zdCBjaGFyICpuYW1lID0gY2UtPm5hbWU7CisKKwl3aGlsZSAocG9zIDwgaXN0YXRlLT5jYWNoZV9ucikgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnAgPSBpc3RhdGUtPmNhY2hlW3BvcysrXTsKKworCQlpZiAobGVuID49IGNlX25hbWVsZW4ocCkpCisJCQlicmVhazsKKwkJaWYgKG1lbWNtcChuYW1lLCBwLT5uYW1lLCBsZW4pKQorCQkJYnJlYWs7CisJCWlmIChjZV9zdGFnZShwKSAhPSBzdGFnZSkKKwkJCWNvbnRpbnVlOworCQlpZiAocC0+bmFtZVtsZW5dICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQlpZiAocC0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpCisJCQljb250aW51ZTsKKwkJcmV0dmFsID0gLTE7CisJCWlmICghb2tfdG9fcmVwbGFjZSkKKwkJCWJyZWFrOworCQlyZW1vdmVfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCAtLXBvcyk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBEbyB3ZSBoYXZlIGFub3RoZXIgZmlsZSB3aXRoIGEgcGF0aG5hbWUgdGhhdCBpcyBhIHByb3BlcgorICogc3Vic2V0IG9mIHRoZSBuYW1lIHdlJ3JlIHRyeWluZyB0byBhZGQ/CisgKi8KK3N0YXRpYyBpbnQgaGFzX2Rpcl9uYW1lKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcywgaW50IG9rX3RvX3JlcGxhY2UpCit7CisJaW50IHJldHZhbCA9IDA7CisJaW50IHN0YWdlID0gY2Vfc3RhZ2UoY2UpOworCWNvbnN0IGNoYXIgKm5hbWUgPSBjZS0+bmFtZTsKKwljb25zdCBjaGFyICpzbGFzaCA9IG5hbWUgKyBjZV9uYW1lbGVuKGNlKTsKKworCWZvciAoOzspIHsKKwkJaW50IGxlbjsKKworCQlmb3IgKDs7KSB7CisJCQlpZiAoKi0tc2xhc2ggPT0gJy8nKQorCQkJCWJyZWFrOworCQkJaWYgKHNsYXNoIDw9IGNlLT5uYW1lKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJbGVuID0gc2xhc2ggLSBuYW1lOworCisJCXBvcyA9IGluZGV4X25hbWVfc3RhZ2VfcG9zKGlzdGF0ZSwgbmFtZSwgbGVuLCBzdGFnZSk7CisJCWlmIChwb3MgPj0gMCkgeworCQkJLyoKKwkJCSAqIEZvdW5kIG9uZSwgYnV0IG5vdCBzbyBmYXN0LiAgVGhpcyBjb3VsZAorCQkJICogYmUgYSBtYXJrZXIgdGhhdCBzYXlzICJJIHdhcyBoZXJlLCBidXQKKwkJCSAqIEkgYW0gYmVpbmcgcmVtb3ZlZCIuICBTdWNoIGFuIGVudHJ5IGlzCisJCQkgKiBub3QgYSBwYXJ0IG9mIHRoZSByZXN1bHRpbmcgdHJlZSwgYW5kCisJCQkgKiBpdCBpcyBPayB0byBoYXZlIGEgZGlyZWN0b3J5IGF0IHRoZSBzYW1lCisJCQkgKiBwYXRoLgorCQkJICovCisJCQlpZiAoIShpc3RhdGUtPmNhY2hlW3Bvc10tPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKSkgeworCQkJCXJldHZhbCA9IC0xOworCQkJCWlmICghb2tfdG9fcmVwbGFjZSkKKwkJCQkJYnJlYWs7CisJCQkJcmVtb3ZlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgcG9zKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQllbHNlCisJCQlwb3MgPSAtcG9zLTE7CisKKwkJLyoKKwkJICogVHJpdmlhbCBvcHRpbWl6YXRpb246IGlmIHdlIGZpbmQgYW4gZW50cnkgdGhhdAorCQkgKiBhbHJlYWR5IG1hdGNoZXMgdGhlIHN1Yi1kaXJlY3RvcnksIHRoZW4gd2Uga25vdworCQkgKiB3ZSdyZSBvaywgYW5kIHdlIGNhbiBleGl0LgorCQkgKi8KKwkJd2hpbGUgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIpIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqcCA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwkJCWlmICgoY2VfbmFtZWxlbihwKSA8PSBsZW4pIHx8CisJCQkgICAgKHAtPm5hbWVbbGVuXSAhPSAnLycpIHx8CisJCQkgICAgbWVtY21wKHAtPm5hbWUsIG5hbWUsIGxlbikpCisJCQkJYnJlYWs7IC8qIG5vdCBvdXIgc3ViZGlyZWN0b3J5ICovCisJCQlpZiAoY2Vfc3RhZ2UocCkgPT0gc3RhZ2UgJiYgIShwLT5jZV9mbGFncyAmIENFX1JFTU9WRSkpCisJCQkJLyoKKwkJCQkgKiBwIGlzIGF0IHRoZSBzYW1lIHN0YWdlIGFzIG91ciBlbnRyeSwgYW5kCisJCQkJICogaXMgYSBzdWJkaXJlY3Rvcnkgb2Ygd2hhdCB3ZSBhcmUgbG9va2luZworCQkJCSAqIGF0LCBzbyB3ZSBjYW5ub3QgaGF2ZSBjb25mbGljdHMgYXQgb3VyCisJCQkJICogbGV2ZWwgb3IgYW55dGhpbmcgc2hvcnRlci4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJcG9zKys7CisJCX0KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogV2UgbWF5IGJlIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIGFscmVhZHkgaGF2ZSBwYXRoL2ZpbGUgYW5kIHBhdGgKKyAqIGlzIGJlaW5nIGFkZGVkLCBvciB3ZSBhbHJlYWR5IGhhdmUgcGF0aCBhbmQgcGF0aC9maWxlIGlzIGJlaW5nCisgKiBhZGRlZC4gIEVpdGhlciBvbmUgd291bGQgcmVzdWx0IGluIGEgbm9uc2Vuc2UgdHJlZSB0aGF0IGhhcyBwYXRoCisgKiB0d2ljZSB3aGVuIGdpdC13cml0ZS10cmVlIHRyaWVzIHRvIHdyaXRlIGl0IG91dC4gIFByZXZlbnQgaXQuCisgKgorICogSWYgb2stdG8tcmVwbGFjZSBpcyBzcGVjaWZpZWQsIHdlIHJlbW92ZSB0aGUgY29uZmxpY3RpbmcgZW50cmllcworICogZnJvbSB0aGUgY2FjaGUgc28gdGhlIGNhbGxlciBzaG91bGQgcmVjb21wdXRlIHRoZSBpbnNlcnQgcG9zaXRpb24uCisgKiBXaGVuIHRoaXMgaGFwcGVucywgd2UgcmV0dXJuIG5vbi16ZXJvLgorICovCitzdGF0aWMgaW50IGNoZWNrX2ZpbGVfZGlyZWN0b3J5X2NvbmZsaWN0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkJIGludCBwb3MsIGludCBva190b19yZXBsYWNlKQoreworCWludCByZXR2YWw7CisKKwkvKgorCSAqIFdoZW4gY2UgaXMgYW4gIkkgYW0gZ29pbmcgYXdheSIgZW50cnksIHdlIGFsbG93IGl0IHRvIGJlIGFkZGVkCisJICovCisJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIGNoZWNrIGlmIHRoZSBwYXRoIGlzIGEgc3ViLXBhdGggb2YgYSBzdWJzZXF1ZW50IHBhdGhuYW1lCisJICogZmlyc3QsIHNpbmNlIHJlbW92aW5nIHRob3NlIHdpbGwgbm90IGNoYW5nZSB0aGUgcG9zaXRpb24KKwkgKiBpbiB0aGUgYXJyYXkuCisJICovCisJcmV0dmFsID0gaGFzX2ZpbGVfbmFtZShpc3RhdGUsIGNlLCBwb3MsIG9rX3RvX3JlcGxhY2UpOworCisJLyoKKwkgKiBUaGVuIGNoZWNrIGlmIHRoZSBwYXRoIG1pZ2h0IGhhdmUgYSBjbGFzaGluZyBzdWItZGlyZWN0b3J5CisJICogYmVmb3JlIGl0LgorCSAqLworCXJldHVybiByZXR2YWwgKyBoYXNfZGlyX25hbWUoaXN0YXRlLCBjZSwgcG9zLCBva190b19yZXBsYWNlKTsKK30KKworc3RhdGljIGludCBhZGRfaW5kZXhfZW50cnlfd2l0aF9jaGVjayhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IG9wdGlvbikKK3sKKwlpbnQgcG9zOworCWludCBva190b19hZGQgPSBvcHRpb24gJiBBRERfQ0FDSEVfT0tfVE9fQUREOworCWludCBva190b19yZXBsYWNlID0gb3B0aW9uICYgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0U7CisJaW50IHNraXBfZGZfY2hlY2sgPSBvcHRpb24gJiBBRERfQ0FDSEVfU0tJUF9ERkNIRUNLOworCWludCBuZXdfb25seSA9IG9wdGlvbiAmIEFERF9DQUNIRV9ORVdfT05MWTsKKworCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKGlzdGF0ZS0+Y2FjaGVfdHJlZSwgY2UtPm5hbWUpOworCXBvcyA9IGluZGV4X25hbWVfc3RhZ2VfcG9zKGlzdGF0ZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCBjZV9zdGFnZShjZSkpOworCisJLyogZXhpc3RpbmcgbWF0Y2g/IEp1c3QgcmVwbGFjZSBpdC4gKi8KKwlpZiAocG9zID49IDApIHsKKwkJaWYgKCFuZXdfb25seSkKKwkJCXJlcGxhY2VfaW5kZXhfZW50cnkoaXN0YXRlLCBwb3MsIGNlKTsKKwkJcmV0dXJuIDA7CisJfQorCXBvcyA9IC1wb3MtMTsKKworCS8qCisJICogSW5zZXJ0aW5nIGEgbWVyZ2VkIGVudHJ5ICgic3RhZ2UgMCIpIGludG8gdGhlIGluZGV4CisJICogd2lsbCBhbHdheXMgcmVwbGFjZSBhbGwgbm9uLW1lcmdlZCBlbnRyaWVzLi4KKwkgKi8KKwlpZiAocG9zIDwgaXN0YXRlLT5jYWNoZV9uciAmJiBjZV9zdGFnZShjZSkgPT0gMCkgeworCQl3aGlsZSAoY2Vfc2FtZV9uYW1lKGlzdGF0ZS0+Y2FjaGVbcG9zXSwgY2UpKSB7CisJCQlva190b19hZGQgPSAxOworCQkJaWYgKCFyZW1vdmVfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCBwb3MpKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFva190b19hZGQpCisJCXJldHVybiAtMTsKKwlpZiAoIXZlcmlmeV9wYXRoKGNlLT5uYW1lKSkKKwkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIHBhdGggJyVzJyIsIGNlLT5uYW1lKTsKKworCWlmICghc2tpcF9kZl9jaGVjayAmJgorCSAgICBjaGVja19maWxlX2RpcmVjdG9yeV9jb25mbGljdChpc3RhdGUsIGNlLCBwb3MsIG9rX3RvX3JlcGxhY2UpKSB7CisJCWlmICghb2tfdG9fcmVwbGFjZSkKKwkJCXJldHVybiBlcnJvcigiJyVzJyBhcHBlYXJzIGFzIGJvdGggYSBmaWxlIGFuZCBhcyBhIGRpcmVjdG9yeSIsCisJCQkJICAgICBjZS0+bmFtZSk7CisJCXBvcyA9IGluZGV4X25hbWVfc3RhZ2VfcG9zKGlzdGF0ZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCBjZV9zdGFnZShjZSkpOworCQlwb3MgPSAtcG9zLTE7CisJfQorCXJldHVybiBwb3MgKyAxOworfQorCitpbnQgYWRkX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgb3B0aW9uKQoreworCWludCBwb3M7CisKKwlpZiAob3B0aW9uICYgQUREX0NBQ0hFX0pVU1RfQVBQRU5EKQorCQlwb3MgPSBpc3RhdGUtPmNhY2hlX25yOworCWVsc2UgeworCQlpbnQgcmV0OworCQlyZXQgPSBhZGRfaW5kZXhfZW50cnlfd2l0aF9jaGVjayhpc3RhdGUsIGNlLCBvcHRpb24pOworCQlpZiAocmV0IDw9IDApCisJCQlyZXR1cm4gcmV0OworCQlwb3MgPSByZXQgLSAxOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgYXJyYXkgaXMgYmlnIGVub3VnaCAuLiAqLworCWlmIChpc3RhdGUtPmNhY2hlX25yID09IGlzdGF0ZS0+Y2FjaGVfYWxsb2MpIHsKKwkJaXN0YXRlLT5jYWNoZV9hbGxvYyA9IGFsbG9jX25yKGlzdGF0ZS0+Y2FjaGVfYWxsb2MpOworCQlpc3RhdGUtPmNhY2hlID0geHJlYWxsb2MoaXN0YXRlLT5jYWNoZSwKKwkJCQkJaXN0YXRlLT5jYWNoZV9hbGxvYyAqIHNpemVvZihzdHJ1Y3QgY2FjaGVfZW50cnkgKikpOworCX0KKworCS8qIEFkZCBpdCBpbi4uICovCisJaXN0YXRlLT5jYWNoZV9ucisrOworCWlmIChpc3RhdGUtPmNhY2hlX25yID4gcG9zICsgMSkKKwkJbWVtbW92ZShpc3RhdGUtPmNhY2hlICsgcG9zICsgMSwKKwkJCWlzdGF0ZS0+Y2FjaGUgKyBwb3MsCisJCQkoaXN0YXRlLT5jYWNoZV9uciAtIHBvcyAtIDEpICogc2l6ZW9mKGNlKSk7CisJc2V0X2luZGV4X2VudHJ5KGlzdGF0ZSwgcG9zLCBjZSk7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICJyZWZyZXNoIiBkb2VzIG5vdCBjYWxjdWxhdGUgYSBuZXcgc2hhMSBmaWxlIG9yIGJyaW5nIHRoZQorICogY2FjaGUgdXAtdG8tZGF0ZSBmb3IgbW9kZS9jb250ZW50IGNoYW5nZXMuIEJ1dCB3aGF0IGl0CisgKiBfZG9lc18gZG8gaXMgdG8gInJlLW1hdGNoIiB0aGUgc3RhdCBpbmZvcm1hdGlvbiBvZiBhIGZpbGUKKyAqIHdpdGggdGhlIGNhY2hlLCBzbyB0aGF0IHlvdSBjYW4gcmVmcmVzaCB0aGUgY2FjaGUgZm9yIGEKKyAqIGZpbGUgdGhhdCBoYXNuJ3QgYmVlbiBjaGFuZ2VkIGJ1dCB3aGVyZSB0aGUgc3RhdCBlbnRyeSBpcworICogb3V0IG9mIGRhdGUuCisgKgorICogRm9yIGV4YW1wbGUsIHlvdSdkIHdhbnQgdG8gZG8gdGhpcyBhZnRlciBkb2luZyBhICJnaXQtcmVhZC10cmVlIiwKKyAqIHRvIGxpbmsgdXAgdGhlIHN0YXQgY2FjaGUgZGV0YWlscyB3aXRoIHRoZSBwcm9wZXIgZmlsZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlZnJlc2hfY2FjaGVfZW50KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgICAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IG9wdGlvbnMsIGludCAqZXJyLAorCQkJCQkgICAgIGludCAqY2hhbmdlZF9yZXQpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IGNhY2hlX2VudHJ5ICp1cGRhdGVkOworCWludCBjaGFuZ2VkLCBzaXplOworCWludCBpZ25vcmVfdmFsaWQgPSBvcHRpb25zICYgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEOworCWludCBpZ25vcmVfc2tpcF93b3JrdHJlZSA9IG9wdGlvbnMgJiBDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRTsKKworCWlmIChjZV91cHRvZGF0ZShjZSkpCisJCXJldHVybiBjZTsKKworCS8qCisJICogQ0VfVkFMSUQgb3IgQ0VfU0tJUF9XT1JLVFJFRSBtZWFucyB0aGUgdXNlciBwcm9taXNlZCB1cworCSAqIHRoYXQgdGhlIGNoYW5nZSB0byB0aGUgd29yayB0cmVlIGRvZXMgbm90IG1hdHRlciBhbmQgdG9sZAorCSAqIHVzIG5vdCB0byB3b3JyeS4KKwkgKi8KKwlpZiAoIWlnbm9yZV9za2lwX3dvcmt0cmVlICYmIGNlX3NraXBfd29ya3RyZWUoY2UpKSB7CisJCWNlX21hcmtfdXB0b2RhdGUoY2UpOworCQlyZXR1cm4gY2U7CisJfQorCWlmICghaWdub3JlX3ZhbGlkICYmIChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkpIHsKKwkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCXJldHVybiBjZTsKKwl9CisKKwlpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkgPCAwKSB7CisJCWlmIChlcnIpCisJCQkqZXJyID0gZXJybm87CisJCXJldHVybiBOVUxMOworCX0KKworCWNoYW5nZWQgPSBpZV9tYXRjaF9zdGF0KGlzdGF0ZSwgY2UsICZzdCwgb3B0aW9ucyk7CisJaWYgKGNoYW5nZWRfcmV0KQorCQkqY2hhbmdlZF9yZXQgPSBjaGFuZ2VkOworCWlmICghY2hhbmdlZCkgeworCQkvKgorCQkgKiBUaGUgcGF0aCBpcyB1bmNoYW5nZWQuICBJZiB3ZSB3ZXJlIHRvbGQgdG8gaWdub3JlCisJCSAqIHZhbGlkIGJpdCwgdGhlbiB3ZSBkaWQgdGhlIGFjdHVhbCBzdGF0IGNoZWNrIGFuZAorCQkgKiBmb3VuZCB0aGF0IHRoZSBlbnRyeSBpcyB1bm1vZGlmaWVkLiAgSWYgdGhlIGVudHJ5CisJCSAqIGlzIG5vdCBtYXJrZWQgVkFMSUQsIHRoaXMgaXMgdGhlIHBsYWNlIHRvIG1hcmsgaXQKKwkJICogdmFsaWQgYWdhaW4sIHVuZGVyICJhc3N1bWUgdW5jaGFuZ2VkIiBtb2RlLgorCQkgKi8KKwkJaWYgKGlnbm9yZV92YWxpZCAmJiBhc3N1bWVfdW5jaGFuZ2VkICYmCisJCSAgICAhKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSkKKwkJCTsgLyogbWFyayB0aGlzIG9uZSBWQUxJRCBhZ2FpbiAqLworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBXZSBkbyBub3QgbWFyayB0aGUgaW5kZXggaXRzZWxmICJtb2RpZmllZCIKKwkJCSAqIGJlY2F1c2UgQ0VfVVBUT0RBVEUgZmxhZyBpcyBpbi1jb3JlIG9ubHk7CisJCQkgKiB3ZSBhcmUgbm90IGdvaW5nIHRvIHdyaXRlIHRoaXMgY2hhbmdlIG91dC4KKwkJCSAqLworCQkJaWYgKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCQlyZXR1cm4gY2U7CisJCX0KKwl9CisKKwlpZiAoaWVfbW9kaWZpZWQoaXN0YXRlLCBjZSwgJnN0LCBvcHRpb25zKSkgeworCQlpZiAoZXJyKQorCQkJKmVyciA9IEVJTlZBTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc2l6ZSA9IGNlX3NpemUoY2UpOworCXVwZGF0ZWQgPSB4bWFsbG9jKHNpemUpOworCW1lbWNweSh1cGRhdGVkLCBjZSwgc2l6ZSk7CisJZmlsbF9zdGF0X2NhY2hlX2luZm8odXBkYXRlZCwgJnN0KTsKKwkvKgorCSAqIElmIGlnbm9yZV92YWxpZCBpcyBub3Qgc2V0LCB3ZSBzaG91bGQgbGVhdmUgQ0VfVkFMSUQgYml0CisJICogYWxvbmUuICBPdGhlcndpc2UsIHBhdGhzIG1hcmtlZCB3aXRoIC0tbm8tYXNzdW1lLXVuY2hhbmdlZAorCSAqIChpLmUuIHRoaW5ncyB0byBiZSBlZGl0ZWQpIHdpbGwgcmVhY3F1aXJlIENFX1ZBTElEIGJpdAorCSAqIGF1dG9tYXRpY2FsbHksIHdoaWNoIGlzIG5vdCByZWFsbHkgd2hhdCB3ZSB3YW50LgorCSAqLworCWlmICghaWdub3JlX3ZhbGlkICYmIGFzc3VtZV91bmNoYW5nZWQgJiYKKwkgICAgIShjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkpCisJCXVwZGF0ZWQtPmNlX2ZsYWdzICY9IH5DRV9WQUxJRDsKKworCXJldHVybiB1cGRhdGVkOworfQorCitzdGF0aWMgdm9pZCBzaG93X2ZpbGUoY29uc3QgY2hhciAqIGZtdCwgY29uc3QgY2hhciAqIG5hbWUsIGludCBpbl9wb3JjZWxhaW4sCisJCSAgICAgIGludCAqIGZpcnN0LCBjb25zdCBjaGFyICpoZWFkZXJfbXNnKQoreworCWlmIChpbl9wb3JjZWxhaW4gJiYgKmZpcnN0ICYmIGhlYWRlcl9tc2cpIHsKKwkJcHJpbnRmKCIlc1xuIiwgaGVhZGVyX21zZyk7CisJCSpmaXJzdCA9IDA7CisJfQorCXByaW50ZihmbXQsIG5hbWUpOworfQorCitpbnQgcmVmcmVzaF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICoqcGF0aHNwZWMsCisJCSAgY2hhciAqc2VlbiwgY29uc3QgY2hhciAqaGVhZGVyX21zZykKK3sKKwlpbnQgaTsKKwlpbnQgaGFzX2Vycm9ycyA9IDA7CisJaW50IHJlYWxseSA9IChmbGFncyAmIFJFRlJFU0hfUkVBTExZKSAhPSAwOworCWludCBhbGxvd191bm1lcmdlZCA9IChmbGFncyAmIFJFRlJFU0hfVU5NRVJHRUQpICE9IDA7CisJaW50IHF1aWV0ID0gKGZsYWdzICYgUkVGUkVTSF9RVUlFVCkgIT0gMDsKKwlpbnQgbm90X25ldyA9IChmbGFncyAmIFJFRlJFU0hfSUdOT1JFX01JU1NJTkcpICE9IDA7CisJaW50IGlnbm9yZV9zdWJtb2R1bGVzID0gKGZsYWdzICYgUkVGUkVTSF9JR05PUkVfU1VCTU9EVUxFUykgIT0gMDsKKwlpbnQgZmlyc3QgPSAxOworCWludCBpbl9wb3JjZWxhaW4gPSAoZmxhZ3MgJiBSRUZSRVNIX0lOX1BPUkNFTEFJTik7CisJdW5zaWduZWQgaW50IG9wdGlvbnMgPSByZWFsbHkgPyBDRV9NQVRDSF9JR05PUkVfVkFMSUQgOiAwOworCWNvbnN0IGNoYXIgKm1vZGlmaWVkX2ZtdDsKKwljb25zdCBjaGFyICpkZWxldGVkX2ZtdDsKKwljb25zdCBjaGFyICp0eXBlY2hhbmdlX2ZtdDsKKwljb25zdCBjaGFyICphZGRlZF9mbXQ7CisJY29uc3QgY2hhciAqdW5tZXJnZWRfZm10OworCisJbW9kaWZpZWRfZm10ID0gKGluX3BvcmNlbGFpbiA/ICJNXHQlc1xuIiA6ICIlczogbmVlZHMgdXBkYXRlXG4iKTsKKwlkZWxldGVkX2ZtdCA9IChpbl9wb3JjZWxhaW4gPyAiRFx0JXNcbiIgOiAiJXM6IG5lZWRzIHVwZGF0ZVxuIik7CisJdHlwZWNoYW5nZV9mbXQgPSAoaW5fcG9yY2VsYWluID8gIlRcdCVzXG4iIDogIiVzIG5lZWRzIHVwZGF0ZVxuIik7CisJYWRkZWRfZm10ID0gKGluX3BvcmNlbGFpbiA/ICJBXHQlc1xuIiA6ICIlcyBuZWVkcyB1cGRhdGVcbiIpOworCXVubWVyZ2VkX2ZtdCA9IChpbl9wb3JjZWxhaW4gPyAiVVx0JXNcbiIgOiAiJXM6IG5lZWRzIG1lcmdlXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsICpuZXc7CisJCWludCBjYWNoZV9lcnJubyA9IDA7CisJCWludCBjaGFuZ2VkID0gMDsKKwkJaW50IGZpbHRlcmVkID0gMDsKKworCQljZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWlmIChpZ25vcmVfc3VibW9kdWxlcyAmJiBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsKKworCQlpZiAocGF0aHNwZWMgJiYKKwkJICAgICFtYXRjaF9wYXRoc3BlYyhwYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwLCBzZWVuKSkKKwkJCWZpbHRlcmVkID0gMTsKKworCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCQl3aGlsZSAoKGkgPCBpc3RhdGUtPmNhY2hlX25yKSAmJgorCQkJICAgICAgICEgc3RyY21wKGlzdGF0ZS0+Y2FjaGVbaV0tPm5hbWUsIGNlLT5uYW1lKSkKKwkJCQlpKys7CisJCQlpLS07CisJCQlpZiAoYWxsb3dfdW5tZXJnZWQpCisJCQkJY29udGludWU7CisJCQlpZiAoIWZpbHRlcmVkKQorCQkJCXNob3dfZmlsZSh1bm1lcmdlZF9mbXQsIGNlLT5uYW1lLCBpbl9wb3JjZWxhaW4sCisJCQkJCSAgJmZpcnN0LCBoZWFkZXJfbXNnKTsKKwkJCWhhc19lcnJvcnMgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZmlsdGVyZWQpCisJCQljb250aW51ZTsKKworCQluZXcgPSByZWZyZXNoX2NhY2hlX2VudChpc3RhdGUsIGNlLCBvcHRpb25zLCAmY2FjaGVfZXJybm8sICZjaGFuZ2VkKTsKKwkJaWYgKG5ldyA9PSBjZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIW5ldykgeworCQkJY29uc3QgY2hhciAqZm10OworCisJCQlpZiAobm90X25ldyAmJiBjYWNoZV9lcnJubyA9PSBFTk9FTlQpCisJCQkJY29udGludWU7CisJCQlpZiAocmVhbGx5ICYmIGNhY2hlX2Vycm5vID09IEVJTlZBTCkgeworCQkJCS8qIElmIHdlIGFyZSBkb2luZyAtLXJlYWxseS1yZWZyZXNoIHRoYXQKKwkJCQkgKiBtZWFucyB0aGUgaW5kZXggaXMgbm90IHZhbGlkIGFueW1vcmUuCisJCQkJICovCisJCQkJY2UtPmNlX2ZsYWdzICY9IH5DRV9WQUxJRDsKKwkJCQlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgPSAxOworCQkJfQorCQkJaWYgKHF1aWV0KQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoY2FjaGVfZXJybm8gPT0gRU5PRU5UKQorCQkJCWZtdCA9IGRlbGV0ZWRfZm10OworCQkJZWxzZSBpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfSU5URU5UX1RPX0FERCkKKwkJCQlmbXQgPSBhZGRlZF9mbXQ7IC8qIG11c3QgYmUgYmVmb3JlIG90aGVyIGNoZWNrcyAqLworCQkJZWxzZSBpZiAoY2hhbmdlZCAmIFRZUEVfQ0hBTkdFRCkKKwkJCQlmbXQgPSB0eXBlY2hhbmdlX2ZtdDsKKwkJCWVsc2UKKwkJCQlmbXQgPSBtb2RpZmllZF9mbXQ7CisJCQlzaG93X2ZpbGUoZm10LAorCQkJCSAgY2UtPm5hbWUsIGluX3BvcmNlbGFpbiwgJmZpcnN0LCBoZWFkZXJfbXNnKTsKKwkJCWhhc19lcnJvcnMgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlyZXBsYWNlX2luZGV4X2VudHJ5KGlzdGF0ZSwgaSwgbmV3KTsKKwl9CisJcmV0dXJuIGhhc19lcnJvcnM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlZnJlc2hfY2FjaGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHJlYWxseSkKK3sKKwlyZXR1cm4gcmVmcmVzaF9jYWNoZV9lbnQoJnRoZV9pbmRleCwgY2UsIHJlYWxseSwgTlVMTCwgTlVMTCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbmRleCBGaWxlIEkvTworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElOREVYX0ZPUk1BVF9ERUZBVUxUIDMKKworLyoKKyAqIGRldi9pbm8vdWlkL2dpZC9zaXplIGFyZSBhbHNvIGp1c3QgdHJhY2tlZCB0byB0aGUgbG93IDMyIGJpdHMKKyAqIEFnYWluIC0gdGhpcyBpcyBqdXN0IGEgKHZlcnkgc3Ryb25nIGluIHByYWN0aWNlKSBoZXVyaXN0aWMgdGhhdAorICogdGhlIGlub2RlIGhhc24ndCBjaGFuZ2VkLgorICoKKyAqIFdlIHNhdmUgdGhlIGZpZWxkcyBpbiBiaWctZW5kaWFuIG9yZGVyIHRvIGFsbG93IHVzaW5nIHRoZQorICogaW5kZXggZmlsZSBvdmVyIE5GUyB0cmFuc3BhcmVudGx5LgorICovCitzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5IHsKKwlzdHJ1Y3QgY2FjaGVfdGltZSBjdGltZTsKKwlzdHJ1Y3QgY2FjaGVfdGltZSBtdGltZTsKKwl1bnNpZ25lZCBpbnQgZGV2OworCXVuc2lnbmVkIGludCBpbm87CisJdW5zaWduZWQgaW50IG1vZGU7CisJdW5zaWduZWQgaW50IHVpZDsKKwl1bnNpZ25lZCBpbnQgZ2lkOworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdW5zaWduZWQgc2hvcnQgZmxhZ3M7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCisvKgorICogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB3aGVuIENFX0VYVEVOREVEIGJpdCBpcyAxCisgKiBUaGUgc3RydWN0IG11c3QgbWF0Y2ggb25kaXNrX2NhY2hlX2VudHJ5IGV4YWN0bHkgZnJvbQorICogY3RpbWUgdGlsbCBmbGFncworICovCitzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5X2V4dGVuZGVkIHsKKwlzdHJ1Y3QgY2FjaGVfdGltZSBjdGltZTsKKwlzdHJ1Y3QgY2FjaGVfdGltZSBtdGltZTsKKwl1bnNpZ25lZCBpbnQgZGV2OworCXVuc2lnbmVkIGludCBpbm87CisJdW5zaWduZWQgaW50IG1vZGU7CisJdW5zaWduZWQgaW50IHVpZDsKKwl1bnNpZ25lZCBpbnQgZ2lkOworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdW5zaWduZWQgc2hvcnQgZmxhZ3M7CisJdW5zaWduZWQgc2hvcnQgZmxhZ3MyOworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsgLyogbW9yZSAqLworfTsKKworLyogVGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgdjMgb3IgbG93ZXIgKi8KKyNkZWZpbmUgYWxpZ25fZmxleF9uYW1lKFNUUlVDVCxsZW4pICgob2Zmc2V0b2Yoc3RydWN0IFNUUlVDVCxuYW1lKSArIChsZW4pICsgOCkgJiB+NykKKyNkZWZpbmUgb25kaXNrX2NhY2hlX2VudHJ5X3NpemUobGVuKSBhbGlnbl9mbGV4X25hbWUob25kaXNrX2NhY2hlX2VudHJ5LGxlbikKKyNkZWZpbmUgb25kaXNrX2NhY2hlX2VudHJ5X2V4dGVuZGVkX3NpemUobGVuKSBhbGlnbl9mbGV4X25hbWUob25kaXNrX2NhY2hlX2VudHJ5X2V4dGVuZGVkLGxlbikKKyNkZWZpbmUgb25kaXNrX2NlX3NpemUoY2UpICgoKGNlKS0+Y2VfZmxhZ3MgJiBDRV9FWFRFTkRFRCkgPyBcCisJCQkgICAgb25kaXNrX2NhY2hlX2VudHJ5X2V4dGVuZGVkX3NpemUoY2VfbmFtZWxlbihjZSkpIDogXAorCQkJICAgIG9uZGlza19jYWNoZV9lbnRyeV9zaXplKGNlX25hbWVsZW4oY2UpKSkKKworc3RhdGljIGludCB2ZXJpZnlfaGRyKHN0cnVjdCBjYWNoZV9oZWFkZXIgKmhkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWdpdF9TSEFfQ1RYIGM7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgaGRyX3ZlcnNpb247CisKKwlpZiAoaGRyLT5oZHJfc2lnbmF0dXJlICE9IGh0b25sKENBQ0hFX1NJR05BVFVSRSkpCisJCXJldHVybiBlcnJvcigiYmFkIHNpZ25hdHVyZSIpOworCWhkcl92ZXJzaW9uID0gbnRvaGwoaGRyLT5oZHJfdmVyc2lvbik7CisJaWYgKGhkcl92ZXJzaW9uIDwgMiB8fCA0IDwgaGRyX3ZlcnNpb24pCisJCXJldHVybiBlcnJvcigiYmFkIGluZGV4IHZlcnNpb24gJWQiLCBoZHJfdmVyc2lvbik7CisJZ2l0X1NIQTFfSW5pdCgmYyk7CisJZ2l0X1NIQTFfVXBkYXRlKCZjLCBoZHIsIHNpemUgLSAyMCk7CisJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmMpOworCWlmIChoYXNoY21wKHNoYTEsICh1bnNpZ25lZCBjaGFyICopaGRyICsgc2l6ZSAtIDIwKSkKKwkJcmV0dXJuIGVycm9yKCJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfaW5kZXhfZXh0ZW5zaW9uKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCWNvbnN0IGNoYXIgKmV4dCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzeikKK3sKKwlzd2l0Y2ggKENBQ0hFX0VYVChleHQpKSB7CisJY2FzZSBDQUNIRV9FWFRfVFJFRToKKwkJaXN0YXRlLT5jYWNoZV90cmVlID0gY2FjaGVfdHJlZV9yZWFkKGRhdGEsIHN6KTsKKwkJYnJlYWs7CisJY2FzZSBDQUNIRV9FWFRfUkVTT0xWRV9VTkRPOgorCQlpc3RhdGUtPnJlc29sdmVfdW5kbyA9IHJlc29sdmVfdW5kb19yZWFkKGRhdGEsIHN6KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKCpleHQgPCAnQScgfHwgJ1onIDwgKmV4dCkKKwkJCXJldHVybiBlcnJvcigiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiLAorCQkJCSAgICAgZXh0KTsKKwkJZnByaW50ZihzdGRlcnIsICJpZ25vcmluZyAlLjRzIGV4dGVuc2lvblxuIiwgZXh0KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcmVhZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlyZXR1cm4gcmVhZF9pbmRleF9mcm9tKGlzdGF0ZSwgZ2V0X2luZGV4X2ZpbGUoKSk7Cit9CisKKyNpZm5kZWYgTkVFRFNfQUxJR05FRF9BQ0NFU1MKKyNkZWZpbmUgbnRvaF9zKHZhcikgbnRvaHModmFyKQorI2RlZmluZSBudG9oX2wodmFyKSBudG9obCh2YXIpCisjZWxzZQorc3RhdGljIGlubGluZSB1aW50MTZfdCBudG9oX3NfZm9yY2VfYWxpZ24odm9pZCAqcCkKK3sKKwl1aW50MTZfdCB4OworCW1lbWNweSgmeCwgcCwgc2l6ZW9mKHgpKTsKKwlyZXR1cm4gbnRvaHMoeCk7Cit9CitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG50b2hfbF9mb3JjZV9hbGlnbih2b2lkICpwKQoreworCXVpbnQzMl90IHg7CisJbWVtY3B5KCZ4LCBwLCBzaXplb2YoeCkpOworCXJldHVybiBudG9obCh4KTsKK30KKyNkZWZpbmUgbnRvaF9zKHZhcikgbnRvaF9zX2ZvcmNlX2FsaWduKCYodmFyKSkKKyNkZWZpbmUgbnRvaF9sKHZhcikgbnRvaF9sX2ZvcmNlX2FsaWduKCYodmFyKSkKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpjYWNoZV9lbnRyeV9mcm9tX29uZGlzayhzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5ICpvbmRpc2ssCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkJCQkgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0geG1hbGxvYyhjYWNoZV9lbnRyeV9zaXplKGxlbikpOworCisJY2UtPmNlX2N0aW1lLnNlYyA9IG50b2hfbChvbmRpc2stPmN0aW1lLnNlYyk7CisJY2UtPmNlX210aW1lLnNlYyA9IG50b2hfbChvbmRpc2stPm10aW1lLnNlYyk7CisJY2UtPmNlX2N0aW1lLm5zZWMgPSBudG9oX2wob25kaXNrLT5jdGltZS5uc2VjKTsKKwljZS0+Y2VfbXRpbWUubnNlYyA9IG50b2hfbChvbmRpc2stPm10aW1lLm5zZWMpOworCWNlLT5jZV9kZXYgICA9IG50b2hfbChvbmRpc2stPmRldik7CisJY2UtPmNlX2lubyAgID0gbnRvaF9sKG9uZGlzay0+aW5vKTsKKwljZS0+Y2VfbW9kZSAgPSBudG9oX2wob25kaXNrLT5tb2RlKTsKKwljZS0+Y2VfdWlkICAgPSBudG9oX2wob25kaXNrLT51aWQpOworCWNlLT5jZV9naWQgICA9IG50b2hfbChvbmRpc2stPmdpZCk7CisJY2UtPmNlX3NpemUgID0gbnRvaF9sKG9uZGlzay0+c2l6ZSk7CisJY2UtPmNlX2ZsYWdzID0gZmxhZ3MgJiB+Q0VfTkFNRU1BU0s7CisJY2UtPmNlX25hbWVsZW4gPSBsZW47CisJaGFzaGNweShjZS0+c2hhMSwgb25kaXNrLT5zaGExKTsKKwltZW1jcHkoY2UtPm5hbWUsIG5hbWUsIGxlbik7CisJY2UtPm5hbWVbbGVuXSA9ICdcMCc7CisJcmV0dXJuIGNlOworfQorCisvKgorICogQWRqYWNlbnQgY2FjaGUgZW50cmllcyB0ZW5kIHRvIHNoYXJlIHRoZSBsZWFkaW5nIHBhdGhzLCBzbyBpdCBtYWtlcworICogc2Vuc2UgdG8gb25seSBzdG9yZSB0aGUgZGlmZmVyZW5jZXMgaW4gbGF0ZXIgZW50cmllcy4gIEluIHRoZSB2NAorICogb24tZGlzayBmb3JtYXQgb2YgdGhlIGluZGV4LCBlYWNoIG9uLWRpc2sgY2FjaGUgZW50cnkgc3RvcmVzIHRoZQorICogbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHN0cmlwcGVkIGZyb20gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbmFtZSwKKyAqIGFuZCB0aGUgYnl0ZXMgdG8gYXBwZW5kIHRvIHRoZSByZXN1bHQsIHRvIGNvbWUgdXAgd2l0aCBpdHMgbmFtZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXhwYW5kX25hbWVfZmllbGQoc3RydWN0IHN0cmJ1ZiAqbmFtZSwgY29uc3QgY2hhciAqY3BfKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVwLCAqY3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKWNwXzsKKwlzaXplX3QgbGVuID0gZGVjb2RlX3ZhcmludCgmY3ApOworCisJaWYgKG5hbWUtPmxlbiA8IGxlbikKKwkJZGllKCJtYWxmb3JtZWQgbmFtZSBmaWVsZCBpbiB0aGUgaW5kZXgiKTsKKwlzdHJidWZfcmVtb3ZlKG5hbWUsIG5hbWUtPmxlbiAtIGxlbiwgbGVuKTsKKwlmb3IgKGVwID0gY3A7ICplcDsgZXArKykKKwkJOyAvKiBmaW5kIHRoZSBlbmQgKi8KKwlzdHJidWZfYWRkKG5hbWUsIGNwLCBlcCAtIGNwKTsKKwlyZXR1cm4gKGNvbnN0IGNoYXIgKillcCArIDEgLSBjcF87Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNyZWF0ZV9mcm9tX2Rpc2soc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSAqb25kaXNrLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqZW50X3NpemUsCisJCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpwcmV2aW91c19uYW1lKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJc2l6ZV90IGxlbjsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBmbGFnczsKKworCS8qIE9uLWRpc2sgZmxhZ3MgYXJlIGp1c3QgMTYgYml0cyAqLworCWZsYWdzID0gbnRvaF9zKG9uZGlzay0+ZmxhZ3MpOworCWxlbiA9IGZsYWdzICYgQ0VfTkFNRU1BU0s7CisKKwlpZiAoZmxhZ3MgJiBDRV9FWFRFTkRFRCkgeworCQlzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5X2V4dGVuZGVkICpvbmRpc2syOworCQlpbnQgZXh0ZW5kZWRfZmxhZ3M7CisJCW9uZGlzazIgPSAoc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeV9leHRlbmRlZCAqKW9uZGlzazsKKwkJZXh0ZW5kZWRfZmxhZ3MgPSBudG9oX3Mob25kaXNrMi0+ZmxhZ3MyKSA8PCAxNjsKKwkJLyogV2UgZG8gbm90IHlldCB1bmRlcnN0YW5kIGFueSBiaXQgb3V0IG9mIENFX0VYVEVOREVEX0ZMQUdTICovCisJCWlmIChleHRlbmRlZF9mbGFncyAmIH5DRV9FWFRFTkRFRF9GTEFHUykKKwkJCWRpZSgiVW5rbm93biBpbmRleCBlbnRyeSBmb3JtYXQgJTA4eCIsIGV4dGVuZGVkX2ZsYWdzKTsKKwkJZmxhZ3MgfD0gZXh0ZW5kZWRfZmxhZ3M7CisJCW5hbWUgPSBvbmRpc2syLT5uYW1lOworCX0KKwllbHNlCisJCW5hbWUgPSBvbmRpc2stPm5hbWU7CisKKwlpZiAoIXByZXZpb3VzX25hbWUpIHsKKwkJLyogdjMgYW5kIGVhcmxpZXIgKi8KKwkJaWYgKGxlbiA9PSBDRV9OQU1FTUFTSykKKwkJCWxlbiA9IHN0cmxlbihuYW1lKTsKKwkJY2UgPSBjYWNoZV9lbnRyeV9mcm9tX29uZGlzayhvbmRpc2ssIGZsYWdzLCBuYW1lLCBsZW4pOworCisJCSplbnRfc2l6ZSA9IG9uZGlza19jZV9zaXplKGNlKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGNvbnN1bWVkOworCQljb25zdW1lZCA9IGV4cGFuZF9uYW1lX2ZpZWxkKHByZXZpb3VzX25hbWUsIG5hbWUpOworCQljZSA9IGNhY2hlX2VudHJ5X2Zyb21fb25kaXNrKG9uZGlzaywgZmxhZ3MsCisJCQkJCSAgICAgcHJldmlvdXNfbmFtZS0+YnVmLAorCQkJCQkgICAgIHByZXZpb3VzX25hbWUtPmxlbik7CisKKwkJKmVudF9zaXplID0gKG5hbWUgLSAoKGNoYXIgKilvbmRpc2spKSArIGNvbnN1bWVkOworCX0KKwlyZXR1cm4gY2U7Cit9CisKKy8qIHJlbWVtYmVyIHRvIGRpc2NhcmRfY2FjaGUoKSBiZWZvcmUgcmVhZGluZyBhIGRpZmZlcmVudCBjYWNoZSEgKi8KK2ludCByZWFkX2luZGV4X2Zyb20oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGZkLCBpOworCXN0cnVjdCBzdGF0IHN0OworCXVuc2lnbmVkIGxvbmcgc3JjX29mZnNldDsKKwlzdHJ1Y3QgY2FjaGVfaGVhZGVyICpoZHI7CisJdm9pZCAqbW1hcDsKKwlzaXplX3QgbW1hcF9zaXplOworCXN0cnVjdCBzdHJidWYgcHJldmlvdXNfbmFtZV9idWYgPSBTVFJCVUZfSU5JVCwgKnByZXZpb3VzX25hbWU7CisKKwlpZiAoaXN0YXRlLT5pbml0aWFsaXplZCkKKwkJcmV0dXJuIGlzdGF0ZS0+Y2FjaGVfbnI7CisKKwlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPSAwOworCWlzdGF0ZS0+dGltZXN0YW1wLm5zZWMgPSAwOworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJCWRpZV9lcnJubygiaW5kZXggZmlsZSBvcGVuIGZhaWxlZCIpOworCX0KKworCWlmIChmc3RhdChmZCwgJnN0KSkKKwkJZGllX2Vycm5vKCJjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIpOworCisJbW1hcF9zaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKwlpZiAobW1hcF9zaXplIDwgc2l6ZW9mKHN0cnVjdCBjYWNoZV9oZWFkZXIpICsgMjApCisJCWRpZSgiaW5kZXggZmlsZSBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQiKTsKKworCW1tYXAgPSB4bW1hcChOVUxMLCBtbWFwX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJaWYgKG1tYXAgPT0gTUFQX0ZBSUxFRCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiKTsKKwljbG9zZShmZCk7CisKKwloZHIgPSBtbWFwOworCWlmICh2ZXJpZnlfaGRyKGhkciwgbW1hcF9zaXplKSA8IDApCisJCWdvdG8gdW5tYXA7CisKKwlpc3RhdGUtPnZlcnNpb24gPSBudG9obChoZHItPmhkcl92ZXJzaW9uKTsKKwlpc3RhdGUtPmNhY2hlX25yID0gbnRvaGwoaGRyLT5oZHJfZW50cmllcyk7CisJaXN0YXRlLT5jYWNoZV9hbGxvYyA9IGFsbG9jX25yKGlzdGF0ZS0+Y2FjaGVfbnIpOworCWlzdGF0ZS0+Y2FjaGUgPSB4Y2FsbG9jKGlzdGF0ZS0+Y2FjaGVfYWxsb2MsIHNpemVvZihzdHJ1Y3QgY2FjaGVfZW50cnkgKikpOworCWlzdGF0ZS0+aW5pdGlhbGl6ZWQgPSAxOworCisJaWYgKGlzdGF0ZS0+dmVyc2lvbiA9PSA0KQorCQlwcmV2aW91c19uYW1lID0gJnByZXZpb3VzX25hbWVfYnVmOworCWVsc2UKKwkJcHJldmlvdXNfbmFtZSA9IE5VTEw7CisKKwlzcmNfb2Zmc2V0ID0gc2l6ZW9mKCpoZHIpOworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSAqZGlza19jZTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJdW5zaWduZWQgbG9uZyBjb25zdW1lZDsKKworCQlkaXNrX2NlID0gKHN0cnVjdCBvbmRpc2tfY2FjaGVfZW50cnkgKikoKGNoYXIgKiltbWFwICsgc3JjX29mZnNldCk7CisJCWNlID0gY3JlYXRlX2Zyb21fZGlzayhkaXNrX2NlLCAmY29uc3VtZWQsIHByZXZpb3VzX25hbWUpOworCQlzZXRfaW5kZXhfZW50cnkoaXN0YXRlLCBpLCBjZSk7CisKKwkJc3JjX29mZnNldCArPSBjb25zdW1lZDsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnByZXZpb3VzX25hbWVfYnVmKTsKKwlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPSBzdC5zdF9tdGltZTsKKwlpc3RhdGUtPnRpbWVzdGFtcC5uc2VjID0gU1RfTVRJTUVfTlNFQyhzdCk7CisKKwl3aGlsZSAoc3JjX29mZnNldCA8PSBtbWFwX3NpemUgLSAyMCAtIDgpIHsKKwkJLyogQWZ0ZXIgYW4gYXJyYXkgb2YgYWN0aXZlX25yIGluZGV4IGVudHJpZXMsCisJCSAqIHRoZXJlIGNhbiBiZSBhcmJpdHJhcnkgbnVtYmVyIG9mIGV4dGVuZGVkCisJCSAqIHNlY3Rpb25zLCBlYWNoIG9mIHdoaWNoIGlzIHByZWZpeGVkIHdpdGgKKwkJICogZXh0ZW5zaW9uIG5hbWUgKDQtYnl0ZSkgYW5kIHNlY3Rpb24gbGVuZ3RoCisJCSAqIGluIDQtYnl0ZSBuZXR3b3JrIGJ5dGUgb3JkZXIuCisJCSAqLworCQl1aW50MzJfdCBleHRzaXplOworCQltZW1jcHkoJmV4dHNpemUsIChjaGFyICopbW1hcCArIHNyY19vZmZzZXQgKyA0LCA0KTsKKwkJZXh0c2l6ZSA9IG50b2hsKGV4dHNpemUpOworCQlpZiAocmVhZF9pbmRleF9leHRlbnNpb24oaXN0YXRlLAorCQkJCQkgKGNvbnN0IGNoYXIgKikgbW1hcCArIHNyY19vZmZzZXQsCisJCQkJCSAoY2hhciAqKSBtbWFwICsgc3JjX29mZnNldCArIDgsCisJCQkJCSBleHRzaXplKSA8IDApCisJCQlnb3RvIHVubWFwOworCQlzcmNfb2Zmc2V0ICs9IDg7CisJCXNyY19vZmZzZXQgKz0gZXh0c2l6ZTsKKwl9CisJbXVubWFwKG1tYXAsIG1tYXBfc2l6ZSk7CisJcmV0dXJuIGlzdGF0ZS0+Y2FjaGVfbnI7CisKK3VubWFwOgorCW11bm1hcChtbWFwLCBtbWFwX3NpemUpOworCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7Cit9CisKK2ludCBpc19pbmRleF91bmJvcm4oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJcmV0dXJuICghaXN0YXRlLT5jYWNoZV9uciAmJiAhaXN0YXRlLT50aW1lc3RhbXAuc2VjKTsKK30KKworaW50IGRpc2NhcmRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKQorCQlmcmVlKGlzdGF0ZS0+Y2FjaGVbaV0pOworCXJlc29sdmVfdW5kb19jbGVhcl9pbmRleChpc3RhdGUpOworCWlzdGF0ZS0+Y2FjaGVfbnIgPSAwOworCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDA7CisJaXN0YXRlLT50aW1lc3RhbXAuc2VjID0gMDsKKwlpc3RhdGUtPnRpbWVzdGFtcC5uc2VjID0gMDsKKwlpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCA9IDA7CisJZnJlZV9oYXNoKCZpc3RhdGUtPm5hbWVfaGFzaCk7CisJY2FjaGVfdHJlZV9mcmVlKCYoaXN0YXRlLT5jYWNoZV90cmVlKSk7CisJaXN0YXRlLT5pbml0aWFsaXplZCA9IDA7CisKKwkvKiBubyBuZWVkIHRvIHRocm93IGF3YXkgYWxsb2NhdGVkIGFjdGl2ZV9jYWNoZSAqLworCXJldHVybiAwOworfQorCitpbnQgdW5tZXJnZWRfaW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlpZiAoY2Vfc3RhZ2UoaXN0YXRlLT5jYWNoZVtpXSkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV1JJVEVfQlVGRkVSX1NJWkUgODE5Mgorc3RhdGljIHVuc2lnbmVkIGNoYXIgd3JpdGVfYnVmZmVyW1dSSVRFX0JVRkZFUl9TSVpFXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX2J1ZmZlcl9sZW47CisKK3N0YXRpYyBpbnQgY2Vfd3JpdGVfZmx1c2goZ2l0X1NIQV9DVFggKmNvbnRleHQsIGludCBmZCkKK3sKKwl1bnNpZ25lZCBpbnQgYnVmZmVyZWQgPSB3cml0ZV9idWZmZXJfbGVuOworCWlmIChidWZmZXJlZCkgeworCQlnaXRfU0hBMV9VcGRhdGUoY29udGV4dCwgd3JpdGVfYnVmZmVyLCBidWZmZXJlZCk7CisJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCB3cml0ZV9idWZmZXIsIGJ1ZmZlcmVkKSAhPSBidWZmZXJlZCkKKwkJCXJldHVybiAtMTsKKwkJd3JpdGVfYnVmZmVyX2xlbiA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNlX3dyaXRlKGdpdF9TSEFfQ1RYICpjb250ZXh0LCBpbnQgZmQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJd2hpbGUgKGxlbikgeworCQl1bnNpZ25lZCBpbnQgYnVmZmVyZWQgPSB3cml0ZV9idWZmZXJfbGVuOworCQl1bnNpZ25lZCBpbnQgcGFydGlhbCA9IFdSSVRFX0JVRkZFUl9TSVpFIC0gYnVmZmVyZWQ7CisJCWlmIChwYXJ0aWFsID4gbGVuKQorCQkJcGFydGlhbCA9IGxlbjsKKwkJbWVtY3B5KHdyaXRlX2J1ZmZlciArIGJ1ZmZlcmVkLCBkYXRhLCBwYXJ0aWFsKTsKKwkJYnVmZmVyZWQgKz0gcGFydGlhbDsKKwkJaWYgKGJ1ZmZlcmVkID09IFdSSVRFX0JVRkZFUl9TSVpFKSB7CisJCQl3cml0ZV9idWZmZXJfbGVuID0gYnVmZmVyZWQ7CisJCQlpZiAoY2Vfd3JpdGVfZmx1c2goY29udGV4dCwgZmQpKQorCQkJCXJldHVybiAtMTsKKwkJCWJ1ZmZlcmVkID0gMDsKKwkJfQorCQl3cml0ZV9idWZmZXJfbGVuID0gYnVmZmVyZWQ7CisJCWxlbiAtPSBwYXJ0aWFsOworCQlkYXRhID0gKGNoYXIgKikgZGF0YSArIHBhcnRpYWw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2luZGV4X2V4dF9oZWFkZXIoZ2l0X1NIQV9DVFggKmNvbnRleHQsIGludCBmZCwKKwkJCQkgIHVuc2lnbmVkIGludCBleHQsIHVuc2lnbmVkIGludCBzeikKK3sKKwlleHQgPSBodG9ubChleHQpOworCXN6ID0gaHRvbmwoc3opOworCXJldHVybiAoKGNlX3dyaXRlKGNvbnRleHQsIGZkLCAmZXh0LCA0KSA8IDApIHx8CisJCShjZV93cml0ZShjb250ZXh0LCBmZCwgJnN6LCA0KSA8IDApKSA/IC0xIDogMDsKK30KKworc3RhdGljIGludCBjZV9mbHVzaChnaXRfU0hBX0NUWCAqY29udGV4dCwgaW50IGZkKQoreworCXVuc2lnbmVkIGludCBsZWZ0ID0gd3JpdGVfYnVmZmVyX2xlbjsKKworCWlmIChsZWZ0KSB7CisJCXdyaXRlX2J1ZmZlcl9sZW4gPSAwOworCQlnaXRfU0hBMV9VcGRhdGUoY29udGV4dCwgd3JpdGVfYnVmZmVyLCBsZWZ0KTsKKwl9CisKKwkvKiBGbHVzaCBmaXJzdCBpZiBub3QgZW5vdWdoIHNwYWNlIGZvciBTSEExIHNpZ25hdHVyZSAqLworCWlmIChsZWZ0ICsgMjAgPiBXUklURV9CVUZGRVJfU0laRSkgeworCQlpZiAod3JpdGVfaW5fZnVsbChmZCwgd3JpdGVfYnVmZmVyLCBsZWZ0KSAhPSBsZWZ0KQorCQkJcmV0dXJuIC0xOworCQlsZWZ0ID0gMDsKKwl9CisKKwkvKiBBcHBlbmQgdGhlIFNIQTEgc2lnbmF0dXJlIGF0IHRoZSBlbmQgKi8KKwlnaXRfU0hBMV9GaW5hbCh3cml0ZV9idWZmZXIgKyBsZWZ0LCBjb250ZXh0KTsKKwlsZWZ0ICs9IDIwOworCXJldHVybiAod3JpdGVfaW5fZnVsbChmZCwgd3JpdGVfYnVmZmVyLCBsZWZ0KSAhPSBsZWZ0KSA/IC0xIDogMDsKK30KKworc3RhdGljIHZvaWQgY2Vfc211ZGdlX3JhY2lseV9jbGVhbl9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCS8qCisJICogVGhlIG9ubHkgdGhpbmcgd2UgY2FyZSBhYm91dCBpbiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHNtdWRnZSB0aGUKKwkgKiBmYWxzZWx5IGNsZWFuIGVudHJ5IGR1ZSB0byB0b3VjaC11cGRhdGUtdG91Y2ggcmFjZSwgc28gd2UgbGVhdmUKKwkgKiBldmVyeXRoaW5nIGVsc2UgYXMgdGhleSBhcmUuICBXZSBhcmUgY2FsbGVkIGZvciBlbnRyaWVzIHdob3NlCisJICogY2VfbXRpbWUgbWF0Y2ggdGhlIGluZGV4IGZpbGUgbXRpbWUuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBhY3R1YWxseSBkb2VzIG5vdCBkbyBtdWNoIGZvciBnaXRsaW5rcywgZm9yCisJICogd2hpY2ggY2VfbWF0Y2hfc3RhdF9iYXNpYygpIGFsd2F5cyBnb2VzIHRvIHRoZSBhY3R1YWwKKwkgKiBjb250ZW50cy4gIFRoZSBjYWxsZXIgY2hlY2tzIHdpdGggaXNfcmFjeV90aW1lc3RhbXAoKSB3aGljaAorCSAqIGFsd2F5cyBzYXlzICJubyIgZm9yIGdpdGxpbmtzLCBzbyB3ZSBhcmUgbm90IGNhbGxlZCBmb3IgdGhlbSA7LSkKKwkgKi8KKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChsc3RhdChjZS0+bmFtZSwgJnN0KSA8IDApCisJCXJldHVybjsKKwlpZiAoY2VfbWF0Y2hfc3RhdF9iYXNpYyhjZSwgJnN0KSkKKwkJcmV0dXJuOworCWlmIChjZV9tb2RpZmllZF9jaGVja19mcyhjZSwgJnN0KSkgeworCQkvKiBUaGlzIGlzICJyYWNpbHkgY2xlYW4iOyBzbXVkZ2UgaXQuICBOb3RlIHRoYXQgdGhpcworCQkgKiBpcyBhIHRyaWNreSBjb2RlLiAgQXQgZmlyc3QgZ2xhbmNlLCBpdCBtYXkgYXBwZWFyCisJCSAqIHRoYXQgaXQgY2FuIGJyZWFrIHdpdGggdGhpcyBzZXF1ZW5jZToKKwkJICoKKwkJICogJCBlY2hvIHh5enp5ID5mcm90egorCQkgKiAkIGdpdC11cGRhdGUtaW5kZXggLS1hZGQgZnJvdHoKKwkJICogJCA6ID5mcm90egorCQkgKiAkIHNsZWVwIDMKKwkJICogJCBlY2hvIGZpbGZyZSA+bml0Zm9sCisJCSAqICQgZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCBuaXRmb2wKKwkJICoKKwkJICogYnV0IGl0IGRvZXMgbm90LiAgV2hlbiB0aGUgc2Vjb25kIHVwZGF0ZS1pbmRleCBydW5zLAorCQkgKiBpdCBub3RpY2VzIHRoYXQgdGhlIGVudHJ5ICJmcm90eiIgaGFzIHRoZSBzYW1lIHRpbWVzdGFtcAorCQkgKiBhcyBpbmRleCwgYW5kIGlmIHdlIHdlcmUgdG8gc211ZGdlIGl0IGJ5IHJlc2V0dGluZyBpdHMKKwkJICogc2l6ZSB0byB6ZXJvIGhlcmUsIHRoZW4gdGhlIG9iamVjdCBuYW1lIHJlY29yZGVkCisJCSAqIGluIGluZGV4IGlzIHRoZSA2LWJ5dGUgZmlsZSBidXQgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uCisJCSAqIGJlY29tZXMgemVybyAtLS0gd2hpY2ggd291bGQgdGhlbiBtYXRjaCB3aGF0IHdlIHdvdWxkCisJCSAqIG9idGFpbiBmcm9tIHRoZSBmaWxlc3lzdGVtIG5leHQgdGltZSB3ZSBzdGF0KCJmcm90eiIpLgorCQkgKgorCQkgKiBIb3dldmVyLCB0aGUgc2Vjb25kIHVwZGF0ZS1pbmRleCwgYmVmb3JlIGNhbGxpbmcKKwkJICogdGhpcyBmdW5jdGlvbiwgbm90aWNlcyB0aGF0IHRoZSBjYWNoZWQgc2l6ZSBpcyA2CisJCSAqIGJ5dGVzIGFuZCB3aGF0IGlzIG9uIHRoZSBmaWxlc3lzdGVtIGlzIGFuIGVtcHR5CisJCSAqIGZpbGUsIGFuZCBuZXZlciBjYWxscyB1cywgc28gdGhlIGNhY2hlZCBzaXplIGluZm9ybWF0aW9uCisJCSAqIGZvciAiZnJvdHoiIHN0YXlzIDYgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGZpbGVzeXN0ZW0uCisJCSAqLworCQljZS0+Y2Vfc2l6ZSA9IDA7CisJfQorfQorCisvKiBDb3B5IG1pc2NlbGxhbmVvdXMgZmllbGRzIGJ1dCBub3QgdGhlIG5hbWUgKi8KK3N0YXRpYyBjaGFyICpjb3B5X2NhY2hlX2VudHJ5X3RvX29uZGlzayhzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5ICpvbmRpc2ssCisJCQkJICAgICAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc2hvcnQgZmxhZ3M7CisKKwlvbmRpc2stPmN0aW1lLnNlYyA9IGh0b25sKGNlLT5jZV9jdGltZS5zZWMpOworCW9uZGlzay0+bXRpbWUuc2VjID0gaHRvbmwoY2UtPmNlX210aW1lLnNlYyk7CisJb25kaXNrLT5jdGltZS5uc2VjID0gaHRvbmwoY2UtPmNlX2N0aW1lLm5zZWMpOworCW9uZGlzay0+bXRpbWUubnNlYyA9IGh0b25sKGNlLT5jZV9tdGltZS5uc2VjKTsKKwlvbmRpc2stPmRldiAgPSBodG9ubChjZS0+Y2VfZGV2KTsKKwlvbmRpc2stPmlubyAgPSBodG9ubChjZS0+Y2VfaW5vKTsKKwlvbmRpc2stPm1vZGUgPSBodG9ubChjZS0+Y2VfbW9kZSk7CisJb25kaXNrLT51aWQgID0gaHRvbmwoY2UtPmNlX3VpZCk7CisJb25kaXNrLT5naWQgID0gaHRvbmwoY2UtPmNlX2dpZCk7CisJb25kaXNrLT5zaXplID0gaHRvbmwoY2UtPmNlX3NpemUpOworCWhhc2hjcHkob25kaXNrLT5zaGExLCBjZS0+c2hhMSk7CisKKwlmbGFncyA9IGNlLT5jZV9mbGFnczsKKwlmbGFncyB8PSAoY2VfbmFtZWxlbihjZSkgPj0gQ0VfTkFNRU1BU0sgPyBDRV9OQU1FTUFTSyA6IGNlX25hbWVsZW4oY2UpKTsKKwlvbmRpc2stPmZsYWdzID0gaHRvbnMoZmxhZ3MpOworCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9FWFRFTkRFRCkgeworCQlzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5X2V4dGVuZGVkICpvbmRpc2syOworCQlvbmRpc2syID0gKHN0cnVjdCBvbmRpc2tfY2FjaGVfZW50cnlfZXh0ZW5kZWQgKilvbmRpc2s7CisJCW9uZGlzazItPmZsYWdzMiA9IGh0b25zKChjZS0+Y2VfZmxhZ3MgJiBDRV9FWFRFTkRFRF9GTEFHUykgPj4gMTYpOworCQlyZXR1cm4gb25kaXNrMi0+bmFtZTsKKwl9CisJZWxzZSB7CisJCXJldHVybiBvbmRpc2stPm5hbWU7CisJfQorfQorCitzdGF0aWMgaW50IGNlX3dyaXRlX2VudHJ5KGdpdF9TSEFfQ1RYICpjLCBpbnQgZmQsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgIHN0cnVjdCBzdHJidWYgKnByZXZpb3VzX25hbWUpCit7CisJaW50IHNpemU7CisJc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSAqb25kaXNrOworCWNoYXIgKm5hbWU7CisJaW50IHJlc3VsdDsKKworCWlmICghcHJldmlvdXNfbmFtZSkgeworCQlzaXplID0gb25kaXNrX2NlX3NpemUoY2UpOworCQlvbmRpc2sgPSB4Y2FsbG9jKDEsIHNpemUpOworCQluYW1lID0gY29weV9jYWNoZV9lbnRyeV90b19vbmRpc2sob25kaXNrLCBjZSk7CisJCW1lbWNweShuYW1lLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpOworCX0gZWxzZSB7CisJCWludCBjb21tb24sIHRvX3JlbW92ZSwgcHJlZml4X3NpemU7CisJCXVuc2lnbmVkIGNoYXIgdG9fcmVtb3ZlX3ZpWzE2XTsKKwkJZm9yIChjb21tb24gPSAwOworCQkgICAgIChjZS0+bmFtZVtjb21tb25dICYmCisJCSAgICAgIGNvbW1vbiA8IHByZXZpb3VzX25hbWUtPmxlbiAmJgorCQkgICAgICBjZS0+bmFtZVtjb21tb25dID09IHByZXZpb3VzX25hbWUtPmJ1Zltjb21tb25dKTsKKwkJICAgICBjb21tb24rKykKKwkJCTsgLyogc3RpbGwgbWF0Y2hpbmcgKi8KKwkJdG9fcmVtb3ZlID0gcHJldmlvdXNfbmFtZS0+bGVuIC0gY29tbW9uOworCQlwcmVmaXhfc2l6ZSA9IGVuY29kZV92YXJpbnQodG9fcmVtb3ZlLCB0b19yZW1vdmVfdmkpOworCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9FWFRFTkRFRCkKKwkJCXNpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5X2V4dGVuZGVkLCBuYW1lKTsKKwkJZWxzZQorCQkJc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBvbmRpc2tfY2FjaGVfZW50cnksIG5hbWUpOworCQlzaXplICs9IHByZWZpeF9zaXplICsgKGNlX25hbWVsZW4oY2UpIC0gY29tbW9uICsgMSk7CisKKwkJb25kaXNrID0geGNhbGxvYygxLCBzaXplKTsKKwkJbmFtZSA9IGNvcHlfY2FjaGVfZW50cnlfdG9fb25kaXNrKG9uZGlzaywgY2UpOworCQltZW1jcHkobmFtZSwgdG9fcmVtb3ZlX3ZpLCBwcmVmaXhfc2l6ZSk7CisJCW1lbWNweShuYW1lICsgcHJlZml4X3NpemUsIGNlLT5uYW1lICsgY29tbW9uLCBjZV9uYW1lbGVuKGNlKSAtIGNvbW1vbik7CisKKwkJc3RyYnVmX3NwbGljZShwcmV2aW91c19uYW1lLCBjb21tb24sIHRvX3JlbW92ZSwKKwkJCSAgICAgIGNlLT5uYW1lICsgY29tbW9uLCBjZV9uYW1lbGVuKGNlKSAtIGNvbW1vbik7CisJfQorCisJcmVzdWx0ID0gY2Vfd3JpdGUoYywgZmQsIG9uZGlzaywgc2l6ZSk7CisJZnJlZShvbmRpc2spOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgaGFzX3JhY3lfdGltZXN0YW1wKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWludCBlbnRyaWVzID0gaXN0YXRlLT5jYWNoZV9ucjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWlmIChpc19yYWN5X3RpbWVzdGFtcChpc3RhdGUsIGNlKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE9wcG9ydHVuaXN0aWNseSB1cGRhdGUgdGhlIGluZGV4IGJ1dCBkbyBub3QgY29tcGxhaW4gaWYgd2UgY2FuJ3QKKyAqLwordm9pZCB1cGRhdGVfaW5kZXhfaWZfYWJsZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGxvY2tfZmlsZSAqbG9ja2ZpbGUpCit7CisJaWYgKChpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfHwgaGFzX3JhY3lfdGltZXN0YW1wKGlzdGF0ZSkpICYmCisJICAgICF3cml0ZV9pbmRleChpc3RhdGUsIGxvY2tmaWxlLT5mZCkpCisJCWNvbW1pdF9sb2NrZWRfaW5kZXgobG9ja2ZpbGUpOworCWVsc2UKKwkJcm9sbGJhY2tfbG9ja19maWxlKGxvY2tmaWxlKTsKK30KKworaW50IHdyaXRlX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgbmV3ZmQpCit7CisJZ2l0X1NIQV9DVFggYzsKKwlzdHJ1Y3QgY2FjaGVfaGVhZGVyIGhkcjsKKwlpbnQgaSwgZXJyLCByZW1vdmVkLCBleHRlbmRlZCwgaGRyX3ZlcnNpb247CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUgPSBpc3RhdGUtPmNhY2hlOworCWludCBlbnRyaWVzID0gaXN0YXRlLT5jYWNoZV9ucjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgc3RyYnVmIHByZXZpb3VzX25hbWVfYnVmID0gU1RSQlVGX0lOSVQsICpwcmV2aW91c19uYW1lOworCisJZm9yIChpID0gcmVtb3ZlZCA9IGV4dGVuZGVkID0gMDsgaSA8IGVudHJpZXM7IGkrKykgeworCQlpZiAoY2FjaGVbaV0tPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQorCQkJcmVtb3ZlZCsrOworCisJCS8qIHJlZHVjZSBleHRlbmRlZCBlbnRyaWVzIGlmIHBvc3NpYmxlICovCisJCWNhY2hlW2ldLT5jZV9mbGFncyAmPSB+Q0VfRVhURU5ERUQ7CisJCWlmIChjYWNoZVtpXS0+Y2VfZmxhZ3MgJiBDRV9FWFRFTkRFRF9GTEFHUykgeworCQkJZXh0ZW5kZWQrKzsKKwkJCWNhY2hlW2ldLT5jZV9mbGFncyB8PSBDRV9FWFRFTkRFRDsKKwkJfQorCX0KKworCWlmICghaXN0YXRlLT52ZXJzaW9uKQorCQlpc3RhdGUtPnZlcnNpb24gPSBJTkRFWF9GT1JNQVRfREVGQVVMVDsKKworCS8qIGRlbW90ZSB2ZXJzaW9uIDMgdG8gdmVyc2lvbiAyIHdoZW4gdGhlIGxhdHRlciBzdWZmaWNlcyAqLworCWlmIChpc3RhdGUtPnZlcnNpb24gPT0gMyB8fCBpc3RhdGUtPnZlcnNpb24gPT0gMikKKwkJaXN0YXRlLT52ZXJzaW9uID0gZXh0ZW5kZWQgPyAzIDogMjsKKworCWhkcl92ZXJzaW9uID0gaXN0YXRlLT52ZXJzaW9uOworCisJaGRyLmhkcl9zaWduYXR1cmUgPSBodG9ubChDQUNIRV9TSUdOQVRVUkUpOworCWhkci5oZHJfdmVyc2lvbiA9IGh0b25sKGhkcl92ZXJzaW9uKTsKKwloZHIuaGRyX2VudHJpZXMgPSBodG9ubChlbnRyaWVzIC0gcmVtb3ZlZCk7CisKKwlnaXRfU0hBMV9Jbml0KCZjKTsKKwlpZiAoY2Vfd3JpdGUoJmMsIG5ld2ZkLCAmaGRyLCBzaXplb2YoaGRyKSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlwcmV2aW91c19uYW1lID0gKGhkcl92ZXJzaW9uID09IDQpID8gJnByZXZpb3VzX25hbWVfYnVmIDogTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNlX3VwdG9kYXRlKGNlKSAmJiBpc19yYWN5X3RpbWVzdGFtcChpc3RhdGUsIGNlKSkKKwkJCWNlX3NtdWRnZV9yYWNpbHlfY2xlYW5fZW50cnkoY2UpOworCQlpZiAoaXNfbnVsbF9zaGExKGNlLT5zaGExKSkKKwkJCXJldHVybiBlcnJvcigiY2FjaGUgZW50cnkgaGFzIG51bGwgc2hhMTogJXMiLCBjZS0+bmFtZSk7CisJCWlmIChjZV93cml0ZV9lbnRyeSgmYywgbmV3ZmQsIGNlLCBwcmV2aW91c19uYW1lKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZwcmV2aW91c19uYW1lX2J1Zik7CisKKwkvKiBXcml0ZSBleHRlbnNpb24gZGF0YSBoZXJlICovCisJaWYgKGlzdGF0ZS0+Y2FjaGVfdHJlZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJY2FjaGVfdHJlZV93cml0ZSgmc2IsIGlzdGF0ZS0+Y2FjaGVfdHJlZSk7CisJCWVyciA9IHdyaXRlX2luZGV4X2V4dF9oZWFkZXIoJmMsIG5ld2ZkLCBDQUNIRV9FWFRfVFJFRSwgc2IubGVuKSA8IDAKKwkJCXx8IGNlX3dyaXRlKCZjLCBuZXdmZCwgc2IuYnVmLCBzYi5sZW4pIDwgMDsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtMTsKKwl9CisJaWYgKGlzdGF0ZS0+cmVzb2x2ZV91bmRvKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQlyZXNvbHZlX3VuZG9fd3JpdGUoJnNiLCBpc3RhdGUtPnJlc29sdmVfdW5kbyk7CisJCWVyciA9IHdyaXRlX2luZGV4X2V4dF9oZWFkZXIoJmMsIG5ld2ZkLCBDQUNIRV9FWFRfUkVTT0xWRV9VTkRPLAorCQkJCQkgICAgIHNiLmxlbikgPCAwCisJCQl8fCBjZV93cml0ZSgmYywgbmV3ZmQsIHNiLmJ1Ziwgc2IubGVuKSA8IDA7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGNlX2ZsdXNoKCZjLCBuZXdmZCkgfHwgZnN0YXQobmV3ZmQsICZzdCkpCisJCXJldHVybiAtMTsKKwlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPSAodW5zaWduZWQgaW50KXN0LnN0X210aW1lOworCWlzdGF0ZS0+dGltZXN0YW1wLm5zZWMgPSBTVF9NVElNRV9OU0VDKHN0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgdGhlIGluZGV4IGZpbGUgdGhhdCBpcyBwb3RlbnRpYWxseSB1bm1lcmdlZCBpbnRvIGdpdmVuCisgKiBpbmRleF9zdGF0ZSwgZHJvcHBpbmcgYW55IHVubWVyZ2VkIGVudHJpZXMuICBSZXR1cm5zIHRydWUgaWYKKyAqIHRoZSBpbmRleCBpcyB1bm1lcmdlZC4gIENhbGxlcnMgd2hvIHdhbnQgdG8gcmVmdXNlIHRvIHdvcmsKKyAqIGZyb20gYW4gdW5tZXJnZWQgc3RhdGUgY2FuIGNhbGwgdGhpcyBhbmQgY2hlY2sgaXRzIHJldHVybiB2YWx1ZSwKKyAqIGluc3RlYWQgb2YgY2FsbGluZyByZWFkX2NhY2hlKCkuCisgKi8KK2ludCByZWFkX2luZGV4X3VubWVyZ2VkKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWludCBpOworCWludCB1bm1lcmdlZCA9IDA7CisKKwlyZWFkX2luZGV4KGlzdGF0ZSk7CisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpuZXdfY2U7CisJCWludCBzaXplLCBsZW47CisKKwkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQljb250aW51ZTsKKwkJdW5tZXJnZWQgPSAxOworCQlsZW4gPSBjZV9uYW1lbGVuKGNlKTsKKwkJc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobGVuKTsKKwkJbmV3X2NlID0geGNhbGxvYygxLCBzaXplKTsKKwkJbWVtY3B5KG5ld19jZS0+bmFtZSwgY2UtPm5hbWUsIGxlbik7CisJCW5ld19jZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3MoMCkgfCBDRV9DT05GTElDVEVEOworCQluZXdfY2UtPmNlX25hbWVsZW4gPSBsZW47CisJCW5ld19jZS0+Y2VfbW9kZSA9IGNlLT5jZV9tb2RlOworCQlpZiAoYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgbmV3X2NlLCAwKSkKKwkJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIiwKKwkJCQkgICAgIGNlLT5uYW1lKTsKKwkJaSA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgbmV3X2NlLT5uYW1lLCBsZW4pOworCX0KKwlyZXR1cm4gdW5tZXJnZWQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgdGhlIHBhdGggaXMgYW4gIm90aGVyIiBwYXRoIHdpdGggcmVzcGVjdCB0bworICogdGhlIGluZGV4OyB0aGF0IGlzLCB0aGUgcGF0aCBpcyBub3QgbWVudGlvbmVkIGluIHRoZSBpbmRleCBhdCBhbGwsCisgKiBlaXRoZXIgYXMgYSBmaWxlLCBhIGRpcmVjdG9yeSB3aXRoIHNvbWUgZmlsZXMgaW4gdGhlIGluZGV4LAorICogb3IgYXMgYW4gdW5tZXJnZWQgZW50cnkuCisgKgorICogV2UgaGVscGZ1bGx5IHJlbW92ZSBhIHRyYWlsaW5nICIvIiBmcm9tIGRpcmVjdG9yaWVzIHNvIHRoYXQKKyAqIHRoZSBvdXRwdXQgb2YgcmVhZF9kaXJlY3RvcnkgY2FuIGJlIHVzZWQgYXMtaXMuCisgKi8KK2ludCBpbmRleF9uYW1lX2lzX290aGVyKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLAorCQlpbnQgbmFtZWxlbikKK3sKKwlpbnQgcG9zOworCWlmIChuYW1lbGVuICYmIG5hbWVbbmFtZWxlbiAtIDFdID09ICcvJykKKwkJbmFtZWxlbi0tOworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgbmFtZSwgbmFtZWxlbik7CisJaWYgKDAgPD0gcG9zKQorCQlyZXR1cm4gMDsJLyogZXhhY3QgbWF0Y2ggKi8KKwlwb3MgPSAtcG9zIC0gMTsKKwlpZiAocG9zIDwgaXN0YXRlLT5jYWNoZV9ucikgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtwb3NdOworCQlpZiAoY2VfbmFtZWxlbihjZSkgPT0gbmFtZWxlbiAmJgorCQkgICAgIW1lbWNtcChjZS0+bmFtZSwgbmFtZSwgbmFtZWxlbikpCisJCQlyZXR1cm4gMDsgLyogWXVwLCB0aGlzIG9uZSBleGlzdHMgdW5tZXJnZWQgKi8KKwl9CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9yZWZsb2ctd2Fsay5jIGIvcmVmbG9nLXdhbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmZiZGIyCi0tLSAvZGV2L251bGwKKysrIGIvcmVmbG9nLXdhbGsuYwpAQCAtMCwwICsxLDM0MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKworc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgeworCWNoYXIgKnJlZjsKKwljb25zdCBjaGFyICpzaG9ydF9yZWY7CisJc3RydWN0IHJlZmxvZ19pbmZvIHsKKwkJdW5zaWduZWQgY2hhciBvc2hhMVsyMF0sIG5zaGExWzIwXTsKKwkJY2hhciAqZW1haWw7CisJCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworCQlpbnQgdHo7CisJCWNoYXIgKm1lc3NhZ2U7CisJfSAqaXRlbXM7CisJaW50IG5yLCBhbGxvYzsKK307CisKK3N0YXRpYyBpbnQgcmVhZF9vbmVfcmVmbG9nKHVuc2lnbmVkIGNoYXIgKm9zaGExLCB1bnNpZ25lZCBjaGFyICpuc2hhMSwKKwkJY29uc3QgY2hhciAqZW1haWwsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wLCBpbnQgdHosCisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKmFycmF5ID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8gKml0ZW07CisKKwlpZiAoYXJyYXktPm5yID49IGFycmF5LT5hbGxvYykgeworCQlhcnJheS0+YWxsb2MgPSBhbGxvY19ucihhcnJheS0+bnIgKyAxKTsKKwkJYXJyYXktPml0ZW1zID0geHJlYWxsb2MoYXJyYXktPml0ZW1zLCBhcnJheS0+YWxsb2MgKgorCQkJc2l6ZW9mKHN0cnVjdCByZWZsb2dfaW5mbykpOworCX0KKwlpdGVtID0gYXJyYXktPml0ZW1zICsgYXJyYXktPm5yOworCW1lbWNweShpdGVtLT5vc2hhMSwgb3NoYTEsIDIwKTsKKwltZW1jcHkoaXRlbS0+bnNoYTEsIG5zaGExLCAyMCk7CisJaXRlbS0+ZW1haWwgPSB4c3RyZHVwKGVtYWlsKTsKKwlpdGVtLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJaXRlbS0+dHogPSB0ejsKKwlpdGVtLT5tZXNzYWdlID0geHN0cmR1cChtZXNzYWdlKTsKKwlhcnJheS0+bnIrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzICpyZWFkX2NvbXBsZXRlX3JlZmxvZyhjb25zdCBjaGFyICpyZWYpCit7CisJc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKnJlZmxvZ3MgPQorCQl4Y2FsbG9jKHNpemVvZihzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyksIDEpOworCXJlZmxvZ3MtPnJlZiA9IHhzdHJkdXAocmVmKTsKKwlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZiwgcmVhZF9vbmVfcmVmbG9nLCByZWZsb2dzKTsKKwlpZiAocmVmbG9ncy0+bnIgPT0gMCkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljb25zdCBjaGFyICpuYW1lOworCQl2b2lkICpuYW1lX3RvX2ZyZWU7CisJCW5hbWUgPSBuYW1lX3RvX2ZyZWUgPSByZXNvbHZlX3JlZmR1cChyZWYsIHNoYTEsIDEsIE5VTEwpOworCQlpZiAobmFtZSkgeworCQkJZm9yX2VhY2hfcmVmbG9nX2VudChuYW1lLCByZWFkX29uZV9yZWZsb2csIHJlZmxvZ3MpOworCQkJZnJlZShuYW1lX3RvX2ZyZWUpOworCQl9CisJfQorCWlmIChyZWZsb2dzLT5uciA9PSAwKSB7CisJCWludCBsZW4gPSBzdHJsZW4ocmVmKTsKKwkJY2hhciAqcmVmbmFtZSA9IHhtYWxsb2MobGVuICsgMTIpOworCQlzcHJpbnRmKHJlZm5hbWUsICJyZWZzLyVzIiwgcmVmKTsKKwkJZm9yX2VhY2hfcmVmbG9nX2VudChyZWZuYW1lLCByZWFkX29uZV9yZWZsb2csIHJlZmxvZ3MpOworCQlpZiAocmVmbG9ncy0+bnIgPT0gMCkgeworCQkJc3ByaW50ZihyZWZuYW1lLCAicmVmcy9oZWFkcy8lcyIsIHJlZik7CisJCQlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZm5hbWUsIHJlYWRfb25lX3JlZmxvZywgcmVmbG9ncyk7CisJCX0KKwkJZnJlZShyZWZuYW1lKTsKKwl9CisJcmV0dXJuIHJlZmxvZ3M7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3JlZmxvZ19yZWNub19ieV90aW1lKHN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzICphcnJheSwKKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSBhcnJheS0+bnIgLSAxOyBpID49IDA7IGktLSkKKwkJaWYgKHRpbWVzdGFtcCA+PSBhcnJheS0+aXRlbXNbaV0udGltZXN0YW1wKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0xOworfQorCitzdHJ1Y3QgY29tbWl0X2luZm9fbGlmbyB7CisJc3RydWN0IGNvbW1pdF9pbmZvIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQl2b2lkICp1dGlsOworCX0gKml0ZW1zOworCWludCBuciwgYWxsb2M7Cit9OworCitzdGF0aWMgc3RydWN0IGNvbW1pdF9pbmZvICpnZXRfY29tbWl0X2luZm8oc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQlzdHJ1Y3QgY29tbWl0X2luZm9fbGlmbyAqbGlmbywgaW50IHBvcCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbGlmby0+bnI7IGkrKykKKwkJaWYgKGxpZm8tPml0ZW1zW2ldLmNvbW1pdCA9PSBjb21taXQpIHsKKwkJCXN0cnVjdCBjb21taXRfaW5mbyAqcmVzdWx0ID0gJmxpZm8tPml0ZW1zW2ldOworCQkJaWYgKHBvcCkgeworCQkJCWlmIChpICsgMSA8IGxpZm8tPm5yKQorCQkJCQltZW1tb3ZlKGxpZm8tPml0ZW1zICsgaSwKKwkJCQkJCWxpZm8tPml0ZW1zICsgaSArIDEsCisJCQkJCQkobGlmby0+bnIgLSBpKSAqCisJCQkJCQlzaXplb2Yoc3RydWN0IGNvbW1pdF9pbmZvKSk7CisJCQkJbGlmby0+bnItLTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYWRkX2NvbW1pdF9pbmZvKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqdXRpbCwKKwkJc3RydWN0IGNvbW1pdF9pbmZvX2xpZm8gKmxpZm8pCit7CisJc3RydWN0IGNvbW1pdF9pbmZvICppbmZvOworCWlmIChsaWZvLT5uciA+PSBsaWZvLT5hbGxvYykgeworCQlsaWZvLT5hbGxvYyA9IGFsbG9jX25yKGxpZm8tPm5yICsgMSk7CisJCWxpZm8tPml0ZW1zID0geHJlYWxsb2MobGlmby0+aXRlbXMsCisJCQlsaWZvLT5hbGxvYyAqIHNpemVvZihzdHJ1Y3QgY29tbWl0X2luZm8pKTsKKwl9CisJaW5mbyA9IGxpZm8tPml0ZW1zICsgbGlmby0+bnI7CisJaW5mby0+Y29tbWl0ID0gY29tbWl0OworCWluZm8tPnV0aWwgPSB1dGlsOworCWxpZm8tPm5yKys7Cit9CisKK3N0cnVjdCBjb21taXRfcmVmbG9nIHsKKwlpbnQgcmVjbm87CisJZW51bSBzZWxlY3Rvcl90eXBlIHsKKwkJU0VMRUNUT1JfTk9ORSwKKwkJU0VMRUNUT1JfSU5ERVgsCisJCVNFTEVDVE9SX0RBVEUKKwl9IHNlbGVjdG9yOworCXN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzICpyZWZsb2dzOworfTsKKworc3RydWN0IHJlZmxvZ193YWxrX2luZm8geworCXN0cnVjdCBjb21taXRfaW5mb19saWZvIHJlZmxvZ3M7CisJc3RydWN0IHN0cmluZ19saXN0IGNvbXBsZXRlX3JlZmxvZ3M7CisJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmxhc3RfY29tbWl0X3JlZmxvZzsKK307CisKK3ZvaWQgaW5pdF9yZWZsb2dfd2FsayhzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyoqIGluZm8pCit7CisJKmluZm8gPSB4Y2FsbG9jKHNpemVvZihzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyksIDEpOworfQorCitpbnQgYWRkX3JlZmxvZ19mb3Jfd2FsayhzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wID0gMDsKKwlpbnQgcmVjbm8gPSAtMTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqcmVmbG9nczsKKwljaGFyICpicmFuY2gsICphdCA9IHN0cmNocihuYW1lLCAnQCcpOworCXN0cnVjdCBjb21taXRfcmVmbG9nICpjb21taXRfcmVmbG9nOworCWVudW0gc2VsZWN0b3JfdHlwZSBzZWxlY3RvciA9IFNFTEVDVE9SX05PTkU7CisKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlkaWUgKCJDYW5ub3Qgd2FsayByZWZsb2dzIGZvciAlcyIsIG5hbWUpOworCisJYnJhbmNoID0geHN0cmR1cChuYW1lKTsKKwlpZiAoYXQgJiYgYXRbMV0gPT0gJ3snKSB7CisJCWNoYXIgKmVwOworCQlicmFuY2hbYXQgLSBuYW1lXSA9ICdcMCc7CisJCXJlY25vID0gc3RydG91bChhdCArIDIsICZlcCwgMTApOworCQlpZiAoKmVwICE9ICd9JykgeworCQkJcmVjbm8gPSAtMTsKKwkJCXRpbWVzdGFtcCA9IGFwcHJveGlkYXRlKGF0ICsgMik7CisJCQlzZWxlY3RvciA9IFNFTEVDVE9SX0RBVEU7CisJCX0KKwkJZWxzZQorCQkJc2VsZWN0b3IgPSBTRUxFQ1RPUl9JTkRFWDsKKwl9IGVsc2UKKwkJcmVjbm8gPSAwOworCisJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cCgmaW5mby0+Y29tcGxldGVfcmVmbG9ncywgYnJhbmNoKTsKKwlpZiAoaXRlbSkKKwkJcmVmbG9ncyA9IGl0ZW0tPnV0aWw7CisJZWxzZSB7CisJCWlmICgqYnJhbmNoID09ICdcMCcpIHsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCQlmcmVlKGJyYW5jaCk7CisJCQlicmFuY2ggPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIHNoYTEsIDAsIE5VTEwpOworCQkJaWYgKCFicmFuY2gpCisJCQkJZGllICgiTm8gY3VycmVudCBicmFuY2giKTsKKworCQl9CisJCXJlZmxvZ3MgPSByZWFkX2NvbXBsZXRlX3JlZmxvZyhicmFuY2gpOworCQlpZiAoIXJlZmxvZ3MgfHwgcmVmbG9ncy0+bnIgPT0gMCkgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJCWNoYXIgKmI7CisJCQlpZiAoZHdpbV9sb2coYnJhbmNoLCBzdHJsZW4oYnJhbmNoKSwgc2hhMSwgJmIpID09IDEpIHsKKwkJCQlpZiAocmVmbG9ncykgeworCQkJCQlmcmVlKHJlZmxvZ3MtPnJlZik7CisJCQkJCWZyZWUocmVmbG9ncyk7CisJCQkJfQorCQkJCWZyZWUoYnJhbmNoKTsKKwkJCQlicmFuY2ggPSBiOworCQkJCXJlZmxvZ3MgPSByZWFkX2NvbXBsZXRlX3JlZmxvZyhicmFuY2gpOworCQkJfQorCQl9CisJCWlmICghcmVmbG9ncyB8fCByZWZsb2dzLT5uciA9PSAwKQorCQkJcmV0dXJuIC0xOworCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmluZm8tPmNvbXBsZXRlX3JlZmxvZ3MsIGJyYW5jaCktPnV0aWwKKwkJCT0gcmVmbG9nczsKKwl9CisKKwljb21taXRfcmVmbG9nID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9yZWZsb2cpLCAxKTsKKwlpZiAocmVjbm8gPCAwKSB7CisJCWNvbW1pdF9yZWZsb2ctPnJlY25vID0gZ2V0X3JlZmxvZ19yZWNub19ieV90aW1lKHJlZmxvZ3MsIHRpbWVzdGFtcCk7CisJCWlmIChjb21taXRfcmVmbG9nLT5yZWNubyA8IDApIHsKKwkJCWZyZWUoYnJhbmNoKTsKKwkJCWZyZWUoY29tbWl0X3JlZmxvZyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UKKwkJY29tbWl0X3JlZmxvZy0+cmVjbm8gPSByZWZsb2dzLT5uciAtIHJlY25vIC0gMTsKKwljb21taXRfcmVmbG9nLT5zZWxlY3RvciA9IHNlbGVjdG9yOworCWNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MgPSByZWZsb2dzOworCisJYWRkX2NvbW1pdF9pbmZvKGNvbW1pdCwgY29tbWl0X3JlZmxvZywgJmluZm8tPnJlZmxvZ3MpOworCXJldHVybiAwOworfQorCit2b2lkIGZha2VfcmVmbG9nX3BhcmVudChzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfaW5mbyAqY29tbWl0X2luZm8gPQorCQlnZXRfY29tbWl0X2luZm8oY29tbWl0LCAmaW5mby0+cmVmbG9ncywgMCk7CisJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2c7CisJc3RydWN0IHJlZmxvZ19pbmZvICpyZWZsb2c7CisKKwlpbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2cgPSBOVUxMOworCWlmICghY29tbWl0X2luZm8pCisJCXJldHVybjsKKworCWNvbW1pdF9yZWZsb2cgPSBjb21taXRfaW5mby0+dXRpbDsKKwlpZiAoY29tbWl0X3JlZmxvZy0+cmVjbm8gPCAwKSB7CisJCWNvbW1pdC0+cGFyZW50cyA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwlyZWZsb2cgPSAmY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+aXRlbXNbY29tbWl0X3JlZmxvZy0+cmVjbm9dOworCWluZm8tPmxhc3RfY29tbWl0X3JlZmxvZyA9IGNvbW1pdF9yZWZsb2c7CisJY29tbWl0X3JlZmxvZy0+cmVjbm8tLTsKKwljb21taXRfaW5mby0+Y29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilwYXJzZV9vYmplY3QocmVmbG9nLT5vc2hhMSk7CisJaWYgKCFjb21taXRfaW5mby0+Y29tbWl0KSB7CisJCWNvbW1pdC0+cGFyZW50cyA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwljb21taXQtPnBhcmVudHMgPSB4Y2FsbG9jKHNpemVvZihzdHJ1Y3QgY29tbWl0X2xpc3QpLCAxKTsKKwljb21taXQtPnBhcmVudHMtPml0ZW0gPSBjb21taXRfaW5mby0+Y29tbWl0OworfQorCit2b2lkIGdldF9yZWZsb2dfc2VsZWN0b3Ioc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvLAorCQkJIGVudW0gZGF0ZV9tb2RlIGRtb2RlLCBpbnQgZm9yY2VfZGF0ZSwKKwkJCSBpbnQgc2hvcnRlbikKK3sKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZyA9IHJlZmxvZ19pbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2c7CisJc3RydWN0IHJlZmxvZ19pbmZvICppbmZvOworCWNvbnN0IGNoYXIgKnByaW50ZWRfcmVmOworCisJaWYgKCFjb21taXRfcmVmbG9nKQorCQlyZXR1cm47CisKKwlpZiAoc2hvcnRlbikgeworCQlpZiAoIWNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnNob3J0X3JlZikKKwkJCWNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnNob3J0X3JlZgorCQkJCT0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+cmVmLCAwKTsKKwkJcHJpbnRlZF9yZWYgPSBjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5zaG9ydF9yZWY7CisJfSBlbHNlIHsKKwkJcHJpbnRlZF9yZWYgPSBjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5yZWY7CisJfQorCisJc3RyYnVmX2FkZGYoc2IsICIlc0B7IiwgcHJpbnRlZF9yZWYpOworCWlmIChjb21taXRfcmVmbG9nLT5zZWxlY3RvciA9PSBTRUxFQ1RPUl9EQVRFIHx8CisJICAgIChjb21taXRfcmVmbG9nLT5zZWxlY3RvciA9PSBTRUxFQ1RPUl9OT05FICYmIGZvcmNlX2RhdGUpKSB7CisJCWluZm8gPSAmY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+aXRlbXNbY29tbWl0X3JlZmxvZy0+cmVjbm8rMV07CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHNob3dfZGF0ZShpbmZvLT50aW1lc3RhbXAsIGluZm8tPnR6LCBkbW9kZSkpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRmKHNiLCAiJWQiLCBjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5ucgorCQkJICAgIC0gMiAtIGNvbW1pdF9yZWZsb2ctPnJlY25vKTsKKwl9CisKKwlzdHJidWZfYWRkY2goc2IsICd9Jyk7Cit9CisKK3ZvaWQgZ2V0X3JlZmxvZ19tZXNzYWdlKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvKQoreworCXN0cnVjdCBjb21taXRfcmVmbG9nICpjb21taXRfcmVmbG9nID0gcmVmbG9nX2luZm8tPmxhc3RfY29tbWl0X3JlZmxvZzsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8gKmluZm87CisJc2l6ZV90IGxlbjsKKworCWlmICghY29tbWl0X3JlZmxvZykKKwkJcmV0dXJuOworCisJaW5mbyA9ICZjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5pdGVtc1tjb21taXRfcmVmbG9nLT5yZWNubysxXTsKKwlsZW4gPSBzdHJsZW4oaW5mby0+bWVzc2FnZSk7CisJaWYgKGxlbiA+IDApCisJCWxlbi0tOyAvKiBzdHJpcCBhd2F5IHRyYWlsaW5nIG5ld2xpbmUgKi8KKwlzdHJidWZfYWRkKHNiLCBpbmZvLT5tZXNzYWdlLCBsZW4pOworfQorCitjb25zdCBjaGFyICpnZXRfcmVmbG9nX2lkZW50KHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpyZWZsb2dfaW5mbykKK3sKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZyA9IHJlZmxvZ19pbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2c7CisJc3RydWN0IHJlZmxvZ19pbmZvICppbmZvOworCisJaWYgKCFjb21taXRfcmVmbG9nKQorCQlyZXR1cm4gTlVMTDsKKworCWluZm8gPSAmY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+aXRlbXNbY29tbWl0X3JlZmxvZy0+cmVjbm8rMV07CisJcmV0dXJuIGluZm8tPmVtYWlsOworfQorCit2b2lkIHNob3dfcmVmbG9nX21lc3NhZ2Uoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvLCBpbnQgb25lbGluZSwKKwkJCSBlbnVtIGRhdGVfbW9kZSBkbW9kZSwgaW50IGZvcmNlX2RhdGUpCit7CisJaWYgKHJlZmxvZ19pbmZvICYmIHJlZmxvZ19pbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2cpIHsKKwkJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2cgPSByZWZsb2dfaW5mby0+bGFzdF9jb21taXRfcmVmbG9nOworCQlzdHJ1Y3QgcmVmbG9nX2luZm8gKmluZm87CisJCXN0cnVjdCBzdHJidWYgc2VsZWN0b3IgPSBTVFJCVUZfSU5JVDsKKworCQlpbmZvID0gJmNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPml0ZW1zW2NvbW1pdF9yZWZsb2ctPnJlY25vKzFdOworCQlnZXRfcmVmbG9nX3NlbGVjdG9yKCZzZWxlY3RvciwgcmVmbG9nX2luZm8sIGRtb2RlLCBmb3JjZV9kYXRlLCAwKTsKKwkJaWYgKG9uZWxpbmUpIHsKKwkJCXByaW50ZigiJXM6ICVzIiwgc2VsZWN0b3IuYnVmLCBpbmZvLT5tZXNzYWdlKTsKKwkJfQorCQllbHNlIHsKKwkJCXByaW50ZigiUmVmbG9nOiAlcyAoJXMpXG5SZWZsb2cgbWVzc2FnZTogJXMiLAorCQkJICAgICAgIHNlbGVjdG9yLmJ1ZiwgaW5mby0+ZW1haWwsIGluZm8tPm1lc3NhZ2UpOworCQl9CisKKwkJc3RyYnVmX3JlbGVhc2UoJnNlbGVjdG9yKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9yZWZsb2ctd2Fsay5oIGIvcmVmbG9nLXdhbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDI2NWY1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVmbG9nLXdhbGsuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIFJFRkxPR19XQUxLX0gKKyNkZWZpbmUgUkVGTE9HX1dBTEtfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RydWN0IHJlZmxvZ193YWxrX2luZm87CisKK2V4dGVybiB2b2lkIGluaXRfcmVmbG9nX3dhbGsoc3RydWN0IHJlZmxvZ193YWxrX2luZm8qKiBpbmZvKTsKK2V4dGVybiBpbnQgYWRkX3JlZmxvZ19mb3Jfd2FsayhzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIGZha2VfcmVmbG9nX3BhcmVudChzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKK2V4dGVybiB2b2lkIHNob3dfcmVmbG9nX21lc3NhZ2Uoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKmluZm8sIGludCwKKwkJCQllbnVtIGRhdGVfbW9kZSwgaW50IGZvcmNlX2RhdGUpOworZXh0ZXJuIHZvaWQgZ2V0X3JlZmxvZ19tZXNzYWdlKHN0cnVjdCBzdHJidWYgKnNiLAorCQlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9yZWZsb2dfaWRlbnQoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvKTsKK2V4dGVybiB2b2lkIGdldF9yZWZsb2dfc2VsZWN0b3Ioc3RydWN0IHN0cmJ1ZiAqc2IsCisJCXN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpyZWZsb2dfaW5mbywKKwkJZW51bSBkYXRlX21vZGUgZG1vZGUsIGludCBmb3JjZV9kYXRlLAorCQlpbnQgc2hvcnRlbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVmcy5jIGIvcmVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzRhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzLmMKQEAgLTAsMCArMSwyNTU0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisKKy8qCisgKiBNYWtlIHN1cmUgInJlZiIgaXMgc29tZXRoaW5nIHJlYXNvbmFibGUgdG8gaGF2ZSB1bmRlciAiLmdpdC9yZWZzLyI7CisgKiBXZSBkbyBub3QgbGlrZSBpdCBpZjoKKyAqCisgKiAtIGFueSBwYXRoIGNvbXBvbmVudCBvZiBpdCBiZWdpbnMgd2l0aCAiLiIsIG9yCisgKiAtIGl0IGhhcyBkb3VibGUgZG90cyAiLi4iLCBvcgorICogLSBpdCBoYXMgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIsICJ+IiwgIl4iLCAiOiIgb3IgU1AsIGFueXdoZXJlLCBvcgorICogLSBpdCBlbmRzIHdpdGggYSAiLyIuCisgKiAtIGl0IGVuZHMgd2l0aCAiLmxvY2siCisgKiAtIGl0IGNvbnRhaW5zIGEgIlwiIChiYWNrc2xhc2gpCisgKi8KKworLyogUmV0dXJuIHRydWUgaWZmIGNoIGlzIG5vdCBhbGxvd2VkIGluIHJlZmVyZW5jZSBuYW1lcy4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJhZF9yZWZfY2hhcihpbnQgY2gpCit7CisJaWYgKCgodW5zaWduZWQpIGNoKSA8PSAnICcgfHwgY2ggPT0gMHg3ZiB8fAorCSAgICBjaCA9PSAnficgfHwgY2ggPT0gJ14nIHx8IGNoID09ICc6JyB8fCBjaCA9PSAnXFwnKQorCQlyZXR1cm4gMTsKKwkvKiAyLjEzIFBhdHRlcm4gTWF0Y2hpbmcgTm90YXRpb24gKi8KKwlpZiAoY2ggPT0gJyonIHx8IGNoID09ICc/JyB8fCBjaCA9PSAnWycpIC8qIFVuc3VwcG9ydGVkICovCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogVHJ5IHRvIHJlYWQgb25lIHJlZm5hbWUgY29tcG9uZW50IGZyb20gdGhlIGZyb250IG9mIHJlZm5hbWUuICBSZXR1cm4KKyAqIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBvbmVudCBmb3VuZCwgb3IgLTEgaWYgdGhlIGNvbXBvbmVudCBpcyBub3QKKyAqIGxlZ2FsLgorICovCitzdGF0aWMgaW50IGNoZWNrX3JlZm5hbWVfY29tcG9uZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmbGFncykKK3sKKwljb25zdCBjaGFyICpjcDsKKwljaGFyIGxhc3QgPSAnXDAnOworCisJZm9yIChjcCA9IHJlZm5hbWU7IDsgY3ArKykgeworCQljaGFyIGNoID0gKmNwOworCQlpZiAoY2ggPT0gJ1wwJyB8fCBjaCA9PSAnLycpCisJCQlicmVhazsKKwkJaWYgKGJhZF9yZWZfY2hhcihjaCkpCisJCQlyZXR1cm4gLTE7IC8qIElsbGVnYWwgY2hhcmFjdGVyIGluIHJlZm5hbWUuICovCisJCWlmIChsYXN0ID09ICcuJyAmJiBjaCA9PSAnLicpCisJCQlyZXR1cm4gLTE7IC8qIFJlZm5hbWUgY29udGFpbnMgIi4uIi4gKi8KKwkJaWYgKGxhc3QgPT0gJ0AnICYmIGNoID09ICd7JykKKwkJCXJldHVybiAtMTsgLyogUmVmbmFtZSBjb250YWlucyAiQHsiLiAqLworCQlsYXN0ID0gY2g7CisJfQorCWlmIChjcCA9PSByZWZuYW1lKQorCQlyZXR1cm4gMDsgLyogQ29tcG9uZW50IGhhcyB6ZXJvIGxlbmd0aC4gKi8KKwlpZiAocmVmbmFtZVswXSA9PSAnLicpIHsKKwkJaWYgKCEoZmxhZ3MgJiBSRUZOQU1FX0RPVF9DT01QT05FTlQpKQorCQkJcmV0dXJuIC0xOyAvKiBDb21wb25lbnQgc3RhcnRzIHdpdGggJy4nLiAqLworCQkvKgorCQkgKiBFdmVuIGlmIGxlYWRpbmcgZG90cyBhcmUgYWxsb3dlZCwgZG9uJ3QgYWxsb3cgIi4iCisJCSAqIGFzIGEgY29tcG9uZW50ICgiLi4iIGlzIHByZXZlbnRlZCBieSBhIHJ1bGUgYWJvdmUpLgorCQkgKi8KKwkJaWYgKHJlZm5hbWVbMV0gPT0gJ1wwJykKKwkJCXJldHVybiAtMTsgLyogQ29tcG9uZW50IGVxdWFscyAiLiIuICovCisJfQorCWlmIChjcCAtIHJlZm5hbWUgPj0gNSAmJiAhbWVtY21wKGNwIC0gNSwgIi5sb2NrIiwgNSkpCisJCXJldHVybiAtMTsgLyogUmVmbmFtZSBlbmRzIHdpdGggIi5sb2NrIi4gKi8KKwlyZXR1cm4gY3AgLSByZWZuYW1lOworfQorCitpbnQgY2hlY2tfcmVmbmFtZV9mb3JtYXQoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IGZsYWdzKQoreworCWludCBjb21wb25lbnRfbGVuLCBjb21wb25lbnRfY291bnQgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJLyogV2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIHBhdGggY29tcG9uZW50LiAqLworCQljb21wb25lbnRfbGVuID0gY2hlY2tfcmVmbmFtZV9jb21wb25lbnQocmVmbmFtZSwgZmxhZ3MpOworCQlpZiAoY29tcG9uZW50X2xlbiA8PSAwKSB7CisJCQlpZiAoKGZsYWdzICYgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4pICYmCisJCQkJCXJlZm5hbWVbMF0gPT0gJyonICYmCisJCQkJCShyZWZuYW1lWzFdID09ICdcMCcgfHwgcmVmbmFtZVsxXSA9PSAnLycpKSB7CisJCQkJLyogQWNjZXB0IG9uZSB3aWxkY2FyZCBhcyBhIGZ1bGwgcmVmbmFtZSBjb21wb25lbnQuICovCisJCQkJZmxhZ3MgJj0gflJFRk5BTUVfUkVGU1BFQ19QQVRURVJOOworCQkJCWNvbXBvbmVudF9sZW4gPSAxOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJY29tcG9uZW50X2NvdW50Kys7CisJCWlmIChyZWZuYW1lW2NvbXBvbmVudF9sZW5dID09ICdcMCcpCisJCQlicmVhazsKKwkJLyogU2tpcCB0byBuZXh0IGNvbXBvbmVudC4gKi8KKwkJcmVmbmFtZSArPSBjb21wb25lbnRfbGVuICsgMTsKKwl9CisKKwlpZiAocmVmbmFtZVtjb21wb25lbnRfbGVuIC0gMV0gPT0gJy4nKQorCQlyZXR1cm4gLTE7IC8qIFJlZm5hbWUgZW5kcyB3aXRoICcuJy4gKi8KKwlpZiAoIShmbGFncyAmIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpICYmIGNvbXBvbmVudF9jb3VudCA8IDIpCisJCXJldHVybiAtMTsgLyogUmVmbmFtZSBoYXMgb25seSBvbmUgY29tcG9uZW50LiAqLworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmVmX2VudHJ5OworCisvKgorICogSW5mb3JtYXRpb24gdXNlZCAoYWxvbmcgd2l0aCB0aGUgaW5mb3JtYXRpb24gaW4gcmVmX2VudHJ5KSB0bworICogZGVzY3JpYmUgYSBzaW5nbGUgY2FjaGVkIHJlZmVyZW5jZS4gIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgb25seQorICogb2NjdXJzIGVtYmVkZGVkIGluIGEgdW5pb24gaW4gc3RydWN0IHJlZl9lbnRyeSwgYW5kIG9ubHkgd2hlbgorICogKHJlZl9lbnRyeS0+ZmxhZyAmIFJFRl9ESVIpIGlzIHplcm8uCisgKi8KK3N0cnVjdCByZWZfdmFsdWUgeworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciBwZWVsZWRbMjBdOworfTsKKworc3RydWN0IHJlZl9jYWNoZTsKKworLyoKKyAqIEluZm9ybWF0aW9uIHVzZWQgKGFsb25nIHdpdGggdGhlIGluZm9ybWF0aW9uIGluIHJlZl9lbnRyeSkgdG8KKyAqIGRlc2NyaWJlIGEgbGV2ZWwgaW4gdGhlIGhpZXJhcmNoeSBvZiByZWZlcmVuY2VzLiAgVGhpcyBkYXRhCisgKiBzdHJ1Y3R1cmUgb25seSBvY2N1cnMgZW1iZWRkZWQgaW4gYSB1bmlvbiBpbiBzdHJ1Y3QgcmVmX2VudHJ5LCBhbmQKKyAqIG9ubHkgd2hlbiAocmVmX2VudHJ5LmZsYWcgJiBSRUZfRElSKSBpcyBzZXQuICBJbiB0aGF0IGNhc2UsCisgKiAocmVmX2VudHJ5LmZsYWcgJiBSRUZfSU5DT01QTEVURSkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByZWZlcmVuY2VzCisgKiBpbiB0aGUgZGlyZWN0b3J5IGhhdmUgYWxyZWFkeSBiZWVuIHJlYWQ6CisgKgorICogICAgIChyZWZfZW50cnkuZmxhZyAmIFJFRl9JTkNPTVBMRVRFKSB1bnNldCAtLSBhIGRpcmVjdG9yeSBvZiBsb29zZQorICogICAgICAgICBvciBwYWNrZWQgcmVmZXJlbmNlcywgYWxyZWFkeSByZWFkLgorICoKKyAqICAgICAocmVmX2VudHJ5LmZsYWcgJiBSRUZfSU5DT01QTEVURSkgc2V0IC0tIGEgZGlyZWN0b3J5IG9mIGxvb3NlCisgKiAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBoYXNuJ3QgYmVlbiByZWFkIHlldCAobm9yIGhhcyBhbnkgb2YgaXRzCisgKiAgICAgICAgIHN1YmRpcmVjdG9yaWVzKS4KKyAqCisgKiBFbnRyaWVzIHdpdGhpbiBhIGRpcmVjdG9yeSBhcmUgc3RvcmVkIHdpdGhpbiBhIGdyb3dhYmxlIGFycmF5IG9mCisgKiBwb2ludGVycyB0byByZWZfZW50cmllcyAoZW50cmllcywgbnIsIGFsbG9jKS4gIEVudHJpZXMgMCA8PSBpIDwKKyAqIHNvcnRlZCBhcmUgc29ydGVkIGJ5IHRoZWlyIGNvbXBvbmVudCBuYW1lIGluIHN0cmNtcCgpIG9yZGVyIGFuZCB0aGUKKyAqIHJlbWFpbmluZyBlbnRyaWVzIGFyZSB1bnNvcnRlZC4KKyAqCisgKiBMb29zZSByZWZlcmVuY2VzIGFyZSByZWFkIGxhemlseSwgb25lIGRpcmVjdG9yeSBhdCBhIHRpbWUuICBXaGVuIGEKKyAqIGRpcmVjdG9yeSBvZiBsb29zZSByZWZlcmVuY2VzIGlzIHJlYWQsIHRoZW4gYWxsIG9mIHRoZSByZWZlcmVuY2VzCisgKiBpbiB0aGF0IGRpcmVjdG9yeSBhcmUgc3RvcmVkLCBhbmQgUkVGX0lOQ09NUExFVEUgc3R1YnMgYXJlIGNyZWF0ZWQKKyAqIGZvciBhbnkgc3ViZGlyZWN0b3JpZXMsIGJ1dCB0aGUgc3ViZGlyZWN0b3JpZXMgdGhlbXNlbHZlcyBhcmUgbm90CisgKiByZWFkLiAgVGhlIHJlYWRpbmcgaXMgdHJpZ2dlcmVkIGJ5IGdldF9yZWZfZGlyKCkuCisgKi8KK3N0cnVjdCByZWZfZGlyIHsKKwlpbnQgbnIsIGFsbG9jOworCisJLyoKKwkgKiBFbnRyaWVzIHdpdGggaW5kZXggMCA8PSBpIDwgc29ydGVkIGFyZSBzb3J0ZWQgYnkgbmFtZS4gIE5ldworCSAqIGVudHJpZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBsaXN0IHVuc29ydGVkLCBhbmQgYXJlIHNvcnRlZAorCSAqIG9ubHkgd2hlbiByZXF1aXJlZDsgdGh1cyB3ZSBhdm9pZCB0aGUgbmVlZCB0byBzb3J0IHRoZSBsaXN0CisJICogYWZ0ZXIgdGhlIGFkZGl0aW9uIG9mIGV2ZXJ5IHJlZmVyZW5jZS4KKwkgKi8KKwlpbnQgc29ydGVkOworCisJLyogQSBwb2ludGVyIHRvIHRoZSByZWZfY2FjaGUgdGhhdCBjb250YWlucyB0aGlzIHJlZl9kaXIuICovCisJc3RydWN0IHJlZl9jYWNoZSAqcmVmX2NhY2hlOworCisJc3RydWN0IHJlZl9lbnRyeSAqKmVudHJpZXM7Cit9OworCisvKiBJU1NZTVJFRj0weDAxLCBJU1BBQ0tFRD0weDAyLCBhbmQgSVNCUk9LRU49MHgwNCBhcmUgcHVibGljIGludGVyZmFjZXMgKi8KKyNkZWZpbmUgUkVGX0tOT1dTX1BFRUxFRCAweDA4CisKKy8qIHJlZl9lbnRyeSByZXByZXNlbnRzIGEgZGlyZWN0b3J5IG9mIHJlZmVyZW5jZXMgKi8KKyNkZWZpbmUgUkVGX0RJUiAweDEwCisKKy8qCisgKiBFbnRyeSBoYXMgbm90IHlldCBiZWVuIHJlYWQgZnJvbSBkaXNrICh1c2VkIG9ubHkgZm9yIFJFRl9ESVIKKyAqIGVudHJpZXMgcmVwcmVzZW50aW5nIGxvb3NlIHJlZmVyZW5jZXMpCisgKi8KKyNkZWZpbmUgUkVGX0lOQ09NUExFVEUgMHgyMAorCisvKgorICogQSByZWZfZW50cnkgcmVwcmVzZW50cyBlaXRoZXIgYSByZWZlcmVuY2Ugb3IgYSAic3ViZGlyZWN0b3J5IiBvZgorICogcmVmZXJlbmNlcy4KKyAqCisgKiBFYWNoIGRpcmVjdG9yeSBpbiB0aGUgcmVmZXJlbmNlIG5hbWVzcGFjZSBpcyByZXByZXNlbnRlZCBieSBhCisgKiByZWZfZW50cnkgd2l0aCAoZmxhZ3MgJiBSRUZfRElSKSBzZXQgYW5kIGNvbnRhaW5pbmcgYSBzdWJkaXIgbWVtYmVyCisgKiB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzIGluIHRoYXQgZGlyZWN0b3J5IHRoYXQgaGF2ZSBiZWVuIHJlYWQgc28KKyAqIGZhci4gIElmIChmbGFncyAmIFJFRl9JTkNPTVBMRVRFKSBpcyBzZXQsIHRoZW4gdGhlIGRpcmVjdG9yeSBhbmQKKyAqIGl0cyBzdWJkaXJlY3RvcmllcyBoYXZlbid0IGJlZW4gcmVhZCB5ZXQuICBSRUZfSU5DT01QTEVURSBpcyBvbmx5CisgKiB1c2VkIGZvciBsb29zZSByZWZlcmVuY2UgZGlyZWN0b3JpZXMuCisgKgorICogUmVmZXJlbmNlcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSByZWZfZW50cnkgd2l0aCAoZmxhZ3MgJiBSRUZfRElSKQorICogdW5zZXQgYW5kIGEgdmFsdWUgbWVtYmVyIHRoYXQgZGVzY3JpYmVzIHRoZSByZWZlcmVuY2UncyB2YWx1ZS4gIFRoZQorICogZmxhZyBtZW1iZXIgaXMgYXQgdGhlIHJlZl9lbnRyeSBsZXZlbCwgYnV0IGl0IGlzIGFsc28gbmVlZGVkIHRvCisgKiBpbnRlcnByZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB2YWx1ZSBmaWVsZCAoaW4gb3RoZXIgd29yZHMsIGEKKyAqIHJlZl92YWx1ZSBvYmplY3QgaXMgbm90IHZlcnkgbXVjaCB1c2Ugd2l0aG91dCB0aGUgZW5jbG9zaW5nCisgKiByZWZfZW50cnkpLgorICoKKyAqIFJlZmVyZW5jZSBuYW1lcyBjYW5ub3QgZW5kIHdpdGggc2xhc2ggYW5kIGRpcmVjdG9yaWVzJyBuYW1lcyBhcmUKKyAqIGFsd2F5cyBzdG9yZWQgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIChleGNlcHQgZm9yIHRoZSB0b3AtbGV2ZWwKKyAqIGRpcmVjdG9yeSwgd2hpY2ggaXMgYWx3YXlzIGRlbm90ZWQgYnkgIiIpLiAgVGhpcyBoYXMgdHdvIG5pY2UKKyAqIGNvbnNlcXVlbmNlczogKDEpIHdoZW4gdGhlIGVudHJpZXMgaW4gZWFjaCBzdWJkaXIgYXJlIHNvcnRlZAorICogbGV4aWNvZ3JhcGhpY2FsbHkgYnkgbmFtZSAoYXMgdGhleSB1c3VhbGx5IGFyZSksIHRoZSByZWZlcmVuY2VzIGluCisgKiBhIHdob2xlIHRyZWUgY2FuIGJlIGdlbmVyYXRlZCBpbiBsZXhpY29ncmFwaGljIG9yZGVyIGJ5IHRyYXZlcnNpbmcKKyAqIHRoZSB0cmVlIGluIGxlZnQtdG8tcmlnaHQsIGRlcHRoLWZpcnN0IG9yZGVyOyAoMikgdGhlIG5hbWVzIG9mCisgKiByZWZlcmVuY2VzIGFuZCBzdWJkaXJlY3RvcmllcyBjYW5ub3QgY29uZmxpY3QsIGFuZCB0aGVyZWZvcmUgdGhlCisgKiBwcmVzZW5jZSBvZiBhbiBlbXB0eSBzdWJkaXJlY3RvcnkgZG9lcyBub3QgYmxvY2sgdGhlIGNyZWF0aW9uIG9mIGEKKyAqIHNpbWlsYXJseS1uYW1lZCByZWZlcmVuY2UuICAoVGhlIGZhY3QgdGhhdCByZWZlcmVuY2UgbmFtZXMgd2l0aCB0aGUKKyAqIHNhbWUgbGVhZGluZyBjb21wb25lbnRzIGNhbiBjb25mbGljdCAqd2l0aCBlYWNoIG90aGVyKiBpcyBhCisgKiBzZXBhcmF0ZSBpc3N1ZSB0aGF0IGlzIHJlZ3VsYXRlZCBieSBpc19yZWZuYW1lX2F2YWlsYWJsZSgpLikKKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBuYW1lIGZpZWxkIGNvbnRhaW5zIHRoZSBmdWxseS1xdWFsaWZpZWQKKyAqIHJlZmVyZW5jZSAob3Igc3ViZGlyZWN0b3J5KSBuYW1lLiAgU3BhY2UgY291bGQgYmUgc2F2ZWQgYnkgb25seQorICogc3RvcmluZyB0aGUgcmVsYXRpdmUgbmFtZXMuICBCdXQgdGhhdCB3b3VsZCByZXF1aXJlIHRoZSBmdWxsIG5hbWVzCisgKiB0byBiZSBnZW5lcmF0ZWQgb24gdGhlIGZseSB3aGVuIGl0ZXJhdGluZyBpbiBkb19mb3JfZWFjaF9yZWYoKSwgYW5kCisgKiB3b3VsZCBicmVhayBjYWxsYmFjayBmdW5jdGlvbnMsIHdobyBoYXZlIGFsd2F5cyBiZWVuIGFibGUgdG8gYXNzdW1lCisgKiB0aGF0IHRoZSBuYW1lIHN0cmluZ3MgdGhhdCB0aGV5IGFyZSBwYXNzZWQgd2lsbCBub3QgYmUgZnJlZWQgZHVyaW5nCisgKiB0aGUgaXRlcmF0aW9uLgorICovCitzdHJ1Y3QgcmVmX2VudHJ5IHsKKwl1bnNpZ25lZCBjaGFyIGZsYWc7IC8qIElTU1lNUkVGPyBJU1BBQ0tFRD8gKi8KKwl1bmlvbiB7CisJCXN0cnVjdCByZWZfdmFsdWUgdmFsdWU7IC8qIGlmIG5vdCAoZmxhZ3MmUkVGX0RJUikgKi8KKwkJc3RydWN0IHJlZl9kaXIgc3ViZGlyOyAvKiBpZiAoZmxhZ3MmUkVGX0RJUikgKi8KKwl9IHU7CisJLyoKKwkgKiBUaGUgZnVsbCBuYW1lIG9mIHRoZSByZWZlcmVuY2UgKGUuZy4sICJyZWZzL2hlYWRzL21hc3RlciIpCisJICogb3IgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHdpdGggYSB0cmFpbGluZyBzbGFzaAorCSAqIChlLmcuLCAicmVmcy9oZWFkcy8iKToKKwkgKi8KKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgdm9pZCByZWFkX2xvb3NlX3JlZnMoY29uc3QgY2hhciAqZGlybmFtZSwgc3RydWN0IHJlZl9kaXIgKmRpcik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2RpciAqZ2V0X3JlZl9kaXIoc3RydWN0IHJlZl9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHJlZl9kaXIgKmRpcjsKKwlhc3NlcnQoZW50cnktPmZsYWcgJiBSRUZfRElSKTsKKwlkaXIgPSAmZW50cnktPnUuc3ViZGlyOworCWlmIChlbnRyeS0+ZmxhZyAmIFJFRl9JTkNPTVBMRVRFKSB7CisJCXJlYWRfbG9vc2VfcmVmcyhlbnRyeS0+bmFtZSwgZGlyKTsKKwkJZW50cnktPmZsYWcgJj0gflJFRl9JTkNPTVBMRVRFOworCX0KKwlyZXR1cm4gZGlyOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9lbnRyeSAqY3JlYXRlX3JlZl9lbnRyeShjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLAorCQkJCQkgIGludCBjaGVja19uYW1lKQoreworCWludCBsZW47CisJc3RydWN0IHJlZl9lbnRyeSAqcmVmOworCisJaWYgKGNoZWNrX25hbWUgJiYKKwkgICAgY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmbmFtZSwgUkVGTkFNRV9BTExPV19PTkVMRVZFTHxSRUZOQU1FX0RPVF9DT01QT05FTlQpKQorCQlkaWUoIlJlZmVyZW5jZSBoYXMgaW52YWxpZCBmb3JtYXQ6ICclcyciLCByZWZuYW1lKTsKKwlsZW4gPSBzdHJsZW4ocmVmbmFtZSkgKyAxOworCXJlZiA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCByZWZfZW50cnkpICsgbGVuKTsKKwloYXNoY3B5KHJlZi0+dS52YWx1ZS5zaGExLCBzaGExKTsKKwloYXNoY2xyKHJlZi0+dS52YWx1ZS5wZWVsZWQpOworCW1lbWNweShyZWYtPm5hbWUsIHJlZm5hbWUsIGxlbik7CisJcmVmLT5mbGFnID0gZmxhZzsKKwlyZXR1cm4gcmVmOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9yZWZfZGlyKHN0cnVjdCByZWZfZGlyICpkaXIpOworCitzdGF0aWMgdm9pZCBmcmVlX3JlZl9lbnRyeShzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSkKK3sKKwlpZiAoZW50cnktPmZsYWcgJiBSRUZfRElSKSB7CisJCS8qCisJCSAqIERvIG5vdCB1c2UgZ2V0X3JlZl9kaXIoKSBoZXJlLCBhcyB0aGF0IG1pZ2h0CisJCSAqIHRyaWdnZXIgdGhlIHJlYWRpbmcgb2YgbG9vc2UgcmVmcy4KKwkJICovCisJCWNsZWFyX3JlZl9kaXIoJmVudHJ5LT51LnN1YmRpcik7CisJfQorCWZyZWUoZW50cnkpOworfQorCisvKgorICogQWRkIGEgcmVmX2VudHJ5IHRvIHRoZSBlbmQgb2YgZGlyICh1bnNvcnRlZCkuICBFbnRyeSBpcyBhbHdheXMKKyAqIHN0b3JlZCBkaXJlY3RseSBpbiBkaXI7IG5vIHJlY3Vyc2lvbiBpbnRvIHN1YmRpcmVjdG9yaWVzIGlzCisgKiBkb25lLgorICovCitzdGF0aWMgdm9pZCBhZGRfZW50cnlfdG9fZGlyKHN0cnVjdCByZWZfZGlyICpkaXIsIHN0cnVjdCByZWZfZW50cnkgKmVudHJ5KQoreworCUFMTE9DX0dST1coZGlyLT5lbnRyaWVzLCBkaXItPm5yICsgMSwgZGlyLT5hbGxvYyk7CisJZGlyLT5lbnRyaWVzW2Rpci0+bnIrK10gPSBlbnRyeTsKKwkvKiBvcHRpbWl6ZSBmb3IgdGhlIGNhc2UgdGhhdCBlbnRyaWVzIGFyZSBhZGRlZCBpbiBvcmRlciAqLworCWlmIChkaXItPm5yID09IDEgfHwKKwkgICAgKGRpci0+bnIgPT0gZGlyLT5zb3J0ZWQgKyAxICYmCisJICAgICBzdHJjbXAoZGlyLT5lbnRyaWVzW2Rpci0+bnIgLSAyXS0+bmFtZSwKKwkJICAgIGRpci0+ZW50cmllc1tkaXItPm5yIC0gMV0tPm5hbWUpIDwgMCkpCisJCWRpci0+c29ydGVkID0gZGlyLT5ucjsKK30KKworLyoKKyAqIENsZWFyIGFuZCBmcmVlIGFsbCBlbnRyaWVzIGluIGRpciwgcmVjdXJzaXZlbHkuCisgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpcikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLT5ucjsgaSsrKQorCQlmcmVlX3JlZl9lbnRyeShkaXItPmVudHJpZXNbaV0pOworCWZyZWUoZGlyLT5lbnRyaWVzKTsKKwlkaXItPnNvcnRlZCA9IGRpci0+bnIgPSBkaXItPmFsbG9jID0gMDsKKwlkaXItPmVudHJpZXMgPSBOVUxMOworfQorCisvKgorICogQ3JlYXRlIGEgc3RydWN0IHJlZl9lbnRyeSBvYmplY3QgZm9yIHRoZSBzcGVjaWZpZWQgZGlybmFtZS4KKyAqIGRpcm5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggKGUuZy4sCisgKiAicmVmcy9oZWFkcy8iKSBvciAiIiBmb3IgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVmX2VudHJ5ICpjcmVhdGVfZGlyX2VudHJ5KHN0cnVjdCByZWZfY2FjaGUgKnJlZl9jYWNoZSwKKwkJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lLCBzaXplX3QgbGVuLAorCQkJCQkgIGludCBpbmNvbXBsZXRlKQoreworCXN0cnVjdCByZWZfZW50cnkgKmRpcmVudHJ5OworCWRpcmVudHJ5ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlZl9lbnRyeSkgKyBsZW4gKyAxKTsKKwltZW1jcHkoZGlyZW50cnktPm5hbWUsIGRpcm5hbWUsIGxlbik7CisJZGlyZW50cnktPm5hbWVbbGVuXSA9ICdcMCc7CisJZGlyZW50cnktPnUuc3ViZGlyLnJlZl9jYWNoZSA9IHJlZl9jYWNoZTsKKwlkaXJlbnRyeS0+ZmxhZyA9IFJFRl9ESVIgfCAoaW5jb21wbGV0ZSA/IFJFRl9JTkNPTVBMRVRFIDogMCk7CisJcmV0dXJuIGRpcmVudHJ5OworfQorCitzdGF0aWMgaW50IHJlZl9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlzdHJ1Y3QgcmVmX2VudHJ5ICpvbmUgPSAqKHN0cnVjdCByZWZfZW50cnkgKiopYTsKKwlzdHJ1Y3QgcmVmX2VudHJ5ICp0d28gPSAqKHN0cnVjdCByZWZfZW50cnkgKiopYjsKKwlyZXR1cm4gc3RyY21wKG9uZS0+bmFtZSwgdHdvLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgc29ydF9yZWZfZGlyKHN0cnVjdCByZWZfZGlyICpkaXIpOworCitzdHJ1Y3Qgc3RyaW5nX3NsaWNlIHsKKwlzaXplX3QgbGVuOworCWNvbnN0IGNoYXIgKnN0cjsKK307CisKK3N0YXRpYyBpbnQgcmVmX2VudHJ5X2NtcF9zc2xpY2UoY29uc3Qgdm9pZCAqa2V5XywgY29uc3Qgdm9pZCAqZW50XykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX3NsaWNlICprZXkgPSAoc3RydWN0IHN0cmluZ19zbGljZSAqKWtleV87CisJc3RydWN0IHJlZl9lbnRyeSAqZW50ID0gKihzdHJ1Y3QgcmVmX2VudHJ5ICoqKWVudF87CisJaW50IGVudGxlbiA9IHN0cmxlbihlbnQtPm5hbWUpOworCWludCBjbXBsZW4gPSBrZXktPmxlbiA8IGVudGxlbiA/IGtleS0+bGVuIDogZW50bGVuOworCWludCBjbXAgPSBtZW1jbXAoa2V5LT5zdHIsIGVudC0+bmFtZSwgY21wbGVuKTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCXJldHVybiBrZXktPmxlbiAtIGVudGxlbjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZW50cnkgd2l0aCB0aGUgZ2l2ZW4gcmVmbmFtZSBmcm9tIHRoZSByZWZfZGlyCisgKiAobm9uLXJlY3Vyc2l2ZWx5KSwgc29ydGluZyBkaXIgaWYgbmVjZXNzYXJ5LiAgUmV0dXJuIE5VTEwgaWYgbm8KKyAqIHN1Y2ggZW50cnkgaXMgZm91bmQuICBkaXIgbXVzdCBhbHJlYWR5IGJlIGNvbXBsZXRlLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9lbnRyeSAqc2VhcmNoX3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwKKwkJCQkJY29uc3QgY2hhciAqcmVmbmFtZSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcmVmX2VudHJ5ICoqcjsKKwlzdHJ1Y3Qgc3RyaW5nX3NsaWNlIGtleTsKKworCWlmIChyZWZuYW1lID09IE5VTEwgfHwgIWRpci0+bnIpCisJCXJldHVybiBOVUxMOworCisJc29ydF9yZWZfZGlyKGRpcik7CisJa2V5LmxlbiA9IGxlbjsKKwlrZXkuc3RyID0gcmVmbmFtZTsKKwlyID0gYnNlYXJjaCgma2V5LCBkaXItPmVudHJpZXMsIGRpci0+bnIsIHNpemVvZigqZGlyLT5lbnRyaWVzKSwKKwkJICAgIHJlZl9lbnRyeV9jbXBfc3NsaWNlKTsKKworCWlmIChyID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuICpyOworfQorCisvKgorICogU2VhcmNoIGZvciBhIGRpcmVjdG9yeSBlbnRyeSBkaXJlY3RseSB3aXRoaW4gZGlyICh3aXRob3V0CisgKiByZWN1cnNpbmcpLiAgU29ydCBkaXIgaWYgbmVjZXNzYXJ5LiAgc3ViZGlybmFtZSBtdXN0IGJlIGEgZGlyZWN0b3J5CisgKiBuYW1lIChpLmUuLCBlbmQgaW4gJy8nKS4gIElmIG1rZGlyIGlzIHNldCwgdGhlbiBjcmVhdGUgdGhlCisgKiBkaXJlY3RvcnkgaWYgaXQgaXMgbWlzc2luZzsgb3RoZXJ3aXNlLCByZXR1cm4gTlVMTCBpZiB0aGUgZGVzaXJlZAorICogZGlyZWN0b3J5IGNhbm5vdCBiZSBmb3VuZC4gIGRpciBtdXN0IGFscmVhZHkgYmUgY29tcGxldGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVmX2RpciAqc2VhcmNoX2Zvcl9zdWJkaXIoc3RydWN0IHJlZl9kaXIgKmRpciwKKwkJCQkJIGNvbnN0IGNoYXIgKnN1YmRpcm5hbWUsIHNpemVfdCBsZW4sCisJCQkJCSBpbnQgbWtkaXIpCit7CisJc3RydWN0IHJlZl9lbnRyeSAqZW50cnkgPSBzZWFyY2hfcmVmX2RpcihkaXIsIHN1YmRpcm5hbWUsIGxlbik7CisJaWYgKCFlbnRyeSkgeworCQlpZiAoIW1rZGlyKQorCQkJcmV0dXJuIE5VTEw7CisJCS8qCisJCSAqIFNpbmNlIGRpciBpcyBjb21wbGV0ZSwgdGhlIGFic2VuY2Ugb2YgYSBzdWJkaXIKKwkJICogbWVhbnMgdGhhdCB0aGUgc3ViZGlyIHJlYWxseSBkb2Vzbid0IGV4aXN0OworCQkgKiB0aGVyZWZvcmUsIGNyZWF0ZSBhbiBlbXB0eSByZWNvcmQgZm9yIGl0IGJ1dCBtYXJrCisJCSAqIHRoZSByZWNvcmQgY29tcGxldGUuCisJCSAqLworCQllbnRyeSA9IGNyZWF0ZV9kaXJfZW50cnkoZGlyLT5yZWZfY2FjaGUsIHN1YmRpcm5hbWUsIGxlbiwgMCk7CisJCWFkZF9lbnRyeV90b19kaXIoZGlyLCBlbnRyeSk7CisJfQorCXJldHVybiBnZXRfcmVmX2RpcihlbnRyeSk7Cit9CisKKy8qCisgKiBJZiByZWZuYW1lIGlzIGEgcmVmZXJlbmNlIG5hbWUsIGZpbmQgdGhlIHJlZl9kaXIgd2l0aGluIHRoZSBkaXIKKyAqIHRyZWUgdGhhdCBzaG91bGQgaG9sZCByZWZuYW1lLiAgSWYgcmVmbmFtZSBpcyBhIGRpcmVjdG9yeSBuYW1lCisgKiAoaS5lLiwgZW5kcyBpbiAnLycpLCB0aGVuIHJldHVybiB0aGF0IHJlZl9kaXIgaXRzZWxmLiAgZGlyIG11c3QKKyAqIHJlcHJlc2VudCB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBhbmQgbXVzdCBhbHJlYWR5IGJlIGNvbXBsZXRlLgorICogU29ydCByZWZfZGlycyBhbmQgcmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzIGFzIG5lY2Vzc2FyeS4gIElmCisgKiBta2RpciBpcyBzZXQsIHRoZW4gY3JlYXRlIGFueSBtaXNzaW5nIGRpcmVjdG9yaWVzOyBvdGhlcndpc2UsCisgKiByZXR1cm4gTlVMTCBpZiB0aGUgZGVzaXJlZCBkaXJlY3RvcnkgY2Fubm90IGJlIGZvdW5kLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9kaXIgKmZpbmRfY29udGFpbmluZ19kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwKKwkJCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IG1rZGlyKQoreworCWNvbnN0IGNoYXIgKnNsYXNoOworCWZvciAoc2xhc2ggPSBzdHJjaHIocmVmbmFtZSwgJy8nKTsgc2xhc2g7IHNsYXNoID0gc3RyY2hyKHNsYXNoICsgMSwgJy8nKSkgeworCQlzaXplX3QgZGlybmFtZWxlbiA9IHNsYXNoIC0gcmVmbmFtZSArIDE7CisJCXN0cnVjdCByZWZfZGlyICpzdWJkaXI7CisJCXN1YmRpciA9IHNlYXJjaF9mb3Jfc3ViZGlyKGRpciwgcmVmbmFtZSwgZGlybmFtZWxlbiwgbWtkaXIpOworCQlpZiAoIXN1YmRpcikgeworCQkJZGlyID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWRpciA9IHN1YmRpcjsKKwl9CisKKwlyZXR1cm4gZGlyOworfQorCisvKgorICogRmluZCB0aGUgdmFsdWUgZW50cnkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiBkaXIsIHNvcnRpbmcgcmVmX2RpcnMKKyAqIGFuZCByZWN1cnNpbmcgaW50byBzdWJkaXJlY3RvcmllcyBhcyBuZWNlc3NhcnkuICBJZiB0aGUgbmFtZSBpcyBub3QKKyAqIGZvdW5kIG9yIGl0IGNvcnJlc3BvbmRzIHRvIGEgZGlyZWN0b3J5IGVudHJ5LCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIHN0cnVjdCByZWZfZW50cnkgKmZpbmRfcmVmKHN0cnVjdCByZWZfZGlyICpkaXIsIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJc3RydWN0IHJlZl9lbnRyeSAqZW50cnk7CisJZGlyID0gZmluZF9jb250YWluaW5nX2RpcihkaXIsIHJlZm5hbWUsIDApOworCWlmICghZGlyKQorCQlyZXR1cm4gTlVMTDsKKwllbnRyeSA9IHNlYXJjaF9yZWZfZGlyKGRpciwgcmVmbmFtZSwgc3RybGVuKHJlZm5hbWUpKTsKKwlyZXR1cm4gKGVudHJ5ICYmICEoZW50cnktPmZsYWcgJiBSRUZfRElSKSkgPyBlbnRyeSA6IE5VTEw7Cit9CisKKy8qCisgKiBBZGQgYSByZWZfZW50cnkgdG8gdGhlIHJlZl9kaXIgKHVuc29ydGVkKSwgcmVjdXJzaW5nIGludG8KKyAqIHN1YmRpcmVjdG9yaWVzIGFzIG5lY2Vzc2FyeS4gIGRpciBtdXN0IHJlcHJlc2VudCB0aGUgdG9wLWxldmVsCisgKiBkaXJlY3RvcnkuICBSZXR1cm4gMCBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IGFkZF9yZWYoc3RydWN0IHJlZl9kaXIgKmRpciwgc3RydWN0IHJlZl9lbnRyeSAqcmVmKQoreworCWRpciA9IGZpbmRfY29udGFpbmluZ19kaXIoZGlyLCByZWYtPm5hbWUsIDEpOworCWlmICghZGlyKQorCQlyZXR1cm4gLTE7CisJYWRkX2VudHJ5X3RvX2RpcihkaXIsIHJlZik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBFbWl0IGEgd2FybmluZyBhbmQgcmV0dXJuIHRydWUgaWZmIHJlZjEgYW5kIHJlZjIgaGF2ZSB0aGUgc2FtZSBuYW1lCisgKiBhbmQgdGhlIHNhbWUgc2hhMS4gIERpZSBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgbmFtZSBidXQgZGlmZmVyZW50CisgKiBzaGExcy4KKyAqLworc3RhdGljIGludCBpc19kdXBfcmVmKGNvbnN0IHN0cnVjdCByZWZfZW50cnkgKnJlZjEsIGNvbnN0IHN0cnVjdCByZWZfZW50cnkgKnJlZjIpCit7CisJaWYgKHN0cmNtcChyZWYxLT5uYW1lLCByZWYyLT5uYW1lKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBEdXBsaWNhdGUgbmFtZTsgbWFrZSBzdXJlIHRoYXQgdGhleSBkb24ndCBjb25mbGljdDogKi8KKworCWlmICgocmVmMS0+ZmxhZyAmIFJFRl9ESVIpIHx8IChyZWYyLT5mbGFnICYgUkVGX0RJUikpCisJCS8qIFRoaXMgaXMgaW1wb3NzaWJsZSBieSBjb25zdHJ1Y3Rpb24gKi8KKwkJZGllKCJSZWZlcmVuY2UgZGlyZWN0b3J5IGNvbmZsaWN0OiAlcyIsIHJlZjEtPm5hbWUpOworCisJaWYgKGhhc2hjbXAocmVmMS0+dS52YWx1ZS5zaGExLCByZWYyLT51LnZhbHVlLnNoYTEpKQorCQlkaWUoIkR1cGxpY2F0ZWQgcmVmLCBhbmQgU0hBMXMgZG9uJ3QgbWF0Y2g6ICVzIiwgcmVmMS0+bmFtZSk7CisKKwl3YXJuaW5nKCJEdXBsaWNhdGVkIHJlZjogJXMiLCByZWYxLT5uYW1lKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFNvcnQgdGhlIGVudHJpZXMgaW4gZGlyIG5vbi1yZWN1cnNpdmVseSAoaWYgdGhleSBhcmUgbm90IGFscmVhZHkKKyAqIHNvcnRlZCkgYW5kIHJlbW92ZSBhbnkgZHVwbGljYXRlIGVudHJpZXMuCisgKi8KK3N0YXRpYyB2b2lkIHNvcnRfcmVmX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyKQoreworCWludCBpLCBqOworCXN0cnVjdCByZWZfZW50cnkgKmxhc3QgPSBOVUxMOworCisJLyoKKwkgKiBUaGlzIGNoZWNrIGFsc28gcHJldmVudHMgcGFzc2luZyBhIHplcm8tbGVuZ3RoIGFycmF5IHRvIHFzb3J0KCksCisJICogd2hpY2ggaXMgYSBwcm9ibGVtIG9uIHNvbWUgcGxhdGZvcm1zLgorCSAqLworCWlmIChkaXItPnNvcnRlZCA9PSBkaXItPm5yKQorCQlyZXR1cm47CisKKwlxc29ydChkaXItPmVudHJpZXMsIGRpci0+bnIsIHNpemVvZigqZGlyLT5lbnRyaWVzKSwgcmVmX2VudHJ5X2NtcCk7CisKKwkvKiBSZW1vdmUgYW55IGR1cGxpY2F0ZXM6ICovCisJZm9yIChpID0gMCwgaiA9IDA7IGogPCBkaXItPm5yOyBqKyspIHsKKwkJc3RydWN0IHJlZl9lbnRyeSAqZW50cnkgPSBkaXItPmVudHJpZXNbal07CisJCWlmIChsYXN0ICYmIGlzX2R1cF9yZWYobGFzdCwgZW50cnkpKQorCQkJZnJlZV9yZWZfZW50cnkoZW50cnkpOworCQllbHNlCisJCQlsYXN0ID0gZGlyLT5lbnRyaWVzW2krK10gPSBlbnRyeTsKKwl9CisJZGlyLT5zb3J0ZWQgPSBkaXItPm5yID0gaTsKK30KKworI2RlZmluZSBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTiAwMQorCitzdGF0aWMgc3RydWN0IHJlZl9lbnRyeSAqY3VycmVudF9yZWY7CisKK3N0YXRpYyBpbnQgZG9fb25lX3JlZihjb25zdCBjaGFyICpiYXNlLCBlYWNoX3JlZl9mbiBmbiwgaW50IHRyaW0sCisJCSAgICAgIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSwgc3RydWN0IHJlZl9lbnRyeSAqZW50cnkpCit7CisJaW50IHJldHZhbDsKKwlpZiAocHJlZml4Y21wKGVudHJ5LT5uYW1lLCBiYXNlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShmbGFncyAmIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOKSkgeworCQlpZiAoZW50cnktPmZsYWcgJiBSRUZfSVNCUk9LRU4pCisJCQlyZXR1cm4gMDsgLyogaWdub3JlIGJyb2tlbiByZWZzIGUuZy4gZGFuZ2xpbmcgc3ltcmVmICovCisJCWlmICghaGFzX3NoYTFfZmlsZShlbnRyeS0+dS52YWx1ZS5zaGExKSkgeworCQkJZXJyb3IoIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIsIGVudHJ5LT5uYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWN1cnJlbnRfcmVmID0gZW50cnk7CisJcmV0dmFsID0gZm4oZW50cnktPm5hbWUgKyB0cmltLCBlbnRyeS0+dS52YWx1ZS5zaGExLCBlbnRyeS0+ZmxhZywgY2JfZGF0YSk7CisJY3VycmVudF9yZWYgPSBOVUxMOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBDYWxsIGZuIGZvciBlYWNoIHJlZmVyZW5jZSBpbiBkaXIgdGhhdCBoYXMgaW5kZXggaW4gdGhlIHJhbmdlCisgKiBvZmZzZXQgPD0gaW5kZXggPCBkaXItPm5yLiAgUmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzIHRoYXQgYXJlIGluCisgKiB0aGF0IGluZGV4IHJhbmdlLCBzb3J0aW5nIHRoZW0gYmVmb3JlIGl0ZXJhdGluZy4gIFRoaXMgZnVuY3Rpb24KKyAqIGRvZXMgbm90IHNvcnQgZGlyIGl0c2VsZjsgaXQgc2hvdWxkIGJlIHNvcnRlZCBiZWZvcmVoYW5kLgorICovCitzdGF0aWMgaW50IGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgaW50IG9mZnNldCwKKwkJCQkgIGNvbnN0IGNoYXIgKmJhc2UsCisJCQkJICBlYWNoX3JlZl9mbiBmbiwgaW50IHRyaW0sIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgaTsKKwlhc3NlcnQoZGlyLT5zb3J0ZWQgPT0gZGlyLT5ucik7CisJZm9yIChpID0gb2Zmc2V0OyBpIDwgZGlyLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfZW50cnkgKmVudHJ5ID0gZGlyLT5lbnRyaWVzW2ldOworCQlpbnQgcmV0dmFsOworCQlpZiAoZW50cnktPmZsYWcgJiBSRUZfRElSKSB7CisJCQlzdHJ1Y3QgcmVmX2RpciAqc3ViZGlyID0gZ2V0X3JlZl9kaXIoZW50cnkpOworCQkJc29ydF9yZWZfZGlyKHN1YmRpcik7CisJCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9yZWZfaW5fZGlyKHN1YmRpciwgMCwKKwkJCQkJCQliYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEpOworCQl9IGVsc2UgeworCQkJcmV0dmFsID0gZG9fb25lX3JlZihiYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEsIGVudHJ5KTsKKwkJfQorCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsIGZuIGZvciBlYWNoIHJlZmVyZW5jZSBpbiB0aGUgdW5pb24gb2YgZGlyMSBhbmQgZGlyMiwgaW4gb3JkZXIKKyAqIGJ5IHJlZm5hbWUuICBSZWN1cnNlIGludG8gc3ViZGlyZWN0b3JpZXMuICBJZiBhIHZhbHVlIGVudHJ5IGFwcGVhcnMKKyAqIGluIGJvdGggZGlyMSBhbmQgZGlyMiwgdGhlbiBvbmx5IHByb2Nlc3MgdGhlIHZlcnNpb24gdGhhdCBpcyBpbgorICogZGlyMi4gIFRoZSBpbnB1dCBkaXJzIG11c3QgYWxyZWFkeSBiZSBzb3J0ZWQsIGJ1dCBzdWJkaXJzIHdpbGwgYmUKKyAqIHNvcnRlZCBhcyBuZWVkZWQuCisgKi8KK3N0YXRpYyBpbnQgZG9fZm9yX2VhY2hfcmVmX2luX2RpcnMoc3RydWN0IHJlZl9kaXIgKmRpcjEsCisJCQkJICAgc3RydWN0IHJlZl9kaXIgKmRpcjIsCisJCQkJICAgY29uc3QgY2hhciAqYmFzZSwgZWFjaF9yZWZfZm4gZm4sIGludCB0cmltLAorCQkJCSAgIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgcmV0dmFsOworCWludCBpMSA9IDAsIGkyID0gMDsKKworCWFzc2VydChkaXIxLT5zb3J0ZWQgPT0gZGlyMS0+bnIpOworCWFzc2VydChkaXIyLT5zb3J0ZWQgPT0gZGlyMi0+bnIpOworCXdoaWxlICgxKSB7CisJCXN0cnVjdCByZWZfZW50cnkgKmUxLCAqZTI7CisJCWludCBjbXA7CisJCWlmIChpMSA9PSBkaXIxLT5ucikgeworCQkJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXIoZGlyMiwgaTIsCisJCQkJCQkgICAgICBiYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEpOworCQl9CisJCWlmIChpMiA9PSBkaXIyLT5ucikgeworCQkJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXIoZGlyMSwgaTEsCisJCQkJCQkgICAgICBiYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEpOworCQl9CisJCWUxID0gZGlyMS0+ZW50cmllc1tpMV07CisJCWUyID0gZGlyMi0+ZW50cmllc1tpMl07CisJCWNtcCA9IHN0cmNtcChlMS0+bmFtZSwgZTItPm5hbWUpOworCQlpZiAoY21wID09IDApIHsKKwkJCWlmICgoZTEtPmZsYWcgJiBSRUZfRElSKSAmJiAoZTItPmZsYWcgJiBSRUZfRElSKSkgeworCQkJCS8qIEJvdGggYXJlIGRpcmVjdG9yaWVzOyBkZXNjZW5kIHRoZW0gaW4gcGFyYWxsZWwuICovCisJCQkJc3RydWN0IHJlZl9kaXIgKnN1YmRpcjEgPSBnZXRfcmVmX2RpcihlMSk7CisJCQkJc3RydWN0IHJlZl9kaXIgKnN1YmRpcjIgPSBnZXRfcmVmX2RpcihlMik7CisJCQkJc29ydF9yZWZfZGlyKHN1YmRpcjEpOworCQkJCXNvcnRfcmVmX2RpcihzdWJkaXIyKTsKKwkJCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9yZWZfaW5fZGlycygKKwkJCQkJCXN1YmRpcjEsIHN1YmRpcjIsCisJCQkJCQliYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEpOworCQkJCWkxKys7CisJCQkJaTIrKzsKKwkJCX0gZWxzZSBpZiAoIShlMS0+ZmxhZyAmIFJFRl9ESVIpICYmICEoZTItPmZsYWcgJiBSRUZfRElSKSkgeworCQkJCS8qIEJvdGggYXJlIHJlZmVyZW5jZXM7IGlnbm9yZSB0aGUgb25lIGZyb20gZGlyMS4gKi8KKwkJCQlyZXR2YWwgPSBkb19vbmVfcmVmKGJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSwgZTIpOworCQkJCWkxKys7CisJCQkJaTIrKzsKKwkJCX0gZWxzZSB7CisJCQkJZGllKCJjb25mbGljdCBiZXR3ZWVuIHJlZmVyZW5jZSBhbmQgZGlyZWN0b3J5OiAlcyIsCisJCQkJICAgIGUxLT5uYW1lKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCByZWZfZW50cnkgKmU7CisJCQlpZiAoY21wIDwgMCkgeworCQkJCWUgPSBlMTsKKwkJCQlpMSsrOworCQkJfSBlbHNlIHsKKwkJCQllID0gZTI7CisJCQkJaTIrKzsKKwkJCX0KKwkJCWlmIChlLT5mbGFnICYgUkVGX0RJUikgeworCQkJCXN0cnVjdCByZWZfZGlyICpzdWJkaXIgPSBnZXRfcmVmX2RpcihlKTsKKwkJCQlzb3J0X3JlZl9kaXIoc3ViZGlyKTsKKwkJCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9yZWZfaW5fZGlyKAorCQkJCQkJc3ViZGlyLCAwLAorCQkJCQkJYmFzZSwgZm4sIHRyaW0sIGZsYWdzLCBjYl9kYXRhKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dmFsID0gZG9fb25lX3JlZihiYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEsIGUpOworCQkJfQorCQl9CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAoaTEgPCBkaXIxLT5ucikKKwkJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXIoZGlyMSwgaTEsCisJCQkJCSAgICAgIGJhc2UsIGZuLCB0cmltLCBmbGFncywgY2JfZGF0YSk7CisJaWYgKGkyIDwgZGlyMi0+bnIpCisJCXJldHVybiBkb19mb3JfZWFjaF9yZWZfaW5fZGlyKGRpcjIsIGkyLAorCQkJCQkgICAgICBiYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEpOworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHRydWUgaWZmIHJlZm5hbWUxIGFuZCByZWZuYW1lMiBjb25mbGljdCB3aXRoIGVhY2ggb3RoZXIuCisgKiBUd28gcmVmZXJlbmNlIG5hbWVzIGNvbmZsaWN0IGlmIG9uZSBvZiB0aGVtIGV4YWN0bHkgbWF0Y2hlcyB0aGUKKyAqIGxlYWRpbmcgY29tcG9uZW50cyBvZiB0aGUgb3RoZXI7IGUuZy4sICJmb28vYmFyIiBjb25mbGljdHMgd2l0aAorICogYm90aCAiZm9vIiBhbmQgd2l0aCAiZm9vL2Jhci9iYXoiIGJ1dCBub3Qgd2l0aCAiZm9vL2JhciIgb3IKKyAqICJmb28vYmFyYmFkb3MiLgorICovCitzdGF0aWMgaW50IG5hbWVzX2NvbmZsaWN0KGNvbnN0IGNoYXIgKnJlZm5hbWUxLCBjb25zdCBjaGFyICpyZWZuYW1lMikKK3sKKwlmb3IgKDsgKnJlZm5hbWUxICYmICpyZWZuYW1lMSA9PSAqcmVmbmFtZTI7IHJlZm5hbWUxKyssIHJlZm5hbWUyKyspCisJCTsKKwlyZXR1cm4gKCpyZWZuYW1lMSA9PSAnXDAnICYmICpyZWZuYW1lMiA9PSAnLycpCisJCXx8ICgqcmVmbmFtZTEgPT0gJy8nICYmICpyZWZuYW1lMiA9PSAnXDAnKTsKK30KKworc3RydWN0IG5hbWVfY29uZmxpY3RfY2IgeworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisJY29uc3QgY2hhciAqb2xkcmVmbmFtZTsKKwljb25zdCBjaGFyICpjb25mbGljdGluZ19yZWZuYW1lOworfTsKKworc3RhdGljIGludCBuYW1lX2NvbmZsaWN0X2ZuKGNvbnN0IGNoYXIgKmV4aXN0aW5ncmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG5hbWVfY29uZmxpY3RfY2IgKmRhdGEgPSAoc3RydWN0IG5hbWVfY29uZmxpY3RfY2IgKiljYl9kYXRhOworCWlmIChkYXRhLT5vbGRyZWZuYW1lICYmICFzdHJjbXAoZGF0YS0+b2xkcmVmbmFtZSwgZXhpc3RpbmdyZWZuYW1lKSkKKwkJcmV0dXJuIDA7CisJaWYgKG5hbWVzX2NvbmZsaWN0KGRhdGEtPnJlZm5hbWUsIGV4aXN0aW5ncmVmbmFtZSkpIHsKKwkJZGF0YS0+Y29uZmxpY3RpbmdfcmVmbmFtZSA9IGV4aXN0aW5ncmVmbmFtZTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHRydWUgaWZmIGEgcmVmZXJlbmNlIG5hbWVkIHJlZm5hbWUgY291bGQgYmUgY3JlYXRlZCB3aXRob3V0CisgKiBjb25mbGljdGluZyB3aXRoIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIHJlZmVyZW5jZSBpbiBhcnJheS4gIElmCisgKiBvbGRyZWZuYW1lIGlzIG5vbi1OVUxMLCBpZ25vcmUgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG9sZHJlZm5hbWUKKyAqIChlLmcuLCBiZWNhdXNlIG9sZHJlZm5hbWUgaXMgc2NoZWR1bGVkIGZvciBkZWxldGlvbiBpbiB0aGUgc2FtZQorICogb3BlcmF0aW9uKS4KKyAqLworc3RhdGljIGludCBpc19yZWZuYW1lX2F2YWlsYWJsZShjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBjaGFyICpvbGRyZWZuYW1lLAorCQkJCXN0cnVjdCByZWZfZGlyICpkaXIpCit7CisJc3RydWN0IG5hbWVfY29uZmxpY3RfY2IgZGF0YTsKKwlkYXRhLnJlZm5hbWUgPSByZWZuYW1lOworCWRhdGEub2xkcmVmbmFtZSA9IG9sZHJlZm5hbWU7CisJZGF0YS5jb25mbGljdGluZ19yZWZuYW1lID0gTlVMTDsKKworCXNvcnRfcmVmX2RpcihkaXIpOworCWlmIChkb19mb3JfZWFjaF9yZWZfaW5fZGlyKGRpciwgMCwgIiIsIG5hbWVfY29uZmxpY3RfZm4sCisJCQkJICAgMCwgRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU4sCisJCQkJICAgJmRhdGEpKSB7CisJCWVycm9yKCInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIiwKKwkJICAgICAgZGF0YS5jb25mbGljdGluZ19yZWZuYW1lLCByZWZuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogRnV0dXJlOiBuZWVkIHRvIGJlIGluICJzdHJ1Y3QgcmVwb3NpdG9yeSIKKyAqIHdoZW4gZG9pbmcgYSBmdWxsIGxpYmlmaWNhdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCByZWZfY2FjaGUgeworCXN0cnVjdCByZWZfY2FjaGUgKm5leHQ7CisJc3RydWN0IHJlZl9lbnRyeSAqbG9vc2U7CisJc3RydWN0IHJlZl9lbnRyeSAqcGFja2VkOworCS8qIFRoZSBzdWJtb2R1bGUgbmFtZSwgb3IgIiIgZm9yIHRoZSBtYWluIHJlcG8uICovCisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfSAqcmVmX2NhY2hlOworCitzdGF0aWMgdm9pZCBjbGVhcl9wYWNrZWRfcmVmX2NhY2hlKHN0cnVjdCByZWZfY2FjaGUgKnJlZnMpCit7CisJaWYgKHJlZnMtPnBhY2tlZCkgeworCQlmcmVlX3JlZl9lbnRyeShyZWZzLT5wYWNrZWQpOworCQlyZWZzLT5wYWNrZWQgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgY2xlYXJfbG9vc2VfcmVmX2NhY2hlKHN0cnVjdCByZWZfY2FjaGUgKnJlZnMpCit7CisJaWYgKHJlZnMtPmxvb3NlKSB7CisJCWZyZWVfcmVmX2VudHJ5KHJlZnMtPmxvb3NlKTsKKwkJcmVmcy0+bG9vc2UgPSBOVUxMOworCX0KK30KKworc3RhdGljIHN0cnVjdCByZWZfY2FjaGUgKmNyZWF0ZV9yZWZfY2FjaGUoY29uc3QgY2hhciAqc3VibW9kdWxlKQoreworCWludCBsZW47CisJc3RydWN0IHJlZl9jYWNoZSAqcmVmczsKKwlpZiAoIXN1Ym1vZHVsZSkKKwkJc3VibW9kdWxlID0gIiI7CisJbGVuID0gc3RybGVuKHN1Ym1vZHVsZSkgKyAxOworCXJlZnMgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmVmX2NhY2hlKSArIGxlbik7CisJbWVtY3B5KHJlZnMtPm5hbWUsIHN1Ym1vZHVsZSwgbGVuKTsKKwlyZXR1cm4gcmVmczsKK30KKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gYSByZWZfY2FjaGUgZm9yIHRoZSBzcGVjaWZpZWQgc3VibW9kdWxlLiBGb3IKKyAqIHRoZSBtYWluIHJlcG9zaXRvcnksIHVzZSBzdWJtb2R1bGU9PU5VTEwuIFRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUKKyAqIHdpbGwgYmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBidXQgbm90IG5lY2Vzc2FyaWx5IHBvcHVsYXRlZDsgaXQKKyAqIHNob3VsZCBub3QgYmUgZnJlZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVmX2NhY2hlICpnZXRfcmVmX2NhY2hlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSkKK3sKKwlzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzID0gcmVmX2NhY2hlOworCWlmICghc3VibW9kdWxlKQorCQlzdWJtb2R1bGUgPSAiIjsKKwl3aGlsZSAocmVmcykgeworCQlpZiAoIXN0cmNtcChzdWJtb2R1bGUsIHJlZnMtPm5hbWUpKQorCQkJcmV0dXJuIHJlZnM7CisJCXJlZnMgPSByZWZzLT5uZXh0OworCX0KKworCXJlZnMgPSBjcmVhdGVfcmVmX2NhY2hlKHN1Ym1vZHVsZSk7CisJcmVmcy0+bmV4dCA9IHJlZl9jYWNoZTsKKwlyZWZfY2FjaGUgPSByZWZzOworCXJldHVybiByZWZzOworfQorCit2b2lkIGludmFsaWRhdGVfcmVmX2NhY2hlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSkKK3sKKwlzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzID0gZ2V0X3JlZl9jYWNoZShzdWJtb2R1bGUpOworCWNsZWFyX3BhY2tlZF9yZWZfY2FjaGUocmVmcyk7CisJY2xlYXJfbG9vc2VfcmVmX2NhY2hlKHJlZnMpOworfQorCisvKgorICogUGFyc2Ugb25lIGxpbmUgZnJvbSBhIHBhY2tlZC1yZWZzIGZpbGUuICBXcml0ZSB0aGUgU0hBMSB0byBzaGExLgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVmbmFtZSB3aXRoaW4gdGhlIGxpbmUgKG51bGwtdGVybWluYXRlZCksCisgKiBvciBOVUxMIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0uCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpwYXJzZV9yZWZfbGluZShjaGFyICpsaW5lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCS8qCisJICogNDI6IHRoZSBhbnN3ZXIgdG8gZXZlcnl0aGluZy4KKwkgKgorCSAqIEluIHRoaXMgY2FzZSwgaXQgaGFwcGVucyB0byBiZSB0aGUgYW5zd2VyIHRvCisJICogIDQwIChsZW5ndGggb2Ygc2hhMSBoZXggcmVwcmVzZW50YXRpb24pCisJICogICsxIChzcGFjZSBpbiBiZXR3ZWVuIGhleCBhbmQgbmFtZSkKKwkgKiAgKzEgKG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSkKKwkgKi8KKwlpbnQgbGVuID0gc3RybGVuKGxpbmUpIC0gNDI7CisKKwlpZiAobGVuIDw9IDApCisJCXJldHVybiBOVUxMOworCWlmIChnZXRfc2hhMV9oZXgobGluZSwgc2hhMSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWlzc3BhY2UobGluZVs0MF0pKQorCQlyZXR1cm4gTlVMTDsKKwlsaW5lICs9IDQxOworCWlmIChpc3NwYWNlKCpsaW5lKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGxpbmVbbGVuXSAhPSAnXG4nKQorCQlyZXR1cm4gTlVMTDsKKwlsaW5lW2xlbl0gPSAwOworCisJcmV0dXJuIGxpbmU7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcGFja2VkX3JlZnMoRklMRSAqZiwgc3RydWN0IHJlZl9kaXIgKmRpcikKK3sKKwlzdHJ1Y3QgcmVmX2VudHJ5ICpsYXN0ID0gTlVMTDsKKwljaGFyIHJlZmxpbmVbUEFUSF9NQVhdOworCWludCBmbGFnID0gUkVGX0lTUEFDS0VEOworCisJd2hpbGUgKGZnZXRzKHJlZmxpbmUsIHNpemVvZihyZWZsaW5lKSwgZikpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY29uc3QgY2hhciAqcmVmbmFtZTsKKwkJc3RhdGljIGNvbnN0IGNoYXIgaGVhZGVyW10gPSAiIyBwYWNrLXJlZnMgd2l0aDoiOworCisJCWlmICghc3RybmNtcChyZWZsaW5lLCBoZWFkZXIsIHNpemVvZihoZWFkZXIpLTEpKSB7CisJCQljb25zdCBjaGFyICp0cmFpdHMgPSByZWZsaW5lICsgc2l6ZW9mKGhlYWRlcikgLSAxOworCQkJaWYgKHN0cnN0cih0cmFpdHMsICIgcGVlbGVkICIpKQorCQkJCWZsYWcgfD0gUkVGX0tOT1dTX1BFRUxFRDsKKwkJCS8qIHBlcmhhcHMgb3RoZXIgdHJhaXRzIGxhdGVyIGFzIHdlbGwgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmVmbmFtZSA9IHBhcnNlX3JlZl9saW5lKHJlZmxpbmUsIHNoYTEpOworCQlpZiAocmVmbmFtZSkgeworCQkJbGFzdCA9IGNyZWF0ZV9yZWZfZW50cnkocmVmbmFtZSwgc2hhMSwgZmxhZywgMSk7CisJCQlhZGRfcmVmKGRpciwgbGFzdCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobGFzdCAmJgorCQkgICAgcmVmbGluZVswXSA9PSAnXicgJiYKKwkJICAgIHN0cmxlbihyZWZsaW5lKSA9PSA0MiAmJgorCQkgICAgcmVmbGluZVs0MV0gPT0gJ1xuJyAmJgorCQkgICAgIWdldF9zaGExX2hleChyZWZsaW5lICsgMSwgc2hhMSkpCisJCQloYXNoY3B5KGxhc3QtPnUudmFsdWUucGVlbGVkLCBzaGExKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2RpciAqZ2V0X3BhY2tlZF9yZWZzKHN0cnVjdCByZWZfY2FjaGUgKnJlZnMpCit7CisJaWYgKCFyZWZzLT5wYWNrZWQpIHsKKwkJY29uc3QgY2hhciAqcGFja2VkX3JlZnNfZmlsZTsKKwkJRklMRSAqZjsKKworCQlyZWZzLT5wYWNrZWQgPSBjcmVhdGVfZGlyX2VudHJ5KHJlZnMsICIiLCAwLCAwKTsKKwkJaWYgKCpyZWZzLT5uYW1lKQorCQkJcGFja2VkX3JlZnNfZmlsZSA9IGdpdF9wYXRoX3N1Ym1vZHVsZShyZWZzLT5uYW1lLCAicGFja2VkLXJlZnMiKTsKKwkJZWxzZQorCQkJcGFja2VkX3JlZnNfZmlsZSA9IGdpdF9wYXRoKCJwYWNrZWQtcmVmcyIpOworCQlmID0gZm9wZW4ocGFja2VkX3JlZnNfZmlsZSwgInIiKTsKKwkJaWYgKGYpIHsKKwkJCXJlYWRfcGFja2VkX3JlZnMoZiwgZ2V0X3JlZl9kaXIocmVmcy0+cGFja2VkKSk7CisJCQlmY2xvc2UoZik7CisJCX0KKwl9CisJcmV0dXJuIGdldF9yZWZfZGlyKHJlZnMtPnBhY2tlZCk7Cit9CisKK3ZvaWQgYWRkX3BhY2tlZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlhZGRfcmVmKGdldF9wYWNrZWRfcmVmcyhnZXRfcmVmX2NhY2hlKE5VTEwpKSwKKwkJCWNyZWF0ZV9yZWZfZW50cnkocmVmbmFtZSwgc2hhMSwgUkVGX0lTUEFDS0VELCAxKSk7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBsb29zZSByZWZlcmVuY2VzIGZyb20gdGhlIG5hbWVzcGFjZSBkaXJuYW1lIGludG8gZGlyCisgKiAod2l0aG91dCByZWN1cnNpbmcpLiAgZGlybmFtZSBtdXN0IGVuZCB3aXRoICcvJy4gIGRpciBtdXN0IGJlIHRoZQorICogZGlyZWN0b3J5IGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gZGlybmFtZS4KKyAqLworc3RhdGljIHZvaWQgcmVhZF9sb29zZV9yZWZzKGNvbnN0IGNoYXIgKmRpcm5hbWUsIHN0cnVjdCByZWZfZGlyICpkaXIpCit7CisJc3RydWN0IHJlZl9jYWNoZSAqcmVmcyA9IGRpci0+cmVmX2NhY2hlOworCURJUiAqZDsKKwljb25zdCBjaGFyICpwYXRoOworCXN0cnVjdCBkaXJlbnQgKmRlOworCWludCBkaXJuYW1lbGVuID0gc3RybGVuKGRpcm5hbWUpOworCXN0cnVjdCBzdHJidWYgcmVmbmFtZTsKKworCWlmICgqcmVmcy0+bmFtZSkKKwkJcGF0aCA9IGdpdF9wYXRoX3N1Ym1vZHVsZShyZWZzLT5uYW1lLCAiJXMiLCBkaXJuYW1lKTsKKwllbHNlCisJCXBhdGggPSBnaXRfcGF0aCgiJXMiLCBkaXJuYW1lKTsKKworCWQgPSBvcGVuZGlyKHBhdGgpOworCWlmICghZCkKKwkJcmV0dXJuOworCisJc3RyYnVmX2luaXQoJnJlZm5hbWUsIGRpcm5hbWVsZW4gKyAyNTcpOworCXN0cmJ1Zl9hZGQoJnJlZm5hbWUsIGRpcm5hbWUsIGRpcm5hbWVsZW4pOworCisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWludCBmbGFnOworCQljb25zdCBjaGFyICpyZWZkaXI7CisKKwkJaWYgKGRlLT5kX25hbWVbMF0gPT0gJy4nKQorCQkJY29udGludWU7CisJCWlmIChoYXNfZXh0ZW5zaW9uKGRlLT5kX25hbWUsICIubG9jayIpKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9hZGRzdHIoJnJlZm5hbWUsIGRlLT5kX25hbWUpOworCQlyZWZkaXIgPSAqcmVmcy0+bmFtZQorCQkJPyBnaXRfcGF0aF9zdWJtb2R1bGUocmVmcy0+bmFtZSwgIiVzIiwgcmVmbmFtZS5idWYpCisJCQk6IGdpdF9wYXRoKCIlcyIsIHJlZm5hbWUuYnVmKTsKKwkJaWYgKHN0YXQocmVmZGlyLCAmc3QpIDwgMCkgeworCQkJOyAvKiBzaWxlbnRseSBpZ25vcmUgKi8KKwkJfSBlbHNlIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQlzdHJidWZfYWRkY2goJnJlZm5hbWUsICcvJyk7CisJCQlhZGRfZW50cnlfdG9fZGlyKGRpciwKKwkJCQkJIGNyZWF0ZV9kaXJfZW50cnkocmVmcywgcmVmbmFtZS5idWYsCisJCQkJCQkJICByZWZuYW1lLmxlbiwgMSkpOworCQl9IGVsc2UgeworCQkJaWYgKCpyZWZzLT5uYW1lKSB7CisJCQkJaGFzaGNscihzaGExKTsKKwkJCQlmbGFnID0gMDsKKwkJCQlpZiAocmVzb2x2ZV9naXRsaW5rX3JlZihyZWZzLT5uYW1lLCByZWZuYW1lLmJ1Ziwgc2hhMSkgPCAwKSB7CisJCQkJCWhhc2hjbHIoc2hhMSk7CisJCQkJCWZsYWcgfD0gUkVGX0lTQlJPS0VOOworCQkJCX0KKwkJCX0gZWxzZSBpZiAocmVhZF9yZWZfZnVsbChyZWZuYW1lLmJ1Ziwgc2hhMSwgMSwgJmZsYWcpKSB7CisJCQkJaGFzaGNscihzaGExKTsKKwkJCQlmbGFnIHw9IFJFRl9JU0JST0tFTjsKKwkJCX0KKwkJCWFkZF9lbnRyeV90b19kaXIoZGlyLAorCQkJCQkgY3JlYXRlX3JlZl9lbnRyeShyZWZuYW1lLmJ1Ziwgc2hhMSwgZmxhZywgMSkpOworCQl9CisJCXN0cmJ1Zl9zZXRsZW4oJnJlZm5hbWUsIGRpcm5hbWVsZW4pOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcmVmbmFtZSk7CisJY2xvc2VkaXIoZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2RpciAqZ2V0X2xvb3NlX3JlZnMoc3RydWN0IHJlZl9jYWNoZSAqcmVmcykKK3sKKwlpZiAoIXJlZnMtPmxvb3NlKSB7CisJCS8qCisJCSAqIE1hcmsgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkgY29tcGxldGUgYmVjYXVzZSB3ZQorCQkgKiBhcmUgYWJvdXQgdG8gcmVhZCB0aGUgb25seSBzdWJkaXJlY3RvcnkgdGhhdCBjYW4KKwkJICogaG9sZCByZWZlcmVuY2VzOgorCQkgKi8KKwkJcmVmcy0+bG9vc2UgPSBjcmVhdGVfZGlyX2VudHJ5KHJlZnMsICIiLCAwLCAwKTsKKwkJLyoKKwkJICogQ3JlYXRlIGFuIGluY29tcGxldGUgZW50cnkgZm9yICJyZWZzLyI6CisJCSAqLworCQlhZGRfZW50cnlfdG9fZGlyKGdldF9yZWZfZGlyKHJlZnMtPmxvb3NlKSwKKwkJCQkgY3JlYXRlX2Rpcl9lbnRyeShyZWZzLCAicmVmcy8iLCA1LCAxKSk7CisJfQorCXJldHVybiBnZXRfcmVmX2RpcihyZWZzLT5sb29zZSk7Cit9CisKKy8qIFdlIGFsbG93ICJyZWN1cnNpdmUiIHN5bWJvbGljIHJlZnMuIE9ubHkgd2l0aGluIHJlYXNvbiwgdGhvdWdoICovCisjZGVmaW5lIE1BWERFUFRIIDUKKyNkZWZpbmUgTUFYUkVGTEVOICgxMDI0KQorCisvKgorICogQ2FsbGVkIGJ5IHJlc29sdmVfZ2l0bGlua19yZWZfcmVjdXJzaXZlKCkgYWZ0ZXIgaXQgZmFpbGVkIHRvIHJlYWQKKyAqIGZyb20gdGhlIGxvb3NlIHJlZnMgaW4gcmVmX2NhY2hlIHJlZnMuIEZpbmQgPHJlZm5hbWU+IGluIHRoZQorICogcGFja2VkLXJlZnMgZmlsZSBmb3IgdGhlIHN1Ym1vZHVsZS4KKyAqLworc3RhdGljIGludCByZXNvbHZlX2dpdGxpbmtfcGFja2VkX3JlZihzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHJlZl9lbnRyeSAqcmVmOworCXN0cnVjdCByZWZfZGlyICpkaXIgPSBnZXRfcGFja2VkX3JlZnMocmVmcyk7CisKKwlyZWYgPSBmaW5kX3JlZihkaXIsIHJlZm5hbWUpOworCWlmIChyZWYgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJbWVtY3B5KHNoYTEsIHJlZi0+dS52YWx1ZS5zaGExLCAyMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVzb2x2ZV9naXRsaW5rX3JlZl9yZWN1cnNpdmUoc3RydWN0IHJlZl9jYWNoZSAqcmVmcywKKwkJCQkJIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJCSBpbnQgcmVjdXJzaW9uKQoreworCWludCBmZCwgbGVuOworCWNoYXIgYnVmZmVyWzEyOF0sICpwOworCWNoYXIgKnBhdGg7CisKKwlpZiAocmVjdXJzaW9uID4gTUFYREVQVEggfHwgc3RybGVuKHJlZm5hbWUpID4gTUFYUkVGTEVOKQorCQlyZXR1cm4gLTE7CisJcGF0aCA9ICpyZWZzLT5uYW1lCisJCT8gZ2l0X3BhdGhfc3VibW9kdWxlKHJlZnMtPm5hbWUsICIlcyIsIHJlZm5hbWUpCisJCTogZ2l0X3BhdGgoIiVzIiwgcmVmbmFtZSk7CisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gcmVzb2x2ZV9naXRsaW5rX3BhY2tlZF9yZWYocmVmcywgcmVmbmFtZSwgc2hhMSk7CisKKwlsZW4gPSByZWFkKGZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpLTEpOworCWNsb3NlKGZkKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIC0xOworCXdoaWxlIChsZW4gJiYgaXNzcGFjZShidWZmZXJbbGVuLTFdKSkKKwkJbGVuLS07CisJYnVmZmVyW2xlbl0gPSAwOworCisJLyogV2FzIGl0IGEgZGV0YWNoZWQgaGVhZCBvciBhbiBvbGQtZmFzaGlvbmVkIHN5bWxpbms/ICovCisJaWYgKCFnZXRfc2hhMV9oZXgoYnVmZmVyLCBzaGExKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBTeW1yZWY/ICovCisJaWYgKHN0cm5jbXAoYnVmZmVyLCAicmVmOiIsIDQpKQorCQlyZXR1cm4gLTE7CisJcCA9IGJ1ZmZlciArIDQ7CisJd2hpbGUgKGlzc3BhY2UoKnApKQorCQlwKys7CisKKwlyZXR1cm4gcmVzb2x2ZV9naXRsaW5rX3JlZl9yZWN1cnNpdmUocmVmcywgcCwgc2hhMSwgcmVjdXJzaW9uKzEpOworfQorCitpbnQgcmVzb2x2ZV9naXRsaW5rX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBsZW4gPSBzdHJsZW4ocGF0aCksIHJldHZhbDsKKwljaGFyICpzdWJtb2R1bGU7CisJc3RydWN0IHJlZl9jYWNoZSAqcmVmczsKKworCXdoaWxlIChsZW4gJiYgcGF0aFtsZW4tMV0gPT0gJy8nKQorCQlsZW4tLTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIC0xOworCXN1Ym1vZHVsZSA9IHhzdHJuZHVwKHBhdGgsIGxlbik7CisJcmVmcyA9IGdldF9yZWZfY2FjaGUoc3VibW9kdWxlKTsKKwlmcmVlKHN1Ym1vZHVsZSk7CisKKwlyZXR2YWwgPSByZXNvbHZlX2dpdGxpbmtfcmVmX3JlY3Vyc2l2ZShyZWZzLCByZWZuYW1lLCBzaGExLCAwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVHJ5IHRvIHJlYWQgcmVmIGZyb20gdGhlIHBhY2tlZCByZWZlcmVuY2VzLiAgT24gc3VjY2Vzcywgc2V0IHNoYTEKKyAqIGFuZCByZXR1cm4gMDsgb3RoZXJ3aXNlLCByZXR1cm4gLTEuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3BhY2tlZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgcmVmX2RpciAqcGFja2VkID0gZ2V0X3BhY2tlZF9yZWZzKGdldF9yZWZfY2FjaGUoTlVMTCkpOworCXN0cnVjdCByZWZfZW50cnkgKmVudHJ5ID0gZmluZF9yZWYocGFja2VkLCByZWZuYW1lKTsKKwlpZiAoZW50cnkpIHsKKwkJaGFzaGNweShzaGExLCBlbnRyeS0+dS52YWx1ZS5zaGExKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworY29uc3QgY2hhciAqcmVzb2x2ZV9yZWZfdW5zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCByZWFkaW5nLCBpbnQgKmZsYWcpCit7CisJaW50IGRlcHRoID0gTUFYREVQVEg7CisJc3NpemVfdCBsZW47CisJY2hhciBidWZmZXJbMjU2XTsKKwlzdGF0aWMgY2hhciByZWZuYW1lX2J1ZmZlclsyNTZdOworCisJaWYgKGZsYWcpCisJCSpmbGFnID0gMDsKKworCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChyZWZuYW1lLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgcGF0aFtQQVRIX01BWF07CisJCXN0cnVjdCBzdGF0IHN0OworCQljaGFyICpidWY7CisJCWludCBmZDsKKworCQlpZiAoLS1kZXB0aCA8IDApCisJCQlyZXR1cm4gTlVMTDsKKworCQlnaXRfc25wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzIiwgcmVmbmFtZSk7CisKKwkJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJCXJldHVybiBOVUxMOworCQkJLyoKKwkJCSAqIFRoZSBsb29zZSByZWZlcmVuY2UgZmlsZSBkb2VzIG5vdCBleGlzdDsKKwkJCSAqIGNoZWNrIGZvciBhIHBhY2tlZCByZWZlcmVuY2UuCisJCQkgKi8KKwkJCWlmICghZ2V0X3BhY2tlZF9yZWYocmVmbmFtZSwgc2hhMSkpIHsKKwkJCQlpZiAoZmxhZykKKwkJCQkJKmZsYWcgfD0gUkVGX0lTUEFDS0VEOworCQkJCXJldHVybiByZWZuYW1lOworCQkJfQorCQkJLyogVGhlIHJlZmVyZW5jZSBpcyBub3QgYSBwYWNrZWQgcmVmZXJlbmNlLCBlaXRoZXIuICovCisJCQlpZiAocmVhZGluZykgeworCQkJCXJldHVybiBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQloYXNoY2xyKHNoYTEpOworCQkJCXJldHVybiByZWZuYW1lOworCQkJfQorCQl9CisKKwkJLyogRm9sbG93ICJub3JtYWxpemVkIiAtIGllICJyZWZzLy4uIiBzeW1saW5rcyBieSBoYW5kICovCisJCWlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCQlsZW4gPSByZWFkbGluayhwYXRoLCBidWZmZXIsIHNpemVvZihidWZmZXIpLTEpOworCQkJaWYgKGxlbiA8IDApCisJCQkJcmV0dXJuIE5VTEw7CisJCQlidWZmZXJbbGVuXSA9IDA7CisJCQlpZiAoIXByZWZpeGNtcChidWZmZXIsICJyZWZzLyIpICYmCisJCQkJCSFjaGVja19yZWZuYW1lX2Zvcm1hdChidWZmZXIsIDApKSB7CisJCQkJc3RyY3B5KHJlZm5hbWVfYnVmZmVyLCBidWZmZXIpOworCQkJCXJlZm5hbWUgPSByZWZuYW1lX2J1ZmZlcjsKKwkJCQlpZiAoZmxhZykKKwkJCQkJKmZsYWcgfD0gUkVGX0lTU1lNUkVGOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJLyogSXMgaXQgYSBkaXJlY3Rvcnk/ICovCisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQllcnJubyA9IEVJU0RJUjsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJLyoKKwkJICogQW55dGhpbmcgZWxzZSwganVzdCBvcGVuIGl0IGFuZCB0cnkgdG8gdXNlIGl0IGFzCisJCSAqIGEgcmVmCisJCSAqLworCQlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCQlpZiAoZmQgPCAwKQorCQkJcmV0dXJuIE5VTEw7CisJCWxlbiA9IHJlYWRfaW5fZnVsbChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKKwkJY2xvc2UoZmQpOworCQlpZiAobGVuIDwgMCkKKwkJCXJldHVybiBOVUxMOworCQl3aGlsZSAobGVuICYmIGlzc3BhY2UoYnVmZmVyW2xlbi0xXSkpCisJCQlsZW4tLTsKKwkJYnVmZmVyW2xlbl0gPSAnXDAnOworCisJCS8qCisJCSAqIElzIGl0IGEgc3ltYm9saWMgcmVmPworCQkgKi8KKwkJaWYgKHByZWZpeGNtcChidWZmZXIsICJyZWY6IikpCisJCQlicmVhazsKKwkJaWYgKGZsYWcpCisJCQkqZmxhZyB8PSBSRUZfSVNTWU1SRUY7CisJCWJ1ZiA9IGJ1ZmZlciArIDQ7CisJCXdoaWxlIChpc3NwYWNlKCpidWYpKQorCQkJYnVmKys7CisJCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChidWYsIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpKSB7CisJCQlpZiAoZmxhZykKKwkJCQkqZmxhZyB8PSBSRUZfSVNCUk9LRU47CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlyZWZuYW1lID0gc3RyY3B5KHJlZm5hbWVfYnVmZmVyLCBidWYpOworCX0KKwkvKiBQbGVhc2Ugbm90ZSB0aGF0IEZFVENIX0hFQUQgaGFzIGEgc2Vjb25kIGxpbmUgY29udGFpbmluZyBvdGhlciBkYXRhLiAqLworCWlmIChnZXRfc2hhMV9oZXgoYnVmZmVyLCBzaGExKSB8fCAoYnVmZmVyWzQwXSAhPSAnXDAnICYmICFpc3NwYWNlKGJ1ZmZlcls0MF0pKSkgeworCQlpZiAoZmxhZykKKwkJCSpmbGFnIHw9IFJFRl9JU0JST0tFTjsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiByZWZuYW1lOworfQorCitjaGFyICpyZXNvbHZlX3JlZmR1cChjb25zdCBjaGFyICpyZWYsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCByZWFkaW5nLCBpbnQgKmZsYWcpCit7CisJY29uc3QgY2hhciAqcmV0ID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZiwgc2hhMSwgcmVhZGluZywgZmxhZyk7CisJcmV0dXJuIHJldCA/IHhzdHJkdXAocmV0KSA6IE5VTEw7Cit9CisKKy8qIFRoZSBhcmd1bWVudCB0byBmaWx0ZXJfcmVmcyAqLworc3RydWN0IHJlZl9maWx0ZXIgeworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJZWFjaF9yZWZfZm4gKmZuOworCXZvaWQgKmNiX2RhdGE7Cit9OworCitpbnQgcmVhZF9yZWZfZnVsbChjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgcmVhZGluZywgaW50ICpmbGFncykKK3sKKwlpZiAocmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsIHNoYTEsIHJlYWRpbmcsIGZsYWdzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC0xOworfQorCitpbnQgcmVhZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gcmVhZF9yZWZfZnVsbChyZWZuYW1lLCBzaGExLCAxLCBOVUxMKTsKK30KKworaW50IHJlZl9leGlzdHMoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXJldHVybiAhIXJlc29sdmVfcmVmX3Vuc2FmZShyZWZuYW1lLCBzaGExLCAxLCBOVUxMKTsKK30KKworc3RhdGljIGludCBmaWx0ZXJfcmVmcyhjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsCisJCSAgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZWZfZmlsdGVyICpmaWx0ZXIgPSAoc3RydWN0IHJlZl9maWx0ZXIgKilkYXRhOworCWlmIChmbm1hdGNoKGZpbHRlci0+cGF0dGVybiwgcmVmbmFtZSwgMCkpCisJCXJldHVybiAwOworCXJldHVybiBmaWx0ZXItPmZuKHJlZm5hbWUsIHNoYTEsIGZsYWdzLCBmaWx0ZXItPmNiX2RhdGEpOworfQorCitpbnQgcGVlbF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgZmxhZzsKKwl1bnNpZ25lZCBjaGFyIGJhc2VbMjBdOworCXN0cnVjdCBvYmplY3QgKm87CisKKwlpZiAoY3VycmVudF9yZWYgJiYgKGN1cnJlbnRfcmVmLT5uYW1lID09IHJlZm5hbWUKKwkJfHwgIXN0cmNtcChjdXJyZW50X3JlZi0+bmFtZSwgcmVmbmFtZSkpKSB7CisJCWlmIChjdXJyZW50X3JlZi0+ZmxhZyAmIFJFRl9LTk9XU19QRUVMRUQpIHsKKwkJCWhhc2hjcHkoc2hhMSwgY3VycmVudF9yZWYtPnUudmFsdWUucGVlbGVkKTsKKwkJCXJldHVybiAwOworCQl9CisJCWhhc2hjcHkoYmFzZSwgY3VycmVudF9yZWYtPnUudmFsdWUuc2hhMSk7CisJCWdvdG8gZmFsbGJhY2s7CisJfQorCisJaWYgKHJlYWRfcmVmX2Z1bGwocmVmbmFtZSwgYmFzZSwgMSwgJmZsYWcpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKGZsYWcgJiBSRUZfSVNQQUNLRUQpKSB7CisJCXN0cnVjdCByZWZfZGlyICpkaXIgPSBnZXRfcGFja2VkX3JlZnMoZ2V0X3JlZl9jYWNoZShOVUxMKSk7CisJCXN0cnVjdCByZWZfZW50cnkgKnIgPSBmaW5kX3JlZihkaXIsIHJlZm5hbWUpOworCisJCWlmIChyICE9IE5VTEwgJiYgci0+ZmxhZyAmIFJFRl9LTk9XU19QRUVMRUQpIHsKKwkJCWhhc2hjcHkoc2hhMSwgci0+dS52YWx1ZS5wZWVsZWQpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKK2ZhbGxiYWNrOgorCW8gPSBwYXJzZV9vYmplY3QoYmFzZSk7CisJaWYgKG8gJiYgby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBkZXJlZl90YWcobywgcmVmbmFtZSwgMCk7CisJCWlmIChvKSB7CisJCQloYXNoY3B5KHNoYTEsIG8tPnNoYTEpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitzdHJ1Y3Qgd2Fybl9pZl9kYW5nbGluZ19kYXRhIHsKKwlGSUxFICpmcDsKKwljb25zdCBjaGFyICpyZWZuYW1lOworCWNvbnN0IGNoYXIgKm1zZ19mbXQ7Cit9OworCitzdGF0aWMgaW50IHdhcm5faWZfZGFuZ2xpbmdfc3ltcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB3YXJuX2lmX2RhbmdsaW5nX2RhdGEgKmQgPSBjYl9kYXRhOworCWNvbnN0IGNoYXIgKnJlc29sdmVzX3RvOworCXVuc2lnbmVkIGNoYXIganVua1syMF07CisKKwlpZiAoIShmbGFncyAmIFJFRl9JU1NZTVJFRikpCisJCXJldHVybiAwOworCisJcmVzb2x2ZXNfdG8gPSByZXNvbHZlX3JlZl91bnNhZmUocmVmbmFtZSwganVuaywgMCwgTlVMTCk7CisJaWYgKCFyZXNvbHZlc190byB8fCBzdHJjbXAocmVzb2x2ZXNfdG8sIGQtPnJlZm5hbWUpKQorCQlyZXR1cm4gMDsKKworCWZwcmludGYoZC0+ZnAsIGQtPm1zZ19mbXQsIHJlZm5hbWUpOworCWZwdXRjKCdcbicsIGQtPmZwKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZihGSUxFICpmcCwgY29uc3QgY2hhciAqbXNnX2ZtdCwgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlzdHJ1Y3Qgd2Fybl9pZl9kYW5nbGluZ19kYXRhIGRhdGE7CisKKwlkYXRhLmZwID0gZnA7CisJZGF0YS5yZWZuYW1lID0gcmVmbmFtZTsKKwlkYXRhLm1zZ19mbXQgPSBtc2dfZm10OworCWZvcl9lYWNoX3Jhd3JlZih3YXJuX2lmX2RhbmdsaW5nX3N5bXJlZiwgJmRhdGEpOworfQorCitzdGF0aWMgaW50IGRvX2Zvcl9lYWNoX3JlZihjb25zdCBjaGFyICpzdWJtb2R1bGUsIGNvbnN0IGNoYXIgKmJhc2UsIGVhY2hfcmVmX2ZuIGZuLAorCQkJICAgaW50IHRyaW0sIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzID0gZ2V0X3JlZl9jYWNoZShzdWJtb2R1bGUpOworCXN0cnVjdCByZWZfZGlyICpwYWNrZWRfZGlyID0gZ2V0X3BhY2tlZF9yZWZzKHJlZnMpOworCXN0cnVjdCByZWZfZGlyICpsb29zZV9kaXIgPSBnZXRfbG9vc2VfcmVmcyhyZWZzKTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmIChiYXNlICYmICpiYXNlKSB7CisJCXBhY2tlZF9kaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKHBhY2tlZF9kaXIsIGJhc2UsIDApOworCQlsb29zZV9kaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKGxvb3NlX2RpciwgYmFzZSwgMCk7CisJfQorCisJaWYgKHBhY2tlZF9kaXIgJiYgbG9vc2VfZGlyKSB7CisJCXNvcnRfcmVmX2RpcihwYWNrZWRfZGlyKTsKKwkJc29ydF9yZWZfZGlyKGxvb3NlX2Rpcik7CisJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXJzKAorCQkJCXBhY2tlZF9kaXIsIGxvb3NlX2RpciwKKwkJCQliYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEpOworCX0gZWxzZSBpZiAocGFja2VkX2RpcikgeworCQlzb3J0X3JlZl9kaXIocGFja2VkX2Rpcik7CisJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX3JlZl9pbl9kaXIoCisJCQkJcGFja2VkX2RpciwgMCwKKwkJCQliYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEpOworCX0gZWxzZSBpZiAobG9vc2VfZGlyKSB7CisJCXNvcnRfcmVmX2Rpcihsb29zZV9kaXIpOworCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9yZWZfaW5fZGlyKAorCQkJCWxvb3NlX2RpciwgMCwKKwkJCQliYXNlLCBmbiwgdHJpbSwgZmxhZ3MsIGNiX2RhdGEpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgZG9faGVhZF9yZWYoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBmbGFnOworCisJaWYgKHN1Ym1vZHVsZSkgeworCQlpZiAocmVzb2x2ZV9naXRsaW5rX3JlZihzdWJtb2R1bGUsICJIRUFEIiwgc2hhMSkgPT0gMCkKKwkJCXJldHVybiBmbigiSEVBRCIsIHNoYTEsIDAsIGNiX2RhdGEpOworCisJCXJldHVybiAwOworCX0KKworCWlmICghcmVhZF9yZWZfZnVsbCgiSEVBRCIsIHNoYTEsIDEsICZmbGFnKSkKKwkJcmV0dXJuIGZuKCJIRUFEIiwgc2hhMSwgZmxhZywgY2JfZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGhlYWRfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBkb19oZWFkX3JlZihOVUxMLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCBoZWFkX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZG9faGVhZF9yZWYoc3VibW9kdWxlLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZihOVUxMLCAiIiwgZm4sIDAsIDAsIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBkb19mb3JfZWFjaF9yZWYoc3VibW9kdWxlLCAiIiwgZm4sIDAsIDAsIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmVmX2luKGNvbnN0IGNoYXIgKnByZWZpeCwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZihOVUxMLCBwcmVmaXgsIGZuLCBzdHJsZW4ocHJlZml4KSwgMCwgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9yZWZfaW5fc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgY29uc3QgY2hhciAqcHJlZml4LAorCQllYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKHN1Ym1vZHVsZSwgcHJlZml4LCBmbiwgc3RybGVuKHByZWZpeCksIDAsIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfdGFnX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luKCJyZWZzL3RhZ3MvIiwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfdGFnX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luX3N1Ym1vZHVsZShzdWJtb2R1bGUsICJyZWZzL3RhZ3MvIiwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfYnJhbmNoX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luKCJyZWZzL2hlYWRzLyIsIGZuLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX2JyYW5jaF9yZWZfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGZvcl9lYWNoX3JlZl9pbl9zdWJtb2R1bGUoc3VibW9kdWxlLCAicmVmcy9oZWFkcy8iLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9yZW1vdGVfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBmb3JfZWFjaF9yZWZfaW4oInJlZnMvcmVtb3Rlcy8iLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9yZW1vdGVfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBmb3JfZWFjaF9yZWZfaW5fc3VibW9kdWxlKHN1Ym1vZHVsZSwgInJlZnMvcmVtb3Rlcy8iLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9yZXBsYWNlX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKE5VTEwsICJyZWZzL3JlcGxhY2UvIiwgZm4sIDEzLCAwLCBjYl9kYXRhKTsKK30KKworaW50IGhlYWRfcmVmX25hbWVzcGFjZWQoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBmbGFnOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzSEVBRCIsIGdldF9naXRfbmFtZXNwYWNlKCkpOworCWlmICghcmVhZF9yZWZfZnVsbChidWYuYnVmLCBzaGExLCAxLCAmZmxhZykpCisJCXJldCA9IGZuKGJ1Zi5idWYsIHNoYTEsIGZsYWcsIGNiX2RhdGEpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGZvcl9lYWNoX25hbWVzcGFjZWRfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKwlzdHJidWZfYWRkZigmYnVmLCAiJXNyZWZzLyIsIGdldF9naXRfbmFtZXNwYWNlKCkpOworCXJldCA9IGRvX2Zvcl9lYWNoX3JlZihOVUxMLCBidWYuYnVmLCBmbiwgMCwgMCwgY2JfZGF0YSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGZvcl9lYWNoX2dsb2JfcmVmX2luKGVhY2hfcmVmX2ZuIGZuLCBjb25zdCBjaGFyICpwYXR0ZXJuLAorCWNvbnN0IGNoYXIgKnByZWZpeCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlYWxfcGF0dGVybiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZWZfZmlsdGVyIGZpbHRlcjsKKwlpbnQgcmV0OworCisJaWYgKCFwcmVmaXggJiYgcHJlZml4Y21wKHBhdHRlcm4sICJyZWZzLyIpKQorCQlzdHJidWZfYWRkc3RyKCZyZWFsX3BhdHRlcm4sICJyZWZzLyIpOworCWVsc2UgaWYgKHByZWZpeCkKKwkJc3RyYnVmX2FkZHN0cigmcmVhbF9wYXR0ZXJuLCBwcmVmaXgpOworCXN0cmJ1Zl9hZGRzdHIoJnJlYWxfcGF0dGVybiwgcGF0dGVybik7CisKKwlpZiAoIWhhc19nbG9iX3NwZWNpYWxzKHBhdHRlcm4pKSB7CisJCS8qIEFwcGVuZCBpbXBsaWVkICcvJyAnKicgaWYgbm90IHByZXNlbnQuICovCisJCWlmIChyZWFsX3BhdHRlcm4uYnVmW3JlYWxfcGF0dGVybi5sZW4gLSAxXSAhPSAnLycpCisJCQlzdHJidWZfYWRkY2goJnJlYWxfcGF0dGVybiwgJy8nKTsKKwkJLyogTm8gbmVlZCB0byBjaGVjayBmb3IgJyonLCB0aGVyZSBpcyBub25lLiAqLworCQlzdHJidWZfYWRkY2goJnJlYWxfcGF0dGVybiwgJyonKTsKKwl9CisKKwlmaWx0ZXIucGF0dGVybiA9IHJlYWxfcGF0dGVybi5idWY7CisJZmlsdGVyLmZuID0gZm47CisJZmlsdGVyLmNiX2RhdGEgPSBjYl9kYXRhOworCXJldCA9IGZvcl9lYWNoX3JlZihmaWx0ZXJfcmVmcywgJmZpbHRlcik7CisKKwlzdHJidWZfcmVsZWFzZSgmcmVhbF9wYXR0ZXJuKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZm9yX2VhY2hfZ2xvYl9yZWYoZWFjaF9yZWZfZm4gZm4sIGNvbnN0IGNoYXIgKnBhdHRlcm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGZvcl9lYWNoX2dsb2JfcmVmX2luKGZuLCBwYXR0ZXJuLCBOVUxMLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX3Jhd3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKE5VTEwsICIiLCBmbiwgMCwKKwkJCSAgICAgICBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTiwgY2JfZGF0YSk7Cit9CisKK2NvbnN0IGNoYXIgKnByZXR0aWZ5X3JlZm5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gbmFtZSArICgKKwkJIXByZWZpeGNtcChuYW1lLCAicmVmcy9oZWFkcy8iKSA/IDExIDoKKwkJIXByZWZpeGNtcChuYW1lLCAicmVmcy90YWdzLyIpID8gMTAgOgorCQkhcHJlZml4Y21wKG5hbWUsICJyZWZzL3JlbW90ZXMvIikgPyAxMyA6CisJCTApOworfQorCitjb25zdCBjaGFyICpyZWZfcmV2X3BhcnNlX3J1bGVzW10gPSB7CisJIiUuKnMiLAorCSJyZWZzLyUuKnMiLAorCSJyZWZzL3RhZ3MvJS4qcyIsCisJInJlZnMvaGVhZHMvJS4qcyIsCisJInJlZnMvcmVtb3Rlcy8lLipzIiwKKwkicmVmcy9yZW1vdGVzLyUuKnMvSEVBRCIsCisJTlVMTAorfTsKKworaW50IHJlZm5hbWVfbWF0Y2goY29uc3QgY2hhciAqYWJicmV2X25hbWUsIGNvbnN0IGNoYXIgKmZ1bGxfbmFtZSwgY29uc3QgY2hhciAqKnJ1bGVzKQoreworCWNvbnN0IGNoYXIgKipwOworCWNvbnN0IGludCBhYmJyZXZfbmFtZV9sZW4gPSBzdHJsZW4oYWJicmV2X25hbWUpOworCisJZm9yIChwID0gcnVsZXM7ICpwOyBwKyspIHsKKwkJaWYgKCFzdHJjbXAoZnVsbF9uYW1lLCBta3BhdGgoKnAsIGFiYnJldl9uYW1lX2xlbiwgYWJicmV2X25hbWUpKSkgeworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZWZfbG9jayAqdmVyaWZ5X2xvY2soc3RydWN0IHJlZl9sb2NrICpsb2NrLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLCBpbnQgbXVzdGV4aXN0KQoreworCWlmIChyZWFkX3JlZl9mdWxsKGxvY2stPnJlZl9uYW1lLCBsb2NrLT5vbGRfc2hhMSwgbXVzdGV4aXN0LCBOVUxMKSkgeworCQllcnJvcigiQ2FuJ3QgdmVyaWZ5IHJlZiAlcyIsIGxvY2stPnJlZl9uYW1lKTsKKwkJdW5sb2NrX3JlZihsb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChoYXNoY21wKGxvY2stPm9sZF9zaGExLCBvbGRfc2hhMSkpIHsKKwkJZXJyb3IoIlJlZiAlcyBpcyBhdCAlcyBidXQgZXhwZWN0ZWQgJXMiLCBsb2NrLT5yZWZfbmFtZSwKKwkJCXNoYTFfdG9faGV4KGxvY2stPm9sZF9zaGExKSwgc2hhMV90b19oZXgob2xkX3NoYTEpKTsKKwkJdW5sb2NrX3JlZihsb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBsb2NrOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9lbXB0eV9kaXJlY3Rvcmllcyhjb25zdCBjaGFyICpmaWxlKQoreworCS8qIHdlIHdhbnQgdG8gY3JlYXRlIGEgZmlsZSBidXQgdGhlcmUgaXMgYSBkaXJlY3RvcnkgdGhlcmU7CisJICogaWYgdGhhdCBpcyBhbiBlbXB0eSBkaXJlY3RvcnkgKG9yIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMKKwkgKiBvbmx5IGVtcHR5IGRpcmVjdG9yaWVzKSwgcmVtb3ZlIHRoZW0uCisJICovCisJc3RydWN0IHN0cmJ1ZiBwYXRoOworCWludCByZXN1bHQ7CisKKwlzdHJidWZfaW5pdCgmcGF0aCwgMjApOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGZpbGUpOworCisJcmVzdWx0ID0gcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmcGF0aCwgUkVNT1ZFX0RJUl9FTVBUWV9PTkxZKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiAqc3RyaW5nIGFuZCAqbGVuIHdpbGwgb25seSBiZSBzdWJzdGl0dXRlZCwgYW5kICpzdHJpbmcgcmV0dXJuZWQgKGZvcgorICogbGF0ZXIgZnJlZSgpaW5nKSBpZiB0aGUgc3RyaW5nIHBhc3NlZCBpbiBpcyBhIG1hZ2ljIHNob3J0LWhhbmQgZm9ybQorICogdG8gbmFtZSBhIGJyYW5jaC4KKyAqLworc3RhdGljIGNoYXIgKnN1YnN0aXR1dGVfYnJhbmNoX25hbWUoY29uc3QgY2hhciAqKnN0cmluZywgaW50ICpsZW4pCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gaW50ZXJwcmV0X2JyYW5jaF9uYW1lKCpzdHJpbmcsICZidWYpOworCisJaWYgKHJldCA9PSAqbGVuKSB7CisJCXNpemVfdCBzaXplOworCQkqc3RyaW5nID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc2l6ZSk7CisJCSpsZW4gPSBzaXplOworCQlyZXR1cm4gKGNoYXIgKikqc3RyaW5nOworCX0KKworCXJldHVybiBOVUxMOworfQorCitpbnQgZHdpbV9yZWYoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqcmVmKQoreworCWNoYXIgKmxhc3RfYnJhbmNoID0gc3Vic3RpdHV0ZV9icmFuY2hfbmFtZSgmc3RyLCAmbGVuKTsKKwljb25zdCBjaGFyICoqcCwgKnI7CisJaW50IHJlZnNfZm91bmQgPSAwOworCisJKnJlZiA9IE5VTEw7CisJZm9yIChwID0gcmVmX3Jldl9wYXJzZV9ydWxlczsgKnA7IHArKykgeworCQljaGFyIGZ1bGxyZWZbUEFUSF9NQVhdOworCQl1bnNpZ25lZCBjaGFyIHNoYTFfZnJvbV9yZWZbMjBdOworCQl1bnNpZ25lZCBjaGFyICp0aGlzX3Jlc3VsdDsKKwkJaW50IGZsYWc7CisKKwkJdGhpc19yZXN1bHQgPSByZWZzX2ZvdW5kID8gc2hhMV9mcm9tX3JlZiA6IHNoYTE7CisJCW1rc25wYXRoKGZ1bGxyZWYsIHNpemVvZihmdWxscmVmKSwgKnAsIGxlbiwgc3RyKTsKKwkJciA9IHJlc29sdmVfcmVmX3Vuc2FmZShmdWxscmVmLCB0aGlzX3Jlc3VsdCwgMSwgJmZsYWcpOworCQlpZiAocikgeworCQkJaWYgKCFyZWZzX2ZvdW5kKyspCisJCQkJKnJlZiA9IHhzdHJkdXAocik7CisJCQlpZiAoIXdhcm5fYW1iaWd1b3VzX3JlZnMpCisJCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpICYmIHN0cmNtcChmdWxscmVmLCAiSEVBRCIpKSB7CisJCQl3YXJuaW5nKCJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMuIiwgZnVsbHJlZik7CisJCX0gZWxzZSBpZiAoKGZsYWcgJiBSRUZfSVNCUk9LRU4pICYmIHN0cmNocihmdWxscmVmLCAnLycpKSB7CisJCQl3YXJuaW5nKCJpZ25vcmluZyBicm9rZW4gcmVmICVzLiIsIGZ1bGxyZWYpOworCQl9CisJfQorCWZyZWUobGFzdF9icmFuY2gpOworCXJldHVybiByZWZzX2ZvdW5kOworfQorCitpbnQgZHdpbV9sb2coY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqbG9nKQoreworCWNoYXIgKmxhc3RfYnJhbmNoID0gc3Vic3RpdHV0ZV9icmFuY2hfbmFtZSgmc3RyLCAmbGVuKTsKKwljb25zdCBjaGFyICoqcDsKKwlpbnQgbG9nc19mb3VuZCA9IDA7CisKKwkqbG9nID0gTlVMTDsKKwlmb3IgKHAgPSByZWZfcmV2X3BhcnNlX3J1bGVzOyAqcDsgcCsrKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQl1bnNpZ25lZCBjaGFyIGhhc2hbMjBdOworCQljaGFyIHBhdGhbUEFUSF9NQVhdOworCQljb25zdCBjaGFyICpyZWYsICppdDsKKworCQlta3NucGF0aChwYXRoLCBzaXplb2YocGF0aCksICpwLCBsZW4sIHN0cik7CisJCXJlZiA9IHJlc29sdmVfcmVmX3Vuc2FmZShwYXRoLCBoYXNoLCAxLCBOVUxMKTsKKwkJaWYgKCFyZWYpCisJCQljb250aW51ZTsKKwkJaWYgKCFzdGF0KGdpdF9wYXRoKCJsb2dzLyVzIiwgcGF0aCksICZzdCkgJiYKKwkJICAgIFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCQlpdCA9IHBhdGg7CisJCWVsc2UgaWYgKHN0cmNtcChyZWYsIHBhdGgpICYmCisJCQkgIXN0YXQoZ2l0X3BhdGgoImxvZ3MvJXMiLCByZWYpLCAmc3QpICYmCisJCQkgU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCWl0ID0gcmVmOworCQllbHNlCisJCQljb250aW51ZTsKKwkJaWYgKCFsb2dzX2ZvdW5kKyspIHsKKwkJCSpsb2cgPSB4c3RyZHVwKGl0KTsKKwkJCWhhc2hjcHkoc2hhMSwgaGFzaCk7CisJCX0KKwkJaWYgKCF3YXJuX2FtYmlndW91c19yZWZzKQorCQkJYnJlYWs7CisJfQorCWZyZWUobGFzdF9icmFuY2gpOworCXJldHVybiBsb2dzX2ZvdW5kOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9sb2NrICpsb2NrX3JlZl9zaGExX2Jhc2ljKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKKwkJCQkJICAgIGludCBmbGFncywgaW50ICp0eXBlX3ApCit7CisJY2hhciAqcmVmX2ZpbGU7CisJY29uc3QgY2hhciAqb3JpZ19yZWZuYW1lID0gcmVmbmFtZTsKKwlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7CisJaW50IGxhc3RfZXJybm8gPSAwOworCWludCB0eXBlLCBsZmxhZ3M7CisJaW50IG11c3RleGlzdCA9IChvbGRfc2hhMSAmJiAhaXNfbnVsbF9zaGExKG9sZF9zaGExKSk7CisJaW50IG1pc3NpbmcgPSAwOworCisJbG9jayA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByZWZfbG9jaykpOworCWxvY2stPmxvY2tfZmQgPSAtMTsKKworCXJlZm5hbWUgPSByZXNvbHZlX3JlZl91bnNhZmUocmVmbmFtZSwgbG9jay0+b2xkX3NoYTEsIG11c3RleGlzdCwgJnR5cGUpOworCWlmICghcmVmbmFtZSAmJiBlcnJubyA9PSBFSVNESVIpIHsKKwkJLyogd2UgYXJlIHRyeWluZyB0byBsb2NrIGZvbyBidXQgd2UgdXNlZCB0bworCQkgKiBoYXZlIGZvby9iYXIgd2hpY2ggbm93IGRvZXMgbm90IGV4aXN0OworCQkgKiBpdCBpcyBub3JtYWwgZm9yIHRoZSBlbXB0eSBkaXJlY3RvcnkgJ2ZvbycKKwkJICogdG8gcmVtYWluLgorCQkgKi8KKwkJcmVmX2ZpbGUgPSBnaXRfcGF0aCgiJXMiLCBvcmlnX3JlZm5hbWUpOworCQlpZiAocmVtb3ZlX2VtcHR5X2RpcmVjdG9yaWVzKHJlZl9maWxlKSkgeworCQkJbGFzdF9lcnJubyA9IGVycm5vOworCQkJZXJyb3IoInRoZXJlIGFyZSBzdGlsbCByZWZzIHVuZGVyICclcyciLCBvcmlnX3JlZm5hbWUpOworCQkJZ290byBlcnJvcl9yZXR1cm47CisJCX0KKwkJcmVmbmFtZSA9IHJlc29sdmVfcmVmX3Vuc2FmZShvcmlnX3JlZm5hbWUsIGxvY2stPm9sZF9zaGExLCBtdXN0ZXhpc3QsICZ0eXBlKTsKKwl9CisJaWYgKHR5cGVfcCkKKwkgICAgKnR5cGVfcCA9IHR5cGU7CisJaWYgKCFyZWZuYW1lKSB7CisJCWxhc3RfZXJybm8gPSBlcnJubzsKKwkJZXJyb3IoInVuYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZSAlczogJXMiLAorCQkJb3JpZ19yZWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CisJbWlzc2luZyA9IGlzX251bGxfc2hhMShsb2NrLT5vbGRfc2hhMSk7CisJLyogV2hlbiB0aGUgcmVmIGRpZCBub3QgZXhpc3QgYW5kIHdlIGFyZSBjcmVhdGluZyBpdCwKKwkgKiBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gZXhpc3RpbmcgcmVmIHRoYXQgaXMgcGFja2VkCisJICogd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBvdXIgcmVmbmFtZSwgbm9yIGEgcmVmIHdob3NlCisJICogbmFtZSBpcyBhIHByb3BlciBwcmVmaXggb2Ygb3VyIHJlZm5hbWUuCisJICovCisJaWYgKG1pc3NpbmcgJiYKKwkgICAgICFpc19yZWZuYW1lX2F2YWlsYWJsZShyZWZuYW1lLCBOVUxMLCBnZXRfcGFja2VkX3JlZnMoZ2V0X3JlZl9jYWNoZShOVUxMKSkpKSB7CisJCWxhc3RfZXJybm8gPSBFTk9URElSOworCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CisKKwlsb2NrLT5sayA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKworCWxmbGFncyA9IExPQ0tfRElFX09OX0VSUk9SOworCWlmIChmbGFncyAmIFJFRl9OT0RFUkVGKSB7CisJCXJlZm5hbWUgPSBvcmlnX3JlZm5hbWU7CisJCWxmbGFncyB8PSBMT0NLX05PREVSRUY7CisJfQorCWxvY2stPnJlZl9uYW1lID0geHN0cmR1cChyZWZuYW1lKTsKKwlsb2NrLT5vcmlnX3JlZl9uYW1lID0geHN0cmR1cChvcmlnX3JlZm5hbWUpOworCXJlZl9maWxlID0gZ2l0X3BhdGgoIiVzIiwgcmVmbmFtZSk7CisJaWYgKG1pc3NpbmcpCisJCWxvY2stPmZvcmNlX3dyaXRlID0gMTsKKwlpZiAoKGZsYWdzICYgUkVGX05PREVSRUYpICYmICh0eXBlICYgUkVGX0lTU1lNUkVGKSkKKwkJbG9jay0+Zm9yY2Vfd3JpdGUgPSAxOworCisJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMocmVmX2ZpbGUpKSB7CisJCWxhc3RfZXJybm8gPSBlcnJubzsKKwkJZXJyb3IoInVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciAlcyIsIHJlZl9maWxlKTsKKwkJZ290byBlcnJvcl9yZXR1cm47CisJfQorCisJbG9jay0+bG9ja19mZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUobG9jay0+bGssIHJlZl9maWxlLCBsZmxhZ3MpOworCXJldHVybiBvbGRfc2hhMSA/IHZlcmlmeV9sb2NrKGxvY2ssIG9sZF9zaGExLCBtdXN0ZXhpc3QpIDogbG9jazsKKworIGVycm9yX3JldHVybjoKKwl1bmxvY2tfcmVmKGxvY2spOworCWVycm5vID0gbGFzdF9lcnJubzsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IHJlZl9sb2NrICpsb2NrX3JlZl9zaGExKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExKQoreworCWNoYXIgcmVmcGF0aFtQQVRIX01BWF07CisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZm5hbWUsIDApKQorCQlyZXR1cm4gTlVMTDsKKwlzdHJjcHkocmVmcGF0aCwgbWtwYXRoKCJyZWZzLyVzIiwgcmVmbmFtZSkpOworCXJldHVybiBsb2NrX3JlZl9zaGExX2Jhc2ljKHJlZnBhdGgsIG9sZF9zaGExLCAwLCBOVUxMKTsKK30KKworc3RydWN0IHJlZl9sb2NrICpsb2NrX2FueV9yZWZfZm9yX3VwZGF0ZShjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsIGludCBmbGFncykKK3sKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmbmFtZSwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBsb2NrX3JlZl9zaGExX2Jhc2ljKHJlZm5hbWUsIG9sZF9zaGExLCBmbGFncywgTlVMTCk7Cit9CisKK3N0cnVjdCByZXBhY2tfd2l0aG91dF9yZWZfc2IgeworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisJaW50IGZkOworfTsKKworc3RhdGljIGludCByZXBhY2tfd2l0aG91dF9yZWZfZm4oY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZXBhY2tfd2l0aG91dF9yZWZfc2IgKmRhdGEgPSBjYl9kYXRhOworCWNoYXIgbGluZVtQQVRIX01BWCArIDEwMF07CisJaW50IGxlbjsKKworCWlmICghc3RyY21wKGRhdGEtPnJlZm5hbWUsIHJlZm5hbWUpKQorCQlyZXR1cm4gMDsKKwlsZW4gPSBzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksICIlcyAlc1xuIiwKKwkJICAgICAgIHNoYTFfdG9faGV4KHNoYTEpLCByZWZuYW1lKTsKKwkvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuIGJ1dCBqdXN0IGJlaW5nIGRlZmVuc2l2ZSAqLworCWlmIChsZW4gPiBzaXplb2YobGluZSkpCisJCWRpZSgidG9vIGxvbmcgYSByZWZuYW1lICclcyciLCByZWZuYW1lKTsKKwl3cml0ZV9vcl9kaWUoZGF0YS0+ZmQsIGxpbmUsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIHBhY2tsb2NrOworCitzdGF0aWMgaW50IHJlcGFja193aXRob3V0X3JlZihjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXN0cnVjdCByZXBhY2tfd2l0aG91dF9yZWZfc2IgZGF0YTsKKwlzdHJ1Y3QgcmVmX2RpciAqcGFja2VkID0gZ2V0X3BhY2tlZF9yZWZzKGdldF9yZWZfY2FjaGUoTlVMTCkpOworCWlmIChmaW5kX3JlZihwYWNrZWQsIHJlZm5hbWUpID09IE5VTEwpCisJCXJldHVybiAwOworCWRhdGEucmVmbmFtZSA9IHJlZm5hbWU7CisJZGF0YS5mZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJnBhY2tsb2NrLCBnaXRfcGF0aCgicGFja2VkLXJlZnMiKSwgMCk7CisJaWYgKGRhdGEuZmQgPCAwKSB7CisJCXVuYWJsZV90b19sb2NrX2Vycm9yKGdpdF9wYXRoKCJwYWNrZWQtcmVmcyIpLCBlcnJubyk7CisJCXJldHVybiBlcnJvcigiY2Fubm90IGRlbGV0ZSAnJXMnIGZyb20gcGFja2VkIHJlZnMiLCByZWZuYW1lKTsKKwl9CisJZG9fZm9yX2VhY2hfcmVmX2luX2RpcihwYWNrZWQsIDAsICIiLCByZXBhY2tfd2l0aG91dF9yZWZfZm4sIDAsIDAsICZkYXRhKTsKKwlyZXR1cm4gY29tbWl0X2xvY2tfZmlsZSgmcGFja2xvY2spOworfQorCitpbnQgZGVsZXRlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZGVsb3B0KQoreworCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKwlpbnQgZXJyLCBpID0gMCwgcmV0ID0gMCwgZmxhZyA9IDA7CisKKwlsb2NrID0gbG9ja19yZWZfc2hhMV9iYXNpYyhyZWZuYW1lLCBzaGExLCAwLCAmZmxhZyk7CisJaWYgKCFsb2NrKQorCQlyZXR1cm4gMTsKKwlpZiAoIShmbGFnICYgUkVGX0lTUEFDS0VEKSB8fCBmbGFnICYgUkVGX0lTU1lNUkVGKSB7CisJCS8qIGxvb3NlICovCisJCWNvbnN0IGNoYXIgKnBhdGg7CisKKwkJaWYgKCEoZGVsb3B0ICYgUkVGX05PREVSRUYpKSB7CisJCQlpID0gc3RybGVuKGxvY2stPmxrLT5maWxlbmFtZSkgLSA1OyAvKiAubG9jayAqLworCQkJbG9jay0+bGstPmZpbGVuYW1lW2ldID0gMDsKKwkJCXBhdGggPSBsb2NrLT5say0+ZmlsZW5hbWU7CisJCX0gZWxzZSB7CisJCQlwYXRoID0gZ2l0X3BhdGgoIiVzIiwgcmVmbmFtZSk7CisJCX0KKwkJZXJyID0gdW5saW5rX29yX3dhcm4ocGF0aCk7CisJCWlmIChlcnIgJiYgZXJybm8gIT0gRU5PRU5UKQorCQkJcmV0ID0gMTsKKworCQlpZiAoIShkZWxvcHQgJiBSRUZfTk9ERVJFRikpCisJCQlsb2NrLT5say0+ZmlsZW5hbWVbaV0gPSAnLic7CisJfQorCS8qIHJlbW92aW5nIHRoZSBsb29zZSBvbmUgY291bGQgaGF2ZSByZXN1cnJlY3RlZCBhbiBlYXJsaWVyCisJICogcGFja2VkIG9uZS4gIEFsc28sIGlmIGl0IHdhcyBub3QgbG9vc2Ugd2UgbmVlZCB0byByZXBhY2sKKwkgKiB3aXRob3V0IGl0LgorCSAqLworCXJldCB8PSByZXBhY2tfd2l0aG91dF9yZWYocmVmbmFtZSk7CisKKwl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aCgibG9ncy8lcyIsIGxvY2stPnJlZl9uYW1lKSk7CisJaW52YWxpZGF0ZV9yZWZfY2FjaGUoTlVMTCk7CisJdW5sb2NrX3JlZihsb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUGVvcGxlIHVzaW5nIGNvbnRyaWIncyBnaXQtbmV3LXdvcmtkaXIgaGF2ZSAuZ2l0L2xvZ3MvcmVmcyAtPgorICogL3NvbWUvb3RoZXIvcGF0aC8uZ2l0L2xvZ3MvcmVmcywgYW5kIHRoYXQgbWF5IGxpdmUgb24gYW5vdGhlciBkZXZpY2UuCisgKgorICogSU9XLCB0byBhdm9pZCBjcm9zcyBkZXZpY2UgcmVuYW1lIGVycm9ycywgdGhlIHRlbXBvcmFyeSByZW5hbWVkIGxvZyBtdXN0CisgKiBsaXZlIGludG8gbG9ncy9yZWZzLgorICovCisjZGVmaW5lIFRNUF9SRU5BTUVEX0xPRyAgImxvZ3MvcmVmcy8udG1wLXJlbmFtZWQtbG9nIgorCitpbnQgcmVuYW1lX3JlZihjb25zdCBjaGFyICpvbGRyZWZuYW1lLCBjb25zdCBjaGFyICpuZXdyZWZuYW1lLCBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgb3JpZ19zaGExWzIwXTsKKwlpbnQgZmxhZyA9IDAsIGxvZ21vdmVkID0gMDsKKwlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7CisJc3RydWN0IHN0YXQgbG9naW5mbzsKKwlpbnQgbG9nID0gIWxzdGF0KGdpdF9wYXRoKCJsb2dzLyVzIiwgb2xkcmVmbmFtZSksICZsb2dpbmZvKTsKKwljb25zdCBjaGFyICpzeW1yZWYgPSBOVUxMOworCXN0cnVjdCByZWZfY2FjaGUgKnJlZnMgPSBnZXRfcmVmX2NhY2hlKE5VTEwpOworCisJaWYgKGxvZyAmJiBTX0lTTE5LKGxvZ2luZm8uc3RfbW9kZSkpCisJCXJldHVybiBlcnJvcigicmVmbG9nIGZvciAlcyBpcyBhIHN5bWxpbmsiLCBvbGRyZWZuYW1lKTsKKworCXN5bXJlZiA9IHJlc29sdmVfcmVmX3Vuc2FmZShvbGRyZWZuYW1lLCBvcmlnX3NoYTEsIDEsICZmbGFnKTsKKwlpZiAoZmxhZyAmIFJFRl9JU1NZTVJFRikKKwkJcmV0dXJuIGVycm9yKCJyZWZuYW1lICVzIGlzIGEgc3ltYm9saWMgcmVmLCByZW5hbWluZyBpdCBpcyBub3Qgc3VwcG9ydGVkIiwKKwkJCW9sZHJlZm5hbWUpOworCWlmICghc3ltcmVmKQorCQlyZXR1cm4gZXJyb3IoInJlZm5hbWUgJXMgbm90IGZvdW5kIiwgb2xkcmVmbmFtZSk7CisKKwlpZiAoIWlzX3JlZm5hbWVfYXZhaWxhYmxlKG5ld3JlZm5hbWUsIG9sZHJlZm5hbWUsIGdldF9wYWNrZWRfcmVmcyhyZWZzKSkpCisJCXJldHVybiAxOworCisJaWYgKCFpc19yZWZuYW1lX2F2YWlsYWJsZShuZXdyZWZuYW1lLCBvbGRyZWZuYW1lLCBnZXRfbG9vc2VfcmVmcyhyZWZzKSkpCisJCXJldHVybiAxOworCisJaWYgKGxvZyAmJiByZW5hbWUoZ2l0X3BhdGgoImxvZ3MvJXMiLCBvbGRyZWZuYW1lKSwgZ2l0X3BhdGgoVE1QX1JFTkFNRURfTE9HKSkpCisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIG1vdmUgbG9nZmlsZSBsb2dzLyVzIHRvICJUTVBfUkVOQU1FRF9MT0ciOiAlcyIsCisJCQlvbGRyZWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCisJaWYgKGRlbGV0ZV9yZWYob2xkcmVmbmFtZSwgb3JpZ19zaGExLCBSRUZfTk9ERVJFRikpIHsKKwkJZXJyb3IoInVuYWJsZSB0byBkZWxldGUgb2xkICVzIiwgb2xkcmVmbmFtZSk7CisJCWdvdG8gcm9sbGJhY2s7CisJfQorCisJaWYgKCFyZWFkX3JlZl9mdWxsKG5ld3JlZm5hbWUsIHNoYTEsIDEsICZmbGFnKSAmJgorCSAgICBkZWxldGVfcmVmKG5ld3JlZm5hbWUsIHNoYTEsIFJFRl9OT0RFUkVGKSkgeworCQlpZiAoZXJybm89PUVJU0RJUikgeworCQkJaWYgKHJlbW92ZV9lbXB0eV9kaXJlY3RvcmllcyhnaXRfcGF0aCgiJXMiLCBuZXdyZWZuYW1lKSkpIHsKKwkJCQllcnJvcigiRGlyZWN0b3J5IG5vdCBlbXB0eTogJXMiLCBuZXdyZWZuYW1lKTsKKwkJCQlnb3RvIHJvbGxiYWNrOworCQkJfQorCQl9IGVsc2UgeworCQkJZXJyb3IoInVuYWJsZSB0byBkZWxldGUgZXhpc3RpbmcgJXMiLCBuZXdyZWZuYW1lKTsKKwkJCWdvdG8gcm9sbGJhY2s7CisJCX0KKwl9CisKKwlpZiAobG9nICYmIHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoZ2l0X3BhdGgoImxvZ3MvJXMiLCBuZXdyZWZuYW1lKSkpIHsKKwkJZXJyb3IoInVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciAlcyIsIG5ld3JlZm5hbWUpOworCQlnb3RvIHJvbGxiYWNrOworCX0KKworIHJldHJ5OgorCWlmIChsb2cgJiYgcmVuYW1lKGdpdF9wYXRoKFRNUF9SRU5BTUVEX0xPRyksIGdpdF9wYXRoKCJsb2dzLyVzIiwgbmV3cmVmbmFtZSkpKSB7CisJCWlmIChlcnJubz09RUlTRElSIHx8IGVycm5vPT1FTk9URElSKSB7CisJCQkvKgorCQkJICogcmVuYW1lKGEsIGIpIHdoZW4gYiBpcyBhbiBleGlzdGluZworCQkJICogZGlyZWN0b3J5IG91Z2h0IHRvIHJlc3VsdCBpbiBJU0RJUiwgYnV0CisJCQkgKiBTb2xhcmlzIDUuOCBnaXZlcyBFTk9URElSLiAgU2hlZXNoLgorCQkJICovCisJCQlpZiAocmVtb3ZlX2VtcHR5X2RpcmVjdG9yaWVzKGdpdF9wYXRoKCJsb2dzLyVzIiwgbmV3cmVmbmFtZSkpKSB7CisJCQkJZXJyb3IoIkRpcmVjdG9yeSBub3QgZW1wdHk6IGxvZ3MvJXMiLCBuZXdyZWZuYW1lKTsKKwkJCQlnb3RvIHJvbGxiYWNrOworCQkJfQorCQkJZ290byByZXRyeTsKKwkJfSBlbHNlIHsKKwkJCWVycm9yKCJ1bmFibGUgdG8gbW92ZSBsb2dmaWxlICJUTVBfUkVOQU1FRF9MT0ciIHRvIGxvZ3MvJXM6ICVzIiwKKwkJCQluZXdyZWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJZ290byByb2xsYmFjazsKKwkJfQorCX0KKwlsb2dtb3ZlZCA9IGxvZzsKKworCWxvY2sgPSBsb2NrX3JlZl9zaGExX2Jhc2ljKG5ld3JlZm5hbWUsIE5VTEwsIDAsIE5VTEwpOworCWlmICghbG9jaykgeworCQllcnJvcigidW5hYmxlIHRvIGxvY2sgJXMgZm9yIHVwZGF0ZSIsIG5ld3JlZm5hbWUpOworCQlnb3RvIHJvbGxiYWNrOworCX0KKwlsb2NrLT5mb3JjZV93cml0ZSA9IDE7CisJaGFzaGNweShsb2NrLT5vbGRfc2hhMSwgb3JpZ19zaGExKTsKKwlpZiAod3JpdGVfcmVmX3NoYTEobG9jaywgb3JpZ19zaGExLCBsb2dtc2cpKSB7CisJCWVycm9yKCJ1bmFibGUgdG8gd3JpdGUgY3VycmVudCBzaGExIGludG8gJXMiLCBuZXdyZWZuYW1lKTsKKwkJZ290byByb2xsYmFjazsKKwl9CisKKwlyZXR1cm4gMDsKKworIHJvbGxiYWNrOgorCWxvY2sgPSBsb2NrX3JlZl9zaGExX2Jhc2ljKG9sZHJlZm5hbWUsIE5VTEwsIDAsIE5VTEwpOworCWlmICghbG9jaykgeworCQllcnJvcigidW5hYmxlIHRvIGxvY2sgJXMgZm9yIHJvbGxiYWNrIiwgb2xkcmVmbmFtZSk7CisJCWdvdG8gcm9sbGJhY2tsb2c7CisJfQorCisJbG9jay0+Zm9yY2Vfd3JpdGUgPSAxOworCWZsYWcgPSBsb2dfYWxsX3JlZl91cGRhdGVzOworCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSAwOworCWlmICh3cml0ZV9yZWZfc2hhMShsb2NrLCBvcmlnX3NoYTEsIE5VTEwpKQorCQllcnJvcigidW5hYmxlIHRvIHdyaXRlIGN1cnJlbnQgc2hhMSBpbnRvICVzIiwgb2xkcmVmbmFtZSk7CisJbG9nX2FsbF9yZWZfdXBkYXRlcyA9IGZsYWc7CisKKyByb2xsYmFja2xvZzoKKwlpZiAobG9nbW92ZWQgJiYgcmVuYW1lKGdpdF9wYXRoKCJsb2dzLyVzIiwgbmV3cmVmbmFtZSksIGdpdF9wYXRoKCJsb2dzLyVzIiwgb2xkcmVmbmFtZSkpKQorCQllcnJvcigidW5hYmxlIHRvIHJlc3RvcmUgbG9nZmlsZSAlcyBmcm9tICVzOiAlcyIsCisJCQlvbGRyZWZuYW1lLCBuZXdyZWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCWlmICghbG9nbW92ZWQgJiYgbG9nICYmCisJICAgIHJlbmFtZShnaXRfcGF0aChUTVBfUkVOQU1FRF9MT0cpLCBnaXRfcGF0aCgibG9ncy8lcyIsIG9sZHJlZm5hbWUpKSkKKwkJZXJyb3IoInVuYWJsZSB0byByZXN0b3JlIGxvZ2ZpbGUgJXMgZnJvbSAiVE1QX1JFTkFNRURfTE9HIjogJXMiLAorCQkJb2xkcmVmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKworCXJldHVybiAxOworfQorCitpbnQgY2xvc2VfcmVmKHN0cnVjdCByZWZfbG9jayAqbG9jaykKK3sKKwlpZiAoY2xvc2VfbG9ja19maWxlKGxvY2stPmxrKSkKKwkJcmV0dXJuIC0xOworCWxvY2stPmxvY2tfZmQgPSAtMTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbW1pdF9yZWYoc3RydWN0IHJlZl9sb2NrICpsb2NrKQoreworCWlmIChjb21taXRfbG9ja19maWxlKGxvY2stPmxrKSkKKwkJcmV0dXJuIC0xOworCWxvY2stPmxvY2tfZmQgPSAtMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1bmxvY2tfcmVmKHN0cnVjdCByZWZfbG9jayAqbG9jaykKK3sKKwkvKiBEbyBub3QgZnJlZSBsb2NrLT5sayAtLSBhdGV4aXQoKSBzdGlsbCBsb29rcyBhdCB0aGVtICovCisJaWYgKGxvY2stPmxrKQorCQlyb2xsYmFja19sb2NrX2ZpbGUobG9jay0+bGspOworCWZyZWUobG9jay0+cmVmX25hbWUpOworCWZyZWUobG9jay0+b3JpZ19yZWZfbmFtZSk7CisJZnJlZShsb2NrKTsKK30KKworLyoKKyAqIGNvcHkgdGhlIHJlZmxvZyBtZXNzYWdlIG1zZyB0byBidWYsIHdoaWNoIGhhcyBiZWVuIGFsbG9jYXRlZCBzdWZmaWNpZW50bHkKKyAqIGxhcmdlLCB3aGlsZSBjbGVhbmluZyB1cCB0aGUgd2hpdGVzcGFjZXMuICBFc3BlY2lhbGx5LCBjb252ZXJ0IExGIHRvIHNwYWNlLAorICogYmVjYXVzZSByZWZsb2cgZmlsZSBpcyBvbmUgbGluZSBwZXIgZW50cnkuCisgKi8KK3N0YXRpYyBpbnQgY29weV9tc2coY2hhciAqYnVmLCBjb25zdCBjaGFyICptc2cpCit7CisJY2hhciAqY3AgPSBidWY7CisJY2hhciBjOworCWludCB3YXNzcGFjZSA9IDE7CisKKwkqY3ArKyA9ICdcdCc7CisJd2hpbGUgKChjID0gKm1zZysrKSkgeworCQlpZiAod2Fzc3BhY2UgJiYgaXNzcGFjZShjKSkKKwkJCWNvbnRpbnVlOworCQl3YXNzcGFjZSA9IGlzc3BhY2UoYyk7CisJCWlmICh3YXNzcGFjZSkKKwkJCWMgPSAnICc7CisJCSpjcCsrID0gYzsKKwl9CisJd2hpbGUgKGJ1ZiA8IGNwICYmIGlzc3BhY2UoY3BbLTFdKSkKKwkJY3AtLTsKKwkqY3ArKyA9ICdcbic7CisJcmV0dXJuIGNwIC0gYnVmOworfQorCitpbnQgbG9nX3JlZl9zZXR1cChjb25zdCBjaGFyICpyZWZuYW1lLCBjaGFyICpsb2dmaWxlLCBpbnQgYnVmc2l6ZSkKK3sKKwlpbnQgbG9nZmQsIG9mbGFncyA9IE9fQVBQRU5EIHwgT19XUk9OTFk7CisKKwlnaXRfc25wYXRoKGxvZ2ZpbGUsIGJ1ZnNpemUsICJsb2dzLyVzIiwgcmVmbmFtZSk7CisJaWYgKGxvZ19hbGxfcmVmX3VwZGF0ZXMgJiYKKwkgICAgKCFwcmVmaXhjbXAocmVmbmFtZSwgInJlZnMvaGVhZHMvIikgfHwKKwkgICAgICFwcmVmaXhjbXAocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSB8fAorCSAgICAgIXByZWZpeGNtcChyZWZuYW1lLCAicmVmcy9ub3Rlcy8iKSB8fAorCSAgICAgIXN0cmNtcChyZWZuYW1lLCAiSEVBRCIpKSkgeworCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllcyhsb2dmaWxlKSA8IDApCisJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciAlcyIsCisJCQkJICAgICBsb2dmaWxlKTsKKwkJb2ZsYWdzIHw9IE9fQ1JFQVQ7CisJfQorCisJbG9nZmQgPSBvcGVuKGxvZ2ZpbGUsIG9mbGFncywgMDY2Nik7CisJaWYgKGxvZ2ZkIDwgMCkgeworCQlpZiAoIShvZmxhZ3MgJiBPX0NSRUFUKSAmJiBlcnJubyA9PSBFTk9FTlQpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoKG9mbGFncyAmIE9fQ1JFQVQpICYmIGVycm5vID09IEVJU0RJUikgeworCQkJaWYgKHJlbW92ZV9lbXB0eV9kaXJlY3Rvcmllcyhsb2dmaWxlKSkgeworCQkJCXJldHVybiBlcnJvcigiVGhlcmUgYXJlIHN0aWxsIGxvZ3MgdW5kZXIgJyVzJyIsCisJCQkJCSAgICAgbG9nZmlsZSk7CisJCQl9CisJCQlsb2dmZCA9IG9wZW4obG9nZmlsZSwgb2ZsYWdzLCAwNjY2KTsKKwkJfQorCisJCWlmIChsb2dmZCA8IDApCisJCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBhcHBlbmQgdG8gJXM6ICVzIiwKKwkJCQkgICAgIGxvZ2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCisJYWRqdXN0X3NoYXJlZF9wZXJtKGxvZ2ZpbGUpOworCWNsb3NlKGxvZ2ZkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dfcmVmX3dyaXRlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLCBjb25zdCBjaGFyICptc2cpCit7CisJaW50IGxvZ2ZkLCByZXN1bHQsIHdyaXR0ZW4sIG9mbGFncyA9IE9fQVBQRU5EIHwgT19XUk9OTFk7CisJdW5zaWduZWQgbWF4bGVuLCBsZW47CisJaW50IG1zZ2xlbjsKKwljaGFyIGxvZ19maWxlW1BBVEhfTUFYXTsKKwljaGFyICpsb2dyZWM7CisJY29uc3QgY2hhciAqY29tbWl0dGVyOworCisJaWYgKGxvZ19hbGxfcmVmX3VwZGF0ZXMgPCAwKQorCQlsb2dfYWxsX3JlZl91cGRhdGVzID0gIWlzX2JhcmVfcmVwb3NpdG9yeSgpOworCisJcmVzdWx0ID0gbG9nX3JlZl9zZXR1cChyZWZuYW1lLCBsb2dfZmlsZSwgc2l6ZW9mKGxvZ19maWxlKSk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWxvZ2ZkID0gb3Blbihsb2dfZmlsZSwgb2ZsYWdzKTsKKwlpZiAobG9nZmQgPCAwKQorCQlyZXR1cm4gMDsKKwltc2dsZW4gPSBtc2cgPyBzdHJsZW4obXNnKSA6IDA7CisJY29tbWl0dGVyID0gZ2l0X2NvbW1pdHRlcl9pbmZvKDApOworCW1heGxlbiA9IHN0cmxlbihjb21taXR0ZXIpICsgbXNnbGVuICsgMTAwOworCWxvZ3JlYyA9IHhtYWxsb2MobWF4bGVuKTsKKwlsZW4gPSBzcHJpbnRmKGxvZ3JlYywgIiVzICVzICVzXG4iLAorCQkgICAgICBzaGExX3RvX2hleChvbGRfc2hhMSksCisJCSAgICAgIHNoYTFfdG9faGV4KG5ld19zaGExKSwKKwkJICAgICAgY29tbWl0dGVyKTsKKwlpZiAobXNnbGVuKQorCQlsZW4gKz0gY29weV9tc2cobG9ncmVjICsgbGVuIC0gMSwgbXNnKSAtIDE7CisJd3JpdHRlbiA9IGxlbiA8PSBtYXhsZW4gPyB3cml0ZV9pbl9mdWxsKGxvZ2ZkLCBsb2dyZWMsIGxlbikgOiAtMTsKKwlmcmVlKGxvZ3JlYyk7CisJaWYgKGNsb3NlKGxvZ2ZkKSAhPSAwIHx8IHdyaXR0ZW4gIT0gbGVuKQorCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBhcHBlbmQgdG8gJXMiLCBsb2dfZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfYnJhbmNoKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJcmV0dXJuICFzdHJjbXAocmVmbmFtZSwgIkhFQUQiKSB8fCAhcHJlZml4Y21wKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpOworfQorCitpbnQgd3JpdGVfcmVmX3NoYTEoc3RydWN0IHJlZl9sb2NrICpsb2NrLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmxvZ21zZykKK3sKKwlzdGF0aWMgY2hhciB0ZXJtID0gJ1xuJzsKKwlzdHJ1Y3Qgb2JqZWN0ICpvOworCisJaWYgKCFsb2NrKQorCQlyZXR1cm4gLTE7CisJaWYgKCFsb2NrLT5mb3JjZV93cml0ZSAmJiAhaGFzaGNtcChsb2NrLT5vbGRfc2hhMSwgc2hhMSkpIHsKKwkJdW5sb2NrX3JlZihsb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCW8gPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJaWYgKCFvKSB7CisJCWVycm9yKCJUcnlpbmcgdG8gd3JpdGUgcmVmICVzIHdpdGggbm9uZXhpc3RlbnQgb2JqZWN0ICVzIiwKKwkJCWxvY2stPnJlZl9uYW1lLCBzaGExX3RvX2hleChzaGExKSk7CisJCXVubG9ja19yZWYobG9jayk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKG8tPnR5cGUgIT0gT0JKX0NPTU1JVCAmJiBpc19icmFuY2gobG9jay0+cmVmX25hbWUpKSB7CisJCWVycm9yKCJUcnlpbmcgdG8gd3JpdGUgbm9uLWNvbW1pdCBvYmplY3QgJXMgdG8gYnJhbmNoICVzIiwKKwkJCXNoYTFfdG9faGV4KHNoYTEpLCBsb2NrLT5yZWZfbmFtZSk7CisJCXVubG9ja19yZWYobG9jayk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHdyaXRlX2luX2Z1bGwobG9jay0+bG9ja19mZCwgc2hhMV90b19oZXgoc2hhMSksIDQwKSAhPSA0MCB8fAorCSAgICB3cml0ZV9pbl9mdWxsKGxvY2stPmxvY2tfZmQsICZ0ZXJtLCAxKSAhPSAxCisJCXx8IGNsb3NlX3JlZihsb2NrKSA8IDApIHsKKwkJZXJyb3IoIkNvdWxkbid0IHdyaXRlICVzIiwgbG9jay0+bGstPmZpbGVuYW1lKTsKKwkJdW5sb2NrX3JlZihsb2NrKTsKKwkJcmV0dXJuIC0xOworCX0KKwljbGVhcl9sb29zZV9yZWZfY2FjaGUoZ2V0X3JlZl9jYWNoZShOVUxMKSk7CisJaWYgKGxvZ19yZWZfd3JpdGUobG9jay0+cmVmX25hbWUsIGxvY2stPm9sZF9zaGExLCBzaGExLCBsb2dtc2cpIDwgMCB8fAorCSAgICAoc3RyY21wKGxvY2stPnJlZl9uYW1lLCBsb2NrLT5vcmlnX3JlZl9uYW1lKSAmJgorCSAgICAgbG9nX3JlZl93cml0ZShsb2NrLT5vcmlnX3JlZl9uYW1lLCBsb2NrLT5vbGRfc2hhMSwgc2hhMSwgbG9nbXNnKSA8IDApKSB7CisJCXVubG9ja19yZWYobG9jayk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHN0cmNtcChsb2NrLT5vcmlnX3JlZl9uYW1lLCAiSEVBRCIpICE9IDApIHsKKwkJLyoKKwkJICogU3BlY2lhbCBoYWNrOiBJZiBhIGJyYW5jaCBpcyB1cGRhdGVkIGRpcmVjdGx5IGFuZCBIRUFECisJCSAqIHBvaW50cyB0byBpdCAobWF5IGhhcHBlbiBvbiB0aGUgcmVtb3RlIHNpZGUgb2YgYSBwdXNoCisJCSAqIGZvciBleGFtcGxlKSB0aGVuIGxvZ2ljYWxseSB0aGUgSEVBRCByZWZsb2cgc2hvdWxkIGJlCisJCSAqIHVwZGF0ZWQgdG9vLgorCQkgKiBBIGdlbmVyaWMgc29sdXRpb24gaW1wbGllcyByZXZlcnNlIHN5bXJlZiBpbmZvcm1hdGlvbiwKKwkJICogYnV0IGZpbmRpbmcgYWxsIHN5bXJlZnMgcG9pbnRpbmcgdG8gdGhlIGdpdmVuIGJyYW5jaAorCQkgKiB3b3VsZCBiZSByYXRoZXIgY29zdGx5IGZvciB0aGlzIHJhcmUgZXZlbnQgKHRoZSBkaXJlY3QKKwkJICogdXBkYXRlIG9mIGEgYnJhbmNoKSB0byBiZSB3b3J0aCBpdC4gIFNvIGxldCdzIGNoZWF0IGFuZAorCQkgKiBjaGVjayB3aXRoIEhFQUQgb25seSB3aGljaCBzaG91bGQgY292ZXIgOTklIG9mIGFsbCB1c2FnZQorCQkgKiBzY2VuYXJpb3MgKGV2ZW4gMTAwJSBvZiB0aGUgZGVmYXVsdCBvbmVzKS4KKwkJICovCisJCXVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKKwkJaW50IGhlYWRfZmxhZzsKKwkJY29uc3QgY2hhciAqaGVhZF9yZWY7CisJCWhlYWRfcmVmID0gcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgaGVhZF9zaGExLCAxLCAmaGVhZF9mbGFnKTsKKwkJaWYgKGhlYWRfcmVmICYmIChoZWFkX2ZsYWcgJiBSRUZfSVNTWU1SRUYpICYmCisJCSAgICAhc3RyY21wKGhlYWRfcmVmLCBsb2NrLT5yZWZfbmFtZSkpCisJCQlsb2dfcmVmX3dyaXRlKCJIRUFEIiwgbG9jay0+b2xkX3NoYTEsIHNoYTEsIGxvZ21zZyk7CisJfQorCWlmIChjb21taXRfcmVmKGxvY2spKSB7CisJCWVycm9yKCJDb3VsZG4ndCBzZXQgJXMiLCBsb2NrLT5yZWZfbmFtZSk7CisJCXVubG9ja19yZWYobG9jayk7CisJCXJldHVybiAtMTsKKwl9CisJdW5sb2NrX3JlZihsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNyZWF0ZV9zeW1yZWYoY29uc3QgY2hhciAqcmVmX3RhcmdldCwgY29uc3QgY2hhciAqcmVmc19oZWFkc19tYXN0ZXIsCisJCSAgY29uc3QgY2hhciAqbG9nbXNnKQoreworCWNvbnN0IGNoYXIgKmxvY2twYXRoOworCWNoYXIgcmVmWzEwMDBdOworCWludCBmZCwgbGVuLCB3cml0dGVuOworCWNoYXIgKmdpdF9IRUFEID0gZ2l0X3BhdGhkdXAoIiVzIiwgcmVmX3RhcmdldCk7CisJdW5zaWduZWQgY2hhciBvbGRfc2hhMVsyMF0sIG5ld19zaGExWzIwXTsKKworCWlmIChsb2dtc2cgJiYgcmVhZF9yZWYocmVmX3RhcmdldCwgb2xkX3NoYTEpKQorCQloYXNoY2xyKG9sZF9zaGExKTsKKworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGdpdF9IRUFEKSA8IDApCisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yICVzIiwgZ2l0X0hFQUQpOworCisjaWZuZGVmIE5PX1NZTUxJTktfSEVBRAorCWlmIChwcmVmZXJfc3ltbGlua19yZWZzKSB7CisJCXVubGluayhnaXRfSEVBRCk7CisJCWlmICghc3ltbGluayhyZWZzX2hlYWRzX21hc3RlciwgZ2l0X0hFQUQpKQorCQkJZ290byBkb25lOworCQlmcHJpbnRmKHN0ZGVyciwgIm5vIHN5bWxpbmsgLSBmYWxsaW5nIGJhY2sgdG8gc3ltYm9saWMgcmVmXG4iKTsKKwl9CisjZW5kaWYKKworCWxlbiA9IHNucHJpbnRmKHJlZiwgc2l6ZW9mKHJlZiksICJyZWY6ICVzXG4iLCByZWZzX2hlYWRzX21hc3Rlcik7CisJaWYgKHNpemVvZihyZWYpIDw9IGxlbikgeworCQllcnJvcigicmVmbmFtZSB0b28gbG9uZzogJXMiLCByZWZzX2hlYWRzX21hc3Rlcik7CisJCWdvdG8gZXJyb3JfZnJlZV9yZXR1cm47CisJfQorCWxvY2twYXRoID0gbWtwYXRoKCIlcy5sb2NrIiwgZ2l0X0hFQUQpOworCWZkID0gb3Blbihsb2NrcGF0aCwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAwNjY2KTsKKwlpZiAoZmQgPCAwKSB7CisJCWVycm9yKCJVbmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZyIsIGxvY2twYXRoKTsKKwkJZ290byBlcnJvcl9mcmVlX3JldHVybjsKKwl9CisJd3JpdHRlbiA9IHdyaXRlX2luX2Z1bGwoZmQsIHJlZiwgbGVuKTsKKwlpZiAoY2xvc2UoZmQpICE9IDAgfHwgd3JpdHRlbiAhPSBsZW4pIHsKKwkJZXJyb3IoIlVuYWJsZSB0byB3cml0ZSB0byAlcyIsIGxvY2twYXRoKTsKKwkJZ290byBlcnJvcl91bmxpbmtfcmV0dXJuOworCX0KKwlpZiAocmVuYW1lKGxvY2twYXRoLCBnaXRfSEVBRCkgPCAwKSB7CisJCWVycm9yKCJVbmFibGUgdG8gY3JlYXRlICVzIiwgZ2l0X0hFQUQpOworCQlnb3RvIGVycm9yX3VubGlua19yZXR1cm47CisJfQorCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0oZ2l0X0hFQUQpKSB7CisJCWVycm9yKCJVbmFibGUgdG8gZml4IHBlcm1pc3Npb25zIG9uICVzIiwgbG9ja3BhdGgpOworCWVycm9yX3VubGlua19yZXR1cm46CisJCXVubGlua19vcl93YXJuKGxvY2twYXRoKTsKKwllcnJvcl9mcmVlX3JldHVybjoKKwkJZnJlZShnaXRfSEVBRCk7CisJCXJldHVybiAtMTsKKwl9CisKKyNpZm5kZWYgTk9fU1lNTElOS19IRUFECisJZG9uZToKKyNlbmRpZgorCWlmIChsb2dtc2cgJiYgIXJlYWRfcmVmKHJlZnNfaGVhZHNfbWFzdGVyLCBuZXdfc2hhMSkpCisJCWxvZ19yZWZfd3JpdGUocmVmX3RhcmdldCwgb2xkX3NoYTEsIG5ld19zaGExLCBsb2dtc2cpOworCisJZnJlZShnaXRfSEVBRCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpyZWZfbXNnKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmVuZHApCit7CisJY29uc3QgY2hhciAqZXA7CisJbGluZSArPSA4MjsKKwllcCA9IG1lbWNocihsaW5lLCAnXG4nLCBlbmRwIC0gbGluZSk7CisJaWYgKCFlcCkKKwkJZXAgPSBlbmRwOworCXJldHVybiB4bWVtZHVweihsaW5lLCBlcCAtIGxpbmUpOworfQorCitpbnQgcmVhZF9yZWZfYXQoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgbG9uZyBhdF90aW1lLCBpbnQgY250LAorCQl1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqbXNnLAorCQl1bnNpZ25lZCBsb25nICpjdXRvZmZfdGltZSwgaW50ICpjdXRvZmZfdHosIGludCAqY3V0b2ZmX2NudCkKK3sKKwljb25zdCBjaGFyICpsb2dmaWxlLCAqbG9nZGF0YSwgKmxvZ2VuZCwgKnJlYywgKmxhc3RndCwgKmxhc3RyZWM7CisJY2hhciAqdHpfYzsKKwlpbnQgbG9nZmQsIHR6LCByZWNjbnQgPSAwOworCXN0cnVjdCBzdGF0IHN0OworCXVuc2lnbmVkIGxvbmcgZGF0ZTsKKwl1bnNpZ25lZCBjaGFyIGxvZ2dlZF9zaGExWzIwXTsKKwl2b2lkICpsb2dfbWFwcGVkOworCXNpemVfdCBtYXBzejsKKworCWxvZ2ZpbGUgPSBnaXRfcGF0aCgibG9ncy8lcyIsIHJlZm5hbWUpOworCWxvZ2ZkID0gb3Blbihsb2dmaWxlLCBPX1JET05MWSwgMCk7CisJaWYgKGxvZ2ZkIDwgMCkKKwkJZGllX2Vycm5vKCJVbmFibGUgdG8gcmVhZCBsb2cgJyVzJyIsIGxvZ2ZpbGUpOworCWZzdGF0KGxvZ2ZkLCAmc3QpOworCWlmICghc3Quc3Rfc2l6ZSkKKwkJZGllKCJMb2cgJXMgaXMgZW1wdHkuIiwgbG9nZmlsZSk7CisJbWFwc3ogPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCWxvZ19tYXBwZWQgPSB4bW1hcChOVUxMLCBtYXBzeiwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgbG9nZmQsIDApOworCWxvZ2RhdGEgPSBsb2dfbWFwcGVkOworCWNsb3NlKGxvZ2ZkKTsKKworCWxhc3RyZWMgPSBOVUxMOworCXJlYyA9IGxvZ2VuZCA9IGxvZ2RhdGEgKyBzdC5zdF9zaXplOworCXdoaWxlIChsb2dkYXRhIDwgcmVjKSB7CisJCXJlY2NudCsrOworCQlpZiAobG9nZGF0YSA8IHJlYyAmJiAqKHJlYy0xKSA9PSAnXG4nKQorCQkJcmVjLS07CisJCWxhc3RndCA9IE5VTEw7CisJCXdoaWxlIChsb2dkYXRhIDwgcmVjICYmICoocmVjLTEpICE9ICdcbicpIHsKKwkJCXJlYy0tOworCQkJaWYgKCpyZWMgPT0gJz4nKQorCQkJCWxhc3RndCA9IHJlYzsKKwkJfQorCQlpZiAoIWxhc3RndCkKKwkJCWRpZSgiTG9nICVzIGlzIGNvcnJ1cHQuIiwgbG9nZmlsZSk7CisJCWRhdGUgPSBzdHJ0b3VsKGxhc3RndCArIDEsICZ0el9jLCAxMCk7CisJCWlmIChkYXRlIDw9IGF0X3RpbWUgfHwgY250ID09IDApIHsKKwkJCXR6ID0gc3RydG91bCh0el9jLCBOVUxMLCAxMCk7CisJCQlpZiAobXNnKQorCQkJCSptc2cgPSByZWZfbXNnKHJlYywgbG9nZW5kKTsKKwkJCWlmIChjdXRvZmZfdGltZSkKKwkJCQkqY3V0b2ZmX3RpbWUgPSBkYXRlOworCQkJaWYgKGN1dG9mZl90eikKKwkJCQkqY3V0b2ZmX3R6ID0gdHo7CisJCQlpZiAoY3V0b2ZmX2NudCkKKwkJCQkqY3V0b2ZmX2NudCA9IHJlY2NudCAtIDE7CisJCQlpZiAobGFzdHJlYykgeworCQkJCWlmIChnZXRfc2hhMV9oZXgobGFzdHJlYywgbG9nZ2VkX3NoYTEpKQorCQkJCQlkaWUoIkxvZyAlcyBpcyBjb3JydXB0LiIsIGxvZ2ZpbGUpOworCQkJCWlmIChnZXRfc2hhMV9oZXgocmVjICsgNDEsIHNoYTEpKQorCQkJCQlkaWUoIkxvZyAlcyBpcyBjb3JydXB0LiIsIGxvZ2ZpbGUpOworCQkJCWlmIChoYXNoY21wKGxvZ2dlZF9zaGExLCBzaGExKSkgeworCQkJCQl3YXJuaW5nKCJMb2cgJXMgaGFzIGdhcCBhZnRlciAlcy4iLAorCQkJCQkJbG9nZmlsZSwgc2hvd19kYXRlKGRhdGUsIHR6LCBEQVRFX1JGQzI4MjIpKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkYXRlID09IGF0X3RpbWUpIHsKKwkJCQlpZiAoZ2V0X3NoYTFfaGV4KHJlYyArIDQxLCBzaGExKSkKKwkJCQkJZGllKCJMb2cgJXMgaXMgY29ycnVwdC4iLCBsb2dmaWxlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWlmIChnZXRfc2hhMV9oZXgocmVjICsgNDEsIGxvZ2dlZF9zaGExKSkKKwkJCQkJZGllKCJMb2cgJXMgaXMgY29ycnVwdC4iLCBsb2dmaWxlKTsKKwkJCQlpZiAoaGFzaGNtcChsb2dnZWRfc2hhMSwgc2hhMSkpIHsKKwkJCQkJd2FybmluZygiTG9nICVzIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAlcy4iLAorCQkJCQkJbG9nZmlsZSwgc2hvd19kYXRlKGRhdGUsIHR6LCBEQVRFX1JGQzI4MjIpKTsKKwkJCQl9CisJCQl9CisJCQltdW5tYXAobG9nX21hcHBlZCwgbWFwc3opOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbGFzdHJlYyA9IHJlYzsKKwkJaWYgKGNudCA+IDApCisJCQljbnQtLTsKKwl9CisKKwlyZWMgPSBsb2dkYXRhOworCXdoaWxlIChyZWMgPCBsb2dlbmQgJiYgKnJlYyAhPSAnPicgJiYgKnJlYyAhPSAnXG4nKQorCQlyZWMrKzsKKwlpZiAocmVjID09IGxvZ2VuZCB8fCAqcmVjID09ICdcbicpCisJCWRpZSgiTG9nICVzIGlzIGNvcnJ1cHQuIiwgbG9nZmlsZSk7CisJZGF0ZSA9IHN0cnRvdWwocmVjICsgMSwgJnR6X2MsIDEwKTsKKwl0eiA9IHN0cnRvdWwodHpfYywgTlVMTCwgMTApOworCWlmIChnZXRfc2hhMV9oZXgobG9nZGF0YSwgc2hhMSkpCisJCWRpZSgiTG9nICVzIGlzIGNvcnJ1cHQuIiwgbG9nZmlsZSk7CisJaWYgKGlzX251bGxfc2hhMShzaGExKSkgeworCQlpZiAoZ2V0X3NoYTFfaGV4KGxvZ2RhdGEgKyA0MSwgc2hhMSkpCisJCQlkaWUoIkxvZyAlcyBpcyBjb3JydXB0LiIsIGxvZ2ZpbGUpOworCX0KKwlpZiAobXNnKQorCQkqbXNnID0gcmVmX21zZyhsb2dkYXRhLCBsb2dlbmQpOworCW11bm1hcChsb2dfbWFwcGVkLCBtYXBzeik7CisKKwlpZiAoY3V0b2ZmX3RpbWUpCisJCSpjdXRvZmZfdGltZSA9IGRhdGU7CisJaWYgKGN1dG9mZl90eikKKwkJKmN1dG9mZl90eiA9IHR6OworCWlmIChjdXRvZmZfY250KQorCQkqY3V0b2ZmX2NudCA9IHJlY2NudDsKKwlyZXR1cm4gMTsKK30KKworaW50IGZvcl9lYWNoX3JlY2VudF9yZWZsb2dfZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwgbG9uZyBvZnMsIHZvaWQgKmNiX2RhdGEpCit7CisJY29uc3QgY2hhciAqbG9nZmlsZTsKKwlGSUxFICpsb2dmcDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlsb2dmaWxlID0gZ2l0X3BhdGgoImxvZ3MvJXMiLCByZWZuYW1lKTsKKwlsb2dmcCA9IGZvcGVuKGxvZ2ZpbGUsICJyIik7CisJaWYgKCFsb2dmcCkKKwkJcmV0dXJuIC0xOworCisJaWYgKG9mcykgeworCQlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCQlpZiAoZnN0YXQoZmlsZW5vKGxvZ2ZwKSwgJnN0YXRidWYpIHx8CisJCSAgICBzdGF0YnVmLnN0X3NpemUgPCBvZnMgfHwKKwkJICAgIGZzZWVrKGxvZ2ZwLCAtb2ZzLCBTRUVLX0VORCkgfHwKKwkJICAgIHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJnNiLCBsb2dmcCwgJ1xuJykpIHsKKwkJCWZjbG9zZShsb2dmcCk7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lKCZzYiwgbG9nZnAsICdcbicpKSB7CisJCXVuc2lnbmVkIGNoYXIgb3NoYTFbMjBdLCBuc2hhMVsyMF07CisJCWNoYXIgKmVtYWlsX2VuZCwgKm1lc3NhZ2U7CisJCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworCQlpbnQgdHo7CisKKwkJLyogb2xkIFNQIG5ldyBTUCBuYW1lIDxlbWFpbD4gU1AgdGltZSBUQUIgbXNnIExGICovCisJCWlmIChzYi5sZW4gPCA4MyB8fCBzYi5idWZbc2IubGVuIC0gMV0gIT0gJ1xuJyB8fAorCQkgICAgZ2V0X3NoYTFfaGV4KHNiLmJ1Ziwgb3NoYTEpIHx8IHNiLmJ1Zls0MF0gIT0gJyAnIHx8CisJCSAgICBnZXRfc2hhMV9oZXgoc2IuYnVmICsgNDEsIG5zaGExKSB8fCBzYi5idWZbODFdICE9ICcgJyB8fAorCQkgICAgIShlbWFpbF9lbmQgPSBzdHJjaHIoc2IuYnVmICsgODIsICc+JykpIHx8CisJCSAgICBlbWFpbF9lbmRbMV0gIT0gJyAnIHx8CisJCSAgICAhKHRpbWVzdGFtcCA9IHN0cnRvdWwoZW1haWxfZW5kICsgMiwgJm1lc3NhZ2UsIDEwKSkgfHwKKwkJICAgICFtZXNzYWdlIHx8IG1lc3NhZ2VbMF0gIT0gJyAnIHx8CisJCSAgICAobWVzc2FnZVsxXSAhPSAnKycgJiYgbWVzc2FnZVsxXSAhPSAnLScpIHx8CisJCSAgICAhaXNkaWdpdChtZXNzYWdlWzJdKSB8fCAhaXNkaWdpdChtZXNzYWdlWzNdKSB8fAorCQkgICAgIWlzZGlnaXQobWVzc2FnZVs0XSkgfHwgIWlzZGlnaXQobWVzc2FnZVs1XSkpCisJCQljb250aW51ZTsgLyogY29ycnVwdD8gKi8KKwkJZW1haWxfZW5kWzFdID0gJ1wwJzsKKwkJdHogPSBzdHJ0b2wobWVzc2FnZSArIDEsIE5VTEwsIDEwKTsKKwkJaWYgKG1lc3NhZ2VbNl0gIT0gJ1x0JykKKwkJCW1lc3NhZ2UgKz0gNjsKKwkJZWxzZQorCQkJbWVzc2FnZSArPSA3OworCQlyZXQgPSBmbihvc2hhMSwgbnNoYTEsIHNiLmJ1ZiArIDgyLCB0aW1lc3RhbXAsIHR6LCBtZXNzYWdlLAorCQkJIGNiX2RhdGEpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCWZjbG9zZShsb2dmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZm9yX2VhY2hfcmVmbG9nX2VudChjb25zdCBjaGFyICpyZWZuYW1lLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGZvcl9lYWNoX3JlY2VudF9yZWZsb2dfZW50KHJlZm5hbWUsIGZuLCAwLCBjYl9kYXRhKTsKK30KKworLyoKKyAqIENhbGwgZm4gZm9yIGVhY2ggcmVmbG9nIGluIHRoZSBuYW1lc3BhY2UgaW5kaWNhdGVkIGJ5IG5hbWUuICBuYW1lCisgKiBtdXN0IGJlIGVtcHR5IG9yIGVuZCB3aXRoICcvJy4gIE5hbWUgd2lsbCBiZSB1c2VkIGFzIGEgc2NyYXRjaAorICogc3BhY2UsIGJ1dCBpdHMgY29udGVudHMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgcmV0dXJuLgorICovCitzdGF0aWMgaW50IGRvX2Zvcl9lYWNoX3JlZmxvZyhzdHJ1Y3Qgc3RyYnVmICpuYW1lLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlESVIgKmQgPSBvcGVuZGlyKGdpdF9wYXRoKCJsb2dzLyVzIiwgbmFtZS0+YnVmKSk7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGRpcmVudCAqZGU7CisJaW50IG9sZGxlbiA9IG5hbWUtPmxlbjsKKworCWlmICghZCkKKwkJcmV0dXJuIG5hbWUtPmxlbiA/IGVycm5vIDogMDsKKworCXdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCWlmIChkZS0+ZF9uYW1lWzBdID09ICcuJykKKwkJCWNvbnRpbnVlOworCQlpZiAoaGFzX2V4dGVuc2lvbihkZS0+ZF9uYW1lLCAiLmxvY2siKSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfYWRkc3RyKG5hbWUsIGRlLT5kX25hbWUpOworCQlpZiAoc3RhdChnaXRfcGF0aCgibG9ncy8lcyIsIG5hbWUtPmJ1ZiksICZzdCkgPCAwKSB7CisJCQk7IC8qIHNpbGVudGx5IGlnbm9yZSAqLworCQl9IGVsc2UgeworCQkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCQlzdHJidWZfYWRkY2gobmFtZSwgJy8nKTsKKwkJCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9yZWZsb2cobmFtZSwgZm4sIGNiX2RhdGEpOworCQkJfSBlbHNlIHsKKwkJCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQkJCWlmIChyZWFkX3JlZl9mdWxsKG5hbWUtPmJ1Ziwgc2hhMSwgMCwgTlVMTCkpCisJCQkJCXJldHZhbCA9IGVycm9yKCJiYWQgcmVmIGZvciAlcyIsIG5hbWUtPmJ1Zik7CisJCQkJZWxzZQorCQkJCQlyZXR2YWwgPSBmbihuYW1lLT5idWYsIHNoYTEsIDAsIGNiX2RhdGEpOworCQkJfQorCQkJaWYgKHJldHZhbCkKKwkJCQlicmVhazsKKwkJfQorCQlzdHJidWZfc2V0bGVuKG5hbWUsIG9sZGxlbik7CisJfQorCWNsb3NlZGlyKGQpOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBmb3JfZWFjaF9yZWZsb2coZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWU7CisJc3RyYnVmX2luaXQoJm5hbWUsIFBBVEhfTUFYKTsKKwlyZXR2YWwgPSBkb19mb3JfZWFjaF9yZWZsb2coJm5hbWUsIGZuLCBjYl9kYXRhKTsKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IHVwZGF0ZV9yZWYoY29uc3QgY2hhciAqYWN0aW9uLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGR2YWwsCisJCWludCBmbGFncywgZW51bSBhY3Rpb25fb25fZXJyIG9uZXJyKQoreworCXN0YXRpYyBzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7CisJbG9jayA9IGxvY2tfYW55X3JlZl9mb3JfdXBkYXRlKHJlZm5hbWUsIG9sZHZhbCwgZmxhZ3MpOworCWlmICghbG9jaykgeworCQljb25zdCBjaGFyICpzdHIgPSAiQ2Fubm90IGxvY2sgdGhlIHJlZiAnJXMnLiI7CisJCXN3aXRjaCAob25lcnIpIHsKKwkJY2FzZSBNU0dfT05fRVJSOiBlcnJvcihzdHIsIHJlZm5hbWUpOyBicmVhazsKKwkJY2FzZSBESUVfT05fRVJSOiBkaWUoc3RyLCByZWZuYW1lKTsgYnJlYWs7CisJCWNhc2UgUVVJRVRfT05fRVJSOiBicmVhazsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJaWYgKHdyaXRlX3JlZl9zaGExKGxvY2ssIHNoYTEsIGFjdGlvbikgPCAwKSB7CisJCWNvbnN0IGNoYXIgKnN0ciA9ICJDYW5ub3QgdXBkYXRlIHRoZSByZWYgJyVzJy4iOworCQlzd2l0Y2ggKG9uZXJyKSB7CisJCWNhc2UgTVNHX09OX0VSUjogZXJyb3Ioc3RyLCByZWZuYW1lKTsgYnJlYWs7CisJCWNhc2UgRElFX09OX0VSUjogZGllKHN0ciwgcmVmbmFtZSk7IGJyZWFrOworCQljYXNlIFFVSUVUX09OX0VSUjogYnJlYWs7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmVmICpmaW5kX3JlZl9ieV9uYW1lKGNvbnN0IHN0cnVjdCByZWYgKmxpc3QsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJZm9yICggOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkJaWYgKCFzdHJjbXAobGlzdC0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gKHN0cnVjdCByZWYgKilsaXN0OworCXJldHVybiBOVUxMOworfQorCisvKgorICogZ2VuZXJhdGUgYSBmb3JtYXQgc3VpdGFibGUgZm9yIHNjYW5mIGZyb20gYSByZWZfcmV2X3BhcnNlX3J1bGVzCisgKiBydWxlLCB0aGF0IGlzIHJlcGxhY2UgdGhlICIlLipzIiBzcGVjIHdpdGggYSAiJXMiIHNwZWMKKyAqLworc3RhdGljIHZvaWQgZ2VuX3NjYW5mX2ZtdChjaGFyICpzY2FuZl9mbXQsIGNvbnN0IGNoYXIgKnJ1bGUpCit7CisJY2hhciAqc3BlYzsKKworCXNwZWMgPSBzdHJzdHIocnVsZSwgIiUuKnMiKTsKKwlpZiAoIXNwZWMgfHwgc3Ryc3RyKHNwZWMgKyA0LCAiJS4qcyIpKQorCQlkaWUoImludmFsaWQgcnVsZSBpbiByZWZfcmV2X3BhcnNlX3J1bGVzOiAlcyIsIHJ1bGUpOworCisJLyogY29weSBhbGwgdW50aWwgc3BlYyAqLworCXN0cm5jcHkoc2NhbmZfZm10LCBydWxlLCBzcGVjIC0gcnVsZSk7CisJc2NhbmZfZm10W3NwZWMgLSBydWxlXSA9ICdcMCc7CisJLyogY29weSBuZXcgc3BlYyAqLworCXN0cmNhdChzY2FuZl9mbXQsICIlcyIpOworCS8qIGNvcHkgcmVtYWluaW5nIHJ1bGUgKi8KKwlzdHJjYXQoc2NhbmZfZm10LCBzcGVjICsgNCk7CisKKwlyZXR1cm47Cit9CisKK2NoYXIgKnNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBzdHJpY3QpCit7CisJaW50IGk7CisJc3RhdGljIGNoYXIgKipzY2FuZl9mbXRzOworCXN0YXRpYyBpbnQgbnJfcnVsZXM7CisJY2hhciAqc2hvcnRfbmFtZTsKKworCS8qIHByZSBnZW5lcmF0ZSBzY2FuZiBmb3JtYXRzIGZyb20gcmVmX3Jldl9wYXJzZV9ydWxlc1tdICovCisJaWYgKCFucl9ydWxlcykgeworCQlzaXplX3QgdG90YWxfbGVuID0gMDsKKworCQkvKiB0aGUgcnVsZSBsaXN0IGlzIE5VTEwgdGVybWluYXRlZCwgY291bnQgdGhlbSBmaXJzdCAqLworCQlmb3IgKDsgcmVmX3Jldl9wYXJzZV9ydWxlc1tucl9ydWxlc107IG5yX3J1bGVzKyspCisJCQkvKiBubyArMSBiZWNhdXNlIHN0cmxlbigiJXMiKSA8IHN0cmxlbigiJS4qcyIpICovCisJCQl0b3RhbF9sZW4gKz0gc3RybGVuKHJlZl9yZXZfcGFyc2VfcnVsZXNbbnJfcnVsZXNdKTsKKworCQlzY2FuZl9mbXRzID0geG1hbGxvYyhucl9ydWxlcyAqIHNpemVvZihjaGFyICopICsgdG90YWxfbGVuKTsKKworCQl0b3RhbF9sZW4gPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfcnVsZXM7IGkrKykgeworCQkJc2NhbmZfZm10c1tpXSA9IChjaGFyICopJnNjYW5mX2ZtdHNbbnJfcnVsZXNdCisJCQkJCSsgdG90YWxfbGVuOworCQkJZ2VuX3NjYW5mX2ZtdChzY2FuZl9mbXRzW2ldLCByZWZfcmV2X3BhcnNlX3J1bGVzW2ldKTsKKwkJCXRvdGFsX2xlbiArPSBzdHJsZW4ocmVmX3Jldl9wYXJzZV9ydWxlc1tpXSk7CisJCX0KKwl9CisKKwkvKiBiYWlsIG91dCBpZiB0aGVyZSBhcmUgbm8gcnVsZXMgKi8KKwlpZiAoIW5yX3J1bGVzKQorCQlyZXR1cm4geHN0cmR1cChyZWZuYW1lKTsKKworCS8qIGJ1ZmZlciBmb3Igc2NhbmYgcmVzdWx0LCBhdCBtb3N0IHJlZm5hbWUgbXVzdCBmaXQgKi8KKwlzaG9ydF9uYW1lID0geHN0cmR1cChyZWZuYW1lKTsKKworCS8qIHNraXAgZmlyc3QgcnVsZSwgaXQgd2lsbCBhbHdheXMgbWF0Y2ggKi8KKwlmb3IgKGkgPSBucl9ydWxlcyAtIDE7IGkgPiAwIDsgLS1pKSB7CisJCWludCBqOworCQlpbnQgcnVsZXNfdG9fZmFpbCA9IGk7CisJCWludCBzaG9ydF9uYW1lX2xlbjsKKworCQlpZiAoMSAhPSBzc2NhbmYocmVmbmFtZSwgc2NhbmZfZm10c1tpXSwgc2hvcnRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlzaG9ydF9uYW1lX2xlbiA9IHN0cmxlbihzaG9ydF9uYW1lKTsKKworCQkvKgorCQkgKiBpbiBzdHJpY3QgbW9kZSwgYWxsIChleGNlcHQgdGhlIG1hdGNoZWQgb25lKSBydWxlcworCQkgKiBtdXN0IGZhaWwgdG8gcmVzb2x2ZSB0byBhIHZhbGlkIG5vbi1hbWJpZ3VvdXMgcmVmCisJCSAqLworCQlpZiAoc3RyaWN0KQorCQkJcnVsZXNfdG9fZmFpbCA9IG5yX3J1bGVzOworCisJCS8qCisJCSAqIGNoZWNrIGlmIHRoZSBzaG9ydCBuYW1lIHJlc29sdmVzIHRvIGEgdmFsaWQgcmVmLAorCQkgKiBidXQgdXNlIG9ubHkgcnVsZXMgcHJpb3IgdG8gdGhlIG1hdGNoZWQgb25lCisJCSAqLworCQlmb3IgKGogPSAwOyBqIDwgcnVsZXNfdG9fZmFpbDsgaisrKSB7CisJCQljb25zdCBjaGFyICpydWxlID0gcmVmX3Jldl9wYXJzZV9ydWxlc1tqXTsKKwkJCWNoYXIgcmVmbmFtZVtQQVRIX01BWF07CisKKwkJCS8qIHNraXAgbWF0Y2hlZCBydWxlICovCisJCQlpZiAoaSA9PSBqKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogdGhlIHNob3J0IG5hbWUgaXMgYW1iaWd1b3VzLCBpZiBpdCByZXNvbHZlcworCQkJICogKHdpdGggdGhpcyBwcmV2aW91cyBydWxlKSB0byBhIHZhbGlkIHJlZgorCQkJICogcmVhZF9yZWYoKSByZXR1cm5zIDAgb24gc3VjY2VzcworCQkJICovCisJCQlta3NucGF0aChyZWZuYW1lLCBzaXplb2YocmVmbmFtZSksCisJCQkJIHJ1bGUsIHNob3J0X25hbWVfbGVuLCBzaG9ydF9uYW1lKTsKKwkJCWlmIChyZWZfZXhpc3RzKHJlZm5hbWUpKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogc2hvcnQgbmFtZSBpcyBub24tYW1iaWd1b3VzIGlmIGFsbCBwcmV2aW91cyBydWxlcworCQkgKiBoYXZlbid0IHJlc29sdmVkIHRvIGEgdmFsaWQgcmVmCisJCSAqLworCQlpZiAoaiA9PSBydWxlc190b19mYWlsKQorCQkJcmV0dXJuIHNob3J0X25hbWU7CisJfQorCisJZnJlZShzaG9ydF9uYW1lKTsKKwlyZXR1cm4geHN0cmR1cChyZWZuYW1lKTsKK30KZGlmZiAtLWdpdCBhL3JlZnMuaCBiL3JlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmMyZmUyCi0tLSAvZGV2L251bGwKKysrIGIvcmVmcy5oCkBAIC0wLDAgKzEsMTUwIEBACisjaWZuZGVmIFJFRlNfSAorI2RlZmluZSBSRUZTX0gKKworc3RydWN0IHJlZl9sb2NrIHsKKwljaGFyICpyZWZfbmFtZTsKKwljaGFyICpvcmlnX3JlZl9uYW1lOworCXN0cnVjdCBsb2NrX2ZpbGUgKmxrOworCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCWludCBsb2NrX2ZkOworCWludCBmb3JjZV93cml0ZTsKK307CisKKyNkZWZpbmUgUkVGX0lTU1lNUkVGIDB4MDEKKyNkZWZpbmUgUkVGX0lTUEFDS0VEIDB4MDIKKyNkZWZpbmUgUkVGX0lTQlJPS0VOIDB4MDQKKworLyoKKyAqIENhbGxzIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gZm9yIGVhY2ggcmVmIGZpbGUgdW50aWwgaXQgcmV0dXJucworICogbm9uemVybywgYW5kIHJldHVybnMgdGhlIHZhbHVlLiAgUGxlYXNlIG5vdGUgdGhhdCBpdCBpcyBub3Qgc2FmZSB0bworICogbW9kaWZ5IHJlZmVyZW5jZXMgd2hpbGUgYW4gaXRlcmF0aW9uIGlzIGluIHByb2dyZXNzLCB1bmxlc3MgdGhlCisgKiBzYW1lIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9jYXRpb24gdGhhdCBtb2RpZmllcyB0aGUgcmVmZXJlbmNlIGFsc28KKyAqIHJldHVybnMgYSBub256ZXJvIHZhbHVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgdGhlIGl0ZXJhdGlvbi4KKyAqLwordHlwZWRlZiBpbnQgZWFjaF9yZWZfZm4oY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKTsKK2V4dGVybiBpbnQgaGVhZF9yZWYoZWFjaF9yZWZfZm4sIHZvaWQgKik7CitleHRlcm4gaW50IGZvcl9lYWNoX3JlZihlYWNoX3JlZl9mbiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfcmVmX2luKGNvbnN0IGNoYXIgKiwgZWFjaF9yZWZfZm4sIHZvaWQgKik7CitleHRlcm4gaW50IGZvcl9lYWNoX3RhZ19yZWYoZWFjaF9yZWZfZm4sIHZvaWQgKik7CitleHRlcm4gaW50IGZvcl9lYWNoX2JyYW5jaF9yZWYoZWFjaF9yZWZfZm4sIHZvaWQgKik7CitleHRlcm4gaW50IGZvcl9lYWNoX3JlbW90ZV9yZWYoZWFjaF9yZWZfZm4sIHZvaWQgKik7CitleHRlcm4gaW50IGZvcl9lYWNoX3JlcGxhY2VfcmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOworZXh0ZXJuIGludCBmb3JfZWFjaF9nbG9iX3JlZihlYWNoX3JlZl9mbiwgY29uc3QgY2hhciAqcGF0dGVybiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfZ2xvYl9yZWZfaW4oZWFjaF9yZWZfZm4sIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIqIHByZWZpeCwgdm9pZCAqKTsKKworZXh0ZXJuIGludCBoZWFkX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitleHRlcm4gaW50IGZvcl9lYWNoX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitleHRlcm4gaW50IGZvcl9lYWNoX3JlZl9pbl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCWVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfdGFnX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitleHRlcm4gaW50IGZvcl9lYWNoX2JyYW5jaF9yZWZfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworZXh0ZXJuIGludCBmb3JfZWFjaF9yZW1vdGVfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworZXh0ZXJuIGludCBoZWFkX3JlZl9uYW1lc3BhY2VkKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfbmFtZXNwYWNlZF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmhhc19nbG9iX3NwZWNpYWxzKGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJcmV0dXJuIHN0cnBicmsocGF0dGVybiwgIj8qWyIpOworfQorCisvKiBjYW4gYmUgdXNlZCB0byBsZWFybiBhYm91dCBicm9rZW4gcmVmIGFuZCBzeW1yZWYgKi8KK2V4dGVybiBpbnQgZm9yX2VhY2hfcmF3cmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOworCitleHRlcm4gdm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZihGSUxFICpmcCwgY29uc3QgY2hhciAqbXNnX2ZtdCwgY29uc3QgY2hhciAqcmVmbmFtZSk7CisKKy8qCisgKiBBZGQgYSByZWZlcmVuY2UgdG8gdGhlIGluLW1lbW9yeSBwYWNrZWQgcmVmZXJlbmNlIGNhY2hlLiAgVG8gYWN0dWFsbHkKKyAqIHdyaXRlIHRoZSByZWZlcmVuY2UgdG8gdGhlIHBhY2tlZC1yZWZzIGZpbGUsIGNhbGwgcGFja19yZWZzKCkuCisgKi8KK2V4dGVybiB2b2lkIGFkZF9wYWNrZWRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitleHRlcm4gaW50IHJlZl9leGlzdHMoY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIGludCBwZWVsX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworLyoqIExvY2tzIGEgInJlZnMvIiByZWYgcmV0dXJuaW5nIHRoZSBsb2NrIG9uIHN1Y2Nlc3MgYW5kIE5VTEwgb24gZmFpbHVyZS4gKiovCitleHRlcm4gc3RydWN0IHJlZl9sb2NrICpsb2NrX3JlZl9zaGExKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExKTsKKworLyoqIExvY2tzIGFueSByZWYgKGZvciAnSEVBRCcgdHlwZSByZWZzKS4gKi8KKyNkZWZpbmUgUkVGX05PREVSRUYJMHgwMQorZXh0ZXJuIHN0cnVjdCByZWZfbG9jayAqbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCQkJCQkJaW50IGZsYWdzKTsKKworLyoqIENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3Igb3duZWQgYnkgYSBsb2NrIGFuZCByZXR1cm4gdGhlIHN0YXR1cyAqLworZXh0ZXJuIGludCBjbG9zZV9yZWYoc3RydWN0IHJlZl9sb2NrICpsb2NrKTsKKworLyoqIENsb3NlIGFuZCBjb21taXQgdGhlIHJlZiBsb2NrZWQgYnkgdGhlIGxvY2sgKi8KK2V4dGVybiBpbnQgY29tbWl0X3JlZihzdHJ1Y3QgcmVmX2xvY2sgKmxvY2spOworCisvKiogUmVsZWFzZSBhbnkgbG9jayB0YWtlbiBidXQgbm90IHdyaXR0ZW4uICoqLworZXh0ZXJuIHZvaWQgdW5sb2NrX3JlZihzdHJ1Y3QgcmVmX2xvY2sgKmxvY2spOworCisvKiogV3JpdGVzIHNoYTEgaW50byB0aGUgcmVmIHNwZWNpZmllZCBieSB0aGUgbG9jay4gKiovCitleHRlcm4gaW50IHdyaXRlX3JlZl9zaGExKHN0cnVjdCByZWZfbG9jayAqbG9jaywgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqbXNnKTsKKworLyoKKyAqIEludmFsaWRhdGUgdGhlIHJlZmVyZW5jZSBjYWNoZSBmb3IgdGhlIHNwZWNpZmllZCBzdWJtb2R1bGUuICBVc2UKKyAqIHN1Ym1vZHVsZT1OVUxMIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlIGZvciB0aGUgbWFpbiBtb2R1bGUuICBUaGlzCisgKiBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpZiByZWZlcmVuY2VzIGFyZSBjaGFuZ2VkIHZpYSBhIG1lY2hhbmlzbQorICogb3RoZXIgdGhhbiB0aGUgcmVmcyBBUEkuCisgKi8KK2V4dGVybiB2b2lkIGludmFsaWRhdGVfcmVmX2NhY2hlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSk7CisKKy8qKiBTZXR1cCByZWZsb2cgYmVmb3JlIHVzaW5nLiAqKi8KK2ludCBsb2dfcmVmX3NldHVwKGNvbnN0IGNoYXIgKnJlZl9uYW1lLCBjaGFyICpsb2dmaWxlLCBpbnQgYnVmc2l6ZSk7CisKKy8qKiBSZWFkcyBsb2cgZm9yIHRoZSB2YWx1ZSBvZiByZWYgZHVyaW5nIGF0X3RpbWUuICoqLworZXh0ZXJuIGludCByZWFkX3JlZl9hdChjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBsb25nIGF0X3RpbWUsIGludCBjbnQsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqbXNnLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqY3V0b2ZmX3RpbWUsIGludCAqY3V0b2ZmX3R6LCBpbnQgKmN1dG9mZl9jbnQpOworCisvKiBpdGVyYXRlIG92ZXIgcmVmbG9nIGVudHJpZXMgKi8KK3R5cGVkZWYgaW50IGVhY2hfcmVmbG9nX2VudF9mbih1bnNpZ25lZCBjaGFyICpvc2hhMSwgdW5zaWduZWQgY2hhciAqbnNoYTEsIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZywgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKik7CitpbnQgZm9yX2VhY2hfcmVmbG9nX2VudChjb25zdCBjaGFyICpyZWZuYW1lLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworaW50IGZvcl9lYWNoX3JlY2VudF9yZWZsb2dfZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwgbG9uZywgdm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBDYWxscyB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGZvciBlYWNoIHJlZmxvZyBmaWxlIHVudGlsIGl0IHJldHVybnMgbm9uemVybywKKyAqIGFuZCByZXR1cm5zIHRoZSB2YWx1ZQorICovCitleHRlcm4gaW50IGZvcl9lYWNoX3JlZmxvZyhlYWNoX3JlZl9mbiwgdm9pZCAqKTsKKworI2RlZmluZSBSRUZOQU1FX0FMTE9XX09ORUxFVkVMIDEKKyNkZWZpbmUgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gMgorI2RlZmluZSBSRUZOQU1FX0RPVF9DT01QT05FTlQgNAorCisvKgorICogUmV0dXJuIDAgaWZmIHJlZm5hbWUgaGFzIHRoZSBjb3JyZWN0IGZvcm1hdCBmb3IgYSByZWZuYW1lIGFjY29yZGluZworICogdG8gdGhlIHJ1bGVzIGRlc2NyaWJlZCBpbiBEb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dC4KKyAqIElmIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwgaXMgc2V0IGluIGZsYWdzLCB0aGVuIGFjY2VwdCBvbmUtbGV2ZWwKKyAqIHJlZmVyZW5jZSBuYW1lcy4gIElmIFJFRk5BTUVfUkVGU1BFQ19QQVRURVJOIGlzIHNldCBpbiBmbGFncywgdGhlbgorICogYWxsb3cgYSAiKiIgd2lsZGNhcmQgY2hhcmFjdGVyIGluIHBsYWNlIG9mIG9uZSBvZiB0aGUgbmFtZQorICogY29tcG9uZW50cy4gIE5vIGxlYWRpbmcgb3IgcmVwZWF0ZWQgc2xhc2hlcyBhcmUgYWNjZXB0ZWQuICBJZgorICogUkVGTkFNRV9ET1RfQ09NUE9ORU5UIGlzIHNldCBpbiBmbGFncywgdGhlbiBhbGxvdyByZWZuYW1lCisgKiBjb21wb25lbnRzIHRvIHN0YXJ0IHdpdGggIi4iIChidXQgbm90IGEgd2hvbGUgY29tcG9uZW50IGVxdWFsIHRvCisgKiAiLiIgb3IgIi4uIikuCisgKi8KK2V4dGVybiBpbnQgY2hlY2tfcmVmbmFtZV9mb3JtYXQoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IGZsYWdzKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnByZXR0aWZ5X3JlZm5hbWUoY29uc3QgY2hhciAqcmVmbmFtZSk7CitleHRlcm4gY2hhciAqc2hvcnRlbl91bmFtYmlndW91c19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHN0cmljdCk7CisKKy8qKiByZW5hbWUgcmVmLCByZXR1cm4gMCBvbiBzdWNjZXNzICoqLworZXh0ZXJuIGludCByZW5hbWVfcmVmKGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLCBjb25zdCBjaGFyICpsb2dtc2cpOworCisvKioKKyAqIFJlc29sdmUgcmVmbmFtZSBpbiB0aGUgbmVzdGVkICJnaXRsaW5rIiByZXBvc2l0b3J5IHRoYXQgaXMgbG9jYXRlZAorICogYXQgcGF0aC4gIElmIHRoZSByZXNvbHV0aW9uIGlzIHN1Y2Nlc3NmdWwsIHJldHVybiAwIGFuZCBzZXQgc2hhMSB0bworICogdGhlIG5hbWUgb2YgdGhlIG9iamVjdDsgb3RoZXJ3aXNlLCByZXR1cm4gYSBub24temVybyB2YWx1ZS4KKyAqLworZXh0ZXJuIGludCByZXNvbHZlX2dpdGxpbmtfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCisvKiogbG9jayBhIHJlZiBhbmQgdGhlbiB3cml0ZSBpdHMgZmlsZSAqLworZW51bSBhY3Rpb25fb25fZXJyIHsgTVNHX09OX0VSUiwgRElFX09OX0VSUiwgUVVJRVRfT05fRVJSIH07CitpbnQgdXBkYXRlX3JlZihjb25zdCBjaGFyICphY3Rpb24sIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZHZhbCwKKwkJaW50IGZsYWdzLCBlbnVtIGFjdGlvbl9vbl9lcnIgb25lcnIpOworCisjZW5kaWYgLyogUkVGU19IICovCmRpZmYgLS1naXQgYS9yZW1vdGUtY3VybC5jIGIvcmVtb3RlLWN1cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjcxNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlLWN1cmwuYwpAQCAtMCwwICsxLDkyOCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAid2Fsa2VyLmgiCisjaW5jbHVkZSAiaHR0cC5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CitzdGF0aWMgY29uc3QgY2hhciAqdXJsOyAvKiBhbHdheXMgZW5kcyB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggKi8KKworc3RydWN0IG9wdGlvbnMgeworCWludCB2ZXJib3NpdHk7CisJdW5zaWduZWQgbG9uZyBkZXB0aDsKKwl1bnNpZ25lZCBwcm9ncmVzcyA6IDEsCisJCWZvbGxvd3RhZ3MgOiAxLAorCQlkcnlfcnVuIDogMSwKKwkJdGhpbiA6IDE7Cit9Oworc3RhdGljIHN0cnVjdCBvcHRpb25zIG9wdGlvbnM7CisKK3N0YXRpYyBpbnQgc2V0X29wdGlvbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAidmVyYm9zaXR5IikpIHsKKwkJY2hhciAqZW5kOworCQlpbnQgdiA9IHN0cnRvbCh2YWx1ZSwgJmVuZCwgMTApOworCQlpZiAodmFsdWUgPT0gZW5kIHx8ICplbmQpCisJCQlyZXR1cm4gLTE7CisJCW9wdGlvbnMudmVyYm9zaXR5ID0gdjsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgInByb2dyZXNzIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLnByb2dyZXNzID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImZhbHNlIikpCisJCQlvcHRpb25zLnByb2dyZXNzID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZGVwdGgiKSkgeworCQljaGFyICplbmQ7CisJCXVuc2lnbmVkIGxvbmcgdiA9IHN0cnRvdWwodmFsdWUsICZlbmQsIDEwKTsKKwkJaWYgKHZhbHVlID09IGVuZCB8fCAqZW5kKQorCQkJcmV0dXJuIC0xOworCQlvcHRpb25zLmRlcHRoID0gdjsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImZvbGxvd3RhZ3MiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInRydWUiKSkKKwkJCW9wdGlvbnMuZm9sbG93dGFncyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy5mb2xsb3d0YWdzID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZHJ5LXJ1biIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAidHJ1ZSIpKQorCQkJb3B0aW9ucy5kcnlfcnVuID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImZhbHNlIikpCisJCQlvcHRpb25zLmRyeV9ydW4gPSAwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwllbHNlIHsKKwkJcmV0dXJuIDEgLyogdW5zdXBwb3J0ZWQgKi87CisJfQorfQorCitzdHJ1Y3QgZGlzY292ZXJ5IHsKKwljb25zdCBjaGFyICpzZXJ2aWNlOworCWNoYXIgKmJ1Zl9hbGxvYzsKKwljaGFyICpidWY7CisJc2l6ZV90IGxlbjsKKwl1bnNpZ25lZCBwcm90b19naXQgOiAxOworfTsKK3N0YXRpYyBzdHJ1Y3QgZGlzY292ZXJ5ICpsYXN0X2Rpc2NvdmVyeTsKKworc3RhdGljIHZvaWQgZnJlZV9kaXNjb3Zlcnkoc3RydWN0IGRpc2NvdmVyeSAqZCkKK3sKKwlpZiAoZCkgeworCQlpZiAoZCA9PSBsYXN0X2Rpc2NvdmVyeSkKKwkJCWxhc3RfZGlzY292ZXJ5ID0gTlVMTDsKKwkJZnJlZShkLT5idWZfYWxsb2MpOworCQlmcmVlKGQpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBkaXNjb3ZlcnkqIGRpc2NvdmVyX3JlZnMoY29uc3QgY2hhciAqc2VydmljZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBkaXNjb3ZlcnkgKmxhc3QgPSBsYXN0X2Rpc2NvdmVyeTsKKwljaGFyICpyZWZzX3VybDsKKwlpbnQgaHR0cF9yZXQsIG1heWJlX3NtYXJ0ID0gMDsKKworCWlmIChsYXN0ICYmICFzdHJjbXAoc2VydmljZSwgbGFzdC0+c2VydmljZSkpCisJCXJldHVybiBsYXN0OworCWZyZWVfZGlzY292ZXJ5KGxhc3QpOworCisJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgIiVzaW5mby9yZWZzIiwgdXJsKTsKKwlpZiAoKCFwcmVmaXhjbXAodXJsLCAiaHR0cDovLyIpIHx8ICFwcmVmaXhjbXAodXJsLCAiaHR0cHM6Ly8iKSkgJiYKKwkgICAgIGdpdF9lbnZfYm9vbCgiR0lUX1NNQVJUX0hUVFAiLCAxKSkgeworCQltYXliZV9zbWFydCA9IDE7CisJCWlmICghc3RyY2hyKHVybCwgJz8nKSkKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmZmVyLCAnPycpOworCQllbHNlCisJCQlzdHJidWZfYWRkY2goJmJ1ZmZlciwgJyYnKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgInNlcnZpY2U9JXMiLCBzZXJ2aWNlKTsKKwl9CisJcmVmc191cmwgPSBzdHJidWZfZGV0YWNoKCZidWZmZXIsIE5VTEwpOworCisJaHR0cF9yZXQgPSBodHRwX2dldF9zdHJidWYocmVmc191cmwsICZidWZmZXIsIEhUVFBfTk9fQ0FDSEUpOworCXN3aXRjaCAoaHR0cF9yZXQpIHsKKwljYXNlIEhUVFBfT0s6CisJCWJyZWFrOworCWNhc2UgSFRUUF9NSVNTSU5HX1RBUkdFVDoKKwkJZGllKCIlcyBub3QgZm91bmQ6IGRpZCB5b3UgcnVuIGdpdCB1cGRhdGUtc2VydmVyLWluZm8gb24gdGhlIgorCQkgICAgIiBzZXJ2ZXI/IiwgcmVmc191cmwpOworCWNhc2UgSFRUUF9OT0FVVEg6CisJCWRpZSgiQXV0aGVudGljYXRpb24gZmFpbGVkIik7CisJZGVmYXVsdDoKKwkJaHR0cF9lcnJvcihyZWZzX3VybCwgaHR0cF9yZXQpOworCQlkaWUoIkhUVFAgcmVxdWVzdCBmYWlsZWQiKTsKKwl9CisKKwlsYXN0PSB4Y2FsbG9jKDEsIHNpemVvZigqbGFzdF9kaXNjb3ZlcnkpKTsKKwlsYXN0LT5zZXJ2aWNlID0gc2VydmljZTsKKwlsYXN0LT5idWZfYWxsb2MgPSBzdHJidWZfZGV0YWNoKCZidWZmZXIsICZsYXN0LT5sZW4pOworCWxhc3QtPmJ1ZiA9IGxhc3QtPmJ1Zl9hbGxvYzsKKworCWlmIChtYXliZV9zbWFydCAmJiA1IDw9IGxhc3QtPmxlbiAmJiBsYXN0LT5idWZbNF0gPT0gJyMnKSB7CisJCS8qIHNtYXJ0IEhUVFAgcmVzcG9uc2U7IHZhbGlkYXRlIHRoYXQgdGhlIHNlcnZpY2UKKwkJICogcGt0LWxpbmUgbWF0Y2hlcyBvdXIgcmVxdWVzdC4KKwkJICovCisJCXN0cnVjdCBzdHJidWYgZXhwID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKHBhY2tldF9nZXRfbGluZSgmYnVmZmVyLCAmbGFzdC0+YnVmLCAmbGFzdC0+bGVuKSA8PSAwKQorCQkJZGllKCIlcyBoYXMgaW52YWxpZCBwYWNrZXQgaGVhZGVyIiwgcmVmc191cmwpOworCQlpZiAoYnVmZmVyLmxlbiAmJiBidWZmZXIuYnVmW2J1ZmZlci5sZW4gLSAxXSA9PSAnXG4nKQorCQkJc3RyYnVmX3NldGxlbigmYnVmZmVyLCBidWZmZXIubGVuIC0gMSk7CisKKwkJc3RyYnVmX2FkZGYoJmV4cCwgIiMgc2VydmljZT0lcyIsIHNlcnZpY2UpOworCQlpZiAoc3RyYnVmX2NtcCgmZXhwLCAmYnVmZmVyKSkKKwkJCWRpZSgiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIiwgYnVmZmVyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZleHApOworCisJCS8qIFRoZSBoZWFkZXIgY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBtZXRhZGF0YSBsaW5lcywgdXAKKwkJICogdW50aWwgYSBwYWNrZXQgZmx1c2ggbWFya2VyLiAgSWdub3JlIHRoZXNlIG5vdywgYnV0CisJCSAqIGluIHRoZSBmdXR1cmUgd2UgbWlnaHQgc3RhcnQgdG8gc2NhbiB0aGVtLgorCQkgKi8KKwkJc3RyYnVmX3Jlc2V0KCZidWZmZXIpOworCQl3aGlsZSAocGFja2V0X2dldF9saW5lKCZidWZmZXIsICZsYXN0LT5idWYsICZsYXN0LT5sZW4pID4gMCkKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmZmVyKTsKKworCQlsYXN0LT5wcm90b19naXQgPSAxOworCX0KKworCWZyZWUocmVmc191cmwpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCWxhc3RfZGlzY292ZXJ5ID0gbGFzdDsKKwlyZXR1cm4gbGFzdDsKK30KKworc3RhdGljIGludCB3cml0ZV9kaXNjb3ZlcnkoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzID0gZGF0YTsKKwlpbnQgZXJyID0gMDsKKwlpZiAod3JpdGVfaW5fZnVsbChvdXQsIGhlYWRzLT5idWYsIGhlYWRzLT5sZW4pICE9IGhlYWRzLT5sZW4pCisJCWVyciA9IDE7CisJY2xvc2Uob3V0KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqcGFyc2VfZ2l0X3JlZnMoc3RydWN0IGRpc2NvdmVyeSAqaGVhZHMsIGludCBmb3JfcHVzaCkKK3sKKwlzdHJ1Y3QgcmVmICpsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgYXN5bmMgYXN5bmM7CisKKwltZW1zZXQoJmFzeW5jLCAwLCBzaXplb2YoYXN5bmMpKTsKKwlhc3luYy5wcm9jID0gd3JpdGVfZGlzY292ZXJ5OworCWFzeW5jLmRhdGEgPSBoZWFkczsKKwlhc3luYy5vdXQgPSAtMTsKKworCWlmIChzdGFydF9hc3luYygmYXN5bmMpKQorCQlkaWUoImNhbm5vdCBzdGFydCB0aHJlYWQgdG8gcGFyc2UgYWR2ZXJ0aXNlZCByZWZzIik7CisJZ2V0X3JlbW90ZV9oZWFkcyhhc3luYy5vdXQsICZsaXN0LAorCQkJZm9yX3B1c2ggPyBSRUZfTk9STUFMIDogMCwgTlVMTCk7CisJY2xvc2UoYXN5bmMub3V0KTsKKwlpZiAoZmluaXNoX2FzeW5jKCZhc3luYykpCisJCWRpZSgicmVmIHBhcnNpbmcgdGhyZWFkIGZhaWxlZCIpOworCXJldHVybiBsaXN0OworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqcGFyc2VfaW5mb19yZWZzKHN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzKQoreworCWNoYXIgKmRhdGEsICpzdGFydCwgKm1pZDsKKwljaGFyICpyZWZfbmFtZTsKKwlpbnQgaSA9IDA7CisKKwlzdHJ1Y3QgcmVmICpyZWZzID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOworCXN0cnVjdCByZWYgKmxhc3RfcmVmID0gTlVMTDsKKworCWRhdGEgPSBoZWFkcy0+YnVmOworCXN0YXJ0ID0gTlVMTDsKKwltaWQgPSBkYXRhOworCXdoaWxlIChpIDwgaGVhZHMtPmxlbikgeworCQlpZiAoIXN0YXJ0KSB7CisJCQlzdGFydCA9ICZkYXRhW2ldOworCQl9CisJCWlmIChkYXRhW2ldID09ICdcdCcpCisJCQltaWQgPSAmZGF0YVtpXTsKKwkJaWYgKGRhdGFbaV0gPT0gJ1xuJykgeworCQkJaWYgKG1pZCAtIHN0YXJ0ICE9IDQwKQorCQkJCWRpZSgiJXNpbmZvL3JlZnMgbm90IHZhbGlkOiBpcyB0aGlzIGEgZ2l0IHJlcG9zaXRvcnk/IiwgdXJsKTsKKwkJCWRhdGFbaV0gPSAwOworCQkJcmVmX25hbWUgPSBtaWQgKyAxOworCQkJcmVmID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHJlZikgKworCQkJCSAgICAgIHN0cmxlbihyZWZfbmFtZSkgKyAxKTsKKwkJCW1lbXNldChyZWYsIDAsIHNpemVvZihzdHJ1Y3QgcmVmKSk7CisJCQlzdHJjcHkocmVmLT5uYW1lLCByZWZfbmFtZSk7CisJCQlnZXRfc2hhMV9oZXgoc3RhcnQsIHJlZi0+b2xkX3NoYTEpOworCQkJaWYgKCFyZWZzKQorCQkJCXJlZnMgPSByZWY7CisJCQlpZiAobGFzdF9yZWYpCisJCQkJbGFzdF9yZWYtPm5leHQgPSByZWY7CisJCQlsYXN0X3JlZiA9IHJlZjsKKwkJCXN0YXJ0ID0gTlVMTDsKKwkJfQorCQlpKys7CisJfQorCisJcmVmID0gYWxsb2NfcmVmKCJIRUFEIik7CisJaWYgKCFodHRwX2ZldGNoX3JlZih1cmwsIHJlZikgJiYKKwkgICAgIXJlc29sdmVfcmVtb3RlX3N5bXJlZihyZWYsIHJlZnMpKSB7CisJCXJlZi0+bmV4dCA9IHJlZnM7CisJCXJlZnMgPSByZWY7CisJfSBlbHNlIHsKKwkJZnJlZShyZWYpOworCX0KKworCXJldHVybiByZWZzOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnMoaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzOworCisJaWYgKGZvcl9wdXNoKQorCQloZWFkcyA9IGRpc2NvdmVyX3JlZnMoImdpdC1yZWNlaXZlLXBhY2siKTsKKwllbHNlCisJCWhlYWRzID0gZGlzY292ZXJfcmVmcygiZ2l0LXVwbG9hZC1wYWNrIik7CisKKwlpZiAoaGVhZHMtPnByb3RvX2dpdCkKKwkJcmV0dXJuIHBhcnNlX2dpdF9yZWZzKGhlYWRzLCBmb3JfcHVzaCk7CisJcmV0dXJuIHBhcnNlX2luZm9fcmVmcyhoZWFkcyk7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dF9yZWZzKHN0cnVjdCByZWYgKnJlZnMpCit7CisJc3RydWN0IHJlZiAqcG9zbjsKKwlmb3IgKHBvc24gPSByZWZzOyBwb3NuOyBwb3NuID0gcG9zbi0+bmV4dCkgeworCQlpZiAocG9zbi0+c3ltcmVmKQorCQkJcHJpbnRmKCJAJXMgJXNcbiIsIHBvc24tPnN5bXJlZiwgcG9zbi0+bmFtZSk7CisJCWVsc2UKKwkJCXByaW50ZigiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHBvc24tPm9sZF9zaGExKSwgcG9zbi0+bmFtZSk7CisJfQorCXByaW50ZigiXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwlmcmVlX3JlZnMocmVmcyk7Cit9CisKK3N0cnVjdCBycGNfc3RhdGUgeworCWNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZTsKKwljb25zdCBjaGFyICoqYXJndjsKKwlzdHJ1Y3Qgc3RyYnVmICpzdGRpbl9wcmVhbWJsZTsKKwljaGFyICpzZXJ2aWNlX3VybDsKKwljaGFyICpoZHJfY29udGVudF90eXBlOworCWNoYXIgKmhkcl9hY2NlcHQ7CisJY2hhciAqYnVmOworCXNpemVfdCBhbGxvYzsKKwlzaXplX3QgbGVuOworCXNpemVfdCBwb3M7CisJaW50IGluOworCWludCBvdXQ7CisJc3RydWN0IHN0cmJ1ZiByZXN1bHQ7CisJdW5zaWduZWQgZ3ppcF9yZXF1ZXN0IDogMTsKKwl1bnNpZ25lZCBpbml0aWFsX2J1ZmZlciA6IDE7Cit9OworCitzdGF0aWMgc2l6ZV90IHJwY19vdXQodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwKKwkJc2l6ZV90IG5tZW1iLCB2b2lkICpidWZmZXJfKQoreworCXNpemVfdCBtYXggPSBlbHRzaXplICogbm1lbWI7CisJc3RydWN0IHJwY19zdGF0ZSAqcnBjID0gYnVmZmVyXzsKKwlzaXplX3QgYXZhaWwgPSBycGMtPmxlbiAtIHJwYy0+cG9zOworCisJaWYgKCFhdmFpbCkgeworCQlycGMtPmluaXRpYWxfYnVmZmVyID0gMDsKKwkJYXZhaWwgPSBwYWNrZXRfcmVhZF9saW5lKHJwYy0+b3V0LCBycGMtPmJ1ZiwgcnBjLT5hbGxvYyk7CisJCWlmICghYXZhaWwpCisJCQlyZXR1cm4gMDsKKwkJcnBjLT5wb3MgPSAwOworCQlycGMtPmxlbiA9IGF2YWlsOworCX0KKworCWlmIChtYXggPCBhdmFpbCkKKwkJYXZhaWwgPSBtYXg7CisJbWVtY3B5KHB0ciwgcnBjLT5idWYgKyBycGMtPnBvcywgYXZhaWwpOworCXJwYy0+cG9zICs9IGF2YWlsOworCXJldHVybiBhdmFpbDsKK30KKworI2lmbmRlZiBOT19DVVJMX0lPQ1RMCitzdGF0aWMgY3VybGlvZXJyIHJwY19pb2N0bChDVVJMICpoYW5kbGUsIGludCBjbWQsIHZvaWQgKmNsaWVudHApCit7CisJc3RydWN0IHJwY19zdGF0ZSAqcnBjID0gY2xpZW50cDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBDVVJMSU9DTURfTk9QOgorCQlyZXR1cm4gQ1VSTElPRV9PSzsKKworCWNhc2UgQ1VSTElPQ01EX1JFU1RBUlRSRUFEOgorCQlpZiAocnBjLT5pbml0aWFsX2J1ZmZlcikgeworCQkJcnBjLT5wb3MgPSAwOworCQkJcmV0dXJuIENVUkxJT0VfT0s7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXJcbiIpOworCQlyZXR1cm4gQ1VSTElPRV9GQUlMUkVTVEFSVDsKKworCWRlZmF1bHQ6CisJCXJldHVybiBDVVJMSU9FX1VOS05PV05DTUQ7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBzaXplX3QgcnBjX2luKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsCisJCXNpemVfdCBubWVtYiwgdm9pZCAqYnVmZmVyXykKK3sKKwlzaXplX3Qgc2l6ZSA9IGVsdHNpemUgKiBubWVtYjsKKwlzdHJ1Y3QgcnBjX3N0YXRlICpycGMgPSBidWZmZXJfOworCXdyaXRlX29yX2RpZShycGMtPmluLCBwdHIsIHNpemUpOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IHJ1bl9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworCWludCBlcnI7CisJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCXNsb3QtPmN1cmxfcmVzdWx0ID0gY3VybF9lYXN5X3BlcmZvcm0oc2xvdC0+Y3VybCk7CisJZmluaXNoX2FjdGl2ZV9zbG90KHNsb3QpOworCisJZXJyID0gaGFuZGxlX2N1cmxfcmVzdWx0KHNsb3QsICZyZXN1bHRzKTsKKwlpZiAoZXJyICE9IEhUVFBfT0sgJiYgZXJyICE9IEhUVFBfUkVBVVRIKSB7CisJCWVycm9yKCJSUEMgZmFpbGVkOyByZXN1bHQ9JWQsIEhUVFAgY29kZSA9ICVsZCIsCisJCSAgICAgIHJlc3VsdHMuY3VybF9yZXN1bHQsIHJlc3VsdHMuaHR0cF9jb2RlKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHByb2JlX3JwYyhzdHJ1Y3QgcnBjX3N0YXRlICpycGMpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGVycjsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBycGMtPmhkcl9jb250ZW50X3R5cGUpOworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBycGMtPmhkcl9hY2NlcHQpOworCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1QsIDEpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJwYy0+c2VydmljZV91cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9FTkNPRElORywgTlVMTCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsICIwMDAwIik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIDQpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBoZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWYpOworCisJZXJyID0gcnVuX3Nsb3Qoc2xvdCk7CisKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGhlYWRlcnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9zdF9ycGMoc3RydWN0IHJwY19zdGF0ZSAqcnBjKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzID0gTlVMTDsKKwlpbnQgdXNlX2d6aXAgPSBycGMtPmd6aXBfcmVxdWVzdDsKKwljaGFyICpnemlwX2JvZHkgPSBOVUxMOworCWludCBlcnIsIGxhcmdlX3JlcXVlc3QgPSAwOworCisJLyogVHJ5IHRvIGxvYWQgdGhlIGVudGlyZSByZXF1ZXN0LCBpZiB3ZSBjYW4gZml0IGl0IGludG8gdGhlCisJICogYWxsb2NhdGVkIGJ1ZmZlciBzcGFjZSB3ZSBjYW4gdXNlIEhUVFAvMS4wIGFuZCBhdm9pZCB0aGUKKwkgKiBjaHVua2VkIGVuY29kaW5nIG1lc3MuCisJICovCisJd2hpbGUgKDEpIHsKKwkJc2l6ZV90IGxlZnQgPSBycGMtPmFsbG9jIC0gcnBjLT5sZW47CisJCWNoYXIgKmJ1ZiA9IHJwYy0+YnVmICsgcnBjLT5sZW47CisJCWludCBuOworCisJCWlmIChsZWZ0IDwgTEFSR0VfUEFDS0VUX01BWCkgeworCQkJbGFyZ2VfcmVxdWVzdCA9IDE7CisJCQl1c2VfZ3ppcCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCW4gPSBwYWNrZXRfcmVhZF9saW5lKHJwYy0+b3V0LCBidWYsIGxlZnQpOworCQlpZiAoIW4pCisJCQlicmVhazsKKwkJcnBjLT5sZW4gKz0gbjsKKwl9CisKKwlpZiAobGFyZ2VfcmVxdWVzdCkgeworCQlkbyB7CisJCQllcnIgPSBwcm9iZV9ycGMocnBjKTsKKwkJfSB3aGlsZSAoZXJyID09IEhUVFBfUkVBVVRIKTsKKwkJaWYgKGVyciAhPSBIVFRQX09LKQorCQkJcmV0dXJuIC0xOworCX0KKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCBycGMtPnNlcnZpY2VfdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRU5DT0RJTkcsICJnemlwIik7CisKKwloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgcnBjLT5oZHJfY29udGVudF90eXBlKTsKKwloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgcnBjLT5oZHJfYWNjZXB0KTsKKwloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgIkV4cGVjdDoiKTsKKworCWlmIChsYXJnZV9yZXF1ZXN0KSB7CisJCS8qIFRoZSByZXF1ZXN0IGJvZHkgaXMgbGFyZ2UgYW5kIHRoZSBzaXplIGNhbm5vdCBiZSBwcmVkaWN0ZWQuCisJCSAqIFdlIG11c3QgdXNlIGNodW5rZWQgZW5jb2RpbmcgdG8gc2VuZCBpdC4KKwkJICovCisJCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCAiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsKKwkJcnBjLT5pbml0aWFsX2J1ZmZlciA9IDE7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9SRUFERlVOQ1RJT04sIHJwY19vdXQpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU5GSUxFLCBycGMpOworI2lmbmRlZiBOT19DVVJMX0lPQ1RMCisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBycGNfaW9jdGwpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU9DVExEQVRBLCBycGMpOworI2VuZGlmCisJCWlmIChvcHRpb25zLnZlcmJvc2l0eSA+IDEpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiUE9TVCAlcyAoY2h1bmtlZClcbiIsIHJwYy0+c2VydmljZV9uYW1lKTsKKwkJCWZmbHVzaChzdGRlcnIpOworCQl9CisKKwl9IGVsc2UgaWYgKHVzZV9nemlwICYmIDEwMjQgPCBycGMtPmxlbikgeworCQkvKiBUaGUgY2xpZW50IGJhY2tlbmQgaXNuJ3QgZ2l2aW5nIHVzIGNvbXByZXNzZWQgZGF0YSBzbworCQkgKiB3ZSBjYW4gdHJ5IHRvIGRlZmxhdGUgaXQgb3Vyc2VsdmVzLCB0aGlzIG1heSBzYXZlIG9uLgorCQkgKiB0aGUgdHJhbnNmZXIgdGltZS4KKwkJICovCisJCXNpemVfdCBzaXplOworCQlnaXRfenN0cmVhbSBzdHJlYW07CisJCWludCByZXQ7CisKKwkJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwkJZ2l0X2RlZmxhdGVfaW5pdF9nemlwKCZzdHJlYW0sIFpfQkVTVF9DT01QUkVTU0lPTik7CisJCXNpemUgPSBnaXRfZGVmbGF0ZV9ib3VuZCgmc3RyZWFtLCBycGMtPmxlbik7CisJCWd6aXBfYm9keSA9IHhtYWxsb2Moc2l6ZSk7CisKKwkJc3RyZWFtLm5leHRfaW4gPSAodW5zaWduZWQgY2hhciAqKXJwYy0+YnVmOworCQlzdHJlYW0uYXZhaWxfaW4gPSBycGMtPmxlbjsKKwkJc3RyZWFtLm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilnemlwX2JvZHk7CisJCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplOworCisJCXJldCA9IGdpdF9kZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwkJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpCisJCQlkaWUoImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIsIHJldCk7CisKKwkJcmV0ID0gZ2l0X2RlZmxhdGVfZW5kX2dlbnRseSgmc3RyZWFtKTsKKwkJaWYgKHJldCAhPSBaX09LKQorCQkJZGllKCJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGVuZCBlcnJvciAlZCIsIHJldCk7CisKKwkJc2l6ZSA9IHN0cmVhbS50b3RhbF9vdXQ7CisKKwkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsICJDb250ZW50LUVuY29kaW5nOiBnemlwIik7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCBnemlwX2JvZHkpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUE9TVEZJRUxEU0laRSwgc2l6ZSk7CisKKwkJaWYgKG9wdGlvbnMudmVyYm9zaXR5ID4gMSkgeworCQkJZnByaW50ZihzdGRlcnIsICJQT1NUICVzIChnemlwICVsdSB0byAlbHUgYnl0ZXMpXG4iLAorCQkJCXJwYy0+c2VydmljZV9uYW1lLAorCQkJCSh1bnNpZ25lZCBsb25nKXJwYy0+bGVuLCAodW5zaWduZWQgbG9uZylzaXplKTsKKwkJCWZmbHVzaChzdGRlcnIpOworCQl9CisJfSBlbHNlIHsKKwkJLyogV2Uga25vdyB0aGUgY29tcGxldGUgcmVxdWVzdCBzaXplIGluIGFkdmFuY2UsIHVzZSB0aGUKKwkJICogbW9yZSBub3JtYWwgQ29udGVudC1MZW5ndGggYXBwcm9hY2guCisJCSAqLworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUE9TVEZJRUxEUywgcnBjLT5idWYpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUE9TVEZJRUxEU0laRSwgcnBjLT5sZW4pOworCQlpZiAob3B0aW9ucy52ZXJib3NpdHkgPiAxKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlBPU1QgJXMgKCVsdSBieXRlcylcbiIsCisJCQkJcnBjLT5zZXJ2aWNlX25hbWUsICh1bnNpZ25lZCBsb25nKXJwYy0+bGVuKTsKKwkJCWZmbHVzaChzdGRlcnIpOworCQl9CisJfQorCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBycGNfaW4pOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBycGMpOworCisJZG8geworCQllcnIgPSBydW5fc2xvdChzbG90KTsKKwl9IHdoaWxlIChlcnIgPT0gSFRUUF9SRUFVVEggJiYgIWxhcmdlX3JlcXVlc3QgJiYgIXVzZV9nemlwKTsKKwlpZiAoZXJyICE9IEhUVFBfT0spCisJCWVyciA9IC0xOworCisJY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsKKwlmcmVlKGd6aXBfYm9keSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBycGNfc2VydmljZShzdHJ1Y3QgcnBjX3N0YXRlICpycGMsIHN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzKQoreworCWNvbnN0IGNoYXIgKnN2YyA9IHJwYy0+c2VydmljZV9uYW1lOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiAqcHJlYW1ibGUgPSBycGMtPnN0ZGluX3ByZWFtYmxlOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsaWVudDsKKwlpbnQgZXJyID0gMDsKKworCW1lbXNldCgmY2xpZW50LCAwLCBzaXplb2YoY2xpZW50KSk7CisJY2xpZW50LmluID0gLTE7CisJY2xpZW50Lm91dCA9IC0xOworCWNsaWVudC5naXRfY21kID0gMTsKKwljbGllbnQuYXJndiA9IHJwYy0+YXJndjsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2xpZW50KSkKKwkJZXhpdCgxKTsKKwlpZiAocHJlYW1ibGUpCisJCXdyaXRlX29yX2RpZShjbGllbnQuaW4sIHByZWFtYmxlLT5idWYsIHByZWFtYmxlLT5sZW4pOworCWlmIChoZWFkcykKKwkJd3JpdGVfb3JfZGllKGNsaWVudC5pbiwgaGVhZHMtPmJ1ZiwgaGVhZHMtPmxlbik7CisKKwlycGMtPmFsbG9jID0gaHR0cF9wb3N0X2J1ZmZlcjsKKwlycGMtPmJ1ZiA9IHhtYWxsb2MocnBjLT5hbGxvYyk7CisJcnBjLT5pbiA9IGNsaWVudC5pbjsKKwlycGMtPm91dCA9IGNsaWVudC5vdXQ7CisJc3RyYnVmX2luaXQoJnJwYy0+cmVzdWx0LCAwKTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcyVzIiwgdXJsLCBzdmMpOworCXJwYy0+c2VydmljZV91cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC0lcy1yZXF1ZXN0Iiwgc3ZjKTsKKwlycGMtPmhkcl9jb250ZW50X3R5cGUgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIkFjY2VwdDogYXBwbGljYXRpb24veC0lcy1yZXN1bHQiLCBzdmMpOworCXJwYy0+aGRyX2FjY2VwdCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwl3aGlsZSAoIWVycikgeworCQlpbnQgbiA9IHBhY2tldF9yZWFkX2xpbmUocnBjLT5vdXQsIHJwYy0+YnVmLCBycGMtPmFsbG9jKTsKKwkJaWYgKCFuKQorCQkJYnJlYWs7CisJCXJwYy0+cG9zID0gMDsKKwkJcnBjLT5sZW4gPSBuOworCQllcnIgfD0gcG9zdF9ycGMocnBjKTsKKwl9CisKKwljbG9zZShjbGllbnQuaW4pOworCWNsaWVudC5pbiA9IC0xOworCWlmICghZXJyKSB7CisJCXN0cmJ1Zl9yZWFkKCZycGMtPnJlc3VsdCwgY2xpZW50Lm91dCwgMCk7CisJfSBlbHNlIHsKKwkJY2hhciBidWZbNDA5Nl07CisJCWZvciAoOzspCisJCQlpZiAoeHJlYWQoY2xpZW50Lm91dCwgYnVmLCBzaXplb2YoYnVmKSkgPD0gMCkKKwkJCQlicmVhazsKKwl9CisKKwljbG9zZShjbGllbnQub3V0KTsKKwljbGllbnQub3V0ID0gLTE7CisKKwllcnIgfD0gZmluaXNoX2NvbW1hbmQoJmNsaWVudCk7CisJZnJlZShycGMtPnNlcnZpY2VfdXJsKTsKKwlmcmVlKHJwYy0+aGRyX2NvbnRlbnRfdHlwZSk7CisJZnJlZShycGMtPmhkcl9hY2NlcHQpOworCWZyZWUocnBjLT5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfZHVtYihpbnQgbnJfaGVhZHMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKK3sKKwlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CisJY2hhciAqKnRhcmdldHMgPSB4bWFsbG9jKG5yX2hlYWRzICogc2l6ZW9mKGNoYXIqKSk7CisJaW50IHJldCwgaTsKKworCWlmIChvcHRpb25zLmRlcHRoKQorCQlkaWUoImR1bWIgaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAtLWRlcHRoIik7CisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCXRhcmdldHNbaV0gPSB4c3RyZHVwKHNoYTFfdG9faGV4KHRvX2ZldGNoW2ldLT5vbGRfc2hhMSkpOworCisJd2Fsa2VyID0gZ2V0X2h0dHBfd2Fsa2VyKHVybCk7CisJd2Fsa2VyLT5nZXRfYWxsID0gMTsKKwl3YWxrZXItPmdldF90cmVlID0gMTsKKwl3YWxrZXItPmdldF9oaXN0b3J5ID0gMTsKKwl3YWxrZXItPmdldF92ZXJib3NlbHkgPSBvcHRpb25zLnZlcmJvc2l0eSA+PSAzOworCXdhbGtlci0+Z2V0X3JlY292ZXIgPSAwOworCXJldCA9IHdhbGtlcl9mZXRjaCh3YWxrZXIsIG5yX2hlYWRzLCB0YXJnZXRzLCBOVUxMLCBOVUxMKTsKKwl3YWxrZXJfZnJlZSh3YWxrZXIpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCWZyZWUodGFyZ2V0c1tpXSk7CisJZnJlZSh0YXJnZXRzKTsKKworCXJldHVybiByZXQgPyBlcnJvcigiRmV0Y2ggZmFpbGVkLiIpIDogMDsKK30KKworc3RhdGljIGludCBmZXRjaF9naXQoc3RydWN0IGRpc2NvdmVyeSAqaGVhZHMsCisJaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IHJwY19zdGF0ZSBycGM7CisJc3RydWN0IHN0cmJ1ZiBwcmVhbWJsZSA9IFNUUkJVRl9JTklUOworCWNoYXIgKmRlcHRoX2FyZyA9IE5VTEw7CisJaW50IGFyZ2MgPSAwLCBpLCBlcnI7CisJY29uc3QgY2hhciAqYXJndlsxNV07CisKKwlhcmd2W2FyZ2MrK10gPSAiZmV0Y2gtcGFjayI7CisJYXJndlthcmdjKytdID0gIi0tc3RhdGVsZXNzLXJwYyI7CisJYXJndlthcmdjKytdID0gIi0tc3RkaW4iOworCWFyZ3ZbYXJnYysrXSA9ICItLWxvY2stcGFjayI7CisJaWYgKG9wdGlvbnMuZm9sbG93dGFncykKKwkJYXJndlthcmdjKytdID0gIi0taW5jbHVkZS10YWciOworCWlmIChvcHRpb25zLnRoaW4pCisJCWFyZ3ZbYXJnYysrXSA9ICItLXRoaW4iOworCWlmIChvcHRpb25zLnZlcmJvc2l0eSA+PSAzKSB7CisJCWFyZ3ZbYXJnYysrXSA9ICItdiI7CisJCWFyZ3ZbYXJnYysrXSA9ICItdiI7CisJfQorCWlmICghb3B0aW9ucy5wcm9ncmVzcykKKwkJYXJndlthcmdjKytdID0gIi0tbm8tcHJvZ3Jlc3MiOworCWlmIChvcHRpb25zLmRlcHRoKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICItLWRlcHRoPSVsdSIsIG9wdGlvbnMuZGVwdGgpOworCQlkZXB0aF9hcmcgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCQlhcmd2W2FyZ2MrK10gPSBkZXB0aF9hcmc7CisJfQorCWFyZ3ZbYXJnYysrXSA9IHVybDsKKwlhcmd2W2FyZ2MrK10gPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspIHsKKwkJc3RydWN0IHJlZiAqcmVmID0gdG9fZmV0Y2hbaV07CisJCWlmICghcmVmLT5uYW1lIHx8ICEqcmVmLT5uYW1lKQorCQkJZGllKCJjYW5ub3QgZmV0Y2ggYnkgc2hhMSBvdmVyIHNtYXJ0IGh0dHAiKTsKKwkJcGFja2V0X2J1Zl93cml0ZSgmcHJlYW1ibGUsICIlc1xuIiwgcmVmLT5uYW1lKTsKKwl9CisJcGFja2V0X2J1Zl9mbHVzaCgmcHJlYW1ibGUpOworCisJbWVtc2V0KCZycGMsIDAsIHNpemVvZihycGMpKTsKKwlycGMuc2VydmljZV9uYW1lID0gImdpdC11cGxvYWQtcGFjayIsCisJcnBjLmFyZ3YgPSBhcmd2OworCXJwYy5zdGRpbl9wcmVhbWJsZSA9ICZwcmVhbWJsZTsKKwlycGMuZ3ppcF9yZXF1ZXN0ID0gMTsKKworCWVyciA9IHJwY19zZXJ2aWNlKCZycGMsIGhlYWRzKTsKKwlpZiAocnBjLnJlc3VsdC5sZW4pCisJCXNhZmVfd3JpdGUoMSwgcnBjLnJlc3VsdC5idWYsIHJwYy5yZXN1bHQubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmcnBjLnJlc3VsdCk7CisJc3RyYnVmX3JlbGVhc2UoJnByZWFtYmxlKTsKKwlmcmVlKGRlcHRoX2FyZyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmZXRjaChpbnQgbnJfaGVhZHMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKK3sKKwlzdHJ1Y3QgZGlzY292ZXJ5ICpkID0gZGlzY292ZXJfcmVmcygiZ2l0LXVwbG9hZC1wYWNrIik7CisJaWYgKGQtPnByb3RvX2dpdCkKKwkJcmV0dXJuIGZldGNoX2dpdChkLCBucl9oZWFkcywgdG9fZmV0Y2gpOworCWVsc2UKKwkJcmV0dXJuIGZldGNoX2R1bWIobnJfaGVhZHMsIHRvX2ZldGNoKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZmV0Y2goc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXN0cnVjdCByZWYgKip0b19mZXRjaCA9IE5VTEw7CisJc3RydWN0IHJlZiAqbGlzdF9oZWFkID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqbGlzdCA9ICZsaXN0X2hlYWQ7CisJaW50IGFsbG9jX2hlYWRzID0gMCwgbnJfaGVhZHMgPSAwOworCisJZG8geworCQlpZiAoIXByZWZpeGNtcChidWYtPmJ1ZiwgImZldGNoICIpKSB7CisJCQljaGFyICpwID0gYnVmLT5idWYgKyBzdHJsZW4oImZldGNoICIpOworCQkJY2hhciAqbmFtZTsKKwkJCXN0cnVjdCByZWYgKnJlZjsKKwkJCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCisJCQlpZiAoc3RybGVuKHApIDwgNDAgfHwgZ2V0X3NoYTFfaGV4KHAsIG9sZF9zaGExKSkKKwkJCQlkaWUoInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJXMnIiwgcCk7CisJCQlpZiAocFs0MF0gPT0gJyAnKQorCQkJCW5hbWUgPSBwICsgNDE7CisJCQllbHNlIGlmICghcFs0MF0pCisJCQkJbmFtZSA9ICIiOworCQkJZWxzZQorCQkJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAlcyciLCBwKTsKKworCQkJcmVmID0gYWxsb2NfcmVmKG5hbWUpOworCQkJaGFzaGNweShyZWYtPm9sZF9zaGExLCBvbGRfc2hhMSk7CisKKwkJCSpsaXN0ID0gcmVmOworCQkJbGlzdCA9ICZyZWYtPm5leHQ7CisKKwkJCUFMTE9DX0dST1codG9fZmV0Y2gsIG5yX2hlYWRzICsgMSwgYWxsb2NfaGVhZHMpOworCQkJdG9fZmV0Y2hbbnJfaGVhZHMrK10gPSByZWY7CisJCX0KKwkJZWxzZQorCQkJZGllKCJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIiwgYnVmLT5idWYpOworCisJCXN0cmJ1Zl9yZXNldChidWYpOworCQlpZiAoc3RyYnVmX2dldGxpbmUoYnVmLCBzdGRpbiwgJ1xuJykgPT0gRU9GKQorCQkJcmV0dXJuOworCQlpZiAoISpidWYtPmJ1ZikKKwkJCWJyZWFrOworCX0gd2hpbGUgKDEpOworCisJaWYgKGZldGNoKG5yX2hlYWRzLCB0b19mZXRjaCkpCisJCWV4aXQoMTI4KTsgLyogZXJyb3IgYWxyZWFkeSByZXBvcnRlZCAqLworCWZyZWVfcmVmcyhsaXN0X2hlYWQpOworCWZyZWUodG9fZmV0Y2gpOworCisJcHJpbnRmKCJcbiIpOworCWZmbHVzaChzdGRvdXQpOworCXN0cmJ1Zl9yZXNldChidWYpOworfQorCitzdGF0aWMgaW50IHB1c2hfZGF2KGludCBucl9zcGVjLCBjaGFyICoqc3BlY3MpCit7CisJY29uc3QgY2hhciAqKmFyZ3YgPSB4bWFsbG9jKCgxMCArIG5yX3NwZWMpICogc2l6ZW9mKGNoYXIqKSk7CisJaW50IGFyZ2MgPSAwLCBpOworCisJYXJndlthcmdjKytdID0gImh0dHAtcHVzaCI7CisJYXJndlthcmdjKytdID0gIi0taGVscGVyLXN0YXR1cyI7CisJaWYgKG9wdGlvbnMuZHJ5X3J1bikKKwkJYXJndlthcmdjKytdID0gIi0tZHJ5LXJ1biI7CisJaWYgKG9wdGlvbnMudmVyYm9zaXR5ID4gMSkKKwkJYXJndlthcmdjKytdID0gIi0tdmVyYm9zZSI7CisJYXJndlthcmdjKytdID0gdXJsOworCWZvciAoaSA9IDA7IGkgPCBucl9zcGVjOyBpKyspCisJCWFyZ3ZbYXJnYysrXSA9IHNwZWNzW2ldOworCWFyZ3ZbYXJnYysrXSA9IE5VTEw7CisKKwlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX0dJVF9DTUQpKQorCQlkaWUoImdpdC0lcyBmYWlsZWQiLCBhcmd2WzBdKTsKKwlmcmVlKGFyZ3YpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB1c2hfZ2l0KHN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzLCBpbnQgbnJfc3BlYywgY2hhciAqKnNwZWNzKQoreworCXN0cnVjdCBycGNfc3RhdGUgcnBjOworCWNvbnN0IGNoYXIgKiphcmd2OworCWludCBhcmdjID0gMCwgaSwgZXJyOworCisJYXJndiA9IHhtYWxsb2MoKDEwICsgbnJfc3BlYykgKiBzaXplb2YoY2hhciopKTsKKwlhcmd2W2FyZ2MrK10gPSAic2VuZC1wYWNrIjsKKwlhcmd2W2FyZ2MrK10gPSAiLS1zdGF0ZWxlc3MtcnBjIjsKKwlhcmd2W2FyZ2MrK10gPSAiLS1oZWxwZXItc3RhdHVzIjsKKwlpZiAob3B0aW9ucy50aGluKQorCQlhcmd2W2FyZ2MrK10gPSAiLS10aGluIjsKKwlpZiAob3B0aW9ucy5kcnlfcnVuKQorCQlhcmd2W2FyZ2MrK10gPSAiLS1kcnktcnVuIjsKKwlpZiAob3B0aW9ucy52ZXJib3NpdHkgPT0gMCkKKwkJYXJndlthcmdjKytdID0gIi0tcXVpZXQiOworCWVsc2UgaWYgKG9wdGlvbnMudmVyYm9zaXR5ID4gMSkKKwkJYXJndlthcmdjKytdID0gIi0tdmVyYm9zZSI7CisJYXJndlthcmdjKytdID0gb3B0aW9ucy5wcm9ncmVzcyA/ICItLXByb2dyZXNzIiA6ICItLW5vLXByb2dyZXNzIjsKKwlhcmd2W2FyZ2MrK10gPSB1cmw7CisJZm9yIChpID0gMDsgaSA8IG5yX3NwZWM7IGkrKykKKwkJYXJndlthcmdjKytdID0gc3BlY3NbaV07CisJYXJndlthcmdjKytdID0gTlVMTDsKKworCW1lbXNldCgmcnBjLCAwLCBzaXplb2YocnBjKSk7CisJcnBjLnNlcnZpY2VfbmFtZSA9ICJnaXQtcmVjZWl2ZS1wYWNrIiwKKwlycGMuYXJndiA9IGFyZ3Y7CisKKwllcnIgPSBycGNfc2VydmljZSgmcnBjLCBoZWFkcyk7CisJaWYgKHJwYy5yZXN1bHQubGVuKQorCQlzYWZlX3dyaXRlKDEsIHJwYy5yZXN1bHQuYnVmLCBycGMucmVzdWx0Lmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJnJwYy5yZXN1bHQpOworCWZyZWUoYXJndik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwdXNoKGludCBucl9zcGVjLCBjaGFyICoqc3BlY3MpCit7CisJc3RydWN0IGRpc2NvdmVyeSAqaGVhZHMgPSBkaXNjb3Zlcl9yZWZzKCJnaXQtcmVjZWl2ZS1wYWNrIik7CisJaW50IHJldDsKKworCWlmIChoZWFkcy0+cHJvdG9fZ2l0KQorCQlyZXQgPSBwdXNoX2dpdChoZWFkcywgbnJfc3BlYywgc3BlY3MpOworCWVsc2UKKwkJcmV0ID0gcHVzaF9kYXYobnJfc3BlYywgc3BlY3MpOworCWZyZWVfZGlzY292ZXJ5KGhlYWRzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9wdXNoKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwljaGFyICoqc3BlY3MgPSBOVUxMOworCWludCBhbGxvY19zcGVjID0gMCwgbnJfc3BlYyA9IDAsIGksIHJldDsKKworCWRvIHsKKwkJaWYgKCFwcmVmaXhjbXAoYnVmLT5idWYsICJwdXNoICIpKSB7CisJCQlBTExPQ19HUk9XKHNwZWNzLCBucl9zcGVjICsgMSwgYWxsb2Nfc3BlYyk7CisJCQlzcGVjc1tucl9zcGVjKytdID0geHN0cmR1cChidWYtPmJ1ZiArIDUpOworCQl9CisJCWVsc2UKKwkJCWRpZSgiaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAlcyIsIGJ1Zi0+YnVmKTsKKworCQlzdHJidWZfcmVzZXQoYnVmKTsKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lKGJ1Ziwgc3RkaW4sICdcbicpID09IEVPRikKKwkJCWdvdG8gZnJlZV9zcGVjczsKKwkJaWYgKCEqYnVmLT5idWYpCisJCQlicmVhazsKKwl9IHdoaWxlICgxKTsKKworCXJldCA9IHB1c2gobnJfc3BlYywgc3BlY3MpOworCXByaW50ZigiXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKKworCWlmIChyZXQpCisJCWV4aXQoMTI4KTsgLyogZXJyb3IgYWxyZWFkeSByZXBvcnRlZCAqLworCisgZnJlZV9zcGVjczoKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc3BlYzsgaSsrKQorCQlmcmVlKHNwZWNzW2ldKTsKKwlmcmVlKHNwZWNzKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IG5vbmdpdDsKKworCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7CisJaWYgKGFyZ2MgPCAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiUmVtb3RlIG5lZWRlZFxuIik7CisJCXJldHVybiAxOworCX0KKworCW9wdGlvbnMudmVyYm9zaXR5ID0gMTsKKwlvcHRpb25zLnByb2dyZXNzID0gISFpc2F0dHkoMik7CisJb3B0aW9ucy50aGluID0gMTsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQoYXJndlsxXSk7CisKKwlpZiAoYXJnYyA+IDIpIHsKKwkJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIGFyZ3ZbMl0pOworCX0gZWxzZSB7CisJCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCByZW1vdGUtPnVybFswXSk7CisJfQorCisJdXJsID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWh0dHBfaW5pdChyZW1vdGUsIHVybCwgMCk7CisKKwlkbyB7CisJCWlmIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbiwgJ1xuJykgPT0gRU9GKSB7CisJCQlpZiAoZmVycm9yKHN0ZGluKSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHJlYWRpbmcgY29tbWFuZCBzdHJlYW1cbiIpOworCQkJZWxzZQorCQkJCWZwcmludGYoc3RkZXJyLCAiVW5leHBlY3RlZCBlbmQgb2YgY29tbWFuZCBzdHJlYW1cbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKGJ1Zi5sZW4gPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoIXByZWZpeGNtcChidWYuYnVmLCAiZmV0Y2ggIikpIHsKKwkJCWlmIChub25naXQpCisJCQkJZGllKCJGZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iKTsKKwkJCXBhcnNlX2ZldGNoKCZidWYpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcChidWYuYnVmLCAibGlzdCIpIHx8ICFwcmVmaXhjbXAoYnVmLmJ1ZiwgImxpc3QgIikpIHsKKwkJCWludCBmb3JfcHVzaCA9ICEhc3Ryc3RyKGJ1Zi5idWYgKyA0LCAiZm9yLXB1c2giKTsKKwkJCW91dHB1dF9yZWZzKGdldF9yZWZzKGZvcl9wdXNoKSk7CisKKwkJfSBlbHNlIGlmICghcHJlZml4Y21wKGJ1Zi5idWYsICJwdXNoICIpKSB7CisJCQlwYXJzZV9wdXNoKCZidWYpOworCisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChidWYuYnVmLCAib3B0aW9uICIpKSB7CisJCQljaGFyICpuYW1lID0gYnVmLmJ1ZiArIHN0cmxlbigib3B0aW9uICIpOworCQkJY2hhciAqdmFsdWUgPSBzdHJjaHIobmFtZSwgJyAnKTsKKwkJCWludCByZXN1bHQ7CisKKwkJCWlmICh2YWx1ZSkKKwkJCQkqdmFsdWUrKyA9ICdcMCc7CisJCQllbHNlCisJCQkJdmFsdWUgPSAidHJ1ZSI7CisKKwkJCXJlc3VsdCA9IHNldF9vcHRpb24obmFtZSwgdmFsdWUpOworCQkJaWYgKCFyZXN1bHQpCisJCQkJcHJpbnRmKCJva1xuIik7CisJCQllbHNlIGlmIChyZXN1bHQgPCAwKQorCQkJCXByaW50ZigiZXJyb3IgaW52YWxpZCB2YWx1ZVxuIik7CisJCQllbHNlCisJCQkJcHJpbnRmKCJ1bnN1cHBvcnRlZFxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLmJ1ZiwgImNhcGFiaWxpdGllcyIpKSB7CisJCQlwcmludGYoImZldGNoXG4iKTsKKwkJCXByaW50Zigib3B0aW9uXG4iKTsKKwkJCXByaW50ZigicHVzaFxuIik7CisJCQlwcmludGYoIlxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBjb21tYW5kICclcydcbiIsIGJ1Zi5idWYpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCX0gd2hpbGUgKDEpOworCisJaHR0cF9jbGVhbnVwKCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3JlbW90ZS5jIGIvcmVtb3RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmZDllYQotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZS5jCkBAIC0wLDAgKzEsMTc3MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibWVyZ2Vzb3J0LmgiCisKK2VudW0gbWFwX2RpcmVjdGlvbiB7IEZST01fU1JDLCBGUk9NX0RTVCB9OworCitzdGF0aWMgc3RydWN0IHJlZnNwZWMgc190YWdfcmVmc3BlYyA9IHsKKwkwLAorCTEsCisJMCwKKwkicmVmcy90YWdzLyoiLAorCSJyZWZzL3RhZ3MvKiIKK307CisKK2NvbnN0IHN0cnVjdCByZWZzcGVjICp0YWdfcmVmc3BlYyA9ICZzX3RhZ19yZWZzcGVjOworCitzdHJ1Y3QgY291bnRlZF9zdHJpbmcgeworCXNpemVfdCBsZW47CisJY29uc3QgY2hhciAqczsKK307CitzdHJ1Y3QgcmV3cml0ZSB7CisJY29uc3QgY2hhciAqYmFzZTsKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgY291bnRlZF9zdHJpbmcgKmluc3RlYWRfb2Y7CisJaW50IGluc3RlYWRfb2ZfbnI7CisJaW50IGluc3RlYWRfb2ZfYWxsb2M7Cit9Oworc3RydWN0IHJld3JpdGVzIHsKKwlzdHJ1Y3QgcmV3cml0ZSAqKnJld3JpdGU7CisJaW50IHJld3JpdGVfYWxsb2M7CisJaW50IHJld3JpdGVfbnI7Cit9OworCitzdGF0aWMgc3RydWN0IHJlbW90ZSAqKnJlbW90ZXM7CitzdGF0aWMgaW50IHJlbW90ZXNfYWxsb2M7CitzdGF0aWMgaW50IHJlbW90ZXNfbnI7CisKK3N0YXRpYyBzdHJ1Y3QgYnJhbmNoICoqYnJhbmNoZXM7CitzdGF0aWMgaW50IGJyYW5jaGVzX2FsbG9jOworc3RhdGljIGludCBicmFuY2hlc19ucjsKKworc3RhdGljIHN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoOworc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfcmVtb3RlX25hbWU7CitzdGF0aWMgaW50IGV4cGxpY2l0X2RlZmF1bHRfcmVtb3RlX25hbWU7CisKK3N0YXRpYyBzdHJ1Y3QgcmV3cml0ZXMgcmV3cml0ZXM7CitzdGF0aWMgc3RydWN0IHJld3JpdGVzIHJld3JpdGVzX3B1c2g7CisKKyNkZWZpbmUgQlVGX1NJWkUgKDIwNDgpCitzdGF0aWMgY2hhciBidWZmZXJbQlVGX1NJWkVdOworCitzdGF0aWMgaW50IHZhbGlkX3JlbW90ZShjb25zdCBzdHJ1Y3QgcmVtb3RlICpyZW1vdGUpCit7CisJcmV0dXJuICghIXJlbW90ZS0+dXJsKSB8fCAoISFyZW1vdGUtPmZvcmVpZ25fdmNzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmFsaWFzX3VybChjb25zdCBjaGFyICp1cmwsIHN0cnVjdCByZXdyaXRlcyAqcikKK3sKKwlpbnQgaSwgajsKKwljaGFyICpyZXQ7CisJc3RydWN0IGNvdW50ZWRfc3RyaW5nICpsb25nZXN0OworCWludCBsb25nZXN0X2k7CisKKwlsb25nZXN0ID0gTlVMTDsKKwlsb25nZXN0X2kgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgci0+cmV3cml0ZV9ucjsgaSsrKSB7CisJCWlmICghci0+cmV3cml0ZVtpXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgci0+cmV3cml0ZVtpXS0+aW5zdGVhZF9vZl9ucjsgaisrKSB7CisJCQlpZiAoIXByZWZpeGNtcCh1cmwsIHItPnJld3JpdGVbaV0tPmluc3RlYWRfb2Zbal0ucykgJiYKKwkJCSAgICAoIWxvbmdlc3QgfHwKKwkJCSAgICAgbG9uZ2VzdC0+bGVuIDwgci0+cmV3cml0ZVtpXS0+aW5zdGVhZF9vZltqXS5sZW4pKSB7CisJCQkJbG9uZ2VzdCA9ICYoci0+cmV3cml0ZVtpXS0+aW5zdGVhZF9vZltqXSk7CisJCQkJbG9uZ2VzdF9pID0gaTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIWxvbmdlc3QpCisJCXJldHVybiB1cmw7CisKKwlyZXQgPSB4bWFsbG9jKHItPnJld3JpdGVbbG9uZ2VzdF9pXS0+YmFzZWxlbiArCisJCSAgICAgKHN0cmxlbih1cmwpIC0gbG9uZ2VzdC0+bGVuKSArIDEpOworCXN0cmNweShyZXQsIHItPnJld3JpdGVbbG9uZ2VzdF9pXS0+YmFzZSk7CisJc3RyY3B5KHJldCArIHItPnJld3JpdGVbbG9uZ2VzdF9pXS0+YmFzZWxlbiwgdXJsICsgbG9uZ2VzdC0+bGVuKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhZGRfcHVzaF9yZWZzcGVjKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqcmVmKQoreworCUFMTE9DX0dST1cocmVtb3RlLT5wdXNoX3JlZnNwZWMsCisJCSAgIHJlbW90ZS0+cHVzaF9yZWZzcGVjX25yICsgMSwKKwkJICAgcmVtb3RlLT5wdXNoX3JlZnNwZWNfYWxsb2MpOworCXJlbW90ZS0+cHVzaF9yZWZzcGVjW3JlbW90ZS0+cHVzaF9yZWZzcGVjX25yKytdID0gcmVmOworfQorCitzdGF0aWMgdm9pZCBhZGRfZmV0Y2hfcmVmc3BlYyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnJlZikKK3sKKwlBTExPQ19HUk9XKHJlbW90ZS0+ZmV0Y2hfcmVmc3BlYywKKwkJICAgcmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yICsgMSwKKwkJICAgcmVtb3RlLT5mZXRjaF9yZWZzcGVjX2FsbG9jKTsKKwlyZW1vdGUtPmZldGNoX3JlZnNwZWNbcmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yKytdID0gcmVmOworfQorCitzdGF0aWMgdm9pZCBhZGRfdXJsKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsKQoreworCUFMTE9DX0dST1cocmVtb3RlLT51cmwsIHJlbW90ZS0+dXJsX25yICsgMSwgcmVtb3RlLT51cmxfYWxsb2MpOworCXJlbW90ZS0+dXJsW3JlbW90ZS0+dXJsX25yKytdID0gdXJsOworfQorCitzdGF0aWMgdm9pZCBhZGRfcHVzaHVybChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnB1c2h1cmwpCit7CisJQUxMT0NfR1JPVyhyZW1vdGUtPnB1c2h1cmwsIHJlbW90ZS0+cHVzaHVybF9uciArIDEsIHJlbW90ZS0+cHVzaHVybF9hbGxvYyk7CisJcmVtb3RlLT5wdXNodXJsW3JlbW90ZS0+cHVzaHVybF9ucisrXSA9IHB1c2h1cmw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wdXNodXJsX2FsaWFzKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsKQoreworCWNvbnN0IGNoYXIgKnB1c2h1cmwgPSBhbGlhc191cmwodXJsLCAmcmV3cml0ZXNfcHVzaCk7CisJaWYgKHB1c2h1cmwgIT0gdXJsKQorCQlhZGRfcHVzaHVybChyZW1vdGUsIHB1c2h1cmwpOworfQorCitzdGF0aWMgdm9pZCBhZGRfdXJsX2FsaWFzKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsKQoreworCWFkZF91cmwocmVtb3RlLCBhbGlhc191cmwodXJsLCAmcmV3cml0ZXMpKTsKKwlhZGRfcHVzaHVybF9hbGlhcyhyZW1vdGUsIHVybCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVtb3RlICptYWtlX3JlbW90ZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCXN0cnVjdCByZW1vdGUgKnJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByZW1vdGVzX25yOyBpKyspIHsKKwkJaWYgKGxlbiA/ICghc3RybmNtcChuYW1lLCByZW1vdGVzW2ldLT5uYW1lLCBsZW4pICYmCisJCQkgICAhcmVtb3Rlc1tpXS0+bmFtZVtsZW5dKSA6CisJCSAgICAhc3RyY21wKG5hbWUsIHJlbW90ZXNbaV0tPm5hbWUpKQorCQkJcmV0dXJuIHJlbW90ZXNbaV07CisJfQorCisJcmV0ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlbW90ZSkpOworCUFMTE9DX0dST1cocmVtb3RlcywgcmVtb3Rlc19uciArIDEsIHJlbW90ZXNfYWxsb2MpOworCXJlbW90ZXNbcmVtb3Rlc19ucisrXSA9IHJldDsKKwlpZiAobGVuKQorCQlyZXQtPm5hbWUgPSB4c3RybmR1cChuYW1lLCBsZW4pOworCWVsc2UKKwkJcmV0LT5uYW1lID0geHN0cmR1cChuYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhZGRfbWVyZ2Uoc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBjb25zdCBjaGFyICpuYW1lKQoreworCUFMTE9DX0dST1coYnJhbmNoLT5tZXJnZV9uYW1lLCBicmFuY2gtPm1lcmdlX25yICsgMSwKKwkJICAgYnJhbmNoLT5tZXJnZV9hbGxvYyk7CisJYnJhbmNoLT5tZXJnZV9uYW1lW2JyYW5jaC0+bWVyZ2VfbnIrK10gPSBuYW1lOworfQorCitzdGF0aWMgc3RydWN0IGJyYW5jaCAqbWFrZV9icmFuY2goY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgYnJhbmNoICpyZXQ7CisJaW50IGk7CisJY2hhciAqcmVmbmFtZTsKKworCWZvciAoaSA9IDA7IGkgPCBicmFuY2hlc19ucjsgaSsrKSB7CisJCWlmIChsZW4gPyAoIXN0cm5jbXAobmFtZSwgYnJhbmNoZXNbaV0tPm5hbWUsIGxlbikgJiYKKwkJCSAgICFicmFuY2hlc1tpXS0+bmFtZVtsZW5dKSA6CisJCSAgICAhc3RyY21wKG5hbWUsIGJyYW5jaGVzW2ldLT5uYW1lKSkKKwkJCXJldHVybiBicmFuY2hlc1tpXTsKKwl9CisKKwlBTExPQ19HUk9XKGJyYW5jaGVzLCBicmFuY2hlc19uciArIDEsIGJyYW5jaGVzX2FsbG9jKTsKKwlyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgYnJhbmNoKSk7CisJYnJhbmNoZXNbYnJhbmNoZXNfbnIrK10gPSByZXQ7CisJaWYgKGxlbikKKwkJcmV0LT5uYW1lID0geHN0cm5kdXAobmFtZSwgbGVuKTsKKwllbHNlCisJCXJldC0+bmFtZSA9IHhzdHJkdXAobmFtZSk7CisJcmVmbmFtZSA9IHhtYWxsb2Moc3RybGVuKG5hbWUpICsgc3RybGVuKCJyZWZzL2hlYWRzLyIpICsgMSk7CisJc3RyY3B5KHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpOworCXN0cmNweShyZWZuYW1lICsgc3RybGVuKCJyZWZzL2hlYWRzLyIpLCByZXQtPm5hbWUpOworCXJldC0+cmVmbmFtZSA9IHJlZm5hbWU7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJld3JpdGUgKm1ha2VfcmV3cml0ZShzdHJ1Y3QgcmV3cml0ZXMgKnIsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBsZW4pCit7CisJc3RydWN0IHJld3JpdGUgKnJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByLT5yZXdyaXRlX25yOyBpKyspIHsKKwkJaWYgKGxlbgorCQkgICAgPyAobGVuID09IHItPnJld3JpdGVbaV0tPmJhc2VsZW4gJiYKKwkJICAgICAgICFzdHJuY21wKGJhc2UsIHItPnJld3JpdGVbaV0tPmJhc2UsIGxlbikpCisJCSAgICA6ICFzdHJjbXAoYmFzZSwgci0+cmV3cml0ZVtpXS0+YmFzZSkpCisJCQlyZXR1cm4gci0+cmV3cml0ZVtpXTsKKwl9CisKKwlBTExPQ19HUk9XKHItPnJld3JpdGUsIHItPnJld3JpdGVfbnIgKyAxLCByLT5yZXdyaXRlX2FsbG9jKTsKKwlyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmV3cml0ZSkpOworCXItPnJld3JpdGVbci0+cmV3cml0ZV9ucisrXSA9IHJldDsKKwlpZiAobGVuKSB7CisJCXJldC0+YmFzZSA9IHhzdHJuZHVwKGJhc2UsIGxlbik7CisJCXJldC0+YmFzZWxlbiA9IGxlbjsKKwl9CisJZWxzZSB7CisJCXJldC0+YmFzZSA9IHhzdHJkdXAoYmFzZSk7CisJCXJldC0+YmFzZWxlbiA9IHN0cmxlbihiYXNlKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWRkX2luc3RlYWRfb2Yoc3RydWN0IHJld3JpdGUgKnJld3JpdGUsIGNvbnN0IGNoYXIgKmluc3RlYWRfb2YpCit7CisJQUxMT0NfR1JPVyhyZXdyaXRlLT5pbnN0ZWFkX29mLCByZXdyaXRlLT5pbnN0ZWFkX29mX25yICsgMSwgcmV3cml0ZS0+aW5zdGVhZF9vZl9hbGxvYyk7CisJcmV3cml0ZS0+aW5zdGVhZF9vZltyZXdyaXRlLT5pbnN0ZWFkX29mX25yXS5zID0gaW5zdGVhZF9vZjsKKwlyZXdyaXRlLT5pbnN0ZWFkX29mW3Jld3JpdGUtPmluc3RlYWRfb2ZfbnJdLmxlbiA9IHN0cmxlbihpbnN0ZWFkX29mKTsKKwlyZXdyaXRlLT5pbnN0ZWFkX29mX25yKys7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcmVtb3Rlc19maWxlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlGSUxFICpmID0gZm9wZW4oZ2l0X3BhdGgoInJlbW90ZXMvJXMiLCByZW1vdGUtPm5hbWUpLCAiciIpOworCisJaWYgKCFmKQorCQlyZXR1cm47CisJcmVtb3RlLT5vcmlnaW4gPSBSRU1PVEVfUkVNT1RFUzsKKwl3aGlsZSAoZmdldHMoYnVmZmVyLCBCVUZfU0laRSwgZikpIHsKKwkJaW50IHZhbHVlX2xpc3Q7CisJCWNoYXIgKnMsICpwOworCisJCWlmICghcHJlZml4Y21wKGJ1ZmZlciwgIlVSTDoiKSkgeworCQkJdmFsdWVfbGlzdCA9IDA7CisJCQlzID0gYnVmZmVyICsgNDsKKwkJfSBlbHNlIGlmICghcHJlZml4Y21wKGJ1ZmZlciwgIlB1c2g6IikpIHsKKwkJCXZhbHVlX2xpc3QgPSAxOworCQkJcyA9IGJ1ZmZlciArIDU7CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChidWZmZXIsICJQdWxsOiIpKSB7CisJCQl2YWx1ZV9saXN0ID0gMjsKKwkJCXMgPSBidWZmZXIgKyA1OworCQl9IGVsc2UKKwkJCWNvbnRpbnVlOworCisJCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJCXMrKzsKKwkJaWYgKCEqcykKKwkJCWNvbnRpbnVlOworCisJCXAgPSBzICsgc3RybGVuKHMpOworCQl3aGlsZSAoaXNzcGFjZShwWy0xXSkpCisJCQkqLS1wID0gMDsKKworCQlzd2l0Y2ggKHZhbHVlX2xpc3QpIHsKKwkJY2FzZSAwOgorCQkJYWRkX3VybF9hbGlhcyhyZW1vdGUsIHhzdHJkdXAocykpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWFkZF9wdXNoX3JlZnNwZWMocmVtb3RlLCB4c3RyZHVwKHMpKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlhZGRfZmV0Y2hfcmVmc3BlYyhyZW1vdGUsIHhzdHJkdXAocykpOworCQkJYnJlYWs7CisJCX0KKwl9CisJZmNsb3NlKGYpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2JyYW5jaGVzX2ZpbGUoc3RydWN0IHJlbW90ZSAqcmVtb3RlKQoreworCWNvbnN0IGNoYXIgKnNsYXNoID0gc3RyY2hyKHJlbW90ZS0+bmFtZSwgJy8nKTsKKwljaGFyICpmcmFnOworCXN0cnVjdCBzdHJidWYgYnJhbmNoID0gU1RSQlVGX0lOSVQ7CisJaW50IG4gPSBzbGFzaCA/IHNsYXNoIC0gcmVtb3RlLT5uYW1lIDogMTAwMDsKKwlGSUxFICpmID0gZm9wZW4oZ2l0X3BhdGgoImJyYW5jaGVzLyUuKnMiLCBuLCByZW1vdGUtPm5hbWUpLCAiciIpOworCWNoYXIgKnMsICpwOworCWludCBsZW47CisKKwlpZiAoIWYpCisJCXJldHVybjsKKwlzID0gZmdldHMoYnVmZmVyLCBCVUZfU0laRSwgZik7CisJZmNsb3NlKGYpOworCWlmICghcykKKwkJcmV0dXJuOworCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJcysrOworCWlmICghKnMpCisJCXJldHVybjsKKwlyZW1vdGUtPm9yaWdpbiA9IFJFTU9URV9CUkFOQ0hFUzsKKwlwID0gcyArIHN0cmxlbihzKTsKKwl3aGlsZSAoaXNzcGFjZShwWy0xXSkpCisJCSotLXAgPSAwOworCWxlbiA9IHAgLSBzOworCWlmIChzbGFzaCkKKwkJbGVuICs9IHN0cmxlbihzbGFzaCk7CisJcCA9IHhtYWxsb2MobGVuICsgMSk7CisJc3RyY3B5KHAsIHMpOworCWlmIChzbGFzaCkKKwkJc3RyY2F0KHAsIHNsYXNoKTsKKworCS8qCisJICogV2l0aCAic2xhc2giLCBlLmcuICJnaXQgZmV0Y2ggamdhcnppay9uZXRkZXYtMi42IiB3aGVuCisJICogcmVhZGluZyBmcm9tICRHSVRfRElSL2JyYW5jaGVzL2pnYXJ6aWsgZmV0Y2hlcyAiSEVBRCIgZnJvbQorCSAqIHRoZSBwYXJ0aWFsIFVSTCBvYnRhaW5lZCBmcm9tIHRoZSBicmFuY2hlcyBmaWxlIHBsdXMKKwkgKiAiL25ldGRldi0yLjYiIGFuZCBkb2VzIG5vdCBzdG9yZSBpdCBpbiBhbnkgdHJhY2tpbmcgcmVmLgorCSAqICNicmFuY2ggc3BlY2lmaWVyIGluIHRoZSBmaWxlIGlzIGlnbm9yZWQuCisJICoKKwkgKiBPdGhlcndpc2UsIHRoZSBicmFuY2hlcyBmaWxlIHdvdWxkIGhhdmUgVVJMIGFuZCBvcHRpb25hbGx5CisJICogI2JyYW5jaCBzcGVjaWZpZWQuICBUaGUgIm1hc3RlciIgKG9yIHNwZWNpZmllZCkgYnJhbmNoIGlzCisJICogZmV0Y2hlZCBhbmQgc3RvcmVkIGluIHRoZSBsb2NhbCBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZS4KKwkgKi8KKwlmcmFnID0gc3RyY2hyKHAsICcjJyk7CisJaWYgKGZyYWcpIHsKKwkJKihmcmFnKyspID0gJ1wwJzsKKwkJc3RyYnVmX2FkZGYoJmJyYW5jaCwgInJlZnMvaGVhZHMvJXMiLCBmcmFnKTsKKwl9IGVsc2UKKwkJc3RyYnVmX2FkZHN0cigmYnJhbmNoLCAicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKwlpZiAoIXNsYXNoKSB7CisJCXN0cmJ1Zl9hZGRmKCZicmFuY2gsICI6cmVmcy9oZWFkcy8lcyIsIHJlbW90ZS0+bmFtZSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX3Jlc2V0KCZicmFuY2gpOworCQlzdHJidWZfYWRkc3RyKCZicmFuY2gsICJIRUFEOiIpOworCX0KKwlhZGRfdXJsX2FsaWFzKHJlbW90ZSwgcCk7CisJYWRkX2ZldGNoX3JlZnNwZWMocmVtb3RlLCBzdHJidWZfZGV0YWNoKCZicmFuY2gsIE5VTEwpKTsKKwkvKgorCSAqIENvZ2l0byBjb21wYXRpYmxlIHB1c2g6IHB1c2ggY3VycmVudCBIRUFEIHRvIHJlbW90ZSAjYnJhbmNoCisJICogKG1hc3RlciBpZiBtaXNzaW5nKQorCSAqLworCXN0cmJ1Zl9pbml0KCZicmFuY2gsIDApOworCXN0cmJ1Zl9hZGRzdHIoJmJyYW5jaCwgIkhFQUQiKTsKKwlpZiAoZnJhZykKKwkJc3RyYnVmX2FkZGYoJmJyYW5jaCwgIjpyZWZzL2hlYWRzLyVzIiwgZnJhZyk7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKCZicmFuY2gsICI6cmVmcy9oZWFkcy9tYXN0ZXIiKTsKKwlhZGRfcHVzaF9yZWZzcGVjKHJlbW90ZSwgc3RyYnVmX2RldGFjaCgmYnJhbmNoLCBOVUxMKSk7CisJcmVtb3RlLT5mZXRjaF90YWdzID0gMTsgLyogYWx3YXlzIGF1dG8tZm9sbG93ICovCit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnN1YmtleTsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCWlmICghcHJlZml4Y21wKGtleSwgImJyYW5jaC4iKSkgeworCQluYW1lID0ga2V5ICsgNzsKKwkJc3Via2V5ID0gc3RycmNocihuYW1lLCAnLicpOworCQlpZiAoIXN1YmtleSkKKwkJCXJldHVybiAwOworCQlicmFuY2ggPSBtYWtlX2JyYW5jaChuYW1lLCBzdWJrZXkgLSBuYW1lKTsKKwkJaWYgKCFzdHJjbXAoc3Via2V5LCAiLnJlbW90ZSIpKSB7CisJCQlpZiAoIXZhbHVlKQorCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCQkJYnJhbmNoLT5yZW1vdGVfbmFtZSA9IHhzdHJkdXAodmFsdWUpOworCQkJaWYgKGJyYW5jaCA9PSBjdXJyZW50X2JyYW5jaCkgeworCQkJCWRlZmF1bHRfcmVtb3RlX25hbWUgPSBicmFuY2gtPnJlbW90ZV9uYW1lOworCQkJCWV4cGxpY2l0X2RlZmF1bHRfcmVtb3RlX25hbWUgPSAxOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLm1lcmdlIikpIHsKKwkJCWlmICghdmFsdWUpCisJCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGtleSk7CisJCQlhZGRfbWVyZ2UoYnJhbmNoLCB4c3RyZHVwKHZhbHVlKSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmICghcHJlZml4Y21wKGtleSwgInVybC4iKSkgeworCQlzdHJ1Y3QgcmV3cml0ZSAqcmV3cml0ZTsKKwkJbmFtZSA9IGtleSArIDQ7CisJCXN1YmtleSA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKwkJaWYgKCFzdWJrZXkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFzdHJjbXAoc3Via2V5LCAiLmluc3RlYWRvZiIpKSB7CisJCQlyZXdyaXRlID0gbWFrZV9yZXdyaXRlKCZyZXdyaXRlcywgbmFtZSwgc3Via2V5IC0gbmFtZSk7CisJCQlpZiAoIXZhbHVlKQorCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCQkJYWRkX2luc3RlYWRfb2YocmV3cml0ZSwgeHN0cmR1cCh2YWx1ZSkpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnB1c2hpbnN0ZWFkb2YiKSkgeworCQkJcmV3cml0ZSA9IG1ha2VfcmV3cml0ZSgmcmV3cml0ZXNfcHVzaCwgbmFtZSwgc3Via2V5IC0gbmFtZSk7CisJCQlpZiAoIXZhbHVlKQorCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCQkJYWRkX2luc3RlYWRfb2YocmV3cml0ZSwgeHN0cmR1cCh2YWx1ZSkpOworCQl9CisJfQorCWlmIChwcmVmaXhjbXAoa2V5LCAgInJlbW90ZS4iKSkKKwkJcmV0dXJuIDA7CisJbmFtZSA9IGtleSArIDc7CisJaWYgKCpuYW1lID09ICcvJykgeworCQl3YXJuaW5nKCJDb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIiwKKwkJCW5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisJc3Via2V5ID0gc3RycmNocihuYW1lLCAnLicpOworCWlmICghc3Via2V5KQorCQlyZXR1cm4gMDsKKwlyZW1vdGUgPSBtYWtlX3JlbW90ZShuYW1lLCBzdWJrZXkgLSBuYW1lKTsKKwlyZW1vdGUtPm9yaWdpbiA9IFJFTU9URV9DT05GSUc7CisJaWYgKCFzdHJjbXAoc3Via2V5LCAiLm1pcnJvciIpKQorCQlyZW1vdGUtPm1pcnJvciA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5za2lwZGVmYXVsdHVwZGF0ZSIpKQorCQlyZW1vdGUtPnNraXBfZGVmYXVsdF91cGRhdGUgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIuc2tpcGZldGNoYWxsIikpCisJCXJlbW90ZS0+c2tpcF9kZWZhdWx0X3VwZGF0ZSA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi51cmwiKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlhZGRfdXJsKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5wdXNodXJsIikpIHsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZ2LCBrZXksIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKKwkJYWRkX3B1c2h1cmwocmVtb3RlLCB2KTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnB1c2giKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlhZGRfcHVzaF9yZWZzcGVjKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5mZXRjaCIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWFkZF9mZXRjaF9yZWZzcGVjKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5yZWNlaXZlcGFjayIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWlmICghcmVtb3RlLT5yZWNlaXZlcGFjaykKKwkJCXJlbW90ZS0+cmVjZWl2ZXBhY2sgPSB2OworCQllbHNlCisJCQllcnJvcigibW9yZSB0aGFuIG9uZSByZWNlaXZlcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0Iik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi51cGxvYWRwYWNrIikpIHsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZ2LCBrZXksIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKCFyZW1vdGUtPnVwbG9hZHBhY2spCisJCQlyZW1vdGUtPnVwbG9hZHBhY2sgPSB2OworCQllbHNlCisJCQllcnJvcigibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnRhZ29wdCIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAiLS1uby10YWdzIikpCisJCQlyZW1vdGUtPmZldGNoX3RhZ3MgPSAtMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIi0tdGFncyIpKQorCQkJcmVtb3RlLT5mZXRjaF90YWdzID0gMjsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnByb3h5IikpIHsKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKChjb25zdCBjaGFyICoqKSZyZW1vdGUtPmh0dHBfcHJveHksCisJCQkJCSBrZXksIHZhbHVlKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnZjcyIpKSB7CisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmcmVtb3RlLT5mb3JlaWduX3Zjcywga2V5LCB2YWx1ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbGlhc19hbGxfdXJscyh2b2lkKQoreworCWludCBpLCBqOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGVzX25yOyBpKyspIHsKKwkJaW50IGFkZF9wdXNodXJsX2FsaWFzZXM7CisJCWlmICghcmVtb3Rlc1tpXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgcmVtb3Rlc1tpXS0+cHVzaHVybF9ucjsgaisrKSB7CisJCQlyZW1vdGVzW2ldLT5wdXNodXJsW2pdID0gYWxpYXNfdXJsKHJlbW90ZXNbaV0tPnB1c2h1cmxbal0sICZyZXdyaXRlcyk7CisJCX0KKwkJYWRkX3B1c2h1cmxfYWxpYXNlcyA9IHJlbW90ZXNbaV0tPnB1c2h1cmxfbnIgPT0gMDsKKwkJZm9yIChqID0gMDsgaiA8IHJlbW90ZXNbaV0tPnVybF9ucjsgaisrKSB7CisJCQlpZiAoYWRkX3B1c2h1cmxfYWxpYXNlcykKKwkJCQlhZGRfcHVzaHVybF9hbGlhcyhyZW1vdGVzW2ldLCByZW1vdGVzW2ldLT51cmxbal0pOworCQkJcmVtb3Rlc1tpXS0+dXJsW2pdID0gYWxpYXNfdXJsKHJlbW90ZXNbaV0tPnVybFtqXSwgJnJld3JpdGVzKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcmVhZF9jb25maWcodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNvbnN0IGNoYXIgKmhlYWRfcmVmOworCWludCBmbGFnOworCWlmIChkZWZhdWx0X3JlbW90ZV9uYW1lKSAvKiBkaWQgdGhpcyBhbHJlYWR5ICovCisJCXJldHVybjsKKwlkZWZhdWx0X3JlbW90ZV9uYW1lID0geHN0cmR1cCgib3JpZ2luIik7CisJY3VycmVudF9icmFuY2ggPSBOVUxMOworCWhlYWRfcmVmID0gcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgc2hhMSwgMCwgJmZsYWcpOworCWlmIChoZWFkX3JlZiAmJiAoZmxhZyAmIFJFRl9JU1NZTVJFRikgJiYKKwkgICAgIXByZWZpeGNtcChoZWFkX3JlZiwgInJlZnMvaGVhZHMvIikpIHsKKwkJY3VycmVudF9icmFuY2ggPQorCQkJbWFrZV9icmFuY2goaGVhZF9yZWYgKyBzdHJsZW4oInJlZnMvaGVhZHMvIiksIDApOworCX0KKwlnaXRfY29uZmlnKGhhbmRsZV9jb25maWcsIE5VTEwpOworCWFsaWFzX2FsbF91cmxzKCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIGEgcmVmc3BlYyBhcnJheS4KKyAqIFdhcm5pbmc6IGNvZGUgcGF0aHMgc2hvdWxkIGJlIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHNyYworICogICAgICAgICAgYW5kIGRzdCBwb2ludGVycyBhcmUgYWx3YXlzIGZyZWVhYmxlIHBvaW50ZXJzIGFzIHdlbGwKKyAqICAgICAgICAgIGFzIHRoZSByZWZzcGVjIHBvaW50ZXIgaXRzZWxmLgorICovCitzdGF0aWMgdm9pZCBmcmVlX3JlZnNwZWNzKHN0cnVjdCByZWZzcGVjICpyZWZzcGVjLCBpbnQgbnJfcmVmc3BlYykKK3sKKwlpbnQgaTsKKworCWlmICghcmVmc3BlYykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IG5yX3JlZnNwZWM7IGkrKykgeworCQlmcmVlKHJlZnNwZWNbaV0uc3JjKTsKKwkJZnJlZShyZWZzcGVjW2ldLmRzdCk7CisJfQorCWZyZWUocmVmc3BlYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmc3BlYyAqcGFyc2VfcmVmc3BlY19pbnRlcm5hbChpbnQgbnJfcmVmc3BlYywgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmZXRjaCwgaW50IHZlcmlmeSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVmc3BlYyAqcnMgPSB4Y2FsbG9jKHNpemVvZigqcnMpLCBucl9yZWZzcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9yZWZzcGVjOyBpKyspIHsKKwkJc2l6ZV90IGxsZW47CisJCWludCBpc19nbG9iOworCQljb25zdCBjaGFyICpsaHMsICpyaHM7CisJCWludCBmbGFnczsKKworCQlpc19nbG9iID0gMDsKKworCQlsaHMgPSByZWZzcGVjW2ldOworCQlpZiAoKmxocyA9PSAnKycpIHsKKwkJCXJzW2ldLmZvcmNlID0gMTsKKwkJCWxocysrOworCQl9CisKKwkJcmhzID0gc3RycmNocihsaHMsICc6Jyk7CisKKwkJLyoKKwkJICogQmVmb3JlIGdvaW5nIG9uLCBzcGVjaWFsIGNhc2UgIjoiIChvciAiKzoiKSBhcyBhIHJlZnNwZWMKKwkJICogZm9yIG1hdGNoaW5nIHJlZnMuCisJCSAqLworCQlpZiAoIWZldGNoICYmIHJocyA9PSBsaHMgJiYgcmhzWzFdID09ICdcMCcpIHsKKwkJCXJzW2ldLm1hdGNoaW5nID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJocykgeworCQkJc2l6ZV90IHJsZW4gPSBzdHJsZW4oKytyaHMpOworCQkJaXNfZ2xvYiA9ICgxIDw9IHJsZW4gJiYgc3RyY2hyKHJocywgJyonKSk7CisJCQlyc1tpXS5kc3QgPSB4c3RybmR1cChyaHMsIHJsZW4pOworCQl9CisKKwkJbGxlbiA9IChyaHMgPyAocmhzIC0gbGhzIC0gMSkgOiBzdHJsZW4obGhzKSk7CisJCWlmICgxIDw9IGxsZW4gJiYgbWVtY2hyKGxocywgJyonLCBsbGVuKSkgeworCQkJaWYgKChyaHMgJiYgIWlzX2dsb2IpIHx8ICghcmhzICYmIGZldGNoKSkKKwkJCQlnb3RvIGludmFsaWQ7CisJCQlpc19nbG9iID0gMTsKKwkJfSBlbHNlIGlmIChyaHMgJiYgaXNfZ2xvYikgeworCQkJZ290byBpbnZhbGlkOworCQl9CisKKwkJcnNbaV0ucGF0dGVybiA9IGlzX2dsb2I7CisJCXJzW2ldLnNyYyA9IHhzdHJuZHVwKGxocywgbGxlbik7CisJCWZsYWdzID0gUkVGTkFNRV9BTExPV19PTkVMRVZFTCB8IChpc19nbG9iID8gUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gOiAwKTsKKworCQlpZiAoZmV0Y2gpIHsKKwkJCS8qCisJCQkgKiBMSFMKKwkJCSAqIC0gZW1wdHkgaXMgYWxsb3dlZDsgaXQgbWVhbnMgSEVBRC4KKwkJCSAqIC0gb3RoZXJ3aXNlIGl0IG11c3QgYmUgYSB2YWxpZCBsb29raW5nIHJlZi4KKwkJCSAqLworCQkJaWYgKCEqcnNbaV0uc3JjKQorCQkJCTsgLyogZW1wdHkgaXMgb2sgKi8KKwkJCWVsc2UgaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJzW2ldLnNyYywgZmxhZ3MpKQorCQkJCWdvdG8gaW52YWxpZDsKKwkJCS8qCisJCQkgKiBSSFMKKwkJCSAqIC0gbWlzc2luZyBpcyBvaywgYW5kIGlzIHNhbWUgYXMgZW1wdHkuCisJCQkgKiAtIGVtcHR5IGlzIG9rOyBpdCBtZWFucyBub3QgdG8gc3RvcmUuCisJCQkgKiAtIG90aGVyd2lzZSBpdCBtdXN0IGJlIGEgdmFsaWQgbG9va2luZyByZWYuCisJCQkgKi8KKwkJCWlmICghcnNbaV0uZHN0KQorCQkJCTsgLyogb2sgKi8KKwkJCWVsc2UgaWYgKCEqcnNbaV0uZHN0KQorCQkJCTsgLyogb2sgKi8KKwkJCWVsc2UgaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJzW2ldLmRzdCwgZmxhZ3MpKQorCQkJCWdvdG8gaW52YWxpZDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBMSFMKKwkJCSAqIC0gZW1wdHkgaXMgYWxsb3dlZDsgaXQgbWVhbnMgZGVsZXRlLgorCQkJICogLSB3aGVuIHdpbGRjYXJkZWQsIGl0IG11c3QgYmUgYSB2YWxpZCBsb29raW5nIHJlZi4KKwkJCSAqIC0gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGFuIGV4dGVuZGVkIFNIQS0xLCBidXQKKwkJCSAqICAgdGhlcmUgaXMgbm8gZXhpc3Rpbmcgd2F5IHRvIHZhbGlkYXRlIHRoaXMuCisJCQkgKi8KKwkJCWlmICghKnJzW2ldLnNyYykKKwkJCQk7IC8qIGVtcHR5IGlzIG9rICovCisJCQllbHNlIGlmIChpc19nbG9iKSB7CisJCQkJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJzW2ldLnNyYywgZmxhZ3MpKQorCQkJCQlnb3RvIGludmFsaWQ7CisJCQl9CisJCQllbHNlCisJCQkJOyAvKiBhbnl0aGluZyBnb2VzLCBmb3Igbm93ICovCisJCQkvKgorCQkJICogUkhTCisJCQkgKiAtIG1pc3NpbmcgaXMgYWxsb3dlZCwgYnV0IExIUyB0aGVuIG11c3QgYmUgYQorCQkJICogICB2YWxpZCBsb29raW5nIHJlZi4KKwkJCSAqIC0gZW1wdHkgaXMgbm90IGFsbG93ZWQuCisJCQkgKiAtIG90aGVyd2lzZSBpdCBtdXN0IGJlIGEgdmFsaWQgbG9va2luZyByZWYuCisJCQkgKi8KKwkJCWlmICghcnNbaV0uZHN0KSB7CisJCQkJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJzW2ldLnNyYywgZmxhZ3MpKQorCQkJCQlnb3RvIGludmFsaWQ7CisJCQl9IGVsc2UgaWYgKCEqcnNbaV0uZHN0KSB7CisJCQkJZ290byBpbnZhbGlkOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocnNbaV0uZHN0LCBmbGFncykpCisJCQkJCWdvdG8gaW52YWxpZDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcnM7CisKKyBpbnZhbGlkOgorCWlmICh2ZXJpZnkpIHsKKwkJLyoKKwkJICogbnJfcmVmc3BlYyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBpIG11c3QgYmUgdmFsaWQKKwkJICogc2luY2UgaXQgaXMgb25seSBwb3NzaWJsZSB0byByZWFjaCB0aGlzIHBvaW50IGZyb20gd2l0aGluCisJCSAqIHRoZSBmb3IgbG9vcCBhYm92ZS4KKwkJICovCisJCWZyZWVfcmVmc3BlY3MocnMsIGkrMSk7CisJCXJldHVybiBOVUxMOworCX0KKwlkaWUoIkludmFsaWQgcmVmc3BlYyAnJXMnIiwgcmVmc3BlY1tpXSk7Cit9CisKK2ludCB2YWxpZF9mZXRjaF9yZWZzcGVjKGNvbnN0IGNoYXIgKmZldGNoX3JlZnNwZWNfc3RyKQoreworCXN0cnVjdCByZWZzcGVjICpyZWZzcGVjOworCisJcmVmc3BlYyA9IHBhcnNlX3JlZnNwZWNfaW50ZXJuYWwoMSwgJmZldGNoX3JlZnNwZWNfc3RyLCAxLCAxKTsKKwlmcmVlX3JlZnNwZWNzKHJlZnNwZWMsIDEpOworCXJldHVybiAhIXJlZnNwZWM7Cit9CisKK3N0cnVjdCByZWZzcGVjICpwYXJzZV9mZXRjaF9yZWZzcGVjKGludCBucl9yZWZzcGVjLCBjb25zdCBjaGFyICoqcmVmc3BlYykKK3sKKwlyZXR1cm4gcGFyc2VfcmVmc3BlY19pbnRlcm5hbChucl9yZWZzcGVjLCByZWZzcGVjLCAxLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCByZWZzcGVjICpwYXJzZV9wdXNoX3JlZnNwZWMoaW50IG5yX3JlZnNwZWMsIGNvbnN0IGNoYXIgKipyZWZzcGVjKQoreworCXJldHVybiBwYXJzZV9yZWZzcGVjX2ludGVybmFsKG5yX3JlZnNwZWMsIHJlZnNwZWMsIDAsIDApOworfQorCit2b2lkIGZyZWVfcmVmc3BlYyhpbnQgbnJfcmVmc3BlYywgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5yX3JlZnNwZWM7IGkrKykgeworCQlmcmVlKHJlZnNwZWNbaV0uc3JjKTsKKwkJZnJlZShyZWZzcGVjW2ldLmRzdCk7CisJfQorCWZyZWUocmVmc3BlYyk7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRfcmVtb3RlX25pY2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIW5hbWVbMF0gfHwgaXNfZG90X29yX2RvdGRvdChuYW1lKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFzdHJjaHIobmFtZSwgJy8nKTsgLyogbm8gc2xhc2ggKi8KK30KKworc3RydWN0IHJlbW90ZSAqcmVtb3RlX2dldChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByZW1vdGUgKnJldDsKKwlpbnQgbmFtZV9naXZlbiA9IDA7CisKKwlyZWFkX2NvbmZpZygpOworCWlmIChuYW1lKQorCQluYW1lX2dpdmVuID0gMTsKKwllbHNlIHsKKwkJbmFtZSA9IGRlZmF1bHRfcmVtb3RlX25hbWU7CisJCW5hbWVfZ2l2ZW4gPSBleHBsaWNpdF9kZWZhdWx0X3JlbW90ZV9uYW1lOworCX0KKworCXJldCA9IG1ha2VfcmVtb3RlKG5hbWUsIDApOworCWlmICh2YWxpZF9yZW1vdGVfbmljayhuYW1lKSkgeworCQlpZiAoIXZhbGlkX3JlbW90ZShyZXQpKQorCQkJcmVhZF9yZW1vdGVzX2ZpbGUocmV0KTsKKwkJaWYgKCF2YWxpZF9yZW1vdGUocmV0KSkKKwkJCXJlYWRfYnJhbmNoZXNfZmlsZShyZXQpOworCX0KKwlpZiAobmFtZV9naXZlbiAmJiAhdmFsaWRfcmVtb3RlKHJldCkpCisJCWFkZF91cmxfYWxpYXMocmV0LCBuYW1lKTsKKwlpZiAoIXZhbGlkX3JlbW90ZShyZXQpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXQtPmZldGNoID0gcGFyc2VfZmV0Y2hfcmVmc3BlYyhyZXQtPmZldGNoX3JlZnNwZWNfbnIsIHJldC0+ZmV0Y2hfcmVmc3BlYyk7CisJcmV0LT5wdXNoID0gcGFyc2VfcHVzaF9yZWZzcGVjKHJldC0+cHVzaF9yZWZzcGVjX25yLCByZXQtPnB1c2hfcmVmc3BlYyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJlbW90ZV9pc19jb25maWd1cmVkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisJcmVhZF9jb25maWcoKTsKKworCWZvciAoaSA9IDA7IGkgPCByZW1vdGVzX25yOyBpKyspCisJCWlmICghc3RyY21wKG5hbWUsIHJlbW90ZXNbaV0tPm5hbWUpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBmb3JfZWFjaF9yZW1vdGUoZWFjaF9yZW1vdGVfZm4gZm4sIHZvaWQgKnByaXYpCit7CisJaW50IGksIHJlc3VsdCA9IDA7CisJcmVhZF9jb25maWcoKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3Rlc19uciAmJiAhcmVzdWx0OyBpKyspIHsKKwkJc3RydWN0IHJlbW90ZSAqciA9IHJlbW90ZXNbaV07CisJCWlmICghcikKKwkJCWNvbnRpbnVlOworCQlpZiAoIXItPmZldGNoKQorCQkJci0+ZmV0Y2ggPSBwYXJzZV9mZXRjaF9yZWZzcGVjKHItPmZldGNoX3JlZnNwZWNfbnIsCisJCQkJCQkgICAgICAgci0+ZmV0Y2hfcmVmc3BlYyk7CisJCWlmICghci0+cHVzaCkKKwkJCXItPnB1c2ggPSBwYXJzZV9wdXNoX3JlZnNwZWMoci0+cHVzaF9yZWZzcGVjX25yLAorCQkJCQkJICAgICByLT5wdXNoX3JlZnNwZWMpOworCQlyZXN1bHQgPSBmbihyLCBwcml2KTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCByZWZfcmVtb3ZlX2R1cGxpY2F0ZXMoc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSBOVUxMOworCXN0cnVjdCByZWYgKnByZXYgPSBOVUxMLCAqbmV4dCA9IE5VTEw7CisJZm9yICg7IHJlZl9tYXA7IHByZXYgPSByZWZfbWFwLCByZWZfbWFwID0gbmV4dCkgeworCQluZXh0ID0gcmVmX21hcC0+bmV4dDsKKwkJaWYgKCFyZWZfbWFwLT5wZWVyX3JlZikKKwkJCWNvbnRpbnVlOworCisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoJnJlZnMsIHJlZl9tYXAtPnBlZXJfcmVmLT5uYW1lKTsKKwkJaWYgKGl0ZW0pIHsKKwkJCWlmIChzdHJjbXAoKChzdHJ1Y3QgcmVmICopaXRlbS0+dXRpbCktPm5hbWUsCisJCQkJICAgcmVmX21hcC0+bmFtZSkpCisJCQkJZGllKCIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiLAorCQkJCSAgICByZWZfbWFwLT5wZWVyX3JlZi0+bmFtZSwKKwkJCQkgICAgKChzdHJ1Y3QgcmVmICopaXRlbS0+dXRpbCktPm5hbWUsCisJCQkJICAgIHJlZl9tYXAtPm5hbWUpOworCQkJcHJldi0+bmV4dCA9IHJlZl9tYXAtPm5leHQ7CisJCQlmcmVlKHJlZl9tYXAtPnBlZXJfcmVmKTsKKwkJCWZyZWUocmVmX21hcCk7CisJCQlyZWZfbWFwID0gcHJldjsgLyogc2tpcCB0aGlzOyB3ZSBmcmVlZCBpdCAqLworCQkJY29udGludWU7CisJCX0KKworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZyZWZzLCByZWZfbWFwLT5wZWVyX3JlZi0+bmFtZSk7CisJCWl0ZW0tPnV0aWwgPSByZWZfbWFwOworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmcmVmcywgMCk7Cit9CisKK2ludCByZW1vdGVfaGFzX3VybChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlLT51cmxfbnI7IGkrKykgeworCQlpZiAoIXN0cmNtcChyZW1vdGUtPnVybFtpXSwgdXJsKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXRjaF9uYW1lX3dpdGhfcGF0dGVybihjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgY29uc3QgY2hhciAqdmFsdWUsIGNoYXIgKipyZXN1bHQpCit7CisJY29uc3QgY2hhciAqa3N0YXIgPSBzdHJjaHIoa2V5LCAnKicpOworCXNpemVfdCBrbGVuOworCXNpemVfdCBrc3VmZml4bGVuOworCXNpemVfdCBuYW1lbGVuOworCWludCByZXQ7CisJaWYgKCFrc3RhcikKKwkJZGllKCJLZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciLCBrZXkpOworCWtsZW4gPSBrc3RhciAtIGtleTsKKwlrc3VmZml4bGVuID0gc3RybGVuKGtzdGFyICsgMSk7CisJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKwlyZXQgPSAhc3RybmNtcChuYW1lLCBrZXksIGtsZW4pICYmIG5hbWVsZW4gPj0ga2xlbiArIGtzdWZmaXhsZW4gJiYKKwkJIW1lbWNtcChuYW1lICsgbmFtZWxlbiAtIGtzdWZmaXhsZW4sIGtzdGFyICsgMSwga3N1ZmZpeGxlbik7CisJaWYgKHJldCAmJiB2YWx1ZSkgeworCQljb25zdCBjaGFyICp2c3RhciA9IHN0cmNocih2YWx1ZSwgJyonKTsKKwkJc2l6ZV90IHZsZW47CisJCXNpemVfdCB2c3VmZml4bGVuOworCQlpZiAoIXZzdGFyKQorCQkJZGllKCJWYWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIsIHZhbHVlKTsKKwkJdmxlbiA9IHZzdGFyIC0gdmFsdWU7CisJCXZzdWZmaXhsZW4gPSBzdHJsZW4odnN0YXIgKyAxKTsKKwkJKnJlc3VsdCA9IHhtYWxsb2ModmxlbiArIHZzdWZmaXhsZW4gKworCQkJCSAgc3RybGVuKG5hbWUpIC0KKwkJCQkgIGtsZW4gLSBrc3VmZml4bGVuICsgMSk7CisJCXN0cm5jcHkoKnJlc3VsdCwgdmFsdWUsIHZsZW4pOworCQlzdHJuY3B5KCpyZXN1bHQgKyB2bGVuLAorCQkJbmFtZSArIGtsZW4sIG5hbWVsZW4gLSBrbGVuIC0ga3N1ZmZpeGxlbik7CisJCXN0cmNweSgqcmVzdWx0ICsgdmxlbiArIG5hbWVsZW4gLSBrbGVuIC0ga3N1ZmZpeGxlbiwKKwkJICAgICAgIHZzdGFyICsgMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcXVlcnlfcmVmc3BlY3Moc3RydWN0IHJlZnNwZWMgKnJlZnMsIGludCByZWZfY291bnQsIHN0cnVjdCByZWZzcGVjICpxdWVyeSkKK3sKKwlpbnQgaTsKKwlpbnQgZmluZF9zcmMgPSAhcXVlcnktPnNyYzsKKworCWlmIChmaW5kX3NyYyAmJiAhcXVlcnktPmRzdCkKKwkJcmV0dXJuIGVycm9yKCJxdWVyeV9yZWZzcGVjczogbmVlZCBlaXRoZXIgc3JjIG9yIGRzdCIpOworCisJZm9yIChpID0gMDsgaSA8IHJlZl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCByZWZzcGVjICpyZWZzcGVjID0gJnJlZnNbaV07CisJCWNvbnN0IGNoYXIgKmtleSA9IGZpbmRfc3JjID8gcmVmc3BlYy0+ZHN0IDogcmVmc3BlYy0+c3JjOworCQljb25zdCBjaGFyICp2YWx1ZSA9IGZpbmRfc3JjID8gcmVmc3BlYy0+c3JjIDogcmVmc3BlYy0+ZHN0OworCQljb25zdCBjaGFyICpuZWVkbGUgPSBmaW5kX3NyYyA/IHF1ZXJ5LT5kc3QgOiBxdWVyeS0+c3JjOworCQljaGFyICoqcmVzdWx0ID0gZmluZF9zcmMgPyAmcXVlcnktPnNyYyA6ICZxdWVyeS0+ZHN0OworCisJCWlmICghcmVmc3BlYy0+ZHN0KQorCQkJY29udGludWU7CisJCWlmIChyZWZzcGVjLT5wYXR0ZXJuKSB7CisJCQlpZiAobWF0Y2hfbmFtZV93aXRoX3BhdHRlcm4oa2V5LCBuZWVkbGUsIHZhbHVlLCByZXN1bHQpKSB7CisJCQkJcXVlcnktPmZvcmNlID0gcmVmc3BlYy0+Zm9yY2U7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChuZWVkbGUsIGtleSkpIHsKKwkJCSpyZXN1bHQgPSB4c3RyZHVwKHZhbHVlKTsKKwkJCXF1ZXJ5LT5mb3JjZSA9IHJlZnNwZWMtPmZvcmNlOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitjaGFyICphcHBseV9yZWZzcGVjcyhzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlY3MsIGludCBucl9yZWZzcGVjLAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHJlZnNwZWMgcXVlcnk7CisKKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2Yoc3RydWN0IHJlZnNwZWMpKTsKKwlxdWVyeS5zcmMgPSAoY2hhciAqKW5hbWU7CisKKwlpZiAocXVlcnlfcmVmc3BlY3MocmVmc3BlY3MsIG5yX3JlZnNwZWMsICZxdWVyeSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHF1ZXJ5LmRzdDsKK30KKworaW50IHJlbW90ZV9maW5kX3RyYWNraW5nKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMpCit7CisJcmV0dXJuIHF1ZXJ5X3JlZnNwZWNzKHJlbW90ZS0+ZmV0Y2gsIHJlbW90ZS0+ZmV0Y2hfcmVmc3BlY19uciwgcmVmc3BlYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICphbGxvY19yZWZfd2l0aF9wcmVmaXgoY29uc3QgY2hhciAqcHJlZml4LCBzaXplX3QgcHJlZml4bGVuLAorCQljb25zdCBjaGFyICpuYW1lKQoreworCXNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7CisJc3RydWN0IHJlZiAqcmVmID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlZikgKyBwcmVmaXhsZW4gKyBsZW4gKyAxKTsKKwltZW1jcHkocmVmLT5uYW1lLCBwcmVmaXgsIHByZWZpeGxlbik7CisJbWVtY3B5KHJlZi0+bmFtZSArIHByZWZpeGxlbiwgbmFtZSwgbGVuKTsKKwlyZXR1cm4gcmVmOworfQorCitzdHJ1Y3QgcmVmICphbGxvY19yZWYoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gYWxsb2NfcmVmX3dpdGhfcHJlZml4KCIiLCAwLCBuYW1lKTsKK30KKworc3RydWN0IHJlZiAqY29weV9yZWYoY29uc3Qgc3RydWN0IHJlZiAqcmVmKQoreworCXN0cnVjdCByZWYgKmNweTsKKwlzaXplX3QgbGVuOworCWlmICghcmVmKQorCQlyZXR1cm4gTlVMTDsKKwlsZW4gPSBzdHJsZW4ocmVmLT5uYW1lKTsKKwljcHkgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVmKSArIGxlbiArIDEpOworCW1lbWNweShjcHksIHJlZiwgc2l6ZW9mKHN0cnVjdCByZWYpICsgbGVuICsgMSk7CisJY3B5LT5uZXh0ID0gTlVMTDsKKwljcHktPnN5bXJlZiA9IHJlZi0+c3ltcmVmID8geHN0cmR1cChyZWYtPnN5bXJlZikgOiBOVUxMOworCWNweS0+cmVtb3RlX3N0YXR1cyA9IHJlZi0+cmVtb3RlX3N0YXR1cyA/IHhzdHJkdXAocmVmLT5yZW1vdGVfc3RhdHVzKSA6IE5VTEw7CisJY3B5LT5wZWVyX3JlZiA9IGNvcHlfcmVmKHJlZi0+cGVlcl9yZWYpOworCXJldHVybiBjcHk7Cit9CisKK3N0cnVjdCByZWYgKmNvcHlfcmVmX2xpc3QoY29uc3Qgc3RydWN0IHJlZiAqcmVmKQoreworCXN0cnVjdCByZWYgKnJldCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKnRhaWwgPSAmcmV0OworCXdoaWxlIChyZWYpIHsKKwkJKnRhaWwgPSBjb3B5X3JlZihyZWYpOworCQlyZWYgPSByZWYtPm5leHQ7CisJCXRhaWwgPSAmKCgqdGFpbCktPm5leHQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBmcmVlX3JlZihzdHJ1Y3QgcmVmICpyZWYpCit7CisJaWYgKCFyZWYpCisJCXJldHVybjsKKwlmcmVlX3JlZihyZWYtPnBlZXJfcmVmKTsKKwlmcmVlKHJlZi0+cmVtb3RlX3N0YXR1cyk7CisJZnJlZShyZWYtPnN5bXJlZik7CisJZnJlZShyZWYpOworfQorCit2b2lkIGZyZWVfcmVmcyhzdHJ1Y3QgcmVmICpyZWYpCit7CisJc3RydWN0IHJlZiAqbmV4dDsKKwl3aGlsZSAocmVmKSB7CisJCW5leHQgPSByZWYtPm5leHQ7CisJCWZyZWVfcmVmKHJlZik7CisJCXJlZiA9IG5leHQ7CisJfQorfQorCitpbnQgcmVmX2NvbXBhcmVfbmFtZShjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqYSA9IHZhLCAqYiA9IHZiOworCXJldHVybiBzdHJjbXAoYS0+bmFtZSwgYi0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkICpyZWZfbGlzdF9nZXRfbmV4dChjb25zdCB2b2lkICphKQoreworCXJldHVybiAoKGNvbnN0IHN0cnVjdCByZWYgKilhKS0+bmV4dDsKK30KKworc3RhdGljIHZvaWQgcmVmX2xpc3Rfc2V0X25leHQodm9pZCAqYSwgdm9pZCAqbmV4dCkKK3sKKwkoKHN0cnVjdCByZWYgKilhKS0+bmV4dCA9IG5leHQ7Cit9CisKK3ZvaWQgc29ydF9yZWZfbGlzdChzdHJ1Y3QgcmVmICoqbCwgaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCit7CisJKmwgPSBsbGlzdF9tZXJnZXNvcnQoKmwsIHJlZl9saXN0X2dldF9uZXh0LCByZWZfbGlzdF9zZXRfbmV4dCwgY21wKTsKK30KKworc3RhdGljIGludCBjb3VudF9yZWZzcGVjX21hdGNoKGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQkgICAgICAgc3RydWN0IHJlZiAqcmVmcywKKwkJCSAgICAgICBzdHJ1Y3QgcmVmICoqbWF0Y2hlZF9yZWYpCit7CisJaW50IHBhdGxlbiA9IHN0cmxlbihwYXR0ZXJuKTsKKwlzdHJ1Y3QgcmVmICptYXRjaGVkX3dlYWsgPSBOVUxMOworCXN0cnVjdCByZWYgKm1hdGNoZWQgPSBOVUxMOworCWludCB3ZWFrX21hdGNoID0gMDsKKwlpbnQgbWF0Y2ggPSAwOworCisJZm9yICh3ZWFrX21hdGNoID0gbWF0Y2ggPSAwOyByZWZzOyByZWZzID0gcmVmcy0+bmV4dCkgeworCQljaGFyICpuYW1lID0gcmVmcy0+bmFtZTsKKwkJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisKKwkJaWYgKCFyZWZuYW1lX21hdGNoKHBhdHRlcm4sIG5hbWUsIHJlZl9yZXZfcGFyc2VfcnVsZXMpKQorCQkJY29udGludWU7CisKKwkJLyogQSBtYXRjaCBpcyAid2VhayIgaWYgaXQgaXMgd2l0aCByZWZzIG91dHNpZGUKKwkJICogaGVhZHMgb3IgdGFncywgYW5kIGRpZCBub3Qgc3BlY2lmeSB0aGUgcGF0dGVybgorCQkgKiBpbiBmdWxsIChlLmcuICJyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIpIG9yIGF0CisJCSAqIGxlYXN0IGZyb20gdGhlIHRvcGxldmVsIChlLmcuICJyZW1vdGVzL29yaWdpbi9tYXN0ZXIiKTsKKwkJICogb3RoZXJ3aXNlICJnaXQgcHVzaCAkVVJMIG1hc3RlciIgd291bGQgcmVzdWx0IGluCisJCSAqIGFtYmlndWl0eSBiZXR3ZWVuIHJlbW90ZXMvb3JpZ2luL21hc3RlciBhbmQgaGVhZHMvbWFzdGVyCisJCSAqIGF0IHRoZSByZW1vdGUgc2l0ZS4KKwkJICovCisJCWlmIChuYW1lbGVuICE9IHBhdGxlbiAmJgorCQkgICAgcGF0bGVuICE9IG5hbWVsZW4gLSA1ICYmCisJCSAgICBwcmVmaXhjbXAobmFtZSwgInJlZnMvaGVhZHMvIikgJiYKKwkJICAgIHByZWZpeGNtcChuYW1lLCAicmVmcy90YWdzLyIpKSB7CisJCQkvKiBXZSB3YW50IHRvIGNhdGNoIHRoZSBjYXNlIHdoZXJlIG9ubHkgd2VhaworCQkJICogbWF0Y2hlcyBhcmUgZm91bmQgYW5kIHRoZXJlIGFyZSBtdWx0aXBsZQorCQkJICogbWF0Y2hlcywgYW5kIHdoZXJlIG1vcmUgdGhhbiBvbmUgc3Ryb25nCisJCQkgKiBtYXRjaGVzIGFyZSBmb3VuZCwgYXMgYW1iaWd1b3VzLiAgT25lCisJCQkgKiBzdHJvbmcgbWF0Y2ggd2l0aCB6ZXJvIG9yIG1vcmUgd2VhayBtYXRjaGVzCisJCQkgKiBhcmUgYWNjZXB0YWJsZSBhcyBhIHVuaXF1ZSBtYXRjaC4KKwkJCSAqLworCQkJbWF0Y2hlZF93ZWFrID0gcmVmczsKKwkJCXdlYWtfbWF0Y2grKzsKKwkJfQorCQllbHNlIHsKKwkJCW1hdGNoZWQgPSByZWZzOworCQkJbWF0Y2grKzsKKwkJfQorCX0KKwlpZiAoIW1hdGNoZWQpIHsKKwkJKm1hdGNoZWRfcmVmID0gbWF0Y2hlZF93ZWFrOworCQlyZXR1cm4gd2Vha19tYXRjaDsKKwl9CisJZWxzZSB7CisJCSptYXRjaGVkX3JlZiA9IG1hdGNoZWQ7CisJCXJldHVybiBtYXRjaDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRhaWxfbGlua19yZWYoc3RydWN0IHJlZiAqcmVmLCBzdHJ1Y3QgcmVmICoqKnRhaWwpCit7CisJKip0YWlsID0gcmVmOworCXdoaWxlIChyZWYtPm5leHQpCisJCXJlZiA9IHJlZi0+bmV4dDsKKwkqdGFpbCA9ICZyZWYtPm5leHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICphbGxvY19kZWxldGVfcmVmKHZvaWQpCit7CisJc3RydWN0IHJlZiAqcmVmID0gYWxsb2NfcmVmKCIoZGVsZXRlKSIpOworCWhhc2hjbHIocmVmLT5uZXdfc2hhMSk7CisJcmV0dXJuIHJlZjsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKnRyeV9leHBsaWNpdF9vYmplY3RfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IHJlZiAqcmVmOworCisJaWYgKCEqbmFtZSkKKwkJcmV0dXJuIGFsbG9jX2RlbGV0ZV9yZWYoKTsKKwlpZiAoZ2V0X3NoYTEobmFtZSwgc2hhMSkpCisJCXJldHVybiBOVUxMOworCXJlZiA9IGFsbG9jX3JlZihuYW1lKTsKKwloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIHNoYTEpOworCXJldHVybiByZWY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICptYWtlX2xpbmtlZF9yZWYoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlZiAqKip0YWlsKQoreworCXN0cnVjdCByZWYgKnJldCA9IGFsbG9jX3JlZihuYW1lKTsKKwl0YWlsX2xpbmtfcmVmKHJldCwgdGFpbCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNoYXIgKmd1ZXNzX3JlZihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcmVmICpwZWVyKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWNvbnN0IGNoYXIgKnIgPSByZXNvbHZlX3JlZl91bnNhZmUocGVlci0+bmFtZSwgc2hhMSwgMSwgTlVMTCk7CisJaWYgKCFyKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghcHJlZml4Y21wKHIsICJyZWZzL2hlYWRzLyIpKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICJyZWZzL2hlYWRzLyIpOworCWVsc2UgaWYgKCFwcmVmaXhjbXAociwgInJlZnMvdGFncy8iKSkKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAicmVmcy90YWdzLyIpOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7CisKKwlzdHJidWZfYWRkc3RyKCZidWYsIG5hbWUpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQorCitzdGF0aWMgaW50IG1hdGNoX2V4cGxpY2l0KHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqZHN0LAorCQkJICBzdHJ1Y3QgcmVmICoqKmRzdF90YWlsLAorCQkJICBzdHJ1Y3QgcmVmc3BlYyAqcnMpCit7CisJc3RydWN0IHJlZiAqbWF0Y2hlZF9zcmMsICptYXRjaGVkX2RzdDsKKwlpbnQgY29weV9zcmM7CisKKwljb25zdCBjaGFyICpkc3RfdmFsdWUgPSBycy0+ZHN0OworCWNoYXIgKmRzdF9ndWVzczsKKworCWlmIChycy0+cGF0dGVybiB8fCBycy0+bWF0Y2hpbmcpCisJCXJldHVybiAwOworCisJbWF0Y2hlZF9zcmMgPSBtYXRjaGVkX2RzdCA9IE5VTEw7CisJc3dpdGNoIChjb3VudF9yZWZzcGVjX21hdGNoKHJzLT5zcmMsIHNyYywgJm1hdGNoZWRfc3JjKSkgeworCWNhc2UgMToKKwkJY29weV9zcmMgPSAxOworCQlicmVhazsKKwljYXNlIDA6CisJCS8qIFRoZSBzb3VyY2UgY291bGQgYmUgaW4gdGhlIGdldF9zaGExKCkgZm9ybWF0CisJCSAqIG5vdCBhIHJlZmVyZW5jZSBuYW1lLiAgOnJlZnMvb3RoZXIgaXMgYQorCQkgKiB3YXkgdG8gZGVsZXRlICdvdGhlcicgcmVmIGF0IHRoZSByZW1vdGUgZW5kLgorCQkgKi8KKwkJbWF0Y2hlZF9zcmMgPSB0cnlfZXhwbGljaXRfb2JqZWN0X25hbWUocnMtPnNyYyk7CisJCWlmICghbWF0Y2hlZF9zcmMpCisJCQlyZXR1cm4gZXJyb3IoInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueS4iLCBycy0+c3JjKTsKKwkJY29weV9zcmMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZXJyb3IoInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZS4iLCBycy0+c3JjKTsKKwl9CisKKwlpZiAoIWRzdF92YWx1ZSkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlpbnQgZmxhZzsKKworCQlkc3RfdmFsdWUgPSByZXNvbHZlX3JlZl91bnNhZmUobWF0Y2hlZF9zcmMtPm5hbWUsIHNoYTEsIDEsICZmbGFnKTsKKwkJaWYgKCFkc3RfdmFsdWUgfHwKKwkJICAgICgoZmxhZyAmIFJFRl9JU1NZTVJFRikgJiYKKwkJICAgICBwcmVmaXhjbXAoZHN0X3ZhbHVlLCAicmVmcy9oZWFkcy8iKSkpCisJCQlkaWUoIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2guIiwKKwkJCSAgICBtYXRjaGVkX3NyYy0+bmFtZSk7CisJfQorCisJc3dpdGNoIChjb3VudF9yZWZzcGVjX21hdGNoKGRzdF92YWx1ZSwgZHN0LCAmbWF0Y2hlZF9kc3QpKSB7CisJY2FzZSAxOgorCQlicmVhazsKKwljYXNlIDA6CisJCWlmICghbWVtY21wKGRzdF92YWx1ZSwgInJlZnMvIiwgNSkpCisJCQltYXRjaGVkX2RzdCA9IG1ha2VfbGlua2VkX3JlZihkc3RfdmFsdWUsIGRzdF90YWlsKTsKKwkJZWxzZSBpZiAoaXNfbnVsbF9zaGExKG1hdGNoZWRfc3JjLT5uZXdfc2hhMSkpCisJCQllcnJvcigidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IiwKKwkJCSAgICAgIGRzdF92YWx1ZSk7CisJCWVsc2UgaWYgKChkc3RfZ3Vlc3MgPSBndWVzc19yZWYoZHN0X3ZhbHVlLCBtYXRjaGVkX3NyYykpKQorCQkJbWF0Y2hlZF9kc3QgPSBtYWtlX2xpbmtlZF9yZWYoZHN0X2d1ZXNzLCBkc3RfdGFpbCk7CisJCWVsc2UKKwkJCWVycm9yKCJ1bmFibGUgdG8gcHVzaCB0byB1bnF1YWxpZmllZCBkZXN0aW5hdGlvbjogJXNcbiIKKwkJCSAgICAgICJUaGUgZGVzdGluYXRpb24gcmVmc3BlYyBuZWl0aGVyIG1hdGNoZXMgYW4gIgorCQkJICAgICAgImV4aXN0aW5nIHJlZiBvbiB0aGUgcmVtb3RlIG5vclxuIgorCQkJICAgICAgImJlZ2lucyB3aXRoIHJlZnMvLCBhbmQgd2UgYXJlIHVuYWJsZSB0byAiCisJCQkgICAgICAiZ3Vlc3MgYSBwcmVmaXggYmFzZWQgb24gdGhlIHNvdXJjZSByZWYuIiwKKwkJCSAgICAgIGRzdF92YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1hdGNoZWRfZHN0ID0gTlVMTDsKKwkJZXJyb3IoImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZS4iLAorCQkgICAgICBkc3RfdmFsdWUpOworCQlicmVhazsKKwl9CisJaWYgKCFtYXRjaGVkX2RzdCkKKwkJcmV0dXJuIC0xOworCWlmIChtYXRjaGVkX2RzdC0+cGVlcl9yZWYpCisJCXJldHVybiBlcnJvcigiZHN0IHJlZiAlcyByZWNlaXZlcyBmcm9tIG1vcmUgdGhhbiBvbmUgc3JjLiIsCisJCSAgICAgIG1hdGNoZWRfZHN0LT5uYW1lKTsKKwllbHNlIHsKKwkJbWF0Y2hlZF9kc3QtPnBlZXJfcmVmID0gY29weV9zcmMgPyBjb3B5X3JlZihtYXRjaGVkX3NyYykgOiBtYXRjaGVkX3NyYzsKKwkJbWF0Y2hlZF9kc3QtPmZvcmNlID0gcnMtPmZvcmNlOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXRjaF9leHBsaWNpdF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqZHN0LAorCQkJICAgICAgIHN0cnVjdCByZWYgKioqZHN0X3RhaWwsIHN0cnVjdCByZWZzcGVjICpycywKKwkJCSAgICAgICBpbnQgcnNfbnIpCit7CisJaW50IGksIGVycnM7CisJZm9yIChpID0gZXJycyA9IDA7IGkgPCByc19ucjsgaSsrKQorCQllcnJzICs9IG1hdGNoX2V4cGxpY2l0KHNyYywgZHN0LCBkc3RfdGFpbCwgJnJzW2ldKTsKKwlyZXR1cm4gZXJyczsKK30KKworc3RhdGljIGNoYXIgKmdldF9yZWZfbWF0Y2goY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJzLCBpbnQgcnNfbnIsIGNvbnN0IHN0cnVjdCByZWYgKnJlZiwKKwkJaW50IHNlbmRfbWlycm9yLCBpbnQgZGlyZWN0aW9uLCBjb25zdCBzdHJ1Y3QgcmVmc3BlYyAqKnJldF9wYXQpCit7CisJY29uc3Qgc3RydWN0IHJlZnNwZWMgKnBhdDsKKwljaGFyICpuYW1lOworCWludCBpOworCWludCBtYXRjaGluZ19yZWZzID0gLTE7CisJZm9yIChpID0gMDsgaSA8IHJzX25yOyBpKyspIHsKKwkJaWYgKHJzW2ldLm1hdGNoaW5nICYmCisJCSAgICAobWF0Y2hpbmdfcmVmcyA9PSAtMSB8fCByc1tpXS5mb3JjZSkpIHsKKwkJCW1hdGNoaW5nX3JlZnMgPSBpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocnNbaV0ucGF0dGVybikgeworCQkJY29uc3QgY2hhciAqZHN0X3NpZGUgPSByc1tpXS5kc3QgPyByc1tpXS5kc3QgOiByc1tpXS5zcmM7CisJCQlpbnQgbWF0Y2g7CisJCQlpZiAoZGlyZWN0aW9uID09IEZST01fU1JDKQorCQkJCW1hdGNoID0gbWF0Y2hfbmFtZV93aXRoX3BhdHRlcm4ocnNbaV0uc3JjLCByZWYtPm5hbWUsIGRzdF9zaWRlLCAmbmFtZSk7CisJCQllbHNlCisJCQkJbWF0Y2ggPSBtYXRjaF9uYW1lX3dpdGhfcGF0dGVybihkc3Rfc2lkZSwgcmVmLT5uYW1lLCByc1tpXS5zcmMsICZuYW1lKTsKKwkJCWlmIChtYXRjaCkgeworCQkJCW1hdGNoaW5nX3JlZnMgPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWlmIChtYXRjaGluZ19yZWZzID09IC0xKQorCQlyZXR1cm4gTlVMTDsKKworCXBhdCA9IHJzICsgbWF0Y2hpbmdfcmVmczsKKwlpZiAocGF0LT5tYXRjaGluZykgeworCQkvKgorCQkgKiAibWF0Y2hpbmcgcmVmcyI7IHRyYWRpdGlvbmFsbHkgd2UgcHVzaGVkIGV2ZXJ5dGhpbmcKKwkJICogaW5jbHVkaW5nIHJlZnMgb3V0c2lkZSByZWZzL2hlYWRzLyBoaWVyYXJjaHksIGJ1dAorCQkgKiB0aGF0IGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSB0aGVzZSBkYXlzLgorCQkgKi8KKwkJaWYgKCFzZW5kX21pcnJvciAmJiBwcmVmaXhjbXAocmVmLT5uYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJCXJldHVybiBOVUxMOworCQluYW1lID0geHN0cmR1cChyZWYtPm5hbWUpOworCX0KKwlpZiAocmV0X3BhdCkKKwkJKnJldF9wYXQgPSBwYXQ7CisJcmV0dXJuIG5hbWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICoqdGFpbF9yZWYoc3RydWN0IHJlZiAqKmhlYWQpCit7CisJc3RydWN0IHJlZiAqKnRhaWwgPSBoZWFkOworCXdoaWxlICgqdGFpbCkKKwkJdGFpbCA9ICYoKCp0YWlsKS0+bmV4dCk7CisJcmV0dXJuIHRhaWw7Cit9CisKKy8qCisgKiBHaXZlbiB0aGUgc2V0IG9mIHJlZnMgdGhlIGxvY2FsIHJlcG9zaXRvcnkgaGFzLCB0aGUgc2V0IG9mIHJlZnMgdGhlCisgKiByZW1vdGUgcmVwb3NpdG9yeSBoYXMsIGFuZCB0aGUgcmVmc3BlYyB1c2VkIGZvciBwdXNoLCBkZXRlcm1pbmUKKyAqIHdoYXQgcmVtb3RlIHJlZnMgd2Ugd2lsbCB1cGRhdGUgYW5kIHdpdGggd2hhdCB2YWx1ZSBieSBzZXR0aW5nCisgKiBwZWVyX3JlZiAod2hpY2ggb2JqZWN0IGlzIGJlaW5nIHB1c2hlZCkgYW5kIGZvcmNlIChpZiB0aGUgcHVzaCBpcworICogZm9yY2VkKSBpbiBlbGVtZW50cyBvZiAiZHN0Ii4gVGhlIGZ1bmN0aW9uIG1heSBhZGQgbmV3IGVsZW1lbnRzIHRvCisgKiBkc3QgKGUuZy4gcHVzaGluZyB0byBhIG5ldyBicmFuY2gsIGRvbmUgaW4gbWF0Y2hfZXhwbGljaXRfcmVmcykuCisgKi8KK2ludCBtYXRjaF9wdXNoX3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICoqZHN0LAorCQkgICAgaW50IG5yX3JlZnNwZWMsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHJlZnNwZWMgKnJzOworCWludCBzZW5kX2FsbCA9IGZsYWdzICYgTUFUQ0hfUkVGU19BTEw7CisJaW50IHNlbmRfbWlycm9yID0gZmxhZ3MgJiBNQVRDSF9SRUZTX01JUlJPUjsKKwlpbnQgc2VuZF9wcnVuZSA9IGZsYWdzICYgTUFUQ0hfUkVGU19QUlVORTsKKwlpbnQgZXJyczsKKwlzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9yZWZzcGVjW10gPSB7ICI6IiwgTlVMTCB9OworCXN0cnVjdCByZWYgKnJlZiwgKipkc3RfdGFpbCA9IHRhaWxfcmVmKGRzdCk7CisKKwlpZiAoIW5yX3JlZnNwZWMpIHsKKwkJbnJfcmVmc3BlYyA9IDE7CisJCXJlZnNwZWMgPSBkZWZhdWx0X3JlZnNwZWM7CisJfQorCXJzID0gcGFyc2VfcHVzaF9yZWZzcGVjKG5yX3JlZnNwZWMsIChjb25zdCBjaGFyICoqKSByZWZzcGVjKTsKKwllcnJzID0gbWF0Y2hfZXhwbGljaXRfcmVmcyhzcmMsICpkc3QsICZkc3RfdGFpbCwgcnMsIG5yX3JlZnNwZWMpOworCisJLyogcGljayB0aGUgcmVtYWluZGVyICovCisJZm9yIChyZWYgPSBzcmM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCByZWYgKmRzdF9wZWVyOworCQljb25zdCBzdHJ1Y3QgcmVmc3BlYyAqcGF0ID0gTlVMTDsKKwkJY2hhciAqZHN0X25hbWU7CisKKwkJaWYgKHJlZi0+cGVlcl9yZWYpCisJCQljb250aW51ZTsKKworCQlkc3RfbmFtZSA9IGdldF9yZWZfbWF0Y2gocnMsIG5yX3JlZnNwZWMsIHJlZiwgc2VuZF9taXJyb3IsIEZST01fU1JDLCAmcGF0KTsKKwkJaWYgKCFkc3RfbmFtZSkKKwkJCWNvbnRpbnVlOworCisJCWRzdF9wZWVyID0gZmluZF9yZWZfYnlfbmFtZSgqZHN0LCBkc3RfbmFtZSk7CisJCWlmIChkc3RfcGVlcikgeworCQkJaWYgKGRzdF9wZWVyLT5wZWVyX3JlZikKKwkJCQkvKiBXZSdyZSBhbHJlYWR5IHNlbmRpbmcgc29tZXRoaW5nIHRvIHRoaXMgcmVmLiAqLworCQkJCWdvdG8gZnJlZV9uYW1lOworCQl9IGVsc2UgeworCQkJaWYgKHBhdC0+bWF0Y2hpbmcgJiYgIShzZW5kX2FsbCB8fCBzZW5kX21pcnJvcikpCisJCQkJLyoKKwkJCQkgKiBSZW1vdGUgZG9lc24ndCBoYXZlIGl0LCBhbmQgd2UgaGF2ZSBubworCQkJCSAqIGV4cGxpY2l0IHBhdHRlcm4sIGFuZCB3ZSBkb24ndCBoYXZlCisJCQkJICogLS1hbGwgbm9yIC0tbWlycm9yLgorCQkJCSAqLworCQkJCWdvdG8gZnJlZV9uYW1lOworCisJCQkvKiBDcmVhdGUgYSBuZXcgb25lIGFuZCBsaW5rIGl0ICovCisJCQlkc3RfcGVlciA9IG1ha2VfbGlua2VkX3JlZihkc3RfbmFtZSwgJmRzdF90YWlsKTsKKwkJCWhhc2hjcHkoZHN0X3BlZXItPm5ld19zaGExLCByZWYtPm5ld19zaGExKTsKKwkJfQorCQlkc3RfcGVlci0+cGVlcl9yZWYgPSBjb3B5X3JlZihyZWYpOworCQlkc3RfcGVlci0+Zm9yY2UgPSBwYXQtPmZvcmNlOworCWZyZWVfbmFtZToKKwkJZnJlZShkc3RfbmFtZSk7CisJfQorCWlmIChzZW5kX3BydW5lKSB7CisJCS8qIGNoZWNrIGZvciBtaXNzaW5nIHJlZnMgb24gdGhlIHJlbW90ZSAqLworCQlmb3IgKHJlZiA9ICpkc3Q7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCQljaGFyICpzcmNfbmFtZTsKKworCQkJaWYgKHJlZi0+cGVlcl9yZWYpCisJCQkJLyogV2UncmUgYWxyZWFkeSBzZW5kaW5nIHNvbWV0aGluZyB0byB0aGlzIHJlZi4gKi8KKwkJCQljb250aW51ZTsKKworCQkJc3JjX25hbWUgPSBnZXRfcmVmX21hdGNoKHJzLCBucl9yZWZzcGVjLCByZWYsIHNlbmRfbWlycm9yLCBGUk9NX0RTVCwgTlVMTCk7CisJCQlpZiAoc3JjX25hbWUpIHsKKwkJCQlpZiAoIWZpbmRfcmVmX2J5X25hbWUoc3JjLCBzcmNfbmFtZSkpCisJCQkJCXJlZi0+cGVlcl9yZWYgPSBhbGxvY19kZWxldGVfcmVmKCk7CisJCQkJZnJlZShzcmNfbmFtZSk7CisJCQl9CisJCX0KKwl9CisJaWYgKGVycnMpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzZXRfcmVmX3N0YXR1c19mb3JfcHVzaChzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgaW50IHNlbmRfbWlycm9yLAorCWludCBmb3JjZV91cGRhdGUpCit7CisJc3RydWN0IHJlZiAqcmVmOworCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJaWYgKHJlZi0+cGVlcl9yZWYpCisJCQloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKTsKKwkJZWxzZSBpZiAoIXNlbmRfbWlycm9yKQorCQkJY29udGludWU7CisKKwkJcmVmLT5kZWxldGlvbiA9IGlzX251bGxfc2hhMShyZWYtPm5ld19zaGExKTsKKwkJaWYgKCFyZWYtPmRlbGV0aW9uICYmCisJCQkhaGFzaGNtcChyZWYtPm9sZF9zaGExLCByZWYtPm5ld19zaGExKSkgeworCQkJcmVmLT5zdGF0dXMgPSBSRUZfU1RBVFVTX1VQVE9EQVRFOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBUaGlzIHBhcnQgZGV0ZXJtaW5lcyB3aGF0IGNhbiBvdmVyd3JpdGUgd2hhdC4KKwkJICogVGhlIHJ1bGVzIGFyZToKKwkJICoKKwkJICogKDApIHlvdSBjYW4gYWx3YXlzIHVzZSAtLWZvcmNlIG9yICtBOkIgbm90YXRpb24gdG8KKwkJICogICAgIHNlbGVjdGl2ZWx5IGZvcmNlIGluZGl2aWR1YWwgcmVmIHBhaXJzLgorCQkgKgorCQkgKiAoMSkgaWYgdGhlIG9sZCB0aGluZyBkb2VzIG5vdCBleGlzdCwgaXQgaXMgT0suCisJCSAqCisJCSAqICgyKSBpZiB5b3UgZG8gbm90IGhhdmUgdGhlIG9sZCB0aGluZywgeW91IGFyZSBub3QgYWxsb3dlZAorCQkgKiAgICAgdG8gb3ZlcndyaXRlIGl0OyB5b3Ugd291bGQgbm90IGtub3cgd2hhdCB5b3UgYXJlIGxvc2luZworCQkgKiAgICAgb3RoZXJ3aXNlLgorCQkgKgorCQkgKiAoMykgaWYgYm90aCBuZXcgYW5kIG9sZCBhcmUgY29tbWl0LWlzaCwgYW5kIG5ldyBpcyBhCisJCSAqICAgICBkZXNjZW5kYW50IG9mIG9sZCwgaXQgaXMgT0suCisJCSAqCisJCSAqICg0KSByZWdhcmRsZXNzIG9mIGFsbCBvZiB0aGUgYWJvdmUsIHJlbW92aW5nIDpCIGlzCisJCSAqICAgICBhbHdheXMgYWxsb3dlZC4KKwkJICovCisKKwkJcmVmLT5ub25mYXN0Zm9yd2FyZCA9CisJCQkhcmVmLT5kZWxldGlvbiAmJgorCQkJIWlzX251bGxfc2hhMShyZWYtPm9sZF9zaGExKSAmJgorCQkJKCFoYXNfc2hhMV9maWxlKHJlZi0+b2xkX3NoYTEpCisJCQkgIHx8ICFyZWZfbmV3ZXIocmVmLT5uZXdfc2hhMSwgcmVmLT5vbGRfc2hhMSkpOworCisJCWlmIChyZWYtPm5vbmZhc3Rmb3J3YXJkICYmICFyZWYtPmZvcmNlICYmICFmb3JjZV91cGRhdGUpIHsKKwkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ7CisJCQljb250aW51ZTsKKwkJfQorCX0KK30KKworc3RydWN0IGJyYW5jaCAqYnJhbmNoX2dldChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBicmFuY2ggKnJldDsKKworCXJlYWRfY29uZmlnKCk7CisJaWYgKCFuYW1lIHx8ICEqbmFtZSB8fCAhc3RyY21wKG5hbWUsICJIRUFEIikpCisJCXJldCA9IGN1cnJlbnRfYnJhbmNoOworCWVsc2UKKwkJcmV0ID0gbWFrZV9icmFuY2gobmFtZSwgMCk7CisJaWYgKHJldCAmJiByZXQtPnJlbW90ZV9uYW1lKSB7CisJCXJldC0+cmVtb3RlID0gcmVtb3RlX2dldChyZXQtPnJlbW90ZV9uYW1lKTsKKwkJaWYgKHJldC0+bWVyZ2VfbnIpIHsKKwkJCWludCBpOworCQkJcmV0LT5tZXJnZSA9IHhjYWxsb2Moc2l6ZW9mKCpyZXQtPm1lcmdlKSwKKwkJCQkJICAgICByZXQtPm1lcmdlX25yKTsKKwkJCWZvciAoaSA9IDA7IGkgPCByZXQtPm1lcmdlX25yOyBpKyspIHsKKwkJCQlyZXQtPm1lcmdlW2ldID0geGNhbGxvYygxLCBzaXplb2YoKipyZXQtPm1lcmdlKSk7CisJCQkJcmV0LT5tZXJnZVtpXS0+c3JjID0geHN0cmR1cChyZXQtPm1lcmdlX25hbWVbaV0pOworCQkJCWlmIChyZW1vdGVfZmluZF90cmFja2luZyhyZXQtPnJlbW90ZSwgcmV0LT5tZXJnZVtpXSkKKwkJCQkgICAgJiYgIXN0cmNtcChyZXQtPnJlbW90ZV9uYW1lLCAiLiIpKQorCQkJCQlyZXQtPm1lcmdlW2ldLT5kc3QgPSB4c3RyZHVwKHJldC0+bWVyZ2VfbmFtZVtpXSk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IGJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKHN0cnVjdCBicmFuY2ggKmJyYW5jaCkKK3sKKwlyZXR1cm4gYnJhbmNoICYmICEhYnJhbmNoLT5tZXJnZTsKK30KKworaW50IGJyYW5jaF9tZXJnZV9tYXRjaGVzKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwKKwkJICAgICAgICAgICAgICAgICBpbnQgaSwKKwkJICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWlmICghYnJhbmNoIHx8IGkgPCAwIHx8IGkgPj0gYnJhbmNoLT5tZXJnZV9ucikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJlZm5hbWVfbWF0Y2goYnJhbmNoLT5tZXJnZVtpXS0+c3JjLCByZWZuYW1lLCByZWZfZmV0Y2hfcnVsZXMpOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X2V4cGFuZGVkX21hcChjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkJCQkgICAgY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCByZWYgKnJldCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKnRhaWwgPSAmcmV0OworCisJY2hhciAqZXhwbl9uYW1lOworCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJaWYgKHN0cmNocihyZWYtPm5hbWUsICdeJykpCisJCQljb250aW51ZTsgLyogYSBkZXJlZmVyZW5jZSBpdGVtICovCisJCWlmIChtYXRjaF9uYW1lX3dpdGhfcGF0dGVybihyZWZzcGVjLT5zcmMsIHJlZi0+bmFtZSwKKwkJCQkJICAgIHJlZnNwZWMtPmRzdCwgJmV4cG5fbmFtZSkpIHsKKwkJCXN0cnVjdCByZWYgKmNweSA9IGNvcHlfcmVmKHJlZik7CisKKwkJCWNweS0+cGVlcl9yZWYgPSBhbGxvY19yZWYoZXhwbl9uYW1lKTsKKwkJCWZyZWUoZXhwbl9uYW1lKTsKKwkJCWlmIChyZWZzcGVjLT5mb3JjZSkKKwkJCQljcHktPnBlZXJfcmVmLT5mb3JjZSA9IDE7CisJCQkqdGFpbCA9IGNweTsKKwkJCXRhaWwgPSAmY3B5LT5uZXh0OworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWYgKmZpbmRfcmVmX2J5X25hbWVfYWJicmV2KGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCWZvciAocmVmID0gcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJaWYgKHJlZm5hbWVfbWF0Y2gobmFtZSwgcmVmLT5uYW1lLCByZWZfZmV0Y2hfcnVsZXMpKQorCQkJcmV0dXJuIHJlZjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCByZWYgKmdldF9yZW1vdGVfcmVmKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IHN0cnVjdCByZWYgKnJlZiA9IGZpbmRfcmVmX2J5X25hbWVfYWJicmV2KHJlbW90ZV9yZWZzLCBuYW1lKTsKKworCWlmICghcmVmKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBjb3B5X3JlZihyZWYpOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X2xvY2FsX3JlZihjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghbmFtZSB8fCBuYW1lWzBdID09ICdcMCcpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFwcmVmaXhjbXAobmFtZSwgInJlZnMvIikpCisJCXJldHVybiBhbGxvY19yZWYobmFtZSk7CisKKwlpZiAoIXByZWZpeGNtcChuYW1lLCAiaGVhZHMvIikgfHwKKwkgICAgIXByZWZpeGNtcChuYW1lLCAidGFncy8iKSB8fAorCSAgICAhcHJlZml4Y21wKG5hbWUsICJyZW1vdGVzLyIpKQorCQlyZXR1cm4gYWxsb2NfcmVmX3dpdGhfcHJlZml4KCJyZWZzLyIsIDUsIG5hbWUpOworCisJcmV0dXJuIGFsbG9jX3JlZl93aXRoX3ByZWZpeCgicmVmcy9oZWFkcy8iLCAxMSwgbmFtZSk7Cit9CisKK2ludCBnZXRfZmV0Y2hfbWFwKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCQkgIGNvbnN0IHN0cnVjdCByZWZzcGVjICpyZWZzcGVjLAorCQkgIHN0cnVjdCByZWYgKioqdGFpbCwKKwkJICBpbnQgbWlzc2luZ19vaykKK3sKKwlzdHJ1Y3QgcmVmICpyZWZfbWFwLCAqKnJtcDsKKworCWlmIChyZWZzcGVjLT5wYXR0ZXJuKSB7CisJCXJlZl9tYXAgPSBnZXRfZXhwYW5kZWRfbWFwKHJlbW90ZV9yZWZzLCByZWZzcGVjKTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpuYW1lID0gcmVmc3BlYy0+c3JjWzBdID8gcmVmc3BlYy0+c3JjIDogIkhFQUQiOworCisJCXJlZl9tYXAgPSBnZXRfcmVtb3RlX3JlZihyZW1vdGVfcmVmcywgbmFtZSk7CisJCWlmICghbWlzc2luZ19vayAmJiAhcmVmX21hcCkKKwkJCWRpZSgiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIiwgbmFtZSk7CisJCWlmIChyZWZfbWFwKSB7CisJCQlyZWZfbWFwLT5wZWVyX3JlZiA9IGdldF9sb2NhbF9yZWYocmVmc3BlYy0+ZHN0KTsKKwkJCWlmIChyZWZfbWFwLT5wZWVyX3JlZiAmJiByZWZzcGVjLT5mb3JjZSkKKwkJCQlyZWZfbWFwLT5wZWVyX3JlZi0+Zm9yY2UgPSAxOworCQl9CisJfQorCisJZm9yIChybXAgPSAmcmVmX21hcDsgKnJtcDsgKSB7CisJCWlmICgoKnJtcCktPnBlZXJfcmVmKSB7CisJCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoKCpybXApLT5wZWVyX3JlZi0+bmFtZSArIDUsCisJCQkJUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpIHsKKwkJCQlzdHJ1Y3QgcmVmICppZ25vcmUgPSAqcm1wOworCQkJCWVycm9yKCIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiLAorCQkJCSAgICAgICgqcm1wKS0+cGVlcl9yZWYtPm5hbWUpOworCQkJCSpybXAgPSAoKnJtcCktPm5leHQ7CisJCQkJZnJlZShpZ25vcmUtPnBlZXJfcmVmKTsKKwkJCQlmcmVlKGlnbm9yZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJcm1wID0gJigoKnJtcCktPm5leHQpOworCX0KKworCWlmIChyZWZfbWFwKQorCQl0YWlsX2xpbmtfcmVmKHJlZl9tYXAsIHRhaWwpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCByZXNvbHZlX3JlbW90ZV9zeW1yZWYoc3RydWN0IHJlZiAqcmVmLCBzdHJ1Y3QgcmVmICpsaXN0KQoreworCWlmICghcmVmLT5zeW1yZWYpCisJCXJldHVybiAwOworCWZvciAoOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkJaWYgKCFzdHJjbXAocmVmLT5zeW1yZWYsIGxpc3QtPm5hbWUpKSB7CisJCQloYXNoY3B5KHJlZi0+b2xkX3NoYTEsIGxpc3QtPm9sZF9zaGExKTsKKwkJCXJldHVybiAwOworCQl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHVubWFya19hbmRfZnJlZShzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIHVuc2lnbmVkIGludCBtYXJrKQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqdGVtcCA9IGxpc3Q7CisJCXRlbXAtPml0ZW0tPm9iamVjdC5mbGFncyAmPSB+bWFyazsKKwkJbGlzdCA9IHRlbXAtPm5leHQ7CisJCWZyZWUodGVtcCk7CisJfQorfQorCitpbnQgcmVmX25ld2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvOworCXN0cnVjdCBjb21taXQgKm9sZCwgKm5ldzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsICp1c2VkOworCWludCBmb3VuZCA9IDA7CisKKwkvKiBCb3RoIG5ldyBhbmQgb2xkIG11c3QgYmUgY29tbWl0LWlzaCBhbmQgbmV3IGlzIGRlc2NlbmRhbnQgb2YKKwkgKiBvbGQuICBPdGhlcndpc2Ugd2UgcmVxdWlyZSAtLWZvcmNlLgorCSAqLworCW8gPSBkZXJlZl90YWcocGFyc2Vfb2JqZWN0KG9sZF9zaGExKSwgTlVMTCwgMCk7CisJaWYgKCFvIHx8IG8tPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIDA7CisJb2xkID0gKHN0cnVjdCBjb21taXQgKikgbzsKKworCW8gPSBkZXJlZl90YWcocGFyc2Vfb2JqZWN0KG5ld19zaGExKSwgTlVMTCwgMCk7CisJaWYgKCFvIHx8IG8tPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIDA7CisJbmV3ID0gKHN0cnVjdCBjb21taXQgKikgbzsKKworCWlmIChwYXJzZV9jb21taXQobmV3KSA8IDApCisJCXJldHVybiAwOworCisJdXNlZCA9IGxpc3QgPSBOVUxMOworCWNvbW1pdF9saXN0X2luc2VydChuZXcsICZsaXN0KTsKKwl3aGlsZSAobGlzdCkgeworCQluZXcgPSBwb3BfbW9zdF9yZWNlbnRfY29tbWl0KCZsaXN0LCBUTVBfTUFSSyk7CisJCWNvbW1pdF9saXN0X2luc2VydChuZXcsICZ1c2VkKTsKKwkJaWYgKG5ldyA9PSBvbGQpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVubWFya19hbmRfZnJlZShsaXN0LCBUTVBfTUFSSyk7CisJdW5tYXJrX2FuZF9mcmVlKHVzZWQsIFRNUF9NQVJLKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byByZXBvcnQsIG90aGVyd2lzZSBmYWxzZS4KKyAqLworaW50IHN0YXRfdHJhY2tpbmdfaW5mbyhzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIGludCAqbnVtX291cnMsIGludCAqbnVtX3RoZWlycykKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBjb21taXQgKm91cnMsICp0aGVpcnM7CisJY2hhciBzeW1tZXRyaWNbODRdOworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCWNvbnN0IGNoYXIgKnJldl9hcmd2WzEwXSwgKmJhc2U7CisJaW50IHJldl9hcmdjOworCisJLyoKKwkgKiBOb3RoaW5nIHRvIHJlcG9ydCB1bmxlc3Mgd2UgYXJlIG1hcmtlZCB0byBidWlsZCBvbiB0b3Agb2YKKwkgKiBzb21lYm9keSBlbHNlLgorCSAqLworCWlmICghYnJhbmNoIHx8CisJICAgICFicmFuY2gtPm1lcmdlIHx8ICFicmFuY2gtPm1lcmdlWzBdIHx8ICFicmFuY2gtPm1lcmdlWzBdLT5kc3QpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB3aGF0IHdlIHVzZWQgdG8gYnVpbGQgb24gbm8gbG9uZ2VyIGV4aXN0cywgdGhlcmUgaXMKKwkgKiBub3RoaW5nIHRvIHJlcG9ydC4KKwkgKi8KKwliYXNlID0gYnJhbmNoLT5tZXJnZVswXS0+ZHN0OworCWlmIChyZWFkX3JlZihiYXNlLCBzaGExKSkKKwkJcmV0dXJuIDA7CisJdGhlaXJzID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJaWYgKCF0aGVpcnMpCisJCXJldHVybiAwOworCisJaWYgKHJlYWRfcmVmKGJyYW5jaC0+cmVmbmFtZSwgc2hhMSkpCisJCXJldHVybiAwOworCW91cnMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwlpZiAoIW91cnMpCisJCXJldHVybiAwOworCisJLyogYXJlIHdlIHRoZSBzYW1lPyAqLworCWlmICh0aGVpcnMgPT0gb3VycykKKwkJcmV0dXJuIDA7CisKKwkvKiBSdW4gInJldi1saXN0IC0tbGVmdC1yaWdodCBvdXJzLi4udGhlaXJzIiBpbnRlcm5hbGx5Li4uICovCisJcmV2X2FyZ2MgPSAwOworCXJldl9hcmd2W3Jldl9hcmdjKytdID0gTlVMTDsKKwlyZXZfYXJndltyZXZfYXJnYysrXSA9ICItLWxlZnQtcmlnaHQiOworCXJldl9hcmd2W3Jldl9hcmdjKytdID0gc3ltbWV0cmljOworCXJldl9hcmd2W3Jldl9hcmdjKytdID0gIi0tIjsKKwlyZXZfYXJndltyZXZfYXJnY10gPSBOVUxMOworCisJc3RyY3B5KHN5bW1ldHJpYywgc2hhMV90b19oZXgob3Vycy0+b2JqZWN0LnNoYTEpKTsKKwlzdHJjcHkoc3ltbWV0cmljICsgNDAsICIuLi4iKTsKKwlzdHJjcHkoc3ltbWV0cmljICsgNDMsIHNoYTFfdG9faGV4KHRoZWlycy0+b2JqZWN0LnNoYTEpKTsKKworCWluaXRfcmV2aXNpb25zKCZyZXZzLCBOVUxMKTsKKwlzZXR1cF9yZXZpc2lvbnMocmV2X2FyZ2MsIHJldl9hcmd2LCAmcmV2cywgTlVMTCk7CisJcHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKTsKKworCS8qIC4uLiBhbmQgY291bnQgdGhlIGNvbW1pdHMgb24gZWFjaCBzaWRlLiAqLworCSpudW1fb3VycyA9IDA7CisJKm51bV90aGVpcnMgPSAwOworCXdoaWxlICgxKSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSBnZXRfcmV2aXNpb24oJnJldnMpOworCQlpZiAoIWMpCisJCQlicmVhazsKKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKQorCQkJKCpudW1fb3VycykrKzsKKwkJZWxzZQorCQkJKCpudW1fdGhlaXJzKSsrOworCX0KKworCS8qIGNsZWFyIG9iamVjdCBmbGFncyBzbXVkZ2VkIGJ5IHRoZSBhYm92ZSB0cmF2ZXJzYWwgKi8KKwljbGVhcl9jb21taXRfbWFya3Mob3VycywgQUxMX1JFVl9GTEFHUyk7CisJY2xlYXJfY29tbWl0X21hcmtzKHRoZWlycywgQUxMX1JFVl9GTEFHUyk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSB3aGVuIHRoZXJlIGlzIGFueXRoaW5nIHRvIHJlcG9ydCwgb3RoZXJ3aXNlIGZhbHNlLgorICovCitpbnQgZm9ybWF0X3RyYWNraW5nX2luZm8oc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgbnVtX291cnMsIG51bV90aGVpcnM7CisJY29uc3QgY2hhciAqYmFzZTsKKworCWlmICghc3RhdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJm51bV9vdXJzLCAmbnVtX3RoZWlycykpCisJCXJldHVybiAwOworCisJYmFzZSA9IGJyYW5jaC0+bWVyZ2VbMF0tPmRzdDsKKwliYXNlID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoYmFzZSwgMCk7CisJaWYgKCFudW1fdGhlaXJzKQorCQlzdHJidWZfYWRkZihzYiwKKwkJCVFfKCJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIsCisJCQkgICAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIiwKKwkJCSAgIG51bV9vdXJzKSwKKwkJCWJhc2UsIG51bV9vdXJzKTsKKwllbHNlIGlmICghbnVtX291cnMpCisJCXN0cmJ1Zl9hZGRmKHNiLAorCQkJUV8oIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgIgorCQkJICAgICAgICJhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIiwKKwkJCSAgICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCAiCisJCQkgICAgICAgImFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iLAorCQkJICAgbnVtX3RoZWlycyksCisJCQliYXNlLCBudW1fdGhlaXJzKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKHNiLAorCQkJUV8oIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisJCQkgICAgICAgImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsICIKKwkJCSAgICAgICAicmVzcGVjdGl2ZWx5LlxuIiwKKwkJCSAgICJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorCQkJICAgICAgICJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgIgorCQkJICAgICAgICJyZXNwZWN0aXZlbHkuXG4iLAorCQkJICAgbnVtX3RoZWlycyksCisJCQliYXNlLCBudW1fb3VycywgbnVtX3RoZWlycyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgb25lX2xvY2FsX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmVmICoqKmxvY2FsX3RhaWwgPSBjYl9kYXRhOworCXN0cnVjdCByZWYgKnJlZjsKKwlpbnQgbGVuOworCisJLyogd2UgYWxyZWFkeSBrbm93IGl0IHN0YXJ0cyB3aXRoIHJlZnMvIHRvIGdldCBoZXJlICovCisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZm5hbWUgKyA1LCAwKSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBzdHJsZW4ocmVmbmFtZSkgKyAxOworCXJlZiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZWYpICsgbGVuKTsKKwloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIHNoYTEpOworCW1lbWNweShyZWYtPm5hbWUsIHJlZm5hbWUsIGxlbik7CisJKipsb2NhbF90YWlsID0gcmVmOworCSpsb2NhbF90YWlsID0gJnJlZi0+bmV4dDsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlZiAqZ2V0X2xvY2FsX2hlYWRzKHZvaWQpCit7CisJc3RydWN0IHJlZiAqbG9jYWxfcmVmcyA9IE5VTEwsICoqbG9jYWxfdGFpbCA9ICZsb2NhbF9yZWZzOworCWZvcl9lYWNoX3JlZihvbmVfbG9jYWxfcmVmLCAmbG9jYWxfdGFpbCk7CisJcmV0dXJuIGxvY2FsX3JlZnM7Cit9CisKK3N0cnVjdCByZWYgKmd1ZXNzX3JlbW90ZV9oZWFkKGNvbnN0IHN0cnVjdCByZWYgKmhlYWQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAorCQkJICAgICAgaW50IGFsbCkKK3sKKwljb25zdCBzdHJ1Y3QgcmVmICpyOworCXN0cnVjdCByZWYgKmxpc3QgPSBOVUxMOworCXN0cnVjdCByZWYgKip0YWlsID0gJmxpc3Q7CisKKwlpZiAoIWhlYWQpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBTb21lIHRyYW5zcG9ydHMgc3VwcG9ydCBkaXJlY3RseSBwZWVraW5nIGF0CisJICogd2hlcmUgSEVBRCBwb2ludHM7IGlmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZW4KKwkgKiB3ZSBkb24ndCBoYXZlIHRvIGd1ZXNzLgorCSAqLworCWlmIChoZWFkLT5zeW1yZWYpCisJCXJldHVybiBjb3B5X3JlZihmaW5kX3JlZl9ieV9uYW1lKHJlZnMsIGhlYWQtPnN5bXJlZikpOworCisJLyogSWYgcmVmcy9oZWFkcy9tYXN0ZXIgY291bGQgYmUgcmlnaHQsIGl0IGlzLiAqLworCWlmICghYWxsKSB7CisJCXIgPSBmaW5kX3JlZl9ieV9uYW1lKHJlZnMsICJyZWZzL2hlYWRzL21hc3RlciIpOworCQlpZiAociAmJiAhaGFzaGNtcChyLT5vbGRfc2hhMSwgaGVhZC0+b2xkX3NoYTEpKQorCQkJcmV0dXJuIGNvcHlfcmVmKHIpOworCX0KKworCS8qIExvb2sgZm9yIGFub3RoZXIgcmVmIHRoYXQgcG9pbnRzIHRoZXJlICovCisJZm9yIChyID0gcmVmczsgcjsgciA9IHItPm5leHQpIHsKKwkJaWYgKHIgIT0gaGVhZCAmJgorCQkgICAgIXByZWZpeGNtcChyLT5uYW1lLCAicmVmcy9oZWFkcy8iKSAmJgorCQkgICAgIWhhc2hjbXAoci0+b2xkX3NoYTEsIGhlYWQtPm9sZF9zaGExKSkgeworCQkJKnRhaWwgPSBjb3B5X3JlZihyKTsKKwkJCXRhaWwgPSAmKCgqdGFpbCktPm5leHQpOworCQkJaWYgKCFhbGwpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gbGlzdDsKK30KKworc3RydWN0IHN0YWxlX2hlYWRzX2luZm8geworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmX25hbWVzOworCXN0cnVjdCByZWYgKipzdGFsZV9yZWZzX3RhaWw7CisJc3RydWN0IHJlZnNwZWMgKnJlZnM7CisJaW50IHJlZl9jb3VudDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3N0YWxlX2hlYWRzX2NiKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdGFsZV9oZWFkc19pbmZvICppbmZvID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmc3BlYyBxdWVyeTsKKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2Yoc3RydWN0IHJlZnNwZWMpKTsKKwlxdWVyeS5kc3QgPSAoY2hhciAqKXJlZm5hbWU7CisKKwlpZiAocXVlcnlfcmVmc3BlY3MoaW5mby0+cmVmcywgaW5mby0+cmVmX2NvdW50LCAmcXVlcnkpKQorCQlyZXR1cm4gMDsgLyogTm8gbWF0Y2hlcyAqLworCisJLyoKKwkgKiBJZiB3ZSBkaWQgZmluZCBhIHN1aXRhYmxlIHJlZnNwZWMgYW5kIGl0J3Mgbm90IGEgc3ltcmVmIGFuZAorCSAqIGl0J3Mgbm90IGluIHRoZSBsaXN0IG9mIHJlZnMgdGhhdCBjdXJyZW50bHkgZXhpc3QgaW4gdGhhdAorCSAqIHJlbW90ZSB3ZSBjb25zaWRlciBpdCB0byBiZSBzdGFsZS4KKwkgKi8KKwlpZiAoISgoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpIHx8CisJICAgICAgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhpbmZvLT5yZWZfbmFtZXMsIHF1ZXJ5LnNyYykpKSB7CisJCXN0cnVjdCByZWYgKnJlZiA9IG1ha2VfbGlua2VkX3JlZihyZWZuYW1lLCAmaW5mby0+c3RhbGVfcmVmc190YWlsKTsKKwkJaGFzaGNweShyZWYtPm5ld19zaGExLCBzaGExKTsKKwl9CisKKwlmcmVlKHF1ZXJ5LnNyYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZWYgKmdldF9zdGFsZV9oZWFkcyhzdHJ1Y3QgcmVmc3BlYyAqcmVmcywgaW50IHJlZl9jb3VudCwgc3RydWN0IHJlZiAqZmV0Y2hfbWFwKQoreworCXN0cnVjdCByZWYgKnJlZiwgKnN0YWxlX3JlZnMgPSBOVUxMOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZWZfbmFtZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdGFsZV9oZWFkc19pbmZvIGluZm87CisJaW5mby5yZWZfbmFtZXMgPSAmcmVmX25hbWVzOworCWluZm8uc3RhbGVfcmVmc190YWlsID0gJnN0YWxlX3JlZnM7CisJaW5mby5yZWZzID0gcmVmczsKKwlpbmZvLnJlZl9jb3VudCA9IHJlZl9jb3VudDsKKwlmb3IgKHJlZiA9IGZldGNoX21hcDsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVmX25hbWVzLCByZWYtPm5hbWUpOworCXNvcnRfc3RyaW5nX2xpc3QoJnJlZl9uYW1lcyk7CisJZm9yX2VhY2hfcmVmKGdldF9zdGFsZV9oZWFkc19jYiwgJmluZm8pOworCXN0cmluZ19saXN0X2NsZWFyKCZyZWZfbmFtZXMsIDApOworCXJldHVybiBzdGFsZV9yZWZzOworfQpkaWZmIC0tZ2l0IGEvcmVtb3RlLmggYi9yZW1vdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTFkOGZkCi0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlLmgKQEAgLTAsMCArMSwxNzIgQEAKKyNpZm5kZWYgUkVNT1RFX0gKKyNkZWZpbmUgUkVNT1RFX0gKKworZW51bSB7CisJUkVNT1RFX0NPTkZJRywKKwlSRU1PVEVfUkVNT1RFUywKKwlSRU1PVEVfQlJBTkNIRVMKK307CisKK3N0cnVjdCByZW1vdGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG9yaWdpbjsKKworCWNvbnN0IGNoYXIgKmZvcmVpZ25fdmNzOworCisJY29uc3QgY2hhciAqKnVybDsKKwlpbnQgdXJsX25yOworCWludCB1cmxfYWxsb2M7CisKKwljb25zdCBjaGFyICoqcHVzaHVybDsKKwlpbnQgcHVzaHVybF9ucjsKKwlpbnQgcHVzaHVybF9hbGxvYzsKKworCWNvbnN0IGNoYXIgKipwdXNoX3JlZnNwZWM7CisJc3RydWN0IHJlZnNwZWMgKnB1c2g7CisJaW50IHB1c2hfcmVmc3BlY19ucjsKKwlpbnQgcHVzaF9yZWZzcGVjX2FsbG9jOworCisJY29uc3QgY2hhciAqKmZldGNoX3JlZnNwZWM7CisJc3RydWN0IHJlZnNwZWMgKmZldGNoOworCWludCBmZXRjaF9yZWZzcGVjX25yOworCWludCBmZXRjaF9yZWZzcGVjX2FsbG9jOworCisJLyoKKwkgKiAtMSB0byBuZXZlciBmZXRjaCB0YWdzCisJICogMCB0byBhdXRvLWZvbGxvdyB0YWdzIG9uIGhldXJpc3RpYyAoZGVmYXVsdCkKKwkgKiAxIHRvIGFsd2F5cyBhdXRvLWZvbGxvdyB0YWdzCisJICogMiB0byBhbHdheXMgZmV0Y2ggdGFncworCSAqLworCWludCBmZXRjaF90YWdzOworCWludCBza2lwX2RlZmF1bHRfdXBkYXRlOworCWludCBtaXJyb3I7CisKKwljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKKwljb25zdCBjaGFyICp1cGxvYWRwYWNrOworCisJLyoKKwkgKiBmb3IgY3VybCByZW1vdGVzIG9ubHkKKwkgKi8KKwljaGFyICpodHRwX3Byb3h5OworfTsKKworc3RydWN0IHJlbW90ZSAqcmVtb3RlX2dldChjb25zdCBjaGFyICpuYW1lKTsKK2ludCByZW1vdGVfaXNfY29uZmlndXJlZChjb25zdCBjaGFyICpuYW1lKTsKKwordHlwZWRlZiBpbnQgZWFjaF9yZW1vdGVfZm4oc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpwcml2KTsKK2ludCBmb3JfZWFjaF9yZW1vdGUoZWFjaF9yZW1vdGVfZm4gZm4sIHZvaWQgKnByaXYpOworCitpbnQgcmVtb3RlX2hhc191cmwoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwpOworCitzdHJ1Y3QgcmVmc3BlYyB7CisJdW5zaWduZWQgZm9yY2UgOiAxOworCXVuc2lnbmVkIHBhdHRlcm4gOiAxOworCXVuc2lnbmVkIG1hdGNoaW5nIDogMTsKKworCWNoYXIgKnNyYzsKKwljaGFyICpkc3Q7Cit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IHJlZnNwZWMgKnRhZ19yZWZzcGVjOworCitzdHJ1Y3QgcmVmICphbGxvY19yZWYoY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgcmVmICpjb3B5X3JlZihjb25zdCBzdHJ1Y3QgcmVmICpyZWYpOworc3RydWN0IHJlZiAqY29weV9yZWZfbGlzdChjb25zdCBzdHJ1Y3QgcmVmICpyZWYpOwordm9pZCBzb3J0X3JlZl9saXN0KHN0cnVjdCByZWYgKiosIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKK2ludCByZWZfY29tcGFyZV9uYW1lKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKworaW50IGNoZWNrX3JlZl90eXBlKGNvbnN0IHN0cnVjdCByZWYgKnJlZiwgaW50IGZsYWdzKTsKKworLyoKKyAqIEZyZWVzIHRoZSBlbnRpcmUgbGlzdCBhbmQgcGVlcnMgb2YgZWxlbWVudHMuCisgKi8KK3ZvaWQgZnJlZV9yZWZzKHN0cnVjdCByZWYgKnJlZik7CisKK2ludCByZXNvbHZlX3JlbW90ZV9zeW1yZWYoc3RydWN0IHJlZiAqcmVmLCBzdHJ1Y3QgcmVmICpsaXN0KTsKK2ludCByZWZfbmV3ZXIoY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExKTsKKworLyoKKyAqIFJlbW92ZXMgYW5kIGZyZWVzIGFueSBkdXBsaWNhdGUgcmVmcyBpbiB0aGUgbWFwLgorICovCit2b2lkIHJlZl9yZW1vdmVfZHVwbGljYXRlcyhzdHJ1Y3QgcmVmICpyZWZfbWFwKTsKKworaW50IHZhbGlkX2ZldGNoX3JlZnNwZWMoY29uc3QgY2hhciAqcmVmc3BlYyk7CitzdHJ1Y3QgcmVmc3BlYyAqcGFyc2VfZmV0Y2hfcmVmc3BlYyhpbnQgbnJfcmVmc3BlYywgY29uc3QgY2hhciAqKnJlZnNwZWMpOworCit2b2lkIGZyZWVfcmVmc3BlYyhpbnQgbnJfcmVmc3BlYywgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMpOworCitjaGFyICphcHBseV9yZWZzcGVjcyhzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlY3MsIGludCBucl9yZWZzcGVjLAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpOworCitpbnQgbWF0Y2hfcHVzaF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqKmRzdCwKKwkJICAgIGludCBucl9yZWZzcGVjLCBjb25zdCBjaGFyICoqcmVmc3BlYywgaW50IGFsbCk7Cit2b2lkIHNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgc2VuZF9taXJyb3IsCisJaW50IGZvcmNlX3VwZGF0ZSk7CisKKy8qCisgKiBHaXZlbiBhIGxpc3Qgb2YgdGhlIHJlbW90ZSByZWZzIGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGluZ3MgdG8KKyAqIGZldGNoLCBtYWtlcyBhIChzZXBhcmF0ZSkgbGlzdCBvZiB0aGUgcmVmcyB0byBmZXRjaCBhbmQgdGhlIGxvY2FsCisgKiByZWZzIHRvIHN0b3JlIGludG8uCisgKgorICogKnRhaWwgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIHRhaWwgcG9pbnRlciBvZiB0aGUgbGlzdCBvZiByZXN1bHRzCisgKiBiZWZvcmVoYW5kLCBhbmQgd2lsbCBiZSBzZXQgdG8gdGhlIHRhaWwgcG9pbnRlciBvZiB0aGUgbGlzdCBvZgorICogcmVzdWx0cyBhZnRlcndhcmQuCisgKgorICogbWlzc2luZ19vayBpcyB1c3VhbGx5IGZhbHNlLCBidXQgd2hlbiB3ZSBhcmUgYWRkaW5nIGJyYW5jaC4kbmFtZS5tZXJnZQorICogaXQgaXMgT2sgaWYgdGhlIGJyYW5jaCBpcyBub3QgYXQgdGhlIHJlbW90ZSBhbnltb3JlLgorICovCitpbnQgZ2V0X2ZldGNoX21hcChjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMsCisJCSAgc3RydWN0IHJlZiAqKip0YWlsLCBpbnQgbWlzc2luZ19vayk7CisKK3N0cnVjdCByZWYgKmdldF9yZW1vdGVfcmVmKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBjb25zdCBjaGFyICpuYW1lKTsKKworLyoKKyAqIEZvciB0aGUgZ2l2ZW4gcmVtb3RlLCByZWFkcyB0aGUgcmVmc3BlYydzIHNyYyBhbmQgc2V0cyB0aGUgb3RoZXIgZmllbGRzLgorICovCitpbnQgcmVtb3RlX2ZpbmRfdHJhY2tpbmcoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYyk7CisKK3N0cnVjdCBicmFuY2ggeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqcmVmbmFtZTsKKworCWNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKworCWNvbnN0IGNoYXIgKiptZXJnZV9uYW1lOworCXN0cnVjdCByZWZzcGVjICoqbWVyZ2U7CisJaW50IG1lcmdlX25yOworCWludCBtZXJnZV9hbGxvYzsKK307CisKK3N0cnVjdCBicmFuY2ggKmJyYW5jaF9nZXQoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBicmFuY2hfaGFzX21lcmdlX2NvbmZpZyhzdHJ1Y3QgYnJhbmNoICpicmFuY2gpOworaW50IGJyYW5jaF9tZXJnZV9tYXRjaGVzKHN0cnVjdCBicmFuY2ggKiwgaW50IG4sIGNvbnN0IGNoYXIgKik7CisKKy8qIEZsYWdzIHRvIG1hdGNoX3JlZnMuICovCitlbnVtIG1hdGNoX3JlZnNfZmxhZ3MgeworCU1BVENIX1JFRlNfTk9ORQkJPSAwLAorCU1BVENIX1JFRlNfQUxMIAkJPSAoMSA8PCAwKSwKKwlNQVRDSF9SRUZTX01JUlJPUgk9ICgxIDw8IDEpLAorCU1BVENIX1JFRlNfUFJVTkUJPSAoMSA8PCAyKQorfTsKKworLyogUmVwb3J0aW5nIG9mIHRyYWNraW5nIGluZm8gKi8KK2ludCBzdGF0X3RyYWNraW5nX2luZm8oc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBpbnQgKm51bV9vdXJzLCBpbnQgKm51bV90aGVpcnMpOworaW50IGZvcm1hdF90cmFja2luZ19pbmZvKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHN0cmJ1ZiAqc2IpOworCitzdHJ1Y3QgcmVmICpnZXRfbG9jYWxfaGVhZHModm9pZCk7CisvKgorICogRmluZCByZWZzIGZyb20gYSBsaXN0IHdoaWNoIGFyZSBsaWtlbHkgdG8gYmUgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gSEVBRAorICogcmVmLiBJZiAnYWxsJyBpcyBmYWxzZSwgcmV0dXJucyB0aGUgbW9zdCBsaWtlbHkgcmVmOyBvdGhlcndpc2UsIHJldHVybnMgYQorICogbGlzdCBvZiBhbGwgY2FuZGlkYXRlIHJlZnMuIElmIG5vIG1hdGNoIGlzIGZvdW5kIChvciAnaGVhZCcgaXMgTlVMTCksCisgKiByZXR1cm5zIE5VTEwuIEFsbCByZXR1cm5zIGFyZSBuZXdseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBiZSBmcmVlZC4KKyAqLworc3RydWN0IHJlZiAqZ3Vlc3NfcmVtb3RlX2hlYWQoY29uc3Qgc3RydWN0IHJlZiAqaGVhZCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCisJCQkgICAgICBpbnQgYWxsKTsKKworLyogUmV0dXJuIHJlZnMgd2hpY2ggbm8gbG9uZ2VyIGV4aXN0IG9uIHJlbW90ZSAqLworc3RydWN0IHJlZiAqZ2V0X3N0YWxlX2hlYWRzKHN0cnVjdCByZWZzcGVjICpyZWZzLCBpbnQgcmVmX2NvdW50LCBzdHJ1Y3QgcmVmICpmZXRjaF9tYXApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JlcGxhY2Vfb2JqZWN0LmMgYi9yZXBsYWNlX29iamVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYjE1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZXBsYWNlX29iamVjdC5jCkBAIC0wLDAgKzEsMTE3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKworc3RhdGljIHN0cnVjdCByZXBsYWNlX29iamVjdCB7CisJdW5zaWduZWQgY2hhciBzaGExWzJdWzIwXTsKK30gKipyZXBsYWNlX29iamVjdDsKKworc3RhdGljIGludCByZXBsYWNlX29iamVjdF9hbGxvYywgcmVwbGFjZV9vYmplY3RfbnI7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXBsYWNlX3NoYTFfYWNjZXNzKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpCit7CisJc3RydWN0IHJlcGxhY2Vfb2JqZWN0ICoqcmVwbGFjZSA9IHRhYmxlOworCXJldHVybiByZXBsYWNlW2luZGV4XS0+c2hhMVswXTsKK30KKworc3RhdGljIGludCByZXBsYWNlX29iamVjdF9wb3MoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gc2hhMV9wb3Moc2hhMSwgcmVwbGFjZV9vYmplY3QsIHJlcGxhY2Vfb2JqZWN0X25yLAorCQkJcmVwbGFjZV9zaGExX2FjY2Vzcyk7Cit9CisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcmVwbGFjZV9vYmplY3Qoc3RydWN0IHJlcGxhY2Vfb2JqZWN0ICpyZXBsYWNlLAorCQkJCSAgIGludCBpZ25vcmVfZHVwcykKK3sKKwlpbnQgcG9zID0gcmVwbGFjZV9vYmplY3RfcG9zKHJlcGxhY2UtPnNoYTFbMF0pOworCisJaWYgKDAgPD0gcG9zKSB7CisJCWlmIChpZ25vcmVfZHVwcykKKwkJCWZyZWUocmVwbGFjZSk7CisJCWVsc2UgeworCQkJZnJlZShyZXBsYWNlX29iamVjdFtwb3NdKTsKKwkJCXJlcGxhY2Vfb2JqZWN0W3Bvc10gPSByZXBsYWNlOworCQl9CisJCXJldHVybiAxOworCX0KKwlwb3MgPSAtcG9zIC0gMTsKKwlpZiAocmVwbGFjZV9vYmplY3RfYWxsb2MgPD0gKytyZXBsYWNlX29iamVjdF9ucikgeworCQlyZXBsYWNlX29iamVjdF9hbGxvYyA9IGFsbG9jX25yKHJlcGxhY2Vfb2JqZWN0X2FsbG9jKTsKKwkJcmVwbGFjZV9vYmplY3QgPSB4cmVhbGxvYyhyZXBsYWNlX29iamVjdCwKKwkJCQkJICBzaXplb2YoKnJlcGxhY2Vfb2JqZWN0KSAqCisJCQkJCSAgcmVwbGFjZV9vYmplY3RfYWxsb2MpOworCX0KKwlpZiAocG9zIDwgcmVwbGFjZV9vYmplY3RfbnIpCisJCW1lbW1vdmUocmVwbGFjZV9vYmplY3QgKyBwb3MgKyAxLAorCQkJcmVwbGFjZV9vYmplY3QgKyBwb3MsCisJCQkocmVwbGFjZV9vYmplY3RfbnIgLSBwb3MgLSAxKSAqCisJCQlzaXplb2YoKnJlcGxhY2Vfb2JqZWN0KSk7CisJcmVwbGFjZV9vYmplY3RbcG9zXSA9IHJlcGxhY2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcmVwbGFjZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCWludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCS8qIEdldCBzaGExIGZyb20gcmVmbmFtZSAqLworCWNvbnN0IGNoYXIgKnNsYXNoID0gc3RycmNocihyZWZuYW1lLCAnLycpOworCWNvbnN0IGNoYXIgKmhhc2ggPSBzbGFzaCA/IHNsYXNoICsgMSA6IHJlZm5hbWU7CisJc3RydWN0IHJlcGxhY2Vfb2JqZWN0ICpyZXBsX29iaiA9IHhtYWxsb2Moc2l6ZW9mKCpyZXBsX29iaikpOworCisJaWYgKHN0cmxlbihoYXNoKSAhPSA0MCB8fCBnZXRfc2hhMV9oZXgoaGFzaCwgcmVwbF9vYmotPnNoYTFbMF0pKSB7CisJCWZyZWUocmVwbF9vYmopOworCQl3YXJuaW5nKCJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiLCByZWZuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ29weSBzaGExIGZyb20gdGhlIHJlYWQgcmVmICovCisJaGFzaGNweShyZXBsX29iai0+c2hhMVsxXSwgc2hhMSk7CisKKwkvKiBSZWdpc3RlciBuZXcgb2JqZWN0ICovCisJaWYgKHJlZ2lzdGVyX3JlcGxhY2Vfb2JqZWN0KHJlcGxfb2JqLCAxKSkKKwkJZGllKCJkdXBsaWNhdGUgcmVwbGFjZSByZWY6ICVzIiwgcmVmbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9yZXBsYWNlX29iamVjdCh2b2lkKQoreworCXN0YXRpYyBpbnQgcmVwbGFjZV9vYmplY3RfcHJlcGFyZWQ7CisKKwlpZiAocmVwbGFjZV9vYmplY3RfcHJlcGFyZWQpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3JlcGxhY2VfcmVmKHJlZ2lzdGVyX3JlcGxhY2VfcmVmLCBOVUxMKTsKKwlyZXBsYWNlX29iamVjdF9wcmVwYXJlZCA9IDE7CisJaWYgKCFyZXBsYWNlX29iamVjdF9ucikKKwkJcmVhZF9yZXBsYWNlX3JlZnMgPSAwOworfQorCisvKiBXZSBhbGxvdyAicmVjdXJzaXZlIiByZXBsYWNlbWVudC4gT25seSB3aXRoaW4gcmVhc29uLCB0aG91Z2ggKi8KKyNkZWZpbmUgTUFYUkVQTEFDRURFUFRIIDUKKworY29uc3QgdW5zaWduZWQgY2hhciAqZG9fbG9va3VwX3JlcGxhY2Vfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IHBvcywgZGVwdGggPSBNQVhSRVBMQUNFREVQVEg7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY3VyID0gc2hhMTsKKworCWlmICghcmVhZF9yZXBsYWNlX3JlZnMpCisJCXJldHVybiBzaGExOworCisJcHJlcGFyZV9yZXBsYWNlX29iamVjdCgpOworCisJLyogVHJ5IHRvIHJlY3Vyc2l2ZWx5IHJlcGxhY2UgdGhlIG9iamVjdCAqLworCWRvIHsKKwkJaWYgKC0tZGVwdGggPCAwKQorCQkJZGllKCJyZXBsYWNlIGRlcHRoIHRvbyBoaWdoIGZvciBvYmplY3QgJXMiLAorCQkJICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCQlwb3MgPSByZXBsYWNlX29iamVjdF9wb3MoY3VyKTsKKwkJaWYgKDAgPD0gcG9zKQorCQkJY3VyID0gcmVwbGFjZV9vYmplY3RbcG9zXS0+c2hhMVsxXTsKKwl9IHdoaWxlICgwIDw9IHBvcyk7CisKKwlyZXR1cm4gY3VyOworfQpkaWZmIC0tZ2l0IGEvcmVyZXJlLmMgYi9yZXJlcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmE1Y2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVyZXJlLmMKQEAgLTAsMCArMSw3NjQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisjaW5jbHVkZSAibGwtbWVyZ2UuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisKKyNkZWZpbmUgUkVTT0xWRUQgMAorI2RlZmluZSBQVU5URUQgMQorI2RlZmluZSBUSFJFRV9TVEFHRUQgMgordm9pZCAqUkVSRVJFX1JFU09MVkVEID0gJlJFUkVSRV9SRVNPTFZFRDsKKworLyogaWYgcmVyZXJlX2VuYWJsZWQgPT0gLTEsIGZhbGwgYmFjayB0byBkZXRlY3Rpb24gb2YgLmdpdC9yci1jYWNoZSAqLworc3RhdGljIGludCByZXJlcmVfZW5hYmxlZCA9IC0xOworCisvKiBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBjbGVhbmx5IHJlc29sdmVkIHBhdGhzIHRvIHRoZSBpbmRleCAqLworc3RhdGljIGludCByZXJlcmVfYXV0b3VwZGF0ZTsKKworc3RhdGljIGNoYXIgKm1lcmdlX3JyX3BhdGg7CisKK2NvbnN0IGNoYXIgKnJlcmVyZV9wYXRoKGNvbnN0IGNoYXIgKmhleCwgY29uc3QgY2hhciAqZmlsZSkKK3sKKwlyZXR1cm4gZ2l0X3BhdGgoInJyLWNhY2hlLyVzLyVzIiwgaGV4LCBmaWxlKTsKK30KKworc3RhdGljIGludCBoYXNfcmVyZXJlX3Jlc29sdXRpb24oY29uc3QgY2hhciAqaGV4KQoreworCXN0cnVjdCBzdGF0IHN0OworCXJldHVybiAhc3RhdChyZXJlcmVfcGF0aChoZXgsICJwb3N0aW1hZ2UiKSwgJnN0KTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9ycihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJyKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciBidWZbUEFUSF9NQVhdOworCUZJTEUgKmluID0gZm9wZW4obWVyZ2VfcnJfcGF0aCwgInIiKTsKKwlpZiAoIWluKQorCQlyZXR1cm47CisJd2hpbGUgKGZyZWFkKGJ1ZiwgNDAsIDEsIGluKSA9PSAxKSB7CisJCWludCBpOworCQljaGFyICpuYW1lOworCQlpZiAoZ2V0X3NoYTFfaGV4KGJ1Ziwgc2hhMSkpCisJCQlkaWUoImNvcnJ1cHQgTUVSR0VfUlIiKTsKKwkJYnVmWzQwXSA9ICdcMCc7CisJCW5hbWUgPSB4c3RyZHVwKGJ1Zik7CisJCWlmIChmZ2V0YyhpbikgIT0gJ1x0JykKKwkJCWRpZSgiY29ycnVwdCBNRVJHRV9SUiIpOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykgeworCQkJaW50IGMgPSBmZ2V0Yyhpbik7CisJCQlpZiAoYyA8IDApCisJCQkJZGllKCJjb3JydXB0IE1FUkdFX1JSIik7CisJCQlidWZbaV0gPSBjOworCQkJaWYgKGMgPT0gMCkKKwkJCQkgYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gc2l6ZW9mKGJ1ZikpCisJCQlkaWUoImZpbGVuYW1lIHRvbyBsb25nIik7CisJCXN0cmluZ19saXN0X2luc2VydChyciwgYnVmKS0+dXRpbCA9IG5hbWU7CisJfQorCWZjbG9zZShpbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIHdyaXRlX2xvY2s7CisKK3N0YXRpYyBpbnQgd3JpdGVfcnIoc3RydWN0IHN0cmluZ19saXN0ICpyciwgaW50IG91dF9mZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcnItPm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aDsKKwkJaW50IGxlbmd0aDsKKwkJaWYgKCFyci0+aXRlbXNbaV0udXRpbCkKKwkJCWNvbnRpbnVlOworCQlwYXRoID0gcnItPml0ZW1zW2ldLnN0cmluZzsKKwkJbGVuZ3RoID0gc3RybGVuKHBhdGgpICsgMTsKKwkJaWYgKHdyaXRlX2luX2Z1bGwob3V0X2ZkLCByci0+aXRlbXNbaV0udXRpbCwgNDApICE9IDQwIHx8CisJCSAgICB3cml0ZV9zdHJfaW5fZnVsbChvdXRfZmQsICJcdCIpICE9IDEgfHwKKwkJICAgIHdyaXRlX2luX2Z1bGwob3V0X2ZkLCBwYXRoLCBsZW5ndGgpICE9IGxlbmd0aCkKKwkJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiKTsKKwl9CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJndyaXRlX2xvY2spICE9IDApCisJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmVycl93cml0ZShjb25zdCB2b2lkICpwLCBzaXplX3QgY291bnQsIEZJTEUgKmZwLCBpbnQgKmVycikKK3sKKwlpZiAoIWNvdW50IHx8ICplcnIpCisJCXJldHVybjsKKwlpZiAoZndyaXRlKHAsIGNvdW50LCAxLCBmcCkgIT0gMSkKKwkJKmVyciA9IGVycm5vOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmVycl9wdXRzKGNvbnN0IGNoYXIgKnMsIEZJTEUgKmZwLCBpbnQgKmVycikKK3sKKwlmZXJyX3dyaXRlKHMsIHN0cmxlbihzKSwgZnAsIGVycik7Cit9CisKK3N0cnVjdCByZXJlcmVfaW8geworCWludCAoKmdldGxpbmUpKHN0cnVjdCBzdHJidWYgKiwgc3RydWN0IHJlcmVyZV9pbyAqKTsKKwlGSUxFICpvdXRwdXQ7CisJaW50IHdyZXJyb3I7CisJLyogc29tZSBtb3JlIHN0dWZmICovCit9OworCitzdGF0aWMgdm9pZCByZXJlcmVfaW9fcHV0c3RyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHJlcmVyZV9pbyAqaW8pCit7CisJaWYgKGlvLT5vdXRwdXQpCisJCWZlcnJfcHV0cyhzdHIsIGlvLT5vdXRwdXQsICZpby0+d3JlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcmVyZV9pb19wdXRjb25mbGljdChpbnQgY2gsIGludCBzaXplLCBzdHJ1Y3QgcmVyZXJlX2lvICppbykKK3sKKwljaGFyIGJ1Zls2NF07CisKKwl3aGlsZSAoc2l6ZSkgeworCQlpZiAoc2l6ZSA8IHNpemVvZihidWYpIC0gMikgeworCQkJbWVtc2V0KGJ1ZiwgY2gsIHNpemUpOworCQkJYnVmW3NpemVdID0gJ1xuJzsKKwkJCWJ1ZltzaXplICsgMV0gPSAnXDAnOworCQkJc2l6ZSA9IDA7CisJCX0gZWxzZSB7CisJCQlpbnQgc3ogPSBzaXplb2YoYnVmKSAtIDE7CisJCQlpZiAoc2l6ZSA8PSBzeikKKwkJCQlzeiAtPSAoc3ogLSBzaXplKSArIDE7CisJCQltZW1zZXQoYnVmLCBjaCwgc3opOworCQkJYnVmW3N6XSA9ICdcMCc7CisJCQlzaXplIC09IHN6OworCQl9CisJCXJlcmVyZV9pb19wdXRzdHIoYnVmLCBpbyk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZXJlcmVfaW9fcHV0bWVtKGNvbnN0IGNoYXIgKm1lbSwgc2l6ZV90IHN6LCBzdHJ1Y3QgcmVyZXJlX2lvICppbykKK3sKKwlpZiAoaW8tPm91dHB1dCkKKwkJZmVycl93cml0ZShtZW0sIHN6LCBpby0+b3V0cHV0LCAmaW8tPndyZXJyb3IpOworfQorCitzdHJ1Y3QgcmVyZXJlX2lvX2ZpbGUgeworCXN0cnVjdCByZXJlcmVfaW8gaW87CisJRklMRSAqaW5wdXQ7Cit9OworCitzdGF0aWMgaW50IHJlcmVyZV9maWxlX2dldGxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCByZXJlcmVfaW8gKmlvXykKK3sKKwlzdHJ1Y3QgcmVyZXJlX2lvX2ZpbGUgKmlvID0gKHN0cnVjdCByZXJlcmVfaW9fZmlsZSAqKWlvXzsKKwlyZXR1cm4gc3RyYnVmX2dldHdob2xlbGluZShzYiwgaW8tPmlucHV0LCAnXG4nKTsKK30KKworc3RhdGljIGludCBpc19jbWFya2VyKGNoYXIgKmJ1ZiwgaW50IG1hcmtlcl9jaGFyLCBpbnQgbWFya2VyX3NpemUsIGludCB3YW50X3NwKQoreworCXdoaWxlIChtYXJrZXJfc2l6ZS0tKQorCQlpZiAoKmJ1ZisrICE9IG1hcmtlcl9jaGFyKQorCQkJcmV0dXJuIDA7CisJaWYgKHdhbnRfc3AgJiYgKmJ1ZiAhPSAnICcpCisJCXJldHVybiAwOworCXJldHVybiBpc3NwYWNlKCpidWYpOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9wYXRoKHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCByZXJlcmVfaW8gKmlvLCBpbnQgbWFya2VyX3NpemUpCit7CisJZ2l0X1NIQV9DVFggY3R4OworCWludCBodW5rX25vID0gMDsKKwllbnVtIHsKKwkJUlJfQ09OVEVYVCA9IDAsIFJSX1NJREVfMSwgUlJfU0lERV8yLCBSUl9PUklHSU5BTAorCX0gaHVuayA9IFJSX0NPTlRFWFQ7CisJc3RydWN0IHN0cmJ1ZiBvbmUgPSBTVFJCVUZfSU5JVCwgdHdvID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChzaGExKQorCQlnaXRfU0hBMV9Jbml0KCZjdHgpOworCisJd2hpbGUgKCFpby0+Z2V0bGluZSgmYnVmLCBpbykpIHsKKwkJaWYgKGlzX2NtYXJrZXIoYnVmLmJ1ZiwgJzwnLCBtYXJrZXJfc2l6ZSwgMSkpIHsKKwkJCWlmIChodW5rICE9IFJSX0NPTlRFWFQpCisJCQkJZ290byBiYWQ7CisJCQlodW5rID0gUlJfU0lERV8xOworCQl9IGVsc2UgaWYgKGlzX2NtYXJrZXIoYnVmLmJ1ZiwgJ3wnLCBtYXJrZXJfc2l6ZSwgMCkpIHsKKwkJCWlmIChodW5rICE9IFJSX1NJREVfMSkKKwkJCQlnb3RvIGJhZDsKKwkJCWh1bmsgPSBSUl9PUklHSU5BTDsKKwkJfSBlbHNlIGlmIChpc19jbWFya2VyKGJ1Zi5idWYsICc9JywgbWFya2VyX3NpemUsIDApKSB7CisJCQlpZiAoaHVuayAhPSBSUl9TSURFXzEgJiYgaHVuayAhPSBSUl9PUklHSU5BTCkKKwkJCQlnb3RvIGJhZDsKKwkJCWh1bmsgPSBSUl9TSURFXzI7CisJCX0gZWxzZSBpZiAoaXNfY21hcmtlcihidWYuYnVmLCAnPicsIG1hcmtlcl9zaXplLCAxKSkgeworCQkJaWYgKGh1bmsgIT0gUlJfU0lERV8yKQorCQkJCWdvdG8gYmFkOworCQkJaWYgKHN0cmJ1Zl9jbXAoJm9uZSwgJnR3bykgPiAwKQorCQkJCXN0cmJ1Zl9zd2FwKCZvbmUsICZ0d28pOworCQkJaHVua19ubysrOworCQkJaHVuayA9IFJSX0NPTlRFWFQ7CisJCQlyZXJlcmVfaW9fcHV0Y29uZmxpY3QoJzwnLCBtYXJrZXJfc2l6ZSwgaW8pOworCQkJcmVyZXJlX2lvX3B1dG1lbShvbmUuYnVmLCBvbmUubGVuLCBpbyk7CisJCQlyZXJlcmVfaW9fcHV0Y29uZmxpY3QoJz0nLCBtYXJrZXJfc2l6ZSwgaW8pOworCQkJcmVyZXJlX2lvX3B1dG1lbSh0d28uYnVmLCB0d28ubGVuLCBpbyk7CisJCQlyZXJlcmVfaW9fcHV0Y29uZmxpY3QoJz4nLCBtYXJrZXJfc2l6ZSwgaW8pOworCQkJaWYgKHNoYTEpIHsKKwkJCQlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgb25lLmJ1ZiA/IG9uZS5idWYgOiAiIiwKKwkJCQkJICAgIG9uZS5sZW4gKyAxKTsKKwkJCQlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgdHdvLmJ1ZiA/IHR3by5idWYgOiAiIiwKKwkJCQkJICAgIHR3by5sZW4gKyAxKTsKKwkJCX0KKwkJCXN0cmJ1Zl9yZXNldCgmb25lKTsKKwkJCXN0cmJ1Zl9yZXNldCgmdHdvKTsKKwkJfSBlbHNlIGlmIChodW5rID09IFJSX1NJREVfMSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJm9uZSwgYnVmLmJ1Zik7CisJCWVsc2UgaWYgKGh1bmsgPT0gUlJfT1JJR0lOQUwpCisJCQk7IC8qIGRpc2NhcmQgKi8KKwkJZWxzZSBpZiAoaHVuayA9PSBSUl9TSURFXzIpCisJCQlzdHJidWZfYWRkc3RyKCZ0d28sIGJ1Zi5idWYpOworCQllbHNlCisJCQlyZXJlcmVfaW9fcHV0c3RyKGJ1Zi5idWYsIGlvKTsKKwkJY29udGludWU7CisJYmFkOgorCQlodW5rID0gOTk7IC8qIGZvcmNlIGVycm9yIGV4aXQgKi8KKwkJYnJlYWs7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZvbmUpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0d28pOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJaWYgKHNoYTEpCisJCWdpdF9TSEExX0ZpbmFsKHNoYTEsICZjdHgpOworCWlmIChodW5rICE9IFJSX0NPTlRFWFQpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gaHVua19ubzsKK30KKworc3RhdGljIGludCBoYW5kbGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpvdXRwdXQpCit7CisJaW50IGh1bmtfbm8gPSAwOworCXN0cnVjdCByZXJlcmVfaW9fZmlsZSBpbzsKKwlpbnQgbWFya2VyX3NpemUgPSBsbF9tZXJnZV9tYXJrZXJfc2l6ZShwYXRoKTsKKworCW1lbXNldCgmaW8sIDAsIHNpemVvZihpbykpOworCWlvLmlvLmdldGxpbmUgPSByZXJlcmVfZmlsZV9nZXRsaW5lOworCWlvLmlucHV0ID0gZm9wZW4ocGF0aCwgInIiKTsKKwlpby5pby53cmVycm9yID0gMDsKKwlpZiAoIWlvLmlucHV0KQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBvcGVuICVzIiwgcGF0aCk7CisKKwlpZiAob3V0cHV0KSB7CisJCWlvLmlvLm91dHB1dCA9IGZvcGVuKG91dHB1dCwgInciKTsKKwkJaWYgKCFpby5pby5vdXRwdXQpIHsKKwkJCWZjbG9zZShpby5pbnB1dCk7CisJCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCB3cml0ZSAlcyIsIG91dHB1dCk7CisJCX0KKwl9CisKKwlodW5rX25vID0gaGFuZGxlX3BhdGgoc2hhMSwgKHN0cnVjdCByZXJlcmVfaW8gKikmaW8sIG1hcmtlcl9zaXplKTsKKworCWZjbG9zZShpby5pbnB1dCk7CisJaWYgKGlvLmlvLndyZXJyb3IpCisJCWVycm9yKCJUaGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICVzICglcykiLAorCQkgICAgICBwYXRoLCBzdHJlcnJvcihpby5pby53cmVycm9yKSk7CisJaWYgKGlvLmlvLm91dHB1dCAmJiBmY2xvc2UoaW8uaW8ub3V0cHV0KSkKKwkJaW8uaW8ud3JlcnJvciA9IGVycm9yKCJGYWlsZWQgdG8gZmx1c2ggJXM6ICVzIiwKKwkJCQkgICAgICBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCisJaWYgKGh1bmtfbm8gPCAwKSB7CisJCWlmIChvdXRwdXQpCisJCQl1bmxpbmtfb3Jfd2FybihvdXRwdXQpOworCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAlcyIsIHBhdGgpOworCX0KKwlpZiAoaW8uaW8ud3JlcnJvcikKKwkJcmV0dXJuIC0xOworCXJldHVybiBodW5rX25vOworfQorCitzdHJ1Y3QgcmVyZXJlX2lvX21lbSB7CisJc3RydWN0IHJlcmVyZV9pbyBpbzsKKwlzdHJ1Y3Qgc3RyYnVmIGlucHV0OworfTsKKworc3RhdGljIGludCByZXJlcmVfbWVtX2dldGxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCByZXJlcmVfaW8gKmlvXykKK3sKKwlzdHJ1Y3QgcmVyZXJlX2lvX21lbSAqaW8gPSAoc3RydWN0IHJlcmVyZV9pb19tZW0gKilpb187CisJY2hhciAqZXA7CisJc2l6ZV90IGxlbjsKKworCXN0cmJ1Zl9yZWxlYXNlKHNiKTsKKwlpZiAoIWlvLT5pbnB1dC5sZW4pCisJCXJldHVybiAtMTsKKwllcCA9IHN0cmNocm51bChpby0+aW5wdXQuYnVmLCAnXG4nKTsKKwlpZiAoKmVwID09ICdcbicpCisJCWVwKys7CisJbGVuID0gZXAgLSBpby0+aW5wdXQuYnVmOworCXN0cmJ1Zl9hZGQoc2IsIGlvLT5pbnB1dC5idWYsIGxlbik7CisJc3RyYnVmX3JlbW92ZSgmaW8tPmlucHV0LCAwLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9jYWNoZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpvdXRwdXQpCit7CisJbW1maWxlX3QgbW1maWxlWzNdOworCW1tYnVmZmVyX3QgcmVzdWx0ID0ge05VTEwsIDB9OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJaW50IHBvcywgbGVuLCBpLCBodW5rX25vOworCXN0cnVjdCByZXJlcmVfaW9fbWVtIGlvOworCWludCBtYXJrZXJfc2l6ZSA9IGxsX21lcmdlX21hcmtlcl9zaXplKHBhdGgpOworCisJLyoKKwkgKiBSZXByb2R1Y2UgdGhlIGNvbmZsaWN0ZWQgbWVyZ2UgaW4tY29yZQorCSAqLworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBsZW4pOworCWlmICgwIDw9IHBvcykKKwkJcmV0dXJuIC0xOworCXBvcyA9IC1wb3MgLSAxOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCQltbWZpbGVbaV0uc2l6ZSA9IDA7CisJCW1tZmlsZVtpXS5wdHIgPSBOVUxMOworCQlpZiAoYWN0aXZlX25yIDw9IHBvcykKKwkJCWJyZWFrOworCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisJCWlmIChjZV9uYW1lbGVuKGNlKSAhPSBsZW4gfHwgbWVtY21wKGNlLT5uYW1lLCBwYXRoLCBsZW4pCisJCSAgICB8fCBjZV9zdGFnZShjZSkgIT0gaSArIDEpCisJCQlicmVhazsKKwkJbW1maWxlW2ldLnB0ciA9IHJlYWRfc2hhMV9maWxlKGNlLT5zaGExLCAmdHlwZSwgJnNpemUpOworCQltbWZpbGVbaV0uc2l6ZSA9IHNpemU7CisJfQorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKCFtbWZpbGVbaV0ucHRyICYmICFtbWZpbGVbaV0uc2l6ZSkKKwkJCW1tZmlsZVtpXS5wdHIgPSB4c3RyZHVwKCIiKTsKKwl9CisJLyoKKwkgKiBORUVEU1dPUks6IGhhbmRsZSBjb25mbGljdHMgZnJvbSBtZXJnZXMgd2l0aAorCSAqIG1lcmdlLnJlbm9ybWFsaXplIHNldCwgdG9vCisJICovCisJbGxfbWVyZ2UoJnJlc3VsdCwgcGF0aCwgJm1tZmlsZVswXSwgTlVMTCwKKwkJICZtbWZpbGVbMV0sICJvdXJzIiwKKwkJICZtbWZpbGVbMl0sICJ0aGVpcnMiLCBOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlmcmVlKG1tZmlsZVtpXS5wdHIpOworCisJbWVtc2V0KCZpbywgMCwgc2l6ZW9mKGlvKSk7CisJaW8uaW8uZ2V0bGluZSA9IHJlcmVyZV9tZW1fZ2V0bGluZTsKKwlpZiAob3V0cHV0KQorCQlpby5pby5vdXRwdXQgPSBmb3BlbihvdXRwdXQsICJ3Iik7CisJZWxzZQorCQlpby5pby5vdXRwdXQgPSBOVUxMOworCXN0cmJ1Zl9pbml0KCZpby5pbnB1dCwgMCk7CisJc3RyYnVmX2F0dGFjaCgmaW8uaW5wdXQsIHJlc3VsdC5wdHIsIHJlc3VsdC5zaXplLCByZXN1bHQuc2l6ZSk7CisKKwlodW5rX25vID0gaGFuZGxlX3BhdGgoc2hhMSwgKHN0cnVjdCByZXJlcmVfaW8gKikmaW8sIG1hcmtlcl9zaXplKTsKKwlzdHJidWZfcmVsZWFzZSgmaW8uaW5wdXQpOworCWlmIChpby5pby5vdXRwdXQpCisJCWZjbG9zZShpby5pby5vdXRwdXQpOworCXJldHVybiBodW5rX25vOworfQorCitzdGF0aWMgaW50IGNoZWNrX29uZV9jb25mbGljdChpbnQgaSwgaW50ICp0eXBlKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKworCWlmICghY2Vfc3RhZ2UoZSkpIHsKKwkJKnR5cGUgPSBSRVNPTFZFRDsKKwkJcmV0dXJuIGkgKyAxOworCX0KKworCSp0eXBlID0gUFVOVEVEOworCWlmIChjZV9zdGFnZShlKSA9PSAxKSB7CisJCWlmIChhY3RpdmVfbnIgPD0gKytpKQorCQkJcmV0dXJuIGkgKyAxOworCX0KKworCS8qIE9ubHkgaGFuZGxlIHJlZ3VsYXIgZmlsZXMgd2l0aCBib3RoIHN0YWdlcyAjMiBhbmQgIzMgKi8KKwlpZiAoaSArIDEgPCBhY3RpdmVfbnIpIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICplMiA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICplMyA9IGFjdGl2ZV9jYWNoZVtpICsgMV07CisJCWlmIChjZV9zdGFnZShlMikgPT0gMiAmJgorCQkgICAgY2Vfc3RhZ2UoZTMpID09IDMgJiYKKwkJICAgIGNlX3NhbWVfbmFtZShlLCBlMykgJiYKKwkJICAgIFNfSVNSRUcoZTItPmNlX21vZGUpICYmCisJCSAgICBTX0lTUkVHKGUzLT5jZV9tb2RlKSkKKwkJCSp0eXBlID0gVEhSRUVfU1RBR0VEOworCX0KKworCS8qIFNraXAgdGhlIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBuYW1lICovCisJd2hpbGUgKGkgPCBhY3RpdmVfbnIgJiYgY2Vfc2FtZV9uYW1lKGUsIGFjdGl2ZV9jYWNoZVtpXSkpCisJCWkrKzsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBmaW5kX2NvbmZsaWN0KHN0cnVjdCBzdHJpbmdfbGlzdCAqY29uZmxpY3QpCit7CisJaW50IGk7CisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHJlYWQgaW5kZXgiKTsKKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7KSB7CisJCWludCBjb25mbGljdF90eXBlOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmUgPSBhY3RpdmVfY2FjaGVbaV07CisJCWkgPSBjaGVja19vbmVfY29uZmxpY3QoaSwgJmNvbmZsaWN0X3R5cGUpOworCQlpZiAoY29uZmxpY3RfdHlwZSA9PSBUSFJFRV9TVEFHRUQpCisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoY29uZmxpY3QsIChjb25zdCBjaGFyICopZS0+bmFtZSk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcmVyZXJlX3JlbWFpbmluZyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1lcmdlX3JyKQoreworCWludCBpOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCByZWFkIGluZGV4Iik7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOykgeworCQlpbnQgY29uZmxpY3RfdHlwZTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICplID0gYWN0aXZlX2NhY2hlW2ldOworCQlpID0gY2hlY2tfb25lX2NvbmZsaWN0KGksICZjb25mbGljdF90eXBlKTsKKwkJaWYgKGNvbmZsaWN0X3R5cGUgPT0gUFVOVEVEKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KG1lcmdlX3JyLCAoY29uc3QgY2hhciAqKWUtPm5hbWUpOworCQllbHNlIGlmIChjb25mbGljdF90eXBlID09IFJFU09MVkVEKSB7CisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCQlpdCA9IHN0cmluZ19saXN0X2xvb2t1cChtZXJnZV9yciwgKGNvbnN0IGNoYXIgKillLT5uYW1lKTsKKwkJCWlmIChpdCAhPSBOVUxMKSB7CisJCQkJZnJlZShpdC0+dXRpbCk7CisJCQkJaXQtPnV0aWwgPSBSRVJFUkVfUkVTT0xWRUQ7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2UoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgcmV0OworCW1tZmlsZV90IGN1ciA9IHtOVUxMLCAwfSwgYmFzZSA9IHtOVUxMLCAwfSwgb3RoZXIgPSB7TlVMTCwgMH07CisJbW1idWZmZXJfdCByZXN1bHQgPSB7TlVMTCwgMH07CisKKwlpZiAoaGFuZGxlX2ZpbGUocGF0aCwgTlVMTCwgcmVyZXJlX3BhdGgobmFtZSwgInRoaXNpbWFnZSIpKSA8IDApCisJCXJldHVybiAxOworCisJaWYgKHJlYWRfbW1maWxlKCZjdXIsIHJlcmVyZV9wYXRoKG5hbWUsICJ0aGlzaW1hZ2UiKSkgfHwKKwkJCXJlYWRfbW1maWxlKCZiYXNlLCByZXJlcmVfcGF0aChuYW1lLCAicHJlaW1hZ2UiKSkgfHwKKwkJCXJlYWRfbW1maWxlKCZvdGhlciwgcmVyZXJlX3BhdGgobmFtZSwgInBvc3RpbWFnZSIpKSkgeworCQlyZXQgPSAxOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gbGxfbWVyZ2UoJnJlc3VsdCwgcGF0aCwgJmJhc2UsIE5VTEwsICZjdXIsICIiLCAmb3RoZXIsICIiLCBOVUxMKTsKKwlpZiAoIXJldCkgeworCQlGSUxFICpmOworCisJCWlmICh1dGltZShyZXJlcmVfcGF0aChuYW1lLCAicG9zdGltYWdlIiksIE5VTEwpIDwgMCkKKwkJCXdhcm5pbmcoImZhaWxlZCB1dGltZSgpIG9uICVzOiAlcyIsCisJCQkJCXJlcmVyZV9wYXRoKG5hbWUsICJwb3N0aW1hZ2UiKSwKKwkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJZiA9IGZvcGVuKHBhdGgsICJ3Iik7CisJCWlmICghZikKKwkJCXJldHVybiBlcnJvcigiQ291bGQgbm90IG9wZW4gJXM6ICVzIiwgcGF0aCwKKwkJCQkgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCWlmIChmd3JpdGUocmVzdWx0LnB0ciwgcmVzdWx0LnNpemUsIDEsIGYpICE9IDEpCisJCQllcnJvcigiQ291bGQgbm90IHdyaXRlICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWlmIChmY2xvc2UoZikpCisJCQlyZXR1cm4gZXJyb3IoIldyaXRpbmcgJXMgZmFpbGVkOiAlcyIsIHBhdGgsCisJCQkJICAgICBzdHJlcnJvcihlcnJubykpOworCX0KKworb3V0OgorCWZyZWUoY3VyLnB0cik7CisJZnJlZShiYXNlLnB0cik7CisJZnJlZShvdGhlci5wdHIpOworCWZyZWUocmVzdWx0LnB0cik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrOworCitzdGF0aWMgaW50IHVwZGF0ZV9wYXRocyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnVwZGF0ZSkKK3sKKwlpbnQgaTsKKwlpbnQgZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgMCk7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXBkYXRlLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gJnVwZGF0ZS0+aXRlbXNbaV07CisJCWlmIChhZGRfZmlsZV90b19jYWNoZShpdGVtLT5zdHJpbmcsIEFERF9DQUNIRV9JR05PUkVfRVJST1JTKSkKKwkJCXN0YXR1cyA9IC0xOworCX0KKworCWlmICghc3RhdHVzICYmIGFjdGl2ZV9jYWNoZV9jaGFuZ2VkKSB7CisJCWlmICh3cml0ZV9jYWNoZShmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJCSAgICBjb21taXRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrKSkKKwkJCWRpZSgiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIik7CisJfSBlbHNlIGlmIChmZCA+PSAwKQorCQlyb2xsYmFja19sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZG9fcGxhaW5fcmVyZXJlKHN0cnVjdCBzdHJpbmdfbGlzdCAqcnIsIGludCBmZCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY29uZmxpY3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdXBkYXRlID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGk7CisKKwlmaW5kX2NvbmZsaWN0KCZjb25mbGljdCk7CisKKwkvKgorCSAqIE1FUkdFX1JSIHJlY29yZHMgcGF0aHMgd2l0aCBjb25mbGljdHMgaW1tZWRpYXRlbHkgYWZ0ZXIgbWVyZ2UKKwkgKiBmYWlsZWQuICBTb21lIG9mIHRoZSBjb25mbGljdGVkIHBhdGhzIG1pZ2h0IGhhdmUgYmVlbiBoYW5kIHJlc29sdmVkCisJICogaW4gdGhlIHdvcmtpbmcgdHJlZSBzaW5jZSB0aGVuLCBidXQgdGhlIGluaXRpYWwgcnVuIHdvdWxkIGNhdGNoIGFsbAorCSAqIGFuZCByZWdpc3RlciB0aGVpciBwcmVpbWFnZXMuCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmxpY3QubnI7IGkrKykgeworCQljb25zdCBjaGFyICpwYXRoID0gY29uZmxpY3QuaXRlbXNbaV0uc3RyaW5nOworCQlpZiAoIXN0cmluZ19saXN0X2hhc19zdHJpbmcocnIsIHBhdGgpKSB7CisJCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQkJY2hhciAqaGV4OworCQkJaW50IHJldDsKKwkJCXJldCA9IGhhbmRsZV9maWxlKHBhdGgsIHNoYTEsIE5VTEwpOworCQkJaWYgKHJldCA8IDEpCisJCQkJY29udGludWU7CisJCQloZXggPSB4c3RyZHVwKHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCXN0cmluZ19saXN0X2luc2VydChyciwgcGF0aCktPnV0aWwgPSBoZXg7CisJCQlpZiAobWtkaXJfaW5fZ2l0ZGlyKGdpdF9wYXRoKCJyci1jYWNoZS8lcyIsIGhleCkpKQorCQkJCWNvbnRpbnVlOworCQkJaGFuZGxlX2ZpbGUocGF0aCwgTlVMTCwgcmVyZXJlX3BhdGgoaGV4LCAicHJlaW1hZ2UiKSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnXG4iLCBwYXRoKTsKKwkJfQorCX0KKworCS8qCisJICogTm93IHNvbWUgb2YgdGhlIHBhdGhzIHRoYXQgaGFkIGNvbmZsaWN0cyBlYXJsaWVyIG1pZ2h0IGhhdmUgYmVlbgorCSAqIGhhbmQgcmVzb2x2ZWQuICBPdGhlcnMgbWF5IGJlIHNpbWlsYXIgdG8gYSBjb25mbGljdCBhbHJlYWR5IHRoYXQKKwkgKiB3YXMgcmVzb2x2ZWQgYmVmb3JlLgorCSAqLworCisJZm9yIChpID0gMDsgaSA8IHJyLT5ucjsgaSsrKSB7CisJCWludCByZXQ7CisJCWNvbnN0IGNoYXIgKnBhdGggPSByci0+aXRlbXNbaV0uc3RyaW5nOworCQljb25zdCBjaGFyICpuYW1lID0gKGNvbnN0IGNoYXIgKilyci0+aXRlbXNbaV0udXRpbDsKKworCQlpZiAoaGFzX3JlcmVyZV9yZXNvbHV0aW9uKG5hbWUpKSB7CisJCQlpZiAoIW1lcmdlKG5hbWUsIHBhdGgpKSB7CisJCQkJY29uc3QgY2hhciAqbXNnOworCQkJCWlmIChyZXJlcmVfYXV0b3VwZGF0ZSkgeworCQkJCQlzdHJpbmdfbGlzdF9pbnNlcnQoJnVwZGF0ZSwgcGF0aCk7CisJCQkJCW1zZyA9ICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLlxuIjsKKwkJCQl9IGVsc2UKKwkJCQkJbXNnID0gIlJlc29sdmVkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi5cbiI7CisJCQkJZnByaW50ZihzdGRlcnIsIG1zZywgcGF0aCk7CisJCQkJZ290byBtYXJrX3Jlc29sdmVkOworCQkJfQorCQl9CisKKwkJLyogTGV0J3Mgc2VlIGlmIHdlIGhhdmUgcmVzb2x2ZWQgaXQuICovCisJCXJldCA9IGhhbmRsZV9maWxlKHBhdGgsIE5VTEwsIE5VTEwpOworCQlpZiAocmV0KQorCQkJY29udGludWU7CisKKwkJZnByaW50ZihzdGRlcnIsICJSZWNvcmRlZCByZXNvbHV0aW9uIGZvciAnJXMnLlxuIiwgcGF0aCk7CisJCWNvcHlfZmlsZShyZXJlcmVfcGF0aChuYW1lLCAicG9zdGltYWdlIiksIHBhdGgsIDA2NjYpOworCW1hcmtfcmVzb2x2ZWQ6CisJCXJyLT5pdGVtc1tpXS51dGlsID0gTlVMTDsKKwl9CisKKwlpZiAodXBkYXRlLm5yKQorCQl1cGRhdGVfcGF0aHMoJnVwZGF0ZSk7CisKKwlyZXR1cm4gd3JpdGVfcnIocnIsIGZkKTsKK30KKworc3RhdGljIGludCBnaXRfcmVyZXJlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJyZXJlcmUuZW5hYmxlZCIpKQorCQlyZXJlcmVfZW5hYmxlZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHZhciwgInJlcmVyZS5hdXRvdXBkYXRlIikpCisJCXJlcmVyZV9hdXRvdXBkYXRlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCWVsc2UKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfcmVyZXJlX2VuYWJsZWQodm9pZCkKK3sKKwljb25zdCBjaGFyICpycl9jYWNoZTsKKwlpbnQgcnJfY2FjaGVfZXhpc3RzOworCisJaWYgKCFyZXJlcmVfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlycl9jYWNoZSA9IGdpdF9wYXRoKCJyci1jYWNoZSIpOworCXJyX2NhY2hlX2V4aXN0cyA9IGlzX2RpcmVjdG9yeShycl9jYWNoZSk7CisJaWYgKHJlcmVyZV9lbmFibGVkIDwgMCkKKwkJcmV0dXJuIHJyX2NhY2hlX2V4aXN0czsKKworCWlmICghcnJfY2FjaGVfZXhpc3RzICYmIG1rZGlyX2luX2dpdGRpcihycl9jYWNoZSkpCisJCWRpZSgiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJXMiLCBycl9jYWNoZSk7CisJcmV0dXJuIDE7Cit9CisKK2ludCBzZXR1cF9yZXJlcmUoc3RydWN0IHN0cmluZ19saXN0ICptZXJnZV9yciwgaW50IGZsYWdzKQoreworCWludCBmZDsKKworCWdpdF9jb25maWcoZ2l0X3JlcmVyZV9jb25maWcsIE5VTEwpOworCWlmICghaXNfcmVyZXJlX2VuYWJsZWQoKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGZsYWdzICYgKFJFUkVSRV9BVVRPVVBEQVRFfFJFUkVSRV9OT0FVVE9VUERBVEUpKQorCQlyZXJlcmVfYXV0b3VwZGF0ZSA9ICEhKGZsYWdzICYgUkVSRVJFX0FVVE9VUERBVEUpOworCW1lcmdlX3JyX3BhdGggPSBnaXRfcGF0aGR1cCgiTUVSR0VfUlIiKTsKKwlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJndyaXRlX2xvY2ssIG1lcmdlX3JyX3BhdGgsCisJCQkJICAgICAgIExPQ0tfRElFX09OX0VSUk9SKTsKKwlyZWFkX3JyKG1lcmdlX3JyKTsKKwlyZXR1cm4gZmQ7Cit9CisKK2ludCByZXJlcmUoaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBtZXJnZV9yciA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWludCBmZDsKKworCWZkID0gc2V0dXBfcmVyZXJlKCZtZXJnZV9yciwgZmxhZ3MpOworCWlmIChmZCA8IDApCisJCXJldHVybiAwOworCXJldHVybiBkb19wbGFpbl9yZXJlcmUoJm1lcmdlX3JyLCBmZCk7Cit9CisKK3N0YXRpYyBpbnQgcmVyZXJlX2ZvcmdldF9vbmVfcGF0aChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJyKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNoYXIgKmhleDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCByZXQ7CisKKwlyZXQgPSBoYW5kbGVfY2FjaGUocGF0aCwgc2hhMSwgTlVMTCk7CisJaWYgKHJldCA8IDEpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciLCBwYXRoKTsKKwloZXggPSB4c3RyZHVwKHNoYTFfdG9faGV4KHNoYTEpKTsKKwlmaWxlbmFtZSA9IHJlcmVyZV9wYXRoKGhleCwgInBvc3RpbWFnZSIpOworCWlmICh1bmxpbmsoZmlsZW5hbWUpKQorCQlyZXR1cm4gKGVycm5vID09IEVOT0VOVAorCQkJPyBlcnJvcigibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAlcyIsIHBhdGgpCisJCQk6IGVycm9yKCJjYW5ub3QgdW5saW5rICVzOiAlcyIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpKTsKKworCWhhbmRsZV9jYWNoZShwYXRoLCBzaGExLCByZXJlcmVfcGF0aChoZXgsICJwcmVpbWFnZSIpKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcydcbiIsIHBhdGgpOworCisKKwlzdHJpbmdfbGlzdF9pbnNlcnQocnIsIHBhdGgpLT51dGlsID0gaGV4OworCWZwcmludGYoc3RkZXJyLCAiRm9yZ290IHJlc29sdXRpb24gZm9yICVzXG4iLCBwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJlcmVyZV9mb3JnZXQoY29uc3QgY2hhciAqKnBhdGhzcGVjKQoreworCWludCBpLCBmZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY29uZmxpY3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWVyZ2VfcnIgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCByZWFkIGluZGV4Iik7CisKKwlmZCA9IHNldHVwX3JlcmVyZSgmbWVyZ2VfcnIsIFJFUkVSRV9OT0FVVE9VUERBVEUpOworCisJdW5tZXJnZV9jYWNoZShwYXRoc3BlYyk7CisJZmluZF9jb25mbGljdCgmY29uZmxpY3QpOworCWZvciAoaSA9IDA7IGkgPCBjb25mbGljdC5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCA9ICZjb25mbGljdC5pdGVtc1tpXTsKKwkJaWYgKCFtYXRjaF9wYXRoc3BlYyhwYXRoc3BlYywgaXQtPnN0cmluZywgc3RybGVuKGl0LT5zdHJpbmcpLAorCQkJCSAgICAwLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCQlyZXJlcmVfZm9yZ2V0X29uZV9wYXRoKGl0LT5zdHJpbmcsICZtZXJnZV9ycik7CisJfQorCXJldHVybiB3cml0ZV9ycigmbWVyZ2VfcnIsIGZkKTsKK30KKworc3RhdGljIHRpbWVfdCByZXJlcmVfY3JlYXRlZF9hdChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCXJldHVybiBzdGF0KHJlcmVyZV9wYXRoKG5hbWUsICJwcmVpbWFnZSIpLCAmc3QpID8gKHRpbWVfdCkgMCA6IHN0LnN0X210aW1lOworfQorCitzdGF0aWMgdGltZV90IHJlcmVyZV9sYXN0X3VzZWRfYXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlyZXR1cm4gc3RhdChyZXJlcmVfcGF0aChuYW1lLCAicG9zdGltYWdlIiksICZzdCkgPyAodGltZV90KSAwIDogc3Quc3RfbXRpbWU7Cit9CisKK3N0YXRpYyB2b2lkIHVubGlua19ycl9pdGVtKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdW5saW5rKHJlcmVyZV9wYXRoKG5hbWUsICJ0aGlzaW1hZ2UiKSk7CisJdW5saW5rKHJlcmVyZV9wYXRoKG5hbWUsICJwcmVpbWFnZSIpKTsKKwl1bmxpbmsocmVyZXJlX3BhdGgobmFtZSwgInBvc3RpbWFnZSIpKTsKKwlybWRpcihnaXRfcGF0aCgicnItY2FjaGUvJXMiLCBuYW1lKSk7Cit9CisKK3N0cnVjdCByZXJlcmVfZ2NfY29uZmlnX2NiIHsKKwlpbnQgY3V0b2ZmX25vcmVzb2x2ZTsKKwlpbnQgY3V0b2ZmX3Jlc29sdmU7Cit9OworCitzdGF0aWMgaW50IGdpdF9yZXJlcmVfZ2NfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCByZXJlcmVfZ2NfY29uZmlnX2NiICpjZiA9IGNiOworCisJaWYgKCFzdHJjbXAodmFyLCAiZ2MucmVyZXJlcmVzb2x2ZWQiKSkKKwkJY2YtPmN1dG9mZl9yZXNvbHZlID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJnYy5yZXJlcmV1bnJlc29sdmVkIikpCisJCWNmLT5jdXRvZmZfbm9yZXNvbHZlID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJZWxzZQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZXJlcmVfZ2Moc3RydWN0IHN0cmluZ19saXN0ICpycikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdG9fcmVtb3ZlID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZTsKKwlpbnQgaSwgY3V0b2ZmOworCXRpbWVfdCBub3cgPSB0aW1lKE5VTEwpLCB0aGVuOworCXN0cnVjdCByZXJlcmVfZ2NfY29uZmlnX2NiIGNmID0geyAxNSwgNjAgfTsKKworCWdpdF9jb25maWcoZ2l0X3JlcmVyZV9nY19jb25maWcsICZjZik7CisJZGlyID0gb3BlbmRpcihnaXRfcGF0aCgicnItY2FjaGUiKSk7CisJaWYgKCFkaXIpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5Iik7CisJd2hpbGUgKChlID0gcmVhZGRpcihkaXIpKSkgeworCQlpZiAoaXNfZG90X29yX2RvdGRvdChlLT5kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJdGhlbiA9IHJlcmVyZV9sYXN0X3VzZWRfYXQoZS0+ZF9uYW1lKTsKKwkJaWYgKHRoZW4pIHsKKwkJCWN1dG9mZiA9IGNmLmN1dG9mZl9yZXNvbHZlOworCQl9IGVsc2UgeworCQkJdGhlbiA9IHJlcmVyZV9jcmVhdGVkX2F0KGUtPmRfbmFtZSk7CisJCQlpZiAoIXRoZW4pCisJCQkJY29udGludWU7CisJCQljdXRvZmYgPSBjZi5jdXRvZmZfbm9yZXNvbHZlOworCQl9CisJCWlmICh0aGVuIDwgbm93IC0gY3V0b2ZmICogODY0MDApCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnRvX3JlbW92ZSwgZS0+ZF9uYW1lKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlmb3IgKGkgPSAwOyBpIDwgdG9fcmVtb3ZlLm5yOyBpKyspCisJCXVubGlua19ycl9pdGVtKHRvX3JlbW92ZS5pdGVtc1tpXS5zdHJpbmcpOworCXN0cmluZ19saXN0X2NsZWFyKCZ0b19yZW1vdmUsIDApOworfQorCit2b2lkIHJlcmVyZV9jbGVhcihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1lcmdlX3JyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLT5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSAoY29uc3QgY2hhciAqKW1lcmdlX3JyLT5pdGVtc1tpXS51dGlsOworCQlpZiAoIWhhc19yZXJlcmVfcmVzb2x1dGlvbihuYW1lKSkKKwkJCXVubGlua19ycl9pdGVtKG5hbWUpOworCX0KKwl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aCgiTUVSR0VfUlIiKSk7Cit9CmRpZmYgLS1naXQgYS9yZXJlcmUuaCBiL3JlcmVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NmQyYWEKLS0tIC9kZXYvbnVsbAorKysgYi9yZXJlcmUuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIFJFUkVSRV9ICisjZGVmaW5lIFJFUkVSRV9ICisKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCisjZGVmaW5lIFJFUkVSRV9BVVRPVVBEQVRFICAgMDEKKyNkZWZpbmUgUkVSRVJFX05PQVVUT1VQREFURSAwMgorCisvKgorICogTWFya3MgcGF0aHMgdGhhdCBoYXZlIGJlZW4gaGFuZC1yZXNvbHZlZCBhbmQgYWRkZWQgdG8gdGhlCisgKiBpbmRleC4gU2V0IGluIHRoZSB1dGlsIGZpZWxkIG9mIHN1Y2ggcGF0aHMgYWZ0ZXIgY2FsbGluZworICogcmVyZXJlX3JlbWFpbmluZy4KKyAqLworZXh0ZXJuIHZvaWQgKlJFUkVSRV9SRVNPTFZFRDsKKworZXh0ZXJuIGludCBzZXR1cF9yZXJlcmUoc3RydWN0IHN0cmluZ19saXN0ICosIGludCk7CitleHRlcm4gaW50IHJlcmVyZShpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnJlcmVyZV9wYXRoKGNvbnN0IGNoYXIgKmhleCwgY29uc3QgY2hhciAqZmlsZSk7CitleHRlcm4gaW50IHJlcmVyZV9mb3JnZXQoY29uc3QgY2hhciAqKik7CitleHRlcm4gaW50IHJlcmVyZV9yZW1haW5pbmcoc3RydWN0IHN0cmluZ19saXN0ICopOworZXh0ZXJuIHZvaWQgcmVyZXJlX2NsZWFyKHN0cnVjdCBzdHJpbmdfbGlzdCAqKTsKK2V4dGVybiB2b2lkIHJlcmVyZV9nYyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKik7CisKKyNkZWZpbmUgT1BUX1JFUkVSRV9BVVRPVVBEQVRFKHYpIE9QVF9VWU4oMCwgInJlcmVyZS1hdXRvdXBkYXRlIiwgKHYpLCBcCisJInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVzb2x2ZS11bmRvLmMgYi9yZXNvbHZlLXVuZG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmI0NjEyCi0tLSAvZGV2L251bGwKKysrIGIvcmVzb2x2ZS11bmRvLmMKQEAgLTAsMCArMSwxNzIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKKy8qIFRoZSBvbmx5IGVycm9yIGNhc2UgaXMgdG8gcnVuIG91dCBvZiBtZW1vcnkgaW4gc3RyaW5nLWxpc3QgKi8KK3ZvaWQgcmVjb3JkX3Jlc29sdmVfdW5kbyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqbG9zdDsKKwlzdHJ1Y3QgcmVzb2x2ZV91bmRvX2luZm8gKnVpOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvOworCWludCBzdGFnZSA9IGNlX3N0YWdlKGNlKTsKKworCWlmICghc3RhZ2UpCisJCXJldHVybjsKKworCWlmICghaXN0YXRlLT5yZXNvbHZlX3VuZG8pIHsKKwkJcmVzb2x2ZV91bmRvID0geGNhbGxvYygxLCBzaXplb2YoKnJlc29sdmVfdW5kbykpOworCQlyZXNvbHZlX3VuZG8tPnN0cmR1cF9zdHJpbmdzID0gMTsKKwkJaXN0YXRlLT5yZXNvbHZlX3VuZG8gPSByZXNvbHZlX3VuZG87CisJfQorCXJlc29sdmVfdW5kbyA9IGlzdGF0ZS0+cmVzb2x2ZV91bmRvOworCWxvc3QgPSBzdHJpbmdfbGlzdF9pbnNlcnQocmVzb2x2ZV91bmRvLCBjZS0+bmFtZSk7CisJaWYgKCFsb3N0LT51dGlsKQorCQlsb3N0LT51dGlsID0geGNhbGxvYygxLCBzaXplb2YoKnVpKSk7CisJdWkgPSBsb3N0LT51dGlsOworCWhhc2hjcHkodWktPnNoYTFbc3RhZ2UgLSAxXSwgY2UtPnNoYTEpOworCXVpLT5tb2RlW3N0YWdlIC0gMV0gPSBjZS0+Y2VfbW9kZTsKK30KKwordm9pZCByZXNvbHZlX3VuZG9fd3JpdGUoc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgcmVzb2x2ZV91bmRvKSB7CisJCXN0cnVjdCByZXNvbHZlX3VuZG9faW5mbyAqdWkgPSBpdGVtLT51dGlsOworCQlpbnQgaTsKKworCQlpZiAoIXVpKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGl0ZW0tPnN0cmluZyk7CisJCXN0cmJ1Zl9hZGRjaChzYiwgMCk7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCQlzdHJidWZfYWRkZihzYiwgIiVvJWMiLCB1aS0+bW9kZVtpXSwgMCk7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCWlmICghdWktPm1vZGVbaV0pCisJCQkJY29udGludWU7CisJCQlzdHJidWZfYWRkKHNiLCB1aS0+c2hhMVtpXSwgMjApOworCQl9CisJfQorfQorCitzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlc29sdmVfdW5kb19yZWFkKGNvbnN0IGNoYXIgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlc29sdmVfdW5kbzsKKwlzaXplX3QgbGVuOworCWNoYXIgKmVuZHB0cjsKKwlpbnQgaTsKKworCXJlc29sdmVfdW5kbyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXNvbHZlX3VuZG8pKTsKKwlyZXNvbHZlX3VuZG8tPnN0cmR1cF9zdHJpbmdzID0gMTsKKworCXdoaWxlIChzaXplKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpsb3N0OworCQlzdHJ1Y3QgcmVzb2x2ZV91bmRvX2luZm8gKnVpOworCisJCWxlbiA9IHN0cmxlbihkYXRhKSArIDE7CisJCWlmIChzaXplIDw9IGxlbikKKwkJCWdvdG8gZXJyb3I7CisJCWxvc3QgPSBzdHJpbmdfbGlzdF9pbnNlcnQocmVzb2x2ZV91bmRvLCBkYXRhKTsKKwkJaWYgKCFsb3N0LT51dGlsKQorCQkJbG9zdC0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp1aSkpOworCQl1aSA9IGxvc3QtPnV0aWw7CisJCXNpemUgLT0gbGVuOworCQlkYXRhICs9IGxlbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQl1aS0+bW9kZVtpXSA9IHN0cnRvdWwoZGF0YSwgJmVuZHB0ciwgOCk7CisJCQlpZiAoIWVuZHB0ciB8fCBlbmRwdHIgPT0gZGF0YSB8fCAqZW5kcHRyKQorCQkJCWdvdG8gZXJyb3I7CisJCQlsZW4gPSAoZW5kcHRyICsgMSkgLSAoY2hhciopZGF0YTsKKwkJCWlmIChzaXplIDw9IGxlbikKKwkJCQlnb3RvIGVycm9yOworCQkJc2l6ZSAtPSBsZW47CisJCQlkYXRhICs9IGxlbjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCWlmICghdWktPm1vZGVbaV0pCisJCQkJY29udGludWU7CisJCQlpZiAoc2l6ZSA8IDIwKQorCQkJCWdvdG8gZXJyb3I7CisJCQloYXNoY3B5KHVpLT5zaGExW2ldLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWRhdGEpOworCQkJc2l6ZSAtPSAyMDsKKwkJCWRhdGEgKz0gMjA7CisJCX0KKwl9CisJcmV0dXJuIHJlc29sdmVfdW5kbzsKKworZXJyb3I6CisJc3RyaW5nX2xpc3RfY2xlYXIocmVzb2x2ZV91bmRvLCAxKTsKKwllcnJvcigiSW5kZXggcmVjb3JkcyBpbnZhbGlkIHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIHJlc29sdmVfdW5kb19jbGVhcl9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlc29sdmVfdW5kbyA9IGlzdGF0ZS0+cmVzb2x2ZV91bmRvOworCWlmICghcmVzb2x2ZV91bmRvKQorCQlyZXR1cm47CisJc3RyaW5nX2xpc3RfY2xlYXIocmVzb2x2ZV91bmRvLCAxKTsKKwlmcmVlKHJlc29sdmVfdW5kbyk7CisJaXN0YXRlLT5yZXNvbHZlX3VuZG8gPSBOVUxMOworCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7Cit9CisKK2ludCB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgcG9zKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHJlc29sdmVfdW5kb19pbmZvICpydTsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmICghaXN0YXRlLT5yZXNvbHZlX3VuZG8pCisJCXJldHVybiBwb3M7CisKKwljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCS8qIGFscmVhZHkgdW5tZXJnZWQgKi8KKwkJd2hpbGUgKChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSAmJgorCQkgICAgICAgISBzdHJjbXAoaXN0YXRlLT5jYWNoZVtwb3NdLT5uYW1lLCBjZS0+bmFtZSkpCisJCQlwb3MrKzsKKwkJcmV0dXJuIHBvcyAtIDE7IC8qIHJldHVybiB0aGUgbGFzdCBlbnRyeSBwcm9jZXNzZWQgKi8KKwl9CisJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cChpc3RhdGUtPnJlc29sdmVfdW5kbywgY2UtPm5hbWUpOworCWlmICghaXRlbSkKKwkJcmV0dXJuIHBvczsKKwlydSA9IGl0ZW0tPnV0aWw7CisJaWYgKCFydSkKKwkJcmV0dXJuIHBvczsKKwlyZW1vdmVfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCBwb3MpOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpuY2U7CisJCWlmICghcnUtPm1vZGVbaV0pCisJCQljb250aW51ZTsKKwkJbmNlID0gbWFrZV9jYWNoZV9lbnRyeShydS0+bW9kZVtpXSwgcnUtPnNoYTFbaV0sCisJCQkJICAgICAgIGNlLT5uYW1lLCBpICsgMSwgMCk7CisJCWlmIChhZGRfaW5kZXhfZW50cnkoaXN0YXRlLCBuY2UsIEFERF9DQUNIRV9PS19UT19BREQpKSB7CisJCQllcnIgPSAxOworCQkJZXJyb3IoImNhbm5vdCB1bm1lcmdlICclcyciLCBjZS0+bmFtZSk7CisJCX0KKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIHBvczsKKwlmcmVlKHJ1KTsKKwlpdGVtLT51dGlsID0gTlVMTDsKKwlyZXR1cm4gdW5tZXJnZV9pbmRleF9lbnRyeV9hdChpc3RhdGUsIHBvcyk7Cit9CisKK3ZvaWQgdW5tZXJnZV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqKnBhdGhzcGVjKQoreworCWludCBpOworCisJaWYgKCFpc3RhdGUtPnJlc29sdmVfdW5kbykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaWYgKCFtYXRjaF9wYXRoc3BlYyhwYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCQlpID0gdW5tZXJnZV9pbmRleF9lbnRyeV9hdChpc3RhdGUsIGkpOworCX0KK30KZGlmZiAtLWdpdCBhL3Jlc29sdmUtdW5kby5oIGIvcmVzb2x2ZS11bmRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1ODc2OQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc29sdmUtdW5kby5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgUkVTT0xWRV9VTkRPX0gKKyNkZWZpbmUgUkVTT0xWRV9VTkRPX0gKKworc3RydWN0IHJlc29sdmVfdW5kb19pbmZvIHsKKwl1bnNpZ25lZCBpbnQgbW9kZVszXTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbM11bMjBdOworfTsKKworZXh0ZXJuIHZvaWQgcmVjb3JkX3Jlc29sdmVfdW5kbyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IGNhY2hlX2VudHJ5ICopOworZXh0ZXJuIHZvaWQgcmVzb2x2ZV91bmRvX3dyaXRlKHN0cnVjdCBzdHJidWYgKiwgc3RydWN0IHN0cmluZ19saXN0ICopOworZXh0ZXJuIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvX3JlYWQoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIHJlc29sdmVfdW5kb19jbGVhcl9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7CitleHRlcm4gaW50IHVubWVyZ2VfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICosIGludCk7CitleHRlcm4gdm9pZCB1bm1lcmdlX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICoqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZXZpc2lvbi5jIGIvcmV2aXNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDllNjBiCi0tLSAvZGV2L251bGwKKysrIGIvcmV2aXNpb24uYwpAQCAtMCwwICsxLDI1NTEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImdyYXBoLmgiCisjaW5jbHVkZSAiZ3JlcC5oIgorI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCisjaW5jbHVkZSAicGF0Y2gtaWRzLmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3ZvbGF0aWxlIHNob3dfZWFybHlfb3V0cHV0X2ZuX3Qgc2hvd19lYXJseV9vdXRwdXQ7CisKK2NoYXIgKnBhdGhfbmFtZShjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnA7CisJY2hhciAqbiwgKm07CisJaW50IG5sZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IGxlbiA9IG5sZW4gKyAxOworCisJZm9yIChwID0gcGF0aDsgcDsgcCA9IHAtPnVwKSB7CisJCWlmIChwLT5lbGVtX2xlbikKKwkJCWxlbiArPSBwLT5lbGVtX2xlbiArIDE7CisJfQorCW4gPSB4bWFsbG9jKGxlbik7CisJbSA9IG4gKyBsZW4gLSAobmxlbiArIDEpOworCXN0cmNweShtLCBuYW1lKTsKKwlmb3IgKHAgPSBwYXRoOyBwOyBwID0gcC0+dXApIHsKKwkJaWYgKHAtPmVsZW1fbGVuKSB7CisJCQltIC09IHAtPmVsZW1fbGVuICsgMTsKKwkJCW1lbWNweShtLCBwLT5lbGVtLCBwLT5lbGVtX2xlbik7CisJCQltW3AtPmVsZW1fbGVuXSA9ICcvJzsKKwkJfQorCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzaG93X3BhdGhfY29tcG9uZW50X3RydW5jYXRlZChGSUxFICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJaW50IGNudDsKKwlmb3IgKGNudCA9IDA7IGNudCA8IGxlbjsgY250KyspIHsKKwkJaW50IGNoID0gbmFtZVtjbnRdOworCQlpZiAoIWNoIHx8IGNoID09ICdcbicpCisJCQlyZXR1cm4gLTE7CisJCWZwdXRjKGNoLCBvdXQpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHNob3dfcGF0aF90cnVuY2F0ZWQoRklMRSAqb3V0LCBjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoKQoreworCWludCBlbWl0dGVkLCBvdXJzOworCisJaWYgKCFwYXRoKQorCQlyZXR1cm4gMDsKKwllbWl0dGVkID0gc2hvd19wYXRoX3RydW5jYXRlZChvdXQsIHBhdGgtPnVwKTsKKwlpZiAoZW1pdHRlZCA8IDApCisJCXJldHVybiBlbWl0dGVkOworCWlmIChlbWl0dGVkKQorCQlmcHV0YygnLycsIG91dCk7CisJb3VycyA9IHNob3dfcGF0aF9jb21wb25lbnRfdHJ1bmNhdGVkKG91dCwgcGF0aC0+ZWxlbSwgcGF0aC0+ZWxlbV9sZW4pOworCWlmIChvdXJzIDwgMCkKKwkJcmV0dXJuIG91cnM7CisJcmV0dXJuIG91cnMgfHwgZW1pdHRlZDsKK30KKwordm9pZCBzaG93X29iamVjdF93aXRoX25hbWUoRklMRSAqb3V0LCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKmNvbXBvbmVudCkKK3sKKwlzdHJ1Y3QgbmFtZV9wYXRoIGxlYWY7CisJbGVhZi51cCA9IChzdHJ1Y3QgbmFtZV9wYXRoICopcGF0aDsKKwlsZWFmLmVsZW0gPSBjb21wb25lbnQ7CisJbGVhZi5lbGVtX2xlbiA9IHN0cmxlbihjb21wb25lbnQpOworCisJZnByaW50ZihvdXQsICIlcyAiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwlzaG93X3BhdGhfdHJ1bmNhdGVkKG91dCwgJmxlYWYpOworCWZwdXRjKCdcbicsIG91dCk7Cit9CisKK3ZvaWQgYWRkX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCXN0cnVjdCBvYmplY3RfYXJyYXkgKnAsCisJCXN0cnVjdCBuYW1lX3BhdGggKnBhdGgsCisJCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJYWRkX29iamVjdF9hcnJheShvYmosIHBhdGhfbmFtZShwYXRoLCBuYW1lKSwgcCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfYmxvYl91bmludGVyZXN0aW5nKHN0cnVjdCBibG9iICpibG9iKQoreworCWlmICghYmxvYikKKwkJcmV0dXJuOworCWlmIChibG9iLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlyZXR1cm47CisJYmxvYi0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7Cit9CisKK3ZvaWQgbWFya190cmVlX3VuaW50ZXJlc3Rpbmcoc3RydWN0IHRyZWUgKnRyZWUpCit7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZ0cmVlLT5vYmplY3Q7CisKKwlpZiAoIXRyZWUpCisJCXJldHVybjsKKwlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXJldHVybjsKKwlvYmotPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJaWYgKCFoYXNfc2hhMV9maWxlKG9iai0+c2hhMSkpCisJCXJldHVybjsKKwlpZiAocGFyc2VfdHJlZSh0cmVlKSA8IDApCisJCWRpZSgiYmFkIHRyZWUgJXMiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCXN3aXRjaCAob2JqZWN0X3R5cGUoZW50cnkubW9kZSkpIHsKKwkJY2FzZSBPQkpfVFJFRToKKwkJCW1hcmtfdHJlZV91bmludGVyZXN0aW5nKGxvb2t1cF90cmVlKGVudHJ5LnNoYTEpKTsKKwkJCWJyZWFrOworCQljYXNlIE9CSl9CTE9COgorCQkJbWFya19ibG9iX3VuaW50ZXJlc3RpbmcobG9va3VwX2Jsb2IoZW50cnkuc2hhMSkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBTdWJwcm9qZWN0IGNvbW1pdCAtIG5vdCBpbiB0aGlzIHJlcG9zaXRvcnkgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSB0cmVlIGFueSBtb3JlCisJICogYWZ0ZXIgaXQgaGFzIGJlZW4gbWFya2VkIHVuaW50ZXJlc3RpbmcuCisJICovCisJZnJlZSh0cmVlLT5idWZmZXIpOworCXRyZWUtPmJ1ZmZlciA9IE5VTEw7Cit9CisKK3ZvaWQgbWFya19wYXJlbnRzX3VuaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEwsICpsOworCisJZm9yIChsID0gY29tbWl0LT5wYXJlbnRzOyBsOyBsID0gbC0+bmV4dCkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGwtPml0ZW0sICZwYXJlbnRzKTsKKworCXdoaWxlIChwYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHBhcmVudHMtPml0ZW07CisJCWwgPSBwYXJlbnRzOworCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJZnJlZShsKTsKKworCQl3aGlsZSAoY29tbWl0KSB7CisJCQkvKgorCQkJICogQSBtaXNzaW5nIGNvbW1pdCBpcyBvayBpZmYgaXRzIHBhcmVudCBpcyBtYXJrZWQKKwkJCSAqIHVuaW50ZXJlc3RpbmcuCisJCQkgKgorCQkJICogV2UganVzdCBtYXJrIHN1Y2ggYSB0aGluZyBwYXJzZWQsIHNvIHRoYXQgd2hlbgorCQkJICogaXQgaXMgcG9wcGVkIG5leHQgdGltZSBhcm91bmQsIHdlIHdvbid0IGJlIHRyeWluZworCQkJICogdG8gcGFyc2UgaXQgYW5kIGdldCBhbiBlcnJvci4KKwkJCSAqLworCQkJaWYgKCFoYXNfc2hhMV9maWxlKGNvbW1pdC0+b2JqZWN0LnNoYTEpKQorCQkJCWNvbW1pdC0+b2JqZWN0LnBhcnNlZCA9IDE7CisKKwkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJYnJlYWs7CisKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisKKwkJCS8qCisJCQkgKiBOb3JtYWxseSB3ZSBoYXZlbid0IHBhcnNlZCB0aGUgcGFyZW50CisJCQkgKiB5ZXQsIHNvIHdlIHdvbid0IGhhdmUgYSBwYXJlbnQgb2YgYSBwYXJlbnQKKwkJCSAqIGhlcmUuIEhvd2V2ZXIsIGl0IG1heSB0dXJuIG91dCB0aGF0IHdlJ3ZlCisJCQkgKiByZWFjaGVkIHRoaXMgY29tbWl0IHNvbWUgb3RoZXIgd2F5ICh3aGVyZSBpdAorCQkJICogd2Fzbid0IHVuaW50ZXJlc3RpbmcpLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQKKwkJCSAqIHRvIG1hcmsgaXRzIHBhcmVudHMgcmVjdXJzaXZlbHkgdG9vLi4KKwkJCSAqLworCQkJaWYgKCFjb21taXQtPnBhcmVudHMpCisJCQkJYnJlYWs7CisKKwkJCWZvciAobCA9IGNvbW1pdC0+cGFyZW50cy0+bmV4dDsgbDsgbCA9IGwtPm5leHQpCisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGwtPml0ZW0sICZwYXJlbnRzKTsKKwkJCWNvbW1pdCA9IGNvbW1pdC0+cGFyZW50cy0+aXRlbTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfbW9kZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbW9kZSkKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuOworCWlmIChyZXZzLT5ub193YWxrICYmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCXJldnMtPm5vX3dhbGsgPSAwOworCWlmIChyZXZzLT5yZWZsb2dfaW5mbyAmJiBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgbGVuID0gaW50ZXJwcmV0X2JyYW5jaF9uYW1lKG5hbWUsICZidWYpOworCQlpbnQgc3Q7CisKKwkJaWYgKDAgPCBsZW4gJiYgbmFtZVtsZW5dICYmIGJ1Zi5sZW4pCisJCQlzdHJidWZfYWRkc3RyKCZidWYsIG5hbWUgKyBsZW4pOworCQlzdCA9IGFkZF9yZWZsb2dfZm9yX3dhbGsocmV2cy0+cmVmbG9nX2luZm8sCisJCQkJCSAoc3RydWN0IGNvbW1pdCAqKW9iaiwKKwkJCQkJIGJ1Zi5idWZbMF0gPyBidWYuYnVmOiBuYW1lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCWlmIChzdCkKKwkJCXJldHVybjsKKwl9CisJYWRkX29iamVjdF9hcnJheV93aXRoX21vZGUob2JqLCBuYW1lLCAmcmV2cy0+cGVuZGluZywgbW9kZSk7Cit9CisKK3ZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKQoreworCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX21vZGUocmV2cywgb2JqLCBuYW1lLCBTX0lGSU5WQUxJRCk7Cit9CisKK3ZvaWQgYWRkX2hlYWRfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJaWYgKGdldF9zaGExKCJIRUFEIiwgc2hhMSkpCisJCXJldHVybjsKKwlvYmogPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJaWYgKCFvYmopCisJCXJldHVybjsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqLCAiSEVBRCIpOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdCAqZ2V0X3JlZmVyZW5jZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisKKwlvYmplY3QgPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJaWYgKCFvYmplY3QpIHsKKwkJaWYgKHJldnMtPmlnbm9yZV9taXNzaW5nKQorCQkJcmV0dXJuIG9iamVjdDsKKwkJZGllKCJiYWQgb2JqZWN0ICVzIiwgbmFtZSk7CisJfQorCW9iamVjdC0+ZmxhZ3MgfD0gZmxhZ3M7CisJcmV0dXJuIG9iamVjdDsKK30KKwordm9pZCBhZGRfcGVuZGluZ19zaGExKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IGdldF9yZWZlcmVuY2UocmV2cywgbmFtZSwgc2hhMSwgZmxhZ3MpOworCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCBvYmplY3QsIG5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqaGFuZGxlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBvYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gb2JqZWN0LT5mbGFnczsKKworCS8qCisJICogVGFnIG9iamVjdD8gTG9vayB3aGF0IGl0IHBvaW50cyB0by4uCisJICovCisJd2hpbGUgKG9iamVjdC0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCXN0cnVjdCB0YWcgKnRhZyA9IChzdHJ1Y3QgdGFnICopIG9iamVjdDsKKwkJaWYgKHJldnMtPnRhZ19vYmplY3RzICYmICEoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCBvYmplY3QsIHRhZy0+dGFnKTsKKwkJaWYgKCF0YWctPnRhZ2dlZCkKKwkJCWRpZSgiYmFkIHRhZyIpOworCQlvYmplY3QgPSBwYXJzZV9vYmplY3QodGFnLT50YWdnZWQtPnNoYTEpOworCQlpZiAoIW9iamVjdCkgeworCQkJaWYgKGZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWRpZSgiYmFkIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KHRhZy0+dGFnZ2VkLT5zaGExKSk7CisJCX0KKwl9CisKKwkvKgorCSAqIENvbW1pdCBvYmplY3Q/IEp1c3QgcmV0dXJuIGl0LCB3ZSdsbCBkbyBhbGwgdGhlIGNvbXBsZXgKKwkgKiByZWFjaGFiaWxpdHkgY3J1ZC4KKwkgKi8KKwlpZiAob2JqZWN0LT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvYmplY3Q7CisJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSA8IDApCisJCQlkaWUoInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiLCBuYW1lKTsKKwkJaWYgKGZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCk7CisJCQlyZXZzLT5saW1pdGVkID0gMTsKKwkJfQorCQlpZiAocmV2cy0+c2hvd19zb3VyY2UgJiYgIWNvbW1pdC0+dXRpbCkKKwkJCWNvbW1pdC0+dXRpbCA9ICh2b2lkICopIG5hbWU7CisJCXJldHVybiBjb21taXQ7CisJfQorCisJLyoKKwkgKiBUcmVlIG9iamVjdD8gRWl0aGVyIG1hcmsgaXQgdW5pbnRlcmVzdGluZywgb3IgYWRkIGl0CisJICogdG8gdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBsb29rIGF0IGxhdGVyLi4KKwkgKi8KKwlpZiAob2JqZWN0LT50eXBlID09IE9CSl9UUkVFKSB7CisJCXN0cnVjdCB0cmVlICp0cmVlID0gKHN0cnVjdCB0cmVlICopb2JqZWN0OworCQlpZiAoIXJldnMtPnRyZWVfb2JqZWN0cykKKwkJCXJldHVybiBOVUxMOworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQltYXJrX3RyZWVfdW5pbnRlcmVzdGluZyh0cmVlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCBvYmplY3QsICIiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBCbG9iIG9iamVjdD8gWW91IGtub3cgdGhlIGRyaWxsIGJ5IG5vdy4uCisJICovCisJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfQkxPQikgeworCQlzdHJ1Y3QgYmxvYiAqYmxvYiA9IChzdHJ1Y3QgYmxvYiAqKW9iamVjdDsKKwkJaWYgKCFyZXZzLT5ibG9iX29iamVjdHMpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkJbWFya19ibG9iX3VuaW50ZXJlc3RpbmcoYmxvYik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCAiIik7CisJCXJldHVybiBOVUxMOworCX0KKwlkaWUoIiVzIGlzIHVua25vd24gb2JqZWN0IiwgbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgZXZlcnlib2R5X3VuaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdF9saXN0ICpvcmlnKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IG9yaWc7CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogVGhlIGdvYWwgaXMgdG8gZ2V0IFJFVl9UUkVFX05FVyBhcyB0aGUgcmVzdWx0IG9ubHkgaWYgdGhlCisgKiBkaWZmIGNvbnNpc3RzIG9mIGFsbCAnKycgKGFuZCBubyBvdGhlciBjaGFuZ2VzKSwgUkVWX1RSRUVfT0xECisgKiBpZiB0aGUgd2hvbGUgZGlmZiBpcyByZW1vdmFsIG9mIG9sZCBkYXRhLCBhbmQgb3RoZXJ3aXNlCisgKiBSRVZfVFJFRV9ESUZGRVJFTlQgKG9mIGNvdXJzZSBpZiB0aGUgdHJlZXMgYXJlIHRoZSBzYW1lIHdlCisgKiB3YW50IFJFVl9UUkVFX1NBTUUpLgorICogVGhhdCBtZWFucyB0aGF0IG9uY2Ugd2UgZ2V0IHRvIFJFVl9UUkVFX0RJRkZFUkVOVCwgd2UgZG8gbm90CisgKiBoYXZlIHRvIGxvb2sgYW55IGZ1cnRoZXIuCisgKi8KK3N0YXRpYyBpbnQgdHJlZV9kaWZmZXJlbmNlID0gUkVWX1RSRUVfU0FNRTsKKworc3RhdGljIHZvaWQgZmlsZV9hZGRfcmVtb3ZlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgICBpbnQgYWRkcmVtb3ZlLCB1bnNpZ25lZCBtb2RlLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJICAgIGludCBzaGExX3ZhbGlkLAorCQkgICAgY29uc3QgY2hhciAqZnVsbHBhdGgsIHVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSkKK3sKKwlpbnQgZGlmZiA9IGFkZHJlbW92ZSA9PSAnKycgPyBSRVZfVFJFRV9ORVcgOiBSRVZfVFJFRV9PTEQ7CisKKwl0cmVlX2RpZmZlcmVuY2UgfD0gZGlmZjsKKwlpZiAodHJlZV9kaWZmZXJlbmNlID09IFJFVl9UUkVFX0RJRkZFUkVOVCkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKK30KKworc3RhdGljIHZvaWQgZmlsZV9jaGFuZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCQkgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsCisJCSBpbnQgb2xkX3NoYTFfdmFsaWQsIGludCBuZXdfc2hhMV92YWxpZCwKKwkJIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLAorCQkgdW5zaWduZWQgb2xkX2RpcnR5X3N1Ym1vZHVsZSwgdW5zaWduZWQgbmV3X2RpcnR5X3N1Ym1vZHVsZSkKK3sKKwl0cmVlX2RpZmZlcmVuY2UgPSBSRVZfVFJFRV9ESUZGRVJFTlQ7CisJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKK30KKworc3RhdGljIGludCByZXZfY29tcGFyZV90cmVlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqcGFyZW50LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHRyZWUgKnQxID0gcGFyZW50LT50cmVlOworCXN0cnVjdCB0cmVlICp0MiA9IGNvbW1pdC0+dHJlZTsKKworCWlmICghdDEpCisJCXJldHVybiBSRVZfVFJFRV9ORVc7CisJaWYgKCF0MikKKwkJcmV0dXJuIFJFVl9UUkVFX09MRDsKKworCWlmIChyZXZzLT5zaW1wbGlmeV9ieV9kZWNvcmF0aW9uKSB7CisJCS8qCisJCSAqIElmIHdlIGFyZSBzaW1wbGlmeWluZyBieSBkZWNvcmF0aW9uLCB0aGVuIHRoZSBjb21taXQKKwkJICogaXMgd29ydGggc2hvd2luZyBpZiBpdCBoYXMgYSB0YWcgcG9pbnRpbmcgYXQgaXQuCisJCSAqLworCQlpZiAobG9va3VwX2RlY29yYXRpb24oJm5hbWVfZGVjb3JhdGlvbiwgJmNvbW1pdC0+b2JqZWN0KSkKKwkJCXJldHVybiBSRVZfVFJFRV9ESUZGRVJFTlQ7CisJCS8qCisJCSAqIEEgY29tbWl0IHRoYXQgaXMgbm90IHBvaW50ZWQgYnkgYSB0YWcgaXMgdW5pbnRlcmVzdGluZworCQkgKiBpZiB3ZSBhcmUgbm90IGxpbWl0ZWQgYnkgcGF0aC4gIFRoaXMgbWVhbnMgdGhhdCB5b3Ugd2lsbAorCQkgKiBzZWUgdGhlIHVzdWFsICJjb21taXRzIHRoYXQgdG91Y2ggdGhlIHBhdGhzIiBwbHVzIGFueQorCQkgKiB0YWdnZWQgY29tbWl0IGJ5IHNwZWNpZnlpbmcgYm90aCAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24KKwkJICogYW5kIHBhdGhzcGVjLgorCQkgKi8KKwkJaWYgKCFyZXZzLT5wcnVuZV9kYXRhLm5yKQorCQkJcmV0dXJuIFJFVl9UUkVFX1NBTUU7CisJfQorCisJdHJlZV9kaWZmZXJlbmNlID0gUkVWX1RSRUVfU0FNRTsKKwlESUZGX09QVF9DTFIoJnJldnMtPnBydW5pbmcsIEhBU19DSEFOR0VTKTsKKwlpZiAoZGlmZl90cmVlX3NoYTEodDEtPm9iamVjdC5zaGExLCB0Mi0+b2JqZWN0LnNoYTEsICIiLAorCQkJICAgJnJldnMtPnBydW5pbmcpIDwgMCkKKwkJcmV0dXJuIFJFVl9UUkVFX0RJRkZFUkVOVDsKKwlyZXR1cm4gdHJlZV9kaWZmZXJlbmNlOworfQorCitzdGF0aWMgaW50IHJldl9zYW1lX3RyZWVfYXNfZW1wdHkoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaW50IHJldHZhbDsKKwl2b2lkICp0cmVlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGVtcHR5LCByZWFsOworCXN0cnVjdCB0cmVlICp0MSA9IGNvbW1pdC0+dHJlZTsKKworCWlmICghdDEpCisJCXJldHVybiAwOworCisJdHJlZSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHQxLT5vYmplY3Quc2hhMSwgdHJlZV90eXBlLCAmc2l6ZSwgTlVMTCk7CisJaWYgKCF0cmVlKQorCQlyZXR1cm4gMDsKKwlpbml0X3RyZWVfZGVzYygmcmVhbCwgdHJlZSwgc2l6ZSk7CisJaW5pdF90cmVlX2Rlc2MoJmVtcHR5LCAiIiwgMCk7CisKKwl0cmVlX2RpZmZlcmVuY2UgPSBSRVZfVFJFRV9TQU1FOworCURJRkZfT1BUX0NMUigmcmV2cy0+cHJ1bmluZywgSEFTX0NIQU5HRVMpOworCXJldHZhbCA9IGRpZmZfdHJlZSgmZW1wdHksICZyZWFsLCAiIiwgJnJldnMtPnBydW5pbmcpOworCWZyZWUodHJlZSk7CisKKwlyZXR1cm4gcmV0dmFsID49IDAgJiYgKHRyZWVfZGlmZmVyZW5jZSA9PSBSRVZfVFJFRV9TQU1FKTsKK30KKworc3RhdGljIHZvaWQgdHJ5X3RvX3NpbXBsaWZ5X2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcCwgKnBhcmVudDsKKwlpbnQgdHJlZV9jaGFuZ2VkID0gMCwgdHJlZV9zYW1lID0gMCwgbnRoX3BhcmVudCA9IDA7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGRvIHBydW5pbmcsIGV2ZXJ5dGhpbmcgaXMgaW50ZXJlc3RpbmcKKwkgKi8KKwlpZiAoIXJldnMtPnBydW5lKQorCQlyZXR1cm47CisKKwlpZiAoIWNvbW1pdC0+dHJlZSkKKwkJcmV0dXJuOworCisJaWYgKCFjb21taXQtPnBhcmVudHMpIHsKKwkJaWYgKHJldl9zYW1lX3RyZWVfYXNfZW1wdHkocmV2cywgY29tbWl0KSkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBOb3JtYWwgbm9uLW1lcmdlIGNvbW1pdD8gSWYgd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZQorCSAqIGhpc3RvcnkgZGVuc2UsIHdlIGNvbnNpZGVyIGl0IGFsd2F5cyB0byBiZSBhIGNoYW5nZS4uCisJICovCisJaWYgKCFyZXZzLT5kZW5zZSAmJiAhY29tbWl0LT5wYXJlbnRzLT5uZXh0KQorCQlyZXR1cm47CisKKwlwcCA9ICZjb21taXQtPnBhcmVudHM7CisJd2hpbGUgKChwYXJlbnQgPSAqcHApICE9IE5VTEwpIHsKKwkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudC0+aXRlbTsKKworCQkvKgorCQkgKiBEbyBub3QgY29tcGFyZSB3aXRoIGxhdGVyIHBhcmVudHMgd2hlbiB3ZSBjYXJlIG9ubHkgYWJvdXQKKwkJICogdGhlIGZpcnN0IHBhcmVudCBjaGFpbiwgaW4gb3JkZXIgdG8gYXZvaWQgZGVyYWlsaW5nIHRoZQorCQkgKiB0cmF2ZXJzYWwgdG8gZm9sbG93IGEgc2lkZSBicmFuY2ggdGhhdCBicm91Z2h0IGV2ZXJ5dGhpbmcKKwkJICogaW4gdGhlIHBhdGggd2UgYXJlIGxpbWl0ZWQgdG8gYnkgdGhlIHBhdGhzcGVjLgorCQkgKi8KKwkJaWYgKHJldnMtPmZpcnN0X3BhcmVudF9vbmx5ICYmIG50aF9wYXJlbnQrKykKKwkJCWJyZWFrOworCQlpZiAocGFyc2VfY29tbWl0KHApIDwgMCkKKwkJCWRpZSgiY2Fubm90IHNpbXBsaWZ5IGNvbW1pdCAlcyAoYmVjYXVzZSBvZiAlcykiLAorCQkJICAgIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpLAorCQkJICAgIHNoYTFfdG9faGV4KHAtPm9iamVjdC5zaGExKSk7CisJCXN3aXRjaCAocmV2X2NvbXBhcmVfdHJlZShyZXZzLCBwLCBjb21taXQpKSB7CisJCWNhc2UgUkVWX1RSRUVfU0FNRToKKwkJCXRyZWVfc2FtZSA9IDE7CisJCQlpZiAoIXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgfHwgKHAtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKSB7CisJCQkJLyogRXZlbiBpZiBhIG1lcmdlIHdpdGggYW4gdW5pbnRlcmVzdGluZworCQkJCSAqIHNpZGUgYnJhbmNoIGJyb3VnaHQgdGhlIGVudGlyZSBjaGFuZ2UKKwkJCQkgKiB3ZSBhcmUgaW50ZXJlc3RlZCBpbiwgd2UgZG8gbm90IHdhbnQKKwkJCQkgKiB0byBsb3NlIHRoZSBvdGhlciBicmFuY2hlcyBvZiB0aGlzCisJCQkJICogbWVyZ2UsIHNvIHdlIGp1c3Qga2VlcCBnb2luZy4KKwkJCQkgKi8KKwkJCQlwcCA9ICZwYXJlbnQtPm5leHQ7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwYXJlbnQtPm5leHQgPSBOVUxMOworCQkJY29tbWl0LT5wYXJlbnRzID0gcGFyZW50OworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJCQlyZXR1cm47CisKKwkJY2FzZSBSRVZfVFJFRV9ORVc6CisJCQlpZiAocmV2cy0+cmVtb3ZlX2VtcHR5X3RyZWVzICYmCisJCQkgICAgcmV2X3NhbWVfdHJlZV9hc19lbXB0eShyZXZzLCBwKSkgeworCQkJCS8qIFdlIGFyZSBhZGRpbmcgYWxsIHRoZSBzcGVjaWZpZWQKKwkJCQkgKiBwYXRocyBmcm9tIHRoaXMgcGFyZW50LCBzbyB0aGUKKwkJCQkgKiBoaXN0b3J5IGJleW9uZCB0aGlzIHBhcmVudCBpcyBub3QKKwkJCQkgKiBpbnRlcmVzdGluZy4gIFJlbW92ZSBpdHMgcGFyZW50cworCQkJCSAqICh0aGV5IGFyZSBncmFuZHBhcmVudHMgZm9yIHVzKS4KKwkJCQkgKiBJT1csIHdlIHByZXRlbmQgdGhpcyBwYXJlbnQgaXMgYQorCQkJCSAqICJyb290IiBjb21taXQuCisJCQkJICovCisJCQkJaWYgKHBhcnNlX2NvbW1pdChwKSA8IDApCisJCQkJCWRpZSgiY2Fubm90IHNpbXBsaWZ5IGNvbW1pdCAlcyAoaW52YWxpZCAlcykiLAorCQkJCQkgICAgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSksCisJCQkJCSAgICBzaGExX3RvX2hleChwLT5vYmplY3Quc2hhMSkpOworCQkJCXAtPnBhcmVudHMgPSBOVUxMOworCQkJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIFJFVl9UUkVFX09MRDoKKwkJY2FzZSBSRVZfVFJFRV9ESUZGRVJFTlQ6CisJCQl0cmVlX2NoYW5nZWQgPSAxOworCQkJcHAgPSAmcGFyZW50LT5uZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZGllKCJiYWQgdHJlZSBjb21wYXJlIGZvciBjb21taXQgJXMiLCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJfQorCWlmICh0cmVlX2NoYW5nZWQgJiYgIXRyZWVfc2FtZSkKKwkJcmV0dXJuOworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOworfQorCitzdGF0aWMgdm9pZCBjb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZV9jYWNoZWQoc3RydWN0IGNvbW1pdCAqcCwgc3RydWN0IGNvbW1pdF9saXN0ICoqaGVhZCwKKwkJICAgIHN0cnVjdCBjb21taXRfbGlzdCAqY2FjaGVkX2Jhc2UsIHN0cnVjdCBjb21taXRfbGlzdCAqKmNhY2hlKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV3X2VudHJ5OworCisJaWYgKGNhY2hlZF9iYXNlICYmIHAtPmRhdGUgPCBjYWNoZWRfYmFzZS0+aXRlbS0+ZGF0ZSkKKwkJbmV3X2VudHJ5ID0gY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUocCwgJmNhY2hlZF9iYXNlLT5uZXh0KTsKKwllbHNlCisJCW5ld19lbnRyeSA9IGNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHAsIGhlYWQpOworCisJaWYgKGNhY2hlICYmICghKmNhY2hlIHx8IHAtPmRhdGUgPCAoKmNhY2hlKS0+aXRlbS0+ZGF0ZSkpCisJCSpjYWNoZSA9IG5ld19lbnRyeTsKK30KKworc3RhdGljIGludCBhZGRfcGFyZW50c190b19saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCwgc3RydWN0IGNvbW1pdF9saXN0ICoqY2FjaGVfcHRyKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOworCXVuc2lnbmVkIGxlZnRfZmxhZzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNhY2hlZF9iYXNlID0gY2FjaGVfcHRyID8gKmNhY2hlX3B0ciA6IE5VTEw7CisKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBBRERFRCkKKwkJcmV0dXJuIDA7CisJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gQURERUQ7CisKKwkvKgorCSAqIElmIHRoZSBjb21taXQgaXMgdW5pbnRlcmVzdGluZywgZG9uJ3QgdHJ5IHRvCisJICogcHJ1bmUgcGFyZW50cyAtIHdlIHdhbnQgdGhlIG1heGltYWwgdW5pbnRlcmVzdGluZworCSAqIHNldC4KKwkgKgorCSAqIE5vcm1hbGx5IHdlIGhhdmVuJ3QgcGFyc2VkIHRoZSBwYXJlbnQKKwkgKiB5ZXQsIHNvIHdlIHdvbid0IGhhdmUgYSBwYXJlbnQgb2YgYSBwYXJlbnQKKwkgKiBoZXJlLiBIb3dldmVyLCBpdCBtYXkgdHVybiBvdXQgdGhhdCB3ZSd2ZQorCSAqIHJlYWNoZWQgdGhpcyBjb21taXQgc29tZSBvdGhlciB3YXkgKHdoZXJlIGl0CisJICogd2Fzbid0IHVuaW50ZXJlc3RpbmcpLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQKKwkgKiB0byBtYXJrIGl0cyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IHRvby4uCisJICovCisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQl3aGlsZSAocGFyZW50KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50LT5pdGVtOworCQkJcGFyZW50ID0gcGFyZW50LT5uZXh0OworCQkJaWYgKHApCisJCQkJcC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQlpZiAocGFyc2VfY29tbWl0KHApIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChwLT5wYXJlbnRzKQorCQkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKHApOworCQkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCQkJY29udGludWU7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlX2NhY2hlZChwLCBsaXN0LCBjYWNoZWRfYmFzZSwgY2FjaGVfcHRyKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE9rLCB0aGUgY29tbWl0IHdhc24ndCB1bmludGVyZXN0aW5nLiBUcnkgdG8KKwkgKiBzaW1wbGlmeSB0aGUgY29tbWl0IGhpc3RvcnkgYW5kIGZpbmQgdGhlIHBhcmVudAorCSAqIHRoYXQgaGFzIG5vIGRpZmZlcmVuY2VzIGluIHRoZSBwYXRoIHNldCBpZiBvbmUgZXhpc3RzLgorCSAqLworCXRyeV90b19zaW1wbGlmeV9jb21taXQocmV2cywgY29tbWl0KTsKKworCWlmIChyZXZzLT5ub193YWxrKQorCQlyZXR1cm4gMDsKKworCWxlZnRfZmxhZyA9IChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKTsKKworCWZvciAocGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50LT5pdGVtOworCisJCWlmIChwYXJzZV9jb21taXQocCkgPCAwKQorCQkJcmV0dXJuIC0xOworCQlpZiAocmV2cy0+c2hvd19zb3VyY2UgJiYgIXAtPnV0aWwpCisJCQlwLT51dGlsID0gY29tbWl0LT51dGlsOworCQlwLT5vYmplY3QuZmxhZ3MgfD0gbGVmdF9mbGFnOworCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkgeworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZV9jYWNoZWQocCwgbGlzdCwgY2FjaGVkX2Jhc2UsIGNhY2hlX3B0cik7CisJCX0KKwkJaWYgKHJldnMtPmZpcnN0X3BhcmVudF9vbmx5KQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaGVycnlfcGlja19saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlpbnQgbGVmdF9jb3VudCA9IDAsIHJpZ2h0X2NvdW50ID0gMDsKKwlpbnQgbGVmdF9maXJzdDsKKwlzdHJ1Y3QgcGF0Y2hfaWRzIGlkczsKKwl1bnNpZ25lZCBjaGVycnlfZmxhZzsKKworCS8qIEZpcnN0IGNvdW50IHRoZSBjb21taXRzIG9uIHRoZSBsZWZ0IGFuZCBvbiB0aGUgcmlnaHQgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCQl1bnNpZ25lZCBmbGFncyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOworCQlpZiAoZmxhZ3MgJiBCT1VOREFSWSkKKwkJCTsKKwkJZWxzZSBpZiAoZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCWxlZnRfY291bnQrKzsKKwkJZWxzZQorCQkJcmlnaHRfY291bnQrKzsKKwl9CisKKwlpZiAoIWxlZnRfY291bnQgfHwgIXJpZ2h0X2NvdW50KQorCQlyZXR1cm47CisKKwlsZWZ0X2ZpcnN0ID0gbGVmdF9jb3VudCA8IHJpZ2h0X2NvdW50OworCWluaXRfcGF0Y2hfaWRzKCZpZHMpOworCWlkcy5kaWZmb3B0cy5wYXRoc3BlYyA9IHJldnMtPmRpZmZvcHQucGF0aHNwZWM7CisKKwkvKiBDb21wdXRlIHBhdGNoLWlkcyBmb3Igb25lIHNpZGUgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCQl1bnNpZ25lZCBmbGFncyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOworCisJCWlmIChmbGFncyAmIEJPVU5EQVJZKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIElmIHdlIGhhdmUgZmV3ZXIgbGVmdCwgbGVmdF9maXJzdCBpcyBzZXQgYW5kIHdlIG9taXQKKwkJICogY29tbWl0cyBvbiB0aGUgcmlnaHQgYnJhbmNoIGluIHRoaXMgbG9vcC4gIElmIHdlIGhhdmUKKwkJICogZmV3ZXIgcmlnaHQsIHdlIHNraXAgdGhlIGxlZnQgb25lcy4KKwkJICovCisJCWlmIChsZWZ0X2ZpcnN0ICE9ICEhKGZsYWdzICYgU1lNTUVUUklDX0xFRlQpKQorCQkJY29udGludWU7CisJCWNvbW1pdC0+dXRpbCA9IGFkZF9jb21taXRfcGF0Y2hfaWQoY29tbWl0LCAmaWRzKTsKKwl9CisKKwkvKiBlaXRoZXIgY2hlcnJ5X21hcmsgb3IgY2hlcnJ5X3BpY2sgYXJlIHRydWUgKi8KKwljaGVycnlfZmxhZyA9IHJldnMtPmNoZXJyeV9tYXJrID8gUEFUQ0hTQU1FIDogU0hPV047CisKKwkvKiBDaGVjayB0aGUgb3RoZXIgc2lkZSAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXN0cnVjdCBwYXRjaF9pZCAqaWQ7CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisKKwkJaWYgKGZsYWdzICYgQk9VTkRBUlkpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBmZXdlciBsZWZ0LCBsZWZ0X2ZpcnN0IGlzIHNldCBhbmQgd2Ugb21pdAorCQkgKiBjb21taXRzIG9uIHRoZSBsZWZ0IGJyYW5jaCBpbiB0aGlzIGxvb3AuCisJCSAqLworCQlpZiAobGVmdF9maXJzdCA9PSAhIShmbGFncyAmIFNZTU1FVFJJQ19MRUZUKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEhhdmUgd2Ugc2VlbiB0aGUgc2FtZSBwYXRjaCBpZD8KKwkJICovCisJCWlkID0gaGFzX2NvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMpOworCQlpZiAoIWlkKQorCQkJY29udGludWU7CisJCWlkLT5zZWVuID0gMTsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gY2hlcnJ5X2ZsYWc7CisJfQorCisJLyogTm93IGNoZWNrIHRoZSBvcmlnaW5hbCBzaWRlIGZvciBzZWVuIG9uZXMgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCQlzdHJ1Y3QgcGF0Y2hfaWQgKmVudDsKKworCQllbnQgPSBjb21taXQtPnV0aWw7CisJCWlmICghZW50KQorCQkJY29udGludWU7CisJCWlmIChlbnQtPnNlZW4pCisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBjaGVycnlfZmxhZzsKKwkJY29tbWl0LT51dGlsID0gTlVMTDsKKwl9CisKKwlmcmVlX3BhdGNoX2lkcygmaWRzKTsKK30KKworLyogSG93IG1hbnkgZXh0cmEgdW5pbnRlcmVzdGluZyBjb21taXRzIHdlIHdhbnQgdG8gc2VlLi4gKi8KKyNkZWZpbmUgU0xPUCA1CisKK3N0YXRpYyBpbnQgc3RpbGxfaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdF9saXN0ICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0ZSwgaW50IHNsb3ApCit7CisJLyoKKwkgKiBObyBzb3VyY2UgbGlzdCBhdCBhbGw/IFdlJ3JlIGRlZmluaXRlbHkgZG9uZS4uCisJICovCisJaWYgKCFzcmMpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBEb2VzIHRoZSBkZXN0aW5hdGlvbiBsaXN0IGNvbnRhaW4gZW50cmllcyB3aXRoIGEgZGF0ZQorCSAqIGJlZm9yZSB0aGUgc291cmNlIGxpc3Q/IERlZmluaXRlbHkgX25vdF8gZG9uZS4KKwkgKi8KKwlpZiAoZGF0ZSA8IHNyYy0+aXRlbS0+ZGF0ZSkKKwkJcmV0dXJuIFNMT1A7CisKKwkvKgorCSAqIERvZXMgdGhlIHNvdXJjZSBsaXN0IHN0aWxsIGhhdmUgaW50ZXJlc3RpbmcgY29tbWl0cyBpbgorCSAqIGl0PyBEZWZpbml0ZWx5IG5vdCBkb25lLi4KKwkgKi8KKwlpZiAoIWV2ZXJ5Ym9keV91bmludGVyZXN0aW5nKHNyYykpCisJCXJldHVybiBTTE9QOworCisJLyogT2ssIHdlJ3JlIGNsb3NpbmcgaW4uLiAqLworCXJldHVybiBzbG9wLTE7Cit9CisKKy8qCisgKiAicmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIEEuLkIiIGNvbXB1dGVzIGNvbW1pdHMgdGhhdCBhcmUgYW5jZXN0b3JzCisgKiBvZiBCIGJ1dCBub3QgYW5jZXN0b3JzIG9mIEEgYnV0IGZ1cnRoZXIgbGltaXRzIHRoZSByZXN1bHQgdG8gdGhvc2UKKyAqIHRoYXQgYXJlIGRlc2NlbmRhbnRzIG9mIEEuICBUaGlzIHRha2VzIHRoZSBsaXN0IG9mIGJvdHRvbSBjb21taXRzIGFuZAorICogdGhlIHJlc3VsdCBvZiAiQS4uQiIgd2l0aG91dCAtLWFuY2VzdHJ5LXBhdGgsIGFuZCBsaW1pdHMgdGhlIGxhdHRlcgorICogZnVydGhlciB0byB0aGUgb25lcyB0aGF0IGNhbiByZWFjaCBvbmUgb2YgdGhlIGNvbW1pdHMgaW4gImJvdHRvbSIuCisgKi8KK3N0YXRpYyB2b2lkIGxpbWl0X3RvX2FuY2VzdHJ5KHN0cnVjdCBjb21taXRfbGlzdCAqYm90dG9tLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmxpc3QgPSBOVUxMOworCWludCBtYWRlX3Byb2dyZXNzOworCisJLyoKKwkgKiBSZXZlcnNlIHRoZSBsaXN0IHNvIHRoYXQgaXQgd2lsbCBiZSBsaWtlbHkgdGhhdCB3ZSB3b3VsZAorCSAqIHByb2Nlc3MgcGFyZW50cyBiZWZvcmUgY2hpbGRyZW4uCisJICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpCisJCWNvbW1pdF9saXN0X2luc2VydChwLT5pdGVtLCAmcmxpc3QpOworCisJZm9yIChwID0gYm90dG9tOyBwOyBwID0gcC0+bmV4dCkKKwkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFRNUF9NQVJLOworCisJLyoKKwkgKiBNYXJrIHRoZSBvbmVzIHRoYXQgY2FuIHJlYWNoIGJvdHRvbSBjb21taXRzIGluICJsaXN0IiwKKwkgKiBpbiBhIGJvdHRvbS11cCBmYXNoaW9uLgorCSAqLworCWRvIHsKKwkJbWFkZV9wcm9ncmVzcyA9IDA7CisJCWZvciAocCA9IHJsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqYyA9IHAtPml0ZW07CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgKFRNUF9NQVJLIHwgVU5JTlRFUkVTVElORykpCisJCQkJY29udGludWU7CisJCQlmb3IgKHBhcmVudHMgPSBjLT5wYXJlbnRzOworCQkJICAgICBwYXJlbnRzOworCQkJICAgICBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQkJCWlmICghKHBhcmVudHMtPml0ZW0tPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKSkKKwkJCQkJY29udGludWU7CisJCQkJYy0+b2JqZWN0LmZsYWdzIHw9IFRNUF9NQVJLOworCQkJCW1hZGVfcHJvZ3Jlc3MgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSB3aGlsZSAobWFkZV9wcm9ncmVzcyk7CisKKwkvKgorCSAqIE5FRURTV09SSzogZGVjaWRlIGlmIHdlIHdhbnQgdG8gcmVtb3ZlIHBhcmVudHMgdGhhdCBhcmUKKwkgKiBub3QgbWFya2VkIHdpdGggVE1QX01BUksgZnJvbSBjb21taXQtPnBhcmVudHMgZm9yIGNvbW1pdHMKKwkgKiBpbiB0aGUgcmVzdWx0aW5nIGxpc3QuICBXZSBtYXkgbm90IHdhbnQgdG8gZG8gdGhhdCwgdGhvdWdoLgorCSAqLworCisJLyoKKwkgKiBUaGUgb25lcyB0aGF0IGFyZSBub3QgbWFya2VkIHdpdGggVE1QX01BUksgYXJlIHVuaW50ZXJlc3RpbmcKKwkgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gcC0+aXRlbTsKKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKQorCQkJY29udGludWU7CisJCWMtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCX0KKworCS8qIFdlIGFyZSBkb25lIHdpdGggdGhlIFRNUF9NQVJLICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpCisJCXAtPml0ZW0tPm9iamVjdC5mbGFncyAmPSB+VE1QX01BUks7CisJZm9yIChwID0gYm90dG9tOyBwOyBwID0gcC0+bmV4dCkKKwkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzICY9IH5UTVBfTUFSSzsKKwlmcmVlX2NvbW1pdF9saXN0KHJsaXN0KTsKK30KKworLyoKKyAqIEJlZm9yZSB3YWxraW5nIHRoZSBoaXN0b3J5LCBrZWVwIHRoZSBzZXQgb2YgIm5lZ2F0aXZlIiByZWZzIHRoZQorICogY2FsbGVyIGhhcyBhc2tlZCB0byBleGNsdWRlLgorICoKKyAqIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlICJyZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggQS4uQiIsIGFzIHdlIG5lZWQKKyAqIHRvIGZpbHRlciB0aGUgcmVzdWx0IG9mICJBLi5CIiBmdXJ0aGVyIHRvIHRoZSBvbmVzIHRoYXQgY2FuIGFjdHVhbGx5CisgKiByZWFjaCBBLgorICovCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpjb2xsZWN0X2JvdHRvbV9jb21taXRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmJvdHRvbSA9IE5VTEw7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJldnMtPmNtZGxpbmUubnI7IGkrKykgeworCQlzdHJ1Y3QgcmV2X2NtZGxpbmVfZW50cnkgKmVsZW0gPSAmcmV2cy0+Y21kbGluZS5yZXZbaV07CisJCWlmICgoZWxlbS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSAmJgorCQkgICAgZWxlbS0+aXRlbS0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0KChzdHJ1Y3QgY29tbWl0ICopZWxlbS0+aXRlbSwgJmJvdHRvbSk7CisJfQorCXJldHVybiBib3R0b207Cit9CisKKy8qIEFzc3VtZXMgZWl0aGVyIGxlZnRfb25seSBvciByaWdodF9vbmx5IGlzIHNldCAqLworc3RhdGljIHZvaWQgbGltaXRfbGVmdF9yaWdodChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCisJCWlmIChyZXZzLT5yaWdodF9vbmx5KSB7CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKwkJfSBlbHNlCS8qIHJldnMtPmxlZnRfb25seSBpcyBzZXQgKi8KKwkJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpKQorCQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFNIT1dOOworCX0KK30KKworc3RhdGljIGludCBsaW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpbnQgc2xvcCA9IFNMT1A7CisJdW5zaWduZWQgbG9uZyBkYXRlID0gfjB1bDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSByZXZzLT5jb21taXRzOworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV3bGlzdCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcCA9ICZuZXdsaXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqYm90dG9tID0gTlVMTDsKKworCWlmIChyZXZzLT5hbmNlc3RyeV9wYXRoKSB7CisJCWJvdHRvbSA9IGNvbGxlY3RfYm90dG9tX2NvbW1pdHMocmV2cyk7CisJCWlmICghYm90dG9tKQorCQkJZGllKCItLWFuY2VzdHJ5LXBhdGggZ2l2ZW4gYnV0IHRoZXJlIGFyZSBubyBib3R0b20gY29tbWl0cyIpOworCX0KKworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqZW50cnkgPSBsaXN0OworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmY29tbWl0LT5vYmplY3Q7CisJCXNob3dfZWFybHlfb3V0cHV0X2ZuX3Qgc2hvdzsKKworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJZnJlZShlbnRyeSk7CisKKwkJaWYgKHJldnMtPm1heF9hZ2UgIT0gLTEgJiYgKGNvbW1pdC0+ZGF0ZSA8IHJldnMtPm1heF9hZ2UpKQorCQkJb2JqLT5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQlpZiAoYWRkX3BhcmVudHNfdG9fbGlzdChyZXZzLCBjb21taXQsICZsaXN0LCBOVUxMKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0KTsKKwkJCWlmIChyZXZzLT5zaG93X2FsbCkKKwkJCQlwID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHApLT5uZXh0OworCQkJc2xvcCA9IHN0aWxsX2ludGVyZXN0aW5nKGxpc3QsIGRhdGUsIHNsb3ApOworCQkJaWYgKHNsb3ApCisJCQkJY29udGludWU7CisJCQkvKiBJZiBzaG93aW5nIGFsbCwgYWRkIHRoZSB3aG9sZSBwZW5kaW5nIGxpc3QgdG8gdGhlIGVuZCAqLworCQkJaWYgKHJldnMtPnNob3dfYWxsKQorCQkJCSpwID0gbGlzdDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXZzLT5taW5fYWdlICE9IC0xICYmIChjb21taXQtPmRhdGUgPiByZXZzLT5taW5fYWdlKSkKKwkJCWNvbnRpbnVlOworCQlkYXRlID0gY29tbWl0LT5kYXRlOworCQlwID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHApLT5uZXh0OworCisJCXNob3cgPSBzaG93X2Vhcmx5X291dHB1dDsKKwkJaWYgKCFzaG93KQorCQkJY29udGludWU7CisKKwkJc2hvdyhyZXZzLCBuZXdsaXN0KTsKKwkJc2hvd19lYXJseV9vdXRwdXQgPSBOVUxMOworCX0KKwlpZiAocmV2cy0+Y2hlcnJ5X3BpY2sgfHwgcmV2cy0+Y2hlcnJ5X21hcmspCisJCWNoZXJyeV9waWNrX2xpc3QobmV3bGlzdCwgcmV2cyk7CisKKwlpZiAocmV2cy0+bGVmdF9vbmx5IHx8IHJldnMtPnJpZ2h0X29ubHkpCisJCWxpbWl0X2xlZnRfcmlnaHQobmV3bGlzdCwgcmV2cyk7CisKKwlpZiAoYm90dG9tKSB7CisJCWxpbWl0X3RvX2FuY2VzdHJ5KGJvdHRvbSwgbmV3bGlzdCk7CisJCWZyZWVfY29tbWl0X2xpc3QoYm90dG9tKTsKKwl9CisKKwlyZXZzLT5jb21taXRzID0gbmV3bGlzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX3Jldl9jbWRsaW5lKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICBzdHJ1Y3Qgb2JqZWN0ICppdGVtLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgaW50IHdoZW5jZSwKKwkJCSAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgcmV2X2NtZGxpbmVfaW5mbyAqaW5mbyA9ICZyZXZzLT5jbWRsaW5lOworCWludCBuciA9IGluZm8tPm5yOworCisJQUxMT0NfR1JPVyhpbmZvLT5yZXYsIG5yICsgMSwgaW5mby0+YWxsb2MpOworCWluZm8tPnJldltucl0uaXRlbSA9IGl0ZW07CisJaW5mby0+cmV2W25yXS5uYW1lID0gbmFtZTsKKwlpbmZvLT5yZXZbbnJdLndoZW5jZSA9IHdoZW5jZTsKKwlpbmZvLT5yZXZbbnJdLmZsYWdzID0gZmxhZ3M7CisJaW5mby0+bnIrKzsKK30KKworc3RydWN0IGFsbF9yZWZzX2NiIHsKKwlpbnQgYWxsX2ZsYWdzOworCWludCB3YXJuZWRfYmFkX3JlZmxvZzsKKwlzdHJ1Y3QgcmV2X2luZm8gKmFsbF9yZXZzOworCWNvbnN0IGNoYXIgKm5hbWVfZm9yX2Vycm9ybXNnOworfTsKKworc3RhdGljIGludCBoYW5kbGVfb25lX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgYWxsX3JlZnNfY2IgKmNiID0gY2JfZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBnZXRfcmVmZXJlbmNlKGNiLT5hbGxfcmV2cywgcGF0aCwgc2hhMSwKKwkJCQkJICAgICAgY2ItPmFsbF9mbGFncyk7CisJYWRkX3Jldl9jbWRsaW5lKGNiLT5hbGxfcmV2cywgb2JqZWN0LCBwYXRoLCBSRVZfQ01EX1JFRiwgY2ItPmFsbF9mbGFncyk7CisJYWRkX3BlbmRpbmdfc2hhMShjYi0+YWxsX3JldnMsIHBhdGgsIHNoYTEsIGNiLT5hbGxfZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbml0X2FsbF9yZWZzX2NiKHN0cnVjdCBhbGxfcmVmc19jYiAqY2IsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwl1bnNpZ25lZCBmbGFncykKK3sKKwljYi0+YWxsX3JldnMgPSByZXZzOworCWNiLT5hbGxfZmxhZ3MgPSBmbGFnczsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3JlZnMoY29uc3QgY2hhciAqc3VibW9kdWxlLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGZsYWdzLAorCQlpbnQgKCpmb3JfZWFjaCkoY29uc3QgY2hhciAqLCBlYWNoX3JlZl9mbiwgdm9pZCAqKSkKK3sKKwlzdHJ1Y3QgYWxsX3JlZnNfY2IgY2I7CisJaW5pdF9hbGxfcmVmc19jYigmY2IsIHJldnMsIGZsYWdzKTsKKwlmb3JfZWFjaChzdWJtb2R1bGUsIGhhbmRsZV9vbmVfcmVmLCAmY2IpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfb25lX3JlZmxvZ19jb21taXQodW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgYWxsX3JlZnNfY2IgKmNiID0gY2JfZGF0YTsKKwlpZiAoIWlzX251bGxfc2hhMShzaGExKSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCQlpZiAobykgeworCQkJby0+ZmxhZ3MgfD0gY2ItPmFsbF9mbGFnczsKKwkJCS8qID8/PyBDTURMSU5FRkxBR1MgPz8/ICovCisJCQlhZGRfcGVuZGluZ19vYmplY3QoY2ItPmFsbF9yZXZzLCBvLCAiIik7CisJCX0KKwkJZWxzZSBpZiAoIWNiLT53YXJuZWRfYmFkX3JlZmxvZykgeworCQkJd2FybmluZygicmVmbG9nIG9mICclcycgcmVmZXJlbmNlcyBwcnVuZWQgY29tbWl0cyIsCisJCQkJY2ItPm5hbWVfZm9yX2Vycm9ybXNnKTsKKwkJCWNiLT53YXJuZWRfYmFkX3JlZmxvZyA9IDE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX29uZV9yZWZsb2dfZW50KHVuc2lnbmVkIGNoYXIgKm9zaGExLCB1bnNpZ25lZCBjaGFyICpuc2hhMSwKKwkJY29uc3QgY2hhciAqZW1haWwsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wLCBpbnQgdHosCisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJaGFuZGxlX29uZV9yZWZsb2dfY29tbWl0KG9zaGExLCBjYl9kYXRhKTsKKwloYW5kbGVfb25lX3JlZmxvZ19jb21taXQobnNoYTEsIGNiX2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9vbmVfcmVmbG9nKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBhbGxfcmVmc19jYiAqY2IgPSBjYl9kYXRhOworCWNiLT53YXJuZWRfYmFkX3JlZmxvZyA9IDA7CisJY2ItPm5hbWVfZm9yX2Vycm9ybXNnID0gcGF0aDsKKwlmb3JfZWFjaF9yZWZsb2dfZW50KHBhdGgsIGhhbmRsZV9vbmVfcmVmbG9nX2VudCwgY2JfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWZsb2coc3RydWN0IHJldl9pbmZvICpyZXZzLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgYWxsX3JlZnNfY2IgY2I7CisJY2IuYWxsX3JldnMgPSByZXZzOworCWNiLmFsbF9mbGFncyA9IGZsYWdzOworCWZvcl9lYWNoX3JlZmxvZyhoYW5kbGVfb25lX3JlZmxvZywgJmNiKTsKK30KKworc3RhdGljIGludCBhZGRfcGFyZW50c19vbmx5KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqYXJnXywgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IG9iamVjdCAqaXQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwljb25zdCBjaGFyICphcmcgPSBhcmdfOworCisJaWYgKCphcmcgPT0gJ14nKSB7CisJCWZsYWdzIF49IFVOSU5URVJFU1RJTkc7CisJCWFyZysrOworCX0KKwlpZiAoZ2V0X3NoYTFfY29tbWl0dGlzaChhcmcsIHNoYTEpKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoMSkgeworCQlpdCA9IGdldF9yZWZlcmVuY2UocmV2cywgYXJnLCBzaGExLCAwKTsKKwkJaWYgKCFpdCAmJiByZXZzLT5pZ25vcmVfbWlzc2luZykKKwkJCXJldHVybiAwOworCQlpZiAoaXQtPnR5cGUgIT0gT0JKX1RBRykKKwkJCWJyZWFrOworCQlpZiAoISgoc3RydWN0IHRhZyopaXQpLT50YWdnZWQpCisJCQlyZXR1cm4gMDsKKwkJaGFzaGNweShzaGExLCAoKHN0cnVjdCB0YWcqKWl0KS0+dGFnZ2VkLT5zaGExKTsKKwl9CisJaWYgKGl0LT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiAwOworCWNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopaXQ7CisJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQlpdCA9ICZwYXJlbnRzLT5pdGVtLT5vYmplY3Q7CisJCWl0LT5mbGFncyB8PSBmbGFnczsKKwkJYWRkX3Jldl9jbWRsaW5lKHJldnMsIGl0LCBhcmdfLCBSRVZfQ01EX1BBUkVOVFNfT05MWSwgZmxhZ3MpOworCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgaXQsIGFyZyk7CisJfQorCXJldHVybiAxOworfQorCit2b2lkIGluaXRfcmV2aXNpb25zKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcHJlZml4KQoreworCW1lbXNldChyZXZzLCAwLCBzaXplb2YoKnJldnMpKTsKKworCXJldnMtPmFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCXJldnMtPmlnbm9yZV9tZXJnZXMgPSAxOworCXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgPSAxOworCURJRkZfT1BUX1NFVCgmcmV2cy0+cHJ1bmluZywgUkVDVVJTSVZFKTsKKwlESUZGX09QVF9TRVQoJnJldnMtPnBydW5pbmcsIFFVSUNLKTsKKwlyZXZzLT5wcnVuaW5nLmFkZF9yZW1vdmUgPSBmaWxlX2FkZF9yZW1vdmU7CisJcmV2cy0+cHJ1bmluZy5jaGFuZ2UgPSBmaWxlX2NoYW5nZTsKKwlyZXZzLT5saWZvID0gMTsKKwlyZXZzLT5kZW5zZSA9IDE7CisJcmV2cy0+cHJlZml4ID0gcHJlZml4OworCXJldnMtPm1heF9hZ2UgPSAtMTsKKwlyZXZzLT5taW5fYWdlID0gLTE7CisJcmV2cy0+c2tpcF9jb3VudCA9IC0xOworCXJldnMtPm1heF9jb3VudCA9IC0xOworCXJldnMtPm1heF9wYXJlbnRzID0gLTE7CisKKwlyZXZzLT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfREVGQVVMVDsKKworCXJldnMtPmdyZXBfZmlsdGVyLnN0YXR1c19vbmx5ID0gMTsKKwlyZXZzLT5ncmVwX2ZpbHRlci5wYXR0ZXJuX3RhaWwgPSAmKHJldnMtPmdyZXBfZmlsdGVyLnBhdHRlcm5fbGlzdCk7CisJcmV2cy0+Z3JlcF9maWx0ZXIuaGVhZGVyX3RhaWwgPSAmKHJldnMtPmdyZXBfZmlsdGVyLmhlYWRlcl9saXN0KTsKKwlyZXZzLT5ncmVwX2ZpbHRlci5yZWdmbGFncyA9IFJFR19ORVdMSU5FOworCisJZGlmZl9zZXR1cCgmcmV2cy0+ZGlmZm9wdCk7CisJaWYgKHByZWZpeCAmJiAhcmV2cy0+ZGlmZm9wdC5wcmVmaXgpIHsKKwkJcmV2cy0+ZGlmZm9wdC5wcmVmaXggPSBwcmVmaXg7CisJCXJldnMtPmRpZmZvcHQucHJlZml4X2xlbmd0aCA9IHN0cmxlbihwcmVmaXgpOworCX0KKworCXJldnMtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA9IC0xOworfQorCitzdGF0aWMgdm9pZCBhZGRfcGVuZGluZ19jb21taXRfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1pdF9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXdoaWxlIChjb21taXRfbGlzdCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSAmY29tbWl0X2xpc3QtPml0ZW0tPm9iamVjdDsKKwkJb2JqZWN0LT5mbGFncyB8PSBmbGFnczsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9iamVjdCwgc2hhMV90b19oZXgob2JqZWN0LT5zaGExKSk7CisJCWNvbW1pdF9saXN0ID0gY29tbWl0X2xpc3QtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3Nob3dfbWVyZ2Uoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXM7CisJc3RydWN0IGNvbW1pdCAqaGVhZCwgKm90aGVyOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY29uc3QgY2hhciAqKnBydW5lID0gTlVMTDsKKwlpbnQgaSwgcHJ1bmVfbnVtID0gMTsgLyogY291bnRpbmcgdGVybWluYXRpbmcgTlVMTCAqLworCisJaWYgKGdldF9zaGExKCJIRUFEIiwgc2hhMSkpCisJCWRpZSgiLS1tZXJnZSB3aXRob3V0IEhFQUQ/Iik7CisJaGVhZCA9IGxvb2t1cF9jb21taXRfb3JfZGllKHNoYTEsICJIRUFEIik7CisJaWYgKGdldF9zaGExKCJNRVJHRV9IRUFEIiwgc2hhMSkpCisJCWRpZSgiLS1tZXJnZSB3aXRob3V0IE1FUkdFX0hFQUQ/Iik7CisJb3RoZXIgPSBsb29rdXBfY29tbWl0X29yX2RpZShzaGExLCAiTUVSR0VfSEVBRCIpOworCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCAmaGVhZC0+b2JqZWN0LCAiSEVBRCIpOworCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCAmb3RoZXItPm9iamVjdCwgIk1FUkdFX0hFQUQiKTsKKwliYXNlcyA9IGdldF9tZXJnZV9iYXNlcyhoZWFkLCBvdGhlciwgMSk7CisJYWRkX3BlbmRpbmdfY29tbWl0X2xpc3QocmV2cywgYmFzZXMsIFVOSU5URVJFU1RJTkcpOworCWZyZWVfY29tbWl0X2xpc3QoYmFzZXMpOworCWhlYWQtPm9iamVjdC5mbGFncyB8PSBTWU1NRVRSSUNfTEVGVDsKKworCWlmICghYWN0aXZlX25yKQorCQlyZWFkX2NhY2hlKCk7CisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWlmICghY2Vfc3RhZ2UoY2UpKQorCQkJY29udGludWU7CisJCWlmIChjZV9wYXRoX21hdGNoKGNlLCAmcmV2cy0+cHJ1bmVfZGF0YSkpIHsKKwkJCXBydW5lX251bSsrOworCQkJcHJ1bmUgPSB4cmVhbGxvYyhwcnVuZSwgc2l6ZW9mKCpwcnVuZSkgKiBwcnVuZV9udW0pOworCQkJcHJ1bmVbcHJ1bmVfbnVtLTJdID0gY2UtPm5hbWU7CisJCQlwcnVuZVtwcnVuZV9udW0tMV0gPSBOVUxMOworCQl9CisJCXdoaWxlICgoaSsxIDwgYWN0aXZlX25yKSAmJgorCQkgICAgICAgY2Vfc2FtZV9uYW1lKGNlLCBhY3RpdmVfY2FjaGVbaSsxXSkpCisJCQlpKys7CisJfQorCWZyZWVfcGF0aHNwZWMoJnJldnMtPnBydW5lX2RhdGEpOworCWluaXRfcGF0aHNwZWMoJnJldnMtPnBydW5lX2RhdGEsIHBydW5lKTsKKwlyZXZzLT5saW1pdGVkID0gMTsKK30KKworaW50IGhhbmRsZV9yZXZpc2lvbl9hcmcoY29uc3QgY2hhciAqYXJnXywgc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgZmxhZ3MsIHVuc2lnbmVkIHJldmFyZ19vcHQpCit7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IG9jOworCWNoYXIgKmRvdGRvdDsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgbG9jYWxfZmxhZ3M7CisJY29uc3QgY2hhciAqYXJnID0gYXJnXzsKKwlpbnQgY2FudF9iZV9maWxlbmFtZSA9IHJldmFyZ19vcHQgJiBSRVZBUkdfQ0FOTk9UX0JFX0ZJTEVOQU1FOworCXVuc2lnbmVkIGdldF9zaGExX2ZsYWdzID0gMDsKKworCWRvdGRvdCA9IHN0cnN0cihhcmcsICIuLiIpOworCWlmIChkb3Rkb3QpIHsKKwkJdW5zaWduZWQgY2hhciBmcm9tX3NoYTFbMjBdOworCQljb25zdCBjaGFyICpuZXh0ID0gZG90ZG90ICsgMjsKKwkJY29uc3QgY2hhciAqdGhpcyA9IGFyZzsKKwkJaW50IHN5bW1ldHJpYyA9ICpuZXh0ID09ICcuJzsKKwkJdW5zaWduZWQgaW50IGZsYWdzX2V4Y2x1ZGUgPSBmbGFncyBeIFVOSU5URVJFU1RJTkc7CisJCXN0YXRpYyBjb25zdCBjaGFyIGhlYWRfYnlfZGVmYXVsdFtdID0gIkhFQUQiOworCQl1bnNpZ25lZCBpbnQgYV9mbGFnczsKKworCQkqZG90ZG90ID0gMDsKKwkJbmV4dCArPSBzeW1tZXRyaWM7CisKKwkJaWYgKCEqbmV4dCkKKwkJCW5leHQgPSBoZWFkX2J5X2RlZmF1bHQ7CisJCWlmIChkb3Rkb3QgPT0gYXJnKQorCQkJdGhpcyA9IGhlYWRfYnlfZGVmYXVsdDsKKwkJaWYgKHRoaXMgPT0gaGVhZF9ieV9kZWZhdWx0ICYmIG5leHQgPT0gaGVhZF9ieV9kZWZhdWx0ICYmCisJCSAgICAhc3ltbWV0cmljKSB7CisJCQkvKgorCQkJICogSnVzdCAiLi4iPyAgVGhhdCBpcyBub3QgYSByYW5nZSBidXQgdGhlCisJCQkgKiBwYXRoc3BlYyBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkuCisJCQkgKi8KKwkJCWlmICghY2FudF9iZV9maWxlbmFtZSkgeworCQkJCSpkb3Rkb3QgPSAnLic7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWlmICghZ2V0X3NoYTFfY29tbWl0dGlzaCh0aGlzLCBmcm9tX3NoYTEpICYmCisJCSAgICAhZ2V0X3NoYTFfY29tbWl0dGlzaChuZXh0LCBzaGExKSkgeworCQkJc3RydWN0IGNvbW1pdCAqYSwgKmI7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmV4Y2x1ZGU7CisKKwkJCWEgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShmcm9tX3NoYTEpOworCQkJYiA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCQkJaWYgKCFhIHx8ICFiKSB7CisJCQkJaWYgKHJldnMtPmlnbm9yZV9taXNzaW5nKQorCQkJCQlyZXR1cm4gMDsKKwkJCQlkaWUoc3ltbWV0cmljID8KKwkJCQkgICAgIkludmFsaWQgc3ltbWV0cmljIGRpZmZlcmVuY2UgZXhwcmVzc2lvbiAlcy4uLiVzIiA6CisJCQkJICAgICJJbnZhbGlkIHJldmlzaW9uIHJhbmdlICVzLi4lcyIsCisJCQkJICAgIGFyZywgbmV4dCk7CisJCQl9CisKKwkJCWlmICghY2FudF9iZV9maWxlbmFtZSkgeworCQkJCSpkb3Rkb3QgPSAnLic7CisJCQkJdmVyaWZ5X25vbl9maWxlbmFtZShyZXZzLT5wcmVmaXgsIGFyZyk7CisJCQl9CisKKwkJCWlmIChzeW1tZXRyaWMpIHsKKwkJCQlleGNsdWRlID0gZ2V0X21lcmdlX2Jhc2VzKGEsIGIsIDEpOworCQkJCWFkZF9wZW5kaW5nX2NvbW1pdF9saXN0KHJldnMsIGV4Y2x1ZGUsCisJCQkJCQkJZmxhZ3NfZXhjbHVkZSk7CisJCQkJZnJlZV9jb21taXRfbGlzdChleGNsdWRlKTsKKwkJCQlhX2ZsYWdzID0gZmxhZ3MgfCBTWU1NRVRSSUNfTEVGVDsKKwkJCX0gZWxzZQorCQkJCWFfZmxhZ3MgPSBmbGFnc19leGNsdWRlOworCQkJYS0+b2JqZWN0LmZsYWdzIHw9IGFfZmxhZ3M7CisJCQliLT5vYmplY3QuZmxhZ3MgfD0gZmxhZ3M7CisJCQlhZGRfcmV2X2NtZGxpbmUocmV2cywgJmEtPm9iamVjdCwgdGhpcywKKwkJCQkJUkVWX0NNRF9MRUZULCBhX2ZsYWdzKTsKKwkJCWFkZF9yZXZfY21kbGluZShyZXZzLCAmYi0+b2JqZWN0LCBuZXh0LAorCQkJCQlSRVZfQ01EX1JJR0hULCBmbGFncyk7CisJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJmEtPm9iamVjdCwgdGhpcyk7CisJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJmItPm9iamVjdCwgbmV4dCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkqZG90ZG90ID0gJy4nOworCX0KKwlkb3Rkb3QgPSBzdHJzdHIoYXJnLCAiXkAiKTsKKwlpZiAoZG90ZG90ICYmICFkb3Rkb3RbMl0pIHsKKwkJKmRvdGRvdCA9IDA7CisJCWlmIChhZGRfcGFyZW50c19vbmx5KHJldnMsIGFyZywgZmxhZ3MpKQorCQkJcmV0dXJuIDA7CisJCSpkb3Rkb3QgPSAnXic7CisJfQorCWRvdGRvdCA9IHN0cnN0cihhcmcsICJeISIpOworCWlmIChkb3Rkb3QgJiYgIWRvdGRvdFsyXSkgeworCQkqZG90ZG90ID0gMDsKKwkJaWYgKCFhZGRfcGFyZW50c19vbmx5KHJldnMsIGFyZywgZmxhZ3MgXiBVTklOVEVSRVNUSU5HKSkKKwkJCSpkb3Rkb3QgPSAnXic7CisJfQorCisJbG9jYWxfZmxhZ3MgPSAwOworCWlmICgqYXJnID09ICdeJykgeworCQlsb2NhbF9mbGFncyA9IFVOSU5URVJFU1RJTkc7CisJCWFyZysrOworCX0KKworCWlmIChyZXZhcmdfb3B0ICYgUkVWQVJHX0NPTU1JVFRJU0gpCisJCWdldF9zaGExX2ZsYWdzID0gR0VUX1NIQTFfQ09NTUlUVElTSDsKKworCWlmIChnZXRfc2hhMV93aXRoX2NvbnRleHQoYXJnLCBnZXRfc2hhMV9mbGFncywgc2hhMSwgJm9jKSkKKwkJcmV0dXJuIHJldnMtPmlnbm9yZV9taXNzaW5nID8gMCA6IC0xOworCWlmICghY2FudF9iZV9maWxlbmFtZSkKKwkJdmVyaWZ5X25vbl9maWxlbmFtZShyZXZzLT5wcmVmaXgsIGFyZyk7CisJb2JqZWN0ID0gZ2V0X3JlZmVyZW5jZShyZXZzLCBhcmcsIHNoYTEsIGZsYWdzIF4gbG9jYWxfZmxhZ3MpOworCWFkZF9yZXZfY21kbGluZShyZXZzLCBvYmplY3QsIGFyZ18sIFJFVl9DTURfUkVWLCBmbGFncyBeIGxvY2FsX2ZsYWdzKTsKKwlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9tb2RlKHJldnMsIG9iamVjdCwgYXJnLCBvYy5tb2RlKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNtZGxpbmVfcGF0aHNwZWMgeworCWludCBhbGxvYzsKKwlpbnQgbnI7CisJY29uc3QgY2hhciAqKnBhdGg7Cit9OworCitzdGF0aWMgdm9pZCBhcHBlbmRfcHJ1bmVfZGF0YShzdHJ1Y3QgY21kbGluZV9wYXRoc3BlYyAqcHJ1bmUsIGNvbnN0IGNoYXIgKiphdikKK3sKKwl3aGlsZSAoKmF2KSB7CisJCUFMTE9DX0dST1cocHJ1bmUtPnBhdGgsIHBydW5lLT5ucisxLCBwcnVuZS0+YWxsb2MpOworCQlwcnVuZS0+cGF0aFtwcnVuZS0+bnIrK10gPSAqKGF2KyspOworCX0KK30KKworc3RhdGljIHZvaWQgcmVhZF9wYXRoc3BlY19mcm9tX3N0ZGluKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJICAgICBzdHJ1Y3QgY21kbGluZV9wYXRoc3BlYyAqcHJ1bmUpCit7CisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc2IsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJaW50IGxlbiA9IHNiLT5sZW47CisJCWlmIChsZW4gJiYgc2ItPmJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQkJc2ItPmJ1ZlstLWxlbl0gPSAnXDAnOworCQlBTExPQ19HUk9XKHBydW5lLT5wYXRoLCBwcnVuZS0+bnIrMSwgcHJ1bmUtPmFsbG9jKTsKKwkJcHJ1bmUtPnBhdGhbcHJ1bmUtPm5yKytdID0geHN0cmR1cChzYi0+YnVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcmV2aXNpb25zX2Zyb21fc3RkaW4oc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCSAgICAgIHN0cnVjdCBjbWRsaW5lX3BhdGhzcGVjICpwcnVuZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiOworCWludCBzZWVuX2Rhc2hkYXNoID0gMDsKKworCXN0cmJ1Zl9pbml0KCZzYiwgMTAwMCk7CisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJnNiLCBzdGRpbiwgJ1xuJykgIT0gRU9GKSB7CisJCWludCBsZW4gPSBzYi5sZW47CisJCWlmIChsZW4gJiYgc2IuYnVmW2xlbiAtIDFdID09ICdcbicpCisJCQlzYi5idWZbLS1sZW5dID0gJ1wwJzsKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKwkJaWYgKHNiLmJ1ZlswXSA9PSAnLScpIHsKKwkJCWlmIChsZW4gPT0gMiAmJiBzYi5idWZbMV0gPT0gJy0nKSB7CisJCQkJc2Vlbl9kYXNoZGFzaCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkaWUoIm9wdGlvbnMgbm90IHN1cHBvcnRlZCBpbiAtLXN0ZGluIG1vZGUiKTsKKwkJfQorCQlpZiAoaGFuZGxlX3JldmlzaW9uX2FyZyhzYi5idWYsIHJldnMsIDAsIFJFVkFSR19DQU5OT1RfQkVfRklMRU5BTUUpKQorCQkJZGllKCJiYWQgcmV2aXNpb24gJyVzJyIsIHNiLmJ1Zik7CisJfQorCWlmIChzZWVuX2Rhc2hkYXNoKQorCQlyZWFkX3BhdGhzcGVjX2Zyb21fc3RkaW4ocmV2cywgJnNiLCBwcnVuZSk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2dyZXAoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpwdG4sIGVudW0gZ3JlcF9wYXRfdG9rZW4gd2hhdCkKK3sKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZyZXZzLT5ncmVwX2ZpbHRlciwgcHRuLCAiY29tbWFuZCBsaW5lIiwgMCwgd2hhdCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9oZWFkZXJfZ3JlcChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQsIGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oJnJldnMtPmdyZXBfZmlsdGVyLCBmaWVsZCwgcGF0dGVybik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9tZXNzYWdlX2dyZXAoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpwYXR0ZXJuKQoreworCWFkZF9ncmVwKHJldnMsIHBhdHRlcm4sIEdSRVBfUEFUVEVSTl9CT0RZKTsKK30KKworc3RhdGljIGludCBoYW5kbGVfcmV2aXNpb25fb3B0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgICAgIGludCAqdW5rYywgY29uc3QgY2hhciAqKnVua3YpCit7CisJY29uc3QgY2hhciAqYXJnID0gYXJndlswXTsKKwljb25zdCBjaGFyICpvcHRhcmc7CisJaW50IGFyZ2NvdW50OworCisJLyogcHNldWRvIHJldmlzaW9uIGFyZ3VtZW50cyAqLworCWlmICghc3RyY21wKGFyZywgIi0tYWxsIikgfHwgIXN0cmNtcChhcmcsICItLWJyYW5jaGVzIikgfHwKKwkgICAgIXN0cmNtcChhcmcsICItLXRhZ3MiKSB8fCAhc3RyY21wKGFyZywgIi0tcmVtb3RlcyIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS1yZWZsb2ciKSB8fCAhc3RyY21wKGFyZywgIi0tbm90IikgfHwKKwkgICAgIXN0cmNtcChhcmcsICItLW5vLXdhbGsiKSB8fCAhc3RyY21wKGFyZywgIi0tZG8td2FsayIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSB8fCAhcHJlZml4Y21wKGFyZywgIi0tZ2xvYj0iKSB8fAorCSAgICAhcHJlZml4Y21wKGFyZywgIi0tYnJhbmNoZXM9IikgfHwgIXByZWZpeGNtcChhcmcsICItLXRhZ3M9IikgfHwKKwkgICAgIXByZWZpeGNtcChhcmcsICItLXJlbW90ZXM9IikgfHwgIXByZWZpeGNtcChhcmcsICItLW5vLXdhbGs9IikpCisJeworCQl1bmt2WygqdW5rYykrK10gPSBhcmc7CisJCXJldHVybiAxOworCX0KKworCWlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgibWF4LWNvdW50IiwgYXJndiwgJm9wdGFyZykpKSB7CisJCXJldnMtPm1heF9jb3VudCA9IGF0b2kob3B0YXJnKTsKKwkJcmV2cy0+bm9fd2FsayA9IDA7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJza2lwIiwgYXJndiwgJm9wdGFyZykpKSB7CisJCXJldnMtPnNraXBfY291bnQgPSBhdG9pKG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKCgqYXJnID09ICctJykgJiYgaXNkaWdpdChhcmdbMV0pKSB7CisJLyogYWNjZXB0IC08ZGlnaXQ+LCBsaWtlIHRyYWRpdGlvbmFsICJoZWFkIiAqLworCQlyZXZzLT5tYXhfY291bnQgPSBhdG9pKGFyZyArIDEpOworCQlyZXZzLT5ub193YWxrID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLW4iKSkgeworCQlpZiAoYXJnYyA8PSAxKQorCQkJcmV0dXJuIGVycm9yKCItbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworCQlyZXZzLT5tYXhfY291bnQgPSBhdG9pKGFyZ3ZbMV0pOworCQlyZXZzLT5ub193YWxrID0gMDsKKwkJcmV0dXJuIDI7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi1uIikpIHsKKwkJcmV2cy0+bWF4X2NvdW50ID0gYXRvaShhcmcgKyAyKTsKKwkJcmV2cy0+bm9fd2FsayA9IDA7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgibWF4LWFnZSIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5tYXhfYWdlID0gYXRvaShvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgic2luY2UiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWF4X2FnZSA9IGFwcHJveGlkYXRlKG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJhZnRlciIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5tYXhfYWdlID0gYXBwcm94aWRhdGUob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoIm1pbi1hZ2UiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWluX2FnZSA9IGF0b2kob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoImJlZm9yZSIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5taW5fYWdlID0gYXBwcm94aWRhdGUob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoInVudGlsIiwgYXJndiwgJm9wdGFyZykpKSB7CisJCXJldnMtPm1pbl9hZ2UgPSBhcHByb3hpZGF0ZShvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZmlyc3QtcGFyZW50IikpIHsKKwkJcmV2cy0+Zmlyc3RfcGFyZW50X29ubHkgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFuY2VzdHJ5LXBhdGgiKSkgeworCQlyZXZzLT5hbmNlc3RyeV9wYXRoID0gMTsKKwkJcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSA9IDA7CisJCXJldnMtPmxpbWl0ZWQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItZyIpIHx8ICFzdHJjbXAoYXJnLCAiLS13YWxrLXJlZmxvZ3MiKSkgeworCQlpbml0X3JlZmxvZ193YWxrKCZyZXZzLT5yZWZsb2dfaW5mbyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZGVmYXVsdCIpKSB7CisJCWlmIChhcmdjIDw9IDEpCisJCQlyZXR1cm4gZXJyb3IoImJhZCAtLWRlZmF1bHQgYXJndW1lbnQiKTsKKwkJcmV2cy0+ZGVmID0gYXJndlsxXTsKKwkJcmV0dXJuIDI7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbWVyZ2UiKSkgeworCQlyZXZzLT5zaG93X21lcmdlID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS10b3BvLW9yZGVyIikpIHsKKwkJcmV2cy0+bGlmbyA9IDE7CisJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNpbXBsaWZ5LW1lcmdlcyIpKSB7CisJCXJldnMtPnNpbXBsaWZ5X21lcmdlcyA9IDE7CisJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCQlyZXZzLT5yZXdyaXRlX3BhcmVudHMgPSAxOworCQlyZXZzLT5zaW1wbGlmeV9oaXN0b3J5ID0gMDsKKwkJcmV2cy0+bGltaXRlZCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2ltcGxpZnktYnktZGVjb3JhdGlvbiIpKSB7CisJCXJldnMtPnNpbXBsaWZ5X21lcmdlcyA9IDE7CisJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCQlyZXZzLT5yZXdyaXRlX3BhcmVudHMgPSAxOworCQlyZXZzLT5zaW1wbGlmeV9oaXN0b3J5ID0gMDsKKwkJcmV2cy0+c2ltcGxpZnlfYnlfZGVjb3JhdGlvbiA9IDE7CisJCXJldnMtPmxpbWl0ZWQgPSAxOworCQlyZXZzLT5wcnVuZSA9IDE7CisJCWxvYWRfcmVmX2RlY29yYXRpb25zKERFQ09SQVRFX1NIT1JUX1JFRlMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWRhdGUtb3JkZXIiKSkgeworCQlyZXZzLT5saWZvID0gMDsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tZWFybHktb3V0cHV0IikpIHsKKwkJaW50IGNvdW50ID0gMTAwOworCQlzd2l0Y2ggKGFyZ1sxNF0pIHsKKwkJY2FzZSAnPSc6CisJCQljb3VudCA9IGF0b2koYXJnKzE1KTsKKwkJCS8qIEZhbGx0aHJvdWdoICovCisJCWNhc2UgMDoKKwkJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCQkgICAgICAgcmV2cy0+ZWFybHlfb3V0cHV0ID0gY291bnQ7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1wYXJlbnRzIikpIHsKKwkJcmV2cy0+cmV3cml0ZV9wYXJlbnRzID0gMTsKKwkJcmV2cy0+cHJpbnRfcGFyZW50cyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZGVuc2UiKSkgeworCQlyZXZzLT5kZW5zZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc3BhcnNlIikpIHsKKwkJcmV2cy0+ZGVuc2UgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNob3ctYWxsIikpIHsKKwkJcmV2cy0+c2hvd19hbGwgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbW92ZS1lbXB0eSIpKSB7CisJCXJldnMtPnJlbW92ZV9lbXB0eV90cmVlcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbWVyZ2VzIikpIHsKKwkJcmV2cy0+bWluX3BhcmVudHMgPSAyOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW1lcmdlcyIpKSB7CisJCXJldnMtPm1heF9wYXJlbnRzID0gMTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1taW4tcGFyZW50cz0iKSkgeworCQlyZXZzLT5taW5fcGFyZW50cyA9IGF0b2koYXJnKzE0KTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1uby1taW4tcGFyZW50cyIpKSB7CisJCXJldnMtPm1pbl9wYXJlbnRzID0gMDsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1tYXgtcGFyZW50cz0iKSkgeworCQlyZXZzLT5tYXhfcGFyZW50cyA9IGF0b2koYXJnKzE0KTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1uby1tYXgtcGFyZW50cyIpKSB7CisJCXJldnMtPm1heF9wYXJlbnRzID0gLTE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYm91bmRhcnkiKSkgeworCQlyZXZzLT5ib3VuZGFyeSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbGVmdC1yaWdodCIpKSB7CisJCXJldnMtPmxlZnRfcmlnaHQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWxlZnQtb25seSIpKSB7CisJCWlmIChyZXZzLT5yaWdodF9vbmx5KQorCQkJZGllKCItLWxlZnQtb25seSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXJpZ2h0LW9ubHkiCisJCQkgICAgIiBvciAtLWNoZXJyeSIpOworCQlyZXZzLT5sZWZ0X29ubHkgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJpZ2h0LW9ubHkiKSkgeworCQlpZiAocmV2cy0+bGVmdF9vbmx5KQorCQkJZGllKCItLXJpZ2h0LW9ubHkgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1sZWZ0LW9ubHkiKTsKKwkJcmV2cy0+cmlnaHRfb25seSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tY2hlcnJ5IikpIHsKKwkJaWYgKHJldnMtPmxlZnRfb25seSkKKwkJCWRpZSgiLS1jaGVycnkgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1sZWZ0LW9ubHkiKTsKKwkJcmV2cy0+Y2hlcnJ5X21hcmsgPSAxOworCQlyZXZzLT5yaWdodF9vbmx5ID0gMTsKKwkJcmV2cy0+bWF4X3BhcmVudHMgPSAxOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jb3VudCIpKSB7CisJCXJldnMtPmNvdW50ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jaGVycnktbWFyayIpKSB7CisJCWlmIChyZXZzLT5jaGVycnlfcGljaykKKwkJCWRpZSgiLS1jaGVycnktbWFyayBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWNoZXJyeS1waWNrIik7CisJCXJldnMtPmNoZXJyeV9tYXJrID0gMTsKKwkJcmV2cy0+bGltaXRlZCA9IDE7IC8qIG5lZWRzIGxpbWl0X2xpc3QoKSAqLworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNoZXJyeS1waWNrIikpIHsKKwkJaWYgKHJldnMtPmNoZXJyeV9tYXJrKQorCQkJZGllKCItLWNoZXJyeS1waWNrIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tY2hlcnJ5LW1hcmsiKTsKKwkJcmV2cy0+Y2hlcnJ5X3BpY2sgPSAxOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1vYmplY3RzIikpIHsKKwkJcmV2cy0+dGFnX29iamVjdHMgPSAxOworCQlyZXZzLT50cmVlX29iamVjdHMgPSAxOworCQlyZXZzLT5ibG9iX29iamVjdHMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW9iamVjdHMtZWRnZSIpKSB7CisJCXJldnMtPnRhZ19vYmplY3RzID0gMTsKKwkJcmV2cy0+dHJlZV9vYmplY3RzID0gMTsKKwkJcmV2cy0+YmxvYl9vYmplY3RzID0gMTsKKwkJcmV2cy0+ZWRnZV9oaW50ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJpZnktb2JqZWN0cyIpKSB7CisJCXJldnMtPnRhZ19vYmplY3RzID0gMTsKKwkJcmV2cy0+dHJlZV9vYmplY3RzID0gMTsKKwkJcmV2cy0+YmxvYl9vYmplY3RzID0gMTsKKwkJcmV2cy0+dmVyaWZ5X29iamVjdHMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXVucGFja2VkIikpIHsKKwkJcmV2cy0+dW5wYWNrZWQgPSAxOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLXVucGFja2VkPSIpKSB7CisJCWRpZSgiLS11bnBhY2tlZD08cGFja2ZpbGU+IG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi1yIikpIHsKKwkJcmV2cy0+ZGlmZiA9IDE7CisJCURJRkZfT1BUX1NFVCgmcmV2cy0+ZGlmZm9wdCwgUkVDVVJTSVZFKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXQiKSkgeworCQlyZXZzLT5kaWZmID0gMTsKKwkJRElGRl9PUFRfU0VUKCZyZXZzLT5kaWZmb3B0LCBSRUNVUlNJVkUpOworCQlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIFRSRUVfSU5fUkVDVVJTSVZFKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLW0iKSkgeworCQlyZXZzLT5pZ25vcmVfbWVyZ2VzID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWMiKSkgeworCQlyZXZzLT5kaWZmID0gMTsKKwkJcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMDsKKwkJcmV2cy0+Y29tYmluZV9tZXJnZXMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNjIikpIHsKKwkJcmV2cy0+ZGlmZiA9IDE7CisJCXJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyA9IDE7CisJCXJldnMtPmNvbWJpbmVfbWVyZ2VzID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXYiKSkgeworCQlyZXZzLT52ZXJib3NlX2hlYWRlciA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcHJldHR5IikpIHsKKwkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOworCQlyZXZzLT5wcmV0dHlfZ2l2ZW4gPSAxOworCQlnZXRfY29tbWl0X2Zvcm1hdChhcmcrOCwgcmV2cyk7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tcHJldHR5PSIpIHx8ICFwcmVmaXhjbXAoYXJnLCAiLS1mb3JtYXQ9IikpIHsKKwkJLyoKKwkJICogRGV0YWNoZWQgZm9ybSAoIi0tcHJldHR5IFgiIGFzIG9wcG9zZWQgdG8gIi0tcHJldHR5PVgiKQorCQkgKiBub3QgYWxsb3dlZCwgc2luY2UgdGhlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLgorCQkgKi8KKwkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOworCQlyZXZzLT5wcmV0dHlfZ2l2ZW4gPSAxOworCQlnZXRfY29tbWl0X2Zvcm1hdChhcmcrOSwgcmV2cyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1ub3RlcyIpIHx8ICFzdHJjbXAoYXJnLCAiLS1ub3RlcyIpKSB7CisJCXJldnMtPnNob3dfbm90ZXMgPSAxOworCQlyZXZzLT5zaG93X25vdGVzX2dpdmVuID0gMTsKKwkJcmV2cy0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LXNpZ25hdHVyZSIpKSB7CisJCXJldnMtPnNob3dfc2lnbmF0dXJlID0gMTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1zaG93LW5vdGVzPSIpIHx8CisJCSAgICFwcmVmaXhjbXAoYXJnLCAiLS1ub3Rlcz0iKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlyZXZzLT5zaG93X25vdGVzID0gMTsKKwkJcmV2cy0+c2hvd19ub3Rlc19naXZlbiA9IDE7CisJCWlmICghcHJlZml4Y21wKGFyZywgIi0tc2hvdy1ub3RlcyIpKSB7CisJCQlpZiAocmV2cy0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzIDwgMCkKKwkJCQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAxOworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBhcmcrMTMpOworCQl9CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgYXJnKzgpOworCQlleHBhbmRfbm90ZXNfcmVmKCZidWYpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJldnMtPm5vdGVzX29wdC5leHRyYV9ub3Rlc19yZWZzLAorCQkJCSAgIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW5vdGVzIikpIHsKKwkJcmV2cy0+c2hvd19ub3RlcyA9IDA7CisJCXJldnMtPnNob3dfbm90ZXNfZ2l2ZW4gPSAxOworCQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAtMTsKKwkJLyogd2UgaGF2ZSBiZWVuIHN0cmR1cCdpbmcgb3Vyc2VsdmVzLCBzbyB0cmljaworCQkgKiBzdHJpbmdfbGlzdCBpbnRvIGZyZWUoKWluZyBzdHJpbmdzICovCisJCXJldnMtPm5vdGVzX29wdC5leHRyYV9ub3Rlc19yZWZzLnN0cmR1cF9zdHJpbmdzID0gMTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnJldnMtPm5vdGVzX29wdC5leHRyYV9ub3Rlc19yZWZzLCAwKTsKKwkJcmV2cy0+bm90ZXNfb3B0LmV4dHJhX25vdGVzX3JlZnMuc3RyZHVwX3N0cmluZ3MgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXN0YW5kYXJkLW5vdGVzIikpIHsKKwkJcmV2cy0+c2hvd19ub3Rlc19naXZlbiA9IDE7CisJCXJldnMtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tc3RhbmRhcmQtbm90ZXMiKSkgeworCQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW9uZWxpbmUiKSkgeworCQlyZXZzLT52ZXJib3NlX2hlYWRlciA9IDE7CisJCWdldF9jb21taXRfZm9ybWF0KCJvbmVsaW5lIiwgcmV2cyk7CisJCXJldnMtPnByZXR0eV9naXZlbiA9IDE7CisJCXJldnMtPmFiYnJldl9jb21taXQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWdyYXBoIikpIHsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJCXJldnMtPnJld3JpdGVfcGFyZW50cyA9IDE7CisJCXJldnMtPmdyYXBoID0gZ3JhcGhfaW5pdChyZXZzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yb290IikpIHsKKwkJcmV2cy0+c2hvd19yb290X2RpZmYgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWNvbW1pdC1pZCIpKSB7CisJCXJldnMtPm5vX2NvbW1pdF9pZCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYWx3YXlzIikpIHsKKwkJcmV2cy0+YWx3YXlzX3Nob3dfaGVhZGVyID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1hYmJyZXYiKSkgeworCQlyZXZzLT5hYmJyZXYgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFiYnJldiIpKSB7CisJCXJldnMtPmFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLWFiYnJldj0iKSkgeworCQlyZXZzLT5hYmJyZXYgPSBzdHJ0b3VsKGFyZyArIDksIE5VTEwsIDEwKTsKKwkJaWYgKHJldnMtPmFiYnJldiA8IE1JTklNVU1fQUJCUkVWKQorCQkJcmV2cy0+YWJicmV2ID0gTUlOSU1VTV9BQkJSRVY7CisJCWVsc2UgaWYgKHJldnMtPmFiYnJldiA+IDQwKQorCQkJcmV2cy0+YWJicmV2ID0gNDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYWJicmV2LWNvbW1pdCIpKSB7CisJCXJldnMtPmFiYnJldl9jb21taXQgPSAxOworCQlyZXZzLT5hYmJyZXZfY29tbWl0X2dpdmVuID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1hYmJyZXYtY29tbWl0IikpIHsKKwkJcmV2cy0+YWJicmV2X2NvbW1pdCA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZnVsbC1kaWZmIikpIHsKKwkJcmV2cy0+ZGlmZiA9IDE7CisJCXJldnMtPmZ1bGxfZGlmZiA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZnVsbC1oaXN0b3J5IikpIHsKKwkJcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVsYXRpdmUtZGF0ZSIpKSB7CisJCXJldnMtPmRhdGVfbW9kZSA9IERBVEVfUkVMQVRJVkU7CisJCXJldnMtPmRhdGVfbW9kZV9leHBsaWNpdCA9IDE7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiZGF0ZSIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5kYXRlX21vZGUgPSBwYXJzZV9kYXRlX2Zvcm1hdChvcHRhcmcpOworCQlyZXZzLT5kYXRlX21vZGVfZXhwbGljaXQgPSAxOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbG9nLXNpemUiKSkgeworCQlyZXZzLT5zaG93X2xvZ19zaXplID0gMTsKKwl9CisJLyoKKwkgKiBHcmVwcGluZyB0aGUgY29tbWl0IGxvZworCSAqLworCWVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJhdXRob3IiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJYWRkX2hlYWRlcl9ncmVwKHJldnMsIEdSRVBfSEVBREVSX0FVVEhPUiwgb3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoImNvbW1pdHRlciIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlhZGRfaGVhZGVyX2dyZXAocmV2cywgR1JFUF9IRUFERVJfQ09NTUlUVEVSLCBvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiZ3JlcC1yZWZsb2ciLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJYWRkX2hlYWRlcl9ncmVwKHJldnMsIEdSRVBfSEVBREVSX1JFRkxPRywgb3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoImdyZXAiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJYWRkX21lc3NhZ2VfZ3JlcChyZXZzLCBvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZ3JlcC1kZWJ1ZyIpKSB7CisJCXJldnMtPmdyZXBfZmlsdGVyLmRlYnVnID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1leHRlbmRlZC1yZWdleHAiKSB8fCAhc3RyY21wKGFyZywgIi1FIikpIHsKKwkJcmV2cy0+Z3JlcF9maWx0ZXIucmVnZmxhZ3MgfD0gUkVHX0VYVEVOREVEOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlZ2V4cC1pZ25vcmUtY2FzZSIpIHx8ICFzdHJjbXAoYXJnLCAiLWkiKSkgeworCQlyZXZzLT5ncmVwX2ZpbHRlci5yZWdmbGFncyB8PSBSRUdfSUNBU0U7CisJCURJRkZfT1BUX1NFVCgmcmV2cy0+ZGlmZm9wdCwgUElDS0FYRV9JR05PUkVfQ0FTRSk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZml4ZWQtc3RyaW5ncyIpIHx8ICFzdHJjbXAoYXJnLCAiLUYiKSkgeworCQlyZXZzLT5ncmVwX2ZpbHRlci5maXhlZCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYWxsLW1hdGNoIikpIHsKKwkJcmV2cy0+Z3JlcF9maWx0ZXIuYWxsX21hdGNoID0gMTsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJlbmNvZGluZyIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlpZiAoc3RyY21wKG9wdGFyZywgIm5vbmUiKSkKKwkJCWdpdF9sb2dfb3V0cHV0X2VuY29kaW5nID0geHN0cmR1cChvcHRhcmcpOworCQllbHNlCisJCQlnaXRfbG9nX291dHB1dF9lbmNvZGluZyA9ICIiOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmV2ZXJzZSIpKSB7CisJCXJldnMtPnJldmVyc2UgXj0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jaGlsZHJlbiIpKSB7CisJCXJldnMtPmNoaWxkcmVuLm5hbWUgPSAiY2hpbGRyZW4iOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1pZ25vcmUtbWlzc2luZyIpKSB7CisJCXJldnMtPmlnbm9yZV9taXNzaW5nID0gMTsKKwl9IGVsc2UgeworCQlpbnQgb3B0cyA9IGRpZmZfb3B0X3BhcnNlKCZyZXZzLT5kaWZmb3B0LCBhcmd2LCBhcmdjKTsKKwkJaWYgKCFvcHRzKQorCQkJdW5rdlsoKnVua2MpKytdID0gYXJnOworCQlyZXR1cm4gb3B0czsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBwYXJzZV9yZXZpc2lvbl9vcHQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAorCQkJY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10pCit7CisJaW50IG4gPSBoYW5kbGVfcmV2aXNpb25fb3B0KHJldnMsIGN0eC0+YXJnYywgY3R4LT5hcmd2LAorCQkJCSAgICAmY3R4LT5jcGlkeCwgY3R4LT5vdXQpOworCWlmIChuIDw9IDApIHsKKwkJZXJyb3IoInVua25vd24gb3B0aW9uIGAlcyciLCBjdHgtPmFyZ3ZbMF0pOworCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2VzdHIsIG9wdGlvbnMpOworCX0KKwljdHgtPmFyZ3YgKz0gbjsKKwljdHgtPmFyZ2MgLT0gbjsKK30KKworc3RhdGljIGludCBmb3JfZWFjaF9iYWRfYmlzZWN0X3JlZihjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBmb3JfZWFjaF9yZWZfaW5fc3VibW9kdWxlKHN1Ym1vZHVsZSwgInJlZnMvYmlzZWN0L2JhZCIsIGZuLCBjYl9kYXRhKTsKK30KKworc3RhdGljIGludCBmb3JfZWFjaF9nb29kX2Jpc2VjdF9yZWYoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luX3N1Ym1vZHVsZShzdWJtb2R1bGUsICJyZWZzL2Jpc2VjdC9nb29kIiwgZm4sIGNiX2RhdGEpOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9yZXZpc2lvbl9wc2V1ZG9fb3B0KGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwKKwkJCQlzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgKmZsYWdzKQoreworCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMF07CisJY29uc3QgY2hhciAqb3B0YXJnOworCWludCBhcmdjb3VudDsKKworCS8qCisJICogTk9URSEKKwkgKgorCSAqIENvbW1hbmRzIGxpa2UgImdpdCBzaG9ydGxvZyIgd2lsbCBub3QgYWNjZXB0IHRoZSBvcHRpb25zIGJlbG93CisJICogdW5sZXNzIHBhcnNlX3JldmlzaW9uX29wdCBxdWV1ZXMgdGhlbSAoYXMgb3Bwb3NlZCB0byBlcnJvcmluZworCSAqIG91dCkuCisJICoKKwkgKiBXaGVuIGltcGxlbWVudGluZyB5b3VyIG5ldyBwc2V1ZG8tb3B0aW9uLCByZW1lbWJlciB0bworCSAqIHJlZ2lzdGVyIGl0IGluIHRoZSBsaXN0IGF0IHRoZSB0b3Agb2YgaGFuZGxlX3JldmlzaW9uX29wdC4KKwkgKi8KKwlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCWhhbmRsZV9yZWZzKHN1Ym1vZHVsZSwgcmV2cywgKmZsYWdzLCBmb3JfZWFjaF9yZWZfc3VibW9kdWxlKTsKKwkJaGFuZGxlX3JlZnMoc3VibW9kdWxlLCByZXZzLCAqZmxhZ3MsIGhlYWRfcmVmX3N1Ym1vZHVsZSk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYnJhbmNoZXMiKSkgeworCQloYW5kbGVfcmVmcyhzdWJtb2R1bGUsIHJldnMsICpmbGFncywgZm9yX2VhY2hfYnJhbmNoX3JlZl9zdWJtb2R1bGUpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWJpc2VjdCIpKSB7CisJCWhhbmRsZV9yZWZzKHN1Ym1vZHVsZSwgcmV2cywgKmZsYWdzLCBmb3JfZWFjaF9iYWRfYmlzZWN0X3JlZik7CisJCWhhbmRsZV9yZWZzKHN1Ym1vZHVsZSwgcmV2cywgKmZsYWdzIF4gVU5JTlRFUkVTVElORywgZm9yX2VhY2hfZ29vZF9iaXNlY3RfcmVmKTsKKwkJcmV2cy0+YmlzZWN0ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS10YWdzIikpIHsKKwkJaGFuZGxlX3JlZnMoc3VibW9kdWxlLCByZXZzLCAqZmxhZ3MsIGZvcl9lYWNoX3RhZ19yZWZfc3VibW9kdWxlKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZW1vdGVzIikpIHsKKwkJaGFuZGxlX3JlZnMoc3VibW9kdWxlLCByZXZzLCAqZmxhZ3MsIGZvcl9lYWNoX3JlbW90ZV9yZWZfc3VibW9kdWxlKTsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJnbG9iIiwgYXJndiwgJm9wdGFyZykpKSB7CisJCXN0cnVjdCBhbGxfcmVmc19jYiBjYjsKKwkJaW5pdF9hbGxfcmVmc19jYigmY2IsIHJldnMsICpmbGFncyk7CisJCWZvcl9lYWNoX2dsb2JfcmVmKGhhbmRsZV9vbmVfcmVmLCBvcHRhcmcsICZjYik7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1icmFuY2hlcz0iKSkgeworCQlzdHJ1Y3QgYWxsX3JlZnNfY2IgY2I7CisJCWluaXRfYWxsX3JlZnNfY2IoJmNiLCByZXZzLCAqZmxhZ3MpOworCQlmb3JfZWFjaF9nbG9iX3JlZl9pbihoYW5kbGVfb25lX3JlZiwgYXJnICsgMTEsICJyZWZzL2hlYWRzLyIsICZjYik7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tdGFncz0iKSkgeworCQlzdHJ1Y3QgYWxsX3JlZnNfY2IgY2I7CisJCWluaXRfYWxsX3JlZnNfY2IoJmNiLCByZXZzLCAqZmxhZ3MpOworCQlmb3JfZWFjaF9nbG9iX3JlZl9pbihoYW5kbGVfb25lX3JlZiwgYXJnICsgNywgInJlZnMvdGFncy8iLCAmY2IpOworCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLXJlbW90ZXM9IikpIHsKKwkJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCQlpbml0X2FsbF9yZWZzX2NiKCZjYiwgcmV2cywgKmZsYWdzKTsKKwkJZm9yX2VhY2hfZ2xvYl9yZWZfaW4oaGFuZGxlX29uZV9yZWYsIGFyZyArIDEwLCAicmVmcy9yZW1vdGVzLyIsICZjYik7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVmbG9nIikpIHsKKwkJaGFuZGxlX3JlZmxvZyhyZXZzLCAqZmxhZ3MpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vdCIpKSB7CisJCSpmbGFncyBePSBVTklOVEVSRVNUSU5HOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLXdhbGsiKSkgeworCQlyZXZzLT5ub193YWxrID0gUkVWSVNJT05fV0FMS19OT19XQUxLX1NPUlRFRDsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1uby13YWxrPSIpKSB7CisJCS8qCisJCSAqIERldGFjaGVkIGZvcm0gKCItLW5vLXdhbGsgWCIgYXMgb3Bwb3NlZCB0byAiLS1uby13YWxrPVgiKQorCQkgKiBub3QgYWxsb3dlZCwgc2luY2UgdGhlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLgorCQkgKi8KKwkJaWYgKCFzdHJjbXAoYXJnICsgMTAsICJzb3J0ZWQiKSkKKwkJCXJldnMtPm5vX3dhbGsgPSBSRVZJU0lPTl9XQUxLX05PX1dBTEtfU09SVEVEOworCQllbHNlIGlmICghc3RyY21wKGFyZyArIDEwLCAidW5zb3J0ZWQiKSkKKwkJCXJldnMtPm5vX3dhbGsgPSBSRVZJU0lPTl9XQUxLX05PX1dBTEtfVU5TT1JURUQ7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcigiaW52YWxpZCBhcmd1bWVudCB0byAtLW5vLXdhbGsiKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1kby13YWxrIikpIHsKKwkJcmV2cy0+bm9fd2FsayA9IDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBQYXJzZSByZXZpc2lvbiBpbmZvcm1hdGlvbiwgZmlsbGluZyBpbiB0aGUgInJldl9pbmZvIiBzdHJ1Y3R1cmUsCisgKiBhbmQgcmVtb3ZpbmcgdGhlIHVzZWQgYXJndW1lbnRzIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWZ0IHRoYXQgd2VyZW4ndCByZWNvZ25pemVkCisgKiAod2hpY2ggYXJlIGFsc28gbW92ZWQgdG8gdGhlIGhlYWQgb2YgdGhlIGFyZ3VtZW50IGxpc3QpCisgKi8KK2ludCBzZXR1cF9yZXZpc2lvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgKm9wdCkKK3sKKwlpbnQgaSwgZmxhZ3MsIGxlZnQsIHNlZW5fZGFzaGRhc2gsIHJlYWRfZnJvbV9zdGRpbiwgZ290X3Jldl9hcmcgPSAwLCByZXZhcmdfb3B0OworCXN0cnVjdCBjbWRsaW5lX3BhdGhzcGVjIHBydW5lX2RhdGE7CisJY29uc3QgY2hhciAqc3VibW9kdWxlID0gTlVMTDsKKworCW1lbXNldCgmcHJ1bmVfZGF0YSwgMCwgc2l6ZW9mKHBydW5lX2RhdGEpKTsKKwlpZiAob3B0KQorCQlzdWJtb2R1bGUgPSBvcHQtPnN1Ym1vZHVsZTsKKworCS8qIEZpcnN0LCBzZWFyY2ggZm9yICItLSIgKi8KKwlpZiAob3B0ICYmIG9wdC0+YXNzdW1lX2Rhc2hkYXNoKSB7CisJCXNlZW5fZGFzaGRhc2ggPSAxOworCX0gZWxzZSB7CisJCXNlZW5fZGFzaGRhc2ggPSAwOworCQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQkJaWYgKHN0cmNtcChhcmcsICItLSIpKQorCQkJCWNvbnRpbnVlOworCQkJYXJndltpXSA9IE5VTEw7CisJCQlhcmdjID0gaTsKKwkJCWlmIChhcmd2W2kgKyAxXSkKKwkJCQlhcHBlbmRfcHJ1bmVfZGF0YSgmcHJ1bmVfZGF0YSwgYXJndiArIGkgKyAxKTsKKwkJCXNlZW5fZGFzaGRhc2ggPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBTZWNvbmQsIGRlYWwgd2l0aCBhcmd1bWVudHMgYW5kIG9wdGlvbnMgKi8KKwlmbGFncyA9IDA7CisJcmV2YXJnX29wdCA9IG9wdCA/IG9wdC0+cmV2YXJnX29wdCA6IDA7CisJaWYgKHNlZW5fZGFzaGRhc2gpCisJCXJldmFyZ19vcHQgfD0gUkVWQVJHX0NBTk5PVF9CRV9GSUxFTkFNRTsKKwlyZWFkX2Zyb21fc3RkaW4gPSAwOworCWZvciAobGVmdCA9IGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWlmICgqYXJnID09ICctJykgeworCQkJaW50IG9wdHM7CisKKwkJCW9wdHMgPSBoYW5kbGVfcmV2aXNpb25fcHNldWRvX29wdChzdWJtb2R1bGUsCisJCQkJCQlyZXZzLCBhcmdjIC0gaSwgYXJndiArIGksCisJCQkJCQkmZmxhZ3MpOworCQkJaWYgKG9wdHMgPiAwKSB7CisJCQkJaSArPSBvcHRzIC0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGRpbiIpKSB7CisJCQkJaWYgKHJldnMtPmRpc2FibGVfc3RkaW4pIHsKKwkJCQkJYXJndltsZWZ0KytdID0gYXJnOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKHJlYWRfZnJvbV9zdGRpbisrKQorCQkJCQlkaWUoIi0tc3RkaW4gZ2l2ZW4gdHdpY2U/Iik7CisJCQkJcmVhZF9yZXZpc2lvbnNfZnJvbV9zdGRpbihyZXZzLCAmcHJ1bmVfZGF0YSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCW9wdHMgPSBoYW5kbGVfcmV2aXNpb25fb3B0KHJldnMsIGFyZ2MgLSBpLCBhcmd2ICsgaSwgJmxlZnQsIGFyZ3YpOworCQkJaWYgKG9wdHMgPiAwKSB7CisJCQkJaSArPSBvcHRzIC0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChvcHRzIDwgMCkKKwkJCQlleGl0KDEyOCk7CisJCQljb250aW51ZTsKKwkJfQorCisKKwkJaWYgKGhhbmRsZV9yZXZpc2lvbl9hcmcoYXJnLCByZXZzLCBmbGFncywgcmV2YXJnX29wdCkpIHsKKwkJCWludCBqOworCQkJaWYgKHNlZW5fZGFzaGRhc2ggfHwgKmFyZyA9PSAnXicpCisJCQkJZGllKCJiYWQgcmV2aXNpb24gJyVzJyIsIGFyZyk7CisKKwkJCS8qIElmIHdlIGRpZG4ndCBoYXZlIGEgIi0tIjoKKwkJCSAqICgxKSBhbGwgZmlsZW5hbWVzIG11c3QgZXhpc3Q7CisJCQkgKiAoMikgYWxsIHJldi1hcmdzIG11c3Qgbm90IGJlIGludGVycHJldGFibGUKKwkJCSAqICAgICBhcyBhIHZhbGlkIGZpbGVuYW1lLgorCQkJICogYnV0IHRoZSBsYXR0ZXIgd2UgaGF2ZSBjaGVja2VkIGluIHRoZSBtYWluIGxvb3AuCisJCQkgKi8KKwkJCWZvciAoaiA9IGk7IGogPCBhcmdjOyBqKyspCisJCQkJdmVyaWZ5X2ZpbGVuYW1lKHJldnMtPnByZWZpeCwgYXJndltqXSwgaiA9PSBpKTsKKworCQkJYXBwZW5kX3BydW5lX2RhdGEoJnBydW5lX2RhdGEsIGFyZ3YgKyBpKTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UKKwkJCWdvdF9yZXZfYXJnID0gMTsKKwl9CisKKwlpZiAocHJ1bmVfZGF0YS5ucikgeworCQkvKgorCQkgKiBJZiB3ZSBuZWVkIHRvIGludHJvZHVjZSB0aGUgbWFnaWMgImEgbG9uZSAnOicgbWVhbnMgbm8KKwkJICogcGF0aHNwZWMgd2hhdHNvZXZlciIsIGhlcmUgaXMgdGhlIHBsYWNlIHRvIGRvIHNvLgorCQkgKgorCQkgKiBpZiAocHJ1bmVfZGF0YS5uciA9PSAxICYmICFzdHJjbXAocHJ1bmVfZGF0YVswXSwgIjoiKSkgeworCQkgKglwcnVuZV9kYXRhLm5yID0gMDsKKwkJICoJcHJ1bmVfZGF0YS5hbGxvYyA9IDA7CisJCSAqCWZyZWUocHJ1bmVfZGF0YS5wYXRoKTsKKwkJICoJcHJ1bmVfZGF0YS5wYXRoID0gTlVMTDsKKwkJICogfSBlbHNlIHsKKwkJICoJdGVybWluYXRlIHBydW5lX2RhdGEuYWxsb2Mgd2l0aCBOVUxMIGFuZAorCQkgKgljYWxsIGluaXRfcGF0aHNwZWMoKSB0byBzZXQgcmV2cy0+cHJ1bmVfZGF0YSBoZXJlLgorCQkgKiB9CisJCSAqLworCQlBTExPQ19HUk9XKHBydW5lX2RhdGEucGF0aCwgcHJ1bmVfZGF0YS5ucisxLCBwcnVuZV9kYXRhLmFsbG9jKTsKKwkJcHJ1bmVfZGF0YS5wYXRoW3BydW5lX2RhdGEubnIrK10gPSBOVUxMOworCQlpbml0X3BhdGhzcGVjKCZyZXZzLT5wcnVuZV9kYXRhLAorCQkJICAgICAgZ2V0X3BhdGhzcGVjKHJldnMtPnByZWZpeCwgcHJ1bmVfZGF0YS5wYXRoKSk7CisJfQorCisJaWYgKHJldnMtPmRlZiA9PSBOVUxMKQorCQlyZXZzLT5kZWYgPSBvcHQgPyBvcHQtPmRlZiA6IE5VTEw7CisJaWYgKG9wdCAmJiBvcHQtPnR3ZWFrKQorCQlvcHQtPnR3ZWFrKHJldnMsIG9wdCk7CisJaWYgKHJldnMtPnNob3dfbWVyZ2UpCisJCXByZXBhcmVfc2hvd19tZXJnZShyZXZzKTsKKwlpZiAocmV2cy0+ZGVmICYmICFyZXZzLT5wZW5kaW5nLm5yICYmICFnb3RfcmV2X2FyZykgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisJCXN0cnVjdCBvYmplY3RfY29udGV4dCBvYzsKKwkJaWYgKGdldF9zaGExX3dpdGhfY29udGV4dChyZXZzLT5kZWYsIDAsIHNoYTEsICZvYykpCisJCQlkaWUoImJhZCBkZWZhdWx0IHJldmlzaW9uICclcyciLCByZXZzLT5kZWYpOworCQlvYmplY3QgPSBnZXRfcmVmZXJlbmNlKHJldnMsIHJldnMtPmRlZiwgc2hhMSwgMCk7CisJCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX21vZGUocmV2cywgb2JqZWN0LCByZXZzLT5kZWYsIG9jLm1vZGUpOworCX0KKworCS8qIERpZCB0aGUgdXNlciBhc2sgZm9yIGFueSBkaWZmIG91dHB1dD8gUnVuIHRoZSBkaWZmISAqLworCWlmIChyZXZzLT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiB+RElGRl9GT1JNQVRfTk9fT1VUUFVUKQorCQlyZXZzLT5kaWZmID0gMTsKKworCS8qIFBpY2theGUsIGRpZmYtZmlsdGVyIGFuZCByZW5hbWUgZm9sbG93aW5nIG5lZWQgZGlmZnMgKi8KKwlpZiAocmV2cy0+ZGlmZm9wdC5waWNrYXhlIHx8CisJICAgIHJldnMtPmRpZmZvcHQuZmlsdGVyIHx8CisJICAgIERJRkZfT1BUX1RTVCgmcmV2cy0+ZGlmZm9wdCwgRk9MTE9XX1JFTkFNRVMpKQorCQlyZXZzLT5kaWZmID0gMTsKKworCWlmIChyZXZzLT50b3BvX29yZGVyKQorCQlyZXZzLT5saW1pdGVkID0gMTsKKworCWlmIChyZXZzLT5wcnVuZV9kYXRhLm5yKSB7CisJCWRpZmZfdHJlZV9zZXR1cF9wYXRocyhyZXZzLT5wcnVuZV9kYXRhLnJhdywgJnJldnMtPnBydW5pbmcpOworCQkvKiBDYW4ndCBwcnVuZSBjb21taXRzIHdpdGggcmVuYW1lIGZvbGxvd2luZzogdGhlIHBhdGhzIGNoYW5nZS4uICovCisJCWlmICghRElGRl9PUFRfVFNUKCZyZXZzLT5kaWZmb3B0LCBGT0xMT1dfUkVOQU1FUykpCisJCQlyZXZzLT5wcnVuZSA9IDE7CisJCWlmICghcmV2cy0+ZnVsbF9kaWZmKQorCQkJZGlmZl90cmVlX3NldHVwX3BhdGhzKHJldnMtPnBydW5lX2RhdGEucmF3LCAmcmV2cy0+ZGlmZm9wdCk7CisJfQorCWlmIChyZXZzLT5jb21iaW5lX21lcmdlcykKKwkJcmV2cy0+aWdub3JlX21lcmdlcyA9IDA7CisJcmV2cy0+ZGlmZm9wdC5hYmJyZXYgPSByZXZzLT5hYmJyZXY7CisJZGlmZl9zZXR1cF9kb25lKCZyZXZzLT5kaWZmb3B0KTsKKworCWNvbXBpbGVfZ3JlcF9wYXR0ZXJucygmcmV2cy0+Z3JlcF9maWx0ZXIpOworCisJaWYgKHJldnMtPnJldmVyc2UgJiYgcmV2cy0+cmVmbG9nX2luZm8pCisJCWRpZSgiY2Fubm90IGNvbWJpbmUgLS1yZXZlcnNlIHdpdGggLS13YWxrLXJlZmxvZ3MiKTsKKwlpZiAocmV2cy0+cmV3cml0ZV9wYXJlbnRzICYmIHJldnMtPmNoaWxkcmVuLm5hbWUpCisJCWRpZSgiY2Fubm90IGNvbWJpbmUgLS1wYXJlbnRzIGFuZCAtLWNoaWxkcmVuIik7CisKKwkvKgorCSAqIExpbWl0YXRpb25zIG9uIHRoZSBncmFwaCBmdW5jdGlvbmFsaXR5CisJICovCisJaWYgKHJldnMtPnJldmVyc2UgJiYgcmV2cy0+Z3JhcGgpCisJCWRpZSgiY2Fubm90IGNvbWJpbmUgLS1yZXZlcnNlIHdpdGggLS1ncmFwaCIpOworCisJaWYgKHJldnMtPnJlZmxvZ19pbmZvICYmIHJldnMtPmdyYXBoKQorCQlkaWUoImNhbm5vdCBjb21iaW5lIC0td2Fsay1yZWZsb2dzIHdpdGggLS1ncmFwaCIpOworCWlmICghcmV2cy0+cmVmbG9nX2luZm8gJiYgcmV2cy0+Z3JlcF9maWx0ZXIudXNlX3JlZmxvZ19maWx0ZXIpCisJCWRpZSgiY2Fubm90IHVzZSAtLWdyZXAtcmVmbG9nIHdpdGhvdXQgLS13YWxrLXJlZmxvZ3MiKTsKKworCXJldHVybiBsZWZ0OworfQorCitzdGF0aWMgdm9pZCBhZGRfY2hpbGQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsIHN0cnVjdCBjb21taXQgKmNoaWxkKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpsKSk7CisKKwlsLT5pdGVtID0gY2hpbGQ7CisJbC0+bmV4dCA9IGFkZF9kZWNvcmF0aW9uKCZyZXZzLT5jaGlsZHJlbiwgJnBhcmVudC0+b2JqZWN0LCBsKTsKK30KKworc3RhdGljIGludCByZW1vdmVfZHVwbGljYXRlX3BhcmVudHMoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwLCAqcDsKKwlpbnQgc3Vydml2aW5nX3BhcmVudHM7CisKKwkvKiBFeGFtaW5lIGV4aXN0aW5nIHBhcmVudHMgd2hpbGUgbWFya2luZyBvbmVzIHdlIGhhdmUgc2Vlbi4uLiAqLworCXBwID0gJmNvbW1pdC0+cGFyZW50czsKKwl3aGlsZSAoKHAgPSAqcHApICE9IE5VTEwpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcC0+aXRlbTsKKwkJaWYgKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgVE1QX01BUkspIHsKKwkJCSpwcCA9IHAtPm5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlwYXJlbnQtPm9iamVjdC5mbGFncyB8PSBUTVBfTUFSSzsKKwkJcHAgPSAmcC0+bmV4dDsKKwl9CisJLyogY291bnQgdGhlbSB3aGlsZSBjbGVhcmluZyB0aGUgdGVtcG9yYXJ5IG1hcmsgKi8KKwlzdXJ2aXZpbmdfcGFyZW50cyA9IDA7CisJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJj0gflRNUF9NQVJLOworCQlzdXJ2aXZpbmdfcGFyZW50cysrOworCX0KKwlyZXR1cm4gc3Vydml2aW5nX3BhcmVudHM7Cit9CisKK3N0cnVjdCBtZXJnZV9zaW1wbGlmeV9zdGF0ZSB7CisJc3RydWN0IGNvbW1pdCAqc2ltcGxpZmllZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWVyZ2Vfc2ltcGxpZnlfc3RhdGUgKmxvY2F0ZV9zaW1wbGlmeV9zdGF0ZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgbWVyZ2Vfc2ltcGxpZnlfc3RhdGUgKnN0OworCisJc3QgPSBsb29rdXBfZGVjb3JhdGlvbigmcmV2cy0+bWVyZ2Vfc2ltcGxpZmljYXRpb24sICZjb21taXQtPm9iamVjdCk7CisJaWYgKCFzdCkgeworCQlzdCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzdCkpOworCQlhZGRfZGVjb3JhdGlvbigmcmV2cy0+bWVyZ2Vfc2ltcGxpZmljYXRpb24sICZjb21taXQtPm9iamVjdCwgc3QpOworCX0KKwlyZXR1cm4gc3Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKipzaW1wbGlmeV9vbmUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbGlzdCAqKnRhaWwpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXN0cnVjdCBtZXJnZV9zaW1wbGlmeV9zdGF0ZSAqc3QsICpwc3Q7CisJaW50IGNudDsKKworCXN0ID0gbG9jYXRlX3NpbXBsaWZ5X3N0YXRlKHJldnMsIGNvbW1pdCk7CisKKwkvKgorCSAqIEhhdmUgd2UgaGFuZGxlZCB0aGlzIG9uZT8KKwkgKi8KKwlpZiAoc3QtPnNpbXBsaWZpZWQpCisJCXJldHVybiB0YWlsOworCisJLyoKKwkgKiBBbiBVTklOVEVSRVNUSU5HIGNvbW1pdCBzaW1wbGlmaWVzIHRvIGl0c2VsZiwgc28gZG9lcyBhCisJICogcm9vdCBjb21taXQuICBXZSBkbyBub3QgcmV3cml0ZSBwYXJlbnRzIG9mIHN1Y2ggY29tbWl0CisJICogYW55d2F5LgorCSAqLworCWlmICgoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB8fCAhY29tbWl0LT5wYXJlbnRzKSB7CisJCXN0LT5zaW1wbGlmaWVkID0gY29tbWl0OworCQlyZXR1cm4gdGFpbDsKKwl9CisKKwkvKgorCSAqIERvIHdlIGtub3cgd2hhdCBjb21taXQgYWxsIG9mIG91ciBwYXJlbnRzIHRoYXQgbWF0dGVyCisJICogc2hvdWxkIGJlIHJld3JpdHRlbiB0bz8gIE90aGVyd2lzZSB3ZSBhcmUgbm90IHJlYWR5IHRvCisJICogcmV3cml0ZSB0aGlzIG9uZSB5ZXQuCisJICovCisJZm9yIChjbnQgPSAwLCBwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlwc3QgPSBsb2NhdGVfc2ltcGxpZnlfc3RhdGUocmV2cywgcC0+aXRlbSk7CisJCWlmICghcHN0LT5zaW1wbGlmaWVkKSB7CisJCQl0YWlsID0gJmNvbW1pdF9saXN0X2luc2VydChwLT5pdGVtLCB0YWlsKS0+bmV4dDsKKwkJCWNudCsrOworCQl9CisJCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJCWJyZWFrOworCX0KKwlpZiAoY250KSB7CisJCXRhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgdGFpbCktPm5leHQ7CisJCXJldHVybiB0YWlsOworCX0KKworCS8qCisJICogUmV3cml0ZSBvdXIgbGlzdCBvZiBwYXJlbnRzLgorCSAqLworCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJcHN0ID0gbG9jYXRlX3NpbXBsaWZ5X3N0YXRlKHJldnMsIHAtPml0ZW0pOworCQlwLT5pdGVtID0gcHN0LT5zaW1wbGlmaWVkOworCQlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCQlicmVhazsKKwl9CisJaWYgKCFyZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJY250ID0gcmVtb3ZlX2R1cGxpY2F0ZV9wYXJlbnRzKGNvbW1pdCk7CisJZWxzZQorCQljbnQgPSAxOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGFyZSBhIG1lcmdlIGFuZCBvbmUgc2lkZSBicmFuY2gKKwkgKiBkb2VzIG5vdCBoYXZlIGFueSBjb21taXQgdGhhdCB0b3VjaGVzIHRoZSBnaXZlbiBwYXRoczsKKwkgKiBpbiBzdWNoIGEgY2FzZSwgdGhlIGltbWVkaWF0ZSBwYXJlbnRzIHdpbGwgYmUgcmV3cml0dGVuCisJICogdG8gZGlmZmVyZW50IGNvbW1pdHMuCisJICoKKwkgKiAgICAgIG8tLS0tWAkJWDogdGhlIGNvbW1pdCB3ZSBhcmUgbG9va2luZyBhdDsKKwkgKiAgICAgLyAgICAvCQlvOiBhIGNvbW1pdCB0aGF0IHRvdWNoZXMgdGhlIHBhdGhzOworCSAqIC0tLW8tLS0tJworCSAqCisJICogRnVydGhlciByZWR1Y2UgdGhlIHBhcmVudHMgYnkgcmVtb3ZpbmcgcmVkdW5kYW50IHBhcmVudHMuCisJICovCisJaWYgKDEgPCBjbnQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpoID0gcmVkdWNlX2hlYWRzKGNvbW1pdC0+cGFyZW50cyk7CisJCWNudCA9IGNvbW1pdF9saXN0X2NvdW50KGgpOworCQlmcmVlX2NvbW1pdF9saXN0KGNvbW1pdC0+cGFyZW50cyk7CisJCWNvbW1pdC0+cGFyZW50cyA9IGg7CisJfQorCisJLyoKKwkgKiBBIGNvbW1pdCBzaW1wbGlmaWVzIHRvIGl0c2VsZiBpZiBpdCBpcyBhIHJvb3QsIGlmIGl0IGlzCisJICogVU5JTlRFUkVTVElORywgaWYgaXQgdG91Y2hlcyB0aGUgZ2l2ZW4gcGF0aHMsIG9yIGlmIGl0IGlzIGEKKwkgKiBtZXJnZSBhbmQgaXRzIHBhcmVudHMgc2ltcGxpZmllcyB0byBtb3JlIHRoYW4gb25lIGNvbW1pdHMKKwkgKiAodGhlIGZpcnN0IHR3byBjYXNlcyBhcmUgYWxyZWFkeSBoYW5kbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YKKwkgKiB0aGlzIGZ1bmN0aW9uKS4KKwkgKgorCSAqIE90aGVyd2lzZSwgaXQgc2ltcGxpZmllcyB0byB3aGF0IGl0cyBzb2xlIHBhcmVudCBzaW1wbGlmaWVzIHRvLgorCSAqLworCWlmICghY250IHx8CisJICAgIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHx8CisJICAgICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkgfHwKKwkgICAgKDEgPCBjbnQpKQorCQlzdC0+c2ltcGxpZmllZCA9IGNvbW1pdDsKKwllbHNlIHsKKwkJcHN0ID0gbG9jYXRlX3NpbXBsaWZ5X3N0YXRlKHJldnMsIGNvbW1pdC0+cGFyZW50cy0+aXRlbSk7CisJCXN0LT5zaW1wbGlmaWVkID0gcHN0LT5zaW1wbGlmaWVkOworCX0KKwlyZXR1cm4gdGFpbDsKK30KKworc3RhdGljIHZvaWQgc2ltcGxpZnlfbWVyZ2VzKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsICpuZXh0OworCXN0cnVjdCBjb21taXRfbGlzdCAqeWV0X3RvX2RvLCAqKnRhaWw7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJaWYgKCFyZXZzLT5wcnVuZSkKKwkJcmV0dXJuOworCisJLyogZmVlZCB0aGUgbGlzdCByZXZlcnNlZCAqLworCXlldF90b19kbyA9IE5VTEw7CisJZm9yIChsaXN0ID0gcmV2cy0+Y29tbWl0czsgbGlzdDsgbGlzdCA9IG5leHQpIHsKKwkJY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJbmV4dCA9IGxpc3QtPm5leHQ7CisJCS8qCisJCSAqIERvIG5vdCBmcmVlKGxpc3QpIGhlcmUgeWV0OyB0aGUgb3JpZ2luYWwgbGlzdAorCQkgKiBpcyB1c2VkIGxhdGVyIGluIHRoaXMgZnVuY3Rpb24uCisJCSAqLworCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmeWV0X3RvX2RvKTsKKwl9CisJd2hpbGUgKHlldF90b19kbykgeworCQlsaXN0ID0geWV0X3RvX2RvOworCQl5ZXRfdG9fZG8gPSBOVUxMOworCQl0YWlsID0gJnlldF90b19kbzsKKwkJd2hpbGUgKGxpc3QpIHsKKwkJCWNvbW1pdCA9IGxpc3QtPml0ZW07CisJCQluZXh0ID0gbGlzdC0+bmV4dDsKKwkJCWZyZWUobGlzdCk7CisJCQlsaXN0ID0gbmV4dDsKKwkJCXRhaWwgPSBzaW1wbGlmeV9vbmUocmV2cywgY29tbWl0LCB0YWlsKTsKKwkJfQorCX0KKworCS8qIGNsZWFuIHVwIHRoZSByZXN1bHQsIHJlbW92aW5nIHRoZSBzaW1wbGlmaWVkIG9uZXMgKi8KKwlsaXN0ID0gcmV2cy0+Y29tbWl0czsKKwlyZXZzLT5jb21taXRzID0gTlVMTDsKKwl0YWlsID0gJnJldnMtPmNvbW1pdHM7CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IG1lcmdlX3NpbXBsaWZ5X3N0YXRlICpzdDsKKworCQljb21taXQgPSBsaXN0LT5pdGVtOworCQluZXh0ID0gbGlzdC0+bmV4dDsKKwkJZnJlZShsaXN0KTsKKwkJbGlzdCA9IG5leHQ7CisJCXN0ID0gbG9jYXRlX3NpbXBsaWZ5X3N0YXRlKHJldnMsIGNvbW1pdCk7CisJCWlmIChzdC0+c2ltcGxpZmllZCA9PSBjb21taXQpCisJCQl0YWlsID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHRhaWwpLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2NoaWxkcmVuKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmw7CisJZm9yIChsID0gcmV2cy0+Y29tbWl0czsgbDsgbCA9IGwtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbC0+aXRlbTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpCisJCQlhZGRfY2hpbGQocmV2cywgcC0+aXRlbSwgY29tbWl0KTsKKwl9Cit9CisKK3ZvaWQgcmVzZXRfcmV2aXNpb25fd2Fsayh2b2lkKQoreworCWNsZWFyX29iamVjdF9mbGFncyhTRUVOIHwgQURERUQgfCBTSE9XTik7Cit9CisKK2ludCBwcmVwYXJlX3JldmlzaW9uX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCWludCBuciA9IHJldnMtPnBlbmRpbmcubnI7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZSwgKmxpc3Q7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCA9ICZyZXZzLT5jb21taXRzOworCisJZSA9IGxpc3QgPSByZXZzLT5wZW5kaW5nLm9iamVjdHM7CisJcmV2cy0+cGVuZGluZy5uciA9IDA7CisJcmV2cy0+cGVuZGluZy5hbGxvYyA9IDA7CisJcmV2cy0+cGVuZGluZy5vYmplY3RzID0gTlVMTDsKKwl3aGlsZSAoLS1uciA+PSAwKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGhhbmRsZV9jb21taXQocmV2cywgZS0+aXRlbSwgZS0+bmFtZSk7CisJCWlmIChjb21taXQpIHsKKwkJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU0VFTikpIHsKKwkJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBTRUVOOworCQkJCW5leHQgPSBjb21taXRfbGlzdF9hcHBlbmQoY29tbWl0LCBuZXh0KTsKKwkJCX0KKwkJfQorCQllKys7CisJfQorCWlmICghcmV2cy0+bGVha19wZW5kaW5nKQorCQlmcmVlKGxpc3QpOworCisJaWYgKHJldnMtPm5vX3dhbGsgIT0gUkVWSVNJT05fV0FMS19OT19XQUxLX1VOU09SVEVEKQorCQljb21taXRfbGlzdF9zb3J0X2J5X2RhdGUoJnJldnMtPmNvbW1pdHMpOworCWlmIChyZXZzLT5ub193YWxrKQorCQlyZXR1cm4gMDsKKwlpZiAocmV2cy0+bGltaXRlZCkKKwkJaWYgKGxpbWl0X2xpc3QocmV2cykgPCAwKQorCQkJcmV0dXJuIC0xOworCWlmIChyZXZzLT50b3BvX29yZGVyKQorCQlzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKCZyZXZzLT5jb21taXRzLCByZXZzLT5saWZvKTsKKwlpZiAocmV2cy0+c2ltcGxpZnlfbWVyZ2VzKQorCQlzaW1wbGlmeV9tZXJnZXMocmV2cyk7CisJaWYgKHJldnMtPmNoaWxkcmVuLm5hbWUpCisJCXNldF9jaGlsZHJlbihyZXZzKTsKKwlyZXR1cm4gMDsKK30KKworZW51bSByZXdyaXRlX3Jlc3VsdCB7CisJcmV3cml0ZV9vbmVfb2ssCisJcmV3cml0ZV9vbmVfbm9wYXJlbnRzLAorCXJld3JpdGVfb25lX2Vycm9yCit9OworCitzdGF0aWMgZW51bSByZXdyaXRlX3Jlc3VsdCByZXdyaXRlX29uZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKipwcCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNhY2hlID0gTlVMTDsKKworCWZvciAoOzspIHsKKwkJc3RydWN0IGNvbW1pdCAqcCA9ICpwcDsKKwkJaWYgKCFyZXZzLT5saW1pdGVkKQorCQkJaWYgKGFkZF9wYXJlbnRzX3RvX2xpc3QocmV2cywgcCwgJnJldnMtPmNvbW1pdHMsICZjYWNoZSkgPCAwKQorCQkJCXJldHVybiByZXdyaXRlX29uZV9lcnJvcjsKKwkJaWYgKHAtPnBhcmVudHMgJiYgcC0+cGFyZW50cy0+bmV4dCkKKwkJCXJldHVybiByZXdyaXRlX29uZV9vazsKKwkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CisJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkKKwkJCXJldHVybiByZXdyaXRlX29uZV9vazsKKwkJaWYgKCFwLT5wYXJlbnRzKQorCQkJcmV0dXJuIHJld3JpdGVfb25lX25vcGFyZW50czsKKwkJKnBwID0gcC0+cGFyZW50cy0+aXRlbTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmV3cml0ZV9wYXJlbnRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwID0gJmNvbW1pdC0+cGFyZW50czsKKwl3aGlsZSAoKnBwKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gKnBwOworCQlzd2l0Y2ggKHJld3JpdGVfb25lKHJldnMsICZwYXJlbnQtPml0ZW0pKSB7CisJCWNhc2UgcmV3cml0ZV9vbmVfb2s6CisJCQlicmVhazsKKwkJY2FzZSByZXdyaXRlX29uZV9ub3BhcmVudHM6CisJCQkqcHAgPSBwYXJlbnQtPm5leHQ7CisJCQljb250aW51ZTsKKwkJY2FzZSByZXdyaXRlX29uZV9lcnJvcjoKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwcCA9ICZwYXJlbnQtPm5leHQ7CisJfQorCXJlbW92ZV9kdXBsaWNhdGVfcGFyZW50cyhjb21taXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbW1pdF9tYXRjaChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCByZXZfaW5mbyAqb3B0KQoreworCWludCByZXR2YWw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpZiAoIW9wdC0+Z3JlcF9maWx0ZXIucGF0dGVybl9saXN0ICYmICFvcHQtPmdyZXBfZmlsdGVyLmhlYWRlcl9saXN0KQorCQlyZXR1cm4gMTsKKworCS8qIFByZXBlbmQgImZha2UiIGhlYWRlcnMgYXMgbmVlZGVkICovCisJaWYgKG9wdC0+Z3JlcF9maWx0ZXIudXNlX3JlZmxvZ19maWx0ZXIpIHsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAicmVmbG9nICIpOworCQlnZXRfcmVmbG9nX21lc3NhZ2UoJmJ1Ziwgb3B0LT5yZWZsb2dfaW5mbyk7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwl9CisKKwkvKiBDb3B5IHRoZSBjb21taXQgdG8gdGVtcG9yYXJ5IGlmIHdlIGFyZSB1c2luZyAiZmFrZSIgaGVhZGVycyAqLworCWlmIChidWYubGVuKQorCQlzdHJidWZfYWRkc3RyKCZidWYsIGNvbW1pdC0+YnVmZmVyKTsKKworCS8qIEFwcGVuZCAiZmFrZSIgbWVzc2FnZSBwYXJ0cyBhcyBuZWVkZWQgKi8KKwlpZiAob3B0LT5zaG93X25vdGVzKSB7CisJCWlmICghYnVmLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgY29tbWl0LT5idWZmZXIpOworCQlmb3JtYXRfZGlzcGxheV9ub3Rlcyhjb21taXQtPm9iamVjdC5zaGExLCAmYnVmLAorCQkJCSAgICAgZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKSwgMCk7CisJfQorCisJLyogRmluZCBlaXRoZXIgaW4gdGhlIGNvbW1pdCBvYmplY3QsIG9yIGluIHRoZSB0ZW1wb3JhcnkgKi8KKwlpZiAoYnVmLmxlbikKKwkJcmV0dmFsID0gZ3JlcF9idWZmZXIoJm9wdC0+Z3JlcF9maWx0ZXIsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCWVsc2UKKwkJcmV0dmFsID0gZ3JlcF9idWZmZXIoJm9wdC0+Z3JlcF9maWx0ZXIsCisJCQkJICAgICBjb21taXQtPmJ1ZmZlciwgc3RybGVuKGNvbW1pdC0+YnVmZmVyKSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgd2FudF9hbmNlc3RyeShzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJcmV0dXJuIChyZXZzLT5yZXdyaXRlX3BhcmVudHMgfHwgcmV2cy0+Y2hpbGRyZW4ubmFtZSk7Cit9CisKK2VudW0gY29tbWl0X2FjdGlvbiBnZXRfY29tbWl0X2FjdGlvbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTSE9XTikKKwkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CisJaWYgKHJldnMtPnVucGFja2VkICYmIGhhc19zaGExX3BhY2soY29tbWl0LT5vYmplY3Quc2hhMSkpCisJCXJldHVybiBjb21taXRfaWdub3JlOworCWlmIChyZXZzLT5zaG93X2FsbCkKKwkJcmV0dXJuIGNvbW1pdF9zaG93OworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXJldHVybiBjb21taXRfaWdub3JlOworCWlmIChyZXZzLT5taW5fYWdlICE9IC0xICYmIChjb21taXQtPmRhdGUgPiByZXZzLT5taW5fYWdlKSkKKwkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CisJaWYgKHJldnMtPm1pbl9wYXJlbnRzIHx8IChyZXZzLT5tYXhfcGFyZW50cyA+PSAwKSkgeworCQlpbnQgbiA9IDA7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkKKwkJCW4rKzsKKwkJaWYgKChuIDwgcmV2cy0+bWluX3BhcmVudHMpIHx8CisJCSAgICAoKHJldnMtPm1heF9wYXJlbnRzID49IDApICYmIChuID4gcmV2cy0+bWF4X3BhcmVudHMpKSkKKwkJCXJldHVybiBjb21taXRfaWdub3JlOworCX0KKwlpZiAoIWNvbW1pdF9tYXRjaChjb21taXQsIHJldnMpKQorCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwlpZiAocmV2cy0+cHJ1bmUgJiYgcmV2cy0+ZGVuc2UpIHsKKwkJLyogQ29tbWl0IHdpdGhvdXQgY2hhbmdlcz8gKi8KKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpIHsKKwkJCS8qIGRyb3AgbWVyZ2VzIHVubGVzcyB3ZSB3YW50IHBhcmVudGhvb2QgKi8KKwkJCWlmICghd2FudF9hbmNlc3RyeShyZXZzKSkKKwkJCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwkJCS8qIG5vbi1tZXJnZSAtIGFsd2F5cyBpZ25vcmUgaXQgKi8KKwkJCWlmICghY29tbWl0LT5wYXJlbnRzIHx8ICFjb21taXQtPnBhcmVudHMtPm5leHQpCisJCQkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CisJCX0KKwl9CisJcmV0dXJuIGNvbW1pdF9zaG93OworfQorCitlbnVtIGNvbW1pdF9hY3Rpb24gc2ltcGxpZnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWVudW0gY29tbWl0X2FjdGlvbiBhY3Rpb24gPSBnZXRfY29tbWl0X2FjdGlvbihyZXZzLCBjb21taXQpOworCisJaWYgKGFjdGlvbiA9PSBjb21taXRfc2hvdyAmJgorCSAgICAhcmV2cy0+c2hvd19hbGwgJiYKKwkgICAgcmV2cy0+cHJ1bmUgJiYgcmV2cy0+ZGVuc2UgJiYgd2FudF9hbmNlc3RyeShyZXZzKSkgeworCQlpZiAocmV3cml0ZV9wYXJlbnRzKHJldnMsIGNvbW1pdCkgPCAwKQorCQkJcmV0dXJuIGNvbW1pdF9lcnJvcjsKKwl9CisJcmV0dXJuIGFjdGlvbjsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9yZXZpc2lvbl8xKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpZiAoIXJldnMtPmNvbW1pdHMpCisJCXJldHVybiBOVUxMOworCisJZG8geworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVudHJ5ID0gcmV2cy0+Y29tbWl0czsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gZW50cnktPml0ZW07CisKKwkJcmV2cy0+Y29tbWl0cyA9IGVudHJ5LT5uZXh0OworCQlmcmVlKGVudHJ5KTsKKworCQlpZiAocmV2cy0+cmVmbG9nX2luZm8pIHsKKwkJCWZha2VfcmVmbG9nX3BhcmVudChyZXZzLT5yZWZsb2dfaW5mbywgY29tbWl0KTsKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH4oQURERUQgfCBTRUVOIHwgU0hPV04pOworCQl9CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZW4ndCBkb25lIHRoZSBsaXN0IGxpbWl0aW5nLCB3ZSBuZWVkIHRvIGxvb2sgYXQKKwkJICogdGhlIHBhcmVudHMgaGVyZS4gV2UgYWxzbyBuZWVkIHRvIGRvIHRoZSBkYXRlLWJhc2VkIGxpbWl0aW5nCisJCSAqIHRoYXQgd2UnZCBvdGhlcndpc2UgaGF2ZSBkb25lIGluIGxpbWl0X2xpc3QoKS4KKwkJICovCisJCWlmICghcmV2cy0+bGltaXRlZCkgeworCQkJaWYgKHJldnMtPm1heF9hZ2UgIT0gLTEgJiYKKwkJCSAgICAoY29tbWl0LT5kYXRlIDwgcmV2cy0+bWF4X2FnZSkpCisJCQkJY29udGludWU7CisJCQlpZiAoYWRkX3BhcmVudHNfdG9fbGlzdChyZXZzLCBjb21taXQsICZyZXZzLT5jb21taXRzLCBOVUxMKSA8IDApCisJCQkJZGllKCJGYWlsZWQgdG8gdHJhdmVyc2UgcGFyZW50cyBvZiBjb21taXQgJXMiLAorCQkJCSAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCX0KKworCQlzd2l0Y2ggKHNpbXBsaWZ5X2NvbW1pdChyZXZzLCBjb21taXQpKSB7CisJCWNhc2UgY29tbWl0X2lnbm9yZToKKwkJCWNvbnRpbnVlOworCQljYXNlIGNvbW1pdF9lcnJvcjoKKwkJCWRpZSgiRmFpbGVkIHRvIHNpbXBsaWZ5IHBhcmVudHMgb2YgY29tbWl0ICVzIiwKKwkJCSAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gY29tbWl0OworCQl9CisJfSB3aGlsZSAocmV2cy0+Y29tbWl0cyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGdjX2JvdW5kYXJ5KHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KQoreworCXVuc2lnbmVkIG5yID0gYXJyYXktPm5yOworCXVuc2lnbmVkIGFsbG9jID0gYXJyYXktPmFsbG9jOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm9iamVjdHMgPSBhcnJheS0+b2JqZWN0czsKKworCWlmIChhbGxvYyA8PSBucikgeworCQl1bnNpZ25lZCBpLCBqOworCQlmb3IgKGkgPSBqID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJCWlmIChvYmplY3RzW2ldLml0ZW0tPmZsYWdzICYgU0hPV04pCisJCQkJY29udGludWU7CisJCQlpZiAoaSAhPSBqKQorCQkJCW9iamVjdHNbal0gPSBvYmplY3RzW2ldOworCQkJaisrOworCQl9CisJCWZvciAoaSA9IGo7IGkgPCBucjsgaSsrKQorCQkJb2JqZWN0c1tpXS5pdGVtID0gTlVMTDsKKwkJYXJyYXktPm5yID0gajsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9ib3VuZGFyeV9jb21taXRfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJdW5zaWduZWQgaTsKKwlzdHJ1Y3QgY29tbWl0ICpjOworCXN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5ID0gJnJldnMtPmJvdW5kYXJ5X2NvbW1pdHM7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqb2JqZWN0cyA9IGFycmF5LT5vYmplY3RzOworCisJLyoKKwkgKiBJZiByZXZzLT5jb21taXRzIGlzIG5vbi1OVUxMIGF0IHRoaXMgcG9pbnQsIGFuIGVycm9yIG9jY3VycmVkIGluCisJICogZ2V0X3JldmlzaW9uXzEoKS4gIElnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlIHByaW50aW5nIHRoZQorCSAqIGJvdW5kYXJ5IGNvbW1pdHMgYW55d2F5LiAgKFRoaXMgaXMgd2hhdCB0aGUgY29kZSBoYXMgYWx3YXlzCisJICogZG9uZS4pCisJICovCisJaWYgKHJldnMtPmNvbW1pdHMpIHsKKwkJZnJlZV9jb21taXRfbGlzdChyZXZzLT5jb21taXRzKTsKKwkJcmV2cy0+Y29tbWl0cyA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBQdXQgYWxsIG9mIHRoZSBhY3R1YWwgYm91bmRhcnkgY29tbWl0cyBmcm9tIHJldnMtPmJvdW5kYXJ5X2NvbW1pdHMKKwkgKiBpbnRvIHJldnMtPmNvbW1pdHMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5yOyBpKyspIHsKKwkJYyA9IChzdHJ1Y3QgY29tbWl0ICopKG9iamVjdHNbaV0uaXRlbSk7CisJCWlmICghYykKKwkJCWNvbnRpbnVlOworCQlpZiAoIShjLT5vYmplY3QuZmxhZ3MgJiBDSElMRF9TSE9XTikpCisJCQljb250aW51ZTsKKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIChTSE9XTiB8IEJPVU5EQVJZKSkKKwkJCWNvbnRpbnVlOworCQljLT5vYmplY3QuZmxhZ3MgfD0gQk9VTkRBUlk7CisJCWNvbW1pdF9saXN0X2luc2VydChjLCAmcmV2cy0+Y29tbWl0cyk7CisJfQorCisJLyoKKwkgKiBJZiByZXZzLT50b3BvX29yZGVyIGlzIHNldCwgc29ydCB0aGUgYm91bmRhcnkgY29tbWl0cworCSAqIGluIHRvcG9sb2dpY2FsIG9yZGVyCisJICovCisJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmcmV2cy0+Y29tbWl0cywgcmV2cy0+bGlmbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfcmV2aXNpb25faW50ZXJuYWwoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjb21taXQgKmMgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqbDsKKworCWlmIChyZXZzLT5ib3VuZGFyeSA9PSAyKSB7CisJCS8qCisJCSAqIEFsbCBvZiB0aGUgbm9ybWFsIGNvbW1pdHMgaGF2ZSBhbHJlYWR5IGJlZW4gcmV0dXJuZWQsCisJCSAqIGFuZCB3ZSBhcmUgbm93IHJldHVybmluZyBib3VuZGFyeSBjb21taXRzLgorCQkgKiBjcmVhdGVfYm91bmRhcnlfY29tbWl0X2xpc3QoKSBoYXMgcG9wdWxhdGVkCisJCSAqIHJldnMtPmNvbW1pdHMgd2l0aCB0aGUgcmVtYWluaW5nIGNvbW1pdHMgdG8gcmV0dXJuLgorCQkgKi8KKwkJYyA9IHBvcF9jb21taXQoJnJldnMtPmNvbW1pdHMpOworCQlpZiAoYykKKwkJCWMtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKwkJcmV0dXJuIGM7CisJfQorCisJLyoKKwkgKiBJZiBvdXIgbWF4X2NvdW50IGNvdW50ZXIgaGFzIHJlYWNoZWQgemVybywgdGhlbiB3ZSBhcmUgZG9uZS4gV2UKKwkgKiBkb24ndCBzaW1wbHkgcmV0dXJuIE5VTEwgYmVjYXVzZSB3ZSBzdGlsbCBtaWdodCBuZWVkIHRvIHNob3cKKwkgKiBib3VuZGFyeSBjb21taXRzLiBCdXQgd2Ugd2FudCB0byBhdm9pZCBjYWxsaW5nIGdldF9yZXZpc2lvbl8xLCB3aGljaAorCSAqIG1pZ2h0IGRvIGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZiB3b3JrIGZpbmRpbmcgdGhlIG5leHQgY29tbWl0IG9ubHkKKwkgKiBmb3IgdXMgdG8gdGhyb3cgaXQgYXdheS4KKwkgKgorCSAqIElmIGl0IGlzIG5vbi16ZXJvLCB0aGVuIGVpdGhlciB3ZSBkb24ndCBoYXZlIGEgbWF4X2NvdW50IGF0IGFsbAorCSAqICgtMSksIG9yIGl0IGlzIHN0aWxsIGNvdW50aW5nLCBpbiB3aGljaCBjYXNlIHdlIGRlY3JlbWVudC4KKwkgKi8KKwlpZiAocmV2cy0+bWF4X2NvdW50KSB7CisJCWMgPSBnZXRfcmV2aXNpb25fMShyZXZzKTsKKwkJaWYgKGMpIHsKKwkJCXdoaWxlICgwIDwgcmV2cy0+c2tpcF9jb3VudCkgeworCQkJCXJldnMtPnNraXBfY291bnQtLTsKKwkJCQljID0gZ2V0X3JldmlzaW9uXzEocmV2cyk7CisJCQkJaWYgKCFjKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChyZXZzLT5tYXhfY291bnQgPiAwKQorCQkJcmV2cy0+bWF4X2NvdW50LS07CisJfQorCisJaWYgKGMpCisJCWMtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKworCWlmICghcmV2cy0+Ym91bmRhcnkpIHsKKwkJcmV0dXJuIGM7CisJfQorCisJaWYgKCFjKSB7CisJCS8qCisJCSAqIGdldF9yZXZpc2lvbl8xKCkgcnVucyBvdXQgdGhlIGNvbW1pdHMsIGFuZAorCQkgKiB3ZSBhcmUgZG9uZSBjb21wdXRpbmcgdGhlIGJvdW5kYXJpZXMuCisJCSAqIHN3aXRjaCB0byBib3VuZGFyeSBjb21taXRzIG91dHB1dCBtb2RlLgorCQkgKi8KKwkJcmV2cy0+Ym91bmRhcnkgPSAyOworCisJCS8qCisJCSAqIFVwZGF0ZSByZXZzLT5jb21taXRzIHRvIGNvbnRhaW4gdGhlIGxpc3Qgb2YKKwkJICogYm91bmRhcnkgY29tbWl0cy4KKwkJICovCisJCWNyZWF0ZV9ib3VuZGFyeV9jb21taXRfbGlzdChyZXZzKTsKKworCQlyZXR1cm4gZ2V0X3JldmlzaW9uX2ludGVybmFsKHJldnMpOworCX0KKworCS8qCisJICogYm91bmRhcnkgY29tbWl0cyBhcmUgdGhlIGNvbW1pdHMgdGhhdCBhcmUgcGFyZW50cyBvZiB0aGUKKwkgKiBvbmVzIHdlIGdvdCBmcm9tIGdldF9yZXZpc2lvbl8xKCkgYnV0IHRoZXkgdGhlbXNlbHZlcyBhcmUKKwkgKiBub3QgcmV0dXJuZWQgZnJvbSBnZXRfcmV2aXNpb25fMSgpLiAgQmVmb3JlIHJldHVybmluZworCSAqICdjJywgd2UgbmVlZCB0byBtYXJrIGl0cyBwYXJlbnRzIHRoYXQgdGhleSBjb3VsZCBiZSBib3VuZGFyaWVzLgorCSAqLworCisJZm9yIChsID0gYy0+cGFyZW50czsgbDsgbCA9IGwtPm5leHQpIHsKKwkJc3RydWN0IG9iamVjdCAqcDsKKwkJcCA9ICYobC0+aXRlbS0+b2JqZWN0KTsKKwkJaWYgKHAtPmZsYWdzICYgKENISUxEX1NIT1dOIHwgU0hPV04pKQorCQkJY29udGludWU7CisJCXAtPmZsYWdzIHw9IENISUxEX1NIT1dOOworCQlnY19ib3VuZGFyeSgmcmV2cy0+Ym91bmRhcnlfY29tbWl0cyk7CisJCWFkZF9vYmplY3RfYXJyYXkocCwgTlVMTCwgJnJldnMtPmJvdW5kYXJ5X2NvbW1pdHMpOworCX0KKworCXJldHVybiBjOworfQorCitzdHJ1Y3QgY29tbWl0ICpnZXRfcmV2aXNpb24oc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjb21taXQgKmM7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXZlcnNlZDsKKworCWlmIChyZXZzLT5yZXZlcnNlKSB7CisJCXJldmVyc2VkID0gTlVMTDsKKwkJd2hpbGUgKChjID0gZ2V0X3JldmlzaW9uX2ludGVybmFsKHJldnMpKSkgeworCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGMsICZyZXZlcnNlZCk7CisJCX0KKwkJcmV2cy0+Y29tbWl0cyA9IHJldmVyc2VkOworCQlyZXZzLT5yZXZlcnNlID0gMDsKKwkJcmV2cy0+cmV2ZXJzZV9vdXRwdXRfc3RhZ2UgPSAxOworCX0KKworCWlmIChyZXZzLT5yZXZlcnNlX291dHB1dF9zdGFnZSkKKwkJcmV0dXJuIHBvcF9jb21taXQoJnJldnMtPmNvbW1pdHMpOworCisJYyA9IGdldF9yZXZpc2lvbl9pbnRlcm5hbChyZXZzKTsKKwlpZiAoYyAmJiByZXZzLT5ncmFwaCkKKwkJZ3JhcGhfdXBkYXRlKHJldnMtPmdyYXBoLCBjKTsKKwlyZXR1cm4gYzsKK30KKworY2hhciAqZ2V0X3JldmlzaW9uX21hcmsoY29uc3Qgc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpCisJCXJldHVybiAiLSI7CisJZWxzZSBpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlyZXR1cm4gIl4iOworCWVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgUEFUQ0hTQU1FKQorCQlyZXR1cm4gIj0iOworCWVsc2UgaWYgKCFyZXZzIHx8IHJldnMtPmxlZnRfcmlnaHQpIHsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCisJCQlyZXR1cm4gIjwiOworCQllbHNlCisJCQlyZXR1cm4gIj4iOworCX0gZWxzZSBpZiAocmV2cy0+Z3JhcGgpCisJCXJldHVybiAiKiI7CisJZWxzZSBpZiAocmV2cy0+Y2hlcnJ5X21hcmspCisJCXJldHVybiAiKyI7CisJcmV0dXJuICIiOworfQorCit2b2lkIHB1dF9yZXZpc2lvbl9tYXJrKGNvbnN0IHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWNoYXIgKm1hcmsgPSBnZXRfcmV2aXNpb25fbWFyayhyZXZzLCBjb21taXQpOworCWlmICghc3RybGVuKG1hcmspKQorCQlyZXR1cm47CisJZnB1dHMobWFyaywgc3Rkb3V0KTsKKwlwdXRjaGFyKCcgJyk7Cit9CmRpZmYgLS1naXQgYS9yZXZpc2lvbi5oIGIvcmV2aXNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTViZDBiCi0tLSAvZGV2L251bGwKKysrIGIvcmV2aXNpb24uaApAQCAtMCwwICsxLDI0MSBAQAorI2lmbmRlZiBSRVZJU0lPTl9ICisjZGVmaW5lIFJFVklTSU9OX0gKKworI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJncmVwLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKworI2RlZmluZSBTRUVOCQkoMXU8PDApCisjZGVmaW5lIFVOSU5URVJFU1RJTkcgICAoMXU8PDEpCisjZGVmaW5lIFRSRUVTQU1FCSgxdTw8MikKKyNkZWZpbmUgU0hPV04JCSgxdTw8MykKKyNkZWZpbmUgVE1QX01BUksJKDF1PDw0KSAvKiBmb3IgaXNvbGF0ZWQgY2FzZXM7IGNsZWFuIGFmdGVyIHVzZSAqLworI2RlZmluZSBCT1VOREFSWQkoMXU8PDUpCisjZGVmaW5lIENISUxEX1NIT1dOCSgxdTw8NikKKyNkZWZpbmUgQURERUQJCSgxdTw8NykJLyogUGFyZW50cyBhbHJlYWR5IHBhcnNlZCBhbmQgYWRkZWQ/ICovCisjZGVmaW5lIFNZTU1FVFJJQ19MRUZUCSgxdTw8OCkKKyNkZWZpbmUgUEFUQ0hTQU1FCSgxdTw8OSkKKyNkZWZpbmUgQUxMX1JFVl9GTEFHUwkoKDF1PDwxMCktMSkKKworI2RlZmluZSBERUNPUkFURV9TSE9SVF9SRUZTCTEKKyNkZWZpbmUgREVDT1JBVEVfRlVMTF9SRUZTCTIKKworc3RydWN0IHJldl9pbmZvOworc3RydWN0IGxvZ19pbmZvOworc3RydWN0IHN0cmluZ19saXN0OworCitzdHJ1Y3QgcmV2X2NtZGxpbmVfaW5mbyB7CisJdW5zaWduZWQgaW50IG5yOworCXVuc2lnbmVkIGludCBhbGxvYzsKKwlzdHJ1Y3QgcmV2X2NtZGxpbmVfZW50cnkgeworCQlzdHJ1Y3Qgb2JqZWN0ICppdGVtOworCQljb25zdCBjaGFyICpuYW1lOworCQllbnVtIHsKKwkJCVJFVl9DTURfUkVGLAorCQkJUkVWX0NNRF9QQVJFTlRTX09OTFksCisJCQlSRVZfQ01EX0xFRlQsCisJCQlSRVZfQ01EX1JJR0hULAorCQkJUkVWX0NNRF9SRVYKKwkJfSB3aGVuY2U7CisJCXVuc2lnbmVkIGZsYWdzOworCX0gKnJldjsKK307CisKKyNkZWZpbmUgUkVWSVNJT05fV0FMS19XQUxLIDAKKyNkZWZpbmUgUkVWSVNJT05fV0FMS19OT19XQUxLX1NPUlRFRCAxCisjZGVmaW5lIFJFVklTSU9OX1dBTEtfTk9fV0FMS19VTlNPUlRFRCAyCisKK3N0cnVjdCByZXZfaW5mbyB7CisJLyogU3RhcnRpbmcgbGlzdCAqLworCXN0cnVjdCBjb21taXRfbGlzdCAqY29tbWl0czsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IHBlbmRpbmc7CisKKwkvKiBQYXJlbnRzIG9mIHNob3duIGNvbW1pdHMgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IGJvdW5kYXJ5X2NvbW1pdHM7CisKKwkvKiBUaGUgZW5kLXBvaW50cyBzcGVjaWZpZWQgYnkgdGhlIGVuZCB1c2VyICovCisJc3RydWN0IHJldl9jbWRsaW5lX2luZm8gY21kbGluZTsKKworCS8qIEJhc2ljIGluZm9ybWF0aW9uICovCisJY29uc3QgY2hhciAqcHJlZml4OworCWNvbnN0IGNoYXIgKmRlZjsKKwlzdHJ1Y3QgcGF0aHNwZWMgcHJ1bmVfZGF0YTsKKwl1bnNpZ25lZCBpbnQJZWFybHlfb3V0cHV0OjEsCisJCQlpZ25vcmVfbWlzc2luZzoxOworCisJLyogVHJhdmVyc2FsIGZsYWdzICovCisJdW5zaWduZWQgaW50CWRlbnNlOjEsCisJCQlwcnVuZToxLAorCQkJbm9fd2FsazoyLAorCQkJc2hvd19hbGw6MSwKKwkJCXJlbW92ZV9lbXB0eV90cmVlczoxLAorCQkJc2ltcGxpZnlfaGlzdG9yeToxLAorCQkJbGlmbzoxLAorCQkJdG9wb19vcmRlcjoxLAorCQkJc2ltcGxpZnlfbWVyZ2VzOjEsCisJCQlzaW1wbGlmeV9ieV9kZWNvcmF0aW9uOjEsCisJCQl0YWdfb2JqZWN0czoxLAorCQkJdHJlZV9vYmplY3RzOjEsCisJCQlibG9iX29iamVjdHM6MSwKKwkJCXZlcmlmeV9vYmplY3RzOjEsCisJCQllZGdlX2hpbnQ6MSwKKwkJCWxpbWl0ZWQ6MSwKKwkJCXVucGFja2VkOjEsCisJCQlib3VuZGFyeToyLAorCQkJY291bnQ6MSwKKwkJCWxlZnRfcmlnaHQ6MSwKKwkJCWxlZnRfb25seToxLAorCQkJcmlnaHRfb25seToxLAorCQkJcmV3cml0ZV9wYXJlbnRzOjEsCisJCQlwcmludF9wYXJlbnRzOjEsCisJCQlzaG93X3NvdXJjZToxLAorCQkJc2hvd19kZWNvcmF0aW9uczoxLAorCQkJcmV2ZXJzZToxLAorCQkJcmV2ZXJzZV9vdXRwdXRfc3RhZ2U6MSwKKwkJCWNoZXJyeV9waWNrOjEsCisJCQljaGVycnlfbWFyazoxLAorCQkJYmlzZWN0OjEsCisJCQlhbmNlc3RyeV9wYXRoOjEsCisJCQlmaXJzdF9wYXJlbnRfb25seToxOworCisJLyogRGlmZiBmbGFncyAqLworCXVuc2lnbmVkIGludAlkaWZmOjEsCisJCQlmdWxsX2RpZmY6MSwKKwkJCXNob3dfcm9vdF9kaWZmOjEsCisJCQlub19jb21taXRfaWQ6MSwKKwkJCXZlcmJvc2VfaGVhZGVyOjEsCisJCQlpZ25vcmVfbWVyZ2VzOjEsCisJCQljb21iaW5lX21lcmdlczoxLAorCQkJZGVuc2VfY29tYmluZWRfbWVyZ2VzOjEsCisJCQlhbHdheXNfc2hvd19oZWFkZXI6MTsKKworCS8qIEZvcm1hdCBpbmZvICovCisJdW5zaWduZWQgaW50CXNob3duX29uZToxLAorCQkJc2hvd19tZXJnZToxLAorCQkJc2hvd19ub3RlczoxLAorCQkJc2hvd19ub3Rlc19naXZlbjoxLAorCQkJc2hvd19zaWduYXR1cmU6MSwKKwkJCXByZXR0eV9naXZlbjoxLAorCQkJYWJicmV2X2NvbW1pdDoxLAorCQkJYWJicmV2X2NvbW1pdF9naXZlbjoxLAorCQkJdXNlX3Rlcm1pbmF0b3I6MSwKKwkJCW1pc3NpbmdfbmV3bGluZToxLAorCQkJZGF0ZV9tb2RlX2V4cGxpY2l0OjEsCisJCQlwcmVzZXJ2ZV9zdWJqZWN0OjE7CisJdW5zaWduZWQgaW50CWRpc2FibGVfc3RkaW46MTsKKwl1bnNpZ25lZCBpbnQJbGVha19wZW5kaW5nOjE7CisKKwllbnVtIGRhdGVfbW9kZSBkYXRlX21vZGU7CisKKwl1bnNpZ25lZCBpbnQJYWJicmV2OworCWVudW0gY21pdF9mbXQJY29tbWl0X2Zvcm1hdDsKKwlzdHJ1Y3QgbG9nX2luZm8gKmxvZ2luZm87CisJaW50CQluciwgdG90YWw7CisJY29uc3QgY2hhcgkqbWltZV9ib3VuZGFyeTsKKwljb25zdCBjaGFyCSpwYXRjaF9zdWZmaXg7CisJaW50CQludW1iZXJlZF9maWxlczsKKwljaGFyCQkqbWVzc2FnZV9pZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9tZXNzYWdlX2lkczsKKwljb25zdCBjaGFyCSphZGRfc2lnbm9mZjsKKwljb25zdCBjaGFyCSpleHRyYV9oZWFkZXJzOworCWNvbnN0IGNoYXIJKmxvZ19yZWVuY29kZTsKKwljb25zdCBjaGFyCSpzdWJqZWN0X3ByZWZpeDsKKwlpbnQJCW5vX2lubGluZTsKKwlpbnQJCXNob3dfbG9nX3NpemU7CisKKwkvKiBGaWx0ZXIgYnkgY29tbWl0IGxvZyBtZXNzYWdlICovCisJc3RydWN0IGdyZXBfb3B0CWdyZXBfZmlsdGVyOworCisJLyogRGlzcGxheSBoaXN0b3J5IGdyYXBoICovCisJc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGg7CisKKwkvKiBzcGVjaWFsIGxpbWl0cyAqLworCWludCBza2lwX2NvdW50OworCWludCBtYXhfY291bnQ7CisJdW5zaWduZWQgbG9uZyBtYXhfYWdlOworCXVuc2lnbmVkIGxvbmcgbWluX2FnZTsKKwlpbnQgbWluX3BhcmVudHM7CisJaW50IG1heF9wYXJlbnRzOworCisJLyogZGlmZiBpbmZvIGZvciBwYXRjaGVzIGFuZCBmb3IgcGF0aHMgbGltaXRpbmcgKi8KKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZvcHQ7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBwcnVuaW5nOworCisJc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvOworCXN0cnVjdCBkZWNvcmF0aW9uIGNoaWxkcmVuOworCXN0cnVjdCBkZWNvcmF0aW9uIG1lcmdlX3NpbXBsaWZpY2F0aW9uOworCisJLyogbm90ZXMtc3BlY2lmaWMgb3B0aW9uczogd2hpY2ggcmVmcyB0byBzaG93ICovCisJc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0IG5vdGVzX29wdDsKKworCS8qIGNvbW1pdCBjb3VudHMgKi8KKwlpbnQgY291bnRfbGVmdDsKKwlpbnQgY291bnRfcmlnaHQ7CisJaW50IGNvdW50X3NhbWU7Cit9OworCisjZGVmaW5lIFJFVl9UUkVFX1NBTUUJCTAKKyNkZWZpbmUgUkVWX1RSRUVfTkVXCQkxCS8qIE9ubHkgbmV3IGZpbGVzICovCisjZGVmaW5lIFJFVl9UUkVFX09MRAkJMgkvKiBPbmx5IGZpbGVzIHJlbW92ZWQgKi8KKyNkZWZpbmUgUkVWX1RSRUVfRElGRkVSRU5UCTMJLyogTWl4ZWQgY2hhbmdlcyAqLworCisvKiByZXZpc2lvbi5jICovCit0eXBlZGVmIHZvaWQgKCpzaG93X2Vhcmx5X291dHB1dF9mbl90KShzdHJ1Y3QgcmV2X2luZm8gKiwgc3RydWN0IGNvbW1pdF9saXN0ICopOworZXh0ZXJuIHZvbGF0aWxlIHNob3dfZWFybHlfb3V0cHV0X2ZuX3Qgc2hvd19lYXJseV9vdXRwdXQ7CisKK3N0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgeworCWNvbnN0IGNoYXIgKmRlZjsKKwl2b2lkICgqdHdlYWspKHN0cnVjdCByZXZfaW5mbyAqLCBzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0ICopOworCWNvbnN0IGNoYXIgKnN1Ym1vZHVsZTsKKwlpbnQgYXNzdW1lX2Rhc2hkYXNoOworCXVuc2lnbmVkIHJldmFyZ19vcHQ7Cit9OworCitleHRlcm4gdm9pZCBpbml0X3JldmlzaW9ucyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IHNldHVwX3JldmlzaW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqKTsKK2V4dGVybiB2b2lkIHBhcnNlX3JldmlzaW9uX29wdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCQkgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKKwkJCQkgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10pOworI2RlZmluZSBSRVZBUkdfQ0FOTk9UX0JFX0ZJTEVOQU1FIDAxCisjZGVmaW5lIFJFVkFSR19DT01NSVRUSVNIIDAyCitleHRlcm4gaW50IGhhbmRsZV9yZXZpc2lvbl9hcmcoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBmbGFncywgdW5zaWduZWQgcmV2YXJnX29wdCk7CisKK2V4dGVybiB2b2lkIHJlc2V0X3JldmlzaW9uX3dhbGsodm9pZCk7CitleHRlcm4gaW50IHByZXBhcmVfcmV2aXNpb25fd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpOworZXh0ZXJuIHN0cnVjdCBjb21taXQgKmdldF9yZXZpc2lvbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMpOworZXh0ZXJuIGNoYXIgKmdldF9yZXZpc2lvbl9tYXJrKGNvbnN0IHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKK2V4dGVybiB2b2lkIHB1dF9yZXZpc2lvbl9tYXJrKGNvbnN0IHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKKworZXh0ZXJuIHZvaWQgbWFya19wYXJlbnRzX3VuaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKK2V4dGVybiB2b2lkIG1hcmtfdHJlZV91bmludGVyZXN0aW5nKHN0cnVjdCB0cmVlICp0cmVlKTsKKworc3RydWN0IG5hbWVfcGF0aCB7CisJc3RydWN0IG5hbWVfcGF0aCAqdXA7CisJaW50IGVsZW1fbGVuOworCWNvbnN0IGNoYXIgKmVsZW07Cit9OworCitjaGFyICpwYXRoX25hbWUoY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiB2b2lkIHNob3dfb2JqZWN0X3dpdGhfbmFtZShGSUxFICosIHN0cnVjdCBvYmplY3QgKiwgY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqLCBjb25zdCBjaGFyICopOworCitleHRlcm4gdm9pZCBhZGRfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwKKwkJICAgICAgIHN0cnVjdCBvYmplY3RfYXJyYXkgKnAsCisJCSAgICAgICBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiB2b2lkIGFkZF9wZW5kaW5nX29iamVjdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBhZGRfcGVuZGluZ19zaGExKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKworZXh0ZXJuIHZvaWQgYWRkX2hlYWRfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKik7CisKK2VudW0gY29tbWl0X2FjdGlvbiB7CisJY29tbWl0X2lnbm9yZSwKKwljb21taXRfc2hvdywKKwljb21taXRfZXJyb3IKK307CisKK2V4dGVybiBlbnVtIGNvbW1pdF9hY3Rpb24gZ2V0X2NvbW1pdF9hY3Rpb24oc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworZXh0ZXJuIGVudW0gY29tbWl0X2FjdGlvbiBzaW1wbGlmeV9jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3J1bi1jb21tYW5kLmMgYi9ydW4tY29tbWFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDFlZjcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW4tY29tbWFuZC5jCkBAIC0wLDAgKzEsNzgwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKKyNpZm5kZWYgU0hFTExfUEFUSAorIyBkZWZpbmUgU0hFTExfUEFUSCAiL2Jpbi9zaCIKKyNlbmRpZgorCitzdHJ1Y3QgY2hpbGRfdG9fY2xlYW4geworCXBpZF90IHBpZDsKKwlzdHJ1Y3QgY2hpbGRfdG9fY2xlYW4gKm5leHQ7Cit9Oworc3RhdGljIHN0cnVjdCBjaGlsZF90b19jbGVhbiAqY2hpbGRyZW5fdG9fY2xlYW47CitzdGF0aWMgaW50IGluc3RhbGxlZF9jaGlsZF9jbGVhbnVwX2hhbmRsZXI7CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfY2hpbGRyZW4oaW50IHNpZykKK3sKKwl3aGlsZSAoY2hpbGRyZW5fdG9fY2xlYW4pIHsKKwkJc3RydWN0IGNoaWxkX3RvX2NsZWFuICpwID0gY2hpbGRyZW5fdG9fY2xlYW47CisJCWNoaWxkcmVuX3RvX2NsZWFuID0gcC0+bmV4dDsKKwkJa2lsbChwLT5waWQsIHNpZyk7CisJCWZyZWUocCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2NoaWxkcmVuX29uX3NpZ25hbChpbnQgc2lnKQoreworCWNsZWFudXBfY2hpbGRyZW4oc2lnKTsKKwlzaWdjaGFpbl9wb3Aoc2lnKTsKKwlyYWlzZShzaWcpOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2NoaWxkcmVuX29uX2V4aXQodm9pZCkKK3sKKwljbGVhbnVwX2NoaWxkcmVuKFNJR1RFUk0pOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2NoaWxkX2Zvcl9jbGVhbnVwKHBpZF90IHBpZCkKK3sKKwlzdHJ1Y3QgY2hpbGRfdG9fY2xlYW4gKnAgPSB4bWFsbG9jKHNpemVvZigqcCkpOworCXAtPnBpZCA9IHBpZDsKKwlwLT5uZXh0ID0gY2hpbGRyZW5fdG9fY2xlYW47CisJY2hpbGRyZW5fdG9fY2xlYW4gPSBwOworCisJaWYgKCFpbnN0YWxsZWRfY2hpbGRfY2xlYW51cF9oYW5kbGVyKSB7CisJCWF0ZXhpdChjbGVhbnVwX2NoaWxkcmVuX29uX2V4aXQpOworCQlzaWdjaGFpbl9wdXNoX2NvbW1vbihjbGVhbnVwX2NoaWxkcmVuX29uX3NpZ25hbCk7CisJCWluc3RhbGxlZF9jaGlsZF9jbGVhbnVwX2hhbmRsZXIgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQgY2xlYXJfY2hpbGRfZm9yX2NsZWFudXAocGlkX3QgcGlkKQoreworCXN0cnVjdCBjaGlsZF90b19jbGVhbiAqKnBwOworCisJZm9yIChwcCA9ICZjaGlsZHJlbl90b19jbGVhbjsgKnBwOyBwcCA9ICYoKnBwKS0+bmV4dCkgeworCQlzdHJ1Y3QgY2hpbGRfdG9fY2xlYW4gKmNsZWFuX21lID0gKnBwOworCisJCWlmIChjbGVhbl9tZS0+cGlkID09IHBpZCkgeworCQkJKnBwID0gY2xlYW5fbWUtPm5leHQ7CisJCQlmcmVlKGNsZWFuX21lKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsb3NlX3BhaXIoaW50IGZkWzJdKQoreworCWNsb3NlKGZkWzBdKTsKKwljbG9zZShmZFsxXSk7Cit9CisKKyNpZm5kZWYgV0lOMzIKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdXBfZGV2bnVsbChpbnQgdG8pCit7CisJaW50IGZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKwlkdXAyKGZkLCB0byk7CisJY2xvc2UoZmQpOworfQorI2VuZGlmCisKK3N0YXRpYyBjaGFyICpsb2NhdGVfaW5fUEFUSChjb25zdCBjaGFyICpmaWxlKQoreworCWNvbnN0IGNoYXIgKnAgPSBnZXRlbnYoIlBBVEgiKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFwIHx8ICEqcCkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAoMSkgeworCQljb25zdCBjaGFyICplbmQgPSBzdHJjaHJudWwocCwgJzonKTsKKworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisKKwkJLyogUE9TSVggc3BlY2lmaWVzIGFuIGVtcHR5IGVudHJ5IGFzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gKi8KKwkJaWYgKGVuZCAhPSBwKSB7CisJCQlzdHJidWZfYWRkKCZidWYsIHAsIGVuZCAtIHApOworCQkJc3RyYnVmX2FkZGNoKCZidWYsICcvJyk7CisJCX0KKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBmaWxlKTsKKworCQlpZiAoIWFjY2VzcyhidWYuYnVmLCBGX09LKSkKKwkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJCWlmICghKmVuZCkKKwkJCWJyZWFrOworCQlwID0gZW5kICsgMTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBleGlzdHNfaW5fUEFUSChjb25zdCBjaGFyICpmaWxlKQoreworCWNoYXIgKnIgPSBsb2NhdGVfaW5fUEFUSChmaWxlKTsKKwlmcmVlKHIpOworCXJldHVybiByICE9IE5VTEw7Cit9CisKK2ludCBzYW5lX2V4ZWN2cChjb25zdCBjaGFyICpmaWxlLCBjaGFyICogY29uc3QgYXJndltdKQoreworCWlmICghZXhlY3ZwKGZpbGUsIGFyZ3YpKQorCQlyZXR1cm4gMDsgLyogY2Fubm90IGhhcHBlbiA7LSkgKi8KKworCS8qCisJICogV2hlbiBhIGNvbW1hbmQgY2FuJ3QgYmUgZm91bmQgYmVjYXVzZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzCisJICogbGlzdGVkIGluICRQQVRIIGlzIHVuc2VhcmNoYWJsZSwgZXhlY3ZwIHJlcG9ydHMgRUFDQ0VTLCBidXQKKwkgKiBjYXJlZnVsIHVzYWJpbGl0eSB0ZXN0aW5nIChyZWFkOiBhbmFseXNpcyBvZiBvY2Nhc2lvbmFsIGJ1ZworCSAqIHJlcG9ydHMpIHJldmVhbHMgdGhhdCAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIgaXMgbW9yZQorCSAqIGludHVpdGl2ZS4KKwkgKgorCSAqIFdlIGF2b2lkIGNvbW1hbmRzIHdpdGggIi8iLCBiZWNhdXNlIGV4ZWN2cCB3aWxsIG5vdCBkbyAkUEFUSAorCSAqIGxvb2t1cHMgaW4gdGhhdCBjYXNlLgorCSAqCisJICogVGhlIHJlYXNzaWdubWVudCBvZiBFQUNDRVMgdG8gZXJybm8gbG9va3MgbGlrZSBhIG5vLW9wIGJlbG93LAorCSAqIGJ1dCB3ZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBleGlzdHNfaW5fUEFUSCBvdmVyd3JpdGluZyBlcnJuby4KKwkgKi8KKwlpZiAoZXJybm8gPT0gRUFDQ0VTICYmICFzdHJjaHIoZmlsZSwgJy8nKSkKKwkJZXJybm8gPSBleGlzdHNfaW5fUEFUSChmaWxlKSA/IEVBQ0NFUyA6IEVOT0VOVDsKKwllbHNlIGlmIChlcnJubyA9PSBFTk9URElSICYmICFzdHJjaHIoZmlsZSwgJy8nKSkKKwkJZXJybm8gPSBFTk9FTlQ7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqKnByZXBhcmVfc2hlbGxfY21kKGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBhcmdjLCBuYXJnYyA9IDA7CisJY29uc3QgY2hhciAqKm5hcmd2OworCisJZm9yIChhcmdjID0gMDsgYXJndlthcmdjXTsgYXJnYysrKQorCQk7IC8qIGp1c3QgY291bnRpbmcgKi8KKwkvKiArMSBmb3IgTlVMTCwgKzMgZm9yICJzaCAtYyIgcGx1cyBleHRyYSAkMCAqLworCW5hcmd2ID0geG1hbGxvYyhzaXplb2YoKm5hcmd2KSAqIChhcmdjICsgMSArIDMpKTsKKworCWlmIChhcmdjIDwgMSkKKwkJZGllKCJCVUc6IHNoZWxsIGNvbW1hbmQgaXMgZW1wdHkiKTsKKworCWlmIChzdHJjc3BuKGFyZ3ZbMF0sICJ8Jjs8PigpJGBcXFwiJyBcdFxuKj9bI349JSIpICE9IHN0cmxlbihhcmd2WzBdKSkgeworI2lmbmRlZiBXSU4zMgorCQluYXJndltuYXJnYysrXSA9IFNIRUxMX1BBVEg7CisjZWxzZQorCQluYXJndltuYXJnYysrXSA9ICJzaCI7CisjZW5kaWYKKwkJbmFyZ3ZbbmFyZ2MrK10gPSAiLWMiOworCisJCWlmIChhcmdjIDwgMikKKwkJCW5hcmd2W25hcmdjKytdID0gYXJndlswXTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGFyZzAgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRmKCZhcmcwLCAiJXMgXCIkQFwiIiwgYXJndlswXSk7CisJCQluYXJndltuYXJnYysrXSA9IHN0cmJ1Zl9kZXRhY2goJmFyZzAsIE5VTEwpOworCQl9CisJfQorCisJZm9yIChhcmdjID0gMDsgYXJndlthcmdjXTsgYXJnYysrKQorCQluYXJndltuYXJnYysrXSA9IGFyZ3ZbYXJnY107CisJbmFyZ3ZbbmFyZ2NdID0gTlVMTDsKKworCXJldHVybiBuYXJndjsKK30KKworI2lmbmRlZiBXSU4zMgorc3RhdGljIGludCBleGVjdl9zaGVsbF9jbWQoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqKm5hcmd2ID0gcHJlcGFyZV9zaGVsbF9jbWQoYXJndik7CisJdHJhY2VfYXJndl9wcmludGYobmFyZ3YsICJ0cmFjZTogZXhlYzoiKTsKKwlzYW5lX2V4ZWN2cChuYXJndlswXSwgKGNoYXIgKiopbmFyZ3YpOworCWZyZWUobmFyZ3YpOworCXJldHVybiAtMTsKK30KKyNlbmRpZgorCisjaWZuZGVmIFdJTjMyCitzdGF0aWMgaW50IGNoaWxkX2VyciA9IDI7CitzdGF0aWMgaW50IGNoaWxkX25vdGlmaWVyID0gLTE7CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9wYXJlbnQodm9pZCkKK3sKKwkvKgorCSAqIGV4ZWN2cCBmYWlsZWQuICBJZiBwb3NzaWJsZSwgd2UnZCBsaWtlIHRvIGxldCBzdGFydF9jb21tYW5kCisJICoga25vdywgc28gZmFpbHVyZXMgbGlrZSBFTk9FTlQgY2FuIGJlIGhhbmRsZWQgcmlnaHQgYXdheTsgYnV0CisJICogb3RoZXJ3aXNlLCBmaW5pc2hfY29tbWFuZCB3aWxsIHN0aWxsIHJlcG9ydCB0aGUgZXJyb3IuCisJICovCisJeHdyaXRlKGNoaWxkX25vdGlmaWVyLCAiIiwgMSk7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV9jaGlsZChjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCXZ3cml0ZWYoY2hpbGRfZXJyLCAiZmF0YWw6ICIsIGVyciwgcGFyYW1zKTsKKwlleGl0KDEyOCk7Cit9CisKK3N0YXRpYyB2b2lkIGVycm9yX2NoaWxkKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJdndyaXRlZihjaGlsZF9lcnIsICJlcnJvcjogIiwgZXJyLCBwYXJhbXMpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY2xvZXhlYyhpbnQgZmQpCit7CisJaW50IGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpOworCWlmIChmbGFncyA+PSAwKQorCQlmY250bChmZCwgRl9TRVRGRCwgZmxhZ3MgfCBGRF9DTE9FWEVDKTsKK30KKworc3RhdGljIGludCB3YWl0X29yX3doaW5lKHBpZF90IHBpZCwgY29uc3QgY2hhciAqYXJndjAsIGludCBzaWxlbnRfZXhlY19mYWlsdXJlKQoreworCWludCBzdGF0dXMsIGNvZGUgPSAtMTsKKwlwaWRfdCB3YWl0aW5nOworCWludCBmYWlsZWRfZXJybm8gPSAwOworCisJd2hpbGUgKCh3YWl0aW5nID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIDApKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCisJCTsJLyogbm90aGluZyAqLworCisJaWYgKHdhaXRpbmcgPCAwKSB7CisJCWZhaWxlZF9lcnJubyA9IGVycm5vOworCQllcnJvcigid2FpdHBpZCBmb3IgJXMgZmFpbGVkOiAlcyIsIGFyZ3YwLCBzdHJlcnJvcihlcnJubykpOworCX0gZWxzZSBpZiAod2FpdGluZyAhPSBwaWQpIHsKKwkJZXJyb3IoIndhaXRwaWQgaXMgY29uZnVzZWQgKCVzKSIsIGFyZ3YwKTsKKwl9IGVsc2UgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKKwkJY29kZSA9IFdURVJNU0lHKHN0YXR1cyk7CisJCWVycm9yKCIlcyBkaWVkIG9mIHNpZ25hbCAlZCIsIGFyZ3YwLCBjb2RlKTsKKwkJLyoKKwkJICogVGhpcyByZXR1cm4gdmFsdWUgaXMgY2hvc2VuIHNvIHRoYXQgY29kZSAmIDB4ZmYKKwkJICogbWltaWNzIHRoZSBleGl0IGNvZGUgdGhhdCBhIFBPU0lYIHNoZWxsIHdvdWxkIHJlcG9ydCBmb3IKKwkJICogYSBwcm9ncmFtIHRoYXQgZGllZCBmcm9tIHRoaXMgc2lnbmFsLgorCQkgKi8KKwkJY29kZSAtPSAxMjg7CisJfSBlbHNlIGlmIChXSUZFWElURUQoc3RhdHVzKSkgeworCQljb2RlID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKKwkJLyoKKwkJICogQ29udmVydCBzcGVjaWFsIGV4aXQgY29kZSB3aGVuIGV4ZWN2cCBmYWlsZWQuCisJCSAqLworCQlpZiAoY29kZSA9PSAxMjcpIHsKKwkJCWNvZGUgPSAtMTsKKwkJCWZhaWxlZF9lcnJubyA9IEVOT0VOVDsKKwkJfQorCX0gZWxzZSB7CisJCWVycm9yKCJ3YWl0cGlkIGlzIGNvbmZ1c2VkICglcykiLCBhcmd2MCk7CisJfQorCisJY2xlYXJfY2hpbGRfZm9yX2NsZWFudXAocGlkKTsKKworCWVycm5vID0gZmFpbGVkX2Vycm5vOworCXJldHVybiBjb2RlOworfQorCitpbnQgc3RhcnRfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKQoreworCWludCBuZWVkX2luLCBuZWVkX291dCwgbmVlZF9lcnI7CisJaW50IGZkaW5bMl0sIGZkb3V0WzJdLCBmZGVyclsyXTsKKwlpbnQgZmFpbGVkX2Vycm5vID0gZmFpbGVkX2Vycm5vOworCisJLyoKKwkgKiBJbiBjYXNlIG9mIGVycm9ycyB3ZSBtdXN0IGtlZXAgdGhlIHByb21pc2UgdG8gY2xvc2UgRkRzCisJICogdGhhdCBoYXZlIGJlZW4gcGFzc2VkIGluIHZpYSAtPmluIGFuZCAtPm91dC4KKwkgKi8KKworCW5lZWRfaW4gPSAhY21kLT5ub19zdGRpbiAmJiBjbWQtPmluIDwgMDsKKwlpZiAobmVlZF9pbikgeworCQlpZiAocGlwZShmZGluKSA8IDApIHsKKwkJCWZhaWxlZF9lcnJubyA9IGVycm5vOworCQkJaWYgKGNtZC0+b3V0ID4gMCkKKwkJCQljbG9zZShjbWQtPm91dCk7CisJCQlnb3RvIGZhaWxfcGlwZTsKKwkJfQorCQljbWQtPmluID0gZmRpblsxXTsKKwl9CisKKwluZWVkX291dCA9ICFjbWQtPm5vX3N0ZG91dAorCQkmJiAhY21kLT5zdGRvdXRfdG9fc3RkZXJyCisJCSYmIGNtZC0+b3V0IDwgMDsKKwlpZiAobmVlZF9vdXQpIHsKKwkJaWYgKHBpcGUoZmRvdXQpIDwgMCkgeworCQkJZmFpbGVkX2Vycm5vID0gZXJybm87CisJCQlpZiAobmVlZF9pbikKKwkJCQljbG9zZV9wYWlyKGZkaW4pOworCQkJZWxzZSBpZiAoY21kLT5pbikKKwkJCQljbG9zZShjbWQtPmluKTsKKwkJCWdvdG8gZmFpbF9waXBlOworCQl9CisJCWNtZC0+b3V0ID0gZmRvdXRbMF07CisJfQorCisJbmVlZF9lcnIgPSAhY21kLT5ub19zdGRlcnIgJiYgY21kLT5lcnIgPCAwOworCWlmIChuZWVkX2VycikgeworCQlpZiAocGlwZShmZGVycikgPCAwKSB7CisJCQlmYWlsZWRfZXJybm8gPSBlcnJubzsKKwkJCWlmIChuZWVkX2luKQorCQkJCWNsb3NlX3BhaXIoZmRpbik7CisJCQllbHNlIGlmIChjbWQtPmluKQorCQkJCWNsb3NlKGNtZC0+aW4pOworCQkJaWYgKG5lZWRfb3V0KQorCQkJCWNsb3NlX3BhaXIoZmRvdXQpOworCQkJZWxzZSBpZiAoY21kLT5vdXQpCisJCQkJY2xvc2UoY21kLT5vdXQpOworZmFpbF9waXBlOgorCQkJZXJyb3IoImNhbm5vdCBjcmVhdGUgcGlwZSBmb3IgJXM6ICVzIiwKKwkJCQljbWQtPmFyZ3ZbMF0sIHN0cmVycm9yKGZhaWxlZF9lcnJubykpOworCQkJZXJybm8gPSBmYWlsZWRfZXJybm87CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJY21kLT5lcnIgPSBmZGVyclswXTsKKwl9CisKKwl0cmFjZV9hcmd2X3ByaW50ZihjbWQtPmFyZ3YsICJ0cmFjZTogcnVuX2NvbW1hbmQ6Iik7CisJZmZsdXNoKE5VTEwpOworCisjaWZuZGVmIFdJTjMyCit7CisJaW50IG5vdGlmeV9waXBlWzJdOworCWlmIChwaXBlKG5vdGlmeV9waXBlKSkKKwkJbm90aWZ5X3BpcGVbMF0gPSBub3RpZnlfcGlwZVsxXSA9IC0xOworCisJY21kLT5waWQgPSBmb3JrKCk7CisJaWYgKCFjbWQtPnBpZCkgeworCQkvKgorCQkgKiBSZWRpcmVjdCB0aGUgY2hhbm5lbCB0byB3cml0ZSBzeXNjYWxsIGVycm9yIG1lc3NhZ2VzIHRvCisJCSAqIGJlZm9yZSByZWRpcmVjdGluZyB0aGUgcHJvY2VzcydzIHN0ZGVyciBzbyB0aGF0IGFsbCBkaWUoKQorCQkgKiBpbiBzdWJzZXF1ZW50IGNhbGwgcGF0aHMgdXNlIHRoZSBwYXJlbnQncyBzdGRlcnIuCisJCSAqLworCQlpZiAoY21kLT5ub19zdGRlcnIgfHwgbmVlZF9lcnIpIHsKKwkJCWNoaWxkX2VyciA9IGR1cCgyKTsKKwkJCXNldF9jbG9leGVjKGNoaWxkX2Vycik7CisJCX0KKwkJc2V0X2RpZV9yb3V0aW5lKGRpZV9jaGlsZCk7CisJCXNldF9lcnJvcl9yb3V0aW5lKGVycm9yX2NoaWxkKTsKKworCQljbG9zZShub3RpZnlfcGlwZVswXSk7CisJCXNldF9jbG9leGVjKG5vdGlmeV9waXBlWzFdKTsKKwkJY2hpbGRfbm90aWZpZXIgPSBub3RpZnlfcGlwZVsxXTsKKwkJYXRleGl0KG5vdGlmeV9wYXJlbnQpOworCisJCWlmIChjbWQtPm5vX3N0ZGluKQorCQkJZHVwX2Rldm51bGwoMCk7CisJCWVsc2UgaWYgKG5lZWRfaW4pIHsKKwkJCWR1cDIoZmRpblswXSwgMCk7CisJCQljbG9zZV9wYWlyKGZkaW4pOworCQl9IGVsc2UgaWYgKGNtZC0+aW4pIHsKKwkJCWR1cDIoY21kLT5pbiwgMCk7CisJCQljbG9zZShjbWQtPmluKTsKKwkJfQorCisJCWlmIChjbWQtPm5vX3N0ZGVycikKKwkJCWR1cF9kZXZudWxsKDIpOworCQllbHNlIGlmIChuZWVkX2VycikgeworCQkJZHVwMihmZGVyclsxXSwgMik7CisJCQljbG9zZV9wYWlyKGZkZXJyKTsKKwkJfSBlbHNlIGlmIChjbWQtPmVyciA+IDEpIHsKKwkJCWR1cDIoY21kLT5lcnIsIDIpOworCQkJY2xvc2UoY21kLT5lcnIpOworCQl9CisKKwkJaWYgKGNtZC0+bm9fc3Rkb3V0KQorCQkJZHVwX2Rldm51bGwoMSk7CisJCWVsc2UgaWYgKGNtZC0+c3Rkb3V0X3RvX3N0ZGVycikKKwkJCWR1cDIoMiwgMSk7CisJCWVsc2UgaWYgKG5lZWRfb3V0KSB7CisJCQlkdXAyKGZkb3V0WzFdLCAxKTsKKwkJCWNsb3NlX3BhaXIoZmRvdXQpOworCQl9IGVsc2UgaWYgKGNtZC0+b3V0ID4gMSkgeworCQkJZHVwMihjbWQtPm91dCwgMSk7CisJCQljbG9zZShjbWQtPm91dCk7CisJCX0KKworCQlpZiAoY21kLT5kaXIgJiYgY2hkaXIoY21kLT5kaXIpKQorCQkJZGllX2Vycm5vKCJleGVjICclcyc6IGNkIHRvICclcycgZmFpbGVkIiwgY21kLT5hcmd2WzBdLAorCQkJICAgIGNtZC0+ZGlyKTsKKwkJaWYgKGNtZC0+ZW52KSB7CisJCQlmb3IgKDsgKmNtZC0+ZW52OyBjbWQtPmVudisrKSB7CisJCQkJaWYgKHN0cmNocigqY21kLT5lbnYsICc9JykpCisJCQkJCXB1dGVudigoY2hhciAqKSpjbWQtPmVudik7CisJCQkJZWxzZQorCQkJCQl1bnNldGVudigqY21kLT5lbnYpOworCQkJfQorCQl9CisJCWlmIChjbWQtPnByZWV4ZWNfY2IpIHsKKwkJCS8qCisJCQkgKiBXZSBjYW5ub3QgcHJlZGljdCB3aGF0IHRoZSBwcmUtZXhlYyBjYWxsYmFjayBkb2VzLgorCQkJICogRm9yZ28gcGFyZW50IG5vdGlmaWNhdGlvbi4KKwkJCSAqLworCQkJY2xvc2UoY2hpbGRfbm90aWZpZXIpOworCQkJY2hpbGRfbm90aWZpZXIgPSAtMTsKKworCQkJY21kLT5wcmVleGVjX2NiKCk7CisJCX0KKwkJaWYgKGNtZC0+Z2l0X2NtZCkgeworCQkJZXhlY3ZfZ2l0X2NtZChjbWQtPmFyZ3YpOworCQl9IGVsc2UgaWYgKGNtZC0+dXNlX3NoZWxsKSB7CisJCQlleGVjdl9zaGVsbF9jbWQoY21kLT5hcmd2KTsKKwkJfSBlbHNlIHsKKwkJCXNhbmVfZXhlY3ZwKGNtZC0+YXJndlswXSwgKGNoYXIgKmNvbnN0KikgY21kLT5hcmd2KTsKKwkJfQorCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJCQlpZiAoIWNtZC0+c2lsZW50X2V4ZWNfZmFpbHVyZSkKKwkJCQllcnJvcigiY2Fubm90IHJ1biAlczogJXMiLCBjbWQtPmFyZ3ZbMF0sCisJCQkJCXN0cmVycm9yKEVOT0VOVCkpOworCQkJZXhpdCgxMjcpOworCQl9IGVsc2UgeworCQkJZGllX2Vycm5vKCJjYW5ub3QgZXhlYyAnJXMnIiwgY21kLT5hcmd2WzBdKTsKKwkJfQorCX0KKwlpZiAoY21kLT5waWQgPCAwKQorCQllcnJvcigiY2Fubm90IGZvcmsoKSBmb3IgJXM6ICVzIiwgY21kLT5hcmd2WzBdLAorCQkJc3RyZXJyb3IoZmFpbGVkX2Vycm5vID0gZXJybm8pKTsKKwllbHNlIGlmIChjbWQtPmNsZWFuX29uX2V4aXQpCisJCW1hcmtfY2hpbGRfZm9yX2NsZWFudXAoY21kLT5waWQpOworCisJLyoKKwkgKiBXYWl0IGZvciBjaGlsZCdzIGV4ZWN2cC4gSWYgdGhlIGV4ZWN2cCBzdWNjZWVkcyAob3IgaWYgZm9yaygpCisJICogZmFpbGVkKSwgRU9GIGlzIHNlZW4gaW1tZWRpYXRlbHkgYnkgdGhlIHBhcmVudC4gT3RoZXJ3aXNlLCB0aGUKKwkgKiBjaGlsZCBwcm9jZXNzIHNlbmRzIGEgc2luZ2xlIGJ5dGUuCisJICogTm90ZSB0aGF0IHVzZSBvZiB0aGlzIGluZnJhc3RydWN0dXJlIGlzIGNvbXBsZXRlbHkgYWR2aXNvcnksCisJICogdGhlcmVmb3JlLCB3ZSBrZWVwIGVycm9yIGNoZWNrcyBtaW5pbWFsLgorCSAqLworCWNsb3NlKG5vdGlmeV9waXBlWzFdKTsKKwlpZiAocmVhZChub3RpZnlfcGlwZVswXSwgJm5vdGlmeV9waXBlWzFdLCAxKSA9PSAxKSB7CisJCS8qCisJCSAqIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IGZvcmsoKSBzdWNjZWVkZWQsIGJ1dCBleGVjdnAoKQorCQkgKiBmYWlsZWQuIEVycm9ycyBoYXZlIGJlZW4gcmVwb3J0ZWQgdG8gb3VyIHN0ZGVyci4KKwkJICovCisJCXdhaXRfb3Jfd2hpbmUoY21kLT5waWQsIGNtZC0+YXJndlswXSwKKwkJCSAgICAgIGNtZC0+c2lsZW50X2V4ZWNfZmFpbHVyZSk7CisJCWZhaWxlZF9lcnJubyA9IGVycm5vOworCQljbWQtPnBpZCA9IC0xOworCX0KKwljbG9zZShub3RpZnlfcGlwZVswXSk7CisKK30KKyNlbHNlCit7CisJaW50IGZoaW4gPSAwLCBmaG91dCA9IDEsIGZoZXJyID0gMjsKKwljb25zdCBjaGFyICoqc2FyZ3YgPSBjbWQtPmFyZ3Y7CisJY2hhciAqKmVudiA9IGVudmlyb247CisKKwlpZiAoY21kLT5ub19zdGRpbikKKwkJZmhpbiA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisJZWxzZSBpZiAobmVlZF9pbikKKwkJZmhpbiA9IGR1cChmZGluWzBdKTsKKwllbHNlIGlmIChjbWQtPmluKQorCQlmaGluID0gZHVwKGNtZC0+aW4pOworCisJaWYgKGNtZC0+bm9fc3RkZXJyKQorCQlmaGVyciA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisJZWxzZSBpZiAobmVlZF9lcnIpCisJCWZoZXJyID0gZHVwKGZkZXJyWzFdKTsKKwllbHNlIGlmIChjbWQtPmVyciA+IDIpCisJCWZoZXJyID0gZHVwKGNtZC0+ZXJyKTsKKworCWlmIChjbWQtPm5vX3N0ZG91dCkKKwkJZmhvdXQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOworCWVsc2UgaWYgKGNtZC0+c3Rkb3V0X3RvX3N0ZGVycikKKwkJZmhvdXQgPSBkdXAoZmhlcnIpOworCWVsc2UgaWYgKG5lZWRfb3V0KQorCQlmaG91dCA9IGR1cChmZG91dFsxXSk7CisJZWxzZSBpZiAoY21kLT5vdXQgPiAxKQorCQlmaG91dCA9IGR1cChjbWQtPm91dCk7CisKKwlpZiAoY21kLT5lbnYpCisJCWVudiA9IG1ha2VfYXVnbWVudGVkX2Vudmlyb24oY21kLT5lbnYpOworCisJaWYgKGNtZC0+Z2l0X2NtZCkgeworCQljbWQtPmFyZ3YgPSBwcmVwYXJlX2dpdF9jbWQoY21kLT5hcmd2KTsKKwl9IGVsc2UgaWYgKGNtZC0+dXNlX3NoZWxsKSB7CisJCWNtZC0+YXJndiA9IHByZXBhcmVfc2hlbGxfY21kKGNtZC0+YXJndik7CisJfQorCisJY21kLT5waWQgPSBtaW5nd19zcGF3bnZwZShjbWQtPmFyZ3ZbMF0sIGNtZC0+YXJndiwgZW52LCBjbWQtPmRpciwKKwkJCQkgIGZoaW4sIGZob3V0LCBmaGVycik7CisJZmFpbGVkX2Vycm5vID0gZXJybm87CisJaWYgKGNtZC0+cGlkIDwgMCAmJiAoIWNtZC0+c2lsZW50X2V4ZWNfZmFpbHVyZSB8fCBlcnJubyAhPSBFTk9FTlQpKQorCQllcnJvcigiY2Fubm90IHNwYXduICVzOiAlcyIsIGNtZC0+YXJndlswXSwgc3RyZXJyb3IoZXJybm8pKTsKKwlpZiAoY21kLT5jbGVhbl9vbl9leGl0ICYmIGNtZC0+cGlkID49IDApCisJCW1hcmtfY2hpbGRfZm9yX2NsZWFudXAoY21kLT5waWQpOworCisJaWYgKGNtZC0+ZW52KQorCQlmcmVlX2Vudmlyb24oZW52KTsKKwlpZiAoY21kLT5naXRfY21kKQorCQlmcmVlKGNtZC0+YXJndik7CisKKwljbWQtPmFyZ3YgPSBzYXJndjsKKwlpZiAoZmhpbiAhPSAwKQorCQljbG9zZShmaGluKTsKKwlpZiAoZmhvdXQgIT0gMSkKKwkJY2xvc2UoZmhvdXQpOworCWlmIChmaGVyciAhPSAyKQorCQljbG9zZShmaGVycik7Cit9CisjZW5kaWYKKworCWlmIChjbWQtPnBpZCA8IDApIHsKKwkJaWYgKG5lZWRfaW4pCisJCQljbG9zZV9wYWlyKGZkaW4pOworCQllbHNlIGlmIChjbWQtPmluKQorCQkJY2xvc2UoY21kLT5pbik7CisJCWlmIChuZWVkX291dCkKKwkJCWNsb3NlX3BhaXIoZmRvdXQpOworCQllbHNlIGlmIChjbWQtPm91dCkKKwkJCWNsb3NlKGNtZC0+b3V0KTsKKwkJaWYgKG5lZWRfZXJyKQorCQkJY2xvc2VfcGFpcihmZGVycik7CisJCWVsc2UgaWYgKGNtZC0+ZXJyKQorCQkJY2xvc2UoY21kLT5lcnIpOworCQllcnJubyA9IGZhaWxlZF9lcnJubzsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChuZWVkX2luKQorCQljbG9zZShmZGluWzBdKTsKKwllbHNlIGlmIChjbWQtPmluKQorCQljbG9zZShjbWQtPmluKTsKKworCWlmIChuZWVkX291dCkKKwkJY2xvc2UoZmRvdXRbMV0pOworCWVsc2UgaWYgKGNtZC0+b3V0KQorCQljbG9zZShjbWQtPm91dCk7CisKKwlpZiAobmVlZF9lcnIpCisJCWNsb3NlKGZkZXJyWzFdKTsKKwllbHNlIGlmIChjbWQtPmVycikKKwkJY2xvc2UoY21kLT5lcnIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBmaW5pc2hfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKQoreworCXJldHVybiB3YWl0X29yX3doaW5lKGNtZC0+cGlkLCBjbWQtPmFyZ3ZbMF0sIGNtZC0+c2lsZW50X2V4ZWNfZmFpbHVyZSk7Cit9CisKK2ludCBydW5fY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKQoreworCWludCBjb2RlID0gc3RhcnRfY29tbWFuZChjbWQpOworCWlmIChjb2RlKQorCQlyZXR1cm4gY29kZTsKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoY21kKTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9ydW5fY29tbWFuZF92X29wdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJCSAgICAgIGludCBvcHQpCit7CisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFyZ3YgPSBhcmd2OworCWNtZC0+bm9fc3RkaW4gPSBvcHQgJiBSVU5fQ09NTUFORF9OT19TVERJTiA/IDEgOiAwOworCWNtZC0+Z2l0X2NtZCA9IG9wdCAmIFJVTl9HSVRfQ01EID8gMSA6IDA7CisJY21kLT5zdGRvdXRfdG9fc3RkZXJyID0gb3B0ICYgUlVOX0NPTU1BTkRfU1RET1VUX1RPX1NUREVSUiA/IDEgOiAwOworCWNtZC0+c2lsZW50X2V4ZWNfZmFpbHVyZSA9IG9wdCAmIFJVTl9TSUxFTlRfRVhFQ19GQUlMVVJFID8gMSA6IDA7CisJY21kLT51c2Vfc2hlbGwgPSBvcHQgJiBSVU5fVVNJTkdfU0hFTEwgPyAxIDogMDsKKwljbWQtPmNsZWFuX29uX2V4aXQgPSBvcHQgJiBSVU5fQ0xFQU5fT05fRVhJVCA/IDEgOiAwOworfQorCitpbnQgcnVuX2NvbW1hbmRfdl9vcHQoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kOworCXByZXBhcmVfcnVuX2NvbW1hbmRfdl9vcHQoJmNtZCwgYXJndiwgb3B0KTsKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJmNtZCk7Cit9CisKK2ludCBydW5fY29tbWFuZF92X29wdF9jZF9lbnYoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQsIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqY29uc3QgKmVudikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQ7CisJcHJlcGFyZV9ydW5fY29tbWFuZF92X29wdCgmY21kLCBhcmd2LCBvcHQpOworCWNtZC5kaXIgPSBkaXI7CisJY21kLmVudiA9IGVudjsKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJmNtZCk7Cit9CisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKK3N0YXRpYyBwdGhyZWFkX3QgbWFpbl90aHJlYWQ7CitzdGF0aWMgaW50IG1haW5fdGhyZWFkX3NldDsKK3N0YXRpYyBwdGhyZWFkX2tleV90IGFzeW5jX2tleTsKKworc3RhdGljIHZvaWQgKnJ1bl90aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXN5bmMgKmFzeW5jID0gZGF0YTsKKwlpbnRwdHJfdCByZXQ7CisKKwlwdGhyZWFkX3NldHNwZWNpZmljKGFzeW5jX2tleSwgYXN5bmMpOworCXJldCA9IGFzeW5jLT5wcm9jKGFzeW5jLT5wcm9jX2luLCBhc3luYy0+cHJvY19vdXQsIGFzeW5jLT5kYXRhKTsKKwlyZXR1cm4gKHZvaWQgKilyZXQ7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV9hc3luYyhjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCXZyZXBvcnRmKCJmYXRhbDogIiwgZXJyLCBwYXJhbXMpOworCisJaWYgKCFwdGhyZWFkX2VxdWFsKG1haW5fdGhyZWFkLCBwdGhyZWFkX3NlbGYoKSkpIHsKKwkJc3RydWN0IGFzeW5jICphc3luYyA9IHB0aHJlYWRfZ2V0c3BlY2lmaWMoYXN5bmNfa2V5KTsKKwkJaWYgKGFzeW5jLT5wcm9jX2luID49IDApCisJCQljbG9zZShhc3luYy0+cHJvY19pbik7CisJCWlmIChhc3luYy0+cHJvY19vdXQgPj0gMCkKKwkJCWNsb3NlKGFzeW5jLT5wcm9jX291dCk7CisJCXB0aHJlYWRfZXhpdCgodm9pZCAqKTEyOCk7CisJfQorCisJZXhpdCgxMjgpOworfQorI2VuZGlmCisKK2ludCBzdGFydF9hc3luYyhzdHJ1Y3QgYXN5bmMgKmFzeW5jKQoreworCWludCBuZWVkX2luLCBuZWVkX291dDsKKwlpbnQgZmRpblsyXSwgZmRvdXRbMl07CisJaW50IHByb2NfaW4sIHByb2Nfb3V0OworCisJbmVlZF9pbiA9IGFzeW5jLT5pbiA8IDA7CisJaWYgKG5lZWRfaW4pIHsKKwkJaWYgKHBpcGUoZmRpbikgPCAwKSB7CisJCQlpZiAoYXN5bmMtPm91dCA+IDApCisJCQkJY2xvc2UoYXN5bmMtPm91dCk7CisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQl9CisJCWFzeW5jLT5pbiA9IGZkaW5bMV07CisJfQorCisJbmVlZF9vdXQgPSBhc3luYy0+b3V0IDwgMDsKKwlpZiAobmVlZF9vdXQpIHsKKwkJaWYgKHBpcGUoZmRvdXQpIDwgMCkgeworCQkJaWYgKG5lZWRfaW4pCisJCQkJY2xvc2VfcGFpcihmZGluKTsKKwkJCWVsc2UgaWYgKGFzeW5jLT5pbikKKwkJCQljbG9zZShhc3luYy0+aW4pOworCQkJcmV0dXJuIGVycm9yKCJjYW5ub3QgY3JlYXRlIHBpcGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJfQorCQlhc3luYy0+b3V0ID0gZmRvdXRbMF07CisJfQorCisJaWYgKG5lZWRfaW4pCisJCXByb2NfaW4gPSBmZGluWzBdOworCWVsc2UgaWYgKGFzeW5jLT5pbikKKwkJcHJvY19pbiA9IGFzeW5jLT5pbjsKKwllbHNlCisJCXByb2NfaW4gPSAtMTsKKworCWlmIChuZWVkX291dCkKKwkJcHJvY19vdXQgPSBmZG91dFsxXTsKKwllbHNlIGlmIChhc3luYy0+b3V0KQorCQlwcm9jX291dCA9IGFzeW5jLT5vdXQ7CisJZWxzZQorCQlwcm9jX291dCA9IC0xOworCisjaWZkZWYgTk9fUFRIUkVBRFMKKwkvKiBGbHVzaCBzdGRpbyBiZWZvcmUgZm9yaygpIHRvIGF2b2lkIGNsb25pbmcgYnVmZmVycyAqLworCWZmbHVzaChOVUxMKTsKKworCWFzeW5jLT5waWQgPSBmb3JrKCk7CisJaWYgKGFzeW5jLT5waWQgPCAwKSB7CisJCWVycm9yKCJmb3JrIChhc3luYykgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmICghYXN5bmMtPnBpZCkgeworCQlpZiAobmVlZF9pbikKKwkJCWNsb3NlKGZkaW5bMV0pOworCQlpZiAobmVlZF9vdXQpCisJCQljbG9zZShmZG91dFswXSk7CisJCWV4aXQoISFhc3luYy0+cHJvYyhwcm9jX2luLCBwcm9jX291dCwgYXN5bmMtPmRhdGEpKTsKKwl9CisKKwltYXJrX2NoaWxkX2Zvcl9jbGVhbnVwKGFzeW5jLT5waWQpOworCisJaWYgKG5lZWRfaW4pCisJCWNsb3NlKGZkaW5bMF0pOworCWVsc2UgaWYgKGFzeW5jLT5pbikKKwkJY2xvc2UoYXN5bmMtPmluKTsKKworCWlmIChuZWVkX291dCkKKwkJY2xvc2UoZmRvdXRbMV0pOworCWVsc2UgaWYgKGFzeW5jLT5vdXQpCisJCWNsb3NlKGFzeW5jLT5vdXQpOworI2Vsc2UKKwlpZiAoIW1haW5fdGhyZWFkX3NldCkgeworCQkvKgorCQkgKiBXZSBhc3N1bWUgdGhhdCB0aGUgZmlyc3QgdGltZSB0aGF0IHN0YXJ0X2FzeW5jIGlzIGNhbGxlZAorCQkgKiBpdCBpcyBmcm9tIHRoZSBtYWluIHRocmVhZC4KKwkJICovCisJCW1haW5fdGhyZWFkX3NldCA9IDE7CisJCW1haW5fdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisJCXB0aHJlYWRfa2V5X2NyZWF0ZSgmYXN5bmNfa2V5LCBOVUxMKTsKKwkJc2V0X2RpZV9yb3V0aW5lKGRpZV9hc3luYyk7CisJfQorCisJaWYgKHByb2NfaW4gPj0gMCkKKwkJc2V0X2Nsb2V4ZWMocHJvY19pbik7CisJaWYgKHByb2Nfb3V0ID49IDApCisJCXNldF9jbG9leGVjKHByb2Nfb3V0KTsKKwlhc3luYy0+cHJvY19pbiA9IHByb2NfaW47CisJYXN5bmMtPnByb2Nfb3V0ID0gcHJvY19vdXQ7CisJeworCQlpbnQgZXJyID0gcHRocmVhZF9jcmVhdGUoJmFzeW5jLT50aWQsIE5VTEwsIHJ1bl90aHJlYWQsIGFzeW5jKTsKKwkJaWYgKGVycikgeworCQkJZXJyb3IoImNhbm5vdCBjcmVhdGUgdGhyZWFkOiAlcyIsIHN0cmVycm9yKGVycikpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAobmVlZF9pbikKKwkJY2xvc2VfcGFpcihmZGluKTsKKwllbHNlIGlmIChhc3luYy0+aW4pCisJCWNsb3NlKGFzeW5jLT5pbik7CisKKwlpZiAobmVlZF9vdXQpCisJCWNsb3NlX3BhaXIoZmRvdXQpOworCWVsc2UgaWYgKGFzeW5jLT5vdXQpCisJCWNsb3NlKGFzeW5jLT5vdXQpOworCXJldHVybiAtMTsKK30KKworaW50IGZpbmlzaF9hc3luYyhzdHJ1Y3QgYXN5bmMgKmFzeW5jKQoreworI2lmZGVmIE5PX1BUSFJFQURTCisJcmV0dXJuIHdhaXRfb3Jfd2hpbmUoYXN5bmMtPnBpZCwgImNoaWxkIHByb2Nlc3MiLCAwKTsKKyNlbHNlCisJdm9pZCAqcmV0ID0gKHZvaWQgKikoaW50cHRyX3QpKC0xKTsKKworCWlmIChwdGhyZWFkX2pvaW4oYXN5bmMtPnRpZCwgJnJldCkpCisJCWVycm9yKCJwdGhyZWFkX2pvaW4gZmFpbGVkIik7CisJcmV0dXJuIChpbnQpKGludHB0cl90KXJldDsKKyNlbmRpZgorfQorCitpbnQgcnVuX2hvb2soY29uc3QgY2hhciAqaW5kZXhfZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgLi4uKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGhvb2s7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKwljb25zdCBjaGFyICpwLCAqZW52WzJdOworCWNoYXIgaW5kZXhbUEFUSF9NQVhdOworCXZhX2xpc3QgYXJnczsKKwlpbnQgcmV0OworCisJaWYgKGFjY2VzcyhnaXRfcGF0aCgiaG9va3MvJXMiLCBuYW1lKSwgWF9PSykgPCAwKQorCQlyZXR1cm4gMDsKKworCXZhX3N0YXJ0KGFyZ3MsIG5hbWUpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgZ2l0X3BhdGgoImhvb2tzLyVzIiwgbmFtZSkpOworCXdoaWxlICgocCA9IHZhX2FyZyhhcmdzLCBjb25zdCBjaGFyICopKSkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCBwKTsKKwl2YV9lbmQoYXJncyk7CisKKwltZW1zZXQoJmhvb2ssIDAsIHNpemVvZihob29rKSk7CisJaG9vay5hcmd2ID0gYXJndi5hcmd2OworCWhvb2subm9fc3RkaW4gPSAxOworCWhvb2suc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJaWYgKGluZGV4X2ZpbGUpIHsKKwkJc25wcmludGYoaW5kZXgsIHNpemVvZihpbmRleCksICJHSVRfSU5ERVhfRklMRT0lcyIsIGluZGV4X2ZpbGUpOworCQllbnZbMF0gPSBpbmRleDsKKwkJZW52WzFdID0gTlVMTDsKKwkJaG9vay5lbnYgPSBlbnY7CisJfQorCisJcmV0ID0gcnVuX2NvbW1hbmQoJmhvb2spOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9ydW4tY29tbWFuZC5oIGIvcnVuLWNvbW1hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGY3ZDJiCi0tLSAvZGV2L251bGwKKysrIGIvcnVuLWNvbW1hbmQuaApAQCAtMCwwICsxLDk1IEBACisjaWZuZGVmIFJVTl9DT01NQU5EX0gKKyNkZWZpbmUgUlVOX0NPTU1BTkRfSAorCisjaWZuZGVmIE5PX1BUSFJFQURTCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKK3N0cnVjdCBjaGlsZF9wcm9jZXNzIHsKKwljb25zdCBjaGFyICoqYXJndjsKKwlwaWRfdCBwaWQ7CisJLyoKKwkgKiBVc2luZyAuaW4sIC5vdXQsIC5lcnI6CisJICogLSBTcGVjaWZ5IDAgZm9yIG5vIHJlZGlyZWN0aW9ucyAoY2hpbGQgaW5oZXJpdHMgc3RkaW4sIHN0ZG91dCwKKwkgKiAgIHN0ZGVyciBmcm9tIHBhcmVudCkuCisJICogLSBTcGVjaWZ5IC0xIHRvIGhhdmUgYSBwaXBlIGFsbG9jYXRlZCBhcyBmb2xsb3dzOgorCSAqICAgICAuaW46IHJldHVybnMgdGhlIHdyaXRhYmxlIHBpcGUgZW5kOyBwYXJlbnQgd3JpdGVzIHRvIGl0LAorCSAqICAgICAgICAgIHRoZSByZWFkYWJsZSBwaXBlIGVuZCBiZWNvbWVzIGNoaWxkJ3Mgc3RkaW4KKwkgKiAgICAgLm91dCwgLmVycjogcmV0dXJucyB0aGUgcmVhZGFibGUgcGlwZSBlbmQ7IHBhcmVudCByZWFkcyBmcm9tCisJICogICAgICAgICAgaXQsIHRoZSB3cml0YWJsZSBwaXBlIGVuZCBiZWNvbWVzIGNoaWxkJ3Mgc3Rkb3V0L3N0ZGVycgorCSAqICAgVGhlIGNhbGxlciBvZiBzdGFydF9jb21tYW5kKCkgbXVzdCBjbG9zZSB0aGUgcmV0dXJuZWQgRkRzCisJICogICBhZnRlciBpdCBoYXMgY29tcGxldGVkIHJlYWRpbmcgZnJvbS93cml0aW5nIHRvIGl0IQorCSAqIC0gU3BlY2lmeSA+IDAgdG8gc2V0IGEgY2hhbm5lbCB0byBhIHBhcnRpY3VsYXIgRkQgYXMgZm9sbG93czoKKwkgKiAgICAgLmluOiBhIHJlYWRhYmxlIEZELCBiZWNvbWVzIGNoaWxkJ3Mgc3RkaW4KKwkgKiAgICAgLm91dDogYSB3cml0YWJsZSBGRCwgYmVjb21lcyBjaGlsZCdzIHN0ZG91dC9zdGRlcnIKKwkgKiAgICAgLmVycjogYSB3cml0YWJsZSBGRCwgYmVjb21lcyBjaGlsZCdzIHN0ZGVycgorCSAqICAgVGhlIHNwZWNpZmllZCBGRCBpcyBjbG9zZWQgYnkgc3RhcnRfY29tbWFuZCgpLCBldmVuIGluIGNhc2UKKwkgKiAgIG9mIGVycm9ycyEKKwkgKi8KKwlpbnQgaW47CisJaW50IG91dDsKKwlpbnQgZXJyOworCWNvbnN0IGNoYXIgKmRpcjsKKwljb25zdCBjaGFyICpjb25zdCAqZW52OworCXVuc2lnbmVkIG5vX3N0ZGluOjE7CisJdW5zaWduZWQgbm9fc3Rkb3V0OjE7CisJdW5zaWduZWQgbm9fc3RkZXJyOjE7CisJdW5zaWduZWQgZ2l0X2NtZDoxOyAvKiBpZiB0aGlzIGlzIHRvIGJlIGdpdCBzdWItY29tbWFuZCAqLworCXVuc2lnbmVkIHNpbGVudF9leGVjX2ZhaWx1cmU6MTsKKwl1bnNpZ25lZCBzdGRvdXRfdG9fc3RkZXJyOjE7CisJdW5zaWduZWQgdXNlX3NoZWxsOjE7CisJdW5zaWduZWQgY2xlYW5fb25fZXhpdDoxOworCXZvaWQgKCpwcmVleGVjX2NiKSh2b2lkKTsKK307CisKK2ludCBzdGFydF9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworaW50IGZpbmlzaF9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworaW50IHJ1bl9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCitleHRlcm4gaW50IHJ1bl9ob29rKGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLik7CisKKyNkZWZpbmUgUlVOX0NPTU1BTkRfTk9fU1RESU4gMQorI2RlZmluZSBSVU5fR0lUX0NNRAkgICAgIDIJLypJZiB0aGlzIGlzIHRvIGJlIGdpdCBzdWItY29tbWFuZCAqLworI2RlZmluZSBSVU5fQ09NTUFORF9TVERPVVRfVE9fU1RERVJSIDQKKyNkZWZpbmUgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkUgOAorI2RlZmluZSBSVU5fVVNJTkdfU0hFTEwgMTYKKyNkZWZpbmUgUlVOX0NMRUFOX09OX0VYSVQgMzIKK2ludCBydW5fY29tbWFuZF92X29wdChjb25zdCBjaGFyICoqYXJndiwgaW50IG9wdCk7CisKKy8qCisgKiBlbnYgKHRoZSBlbnZpcm9ubWVudCkgaXMgdG8gYmUgZm9ybWF0dGVkIGxpa2UgZW52aXJvbjogIlZBUj1WQUxVRSIuCisgKiBUbyB1bnNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB1c2UganVzdCAiVkFSIi4KKyAqLworaW50IHJ1bl9jb21tYW5kX3Zfb3B0X2NkX2Vudihjb25zdCBjaGFyICoqYXJndiwgaW50IG9wdCwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpjb25zdCAqZW52KTsKKworLyoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGlzIHRvIGZlZWQgYSBwaXBlIGJ5IHJ1bm5pbmcKKyAqIGEgZnVuY3Rpb24gYXN5bmNocm9ub3VzbHkgYW5kIHByb3ZpZGluZyBvdXRwdXQgdGhhdCB0aGUgY2FsbGVyIHJlYWRzLgorICoKKyAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgbm8gc3luY2hyb25pemF0aW9uIGFuZCBtdXR1YWwgZXhjbHVzaW9uIGJldHdlZW4KKyAqIHRoZSBjYWxsZXIgYW5kIHRoZSBmZWVkIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBmdW5jdGlvbgorICogY2FuIHJ1biBpbiBhIHRocmVhZCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIGNhbGxlci4KKyAqLworc3RydWN0IGFzeW5jIHsKKwkvKgorCSAqIHByb2MgcmVhZHMgZnJvbSBpbjsgY2xvc2VzIGl0IGJlZm9yZSByZXR1cm4KKwkgKiBwcm9jIHdyaXRlcyB0byBvdXQ7IGNsb3NlcyBpdCBiZWZvcmUgcmV0dXJuCisJICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUKKwkgKi8KKwlpbnQgKCpwcm9jKShpbnQgaW4sIGludCBvdXQsIHZvaWQgKmRhdGEpOworCXZvaWQgKmRhdGE7CisJaW50IGluOwkJLyogY2FsbGVyIHdyaXRlcyBoZXJlIGFuZCBjbG9zZXMgaXQgKi8KKwlpbnQgb3V0OwkvKiBjYWxsZXIgcmVhZHMgZnJvbSBoZXJlIGFuZCBjbG9zZXMgaXQgKi8KKyNpZmRlZiBOT19QVEhSRUFEUworCXBpZF90IHBpZDsKKyNlbHNlCisJcHRocmVhZF90IHRpZDsKKwlpbnQgcHJvY19pbjsKKwlpbnQgcHJvY19vdXQ7CisjZW5kaWYKK307CisKK2ludCBzdGFydF9hc3luYyhzdHJ1Y3QgYXN5bmMgKmFzeW5jKTsKK2ludCBmaW5pc2hfYXN5bmMoc3RydWN0IGFzeW5jICphc3luYyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2VuZC1wYWNrLmggYi9zZW5kLXBhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWQ3YWIxCi0tLSAvZGV2L251bGwKKysrIGIvc2VuZC1wYWNrLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBTRU5EX1BBQ0tfSAorI2RlZmluZSBTRU5EX1BBQ0tfSAorCitzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgeworCXVuc2lnbmVkIHZlcmJvc2U6MSwKKwkJcXVpZXQ6MSwKKwkJcG9yY2VsYWluOjEsCisJCXByb2dyZXNzOjEsCisJCXNlbmRfbWlycm9yOjEsCisJCWZvcmNlX3VwZGF0ZToxLAorCQl1c2VfdGhpbl9wYWNrOjEsCisJCXVzZV9vZnNfZGVsdGE6MSwKKwkJZHJ5X3J1bjoxLAorCQlzdGF0ZWxlc3NfcnBjOjE7Cit9OworCitpbnQgc2VuZF9wYWNrKHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncywKKwkgICAgICBpbnQgZmRbXSwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4sCisJICAgICAgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIHN0cnVjdCBleHRyYV9oYXZlX29iamVjdHMgKmV4dHJhX2hhdmUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NlcXVlbmNlci5jIGIvc2VxdWVuY2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3MjNkMgotLS0gL2Rldi9udWxsCisrKyBiL3NlcXVlbmNlci5jCkBAIC0wLDAgKzEsMTA3OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworI2RlZmluZSBHSVRfUkVGTE9HX0FDVElPTiAiR0lUX1JFRkxPR19BQ1RJT04iCisKK2NvbnN0IGNoYXIgc2lnbl9vZmZfaGVhZGVyW10gPSAiU2lnbmVkLW9mZi1ieTogIjsKKworc3RhdGljIHZvaWQgcmVtb3ZlX3NlcXVlbmNlcl9zdGF0ZSh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgc2VxX2RpciA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJnNlcV9kaXIsICIlcyIsIGdpdF9wYXRoKFNFUV9ESVIpKTsKKwlyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZzZXFfZGlyLCAwKTsKKwlzdHJidWZfcmVsZWFzZSgmc2VxX2Rpcik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICphY3Rpb25fbmFtZShjb25zdCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJcmV0dXJuIG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUID8gInJldmVydCIgOiAiY2hlcnJ5LXBpY2siOworfQorCitzdGF0aWMgY2hhciAqZ2V0X2VuY29kaW5nKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCitzdHJ1Y3QgY29tbWl0X21lc3NhZ2UgeworCWNoYXIgKnBhcmVudF9sYWJlbDsKKwljb25zdCBjaGFyICpsYWJlbDsKKwljb25zdCBjaGFyICpzdWJqZWN0OworCWNoYXIgKnJlZW5jb2RlZF9tZXNzYWdlOworCWNvbnN0IGNoYXIgKm1lc3NhZ2U7Cit9OworCitzdGF0aWMgaW50IGdldF9tZXNzYWdlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9tZXNzYWdlICpvdXQpCit7CisJY29uc3QgY2hhciAqZW5jb2Rpbmc7CisJY29uc3QgY2hhciAqYWJicmV2LCAqc3ViamVjdDsKKwlpbnQgYWJicmV2X2xlbiwgc3ViamVjdF9sZW47CisJY2hhciAqcTsKKworCWlmICghY29tbWl0LT5idWZmZXIpCisJCXJldHVybiAtMTsKKwllbmNvZGluZyA9IGdldF9lbmNvZGluZyhjb21taXQtPmJ1ZmZlcik7CisJaWYgKCFlbmNvZGluZykKKwkJZW5jb2RpbmcgPSAiVVRGLTgiOworCWlmICghZ2l0X2NvbW1pdF9lbmNvZGluZykKKwkJZ2l0X2NvbW1pdF9lbmNvZGluZyA9ICJVVEYtOCI7CisKKwlvdXQtPnJlZW5jb2RlZF9tZXNzYWdlID0gTlVMTDsKKwlvdXQtPm1lc3NhZ2UgPSBjb21taXQtPmJ1ZmZlcjsKKwlpZiAoc3RyY21wKGVuY29kaW5nLCBnaXRfY29tbWl0X2VuY29kaW5nKSkKKwkJb3V0LT5yZWVuY29kZWRfbWVzc2FnZSA9IHJlZW5jb2RlX3N0cmluZyhjb21taXQtPmJ1ZmZlciwKKwkJCQkJZ2l0X2NvbW1pdF9lbmNvZGluZywgZW5jb2RpbmcpOworCWlmIChvdXQtPnJlZW5jb2RlZF9tZXNzYWdlKQorCQlvdXQtPm1lc3NhZ2UgPSBvdXQtPnJlZW5jb2RlZF9tZXNzYWdlOworCisJYWJicmV2ID0gZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIERFRkFVTFRfQUJCUkVWKTsKKwlhYmJyZXZfbGVuID0gc3RybGVuKGFiYnJldik7CisKKwlzdWJqZWN0X2xlbiA9IGZpbmRfY29tbWl0X3N1YmplY3Qob3V0LT5tZXNzYWdlLCAmc3ViamVjdCk7CisKKwlvdXQtPnBhcmVudF9sYWJlbCA9IHhtYWxsb2Moc3RybGVuKCJwYXJlbnQgb2YgIikgKyBhYmJyZXZfbGVuICsKKwkJCSAgICAgIHN0cmxlbigiLi4uICIpICsgc3ViamVjdF9sZW4gKyAxKTsKKwlxID0gb3V0LT5wYXJlbnRfbGFiZWw7CisJcSA9IG1lbXBjcHkocSwgInBhcmVudCBvZiAiLCBzdHJsZW4oInBhcmVudCBvZiAiKSk7CisJb3V0LT5sYWJlbCA9IHE7CisJcSA9IG1lbXBjcHkocSwgYWJicmV2LCBhYmJyZXZfbGVuKTsKKwlxID0gbWVtcGNweShxLCAiLi4uICIsIHN0cmxlbigiLi4uICIpKTsKKwlvdXQtPnN1YmplY3QgPSBxOworCXEgPSBtZW1wY3B5KHEsIHN1YmplY3QsIHN1YmplY3RfbGVuKTsKKwkqcSA9ICdcMCc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbWVzc2FnZShzdHJ1Y3QgY29tbWl0X21lc3NhZ2UgKm1zZykKK3sKKwlmcmVlKG1zZy0+cGFyZW50X2xhYmVsKTsKKwlmcmVlKG1zZy0+cmVlbmNvZGVkX21lc3NhZ2UpOworfQorCitzdGF0aWMgY2hhciAqZ2V0X2VuY29kaW5nKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJY29uc3QgY2hhciAqcCA9IG1lc3NhZ2UsICplb2w7CisKKwl3aGlsZSAoKnAgJiYgKnAgIT0gJ1xuJykgeworCQlmb3IgKGVvbCA9IHAgKyAxOyAqZW9sICYmICplb2wgIT0gJ1xuJzsgZW9sKyspCisJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwkJaWYgKCFwcmVmaXhjbXAocCwgImVuY29kaW5nICIpKSB7CisJCQljaGFyICpyZXN1bHQgPSB4bWFsbG9jKGVvbCAtIDggLSBwKTsKKwkJCXN0cmxjcHkocmVzdWx0LCBwICsgOSwgZW9sIC0gOCAtIHApOworCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQlwID0gZW9sOworCQlpZiAoKnAgPT0gJ1xuJykKKwkJCXArKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NoZXJyeV9waWNrX2hlYWQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpwc2V1ZG9yZWYpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJaW50IGZkOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXNcbiIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKworCWZpbGVuYW1lID0gZ2l0X3BhdGgoIiVzIiwgcHNldWRvcmVmKTsKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciKSwgZmlsZW5hbWUpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYuYnVmLCBidWYubGVuKSAhPSBidWYubGVuIHx8IGNsb3NlKGZkKSkKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIGZpbGVuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYWR2aWNlKGludCBzaG93X2hpbnQsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwljaGFyICptc2cgPSBnZXRlbnYoIkdJVF9DSEVSUllfUElDS19IRUxQIik7CisKKwlpZiAobXNnKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CisJCS8qCisJCSAqIEEgY29uZmxpY3QgaGFzIG9jY3VyZWQgYnV0IHRoZSBwb3JjZWxhaW4KKwkJICogKHR5cGljYWxseSByZWJhc2UgLS1pbnRlcmFjdGl2ZSkgd2FudHMgdG8gdGFrZSBjYXJlCisJCSAqIG9mIHRoZSBjb21taXQgaXRzZWxmIHNvIHJlbW92ZSBDSEVSUllfUElDS19IRUFECisJCSAqLworCQl1bmxpbmsoZ2l0X3BhdGgoIkNIRVJSWV9QSUNLX0hFQUQiKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc2hvd19oaW50KSB7CisJCWlmIChvcHRzLT5ub19jb21taXQpCisJCQlhZHZpc2UoXygiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorCQkJCSAid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIikpOworCQllbHNlCisJCQlhZHZpc2UoXygiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorCQkJCSAid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisJCQkJICJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3cml0ZV9tZXNzYWdlKHN0cnVjdCBzdHJidWYgKm1zZ2J1ZiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbXNnX2ZpbGU7CisKKwlpbnQgbXNnX2ZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbXNnX2ZpbGUsIGZpbGVuYW1lLAorCQkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCWlmICh3cml0ZV9pbl9mdWxsKG1zZ19mZCwgbXNnYnVmLT5idWYsIG1zZ2J1Zi0+bGVuKSA8IDApCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiKSwgZmlsZW5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKG1zZ2J1Zik7CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJm1zZ19maWxlKSA8IDApCisJCWRpZShfKCJFcnJvciB3cmFwcGluZyB1cCAlcyIpLCBmaWxlbmFtZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJlZSAqZW1wdHlfdHJlZSh2b2lkKQoreworCXJldHVybiBsb29rdXBfdHJlZShFTVBUWV9UUkVFX1NIQTFfQklOKTsKK30KKworc3RhdGljIGludCBlcnJvcl9kaXJ0eV9pbmRleChzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJaWYgKHJlYWRfY2FjaGVfdW5tZXJnZWQoKSkKKwkJcmV0dXJuIGVycm9yX3Jlc29sdmVfY29uZmxpY3QoYWN0aW9uX25hbWUob3B0cykpOworCisJLyogRGlmZmVyZW50IHRyYW5zbGF0aW9uIHN0cmluZ3MgZm9yIGNoZXJyeS1waWNrIGFuZCByZXZlcnQgKi8KKwlpZiAob3B0cy0+YWN0aW9uID09IFJFUExBWV9QSUNLKQorCQllcnJvcihfKCJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlcnJ5LXBpY2suIikpOworCWVsc2UKKwkJZXJyb3IoXygiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHJldmVydC4iKSk7CisKKwlpZiAoYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UpCisJCWFkdmlzZShfKCJDb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iKSk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGZhc3RfZm9yd2FyZF90byhjb25zdCB1bnNpZ25lZCBjaGFyICp0bywgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSkKK3sKKwlzdHJ1Y3QgcmVmX2xvY2sgKnJlZl9sb2NrOworCisJcmVhZF9jYWNoZSgpOworCWlmIChjaGVja291dF9mYXN0X2ZvcndhcmQoZnJvbSwgdG8pKQorCQlleGl0KDEpOyAvKiB0aGUgY2FsbGVlIHNob3VsZCBoYXZlIGNvbXBsYWluZWQgYWxyZWFkeSAqLworCXJlZl9sb2NrID0gbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUoIkhFQUQiLCBmcm9tLCAwKTsKKwlyZXR1cm4gd3JpdGVfcmVmX3NoYTEocmVmX2xvY2ssIHRvLCAiY2hlcnJ5LXBpY2siKTsKK30KKworc3RhdGljIGludCBkb19yZWN1cnNpdmVfbWVyZ2Uoc3RydWN0IGNvbW1pdCAqYmFzZSwgc3RydWN0IGNvbW1pdCAqbmV4dCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJhc2VfbGFiZWwsIGNvbnN0IGNoYXIgKm5leHRfbGFiZWwsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpoZWFkLCBzdHJ1Y3Qgc3RyYnVmICptc2didWYsCisJCQkgICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKKwlzdHJ1Y3QgdHJlZSAqcmVzdWx0LCAqbmV4dF90cmVlLCAqYmFzZV90cmVlLCAqaGVhZF90cmVlOworCWludCBjbGVhbiwgaW5kZXhfZmQ7CisJY29uc3QgY2hhciAqKnhvcHQ7CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsKKworCWluZGV4X2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDEpOworCisJcmVhZF9jYWNoZSgpOworCisJaW5pdF9tZXJnZV9vcHRpb25zKCZvKTsKKwlvLmFuY2VzdG9yID0gYmFzZSA/IGJhc2VfbGFiZWwgOiAiKGVtcHR5IHRyZWUpIjsKKwlvLmJyYW5jaDEgPSAiSEVBRCI7CisJby5icmFuY2gyID0gbmV4dCA/IG5leHRfbGFiZWwgOiAiKGVtcHR5IHRyZWUpIjsKKworCWhlYWRfdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoaGVhZCk7CisJbmV4dF90cmVlID0gbmV4dCA/IG5leHQtPnRyZWUgOiBlbXB0eV90cmVlKCk7CisJYmFzZV90cmVlID0gYmFzZSA/IGJhc2UtPnRyZWUgOiBlbXB0eV90cmVlKCk7CisKKwlmb3IgKHhvcHQgPSBvcHRzLT54b3B0czsgeG9wdCAhPSBvcHRzLT54b3B0cyArIG9wdHMtPnhvcHRzX25yOyB4b3B0KyspCisJCXBhcnNlX21lcmdlX29wdCgmbywgKnhvcHQpOworCisJY2xlYW4gPSBtZXJnZV90cmVlcygmbywKKwkJCSAgICBoZWFkX3RyZWUsCisJCQkgICAgbmV4dF90cmVlLCBiYXNlX3RyZWUsICZyZXN1bHQpOworCisJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkICYmCisJICAgICh3cml0ZV9jYWNoZShpbmRleF9mZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJICAgICBjb21taXRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrKSkpCisJCS8qIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiIG9yICJjaGVycnktcGljayIgKi8KKwkJZGllKF8oIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSwgYWN0aW9uX25hbWUob3B0cykpOworCXJvbGxiYWNrX2xvY2tfZmlsZSgmaW5kZXhfbG9jayk7CisKKwlpZiAob3B0cy0+c2lnbm9mZikKKwkJYXBwZW5kX3NpZ25vZmYobXNnYnVmLCAwKTsKKworCWlmICghY2xlYW4pIHsKKwkJaW50IGk7CisJCXN0cmJ1Zl9hZGRzdHIobXNnYnVmLCAiXG5Db25mbGljdHM6XG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjspIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaSsrXTsKKwkJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCQlzdHJidWZfYWRkY2gobXNnYnVmLCAnXHQnKTsKKwkJCQlzdHJidWZfYWRkc3RyKG1zZ2J1ZiwgY2UtPm5hbWUpOworCQkJCXN0cmJ1Zl9hZGRjaChtc2didWYsICdcbicpOworCQkJCXdoaWxlIChpIDwgYWN0aXZlX25yICYmICFzdHJjbXAoY2UtPm5hbWUsCisJCQkJCQlhY3RpdmVfY2FjaGVbaV0tPm5hbWUpKQorCQkJCQlpKys7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gIWNsZWFuOworfQorCitzdGF0aWMgaW50IGlzX2luZGV4X3VuY2hhbmdlZCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdDsKKworCWlmICghcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgaGVhZF9zaGExLCAxLCBOVUxMKSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0XG4iKSk7CisKKwloZWFkX2NvbW1pdCA9IGxvb2t1cF9jb21taXQoaGVhZF9zaGExKTsKKworCS8qCisJICogSWYgaGVhZF9jb21taXQgaXMgTlVMTCwgY2hlY2tfY29tbWl0LCBjYWxsZWQgZnJvbQorCSAqIGxvb2t1cF9jb21taXQsIHdvdWxkIGhhdmUgaW5kaWNhdGVkIHRoYXQgaGVhZF9jb21taXQgaXMgbm90CisJICogYSBjb21taXQgb2JqZWN0IGFscmVhZHkuICBwYXJzZV9jb21taXQoKSB3aWxsIHJldHVybiBmYWlsdXJlCisJICogd2l0aG91dCBmdXJ0aGVyIGNvbXBsYWludHMgaW4gc3VjaCBhIGNhc2UuICBPdGhlcndpc2UsIGlmCisJICogdGhlIGNvbW1pdCBpcyBpbnZhbGlkLCBwYXJzZV9jb21taXQoKSB3aWxsIGNvbXBsYWluLiAgU28KKwkgKiB0aGVyZSBpcyBub3RoaW5nIGZvciB1cyB0byBzYXkgaGVyZS4gIEp1c3QgcmV0dXJuIGZhaWx1cmUuCisJICovCisJaWYgKHBhcnNlX2NvbW1pdChoZWFkX2NvbW1pdCkpCisJCXJldHVybiAtMTsKKworCWlmICghYWN0aXZlX2NhY2hlX3RyZWUpCisJCWFjdGl2ZV9jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCisJaWYgKCFjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGFjdGl2ZV9jYWNoZV90cmVlKSkKKwkJaWYgKGNhY2hlX3RyZWVfdXBkYXRlKGFjdGl2ZV9jYWNoZV90cmVlLCBhY3RpdmVfY2FjaGUsCisJCQkJICBhY3RpdmVfbnIsIDApKQorCQkJcmV0dXJuIGVycm9yKF8oIlVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIikpOworCisJcmV0dXJuICFoYXNoY21wKGFjdGl2ZV9jYWNoZV90cmVlLT5zaGExLCBoZWFkX2NvbW1pdC0+dHJlZS0+b2JqZWN0LnNoYTEpOworfQorCisvKgorICogSWYgd2UgYXJlIGNoZXJyeS1waWNrLCBhbmQgaWYgdGhlIG1lcmdlIGRpZCBub3QgcmVzdWx0IGluCisgKiBoYW5kLWVkaXRpbmcsIHdlIHdpbGwgaGl0IHRoaXMgY29tbWl0IGFuZCBpbmhlcml0IHRoZSBvcmlnaW5hbAorICogYXV0aG9yIGRhdGUgYW5kIG5hbWUuCisgKiBJZiB3ZSBhcmUgcmV2ZXJ0LCBvciBpZiBvdXIgY2hlcnJ5LXBpY2sgcmVzdWx0cyBpbiBhIGhhbmQgbWVyZ2UsCisgKiB3ZSBoYWQgYmV0dGVyIHNheSB0aGF0IHRoZSBjdXJyZW50IHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIHRoYXQuCisgKi8KK3N0YXRpYyBpbnQgcnVuX2dpdF9jb21taXQoY29uc3QgY2hhciAqZGVmbXNnLCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsCisJCQkgIGludCBhbGxvd19lbXB0eSkKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcnJheTsKKwlpbnQgcmM7CisKKwlhcmd2X2FycmF5X2luaXQoJmFycmF5KTsKKwlhcmd2X2FycmF5X3B1c2goJmFycmF5LCAiY29tbWl0Iik7CisJYXJndl9hcnJheV9wdXNoKCZhcnJheSwgIi1uIik7CisKKwlpZiAob3B0cy0+c2lnbm9mZikKKwkJYXJndl9hcnJheV9wdXNoKCZhcnJheSwgIi1zIik7CisJaWYgKCFvcHRzLT5lZGl0KSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJyYXksICItRiIpOworCQlhcmd2X2FycmF5X3B1c2goJmFycmF5LCBkZWZtc2cpOworCX0KKworCWlmIChhbGxvd19lbXB0eSkKKwkJYXJndl9hcnJheV9wdXNoKCZhcnJheSwgIi0tYWxsb3ctZW1wdHkiKTsKKworCWlmIChvcHRzLT5hbGxvd19lbXB0eV9tZXNzYWdlKQorCQlhcmd2X2FycmF5X3B1c2goJmFycmF5LCAiLS1hbGxvdy1lbXB0eS1tZXNzYWdlIik7CisKKwlyYyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFycmF5LmFyZ3YsIFJVTl9HSVRfQ01EKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcnJheSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGlzX29yaWdpbmFsX2NvbW1pdF9lbXB0eShzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcHRyZWVfc2hhMTsKKworCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIpLAorCQkJICAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJaWYgKGNvbW1pdC0+cGFyZW50cykgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHMtPml0ZW07CisJCWlmIChwYXJzZV9jb21taXQocGFyZW50KSkKKwkJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlc1xuIiksCisJCQkJc2hhMV90b19oZXgocGFyZW50LT5vYmplY3Quc2hhMSkpOworCQlwdHJlZV9zaGExID0gcGFyZW50LT50cmVlLT5vYmplY3Quc2hhMTsKKwl9IGVsc2UgeworCQlwdHJlZV9zaGExID0gRU1QVFlfVFJFRV9TSEExX0JJTjsgLyogY29tbWl0IGlzIHJvb3QgKi8KKwl9CisKKwlyZXR1cm4gIWhhc2hjbXAocHRyZWVfc2hhMSwgY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSk7Cit9CisKKy8qCisgKiBEbyB3ZSBydW4gImdpdCBjb21taXQiIHdpdGggIi0tYWxsb3ctZW1wdHkiPworICovCitzdGF0aWMgaW50IGFsbG93X2VtcHR5KHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBpbmRleF91bmNoYW5nZWQsIGVtcHR5X2NvbW1pdDsKKworCS8qCisJICogVGhyZWUgY2FzZXM6CisJICoKKwkgKiAoMSkgd2UgZG8gbm90IGFsbG93IGVtcHR5IGF0IGFsbCBhbmQgZXJyb3Igb3V0LgorCSAqCisJICogKDIpIHdlIGFsbG93IG9uZXMgdGhhdCB3ZXJlIGluaXRpYWxseSBlbXB0eSwgYnV0CisJICogZm9yYmlkIHRoZSBvbmVzIHRoYXQgYmVjb21lIGVtcHR5OworCSAqCisJICogKDMpIHdlIGFsbG93IGJvdGguCisJICovCisJaWYgKCFvcHRzLT5hbGxvd19lbXB0eSkKKwkJcmV0dXJuIDA7IC8qIGxldCAiZ2l0IGNvbW1pdCIgYmFyZiBhcyBuZWNlc3NhcnkgKi8KKworCWluZGV4X3VuY2hhbmdlZCA9IGlzX2luZGV4X3VuY2hhbmdlZCgpOworCWlmIChpbmRleF91bmNoYW5nZWQgPCAwKQorCQlyZXR1cm4gaW5kZXhfdW5jaGFuZ2VkOworCWlmICghaW5kZXhfdW5jaGFuZ2VkKQorCQlyZXR1cm4gMDsgLyogd2UgZG8gbm90IGhhdmUgdG8gc2F5IC0tYWxsb3ctZW1wdHkgKi8KKworCWlmIChvcHRzLT5rZWVwX3JlZHVuZGFudF9jb21taXRzKQorCQlyZXR1cm4gMTsKKworCWVtcHR5X2NvbW1pdCA9IGlzX29yaWdpbmFsX2NvbW1pdF9lbXB0eShjb21taXQpOworCWlmIChlbXB0eV9jb21taXQgPCAwKQorCQlyZXR1cm4gZW1wdHlfY29tbWl0OworCWlmICghZW1wdHlfY29tbWl0KQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRvX3BpY2tfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXVuc2lnbmVkIGNoYXIgaGVhZFsyMF07CisJc3RydWN0IGNvbW1pdCAqYmFzZSwgKm5leHQsICpwYXJlbnQ7CisJY29uc3QgY2hhciAqYmFzZV9sYWJlbCwgKm5leHRfbGFiZWw7CisJc3RydWN0IGNvbW1pdF9tZXNzYWdlIG1zZyA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworCWNoYXIgKmRlZm1zZyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBtc2didWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmVzOworCisJaWYgKG9wdHMtPm5vX2NvbW1pdCkgeworCQkvKgorCQkgKiBXZSBkbyBub3QgaW50ZW5kIHRvIGNvbW1pdCBpbW1lZGlhdGVseS4gIFdlIGp1c3Qgd2FudCB0bworCQkgKiBtZXJnZSB0aGUgZGlmZmVyZW5jZXMgaW4sIHNvIGxldCdzIGNvbXB1dGUgdGhlIHRyZWUKKwkJICogdGhhdCByZXByZXNlbnRzIHRoZSAiY3VycmVudCIgc3RhdGUgZm9yIG1lcmdlLXJlY3Vyc2l2ZQorCQkgKiB0byB3b3JrIG9uLgorCQkgKi8KKwkJaWYgKHdyaXRlX2NhY2hlX2FzX3RyZWUoaGVhZCwgMCwgTlVMTCkpCisJCQlkaWUgKF8oIllvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iKSk7CisJfSBlbHNlIHsKKwkJaWYgKGdldF9zaGExKCJIRUFEIiwgaGVhZCkpCisJCQlyZXR1cm4gZXJyb3IoXygiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRCIpKTsKKwkJaWYgKGluZGV4X2RpZmZlcnNfZnJvbSgiSEVBRCIsIDApKQorCQkJcmV0dXJuIGVycm9yX2RpcnR5X2luZGV4KG9wdHMpOworCX0KKwlkaXNjYXJkX2NhY2hlKCk7CisKKwlpZiAoIWNvbW1pdC0+cGFyZW50cykgeworCQlwYXJlbnQgPSBOVUxMOworCX0KKwllbHNlIGlmIChjb21taXQtPnBhcmVudHMtPm5leHQpIHsKKwkJLyogUmV2ZXJ0aW5nIG9yIGNoZXJyeS1waWNraW5nIGEgbWVyZ2UgY29tbWl0ICovCisJCWludCBjbnQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCQlpZiAoIW9wdHMtPm1haW5saW5lKQorCQkJcmV0dXJuIGVycm9yKF8oIkNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIpLAorCQkJCXNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKworCQlmb3IgKGNudCA9IDEsIHAgPSBjb21taXQtPnBhcmVudHM7CisJCSAgICAgY250ICE9IG9wdHMtPm1haW5saW5lICYmIHA7CisJCSAgICAgY250KyspCisJCQlwID0gcC0+bmV4dDsKKwkJaWYgKGNudCAhPSBvcHRzLT5tYWlubGluZSB8fCAhcCkKKwkJCXJldHVybiBlcnJvcihfKCJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiKSwKKwkJCQlzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSwgb3B0cy0+bWFpbmxpbmUpOworCQlwYXJlbnQgPSBwLT5pdGVtOworCX0gZWxzZSBpZiAoMCA8IG9wdHMtPm1haW5saW5lKQorCQlyZXR1cm4gZXJyb3IoXygiTWFpbmxpbmUgd2FzIHNwZWNpZmllZCBidXQgY29tbWl0ICVzIGlzIG5vdCBhIG1lcmdlLiIpLAorCQkJc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCWVsc2UKKwkJcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzLT5pdGVtOworCisJaWYgKG9wdHMtPmFsbG93X2ZmICYmIHBhcmVudCAmJiAhaGFzaGNtcChwYXJlbnQtPm9iamVjdC5zaGExLCBoZWFkKSkKKwkJcmV0dXJuIGZhc3RfZm9yd2FyZF90byhjb21taXQtPm9iamVjdC5zaGExLCBoZWFkKTsKKworCWlmIChwYXJlbnQgJiYgcGFyc2VfY29tbWl0KHBhcmVudCkgPCAwKQorCQkvKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKwkJICAgImNoZXJyeS1waWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEgKi8KKwkJcmV0dXJuIGVycm9yKF8oIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIpLAorCQkJYWN0aW9uX25hbWUob3B0cyksIHNoYTFfdG9faGV4KHBhcmVudC0+b2JqZWN0LnNoYTEpKTsKKworCWlmIChnZXRfbWVzc2FnZShjb21taXQsICZtc2cpICE9IDApCisJCXJldHVybiBlcnJvcihfKCJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIpLAorCQkJc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCisJLyoKKwkgKiAiY29tbWl0IiBpcyBhbiBleGlzdGluZyBjb21taXQuICBXZSB3b3VsZCB3YW50IHRvIGFwcGx5CisJICogdGhlIGRpZmZlcmVuY2UgaXQgaW50cm9kdWNlcyBzaW5jZSBpdHMgZmlyc3QgcGFyZW50ICJwcmV2IgorCSAqIG9uIHRvcCBvZiB0aGUgY3VycmVudCBIRUFEIGlmIHdlIGFyZSBjaGVycnktcGljay4gIE9yIHRoZQorCSAqIHJldmVyc2Ugb2YgaXQgaWYgd2UgYXJlIHJldmVydC4KKwkgKi8KKworCWRlZm1zZyA9IGdpdF9wYXRoZHVwKCJNRVJHRV9NU0ciKTsKKworCWlmIChvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1JFVkVSVCkgeworCQliYXNlID0gY29tbWl0OworCQliYXNlX2xhYmVsID0gbXNnLmxhYmVsOworCQluZXh0ID0gcGFyZW50OworCQluZXh0X2xhYmVsID0gbXNnLnBhcmVudF9sYWJlbDsKKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiUmV2ZXJ0IFwiIik7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgbXNnLnN1YmplY3QpOworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsICJcIlxuXG5UaGlzIHJldmVydHMgY29tbWl0ICIpOworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKworCQlpZiAoY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkgeworCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiLCByZXZlcnNpbmdcbmNoYW5nZXMgbWFkZSB0byAiKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1Ziwgc2hhMV90b19oZXgocGFyZW50LT5vYmplY3Quc2hhMSkpOworCQl9CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgIi5cbiIpOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKnA7CisKKwkJYmFzZSA9IHBhcmVudDsKKwkJYmFzZV9sYWJlbCA9IG1zZy5wYXJlbnRfbGFiZWw7CisJCW5leHQgPSBjb21taXQ7CisJCW5leHRfbGFiZWwgPSBtc2cubGFiZWw7CisKKwkJLyoKKwkJICogQXBwZW5kIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgdG8gbXNnYnVmOyBpdCBzdGFydHMKKwkJICogYWZ0ZXIgdGhlIHRyZWUsIHBhcmVudCwgYXV0aG9yLCBjb21taXR0ZXIKKwkJICogaW5mb3JtYXRpb24gZm9sbG93ZWQgYnkgIlxuXG4iLgorCQkgKi8KKwkJcCA9IHN0cnN0cihtc2cubWVzc2FnZSwgIlxuXG4iKTsKKwkJaWYgKHApIHsKKwkJCXAgKz0gMjsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgcCk7CisJCX0KKworCQlpZiAob3B0cy0+cmVjb3JkX29yaWdpbikgeworCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgIik7CisJCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgIilcbiIpOworCQl9CisJfQorCisJaWYgKCFvcHRzLT5zdHJhdGVneSB8fCAhc3RyY21wKG9wdHMtPnN0cmF0ZWd5LCAicmVjdXJzaXZlIikgfHwgb3B0cy0+YWN0aW9uID09IFJFUExBWV9SRVZFUlQpIHsKKwkJcmVzID0gZG9fcmVjdXJzaXZlX21lcmdlKGJhc2UsIG5leHQsIGJhc2VfbGFiZWwsIG5leHRfbGFiZWwsCisJCQkJCSBoZWFkLCAmbXNnYnVmLCBvcHRzKTsKKwkJd3JpdGVfbWVzc2FnZSgmbXNnYnVmLCBkZWZtc2cpOworCX0gZWxzZSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqY29tbW9uID0gTlVMTDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVzID0gTlVMTDsKKworCQl3cml0ZV9tZXNzYWdlKCZtc2didWYsIGRlZm1zZyk7CisKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGJhc2UsICZjb21tb24pOworCQljb21taXRfbGlzdF9pbnNlcnQobmV4dCwgJnJlbW90ZXMpOworCQlyZXMgPSB0cnlfbWVyZ2VfY29tbWFuZChvcHRzLT5zdHJhdGVneSwgb3B0cy0+eG9wdHNfbnIsIG9wdHMtPnhvcHRzLAorCQkJCQljb21tb24sIHNoYTFfdG9faGV4KGhlYWQpLCByZW1vdGVzKTsKKwkJZnJlZV9jb21taXRfbGlzdChjb21tb24pOworCQlmcmVlX2NvbW1pdF9saXN0KHJlbW90ZXMpOworCX0KKworCS8qCisJICogSWYgdGhlIG1lcmdlIHdhcyBjbGVhbiBvciBpZiBpdCBmYWlsZWQgZHVlIHRvIGNvbmZsaWN0LCB3ZSB3cml0ZQorCSAqIENIRVJSWV9QSUNLX0hFQUQgZm9yIHRoZSBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgY29tbWl0IHRvIHVzZS4KKwkgKiBIb3dldmVyLCBpZiB0aGUgbWVyZ2UgZGlkIG5vdCBldmVuIHN0YXJ0LCB0aGVuIHdlIGRvbid0IHdhbnQgdG8KKwkgKiB3cml0ZSBpdCBhdCBhbGwuCisJICovCisJaWYgKG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUElDSyAmJiAhb3B0cy0+bm9fY29tbWl0ICYmIChyZXMgPT0gMCB8fCByZXMgPT0gMSkpCisJCXdyaXRlX2NoZXJyeV9waWNrX2hlYWQoY29tbWl0LCAiQ0hFUlJZX1BJQ0tfSEVBRCIpOworCWlmIChvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1JFVkVSVCAmJiAoKG9wdHMtPm5vX2NvbW1pdCAmJiByZXMgPT0gMCkgfHwgcmVzID09IDEpKQorCQl3cml0ZV9jaGVycnlfcGlja19oZWFkKGNvbW1pdCwgIlJFVkVSVF9IRUFEIik7CisKKwlpZiAocmVzKSB7CisJCWVycm9yKG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUCisJCSAgICAgID8gXygiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIpCisJCSAgICAgIDogXygiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIiksCisJCSAgICAgIGZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCBERUZBVUxUX0FCQlJFViksCisJCSAgICAgIG1zZy5zdWJqZWN0KTsKKwkJcHJpbnRfYWR2aWNlKHJlcyA9PSAxLCBvcHRzKTsKKwkJcmVyZXJlKG9wdHMtPmFsbG93X3JlcmVyZV9hdXRvKTsKKwl9IGVsc2UgeworCQlpbnQgYWxsb3cgPSBhbGxvd19lbXB0eShvcHRzLCBjb21taXQpOworCQlpZiAoYWxsb3cgPCAwKQorCQkJcmV0dXJuIGFsbG93OworCQlpZiAoIW9wdHMtPm5vX2NvbW1pdCkKKwkJCXJlcyA9IHJ1bl9naXRfY29tbWl0KGRlZm1zZywgb3B0cywgYWxsb3cpOworCX0KKworCWZyZWVfbWVzc2FnZSgmbXNnKTsKKwlmcmVlKGRlZm1zZyk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3JldnMoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCS8qCisJICogcGlja2luZyAoYnV0IG5vdCByZXZlcnRpbmcpIHJhbmdlcyAoYnV0IG5vdCBpbmRpdmlkdWFsIHJldmlzaW9ucykKKwkgKiBzaG91bGQgYmUgZG9uZSBpbiByZXZlcnNlCisJICovCisJaWYgKG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUElDSyAmJiAhb3B0cy0+cmV2cy0+bm9fd2FsaykKKwkJb3B0cy0+cmV2cy0+cmV2ZXJzZSBePSAxOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhvcHRzLT5yZXZzKSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCisJaWYgKCFvcHRzLT5yZXZzLT5jb21taXRzKQorCQlkaWUoXygiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfYW5kX3JlZnJlc2hfY2FjaGUoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2s7CisJaW50IGluZGV4X2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDApOworCWlmIChyZWFkX2luZGV4X3ByZWxvYWQoJnRoZV9pbmRleCwgTlVMTCkgPCAwKQorCQlkaWUoXygiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiKSwgYWN0aW9uX25hbWUob3B0cykpOworCXJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgUkVGUkVTSF9RVUlFVHxSRUZSRVNIX1VOTUVSR0VELCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlpZiAodGhlX2luZGV4LmNhY2hlX2NoYW5nZWQpIHsKKwkJaWYgKHdyaXRlX2luZGV4KCZ0aGVfaW5kZXgsIGluZGV4X2ZkKSB8fAorCQkgICAgY29tbWl0X2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaykpCisJCQlkaWUoXygiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiKSwgYWN0aW9uX25hbWUob3B0cykpOworCX0KKwlyb2xsYmFja19sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworfQorCitzdGF0aWMgaW50IGZvcm1hdF90b2RvKHN0cnVjdCBzdHJidWYgKmJ1Ziwgc3RydWN0IGNvbW1pdF9saXN0ICp0b2RvX2xpc3QsCisJCXN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmN1ciA9IE5VTEw7CisJY29uc3QgY2hhciAqc2hhMV9hYmJyZXYgPSBOVUxMOworCWNvbnN0IGNoYXIgKmFjdGlvbl9zdHIgPSBvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1JFVkVSVCA/ICJyZXZlcnQiIDogInBpY2siOworCWNvbnN0IGNoYXIgKnN1YmplY3Q7CisJaW50IHN1YmplY3RfbGVuOworCisJZm9yIChjdXIgPSB0b2RvX2xpc3Q7IGN1cjsgY3VyID0gY3VyLT5uZXh0KSB7CisJCXNoYTFfYWJicmV2ID0gZmluZF91bmlxdWVfYWJicmV2KGN1ci0+aXRlbS0+b2JqZWN0LnNoYTEsIERFRkFVTFRfQUJCUkVWKTsKKwkJc3ViamVjdF9sZW4gPSBmaW5kX2NvbW1pdF9zdWJqZWN0KGN1ci0+aXRlbS0+YnVmZmVyLCAmc3ViamVjdCk7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzICVzICUuKnNcbiIsIGFjdGlvbl9zdHIsIHNoYTFfYWJicmV2LAorCQkJc3ViamVjdF9sZW4sIHN1YmplY3QpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKnBhcnNlX2luc25fbGluZShjaGFyICpib2wsIGNoYXIgKmVvbCwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXVuc2lnbmVkIGNoYXIgY29tbWl0X3NoYTFbMjBdOworCWVudW0gcmVwbGF5X2FjdGlvbiBhY3Rpb247CisJY2hhciAqZW5kX29mX29iamVjdF9uYW1lOworCWludCBzYXZlZCwgc3RhdHVzLCBwYWRkaW5nOworCisJaWYgKCFwcmVmaXhjbXAoYm9sLCAicGljayIpKSB7CisJCWFjdGlvbiA9IFJFUExBWV9QSUNLOworCQlib2wgKz0gc3RybGVuKCJwaWNrIik7CisJfSBlbHNlIGlmICghcHJlZml4Y21wKGJvbCwgInJldmVydCIpKSB7CisJCWFjdGlvbiA9IFJFUExBWV9SRVZFUlQ7CisJCWJvbCArPSBzdHJsZW4oInJldmVydCIpOworCX0gZWxzZQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEVhdCB1cCBleHRyYSBzcGFjZXMvIHRhYnMgYmVmb3JlIG9iamVjdCBuYW1lICovCisJcGFkZGluZyA9IHN0cnNwbihib2wsICIgXHQiKTsKKwlpZiAoIXBhZGRpbmcpCisJCXJldHVybiBOVUxMOworCWJvbCArPSBwYWRkaW5nOworCisJZW5kX29mX29iamVjdF9uYW1lID0gYm9sICsgc3RyY3Nwbihib2wsICIgXHRcbiIpOworCXNhdmVkID0gKmVuZF9vZl9vYmplY3RfbmFtZTsKKwkqZW5kX29mX29iamVjdF9uYW1lID0gJ1wwJzsKKwlzdGF0dXMgPSBnZXRfc2hhMShib2wsIGNvbW1pdF9zaGExKTsKKwkqZW5kX29mX29iamVjdF9uYW1lID0gc2F2ZWQ7CisKKwkvKgorCSAqIFZlcmlmeSB0aGF0IHRoZSBhY3Rpb24gbWF0Y2hlcyB1cCB3aXRoIHRoZSBvbmUgaW4KKwkgKiBvcHRzOyB3ZSBkb24ndCBzdXBwb3J0IGFyYml0cmFyeSBpbnN0cnVjdGlvbnMKKwkgKi8KKwlpZiAoYWN0aW9uICE9IG9wdHMtPmFjdGlvbikgeworCQljb25zdCBjaGFyICphY3Rpb25fc3RyOworCQlhY3Rpb25fc3RyID0gYWN0aW9uID09IFJFUExBWV9SRVZFUlQgPyAicmV2ZXJ0IiA6ICJjaGVycnktcGljayI7CisJCWVycm9yKF8oIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIpLCBhY3Rpb25fc3RyLCBhY3Rpb25fbmFtZShvcHRzKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShjb21taXRfc2hhMSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaW5zbl9idWZmZXIoY2hhciAqYnVmLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0b2RvX2xpc3QsCisJCQlzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCA9IHRvZG9fbGlzdDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJY2hhciAqcCA9IGJ1ZjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7ICpwOyBpKyspIHsKKwkJY2hhciAqZW9sID0gc3RyY2hybnVsKHAsICdcbicpOworCQljb21taXQgPSBwYXJzZV9pbnNuX2xpbmUocCwgZW9sLCBvcHRzKTsKKwkJaWYgKCFjb21taXQpCisJCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIiksIGkpOworCQluZXh0ID0gY29tbWl0X2xpc3RfYXBwZW5kKGNvbW1pdCwgbmV4dCk7CisJCXAgPSAqZW9sID8gZW9sICsgMSA6IGVvbDsKKwl9CisJaWYgKCEqdG9kb19saXN0KQorCQlyZXR1cm4gZXJyb3IoXygiTm8gY29tbWl0cyBwYXJzZWQuIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWFkX3BvcHVsYXRlX3RvZG8oc3RydWN0IGNvbW1pdF9saXN0ICoqdG9kb19saXN0LAorCQkJc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWNvbnN0IGNoYXIgKnRvZG9fZmlsZSA9IGdpdF9wYXRoKFNFUV9UT0RPX0ZJTEUpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZkLCByZXM7CisKKwlmZCA9IG9wZW4odG9kb19maWxlLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCBvcGVuICVzIiksIHRvZG9fZmlsZSk7CisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIGZkLCAwKSA8IDApIHsKKwkJY2xvc2UoZmQpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJZGllKF8oIkNvdWxkIG5vdCByZWFkICVzLiIpLCB0b2RvX2ZpbGUpOworCX0KKwljbG9zZShmZCk7CisKKwlyZXMgPSBwYXJzZV9pbnNuX2J1ZmZlcihidWYuYnVmLCB0b2RvX2xpc3QsIG9wdHMpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWlmIChyZXMpCisJCWRpZShfKCJVbnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJXMiKSwgdG9kb19maWxlKTsKK30KKworc3RhdGljIGludCBwb3B1bGF0ZV9vcHRzX2NiKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJlcGxheV9vcHRzICpvcHRzID0gZGF0YTsKKwlpbnQgZXJyb3JfZmxhZyA9IDE7CisKKwlpZiAoIXZhbHVlKQorCQllcnJvcl9mbGFnID0gMDsKKwllbHNlIGlmICghc3RyY21wKGtleSwgIm9wdGlvbnMubm8tY29tbWl0IikpCisJCW9wdHMtPm5vX2NvbW1pdCA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5lZGl0IikpCisJCW9wdHMtPmVkaXQgPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZlcnJvcl9mbGFnKTsKKwllbHNlIGlmICghc3RyY21wKGtleSwgIm9wdGlvbnMuc2lnbm9mZiIpKQorCQlvcHRzLT5zaWdub2ZmID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmZXJyb3JfZmxhZyk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLnJlY29yZC1vcmlnaW4iKSkKKwkJb3B0cy0+cmVjb3JkX29yaWdpbiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5hbGxvdy1mZiIpKQorCQlvcHRzLT5hbGxvd19mZiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5tYWlubGluZSIpKQorCQlvcHRzLT5tYWlubGluZSA9IGdpdF9jb25maWdfaW50KGtleSwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5zdHJhdGVneSIpKQorCQlnaXRfY29uZmlnX3N0cmluZygmb3B0cy0+c3RyYXRlZ3ksIGtleSwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5zdHJhdGVneS1vcHRpb24iKSkgeworCQlBTExPQ19HUk9XKG9wdHMtPnhvcHRzLCBvcHRzLT54b3B0c19uciArIDEsIG9wdHMtPnhvcHRzX2FsbG9jKTsKKwkJb3B0cy0+eG9wdHNbb3B0cy0+eG9wdHNfbnIrK10gPSB4c3RyZHVwKHZhbHVlKTsKKwl9IGVsc2UKKwkJcmV0dXJuIGVycm9yKF8oIkludmFsaWQga2V5OiAlcyIpLCBrZXkpOworCisJaWYgKCFlcnJvcl9mbGFnKQorCQlyZXR1cm4gZXJyb3IoXygiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIiksIGtleSwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcG9wdWxhdGVfb3B0cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKipvcHRzX3B0cikKK3sKKwljb25zdCBjaGFyICpvcHRzX2ZpbGUgPSBnaXRfcGF0aChTRVFfT1BUU19GSUxFKTsKKworCWlmICghZmlsZV9leGlzdHMob3B0c19maWxlKSkKKwkJcmV0dXJuOworCWlmIChnaXRfY29uZmlnX2Zyb21fZmlsZShwb3B1bGF0ZV9vcHRzX2NiLCBvcHRzX2ZpbGUsICpvcHRzX3B0cikgPCAwKQorCQlkaWUoXygiTWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICVzIiksIG9wdHNfZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdhbGtfcmV2c19wb3B1bGF0ZV90b2RvKHN0cnVjdCBjb21taXRfbGlzdCAqKnRvZG9fbGlzdCwKKwkJCQlzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqKm5leHQ7CisKKwlwcmVwYXJlX3JldnMob3B0cyk7CisKKwluZXh0ID0gdG9kb19saXN0OworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKG9wdHMtPnJldnMpKSkKKwkJbmV4dCA9IGNvbW1pdF9saXN0X2FwcGVuZChjb21taXQsIG5leHQpOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9zZXFfZGlyKHZvaWQpCit7CisJY29uc3QgY2hhciAqc2VxX2RpciA9IGdpdF9wYXRoKFNFUV9ESVIpOworCisJaWYgKGZpbGVfZXhpc3RzKHNlcV9kaXIpKSB7CisJCWVycm9yKF8oImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiKSk7CisJCWFkdmlzZShfKCJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIikpOworCQlyZXR1cm4gLTE7CisJfQorCWVsc2UgaWYgKG1rZGlyKHNlcV9kaXIsIDA3NzcpIDwgMCkKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAlcyIpLCBzZXFfZGlyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2F2ZV9oZWFkKGNvbnN0IGNoYXIgKmhlYWQpCit7CisJY29uc3QgY2hhciAqaGVhZF9maWxlID0gZ2l0X3BhdGgoU0VRX0hFQURfRklMRSk7CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgaGVhZF9sb2NrOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZkOworCisJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZoZWFkX2xvY2ssIGhlYWRfZmlsZSwgTE9DS19ESUVfT05fRVJST1IpOworCXN0cmJ1Zl9hZGRmKCZidWYsICIlc1xuIiwgaGVhZCk7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pIDwgMCkKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIpLCBoZWFkX2ZpbGUpOworCWlmIChjb21taXRfbG9ja19maWxlKCZoZWFkX2xvY2spIDwgMCkKKwkJZGllKF8oIkVycm9yIHdyYXBwaW5nIHVwICVzLiIpLCBoZWFkX2ZpbGUpOworfQorCitzdGF0aWMgaW50IHJlc2V0X2Zvcl9yb2xsYmFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNvbnN0IGNoYXIgKmFyZ3ZbNF07CS8qIHJlc2V0IC0tbWVyZ2UgPGFyZz4gKyBOVUxMICovCisJYXJndlswXSA9ICJyZXNldCI7CisJYXJndlsxXSA9ICItLW1lcmdlIjsKKwlhcmd2WzJdID0gc2hhMV90b19oZXgoc2hhMSk7CisJYXJndlszXSA9IE5VTEw7CisJcmV0dXJuIHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9HSVRfQ01EKTsKK30KKworc3RhdGljIGludCByb2xsYmFja19zaW5nbGVfcGljayh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKKworCWlmICghZmlsZV9leGlzdHMoZ2l0X3BhdGgoIkNIRVJSWV9QSUNLX0hFQUQiKSkgJiYKKwkgICAgIWZpbGVfZXhpc3RzKGdpdF9wYXRoKCJSRVZFUlRfSEVBRCIpKSkKKwkJcmV0dXJuIGVycm9yKF8oIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIpKTsKKwlpZiAocmVhZF9yZWZfZnVsbCgiSEVBRCIsIGhlYWRfc2hhMSwgMCwgTlVMTCkpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVzb2x2ZSBIRUFEIikpOworCWlmIChpc19udWxsX3NoYTEoaGVhZF9zaGExKSkKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIikpOworCXJldHVybiByZXNldF9mb3Jfcm9sbGJhY2soaGVhZF9zaGExKTsKK30KKworc3RhdGljIGludCBzZXF1ZW5jZXJfcm9sbGJhY2soc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCUZJTEUgKmY7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZmlsZW5hbWUgPSBnaXRfcGF0aChTRVFfSEVBRF9GSUxFKTsKKwlmID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJaWYgKCFmICYmIGVycm5vID09IEVOT0VOVCkgeworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBtdWx0aXBsZS1jaGVycnktcGljayBpbiBwcm9ncmVzcy4KKwkJICogSWYgQ0hFUlJZX1BJQ0tfSEVBRCBvciBSRVZFUlRfSEVBRCBpbmRpY2F0ZXMKKwkJICogYSBzaW5nbGUtY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MsIGFib3J0IHRoYXQuCisJCSAqLworCQlyZXR1cm4gcm9sbGJhY2tfc2luZ2xlX3BpY2soKTsKKwl9CisJaWYgKCFmKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IG9wZW4gJXM6ICVzIiksIGZpbGVuYW1lLAorCQkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwlpZiAoc3RyYnVmX2dldGxpbmUoJmJ1ZiwgZiwgJ1xuJykpIHsKKwkJZXJyb3IoXygiY2Fubm90IHJlYWQgJXM6ICVzIiksIGZpbGVuYW1lLCBmZXJyb3IoZikgPworCQkJc3RyZXJyb3IoZXJybm8pIDogXygidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpKTsKKwkJZmNsb3NlKGYpOworCQlnb3RvIGZhaWw7CisJfQorCWZjbG9zZShmKTsKKwlpZiAoZ2V0X3NoYTFfaGV4KGJ1Zi5idWYsIHNoYTEpIHx8IGJ1Zi5idWZbNDBdICE9ICdcMCcpIHsKKwkJZXJyb3IoXygic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IiksCisJCQlmaWxlbmFtZSk7CisJCWdvdG8gZmFpbDsKKwl9CisJaWYgKHJlc2V0X2Zvcl9yb2xsYmFjayhzaGExKSkKKwkJZ290byBmYWlsOworCXJlbW92ZV9zZXF1ZW5jZXJfc3RhdGUoKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gMDsKK2ZhaWw6CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBzYXZlX3RvZG8oc3RydWN0IGNvbW1pdF9saXN0ICp0b2RvX2xpc3QsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwljb25zdCBjaGFyICp0b2RvX2ZpbGUgPSBnaXRfcGF0aChTRVFfVE9ET19GSUxFKTsKKwlzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSB0b2RvX2xvY2s7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZmQ7CisKKwlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJnRvZG9fbG9jaywgdG9kb19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJaWYgKGZvcm1hdF90b2RvKCZidWYsIHRvZG9fbGlzdCwgb3B0cykgPCAwKQorCQlkaWUoXygiQ291bGQgbm90IGZvcm1hdCAlcy4iKSwgdG9kb19maWxlKTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLmJ1ZiwgYnVmLmxlbikgPCAwKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHdyaXRlIHRvICVzIiksIHRvZG9fZmlsZSk7CisJfQorCWlmIChjb21taXRfbG9ja19maWxlKCZ0b2RvX2xvY2spIDwgMCkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJZGllKF8oIkVycm9yIHdyYXBwaW5nIHVwICVzLiIpLCB0b2RvX2ZpbGUpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgc2F2ZV9vcHRzKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwljb25zdCBjaGFyICpvcHRzX2ZpbGUgPSBnaXRfcGF0aChTRVFfT1BUU19GSUxFKTsKKworCWlmIChvcHRzLT5ub19jb21taXQpCisJCWdpdF9jb25maWdfc2V0X2luX2ZpbGUob3B0c19maWxlLCAib3B0aW9ucy5uby1jb21taXQiLCAidHJ1ZSIpOworCWlmIChvcHRzLT5lZGl0KQorCQlnaXRfY29uZmlnX3NldF9pbl9maWxlKG9wdHNfZmlsZSwgIm9wdGlvbnMuZWRpdCIsICJ0cnVlIik7CisJaWYgKG9wdHMtPnNpZ25vZmYpCisJCWdpdF9jb25maWdfc2V0X2luX2ZpbGUob3B0c19maWxlLCAib3B0aW9ucy5zaWdub2ZmIiwgInRydWUiKTsKKwlpZiAob3B0cy0+cmVjb3JkX29yaWdpbikKKwkJZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShvcHRzX2ZpbGUsICJvcHRpb25zLnJlY29yZC1vcmlnaW4iLCAidHJ1ZSIpOworCWlmIChvcHRzLT5hbGxvd19mZikKKwkJZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShvcHRzX2ZpbGUsICJvcHRpb25zLmFsbG93LWZmIiwgInRydWUiKTsKKwlpZiAob3B0cy0+bWFpbmxpbmUpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVkIiwgb3B0cy0+bWFpbmxpbmUpOworCQlnaXRfY29uZmlnX3NldF9pbl9maWxlKG9wdHNfZmlsZSwgIm9wdGlvbnMubWFpbmxpbmUiLCBidWYuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCWlmIChvcHRzLT5zdHJhdGVneSkKKwkJZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShvcHRzX2ZpbGUsICJvcHRpb25zLnN0cmF0ZWd5Iiwgb3B0cy0+c3RyYXRlZ3kpOworCWlmIChvcHRzLT54b3B0cykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IG9wdHMtPnhvcHRzX25yOyBpKyspCisJCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKG9wdHNfZmlsZSwKKwkJCQkJCQkib3B0aW9ucy5zdHJhdGVneS1vcHRpb24iLAorCQkJCQkJCW9wdHMtPnhvcHRzW2ldLCAiXiQiLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGlja19jb21taXRzKHN0cnVjdCBjb21taXRfbGlzdCAqdG9kb19saXN0LCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjdXI7CisJaW50IHJlczsKKworCXNldGVudihHSVRfUkVGTE9HX0FDVElPTiwgYWN0aW9uX25hbWUob3B0cyksIDApOworCWlmIChvcHRzLT5hbGxvd19mZikKKwkJYXNzZXJ0KCEob3B0cy0+c2lnbm9mZiB8fCBvcHRzLT5ub19jb21taXQgfHwKKwkJCQlvcHRzLT5yZWNvcmRfb3JpZ2luIHx8IG9wdHMtPmVkaXQpKTsKKwlyZWFkX2FuZF9yZWZyZXNoX2NhY2hlKG9wdHMpOworCisJZm9yIChjdXIgPSB0b2RvX2xpc3Q7IGN1cjsgY3VyID0gY3VyLT5uZXh0KSB7CisJCXNhdmVfdG9kbyhjdXIsIG9wdHMpOworCQlyZXMgPSBkb19waWNrX2NvbW1pdChjdXItPml0ZW0sIG9wdHMpOworCQlpZiAocmVzKQorCQkJcmV0dXJuIHJlczsKKwl9CisKKwkvKgorCSAqIFNlcXVlbmNlIG9mIHBpY2tzIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseTsgY2xlYW51cCBieQorCSAqIHJlbW92aW5nIHRoZSAuZ2l0L3NlcXVlbmNlciBkaXJlY3RvcnkKKwkgKi8KKwlyZW1vdmVfc2VxdWVuY2VyX3N0YXRlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29udGludWVfc2luZ2xlX3BpY2sodm9pZCkKK3sKKwljb25zdCBjaGFyICphcmd2W10gPSB7ICJjb21taXQiLCBOVUxMIH07CisKKwlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoKCJDSEVSUllfUElDS19IRUFEIikpICYmCisJICAgICFmaWxlX2V4aXN0cyhnaXRfcGF0aCgiUkVWRVJUX0hFQUQiKSkpCisJCXJldHVybiBlcnJvcihfKCJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiKSk7CisJcmV0dXJuIHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9HSVRfQ01EKTsKK30KKworc3RhdGljIGludCBzZXF1ZW5jZXJfY29udGludWUoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqdG9kb19saXN0ID0gTlVMTDsKKworCWlmICghZmlsZV9leGlzdHMoZ2l0X3BhdGgoU0VRX1RPRE9fRklMRSkpKQorCQlyZXR1cm4gY29udGludWVfc2luZ2xlX3BpY2soKTsKKwlyZWFkX3BvcHVsYXRlX29wdHMoJm9wdHMpOworCXJlYWRfcG9wdWxhdGVfdG9kbygmdG9kb19saXN0LCBvcHRzKTsKKworCS8qIFZlcmlmeSB0aGF0IHRoZSBjb25mbGljdCBoYXMgYmVlbiByZXNvbHZlZCAqLworCWlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aCgiQ0hFUlJZX1BJQ0tfSEVBRCIpKSB8fAorCSAgICBmaWxlX2V4aXN0cyhnaXRfcGF0aCgiUkVWRVJUX0hFQUQiKSkpIHsKKwkJaW50IHJldCA9IGNvbnRpbnVlX3NpbmdsZV9waWNrKCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoaW5kZXhfZGlmZmVyc19mcm9tKCJIRUFEIiwgMCkpCisJCXJldHVybiBlcnJvcl9kaXJ0eV9pbmRleChvcHRzKTsKKwl0b2RvX2xpc3QgPSB0b2RvX2xpc3QtPm5leHQ7CisJcmV0dXJuIHBpY2tfY29tbWl0cyh0b2RvX2xpc3QsIG9wdHMpOworfQorCitzdGF0aWMgaW50IHNpbmdsZV9waWNrKHN0cnVjdCBjb21taXQgKmNtaXQsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlzZXRlbnYoR0lUX1JFRkxPR19BQ1RJT04sIGFjdGlvbl9uYW1lKG9wdHMpLCAwKTsKKwlyZXR1cm4gZG9fcGlja19jb21taXQoY21pdCwgb3B0cyk7Cit9CisKK2ludCBzZXF1ZW5jZXJfcGlja19yZXZpc2lvbnMoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqdG9kb19saXN0ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJaWYgKG9wdHMtPnN1YmNvbW1hbmQgPT0gUkVQTEFZX05PTkUpCisJCWFzc2VydChvcHRzLT5yZXZzKTsKKworCXJlYWRfYW5kX3JlZnJlc2hfY2FjaGUob3B0cyk7CisKKwkvKgorCSAqIERlY2lkZSB3aGF0IHRvIGRvIGRlcGVuZGluZyBvbiB0aGUgYXJndW1lbnRzOyBhIGZyZXNoCisJICogY2hlcnJ5LXBpY2sgc2hvdWxkIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgZnJvbSBhbiBleGlzdGluZworCSAqIG9uZSB0aGF0IGlzIGJlaW5nIGNvbnRpbnVlZAorCSAqLworCWlmIChvcHRzLT5zdWJjb21tYW5kID09IFJFUExBWV9SRU1PVkVfU1RBVEUpIHsKKwkJcmVtb3ZlX3NlcXVlbmNlcl9zdGF0ZSgpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9wdHMtPnN1YmNvbW1hbmQgPT0gUkVQTEFZX1JPTExCQUNLKQorCQlyZXR1cm4gc2VxdWVuY2VyX3JvbGxiYWNrKG9wdHMpOworCWlmIChvcHRzLT5zdWJjb21tYW5kID09IFJFUExBWV9DT05USU5VRSkKKwkJcmV0dXJuIHNlcXVlbmNlcl9jb250aW51ZShvcHRzKTsKKworCS8qCisJICogSWYgd2Ugd2VyZSBjYWxsZWQgYXMgImdpdCBjaGVycnktcGljayA8Y29tbWl0PiIsIGp1c3QKKwkgKiBjaGVycnktcGljay9yZXZlcnQgaXQsIHNldCBDSEVSUllfUElDS19IRUFEIC8KKwkgKiBSRVZFUlRfSEVBRCwgYW5kIGRvbid0IHRvdWNoIHRoZSBzZXF1ZW5jZXIgc3RhdGUuCisJICogVGhpcyBtZWFucyBpdCBpcyBwb3NzaWJsZSB0byBjaGVycnktcGljayBpbiB0aGUgbWlkZGxlCisJICogb2YgYSBjaGVycnktcGljayBzZXF1ZW5jZS4KKwkgKi8KKwlpZiAob3B0cy0+cmV2cy0+Y21kbGluZS5uciA9PSAxICYmCisJICAgIG9wdHMtPnJldnMtPmNtZGxpbmUucmV2LT53aGVuY2UgPT0gUkVWX0NNRF9SRVYgJiYKKwkgICAgb3B0cy0+cmV2cy0+bm9fd2FsayAmJgorCSAgICAhb3B0cy0+cmV2cy0+Y21kbGluZS5yZXYtPmZsYWdzKSB7CisJCXN0cnVjdCBjb21taXQgKmNtaXQ7CisJCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsob3B0cy0+cmV2cykpCisJCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisJCWNtaXQgPSBnZXRfcmV2aXNpb24ob3B0cy0+cmV2cyk7CisJCWlmICghY21pdCB8fCBnZXRfcmV2aXNpb24ob3B0cy0+cmV2cykpCisJCQlkaWUoIkJVRzogZXhwZWN0ZWQgZXhhY3RseSBvbmUgY29tbWl0IGZyb20gd2FsayIpOworCQlyZXR1cm4gc2luZ2xlX3BpY2soY21pdCwgb3B0cyk7CisJfQorCisJLyoKKwkgKiBTdGFydCBhIG5ldyBjaGVycnktcGljay8gcmV2ZXJ0IHNlcXVlbmNlOyBidXQKKwkgKiBmaXJzdCwgbWFrZSBzdXJlIHRoYXQgYW4gZXhpc3Rpbmcgb25lIGlzbid0IGluCisJICogcHJvZ3Jlc3MKKwkgKi8KKworCXdhbGtfcmV2c19wb3B1bGF0ZV90b2RvKCZ0b2RvX2xpc3QsIG9wdHMpOworCWlmIChjcmVhdGVfc2VxX2RpcigpIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChnZXRfc2hhMSgiSEVBRCIsIHNoYTEpKSB7CisJCWlmIChvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1JFVkVSVCkKKwkJCXJldHVybiBlcnJvcihfKCJDYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiKSk7CisJCXJldHVybiBlcnJvcihfKCJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiKSk7CisJfQorCXNhdmVfaGVhZChzaGExX3RvX2hleChzaGExKSk7CisJc2F2ZV9vcHRzKG9wdHMpOworCXJldHVybiBwaWNrX2NvbW1pdHModG9kb19saXN0LCBvcHRzKTsKK30KKworc3RhdGljIGludCBlbmRzX3JmYzI4MjJfZm9vdGVyKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgaWdub3JlX2Zvb3RlcikKK3sKKwlpbnQgY2g7CisJaW50IGhpdCA9IDA7CisJaW50IGksIGosIGs7CisJaW50IGxlbiA9IHNiLT5sZW4gLSBpZ25vcmVfZm9vdGVyOworCWludCBmaXJzdCA9IDE7CisJY29uc3QgY2hhciAqYnVmID0gc2ItPmJ1ZjsKKworCWZvciAoaSA9IGxlbiAtIDE7IGkgPiAwOyBpLS0pIHsKKwkJaWYgKGhpdCAmJiBidWZbaV0gPT0gJ1xuJykKKwkJCWJyZWFrOworCQloaXQgPSAoYnVmW2ldID09ICdcbicpOworCX0KKworCXdoaWxlIChpIDwgbGVuIC0gMSAmJiBidWZbaV0gPT0gJ1xuJykKKwkJaSsrOworCisJZm9yICg7IGkgPCBsZW47IGkgPSBrKSB7CisJCWZvciAoayA9IGk7IGsgPCBsZW4gJiYgYnVmW2tdICE9ICdcbic7IGsrKykKKwkJCTsgLyogZG8gbm90aGluZyAqLworCQlrKys7CisKKwkJaWYgKChidWZba10gPT0gJyAnIHx8IGJ1ZltrXSA9PSAnXHQnKSAmJiAhZmlyc3QpCisJCQljb250aW51ZTsKKworCQlmaXJzdCA9IDA7CisKKwkJZm9yIChqID0gMDsgaSArIGogPCBsZW47IGorKykgeworCQkJY2ggPSBidWZbaSArIGpdOworCQkJaWYgKGNoID09ICc6JykKKwkJCQlicmVhazsKKwkJCWlmIChpc2FsbnVtKGNoKSB8fAorCQkJICAgIChjaCA9PSAnLScpKQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgYXBwZW5kX3NpZ25vZmYoc3RydWN0IHN0cmJ1ZiAqbXNnYnVmLCBpbnQgaWdub3JlX2Zvb3RlcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNvYiA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJc3RyYnVmX2FkZHN0cigmc29iLCBzaWduX29mZl9oZWFkZXIpOworCXN0cmJ1Zl9hZGRzdHIoJnNvYiwgZm10X25hbWUoZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX05BTUUiKSwKKwkJCQlnZXRlbnYoIkdJVF9DT01NSVRURVJfRU1BSUwiKSkpOworCXN0cmJ1Zl9hZGRjaCgmc29iLCAnXG4nKTsKKwlmb3IgKGkgPSBtc2didWYtPmxlbiAtIDEgLSBpZ25vcmVfZm9vdGVyOyBpID4gMCAmJiBtc2didWYtPmJ1ZltpIC0gMV0gIT0gJ1xuJzsgaS0tKQorCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwlpZiAocHJlZml4Y21wKG1zZ2J1Zi0+YnVmICsgaSwgc29iLmJ1ZikpIHsKKwkJaWYgKCFpIHx8ICFlbmRzX3JmYzI4MjJfZm9vdGVyKG1zZ2J1ZiwgaWdub3JlX2Zvb3RlcikpCisJCQlzdHJidWZfc3BsaWNlKG1zZ2J1ZiwgbXNnYnVmLT5sZW4gLSBpZ25vcmVfZm9vdGVyLCAwLCAiXG4iLCAxKTsKKwkJc3RyYnVmX3NwbGljZShtc2didWYsIG1zZ2J1Zi0+bGVuIC0gaWdub3JlX2Zvb3RlciwgMCwgc29iLmJ1Ziwgc29iLmxlbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzb2IpOworfQpkaWZmIC0tZ2l0IGEvc2VxdWVuY2VyLmggYi9zZXF1ZW5jZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDU3ZDU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2VxdWVuY2VyLmgKQEAgLTAsMCArMSw1MyBAQAorI2lmbmRlZiBTRVFVRU5DRVJfSAorI2RlZmluZSBTRVFVRU5DRVJfSAorCisjZGVmaW5lIFNFUV9ESVIJCSJzZXF1ZW5jZXIiCisjZGVmaW5lIFNFUV9IRUFEX0ZJTEUJInNlcXVlbmNlci9oZWFkIgorI2RlZmluZSBTRVFfVE9ET19GSUxFCSJzZXF1ZW5jZXIvdG9kbyIKKyNkZWZpbmUgU0VRX09QVFNfRklMRQkic2VxdWVuY2VyL29wdHMiCisKK2VudW0gcmVwbGF5X2FjdGlvbiB7CisJUkVQTEFZX1JFVkVSVCwKKwlSRVBMQVlfUElDSworfTsKKworZW51bSByZXBsYXlfc3ViY29tbWFuZCB7CisJUkVQTEFZX05PTkUsCisJUkVQTEFZX1JFTU9WRV9TVEFURSwKKwlSRVBMQVlfQ09OVElOVUUsCisJUkVQTEFZX1JPTExCQUNLCit9OworCitzdHJ1Y3QgcmVwbGF5X29wdHMgeworCWVudW0gcmVwbGF5X2FjdGlvbiBhY3Rpb247CisJZW51bSByZXBsYXlfc3ViY29tbWFuZCBzdWJjb21tYW5kOworCisJLyogQm9vbGVhbiBvcHRpb25zICovCisJaW50IGVkaXQ7CisJaW50IHJlY29yZF9vcmlnaW47CisJaW50IG5vX2NvbW1pdDsKKwlpbnQgc2lnbm9mZjsKKwlpbnQgYWxsb3dfZmY7CisJaW50IGFsbG93X3JlcmVyZV9hdXRvOworCWludCBhbGxvd19lbXB0eTsKKwlpbnQgYWxsb3dfZW1wdHlfbWVzc2FnZTsKKwlpbnQga2VlcF9yZWR1bmRhbnRfY29tbWl0czsKKworCWludCBtYWlubGluZTsKKworCS8qIE1lcmdlIHN0cmF0ZWd5ICovCisJY29uc3QgY2hhciAqc3RyYXRlZ3k7CisJY29uc3QgY2hhciAqKnhvcHRzOworCXNpemVfdCB4b3B0c19uciwgeG9wdHNfYWxsb2M7CisKKwkvKiBPbmx5IHVzZWQgYnkgUkVQTEFZX05PTkUgKi8KKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7Cit9OworCitpbnQgc2VxdWVuY2VyX3BpY2tfcmV2aXNpb25zKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cyk7CisKK2V4dGVybiBjb25zdCBjaGFyIHNpZ25fb2ZmX2hlYWRlcltdOworCit2b2lkIGFwcGVuZF9zaWdub2ZmKHN0cnVjdCBzdHJidWYgKm1zZ2J1ZiwgaW50IGlnbm9yZV9mb290ZXIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NlcnZlci1pbmZvLmMgYi9zZXJ2ZXItaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzc0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2ZXItaW5mby5jCkBAIC0wLDAgKzEsMjQ5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisKKy8qIHJlZnMgKi8KK3N0YXRpYyBGSUxFICppbmZvX3JlZl9mcDsKKworc3RhdGljIGludCBhZGRfaW5mb19yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdChzaGExKTsKKwlpZiAoIW8pCisJCXJldHVybiAtMTsKKworCWZwcmludGYoaW5mb19yZWZfZnAsICIlcwklc1xuIiwgc2hhMV90b19oZXgoc2hhMSksIHBhdGgpOworCWlmIChvLT50eXBlID09IE9CSl9UQUcpIHsKKwkJbyA9IGRlcmVmX3RhZyhvLCBwYXRoLCAwKTsKKwkJaWYgKG8pCisJCQlmcHJpbnRmKGluZm9fcmVmX2ZwLCAiJXMJJXNee31cbiIsCisJCQkJc2hhMV90b19oZXgoby0+c2hhMSksIHBhdGgpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1cGRhdGVfaW5mb19yZWZzKGludCBmb3JjZSkKK3sKKwljaGFyICpwYXRoMCA9IGdpdF9wYXRoZHVwKCJpbmZvL3JlZnMiKTsKKwlpbnQgbGVuID0gc3RybGVuKHBhdGgwKTsKKwljaGFyICpwYXRoMSA9IHhtYWxsb2MobGVuICsgMik7CisKKwlzdHJjcHkocGF0aDEsIHBhdGgwKTsKKwlzdHJjcHkocGF0aDEgKyBsZW4sICIrIik7CisKKwlzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHBhdGgwKTsKKwlpbmZvX3JlZl9mcCA9IGZvcGVuKHBhdGgxLCAidyIpOworCWlmICghaW5mb19yZWZfZnApCisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHVwZGF0ZSAlcyIsIHBhdGgxKTsKKwlmb3JfZWFjaF9yZWYoYWRkX2luZm9fcmVmLCBOVUxMKTsKKwlmY2xvc2UoaW5mb19yZWZfZnApOworCWFkanVzdF9zaGFyZWRfcGVybShwYXRoMSk7CisJcmVuYW1lKHBhdGgxLCBwYXRoMCk7CisJZnJlZShwYXRoMCk7CisJZnJlZShwYXRoMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHBhY2tzICovCitzdGF0aWMgc3RydWN0IHBhY2tfaW5mbyB7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJaW50IG9sZF9udW07CisJaW50IG5ld19udW07CisJaW50IG5yX2FsbG9jOworCWludCBucl9oZWFkczsKKwl1bnNpZ25lZCBjaGFyICgqaGVhZClbMjBdOworfSAqKmluZm87CitzdGF0aWMgaW50IG51bV9wYWNrOworc3RhdGljIGNvbnN0IGNoYXIgKm9iamRpcjsKK3N0YXRpYyBpbnQgb2JqZGlybGVuOworCitzdGF0aWMgc3RydWN0IHBhY2tfaW5mbyAqZmluZF9wYWNrX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhY2s7IGkrKykgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGluZm9baV0tPnA7CisJCS8qIHNraXAgIi9wYWNrLyIgYWZ0ZXIgIi5naXQvb2JqZWN0cyIgKi8KKwkJaWYgKCFzdHJjbXAocC0+cGFja19uYW1lICsgb2JqZGlybGVuICsgNiwgbmFtZSkpCisJCQlyZXR1cm4gaW5mb1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJldHVybnMgbm9uLXplcm8gd2hlbiB3ZSBkZXRlY3QgdGhhdCB0aGUgaW5mbyBpbiB0aGUKKyAqIG9sZCBmaWxlIGlzIHVzZWxlc3MuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfcGFja19kZWYoY29uc3QgY2hhciAqbGluZSwgaW50IG9sZF9jbnQpCit7CisJc3RydWN0IHBhY2tfaW5mbyAqaSA9IGZpbmRfcGFja19ieV9uYW1lKGxpbmUgKyAyKTsKKwlpZiAoaSkgeworCQlpLT5vbGRfbnVtID0gb2xkX2NudDsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgeworCQkvKiBUaGUgZmlsZSBkZXNjcmliZXMgYSBwYWNrIHRoYXQgaXMgbm8gbG9uZ2VyIGhlcmUgKi8KKwkJcmV0dXJuIDE7CisJfQorfQorCisvKiBSZXR1cm5zIG5vbi16ZXJvIHdoZW4gd2UgZGV0ZWN0IHRoYXQgdGhlIGluZm8gaW4gdGhlCisgKiBvbGQgZmlsZSBpcyB1c2VsZXNzLgorICovCitzdGF0aWMgaW50IHJlYWRfcGFja19pbmZvX2ZpbGUoY29uc3QgY2hhciAqaW5mb2ZpbGUpCit7CisJRklMRSAqZnA7CisJY2hhciBsaW5lWzEwMDBdOworCWludCBvbGRfY250ID0gMDsKKworCWZwID0gZm9wZW4oaW5mb2ZpbGUsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIDE7IC8qIG5vbmV4aXN0ZW50IGlzIG5vdCBhbiBlcnJvci4gKi8KKworCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSkgeworCQlpbnQgbGVuID0gc3RybGVuKGxpbmUpOworCQlpZiAobGVuICYmIGxpbmVbbGVuLTFdID09ICdcbicpCisJCQlsaW5lWy0tbGVuXSA9IDA7CisKKwkJaWYgKCFsZW4pCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGxpbmVbMF0pIHsKKwkJY2FzZSAnUCc6IC8qIFAgbmFtZSAqLworCQkJaWYgKHBhcnNlX3BhY2tfZGVmKGxpbmUsIG9sZF9jbnQrKykpCisJCQkJZ290byBvdXRfc3RhbGU7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6IC8qIHdlIHVzZWQgdG8gZW1pdCBEIGJ1dCB0aGF0IHdhcyBtaXNndWlkZWQuICovCisJCWNhc2UgJ1QnOiAvKiB3ZSB1c2VkIHRvIGVtaXQgVCBidXQgbm9ib2R5IHVzZXMgaXQuICovCisJCQlnb3RvIG91dF9zdGFsZTsKKwkJZGVmYXVsdDoKKwkJCWVycm9yKCJ1bnJlY29nbml6ZWQ6ICVzIiwgbGluZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlmY2xvc2UoZnApOworCXJldHVybiAwOworIG91dF9zdGFsZToKKwlmY2xvc2UoZnApOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfaW5mbyhjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHBhY2tfaW5mbyAqY29uc3QgKmEgPSBhXzsKKwlzdHJ1Y3QgcGFja19pbmZvICpjb25zdCAqYiA9IGJfOworCisJaWYgKDAgPD0gKCphKS0+b2xkX251bSAmJiAwIDw9ICgqYiktPm9sZF9udW0pCisJCS8qIEtlZXAgdGhlIG9yZGVyIGluIHRoZSBvcmlnaW5hbCAqLworCQlyZXR1cm4gKCphKS0+b2xkX251bSAtICgqYiktPm9sZF9udW07CisJZWxzZSBpZiAoMCA8PSAoKmEpLT5vbGRfbnVtKQorCQkvKiBPbmx5IEEgZXhpc3RlZCBpbiB0aGUgb3JpZ2luYWwgc28gQiBpcyBvYnZpb3VzbHkgbmV3ZXIgKi8KKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKDAgPD0gKCpiKS0+b2xkX251bSkKKwkJLyogVGhlIG90aGVyIHdheSBhcm91bmQuICovCisJCXJldHVybiAxOworCisJLyogdGhlbiBpdCBkb2VzIG5vdCBtYXR0ZXIgYnV0IGF0IGxlYXN0IGtlZXAgdGhlIGNvbXBhcmlzb24gc3RhYmxlICovCisJaWYgKCgqYSktPnAgPT0gKCpiKS0+cCkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoKCphKS0+cCA8ICgqYiktPnApCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBpbml0X3BhY2tfaW5mbyhjb25zdCBjaGFyICppbmZvZmlsZSwgaW50IGZvcmNlKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCBzdGFsZTsKKwlpbnQgaSA9IDA7CisKKwlvYmpkaXIgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOworCW9iamRpcmxlbiA9IHN0cmxlbihvYmpkaXIpOworCisJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJLyogd2UgaWdub3JlIHRoaW5ncyBvbiBhbHRlcm5hdGUgcGF0aCBzaW5jZSB0aGV5IGFyZQorCQkgKiBub3QgYXZhaWxhYmxlIHRvIHRoZSBwdWxsZXJzIGluIGdlbmVyYWwuCisJCSAqLworCQlpZiAoIXAtPnBhY2tfbG9jYWwpCisJCQljb250aW51ZTsKKwkJaSsrOworCX0KKwludW1fcGFjayA9IGk7CisJaW5mbyA9IHhjYWxsb2MobnVtX3BhY2ssIHNpemVvZihzdHJ1Y3QgcGFja19pbmZvICopKTsKKwlmb3IgKGkgPSAwLCBwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKCFwLT5wYWNrX2xvY2FsKQorCQkJY29udGludWU7CisJCWluZm9baV0gPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcGFja19pbmZvKSk7CisJCWluZm9baV0tPnAgPSBwOworCQlpbmZvW2ldLT5vbGRfbnVtID0gLTE7CisJCWkrKzsKKwl9CisKKwlpZiAoaW5mb2ZpbGUgJiYgIWZvcmNlKQorCQlzdGFsZSA9IHJlYWRfcGFja19pbmZvX2ZpbGUoaW5mb2ZpbGUpOworCWVsc2UKKwkJc3RhbGUgPSAxOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWNrOyBpKyspIHsKKwkJaWYgKHN0YWxlKSB7CisJCQlpbmZvW2ldLT5vbGRfbnVtID0gLTE7CisJCQlpbmZvW2ldLT5ucl9oZWFkcyA9IDA7CisJCX0KKwl9CisKKwkvKiByZW51bWJlciB0aGVtICovCisJcXNvcnQoaW5mbywgbnVtX3BhY2ssIHNpemVvZihpbmZvWzBdKSwgY29tcGFyZV9pbmZvKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhY2s7IGkrKykKKwkJaW5mb1tpXS0+bmV3X251bSA9IGk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3BhY2tfaW5mb19maWxlKEZJTEUgKmZwKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFjazsgaSsrKQorCQlmcHJpbnRmKGZwLCAiUCAlc1xuIiwgaW5mb1tpXS0+cC0+cGFja19uYW1lICsgb2JqZGlybGVuICsgNik7CisJZnB1dGMoJ1xuJywgZnApOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9pbmZvX3BhY2tzKGludCBmb3JjZSkKK3sKKwljaGFyIGluZm9maWxlW1BBVEhfTUFYXTsKKwljaGFyIG5hbWVbUEFUSF9NQVhdOworCWludCBuYW1lbGVuOworCUZJTEUgKmZwOworCisJbmFtZWxlbiA9IHNwcmludGYoaW5mb2ZpbGUsICIlcy9pbmZvL3BhY2tzIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJc3RyY3B5KG5hbWUsIGluZm9maWxlKTsKKwlzdHJjcHkobmFtZSArIG5hbWVsZW4sICIrIik7CisKKwlpbml0X3BhY2tfaW5mbyhpbmZvZmlsZSwgZm9yY2UpOworCisJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhuYW1lKTsKKwlmcCA9IGZvcGVuKG5hbWUsICJ3Iik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIGVycm9yKCJjYW5ub3Qgb3BlbiAlcyIsIG5hbWUpOworCXdyaXRlX3BhY2tfaW5mb19maWxlKGZwKTsKKwlmY2xvc2UoZnApOworCWFkanVzdF9zaGFyZWRfcGVybShuYW1lKTsKKwlyZW5hbWUobmFtZSwgaW5mb2ZpbGUpOworCXJldHVybiAwOworfQorCisvKiBwdWJsaWMgKi8KK2ludCB1cGRhdGVfc2VydmVyX2luZm8oaW50IGZvcmNlKQoreworCS8qIFdlIHdvdWxkIGFkZCBtb3JlIGR1bWItc2VydmVyIHN1cHBvcnQgZmlsZXMgbGF0ZXIsCisJICogaW5jbHVkaW5nIGluZGV4IG9mIGF2YWlsYWJsZSBwYWNrIGZpbGVzIGFuZCB0aGVpcgorCSAqIGludGVuZGVkIGF1ZGllbmNlcy4KKwkgKi8KKwlpbnQgZXJycyA9IDA7CisKKwllcnJzID0gZXJycyB8IHVwZGF0ZV9pbmZvX3JlZnMoZm9yY2UpOworCWVycnMgPSBlcnJzIHwgdXBkYXRlX2luZm9fcGFja3MoZm9yY2UpOworCisJLyogcmVtb3ZlIGxlZnRvdmVyIHJldi1jYWNoZSBmaWxlIGlmIHRoZXJlIGlzIGFueSAqLworCXVubGlua19vcl93YXJuKGdpdF9wYXRoKCJpbmZvL3Jldi1jYWNoZSIpKTsKKworCXJldHVybiBlcnJzOworfQpkaWZmIC0tZ2l0IGEvc2V0dXAuYyBiL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExYjJmZAotLS0gL2Rldi9udWxsCisrKyBiL3NldHVwLmMKQEAgLTAsMCArMSw4MzIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorCitzdGF0aWMgaW50IGluc2lkZV9naXRfZGlyID0gLTE7CitzdGF0aWMgaW50IGluc2lkZV93b3JrX3RyZWUgPSAtMTsKKworc3RhdGljIGNoYXIgKnByZWZpeF9wYXRoX2dlbnRseShjb25zdCBjaGFyICpwcmVmaXgsIGludCBsZW4sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqb3JpZyA9IHBhdGg7CisJY2hhciAqc2FuaXRpemVkOworCWlmIChpc19hYnNvbHV0ZV9wYXRoKG9yaWcpKSB7CisJCWNvbnN0IGNoYXIgKnRlbXAgPSByZWFsX3BhdGgocGF0aCk7CisJCXNhbml0aXplZCA9IHhtYWxsb2MobGVuICsgc3RybGVuKHRlbXApICsgMSk7CisJCXN0cmNweShzYW5pdGl6ZWQsIHRlbXApOworCX0gZWxzZSB7CisJCXNhbml0aXplZCA9IHhtYWxsb2MobGVuICsgc3RybGVuKHBhdGgpICsgMSk7CisJCWlmIChsZW4pCisJCQltZW1jcHkoc2FuaXRpemVkLCBwcmVmaXgsIGxlbik7CisJCXN0cmNweShzYW5pdGl6ZWQgKyBsZW4sIHBhdGgpOworCX0KKwlpZiAobm9ybWFsaXplX3BhdGhfY29weShzYW5pdGl6ZWQsIHNhbml0aXplZCkpCisJCWdvdG8gZXJyb3Jfb3V0OworCWlmIChpc19hYnNvbHV0ZV9wYXRoKG9yaWcpKSB7CisJCXNpemVfdCByb290X2xlbiwgbGVuLCB0b3RhbDsKKwkJY29uc3QgY2hhciAqd29ya190cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKwkJaWYgKCF3b3JrX3RyZWUpCisJCQlnb3RvIGVycm9yX291dDsKKwkJbGVuID0gc3RybGVuKHdvcmtfdHJlZSk7CisJCXJvb3RfbGVuID0gb2Zmc2V0XzFzdF9jb21wb25lbnQod29ya190cmVlKTsKKwkJdG90YWwgPSBzdHJsZW4oc2FuaXRpemVkKSArIDE7CisJCWlmIChzdHJuY21wKHNhbml0aXplZCwgd29ya190cmVlLCBsZW4pIHx8CisJCSAgICAobGVuID4gcm9vdF9sZW4gJiYgc2FuaXRpemVkW2xlbl0gIT0gJ1wwJyAmJiBzYW5pdGl6ZWRbbGVuXSAhPSAnLycpKSB7CisJCWVycm9yX291dDoKKwkJCWZyZWUoc2FuaXRpemVkKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWlmIChzYW5pdGl6ZWRbbGVuXSA9PSAnLycpCisJCQlsZW4rKzsKKwkJbWVtbW92ZShzYW5pdGl6ZWQsIHNhbml0aXplZCArIGxlbiwgdG90YWwgLSBsZW4pOworCX0KKwlyZXR1cm4gc2FuaXRpemVkOworfQorCitjaGFyICpwcmVmaXhfcGF0aChjb25zdCBjaGFyICpwcmVmaXgsIGludCBsZW4sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqciA9IHByZWZpeF9wYXRoX2dlbnRseShwcmVmaXgsIGxlbiwgcGF0aCk7CisJaWYgKCFyKQorCQlkaWUoIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IiwgcGF0aCk7CisJcmV0dXJuIHI7Cit9CisKK2ludCBwYXRoX2luc2lkZV9yZXBvKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgbGVuID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCWNoYXIgKnIgPSBwcmVmaXhfcGF0aF9nZW50bHkocHJlZml4LCBsZW4sIHBhdGgpOworCWlmIChyKSB7CisJCWZyZWUocik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNoZWNrX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqYXJnKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHN0YXQgc3Q7CisKKwluYW1lID0gcHJlZml4ID8gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgc3RybGVuKHByZWZpeCksIGFyZykgOiBhcmc7CisJaWYgKCFsc3RhdChuYW1lLCAmc3QpKQorCQlyZXR1cm4gMTsgLyogZmlsZSBleGlzdHMgKi8KKwlpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpCisJCXJldHVybiAwOyAvKiBmaWxlIGRvZXMgbm90IGV4aXN0ICovCisJZGllX2Vycm5vKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiwgYXJnKTsKK30KKworc3RhdGljIHZvaWQgTk9SRVRVUk4gZGllX3ZlcmlmeV9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCSBjb25zdCBjaGFyICphcmcsCisJCQkJCSBpbnQgZGlhZ25vc2VfbWlzc3BlbHRfcmV2KQoreworCWlmICghZGlhZ25vc2VfbWlzc3BlbHRfcmV2KQorCQlkaWUoIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKwkJICAgICJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIiwKKwkJICAgIGFyZyk7CisJLyoKKwkgKiBTYXlpbmcgIicoaWNhc2UpZm9vJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5kZXgiIHdoZW4gdGhlCisJICogdXNlciBnYXZlIHVzICI6KGljYXNlKWZvbyIgaXMganVzdCBzdHVwaWQuICBBIG1hZ2ljIHBhdGhzcGVjCisJICogYmVnaW5zIHdpdGggYSBjb2xvbiBhbmQgaXMgZm9sbG93ZWQgYnkgYSBub24tYWxudW07IGRvIG5vdAorCSAqIGxldCBtYXliZV9kaWVfb25fbWlzc3BlbHRfb2JqZWN0X25hbWUoKSBldmVuIHRyaWdnZXIuCisJICovCisJaWYgKCEoYXJnWzBdID09ICc6JyAmJiAhaXNhbG51bShhcmdbMV0pKSkKKwkJbWF5YmVfZGllX29uX21pc3NwZWx0X29iamVjdF9uYW1lKGFyZywgcHJlZml4KTsKKworCS8qIC4uLiBvciBmYWxsIGJhY2sgdGhlIG1vc3QgZ2VuZXJhbCBtZXNzYWdlLiAqLworCWRpZSgiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKwkgICAgIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisJICAgICInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIiwgYXJnKTsKKworfQorCisvKgorICogVmVyaWZ5IGEgZmlsZW5hbWUgdGhhdCB3ZSBnb3QgYXMgYW4gYXJndW1lbnQgZm9yIGEgcGF0aHNwZWMKKyAqIGVudHJ5LiBOb3RlIHRoYXQgYSBmaWxlbmFtZSB0aGF0IGJlZ2lucyB3aXRoICItIiBuZXZlciB2ZXJpZmllcworICogYXMgdHJ1ZSwgYmVjYXVzZSBldmVuIGlmIHN1Y2ggYSBmaWxlbmFtZSB3ZXJlIHRvIGV4aXN0LCB3ZSB3YW50CisgKiBpdCB0byBiZSBwcmVjZWRlZCBieSB0aGUgIi0tIiBtYXJrZXIgKG9yIHdlIHdhbnQgdGhlIHVzZXIgdG8KKyAqIHVzZSBhIGZvcm1hdCBsaWtlICIuLy1maWxlbmFtZSIpCisgKgorICogVGhlICJkaWFnbm9zZV9taXNzcGVsdF9yZXYiIGlzIHVzZWQgdG8gcHJvdmlkZSBhIHVzZXItZnJpZW5kbHkKKyAqIGRpYWdub3NpcyB3aGVuIGR5aW5nIHVwb24gZmluZGluZyB0aGF0ICJuYW1lIiBpcyBub3QgYSBwYXRobmFtZS4KKyAqIElmIHNldCB0byAxLCB0aGUgZGlhZ25vc2lzIHdpbGwgdHJ5IHRvIGRpYWdub3NlICJuYW1lIiBhcyBhbgorICogaW52YWxpZCBvYmplY3QgbmFtZSAoZS5nLiBIRUFEOmZvbykuIElmIHNldCB0byAwLCB0aGUgZGlhZ25vc2lzCisgKiB3aWxsIG9ubHkgY29tcGxhaW4gYWJvdXQgYW4gaW5leGlzdGluZyBmaWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCB0byBjaGVjayB0aGF0IGEgImZpbGUgb3IgcmV2IgorICogYXJndW1lbnQgaXMgdW5hbWJpZ3VvdXMuIEluIHRoaXMgY2FzZSwgdGhlIGNhbGxlciB3aWxsIHdhbnQKKyAqIGRpYWdub3NlX21pc3NwZWx0X3JldiA9PSAxIHdoZW4gdmVyaWZ5aW5nIHRoZSBmaXJzdCBub24tcmV2CisgKiBhcmd1bWVudCAod2hpY2ggY291bGQgaGF2ZSBiZWVuIGEgcmV2aXNpb24pLCBhbmQKKyAqIGRpYWdub3NlX21pc3NwZWx0X3JldiA9PSAwIGZvciB0aGUgbmV4dCBvbmVzIChiZWNhdXNlIHdlIGFscmVhZHkKKyAqIHNhdyBhIGZpbGVuYW1lLCB0aGVyZSdzIG5vdCBhbWJpZ3VpdHkgYW55bW9yZSkuCisgKi8KK3ZvaWQgdmVyaWZ5X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgICBjb25zdCBjaGFyICphcmcsCisJCSAgICAgaW50IGRpYWdub3NlX21pc3NwZWx0X3JldikKK3sKKwlpZiAoKmFyZyA9PSAnLScpCisJCWRpZSgiYmFkIGZsYWcgJyVzJyB1c2VkIGFmdGVyIGZpbGVuYW1lIiwgYXJnKTsKKwlpZiAoY2hlY2tfZmlsZW5hbWUocHJlZml4LCBhcmcpKQorCQlyZXR1cm47CisJZGllX3ZlcmlmeV9maWxlbmFtZShwcmVmaXgsIGFyZywgZGlhZ25vc2VfbWlzc3BlbHRfcmV2KTsKK30KKworLyoKKyAqIE9wcG9zaXRlIG9mIHRoZSBhYm92ZTogdGhlIGNvbW1hbmQgbGluZSBkaWQgbm90IGhhdmUgLS0gbWFya2VyCisgKiBhbmQgd2UgcGFyc2VkIHRoZSBhcmcgYXMgYSByZWZuYW1lLiAgSXQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRhYmxlCisgKiBhcyBhIGZpbGVuYW1lLgorICovCit2b2lkIHZlcmlmeV9ub25fZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICphcmcpCit7CisJaWYgKCFpc19pbnNpZGVfd29ya190cmVlKCkgfHwgaXNfaW5zaWRlX2dpdF9kaXIoKSkKKwkJcmV0dXJuOworCWlmICgqYXJnID09ICctJykKKwkJcmV0dXJuOyAvKiBmbGFnICovCisJaWYgKCFjaGVja19maWxlbmFtZShwcmVmaXgsIGFyZykpCisJCXJldHVybjsKKwlkaWUoImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorCSAgICAiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKwkgICAgIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciLCBhcmcpOworfQorCisvKgorICogTWFnaWMgcGF0aHNwZWMKKyAqCisgKiBORUVEU1dPUks6IFRoZXNlIG5lZWQgdG8gYmUgbW92ZWQgdG8gZGlyLmggb3IgZXZlbiB0byBhIG5ldworICogcGF0aHNwZWMuaCB3aGVuIHdlIHJlc3RydWN0dXJlIGdldF9wYXRoc3BlYygpIHVzZXJzIHRvIHVzZSB0aGUKKyAqICJzdHJ1Y3QgcGF0aHNwZWMiIGludGVyZmFjZS4KKyAqCisgKiBQb3NzaWJsZSBmdXR1cmUgbWFnaWMgc2VtYW50aWNzIGluY2x1ZGUgc3R1ZmYgbGlrZToKKyAqCisgKgl7IFBBVEhTUEVDX05PR0xPQiwgJyEnLCAibm9nbG9iIiB9LAorICoJeyBQQVRIU1BFQ19JQ0FTRSwgJ1wwJywgImljYXNlIiB9LAorICoJeyBQQVRIU1BFQ19SRUNVUlNJVkUsICcqJywgInJlY3Vyc2l2ZSIgfSwKKyAqCXsgUEFUSFNQRUNfUkVHRVhQLCAnXDAnLCAicmVnZXhwIiB9LAorICoKKyAqLworI2RlZmluZSBQQVRIU1BFQ19GUk9NVE9QICAgICgxPDwwKQorCitzdGF0aWMgc3RydWN0IHBhdGhzcGVjX21hZ2ljIHsKKwl1bnNpZ25lZCBiaXQ7CisJY2hhciBtbmVtb25pYzsgLyogdGhpcyBjYW5ub3QgYmUgJzonISAqLworCWNvbnN0IGNoYXIgKm5hbWU7Cit9IHBhdGhzcGVjX21hZ2ljW10gPSB7CisJeyBQQVRIU1BFQ19GUk9NVE9QLCAnLycsICJ0b3AiIH0sCit9OworCisvKgorICogVGFrZSBhbiBlbGVtZW50IG9mIGEgcGF0aHNwZWMgYW5kIGNoZWNrIGZvciBtYWdpYyBzaWduYXR1cmVzLgorICogQXBwZW5kIHRoZSByZXN1bHQgdG8gdGhlIHByZWZpeC4KKyAqCisgKiBGb3Igbm93LCB3ZSBvbmx5IHBhcnNlIHRoZSBzeW50YXggYW5kIHRocm93IG91dCBhbnl0aGluZyBvdGhlciB0aGFuCisgKiAidG9wIiBtYWdpYy4KKyAqCisgKiBORUVEU1dPUks6IFRoaXMgbmVlZHMgdG8gYmUgcmV3cml0dGVuIHdoZW4gd2Ugc3RhcnQgbWlncmF0aW5nCisgKiBnZXRfcGF0aHNwZWMoKSB1c2VycyB0byB1c2UgdGhlICJzdHJ1Y3QgcGF0aHNwZWMiIGludGVyZmFjZS4gIEZvcgorICogZXhhbXBsZSwgYSBwYXRoc3BlYyBlbGVtZW50IG1heSBiZSBtYXJrZWQgYXMgY2FzZS1pbnNlbnNpdGl2ZSwgYnV0CisgKiB0aGUgcHJlZml4IHBhcnQgbXVzdCBhbHdheXMgbWF0Y2ggbGl0ZXJhbGx5LCBhbmQgYSBzaW5nbGUgc3R1cGlkCisgKiBzdHJpbmcgY2Fubm90IGV4cHJlc3Mgc3VjaCBhIGNhc2UuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpwcmVmaXhfcGF0aHNwZWMoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4bGVuLCBjb25zdCBjaGFyICplbHQpCit7CisJdW5zaWduZWQgbWFnaWMgPSAwOworCWNvbnN0IGNoYXIgKmNvcHlmcm9tID0gZWx0OworCWludCBpOworCisJaWYgKGVsdFswXSAhPSAnOicpIHsKKwkJOyAvKiBub3RoaW5nIHRvIGRvICovCisJfSBlbHNlIGlmIChlbHRbMV0gPT0gJygnKSB7CisJCS8qIGxvbmdoYW5kICovCisJCWNvbnN0IGNoYXIgKm5leHRhdDsKKwkJZm9yIChjb3B5ZnJvbSA9IGVsdCArIDI7CisJCSAgICAgKmNvcHlmcm9tICYmICpjb3B5ZnJvbSAhPSAnKSc7CisJCSAgICAgY29weWZyb20gPSBuZXh0YXQpIHsKKwkJCXNpemVfdCBsZW4gPSBzdHJjc3BuKGNvcHlmcm9tLCAiLCkiKTsKKwkJCWlmIChjb3B5ZnJvbVtsZW5dID09ICcpJykKKwkJCQluZXh0YXQgPSBjb3B5ZnJvbSArIGxlbjsKKwkJCWVsc2UKKwkJCQluZXh0YXQgPSBjb3B5ZnJvbSArIGxlbiArIDE7CisJCQlpZiAoIWxlbikKKwkJCQljb250aW51ZTsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhdGhzcGVjX21hZ2ljKTsgaSsrKQorCQkJCWlmIChzdHJsZW4ocGF0aHNwZWNfbWFnaWNbaV0ubmFtZSkgPT0gbGVuICYmCisJCQkJICAgICFzdHJuY21wKHBhdGhzcGVjX21hZ2ljW2ldLm5hbWUsIGNvcHlmcm9tLCBsZW4pKSB7CisJCQkJCW1hZ2ljIHw9IHBhdGhzcGVjX21hZ2ljW2ldLmJpdDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJaWYgKEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpIDw9IGkpCisJCQkJZGllKCJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIiwKKwkJCQkgICAgKGludCkgbGVuLCBjb3B5ZnJvbSwgZWx0KTsKKwkJfQorCQlpZiAoKmNvcHlmcm9tID09ICcpJykKKwkJCWNvcHlmcm9tKys7CisJfSBlbHNlIHsKKwkJLyogc2hvcnRoYW5kICovCisJCWZvciAoY29weWZyb20gPSBlbHQgKyAxOworCQkgICAgICpjb3B5ZnJvbSAmJiAqY29weWZyb20gIT0gJzonOworCQkgICAgIGNvcHlmcm9tKyspIHsKKwkJCWNoYXIgY2ggPSAqY29weWZyb207CisKKwkJCWlmICghaXNfcGF0aHNwZWNfbWFnaWMoY2gpKQorCQkJCWJyZWFrOworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpOyBpKyspCisJCQkJaWYgKHBhdGhzcGVjX21hZ2ljW2ldLm1uZW1vbmljID09IGNoKSB7CisJCQkJCW1hZ2ljIHw9IHBhdGhzcGVjX21hZ2ljW2ldLmJpdDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJaWYgKEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpIDw9IGkpCisJCQkJZGllKCJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIsCisJCQkJICAgIGNoLCBlbHQpOworCQl9CisJCWlmICgqY29weWZyb20gPT0gJzonKQorCQkJY29weWZyb20rKzsKKwl9CisKKwlpZiAobWFnaWMgJiBQQVRIU1BFQ19GUk9NVE9QKQorCQlyZXR1cm4geHN0cmR1cChjb3B5ZnJvbSk7CisJZWxzZQorCQlyZXR1cm4gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXhsZW4sIGNvcHlmcm9tKTsKK30KKworY29uc3QgY2hhciAqKmdldF9wYXRoc3BlYyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwljb25zdCBjaGFyICplbnRyeSA9ICpwYXRoc3BlYzsKKwljb25zdCBjaGFyICoqc3JjLCAqKmRzdDsKKwlpbnQgcHJlZml4bGVuOworCisJaWYgKCFwcmVmaXggJiYgIWVudHJ5KQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghZW50cnkpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKnNwZWNbMl07CisJCXNwZWNbMF0gPSBwcmVmaXg7CisJCXNwZWNbMV0gPSBOVUxMOworCQlyZXR1cm4gc3BlYzsKKwl9CisKKwkvKiBPdGhlcndpc2Ugd2UgaGF2ZSB0byByZS13cml0ZSB0aGUgZW50cmllcy4uICovCisJc3JjID0gcGF0aHNwZWM7CisJZHN0ID0gcGF0aHNwZWM7CisJcHJlZml4bGVuID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCXdoaWxlICgqc3JjKSB7CisJCSooZHN0KyspID0gcHJlZml4X3BhdGhzcGVjKHByZWZpeCwgcHJlZml4bGVuLCAqc3JjKTsKKwkJc3JjKys7CisJfQorCSpkc3QgPSBOVUxMOworCWlmICghKnBhdGhzcGVjKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcGF0aHNwZWM7Cit9CisKKy8qCisgKiBUZXN0IGlmIGl0IGxvb2tzIGxpa2Ugd2UncmUgYXQgYSBnaXQgZGlyZWN0b3J5LgorICogV2Ugd2FudCB0byBzZWU6CisgKgorICogIC0gZWl0aGVyIGFuIG9iamVjdHMvIGRpcmVjdG9yeSBfb3JfIHRoZSBwcm9wZXIKKyAqICAgIEdJVF9PQkpFQ1RfRElSRUNUT1JZIGVudmlyb25tZW50IHZhcmlhYmxlCisgKiAgLSBhIHJlZnMvIGRpcmVjdG9yeQorICogIC0gZWl0aGVyIGEgSEVBRCBzeW1saW5rIG9yIGEgSEVBRCBmaWxlIHRoYXQgaXMgZm9ybWF0dGVkIGFzCisgKiAgICBhIHByb3BlciAicmVmOiIsIG9yIGEgcmVndWxhciBmaWxlIEhFQUQgdGhhdCBoYXMgYSBwcm9wZXJseQorICogICAgZm9ybWF0dGVkIHNoYTEgb2JqZWN0IG5hbWUuCisgKi8KK2ludCBpc19naXRfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnN1c3BlY3QpCit7CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwlzaXplX3QgbGVuID0gc3RybGVuKHN1c3BlY3QpOworCisJaWYgKFBBVEhfTUFYIDw9IGxlbiArIHN0cmxlbigiL29iamVjdHMiKSkKKwkJZGllKCJUb28gbG9uZyBwYXRoOiAlLipzIiwgNjAsIHN1c3BlY3QpOworCXN0cmNweShwYXRoLCBzdXNwZWN0KTsKKwlpZiAoZ2V0ZW52KERCX0VOVklST05NRU5UKSkgeworCQlpZiAoYWNjZXNzKGdldGVudihEQl9FTlZJUk9OTUVOVCksIFhfT0spKQorCQkJcmV0dXJuIDA7CisJfQorCWVsc2UgeworCQlzdHJjcHkocGF0aCArIGxlbiwgIi9vYmplY3RzIik7CisJCWlmIChhY2Nlc3MocGF0aCwgWF9PSykpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlzdHJjcHkocGF0aCArIGxlbiwgIi9yZWZzIik7CisJaWYgKGFjY2VzcyhwYXRoLCBYX09LKSkKKwkJcmV0dXJuIDA7CisKKwlzdHJjcHkocGF0aCArIGxlbiwgIi9IRUFEIik7CisJaWYgKHZhbGlkYXRlX2hlYWRyZWYocGF0aCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBpc19pbnNpZGVfZ2l0X2Rpcih2b2lkKQoreworCWlmIChpbnNpZGVfZ2l0X2RpciA8IDApCisJCWluc2lkZV9naXRfZGlyID0gaXNfaW5zaWRlX2RpcihnZXRfZ2l0X2RpcigpKTsKKwlyZXR1cm4gaW5zaWRlX2dpdF9kaXI7Cit9CisKK2ludCBpc19pbnNpZGVfd29ya190cmVlKHZvaWQpCit7CisJaWYgKGluc2lkZV93b3JrX3RyZWUgPCAwKQorCQlpbnNpZGVfd29ya190cmVlID0gaXNfaW5zaWRlX2RpcihnZXRfZ2l0X3dvcmtfdHJlZSgpKTsKKwlyZXR1cm4gaW5zaWRlX3dvcmtfdHJlZTsKK30KKwordm9pZCBzZXR1cF93b3JrX3RyZWUodm9pZCkKK3sKKwljb25zdCBjaGFyICp3b3JrX3RyZWUsICpnaXRfZGlyOworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCisJaWYgKGluaXRpYWxpemVkKQorCQlyZXR1cm47CisJd29ya190cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKwlnaXRfZGlyID0gZ2V0X2dpdF9kaXIoKTsKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgoZ2l0X2RpcikpCisJCWdpdF9kaXIgPSByZWFsX3BhdGgoZ2V0X2dpdF9kaXIoKSk7CisJaWYgKCF3b3JrX3RyZWUgfHwgY2hkaXIod29ya190cmVlKSkKKwkJZGllKCJUaGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgc3Vic2VxdWVudCBnaXQgcHJvY2Vzc2VzIGZpbmQgY29ycmVjdCB3b3JrdHJlZQorCSAqIGlmICRHSVRfV09SS19UUkVFIGlzIHNldCByZWxhdGl2ZQorCSAqLworCWlmIChnZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCkpCisJCXNldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5ULCAiLiIsIDEpOworCisJc2V0X2dpdF9kaXIocmVsYXRpdmVfcGF0aChnaXRfZGlyLCB3b3JrX3RyZWUpKTsKKwlpbml0aWFsaXplZCA9IDE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfZ2VudGx5KGNvbnN0IGNoYXIgKmdpdGRpciwgaW50ICpub25naXRfb2spCit7CisJY2hhciByZXBvX2NvbmZpZ1tQQVRIX01BWCsxXTsKKworCS8qCisJICogZ2l0X2NvbmZpZygpIGNhbid0IGJlIHVzZWQgaGVyZSBiZWNhdXNlIGl0IGNhbGxzIGdpdF9wYXRoZHVwKCkKKwkgKiB0byBnZXQgJEdJVF9DT05GSUcvY29uZmlnLiBUaGF0IGNhbGwgd2lsbCBtYWtlIHNldHVwX2dpdF9lbnYoKQorCSAqIHNldCBnaXRfZGlyIHRvICIuZ2l0Ii4KKwkgKgorCSAqIFdlIGFyZSBpbiBnaXRkaXIgc2V0dXAsIG5vIGdpdCBkaXIgaGFzIGJlZW4gZm91bmQgdXNlYWJsZSB5ZXQuCisJICogVXNlIGEgZ2VudGxlciB2ZXJzaW9uIG9mIGdpdF9jb25maWcoKSB0byBjaGVjayBpZiB0aGlzIHJlcG8KKwkgKiBpcyBhIGdvb2Qgb25lLgorCSAqLworCXNucHJpbnRmKHJlcG9fY29uZmlnLCBQQVRIX01BWCwgIiVzL2NvbmZpZyIsIGdpdGRpcik7CisJZ2l0X2NvbmZpZ19lYXJseShjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uLCBOVUxMLCByZXBvX2NvbmZpZyk7CisJaWYgKEdJVF9SRVBPX1ZFUlNJT04gPCByZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uKSB7CisJCWlmICghbm9uZ2l0X29rKQorCQkJZGllICgiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiLAorCQkJICAgICBHSVRfUkVQT19WRVJTSU9OLCByZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uKTsKKwkJd2FybmluZygiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiLAorCQkJR0lUX1JFUE9fVkVSU0lPTiwgcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbik7CisJCXdhcm5pbmcoIlBsZWFzZSB1cGdyYWRlIEdpdCIpOworCQkqbm9uZ2l0X29rID0gLTE7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUcnkgdG8gcmVhZCB0aGUgbG9jYXRpb24gb2YgdGhlIGdpdCBkaXJlY3RvcnkgZnJvbSB0aGUgLmdpdCBmaWxlLAorICogcmV0dXJuIHBhdGggdG8gZ2l0IGRpcmVjdG9yeSBpZiBmb3VuZC4KKyAqLworY29uc3QgY2hhciAqcmVhZF9naXRmaWxlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqYnVmOworCWNoYXIgKmRpcjsKKwljb25zdCBjaGFyICpzbGFzaDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgZmQ7CisJc3NpemVfdCBsZW47CisKKwlpZiAoc3RhdChwYXRoLCAmc3QpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybiBOVUxMOworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKCJFcnJvciBvcGVuaW5nICclcyciLCBwYXRoKTsKKwlidWYgPSB4bWFsbG9jKHN0LnN0X3NpemUgKyAxKTsKKwlsZW4gPSByZWFkX2luX2Z1bGwoZmQsIGJ1Ziwgc3Quc3Rfc2l6ZSk7CisJY2xvc2UoZmQpOworCWlmIChsZW4gIT0gc3Quc3Rfc2l6ZSkKKwkJZGllKCJFcnJvciByZWFkaW5nICVzIiwgcGF0aCk7CisJYnVmW2xlbl0gPSAnXDAnOworCWlmIChwcmVmaXhjbXAoYnVmLCAiZ2l0ZGlyOiAiKSkKKwkJZGllKCJJbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIsIHBhdGgpOworCXdoaWxlIChidWZbbGVuIC0gMV0gPT0gJ1xuJyB8fCBidWZbbGVuIC0gMV0gPT0gJ1xyJykKKwkJbGVuLS07CisJaWYgKGxlbiA8IDkpCisJCWRpZSgiTm8gcGF0aCBpbiBnaXRmaWxlOiAlcyIsIHBhdGgpOworCWJ1ZltsZW5dID0gJ1wwJzsKKwlkaXIgPSBidWYgKyA4OworCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGRpcikgJiYgKHNsYXNoID0gc3RycmNocihwYXRoLCAnLycpKSkgeworCQlzaXplX3QgcGF0aGxlbiA9IHNsYXNoKzEgLSBwYXRoOworCQlzaXplX3QgZGlybGVuID0gcGF0aGxlbiArIGxlbiAtIDg7CisJCWRpciA9IHhtYWxsb2MoZGlybGVuICsgMSk7CisJCXN0cm5jcHkoZGlyLCBwYXRoLCBwYXRobGVuKTsKKwkJc3RybmNweShkaXIgKyBwYXRobGVuLCBidWYgKyA4LCBsZW4gLSA4KTsKKwkJZGlyW2Rpcmxlbl0gPSAnXDAnOworCQlmcmVlKGJ1Zik7CisJCWJ1ZiA9IGRpcjsKKwl9CisKKwlpZiAoIWlzX2dpdF9kaXJlY3RvcnkoZGlyKSkKKwkJZGllKCJOb3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiLCBkaXIpOworCXBhdGggPSByZWFsX3BhdGgoZGlyKTsKKworCWZyZWUoYnVmKTsKKwlyZXR1cm4gcGF0aDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2V4cGxpY2l0X2dpdF9kaXIoY29uc3QgY2hhciAqZ2l0ZGlyZW52LAorCQkJCQkgIGNoYXIgKmN3ZCwgaW50IGxlbiwKKwkJCQkJICBpbnQgKm5vbmdpdF9vaykKK3sKKwljb25zdCBjaGFyICp3b3JrX3RyZWVfZW52ID0gZ2V0ZW52KEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQpOworCWNvbnN0IGNoYXIgKndvcmt0cmVlOworCWNoYXIgKmdpdGZpbGU7CisJaW50IG9mZnNldDsKKworCWlmIChQQVRIX01BWCAtIDQwIDwgc3RybGVuKGdpdGRpcmVudikpCisJCWRpZSgiJyQlcycgdG9vIGJpZyIsIEdJVF9ESVJfRU5WSVJPTk1FTlQpOworCisJZ2l0ZmlsZSA9IChjaGFyKilyZWFkX2dpdGZpbGUoZ2l0ZGlyZW52KTsKKwlpZiAoZ2l0ZmlsZSkgeworCQlnaXRmaWxlID0geHN0cmR1cChnaXRmaWxlKTsKKwkJZ2l0ZGlyZW52ID0gZ2l0ZmlsZTsKKwl9CisKKwlpZiAoIWlzX2dpdF9kaXJlY3RvcnkoZ2l0ZGlyZW52KSkgeworCQlpZiAobm9uZ2l0X29rKSB7CisJCQkqbm9uZ2l0X29rID0gMTsKKwkJCWZyZWUoZ2l0ZmlsZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlkaWUoIk5vdCBhIGdpdCByZXBvc2l0b3J5OiAnJXMnIiwgZ2l0ZGlyZW52KTsKKwl9CisKKwlpZiAoY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfZ2VudGx5KGdpdGRpcmVudiwgbm9uZ2l0X29rKSkgeworCQlmcmVlKGdpdGZpbGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiAjMywgIzcsICMxMSwgIzE1LCAjMTksICMyMywgIzI3LCAjMzEgKHNlZSB0MTUxMCkgKi8KKwlpZiAod29ya190cmVlX2VudikKKwkJc2V0X2dpdF93b3JrX3RyZWUod29ya190cmVlX2Vudik7CisJZWxzZSBpZiAoaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA+IDApIHsKKwkJaWYgKGdpdF93b3JrX3RyZWVfY2ZnKSAvKiAjMjIuMiwgIzMwICovCisJCQlkaWUoImNvcmUuYmFyZSBhbmQgY29yZS53b3JrdHJlZSBkbyBub3QgbWFrZSBzZW5zZSIpOworCisJCS8qICMxOCwgIzI2ICovCisJCXNldF9naXRfZGlyKGdpdGRpcmVudik7CisJCWZyZWUoZ2l0ZmlsZSk7CisJCXJldHVybiBOVUxMOworCX0KKwllbHNlIGlmIChnaXRfd29ya190cmVlX2NmZykgeyAvKiAjNiwgIzE0ICovCisJCWlmIChpc19hYnNvbHV0ZV9wYXRoKGdpdF93b3JrX3RyZWVfY2ZnKSkKKwkJCXNldF9naXRfd29ya190cmVlKGdpdF93b3JrX3RyZWVfY2ZnKTsKKwkJZWxzZSB7CisJCQljaGFyIGNvcmVfd29ya3RyZWVbUEFUSF9NQVhdOworCQkJaWYgKGNoZGlyKGdpdGRpcmVudikpCisJCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgY2hkaXIgdG8gJyVzJyIsIGdpdGRpcmVudik7CisJCQlpZiAoY2hkaXIoZ2l0X3dvcmtfdHJlZV9jZmcpKQorCQkJCWRpZV9lcnJubygiQ291bGQgbm90IGNoZGlyIHRvICclcyciLCBnaXRfd29ya190cmVlX2NmZyk7CisJCQlpZiAoIWdldGN3ZChjb3JlX3dvcmt0cmVlLCBQQVRIX01BWCkpCisJCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgZ2V0IGRpcmVjdG9yeSAnJXMnIiwgZ2l0X3dvcmtfdHJlZV9jZmcpOworCQkJaWYgKGNoZGlyKGN3ZCkpCisJCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgY29tZSBiYWNrIHRvIGN3ZCIpOworCQkJc2V0X2dpdF93b3JrX3RyZWUoY29yZV93b3JrdHJlZSk7CisJCX0KKwl9CisJZWxzZSAvKiAjMiwgIzEwICovCisJCXNldF9naXRfd29ya190cmVlKCIuIik7CisKKwkvKiBzZXRfZ2l0X3dvcmtfdHJlZSgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBieSBub3cgKi8KKwl3b3JrdHJlZSA9IGdldF9naXRfd29ya190cmVlKCk7CisKKwkvKiBib3RoIGdldF9naXRfd29ya190cmVlKCkgYW5kIGN3ZCBhcmUgYWxyZWFkeSBub3JtYWxpemVkICovCisJaWYgKCFzdHJjbXAoY3dkLCB3b3JrdHJlZSkpIHsgLyogY3dkID09IHdvcmt0cmVlICovCisJCXNldF9naXRfZGlyKGdpdGRpcmVudik7CisJCWZyZWUoZ2l0ZmlsZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCW9mZnNldCA9IGRpcl9pbnNpZGVfb2YoY3dkLCB3b3JrdHJlZSk7CisJaWYgKG9mZnNldCA+PSAwKSB7CS8qIGN3ZCBpbnNpZGUgd29ya3RyZWU/ICovCisJCXNldF9naXRfZGlyKHJlYWxfcGF0aChnaXRkaXJlbnYpKTsKKwkJaWYgKGNoZGlyKHdvcmt0cmVlKSkKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IGNoZGlyIHRvICclcyciLCB3b3JrdHJlZSk7CisJCWN3ZFtsZW4rK10gPSAnLyc7CisJCWN3ZFtsZW5dID0gJ1wwJzsKKwkJZnJlZShnaXRmaWxlKTsKKwkJcmV0dXJuIGN3ZCArIG9mZnNldDsKKwl9CisKKwkvKiBjd2Qgb3V0c2lkZSB3b3JrdHJlZSAqLworCXNldF9naXRfZGlyKGdpdGRpcmVudik7CisJZnJlZShnaXRmaWxlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2Rpc2NvdmVyZWRfZ2l0X2Rpcihjb25zdCBjaGFyICpnaXRkaXIsCisJCQkJCSAgICBjaGFyICpjd2QsIGludCBvZmZzZXQsIGludCBsZW4sCisJCQkJCSAgICBpbnQgKm5vbmdpdF9vaykKK3sKKwlpZiAoY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfZ2VudGx5KGdpdGRpciwgbm9uZ2l0X29rKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiAtLXdvcmstdHJlZSBpcyBzZXQgd2l0aG91dCAtLWdpdC1kaXI7IHVzZSBkaXNjb3ZlcmVkIG9uZSAqLworCWlmIChnZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCkgfHwgZ2l0X3dvcmtfdHJlZV9jZmcpIHsKKwkJaWYgKG9mZnNldCAhPSBsZW4gJiYgIWlzX2Fic29sdXRlX3BhdGgoZ2l0ZGlyKSkKKwkJCWdpdGRpciA9IHhzdHJkdXAocmVhbF9wYXRoKGdpdGRpcikpOworCQlpZiAoY2hkaXIoY3dkKSkKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IGNvbWUgYmFjayB0byBjd2QiKTsKKwkJcmV0dXJuIHNldHVwX2V4cGxpY2l0X2dpdF9kaXIoZ2l0ZGlyLCBjd2QsIGxlbiwgbm9uZ2l0X29rKTsKKwl9CisKKwkvKiAjMTYuMiwgIzE3LjIsICMyMC4yLCAjMjEuMiwgIzI0LCAjMjUsICMyOCwgIzI5IChzZWUgdDE1MTApICovCisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPiAwKSB7CisJCXNldF9naXRfZGlyKG9mZnNldCA9PSBsZW4gPyBnaXRkaXIgOiByZWFsX3BhdGgoZ2l0ZGlyKSk7CisJCWlmIChjaGRpcihjd2QpKQorCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgY29tZSBiYWNrIHRvIGN3ZCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiAjMCwgIzEsICM1LCAjOCwgIzksICMxMiwgIzEzICovCisJc2V0X2dpdF93b3JrX3RyZWUoIi4iKTsKKwlpZiAoc3RyY21wKGdpdGRpciwgREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKSkKKwkJc2V0X2dpdF9kaXIoZ2l0ZGlyKTsKKwlpbnNpZGVfZ2l0X2RpciA9IDA7CisJaW5zaWRlX3dvcmtfdHJlZSA9IDE7CisJaWYgKG9mZnNldCA9PSBsZW4pCisJCXJldHVybiBOVUxMOworCisJLyogTWFrZSAib2Zmc2V0IiBwb2ludCB0byBwYXN0IHRoZSAnLycsIGFuZCBhZGQgYSAnLycgYXQgdGhlIGVuZCAqLworCW9mZnNldCsrOworCWN3ZFtsZW4rK10gPSAnLyc7CisJY3dkW2xlbl0gPSAwOworCXJldHVybiBjd2QgKyBvZmZzZXQ7Cit9CisKKy8qICMxNi4xLCAjMTcuMSwgIzIwLjEsICMyMS4xLCAjMjIuMSAoc2VlIHQxNTEwKSAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2JhcmVfZ2l0X2RpcihjaGFyICpjd2QsIGludCBvZmZzZXQsIGludCBsZW4sIGludCAqbm9uZ2l0X29rKQoreworCWludCByb290X2xlbjsKKworCWlmIChjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF9nZW50bHkoIi4iLCBub25naXRfb2spKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIC0td29yay10cmVlIGlzIHNldCB3aXRob3V0IC0tZ2l0LWRpcjsgdXNlIGRpc2NvdmVyZWQgb25lICovCisJaWYgKGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKSB8fCBnaXRfd29ya190cmVlX2NmZykgeworCQljb25zdCBjaGFyICpnaXRkaXI7CisKKwkJZ2l0ZGlyID0gb2Zmc2V0ID09IGxlbiA/ICIuIiA6IHhtZW1kdXB6KGN3ZCwgb2Zmc2V0KTsKKwkJaWYgKGNoZGlyKGN3ZCkpCisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBjb21lIGJhY2sgdG8gY3dkIik7CisJCXJldHVybiBzZXR1cF9leHBsaWNpdF9naXRfZGlyKGdpdGRpciwgY3dkLCBsZW4sIG5vbmdpdF9vayk7CisJfQorCisJaW5zaWRlX2dpdF9kaXIgPSAxOworCWluc2lkZV93b3JrX3RyZWUgPSAwOworCWlmIChvZmZzZXQgIT0gbGVuKSB7CisJCWlmIChjaGRpcihjd2QpKQorCQkJZGllX2Vycm5vKCJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpOworCQlyb290X2xlbiA9IG9mZnNldF8xc3RfY29tcG9uZW50KGN3ZCk7CisJCWN3ZFtvZmZzZXQgPiByb290X2xlbiA/IG9mZnNldCA6IHJvb3RfbGVuXSA9ICdcMCc7CisJCXNldF9naXRfZGlyKGN3ZCk7CisJfQorCWVsc2UKKwkJc2V0X2dpdF9kaXIoIi4iKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX25vbmdpdChjb25zdCBjaGFyICpjd2QsIGludCAqbm9uZ2l0X29rKQoreworCWlmICghbm9uZ2l0X29rKQorCQlkaWUoIk5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIiwgREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKTsKKwlpZiAoY2hkaXIoY3dkKSkKKwkJZGllX2Vycm5vKCJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpOworCSpub25naXRfb2sgPSAxOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgZGV2X3QgZ2V0X2RldmljZV9vcl9kaWUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbikKK3sKKwlzdHJ1Y3Qgc3RhdCBidWY7CisJaWYgKHN0YXQocGF0aCwgJmJ1ZikpIHsKKwkJZGllX2Vycm5vKCJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciLAorCQkJCXByZWZpeF9sZW4sCisJCQkJcHJlZml4ID8gcHJlZml4IDogIiIsCisJCQkJcHJlZml4ID8gIi8iIDogIiIsIHBhdGgpOworCX0KKwlyZXR1cm4gYnVmLnN0X2RldjsKK30KKworLyoKKyAqIFdlIGNhbm5vdCBkZWNpZGUgaW4gdGhpcyBmdW5jdGlvbiB3aGV0aGVyIHdlIGFyZSBpbiB0aGUgd29yayB0cmVlIG9yCisgKiBub3QsIHNpbmNlIHRoZSBjb25maWcgY2FuIG9ubHkgYmUgcmVhZCBfYWZ0ZXJfIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5XzEoaW50ICpub25naXRfb2spCit7CisJY29uc3QgY2hhciAqZW52X2NlaWxpbmdfZGlycyA9IGdldGVudihDRUlMSU5HX0RJUkVDVE9SSUVTX0VOVklST05NRU5UKTsKKwlzdGF0aWMgY2hhciBjd2RbUEFUSF9NQVgrMV07CisJY29uc3QgY2hhciAqZ2l0ZGlyZW52LCAqcmV0OworCWNoYXIgKmdpdGZpbGU7CisJaW50IGxlbiwgb2Zmc2V0LCBvZmZzZXRfcGFyZW50LCBjZWlsX29mZnNldDsKKwlkZXZfdCBjdXJyZW50X2RldmljZSA9IDA7CisJaW50IG9uZV9maWxlc3lzdGVtID0gMTsKKworCS8qCisJICogTGV0J3MgYXNzdW1lIHRoYXQgd2UgYXJlIGluIGEgZ2l0IHJlcG9zaXRvcnkuCisJICogSWYgaXQgdHVybnMgb3V0IGxhdGVyIHRoYXQgd2UgYXJlIHNvbWV3aGVyZSBlbHNlLCB0aGUgdmFsdWUgd2lsbCBiZQorCSAqIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisJICovCisJaWYgKG5vbmdpdF9vaykKKwkJKm5vbmdpdF9vayA9IDA7CisKKwlpZiAoIWdldGN3ZChjd2QsIHNpemVvZihjd2QpLTEpKQorCQlkaWVfZXJybm8oIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKwlvZmZzZXQgPSBsZW4gPSBzdHJsZW4oY3dkKTsKKworCS8qCisJICogSWYgR0lUX0RJUiBpcyBzZXQgZXhwbGljaXRseSwgd2UncmUgbm90IGdvaW5nCisJICogdG8gZG8gYW55IGRpc2NvdmVyeSwgYnV0IHdlIHN0aWxsIGRvIHJlcG9zaXRvcnkKKwkgKiB2YWxpZGF0aW9uLgorCSAqLworCWdpdGRpcmVudiA9IGdldGVudihHSVRfRElSX0VOVklST05NRU5UKTsKKwlpZiAoZ2l0ZGlyZW52KQorCQlyZXR1cm4gc2V0dXBfZXhwbGljaXRfZ2l0X2RpcihnaXRkaXJlbnYsIGN3ZCwgbGVuLCBub25naXRfb2spOworCisJY2VpbF9vZmZzZXQgPSBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aChjd2QsIGVudl9jZWlsaW5nX2RpcnMpOworCWlmIChjZWlsX29mZnNldCA8IDAgJiYgaGFzX2Rvc19kcml2ZV9wcmVmaXgoY3dkKSkKKwkJY2VpbF9vZmZzZXQgPSAxOworCisJLyoKKwkgKiBUZXN0IGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgKHJlbGF0aXZlIHRvIHRoZSBjd2QpOgorCSAqIC0gLmdpdCAoZmlsZSBjb250YWluaW5nICJnaXRkaXI6IDxwYXRoPiIpCisJICogLSAuZ2l0LworCSAqIC0gLi8gKGJhcmUpCisJICogLSAuLi8uZ2l0CisJICogLSAuLi8uZ2l0LworCSAqIC0gLi4vIChiYXJlKQorCSAqIC0gLi4vLi4vLmdpdC8KKwkgKiAgIGV0Yy4KKwkgKi8KKwlvbmVfZmlsZXN5c3RlbSA9ICFnaXRfZW52X2Jvb2woIkdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0iLCAwKTsKKwlpZiAob25lX2ZpbGVzeXN0ZW0pCisJCWN1cnJlbnRfZGV2aWNlID0gZ2V0X2RldmljZV9vcl9kaWUoIi4iLCBOVUxMLCAwKTsKKwlmb3IgKDs7KSB7CisJCWdpdGZpbGUgPSAoY2hhciopcmVhZF9naXRmaWxlKERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJCWlmIChnaXRmaWxlKQorCQkJZ2l0ZGlyZW52ID0gZ2l0ZmlsZSA9IHhzdHJkdXAoZ2l0ZmlsZSk7CisJCWVsc2UgeworCQkJaWYgKGlzX2dpdF9kaXJlY3RvcnkoREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKSkKKwkJCQlnaXRkaXJlbnYgPSBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQ7CisJCX0KKworCQlpZiAoZ2l0ZGlyZW52KSB7CisJCQlyZXQgPSBzZXR1cF9kaXNjb3ZlcmVkX2dpdF9kaXIoZ2l0ZGlyZW52LAorCQkJCQkJICAgICAgIGN3ZCwgb2Zmc2V0LCBsZW4sCisJCQkJCQkgICAgICAgbm9uZ2l0X29rKTsKKwkJCWZyZWUoZ2l0ZmlsZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWZyZWUoZ2l0ZmlsZSk7CisKKwkJaWYgKGlzX2dpdF9kaXJlY3RvcnkoIi4iKSkKKwkJCXJldHVybiBzZXR1cF9iYXJlX2dpdF9kaXIoY3dkLCBvZmZzZXQsIGxlbiwgbm9uZ2l0X29rKTsKKworCQlvZmZzZXRfcGFyZW50ID0gb2Zmc2V0OworCQl3aGlsZSAoLS1vZmZzZXRfcGFyZW50ID4gY2VpbF9vZmZzZXQgJiYgY3dkW29mZnNldF9wYXJlbnRdICE9ICcvJyk7CisJCWlmIChvZmZzZXRfcGFyZW50IDw9IGNlaWxfb2Zmc2V0KQorCQkJcmV0dXJuIHNldHVwX25vbmdpdChjd2QsIG5vbmdpdF9vayk7CisJCWlmIChvbmVfZmlsZXN5c3RlbSkgeworCQkJZGV2X3QgcGFyZW50X2RldmljZSA9IGdldF9kZXZpY2Vfb3JfZGllKCIuLiIsIGN3ZCwgb2Zmc2V0KTsKKwkJCWlmIChwYXJlbnRfZGV2aWNlICE9IGN1cnJlbnRfZGV2aWNlKSB7CisJCQkJaWYgKG5vbmdpdF9vaykgeworCQkJCQlpZiAoY2hkaXIoY3dkKSkKKwkJCQkJCWRpZV9lcnJubygiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiKTsKKwkJCQkJKm5vbmdpdF9vayA9IDE7CisJCQkJCXJldHVybiBOVUxMOworCQkJCX0KKwkJCQljd2Rbb2Zmc2V0XSA9ICdcMCc7CisJCQkJZGllKCJOb3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludCAlcylcbiIKKwkJCQkiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iLCBjd2QpOworCQkJfQorCQl9CisJCWlmIChjaGRpcigiLi4iKSkgeworCQkJY3dkW29mZnNldF0gPSAnXDAnOworCQkJZGllX2Vycm5vKCJDYW5ub3QgY2hhbmdlIHRvICclcy8uLiciLCBjd2QpOworCQl9CisJCW9mZnNldCA9IG9mZnNldF9wYXJlbnQ7CisJfQorfQorCitjb25zdCBjaGFyICpzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseShpbnQgKm5vbmdpdF9vaykKK3sKKwljb25zdCBjaGFyICpwcmVmaXg7CisKKwlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseV8xKG5vbmdpdF9vayk7CisJaWYgKHByZWZpeCkKKwkJc2V0ZW52KCJHSVRfUFJFRklYIiwgcHJlZml4LCAxKTsKKwllbHNlCisJCXNldGVudigiR0lUX1BSRUZJWCIsICIiLCAxKTsKKworCWlmIChzdGFydHVwX2luZm8pIHsKKwkJc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkgPSAhbm9uZ2l0X29rIHx8ICEqbm9uZ2l0X29rOworCQlzdGFydHVwX2luZm8tPnByZWZpeCA9IHByZWZpeDsKKwl9CisJcmV0dXJuIHByZWZpeDsKK30KKworaW50IGdpdF9jb25maWdfcGVybShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBpOworCWNoYXIgKmVuZHB0cjsKKworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gUEVSTV9HUk9VUDsKKworCWlmICghc3RyY21wKHZhbHVlLCAidW1hc2siKSkKKwkJcmV0dXJuIFBFUk1fVU1BU0s7CisJaWYgKCFzdHJjbXAodmFsdWUsICJncm91cCIpKQorCQlyZXR1cm4gUEVSTV9HUk9VUDsKKwlpZiAoIXN0cmNtcCh2YWx1ZSwgImFsbCIpIHx8CisJICAgICFzdHJjbXAodmFsdWUsICJ3b3JsZCIpIHx8CisJICAgICFzdHJjbXAodmFsdWUsICJldmVyeWJvZHkiKSkKKwkJcmV0dXJuIFBFUk1fRVZFUllCT0RZOworCisJLyogUGFyc2Ugb2N0YWwgbnVtYmVycyAqLworCWkgPSBzdHJ0b2wodmFsdWUsICZlbmRwdHIsIDgpOworCisJLyogSWYgbm90IGFuIG9jdGFsIG51bWJlciwgbWF5YmUgdHJ1ZS9mYWxzZT8gKi8KKwlpZiAoKmVuZHB0ciAhPSAwKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpID8gUEVSTV9HUk9VUCA6IFBFUk1fVU1BU0s7CisKKwkvKgorCSAqIFRyZWF0IHZhbHVlcyAwLCAxIGFuZCAyIGFzIGNvbXBhdGliaWxpdHkgY2FzZXMsIG90aGVyd2lzZSBpdCBpcworCSAqIGEgY2htb2QgdmFsdWUgdG8gcmVzdHJpY3QgdG8uCisJICovCisJc3dpdGNoIChpKSB7CisJY2FzZSBQRVJNX1VNQVNLOiAgICAgICAgICAgICAgIC8qIDAgKi8KKwkJcmV0dXJuIFBFUk1fVU1BU0s7CisJY2FzZSBPTERfUEVSTV9HUk9VUDogICAgICAgICAgIC8qIDEgKi8KKwkJcmV0dXJuIFBFUk1fR1JPVVA7CisJY2FzZSBPTERfUEVSTV9FVkVSWUJPRFk6ICAgICAgIC8qIDIgKi8KKwkJcmV0dXJuIFBFUk1fRVZFUllCT0RZOworCX0KKworCS8qIEEgZmlsZW1vZGUgdmFsdWUgd2FzIGdpdmVuOiAweHh4ICovCisKKwlpZiAoKGkgJiAwNjAwKSAhPSAwNjAwKQorCQlkaWUoIlByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgIgorCQkgICAgIigwJS4zbykuXG5UaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSAiCisJCSAgICAicmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIiwgaSk7CisKKwkvKgorCSAqIE1hc2sgZmlsZW1vZGUgdmFsdWUuIE90aGVycyBjYW4gbm90IGdldCB3cml0ZSBwZXJtaXNzaW9uLgorCSAqIHggZmxhZ3MgZm9yIGRpcmVjdG9yaWVzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisJICovCisJcmV0dXJuIC0oaSAmIDA2NjYpOworfQorCitpbnQgY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoc3RyY21wKHZhciwgImNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24iKSA9PSAwKQorCQlyZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJZWxzZSBpZiAoc3RyY21wKHZhciwgImNvcmUuc2hhcmVkcmVwb3NpdG9yeSIpID09IDApCisJCXNoYXJlZF9yZXBvc2l0b3J5ID0gZ2l0X2NvbmZpZ19wZXJtKHZhciwgdmFsdWUpOworCWVsc2UgaWYgKHN0cmNtcCh2YXIsICJjb3JlLmJhcmUiKSA9PSAwKSB7CisJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCWlmIChpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID09IDEpCisJCQlpbnNpZGVfd29ya190cmVlID0gLTE7CisJfSBlbHNlIGlmIChzdHJjbXAodmFyLCAiY29yZS53b3JrdHJlZSIpID09IDApIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlmcmVlKGdpdF93b3JrX3RyZWVfY2ZnKTsKKwkJZ2l0X3dvcmtfdHJlZV9jZmcgPSB4c3RyZHVwKHZhbHVlKTsKKwkJaW5zaWRlX3dvcmtfdHJlZSA9IC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0KHZvaWQpCit7CisJcmV0dXJuIGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X2dlbnRseShnZXRfZ2l0X2RpcigpLCBOVUxMKTsKK30KKworLyoKKyAqIFJldHVybnMgdGhlICJwcmVmaXgiLCBhIHBhdGggdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAqIHJlbGF0aXZlIHRvIHRoZSB3b3JrIHRyZWUgcm9vdCwgb3IgTlVMTCwgaWYgdGhlIGN1cnJlbnQgd29ya2luZworICogZGlyZWN0b3J5IGlzIG5vdCBhIHN0cmljdCBzdWJkaXJlY3Rvcnkgb2YgdGhlIHdvcmsgdHJlZSByb290LiBUaGUKKyAqIHByZWZpeCBhbHdheXMgZW5kcyB3aXRoIGEgJy8nIGNoYXJhY3Rlci4KKyAqLworY29uc3QgY2hhciAqc2V0dXBfZ2l0X2RpcmVjdG9yeSh2b2lkKQoreworCXJldHVybiBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseShOVUxMKTsKK30KKworY29uc3QgY2hhciAqcmVzb2x2ZV9naXRkaXIoY29uc3QgY2hhciAqc3VzcGVjdCkKK3sKKwlpZiAoaXNfZ2l0X2RpcmVjdG9yeShzdXNwZWN0KSkKKwkJcmV0dXJuIHN1c3BlY3Q7CisJcmV0dXJuIHJlYWRfZ2l0ZmlsZShzdXNwZWN0KTsKK30KZGlmZiAtLWdpdCBhL3NoLWkxOG4tLWVudnN1YnN0LmMgYi9zaC1pMThuLS1lbnZzdWJzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZGQ2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9zaC1pMThuLS1lbnZzdWJzdC5jCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogc2gtaTE4bi0tZW52c3Vic3QuYyAtIGEgc3RyaXBwZWQtZG93biB2ZXJzaW9uIG9mIGdldHRleHQncyBlbnZzdWJzdCgxKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorICoKKyAqIFRoaXMgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mCisgKiA2N2QwODcxYThjOmdldHRleHQtcnVudGltZS9zcmMvZW52c3Vic3QuYyBmcm9tIHRoZSBnZXR0ZXh0LmdpdAorICogcmVwb3NpdG9yeS4gSXQgaGFzIGJlZW4gc3RyaXBwZWQgZG93biB0byBvbmx5IGltcGxlbWVudCB0aGUKKyAqIGVudnN1YnN0KDEpIGZlYXR1cmVzIHRoYXQgd2UgbmVlZCBpbiB0aGUgZ2l0LXNoLWkxOG4gZmFsbGJhY2tzLgorICoKKyAqIFRoZSAiQ2xvc2Ugc3RhbmRhcmQgZXJyb3IiIHBhcnQgaW4gbWFpbigpIGlzIGZyb20KKyAqIDhkYWMwMzNkZjA6Z251bGliLWxvY2FsL2xpYi9jbG9zZW91dC5jLiBUaGUgY29weXJpZ2h0IG5vdGljZXMgZm9yCisgKiBib3RoIGZpbGVzIGFyZSByZXByb2R1Y2VkIGltbWVkaWF0ZWx5IGJlbG93LgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworLyogU3Vic3RpdHV0aW9uIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBzaGVsbCBmb3JtYXQgc3RyaW5ncy4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBjbG9zZW91dC5jIC0gY2xvc2Ugc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvcgorICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBJZiB0cnVlLCBzdWJzdGl0dXRpb24gc2hhbGwgYmUgcGVyZm9ybWVkIG9uIGFsbCB2YXJpYWJsZXMuICAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBhbGxfdmFyaWFibGVzOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGxvY2FsIGZ1bmN0aW9ucy4gICovCitzdGF0aWMgdm9pZCBwcmludF92YXJpYWJsZXMgKGNvbnN0IGNoYXIgKnN0cmluZyk7CitzdGF0aWMgdm9pZCBub3RlX3ZhcmlhYmxlcyAoY29uc3QgY2hhciAqc3RyaW5nKTsKK3N0YXRpYyB2b2lkIHN1YnN0X2Zyb21fc3RkaW4gKHZvaWQpOworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIC8qIERlZmF1bHQgdmFsdWVzIGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucy4gICovCisgIC8qIHVuc2lnbmVkIHNob3J0IGludCBzaG93X3ZhcmlhYmxlcyA9IDA7ICovCisKKyAgc3dpdGNoIChhcmdjKQorCXsKKwljYXNlIDE6CisJICBlcnJvciAoIndlIHdvbid0IHN1YnN0aXR1dGUgYWxsIHZhcmlhYmxlcyBvbiBzdGRpbiBmb3IgeW91Iik7CisJICBicmVhazsKKwkgIC8qCisJICBhbGxfdmFyaWFibGVzID0gMTsKKyAgICAgIHN1YnN0X2Zyb21fc3RkaW4gKCk7CisJICAqLworCWNhc2UgMjoKKwkgIC8qIGVjaG8gJyRmb28gYW5kICRiYXInIHwgZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICckZm9vIGFuZCAkYmFyJyAqLworCSAgYWxsX3ZhcmlhYmxlcyA9IDA7CisJICBub3RlX3ZhcmlhYmxlcyAoYXJndlsxXSk7CisgICAgICBzdWJzdF9mcm9tX3N0ZGluICgpOworCSAgYnJlYWs7CisJY2FzZSAzOgorCSAgLyogZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICckZm9vIGFuZCAkYmFyJyAqLworCSAgaWYgKHN0cmNtcChhcmd2WzFdLCAiLS12YXJpYWJsZXMiKSkKKwkJZXJyb3IgKCJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIC0tdmFyaWFibGVzIHdoZW4gdHdvIGFyZSBnaXZlbiIpOworCSAgLyogc2hvd192YXJpYWJsZXMgPSAxOyAqLworICAgICAgcHJpbnRfdmFyaWFibGVzIChhcmd2WzJdKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBlcnJvciAoInRvbyBtYW55IGFyZ3VtZW50cyIpOworCSAgYnJlYWs7CisJfQorCisgIC8qIENsb3NlIHN0YW5kYXJkIGVycm9yLiAgVGhpcyBpcyBzaW1wbGVyIHRoYW4gZndyaXRlZXJyb3Jfbm9fZWJhZGYsIGJlY2F1c2UKKyAgICAgdXBvbiBmYWlsdXJlIHdlIGRvbid0IG5lZWQgYW4gZXJybm8gLSBhbGwgd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgaXMgdG8KKyAgICAgc2V0IGFuIGV4aXQgc3RhdHVzLiAgKi8KKyAgZXJybm8gPSAwOworICBpZiAoZmVycm9yIChzdGRlcnIpIHx8IGZmbHVzaCAoc3RkZXJyKSkKKyAgICB7CisgICAgICBmY2xvc2UgKHN0ZGVycik7CisgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgaWYgKGZjbG9zZSAoc3RkZXJyKSAmJiBlcnJubyAhPSBFQkFERikKKyAgICBleGl0IChFWElUX0ZBSUxVUkUpOworCisgIGV4aXQgKEVYSVRfU1VDQ0VTUyk7Cit9CisKKy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIGludm9rZSB0aGUgY2FsbGJhY2sgZWFjaCB0aW1lIGEgJFZBUklBQkxFIG9yCisgICAke1ZBUklBQkxFfSBjb25zdHJ1Y3QgaXMgc2Vlbiwgd2hlcmUgVkFSSUFCTEUgaXMgYSBub25lbXB0eSBzZXF1ZW5jZQorICAgb2YgQVNDSUkgYWxwaGFudW1lcmljL3VuZGVyc2NvcmUgY2hhcmFjdGVycywgc3RhcnRpbmcgd2l0aCBhbiBBU0NJSQorICAgYWxwaGFiZXRpYy91bmRlcnNjb3JlIGNoYXJhY3Rlci4KKyAgIFdlIGFsbG93IG9ubHkgQVNDSUkgY2hhcmFjdGVycywgdG8gYXZvaWQgZGVwZW5kZW5jaWVzIHcuci50LiB0aGUgY3VycmVudAorICAgZW5jb2Rpbmc6IFdoaWxlICIke1x4ZTB9IiBsb29rcyBsaWtlIGEgdmFyaWFibGUgYWNjZXNzIGluIElTTy04ODU5LTEKKyAgIGVuY29kaW5nLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBvbmUgaW4gdGhlIEJJRzUsIEJJRzUtSEtTQ1MsIEdCSywgR0IxODAzMCwKKyAgIFNISUZUX0pJUywgSk9IQUIgZW5jb2RpbmdzLCBiZWNhdXNlIFx4ZTBceDdkIGlzIGEgc2luZ2xlIGNoYXJhY3RlciBpbiB0aGVzZQorICAgZW5jb2RpbmdzLiAgKi8KK3N0YXRpYyB2b2lkCitmaW5kX3ZhcmlhYmxlcyAoY29uc3QgY2hhciAqc3RyaW5nLAorCQl2b2lkICgqY2FsbGJhY2spIChjb25zdCBjaGFyICp2YXJfcHRyLCBzaXplX3QgdmFyX2xlbikpCit7CisgIGZvciAoOyAqc3RyaW5nICE9ICdcMCc7KQorICAgIGlmICgqc3RyaW5nKysgPT0gJyQnKQorICAgICAgeworCWNvbnN0IGNoYXIgKnZhcmlhYmxlX3N0YXJ0OworCWNvbnN0IGNoYXIgKnZhcmlhYmxlX2VuZDsKKwl1bnNpZ25lZCBzaG9ydCBpbnQgdmFsaWQ7CisJY2hhciBjOworCisJaWYgKCpzdHJpbmcgPT0gJ3snKQorCSAgc3RyaW5nKys7CisKKwl2YXJpYWJsZV9zdGFydCA9IHN0cmluZzsKKwljID0gKnN0cmluZzsKKwlpZiAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IGMgPT0gJ18nKQorCSAgeworCSAgICBkbworCSAgICAgIGMgPSAqKytzdHJpbmc7CisJICAgIHdoaWxlICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6JykKKwkJICAgfHwgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fCBjID09ICdfJyk7CisJICAgIHZhcmlhYmxlX2VuZCA9IHN0cmluZzsKKworCSAgICBpZiAodmFyaWFibGVfc3RhcnRbLTFdID09ICd7JykKKwkgICAgICB7CisJCWlmICgqc3RyaW5nID09ICd9JykKKwkJICB7CisJCSAgICBzdHJpbmcrKzsKKwkJICAgIHZhbGlkID0gMTsKKwkJICB9CisJCWVsc2UKKwkJICB2YWxpZCA9IDA7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgdmFsaWQgPSAxOworCisJICAgIGlmICh2YWxpZCkKKwkgICAgICBjYWxsYmFjayAodmFyaWFibGVfc3RhcnQsIHZhcmlhYmxlX2VuZCAtIHZhcmlhYmxlX3N0YXJ0KTsKKwkgIH0KKyAgICAgIH0KK30KKworCisvKiBQcmludCBhIHZhcmlhYmxlIHRvIHN0ZG91dCwgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLiAgKi8KK3N0YXRpYyB2b2lkCitwcmludF92YXJpYWJsZSAoY29uc3QgY2hhciAqdmFyX3B0ciwgc2l6ZV90IHZhcl9sZW4pCit7CisgIGZ3cml0ZSAodmFyX3B0ciwgdmFyX2xlbiwgMSwgc3Rkb3V0KTsKKyAgcHV0Y2hhciAoJ1xuJyk7Cit9CisKKy8qIFByaW50IHRoZSB2YXJpYWJsZXMgY29udGFpbmVkIGluIFNUUklORyB0byBzdGRvdXQsIGVhY2ggb25lIGZvbGxvd2VkIGJ5IGEKKyAgIG5ld2xpbmUuICAqLworc3RhdGljIHZvaWQKK3ByaW50X3ZhcmlhYmxlcyAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICBmaW5kX3ZhcmlhYmxlcyAoc3RyaW5nLCAmcHJpbnRfdmFyaWFibGUpOworfQorCisKKy8qIFR5cGUgZGVzY3JpYmluZyBsaXN0IG9mIGltbXV0YWJsZSBzdHJpbmdzLAorICAgaW1wbGVtZW50ZWQgdXNpbmcgYSBkeW5hbWljIGFycmF5LiAgKi8KK3R5cGVkZWYgc3RydWN0IHN0cmluZ19saXN0X3R5IHN0cmluZ19saXN0X3R5Oworc3RydWN0IHN0cmluZ19saXN0X3R5Cit7CisgIGNvbnN0IGNoYXIgKippdGVtOworICBzaXplX3Qgbml0ZW1zOworICBzaXplX3Qgbml0ZW1zX21heDsKK307CisKKy8qIEluaXRpYWxpemUgYW4gZW1wdHkgbGlzdCBvZiBzdHJpbmdzLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc3RyaW5nX2xpc3RfaW5pdCAoc3RyaW5nX2xpc3RfdHkgKnNscCkKK3sKKyAgc2xwLT5pdGVtID0gTlVMTDsKKyAgc2xwLT5uaXRlbXMgPSAwOworICBzbHAtPm5pdGVtc19tYXggPSAwOworfQorCisvKiBBcHBlbmQgYSBzaW5nbGUgc3RyaW5nIHRvIHRoZSBlbmQgb2YgYSBsaXN0IG9mIHN0cmluZ3MuICAqLworc3RhdGljIGlubGluZSB2b2lkCitzdHJpbmdfbGlzdF9hcHBlbmQgKHN0cmluZ19saXN0X3R5ICpzbHAsIGNvbnN0IGNoYXIgKnMpCit7CisgIC8qIEdyb3cgdGhlIGxpc3QuICAqLworICBpZiAoc2xwLT5uaXRlbXMgPj0gc2xwLT5uaXRlbXNfbWF4KQorICAgIHsKKyAgICAgIHNpemVfdCBuYnl0ZXM7CisKKyAgICAgIHNscC0+bml0ZW1zX21heCA9IHNscC0+bml0ZW1zX21heCAqIDIgKyA0OworICAgICAgbmJ5dGVzID0gc2xwLT5uaXRlbXNfbWF4ICogc2l6ZW9mIChzbHAtPml0ZW1bMF0pOworICAgICAgc2xwLT5pdGVtID0gKGNvbnN0IGNoYXIgKiopIHhyZWFsbG9jIChzbHAtPml0ZW0sIG5ieXRlcyk7CisgICAgfQorCisgIC8qIEFkZCB0aGUgc3RyaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuICAqLworICBzbHAtPml0ZW1bc2xwLT5uaXRlbXMrK10gPSBzOworfQorCisvKiBDb21wYXJlIHR3byBzdHJpbmdzIGdpdmVuIGJ5IHJlZmVyZW5jZS4gICovCitzdGF0aWMgaW50CitjbXBfc3RyaW5nIChjb25zdCB2b2lkICpwc3RyMSwgY29uc3Qgdm9pZCAqcHN0cjIpCit7CisgIGNvbnN0IGNoYXIgKnN0cjEgPSAqKGNvbnN0IGNoYXIgKiopcHN0cjE7CisgIGNvbnN0IGNoYXIgKnN0cjIgPSAqKGNvbnN0IGNoYXIgKiopcHN0cjI7CisKKyAgcmV0dXJuIHN0cmNtcCAoc3RyMSwgc3RyMik7Cit9CisKKy8qIFNvcnQgYSBsaXN0IG9mIHN0cmluZ3MuICAqLworc3RhdGljIGlubGluZSB2b2lkCitzdHJpbmdfbGlzdF9zb3J0IChzdHJpbmdfbGlzdF90eSAqc2xwKQoreworICBpZiAoc2xwLT5uaXRlbXMgPiAwKQorICAgIHFzb3J0IChzbHAtPml0ZW0sIHNscC0+bml0ZW1zLCBzaXplb2YgKHNscC0+aXRlbVswXSksIGNtcF9zdHJpbmcpOworfQorCisvKiBUZXN0IHdoZXRoZXIgYSBzdHJpbmcgbGlzdCBjb250YWlucyBhIGdpdmVuIHN0cmluZy4gICovCitzdGF0aWMgaW5saW5lIGludAorc3RyaW5nX2xpc3RfbWVtYmVyIChjb25zdCBzdHJpbmdfbGlzdF90eSAqc2xwLCBjb25zdCBjaGFyICpzKQoreworICBzaXplX3QgajsKKworICBmb3IgKGogPSAwOyBqIDwgc2xwLT5uaXRlbXM7ICsraikKKyAgICBpZiAoc3RyY21wIChzbHAtPml0ZW1bal0sIHMpID09IDApCisgICAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFRlc3Qgd2hldGhlciBhIHNvcnRlZCBzdHJpbmcgbGlzdCBjb250YWlucyBhIGdpdmVuIHN0cmluZy4gICovCitzdGF0aWMgaW50Citzb3J0ZWRfc3RyaW5nX2xpc3RfbWVtYmVyIChjb25zdCBzdHJpbmdfbGlzdF90eSAqc2xwLCBjb25zdCBjaGFyICpzKQoreworICBzaXplX3QgajEsIGoyOworCisgIGoxID0gMDsKKyAgajIgPSBzbHAtPm5pdGVtczsKKyAgaWYgKGoyID4gMCkKKyAgICB7CisgICAgICAvKiBCaW5hcnkgc2VhcmNoLiAgKi8KKyAgICAgIHdoaWxlIChqMiAtIGoxID4gMSkKKwl7CisJICAvKiBIZXJlIHdlIGtub3cgdGhhdCBpZiBzIGlzIGluIHRoZSBsaXN0LCBpdCBpcyBhdCBhbiBpbmRleCBqCisJICAgICB3aXRoIGoxIDw9IGogPCBqMi4gICovCisJICBzaXplX3QgaiA9IChqMSArIGoyKSA+PiAxOworCSAgaW50IHJlc3VsdCA9IHN0cmNtcCAoc2xwLT5pdGVtW2pdLCBzKTsKKworCSAgaWYgKHJlc3VsdCA+IDApCisJICAgIGoyID0gajsKKwkgIGVsc2UgaWYgKHJlc3VsdCA9PSAwKQorCSAgICByZXR1cm4gMTsKKwkgIGVsc2UKKwkgICAgajEgPSBqICsgMTsKKwl9CisgICAgICBpZiAoajIgPiBqMSkKKwlpZiAoc3RyY21wIChzbHAtPml0ZW1bajFdLCBzKSA9PSAwKQorCSAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworCisvKiBTZXQgb2YgdmFyaWFibGVzIG9uIHdoaWNoIHRvIHBlcmZvcm0gc3Vic3RpdHV0aW9uLgorICAgVXNlZCBvbmx5IGlmICFhbGxfdmFyaWFibGVzLiAgKi8KK3N0YXRpYyBzdHJpbmdfbGlzdF90eSB2YXJpYWJsZXNfc2V0OworCisvKiBBZGRzIGEgdmFyaWFibGUgdG8gdmFyaWFibGVzX3NldC4gICovCitzdGF0aWMgdm9pZAorbm90ZV92YXJpYWJsZSAoY29uc3QgY2hhciAqdmFyX3B0ciwgc2l6ZV90IHZhcl9sZW4pCit7CisgIGNoYXIgKnN0cmluZyA9IHhtYWxsb2MgKHZhcl9sZW4gKyAxKTsKKyAgbWVtY3B5IChzdHJpbmcsIHZhcl9wdHIsIHZhcl9sZW4pOworICBzdHJpbmdbdmFyX2xlbl0gPSAnXDAnOworCisgIHN0cmluZ19saXN0X2FwcGVuZCAoJnZhcmlhYmxlc19zZXQsIHN0cmluZyk7Cit9CisKKy8qIFN0b3JlcyB0aGUgdmFyaWFibGVzIG9jY3VycmluZyBpbiB0aGUgc3RyaW5nIGluIHZhcmlhYmxlc19zZXQuICAqLworc3RhdGljIHZvaWQKK25vdGVfdmFyaWFibGVzIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHN0cmluZ19saXN0X2luaXQgKCZ2YXJpYWJsZXNfc2V0KTsKKyAgZmluZF92YXJpYWJsZXMgKHN0cmluZywgJm5vdGVfdmFyaWFibGUpOworICBzdHJpbmdfbGlzdF9zb3J0ICgmdmFyaWFibGVzX3NldCk7Cit9CisKKworc3RhdGljIGludAorZG9fZ2V0YyAodm9pZCkKK3sKKyAgaW50IGMgPSBnZXRjIChzdGRpbik7CisKKyAgaWYgKGMgPT0gRU9GKQorICAgIHsKKyAgICAgIGlmIChmZXJyb3IgKHN0ZGluKSkKKwllcnJvciAoImVycm9yIHdoaWxlIHJlYWRpbmcgc3RhbmRhcmQgaW5wdXQiKTsKKyAgICB9CisKKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG9fdW5nZXRjIChpbnQgYykKK3sKKyAgaWYgKGMgIT0gRU9GKQorICAgIHVuZ2V0YyAoYywgc3RkaW4pOworfQorCisvKiBDb3BpZXMgc3RkaW4gdG8gc3Rkb3V0LCBwZXJmb3JtaW5nIHN1YnN0aXR1dGlvbnMuICAqLworc3RhdGljIHZvaWQKK3N1YnN0X2Zyb21fc3RkaW4gKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyICpidWZmZXI7CisgIHN0YXRpYyBzaXplX3QgYnVmbWF4OworICBzdGF0aWMgc2l6ZV90IGJ1ZmxlbjsKKyAgaW50IGM7CisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBjID0gZG9fZ2V0YyAoKTsKKyAgICAgIGlmIChjID09IEVPRikKKwlicmVhazsKKyAgICAgIC8qIExvb2sgZm9yICRWQVJJQUJMRSBvciAke1ZBUklBQkxFfS4gICovCisgICAgICBpZiAoYyA9PSAnJCcpCisJeworCSAgdW5zaWduZWQgc2hvcnQgaW50IG9wZW5pbmdfYnJhY2UgPSAwOworCSAgdW5zaWduZWQgc2hvcnQgaW50IGNsb3NpbmdfYnJhY2UgPSAwOworCisJICBjID0gZG9fZ2V0YyAoKTsKKwkgIGlmIChjID09ICd7JykKKwkgICAgeworCSAgICAgIG9wZW5pbmdfYnJhY2UgPSAxOworCSAgICAgIGMgPSBkb19nZXRjICgpOworCSAgICB9CisJICBpZiAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IGMgPT0gJ18nKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgc2hvcnQgaW50IHZhbGlkOworCisJICAgICAgLyogQWNjdW11bGF0ZSB0aGUgVkFSSUFCTEUgaW4gYnVmZmVyLiAgKi8KKwkgICAgICBidWZsZW4gPSAwOworCSAgICAgIGRvCisJCXsKKwkJICBpZiAoYnVmbGVuID49IGJ1Zm1heCkKKwkJICAgIHsKKwkJICAgICAgYnVmbWF4ID0gMiAqIGJ1Zm1heCArIDEwOworCQkgICAgICBidWZmZXIgPSB4cmVhbGxvYyAoYnVmZmVyLCBidWZtYXgpOworCQkgICAgfQorCQkgIGJ1ZmZlcltidWZsZW4rK10gPSBjOworCisJCSAgYyA9IGRvX2dldGMgKCk7CisJCX0KKwkgICAgICB3aGlsZSAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpCisJCSAgICAgfHwgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fCBjID09ICdfJyk7CisKKwkgICAgICBpZiAob3BlbmluZ19icmFjZSkKKwkJeworCQkgIGlmIChjID09ICd9JykKKwkJICAgIHsKKwkJICAgICAgY2xvc2luZ19icmFjZSA9IDE7CisJCSAgICAgIHZhbGlkID0gMTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIHZhbGlkID0gMDsKKwkJICAgICAgZG9fdW5nZXRjIChjKTsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHZhbGlkID0gMTsKKwkJICBkb191bmdldGMgKGMpOworCQl9CisKKwkgICAgICBpZiAodmFsaWQpCisJCXsKKwkJICAvKiBUZXJtaW5hdGUgdGhlIHZhcmlhYmxlIGluIHRoZSBidWZmZXIuICAqLworCQkgIGlmIChidWZsZW4gPj0gYnVmbWF4KQorCQkgICAgeworCQkgICAgICBidWZtYXggPSAyICogYnVmbWF4ICsgMTA7CisJCSAgICAgIGJ1ZmZlciA9IHhyZWFsbG9jIChidWZmZXIsIGJ1Zm1heCk7CisJCSAgICB9CisJCSAgYnVmZmVyW2J1Zmxlbl0gPSAnXDAnOworCisJCSAgLyogVGVzdCB3aGV0aGVyIHRoZSB2YXJpYWJsZSBzaGFsbCBiZSBzdWJzdGl0dXRlZC4gICovCisJCSAgaWYgKCFhbGxfdmFyaWFibGVzCisJCSAgICAgICYmICFzb3J0ZWRfc3RyaW5nX2xpc3RfbWVtYmVyICgmdmFyaWFibGVzX3NldCwgYnVmZmVyKSkKKwkJICAgIHZhbGlkID0gMDsKKwkJfQorCisJICAgICAgaWYgKHZhbGlkKQorCQl7CisJCSAgLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBmcm9tIHRoZSBlbnZpcm9ubWVudC4gICovCisJCSAgY29uc3QgY2hhciAqZW52X3ZhbHVlID0gZ2V0ZW52IChidWZmZXIpOworCisJCSAgaWYgKGVudl92YWx1ZSAhPSBOVUxMKQorCQkgICAgZnB1dHMgKGVudl92YWx1ZSwgc3Rkb3V0KTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8qIFBlcmZvcm0gbm8gc3Vic3RpdHV0aW9uIGF0IGFsbC4gIFNpbmNlIHRoZSBidWZmZXJlZCBpbnB1dAorCQkgICAgIGNvbnRhaW5zIG5vIG90aGVyICckJyB0aGFuIGF0IHRoZSBzdGFydCwgd2UgY2FuIGp1c3QKKwkJICAgICBvdXRwdXQgYWxsIHRoZSBidWZmZXJlZCBjb250ZW50cy4gICovCisJCSAgcHV0Y2hhciAoJyQnKTsKKwkJICBpZiAob3BlbmluZ19icmFjZSkKKwkJICAgIHB1dGNoYXIgKCd7Jyk7CisJCSAgZndyaXRlIChidWZmZXIsIGJ1ZmxlbiwgMSwgc3Rkb3V0KTsKKwkJICBpZiAoY2xvc2luZ19icmFjZSkKKwkJICAgIHB1dGNoYXIgKCd9Jyk7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgZG9fdW5nZXRjIChjKTsKKwkgICAgICBwdXRjaGFyICgnJCcpOworCSAgICAgIGlmIChvcGVuaW5nX2JyYWNlKQorCQlwdXRjaGFyICgneycpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXB1dGNoYXIgKGMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NoYTEtYXJyYXkuYyBiL3NoYTEtYXJyYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjRhMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhMS1hcnJheS5jCkBAIC0wLDAgKzEsNTkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorCit2b2lkIHNoYTFfYXJyYXlfYXBwZW5kKHN0cnVjdCBzaGExX2FycmF5ICphcnJheSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlBTExPQ19HUk9XKGFycmF5LT5zaGExLCBhcnJheS0+bnIgKyAxLCBhcnJheS0+YWxsb2MpOworCWhhc2hjcHkoYXJyYXktPnNoYTFbYXJyYXktPm5yKytdLCBzaGExKTsKKwlhcnJheS0+c29ydGVkID0gMDsKK30KKworc3RhdGljIGludCB2b2lkX2hhc2hjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlyZXR1cm4gaGFzaGNtcChhLCBiKTsKK30KKworc3RhdGljIHZvaWQgc2hhMV9hcnJheV9zb3J0KHN0cnVjdCBzaGExX2FycmF5ICphcnJheSkKK3sKKwlxc29ydChhcnJheS0+c2hhMSwgYXJyYXktPm5yLCBzaXplb2YoKmFycmF5LT5zaGExKSwgdm9pZF9oYXNoY21wKTsKKwlhcnJheS0+c29ydGVkID0gMTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTFfYWNjZXNzKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpCit7CisJdW5zaWduZWQgY2hhciAoKmFycmF5KVsyMF0gPSB0YWJsZTsKKwlyZXR1cm4gYXJyYXlbaW5kZXhdOworfQorCitpbnQgc2hhMV9hcnJheV9sb29rdXAoc3RydWN0IHNoYTFfYXJyYXkgKmFycmF5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWlmICghYXJyYXktPnNvcnRlZCkKKwkJc2hhMV9hcnJheV9zb3J0KGFycmF5KTsKKwlyZXR1cm4gc2hhMV9wb3Moc2hhMSwgYXJyYXktPnNoYTEsIGFycmF5LT5uciwgc2hhMV9hY2Nlc3MpOworfQorCit2b2lkIHNoYTFfYXJyYXlfY2xlYXIoc3RydWN0IHNoYTFfYXJyYXkgKmFycmF5KQoreworCWZyZWUoYXJyYXktPnNoYTEpOworCWFycmF5LT5zaGExID0gTlVMTDsKKwlhcnJheS0+bnIgPSAwOworCWFycmF5LT5hbGxvYyA9IDA7CisJYXJyYXktPnNvcnRlZCA9IDA7Cit9CisKK3ZvaWQgc2hhMV9hcnJheV9mb3JfZWFjaF91bmlxdWUoc3RydWN0IHNoYTFfYXJyYXkgKmFycmF5LAorCQkJCWZvcl9lYWNoX3NoYTFfZm4gZm4sCisJCQkJdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKworCWlmICghYXJyYXktPnNvcnRlZCkKKwkJc2hhMV9hcnJheV9zb3J0KGFycmF5KTsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnI7IGkrKykgeworCQlpZiAoaSA+IDAgJiYgIWhhc2hjbXAoYXJyYXktPnNoYTFbaV0sIGFycmF5LT5zaGExW2ktMV0pKQorCQkJY29udGludWU7CisJCWZuKGFycmF5LT5zaGExW2ldLCBkYXRhKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zaGExLWFycmF5LmggYi9zaGExLWFycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiYjMzYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYTEtYXJyYXkuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIFNIQTFfQVJSQVlfSAorI2RlZmluZSBTSEExX0FSUkFZX0gKKworc3RydWN0IHNoYTFfYXJyYXkgeworCXVuc2lnbmVkIGNoYXIgKCpzaGExKVsyMF07CisJaW50IG5yOworCWludCBhbGxvYzsKKwlpbnQgc29ydGVkOworfTsKKworI2RlZmluZSBTSEExX0FSUkFZX0lOSVQgeyBOVUxMLCAwLCAwLCAwIH0KKwordm9pZCBzaGExX2FycmF5X2FwcGVuZChzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworaW50IHNoYTFfYXJyYXlfbG9va3VwKHN0cnVjdCBzaGExX2FycmF5ICphcnJheSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7Cit2b2lkIHNoYTFfYXJyYXlfY2xlYXIoc3RydWN0IHNoYTFfYXJyYXkgKmFycmF5KTsKKwordHlwZWRlZiB2b2lkICgqZm9yX2VhY2hfc2hhMV9mbikoY29uc3QgdW5zaWduZWQgY2hhciBzaGExWzIwXSwKKwkJCQkgdm9pZCAqZGF0YSk7Cit2b2lkIHNoYTFfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKHN0cnVjdCBzaGExX2FycmF5ICphcnJheSwKKwkJCQlmb3JfZWFjaF9zaGExX2ZuIGZuLAorCQkJCXZvaWQgKmRhdGEpOworCisjZW5kaWYgLyogU0hBMV9BUlJBWV9IICovCmRpZmYgLS1naXQgYS9zaGExLWxvb2t1cC5jIGIvc2hhMS1sb29rdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGRjNTVkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMS1sb29rdXAuYwpAQCAtMCwwICsxLDI3MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKworc3RhdGljIHVpbnQzMl90IHRha2UyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJcmV0dXJuICgoc2hhMVswXSA8PCA4KSB8IHNoYTFbMV0pOworfQorCisvKgorICogQ29udmVudGlvbmFsIGJpbmFyeSBzZWFyY2ggbG9vcCBsb29rcyBsaWtlIHRoaXM6CisgKgorICogICAgICBkbyB7CisgKiAgICAgICAgICAgICAgaW50IG1pID0gKGxvICsgaGkpIC8gMjsKKyAqICAgICAgICAgICAgICBpbnQgY21wID0gImVudHJ5IHBvaW50ZWQgYXQgYnkgbWkiIG1pbnVzICJ0YXJnZXQiOworICogICAgICAgICAgICAgIGlmICghY21wKQorICogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtaSBpcyB0aGUgd2FudGVkIG9uZSkKKyAqICAgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAqICAgICAgICAgICAgICAgICAgICAgIGhpID0gbWk7ICJtaSBpcyBsYXJnZXIgdGhhbiB0YXJnZXQiCisgKiAgICAgICAgICAgICAgZWxzZQorICogICAgICAgICAgICAgICAgICAgICAgbG8gPSBtaSsxOyAibWkgaXMgc21hbGxlciB0aGFuIHRhcmdldCIKKyAqICAgICAgfSB3aGlsZSAobG8gPCBoaSk7CisgKgorICogVGhlIGludmFyaWFudHMgYXJlOgorICoKKyAqIC0gV2hlbiBlbnRlcmluZyB0aGUgbG9vcCwgbG8gcG9pbnRzIGF0IGEgc2xvdCB0aGF0IGlzIG5ldmVyCisgKiAgIGFib3ZlIHRoZSB0YXJnZXQgKGl0IGNvdWxkIGJlIGF0IHRoZSB0YXJnZXQpLCBoaSBwb2ludHMgYXQgYQorICogICBzbG90IHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBhYm92ZSB0aGUgdGFyZ2V0IChpdCBjYW4gbmV2ZXIKKyAqICAgYmUgYXQgdGhlIHRhcmdldCkuCisgKgorICogLSBXZSBmaW5kIGEgcG9pbnQgJ21pJyBiZXR3ZWVuIGxvIGFuZCBoaSAobWkgY291bGQgYmUgdGhlIHNhbWUKKyAqICAgYXMgbG8sIGJ1dCBuZXZlciBjYW4gYmUgdGhlIHNhbWUgYXMgaGkpLCBhbmQgY2hlY2sgaWYgaXQgaGl0cworICogICB0aGUgdGFyZ2V0LiAgVGhlcmUgYXJlIHRocmVlIGNhc2VzOgorICoKKyAqICAgIC0gaWYgaXQgaXMgYSBoaXQsIHdlIGFyZSBoYXBweS4KKyAqCisgKiAgICAtIGlmIGl0IGlzIHN0cmljdGx5IGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQsIHdlIHVwZGF0ZSBoaSB3aXRoCisgKiAgICAgIGl0LgorICoKKyAqICAgIC0gaWYgaXQgaXMgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGUgdGFyZ2V0LCB3ZSB1cGRhdGUgbG8gdG8gYmUKKyAqICAgICAgb25lIHNsb3QgYWZ0ZXIgaXQsIGJlY2F1c2Ugd2UgYWxsb3cgbG8gdG8gYmUgYXQgdGhlIHRhcmdldC4KKyAqCisgKiBXaGVuIGNob29zaW5nICdtaScsIHdlIGRvIG5vdCBoYXZlIHRvIHRha2UgdGhlICJtaWRkbGUiIGJ1dAorICogYW55d2hlcmUgaW4gYmV0d2VlbiBsbyBhbmQgaGksIGFzIGxvbmcgYXMgbG8gPD0gbWkgPCBoaSBpcworICogc2F0aXNmaWVkLiAgV2hlbiB3ZSBzb21laG93IGtub3cgdGhhdCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUKKyAqIHRhcmdldCBhbmQgbG8gaXMgbXVjaCBzaG9ydGVyIHRoYW4gdGhlIHRhcmdldCBhbmQgaGksIHdlIGNvdWxkCisgKiBwaWNrIG1pIHRoYXQgaXMgbXVjaCBjbG9zZXIgdG8gbG8gdGhhbiB0aGUgbWlkd2F5LgorICovCisvKgorICogVGhlIHRhYmxlIHNob3VsZCBjb250YWluICJuciIgZWxlbWVudHMuCisgKiBUaGUgc2hhMSBvZiBlbGVtZW50IGkgKGJldHdlZW4gMCBhbmQgbnIgLSAxKSBzaG91bGQgYmUgcmV0dXJuZWQKKyAqIGJ5ICJmbihpLCB0YWJsZSkiLgorICovCitpbnQgc2hhMV9wb3MoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqdGFibGUsIHNpemVfdCBuciwKKwkgICAgIHNoYTFfYWNjZXNzX2ZuIGZuKQoreworCXNpemVfdCBoaSA9IG5yOworCXNpemVfdCBsbyA9IDA7CisJc2l6ZV90IG1pID0gMDsKKworCWlmICghbnIpCisJCXJldHVybiAtMTsKKworCWlmIChuciAhPSAxKSB7CisJCXNpemVfdCBsb3YsIGhpdiwgbWl2LCBvZnM7CisKKwkJZm9yIChvZnMgPSAwOyBvZnMgPCAxODsgb2ZzICs9IDIpIHsKKwkJCWxvdiA9IHRha2UyKGZuKDAsIHRhYmxlKSArIG9mcyk7CisJCQloaXYgPSB0YWtlMihmbihuciAtIDEsIHRhYmxlKSArIG9mcyk7CisJCQltaXYgPSB0YWtlMihzaGExICsgb2ZzKTsKKwkJCWlmIChtaXYgPCBsb3YpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKGhpdiA8IG1pdikKKwkJCQlyZXR1cm4gLTEgLSBucjsKKwkJCWlmIChsb3YgIT0gaGl2KSB7CisJCQkJLyoKKwkJCQkgKiBBdCB0aGlzIHBvaW50IG1pdiBjb3VsZCBiZSBlcXVhbAorCQkJCSAqIHRvIGhpdiAoYnV0IHNoYTEgY291bGQgc3RpbGwgYmUgaGlnaGVyKTsKKwkJCQkgKiB0aGUgaW52YXJpYW50IG9mIChtaSA8IGhpKSBzaG91bGQgYmUKKwkJCQkgKiBrZXB0LgorCQkJCSAqLworCQkJCW1pID0gKG5yIC0gMSkgKiAobWl2IC0gbG92KSAvIChoaXYgLSBsb3YpOworCQkJCWlmIChsbyA8PSBtaSAmJiBtaSA8IGhpKQorCQkJCQlicmVhazsKKwkJCQlkaWUoIkJVRzogYXNzZXJ0aW9uIGZhaWxlZCBpbiBiaW5hcnkgc2VhcmNoIik7CisJCQl9CisJCX0KKwkJaWYgKDE4IDw9IG9mcykKKwkJCWRpZSgiY2Fubm90IGhhcHBlbiAtLSBsbyBhbmQgaGkgYXJlIGlkZW50aWNhbCIpOworCX0KKworCWRvIHsKKwkJaW50IGNtcDsKKwkJY21wID0gaGFzaGNtcChmbihtaSwgdGFibGUpLCBzaGExKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbWk7CisJCWlmIChjbXAgPiAwKQorCQkJaGkgPSBtaTsKKwkJZWxzZQorCQkJbG8gPSBtaSArIDE7CisJCW1pID0gKGhpICsgbG8pIC8gMjsKKwl9IHdoaWxlIChsbyA8IGhpKTsKKwlyZXR1cm4gLWxvLTE7Cit9CisKKy8qCisgKiBDb252ZW50aW9uYWwgYmluYXJ5IHNlYXJjaCBsb29wIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKgl1bnNpZ25lZCBsbywgaGk7CisgKiAgICAgIGRvIHsKKyAqICAgICAgICAgICAgICB1bnNpZ25lZCBtaSA9IChsbyArIGhpKSAvIDI7CisgKiAgICAgICAgICAgICAgaW50IGNtcCA9ICJlbnRyeSBwb2ludGVkIGF0IGJ5IG1pIiBtaW51cyAidGFyZ2V0IjsKKyAqICAgICAgICAgICAgICBpZiAoIWNtcCkKKyAqICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobWkgaXMgdGhlIHdhbnRlZCBvbmUpCisgKiAgICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgKiAgICAgICAgICAgICAgICAgICAgICBoaSA9IG1pOyAibWkgaXMgbGFyZ2VyIHRoYW4gdGFyZ2V0IgorICogICAgICAgICAgICAgIGVsc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIGxvID0gbWkrMTsgIm1pIGlzIHNtYWxsZXIgdGhhbiB0YXJnZXQiCisgKiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpOworICoKKyAqIFRoZSBpbnZhcmlhbnRzIGFyZToKKyAqCisgKiAtIFdoZW4gZW50ZXJpbmcgdGhlIGxvb3AsIGxvIHBvaW50cyBhdCBhIHNsb3QgdGhhdCBpcyBuZXZlcgorICogICBhYm92ZSB0aGUgdGFyZ2V0IChpdCBjb3VsZCBiZSBhdCB0aGUgdGFyZ2V0KSwgaGkgcG9pbnRzIGF0IGEKKyAqICAgc2xvdCB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJvdmUgdGhlIHRhcmdldCAoaXQgY2FuIG5ldmVyCisgKiAgIGJlIGF0IHRoZSB0YXJnZXQpLgorICoKKyAqIC0gV2UgZmluZCBhIHBvaW50ICdtaScgYmV0d2VlbiBsbyBhbmQgaGkgKG1pIGNvdWxkIGJlIHRoZSBzYW1lCisgKiAgIGFzIGxvLCBidXQgbmV2ZXIgY2FuIGJlIGFzIHNhbWUgYXMgaGkpLCBhbmQgY2hlY2sgaWYgaXQgaGl0cworICogICB0aGUgdGFyZ2V0LiAgVGhlcmUgYXJlIHRocmVlIGNhc2VzOgorICoKKyAqICAgIC0gaWYgaXQgaXMgYSBoaXQsIHdlIGFyZSBoYXBweS4KKyAqCisgKiAgICAtIGlmIGl0IGlzIHN0cmljdGx5IGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQsIHdlIHNldCBpdCB0byBoaSwKKyAqICAgICAgYW5kIHJlcGVhdCB0aGUgc2VhcmNoLgorICoKKyAqICAgIC0gaWYgaXQgaXMgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGUgdGFyZ2V0LCB3ZSB1cGRhdGUgbG8gdG8KKyAqICAgICAgb25lIHNsb3QgYWZ0ZXIgaXQsIGJlY2F1c2Ugd2UgYWxsb3cgbG8gdG8gYmUgYXQgdGhlIHRhcmdldC4KKyAqCisgKiAgIElmIHRoZSBsb29wIGV4aXRzLCB0aGVyZSBpcyBubyBtYXRjaGluZyBlbnRyeS4KKyAqCisgKiBXaGVuIGNob29zaW5nICdtaScsIHdlIGRvIG5vdCBoYXZlIHRvIHRha2UgdGhlICJtaWRkbGUiIGJ1dAorICogYW55d2hlcmUgaW4gYmV0d2VlbiBsbyBhbmQgaGksIGFzIGxvbmcgYXMgbG8gPD0gbWkgPCBoaSBpcworICogc2F0aXNmaWVkLiAgV2hlbiB3ZSBzb21laG93IGtub3cgdGhhdCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUKKyAqIHRhcmdldCBhbmQgbG8gaXMgbXVjaCBzaG9ydGVyIHRoYW4gdGhlIHRhcmdldCBhbmQgaGksIHdlIGNvdWxkCisgKiBwaWNrIG1pIHRoYXQgaXMgbXVjaCBjbG9zZXIgdG8gbG8gdGhhbiB0aGUgbWlkd2F5LgorICoKKyAqIE5vdywgd2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgU0hBLTEgaXMgYSBnb29kIGhhc2gKKyAqIGZ1bmN0aW9uLCBhbmQgYXMgbG9uZyBhcyB0aGVyZSBhcmUgZW5vdWdoIGVudHJpZXMgaW4gdGhlIHRhYmxlLCB3ZQorICogY2FuIGV4cGVjdCB1bmlmb3JtIGRpc3RyaWJ1dGlvbi4gIEFuIGVudHJ5IHRoYXQgYmVnaW5zIHdpdGggZm9yCisgKiBleGFtcGxlICJkZWFkYmVlZi4uLiIgaXMgbXVjaCBsaWtlbHkgdG8gYXBwZWFyIG11Y2ggbGF0ZXIgdGhhbiBpbgorICogdGhlIG1pZHdheSBvZiB0aGUgdGFibGUuICBJdCBjYW4gcmVhc29uYWJseSBiZSBleHBlY3RlZCB0byBiZSBuZWFyCisgKiA4NyUgKDIyMi8yNTYpIGZyb20gdGhlIHRvcCBvZiB0aGUgdGFibGUuCisgKgorICogSG93ZXZlciwgd2UgZG8gbm90IHdhbnQgdG8gcGljayAibWkiIHRvbyBwcmVjaXNlbHkuICBJZiB0aGUgZW50cnkgYXQKKyAqIHRoZSA4NyUgaW4gdGhlIGFib3ZlIGV4YW1wbGUgdHVybnMgb3V0IHRvIGJlIGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQKKyAqIHdlIGFyZSBsb29raW5nIGZvciwgd2Ugd291bGQgZW5kIHVwIG5hcnJvd2luZyB0aGUgc2VhcmNoIHNwYWNlIGRvd24KKyAqIG9ubHkgYnkgMTMlLCBpbnN0ZWFkIG9mIDUwJSB3ZSB3b3VsZCBnZXQgaWYgd2UgZGlkIGEgc2ltcGxlIGJpbmFyeQorICogc2VhcmNoLiAgU28gd2Ugd291bGQgd2FudCB0byBoZWRnZSBvdXIgYmV0cyBieSBiZWluZyBsZXNzIGFnZ3Jlc3NpdmUuCisgKgorICogVGhlIHRhYmxlIGF0ICJ0YWJsZSIgaG9sZHMgYXQgbGVhc3QgIm5yIiBlbnRyaWVzIG9mICJlbGVtX3NpemUiCisgKiBieXRlcyBlYWNoLiAgRWFjaCBlbnRyeSBoYXMgdGhlIFNIQS0xIGtleSBhdCAia2V5X29mZnNldCIuICBUaGUKKyAqIHRhYmxlIGlzIHNvcnRlZCBieSB0aGUgU0hBLTEga2V5IG9mIHRoZSBlbnRyaWVzLiAgVGhlIGNhbGxlciB3YW50cworICogdG8gZmluZCB0aGUgZW50cnkgd2l0aCAia2V5IiwgYW5kIGtub3dzIHRoYXQgdGhlIGVudHJ5IGF0ICJsbyIgaXMKKyAqIG5vdCBoaWdoZXIgdGhhbiB0aGUgZW50cnkgaXQgaXMgbG9va2luZyBmb3IsIGFuZCB0aGF0IHRoZSBlbnRyeSBhdAorICogImhpIiBpcyBoaWdoZXIgdGhhbiB0aGUgZW50cnkgaXQgaXMgbG9va2luZyBmb3IuCisgKi8KK2ludCBzaGExX2VudHJ5X3Bvcyhjb25zdCB2b2lkICp0YWJsZSwKKwkJICAgc2l6ZV90IGVsZW1fc2l6ZSwKKwkJICAgc2l6ZV90IGtleV9vZmZzZXQsCisJCSAgIHVuc2lnbmVkIGxvLCB1bnNpZ25lZCBoaSwgdW5zaWduZWQgbnIsCisJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlID0gdGFibGU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaGlfa2V5LCAqbG9fa2V5OworCXVuc2lnbmVkIG9mc18wOworCXN0YXRpYyBpbnQgZGVidWdfbG9va3VwID0gLTE7CisKKwlpZiAoZGVidWdfbG9va3VwIDwgMCkKKwkJZGVidWdfbG9va3VwID0gISFnZXRlbnYoIkdJVF9ERUJVR19MT09LVVAiKTsKKworCWlmICghbnIgfHwgbG8gPj0gaGkpCisJCXJldHVybiAtMTsKKworCWlmIChuciA9PSBoaSkKKwkJaGlfa2V5ID0gTlVMTDsKKwllbHNlCisJCWhpX2tleSA9IGJhc2UgKyBlbGVtX3NpemUgKiBoaSArIGtleV9vZmZzZXQ7CisJbG9fa2V5ID0gYmFzZSArIGVsZW1fc2l6ZSAqIGxvICsga2V5X29mZnNldDsKKworCW9mc18wID0gMDsKKwlkbyB7CisJCWludCBjbXA7CisJCXVuc2lnbmVkIG9mcywgbWksIHJhbmdlOworCQl1bnNpZ25lZCBsb3YsIGhpdiwga3l2OworCQljb25zdCB1bnNpZ25lZCBjaGFyICptaV9rZXk7CisKKwkJcmFuZ2UgPSBoaSAtIGxvOworCQlpZiAoaGlfa2V5KSB7CisJCQlmb3IgKG9mcyA9IG9mc18wOyBvZnMgPCAyMDsgb2ZzKyspCisJCQkJaWYgKGxvX2tleVtvZnNdICE9IGhpX2tleVtvZnNdKQorCQkJCQlicmVhazsKKwkJCW9mc18wID0gb2ZzOworCQkJLyoKKwkJCSAqIGJ5dGUgMCB0aHJ1IChvZnMtMSkgYXJlIHRoZSBzYW1lIGJldHdlZW4KKwkJCSAqIGxvIGFuZCBoaTsgb2ZzIGlzIHRoZSBmaXJzdCBieXRlIHRoYXQgaXMKKwkJCSAqIGRpZmZlcmVudC4KKwkJCSAqLworCQkJaGl2ID0gaGlfa2V5W29mc18wXTsKKwkJCWlmIChvZnNfMCA8IDE5KQorCQkJCWhpdiA9IChoaXYgPDwgOCkgfCBoaV9rZXlbb2ZzXzArMV07CisJCX0gZWxzZSB7CisJCQloaXYgPSAyNTY7CisJCQlpZiAob2ZzXzAgPCAxOSkKKwkJCQloaXYgPDw9IDg7CisJCX0KKwkJbG92ID0gbG9fa2V5W29mc18wXTsKKwkJa3l2ID0ga2V5W29mc18wXTsKKwkJaWYgKG9mc18wIDwgMTkpIHsKKwkJCWxvdiA9IChsb3YgPDwgOCkgfCBsb19rZXlbb2ZzXzArMV07CisJCQlreXYgPSAoa3l2IDw8IDgpIHwga2V5W29mc18wKzFdOworCQl9CisJCWFzc2VydChsb3YgPCBoaXYpOworCisJCWlmIChreXYgPCBsb3YpCisJCQlyZXR1cm4gLTEgLSBsbzsKKwkJaWYgKGhpdiA8IGt5dikKKwkJCXJldHVybiAtMSAtIGhpOworCisJCS8qCisJCSAqIEV2ZW4gaWYgd2Uga25vdyB0aGUgdGFyZ2V0IGlzIG11Y2ggY2xvc2VyIHRvICdoaScKKwkJICogdGhhbiAnbG8nLCBpZiB3ZSBwaWNrIHRvbyBwcmVjaXNlbHkgYW5kIG92ZXJzaG9vdAorCQkgKiAoZS5nLiB3aGVuIHdlIGtub3cgJ21pJyBpcyBjbG9zZXIgdG8gJ2hpJyB0aGFuIHRvCisJCSAqICdsbycsIHBpY2sgJ21pJyB0aGF0IGlzIGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQpLCB3ZQorCQkgKiBlbmQgdXAgbmFycm93aW5nIHRoZSBzZWFyY2ggc3BhY2UgYnkgYSBzbWFsbGVyCisJCSAqIGFtb3VudCAoaS5lLiB0aGUgZGlzdGFuY2UgYmV0d2VlbiAnbWknIGFuZCAnaGknKQorCQkgKiB0aGFuIHdoYXQgd2Ugd291bGQgaGF2ZSAoaS5lLiBhYm91dCBoYWxmIG9mICdsbycKKwkJICogYW5kICdoaScpLiAgSGVkZ2Ugb3VyIGJldHMgdG8gcGljayAnbWknIGxlc3MKKwkJICogYWdncmVzc2l2ZWx5LCBpLmUuIG1ha2UgJ21pJyBhIGJpdCBjbG9zZXIgdG8gdGhlCisJCSAqIG1pZGRsZSB0aGFuIHdlIHdvdWxkIG90aGVyd2lzZSBwaWNrLgorCQkgKi8KKwkJa3l2ID0gKGt5diAqIDYgKyBsb3YgKyBoaXYpIC8gODsKKwkJaWYgKGxvdiA8IGhpdiAtIDEpIHsKKwkJCWlmIChreXYgPT0gbG92KQorCQkJCWt5disrOworCQkJZWxzZSBpZiAoa3l2ID09IGhpdikKKwkJCQlreXYtLTsKKwkJfQorCQltaSA9IChyYW5nZSAtIDEpICogKGt5diAtIGxvdikgLyAoaGl2IC0gbG92KSArIGxvOworCisJCWlmIChkZWJ1Z19sb29rdXApIHsKKwkJCXByaW50ZigibG8gJXUgaGkgJXUgcmcgJXUgbWkgJXUgIiwgbG8sIGhpLCByYW5nZSwgbWkpOworCQkJcHJpbnRmKCJvZnMgJXUgbG92ICV4LCBoaXYgJXgsIGt5diAleFxuIiwKKwkJCSAgICAgICBvZnNfMCwgbG92LCBoaXYsIGt5dik7CisJCX0KKwkJaWYgKCEobG8gPD0gbWkgJiYgbWkgPCBoaSkpCisJCQlkaWUoImFzc2VydGlvbiBmYWlsdXJlIGxvICV1IG1pICV1IGhpICV1ICVzIiwKKwkJCSAgICBsbywgbWksIGhpLCBzaGExX3RvX2hleChrZXkpKTsKKworCQltaV9rZXkgPSBiYXNlICsgZWxlbV9zaXplICogbWkgKyBrZXlfb2Zmc2V0OworCQljbXAgPSBtZW1jbXAobWlfa2V5ICsgb2ZzXzAsIGtleSArIG9mc18wLCAyMCAtIG9mc18wKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbWk7CisJCWlmIChjbXAgPiAwKSB7CisJCQloaSA9IG1pOworCQkJaGlfa2V5ID0gbWlfa2V5OworCQl9IGVsc2UgeworCQkJbG8gPSBtaSArIDE7CisJCQlsb19rZXkgPSBtaV9rZXkgKyBlbGVtX3NpemU7CisJCX0KKwl9IHdoaWxlIChsbyA8IGhpKTsKKwlyZXR1cm4gLWxvLTE7Cit9CmRpZmYgLS1naXQgYS9zaGExLWxvb2t1cC5oIGIvc2hhMS1sb29rdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGFmMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhMS1sb29rdXAuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIFNIQTFfTE9PS1VQX0gKKyNkZWZpbmUgU0hBMV9MT09LVVBfSAorCit0eXBlZGVmIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTFfYWNjZXNzX2ZuKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpOworCitleHRlcm4gaW50IHNoYTFfcG9zKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCSAgICB2b2lkICp0YWJsZSwKKwkJICAgIHNpemVfdCBuciwKKwkJICAgIHNoYTFfYWNjZXNzX2ZuIGZuKTsKKworZXh0ZXJuIGludCBzaGExX2VudHJ5X3Bvcyhjb25zdCB2b2lkICp0YWJsZSwKKwkJCSAgc2l6ZV90IGVsZW1fc2l6ZSwKKwkJCSAgc2l6ZV90IGtleV9vZmZzZXQsCisJCQkgIHVuc2lnbmVkIGxvLCB1bnNpZ25lZCBoaSwgdW5zaWduZWQgbnIsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NoYTFfZmlsZS5jIGIvc2hhMV9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1Mjk3NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYTFfZmlsZS5jCkBAIC0wLDAgKzEsMjg0MyBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqCisgKiBUaGlzIGhhbmRsZXMgYmFzaWMgZ2l0IHNoYTEgb2JqZWN0IGZpbGVzIC0gcGFja2luZywgdW5wYWNraW5nLAorICogY3JlYXRpb24gZXRjLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBhY2stcmV2aW5kZXguaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorI2luY2x1ZGUgImJ1bGstY2hlY2tpbi5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorCisjaWZuZGVmIE9fTk9BVElNRQorI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX1BQQ19fKSkKKyNkZWZpbmUgT19OT0FUSU1FIDAxMDAwMDAwCisjZWxzZQorI2RlZmluZSBPX05PQVRJTUUgMAorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBTWl9GTVQgUFJJdU1BWAorc3RhdGljIGlubGluZSB1aW50bWF4X3Qgc3pfZm10KHNpemVfdCBzKSB7IHJldHVybiBzOyB9CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgbnVsbF9zaGExWzIwXTsKKworLyoKKyAqIFRoaXMgaXMgbWVhbnQgdG8gaG9sZCBhICpzbWFsbCogbnVtYmVyIG9mIG9iamVjdHMgdGhhdCB5b3Ugd291bGQKKyAqIHdhbnQgcmVhZF9zaGExX2ZpbGUoKSB0byBiZSBhYmxlIHRvIHJldHVybiwgYnV0IHlldCB5b3UgZG8gbm90IHdhbnQKKyAqIHRvIHdyaXRlIHRoZW0gaW50byB0aGUgb2JqZWN0IHN0b3JlIChlLmcuIGEgYnJvd3NlLW9ubHkKKyAqIGFwcGxpY2F0aW9uKS4KKyAqLworc3RhdGljIHN0cnVjdCBjYWNoZWRfb2JqZWN0IHsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworfSAqY2FjaGVkX29iamVjdHM7CitzdGF0aWMgaW50IGNhY2hlZF9vYmplY3RfbnIsIGNhY2hlZF9vYmplY3RfYWxsb2M7CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVkX29iamVjdCBlbXB0eV90cmVlID0geworCUVNUFRZX1RSRUVfU0hBMV9CSU5fTElURVJBTCwKKwlPQkpfVFJFRSwKKwkiIiwKKwkwCit9OworCitzdGF0aWMgc3RydWN0IHBhY2tlZF9naXQgKmxhc3RfZm91bmRfcGFjazsKKworc3RhdGljIHN0cnVjdCBjYWNoZWRfb2JqZWN0ICpmaW5kX2NhY2hlZF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY2FjaGVkX29iamVjdCAqY28gPSBjYWNoZWRfb2JqZWN0czsKKworCWZvciAoaSA9IDA7IGkgPCBjYWNoZWRfb2JqZWN0X25yOyBpKyssIGNvKyspIHsKKwkJaWYgKCFoYXNoY21wKGNvLT5zaGExLCBzaGExKSkKKwkJCXJldHVybiBjbzsKKwl9CisJaWYgKCFoYXNoY21wKHNoYTEsIGVtcHR5X3RyZWUuc2hhMSkpCisJCXJldHVybiAmZW1wdHlfdHJlZTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IG1rZGlyX2luX2dpdGRpcihjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChta2RpcihwYXRoLCAwNzc3KSkgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJcmV0dXJuIC0xOworCQkvKgorCQkgKiBBcmUgd2UgbG9va2luZyBhdCBhIHBhdGggaW4gYSBzeW1saW5rZWQgd29ya3RyZWUKKwkJICogd2hvc2Ugb3JpZ2luYWwgcmVwb3NpdG9yeSBkb2VzIG5vdCB5ZXQgaGF2ZSBpdD8KKwkJICogZS5nLiAuZ2l0L3JyLWNhY2hlIHBvaW50aW5nIGF0IGl0cyBvcmlnaW5hbAorCQkgKiByZXBvc2l0b3J5IGluIHdoaWNoIHRoZSB1c2VyIGhhc24ndCBwZXJmb3JtZWQgYW55CisJCSAqIGNvbmZsaWN0IHJlc29sdXRpb24geWV0PworCQkgKi8KKwkJaWYgKGxzdGF0KHBhdGgsICZzdCkgfHwgIVNfSVNMTksoc3Quc3RfbW9kZSkgfHwKKwkJICAgIHN0cmJ1Zl9yZWFkbGluaygmc2IsIHBhdGgsIHN0LnN0X3NpemUpIHx8CisJCSAgICAhaXNfYWJzb2x1dGVfcGF0aChzYi5idWYpIHx8CisJCSAgICBta2RpcihzYi5idWYsIDA3NzcpKSB7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQkJZXJybm8gPSBzYXZlZF9lcnJubzsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCX0KKwlyZXR1cm4gYWRqdXN0X3NoYXJlZF9wZXJtKHBhdGgpOworfQorCitpbnQgc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhjaGFyICpwYXRoKQoreworCWNoYXIgKnBvcyA9IHBhdGggKyBvZmZzZXRfMXN0X2NvbXBvbmVudChwYXRoKTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCXdoaWxlIChwb3MpIHsKKwkJcG9zID0gc3RyY2hyKHBvcywgJy8nKTsKKwkJaWYgKCFwb3MpCisJCQlicmVhazsKKwkJd2hpbGUgKCorK3BvcyA9PSAnLycpCisJCQk7CisJCWlmICghKnBvcykKKwkJCWJyZWFrOworCQkqLS1wb3MgPSAnXDAnOworCQlpZiAoIXN0YXQocGF0aCwgJnN0KSkgeworCQkJLyogcGF0aCBleGlzdHMgKi8KKwkJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJCSpwb3MgPSAnLyc7CisJCQkJcmV0dXJuIC0zOworCQkJfQorCQl9CisJCWVsc2UgaWYgKG1rZGlyKHBhdGgsIDA3NzcpKSB7CisJCQkqcG9zID0gJy8nOworCQkJcmV0dXJuIC0xOworCQl9CisJCWVsc2UgaWYgKGFkanVzdF9zaGFyZWRfcGVybShwYXRoKSkgeworCQkJKnBvcyA9ICcvJzsKKwkJCXJldHVybiAtMjsKKwkJfQorCQkqcG9zKysgPSAnLyc7CisJfQorCXJldHVybiAwOworfQorCitpbnQgc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChjb25zdCBjaGFyICpwYXRoKQoreworCS8qIHBhdGggcG9pbnRzIHRvIGNhY2hlIGVudHJpZXMsIHNvIHhzdHJkdXAgYmVmb3JlIG1lc3Npbmcgd2l0aCBpdCAqLworCWNoYXIgKmJ1ZiA9IHhzdHJkdXAocGF0aCk7CisJaW50IHJlc3VsdCA9IHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoYnVmKTsKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZmlsbF9zaGExX3BhdGgoY2hhciAqcGF0aGJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQlzdGF0aWMgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwkJdW5zaWduZWQgaW50IHZhbCA9IHNoYTFbaV07CisJCWNoYXIgKnBvcyA9IHBhdGhidWYgKyBpKjIgKyAoaSA+IDApOworCQkqcG9zKysgPSBoZXhbdmFsID4+IDRdOworCQkqcG9zID0gaGV4W3ZhbCAmIDB4Zl07CisJfQorfQorCisvKgorICogTk9URSEgVGhpcyByZXR1cm5zIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYnVmZmVyLCBzbyB5b3UgaGF2ZSB0byBiZQorICogY2FyZWZ1bCBhYm91dCB1c2luZyBpdC4gRG8gYW4gInhzdHJkdXAoKSIgaWYgeW91IG5lZWQgdG8gc2F2ZSB0aGUKKyAqIGZpbGVuYW1lLgorICoKKyAqIEFsc28gbm90ZSB0aGF0IHRoaXMgcmV0dXJucyB0aGUgbG9jYXRpb24gZm9yIGNyZWF0aW5nLiAgUmVhZGluZworICogU0hBMSBmaWxlIGNhbiBoYXBwZW4gZnJvbSBhbnkgYWx0ZXJuYXRlIGRpcmVjdG9yeSBsaXN0ZWQgaW4gdGhlCisgKiBEQl9FTlZJUk9OTUVOVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBpdCBpcyBub3QgZm91bmQgaW4KKyAqIHRoZSBwcmltYXJ5IG9iamVjdCBkYXRhYmFzZS4KKyAqLworY2hhciAqc2hhMV9maWxlX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgY2hhciBidWZbUEFUSF9NQVhdOworCWNvbnN0IGNoYXIgKm9iamRpcjsKKwlpbnQgbGVuOworCisJb2JqZGlyID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwlsZW4gPSBzdHJsZW4ob2JqZGlyKTsKKworCS8qICcvJyArIHNoYTEoMikgKyAnLycgKyBzaGExKDM4KSArICdcMCcgKi8KKwlpZiAobGVuICsgNDMgPiBQQVRIX01BWCkKKwkJZGllKCJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJXMiLCBvYmpkaXIpOworCW1lbWNweShidWYsIG9iamRpciwgbGVuKTsKKwlidWZbbGVuXSA9ICcvJzsKKwlidWZbbGVuKzNdID0gJy8nOworCWJ1ZltsZW4rNDJdID0gJ1wwJzsKKwlmaWxsX3NoYTFfcGF0aChidWYgKyBsZW4gKyAxLCBzaGExKTsKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgY2hhciAqc2hhMV9nZXRfcGFja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJY2hhciAqKm5hbWUsIGNoYXIgKipiYXNlLCBjb25zdCBjaGFyICp3aGljaCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwljaGFyICpidWY7CisJaW50IGk7CisKKwlpZiAoISpiYXNlKSB7CisJCWNvbnN0IGNoYXIgKnNoYTFfZmlsZV9kaXJlY3RvcnkgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOworCQlpbnQgbGVuID0gc3RybGVuKHNoYTFfZmlsZV9kaXJlY3RvcnkpOworCQkqYmFzZSA9IHhtYWxsb2MobGVuICsgNjApOworCQlzcHJpbnRmKCpiYXNlLCAiJXMvcGFjay9wYWNrLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAuJXMiLAorCQkJc2hhMV9maWxlX2RpcmVjdG9yeSwgd2hpY2gpOworCQkqbmFtZSA9ICpiYXNlICsgbGVuICsgMTE7CisJfQorCisJYnVmID0gKm5hbWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdmFsID0gKnNoYTErKzsKKwkJKmJ1ZisrID0gaGV4W3ZhbCA+PiA0XTsKKwkJKmJ1ZisrID0gaGV4W3ZhbCAmIDB4Zl07CisJfQorCisJcmV0dXJuICpiYXNlOworfQorCitjaGFyICpzaGExX3BhY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRpYyBjaGFyICpuYW1lLCAqYmFzZTsKKworCXJldHVybiBzaGExX2dldF9wYWNrX25hbWUoc2hhMSwgJm5hbWUsICZiYXNlLCAicGFjayIpOworfQorCitjaGFyICpzaGExX3BhY2tfaW5kZXhfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRpYyBjaGFyICpuYW1lLCAqYmFzZTsKKworCXJldHVybiBzaGExX2dldF9wYWNrX25hbWUoc2hhMSwgJm5hbWUsICZiYXNlLCAiaWR4Iik7Cit9CisKK3N0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHRfb2RiX2xpc3Q7CitzdGF0aWMgc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKiphbHRfb2RiX3RhaWw7CisKK3N0YXRpYyBpbnQgZ2l0X29wZW5fbm9hdGltZShjb25zdCBjaGFyICpuYW1lKTsKKworLyoKKyAqIFByZXBhcmUgYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZSByZWdpc3RyeS4KKyAqCisgKiBUaGUgdmFyaWFibGUgYWx0X29kYl9saXN0IHBvaW50cyBhdCB0aGUgbGlzdCBvZiBzdHJ1Y3QKKyAqIGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UuICBUaGUgZWxlbWVudHMgb24gdGhpcyBsaXN0IGNvbWUgZnJvbQorICogbm9uLWVtcHR5IGVsZW1lbnRzIGZyb20gY29sb24gc2VwYXJhdGVkIEFMVEVSTkFURV9EQl9FTlZJUk9OTUVOVAorICogZW52aXJvbm1lbnQgdmFyaWFibGUsIGFuZCAkR0lUX09CSkVDVF9ESVJFQ1RPUlkvaW5mby9hbHRlcm5hdGVzLAorICogd2hvc2UgY29udGVudHMgaXMgc2ltaWxhciB0byB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlIGJ1dCBjYW4gYmUKKyAqIExGIHNlcGFyYXRlZC4gIEl0cyBiYXNlIHBvaW50cyBhdCBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlciB0aGF0CisgKiBjb250YWlucyAiL3RoZS9kaXJlY3RvcnkvY29ycmVzcG9uZGluZy90by8uZ2l0L29iamVjdHMvLi4uIiwgd2hpbGUKKyAqIGl0cyBuYW1lIHBvaW50cyBqdXN0IGFmdGVyIHRoZSBzbGFzaCBhdCB0aGUgZW5kIG9mICIuZ2l0L29iamVjdHMvIgorICogaW4gdGhlIGV4YW1wbGUgYWJvdmUsIGFuZCBoYXMgZW5vdWdoIHNwYWNlIHRvIGhvbGQgNDAtYnl0ZSBoZXgKKyAqIFNIQTEsIGFuIGV4dHJhIHNsYXNoIGZvciB0aGUgZmlyc3QgbGV2ZWwgaW5kaXJlY3Rpb24sIGFuZCB0aGUKKyAqIHRlcm1pbmF0aW5nIE5VTC4KKyAqLworc3RhdGljIGludCBsaW5rX2FsdF9vZGJfZW50cnkoY29uc3QgY2hhciAqIGVudHJ5LCBpbnQgbGVuLCBjb25zdCBjaGFyICogcmVsYXRpdmVfYmFzZSwgaW50IGRlcHRoKQoreworCWNvbnN0IGNoYXIgKm9iamRpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmVudDsKKwlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0OworCWludCBwZnhsZW4sIGVudGxlbjsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGhidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghaXNfYWJzb2x1dGVfcGF0aChlbnRyeSkgJiYgcmVsYXRpdmVfYmFzZSkgeworCQlzdHJidWZfYWRkc3RyKCZwYXRoYnVmLCByZWFsX3BhdGgocmVsYXRpdmVfYmFzZSkpOworCQlzdHJidWZfYWRkY2goJnBhdGhidWYsICcvJyk7CisJfQorCXN0cmJ1Zl9hZGQoJnBhdGhidWYsIGVudHJ5LCBsZW4pOworCisJbm9ybWFsaXplX3BhdGhfY29weShwYXRoYnVmLmJ1ZiwgcGF0aGJ1Zi5idWYpOworCisJcGZ4bGVuID0gc3RybGVuKHBhdGhidWYuYnVmKTsKKworCS8qCisJICogVGhlIHRyYWlsaW5nIHNsYXNoIGFmdGVyIHRoZSBkaXJlY3RvcnkgbmFtZSBpcyBnaXZlbiBieQorCSAqIHRoaXMgZnVuY3Rpb24gYXQgdGhlIGVuZC4gUmVtb3ZlIGR1cGxpY2F0ZXMuCisJICovCisJd2hpbGUgKHBmeGxlbiAmJiBwYXRoYnVmLmJ1ZltwZnhsZW4tMV0gPT0gJy8nKQorCQlwZnhsZW4gLT0gMTsKKworCWVudGxlbiA9IHBmeGxlbiArIDQzOyAvKiAnLycgKyAyIGhleCArICcvJyArIDM4IGhleCArIE5VTCAqLworCWVudCA9IHhtYWxsb2Moc2l6ZW9mKCplbnQpICsgZW50bGVuKTsKKwltZW1jcHkoZW50LT5iYXNlLCBwYXRoYnVmLmJ1ZiwgcGZ4bGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aGJ1Zik7CisKKwllbnQtPm5hbWUgPSBlbnQtPmJhc2UgKyBwZnhsZW4gKyAxOworCWVudC0+YmFzZVtwZnhsZW4gKyAzXSA9ICcvJzsKKwllbnQtPmJhc2VbcGZ4bGVuXSA9IGVudC0+YmFzZVtlbnRsZW4tMV0gPSAwOworCisJLyogRGV0ZWN0IGNhc2VzIHdoZXJlIGFsdGVybmF0ZSBkaXNhcHBlYXJlZCAqLworCWlmICghaXNfZGlyZWN0b3J5KGVudC0+YmFzZSkpIHsKKwkJZXJyb3IoIm9iamVjdCBkaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3Q7ICIKKwkJICAgICAgImNoZWNrIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMuIiwKKwkJICAgICAgZW50LT5iYXNlKTsKKwkJZnJlZShlbnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogUHJldmVudCB0aGUgY29tbW9uIG1pc3Rha2Ugb2YgbGlzdGluZyB0aGUgc2FtZQorCSAqIHRoaW5nIHR3aWNlLCBvciBvYmplY3QgZGlyZWN0b3J5IGl0c2VsZi4KKwkgKi8KKwlmb3IgKGFsdCA9IGFsdF9vZGJfbGlzdDsgYWx0OyBhbHQgPSBhbHQtPm5leHQpIHsKKwkJaWYgKCFtZW1jbXAoZW50LT5iYXNlLCBhbHQtPmJhc2UsIHBmeGxlbikpIHsKKwkJCWZyZWUoZW50KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAoIXN0cmNtcChlbnQtPmJhc2UsIG9iamRpcikpIHsKKwkJZnJlZShlbnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogYWRkIHRoZSBhbHRlcm5hdGUgZW50cnkgKi8KKwkqYWx0X29kYl90YWlsID0gZW50OworCWFsdF9vZGJfdGFpbCA9ICYoZW50LT5uZXh0KTsKKwllbnQtPm5leHQgPSBOVUxMOworCisJLyogcmVjdXJzaXZlbHkgYWRkIGFsdGVybmF0ZXMgKi8KKwlyZWFkX2luZm9fYWx0ZXJuYXRlcyhlbnQtPmJhc2UsIGRlcHRoICsgMSk7CisKKwllbnQtPmJhc2VbcGZ4bGVuXSA9ICcvJzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsaW5rX2FsdF9vZGJfZW50cmllcyhjb25zdCBjaGFyICphbHQsIGNvbnN0IGNoYXIgKmVwLCBpbnQgc2VwLAorCQkJCSBjb25zdCBjaGFyICpyZWxhdGl2ZV9iYXNlLCBpbnQgZGVwdGgpCit7CisJY29uc3QgY2hhciAqY3AsICpsYXN0OworCisJaWYgKGRlcHRoID4gNSkgeworCQllcnJvcigiJXM6IGlnbm9yaW5nIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzLCBuZXN0aW5nIHRvbyBkZWVwLiIsCisJCQkJcmVsYXRpdmVfYmFzZSk7CisJCXJldHVybjsKKwl9CisKKwlsYXN0ID0gYWx0OworCXdoaWxlIChsYXN0IDwgZXApIHsKKwkJY3AgPSBsYXN0OworCQlpZiAoY3AgPCBlcCAmJiAqY3AgPT0gJyMnKSB7CisJCQl3aGlsZSAoY3AgPCBlcCAmJiAqY3AgIT0gc2VwKQorCQkJCWNwKys7CisJCQlsYXN0ID0gY3AgKyAxOworCQkJY29udGludWU7CisJCX0KKwkJd2hpbGUgKGNwIDwgZXAgJiYgKmNwICE9IHNlcCkKKwkJCWNwKys7CisJCWlmIChsYXN0ICE9IGNwKSB7CisJCQlpZiAoIWlzX2Fic29sdXRlX3BhdGgobGFzdCkgJiYgZGVwdGgpIHsKKwkJCQllcnJvcigiJXM6IGlnbm9yaW5nIHJlbGF0aXZlIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUgJXMiLAorCQkJCQkJcmVsYXRpdmVfYmFzZSwgbGFzdCk7CisJCQl9IGVsc2UgeworCQkJCWxpbmtfYWx0X29kYl9lbnRyeShsYXN0LCBjcCAtIGxhc3QsCisJCQkJCQlyZWxhdGl2ZV9iYXNlLCBkZXB0aCk7CisJCQl9CisJCX0KKwkJd2hpbGUgKGNwIDwgZXAgJiYgKmNwID09IHNlcCkKKwkJCWNwKys7CisJCWxhc3QgPSBjcDsKKwl9Cit9CisKK3ZvaWQgcmVhZF9pbmZvX2FsdGVybmF0ZXMoY29uc3QgY2hhciAqIHJlbGF0aXZlX2Jhc2UsIGludCBkZXB0aCkKK3sKKwljaGFyICptYXA7CisJc2l6ZV90IG1hcHN6OworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IGNoYXIgYWx0X2ZpbGVfbmFtZVtdID0gImluZm8vYWx0ZXJuYXRlcyI7CisJLyogR2l2ZW4gdGhhdCByZWxhdGl2ZV9iYXNlIGlzIG5vIGxvbmdlciB0aGFuIFBBVEhfTUFYLAorCSAgIGVuc3VyZSB0aGF0ICJwYXRoIiBoYXMgZW5vdWdoIHNwYWNlIHRvIGFwcGVuZCAiLyIsIHRoZQorCSAgIGZpbGUgbmFtZSwgImluZm8vYWx0ZXJuYXRlcyIsIGFuZCBhIHRyYWlsaW5nIE5VTC4gICovCisJY2hhciBwYXRoW1BBVEhfTUFYICsgMSArIHNpemVvZiBhbHRfZmlsZV9uYW1lXTsKKwlpbnQgZmQ7CisKKwlzcHJpbnRmKHBhdGgsICIlcy8lcyIsIHJlbGF0aXZlX2Jhc2UsIGFsdF9maWxlX25hbWUpOworCWZkID0gZ2l0X29wZW5fbm9hdGltZShwYXRoKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm47CisJaWYgKGZzdGF0KGZkLCAmc3QpIHx8IChzdC5zdF9zaXplID09IDApKSB7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKwltYXBzeiA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJbWFwID0geG1tYXAoTlVMTCwgbWFwc3osIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwljbG9zZShmZCk7CisKKwlsaW5rX2FsdF9vZGJfZW50cmllcyhtYXAsIG1hcCArIG1hcHN6LCAnXG4nLCByZWxhdGl2ZV9iYXNlLCBkZXB0aCk7CisKKwltdW5tYXAobWFwLCBtYXBzeik7Cit9CisKK3ZvaWQgYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShjb25zdCBjaGFyICpyZWZlcmVuY2UpCit7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9jayA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKwlpbnQgZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfYXBwZW5kKGxvY2ssIGdpdF9wYXRoKCJvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIpLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJY2hhciAqYWx0ID0gbWtwYXRoKCIlc1xuIiwgcmVmZXJlbmNlKTsKKwl3cml0ZV9vcl9kaWUoZmQsIGFsdCwgc3RybGVuKGFsdCkpOworCWlmIChjb21taXRfbG9ja19maWxlKGxvY2spKQorCQlkaWUoImNvdWxkIG5vdCBjbG9zZSBhbHRlcm5hdGVzIGZpbGUiKTsKKwlpZiAoYWx0X29kYl90YWlsKQorCQlsaW5rX2FsdF9vZGJfZW50cmllcyhhbHQsIGFsdCArIHN0cmxlbihhbHQpLCAnXG4nLCBOVUxMLCAwKTsKK30KKwordm9pZCBmb3JlYWNoX2FsdF9vZGIoYWx0X29kYl9mbiBmbiwgdm9pZCAqY2IpCit7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmVudDsKKworCXByZXBhcmVfYWx0X29kYigpOworCWZvciAoZW50ID0gYWx0X29kYl9saXN0OyBlbnQ7IGVudCA9IGVudC0+bmV4dCkKKwkJaWYgKGZuKGVudCwgY2IpKQorCQkJcmV0dXJuOworfQorCit2b2lkIHByZXBhcmVfYWx0X29kYih2b2lkKQoreworCWNvbnN0IGNoYXIgKmFsdDsKKworCWlmIChhbHRfb2RiX3RhaWwpCisJCXJldHVybjsKKworCWFsdCA9IGdldGVudihBTFRFUk5BVEVfREJfRU5WSVJPTk1FTlQpOworCWlmICghYWx0KSBhbHQgPSAiIjsKKworCWFsdF9vZGJfdGFpbCA9ICZhbHRfb2RiX2xpc3Q7CisJbGlua19hbHRfb2RiX2VudHJpZXMoYWx0LCBhbHQgKyBzdHJsZW4oYWx0KSwgUEFUSF9TRVAsIE5VTEwsIDApOworCisJcmVhZF9pbmZvX2FsdGVybmF0ZXMoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaGFzX2xvb3NlX29iamVjdF9sb2NhbChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNoYXIgKm5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKKwlyZXR1cm4gIWFjY2VzcyhuYW1lLCBGX09LKTsKK30KKworaW50IGhhc19sb29zZV9vYmplY3Rfbm9ubG9jYWwoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0OworCXByZXBhcmVfYWx0X29kYigpOworCWZvciAoYWx0ID0gYWx0X29kYl9saXN0OyBhbHQ7IGFsdCA9IGFsdC0+bmV4dCkgeworCQlmaWxsX3NoYTFfcGF0aChhbHQtPm5hbWUsIHNoYTEpOworCQlpZiAoIWFjY2VzcyhhbHQtPmJhc2UsIEZfT0spKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhc19sb29zZV9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gaGFzX2xvb3NlX29iamVjdF9sb2NhbChzaGExKSB8fAorCSAgICAgICBoYXNfbG9vc2Vfb2JqZWN0X25vbmxvY2FsKHNoYTEpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfdXNlZF9jdHI7CitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfbW1hcF9jYWxsczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGVha19wYWNrX29wZW5fd2luZG93czsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja19vcGVuX3dpbmRvd3M7CitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfb3Blbl9mZHM7CitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfbWF4X2ZkczsKK3N0YXRpYyBzaXplX3QgcGVha19wYWNrX21hcHBlZDsKK3N0YXRpYyBzaXplX3QgcGFja19tYXBwZWQ7CitzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja2VkX2dpdDsKKwordm9pZCBwYWNrX3JlcG9ydCh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLAorCQkicGFja19yZXBvcnQ6IGdldHBhZ2VzaXplKCkgICAgICAgICAgICA9ICUxMCIgU1pfRk1UICJcbiIKKwkJInBhY2tfcmVwb3J0OiBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgPSAlMTAiIFNaX0ZNVCAiXG4iCisJCSJwYWNrX3JlcG9ydDogY29yZS5wYWNrZWRHaXRMaW1pdCAgICAgID0gJTEwIiBTWl9GTVQgIlxuIiwKKwkJc3pfZm10KGdldHBhZ2VzaXplKCkpLAorCQlzel9mbXQocGFja2VkX2dpdF93aW5kb3dfc2l6ZSksCisJCXN6X2ZtdChwYWNrZWRfZ2l0X2xpbWl0KSk7CisJZnByaW50ZihzdGRlcnIsCisJCSJwYWNrX3JlcG9ydDogcGFja191c2VkX2N0ciAgICAgICAgICAgID0gJTEwdVxuIgorCQkicGFja19yZXBvcnQ6IHBhY2tfbW1hcF9jYWxscyAgICAgICAgICA9ICUxMHVcbiIKKwkJInBhY2tfcmVwb3J0OiBwYWNrX29wZW5fd2luZG93cyAgICAgICAgPSAlMTB1IC8gJTEwdVxuIgorCQkicGFja19yZXBvcnQ6IHBhY2tfbWFwcGVkICAgICAgICAgICAgICA9ICIKKwkJCSIlMTAiIFNaX0ZNVCAiIC8gJTEwIiBTWl9GTVQgIlxuIiwKKwkJcGFja191c2VkX2N0ciwKKwkJcGFja19tbWFwX2NhbGxzLAorCQlwYWNrX29wZW5fd2luZG93cywgcGVha19wYWNrX29wZW5fd2luZG93cywKKwkJc3pfZm10KHBhY2tfbWFwcGVkKSwgc3pfZm10KHBlYWtfcGFja19tYXBwZWQpKTsKK30KKworc3RhdGljIGludCBjaGVja19wYWNrZWRfZ2l0X2lkeChjb25zdCBjaGFyICpwYXRoLCAgc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJdm9pZCAqaWR4X21hcDsKKwlzdHJ1Y3QgcGFja19pZHhfaGVhZGVyICpoZHI7CisJc2l6ZV90IGlkeF9zaXplOworCXVpbnQzMl90IHZlcnNpb24sIG5yLCBpLCAqaW5kZXg7CisJaW50IGZkID0gZ2l0X29wZW5fbm9hdGltZShwYXRoKTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoZnN0YXQoZmQsICZzdCkpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gLTE7CisJfQorCWlkeF9zaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKwlpZiAoaWR4X3NpemUgPCA0ICogMjU2ICsgMjAgKyAyMCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiBlcnJvcigiaW5kZXggZmlsZSAlcyBpcyB0b28gc21hbGwiLCBwYXRoKTsKKwl9CisJaWR4X21hcCA9IHhtbWFwKE5VTEwsIGlkeF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJY2xvc2UoZmQpOworCisJaGRyID0gaWR4X21hcDsKKwlpZiAoaGRyLT5pZHhfc2lnbmF0dXJlID09IGh0b25sKFBBQ0tfSURYX1NJR05BVFVSRSkpIHsKKwkJdmVyc2lvbiA9IG50b2hsKGhkci0+aWR4X3ZlcnNpb24pOworCQlpZiAodmVyc2lvbiA8IDIgfHwgdmVyc2lvbiA+IDIpIHsKKwkJCW11bm1hcChpZHhfbWFwLCBpZHhfc2l6ZSk7CisJCQlyZXR1cm4gZXJyb3IoImluZGV4IGZpbGUgJXMgaXMgdmVyc2lvbiAlIlBSSXUzMgorCQkJCSAgICAgIiBhbmQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJpbmFyeSIKKwkJCQkgICAgICIgKHRyeSB1cGdyYWRpbmcgR0lUIHRvIGEgbmV3ZXIgdmVyc2lvbikiLAorCQkJCSAgICAgcGF0aCwgdmVyc2lvbik7CisJCX0KKwl9IGVsc2UKKwkJdmVyc2lvbiA9IDE7CisKKwluciA9IDA7CisJaW5kZXggPSBpZHhfbWFwOworCWlmICh2ZXJzaW9uID4gMSkKKwkJaW5kZXggKz0gMjsgIC8qIHNraXAgaW5kZXggaGVhZGVyICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXVpbnQzMl90IG4gPSBudG9obChpbmRleFtpXSk7CisJCWlmIChuIDwgbnIpIHsKKwkJCW11bm1hcChpZHhfbWFwLCBpZHhfc2l6ZSk7CisJCQlyZXR1cm4gZXJyb3IoIm5vbi1tb25vdG9uaWMgaW5kZXggJXMiLCBwYXRoKTsKKwkJfQorCQluciA9IG47CisJfQorCisJaWYgKHZlcnNpb24gPT0gMSkgeworCQkvKgorCQkgKiBUb3RhbCBzaXplOgorCQkgKiAgLSAyNTYgaW5kZXggZW50cmllcyA0IGJ5dGVzIGVhY2gKKwkJICogIC0gMjQtYnl0ZSBlbnRyaWVzICogbnIgKDIwLWJ5dGUgc2hhMSArIDQtYnl0ZSBvZmZzZXQpCisJCSAqICAtIDIwLWJ5dGUgU0hBMSBvZiB0aGUgcGFja2ZpbGUKKwkJICogIC0gMjAtYnl0ZSBTSEExIGZpbGUgY2hlY2tzdW0KKwkJICovCisJCWlmIChpZHhfc2l6ZSAhPSA0KjI1NiArIG5yICogMjQgKyAyMCArIDIwKSB7CisJCQltdW5tYXAoaWR4X21hcCwgaWR4X3NpemUpOworCQkJcmV0dXJuIGVycm9yKCJ3cm9uZyBpbmRleCB2MSBmaWxlIHNpemUgaW4gJXMiLCBwYXRoKTsKKwkJfQorCX0gZWxzZSBpZiAodmVyc2lvbiA9PSAyKSB7CisJCS8qCisJCSAqIE1pbmltdW0gc2l6ZToKKwkJICogIC0gOCBieXRlcyBvZiBoZWFkZXIKKwkJICogIC0gMjU2IGluZGV4IGVudHJpZXMgNCBieXRlcyBlYWNoCisJCSAqICAtIDIwLWJ5dGUgc2hhMSBlbnRyeSAqIG5yCisJCSAqICAtIDQtYnl0ZSBjcmMgZW50cnkgKiBucgorCQkgKiAgLSA0LWJ5dGUgb2Zmc2V0IGVudHJ5ICogbnIKKwkJICogIC0gMjAtYnl0ZSBTSEExIG9mIHRoZSBwYWNrZmlsZQorCQkgKiAgLSAyMC1ieXRlIFNIQTEgZmlsZSBjaGVja3N1bQorCQkgKiBBbmQgYWZ0ZXIgdGhlIDQtYnl0ZSBvZmZzZXQgdGFibGUgbWlnaHQgYmUgYQorCQkgKiB2YXJpYWJsZSBzaXplZCB0YWJsZSBjb250YWluaW5nIDgtYnl0ZSBlbnRyaWVzCisJCSAqIGZvciBvZmZzZXRzIGxhcmdlciB0aGFuIDJeMzEuCisJCSAqLworCQl1bnNpZ25lZCBsb25nIG1pbl9zaXplID0gOCArIDQqMjU2ICsgbnIqKDIwICsgNCArIDQpICsgMjAgKyAyMDsKKwkJdW5zaWduZWQgbG9uZyBtYXhfc2l6ZSA9IG1pbl9zaXplOworCQlpZiAobnIpCisJCQltYXhfc2l6ZSArPSAobnIgLSAxKSo4OworCQlpZiAoaWR4X3NpemUgPCBtaW5fc2l6ZSB8fCBpZHhfc2l6ZSA+IG1heF9zaXplKSB7CisJCQltdW5tYXAoaWR4X21hcCwgaWR4X3NpemUpOworCQkJcmV0dXJuIGVycm9yKCJ3cm9uZyBpbmRleCB2MiBmaWxlIHNpemUgaW4gJXMiLCBwYXRoKTsKKwkJfQorCQlpZiAoaWR4X3NpemUgIT0gbWluX3NpemUgJiYKKwkJICAgIC8qCisJCSAgICAgKiBtYWtlIHN1cmUgd2UgY2FuIGRlYWwgd2l0aCBsYXJnZSBwYWNrIG9mZnNldHMuCisJCSAgICAgKiAzMS1iaXQgc2lnbmVkIG9mZnNldCB3b24ndCBiZSBlbm91Z2gsIG5laXRoZXIKKwkJICAgICAqIDMyLWJpdCB1bnNpZ25lZCBvbmUgd2lsbCBiZS4KKwkJICAgICAqLworCQkgICAgKHNpemVvZihvZmZfdCkgPD0gNCkpIHsKKwkJCW11bm1hcChpZHhfbWFwLCBpZHhfc2l6ZSk7CisJCQlyZXR1cm4gZXJyb3IoInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QgaW4gJXMiLCBwYXRoKTsKKwkJfQorCX0KKworCXAtPmluZGV4X3ZlcnNpb24gPSB2ZXJzaW9uOworCXAtPmluZGV4X2RhdGEgPSBpZHhfbWFwOworCXAtPmluZGV4X3NpemUgPSBpZHhfc2l6ZTsKKwlwLT5udW1fb2JqZWN0cyA9IG5yOworCXJldHVybiAwOworfQorCitpbnQgb3Blbl9wYWNrX2luZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWNoYXIgKmlkeF9uYW1lOworCWludCByZXQ7CisKKwlpZiAocC0+aW5kZXhfZGF0YSkKKwkJcmV0dXJuIDA7CisKKwlpZHhfbmFtZSA9IHhzdHJkdXAocC0+cGFja19uYW1lKTsKKwlzdHJjcHkoaWR4X25hbWUgKyBzdHJsZW4oaWR4X25hbWUpIC0gc3RybGVuKCIucGFjayIpLCAiLmlkeCIpOworCXJldCA9IGNoZWNrX3BhY2tlZF9naXRfaWR4KGlkeF9uYW1lLCBwKTsKKwlmcmVlKGlkeF9uYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzY2FuX3dpbmRvd3Moc3RydWN0IHBhY2tlZF9naXQgKnAsCisJc3RydWN0IHBhY2tlZF9naXQgKipscnVfcCwKKwlzdHJ1Y3QgcGFja193aW5kb3cgKipscnVfdywKKwlzdHJ1Y3QgcGFja193aW5kb3cgKipscnVfbCkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKncsICp3X2w7CisKKwlmb3IgKHdfbCA9IE5VTEwsIHcgPSBwLT53aW5kb3dzOyB3OyB3ID0gdy0+bmV4dCkgeworCQlpZiAoIXctPmludXNlX2NudCkgeworCQkJaWYgKCEqbHJ1X3cgfHwgdy0+bGFzdF91c2VkIDwgKCpscnVfdyktPmxhc3RfdXNlZCkgeworCQkJCSpscnVfcCA9IHA7CisJCQkJKmxydV93ID0gdzsKKwkJCQkqbHJ1X2wgPSB3X2w7CisJCQl9CisJCX0KKwkJd19sID0gdzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdW51c2Vfb25lX3dpbmRvdyhzdHJ1Y3QgcGFja2VkX2dpdCAqY3VycmVudCwgaW50IGtlZXBfZmQpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnAsICpscnVfcCA9IE5VTEw7CisJc3RydWN0IHBhY2tfd2luZG93ICpscnVfdyA9IE5VTEwsICpscnVfbCA9IE5VTEw7CisKKwlpZiAoY3VycmVudCkKKwkJc2Nhbl93aW5kb3dzKGN1cnJlbnQsICZscnVfcCwgJmxydV93LCAmbHJ1X2wpOworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KQorCQlzY2FuX3dpbmRvd3MocCwgJmxydV9wLCAmbHJ1X3csICZscnVfbCk7CisJaWYgKGxydV9wKSB7CisJCW11bm1hcChscnVfdy0+YmFzZSwgbHJ1X3ctPmxlbik7CisJCXBhY2tfbWFwcGVkIC09IGxydV93LT5sZW47CisJCWlmIChscnVfbCkKKwkJCWxydV9sLT5uZXh0ID0gbHJ1X3ctPm5leHQ7CisJCWVsc2UgeworCQkJbHJ1X3AtPndpbmRvd3MgPSBscnVfdy0+bmV4dDsKKwkJCWlmICghbHJ1X3AtPndpbmRvd3MgJiYgbHJ1X3AtPnBhY2tfZmQgIT0gLTEKKwkJCQkmJiBscnVfcC0+cGFja19mZCAhPSBrZWVwX2ZkKSB7CisJCQkJY2xvc2UobHJ1X3AtPnBhY2tfZmQpOworCQkJCXBhY2tfb3Blbl9mZHMtLTsKKwkJCQlscnVfcC0+cGFja19mZCA9IC0xOworCQkJfQorCQl9CisJCWZyZWUobHJ1X3cpOworCQlwYWNrX29wZW5fd2luZG93cy0tOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmVsZWFzZV9wYWNrX21lbW9yeShzaXplX3QgbmVlZCwgaW50IGZkKQoreworCXNpemVfdCBjdXIgPSBwYWNrX21hcHBlZDsKKwl3aGlsZSAobmVlZCA+PSAoY3VyIC0gcGFja19tYXBwZWQpICYmIHVudXNlX29uZV93aW5kb3coTlVMTCwgZmQpKQorCQk7IC8qIG5vdGhpbmcgKi8KK30KKwordm9pZCAqeG1tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsCisJaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisJdm9pZCAqcmV0ID0gbW1hcChzdGFydCwgbGVuZ3RoLCBwcm90LCBmbGFncywgZmQsIG9mZnNldCk7CisJaWYgKHJldCA9PSBNQVBfRkFJTEVEKSB7CisJCWlmICghbGVuZ3RoKQorCQkJcmV0dXJuIE5VTEw7CisJCXJlbGVhc2VfcGFja19tZW1vcnkobGVuZ3RoLCBmZCk7CisJCXJldCA9IG1tYXAoc3RhcnQsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQpOworCQlpZiAocmV0ID09IE1BUF9GQUlMRUQpCisJCQlkaWVfZXJybm8oIk91dCBvZiBtZW1vcnk/IG1tYXAgZmFpbGVkIik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgY2xvc2VfcGFja193aW5kb3dzKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCXdoaWxlIChwLT53aW5kb3dzKSB7CisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqdyA9IHAtPndpbmRvd3M7CisKKwkJaWYgKHctPmludXNlX2NudCkKKwkJCWRpZSgicGFjayAnJXMnIHN0aWxsIGhhcyBvcGVuIHdpbmRvd3MgdG8gaXQiLAorCQkJICAgIHAtPnBhY2tfbmFtZSk7CisJCW11bm1hcCh3LT5iYXNlLCB3LT5sZW4pOworCQlwYWNrX21hcHBlZCAtPSB3LT5sZW47CisJCXBhY2tfb3Blbl93aW5kb3dzLS07CisJCXAtPndpbmRvd3MgPSB3LT5uZXh0OworCQlmcmVlKHcpOworCX0KK30KKwordm9pZCB1bnVzZV9wYWNrKHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3Vyc29yKQoreworCXN0cnVjdCBwYWNrX3dpbmRvdyAqdyA9ICp3X2N1cnNvcjsKKwlpZiAodykgeworCQl3LT5pbnVzZV9jbnQtLTsKKwkJKndfY3Vyc29yID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgY2xvc2VfcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlpZiAocC0+aW5kZXhfZGF0YSkgeworCQltdW5tYXAoKHZvaWQgKilwLT5pbmRleF9kYXRhLCBwLT5pbmRleF9zaXplKTsKKwkJcC0+aW5kZXhfZGF0YSA9IE5VTEw7CisJfQorfQorCisvKgorICogVGhpcyBpcyB1c2VkIGJ5IGdpdC1yZXBhY2sgaW4gY2FzZSBhIG5ld2x5IGNyZWF0ZWQgcGFjayBoYXBwZW5zIHRvCisgKiBjb250YWluIHRoZSBzYW1lIHNldCBvZiBvYmplY3RzIGFzIGFuIGV4aXN0aW5nIG9uZS4gIEluIHRoYXQgY2FzZQorICogdGhlIHJlc3VsdGluZyBmaWxlIG1pZ2h0IGJlIGRpZmZlcmVudCBldmVuIGlmIGl0cyBuYW1lIHdvdWxkIGJlIHRoZQorICogc2FtZS4gIEl0IGlzIGJlc3QgdG8gY2xvc2UgYW55IHJlZmVyZW5jZSB0byB0aGUgb2xkIHBhY2sgYmVmb3JlIGl0IGlzCisgKiByZXBsYWNlZCBvbiBkaXNrLiAgT2YgY291cnNlIG5vIGluZGV4IHBvaW50ZXJzIG5vciB3aW5kb3dzIGZvciBnaXZlbiBwYWNrCisgKiBtdXN0IHN1YnNpc3QgYXQgdGhpcyBwb2ludC4gIElmIGV2ZXIgb2JqZWN0cyBmcm9tIHRoaXMgcGFjayBhcmUgcmVxdWVzdGVkCisgKiBhZ2FpbiwgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSBwYWNrIHdpbGwgYmUgcmVpbml0aWFsaXplZCB0aHJvdWdoCisgKiByZXByZXBhcmVfcGFja2VkX2dpdCgpLgorICovCit2b2lkIGZyZWVfcGFja19ieV9uYW1lKGNvbnN0IGNoYXIgKnBhY2tfbmFtZSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgKipwcCA9ICZwYWNrZWRfZ2l0OworCisJd2hpbGUgKCpwcCkgeworCQlwID0gKnBwOworCQlpZiAoc3RyY21wKHBhY2tfbmFtZSwgcC0+cGFja19uYW1lKSA9PSAwKSB7CisJCQljbGVhcl9kZWx0YV9iYXNlX2NhY2hlKCk7CisJCQljbG9zZV9wYWNrX3dpbmRvd3MocCk7CisJCQlpZiAocC0+cGFja19mZCAhPSAtMSkgeworCQkJCWNsb3NlKHAtPnBhY2tfZmQpOworCQkJCXBhY2tfb3Blbl9mZHMtLTsKKwkJCX0KKwkJCWNsb3NlX3BhY2tfaW5kZXgocCk7CisJCQlmcmVlKHAtPmJhZF9vYmplY3Rfc2hhMSk7CisJCQkqcHAgPSBwLT5uZXh0OworCQkJaWYgKGxhc3RfZm91bmRfcGFjayA9PSBwKQorCQkJCWxhc3RfZm91bmRfcGFjayA9IE5VTEw7CisJCQlmcmVlKHApOworCQkJcmV0dXJuOworCQl9CisJCXBwID0gJnAtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9tYXhfZmRfbGltaXQodm9pZCkKK3sKKyNpZmRlZiBSTElNSVRfTk9GSUxFCisJc3RydWN0IHJsaW1pdCBsaW07CisKKwlpZiAoZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZsaW0pKQorCQlkaWVfZXJybm8oImNhbm5vdCBnZXQgUkxJTUlUX05PRklMRSIpOworCisJcmV0dXJuIGxpbS5ybGltX2N1cjsKKyNlbGlmIGRlZmluZWQoX1NDX09QRU5fTUFYKQorCXJldHVybiBzeXNjb25mKF9TQ19PUEVOX01BWCk7CisjZWxpZiBkZWZpbmVkKE9QRU5fTUFYKQorCXJldHVybiBPUEVOX01BWDsKKyNlbHNlCisJcmV0dXJuIDE7IC8qIHNlZSB0aGUgY2FsbGVyIDstKSAqLworI2VuZGlmCit9CisKKy8qCisgKiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5IGFzIHRoaXMgbGVha3MgcC0+cGFja19mZCBvbiBlcnJvciByZXR1cm47CisgKiBjYWxsIG9wZW5fcGFja2VkX2dpdCgpIGluc3RlYWQuCisgKi8KK3N0YXRpYyBpbnQgb3Blbl9wYWNrZWRfZ2l0XzEoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHBhY2tfaGVhZGVyIGhkcjsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXVuc2lnbmVkIGNoYXIgKmlkeF9zaGExOworCWxvbmcgZmRfZmxhZzsKKworCWlmICghcC0+aW5kZXhfZGF0YSAmJiBvcGVuX3BhY2tfaW5kZXgocCkpCisJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgaW5kZXggdW5hdmFpbGFibGUiLCBwLT5wYWNrX25hbWUpOworCisJaWYgKCFwYWNrX21heF9mZHMpIHsKKwkJdW5zaWduZWQgaW50IG1heF9mZHMgPSBnZXRfbWF4X2ZkX2xpbWl0KCk7CisKKwkJLyogU2F2ZSAzIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCAyMiBmb3Igd29yayAqLworCQlpZiAoMjUgPCBtYXhfZmRzKQorCQkJcGFja19tYXhfZmRzID0gbWF4X2ZkcyAtIDI1OworCQllbHNlCisJCQlwYWNrX21heF9mZHMgPSAxOworCX0KKworCXdoaWxlIChwYWNrX21heF9mZHMgPD0gcGFja19vcGVuX2ZkcyAmJiB1bnVzZV9vbmVfd2luZG93KE5VTEwsIC0xKSkKKwkJOyAvKiBub3RoaW5nICovCisKKwlwLT5wYWNrX2ZkID0gZ2l0X29wZW5fbm9hdGltZShwLT5wYWNrX25hbWUpOworCWlmIChwLT5wYWNrX2ZkIDwgMCB8fCBmc3RhdChwLT5wYWNrX2ZkLCAmc3QpKQorCQlyZXR1cm4gLTE7CisJcGFja19vcGVuX2ZkcysrOworCisJLyogSWYgd2UgY3JlYXRlZCB0aGUgc3RydWN0IGJlZm9yZSB3ZSBoYWQgdGhlIHBhY2sgd2UgbGFjayBzaXplLiAqLworCWlmICghcC0+cGFja19zaXplKSB7CisJCWlmICghU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgbm90IGEgcmVndWxhciBmaWxlIiwgcC0+cGFja19uYW1lKTsKKwkJcC0+cGFja19zaXplID0gc3Quc3Rfc2l6ZTsKKwl9IGVsc2UgaWYgKHAtPnBhY2tfc2l6ZSAhPSBzdC5zdF9zaXplKQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIHNpemUgY2hhbmdlZCIsIHAtPnBhY2tfbmFtZSk7CisKKwkvKiBXZSBsZWF2ZSB0aGVzZSBmaWxlIGRlc2NyaXB0b3JzIG9wZW4gd2l0aCBzbGlkaW5nIG1tYXA7CisJICogdGhlcmUgaXMgbm8gcG9pbnQga2VlcGluZyB0aGVtIG9wZW4gYWNyb3NzIGV4ZWMoKSwgdGhvdWdoLgorCSAqLworCWZkX2ZsYWcgPSBmY250bChwLT5wYWNrX2ZkLCBGX0dFVEZELCAwKTsKKwlpZiAoZmRfZmxhZyA8IDApCisJCXJldHVybiBlcnJvcigiY2Fubm90IGRldGVybWluZSBmaWxlIGRlc2NyaXB0b3IgZmxhZ3MiKTsKKwlmZF9mbGFnIHw9IEZEX0NMT0VYRUM7CisJaWYgKGZjbnRsKHAtPnBhY2tfZmQsIEZfU0VURkQsIGZkX2ZsYWcpID09IC0xKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBzZXQgRkRfQ0xPRVhFQyIpOworCisJLyogVmVyaWZ5IHdlIHJlY29nbml6ZSB0aGlzIHBhY2sgZmlsZSBmb3JtYXQuICovCisJaWYgKHJlYWRfaW5fZnVsbChwLT5wYWNrX2ZkLCAmaGRyLCBzaXplb2YoaGRyKSkgIT0gc2l6ZW9mKGhkcikpCisJCXJldHVybiBlcnJvcigiZmlsZSAlcyBpcyBmYXIgdG9vIHNob3J0IHRvIGJlIGEgcGFja2ZpbGUiLCBwLT5wYWNrX25hbWUpOworCWlmIChoZHIuaGRyX3NpZ25hdHVyZSAhPSBodG9ubChQQUNLX1NJR05BVFVSRSkpCisJCXJldHVybiBlcnJvcigiZmlsZSAlcyBpcyBub3QgYSBHSVQgcGFja2ZpbGUiLCBwLT5wYWNrX25hbWUpOworCWlmICghcGFja192ZXJzaW9uX29rKGhkci5oZHJfdmVyc2lvbikpCisJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgaXMgdmVyc2lvbiAlIlBSSXUzMiIgYW5kIG5vdCIKKwkJCSIgc3VwcG9ydGVkICh0cnkgdXBncmFkaW5nIEdJVCB0byBhIG5ld2VyIHZlcnNpb24pIiwKKwkJCXAtPnBhY2tfbmFtZSwgbnRvaGwoaGRyLmhkcl92ZXJzaW9uKSk7CisKKwkvKiBWZXJpZnkgdGhlIHBhY2sgbWF0Y2hlcyBpdHMgaW5kZXguICovCisJaWYgKHAtPm51bV9vYmplY3RzICE9IG50b2hsKGhkci5oZHJfZW50cmllcykpCisJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgY2xhaW1zIHRvIGhhdmUgJSJQUkl1MzIiIG9iamVjdHMiCisJCQkgICAgICIgd2hpbGUgaW5kZXggaW5kaWNhdGVzICUiUFJJdTMyIiBvYmplY3RzIiwKKwkJCSAgICAgcC0+cGFja19uYW1lLCBudG9obChoZHIuaGRyX2VudHJpZXMpLAorCQkJICAgICBwLT5udW1fb2JqZWN0cyk7CisJaWYgKGxzZWVrKHAtPnBhY2tfZmQsIHAtPnBhY2tfc2l6ZSAtIHNpemVvZihzaGExKSwgU0VFS19TRVQpID09IC0xKQorCQlyZXR1cm4gZXJyb3IoImVuZCBvZiBwYWNrZmlsZSAlcyBpcyB1bmF2YWlsYWJsZSIsIHAtPnBhY2tfbmFtZSk7CisJaWYgKHJlYWRfaW5fZnVsbChwLT5wYWNrX2ZkLCBzaGExLCBzaXplb2Yoc2hhMSkpICE9IHNpemVvZihzaGExKSkKKwkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBzaWduYXR1cmUgaXMgdW5hdmFpbGFibGUiLCBwLT5wYWNrX25hbWUpOworCWlkeF9zaGExID0gKCh1bnNpZ25lZCBjaGFyICopcC0+aW5kZXhfZGF0YSkgKyBwLT5pbmRleF9zaXplIC0gNDA7CisJaWYgKGhhc2hjbXAoc2hhMSwgaWR4X3NoYTEpKQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGRvZXMgbm90IG1hdGNoIGluZGV4IiwgcC0+cGFja19uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcGVuX3BhY2tlZF9naXQoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJaWYgKCFvcGVuX3BhY2tlZF9naXRfMShwKSkKKwkJcmV0dXJuIDA7CisJaWYgKHAtPnBhY2tfZmQgIT0gLTEpIHsKKwkJY2xvc2UocC0+cGFja19mZCk7CisJCXBhY2tfb3Blbl9mZHMtLTsKKwkJcC0+cGFja19mZCA9IC0xOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgaW5fd2luZG93KHN0cnVjdCBwYWNrX3dpbmRvdyAqd2luLCBvZmZfdCBvZmZzZXQpCit7CisJLyogV2UgbXVzdCBwcm9taXNlIGF0IGxlYXN0IDIwIGJ5dGVzIChvbmUgaGFzaCkgYWZ0ZXIgdGhlCisJICogb2Zmc2V0IGlzIGF2YWlsYWJsZSBmcm9tIHRoaXMgd2luZG93LCBvdGhlcndpc2UgdGhlIG9mZnNldAorCSAqIGlzIG5vdCBhY3R1YWxseSBpbiB0aGlzIHdpbmRvdyBhbmQgYSBkaWZmZXJlbnQgd2luZG93ICh3aGljaAorCSAqIGhhcyB0aGF0IG9uZSBoYXNoIGV4Y2VzcykgbXVzdCBiZSB1c2VkLiAgVGhpcyBpcyB0byBzdXBwb3J0CisJICogdGhlIG9iamVjdCBoZWFkZXIgYW5kIGRlbHRhIGJhc2UgcGFyc2luZyByb3V0aW5lcyBiZWxvdy4KKwkgKi8KKwlvZmZfdCB3aW5fb2ZmID0gd2luLT5vZmZzZXQ7CisJcmV0dXJuIHdpbl9vZmYgPD0gb2Zmc2V0CisJCSYmIChvZmZzZXQgKyAyMCkgPD0gKHdpbl9vZmYgKyB3aW4tPmxlbik7Cit9CisKK3Vuc2lnbmVkIGNoYXIgKnVzZV9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQlzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnNvciwKKwkJb2ZmX3Qgb2Zmc2V0LAorCQl1bnNpZ25lZCBsb25nICpsZWZ0KQoreworCXN0cnVjdCBwYWNrX3dpbmRvdyAqd2luID0gKndfY3Vyc29yOworCisJLyogU2luY2UgcGFja2ZpbGVzIGVuZCBpbiBhIGhhc2ggb2YgdGhlaXIgY29udGVudCBhbmQgaXQncworCSAqIHBvaW50bGVzcyB0byBhc2sgZm9yIGFuIG9mZnNldCBpbnRvIHRoZSBtaWRkbGUgb2YgdGhhdAorCSAqIGhhc2gsIGFuZCB0aGUgaW5fd2luZG93IGZ1bmN0aW9uIGFib3ZlIHdvdWxkbid0IG1hdGNoCisJICogZG9uJ3QgYWxsb3cgYW4gb2Zmc2V0IHRvbyBjbG9zZSB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCSAqLworCWlmICghcC0+cGFja19zaXplICYmIHAtPnBhY2tfZmQgPT0gLTEgJiYgb3Blbl9wYWNrZWRfZ2l0KHApKQorCQlkaWUoInBhY2tmaWxlICVzIGNhbm5vdCBiZSBhY2Nlc3NlZCIsIHAtPnBhY2tfbmFtZSk7CisJaWYgKG9mZnNldCA+IChwLT5wYWNrX3NpemUgLSAyMCkpCisJCWRpZSgib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFja2ZpbGUgKHRydW5jYXRlZCBwYWNrPykiKTsKKworCWlmICghd2luIHx8ICFpbl93aW5kb3cod2luLCBvZmZzZXQpKSB7CisJCWlmICh3aW4pCisJCQl3aW4tPmludXNlX2NudC0tOworCQlmb3IgKHdpbiA9IHAtPndpbmRvd3M7IHdpbjsgd2luID0gd2luLT5uZXh0KSB7CisJCQlpZiAoaW5fd2luZG93KHdpbiwgb2Zmc2V0KSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIXdpbikgeworCQkJc2l6ZV90IHdpbmRvd19hbGlnbiA9IHBhY2tlZF9naXRfd2luZG93X3NpemUgLyAyOworCQkJb2ZmX3QgbGVuOworCisJCQlpZiAocC0+cGFja19mZCA9PSAtMSAmJiBvcGVuX3BhY2tlZF9naXQocCkpCisJCQkJZGllKCJwYWNrZmlsZSAlcyBjYW5ub3QgYmUgYWNjZXNzZWQiLCBwLT5wYWNrX25hbWUpOworCisJCQl3aW4gPSB4Y2FsbG9jKDEsIHNpemVvZigqd2luKSk7CisJCQl3aW4tPm9mZnNldCA9IChvZmZzZXQgLyB3aW5kb3dfYWxpZ24pICogd2luZG93X2FsaWduOworCQkJbGVuID0gcC0+cGFja19zaXplIC0gd2luLT5vZmZzZXQ7CisJCQlpZiAobGVuID4gcGFja2VkX2dpdF93aW5kb3dfc2l6ZSkKKwkJCQlsZW4gPSBwYWNrZWRfZ2l0X3dpbmRvd19zaXplOworCQkJd2luLT5sZW4gPSAoc2l6ZV90KWxlbjsKKwkJCXBhY2tfbWFwcGVkICs9IHdpbi0+bGVuOworCQkJd2hpbGUgKHBhY2tlZF9naXRfbGltaXQgPCBwYWNrX21hcHBlZAorCQkJCSYmIHVudXNlX29uZV93aW5kb3cocCwgcC0+cGFja19mZCkpCisJCQkJOyAvKiBub3RoaW5nICovCisJCQl3aW4tPmJhc2UgPSB4bW1hcChOVUxMLCB3aW4tPmxlbiwKKwkJCQlQUk9UX1JFQUQsIE1BUF9QUklWQVRFLAorCQkJCXAtPnBhY2tfZmQsIHdpbi0+b2Zmc2V0KTsKKwkJCWlmICh3aW4tPmJhc2UgPT0gTUFQX0ZBSUxFRCkKKwkJCQlkaWUoInBhY2tmaWxlICVzIGNhbm5vdCBiZSBtYXBwZWQ6ICVzIiwKKwkJCQkJcC0+cGFja19uYW1lLAorCQkJCQlzdHJlcnJvcihlcnJubykpOworCQkJaWYgKCF3aW4tPm9mZnNldCAmJiB3aW4tPmxlbiA9PSBwLT5wYWNrX3NpemUKKwkJCQkmJiAhcC0+ZG9fbm90X2Nsb3NlKSB7CisJCQkJY2xvc2UocC0+cGFja19mZCk7CisJCQkJcGFja19vcGVuX2Zkcy0tOworCQkJCXAtPnBhY2tfZmQgPSAtMTsKKwkJCX0KKwkJCXBhY2tfbW1hcF9jYWxscysrOworCQkJcGFja19vcGVuX3dpbmRvd3MrKzsKKwkJCWlmIChwYWNrX21hcHBlZCA+IHBlYWtfcGFja19tYXBwZWQpCisJCQkJcGVha19wYWNrX21hcHBlZCA9IHBhY2tfbWFwcGVkOworCQkJaWYgKHBhY2tfb3Blbl93aW5kb3dzID4gcGVha19wYWNrX29wZW5fd2luZG93cykKKwkJCQlwZWFrX3BhY2tfb3Blbl93aW5kb3dzID0gcGFja19vcGVuX3dpbmRvd3M7CisJCQl3aW4tPm5leHQgPSBwLT53aW5kb3dzOworCQkJcC0+d2luZG93cyA9IHdpbjsKKwkJfQorCX0KKwlpZiAod2luICE9ICp3X2N1cnNvcikgeworCQl3aW4tPmxhc3RfdXNlZCA9IHBhY2tfdXNlZF9jdHIrKzsKKwkJd2luLT5pbnVzZV9jbnQrKzsKKwkJKndfY3Vyc29yID0gd2luOworCX0KKwlvZmZzZXQgLT0gd2luLT5vZmZzZXQ7CisJaWYgKGxlZnQpCisJCSpsZWZ0ID0gd2luLT5sZW4gLSB4c2l6ZV90KG9mZnNldCk7CisJcmV0dXJuIHdpbi0+YmFzZSArIG9mZnNldDsKK30KKworc3RhdGljIHN0cnVjdCBwYWNrZWRfZ2l0ICphbGxvY19wYWNrZWRfZ2l0KGludCBleHRyYSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IHhtYWxsb2Moc2l6ZW9mKCpwKSArIGV4dHJhKTsKKwltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CisJcC0+cGFja19mZCA9IC0xOworCXJldHVybiBwOworfQorCitzdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9wYWNrX21lbW9yeShzaXplX3Qgc2l6ZSkKK3sKKwlyZWxlYXNlX3BhY2tfbWVtb3J5KHNpemUsIC0xKTsKK30KKworc3RydWN0IHBhY2tlZF9naXQgKmFkZF9wYWNrZWRfZ2l0KGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRoX2xlbiwgaW50IGxvY2FsKQoreworCXN0YXRpYyBpbnQgaGF2ZV9zZXRfdHJ5X3RvX2ZyZWVfcm91dGluZTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGFsbG9jX3BhY2tlZF9naXQocGF0aF9sZW4gKyAyKTsKKworCWlmICghaGF2ZV9zZXRfdHJ5X3RvX2ZyZWVfcm91dGluZSkgeworCQloYXZlX3NldF90cnlfdG9fZnJlZV9yb3V0aW5lID0gMTsKKwkJc2V0X3RyeV90b19mcmVlX3JvdXRpbmUodHJ5X3RvX2ZyZWVfcGFja19tZW1vcnkpOworCX0KKworCS8qCisJICogTWFrZSBzdXJlIGEgY29ycmVzcG9uZGluZyAucGFjayBmaWxlIGV4aXN0cyBhbmQgdGhhdAorCSAqIHRoZSBpbmRleCBsb29rcyBzYW5lLgorCSAqLworCXBhdGhfbGVuIC09IHN0cmxlbigiLmlkeCIpOworCWlmIChwYXRoX2xlbiA8IDEpIHsKKwkJZnJlZShwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbWNweShwLT5wYWNrX25hbWUsIHBhdGgsIHBhdGhfbGVuKTsKKworCXN0cmNweShwLT5wYWNrX25hbWUgKyBwYXRoX2xlbiwgIi5rZWVwIik7CisJaWYgKCFhY2Nlc3MocC0+cGFja19uYW1lLCBGX09LKSkKKwkJcC0+cGFja19rZWVwID0gMTsKKworCXN0cmNweShwLT5wYWNrX25hbWUgKyBwYXRoX2xlbiwgIi5wYWNrIik7CisJaWYgKHN0YXQocC0+cGFja19uYW1lLCAmc3QpIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKSB7CisJCWZyZWUocCk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIG9rLCBpdCBsb29rcyBzYW5lIGFzIGZhciBhcyB3ZSBjYW4gY2hlY2sgd2l0aG91dAorCSAqIGFjdHVhbGx5IG1hcHBpbmcgdGhlIHBhY2sgZmlsZS4KKwkgKi8KKwlwLT5wYWNrX3NpemUgPSBzdC5zdF9zaXplOworCXAtPnBhY2tfbG9jYWwgPSBsb2NhbDsKKwlwLT5tdGltZSA9IHN0LnN0X210aW1lOworCWlmIChwYXRoX2xlbiA8IDQwIHx8IGdldF9zaGExX2hleChwYXRoICsgcGF0aF9sZW4gLSA0MCwgcC0+c2hhMSkpCisJCWhhc2hjbHIocC0+c2hhMSk7CisJcmV0dXJuIHA7Cit9CisKK3N0cnVjdCBwYWNrZWRfZ2l0ICpwYXJzZV9wYWNrX2luZGV4KHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmlkeF9wYXRoKQoreworCWNvbnN0IGNoYXIgKnBhdGggPSBzaGExX3BhY2tfbmFtZShzaGExKTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGFsbG9jX3BhY2tlZF9naXQoc3RybGVuKHBhdGgpICsgMSk7CisKKwlzdHJjcHkocC0+cGFja19uYW1lLCBwYXRoKTsKKwloYXNoY3B5KHAtPnNoYTEsIHNoYTEpOworCWlmIChjaGVja19wYWNrZWRfZ2l0X2lkeChpZHhfcGF0aCwgcCkpIHsKKwkJZnJlZShwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHA7Cit9CisKK3ZvaWQgaW5zdGFsbF9wYWNrZWRfZ2l0KHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrKQoreworCWlmIChwYWNrLT5wYWNrX2ZkICE9IC0xKQorCQlwYWNrX29wZW5fZmRzKys7CisKKwlwYWNrLT5uZXh0ID0gcGFja2VkX2dpdDsKKwlwYWNrZWRfZ2l0ID0gcGFjazsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9wYWNrZWRfZ2l0X29uZShjaGFyICpvYmpkaXIsIGludCBsb2NhbCkKK3sKKwkvKiBFbnN1cmUgdGhhdCB0aGlzIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggc28gdGhhdCB3ZSBjYW4KKwkgICBhcHBlbmQgIi9wYWNrLyIgd2l0aG91dCBjbG9iYmVyaW5nIHRoZSBzdGFjayBldmVuIGlmCisJICAgc3RybGVuKG9iamRpcikgd2VyZSBQQVRIX01BWC4gICovCisJY2hhciBwYXRoW1BBVEhfTUFYICsgMSArIDQgKyAxICsgMV07CisJaW50IGxlbjsKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKworCXNwcmludGYocGF0aCwgIiVzL3BhY2siLCBvYmpkaXIpOworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlkaXIgPSBvcGVuZGlyKHBhdGgpOworCWlmICghZGlyKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQllcnJvcigidW5hYmxlIHRvIG9wZW4gb2JqZWN0IHBhY2sgZGlyZWN0b3J5OiAlczogJXMiLAorCQkJICAgICAgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKwlwYXRoW2xlbisrXSA9ICcvJzsKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCWludCBuYW1lbGVuID0gc3RybGVuKGRlLT5kX25hbWUpOworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCQlpZiAoIWhhc19leHRlbnNpb24oZGUtPmRfbmFtZSwgIi5pZHgiKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChsZW4gKyBuYW1lbGVuICsgMSA+IHNpemVvZihwYXRoKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIERvbid0IHJlb3BlbiBhIHBhY2sgd2UgYWxyZWFkeSBoYXZlLiAqLworCQlzdHJjcHkocGF0aCArIGxlbiwgZGUtPmRfbmFtZSk7CisJCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlpZiAoIW1lbWNtcChwYXRoLCBwLT5wYWNrX25hbWUsIGxlbiArIG5hbWVsZW4gLSA0KSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAocCkKKwkJCWNvbnRpbnVlOworCQkvKiBTZWUgaWYgaXQgcmVhbGx5IGlzIGEgdmFsaWQgLmlkeCBmaWxlIHdpdGggY29ycmVzcG9uZGluZworCQkgKiAucGFjayBmaWxlIHRoYXQgd2UgY2FuIG1hcC4KKwkJICovCisJCXAgPSBhZGRfcGFja2VkX2dpdChwYXRoLCBsZW4gKyBuYW1lbGVuLCBsb2NhbCk7CisJCWlmICghcCkKKwkJCWNvbnRpbnVlOworCQlpbnN0YWxsX3BhY2tlZF9naXQocCk7CisJfQorCWNsb3NlZGlyKGRpcik7Cit9CisKK3N0YXRpYyBpbnQgc29ydF9wYWNrKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqYSA9ICooKHN0cnVjdCBwYWNrZWRfZ2l0ICoqKWFfKTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqYiA9ICooKHN0cnVjdCBwYWNrZWRfZ2l0ICoqKWJfKTsKKwlpbnQgc3Q7CisKKwkvKgorCSAqIExvY2FsIHBhY2tzIHRlbmQgdG8gY29udGFpbiBvYmplY3RzIHNwZWNpZmljIHRvIG91cgorCSAqIHZhcmlhbnQgb2YgdGhlIHByb2plY3QgdGhhbiByZW1vdGUgb25lcy4gIEluIGFkZGl0aW9uLAorCSAqIHJlbW90ZSBvbmVzIGNvdWxkIGJlIG9uIGEgbmV0d29yayBtb3VudGVkIGZpbGVzeXN0ZW0uCisJICogRmF2b3IgbG9jYWwgb25lcyBmb3IgdGhlc2UgcmVhc29ucy4KKwkgKi8KKwlzdCA9IGEtPnBhY2tfbG9jYWwgLSBiLT5wYWNrX2xvY2FsOworCWlmIChzdCkKKwkJcmV0dXJuIC1zdDsKKworCS8qCisJICogWW91bmdlciBwYWNrcyB0ZW5kIHRvIGNvbnRhaW4gbW9yZSByZWNlbnQgb2JqZWN0cywKKwkgKiBhbmQgbW9yZSByZWNlbnQgb2JqZWN0cyB0ZW5kIHRvIGdldCBhY2Nlc3NlZCBtb3JlCisJICogb2Z0ZW4uCisJICovCisJaWYgKGEtPm10aW1lIDwgYi0+bXRpbWUpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGEtPm10aW1lID09IGItPm10aW1lKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHJlYXJyYW5nZV9wYWNrZWRfZ2l0KHZvaWQpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKiphcnksICpwOworCWludCBpLCBuOworCisJZm9yIChuID0gMCwgcCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KQorCQluKys7CisJaWYgKG4gPCAyKQorCQlyZXR1cm47CisKKwkvKiBwcmVwYXJlIGFuIGFycmF5IG9mIHBhY2tlZF9naXQgZm9yIGVhc2llciBzb3J0aW5nICovCisJYXJ5ID0geGNhbGxvYyhuLCBzaXplb2Yoc3RydWN0IHBhY2tlZF9naXQgKikpOworCWZvciAobiA9IDAsIHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkKKwkJYXJ5W24rK10gPSBwOworCisJcXNvcnQoYXJ5LCBuLCBzaXplb2Yoc3RydWN0IHBhY2tlZF9naXQgKiksIHNvcnRfcGFjayk7CisKKwkvKiBsaW5rIHRoZW0gYmFjayBhZ2FpbiAqLworCWZvciAoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKQorCQlhcnlbaV0tPm5leHQgPSBhcnlbaSArIDFdOworCWFyeVtuIC0gMV0tPm5leHQgPSBOVUxMOworCXBhY2tlZF9naXQgPSBhcnlbMF07CisKKwlmcmVlKGFyeSk7Cit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV9wYWNrZWRfZ2l0X3J1bl9vbmNlID0gMDsKK3ZvaWQgcHJlcGFyZV9wYWNrZWRfZ2l0KHZvaWQpCit7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmFsdDsKKworCWlmIChwcmVwYXJlX3BhY2tlZF9naXRfcnVuX29uY2UpCisJCXJldHVybjsKKwlwcmVwYXJlX3BhY2tlZF9naXRfb25lKGdldF9vYmplY3RfZGlyZWN0b3J5KCksIDEpOworCXByZXBhcmVfYWx0X29kYigpOworCWZvciAoYWx0ID0gYWx0X29kYl9saXN0OyBhbHQ7IGFsdCA9IGFsdC0+bmV4dCkgeworCQlhbHQtPm5hbWVbLTFdID0gMDsKKwkJcHJlcGFyZV9wYWNrZWRfZ2l0X29uZShhbHQtPmJhc2UsIDApOworCQlhbHQtPm5hbWVbLTFdID0gJy8nOworCX0KKwlyZWFycmFuZ2VfcGFja2VkX2dpdCgpOworCXByZXBhcmVfcGFja2VkX2dpdF9ydW5fb25jZSA9IDE7Cit9CisKK3ZvaWQgcmVwcmVwYXJlX3BhY2tlZF9naXQodm9pZCkKK3sKKwlkaXNjYXJkX3JldmluZGV4KCk7CisJcHJlcGFyZV9wYWNrZWRfZ2l0X3J1bl9vbmNlID0gMDsKKwlwcmVwYXJlX3BhY2tlZF9naXQoKTsKK30KKworc3RhdGljIHZvaWQgbWFya19iYWRfcGFja2VkX29iamVjdChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGk7CisJZm9yIChpID0gMDsgaSA8IHAtPm51bV9iYWRfb2JqZWN0czsgaSsrKQorCQlpZiAoIWhhc2hjbXAoc2hhMSwgcC0+YmFkX29iamVjdF9zaGExICsgMjAgKiBpKSkKKwkJCXJldHVybjsKKwlwLT5iYWRfb2JqZWN0X3NoYTEgPSB4cmVhbGxvYyhwLT5iYWRfb2JqZWN0X3NoYTEsIDIwICogKHAtPm51bV9iYWRfb2JqZWN0cyArIDEpKTsKKwloYXNoY3B5KHAtPmJhZF9vYmplY3Rfc2hhMSArIDIwICogcC0+bnVtX2JhZF9vYmplY3RzLCBzaGExKTsKKwlwLT5udW1fYmFkX29iamVjdHMrKzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpoYXNfcGFja2VkX2FuZF9iYWQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwl1bnNpZ25lZCBpOworCisJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpCisJCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fYmFkX29iamVjdHM7IGkrKykKKwkJCWlmICghaGFzaGNtcChzaGExLCBwLT5iYWRfb2JqZWN0X3NoYTEgKyAyMCAqIGkpKQorCQkJCXJldHVybiBwOworCXJldHVybiBOVUxMOworfQorCisvKgorICogV2l0aCBhbiBpbi1jb3JlIG9iamVjdCBkYXRhIGluICJtYXAiLCByZWhhc2ggaXQgdG8gbWFrZSBzdXJlIHRoZQorICogb2JqZWN0IG5hbWUgYWN0dWFsbHkgbWF0Y2hlcyAic2hhMSIgdG8gZGV0ZWN0IG9iamVjdCBjb3JydXB0aW9uLgorICogV2l0aCAibWFwIiA9PSBOVUxMLCB0cnkgcmVhZGluZyB0aGUgb2JqZWN0IG5hbWVkIHdpdGggInNoYTEiIHVzaW5nCisgKiB0aGUgc3RyZWFtaW5nIGludGVyZmFjZSBhbmQgcmVoYXNoIGl0IHRvIGRvIHRoZSBzYW1lLgorICovCitpbnQgY2hlY2tfc2hhMV9zaWduYXR1cmUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqbWFwLAorCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqdHlwZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHJlYWxfc2hhMVsyMF07CisJZW51bSBvYmplY3RfdHlwZSBvYmpfdHlwZTsKKwlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0OworCWdpdF9TSEFfQ1RYIGM7CisJY2hhciBoZHJbMzJdOworCWludCBoZHJsZW47CisKKwlpZiAobWFwKSB7CisJCWhhc2hfc2hhMV9maWxlKG1hcCwgc2l6ZSwgdHlwZSwgcmVhbF9zaGExKTsKKwkJcmV0dXJuIGhhc2hjbXAoc2hhMSwgcmVhbF9zaGExKSA/IC0xIDogMDsKKwl9CisKKwlzdCA9IG9wZW5faXN0cmVhbShzaGExLCAmb2JqX3R5cGUsICZzaXplLCBOVUxMKTsKKwlpZiAoIXN0KQorCQlyZXR1cm4gLTE7CisKKwkvKiBHZW5lcmF0ZSB0aGUgaGVhZGVyICovCisJaGRybGVuID0gc3ByaW50ZihoZHIsICIlcyAlbHUiLCB0eXBlbmFtZShvYmpfdHlwZSksIHNpemUpICsgMTsKKworCS8qIFNoYTEuLiAqLworCWdpdF9TSEExX0luaXQoJmMpOworCWdpdF9TSEExX1VwZGF0ZSgmYywgaGRyLCBoZHJsZW4pOworCWZvciAoOzspIHsKKwkJY2hhciBidWZbMTAyNCAqIDE2XTsKKwkJc3NpemVfdCByZWFkbGVuID0gcmVhZF9pc3RyZWFtKHN0LCBidWYsIHNpemVvZihidWYpKTsKKworCQlpZiAoIXJlYWRsZW4pCisJCQlicmVhazsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZjLCBidWYsIHJlYWRsZW4pOworCX0KKwlnaXRfU0hBMV9GaW5hbChyZWFsX3NoYTEsICZjKTsKKwljbG9zZV9pc3RyZWFtKHN0KTsKKwlyZXR1cm4gaGFzaGNtcChzaGExLCByZWFsX3NoYTEpID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IGdpdF9vcGVuX25vYXRpbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdGF0aWMgaW50IHNoYTFfZmlsZV9vcGVuX2ZsYWcgPSBPX05PQVRJTUU7CisKKwlmb3IgKDs7KSB7CisJCWludCBmZCA9IG9wZW4obmFtZSwgT19SRE9OTFkgfCBzaGExX2ZpbGVfb3Blbl9mbGFnKTsKKwkJaWYgKGZkID49IDApCisJCQlyZXR1cm4gZmQ7CisKKwkJLyogTWlnaHQgdGhlIGZhaWx1cmUgYmUgZHVlIHRvIE9fTk9BVElNRT8gKi8KKwkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBzaGExX2ZpbGVfb3Blbl9mbGFnKSB7CisJCQlzaGExX2ZpbGVfb3Blbl9mbGFnID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0dXJuIC0xOworCX0KK30KKworc3RhdGljIGludCBvcGVuX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBmZDsKKwljaGFyICpuYW1lID0gc2hhMV9maWxlX25hbWUoc2hhMSk7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmFsdDsKKworCWZkID0gZ2l0X29wZW5fbm9hdGltZShuYW1lKTsKKwlpZiAoZmQgPj0gMCkKKwkJcmV0dXJuIGZkOworCisJcHJlcGFyZV9hbHRfb2RiKCk7CisJZXJybm8gPSBFTk9FTlQ7CisJZm9yIChhbHQgPSBhbHRfb2RiX2xpc3Q7IGFsdDsgYWx0ID0gYWx0LT5uZXh0KSB7CisJCW5hbWUgPSBhbHQtPm5hbWU7CisJCWZpbGxfc2hhMV9wYXRoKG5hbWUsIHNoYTEpOworCQlmZCA9IGdpdF9vcGVuX25vYXRpbWUoYWx0LT5iYXNlKTsKKwkJaWYgKGZkID49IDApCisJCQlyZXR1cm4gZmQ7CisJfQorCXJldHVybiAtMTsKK30KKwordm9pZCAqbWFwX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXZvaWQgKm1hcDsKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW5fc2hhMV9maWxlKHNoYTEpOworCW1hcCA9IE5VTEw7CisJaWYgKGZkID49IDApIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJaWYgKCFmc3RhdChmZCwgJnN0KSkgeworCQkJKnNpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCQkJaWYgKCEqc2l6ZSkgeworCQkJCS8qIG1tYXAoKSBpcyBmb3JiaWRkZW4gb24gZW1wdHkgZmlsZXMgKi8KKwkJCQllcnJvcigib2JqZWN0IGZpbGUgJXMgaXMgZW1wdHkiLCBzaGExX2ZpbGVfbmFtZShzaGExKSk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQltYXAgPSB4bW1hcChOVUxMLCAqc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCQl9CisJCWNsb3NlKGZkKTsKKwl9CisJcmV0dXJuIG1hcDsKK30KKworLyoKKyAqIFRoZXJlIHVzZWQgdG8gYmUgYSBzZWNvbmQgbG9vc2Ugb2JqZWN0IGhlYWRlciBmb3JtYXQgd2hpY2gKKyAqIHdhcyBtZWFudCB0byBtaW1pYyB0aGUgaW4tcGFjayBmb3JtYXQsIGFsbG93aW5nIGZvciBkaXJlY3QKKyAqIGNvcHkgb2YgdGhlIG9iamVjdCBkYXRhLiAgVGhpcyBmb3JtYXQgdHVybmVkIHVwIG5vdCB0byBiZQorICogcmVhbGx5IHdvcnRoIGl0IGFuZCB3ZSBubyBsb25nZXIgd3JpdGUgbG9vc2Ugb2JqZWN0cyBpbiB0aGF0CisgKiBmb3JtYXQuCisgKi8KK3N0YXRpYyBpbnQgZXhwZXJpbWVudGFsX2xvb3NlX29iamVjdCh1bnNpZ25lZCBjaGFyICptYXApCit7CisJdW5zaWduZWQgaW50IHdvcmQ7CisKKwkvKgorCSAqIFdlIG11c3QgZGV0ZXJtaW5lIGlmIHRoZSBidWZmZXIgY29udGFpbnMgdGhlIHN0YW5kYXJkCisJICogemxpYi1kZWZsYXRlZCBzdHJlYW0gb3IgdGhlIGV4cGVyaW1lbnRhbCBmb3JtYXQgYmFzZWQKKwkgKiBvbiB0aGUgaW4tcGFjayBvYmplY3QgZm9ybWF0LiBDb21wYXJlIHRoZSBoZWFkZXIgYnl0ZQorCSAqIGZvciBlYWNoIGZvcm1hdDoKKwkgKgorCSAqIFJGQzE5NTAgemxpYiB3LyBkZWZsYXRlIDogMHd3dzEwMDAgOiAwIDw9IHd3dyA8PSA3CisJICogRXhwZXJpbWVudGFsIHBhY2stYmFzZWQgOiBTdHR0c3NzcyA6IHR0dCA9IDEsMiwzLDQKKwkgKgorCSAqIElmIGJpdCA3IGlzIGNsZWFyIGFuZCBiaXRzIDAtMyBlcXVhbCA4LCB0aGUgYnVmZmVyIE1VU1QgYmUKKwkgKiBpbiBzdGFuZGFyZCBsb29zZS1vYmplY3QgZm9ybWF0LCBVTkxFU1MgaXQgaXMgYSBHaXQtcGFjaworCSAqIGZvcm1hdCBvYmplY3QgKmV4YWN0bHkqIDggYnl0ZXMgaW4gc2l6ZSB3aGVuIGluZmxhdGVkLgorCSAqCisJICogSG93ZXZlciwgUkZDMTk1MCBhbHNvIHNwZWNpZmllcyB0aGF0IHRoZSAxc3QgMTYtYml0IHdvcmQKKwkgKiBtdXN0IGJlIGRpdmlzaWJsZSBieSAzMSAtIHRoaXMgY2hlY2tzdW0gdGVsbHMgdXMgb3VyIGJ1ZmZlcgorCSAqIGlzIGluIHRoZSBzdGFuZGFyZCBmb3JtYXQsIGdpdmluZyBhIGZhbHNlIHBvc2l0aXZlIG9ubHkgaWYKKwkgKiB0aGUgMXN0IHdvcmQgb2YgdGhlIEdpdC1wYWNrIGZvcm1hdCBvYmplY3QgaGFwcGVucyB0byBiZQorCSAqIGRpdmlzaWJsZSBieSAzMSwgaWU6CisJICogICAgICAoKGJ5dGUwICogMjU2KSArIGJ5dGUxKSAlIDMxID0gMAorCSAqICAgPT4gICAgICAgIDB0dHQxMDAwMHd3dzEwMDAgJSAzMSA9IDAKKwkgKgorCSAqIEFzIGl0IGhhcHBlbnMsIHRoaXMgY2FzZSBjYW4gb25seSBhcmlzZSBmb3Igd3d3PTMgJiB0dHQ9MQorCSAqIC0gaWUsIGEgQ29tbWl0IG9iamVjdCwgd2hpY2ggd291bGQgaGF2ZSB0byBiZSA4IGJ5dGVzIGluCisJICogc2l6ZS4gQXMgbm8gQ29tbWl0IGNhbiBiZSB0aGF0IHNtYWxsLCB3ZSBmaW5kIHRoYXQgdGhlCisJICogY29tYmluYXRpb24gb2YgdGhlc2UgdHdvIGNyaXRlcmlhIChiaXRtYXNrICYgY2hlY2tzdW0pCisJICogY2FuIGFsd2F5cyBjb3JyZWN0bHkgZGV0ZXJtaW5lIHRoZSBidWZmZXIgZm9ybWF0LgorCSAqLworCXdvcmQgPSAobWFwWzBdIDw8IDgpICsgbWFwWzFdOworCWlmICgobWFwWzBdICYgMHg4RikgPT0gMHgwOCAmJiAhKHdvcmQgJSAzMSkpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3Vuc2lnbmVkIGxvbmcgdW5wYWNrX29iamVjdF9oZWFkZXJfYnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCXVuc2lnbmVkIHNoaWZ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgYzsKKwl1bnNpZ25lZCBsb25nIHVzZWQgPSAwOworCisJYyA9IGJ1Zlt1c2VkKytdOworCSp0eXBlID0gKGMgPj4gNCkgJiA3OworCXNpemUgPSBjICYgMTU7CisJc2hpZnQgPSA0OworCXdoaWxlIChjICYgMHg4MCkgeworCQlpZiAobGVuIDw9IHVzZWQgfHwgYml0c2l6ZW9mKGxvbmcpIDw9IHNoaWZ0KSB7CisJCQllcnJvcigiYmFkIG9iamVjdCBoZWFkZXIiKTsKKwkJCXNpemUgPSB1c2VkID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWMgPSBidWZbdXNlZCsrXTsKKwkJc2l6ZSArPSAoYyAmIDB4N2YpIDw8IHNoaWZ0OworCQlzaGlmdCArPSA3OworCX0KKwkqc2l6ZXAgPSBzaXplOworCXJldHVybiB1c2VkOworfQorCitpbnQgdW5wYWNrX3NoYTFfaGVhZGVyKGdpdF96c3RyZWFtICpzdHJlYW0sIHVuc2lnbmVkIGNoYXIgKm1hcCwgdW5zaWduZWQgbG9uZyBtYXBzaXplLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmc2l6KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdXNlZDsKKwlzdGF0aWMgY29uc3QgY2hhciB2YWxpZF9sb29zZV9vYmplY3RfdHlwZVs4XSA9IHsKKwkJMCwgLyogT0JKX0VYVCAqLworCQkxLCAxLCAxLCAxLCAvKiAiY29tbWl0IiwgInRyZWUiLCAiYmxvYiIsICJ0YWciICovCisJCTAsIC8qICJkZWx0YSIgYW5kIG90aGVycyBhcmUgaW52YWxpZCBpbiBhIGxvb3NlIG9iamVjdCAqLworCX07CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJLyogR2V0IHRoZSBkYXRhIHN0cmVhbSAqLworCW1lbXNldChzdHJlYW0sIDAsIHNpemVvZigqc3RyZWFtKSk7CisJc3RyZWFtLT5uZXh0X2luID0gbWFwOworCXN0cmVhbS0+YXZhaWxfaW4gPSBtYXBzaXplOworCXN0cmVhbS0+bmV4dF9vdXQgPSBidWZmZXI7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSBidWZzaXo7CisKKwlpZiAoZXhwZXJpbWVudGFsX2xvb3NlX29iamVjdChtYXApKSB7CisJCS8qCisJCSAqIFRoZSBvbGQgZXhwZXJpbWVudGFsIGZvcm1hdCB3ZSBubyBsb25nZXIgcHJvZHVjZTsKKwkJICogd2UgY2FuIHN0aWxsIHJlYWQgaXQuCisJCSAqLworCQl1c2VkID0gdW5wYWNrX29iamVjdF9oZWFkZXJfYnVmZmVyKG1hcCwgbWFwc2l6ZSwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCF1c2VkIHx8ICF2YWxpZF9sb29zZV9vYmplY3RfdHlwZVt0eXBlXSkKKwkJCXJldHVybiAtMTsKKwkJbWFwICs9IHVzZWQ7CisJCW1hcHNpemUgLT0gdXNlZDsKKworCQkvKiBTZXQgdXAgdGhlIHN0cmVhbSBmb3IgdGhlIHJlc3QuLiAqLworCQlzdHJlYW0tPm5leHRfaW4gPSBtYXA7CisJCXN0cmVhbS0+YXZhaWxfaW4gPSBtYXBzaXplOworCQlnaXRfaW5mbGF0ZV9pbml0KHN0cmVhbSk7CisKKwkJLyogQW5kIGdlbmVyYXRlIHRoZSBmYWtlIHRyYWRpdGlvbmFsIGhlYWRlciAqLworCQlzdHJlYW0tPnRvdGFsX291dCA9IDEgKyBzbnByaW50ZihidWZmZXIsIGJ1ZnNpeiwgIiVzICVsdSIsCisJCQkJCQkgdHlwZW5hbWUodHlwZSksIHNpemUpOworCQlyZXR1cm4gMDsKKwl9CisJZ2l0X2luZmxhdGVfaW5pdChzdHJlYW0pOworCXJldHVybiBnaXRfaW5mbGF0ZShzdHJlYW0sIDApOworfQorCitzdGF0aWMgdm9pZCAqdW5wYWNrX3NoYTFfcmVzdChnaXRfenN0cmVhbSAqc3RyZWFtLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgYnl0ZXMgPSBzdHJsZW4oYnVmZmVyKSArIDE7CisJdW5zaWduZWQgY2hhciAqYnVmID0geG1hbGxvY3ooc2l6ZSk7CisJdW5zaWduZWQgbG9uZyBuOworCWludCBzdGF0dXMgPSBaX09LOworCisJbiA9IHN0cmVhbS0+dG90YWxfb3V0IC0gYnl0ZXM7CisJaWYgKG4gPiBzaXplKQorCQluID0gc2l6ZTsKKwltZW1jcHkoYnVmLCAoY2hhciAqKSBidWZmZXIgKyBieXRlcywgbik7CisJYnl0ZXMgPSBuOworCWlmIChieXRlcyA8PSBzaXplKSB7CisJCS8qCisJCSAqIFRoZSBhYm92ZSBjb25kaXRpb24gbXVzdCBiZSAoYnl0ZXMgPD0gc2l6ZSksIG5vdAorCQkgKiAoYnl0ZXMgPCBzaXplKS4gIEluIG90aGVyIHdvcmRzLCBldmVuIHRob3VnaCB3ZQorCQkgKiBleHBlY3Qgbm8gbW9yZSBvdXRwdXQgYW5kIHNldCBhdmFpbF9vdXQgdG8gemVybywKKwkJICogdGhlIGlucHV0IHpsaWIgc3RyZWFtIG1heSBoYXZlIGJ5dGVzIHRoYXQgZXhwcmVzcworCQkgKiAidGhpcyBjb25jbHVkZXMgdGhlIHN0cmVhbSIsIGFuZCB3ZSAqZG8qIHdhbnQgdG8KKwkJICogZWF0IHRoYXQgaW5wdXQuCisJCSAqCisJCSAqIE90aGVyd2lzZSB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byB0ZXN0IHRoYXQgd2UKKwkJICogY29uc3VtZWQgYWxsIHRoZSBpbnB1dCB0byByZWFjaCB0aGUgZXhwZWN0ZWQgc2l6ZTsKKwkJICogd2UgYWxzbyB3YW50IHRvIGNoZWNrIHRoYXQgemxpYiB0ZWxscyB1cyB0aGF0IGFsbAorCQkgKiB3ZW50IHdlbGwgd2l0aCBzdGF0dXMgPT0gWl9TVFJFQU1fRU5EIGF0IHRoZSBlbmQuCisJCSAqLworCQlzdHJlYW0tPm5leHRfb3V0ID0gYnVmICsgYnl0ZXM7CisJCXN0cmVhbS0+YXZhaWxfb3V0ID0gc2l6ZSAtIGJ5dGVzOworCQl3aGlsZSAoc3RhdHVzID09IFpfT0spCisJCQlzdGF0dXMgPSBnaXRfaW5mbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKKwl9CisJaWYgKHN0YXR1cyA9PSBaX1NUUkVBTV9FTkQgJiYgIXN0cmVhbS0+YXZhaWxfaW4pIHsKKwkJZ2l0X2luZmxhdGVfZW5kKHN0cmVhbSk7CisJCXJldHVybiBidWY7CisJfQorCisJaWYgKHN0YXR1cyA8IDApCisJCWVycm9yKCJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIiwgc2hhMV90b19oZXgoc2hhMSkpOworCWVsc2UgaWYgKHN0cmVhbS0+YXZhaWxfaW4pCisJCWVycm9yKCJnYXJiYWdlIGF0IGVuZCBvZiBsb29zZSBvYmplY3QgJyVzJyIsCisJCSAgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBXZSB1c2VkIHRvIGp1c3QgdXNlICJzc2NhbmYoKSIsIGJ1dCB0aGF0J3MgYWN0dWFsbHkgd2F5CisgKiB0b28gcGVybWlzc2l2ZSBmb3Igd2hhdCB3ZSB3YW50IHRvIGNoZWNrLiBTbyBkbyBhbiBhbmFsCisgKiBvYmplY3QgaGVhZGVyIHBhcnNlIGJ5IGhhbmQuCisgKi8KK2ludCBwYXJzZV9zaGExX2hlYWRlcihjb25zdCBjaGFyICpoZHIsIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCWNoYXIgdHlwZVsxMF07CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJLyoKKwkgKiBUaGUgdHlwZSBjYW4gYmUgYXQgbW9zdCB0ZW4gYnl0ZXMgKGluY2x1ZGluZyB0aGUKKwkgKiB0ZXJtaW5hdGluZyAnXDAnIHRoYXQgd2UgYWRkKSwgYW5kIGlzIGZvbGxvd2VkIGJ5CisJICogYSBzcGFjZS4KKwkgKi8KKwlpID0gMDsKKwlmb3IgKDs7KSB7CisJCWNoYXIgYyA9ICpoZHIrKzsKKwkJaWYgKGMgPT0gJyAnKQorCQkJYnJlYWs7CisJCXR5cGVbaSsrXSA9IGM7CisJCWlmIChpID49IHNpemVvZih0eXBlKSkKKwkJCXJldHVybiAtMTsKKwl9CisJdHlwZVtpXSA9IDA7CisKKwkvKgorCSAqIFRoZSBsZW5ndGggbXVzdCBmb2xsb3cgaW1tZWRpYXRlbHksIGFuZCBiZSBpbiBjYW5vbmljYWwKKwkgKiBkZWNpbWFsIGZvcm1hdCAoaWUgIjAxMCIgaXMgbm90IHZhbGlkKS4KKwkgKi8KKwlzaXplID0gKmhkcisrIC0gJzAnOworCWlmIChzaXplID4gOSkKKwkJcmV0dXJuIC0xOworCWlmIChzaXplKSB7CisJCWZvciAoOzspIHsKKwkJCXVuc2lnbmVkIGxvbmcgYyA9ICpoZHIgLSAnMCc7CisJCQlpZiAoYyA+IDkpCisJCQkJYnJlYWs7CisJCQloZHIrKzsKKwkJCXNpemUgPSBzaXplICogMTAgKyBjOworCQl9CisJfQorCSpzaXplcCA9IHNpemU7CisKKwkvKgorCSAqIFRoZSBsZW5ndGggbXVzdCBiZSBmb2xsb3dlZCBieSBhIHplcm8gYnl0ZQorCSAqLworCXJldHVybiAqaGRyID8gLTEgOiB0eXBlX2Zyb21fc3RyaW5nKHR5cGUpOworfQorCitzdGF0aWMgdm9pZCAqdW5wYWNrX3NoYTFfZmlsZSh2b2lkICptYXAsIHVuc2lnbmVkIGxvbmcgbWFwc2l6ZSwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgcmV0OworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwljaGFyIGhkcls4MTkyXTsKKworCXJldCA9IHVucGFja19zaGExX2hlYWRlcigmc3RyZWFtLCBtYXAsIG1hcHNpemUsIGhkciwgc2l6ZW9mKGhkcikpOworCWlmIChyZXQgPCBaX09LIHx8ICgqdHlwZSA9IHBhcnNlX3NoYTFfaGVhZGVyKGhkciwgc2l6ZSkpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdW5wYWNrX3NoYTFfcmVzdCgmc3RyZWFtLCBoZHIsICpzaXplLCBzaGExKTsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfc2l6ZV9mcm9tX2RlbHRhKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCSAgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkJICAgICAgICAgIG9mZl90IGN1cnBvcykKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhOworCXVuc2lnbmVkIGNoYXIgZGVsdGFfaGVhZFsyMF0sICppbjsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJaW50IHN0OworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlzdHJlYW0ubmV4dF9vdXQgPSBkZWx0YV9oZWFkOworCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZGVsdGFfaGVhZCk7CisKKwlnaXRfaW5mbGF0ZV9pbml0KCZzdHJlYW0pOworCWRvIHsKKwkJaW4gPSB1c2VfcGFjayhwLCB3X2N1cnMsIGN1cnBvcywgJnN0cmVhbS5hdmFpbF9pbik7CisJCXN0cmVhbS5uZXh0X2luID0gaW47CisJCXN0ID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCQljdXJwb3MgKz0gc3RyZWFtLm5leHRfaW4gLSBpbjsKKwl9IHdoaWxlICgoc3QgPT0gWl9PSyB8fCBzdCA9PSBaX0JVRl9FUlJPUikgJiYKKwkJIHN0cmVhbS50b3RhbF9vdXQgPCBzaXplb2YoZGVsdGFfaGVhZCkpOworCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwlpZiAoKHN0ICE9IFpfU1RSRUFNX0VORCkgJiYgc3RyZWFtLnRvdGFsX291dCAhPSBzaXplb2YoZGVsdGFfaGVhZCkpIHsKKwkJZXJyb3IoImRlbHRhIGRhdGEgdW5wYWNrLWluaXRpYWwgZmFpbGVkIik7CisJCXJldHVybiAwOworCX0KKworCS8qIEV4YW1pbmUgdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgZGVsdGEgdG8gZmlndXJlIG91dAorCSAqIHRoZSByZXN1bHQgc2l6ZS4KKwkgKi8KKwlkYXRhID0gZGVsdGFfaGVhZDsKKworCS8qIGlnbm9yZSBiYXNlIHNpemUgKi8KKwlnZXRfZGVsdGFfaGRyX3NpemUoJmRhdGEsIGRlbHRhX2hlYWQrc2l6ZW9mKGRlbHRhX2hlYWQpKTsKKworCS8qIFJlYWQgdGhlIHJlc3VsdCBzaXplICovCisJcmV0dXJuIGdldF9kZWx0YV9oZHJfc2l6ZSgmZGF0YSwgZGVsdGFfaGVhZCtzaXplb2YoZGVsdGFfaGVhZCkpOworfQorCitzdGF0aWMgb2ZmX3QgZ2V0X2RlbHRhX2Jhc2Uoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkJICAgIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKKwkJCQkgICAgb2ZmX3QgKmN1cnBvcywKKwkJCQkgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJCSAgICBvZmZfdCBkZWx0YV9vYmpfb2Zmc2V0KQoreworCXVuc2lnbmVkIGNoYXIgKmJhc2VfaW5mbyA9IHVzZV9wYWNrKHAsIHdfY3VycywgKmN1cnBvcywgTlVMTCk7CisJb2ZmX3QgYmFzZV9vZmZzZXQ7CisKKwkvKiB1c2VfcGFjaygpIGFzc3VyZWQgdXMgd2UgaGF2ZSBbYmFzZV9pbmZvLCBiYXNlX2luZm8gKyAyMCkKKwkgKiBhcyBhIHJhbmdlIHRoYXQgd2UgY2FuIGxvb2sgYXQgd2l0aG91dCB3YWxraW5nIG9mZiB0aGUKKwkgKiBlbmQgb2YgdGhlIG1hcHBlZCB3aW5kb3cuICBJdHMgYWN0dWFsbHkgdGhlIGhhc2ggc2l6ZQorCSAqIHRoYXQgaXMgYXNzdXJlZC4gIEFuIE9GU19ERUxUQSBsb25nZXIgdGhhbiB0aGUgaGFzaCBzaXplCisJICogaXMgc3R1cGlkLCBhcyB0aGVuIGEgUkVGX0RFTFRBIHdvdWxkIGJlIHNtYWxsZXIgdG8gc3RvcmUuCisJICovCisJaWYgKHR5cGUgPT0gT0JKX09GU19ERUxUQSkgeworCQl1bnNpZ25lZCB1c2VkID0gMDsKKwkJdW5zaWduZWQgY2hhciBjID0gYmFzZV9pbmZvW3VzZWQrK107CisJCWJhc2Vfb2Zmc2V0ID0gYyAmIDEyNzsKKwkJd2hpbGUgKGMgJiAxMjgpIHsKKwkJCWJhc2Vfb2Zmc2V0ICs9IDE7CisJCQlpZiAoIWJhc2Vfb2Zmc2V0IHx8IE1TQihiYXNlX29mZnNldCwgNykpCisJCQkJcmV0dXJuIDA7ICAvKiBvdmVyZmxvdyAqLworCQkJYyA9IGJhc2VfaW5mb1t1c2VkKytdOworCQkJYmFzZV9vZmZzZXQgPSAoYmFzZV9vZmZzZXQgPDwgNykgKyAoYyAmIDEyNyk7CisJCX0KKwkJYmFzZV9vZmZzZXQgPSBkZWx0YV9vYmpfb2Zmc2V0IC0gYmFzZV9vZmZzZXQ7CisJCWlmIChiYXNlX29mZnNldCA8PSAwIHx8IGJhc2Vfb2Zmc2V0ID49IGRlbHRhX29ial9vZmZzZXQpCisJCQlyZXR1cm4gMDsgIC8qIG91dCBvZiBib3VuZCAqLworCQkqY3VycG9zICs9IHVzZWQ7CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJLyogVGhlIGJhc2UgZW50cnkgX211c3RfIGJlIGluIHRoZSBzYW1lIHBhY2sgKi8KKwkJYmFzZV9vZmZzZXQgPSBmaW5kX3BhY2tfZW50cnlfb25lKGJhc2VfaW5mbywgcCk7CisJCSpjdXJwb3MgKz0gMjA7CisJfSBlbHNlCisJCWRpZSgiSSBhbSB0b3RhbGx5IHNjcmV3ZWQiKTsKKwlyZXR1cm4gYmFzZV9vZmZzZXQ7Cit9CisKKy8qIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIGEgbXV0dWFsbHkgcmVjdXJzaXZlIGZ1bmN0aW9uICovCitzdGF0aWMgaW50IHBhY2tlZF9vYmplY3RfaW5mbyhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZXAsIGludCAqcnR5cGUpOworCitzdGF0aWMgaW50IHBhY2tlZF9kZWx0YV9pbmZvKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJICAgICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkgICAgIG9mZl90IGN1cnBvcywKKwkJCSAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICAgICBvZmZfdCBvYmpfb2Zmc2V0LAorCQkJICAgICB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwlvZmZfdCBiYXNlX29mZnNldDsKKworCWJhc2Vfb2Zmc2V0ID0gZ2V0X2RlbHRhX2Jhc2UocCwgd19jdXJzLCAmY3VycG9zLCB0eXBlLCBvYmpfb2Zmc2V0KTsKKwlpZiAoIWJhc2Vfb2Zmc2V0KQorCQlyZXR1cm4gT0JKX0JBRDsKKwl0eXBlID0gcGFja2VkX29iamVjdF9pbmZvKHAsIGJhc2Vfb2Zmc2V0LCBOVUxMLCBOVUxMKTsKKwlpZiAodHlwZSA8PSBPQkpfTk9ORSkgeworCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeDsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZV9zaGExOworCQlyZXZpZHggPSBmaW5kX3BhY2tfcmV2aW5kZXgocCwgYmFzZV9vZmZzZXQpOworCQlpZiAoIXJldmlkeCkKKwkJCXJldHVybiBPQkpfQkFEOworCQliYXNlX3NoYTEgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIHJldmlkeC0+bnIpOworCQltYXJrX2JhZF9wYWNrZWRfb2JqZWN0KHAsIGJhc2Vfc2hhMSk7CisJCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKGJhc2Vfc2hhMSwgTlVMTCk7CisJCWlmICh0eXBlIDw9IE9CSl9OT05FKQorCQkJcmV0dXJuIE9CSl9CQUQ7CisJfQorCisJLyogV2UgY2hvb3NlIHRvIG9ubHkgZ2V0IHRoZSB0eXBlIG9mIHRoZSBiYXNlIG9iamVjdCBhbmQKKwkgKiBpZ25vcmUgcG90ZW50aWFsbHkgY29ycnVwdCBwYWNrIGZpbGUgdGhhdCBleHBlY3RzIHRoZSBkZWx0YQorCSAqIGJhc2VkIG9uIGEgYmFzZSB3aXRoIGEgd3Jvbmcgc2l6ZS4gIFRoaXMgc2F2ZXMgdG9ucyBvZgorCSAqIGluZmxhdGUoKSBjYWxscy4KKwkgKi8KKwlpZiAoc2l6ZXApIHsKKwkJKnNpemVwID0gZ2V0X3NpemVfZnJvbV9kZWx0YShwLCB3X2N1cnMsIGN1cnBvcyk7CisJCWlmICgqc2l6ZXAgPT0gMCkKKwkJCXR5cGUgPSBPQkpfQkFEOworCX0KKworCXJldHVybiB0eXBlOworfQorCitpbnQgdW5wYWNrX29iamVjdF9oZWFkZXIoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkJIG9mZl90ICpjdXJwb3MsCisJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisJdW5zaWduZWQgY2hhciAqYmFzZTsKKwl1bnNpZ25lZCBsb25nIGxlZnQ7CisJdW5zaWduZWQgbG9uZyB1c2VkOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCS8qIHVzZV9wYWNrKCkgYXNzdXJlcyB1cyB3ZSBoYXZlIFtiYXNlLCBiYXNlICsgMjApIGF2YWlsYWJsZQorCSAqIGFzIGEgcmFuZ2UgdGhhdCB3ZSBjYW4gbG9vayBhdC4gIChJdHMgYWN0dWFsbHkgdGhlIGhhc2gKKwkgKiBzaXplIHRoYXQgaXMgYXNzdXJlZC4pICBXaXRoIG91ciBvYmplY3QgaGVhZGVyIGVuY29kaW5nCisJICogdGhlIG1heGltdW0gZGVmbGF0ZWQgb2JqZWN0IHNpemUgaXMgMl4xMzcsIHdoaWNoIGlzIGp1c3QKKwkgKiBpbnNhbmUsIHNvIHdlIGtub3cgd29uJ3QgZXhjZWVkIHdoYXQgd2UgaGF2ZSBiZWVuIGdpdmVuLgorCSAqLworCWJhc2UgPSB1c2VfcGFjayhwLCB3X2N1cnMsICpjdXJwb3MsICZsZWZ0KTsKKwl1c2VkID0gdW5wYWNrX29iamVjdF9oZWFkZXJfYnVmZmVyKGJhc2UsIGxlZnQsICZ0eXBlLCBzaXplcCk7CisJaWYgKCF1c2VkKSB7CisJCXR5cGUgPSBPQkpfQkFEOworCX0gZWxzZQorCQkqY3VycG9zICs9IHVzZWQ7CisKKwlyZXR1cm4gdHlwZTsKK30KKworc3RhdGljIGludCBwYWNrZWRfb2JqZWN0X2luZm8oc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IG9ial9vZmZzZXQsCisJCQkgICAgICB1bnNpZ25lZCBsb25nICpzaXplcCwgaW50ICpydHlwZSkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBzaXplOworCW9mZl90IGN1cnBvcyA9IG9ial9vZmZzZXQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHAsICZ3X2N1cnMsICZjdXJwb3MsICZzaXplKTsKKwlpZiAocnR5cGUpCisJCSpydHlwZSA9IHR5cGU7IC8qIHJlcHJlc2VudGF0aW9uIHR5cGUgKi8KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgT0JKX09GU19ERUxUQToKKwljYXNlIE9CSl9SRUZfREVMVEE6CisJCXR5cGUgPSBwYWNrZWRfZGVsdGFfaW5mbyhwLCAmd19jdXJzLCBjdXJwb3MsCisJCQkJCSB0eXBlLCBvYmpfb2Zmc2V0LCBzaXplcCk7CisJCWJyZWFrOworCWNhc2UgT0JKX0NPTU1JVDoKKwljYXNlIE9CSl9UUkVFOgorCWNhc2UgT0JKX0JMT0I6CisJY2FzZSBPQkpfVEFHOgorCQlpZiAoc2l6ZXApCisJCQkqc2l6ZXAgPSBzaXplOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJvcigidW5rbm93biBvYmplY3QgdHlwZSAlaSBhdCBvZmZzZXQgJSJQUkl1TUFYIiBpbiAlcyIsCisJCSAgICAgIHR5cGUsICh1aW50bWF4X3Qpb2JqX29mZnNldCwgcC0+cGFja19uYW1lKTsKKwkJdHlwZSA9IE9CSl9CQUQ7CisJfQorCXVudXNlX3BhY2soJndfY3Vycyk7CisJcmV0dXJuIHR5cGU7Cit9CisKK3N0YXRpYyB2b2lkICp1bnBhY2tfY29tcHJlc3NlZF9lbnRyeShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkgICAgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkJCSAgICBvZmZfdCBjdXJwb3MsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgc3Q7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgKmluOworCisJYnVmZmVyID0geG1hbGxvY3ooc2l6ZSk7CisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlzdHJlYW0ubmV4dF9vdXQgPSBidWZmZXI7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemUgKyAxOworCisJZ2l0X2luZmxhdGVfaW5pdCgmc3RyZWFtKTsKKwlkbyB7CisJCWluID0gdXNlX3BhY2socCwgd19jdXJzLCBjdXJwb3MsICZzdHJlYW0uYXZhaWxfaW4pOworCQlzdHJlYW0ubmV4dF9pbiA9IGluOworCQlzdCA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwkJaWYgKCFzdHJlYW0uYXZhaWxfb3V0KQorCQkJYnJlYWs7IC8qIHRoZSBwYXlsb2FkIGlzIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZSAqLworCQljdXJwb3MgKz0gc3RyZWFtLm5leHRfaW4gLSBpbjsKKwl9IHdoaWxlIChzdCA9PSBaX09LIHx8IHN0ID09IFpfQlVGX0VSUk9SKTsKKwlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJaWYgKChzdCAhPSBaX1NUUkVBTV9FTkQpIHx8IHN0cmVhbS50b3RhbF9vdXQgIT0gc2l6ZSkgeworCQlmcmVlKGJ1ZmZlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBidWZmZXI7Cit9CisKKyNkZWZpbmUgTUFYX0RFTFRBX0NBQ0hFICgyNTYpCisKK3N0YXRpYyBzaXplX3QgZGVsdGFfYmFzZV9jYWNoZWQ7CisKK3N0YXRpYyBzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9scnVfbGlzdCB7CisJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfbHJ1X2xpc3QgKnByZXY7CisJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfbHJ1X2xpc3QgKm5leHQ7Cit9IGRlbHRhX2Jhc2VfY2FjaGVfbHJ1ID0geyAmZGVsdGFfYmFzZV9jYWNoZV9scnUsICZkZWx0YV9iYXNlX2NhY2hlX2xydSB9OworCitzdGF0aWMgc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgeworCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2xydV9saXN0IGxydTsKKwl2b2lkICpkYXRhOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCW9mZl90IGJhc2Vfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7Cit9IGRlbHRhX2Jhc2VfY2FjaGVbTUFYX0RFTFRBX0NBQ0hFXTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFja19lbnRyeV9oYXNoKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBiYXNlX29mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGhhc2g7CisKKwloYXNoID0gKHVuc2lnbmVkIGxvbmcpcCArICh1bnNpZ25lZCBsb25nKWJhc2Vfb2Zmc2V0OworCWhhc2ggKz0gKGhhc2ggPj4gOCkgKyAoaGFzaCA+PiAxNik7CisJcmV0dXJuIGhhc2ggJSBNQVhfREVMVEFfQ0FDSEU7Cit9CisKK3N0YXRpYyBpbnQgaW5fZGVsdGFfYmFzZV9jYWNoZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3QgYmFzZV9vZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBoYXNoID0gcGFja19lbnRyeV9oYXNoKHAsIGJhc2Vfb2Zmc2V0KTsKKwlzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZW50ID0gZGVsdGFfYmFzZV9jYWNoZSArIGhhc2g7CisJcmV0dXJuIChlbnQtPmRhdGEgJiYgZW50LT5wID09IHAgJiYgZW50LT5iYXNlX29mZnNldCA9PSBiYXNlX29mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkICpjYWNoZV9vcl91bnBhY2tfZW50cnkoc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IGJhc2Vfb2Zmc2V0LAorCXVuc2lnbmVkIGxvbmcgKmJhc2Vfc2l6ZSwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwgaW50IGtlZXBfY2FjaGUpCit7CisJdm9pZCAqcmV0OworCXVuc2lnbmVkIGxvbmcgaGFzaCA9IHBhY2tfZW50cnlfaGFzaChwLCBiYXNlX29mZnNldCk7CisJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgKmVudCA9IGRlbHRhX2Jhc2VfY2FjaGUgKyBoYXNoOworCisJcmV0ID0gZW50LT5kYXRhOworCWlmICghcmV0IHx8IGVudC0+cCAhPSBwIHx8IGVudC0+YmFzZV9vZmZzZXQgIT0gYmFzZV9vZmZzZXQpCisJCXJldHVybiB1bnBhY2tfZW50cnkocCwgYmFzZV9vZmZzZXQsIHR5cGUsIGJhc2Vfc2l6ZSk7CisKKwlpZiAoIWtlZXBfY2FjaGUpIHsKKwkJZW50LT5kYXRhID0gTlVMTDsKKwkJZW50LT5scnUubmV4dC0+cHJldiA9IGVudC0+bHJ1LnByZXY7CisJCWVudC0+bHJ1LnByZXYtPm5leHQgPSBlbnQtPmxydS5uZXh0OworCQlkZWx0YV9iYXNlX2NhY2hlZCAtPSBlbnQtPnNpemU7CisJfSBlbHNlIHsKKwkJcmV0ID0geG1lbWR1cHooZW50LT5kYXRhLCBlbnQtPnNpemUpOworCX0KKwkqdHlwZSA9IGVudC0+dHlwZTsKKwkqYmFzZV9zaXplID0gZW50LT5zaXplOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2RlbHRhX2Jhc2VfY2FjaGUoc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgKmVudCkKK3sKKwlpZiAoZW50LT5kYXRhKSB7CisJCWZyZWUoZW50LT5kYXRhKTsKKwkJZW50LT5kYXRhID0gTlVMTDsKKwkJZW50LT5scnUubmV4dC0+cHJldiA9IGVudC0+bHJ1LnByZXY7CisJCWVudC0+bHJ1LnByZXYtPm5leHQgPSBlbnQtPmxydS5uZXh0OworCQlkZWx0YV9iYXNlX2NhY2hlZCAtPSBlbnQtPnNpemU7CisJfQorfQorCit2b2lkIGNsZWFyX2RlbHRhX2Jhc2VfY2FjaGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHA7CisJZm9yIChwID0gMDsgcCA8IE1BWF9ERUxUQV9DQUNIRTsgcCsrKQorCQlyZWxlYXNlX2RlbHRhX2Jhc2VfY2FjaGUoJmRlbHRhX2Jhc2VfY2FjaGVbcF0pOworfQorCitzdGF0aWMgdm9pZCBhZGRfZGVsdGFfYmFzZV9jYWNoZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3QgYmFzZV9vZmZzZXQsCisJdm9pZCAqYmFzZSwgdW5zaWduZWQgbG9uZyBiYXNlX3NpemUsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIGhhc2ggPSBwYWNrX2VudHJ5X2hhc2gocCwgYmFzZV9vZmZzZXQpOworCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICplbnQgPSBkZWx0YV9iYXNlX2NhY2hlICsgaGFzaDsKKwlzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9scnVfbGlzdCAqbHJ1OworCisJcmVsZWFzZV9kZWx0YV9iYXNlX2NhY2hlKGVudCk7CisJZGVsdGFfYmFzZV9jYWNoZWQgKz0gYmFzZV9zaXplOworCisJZm9yIChscnUgPSBkZWx0YV9iYXNlX2NhY2hlX2xydS5uZXh0OworCSAgICAgZGVsdGFfYmFzZV9jYWNoZWQgPiBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0CisJICAgICAmJiBscnUgIT0gJmRlbHRhX2Jhc2VfY2FjaGVfbHJ1OworCSAgICAgbHJ1ID0gbHJ1LT5uZXh0KSB7CisJCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICpmID0gKHZvaWQgKilscnU7CisJCWlmIChmLT50eXBlID09IE9CSl9CTE9CKQorCQkJcmVsZWFzZV9kZWx0YV9iYXNlX2NhY2hlKGYpOworCX0KKwlmb3IgKGxydSA9IGRlbHRhX2Jhc2VfY2FjaGVfbHJ1Lm5leHQ7CisJICAgICBkZWx0YV9iYXNlX2NhY2hlZCA+IGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQKKwkgICAgICYmIGxydSAhPSAmZGVsdGFfYmFzZV9jYWNoZV9scnU7CisJICAgICBscnUgPSBscnUtPm5leHQpIHsKKwkJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgKmYgPSAodm9pZCAqKWxydTsKKwkJcmVsZWFzZV9kZWx0YV9iYXNlX2NhY2hlKGYpOworCX0KKworCWVudC0+cCA9IHA7CisJZW50LT5iYXNlX29mZnNldCA9IGJhc2Vfb2Zmc2V0OworCWVudC0+dHlwZSA9IHR5cGU7CisJZW50LT5kYXRhID0gYmFzZTsKKwllbnQtPnNpemUgPSBiYXNlX3NpemU7CisJZW50LT5scnUubmV4dCA9ICZkZWx0YV9iYXNlX2NhY2hlX2xydTsKKwllbnQtPmxydS5wcmV2ID0gZGVsdGFfYmFzZV9jYWNoZV9scnUucHJldjsKKwlkZWx0YV9iYXNlX2NhY2hlX2xydS5wcmV2LT5uZXh0ID0gJmVudC0+bHJ1OworCWRlbHRhX2Jhc2VfY2FjaGVfbHJ1LnByZXYgPSAmZW50LT5scnU7Cit9CisKK3N0YXRpYyB2b2lkICpyZWFkX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUpOworCitzdGF0aWMgdm9pZCAqdW5wYWNrX2RlbHRhX2VudHJ5KHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCXN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKKwkJCQlvZmZfdCBjdXJwb3MsCisJCQkJdW5zaWduZWQgbG9uZyBkZWx0YV9zaXplLAorCQkJCW9mZl90IG9ial9vZmZzZXQsCisJCQkJZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCQl1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwl2b2lkICpkZWx0YV9kYXRhLCAqcmVzdWx0LCAqYmFzZTsKKwl1bnNpZ25lZCBsb25nIGJhc2Vfc2l6ZTsKKwlvZmZfdCBiYXNlX29mZnNldDsKKworCWJhc2Vfb2Zmc2V0ID0gZ2V0X2RlbHRhX2Jhc2UocCwgd19jdXJzLCAmY3VycG9zLCAqdHlwZSwgb2JqX29mZnNldCk7CisJaWYgKCFiYXNlX29mZnNldCkgeworCQllcnJvcigiZmFpbGVkIHRvIHZhbGlkYXRlIGRlbHRhIGJhc2UgcmVmZXJlbmNlICIKKwkJICAgICAgImF0IG9mZnNldCAlIlBSSXVNQVgiIGZyb20gJXMiLAorCQkgICAgICAodWludG1heF90KWN1cnBvcywgcC0+cGFja19uYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXVudXNlX3BhY2sod19jdXJzKTsKKwliYXNlID0gY2FjaGVfb3JfdW5wYWNrX2VudHJ5KHAsIGJhc2Vfb2Zmc2V0LCAmYmFzZV9zaXplLCB0eXBlLCAwKTsKKwlpZiAoIWJhc2UpIHsKKwkJLyoKKwkJICogV2UncmUgcHJvYmFibHkgaW4gZGVlcCBzaGl0LCBidXQgbGV0J3MgdHJ5IHRvIGZldGNoCisJCSAqIHRoZSByZXF1aXJlZCBiYXNlIGFueXdheSBmcm9tIGFub3RoZXIgcGFjayBvciBsb29zZS4KKwkJICogVGhpcyBpcyBjb3N0bHkgYnV0IHNob3VsZCBoYXBwZW4gb25seSBpbiB0aGUgcHJlc2VuY2UKKwkJICogb2YgYSBjb3JydXB0ZWQgcGFjaywgYW5kIGlzIGJldHRlciB0aGFuIGZhaWxpbmcgb3V0cmlnaHQuCisJCSAqLworCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeDsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZV9zaGExOworCQlyZXZpZHggPSBmaW5kX3BhY2tfcmV2aW5kZXgocCwgYmFzZV9vZmZzZXQpOworCQlpZiAoIXJldmlkeCkKKwkJCXJldHVybiBOVUxMOworCQliYXNlX3NoYTEgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIHJldmlkeC0+bnIpOworCQllcnJvcigiZmFpbGVkIHRvIHJlYWQgZGVsdGEgYmFzZSBvYmplY3QgJXMiCisJCSAgICAgICIgYXQgb2Zmc2V0ICUiUFJJdU1BWCIgZnJvbSAlcyIsCisJCSAgICAgIHNoYTFfdG9faGV4KGJhc2Vfc2hhMSksICh1aW50bWF4X3QpYmFzZV9vZmZzZXQsCisJCSAgICAgIHAtPnBhY2tfbmFtZSk7CisJCW1hcmtfYmFkX3BhY2tlZF9vYmplY3QocCwgYmFzZV9zaGExKTsKKwkJYmFzZSA9IHJlYWRfb2JqZWN0KGJhc2Vfc2hhMSwgdHlwZSwgJmJhc2Vfc2l6ZSk7CisJCWlmICghYmFzZSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCWRlbHRhX2RhdGEgPSB1bnBhY2tfY29tcHJlc3NlZF9lbnRyeShwLCB3X2N1cnMsIGN1cnBvcywgZGVsdGFfc2l6ZSk7CisJaWYgKCFkZWx0YV9kYXRhKSB7CisJCWVycm9yKCJmYWlsZWQgdG8gdW5wYWNrIGNvbXByZXNzZWQgZGVsdGEgIgorCQkgICAgICAiYXQgb2Zmc2V0ICUiUFJJdU1BWCIgZnJvbSAlcyIsCisJCSAgICAgICh1aW50bWF4X3QpY3VycG9zLCBwLT5wYWNrX25hbWUpOworCQlmcmVlKGJhc2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmVzdWx0ID0gcGF0Y2hfZGVsdGEoYmFzZSwgYmFzZV9zaXplLAorCQkJICAgICBkZWx0YV9kYXRhLCBkZWx0YV9zaXplLAorCQkJICAgICBzaXplcCk7CisJaWYgKCFyZXN1bHQpCisJCWRpZSgiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIik7CisJZnJlZShkZWx0YV9kYXRhKTsKKwlhZGRfZGVsdGFfYmFzZV9jYWNoZShwLCBiYXNlX29mZnNldCwgYmFzZSwgYmFzZV9zaXplLCAqdHlwZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcGFja19hY2Nlc3NfbG9nKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBvYmpfb2Zmc2V0KQoreworCXN0YXRpYyBGSUxFICpsb2dfZmlsZTsKKworCWlmICghbG9nX2ZpbGUpIHsKKwkJbG9nX2ZpbGUgPSBmb3Blbihsb2dfcGFja19hY2Nlc3MsICJ3Iik7CisJCWlmICghbG9nX2ZpbGUpIHsKKwkJCWVycm9yKCJjYW5ub3Qgb3BlbiBwYWNrIGFjY2VzcyBsb2cgJyVzJyBmb3Igd3JpdGluZzogJXMiLAorCQkJICAgICAgbG9nX3BhY2tfYWNjZXNzLCBzdHJlcnJvcihlcnJubykpOworCQkJbG9nX3BhY2tfYWNjZXNzID0gTlVMTDsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlmcHJpbnRmKGxvZ19maWxlLCAiJXMgJSJQUkl1TUFYIlxuIiwKKwkJcC0+cGFja19uYW1lLCAodWludG1heF90KW9ial9vZmZzZXQpOworCWZmbHVzaChsb2dfZmlsZSk7Cit9CisKK2ludCBkb19jaGVja19wYWNrZWRfb2JqZWN0X2NyYzsKKwordm9pZCAqdW5wYWNrX2VudHJ5KHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBvYmpfb2Zmc2V0LAorCQkgICBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7CisJb2ZmX3QgY3VycG9zID0gb2JqX29mZnNldDsKKwl2b2lkICpkYXRhOworCisJaWYgKGxvZ19wYWNrX2FjY2VzcykKKwkJd3JpdGVfcGFja19hY2Nlc3NfbG9nKHAsIG9ial9vZmZzZXQpOworCisJaWYgKGRvX2NoZWNrX3BhY2tlZF9vYmplY3RfY3JjICYmIHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aWR4ID0gZmluZF9wYWNrX3JldmluZGV4KHAsIG9ial9vZmZzZXQpOworCQl1bnNpZ25lZCBsb25nIGxlbiA9IHJldmlkeFsxXS5vZmZzZXQgLSBvYmpfb2Zmc2V0OworCQlpZiAoY2hlY2tfcGFja19jcmMocCwgJndfY3Vycywgb2JqX29mZnNldCwgbGVuLCByZXZpZHgtPm5yKSkgeworCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9CisJCQkJbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCByZXZpZHgtPm5yKTsKKwkJCWVycm9yKCJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIiwKKwkJCSAgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCW1hcmtfYmFkX3BhY2tlZF9vYmplY3QocCwgc2hhMSk7CisJCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwkqdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHAsICZ3X2N1cnMsICZjdXJwb3MsIHNpemVwKTsKKwlzd2l0Y2ggKCp0eXBlKSB7CisJY2FzZSBPQkpfT0ZTX0RFTFRBOgorCWNhc2UgT0JKX1JFRl9ERUxUQToKKwkJZGF0YSA9IHVucGFja19kZWx0YV9lbnRyeShwLCAmd19jdXJzLCBjdXJwb3MsICpzaXplcCwKKwkJCQkJICBvYmpfb2Zmc2V0LCB0eXBlLCBzaXplcCk7CisJCWJyZWFrOworCWNhc2UgT0JKX0NPTU1JVDoKKwljYXNlIE9CSl9UUkVFOgorCWNhc2UgT0JKX0JMT0I6CisJY2FzZSBPQkpfVEFHOgorCQlkYXRhID0gdW5wYWNrX2NvbXByZXNzZWRfZW50cnkocCwgJndfY3VycywgY3VycG9zLCAqc2l6ZXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhID0gTlVMTDsKKwkJZXJyb3IoInVua25vd24gb2JqZWN0IHR5cGUgJWkgYXQgb2Zmc2V0ICUiUFJJdU1BWCIgaW4gJXMiLAorCQkgICAgICAqdHlwZSwgKHVpbnRtYXhfdClvYmpfb2Zmc2V0LCBwLT5wYWNrX25hbWUpOworCX0KKwl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCXJldHVybiBkYXRhOworfQorCitjb25zdCB1bnNpZ25lZCBjaGFyICpudGhfcGFja2VkX29iamVjdF9zaGExKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCQkgICAgdWludDMyX3QgbikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleCA9IHAtPmluZGV4X2RhdGE7CisJaWYgKCFpbmRleCkgeworCQlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQkJcmV0dXJuIE5VTEw7CisJCWluZGV4ID0gcC0+aW5kZXhfZGF0YTsKKwl9CisJaWYgKG4gPj0gcC0+bnVtX29iamVjdHMpCisJCXJldHVybiBOVUxMOworCWluZGV4ICs9IDQgKiAyNTY7CisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPT0gMSkgeworCQlyZXR1cm4gaW5kZXggKyAyNCAqIG4gKyA0OworCX0gZWxzZSB7CisJCWluZGV4ICs9IDg7CisJCXJldHVybiBpbmRleCArIDIwICogbjsKKwl9Cit9CisKK29mZl90IG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgdWludDMyX3QgbikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleCA9IHAtPmluZGV4X2RhdGE7CisJaW5kZXggKz0gNCAqIDI1NjsKKwlpZiAocC0+aW5kZXhfdmVyc2lvbiA9PSAxKSB7CisJCXJldHVybiBudG9obCgqKCh1aW50MzJfdCAqKShpbmRleCArIDI0ICogbikpKTsKKwl9IGVsc2UgeworCQl1aW50MzJfdCBvZmY7CisJCWluZGV4ICs9IDggKyBwLT5udW1fb2JqZWN0cyAqICgyMCArIDQpOworCQlvZmYgPSBudG9obCgqKCh1aW50MzJfdCAqKShpbmRleCArIDQgKiBuKSkpOworCQlpZiAoIShvZmYgJiAweDgwMDAwMDAwKSkKKwkJCXJldHVybiBvZmY7CisJCWluZGV4ICs9IHAtPm51bV9vYmplY3RzICogNCArIChvZmYgJiAweDdmZmZmZmZmKSAqIDg7CisJCXJldHVybiAoKCh1aW50NjRfdCludG9obCgqKCh1aW50MzJfdCAqKShpbmRleCArIDApKSkpIDw8IDMyKSB8CisJCQkJICAgbnRvaGwoKigodWludDMyX3QgKikoaW5kZXggKyA0KSkpOworCX0KK30KKworb2ZmX3QgZmluZF9wYWNrX2VudHJ5X29uZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJY29uc3QgdWludDMyX3QgKmxldmVsMV9vZnMgPSBwLT5pbmRleF9kYXRhOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGV4ID0gcC0+aW5kZXhfZGF0YTsKKwl1bnNpZ25lZCBoaSwgbG8sIHN0cmlkZTsKKwlzdGF0aWMgaW50IHVzZV9sb29rdXAgPSAtMTsKKwlzdGF0aWMgaW50IGRlYnVnX2xvb2t1cCA9IC0xOworCisJaWYgKGRlYnVnX2xvb2t1cCA8IDApCisJCWRlYnVnX2xvb2t1cCA9ICEhZ2V0ZW52KCJHSVRfREVCVUdfTE9PS1VQIik7CisKKwlpZiAoIWluZGV4KSB7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCQlyZXR1cm4gMDsKKwkJbGV2ZWwxX29mcyA9IHAtPmluZGV4X2RhdGE7CisJCWluZGV4ID0gcC0+aW5kZXhfZGF0YTsKKwl9CisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCWxldmVsMV9vZnMgKz0gMjsKKwkJaW5kZXggKz0gODsKKwl9CisJaW5kZXggKz0gNCAqIDI1NjsKKwloaSA9IG50b2hsKGxldmVsMV9vZnNbKnNoYTFdKTsKKwlsbyA9ICgoKnNoYTEgPT0gMHgwKSA/IDAgOiBudG9obChsZXZlbDFfb2ZzWypzaGExIC0gMV0pKTsKKwlpZiAocC0+aW5kZXhfdmVyc2lvbiA+IDEpIHsKKwkJc3RyaWRlID0gMjA7CisJfSBlbHNlIHsKKwkJc3RyaWRlID0gMjQ7CisJCWluZGV4ICs9IDQ7CisJfQorCisJaWYgKGRlYnVnX2xvb2t1cCkKKwkJcHJpbnRmKCIlMDJ4JTAyeCUwMnguLi4gbG8gJXUgaGkgJXUgbnIgJSJQUkl1MzIiXG4iLAorCQkgICAgICAgc2hhMVswXSwgc2hhMVsxXSwgc2hhMVsyXSwgbG8sIGhpLCBwLT5udW1fb2JqZWN0cyk7CisKKwlpZiAodXNlX2xvb2t1cCA8IDApCisJCXVzZV9sb29rdXAgPSAhIWdldGVudigiR0lUX1VTRV9MT09LVVAiKTsKKwlpZiAodXNlX2xvb2t1cCkgeworCQlpbnQgcG9zID0gc2hhMV9lbnRyeV9wb3MoaW5kZXgsIHN0cmlkZSwgMCwKKwkJCQkJIGxvLCBoaSwgcC0+bnVtX29iamVjdHMsIHNoYTEpOworCQlpZiAocG9zIDwgMCkKKwkJCXJldHVybiAwOworCQlyZXR1cm4gbnRoX3BhY2tlZF9vYmplY3Rfb2Zmc2V0KHAsIHBvcyk7CisJfQorCisJZG8geworCQl1bnNpZ25lZCBtaSA9IChsbyArIGhpKSAvIDI7CisJCWludCBjbXAgPSBoYXNoY21wKGluZGV4ICsgbWkgKiBzdHJpZGUsIHNoYTEpOworCisJCWlmIChkZWJ1Z19sb29rdXApCisJCQlwcmludGYoImxvICV1IGhpICV1IHJnICV1IG1pICV1XG4iLAorCQkJICAgICAgIGxvLCBoaSwgaGkgLSBsbywgbWkpOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBudGhfcGFja2VkX29iamVjdF9vZmZzZXQocCwgbWkpOworCQlpZiAoY21wID4gMCkKKwkJCWhpID0gbWk7CisJCWVsc2UKKwkJCWxvID0gbWkrMTsKKwl9IHdoaWxlIChsbyA8IGhpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGlzX3BhY2tfdmFsaWQoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJLyogQW4gYWxyZWFkeSBvcGVuIHBhY2sgaXMga25vd24gdG8gYmUgdmFsaWQuICovCisJaWYgKHAtPnBhY2tfZmQgIT0gLTEpCisJCXJldHVybiAxOworCisJLyogSWYgdGhlIHBhY2sgaGFzIG9uZSB3aW5kb3cgY29tcGxldGVseSBjb3ZlcmluZyB0aGUKKwkgKiBmaWxlIHNpemUsIHRoZSBwYWNrIGlzIGtub3duIHRvIGJlIHZhbGlkIGV2ZW4gaWYKKwkgKiB0aGUgZGVzY3JpcHRvciBpcyBub3QgY3VycmVudGx5IG9wZW4uCisJICovCisJaWYgKHAtPndpbmRvd3MpIHsKKwkJc3RydWN0IHBhY2tfd2luZG93ICp3ID0gcC0+d2luZG93czsKKworCQlpZiAoIXctPm9mZnNldCAmJiB3LT5sZW4gPT0gcC0+cGFja19zaXplKQorCQkJcmV0dXJuIDE7CisJfQorCisJLyogRm9yY2UgdGhlIHBhY2sgdG8gb3BlbiB0byBwcm92ZSBpdHMgdmFsaWQuICovCisJcmV0dXJuICFvcGVuX3BhY2tlZF9naXQocCk7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9wYWNrX2VudHJ5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICBzdHJ1Y3QgcGFja19lbnRyeSAqZSwKKwkJCSAgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCW9mZl90IG9mZnNldDsKKworCWlmIChwLT5udW1fYmFkX29iamVjdHMpIHsKKwkJdW5zaWduZWQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHAtPm51bV9iYWRfb2JqZWN0czsgaSsrKQorCQkJaWYgKCFoYXNoY21wKHNoYTEsIHAtPmJhZF9vYmplY3Rfc2hhMSArIDIwICogaSkpCisJCQkJcmV0dXJuIDA7CisJfQorCisJb2Zmc2V0ID0gZmluZF9wYWNrX2VudHJ5X29uZShzaGExLCBwKTsKKwlpZiAoIW9mZnNldCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIGFyZSBhYm91dCB0byB0ZWxsIHRoZSBjYWxsZXIgd2hlcmUgdGhleSBjYW4gbG9jYXRlIHRoZQorCSAqIHJlcXVlc3RlZCBvYmplY3QuICBXZSBiZXR0ZXIgbWFrZSBzdXJlIHRoZSBwYWNrZmlsZSBpcworCSAqIHN0aWxsIGhlcmUgYW5kIGNhbiBiZSBhY2Nlc3NlZCBiZWZvcmUgc3VwcGx5aW5nIHRoYXQKKwkgKiBhbnN3ZXIsIGFzIGl0IG1heSBoYXZlIGJlZW4gZGVsZXRlZCBzaW5jZSB0aGUgaW5kZXggd2FzCisJICogbG9hZGVkIQorCSAqLworCWlmICghaXNfcGFja192YWxpZChwKSkgeworCQl3YXJuaW5nKCJwYWNrZmlsZSAlcyBjYW5ub3QgYmUgYWNjZXNzZWQiLCBwLT5wYWNrX25hbWUpOworCQlyZXR1cm4gMDsKKwl9CisJZS0+b2Zmc2V0ID0gb2Zmc2V0OworCWUtPnAgPSBwOworCWhhc2hjcHkoZS0+c2hhMSwgc2hhMSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9wYWNrX2VudHJ5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBwYWNrX2VudHJ5ICplKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisJaWYgKCFwYWNrZWRfZ2l0KQorCQlyZXR1cm4gMDsKKworCWlmIChsYXN0X2ZvdW5kX3BhY2sgJiYgZmlsbF9wYWNrX2VudHJ5KHNoYTEsIGUsIGxhc3RfZm91bmRfcGFjaykpCisJCXJldHVybiAxOworCisJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAgPT0gbGFzdF9mb3VuZF9wYWNrIHx8ICFmaWxsX3BhY2tfZW50cnkoc2hhMSwgZSwgcCkpCisJCQljb250aW51ZTsKKworCQlsYXN0X2ZvdW5kX3BhY2sgPSBwOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwYWNrZWRfZ2l0ICpmaW5kX3NoYTFfcGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgc3RydWN0IHBhY2tlZF9naXQgKnBhY2tzKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJZm9yIChwID0gcGFja3M7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChmaW5kX3BhY2tfZW50cnlfb25lKHNoYTEsIHApKQorCQkJcmV0dXJuIHA7CisJfQorCXJldHVybiBOVUxMOworCit9CisKK3N0YXRpYyBpbnQgc2hhMV9sb29zZV9vYmplY3RfaW5mbyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbWFwc2l6ZSwgc2l6ZTsKKwl2b2lkICptYXA7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCWNoYXIgaGRyWzMyXTsKKworCW1hcCA9IG1hcF9zaGExX2ZpbGUoc2hhMSwgJm1hcHNpemUpOworCWlmICghbWFwKQorCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBmaW5kICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmICh1bnBhY2tfc2hhMV9oZWFkZXIoJnN0cmVhbSwgbWFwLCBtYXBzaXplLCBoZHIsIHNpemVvZihoZHIpKSA8IDApCisJCXN0YXR1cyA9IGVycm9yKCJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIsCisJCQkgICAgICAgc2hhMV90b19oZXgoc2hhMSkpOworCWVsc2UgaWYgKChzdGF0dXMgPSBwYXJzZV9zaGExX2hlYWRlcihoZHIsICZzaXplKSkgPCAwKQorCQlzdGF0dXMgPSBlcnJvcigidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwllbHNlIGlmIChzaXplcCkKKwkJKnNpemVwID0gc2l6ZTsKKwlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJbXVubWFwKG1hcCwgbWFwc2l6ZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogcmV0dXJucyBlbnVtIG9iamVjdF90eXBlIG9yIG5lZ2F0aXZlICovCitpbnQgc2hhMV9vYmplY3RfaW5mb19leHRlbmRlZChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9pKQoreworCXN0cnVjdCBjYWNoZWRfb2JqZWN0ICpjbzsKKwlzdHJ1Y3QgcGFja19lbnRyeSBlOworCWludCBzdGF0dXMsIHJ0eXBlOworCisJY28gPSBmaW5kX2NhY2hlZF9vYmplY3Qoc2hhMSk7CisJaWYgKGNvKSB7CisJCWlmIChvaS0+c2l6ZXApCisJCQkqKG9pLT5zaXplcCkgPSBjby0+c2l6ZTsKKwkJb2ktPndoZW5jZSA9IE9JX0NBQ0hFRDsKKwkJcmV0dXJuIGNvLT50eXBlOworCX0KKworCWlmICghZmluZF9wYWNrX2VudHJ5KHNoYTEsICZlKSkgeworCQkvKiBNb3N0IGxpa2VseSBpdCdzIGEgbG9vc2Ugb2JqZWN0LiAqLworCQlzdGF0dXMgPSBzaGExX2xvb3NlX29iamVjdF9pbmZvKHNoYTEsIG9pLT5zaXplcCk7CisJCWlmIChzdGF0dXMgPj0gMCkgeworCQkJb2ktPndoZW5jZSA9IE9JX0xPT1NFOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCisJCS8qIE5vdCBhIGxvb3NlIG9iamVjdDsgc29tZW9uZSBlbHNlIG1heSBoYXZlIGp1c3QgcGFja2VkIGl0LiAqLworCQlyZXByZXBhcmVfcGFja2VkX2dpdCgpOworCQlpZiAoIWZpbmRfcGFja19lbnRyeShzaGExLCAmZSkpCisJCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXN0YXR1cyA9IHBhY2tlZF9vYmplY3RfaW5mbyhlLnAsIGUub2Zmc2V0LCBvaS0+c2l6ZXAsICZydHlwZSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWFya19iYWRfcGFja2VkX29iamVjdChlLnAsIHNoYTEpOworCQlzdGF0dXMgPSBzaGExX29iamVjdF9pbmZvX2V4dGVuZGVkKHNoYTEsIG9pKTsKKwl9IGVsc2UgaWYgKGluX2RlbHRhX2Jhc2VfY2FjaGUoZS5wLCBlLm9mZnNldCkpIHsKKwkJb2ktPndoZW5jZSA9IE9JX0RCQ0FDSEVEOworCX0gZWxzZSB7CisJCW9pLT53aGVuY2UgPSBPSV9QQUNLRUQ7CisJCW9pLT51LnBhY2tlZC5vZmZzZXQgPSBlLm9mZnNldDsKKwkJb2ktPnUucGFja2VkLnBhY2sgPSBlLnA7CisJCW9pLT51LnBhY2tlZC5pc19kZWx0YSA9IChydHlwZSA9PSBPQkpfUkVGX0RFTFRBIHx8CisJCQkJCSBydHlwZSA9PSBPQkpfT0ZTX0RFTFRBKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgc2hhMV9vYmplY3RfaW5mbyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2luZm8gb2k7CisKKwlvaS5zaXplcCA9IHNpemVwOworCXJldHVybiBzaGExX29iamVjdF9pbmZvX2V4dGVuZGVkKHNoYTEsICZvaSk7Cit9CisKK3N0YXRpYyB2b2lkICpyZWFkX3BhY2tlZF9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgICBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXN0cnVjdCBwYWNrX2VudHJ5IGU7CisJdm9pZCAqZGF0YTsKKworCWlmICghZmluZF9wYWNrX2VudHJ5KHNoYTEsICZlKSkKKwkJcmV0dXJuIE5VTEw7CisJZGF0YSA9IGNhY2hlX29yX3VucGFja19lbnRyeShlLnAsIGUub2Zmc2V0LCBzaXplLCB0eXBlLCAxKTsKKwlpZiAoIWRhdGEpIHsKKwkJLyoKKwkJICogV2UncmUgcHJvYmFibHkgaW4gZGVlcCBzaGl0LCBidXQgbGV0J3MgdHJ5IHRvIGZldGNoCisJCSAqIHRoZSByZXF1aXJlZCBvYmplY3QgYW55d2F5IGZyb20gYW5vdGhlciBwYWNrIG9yIGxvb3NlLgorCQkgKiBUaGlzIHNob3VsZCBoYXBwZW4gb25seSBpbiB0aGUgcHJlc2VuY2Ugb2YgYSBjb3JydXB0ZWQKKwkJICogcGFjaywgYW5kIGlzIGJldHRlciB0aGFuIGZhaWxpbmcgb3V0cmlnaHQuCisJCSAqLworCQllcnJvcigiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICVzIGF0IG9mZnNldCAlIlBSSXVNQVgiIGZyb20gJXMiLAorCQkgICAgICBzaGExX3RvX2hleChzaGExKSwgKHVpbnRtYXhfdCllLm9mZnNldCwgZS5wLT5wYWNrX25hbWUpOworCQltYXJrX2JhZF9wYWNrZWRfb2JqZWN0KGUucCwgc2hhMSk7CisJCWRhdGEgPSByZWFkX29iamVjdChzaGExLCB0eXBlLCBzaXplKTsKKwl9CisJcmV0dXJuIGRhdGE7Cit9CisKK2ludCBwcmV0ZW5kX3NoYTFfZmlsZSh2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNhY2hlZF9vYmplY3QgKmNvOworCisJaGFzaF9zaGExX2ZpbGUoYnVmLCBsZW4sIHR5cGVuYW1lKHR5cGUpLCBzaGExKTsKKwlpZiAoaGFzX3NoYTFfZmlsZShzaGExKSB8fCBmaW5kX2NhY2hlZF9vYmplY3Qoc2hhMSkpCisJCXJldHVybiAwOworCWlmIChjYWNoZWRfb2JqZWN0X2FsbG9jIDw9IGNhY2hlZF9vYmplY3RfbnIpIHsKKwkJY2FjaGVkX29iamVjdF9hbGxvYyA9IGFsbG9jX25yKGNhY2hlZF9vYmplY3RfYWxsb2MpOworCQljYWNoZWRfb2JqZWN0cyA9IHhyZWFsbG9jKGNhY2hlZF9vYmplY3RzLAorCQkJCQkgIHNpemVvZigqY2FjaGVkX29iamVjdHMpICoKKwkJCQkJICBjYWNoZWRfb2JqZWN0X2FsbG9jKTsKKwl9CisJY28gPSAmY2FjaGVkX29iamVjdHNbY2FjaGVkX29iamVjdF9ucisrXTsKKwljby0+c2l6ZSA9IGxlbjsKKwljby0+dHlwZSA9IHR5cGU7CisJY28tPmJ1ZiA9IHhtYWxsb2MobGVuKTsKKwltZW1jcHkoY28tPmJ1ZiwgYnVmLCBsZW4pOworCWhhc2hjcHkoY28tPnNoYTEsIHNoYTEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqcmVhZF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCSB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbWFwc2l6ZTsKKwl2b2lkICptYXAsICpidWY7CisJc3RydWN0IGNhY2hlZF9vYmplY3QgKmNvOworCisJY28gPSBmaW5kX2NhY2hlZF9vYmplY3Qoc2hhMSk7CisJaWYgKGNvKSB7CisJCSp0eXBlID0gY28tPnR5cGU7CisJCSpzaXplID0gY28tPnNpemU7CisJCXJldHVybiB4bWVtZHVweihjby0+YnVmLCBjby0+c2l6ZSk7CisJfQorCisJYnVmID0gcmVhZF9wYWNrZWRfc2hhMShzaGExLCB0eXBlLCBzaXplKTsKKwlpZiAoYnVmKQorCQlyZXR1cm4gYnVmOworCW1hcCA9IG1hcF9zaGExX2ZpbGUoc2hhMSwgJm1hcHNpemUpOworCWlmIChtYXApIHsKKwkJYnVmID0gdW5wYWNrX3NoYTFfZmlsZShtYXAsIG1hcHNpemUsIHR5cGUsIHNpemUsIHNoYTEpOworCQltdW5tYXAobWFwLCBtYXBzaXplKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisJcmVwcmVwYXJlX3BhY2tlZF9naXQoKTsKKwlyZXR1cm4gcmVhZF9wYWNrZWRfc2hhMShzaGExLCB0eXBlLCBzaXplKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGllcyBvbiBjb3JydXB0IG9iamVjdHM7IHRoZSBjYWxsZXJzIHdobyB3YW50IHRvCisgKiBkZWFsIHdpdGggdGhlbSBzaG91bGQgYXJyYW5nZSB0byBjYWxsIHJlYWRfb2JqZWN0KCkgYW5kIGdpdmUgZXJyb3IKKyAqIG1lc3NhZ2VzIHRoZW1zZWx2ZXMuCisgKi8KK3ZvaWQgKnJlYWRfc2hhMV9maWxlX2V4dGVuZGVkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgICBlbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGZsYWcpCit7CisJdm9pZCAqZGF0YTsKKwljaGFyICpwYXRoOworCWNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlcGwgPSAoZmxhZyAmIFJFQURfU0hBMV9GSUxFX1JFUExBQ0UpCisJCT8gbG9va3VwX3JlcGxhY2Vfb2JqZWN0KHNoYTEpIDogc2hhMTsKKworCWVycm5vID0gMDsKKwlkYXRhID0gcmVhZF9vYmplY3QocmVwbCwgdHlwZSwgc2l6ZSk7CisJaWYgKGRhdGEpCisJCXJldHVybiBkYXRhOworCisJaWYgKGVycm5vICYmIGVycm5vICE9IEVOT0VOVCkKKwkJZGllX2Vycm5vKCJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisKKwkvKiBkaWUgaWYgd2UgcmVwbGFjZWQgYW4gb2JqZWN0IHdpdGggb25lIHRoYXQgZG9lcyBub3QgZXhpc3QgKi8KKwlpZiAocmVwbCAhPSBzaGExKQorCQlkaWUoInJlcGxhY2VtZW50ICVzIG5vdCBmb3VuZCBmb3IgJXMiLAorCQkgICAgc2hhMV90b19oZXgocmVwbCksIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCWlmIChoYXNfbG9vc2Vfb2JqZWN0KHJlcGwpKSB7CisJCXBhdGggPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKKwkJZGllKCJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIsCisJCSAgICBzaGExX3RvX2hleChyZXBsKSwgcGF0aCk7CisJfQorCisJaWYgKChwID0gaGFzX3BhY2tlZF9hbmRfYmFkKHJlcGwpKSAhPSBOVUxMKQorCQlkaWUoInBhY2tlZCBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIsCisJCSAgICBzaGExX3RvX2hleChyZXBsKSwgcC0+cGFja19uYW1lKTsKKworCXJldHVybiBOVUxMOworfQorCit2b2lkICpyZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSBjb25zdCBjaGFyICpyZXF1aXJlZF90eXBlX25hbWUsCisJCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmFjdHVhbF9zaGExX3JldHVybikKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGUsIHJlcXVpcmVkX3R5cGU7CisJdm9pZCAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgaXNpemU7CisJdW5zaWduZWQgY2hhciBhY3R1YWxfc2hhMVsyMF07CisKKwlyZXF1aXJlZF90eXBlID0gdHlwZV9mcm9tX3N0cmluZyhyZXF1aXJlZF90eXBlX25hbWUpOworCWhhc2hjcHkoYWN0dWFsX3NoYTEsIHNoYTEpOworCXdoaWxlICgxKSB7CisJCWludCByZWZfbGVuZ3RoID0gLTE7CisJCWNvbnN0IGNoYXIgKnJlZl90eXBlID0gTlVMTDsKKworCQlidWZmZXIgPSByZWFkX3NoYTFfZmlsZShhY3R1YWxfc2hhMSwgJnR5cGUsICZpc2l6ZSk7CisJCWlmICghYnVmZmVyKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICh0eXBlID09IHJlcXVpcmVkX3R5cGUpIHsKKwkJCSpzaXplID0gaXNpemU7CisJCQlpZiAoYWN0dWFsX3NoYTFfcmV0dXJuKQorCQkJCWhhc2hjcHkoYWN0dWFsX3NoYTFfcmV0dXJuLCBhY3R1YWxfc2hhMSk7CisJCQlyZXR1cm4gYnVmZmVyOworCQl9CisJCS8qIEhhbmRsZSByZWZlcmVuY2VzICovCisJCWVsc2UgaWYgKHR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCXJlZl90eXBlID0gInRyZWUgIjsKKwkJZWxzZSBpZiAodHlwZSA9PSBPQkpfVEFHKQorCQkJcmVmX3R5cGUgPSAib2JqZWN0ICI7CisJCWVsc2UgeworCQkJZnJlZShidWZmZXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcmVmX2xlbmd0aCA9IHN0cmxlbihyZWZfdHlwZSk7CisKKwkJaWYgKHJlZl9sZW5ndGggKyA0MCA+IGlzaXplIHx8CisJCSAgICBtZW1jbXAoYnVmZmVyLCByZWZfdHlwZSwgcmVmX2xlbmd0aCkgfHwKKwkJICAgIGdldF9zaGExX2hleCgoY2hhciAqKSBidWZmZXIgKyByZWZfbGVuZ3RoLCBhY3R1YWxfc2hhMSkpIHsKKwkJCWZyZWUoYnVmZmVyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWZyZWUoYnVmZmVyKTsKKwkJLyogTm93IHdlIGhhdmUgdGhlIElEIG9mIHRoZSByZWZlcnJlZC10byBvYmplY3QgaW4KKwkJICogYWN0dWFsX3NoYTEuICBDaGVjayBhZ2Fpbi4gKi8KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3NoYTFfZmlsZV9wcmVwYXJlKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGRyLCBpbnQgKmhkcmxlbikKK3sKKwlnaXRfU0hBX0NUWCBjOworCisJLyogR2VuZXJhdGUgdGhlIGhlYWRlciAqLworCSpoZHJsZW4gPSBzcHJpbnRmKGhkciwgIiVzICVsdSIsIHR5cGUsIGxlbikrMTsKKworCS8qIFNoYTEuLiAqLworCWdpdF9TSEExX0luaXQoJmMpOworCWdpdF9TSEExX1VwZGF0ZSgmYywgaGRyLCAqaGRybGVuKTsKKwlnaXRfU0hBMV9VcGRhdGUoJmMsIGJ1ZiwgbGVuKTsKKwlnaXRfU0hBMV9GaW5hbChzaGExLCAmYyk7Cit9CisKKy8qCisgKiBNb3ZlIHRoZSBqdXN0IHdyaXR0ZW4gb2JqZWN0IGludG8gaXRzIGZpbmFsIHJlc3RpbmcgcGxhY2UuCisgKiBORUVEU1dPUks6IHRoaXMgc2hvdWxkIGJlIHJlbmFtZWQgdG8gZmluYWxpemVfdGVtcF9maWxlKCkgYXMKKyAqICJtb3ZpbmciIGlzIG9ubHkgYSBwYXJ0IG9mIHdoYXQgaXQgZG9lcywgd2hlbiBubyBwYXRjaCBiZXR3ZWVuCisgKiBtYXN0ZXIgdG8gcHUgY2hhbmdlcyB0aGUgY2FsbCBzaXRlcyBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitpbnQgbW92ZV90ZW1wX3RvX2ZpbGUoY29uc3QgY2hhciAqdG1wZmlsZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAob2JqZWN0X2NyZWF0aW9uX21vZGUgPT0gT0JKRUNUX0NSRUFUSU9OX1VTRVNfUkVOQU1FUykKKwkJZ290byB0cnlfcmVuYW1lOworCWVsc2UgaWYgKGxpbmsodG1wZmlsZSwgZmlsZW5hbWUpKQorCQlyZXQgPSBlcnJubzsKKworCS8qCisJICogQ29kYSBoYWNrIC0gY29kYSBkb2Vzbid0IGxpa2UgY3Jvc3MtZGlyZWN0b3J5IGxpbmtzLAorCSAqIHNvIHdlIGZhbGwgYmFjayB0byBhIHJlbmFtZSwgd2hpY2ggd2lsbCBtZWFuIHRoYXQgaXQKKwkgKiB3b24ndCBiZSBhYmxlIHRvIGNoZWNrIGNvbGxpc2lvbnMsIGJ1dCB0aGF0J3Mgbm90IGEKKwkgKiBiaWcgZGVhbC4KKwkgKgorCSAqIFRoZSBzYW1lIGhvbGRzIGZvciBGQVQgZm9ybWF0dGVkIG1lZGlhLgorCSAqCisJICogV2hlbiB0aGlzIHN1Y2NlZWRzLCB3ZSBqdXN0IHJldHVybi4gIFdlIGhhdmUgbm90aGluZworCSAqIGxlZnQgdG8gdW5saW5rLgorCSAqLworCWlmIChyZXQgJiYgcmV0ICE9IEVFWElTVCkgeworCXRyeV9yZW5hbWU6CisJCWlmICghcmVuYW1lKHRtcGZpbGUsIGZpbGVuYW1lKSkKKwkJCWdvdG8gb3V0OworCQlyZXQgPSBlcnJubzsKKwl9CisJdW5saW5rX29yX3dhcm4odG1wZmlsZSk7CisJaWYgKHJldCkgeworCQlpZiAocmV0ICE9IEVFWElTVCkgeworCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlbmFtZSAlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IocmV0KSk7CisJCX0KKwkJLyogRklYTUUhISEgQ29sbGlzaW9uIGNoZWNrIGhlcmUgPyAqLworCX0KKworb3V0OgorCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0oZmlsZW5hbWUpKQorCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBzZXQgcGVybWlzc2lvbiB0byAnJXMnIiwgZmlsZW5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2J1ZmZlcihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLCBsZW4pIDwgMCkKKwkJcmV0dXJuIGVycm9yKCJmaWxlIHdyaXRlIGVycm9yICglcykiLCBzdHJlcnJvcihlcnJubykpOworCXJldHVybiAwOworfQorCitpbnQgaGFzaF9zaGExX2ZpbGUoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNoYXIgaGRyWzMyXTsKKwlpbnQgaGRybGVuOworCXdyaXRlX3NoYTFfZmlsZV9wcmVwYXJlKGJ1ZiwgbGVuLCB0eXBlLCBzaGExLCBoZHIsICZoZHJsZW4pOworCXJldHVybiAwOworfQorCisvKiBGaW5hbGl6ZSBhIGZpbGUgb24gZGlzaywgYW5kIGNsb3NlIGl0LiAqLworc3RhdGljIHZvaWQgY2xvc2Vfc2hhMV9maWxlKGludCBmZCkKK3sKKwlpZiAoZnN5bmNfb2JqZWN0X2ZpbGVzKQorCQlmc3luY19vcl9kaWUoZmQsICJzaGExIGZpbGUiKTsKKwlpZiAoY2xvc2UoZmQpICE9IDApCisJCWRpZV9lcnJubygiZXJyb3Igd2hlbiBjbG9zaW5nIHNoYTEgZmlsZSIpOworfQorCisvKiBTaXplIG9mIGRpcmVjdG9yeSBjb21wb25lbnQsIGluY2x1ZGluZyB0aGUgZW5kaW5nICcvJyAqLworc3RhdGljIGlubGluZSBpbnQgZGlyZWN0b3J5X3NpemUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY29uc3QgY2hhciAqcyA9IHN0cnJjaHIoZmlsZW5hbWUsICcvJyk7CisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcyAtIGZpbGVuYW1lICsgMTsKK30KKworLyoKKyAqIFRoaXMgY3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgZmluYWwKKyAqICdmaWxlbmFtZScKKyAqCisgKiBXZSB3YW50IHRvIGF2b2lkIGNyb3NzLWRpcmVjdG9yeSBmaWxlbmFtZSByZW5hbWVzLCBiZWNhdXNlIHRob3NlCisgKiBjYW4gaGF2ZSBwcm9ibGVtcyBvbiB2YXJpb3VzIGZpbGVzeXN0ZW1zIChGQVQsIE5GUywgQ29kYSkuCisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX3RtcGZpbGUoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmc2l6LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpbnQgZmQsIGRpcmxlbiA9IGRpcmVjdG9yeV9zaXplKGZpbGVuYW1lKTsKKworCWlmIChkaXJsZW4gKyAyMCA+IGJ1ZnNpeikgeworCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1jcHkoYnVmZmVyLCBmaWxlbmFtZSwgZGlybGVuKTsKKwlzdHJjcHkoYnVmZmVyICsgZGlybGVuLCAidG1wX29ial9YWFhYWFgiKTsKKwlmZCA9IGdpdF9ta3N0ZW1wX21vZGUoYnVmZmVyLCAwNDQ0KTsKKwlpZiAoZmQgPCAwICYmIGRpcmxlbiAmJiBlcnJubyA9PSBFTk9FTlQpIHsKKwkJLyogTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzICovCisJCW1lbWNweShidWZmZXIsIGZpbGVuYW1lLCBkaXJsZW4pOworCQlidWZmZXJbZGlybGVuLTFdID0gMDsKKwkJaWYgKG1rZGlyKGJ1ZmZlciwgMDc3NykgfHwgYWRqdXN0X3NoYXJlZF9wZXJtKGJ1ZmZlcikpCisJCQlyZXR1cm4gLTE7CisKKwkJLyogVHJ5IGFnYWluICovCisJCXN0cmNweShidWZmZXIgKyBkaXJsZW4gLSAxLCAiL3RtcF9vYmpfWFhYWFhYIik7CisJCWZkID0gZ2l0X21rc3RlbXBfbW9kZShidWZmZXIsIDA0NDQpOworCX0KKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfbG9vc2Vfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKmhkciwgaW50IGhkcmxlbiwKKwkJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIHRpbWVfdCBtdGltZSkKK3sKKwlpbnQgZmQsIHJldDsKKwl1bnNpZ25lZCBjaGFyIGNvbXByZXNzZWRbNDA5Nl07CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCWdpdF9TSEFfQ1RYIGM7CisJdW5zaWduZWQgY2hhciBwYXJhbm9fc2hhMVsyMF07CisJY2hhciAqZmlsZW5hbWU7CisJc3RhdGljIGNoYXIgdG1wX2ZpbGVbUEFUSF9NQVhdOworCisJZmlsZW5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKKwlmZCA9IGNyZWF0ZV90bXBmaWxlKHRtcF9maWxlLCBzaXplb2YodG1wX2ZpbGUpLCBmaWxlbmFtZSk7CisJaWYgKGZkIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRUFDQ0VTKQorCQkJcmV0dXJuIGVycm9yKCJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKworCS8qIFNldCBpdCB1cCAqLworCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CisJZ2l0X2RlZmxhdGVfaW5pdCgmc3RyZWFtLCB6bGliX2NvbXByZXNzaW9uX2xldmVsKTsKKwlzdHJlYW0ubmV4dF9vdXQgPSBjb21wcmVzc2VkOworCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoY29tcHJlc3NlZCk7CisJZ2l0X1NIQTFfSW5pdCgmYyk7CisKKwkvKiBGaXJzdCBoZWFkZXIuLiAqLworCXN0cmVhbS5uZXh0X2luID0gKHVuc2lnbmVkIGNoYXIgKiloZHI7CisJc3RyZWFtLmF2YWlsX2luID0gaGRybGVuOworCXdoaWxlIChnaXRfZGVmbGF0ZSgmc3RyZWFtLCAwKSA9PSBaX09LKQorCQk7IC8qIG5vdGhpbmcgKi8KKwlnaXRfU0hBMV9VcGRhdGUoJmMsIGhkciwgaGRybGVuKTsKKworCS8qIFRoZW4gdGhlIGRhdGEgaXRzZWxmLi4gKi8KKwlzdHJlYW0ubmV4dF9pbiA9ICh2b2lkICopYnVmOworCXN0cmVhbS5hdmFpbF9pbiA9IGxlbjsKKwlkbyB7CisJCXVuc2lnbmVkIGNoYXIgKmluMCA9IHN0cmVhbS5uZXh0X2luOworCQlyZXQgPSBnaXRfZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJCWdpdF9TSEExX1VwZGF0ZSgmYywgaW4wLCBzdHJlYW0ubmV4dF9pbiAtIGluMCk7CisJCWlmICh3cml0ZV9idWZmZXIoZmQsIGNvbXByZXNzZWQsIHN0cmVhbS5uZXh0X291dCAtIGNvbXByZXNzZWQpIDwgMCkKKwkJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZSIpOworCQlzdHJlYW0ubmV4dF9vdXQgPSBjb21wcmVzc2VkOworCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGNvbXByZXNzZWQpOworCX0gd2hpbGUgKHJldCA9PSBaX09LKTsKKworCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKQorCQlkaWUoInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIsIHNoYTFfdG9faGV4KHNoYTEpLCByZXQpOworCXJldCA9IGdpdF9kZWZsYXRlX2VuZF9nZW50bHkoJnN0cmVhbSk7CisJaWYgKHJldCAhPSBaX09LKQorCQlkaWUoImRlZmxhdGVFbmQgb24gb2JqZWN0ICVzIGZhaWxlZCAoJWQpIiwgc2hhMV90b19oZXgoc2hhMSksIHJldCk7CisJZ2l0X1NIQTFfRmluYWwocGFyYW5vX3NoYTEsICZjKTsKKwlpZiAoaGFzaGNtcChzaGExLCBwYXJhbm9fc2hhMSkgIT0gMCkKKwkJZGllKCJjb25mdXNlZCBieSB1bnN0YWJsZSBvYmplY3Qgc291cmNlIGRhdGEgZm9yICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJY2xvc2Vfc2hhMV9maWxlKGZkKTsKKworCWlmIChtdGltZSkgeworCQlzdHJ1Y3QgdXRpbWJ1ZiB1dGI7CisJCXV0Yi5hY3RpbWUgPSBtdGltZTsKKwkJdXRiLm1vZHRpbWUgPSBtdGltZTsKKwkJaWYgKHV0aW1lKHRtcF9maWxlLCAmdXRiKSA8IDApCisJCQl3YXJuaW5nKCJmYWlsZWQgdXRpbWUoKSBvbiAlczogJXMiLAorCQkJCXRtcF9maWxlLCBzdHJlcnJvcihlcnJubykpOworCX0KKworCXJldHVybiBtb3ZlX3RlbXBfdG9fZmlsZSh0bXBfZmlsZSwgZmlsZW5hbWUpOworfQorCitpbnQgd3JpdGVfc2hhMV9maWxlKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IGNoYXIgKnR5cGUsIHVuc2lnbmVkIGNoYXIgKnJldHVybnNoYTEpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIGhkclszMl07CisJaW50IGhkcmxlbjsKKworCS8qIE5vcm1hbGx5IGlmIHdlIGhhdmUgaXQgaW4gdGhlIHBhY2sgdGhlbiB3ZSBkbyBub3QgYm90aGVyIHdyaXRpbmcKKwkgKiBpdCBvdXQgaW50byAuZ2l0L29iamVjdHMvPz8vP3szOH0gZmlsZS4KKwkgKi8KKwl3cml0ZV9zaGExX2ZpbGVfcHJlcGFyZShidWYsIGxlbiwgdHlwZSwgc2hhMSwgaGRyLCAmaGRybGVuKTsKKwlpZiAocmV0dXJuc2hhMSkKKwkJaGFzaGNweShyZXR1cm5zaGExLCBzaGExKTsKKwlpZiAoaGFzX3NoYTFfZmlsZShzaGExKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHdyaXRlX2xvb3NlX29iamVjdChzaGExLCBoZHIsIGhkcmxlbiwgYnVmLCBsZW4sIDApOworfQorCitpbnQgZm9yY2Vfb2JqZWN0X2xvb3NlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHRpbWVfdCBtdGltZSkKK3sKKwl2b2lkICpidWY7CisJdW5zaWduZWQgbG9uZyBsZW47CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgaGRyWzMyXTsKKwlpbnQgaGRybGVuOworCWludCByZXQ7CisKKwlpZiAoaGFzX2xvb3NlX29iamVjdChzaGExKSkKKwkJcmV0dXJuIDA7CisJYnVmID0gcmVhZF9wYWNrZWRfc2hhMShzaGExLCAmdHlwZSwgJmxlbik7CisJaWYgKCFidWYpCisJCXJldHVybiBlcnJvcigiY2Fubm90IHJlYWQgc2hhMV9maWxlIGZvciAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwloZHJsZW4gPSBzcHJpbnRmKGhkciwgIiVzICVsdSIsIHR5cGVuYW1lKHR5cGUpLCBsZW4pICsgMTsKKwlyZXQgPSB3cml0ZV9sb29zZV9vYmplY3Qoc2hhMSwgaGRyLCBoZHJsZW4sIGJ1ZiwgbGVuLCBtdGltZSk7CisJZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGhhc19wYWNrX2luZGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJaWYgKHN0YXQoc2hhMV9wYWNrX2luZGV4X25hbWUoc2hhMSksICZzdCkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitpbnQgaGFzX3NoYTFfcGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBwYWNrX2VudHJ5IGU7CisJcmV0dXJuIGZpbmRfcGFja19lbnRyeShzaGExLCAmZSk7Cit9CisKK2ludCBoYXNfc2hhMV9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHBhY2tfZW50cnkgZTsKKworCWlmIChmaW5kX3BhY2tfZW50cnkoc2hhMSwgJmUpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gaGFzX2xvb3NlX29iamVjdChzaGExKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfdHJlZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCBidWYsIHNpemUpOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKQorCQkvKiBkbyBub3RoaW5nCisJCSAqIHRyZWVfZW50cnkoKSB3aWxsIGRpZSgpIG9uIG1hbGZvcm1lZCBlbnRyaWVzICovCisJCTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfY29tbWl0KGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGNvbW1pdCBjOworCW1lbXNldCgmYywgMCwgc2l6ZW9mKGMpKTsKKwlpZiAocGFyc2VfY29tbWl0X2J1ZmZlcigmYywgYnVmLCBzaXplKSkKKwkJZGllKCJjb3JydXB0IGNvbW1pdCIpOworfQorCitzdGF0aWMgdm9pZCBjaGVja190YWcoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgdGFnIHQ7CisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCWlmIChwYXJzZV90YWdfYnVmZmVyKCZ0LCBidWYsIHNpemUpKQorCQlkaWUoImNvcnJ1cHQgdGFnIik7Cit9CisKK3N0YXRpYyBpbnQgaW5kZXhfbWVtKHVuc2lnbmVkIGNoYXIgKnNoYTEsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsCisJCSAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQsIHJlX2FsbG9jYXRlZCA9IDA7CisJaW50IHdyaXRlX29iamVjdCA9IGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1Q7CisKKwlpZiAoIXR5cGUpCisJCXR5cGUgPSBPQkpfQkxPQjsKKworCS8qCisJICogQ29udmVydCBibG9icyB0byBnaXQgaW50ZXJuYWwgZm9ybWF0CisJICovCisJaWYgKCh0eXBlID09IE9CSl9CTE9CKSAmJiBwYXRoKSB7CisJCXN0cnVjdCBzdHJidWYgbmJ1ZiA9IFNUUkJVRl9JTklUOworCQlpZiAoY29udmVydF90b19naXQocGF0aCwgYnVmLCBzaXplLCAmbmJ1ZiwKKwkJCQkgICB3cml0ZV9vYmplY3QgPyBzYWZlX2NybGYgOiBTQUZFX0NSTEZfRkFMU0UpKSB7CisJCQlidWYgPSBzdHJidWZfZGV0YWNoKCZuYnVmLCAmc2l6ZSk7CisJCQlyZV9hbGxvY2F0ZWQgPSAxOworCQl9CisJfQorCWlmIChmbGFncyAmIEhBU0hfRk9STUFUX0NIRUNLKSB7CisJCWlmICh0eXBlID09IE9CSl9UUkVFKQorCQkJY2hlY2tfdHJlZShidWYsIHNpemUpOworCQlpZiAodHlwZSA9PSBPQkpfQ09NTUlUKQorCQkJY2hlY2tfY29tbWl0KGJ1Ziwgc2l6ZSk7CisJCWlmICh0eXBlID09IE9CSl9UQUcpCisJCQljaGVja190YWcoYnVmLCBzaXplKTsKKwl9CisKKwlpZiAod3JpdGVfb2JqZWN0KQorCQlyZXQgPSB3cml0ZV9zaGExX2ZpbGUoYnVmLCBzaXplLCB0eXBlbmFtZSh0eXBlKSwgc2hhMSk7CisJZWxzZQorCQlyZXQgPSBoYXNoX3NoYTFfZmlsZShidWYsIHNpemUsIHR5cGVuYW1lKHR5cGUpLCBzaGExKTsKKwlpZiAocmVfYWxsb2NhdGVkKQorCQlmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbmRleF9waXBlKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmZCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJaWYgKHN0cmJ1Zl9yZWFkKCZzYnVmLCBmZCwgNDA5NikgPj0gMCkKKwkJcmV0ID0gaW5kZXhfbWVtKHNoYTEsIHNidWYuYnVmLCBzYnVmLmxlbiwgdHlwZSwJcGF0aCwgZmxhZ3MpOworCWVsc2UKKwkJcmV0ID0gLTE7CisJc3RyYnVmX3JlbGVhc2UoJnNidWYpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgU01BTExfRklMRV9TSVpFICgzMioxMDI0KQorCitzdGF0aWMgaW50IGluZGV4X2NvcmUodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpwYXRoLAorCQkgICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmV0OworCisJaWYgKCFzaXplKSB7CisJCXJldCA9IGluZGV4X21lbShzaGExLCBOVUxMLCBzaXplLCB0eXBlLCBwYXRoLCBmbGFncyk7CisJfSBlbHNlIGlmIChzaXplIDw9IFNNQUxMX0ZJTEVfU0laRSkgeworCQljaGFyICpidWYgPSB4bWFsbG9jKHNpemUpOworCQlpZiAoc2l6ZSA9PSByZWFkX2luX2Z1bGwoZmQsIGJ1Ziwgc2l6ZSkpCisJCQlyZXQgPSBpbmRleF9tZW0oc2hhMSwgYnVmLCBzaXplLCB0eXBlLCBwYXRoLCBmbGFncyk7CisJCWVsc2UKKwkJCXJldCA9IGVycm9yKCJzaG9ydCByZWFkICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZnJlZShidWYpOworCX0gZWxzZSB7CisJCXZvaWQgKmJ1ZiA9IHhtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwkJcmV0ID0gaW5kZXhfbWVtKHNoYTEsIGJ1Ziwgc2l6ZSwgdHlwZSwgcGF0aCwgZmxhZ3MpOworCQltdW5tYXAoYnVmLCBzaXplKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgY3JlYXRlcyBvbmUgcGFja2ZpbGUgcGVyIGxhcmdlIGJsb2IgdW5sZXNzIGJ1bGstY2hlY2tpbgorICogbWFjaGluZXJ5IGlzICJwbHVnZ2VkIi4KKyAqCisgKiBUaGlzIGFsc28gYnlwYXNzZXMgdGhlIHVzdWFsICJjb252ZXJ0LXRvLWdpdCIgZGFuY2UsIGFuZCB0aGF0IGlzIG9uCisgKiBwdXJwb3NlLiBXZSBjb3VsZCB3cml0ZSBhIHN0cmVhbWluZyB2ZXJzaW9uIG9mIHRoZSBjb252ZXJ0aW5nCisgKiBmdW5jdGlvbnMgYW5kIGluc2VydCB0aGF0IGJlZm9yZSBmZWVkaW5nIHRoZSBkYXRhIHRvIGZhc3QtaW1wb3J0CisgKiAob3IgZXF1aXZhbGVudCBpbi1jb3JlIEFQSSBkZXNjcmliZWQgYWJvdmUpLiBIb3dldmVyLCB0aGF0IGlzCisgKiBzb21ld2hhdCBjb21wbGljYXRlZCwgYXMgd2UgZG8gbm90IGtub3cgdGhlIHNpemUgb2YgdGhlIGZpbHRlcgorICogcmVzdWx0LCB3aGljaCB3ZSBuZWVkIHRvIGtub3cgYmVmb3JlaGFuZCB3aGVuIHdyaXRpbmcgYSBnaXQgb2JqZWN0LgorICogU2luY2UgdGhlIHByaW1hcnkgbW90aXZhdGlvbiBmb3IgdHJ5aW5nIHRvIHN0cmVhbSBmcm9tIHRoZSB3b3JraW5nCisgKiB0cmVlIGZpbGUgYW5kIHRvIGF2b2lkIG1tYXBpbmcgaXQgaW4gY29yZSBpcyB0byBkZWFsIHdpdGggbGFyZ2UKKyAqIGJpbmFyeSBibG9icywgdGhleSBnZW5lcmFsbHkgZG8gbm90IHdhbnQgdG8gZ2V0IGFueSBjb252ZXJzaW9uLCBhbmQKKyAqIGNhbGxlcnMgc2hvdWxkIGF2b2lkIHRoaXMgY29kZSBwYXRoIHdoZW4gZmlsdGVycyBhcmUgcmVxdWVzdGVkLgorICovCitzdGF0aWMgaW50IGluZGV4X3N0cmVhbSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmQsIHNpemVfdCBzaXplLAorCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpwYXRoLAorCQkJdW5zaWduZWQgZmxhZ3MpCit7CisJcmV0dXJuIGluZGV4X2J1bGtfY2hlY2tpbihzaGExLCBmZCwgc2l6ZSwgdHlwZSwgcGF0aCwgZmxhZ3MpOworfQorCitpbnQgaW5kZXhfZmQodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQ7CisJc2l6ZV90IHNpemUgPSB4c2l6ZV90KHN0LT5zdF9zaXplKTsKKworCWlmICghU19JU1JFRyhzdC0+c3RfbW9kZSkpCisJCXJldCA9IGluZGV4X3BpcGUoc2hhMSwgZmQsIHR5cGUsIHBhdGgsIGZsYWdzKTsKKwllbHNlIGlmIChzaXplIDw9IGJpZ19maWxlX3RocmVzaG9sZCB8fCB0eXBlICE9IE9CSl9CTE9CIHx8CisJCSAocGF0aCAmJiB3b3VsZF9jb252ZXJ0X3RvX2dpdChwYXRoLCBOVUxMLCAwLCAwKSkpCisJCXJldCA9IGluZGV4X2NvcmUoc2hhMSwgZmQsIHNpemUsIHR5cGUsIHBhdGgsIGZsYWdzKTsKKwllbHNlCisJCXJldCA9IGluZGV4X3N0cmVhbShzaGExLCBmZCwgc2l6ZSwgdHlwZSwgcGF0aCwgZmxhZ3MpOworCWNsb3NlKGZkKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaW5kZXhfcGF0aCh1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqc3QsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCBmZDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlzd2l0Y2ggKHN0LT5zdF9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGUkVHOgorCQlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCQlpZiAoZmQgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJvcGVuKFwiJXNcIik6ICVzIiwgcGF0aCwKKwkJCQkgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCWlmIChpbmRleF9mZChzaGExLCBmZCwgc3QsIE9CSl9CTE9CLCBwYXRoLCBmbGFncykgPCAwKQorCQkJcmV0dXJuIGVycm9yKCIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIiwKKwkJCQkgICAgIHBhdGgpOworCQlicmVhazsKKwljYXNlIFNfSUZMTks6CisJCWlmIChzdHJidWZfcmVhZGxpbmsoJnNiLCBwYXRoLCBzdC0+c3Rfc2l6ZSkpIHsKKwkJCWNoYXIgKmVycnN0ciA9IHN0cmVycm9yKGVycm5vKTsKKwkJCXJldHVybiBlcnJvcigicmVhZGxpbmsoXCIlc1wiKTogJXMiLCBwYXRoLAorCQkJICAgICAgICAgICAgIGVycnN0cik7CisJCX0KKwkJaWYgKCEoZmxhZ3MgJiBIQVNIX1dSSVRFX09CSkVDVCkpCisJCQloYXNoX3NoYTFfZmlsZShzYi5idWYsIHNiLmxlbiwgYmxvYl90eXBlLCBzaGExKTsKKwkJZWxzZSBpZiAod3JpdGVfc2hhMV9maWxlKHNiLmJ1Ziwgc2IubGVuLCBibG9iX3R5cGUsIHNoYTEpKQorCQkJcmV0dXJuIGVycm9yKCIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIiwKKwkJCQkgICAgIHBhdGgpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlicmVhazsKKwljYXNlIFNfSUZESVI6CisJCXJldHVybiByZXNvbHZlX2dpdGxpbmtfcmVmKHBhdGgsICJIRUFEIiwgc2hhMSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGVycm9yKCIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIiwgcGF0aCk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcmVhZF9wYWNrX2hlYWRlcihpbnQgZmQsIHN0cnVjdCBwYWNrX2hlYWRlciAqaGVhZGVyKQoreworCWlmIChyZWFkX2luX2Z1bGwoZmQsIGhlYWRlciwgc2l6ZW9mKCpoZWFkZXIpKSA8IHNpemVvZigqaGVhZGVyKSkKKwkJLyogImVvZiBiZWZvcmUgcGFjayBoZWFkZXIgd2FzIGZ1bGx5IHJlYWQiICovCisJCXJldHVybiBQSF9FUlJPUl9FT0Y7CisKKwlpZiAoaGVhZGVyLT5oZHJfc2lnbmF0dXJlICE9IGh0b25sKFBBQ0tfU0lHTkFUVVJFKSkKKwkJLyogInByb3RvY29sIGVycm9yIChwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCBkZXRlY3RlZCkiICovCisJCXJldHVybiBQSF9FUlJPUl9QQUNLX1NJR05BVFVSRTsKKwlpZiAoIXBhY2tfdmVyc2lvbl9vayhoZWFkZXItPmhkcl92ZXJzaW9uKSkKKwkJLyogInByb3RvY29sIGVycm9yIChwYWNrIHZlcnNpb24gdW5zdXBwb3J0ZWQpIiAqLworCQlyZXR1cm4gUEhfRVJST1JfUFJPVE9DT0w7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXNzZXJ0X3NoYTFfdHlwZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlIGV4cGVjdCkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOworCWlmICh0eXBlIDwgMCkKKwkJZGllKCIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiLCBzaGExX3RvX2hleChzaGExKSk7CisJaWYgKHR5cGUgIT0gZXhwZWN0KQorCQlkaWUoIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0Iiwgc2hhMV90b19oZXgoc2hhMSksCisJCSAgICB0eXBlbmFtZShleHBlY3QpKTsKK30KZGlmZiAtLWdpdCBhL3NoYTFfbmFtZS5jIGIvc2hhMV9uYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwMDNjNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYTFfbmFtZS5jCkBAIC0wLDAgKzEsMTM4NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisKK3N0YXRpYyBpbnQgZ2V0X3NoYTFfb25lbGluZShjb25zdCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IGNvbW1pdF9saXN0ICopOworCit0eXBlZGVmIGludCAoKmRpc2FtYmlndWF0ZV9oaW50X2ZuKShjb25zdCB1bnNpZ25lZCBjaGFyICosIHZvaWQgKik7CisKK3N0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgeworCWRpc2FtYmlndWF0ZV9oaW50X2ZuIGZuOworCXZvaWQgKmNiX2RhdGE7CisJdW5zaWduZWQgY2hhciBjYW5kaWRhdGVbMjBdOworCXVuc2lnbmVkIGNhbmRpZGF0ZV9leGlzdHM6MTsKKwl1bnNpZ25lZCBjYW5kaWRhdGVfY2hlY2tlZDoxOworCXVuc2lnbmVkIGNhbmRpZGF0ZV9vazoxOworCXVuc2lnbmVkIGRpc2FtYmlndWF0ZV9mbl91c2VkOjE7CisJdW5zaWduZWQgYW1iaWd1b3VzOjE7CisJdW5zaWduZWQgYWx3YXlzX2NhbGxfZm46MTsKK307CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jYW5kaWRhdGVzKHN0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgKmRzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjdXJyZW50KQoreworCWlmIChkcy0+YWx3YXlzX2NhbGxfZm4pIHsKKwkJZHMtPmFtYmlndW91cyA9IGRzLT5mbihjdXJyZW50LCBkcy0+Y2JfZGF0YSkgPyAxIDogMDsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWRzLT5jYW5kaWRhdGVfZXhpc3RzKSB7CisJCS8qIHRoaXMgaXMgdGhlIGZpcnN0IGNhbmRpZGF0ZSAqLworCQloYXNoY3B5KGRzLT5jYW5kaWRhdGUsIGN1cnJlbnQpOworCQlkcy0+Y2FuZGlkYXRlX2V4aXN0cyA9IDE7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKCFoYXNoY21wKGRzLT5jYW5kaWRhdGUsIGN1cnJlbnQpKSB7CisJCS8qIHRoZSBzYW1lIGFzIHdoYXQgd2UgYWxyZWFkeSBoYXZlIHNlZW4gKi8KKwkJcmV0dXJuOworCX0KKworCWlmICghZHMtPmZuKSB7CisJCS8qIGNhbm5vdCBkaXNhbWJpZ3VhdGUgYmV0d2VlbiBkcy0+Y2FuZGlkYXRlIGFuZCBjdXJyZW50ICovCisJCWRzLT5hbWJpZ3VvdXMgPSAxOworCQlyZXR1cm47CisJfQorCisJaWYgKCFkcy0+Y2FuZGlkYXRlX2NoZWNrZWQpIHsKKwkJZHMtPmNhbmRpZGF0ZV9vayA9IGRzLT5mbihkcy0+Y2FuZGlkYXRlLCBkcy0+Y2JfZGF0YSk7CisJCWRzLT5kaXNhbWJpZ3VhdGVfZm5fdXNlZCA9IDE7CisJCWRzLT5jYW5kaWRhdGVfY2hlY2tlZCA9IDE7CisJfQorCisJaWYgKCFkcy0+Y2FuZGlkYXRlX29rKSB7CisJCS8qIGRpc2NhcmQgdGhlIGNhbmRpZGF0ZTsgd2Uga25vdyBpdCBkb2VzIG5vdCBzYXRpc2lmeSBmbiAqLworCQloYXNoY3B5KGRzLT5jYW5kaWRhdGUsIGN1cnJlbnQpOworCQlkcy0+Y2FuZGlkYXRlX2NoZWNrZWQgPSAwOworCQlyZXR1cm47CisJfQorCisJLyogaWYgd2UgcmVhY2ggdGhpcyBwb2ludCwgd2Uga25vdyBkcy0+Y2FuZGlkYXRlIHNhdGlzZmllcyBmbiAqLworCWlmIChkcy0+Zm4oY3VycmVudCwgZHMtPmNiX2RhdGEpKSB7CisJCS8qCisJCSAqIGlmIGJvdGggY3VycmVudCBhbmQgY2FuZGlkYXRlIHNhdGlzZnkgZm4sIHdlIGNhbm5vdAorCQkgKiBkaXNhbWJpZ3VhdGUuCisJCSAqLworCQlkcy0+Y2FuZGlkYXRlX29rID0gMDsKKwkJZHMtPmFtYmlndW91cyA9IDE7CisJfQorCisJLyogb3RoZXJ3aXNlLCBjdXJyZW50IGNhbiBiZSBkaXNjYXJkZWQgYW5kIGNhbmRpZGF0ZSBpcyBzdGlsbCBnb29kICovCit9CisKK3N0YXRpYyB2b2lkIGZpbmRfc2hvcnRfb2JqZWN0X2ZpbGVuYW1lKGludCBsZW4sIGNvbnN0IGNoYXIgKmhleF9wZngsIHN0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgKmRzKQoreworCXN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHQ7CisJY2hhciBoZXhbNDBdOworCXN0YXRpYyBzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqZmFrZWVudDsKKworCWlmICghZmFrZWVudCkgeworCQkvKgorCQkgKiBDcmVhdGUgYSAiZmFrZSIgYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZSB0aGF0CisJCSAqIHBvaW50cyB0byBvdXIgb3duIG9iamVjdCBkYXRhYmFzZSwgdG8gbWFrZSBpdAorCQkgKiBlYXNpZXIgdG8gZ2V0IGEgdGVtcG9yYXJ5IHdvcmtpbmcgc3BhY2UgaW4KKwkJICogYWx0LT5uYW1lL2FsdC0+YmFzZSB3aGlsZSBpdGVyYXRpbmcgb3ZlciB0aGUKKwkJICogb2JqZWN0IGRhdGFiYXNlcyBpbmNsdWRpbmcgb3VyIG93bi4KKwkJICovCisJCWNvbnN0IGNoYXIgKm9iamRpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisJCWludCBvYmpkaXJfbGVuID0gc3RybGVuKG9iamRpcik7CisJCWludCBlbnRsZW4gPSBvYmpkaXJfbGVuICsgNDM7CisJCWZha2VlbnQgPSB4bWFsbG9jKHNpemVvZigqZmFrZWVudCkgKyBlbnRsZW4pOworCQltZW1jcHkoZmFrZWVudC0+YmFzZSwgb2JqZGlyLCBvYmpkaXJfbGVuKTsKKwkJZmFrZWVudC0+bmFtZSA9IGZha2VlbnQtPmJhc2UgKyBvYmpkaXJfbGVuICsgMTsKKwkJZmFrZWVudC0+bmFtZVstMV0gPSAnLyc7CisJfQorCWZha2VlbnQtPm5leHQgPSBhbHRfb2RiX2xpc3Q7CisKKwlzcHJpbnRmKGhleCwgIiUuMnMiLCBoZXhfcGZ4KTsKKwlmb3IgKGFsdCA9IGZha2VlbnQ7IGFsdCAmJiAhZHMtPmFtYmlndW91czsgYWx0ID0gYWx0LT5uZXh0KSB7CisJCXN0cnVjdCBkaXJlbnQgKmRlOworCQlESVIgKmRpcjsKKwkJc3ByaW50ZihhbHQtPm5hbWUsICIlLjJzLyIsIGhleF9wZngpOworCQlkaXIgPSBvcGVuZGlyKGFsdC0+YmFzZSk7CisJCWlmICghZGlyKQorCQkJY29udGludWU7CisKKwkJd2hpbGUgKCFkcy0+YW1iaWd1b3VzICYmIChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCQkJaWYgKHN0cmxlbihkZS0+ZF9uYW1lKSAhPSAzOCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChtZW1jbXAoZGUtPmRfbmFtZSwgaGV4X3BmeCArIDIsIGxlbiAtIDIpKQorCQkJCWNvbnRpbnVlOworCQkJbWVtY3B5KGhleCArIDIsIGRlLT5kX25hbWUsIDM4KTsKKwkJCWlmICghZ2V0X3NoYTFfaGV4KGhleCwgc2hhMSkpCisJCQkJdXBkYXRlX2NhbmRpZGF0ZXMoZHMsIHNoYTEpOworCQl9CisJCWNsb3NlZGlyKGRpcik7CisJfQorfQorCitzdGF0aWMgaW50IG1hdGNoX3NoYSh1bnNpZ25lZCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIpCit7CisJZG8geworCQlpZiAoKmEgIT0gKmIpCisJCQlyZXR1cm4gMDsKKwkJYSsrOworCQliKys7CisJCWxlbiAtPSAyOworCX0gd2hpbGUgKGxlbiA+IDEpOworCWlmIChsZW4pCisJCWlmICgoKmEgXiAqYikgJiAweGYwKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHVuaXF1ZV9pbl9wYWNrKGludCBsZW4sCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJpbl9wZngsCisJCQkgICBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCSAgIHN0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgKmRzKQoreworCXVpbnQzMl90IG51bSwgbGFzdCwgaSwgZmlyc3QgPSAwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJlbnQgPSBOVUxMOworCisJb3Blbl9wYWNrX2luZGV4KHApOworCW51bSA9IHAtPm51bV9vYmplY3RzOworCWxhc3QgPSBudW07CisJd2hpbGUgKGZpcnN0IDwgbGFzdCkgeworCQl1aW50MzJfdCBtaWQgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJlbnQ7CisJCWludCBjbXA7CisKKwkJY3VycmVudCA9IG50aF9wYWNrZWRfb2JqZWN0X3NoYTEocCwgbWlkKTsKKwkJY21wID0gaGFzaGNtcChiaW5fcGZ4LCBjdXJyZW50KTsKKwkJaWYgKCFjbXApIHsKKwkJCWZpcnN0ID0gbWlkOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNtcCA+IDApIHsKKwkJCWZpcnN0ID0gbWlkKzE7CisJCQljb250aW51ZTsKKwkJfQorCQlsYXN0ID0gbWlkOworCX0KKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgImZpcnN0IiBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGxvd2VzdCBvYmplY3QKKwkgKiB3aXRoIGFuIG9iamVjdCBuYW1lIHRoYXQgY291bGQgbWF0Y2ggImJpbl9wZngiLiAgU2VlIGlmIHdlIGhhdmUKKwkgKiAwLCAxIG9yIG1vcmUgb2JqZWN0cyB0aGF0IGFjdHVhbGx5IG1hdGNoKGVzKS4KKwkgKi8KKwlmb3IgKGkgPSBmaXJzdDsgaSA8IG51bSAmJiAhZHMtPmFtYmlndW91czsgaSsrKSB7CisJCWN1cnJlbnQgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIGkpOworCQlpZiAoIW1hdGNoX3NoYShsZW4sIGJpbl9wZngsIGN1cnJlbnQpKQorCQkJYnJlYWs7CisJCXVwZGF0ZV9jYW5kaWRhdGVzKGRzLCBjdXJyZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfc2hvcnRfcGFja2VkX29iamVjdChpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiaW5fcGZ4LAorCQkJCSAgICAgc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSAqZHMpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwlwcmVwYXJlX3BhY2tlZF9naXQoKTsKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwICYmICFkcy0+YW1iaWd1b3VzOyBwID0gcC0+bmV4dCkKKwkJdW5pcXVlX2luX3BhY2sobGVuLCBiaW5fcGZ4LCBwLCBkcyk7Cit9CisKKyNkZWZpbmUgU0hPUlRfTkFNRV9OT1RfRk9VTkQgKC0xKQorI2RlZmluZSBTSE9SVF9OQU1FX0FNQklHVU9VUyAoLTIpCisKK3N0YXRpYyBpbnQgZmluaXNoX29iamVjdF9kaXNhbWJpZ3VhdGlvbihzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlICpkcywKKwkJCQkJdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpZiAoZHMtPmFtYmlndW91cykKKwkJcmV0dXJuIFNIT1JUX05BTUVfQU1CSUdVT1VTOworCisJaWYgKCFkcy0+Y2FuZGlkYXRlX2V4aXN0cykKKwkJcmV0dXJuIFNIT1JUX05BTUVfTk9UX0ZPVU5EOworCisJaWYgKCFkcy0+Y2FuZGlkYXRlX2NoZWNrZWQpCisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIG9ubHkgY2FuZGlkYXRlLCB0aGVyZSBpcyBubyBwb2ludAorCQkgKiBjYWxsaW5nIHRoZSBkaXNhbWJpZ3VhdGlvbiBoaW50IGNhbGxiYWNrLgorCQkgKgorCQkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGN1cnJlbnQgY2FuZGlkYXRlCisJCSAqIHJlcGxhY2VkIGFuIGVhcmxpZXIgY2FuZGlkYXRlIHRoYXQgZGlkIF9ub3RfIHBhc3MKKwkJICogdGhlIGRpc2FtYmlndWF0aW9uIGhpbnQgY2FsbGJhY2ssIHRoZW4gd2UgZG8gaGF2ZQorCQkgKiBtb3JlIHRoYW4gb25lIG9iamVjdHMgdGhhdCBtYXRjaCB0aGUgc2hvcnQgbmFtZQorCQkgKiBnaXZlbiwgc28gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGlzIG9uZSBtYXRjaGVzOworCQkgKiBvdGhlcndpc2UsIGlmIHdlIGRpc2NvdmVyZWQgdGhpcyBvbmUgYW5kIHRoZSBvbmUKKwkJICogdGhhdCB3ZSBwcmV2aW91c2x5IGRpc2NhcmRlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciwKKwkJICogd2Ugd291bGQgZW5kIHVwIHNob3dpbmcgZGlmZmVyZW50IHJlc3VsdHMgaW4gdGhlCisJCSAqIHNhbWUgcmVwb3NpdG9yeSEKKwkJICovCisJCWRzLT5jYW5kaWRhdGVfb2sgPSAoIWRzLT5kaXNhbWJpZ3VhdGVfZm5fdXNlZCB8fAorCQkJCSAgICBkcy0+Zm4oZHMtPmNhbmRpZGF0ZSwgZHMtPmNiX2RhdGEpKTsKKworCWlmICghZHMtPmNhbmRpZGF0ZV9vaykKKwkJcmV0dXJuIFNIT1JUX05BTUVfQU1CSUdVT1VTOworCisJaGFzaGNweShzaGExLCBkcy0+Y2FuZGlkYXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNhbWJpZ3VhdGVfY29tbWl0X29ubHkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqY2JfZGF0YV91bnVzZWQpCit7CisJaW50IGtpbmQgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOworCXJldHVybiBraW5kID09IE9CSl9DT01NSVQ7Cit9CisKK3N0YXRpYyBpbnQgZGlzYW1iaWd1YXRlX2NvbW1pdHRpc2hfb25seShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpjYl9kYXRhX3VudXNlZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJaW50IGtpbmQ7CisKKwlraW5kID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlpZiAoa2luZCA9PSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gMTsKKwlpZiAoa2luZCAhPSBPQkpfVEFHKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIG5lZWQgdG8gZG8gdGhpcyB0aGUgaGFyZCB3YXkuLi4gKi8KKwlvYmogPSBkZXJlZl90YWcobG9va3VwX29iamVjdChzaGExKSwgTlVMTCwgMCk7CisJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzYW1iaWd1YXRlX3RyZWVfb25seShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpjYl9kYXRhX3VudXNlZCkKK3sKKwlpbnQga2luZCA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJcmV0dXJuIGtpbmQgPT0gT0JKX1RSRUU7Cit9CisKK3N0YXRpYyBpbnQgZGlzYW1iaWd1YXRlX3RyZWVpc2hfb25seShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpjYl9kYXRhX3VudXNlZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJaW50IGtpbmQ7CisKKwlraW5kID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlpZiAoa2luZCA9PSBPQkpfVFJFRSB8fCBraW5kID09IE9CSl9DT01NSVQpCisJCXJldHVybiAxOworCWlmIChraW5kICE9IE9CSl9UQUcpCisJCXJldHVybiAwOworCisJLyogV2UgbmVlZCB0byBkbyB0aGlzIHRoZSBoYXJkIHdheS4uLiAqLworCW9iaiA9IGRlcmVmX3RhZyhsb29rdXBfb2JqZWN0KHNoYTEpLCBOVUxMLCAwKTsKKwlpZiAob2JqICYmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUgfHwgb2JqLT50eXBlID09IE9CSl9DT01NSVQpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNhbWJpZ3VhdGVfYmxvYl9vbmx5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHZvaWQgKmNiX2RhdGFfdW51c2VkKQoreworCWludCBraW5kID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlyZXR1cm4ga2luZCA9PSBPQkpfQkxPQjsKK30KKworc3RhdGljIGludCBwcmVwYXJlX3ByZWZpeGVzKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCQkgICAgdW5zaWduZWQgY2hhciAqYmluX3BmeCwKKwkJCSAgICBjaGFyICpoZXhfcGZ4KQoreworCWludCBpOworCisJaGFzaGNscihiaW5fcGZ4KTsKKwltZW1zZXQoaGV4X3BmeCwgJ3gnLCA0MCk7CisJZm9yIChpID0gMDsgaSA8IGxlbiA7aSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IG5hbWVbaV07CisJCXVuc2lnbmVkIGNoYXIgdmFsOworCQlpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisJCQl2YWwgPSBjIC0gJzAnOworCQllbHNlIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKKwkJCXZhbCA9IGMgLSAnYScgKyAxMDsKKwkJZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSdGJykgeworCQkJdmFsID0gYyAtICdBJyArIDEwOworCQkJYyAtPSAnQScgLSAnYSc7CisJCX0KKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQloZXhfcGZ4W2ldID0gYzsKKwkJaWYgKCEoaSAmIDEpKQorCQkJdmFsIDw8PSA0OworCQliaW5fcGZ4W2kgPj4gMV0gfD0gdmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfc2hvcnRfc2hhMShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgc3RhdHVzOworCWNoYXIgaGV4X3BmeFs0MF07CisJdW5zaWduZWQgY2hhciBiaW5fcGZ4WzIwXTsKKwlzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlIGRzOworCWludCBxdWlldGx5ID0gISEoZmxhZ3MgJiBHRVRfU0hBMV9RVUlFVExZKTsKKworCWlmIChsZW4gPCBNSU5JTVVNX0FCQlJFViB8fCBsZW4gPiA0MCkKKwkJcmV0dXJuIC0xOworCWlmIChwcmVwYXJlX3ByZWZpeGVzKG5hbWUsIGxlbiwgYmluX3BmeCwgaGV4X3BmeCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlwcmVwYXJlX2FsdF9vZGIoKTsKKworCW1lbXNldCgmZHMsIDAsIHNpemVvZihkcykpOworCWlmIChmbGFncyAmIEdFVF9TSEExX0NPTU1JVCkKKwkJZHMuZm4gPSBkaXNhbWJpZ3VhdGVfY29tbWl0X29ubHk7CisJZWxzZSBpZiAoZmxhZ3MgJiBHRVRfU0hBMV9DT01NSVRUSVNIKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV9jb21taXR0aXNoX29ubHk7CisJZWxzZSBpZiAoZmxhZ3MgJiBHRVRfU0hBMV9UUkVFKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV90cmVlX29ubHk7CisJZWxzZSBpZiAoZmxhZ3MgJiBHRVRfU0hBMV9UUkVFSVNIKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV90cmVlaXNoX29ubHk7CisJZWxzZSBpZiAoZmxhZ3MgJiBHRVRfU0hBMV9CTE9CKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV9ibG9iX29ubHk7CisKKwlmaW5kX3Nob3J0X29iamVjdF9maWxlbmFtZShsZW4sIGhleF9wZngsICZkcyk7CisJZmluZF9zaG9ydF9wYWNrZWRfb2JqZWN0KGxlbiwgYmluX3BmeCwgJmRzKTsKKwlzdGF0dXMgPSBmaW5pc2hfb2JqZWN0X2Rpc2FtYmlndWF0aW9uKCZkcywgc2hhMSk7CisKKwlpZiAoIXF1aWV0bHkgJiYgKHN0YXR1cyA9PSBTSE9SVF9OQU1FX0FNQklHVU9VUykpCisJCXJldHVybiBlcnJvcigic2hvcnQgU0hBMSAlLipzIGlzIGFtYmlndW91cy4iLCBsZW4sIGhleF9wZngpOworCXJldHVybiBzdGF0dXM7Cit9CisKKworaW50IGZvcl9lYWNoX2FiYnJldihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfYWJicmV2X2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCWNoYXIgaGV4X3BmeFs0MF07CisJdW5zaWduZWQgY2hhciBiaW5fcGZ4WzIwXTsKKwlzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlIGRzOworCWludCBsZW4gPSBzdHJsZW4ocHJlZml4KTsKKworCWlmIChsZW4gPCBNSU5JTVVNX0FCQlJFViB8fCBsZW4gPiA0MCkKKwkJcmV0dXJuIC0xOworCWlmIChwcmVwYXJlX3ByZWZpeGVzKHByZWZpeCwgbGVuLCBiaW5fcGZ4LCBoZXhfcGZ4KSA8IDApCisJCXJldHVybiAtMTsKKworCXByZXBhcmVfYWx0X29kYigpOworCisJbWVtc2V0KCZkcywgMCwgc2l6ZW9mKGRzKSk7CisJZHMuYWx3YXlzX2NhbGxfZm4gPSAxOworCWRzLmNiX2RhdGEgPSBjYl9kYXRhOworCWRzLmZuID0gZm47CisKKwlmaW5kX3Nob3J0X29iamVjdF9maWxlbmFtZShsZW4sIGhleF9wZngsICZkcyk7CisJZmluZF9zaG9ydF9wYWNrZWRfb2JqZWN0KGxlbiwgYmluX3BmeCwgJmRzKTsKKwlyZXR1cm4gZHMuYW1iaWd1b3VzOworfQorCitjb25zdCBjaGFyICpmaW5kX3VuaXF1ZV9hYmJyZXYoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGxlbikKK3sKKwlpbnQgc3RhdHVzLCBleGlzdHM7CisJc3RhdGljIGNoYXIgaGV4WzQxXTsKKworCWV4aXN0cyA9IGhhc19zaGExX2ZpbGUoc2hhMSk7CisJbWVtY3B5KGhleCwgc2hhMV90b19oZXgoc2hhMSksIDQwKTsKKwlpZiAobGVuID09IDQwIHx8ICFsZW4pCisJCXJldHVybiBoZXg7CisJd2hpbGUgKGxlbiA8IDQwKSB7CisJCXVuc2lnbmVkIGNoYXIgc2hhMV9yZXRbMjBdOworCQlzdGF0dXMgPSBnZXRfc2hvcnRfc2hhMShoZXgsIGxlbiwgc2hhMV9yZXQsIEdFVF9TSEExX1FVSUVUTFkpOworCQlpZiAoZXhpc3RzCisJCSAgICA/ICFzdGF0dXMKKwkJICAgIDogc3RhdHVzID09IFNIT1JUX05BTUVfTk9UX0ZPVU5EKSB7CisJCQloZXhbbGVuXSA9IDA7CisJCQlyZXR1cm4gaGV4OworCQl9CisJCWxlbisrOworCX0KKwlyZXR1cm4gaGV4OworfQorCitzdGF0aWMgaW50IGFtYmlndW91c19wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJaW50IHNsYXNoID0gMTsKKwlpbnQgY250OworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBsZW47IGNudCsrKSB7CisJCXN3aXRjaCAoKnBhdGgrKykgeworCQljYXNlICdcMCc6CisJCQlicmVhazsKKwkJY2FzZSAnLyc6CisJCQlpZiAoc2xhc2gpCisJCQkJYnJlYWs7CisJCQlzbGFzaCA9IDE7CisJCQljb250aW51ZTsKKwkJY2FzZSAnLic6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCXNsYXNoID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc2xhc2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVwc3RyZWFtX21hcmsoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuKQoreworCWNvbnN0IGNoYXIgKnN1ZmZpeFtdID0geyAiQHt1cHN0cmVhbX0iLCAiQHt1fSIgfTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1ZmZpeCk7IGkrKykgeworCQlpbnQgc3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXhbaV0pOworCQlpZiAoc3VmZml4X2xlbiA8PSBsZW4KKwkJICAgICYmICFtZW1jbXAoc3RyaW5nLCBzdWZmaXhbaV0sIHN1ZmZpeF9sZW4pKQorCQkJcmV0dXJuIHN1ZmZpeF9sZW47CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9zaGExXzEoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgbG9va3VwX2ZsYWdzKTsKKworc3RhdGljIGludCBnZXRfc2hhMV9iYXNpYyhjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKndhcm5fbXNnID0gInJlZm5hbWUgJyUuKnMnIGlzIGFtYmlndW91cy4iOworCWNoYXIgKnJlYWxfcmVmID0gTlVMTDsKKwlpbnQgcmVmc19mb3VuZCA9IDA7CisJaW50IGF0LCByZWZsb2dfbGVuOworCisJaWYgKGxlbiA9PSA0MCAmJiAhZ2V0X3NoYTFfaGV4KHN0ciwgc2hhMSkpCisJCXJldHVybiAwOworCisJLyogYmFzaWNAe3RpbWUgb3IgbnVtYmVyIG9yIC1udW1iZXJ9IGZvcm1hdCB0byBxdWVyeSByZWYtbG9nICovCisJcmVmbG9nX2xlbiA9IGF0ID0gMDsKKwlpZiAobGVuICYmIHN0cltsZW4tMV0gPT0gJ30nKSB7CisJCWZvciAoYXQgPSBsZW4tMjsgYXQgPj0gMDsgYXQtLSkgeworCQkJaWYgKHN0clthdF0gPT0gJ0AnICYmIHN0clthdCsxXSA9PSAneycpIHsKKwkJCQlpZiAoIXVwc3RyZWFtX21hcmsoc3RyICsgYXQsIGxlbiAtIGF0KSkgeworCQkJCQlyZWZsb2dfbGVuID0gKGxlbi0xKSAtIChhdCsyKTsKKwkJCQkJbGVuID0gYXQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyogQWNjZXB0IG9ubHkgdW5hbWJpZ3VvdXMgcmVmIHBhdGhzLiAqLworCWlmIChsZW4gJiYgYW1iaWd1b3VzX3BhdGgoc3RyLCBsZW4pKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWxlbiAmJiByZWZsb2dfbGVuKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWludCByZXQ7CisJCS8qIHRyeSB0aGUgQHstTn0gc3ludGF4IGZvciBuLXRoIGNoZWNrb3V0ICovCisJCXJldCA9IGludGVycHJldF9icmFuY2hfbmFtZShzdHIrYXQsICZidWYpOworCQlpZiAocmV0ID4gMCkgeworCQkJLyogc3Vic3RpdHV0ZSB0aGlzIGJyYW5jaCBuYW1lIGFuZCByZXN0YXJ0ICovCisJCQlyZXR1cm4gZ2V0X3NoYTFfMShidWYuYnVmLCBidWYubGVuLCBzaGExLCAwKTsKKwkJfSBlbHNlIGlmIChyZXQgPT0gMCkgeworCQkJcmV0dXJuIC0xOworCQl9CisJCS8qIGFsbG93ICJAey4uLn0iIHRvIG1lYW4gdGhlIGN1cnJlbnQgYnJhbmNoIHJlZmxvZyAqLworCQlyZWZzX2ZvdW5kID0gZHdpbV9yZWYoIkhFQUQiLCA0LCBzaGExLCAmcmVhbF9yZWYpOworCX0gZWxzZSBpZiAocmVmbG9nX2xlbikKKwkJcmVmc19mb3VuZCA9IGR3aW1fbG9nKHN0ciwgbGVuLCBzaGExLCAmcmVhbF9yZWYpOworCWVsc2UKKwkJcmVmc19mb3VuZCA9IGR3aW1fcmVmKHN0ciwgbGVuLCBzaGExLCAmcmVhbF9yZWYpOworCisJaWYgKCFyZWZzX2ZvdW5kKQorCQlyZXR1cm4gLTE7CisKKwlpZiAod2Fybl9hbWJpZ3VvdXNfcmVmcyAmJiByZWZzX2ZvdW5kID4gMSkKKwkJd2FybmluZyh3YXJuX21zZywgbGVuLCBzdHIpOworCisJaWYgKHJlZmxvZ19sZW4pIHsKKwkJaW50IG50aCwgaTsKKwkJdW5zaWduZWQgbG9uZyBhdF90aW1lOworCQl1bnNpZ25lZCBsb25nIGNvX3RpbWU7CisJCWludCBjb190eiwgY29fY250OworCisJCS8qIGEgQHstTn0gcGxhY2VkIGFueXdoZXJlIGV4Y2VwdCB0aGUgc3RhcnQgaXMgYW4gZXJyb3IgKi8KKwkJaWYgKHN0clthdCsyXSA9PSAnLScpCisJCQlyZXR1cm4gLTE7CisKKwkJLyogSXMgaXQgYXNraW5nIGZvciBOLXRoIGVudHJ5LCBvciBhcHByb3hpZGF0ZT8gKi8KKwkJZm9yIChpID0gbnRoID0gMDsgMCA8PSBudGggJiYgaSA8IHJlZmxvZ19sZW47IGkrKykgeworCQkJY2hhciBjaCA9IHN0clthdCsyK2ldOworCQkJaWYgKCcwJyA8PSBjaCAmJiBjaCA8PSAnOScpCisJCQkJbnRoID0gbnRoICogMTAgKyBjaCAtICcwJzsKKwkJCWVsc2UKKwkJCQludGggPSAtMTsKKwkJfQorCQlpZiAoMTAwMDAwMDAwIDw9IG50aCkgeworCQkJYXRfdGltZSA9IG50aDsKKwkJCW50aCA9IC0xOworCQl9IGVsc2UgaWYgKDAgPD0gbnRoKQorCQkJYXRfdGltZSA9IDA7CisJCWVsc2UgeworCQkJaW50IGVycm9ycyA9IDA7CisJCQljaGFyICp0bXAgPSB4c3RybmR1cChzdHIgKyBhdCArIDIsIHJlZmxvZ19sZW4pOworCQkJYXRfdGltZSA9IGFwcHJveGlkYXRlX2NhcmVmdWwodG1wLCAmZXJyb3JzKTsKKwkJCWZyZWUodG1wKTsKKwkJCWlmIChlcnJvcnMpCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChyZWFkX3JlZl9hdChyZWFsX3JlZiwgYXRfdGltZSwgbnRoLCBzaGExLCBOVUxMLAorCQkJCSZjb190aW1lLCAmY29fdHosICZjb19jbnQpKSB7CisJCQlpZiAoYXRfdGltZSkKKwkJCQl3YXJuaW5nKCJMb2cgZm9yICclLipzJyBvbmx5IGdvZXMgIgorCQkJCQkiYmFjayB0byAlcy4iLCBsZW4sIHN0ciwKKwkJCQkJc2hvd19kYXRlKGNvX3RpbWUsIGNvX3R6LCBEQVRFX1JGQzI4MjIpKTsKKwkJCWVsc2UgeworCQkJCWZyZWUocmVhbF9yZWYpOworCQkJCWRpZSgiTG9nIGZvciAnJS4qcycgb25seSBoYXMgJWQgZW50cmllcy4iLAorCQkJCSAgICBsZW4sIHN0ciwgY29fY250KTsKKwkJCX0KKwkJfQorCX0KKworCWZyZWUocmVhbF9yZWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9wYXJlbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqcmVzdWx0LCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IHJldCA9IGdldF9zaGExXzEobmFtZSwgbGVuLCBzaGExLCBHRVRfU0hBMV9DT01NSVRUSVNIKTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIC0xOworCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJcmV0dXJuIC0xOworCWlmICghaWR4KSB7CisJCWhhc2hjcHkocmVzdWx0LCBjb21taXQtPm9iamVjdC5zaGExKTsKKwkJcmV0dXJuIDA7CisJfQorCXAgPSBjb21taXQtPnBhcmVudHM7CisJd2hpbGUgKHApIHsKKwkJaWYgKCEtLWlkeCkgeworCQkJaGFzaGNweShyZXN1bHQsIHAtPml0ZW0tPm9iamVjdC5zaGExKTsKKwkJCXJldHVybiAwOworCQl9CisJCXAgPSBwLT5uZXh0OworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X250aF9hbmNlc3Rvcihjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCwgaW50IGdlbmVyYXRpb24pCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJaW50IHJldDsKKworCXJldCA9IGdldF9zaGExXzEobmFtZSwgbGVuLCBzaGExLCBHRVRfU0hBMV9DT01NSVRUSVNIKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCWlmICghY29tbWl0KQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoZ2VuZXJhdGlvbi0tKSB7CisJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSB8fCAhY29tbWl0LT5wYXJlbnRzKQorCQkJcmV0dXJuIC0xOworCQljb21taXQgPSBjb21taXQtPnBhcmVudHMtPml0ZW07CisJfQorCWhhc2hjcHkocmVzdWx0LCBjb21taXQtPm9iamVjdC5zaGExKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG9iamVjdCAqcGVlbF90b190eXBlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJICAgIHN0cnVjdCBvYmplY3QgKm8sIGVudW0gb2JqZWN0X3R5cGUgZXhwZWN0ZWRfdHlwZSkKK3sKKwlpZiAobmFtZSAmJiAhbmFtZWxlbikKKwkJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKwl3aGlsZSAoMSkgeworCQlpZiAoIW8gfHwgKCFvLT5wYXJzZWQgJiYgIXBhcnNlX29iamVjdChvLT5zaGExKSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKG8tPnR5cGUgPT0gZXhwZWN0ZWRfdHlwZSkKKwkJCXJldHVybiBvOworCQlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKQorCQkJbyA9ICgoc3RydWN0IHRhZyopIG8pLT50YWdnZWQ7CisJCWVsc2UgaWYgKG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCW8gPSAmKCgoc3RydWN0IGNvbW1pdCAqKSBvKS0+dHJlZS0+b2JqZWN0KTsKKwkJZWxzZSB7CisJCQlpZiAobmFtZSkKKwkJCQllcnJvcigiJS4qczogZXhwZWN0ZWQgJXMgdHlwZSwgYnV0IHRoZSBvYmplY3QgIgorCQkJCSAgICAgICJkZXJlZmVyZW5jZXMgdG8gJXMgdHlwZSIsCisJCQkJICAgICAgbmFtZWxlbiwgbmFtZSwgdHlwZW5hbWUoZXhwZWN0ZWRfdHlwZSksCisJCQkJICAgICAgdHlwZW5hbWUoby0+dHlwZSkpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcGVlbF9vbmlvbihjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGNoYXIgb3V0ZXJbMjBdOworCWNvbnN0IGNoYXIgKnNwOworCXVuc2lnbmVkIGludCBleHBlY3RlZF90eXBlID0gMDsKKwl1bnNpZ25lZCBsb29rdXBfZmxhZ3MgPSAwOworCXN0cnVjdCBvYmplY3QgKm87CisKKwkvKgorCSAqICJyZWZee3R5cGV9IiBkZXJlZmVyZW5jZXMgcmVmIHJlcGVhdGVkbHkgdW50aWwgeW91IGNhbm5vdAorCSAqIGRlcmVmZXJlbmNlIGFueW1vcmUsIG9yIHlvdSBnZXQgYW4gb2JqZWN0IG9mIGdpdmVuIHR5cGUsCisJICogd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgInJlZl57fSIgbWVhbnMganVzdCBkZXJlZmVyZW5jZQorCSAqIHRhZ3MgdW50aWwgeW91IGdldCBhIG5vbi10YWcuICAicmVmXjAiIGlzIGEgc2hvcnRoYW5kIGZvcgorCSAqICJyZWZee2NvbW1pdH0iLiAgImNvbW1pdF57dHJlZX0iIGNvdWxkIGJlIHVzZWQgdG8gZmluZCB0aGUKKwkgKiB0b3AtbGV2ZWwgdHJlZSBvZiB0aGUgZ2l2ZW4gY29tbWl0LgorCSAqLworCWlmIChsZW4gPCA0IHx8IG5hbWVbbGVuLTFdICE9ICd9JykKKwkJcmV0dXJuIC0xOworCisJZm9yIChzcCA9IG5hbWUgKyBsZW4gLSAxOyBuYW1lIDw9IHNwOyBzcC0tKSB7CisJCWludCBjaCA9ICpzcDsKKwkJaWYgKGNoID09ICd7JyAmJiBuYW1lIDwgc3AgJiYgc3BbLTFdID09ICdeJykKKwkJCWJyZWFrOworCX0KKwlpZiAoc3AgPD0gbmFtZSkKKwkJcmV0dXJuIC0xOworCisJc3ArKzsgLyogYmVnaW5uaW5nIG9mIHR5cGUgbmFtZSwgb3IgY2xvc2luZyBicmFjZSBmb3IgZW1wdHkgKi8KKwlpZiAoIXN0cm5jbXAoY29tbWl0X3R5cGUsIHNwLCA2KSAmJiBzcFs2XSA9PSAnfScpCisJCWV4cGVjdGVkX3R5cGUgPSBPQkpfQ09NTUlUOworCWVsc2UgaWYgKCFzdHJuY21wKHRyZWVfdHlwZSwgc3AsIDQpICYmIHNwWzRdID09ICd9JykKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9UUkVFOworCWVsc2UgaWYgKCFzdHJuY21wKGJsb2JfdHlwZSwgc3AsIDQpICYmIHNwWzRdID09ICd9JykKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9CTE9COworCWVsc2UgaWYgKHNwWzBdID09ICd9JykKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9OT05FOworCWVsc2UgaWYgKHNwWzBdID09ICcvJykKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9DT01NSVQ7CisJZWxzZQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZXhwZWN0ZWRfdHlwZSA9PSBPQkpfQ09NTUlUKQorCQlsb29rdXBfZmxhZ3MgPSBHRVRfU0hBMV9DT01NSVRUSVNIOworCisJaWYgKGdldF9zaGExXzEobmFtZSwgc3AgLSBuYW1lIC0gMiwgb3V0ZXIsIGxvb2t1cF9mbGFncykpCisJCXJldHVybiAtMTsKKworCW8gPSBwYXJzZV9vYmplY3Qob3V0ZXIpOworCWlmICghbykKKwkJcmV0dXJuIC0xOworCWlmICghZXhwZWN0ZWRfdHlwZSkgeworCQlvID0gZGVyZWZfdGFnKG8sIG5hbWUsIHNwIC0gbmFtZSAtIDIpOworCQlpZiAoIW8gfHwgKCFvLT5wYXJzZWQgJiYgIXBhcnNlX29iamVjdChvLT5zaGExKSkpCisJCQlyZXR1cm4gLTE7CisJCWhhc2hjcHkoc2hhMSwgby0+c2hhMSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgdGhlIHN5bnRheCBsb29rIGNvcnJlY3QsIHNvCisJICogaWYgd2UgZG8gbm90IGdldCB0aGUgbmVlZGVkIG9iamVjdCwgd2Ugc2hvdWxkCisJICogYmFyZi4KKwkgKi8KKwlvID0gcGVlbF90b190eXBlKG5hbWUsIGxlbiwgbywgZXhwZWN0ZWRfdHlwZSk7CisJaWYgKCFvKQorCQlyZXR1cm4gLTE7CisKKwloYXNoY3B5KHNoYTEsIG8tPnNoYTEpOworCWlmIChzcFswXSA9PSAnLycpIHsKKwkJLyogIiRjb21taXReey9mb299IiAqLworCQljaGFyICpwcmVmaXg7CisJCWludCByZXQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEw7CisKKwkJLyoKKwkJICogJGNvbW1pdF57L30uIFNvbWUgcmVnZXggaW1wbGVtZW50YXRpb24gbWF5IHJlamVjdC4KKwkJICogV2UgZG9uJ3QgbmVlZCByZWdleCBhbnl3YXkuICcnIHBhdHRlcm4gYWx3YXlzIG1hdGNoZXMuCisJCSAqLworCQlpZiAoc3BbMV0gPT0gJ30nKQorCQkJcmV0dXJuIDA7CisKKwkJcHJlZml4ID0geHN0cm5kdXAoc3AgKyAxLCBuYW1lICsgbGVuIC0gMSAtIChzcCArIDEpKTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KChzdHJ1Y3QgY29tbWl0ICopbywgJmxpc3QpOworCQlyZXQgPSBnZXRfc2hhMV9vbmVsaW5lKHByZWZpeCwgc2hhMSwgbGlzdCk7CisJCWZyZWUocHJlZml4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2Rlc2NyaWJlX25hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwljb25zdCBjaGFyICpjcDsKKwl1bnNpZ25lZCBmbGFncyA9IEdFVF9TSEExX1FVSUVUTFkgfCBHRVRfU0hBMV9DT01NSVQ7CisKKwlmb3IgKGNwID0gbmFtZSArIGxlbiAtIDE7IG5hbWUgKyAyIDw9IGNwOyBjcC0tKSB7CisJCWNoYXIgY2ggPSAqY3A7CisJCWlmIChoZXh2YWwoY2gpICYgfjAzNzcpIHsKKwkJCS8qIFdlIG11c3QgYmUgbG9va2luZyBhdCBnIGluICJTT01FVEhJTkctZyIKKwkJCSAqIGZvciBpdCB0byBiZSBkZXNjcmliZSBvdXRwdXQuCisJCQkgKi8KKwkJCWlmIChjaCA9PSAnZycgJiYgY3BbLTFdID09ICctJykgeworCQkJCWNwKys7CisJCQkJbGVuIC09IGNwIC0gbmFtZTsKKwkJCQlyZXR1cm4gZ2V0X3Nob3J0X3NoYTEoY3AsIGxlbiwgc2hhMSwgZmxhZ3MpOworCQkJfQorCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBnZXRfc2hhMV8xKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGxvb2t1cF9mbGFncykKK3sKKwlpbnQgcmV0LCBoYXNfc3VmZml4OworCWNvbnN0IGNoYXIgKmNwOworCisJLyoKKwkgKiAibmFtZX4zIiBpcyAibmFtZV5eXiIsICJuYW1lfiIgaXMgIm5hbWV+MSIsIGFuZCAibmFtZV4iIGlzICJuYW1lXjEiLgorCSAqLworCWhhc19zdWZmaXggPSAwOworCWZvciAoY3AgPSBuYW1lICsgbGVuIC0gMTsgbmFtZSA8PSBjcDsgY3AtLSkgeworCQlpbnQgY2ggPSAqY3A7CisJCWlmICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKQorCQkJY29udGludWU7CisJCWlmIChjaCA9PSAnficgfHwgY2ggPT0gJ14nKQorCQkJaGFzX3N1ZmZpeCA9IGNoOworCQlicmVhazsKKwl9CisKKwlpZiAoaGFzX3N1ZmZpeCkgeworCQlpbnQgbnVtID0gMDsKKwkJaW50IGxlbjEgPSBjcCAtIG5hbWU7CisJCWNwKys7CisJCXdoaWxlIChjcCA8IG5hbWUgKyBsZW4pCisJCQludW0gPSBudW0gKiAxMCArICpjcCsrIC0gJzAnOworCQlpZiAoIW51bSAmJiBsZW4xID09IGxlbiAtIDEpCisJCQludW0gPSAxOworCQlpZiAoaGFzX3N1ZmZpeCA9PSAnXicpCisJCQlyZXR1cm4gZ2V0X3BhcmVudChuYW1lLCBsZW4xLCBzaGExLCBudW0pOworCQkvKiBlbHNlIGlmIChoYXNfc3VmZml4ID09ICd+JykgLS0gZ29lcyB3aXRob3V0IHNheWluZyAqLworCQlyZXR1cm4gZ2V0X250aF9hbmNlc3RvcihuYW1lLCBsZW4xLCBzaGExLCBudW0pOworCX0KKworCXJldCA9IHBlZWxfb25pb24obmFtZSwgbGVuLCBzaGExKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBnZXRfc2hhMV9iYXNpYyhuYW1lLCBsZW4sIHNoYTEpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCS8qIEl0IGNvdWxkIGJlIGRlc2NyaWJlIG91dHB1dCB0aGF0IGlzICJTT01FVEhJTkctZ1hYWFgiICovCisJcmV0ID0gZ2V0X2Rlc2NyaWJlX25hbWUobmFtZSwgbGVuLCBzaGExKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZ2V0X3Nob3J0X3NoYTEobmFtZSwgbGVuLCBzaGExLCBsb29rdXBfZmxhZ3MpOworfQorCisvKgorICogVGhpcyBpbnRlcnByZXRzIG5hbWVzIGxpa2UgJzovSW5pdGlhbCByZXZpc2lvbiBvZiAiZ2l0IicgYnkgc2VhcmNoaW5nCisgKiB0aHJvdWdoIGhpc3RvcnkgYW5kIHJldHVybmluZyB0aGUgZmlyc3QgY29tbWl0IHdob3NlIG1lc3NhZ2Ugc3RhcnRzCisgKiB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uLgorICoKKyAqIEZvciBmdXR1cmUgZXh0ZW5zaW9uLCAnOi8hJyBpcyByZXNlcnZlZC4gSWYgeW91IHdhbnQgdG8gbWF0Y2ggYSBtZXNzYWdlCisgKiBiZWdpbm5pbmcgd2l0aCBhICchJywgeW91IGhhdmUgdG8gcmVwZWF0IHRoZSBleGNsYW1hdGlvbiBtYXJrLgorICovCisjZGVmaW5lIE9ORUxJTkVfU0VFTiAoMXU8PDIwKQorCitzdGF0aWMgaW50IGhhbmRsZV9vbmVfcmVmKGNvbnN0IGNoYXIgKnBhdGgsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QgPSBjYl9kYXRhOworCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHBhcnNlX29iamVjdChzaGExKTsKKwlpZiAoIW9iamVjdCkKKwkJcmV0dXJuIDA7CisJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW9iamVjdCA9IGRlcmVmX3RhZyhvYmplY3QsIHBhdGgsIHN0cmxlbihwYXRoKSk7CisJCWlmICghb2JqZWN0KQorCQkJcmV0dXJuIDA7CisJfQorCWlmIChvYmplY3QtPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIDA7CisJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUoKHN0cnVjdCBjb21taXQgKilvYmplY3QsIGxpc3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9zaGExX29uZWxpbmUoY29uc3QgY2hhciAqcHJlZml4LCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgIHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmJhY2t1cCA9IE5VTEwsICpsOworCWludCBmb3VuZCA9IDA7CisJcmVnZXhfdCByZWdleDsKKworCWlmIChwcmVmaXhbMF0gPT0gJyEnKSB7CisJCWlmIChwcmVmaXhbMV0gIT0gJyEnKQorCQkJZGllICgiSW52YWxpZCBzZWFyY2ggcGF0dGVybjogJXMiLCBwcmVmaXgpOworCQlwcmVmaXgrKzsKKwl9CisKKwlpZiAocmVnY29tcCgmcmVnZXgsIHByZWZpeCwgUkVHX0VYVEVOREVEKSkKKwkJZGllKCJJbnZhbGlkIHNlYXJjaCBwYXR0ZXJuOiAlcyIsIHByZWZpeCk7CisKKwlmb3IgKGwgPSBsaXN0OyBsOyBsID0gbC0+bmV4dCkgeworCQlsLT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gT05FTElORV9TRUVOOworCQljb21taXRfbGlzdF9pbnNlcnQobC0+aXRlbSwgJmJhY2t1cCk7CisJfQorCXdoaWxlIChsaXN0KSB7CisJCWNoYXIgKnAsICp0b19mcmVlID0gTlVMTDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJaW50IG1hdGNoZXM7CisKKwkJY29tbWl0ID0gcG9wX21vc3RfcmVjZW50X2NvbW1pdCgmbGlzdCwgT05FTElORV9TRUVOKTsKKwkJaWYgKCFwYXJzZV9vYmplY3QoY29tbWl0LT5vYmplY3Quc2hhMSkpCisJCQljb250aW51ZTsKKwkJaWYgKGNvbW1pdC0+YnVmZmVyKQorCQkJcCA9IGNvbW1pdC0+YnVmZmVyOworCQllbHNlIHsKKwkJCXAgPSByZWFkX3NoYTFfZmlsZShjb21taXQtPm9iamVjdC5zaGExLCAmdHlwZSwgJnNpemUpOworCQkJaWYgKCFwKQorCQkJCWNvbnRpbnVlOworCQkJdG9fZnJlZSA9IHA7CisJCX0KKworCQlwID0gc3Ryc3RyKHAsICJcblxuIik7CisJCW1hdGNoZXMgPSBwICYmICFyZWdleGVjKCZyZWdleCwgcCArIDIsIDAsIE5VTEwsIDApOworCQlmcmVlKHRvX2ZyZWUpOworCisJCWlmIChtYXRjaGVzKSB7CisJCQloYXNoY3B5KHNoYTEsIGNvbW1pdC0+b2JqZWN0LnNoYTEpOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmVnZnJlZSgmcmVnZXgpOworCWZyZWVfY29tbWl0X2xpc3QobGlzdCk7CisJZm9yIChsID0gYmFja3VwOyBsOyBsID0gbC0+bmV4dCkKKwkJY2xlYXJfY29tbWl0X21hcmtzKGwtPml0ZW0sIE9ORUxJTkVfU0VFTik7CisJZnJlZV9jb21taXRfbGlzdChiYWNrdXApOworCXJldHVybiBmb3VuZCA/IDAgOiAtMTsKK30KKworc3RydWN0IGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2hfY2JkYXRhIHsKKwlsb25nIGNudCwgYWxsb2M7CisJc3RydWN0IHN0cmJ1ZiAqYnVmOworfTsKKworc3RhdGljIGludCBncmFiX250aF9icmFuY2hfc3dpdGNoKHVuc2lnbmVkIGNoYXIgKm9zaGExLCB1bnNpZ25lZCBjaGFyICpuc2hhMSwKKwkJCQkgIGNvbnN0IGNoYXIgKmVtYWlsLCB1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCwgaW50IHR6LAorCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZ3JhYl9udGhfYnJhbmNoX3N3aXRjaF9jYmRhdGEgKmNiID0gY2JfZGF0YTsKKwljb25zdCBjaGFyICptYXRjaCA9IE5VTEwsICp0YXJnZXQgPSBOVUxMOworCXNpemVfdCBsZW47CisJaW50IG50aDsKKworCWlmICghcHJlZml4Y21wKG1lc3NhZ2UsICJjaGVja291dDogbW92aW5nIGZyb20gIikpIHsKKwkJbWF0Y2ggPSBtZXNzYWdlICsgc3RybGVuKCJjaGVja291dDogbW92aW5nIGZyb20gIik7CisJCXRhcmdldCA9IHN0cnN0cihtYXRjaCwgIiB0byAiKTsKKwl9CisKKwlpZiAoIW1hdGNoIHx8ICF0YXJnZXQpCisJCXJldHVybiAwOworCisJbGVuID0gdGFyZ2V0IC0gbWF0Y2g7CisJbnRoID0gY2ItPmNudCsrICUgY2ItPmFsbG9jOworCXN0cmJ1Zl9yZXNldCgmY2ItPmJ1ZltudGhdKTsKKwlzdHJidWZfYWRkKCZjYi0+YnVmW250aF0sIG1hdGNoLCBsZW4pOworCXJldHVybiAwOworfQorCisvKgorICogUGFyc2UgQHstTn0gc3ludGF4LCByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBhcnNlZAorICogaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIHNpZ25hbCBhbiBlcnJvciB3aXRoIG5lZ2F0aXZlIHZhbHVlLgorICovCitzdGF0aWMgaW50IGludGVycHJldF9udGhfcHJpb3JfY2hlY2tvdXQoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWxvbmcgbnRoOworCWludCBpLCByZXR2YWw7CisJc3RydWN0IGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2hfY2JkYXRhIGNiOworCWNvbnN0IGNoYXIgKmJyYWNlOworCWNoYXIgKm51bV9lbmQ7CisKKwlpZiAobmFtZVswXSAhPSAnQCcgfHwgbmFtZVsxXSAhPSAneycgfHwgbmFtZVsyXSAhPSAnLScpCisJCXJldHVybiAtMTsKKwlicmFjZSA9IHN0cmNocihuYW1lLCAnfScpOworCWlmICghYnJhY2UpCisJCXJldHVybiAtMTsKKwludGggPSBzdHJ0b2wobmFtZSszLCAmbnVtX2VuZCwgMTApOworCWlmIChudW1fZW5kICE9IGJyYWNlKQorCQlyZXR1cm4gLTE7CisJaWYgKG50aCA8PSAwKQorCQlyZXR1cm4gLTE7CisJY2IuYWxsb2MgPSBudGg7CisJY2IuYnVmID0geG1hbGxvYyhudGggKiBzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCWZvciAoaSA9IDA7IGkgPCBudGg7IGkrKykKKwkJc3RyYnVmX2luaXQoJmNiLmJ1ZltpXSwgMjApOworCWNiLmNudCA9IDA7CisJcmV0dmFsID0gMDsKKwlmb3JfZWFjaF9yZWNlbnRfcmVmbG9nX2VudCgiSEVBRCIsIGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2gsIDQwOTYwLCAmY2IpOworCWlmIChjYi5jbnQgPCBudGgpIHsKKwkJY2IuY250ID0gMDsKKwkJZm9yX2VhY2hfcmVmbG9nX2VudCgiSEVBRCIsIGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2gsICZjYik7CisJfQorCWlmIChjYi5jbnQgPCBudGgpCisJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisJaSA9IGNiLmNudCAlIG50aDsKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlzdHJidWZfYWRkKGJ1ZiwgY2IuYnVmW2ldLmJ1ZiwgY2IuYnVmW2ldLmxlbik7CisJcmV0dmFsID0gYnJhY2UtbmFtZSsxOworCityZWxlYXNlX3JldHVybjoKKwlmb3IgKGkgPSAwOyBpIDwgbnRoOyBpKyspCisJCXN0cmJ1Zl9yZWxlYXNlKCZjYi5idWZbaV0pOworCWZyZWUoY2IuYnVmKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBnZXRfc2hhMV9tYihjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBjb21taXQgKm9uZSwgKnR3bzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm1iczsKKwl1bnNpZ25lZCBjaGFyIHNoYTFfdG1wWzIwXTsKKwljb25zdCBjaGFyICpkb3RzOworCWludCBzdDsKKworCWRvdHMgPSBzdHJzdHIobmFtZSwgIi4uLiIpOworCWlmICghZG90cykKKwkJcmV0dXJuIGdldF9zaGExKG5hbWUsIHNoYTEpOworCWlmIChkb3RzID09IG5hbWUpCisJCXN0ID0gZ2V0X3NoYTEoIkhFQUQiLCBzaGExX3RtcCk7CisJZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgc2I7CisJCXN0cmJ1Zl9pbml0KCZzYiwgZG90cyAtIG5hbWUpOworCQlzdHJidWZfYWRkKCZzYiwgbmFtZSwgZG90cyAtIG5hbWUpOworCQlzdCA9IGdldF9zaGExX2NvbW1pdHRpc2goc2IuYnVmLCBzaGExX3RtcCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCWlmIChzdCkKKwkJcmV0dXJuIHN0OworCW9uZSA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzaGExX3RtcCwgMCk7CisJaWYgKCFvbmUpCisJCXJldHVybiAtMTsKKworCWlmIChnZXRfc2hhMV9jb21taXR0aXNoKGRvdHNbM10gPyAoZG90cyArIDMpIDogIkhFQUQiLCBzaGExX3RtcCkpCisJCXJldHVybiAtMTsKKwl0d28gPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMV90bXAsIDApOworCWlmICghdHdvKQorCQlyZXR1cm4gLTE7CisJbWJzID0gZ2V0X21lcmdlX2Jhc2VzKG9uZSwgdHdvLCAxKTsKKwlpZiAoIW1icyB8fCBtYnMtPm5leHQpCisJCXN0ID0gLTE7CisJZWxzZSB7CisJCXN0ID0gMDsKKwkJaGFzaGNweShzaGExLCBtYnMtPml0ZW0tPm9iamVjdC5zaGExKTsKKwl9CisJZnJlZV9jb21taXRfbGlzdChtYnMpOworCXJldHVybiBzdDsKK30KKworLyoKKyAqIFRoaXMgcmVhZHMgc2hvcnQtaGFuZCBzeW50YXggdGhhdCBub3Qgb25seSBldmFsdWF0ZXMgdG8gYSBjb21taXQKKyAqIG9iamVjdCBuYW1lLCBidXQgYWxzbyBjYW4gYWN0IGFzIGlmIHRoZSBlbmQgdXNlciBzcGVsbGVkIHRoZSBuYW1lCisgKiBvZiB0aGUgYnJhbmNoIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAqCisgKiAtICJAey1OfSIgZmluZHMgdGhlIG5hbWUgb2YgdGhlIE50aCBwcmV2aW91cyBicmFuY2ggd2Ugd2VyZSBvbiwgYW5kCisgKiAgIHBsYWNlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZSBnaXZlbiBidWYgYW5kIHJldHVybnMgdGhlCisgKiAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBhcnNlZCBpZiBzdWNjZXNzZnVsLgorICoKKyAqIC0gIjxicmFuY2g+QHt1cHN0cmVhbX0iIGZpbmRzIHRoZSBuYW1lIG9mIHRoZSBvdGhlciByZWYgdGhhdAorICogICA8YnJhbmNoPiBpcyBjb25maWd1cmVkIHRvIG1lcmdlIHdpdGggKG1pc3NpbmcgPGJyYW5jaD4gZGVmYXVsdHMKKyAqICAgdG8gdGhlIGN1cnJlbnQgYnJhbmNoKSwgYW5kIHBsYWNlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZQorICogICBnaXZlbiBidWYgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBhcnNlZCBpZgorICogICBzdWNjZXNzZnVsLgorICoKKyAqIElmIHRoZSBpbnB1dCBpcyBub3Qgb2YgdGhlIGFjY2VwdGVkIGZvcm1hdCwgaXQgcmV0dXJucyBhIG5lZ2F0aXZlCisgKiBudW1iZXIgdG8gc2lnbmFsIGFuIGVycm9yLgorICoKKyAqIElmIHRoZSBpbnB1dCB3YXMgb2sgYnV0IHRoZXJlIGFyZSBub3QgTiBicmFuY2ggc3dpdGNoZXMgaW4gdGhlCisgKiByZWZsb2csIGl0IHJldHVybnMgMC4KKyAqLworaW50IGludGVycHJldF9icmFuY2hfbmFtZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY2hhciAqY3A7CisJc3RydWN0IGJyYW5jaCAqdXBzdHJlYW07CisJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IGxlbiA9IGludGVycHJldF9udGhfcHJpb3JfY2hlY2tvdXQobmFtZSwgYnVmKTsKKwlpbnQgdG1wX2xlbjsKKworCWlmICghbGVuKQorCQlyZXR1cm4gbGVuOyAvKiBzeW50YXggT2ssIG5vdCBlbm91Z2ggc3dpdGNoZXMgKi8KKwlpZiAoMCA8IGxlbiAmJiBsZW4gPT0gbmFtZWxlbikKKwkJcmV0dXJuIGxlbjsgLyogY29uc3VtZWQgYWxsICovCisJZWxzZSBpZiAoMCA8IGxlbikgeworCQkvKiB3ZSBoYXZlIGV4dHJhIGRhdGEsIHdoaWNoIG1pZ2h0IG5lZWQgZnVydGhlciBwcm9jZXNzaW5nICovCisJCXN0cnVjdCBzdHJidWYgdG1wID0gU1RSQlVGX0lOSVQ7CisJCWludCB1c2VkID0gYnVmLT5sZW47CisJCWludCByZXQ7CisKKwkJc3RyYnVmX2FkZChidWYsIG5hbWUgKyBsZW4sIG5hbWVsZW4gLSBsZW4pOworCQlyZXQgPSBpbnRlcnByZXRfYnJhbmNoX25hbWUoYnVmLT5idWYsICZ0bXApOworCQkvKiB0aGF0IGRhdGEgd2FzIG5vdCBpbnRlcnByZXRlZCwgcmVtb3ZlIG91ciBjcnVmdCAqLworCQlpZiAocmV0IDwgMCkgeworCQkJc3RyYnVmX3NldGxlbihidWYsIHVzZWQpOworCQkJcmV0dXJuIGxlbjsKKwkJfQorCQlzdHJidWZfcmVzZXQoYnVmKTsKKwkJc3RyYnVmX2FkZGJ1ZihidWYsICZ0bXApOworCQlzdHJidWZfcmVsZWFzZSgmdG1wKTsKKwkJLyogdHdlYWsgZm9yIHNpemUgb2Ygey1OfSB2ZXJzdXMgZXhwYW5kZWQgcmVmIG5hbWUgKi8KKwkJcmV0dXJuIHJldCAtIHVzZWQgKyBsZW47CisJfQorCisJY3AgPSBzdHJjaHIobmFtZSwgJ0AnKTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gLTE7CisJdG1wX2xlbiA9IHVwc3RyZWFtX21hcmsoY3AsIG5hbWVsZW4gLSAoY3AgLSBuYW1lKSk7CisJaWYgKCF0bXBfbGVuKQorCQlyZXR1cm4gLTE7CisJbGVuID0gY3AgKyB0bXBfbGVuIC0gbmFtZTsKKwljcCA9IHhzdHJuZHVwKG5hbWUsIGNwIC0gbmFtZSk7CisJdXBzdHJlYW0gPSBicmFuY2hfZ2V0KCpjcCA/IGNwIDogTlVMTCk7CisJLyoKKwkgKiBVcHN0cmVhbSBjYW4gYmUgTlVMTCBvbmx5IGlmIGNwIHJlZmVycyB0byBIRUFEIGFuZCBIRUFECisJICogcG9pbnRzIHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgdGhhbiBhIGJyYW5jaC4KKwkgKi8KKwlpZiAoIXVwc3RyZWFtKQorCQlyZXR1cm4gZXJyb3IoXygiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIpKTsKKwlpZiAoIXVwc3RyZWFtLT5tZXJnZSB8fCAhdXBzdHJlYW0tPm1lcmdlWzBdLT5kc3QpIHsKKwkJaWYgKCFyZWZfZXhpc3RzKHVwc3RyZWFtLT5yZWZuYW1lKSkKKwkJCXJldHVybiBlcnJvcihfKCJObyBzdWNoIGJyYW5jaDogJyVzJyIpLCBjcCk7CisJCWlmICghdXBzdHJlYW0tPm1lcmdlKQorCQkJcmV0dXJuIGVycm9yKF8oIk5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIiksCisJCQkJICAgICB1cHN0cmVhbS0+bmFtZSk7CisJCXJldHVybiBlcnJvcigKKwkJCV8oIlVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIiksCisJCQl1cHN0cmVhbS0+bWVyZ2VbMF0tPnNyYyk7CisJfQorCWZyZWUoY3ApOworCWNwID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYodXBzdHJlYW0tPm1lcmdlWzBdLT5kc3QsIDApOworCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCBjcCk7CisJZnJlZShjcCk7CisJcmV0dXJuIGxlbjsKK30KKworaW50IHN0cmJ1Zl9icmFuY2huYW1lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCBsZW4gPSBzdHJsZW4obmFtZSk7CisJaWYgKGludGVycHJldF9icmFuY2hfbmFtZShuYW1lLCBzYikgPT0gbGVuKQorCQlyZXR1cm4gMDsKKwlzdHJidWZfYWRkKHNiLCBuYW1lLCBsZW4pOworCXJldHVybiBsZW47Cit9CisKK2ludCBzdHJidWZfY2hlY2tfYnJhbmNoX3JlZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJidWZfYnJhbmNobmFtZShzYiwgbmFtZSk7CisJaWYgKG5hbWVbMF0gPT0gJy0nKQorCQlyZXR1cm4gLTE7CisJc3RyYnVmX3NwbGljZShzYiwgMCwgMCwgInJlZnMvaGVhZHMvIiwgMTEpOworCXJldHVybiBjaGVja19yZWZuYW1lX2Zvcm1hdChzYi0+YnVmLCAwKTsKK30KKworLyoKKyAqIFRoaXMgaXMgbGlrZSAiZ2V0X3NoYTFfYmFzaWMoKSIsIGV4Y2VwdCBpdCBhbGxvd3MgInNoYTEgZXhwcmVzc2lvbnMiLAorICogbm90YWJseSAieHl6XiIgZm9yICJwYXJlbnQgb2YgeHl6IgorICovCitpbnQgZ2V0X3NoYTEoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgdW51c2VkOworCXJldHVybiBnZXRfc2hhMV93aXRoX2NvbnRleHQobmFtZSwgMCwgc2hhMSwgJnVudXNlZCk7Cit9CisKKy8qCisgKiBNYW55IGNhbGxlcnMga25vdyB0aGF0IHRoZSB1c2VyIG1lYW50IHRvIG5hbWUgYSBjb21taXR0aXNoIGJ5CisgKiBzeW50YWN0aWNhbCBwb3NpdGlvbnMgd2hlcmUgdGhlIG9iamVjdCBuYW1lIGFwcGVhcnMuICBDYWxsaW5nIHRoaXMKKyAqIGZ1bmN0aW9uIGFsbG93cyB0aGUgbWFjaGluZXJ5IHRvIGRpc2FtYmlndWF0ZSBzaG9ydGVyLXRoYW4tdW5pcXVlCisgKiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMgYmV0d2VlbiBjb21taXR0aXNoIGFuZCBvdGhlcnMuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZG9lcyBOT1QgZXJyb3Igb3V0IHdoZW4gdGhlIG5hbWVkIG9iamVjdCBpcyBub3QgYQorICogY29tbWl0dGlzaC4gSXQgaXMgbWVyZWx5IHRvIGdpdmUgYSBoaW50IHRvIHRoZSBkaXNhbWJpZ3VhdGlvbgorICogbWFjaGluZXJ5LgorICovCitpbnQgZ2V0X3NoYTFfY29tbWl0dGlzaChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9zaGExX3dpdGhfY29udGV4dChuYW1lLCBHRVRfU0hBMV9DT01NSVRUSVNILAorCQkJCSAgICAgc2hhMSwgJnVudXNlZCk7Cit9CisKK2ludCBnZXRfc2hhMV90cmVlaXNoKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IHVudXNlZDsKKwlyZXR1cm4gZ2V0X3NoYTFfd2l0aF9jb250ZXh0KG5hbWUsIEdFVF9TSEExX1RSRUVJU0gsCisJCQkJICAgICBzaGExLCAmdW51c2VkKTsKK30KKworaW50IGdldF9zaGExX2NvbW1pdChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9zaGExX3dpdGhfY29udGV4dChuYW1lLCBHRVRfU0hBMV9DT01NSVQsCisJCQkJICAgICBzaGExLCAmdW51c2VkKTsKK30KKworaW50IGdldF9zaGExX3RyZWUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgdW51c2VkOworCXJldHVybiBnZXRfc2hhMV93aXRoX2NvbnRleHQobmFtZSwgR0VUX1NIQTFfVFJFRSwKKwkJCQkgICAgIHNoYTEsICZ1bnVzZWQpOworfQorCitpbnQgZ2V0X3NoYTFfYmxvYihjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9zaGExX3dpdGhfY29udGV4dChuYW1lLCBHRVRfU0hBMV9CTE9CLAorCQkJCSAgICAgc2hhMSwgJnVudXNlZCk7Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiBvYmplY3RfbmFtZTpmaWxlbmFtZSBkb2Vzbid0IGV4aXN0LiAqLworc3RhdGljIHZvaWQgZGlhZ25vc2VfaW52YWxpZF9zaGExX3BhdGgoY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZV9zaGExLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpvYmplY3RfbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXVuc2lnbmVkIG1vZGU7CisKKwlpZiAoIXByZWZpeCkKKwkJcHJlZml4ID0gIiI7CisKKwlpZiAoIWxzdGF0KGZpbGVuYW1lLCAmc3QpKQorCQlkaWUoIlBhdGggJyVzJyBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiAnJXMnLiIsCisJCSAgICBmaWxlbmFtZSwgb2JqZWN0X25hbWUpOworCWlmIChlcnJubyA9PSBFTk9FTlQgfHwgZXJybm8gPT0gRU5PVERJUikgeworCQljaGFyICpmdWxsbmFtZSA9IHhtYWxsb2Moc3RybGVuKGZpbGVuYW1lKQorCQkJCQkgICAgICsgc3RybGVuKHByZWZpeCkgKyAxKTsKKwkJc3RyY3B5KGZ1bGxuYW1lLCBwcmVmaXgpOworCQlzdHJjYXQoZnVsbG5hbWUsIGZpbGVuYW1lKTsKKworCQlpZiAoIWdldF90cmVlX2VudHJ5KHRyZWVfc2hhMSwgZnVsbG5hbWUsCisJCQkJICAgIHNoYTEsICZtb2RlKSkgeworCQkJZGllKCJQYXRoICclcycgZXhpc3RzLCBidXQgbm90ICclcycuXG4iCisJCQkgICAgIkRpZCB5b3UgbWVhbiAnJXM6JXMnIGFrYSAnJXM6Li8lcyc/IiwKKwkJCSAgICBmdWxsbmFtZSwKKwkJCSAgICBmaWxlbmFtZSwKKwkJCSAgICBvYmplY3RfbmFtZSwKKwkJCSAgICBmdWxsbmFtZSwKKwkJCSAgICBvYmplY3RfbmFtZSwKKwkJCSAgICBmaWxlbmFtZSk7CisJCX0KKwkJZGllKCJQYXRoICclcycgZG9lcyBub3QgZXhpc3QgaW4gJyVzJyIsCisJCSAgICBmaWxlbmFtZSwgb2JqZWN0X25hbWUpOworCX0KK30KKworLyogTXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIDpzdGFnZTpmaWxlbmFtZSBkb2Vzbid0IGV4aXN0LiAqLworc3RhdGljIHZvaWQgZGlhZ25vc2VfaW52YWxpZF9pbmRleF9wYXRoKGludCBzdGFnZSwKKwkJCQkJY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQljb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWludCBwb3M7CisJdW5zaWduZWQgbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7CisJdW5zaWduZWQgZnVsbG5hbWVsZW47CisJY2hhciAqZnVsbG5hbWU7CisKKwlpZiAoIXByZWZpeCkKKwkJcHJlZml4ID0gIiI7CisKKwkvKiBXcm9uZyBzdGFnZSBudW1iZXI/ICovCisJcG9zID0gY2FjaGVfbmFtZV9wb3MoZmlsZW5hbWUsIG5hbWVsZW4pOworCWlmIChwb3MgPCAwKQorCQlwb3MgPSAtcG9zIC0gMTsKKwlpZiAocG9zIDwgYWN0aXZlX25yKSB7CisJCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSBuYW1lbGVuICYmCisJCSAgICAhbWVtY21wKGNlLT5uYW1lLCBmaWxlbmFtZSwgbmFtZWxlbikpCisJCQlkaWUoIlBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgYXQgc3RhZ2UgJWQuXG4iCisJCQkgICAgIkRpZCB5b3UgbWVhbiAnOiVkOiVzJz8iLAorCQkJICAgIGZpbGVuYW1lLCBzdGFnZSwKKwkJCSAgICBjZV9zdGFnZShjZSksIGZpbGVuYW1lKTsKKwl9CisKKwkvKiBDb25mdXNpb24gYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgZmlsZW5hbWVzPyAqLworCWZ1bGxuYW1lbGVuID0gbmFtZWxlbiArIHN0cmxlbihwcmVmaXgpOworCWZ1bGxuYW1lID0geG1hbGxvYyhmdWxsbmFtZWxlbiArIDEpOworCXN0cmNweShmdWxsbmFtZSwgcHJlZml4KTsKKwlzdHJjYXQoZnVsbG5hbWUsIGZpbGVuYW1lKTsKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhmdWxsbmFtZSwgZnVsbG5hbWVsZW4pOworCWlmIChwb3MgPCAwKQorCQlwb3MgPSAtcG9zIC0gMTsKKwlpZiAocG9zIDwgYWN0aXZlX25yKSB7CisJCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSBmdWxsbmFtZWxlbiAmJgorCQkgICAgIW1lbWNtcChjZS0+bmFtZSwgZnVsbG5hbWUsIGZ1bGxuYW1lbGVuKSkKKwkJCWRpZSgiUGF0aCAnJXMnIGlzIGluIHRoZSBpbmRleCwgYnV0IG5vdCAnJXMnLlxuIgorCQkJICAgICJEaWQgeW91IG1lYW4gJzolZDolcycgYWthICc6JWQ6Li8lcyc/IiwKKwkJCSAgICBmdWxsbmFtZSwgZmlsZW5hbWUsCisJCQkgICAgY2Vfc3RhZ2UoY2UpLCBmdWxsbmFtZSwKKwkJCSAgICBjZV9zdGFnZShjZSksIGZpbGVuYW1lKTsKKwl9CisKKwlpZiAoIWxzdGF0KGZpbGVuYW1lLCAmc3QpKQorCQlkaWUoIlBhdGggJyVzJyBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiB0aGUgaW5kZXguIiwgZmlsZW5hbWUpOworCWlmIChlcnJubyA9PSBFTk9FTlQgfHwgZXJybm8gPT0gRU5PVERJUikKKwkJZGllKCJQYXRoICclcycgZG9lcyBub3QgZXhpc3QgKG5laXRoZXIgb24gZGlzayBub3IgaW4gdGhlIGluZGV4KS4iLAorCQkgICAgZmlsZW5hbWUpOworCisJZnJlZShmdWxsbmFtZSk7Cit9CisKKworc3RhdGljIGNoYXIgKnJlc29sdmVfcmVsYXRpdmVfcGF0aChjb25zdCBjaGFyICpyZWwpCit7CisJaWYgKHByZWZpeGNtcChyZWwsICIuLyIpICYmIHByZWZpeGNtcChyZWwsICIuLi8iKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXN0YXJ0dXBfaW5mbykKKwkJZGllKCJCVUc6IHN0YXJ0dXBfaW5mbyBzdHJ1Y3QgaXMgbm90IGluaXRpYWxpemVkLiIpOworCisJaWYgKCFpc19pbnNpZGVfd29ya190cmVlKCkpCisJCWRpZSgicmVsYXRpdmUgcGF0aCBzeW50YXggY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIHdvcmtpbmcgdHJlZS4iKTsKKworCS8qIGRpZSgpIGluc2lkZSBwcmVmaXhfcGF0aCgpIGlmIHJlc29sdmVkIHBhdGggaXMgb3V0c2lkZSB3b3JrdHJlZSAqLworCXJldHVybiBwcmVmaXhfcGF0aChzdGFydHVwX2luZm8tPnByZWZpeCwKKwkJCSAgIHN0YXJ0dXBfaW5mby0+cHJlZml4ID8gc3RybGVuKHN0YXJ0dXBfaW5mby0+cHJlZml4KSA6IDAsCisJCQkgICByZWwpOworfQorCitzdGF0aWMgaW50IGdldF9zaGExX3dpdGhfY29udGV4dF8xKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgdW5zaWduZWQgZmxhZ3MsCisJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICAgc3RydWN0IG9iamVjdF9jb250ZXh0ICpvYykKK3sKKwlpbnQgcmV0LCBicmFja2V0X2RlcHRoOworCWludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOworCWNvbnN0IGNoYXIgKmNwOworCWludCBvbmx5X3RvX2RpZSA9IGZsYWdzICYgR0VUX1NIQTFfT05MWV9UT19ESUU7CisKKwltZW1zZXQob2MsIDAsIHNpemVvZigqb2MpKTsKKwlvYy0+bW9kZSA9IFNfSUZJTlZBTElEOworCXJldCA9IGdldF9zaGExXzEobmFtZSwgbmFtZWxlbiwgc2hhMSwgZmxhZ3MpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogc2hhMTpwYXRoIC0tPiBvYmplY3QgbmFtZSBvZiBwYXRoIGluIGVudCBzaGExCisJICogOnBhdGggLT4gb2JqZWN0IG5hbWUgb2YgYWJzb2x1dGUgcGF0aCBpbiBpbmRleAorCSAqIDouL3BhdGggLT4gb2JqZWN0IG5hbWUgb2YgcGF0aCByZWxhdGl2ZSB0byBjd2QgaW4gaW5kZXgKKwkgKiA6WzAtM106cGF0aCAtPiBvYmplY3QgbmFtZSBvZiBwYXRoIGluIGluZGV4IGF0IHN0YWdlCisJICogOi9mb28gLT4gcmVjZW50IGNvbW1pdCBtYXRjaGluZyBmb28KKwkgKi8KKwlpZiAobmFtZVswXSA9PSAnOicpIHsKKwkJaW50IHN0YWdlID0gMDsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJY2hhciAqbmV3X3BhdGggPSBOVUxMOworCQlpbnQgcG9zOworCQlpZiAoIW9ubHlfdG9fZGllICYmIG5hbWVsZW4gPiAyICYmIG5hbWVbMV0gPT0gJy8nKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOworCQkJZm9yX2VhY2hfcmVmKGhhbmRsZV9vbmVfcmVmLCAmbGlzdCk7CisJCQlyZXR1cm4gZ2V0X3NoYTFfb25lbGluZShuYW1lICsgMiwgc2hhMSwgbGlzdCk7CisJCX0KKwkJaWYgKG5hbWVsZW4gPCAzIHx8CisJCSAgICBuYW1lWzJdICE9ICc6JyB8fAorCQkgICAgbmFtZVsxXSA8ICcwJyB8fCAnMycgPCBuYW1lWzFdKQorCQkJY3AgPSBuYW1lICsgMTsKKwkJZWxzZSB7CisJCQlzdGFnZSA9IG5hbWVbMV0gLSAnMCc7CisJCQljcCA9IG5hbWUgKyAzOworCQl9CisJCW5ld19wYXRoID0gcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoKGNwKTsKKwkJaWYgKCFuZXdfcGF0aCkgeworCQkJbmFtZWxlbiA9IG5hbWVsZW4gLSAoY3AgLSBuYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWNwID0gbmV3X3BhdGg7CisJCQluYW1lbGVuID0gc3RybGVuKGNwKTsKKwkJfQorCisJCXN0cm5jcHkob2MtPnBhdGgsIGNwLAorCQkJc2l6ZW9mKG9jLT5wYXRoKSk7CisJCW9jLT5wYXRoW3NpemVvZihvYy0+cGF0aCktMV0gPSAnXDAnOworCisJCWlmICghYWN0aXZlX2NhY2hlKQorCQkJcmVhZF9jYWNoZSgpOworCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhjcCwgbmFtZWxlbik7CisJCWlmIChwb3MgPCAwKQorCQkJcG9zID0gLXBvcyAtIDE7CisJCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCQlpZiAoY2VfbmFtZWxlbihjZSkgIT0gbmFtZWxlbiB8fAorCQkJICAgIG1lbWNtcChjZS0+bmFtZSwgY3AsIG5hbWVsZW4pKQorCQkJCWJyZWFrOworCQkJaWYgKGNlX3N0YWdlKGNlKSA9PSBzdGFnZSkgeworCQkJCWhhc2hjcHkoc2hhMSwgY2UtPnNoYTEpOworCQkJCW9jLT5tb2RlID0gY2UtPmNlX21vZGU7CisJCQkJZnJlZShuZXdfcGF0aCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlwb3MrKzsKKwkJfQorCQlpZiAob25seV90b19kaWUgJiYgbmFtZVsxXSAmJiBuYW1lWzFdICE9ICcvJykKKwkJCWRpYWdub3NlX2ludmFsaWRfaW5kZXhfcGF0aChzdGFnZSwgcHJlZml4LCBjcCk7CisJCWZyZWUobmV3X3BhdGgpOworCQlyZXR1cm4gLTE7CisJfQorCWZvciAoY3AgPSBuYW1lLCBicmFja2V0X2RlcHRoID0gMDsgKmNwOyBjcCsrKSB7CisJCWlmICgqY3AgPT0gJ3snKQorCQkJYnJhY2tldF9kZXB0aCsrOworCQllbHNlIGlmIChicmFja2V0X2RlcHRoICYmICpjcCA9PSAnfScpCisJCQlicmFja2V0X2RlcHRoLS07CisJCWVsc2UgaWYgKCFicmFja2V0X2RlcHRoICYmICpjcCA9PSAnOicpCisJCQlicmVhazsKKwl9CisJaWYgKCpjcCA9PSAnOicpIHsKKwkJdW5zaWduZWQgY2hhciB0cmVlX3NoYTFbMjBdOworCQljaGFyICpvYmplY3RfbmFtZSA9IE5VTEw7CisJCWlmIChvbmx5X3RvX2RpZSkgeworCQkJb2JqZWN0X25hbWUgPSB4bWFsbG9jKGNwLW5hbWUrMSk7CisJCQlzdHJuY3B5KG9iamVjdF9uYW1lLCBuYW1lLCBjcC1uYW1lKTsKKwkJCW9iamVjdF9uYW1lW2NwLW5hbWVdID0gJ1wwJzsKKwkJfQorCQlpZiAoIWdldF9zaGExXzEobmFtZSwgY3AtbmFtZSwgdHJlZV9zaGExLCBHRVRfU0hBMV9UUkVFSVNIKSkgeworCQkJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBjcCsxOworCQkJY2hhciAqbmV3X2ZpbGVuYW1lID0gTlVMTDsKKworCQkJbmV3X2ZpbGVuYW1lID0gcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoKGZpbGVuYW1lKTsKKwkJCWlmIChuZXdfZmlsZW5hbWUpCisJCQkJZmlsZW5hbWUgPSBuZXdfZmlsZW5hbWU7CisJCQlyZXQgPSBnZXRfdHJlZV9lbnRyeSh0cmVlX3NoYTEsIGZpbGVuYW1lLCBzaGExLCAmb2MtPm1vZGUpOworCQkJaWYgKHJldCAmJiBvbmx5X3RvX2RpZSkgeworCQkJCWRpYWdub3NlX2ludmFsaWRfc2hhMV9wYXRoKHByZWZpeCwgZmlsZW5hbWUsCisJCQkJCQkJICAgdHJlZV9zaGExLCBvYmplY3RfbmFtZSk7CisJCQkJZnJlZShvYmplY3RfbmFtZSk7CisJCQl9CisJCQloYXNoY3B5KG9jLT50cmVlLCB0cmVlX3NoYTEpOworCQkJc3RybmNweShvYy0+cGF0aCwgZmlsZW5hbWUsCisJCQkJc2l6ZW9mKG9jLT5wYXRoKSk7CisJCQlvYy0+cGF0aFtzaXplb2Yob2MtPnBhdGgpLTFdID0gJ1wwJzsKKworCQkJZnJlZShuZXdfZmlsZW5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIHsKKwkJCWlmIChvbmx5X3RvX2RpZSkKKwkJCQlkaWUoIkludmFsaWQgb2JqZWN0IG5hbWUgJyVzJy4iLCBvYmplY3RfbmFtZSk7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHlvdSBrbm93ICJuYW1lIiBnaXZlbiBieSB0aGUgZW5kIHVzZXIgbXVzdAorICogbmFtZSBhbiBvYmplY3QgYnV0IGl0IGRvZXNuJ3Q7IHRoZSBmdW5jdGlvbiBfbWF5XyBkaWUgd2l0aCBhIGJldHRlcgorICogZGlhZ25vc3RpYyBtZXNzYWdlIHRoYW4gIm5vIHN1Y2ggb2JqZWN0ICduYW1lJyIsIGUuZy4gIlBhdGggJ2RvYycgZG9lcyBub3QKKyAqIGV4aXN0IGluICdIRUFEJyIgd2hlbiBnaXZlbiAiSEVBRDpkb2MiLCBvciBpdCBtYXkgcmV0dXJuIGluIHdoaWNoIGNhc2UKKyAqIHlvdSBoYXZlIGEgY2hhbmNlIHRvIGRpYWdub3NlIHRoZSBlcnJvciBmdXJ0aGVyLgorICovCit2b2lkIG1heWJlX2RpZV9vbl9taXNzcGVsdF9vYmplY3RfbmFtZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IG9jOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJZ2V0X3NoYTFfd2l0aF9jb250ZXh0XzEobmFtZSwgR0VUX1NIQTFfT05MWV9UT19ESUUsIHByZWZpeCwgc2hhMSwgJm9jKTsKK30KKworaW50IGdldF9zaGExX3dpdGhfY29udGV4dChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgKm9yYykKK3sKKwlyZXR1cm4gZ2V0X3NoYTFfd2l0aF9jb250ZXh0XzEoc3RyLCBmbGFncywgTlVMTCwgc2hhMSwgb3JjKTsKK30KZGlmZiAtLWdpdCBhL3NoYWxsb3cuYyBiL3NoYWxsb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDM2M2RlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhbGxvdy5jCkBAIC0wLDAgKzEsMTA0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKworc3RhdGljIGludCBpc19zaGFsbG93ID0gLTE7CisKK2ludCByZWdpc3Rlcl9zaGFsbG93KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQgPQorCQl4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tbWl0X2dyYWZ0KSk7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdChzaGExKTsKKworCWhhc2hjcHkoZ3JhZnQtPnNoYTEsIHNoYTEpOworCWdyYWZ0LT5ucl9wYXJlbnQgPSAtMTsKKwlpZiAoY29tbWl0ICYmIGNvbW1pdC0+b2JqZWN0LnBhcnNlZCkKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwlyZXR1cm4gcmVnaXN0ZXJfY29tbWl0X2dyYWZ0KGdyYWZ0LCAwKTsKK30KKworaW50IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyh2b2lkKQoreworCUZJTEUgKmZwOworCWNoYXIgYnVmWzEwMjRdOworCisJaWYgKGlzX3NoYWxsb3cgPj0gMCkKKwkJcmV0dXJuIGlzX3NoYWxsb3c7CisKKwlmcCA9IGZvcGVuKGdpdF9wYXRoKCJzaGFsbG93IiksICJyIik7CisJaWYgKCFmcCkgeworCQlpc19zaGFsbG93ID0gMDsKKwkJcmV0dXJuIGlzX3NoYWxsb3c7CisJfQorCWlzX3NoYWxsb3cgPSAxOworCisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlpZiAoZ2V0X3NoYTFfaGV4KGJ1Ziwgc2hhMSkpCisJCQlkaWUoImJhZCBzaGFsbG93IGxpbmU6ICVzIiwgYnVmKTsKKwkJcmVnaXN0ZXJfc2hhbGxvdyhzaGExKTsKKwl9CisJZmNsb3NlKGZwKTsKKwlyZXR1cm4gaXNfc2hhbGxvdzsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfc2hhbGxvd19jb21taXRzKHN0cnVjdCBvYmplY3RfYXJyYXkgKmhlYWRzLCBpbnQgZGVwdGgsCisJCWludCBzaGFsbG93X2ZsYWcsIGludCBub3Rfc2hhbGxvd19mbGFnKQoreworCWludCBpID0gMCwgY3VyX2RlcHRoID0gMDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9hcnJheSBzdGFjayA9IE9CSkVDVF9BUlJBWV9JTklUOworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IE5VTEw7CisKKwl3aGlsZSAoY29tbWl0IHx8IGkgPCBoZWFkcy0+bnIgfHwgc3RhY2subnIpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQlpZiAoIWNvbW1pdCkgeworCQkJaWYgKGkgPCBoZWFkcy0+bnIpIHsKKwkJCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKQorCQkJCQlkZXJlZl90YWcoaGVhZHMtPm9iamVjdHNbaSsrXS5pdGVtLCBOVUxMLCAwKTsKKwkJCQlpZiAoIWNvbW1pdCB8fCBjb21taXQtPm9iamVjdC50eXBlICE9IE9CSl9DT01NSVQpIHsKKwkJCQkJY29tbWl0ID0gTlVMTDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmICghY29tbWl0LT51dGlsKQorCQkJCQljb21taXQtPnV0aWwgPSB4bWFsbG9jKHNpemVvZihpbnQpKTsKKwkJCQkqKGludCAqKWNvbW1pdC0+dXRpbCA9IDA7CisJCQkJY3VyX2RlcHRoID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKikKKwkJCQkJc3RhY2sub2JqZWN0c1stLXN0YWNrLm5yXS5pdGVtOworCQkJCWN1cl9kZXB0aCA9ICooaW50ICopY29tbWl0LT51dGlsOworCQkJfQorCQl9CisJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJCWRpZSgiaW52YWxpZCBjb21taXQiKTsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gbm90X3NoYWxsb3dfZmxhZzsKKwkJY3VyX2RlcHRoKys7CisJCWZvciAocCA9IGNvbW1pdC0+cGFyZW50cywgY29tbWl0ID0gTlVMTDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCWlmICghcC0+aXRlbS0+dXRpbCkgeworCQkJCWludCAqcG9pbnRlciA9IHhtYWxsb2Moc2l6ZW9mKGludCkpOworCQkJCXAtPml0ZW0tPnV0aWwgPSBwb2ludGVyOworCQkJCSpwb2ludGVyID0gIGN1cl9kZXB0aDsKKwkJCX0gZWxzZSB7CisJCQkJaW50ICpwb2ludGVyID0gcC0+aXRlbS0+dXRpbDsKKwkJCQlpZiAoY3VyX2RlcHRoID49ICpwb2ludGVyKQorCQkJCQljb250aW51ZTsKKwkJCQkqcG9pbnRlciA9IGN1cl9kZXB0aDsKKwkJCX0KKwkJCWlmIChjdXJfZGVwdGggPCBkZXB0aCkgeworCQkJCWlmIChwLT5uZXh0KQorCQkJCQlhZGRfb2JqZWN0X2FycmF5KCZwLT5pdGVtLT5vYmplY3QsCisJCQkJCQkJTlVMTCwgJnN0YWNrKTsKKwkJCQllbHNlIHsKKwkJCQkJY29tbWl0ID0gcC0+aXRlbTsKKwkJCQkJY3VyX2RlcHRoID0gKihpbnQgKiljb21taXQtPnV0aWw7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQljb21taXRfbGlzdF9pbnNlcnQocC0+aXRlbSwgJnJlc3VsdCk7CisJCQkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IHNoYWxsb3dfZmxhZzsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zaGVsbC5jIGIvc2hlbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGIyMzdmCi0tLSAvZGV2L251bGwKKysrIGIvc2hlbGwuYwpAQCAtMCwwICsxLDIyMCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKKyNkZWZpbmUgQ09NTUFORF9ESVIgImdpdC1zaGVsbC1jb21tYW5kcyIKKyNkZWZpbmUgSEVMUF9DT01NQU5EIENPTU1BTkRfRElSICIvaGVscCIKKworc3RhdGljIGludCBkb19nZW5lcmljX2NtZChjb25zdCBjaGFyICptZSwgY2hhciAqYXJnKQoreworCWNvbnN0IGNoYXIgKm15X2FyZ3ZbNF07CisKKwlzZXR1cF9wYXRoKCk7CisJaWYgKCFhcmcgfHwgIShhcmcgPSBzcV9kZXF1b3RlKGFyZykpKQorCQlkaWUoImJhZCBhcmd1bWVudCIpOworCWlmIChwcmVmaXhjbXAobWUsICJnaXQtIikpCisJCWRpZSgiYmFkIGNvbW1hbmQiKTsKKworCW15X2FyZ3ZbMF0gPSBtZSArIDQ7CisJbXlfYXJndlsxXSA9IGFyZzsKKwlteV9hcmd2WzJdID0gTlVMTDsKKworCXJldHVybiBleGVjdl9naXRfY21kKG15X2FyZ3YpOworfQorCitzdGF0aWMgaW50IGRvX2N2c19jbWQoY29uc3QgY2hhciAqbWUsIGNoYXIgKmFyZykKK3sKKwljb25zdCBjaGFyICpjdnNzZXJ2ZXJfYXJndlszXSA9IHsKKwkJImN2c3NlcnZlciIsICJzZXJ2ZXIiLCBOVUxMCisJfTsKKworCWlmICghYXJnIHx8IHN0cmNtcChhcmcsICJzZXJ2ZXIiKSkKKwkJZGllKCJnaXQtY3Zzc2VydmVyIG9ubHkgaGFuZGxlcyBzZXJ2ZXI6ICVzIiwgYXJnKTsKKworCXNldHVwX3BhdGgoKTsKKwlyZXR1cm4gZXhlY3ZfZ2l0X2NtZChjdnNzZXJ2ZXJfYXJndik7Cit9CisKK3N0YXRpYyBpbnQgaXNfdmFsaWRfY21kX25hbWUoY29uc3QgY2hhciAqY21kKQoreworCS8qIFRlc3QgY29tbWFuZCBjb250YWlucyBubyAuIG9yIC8gY2hhcmFjdGVycyAqLworCXJldHVybiBjbWRbc3RyY3NwbihjbWQsICIuLyIpXSA9PSAnXDAnOworfQorCitzdGF0aWMgY2hhciAqbWFrZV9jbWQoY29uc3QgY2hhciAqcHJvZykKK3sKKwljaGFyICpwcmVmaXggPSB4bWFsbG9jKChzdHJsZW4ocHJvZykgKyBzdHJsZW4oQ09NTUFORF9ESVIpICsgMikpOworCXN0cmNweShwcmVmaXgsIENPTU1BTkRfRElSKTsKKwlzdHJjYXQocHJlZml4LCAiLyIpOworCXN0cmNhdChwcmVmaXgsIHByb2cpOworCXJldHVybiBwcmVmaXg7Cit9CisKK3N0YXRpYyB2b2lkIGNkX3RvX2hvbWVkaXIodm9pZCkKK3sKKwljb25zdCBjaGFyICpob21lID0gZ2V0ZW52KCJIT01FIik7CisJaWYgKCFob21lKQorCQlkaWUoImNvdWxkIG5vdCBkZXRlcm1pbmUgdXNlcidzIGhvbWUgZGlyZWN0b3J5OyBIT01FIGlzIHVuc2V0Iik7CisJaWYgKGNoZGlyKGhvbWUpID09IC0xKQorCQlkaWUoImNvdWxkIG5vdCBjaGRpciB0byB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkiKTsKK30KKworc3RhdGljIHZvaWQgcnVuX3NoZWxsKHZvaWQpCit7CisJaW50IGRvbmUgPSAwOworCXN0YXRpYyBjb25zdCBjaGFyICpoZWxwX2FyZ3ZbXSA9IHsgSEVMUF9DT01NQU5ELCBOVUxMIH07CisJLyogUHJpbnQgaGVscCBpZiBlbmFibGVkICovCisJcnVuX2NvbW1hbmRfdl9vcHQoaGVscF9hcmd2LCBSVU5fU0lMRU5UX0VYRUNfRkFJTFVSRSk7CisKKwlkbyB7CisJCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpwcm9nOworCQljaGFyICpmdWxsX2NtZDsKKwkJY2hhciAqcmF3YXJnczsKKwkJY2hhciAqc3BsaXRfYXJnczsKKwkJY29uc3QgY2hhciAqKmFyZ3Y7CisJCWludCBjb2RlOworCQlpbnQgY291bnQ7CisKKwkJZnByaW50ZihzdGRlcnIsICJnaXQ+ICIpOworCQlpZiAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluLCAnXG4nKSA9PSBFT0YpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwkJCWJyZWFrOworCQl9CisJCXN0cmJ1Zl90cmltKCZsaW5lKTsKKwkJcmF3YXJncyA9IHN0cmJ1Zl9kZXRhY2goJmxpbmUsIE5VTEwpOworCQlzcGxpdF9hcmdzID0geHN0cmR1cChyYXdhcmdzKTsKKwkJY291bnQgPSBzcGxpdF9jbWRsaW5lKHNwbGl0X2FyZ3MsICZhcmd2KTsKKwkJaWYgKGNvdW50IDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGNvbW1hbmQgZm9ybWF0ICclcyc6ICVzXG4iLCByYXdhcmdzLAorCQkJCXNwbGl0X2NtZGxpbmVfc3RyZXJyb3IoY291bnQpKTsKKwkJCWZyZWUoc3BsaXRfYXJncyk7CisJCQlmcmVlKHJhd2FyZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQlwcm9nID0gYXJndlswXTsKKwkJaWYgKCFzdHJjbXAocHJvZywgIiIpKSB7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChwcm9nLCAicXVpdCIpIHx8ICFzdHJjbXAocHJvZywgImxvZ291dCIpIHx8CisJCQkgICAhc3RyY21wKHByb2csICJleGl0IikgfHwgIXN0cmNtcChwcm9nLCAiYnllIikpIHsKKwkJCWRvbmUgPSAxOworCQl9IGVsc2UgaWYgKGlzX3ZhbGlkX2NtZF9uYW1lKHByb2cpKSB7CisJCQlmdWxsX2NtZCA9IG1ha2VfY21kKHByb2cpOworCQkJYXJndlswXSA9IGZ1bGxfY21kOworCQkJY29kZSA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9TSUxFTlRfRVhFQ19GQUlMVVJFKTsKKwkJCWlmIChjb2RlID09IC0xICYmIGVycm5vID09IEVOT0VOVCkgeworCQkJCWZwcmludGYoc3RkZXJyLCAidW5yZWNvZ25pemVkIGNvbW1hbmQgJyVzJ1xuIiwgcHJvZyk7CisJCQl9CisJCQlmcmVlKGZ1bGxfY21kKTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBjb21tYW5kIGZvcm1hdCAnJXMnXG4iLCBwcm9nKTsKKwkJfQorCisJCWZyZWUoYXJndik7CisJCWZyZWUocmF3YXJncyk7CisJfSB3aGlsZSAoIWRvbmUpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1hbmRzIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAoKmV4ZWMpKGNvbnN0IGNoYXIgKm1lLCBjaGFyICphcmcpOworfSBjbWRfbGlzdFtdID0geworCXsgImdpdC1yZWNlaXZlLXBhY2siLCBkb19nZW5lcmljX2NtZCB9LAorCXsgImdpdC11cGxvYWQtcGFjayIsIGRvX2dlbmVyaWNfY21kIH0sCisJeyAiZ2l0LXVwbG9hZC1hcmNoaXZlIiwgZG9fZ2VuZXJpY19jbWQgfSwKKwl7ICJjdnMiLCBkb19jdnNfY21kIH0sCisJeyBOVUxMIH0sCit9OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqcHJvZzsKKwljb25zdCBjaGFyICoqdXNlcl9hcmd2OworCXN0cnVjdCBjb21tYW5kcyAqY21kOworCWludCBkZXZudWxsX2ZkOworCWludCBjb3VudDsKKworCWdpdF9zZXR1cF9nZXR0ZXh0KCk7CisKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCisJLyoKKwkgKiBBbHdheXMgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIDAvMS8yIHRvIGF2b2lkIGNsb2JiZXJpbmcgZmlsZXMKKwkgKiBpbiBkaWUoKS4gIEl0IGFsc28gYXZvaWRzIG5vdCBtZXNzaW5nIHVwIHdoZW4gdGhlIHBpcGVzIGFyZQorCSAqIGR1cCdlZCBvbnRvIHN0ZGluL3N0ZG91dC9zdGRlcnIgaW4gdGhlIGNoaWxkIHByb2Nlc3NlcyB3ZSBzcGF3bi4KKwkgKi8KKwlkZXZudWxsX2ZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKwl3aGlsZSAoZGV2bnVsbF9mZCA+PSAwICYmIGRldm51bGxfZmQgPD0gMikKKwkJZGV2bnVsbF9mZCA9IGR1cChkZXZudWxsX2ZkKTsKKwlpZiAoZGV2bnVsbF9mZCA9PSAtMSkKKwkJZGllX2Vycm5vKCJvcGVuaW5nIC9kZXYvbnVsbCBmYWlsZWQiKTsKKwljbG9zZSAoZGV2bnVsbF9mZCk7CisKKwkvKgorCSAqIFNwZWNpYWwgaGFjayB0byBwcmV0ZW5kIHRvIGJlIGEgQ1ZTIHNlcnZlcgorCSAqLworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiY3ZzIHNlcnZlciIpKSB7CisJCWFyZ3YtLTsKKwl9IGVsc2UgaWYgKGFyZ2MgPT0gMSkgeworCQkvKiBBbGxvdyB0aGUgdXNlciB0byBydW4gYW4gaW50ZXJhY3RpdmUgc2hlbGwgKi8KKwkJY2RfdG9faG9tZWRpcigpOworCQlpZiAoYWNjZXNzKENPTU1BTkRfRElSLCBSX09LIHwgWF9PSykgPT0gLTEpIHsKKwkJCWRpZSgiSW50ZXJhY3RpdmUgZ2l0IHNoZWxsIGlzIG5vdCBlbmFibGVkLlxuIgorCQkJICAgICJoaW50OiB+LyIgQ09NTUFORF9ESVIgIiBzaG91bGQgZXhpc3QgIgorCQkJICAgICJhbmQgaGF2ZSByZWFkIGFuZCBleGVjdXRlIGFjY2Vzcy4iKTsKKwkJfQorCQlydW5fc2hlbGwoKTsKKwkJZXhpdCgwKTsKKwl9IGVsc2UgaWYgKGFyZ2MgIT0gMyB8fCBzdHJjbXAoYXJndlsxXSwgIi1jIikpIHsKKwkJLyoKKwkJICogV2UgZG8gbm90IGFjY2VwdCBhbnkgb3RoZXIgbW9kZXMgZXhjZXB0ICItYyIgZm9sbG93ZWQgYnkKKwkJICogImNtZCBhcmciLCB3aGVyZSAiY21kIiBpcyBhIHZlcnkgbGltaXRlZCBzdWJzZXQgb2YgZ2l0CisJCSAqIGNvbW1hbmRzIG9yIGEgY29tbWFuZCBpbiB0aGUgQ09NTUFORF9ESVIKKwkJICovCisJCWRpZSgiUnVuIHdpdGggbm8gYXJndW1lbnRzIG9yIHdpdGggLWMgY21kIik7CisJfQorCisJcHJvZyA9IHhzdHJkdXAoYXJndlsyXSk7CisJaWYgKCFzdHJuY21wKHByb2csICJnaXQiLCAzKSAmJiBpc3NwYWNlKHByb2dbM10pKQorCQkvKiBBY2NlcHQgImdpdCBmb28iIGFzIGlmIHRoZSBjYWxsZXIgc2FpZCAiZ2l0LWZvbyIuICovCisJCXByb2dbM10gPSAnLSc7CisKKwlmb3IgKGNtZCA9IGNtZF9saXN0IDsgY21kLT5uYW1lIDsgY21kKyspIHsKKwkJaW50IGxlbiA9IHN0cmxlbihjbWQtPm5hbWUpOworCQljaGFyICphcmc7CisJCWlmIChzdHJuY21wKGNtZC0+bmFtZSwgcHJvZywgbGVuKSkKKwkJCWNvbnRpbnVlOworCQlhcmcgPSBOVUxMOworCQlzd2l0Y2ggKHByb2dbbGVuXSkgeworCQljYXNlICdcMCc6CisJCQlhcmcgPSBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgJyAnOgorCQkJYXJnID0gcHJvZyArIGxlbiArIDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisJCWV4aXQoY21kLT5leGVjKGNtZC0+bmFtZSwgYXJnKSk7CisJfQorCisJY2RfdG9faG9tZWRpcigpOworCWNvdW50ID0gc3BsaXRfY21kbGluZShwcm9nLCAmdXNlcl9hcmd2KTsKKwlpZiAoY291bnQgPj0gMCkgeworCQlpZiAoaXNfdmFsaWRfY21kX25hbWUodXNlcl9hcmd2WzBdKSkgeworCQkJcHJvZyA9IG1ha2VfY21kKHVzZXJfYXJndlswXSk7CisJCQl1c2VyX2FyZ3ZbMF0gPSBwcm9nOworCQkJZXhlY3YodXNlcl9hcmd2WzBdLCAoY2hhciAqY29uc3QgKikgdXNlcl9hcmd2KTsKKwkJfQorCQlmcmVlKHByb2cpOworCQlmcmVlKHVzZXJfYXJndik7CisJCWRpZSgidW5yZWNvZ25pemVkIGNvbW1hbmQgJyVzJyIsIGFyZ3ZbMl0pOworCX0gZWxzZSB7CisJCWZyZWUocHJvZyk7CisJCWRpZSgiaW52YWxpZCBjb21tYW5kIGZvcm1hdCAnJXMnOiAlcyIsIGFyZ3ZbMl0sCisJCSAgICBzcGxpdF9jbWRsaW5lX3N0cmVycm9yKGNvdW50KSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc2hvcnRsb2cuaCBiL3Nob3J0bG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0Zjg2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Nob3J0bG9nLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBTSE9SVExPR19ICisjZGVmaW5lIFNIT1JUTE9HX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCBzaG9ydGxvZyB7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3Q7CisJaW50IHN1bW1hcnk7CisJaW50IHdyYXBfbGluZXM7CisJaW50IHNvcnRfYnlfbnVtYmVyOworCWludCB3cmFwOworCWludCBpbjE7CisJaW50IGluMjsKKwlpbnQgdXNlcl9mb3JtYXQ7CisJaW50IGFiYnJldjsKKworCWNoYXIgKmNvbW1vbl9yZXBvX3ByZWZpeDsKKwlpbnQgZW1haWw7CisJc3RydWN0IHN0cmluZ19saXN0IG1haWxtYXA7Cit9OworCit2b2lkIHNob3J0bG9nX2luaXQoc3RydWN0IHNob3J0bG9nICpsb2cpOworCit2b2lkIHNob3J0bG9nX2FkZF9jb21taXQoc3RydWN0IHNob3J0bG9nICpsb2csIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CisKK3ZvaWQgc2hvcnRsb2dfb3V0cHV0KHN0cnVjdCBzaG9ydGxvZyAqbG9nKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zaG93LWluZGV4LmMgYi9zaG93LWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5ZWVkNwotLS0gL2Rldi9udWxsCisrKyBiL3Nob3ctaW5kZXguYwpAQCAtMCwwICsxLDg2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHNob3dfaW5kZXhfdXNhZ2VbXSA9CisiZ2l0IHNob3ctaW5kZXggPCA8cGFja2VkIGFyY2hpdmUgaW5kZXg+IjsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBpOworCXVuc2lnbmVkIG5yOworCXVuc2lnbmVkIGludCB2ZXJzaW9uOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9wX2luZGV4WzI1Nl07CisKKwlnaXRfc2V0dXBfZ2V0dGV4dCgpOworCisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2Uoc2hvd19pbmRleF91c2FnZSk7CisJaWYgKGZyZWFkKHRvcF9pbmRleCwgMiAqIDQsIDEsIHN0ZGluKSAhPSAxKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGhlYWRlciIpOworCWlmICh0b3BfaW5kZXhbMF0gPT0gaHRvbmwoUEFDS19JRFhfU0lHTkFUVVJFKSkgeworCQl2ZXJzaW9uID0gbnRvaGwodG9wX2luZGV4WzFdKTsKKwkJaWYgKHZlcnNpb24gPCAyIHx8IHZlcnNpb24gPiAyKQorCQkJZGllKCJ1bmtub3duIGluZGV4IHZlcnNpb24iKTsKKwkJaWYgKGZyZWFkKHRvcF9pbmRleCwgMjU2ICogNCwgMSwgc3RkaW4pICE9IDEpCisJCQlkaWUoInVuYWJsZSB0byByZWFkIGluZGV4Iik7CisJfSBlbHNlIHsKKwkJdmVyc2lvbiA9IDE7CisJCWlmIChmcmVhZCgmdG9wX2luZGV4WzJdLCAyNTQgKiA0LCAxLCBzdGRpbikgIT0gMSkKKwkJCWRpZSgidW5hYmxlIHRvIHJlYWQgaW5kZXgiKTsKKwl9CisJbnIgPSAwOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQl1bnNpZ25lZCBuID0gbnRvaGwodG9wX2luZGV4W2ldKTsKKwkJaWYgKG4gPCBucikKKwkJCWRpZSgiY29ycnVwdCBpbmRleCBmaWxlIik7CisJCW5yID0gbjsKKwl9CisJaWYgKHZlcnNpb24gPT0gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQkJdW5zaWduZWQgaW50IG9mZnNldCwgZW50cnlbNl07CisKKwkJCWlmIChmcmVhZChlbnRyeSwgNCArIDIwLCAxLCBzdGRpbikgIT0gMSkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkIGVudHJ5ICV1LyV1IiwgaSwgbnIpOworCQkJb2Zmc2V0ID0gbnRvaGwoZW50cnlbMF0pOworCQkJcHJpbnRmKCIldSAlc1xuIiwgb2Zmc2V0LCBzaGExX3RvX2hleCgodm9pZCAqKShlbnRyeSsxKSkpOworCQl9CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgb2ZmNjRfbnIgPSAwOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJCXVpbnQzMl90IGNyYzsKKwkJCXVpbnQzMl90IG9mZjsKKwkJfSAqZW50cmllcyA9IHhtYWxsb2MobnIgKiBzaXplb2YoZW50cmllc1swXSkpOworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJCWlmIChmcmVhZChlbnRyaWVzW2ldLnNoYTEsIDIwLCAxLCBzdGRpbikgIT0gMSkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkIHNoYTEgJXUvJXUiLCBpLCBucik7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQkJaWYgKGZyZWFkKCZlbnRyaWVzW2ldLmNyYywgNCwgMSwgc3RkaW4pICE9IDEpCisJCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBjcmMgJXUvJXUiLCBpLCBucik7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQkJaWYgKGZyZWFkKCZlbnRyaWVzW2ldLm9mZiwgNCwgMSwgc3RkaW4pICE9IDEpCisJCQkJZGllKCJ1bmFibGUgdG8gcmVhZCAzMmIgb2Zmc2V0ICV1LyV1IiwgaSwgbnIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQkJdWludDY0X3Qgb2Zmc2V0OworCQkJdWludDMyX3Qgb2ZmID0gbnRvaGwoZW50cmllc1tpXS5vZmYpOworCQkJaWYgKCEob2ZmICYgMHg4MDAwMDAwMCkpIHsKKwkJCQlvZmZzZXQgPSBvZmY7CisJCQl9IGVsc2UgeworCQkJCXVpbnQzMl90IG9mZjY0WzJdOworCQkJCWlmICgob2ZmICYgMHg3ZmZmZmZmZikgIT0gb2ZmNjRfbnIpCisJCQkJCWRpZSgiaW5jb25zaXN0ZW50IDY0YiBvZmZzZXQgaW5kZXgiKTsKKwkJCQlpZiAoZnJlYWQob2ZmNjQsIDgsIDEsIHN0ZGluKSAhPSAxKQorCQkJCQlkaWUoInVuYWJsZSB0byByZWFkIDY0YiBvZmZzZXQgJXUiLCBvZmY2NF9ucik7CisJCQkJb2Zmc2V0ID0gKCgodWludDY0X3QpbnRvaGwob2ZmNjRbMF0pKSA8PCAzMikgfAorCQkJCQkJICAgICBudG9obChvZmY2NFsxXSk7CisJCQkJb2ZmNjRfbnIrKzsKKwkJCX0KKwkJCXByaW50ZigiJSIgUFJJdU1BWCAiICVzICglMDgiUFJJeDMyIilcbiIsCisJCQkgICAgICAgKHVpbnRtYXhfdCkgb2Zmc2V0LAorCQkJICAgICAgIHNoYTFfdG9faGV4KGVudHJpZXNbaV0uc2hhMSksCisJCQkgICAgICAgbnRvaGwoZW50cmllc1tpXS5jcmMpKTsKKwkJfQorCQlmcmVlKGVudHJpZXMpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NpZGViYW5kLmMgYi9zaWRlYmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZmZhMWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaWRlYmFuZC5jCkBAIC0wLDAgKzEsMTUxIEBACisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorCisvKgorICogUmVjZWl2ZSBtdWx0aXBsZXhlZCBvdXRwdXQgc3RyZWFtIG92ZXIgZ2l0IG5hdGl2ZSBwcm90b2NvbC4KKyAqIGluX3N0cmVhbSBpcyB0aGUgaW5wdXQgc3RyZWFtIGZyb20gdGhlIHJlbW90ZSwgd2hpY2ggY2FycmllcyBkYXRhCisgKiBpbiBwa3RfbGluZSBmb3JtYXQgd2l0aCBiYW5kIGRlc2lnbmF0b3IuICBEZW11bHRpcGxleCBpdCBpbnRvIG91dAorICogYW5kIGVyciBhbmQgcmV0dXJuIGVycm9yIGFwcHJvcHJpYXRlbHkuICBCYW5kICMxIGNhcnJpZXMgdGhlCisgKiBwcmltYXJ5IHBheWxvYWQuICBUaGluZ3MgY29taW5nIG92ZXIgYmFuZCAjMiBpcyBub3QgbmVjZXNzYXJpbHkKKyAqIGVycm9yOyB0aGV5IGFyZSB1c3VhbGx5IGluZm9ybWF0aXZlIG1lc3NhZ2Ugb24gdGhlIHN0YW5kYXJkIGVycm9yCisgKiBzdHJlYW0sIGFrYSAidmVyYm9zZSIpLiAgQSBtZXNzYWdlIG92ZXIgYmFuZCAjMyBpcyBhIHNpZ25hbCB0aGF0CisgKiB0aGUgcmVtb3RlIGRpZWQgdW5leHBlY3RlZGx5LiAgQSBmbHVzaCgpIGNvbmNsdWRlcyB0aGUgc3RyZWFtLgorICovCisKKyNkZWZpbmUgUFJFRklYICJyZW1vdGU6IgorCisjZGVmaW5lIEFOU0lfU1VGRklYICJcMDMzW0siCisjZGVmaW5lIERVTUJfU1VGRklYICIgICAgICAgICIKKworI2RlZmluZSBGSVhfU0laRSAxMCAgLyogbGFyZ2UgZW5vdWdoIGZvciBhbnkgb2YgdGhlIGFib3ZlICovCisKK2ludCByZWN2X3NpZGViYW5kKGNvbnN0IGNoYXIgKm1lLCBpbnQgaW5fc3RyZWFtLCBpbnQgb3V0KQoreworCXVuc2lnbmVkIHBmID0gc3RybGVuKFBSRUZJWCk7CisJdW5zaWduZWQgc2Y7CisJY2hhciBidWZbTEFSR0VfUEFDS0VUX01BWCArIDIqRklYX1NJWkVdOworCWNoYXIgKnN1ZmZpeCwgKnRlcm07CisJaW50IHNraXBfcGYgPSAwOworCisJbWVtY3B5KGJ1ZiwgUFJFRklYLCBwZik7CisJdGVybSA9IGdldGVudigiVEVSTSIpOworCWlmICh0ZXJtICYmIHN0cmNtcCh0ZXJtLCAiZHVtYiIpKQorCQlzdWZmaXggPSBBTlNJX1NVRkZJWDsKKwllbHNlCisJCXN1ZmZpeCA9IERVTUJfU1VGRklYOworCXNmID0gc3RybGVuKHN1ZmZpeCk7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgYmFuZCwgbGVuOworCQlsZW4gPSBwYWNrZXRfcmVhZF9saW5lKGluX3N0cmVhbSwgYnVmICsgcGYsIExBUkdFX1BBQ0tFVF9NQVgpOworCQlpZiAobGVuID09IDApCisJCQlicmVhazsKKwkJaWYgKGxlbiA8IDEpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHByb3RvY29sIGVycm9yOiBubyBiYW5kIGRlc2lnbmF0b3JcbiIsIG1lKTsKKwkJCXJldHVybiBTSURFQkFORF9QUk9UT0NPTF9FUlJPUjsKKwkJfQorCQliYW5kID0gYnVmW3BmXSAmIDB4ZmY7CisJCWxlbi0tOworCQlzd2l0Y2ggKGJhbmQpIHsKKwkJY2FzZSAzOgorCQkJYnVmW3BmXSA9ICcgJzsKKwkJCWJ1ZltwZisxK2xlbl0gPSAnXDAnOworCQkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgYnVmKTsKKwkJCXJldHVybiBTSURFQkFORF9SRU1PVEVfRVJST1I7CisJCWNhc2UgMjoKKwkJCWJ1ZltwZl0gPSAnICc7CisJCQlkbyB7CisJCQkJY2hhciAqYiA9IGJ1ZjsKKwkJCQlpbnQgYnJrID0gMDsKKworCQkJCS8qCisJCQkJICogSWYgdGhlIGxhc3QgYnVmZmVyIGRpZG4ndCBlbmQgd2l0aCBhIGxpbmUKKwkJCQkgKiBicmVhayB0aGVuIHdlIHNob3VsZCBub3QgcHJpbnQgYSBwcmVmaXgKKwkJCQkgKiB0aGlzIHRpbWUgYXJvdW5kLgorCQkJCSAqLworCQkJCWlmIChza2lwX3BmKSB7CisJCQkJCWIgKz0gcGYrMTsKKwkJCQl9IGVsc2UgeworCQkJCQlsZW4gKz0gcGYrMTsKKwkJCQkJYnJrICs9IHBmKzE7CisJCQkJfQorCisJCQkJLyogTG9vayBmb3IgYSBsaW5lIGJyZWFrLiAqLworCQkJCWZvciAoOzspIHsKKwkJCQkJYnJrKys7CisJCQkJCWlmIChicmsgPiBsZW4pIHsKKwkJCQkJCWJyayA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAoYlticmstMV0gPT0gJ1xuJyB8fAorCQkJCQkgICAgYlticmstMV0gPT0gJ1xyJykKKwkJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qCisJCQkJICogTGV0J3MgaW5zZXJ0IGEgc3VmZml4IHRvIGNsZWFyIHRoZSBlbmQKKwkJCQkgKiBvZiB0aGUgc2NyZWVuIGxpbmUgaWYgYSBsaW5lIGJyZWFrIHdhcworCQkJCSAqIGZvdW5kLiAgQWxzbywgaWYgd2UgZG9uJ3Qgc2tpcCB0aGUKKwkJCQkgKiBwcmVmaXgsIHRoZW4gYSBub24tZW1wdHkgc3RyaW5nIG11c3QgYmUKKwkJCQkgKiBwcmVzZW50IHRvby4KKwkJCQkgKi8KKwkJCQlpZiAoYnJrID4gKHNraXBfcGYgPyAwIDogKHBmKzEgKyAxKSkpIHsKKwkJCQkJY2hhciBzYXZlW0ZJWF9TSVpFXTsKKwkJCQkJbWVtY3B5KHNhdmUsIGIgKyBicmssIHNmKTsKKwkJCQkJYlticmsgKyBzZiAtIDFdID0gYlticmsgLSAxXTsKKwkJCQkJbWVtY3B5KGIgKyBicmsgLSAxLCBzdWZmaXgsIHNmKTsKKwkJCQkJZnByaW50ZihzdGRlcnIsICIlLipzIiwgYnJrICsgc2YsIGIpOworCQkJCQltZW1jcHkoYiArIGJyaywgc2F2ZSwgc2YpOworCQkJCQlsZW4gLT0gYnJrOworCQkJCX0gZWxzZSB7CisJCQkJCWludCBsID0gYnJrID8gYnJrIDogbGVuOworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiUuKnMiLCBsLCBiKTsKKwkJCQkJbGVuIC09IGw7CisJCQkJfQorCisJCQkJc2tpcF9wZiA9ICFicms7CisJCQkJbWVtbW92ZShidWYgKyBwZisxLCBiICsgYnJrLCBsZW4pOworCQkJfSB3aGlsZSAobGVuKTsKKwkJCWNvbnRpbnVlOworCQljYXNlIDE6CisJCQlzYWZlX3dyaXRlKG91dCwgYnVmICsgcGYrMSwgbGVuKTsKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsICIlczogcHJvdG9jb2wgZXJyb3I6IGJhZCBiYW5kICMlZFxuIiwKKwkJCQltZSwgYmFuZCk7CisJCQlyZXR1cm4gU0lERUJBTkRfUFJPVE9DT0xfRVJST1I7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBmZCBpcyBjb25uZWN0ZWQgdG8gdGhlIHJlbW90ZSBzaWRlOyBzZW5kIHRoZSBzaWRlYmFuZCBkYXRhCisgKiBvdmVyIG11bHRpcGxleGVkIHBhY2tldCBzdHJlYW0uCisgKi8KK3NzaXplX3Qgc2VuZF9zaWRlYmFuZChpbnQgZmQsIGludCBiYW5kLCBjb25zdCBjaGFyICpkYXRhLCBzc2l6ZV90IHN6LCBpbnQgcGFja2V0X21heCkKK3sKKwlzc2l6ZV90IHNzeiA9IHN6OworCWNvbnN0IGNoYXIgKnAgPSBkYXRhOworCisJd2hpbGUgKHN6KSB7CisJCXVuc2lnbmVkIG47CisJCWNoYXIgaGRyWzVdOworCisJCW4gPSBzejsKKwkJaWYgKHBhY2tldF9tYXggLSA1IDwgbikKKwkJCW4gPSBwYWNrZXRfbWF4IC0gNTsKKwkJaWYgKDAgPD0gYmFuZCkgeworCQkJc3ByaW50ZihoZHIsICIlMDR4IiwgbiArIDUpOworCQkJaGRyWzRdID0gYmFuZDsKKwkJCXNhZmVfd3JpdGUoZmQsIGhkciwgNSk7CisJCX0gZWxzZSB7CisJCQlzcHJpbnRmKGhkciwgIiUwNHgiLCBuICsgNCk7CisJCQlzYWZlX3dyaXRlKGZkLCBoZHIsIDQpOworCQl9CisJCXNhZmVfd3JpdGUoZmQsIHAsIG4pOworCQlwICs9IG47CisJCXN6IC09IG47CisJfQorCXJldHVybiBzc3o7Cit9CmRpZmYgLS1naXQgYS9zaWRlYmFuZC5oIGIvc2lkZWJhbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzJkYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvc2lkZWJhbmQuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIFNJREVCQU5EX0gKKyNkZWZpbmUgU0lERUJBTkRfSAorCisjZGVmaW5lIFNJREVCQU5EX1BST1RPQ09MX0VSUk9SIC0yCisjZGVmaW5lIFNJREVCQU5EX1JFTU9URV9FUlJPUiAtMQorCisjZGVmaW5lIERFRkFVTFRfUEFDS0VUX01BWCAxMDAwCisjZGVmaW5lIExBUkdFX1BBQ0tFVF9NQVggNjU1MjAKKworaW50IHJlY3Zfc2lkZWJhbmQoY29uc3QgY2hhciAqbWUsIGludCBpbl9zdHJlYW0sIGludCBvdXQpOworc3NpemVfdCBzZW5kX3NpZGViYW5kKGludCBmZCwgaW50IGJhbmQsIGNvbnN0IGNoYXIgKmRhdGEsIHNzaXplX3Qgc3osIGludCBwYWNrZXRfbWF4KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zaWdjaGFpbi5jIGIvc2lnY2hhaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTE4Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnY2hhaW4uYwpAQCAtMCwwICsxLDUyIEBACisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjZGVmaW5lIFNJR0NIQUlOX01BWF9TSUdOQUxTIDMyCisKK3N0cnVjdCBzaWdjaGFpbl9zaWduYWwgeworCXNpZ2NoYWluX2Z1biAqb2xkOworCWludCBuOworCWludCBhbGxvYzsKK307CitzdGF0aWMgc3RydWN0IHNpZ2NoYWluX3NpZ25hbCBzaWduYWxzW1NJR0NIQUlOX01BWF9TSUdOQUxTXTsKKworc3RhdGljIHZvaWQgY2hlY2tfc2lnbnVtKGludCBzaWcpCit7CisJaWYgKHNpZyA8IDEgfHwgc2lnID49IFNJR0NIQUlOX01BWF9TSUdOQUxTKQorCQlkaWUoIkJVRzogc2lnbmFsIG91dCBvZiByYW5nZTogJWQiLCBzaWcpOworfQorCitpbnQgc2lnY2hhaW5fcHVzaChpbnQgc2lnLCBzaWdjaGFpbl9mdW4gZikKK3sKKwlzdHJ1Y3Qgc2lnY2hhaW5fc2lnbmFsICpzID0gc2lnbmFscyArIHNpZzsKKwljaGVja19zaWdudW0oc2lnKTsKKworCUFMTE9DX0dST1cocy0+b2xkLCBzLT5uICsgMSwgcy0+YWxsb2MpOworCXMtPm9sZFtzLT5uXSA9IHNpZ25hbChzaWcsIGYpOworCWlmIChzLT5vbGRbcy0+bl0gPT0gU0lHX0VSUikKKwkJcmV0dXJuIC0xOworCXMtPm4rKzsKKwlyZXR1cm4gMDsKK30KKworaW50IHNpZ2NoYWluX3BvcChpbnQgc2lnKQoreworCXN0cnVjdCBzaWdjaGFpbl9zaWduYWwgKnMgPSBzaWduYWxzICsgc2lnOworCWNoZWNrX3NpZ251bShzaWcpOworCWlmIChzLT5uIDwgMSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2lnbmFsKHNpZywgcy0+b2xkW3MtPm4gLSAxXSkgPT0gU0lHX0VSUikKKwkJcmV0dXJuIC0xOworCXMtPm4tLTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzaWdjaGFpbl9wdXNoX2NvbW1vbihzaWdjaGFpbl9mdW4gZikKK3sKKwlzaWdjaGFpbl9wdXNoKFNJR0lOVCwgZik7CisJc2lnY2hhaW5fcHVzaChTSUdIVVAsIGYpOworCXNpZ2NoYWluX3B1c2goU0lHVEVSTSwgZik7CisJc2lnY2hhaW5fcHVzaChTSUdRVUlULCBmKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIGYpOworfQpkaWZmIC0tZ2l0IGEvc2lnY2hhaW4uaCBiL3NpZ2NoYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4MDgzYgotLS0gL2Rldi9udWxsCisrKyBiL3NpZ2NoYWluLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBTSUdDSEFJTl9ICisjZGVmaW5lIFNJR0NIQUlOX0gKKwordHlwZWRlZiB2b2lkICgqc2lnY2hhaW5fZnVuKShpbnQpOworCitpbnQgc2lnY2hhaW5fcHVzaChpbnQgc2lnLCBzaWdjaGFpbl9mdW4gZik7CitpbnQgc2lnY2hhaW5fcG9wKGludCBzaWcpOworCit2b2lkIHNpZ2NoYWluX3B1c2hfY29tbW9uKHNpZ2NoYWluX2Z1biBmKTsKKworI2VuZGlmIC8qIFNJR0NIQUlOX0ggKi8KZGlmZiAtLWdpdCBhL3N0cmJ1Zi5jIGIvc3RyYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxMGY3NgotLS0gL2Rldi9udWxsCisrKyBiL3N0cmJ1Zi5jCkBAIC0wLDAgKzEsNDkwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisKK2ludCBwcmVmaXhjbXAoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJZm9yICg7IDsgc3RyKyssIHByZWZpeCsrKQorCQlpZiAoISpwcmVmaXgpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAoKnN0ciAhPSAqcHJlZml4KQorCQkJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSpwcmVmaXggLSAodW5zaWduZWQgY2hhcikqc3RyOworfQorCitpbnQgc3VmZml4Y21wKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc3VmZml4KQoreworCWludCBsZW4gPSBzdHJsZW4oc3RyKSwgc3VmbGVuID0gc3RybGVuKHN1ZmZpeCk7CisJaWYgKGxlbiA8IHN1ZmxlbikKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJuIHN0cmNtcChzdHIgKyBsZW4gLSBzdWZsZW4sIHN1ZmZpeCk7Cit9CisKKy8qCisgKiBVc2VkIGFzIHRoZSBkZWZhdWx0IC0+YnVmIHZhbHVlLCBzbyB0aGF0IHBlb3BsZSBjYW4gYWx3YXlzIGFzc3VtZQorICogYnVmIGlzIG5vbiBOVUxMIGFuZCAtPmJ1ZiBpcyBOVUwgdGVybWluYXRlZCBldmVuIGZvciBhIGZyZXNobHkKKyAqIGluaXRpYWxpemVkIHN0cmJ1Zi4KKyAqLworY2hhciBzdHJidWZfc2xvcGJ1ZlsxXTsKKwordm9pZCBzdHJidWZfaW5pdChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IGhpbnQpCit7CisJc2ItPmFsbG9jID0gc2ItPmxlbiA9IDA7CisJc2ItPmJ1ZiA9IHN0cmJ1Zl9zbG9wYnVmOworCWlmIChoaW50KQorCQlzdHJidWZfZ3JvdyhzYiwgaGludCk7Cit9CisKK3ZvaWQgc3RyYnVmX3JlbGVhc2Uoc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaWYgKHNiLT5hbGxvYykgeworCQlmcmVlKHNiLT5idWYpOworCQlzdHJidWZfaW5pdChzYiwgMCk7CisJfQorfQorCitjaGFyICpzdHJidWZfZGV0YWNoKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgKnN6KQoreworCWNoYXIgKnJlcyA9IHNiLT5hbGxvYyA/IHNiLT5idWYgOiBOVUxMOworCWlmIChzeikKKwkJKnN6ID0gc2ItPmxlbjsKKwlzdHJidWZfaW5pdChzYiwgMCk7CisJcmV0dXJuIHJlczsKK30KKwordm9pZCBzdHJidWZfYXR0YWNoKHN0cnVjdCBzdHJidWYgKnNiLCB2b2lkICpidWYsIHNpemVfdCBsZW4sIHNpemVfdCBhbGxvYykKK3sKKwlzdHJidWZfcmVsZWFzZShzYik7CisJc2ItPmJ1ZiAgID0gYnVmOworCXNiLT5sZW4gICA9IGxlbjsKKwlzYi0+YWxsb2MgPSBhbGxvYzsKKwlzdHJidWZfZ3JvdyhzYiwgMCk7CisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7Cit9CisKK3ZvaWQgc3RyYnVmX2dyb3coc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBleHRyYSkKK3sKKwlpbnQgbmV3X2J1ZiA9ICFzYi0+YWxsb2M7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3MoZXh0cmEsIDEpIHx8CisJICAgIHVuc2lnbmVkX2FkZF9vdmVyZmxvd3Moc2ItPmxlbiwgZXh0cmEgKyAxKSkKKwkJZGllKCJ5b3Ugd2FudCB0byB1c2Ugd2F5IHRvbyBtdWNoIG1lbW9yeSIpOworCWlmIChuZXdfYnVmKQorCQlzYi0+YnVmID0gTlVMTDsKKwlBTExPQ19HUk9XKHNiLT5idWYsIHNiLT5sZW4gKyBleHRyYSArIDEsIHNiLT5hbGxvYyk7CisJaWYgKG5ld19idWYpCisJCXNiLT5idWZbMF0gPSAnXDAnOworfQorCit2b2lkIHN0cmJ1Zl90cmltKHN0cnVjdCBzdHJidWYgKnNiKQoreworCWNoYXIgKmIgPSBzYi0+YnVmOworCXdoaWxlIChzYi0+bGVuID4gMCAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKXNiLT5idWZbc2ItPmxlbiAtIDFdKSkKKwkJc2ItPmxlbi0tOworCXdoaWxlIChzYi0+bGVuID4gMCAmJiBpc3NwYWNlKCpiKSkgeworCQliKys7CisJCXNiLT5sZW4tLTsKKwl9CisJbWVtbW92ZShzYi0+YnVmLCBiLCBzYi0+bGVuKTsKKwlzYi0+YnVmW3NiLT5sZW5dID0gJ1wwJzsKK30KK3ZvaWQgc3RyYnVmX3J0cmltKHN0cnVjdCBzdHJidWYgKnNiKQoreworCXdoaWxlIChzYi0+bGVuID4gMCAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKXNiLT5idWZbc2ItPmxlbiAtIDFdKSkKKwkJc2ItPmxlbi0tOworCXNiLT5idWZbc2ItPmxlbl0gPSAnXDAnOworfQorCit2b2lkIHN0cmJ1Zl9sdHJpbShzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwljaGFyICpiID0gc2ItPmJ1ZjsKKwl3aGlsZSAoc2ItPmxlbiA+IDAgJiYgaXNzcGFjZSgqYikpIHsKKwkJYisrOworCQlzYi0+bGVuLS07CisJfQorCW1lbW1vdmUoc2ItPmJ1ZiwgYiwgc2ItPmxlbik7CisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7Cit9CisKK3N0cnVjdCBzdHJidWYgKipzdHJidWZfc3BsaXRfYnVmKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IHNsZW4sIGludCBkZWxpbSwgaW50IG1heCkKK3sKKwlpbnQgYWxsb2MgPSAyLCBwb3MgPSAwOworCWNvbnN0IGNoYXIgKm4sICpwOworCXN0cnVjdCBzdHJidWYgKipyZXQ7CisJc3RydWN0IHN0cmJ1ZiAqdDsKKworCXJldCA9IHhjYWxsb2MoYWxsb2MsIHNpemVvZihzdHJ1Y3Qgc3RyYnVmICopKTsKKwlwID0gbiA9IHN0cjsKKwl3aGlsZSAobiA8IHN0ciArIHNsZW4pIHsKKwkJaW50IGxlbjsKKwkJaWYgKG1heCA8PSAwIHx8IHBvcyArIDEgPCBtYXgpCisJCQluID0gbWVtY2hyKG4sIGRlbGltLCBzbGVuIC0gKG4gLSBzdHIpKTsKKwkJZWxzZQorCQkJbiA9IE5VTEw7CisJCWlmIChwb3MgKyAxID49IGFsbG9jKSB7CisJCQlhbGxvYyA9IGFsbG9jICogMjsKKwkJCXJldCA9IHhyZWFsbG9jKHJldCwgc2l6ZW9mKHN0cnVjdCBzdHJidWYgKikgKiBhbGxvYyk7CisJCX0KKwkJaWYgKCFuKQorCQkJbiA9IHN0ciArIHNsZW4gLSAxOworCQlsZW4gPSBuIC0gcCArIDE7CisJCXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJCXN0cmJ1Zl9pbml0KHQsIGxlbik7CisJCXN0cmJ1Zl9hZGQodCwgcCwgbGVuKTsKKwkJcmV0W3Bvc10gPSB0OworCQlyZXRbKytwb3NdID0gTlVMTDsKKwkJcCA9ICsrbjsKKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzdHJidWZfbGlzdF9mcmVlKHN0cnVjdCBzdHJidWYgKipzYnMpCit7CisJc3RydWN0IHN0cmJ1ZiAqKnMgPSBzYnM7CisKKwl3aGlsZSAoKnMpIHsKKwkJc3RyYnVmX3JlbGVhc2UoKnMpOworCQlmcmVlKCpzKyspOworCX0KKwlmcmVlKHNicyk7Cit9CisKK2ludCBzdHJidWZfY21wKGNvbnN0IHN0cnVjdCBzdHJidWYgKmEsIGNvbnN0IHN0cnVjdCBzdHJidWYgKmIpCit7CisJaW50IGxlbiA9IGEtPmxlbiA8IGItPmxlbiA/IGEtPmxlbjogYi0+bGVuOworCWludCBjbXAgPSBtZW1jbXAoYS0+YnVmLCBiLT5idWYsIGxlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlyZXR1cm4gYS0+bGVuIDwgYi0+bGVuID8gLTE6IGEtPmxlbiAhPSBiLT5sZW47Cit9CisKK3ZvaWQgc3RyYnVmX3NwbGljZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbiwKKwkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGxlbikKK3sKKwlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhwb3MsIGxlbikpCisJCWRpZSgieW91IHdhbnQgdG8gdXNlIHdheSB0b28gbXVjaCBtZW1vcnkiKTsKKwlpZiAocG9zID4gc2ItPmxlbikKKwkJZGllKCJgcG9zJyBpcyB0b28gZmFyIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpOworCWlmIChwb3MgKyBsZW4gPiBzYi0+bGVuKQorCQlkaWUoImBwb3MgKyBsZW4nIGlzIHRvbyBmYXIgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7CisKKwlpZiAoZGxlbiA+PSBsZW4pCisJCXN0cmJ1Zl9ncm93KHNiLCBkbGVuIC0gbGVuKTsKKwltZW1tb3ZlKHNiLT5idWYgKyBwb3MgKyBkbGVuLAorCQkJc2ItPmJ1ZiArIHBvcyArIGxlbiwKKwkJCXNiLT5sZW4gLSBwb3MgLSBsZW4pOworCW1lbWNweShzYi0+YnVmICsgcG9zLCBkYXRhLCBkbGVuKTsKKwlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgZGxlbiAtIGxlbik7Cit9CisKK3ZvaWQgc3RyYnVmX2luc2VydChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJidWZfc3BsaWNlKHNiLCBwb3MsIDAsIGRhdGEsIGxlbik7Cit9CisKK3ZvaWQgc3RyYnVmX3JlbW92ZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbikKK3sKKwlzdHJidWZfc3BsaWNlKHNiLCBwb3MsIGxlbiwgTlVMTCwgMCk7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJidWZfZ3JvdyhzYiwgbGVuKTsKKwltZW1jcHkoc2ItPmJ1ZiArIHNiLT5sZW4sIGRhdGEsIGxlbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIGxlbik7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZGR1cChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbikKK3sKKwlzdHJidWZfZ3JvdyhzYiwgbGVuKTsKKwltZW1jcHkoc2ItPmJ1ZiArIHNiLT5sZW4sIHNiLT5idWYgKyBwb3MsIGxlbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIGxlbik7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKHNiLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHN0cmJ1Zl92YWRkZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWludCBsZW47CisJdmFfbGlzdCBjcDsKKworCWlmICghc3RyYnVmX2F2YWlsKHNiKSkKKwkJc3RyYnVmX2dyb3coc2IsIDY0KTsKKwl2YV9jb3B5KGNwLCBhcCk7CisJbGVuID0gdnNucHJpbnRmKHNiLT5idWYgKyBzYi0+bGVuLCBzYi0+YWxsb2MgLSBzYi0+bGVuLCBmbXQsIGNwKTsKKwl2YV9lbmQoY3ApOworCWlmIChsZW4gPCAwKQorCQlkaWUoIkJVRzogeW91ciB2c25wcmludGYgaXMgYnJva2VuIChyZXR1cm5lZCAlZCkiLCBsZW4pOworCWlmIChsZW4gPiBzdHJidWZfYXZhaWwoc2IpKSB7CisJCXN0cmJ1Zl9ncm93KHNiLCBsZW4pOworCQlsZW4gPSB2c25wcmludGYoc2ItPmJ1ZiArIHNiLT5sZW4sIHNiLT5hbGxvYyAtIHNiLT5sZW4sIGZtdCwgYXApOworCQlpZiAobGVuID4gc3RyYnVmX2F2YWlsKHNiKSkKKwkJCWRpZSgiQlVHOiB5b3VyIHZzbnByaW50ZiBpcyBicm9rZW4gKGluc2F0aWFibGUpIik7CisJfQorCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gKyBsZW4pOworfQorCit2b2lkIHN0cmJ1Zl9leHBhbmQoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZvcm1hdCwgZXhwYW5kX2ZuX3QgZm4sCisJCSAgIHZvaWQgKmNvbnRleHQpCit7CisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpwZXJjZW50OworCQlzaXplX3QgY29uc3VtZWQ7CisKKwkJcGVyY2VudCA9IHN0cmNocm51bChmb3JtYXQsICclJyk7CisJCXN0cmJ1Zl9hZGQoc2IsIGZvcm1hdCwgcGVyY2VudCAtIGZvcm1hdCk7CisJCWlmICghKnBlcmNlbnQpCisJCQlicmVhazsKKwkJZm9ybWF0ID0gcGVyY2VudCArIDE7CisKKwkJaWYgKCpmb3JtYXQgPT0gJyUnKSB7CisJCQlzdHJidWZfYWRkY2goc2IsICclJyk7CisJCQlmb3JtYXQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29uc3VtZWQgPSBmbihzYiwgZm9ybWF0LCBjb250ZXh0KTsKKwkJaWYgKGNvbnN1bWVkKQorCQkJZm9ybWF0ICs9IGNvbnN1bWVkOworCQllbHNlCisJCQlzdHJidWZfYWRkY2goc2IsICclJyk7CisJfQorfQorCitzaXplX3Qgc3RyYnVmX2V4cGFuZF9kaWN0X2NiKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwbGFjZWhvbGRlciwKKwkJdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmX2V4cGFuZF9kaWN0X2VudHJ5ICplID0gY29udGV4dDsKKwlzaXplX3QgbGVuOworCisJZm9yICg7IGUtPnBsYWNlaG9sZGVyICYmIChsZW4gPSBzdHJsZW4oZS0+cGxhY2Vob2xkZXIpKTsgZSsrKSB7CisJCWlmICghc3RybmNtcChwbGFjZWhvbGRlciwgZS0+cGxhY2Vob2xkZXIsIGxlbikpIHsKKwkJCWlmIChlLT52YWx1ZSkKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCBlLT52YWx1ZSk7CisJCQlyZXR1cm4gbGVuOworCQl9CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHN0cmJ1Zl9hZGRidWZfcGVyY2VudHF1b3RlKHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc3JjKQoreworCWludCBpLCBsZW4gPSBzcmMtPmxlbjsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoc3JjLT5idWZbaV0gPT0gJyUnKQorCQkJc3RyYnVmX2FkZGNoKGRzdCwgJyUnKTsKKwkJc3RyYnVmX2FkZGNoKGRzdCwgc3JjLT5idWZbaV0pOworCX0KK30KKworc2l6ZV90IHN0cmJ1Zl9mcmVhZChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHNpemUsIEZJTEUgKmYpCit7CisJc2l6ZV90IHJlczsKKwlzaXplX3Qgb2xkYWxsb2MgPSBzYi0+YWxsb2M7CisKKwlzdHJidWZfZ3JvdyhzYiwgc2l6ZSk7CisJcmVzID0gZnJlYWQoc2ItPmJ1ZiArIHNiLT5sZW4sIDEsIHNpemUsIGYpOworCWlmIChyZXMgPiAwKQorCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgcmVzKTsKKwllbHNlIGlmIChvbGRhbGxvYyA9PSAwKQorCQlzdHJidWZfcmVsZWFzZShzYik7CisJcmV0dXJuIHJlczsKK30KKworc3NpemVfdCBzdHJidWZfcmVhZChzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IGZkLCBzaXplX3QgaGludCkKK3sKKwlzaXplX3Qgb2xkbGVuID0gc2ItPmxlbjsKKwlzaXplX3Qgb2xkYWxsb2MgPSBzYi0+YWxsb2M7CisKKwlzdHJidWZfZ3JvdyhzYiwgaGludCA/IGhpbnQgOiA4MTkyKTsKKwlmb3IgKDs7KSB7CisJCXNzaXplX3QgY250OworCisJCWNudCA9IHhyZWFkKGZkLCBzYi0+YnVmICsgc2ItPmxlbiwgc2ItPmFsbG9jIC0gc2ItPmxlbiAtIDEpOworCQlpZiAoY250IDwgMCkgeworCQkJaWYgKG9sZGFsbG9jID09IDApCisJCQkJc3RyYnVmX3JlbGVhc2Uoc2IpOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9zZXRsZW4oc2IsIG9sZGxlbik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKCFjbnQpCisJCQlicmVhazsKKwkJc2ItPmxlbiArPSBjbnQ7CisJCXN0cmJ1Zl9ncm93KHNiLCA4MTkyKTsKKwl9CisKKwlzYi0+YnVmW3NiLT5sZW5dID0gJ1wwJzsKKwlyZXR1cm4gc2ItPmxlbiAtIG9sZGxlbjsKK30KKworI2RlZmluZSBTVFJCVUZfTUFYTElOSyAoMipQQVRIX01BWCkKKworaW50IHN0cmJ1Zl9yZWFkbGluayhzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpCit7CisJc2l6ZV90IG9sZGFsbG9jID0gc2ItPmFsbG9jOworCisJaWYgKGhpbnQgPCAzMikKKwkJaGludCA9IDMyOworCisJd2hpbGUgKGhpbnQgPCBTVFJCVUZfTUFYTElOSykgeworCQlpbnQgbGVuOworCisJCXN0cmJ1Zl9ncm93KHNiLCBoaW50KTsKKwkJbGVuID0gcmVhZGxpbmsocGF0aCwgc2ItPmJ1ZiwgaGludCk7CisJCWlmIChsZW4gPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRVJBTkdFKQorCQkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGxlbiA8IGhpbnQpIHsKKwkJCXN0cmJ1Zl9zZXRsZW4oc2IsIGxlbik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIC4uIHRoZSBidWZmZXIgd2FzIHRvbyBzbWFsbCAtIHRyeSBhZ2FpbiAqLworCQloaW50ICo9IDI7CisJfQorCWlmIChvbGRhbGxvYyA9PSAwKQorCQlzdHJidWZfcmVsZWFzZShzYik7CisJcmV0dXJuIC0xOworfQorCitpbnQgc3RyYnVmX2dldHdob2xlbGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZnAsIGludCB0ZXJtKQoreworCWludCBjaDsKKworCWlmIChmZW9mKGZwKSkKKwkJcmV0dXJuIEVPRjsKKworCXN0cmJ1Zl9yZXNldChzYik7CisJd2hpbGUgKChjaCA9IGZnZXRjKGZwKSkgIT0gRU9GKSB7CisJCXN0cmJ1Zl9ncm93KHNiLCAxKTsKKwkJc2ItPmJ1ZltzYi0+bGVuKytdID0gY2g7CisJCWlmIChjaCA9PSB0ZXJtKQorCQkJYnJlYWs7CisJfQorCWlmIChjaCA9PSBFT0YgJiYgc2ItPmxlbiA9PSAwKQorCQlyZXR1cm4gRU9GOworCisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzdHJidWZfZ2V0bGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZnAsIGludCB0ZXJtKQoreworCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lKHNiLCBmcCwgdGVybSkpCisJCXJldHVybiBFT0Y7CisJaWYgKHNiLT5idWZbc2ItPmxlbi0xXSA9PSB0ZXJtKQorCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuLTEpOworCXJldHVybiAwOworfQorCitpbnQgc3RyYnVmX2dldHdob2xlbGluZV9mZChzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IGZkLCBpbnQgdGVybSkKK3sKKwlzdHJidWZfcmVzZXQoc2IpOworCisJd2hpbGUgKDEpIHsKKwkJY2hhciBjaDsKKwkJc3NpemVfdCBsZW4gPSB4cmVhZChmZCwgJmNoLCAxKTsKKwkJaWYgKGxlbiA8PSAwKQorCQkJcmV0dXJuIEVPRjsKKwkJc3RyYnVmX2FkZGNoKHNiLCBjaCk7CisJCWlmIChjaCA9PSB0ZXJtKQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitpbnQgc3RyYnVmX3JlYWRfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpCit7CisJaW50IGZkLCBsZW47CisKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKwlsZW4gPSBzdHJidWZfcmVhZChzYiwgZmQsIGhpbnQpOworCWNsb3NlKGZkKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGxlbjsKK30KKwordm9pZCBzdHJidWZfYWRkX2xpbmVzKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXdoaWxlIChzaXplKSB7CisJCWNvbnN0IGNoYXIgKm5leHQgPSBtZW1jaHIoYnVmLCAnXG4nLCBzaXplKTsKKwkJbmV4dCA9IG5leHQgPyAobmV4dCArIDEpIDogKGJ1ZiArIHNpemUpOworCQlzdHJidWZfYWRkc3RyKG91dCwgcHJlZml4KTsKKwkJc3RyYnVmX2FkZChvdXQsIGJ1ZiwgbmV4dCAtIGJ1Zik7CisJCXNpemUgLT0gbmV4dCAtIGJ1ZjsKKwkJYnVmID0gbmV4dDsKKwl9CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUob3V0KTsKK30KKworc3RhdGljIGludCBpc19yZmMzOTg2X3Jlc2VydmVkKGNoYXIgY2gpCit7CisJc3dpdGNoIChjaCkgeworCQljYXNlICchJzogY2FzZSAnKic6IGNhc2UgJ1wnJzogY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICc7JzoKKwkJY2FzZSAnOic6IGNhc2UgJ0AnOiBjYXNlICcmJzogY2FzZSAnPSc6IGNhc2UgJysnOiBjYXNlICckJzoKKwkJY2FzZSAnLCc6IGNhc2UgJy8nOiBjYXNlICc/JzogY2FzZSAnIyc6IGNhc2UgJ1snOiBjYXNlICddJzoKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19yZmMzOTg2X3VucmVzZXJ2ZWQoY2hhciBjaCkKK3sKKwlyZXR1cm4gaXNhbG51bShjaCkgfHwKKwkJY2ggPT0gJy0nIHx8IGNoID09ICdfJyB8fCBjaCA9PSAnLicgfHwgY2ggPT0gJ34nOworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfYWRkX3VybGVuY29kZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbiwKKwkJCQkgaW50IHJlc2VydmVkKQoreworCXN0cmJ1Zl9ncm93KHNiLCBsZW4pOworCXdoaWxlIChsZW4tLSkgeworCQljaGFyIGNoID0gKnMrKzsKKwkJaWYgKGlzX3JmYzM5ODZfdW5yZXNlcnZlZChjaCkgfHwKKwkJICAgICghcmVzZXJ2ZWQgJiYgaXNfcmZjMzk4Nl9yZXNlcnZlZChjaCkpKQorCQkJc3RyYnVmX2FkZGNoKHNiLCBjaCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiJSUlMDJ4IiwgY2gpOworCX0KK30KKwordm9pZCBzdHJidWZfYWRkc3RyX3VybGVuY29kZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcywKKwkJCSAgICAgaW50IHJlc2VydmVkKQoreworCXN0cmJ1Zl9hZGRfdXJsZW5jb2RlKHNiLCBzLCBzdHJsZW4ocyksIHJlc2VydmVkKTsKK30KKworaW50IHByaW50Zl9sbihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdnByaW50ZihmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCWlmIChyZXQgPCAwIHx8IHB1dGNoYXIoJ1xuJykgPT0gRU9GKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldCArIDE7Cit9CisKK2ludCBmcHJpbnRmX2xuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZwcmludGYoZnAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKHJldCA8IDAgfHwgcHV0YygnXG4nLCBmcCkgPT0gRU9GKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldCArIDE7Cit9CmRpZmYgLS1naXQgYS9zdHJidWYuaCBiL3N0cmJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOTQxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zdHJidWYuaApAQCAtMCwwICsxLDEzNSBAQAorI2lmbmRlZiBTVFJCVUZfSAorI2RlZmluZSBTVFJCVUZfSAorCisvKiBTZWUgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN0cmJ1Zi50eHQgKi8KKworZXh0ZXJuIGNoYXIgc3RyYnVmX3Nsb3BidWZbXTsKK3N0cnVjdCBzdHJidWYgeworCXNpemVfdCBhbGxvYzsKKwlzaXplX3QgbGVuOworCWNoYXIgKmJ1ZjsKK307CisKKyNkZWZpbmUgU1RSQlVGX0lOSVQgIHsgMCwgMCwgc3RyYnVmX3Nsb3BidWYgfQorCisvKi0tLS0tIHN0cmJ1ZiBsaWZlIGN5Y2xlIC0tLS0tKi8KK2V4dGVybiB2b2lkIHN0cmJ1Zl9pbml0KHN0cnVjdCBzdHJidWYgKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkIHN0cmJ1Zl9yZWxlYXNlKHN0cnVjdCBzdHJidWYgKik7CitleHRlcm4gY2hhciAqc3RyYnVmX2RldGFjaChzdHJ1Y3Qgc3RyYnVmICosIHNpemVfdCAqKTsKK2V4dGVybiB2b2lkIHN0cmJ1Zl9hdHRhY2goc3RydWN0IHN0cmJ1ZiAqLCB2b2lkICosIHNpemVfdCwgc2l6ZV90KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfc3dhcChzdHJ1Y3Qgc3RyYnVmICphLCBzdHJ1Y3Qgc3RyYnVmICpiKSB7CisJc3RydWN0IHN0cmJ1ZiB0bXAgPSAqYTsKKwkqYSA9ICpiOworCSpiID0gdG1wOworfQorCisvKi0tLS0tIHN0cmJ1ZiBzaXplIHJlbGF0ZWQgLS0tLS0qLworc3RhdGljIGlubGluZSBzaXplX3Qgc3RyYnVmX2F2YWlsKGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiKSB7CisJcmV0dXJuIHNiLT5hbGxvYyA/IHNiLT5hbGxvYyAtIHNiLT5sZW4gLSAxIDogMDsKK30KKworZXh0ZXJuIHZvaWQgc3RyYnVmX2dyb3coc3RydWN0IHN0cmJ1ZiAqLCBzaXplX3QpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc3RyYnVmX3NldGxlbihzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IGxlbikgeworCWlmIChsZW4gPiAoc2ItPmFsbG9jID8gc2ItPmFsbG9jIC0gMSA6IDApKQorCQlkaWUoIkJVRzogc3RyYnVmX3NldGxlbigpIGJleW9uZCBidWZmZXIiKTsKKwlzYi0+bGVuID0gbGVuOworCXNiLT5idWZbbGVuXSA9ICdcMCc7Cit9CisjZGVmaW5lIHN0cmJ1Zl9yZXNldChzYikgIHN0cmJ1Zl9zZXRsZW4oc2IsIDApCisKKy8qLS0tLS0gY29udGVudCByZWxhdGVkIC0tLS0tKi8KK2V4dGVybiB2b2lkIHN0cmJ1Zl90cmltKHN0cnVjdCBzdHJidWYgKik7CitleHRlcm4gdm9pZCBzdHJidWZfcnRyaW0oc3RydWN0IHN0cmJ1ZiAqKTsKK2V4dGVybiB2b2lkIHN0cmJ1Zl9sdHJpbShzdHJ1Y3Qgc3RyYnVmICopOworZXh0ZXJuIGludCBzdHJidWZfY21wKGNvbnN0IHN0cnVjdCBzdHJidWYgKiwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqKTsKKworZXh0ZXJuIHN0cnVjdCBzdHJidWYgKipzdHJidWZfc3BsaXRfYnVmKGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorCQkJCQlpbnQgZGVsaW0sIGludCBtYXgpOworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0X3N0cihjb25zdCBjaGFyICpzdHIsCisJCQkJCSAgICAgICBpbnQgZGVsaW0sIGludCBtYXgpCit7CisJcmV0dXJuIHN0cmJ1Zl9zcGxpdF9idWYoc3RyLCBzdHJsZW4oc3RyKSwgZGVsaW0sIG1heCk7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBzdHJidWYgKipzdHJidWZfc3BsaXRfbWF4KGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCQkJaW50IGRlbGltLCBpbnQgbWF4KQoreworCXJldHVybiBzdHJidWZfc3BsaXRfYnVmKHNiLT5idWYsIHNiLT5sZW4sIGRlbGltLCBtYXgpOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0KGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZGVsaW0pCit7CisJcmV0dXJuIHN0cmJ1Zl9zcGxpdF9tYXgoc2IsIGRlbGltLCAwKTsKK30KK2V4dGVybiB2b2lkIHN0cmJ1Zl9saXN0X2ZyZWUoc3RydWN0IHN0cmJ1ZiAqKik7CisKKy8qLS0tLS0gYWRkIGRhdGEgaW4geW91ciBidWZmZXIgLS0tLS0qLworc3RhdGljIGlubGluZSB2b2lkIHN0cmJ1Zl9hZGRjaChzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IGMpIHsKKwlzdHJidWZfZ3JvdyhzYiwgMSk7CisJc2ItPmJ1ZltzYi0+bGVuKytdID0gYzsKKwlzYi0+YnVmW3NiLT5sZW5dID0gJ1wwJzsKK30KKworZXh0ZXJuIHZvaWQgc3RyYnVmX2luc2VydChzdHJ1Y3Qgc3RyYnVmICosIHNpemVfdCBwb3MsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkIHN0cmJ1Zl9yZW1vdmUoc3RydWN0IHN0cmJ1ZiAqLCBzaXplX3QgcG9zLCBzaXplX3QgbGVuKTsKKworLyogc3BsaWNlIHBvcy4ucG9zK2xlbiB3aXRoIGdpdmVuIGRhdGEgKi8KK2V4dGVybiB2b2lkIHN0cmJ1Zl9zcGxpY2Uoc3RydWN0IHN0cmJ1ZiAqLCBzaXplX3QgcG9zLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICosIHNpemVfdCk7CisKK2V4dGVybiB2b2lkIHN0cmJ1Zl9hZGQoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CitzdGF0aWMgaW5saW5lIHZvaWQgc3RyYnVmX2FkZHN0cihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcykgeworCXN0cmJ1Zl9hZGQoc2IsIHMsIHN0cmxlbihzKSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3RyYnVmX2FkZGJ1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IyKSB7CisJc3RyYnVmX2dyb3coc2IsIHNiMi0+bGVuKTsKKwlzdHJidWZfYWRkKHNiLCBzYjItPmJ1Ziwgc2IyLT5sZW4pOworfQorZXh0ZXJuIHZvaWQgc3RyYnVmX2FkZGR1cChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbik7CisKK3R5cGVkZWYgc2l6ZV90ICgqZXhwYW5kX2ZuX3QpIChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsIHZvaWQgKmNvbnRleHQpOworZXh0ZXJuIHZvaWQgc3RyYnVmX2V4cGFuZChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm9ybWF0LCBleHBhbmRfZm5fdCBmbiwgdm9pZCAqY29udGV4dCk7CitzdHJ1Y3Qgc3RyYnVmX2V4cGFuZF9kaWN0X2VudHJ5IHsKKwljb25zdCBjaGFyICpwbGFjZWhvbGRlcjsKKwljb25zdCBjaGFyICp2YWx1ZTsKK307CitleHRlcm4gc2l6ZV90IHN0cmJ1Zl9leHBhbmRfZGljdF9jYihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsIHZvaWQgKmNvbnRleHQpOworZXh0ZXJuIHZvaWQgc3RyYnVmX2FkZGJ1Zl9wZXJjZW50cXVvdGUoc3RydWN0IHN0cmJ1ZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzcmMpOworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwyLDMpKSkKK2V4dGVybiB2b2lkIHN0cmJ1Zl9hZGRmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwyLDApKSkKK2V4dGVybiB2b2lkIHN0cmJ1Zl92YWRkZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKKworZXh0ZXJuIHZvaWQgc3RyYnVmX2FkZF9saW5lcyhzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKKworc3RhdGljIGlubGluZSB2b2lkIHN0cmJ1Zl9jb21wbGV0ZV9saW5lKHN0cnVjdCBzdHJidWYgKnNiKQoreworCWlmIChzYi0+bGVuICYmIHNiLT5idWZbc2ItPmxlbiAtIDFdICE9ICdcbicpCisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7Cit9CisKK2V4dGVybiBzaXplX3Qgc3RyYnVmX2ZyZWFkKHN0cnVjdCBzdHJidWYgKiwgc2l6ZV90LCBGSUxFICopOworLyogWFhYOiBpZiByZWFkIGZhaWxzLCBhbnkgcGFydGlhbCByZWFkIGlzIHVuZG9uZSAqLworZXh0ZXJuIHNzaXplX3Qgc3RyYnVmX3JlYWQoc3RydWN0IHN0cmJ1ZiAqLCBpbnQgZmQsIHNpemVfdCBoaW50KTsKK2V4dGVybiBpbnQgc3RyYnVmX3JlYWRfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpOworZXh0ZXJuIGludCBzdHJidWZfcmVhZGxpbmsoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCBoaW50KTsKKworZXh0ZXJuIGludCBzdHJidWZfZ2V0d2hvbGVsaW5lKHN0cnVjdCBzdHJidWYgKiwgRklMRSAqLCBpbnQpOworZXh0ZXJuIGludCBzdHJidWZfZ2V0bGluZShzdHJ1Y3Qgc3RyYnVmICosIEZJTEUgKiwgaW50KTsKK2V4dGVybiBpbnQgc3RyYnVmX2dldHdob2xlbGluZV9mZChzdHJ1Y3Qgc3RyYnVmICosIGludCwgaW50KTsKKworZXh0ZXJuIHZvaWQgc3RyaXBzcGFjZShzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBza2lwX2NvbW1lbnRzKTsKK2V4dGVybiBpbnQgbGF1bmNoX2VkaXRvcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpOworCitleHRlcm4gaW50IHN0cmJ1Zl9icmFuY2huYW1lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRlcm4gdm9pZCBzdHJidWZfYWRkc3RyX3VybGVuY29kZShzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgICAgaW50IHJlc2VydmVkKTsKKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMSwyKSkpCitleHRlcm4gaW50IHByaW50Zl9sbihjb25zdCBjaGFyICpmbXQsIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwyLDMpKSkKK2V4dGVybiBpbnQgZnByaW50Zl9sbihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjZW5kaWYgLyogU1RSQlVGX0ggKi8KZGlmZiAtLWdpdCBhL3N0cmVhbWluZy5jIGIvc3RyZWFtaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ5NzhlNQotLS0gL2Rldi9udWxsCisrKyBiL3N0cmVhbWluZy5jCkBAIC0wLDAgKzEsNTQ2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKworZW51bSBpbnB1dF9zb3VyY2UgeworCXN0cmVhbV9lcnJvciA9IC0xLAorCWluY29yZSA9IDAsCisJbG9vc2UgPSAxLAorCXBhY2tfbm9uX2RlbHRhID0gMgorfTsKKwordHlwZWRlZiBpbnQgKCpvcGVuX2lzdHJlYW1fZm4pKHN0cnVjdCBnaXRfaXN0cmVhbSAqLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaW5mbyAqLAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKwkJCSAgICAgICBlbnVtIG9iamVjdF90eXBlICopOwordHlwZWRlZiBpbnQgKCpjbG9zZV9pc3RyZWFtX2ZuKShzdHJ1Y3QgZ2l0X2lzdHJlYW0gKik7Cit0eXBlZGVmIHNzaXplX3QgKCpyZWFkX2lzdHJlYW1fZm4pKHN0cnVjdCBnaXRfaXN0cmVhbSAqLCBjaGFyICosIHNpemVfdCk7CisKK3N0cnVjdCBzdHJlYW1fdnRibCB7CisJY2xvc2VfaXN0cmVhbV9mbiBjbG9zZTsKKwlyZWFkX2lzdHJlYW1fZm4gcmVhZDsKK307CisKKyNkZWZpbmUgb3Blbl9tZXRob2RfZGVjbChuYW1lKSBcCisJaW50IG9wZW5faXN0cmVhbV8gIyNuYW1lIFwKKwkoc3RydWN0IGdpdF9pc3RyZWFtICpzdCwgc3RydWN0IG9iamVjdF9pbmZvICpvaSwgXAorCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBcCisJIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUpCisKKyNkZWZpbmUgY2xvc2VfbWV0aG9kX2RlY2wobmFtZSkgXAorCWludCBjbG9zZV9pc3RyZWFtXyAjI25hbWUgXAorCShzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0KQorCisjZGVmaW5lIHJlYWRfbWV0aG9kX2RlY2wobmFtZSkgXAorCXNzaXplX3QgcmVhZF9pc3RyZWFtXyAjI25hbWUgXAorCShzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0LCBjaGFyICpidWYsIHNpemVfdCBzeikKKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIG9wZW5fbWV0aG9kX2RlY2woaW5jb3JlKTsKK3N0YXRpYyBvcGVuX21ldGhvZF9kZWNsKGxvb3NlKTsKK3N0YXRpYyBvcGVuX21ldGhvZF9kZWNsKHBhY2tfbm9uX2RlbHRhKTsKK3N0YXRpYyBzdHJ1Y3QgZ2l0X2lzdHJlYW0gKmF0dGFjaF9zdHJlYW1fZmlsdGVyKHN0cnVjdCBnaXRfaXN0cmVhbSAqc3QsCisJCQkJCQlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyKTsKKworCitzdGF0aWMgb3Blbl9pc3RyZWFtX2ZuIG9wZW5faXN0cmVhbV90YmxbXSA9IHsKKwlvcGVuX2lzdHJlYW1faW5jb3JlLAorCW9wZW5faXN0cmVhbV9sb29zZSwKKwlvcGVuX2lzdHJlYW1fcGFja19ub25fZGVsdGEsCit9OworCisjZGVmaW5lIEZJTFRFUl9CVUZGRVIgKDEwMjQqMTYpCisKK3N0cnVjdCBmaWx0ZXJlZF9pc3RyZWFtIHsKKwlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnVwc3RyZWFtOworCXN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXI7CisJY2hhciBpYnVmW0ZJTFRFUl9CVUZGRVJdOworCWNoYXIgb2J1ZltGSUxURVJfQlVGRkVSXTsKKwlpbnQgaV9lbmQsIGlfcHRyOworCWludCBvX2VuZCwgb19wdHI7CisJaW50IGlucHV0X2ZpbmlzaGVkOworfTsKKworc3RydWN0IGdpdF9pc3RyZWFtIHsKKwljb25zdCBzdHJ1Y3Qgc3RyZWFtX3Z0YmwgKnZ0Ymw7CisJdW5zaWduZWQgbG9uZyBzaXplOyAvKiBpbmZsYXRlZCBzaXplIG9mIGZ1bGwgb2JqZWN0ICovCisJZ2l0X3pzdHJlYW0gejsKKwllbnVtIHsgel91bnVzZWQsIHpfdXNlZCwgel9kb25lLCB6X2Vycm9yIH0gel9zdGF0ZTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWNoYXIgKmJ1ZjsgLyogZnJvbSByZWFkX29iamVjdCgpICovCisJCQl1bnNpZ25lZCBsb25nIHJlYWRfcHRyOworCQl9IGluY29yZTsKKworCQlzdHJ1Y3QgeworCQkJdm9pZCAqbWFwcGVkOworCQkJdW5zaWduZWQgbG9uZyBtYXBzaXplOworCQkJY2hhciBoZHJbMzJdOworCQkJaW50IGhkcl9hdmFpbDsKKwkJCWludCBoZHJfdXNlZDsKKwkJfSBsb29zZTsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IHBhY2tlZF9naXQgKnBhY2s7CisJCQlvZmZfdCBwb3M7CisJCX0gaW5fcGFjazsKKworCQlzdHJ1Y3QgZmlsdGVyZWRfaXN0cmVhbSBmaWx0ZXJlZDsKKwl9IHU7Cit9OworCitpbnQgY2xvc2VfaXN0cmVhbShzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0KQoreworCWludCByID0gc3QtPnZ0YmwtPmNsb3NlKHN0KTsKKwlmcmVlKHN0KTsKKwlyZXR1cm4gcjsKK30KKworc3NpemVfdCByZWFkX2lzdHJlYW0oc3RydWN0IGdpdF9pc3RyZWFtICpzdCwgdm9pZCAqYnVmLCBzaXplX3Qgc3opCit7CisJcmV0dXJuIHN0LT52dGJsLT5yZWFkKHN0LCBidWYsIHN6KTsKK30KKworc3RhdGljIGVudW0gaW5wdXRfc291cmNlIGlzdHJlYW1fc291cmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJCWVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkJCXN0cnVjdCBvYmplY3RfaW5mbyAqb2kpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBzdGF0dXM7CisKKwlvaS0+c2l6ZXAgPSAmc2l6ZTsKKwlzdGF0dXMgPSBzaGExX29iamVjdF9pbmZvX2V4dGVuZGVkKHNoYTEsIG9pKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0cmVhbV9lcnJvcjsKKwkqdHlwZSA9IHN0YXR1czsKKworCXN3aXRjaCAob2ktPndoZW5jZSkgeworCWNhc2UgT0lfTE9PU0U6CisJCXJldHVybiBsb29zZTsKKwljYXNlIE9JX1BBQ0tFRDoKKwkJaWYgKCFvaS0+dS5wYWNrZWQuaXNfZGVsdGEgJiYgYmlnX2ZpbGVfdGhyZXNob2xkIDwgc2l6ZSkKKwkJCXJldHVybiBwYWNrX25vbl9kZWx0YTsKKwkJLyogZmFsbHRocnUgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gaW5jb3JlOworCX0KK30KKworc3RydWN0IGdpdF9pc3RyZWFtICpvcGVuX2lzdHJlYW0oY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkgc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0OworCXN0cnVjdCBvYmplY3RfaW5mbyBvaTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpyZWFsID0gbG9va3VwX3JlcGxhY2Vfb2JqZWN0KHNoYTEpOworCWVudW0gaW5wdXRfc291cmNlIHNyYyA9IGlzdHJlYW1fc291cmNlKHJlYWwsIHR5cGUsICZvaSk7CisKKwlpZiAoc3JjIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdCA9IHhtYWxsb2Moc2l6ZW9mKCpzdCkpOworCWlmIChvcGVuX2lzdHJlYW1fdGJsW3NyY10oc3QsICZvaSwgcmVhbCwgdHlwZSkpIHsKKwkJaWYgKG9wZW5faXN0cmVhbV9pbmNvcmUoc3QsICZvaSwgcmVhbCwgdHlwZSkpIHsKKwkJCWZyZWUoc3QpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJaWYgKHN0ICYmIGZpbHRlcikgeworCQkvKiBBZGQgIiYmICFpc19udWxsX3N0cmVhbV9maWx0ZXIoZmlsdGVyKSIgZm9yIHBlcmZvcm1hbmNlICovCisJCXN0cnVjdCBnaXRfaXN0cmVhbSAqbnN0ID0gYXR0YWNoX3N0cmVhbV9maWx0ZXIoc3QsIGZpbHRlcik7CisJCWlmICghbnN0KQorCQkJY2xvc2VfaXN0cmVhbShzdCk7CisJCXN0ID0gbnN0OworCX0KKworCSpzaXplID0gc3QtPnNpemU7CisJcmV0dXJuIHN0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvbW1vbiBoZWxwZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBjbG9zZV9kZWZsYXRlZF9zdHJlYW0oc3RydWN0IGdpdF9pc3RyZWFtICpzdCkKK3sKKwlpZiAoc3QtPnpfc3RhdGUgPT0gel91c2VkKQorCQlnaXRfaW5mbGF0ZV9lbmQoJnN0LT56KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWx0ZXJlZCBzdHJlYW0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBjbG9zZV9tZXRob2RfZGVjbChmaWx0ZXJlZCkKK3sKKwlmcmVlX3N0cmVhbV9maWx0ZXIoc3QtPnUuZmlsdGVyZWQuZmlsdGVyKTsKKwlyZXR1cm4gY2xvc2VfaXN0cmVhbShzdC0+dS5maWx0ZXJlZC51cHN0cmVhbSk7Cit9CisKK3N0YXRpYyByZWFkX21ldGhvZF9kZWNsKGZpbHRlcmVkKQoreworCXN0cnVjdCBmaWx0ZXJlZF9pc3RyZWFtICpmcyA9ICYoc3QtPnUuZmlsdGVyZWQpOworCXNpemVfdCBmaWxsZWQgPSAwOworCisJd2hpbGUgKHN6KSB7CisJCS8qIGRvIHdlIGFscmVhZHkgaGF2ZSBmaWx0ZXJlZCBvdXRwdXQ/ICovCisJCWlmIChmcy0+b19wdHIgPCBmcy0+b19lbmQpIHsKKwkJCXNpemVfdCB0b19tb3ZlID0gZnMtPm9fZW5kIC0gZnMtPm9fcHRyOworCQkJaWYgKHN6IDwgdG9fbW92ZSkKKwkJCQl0b19tb3ZlID0gc3o7CisJCQltZW1jcHkoYnVmICsgZmlsbGVkLCBmcy0+b2J1ZiArIGZzLT5vX3B0ciwgdG9fbW92ZSk7CisJCQlmcy0+b19wdHIgKz0gdG9fbW92ZTsKKwkJCXN6IC09IHRvX21vdmU7CisJCQlmaWxsZWQgKz0gdG9fbW92ZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZzLT5vX2VuZCA9IGZzLT5vX3B0ciA9IDA7CisKKwkJLyogZG8gd2UgaGF2ZSBhbnl0aGluZyB0byBmZWVkIHRoZSBmaWx0ZXIgd2l0aD8gKi8KKwkJaWYgKGZzLT5pX3B0ciA8IGZzLT5pX2VuZCkgeworCQkJc2l6ZV90IHRvX2ZlZWQgPSBmcy0+aV9lbmQgLSBmcy0+aV9wdHI7CisJCQlzaXplX3QgdG9fcmVjZWl2ZSA9IEZJTFRFUl9CVUZGRVI7CisJCQlpZiAoc3RyZWFtX2ZpbHRlcihmcy0+ZmlsdGVyLAorCQkJCQkgIGZzLT5pYnVmICsgZnMtPmlfcHRyLCAmdG9fZmVlZCwKKwkJCQkJICBmcy0+b2J1ZiwgJnRvX3JlY2VpdmUpKQorCQkJCXJldHVybiAtMTsKKwkJCWZzLT5pX3B0ciA9IGZzLT5pX2VuZCAtIHRvX2ZlZWQ7CisJCQlmcy0+b19lbmQgPSBGSUxURVJfQlVGRkVSIC0gdG9fcmVjZWl2ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogdGVsbCB0aGUgZmlsdGVyIHRvIGRyYWluIHVwb24gbm8gbW9yZSBpbnB1dCAqLworCQlpZiAoZnMtPmlucHV0X2ZpbmlzaGVkKSB7CisJCQlzaXplX3QgdG9fcmVjZWl2ZSA9IEZJTFRFUl9CVUZGRVI7CisJCQlpZiAoc3RyZWFtX2ZpbHRlcihmcy0+ZmlsdGVyLAorCQkJCQkgIE5VTEwsIE5VTEwsCisJCQkJCSAgZnMtPm9idWYsICZ0b19yZWNlaXZlKSkKKwkJCQlyZXR1cm4gLTE7CisJCQlmcy0+b19lbmQgPSBGSUxURVJfQlVGRkVSIC0gdG9fcmVjZWl2ZTsKKwkJCWlmICghZnMtPm9fZW5kKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJZnMtPmlfZW5kID0gZnMtPmlfcHRyID0gMDsKKworCQkvKiByZWZpbGwgdGhlIGlucHV0IGZyb20gdGhlIHVwc3RyZWFtICovCisJCWlmICghZnMtPmlucHV0X2ZpbmlzaGVkKSB7CisJCQlmcy0+aV9lbmQgPSByZWFkX2lzdHJlYW0oZnMtPnVwc3RyZWFtLCBmcy0+aWJ1ZiwgRklMVEVSX0JVRkZFUik7CisJCQlpZiAoZnMtPmlfZW5kIDwgMCkKKwkJCQlicmVhazsKKwkJCWlmIChmcy0+aV9lbmQpCisJCQkJY29udGludWU7CisJCX0KKwkJZnMtPmlucHV0X2ZpbmlzaGVkID0gMTsKKwl9CisJcmV0dXJuIGZpbGxlZDsKK30KKworc3RhdGljIHN0cnVjdCBzdHJlYW1fdnRibCBmaWx0ZXJlZF92dGJsID0geworCWNsb3NlX2lzdHJlYW1fZmlsdGVyZWQsCisJcmVhZF9pc3RyZWFtX2ZpbHRlcmVkLAorfTsKKworc3RhdGljIHN0cnVjdCBnaXRfaXN0cmVhbSAqYXR0YWNoX3N0cmVhbV9maWx0ZXIoc3RydWN0IGdpdF9pc3RyZWFtICpzdCwKKwkJCQkJCXN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCit7CisJc3RydWN0IGdpdF9pc3RyZWFtICppZnMgPSB4bWFsbG9jKHNpemVvZigqaWZzKSk7CisJc3RydWN0IGZpbHRlcmVkX2lzdHJlYW0gKmZzID0gJihpZnMtPnUuZmlsdGVyZWQpOworCisJaWZzLT52dGJsID0gJmZpbHRlcmVkX3Z0Ymw7CisJZnMtPnVwc3RyZWFtID0gc3Q7CisJZnMtPmZpbHRlciA9IGZpbHRlcjsKKwlmcy0+aV9lbmQgPSBmcy0+aV9wdHIgPSAwOworCWZzLT5vX2VuZCA9IGZzLT5vX3B0ciA9IDA7CisJZnMtPmlucHV0X2ZpbmlzaGVkID0gMDsKKwlpZnMtPnNpemUgPSAtMTsgLyogdW5rbm93biAqLworCXJldHVybiBpZnM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIExvb3NlIG9iamVjdCBzdHJlYW0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyByZWFkX21ldGhvZF9kZWNsKGxvb3NlKQoreworCXNpemVfdCB0b3RhbF9yZWFkID0gMDsKKworCXN3aXRjaCAoc3QtPnpfc3RhdGUpIHsKKwljYXNlIHpfZG9uZToKKwkJcmV0dXJuIDA7CisJY2FzZSB6X2Vycm9yOgorCQlyZXR1cm4gLTE7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHN0LT51Lmxvb3NlLmhkcl91c2VkIDwgc3QtPnUubG9vc2UuaGRyX2F2YWlsKSB7CisJCXNpemVfdCB0b19jb3B5ID0gc3QtPnUubG9vc2UuaGRyX2F2YWlsIC0gc3QtPnUubG9vc2UuaGRyX3VzZWQ7CisJCWlmIChzeiA8IHRvX2NvcHkpCisJCQl0b19jb3B5ID0gc3o7CisJCW1lbWNweShidWYsIHN0LT51Lmxvb3NlLmhkciArIHN0LT51Lmxvb3NlLmhkcl91c2VkLCB0b19jb3B5KTsKKwkJc3QtPnUubG9vc2UuaGRyX3VzZWQgKz0gdG9fY29weTsKKwkJdG90YWxfcmVhZCArPSB0b19jb3B5OworCX0KKworCXdoaWxlICh0b3RhbF9yZWFkIDwgc3opIHsKKwkJaW50IHN0YXR1czsKKworCQlzdC0+ei5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopYnVmICsgdG90YWxfcmVhZDsKKwkJc3QtPnouYXZhaWxfb3V0ID0gc3ogLSB0b3RhbF9yZWFkOworCQlzdGF0dXMgPSBnaXRfaW5mbGF0ZSgmc3QtPnosIFpfRklOSVNIKTsKKworCQl0b3RhbF9yZWFkID0gc3QtPnoubmV4dF9vdXQgLSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKKworCQlpZiAoc3RhdHVzID09IFpfU1RSRUFNX0VORCkgeworCQkJZ2l0X2luZmxhdGVfZW5kKCZzdC0+eik7CisJCQlzdC0+el9zdGF0ZSA9IHpfZG9uZTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGF0dXMgIT0gWl9PSyAmJiBzdGF0dXMgIT0gWl9CVUZfRVJST1IpIHsKKwkJCWdpdF9pbmZsYXRlX2VuZCgmc3QtPnopOworCQkJc3QtPnpfc3RhdGUgPSB6X2Vycm9yOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiB0b3RhbF9yZWFkOworfQorCitzdGF0aWMgY2xvc2VfbWV0aG9kX2RlY2wobG9vc2UpCit7CisJY2xvc2VfZGVmbGF0ZWRfc3RyZWFtKHN0KTsKKwltdW5tYXAoc3QtPnUubG9vc2UubWFwcGVkLCBzdC0+dS5sb29zZS5tYXBzaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzdHJlYW1fdnRibCBsb29zZV92dGJsID0geworCWNsb3NlX2lzdHJlYW1fbG9vc2UsCisJcmVhZF9pc3RyZWFtX2xvb3NlLAorfTsKKworc3RhdGljIG9wZW5fbWV0aG9kX2RlY2wobG9vc2UpCit7CisJc3QtPnUubG9vc2UubWFwcGVkID0gbWFwX3NoYTFfZmlsZShzaGExLCAmc3QtPnUubG9vc2UubWFwc2l6ZSk7CisJaWYgKCFzdC0+dS5sb29zZS5tYXBwZWQpCisJCXJldHVybiAtMTsKKwlpZiAodW5wYWNrX3NoYTFfaGVhZGVyKCZzdC0+eiwKKwkJCSAgICAgICBzdC0+dS5sb29zZS5tYXBwZWQsCisJCQkgICAgICAgc3QtPnUubG9vc2UubWFwc2l6ZSwKKwkJCSAgICAgICBzdC0+dS5sb29zZS5oZHIsCisJCQkgICAgICAgc2l6ZW9mKHN0LT51Lmxvb3NlLmhkcikpIDwgMCkgeworCQlnaXRfaW5mbGF0ZV9lbmQoJnN0LT56KTsKKwkJbXVubWFwKHN0LT51Lmxvb3NlLm1hcHBlZCwgc3QtPnUubG9vc2UubWFwc2l6ZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlwYXJzZV9zaGExX2hlYWRlcihzdC0+dS5sb29zZS5oZHIsICZzdC0+c2l6ZSk7CisJc3QtPnUubG9vc2UuaGRyX3VzZWQgPSBzdHJsZW4oc3QtPnUubG9vc2UuaGRyKSArIDE7CisJc3QtPnUubG9vc2UuaGRyX2F2YWlsID0gc3QtPnoudG90YWxfb3V0OworCXN0LT56X3N0YXRlID0gel91c2VkOworCisJc3QtPnZ0YmwgPSAmbG9vc2VfdnRibDsKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOb24tZGVsdGEgcGFja2VkIG9iamVjdCBzdHJlYW0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyByZWFkX21ldGhvZF9kZWNsKHBhY2tfbm9uX2RlbHRhKQoreworCXNpemVfdCB0b3RhbF9yZWFkID0gMDsKKworCXN3aXRjaCAoc3QtPnpfc3RhdGUpIHsKKwljYXNlIHpfdW51c2VkOgorCQltZW1zZXQoJnN0LT56LCAwLCBzaXplb2Yoc3QtPnopKTsKKwkJZ2l0X2luZmxhdGVfaW5pdCgmc3QtPnopOworCQlzdC0+el9zdGF0ZSA9IHpfdXNlZDsKKwkJYnJlYWs7CisJY2FzZSB6X2RvbmU6CisJCXJldHVybiAwOworCWNhc2Ugel9lcnJvcjoKKwkJcmV0dXJuIC0xOworCWNhc2Ugel91c2VkOgorCQlicmVhazsKKwl9CisKKwl3aGlsZSAodG90YWxfcmVhZCA8IHN6KSB7CisJCWludCBzdGF0dXM7CisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqd2luZG93ID0gTlVMTDsKKwkJdW5zaWduZWQgY2hhciAqbWFwcGVkOworCisJCW1hcHBlZCA9IHVzZV9wYWNrKHN0LT51LmluX3BhY2sucGFjaywgJndpbmRvdywKKwkJCQkgIHN0LT51LmluX3BhY2sucG9zLCAmc3QtPnouYXZhaWxfaW4pOworCisJCXN0LT56Lm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilidWYgKyB0b3RhbF9yZWFkOworCQlzdC0+ei5hdmFpbF9vdXQgPSBzeiAtIHRvdGFsX3JlYWQ7CisJCXN0LT56Lm5leHRfaW4gPSBtYXBwZWQ7CisJCXN0YXR1cyA9IGdpdF9pbmZsYXRlKCZzdC0+eiwgWl9GSU5JU0gpOworCisJCXN0LT51LmluX3BhY2sucG9zICs9IHN0LT56Lm5leHRfaW4gLSBtYXBwZWQ7CisJCXRvdGFsX3JlYWQgPSBzdC0+ei5uZXh0X291dCAtICh1bnNpZ25lZCBjaGFyICopYnVmOworCQl1bnVzZV9wYWNrKCZ3aW5kb3cpOworCisJCWlmIChzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKSB7CisJCQlnaXRfaW5mbGF0ZV9lbmQoJnN0LT56KTsKKwkJCXN0LT56X3N0YXRlID0gel9kb25lOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0YXR1cyAhPSBaX09LICYmIHN0YXR1cyAhPSBaX0JVRl9FUlJPUikgeworCQkJZ2l0X2luZmxhdGVfZW5kKCZzdC0+eik7CisJCQlzdC0+el9zdGF0ZSA9IHpfZXJyb3I7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIHRvdGFsX3JlYWQ7Cit9CisKK3N0YXRpYyBjbG9zZV9tZXRob2RfZGVjbChwYWNrX25vbl9kZWx0YSkKK3sKKwljbG9zZV9kZWZsYXRlZF9zdHJlYW0oc3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0cmVhbV92dGJsIHBhY2tfbm9uX2RlbHRhX3Z0YmwgPSB7CisJY2xvc2VfaXN0cmVhbV9wYWNrX25vbl9kZWx0YSwKKwlyZWFkX2lzdHJlYW1fcGFja19ub25fZGVsdGEsCit9OworCitzdGF0aWMgb3Blbl9tZXRob2RfZGVjbChwYWNrX25vbl9kZWx0YSkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndpbmRvdzsKKwllbnVtIG9iamVjdF90eXBlIGluX3BhY2tfdHlwZTsKKworCXN0LT51LmluX3BhY2sucGFjayA9IG9pLT51LnBhY2tlZC5wYWNrOworCXN0LT51LmluX3BhY2sucG9zID0gb2ktPnUucGFja2VkLm9mZnNldDsKKwl3aW5kb3cgPSBOVUxMOworCisJaW5fcGFja190eXBlID0gdW5wYWNrX29iamVjdF9oZWFkZXIoc3QtPnUuaW5fcGFjay5wYWNrLAorCQkJCQkgICAgJndpbmRvdywKKwkJCQkJICAgICZzdC0+dS5pbl9wYWNrLnBvcywKKwkJCQkJICAgICZzdC0+c2l6ZSk7CisJdW51c2VfcGFjaygmd2luZG93KTsKKwlzd2l0Y2ggKGluX3BhY2tfdHlwZSkgeworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsgLyogd2UgZG8gbm90IGRvIGRlbHRhcyBmb3Igbm93ICovCisJY2FzZSBPQkpfQ09NTUlUOgorCWNhc2UgT0JKX1RSRUU6CisJY2FzZSBPQkpfQkxPQjoKKwljYXNlIE9CSl9UQUc6CisJCWJyZWFrOworCX0KKwlzdC0+el9zdGF0ZSA9IHpfdW51c2VkOworCXN0LT52dGJsID0gJnBhY2tfbm9uX2RlbHRhX3Z0Ymw7CisJcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSW4tY29yZSBzdHJlYW0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBjbG9zZV9tZXRob2RfZGVjbChpbmNvcmUpCit7CisJZnJlZShzdC0+dS5pbmNvcmUuYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHJlYWRfbWV0aG9kX2RlY2woaW5jb3JlKQoreworCXNpemVfdCByZWFkX3NpemUgPSBzejsKKwlzaXplX3QgcmVtYWluZGVyID0gc3QtPnNpemUgLSBzdC0+dS5pbmNvcmUucmVhZF9wdHI7CisKKwlpZiAocmVtYWluZGVyIDw9IHJlYWRfc2l6ZSkKKwkJcmVhZF9zaXplID0gcmVtYWluZGVyOworCWlmIChyZWFkX3NpemUpIHsKKwkJbWVtY3B5KGJ1Ziwgc3QtPnUuaW5jb3JlLmJ1ZiArIHN0LT51LmluY29yZS5yZWFkX3B0ciwgcmVhZF9zaXplKTsKKwkJc3QtPnUuaW5jb3JlLnJlYWRfcHRyICs9IHJlYWRfc2l6ZTsKKwl9CisJcmV0dXJuIHJlYWRfc2l6ZTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJlYW1fdnRibCBpbmNvcmVfdnRibCA9IHsKKwljbG9zZV9pc3RyZWFtX2luY29yZSwKKwlyZWFkX2lzdHJlYW1faW5jb3JlLAorfTsKKworc3RhdGljIG9wZW5fbWV0aG9kX2RlY2woaW5jb3JlKQoreworCXN0LT51LmluY29yZS5idWYgPSByZWFkX3NoYTFfZmlsZV9leHRlbmRlZChzaGExLCB0eXBlLCAmc3QtPnNpemUsIDApOworCXN0LT51LmluY29yZS5yZWFkX3B0ciA9IDA7CisJc3QtPnZ0YmwgPSAmaW5jb3JlX3Z0Ymw7CisKKwlyZXR1cm4gc3QtPnUuaW5jb3JlLmJ1ZiA/IDAgOiAtMTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVXNlcnMgb2Ygc3RyZWFtaW5nIGludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBzdHJlYW1fYmxvYl90b19mZChpbnQgZmQsIHVuc2lnbmVkIGNvbnN0IGNoYXIgKnNoYTEsIHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIsCisJCSAgICAgIGludCBjYW5fc2VlaykKK3sKKwlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHN6OworCXNzaXplX3Qga2VwdCA9IDA7CisJaW50IHJlc3VsdCA9IC0xOworCisJc3QgPSBvcGVuX2lzdHJlYW0oc2hhMSwgJnR5cGUsICZzeiwgZmlsdGVyKTsKKwlpZiAoIXN0KQorCQlyZXR1cm4gcmVzdWx0OworCWlmICh0eXBlICE9IE9CSl9CTE9CKQorCQlnb3RvIGNsb3NlX2FuZF9leGl0OworCWZvciAoOzspIHsKKwkJY2hhciBidWZbMTAyNCAqIDE2XTsKKwkJc3NpemVfdCB3cm90ZSwgaG9sZXRvOworCQlzc2l6ZV90IHJlYWRsZW4gPSByZWFkX2lzdHJlYW0oc3QsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJCWlmICghcmVhZGxlbikKKwkJCWJyZWFrOworCQlpZiAoY2FuX3NlZWsgJiYgc2l6ZW9mKGJ1ZikgPT0gcmVhZGxlbikgeworCQkJZm9yIChob2xldG8gPSAwOyBob2xldG8gPCByZWFkbGVuOyBob2xldG8rKykKKwkJCQlpZiAoYnVmW2hvbGV0b10pCisJCQkJCWJyZWFrOworCQkJaWYgKHJlYWRsZW4gPT0gaG9sZXRvKSB7CisJCQkJa2VwdCArPSBob2xldG87CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoa2VwdCAmJiBsc2VlayhmZCwga2VwdCwgU0VFS19DVVIpID09IChvZmZfdCkgLTEpCisJCQlnb3RvIGNsb3NlX2FuZF9leGl0OworCQllbHNlCisJCQlrZXB0ID0gMDsKKwkJd3JvdGUgPSB3cml0ZV9pbl9mdWxsKGZkLCBidWYsIHJlYWRsZW4pOworCisJCWlmICh3cm90ZSAhPSByZWFkbGVuKQorCQkJZ290byBjbG9zZV9hbmRfZXhpdDsKKwl9CisJaWYgKGtlcHQgJiYgKGxzZWVrKGZkLCBrZXB0IC0gMSwgU0VFS19DVVIpID09IChvZmZfdCkgLTEgfHwKKwkJICAgICB3cml0ZShmZCwgIiIsIDEpICE9IDEpKQorCQlnb3RvIGNsb3NlX2FuZF9leGl0OworCXJlc3VsdCA9IDA7CisKKyBjbG9zZV9hbmRfZXhpdDoKKwljbG9zZV9pc3RyZWFtKHN0KTsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc3RyZWFtaW5nLmggYi9zdHJlYW1pbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDA1YzJhCi0tLSAvZGV2L251bGwKKysrIGIvc3RyZWFtaW5nLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4KKyAqLworI2lmbmRlZiBTVFJFQU1JTkdfSAorI2RlZmluZSBTVFJFQU1JTkdfSCAxCisjaW5jbHVkZSAiY2FjaGUuaCIKKworLyogb3BhcXVlICovCitzdHJ1Y3QgZ2l0X2lzdHJlYW07CisKK2V4dGVybiBzdHJ1Y3QgZ2l0X2lzdHJlYW0gKm9wZW5faXN0cmVhbShjb25zdCB1bnNpZ25lZCBjaGFyICosIGVudW0gb2JqZWN0X3R5cGUgKiwgdW5zaWduZWQgbG9uZyAqLCBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqKTsKK2V4dGVybiBpbnQgY2xvc2VfaXN0cmVhbShzdHJ1Y3QgZ2l0X2lzdHJlYW0gKik7CitleHRlcm4gc3NpemVfdCByZWFkX2lzdHJlYW0oc3RydWN0IGdpdF9pc3RyZWFtICosIHZvaWQgKiwgc2l6ZV90KTsKKworZXh0ZXJuIGludCBzdHJlYW1fYmxvYl90b19mZChpbnQgZmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IHN0cmVhbV9maWx0ZXIgKiwgaW50IGNhbl9zZWVrKTsKKworI2VuZGlmIC8qIFNUUkVBTUlOR19IICovCmRpZmYgLS1naXQgYS9zdHJpbmctbGlzdC5jIGIvc3RyaW5nLWxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTRiODE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3RyaW5nLWxpc3QuYwpAQCAtMCwwICsxLDMxMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyogaWYgdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIHBvaW50IHRvIHRoZSBpbmRleCB3aGVyZSB0aGUgZW50cnkgY291bGQgYmUKKyAqIGluc2VydGVkICovCitzdGF0aWMgaW50IGdldF9lbnRyeV9pbmRleChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJaW50ICpleGFjdF9tYXRjaCkKK3sKKwlpbnQgbGVmdCA9IC0xLCByaWdodCA9IGxpc3QtPm5yOworCisJd2hpbGUgKGxlZnQgKyAxIDwgcmlnaHQpIHsKKwkJaW50IG1pZGRsZSA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKKwkJaW50IGNvbXBhcmUgPSBzdHJjbXAoc3RyaW5nLCBsaXN0LT5pdGVtc1ttaWRkbGVdLnN0cmluZyk7CisJCWlmIChjb21wYXJlIDwgMCkKKwkJCXJpZ2h0ID0gbWlkZGxlOworCQllbHNlIGlmIChjb21wYXJlID4gMCkKKwkJCWxlZnQgPSBtaWRkbGU7CisJCWVsc2UgeworCQkJKmV4YWN0X21hdGNoID0gMTsKKwkJCXJldHVybiBtaWRkbGU7CisJCX0KKwl9CisKKwkqZXhhY3RfbWF0Y2ggPSAwOworCXJldHVybiByaWdodDsKK30KKworLyogcmV0dXJucyAtMS1pbmRleCBpZiBhbHJlYWR5IGV4aXN0cyAqLworc3RhdGljIGludCBhZGRfZW50cnkoaW50IGluc2VydF9hdCwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJaW50IGV4YWN0X21hdGNoID0gMDsKKwlpbnQgaW5kZXggPSBpbnNlcnRfYXQgIT0gLTEgPyBpbnNlcnRfYXQgOiBnZXRfZW50cnlfaW5kZXgobGlzdCwgc3RyaW5nLCAmZXhhY3RfbWF0Y2gpOworCisJaWYgKGV4YWN0X21hdGNoKQorCQlyZXR1cm4gLTEgLSBpbmRleDsKKworCWlmIChsaXN0LT5uciArIDEgPj0gbGlzdC0+YWxsb2MpIHsKKwkJbGlzdC0+YWxsb2MgKz0gMzI7CisJCWxpc3QtPml0ZW1zID0geHJlYWxsb2MobGlzdC0+aXRlbXMsIGxpc3QtPmFsbG9jCisJCQkJKiBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0pKTsKKwl9CisJaWYgKGluZGV4IDwgbGlzdC0+bnIpCisJCW1lbW1vdmUobGlzdC0+aXRlbXMgKyBpbmRleCArIDEsIGxpc3QtPml0ZW1zICsgaW5kZXgsCisJCQkJKGxpc3QtPm5yIC0gaW5kZXgpCisJCQkJKiBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0pKTsKKwlsaXN0LT5pdGVtc1tpbmRleF0uc3RyaW5nID0gbGlzdC0+c3RyZHVwX3N0cmluZ3MgPworCQl4c3RyZHVwKHN0cmluZykgOiAoY2hhciAqKXN0cmluZzsKKwlsaXN0LT5pdGVtc1tpbmRleF0udXRpbCA9IE5VTEw7CisJbGlzdC0+bnIrKzsKKworCXJldHVybiBpbmRleDsKK30KKworc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2luc2VydChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlyZXR1cm4gc3RyaW5nX2xpc3RfaW5zZXJ0X2F0X2luZGV4KGxpc3QsIC0xLCBzdHJpbmcpOworfQorCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfaW5zZXJ0X2F0X2luZGV4KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJCSAgICAgaW50IGluc2VydF9hdCwgY29uc3QgY2hhciAqc3RyaW5nKQoreworCWludCBpbmRleCA9IGFkZF9lbnRyeShpbnNlcnRfYXQsIGxpc3QsIHN0cmluZyk7CisKKwlpZiAoaW5kZXggPCAwKQorCQlpbmRleCA9IC0xIC0gaW5kZXg7CisKKwlyZXR1cm4gbGlzdC0+aXRlbXMgKyBpbmRleDsKK30KKworaW50IHN0cmluZ19saXN0X2hhc19zdHJpbmcoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJaW50IGV4YWN0X21hdGNoOworCWdldF9lbnRyeV9pbmRleChsaXN0LCBzdHJpbmcsICZleGFjdF9tYXRjaCk7CisJcmV0dXJuIGV4YWN0X21hdGNoOworfQorCitpbnQgc3RyaW5nX2xpc3RfZmluZF9pbnNlcnRfaW5kZXgoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcsCisJCQkJICBpbnQgbmVnYXRpdmVfZXhpc3RpbmdfaW5kZXgpCit7CisJaW50IGV4YWN0X21hdGNoOworCWludCBpbmRleCA9IGdldF9lbnRyeV9pbmRleChsaXN0LCBzdHJpbmcsICZleGFjdF9tYXRjaCk7CisJaWYgKGV4YWN0X21hdGNoKQorCQlpbmRleCA9IC0xIC0gKG5lZ2F0aXZlX2V4aXN0aW5nX2luZGV4ID8gaW5kZXggOiAwKTsKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9sb29rdXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJaW50IGV4YWN0X21hdGNoLCBpID0gZ2V0X2VudHJ5X2luZGV4KGxpc3QsIHN0cmluZywgJmV4YWN0X21hdGNoKTsKKwlpZiAoIWV4YWN0X21hdGNoKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gbGlzdC0+aXRlbXMgKyBpOworfQorCit2b2lkIHN0cmluZ19saXN0X3JlbW92ZV9kdXBsaWNhdGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IGZyZWVfdXRpbCkKK3sKKwlpZiAobGlzdC0+bnIgPiAxKSB7CisJCWludCBzcmMsIGRzdDsKKwkJZm9yIChzcmMgPSBkc3QgPSAxOyBzcmMgPCBsaXN0LT5ucjsgc3JjKyspIHsKKwkJCWlmICghc3RyY21wKGxpc3QtPml0ZW1zW2RzdCAtIDFdLnN0cmluZywgbGlzdC0+aXRlbXNbc3JjXS5zdHJpbmcpKSB7CisJCQkJaWYgKGxpc3QtPnN0cmR1cF9zdHJpbmdzKQorCQkJCQlmcmVlKGxpc3QtPml0ZW1zW3NyY10uc3RyaW5nKTsKKwkJCQlpZiAoZnJlZV91dGlsKQorCQkJCQlmcmVlKGxpc3QtPml0ZW1zW3NyY10udXRpbCk7CisJCQl9IGVsc2UKKwkJCQlsaXN0LT5pdGVtc1tkc3QrK10gPSBsaXN0LT5pdGVtc1tzcmNdOworCQl9CisJCWxpc3QtPm5yID0gZHN0OworCX0KK30KKworaW50IGZvcl9lYWNoX3N0cmluZ19saXN0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCSBzdHJpbmdfbGlzdF9lYWNoX2Z1bmNfdCBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykKKwkJaWYgKChyZXQgPSBmbigmbGlzdC0+aXRlbXNbaV0sIGNiX2RhdGEpKSkKKwkJCWJyZWFrOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZmlsdGVyX3N0cmluZ19saXN0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IGZyZWVfdXRpbCwKKwkJCXN0cmluZ19saXN0X2VhY2hfZnVuY190IHdhbnQsIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IHNyYywgZHN0ID0gMDsKKwlmb3IgKHNyYyA9IDA7IHNyYyA8IGxpc3QtPm5yOyBzcmMrKykgeworCQlpZiAod2FudCgmbGlzdC0+aXRlbXNbc3JjXSwgY2JfZGF0YSkpIHsKKwkJCWxpc3QtPml0ZW1zW2RzdCsrXSA9IGxpc3QtPml0ZW1zW3NyY107CisJCX0gZWxzZSB7CisJCQlpZiAobGlzdC0+c3RyZHVwX3N0cmluZ3MpCisJCQkJZnJlZShsaXN0LT5pdGVtc1tzcmNdLnN0cmluZyk7CisJCQlpZiAoZnJlZV91dGlsKQorCQkJCWZyZWUobGlzdC0+aXRlbXNbc3JjXS51dGlsKTsKKwkJfQorCX0KKwlsaXN0LT5uciA9IGRzdDsKK30KKworY2hhciAqc3RyaW5nX2xpc3RfbG9uZ2VzdF9wcmVmaXgoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwcmVmaXhlcywKKwkJCQkgY29uc3QgY2hhciAqc3RyaW5nKQoreworCWludCBpLCBtYXhfbGVuID0gLTE7CisJY2hhciAqcmV0dmFsID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBwcmVmaXhlcy0+bnI7IGkrKykgeworCQljaGFyICpwcmVmaXggPSBwcmVmaXhlcy0+aXRlbXNbaV0uc3RyaW5nOworCQlpZiAoIXByZWZpeGNtcChzdHJpbmcsIHByZWZpeCkpIHsKKwkJCWludCBsZW4gPSBzdHJsZW4ocHJlZml4KTsKKwkJCWlmIChsZW4gPiBtYXhfbGVuKSB7CisJCQkJcmV0dmFsID0gcHJlZml4OworCQkJCW1heF9sZW4gPSBsZW47CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIHN0cmluZ19saXN0X2NsZWFyKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IGZyZWVfdXRpbCkKK3sKKwlpZiAobGlzdC0+aXRlbXMpIHsKKwkJaW50IGk7CisJCWlmIChsaXN0LT5zdHJkdXBfc3RyaW5ncykgeworCQkJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspCisJCQkJZnJlZShsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJCWlmIChmcmVlX3V0aWwpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQkJCWZyZWUobGlzdC0+aXRlbXNbaV0udXRpbCk7CisJCX0KKwkJZnJlZShsaXN0LT5pdGVtcyk7CisJfQorCWxpc3QtPml0ZW1zID0gTlVMTDsKKwlsaXN0LT5uciA9IGxpc3QtPmFsbG9jID0gMDsKK30KKwordm9pZCBzdHJpbmdfbGlzdF9jbGVhcl9mdW5jKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgc3RyaW5nX2xpc3RfY2xlYXJfZnVuY190IGNsZWFyZnVuYykKK3sKKwlpZiAobGlzdC0+aXRlbXMpIHsKKwkJaW50IGk7CisJCWlmIChjbGVhcmZ1bmMpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQkJCWNsZWFyZnVuYyhsaXN0LT5pdGVtc1tpXS51dGlsLCBsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJCWlmIChsaXN0LT5zdHJkdXBfc3RyaW5ncykgeworCQkJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspCisJCQkJZnJlZShsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJCWZyZWUobGlzdC0+aXRlbXMpOworCX0KKwlsaXN0LT5pdGVtcyA9IE5VTEw7CisJbGlzdC0+bnIgPSBsaXN0LT5hbGxvYyA9IDA7Cit9CisKKwordm9pZCBwcmludF9zdHJpbmdfbGlzdChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnAsIGNvbnN0IGNoYXIgKnRleHQpCit7CisJaW50IGk7CisJaWYgKCB0ZXh0ICkKKwkJcHJpbnRmKCIlc1xuIiwgdGV4dCk7CisJZm9yIChpID0gMDsgaSA8IHAtPm5yOyBpKyspCisJCXByaW50ZigiJXM6JXBcbiIsIHAtPml0ZW1zW2ldLnN0cmluZywgcC0+aXRlbXNbaV0udXRpbCk7Cit9CisKK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCQkJICBjaGFyICpzdHJpbmcpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnJldHZhbDsKKwlBTExPQ19HUk9XKGxpc3QtPml0ZW1zLCBsaXN0LT5uciArIDEsIGxpc3QtPmFsbG9jKTsKKwlyZXR2YWwgPSAmbGlzdC0+aXRlbXNbbGlzdC0+bnIrK107CisJcmV0dmFsLT5zdHJpbmcgPSBzdHJpbmc7CisJcmV0dmFsLT51dGlsID0gTlVMTDsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfYXBwZW5kKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlyZXR1cm4gc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKAorCQkJbGlzdCwKKwkJCWxpc3QtPnN0cmR1cF9zdHJpbmdzID8geHN0cmR1cChzdHJpbmcpIDogKGNoYXIgKilzdHJpbmcpOworfQorCitzdGF0aWMgaW50IGNtcF9pdGVtcyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpvbmUgPSBhOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICp0d28gPSBiOworCXJldHVybiBzdHJjbXAob25lLT5zdHJpbmcsIHR3by0+c3RyaW5nKTsKK30KKwordm9pZCBzb3J0X3N0cmluZ19saXN0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlxc29ydChsaXN0LT5pdGVtcywgbGlzdC0+bnIsIHNpemVvZigqbGlzdC0+aXRlbXMpLCBjbXBfaXRlbXMpOworfQorCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQlpZiAoIXN0cmNtcChzdHJpbmcsIGxpc3QtPml0ZW1zW2ldLnN0cmluZykpCisJCQlyZXR1cm4gbGlzdC0+aXRlbXMgKyBpOworCXJldHVybiBOVUxMOworfQorCitpbnQgdW5zb3J0ZWRfc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQkJICAgIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlyZXR1cm4gdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKGxpc3QsIHN0cmluZykgIT0gTlVMTDsKK30KKwordm9pZCB1bnNvcnRlZF9zdHJpbmdfbGlzdF9kZWxldGVfaXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCBpLCBpbnQgZnJlZV91dGlsKQoreworCWlmIChsaXN0LT5zdHJkdXBfc3RyaW5ncykKKwkJZnJlZShsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCWlmIChmcmVlX3V0aWwpCisJCWZyZWUobGlzdC0+aXRlbXNbaV0udXRpbCk7CisJbGlzdC0+aXRlbXNbaV0gPSBsaXN0LT5pdGVtc1tsaXN0LT5uci0xXTsKKwlsaXN0LT5uci0tOworfQorCitpbnQgc3RyaW5nX2xpc3Rfc3BsaXQoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcsCisJCSAgICAgIGludCBkZWxpbSwgaW50IG1heHNwbGl0KQoreworCWludCBjb3VudCA9IDA7CisJY29uc3QgY2hhciAqcCA9IHN0cmluZywgKmVuZDsKKworCWlmICghbGlzdC0+c3RyZHVwX3N0cmluZ3MpCisJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gc3RyaW5nX2xpc3Rfc3BsaXQoKTogIgorCQkgICAgImxpc3QtPnN0cmR1cF9zdHJpbmdzIG11c3QgYmUgc2V0Iik7CisJZm9yICg7OykgeworCQljb3VudCsrOworCQlpZiAobWF4c3BsaXQgPj0gMCAmJiBjb3VudCA+IG1heHNwbGl0KSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcCk7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKwkJZW5kID0gc3RyY2hyKHAsIGRlbGltKTsKKwkJaWYgKGVuZCkgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKGxpc3QsIHhtZW1kdXB6KHAsIGVuZCAtIHApKTsKKwkJCXAgPSBlbmQgKyAxOworCQl9IGVsc2UgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHApOworCQkJcmV0dXJuIGNvdW50OworCQl9CisJfQorfQorCitpbnQgc3RyaW5nX2xpc3Rfc3BsaXRfaW5fcGxhY2Uoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjaGFyICpzdHJpbmcsCisJCQkgICAgICAgaW50IGRlbGltLCBpbnQgbWF4c3BsaXQpCit7CisJaW50IGNvdW50ID0gMDsKKwljaGFyICpwID0gc3RyaW5nLCAqZW5kOworCisJaWYgKGxpc3QtPnN0cmR1cF9zdHJpbmdzKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIHN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKCk6ICIKKwkJICAgICJsaXN0LT5zdHJkdXBfc3RyaW5ncyBtdXN0IG5vdCBiZSBzZXQiKTsKKwlmb3IgKDs7KSB7CisJCWNvdW50Kys7CisJCWlmIChtYXhzcGxpdCA+PSAwICYmIGNvdW50ID4gbWF4c3BsaXQpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBwKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCQllbmQgPSBzdHJjaHIocCwgZGVsaW0pOworCQlpZiAoZW5kKSB7CisJCQkqZW5kID0gJ1wwJzsKKwkJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBwKTsKKwkJCXAgPSBlbmQgKyAxOworCQl9IGVsc2UgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHApOworCQkJcmV0dXJuIGNvdW50OworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvc3RyaW5nLWxpc3QuaCBiL3N0cmluZy1saXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmZDA3YgotLS0gL2Rldi9udWxsCisrKyBiL3N0cmluZy1saXN0LmgKQEAgLTAsMCArMSwxMTkgQEAKKyNpZm5kZWYgU1RSSU5HX0xJU1RfSAorI2RlZmluZSBTVFJJTkdfTElTVF9ICisKK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtIHsKKwljaGFyICpzdHJpbmc7CisJdm9pZCAqdXRpbDsKK307CitzdHJ1Y3Qgc3RyaW5nX2xpc3QgeworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtczsKKwl1bnNpZ25lZCBpbnQgbnIsIGFsbG9jOworCXVuc2lnbmVkIGludCBzdHJkdXBfc3RyaW5nczoxOworfTsKKworI2RlZmluZSBTVFJJTkdfTElTVF9JTklUX05PRFVQIHsgTlVMTCwgMCwgMCwgMCB9CisjZGVmaW5lIFNUUklOR19MSVNUX0lOSVRfRFVQICAgeyBOVUxMLCAwLCAwLCAxIH0KKwordm9pZCBwcmludF9zdHJpbmdfbGlzdChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnAsIGNvbnN0IGNoYXIgKnRleHQpOwordm9pZCBzdHJpbmdfbGlzdF9jbGVhcihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCBmcmVlX3V0aWwpOworCisvKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBjYWxsIGEgY3VzdG9tIGNsZWFyIGZ1bmN0aW9uIG9uIGVhY2ggdXRpbCBwb2ludGVyICovCisvKiBUaGUgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXRpbCBwb2ludGVyIGlzIHBhc3NlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50ICovCit0eXBlZGVmIHZvaWQgKCpzdHJpbmdfbGlzdF9jbGVhcl9mdW5jX3QpKHZvaWQgKnAsIGNvbnN0IGNoYXIgKnN0cik7Cit2b2lkIHN0cmluZ19saXN0X2NsZWFyX2Z1bmMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBzdHJpbmdfbGlzdF9jbGVhcl9mdW5jX3QgY2xlYXJmdW5jKTsKKworLyogVXNlIHRoaXMgZnVuY3Rpb24gb3IgdGhlIG1hY3JvIGJlbG93IHRvIGl0ZXJhdGUgb3ZlciBlYWNoIGl0ZW0gKi8KK3R5cGVkZWYgaW50ICgqc3RyaW5nX2xpc3RfZWFjaF9mdW5jX3QpKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICosIHZvaWQgKik7CitpbnQgZm9yX2VhY2hfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJIHN0cmluZ19saXN0X2VhY2hfZnVuY190LCB2b2lkICpjYl9kYXRhKTsKKyNkZWZpbmUgZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLGxpc3QpIFwKKwlmb3IgKGl0ZW0gPSAobGlzdCktPml0ZW1zOyBpdGVtIDwgKGxpc3QpLT5pdGVtcyArIChsaXN0KS0+bnI7ICsraXRlbSkKKworLyoKKyAqIEFwcGx5IHdhbnQgdG8gZWFjaCBpdGVtIGluIGxpc3QsIHJldGFpbmluZyBvbmx5IHRoZSBvbmVzIGZvciB3aGljaAorICogdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZS4gIElmIGZyZWVfdXRpbCBpcyB0cnVlLCBjYWxsIGZyZWUoKSBvbgorICogdGhlIHV0aWwgbWVtYmVycyBvZiBhbnkgaXRlbXMgdGhhdCBoYXZlIHRvIGJlIGRlbGV0ZWQuICBQcmVzZXJ2ZQorICogdGhlIG9yZGVyIG9mIHRoZSBpdGVtcyB0aGF0IGFyZSByZXRhaW5lZC4KKyAqLwordm9pZCBmaWx0ZXJfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgZnJlZV91dGlsLAorCQkJc3RyaW5nX2xpc3RfZWFjaF9mdW5jX3Qgd2FudCwgdm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBSZXR1cm4gdGhlIGxvbmdlc3Qgc3RyaW5nIGluIHByZWZpeGVzIHRoYXQgaXMgYSBwcmVmaXggKGluIHRoZQorICogc2Vuc2Ugb2YgcHJlZml4Y21wKCkpIG9mIHN0cmluZywgb3IgTlVMTCBpZiBubyBzdWNoIHByZWZpeCBleGlzdHMuCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlcXVpcmUgdGhlIHN0cmluZ19saXN0IHRvIGJlIHNvcnRlZCAoaXQKKyAqIGRvZXMgYSBsaW5lYXIgc2VhcmNoKS4KKyAqLworY2hhciAqc3RyaW5nX2xpc3RfbG9uZ2VzdF9wcmVmaXgoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwcmVmaXhlcywgY29uc3QgY2hhciAqc3RyaW5nKTsKKworCisvKiBVc2UgdGhlc2UgZnVuY3Rpb25zIG9ubHkgb24gc29ydGVkIGxpc3RzOiAqLworaW50IHN0cmluZ19saXN0X2hhc19zdHJpbmcoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpOworaW50IHN0cmluZ19saXN0X2ZpbmRfaW5zZXJ0X2luZGV4KGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nLAorCQkJCSAgaW50IG5lZ2F0aXZlX2V4aXN0aW5nX2luZGV4KTsKK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9pbnNlcnQoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpOworc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2luc2VydF9hdF9pbmRleChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQkJCQkgICAgIGludCBpbnNlcnRfYXQsIGNvbnN0IGNoYXIgKnN0cmluZyk7CitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfbG9va3VwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nKTsKKworLyoKKyAqIFJlbW92ZSBhbGwgYnV0IHRoZSBmaXJzdCBvZiBjb25zZWN1dGl2ZSBlbnRyaWVzIHdpdGggdGhlIHNhbWUKKyAqIHN0cmluZyB2YWx1ZS4gIElmIGZyZWVfdXRpbCBpcyB0cnVlLCBjYWxsIGZyZWUoKSBvbiB0aGUgdXRpbAorICogbWVtYmVycyBvZiBhbnkgaXRlbXMgdGhhdCBoYXZlIHRvIGJlIGRlbGV0ZWQuCisgKi8KK3ZvaWQgc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoc3RydWN0IHN0cmluZ19saXN0ICpzb3J0ZWRfbGlzdCwgaW50IGZyZWVfdXRpbCk7CisKKworLyogVXNlIHRoZXNlIGZ1bmN0aW9ucyBvbmx5IG9uIHVuc29ydGVkIGxpc3RzOiAqLworCisvKgorICogQWRkIHN0cmluZyB0byB0aGUgZW5kIG9mIGxpc3QuICBJZiBsaXN0LT5zdHJkdXBfc3RyaW5nIGlzIHNldCwgdGhlbgorICogc3RyaW5nIGlzIGNvcGllZDsgb3RoZXJ3aXNlIHRoZSBuZXcgc3RyaW5nX2xpc3RfZW50cnkgcmVmZXJzIHRvIHRoZQorICogaW5wdXQgc3RyaW5nLgorICovCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfYXBwZW5kKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nKTsKKworLyoKKyAqIExpa2Ugc3RyaW5nX2xpc3RfYXBwZW5kKCksIGV4Y2VwdCBzdHJpbmcgaXMgbmV2ZXIgY29waWVkLiAgV2hlbgorICogbGlzdC0+c3RyZHVwX3N0cmluZ3MgaXMgc2V0LCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGhhbmQKKyAqIG93bmVyc2hpcCBvZiBhIG1hbGxvYygpZWQgc3RyaW5nIHRvIGxpc3Qgd2l0aG91dCBtYWtpbmcgYW4gZXh0cmEKKyAqIGNvcHkuCisgKi8KK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjaGFyICpzdHJpbmcpOworCit2b2lkIHNvcnRfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KTsKK2ludCB1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nKTsKK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICp1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCQkJICAgICBjb25zdCBjaGFyICpzdHJpbmcpOworCit2b2lkIHVuc29ydGVkX3N0cmluZ19saXN0X2RlbGV0ZV9pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IGksIGludCBmcmVlX3V0aWwpOworCisvKgorICogU3BsaXQgc3RyaW5nIGludG8gc3Vic3RyaW5ncyBvbiBjaGFyYWN0ZXIgZGVsaW0gYW5kIGFwcGVuZCB0aGUKKyAqIHN1YnN0cmluZ3MgdG8gbGlzdC4gIFRoZSBpbnB1dCBzdHJpbmcgaXMgbm90IG1vZGlmaWVkLgorICogbGlzdC0+c3RyZHVwX3N0cmluZ3MgbXVzdCBiZSBzZXQsIGFzIG5ldyBtZW1vcnkgbmVlZHMgdG8gYmUKKyAqIGFsbG9jYXRlZCB0byBob2xkIHRoZSBzdWJzdHJpbmdzLiAgSWYgbWF4c3BsaXQgaXMgbm9uLW5lZ2F0aXZlLAorICogdGhlbiBzcGxpdCBhdCBtb3N0IG1heHNwbGl0IHRpbWVzLiAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygc3Vic3RyaW5ncworICogYXBwZW5kZWQgdG8gbGlzdC4KKyAqCisgKiBFeGFtcGxlczoKKyAqICAgc3RyaW5nX2xpc3Rfc3BsaXQobCwgImZvbzpiYXI6YmF6IiwgJzonLCAtMSkgLT4gWyJmb28iLCAiYmFyIiwgImJheiJdCisgKiAgIHN0cmluZ19saXN0X3NwbGl0KGwsICJmb286YmFyOmJheiIsICc6JywgMCkgLT4gWyJmb286YmFyOmJheiJdCisgKiAgIHN0cmluZ19saXN0X3NwbGl0KGwsICJmb286YmFyOmJheiIsICc6JywgMSkgLT4gWyJmb28iLCAiYmFyOmJheiJdCisgKiAgIHN0cmluZ19saXN0X3NwbGl0KGwsICJmb286YmFyOiIsICc6JywgLTEpIC0+IFsiZm9vIiwgImJhciIsICIiXQorICogICBzdHJpbmdfbGlzdF9zcGxpdChsLCAiIiwgJzonLCAtMSkgLT4gWyIiXQorICogICBzdHJpbmdfbGlzdF9zcGxpdChsLCAiOiIsICc6JywgLTEpIC0+IFsiIiwgIiJdCisgKi8KK2ludCBzdHJpbmdfbGlzdF9zcGxpdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJICAgICAgaW50IGRlbGltLCBpbnQgbWF4c3BsaXQpOworCisvKgorICogTGlrZSBzdHJpbmdfbGlzdF9zcGxpdCgpLCBleGNlcHQgdGhhdCBzdHJpbmcgaXMgc3BsaXQgaW4tcGxhY2U6IHRoZQorICogZGVsaW1pdGVyIGNoYXJhY3RlcnMgaW4gc3RyaW5nIGFyZSBvdmVyd3JpdHRlbiB3aXRoIE5VTHMsIGFuZCB0aGUKKyAqIG5ldyBzdHJpbmdfbGlzdF9pdGVtcyBwb2ludCBpbnRvIHN0cmluZyAod2hpY2ggdGhlcmVmb3JlIG11c3Qgbm90CisgKiBiZSBtb2RpZmllZCBvciBmcmVlZCB3aGlsZSB0aGUgc3RyaW5nX2xpc3QgaXMgaW4gdXNlKS4KKyAqIGxpc3QtPnN0cmR1cF9zdHJpbmdzIG11c3QgKm5vdCogYmUgc2V0LgorICovCitpbnQgc3RyaW5nX2xpc3Rfc3BsaXRfaW5fcGxhY2Uoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjaGFyICpzdHJpbmcsCisJCQkgICAgICAgaW50IGRlbGltLCBpbnQgbWF4c3BsaXQpOworI2VuZGlmIC8qIFNUUklOR19MSVNUX0ggKi8KZGlmZiAtLWdpdCBhL3N1Ym1vZHVsZS5jIGIvc3VibW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmMjEzZQotLS0gL2Rldi9udWxsCisrKyBiL3N1Ym1vZHVsZS5jCkBAIC0wLDAgKzEsOTI1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBjb25maWdfbmFtZV9mb3JfcGF0aDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgY29uZmlnX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19mb3JfbmFtZTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgY29uZmlnX2lnbm9yZV9mb3JfbmFtZTsKK3N0YXRpYyBpbnQgY29uZmlnX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcyA9IFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQ7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGNoYW5nZWRfc3VibW9kdWxlX3BhdGhzOworc3RhdGljIGludCBpbml0aWFsaXplZF9mZXRjaF9yZWZfdGlwczsKK3N0YXRpYyBzdHJ1Y3Qgc2hhMV9hcnJheSByZWZfdGlwc19iZWZvcmVfZmV0Y2g7CitzdGF0aWMgc3RydWN0IHNoYTFfYXJyYXkgcmVmX3RpcHNfYWZ0ZXJfZmV0Y2g7CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZsYWcgaXMgc2V0IGlmIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIHVubWVyZ2VkLiBXZSB0aGVuCisgKiBkaXNhYmxlIHJlY3Vyc2lvbiBmb3IgYWxsIHN1Ym1vZHVsZXMgd2hlcmUgLmdpdC9jb25maWcgZG9lc24ndCBoYXZlIGEKKyAqIG1hdGNoaW5nIGNvbmZpZyBlbnRyeSBiZWNhdXNlIHdlIGNhbid0IGd1ZXNzIHdoYXQgbWlnaHQgYmUgY29uZmlndXJlZCBpbgorICogLmdpdG1vZHVsZXMgdW5sZXNzIHRoZSB1c2VyIHJlc29sdmVzIHRoZSBjb25mbGljdC4gV2hlbiBhIGNvbW1hbmQgbGluZQorICogb3B0aW9uIGlzIGdpdmVuICh3aGljaCBhbHdheXMgb3ZlcnJpZGVzIGNvbmZpZ3VyYXRpb24pIHRoaXMgZmxhZyB3aWxsIGJlCisgKiBpZ25vcmVkLgorICovCitzdGF0aWMgaW50IGdpdG1vZHVsZXNfaXNfdW5tZXJnZWQ7CisKK3N0YXRpYyBpbnQgYWRkX3N1Ym1vZHVsZV9vZGIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG9iamVjdHNfZGlyZWN0b3J5ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmFsdF9vZGI7CisJaW50IHJldCA9IDA7CisJY29uc3QgY2hhciAqZ2l0X2RpcjsKKworCXN0cmJ1Zl9hZGRmKCZvYmplY3RzX2RpcmVjdG9yeSwgIiVzLy5naXQiLCBwYXRoKTsKKwlnaXRfZGlyID0gcmVhZF9naXRmaWxlKG9iamVjdHNfZGlyZWN0b3J5LmJ1Zik7CisJaWYgKGdpdF9kaXIpIHsKKwkJc3RyYnVmX3Jlc2V0KCZvYmplY3RzX2RpcmVjdG9yeSk7CisJCXN0cmJ1Zl9hZGRzdHIoJm9iamVjdHNfZGlyZWN0b3J5LCBnaXRfZGlyKTsKKwl9CisJc3RyYnVmX2FkZHN0cigmb2JqZWN0c19kaXJlY3RvcnksICIvb2JqZWN0cy8iKTsKKwlpZiAoIWlzX2RpcmVjdG9yeShvYmplY3RzX2RpcmVjdG9yeS5idWYpKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCS8qIGF2b2lkIGFkZGluZyBpdCB0d2ljZSAqLworCWZvciAoYWx0X29kYiA9IGFsdF9vZGJfbGlzdDsgYWx0X29kYjsgYWx0X29kYiA9IGFsdF9vZGItPm5leHQpCisJCWlmIChhbHRfb2RiLT5uYW1lIC0gYWx0X29kYi0+YmFzZSA9PSBvYmplY3RzX2RpcmVjdG9yeS5sZW4gJiYKKwkJCQkhc3RybmNtcChhbHRfb2RiLT5iYXNlLCBvYmplY3RzX2RpcmVjdG9yeS5idWYsCisJCQkJCW9iamVjdHNfZGlyZWN0b3J5LmxlbikpCisJCQlnb3RvIGRvbmU7CisKKwlhbHRfb2RiID0geG1hbGxvYyhvYmplY3RzX2RpcmVjdG9yeS5sZW4gKyA0MiArIHNpemVvZigqYWx0X29kYikpOworCWFsdF9vZGItPm5leHQgPSBhbHRfb2RiX2xpc3Q7CisJc3RyY3B5KGFsdF9vZGItPmJhc2UsIG9iamVjdHNfZGlyZWN0b3J5LmJ1Zik7CisJYWx0X29kYi0+bmFtZSA9IGFsdF9vZGItPmJhc2UgKyBvYmplY3RzX2RpcmVjdG9yeS5sZW47CisJYWx0X29kYi0+bmFtZVsyXSA9ICcvJzsKKwlhbHRfb2RiLT5uYW1lWzQwXSA9ICdcMCc7CisJYWx0X29kYi0+bmFtZVs0MV0gPSAnXDAnOworCWFsdF9vZGJfbGlzdCA9IGFsdF9vZGI7CisKKwkvKiBhZGQgcG9zc2libGUgYWx0ZXJuYXRlcyBmcm9tIHRoZSBzdWJtb2R1bGUgKi8KKwlyZWFkX2luZm9fYWx0ZXJuYXRlcyhvYmplY3RzX2RpcmVjdG9yeS5idWYsIDApOworCXByZXBhcmVfYWx0X29kYigpOworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmb2JqZWN0c19kaXJlY3RvcnkpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgc2V0X2RpZmZvcHRfZmxhZ3NfZnJvbV9zdWJtb2R1bGVfY29uZmlnKHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCQkJCSAgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcGF0aF9vcHRpb24sICppZ25vcmVfb3B0aW9uOworCXBhdGhfb3B0aW9uID0gdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKCZjb25maWdfbmFtZV9mb3JfcGF0aCwgcGF0aCk7CisJaWYgKHBhdGhfb3B0aW9uKSB7CisJCWlnbm9yZV9vcHRpb24gPSB1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoJmNvbmZpZ19pZ25vcmVfZm9yX25hbWUsIHBhdGhfb3B0aW9uLT51dGlsKTsKKwkJaWYgKGlnbm9yZV9vcHRpb24pCisJCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKGRpZmZvcHQsIGlnbm9yZV9vcHRpb24tPnV0aWwpOworCQllbHNlIGlmIChnaXRtb2R1bGVzX2lzX3VubWVyZ2VkKQorCQkJRElGRl9PUFRfU0VUKGRpZmZvcHQsIElHTk9SRV9TVUJNT0RVTEVTKTsKKwl9Cit9CisKK2ludCBzdWJtb2R1bGVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghcHJlZml4Y21wKHZhciwgInN1Ym1vZHVsZS4iKSkKKwkJcmV0dXJuIHBhcnNlX3N1Ym1vZHVsZV9jb25maWdfb3B0aW9uKHZhciwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAodmFyLCAiZmV0Y2gucmVjdXJzZXN1Ym1vZHVsZXMiKSkgeworCQljb25maWdfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzID0gcGFyc2VfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzX2FyZyh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGdpdG1vZHVsZXNfY29uZmlnKHZvaWQpCit7CisJY29uc3QgY2hhciAqd29ya190cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKwlpZiAod29ya190cmVlKSB7CisJCXN0cnVjdCBzdHJidWYgZ2l0bW9kdWxlc19wYXRoID0gU1RSQlVGX0lOSVQ7CisJCWludCBwb3M7CisJCXN0cmJ1Zl9hZGRzdHIoJmdpdG1vZHVsZXNfcGF0aCwgd29ya190cmVlKTsKKwkJc3RyYnVmX2FkZHN0cigmZ2l0bW9kdWxlc19wYXRoLCAiLy5naXRtb2R1bGVzIik7CisJCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKKwkJcG9zID0gY2FjaGVfbmFtZV9wb3MoIi5naXRtb2R1bGVzIiwgMTEpOworCQlpZiAocG9zIDwgMCkgeyAvKiAuZ2l0bW9kdWxlcyBub3QgZm91bmQgb3IgaXNuJ3QgbWVyZ2VkICovCisJCQlwb3MgPSAtMSAtIHBvczsKKwkJCWlmIChhY3RpdmVfbnIgPiBwb3MpIHsgIC8qIHRoZXJlIGlzIGEgLmdpdG1vZHVsZXMgKi8KKwkJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCQkJaWYgKGNlX25hbWVsZW4oY2UpID09IDExICYmCisJCQkJICAgICFtZW1jbXAoY2UtPm5hbWUsICIuZ2l0bW9kdWxlcyIsIDExKSkKKwkJCQkJZ2l0bW9kdWxlc19pc191bm1lcmdlZCA9IDE7CisJCQl9CisJCX0KKworCQlpZiAoIWdpdG1vZHVsZXNfaXNfdW5tZXJnZWQpCisJCQlnaXRfY29uZmlnX2Zyb21fZmlsZShzdWJtb2R1bGVfY29uZmlnLCBnaXRtb2R1bGVzX3BhdGguYnVmLCBOVUxMKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmdpdG1vZHVsZXNfcGF0aCk7CisJfQorfQorCitpbnQgcGFyc2Vfc3VibW9kdWxlX2NvbmZpZ19vcHRpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpjb25maWc7CisJc3RydWN0IHN0cmJ1ZiBzdWJtb2RuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwl2YXIgKz0gMTA7CQkvKiBTa2lwICJzdWJtb2R1bGUuIiAqLworCisJbGVuID0gc3RybGVuKHZhcik7CisJaWYgKChsZW4gPiA1KSAmJiAhc3RyY21wKHZhciArIGxlbiAtIDUsICIucGF0aCIpKSB7CisJCXN0cmJ1Zl9hZGQoJnN1Ym1vZG5hbWUsIHZhciwgbGVuIC0gNSk7CisJCWNvbmZpZyA9IHVuc29ydGVkX3N0cmluZ19saXN0X2xvb2t1cCgmY29uZmlnX25hbWVfZm9yX3BhdGgsIHZhbHVlKTsKKwkJaWYgKGNvbmZpZykKKwkJCWZyZWUoY29uZmlnLT51dGlsKTsKKwkJZWxzZQorCQkJY29uZmlnID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZjb25maWdfbmFtZV9mb3JfcGF0aCwgeHN0cmR1cCh2YWx1ZSkpOworCQljb25maWctPnV0aWwgPSBzdHJidWZfZGV0YWNoKCZzdWJtb2RuYW1lLCBOVUxMKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZG5hbWUpOworCX0gZWxzZSBpZiAoKGxlbiA+IDIzKSAmJiAhc3RyY21wKHZhciArIGxlbiAtIDIzLCAiLmZldGNocmVjdXJzZXN1Ym1vZHVsZXMiKSkgeworCQlzdHJidWZfYWRkKCZzdWJtb2RuYW1lLCB2YXIsIGxlbiAtIDIzKTsKKwkJY29uZmlnID0gdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKCZjb25maWdfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzX2Zvcl9uYW1lLCBzdWJtb2RuYW1lLmJ1Zik7CisJCWlmICghY29uZmlnKQorCQkJY29uZmlnID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZjb25maWdfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzX2Zvcl9uYW1lLAorCQkJCQkJICAgIHN0cmJ1Zl9kZXRhY2goJnN1Ym1vZG5hbWUsIE5VTEwpKTsKKwkJY29uZmlnLT51dGlsID0gKHZvaWQgKikoaW50cHRyX3QpcGFyc2VfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzX2FyZyh2YXIsIHZhbHVlKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZG5hbWUpOworCX0gZWxzZSBpZiAoKGxlbiA+IDcpICYmICFzdHJjbXAodmFyICsgbGVuIC0gNywgIi5pZ25vcmUiKSkgeworCQlpZiAoc3RyY21wKHZhbHVlLCAidW50cmFja2VkIikgJiYgc3RyY21wKHZhbHVlLCAiZGlydHkiKSAmJgorCQkgICAgc3RyY21wKHZhbHVlLCAiYWxsIikgJiYgc3RyY21wKHZhbHVlLCAibm9uZSIpKSB7CisJCQl3YXJuaW5nKCJJbnZhbGlkIHBhcmFtZXRlciBcIiVzXCIgZm9yIGNvbmZpZyBvcHRpb24gXCJzdWJtb2R1bGUuJXMuaWdub3JlXCIiLCB2YWx1ZSwgdmFyKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJc3RyYnVmX2FkZCgmc3VibW9kbmFtZSwgdmFyLCBsZW4gLSA3KTsKKwkJY29uZmlnID0gdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKCZjb25maWdfaWdub3JlX2Zvcl9uYW1lLCBzdWJtb2RuYW1lLmJ1Zik7CisJCWlmIChjb25maWcpCisJCQlmcmVlKGNvbmZpZy0+dXRpbCk7CisJCWVsc2UKKwkJCWNvbmZpZyA9IHN0cmluZ19saXN0X2FwcGVuZCgmY29uZmlnX2lnbm9yZV9mb3JfbmFtZSwKKwkJCQkJCSAgICBzdHJidWZfZGV0YWNoKCZzdWJtb2RuYW1lLCBOVUxMKSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzdWJtb2RuYW1lKTsKKwkJY29uZmlnLT51dGlsID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBoYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCQkJICBjb25zdCBjaGFyICphcmcpCit7CisJRElGRl9PUFRfQ0xSKGRpZmZvcHQsIElHTk9SRV9TVUJNT0RVTEVTKTsKKwlESUZGX09QVF9DTFIoZGlmZm9wdCwgSUdOT1JFX1VOVFJBQ0tFRF9JTl9TVUJNT0RVTEVTKTsKKwlESUZGX09QVF9DTFIoZGlmZm9wdCwgSUdOT1JFX0RJUlRZX1NVQk1PRFVMRVMpOworCisJaWYgKCFzdHJjbXAoYXJnLCAiYWxsIikpCisJCURJRkZfT1BUX1NFVChkaWZmb3B0LCBJR05PUkVfU1VCTU9EVUxFUyk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ1bnRyYWNrZWQiKSkKKwkJRElGRl9PUFRfU0VUKGRpZmZvcHQsIElHTk9SRV9VTlRSQUNLRURfSU5fU1VCTU9EVUxFUyk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkaXJ0eSIpKQorCQlESUZGX09QVF9TRVQoZGlmZm9wdCwgSUdOT1JFX0RJUlRZX1NVQk1PRFVMRVMpOworCWVsc2UgaWYgKHN0cmNtcChhcmcsICJub25lIikpCisJCWRpZSgiYmFkIC0taWdub3JlLXN1Ym1vZHVsZXMgYXJndW1lbnQ6ICVzIiwgYXJnKTsKK30KKworc3RhdGljIGludCBwcmVwYXJlX3N1Ym1vZHVsZV9zdW1tYXJ5KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBjb25zdCBjaGFyICpwYXRoLAorCQlzdHJ1Y3QgY29tbWl0ICpsZWZ0LCBzdHJ1Y3QgY29tbWl0ICpyaWdodCwKKwkJaW50ICpmYXN0X2ZvcndhcmQsIGludCAqZmFzdF9iYWNrd2FyZCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm1lcmdlX2Jhc2VzLCAqbGlzdDsKKworCWluaXRfcmV2aXNpb25zKHJldiwgTlVMTCk7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsIHJldiwgTlVMTCk7CisJcmV2LT5sZWZ0X3JpZ2h0ID0gMTsKKwlyZXYtPmZpcnN0X3BhcmVudF9vbmx5ID0gMTsKKwlsZWZ0LT5vYmplY3QuZmxhZ3MgfD0gU1lNTUVUUklDX0xFRlQ7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldiwgJmxlZnQtPm9iamVjdCwgcGF0aCk7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldiwgJnJpZ2h0LT5vYmplY3QsIHBhdGgpOworCW1lcmdlX2Jhc2VzID0gZ2V0X21lcmdlX2Jhc2VzKGxlZnQsIHJpZ2h0LCAxKTsKKwlpZiAobWVyZ2VfYmFzZXMpIHsKKwkJaWYgKG1lcmdlX2Jhc2VzLT5pdGVtID09IGxlZnQpCisJCQkqZmFzdF9mb3J3YXJkID0gMTsKKwkJZWxzZSBpZiAobWVyZ2VfYmFzZXMtPml0ZW0gPT0gcmlnaHQpCisJCQkqZmFzdF9iYWNrd2FyZCA9IDE7CisJfQorCWZvciAobGlzdCA9IG1lcmdlX2Jhc2VzOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQlsaXN0LT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldiwgJmxpc3QtPml0ZW0tPm9iamVjdCwKKwkJCXNoYTFfdG9faGV4KGxpc3QtPml0ZW0tPm9iamVjdC5zaGExKSk7CisJfQorCXJldHVybiBwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2KTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3VibW9kdWxlX3N1bW1hcnkoc3RydWN0IHJldl9pbmZvICpyZXYsIEZJTEUgKmYsCisJCWNvbnN0IGNoYXIgKmRlbCwgY29uc3QgY2hhciAqYWRkLCBjb25zdCBjaGFyICpyZXNldCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBmb3JtYXRbXSA9ICIgICVtICVzIjsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2KSkpIHsKKwkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJY3R4LmRhdGVfbW9kZSA9IHJldi0+ZGF0ZV9tb2RlOworCQlzdHJidWZfc2V0bGVuKCZzYiwgMCk7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKSB7CisJCQlpZiAoZGVsKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBkZWwpOworCQl9CisJCWVsc2UgaWYgKGFkZCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBhZGQpOworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCBmb3JtYXQsICZzYiwgJmN0eCk7CisJCWlmIChyZXNldCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCByZXNldCk7CisJCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCQlmcHJpbnRmKGYsICIlcyIsIHNiLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK2ludCBwYXJzZV9mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnKQoreworCXN3aXRjaCAoZ2l0X2NvbmZpZ19tYXliZV9ib29sKG9wdCwgYXJnKSkgeworCWNhc2UgMToKKwkJcmV0dXJuIFJFQ1VSU0VfU1VCTU9EVUxFU19PTjsKKwljYXNlIDA6CisJCXJldHVybiBSRUNVUlNFX1NVQk1PRFVMRVNfT0ZGOworCWRlZmF1bHQ6CisJCWlmICghc3RyY21wKGFyZywgIm9uLWRlbWFuZCIpKQorCQkJcmV0dXJuIFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQ7CisJCWRpZSgiYmFkICVzIGFyZ3VtZW50OiAlcyIsIG9wdCwgYXJnKTsKKwl9Cit9CisKK3ZvaWQgc2hvd19zdWJtb2R1bGVfc3VtbWFyeShGSUxFICpmLCBjb25zdCBjaGFyICpwYXRoLAorCQl1bnNpZ25lZCBjaGFyIG9uZVsyMF0sIHVuc2lnbmVkIGNoYXIgdHdvWzIwXSwKKwkJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlLAorCQljb25zdCBjaGFyICpkZWwsIGNvbnN0IGNoYXIgKmFkZCwgY29uc3QgY2hhciAqcmVzZXQpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3QgY29tbWl0ICpsZWZ0ID0gbGVmdCwgKnJpZ2h0ID0gcmlnaHQ7CisJY29uc3QgY2hhciAqbWVzc2FnZSA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBmYXN0X2ZvcndhcmQgPSAwLCBmYXN0X2JhY2t3YXJkID0gMDsKKworCWlmIChpc19udWxsX3NoYTEodHdvKSkKKwkJbWVzc2FnZSA9ICIoc3VibW9kdWxlIGRlbGV0ZWQpIjsKKwllbHNlIGlmIChhZGRfc3VibW9kdWxlX29kYihwYXRoKSkKKwkJbWVzc2FnZSA9ICIobm90IGNoZWNrZWQgb3V0KSI7CisJZWxzZSBpZiAoaXNfbnVsbF9zaGExKG9uZSkpCisJCW1lc3NhZ2UgPSAiKG5ldyBzdWJtb2R1bGUpIjsKKwllbHNlIGlmICghKGxlZnQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShvbmUpKSB8fAorCQkgIShyaWdodCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHR3bykpKQorCQltZXNzYWdlID0gIihjb21taXRzIG5vdCBwcmVzZW50KSI7CisKKwlpZiAoIW1lc3NhZ2UgJiYKKwkgICAgcHJlcGFyZV9zdWJtb2R1bGVfc3VtbWFyeSgmcmV2LCBwYXRoLCBsZWZ0LCByaWdodCwKKwkJCQkJJmZhc3RfZm9yd2FyZCwgJmZhc3RfYmFja3dhcmQpKQorCQltZXNzYWdlID0gIihyZXZpc2lvbiB3YWxrZXIgZmFpbGVkKSI7CisKKwlpZiAoZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRCkKKwkJZnByaW50ZihmLCAiU3VibW9kdWxlICVzIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50XG4iLCBwYXRoKTsKKwlpZiAoZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX01PRElGSUVEKQorCQlmcHJpbnRmKGYsICJTdWJtb2R1bGUgJXMgY29udGFpbnMgbW9kaWZpZWQgY29udGVudFxuIiwgcGF0aCk7CisKKwlpZiAoIWhhc2hjbXAob25lLCB0d28pKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybjsKKwl9CisKKwlzdHJidWZfYWRkZigmc2IsICJTdWJtb2R1bGUgJXMgJXMuLiIsIHBhdGgsCisJCQlmaW5kX3VuaXF1ZV9hYmJyZXYob25lLCBERUZBVUxUX0FCQlJFVikpOworCWlmICghZmFzdF9iYWNrd2FyZCAmJiAhZmFzdF9mb3J3YXJkKQorCQlzdHJidWZfYWRkY2goJnNiLCAnLicpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzIiwgZmluZF91bmlxdWVfYWJicmV2KHR3bywgREVGQVVMVF9BQkJSRVYpKTsKKwlpZiAobWVzc2FnZSkKKwkJc3RyYnVmX2FkZGYoJnNiLCAiICVzXG4iLCBtZXNzYWdlKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzOlxuIiwgZmFzdF9iYWNrd2FyZCA/ICIgKHJld2luZCkiIDogIiIpOworCWZ3cml0ZShzYi5idWYsIHNiLmxlbiwgMSwgZik7CisKKwlpZiAoIW1lc3NhZ2UpIHsKKwkJcHJpbnRfc3VibW9kdWxlX3N1bW1hcnkoJnJldiwgZiwgZGVsLCBhZGQsIHJlc2V0KTsKKwkJY2xlYXJfY29tbWl0X21hcmtzKGxlZnQsIH4wKTsKKwkJY2xlYXJfY29tbWl0X21hcmtzKHJpZ2h0LCB+MCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKwordm9pZCBzZXRfY29uZmlnX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcyhpbnQgdmFsdWUpCit7CisJY29uZmlnX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcyA9IHZhbHVlOworfQorCitzdGF0aWMgaW50IGhhc19yZW1vdGUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHN1Ym1vZHVsZV9uZWVkc19wdXNoaW5nKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0pCit7CisJaWYgKGFkZF9zdWJtb2R1bGVfb2RiKHBhdGgpIHx8ICFsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZm9yX2VhY2hfcmVtb3RlX3JlZl9zdWJtb2R1bGUocGF0aCwgaGFzX3JlbW90ZSwgTlVMTCkgPiAwKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwOworCQljb25zdCBjaGFyICphcmd2W10gPSB7InJldi1saXN0IiwgTlVMTCwgIi0tbm90IiwgIi0tcmVtb3RlcyIsICItbiIsICIxIiAsIE5VTEx9OworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgbmVlZHNfcHVzaGluZyA9IDA7CisKKwkJYXJndlsxXSA9IHNoYTFfdG9faGV4KHNoYTEpOworCQltZW1zZXQoJmNwLCAwLCBzaXplb2YoY3ApKTsKKwkJY3AuYXJndiA9IGFyZ3Y7CisJCWNwLmVudiA9IGxvY2FsX3JlcG9fZW52OworCQljcC5naXRfY21kID0gMTsKKwkJY3Aubm9fc3RkaW4gPSAxOworCQljcC5vdXQgPSAtMTsKKwkJY3AuZGlyID0gcGF0aDsKKwkJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSkKKwkJCWRpZSgiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0ICVzIC0tbm90IC0tcmVtb3RlcyAtbiAxJyBjb21tYW5kIGluIHN1Ym1vZHVsZSAlcyIsCisJCQkJc2hhMV90b19oZXgoc2hhMSksIHBhdGgpOworCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgY3Aub3V0LCA0MSkpCisJCQluZWVkc19wdXNoaW5nID0gMTsKKwkJZmluaXNoX2NvbW1hbmQoJmNwKTsKKwkJY2xvc2UoY3Aub3V0KTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiBuZWVkc19wdXNoaW5nOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0X3N1Ym1vZHVsZXNfZnJvbV9kaWZmKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCQkJIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJCSB2b2lkICpkYXRhKQoreworCWludCBpOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbmVlZHNfcHVzaGluZyA9IGRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlpZiAoIVNfSVNHSVRMSU5LKHAtPnR3by0+bW9kZSkpCisJCQljb250aW51ZTsKKwkJaWYgKHN1Ym1vZHVsZV9uZWVkc19wdXNoaW5nKHAtPnR3by0+cGF0aCwgcC0+dHdvLT5zaGExKSkKKwkJCXN0cmluZ19saXN0X2luc2VydChuZWVkc19wdXNoaW5nLCBwLT50d28tPnBhdGgpOworCX0KK30KKworc3RhdGljIHZvaWQgZmluZF91bnB1c2hlZF9zdWJtb2R1bGVfY29tbWl0cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCXN0cnVjdCBzdHJpbmdfbGlzdCAqbmVlZHNfcHVzaGluZykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSBjb2xsZWN0X3N1Ym1vZHVsZXNfZnJvbV9kaWZmOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gbmVlZHNfcHVzaGluZzsKKwlkaWZmX3RyZWVfY29tYmluZWRfbWVyZ2UoY29tbWl0LCAxLCAmcmV2KTsKK30KKworaW50IGZpbmRfdW5wdXNoZWRfc3VibW9kdWxlcyh1bnNpZ25lZCBjaGFyIG5ld19zaGExWzIwXSwKKwkJY29uc3QgY2hhciAqcmVtb3Rlc19uYW1lLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm5lZWRzX3B1c2hpbmcpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJY29uc3QgY2hhciAqYXJndltdID0ge05VTEwsIE5VTEwsICItLW5vdCIsICJOVUxMIiwgTlVMTH07CisJaW50IGFyZ2MgPSBBUlJBWV9TSVpFKGFyZ3YpIC0gMTsKKwljaGFyICpzaGExX2NvcHk7CisKKwlzdHJ1Y3Qgc3RyYnVmIHJlbW90ZXNfYXJnID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmcmVtb3Rlc19hcmcsICItLXJlbW90ZXM9JXMiLCByZW1vdGVzX25hbWUpOworCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOworCXNoYTFfY29weSA9IHhzdHJkdXAoc2hhMV90b19oZXgobmV3X3NoYTEpKTsKKwlhcmd2WzFdID0gc2hhMV9jb3B5OworCWFyZ3ZbM10gPSByZW1vdGVzX2FyZy5idWY7CisJc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpOworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldikpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXYpKSAhPSBOVUxMKQorCQlmaW5kX3VucHVzaGVkX3N1Ym1vZHVsZV9jb21taXRzKGNvbW1pdCwgbmVlZHNfcHVzaGluZyk7CisKKwlyZXNldF9yZXZpc2lvbl93YWxrKCk7CisJZnJlZShzaGExX2NvcHkpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZW1vdGVzX2FyZyk7CisKKwlyZXR1cm4gbmVlZHNfcHVzaGluZy0+bnI7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF9zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoYWRkX3N1Ym1vZHVsZV9vZGIocGF0aCkpCisJCXJldHVybiAxOworCisJaWYgKGZvcl9lYWNoX3JlbW90ZV9yZWZfc3VibW9kdWxlKHBhdGgsIGhhc19yZW1vdGUsIE5VTEwpID4gMCkgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcDsKKwkJY29uc3QgY2hhciAqYXJndltdID0geyJwdXNoIiwgTlVMTH07CisKKwkJbWVtc2V0KCZjcCwgMCwgc2l6ZW9mKGNwKSk7CisJCWNwLmFyZ3YgPSBhcmd2OworCQljcC5lbnYgPSBsb2NhbF9yZXBvX2VudjsKKwkJY3AuZ2l0X2NtZCA9IDE7CisJCWNwLm5vX3N0ZGluID0gMTsKKwkJY3AuZGlyID0gcGF0aDsKKwkJaWYgKHJ1bl9jb21tYW5kKCZjcCkpCisJCQlyZXR1cm4gMDsKKwkJY2xvc2UoY3Aub3V0KTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworaW50IHB1c2hfdW5wdXNoZWRfc3VibW9kdWxlcyh1bnNpZ25lZCBjaGFyIG5ld19zaGExWzIwXSwgY29uc3QgY2hhciAqcmVtb3Rlc19uYW1lKQoreworCWludCBpLCByZXQgPSAxOworCXN0cnVjdCBzdHJpbmdfbGlzdCBuZWVkc19wdXNoaW5nOworCisJbWVtc2V0KCZuZWVkc19wdXNoaW5nLCAwLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CisJbmVlZHNfcHVzaGluZy5zdHJkdXBfc3RyaW5ncyA9IDE7CisKKwlpZiAoIWZpbmRfdW5wdXNoZWRfc3VibW9kdWxlcyhuZXdfc2hhMSwgcmVtb3Rlc19uYW1lLCAmbmVlZHNfcHVzaGluZykpCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IG5lZWRzX3B1c2hpbmcubnI7IGkrKykgeworCQljb25zdCBjaGFyICpwYXRoID0gbmVlZHNfcHVzaGluZy5pdGVtc1tpXS5zdHJpbmc7CisJCWZwcmludGYoc3RkZXJyLCAiUHVzaGluZyBzdWJtb2R1bGUgJyVzJ1xuIiwgcGF0aCk7CisJCWlmICghcHVzaF9zdWJtb2R1bGUocGF0aCkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHB1c2ggc3VibW9kdWxlICclcydcbiIsIHBhdGgpOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZuZWVkc19wdXNoaW5nLCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfc3VibW9kdWxlX2NvbW1pdF9wcmVzZW50KGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0pCit7CisJaW50IGlzX3ByZXNlbnQgPSAwOworCWlmICghYWRkX3N1Ym1vZHVsZV9vZGIocGF0aCkgJiYgbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSkpIHsKKwkJLyogRXZlbiBpZiB0aGUgc3VibW9kdWxlIGlzIGNoZWNrZWQgb3V0IGFuZCB0aGUgY29tbWl0IGlzCisJCSAqIHByZXNlbnQsIG1ha2Ugc3VyZSBpdCBpcyByZWFjaGFibGUgZnJvbSBhIHJlZi4gKi8KKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3A7CisJCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsicmV2LWxpc3QiLCAiLW4iLCAiMSIsIE5VTEwsICItLW5vdCIsICItLWFsbCIsIE5VTEx9OworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWFyZ3ZbM10gPSBzaGExX3RvX2hleChzaGExKTsKKwkJbWVtc2V0KCZjcCwgMCwgc2l6ZW9mKGNwKSk7CisJCWNwLmFyZ3YgPSBhcmd2OworCQljcC5lbnYgPSBsb2NhbF9yZXBvX2VudjsKKwkJY3AuZ2l0X2NtZCA9IDE7CisJCWNwLm5vX3N0ZGluID0gMTsKKwkJY3Aub3V0ID0gLTE7CisJCWNwLmRpciA9IHBhdGg7CisJCWlmICghcnVuX2NvbW1hbmQoJmNwKSAmJiAhc3RyYnVmX3JlYWQoJmJ1ZiwgY3Aub3V0LCAxMDI0KSkKKwkJCWlzX3ByZXNlbnQgPSAxOworCisJCWNsb3NlKGNwLm91dCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKwlyZXR1cm4gaXNfcHJlc2VudDsKK30KKworc3RhdGljIHZvaWQgc3VibW9kdWxlX2NvbGxlY3RfY2hhbmdlZF9jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkJCQkgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlpZiAoIVNfSVNHSVRMSU5LKHAtPnR3by0+bW9kZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoU19JU0dJVExJTksocC0+b25lLT5tb2RlKSkgeworCQkJLyogTkVFRFNXT1JLOiBXZSBzaG91bGQgaG9ub3IgdGhlIG5hbWUgY29uZmlndXJlZCBpbgorCQkJICogdGhlIC5naXRtb2R1bGVzIGZpbGUgb2YgdGhlIGNvbW1pdCB3ZSBhcmUgZXhhbWluaW5nCisJCQkgKiBoZXJlIHRvIGJlIGFibGUgdG8gY29ycmVjdGx5IGZvbGxvdyBzdWJtb2R1bGVzCisJCQkgKiBiZWluZyBtb3ZlZCBhcm91bmQuICovCisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcGF0aDsKKwkJCXBhdGggPSB1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoJmNoYW5nZWRfc3VibW9kdWxlX3BhdGhzLCBwLT50d28tPnBhdGgpOworCQkJaWYgKCFwYXRoICYmICFpc19zdWJtb2R1bGVfY29tbWl0X3ByZXNlbnQocC0+dHdvLT5wYXRoLCBwLT50d28tPnNoYTEpKQorCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmY2hhbmdlZF9zdWJtb2R1bGVfcGF0aHMsIHhzdHJkdXAocC0+dHdvLT5wYXRoKSk7CisJCX0gZWxzZSB7CisJCQkvKiBTdWJtb2R1bGUgaXMgbmV3IG9yIHdhcyBtb3ZlZCBoZXJlICovCisJCQkvKiBORUVEU1dPUks6IFdoZW4gdGhlIC5naXQgZGlyZWN0b3JpZXMgb2Ygc3VibW9kdWxlcworCQkJICogbGl2ZSBpbnNpZGUgdGhlIHN1cGVycHJvamVjdHMgLmdpdCBkaXJlY3Rvcnkgc29tZQorCQkJICogZGF5IHdlIHNob3VsZCBmZXRjaCBuZXcgc3VibW9kdWxlcyBkaXJlY3RseSBpbnRvCisJCQkgKiB0aGF0IGxvY2F0aW9uIHRvbyB3aGVuIGNvbmZpZyBvciBvcHRpb25zIHJlcXVlc3QKKwkJCSAqIHRoYXQgc28gdGhleSBjYW4gYmUgY2hlY2tlZCBvdXQgZnJvbSB0aGVyZS4gKi8KKwkJCWNvbnRpbnVlOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGFkZF9zaGExX3RvX2FycmF5KGNvbnN0IGNoYXIgKnJlZiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgICAgaW50IGZsYWdzLCB2b2lkICpkYXRhKQoreworCXNoYTFfYXJyYXlfYXBwZW5kKGRhdGEsIHNoYTEpOworCXJldHVybiAwOworfQorCit2b2lkIGNoZWNrX2Zvcl9uZXdfc3VibW9kdWxlX2NvbW1pdHModW5zaWduZWQgY2hhciBuZXdfc2hhMVsyMF0pCit7CisJaWYgKCFpbml0aWFsaXplZF9mZXRjaF9yZWZfdGlwcykgeworCQlmb3JfZWFjaF9yZWYoYWRkX3NoYTFfdG9fYXJyYXksICZyZWZfdGlwc19iZWZvcmVfZmV0Y2gpOworCQlpbml0aWFsaXplZF9mZXRjaF9yZWZfdGlwcyA9IDE7CisJfQorCisJc2hhMV9hcnJheV9hcHBlbmQoJnJlZl90aXBzX2FmdGVyX2ZldGNoLCBuZXdfc2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9zaGExX3RvX2FyZ3YoY29uc3QgdW5zaWduZWQgY2hhciBzaGExWzIwXSwgdm9pZCAqZGF0YSkKK3sKKwlhcmd2X2FycmF5X3B1c2goZGF0YSwgc2hhMV90b19oZXgoc2hhMSkpOworfQorCitzdGF0aWMgdm9pZCBjYWxjdWxhdGVfY2hhbmdlZF9zdWJtb2R1bGVfcGF0aHModm9pZCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCisJLyogTm8gbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgbm8gc3VibW9kdWxlcyBjb25maWd1cmVkICovCisJaWYgKCFjb25maWdfbmFtZV9mb3JfcGF0aC5ucikKKwkJcmV0dXJuOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiLS0iKTsgLyogYXJndlswXSBwcm9ncmFtIG5hbWUgKi8KKwlzaGExX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmcmVmX3RpcHNfYWZ0ZXJfZmV0Y2gsCisJCQkJICAgYWRkX3NoYTFfdG9fYXJndiwgJmFyZ3YpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgIi0tbm90Iik7CisJc2hhMV9hcnJheV9mb3JfZWFjaF91bmlxdWUoJnJlZl90aXBzX2JlZm9yZV9mZXRjaCwKKwkJCQkgICBhZGRfc2hhMV90b19hcmd2LCAmYXJndik7CisJc2V0dXBfcmV2aXNpb25zKGFyZ3YuYXJnYywgYXJndi5hcmd2LCAmcmV2LCBOVUxMKTsKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXYpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisKKwkvKgorCSAqIENvbGxlY3QgYWxsIHN1Ym1vZHVsZXMgKHdoZXRoZXIgY2hlY2tlZCBvdXQgb3Igbm90KSBmb3Igd2hpY2ggbmV3CisJICogY29tbWl0cyBoYXZlIGJlZW4gcmVjb3JkZWQgdXBzdHJlYW0gaW4gImNoYW5nZWRfc3VibW9kdWxlX3BhdGhzIi4KKwkgKi8KKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2KSkpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisJCXdoaWxlIChwYXJlbnQpIHsKKwkJCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRzOworCQkJZGlmZl9zZXR1cCgmZGlmZl9vcHRzKTsKKwkJCURJRkZfT1BUX1NFVCgmZGlmZl9vcHRzLCBSRUNVUlNJVkUpOworCQkJZGlmZl9vcHRzLm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJCQlkaWZmX29wdHMuZm9ybWF0X2NhbGxiYWNrID0gc3VibW9kdWxlX2NvbGxlY3RfY2hhbmdlZF9jYjsKKwkJCWRpZmZfc2V0dXBfZG9uZSgmZGlmZl9vcHRzKTsKKwkJCWRpZmZfdHJlZV9zaGExKHBhcmVudC0+aXRlbS0+b2JqZWN0LnNoYTEsIGNvbW1pdC0+b2JqZWN0LnNoYTEsICIiLCAmZGlmZl9vcHRzKTsKKwkJCWRpZmZjb3JlX3N0ZCgmZGlmZl9vcHRzKTsKKwkJCWRpZmZfZmx1c2goJmRpZmZfb3B0cyk7CisJCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJCX0KKwl9CisKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKwlzaGExX2FycmF5X2NsZWFyKCZyZWZfdGlwc19iZWZvcmVfZmV0Y2gpOworCXNoYTFfYXJyYXlfY2xlYXIoJnJlZl90aXBzX2FmdGVyX2ZldGNoKTsKKwlpbml0aWFsaXplZF9mZXRjaF9yZWZfdGlwcyA9IDA7Cit9CisKK2ludCBmZXRjaF9wb3B1bGF0ZWRfc3VibW9kdWxlcyhjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqb3B0aW9ucywKKwkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGludCBjb21tYW5kX2xpbmVfb3B0aW9uLAorCQkJICAgICAgIGludCBxdWlldCkKK3sKKwlpbnQgaSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpuYW1lX2Zvcl9wYXRoOworCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9IGdldF9naXRfd29ya190cmVlKCk7CisJaWYgKCF3b3JrX3RyZWUpCisJCWdvdG8gb3V0OworCisJaWYgKCF0aGVfaW5kZXguaW5pdGlhbGl6ZWQpCisJCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgImZldGNoIik7CisJZm9yIChpID0gMDsgaSA8IG9wdGlvbnMtPmFyZ2M7IGkrKykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCBvcHRpb25zLT5hcmd2W2ldKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICItLXJlY3Vyc2Utc3VibW9kdWxlcy1kZWZhdWx0Iik7CisJLyogZGVmYXVsdCB2YWx1ZSwgIi0tc3VibW9kdWxlLXByZWZpeCIgYW5kIGl0cyB2YWx1ZSBhcmUgYWRkZWQgbGF0ZXIgKi8KKworCW1lbXNldCgmY3AsIDAsIHNpemVvZihjcCkpOworCWNwLmVudiA9IGxvY2FsX3JlcG9fZW52OworCWNwLmdpdF9jbWQgPSAxOworCWNwLm5vX3N0ZGluID0gMTsKKworCWNhbGN1bGF0ZV9jaGFuZ2VkX3N1Ym1vZHVsZV9wYXRocygpOworCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJidWYgc3VibW9kdWxlX3BhdGggPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiBzdWJtb2R1bGVfZ2l0X2RpciA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIHN1Ym1vZHVsZV9wcmVmaXggPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJY29uc3QgY2hhciAqZ2l0X2RpciwgKm5hbWUsICpkZWZhdWx0X2FyZ3Y7CisKKwkJaWYgKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsKKworCQluYW1lID0gY2UtPm5hbWU7CisJCW5hbWVfZm9yX3BhdGggPSB1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoJmNvbmZpZ19uYW1lX2Zvcl9wYXRoLCBjZS0+bmFtZSk7CisJCWlmIChuYW1lX2Zvcl9wYXRoKQorCQkJbmFtZSA9IG5hbWVfZm9yX3BhdGgtPnV0aWw7CisKKwkJZGVmYXVsdF9hcmd2ID0gInllcyI7CisJCWlmIChjb21tYW5kX2xpbmVfb3B0aW9uID09IFJFQ1VSU0VfU1VCTU9EVUxFU19ERUZBVUxUKSB7CisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzX29wdGlvbjsKKwkJCWZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19vcHRpb24gPSB1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoJmNvbmZpZ19mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXNfZm9yX25hbWUsIG5hbWUpOworCQkJaWYgKGZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19vcHRpb24pIHsKKwkJCQlpZiAoKGludHB0cl90KWZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19vcHRpb24tPnV0aWwgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09GRikKKwkJCQkJY29udGludWU7CisJCQkJaWYgKChpbnRwdHJfdClmZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXNfb3B0aW9uLT51dGlsID09IFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQpIHsKKwkJCQkJaWYgKCF1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoJmNoYW5nZWRfc3VibW9kdWxlX3BhdGhzLCBjZS0+bmFtZSkpCisJCQkJCQljb250aW51ZTsKKwkJCQkJZGVmYXVsdF9hcmd2ID0gIm9uLWRlbWFuZCI7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoKGNvbmZpZ19mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09GRikgfHwKKwkJCQkgICAgZ2l0bW9kdWxlc19pc191bm1lcmdlZCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKGNvbmZpZ19mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCkgeworCQkJCQlpZiAoIXVuc29ydGVkX3N0cmluZ19saXN0X2xvb2t1cCgmY2hhbmdlZF9zdWJtb2R1bGVfcGF0aHMsIGNlLT5uYW1lKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlkZWZhdWx0X2FyZ3YgPSAib24tZGVtYW5kIjsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoY29tbWFuZF9saW5lX29wdGlvbiA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EKSB7CisJCQlpZiAoIXVuc29ydGVkX3N0cmluZ19saXN0X2xvb2t1cCgmY2hhbmdlZF9zdWJtb2R1bGVfcGF0aHMsIGNlLT5uYW1lKSkKKwkJCQljb250aW51ZTsKKwkJCWRlZmF1bHRfYXJndiA9ICJvbi1kZW1hbmQiOworCQl9CisKKwkJc3RyYnVmX2FkZGYoJnN1Ym1vZHVsZV9wYXRoLCAiJXMvJXMiLCB3b3JrX3RyZWUsIGNlLT5uYW1lKTsKKwkJc3RyYnVmX2FkZGYoJnN1Ym1vZHVsZV9naXRfZGlyLCAiJXMvLmdpdCIsIHN1Ym1vZHVsZV9wYXRoLmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZzdWJtb2R1bGVfcHJlZml4LCAiJXMlcy8iLCBwcmVmaXgsIGNlLT5uYW1lKTsKKwkJZ2l0X2RpciA9IHJlYWRfZ2l0ZmlsZShzdWJtb2R1bGVfZ2l0X2Rpci5idWYpOworCQlpZiAoIWdpdF9kaXIpCisJCQlnaXRfZGlyID0gc3VibW9kdWxlX2dpdF9kaXIuYnVmOworCQlpZiAoaXNfZGlyZWN0b3J5KGdpdF9kaXIpKSB7CisJCQlpZiAoIXF1aWV0KQorCQkJCXByaW50ZigiRmV0Y2hpbmcgc3VibW9kdWxlICVzJXNcbiIsIHByZWZpeCwgY2UtPm5hbWUpOworCQkJY3AuZGlyID0gc3VibW9kdWxlX3BhdGguYnVmOworCQkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCBkZWZhdWx0X2FyZ3YpOworCQkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiLS1zdWJtb2R1bGUtcHJlZml4Iik7CisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3YsIHN1Ym1vZHVsZV9wcmVmaXguYnVmKTsKKwkJCWNwLmFyZ3YgPSBhcmd2LmFyZ3Y7CisJCQlpZiAocnVuX2NvbW1hbmQoJmNwKSkKKwkJCQlyZXN1bHQgPSAxOworCQkJYXJndl9hcnJheV9wb3AoJmFyZ3YpOworCQkJYXJndl9hcnJheV9wb3AoJmFyZ3YpOworCQkJYXJndl9hcnJheV9wb3AoJmFyZ3YpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZzdWJtb2R1bGVfcGF0aCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzdWJtb2R1bGVfZ2l0X2Rpcik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzdWJtb2R1bGVfcHJlZml4KTsKKwl9CisJYXJndl9hcnJheV9jbGVhcigmYXJndik7CitvdXQ6CisJc3RyaW5nX2xpc3RfY2xlYXIoJmNoYW5nZWRfc3VibW9kdWxlX3BhdGhzLCAxKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCit1bnNpZ25lZCBpc19zdWJtb2R1bGVfbW9kaWZpZWQoY29uc3QgY2hhciAqcGF0aCwgaW50IGlnbm9yZV91bnRyYWNrZWQpCit7CisJc3NpemVfdCBsZW47CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3A7CisJY29uc3QgY2hhciAqYXJndltdID0geworCQkic3RhdHVzIiwKKwkJIi0tcG9yY2VsYWluIiwKKwkJTlVMTCwKKwkJTlVMTCwKKwl9OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlID0gMDsKKwljb25zdCBjaGFyICpsaW5lLCAqbmV4dF9saW5lOworCWNvbnN0IGNoYXIgKmdpdF9kaXI7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMvLmdpdCIsIHBhdGgpOworCWdpdF9kaXIgPSByZWFkX2dpdGZpbGUoYnVmLmJ1Zik7CisJaWYgKCFnaXRfZGlyKQorCQlnaXRfZGlyID0gYnVmLmJ1ZjsKKwlpZiAoIWlzX2RpcmVjdG9yeShnaXRfZGlyKSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJLyogVGhlIHN1Ym1vZHVsZSBpcyBub3QgY2hlY2tlZCBvdXQsIHNvIGl0IGlzIG5vdCBtb2RpZmllZCAqLworCQlyZXR1cm4gMDsKKworCX0KKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisKKwlpZiAoaWdub3JlX3VudHJhY2tlZCkKKwkJYXJndlsyXSA9ICItdW5vIjsKKworCW1lbXNldCgmY3AsIDAsIHNpemVvZihjcCkpOworCWNwLmFyZ3YgPSBhcmd2OworCWNwLmVudiA9IGxvY2FsX3JlcG9fZW52OworCWNwLmdpdF9jbWQgPSAxOworCWNwLm5vX3N0ZGluID0gMTsKKwljcC5vdXQgPSAtMTsKKwljcC5kaXIgPSBwYXRoOworCWlmIChzdGFydF9jb21tYW5kKCZjcCkpCisJCWRpZSgiQ291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicgaW4gc3VibW9kdWxlICVzIiwgcGF0aCk7CisKKwlsZW4gPSBzdHJidWZfcmVhZCgmYnVmLCBjcC5vdXQsIDEwMjQpOworCWxpbmUgPSBidWYuYnVmOworCXdoaWxlIChsZW4gPiAyKSB7CisJCWlmICgobGluZVswXSA9PSAnPycpICYmIChsaW5lWzFdID09ICc/JykpIHsKKwkJCWRpcnR5X3N1Ym1vZHVsZSB8PSBESVJUWV9TVUJNT0RVTEVfVU5UUkFDS0VEOworCQkJaWYgKGRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCkKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWRpcnR5X3N1Ym1vZHVsZSB8PSBESVJUWV9TVUJNT0RVTEVfTU9ESUZJRUQ7CisJCQlpZiAoaWdub3JlX3VudHJhY2tlZCB8fAorCQkJICAgIChkaXJ0eV9zdWJtb2R1bGUgJiBESVJUWV9TVUJNT0RVTEVfVU5UUkFDS0VEKSkKKwkJCQlicmVhazsKKwkJfQorCQluZXh0X2xpbmUgPSBzdHJjaHIobGluZSwgJ1xuJyk7CisJCWlmICghbmV4dF9saW5lKQorCQkJYnJlYWs7CisJCW5leHRfbGluZSsrOworCQlsZW4gLT0gKG5leHRfbGluZSAtIGxpbmUpOworCQlsaW5lID0gbmV4dF9saW5lOworCX0KKwljbG9zZShjcC5vdXQpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjcCkpCisJCWRpZSgiJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nIGZhaWxlZCBpbiBzdWJtb2R1bGUgJXMiLCBwYXRoKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiBkaXJ0eV9zdWJtb2R1bGU7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9maXJzdF9tZXJnZXMoc3RydWN0IG9iamVjdF9hcnJheSAqcmVzdWx0LCBjb25zdCBjaGFyICpwYXRoLAorCQlzdHJ1Y3QgY29tbWl0ICphLCBzdHJ1Y3QgY29tbWl0ICpiKQoreworCWludCBpLCBqOworCXN0cnVjdCBvYmplY3RfYXJyYXkgbWVyZ2VzOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgY29udGFpbnNfYW5vdGhlcjsKKworCWNoYXIgbWVyZ2VkX3JldmlzaW9uWzQyXTsKKwljb25zdCBjaGFyICpyZXZfYXJnc1tdID0geyAicmV2LWxpc3QiLCAiLS1tZXJnZXMiLCAiLS1hbmNlc3RyeS1wYXRoIiwKKwkJCQkgICAiLS1hbGwiLCBtZXJnZWRfcmV2aXNpb24sIE5VTEwgfTsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IHJldl9vcHRzOworCisJbWVtc2V0KCZtZXJnZXMsIDAsIHNpemVvZihtZXJnZXMpKTsKKwltZW1zZXQocmVzdWx0LCAwLCBzaXplb2Yoc3RydWN0IG9iamVjdF9hcnJheSkpOworCW1lbXNldCgmcmV2X29wdHMsIDAsIHNpemVvZihyZXZfb3B0cykpOworCisJLyogZ2V0IGFsbCByZXZpc2lvbnMgdGhhdCBtZXJnZSBjb21taXQgYSAqLworCXNucHJpbnRmKG1lcmdlZF9yZXZpc2lvbiwgc2l6ZW9mKG1lcmdlZF9yZXZpc2lvbiksICJeJXMiLAorCQkJc2hhMV90b19oZXgoYS0+b2JqZWN0LnNoYTEpKTsKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJcmV2X29wdHMuc3VibW9kdWxlID0gcGF0aDsKKwlzZXR1cF9yZXZpc2lvbnMoc2l6ZW9mKHJldl9hcmdzKS9zaXplb2YoY2hhciAqKS0xLCByZXZfYXJncywgJnJldnMsICZyZXZfb3B0cyk7CisKKwkvKiBzYXZlIGFsbCByZXZpc2lvbnMgZnJvbSB0aGUgYWJvdmUgbGlzdCB0aGF0IGNvbnRhaW4gYiAqLworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldnMpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSAmKGNvbW1pdC0+b2JqZWN0KTsKKwkJaWYgKGluX21lcmdlX2Jhc2VzKGIsIGNvbW1pdCkpCisJCQlhZGRfb2JqZWN0X2FycmF5KG8sIE5VTEwsICZtZXJnZXMpOworCX0KKwlyZXNldF9yZXZpc2lvbl93YWxrKCk7CisKKwkvKiBOb3cgd2UndmUgZ290IGFsbCBtZXJnZXMgdGhhdCBjb250YWluIGEgYW5kIGIuIFBydW5lIGFsbAorCSAqIG1lcmdlcyB0aGF0IGNvbnRhaW4gYW5vdGhlciBmb3VuZCBtZXJnZSBhbmQgc2F2ZSB0aGVtIGluCisJICogcmVzdWx0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtZXJnZXMubnI7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICptMSA9IChzdHJ1Y3QgY29tbWl0ICopIG1lcmdlcy5vYmplY3RzW2ldLml0ZW07CisKKwkJY29udGFpbnNfYW5vdGhlciA9IDA7CisJCWZvciAoaiA9IDA7IGogPCBtZXJnZXMubnI7IGorKykgeworCQkJc3RydWN0IGNvbW1pdCAqbTIgPSAoc3RydWN0IGNvbW1pdCAqKSBtZXJnZXMub2JqZWN0c1tqXS5pdGVtOworCQkJaWYgKGkgIT0gaiAmJiBpbl9tZXJnZV9iYXNlcyhtMiwgbTEpKSB7CisJCQkJY29udGFpbnNfYW5vdGhlciA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWNvbnRhaW5zX2Fub3RoZXIpCisJCQlhZGRfb2JqZWN0X2FycmF5KG1lcmdlcy5vYmplY3RzW2ldLml0ZW0sCisJCQkJCSBtZXJnZXMub2JqZWN0c1tpXS5uYW1lLCByZXN1bHQpOworCX0KKworCWZyZWUobWVyZ2VzLm9iamVjdHMpOworCXJldHVybiByZXN1bHQtPm5yOworfQorCitzdGF0aWMgdm9pZCBwcmludF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCWN0eC5kYXRlX21vZGUgPSBEQVRFX05PUk1BTDsKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiICVoOiAlbSAlcyIsICZzYiwgJmN0eCk7CisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgc2IuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCisjZGVmaW5lIE1FUkdFX1dBUk5JTkcocGF0aCwgbXNnKSBcCisJd2FybmluZygiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoJXMpIiwgcGF0aCwgbXNnKTsKKworaW50IG1lcmdlX3N1Ym1vZHVsZSh1bnNpZ25lZCBjaGFyIHJlc3VsdFsyMF0sIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGJhc2VbMjBdLCBjb25zdCB1bnNpZ25lZCBjaGFyIGFbMjBdLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciBiWzIwXSwgaW50IHNlYXJjaCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXRfYmFzZSwgKmNvbW1pdF9hLCAqY29tbWl0X2I7CisJaW50IHBhcmVudF9jb3VudDsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IG1lcmdlczsKKworCWludCBpOworCisJLyogc3RvcmUgYSBpbiByZXN1bHQgaW4gY2FzZSB3ZSBmYWlsICovCisJaGFzaGNweShyZXN1bHQsIGEpOworCisJLyogd2UgY2FuIG5vdCBoYW5kbGUgZGVsZXRpb24gY29uZmxpY3RzICovCisJaWYgKGlzX251bGxfc2hhMShiYXNlKSkKKwkJcmV0dXJuIDA7CisJaWYgKGlzX251bGxfc2hhMShhKSkKKwkJcmV0dXJuIDA7CisJaWYgKGlzX251bGxfc2hhMShiKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYWRkX3N1Ym1vZHVsZV9vZGIocGF0aCkpIHsKKwkJTUVSR0VfV0FSTklORyhwYXRoLCAibm90IGNoZWNrZWQgb3V0Iik7CisJCXJldHVybiAwOworCX0KKworCWlmICghKGNvbW1pdF9iYXNlID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UoYmFzZSkpIHx8CisJICAgICEoY29tbWl0X2EgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShhKSkgfHwKKwkgICAgIShjb21taXRfYiA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKGIpKSkgeworCQlNRVJHRV9XQVJOSU5HKHBhdGgsICJjb21taXRzIG5vdCBwcmVzZW50Iik7CisJCXJldHVybiAwOworCX0KKworCS8qIGNoZWNrIHdoZXRoZXIgYm90aCBjaGFuZ2VzIGFyZSBmb3J3YXJkICovCisJaWYgKCFpbl9tZXJnZV9iYXNlcyhjb21taXRfYmFzZSwgY29tbWl0X2EpIHx8CisJICAgICFpbl9tZXJnZV9iYXNlcyhjb21taXRfYmFzZSwgY29tbWl0X2IpKSB7CisJCU1FUkdFX1dBUk5JTkcocGF0aCwgImNvbW1pdHMgZG9uJ3QgZm9sbG93IG1lcmdlLWJhc2UiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ2FzZSAjMTogYSBpcyBjb250YWluZWQgaW4gYiBvciB2aWNlIHZlcnNhICovCisJaWYgKGluX21lcmdlX2Jhc2VzKGNvbW1pdF9hLCBjb21taXRfYikpIHsKKwkJaGFzaGNweShyZXN1bHQsIGIpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGluX21lcmdlX2Jhc2VzKGNvbW1pdF9iLCBjb21taXRfYSkpIHsKKwkJaGFzaGNweShyZXN1bHQsIGEpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKgorCSAqIENhc2UgIzI6IFRoZXJlIGFyZSBvbmUgb3IgbW9yZSBtZXJnZXMgdGhhdCBjb250YWluIGEgYW5kIGIgaW4KKwkgKiB0aGUgc3VibW9kdWxlLiBJZiB0aGVyZSBpcyBvbmx5IG9uZSwgdGhlbiBwcmVzZW50IGl0IGFzIGEKKwkgKiBzdWdnZXN0aW9uIHRvIHRoZSB1c2VyLCBidXQgbGVhdmUgaXQgbWFya2VkIHVubWVyZ2VkIHNvIHRoZQorCSAqIHVzZXIgbmVlZHMgdG8gY29uZmlybSB0aGUgcmVzb2x1dGlvbi4KKwkgKi8KKworCS8qIFNraXAgdGhlIHNlYXJjaCBpZiBtYWtlcyBubyBzZW5zZSB0byB0aGUgY2FsbGluZyBjb250ZXh0LiAgKi8KKwlpZiAoIXNlYXJjaCkKKwkJcmV0dXJuIDA7CisKKwkvKiBmaW5kIGNvbW1pdCB3aGljaCBtZXJnZXMgdGhlbSAqLworCXBhcmVudF9jb3VudCA9IGZpbmRfZmlyc3RfbWVyZ2VzKCZtZXJnZXMsIHBhdGgsIGNvbW1pdF9hLCBjb21taXRfYik7CisJc3dpdGNoIChwYXJlbnRfY291bnQpIHsKKwljYXNlIDA6CisJCU1FUkdFX1dBUk5JTkcocGF0aCwgIm1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCIpOworCQlicmVhazsKKworCWNhc2UgMToKKwkJTUVSR0VfV0FSTklORyhwYXRoLCAibm90IGZhc3QtZm9yd2FyZCIpOworCQlmcHJpbnRmKHN0ZGVyciwgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiAiCisJCQkJImZvciB0aGUgc3VibW9kdWxlOlxuIik7CisJCXByaW50X2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKSBtZXJnZXMub2JqZWN0c1swXS5pdGVtKTsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiSWYgdGhpcyBpcyBjb3JyZWN0IHNpbXBseSBhZGQgaXQgdG8gdGhlIGluZGV4ICIKKwkJCSJmb3IgZXhhbXBsZVxuIgorCQkJImJ5IHVzaW5nOlxuXG4iCisJCQkiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcblxuIgorCQkJIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIsCisJCQlzaGExX3RvX2hleChtZXJnZXMub2JqZWN0c1swXS5pdGVtLT5zaGExKSwgcGF0aCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJTUVSR0VfV0FSTklORyhwYXRoLCAibXVsdGlwbGUgbWVyZ2VzIGZvdW5kIik7CisJCWZvciAoaSA9IDA7IGkgPCBtZXJnZXMubnI7IGkrKykKKwkJCXByaW50X2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKSBtZXJnZXMub2JqZWN0c1tpXS5pdGVtKTsKKwl9CisKKwlmcmVlKG1lcmdlcy5vYmplY3RzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3N1Ym1vZHVsZS5oIGIvc3VibW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk0YjUwZAotLS0gL2Rldi9udWxsCisrKyBiL3N1Ym1vZHVsZS5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgU1VCTU9EVUxFX0gKKyNkZWZpbmUgU1VCTU9EVUxFX0gKKworc3RydWN0IGRpZmZfb3B0aW9uczsKK3N0cnVjdCBhcmd2X2FycmF5OworCitlbnVtIHsKKwlSRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EID0gLTEsCisJUkVDVVJTRV9TVUJNT0RVTEVTX09GRiA9IDAsCisJUkVDVVJTRV9TVUJNT0RVTEVTX0RFRkFVTFQgPSAxLAorCVJFQ1VSU0VfU1VCTU9EVUxFU19PTiA9IDIKK307CisKK3ZvaWQgc2V0X2RpZmZvcHRfZmxhZ3NfZnJvbV9zdWJtb2R1bGVfY29uZmlnKHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCWNvbnN0IGNoYXIgKnBhdGgpOworaW50IHN1Ym1vZHVsZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOwordm9pZCBnaXRtb2R1bGVzX2NvbmZpZyh2b2lkKTsKK2ludCBwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZyhzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0LCBjb25zdCBjaGFyICopOworaW50IHBhcnNlX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcoY29uc3QgY2hhciAqb3B0LCBjb25zdCBjaGFyICphcmcpOwordm9pZCBzaG93X3N1Ym1vZHVsZV9zdW1tYXJ5KEZJTEUgKmYsIGNvbnN0IGNoYXIgKnBhdGgsCisJCXVuc2lnbmVkIGNoYXIgb25lWzIwXSwgdW5zaWduZWQgY2hhciB0d29bMjBdLAorCQl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUsCisJCWNvbnN0IGNoYXIgKmRlbCwgY29uc3QgY2hhciAqYWRkLCBjb25zdCBjaGFyICpyZXNldCk7Cit2b2lkIHNldF9jb25maWdfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzKGludCB2YWx1ZSk7Cit2b2lkIGNoZWNrX2Zvcl9uZXdfc3VibW9kdWxlX2NvbW1pdHModW5zaWduZWQgY2hhciBuZXdfc2hhMVsyMF0pOworaW50IGZldGNoX3BvcHVsYXRlZF9zdWJtb2R1bGVzKGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpvcHRpb25zLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGNvbW1hbmRfbGluZV9vcHRpb24sCisJCQkgICAgICAgaW50IHF1aWV0KTsKK3Vuc2lnbmVkIGlzX3N1Ym1vZHVsZV9tb2RpZmllZChjb25zdCBjaGFyICpwYXRoLCBpbnQgaWdub3JlX3VudHJhY2tlZCk7CitpbnQgbWVyZ2Vfc3VibW9kdWxlKHVuc2lnbmVkIGNoYXIgcmVzdWx0WzIwXSwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciBiYXNlWzIwXSwKKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYVsyMF0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgYlsyMF0sIGludCBzZWFyY2gpOworaW50IGZpbmRfdW5wdXNoZWRfc3VibW9kdWxlcyh1bnNpZ25lZCBjaGFyIG5ld19zaGExWzIwXSwgY29uc3QgY2hhciAqcmVtb3Rlc19uYW1lLAorCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm5lZWRzX3B1c2hpbmcpOworaW50IHB1c2hfdW5wdXNoZWRfc3VibW9kdWxlcyh1bnNpZ25lZCBjaGFyIG5ld19zaGExWzIwXSwgY29uc3QgY2hhciAqcmVtb3Rlc19uYW1lKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zeW1saW5rcy5jIGIvc3ltbGlua3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI0MWE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3ltbGlua3MuYwpAQCAtMCwwICsxLDMzMCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBpbnQgdGhyZWFkZWRfY2hlY2tfbGVhZGluZ19wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKK3N0YXRpYyBpbnQgdGhyZWFkZWRfaGFzX2RpcnNfb25seV9wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgcHJlZml4X2xlbik7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggKG9uIGEgcGF0aCBjb21wb25lbnQgYmFzaXMpIG9mIHRoZSBsb25nZXN0CisgKiBjb21tb24gcHJlZml4IG1hdGNoIG9mICduYW1lX2EnIGFuZCAnbmFtZV9iJy4KKyAqLworc3RhdGljIGludCBsb25nZXN0X3BhdGhfbWF0Y2goY29uc3QgY2hhciAqbmFtZV9hLCBpbnQgbGVuX2EsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lX2IsIGludCBsZW5fYiwKKwkJCSAgICAgIGludCAqcHJldmlvdXNfc2xhc2gpCit7CisJaW50IG1heF9sZW4sIG1hdGNoX2xlbiA9IDAsIG1hdGNoX2xlbl9wcmV2ID0gMCwgaSA9IDA7CisKKwltYXhfbGVuID0gbGVuX2EgPCBsZW5fYiA/IGxlbl9hIDogbGVuX2I7CisJd2hpbGUgKGkgPCBtYXhfbGVuICYmIG5hbWVfYVtpXSA9PSBuYW1lX2JbaV0pIHsKKwkJaWYgKG5hbWVfYVtpXSA9PSAnLycpIHsKKwkJCW1hdGNoX2xlbl9wcmV2ID0gbWF0Y2hfbGVuOworCQkJbWF0Y2hfbGVuID0gaTsKKwkJfQorCQlpKys7CisJfQorCS8qCisJICogSXMgJ25hbWVfYicgYSBzdWJzdHJpbmcgb2YgJ25hbWVfYScsIHRoZSBvdGhlciB3YXkgYXJvdW5kLAorCSAqIG9yIGlzICduYW1lX2EnIGFuZCAnbmFtZV9iJyB0aGUgZXhhY3Qgc2FtZSBzdHJpbmc/CisJICovCisJaWYgKGkgPj0gbWF4X2xlbiAmJiAoKGxlbl9hID4gbGVuX2IgJiYgbmFtZV9hW2xlbl9iXSA9PSAnLycpIHx8CisJCQkgICAgIChsZW5fYSA8IGxlbl9iICYmIG5hbWVfYltsZW5fYV0gPT0gJy8nKSB8fAorCQkJICAgICAobGVuX2EgPT0gbGVuX2IpKSkgeworCQltYXRjaF9sZW5fcHJldiA9IG1hdGNoX2xlbjsKKwkJbWF0Y2hfbGVuID0gaTsKKwl9CisJKnByZXZpb3VzX3NsYXNoID0gbWF0Y2hfbGVuX3ByZXY7CisJcmV0dXJuIG1hdGNoX2xlbjsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9kZWYgZGVmYXVsdF9jYWNoZTsKKworc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2xzdGF0X2NhY2hlKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlKQoreworCWNhY2hlLT5wYXRoWzBdID0gJ1wwJzsKKwljYWNoZS0+bGVuID0gMDsKKwljYWNoZS0+ZmxhZ3MgPSAwOworCS8qCisJICogVGhlIHRyYWNrX2ZsYWdzIGFuZCBwcmVmaXhfbGVuX3N0YXRfZnVuYyBtZW1iZXJzIGlzIG9ubHkKKwkgKiBzZXQgYnkgdGhlIHNhZmVndWFyZCBydWxlIGluc2lkZSBsc3RhdF9jYWNoZSgpCisJICovCit9CisKKyNkZWZpbmUgRkxfRElSICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgRkxfTk9FTlQgICAgKDEgPDwgMSkKKyNkZWZpbmUgRkxfU1lNTElOSyAgKDEgPDwgMikKKyNkZWZpbmUgRkxfTFNUQVRFUlIgKDEgPDwgMykKKyNkZWZpbmUgRkxfRVJSICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgRkxfRlVMTFBBVEggKDEgPDwgNSkKKworLyoKKyAqIENoZWNrIGlmIG5hbWUgJ25hbWUnIG9mIGxlbmd0aCAnbGVuJyBoYXMgYSBzeW1saW5rIGxlYWRpbmcKKyAqIGNvbXBvbmVudCwgb3IgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMgYW5kIGlzIHJlYWwsIG9yIG5vdC4KKyAqCisgKiBUbyBzcGVlZCB1cCB0aGUgY2hlY2ssIHNvbWUgaW5mb3JtYXRpb24gaXMgYWxsb3dlZCB0byBiZSBjYWNoZWQuCisgKiBUaGlzIGNhbiBiZSBpbmRpY2F0ZWQgYnkgdGhlICd0cmFja19mbGFncycgYXJndW1lbnQsIHdoaWNoIGFsc28gY2FuCisgKiBiZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGNoZWNrIHRoZSBmdWxsIHBhdGguCisgKgorICogVGhlICdwcmVmaXhfbGVuX3N0YXRfZnVuYycgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbGVuZ3RoCisgKiBvZiB0aGUgcHJlZml4LCB3aGVyZSB0aGUgY2FjaGUgc2hvdWxkIHVzZSB0aGUgc3RhdCgpIGZ1bmN0aW9uCisgKiBpbnN0ZWFkIG9mIHRoZSBsc3RhdCgpIGZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBwYXRoIGNvbXBvbmVudC4KKyAqLworc3RhdGljIGludCBsc3RhdF9jYWNoZV9tYXRjaGxlbihzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwKKwkJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkJCWludCAqcmV0X2ZsYWdzLCBpbnQgdHJhY2tfZmxhZ3MsCisJCQkJaW50IHByZWZpeF9sZW5fc3RhdF9mdW5jKQoreworCWludCBtYXRjaF9sZW4sIGxhc3Rfc2xhc2gsIGxhc3Rfc2xhc2hfZGlyLCBwcmV2aW91c19zbGFzaDsKKwlpbnQgc2F2ZV9mbGFncywgbWF4X2xlbiwgcmV0OworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGNhY2hlLT50cmFja19mbGFncyAhPSB0cmFja19mbGFncyB8fAorCSAgICBjYWNoZS0+cHJlZml4X2xlbl9zdGF0X2Z1bmMgIT0gcHJlZml4X2xlbl9zdGF0X2Z1bmMpIHsKKwkJLyoKKwkJICogQXMgYSBzYWZlZ3VhcmQgcnVsZSB3ZSBjbGVhciB0aGUgY2FjaGUgaWYgdGhlCisJCSAqIHZhbHVlcyBvZiB0cmFja19mbGFncyBhbmQvb3IgcHJlZml4X2xlbl9zdGF0X2Z1bmMKKwkJICogZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgbGFzdCBzdXBwbGllZCB2YWx1ZXMuCisJCSAqLworCQlyZXNldF9sc3RhdF9jYWNoZShjYWNoZSk7CisJCWNhY2hlLT50cmFja19mbGFncyA9IHRyYWNrX2ZsYWdzOworCQljYWNoZS0+cHJlZml4X2xlbl9zdGF0X2Z1bmMgPSBwcmVmaXhfbGVuX3N0YXRfZnVuYzsKKwkJbWF0Y2hfbGVuID0gbGFzdF9zbGFzaCA9IDA7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBtYXRjaCBmcm9tIHRoZSBjYWNoZSBmb3IKKwkJICogdGhlIDIgImV4Y2x1ZGluZyIgcGF0aCB0eXBlcy4KKwkJICovCisJCW1hdGNoX2xlbiA9IGxhc3Rfc2xhc2ggPQorCQkJbG9uZ2VzdF9wYXRoX21hdGNoKG5hbWUsIGxlbiwgY2FjaGUtPnBhdGgsIGNhY2hlLT5sZW4sCisJCQkJCSAgICZwcmV2aW91c19zbGFzaCk7CisJCSpyZXRfZmxhZ3MgPSBjYWNoZS0+ZmxhZ3MgJiB0cmFja19mbGFncyAmIChGTF9OT0VOVHxGTF9TWU1MSU5LKTsKKworCQlpZiAoISh0cmFja19mbGFncyAmIEZMX0ZVTExQQVRIKSAmJiBtYXRjaF9sZW4gPT0gbGVuKQorCQkJbWF0Y2hfbGVuID0gbGFzdF9zbGFzaCA9IHByZXZpb3VzX3NsYXNoOworCisJCWlmICgqcmV0X2ZsYWdzICYmIG1hdGNoX2xlbiA9PSBjYWNoZS0+bGVuKQorCQkJcmV0dXJuIG1hdGNoX2xlbjsKKwkJLyoKKwkJICogSWYgd2Ugbm93IGhhdmUgbWF0Y2hfbGVuID4gMCwgd2Ugd291bGQga25vdyB0aGF0CisJCSAqIHRoZSBtYXRjaGVkIHBhcnQgd2lsbCBhbHdheXMgYmUgYSBkaXJlY3RvcnkuCisJCSAqCisJCSAqIEFsc28sIGlmIHdlIGFyZSB0cmFja2luZyBkaXJlY3RvcmllcyBhbmQgJ25hbWUnIGlzCisJCSAqIGEgc3Vic3RyaW5nIG9mIHRoZSBjYWNoZSBvbiBhIHBhdGggY29tcG9uZW50IGJhc2lzLAorCQkgKiB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJKnJldF9mbGFncyA9IHRyYWNrX2ZsYWdzICYgRkxfRElSOworCQlpZiAoKnJldF9mbGFncyAmJiBsZW4gPT0gbWF0Y2hfbGVuKQorCQkJcmV0dXJuIG1hdGNoX2xlbjsKKwl9CisKKwkvKgorCSAqIE9rYXksIG5vIG1hdGNoIGZyb20gdGhlIGNhY2hlIHNvIGZhciwgc28gbm93IHdlIGhhdmUgdG8KKwkgKiBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcGF0aCBjb21wb25lbnRzLgorCSAqLworCSpyZXRfZmxhZ3MgPSBGTF9ESVI7CisJbGFzdF9zbGFzaF9kaXIgPSBsYXN0X3NsYXNoOworCW1heF9sZW4gPSBsZW4gPCBQQVRIX01BWCA/IGxlbiA6IFBBVEhfTUFYOworCXdoaWxlIChtYXRjaF9sZW4gPCBtYXhfbGVuKSB7CisJCWRvIHsKKwkJCWNhY2hlLT5wYXRoW21hdGNoX2xlbl0gPSBuYW1lW21hdGNoX2xlbl07CisJCQltYXRjaF9sZW4rKzsKKwkJfSB3aGlsZSAobWF0Y2hfbGVuIDwgbWF4X2xlbiAmJiBuYW1lW21hdGNoX2xlbl0gIT0gJy8nKTsKKwkJaWYgKG1hdGNoX2xlbiA+PSBtYXhfbGVuICYmICEodHJhY2tfZmxhZ3MgJiBGTF9GVUxMUEFUSCkpCisJCQlicmVhazsKKwkJbGFzdF9zbGFzaCA9IG1hdGNoX2xlbjsKKwkJY2FjaGUtPnBhdGhbbGFzdF9zbGFzaF0gPSAnXDAnOworCisJCWlmIChsYXN0X3NsYXNoIDw9IHByZWZpeF9sZW5fc3RhdF9mdW5jKQorCQkJcmV0ID0gc3RhdChjYWNoZS0+cGF0aCwgJnN0KTsKKwkJZWxzZQorCQkJcmV0ID0gbHN0YXQoY2FjaGUtPnBhdGgsICZzdCk7CisKKwkJaWYgKHJldCkgeworCQkJKnJldF9mbGFncyA9IEZMX0xTVEFURVJSOworCQkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCQkqcmV0X2ZsYWdzIHw9IEZMX05PRU5UOworCQl9IGVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCWxhc3Rfc2xhc2hfZGlyID0gbGFzdF9zbGFzaDsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKwkJCSpyZXRfZmxhZ3MgPSBGTF9TWU1MSU5LOworCQl9IGVsc2UgeworCQkJKnJldF9mbGFncyA9IEZMX0VSUjsKKwkJfQorCQlicmVhazsKKwl9CisKKwkvKgorCSAqIEF0IHRoZSBlbmQgdXBkYXRlIHRoZSBjYWNoZS4gIE5vdGUgdGhhdCBtYXggMyBkaWZmZXJlbnQKKwkgKiBwYXRoIHR5cGVzLCBGTF9OT0VOVCwgRkxfU1lNTElOSyBhbmQgRkxfRElSLCBjYW4gYmUgY2FjaGVkCisJICogZm9yIHRoZSBtb21lbnQhCisJICovCisJc2F2ZV9mbGFncyA9ICpyZXRfZmxhZ3MgJiB0cmFja19mbGFncyAmIChGTF9OT0VOVHxGTF9TWU1MSU5LKTsKKwlpZiAoc2F2ZV9mbGFncyAmJiBsYXN0X3NsYXNoID4gMCAmJiBsYXN0X3NsYXNoIDw9IFBBVEhfTUFYKSB7CisJCWNhY2hlLT5wYXRoW2xhc3Rfc2xhc2hdID0gJ1wwJzsKKwkJY2FjaGUtPmxlbiA9IGxhc3Rfc2xhc2g7CisJCWNhY2hlLT5mbGFncyA9IHNhdmVfZmxhZ3M7CisJfSBlbHNlIGlmICgodHJhY2tfZmxhZ3MgJiBGTF9ESVIpICYmCisJCSAgIGxhc3Rfc2xhc2hfZGlyID4gMCAmJiBsYXN0X3NsYXNoX2RpciA8PSBQQVRIX01BWCkgeworCQkvKgorCQkgKiBXZSBoYXZlIGEgc2VwYXJhdGUgdGVzdCBmb3IgdGhlIGRpcmVjdG9yeSBjYXNlLAorCQkgKiBzaW5jZSBpdCBjb3VsZCBiZSB0aGF0IHdlIGhhdmUgZm91bmQgYSBzeW1saW5rIG9yIGEKKwkJICogbm9uLWV4aXN0aW5nIGRpcmVjdG9yeSBhbmQgdGhlIHRyYWNrX2ZsYWdzIHNheXMKKwkJICogdGhhdCB3ZSBjYW5ub3QgY2FjaGUgdGhpcyBmYWN0LCBzbyB0aGUgY2FjaGUgd291bGQKKwkJICogdGhlbiBoYXZlIGJlZW4gbGVmdCBlbXB0eSBpbiB0aGlzIGNhc2UuCisJCSAqCisJCSAqIEJ1dCBpZiB3ZSBhcmUgYWxsb3dlZCB0byB0cmFjayByZWFsIGRpcmVjdG9yaWVzLCB3ZQorCQkgKiBjYW4gc3RpbGwgY2FjaGUgdGhlIHBhdGggY29tcG9uZW50cyBiZWZvcmUgdGhlIGxhc3QKKwkJICogb25lICh0aGUgZm91bmQgc3ltbGluayBvciBub24tZXhpc3RpbmcgY29tcG9uZW50KS4KKwkJICovCisJCWNhY2hlLT5wYXRoW2xhc3Rfc2xhc2hfZGlyXSA9ICdcMCc7CisJCWNhY2hlLT5sZW4gPSBsYXN0X3NsYXNoX2RpcjsKKwkJY2FjaGUtPmZsYWdzID0gRkxfRElSOworCX0gZWxzZSB7CisJCXJlc2V0X2xzdGF0X2NhY2hlKGNhY2hlKTsKKwl9CisJcmV0dXJuIG1hdGNoX2xlbjsKK30KKworc3RhdGljIGludCBsc3RhdF9jYWNoZShzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJICAgICAgIGludCB0cmFja19mbGFncywgaW50IHByZWZpeF9sZW5fc3RhdF9mdW5jKQoreworCWludCBmbGFnczsKKwkodm9pZClsc3RhdF9jYWNoZV9tYXRjaGxlbihjYWNoZSwgbmFtZSwgbGVuLCAmZmxhZ3MsIHRyYWNrX2ZsYWdzLAorCQkJcHJlZml4X2xlbl9zdGF0X2Z1bmMpOworCXJldHVybiBmbGFnczsKK30KKworI2RlZmluZSBVU0VfT05MWV9MU1RBVCAgMAorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQKKyAqLworaW50IHRocmVhZGVkX2hhc19zeW1saW5rX2xlYWRpbmdfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlyZXR1cm4gbHN0YXRfY2FjaGUoY2FjaGUsIG5hbWUsIGxlbiwgRkxfU1lNTElOS3xGTF9ESVIsIFVTRV9PTkxZX0xTVEFUKSAmIEZMX1NZTUxJTks7Cit9CisKKy8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgcGF0aCAnbmFtZScgaGFzIGEgbGVhZGluZyBzeW1saW5rIGNvbXBvbmVudAorICovCitpbnQgaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJcmV0dXJuIHRocmVhZGVkX2hhc19zeW1saW5rX2xlYWRpbmdfcGF0aCgmZGVmYXVsdF9jYWNoZSwgbmFtZSwgbGVuKTsKK30KKworLyoKKyAqIFJldHVybiB6ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQgb3IKKyAqIGlmIHNvbWUgbGVhZGluZyBwYXRoIGNvbXBvbmVudCBkb2VzIG5vdCBleGlzdHMuCisgKgorICogUmV0dXJuIC0xIGlmIGxlYWRpbmcgcGF0aCBleGlzdHMgYW5kIGlzIGEgZGlyZWN0b3J5LgorICoKKyAqIFJldHVybiBwYXRoIGxlbmd0aCBpZiBsZWFkaW5nIHBhdGggZXhpc3RzIGFuZCBpcyBuZWl0aGVyIGEKKyAqIGRpcmVjdG9yeSBub3IgYSBzeW1saW5rLgorICovCitpbnQgY2hlY2tfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisgICAgcmV0dXJuIHRocmVhZGVkX2NoZWNrX2xlYWRpbmdfcGF0aCgmZGVmYXVsdF9jYWNoZSwgbmFtZSwgbGVuKTsKK30KKworLyoKKyAqIFJldHVybiB6ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQgb3IKKyAqIGlmIHNvbWUgbGVhZGluZyBwYXRoIGNvbXBvbmVudCBkb2VzIG5vdCBleGlzdHMuCisgKgorICogUmV0dXJuIC0xIGlmIGxlYWRpbmcgcGF0aCBleGlzdHMgYW5kIGlzIGEgZGlyZWN0b3J5LgorICoKKyAqIFJldHVybiBwYXRoIGxlbmd0aCBpZiBsZWFkaW5nIHBhdGggZXhpc3RzIGFuZCBpcyBuZWl0aGVyIGEKKyAqIGRpcmVjdG9yeSBub3IgYSBzeW1saW5rLgorICovCitzdGF0aWMgaW50IHRocmVhZGVkX2NoZWNrX2xlYWRpbmdfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlpbnQgZmxhZ3M7CisJaW50IG1hdGNoX2xlbiA9IGxzdGF0X2NhY2hlX21hdGNobGVuKGNhY2hlLCBuYW1lLCBsZW4sICZmbGFncywKKwkJCSAgIEZMX1NZTUxJTkt8RkxfTk9FTlR8RkxfRElSLCBVU0VfT05MWV9MU1RBVCk7CisJaWYgKGZsYWdzICYgRkxfTk9FTlQpCisJCXJldHVybiAwOworCWVsc2UgaWYgKGZsYWdzICYgRkxfRElSKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gbWF0Y2hfbGVuOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIGFsbCBwYXRoIGNvbXBvbmVudHMgb2YgJ25hbWUnIGV4aXN0cyBhcyBhCisgKiBkaXJlY3RvcnkuICBJZiBwcmVmaXhfbGVuID4gMCwgd2Ugd2lsbCB0ZXN0IHdpdGggdGhlIHN0YXQoKQorICogZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgbHN0YXQoKSBmdW5jdGlvbiBmb3IgYSBwcmVmaXggbGVuZ3RoIG9mCisgKiAncHJlZml4X2xlbicsIHRodXMgd2UgdGhlbiBhbGxvdyBmb3Igc3ltbGlua3MgaW4gdGhlIHByZWZpeCBwYXJ0IGFzCisgKiBsb25nIGFzIHRob3NlIHBvaW50cyB0byByZWFsIGV4aXN0aW5nIGRpcmVjdG9yaWVzLgorICovCitpbnQgaGFzX2RpcnNfb25seV9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIGludCBwcmVmaXhfbGVuKQoreworCXJldHVybiB0aHJlYWRlZF9oYXNfZGlyc19vbmx5X3BhdGgoJmRlZmF1bHRfY2FjaGUsIG5hbWUsIGxlbiwgcHJlZml4X2xlbik7Cit9CisKKy8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgYWxsIHBhdGggY29tcG9uZW50cyBvZiAnbmFtZScgZXhpc3RzIGFzIGEKKyAqIGRpcmVjdG9yeS4gIElmIHByZWZpeF9sZW4gPiAwLCB3ZSB3aWxsIHRlc3Qgd2l0aCB0aGUgc3RhdCgpCisgKiBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBsc3RhdCgpIGZ1bmN0aW9uIGZvciBhIHByZWZpeCBsZW5ndGggb2YKKyAqICdwcmVmaXhfbGVuJywgdGh1cyB3ZSB0aGVuIGFsbG93IGZvciBzeW1saW5rcyBpbiB0aGUgcHJlZml4IHBhcnQgYXMKKyAqIGxvbmcgYXMgdGhvc2UgcG9pbnRzIHRvIHJlYWwgZXhpc3RpbmcgZGlyZWN0b3JpZXMuCisgKi8KK3N0YXRpYyBpbnQgdGhyZWFkZWRfaGFzX2RpcnNfb25seV9wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgcHJlZml4X2xlbikKK3sKKwlyZXR1cm4gbHN0YXRfY2FjaGUoY2FjaGUsIG5hbWUsIGxlbiwKKwkJCSAgIEZMX0RJUnxGTF9GVUxMUEFUSCwgcHJlZml4X2xlbikgJgorCQlGTF9ESVI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVtb3ZhbF9kZWYgeworCWNoYXIgcGF0aFtQQVRIX01BWF07CisJaW50IGxlbjsKK30gcmVtb3ZhbDsKKworc3RhdGljIHZvaWQgZG9fcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKGludCBuZXdfbGVuKQoreworCXdoaWxlIChyZW1vdmFsLmxlbiA+IG5ld19sZW4pIHsKKwkJcmVtb3ZhbC5wYXRoW3JlbW92YWwubGVuXSA9ICdcMCc7CisJCWlmIChybWRpcihyZW1vdmFsLnBhdGgpKQorCQkJYnJlYWs7CisJCWRvIHsKKwkJCXJlbW92YWwubGVuLS07CisJCX0gd2hpbGUgKHJlbW92YWwubGVuID4gbmV3X2xlbiAmJgorCQkJIHJlbW92YWwucGF0aFtyZW1vdmFsLmxlbl0gIT0gJy8nKTsKKwl9CisJcmVtb3ZhbC5sZW4gPSBuZXdfbGVuOworfQorCit2b2lkIHNjaGVkdWxlX2Rpcl9mb3JfcmVtb3ZhbChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCWludCBtYXRjaF9sZW4sIGxhc3Rfc2xhc2gsIGksIHByZXZpb3VzX3NsYXNoOworCisJbWF0Y2hfbGVuID0gbGFzdF9zbGFzaCA9IGkgPQorCQlsb25nZXN0X3BhdGhfbWF0Y2gobmFtZSwgbGVuLCByZW1vdmFsLnBhdGgsIHJlbW92YWwubGVuLAorCQkJCSAgICZwcmV2aW91c19zbGFzaCk7CisJLyogRmluZCBsYXN0IHNsYXNoIGluc2lkZSAnbmFtZScgKi8KKwl3aGlsZSAoaSA8IGxlbikgeworCQlpZiAobmFtZVtpXSA9PSAnLycpCisJCQlsYXN0X3NsYXNoID0gaTsKKwkJaSsrOworCX0KKworCS8qCisJICogSWYgd2UgYXJlIGFib3V0IHRvIGdvIGRvd24gdGhlIGRpcmVjdG9yeSB0cmVlLCB3ZSBjaGVjayBpZgorCSAqIHdlIG11c3QgZmlyc3QgZ28gdXB3YXJkcyB0aGUgdHJlZSwgc3VjaCB0aGF0IHdlIHRoZW4gY2FuCisJICogcmVtb3ZlIHBvc3NpYmxlIGVtcHR5IGRpcmVjdG9yaWVzIGFzIHdlIGdvIHVwd2FyZHMuCisJICovCisJaWYgKG1hdGNoX2xlbiA8IGxhc3Rfc2xhc2ggJiYgbWF0Y2hfbGVuIDwgcmVtb3ZhbC5sZW4pCisJCWRvX3JlbW92ZV9zY2hlZHVsZWRfZGlycyhtYXRjaF9sZW4pOworCS8qCisJICogSWYgd2UgZ28gZGVlcGVyIGRvd24gdGhlIGRpcmVjdG9yeSB0cmVlLCB3ZSBvbmx5IG5lZWQgdG8KKwkgKiBzYXZlIHRoZSBuZXcgcGF0aCBjb21wb25lbnRzIGFzIHdlIGdvIGRvd24uCisJICovCisJaWYgKG1hdGNoX2xlbiA8IGxhc3Rfc2xhc2gpIHsKKwkJbWVtY3B5KCZyZW1vdmFsLnBhdGhbbWF0Y2hfbGVuXSwgJm5hbWVbbWF0Y2hfbGVuXSwKKwkJICAgICAgIGxhc3Rfc2xhc2ggLSBtYXRjaF9sZW4pOworCQlyZW1vdmFsLmxlbiA9IGxhc3Rfc2xhc2g7CisJfQorfQorCit2b2lkIHJlbW92ZV9zY2hlZHVsZWRfZGlycyh2b2lkKQoreworCWRvX3JlbW92ZV9zY2hlZHVsZWRfZGlycygwKTsKK30KZGlmZiAtLWdpdCBhL3QvLmdpdGF0dHJpYnV0ZXMgYi90Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOTdjNTQKLS0tIC9kZXYvbnVsbAorKysgYi90Ly5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKK3RbMC05XVswLTldWzAtOV1bMC05XS8qIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS90Ly5naXRpZ25vcmUgYi90Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3MzFkYwotLS0gL2Rldi9udWxsCisrKyBiL3QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKKy90cmFzaCBkaXJlY3RvcnkqCisvdGVzdC1yZXN1bHRzCisvLnByb3ZlCmRpZmYgLS1naXQgYS90L0dpdC1TVk4vMDBjb21waWxlLnQgYi90L0dpdC1TVk4vMDBjb21waWxlLnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyZmVlNAotLS0gL2Rldi9udWxsCisrKyBiL3QvR2l0LVNWTi8wMGNvbXBpbGUudApAQCAtMCwwICsxLDE0IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDc7CisKK3JlcXVpcmVfb2sgJ0dpdDo6U1ZOJzsKK3JlcXVpcmVfb2sgJ0dpdDo6U1ZOOjpVdGlscyc7CityZXF1aXJlX29rICdHaXQ6OlNWTjo6UmEnOworcmVxdWlyZV9vayAnR2l0OjpTVk46OkxvZyc7CityZXF1aXJlX29rICdHaXQ6OlNWTjo6TWlncmF0aW9uJzsKK3JlcXVpcmVfb2sgJ0dpdDo6SW5kZXhJbmZvJzsKK3JlcXVpcmVfb2sgJ0dpdDo6U1ZOOjpHbG9iU3BlYyc7CmRpZmYgLS1naXQgYS90L0dpdC1TVk4vVXRpbHMvYWRkX3BhdGhfdG9fdXJsLnQgYi90L0dpdC1TVk4vVXRpbHMvYWRkX3BhdGhfdG9fdXJsLnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiZDg3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvR2l0LVNWTi9VdGlscy9hZGRfcGF0aF90b191cmwudApAQCAtMCwwICsxLDI3IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwlhZGRfcGF0aF90b191cmwKKyk7CisKKyMgQSByZWZlcmVuY2UgY2Fubm90IGJlIGEgaGFzaCBrZXksIHNvIHdlIHVzZSBhbiBhcnJheS4KK215IEB0ZXN0cyA9ICgKKwlbImh0dHA6Ly94LmNvbSIsICJiYXIiXQkJCT0+ICdodHRwOi8veC5jb20vYmFyJywKKwlbImh0dHA6Ly94LmNvbSIsICIiXQkJCT0+ICdodHRwOi8veC5jb20nLAorCVsiaHR0cDovL3guY29tL2Zvby8iLCB1bmRlZl0JCT0+ICdodHRwOi8veC5jb20vZm9vLycsCisJWyJodHRwOi8veC5jb20vZm9vLyIsICIvYmFyL2Jhei8iXQk9PiAnaHR0cDovL3guY29tL2Zvby9iYXIvYmF6LycsCisJWyJodHRwOi8veC5jb20iLCAncGVyJWNlbnQnXQkJPT4gJ2h0dHA6Ly94LmNvbS9wZXIlMjVjZW50JywKKyk7CisKK3doaWxlKEB0ZXN0cykgeworCW15KCRoYXZlLCAkd2FudCkgPSBzcGxpY2UgQHRlc3RzLCAwLCAyOworCisJbXkgJGFyZ3MgPSBqb2luICIsICIsIG1hcCB7IHFxWyckXyddIH0gbWFwIHsgZGVmaW5lZCgkXykgPyAkXyA6ICd1bmRlZicgfSBAJGhhdmU7CisJbXkgJG5hbWUgPSAiYWRkX3BhdGhfdG9fdXJsKCRhcmdzKSBlcSAkd2FudCI7CisJaXMgYWRkX3BhdGhfdG9fdXJsKEAkaGF2ZSksICR3YW50LCAkbmFtZTsKK30KZGlmZiAtLWdpdCBhL3QvR2l0LVNWTi9VdGlscy9jYW5fY29tcHJlc3MudCBiL3QvR2l0LVNWTi9VdGlscy9jYW5fY29tcHJlc3MudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2I0OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2Nhbl9jb21wcmVzcy50CkBAIC0wLDAgKzEsMTEgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgVGVzdDo6TW9yZSAnbm9fcGxhbic7CisKK3VzZSBHaXQ6OlNWTjo6VXRpbHMgcXcoY2FuX2NvbXByZXNzKTsKKworIyAhISBpcyB0aGUgImNvbnZlcnQgdGhpcyB0byBib29sZWFuIiBvcGVyYXRvci4KK2lzICEhY2FuX2NvbXByZXNzKCksICEhZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWIgfTsKZGlmZiAtLWdpdCBhL3QvR2l0LVNWTi9VdGlscy9jYW5vbmljYWxpemVfdXJsLnQgYi90L0dpdC1TVk4vVXRpbHMvY2Fub25pY2FsaXplX3VybC50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Nzk1YWIKLS0tIC9kZXYvbnVsbAorKysgYi90L0dpdC1TVk4vVXRpbHMvY2Fub25pY2FsaXplX3VybC50CkBAIC0wLDAgKzEsMjYgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyBUZXN0IG91ciBvd24gaG9tZSByb2xsZWQgVVJMIGNhbm9uaWNhbGl6ZXIuICBUZXN0IHRoZSBwcml2YXRlIG9uZQorIyBkaXJlY3RseSBiZWNhdXNlIHdlIGNhbid0IHByZWRpY3Qgd2hhdCB0aGUgU1ZOIEFQSSBpcyBkb2luZyB0byBkby4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFRlc3Q6Ok1vcmUgJ25vX3BsYW4nOworCit1c2UgR2l0OjpTVk46OlV0aWxzOworbXkgJGNhbm9uaWNhbGl6ZV91cmwgPSBcJkdpdDo6U1ZOOjpVdGlsczo6X2Nhbm9uaWNhbGl6ZV91cmxfb3Vyc2VsdmVzOworCitteSAldGVzdHMgPSAoCisJImh0dHA6Ly94LmNvbSIJCQk9PiAiaHR0cDovL3guY29tIiwKKwkiaHR0cDovL3guY29tLyIJCQk9PiAiaHR0cDovL3guY29tIiwKKwkiaHR0cDovL3guY29tL2Zvby9iYXIiCQk9PiAiaHR0cDovL3guY29tL2Zvby9iYXIiLAorCSJodHRwOi8veC5jb20vL2Zvby8vYmFyLy8iCT0+ICJodHRwOi8veC5jb20vZm9vL2JhciIsCisJImh0dHA6Ly94LmNvbS8gIC8lLyIJCT0+ICJodHRwOi8veC5jb20vJTIwJTIwLyUyNSIsCispOworCitmb3IgbXkgJGFyZyAoa2V5cyAldGVzdHMpIHsKKwlteSAkd2FudCA9ICR0ZXN0c3skYXJnfTsKKworCWlzICRjYW5vbmljYWxpemVfdXJsLT4oJGFyZyksICR3YW50LCAiY2Fub25pY2FsaXplX3VybCgnJGFyZycpID0+ICR3YW50IjsKK30KZGlmZiAtLWdpdCBhL3QvR2l0LVNWTi9VdGlscy9jb2xsYXBzZV9kb3Rkb3QudCBiL3QvR2l0LVNWTi9VdGlscy9jb2xsYXBzZV9kb3Rkb3QudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGExY2NlCi0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2NvbGxhcHNlX2RvdGRvdC50CkBAIC0wLDAgKzEsMjMgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFRlc3Q6Ok1vcmUgJ25vX3BsYW4nOworCit1c2UgR2l0OjpTVk46OlV0aWxzOworbXkgJGNvbGxhcHNlX2RvdGRvdCA9IFwmR2l0OjpTVk46OlV0aWxzOjpfY29sbGFwc2VfZG90ZG90OworCitteSAldGVzdHMgPSAoCisJImZvby9iYXIvYmF6IgkJCT0+ICJmb28vYmFyL2JheiIsCisJIi4uIgkJCQk9PiAiLi4iLAorCSJmb28vLi4iCQkJPT4gIiIsCisJIi9mb28vYmFyLy4uLy4uL2JheiIJCT0+ICIvYmF6IiwKKwkiZGVlcGx5Ly4uLy4vZGVlcGx5L25lc3RlZCIJPT4gIi4vZGVlcGx5L25lc3RlZCIsCispOworCitmb3IgbXkgJGFyZyAoa2V5cyAldGVzdHMpIHsKKwlteSAkd2FudCA9ICR0ZXN0c3skYXJnfTsKKworCWlzICRjb2xsYXBzZV9kb3Rkb3QtPigkYXJnKSwgJHdhbnQsICJfY29sbGFwc2VfZG90ZG90KCckYXJnJykgPT4gJHdhbnQiOworfQpkaWZmIC0tZ2l0IGEvdC9HaXQtU1ZOL1V0aWxzL2ZhdGFsLnQgYi90L0dpdC1TVk4vVXRpbHMvZmF0YWwudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWUxNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2ZhdGFsLnQKQEAgLTAsMCArMSwzNCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKworQkVHSU4geworCSMgT3ZlcnJpZGUgZXhpdCBhdCBCRUdJTiB0aW1lIGJlZm9yZSBHaXQ6OlNWTjo6VXRpbHMgaXMgbG9hZGVkCisJIyBzbyBpdCB3aWxsIHNlZSBvdXIgbG9jYWwgZXhpdCBsYXRlci4KKwkqQ09SRTo6R0xPQkFMOjpleGl0ID0gc3ViKDskKSB7CisJcmV0dXJuIEBfID8gQ09SRTo6ZXhpdCgkX1swXSkgOiBDT1JFOjpleGl0KCk7CisJfTsKK30KKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdyhmYXRhbCk7CisKKyMgZmF0YWwoKQoreworCSMgQ2FwdHVyZSB0aGUgZXhpdCBjb2RlIGFuZCBwcmV2ZW50IGV4aXQuCisJbXkgJGV4aXRfc3RhdHVzOworCW5vIHdhcm5pbmdzICdyZWRlZmluZSc7CisJbG9jYWwgKkNPUkU6OkdMT0JBTDo6ZXhpdCA9IHN1YiB7ICRleGl0X3N0YXR1cyA9ICRfWzBdIHx8IDAgfTsKKworCSMgVHJhcCBmYXRhbCdzIG1lc3NhZ2UgdG8gU1RERVJSCisJbXkgJHN0ZGVycjsKKwljbG9zZSBTVERFUlI7CisJb2sgb3BlbiBTVERFUlIsICI+IiwgXCRzdGRlcnI7CisKKwlmYXRhbCAiU29tZSIsICJTdHVmZiIsICJIYXBwZW5lZCI7CisKKwlpcyAkc3RkZXJyLCAiU29tZSBTdHVmZiBIYXBwZW5lZFxuIjsKKwlpcyAkZXhpdF9zdGF0dXMsIDE7Cit9CmRpZmYgLS1naXQgYS90L0dpdC1TVk4vVXRpbHMvam9pbl9wYXRocy50IGIvdC9HaXQtU1ZOL1V0aWxzL2pvaW5fcGF0aHMudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQ4OGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2pvaW5fcGF0aHMudApAQCAtMCwwICsxLDMyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwlqb2luX3BhdGhzCispOworCisjIEEgcmVmZXJlbmNlIGNhbm5vdCBiZSBhIGhhc2gga2V5LCBzbyB3ZSB1c2UgYW4gYXJyYXkuCitteSBAdGVzdHMgPSAoCisJW10JCQkJCT0+ICcnLAorCVsiL3guY29tIiwgImJhciJdCQkJPT4gJy94LmNvbS9iYXInLAorCVsieC5jb20iLCAiIl0JCQkJPT4gJ3guY29tJywKKwlbIi94LmNvbS9mb28vIiwgdW5kZWYsICJiYXIiXQkJPT4gJy94LmNvbS9mb28vYmFyJywKKwlbInguY29tL2Zvby8iLCAiL2Jhci9iYXovIl0JCT0+ICd4LmNvbS9mb28vYmFyL2Jhei8nLAorCVsiZm9vIiwgImJhciJdCQkJCT0+ICdmb28vYmFyJywKKwlbIi9mb28vYmFyIiwgImJheiIsICIvYmlmZiJdCQk9PiAnL2Zvby9iYXIvYmF6L2JpZmYnLAorCVsiIiwgdW5kZWYsICIuIl0JCQk9PiAnLicsCisJW10JCQkJCT0+ICcnLAorCispOworCit3aGlsZShAdGVzdHMpIHsKKwlteSgkaGF2ZSwgJHdhbnQpID0gc3BsaWNlIEB0ZXN0cywgMCwgMjsKKworCW15ICRhcmdzID0gam9pbiAiLCAiLCBtYXAgeyBxcVsnJF8nXSB9IG1hcCB7IGRlZmluZWQoJF8pID8gJF8gOiAndW5kZWYnIH0gQCRoYXZlOworCW15ICRuYW1lID0gImpvaW5fcGF0aHMoJGFyZ3MpIGVxICckd2FudCciOworCWlzIGpvaW5fcGF0aHMoQCRoYXZlKSwgJHdhbnQsICRuYW1lOworfQpkaWZmIC0tZ2l0IGEvdC9NYWtlZmlsZSBiL3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlMjg5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxMTkgQEAKKyMgUnVuIHRlc3RzCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCistaW5jbHVkZSAuLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uL2NvbmZpZy5tYWsKKworI0dJVF9URVNUX09QVFM9LS12ZXJib3NlIC0tZGVidWcKK1NIRUxMX1BBVEggPz0gJChTSEVMTCkKK1BFUkxfUEFUSCA/PSAvdXNyL2Jpbi9wZXJsCitUQVIgPz0gJChUQVIpCitSTSA/PSBybSAtZgorUFJPVkUgPz0gcHJvdmUKK0RFRkFVTFRfVEVTVF9UQVJHRVQgPz0gdGVzdAorCisjIFNoZWxsIHF1b3RlOworU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCisKK1QgPSAkKHNvcnQgJCh3aWxkY2FyZCB0WzAtOV1bMC05XVswLTldWzAtOV0tKi5zaCkpCitUU1ZOID0gJChzb3J0ICQod2lsZGNhcmQgdDkxWzAtOV1bMC05XS0qLnNoKSkKK1RHSVRXRUIgPSAkKHNvcnQgJCh3aWxkY2FyZCB0OTVbMC05XVswLTldLSouc2gpKQorCithbGw6ICQoREVGQVVMVF9URVNUX1RBUkdFVCkKKwordGVzdDogcHJlLWNsZWFuICQoVEVTVF9MSU5UKQorCSQoTUFLRSkgYWdncmVnYXRlLXJlc3VsdHMtYW5kLWNsZWFudXAKKworcHJvdmU6IHByZS1jbGVhbiAkKFRFU1RfTElOVCkKKwlAZWNobyAiKioqIHByb3ZlICoqKiI7IEdJVF9DT05GSUc9LmdpdC9jb25maWcgJChQUk9WRSkgLS1leGVjICckKFNIRUxMX1BBVEhfU1EpJyAkKEdJVF9QUk9WRV9PUFRTKSAkKFQpIDo6ICQoR0lUX1RFU1RfT1BUUykKKwkkKE1BS0UpIGNsZWFuLWV4Y2VwdC1wcm92ZS1jYWNoZQorCiskKFQpOgorCUBlY2hvICIqKiogJEAgKioqIjsgR0lUX0NPTkZJRz0uZ2l0L2NvbmZpZyAnJChTSEVMTF9QQVRIX1NRKScgJEAgJChHSVRfVEVTVF9PUFRTKQorCitwcmUtY2xlYW46CisJJChSTSkgLXIgdGVzdC1yZXN1bHRzCisKK2NsZWFuLWV4Y2VwdC1wcm92ZS1jYWNoZToKKwkkKFJNKSAtciAndHJhc2ggZGlyZWN0b3J5Jy4qIHRlc3QtcmVzdWx0cworCSQoUk0pIC1yIHZhbGdyaW5kL2JpbgorCitjbGVhbjogY2xlYW4tZXhjZXB0LXByb3ZlLWNhY2hlCisJJChSTSkgLnByb3ZlCisKK3Rlc3QtbGludDogdGVzdC1saW50LWR1cGxpY2F0ZXMgdGVzdC1saW50LWV4ZWN1dGFibGUKKwordGVzdC1saW50LWR1cGxpY2F0ZXM6CisJQGR1cHM9YGVjaG8gJChUKSB8IHRyICcgJyAnXG4nIHwgc2VkICdzLy0uKi8vJyB8IHNvcnQgfCB1bmlxIC1kYCAmJiBcCisJCXRlc3QgLXogIiQkZHVwcyIgfHwgeyBcCisJCWVjaG8gPiYyICJkdXBsaWNhdGUgdGVzdCBudW1iZXJzOiIgJCRkdXBzOyBleGl0IDE7IH0KKwordGVzdC1saW50LWV4ZWN1dGFibGU6CisJQGJhZD1gZm9yIGkgaW4gJChUKTsgZG8gdGVzdCAteCAiJCRpIiB8fCBlY2hvICQkaTsgZG9uZWAgJiYgXAorCQl0ZXN0IC16ICIkJGJhZCIgfHwgeyBcCisJCWVjaG8gPiYyICJub24tZXhlY3V0YWJsZSB0ZXN0czoiICQkYmFkOyBleGl0IDE7IH0KKworYWdncmVnYXRlLXJlc3VsdHMtYW5kLWNsZWFudXA6ICQoVCkKKwkkKE1BS0UpIGFnZ3JlZ2F0ZS1yZXN1bHRzCisJJChNQUtFKSBjbGVhbgorCithZ2dyZWdhdGUtcmVzdWx0czoKKwlmb3IgZiBpbiB0ZXN0LXJlc3VsdHMvdCotKi5jb3VudHM7IGRvIFwKKwkJZWNobyAiJCRmIjsgXAorCWRvbmUgfCAnJChTSEVMTF9QQVRIX1NRKScgLi9hZ2dyZWdhdGUtcmVzdWx0cy5zaAorCisjIHdlIGNhbiB0ZXN0IE5PX09QVElNSVpFX0NPTU1JVFMgaW5kZXBlbmRlbnRseSBvZiBMQ19BTEwKK2Z1bGwtc3ZuLXRlc3Q6CisJJChNQUtFKSAkKFRTVk4pIEdJVF9TVk5fTk9fT1BUSU1JWkVfQ09NTUlUUz0xIExDX0FMTD1DCisJJChNQUtFKSAkKFRTVk4pIEdJVF9TVk5fTk9fT1BUSU1JWkVfQ09NTUlUUz0wIExDX0FMTD1lbl9VUy5VVEYtOAorCitnaXR3ZWItdGVzdDoKKwkkKE1BS0UpICQoVEdJVFdFQikKKwordmFsZ3JpbmQ6CisJJChNQUtFKSBHSVRfVEVTVF9PUFRTPSIkKEdJVF9URVNUX09QVFMpIC0tdmFsZ3JpbmQiCisKK3BlcmY6CisJJChNQUtFKSAtQyBwZXJmLyBhbGwKKworIyBTbW9rZSB0ZXN0aW5nIHRhcmdldHMKKy1pbmNsdWRlIC4uL0dJVC1WRVJTSU9OLUZJTEUKK3VuYW1lX1MgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXMgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duJykKK3VuYW1lX00gOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLW0gMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duJykKKwordGVzdC1yZXN1bHRzOgorCW1rZGlyIC1wIHRlc3QtcmVzdWx0cworCit0ZXN0LXJlc3VsdHMvZ2l0LXNtb2tlLnRhci5nejogdGVzdC1yZXN1bHRzCisJJChQRVJMX1BBVEgpIC4vaGFybmVzcyBcCisJCS0tYXJjaGl2ZT0idGVzdC1yZXN1bHRzL2dpdC1zbW9rZS50YXIuZ3oiIFwKKwkJJChUKQorCitzbW9rZTogdGVzdC1yZXN1bHRzL2dpdC1zbW9rZS50YXIuZ3oKKworU01PS0VfVVBMT0FEX0ZMQUdTID0KK2lmZGVmIFNNT0tFX1VTRVJOQU1FCisJU01PS0VfVVBMT0FEX0ZMQUdTICs9IC1GIHVzZXJuYW1lPSIkKFNNT0tFX1VTRVJOQU1FKSIgLUYgcGFzc3dvcmQ9IiQoU01PS0VfUEFTU1dPUkQpIgorZW5kaWYKK2lmZGVmIFNNT0tFX0NPTU1FTlQKKwlTTU9LRV9VUExPQURfRkxBR1MgKz0gLUYgY29tbWVudHM9IiQoU01PS0VfQ09NTUVOVCkiCitlbmRpZgoraWZkZWYgU01PS0VfVEFHUworCVNNT0tFX1VQTE9BRF9GTEFHUyArPSAtRiB0YWdzPSIkKFNNT0tFX1RBR1MpIgorZW5kaWYKKworc21va2VfcmVwb3J0OiBzbW9rZQorCWN1cmwgXAorCQktSCAiRXhwZWN0OiAiIFwKKwkJLUYgcHJvamVjdD1HaXQgXAorCQktRiBhcmNoaXRlY3R1cmU9IiQodW5hbWVfTSkiIFwKKwkJLUYgcGxhdGZvcm09IiQodW5hbWVfUykiIFwKKwkJLUYgcmV2aXNpb249IiQoR0lUX1ZFUlNJT04pIiBcCisJCS1GIHJlcG9ydF9maWxlPUB0ZXN0LXJlc3VsdHMvZ2l0LXNtb2tlLnRhci5neiBcCisJCSQoU01PS0VfVVBMT0FEX0ZMQUdTKSBcCisJCWh0dHA6Ly9zbW9rZS5naXQubml4LmlzL2FwcC9wcm9qZWN0cy9wcm9jZXNzX2FkZF9yZXBvcnQvMSBcCisJfCBncmVwIC12IF5SZWRpcmVjdGluZworCisuUEhPTlk6IHByZS1jbGVhbiAkKFQpIGFnZ3JlZ2F0ZS1yZXN1bHRzIGNsZWFuIHZhbGdyaW5kIHBlcmYKZGlmZiAtLWdpdCBhL3QvUkVBRE1FIGIvdC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxMjhlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvUkVBRE1FCkBAIC0wLDAgKzEsNzAxIEBACitDb3JlIEdJVCBUZXN0cworPT09PT09PT09PT09PT0KKworVGhpcyBkaXJlY3RvcnkgaG9sZHMgbWFueSB0ZXN0IHNjcmlwdHMgZm9yIGNvcmUgR0lUIHRvb2xzLiAgVGhlCitmaXJzdCBwYXJ0IG9mIHRoaXMgc2hvcnQgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byBydW4gdGhlIHRlc3RzCithbmQgcmVhZCB0aGVpciBvdXRwdXQuCisKK1doZW4gZml4aW5nIHRoZSB0b29scyBvciBhZGRpbmcgZW5oYW5jZW1lbnRzLCB5b3UgYXJlIHN0cm9uZ2x5CitlbmNvdXJhZ2VkIHRvIGFkZCB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB0byBjb3ZlciB3aGF0IHlvdSBhcmUKK3RyeWluZyB0byBmaXggb3IgZW5oYW5jZS4gIFRoZSBsYXRlciBwYXJ0IG9mIHRoaXMgc2hvcnQgZG9jdW1lbnQKK2Rlc2NyaWJlcyBob3cgeW91ciB0ZXN0IHNjcmlwdHMgc2hvdWxkIGJlIG9yZ2FuaXplZC4KKworCitSdW5uaW5nIFRlc3RzCistLS0tLS0tLS0tLS0tCisKK1RoZSBlYXNpZXN0IHdheSB0byBydW4gdGVzdHMgaXMgdG8gc2F5ICJtYWtlIi4gIFRoaXMgcnVucyBhbGwKK3RoZSB0ZXN0cy4KKworICAgICoqKiB0MDAwMC1iYXNpYy5zaCAqKioKKyAgICBvayAxIC0gLmdpdC9vYmplY3RzIHNob3VsZCBiZSBlbXB0eSBhZnRlciBnaXQgaW5pdCBpbiBhbiBlbXB0eSByZXBvLgorICAgIG9rIDIgLSAuZ2l0L29iamVjdHMgc2hvdWxkIGhhdmUgMyBzdWJkaXJlY3Rvcmllcy4KKyAgICBvayAzIC0gc3VjY2VzcyBpcyByZXBvcnRlZCBsaWtlIHRoaXMKKyAgICAuLi4KKyAgICBvayA0MyAtIHZlcnkgbG9uZyBuYW1lIGluIHRoZSBpbmRleCBoYW5kbGVkIHNhbmVseQorICAgICMgZml4ZWQgMSBrbm93biBicmVha2FnZShzKQorICAgICMgc3RpbGwgaGF2ZSAxIGtub3duIGJyZWFrYWdlKHMpCisgICAgIyBwYXNzZWQgYWxsIHJlbWFpbmluZyA0MiB0ZXN0KHMpCisgICAgMS4uNDMKKyAgICAqKiogdDAwMDEtaW5pdC5zaCAqKioKKyAgICBvayAxIC0gcGxhaW4KKyAgICBvayAyIC0gcGxhaW4gd2l0aCBHSVRfV09SS19UUkVFCisgICAgb2sgMyAtIHBsYWluIGJhcmUKKworU2luY2UgdGhlIHRlc3RzIGFsbCBvdXRwdXQgVEFQIChzZWUgaHR0cDovL3Rlc3Rhbnl0aGluZy5vcmcpIHRoZXkgY2FuCitiZSBydW4gd2l0aCBhbnkgVEFQIGhhcm5lc3MuIEhlcmUncyBhbiBleGFtcGxlIG9mIHBhcmFsbGVsIHRlc3RpbmcKK3Bvd2VyZWQgYnkgYSByZWNlbnQgdmVyc2lvbiBvZiBwcm92ZSgxKToKKworICAgICQgcHJvdmUgLS10aW1lciAtLWpvYnMgMTUgLi90WzAtOV0qLnNoCisgICAgWzE5OjE3OjMzXSAuL3QwMDA1LXNpZ25hbHMuc2ggLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gb2sgICAgICAgMzYgbXMKKyAgICBbMTk6MTc6MzNdIC4vdDAwMjItY3JsZi1yZW5hbWUuc2ggLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBvayAgICAgICA2OSBtcworICAgIFsxOToxNzozM10gLi90MDAyNC1jcmxmLWFyY2hpdmUuc2ggLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIG9rICAgICAgMTU0IG1zCisgICAgWzE5OjE3OjMzXSAuL3QwMDA0LXVud3JpdGFibGUuc2ggLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gb2sgICAgICAyODkgbXMKKyAgICBbMTk6MTc6MzNdIC4vdDAwMDItZ2l0ZmlsZS5zaCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBvayAgICAgIDQ4MCBtcworICAgID09PSggICAgIDEwMjswICAyNS8/ICA2Lz8gIDUvPyAgMTYvPyAgMS8/ICA0Lz8gIDIvPyAgMS8/ICAzLz8gIDEuLi4gKT09PQorCitwcm92ZSBhbmQgb3RoZXIgaGFybmVzc2VzIGNvbWUgd2l0aCBhIGxvdCBvZiB1c2VmdWwgb3B0aW9ucy4gVGhlCistLXN0YXRlIG9wdGlvbiBpbiBwYXJ0aWN1bGFyIGlzIHZlcnkgdXNlZnVsOgorCisgICAgIyBSZXBlYXQgdW50aWwgbm8gbW9yZSBmYWlsdXJlcworICAgICQgcHJvdmUgLWogMTUgLS1zdGF0ZT1mYWlsZWQsc2F2ZSAuL3RbMC05XSouc2gKKworWW91IGNhbiBnaXZlIERFRkFVTFRfVEVTVF9UQVJHRVQ9cHJvdmUgb24gdGhlIG1ha2UgY29tbWFuZCAob3IgZGVmaW5lIGl0CitpbiBjb25maWcubWFrKSB0byBjYXVzZSAibWFrZSB0ZXN0IiB0byBydW4gdGVzdHMgdW5kZXIgcHJvdmUuCitHSVRfUFJPVkVfT1BUUyBjYW4gYmUgdXNlZCB0byBwYXNzIGFkZGl0aW9uYWwgb3B0aW9ucywgZS5nLgorCisgICAgJCBtYWtlIERFRkFVTFRfVEVTVF9UQVJHRVQ9cHJvdmUgR0lUX1BST1ZFX09QVFM9Jy0tdGltZXIgLS1qb2JzIDE2JyB0ZXN0CisKK1lvdSBjYW4gYWxzbyBydW4gZWFjaCB0ZXN0IGluZGl2aWR1YWxseSBmcm9tIGNvbW1hbmQgbGluZSwgbGlrZSB0aGlzOgorCisgICAgJCBzaCAuL3QzMDEwLWxzLWZpbGVzLWtpbGxlZC1tb2RpZmllZC5zaAorICAgIG9rIDEgLSBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRvIGFkZCB2YXJpb3VzIHBhdGhzLgorICAgIG9rIDIgLSBnaXQgbHMtZmlsZXMgLWsgdG8gc2hvdyBraWxsZWQgZmlsZXMuCisgICAgb2sgMyAtIHZhbGlkYXRlIGdpdCBscy1maWxlcyAtayBvdXRwdXQuCisgICAgb2sgNCAtIGdpdCBscy1maWxlcyAtbSB0byBzaG93IG1vZGlmaWVkIGZpbGVzLgorICAgIG9rIDUgLSB2YWxpZGF0ZSBnaXQgbHMtZmlsZXMgLW0gb3V0cHV0LgorICAgICMgcGFzc2VkIGFsbCA1IHRlc3QocykKKyAgICAxLi41CisKK1lvdSBjYW4gcGFzcyAtLXZlcmJvc2UgKG9yIC12KSwgLS1kZWJ1ZyAob3IgLWQpLCBhbmQgLS1pbW1lZGlhdGUKKyhvciAtaSkgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIHRoZSB0ZXN0LCBvciBieSBzZXR0aW5nIEdJVF9URVNUX09QVFMKK2FwcHJvcHJpYXRlbHkgYmVmb3JlIHJ1bm5pbmcgIm1ha2UiLgorCistLXZlcmJvc2U6OgorCVRoaXMgbWFrZXMgdGhlIHRlc3QgbW9yZSB2ZXJib3NlLiAgU3BlY2lmaWNhbGx5LCB0aGUKKwljb21tYW5kIGJlaW5nIHJ1biBhbmQgdGhlaXIgb3V0cHV0IGlmIGFueSBhcmUgYWxzbworCW91dHB1dC4KKworLS1kZWJ1Zzo6CisJVGhpcyBtYXkgaGVscCB0aGUgcGVyc29uIHdobyBpcyBkZXZlbG9waW5nIGEgbmV3IHRlc3QuCisJSXQgY2F1c2VzIHRoZSBjb21tYW5kIGRlZmluZWQgd2l0aCB0ZXN0X2RlYnVnIHRvIHJ1bi4KKwlUaGUgInRyYXNoIiBkaXJlY3RvcnkgKHVzZWQgdG8gc3RvcmUgYWxsIHRlbXBvcmFyeSBkYXRhCisJZHVyaW5nIHRlc3RpbmcpIGlzIG5vdCBkZWxldGVkIGV2ZW4gaWYgdGhlcmUgYXJlIG5vCisJZmFpbGVkIHRlc3RzIHNvIHRoYXQgeW91IGNhbiBpbnNwZWN0IGl0cyBjb250ZW50cyBhZnRlcgorCXRoZSB0ZXN0IGZpbmlzaGVkLgorCistLWltbWVkaWF0ZTo6CisJVGhpcyBjYXVzZXMgdGhlIHRlc3QgdG8gaW1tZWRpYXRlbHkgZXhpdCB1cG9uIHRoZSBmaXJzdAorCWZhaWxlZCB0ZXN0LgorCistLWxvbmctdGVzdHM6OgorCVRoaXMgY2F1c2VzIGFkZGl0aW9uYWwgbG9uZy1ydW5uaW5nIHRlc3RzIHRvIGJlIHJ1biAod2hlcmUKKwlhdmFpbGFibGUpLCBmb3IgbW9yZSBleGhhdXN0aXZlIHRlc3RpbmcuCisKKy0tdmFsZ3JpbmQ6OgorCUV4ZWN1dGUgYWxsIEdpdCBiaW5hcmllcyB3aXRoIHZhbGdyaW5kIGFuZCBleGl0IHdpdGggc3RhdHVzCisJMTI2IG9uIGVycm9ycyAoanVzdCBsaWtlIHJlZ3VsYXIgdGVzdHMsIHRoaXMgd2lsbCBvbmx5IHN0b3AKKwl0aGUgdGVzdCBzY3JpcHQgd2hlbiBydW5uaW5nIHVuZGVyIC1pKS4gIFZhbGdyaW5kIGVycm9ycworCWdvIHRvIHN0ZGVyciwgc28geW91IG1pZ2h0IHdhbnQgdG8gcGFzcyB0aGUgLXYgb3B0aW9uLCB0b28uCisKKwlTaW5jZSBpdCBtYWtlcyBubyBzZW5zZSB0byBydW4gdGhlIHRlc3RzIHdpdGggLS12YWxncmluZCBhbmQKKwlub3Qgc2VlIGFueSBvdXRwdXQsIHRoaXMgb3B0aW9uIGltcGxpZXMgLS12ZXJib3NlLiAgRm9yCisJY29udmVuaWVuY2UsIGl0IGFsc28gaW1wbGllcyAtLXRlZS4KKworCU5vdGUgdGhhdCB2YWxncmluZCBpcyBydW4gd2l0aCB0aGUgb3B0aW9uIC0tbGVhay1jaGVjaz1ubywKKwlhcyB0aGUgZ2l0IHByb2Nlc3MgaXMgc2hvcnQtbGl2ZWQgYW5kIHNvbWUgZXJyb3JzIGFyZSBub3QKKwlpbnRlcmVzdGluZy4gSW4gb3JkZXIgdG8gcnVuIGEgc2luZ2xlIGNvbW1hbmQgdW5kZXIgdGhlIHNhbWUKKwljb25kaXRpb25zIG1hbnVhbGx5LCB5b3Ugc2hvdWxkIHNldCBHSVRfVkFMR1JJTkQgdG8gcG9pbnQgdG8KKwl0aGUgJ3QvdmFsZ3JpbmQvJyBkaXJlY3RvcnkgYW5kIHVzZSB0aGUgY29tbWFuZHMgdW5kZXIKKwkndC92YWxncmluZC9iaW4vJy4KKworLS10ZWU6OgorCUluIGFkZGl0aW9uIHRvIHByaW50aW5nIHRoZSB0ZXN0IG91dHB1dCB0byB0aGUgdGVybWluYWwsCisJd3JpdGUgaXQgdG8gZmlsZXMgbmFtZWQgJ3QvdGVzdC1yZXN1bHRzLyRURVNUX05BTUUub3V0Jy4KKwlBcyB0aGUgbmFtZXMgZGVwZW5kIG9uIHRoZSB0ZXN0cycgZmlsZSBuYW1lcywgaXQgaXMgc2FmZSB0bworCXJ1biB0aGUgdGVzdHMgd2l0aCB0aGlzIG9wdGlvbiBpbiBwYXJhbGxlbC4KKworLS13aXRoLWRhc2hlczo6CisJQnkgZGVmYXVsdCB0ZXN0cyBhcmUgcnVuIHdpdGhvdXQgZGFzaGVkIGZvcm1zIG9mCisJY29tbWFuZHMgKGxpa2UgZ2l0LWNvbW1pdCkgaW4gdGhlIFBBVEggKGl0IG9ubHkgdXNlcworCXdyYXBwZXJzIGZyb20gLi4vYmluLXdyYXBwZXJzKS4gIFVzZSB0aGlzIG9wdGlvbiB0byBpbmNsdWRlCisJdGhlIGJ1aWxkIGRpcmVjdG9yeSAoLi4pIGluIHRoZSBQQVRILCB3aGljaCBjb250YWlucyBhbGwKKwl0aGUgZGFzaGVkIGZvcm1zIG9mIGNvbW1hbmRzLiAgVGhpcyBvcHRpb24gaXMgY3VycmVudGx5CisJaW1wbGllZCBieSBvdGhlciBvcHRpb25zIGxpa2UgLS12YWxncmluZCBhbmQKKwlHSVRfVEVTVF9JTlNUQUxMRUQuCisKKy0tcm9vdD08ZGlyZWN0b3J5Pjo6CisJQ3JlYXRlICJ0cmFzaCIgZGlyZWN0b3JpZXMgdXNlZCB0byBzdG9yZSBhbGwgdGVtcG9yYXJ5IGRhdGEgZHVyaW5nCisJdGVzdGluZyB1bmRlciA8ZGlyZWN0b3J5PiwgaW5zdGVhZCBvZiB0aGUgdC8gZGlyZWN0b3J5LgorCVVzaW5nIHRoaXMgb3B0aW9uIHdpdGggYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSAoc3VjaCBhcyB0bXBmcykKKwljYW4gbWFzc2l2ZWx5IHNwZWVkIHVwIHRoZSB0ZXN0IHN1aXRlLgorCitZb3UgY2FuIGFsc28gc2V0IHRoZSBHSVRfVEVTVF9JTlNUQUxMRUQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KK3RoZSBiaW5kaXIgb2YgYW4gZXhpc3RpbmcgZ2l0IGluc3RhbGxhdGlvbiB0byB0ZXN0IHRoYXQgaW5zdGFsbGF0aW9uLgorWW91IHN0aWxsIG5lZWQgdG8gaGF2ZSBidWlsdCB0aGlzIGdpdCBzYW5kYm94LCBmcm9tIHdoaWNoIHZhcmlvdXMKK3Rlc3QtKiBzdXBwb3J0IHByb2dyYW1zLCB0ZW1wbGF0ZXMsIGFuZCBwZXJsIGxpYnJhcmllcyBhcmUgdXNlZC4KK0lmIHlvdXIgaW5zdGFsbGVkIGdpdCBpcyBpbmNvbXBsZXRlLCBpdCB3aWxsIHNpbGVudGx5IHRlc3QgcGFydHMgb2YKK3lvdXIgYnVpbHQgdmVyc2lvbiBpbnN0ZWFkLgorCitXaGVuIHVzaW5nIEdJVF9URVNUX0lOU1RBTExFRCwgeW91IGNhbiBhbHNvIHNldCBHSVRfVEVTVF9FWEVDX1BBVEggdG8KK292ZXJyaWRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGFzaGVkLWZvcm0gc3ViY29tbWFuZHMgKHdoYXQKK0dJVF9FWEVDX1BBVEggd291bGQgYmUgdXNlZCBmb3IgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24pLgorR0lUX1RFU1RfRVhFQ19QQVRIIGRlZmF1bHRzIHRvIGAkR0lUX1RFU1RfSU5TVEFMTEVEL2dpdCAtLWV4ZWMtcGF0aGAuCisKKworU2tpcHBpbmcgVGVzdHMKKy0tLS0tLS0tLS0tLS0tCisKK0luIHNvbWUgZW52aXJvbm1lbnRzLCBjZXJ0YWluIHRlc3RzIGhhdmUgbm8gd2F5IG9mIHN1Y2NlZWRpbmcKK2R1ZSB0byBwbGF0Zm9ybSBsaW1pdGF0aW9uLCBzdWNoIGFzIGxhY2sgb2YgJ3VuemlwJyBwcm9ncmFtLCBvcgorZmlsZXN5c3RlbSB0aGF0IGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgc2VxdWVuY2Ugb2Ygbm9uLU5VTCBieXRlcworYXMgcGF0aG5hbWVzLgorCitZb3Ugc2hvdWxkIGJlIGFibGUgdG8gc2F5IHNvbWV0aGluZyBsaWtlCisKKyAgICAkIEdJVF9TS0lQX1RFU1RTPXQ5MjAwLjggc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaAorCithbmQgZXZlbjoKKworICAgICQgR0lUX1NLSVBfVEVTVFM9J3RbMC00XT8/PyB0OTE/PyB0OTIwMC44JyBtYWtlCisKK3RvIG9taXQgc3VjaCB0ZXN0cy4gIFRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgYQorU1Agc2VwYXJhdGVkIGxpc3Qgb2YgcGF0dGVybnMgdGhhdCB0ZWxscyB3aGljaCB0ZXN0cyB0byBza2lwLAorYW5kIGVpdGhlciBjYW4gbWF0Y2ggdGhlICJ0WzAtOV17NH0iIHBhcnQgdG8gc2tpcCB0aGUgd2hvbGUKK3Rlc3QsIG9yIHRbMC05XXs0fSBmb2xsb3dlZCBieSAiLiRudW1iZXIiIHRvIHNheSB3aGljaAorcGFydGljdWxhciB0ZXN0IHRvIHNraXAuCisKK05vdGUgdGhhdCBzb21lIHRlc3RzIGluIHRoZSBleGlzdGluZyB0ZXN0IHN1aXRlIHJlbHkgb24gcHJldmlvdXMKK3Rlc3QgaXRlbSwgc28geW91IGNhbm5vdCBhcmJpdHJhcmlseSBkaXNhYmxlIG9uZSBhbmQgZXhwZWN0IHRoZQorcmVtYWluZGVyIG9mIHRlc3QgdG8gY2hlY2sgd2hhdCB0aGUgdGVzdCBvcmlnaW5hbGx5IHdhcyBpbnRlbmRlZAordG8gY2hlY2suCisKKworTmFtaW5nIFRlc3RzCistLS0tLS0tLS0tLS0KKworVGhlIHRlc3QgZmlsZXMgYXJlIG5hbWVkIGFzOgorCisJdE5OTk4tY29tbWFuZG5hbWUtZGV0YWlscy5zaAorCit3aGVyZSBOIGlzIGEgZGVjaW1hbCBkaWdpdC4KKworRmlyc3QgZGlnaXQgdGVsbHMgdGhlIGZhbWlseToKKworCTAgLSB0aGUgYWJzb2x1dGUgYmFzaWNzIGFuZCBnbG9iYWwgc3R1ZmYKKwkxIC0gdGhlIGJhc2ljIGNvbW1hbmRzIGNvbmNlcm5pbmcgZGF0YWJhc2UKKwkyIC0gdGhlIGJhc2ljIGNvbW1hbmRzIGNvbmNlcm5pbmcgdGhlIHdvcmtpbmcgdHJlZQorCTMgLSB0aGUgb3RoZXIgYmFzaWMgY29tbWFuZHMgKGUuZy4gbHMtZmlsZXMpCisJNCAtIHRoZSBkaWZmIGNvbW1hbmRzCisJNSAtIHRoZSBwdWxsIGFuZCBleHBvcnRpbmcgY29tbWFuZHMKKwk2IC0gdGhlIHJldmlzaW9uIHRyZWUgY29tbWFuZHMgKGV2ZW4gZS5nLiBtZXJnZS1iYXNlKQorCTcgLSB0aGUgcG9yY2VsYWluaXNoIGNvbW1hbmRzIGNvbmNlcm5pbmcgdGhlIHdvcmtpbmcgdHJlZQorCTggLSB0aGUgcG9yY2VsYWluaXNoIGNvbW1hbmRzIGNvbmNlcm5pbmcgZm9yZW5zaWNzCisJOSAtIHRoZSBnaXQgdG9vbHMKKworU2Vjb25kIGRpZ2l0IHRlbGxzIHRoZSBwYXJ0aWN1bGFyIGNvbW1hbmQgd2UgYXJlIHRlc3RpbmcuCisKK1RoaXJkIGRpZ2l0IChvcHRpb25hbGx5KSB0ZWxscyB0aGUgcGFydGljdWxhciBzd2l0Y2ggb3IgZ3JvdXAgb2Ygc3dpdGNoZXMKK3dlIGFyZSB0ZXN0aW5nLgorCitJZiB5b3UgY3JlYXRlIGZpbGVzIHVuZGVyIHQvIGRpcmVjdG9yeSAoaS5lLiBoZXJlKSB0aGF0IGlzIG5vdAordGhlIHRvcC1sZXZlbCB0ZXN0IHNjcmlwdCwgbmV2ZXIgbmFtZSB0aGUgZmlsZSB0byBtYXRjaCB0aGUgYWJvdmUKK3BhdHRlcm4uICBUaGUgTWFrZWZpbGUgaGVyZSBjb25zaWRlcnMgYWxsIHN1Y2ggZmlsZXMgYXMgdGhlCit0b3AtbGV2ZWwgdGVzdCBzY3JpcHQgYW5kIHRyaWVzIHRvIHJ1biBhbGwgb2YgdGhlbS4gIENhcmUgaXMKK2VzcGVjaWFsbHkgbmVlZGVkIGlmIHlvdSBhcmUgY3JlYXRpbmcgYSBjb21tb24gdGVzdCBsaWJyYXJ5CitmaWxlLCBzaW1pbGFyIHRvIHRlc3QtbGliLnNoLCBiZWNhdXNlIHN1Y2ggYSBsaWJyYXJ5IGZpbGUgbWF5Citub3QgYmUgc3VpdGFibGUgZm9yIHN0YW5kYWxvbmUgZXhlY3V0aW9uLgorCisKK1dyaXRpbmcgVGVzdHMKKy0tLS0tLS0tLS0tLS0KKworVGhlIHRlc3Qgc2NyaXB0IGlzIHdyaXR0ZW4gYXMgYSBzaGVsbCBzY3JpcHQuICBJdCBzaG91bGQgc3RhcnQKK3dpdGggdGhlIHN0YW5kYXJkICIjIS9iaW4vc2giIHdpdGggY29weXJpZ2h0IG5vdGljZXMsIGFuZCBhbgorYXNzaWdubWVudCB0byB2YXJpYWJsZSAndGVzdF9kZXNjcmlwdGlvbicsIGxpa2UgdGhpczoKKworCSMhL2Jpbi9zaAorCSMKKwkjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworCSMKKworCXRlc3RfZGVzY3JpcHRpb249J3h4eCB0ZXN0IChvcHRpb24gLS1mcm90eikKKworCVRoaXMgdGVzdCByZWdpc3RlcnMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIGNhY2hlCisJYW5kIHRyaWVzIHRvIHJ1biBnaXQtbHMtZmlsZXMgd2l0aCBvcHRpb24gLS1mcm90ei4nCisKKworU291cmNlICd0ZXN0LWxpYi5zaCcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIGFzc2lnbmluZyB0ZXN0X2Rlc2NyaXB0aW9uLCB0aGUgdGVzdCBzY3JpcHQgc2hvdWxkIHNvdXJjZQordGVzdC1saWIuc2ggbGlrZSB0aGlzOgorCisJLiAuL3Rlc3QtbGliLnNoCisKK1RoaXMgdGVzdCBoYXJuZXNzIGxpYnJhcnkgZG9lcyB0aGUgZm9sbG93aW5nIHRoaW5nczoKKworIC0gSWYgdGhlIHNjcmlwdCBpcyBpbnZva2VkIHdpdGggY29tbWFuZCBsaW5lIGFyZ3VtZW50IC0taGVscAorICAgKG9yIC1oKSwgaXQgc2hvd3MgdGhlIHRlc3RfZGVzY3JpcHRpb24gYW5kIGV4aXRzLgorCisgLSBDcmVhdGVzIGFuIGVtcHR5IHRlc3QgZGlyZWN0b3J5IHdpdGggYW4gZW1wdHkgLmdpdC9vYmplY3RzIGRhdGFiYXNlCisgICBhbmQgY2hkaXIoMikgaW50byBpdC4gIFRoaXMgZGlyZWN0b3J5IGlzICd0L3RyYXNoCisgICBkaXJlY3RvcnkuJHRlc3RfbmFtZV93aXRob3V0X2RvdHNoJywgd2l0aCB0LyBzdWJqZWN0IHRvIGNoYW5nZSBieQorICAgdGhlIC0tcm9vdCBvcHRpb24gZG9jdW1lbnRlZCBhYm92ZS4KKworIC0gRGVmaW5lcyBzdGFuZGFyZCB0ZXN0IGhlbHBlciBmdW5jdGlvbnMgZm9yIHlvdXIgc2NyaXB0cyB0bworICAgdXNlLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGFsbCBzY3JpcHRzIGJlaGF2ZQorICAgY29uc2lzdGVudGx5IHdoZW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAtLXZlcmJvc2UgKG9yIC12KSwKKyAgIC0tZGVidWcgKG9yIC1kKSwgYW5kIC0taW1tZWRpYXRlIChvciAtaSkgaXMgZ2l2ZW4uCisKK0RvJ3MsIGRvbid0cyAmIHRoaW5ncyB0byBrZWVwIGluIG1pbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSBhcmUgYSBmZXcgZXhhbXBsZXMgb2YgdGhpbmdzIHlvdSBwcm9iYWJseSBzaG91bGQgYW5kIHNob3VsZG4ndCBkbword2hlbiB3cml0aW5nIHRlc3RzLgorCitEbzoKKworIC0gUHV0IGFsbCBjb2RlIGluc2lkZSB0ZXN0X2V4cGVjdF9zdWNjZXNzIGFuZCBvdGhlciBhc3NlcnRpb25zLgorCisgICBFdmVuIGNvZGUgdGhhdCBpc24ndCBhIHRlc3QgcGVyIHNlLCBidXQgbWVyZWx5IHNvbWUgc2V0dXAgY29kZQorICAgc2hvdWxkIGJlIGluc2lkZSBhIHRlc3QgYXNzZXJ0aW9uLgorCisgLSBDaGFpbiB5b3VyIHRlc3QgYXNzZXJ0aW9ucworCisgICBXcml0ZSB0ZXN0IGNvZGUgbGlrZSB0aGlzOgorCisJZ2l0IG1lcmdlIGZvbyAmJgorCWdpdCBwdXNoIGJhciAmJgorCXRlc3QgLi4uCisKKyAgIEluc3RlYWQgb2Y6CisKKwlnaXQgbWVyZ2UgaGxhCisJZ2l0IHB1c2ggZ2gKKwl0ZXN0IC4uLgorCisgICBUaGF0IHdheSBhbGwgb2YgdGhlIGNvbW1hbmRzIGluIHlvdXIgdGVzdHMgd2lsbCBzdWNjZWVkIG9yIGZhaWwuIElmCisgICB5b3UgbXVzdCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzb21ldGhpbmcsIGNvbnNpZGVyIHVzaW5nIGEKKyAgIGhlbHBlciBmdW5jdGlvbiAoZS5nLiB1c2Ugc2FuZV91bnNldCBpbnN0ZWFkIG9mIHVuc2V0LCBpbiBvcmRlcgorICAgdG8gYXZvaWQgdW5wb3J0YWJsZSByZXR1cm4gdmFsdWUgZm9yIHVuc2V0dGluZyBhIHZhcmlhYmxlIHRoYXQgd2FzCisgICBhbHJlYWR5IHVuc2V0KSwgb3IgcHJlcGVuZGluZyB0aGUgY29tbWFuZCB3aXRoIHRlc3RfbWlnaHRfZmFpbCBvcgorICAgdGVzdF9tdXN0X2ZhaWwuCisKKyAtIENoZWNrIHRoZSB0ZXN0IGNvdmVyYWdlIGZvciB5b3VyIHRlc3RzLiBTZWUgdGhlICJUZXN0IGNvdmVyYWdlIgorICAgYmVsb3cuCisKKyAgIERvbid0IGJsaW5kbHkgZm9sbG93IHRlc3QgY292ZXJhZ2UgbWV0cmljczsgaWYgYSBuZXcgZnVuY3Rpb24geW91IGFkZGVkCisgICBkb2Vzbid0IGhhdmUgYW55IGNvdmVyYWdlLCB0aGVuIHlvdSdyZSBwcm9iYWJseSBkb2luZyBzb21ldGhpbmcgd3JvbmcsCisgICBidXQgaGF2aW5nIDEwMCUgY292ZXJhZ2UgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgeW91IHRlc3RlZAorICAgZXZlcnl0aGluZy4KKworICAgVGVzdHMgdGhhdCBhcmUgbGlrZWx5IHRvIHNtb2tlIG91dCBmdXR1cmUgcmVncmVzc2lvbnMgYXJlIGJldHRlcgorICAgdGhhbiB0ZXN0cyB0aGF0IGp1c3QgaW5mbGF0ZSB0aGUgY292ZXJhZ2UgbWV0cmljcy4KKworIC0gV2hlbiBhIHRlc3QgY2hlY2tzIGZvciBhbiBhYnNvbHV0ZSBwYXRoIHRoYXQgYSBnaXQgY29tbWFuZCBnZW5lcmF0ZWQsCisgICBjb25zdHJ1Y3QgdGhlIGV4cGVjdGVkIHZhbHVlIHVzaW5nICQocHdkKSByYXRoZXIgdGhhbiAkUFdELAorICAgJFRFU1RfRElSRUNUT1JZLCBvciAkVFJBU0hfRElSRUNUT1JZLiBJdCBtYWtlcyBhIGRpZmZlcmVuY2Ugb24KKyAgIFdpbmRvd3MsIHdoZXJlIHRoZSBzaGVsbCAoTVNZUyBiYXNoKSBtYW5nbGVzIGFic29sdXRlIHBhdGggbmFtZXMuCisgICBGb3IgZGV0YWlscywgc2VlIHRoZSBjb21taXQgbWVzc2FnZSBvZiA0MTE0MTU2YWU5LgorCitEb24ndDoKKworIC0gZXhpdCgpIHdpdGhpbiBhIDxzY3JpcHQ+IHBhcnQuCisKKyAgIFRoZSBoYXJuZXNzIHdpbGwgY2F0Y2ggdGhpcyBhcyBhIHByb2dyYW1taW5nIGVycm9yIG9mIHRoZSB0ZXN0LgorICAgVXNlIHRlc3RfZG9uZSBpbnN0ZWFkIGlmIHlvdSBuZWVkIHRvIHN0b3AgdGhlIHRlc3RzIGVhcmx5IChzZWUKKyAgICJTa2lwcGluZyB0ZXN0cyIgYmVsb3cpLgorCisgLSB1c2UgJyEgZ2l0IGNtZCcgd2hlbiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGdpdCBjb21tYW5kIGV4aXRzCisgICB3aXRoIGZhaWx1cmUgaW4gYSBjb250cm9sbGVkIHdheSBieSBjYWxsaW5nICJkaWUoKSIuICBJbnN0ZWFkLAorICAgdXNlICd0ZXN0X211c3RfZmFpbCBnaXQgY21kJy4gIFRoaXMgd2lsbCBzaWduYWwgYSBmYWlsdXJlIGlmIGdpdAorICAgZGllcyBpbiBhbiB1bmV4cGVjdGVkIHdheSAoZS5nLiBzZWdmYXVsdCkuCisKKyAtIHVzZSBwZXJsIHdpdGhvdXQgc3BlbGxpbmcgaXQgYXMgIiRQRVJMX1BBVEgiLiBUaGlzIGlzIHRvIGhlbHAgb3VyCisgICBmcmllbmRzIG9uIFdpbmRvd3Mgd2hlcmUgdGhlIHBsYXRmb3JtIFBlcmwgb2Z0ZW4gYWRkcyBDUiBiZWZvcmUKKyAgIHRoZSBlbmQgb2YgbGluZSwgYW5kIHRoZXkgYnVuZGxlIEdpdCB3aXRoIGEgdmVyc2lvbiBvZiBQZXJsIHRoYXQKKyAgIGRvZXMgbm90IGRvIHNvLCB3aG9zZSBwYXRoIGlzIHNwZWNpZmllZCB3aXRoICRQRVJMX1BBVEguCisKKyAtIHVzZSBzaCB3aXRob3V0IHNwZWxsaW5nIGl0IGFzICIkU0hFTExfUEFUSCIsIHdoZW4gdGhlIHNjcmlwdCBjYW4KKyAgIGJlIG1pc2ludGVycHJldGVkIGJ5IGJyb2tlbiBwbGF0Zm9ybSBzaGVsbCAoZS5nLiBTb2xhcmlzKS4KKworIC0gY2hkaXIgYXJvdW5kIGluIHRlc3RzLiAgSXQgaXMgbm90IHN1ZmZpY2llbnQgdG8gY2hkaXIgdG8KKyAgIHNvbWV3aGVyZSBhbmQgdGhlbiBjaGRpciBiYWNrIHRvIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBsYXRlciBpbgorICAgdGhlIHRlc3QsIGFzIGFueSBpbnRlcm1lZGlhdGUgc3RlcCBjYW4gZmFpbCBhbmQgYWJvcnQgdGhlIHRlc3QsCisgICBjYXVzaW5nIHRoZSBuZXh0IHRlc3QgdG8gc3RhcnQgaW4gYW4gdW5leHBlY3RlZCBkaXJlY3RvcnkuICBEbyBzbworICAgaW5zaWRlIGEgc3Vic2hlbGwgaWYgbmVjZXNzYXJ5LgorCisgLSBCcmVhayB0aGUgVEFQIG91dHB1dAorCisgICBUaGUgcmF3IG91dHB1dCBmcm9tIHlvdXIgdGVzdCBtYXkgYmUgaW50ZXJwcmV0ZWQgYnkgYSBUQVAgaGFybmVzcy4gVEFQCisgICBoYXJuZXNzZXMgd2lsbCBpZ25vcmUgZXZlcnl0aGluZyB0aGV5IGRvbid0IGtub3cgYWJvdXQsIGJ1dCBkb24ndCBzdGVwCisgICBvbiB0aGVpciB0b2VzIGluIHRoZXNlIGFyZWFzOgorCisgICAtIERvbid0IHByaW50IGxpbmVzIGxpa2UgIiR4Li4keSIgd2hlcmUgJHggYW5kICR5IGFyZSBpbnRlZ2Vycy4KKworICAgLSBEb24ndCBwcmludCBsaW5lcyB0aGF0IGJlZ2luIHdpdGggIm9rIiBvciAibm90IG9rIi4KKworICAgVEFQIGhhcm5lc3NlcyBleHBlY3QgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggZWl0aGVyICJvayIgYW5kICJub3QKKyAgIG9rIiB0byBzaWduYWwgYSB0ZXN0IHBhc3NlZCBvciBmYWlsZWQgKGFuZCBvdXIgaGFybmVzcyBhbHJlYWR5CisgICBwcm9kdWNlcyBzdWNoIGxpbmVzKSwgc28geW91ciBzY3JpcHQgc2hvdWxkbid0IGVtaXQgc3VjaCBsaW5lcyB0bworICAgdGhlaXIgb3V0cHV0LgorCisgICBZb3UgY2FuIGdsZWFuIHNvbWUgZnVydGhlciBwb3NzaWJsZSBpc3N1ZXMgZnJvbSB0aGUgVEFQIGdyYW1tYXIKKyAgIChzZWUgaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9wZXJsZG9jP1RBUDo6UGFyc2VyOjpHcmFtbWFyI1RBUF9HcmFtbWFyKQorICAgYnV0IHRoZSBiZXN0IGluZGljYXRpb24gaXMgdG8ganVzdCBydW4gdGhlIHRlc3RzIHdpdGggcHJvdmUoMSksCisgICBpdCdsbCBjb21wbGFpbiBpZiBhbnl0aGluZyBpcyBhbWlzcy4KKworS2VlcCBpbiBtaW5kOgorCisgLSBJbnNpZGUgPHNjcmlwdD4gcGFydCwgdGhlIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3IKKyAgIHN0cmVhbXMgYXJlIGRpc2NhcmRlZCwgYW5kIHRoZSB0ZXN0IGhhcm5lc3Mgb25seSByZXBvcnRzICJvayIgb3IKKyAgICJub3Qgb2siIHRvIHRoZSBlbmQgdXNlciBydW5uaW5nIHRoZSB0ZXN0cy4gVW5kZXIgLS12ZXJib3NlLCB0aGV5CisgICBhcmUgc2hvd24gdG8gaGVscCBkZWJ1Z2dpbmcgdGhlIHRlc3RzLgorCisKK1NraXBwaW5nIHRlc3RzCistLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgbmVlZCB0byBza2lwIHRlc3RzIHlvdSBzaG91bGQgZG8gc28gYnkgdXNpbmcgdGhlIHRocmVlLWFyZyBmb3JtCitvZiB0aGUgdGVzdF8qIGZ1bmN0aW9ucyAoc2VlIHRoZSAiVGVzdCBoYXJuZXNzIGxpYnJhcnkiIHNlY3Rpb24KK2JlbG93KSwgZS5nLjoKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnSSBuZWVkIFBlcmwnICcKKyAgICAgICAgIiRQRVJMX1BBVEgiIC1lICJobGFnaCgpIGlmIHVuZl91bmYoKSIKKyAgICAnCisKK1RoZSBhZHZhbnRhZ2Ugb2Ygc2tpcHBpbmcgdGVzdHMgbGlrZSB0aGlzIGlzIHRoYXQgcGxhdGZvcm1zIHRoYXQgZG9uJ3QKK2hhdmUgdGhlIFBFUkwgYW5kIG90aGVyIG9wdGlvbmFsIGRlcGVuZGVuY2llcyBnZXQgYW4gaW5kaWNhdGlvbiBvZiBob3cKK21hbnkgdGVzdHMgdGhleSdyZSBtaXNzaW5nLgorCitJZiB0aGUgdGVzdCBjb2RlIGlzIHRvbyBoYWlyeSBmb3IgdGhhdCAoaS5lLiBkb2VzIGEgbG90IG9mIHNldHVwIHdvcmsKK291dHNpZGUgdGVzdCBhc3NlcnRpb25zKSB5b3UgY2FuIGFsc28gc2tpcCBhbGwgcmVtYWluaW5nIHRlc3RzIGJ5CitzZXR0aW5nIHNraXBfYWxsIGFuZCBpbW1lZGlhdGVseSBjYWxsIHRlc3RfZG9uZToKKworCWlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCisJdGhlbgorCSAgICBza2lwX2FsbD0nc2tpcHBpbmcgcGVybCBpbnRlcmZhY2UgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwkgICAgdGVzdF9kb25lCisJZmkKKworVGhlIHN0cmluZyB5b3UgZ2l2ZSB0byBza2lwX2FsbCB3aWxsIGJlIHVzZWQgYXMgYW4gZXhwbGFuYXRpb24gZm9yIHdoeQordGhlIHRlc3Qgd2FzIHNraXBwZWQuCisKK0VuZCB3aXRoIHRlc3RfZG9uZQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdXIgc2NyaXB0IHdpbGwgYmUgYSBzZXF1ZW5jZSBvZiB0ZXN0cywgdXNpbmcgaGVscGVyIGZ1bmN0aW9ucworZnJvbSB0aGUgdGVzdCBoYXJuZXNzIGxpYnJhcnkuICBBdCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQsIGNhbGwKKyd0ZXN0X2RvbmUnLgorCisKK1Rlc3QgaGFybmVzcyBsaWJyYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgYSBoYW5kZnVsIGhlbHBlciBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgdGVzdCBoYXJuZXNzCitsaWJyYXJ5IGZvciB5b3VyIHNjcmlwdCB0byB1c2UuCisKKyAtIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgWzxwcmVyZXE+XSA8bWVzc2FnZT4gPHNjcmlwdD4KKworICAgVXN1YWxseSB0YWtlcyB0d28gc3RyaW5ncyBhcyBwYXJhbWV0ZXJzLCBhbmQgZXZhbHVhdGVzIHRoZQorICAgPHNjcmlwdD4uICBJZiBpdCB5aWVsZHMgc3VjY2VzcywgdGVzdCBpcyBjb25zaWRlcmVkCisgICBzdWNjZXNzZnVsLiAgPG1lc3NhZ2U+IHNob3VsZCBzdGF0ZSB3aGF0IGl0IGlzIHRlc3RpbmcuCisKKyAgIEV4YW1wbGU6CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkgICAgJ2dpdC13cml0ZS10cmVlIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIGFuIGVtcHR5IHRyZWUuJyBcCisJICAgICd0cmVlPSQoZ2l0LXdyaXRlLXRyZWUpJworCisgICBJZiB5b3Ugc3VwcGx5IHRocmVlIHBhcmFtZXRlcnMgdGhlIGZpcnN0IHdpbGwgYmUgdGFrZW4gdG8gYmUgYQorICAgcHJlcmVxdWlzaXRlOyBzZWUgdGhlIHRlc3Rfc2V0X3ByZXJlcSBhbmQgdGVzdF9oYXZlX3ByZXJlcQorICAgZG9jdW1lbnRhdGlvbiBiZWxvdzoKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgLS1wYWdpbmF0ZSByZXYtbGlzdCB1c2VzIGEgcGFnZXInIFwKKwkgICAgJyAuLi4gJworCisgICBZb3UgY2FuIGFsc28gc3VwcGx5IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcHJlcmVxdWlzaXRlcywgaW4gdGhlCisgICByYXJlIGNhc2Ugd2hlcmUgeW91ciB0ZXN0IGRlcGVuZHMgb24gbW9yZSB0aGFuIG9uZToKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCxQWVRIT04gJ3lvIGRhd2cnIFwKKwkgICAgJyB0ZXN0ICQocGVybCAtRSAncHJpbnQgZXZhbCAiMSArIiAuIHF4W3B5dGhvbiAtYyAicHJpbnQgMiJdJykgPT0gIjQiICcKKworIC0gdGVzdF9leHBlY3RfZmFpbHVyZSBbPHByZXJlcT5dIDxtZXNzYWdlPiA8c2NyaXB0PgorCisgICBUaGlzIGlzIE5PVCB0aGUgb3Bwb3NpdGUgb2YgdGVzdF9leHBlY3Rfc3VjY2VzcywgYnV0IGlzIHVzZWQKKyAgIHRvIG1hcmsgYSB0ZXN0IHRoYXQgZGVtb25zdHJhdGVzIGEga25vd24gYnJlYWthZ2UuICBVbmxpa2UKKyAgIHRoZSB1c3VhbCB0ZXN0X2V4cGVjdF9zdWNjZXNzIHRlc3RzLCB3aGljaCBzYXkgIm9rIiBvbgorICAgc3VjY2VzcyBhbmQgIkZBSUwiIG9uIGZhaWx1cmUsIHRoaXMgd2lsbCBzYXkgIkZJWEVEIiBvbgorICAgc3VjY2VzcyBhbmQgInN0aWxsIGJyb2tlbiIgb24gZmFpbHVyZS4gIEZhaWx1cmVzIGZyb20gdGhlc2UKKyAgIHRlc3RzIHdvbid0IGNhdXNlIC1pIChpbW1lZGlhdGUpIHRvIHN0b3AuCisKKyAgIExpa2UgdGVzdF9leHBlY3Rfc3VjY2VzcyB0aGlzIGZ1bmN0aW9uIGNhbiBvcHRpb25hbGx5IHVzZSBhIHRocmVlCisgICBhcmd1bWVudCBpbnZvY2F0aW9uIHdpdGggYSBwcmVyZXF1aXNpdGUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorCisgLSB0ZXN0X2RlYnVnIDxzY3JpcHQ+CisKKyAgIFRoaXMgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQsIDxzY3JpcHQ+LCBhbmQgZXZhbHVhdGVzIGl0IG9ubHkKKyAgIHdoZW4gdGhlIHRlc3Qgc2NyaXB0IGlzIHN0YXJ0ZWQgd2l0aCAtLWRlYnVnIGNvbW1hbmQgbGluZQorICAgYXJndW1lbnQuICBUaGlzIGlzIHByaW1hcmlseSBtZWFudCBmb3IgdXNlIGR1cmluZyB0aGUKKyAgIGRldmVsb3BtZW50IG9mIGEgbmV3IHRlc3Qgc2NyaXB0LgorCisgLSB0ZXN0X2RvbmUKKworICAgWW91ciB0ZXN0IHNjcmlwdCBtdXN0IGhhdmUgdGVzdF9kb25lIGF0IHRoZSBlbmQuICBJdHMgcHVycG9zZQorICAgaXMgdG8gc3VtbWFyaXplIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMgaW4gdGhlIHRlc3Qgc2NyaXB0IGFuZAorICAgZXhpdCB3aXRoIGFuIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCisKKyAtIHRlc3RfdGljaworCisgICBNYWtlIGNvbW1pdCBhbmQgdGFnIG5hbWVzIGNvbnNpc3RlbnQgYnkgc2V0dGluZyB0aGUgYXV0aG9yIGFuZAorICAgY29tbWl0dGVyIHRpbWVzIHRvIGRlZmluZWQgc3RhdGUuICBTdWJzZXF1ZW50IGNhbGxzIHdpbGwKKyAgIGFkdmFuY2UgdGhlIHRpbWVzIGJ5IGEgZml4ZWQgYW1vdW50LgorCisgLSB0ZXN0X2NvbW1pdCA8bWVzc2FnZT4gWzxmaWxlbmFtZT4gWzxjb250ZW50cz5dXQorCisgICBDcmVhdGVzIGEgY29tbWl0IHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UsIGNvbW1pdHRpbmcgdGhlIGdpdmVuCisgICBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnRzIChkZWZhdWx0IGZvciBib3RoIGlzIHRvIHJldXNlIHRoZQorICAgbWVzc2FnZSBzdHJpbmcpLCBhbmQgYWRkcyBhIHRhZyAoYWdhaW4gcmV1c2luZyB0aGUgbWVzc2FnZQorICAgc3RyaW5nIGFzIG5hbWUpLiAgQ2FsbHMgdGVzdF90aWNrIHRvIG1ha2UgdGhlIFNIQS0xcworICAgcmVwcm9kdWNpYmxlLgorCisgLSB0ZXN0X21lcmdlIDxtZXNzYWdlPiA8Y29tbWl0LW9yLXRhZz4KKworICAgTWVyZ2VzIHRoZSBnaXZlbiByZXYgdXNpbmcgdGhlIGdpdmVuIG1lc3NhZ2UuICBMaWtlIHRlc3RfY29tbWl0LAorICAgY3JlYXRlcyBhIHRhZyBhbmQgY2FsbHMgdGVzdF90aWNrIGJlZm9yZSBjb21taXR0aW5nLgorCisgLSB0ZXN0X3NldF9wcmVyZXEgPHByZXJlcT4KKworICAgU2V0IGEgdGVzdCBwcmVyZXF1aXNpdGUgdG8gYmUgdXNlZCBsYXRlciB3aXRoIHRlc3RfaGF2ZV9wcmVyZXEuIFRoZQorICAgdGVzdC1saWIgd2lsbCBzZXQgc29tZSBwcmVyZXF1aXNpdGVzIGZvciB5b3UsIHNlZSB0aGUKKyAgICJQcmVyZXF1aXNpdGVzIiBzZWN0aW9uIGJlbG93IGZvciBhIGZ1bGwgbGlzdCBvZiB0aGVzZS4KKworICAgT3RoZXJzIHlvdSBjYW4gc2V0IHlvdXJzZWxmIGFuZCB1c2UgbGF0ZXIgd2l0aCBlaXRoZXIKKyAgIHRlc3RfaGF2ZV9wcmVyZXEgZGlyZWN0bHksIG9yIHRoZSB0aHJlZSBhcmd1bWVudCBpbnZvY2F0aW9uIG9mCisgICB0ZXN0X2V4cGVjdF9zdWNjZXNzIGFuZCB0ZXN0X2V4cGVjdF9mYWlsdXJlLgorCisgLSB0ZXN0X2hhdmVfcHJlcmVxIDxwcmVyZXE+CisKKyAgIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVyZXF1aXNpdGUgcHJldmlvdXNseSBzZXQgd2l0aAorICAgdGVzdF9zZXRfcHJlcmVxLiBUaGUgbW9zdCBjb21tb24gdXNlIG9mIHRoaXMgZGlyZWN0bHkgaXMgdG8gc2tpcAorICAgYWxsIHRoZSB0ZXN0cyBpZiB3ZSBkb24ndCBoYXZlIHNvbWUgZXNzZW50aWFsIHByZXJlcXVpc2l0ZToKKworCWlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCisJdGhlbgorCSAgICBza2lwX2FsbD0nc2tpcHBpbmcgcGVybCBpbnRlcmZhY2UgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwkgICAgdGVzdF9kb25lCisJZmkKKworIC0gdGVzdF9leHRlcm5hbCBbPHByZXJlcT5dIDxtZXNzYWdlPiA8ZXh0ZXJuYWw+IDxzY3JpcHQ+CisKKyAgIEV4ZWN1dGUgYSA8c2NyaXB0PiB3aXRoIGFuIDxleHRlcm5hbD4gaW50ZXJwcmV0ZXIgKGxpa2UgcGVybCkuIFRoaXMKKyAgIHdhcyBhZGRlZCBmb3IgdGVzdHMgbGlrZSB0OTcwMC1wZXJsLWdpdC5zaCB3aGljaCBkbyBtb3N0IG9mIHRoZWlyCisgICB3b3JrIGluIGFuIGV4dGVybmFsIHRlc3Qgc2NyaXB0LgorCisJdGVzdF9leHRlcm5hbCBcCisJICAgICdHaXR3ZWJDYWNoZTo6KkZpbGVDYWNoZSonIFwKKwkgICAgIiRQRVJMX1BBVEgiICIkVEVTVF9ESVJFQ1RPUlkiL3Q5NTAzL3Rlc3RfY2FjaGVfaW50ZXJmYWNlLnBsCisKKyAgIElmIHRoZSB0ZXN0IGlzIG91dHB1dHRpbmcgaXRzIG93biBUQVAgeW91IHNob3VsZCBzZXQgdGhlCisgICB0ZXN0X2V4dGVybmFsX2hhc190YXAgdmFyaWFibGUgc29tZXdoZXJlIGJlZm9yZSBjYWxsaW5nIHRoZSBmaXJzdAorICAgdGVzdF9leHRlcm5hbCogZnVuY3Rpb24uIFNlZSB0OTcwMC1wZXJsLWdpdC5zaCBmb3IgYW4gZXhhbXBsZS4KKworCSMgVGhlIGV4dGVybmFsIHRlc3Qgd2lsbCBvdXRwdXRzIGl0cyBvd24gcGxhbgorCXRlc3RfZXh0ZXJuYWxfaGFzX3RhcD0xCisKKyAtIHRlc3RfZXh0ZXJuYWxfd2l0aG91dF9zdGRlcnIgWzxwcmVyZXE+XSA8bWVzc2FnZT4gPGV4dGVybmFsPiA8c2NyaXB0PgorCisgICBMaWtlIHRlc3RfZXh0ZXJuYWwgYnV0IGZhaWwgaWYgdGhlcmUncyBhbnkgb3V0cHV0IG9uIHN0ZGVyciwKKyAgIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIGV4aXQgY29kZS4KKworCXRlc3RfZXh0ZXJuYWxfd2l0aG91dF9zdGRlcnIgXAorCSAgICAnUGVybCBBUEknIFwKKwkgICAgIiRQRVJMX1BBVEgiICIkVEVTVF9ESVJFQ1RPUlkiL3Q5NzAwL3Rlc3QucGwKKworIC0gdGVzdF9leHBlY3RfY29kZSA8ZXhpdC1jb2RlPiA8Y29tbWFuZD4KKworICAgUnVuIGEgY29tbWFuZCBhbmQgZW5zdXJlIHRoYXQgaXQgZXhpdHMgd2l0aCB0aGUgZ2l2ZW4gZXhpdCBjb2RlLgorICAgRm9yIGV4YW1wbGU6CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZXJnZSB3aXRoIGQvZiBjb25mbGljdHMnICcKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZSAibWVyZ2UgbXNnIiBCIG1hc3RlcgorCScKKworIC0gdGVzdF9tdXN0X2ZhaWwgPGdpdC1jb21tYW5kPgorCisgICBSdW4gYSBnaXQgY29tbWFuZCBhbmQgZW5zdXJlIGl0IGZhaWxzIGluIGEgY29udHJvbGxlZCB3YXkuICBVc2UKKyAgIHRoaXMgaW5zdGVhZCBvZiAiISA8Z2l0LWNvbW1hbmQ+Ii4gIFdoZW4gZ2l0LWNvbW1hbmQgZGllcyBkdWUgdG8gYQorICAgc2VnZmF1bHQsIHRlc3RfbXVzdF9mYWlsIGRpYWdub3NlcyBpdCBhcyBhbiBlcnJvcjsgIiEgPGdpdC1jb21tYW5kPiIKKyAgIHRyZWF0cyBpdCBhcyBqdXN0IGFub3RoZXIgZXhwZWN0ZWQgZmFpbHVyZSwgd2hpY2ggd291bGQgbGV0IHN1Y2ggYQorICAgYnVnIGdvIHVubm90aWNlZC4KKworIC0gdGVzdF9taWdodF9mYWlsIDxnaXQtY29tbWFuZD4KKworICAgU2ltaWxhciB0byB0ZXN0X211c3RfZmFpbCwgYnV0IHRvbGVyYXRlIHN1Y2Nlc3MsIHRvby4gIFVzZSB0aGlzCisgICBpbnN0ZWFkIG9mICI8Z2l0LWNvbW1hbmQ+IHx8IDoiIHRvIGNhdGNoIGZhaWx1cmVzIGR1ZSB0byBzZWd2LgorCisgLSB0ZXN0X2NtcCA8ZXhwZWN0ZWQ+IDxhY3R1YWw+CisKKyAgIENoZWNrIHdoZXRoZXIgdGhlIGNvbnRlbnQgb2YgdGhlIDxhY3R1YWw+IGZpbGUgbWF0Y2hlcyB0aGUKKyAgIDxleHBlY3RlZD4gZmlsZS4gIFRoaXMgYmVoYXZlcyBsaWtlICJjbXAiIGJ1dCBwcm9kdWNlcyBtb3JlCisgICBoZWxwZnVsIG91dHB1dCB3aGVuIHRoZSB0ZXN0IGlzIHJ1biB3aXRoICItdiIgb3B0aW9uLgorCisgLSB0ZXN0X2xpbmVfY291bnQgKD0gfCAtbHQgfCAtZ2UgfCAuLi4pIDxsZW5ndGg+IDxmaWxlPgorCisgICBDaGVjayB3aGV0aGVyIGEgZmlsZSBoYXMgdGhlIGxlbmd0aCBpdCBpcyBleHBlY3RlZCB0by4KKworIC0gdGVzdF9wYXRoX2lzX2ZpbGUgPHBhdGg+IFs8ZGlhZ25vc2lzPl0KKyAgIHRlc3RfcGF0aF9pc19kaXIgPHBhdGg+IFs8ZGlhZ25vc2lzPl0KKyAgIHRlc3RfcGF0aF9pc19taXNzaW5nIDxwYXRoPiBbPGRpYWdub3Npcz5dCisKKyAgIENoZWNrIGlmIHRoZSBuYW1lZCBwYXRoIGlzIGEgZmlsZSwgaWYgdGhlIG5hbWVkIHBhdGggaXMgYQorICAgZGlyZWN0b3J5LCBvciBpZiB0aGUgbmFtZWQgcGF0aCBkb2VzIG5vdCBleGlzdCwgcmVzcGVjdGl2ZWx5LAorICAgYW5kIGZhaWwgb3RoZXJ3aXNlLCBzaG93aW5nIHRoZSA8ZGlhZ25vc2lzPiB0ZXh0LgorCisgLSB0ZXN0X3doZW5fZmluaXNoZWQgPHNjcmlwdD4KKworICAgUHJlcGVuZCA8c2NyaXB0PiB0byBhIGxpc3Qgb2YgY29tbWFuZHMgdG8gcnVuIHRvIGNsZWFuIHVwCisgICBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRlc3QuICBJZiBzb21lIGNsZWFuLXVwIGNvbW1hbmQKKyAgIGZhaWxzLCB0aGUgdGVzdCB3aWxsIG5vdCBwYXNzLgorCisgICBFeGFtcGxlOgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHBvaW50aW5nIHRvIG5vbi1jb21taXQnICcKKwkJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+LmdpdC9yZWZzL2hlYWRzL2ludmFsaWQgJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQiICYmCisJCS4uLgorCScKKworIC0gdGVzdF9wYXVzZQorCisJVGhpcyBjb21tYW5kIGlzIHVzZWZ1bCBmb3Igd3JpdGluZyBhbmQgZGVidWdnaW5nIHRlc3RzIGFuZCBtdXN0IGJlCisJcmVtb3ZlZCBiZWZvcmUgc3VibWl0dGluZy4gSXQgaGFsdHMgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgdGVzdCBhbmQKKwlzcGF3bnMgYSBzaGVsbCBpbiB0aGUgdHJhc2ggZGlyZWN0b3J5LiBFeGl0IHRoZSBzaGVsbCB0byBjb250aW51ZQorCXRoZSB0ZXN0LiBFeGFtcGxlOgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCcgJworCQlnaXQgZG8tc29tZXRoaW5nID5hY3R1YWwgJiYKKwkJdGVzdF9wYXVzZSAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK1ByZXJlcXVpc2l0ZXMKKy0tLS0tLS0tLS0tLS0KKworVGhlc2UgYXJlIHRoZSBwcmVyZXF1aXNpdGVzIHRoYXQgdGhlIHRlc3QgbGlicmFyeSBwcmVkZWZpbmVzIHdpdGgKK3Rlc3RfaGF2ZV9wcmVyZXEuCisKK1NlZSB0aGUgcHJlcmVxIGFyZ3VtZW50IHRvIHRoZSB0ZXN0XyogZnVuY3Rpb25zIGluIHRoZSAiVGVzdCBoYXJuZXNzCitsaWJyYXJ5IiBzZWN0aW9uIGFib3ZlIGFuZCB0aGUgInRlc3RfaGF2ZV9wcmVyZXEiIGZ1bmN0aW9uIGZvciBob3cgdG8KK3VzZSB0aGVzZSwgYW5kICJ0ZXN0X3NldF9wcmVyZXEiIGZvciBob3cgdG8gZGVmaW5lIHlvdXIgb3duLgorCisgLSBQRVJMICYgUFlUSE9OCisKKyAgIEdpdCB3YXNuJ3QgY29tcGlsZWQgd2l0aCBOT19QRVJMPVllc1BsZWFzZSBvcgorICAgTk9fUFlUSE9OPVllc1BsZWFzZS4gV3JhcCBhbnkgdGVzdHMgdGhhdCBuZWVkIFBlcmwgb3IgUHl0aG9uIGluCisgICB0aGVzZS4KKworIC0gUE9TSVhQRVJNCisKKyAgIFRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIFBPU0lYIHN0eWxlIHBlcm1pc3Npb24gYml0cy4KKworIC0gQlNMQVNIUFNQRUMKKworICAgQmFja3NsYXNoZXMgaW4gcGF0aHNwZWMgYXJlIG5vdCBkaXJlY3Rvcnkgc2VwYXJhdG9ycy4gVGhpcyBpcyBub3QKKyAgIHNldCBvbiBXaW5kb3dzLiBTZWUgNmZkMTEwNmEgZm9yIGRldGFpbHMuCisKKyAtIEVYRUNLRUVQU1BJRAorCisgICBUaGUgcHJvY2VzcyByZXRhaW5zIHRoZSBzYW1lIHBpZCBhY3Jvc3MgZXhlYygyKS4gU2VlIGZiOWEyYmVhIGZvcgorICAgZGV0YWlscy4KKworIC0gU1lNTElOS1MKKworICAgVGhlIGZpbGVzeXN0ZW0gd2UncmUgb24gc3VwcG9ydHMgc3ltYm9saWMgbGlua3MuIEUuZy4gYSBGQVQKKyAgIGZpbGVzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IHRoZXNlLiBTZWUgNzA0YTMxNDMgZm9yIGRldGFpbHMuCisKKyAtIFNBTklUWQorCisgICBUZXN0IGlzIG5vdCBydW4gYnkgcm9vdCB1c2VyLCBhbmQgYW4gYXR0ZW1wdCB0byB3cml0ZSB0byBhbgorICAgdW53cml0YWJsZSBmaWxlIGlzIGV4cGVjdGVkIHRvIGZhaWwgY29ycmVjdGx5LgorCisgLSBMSUJQQ1JFCisKKyAgIEdpdCB3YXMgY29tcGlsZWQgd2l0aCBVU0VfTElCUENSRT1ZZXNQbGVhc2UuIFdyYXAgYW55IHRlc3RzCisgICB0aGF0IHVzZSBnaXQtZ3JlcCAtLXBlcmwtcmVnZXhwIG9yIGdpdC1ncmVwIC1QIGluIHRoZXNlLgorCisgLSBDQVNFX0lOU0VOU0lUSVZFX0ZTCisKKyAgIFRlc3QgaXMgcnVuIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbS4KKworIC0gVVRGOF9ORkRfVE9fTkZDCisKKyAgIFRlc3QgaXMgcnVuIG9uIGEgZmlsZXN5c3RlbSB3aGljaCBjb252ZXJ0cyBkZWNvbXBvc2VkIHV0Zi04IChuZmQpCisgICB0byBwcmVjb21wb3NlZCB1dGYtOCAobmZjKS4KKworVGlwcyBmb3IgV3JpdGluZyBUZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB3aXRoIGFueSBwcm9ncmFtbWluZyBwcm9qZWN0cywgZXhpc3RpbmcgcHJvZ3JhbXMgYXJlIHRoZSBiZXN0Citzb3VyY2Ugb2YgdGhlIGluZm9ybWF0aW9uLiAgSG93ZXZlciwgZG8gX25vdF8gZW11bGF0ZQordDAwMDAtYmFzaWMuc2ggd2hlbiB3cml0aW5nIHlvdXIgdGVzdHMuICBUaGUgdGVzdCBpcyBzcGVjaWFsIGluCit0aGF0IGl0IHRyaWVzIHRvIHZhbGlkYXRlIHRoZSB2ZXJ5IGNvcmUgb2YgR0lULiAgRm9yIGV4YW1wbGUsIGl0Citrbm93cyB0aGF0IHRoZXJlIHdpbGwgYmUgMjU2IHN1YmRpcmVjdG9yaWVzIHVuZGVyIC5naXQvb2JqZWN0cy8sCithbmQgaXQga25vd3MgdGhhdCB0aGUgb2JqZWN0IElEIG9mIGFuIGVtcHR5IHRyZWUgaXMgYSBjZXJ0YWluCis0MC1ieXRlIHN0cmluZy4gIFRoaXMgaXMgZGVsaWJlcmF0ZWx5IGRvbmUgc28gaW4gdDAwMDAtYmFzaWMuc2gKK2JlY2F1c2UgdGhlIHRoaW5ncyB0aGUgdmVyeSBiYXNpYyBjb3JlIHRlc3QgdHJpZXMgdG8gYWNoaWV2ZSBpcwordG8gc2VydmUgYXMgYSBiYXNpcyBmb3IgcGVvcGxlIHdobyBhcmUgY2hhbmdpbmcgdGhlIEdJVCBpbnRlcm5hbAorZHJhc3RpY2FsbHkuICBGb3IgdGhlc2UgcGVvcGxlLCBhZnRlciBtYWtpbmcgY2VydGFpbiBjaGFuZ2VzLAorbm90IHNlZWluZyBmYWlsdXJlcyBmcm9tIHRoZSBiYXNpYyB0ZXN0IF9pc18gYSBmYWlsdXJlLiAgQW5kCitzdWNoIGRyYXN0aWMgY2hhbmdlcyB0byB0aGUgY29yZSBHSVQgdGhhdCBldmVuIGNoYW5nZXMgdGhlc2UKK290aGVyd2lzZSBzdXBwb3NlZGx5IHN0YWJsZSBvYmplY3QgSURzIHNob3VsZCBiZSBhY2NvbXBhbmllZCBieQorYW4gdXBkYXRlIHRvIHQwMDAwLWJhc2ljLnNoLgorCitIb3dldmVyLCBvdGhlciB0ZXN0cyB0aGF0IHNpbXBseSByZWx5IG9uIGJhc2ljIHBhcnRzIG9mIHRoZSBjb3JlCitHSVQgd29ya2luZyBwcm9wZXJseSBzaG91bGQgbm90IGhhdmUgdGhhdCBsZXZlbCBvZiBpbnRpbWF0ZQora25vd2xlZGdlIG9mIHRoZSBjb3JlIEdJVCBpbnRlcm5hbHMuICBJZiBhbGwgdGhlIHRlc3Qgc2NyaXB0cworaGFyZGNvZGVkIHRoZSBvYmplY3QgSURzIGxpa2UgdDAwMDAtYmFzaWMuc2ggZG9lcywgdGhhdCBkZWZlYXRzCit0aGUgcHVycG9zZSBvZiB0MDAwMC1iYXNpYy5zaCwgd2hpY2ggaXMgdG8gaXNvbGF0ZSB0aGF0IGxldmVsIG9mCit2YWxpZGF0aW9uIGluIG9uZSBwbGFjZS4gIFlvdXIgdGVzdCBhbHNvIGVuZHMgdXAgbmVlZGluZwordXBkYXRpbmcgd2hlbiBzdWNoIGEgY2hhbmdlIHRvIHRoZSBpbnRlcm5hbCBoYXBwZW5zLCBzbyBkbyBfbm90XworZG8gaXQgYW5kIGxlYXZlIHRoZSBsb3cgbGV2ZWwgb2YgdmFsaWRhdGlvbiB0byB0MDAwMC1iYXNpYy5zaC4KKworVGVzdCBjb3ZlcmFnZQorLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHVzZSB0aGUgY292ZXJhZ2UgdGVzdHMgdG8gZmluZCBjb2RlIHBhdGhzIHRoYXQgYXJlIG5vdCBiZWluZwordXNlZCBvciBwcm9wZXJseSBleGVyY2lzZWQgeWV0LgorCitUbyBkbyB0aGF0LCBydW4gdGhlIGNvdmVyYWdlIHRhcmdldCBhdCB0aGUgdG9wLWxldmVsIChub3QgaW4gdGhlIHQvCitkaXJlY3RvcnkpOgorCisgICAgbWFrZSBjb3ZlcmFnZQorCitUaGF0J2xsIGNvbXBpbGUgR2l0IHdpdGggR0NDJ3MgY292ZXJhZ2UgYXJndW1lbnRzLCBhbmQgZ2VuZXJhdGUgYSB0ZXN0CityZXBvcnQgd2l0aCBnY292IGFmdGVyIHRoZSB0ZXN0cyBmaW5pc2guIFJ1bm5pbmcgdGhlIGNvdmVyYWdlIHRlc3RzCitjYW4gdGFrZSBhIHdoaWxlLCBzaW5jZSBydW5uaW5nIHRoZSB0ZXN0cyBpbiBwYXJhbGxlbCBpcyBpbmNvbXBhdGlibGUKK3dpdGggR0NDJ3MgY292ZXJhZ2UgbW9kZS4KKworQWZ0ZXIgdGhlIHRlc3RzIGhhdmUgcnVuIHlvdSBjYW4gZ2VuZXJhdGUgYSBsaXN0IG9mIHVudGVzdGVkCitmdW5jdGlvbnM6CisKKyAgICBtYWtlIGNvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9ucworCitZb3UgY2FuIGFsc28gZ2VuZXJhdGUgYSBkZXRhaWxlZCBwZXItZmlsZSBIVE1MIHJlcG9ydCB1c2luZyB0aGUKK0RldmVsOjpDb3ZlciBtb2R1bGUuIFRvIGluc3RhbGwgaXQgZG86CisKKyAgICMgT24gRGViaWFuIG9yIFVidW50dToKKyAgIHN1ZG8gYXB0aXR1ZGUgaW5zdGFsbCBsaWJkZXZlbC1jb3Zlci1wZXJsCisKKyAgICMgRnJvbSB0aGUgQ1BBTiB3aXRoIGNwYW5taW51cworICAgY3VybCAtTCBodHRwOi8vY3Bhbm1pbi51cyB8IHBlcmwgLSAtLXN1ZG8gLS1zZWxmLXVwZ3JhZGUKKyAgIGNwYW5tIC0tc3VkbyBEZXZlbDo6Q292ZXIKKworVGhlbiwgYXQgdGhlIHRvcC1sZXZlbDoKKworICAgIG1ha2UgY292ZXJfZGJfaHRtbAorCitUaGF0J2xsIGdlbmVyYXRlIGEgZGV0YWlsZWQgY292ZXIgcmVwb3J0IGluIHRoZSAiY292ZXJfZGJfaHRtbCIKK2RpcmVjdG9yeSwgd2hpY2ggeW91IGNhbiB0aGVuIGNvcHkgdG8gYSB3ZWJzZXJ2ZXIsIG9yIGluc3BlY3QgbG9jYWxseQoraW4gYSBicm93c2VyLgpkaWZmIC0tZ2l0IGEvdC9hZ2dyZWdhdGUtcmVzdWx0cy5zaCBiL3QvYWdncmVnYXRlLXJlc3VsdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzkxM2UyMAotLS0gL2Rldi9udWxsCisrKyBiL3QvYWdncmVnYXRlLXJlc3VsdHMuc2gKQEAgLTAsMCArMSw0NiBAQAorIyEvYmluL3NoCisKK2ZhaWxlZF90ZXN0cz0KK2ZpeGVkPTAKK3N1Y2Nlc3M9MAorZmFpbGVkPTAKK2Jyb2tlbj0wCit0b3RhbD0wCisKK3doaWxlIHJlYWQgZmlsZQorZG8KKwl3aGlsZSByZWFkIHR5cGUgdmFsdWUKKwlkbworCQljYXNlICR0eXBlIGluCisJCScnKQorCQkJY29udGludWUgOzsKKwkJZml4ZWQpCisJCQlmaXhlZD0kKCgkZml4ZWQgKyAkdmFsdWUpKSA7OworCQlzdWNjZXNzKQorCQkJc3VjY2Vzcz0kKCgkc3VjY2VzcyArICR2YWx1ZSkpIDs7CisJCWZhaWxlZCkKKwkJCWZhaWxlZD0kKCgkZmFpbGVkICsgJHZhbHVlKSkKKwkJCWlmIHRlc3QgJHZhbHVlICE9IDAKKwkJCXRoZW4KKwkJCQl0ZXN0bnVtPSQoZXhwciAiJGZpbGUiIDogJ3Rlc3QtcmVzdWx0cy9cKHRbMC05XSpcKS0nKQorCQkJCWZhaWxlZF90ZXN0cz0iJGZhaWxlZF90ZXN0cyAkdGVzdG51bSIKKwkJCWZpCisJCQk7OworCQlicm9rZW4pCisJCQlicm9rZW49JCgoJGJyb2tlbiArICR2YWx1ZSkpIDs7CisJCXRvdGFsKQorCQkJdG90YWw9JCgoJHRvdGFsICsgJHZhbHVlKSkgOzsKKwkJZXNhYworCWRvbmUgPCIkZmlsZSIKK2RvbmUKKworaWYgdGVzdCAtbiAiJGZhaWxlZF90ZXN0cyIKK3RoZW4KKwlwcmludGYgIlxuZmFpbGVkIHRlc3Qocyk6JGZhaWxlZF90ZXN0c1xuXG4iCitmaQorCitwcmludGYgIiUtOHMlZFxuIiBmaXhlZCAkZml4ZWQKK3ByaW50ZiAiJS04cyVkXG4iIHN1Y2Nlc3MgJHN1Y2Nlc3MKK3ByaW50ZiAiJS04cyVkXG4iIGZhaWxlZCAkZmFpbGVkCitwcmludGYgIiUtOHMlZFxuIiBicm9rZW4gJGJyb2tlbgorcHJpbnRmICIlLThzJWRcbiIgdG90YWwgJHRvdGFsCmRpZmYgLS1naXQgYS90L2Fubm90YXRlLXRlc3RzLnNoIGIvdC9hbm5vdGF0ZS10ZXN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTZhNzdkCi0tLSAvZGV2L251bGwKKysrIGIvdC9hbm5vdGF0ZS10ZXN0cy5zaApAQCAtMCwwICsxLDEzNyBAQAorIyBUaGlzIGZpbGUgaXNuJ3QgdXNlZCBhcyBhIHRlc3Qgc2NyaXB0IGRpcmVjdGx5LCBpbnN0ZWFkIGl0IGlzCisjIHNvdXJjZWQgZnJvbSB0ODAwMS1hbm5vdGF0ZS5zaCBhbmQgdDgwMDItYmxhbWUuc2guCisKK2NoZWNrX2NvdW50ICgpIHsKKwloZWFkPQorCWNhc2UgIiQxIiBpbiAtaCkgaGVhZD0iJDIiOyBzaGlmdDsgc2hpZnQgOzsgZXNhYworCWVjaG8gIiRQUk9HIGZpbGUgJGhlYWQiID4mNAorCSRQUk9HIGZpbGUgJGhlYWQgPi5yZXN1bHQgfHwgcmV0dXJuIDEKKwljYXQgLnJlc3VsdCB8IHBlcmwgLWUgJworCQlteSAlZXhwZWN0ID0gKEBBUkdWKTsKKwkJbXkgJWNvdW50ID0gbWFwIHsgJF8gPT4gMCB9IGtleXMgJWV4cGVjdDsKKwkJd2hpbGUgKDxTVERJTj4pIHsKKwkJCWlmICgvXlswLTlhLWZdK1x0XCgoW15cdF0rKVx0LykgeworCQkJCW15ICRhdXRob3IgPSAkMTsKKwkJCQlmb3IgKCRhdXRob3IpIHsgcy9eXHMqLy87IHMvXHMqJC8vOyB9CisJCQkJJGNvdW50eyRhdXRob3J9Kys7CisJCQl9CisJCX0KKwkJbXkgJGJhZCA9IDA7CisJCXdoaWxlIChteSAoJGF1dGhvciwgJGNvdW50KSA9IGVhY2ggJWNvdW50KSB7CisJCQlteSAkb2s7CisJCQlteSAkdmFsdWUgPSAwOworCQkJJHZhbHVlID0gJGV4cGVjdHskYXV0aG9yfSBpZiBkZWZpbmVkICRleHBlY3R7JGF1dGhvcn07CisJCQlpZiAoJHZhbHVlICE9ICRjb3VudCkgeworCQkJCSRiYWQgPSAxOworCQkJCSRvayA9ICJiYWQiOworCQkJfQorCQkJZWxzZSB7CisJCQkJJG9rID0gImdvb2QiOworCQkJfQorCQkJcHJpbnQgU1RERVJSICJBdXRob3IgJGF1dGhvciAoZXhwZWN0ZWQgJHZhbHVlLCBhdHRyaWJ1dGVkICRjb3VudCkgJG9rXG4iOworCQl9CisJCWV4aXQoJGJhZCk7CisJJyAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHJlZmVyZW5jZSB0cmVlJyBcCisgICAgJ2VjaG8gIjFBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSIgPmZpbGUgJiYKKyAgICAgZWNobyAibGF6eSBkb2ciID4+ZmlsZSAmJgorICAgICBnaXQgYWRkIGZpbGUgJiYKKyAgICAgR0lUX0FVVEhPUl9OQU1FPSJBIiBHSVRfQVVUSE9SX0VNQUlMPSJBQHRlc3QuZ2l0IiBnaXQgY29tbWl0IC1hIC1tICJJbml0aWFsLiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVjayBhbGwgbGluZXMgYmxhbWVkIG9uIEEnIFwKKyAgICAnY2hlY2tfY291bnQgQSAyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnU2V0dXAgbmV3IGxpbmVzIGJsYW1lZCBvbiBCJyBcCisgICAgJ2VjaG8gIjJBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSIgPj5maWxlICYmCisgICAgIGVjaG8gImxhenkgZG9nIiA+PiBmaWxlICYmCisgICAgIEdJVF9BVVRIT1JfTkFNRT0iQiIgR0lUX0FVVEhPUl9FTUFJTD0iQkB0ZXN0LmdpdCIgZ2l0IGNvbW1pdCAtYSAtbSAiU2Vjb25kLiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdUd28gbGluZXMgYmxhbWVkIG9uIEEsIHR3byBvbiBCJyBcCisgICAgJ2NoZWNrX2NvdW50IEEgMiBCIDInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtZXJnZS1zZXR1cCBwYXJ0IDEnIFwKKyAgICAnZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgbWFzdGVyICYmCisgICAgIGVjaG8gIjNBIHNsb3cgZ3JlZW4gZm94IGp1bXBzIGludG8gdGhlIiA+PiBmaWxlICYmCisgICAgIGVjaG8gIndlbGwuIiA+PiBmaWxlICYmCisgICAgIEdJVF9BVVRIT1JfTkFNRT0iQjEiIEdJVF9BVVRIT1JfRU1BSUw9IkIxQHRlc3QuZ2l0IiBnaXQgY29tbWl0IC1hIC1tICJCcmFuY2gxLTEiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnVHdvIGxpbmVzIGJsYW1lZCBvbiBBLCB0d28gb24gQiwgdHdvIG9uIEIxJyBcCisgICAgJ2NoZWNrX2NvdW50IEEgMiBCIDIgQjEgMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ21lcmdlLXNldHVwIHBhcnQgMicgXAorICAgICdnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBtYXN0ZXIgJiYKKyAgICAgc2VkIC1lICJzLzJBIHF1aWNrIGJyb3duLzRBIHF1aWNrIGJyb3duIGxhenkgZG9nLyIgPCBmaWxlID4gZmlsZS5uZXcgJiYKKyAgICAgbXYgZmlsZS5uZXcgZmlsZSAmJgorICAgICBHSVRfQVVUSE9SX05BTUU9IkIyIiBHSVRfQVVUSE9SX0VNQUlMPSJCMkB0ZXN0LmdpdCIgZ2l0IGNvbW1pdCAtYSAtbSAiQnJhbmNoMi0xIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1R3byBsaW5lcyBibGFtZWQgb24gQSwgb25lIG9uIEIsIG9uZSBvbiBCMicgXAorICAgICdjaGVja19jb3VudCBBIDIgQiAxIEIyIDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtZXJnZS1zZXR1cCBwYXJ0IDMnIFwKKyAgICAnZ2l0IHB1bGwgLiBicmFuY2gxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnVHdvIGxpbmVzIGJsYW1lZCBvbiBBLCBvbmUgb24gQiwgdHdvIG9uIEIxLCBvbmUgb24gQjInIFwKKyAgICAnY2hlY2tfY291bnQgQSAyIEIgMSBCMSAyIEIyIDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdBbm5vdGF0aW5nIGFuIG9sZCByZXZpc2lvbiB3b3JrcycgXAorICAgICdjaGVja19jb3VudCAtaCBtYXN0ZXIgQSAyIEIgMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0Fubm90YXRpbmcgYW4gb2xkIHJldmlzaW9uIHdvcmtzJyBcCisgICAgJ2NoZWNrX2NvdW50IC1oIG1hc3Rlcl4gQSAyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbWVyZ2Utc2V0dXAgcGFydCA0JyBcCisgICAgJ2VjaG8gImV2aWwgbWVyZ2UuIiA+PmZpbGUgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtLWFtZW5kJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnVHdvIGxpbmVzIGJsYW1lZCBvbiBBLCBvbmUgb24gQiwgdHdvIG9uIEIxLCBvbmUgb24gQjIsIG9uZSBvbiBBIFUgVGhvcicgXAorICAgICdjaGVja19jb3VudCBBIDIgQiAxIEIxIDIgQjIgMSAiQSBVIFRob3IiIDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhbiBpbmNvbXBsZXRlIGxpbmUgYWRkZWQnIFwKKyAgICAnZWNobyAiaW5jb21wbGV0ZSIgfCB0ciAtZCAiXFwwMTIiID4+ZmlsZSAmJgorICAgIEdJVF9BVVRIT1JfTkFNRT0iQyIgR0lUX0FVVEhPUl9FTUFJTD0iQ0B0ZXN0LmdpdCIgZ2l0IGNvbW1pdCAtYSAtbSAiSW5jb21wbGV0ZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdXaXRoIGluY29tcGxldGUgbGluZXMuJyBcCisgICAgJ2NoZWNrX2NvdW50IEEgMiBCIDEgQjEgMiBCMiAxICJBIFUgVGhvciIgMSBDIDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzb21lIGVkaXQnIFwKKyAgICAnbXYgZmlsZSBmaWxlLm9yaWcgJiYKKyAgICB7CisJY2F0IGZpbGUub3JpZyAmJgorCWVjaG8KKyAgICB9IHwgc2VkIC1lICJzL14zQS85OS8iIC1lICIvXjFBL2QiIC1lICIvXmluY29tcGxldGUvZCIgPiBmaWxlICYmCisgICAgZWNobyAiaW5jb21wbGV0ZSIgfCB0ciAtZCAiXFwwMTIiID4+ZmlsZSAmJgorICAgIEdJVF9BVVRIT1JfTkFNRT0iRCIgR0lUX0FVVEhPUl9FTUFJTD0iREB0ZXN0LmdpdCIgZ2l0IGNvbW1pdCAtYSAtbSAiZWRpdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzb21lIGVkaXQnIFwKKyAgICAnY2hlY2tfY291bnQgQSAxIEIgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxIEMgMSBEIDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhbiBvYmZ1c2NhdGVkIGVtYWlsIGFkZGVkJyBcCisgICAgJ2VjaG8gIk5vIHJvYm90cyBhbGxvd2VkIiA+IGZpbGUubmV3ICYmCisgICAgIGNhdCBmaWxlID4+IGZpbGUubmV3ICYmCisgICAgIG12IGZpbGUubmV3IGZpbGUgJiYKKyAgICAgR0lUX0FVVEhPUl9OQU1FPSJFIiBHSVRfQVVUSE9SX0VNQUlMPSJFIGF0IHRlc3QgZG90IGdpdCIgZ2l0IGNvbW1pdCAtYSAtbSAibm9yb2JvdHMiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnb2JmdXNjYXRlZCBlbWFpbCBwYXJzZWQnIFwKKyAgICAnY2hlY2tfY291bnQgQSAxIEIgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxIEMgMSBEIDEgRSAxJwpkaWZmIC0tZ2l0IGEvdC9kaWZmLWxpYi5zaCBiL3QvZGlmZi1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhMzVmYwotLS0gL2Rldi9udWxsCisrKyBiL3QvZGlmZi1saWIuc2gKQEAgLTAsMCArMSwzOSBAQAorOgorCitzYW5pdGl6ZV9kaWZmX3Jhdz0nL146L3MvICciJF94NDAiJyAnIiRfeDQwIicgXChbQS1aXVwpWzAtOV0qCS8gWCBYIFwxIwkvJworY29tcGFyZV9kaWZmX3JhdyAoKSB7CisgICAgIyBXaGVuIGhldXJpc3RpY3MgYXJlIGltcHJvdmVkLCB0aGUgc2NvcmUgbnVtYmVycyB3b3VsZCBjaGFuZ2UuCisgICAgIyBJZ25vcmUgdGhlbSB3aGlsZSBjb21wYXJpbmcuCisgICAgIyBBbHNvIHdlIGRvIG5vdCBjaGVjayBTSEExIGhhc2ggZ2VuZXJhdGlvbiBpbiB0aGlzIHRlc3QsIHdoaWNoCisgICAgIyBpcyBhIGpvYiBmb3IgdDAwMDAtYmFzaWMuc2gKKworICAgIHNlZCAtZSAiJHNhbml0aXplX2RpZmZfcmF3IiA8IiQxIiA+LnRtcC0xCisgICAgc2VkIC1lICIkc2FuaXRpemVfZGlmZl9yYXciIDwiJDIiID4udG1wLTIKKyAgICB0ZXN0X2NtcCAudG1wLTEgLnRtcC0yICYmIHJtIC1mIC50bXAtMSAudG1wLTIKK30KKworc2FuaXRpemVfZGlmZl9yYXdfej0nL146L3MvICciJF94NDAiJyAnIiRfeDQwIicgXChbQS1aXVwpWzAtOV0qJC8gWCBYIFwxIy8nCitjb21wYXJlX2RpZmZfcmF3X3ogKCkgeworICAgICMgV2hlbiBoZXVyaXN0aWNzIGFyZSBpbXByb3ZlZCwgdGhlIHNjb3JlIG51bWJlcnMgd291bGQgY2hhbmdlLgorICAgICMgSWdub3JlIHRoZW0gd2hpbGUgY29tcGFyaW5nLgorICAgICMgQWxzbyB3ZSBkbyBub3QgY2hlY2sgU0hBMSBoYXNoIGdlbmVyYXRpb24gaW4gdGhpcyB0ZXN0LCB3aGljaAorICAgICMgaXMgYSBqb2IgZm9yIHQwMDAwLWJhc2ljLnNoCisKKyAgICBwZXJsIC1wZSAneS9cMDAwL1wwMTIvJyA8IiQxIiB8IHNlZCAtZSAiJHNhbml0aXplX2RpZmZfcmF3X3oiID4udG1wLTEKKyAgICBwZXJsIC1wZSAneS9cMDAwL1wwMTIvJyA8IiQyIiB8IHNlZCAtZSAiJHNhbml0aXplX2RpZmZfcmF3X3oiID4udG1wLTIKKyAgICB0ZXN0X2NtcCAudG1wLTEgLnRtcC0yICYmIHJtIC1mIC50bXAtMSAudG1wLTIKK30KKworY29tcGFyZV9kaWZmX3BhdGNoICgpIHsKKyAgICAjIFdoZW4gaGV1cmlzdGljcyBhcmUgaW1wcm92ZWQsIHRoZSBzY29yZSBudW1iZXJzIHdvdWxkIGNoYW5nZS4KKyAgICAjIElnbm9yZSB0aGVtIHdoaWxlIGNvbXBhcmluZy4KKyAgICBzZWQgLWUgJworCS9eW2Rpc10qaW1pbGFyaXR5IGluZGV4IFswLTldKiUkL2QKKwkvXmluZGV4IFswLTlhLWZdKlwuXC5bMC05YS1mXS9kCisgICAgJyA8IiQxIiA+LnRtcC0xCisgICAgc2VkIC1lICcKKwkvXltkaXNdKmltaWxhcml0eSBpbmRleCBbMC05XSolJC9kCisJL15pbmRleCBbMC05YS1mXSpcLlwuWzAtOWEtZl0vZAorICAgICcgPCIkMiIgPi50bXAtMgorICAgIHRlc3RfY21wIC50bXAtMSAudG1wLTIgJiYgcm0gLWYgLnRtcC0xIC50bXAtMgorfQpkaWZmIC0tZ2l0IGEvdC9naXR3ZWItbGliLnNoIGIvdC9naXR3ZWItbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmRjNDYKLS0tIC9kZXYvbnVsbAorKysgYi90L2dpdHdlYi1saWIuc2gKQEAgLTAsMCArMSwxMTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSmFrdWIgTmFyZWJza2kKKyMKKworZ2l0d2ViX2luaXQgKCkgeworCXNhZmVfcHdkPSIkKHBlcmwgLU1QT1NJWD1nZXRjd2QgLWUgJ3ByaW50IHF1b3RlbWV0YShnZXRjd2QpJykiCisJY2F0ID5naXR3ZWJfY29uZmlnLnBlcmwgPDxFT0YKKyMhL3Vzci9iaW4vcGVybAorCisjIGdpdHdlYiBjb25maWd1cmF0aW9uIGZvciB0ZXN0cworCitvdXIgXCR2ZXJzaW9uID0gJ2N1cnJlbnQnOworb3VyIFwkR0lUID0gJ2dpdCc7CitvdXIgXCRwcm9qZWN0cm9vdCA9ICIkc2FmZV9wd2QiOworb3VyIFwkcHJvamVjdF9tYXhkZXB0aCA9IDg7CitvdXIgXCRob21lX2xpbmtfc3RyID0gJ3Byb2plY3RzJzsKK291ciBcJHNpdGVfbmFtZSA9ICdbbG9jYWxob3N0XSc7CitvdXIgXCRzaXRlX2h0bWxfaGVhZF9zdHJpbmcgPSAnJzsKK291ciBcJHNpdGVfaGVhZGVyID0gJyc7CitvdXIgXCRzaXRlX2Zvb3RlciA9ICcnOworb3VyIFwkaG9tZV90ZXh0ID0gJ2luZGV4dGV4dC5odG1sJzsKK291ciBAc3R5bGVzaGVldHMgPSAoJ2ZpbGU6Ly8vJEdJVF9CVUlMRF9ESVIvZ2l0d2ViL3N0YXRpYy9naXR3ZWIuY3NzJyk7CitvdXIgXCRsb2dvID0gJ2ZpbGU6Ly8vJEdJVF9CVUlMRF9ESVIvZ2l0d2ViL3N0YXRpYy9naXQtbG9nby5wbmcnOworb3VyIFwkZmF2aWNvbiA9ICdmaWxlOi8vLyRHSVRfQlVJTERfRElSL2dpdHdlYi9zdGF0aWMvZ2l0LWZhdmljb24ucG5nJzsKK291ciBcJHByb2plY3RzX2xpc3QgPSAnJzsKK291ciBcJGV4cG9ydF9vayA9ICcnOworb3VyIFwkc3RyaWN0X2V4cG9ydCA9ICcnOworb3VyIFwkbWF4bG9hZCA9IHVuZGVmOworCitFT0YKKworCWNhdCA+LmdpdC9kZXNjcmlwdGlvbiA8PEVPRgorJDAgdGVzdCByZXBvc2l0b3J5CitFT0YKKworCSMgWW91IGNhbiBzZXQgdGhlIEdJVFdFQl9URVNUX0lOU1RBTExFRCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0bworCSMgdGhlIGdpdHdlYmRpciAodGhlIGRpcmVjdG9yeSB3aGVyZSBnaXR3ZWIgaXMgaW5zdGFsbGVkIC8gZGVwbG95ZWQgdG8pCisJIyBvZiBhbiBleGlzdGluZyBnaXR3ZWIgaW5zdGFsYXRpb24gdG8gdGVzdCB0aGF0IGluc3RhbGxhdGlvbiwKKwkjIG9yIHNpbXBseSB0byBwYXRobmFtZSBvZiBpbnN0YWxsZWQgZ2l0d2ViIHNjcmlwdC4KKwlpZiB0ZXN0IC1uICIkR0lUV0VCX1RFU1RfSU5TVEFMTEVEIiA7IHRoZW4KKwkJaWYgdGVzdCAtZCAkR0lUV0VCX1RFU1RfSU5TVEFMTEVEOyB0aGVuCisJCQlTQ1JJUFRfTkFNRT0iJEdJVFdFQl9URVNUX0lOU1RBTExFRC9naXR3ZWIuY2dpIgorCQllbHNlCisJCQlTQ1JJUFRfTkFNRT0iJEdJVFdFQl9URVNUX0lOU1RBTExFRCIKKwkJZmkKKwkJdGVzdCAtZiAiJFNDUklQVF9OQU1FIiB8fAorCQllcnJvciAiQ2Fubm90IGZpbmQgZ2l0d2ViIGF0ICRHSVRXRUJfVEVTVF9JTlNUQUxMRUQuIgorCQlzYXkgIiMgVGVzdGluZyAkU0NSSVBUX05BTUUiCisJZWxzZSAjIG5vcm1hbCBjYXNlLCB1c2Ugc291cmNlIHZlcnNpb24gb2YgZ2l0d2ViCisJCVNDUklQVF9OQU1FPSIkR0lUX0JVSUxEX0RJUi9naXR3ZWIvZ2l0d2ViLnBlcmwiCisJZmkKKwlleHBvcnQgU0NSSVBUX05BTUUKK30KKworZ2l0d2ViX3J1biAoKSB7CisJR0FURVdBWV9JTlRFUkZBQ0U9J0NHSS8xLjEnCisJSFRUUF9BQ0NFUFQ9JyovKicKKwlSRVFVRVNUX01FVEhPRD0nR0VUJworCVFVRVJZX1NUUklORz0iIiQxIiIKKwlQQVRIX0lORk89IiIkMiIiCisJZXhwb3J0IEdBVEVXQVlfSU5URVJGQUNFIEhUVFBfQUNDRVBUIFJFUVVFU1RfTUVUSE9EIFwKKwkJUVVFUllfU1RSSU5HIFBBVEhfSU5GTworCisJR0lUV0VCX0NPTkZJRz0kKHB3ZCkvZ2l0d2ViX2NvbmZpZy5wZXJsCisJZXhwb3J0IEdJVFdFQl9DT05GSUcKKworCSMgc29tZSBvZiBnaXQgY29tbWFuZHMgd3JpdGUgdG8gU1RERVJSIG9uIGVycm9yLCBidXQgdGhpcyBpcyBub3QKKwkjIHdyaXR0ZW4gdG8gd2ViIHNlcnZlciBsb2dzLCBzbyB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhhdDoKKwkjIHdlIGFyZSBpbnRlcmVzdGVkIG9ubHkgaW4gcHJvcGVybHkgZm9ybWF0dGVkIGVycm9ycy93YXJuaW5ncworCXJtIC1mIGdpdHdlYi5sb2cgJiYKKwkiJFBFUkxfUEFUSCIgLS0gIiRTQ1JJUFRfTkFNRSIgXAorCQk+Z2l0d2ViLm91dHB1dCAyPmdpdHdlYi5sb2cgJiYKKwlwZXJsIC13IC1lICcKKwkJb3BlbiBPLCAiPmdpdHdlYi5oZWFkZXJzIjsKKwkJd2hpbGUgKDw+KSB7CisJCQlwcmludCBPOworCQkJbGFzdCBpZiAoL15cciQvIHx8IC9eJC8pOworCQl9CisJCW9wZW4gTywgIj5naXR3ZWIuYm9keSI7CisJCXdoaWxlICg8PikgeworCQkJcHJpbnQgTzsKKwkJfQorCQljbG9zZSBPOworCScgZ2l0d2ViLm91dHB1dCAmJgorCWlmIGdyZXAgJ15bW10nIGdpdHdlYi5sb2cgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCXRlc3RfZGVidWcgJ2NhdCBnaXR3ZWIubG9nID4mMicgJiYKKwkJZmFsc2UKKwllbHNlCisJCXRydWUKKwlmaQorCisJIyBnaXR3ZWIubG9nIGlzIGxlZnQgZm9yIGRlYnVnZ2luZworCSMgZ2l0d2ViLm91dHB1dCBpcyB1c2VkIHRvIHBhcnNlIEhUVFAgb3V0cHV0CisJIyBnaXR3ZWIuaGVhZGVycyBjb250YWlucyBvbmx5IEhUVFAgaGVhZGVycworCSMgZ2l0d2ViLmJvZHkgY29udGFpbnMgYm9keSBvZiBtZXNzYWdlLCB3aXRob3V0IGhlYWRlcnMKK30KKworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdHdlYiB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworcGVybCAtTUVuY29kZSAtZSAnJGU9IiI7ZGVjb2RlX3V0ZjgoJGUsIEVuY29kZTo6RkJfQ1JPQUspJyA+L2Rldi9udWxsIDI+JjEgfHwgeworCXNraXBfYWxsPSdza2lwcGluZyBnaXR3ZWIgdGVzdHMsIHBlcmwgdmVyc2lvbiBpcyB0b28gb2xkJworCXRlc3RfZG9uZQorfQorCitwZXJsIC1NQ0dJIC1NQ0dJOjpVdGlsIC1NQ0dJOjpDYXJwIC1lIDAgPi9kZXYvbnVsbCAyPiYxIHx8IHsKKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0d2ViIHRlc3RzLCBDR0kgbW9kdWxlIHVudXNhYmxlJworCXRlc3RfZG9uZQorfQorCitnaXR3ZWJfaW5pdApkaWZmIC0tZ2l0IGEvdC9saWItYmFzaC5zaCBiL3QvbGliLWJhc2guc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzOTdmNwotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWJhc2guc2gKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisjCisjIEVuc3VyZXMgdGhhdCB0ZXN0cyBhcmUgcnVuIHVuZGVyIEJhc2g7IHByaW1hcmlseSBpbnRlbmRlZCBmb3IgcnVubmluZyB0ZXN0cworIyBvZiB0aGUgY29tcGxldGlvbiBzY3JpcHQuCisKK2lmIHRlc3QgLW4gIiRCQVNIIiAmJiB0ZXN0IC16ICIkUE9TSVhMWV9DT1JSRUNUIjsgdGhlbgorCSMgd2UgYXJlIGluIGZ1bGwtb24gYmFzaCBtb2RlCisJdHJ1ZQorZWxpZiB0eXBlIGJhc2ggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJIyBleGVjdXRlIGluIGZ1bGwtb24gYmFzaCBtb2RlCisJdW5zZXQgUE9TSVhMWV9DT1JSRUNUCisJZXhlYyBiYXNoICIkMCIgIiRAIgorZWxzZQorCWVjaG8gJzEuLjAgI1NLSVAgc2tpcHBpbmcgYmFzaCBjb21wbGV0aW9uIHRlc3RzOyBiYXNoIG5vdCBhdmFpbGFibGUnCisJZXhpdCAwCitmaQorCisuIC4vdGVzdC1saWIuc2gKZGlmZiAtLWdpdCBhL3QvbGliLWNyZWRlbnRpYWwuc2ggYi90L2xpYi1jcmVkZW50aWFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjNDNmZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1jcmVkZW50aWFsLnNoCkBAIC0wLDAgKzEsMjkzIEBACisjIS9iaW4vc2gKKworIyBUcnkgYSBzZXQgb2YgY3JlZGVudGlhbCBoZWxwZXJzOyB0aGUgZXhwZWN0ZWQgc3RkaW4sCisjIHN0ZG91dCBhbmQgc3RkZXJyIHNob3VsZCBiZSBwcm92aWRlZCBvbiBzdGRpbiwKKyMgc2VwYXJhdGVkIGJ5ICItLSIuCitjaGVjaygpIHsKKwljcmVkZW50aWFsX29wdHM9CisJY3JlZGVudGlhbF9jbWQ9JDEKKwlzaGlmdAorCWZvciBhcmcgaW4gIiRAIjsgZG8KKwkJY3JlZGVudGlhbF9vcHRzPSIkY3JlZGVudGlhbF9vcHRzIC1jIGNyZWRlbnRpYWwuaGVscGVyPSckYXJnJyIKKwlkb25lCisJcmVhZF9jaHVuayA+c3RkaW4gJiYKKwlyZWFkX2NodW5rID5leHBlY3Qtc3Rkb3V0ICYmCisJcmVhZF9jaHVuayA+ZXhwZWN0LXN0ZGVyciAmJgorCWlmICEgZXZhbCAiZ2l0ICRjcmVkZW50aWFsX29wdHMgY3JlZGVudGlhbCAkY3JlZGVudGlhbF9jbWQgPHN0ZGluID5zdGRvdXQgMj5zdGRlcnIiOyB0aGVuCisJCWVjaG8gImdpdCBjcmVkZW50aWFsIGZhaWxlZCB3aXRoIGNvZGUgJD8iICYmCisJCWNhdCBzdGRlcnIgJiYKKwkJZmFsc2UKKwlmaSAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgTUlOR1cKKwl0aGVuCisJCWRvczJ1bml4IC1xIHN0ZGVycgorCWZpICYmCisJdGVzdF9jbXAgZXhwZWN0LXN0ZG91dCBzdGRvdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtc3RkZXJyIHN0ZGVycgorfQorCityZWFkX2NodW5rKCkgeworCXdoaWxlIHJlYWQgbGluZTsgZG8KKwkJY2FzZSAiJGxpbmUiIGluCisJCS0tKSBicmVhayA7OworCQkqKSBlY2hvICIkbGluZSIgOzsKKwkJZXNhYworCWRvbmUKK30KKworIyBDbGVhciBhbnkgcmVzaWR1YWwgZGF0YSBmcm9tIHByZXZpb3VzIHRlc3RzLiBXZSBvbmx5CisjIG5lZWQgdGhpcyB3aGVuIHRlc3RpbmcgdGhpcmQtcGFydHkgaGVscGVycyB3aGljaCByZWFkIGFuZAorIyB3cml0ZSBvdXRzaWRlIG9mIG91ciB0cmFzaC1kaXJlY3Rvcnkgc2FuZGJveC4KKyMKKyMgRG9uJ3QgYm90aGVyIGNoZWNraW5nIGZvciBzdWNjZXNzIGhlcmUsIGFzIGl0IGlzCisjIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRlc3RzIGFuZCByZXByZXNlbnRzIGEgYmVzdCBlZmZvcnQgdG8KKyMgY2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzLgoraGVscGVyX3Rlc3RfY2xlYW4oKSB7CisJcmVqZWN0ICQxIGh0dHBzIGV4YW1wbGUuY29tIHN0b3JlLXVzZXIKKwlyZWplY3QgJDEgaHR0cHMgZXhhbXBsZS5jb20gdXNlcjEKKwlyZWplY3QgJDEgaHR0cHMgZXhhbXBsZS5jb20gdXNlcjIKKwlyZWplY3QgJDEgaHR0cCBwYXRoLnRsZCB1c2VyCisJcmVqZWN0ICQxIGh0dHBzIHRpbWVvdXQudGxkIHVzZXIKK30KKworcmVqZWN0KCkgeworCSgKKwkJZWNobyBwcm90b2NvbD0kMgorCQllY2hvIGhvc3Q9JDMKKwkJZWNobyB1c2VybmFtZT0kNAorCSkgfCBnaXQgLWMgY3JlZGVudGlhbC5oZWxwZXI9JDEgY3JlZGVudGlhbCByZWplY3QKK30KKworaGVscGVyX3Rlc3QoKSB7CisJSEVMUEVSPSQxCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIGhhcyBubyBleGlzdGluZyBkYXRhIiAnCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwczovL2V4YW1wbGUuY29tJ1wnJzoKKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL2Fza3Bhc3MtdXNlcm5hbWVAZXhhbXBsZS5jb20nXCcnOgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIHN0b3JlcyBwYXNzd29yZCIgJworCQljaGVjayBhcHByb3ZlICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXN0b3JlLXVzZXIKKwkJcGFzc3dvcmQ9c3RvcmUtcGFzcworCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIGNhbiByZXRyaWV2ZSBwYXNzd29yZCIgJworCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9c3RvcmUtdXNlcgorCQlwYXNzd29yZD1zdG9yZS1wYXNzCisJCS0tCisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgcmVxdWlyZXMgbWF0Y2hpbmcgcHJvdG9jb2wiICcKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cAorCQlob3N0PWV4YW1wbGUuY29tCisJCS0tCisJCXByb3RvY29sPWh0dHAKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwOi8vZXhhbXBsZS5jb20nXCcnOgorCQlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHA6Ly9hc2twYXNzLXVzZXJuYW1lQGV4YW1wbGUuY29tJ1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSByZXF1aXJlcyBtYXRjaGluZyBob3N0IiAnCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9b3RoZXIudGxkCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9b3RoZXIudGxkCisJCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHBzOi8vb3RoZXIudGxkJ1wnJzoKKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL2Fza3Bhc3MtdXNlcm5hbWVAb3RoZXIudGxkJ1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSByZXF1aXJlcyBtYXRjaGluZyB1c2VybmFtZSIgJworCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPW90aGVyCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9b3RoZXIKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vb3RoZXJAZXhhbXBsZS5jb20nXCcnOgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIHJlcXVpcmVzIG1hdGNoaW5nIHBhdGgiICcKKwkJdGVzdF9jb25maWcgY3JlZGVudGlhbC51c2VodHRwcGF0aCB0cnVlICYmCisJCWNoZWNrIGFwcHJvdmUgJEhFTFBFUiA8PC1cRU9GICYmCisJCXByb3RvY29sPWh0dHAKKwkJaG9zdD1wYXRoLnRsZAorCQlwYXRoPWZvby5naXQKKwkJdXNlcm5hbWU9dXNlcgorCQlwYXNzd29yZD1wYXNzCisJCUVPRgorCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwCisJCWhvc3Q9cGF0aC50bGQKKwkJcGF0aD1iYXIuZ2l0CisJCS0tCisJCXByb3RvY29sPWh0dHAKKwkJaG9zdD1wYXRoLnRsZAorCQlwYXRoPWJhci5naXQKKwkJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCQlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJCS0tCisJCWFza3Bhc3M6IFVzZXJuYW1lIGZvciAnXCcnaHR0cDovL3BhdGgudGxkL2Jhci5naXQnXCcnOgorCQlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHA6Ly9hc2twYXNzLXVzZXJuYW1lQHBhdGgudGxkL2Jhci5naXQnXCcnOgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIGNhbiBmb3JnZXQgaG9zdCIgJworCQljaGVjayByZWplY3QgJEhFTFBFUiA8PC1cRU9GICYmCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJRU9GCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwczovL2V4YW1wbGUuY29tJ1wnJzoKKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL2Fza3Bhc3MtdXNlcm5hbWVAZXhhbXBsZS5jb20nXCcnOgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIGNhbiBzdG9yZSBtdWx0aXBsZSB1c2VycyIgJworCQljaGVjayBhcHByb3ZlICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIxCisJCXBhc3N3b3JkPXBhc3MxCisJCUVPRgorCQljaGVjayBhcHByb3ZlICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIyCisJCXBhc3N3b3JkPXBhc3MyCisJCUVPRgorCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIxCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjEKKwkJcGFzc3dvcmQ9cGFzczEKKwkJRU9GCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjIKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMgorCQlwYXNzd29yZD1wYXNzMgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIGNhbiBmb3JnZXQgdXNlciIgJworCQljaGVjayByZWplY3QgJEhFTFBFUiA8PC1cRU9GICYmCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjEKKwkJRU9GCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjEKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMQorCQlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJCS0tCisJCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly91c2VyMUBleGFtcGxlLmNvbSdcJyc6CisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgcmVtZW1iZXJzIG90aGVyIHVzZXIiICcKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMgorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIyCisJCXBhc3N3b3JkPXBhc3MyCisJCUVPRgorCScKK30KKworaGVscGVyX3Rlc3RfdGltZW91dCgpIHsKKwlIRUxQRVI9IiQqIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSB0aW1lcyBvdXQiICcKKwkJY2hlY2sgYXBwcm92ZSAiJEhFTFBFUiIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PXRpbWVvdXQudGxkCisJCXVzZXJuYW1lPXVzZXIKKwkJcGFzc3dvcmQ9cGFzcworCQlFT0YKKwkJc2xlZXAgMiAmJgorCQljaGVjayBmaWxsICIkSEVMUEVSIiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9dGltZW91dC50bGQKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD10aW1lb3V0LnRsZAorCQl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwczovL3RpbWVvdXQudGxkJ1wnJzoKKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL2Fza3Bhc3MtdXNlcm5hbWVAdGltZW91dC50bGQnXCcnOgorCQlFT0YKKwknCit9CisKK2NhdCA+YXNrcGFzcyA8PFxFT0YKKyMhL2Jpbi9zaAorZWNobyA+JjIgYXNrcGFzczogJCoKK3doYXQ9YGVjaG8gJDEgfCBjdXQgLWQiICIgLWYxIHwgdHIgQS1aIGEteiB8IHRyIC1jZCBhLXpgCitlY2hvICJhc2twYXNzLSR3aGF0IgorRU9GCitjaG1vZCAreCBhc2twYXNzCitHSVRfQVNLUEFTUz0iJFBXRC9hc2twYXNzIgorZXhwb3J0IEdJVF9BU0tQQVNTCmRpZmYgLS1naXQgYS90L2xpYi1jdnMuc2ggYi90L2xpYi1jdnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyNjNhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWN2cy5zaApAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKworLiAuL3Rlc3QtbGliLnNoCisKK3Vuc2V0IENWU19TRVJWRVIKKworaWYgISB0eXBlIGN2cyA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgY3ZzaW1wb3J0IHRlc3RzLCBjdnMgbm90IGZvdW5kJworCXRlc3RfZG9uZQorZmkKKworQ1ZTPSJjdnMgLWYiCitleHBvcnQgQ1ZTCisKK2N2c3BzX3ZlcnNpb249YGN2c3BzIC1oIDI+JjEgfCBzZWQgLW5lICdzL2N2c3BzIHZlcnNpb24gLy9wJ2AKK2Nhc2UgIiRjdnNwc192ZXJzaW9uIiBpbgorMi4xIHwgMi4yKikKKwk7OworJycpCisJc2tpcF9hbGw9J3NraXBwaW5nIGN2c2ltcG9ydCB0ZXN0cywgY3ZzcHMgbm90IGZvdW5kJworCXRlc3RfZG9uZQorCTs7CisqKQorCXNraXBfYWxsPSdza2lwcGluZyBjdnNpbXBvcnQgdGVzdHMsIHVuc3VwcG9ydGVkIGN2c3BzIHZlcnNpb24nCisJdGVzdF9kb25lCisJOzsKK2VzYWMKKworc2V0dXBfY3ZzX3Rlc3RfcmVwb3NpdG9yeSAoKSB7CisJQ1ZTUk9PVD0iJChwd2QpLy5jdnNyb290IiAmJgorCWNwIC1yICIkVEVTVF9ESVJFQ1RPUlkvJDEvY3Zzcm9vdCIgIiRDVlNST09UIiAmJgorCWV4cG9ydCBDVlNST09UCit9CisKK3Rlc3RfY3ZzX2NvICgpIHsKKwkjIFVzYWdlOiB0ZXN0X2N2c19jbyBCUkFOQ0hfTkFNRQorCXJtIC1yZiBtb2R1bGUtY3ZzLSIkMSIKKwlpZiBbICIkMSIgPSAibWFzdGVyIiBdCisJdGhlbgorCQkkQ1ZTIGNvIC1QIC1kIG1vZHVsZS1jdnMtIiQxIiAtQSBtb2R1bGUKKwllbHNlCisJCSRDVlMgY28gLVAgLWQgbW9kdWxlLWN2cy0iJDEiIC1yICIkMSIgbW9kdWxlCisJZmkKK30KKwordGVzdF9naXRfY28gKCkgeworCSMgVXNhZ2U6IHRlc3RfZ2l0X2NvIEJSQU5DSF9OQU1FCisJKGNkIG1vZHVsZS1naXQgJiYgZ2l0IGNoZWNrb3V0ICIkMSIpCit9CisKK3Rlc3RfY21wX2JyYW5jaF9maWxlICgpIHsKKwkjIFVzYWdlOiB0ZXN0X2NtcF9icmFuY2hfZmlsZSBCUkFOQ0hfTkFNRSBQQVRICisJIyBUaGUgYnJhbmNoIG11c3QgYWxyZWFkeSBiZSBjaGVja2VkIG91dCBvZiBDVlMgYW5kIGdpdC4KKwl0ZXN0X2NtcCBtb2R1bGUtY3ZzLSIkMSIvIiQyIiBtb2R1bGUtZ2l0LyIkMiIKK30KKwordGVzdF9jbXBfYnJhbmNoX3RyZWUgKCkgeworCSMgVXNhZ2U6IHRlc3RfY21wX2JyYW5jaF90cmVlIEJSQU5DSF9OQU1FCisJIyBDaGVjayBCUkFOQ0hfTkFNRSBvdXQgb2YgQ1ZTIGFuZCBnaXQgYW5kIG1ha2Ugc3VyZSB0aGF0IGFsbAorCSMgb2YgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBhcmUgaWRlbnRpY2FsLgorCisJdGVzdF9jdnNfY28gIiQxIiAmJgorCXRlc3RfZ2l0X2NvICIkMSIgJiYKKwkoCisJCWNkIG1vZHVsZS1jdnMtIiQxIgorCQlmaW5kIC4gLXR5cGUgZCAtbmFtZSBDVlMgLXBydW5lIC1vIC10eXBlIGYgLXByaW50CisJKSB8IHNvcnQgPm1vZHVsZS1jdnMtIiQxIi5saXN0ICYmCisJKAorCQljZCBtb2R1bGUtZ2l0CisJCWZpbmQgLiAtdHlwZSBkIC1uYW1lIC5naXQgLXBydW5lIC1vIC10eXBlIGYgLXByaW50CisJKSB8IHNvcnQgPm1vZHVsZS1naXQtIiQxIi5saXN0ICYmCisJdGVzdF9jbXAgbW9kdWxlLWN2cy0iJDEiLmxpc3QgbW9kdWxlLWdpdC0iJDEiLmxpc3QgJiYKKwljYXQgbW9kdWxlLWN2cy0iJDEiLmxpc3QgfCB3aGlsZSByZWFkIGYKKwlkbworCQl0ZXN0X2NtcF9icmFuY2hfZmlsZSAiJDEiICIkZiIgfHwgcmV0dXJuIDEKKwlkb25lCit9CmRpZmYgLS1naXQgYS90L2xpYi1kaWZmLWFsdGVybmF0aXZlLnNoIGIvdC9saWItZGlmZi1hbHRlcm5hdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWZmZDkxCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZGlmZi1hbHRlcm5hdGl2ZS5zaApAQCAtMCwwICsxLDE2NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGlmZl9mcm9ibml0eigpIHsKKwljYXQgPmZpbGUxIDw8XEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8vIEZyb2JzIGZvbyBoZWFydGlseQoraW50IGZyb2JuaXR6KGludCBmb28pCit7CisgICAgaW50IGk7CisgICAgZm9yKGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50ZigiWW91ciBhbnN3ZXIgaXM6ICIpOworICAgICAgICBwcmludGYoIiVkXG4iLCBmb28pOworICAgIH0KK30KKworaW50IGZhY3QoaW50IG4pCit7CisgICAgaWYobiA+IDEpCisgICAgeworICAgICAgICByZXR1cm4gZmFjdChuLTEpICogbjsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBmcm9ibml0eihmYWN0KDEwKSk7Cit9CitFT0YKKworCWNhdCA+ZmlsZTIgPDxcRU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGZpYihpbnQgbikKK3sKKyAgICBpZihuID4gMikKKyAgICB7CisgICAgICAgIHJldHVybiBmaWIobi0xKSArIGZpYihuLTIpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworLy8gRnJvYnMgZm9vIGhlYXJ0aWx5CitpbnQgZnJvYm5pdHooaW50IGZvbykKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IoaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlZFxuIiwgZm9vKTsKKyAgICB9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBmcm9ibml0eihmaWIoMTApKTsKK30KK0VPRgorCisJY2F0ID5leHBlY3QgPDxcRU9GCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMgoraW5kZXggNmZhYTVhMy4uZTNhZjMyOSAxMDA2NDQKKy0tLSBhL2ZpbGUxCisrKysgYi9maWxlMgorQEAgLTEsMjYgKzEsMjUgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKytpbnQgZmliKGludCBuKQorK3sKKysgICAgaWYobiA+IDIpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmaWIobi0xKSArIGZpYihuLTIpOworKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysKKyAvLyBGcm9icyBmb28gaGVhcnRpbHkKKyBpbnQgZnJvYm5pdHooaW50IGZvbykKKyB7CisgICAgIGludCBpOworICAgICBmb3IoaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgICB7CistICAgICAgICBwcmludGYoIllvdXIgYW5zd2VyIGlzOiAiKTsKKyAgICAgICAgIHByaW50ZigiJWRcbiIsIGZvbyk7CisgICAgIH0KKyB9CisgCistaW50IGZhY3QoaW50IG4pCisteworLSAgICBpZihuID4gMSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGZhY3Qobi0xKSAqIG47CistICAgIH0KKy0gICAgcmV0dXJuIDE7CistfQorLQorIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CistICAgIGZyb2JuaXR6KGZhY3QoMTApKTsKKysgICAgZnJvYm5pdHooZmliKDEwKSk7CisgfQorRU9GCisKKwlTVFJBVEVHWT0kMQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJFNUUkFURUdZIGRpZmYiICcKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAiLS0kU1RSQVRFR1kiIGZpbGUxIGZpbGUyID4gb3V0cHV0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkU1RSQVRFR1kgZGlmZiBvdXRwdXQgaXMgdmFsaWQiICcKKwkJbXYgZmlsZTIgZXhwZWN0ICYmCisJCWdpdCBhcHBseSA8IG91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZTIKKwknCit9CisKK3Rlc3RfZGlmZl91bmlxdWUoKSB7CisJY2F0ID51bmlxMSA8PFxFT0YKKzEKKzIKKzMKKzQKKzUKKzYKK0VPRgorCisJY2F0ID51bmlxMiA8PFxFT0YKK2EKK2IKK2MKK2QKK2UKK2YKK0VPRgorCisJY2F0ID5leHBlY3QgPDxcRU9GCitkaWZmIC0tZ2l0IGEvdW5pcTEgYi91bmlxMgoraW5kZXggYjQxNDEwOC4uMGZkZjM5NyAxMDA2NDQKKy0tLSBhL3VuaXExCisrKysgYi91bmlxMgorQEAgLTEsNiArMSw2IEBACistMQorLTIKKy0zCistNAorLTUKKy02CisrYQorK2IKKytjCisrZAorK2UKKytmCitFT0YKKworCVNUUkFURUdZPSQxCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGV0ZWx5IGRpZmZlcmVudCBmaWxlcycgJworCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4ICItLSRTVFJBVEVHWSIgdW5pcTEgdW5pcTIgPiBvdXRwdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCScKK30KKwpkaWZmIC0tZ2l0IGEvdC9saWItZ2V0dGV4dC5zaCBiL3QvbGliLWdldHRleHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY3NmY2YwotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWdldHRleHQuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCisuIC4vdGVzdC1saWIuc2gKKworR0lUX1RFWFRET01BSU5ESVI9IiRHSVRfQlVJTERfRElSL3BvL2J1aWxkL2xvY2FsZSIKK0dJVF9QT19QQVRIPSIkR0lUX0JVSUxEX0RJUi9wbyIKK2V4cG9ydCBHSVRfVEVYVERPTUFJTkRJUiBHSVRfUE9fUEFUSAorCisuICIkR0lUX0JVSUxEX0RJUiIvZ2l0LXNoLWkxOG4KKworaWYgdGVzdF9oYXZlX3ByZXJlcSBHRVRURVhUICYmICEgdGVzdF9oYXZlX3ByZXJlcSBHRVRURVhUX1BPSVNPTgordGhlbgorCSMgaXNfSVMuVVRGLTggb24gU29sYXJpcyBhbmQgRnJlZUJTRCwgaXNfSVMudXRmOCBvbiBEZWJpYW4KKwlpc19JU19sb2NhbGU9JChsb2NhbGUgLWEgfCBzZWQgLW4gJy9eaXNfSVNcLlt1VV1bdFRdW2ZGXS0qOCQveworCQlwCisJCXEKKwl9JykKKwkjIGlzX0lTLklTTzg4NTktMSBvbiBTb2xhcmlzIGFuZCBGcmVlQlNELCBpc19JUy5pc284ODU5MSBvbiBEZWJpYW4KKwlpc19JU19pc29fbG9jYWxlPSQobG9jYWxlIC1hIHwgc2VkIC1uICcvXmlzX0lTXC5baUldW3NTXVtvT104ODU5LSoxJC97CisJCXAKKwkJcQorCX0nKQorCisJIyBFeHBvcnQgdGhlbSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyB0aGUgdDAyMDIvdGVzdC5wbCBQZXJsCisJIyB0ZXN0IGNhbiB1c2UgaXQgdG9vCisJZXhwb3J0IGlzX0lTX2xvY2FsZSBpc19JU19pc29fbG9jYWxlCisKKwlpZiB0ZXN0IC1uICIkaXNfSVNfbG9jYWxlIiAmJgorCQl0ZXN0ICRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgIT0gImZhbGx0aHJvdWdoIgorCXRoZW4KKwkJIyBTb21lIG9mIHRoZSB0ZXN0cyBuZWVkIHRoZSByZWZlcmVuY2UgSWNlbGFuZGljIGxvY2FsZQorCQl0ZXN0X3NldF9wcmVyZXEgR0VUVEVYVF9MT0NBTEUKKworCQkjIEV4cG9ydGluZyBmb3IgdDAyMDIvdGVzdC5wbAorCQlHRVRURVhUX0xPQ0FMRT0xCisJCWV4cG9ydCBHRVRURVhUX0xPQ0FMRQorCQlzYXkgIiMgbGliLWdldHRleHQ6IEZvdW5kICckaXNfSVNfbG9jYWxlJyBhcyBhbiBpc19JUyBVVEYtOCBsb2NhbGUiCisJZWxzZQorCQlzYXkgIiMgbGliLWdldHRleHQ6IE5vIGlzX0lTIFVURi04IGxvY2FsZSBhdmFpbGFibGUiCisJZmkKKworCWlmIHRlc3QgLW4gIiRpc19JU19pc29fbG9jYWxlIiAmJgorCQl0ZXN0ICRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgIT0gImZhbGx0aHJvdWdoIgorCXRoZW4KKwkJIyBTb21lIG9mIHRoZSB0ZXN0cyBuZWVkIHRoZSByZWZlcmVuY2UgSWNlbGFuZGljIGxvY2FsZQorCQl0ZXN0X3NldF9wcmVyZXEgR0VUVEVYVF9JU09fTE9DQUxFCisKKwkJc2F5ICIjIGxpYi1nZXR0ZXh0OiBGb3VuZCAnJGlzX0lTX2lzb19sb2NhbGUnIGFzIGFuIGlzX0lTIElTTy04ODU5LTEgbG9jYWxlIgorCWVsc2UKKwkJc2F5ICIjIGxpYi1nZXR0ZXh0OiBObyBpc19JUyBJU08tODg1OS0xIGxvY2FsZSBhdmFpbGFibGUiCisJZmkKK2ZpCmRpZmYgLS1naXQgYS90L2xpYi1naXQtZGFlbW9uLnNoIGIvdC9saWItZ2l0LWRhZW1vbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2YwYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ2l0LWRhZW1vbi5zaApAQCAtMCwwICsxLDY5IEBACisjIS9iaW4vc2gKKworaWYgdGVzdCAteiAiJEdJVF9URVNUX0dJVF9EQUVNT04iCit0aGVuCisJc2tpcF9hbGw9ImdpdC1kYWVtb24gdGVzdGluZyBkaXNhYmxlZCAoZGVmaW5lIEdJVF9URVNUX0dJVF9EQUVNT04gdG8gZW5hYmxlKSIKKwl0ZXN0X2RvbmUKK2ZpCisKK0xJQl9HSVRfREFFTU9OX1BPUlQ9JHtMSUJfR0lUX0RBRU1PTl9QT1JULSc4MTIxJ30KKworR0lUX0RBRU1PTl9QSUQ9CitHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSD0iJFBXRCIvcmVwbworR0lUX0RBRU1PTl9VUkw9Z2l0Oi8vMTI3LjAuMC4xOiRMSUJfR0lUX0RBRU1PTl9QT1JUCisKK3N0YXJ0X2dpdF9kYWVtb24oKSB7CisJaWYgdGVzdCAtbiAiJEdJVF9EQUVNT05fUElEIgorCXRoZW4KKwkJZXJyb3IgInN0YXJ0X2dpdF9kYWVtb24gYWxyZWFkeSBjYWxsZWQiCisJZmkKKworCW1rZGlyIC1wICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiCisKKwl0cmFwICdjb2RlPSQ/OyBzdG9wX2dpdF9kYWVtb247IChleGl0ICRjb2RlKTsgZGllJyBFWElUCisKKwlzYXkgPiYzICJTdGFydGluZyBnaXQgZGFlbW9uIC4uLiIKKwlta2ZpZm8gZ2l0X2RhZW1vbl9vdXRwdXQKKwlnaXQgZGFlbW9uIC0tbGlzdGVuPTEyNy4wLjAuMSAtLXBvcnQ9IiRMSUJfR0lUX0RBRU1PTl9QT1JUIiBcCisJCS0tcmV1c2VhZGRyIC0tdmVyYm9zZSBcCisJCS0tYmFzZS1wYXRoPSIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiIFwKKwkJIiRAIiAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIiBcCisJCT4mMyAyPmdpdF9kYWVtb25fb3V0cHV0ICYKKwlHSVRfREFFTU9OX1BJRD0kIQorCXsKKwkJcmVhZCBsaW5lIDwmNworCQllY2hvID4mNCAiJGxpbmUiCisJCWNhdCA8JjcgPiY0ICYKKwl9IDc8Z2l0X2RhZW1vbl9vdXRwdXQgJiYKKworCSMgQ2hlY2sgZXhwZWN0ZWQgb3V0cHV0CisJaWYgdGVzdCB4IiQoZXhwciAiJGxpbmUiIDogIlxbWzAtOV0qXF0gXCguKlwpIikiICE9IHgiUmVhZHkgdG8gcnVtYmxlIgorCXRoZW4KKwkJa2lsbCAiJEdJVF9EQUVNT05fUElEIgorCQl3YWl0ICIkR0lUX0RBRU1PTl9QSUQiCisJCXRyYXAgJ2RpZScgRVhJVAorCQllcnJvciAiZ2l0IGRhZW1vbiBmYWlsZWQgdG8gc3RhcnQiCisJZmkKK30KKworc3RvcF9naXRfZGFlbW9uKCkgeworCWlmIHRlc3QgLXogIiRHSVRfREFFTU9OX1BJRCIKKwl0aGVuCisJCXJldHVybgorCWZpCisKKwl0cmFwICdkaWUnIEVYSVQKKworCSMga2lsbCBnaXQtZGFlbW9uIGNoaWxkIG9mIGdpdAorCXNheSA+JjMgIlN0b3BwaW5nIGdpdCBkYWVtb24gLi4uIgorCWtpbGwgIiRHSVRfREFFTU9OX1BJRCIKKwl3YWl0ICIkR0lUX0RBRU1PTl9QSUQiID4mMyAyPiY0CisJcmV0PSQ/CisJIyBleHBlY3QgZXhpdCB3aXRoIHN0YXR1cyAxNDMgPSAxMjgrMTUgZm9yIHNpZ25hbCBURVJNPTE1CisJaWYgdGVzdCAkcmV0IC1uZSAxNDMKKwl0aGVuCisJCWVycm9yICJnaXQgZGFlbW9uIGV4aXRlZCB3aXRoIHN0YXR1czogJHJldCIKKwlmaQorCUdJVF9EQUVNT05fUElEPQorCXJtIC1mIGdpdF9kYWVtb25fb3V0cHV0Cit9CmRpZmYgLS1naXQgYS90L2xpYi1naXQtcDQuc2ggYi90L2xpYi1naXQtcDQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MWRjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWdpdC1wNC5zaApAQCAtMCwwICsxLDEzNSBAQAorIworIyBMaWJyYXJ5IGNvZGUgZm9yIGdpdCBwNCB0ZXN0cworIworCisjIHA0IHRlc3RzIG5ldmVyIHVzZSB0aGUgdG9wLWxldmVsIHJlcG87IGFsd2F5cyBidWlsZC9jbG9uZSBpbnRvCisjIGEgc3ViZGlyZWN0b3J5IGNhbGxlZCAiJGdpdCIKK1RFU1RfTk9fQ1JFQVRFX1JFUE89Tm9UaGFua3MKKworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQWVRIT047IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IHA0IHRlc3RzOyBweXRob24gbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisoIHA0IC1oICYmIHA0ZCAtaCApID4vZGV2L251bGwgMj4mMSB8fCB7CisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBwNCB0ZXN0czsgbm8gcDQgb3IgcDRkJworCXRlc3RfZG9uZQorfQorCisjIFRyeSB0byBwaWNrIGEgdW5pcXVlIHBvcnQ6IGd1ZXNzIGEgbGFyZ2UgbnVtYmVyLCB0aGVuIGhvcGUKKyMgbm8gbW9yZSB0aGFuIG9uZSBvZiBlYWNoIHRlc3QgaXMgcnVubmluZy4KKyMKKyMgVGhpcyBkb2VzIG5vdCBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgc29tZWJvZHkgZWxzZSBpcyBydW5uaW5nIHRoZQorIyBzYW1lIHRlc3RzIGFuZCBoYXMgY2hvc2VuIHRoZSBzYW1lIHBvcnRzLgordGVzdGlkPSR7dGhpc190ZXN0I3R9CitnaXRfcDRfdGVzdF9zdGFydD05ODAwCitQNERQT1JUPSQoKDEwNjY5ICsgKCR0ZXN0aWQgLSAkZ2l0X3A0X3Rlc3Rfc3RhcnQpKSkKKworUDRQT1JUPWxvY2FsaG9zdDokUDREUE9SVAorUDRDTElFTlQ9Y2xpZW50CitQNEVESVRPUj06CitleHBvcnQgUDRQT1JUIFA0Q0xJRU5UIFA0RURJVE9SCisKK2RiPSIkVFJBU0hfRElSRUNUT1JZL2RiIgorY2xpPSQodGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAiJFRSQVNIX0RJUkVDVE9SWS9jbGkiKQorZ2l0PSIkVFJBU0hfRElSRUNUT1JZL2dpdCIKK3BpZGZpbGU9IiRUUkFTSF9ESVJFQ1RPUlkvcDRkLnBpZCIKKworc3RhcnRfcDRkKCkgeworCW1rZGlyIC1wICIkZGIiICIkY2xpIiAiJGdpdCIgJiYKKwlybSAtZiAiJHBpZGZpbGUiICYmCisJKAorCQlwNGQgLXEgLXIgIiRkYiIgLXAgJFA0RFBPUlQgJgorCQllY2hvICQhID4iJHBpZGZpbGUiCisJKSAmJgorCisJIyBUaGlzIGdpdmVzIHA0ZCBhIGxvbmcgdGltZSB0byBzdGFydCB1cCwgYXMgaXQgY2FuIGJlCisJIyBxdWl0ZSBzbG93IGRlcGVuZGluZyBvbiB0aGUgbWFjaGluZS4gIFNldCB0aGlzIGVudmlyb25tZW50CisJIyB2YXJpYWJsZSB0byBzb21ldGhpbmcgc21hbGxlciB0byBmYWlsIGZhc3RlciBpbiwgc2F5LAorCSMgYW4gYXV0b21hdGVkIHRlc3Qgc2V0dXAuICBJZiB0aGUgcDRkIHByb2Nlc3MgZGllcywgdGhhdAorCSMgd2lsbCBiZSBjYXVnaHQgd2l0aCB0aGUgImtpbGwgLTAiIGNoZWNrIGJlbG93LgorCWk9JHtQNERfU1RBUlRfUEFUSUVOQ0U6LTMwMH0KKwlwaWQ9JChjYXQgIiRwaWRmaWxlIikKKwlyZWFkeT0KKwl3aGlsZSB0ZXN0ICRpIC1ndCAwCisJZG8KKwkJIyBzdWNjZWVkIHdoZW4gcDQgY2xpZW50IGNvbW1hbmRzIHN0YXJ0IHRvIHdvcmsKKwkJaWYgcDQgaW5mbyA+L2Rldi9udWxsIDI+JjEKKwkJdGhlbgorCQkJcmVhZHk9dHJ1ZQorCQkJYnJlYWsKKwkJZmkKKwkJIyBmYWlsIGlmIHA0ZCBkaWVkCisJCWtpbGwgLTAgJHBpZCAyPi9kZXYvbnVsbCB8fCBicmVhaworCQllY2hvIHdhaXRpbmcgZm9yIHA0ZCB0byBzdGFydAorCQlzbGVlcCAxCisJCWk9JCgoICRpIC0gMSApKQorCWRvbmUKKworCWlmIHRlc3QgLXogIiRyZWFkeSIKKwl0aGVuCisJCSMgcDRkIGZhaWxlZCB0byBzdGFydAorCQlyZXR1cm4gMQorCWZpCisKKwkjIGJ1aWxkIGEgY2xpZW50CisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgY2xpZW50IC1pIDw8LUVPRgorCQlDbGllbnQ6IGNsaWVudAorCQlEZXNjcmlwdGlvbjogY2xpZW50CisJCVJvb3Q6ICRjbGkKKwkJVmlldzogLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uCisJCUVPRgorCSkKKwlyZXR1cm4gMAorfQorCitraWxsX3A0ZCgpIHsKKwlwaWQ9JChjYXQgIiRwaWRmaWxlIikKKwkjIGl0IGhhZCBiZXR0ZXIgZXhpc3QgZm9yIHRoZSBmaXJzdCBraWxsCisJa2lsbCAkcGlkICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDsgZG8KKwkJa2lsbCAkcGlkID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworCQlzbGVlcCAxCisJZG9uZSAmJgorCSMgY29tcGxhaW4gaWYgaXQgd291bGQgbm90IGRpZQorCXRlc3RfbXVzdF9mYWlsIGtpbGwgJHBpZCA+L2Rldi9udWxsIDI+JjEgJiYKKwlybSAtcmYgIiRkYiIgIiRjbGkiICIkcGlkZmlsZSIKK30KKworY2xlYW51cF9naXQoKSB7CisJcm0gLXJmICIkZ2l0IiAmJgorCW1rZGlyICIkZ2l0IgorfQorCittYXJzaGFsX2R1bXAoKSB7CisJd2hhdD0kMSAmJgorCWxpbmU9JHsyOi0xfSAmJgorCWNhdCA+IiRUUkFTSF9ESVJFQ1RPUlkvbWFyc2hhbC1kdW1wLnB5IiA8PC1FT0YgJiYKKwlpbXBvcnQgbWFyc2hhbAorCWltcG9ydCBzeXMKKwlmb3IgaSBpbiByYW5nZSgkbGluZSk6CisJICAgIGQgPSBtYXJzaGFsLmxvYWQoc3lzLnN0ZGluKQorCXByaW50IGRbJyR3aGF0J10KKwlFT0YKKwkiJFBZVEhPTl9QQVRIIiAiJFRSQVNIX0RJUkVDVE9SWS9tYXJzaGFsLWR1bXAucHkiCit9CisKKyMKKyMgQ29uc3RydWN0IGEgY2xpZW50IHdpdGggdGhpcyBsaXN0IG9mIFZpZXcgbGluZXMKKyMKK2NsaWVudF92aWV3KCkgeworCSgKKwkJY2F0IDw8LUVPRiAmJgorCQlDbGllbnQ6IGNsaWVudAorCQlEZXNjcmlwdGlvbjogY2xpZW50CisJCVJvb3Q6ICRjbGkKKwkJVmlldzoKKwkJRU9GCisJCWZvciBhcmcgOyBkbworCQkJcHJpbnRmICJcdCRhcmdcbiIKKwkJZG9uZQorCSkgfCBwNCBjbGllbnQgLWkKK30KZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1zdm4uc2ggYi90L2xpYi1naXQtc3ZuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OWYyMmMKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1naXQtc3ZuLnNoCkBAIC0wLDAgKzEsMTg4IEBACisuIC4vdGVzdC1saWIuc2gKKworcmVtb3Rlc19naXRfc3ZuPXJlbW90ZXMvZ2l0IiItc3ZuCitnaXRfc3ZuX2lkPWdpdCIiLXN2bi1pZAorCitpZiB0ZXN0IC1uICIkTk9fU1ZOX1RFU1RTIgordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQgc3ZuIHRlc3RzLCBOT19TVk5fVEVTVFMgZGVmaW5lZCcKKwl0ZXN0X2RvbmUKK2ZpCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQgc3ZuIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCitHSVRfRElSPSRQV0QvLmdpdAorR0lUX1NWTl9ESVI9JEdJVF9ESVIvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuCitTVk5fVFJFRT0kR0lUX1NWTl9ESVIvc3ZuLXRyZWUKKworc3ZuID4vZGV2L251bGwgMj4mMQoraWYgdGVzdCAkPyAtbmUgMQordGhlbgorICAgIHNraXBfYWxsPSdza2lwcGluZyBnaXQgc3ZuIHRlc3RzLCBzdm4gbm90IGZvdW5kJworICAgIHRlc3RfZG9uZQorZmkKKworc3ZucmVwbz0kUFdEL3N2bnJlcG8KK2V4cG9ydCBzdm5yZXBvCitzdm5jb25mPSRQV0Qvc3ZuY29uZgorZXhwb3J0IHN2bmNvbmYKKworIiRQRVJMX1BBVEgiIC13IC1lICIKK3VzZSBTVk46OkNvcmU7Cit1c2UgU1ZOOjpSZXBvczsKK1wkU1ZOOjpDb3JlOjpWRVJTSU9OIGd0ICcxLjEuMCcgb3IgZXhpdCg0Mik7CitzeXN0ZW0ocXcvc3ZuYWRtaW4gY3JlYXRlIC0tZnMtdHlwZSBmc2ZzLywgXCRFTlZ7c3ZucmVwb30pID09IDAgb3IgZXhpdCg0MSk7CisiID4mMyAyPiY0Cit4PSQ/CitpZiB0ZXN0ICR4IC1uZSAwCit0aGVuCisJaWYgdGVzdCAkeCAtZXEgNDI7IHRoZW4KKwkJc2tpcF9hbGw9J1BlcmwgU1ZOIGxpYnJhcmllcyBtdXN0IGJlID49IDEuMS4wJworCWVsaWYgdGVzdCAkeCAtZXEgNDE7IHRoZW4KKwkJc2tpcF9hbGw9J3N2bmFkbWluIGZhaWxlZCB0byBjcmVhdGUgZnNmcyByZXBvc2l0b3J5JworCWVsc2UKKwkJc2tpcF9hbGw9J1BlcmwgU1ZOIGxpYnJhcmllcyBub3QgZm91bmQgb3IgdW51c2FibGUnCisJZmkKKwl0ZXN0X2RvbmUKK2ZpCisKK3Jhd3N2bnJlcG89IiRzdm5yZXBvIgorc3ZucmVwbz0iZmlsZTovLyRzdm5yZXBvIgorCitwb2tlKCkgeworCXRlc3QtY2htdGltZSArMSAiJDEiCit9CisKKyMgV2UgbmVlZCB0aGlzLCBiZWNhdXNlIHdlIHNob3VsZCBwYXNzIGVtcHR5IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHRvCisjIHRoZSAnc3ZuIGNvbW1pdCcgdG8gYXZvaWQgYXV0b21hdGVkIHByb3BlcnR5IGNoYW5nZXMgYW5kIG90aGVyIHN0dWZmCisjIHRoYXQgY291bGQgYmUgc2V0IGZyb20gdXNlcidzIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gfi8uc3VidmVyc2lvbi4KK3N2bl9jbWQgKCkgeworCVsgLWQgIiRzdm5jb25mIiBdIHx8IG1rZGlyICIkc3ZuY29uZiIKKwlvcmlnX3N2bmNtZD0iJDEiOyBzaGlmdAorCWlmIFsgLXogIiRvcmlnX3N2bmNtZCIgXTsgdGhlbgorCQlzdm4KKwkJcmV0dXJuCisJZmkKKwlzdm4gIiRvcmlnX3N2bmNtZCIgLS1jb25maWctZGlyICIkc3ZuY29uZiIgIiRAIgorfQorCitwcmVwYXJlX2h0dHBkICgpIHsKKwlmb3IgZCBpbiBcCisJCSIkU1ZOX0hUVFBEX1BBVEgiIFwKKwkJL3Vzci9zYmluL2FwYWNoZTIgXAorCQkvdXNyL3NiaW4vaHR0cGQgXAorCTsgZG8KKwkJaWYgdGVzdCAtZiAiJGQiCisJCXRoZW4KKwkJCVNWTl9IVFRQRF9QQVRIPSIkZCIKKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCWlmIHRlc3QgLXogIiRTVk5fSFRUUERfUEFUSCIKKwl0aGVuCisJCWVjaG8gPiYyICcqKiogZXJyb3I6IEFwYWNoZSBub3QgZm91bmQnCisJCXJldHVybiAxCisJZmkKKwlmb3IgZCBpbiBcCisJCSIkU1ZOX0hUVFBEX01PRFVMRV9QQVRIIiBcCisJCS91c3IvbGliL2FwYWNoZTIvbW9kdWxlcyBcCisJCS91c3IvbGliZXhlYy9hcGFjaGUyIFwKKwk7IGRvCisJCWlmIHRlc3QgLWQgIiRkIgorCQl0aGVuCisJCQlTVk5fSFRUUERfTU9EVUxFX1BBVEg9IiRkIgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJaWYgdGVzdCAteiAiJFNWTl9IVFRQRF9NT0RVTEVfUEFUSCIKKwl0aGVuCisJCWVjaG8gPiYyICcqKiogZXJyb3I6IEFwYWNoZSBtb2R1bGUgZGlyIG5vdCBmb3VuZCcKKwkJcmV0dXJuIDEKKwlmaQorCWlmIHRlc3QgISAtZiAiJFNWTl9IVFRQRF9NT0RVTEVfUEFUSC9tb2RfZGF2X3N2bi5zbyIKKwl0aGVuCisJCWVjaG8gPiYyICcqKiogZXJyb3I6IEFwYWNoZSBtb2R1bGUgIm1vZF9kYXZfc3ZuIiBub3QgZm91bmQnCisJCXJldHVybiAxCisJZmkKKworCXJlcG9fYmFzZV9wYXRoPSIkezEtc3ZufSIKKwlta2RpciAiJEdJVF9ESVIiL2xvZ3MKKworCWNhdCA+ICIkR0lUX0RJUi9odHRwZC5jb25mIiA8PEVPRgorU2VydmVyTmFtZSAiZ2l0IHN2biB0ZXN0IgorU2VydmVyUm9vdCAiJEdJVF9ESVIiCitEb2N1bWVudFJvb3QgIiRHSVRfRElSIgorUGlkRmlsZSAiJEdJVF9ESVIvaHR0cGQucGlkIgorTG9ja0ZpbGUgbG9ncy9hY2NlcHQubG9jaworTGlzdGVuIDEyNy4wLjAuMTokU1ZOX0hUVFBEX1BPUlQKK0xvYWRNb2R1bGUgZGF2X21vZHVsZSAkU1ZOX0hUVFBEX01PRFVMRV9QQVRIL21vZF9kYXYuc28KK0xvYWRNb2R1bGUgZGF2X3N2bl9tb2R1bGUgJFNWTl9IVFRQRF9NT0RVTEVfUEFUSC9tb2RfZGF2X3N2bi5zbworPExvY2F0aW9uIC8kcmVwb19iYXNlX3BhdGg+CisJREFWIHN2bgorCVNWTlBhdGggIiRyYXdzdm5yZXBvIgorPC9Mb2NhdGlvbj4KK0VPRgorfQorCitzdGFydF9odHRwZCAoKSB7CisJaWYgdGVzdCAteiAiJFNWTl9IVFRQRF9QT1JUIgorCXRoZW4KKwkJZWNobyA+JjIgJ1NWTl9IVFRQRF9QT1JUIGlzIG5vdCBkZWZpbmVkIScKKwkJcmV0dXJuCisJZmkKKworCXByZXBhcmVfaHR0cGQgIiQxIiB8fCByZXR1cm4gMQorCisJIiRTVk5fSFRUUERfUEFUSCIgLWYgIiRHSVRfRElSIi9odHRwZC5jb25mIC1rIHN0YXJ0CisJc3ZucmVwbz0iaHR0cDovLzEyNy4wLjAuMTokU1ZOX0hUVFBEX1BPUlQvJHJlcG9fYmFzZV9wYXRoIgorfQorCitzdG9wX2h0dHBkICgpIHsKKwl0ZXN0IC16ICIkU1ZOX0hUVFBEX1BPUlQiICYmIHJldHVybgorCXRlc3QgISAtZiAiJEdJVF9ESVIvaHR0cGQuY29uZiIgJiYgcmV0dXJuCisJIiRTVk5fSFRUUERfUEFUSCIgLWYgIiRHSVRfRElSIi9odHRwZC5jb25mIC1rIHN0b3AKK30KKworY29udmVydF90b19yZXZfZGIgKCkgeworCSIkUEVSTF9QQVRIIiAtdyAtLSAtICIkQCIgPDxcRU9GCit1c2Ugc3RyaWN0OworQEFSR1YgPT0gMiBvciBkaWUgIlVzYWdlOiBjb252ZXJ0X3RvX3Jldl9kYiA8aW5wdXQ+IDxvdXRwdXQ+IjsKK29wZW4gbXkgJHdyLCAnKz4nLCAkQVJHVlsxXSBvciBkaWUgIiQhOiBjb3VsZG4ndCBvcGVuOiAkQVJHVlsxXSI7CitvcGVuIG15ICRyZCwgJzwnLCAkQVJHVlswXSBvciBkaWUgIiQhOiBjb3VsZG4ndCBvcGVuOiAkQVJHVlswXSI7CitteSAkc2l6ZSA9IChzdGF0KCRyZCkpWzddOworKCRzaXplICUgMjQpID09IDAgb3IgZGllICJJbmNvbnNpc3RlbnQgc2l6ZTogJHNpemUiOword2hpbGUgKHN5c3JlYWQoJHJkLCBteSAkYnVmLCAyNCkgPT0gMjQpIHsKKwlteSAoJHIsICRjKSA9IHVucGFjaygnTkg0MCcsICRidWYpOworCW15ICRvZmZzZXQgPSAkciAqIDQxOworCXNlZWsgJHdyLCAwLCAyIG9yIGRpZSAkITsKKwlteSAkcG9zID0gdGVsbCAkd3I7CisJaWYgKCRwb3MgPCAkb2Zmc2V0KSB7CisJCWZvciAoMSAuLiAoKCRvZmZzZXQgLSAkcG9zKSAvIDQxKSkgeworCQkJcHJpbnQgJHdyICgoJzAnIHggNDApLCJcbiIpIG9yIGRpZSAkITsKKwkJfQorCX0KKwlzZWVrICR3ciwgJG9mZnNldCwgMCBvciBkaWUgJCE7CisJcHJpbnQgJHdyICRjLCJcbiIgb3IgZGllICQhOworfQorY2xvc2UgJHdyIG9yIGRpZSAkITsKK2Nsb3NlICRyZCBvciBkaWUgJCE7CitFT0YKK30KKworcmVxdWlyZV9zdm5zZXJ2ZSAoKSB7CisgICAgaWYgdGVzdCAteiAiJFNWTlNFUlZFX1BPUlQiCisgICAgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBzdm5zZXJ2ZSB0ZXN0LiAoc2V0ICRTVk5TRVJWRV9QT1JUIHRvIGVuYWJsZSknCisgICAgICAgIHRlc3RfZG9uZQorICAgIGZpCit9CisKK3N0YXJ0X3N2bnNlcnZlICgpIHsKKyAgICBzdm5zZXJ2ZSAtLWxpc3Rlbi1wb3J0ICRTVk5TRVJWRV9QT1JUIFwKKyAgICAgICAgICAgICAtLXJvb3QgIiRyYXdzdm5yZXBvIiBcCisgICAgICAgICAgICAgLS1saXN0ZW4tb25jZSBcCisgICAgICAgICAgICAgLS1saXN0ZW4taG9zdCAxMjcuMC4wLjEgJgorfQorCmRpZmYgLS1naXQgYS90L2xpYi1ncGcuc2ggYi90L2xpYi1ncGcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDU4MjRmYQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWdwZy5zaApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKworZ3BnX3ZlcnNpb249YGdwZyAtLXZlcnNpb24gMj4mMWAKK2lmIHRlc3QgJD8gPSAxMjc7IHRoZW4KKwlzYXkgIllvdSBkbyBub3Qgc2VlbSB0byBoYXZlIGdwZyBpbnN0YWxsZWQiCitlbHNlCisJIyBBcyBzYWlkIGhlcmU6IGh0dHA6Ly93d3cuZ251cGcub3JnL2RvY3VtZW50YXRpb24vZmFxcy5odG1sI3E2LjE5CisJIyB0aGUgZ3BnIHZlcnNpb24gMS4wLjYgZGlkbid0IHBhcnNlIHRydXN0IHBhY2tldHMgY29ycmVjdGx5LCBzbyBmb3IKKwkjIHRoYXQgdmVyc2lvbiwgY3JlYXRpb24gb2Ygc2lnbmVkIHRhZ3MgdXNpbmcgdGhlIGdlbmVyYXRlZCBrZXkgZmFpbHMuCisJY2FzZSAiJGdwZ192ZXJzaW9uIiBpbgorCSdncGcgKEdudVBHKSAxLjAuNicqKQorCQlzYXkgIllvdXIgdmVyc2lvbiBvZiBncGcgKDEuMC42KSBpcyB0b28gYnVnZ3kgZm9yIHRlc3RpbmciCisJCTs7CisJKikKKwkJIyBrZXkgZ2VuZXJhdGlvbiBpbmZvOiBncGcgLS1ob21lZGlyIHQvbGliLWdwZyAtLWdlbi1rZXkKKwkJIyBUeXBlIERTQSBhbmQgRWxnYW1hbCwgc2l6ZSAyMDQ4IGJpdHMsIG5vIGV4cGlyYXRpb24gZGF0ZS4KKwkJIyBOYW1lIGFuZCBlbWFpbDogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCQkjIE5vIHBhc3N3b3JkIGdpdmVuLCB0byBlbmFibGUgbm9uLWludGVyYWN0aXZlIG9wZXJhdGlvbi4KKwkJY3AgLVIgIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZyAuL2dwZ2hvbWUKKwkJY2htb2QgMDcwMCBncGdob21lCisJCUdOVVBHSE9NRT0iJChwd2QpL2dwZ2hvbWUiCisJCWV4cG9ydCBHTlVQR0hPTUUKKwkJdGVzdF9zZXRfcHJlcmVxIEdQRworCQk7OworCWVzYWMKK2ZpCisKK3Nhbml0aXplX3BncCgpIHsKKwlwZXJsIC1uZSAnCisJCS9eLS0tLS1FTkQgUEdQLyBhbmQgJGluX3BncCA9IDA7CisJCXByaW50IHVubGVzcyAkaW5fcGdwOworCQkvXi0tLS0tQkVHSU4gUEdQLyBhbmQgJGluX3BncCA9IDE7CisJJworfQpkaWZmIC0tZ2l0IGEvdC9saWItZ3BnL3B1YnJpbmcuZ3BnIGIvdC9saWItZ3BnL3B1YnJpbmcuZ3BnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODU1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1ncGcvcHVicmluZy5ncGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC9saWItZ3BnL3JhbmRvbV9zZWVkIGIvdC9saWItZ3BnL3JhbmRvbV9zZWVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZWQxMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1ncGcvcmFuZG9tX3NlZWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC9saWItZ3BnL3NlY3JpbmcuZ3BnIGIvdC9saWItZ3BnL3NlY3JpbmcuZ3BnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MzFjZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1ncGcvc2VjcmluZy5ncGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC9saWItZ3BnL3RydXN0ZGIuZ3BnIGIvdC9saWItZ3BnL3RydXN0ZGIuZ3BnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYWNlOTYKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1ncGcvdHJ1c3RkYi5ncGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQuc2ggYi90L2xpYi1odHRwZC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmY0NDJiCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQuc2gKQEAgLTAsMCArMSwyMDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQ2xlbWVucyBCdWNoYWNoZXIgPGRyaXp6ZEBhb24uYXQ+CisjCisKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9IVFRQRCIKK3RoZW4KKwlza2lwX2FsbD0iTmV0d29yayB0ZXN0aW5nIGRpc2FibGVkIChkZWZpbmUgR0lUX1RFU1RfSFRUUEQgdG8gZW5hYmxlKSIKKwl0ZXN0X2RvbmUKK2ZpCisKK0hUVFBEX1BBUkE9IiIKKworZm9yIERFRkFVTFRfSFRUUERfUEFUSCBpbiAnL3Vzci9zYmluL2h0dHBkJyAnL3Vzci9zYmluL2FwYWNoZTInCitkbworCWlmIHRlc3QgLXggIiRERUZBVUxUX0hUVFBEX1BBVEgiCisJdGhlbgorCQlicmVhaworCWZpCitkb25lCisKK2ZvciBERUZBVUxUX0hUVFBEX01PRFVMRV9QQVRIIGluICcvdXNyL2xpYmV4ZWMvYXBhY2hlMicgXAorCQkJCSAnL3Vzci9saWIvYXBhY2hlMi9tb2R1bGVzJyBcCisJCQkJICcvdXNyL2xpYjY0L2h0dHBkL21vZHVsZXMnIFwKKwkJCQkgJy91c3IvbGliL2h0dHBkL21vZHVsZXMnCitkbworCWlmIHRlc3QgLWQgIiRERUZBVUxUX0hUVFBEX01PRFVMRV9QQVRIIgorCXRoZW4KKwkJYnJlYWsKKwlmaQorZG9uZQorCitjYXNlICQodW5hbWUpIGluCisJRGFyd2luKQorCQlIVFRQRF9QQVJBPSIkSFRUUERfUEFSQSAtRERhcndpbiIKKwk7OworZXNhYworCitMSUJfSFRUUERfUEFUSD0ke0xJQl9IVFRQRF9QQVRILSIkREVGQVVMVF9IVFRQRF9QQVRIIn0KK0xJQl9IVFRQRF9QT1JUPSR7TElCX0hUVFBEX1BPUlQtJzgxMTEnfQorCitURVNUX1BBVEg9IiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkCitIVFRQRF9ST09UX1BBVEg9IiRQV0QiL2h0dHBkCitIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEg9JEhUVFBEX1JPT1RfUEFUSC93d3cKKworIyBoYWNrIHRvIHN1cHByZXNzIGFwYWNoZSBQYXNzRW52IHdhcm5pbmdzCitHSVRfVkFMR1JJTkQ9JEdJVF9WQUxHUklORDsgZXhwb3J0IEdJVF9WQUxHUklORAorR0lUX1ZBTEdSSU5EX09QVElPTlM9JEdJVF9WQUxHUklORF9PUFRJT05TOyBleHBvcnQgR0lUX1ZBTEdSSU5EX09QVElPTlMKKworaWYgISB0ZXN0IC14ICIkTElCX0hUVFBEX1BBVEgiCit0aGVuCisJc2tpcF9hbGw9InNraXBwaW5nIHRlc3QsIG5vIHdlYiBzZXJ2ZXIgZm91bmQgYXQgJyRMSUJfSFRUUERfUEFUSCciCisJdGVzdF9kb25lCitmaQorCitIVFRQRF9WRVJTSU9OPWAkTElCX0hUVFBEX1BBVEggLXYgfCBcCisJc2VkIC1uICdzL15TZXJ2ZXIgdmVyc2lvbjogQXBhY2hlXC9cKFswLTldKlwpXC4uKiQvXDEvcDsgcSdgCisKK2lmIHRlc3QgLW4gIiRIVFRQRF9WRVJTSU9OIgordGhlbgorCWlmIHRlc3QgLXogIiRMSUJfSFRUUERfTU9EVUxFX1BBVEgiCisJdGhlbgorCQlpZiAhIHRlc3QgJEhUVFBEX1ZFUlNJT04gLWdlIDIKKwkJdGhlbgorCQkJc2tpcF9hbGw9InNraXBwaW5nIHRlc3QsIGF0IGxlYXN0IEFwYWNoZSB2ZXJzaW9uIDIgaXMgcmVxdWlyZWQiCisJCQl0ZXN0X2RvbmUKKwkJZmkKKwkJaWYgISB0ZXN0IC1kICIkREVGQVVMVF9IVFRQRF9NT0RVTEVfUEFUSCIKKwkJdGhlbgorCQkJc2tpcF9hbGw9IkFwYWNoZSBtb2R1bGUgZGlyZWN0b3J5IG5vdCBmb3VuZC4gIFNraXBwaW5nIHRlc3RzLiIKKwkJCXRlc3RfZG9uZQorCQlmaQorCisJCUxJQl9IVFRQRF9NT0RVTEVfUEFUSD0iJERFRkFVTFRfSFRUUERfTU9EVUxFX1BBVEgiCisJZmkKK2Vsc2UKKwllcnJvciAiQ291bGQgbm90IGlkZW50aWZ5IHdlYiBzZXJ2ZXIgYXQgJyRMSUJfSFRUUERfUEFUSCciCitmaQorCitwcmVwYXJlX2h0dHBkKCkgeworCW1rZGlyIC1wICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIgorCWNwICIkVEVTVF9QQVRIIi9wYXNzd2QgIiRIVFRQRF9ST09UX1BBVEgiCisKKwlsbiAtcyAiJExJQl9IVFRQRF9NT0RVTEVfUEFUSCIgIiRIVFRQRF9ST09UX1BBVEgvbW9kdWxlcyIKKworCWlmIHRlc3QgLW4gIiRMSUJfSFRUUERfU1NMIgorCXRoZW4KKwkJSFRUUERfUFJPVE89aHR0cHMKKworCQlSQU5ERklMRV9QQVRIPSIkSFRUUERfUk9PVF9QQVRIIi8ucm5kIG9wZW5zc2wgcmVxIFwKKwkJCS1jb25maWcgIiRURVNUX1BBVEgvc3NsLmNuZiIgXAorCQkJLW5ldyAteDUwOSAtbm9kZXMgXAorCQkJLW91dCAiJEhUVFBEX1JPT1RfUEFUSC9odHRwZC5wZW0iIFwKKwkJCS1rZXlvdXQgIiRIVFRQRF9ST09UX1BBVEgvaHR0cGQucGVtIgorCQlHSVRfU1NMX05PX1ZFUklGWT10CisJCWV4cG9ydCBHSVRfU1NMX05PX1ZFUklGWQorCQlIVFRQRF9QQVJBPSIkSFRUUERfUEFSQSAtRFNTTCIKKwllbHNlCisJCUhUVFBEX1BST1RPPWh0dHAKKwlmaQorCUhUVFBEX0RFU1Q9MTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVAorCUhUVFBEX1VSTD0kSFRUUERfUFJPVE86Ly8kSFRUUERfREVTVAorCUhUVFBEX1VSTF9VU0VSPSRIVFRQRF9QUk9UTzovL3VzZXIlNDBob3N0QCRIVFRQRF9ERVNUCisJSFRUUERfVVJMX1VTRVJfUEFTUz0kSFRUUERfUFJPVE86Ly91c2VyJTQwaG9zdDp1c2VyJTQwaG9zdEAkSFRUUERfREVTVAorCisJaWYgdGVzdCAtbiAiJExJQl9IVFRQRF9EQVYiIC1vIC1uICIkTElCX0hUVFBEX1NWTiIKKwl0aGVuCisJCUhUVFBEX1BBUkE9IiRIVFRQRF9QQVJBIC1EREFWIgorCisJCWlmIHRlc3QgLW4gIiRMSUJfSFRUUERfU1ZOIgorCQl0aGVuCisJCQlIVFRQRF9QQVJBPSIkSFRUUERfUEFSQSAtRFNWTiIKKwkJCXJhd3N2bnJlcG89IiRIVFRQRF9ST09UX1BBVEgvc3ZucmVwbyIKKwkJCXN2bnJlcG89Imh0dHA6Ly8xMjcuMC4wLjE6JExJQl9IVFRQRF9QT1JUL3N2biIKKwkJZmkKKwlmaQorfQorCitzdGFydF9odHRwZCgpIHsKKwlwcmVwYXJlX2h0dHBkID4mMyAyPiY0CisKKwl0cmFwICdjb2RlPSQ/OyBzdG9wX2h0dHBkOyAoZXhpdCAkY29kZSk7IGRpZScgRVhJVAorCisJIiRMSUJfSFRUUERfUEFUSCIgLWQgIiRIVFRQRF9ST09UX1BBVEgiIFwKKwkJLWYgIiRURVNUX1BBVEgvYXBhY2hlLmNvbmYiICRIVFRQRF9QQVJBIFwKKwkJLWMgIkxpc3RlbiAxMjcuMC4wLjE6JExJQl9IVFRQRF9QT1JUIiAtayBzdGFydCBcCisJCT4mMyAyPiY0CisJaWYgdGVzdCAkPyAtbmUgMAorCXRoZW4KKwkJc2tpcF9hbGw9InNraXBwaW5nIHRlc3QsIHdlYiBzZXJ2ZXIgc2V0dXAgZmFpbGVkIgorCQl0cmFwICdkaWUnIEVYSVQKKwkJdGVzdF9kb25lCisJZmkKK30KKworc3RvcF9odHRwZCgpIHsKKwl0cmFwICdkaWUnIEVYSVQKKworCSIkTElCX0hUVFBEX1BBVEgiIC1kICIkSFRUUERfUk9PVF9QQVRIIiBcCisJCS1mICIkVEVTVF9QQVRIL2FwYWNoZS5jb25mIiAkSFRUUERfUEFSQSAtayBzdG9wCit9CisKK3Rlc3RfaHR0cF9wdXNoX25vbmZmKCkgeworCVJFTU9URV9SRVBPPSQxCisJTE9DQUxfUkVQTz0kMgorCUJSQU5DSD0kMworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWZhc3QtZm9yd2FyZCBwdXNoIGZhaWxzJyAnCisJCWNkICIkUkVNT1RFX1JFUE8iICYmCisJCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwkJY2QgIiRMT0NBTF9SRVBPIiAmJgorCQlnaXQgY2hlY2tvdXQgJEJSQU5DSCAmJgorCQllY2hvICJjaGFuZ2VkIiA+IHBhdGgyICYmCisJCWdpdCBjb21taXQgLWEgLW0gcGF0aDIgLS1hbWVuZCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC12IG9yaWdpbiA+b3V0cHV0IDI+JjEgJiYKKwkJKGNkICIkUkVNT1RFX1JFUE8iICYmCisJCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1mYXN0LWZvcndhcmQgcHVzaCBzaG93IHJlZiBzdGF0dXMnICcKKwkJZ3JlcCAiXiAhIFxbcmVqZWN0ZWRcXVsgXSokQlJBTkNIIC0+ICRCUkFOQ0ggKG5vbi1mYXN0LWZvcndhcmQpJCIgb3V0cHV0CisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWZhc3QtZm9yd2FyZCBwdXNoIHNob3dzIGhlbHAgbWVzc2FnZScgJworCQl0ZXN0X2kxOG5ncmVwICJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSIgb3V0cHV0CisJJworfQorCitzZXR1cF9hc2twYXNzX2hlbHBlcigpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhc2twYXNzIGhlbHBlcicgJworCQl3cml0ZV9zY3JpcHQgIiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcyIgPDwtXEVPRiAmJgorCQllY2hvID4+IiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcy1xdWVyeSIgImFza3Bhc3M6ICQqIiAmJgorCQljYXQgIiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcy1yZXNwb25zZSIKKwkJRU9GCisJCUdJVF9BU0tQQVNTPSIkVFJBU0hfRElSRUNUT1JZL2Fza3Bhc3MiICYmCisJCWV4cG9ydCBHSVRfQVNLUEFTUyAmJgorCQlleHBvcnQgVFJBU0hfRElSRUNUT1JZCisJJworfQorCitzZXRfYXNrcGFzcygpIHsKKwk+IiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcy1xdWVyeSIgJiYKKwllY2hvICIkKiIgPiIkVFJBU0hfRElSRUNUT1JZL2Fza3Bhc3MtcmVzcG9uc2UiCit9CisKK2V4cGVjdF9hc2twYXNzKCkgeworCWRlc3Q9JEhUVFBEX0RFU1QKKwl7CisJCWNhc2UgIiQxIiBpbgorCQlub25lKQorCQkJOzsKKwkJcGFzcykKKwkJCWVjaG8gImFza3Bhc3M6IFBhc3N3b3JkIGZvciAnaHR0cDovLyQyQCRkZXN0JzogIgorCQkJOzsKKwkJYm90aCkKKwkJCWVjaG8gImFza3Bhc3M6IFVzZXJuYW1lIGZvciAnaHR0cDovLyRkZXN0JzogIgorCQkJZWNobyAiYXNrcGFzczogUGFzc3dvcmQgZm9yICdodHRwOi8vJDJAJGRlc3QnOiAiCisJCQk7OworCQkqKQorCQkJZmFsc2UKKwkJCTs7CisJCWVzYWMKKwl9ID4iJFRSQVNIX0RJUkVDVE9SWS9hc2twYXNzLWV4cGVjdCIgJiYKKwl0ZXN0X2NtcCAiJFRSQVNIX0RJUkVDVE9SWS9hc2twYXNzLWV4cGVjdCIgXAorCQkgIiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcy1xdWVyeSIKK30KZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkL2FwYWNoZS5jb25mIGIvdC9saWItaHR0cGQvYXBhY2hlLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkNWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWh0dHBkL2FwYWNoZS5jb25mCkBAIC0wLDAgKzEsMTIyIEBACitTZXJ2ZXJOYW1lIGR1bW15CitMb2NrRmlsZSBhY2NlcHQubG9jaworUGlkRmlsZSBodHRwZC5waWQKK0RvY3VtZW50Um9vdCB3d3cKK0xvZ0Zvcm1hdCAiJWggJWwgJXUgJXQgXCIlclwiICU+cyAlYiIgY29tbW9uCitDdXN0b21Mb2cgYWNjZXNzLmxvZyBjb21tb24KK0Vycm9yTG9nIGVycm9yLmxvZworPElmTW9kdWxlICFtb2RfbG9nX2NvbmZpZy5jPgorCUxvYWRNb2R1bGUgbG9nX2NvbmZpZ19tb2R1bGUgbW9kdWxlcy9tb2RfbG9nX2NvbmZpZy5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX2FsaWFzLmM+CisJTG9hZE1vZHVsZSBhbGlhc19tb2R1bGUgbW9kdWxlcy9tb2RfYWxpYXMuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9jZ2kuYz4KKwlMb2FkTW9kdWxlIGNnaV9tb2R1bGUgbW9kdWxlcy9tb2RfY2dpLnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfZW52LmM+CisJTG9hZE1vZHVsZSBlbnZfbW9kdWxlIG1vZHVsZXMvbW9kX2Vudi5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX3Jld3JpdGUuYz4KKwlMb2FkTW9kdWxlIHJld3JpdGVfbW9kdWxlIG1vZHVsZXMvbW9kX3Jld3JpdGUuc28KKzwvSUZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF92ZXJzaW9uLmM+CisJTG9hZE1vZHVsZSB2ZXJzaW9uX21vZHVsZSBtb2R1bGVzL21vZF92ZXJzaW9uLnNvCis8L0lmTW9kdWxlPgorCis8SWZWZXJzaW9uIDwgMi4xPgorPElmTW9kdWxlICFtb2RfYXV0aC5jPgorCUxvYWRNb2R1bGUgYXV0aF9tb2R1bGUgbW9kdWxlcy9tb2RfYXV0aC5zbworPC9JZk1vZHVsZT4KKzwvSWZWZXJzaW9uPgorCis8SWZWZXJzaW9uID49IDIuMT4KKzxJZk1vZHVsZSAhbW9kX2F1dGhfYmFzaWMuYz4KKwlMb2FkTW9kdWxlIGF1dGhfYmFzaWNfbW9kdWxlIG1vZHVsZXMvbW9kX2F1dGhfYmFzaWMuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9hdXRobl9maWxlLmM+CisJTG9hZE1vZHVsZSBhdXRobl9maWxlX21vZHVsZSBtb2R1bGVzL21vZF9hdXRobl9maWxlLnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfYXV0aHpfdXNlci5jPgorCUxvYWRNb2R1bGUgYXV0aHpfdXNlcl9tb2R1bGUgbW9kdWxlcy9tb2RfYXV0aHpfdXNlci5zbworPC9JZk1vZHVsZT4KKzwvSWZWZXJzaW9uPgorCitQYXNzRW52IEdJVF9WQUxHUklORAorUGFzc0VudiBHSVRfVkFMR1JJTkRfT1BUSU9OUworCitBbGlhcyAvZHVtYi8gd3d3LworQWxpYXMgL2F1dGgvZHVtYi8gd3d3L2F1dGgvZHVtYi8KKworPExvY2F0aW9uTWF0Y2ggL3NtYXJ0Lz4KKwlTZXRFbnYgR0lUX0VYRUNfUEFUSCAke0dJVF9FWEVDX1BBVEh9CisJU2V0RW52IEdJVF9IVFRQX0VYUE9SVF9BTEwKKzwvTG9jYXRpb25NYXRjaD4KKzxMb2NhdGlvbk1hdGNoIC9zbWFydF9ub2V4cG9ydC8+CisJU2V0RW52IEdJVF9FWEVDX1BBVEggJHtHSVRfRVhFQ19QQVRIfQorPC9Mb2NhdGlvbk1hdGNoPgorPExvY2F0aW9uTWF0Y2ggL3NtYXJ0X2N1c3RvbV9lbnYvPgorCVNldEVudiBHSVRfRVhFQ19QQVRIICR7R0lUX0VYRUNfUEFUSH0KKwlTZXRFbnYgR0lUX0hUVFBfRVhQT1JUX0FMTAorCVNldEVudiBHSVRfQ09NTUlUVEVSX05BTUUgIkN1c3RvbSBVc2VyIgorCVNldEVudiBHSVRfQ09NTUlUVEVSX0VNQUlMIGN1c3RvbUBleGFtcGxlLmNvbQorPC9Mb2NhdGlvbk1hdGNoPgorU2NyaXB0QWxpYXNNYXRjaCAvc21hcnRfKlteL10qLyguKikgJHtHSVRfRVhFQ19QQVRIfS9naXQtaHR0cC1iYWNrZW5kLyQxCis8RGlyZWN0b3J5ICR7R0lUX0VYRUNfUEFUSH0+CisJT3B0aW9ucyBGb2xsb3dTeW1saW5rcworPC9EaXJlY3Rvcnk+Cis8RmlsZXMgJHtHSVRfRVhFQ19QQVRIfS9naXQtaHR0cC1iYWNrZW5kPgorCU9wdGlvbnMgRXhlY0NHSQorPC9GaWxlcz4KKworUmV3cml0ZUVuZ2luZSBvbgorUmV3cml0ZVJ1bGUgXi9zbWFydC1yZWRpci1wZXJtLyguKikkIC9zbWFydC8kMSBbUj0zMDFdCitSZXdyaXRlUnVsZSBeL3NtYXJ0LXJlZGlyLXRlbXAvKC4qKSQgL3NtYXJ0LyQxIFtSPTMwMl0KKworPElmRGVmaW5lIFNTTD4KK0xvYWRNb2R1bGUgc3NsX21vZHVsZSBtb2R1bGVzL21vZF9zc2wuc28KKworU1NMQ2VydGlmaWNhdGVGaWxlIGh0dHBkLnBlbQorU1NMQ2VydGlmaWNhdGVLZXlGaWxlIGh0dHBkLnBlbQorU1NMUmFuZG9tU2VlZCBzdGFydHVwIGZpbGU6L2Rldi91cmFuZG9tIDUxMgorU1NMUmFuZG9tU2VlZCBjb25uZWN0IGZpbGU6L2Rldi91cmFuZG9tIDUxMgorU1NMU2Vzc2lvbkNhY2hlIG5vbmUKK1NTTE11dGV4IGZpbGU6c3NsX211dGV4CitTU0xFbmdpbmUgT24KKzwvSWZEZWZpbmU+CisKKzxMb2NhdGlvbiAvYXV0aC8+CisJQXV0aFR5cGUgQmFzaWMKKwlBdXRoTmFtZSAiZ2l0LWF1dGgiCisJQXV0aFVzZXJGaWxlIHBhc3N3ZAorCVJlcXVpcmUgdmFsaWQtdXNlcgorPC9Mb2NhdGlvbj4KKworPExvY2F0aW9uTWF0Y2ggIl4vYXV0aC1wdXNoLy4qL2dpdC1yZWNlaXZlLXBhY2skIj4KKwlBdXRoVHlwZSBCYXNpYworCUF1dGhOYW1lICJnaXQtYXV0aCIKKwlBdXRoVXNlckZpbGUgcGFzc3dkCisJUmVxdWlyZSB2YWxpZC11c2VyCis8L0xvY2F0aW9uTWF0Y2g+CisKKzxJZkRlZmluZSBEQVY+CisJTG9hZE1vZHVsZSBkYXZfbW9kdWxlIG1vZHVsZXMvbW9kX2Rhdi5zbworCUxvYWRNb2R1bGUgZGF2X2ZzX21vZHVsZSBtb2R1bGVzL21vZF9kYXZfZnMuc28KKworCURBVkxvY2tEQiBEQVZMb2NrCisJPExvY2F0aW9uIC9kdW1iLz4KKwkJRGF2IG9uCisJPC9Mb2NhdGlvbj4KKwk8TG9jYXRpb24gL2F1dGgvZHVtYj4KKwkJRGF2IG9uCisJPC9Mb2NhdGlvbj4KKzwvSWZEZWZpbmU+CisKKzxJZkRlZmluZSBTVk4+CisJTG9hZE1vZHVsZSBkYXZfc3ZuX21vZHVsZSBtb2R1bGVzL21vZF9kYXZfc3ZuLnNvCisKKwk8TG9jYXRpb24gL3N2bj4KKwkJREFWIHN2bgorCQlTVk5QYXRoIHN2bnJlcG8KKwk8L0xvY2F0aW9uPgorPC9JZkRlZmluZT4KZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkL3Bhc3N3ZCBiL3QvbGliLWh0dHBkL3Bhc3N3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmZiY2FkCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvcGFzc3dkCkBAIC0wLDAgKzEgQEAKK3VzZXJAaG9zdDpuS3BhOHBaVUh4L2ljCmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9zc2wuY25mIGIvdC9saWItaHR0cGQvc3NsLmNuZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFiMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvc3NsLmNuZgpAQCAtMCwwICsxLDggQEAKK1JBTkRGSUxFICAgICAgICAgICAgICAgID0gJEVOVjo6UkFOREZJTEVfUEFUSAorCitbIHJlcSBdCitkZWZhdWx0X2JpdHMgICAgICAgICAgICA9IDEwMjQKK2Rpc3Rpbmd1aXNoZWRfbmFtZSAgICAgID0gcmVxX2Rpc3Rpbmd1aXNoZWRfbmFtZQorcHJvbXB0ICAgICAgICAgICAgICAgICAgPSBubworWyByZXFfZGlzdGluZ3Vpc2hlZF9uYW1lIF0KK2NvbW1vbk5hbWUgICAgICAgICAgICAgID0gMTI3LjAuMC4xCmRpZmYgLS1naXQgYS90L2xpYi1wYWdlci5zaCBiL3QvbGliLXBhZ2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDNlYWIKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1wYWdlci5zaApAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZXJtaW5lIGRlZmF1bHQgcGFnZXInICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUucGFnZXIgJiYKKwlsZXNzPSQoCisJCXVuc2V0IFBBR0VSIEdJVF9QQUdFUjsKKwkJZ2l0IHZhciBHSVRfUEFHRVIKKwkpICYmCisJdGVzdCAtbiAiJGxlc3MiCisnCisKK2lmIGV4cHIgIiRsZXNzIiA6ICdbYS16XVthLXpdKiQnID4vZGV2L251bGwKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgU0lNUExFUEFHRVIKK2ZpCmRpZmYgLS1naXQgYS90L2xpYi1wYXRjaC1tb2RlLnNoIGIvdC9saWItcGF0Y2gtbW9kZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmMzYzkxCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItcGF0Y2gtbW9kZS5zaApAQCAtMCwwICsxLDM4IEBACis6IGluY2x1ZGVkIGZyb20gdDIwMTYgYW5kIG90aGVycworCisuIC4vdGVzdC1saWIuc2gKKworc2V0X3N0YXRlICgpIHsKKwllY2hvICIkMyIgPiAiJDEiICYmCisJZ2l0IGFkZCAiJDEiICYmCisJZWNobyAiJDIiID4gIiQxIgorfQorCitzYXZlX3N0YXRlICgpIHsKKwlub3NsYXNoPSIkKGVjaG8gIiQxIiB8IHRyIC8gXykiICYmCisJY2F0ICIkMSIgPiBfd29ya3RyZWVfIiRub3NsYXNoIiAmJgorCWdpdCBzaG93IDoiJDEiID4gX2luZGV4XyIkbm9zbGFzaCIKK30KKworc2V0X2FuZF9zYXZlX3N0YXRlICgpIHsKKwlzZXRfc3RhdGUgIiRAIiAmJgorCXNhdmVfc3RhdGUgIiQxIgorfQorCit2ZXJpZnlfc3RhdGUgKCkgeworCXRlc3QgIiQoY2F0ICIkMSIpIiA9ICIkMiIgJiYKKwl0ZXN0ICIkKGdpdCBzaG93IDoiJDEiKSIgPSAiJDMiCit9CisKK3ZlcmlmeV9zYXZlZF9zdGF0ZSAoKSB7CisJbm9zbGFzaD0iJChlY2hvICIkMSIgfCB0ciAvIF8pIiAmJgorCXZlcmlmeV9zdGF0ZSAiJDEiICIkKGNhdCBfd29ya3RyZWVfIiRub3NsYXNoIikiICIkKGNhdCBfaW5kZXhfIiRub3NsYXNoIikiCit9CisKK3NhdmVfaGVhZCAoKSB7CisJZ2l0IHJldi1wYXJzZSBIRUFEID4gX2hlYWQKK30KKwordmVyaWZ5X3NhdmVkX2hlYWQgKCkgeworCXRlc3QgIiQoY2F0IF9oZWFkKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorfQpkaWZmIC0tZ2l0IGEvdC9saWItcHJlcmVxLUZJTEVNT0RFLnNoIGIvdC9saWItcHJlcmVxLUZJTEVNT0RFLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZTVhNGMKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1wcmVyZXEtRklMRU1PREUuc2gKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCitpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuZmlsZW1vZGUpIiA9IGZhbHNlCit0aGVuCisJc2F5ICdmaWxlbW9kZSBkaXNhYmxlZCBvbiB0aGUgZmlsZXN5c3RlbScKK2Vsc2UKKwl0ZXN0X3NldF9wcmVyZXEgRklMRU1PREUKK2ZpCmRpZmYgLS1naXQgYS90L2xpYi1yZWFkLXRyZWUtbS0zd2F5LnNoIGIvdC9saWItcmVhZC10cmVlLW0tM3dheS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjgzMjlhCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItcmVhZC10cmVlLW0tM3dheS5zaApAQCAtMCwwICsxLDE1OCBAQAorOiBJbmNsdWRlZCBmcm9tIHQxMDAwLXJlYWQtdHJlZS1tLTN3YXkuc2ggYW5kIG90aGVycworIyBPcmlnaW5hbCB0cmVlLgorbWtkaXIgWgorZm9yIGEgaW4gTiBEIE0KK2RvCisgICAgZm9yIGIgaW4gTiBEIE0KKyAgICBkbworICAgICAgICBwPSRhJGIKKwllY2hvIFRoaXMgaXMgJHAgZnJvbSB0aGUgb3JpZ2luYWwgdHJlZS4gPiRwCisJZWNobyBUaGlzIGlzIFovJHAgZnJvbSB0aGUgb3JpZ2luYWwgdHJlZS4gPlovJHAKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkgICAgImFkZGluZyB0ZXN0IGZpbGUgJHAgYW5kIFovJHAiIFwKKwkgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgJHAgJiYKKwkgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBaLyRwJworICAgIGRvbmUKK2RvbmUKK2VjaG8gVGhpcyBpcyBTUyBmcm9tIHRoZSBvcmlnaW5hbCB0cmVlLiA+U1MKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhZGRpbmcgdGVzdCBmaWxlIFNTJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgU1MnCitjYXQgPlRUIDw8XEVPRgorVGhpcyBpcyBhIHRyaXZpYWwgbWVyZ2Ugc2FtcGxlIHRleHQuCitCcmFuY2ggQSBpcyBleHBlY3RlZCB0byB1cGNhc2UgdGhpcyB3b3JkLCBoZXJlLgorVGhlcmUgYXJlIHNvbWUgZmlsbGVyIGxpbmVzIHRvIGF2b2lkIGRpZmYgY29udGV4dAorY29uZmxpY3RzIGhlcmUsCitsaWtlIHRoaXMgb25lLAorYW5kIHRoaXMgb25lLAorYW5kIHRoaXMgb25lIGlzIHlldCBhbm90aGVyIG9uZSBvZiB0aGVtLgorQXQgdGhlIHZlcnkgZW5kLCBoZXJlIGNvbWVzIGFub3RoZXIgbGluZSwgdGhhdCBpcwordGhlIHdvcmQsIGV4cGVjdGVkIHRvIGJlIHVwY2FzZWQgYnkgQnJhbmNoIEIuCitUaGlzIGNvbmNsdWRlcyB0aGUgdHJpdmlhbCBtZXJnZSBzYW1wbGUgZmlsZS4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FkZGluZyB0ZXN0IGZpbGUgVFQnIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBUVCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIGluaXRpYWwgdHJlZScgXAorICAgICd0cmVlX089JChnaXQgd3JpdGUtdHJlZSknCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhbmNoIEEgYW5kIEIgbWFrZXMgdGhlIGNoYW5nZXMgYWNjb3JkaW5nIHRvIHRoZSBhYm92ZSBtYXRyaXguCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhbmNoIEEKKwordG9fcmVtb3ZlPSQoZWNobyBEPyBaL0Q/KQorcm0gLWYgJHRvX3JlbW92ZQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoYW5nZSBpbiBicmFuY2ggQSAocmVtb3ZhbCknIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAkdG9fcmVtb3ZlJworCitmb3IgcCBpbiBNPyBaL00/CitkbworICAgIGVjaG8gVGhpcyBpcyBtb2RpZmllZCAkcCBpbiB0aGUgYnJhbmNoIEEuID4kcAorICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjaGFuZ2UgaW4gYnJhbmNoIEEgKG1vZGlmaWNhdGlvbiknIFwKKyAgICAgICAgImdpdCB1cGRhdGUtaW5kZXggJHAiCitkb25lCisKK2ZvciBwIGluIEFOIEFBIFovQU4gWi9BQQorZG8KKyAgICBlY2hvIFRoaXMgaXMgYWRkZWQgJHAgaW4gdGhlIGJyYW5jaCBBLiA+JHAKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hhbmdlIGluIGJyYW5jaCBBIChhZGRpdGlvbiknIFwKKwkiZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAkcCIKK2RvbmUKKworZWNobyBUaGlzIGlzIFNTIGZyb20gdGhlIG1vZGlmaWVkIHRyZWUuID5TUworZWNobyBUaGlzIGlzIExMIGZyb20gdGhlIG1vZGlmaWVkIHRyZWUuID5MTAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoYW5nZSBpbiBicmFuY2ggQSAoYWRkaXRpb24pJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgTEwgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCBTUycKK212IFRUIFRULQorc2VkIC1lICcvQnJhbmNoIEEvcy93b3JkL1dPUkQvZycgPFRULSA+VFQKK3JtIC1mIFRULQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoYW5nZSBpbiBicmFuY2ggQSAoZWRpdCknIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCBUVCcKKworbWtkaXIgREYKK2VjaG8gQnJhbmNoIEEgbWFrZXMgYSBmaWxlIGF0IERGL0RGLCBjcmVhdGluZyBhIGRpcmVjdG9yeSBERi4gPkRGL0RGCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hhbmdlIGluIGJyYW5jaCBBIChjaGFuZ2UgZmlsZSB0byBkaXJlY3RvcnkpJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgREYvREYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZWNvcmRpbmcgYnJhbmNoIEEgdHJlZScgXAorICAgICd0cmVlX0E9JChnaXQgd3JpdGUtdHJlZSknCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnJhbmNoIEIKKyMgU3RhcnQgZnJvbSBPCisKK3JtIC1yZiBbTkRNQVNMVF1bTkRNQVNMVF0gWiBERgorbWtkaXIgWgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlYWRpbmcgb3JpZ2luYWwgdHJlZSBhbmQgY2hlY2tpbmcgb3V0JyBcCisgICAgJ2dpdCByZWFkLXRyZWUgJHRyZWVfTyAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLWEnCisKK3RvX3JlbW92ZT0kKGVjaG8gP0QgWi8/RCkKK3JtIC1mICR0b19yZW1vdmUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGFuZ2UgaW4gYnJhbmNoIEIgKHJlbW92YWwpJyBcCisgICAgImdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgJHRvX3JlbW92ZSIKKworZm9yIHAgaW4gP00gWi8/TQorZG8KKyAgICBlY2hvIFRoaXMgaXMgbW9kaWZpZWQgJHAgaW4gdGhlIGJyYW5jaCBCLiA+JHAKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hhbmdlIGluIGJyYW5jaCBCIChtb2RpZmljYXRpb24pJyBcCisJImdpdCB1cGRhdGUtaW5kZXggJHAiCitkb25lCisKK2ZvciBwIGluIE5BIEFBIFovTkEgWi9BQQorZG8KKyAgICBlY2hvIFRoaXMgaXMgYWRkZWQgJHAgaW4gdGhlIGJyYW5jaCBCLiA+JHAKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hhbmdlIGluIGJyYW5jaCBCIChhZGRpdGlvbiknIFwKKwkiZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAkcCIKK2RvbmUKK2VjaG8gVGhpcyBpcyBTUyBmcm9tIHRoZSBtb2RpZmllZCB0cmVlLiA+U1MKK2VjaG8gVGhpcyBpcyBMTCBmcm9tIHRoZSBtb2RpZmllZCB0cmVlLiA+TEwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGFuZ2UgaW4gYnJhbmNoIEIgKGFkZGl0aW9uIGFuZCBtb2RpZmljYXRpb24pJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgTEwgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCBTUycKK212IFRUIFRULQorc2VkIC1lICcvQnJhbmNoIEIvcy93b3JkL1dPUkQvZycgPFRULSA+VFQKK3JtIC1mIFRULQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoYW5nZSBpbiBicmFuY2ggQiAobW9kaWZpY2F0aW9uKScgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IFRUJworCitlY2hvIEJyYW5jaCBCIG1ha2VzIGEgZmlsZSBhdCBERi4gPkRGCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hhbmdlIGluIGJyYW5jaCBCIChhZGRpdGlvbiBvZiBhIGZpbGUgdG8gY29uZmxpY3Qgd2l0aCBkaXJlY3RvcnkpJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgREYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZWNvcmRpbmcgYnJhbmNoIEIgdHJlZScgXAorICAgICd0cmVlX0I9JChnaXQgd3JpdGUtdHJlZSknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdrZWVwIGNvbnRlbnRzIG9mIDMgdHJlZXMgZm9yIGVhc3kgYWNjZXNzJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgZ2l0IHJlYWQtdHJlZSAkdHJlZV9PICYmCisgICAgIG1rZGlyIC5vcmlnLU8gJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PS5vcmlnLU8vIC1mIC1xIC1hICYmCisgICAgIHJtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgZ2l0IHJlYWQtdHJlZSAkdHJlZV9BICYmCisgICAgIG1rZGlyIC5vcmlnLUEgJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PS5vcmlnLUEvIC1mIC1xIC1hICYmCisgICAgIHJtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgZ2l0IHJlYWQtdHJlZSAkdHJlZV9CICYmCisgICAgIG1rZGlyIC5vcmlnLUIgJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PS5vcmlnLUIvIC1mIC1xIC1hJwpkaWZmIC0tZ2l0IGEvdC9saWItcmVhZC10cmVlLnNoIGIvdC9saWItcmVhZC10cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzJjNmYKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1yZWFkLXRyZWUuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisjCisjIEhlbHBlciBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgcmVhZC10cmVlIHdvdWxkIHN1Y2NlZWQvZmFpbCBhcyBleHBlY3RlZCB3aXRoCisjIGFuZCB3aXRob3V0IHRoZSBkcnktcnVuIG9wdGlvbi4gVGhleSBhbHNvIHRlc3QgdGhhdCB0aGUgZHJ5LXJ1biBkb2VzIG5vdAorIyB3cml0ZSB0aGUgaW5kZXggYW5kIHRoYXQgdG9nZXRoZXIgd2l0aCAtdSBpdCBkb2Vzbid0IHRvdWNoIHRoZSB3b3JrIHRyZWUuCisjCityZWFkX3RyZWVfbXVzdF9zdWNjZWVkICgpIHsKKyAgICBnaXQgbHMtZmlsZXMgLXMgPnByZS1kcnktcnVuICYmCisgICAgZ2l0IHJlYWQtdHJlZSAtbiAiJEAiICYmCisgICAgZ2l0IGxzLWZpbGVzIC1zID5wb3N0LWRyeS1ydW4gJiYKKyAgICB0ZXN0X2NtcCBwcmUtZHJ5LXJ1biBwb3N0LWRyeS1ydW4gJiYKKyAgICBnaXQgcmVhZC10cmVlICIkQCIKK30KKworcmVhZF90cmVlX211c3RfZmFpbCAoKSB7CisgICAgZ2l0IGxzLWZpbGVzIC1zID5wcmUtZHJ5LXJ1biAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgLW4gIiRAIiAmJgorICAgIGdpdCBscy1maWxlcyAtcyA+cG9zdC1kcnktcnVuICYmCisgICAgdGVzdF9jbXAgcHJlLWRyeS1ydW4gcG9zdC1kcnktcnVuICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAiJEAiCit9CisKK3JlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAoKSB7CisgICAgZ2l0IGxzLWZpbGVzIC1zID5wcmUtZHJ5LXJ1biAmJgorICAgIGdpdCBkaWZmLWZpbGVzIC1wID5wcmUtZHJ5LXJ1bi13dCAmJgorICAgIGdpdCByZWFkLXRyZWUgLW4gIiRAIiAmJgorICAgIGdpdCBscy1maWxlcyAtcyA+cG9zdC1kcnktcnVuICYmCisgICAgZ2l0IGRpZmYtZmlsZXMgLXAgPnBvc3QtZHJ5LXJ1bi13dCAmJgorICAgIHRlc3RfY21wIHByZS1kcnktcnVuIHBvc3QtZHJ5LXJ1biAmJgorICAgIHRlc3RfY21wIHByZS1kcnktcnVuLXd0IHBvc3QtZHJ5LXJ1bi13dCAmJgorICAgIGdpdCByZWFkLXRyZWUgIiRAIgorfQorCityZWFkX3RyZWVfdV9tdXN0X2ZhaWwgKCkgeworICAgIGdpdCBscy1maWxlcyAtcyA+cHJlLWRyeS1ydW4gJiYKKyAgICBnaXQgZGlmZi1maWxlcyAtcCA+cHJlLWRyeS1ydW4td3QgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlIC1uICIkQCIgJiYKKyAgICBnaXQgbHMtZmlsZXMgLXMgPnBvc3QtZHJ5LXJ1biAmJgorICAgIGdpdCBkaWZmLWZpbGVzIC1wID5wb3N0LWRyeS1ydW4td3QgJiYKKyAgICB0ZXN0X2NtcCBwcmUtZHJ5LXJ1biBwb3N0LWRyeS1ydW4gJiYKKyAgICB0ZXN0X2NtcCBwcmUtZHJ5LXJ1bi13dCBwb3N0LWRyeS1ydW4td3QgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlICIkQCIKK30KZGlmZiAtLWdpdCBhL3QvbGliLXJlYmFzZS5zaCBiL3QvbGliLXJlYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NmNzk3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItcmViYXNlLnNoCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9zaAorCisjIEFmdGVyIHNldHRpbmcgdGhlIGZha2UgZWRpdG9yIHdpdGggdGhpcyBmdW5jdGlvbiwgeW91IGNhbgorIworIyAtIG92ZXJyaWRlIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoICRGQUtFX0NPTU1JVF9NRVNTQUdFCisjIC0gYW1lbmQgdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGggJEZBS0VfQ09NTUlUX0FNRU5ECisjIC0gY2hlY2sgdGhhdCBub24tY29tbWl0IG1lc3NhZ2VzIGhhdmUgYSBjZXJ0YWluIGxpbmUgY291bnQgd2l0aCAkRVhQRUNUX0NPVU5UCisjIC0gY2hlY2sgdGhlIGNvbW1pdCBjb3VudCBpbiB0aGUgY29tbWl0IG1lc3NhZ2UgaGVhZGVyIHdpdGggJEVYUEVDVF9IRUFERVJfQ09VTlQKKyMgLSByZXdyaXRlIGEgcmViYXNlIC1pIHNjcmlwdCBhcyBkaXJlY3RlZCBieSAkRkFLRV9MSU5FUy4KKyMgICAkRkFLRV9MSU5FUyBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIHdvcmRzIHNlcGFyYXRlZCBieSBzcGFjZXMuCisjICAgVGhlIGZvbGxvd2luZyB3b3JkIGNvbWJpbmF0aW9ucyBhcmUgcG9zc2libGU6CisjCisjICAgIjxsaW5lbm8+IiAtLSBhZGQgYSAicGljayIgbGluZSB3aXRoIHRoZSBTSEExIHRha2VuIGZyb20gdGhlCisjICAgICAgIHNwZWNpZmllZCBsaW5lLgorIworIyAgICI8Y21kPiA8bGluZW5vPiIgLS0gYWRkIGEgbGluZSB3aXRoIHRoZSBzcGVjaWZpZWQgY29tbWFuZAorIyAgICAgICAoInNxdWFzaCIsICJmaXh1cCIsICJlZGl0Iiwgb3IgInJld29yZCIpIGFuZCB0aGUgU0hBMSB0YWtlbgorIyAgICAgICBmcm9tIHRoZSBzcGVjaWZpZWQgbGluZS4KKyMKKyMgICAiIyIgLS0gQWRkIGEgY29tbWVudCBsaW5lLgorIworIyAgICI+IiAtLSBBZGQgYSBibGFuayBsaW5lLgorCitzZXRfZmFrZV9lZGl0b3IgKCkgeworCWVjaG8gIiMhJFNIRUxMX1BBVEgiID5mYWtlLWVkaXRvci5zaAorCWNhdCA+PiBmYWtlLWVkaXRvci5zaCA8PFxFT0YKK2Nhc2UgIiQxIiBpbgorKi9DT01NSVRfRURJVE1TRykKKwl0ZXN0IC16ICIkRVhQRUNUX0hFQURFUl9DT1VOVCIgfHwKKwkJdGVzdCAiJEVYUEVDVF9IRUFERVJfQ09VTlQiID0gIiQoc2VkIC1uICcxcy9eIyBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgXCguKlwpIGNvbW1pdHNcLi9cMS9wJyA8ICIkMSIpIiB8fAorCQlleGl0CisJdGVzdCAteiAiJEZBS0VfQ09NTUlUX01FU1NBR0UiIHx8IGVjaG8gIiRGQUtFX0NPTU1JVF9NRVNTQUdFIiA+ICIkMSIKKwl0ZXN0IC16ICIkRkFLRV9DT01NSVRfQU1FTkQiIHx8IGVjaG8gIiRGQUtFX0NPTU1JVF9BTUVORCIgPj4gIiQxIgorCWV4aXQKKwk7OworZXNhYwordGVzdCAteiAiJEVYUEVDVF9DT1VOVCIgfHwKKwl0ZXN0ICIkRVhQRUNUX0NPVU5UIiA9ICQoc2VkIC1lICcvXiMvZCcgLWUgJy9eJC9kJyA8ICIkMSIgfCB3YyAtbCkgfHwKKwlleGl0Cit0ZXN0IC16ICIkRkFLRV9MSU5FUyIgJiYgZXhpdAorZ3JlcCAtdiAnXiMnIDwgIiQxIiA+ICIkMSIudG1wCitybSAtZiAiJDEiCitlY2hvICdyZWJhc2UgLWkgc2NyaXB0IGJlZm9yZSBlZGl0aW5nOicKK2NhdCAiJDEiLnRtcAorYWN0aW9uPXBpY2sKK2ZvciBsaW5lIGluICRGQUtFX0xJTkVTOyBkbworCWNhc2UgJGxpbmUgaW4KKwlzcXVhc2h8Zml4dXB8ZWRpdHxyZXdvcmQpCisJCWFjdGlvbj0iJGxpbmUiOzsKKwlleGVjKikKKwkJZWNobyAiJGxpbmUiIHwgc2VkICdzL18vIC9nJyA+PiAiJDEiOzsKKwkiIyIpCisJCWVjaG8gJyMgY29tbWVudCcgPj4gIiQxIjs7CisJIj4iKQorCQllY2hvID4+ICIkMSI7OworCSopCisJCXNlZCAtbiAiJHtsaW5lfXMvXnBpY2svJGFjdGlvbi9wIiA8ICIkMSIudG1wID4+ICIkMSIKKwkJYWN0aW9uPXBpY2s7OworCWVzYWMKK2RvbmUKK2VjaG8gJ3JlYmFzZSAtaSBzY3JpcHQgYWZ0ZXIgZWRpdGluZzonCitjYXQgIiQxIgorRU9GCisKKwl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvci5zaCIKKwljaG1vZCBhK3ggZmFrZS1lZGl0b3Iuc2gKK30KZGlmZiAtLWdpdCBhL3QvbGliLXQ2MDAwLnNoIGIvdC9saWItdDYwMDAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyNWRkOAotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLXQ2MDAwLnNoCkBAIC0wLDAgKzEsMTI3IEBACis6IGluY2x1ZGVkIGZyb20gNjAwMiBhbmQgb3RoZXJzCisKK1sgLWQgLmdpdC9yZWZzL3RhZ3MgXSB8fCBta2RpciAtcCAuZ2l0L3JlZnMvdGFncworCis6PiBzZWQuc2NyaXB0CisKKyMgQW5zd2VyIHRoZSBzaGExIGhhcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4gVGhlIHRhZyBtdXN0IGV4aXN0IGluIC5naXQgb3IgLmdpdC9yZWZzL3RhZ3MKK3RhZygpCit7CisJX3RhZz0kMQorCVsgLWYgLmdpdC9yZWZzL3RhZ3MvJF90YWcgXSB8fCBlcnJvciAidGFnOiBcIiRfdGFnXCIgZG9lcyBub3QgZXhpc3QiCisJY2F0IC5naXQvcmVmcy90YWdzLyRfdGFnCit9CisKKyMgR2VuZXJhdGUgYSBjb21taXQgdXNpbmcgdGhlIHRleHQgc3BlY2lmaWVkIHRvIG1ha2UgaXQgdW5pcXVlIGFuZCB0aGUgdHJlZQorIyBuYW1lZCBieSB0aGUgdGFnIHNwZWNpZmllZC4KK3VuaXF1ZV9jb21taXQoKQoreworCV90ZXh0PSQxCisgICAgICAgIF90cmVlPSQyCisJc2hpZnQgMgorCWVjaG8gJF90ZXh0IHwgZ2l0IGNvbW1pdC10cmVlICQodGFnICRfdHJlZSkgIiRAIgorfQorCisjIFNhdmUgdGhlIG91dHB1dCBvZiBhIGNvbW1hbmQgaW50byB0aGUgdGFnIHNwZWNpZmllZC4gUHJlcGVuZAorIyBhIHN1YnN0aXR1dGlvbiBzY3JpcHQgZm9yIHRoZSB0YWcgb250byB0aGUgZnJvbnQgb2Ygc2VkLnNjcmlwdAorc2F2ZV90YWcoKQoreworCV90YWc9JDEKKwlbIC1uICIkX3RhZyIgXSB8fCBlcnJvciAidXNhZ2U6IHNhdmVfdGFnIHRhZyBjb21taXQtYXJncyAuLi4iCisJc2hpZnQgMQorCSIkQCIgPi5naXQvcmVmcy90YWdzLyRfdGFnCisKKyAgICAgICAgZWNobyAicy8kKHRhZyAkX3RhZykvJF90YWcvZyIgPiBzZWQuc2NyaXB0LnRtcAorCWNhdCBzZWQuc2NyaXB0ID4+IHNlZC5zY3JpcHQudG1wCisJcm0gc2VkLnNjcmlwdAorCW12IHNlZC5zY3JpcHQudG1wIHNlZC5zY3JpcHQKK30KKworIyBSZXBsYWNlIHVuaGVscGZ1bCBzaGExIGhhc2hzZXMgd2l0aCB0aGVpciBzeW1ib2xpYyBlcXVpdmFsZW50cworZW50YWcoKQoreworCXNlZCAtZiBzZWQuc2NyaXB0Cit9CisKKyMgRXhlY3V0ZSBhIGNvbW1hbmQgYWZ0ZXIgZmlyc3Qgc2F2aW5nLCB0aGVuIHNldHRpbmcgdGhlIEdJVF9BVVRIT1JfRU1BSUwKKyMgdGFnIHRvIGEgc3BlY2lmaWVkIHZhbHVlLiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiByZXR1cm4uCithc19hdXRob3IoKQoreworCV9hdXRob3I9JDEKKwlzaGlmdCAxCisgICAgICAgIF9zYXZlPSRHSVRfQVVUSE9SX0VNQUlMCisKKwlHSVRfQVVUSE9SX0VNQUlMPSIkX2F1dGhvciIKKwlleHBvcnQgR0lUX0FVVEhPUl9FTUFJTAorCSIkQCIKKwlpZiB0ZXN0IC16ICIkX3NhdmUiCisJdGhlbgorCQl1bnNldCBHSVRfQVVUSE9SX0VNQUlMCisJZWxzZQorCQlHSVRfQVVUSE9SX0VNQUlMPSIkX3NhdmUiCisJCWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCisJZmkKK30KKworY29tbWl0X2RhdGUoKQoreworICAgICAgICBfY29tbWl0PSQxCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAkX2NvbW1pdCB8IHNlZCAtbiAicy9eY29tbWl0dGVyIC4qPiBcKFswLTldKlwpIC4qL1wxL3AiCit9CisKK29uX2NvbW1pdHRlcl9kYXRlKCkKK3sKKyAgICBfZGF0ZT0kMQorICAgIHNoaWZ0IDEKKyAgICBHSVRfQ09NTUlUVEVSX0RBVEU9IiRfZGF0ZSIKKyAgICBleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFCisgICAgIiRAIgorICAgIHVuc2V0IEdJVF9DT01NSVRURVJfREFURQorfQorCisjIEV4ZWN1dGUgYSBjb21tYW5kIGFuZCBzdXBwcmVzcyBhbnkgZXJyb3Igb3V0cHV0LgoraGlkZV9lcnJvcigpCit7CisJIiRAIiAyPi9kZXYvbnVsbAorfQorCitjaGVja19vdXRwdXQoKQoreworCV9uYW1lPSQxCisJc2hpZnQgMQorCWlmIGV2YWwgIiQqIiB8IGVudGFnID4gJF9uYW1lLmFjdHVhbAorCXRoZW4KKwkJdGVzdF9jbXAgJF9uYW1lLmV4cGVjdGVkICRfbmFtZS5hY3R1YWwKKwllbHNlCisJCXJldHVybiAxOworCWZpCit9CisKKyMgVHVybiBhIHJlYXNvbmFibGUgdGVzdCBkZXNjcmlwdGlvbiBpbnRvIGEgcmVhc29uYWJsZSB0ZXN0IG5hbWUuCisjIEFsbCBhbHBoYW51bXMgdHJhbnNsYXRlZCBpbnRvIC0ncyB3aGljaCBhcmUgdGhlbiBjb21wcmVzc2VkIGFuZCBzdHJpcHBlZAorIyBmcm9tIGZyb250IGFuZCBiYWNrLgorbmFtZV9mcm9tX2Rlc2NyaXB0aW9uKCkKK3sKKwlwZXJsIC1wZSAnCisJCXMvW15BLVphLXowLTkuXS8tL2c7CisJCXMvLSsvLS9nOworCQlzLy0kLy87CisJCXMvXi0vLzsKKwkJeS9BLVovYS16LzsKKwknCit9CisKKworIyBFeGVjdXRlIHRoZSB0ZXN0IGRlc2NyaWJlZCBieSB0aGUgZmlyc3QgYXJndW1lbnQsIGJ5IGV2YWwnaW5nCisjIGNvbW1hbmQgbGluZSBzcGVjaWZpZWQgaW4gdGhlIDJuZCBhcmd1bWVudC4gQ2hlY2sgdGhlIHN0YXR1cyBjb2RlCisjIGlzIHplcm8gYW5kIHRoYXQgdGhlIG91dHB1dCBtYXRjaGVzIHRoZSBzdHJlYW0gcmVhZCBmcm9tCisjIHN0ZGluLgordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MoKQoreworCV9kZXNjcmlwdGlvbj0kMQorICAgICAgICBfdGVzdD0kMgorICAgICAgICBbICQjIC1lcSAyIF0gfHwgZXJyb3IgInVzYWdlOiB0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyBkZXNjcmlwdGlvbiB0ZXN0IDw8RU9GIC4uLiBFT0YiCisgICAgICAgIF9uYW1lPSQoZWNobyAkX2Rlc2NyaXB0aW9uIHwgbmFtZV9mcm9tX2Rlc2NyaXB0aW9uKQorCWNhdCA+ICRfbmFtZS5leHBlY3RlZAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRfZGVzY3JpcHRpb24iICJjaGVja19vdXRwdXQgJF9uYW1lIFwiJF90ZXN0XCIiCit9CmRpZmYgLS1naXQgYS90L2xpYi10ZXJtaW5hbC5zaCBiL3QvbGliLXRlcm1pbmFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDkxMWQKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi10ZXJtaW5hbC5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXQgdXAgdGVybWluYWwgZm9yIHRlc3RzJyAnCisJIyBSZWFkaW5nIGZyb20gdGhlIHB0eSBtYXN0ZXIgc2VlbXMgdG8gZ2V0IHN0dWNrIF9zb21ldGltZXNfCisJIyBvbiBNYWMgT1MgWCAxMC41LjAsIHVzaW5nIFBlcmwgNS4xMC4wIG9yIDUuOC45LgorCSMKKwkjIFJlcHJvZHVjdGlvbiByZWNpcGU6IHJ1bgorCSMKKwkjCWk9MAorCSMJd2hpbGUgLi90ZXN0LXRlcm1pbmFsLnBlcmwgZWNobyBoaSAkaQorCSMJZG8KKwkjCQk6ICQoKGkgPSAkaSArIDEpKQorCSMJZG9uZQorCSMKKwkjIEFmdGVyIDIwMDAgaXRlcmF0aW9ucyBvciBzbyBpdCBoYW5ncy4KKwkjIGh0dHBzOi8vcnQuY3Bhbi5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD02NTY5MgorCSMKKwlpZiB0ZXN0ICIkKHVuYW1lIC1zKSIgPSBEYXJ3aW4KKwl0aGVuCisJCToKKwllbGlmCisJCSIkUEVSTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LXRlcm1pbmFsLnBlcmwgXAorCQkJc2ggLWMgInRlc3QgLXQgMSAmJiB0ZXN0IC10IDIiCisJdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgVFRZICYmCisJCXRlc3RfdGVybWluYWwgKCkgeworCQkJaWYgISB0ZXN0X2RlY2xhcmVkX3ByZXJlcSBUVFkKKwkJCXRoZW4KKwkJCQllY2hvID4mNCAidGVzdF90ZXJtaW5hbDogbmVlZCB0byBkZWNsYXJlIFRUWSBwcmVyZXF1aXNpdGUiCisJCQkJcmV0dXJuIDEyNworCQkJZmkKKwkJCSIkUEVSTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LXRlcm1pbmFsLnBlcmwgIiRAIgorCQl9CisJZmkKKycKZGlmZiAtLWdpdCBhL3QvcGVyZi8uZ2l0aWdub3JlIGIvdC9wZXJmLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgyZWI4ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL2J1aWxkLworL3Rlc3QtcmVzdWx0cy8KKy90cmFzaCBkaXJlY3RvcnkqLwpkaWZmIC0tZ2l0IGEvdC9wZXJmL01ha2VmaWxlIGIvdC9wZXJmL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNDcxNTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvTWFrZWZpbGUKQEAgLTAsMCArMSwxNSBAQAorLWluY2x1ZGUgLi4vLi4vY29uZmlnLm1haworZXhwb3J0IEdJVF9URVNUX09QVElPTlMKKworYWxsOiBwZXJmCisKK3BlcmY6IHByZS1jbGVhbgorCS4vcnVuCisKK3ByZS1jbGVhbjoKKwlybSAtcmYgdGVzdC1yZXN1bHRzCisKK2NsZWFuOgorCXJtIC1yZiBidWlsZCAidHJhc2ggZGlyZWN0b3J5Ii4qIHRlc3QtcmVzdWx0cworCisuUEhPTlk6IGFsbCBwZXJmIHByZS1jbGVhbiBjbGVhbgpkaWZmIC0tZ2l0IGEvdC9wZXJmL1JFQURNRSBiL3QvcGVyZi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkYmFkNAotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9SRUFETUUKQEAgLTAsMCArMSwxNDYgQEAKK0dpdCBwZXJmb3JtYW5jZSB0ZXN0cworPT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZGlyZWN0b3J5IGhvbGRzIHBlcmZvcm1hbmNlIHRlc3Rpbmcgc2NyaXB0cyBmb3IgZ2l0IHRvb2xzLiAgVGhlCitmaXJzdCBwYXJ0IG9mIHRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB2YXJpb3VzIHdheXMgaW4gd2hpY2ggeW91CitjYW4gcnVuIHRoZW0uCisKK1doZW4gZml4aW5nIHRoZSB0b29scyBvciBhZGRpbmcgZW5oYW5jZW1lbnRzLCB5b3UgYXJlIHN0cm9uZ2x5CitlbmNvdXJhZ2VkIHRvIGFkZCB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB0byBjb3ZlciB3aGF0IHlvdSBhcmUKK3RyeWluZyB0byBmaXggb3IgZW5oYW5jZS4gIFRoZSBsYXRlciBwYXJ0IG9mIHRoaXMgc2hvcnQgZG9jdW1lbnQKK2Rlc2NyaWJlcyBob3cgeW91ciB0ZXN0IHNjcmlwdHMgc2hvdWxkIGJlIG9yZ2FuaXplZC4KKworCitSdW5uaW5nIFRlc3RzCistLS0tLS0tLS0tLS0tCisKK1RoZSBlYXNpZXN0IHdheSB0byBydW4gdGVzdHMgaXMgdG8gc2F5ICJtYWtlIi4gIFRoaXMgcnVucyBhbGwKK3RoZSB0ZXN0cyBvbiB0aGUgY3VycmVudCBnaXQgcmVwb3NpdG9yeS4KKworICAgID09PSBSdW5uaW5nIDIgdGVzdHMgaW4gdGhpcyB0cmVlID09PQorICAgIFsuLi5dCisgICAgVGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHRyZWUKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAwMDAxLjE6IHJldi1saXN0IC0tYWxsICAgICAgICAgICAgICAgICAgIDAuNTQoMC41MSswLjAyKQorICAgIDAwMDEuMjogcmV2LWxpc3QgLS1hbGwgLS1vYmplY3RzICAgICAgICAgNi4xNCg1Ljk5KzAuMTEpCisgICAgNzgxMC4xOiBncmVwIHdvcmt0cmVlLCBjaGVhcCByZWdleCAgICAgICAwLjE2KDAuMTYrMC4zNSkKKyAgICA3ODEwLjI6IGdyZXAgd29ya3RyZWUsIGV4cGVuc2l2ZSByZWdleCAgIDcuOTAoMjkuNzUrMC4zNykKKyAgICA3ODEwLjM6IGdyZXAgLS1jYWNoZWQsIGNoZWFwIHJlZ2V4ICAgICAgIDMuMDcoMy4wMiswLjI1KQorICAgIDc4MTAuNDogZ3JlcCAtLWNhY2hlZCwgZXhwZW5zaXZlIHJlZ2V4ICAgOS4zOSgzMC41NyswLjI0KQorCitZb3UgY2FuIGNvbXBhcmUgbXVsdGlwbGUgcmVwb3NpdG9yaWVzIGFuZCBldmVuIGdpdCByZXZpc2lvbnMgd2l0aCB0aGUKKydydW4nIHNjcmlwdDoKKworICAgICQgLi9ydW4gLiBvcmlnaW4vbmV4dCAvcGF0aC90by9naXQtdHJlZSBwMDAwMS1yZXYtbGlzdC5zaAorCit3aGVyZSAuIHN0YW5kcyBmb3IgdGhlIGN1cnJlbnQgZ2l0IHRyZWUuICBUaGUgZnVsbCBpbnZvY2F0aW9uIGlzCisKKyAgICAuL3J1biBbPHJldmlzaW9ufGRpcmVjdG9yeT4uLi5dIFstLV0gWzx0ZXN0LXNjcmlwdD4uLi5dCisKK0EgJy4nIGFyZ3VtZW50IGlzIGltcGxpZWQgaWYgeW91IGRvIG5vdCBwYXNzIGFueSBvdGhlcgorcmV2aXNpb25zL2RpcmVjdG9yaWVzLgorCitZb3UgY2FuIGFsc28gbWFudWFsbHkgdGVzdCB0aGlzIG9yIGFub3RoZXIgZ2l0IGJ1aWxkIHRyZWUsIGFuZCB0aGVuCitjYWxsIHRoZSBhZ2dyZWdhdGlvbiBzY3JpcHQgdG8gc3VtbWFyaXplIHRoZSByZXN1bHRzOgorCisgICAgJCAuL3AwMDAxLXJldi1saXN0LnNoCisgICAgWy4uLl0KKyAgICAkIEdJVF9CVUlMRF9ESVI9L3BhdGgvdG8vb3RoZXIvZ2l0IC4vcDAwMDEtcmV2LWxpc3Quc2gKKyAgICBbLi4uXQorICAgICQgLi9hZ2dyZWdhdGUucGVybCAuIC9wYXRoL3RvL290aGVyL2dpdCAuL3AwMDAxLXJldi1saXN0LnNoCisKK2FnZ3JlZ2F0ZS5wZXJsIGhhcyB0aGUgc2FtZSBpbnZvY2F0aW9uIGFzICdydW4nLCBpdCBqdXN0IGRvZXMgbm90IHJ1bgorYW55dGhpbmcgYmVmb3JlaGFuZC4KKworWW91IGNhbiBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgKGFsc28gaW4geW91ciBjb25maWcubWFrKToKKworICAgIEdJVF9QRVJGX1JFUEVBVF9DT1VOVAorCU51bWJlciBvZiB0aW1lcyBhIHRlc3Qgc2hvdWxkIGJlIHJlcGVhdGVkIGZvciBiZXN0LW9mLU4KKwltZWFzdXJlbWVudHMuICBEZWZhdWx0cyB0byA1LgorCisgICAgR0lUX1BFUkZfTUFLRV9PUFRTCisJT3B0aW9ucyB0byB1c2Ugd2hlbiBhdXRvbWF0aWNhbGx5IGJ1aWxkaW5nIGEgZ2l0IHRyZWUgZm9yCisJcGVyZm9ybWFuY2UgdGVzdGluZy4gIEUuZy4sIC1qNiB3b3VsZCBiZSB1c2VmdWwuCisKKyAgICBHSVRfUEVSRl9SRVBPCisgICAgR0lUX1BFUkZfTEFSR0VfUkVQTworCVJlcG9zaXRvcmllcyB0byBjb3B5IGZvciB0aGUgcGVyZm9ybWFuY2UgdGVzdHMuICBUaGUgbm9ybWFsCisJcmVwbyBzaG91bGQgYmUgYXQgbGVhc3QgZ2l0LmdpdCBzaXplLiAgVGhlIGxhcmdlIHJlcG8gc2hvdWxkCisJcHJvYmFibHkgYmUgYWJvdXQgbGludXgtMi42LmdpdCBzaXplIGZvciBvcHRpbWFsIHJlc3VsdHMuCisJQm90aCBkZWZhdWx0IHRvIHRoZSBnaXQuZ2l0IHlvdSBhcmUgcnVubmluZyBmcm9tLgorCitZb3UgY2FuIGFsc28gcGFzcyB0aGUgb3B0aW9ucyB0YWtlbiBieSBvcmRpbmFyeSBnaXQgdGVzdHM7IHRoZSBtb3N0Cit1c2VmdWwgb25lIGlzOgorCistLXJvb3Q9PGRpcmVjdG9yeT46OgorCUNyZWF0ZSAidHJhc2giIGRpcmVjdG9yaWVzIHVzZWQgdG8gc3RvcmUgYWxsIHRlbXBvcmFyeSBkYXRhIGR1cmluZworCXRlc3RpbmcgdW5kZXIgPGRpcmVjdG9yeT4sIGluc3RlYWQgb2YgdGhlIHQvIGRpcmVjdG9yeS4KKwlVc2luZyB0aGlzIG9wdGlvbiB3aXRoIGEgUkFNLWJhc2VkIGZpbGVzeXN0ZW0gKHN1Y2ggYXMgdG1wZnMpCisJY2FuIG1hc3NpdmVseSBzcGVlZCB1cCB0aGUgdGVzdCBzdWl0ZS4KKworCitOYW1pbmcgVGVzdHMKKy0tLS0tLS0tLS0tLQorCitUaGUgcGVyZm9ybWFuY2UgdGVzdCBmaWxlcyBhcmUgbmFtZWQgYXM6CisKKwlwTk5OTi1jb21tYW5kbmFtZS1kZXRhaWxzLnNoCisKK3doZXJlIE4gaXMgYSBkZWNpbWFsIGRpZ2l0LiAgVGhlIHNhbWUgY29udmVudGlvbnMgZm9yIGNob29zaW5nIE5OTk4gYXMKK2ZvciBub3JtYWwgdGVzdHMgYXBwbHkuCisKKworV3JpdGluZyBUZXN0cworLS0tLS0tLS0tLS0tLQorCitUaGUgcGVyZiBzY3JpcHQgc3RhcnRzIG11Y2ggbGlrZSBhIG5vcm1hbCB0ZXN0IHNjcmlwdCwgZXhjZXB0IGl0Citzb3VyY2VzIHBlcmYtbGliLnNoOgorCisJIyEvYmluL3NoCisJIworCSMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisJIworCisJdGVzdF9kZXNjcmlwdGlvbj0neHh4IHBlcmZvcm1hbmNlIHRlc3QnCisJLiAuL3BlcmYtbGliLnNoCisKK0FmdGVyIHRoYXQgeW91IHdpbGwgd2FudCB0byB1c2Ugc29tZSBvZiB0aGUgZm9sbG93aW5nOgorCisJdGVzdF9wZXJmX2RlZmF1bHRfcmVwbyAgIyBzZXRzIHVwIGEgIm5vcm1hbCIgcmVwb3NpdG9yeQorCXRlc3RfcGVyZl9sYXJnZV9yZXBvICAgICMgc2V0cyB1cCBhICJsYXJnZSIgcmVwb3NpdG9yeQorCisJdGVzdF9wZXJmX2RlZmF1bHRfcmVwbyBzdWIgICMgZGl0dG8sIGluIGEgc3ViZGlyICJzdWIiCisKKyAgICAgICAgdGVzdF9jaGVja291dF93b3JrdHJlZSAgIyBpZiB5b3UgbmVlZCB0aGUgd29ya3RyZWUgdG9vCisKK0F0IGxlYXN0IG9uZSBvZiB0aGUgZmlyc3QgdHdvIGlzIHJlcXVpcmVkIQorCitZb3UgY2FuIHVzZSB0ZXN0X2V4cGVjdF9zdWNjZXNzIGFzIHVzdWFsLiAgRm9yIGFjdHVhbCBwZXJmb3JtYW5jZQordGVzdHMsIHVzZQorCisJdGVzdF9wZXJmICdkZXNjcmlwdGl2ZSBzdHJpbmcnICcKKwkJY29tbWFuZDEgJiYKKwkJY29tbWFuZDIKKwknCisKK3Rlc3RfcGVyZiBzcGF3bnMgYSBzdWJzaGVsbCwgZm9yIGxhY2sgb2YgYmV0dGVyIG9wdGlvbnMuICBUaGlzIG1lYW5zCit0aGF0CisKKyogeW91IF9tdXN0XyBleHBvcnQgYWxsIHZhcmlhYmxlcyB0aGF0IHlvdSBuZWVkIGluIHRoZSBzdWJzaGVsbAorCisqIHlvdSBfbXVzdF8gZmxhZyBhbGwgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gcGVyc2lzdCBmcm9tIHRoZQorICBzdWJzaGVsbCB3aXRoICd0ZXN0X2V4cG9ydCc6CisKKwl0ZXN0X3BlcmYgJ2Rlc2NyaXB0aXZlIHN0cmluZycgJworCQlmb289JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCXRlc3RfZXhwb3J0IGZvbworCScKKworICBUaGUgc28tZXhwb3J0ZWQgdmFyaWFibGVzIGFyZSBhdXRvbWF0aWNhbGx5IG1hcmtlZCBmb3IgZXhwb3J0IGluIHRoZQorICBzaGVsbCBleGVjdXRpbmcgdGhlIHBlcmYgdGVzdC4gIEZvciB5b3VyIGNvbnZlbmllbmNlLCB0ZXN0X2V4cG9ydCBpcworICB0aGUgc2FtZSBhcyBleHBvcnQgaW4gdGhlIG1haW4gc2hlbGwuCisKKyAgVGhpcyBmZWF0dXJlIHJlbGllcyBvbiBhIGJpdCBvZiBtYWdpYyB1c2luZyAnc2V0JyBhbmQgJ3NvdXJjZScuCisgIFdoaWxlIHdlIGhhdmUgdHJpZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgY2FuIGNvcGUgd2l0aCBlbWJlZGRlZAorICB3aGl0ZXNwYWNlIGFuZCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsIGl0IHdpbGwgbm90IHdvcmsgd2l0aAorICBtdWx0aS1saW5lIGRhdGEuCmRpZmYgLS1naXQgYS90L3BlcmYvYWdncmVnYXRlLnBlcmwgYi90L3BlcmYvYWdncmVnYXRlLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTVmN2ZjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9hZ2dyZWdhdGUucGVybApAQCAtMCwwICsxLDE2NiBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2l0OworCitzdWIgZ2V0X3RpbWVzIHsKKwlteSAkbmFtZSA9IHNoaWZ0OworCW9wZW4gbXkgJGZoLCAiPCIsICRuYW1lIG9yIHJldHVybiB1bmRlZjsKKwlteSAkbGluZSA9IDwkZmg+OworCXJldHVybiB1bmRlZiBpZiBub3QgZGVmaW5lZCAkbGluZTsKKwljbG9zZSAkZmggb3IgZGllICJjYW5ub3QgY2xvc2UgJG5hbWU6ICQhIjsKKwkkbGluZSA9fiAvXig/OihcZCspOik/KFxkKyk6KFxkKyg/OlwuXGQrKT8pIChcZCsoPzpcLlxkKyk/KSAoXGQrKD86XC5cZCspPykkLworCQlvciBkaWUgImJhZCBpbnB1dCBsaW5lOiAkbGluZSI7CisJbXkgJHJ0ID0gKChkZWZpbmVkICQxID8gJDEgOiAwLjApKjYwKyQyKSo2MCskMzsKKwlyZXR1cm4gKCRydCwgJDQsICQ1KTsKK30KKworc3ViIGZvcm1hdF90aW1lcyB7CisJbXkgKCRyLCAkdSwgJHMsICRmaXJzdHIpID0gQF87CisJaWYgKCFkZWZpbmVkICRyKSB7CisJCXJldHVybiAiPG1pc3Npbmc+IjsKKwl9CisJbXkgJG91dCA9IHNwcmludGYgIiUuMmYoJS4yZislLjJmKSIsICRyLCAkdSwgJHM7CisJaWYgKGRlZmluZWQgJGZpcnN0cikgeworCQlpZiAoJGZpcnN0ciA+IDApIHsKKwkJCSRvdXQgLj0gc3ByaW50ZiAiICUrLjFmJSUiLCAxMDAuMCooJHItJGZpcnN0cikvJGZpcnN0cjsKKwkJfSBlbHNpZiAoJHIgPT0gMCkgeworCQkJJG91dCAuPSAiID0iOworCQl9IGVsc2UgeworCQkJJG91dCAuPSAiICtpbmYiOworCQl9CisJfQorCXJldHVybiAkb3V0OworfQorCitteSAoQGRpcnMsICVkaXJuYW1lcywgJWRpcmFiYnJldnMsICVwcmVmaXhlcywgQHRlc3RzKTsKK3doaWxlIChzY2FsYXIgQEFSR1YpIHsKKwlteSAkYXJnID0gJEFSR1ZbMF07CisJbXkgJGRpcjsKKwlsYXN0IGlmIC1mICRhcmcgb3IgJGFyZyBlcSAiLS0iOworCWlmICghIC1kICRhcmcpIHsKKwkJbXkgJHJldiA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKHF3KHJldi1wYXJzZSAtLXZlcmlmeSksICRhcmcpOworCQkkZGlyID0gImJ1aWxkLyIuJHJldjsKKwl9IGVsc2UgeworCQkkYXJnID1+IHN7LyokfXt9OworCQkkZGlyID0gJGFyZzsKKwkJJGRpcmFiYnJldnN7JGRpcn0gPSAkZGlyOworCX0KKwlwdXNoIEBkaXJzLCAkZGlyOworCSRkaXJuYW1lc3skZGlyfSA9ICRhcmc7CisJbXkgJHByZWZpeCA9ICRkaXI7CisJJHByZWZpeCA9fiB0ci9eYS16QS1aMC05L18vYzsKKwkkcHJlZml4ZXN7JGRpcn0gPSAkcHJlZml4IC4gJy4nOworCXNoaWZ0IEBBUkdWOworfQorCitpZiAobm90IEBkaXJzKSB7CisJQGRpcnMgPSAoJy4nKTsKK30KKyRkaXJuYW1lc3snLid9ID0gJGRpcmFiYnJldnN7Jy4nfSA9ICJ0aGlzIHRyZWUiOworJHByZWZpeGVzeycuJ30gPSAnJzsKKworc2hpZnQgQEFSR1YgaWYgc2NhbGFyIEBBUkdWIGFuZCAkQVJHVlswXSBlcSAiLS0iOworCitAdGVzdHMgPSBAQVJHVjsKK2lmIChub3QgQHRlc3RzKSB7CisJQHRlc3RzID0gZ2xvYiAicD8/Pz8tKi5zaCI7Cit9CisKK215IEBzdWJ0ZXN0czsKK215ICVzaG9ydHRlc3RzOworZm9yIG15ICR0IChAdGVzdHMpIHsKKwkkdCA9fiBzeyg/Oi4qLyk/KHAoXGQrKS1bXi9dKylcLnNoJH17JDF9IG9yIGRpZSAiYmFkIHRlc3QgbmFtZTogJHQiOworCW15ICRuID0gJDI7CisJbXkgJGZuYW1lID0gInRlc3QtcmVzdWx0cy8kdC5zdWJ0ZXN0cyI7CisJb3BlbiBteSAkZnAsICI8IiwgJGZuYW1lIG9yIGRpZSAiY2Fubm90IG9wZW4gJGZuYW1lOiAkISI7CisJZm9yICg8JGZwPikgeworCQljaG9tcDsKKwkJL14oXGQrKSQvIG9yIGRpZSAibWFsZm9ybWVkIHN1YnRlc3QgbGluZTogJF8iOworCQlwdXNoIEBzdWJ0ZXN0cywgIiR0LiQxIjsKKwkJJHNob3J0dGVzdHN7IiR0LiQxIn0gPSAiJG4uJDEiOworCX0KKwljbG9zZSAkZnAgb3IgZGllICJjYW5ub3QgY2xvc2UgJGZuYW1lOiAkISI7Cit9CisKK3N1YiByZWFkX2Rlc2NyIHsKKwlteSAkbmFtZSA9IHNoaWZ0OworCW9wZW4gbXkgJGZoLCAiPCIsICRuYW1lIG9yIHJldHVybiAiPGVycm9yIHJlYWRpbmcgZGVzY3JpcHRpb24+IjsKKwlteSAkbGluZSA9IDwkZmg+OworCWNsb3NlICRmaCBvciBkaWUgImNhbm5vdCBjbG9zZSAkbmFtZSI7CisJY2hvbXAgJGxpbmU7CisJcmV0dXJuICRsaW5lOworfQorCitteSAlZGVzY3JzOworbXkgJGRlc2NybGVuID0gNDsgIyAiVGVzdCIKK2ZvciBteSAkdCAoQHN1YnRlc3RzKSB7CisJJGRlc2Nyc3skdH0gPSAkc2hvcnR0ZXN0c3skdH0uIjogIi5yZWFkX2Rlc2NyKCJ0ZXN0LXJlc3VsdHMvJHQuZGVzY3IiKTsKKwkkZGVzY3JsZW4gPSBsZW5ndGggJGRlc2Nyc3skdH0gaWYgbGVuZ3RoICRkZXNjcnN7JHR9PiRkZXNjcmxlbjsKK30KKworc3ViIGhhdmVfZHVwbGljYXRlIHsKKwlteSAlc2VlbjsKKwlmb3IgKEBfKSB7CisJCXJldHVybiAxIGlmIGV4aXN0cyAkc2VlbnskX307CisJCSRzZWVueyRffSA9IDE7CisJfQorCXJldHVybiAwOworfQorc3ViIGhhdmVfc2xhc2ggeworCWZvciAoQF8pIHsKKwkJcmV0dXJuIDEgaWYgbXsvfTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK215ICVuZXdkaXJhYmJyZXZzID0gJWRpcmFiYnJldnM7Cit3aGlsZSAoIWhhdmVfZHVwbGljYXRlKHZhbHVlcyAlbmV3ZGlyYWJicmV2cykpIHsKKwklZGlyYWJicmV2cyA9ICVuZXdkaXJhYmJyZXZzOworCWxhc3QgaWYgIWhhdmVfc2xhc2godmFsdWVzICVkaXJhYmJyZXZzKTsKKwklbmV3ZGlyYWJicmV2cyA9ICVkaXJhYmJyZXZzOworCWZvciAodmFsdWVzICVuZXdkaXJhYmJyZXZzKSB7CisJCXN7XlteL10qL317fTsKKwl9Cit9CisKK215ICV0aW1lczsKK215IEBjb2x3aWR0aCA9ICgoMCl4QGRpcnMpOworZm9yIG15ICRpICgwLi4kI2RpcnMpIHsKKwlteSAkZCA9ICRkaXJzWyRpXTsKKwlteSAkdyA9IGxlbmd0aCAoZXhpc3RzICRkaXJhYmJyZXZzeyRkfSA/ICRkaXJhYmJyZXZzeyRkfSA6ICRkaXJuYW1lc3skZH0pOworCSRjb2x3aWR0aFskaV0gPSAkdyBpZiAkdyA+ICRjb2x3aWR0aFskaV07Cit9Citmb3IgbXkgJHQgKEBzdWJ0ZXN0cykgeworCW15ICRmaXJzdHI7CisJZm9yIG15ICRpICgwLi4kI2RpcnMpIHsKKwkJbXkgJGQgPSAkZGlyc1skaV07CisJCSR0aW1lc3skcHJlZml4ZXN7JGR9LiR0fSA9IFtnZXRfdGltZXMoInRlc3QtcmVzdWx0cy8kcHJlZml4ZXN7JGR9JHQudGltZXMiKV07CisJCW15ICgkciwkdSwkcykgPSBAeyR0aW1lc3skcHJlZml4ZXN7JGR9LiR0fX07CisJCW15ICR3ID0gbGVuZ3RoIGZvcm1hdF90aW1lcygkciwkdSwkcywkZmlyc3RyKTsKKwkJJGNvbHdpZHRoWyRpXSA9ICR3IGlmICR3ID4gJGNvbHdpZHRoWyRpXTsKKwkJJGZpcnN0ciA9ICRyIHVubGVzcyBkZWZpbmVkICRmaXJzdHI7CisJfQorfQorbXkgJHRvdGFsd2lkdGggPSAzKkBkaXJzKyRkZXNjcmxlbjsKKyR0b3RhbHdpZHRoICs9ICRfIGZvciAoQGNvbHdpZHRoKTsKKworcHJpbnRmICIlLSR7ZGVzY3JsZW59cyIsICJUZXN0IjsKK2ZvciBteSAkaSAoMC4uJCNkaXJzKSB7CisJbXkgJGQgPSAkZGlyc1skaV07CisJcHJpbnRmICIgICAlLSRjb2x3aWR0aFskaV1zIiwgKGV4aXN0cyAkZGlyYWJicmV2c3skZH0gPyAkZGlyYWJicmV2c3skZH0gOiAkZGlybmFtZXN7JGR9KTsKK30KK3ByaW50ICJcbiI7CitwcmludCAiLSJ4JHRvdGFsd2lkdGgsICJcbiI7Citmb3IgbXkgJHQgKEBzdWJ0ZXN0cykgeworCXByaW50ZiAiJS0ke2Rlc2NybGVufXMiLCAkZGVzY3JzeyR0fTsKKwlteSAkZmlyc3RyOworCWZvciBteSAkaSAoMC4uJCNkaXJzKSB7CisJCW15ICRkID0gJGRpcnNbJGldOworCQlteSAoJHIsJHUsJHMpID0gQHskdGltZXN7JHByZWZpeGVzeyRkfS4kdH19OworCQlwcmludGYgIiAgICUtJGNvbHdpZHRoWyRpXXMiLCBmb3JtYXRfdGltZXMoJHIsJHUsJHMsJGZpcnN0cik7CisJCSRmaXJzdHIgPSAkciB1bmxlc3MgZGVmaW5lZCAkZmlyc3RyOworCX0KKwlwcmludCAiXG4iOworfQpkaWZmIC0tZ2l0IGEvdC9wZXJmL21pbl90aW1lLnBlcmwgYi90L3BlcmYvbWluX3RpbWUucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMWEyNzE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL21pbl90aW1lLnBlcmwKQEAgLTAsMCArMSwyMSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK215ICRtaW5ydCA9IDFlMTAwOworbXkgJG1pbjsKKword2hpbGUgKDw+KSB7CisJIyBbaDpdbTpzLnh4IFUueHggUy54eAorCS9eKD86KFxkKyk6KT8oXGQrKTooXGQrKD86XC5cZCspPykgKFxkKyg/OlwuXGQrKT8pIChcZCsoPzpcLlxkKyk/KSQvCisJCW9yIGRpZSAiYmFkIGlucHV0IGxpbmU6ICRfIjsKKwlteSAkcnQgPSAoKGRlZmluZWQgJDEgPyAkMSA6IDAuMCkqNjArJDIpKjYwKyQzOworCWlmICgkcnQgPCAkbWlucnQpIHsKKwkJJG1pbiA9ICRfOworCQkkbWlucnQgPSAkcnQ7CisJfQorfQorCitpZiAoIWRlZmluZWQgJG1pbikgeworCWRpZSAibm8gaW5wdXQgZm91bmQiOworfQorCitwcmludCAkbWluOwpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDAwLXBlcmYtbGliLXNhbml0eS5zaCBiL3QvcGVyZi9wMDAwMC1wZXJmLWxpYi1zYW5pdHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2Y4ZTFlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMDAwMC1wZXJmLWxpYi1zYW5pdHkuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIHdoZXRoZXIgcGVyZi1saWIgZmFjaWxpdGllcyB3b3JrJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKwordGVzdF9wZXJmICd0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvIHdvcmtzJyAnCisJZm9vPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3RfZXhwb3J0IGZvbworJworCit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlCisKK3Rlc3RfcGVyZiAndGVzdF9jaGVja291dF93b3JrdHJlZSB3b3JrcycgJworCXd0PSQoZmluZCAuIHwgd2MgLWwpICYmCisJaWR4PSQoZ2l0IGxzLWZpbGVzIHwgd2MgLWwpICYmCisJdGVzdCAkd3QgLWd0ICRpZHgKKycKKworYmF6PWJhegordGVzdF9leHBvcnQgYmF6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RfZXhwb3J0IHdvcmtzJyAnCisJZWNobyAiJGZvbyIgJiYKKwl0ZXN0ICIkZm9vIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJZWNobyAiJGJheiIgJiYKKwl0ZXN0ICIkYmF6IiA9IGJhegorJworCit0ZXN0X3BlcmYgJ2V4cG9ydCBhIHdlaXJkIHZhcicgJworCWJhcj0id2VpcmQgIyB2YXJpYWJsZSIgJiYKKwl0ZXN0X2V4cG9ydCBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdF9leHBvcnQgd29ya3Mgd2l0aCB3ZWlyZCB2YXJzJyAnCisJZWNobyAiJGJhciIgJiYKKwl0ZXN0ICIkYmFyIiA9ICJ3ZWlyZCAjIHZhcmlhYmxlIgorJworCit0ZXN0X3BlcmYgJ2ltcG9ydGFudCB2YXJpYWJsZXMgYXZhaWxhYmxlIGluIHN1YnNoZWxscycgJworCXRlc3QgLW4gIiRIT01FIiAmJgorCXRlc3QgLW4gIiRURVNUX0RJUkVDVE9SWSIgJiYKKwl0ZXN0IC1uICIkVFJBU0hfRElSRUNUT1JZIiAmJgorCXRlc3QgLW4gIiRHSVRfQlVJTERfRElSIgorJworCit0ZXN0X3BlcmYgJ3Rlc3QtbGliLWZ1bmN0aW9ucyBjb3JyZWN0bHkgbG9hZGVkIGluIHN1YnNoZWxscycgJworCTogPmEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBhICYmCisJOiA+YiAmJgorCXRlc3RfY21wIGEgYgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wMDAwMS1yZXYtbGlzdC5zaCBiL3QvcGVyZi9wMDAwMS1yZXYtbGlzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjcxYTYzCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AwMDAxLXJldi1saXN0LnNoCkBAIC0wLDAgKzEsMTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0cyBoaXN0b3J5IHdhbGtpbmcgcGVyZm9ybWFuY2UiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgLS1hbGwnICcKKwlnaXQgcmV2LWxpc3QgLS1hbGwgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ3Jldi1saXN0IC0tYWxsIC0tb2JqZWN0cycgJworCWdpdCByZXYtbGlzdCAtLWFsbCAtLW9iamVjdHMgPi9kZXYvbnVsbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNDAwMC1kaWZmLWFsZ29yaXRobXMuc2ggYi90L3BlcmYvcDQwMDAtZGlmZi1hbGdvcml0aG1zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlMDBjOWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDQwMDAtZGlmZi1hbGdvcml0aG1zLnNoCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0cyBkaWZmIGdlbmVyYXRpb24gcGVyZm9ybWFuY2UiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKK3Rlc3RfcGVyZiAnbG9nIC0zMDAwIChiYXNlbGluZSknICcKKwlnaXQgbG9nIC0zMDAwID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdsb2cgLS1yYXcgLTMwMDAgKHRyZWUtb25seSknICcKKwlnaXQgbG9nIC0tcmF3IC0zMDAwID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdsb2cgLXAgLTMwMDAgKE15ZXJzKScgJworCWdpdCBsb2cgLXAgLTMwMDAgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2xvZyAtcCAtMzAwMCAtLWhpc3RvZ3JhbScgJworCWdpdCBsb2cgLXAgLTMwMDAgLS1oaXN0b2dyYW0gPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2xvZyAtcCAtMzAwMCAtLXBhdGllbmNlJyAnCisJZ2l0IGxvZyAtcCAtMzAwMCAtLXBhdGllbmNlID4vZGV2L251bGwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDUzMDItcGFjay1pbmRleC5zaCBiL3QvcGVyZi9wNTMwMi1wYWNrLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjYjViMGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDUzMDItcGFjay1pbmRleC5zaApAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdHMgaW5kZXgtcGFjayBwZXJmb3JtYW5jZSIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjaycgJworCWdpdCByZXBhY2sgLWFkICYmCisJUEFDSz1gbHMgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrIHwgaGVhZCAtbjFgICYmCisJdGVzdCAtZiAiJFBBQ0siICYmCisJZXhwb3J0IFBBQ0sKKycKKwordGVzdF9wZXJmICdpbmRleC1wYWNrIDAgdGhyZWFkcycgJworCUdJVF9ESVI9dDEgZ2l0IGluZGV4LXBhY2sgLS10aHJlYWRzPTEgLS1zdGRpbiA8ICRQQUNLCisnCisKK3Rlc3RfcGVyZiAnaW5kZXgtcGFjayAxIHRocmVhZCAnICcKKwlHSVRfRElSPXQyIEdJVF9GT1JDRV9USFJFQURTPTEgZ2l0IGluZGV4LXBhY2sgLS10aHJlYWRzPTEgLS1zdGRpbiA8ICRQQUNLCisnCisKK3Rlc3RfcGVyZiAnaW5kZXgtcGFjayAyIHRocmVhZHMnICcKKwlHSVRfRElSPXQzIGdpdCBpbmRleC1wYWNrIC0tdGhyZWFkcz0yIC0tc3RkaW4gPCAkUEFDSworJworCit0ZXN0X3BlcmYgJ2luZGV4LXBhY2sgNCB0aHJlYWRzJyAnCisJR0lUX0RJUj10NCBnaXQgaW5kZXgtcGFjayAtLXRocmVhZHM9NCAtLXN0ZGluIDwgJFBBQ0sKKycKKwordGVzdF9wZXJmICdpbmRleC1wYWNrIDggdGhyZWFkcycgJworCUdJVF9ESVI9dDUgZ2l0IGluZGV4LXBhY2sgLS10aHJlYWRzPTggLS1zdGRpbiA8ICRQQUNLCisnCisKK3Rlc3RfcGVyZiAnaW5kZXgtcGFjayBkZWZhdWx0IG51bWJlciBvZiB0aHJlYWRzJyAnCisJR0lUX0RJUj10NiBnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDwgJFBBQ0sKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDc4MTAtZ3JlcC5zaCBiL3QvcGVyZi9wNzgxMC1ncmVwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmNGFkZTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDc4MTAtZ3JlcC5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iZ2l0LWdyZXAgcGVyZm9ybWFuY2UgaW4gdmFyaW91cyBtb2RlcyIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlCisKK3Rlc3RfcGVyZiAnZ3JlcCB3b3JrdHJlZSwgY2hlYXAgcmVnZXgnICcKKwlnaXQgZ3JlcCBzb21lX25vbmV4aXN0ZW50X3N0cmluZyB8fCA6CisnCit0ZXN0X3BlcmYgJ2dyZXAgd29ya3RyZWUsIGV4cGVuc2l2ZSByZWdleCcgJworCWdpdCBncmVwICJeLiogKnNvbWVfbm9uZXhpc3RlbnRfc3RyaW5nJCIgfHwgOgorJwordGVzdF9wZXJmICdncmVwIC0tY2FjaGVkLCBjaGVhcCByZWdleCcgJworCWdpdCBncmVwIC0tY2FjaGVkIHNvbWVfbm9uZXhpc3RlbnRfc3RyaW5nIHx8IDoKKycKK3Rlc3RfcGVyZiAnZ3JlcCAtLWNhY2hlZCwgZXhwZW5zaXZlIHJlZ2V4JyAnCisJZ2l0IGdyZXAgLS1jYWNoZWQgIl4uKiAqc29tZV9ub25leGlzdGVudF9zdHJpbmckIiB8fCA6CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3BlcmYtbGliLnNoIGIvdC9wZXJmL3BlcmYtbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MTZmYmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcGVyZi1saWIuc2gKQEAgLTAsMCArMSwyMDMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhvbWFzIFJhc3QKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvIC4KKworIyBkbyB0aGUgLS10ZWUgd29yayBlYXJseTsgaXQgb3RoZXJ3aXNlIGNvbmZ1c2VzIG91ciBjYXJlZnVsCisjIEdJVF9CVUlMRF9ESVIgbWFuZ2xpbmcKK2Nhc2UgIiRHSVRfVEVTVF9URUVfU1RBUlRFRCwgJCogIiBpbgorZG9uZSwqKQorCSMgZG8gbm90IHJlZGlyZWN0IGFnYWluCisJOzsKKyonIC0tdGVlICcqfConIC0tdmEnKikKKwlta2RpciAtcCB0ZXN0LXJlc3VsdHMKKwlCQVNFPXRlc3QtcmVzdWx0cy8kKGJhc2VuYW1lICIkMCIgLnNoKQorCShHSVRfVEVTVF9URUVfU1RBUlRFRD1kb25lICR7U0hFTEwtc2h9ICIkMCIgIiRAIiAyPiYxOworCSBlY2hvICQ/ID4gJEJBU0UuZXhpdCkgfCB0ZWUgJEJBU0Uub3V0CisJdGVzdCAiJChjYXQgJEJBU0UuZXhpdCkiID0gMAorCWV4aXQKKwk7OworZXNhYworCitURVNUX0RJUkVDVE9SWT0kKHB3ZCkvLi4KK1RFU1RfT1VUUFVUX0RJUkVDVE9SWT0kKHB3ZCkKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9JTlNUQUxMRUQiOyB0aGVuCisJcGVyZl9yZXN1bHRzX3ByZWZpeD0KK2Vsc2UKKwlwZXJmX3Jlc3VsdHNfcHJlZml4PSQocHJpbnRmICIlcyIgIiR7R0lUX1RFU1RfSU5TVEFMTEVEJS9iaW4td3JhcHBlcnN9IiB8IHRyIC1jICJbYS16QS1aMC05XSIgIltfKl0iKSIuIgorCSMgbWFrZSB0aGUgdGVzdGVkIGRpciBhYnNvbHV0ZQorCUdJVF9URVNUX0lOU1RBTExFRD0kKGNkICIkR0lUX1RFU1RfSU5TVEFMTEVEIiAmJiBwd2QpCitmaQorCitURVNUX05PX0NSRUFURV9SRVBPPXQKK1RFU1RfTk9fTUFMTE9DX0NIRUNLPXQKKworLiAuLi90ZXN0LWxpYi5zaAorCisjIFZhcmlhYmxlcyBmcm9tIHRlc3QtbGliIHRoYXQgYXJlIG5vcm1hbGx5IGludGVybmFsIHRvIHRoZSB0ZXN0czsgd2UKKyMgbmVlZCB0byBleHBvcnQgdGhlbSBmb3IgdGVzdF9wZXJmIHN1YnNoZWxscworZXhwb3J0IFRFU1RfRElSRUNUT1JZIFRSQVNIX0RJUkVDVE9SWSBHSVRfQlVJTERfRElSIEdJVF9URVNUX0NNUAorCitwZXJmX3Jlc3VsdHNfZGlyPSRURVNUX09VVFBVVF9ESVJFQ1RPUlkvdGVzdC1yZXN1bHRzCitta2RpciAtcCAiJHBlcmZfcmVzdWx0c19kaXIiCitybSAtZiAiJHBlcmZfcmVzdWx0c19kaXIiLyQoYmFzZW5hbWUgIiQwIiAuc2gpLnN1YnRlc3RzCisKK2lmIHRlc3QgLXogIiRHSVRfUEVSRl9SRVBFQVRfQ09VTlQiOyB0aGVuCisJR0lUX1BFUkZfUkVQRUFUX0NPVU5UPTMKK2ZpCitkaWVfaWZfYnVpbGRfZGlyX25vdF9yZXBvICgpIHsKKwlpZiAhICggY2QgIiRURVNUX0RJUkVDVE9SWS8uLiIgJiYKKwkJICAgIGdpdCByZXYtcGFyc2UgLS1idWlsZC1kaXIgPi9kZXYvbnVsbCAyPiYxICk7IHRoZW4KKwkJZXJyb3IgIk5vICQxIGRlZmluZWQsIGFuZCB5b3VyIGJ1aWxkIGRpcmVjdG9yeSBpcyBub3QgYSByZXBvIgorCWZpCit9CisKK2lmIHRlc3QgLXogIiRHSVRfUEVSRl9SRVBPIjsgdGhlbgorCWRpZV9pZl9idWlsZF9kaXJfbm90X3JlcG8gJyRHSVRfUEVSRl9SRVBPJworCUdJVF9QRVJGX1JFUE89JFRFU1RfRElSRUNUT1JZLy4uCitmaQoraWYgdGVzdCAteiAiJEdJVF9QRVJGX0xBUkdFX1JFUE8iOyB0aGVuCisJZGllX2lmX2J1aWxkX2Rpcl9ub3RfcmVwbyAnJEdJVF9QRVJGX0xBUkdFX1JFUE8nCisJR0lUX1BFUkZfTEFSR0VfUkVQTz0kVEVTVF9ESVJFQ1RPUlkvLi4KK2ZpCisKK3Rlc3RfcGVyZl9jcmVhdGVfcmVwb19mcm9tICgpIHsKKwl0ZXN0ICIkIyIgPSAyIHx8CisJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAyIHBhcmFtZXRlcnMgdG8gdGVzdC1jcmVhdGUtcmVwbyIKKwlyZXBvPSIkMSIKKwlzb3VyY2U9IiQyIgorCXNvdXJjZV9naXQ9JHNvdXJjZS8kKGNkICIkc291cmNlIiAmJiBnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikKKwlta2RpciAtcCAiJHJlcG8vLmdpdCIKKwkoCisJCWNkICIkcmVwby8uZ2l0IiAmJgorCQl7IGNwIC1SbCAiJHNvdXJjZV9naXQvb2JqZWN0cyIgLiAyPi9kZXYvbnVsbCB8fAorCQkJY3AgLVIgIiRzb3VyY2VfZ2l0L29iamVjdHMiIC47IH0gJiYKKwkJZm9yIHN0dWZmIGluICIkc291cmNlX2dpdCIvKjsgZG8KKwkJCWNhc2UgIiRzdHVmZiIgaW4KKwkJCQkqL29iamVjdHN8Ki9ob29rc3wqL2NvbmZpZykKKwkJCQkJOzsKKwkJCQkqKQorCQkJCQljcCAtUiAiJHN0dWZmIiAuIHx8IGJyZWFrCisJCQkJCTs7CisJCQllc2FjCisJCWRvbmUgJiYKKwkJY2QgLi4gJiYKKwkJZ2l0IGluaXQgLXEgJiYKKwkJbXYgLmdpdC9ob29rcyAuZ2l0L2hvb2tzLWRpc2FibGVkIDI+L2Rldi9udWxsCisJKSB8fCBlcnJvciAiZmFpbGVkIHRvIGNvcHkgcmVwb3NpdG9yeSAnJHNvdXJjZScgdG8gJyRyZXBvJyIKK30KKworIyBjYWxsIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSB0byBlc3RhYmxpc2ggYW4gYXBwcm9wcmlhdGVseS1zaXplZCByZXBvc2l0b3J5Cit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvICgpIHsKKwl0ZXN0X3BlcmZfY3JlYXRlX3JlcG9fZnJvbSAiJHsxOi0kVFJBU0hfRElSRUNUT1JZfSIgIiRHSVRfUEVSRl9SRVBPIgorfQordGVzdF9wZXJmX2xhcmdlX3JlcG8gKCkgeworCWlmIHRlc3QgIiRHSVRfUEVSRl9MQVJHRV9SRVBPIiA9ICIkR0lUX0JVSUxEX0RJUiI7IHRoZW4KKwkJZWNobyAid2FybmluZzogXCRHSVRfUEVSRl9MQVJHRV9SRVBPIGlzIFwkR0lUX0JVSUxEX0RJUi4iID4mMgorCQllY2hvICJ3YXJuaW5nOiBUaGlzIHdpbGwgd29yaywgYnV0IG1heSBub3QgYmUgYSBzdWZmaWNpZW50bHkgbGFyZ2UgcmVwbyIgPiYyCisJCWVjaG8gIndhcm5pbmc6IGZvciByZXByZXNlbnRhdGl2ZSBtZWFzdXJlbWVudHMuIiA+JjIKKwlmaQorCXRlc3RfcGVyZl9jcmVhdGVfcmVwb19mcm9tICIkezE6LSRUUkFTSF9ESVJFQ1RPUll9IiAiJEdJVF9QRVJGX0xBUkdFX1JFUE8iCit9Cit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlICgpIHsKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWEgfHwKKwllcnJvciAiZ2l0IGNoZWNrb3V0LWluZGV4IGZhaWxlZCIKK30KKworIyBQZXJmb3JtYW5jZSB0ZXN0cyBzaG91bGQgbmV2ZXIgZmFpbC4gIElmIHRoZXkgZG8sIHN0b3AgaW1tZWRpYXRlbHkKK2ltbWVkaWF0ZT10CisKK3Rlc3RfcnVuX3BlcmZfICgpIHsKKwl0ZXN0X2NsZWFudXA9OgorCXRlc3RfZXhwb3J0Xz0idGVzdF9jbGVhbnVwIgorCWV4cG9ydCB0ZXN0X2NsZWFudXAgdGVzdF9leHBvcnRfCisJL3Vzci9iaW4vdGltZSAtZiAiJUUgJVUgJVMiIC1vIHRlc3RfdGltZS4kaSAiJFNIRUxMIiAtYyAnCisuICciJFRFU1RfRElSRUNUT1JZIi90ZXN0LWxpYi1mdW5jdGlvbnMuc2gnCit0ZXN0X2V4cG9ydCAoKSB7CisJWyAkIyAhPSAwIF0gfHwgcmV0dXJuIDAKKwl0ZXN0X2V4cG9ydF89IiR0ZXN0X2V4cG9ydF9cXHwkMSIKKwlzaGlmdAorCXRlc3RfZXhwb3J0ICIkQCIKK30KKyciJDEiJworcmV0PSQ/CitzZXQgfCBzZWQgLW4gInMnIi8nLydcXFxcJycvZyInO3MvXlxcKCR0ZXN0X2V4cG9ydF9cXCkvZXhwb3J0ICciJyYnIicvcCIgPnRlc3RfdmFycworZXhpdCAkcmV0JyA+JjMgMj4mNAorCWV2YWxfcmV0PSQ/CisKKwlpZiB0ZXN0ICRldmFsX3JldCA9IDAgfHwgdGVzdCAtbiAiJGV4cGVjdGluZ19mYWlsdXJlIgorCXRoZW4KKwkJdGVzdF9ldmFsXyAiJHRlc3RfY2xlYW51cCIKKwkJLiAuL3Rlc3RfdmFycyB8fCBlcnJvciAiZmFpbGVkIHRvIGxvYWQgdXBkYXRlZCBlbnZpcm9ubWVudCIKKwlmaQorCWlmIHRlc3QgIiR2ZXJib3NlIiA9ICJ0IiAmJiB0ZXN0IC1uICIkSEFSTkVTU19BQ1RJVkUiOyB0aGVuCisJCWVjaG8gIiIKKwlmaQorCXJldHVybiAiJGV2YWxfcmV0IgorfQorCisKK3Rlc3RfcGVyZiAoKSB7CisJdGVzdCAiJCMiID0gMyAmJiB7IHRlc3RfcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCB0ZXN0X3ByZXJlcT0KKwl0ZXN0ICIkIyIgPSAyIHx8CisJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAyIG9yIDMgcGFyYW1ldGVycyB0byB0ZXN0LWV4cGVjdC1zdWNjZXNzIgorCWV4cG9ydCB0ZXN0X3ByZXJlcQorCWlmICEgdGVzdF9za2lwICIkQCIKKwl0aGVuCisJCWJhc2U9JChiYXNlbmFtZSAiJDAiIC5zaCkKKwkJZWNobyAiJHRlc3RfY291bnQiID4+IiRwZXJmX3Jlc3VsdHNfZGlyIi8kYmFzZS5zdWJ0ZXN0cworCQllY2hvICIkMSIgPiIkcGVyZl9yZXN1bHRzX2RpciIvJGJhc2UuJHRlc3RfY291bnQuZGVzY3IKKwkJaWYgdGVzdCAteiAiJHZlcmJvc2UiOyB0aGVuCisJCQllY2hvIC1uICJwZXJmICR0ZXN0X2NvdW50IC0gJDE6IgorCQllbHNlCisJCQllY2hvICJwZXJmICR0ZXN0X2NvdW50IC0gJDE6IgorCQlmaQorCQlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgJEdJVF9QRVJGX1JFUEVBVF9DT1VOVCk7IGRvCisJCQlzYXkgPiYzICJydW5uaW5nOiAkMiIKKwkJCWlmIHRlc3RfcnVuX3BlcmZfICIkMiIKKwkJCXRoZW4KKwkJCQlpZiB0ZXN0IC16ICIkdmVyYm9zZSI7IHRoZW4KKwkJCQkJZWNobyAtbiAiICRpIgorCQkJCWVsc2UKKwkJCQkJZWNobyAiKiB0aW1pbmcgcnVuICRpLyRHSVRfUEVSRl9SRVBFQVRfQ09VTlQ6IgorCQkJCWZpCisJCQllbHNlCisJCQkJdGVzdCAteiAiJHZlcmJvc2UiICYmIGVjaG8KKwkJCQl0ZXN0X2ZhaWx1cmVfICIkQCIKKwkJCQlicmVhaworCQkJZmkKKwkJZG9uZQorCQlpZiB0ZXN0IC16ICIkdmVyYm9zZSI7IHRoZW4KKwkJCWVjaG8gIiBvayIKKwkJZWxzZQorCQkJdGVzdF9va18gIiQxIgorCQlmaQorCQliYXNlPSIkcGVyZl9yZXN1bHRzX2RpciIvIiRwZXJmX3Jlc3VsdHNfcHJlZml4JChiYXNlbmFtZSAiJDAiIC5zaCkiLiIkdGVzdF9jb3VudCIKKwkJIiRURVNUX0RJUkVDVE9SWSIvcGVyZi9taW5fdGltZS5wZXJsIHRlc3RfdGltZS4qID4iJGJhc2UiLnRpbWVzCisJZmkKKwllY2hvID4mMyAiIgorfQorCisjIFdlIGV4dGVuZCB0ZXN0X2RvbmUgdG8gcHJpbnQgdGltaW5ncyBhdCB0aGUgZW5kICguL3J1biBkaXNhYmxlcyB0aGlzCisjIGFuZCBkb2VzIGl0IGFmdGVyIHJ1bm5pbmcgZXZlcnl0aGluZykKK3Rlc3RfYXRfZW5kX2hvb2tfICgpIHsKKwlpZiB0ZXN0IC16ICIkR0lUX1BFUkZfQUdHUkVHQVRJTkdfTEFURVIiOyB0aGVuCisJCSggY2QgIiRURVNUX0RJUkVDVE9SWSIvcGVyZiAmJiAuL2FnZ3JlZ2F0ZS5wZXJsICQoYmFzZW5hbWUgIiQwIikgKQorCWZpCit9CisKK3Rlc3RfZXhwb3J0ICgpIHsKKwlleHBvcnQgIiRAIgorfQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3J1biBiL3QvcGVyZi9ydW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2ZkNzAxMgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9ydW4KQEAgLTAsMCArMSw4MiBAQAorIyEvYmluL3NoCisKK2Nhc2UgIiQxIiBpbgorCS0taGVscCkKKwkJZWNobyAidXNhZ2U6ICQwIFtvdGhlcl9naXRfdHJlZS4uLl0gWy0tXSBbdGVzdF9zY3JpcHRzXSIKKwkJZXhpdCAwCisJCTs7Citlc2FjCisKK2RpZSAoKSB7CisJZWNobyA+JjIgImVycm9yOiAkKiIKKwlleGl0IDEKK30KKworcnVuX29uZV9kaXIgKCkgeworCWlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKwkJc2V0IC0tIHA/Pz8/LSouc2gKKwlmaQorCWVjaG8gIj09PSBSdW5uaW5nICQjIHRlc3RzIGluICR7R0lUX1RFU1RfSU5TVEFMTEVEOi10aGlzIHRyZWV9ID09PSIKKwlmb3IgdCBpbiAiJEAiOyBkbworCQkuLyR0ICRHSVRfVEVTVF9PUFRTCisJZG9uZQorfQorCit1bnBhY2tfZ2l0X3JldiAoKSB7CisJcmV2PSQxCisJbWtkaXIgLXAgYnVpbGQvJHJldgorCShjZCAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwKSIgJiYgZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyICRyZXYpIHwKKwkoY2QgYnVpbGQvJHJldiAmJiB0YXIgeCkKK30KK2J1aWxkX2dpdF9yZXYgKCkgeworCXJldj0kMQorCWNwIC4uLy4uL2NvbmZpZy5tYWsgYnVpbGQvJHJldi9jb25maWcubWFrCisJKGNkIGJ1aWxkLyRyZXYgJiYgbWFrZSAkR0lUX1BFUkZfTUFLRV9PUFRTKSB8fAorCWRpZSAiZmFpbGVkIHRvIGJ1aWxkIHJldmlzaW9uICckbXlkaXInIgorfQorCitydW5fZGlyc19oZWxwZXIgKCkgeworCW15ZGlyPSR7MSUvfQorCXNoaWZ0CisJd2hpbGUgdGVzdCAkIyAtZ3QgMCAtYSAiJDEiICE9IC0tIC1hICEgLWYgIiQxIjsgZG8KKwkJc2hpZnQKKwlkb25lCisJaWYgdGVzdCAkIyAtZ3QgMCAtYSAiJDEiID0gLS07IHRoZW4KKwkJc2hpZnQKKwlmaQorCWlmIFsgISAtZCAiJG15ZGlyIiBdOyB0aGVuCisJCXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRteWRpciIgMj4vZGV2L251bGwpIHx8CisJCWRpZSAiJyRteWRpcicgaXMgbmVpdGhlciBhIGRpcmVjdG9yeSBub3IgYSB2YWxpZCByZXZpc2lvbiIKKwkJaWYgWyAhIC1kIGJ1aWxkLyRyZXYgXTsgdGhlbgorCQkJdW5wYWNrX2dpdF9yZXYgJHJldgorCQlmaQorCQlidWlsZF9naXRfcmV2ICRyZXYKKwkJbXlkaXI9YnVpbGQvJHJldgorCWZpCisJaWYgdGVzdCAiJG15ZGlyIiA9IC47IHRoZW4KKwkJdW5zZXQgR0lUX1RFU1RfSU5TVEFMTEVECisJZWxzZQorCQlHSVRfVEVTVF9JTlNUQUxMRUQ9IiRteWRpci9iaW4td3JhcHBlcnMiCisJCWV4cG9ydCBHSVRfVEVTVF9JTlNUQUxMRUQKKwlmaQorCXJ1bl9vbmVfZGlyICIkQCIKK30KKworcnVuX2RpcnMgKCkgeworCXdoaWxlIHRlc3QgJCMgLWd0IDAgLWEgIiQxIiAhPSAtLSAtYSAhIC1mICIkMSI7IGRvCisJCXJ1bl9kaXJzX2hlbHBlciAiJEAiCisJCXNoaWZ0CisJZG9uZQorfQorCitHSVRfUEVSRl9BR0dSRUdBVElOR19MQVRFUj10CitleHBvcnQgR0lUX1BFUkZfQUdHUkVHQVRJTkdfTEFURVIKKworY2QgIiQoZGlybmFtZSAkMCkiCisuIC4uLy4uL0dJVC1CVUlMRC1PUFRJT05TCisKK2lmIHRlc3QgJCMgPSAwIC1vICIkMSIgPSAtLSAtbyAtZiAiJDEiOyB0aGVuCisJc2V0IC0tIC4gIiRAIgorZmkKK3J1bl9kaXJzICIkQCIKKy4vYWdncmVnYXRlLnBlcmwgIiRAIgpkaWZmIC0tZ2l0IGEvdC90MDAwMC1iYXNpYy5zaCBiL3QvdDAwMDAtYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDg2NzdkZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDAtYmFzaWMuc2gKQEAgLTAsMCArMSw0NjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgdmVyeSBiYXNpY3MgcGFydCAjMS4KKworVGhlIHJlc3Qgb2YgdGhlIHRlc3Qgc3VpdGUgZG9lcyBub3QgY2hlY2sgdGhlIGJhc2ljIG9wZXJhdGlvbiBvZiBnaXQKK3BsdW1iaW5nIGNvbW1hbmRzIHRvIHdvcmsgdmVyeSBjYXJlZnVsbHkuICBUaGVpciBqb2IgaXMgdG8gY29uY2VudHJhdGUKK29uIHRyaWNreSBmZWF0dXJlcyB0aGF0IGNhdXNlZCBidWdzIGluIHRoZSBwYXN0IHRvIGRldGVjdCByZWdyZXNzaW9uLgorCitUaGlzIHRlc3QgcnVucyB2ZXJ5IGJhc2ljIGZlYXR1cmVzLCBsaWtlIHJlZ2lzdGVyaW5nIHRoaW5ncyBpbiBjYWNoZSwKK3dyaXRpbmcgdHJlZSwgZXRjLgorCitOb3RlIHRoYXQgdGhpcyB0ZXN0ICpkZWxpYmVyYXRlbHkqIGhhcmQtY29kZXMgbWFueSBleHBlY3RlZCBvYmplY3QKK0lEcy4gIFdoZW4gb2JqZWN0IElEIGNvbXB1dGF0aW9uIGNoYW5nZXMsIGxpa2UgaW4gdGhlIHByZXZpb3VzIGNhc2Ugb2YKK3N3YXBwaW5nIGNvbXByZXNzaW9uIGFuZCBoYXNoaW5nIG9yZGVyLCB0aGUgcGVyc29uIHdobyBpcyBtYWtpbmcgdGhlCittb2RpZmljYXRpb24gKnNob3VsZCogdGFrZSBub3RpY2UgYW5kIHVwZGF0ZSB0aGUgdGVzdCB2ZWN0b3JzIGhlcmUuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGdpdCBpbml0IGhhcyBiZWVuIGRvbmUgaW4gYW4gZW1wdHkgcmVwb3NpdG9yeS4KKyMgbWFrZSBzdXJlIGl0IGlzIGVtcHR5LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0L29iamVjdHMgc2hvdWxkIGJlIGVtcHR5IGFmdGVyIGdpdCBpbml0IGluIGFuIGVtcHR5IHJlcG8nICcKKwlmaW5kIC5naXQvb2JqZWN0cyAtdHlwZSBmIC1wcmludCA+c2hvdWxkLWJlLWVtcHR5ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBzaG91bGQtYmUtZW1wdHkKKycKKworIyBhbHNvIGl0IHNob3VsZCBoYXZlIDIgc3ViZGlyZWN0b3JpZXM7IG5vIGZhbi1vdXQgYW55bW9yZSwgcGFjaywgYW5kIGluZm8uCisjIDMgaXMgY291bnRpbmcgIm9iamVjdHMiIGl0c2VsZgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdC9vYmplY3RzIHNob3VsZCBoYXZlIDMgc3ViZGlyZWN0b3JpZXMnICcKKwlmaW5kIC5naXQvb2JqZWN0cyAtdHlwZSBkIC1wcmludCA+ZnVsbC1vZi1kaXJlY3RvcmllcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgZnVsbC1vZi1kaXJlY3RvcmllcworJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgaGFybmVzcwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2VzcyBpcyByZXBvcnRlZCBsaWtlIHRoaXMnICcKKwk6CisnCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZScgJworCWZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhIGtub3duIGJyZWFrYWdlIChydW4gaW4gc3ViIHRlc3QtbGliKScgIgorCW1rZGlyIHBhc3NpbmctdG9kbyAmJgorCShjZCBwYXNzaW5nLXRvZG8gJiYKKwljYXQgPnBhc3NpbmctdG9kby5zaCA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisKKwl0ZXN0X2Rlc2NyaXB0aW9uPSdBIHBhc3NpbmcgVE9ETyB0ZXN0CisKKwlUaGlzIGlzIHJ1biBpbiBhIHN1YiB0ZXN0LWxpYiBzbyB0aGF0IHdlIGRvIG5vdCBnZXQgaW5jb3JyZWN0CisJcGFzc2luZyBtZXRyaWNzCisJJworCisJIyBQb2ludCB0byB0aGUgdC90ZXN0LWxpYi5zaCwgd2hpY2ggaXNuJ3QgaW4gLi4vIGFzIHVzdWFsCisJVEVTVF9ESVJFQ1RPUlk9XCIkVEVTVF9ESVJFQ1RPUllcIgorCS4gXCJcJFRFU1RfRElSRUNUT1JZXCIvdGVzdC1saWIuc2gKKworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhIGtub3duIGJyZWFrYWdlJyAnCisJCToKKwknCisKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaG1vZCAreCBwYXNzaW5nLXRvZG8uc2ggJiYKKwkuL3Bhc3NpbmctdG9kby5zaCA+b3V0IDI+ZXJyICYmCisJISB0ZXN0IC1zIGVyciAmJgorCXNlZCAtZSAncy9ePiAvLycgPmV4cGVjdCA8PC1cXEVPRiAmJgorCT4gb2sgMSAtIHByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZQorCT4gIyBmaXhlZCAxIGtub3duIGJyZWFrYWdlKHMpCisJPiAjIHBhc3NlZCBhbGwgMSB0ZXN0KHMpCisJPiAxLi4xCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IG91dCkKKyIKK3Rlc3Rfc2V0X3ByZXJlcSBIQVZFSVQKK2hhdmVpdD1ubwordGVzdF9leHBlY3Rfc3VjY2VzcyBIQVZFSVQgJ3Rlc3QgcnVucyBpZiBwcmVyZXF1aXNpdGUgaXMgc2F0aXNmaWVkJyAnCisJdGVzdF9oYXZlX3ByZXJlcSBIQVZFSVQgJiYKKwloYXZlaXQ9eWVzCisnCitkb250aGF2ZWl0PXllcwordGVzdF9leHBlY3Rfc3VjY2VzcyBET05USEFWRUlUICd1bm1ldCBwcmVyZXF1aXNpdGUgY2F1c2VzIHRlc3QgdG8gYmUgc2tpcHBlZCcgJworCWRvbnRoYXZlaXQ9bm8KKycKK2lmIHRlc3QgJGhhdmVpdCRkb250aGF2ZWl0ICE9IHllc3llcwordGhlbgorCXNheSAiYnVnIGluIHRlc3QgZnJhbWV3b3JrOiBwcmVyZXF1aXNpdGUgdGFncyBkbyBub3Qgd29yayByZWxpYWJseSIKKwlleGl0IDEKK2ZpCisKK3Rlc3Rfc2V0X3ByZXJlcSBIQVZFVEhJUworaGF2ZWl0PW5vCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhBVkVUSElTLEhBVkVJVCAndGVzdCBydW5zIGlmIHByZXJlcXVpc2l0ZXMgYXJlIHNhdGlzZmllZCcgJworCXRlc3RfaGF2ZV9wcmVyZXEgSEFWRUlUICYmCisJdGVzdF9oYXZlX3ByZXJlcSBIQVZFVEhJUyAmJgorCWhhdmVpdD15ZXMKKycKK2RvbnRoYXZlaXQ9eWVzCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhBVkVJVCxET05USEFWRUlUICd1bm1ldCBwcmVyZXF1aXNpdGVzIGNhdXNlcyB0ZXN0IHRvIGJlIHNraXBwZWQnICcKKwlkb250aGF2ZWl0PW5vCisnCitkb250aGF2ZWl0ZWl0aGVyPXllcwordGVzdF9leHBlY3Rfc3VjY2VzcyBET05USEFWRUlULEhBVkVJVCAndW5tZXQgcHJlcmVxdWlzaXRlcyBjYXVzZXMgdGVzdCB0byBiZSBza2lwcGVkJyAnCisJZG9udGhhdmVpdGVpdGhlcj1ubworJworaWYgdGVzdCAkaGF2ZWl0JGRvbnRoYXZlaXQkZG9udGhhdmVpdGVpdGhlciAhPSB5ZXN5ZXN5ZXMKK3RoZW4KKwlzYXkgImJ1ZyBpbiB0ZXN0IGZyYW1ld29yazogbXVsdGlwbGUgcHJlcmVxdWlzaXRlIHRhZ3MgZG8gbm90IHdvcmsgcmVsaWFibHkiCisJZXhpdCAxCitmaQorCitjbGVhbj1ubwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdHMgY2xlYW4gdXAgYWZ0ZXIgdGhlbXNlbHZlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbj15ZXMKKycKKworaWYgdGVzdCAkY2xlYW4gIT0geWVzCit0aGVuCisJc2F5ICJidWcgaW4gdGVzdCBmcmFtZXdvcms6IGJhc2ljIGNsZWFudXAgY29tbWFuZCBkb2VzIG5vdCB3b3JrIHJlbGlhYmx5IgorCWV4aXQgMQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdHMgY2xlYW4gdXAgZXZlbiBvbiBmYWlsdXJlcycgIgorCW1rZGlyIGZhaWxpbmctY2xlYW51cCAmJgorCSgKKwljZCBmYWlsaW5nLWNsZWFudXAgJiYKKworCWNhdCA+ZmFpbGluZy1jbGVhbnVwLnNoIDw8LUVPRiAmJgorCSMhJFNIRUxMX1BBVEgKKworCXRlc3RfZGVzY3JpcHRpb249J0ZhaWxpbmcgdGVzdHMgd2l0aCBjbGVhbnVwIGNvbW1hbmRzJworCisJIyBQb2ludCB0byB0aGUgdC90ZXN0LWxpYi5zaCwgd2hpY2ggaXNuJ3QgaW4gLi4vIGFzIHVzdWFsCisJVEVTVF9ESVJFQ1RPUlk9XCIkVEVTVF9ESVJFQ1RPUllcIgorCS4gXCJcJFRFU1RfRElSRUNUT1JZXCIvdGVzdC1saWIuc2gKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RzIGNsZWFuIHVwIGV2ZW4gYWZ0ZXIgYSBmYWlsdXJlJyAnCisJCXRvdWNoIGNsZWFuLWFmdGVyLWZhaWx1cmUgJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIGNsZWFuLWFmdGVyLWZhaWx1cmUgJiYKKwkJKGV4aXQgMSkKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHVyZSB0byBjbGVhbiB1cCBjYXVzZXMgdGhlIHRlc3QgdG8gZmFpbCcgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgXCIoZXhpdCAyKVwiCisJJworCXRlc3RfZG9uZQorCisJRU9GCisKKwljaG1vZCAreCBmYWlsaW5nLWNsZWFudXAuc2ggJiYKKwl0ZXN0X211c3RfZmFpbCAuL2ZhaWxpbmctY2xlYW51cC5zaCA+b3V0IDI+ZXJyICYmCisJISB0ZXN0IC1zIGVyciAmJgorCSEgdGVzdCAtZiBcInRyYXNoIGRpcmVjdG9yeS5mYWlsaW5nLWNsZWFudXAvY2xlYW4tYWZ0ZXItZmFpbHVyZVwiICYmCisJc2VkIC1lICdzL1okLy8nIC1lICdzL14+IC8vJyA+ZXhwZWN0IDw8LVxcRU9GICYmCisJPiBub3Qgb2sgLSAxIHRlc3RzIGNsZWFuIHVwIGV2ZW4gYWZ0ZXIgYSBmYWlsdXJlCisJPiAjCVoKKwk+ICMJdG91Y2ggY2xlYW4tYWZ0ZXItZmFpbHVyZSAmJgorCT4gIwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gY2xlYW4tYWZ0ZXItZmFpbHVyZSAmJgorCT4gIwkoZXhpdCAxKQorCT4gIwlaCisJPiBub3Qgb2sgLSAyIGZhaWx1cmUgdG8gY2xlYW4gdXAgY2F1c2VzIHRoZSB0ZXN0IHRvIGZhaWwKKwk+ICMJWgorCT4gIwl0ZXN0X3doZW5fZmluaXNoZWQgXCIoZXhpdCAyKVwiCisJPiAjCVoKKwk+ICMgZmFpbGVkIDIgYW1vbmcgMiB0ZXN0KHMpCisJPiAxLi4yCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IG91dAorCSkKKyIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCYXNpY3Mgb2YgdGhlIGJhc2ljcworCisjIHVwZGF0aW5nIGEgbmV3IGZpbGUgd2l0aG91dCAtLWFkZCBzaG91bGQgZmFpbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB1cGRhdGUtaW5kZXggd2l0aG91dCAtLWFkZCBzaG91bGQgZmFpbCBhZGRpbmcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IHNob3VsZC1iZS1lbXB0eQorJworCisjIGFuZCB3aXRoIC0tYWRkIGl0IHNob3VsZCBzdWNjZWVkLCBldmVuIGlmIGl0IGlzIGVtcHR5IChpdCB1c2VkIHRvIGZhaWwpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHVwZGF0ZS1pbmRleCB3aXRoIC0tYWRkIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBzaG91bGQtYmUtZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlJyAnCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKQorJworCisjIHdlIGtub3cgdGhlIHNoYXBlIGFuZCBjb250ZW50cyBvZiB0aGUgdHJlZSBhbmQga25vdyB0aGUgb2JqZWN0IElEIGZvciBpdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIG9iamVjdCBJRCBvZiBhIGtub3duIHRyZWUnICcKKwl0ZXN0ICIkdHJlZSIgPSA3YmI5NDM1NTlhMzA1YmRkNmJkZWUyY2VmNmU1ZGYyNDEzYzNkMzBhCisgICAgJworCisjIFJlbW92aW5nIHBhdGhzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHVwZGF0ZS1pbmRleCB3aXRob3V0IC0tcmVtb3ZlIHNob3VsZCBmYWlsIHJlbW92aW5nJyAnCisJcm0gLWYgc2hvdWxkLWJlLWVtcHR5IGZ1bGwtb2YtZGlyZWN0b3JpZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IHNob3VsZC1iZS1lbXB0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdXBkYXRlLWluZGV4IHdpdGggLS1yZW1vdmUgc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBzaG91bGQtYmUtZW1wdHkKKycKKworIyBFbXB0eSB0cmVlIGNhbiBiZSB3cml0dGVuIHdpdGggcmVjZW50IHdyaXRlLXRyZWUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgd3JpdGUtdHJlZSBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSBhbiBlbXB0eSB0cmVlJyAnCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBvYmplY3QgSUQgb2YgYSBrbm93biB0cmVlJyAnCisJdGVzdCAiJHRyZWUiID0gNGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNAorJworCisjIFZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cworCisjIFNvbWUgZmlsZXN5c3RlbXMgZG8gbm90IHN1cHBvcnQgc3ltYmxpYyBsaW5rczsgb24gc3VjaCBzeXN0ZW1zCisjIHNvbWUgZXhwZWN0ZWQgdmFsdWVzIGFyZSBkaWZmZXJlbnQKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlleHBlY3RmaWx0ZXI9Y2F0CisJZXhwZWN0ZWR0cmVlPTA4NzcwNGE5NmJhZjFjMmQxYzg2OWE4YjA4NDQ4MWUxMjFjODhiNWIKKwlleHBlY3RlZHB0cmVlMT0yMWFlODI2OWNhY2JlNTdhZTA5MTM4ZGNjM2EyODg3ZjkwNGQwMmIzCisJZXhwZWN0ZWRwdHJlZTI9M2M1ZTUzOTlmM2EzMzNlZGRlY2NlN2E5Yjk0NjViNjNmNjVmNTFlMgorZWxzZQorCWV4cGVjdGZpbHRlcj0nZ3JlcCAtdiBzeW0nCisJZXhwZWN0ZWR0cmVlPThlMThlZGY3ZDdlZGNmNDM3MWEzYWM2YWU1ZjA3YzI2NDFkYjdjNDYKKwlleHBlY3RlZHB0cmVlMT1jZmI4NTkxYjJmNjVkZThiOGNjMTAyMGNkN2Q5ZTY3ZTc3OTNiMzI1CisJZXhwZWN0ZWRwdHJlZTI9Y2U1ODA0NDhmMDE0OGI5ODVhNTEzYjY5M2ZkZjdkODAyY2FjYjQ0ZgorZmkKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpbmcgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIHdpdGggZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCcgJworCW1rZGlyIHBhdGgyIHBhdGgzIHBhdGgzL3N1YnAzICYmCisJcGF0aHM9InBhdGgwIHBhdGgyL2ZpbGUyIHBhdGgzL2ZpbGUzIHBhdGgzL3N1YnAzL2ZpbGUzIiAmJgorCSgKKwkJZm9yIHAgaW4gJHBhdGhzCisJCWRvCisJCQllY2hvICJoZWxsbyAkcCIgPiRwIHx8IGV4aXQgMQorCQkJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUworCQkJdGhlbgorCQkJCWxuIC1zICJoZWxsbyAkcCIgJHtwfXN5bSB8fCBleGl0IDEKKwkJCWZpCisJCWRvbmUKKwkpICYmCisJZmluZCBwYXRoKiAhIC10eXBlIGQgLXByaW50IHwgeGFyZ3MgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZAorJworCisjIFNob3cgdGhlbSBhbmQgc2VlIHRoYXQgbWF0Y2hlcyB3aGF0IHdlIGV4cGVjdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgc3RhZ2Ugd2l0aCBnaXQgbHMtZmlsZXMgLS1zdGFnZScgJworCWdpdCBscy1maWxlcyAtLXN0YWdlID5jdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIGdpdCBscy1maWxlcyBvdXRwdXQgZm9yIGEga25vd24gdHJlZScgJworCSRleHBlY3RmaWx0ZXIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkxMDA2NDQgZjg3MjkwZjhlYjJjYmJlYTc4NTcyMTQ0NTlhMDczOTkyN2VhYjE1NCAwCXBhdGgwCisJMTIwMDAwIDE1YTk4NDMzYWUzMzExNGIwODVmM2ViM2JiMDNiODMyYjMxODBhMDEgMAlwYXRoMHN5bQorCTEwMDY0NCAzZmVmZjk0OWVkMDBhNjJkOWY3YWY5N2MxNWNkOGEzMDU5NWU3YWM3IDAJcGF0aDIvZmlsZTIKKwkxMjAwMDAgZDhjZTE2MWFkZGM1MTczODY3YTNjM2M3MzA5MjQzODhkYWVkYmMzOCAwCXBhdGgyL2ZpbGUyc3ltCisJMTAwNjQ0IDBhYTM0Y2FlNjhkMDg3ODU3OGFkMTE5Yzg2Y2EyYjVlZDViMjgzNzYgMAlwYXRoMy9maWxlMworCTEyMDAwMCA4NTk5MTAzOTY5YjQzYWZmN2U0MzBlZmVhNzljYTQ2MzY0NjY3OTRmIDAJcGF0aDMvZmlsZTNzeW0KKwkxMDA2NDQgMDBmYjU5MDhjYjk3YzI1NjRhOTc4M2MwYzY0MDg3MzMzYjNiNDY0ZiAwCXBhdGgzL3N1YnAzL2ZpbGUzCisJMTIwMDAwIDY2NDlhMWViZTllOWYxYzU1M2I2NmY1YTZlNzQxMzZhMDdjY2M1N2MgMAlwYXRoMy9zdWJwMy9maWxlM3N5bQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlJyAnCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBvYmplY3QgSUQgZm9yIGEga25vd24gdHJlZScgJworCXRlc3QgIiR0cmVlIiA9ICIkZXhwZWN0ZWR0cmVlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIHRyZWUgd2l0aCBnaXQgbHMtdHJlZScgJworICAgIGdpdCBscy10cmVlICR0cmVlID5jdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2dpdCBscy10cmVlIG91dHB1dCBmb3IgYSBrbm93biB0cmVlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJMTAwNjQ0IGJsb2IgZjg3MjkwZjhlYjJjYmJlYTc4NTcyMTQ0NTlhMDczOTkyN2VhYjE1NAlwYXRoMAorCTEyMDAwMCBibG9iIDE1YTk4NDMzYWUzMzExNGIwODVmM2ViM2JiMDNiODMyYjMxODBhMDEJcGF0aDBzeW0KKwkwNDAwMDAgdHJlZSA1OGEwOWMyM2UyY2ExNTIxOTNmMjc4NmUwNjk4NmI3YjY3MTJiZGJlCXBhdGgyCisJMDQwMDAwIHRyZWUgMjFhZTgyNjljYWNiZTU3YWUwOTEzOGRjYzNhMjg4N2Y5MDRkMDJiMwlwYXRoMworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKworIyBUaGlzIGNoYW5nZWQgaW4gbHMtdHJlZSBwYXRoc3BlYyBjaGFuZ2UgLS0gcmVjdXJzaXZlIGRvZXMKKyMgbm90IHNob3cgdHJlZSBub2RlcyBhbnltb3JlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB0cmVlIHdpdGggZ2l0IGxzLXRyZWUgLXInICcKKwlnaXQgbHMtdHJlZSAtciAkdHJlZSA+Y3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtdHJlZSAtciBvdXRwdXQgZm9yIGEga25vd24gdHJlZScgJworCSRleHBlY3RmaWx0ZXIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkxMDA2NDQgYmxvYiBmODcyOTBmOGViMmNiYmVhNzg1NzIxNDQ1OWEwNzM5OTI3ZWFiMTU0CXBhdGgwCisJMTIwMDAwIGJsb2IgMTVhOTg0MzNhZTMzMTE0YjA4NWYzZWIzYmIwM2I4MzJiMzE4MGEwMQlwYXRoMHN5bQorCTEwMDY0NCBibG9iIDNmZWZmOTQ5ZWQwMGE2MmQ5ZjdhZjk3YzE1Y2Q4YTMwNTk1ZTdhYzcJcGF0aDIvZmlsZTIKKwkxMjAwMDAgYmxvYiBkOGNlMTYxYWRkYzUxNzM4NjdhM2MzYzczMDkyNDM4OGRhZWRiYzM4CXBhdGgyL2ZpbGUyc3ltCisJMTAwNjQ0IGJsb2IgMGFhMzRjYWU2OGQwODc4NTc4YWQxMTljODZjYTJiNWVkNWIyODM3NglwYXRoMy9maWxlMworCTEyMDAwMCBibG9iIDg1OTkxMDM5NjliNDNhZmY3ZTQzMGVmZWE3OWNhNDYzNjQ2Njc5NGYJcGF0aDMvZmlsZTNzeW0KKwkxMDA2NDQgYmxvYiAwMGZiNTkwOGNiOTdjMjU2NGE5NzgzYzBjNjQwODczMzNiM2I0NjRmCXBhdGgzL3N1YnAzL2ZpbGUzCisJMTIwMDAwIGJsb2IgNjY0OWExZWJlOWU5ZjFjNTUzYjY2ZjVhNmU3NDEzNmEwN2NjYzU3YwlwYXRoMy9zdWJwMy9maWxlM3N5bQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKworIyBCdXQgd2l0aCAtciAtdCB3ZSBjYW4gaGF2ZSBib3RoLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB0cmVlIHdpdGggZ2l0IGxzLXRyZWUgLXIgLXQnICcKKwlnaXQgbHMtdHJlZSAtciAtdCAkdHJlZSA+Y3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdnaXQgbHMtdHJlZSAtciBvdXRwdXQgZm9yIGEga25vd24gdHJlZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTEwMDY0NCBibG9iIGY4NzI5MGY4ZWIyY2JiZWE3ODU3MjE0NDU5YTA3Mzk5MjdlYWIxNTQJcGF0aDAKKwkxMjAwMDAgYmxvYiAxNWE5ODQzM2FlMzMxMTRiMDg1ZjNlYjNiYjAzYjgzMmIzMTgwYTAxCXBhdGgwc3ltCisJMDQwMDAwIHRyZWUgNThhMDljMjNlMmNhMTUyMTkzZjI3ODZlMDY5ODZiN2I2NzEyYmRiZQlwYXRoMgorCTEwMDY0NCBibG9iIDNmZWZmOTQ5ZWQwMGE2MmQ5ZjdhZjk3YzE1Y2Q4YTMwNTk1ZTdhYzcJcGF0aDIvZmlsZTIKKwkxMjAwMDAgYmxvYiBkOGNlMTYxYWRkYzUxNzM4NjdhM2MzYzczMDkyNDM4OGRhZWRiYzM4CXBhdGgyL2ZpbGUyc3ltCisJMDQwMDAwIHRyZWUgMjFhZTgyNjljYWNiZTU3YWUwOTEzOGRjYzNhMjg4N2Y5MDRkMDJiMwlwYXRoMworCTEwMDY0NCBibG9iIDBhYTM0Y2FlNjhkMDg3ODU3OGFkMTE5Yzg2Y2EyYjVlZDViMjgzNzYJcGF0aDMvZmlsZTMKKwkxMjAwMDAgYmxvYiA4NTk5MTAzOTY5YjQzYWZmN2U0MzBlZmVhNzljYTQ2MzY0NjY3OTRmCXBhdGgzL2ZpbGUzc3ltCisJMDQwMDAwIHRyZWUgM2M1ZTUzOTlmM2EzMzNlZGRlY2NlN2E5Yjk0NjViNjNmNjVmNTFlMglwYXRoMy9zdWJwMworCTEwMDY0NCBibG9iIDAwZmI1OTA4Y2I5N2MyNTY0YTk3ODNjMGM2NDA4NzMzM2IzYjQ2NGYJcGF0aDMvc3VicDMvZmlsZTMKKwkxMjAwMDAgYmxvYiA2NjQ5YTFlYmU5ZTlmMWM1NTNiNjZmNWE2ZTc0MTM2YTA3Y2NjNTdjCXBhdGgzL3N1YnAzL2ZpbGUzc3ltCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHBhcnRpYWwgdHJlZSBvdXQgd2l0aCBnaXQgd3JpdGUtdHJlZSAtLXByZWZpeCcgJworCXB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUgLS1wcmVmaXg9cGF0aDMpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIG9iamVjdCBJRCBmb3IgYSBrbm93biB0cmVlJyAnCisJdGVzdCAiJHB0cmVlIiA9ICIkZXhwZWN0ZWRwdHJlZTEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgcGFydGlhbCB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlIC0tcHJlZml4JyAnCisJcHRyZWU9JChnaXQgd3JpdGUtdHJlZSAtLXByZWZpeD1wYXRoMy9zdWJwMykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgb2JqZWN0IElEIGZvciBhIGtub3duIHRyZWUnICcKKwl0ZXN0ICIkcHRyZWUiID0gIiRleHBlY3RlZHB0cmVlMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0IGludmFsaWQgb2JqZWN0cyBpbnRvIHRoZSBpbmRleCcgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwljYXQgPmJhZG9iamVjdHMgPDwtXEVPRiAmJgorCTEwMDY0NCBibG9iIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAJZGlyL2ZpbGUxCisJMTAwNjQ0IGJsb2IgMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAlkaXIvZmlsZTIKKwkxMDA2NDQgYmxvYiAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCWRpci9maWxlMworCTEwMDY0NCBibG9iIDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAJZGlyL2ZpbGU0CisJMTAwNjQ0IGJsb2IgNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAlkaXIvZmlsZTUKKwlFT0YKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8YmFkb2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHRoaXMgdHJlZSB3aXRob3V0IC0tbWlzc2luZy1vaycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3cml0ZS10cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgdGhpcyB0cmVlIHdpdGggLS1taXNzaW5nLW9rJyAnCisJZ2l0IHdyaXRlLXRyZWUgLS1taXNzaW5nLW9rCisnCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYWQtdHJlZSBmb2xsb3dlZCBieSB3cml0ZS10cmVlIHNob3VsZCBiZSBpZGVtcG90ZW50JyAnCisJcm0gLWYgLmdpdC9pbmRleAorCWdpdCByZWFkLXRyZWUgJHRyZWUgJiYKKwl0ZXN0IC1mIC5naXQvaW5kZXggJiYKKwluZXd0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJdGVzdCAiJG5ld3RyZWUiID0gIiR0cmVlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBnaXQgZGlmZi1maWxlcyBvdXRwdXQgZm9yIGEga25vdyBjYWNoZS93b3JrIHRyZWUgc3RhdGUnICcKKwkkZXhwZWN0ZmlsdGVyID5leHBlY3RlZCA8PFxFT0YgJiYKKzoxMDA2NDQgMTAwNjQ0IGY4NzI5MGY4ZWIyY2JiZWE3ODU3MjE0NDU5YTA3Mzk5MjdlYWIxNTQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCXBhdGgwCis6MTIwMDAwIDEyMDAwMCAxNWE5ODQzM2FlMzMxMTRiMDg1ZjNlYjNiYjAzYjgzMmIzMTgwYTAxIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTQlwYXRoMHN5bQorOjEwMDY0NCAxMDA2NDQgM2ZlZmY5NDllZDAwYTYyZDlmN2FmOTdjMTVjZDhhMzA1OTVlN2FjNyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE0JcGF0aDIvZmlsZTIKKzoxMjAwMDAgMTIwMDAwIGQ4Y2UxNjFhZGRjNTE3Mzg2N2EzYzNjNzMwOTI0Mzg4ZGFlZGJjMzggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCXBhdGgyL2ZpbGUyc3ltCis6MTAwNjQ0IDEwMDY0NCAwYWEzNGNhZTY4ZDA4Nzg1NzhhZDExOWM4NmNhMmI1ZWQ1YjI4Mzc2IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTQlwYXRoMy9maWxlMworOjEyMDAwMCAxMjAwMDAgODU5OTEwMzk2OWI0M2FmZjdlNDMwZWZlYTc5Y2E0NjM2NDY2Nzk0ZiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE0JcGF0aDMvZmlsZTNzeW0KKzoxMDA2NDQgMTAwNjQ0IDAwZmI1OTA4Y2I5N2MyNTY0YTk3ODNjMGM2NDA4NzMzM2IzYjQ2NGYgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCXBhdGgzL3N1YnAzL2ZpbGUzCis6MTIwMDAwIDEyMDAwMCA2NjQ5YTFlYmU5ZTlmMWM1NTNiNjZmNWE2ZTc0MTM2YTA3Y2NjNTdjIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTQlwYXRoMy9zdWJwMy9maWxlM3N5bQorRU9GCisJZ2l0IGRpZmYtZmlsZXMgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBjdXJyZW50IGV4cGVjdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZGlmZiBhZnRlciBjaGVja291dCBhbmQgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gnICcKKwlnaXQgZGlmZi1maWxlcyA+Y3VycmVudCAmJgorCWNtcCAtcyBjdXJyZW50IC9kZXYvbnVsbAorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitQPSRleHBlY3RlZHRyZWUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdC10cmVlIHJlY29yZHMgdGhlIGNvcnJlY3QgdHJlZSBpbiBhIGNvbW1pdCcgJworCWNvbW1pdDA9JChlY2hvIE5PIHwgZ2l0IGNvbW1pdC10cmVlICRQKSAmJgorCXRyZWU9JChnaXQgc2hvdyAtLXByZXR0eT1yYXcgJGNvbW1pdDAgfAorCQkgc2VkIC1uIC1lICJzL150cmVlIC8vcCIgLWUgIi9eYXV0aG9yIC9xIikgJiYKKwl0ZXN0ICJ6JHRyZWUiID0gInokUCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdC10cmVlIHJlY29yZHMgdGhlIGNvcnJlY3QgcGFyZW50IGluIGEgY29tbWl0JyAnCisJY29tbWl0MT0kKGVjaG8gTk8gfCBnaXQgY29tbWl0LXRyZWUgJFAgLXAgJGNvbW1pdDApICYmCisJcGFyZW50PSQoZ2l0IHNob3cgLS1wcmV0dHk9cmF3ICRjb21taXQxIHwKKwkJc2VkIC1uIC1lICJzL15wYXJlbnQgLy9wIiAtZSAiL15hdXRob3IgL3EiKSAmJgorCXRlc3QgInokY29tbWl0MCIgPSAieiRwYXJlbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQtdHJlZSBvbWl0cyBkdXBsaWNhdGVkIHBhcmVudCBpbiBhIGNvbW1pdCcgJworCWNvbW1pdDI9JChlY2hvIE5PIHwgZ2l0IGNvbW1pdC10cmVlICRQIC1wICRjb21taXQwIC1wICRjb21taXQwKSAmJgorCSAgICAgcGFyZW50PSQoZ2l0IHNob3cgLS1wcmV0dHk9cmF3ICRjb21taXQyIHwKKwkJc2VkIC1uIC1lICJzL15wYXJlbnQgLy9wIiAtZSAiL15hdXRob3IgL3EiIHwKKwkJc29ydCAtdSkgJiYKKwl0ZXN0ICJ6JGNvbW1pdDAiID0gInokcGFyZW50IiAmJgorCW51bXBhcmVudD0kKGdpdCBzaG93IC0tcHJldHR5PXJhdyAkY29tbWl0MiB8CisJCXNlZCAtbiAtZSAicy9ecGFyZW50IC8vcCIgLWUgIi9eYXV0aG9yIC9xIiB8CisJCXdjIC1sKSAmJgorCXRlc3QgJG51bXBhcmVudCA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IEQvRiBjb25mbGljdCcgJworCW12IHBhdGgwIHRtcCAmJgorCW12IHBhdGgyIHBhdGgwICYmCisJbXYgdG1wIHBhdGgyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlcGxhY2UgcGF0aDIgcGF0aDAvZmlsZTIgJiYKKwludW1wYXRoMD0kKGdpdCBscy1maWxlcyBwYXRoMCB8IHdjIC1sKSAmJgorCXRlc3QgJG51bXBhdGgwID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJ5IGxvbmcgbmFtZSBpbiB0aGUgaW5kZXggaGFuZGxlZCBzYW5lbHknICcKKworCWE9YSAmJiAjIDEKKwlhPSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhICYmICMgMTYKKwlhPSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhICYmICMgMjU2CisJYT0kYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSAmJiAjIDQwOTYKKwlhPSR7YX1xICYmCisKKwk+cGF0aDQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGg0ICYmCisJKAorCQlnaXQgbHMtZmlsZXMgLXMgcGF0aDQgfAorCQlzZWQgLWUgInMvCS4qLwkvIiB8CisJCXRyIC1kICJcMDEyIgorCQllY2hvICIkYSIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlsZW49JChnaXQgbHMtZmlsZXMgImEqIiB8IHdjIC1jKSAmJgorCXRlc3QgJGxlbiA9IDQwOTgKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDAxLWluaXQuc2ggYi90L3QwMDAxLWluaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWQ2NjQxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDEtaW5pdC5zaApAQCAtMCwwICsxLDQyMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBpbml0JworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfY29uZmlnICgpIHsKKwlpZiB0ZXN0IC1kICIkMSIgJiYgdGVzdCAtZiAiJDEvY29uZmlnIiAmJiB0ZXN0IC1kICIkMS9yZWZzIgorCXRoZW4KKwkJOiBoYXBweQorCWVsc2UKKwkJZWNobyAiZXhwZWN0ZWQgYSBkaXJlY3RvcnkgJDEsIGEgZmlsZSAkMS9jb25maWcgYW5kICQxL3JlZnMiCisJCXJldHVybiAxCisJZmkKKwliYXJlPSQoR0lUX0NPTkZJRz0iJDEvY29uZmlnIiBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmJhcmUpCisJd29ya3RyZWU9JChHSVRfQ09ORklHPSIkMS9jb25maWciIGdpdCBjb25maWcgY29yZS53b3JrdHJlZSkgfHwKKwl3b3JrdHJlZT11bnNldAorCisJdGVzdCAiJGJhcmUiID0gIiQyIiAmJiB0ZXN0ICIkd29ya3RyZWUiID0gIiQzIiB8fCB7CisJCWVjaG8gImV4cGVjdGVkIGJhcmU9JDIgd29ya3RyZWU9JDMiCisJCWVjaG8gIiAgICAgZ290IGJhcmU9JGJhcmUgd29ya3RyZWU9JHdvcmt0cmVlIgorCQlyZXR1cm4gMQorCX0KK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4nICcKKwkoCisJCXNhbmVfdW5zZXQgR0lUX0RJUiBHSVRfV09SS19UUkVFICYmCisJCW1rZGlyIHBsYWluICYmCisJCWNkIHBsYWluICYmCisJCWdpdCBpbml0CisJKSAmJgorCWNoZWNrX2NvbmZpZyBwbGFpbi8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluIG5lc3RlZCBpbiBiYXJlJyAnCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSAmJgorCQlnaXQgaW5pdCAtLWJhcmUgYmFyZS1hbmNlc3Rvci5naXQgJiYKKwkJY2QgYmFyZS1hbmNlc3Rvci5naXQgJiYKKwkJbWtkaXIgcGxhaW4tbmVzdGVkICYmCisJCWNkIHBsYWluLW5lc3RlZCAmJgorCQlnaXQgaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgYmFyZS1hbmNlc3Rvci5naXQvcGxhaW4tbmVzdGVkLy5naXQgZmFsc2UgdW5zZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4gdGhyb3VnaCBhbGlhc2VkIGNvbW1hbmQsIG91dHNpZGUgYW55IGdpdCByZXBvJyAnCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSAmJgorCQlIT01FPSQocHdkKS9hbGlhcy1jb25maWcgJiYKKwkJZXhwb3J0IEhPTUUgJiYKKwkJbWtkaXIgYWxpYXMtY29uZmlnICYmCisJCWVjaG8gIlthbGlhc10gYWxpYXNlZGluaXQgPSBpbml0IiA+YWxpYXMtY29uZmlnLy5naXRjb25maWcgJiYKKworCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0kKHB3ZCkgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisKKwkJbWtkaXIgcGxhaW4tYWxpYXNlZCAmJgorCQljZCBwbGFpbi1hbGlhc2VkICYmCisJCWdpdCBhbGlhc2VkaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgcGxhaW4tYWxpYXNlZC8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3BsYWluIG5lc3RlZCB0aHJvdWdoIGFsaWFzZWQgY29tbWFuZCcgJworCSgKKwkJc2FuZV91bnNldCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwkJZ2l0IGluaXQgcGxhaW4tYW5jZXN0b3ItYWxpYXNlZCAmJgorCQljZCBwbGFpbi1hbmNlc3Rvci1hbGlhc2VkICYmCisJCWVjaG8gIlthbGlhc10gYWxpYXNlZGluaXQgPSBpbml0IiA+Pi5naXQvY29uZmlnICYmCisJCW1rZGlyIHBsYWluLW5lc3RlZCAmJgorCQljZCBwbGFpbi1uZXN0ZWQgJiYKKwkJZ2l0IGFsaWFzZWRpbml0CisJKSAmJgorCWNoZWNrX2NvbmZpZyBwbGFpbi1hbmNlc3Rvci1hbGlhc2VkL3BsYWluLW5lc3RlZC8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3BsYWluIG5lc3RlZCBpbiBiYXJlIHRocm91Z2ggYWxpYXNlZCBjb21tYW5kJyAnCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSAmJgorCQlnaXQgaW5pdCAtLWJhcmUgYmFyZS1hbmNlc3Rvci1hbGlhc2VkLmdpdCAmJgorCQljZCBiYXJlLWFuY2VzdG9yLWFsaWFzZWQuZ2l0ICYmCisJCWVjaG8gIlthbGlhc10gYWxpYXNlZGluaXQgPSBpbml0IiA+PmNvbmZpZyAmJgorCQlta2RpciBwbGFpbi1uZXN0ZWQgJiYKKwkJY2QgcGxhaW4tbmVzdGVkICYmCisJCWdpdCBhbGlhc2VkaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgYmFyZS1hbmNlc3Rvci1hbGlhc2VkLmdpdC9wbGFpbi1uZXN0ZWQvLmdpdCBmYWxzZSB1bnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiB3aXRoIEdJVF9XT1JLX1RSRUUnICcKKwlpZiAoCisJCXNhbmVfdW5zZXQgR0lUX0RJUiAmJgorCQlta2RpciBwbGFpbi13dCAmJgorCQljZCBwbGFpbi13dCAmJgorCQlHSVRfV09SS19UUkVFPSQocHdkKSBnaXQgaW5pdAorCSkKKwl0aGVuCisJCWVjaG8gU2hvdWxkIGhhdmUgZmFpbGVkIC0tIEdJVF9XT1JLX1RSRUUgc2hvdWxkIG5vdCBiZSB1c2VkCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4gYmFyZScgJworCSgKKwkJc2FuZV91bnNldCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgR0lUX0NPTkZJRyAmJgorCQlta2RpciBwbGFpbi1iYXJlLTEgJiYKKwkJY2QgcGxhaW4tYmFyZS0xICYmCisJCWdpdCAtLWJhcmUgaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgcGxhaW4tYmFyZS0xIHRydWUgdW5zZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4gYmFyZSB3aXRoIEdJVF9XT1JLX1RSRUUnICcKKwlpZiAoCisJCXNhbmVfdW5zZXQgR0lUX0RJUiBHSVRfQ09ORklHICYmCisJCW1rZGlyIHBsYWluLWJhcmUtMiAmJgorCQljZCBwbGFpbi1iYXJlLTIgJiYKKwkJR0lUX1dPUktfVFJFRT0kKHB3ZCkgZ2l0IC0tYmFyZSBpbml0CisJKQorCXRoZW4KKwkJZWNobyBTaG91bGQgaGF2ZSBmYWlsZWQgLS0gR0lUX1dPUktfVFJFRSBzaG91bGQgbm90IGJlIHVzZWQKKwkJZmFsc2UKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElSIGJhcmUnICcKKworCSgKKwkJc2FuZV91bnNldCBHSVRfQ09ORklHICYmCisJCW1rZGlyIGdpdC1kaXItYmFyZS5naXQgJiYKKwkJR0lUX0RJUj1naXQtZGlyLWJhcmUuZ2l0IGdpdCBpbml0CisJKSAmJgorCWNoZWNrX2NvbmZpZyBnaXQtZGlyLWJhcmUuZ2l0IHRydWUgdW5zZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCAtLWJhcmUnICcKKworCSgKKwkJc2FuZV91bnNldCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgR0lUX0NPTkZJRyAmJgorCQlta2RpciBpbml0LWJhcmUuZ2l0ICYmCisJCWNkIGluaXQtYmFyZS5naXQgJiYKKwkJZ2l0IGluaXQgLS1iYXJlCisJKSAmJgorCWNoZWNrX2NvbmZpZyBpbml0LWJhcmUuZ2l0IHRydWUgdW5zZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0RJUiBub24tYmFyZScgJworCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9DT05GSUcgJiYKKwkJbWtkaXIgbm9uLWJhcmUgJiYKKwkJY2Qgbm9uLWJhcmUgJiYKKwkJR0lUX0RJUj0uZ2l0IGdpdCBpbml0CisJKSAmJgorCWNoZWNrX2NvbmZpZyBub24tYmFyZS8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESVIgJiBHSVRfV09SS19UUkVFICgxKScgJworCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9DT05GSUcgJiYKKwkJbWtkaXIgZ2l0LWRpci13dC0xLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPSQocHdkKSBHSVRfRElSPWdpdC1kaXItd3QtMS5naXQgZ2l0IGluaXQKKwkpICYmCisJY2hlY2tfY29uZmlnIGdpdC1kaXItd3QtMS5naXQgZmFsc2UgIiQocHdkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0RJUiAmIEdJVF9XT1JLX1RSRUUgKDIpJyAnCisKKwlpZiAoCisJCXNhbmVfdW5zZXQgR0lUX0NPTkZJRyAmJgorCQlta2RpciBnaXQtZGlyLXd0LTIuZ2l0ICYmCisJCUdJVF9XT1JLX1RSRUU9JChwd2QpIEdJVF9ESVI9Z2l0LWRpci13dC0yLmdpdCBnaXQgLS1iYXJlIGluaXQKKwkpCisJdGhlbgorCQllY2hvIFNob3VsZCBoYXZlIGZhaWxlZCAtLSAtLWJhcmUgc2hvdWxkIG5vdCBiZSB1c2VkCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVpbml0JyAnCisKKwkoCisJCXNhbmVfdW5zZXQgR0lUX0NPTkZJRyBHSVRfV09SS19UUkVFIEdJVF9DT05GSUcgJiYKKworCQlta2RpciBhZ2FpbiAmJgorCQljZCBhZ2FpbiAmJgorCQlnaXQgaW5pdCA+b3V0MSAyPmVycjEgJiYKKwkJZ2l0IGluaXQgPm91dDIgMj5lcnIyCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIkluaXRpYWxpemVkIGVtcHR5IiBhZ2Fpbi9vdXQxICYmCisJdGVzdF9pMThuZ3JlcCAiUmVpbml0aWFsaXplZCBleGlzdGluZyIgYWdhaW4vb3V0MiAmJgorCT5hZ2Fpbi9lbXB0eSAmJgorCXRlc3RfaTE4bmNtcCBhZ2Fpbi9lbXB0eSBhZ2Fpbi9lcnIxICYmCisJdGVzdF9pMThuY21wIGFnYWluL2VtcHR5IGFnYWluL2VycjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCB3aXRoIC0tdGVtcGxhdGUnICcKKwlta2RpciB0ZW1wbGF0ZS1zb3VyY2UgJiYKKwllY2hvIGNvbnRlbnQgPnRlbXBsYXRlLXNvdXJjZS9maWxlICYmCisJKAorCQlta2RpciB0ZW1wbGF0ZS1jdXN0b20gJiYKKwkJY2QgdGVtcGxhdGUtY3VzdG9tICYmCisJCWdpdCBpbml0IC0tdGVtcGxhdGU9Li4vdGVtcGxhdGUtc291cmNlCisJKSAmJgorCXRlc3RfY21wIHRlbXBsYXRlLXNvdXJjZS9maWxlIHRlbXBsYXRlLWN1c3RvbS8uZ2l0L2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCB3aXRoIC0tdGVtcGxhdGUgKGJsYW5rKScgJworCSgKKwkJbWtkaXIgdGVtcGxhdGUtcGxhaW4gJiYKKwkJY2QgdGVtcGxhdGUtcGxhaW4gJiYKKwkJZ2l0IGluaXQKKwkpICYmCisJdGVzdCAtZiB0ZW1wbGF0ZS1wbGFpbi8uZ2l0L2luZm8vZXhjbHVkZSAmJgorCSgKKwkJbWtkaXIgdGVtcGxhdGUtYmxhbmsgJiYKKwkJY2QgdGVtcGxhdGUtYmxhbmsgJiYKKwkJZ2l0IGluaXQgLS10ZW1wbGF0ZT0KKwkpICYmCisJISB0ZXN0IC1mIHRlbXBsYXRlLWJsYW5rLy5naXQvaW5mby9leGNsdWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCBpbml0LnRlbXBsYXRlZGlyIHNldCcgJworCW1rZGlyIHRlbXBsYXRlZGlyLXNvdXJjZSAmJgorCWVjaG8gQ29udGVudCA+dGVtcGxhdGVkaXItc291cmNlL2ZpbGUgJiYKKwkoCisJCXRlc3RfY29uZmlnPSIke0hPTUV9Ly5naXRjb25maWciICYmCisJCWdpdCBjb25maWcgLWYgIiR0ZXN0X2NvbmZpZyIgIGluaXQudGVtcGxhdGVkaXIgIiR7SE9NRX0vdGVtcGxhdGVkaXItc291cmNlIiAmJgorCQlta2RpciB0ZW1wbGF0ZWRpci1zZXQgJiYKKwkJY2QgdGVtcGxhdGVkaXItc2V0ICYmCisJCXNhbmVfdW5zZXQgR0lUX1RFTVBMQVRFX0RJUiAmJgorCQlOT19TRVRfR0lUX1RFTVBMQVRFX0RJUj10ICYmCisJCWV4cG9ydCBOT19TRVRfR0lUX1RFTVBMQVRFX0RJUiAmJgorCQlnaXQgaW5pdAorCSkgJiYKKwl0ZXN0X2NtcCB0ZW1wbGF0ZWRpci1zb3VyY2UvZmlsZSB0ZW1wbGF0ZWRpci1zZXQvLmdpdC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgLS1iYXJlLy0tc2hhcmVkIG92ZXJyaWRlcyBzeXN0ZW0vZ2xvYmFsIGNvbmZpZycgJworCSgKKwkJdGVzdF9jb25maWc9IiRIT01FIi8uZ2l0Y29uZmlnICYmCisJCWdpdCBjb25maWcgLWYgIiR0ZXN0X2NvbmZpZyIgY29yZS5iYXJlIGZhbHNlICYmCisJCWdpdCBjb25maWcgLWYgIiR0ZXN0X2NvbmZpZyIgY29yZS5zaGFyZWRSZXBvc2l0b3J5IDA2NDAgJiYKKwkJbWtkaXIgaW5pdC1iYXJlLXNoYXJlZC1vdmVycmlkZSAmJgorCQljZCBpbml0LWJhcmUtc2hhcmVkLW92ZXJyaWRlICYmCisJCWdpdCBpbml0IC0tYmFyZSAtLXNoYXJlZD0wNjY2CisJKSAmJgorCWNoZWNrX2NvbmZpZyBpbml0LWJhcmUtc2hhcmVkLW92ZXJyaWRlIHRydWUgdW5zZXQgJiYKKwl0ZXN0IHgwNjY2ID0gXAorCXhgZ2l0IGNvbmZpZyAtZiBpbml0LWJhcmUtc2hhcmVkLW92ZXJyaWRlL2NvbmZpZyBjb3JlLnNoYXJlZFJlcG9zaXRvcnlgCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgaG9ub3JzIGdsb2JhbCBjb3JlLnNoYXJlZFJlcG9zaXRvcnknICcKKwkoCisJCXRlc3RfY29uZmlnPSIkSE9NRSIvLmdpdGNvbmZpZyAmJgorCQlnaXQgY29uZmlnIC1mICIkdGVzdF9jb25maWciIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSAwNjY2ICYmCisJCW1rZGlyIHNoYXJlZC1ob25vci1nbG9iYWwgJiYKKwkJY2Qgc2hhcmVkLWhvbm9yLWdsb2JhbCAmJgorCQlnaXQgaW5pdAorCSkgJiYKKwl0ZXN0IHgwNjY2ID0gXAorCXhgZ2l0IGNvbmZpZyAtZiBzaGFyZWQtaG9ub3ItZ2xvYmFsLy5naXQvY29uZmlnIGNvcmUuc2hhcmVkUmVwb3NpdG9yeWAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCByZWplY3RzIGluc2FuZWx5IGxvbmcgLS10ZW1wbGF0ZScgJworCSgKKwkJaW5zYW5lPSQocHJpbnRmICJ4JTA5OTk5ZHgiIDEpICYmCisJCW1rZGlyIHRlc3QgJiYKKwkJY2QgdGVzdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgaW5pdCAtLXRlbXBsYXRlPSRpbnNhbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgY3JlYXRlcyBhIG5ldyBkaXJlY3RvcnknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJKAorCQlnaXQgaW5pdCBuZXdkaXIgJiYKKwkJdGVzdCAtZCBuZXdkaXIvLmdpdC9yZWZzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGNyZWF0ZXMgYSBuZXcgYmFyZSBkaXJlY3RvcnknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJKAorCQlnaXQgaW5pdCAtLWJhcmUgbmV3ZGlyICYmCisJCXRlc3QgLWQgbmV3ZGlyL3JlZnMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgcmVjcmVhdGVzIGEgZGlyZWN0b3J5JyAnCisJcm0gLWZyIG5ld2RpciAmJgorCSgKKwkJbWtkaXIgbmV3ZGlyICYmCisJCWdpdCBpbml0IG5ld2RpciAmJgorCQl0ZXN0IC1kIG5ld2Rpci8uZ2l0L3JlZnMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgcmVjcmVhdGVzIGEgbmV3IGJhcmUgZGlyZWN0b3J5JyAnCisJcm0gLWZyIG5ld2RpciAmJgorCSgKKwkJbWtkaXIgbmV3ZGlyICYmCisJCWdpdCBpbml0IC0tYmFyZSBuZXdkaXIgJiYKKwkJdGVzdCAtZCBuZXdkaXIvcmVmcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBjcmVhdGVzIGEgbmV3IGRlZXAgZGlyZWN0b3J5JyAnCisJcm0gLWZyIG5ld2RpciAmJgorCWdpdCBpbml0IG5ld2Rpci9hL2IvYyAmJgorCXRlc3QgLWQgbmV3ZGlyL2EvYi9jLy5naXQvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnaW5pdCBjcmVhdGVzIGEgbmV3IGRlZXAgZGlyZWN0b3J5ICh1bWFzayB2cy4gc2hhcmVkKScgJworCXJtIC1mciBuZXdkaXIgJiYKKwkoCisJCSMgTGVhZGluZyBkaXJlY3RvcmllcyBzaG91bGQgaG9ub3IgdW1hc2sgd2hpbGUKKwkJIyB0aGUgcmVwb3NpdG9yeSBpdHNlbGYgc2hvdWxkIGZvbGxvdyAic2hhcmVkIgorCQl1bWFzayAwMDIgJiYKKwkJZ2l0IGluaXQgLS1iYXJlIC0tc2hhcmVkPTA2NjAgbmV3ZGlyL2EvYi9jICYmCisJCXRlc3QgLWQgbmV3ZGlyL2EvYi9jL3JlZnMgJiYKKwkJbHMgLWxkIG5ld2Rpci9hIG5ld2Rpci9hL2IgPiBsc2FiLm91dCAmJgorCQkhIGdyZXAgLXYgIl5kcnd4cndbc3hdci14IiBsc2FiLm91dCAmJgorCQlscyAtbGQgbmV3ZGlyL2EvYi9jID4gbHNjLm91dCAmJgorCQkhIGdyZXAgLXYgIl5kcnd4cndbc3hdLS0tIiBsc2Mub3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IG5vdGljZXMgRUVYSVNUICgxKScgJworCXJtIC1mciBuZXdkaXIgJiYKKwkoCisJCT5uZXdkaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluaXQgbmV3ZGlyICYmCisJCXRlc3QgLWYgbmV3ZGlyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IG5vdGljZXMgRUVYSVNUICgyKScgJworCXJtIC1mciBuZXdkaXIgJiYKKwkoCisJCW1rZGlyIG5ld2RpciAmJgorCQk+bmV3ZGlyL2EKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluaXQgbmV3ZGlyL2EvYiAmJgorCQl0ZXN0IC1mIG5ld2Rpci9hCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ2luaXQgbm90aWNlcyBFUEVSTScgJworCXJtIC1mciBuZXdkaXIgJiYKKwkoCisJCW1rZGlyIG5ld2RpciAmJgorCQljaG1vZCAtdyBuZXdkaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluaXQgbmV3ZGlyL2EvYgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBjcmVhdGVzIGEgbmV3IGJhcmUgZGlyZWN0b3J5IHdpdGggZ2xvYmFsIC0tYmFyZScgJworCXJtIC1yZiBuZXdkaXIgJiYKKwlnaXQgLS1iYXJlIGluaXQgbmV3ZGlyICYmCisJdGVzdCAtZCBuZXdkaXIvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHByZWZlcnMgY29tbWFuZCBsaW5lIHRvIEdJVF9ESVInICcKKwlybSAtcmYgbmV3ZGlyICYmCisJbWtkaXIgb3RoZXJkaXIgJiYKKwlHSVRfRElSPW90aGVyZGlyIGdpdCAtLWJhcmUgaW5pdCBuZXdkaXIgJiYKKwl0ZXN0IC1kIG5ld2Rpci9yZWZzICYmCisJISB0ZXN0IC1kIG90aGVyZGlyL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCB3aXRoIHNlcGFyYXRlIGdpdGRpcicgJworCXJtIC1yZiBuZXdkaXIgJiYKKwlnaXQgaW5pdCAtLXNlcGFyYXRlLWdpdC1kaXIgcmVhbGdpdGRpciBuZXdkaXIgJiYKKwllY2hvICJnaXRkaXI6IGBwd2RgL3JlYWxnaXRkaXIiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG5ld2Rpci8uZ2l0ICYmCisJdGVzdCAtZCByZWFsZ2l0ZGlyL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtaW5pdCB0byB1cGRhdGUgZ2l0IGxpbmsnICcKKwkoCisJY2QgbmV3ZGlyICYmCisJZ2l0IGluaXQgLS1zZXBhcmF0ZS1naXQtZGlyIC4uL3N1cnJlYWxnaXRkaXIKKwkpICYmCisJZWNobyAiZ2l0ZGlyOiBgcHdkYC9zdXJyZWFsZ2l0ZGlyIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBuZXdkaXIvLmdpdCAmJgorCXRlc3QgLWQgc3VycmVhbGdpdGRpci9yZWZzICYmCisJISB0ZXN0IC1kIHJlYWxnaXRkaXIvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1pbml0IHRvIG1vdmUgZ2l0ZGlyJyAnCisJcm0gLXJmIG5ld2RpciByZWFsZ2l0ZGlyIHN1cnJlYWxnaXRkaXIgJiYKKwlnaXQgaW5pdCBuZXdkaXIgJiYKKwkoCisJY2QgbmV3ZGlyICYmCisJZ2l0IGluaXQgLS1zZXBhcmF0ZS1naXQtZGlyIC4uL3JlYWxnaXRkaXIKKwkpICYmCisJZWNobyAiZ2l0ZGlyOiBgcHdkYC9yZWFsZ2l0ZGlyIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBuZXdkaXIvLmdpdCAmJgorCXRlc3QgLWQgcmVhbGdpdGRpci9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3JlLWluaXQgdG8gbW92ZSBnaXRkaXIgc3ltbGluaycgJworCXJtIC1yZiBuZXdkaXIgcmVhbGdpdGRpciAmJgorCWdpdCBpbml0IG5ld2RpciAmJgorCSgKKwljZCBuZXdkaXIgJiYKKwltdiAuZ2l0IGhlcmUgJiYKKwlsbiAtcyBoZXJlIC5naXQgJiYKKwlnaXQgaW5pdCAtLXNlcGFyYXRlLWdpdC1kaXIgLi4vcmVhbGdpdGRpcgorCSkgJiYKKwllY2hvICJnaXRkaXI6IGBwd2RgL3JlYWxnaXRkaXIiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG5ld2Rpci8uZ2l0ICYmCisJdGVzdCAtZCByZWFsZ2l0ZGlyL3JlZnMgJiYKKwkhIHRlc3QgLWQgbmV3ZGlyL2hlcmUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDAyLWdpdGZpbGUuc2ggYi90L3QwMDAyLWdpdGZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2IxNDQyNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDItZ2l0ZmlsZS5zaApAQCAtMCwwICsxLDEwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy5naXQgZmlsZQorCitWZXJpZnkgdGhhdCBwbHVtYmluZyBjb21tYW5kcyB3b3JrIHdoZW4gLmdpdCBpcyBhIGZpbGUKKycKKy4gLi90ZXN0LWxpYi5zaAorCitvYmpwYXRoKCkgeworICAgIGVjaG8gIiQxIiB8IHNlZCAtZSAnc3xcKC4uXCl8XDEvfCcKK30KKworb2JqY2soKSB7CisJcD0kKG9ianBhdGggIiQxIikKKwlpZiB0ZXN0ICEgLWYgIiRSRUFML29iamVjdHMvJHAiCisJdGhlbgorCQllY2hvICJPYmplY3Qgbm90IGZvdW5kOiAkUkVBTC9vYmplY3RzLyRwIgorCQlmYWxzZQorCWZpCit9CisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBzZXR1cCcgJworCVJFQUw9IiQocHdkKS8ucmVhbCIgJiYKKwltdiAuZ2l0ICIkUkVBTCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFkIHNldHVwOiBpbnZhbGlkIC5naXQgZmlsZSBmb3JtYXQnICcKKwllY2hvICJnaXRkaXIgJFJFQUwiID4uZ2l0ICYmCisJaWYgZ2l0IHJldi1wYXJzZSAyPi5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgYWNjZXB0ZWQgYW4gaW52YWxpZCAuZ2l0IGZpbGUiCisJCWZhbHNlCisJZmkgJiYKKwlpZiAhIGdyZXAgIkludmFsaWQgZ2l0ZmlsZSBmb3JtYXQiIC5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgcmV0dXJuZWQgd3JvbmcgZXJyb3IiCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFkIHNldHVwOiBpbnZhbGlkIC5naXQgZmlsZSBwYXRoJyAnCisJZWNobyAiZ2l0ZGlyOiAkUkVBTC5ub3QiID4uZ2l0ICYmCisJaWYgZ2l0IHJldi1wYXJzZSAyPi5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgYWNjZXB0ZWQgYW4gaW52YWxpZCAuZ2l0IGZpbGUgcGF0aCIKKwkJZmFsc2UKKwlmaSAmJgorCWlmICEgZ3JlcCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiIC5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgcmV0dXJuZWQgd3JvbmcgZXJyb3IiCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWwgc2V0dXAgKyBjaGVjayByZXYtcGFyc2UgLS1naXQtZGlyJyAnCisJZWNobyAiZ2l0ZGlyOiAkUkVBTCIgPi5naXQgJiYKKwl0ZXN0ICIkUkVBTCIgPSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGhhc2gtb2JqZWN0JyAnCisJZWNobyAiZm9vIiA+YmFyICYmCisJU0hBPSQoY2F0IGJhciB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY2F0LWZpbGUnICcKKwlnaXQgY2F0LWZpbGUgYmxvYiAkU0hBID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBiYXIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHVwZGF0ZS1pbmRleCcgJworCWlmIHRlc3QgLWYgIiRSRUFML2luZGV4IgorCXRoZW4KKwkJZWNobyAiSG1tLCAkUkVBTC9pbmRleCBleGlzdHM/IgorCQlmYWxzZQorCWZpICYmCisJcm0gLWYgIiRSRUFML29iamVjdHMvJChvYmpwYXRoICRTSEEpIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYmFyICYmCisJaWYgISB0ZXN0IC1mICIkUkVBTC9pbmRleCIKKwl0aGVuCisJCWVjaG8gIiRSRUFML2luZGV4IG5vdCBmb3VuZCIKKwkJZmFsc2UKKwlmaSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd3JpdGUtdHJlZScgJworCVNIQT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29tbWl0LXRyZWUnICcKKwlTSEE9JChlY2hvICJjb21taXQgYmFyIiB8IGdpdCBjb21taXQtdHJlZSAkU0hBKSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcmV2LWxpc3QnICcKKwllY2hvICRTSEEgPiIkUkVBTC9IRUFEIiAmJgorCXRlc3QgIiRTSEEiID0gIiQoZ2l0IHJldi1saXN0IEhFQUQpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDMtYXR0cmlidXRlcy5zaCBiL3QvdDAwMDMtYXR0cmlidXRlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZWJjNDVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwMy1hdHRyaWJ1dGVzLnNoCkBAIC0wLDAgKzEsMjM1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj1naXRhdHRyaWJ1dGVzCisKKy4gLi90ZXN0LWxpYi5zaAorCithdHRyX2NoZWNrICgpIHsKKwlwYXRoPSIkMSIgZXhwZWN0PSIkMiIKKworCWdpdCAkMyBjaGVjay1hdHRyIHRlc3QgLS0gIiRwYXRoIiA+YWN0dWFsIDI+ZXJyICYmCisJZWNobyAiJHBhdGg6IHRlc3Q6ICQyIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCit9CisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciAtcCBhL2IvZCBhL2MgYiAmJgorCSgKKwkJZWNobyAiW2F0dHJdbm90ZXN0ICF0ZXN0IgorCQllY2hvICJmCXRlc3Q9ZiIKKwkJZWNobyAiYS9pIHRlc3Q9YS9pIgorCQllY2hvICJvbm9mZiB0ZXN0IC10ZXN0IgorCQllY2hvICJvZmZvbiAtdGVzdCB0ZXN0IgorCQllY2hvICJubyBub3Rlc3QiCisJCWVjaG8gIkEvZS9GIHRlc3Q9QS9lL0YiCisJKSA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkoCisJCWVjaG8gImcgdGVzdD1hL2ciICYmCisJCWVjaG8gImIvZyB0ZXN0PWEvYi9nIgorCSkgPmEvLmdpdGF0dHJpYnV0ZXMgJiYKKwkoCisJCWVjaG8gImggdGVzdD1hL2IvaCIgJiYKKwkJZWNobyAiZC8qIHRlc3Q9YS9iL2QvKiIKKwkJZWNobyAiZC95ZXMgbm90ZXN0IgorCSkgPmEvYi8uZ2l0YXR0cmlidXRlcyAmJgorCSgKKwkJZWNobyAiZ2xvYmFsIHRlc3Q9Z2xvYmFsIgorCSkgPiIkSE9NRSIvZ2xvYmFsLWdpdGF0dHJpYnV0ZXMgJiYKKwljYXQgPDwtRU9GID5leHBlY3QtYWxsCisJZjogdGVzdDogZgorCWEvZjogdGVzdDogZgorCWEvYy9mOiB0ZXN0OiBmCisJYS9nOiB0ZXN0OiBhL2cKKwlhL2IvZzogdGVzdDogYS9iL2cKKwliL2c6IHRlc3Q6IHVuc3BlY2lmaWVkCisJYS9iL2g6IHRlc3Q6IGEvYi9oCisJYS9iL2QvZzogdGVzdDogYS9iL2QvKgorCW9ub2ZmOiB0ZXN0OiB1bnNldAorCW9mZm9uOiB0ZXN0OiBzZXQKKwlubzogbm90ZXN0OiBzZXQKKwlubzogdGVzdDogdW5zcGVjaWZpZWQKKwlhL2IvZC9ubzogbm90ZXN0OiBzZXQKKwlhL2IvZC9ubzogdGVzdDogYS9iL2QvKgorCWEvYi9kL3llczogbm90ZXN0OiBzZXQKKwlhL2IvZC95ZXM6IHRlc3Q6IHVuc3BlY2lmaWVkCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgbGluZSBjaGVja3MnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1hdHRyIC0tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgdGVzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1hdHRyIHRlc3QgLS0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAtLSBmICYmCisJZWNobyAiZiIgfCB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAtLXN0ZGluICYmCisJZWNobyAiZiIgfCB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAtLXN0ZGluIC0tIGYgJiYKKwllY2hvICJmIiB8IHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1hdHRyIC0tc3RkaW4gdGVzdCAtLSBmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgIiIgLS0gZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRyaWJ1dGUgdGVzdCcgJworCWF0dHJfY2hlY2sgZiBmICYmCisJYXR0cl9jaGVjayBhL2YgZiAmJgorCWF0dHJfY2hlY2sgYS9jL2YgZiAmJgorCWF0dHJfY2hlY2sgYS9nIGEvZyAmJgorCWF0dHJfY2hlY2sgYS9iL2cgYS9iL2cgJiYKKwlhdHRyX2NoZWNrIGIvZyB1bnNwZWNpZmllZCAmJgorCWF0dHJfY2hlY2sgYS9iL2ggYS9iL2ggJiYKKwlhdHRyX2NoZWNrIGEvYi9kL2cgImEvYi9kLyoiICYmCisJYXR0cl9jaGVjayBvbm9mZiB1bnNldCAmJgorCWF0dHJfY2hlY2sgb2Zmb24gc2V0ICYmCisJYXR0cl9jaGVjayBubyB1bnNwZWNpZmllZCAmJgorCWF0dHJfY2hlY2sgYS9iL2Qvbm8gImEvYi9kLyoiICYmCisJYXR0cl9jaGVjayBhL2IvZC95ZXMgdW5zcGVjaWZpZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0cmlidXRlIG1hdGNoaW5nIGlzIGNhc2Ugc2Vuc2l0aXZlIHdoZW4gY29yZS5pZ25vcmVjYXNlPTAnICcKKworCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgRiBmICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwl0ZXN0X211c3RfZmFpbCBhdHRyX2NoZWNrIGEvRiBmICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwl0ZXN0X211c3RfZmFpbCBhdHRyX2NoZWNrIGEvYy9GIGYgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgYS9HIGEvZyAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBhL0IvZyBhL2IvZyAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBhL2IvRyBhL2IvZyAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBhL2IvSCBhL2IvaCAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBhL2IvRC9nICJhL2IvZC8qIiAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBvTm9GZiB1bnNldCAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBvRmZPbiBzZXQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgTk8gdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgYS9iL0QvTk8gImEvYi9kLyoiICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIGEvYi9kL1lFUyBhL2IvZC8qICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwl0ZXN0X211c3RfZmFpbCBhdHRyX2NoZWNrIGEvRS9mICJBL2UvRiIgIi1jIGNvcmUuaWdub3JlY2FzZT0wIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZSBtYXRjaGluZyBpcyBjYXNlIGluc2Vuc2l0aXZlIHdoZW4gY29yZS5pZ25vcmVjYXNlPTEnICcKKworCWF0dHJfY2hlY2sgRiBmICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvRiBmICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvYy9GIGYgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9HIGEvZyAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL0IvZyBhL2IvZyAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL2IvRyBhL2IvZyAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL2IvSCBhL2IvaCAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL2IvRC9nICJhL2IvZC8qIiAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBvTm9GZiB1bnNldCAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBvRmZPbiBzZXQgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgTk8gdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9iL0QvTk8gImEvYi9kLyoiICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvYi9kL1lFUyB1bnNwZWNpZmllZCAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL0UvZiAiQS9lL0YiICItYyBjb3JlLmlnbm9yZWNhc2U9MSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENBU0VfSU5TRU5TSVRJVkVfRlMgJ2FkZGl0aW9uYWwgY2FzZSBpbnNlbnNpdGl2aXR5IHRlc3RzJyAnCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBhL0IvRC9nICJhL2IvZC8qIiAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBBL0IvRC9OTyAiYS9iL2QvKiIgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgQS9iL2ggYS9iL2ggIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9CL0QvZyAiYS9iL2QvKiIgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgQS9CL0QvTk8gImEvYi9kLyoiICItYyBjb3JlLmlnbm9yZWNhc2U9MSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5ub3JtYWxpemVkIHBhdGhzJyAnCisJYXR0cl9jaGVjayAuL2YgZiAmJgorCWF0dHJfY2hlY2sgLi9hL2cgYS9nICYmCisJYXR0cl9jaGVjayBhLy4vZyBhL2cgJiYKKwlhdHRyX2NoZWNrIGEvYy8uLi9iL2cgYS9iL2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgcGF0aHMnICcKKwkoY2QgYSAmJiBhdHRyX2NoZWNrIC4uL2YgZikgJiYKKwkoY2QgYSAmJiBhdHRyX2NoZWNrIGYgZikgJiYKKwkoY2QgYSAmJiBhdHRyX2NoZWNrIGkgYS9pKSAmJgorCShjZCBhICYmIGF0dHJfY2hlY2sgZyBhL2cpICYmCisJKGNkIGEgJiYgYXR0cl9jaGVjayBiL2cgYS9iL2cpICYmCisJKGNkIGIgJiYgYXR0cl9jaGVjayAuLi9hL2YgZikgJiYKKwkoY2QgYiAmJiBhdHRyX2NoZWNrIC4uL2EvZyBhL2cpICYmCisJKGNkIGIgJiYgYXR0cl9jaGVjayAuLi9hL2IvZyBhL2IvZykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlZml4ZXMgYXJlIG5vdCBjb25mdXNlZCB3aXRoIGxlYWRpbmcgZGlyZWN0b3JpZXMnICcKKwlhdHRyX2NoZWNrIGFfcGx1cy9nIHVuc3BlY2lmaWVkICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWEvZzogdGVzdDogYS9nCisJYV9wbHVzL2c6IHRlc3Q6IHVuc3BlY2lmaWVkCisJRU9GCisJZ2l0IGNoZWNrLWF0dHIgdGVzdCBhL2cgYV9wbHVzL2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29yZS5hdHRyaWJ1dGVzZmlsZScgJworCWF0dHJfY2hlY2sgZ2xvYmFsIHVuc3BlY2lmaWVkICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF0dHJpYnV0ZXNmaWxlICIkSE9NRS9nbG9iYWwtZ2l0YXR0cmlidXRlcyIgJiYKKwlhdHRyX2NoZWNrIGdsb2JhbCBnbG9iYWwgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXR0cmlidXRlc2ZpbGUgIn4vZ2xvYmFsLWdpdGF0dHJpYnV0ZXMiICYmCisJYXR0cl9jaGVjayBnbG9iYWwgZ2xvYmFsICYmCisJZWNobyAiZ2xvYmFsIHRlc3Q9cHJlY2VkZW5jZSIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWF0dHJfY2hlY2sgZ2xvYmFsIHByZWNlZGVuY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0cmlidXRlIHRlc3Q6IHJlYWQgcGF0aHMgZnJvbSBzdGRpbicgJworCWdyZXAgLXYgbm90ZXN0IDxleHBlY3QtYWxsID5leHBlY3QgJiYKKwlzZWQgLWUgInMvOi4qLy8iIDxleHBlY3QgfCBnaXQgY2hlY2stYXR0ciAtLXN0ZGluIHRlc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0cmlidXRlIHRlc3Q6IC0tYWxsIG9wdGlvbicgJworCWdyZXAgLXYgdW5zcGVjaWZpZWQgPGV4cGVjdC1hbGwgfCBzb3J0ID5zcGVjaWZpZWQtYWxsICYmCisJc2VkIC1lICJzLzouKi8vIiA8ZXhwZWN0LWFsbCB8IHVuaXEgPnN0ZGluLWFsbCAmJgorCWdpdCBjaGVjay1hdHRyIC0tc3RkaW4gLS1hbGwgPHN0ZGluLWFsbCB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIHNwZWNpZmllZC1hbGwgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZSB0ZXN0OiAtLWNhY2hlZCBvcHRpb24nICcKKwk6ID5lbXB0eSAmJgorCWdpdCBjaGVjay1hdHRyIC0tY2FjaGVkIC0tc3RkaW4gLS1hbGwgPHN0ZGluLWFsbCB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbCAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgYS8uZ2l0YXR0cmlidXRlcyBhL2IvLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY2hlY2stYXR0ciAtLWNhY2hlZCAtLXN0ZGluIC0tYWxsIDxzdGRpbi1hbGwgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBzcGVjaWZpZWQtYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyb290IHN1YmRpciBhdHRyaWJ1dGUgdGVzdCcgJworCWF0dHJfY2hlY2sgYS9pIGEvaSAmJgorCWF0dHJfY2hlY2sgc3ViZGlyL2EvaSB1bnNwZWNpZmllZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXJlJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUuZ2l0ICYmCisJY2QgYmFyZS5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZSByZXBvc2l0b3J5OiBjaGVjayB0aGF0IC5naXRhdHRyaWJ1dGUgaXMgaWdub3JlZCcgJworCSgKKwkJZWNobyAiZgl0ZXN0PWYiCisJCWVjaG8gImEvaSB0ZXN0PWEvaSIKKwkpID4uZ2l0YXR0cmlidXRlcyAmJgorCWF0dHJfY2hlY2sgZiB1bnNwZWNpZmllZCAmJgorCWF0dHJfY2hlY2sgYS9mIHVuc3BlY2lmaWVkICYmCisJYXR0cl9jaGVjayBhL2MvZiB1bnNwZWNpZmllZCAmJgorCWF0dHJfY2hlY2sgYS9pIHVuc3BlY2lmaWVkICYmCisJYXR0cl9jaGVjayBzdWJkaXIvYS9pIHVuc3BlY2lmaWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmUgcmVwb3NpdG9yeTogY2hlY2sgdGhhdCAtLWNhY2hlZCBob25vcnMgaW5kZXgnICcKKwlHSVRfSU5ERVhfRklMRT0uLi8uZ2l0L2luZGV4IFwKKwlnaXQgY2hlY2stYXR0ciAtLWNhY2hlZCAtLXN0ZGluIC0tYWxsIDwuLi9zdGRpbi1hbGwgfAorCXNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIC4uL3NwZWNpZmllZC1hbGwgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmUgcmVwb3NpdG9yeTogdGVzdCBpbmZvL2F0dHJpYnV0ZXMnICcKKwkoCisJCWVjaG8gImYJdGVzdD1mIgorCQllY2hvICJhL2kgdGVzdD1hL2kiCisJKSA+aW5mby9hdHRyaWJ1dGVzICYmCisJYXR0cl9jaGVjayBmIGYgJiYKKwlhdHRyX2NoZWNrIGEvZiBmICYmCisJYXR0cl9jaGVjayBhL2MvZiBmICYmCisJYXR0cl9jaGVjayBhL2kgYS9pICYmCisJYXR0cl9jaGVjayBzdWJkaXIvYS9pIHVuc3BlY2lmaWVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwNC11bndyaXRhYmxlLnNoIGIvdC90MDAwNC11bndyaXRhYmxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzMTM3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA0LXVud3JpdGFibGUuc2gKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RldGVjdCB1bndyaXRhYmxlIHJlcG9zaXRvcnkgYW5kIGZhaWwgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ3dyaXRlLXRyZWUgc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDc3NSAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/IiAmJgorCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdyaXRlLXRyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdjb21taXQgc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDc3NSAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/IiAmJgorCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICd1cGRhdGUtaW5kZXggc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDc3NSAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/IiAmJgorCWVjaG8gNk8gPmZpbGUgJiYKKwljaG1vZCBhLXcgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ2FkZCBzaG91bGQgbm90aWNlIHVud3JpdGFibGUgcmVwb3NpdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgNzc1IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8iICYmCisJZWNobyBiID5maWxlICYmCisJY2htb2QgYS13IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA1LXNpZ25hbHMuc2ggYi90L3QwMDA1LXNpZ25hbHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTNlNThjMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDUtc2lnbmFscy5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2lnbmFscyB3b3JrIGFzIHdlIGV4cGVjdCcKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdCA8PEVPRgordGhyZWUKK3R3bworb25lCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnY2hhaW4gd29ya3MnICcKKwl0ZXN0LXNpZ2NoYWluID5hY3R1YWwKKwljYXNlICIkPyIgaW4KKwkxNDMpIHRydWUgOzsgIyBQT1NJWCB3LyBTSUdURVJNPTE1CisJMjcxKSB0cnVlIDs7ICMga3NoIHcvIFNJR1RFUk09MTUKKwkgIDMpIHRydWUgOzsgIyBXaW5kb3dzCisJICAqKSBmYWxzZSA7OworCWVzYWMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwNi1kYXRlLnNoIGIvdC90MDAwNi1kYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1M2NmNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA2LWRhdGUuc2gKQEAgLTAsMCArMSw4NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGF0ZSBwYXJzaW5nIGFuZCBwcmludGluZycKKy4gLi90ZXN0LWxpYi5zaAorCisjIGFyYml0cmFyeSByZWZlcmVuY2UgdGltZTogMjAwOS0wOC0zMCAxOToyMDowMAorVEVTVF9EQVRFX05PVz0xMjUxNjYwMDAwOyBleHBvcnQgVEVTVF9EQVRFX05PVworCitjaGVja19zaG93KCkgeworCXQ9JCgoJFRFU1RfREFURV9OT1cgLSAkMSkpCisJZWNobyAiJHQgLT4gJDIiID5leHBlY3QKKwl0ZXN0X2V4cGVjdF8kezM6LXN1Y2Nlc3N9ICJyZWxhdGl2ZSBkYXRlICgkMikiICIKKwl0ZXN0LWRhdGUgc2hvdyAkdCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKwkiCit9CisKK2NoZWNrX3Nob3cgNSAnNSBzZWNvbmRzIGFnbycKK2NoZWNrX3Nob3cgMzAwICc1IG1pbnV0ZXMgYWdvJworY2hlY2tfc2hvdyAxODAwMCAnNSBob3VycyBhZ28nCitjaGVja19zaG93IDQzMjAwMCAnNSBkYXlzIGFnbycKK2NoZWNrX3Nob3cgMTcyODAwMCAnMyB3ZWVrcyBhZ28nCitjaGVja19zaG93IDEzMDAwMDAwICc1IG1vbnRocyBhZ28nCitjaGVja19zaG93IDM3NTAwMDAwICcxIHllYXIsIDIgbW9udGhzIGFnbycKK2NoZWNrX3Nob3cgNTUxODgwMDAgJzEgeWVhciwgOSBtb250aHMgYWdvJworY2hlY2tfc2hvdyA2MzAwMDAwMDAgJzIwIHllYXJzIGFnbycKK2NoZWNrX3Nob3cgMzE0NDk2MDAgJzEyIG1vbnRocyBhZ28nCitjaGVja19zaG93IDYyOTg1NjAwICcyIHllYXJzIGFnbycKKworY2hlY2tfcGFyc2UoKSB7CisJZWNobyAiJDEgLT4gJDIiID5leHBlY3QKKwl0ZXN0X2V4cGVjdF8kezQ6LXN1Y2Nlc3N9ICJwYXJzZSBkYXRlICgkMSR7MzorIFRaPSQzfSkiICIKKwlUWj0kezM6LSRUWn0gdGVzdC1kYXRlIHBhcnNlICckMScgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkiCit9CisKK2NoZWNrX3BhcnNlIDIwMDggYmFkCitjaGVja19wYXJzZSAyMDA4LTAyIGJhZAorY2hlY2tfcGFyc2UgMjAwOC0wMi0xNCBiYWQKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1JyAnMjAwOC0wMi0xNCAyMDozMDo0NSArMDAwMCcKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTAwJyAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDUwMCcKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wMDE1JyAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDAxNScKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC01JyAnMjAwOC0wMi0xNCAyMDozMDo0NSArMDAwMCcKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC01OicgJzIwMDgtMDItMTQgMjA6MzA6NDUgKzAwMDAnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDUnICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTAwJworY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTozMCcgJzIwMDgtMDItMTQgMjA6MzA6NDUgKzAwMDAnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDU6MDAnICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTAwJworY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUnICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTAwJyBFU1Q1CisKK2NoZWNrX2FwcHJveGlkYXRlKCkgeworCWVjaG8gIiQxIC0+ICQyICswMDAwIiA+ZXhwZWN0CisJdGVzdF9leHBlY3RfJHszOi1zdWNjZXNzfSAicGFyc2UgYXBwcm94aWRhdGUgKCQxKSIgIgorCXRlc3QtZGF0ZSBhcHByb3hpZGF0ZSAnJDEnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJIgorfQorCitjaGVja19hcHByb3hpZGF0ZSBub3cgJzIwMDktMDgtMzAgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnNSBzZWNvbmRzIGFnbycgJzIwMDktMDgtMzAgMTk6MTk6NTUnCitjaGVja19hcHByb3hpZGF0ZSA1LnNlY29uZHMuYWdvICcyMDA5LTA4LTMwIDE5OjE5OjU1JworY2hlY2tfYXBwcm94aWRhdGUgMTAubWludXRlcy5hZ28gJzIwMDktMDgtMzAgMTk6MTA6MDAnCitjaGVja19hcHByb3hpZGF0ZSB5ZXN0ZXJkYXkgJzIwMDktMDgtMjkgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAzLmRheXMuYWdvICcyMDA5LTA4LTI3IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgMy53ZWVrcy5hZ28gJzIwMDktMDgtMDkgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAzLm1vbnRocy5hZ28gJzIwMDktMDUtMzAgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAyLnllYXJzLjMubW9udGhzLmFnbyAnMjAwNy0wNS0zMCAxOToyMDowMCcKKworY2hlY2tfYXBwcm94aWRhdGUgJzZhbSB5ZXN0ZXJkYXknICcyMDA5LTA4LTI5IDA2OjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzZwbSB5ZXN0ZXJkYXknICcyMDA5LTA4LTI5IDE4OjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzM6MDAnICcyMDA5LTA4LTMwIDAzOjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzE1OjAwJyAnMjAwOS0wOC0zMCAxNTowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICdub29uIHRvZGF5JyAnMjAwOS0wOC0zMCAxMjowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICdub29uIHllc3RlcmRheScgJzIwMDktMDgtMjkgMTI6MDA6MDAnCisKK2NoZWNrX2FwcHJveGlkYXRlICdsYXN0IHR1ZXNkYXknICcyMDA5LTA4LTI1IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJ0p1bHkgNXRoJyAnMjAwOS0wNy0wNSAxOToyMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICcwNi8wNS8yMDA5JyAnMjAwOS0wNi0wNSAxOToyMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICcwNi4wNS4yMDA5JyAnMjAwOS0wNS0wNiAxOToyMDowMCcKKworY2hlY2tfYXBwcm94aWRhdGUgJ0p1biA2LCA1QU0nICcyMDA5LTA2LTA2IDA1OjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzVBTSBKdW4gNicgJzIwMDktMDYtMDYgMDU6MDA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnNkFNLCBKdW5lIDcsIDIwMDknICcyMDA5LTA2LTA3IDA2OjAwOjAwJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMTAtcmFjeS1naXQuc2ggYi90L3QwMDEwLXJhY3ktZ2l0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0NWE5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDEwLXJhY3ktZ2l0LnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyYWN5IEdJVCcKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhpcyB0ZXN0IGNhbiBnaXZlIGZhbHNlIHN1Y2Nlc3MgaWYgeW91ciBtYWNoaW5lIGlzIHN1ZmZpY2llbnRseQorIyBzbG93IG9yIHlvdXIgdHJpYWwgaGFwcGVuZWQgdG8gaGFwcGVuIG9uIHNlY29uZCBib3VuZGFyeS4KKworZm9yIHRyaWFsIGluIDAgMSAyIDMgNAorZG8KKwlybSAtZiAuZ2l0L2luZGV4CisJZWNobyBmcm90eiA+aW5mb2NvbQorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgaW5mb2NvbQorCWVjaG8geHl6enkgPmluZm9jb20KKworCWZpbGVzPWBnaXQgZGlmZi1maWxlcyAtcGAKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiUmFjeSBHSVQgdHJpYWwgIyR0cmlhbCBwYXJ0IEEiIFwKKwkndGVzdCAiIiAhPSAiJGZpbGVzIicKKworCXNsZWVwIDEKKwllY2hvIHh5enp5ID5jb3JuZXJzdG9uZQorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgY29ybmVyc3RvbmUKKworCWZpbGVzPWBnaXQgZGlmZi1maWxlcyAtcGAKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiUmFjeSBHSVQgdHJpYWwgIyR0cmlhbCBwYXJ0IEIiIFwKKwkndGVzdCAiIiAhPSAiJGZpbGVzIicKKworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjAtY3JsZi5zaCBiL3QvdDAwMjAtY3JsZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYThmNDRjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAyMC1jcmxmLnNoCkBAIC0wLDAgKzEsNTA5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ1JMRiBjb252ZXJzaW9uJworCisuIC4vdGVzdC1saWIuc2gKKworaGFzX2NyKCkgeworCXRyICdcMDE1JyBRIDwiJDEiIHwgZ3JlcCBRID4vZGV2L251bGwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKworCWZvciB3IGluIEhlbGxvIHdvcmxkIGhvdyBhcmUgeW91OyBkbyBlY2hvICR3OyBkb25lID5vbmUgJiYKKwlta2RpciBkaXIgJiYKKwlmb3IgdyBpbiBJIGFtIHZlcnkgdmVyeSBmaW5lIHRoYW5rIHlvdTsgZG8gZWNobyAkdzsgZG9uZSA+ZGlyL3R3byAmJgorCWZvciB3IGluIE9oIGhlcmUgaXMgTlVMUWluIHRleHQgaGVyZTsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fbnVsID50aHJlZSAmJgorCWdpdCBhZGQgLiAmJgorCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlvbmU9YGdpdCByZXYtcGFyc2UgSEVBRDpvbmVgICYmCisJZGlyPWBnaXQgcmV2LXBhcnNlIEhFQUQ6ZGlyYCAmJgorCXR3bz1gZ2l0IHJldi1wYXJzZSBIRUFEOmRpci90d29gICYmCisJdGhyZWU9YGdpdCByZXYtcGFyc2UgSEVBRDp0aHJlZWAgJiYKKworCWZvciB3IGluIFNvbWUgZXh0cmEgbGluZXMgaGVyZTsgZG8gZWNobyAkdzsgZG9uZSA+Pm9uZSAmJgorCWdpdCBkaWZmID5wYXRjaC5maWxlICYmCisJcGF0Y2hlZD1gZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPG9uZWAgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZWNobyBoYXBweS4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FmZWNybGY6IGF1dG9jcmxmPWlucHV0LCBhbGwgQ1JMRicgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHRydWUgJiYKKworCWZvciB3IGluIEkgYW0gYWxsIENSTEY7IGRvIGVjaG8gJHc7IGRvbmUgfCBhcHBlbmRfY3IgPmFsbGNybGYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGFsbGNybGYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FmZWNybGY6IGF1dG9jcmxmPWlucHV0LCBtaXhlZCBMRi9DUkxGJyAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgaW5wdXQgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2FmZWNybGYgdHJ1ZSAmJgorCisJZm9yIHcgaW4gT2ggaGVyZSBpcyBDUkxGUSBpbiB0ZXh0OyBkbyBlY2hvICR3OyBkb25lIHwgcV90b19jciA+bWl4ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIG1peGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBhdXRvY3JsZj10cnVlLCBhbGwgTEYnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHRydWUgJiYKKworCWZvciB3IGluIEkgYW0gYWxsIExGOyBkbyBlY2hvICR3OyBkb25lID5hbGxsZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgYWxsbGYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FmZWNybGY6IGF1dG9jcmxmPXRydWUgbWl4ZWQgTEYvQ1JMRicgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2FmZWNybGYgdHJ1ZSAmJgorCisJZm9yIHcgaW4gT2ggaGVyZSBpcyBDUkxGUSBpbiB0ZXh0OyBkbyBlY2hvICR3OyBkb25lIHwgcV90b19jciA+bWl4ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIG1peGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBwcmludCB3YXJuaW5nIG9ubHkgb25jZScgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHdhcm4gJiYKKworCWZvciB3IGluIEkgYW0gYWxsIExGOyBkbyBlY2hvICR3OyBkb25lID5kb3VibGV3YXJuICYmCisJZ2l0IGFkZCBkb3VibGV3YXJuICYmCisJZ2l0IGNvbW1pdCAtbSAibm93YXJuIiAmJgorCWZvciB3IGluIE9oIGhlcmUgaXMgQ1JMRlEgaW4gdGV4dDsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fY3IgPmRvdWJsZXdhcm4gJiYKKwl0ZXN0ICQoZ2l0IGFkZCBkb3VibGV3YXJuIDI+JjEgfCBncmVwICJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYiIHwgd2MgLWwpID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggb2ZmIGF1dG9jcmxmLCBzYWZlY3JsZiwgcmVzZXQgSEVBRCcgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiBmYWxzZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHdpdGggYXV0b2NybGY9aW5wdXQnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisKKwlmb3IgZiBpbiBvbmUgZGlyL3R3bworCWRvCisJCWFwcGVuZF9jciA8JGYgPnRtcCAmJiBtdiAtZiB0bXAgJGYgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLSAkZiB8fCB7CisJCQllY2hvIE9vcHMKKwkJCWZhbHNlCisJCQlicmVhaworCQl9CisJZG9uZSAmJgorCisJZGlmZmVycz1gZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRGAgJiYKKwl0ZXN0IC16ICIkZGlmZmVycyIgfHwgeworCQllY2hvIE9vcHMgIiRkaWZmZXJzIgorCQlmYWxzZQorCX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgd2l0aCBhdXRvY3JsZj10cnVlJyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisKKwlmb3IgZiBpbiBvbmUgZGlyL3R3bworCWRvCisJCWFwcGVuZF9jciA8JGYgPnRtcCAmJiBtdiAtZiB0bXAgJGYgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLSAkZiB8fCB7CisJCQllY2hvICJPb3BzICRmIgorCQkJZmFsc2UKKwkJCWJyZWFrCisJCX0KKwlkb25lICYmCisKKwlkaWZmZXJzPWBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEYCAmJgorCXRlc3QgLXogIiRkaWZmZXJzIiB8fCB7CisJCWVjaG8gT29wcyAiJGRpZmZlcnMiCisJCWZhbHNlCisJfQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggYXV0b2NybGY9dHJ1ZScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZm9yIGYgaW4gb25lIGRpci90d28KKwlkbworCQlyZW1vdmVfY3IgPCIkZiIgPnRtcCAmJiBtdiAtZiB0bXAgJGYgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLSAkZiB8fCB7CisJCQllY2hvICJFaD8gJGYiCisJCQlmYWxzZQorCQkJYnJlYWsKKwkJfQorCWRvbmUgJiYKKwl0ZXN0ICIkb25lIiA9IGBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8b25lYCAmJgorCXRlc3QgIiR0d28iID0gYGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxkaXIvdHdvYCAmJgorCWRpZmZlcnM9YGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQURgICYmCisJdGVzdCAteiAiJGRpZmZlcnMiIHx8IHsKKwkJZWNobyBPb3BzICIkZGlmZmVycyIKKwkJZmFsc2UKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggYXV0b2NybGY9aW5wdXQnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwlmb3IgZiBpbiBvbmUgZGlyL3R3bworCWRvCisJCWlmIGhhc19jciAiJGYiCisJCXRoZW4KKwkJCWVjaG8gIkVoPyAkZiIKKwkJCWZhbHNlCisJCQlicmVhaworCQllbHNlCisJCQlnaXQgdXBkYXRlLWluZGV4IC0tICRmCisJCWZpCisJZG9uZSAmJgorCXRlc3QgIiRvbmUiID0gYGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxvbmVgICYmCisJdGVzdCAiJHR3byIgPSBgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPGRpci90d29gICYmCisJZGlmZmVycz1gZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRGAgJiYKKwl0ZXN0IC16ICIkZGlmZmVycyIgfHwgeworCQllY2hvIE9vcHMgIiRkaWZmZXJzIgorCQlmYWxzZQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggKGF1dG9jcmxmPWlucHV0KScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSBwYXRjaC5maWxlICYmCisJdGVzdCAiJHBhdGNoZWQiID0gImBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8b25lYCIgfHwgeworCQllY2hvICJFaD8gIGFwcGx5IHdpdGhvdXQgaW5kZXgiCisJCWZhbHNlCisJfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAtLWNhY2hlZCAoYXV0b2NybGY9aW5wdXQpJyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgaW5wdXQgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZ2l0IGFwcGx5IC0tY2FjaGVkIHBhdGNoLmZpbGUgJiYKKwl0ZXN0ICIkcGF0Y2hlZCIgPSBgZ2l0IHJldi1wYXJzZSA6b25lYCB8fCB7CisJCWVjaG8gIkVoPyAgYXBwbHkgd2l0aCAtLWNhY2hlZCIKKwkJZmFsc2UKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHBhdGNoIC0taW5kZXggKGF1dG9jcmxmPWlucHV0KScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoLmZpbGUgJiYKKwl0ZXN0ICIkcGF0Y2hlZCIgPSBgZ2l0IHJldi1wYXJzZSA6b25lYCAmJgorCXRlc3QgIiRwYXRjaGVkIiA9IGBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8b25lYCB8fCB7CisJCWVjaG8gIkVoPyAgYXBwbHkgd2l0aCAtLWluZGV4IgorCQlmYWxzZQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggKGF1dG9jcmxmPXRydWUpJyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwlnaXQgYXBwbHkgcGF0Y2guZmlsZSAmJgorCXRlc3QgIiRwYXRjaGVkIiA9ICJgcmVtb3ZlX2NyIDxvbmUgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbmAiIHx8IHsKKwkJZWNobyAiRWg/ICBhcHBseSB3aXRob3V0IGluZGV4IgorCQlmYWxzZQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggLS1jYWNoZWQgKGF1dG9jcmxmPXRydWUpJyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwlnaXQgYXBwbHkgLS1jYWNoZWQgcGF0Y2guZmlsZSAmJgorCXRlc3QgIiRwYXRjaGVkIiA9IGBnaXQgcmV2LXBhcnNlIDpvbmVgIHx8IHsKKwkJZWNobyAiRWg/ICBhcHBseSB3aXRob3V0IGluZGV4IgorCQlmYWxzZQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggLS1pbmRleCAoYXV0b2NybGY9dHJ1ZSknICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoLmZpbGUgJiYKKwl0ZXN0ICIkcGF0Y2hlZCIgPSBgZ2l0IHJldi1wYXJzZSA6b25lYCAmJgorCXRlc3QgIiRwYXRjaGVkIiA9ICJgcmVtb3ZlX2NyIDxvbmUgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbmAiIHx8IHsKKwkJZWNobyAiRWg/ICBhcHBseSB3aXRoIC0taW5kZXgiCisJCWZhbHNlCisJfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0YXR0cmlidXRlcyBzYXlzIHR3byBpcyBiaW5hcnknICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWVjaG8gInR3byAtY3JsZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaWYgaGFzX2NyIGRpci90d28KKwl0aGVuCisJCWVjaG8gIkh1aD8iCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkgJiYKKworCWlmIGhhc19jciBvbmUKKwl0aGVuCisJCTogaGFwcHkKKwllbHNlCisJCWVjaG8gIkh1aD8iCisJCWZhbHNlCisJZmkgJiYKKworCWlmIGhhc19jciB0aHJlZQorCXRoZW4KKwkJZWNobyAiSHVoPyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0YXR0cmlidXRlcyBzYXlzIHR3byBpcyBpbnB1dCcgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZWNobyAidHdvIGNybGY9aW5wdXQiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwlpZiBoYXNfY3IgZGlyL3R3bworCXRoZW4KKwkJZWNobyAiSHVoPyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0YXR0cmlidXRlcyBzYXlzIHR3byBhbmQgdGhyZWUgYXJlIHRleHQnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWVjaG8gInQqIGNybGYiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwlpZiBoYXNfY3IgZGlyL3R3bworCXRoZW4KKwkJOiBoYXBweQorCWVsc2UKKwkJZWNobyAiSHVoPyIKKwkJZmFsc2UKKwlmaSAmJgorCisJaWYgaGFzX2NyIHRocmVlCisJdGhlbgorCQk6IGhhcHB5CisJZWxzZQorCQllY2hvICJIdWg/IgorCQlmYWxzZQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luLXRyZWUgLmdpdGF0dHJpYnV0ZXMgKDEpJyAnCisKKwllY2hvICJvbmUgLWNybGYiID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIC5naXRhdHRyaWJ1dGVzIiAmJgorCisJcm0gLXJmIHRtcCBvbmUgZGlyIC5naXRhdHRyaWJ1dGVzIHBhdGNoLmZpbGUgdGhyZWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaWYgaGFzX2NyIG9uZQorCXRoZW4KKwkJZWNobyAiRWg/IG9uZSBzaG91bGQgbm90IGhhdmUgQ1JMRiIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaSAmJgorCWhhc19jciB0aHJlZSB8fCB7CisJCWVjaG8gIkVoPyB0aHJlZSBzaG91bGQgc3RpbGwgaGF2ZSBDUkxGIgorCQlmYWxzZQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4tdHJlZSAuZ2l0YXR0cmlidXRlcyAoMiknICcKKworCXJtIC1yZiB0bXAgb25lIGRpciAuZ2l0YXR0cmlidXRlcyBwYXRjaC5maWxlIHRocmVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXEgLXUgLWEgJiYKKworCWlmIGhhc19jciBvbmUKKwl0aGVuCisJCWVjaG8gIkVoPyBvbmUgc2hvdWxkIG5vdCBoYXZlIENSTEYiCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkgJiYKKwloYXNfY3IgdGhyZWUgfHwgeworCQllY2hvICJFaD8gdGhyZWUgc2hvdWxkIHN0aWxsIGhhdmUgQ1JMRiIKKwkJZmFsc2UKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luLXRyZWUgLmdpdGF0dHJpYnV0ZXMgKDMpJyAnCisKKwlybSAtcmYgdG1wIG9uZSBkaXIgLmdpdGF0dHJpYnV0ZXMgcGF0Y2guZmlsZSB0aHJlZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCBIRUFEICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IG9uZSBkaXIvdHdvIHRocmVlICYmCisKKwlpZiBoYXNfY3Igb25lCisJdGhlbgorCQllY2hvICJFaD8gb25lIHNob3VsZCBub3QgaGF2ZSBDUkxGIgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpICYmCisJaGFzX2NyIHRocmVlIHx8IHsKKwkJZWNobyAiRWg/IHRocmVlIHNob3VsZCBzdGlsbCBoYXZlIENSTEYiCisJCWZhbHNlCisJfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi10cmVlIC5naXRhdHRyaWJ1dGVzICg0KScgJworCisJcm0gLXJmIHRtcCBvbmUgZGlyIC5naXRhdHRyaWJ1dGVzIHBhdGNoLmZpbGUgdGhyZWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgSEVBRCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSAuZ2l0YXR0cmlidXRlcyAmJgorCisJaWYgaGFzX2NyIG9uZQorCXRoZW4KKwkJZWNobyAiRWg/IG9uZSBzaG91bGQgbm90IGhhdmUgQ1JMRiIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaSAmJgorCWhhc19jciB0aHJlZSB8fCB7CisJCWVjaG8gIkVoPyB0aHJlZSBzaG91bGQgc3RpbGwgaGF2ZSBDUkxGIgorCQlmYWxzZQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aCBleGlzdGluZyAuZ2l0YXR0cmlidXRlcycgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5zYWZlY3JsZiAmJgorCWVjaG8gIi5maWxlMiAtY3JsZlEiIHwgcV90b19jciA+PiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvICIuZmlsZSAtY3JsZlEiIHwgcV90b19jciA+PiAuZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gImNvbnRlbnRzIiA+IC5maWxlICYmCisJZ2l0IGFkZCAuZ2l0YXR0cmlidXRlcyAuZmlsZSAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyfjEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aGVuIGRlbGV0aW5nIC5naXRhdHRyaWJ1dGVzJyAnCisKKwlnaXQgcm0gLmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJjb250ZW50c1EiIHwgcV90b19jciA+IC5maWxlMiAmJgorCWdpdCBhZGQgLmZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcn4xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWhhc19jciAuZmlsZTIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIC5naXRhdHRyaWJ1dGVzIChtdXN0IG5vdCBjcmFzaCknICcKKworCWVjaG8gInRocmVlICtjcmxmIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGRpZmYKKworJworIyBTb21lIG1vcmUgdGVzdHMgaGVyZSB0byBhZGQgbmV3IGF1dG9jcmxmIGZ1bmN0aW9uYWxpdHkuCisjIFdlIHdhbnQgdG8gaGF2ZSBhIGtub3duIHN0YXRlIGhlcmUsIHNvIHN0YXJ0IGEgYml0IGZyb20gc2NyYXRjaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR0aW5nIHVwIGZvciBuZXcgYXV0b2NybGYgdGVzdHMnICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2FmZWNybGYgZmFsc2UgJiYKKwlybSAtcmYgLj8/Pz8qICogJiYKKwlmb3IgdyBpbiBJIGFtIGFsbCBMRjsgZG8gZWNobyAkdzsgZG9uZSA+YWxsbGYgJiYKKwlmb3IgdyBpbiBPaCBoZXJlIGlzIENSTEZRIGluIHRleHQ7IGRvIGVjaG8gJHc7IGRvbmUgfCBxX3RvX2NyID5taXhlZCAmJgorCWZvciB3IGluIEkgYW0gYWxsIENSTEY7IGRvIGVjaG8gJHc7IGRvbmUgfCBhcHBlbmRfY3IgPmFsbGNybGYgJiYKKwlnaXQgYWRkIC1BIC4gJiYKKwlnaXQgY29tbWl0IC1tICJhbGxsZiwgYWxsY3JsZiBhbmQgbWl4ZWQgb25seSIgJiYKKwlnaXQgdGFnIC1hIC1tICJtZXNzYWdlIiBhdXRvY3JsZi1jaGVja3BvaW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcG9ydCBubyBjaGFuZ2UgYWZ0ZXIgc2V0dGluZyBhdXRvY3JsZicgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJdG91Y2ggKiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGVzIGFyZSBjbGVhbiBhZnRlciBjaGVja291dCcgJworCXJtICogJiYKKwlnaXQgY2hlY2tvdXQgLWYgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCitjcl90b19RX25vX05MICgpIHsKKyAgICB0ciAnXDAxNScgUSB8IHRyIC1kICdcMDEyJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMRiBvbmx5IGZpbGUgZ2V0cyBDUkxGIHdpdGggYXV0b2NybGYnICcKKwl0ZXN0ICIkKGNyX3RvX1Ffbm9fTkwgPCBhbGxsZikiID0gIklRYW1RYWxsUUxGUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTWl4ZWQgZmlsZSBpcyBzdGlsbCBtaXhlZCB3aXRoIGF1dG9jcmxmJyAnCisJdGVzdCAiJChjcl90b19RX25vX05MIDwgbWl4ZWQpIiA9ICJPaGhlcmVpc0NSTEZRaW50ZXh0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDUkxGIG9ubHkgZmlsZSBoYXMgQ1JMRiB3aXRoIGF1dG9jcmxmJyAnCisJdGVzdCAiJChjcl90b19RX25vX05MIDwgYWxsY3JsZikiID0gIklRYW1RYWxsUUNSTEZRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOZXcgQ1JMRiBmaWxlIGdldHMgTEYgaW4gcmVwbycgJworCXRyIC1kICJcMDE1IiA8IGFsbGxmIHwgYXBwZW5kX2NyID4gYWxsbGYyICYmCisJZ2l0IGFkZCBhbGxsZjIgJiYKKwlnaXQgY29tbWl0IC1tICJhbGxsZjIgYWRkZWQiICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlICYmCisJcm0gKiAmJgorCWdpdCBjaGVja291dCAtZiAmJgorCXRlc3RfY21wIGFsbGxmIGFsbGxmMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjEtY29udmVyc2lvbi5zaCBiL3QvdDAwMjEtY29udmVyc2lvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNTBmMGY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDAyMS1jb252ZXJzaW9uLnNoCkBAIC0wLDAgKzEsMTkzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmxvYiBjb252ZXJzaW9uIHZpYSBnaXRhdHRyaWJ1dGVzJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0IDw8RU9GID5yb3QxMy5zaAorIyEkU0hFTExfUEFUSAordHIgXAorICAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgXAorICAnbm9wcXJzdHV2d3h5emFiY2RlZmdoaWprbG1OT1BRUlNUVVZXWFlaQUJDREVGR0hJSktMTScKK0VPRgorY2htb2QgK3ggcm90MTMuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBmaWx0ZXIucm90MTMuc211ZGdlIC4vcm90MTMuc2ggJiYKKwlnaXQgY29uZmlnIGZpbHRlci5yb3QxMy5jbGVhbiAuL3JvdDEzLnNoICYmCisKKwl7CisJICAgIGVjaG8gIioudCBmaWx0ZXI9cm90MTMiCisJICAgIGVjaG8gIiouaSBpZGVudCIKKwl9ID4uZ2l0YXR0cmlidXRlcyAmJgorCisJeworCSAgICBlY2hvIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0KKwkgICAgZWNobyBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6CisJICAgIGVjaG8gJ1wnJyRJZCQnXCcnCisJfSA+dGVzdCAmJgorCWNhdCB0ZXN0ID50ZXN0LnQgJiYKKwljYXQgdGVzdCA+dGVzdC5vICYmCisJY2F0IHRlc3QgPnRlc3QuaSAmJgorCWdpdCBhZGQgdGVzdCB0ZXN0LnQgdGVzdC5pICYmCisJcm0gLWYgdGVzdCB0ZXN0LnQgdGVzdC5pICYmCisJZ2l0IGNoZWNrb3V0IC0tIHRlc3QgdGVzdC50IHRlc3QuaQorJworCitzY3JpcHQ9J3MvXlwkSWQ6IFwoWzAtOWEtZl0qXCkgXCQvXDEvcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBjaGVjayAnCisKKwljbXAgdGVzdC5vIHRlc3QgJiYKKwljbXAgdGVzdC5vIHRlc3QudCAmJgorCisJIyBpZGVudCBzaG91bGQgYmUgc3RyaXBwZWQgaW4gdGhlIHJlcG9zaXRvcnkKKwlnaXQgZGlmZiAtLXJhdyAtLWV4aXQtY29kZSA6dGVzdCA6dGVzdC5pICYmCisJaWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDp0ZXN0KSAmJgorCWVtYmVkZGVkPSQoc2VkIC1uZSAiJHNjcmlwdCIgdGVzdC5pKSAmJgorCXRlc3QgInokaWQiID0gInokZW1iZWRkZWQiICYmCisKKwlnaXQgY2F0LWZpbGUgYmxvYiA6dGVzdC50ID4gdGVzdC5yICYmCisKKwkuL3JvdDEzLnNoIDwgdGVzdC5vID4gdGVzdC50ICYmCisJY21wIHRlc3QuciB0ZXN0LnQKKycKKworIyBJZiBhbiBleHBhbmRlZCBpZGVudCBldmVyIGdldHMgaW50byB0aGUgcmVwb3NpdG9yeSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdAorIyBpdCBpcyBjb2xsYXBzZWQgYmVmb3JlIGJlaW5nIGV4cGFuZGVkIGFnYWluIG9uIGNoZWNrb3V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIGV4cGFuZGVkX2luX3JlcG8gJworCXsKKwkJZWNobyAiRmlsZSB3aXRoIGV4cGFuZGVkIGtleXdvcmRzIgorCQllY2hvICJcJElkXCQiCisJCWVjaG8gIlwkSWQ6XCQiCisJCWVjaG8gIlwkSWQ6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgXCQiCisJCWVjaG8gIlwkSWQ6IE5vU3BhY2VBdEVuZFwkIgorCQllY2hvICJcJElkOk5vU3BhY2VBdEZyb250IFwkIgorCQllY2hvICJcJElkOk5vU3BhY2VBdEVpdGhlckVuZFwkIgorCQllY2hvICJcJElkOiBOb1Rlcm1pbmF0aW5nU3ltYm9sIgorCQllY2hvICJcJElkOiBGb3JlaWduIENvbW1pdCBXaXRoIFNwYWNlcyBcJCIKKwl9ID5leHBhbmRlZC1rZXl3b3Jkcy4wICYmCisKKwl7CisJCWNhdCBleHBhbmRlZC1rZXl3b3Jkcy4wICYmCisJCXByaW50ZiAiXCRJZDogTm9UZXJtaW5hdGluZ1N5bWJvbEF0RU9GIgorCX0gPmV4cGFuZGVkLWtleXdvcmRzICYmCisJY2F0IGV4cGFuZGVkLWtleXdvcmRzID5leHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisJZ2l0IGFkZCBleHBhbmRlZC1rZXl3b3JkcyBleHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisJZ2l0IGNvbW1pdCAtbSAiRmlsZSB3aXRoIGtleXdvcmRzIGV4cGFuZGVkIiAmJgorCWlkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6ZXhwYW5kZWQta2V5d29yZHMpICYmCisKKwl7CisJCWVjaG8gIkZpbGUgd2l0aCBleHBhbmRlZCBrZXl3b3JkcyIKKwkJZWNobyAiXCRJZDogJGlkIFwkIgorCQllY2hvICJcJElkOiAkaWQgXCQiCisJCWVjaG8gIlwkSWQ6ICRpZCBcJCIKKwkJZWNobyAiXCRJZDogJGlkIFwkIgorCQllY2hvICJcJElkOiAkaWQgXCQiCisJCWVjaG8gIlwkSWQ6ICRpZCBcJCIKKwkJZWNobyAiXCRJZDogTm9UZXJtaW5hdGluZ1N5bWJvbCIKKwkJZWNobyAiXCRJZDogRm9yZWlnbiBDb21taXQgV2l0aCBTcGFjZXMgXCQiCisJfSA+ZXhwZWN0ZWQtb3V0cHV0LjAgJiYKKwl7CisJCWNhdCBleHBlY3RlZC1vdXRwdXQuMCAmJgorCQlwcmludGYgIlwkSWQ6IE5vVGVybWluYXRpbmdTeW1ib2xBdEVPRiIKKwl9ID5leHBlY3RlZC1vdXRwdXQgJiYKKwl7CisJCWFwcGVuZF9jciA8ZXhwZWN0ZWQtb3V0cHV0LjAgJiYKKwkJcHJpbnRmICJcJElkOiBOb1Rlcm1pbmF0aW5nU3ltYm9sQXRFT0YiCisJfSA+ZXhwZWN0ZWQtb3V0cHV0LWNybGYgJiYKKwl7CisJCWVjaG8gImV4cGFuZGVkLWtleXdvcmRzIGlkZW50IgorCQllY2hvICJleHBhbmRlZC1rZXl3b3Jkcy1jcmxmIGlkZW50IHRleHQgZW9sPWNybGYiCisJfSA+Pi5naXRhdHRyaWJ1dGVzICYmCisKKwlybSAtZiBleHBhbmRlZC1rZXl3b3JkcyBleHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisKKwlnaXQgY2hlY2tvdXQgLS0gZXhwYW5kZWQta2V5d29yZHMgJiYKKwl0ZXN0X2NtcCBleHBhbmRlZC1rZXl3b3JkcyBleHBlY3RlZC1vdXRwdXQgJiYKKworCWdpdCBjaGVja291dCAtLSBleHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisJdGVzdF9jbXAgZXhwYW5kZWQta2V5d29yZHMtY3JsZiBleHBlY3RlZC1vdXRwdXQtY3JsZgorJworCisjIFRoZSB1c2Ugb2YgJWYgaW4gYSBmaWx0ZXIgZGVmaW5pdGlvbiBpcyBleHBhbmRlZCB0byB0aGUgcGF0aCB0bworIyB0aGUgZmlsZW5hbWUgYmVpbmcgc211ZGdlZCBvciBjbGVhbmVkLiAgSXQgbXVzdCBiZSBzaGVsbCBlc2NhcGVkLgorIyBGaXJzdCwgc2V0IHVwIHNvbWUgaW50ZXJlc3RpbmcgZmlsZSBuYW1lcyBhbmQgcGV0IHRoZW0gaW4KKyMgLmdpdGF0dHJpYnV0ZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWx0ZXIgc2hlbGwtZXNjYXBlZCBmaWxlbmFtZXMnICcKKwljYXQgPmFyZ2Muc2ggPDwtRU9GICYmCisJIyEkU0hFTExfUEFUSAorCWNhdCA+L2Rldi9udWxsCisJZWNobyBhcmdjOiBcJCMgIlwkQCIKKwlFT0YKKwlub3JtYWw9bmFtZS1uby1tYWdpYyAmJgorCXNwZWNpYWw9Im5hbWUgIHdpdGggJ1wnJ3NxJ1wnJyBhbmQgXCR4IiAmJgorCWVjaG8gc29tZSB0ZXN0IHRleHQgPiIkbm9ybWFsIiAmJgorCWVjaG8gc29tZSB0ZXN0IHRleHQgPiIkc3BlY2lhbCIgJiYKKwlnaXQgYWRkICIkbm9ybWFsIiAiJHNwZWNpYWwiICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAiYWRkIGZpbGVzIiAmJgorCWVjaG8gIm5hbWUqIGZpbHRlcj1hcmdjIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCSMgZGVsZXRlIHRoZSBmaWxlcyBhbmQgY2hlY2sgdGhlbSBvdXQgYWdhaW4sIHVzaW5nIGEgc211ZGdlIGZpbHRlcgorCSMgdGhhdCB3aWxsIGNvdW50IHRoZSBhcmdzIGFuZCBlY2hvIHRoZSBjb21tYW5kLWxpbmUgYmFjayB0byB1cworCWdpdCBjb25maWcgZmlsdGVyLmFyZ2Muc211ZGdlICJzaCAuL2FyZ2Muc2ggJWYiICYmCisJcm0gIiRub3JtYWwiICIkc3BlY2lhbCIgJiYKKwlnaXQgY2hlY2tvdXQgLS0gIiRub3JtYWwiICIkc3BlY2lhbCIgJiYKKworCSMgbWFrZSBzdXJlIGFyZ2Muc2ggY291bnRlZCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3MKKwllY2hvICJhcmdjOiAxICRub3JtYWwiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiRub3JtYWwiICYmCisJZWNobyAiYXJnYzogMSAkc3BlY2lhbCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCAiJHNwZWNpYWwiICYmCisKKwkjIGRvIHRoZSBzYW1lIHRoaW5nLCBidXQgd2l0aCBtb3JlIGFyZ3MgaW4gdGhlIGZpbHRlciBleHByZXNzaW9uCisJZ2l0IGNvbmZpZyBmaWx0ZXIuYXJnYy5zbXVkZ2UgInNoIC4vYXJnYy5zaCAlZiAtLW15LWV4dHJhLWFyZyIgJiYKKwlybSAiJG5vcm1hbCIgIiRzcGVjaWFsIiAmJgorCWdpdCBjaGVja291dCAtLSAiJG5vcm1hbCIgIiRzcGVjaWFsIiAmJgorCisJIyBtYWtlIHN1cmUgYXJnYy5zaCBjb3VudGVkIHRoZSByaWdodCBudW1iZXIgb2YgYXJncworCWVjaG8gImFyZ2M6IDIgJG5vcm1hbCAtLW15LWV4dHJhLWFyZyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCAiJG5vcm1hbCIgJiYKKwllY2hvICJhcmdjOiAyICRzcGVjaWFsIC0tbXktZXh0cmEtYXJnIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkc3BlY2lhbCIgJiYKKwk6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcXVpcmVkIGZpbHRlciBzdWNjZXNzJyAnCisJZ2l0IGNvbmZpZyBmaWx0ZXIucmVxdWlyZWQuc211ZGdlIGNhdCAmJgorCWdpdCBjb25maWcgZmlsdGVyLnJlcXVpcmVkLmNsZWFuIGNhdCAmJgorCWdpdCBjb25maWcgZmlsdGVyLnJlcXVpcmVkLnJlcXVpcmVkIHRydWUgJiYKKworCWVjaG8gIiouciBmaWx0ZXI9cmVxdWlyZWQiID4uZ2l0YXR0cmlidXRlcyAmJgorCisJZWNobyB0ZXN0ID50ZXN0LnIgJiYKKwlnaXQgYWRkIHRlc3QuciAmJgorCXJtIC1mIHRlc3QuciAmJgorCWdpdCBjaGVja291dCAtLSB0ZXN0LnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWlyZWQgZmlsdGVyIHNtdWRnZSBmYWlsdXJlJyAnCisJZ2l0IGNvbmZpZyBmaWx0ZXIuZmFpbHNtdWRnZS5zbXVkZ2UgZmFsc2UgJiYKKwlnaXQgY29uZmlnIGZpbHRlci5mYWlsc211ZGdlLmNsZWFuIGNhdCAmJgorCWdpdCBjb25maWcgZmlsdGVyLmZhaWxzbXVkZ2UucmVxdWlyZWQgdHJ1ZSAmJgorCisJZWNobyAiKi5mcyBmaWx0ZXI9ZmFpbHNtdWRnZSIgPi5naXRhdHRyaWJ1dGVzICYmCisKKwllY2hvIHRlc3QgPnRlc3QuZnMgJiYKKwlnaXQgYWRkIHRlc3QuZnMgJiYKKwlybSAtZiB0ZXN0LmZzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tIHRlc3QuZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWlyZWQgZmlsdGVyIGNsZWFuIGZhaWx1cmUnICcKKwlnaXQgY29uZmlnIGZpbHRlci5mYWlsY2xlYW4uc211ZGdlIGNhdCAmJgorCWdpdCBjb25maWcgZmlsdGVyLmZhaWxjbGVhbi5jbGVhbiBmYWxzZSAmJgorCWdpdCBjb25maWcgZmlsdGVyLmZhaWxjbGVhbi5yZXF1aXJlZCB0cnVlICYmCisKKwllY2hvICIqLmZjIGZpbHRlcj1mYWlsY2xlYW4iID4uZ2l0YXR0cmlidXRlcyAmJgorCisJZWNobyB0ZXN0ID50ZXN0LmZjICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCB0ZXN0LmZjCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyMi1jcmxmLXJlbmFtZS5zaCBiL3QvdDAwMjItY3JsZi1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2FmM2ZiYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjItY3JsZi1yZW5hbWUuc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2lnbm9yZSBDUiBpbiBDUkxGIHNlcXVlbmNlIHdoaWxlIGNvbXB1dGluZyBzaW1pbGlhcml0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL3QwMDIyLWNybGYtcmVuYW1lLnNoID5zYW1wbGUgJiYKKwlnaXQgYWRkIHNhbXBsZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisKKwlhcHBlbmRfY3IgPCIkVEVTVF9ESVJFQ1RPUlkiL3QwMDIyLWNybGYtcmVuYW1lLnNoID5lbHBtYXMgJiYKKwlnaXQgYWRkIGVscG1hcyAmJgorCXJtIC1mIHNhbXBsZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1NJyAnCisKKwlnaXQgZGlmZi10cmVlIC1NIC1yIC0tbmFtZS1zdGF0dXMgSEVBRF4gSEVBRCB8CisJc2VkIC1lICJzL1JbMC05XSovUk5VTS8iID5hY3R1YWwgJiYKKwllY2hvICJSTlVNCXNhbXBsZQllbHBtYXMiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDIzLWNybGYtYW0uc2ggYi90L3QwMDIzLWNybGYtYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjliYmI5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjMtY3JsZi1hbS5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBhbSB3aXRoIGF1dG8uY3JsZicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+cGF0Y2hmaWxlIDw8XEVPRgorRnJvbSAzOGJlMTAwNzJlNDVkZDZiMDhjZTQwODUxZTNmY2E2MGEzMWEzNDBiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyaXVzIFN0b3JtLU9sc2VuIDx4QHkuY29tPgorRGF0ZTogVGh1LCAyMyBBdWcgMjAwNyAxMzowMDowMCArMDIwMAorU3ViamVjdDogdGVzdDEKKworLS0tCisgZm9vIHwgMSArCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZvbworCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTcxNmNhNTk4N2NiZjk3ZDZiYjU0OTIwYmVhNmFkZGUyNDJkODdlNgorLS0tIC9kZXYvbnVsbAorKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZWNobyBmb28gPmJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0nICcKKworCWdpdCBhbSAtMyA8cGF0Y2hmaWxlICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLXN0YXR1cyAtLWV4aXQtY29kZQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyNC1jcmxmLWFyY2hpdmUuc2ggYi90L3QwMDI0LWNybGYtYXJjaGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYzZjMWIzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAyNC1jcmxmLWFyY2hpdmUuc2gKQEAgLTAsMCArMSw0NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jlc3BlY3QgY3JsZiBpbiBnaXQgYXJjaGl2ZScKKworLiAuL3Rlc3QtbGliLnNoCitVTlpJUD0ke1VOWklQOi11bnppcH0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCisJcHJpbnRmICJDUkxGIGxpbmUgZW5kaW5nXHJcbkFuZCBhbm90aGVyXHJcbiIgPiBzYW1wbGUgJiYKKwlnaXQgYWRkIHNhbXBsZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFyIGFyY2hpdmUnICcKKworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciBIRUFEIHwKKwkoIG1rZGlyIHVudGFycmVkICYmIGNkIHVudGFycmVkICYmICIkVEFSIiAteGYgLSApICYmCisKKwl0ZXN0X2NtcCBzYW1wbGUgdW50YXJyZWQvc2FtcGxlCisKKycKKworIiRVTlpJUCIgLXYgPi9kZXYvbnVsbCAyPiYxCitpZiBbICQ/IC1lcSAxMjcgXTsgdGhlbgorCXNheSAiU2tpcHBpbmcgWklQIHRlc3QsIGJlY2F1c2UgdW56aXAgd2FzIG5vdCBmb3VuZCIKK2Vsc2UKKwl0ZXN0X3NldF9wcmVyZXEgVU5aSVAKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgJ3ppcCBhcmNoaXZlJyAnCisKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCA+dGVzdC56aXAgJiYKKworCSggbWtkaXIgdW56aXBwZWQgJiYgY2QgdW56aXBwZWQgJiYgdW56aXAgLi4vdGVzdC56aXAgKSAmJgorCisJdGVzdF9jbXAgc2FtcGxlIHVuemlwcGVkL3NhbXBsZQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyNS1jcmxmLWF1dG8uc2ggYi90L3QwMDI1LWNybGYtYXV0by5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNWY2N2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDAyNS1jcmxmLWF1dG8uc2gKQEAgLTAsMCArMSwxNTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDUkxGIGNvbnZlcnNpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCitoYXNfY3IoKSB7CisJdHIgJ1wwMTUnIFEgPCIkMSIgfCBncmVwIFEgPi9kZXYvbnVsbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCisJZm9yIHcgaW4gSGVsbG8gd29ybGQgaG93IGFyZSB5b3U7IGRvIGVjaG8gJHc7IGRvbmUgPm9uZSAmJgorCWZvciB3IGluIEkgYW0gdmVyeSB2ZXJ5IGZpbmUgdGhhbmsgeW91OyBkbyBlY2hvICR7d31ROyBkb25lIHwgcV90b19jciA+dHdvICYmCisJZm9yIHcgaW4gT2ggaGVyZSBpcyBhIFFOVUwgYnl0ZSBob3cgYWxhcm1pbmc7IGRvIGVjaG8gJHt3fTsgZG9uZSB8IHFfdG9fbnVsID50aHJlZSAmJgorCWdpdCBhZGQgLiAmJgorCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlvbmU9YGdpdCByZXYtcGFyc2UgSEVBRDpvbmVgICYmCisJdHdvPWBnaXQgcmV2LXBhcnNlIEhFQUQ6dHdvYCAmJgorCXRocmVlPWBnaXQgcmV2LXBhcnNlIEhFQUQ6dGhyZWVgICYmCisKKwllY2hvIGhhcHB5LgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IHNldHRpbmdzIGNhdXNlIG5vIGNoYW5nZXMnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBvbmUgdHdvIHRocmVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCSEgaGFzX2NyIG9uZSAmJgorCWhhc19jciB0d28gJiYKKwlvbmVkaWZmPWBnaXQgZGlmZiBvbmVgICYmCisJdHdvZGlmZj1gZ2l0IGRpZmYgdHdvYCAmJgorCXRocmVlZGlmZj1gZ2l0IGRpZmYgdGhyZWVgICYmCisJdGVzdCAteiAiJG9uZWRpZmYiIC1hIC16ICIkdHdvZGlmZiIgLWEgLXogIiR0aHJlZWRpZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NybGY9dHJ1ZSBjYXVzZXMgYSBDUkxGIGZpbGUgdG8gYmUgbm9ybWFsaXplZCcgJworCisJIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBjaGVjaworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBvbmUgdHdvIHRocmVlICYmCisJZWNobyAidHdvIGNybGYiID4gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJIyBOb3RlLCAibm9ybWFsaXplZCIgbWVhbnMgdGhhdCBnaXQgd2lsbCBub3JtYWxpemUgaXQgaWYgYWRkZWQKKwloYXNfY3IgdHdvICYmCisJdHdvZGlmZj1gZ2l0IGRpZmYgdHdvYCAmJgorCXRlc3QgLW4gIiR0d29kaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXh0PXRydWUgY2F1c2VzIGEgQ1JMRiBmaWxlIHRvIGJlIG5vcm1hbGl6ZWQnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBvbmUgdHdvIHRocmVlICYmCisJZWNobyAidHdvIHRleHQiID4gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJIyBOb3RlLCAibm9ybWFsaXplZCIgbWVhbnMgdGhhdCBnaXQgd2lsbCBub3JtYWxpemUgaXQgaWYgYWRkZWQKKwloYXNfY3IgdHdvICYmCisJdHdvZGlmZj1gZ2l0IGRpZmYgdHdvYCAmJgorCXRlc3QgLW4gIiR0d29kaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlb2w9Y3JsZiBnaXZlcyBhIG5vcm1hbGl6ZWQgZmlsZSBDUkxGcyB3aXRoIGF1dG9jcmxmPWZhbHNlJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyB0bXAgb25lIHR3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCWVjaG8gIm9uZSBlb2w9Y3JsZiIgPiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwloYXNfY3Igb25lICYmCisJb25lZGlmZj1gZ2l0IGRpZmYgb25lYCAmJgorCXRlc3QgLXogIiRvbmVkaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlb2w9Y3JsZiBnaXZlcyBhIG5vcm1hbGl6ZWQgZmlsZSBDUkxGcyB3aXRoIGF1dG9jcmxmPWlucHV0JyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyB0bXAgb25lIHR3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCWVjaG8gIm9uZSBlb2w9Y3JsZiIgPiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwloYXNfY3Igb25lICYmCisJb25lZGlmZj1gZ2l0IGRpZmYgb25lYCAmJgorCXRlc3QgLXogIiRvbmVkaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlb2w9bGYgZ2l2ZXMgYSBub3JtYWxpemVkIGZpbGUgTEZzIHdpdGggYXV0b2NybGY9dHJ1ZScgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIG9uZSB0d28gdGhyZWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWVjaG8gIm9uZSBlb2w9bGYiID4gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJISBoYXNfY3Igb25lICYmCisJb25lZGlmZj1gZ2l0IGRpZmYgb25lYCAmJgorCXRlc3QgLXogIiRvbmVkaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvY3JsZj10cnVlIGRvZXMgbm90IG5vcm1hbGl6ZSBDUkxGIGZpbGVzJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyB0bXAgb25lIHR3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWhhc19jciBvbmUgJiYKKwloYXNfY3IgdHdvICYmCisJb25lZGlmZj1gZ2l0IGRpZmYgb25lYCAmJgorCXR3b2RpZmY9YGdpdCBkaWZmIHR3b2AgJiYKKwl0aHJlZWRpZmY9YGdpdCBkaWZmIHRocmVlYCAmJgorCXRlc3QgLXogIiRvbmVkaWZmIiAtYSAteiAiJHR3b2RpZmYiIC1hIC16ICIkdGhyZWVkaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXh0PWF1dG8sIGF1dG9jcmxmPXRydWUgX2RvZXNfIG5vcm1hbGl6ZSBDUkxGIGZpbGVzJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyB0bXAgb25lIHR3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZWNobyAiKiB0ZXh0PWF1dG8iID4gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaGFzX2NyIG9uZSAmJgorCWhhc19jciB0d28gJiYKKwlvbmVkaWZmPWBnaXQgZGlmZiBvbmVgICYmCisJdHdvZGlmZj1gZ2l0IGRpZmYgdHdvYCAmJgorCXRocmVlZGlmZj1gZ2l0IGRpZmYgdGhyZWVgICYmCisJdGVzdCAteiAiJG9uZWRpZmYiIC1hIC1uICIkdHdvZGlmZiIgLWEgLXogIiR0aHJlZWRpZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RleHQ9YXV0bywgYXV0b2NybGY9dHJ1ZSBkb2VzIG5vdCBub3JtYWxpemUgYmluYXJ5IGZpbGVzJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyB0bXAgb25lIHR3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZWNobyAiKiB0ZXh0PWF1dG8iID4gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJISBoYXNfY3IgdGhyZWUgJiYKKwl0aHJlZWRpZmY9YGdpdCBkaWZmIHRocmVlYCAmJgorCXRlc3QgLXogIiR0aHJlZWRpZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VvbD1jcmxmIF9kb2VzXyBub3JtYWxpemUgYmluYXJ5IGZpbGVzJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyB0bXAgb25lIHR3byB0aHJlZSAmJgorCWVjaG8gInRocmVlIGVvbD1jcmxmIiA+IC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWhhc19jciB0aHJlZSAmJgorCXRocmVlZGlmZj1gZ2l0IGRpZmYgdGhyZWVgICYmCisJdGVzdCAteiAiJHRocmVlZGlmZiIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDI2LWVvbC1jb25maWcuc2ggYi90L3QwMDI2LWVvbC1jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmUwMTY0YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjYtZW9sLWNvbmZpZy5zaApAQCAtMCwwICsxLDgzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ1JMRiBjb252ZXJzaW9uJworCisuIC4vdGVzdC1saWIuc2gKKworaGFzX2NyKCkgeworCXRyICdcMDE1JyBRIDwiJDEiIHwgZ3JlcCBRID4vZGV2L251bGwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKworCWVjaG8gIm9uZSB0ZXh0IiA+IC5naXRhdHRyaWJ1dGVzICYmCisKKwlmb3IgdyBpbiBIZWxsbyB3b3JsZCBob3cgYXJlIHlvdTsgZG8gZWNobyAkdzsgZG9uZSA+b25lICYmCisJZm9yIHcgaW4gSSBhbSB2ZXJ5IHZlcnkgZmluZSB0aGFuayB5b3U7IGRvIGVjaG8gJHc7IGRvbmUgPnR3byAmJgorCWdpdCBhZGQgLiAmJgorCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlvbmU9YGdpdCByZXYtcGFyc2UgSEVBRDpvbmVgICYmCisJdHdvPWBnaXQgcmV2LXBhcnNlIEhFQUQ6dHdvYCAmJgorCisJZWNobyBoYXBweS4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW9sPWxmIHB1dHMgTEZzIGluIG5vcm1hbGl6ZWQgZmlsZScgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIG9uZSB0d28gJiYKKwlnaXQgY29uZmlnIGNvcmUuZW9sIGxmICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCSEgaGFzX2NyIG9uZSAmJgorCSEgaGFzX2NyIHR3byAmJgorCW9uZWRpZmY9YGdpdCBkaWZmIG9uZWAgJiYKKwl0d29kaWZmPWBnaXQgZGlmZiB0d29gICYmCisJdGVzdCAteiAiJG9uZWRpZmYiIC1hIC16ICIkdHdvZGlmZiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW9sPWNybGYgcHV0cyBDUkxGcyBpbiBub3JtYWxpemVkIGZpbGUnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBvbmUgdHdvICYmCisJZ2l0IGNvbmZpZyBjb3JlLmVvbCBjcmxmICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWhhc19jciBvbmUgJiYKKwkhIGhhc19jciB0d28gJiYKKwlvbmVkaWZmPWBnaXQgZGlmZiBvbmVgICYmCisJdHdvZGlmZj1gZ2l0IGRpZmYgdHdvYCAmJgorCXRlc3QgLXogIiRvbmVkaWZmIiAtYSAteiAiJHR3b2RpZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9jcmxmPXRydWUgb3ZlcnJpZGVzIGVvbD1sZicgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIG9uZSB0d28gJiYKKwlnaXQgY29uZmlnIGNvcmUuZW9sIGxmICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaGFzX2NyIG9uZSAmJgorCWhhc19jciB0d28gJiYKKwlvbmVkaWZmPWBnaXQgZGlmZiBvbmVgICYmCisJdHdvZGlmZj1gZ2l0IGRpZmYgdHdvYCAmJgorCXRlc3QgLXogIiRvbmVkaWZmIiAtYSAteiAiJHR3b2RpZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9jcmxmPXRydWUgb3ZlcnJpZGVzIHVuc2V0IGVvbCcgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIG9uZSB0d28gJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGNvcmUuZW9sICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaGFzX2NyIG9uZSAmJgorCWhhc19jciB0d28gJiYKKwlvbmVkaWZmPWBnaXQgZGlmZiBvbmVgICYmCisJdHdvZGlmZj1gZ2l0IGRpZmYgdHdvYCAmJgorCXRlc3QgLXogIiRvbmVkaWZmIiAtYSAteiAiJHR3b2RpZmYiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAzMC1zdHJpcHNwYWNlLnNoIGIvdC90MDAzMC1zdHJpcHNwYWNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjYjBhM2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDMwLXN0cmlwc3BhY2Uuc2gKQEAgLTAsMCArMSw0MDAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2FybG9zIFJpY2EKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0cmlwc3BhY2UnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0NDA9J0EgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG8nCitzNDA9JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnCitzc3M9IiRzNDAkczQwJHM0MCRzNDAkczQwJHM0MCRzNDAkczQwJHM0MCRzNDAiICMgNDAwCit0dHQ9IiR0NDAkdDQwJHQ0MCR0NDAkdDQwJHQ0MCR0NDAkdDQwJHQ0MCR0NDAiICMgNDAwCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdsb25nIGxpbmVzIHdpdGhvdXQgc3BhY2VzIHNob3VsZCBiZSB1bmNoYW5nZWQnICcKKyAgICBlY2hvICIkdHR0IiA+ZXhwZWN0ICYmCisgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgZWNobyAiJHR0dCR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0JHR0dCR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0JHR0dCR0dHQkdHR0IiA+ZXhwZWN0ICYmCisgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGluZXMgd2l0aCBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBzaG91bGQgYmUgdW5jaGFuZ2VkJyAnCisgICAgZWNobyAiJHNzcyR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkc3NzJHNzcyR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkc3NzJHNzcyRzc3MkdHR0IiA+ZXhwZWN0ICYmCisgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGluZXMgd2l0aCBpbnRlcm1lZGlhdGUgc3BhY2VzIHNob3VsZCBiZSB1bmNoYW5nZWQnICcKKyAgICBlY2hvICIkdHR0JHNzcyR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0JHNzcyRzc3MkdHR0IiA+ZXhwZWN0ICYmCisgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29uc2VjdXRpdmUgYmxhbmsgbGluZXMgc2hvdWxkIGJlIHVuaWZpZWQnICcKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXG5cblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHRcblxuXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcblxuXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXG5cblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXG5cblxuXG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cblxuXG5cbiR0dHQkdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHRcblx0XG4gXG5cbiAgXHRcdFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcblx0XG4gXG5cbiAgXHRcdFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cdFxuIFxuXG4gIFx0XHRcbiR0dHQkdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdvbmx5IGNvbnNlY3V0aXZlIGJsYW5rIGxpbmVzIHNob3VsZCBiZSBjb21wbGV0ZWx5IHJlbW92ZWQnICcKKyAgICA+IGV4cGVjdCAmJgorCisgICAgcHJpbnRmICJcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICJcblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHNzc1xuJHNzc1xuJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiRzc3Mkc3NzXG4kc3NzXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICJcbiRzc3NcbiRzc3Mkc3NzXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHNzcyRzc3Mkc3NzJHNzc1xuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICJcbiRzc3Mkc3NzJHNzcyRzc3NcblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIlxuXG4kc3NzJHNzcyRzc3Mkc3NzXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbnNlY3V0aXZlIGJsYW5rIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgc2hvdWxkIGJlIHJlbW92ZWQnICcKKyAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIlxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIlxuXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiXG5cblxuJHR0dCR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIlxuXG5cbiR0dHQkdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIlxuXG5cbiR0dHQkdHR0JHR0dCR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG4iID4gZXhwZWN0ICYmCisKKyAgICBwcmludGYgIiRzc3NcbiRzc3NcbiRzc3NcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICJcbiRzc3NcbiRzc3Mkc3NzXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHNzcyRzc3NcbiRzc3NcblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiRzc3Mkc3NzJHNzc1xuXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICJcbiRzc3Mkc3NzJHNzc1xuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiXG5cbiRzc3Mkc3NzJHNzc1xuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb25zZWN1dGl2ZSBibGFuayBsaW5lcyBhdCB0aGUgZW5kIHNob3VsZCBiZSByZW1vdmVkJyAnCisgICAgcHJpbnRmICIkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHQkdHR0XG5cblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcblxuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHQkdHR0XG5cblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuIiA+IGV4cGVjdCAmJgorCisgICAgcHJpbnRmICIkdHR0XG4kc3NzXG4kc3NzXG4kc3NzXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kc3NzXG4kc3NzJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiRzc3Mkc3NzXG4kc3NzXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG4kc3NzJHNzcyRzc3NcblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kc3NzJHNzcyRzc3NcblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuXG4kc3NzJHNzcyRzc3NcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndGV4dCB3aXRob3V0IG5ld2xpbmUgYXQgZW5kIHNob3VsZCBlbmQgd2l0aCBuZXdsaW5lJyAnCisgICAgdGVzdCBgcHJpbnRmICIkdHR0IiB8IGdpdCBzdHJpcHNwYWNlIHwgd2MgLWxgIC1ndCAwICYmCisgICAgdGVzdCBgcHJpbnRmICIkdHR0JHR0dCIgfCBnaXQgc3RyaXBzcGFjZSB8IHdjIC1sYCAtZ3QgMCAmJgorICAgIHRlc3QgYHByaW50ZiAiJHR0dCR0dHQkdHR0IiB8IGdpdCBzdHJpcHNwYWNlIHwgd2MgLWxgIC1ndCAwICYmCisgICAgdGVzdCBgcHJpbnRmICIkdHR0JHR0dCR0dHQkdHR0IiB8IGdpdCBzdHJpcHNwYWNlIHwgd2MgLWxgIC1ndCAwCisnCisKKyMgdGV4dCBwbHVzIHNwYWNlcyBhdCB0aGUgZW5kOgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndGV4dCBwbHVzIHNwYWNlcyB3aXRob3V0IG5ld2xpbmUgYXQgZW5kIHNob3VsZCBlbmQgd2l0aCBuZXdsaW5lJyAnCisgICAgdGVzdCBgcHJpbnRmICIkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IHdjIC1sYCAtZ3QgMCAmJgorICAgIHRlc3QgYHByaW50ZiAiJHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgd2MgLWxgIC1ndCAwICYmCisgICAgdGVzdCBgcHJpbnRmICIkdHR0JHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgd2MgLWxgIC1ndCAwICYmCisgICAgdGVzdCBgcHJpbnRmICIkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbGAgLWd0IDAgJiYKKyAgICB0ZXN0IGBwcmludGYgIiR0dHQkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbGAgLWd0IDAgJiYKKyAgICB0ZXN0IGBwcmludGYgIiR0dHQkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbGAgLWd0IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3RleHQgcGx1cyBzcGFjZXMgd2l0aG91dCBuZXdsaW5lIGF0IGVuZCBzaG91bGQgbm90IHNob3cgc3BhY2VzJyAnCisgICAgISAocHJpbnRmICIkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKHByaW50ZiAiJHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkdHR0JHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChwcmludGYgIiR0dHQkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChwcmludGYgIiR0dHQkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3RleHQgcGx1cyBzcGFjZXMgd2l0aG91dCBuZXdsaW5lIHNob3VsZCBzaG93IHRoZSBjb3JyZWN0IGxpbmVzJyAnCisgICAgcHJpbnRmICIkdHR0XG4iID5leHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndGV4dCBwbHVzIHNwYWNlcyBhdCBlbmQgc2hvdWxkIG5vdCBzaG93IHNwYWNlcycgJworICAgICEgKGVjaG8gIiR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAoZWNobyAiJHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAoZWNobyAiJHR0dCR0dHQkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKGVjaG8gIiR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKGVjaG8gIiR0dHQkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChlY2hvICIkdHR0JHNzcyRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd0ZXh0IHBsdXMgc3BhY2VzIGF0IGVuZCBzaG91bGQgYmUgY2xlYW5lZCBhbmQgbmV3bGluZSBtdXN0IHJlbWFpbicgJworICAgIGVjaG8gIiR0dHQiID5leHBlY3QgJiYKKyAgICBlY2hvICIkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgZWNobyAiJHR0dCIgPmV4cGVjdCAmJgorICAgIGVjaG8gIiR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgZWNobyAiJHR0dCIgPmV4cGVjdCAmJgorICAgIGVjaG8gIiR0dHQkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiR0dHQkdHR0IiA+ZXhwZWN0ICYmCisgICAgZWNobyAiJHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0JHR0dCIgPmV4cGVjdCAmJgorICAgIGVjaG8gIiR0dHQkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiR0dHQkdHR0JHR0dCIgPmV4cGVjdCAmJgorICAgIGVjaG8gIiR0dHQkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBzcGFjZXMgb25seToKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NwYWNlcyB3aXRoIG5ld2xpbmUgYXQgZW5kIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGVtcHR5IHN0cmluZycgJworICAgIHByaW50ZiAiIiA+ZXhwZWN0ICYmCisKKyAgICBlY2hvIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiRzc3Mkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NwYWNlcyB3aXRob3V0IG5ld2xpbmUgYXQgZW5kIHNob3VsZCBub3Qgc2hvdyBzcGFjZXMnICcKKyAgICAhIChwcmludGYgIiIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChwcmludGYgIiRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChwcmludGYgIiRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkc3NzJHNzcyRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICIgPi9kZXYvbnVsbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NwYWNlcyB3aXRob3V0IG5ld2xpbmUgYXQgZW5kIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGVtcHR5IHN0cmluZycgJworICAgIHByaW50ZiAiIiA+ZXhwZWN0ICYmCisKKyAgICBwcmludGYgIiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHNzcyRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29uc2VjdXRpdmUgdGV4dCBsaW5lcyBzaG91bGQgYmUgdW5jaGFuZ2VkJyAnCisgICAgcHJpbnRmICIkdHR0JHR0dFxuJHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG4kdHR0XG4iID5leHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuJHR0dFxuJHR0dFxuJHR0dCR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuJHR0dFxuJHR0dFxuJHR0dCR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG4kdHR0XG5cbiR0dHQkdHR0XG4kdHR0XG4iID5leHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHRcbiR0dHRcblxuJHR0dCR0dHRcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4kdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG5cbiR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuJHR0dCR0dHRcblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmlwIGNvbW1lbnRzLCB0b28nICcKKwl0ZXN0ICEgLXogIiQoZWNobyAiIyBjb21tZW50IiB8IGdpdCBzdHJpcHNwYWNlKSIgJiYKKwl0ZXN0IC16ICIkKGVjaG8gIiMgY29tbWVudCIgfCBnaXQgc3RyaXBzcGFjZSAtcykiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoIGIvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI0NGE0M2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2gKQEAgLTAsMCArMSw0NDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdvdXIgb3duIG9wdGlvbiBwYXJzZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPiBleHBlY3QgPDwgRU9GCit1c2FnZTogdGVzdC1wYXJzZS1vcHRpb25zIDxvcHRpb25zPgorCisgICAgLS15ZXMgICAgICAgICAgICAgICAgIGdldCBhIGJvb2xlYW4KKyAgICAtRCwgLS1uby1kb3VidCAgICAgICAgYmVnaW5zIHdpdGggJ25vLScKKyAgICAtQiwgLS1uby1mZWFyICAgICAgICAgYmUgYnJhdmUKKyAgICAtYiwgLS1ib29sZWFuICAgICAgICAgaW5jcmVtZW50IGJ5IG9uZQorICAgIC00LCAtLW9yNCAgICAgICAgICAgICBiaXR3aXNlLW9yIGJvb2xlYW4gd2l0aCAuLi4wMTAwCisgICAgLS1uZWctb3I0ICAgICAgICAgICAgIHNhbWUgYXMgLS1uby1vcjQKKworICAgIC1pLCAtLWludGVnZXIgPG4+ICAgICBnZXQgYSBpbnRlZ2VyCisgICAgLWogPG4+ICAgICAgICAgICAgICAgIGdldCBhIGludGVnZXIsIHRvbworICAgIC0tc2V0MjMgICAgICAgICAgICAgICBzZXQgaW50ZWdlciB0byAyMworICAgIC10IDx0aW1lPiAgICAgICAgICAgICBnZXQgdGltZXN0YW1wIG9mIDx0aW1lPgorICAgIC1MLCAtLWxlbmd0aCA8c3RyPiAgICBnZXQgbGVuZ3RoIG9mIDxzdHI+CisgICAgLUYsIC0tZmlsZSA8ZmlsZT4gICAgIHNldCBmaWxlIHRvIDxmaWxlPgorCitTdHJpbmcgb3B0aW9ucworICAgIC1zLCAtLXN0cmluZyA8c3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgYSBzdHJpbmcKKyAgICAtLXN0cmluZzIgPHN0cj4gICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nCisgICAgLS1zdCA8c3Q+ICAgICAgICAgICAgIGdldCBhbm90aGVyIHN0cmluZyAocGVydmVydCBvcmRlcmluZykKKyAgICAtbyA8c3RyPiAgICAgICAgICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nCisgICAgLS1kZWZhdWx0LXN0cmluZyAgICAgIHNldCBzdHJpbmcgdG8gZGVmYXVsdAorICAgIC0tbGlzdCA8c3RyPiAgICAgICAgICBhZGQgc3RyIHRvIGxpc3QKKworTWFnaWMgYXJndW1lbnRzCisgICAgLS1xdXV4ICAgICAgICAgICAgICAgIG1lYW5zIC0tcXV1eAorICAgIC1OVU0gICAgICAgICAgICAgICAgICBzZXQgaW50ZWdlciB0byBOVU0KKyAgICArICAgICAgICAgICAgICAgICAgICAgc2FtZSBhcyAtYgorICAgIC0tYW1iaWd1b3VzICAgICAgICAgICBwb3NpdGl2ZSBhbWJpZ3VpdHkKKyAgICAtLW5vLWFtYmlndW91cyAgICAgICAgbmVnYXRpdmUgYW1iaWd1aXR5CisKK1N0YW5kYXJkIG9wdGlvbnMKKyAgICAtLWFiYnJldls9PG4+XSAgICAgICAgdXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMKKyAgICAtdiwgLS12ZXJib3NlICAgICAgICAgYmUgdmVyYm9zZQorICAgIC1uLCAtLWRyeS1ydW4gICAgICAgICBkcnkgcnVuCisgICAgLXEsIC0tcXVpZXQgICAgICAgICAgIGJlIHF1aWV0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGhlbHAnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXBhcnNlLW9wdGlvbnMgLWggPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworbXYgZXhwZWN0IGV4cGVjdC5lcnIKKworY2F0ID5leHBlY3QudGVtcGxhdGUgPDxFT0YKK2Jvb2xlYW46IDAKK2ludGVnZXI6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKworY2hlY2soKSB7CisJd2hhdD0iJDEiICYmCisJc2hpZnQgJiYKKwlleHBlY3Q9IiQxIiAmJgorCXNoaWZ0ICYmCisJc2VkICJzL14kd2hhdCAuKi8kd2hhdCAkZXhwZWN0LyIgPGV4cGVjdC50ZW1wbGF0ZSA+ZXhwZWN0ICYmCisJdGVzdC1wYXJzZS1vcHRpb25zICQqID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0Cit9CisKK2NoZWNrX2kxOG4oKSB7CisJd2hhdD0iJDEiICYmCisJc2hpZnQgJiYKKwlleHBlY3Q9IiQxIiAmJgorCXNoaWZ0ICYmCisJc2VkICJzL14kd2hhdCAuKi8kd2hhdCAkZXhwZWN0LyIgPGV4cGVjdC50ZW1wbGF0ZSA+ZXhwZWN0ICYmCisJdGVzdC1wYXJzZS1vcHRpb25zICQqID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorfQorCitjaGVja191bmtub3duKCkgeworCWNhc2UgIiQxIiBpbgorCS0tKikKKwkJZWNobyBlcnJvcjogdW5rbm93biBvcHRpb24gXGAkezEjLS19XCcgPmV4cGVjdCA7OworCS0qKQorCQllY2hvIGVycm9yOiB1bmtub3duIHN3aXRjaCBcYCR7MSMtfVwnID5leHBlY3QgOzsKKwllc2FjICYmCisJY2F0IGV4cGVjdC5lcnIgPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXBhcnNlLW9wdGlvbnMgJCogPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dC5lcnIKK30KKworY2hlY2tfdW5rbm93bl9pMThuKCkgeworCWNhc2UgIiQxIiBpbgorCS0tKikKKwkJZWNobyBlcnJvcjogdW5rbm93biBvcHRpb24gXGAkezEjLS19XCcgPmV4cGVjdCA7OworCS0qKQorCQllY2hvIGVycm9yOiB1bmtub3duIHN3aXRjaCBcYCR7MSMtfVwnID5leHBlY3QgOzsKKwllc2FjICYmCisJY2F0IGV4cGVjdC5lcnIgPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXBhcnNlLW9wdGlvbnMgJCogPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQuZXJyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgIzEnICdjaGVjayBib29sZWFuOiAxIC0teWVzJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSAjMicgJ2NoZWNrIGJvb2xlYW46IDEgLS1uby1kb3VidCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgIzMnICdjaGVjayBib29sZWFuOiAxIC1EJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSAjNCcgJ2NoZWNrIGJvb2xlYW46IDEgLS1uby1mZWFyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSAjNScgJ2NoZWNrIGJvb2xlYW46IDEgLUInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgaXMgaWRlbXBvdGVudCAjMScgJ2NoZWNrIGJvb2xlYW46IDEgLS15ZXMgLS15ZXMnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpIGlzIGlkZW1wb3RlbnQgIzInICdjaGVjayBib29sZWFuOiAxIC1EQicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBuZWdhdGlvbiAjMScgJ2NoZWNrIGJvb2xlYW46IDAgLUQgLS1uby15ZXMnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpIG5lZ2F0aW9uICMyJyAnY2hlY2sgYm9vbGVhbjogMCAtRCAtLW5vLW5vLWRvdWJ0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpIG5vIG5lZ2F0aW9uICMxJyAnY2hlY2tfdW5rbm93bl9pMThuIC0tZmVhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgbm8gbmVnYXRpb24gIzInICdjaGVja191bmtub3duX2kxOG4gLS1uby1uby1mZWFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpIHBvc2l0aXZhdGlvbicgJ2NoZWNrIGJvb2xlYW46IDAgLUQgLS1kb3VidCcKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorYm9vbGVhbjogMgoraW50ZWdlcjogMTcyOQordGltZXN0YW1wOiAwCitzdHJpbmc6IDEyMworYWJicmV2OiA3Cit2ZXJib3NlOiAyCitxdWlldDogbm8KK2RyeSBydW46IHllcworZmlsZTogcHJlZml4L215LmZpbGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydCBvcHRpb25zJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC1zMTIzIC1iIC1pIDE3MjkgLWIgLXZ2IC1uIC1GIG15LmZpbGUgXAorCT4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorYm9vbGVhbjogMgoraW50ZWdlcjogMTcyOQordGltZXN0YW1wOiAwCitzdHJpbmc6IDMyMQorYWJicmV2OiAxMAordmVyYm9zZTogMgorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogcHJlZml4L2ZpLmxlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9uZyBvcHRpb25zJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tYm9vbGVhbiAtLWludGVnZXIgMTcyOSAtLWJvb2xlYW4gLS1zdHJpbmcyPTMyMSBcCisJCS0tdmVyYm9zZSAtLXZlcmJvc2UgLS1uby1kcnktcnVuIC0tYWJicmV2PTEwIC0tZmlsZSBmaS5sZVwKKwkJLS1vYnNvbGV0ZSA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgcmVxdWlyZWQgdmFsdWUnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLXM7CisJdGVzdCAkPyA9IDEyOSAmJgorCXRlc3QtcGFyc2Utb3B0aW9ucyAtLXN0cmluZzsKKwl0ZXN0ICQ/ID0gMTI5ICYmCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tZmlsZTsKKwl0ZXN0ICQ/ID0gMTI5CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2Jvb2xlYW46IDEKK2ludGVnZXI6IDEzCit0aW1lc3RhbXA6IDAKK3N0cmluZzogMTIzCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorYXJnIDAwOiBhMQorYXJnIDAxOiBiMQorYXJnIDAyOiAtLWJvb2xlYW4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcm1pbmdsZWQgYXJndW1lbnRzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIGExIC0tc3RyaW5nIDEyMyBiMSAtLWJvb2xlYW4gLWogMTMgLS0gLS1ib29sZWFuIFwKKwkJPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitib29sZWFuOiAwCitpbnRlZ2VyOiAyCit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuYW1iaWd1b3VzbHkgYWJicmV2aWF0ZWQgb3B0aW9uJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0taW50IDIgLS1ib29sZWFuIC0tbm8tYm8gPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmFtYmlndW91c2x5IGFiYnJldmlhdGVkIG9wdGlvbiB3aXRoICI9IicgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWludD0yID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzbHkgYWJicmV2aWF0ZWQgb3B0aW9uJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tc3RyaW4gMTIzOworCXRlc3QgJD8gPSAxMjkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorYm9vbGVhbjogMAoraW50ZWdlcjogMAordGltZXN0YW1wOiAwCitzdHJpbmc6IDEyMworYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24gYW1iaWd1b3VzIG9wdGlvbiAoYWZ0ZXIgdHdvIG9wdGlvbnMgaXQgYWJicmV2aWF0ZXMpJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tc3QgMTIzID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gdHlwby5lcnIgPDwgRU9GCitlcnJvcjogZGlkIHlvdSBtZWFuIFxgLS1ib29sZWFuXGAgKHdpdGggdHdvIGRhc2hlcyA/KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBwb3NzaWJsZSB0eXBvcycgJworCXRlc3RfbXVzdF9mYWlsIHRlc3QtcGFyc2Utb3B0aW9ucyAtYm9vbGVhbiA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dCAmJgorCXRlc3RfY21wIHR5cG8uZXJyIG91dHB1dC5lcnIKKycKKworY2F0ID4gdHlwby5lcnIgPDwgRU9GCitlcnJvcjogZGlkIHlvdSBtZWFuIFxgLS1hbWJpZ3VvdXNcYCAod2l0aCB0d28gZGFzaGVzID8pCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IHBvc3NpYmxlIHR5cG9zJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1wYXJzZS1vcHRpb25zIC1hbWJpZ3VvdXMgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQgJiYKKwl0ZXN0X2NtcCB0eXBvLmVyciBvdXRwdXQuZXJyCisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorYm9vbGVhbjogMAoraW50ZWdlcjogMAordGltZXN0YW1wOiAwCitzdHJpbmc6IChub3Qgc2V0KQorYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKK2FyZyAwMDogLS1xdXV4CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2VlcCBzb21lIG9wdGlvbnMgYXMgYXJndW1lbnRzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tcXV1eCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisgICAgICAgIHRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisgICAgICAgIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitib29sZWFuOiAwCitpbnRlZ2VyOiAwCit0aW1lc3RhbXA6IDEKK3N0cmluZzogZGVmYXVsdAorYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogeWVzCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCithcmcgMDA6IGZvbworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9EQVRFKCkgYW5kIE9QVF9TRVRfUFRSKCkgd29yaycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtdCAiMTk3MC0wMS0wMSAwMDowMDowMSArMDAwMCIgLS1kZWZhdWx0LXN0cmluZyBcCisJCWZvbyAtcSA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorQ2FsbGJhY2s6ICJmb3VyIiwgMAorYm9vbGVhbjogNQoraW50ZWdlcjogNAordGltZXN0YW1wOiAwCitzdHJpbmc6IChub3Qgc2V0KQorYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQ0FMTEJBQ0soKSBhbmQgT1BUX0JJVCgpIHdvcmsnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1sZW5ndGg9Zm91ciAtYiAtNCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorQ2FsbGJhY2s6ICJub3Qgc2V0IiwgMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9DQUxMQkFDSygpIGFuZCBjYWxsYmFjayBlcnJvcnMgd29yaycgJworCXRlc3RfbXVzdF9mYWlsIHRlc3QtcGFyc2Utb3B0aW9ucyAtLW5vLWxlbmd0aCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBvdXRwdXQuZXJyCisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorYm9vbGVhbjogMQoraW50ZWdlcjogMjMKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JJVCgpIGFuZCBPUFRfU0VUX0lOVCgpIHdvcmsnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1zZXQyMyAtYmJiYmIgLS1uby1vcjQgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTkVHQklUKCkgYW5kIE9QVF9TRVRfSU5UKCkgd29yaycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLXNldDIzIC1iYmJiYiAtLW5lZy1vcjQgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK2Jvb2xlYW46IDYKK2ludGVnZXI6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JJVCgpIHdvcmtzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC1iYiAtLW9yNCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9ORUdCSVQoKSB3b3JrcycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtYmIgLS1uby1uZWctb3I0ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NPVU5UVVAoKSB3aXRoIFBBUlNFX09QVF9OT0RBU0ggd29ya3MnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgKyArICsgKyArICsgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK2Jvb2xlYW46IDAKK2ludGVnZXI6IDEyMzQ1Cit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9OVU1CRVJfQ0FMTEJBQ0soKSB3b3JrcycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtMTIzNDUgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorYm9vbGVhbjogMAoraW50ZWdlcjogMAordGltZXN0YW1wOiAwCitzdHJpbmc6IChub3Qgc2V0KQorYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZWdhdGlvbiBvZiBPUFRfTk9ORUcgZmxhZ3MgaXMgbm90IGFtYmlndW91cycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLW5vLWFtYmlnID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+PmV4cGVjdCA8PCdFT0YnCitsaXN0OiBmb28KK2xpc3Q6IGJhcgorbGlzdDogYmF6CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbGlzdCBrZWVwcyBsaXN0IG9mIHN0cmluZ3MnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1saXN0IGZvbyAtLWxpc3Q9YmFyIC0tbGlzdD1iYXogPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1saXN0IHJlc2V0cyBsaXN0JyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tbGlzdD1vdGhlciAtLWxpc3Q9aXJyZWxldmFudCAtLWxpc3Q9b3B0aW9ucyBcCisJCS0tbm8tbGlzdCAtLWxpc3Q9Zm9vIC0tbGlzdD1iYXIgLS1saXN0PWJheiA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNTAtZmlsZXN5c3RlbS5zaCBiL3QvdDAwNTAtZmlsZXN5c3RlbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ODgxNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA1MC1maWxlc3lzdGVtLnNoCkBAIC0wLDAgKzEsMTMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVmFyaW91cyBmaWxlc3lzdGVtIGlzc3VlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK2F1bWw9JChwcmludGYgJ1wzMDNcMjQ0JykKK2F1bWxjZGlhcj0kKHByaW50ZiAnXDE0MVwzMTRcMjEwJykKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBDQVNFX0lOU0VOU0lUSVZFX0ZTCit0aGVuCisJc2F5ICJ3aWxsIHRlc3Qgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0iCisJdGVzdF9jYXNlPXRlc3RfZXhwZWN0X2ZhaWx1cmUKK2Vsc2UKKwl0ZXN0X2Nhc2U9dGVzdF9leHBlY3Rfc3VjY2VzcworZmkKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBVVEY4X05GRF9UT19ORkMKK3RoZW4KKwlzYXkgIndpbGwgdGVzdCBvbiBhIHVuaWNvZGUgY29ycnVwdGluZyBmaWxlc3lzdGVtIgorCXRlc3RfdW5pY29kZT10ZXN0X2V4cGVjdF9mYWlsdXJlCitlbHNlCisJdGVzdF91bmljb2RlPXRlc3RfZXhwZWN0X3N1Y2Nlc3MKK2ZpCisKK3Rlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MgfHwKKwlzYXkgIndpbGwgdGVzdCBvbiBhIGZpbGVzeXN0ZW0gbGFja2luZyBzeW1ib2xpYyBsaW5rcyIKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBDQVNFX0lOU0VOU0lUSVZFX0ZTCit0aGVuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXRlY3Rpb24gb2YgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIGR1cmluZyByZXBvIGluaXQiICcKKworCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmlnbm9yZWNhc2UpID0gdHJ1ZQorJworZWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSBkdXJpbmcgcmVwbyBpbml0IiAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmlnbm9yZWNhc2UgPi9kZXYvbnVsbCB8fAorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmlnbm9yZWNhc2UpID0gZmFsc2UKKycKK2ZpCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRldGVjdGlvbiBvZiBmaWxlc3lzdGVtIHcvbyBzeW1saW5rIHN1cHBvcnQgZHVyaW5nIHJlcG8gaW5pdCIgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5zeW1saW5rcyB8fAorCXRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5zeW1saW5rcykiID0gdHJ1ZQorJworZWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGZpbGVzeXN0ZW0gdy9vIHN5bWxpbmsgc3VwcG9ydCBkdXJpbmcgcmVwbyBpbml0IiAnCisKKwl2PSQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5zeW1saW5rcykgJiYKKwl0ZXN0ICIkdiIgPSBmYWxzZQorJworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgY2FzZSB0ZXN0cyIgJworCisJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgdHJ1ZSAmJgorCXRvdWNoIGNhbWVsY2FzZSAmJgorCWdpdCBhZGQgY2FtZWxjYXNlICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKKwlnaXQgbXYgY2FtZWxjYXNlIHRtcCAmJgorCWdpdCBtdiB0bXAgQ2FtZWxDYXNlICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIiAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKworJworCiskdGVzdF9jYXNlICdyZW5hbWUgKGNhc2UgY2hhbmdlKScgJworCisJZ2l0IG12IGNhbWVsY2FzZSBDYW1lbENhc2UgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUiCisKKycKKworJHRlc3RfY2FzZSAnbWVyZ2UgKGNhc2UgY2hhbmdlKScgJworCisJcm0gLWYgQ2FtZWxDYXNlICYmCisJcm0gLWYgY2FtZWxjYXNlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IG1lcmdlIHRvcGljCisKKycKKworCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2FkZCAod2l0aCBkaWZmZXJlbnQgY2FzZSknICcKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXJtIGNhbWVsY2FzZSAmJgorCWVjaG8gMSA+Q2FtZWxDYXNlICYmCisJZ2l0IGFkZCBDYW1lbENhc2UgJiYKKwljYW1lbD0kKGdpdCBscy1maWxlcyB8IGdyZXAgLWkgY2FtZWxjYXNlKSAmJgorCXRlc3QgJChlY2hvICIkY2FtZWwiIHwgd2MgLWwpID0gMSAmJgorCXRlc3QgInokKGdpdCBjYXQtZmlsZSBibG9iIDokY2FtZWwpIiA9IHoxCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgdW5pY29kZSBub3JtYWxpemF0aW9uIHRlc3RzIiAnCisKKyAgdGVzdF9jcmVhdGVfcmVwbyB1bmljb2RlICYmCisgIGNkIHVuaWNvZGUgJiYKKyAgdG91Y2ggIiRhdW1sY2RpYXIiICYmCisgIGdpdCBhZGQgIiRhdW1sY2RpYXIiICYmCisgIGdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorICBnaXQgdGFnIGluaXRpYWwgJiYKKyAgZ2l0IGNoZWNrb3V0IC1iIHRvcGljICYmCisgIGdpdCBtdiAkYXVtbGNkaWFyIHRtcCAmJgorICBnaXQgbXYgdG1wICIkYXVtbCIgJiYKKyAgZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKyAgZ2l0IGNoZWNrb3V0IC1mIG1hc3RlcgorCisnCisKKyR0ZXN0X3VuaWNvZGUgJ3JlbmFtZSAoc2lsZW50IHVuaWNvZGUgbm9ybWFsaXphdGlvbiknICcKKworIGdpdCBtdiAiJGF1bWxjZGlhciIgIiRhdW1sIiAmJgorIGdpdCBjb21taXQgLW0gcmVuYW1lCisKKycKKworJHRlc3RfdW5pY29kZSAnbWVyZ2UgKHNpbGVudCB1bmljb2RlIG5vcm1hbGl6YXRpb24pJyAnCisKKyBnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKyBnaXQgbWVyZ2UgdG9waWMKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNTUtYmV5b25kLXN5bWxpbmtzLnNoIGIvdC90MDA1NS1iZXlvbmQtc3ltbGlua3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGM2ZmY1NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwNTUtYmV5b25kLXN5bWxpbmtzLnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1cGRhdGUtaW5kZXggYW5kIGFkZCByZWZ1c2UgdG8gYWRkIGJleW9uZCBzeW1saW5rcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1Mgc2V0dXAgJworCT5hICYmCisJbWtkaXIgYiAmJgorCWxuIC1zIGIgYyAmJgorCT5jL2QgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgYi9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3VwZGF0ZS1pbmRleCAtLWFkZCBiZXlvbmQgc3ltbGlua3MnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGMvZCAmJgorCSEgKCBnaXQgbHMtZmlsZXMgfCBncmVwIGMvZCApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2FkZCBiZXlvbmQgc3ltbGlua3MnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGMvZCAmJgorCSEgKCBnaXQgbHMtZmlsZXMgfCBncmVwIGMvZCApCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA2MC1wYXRoLXV0aWxzLnNoIGIvdC90MDA2MC1wYXRoLXV0aWxzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlZjIzNDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDYwLXBhdGgtdXRpbHMuc2gKQEAgLTAsMCArMSwyMDEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRGF2aWQgUmVpc3MKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB2YXJpb3VzIHBhdGggdXRpbGl0aWVzJworCisuIC4vdGVzdC1saWIuc2gKKworbm9ybV9wYXRoKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJDMgIm5vcm1hbGl6ZSBwYXRoOiAkMSA9PiAkMiIgXAorCSJ0ZXN0IFwiXCQodGVzdC1wYXRoLXV0aWxzIG5vcm1hbGl6ZV9wYXRoX2NvcHkgJyQxJylcIiA9ICckMiciCit9CisKKyMgT24gV2luZG93cywgd2UgYXJlIHVzaW5nIE1TWVMncyBiYXNoLCB3aGljaCBtYW5nbGVzIHRoZSBwYXRocy4KKyMgQWJzb2x1dGUgcGF0aHMgYXJlIGFuY2hvcmVkIGF0IHRoZSBNU1lTIGluc3RhbGxhdGlvbiBkaXJlY3RvcnksCisjIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHBhdGggLyBhY2NvdW50cyBmb3IgdGhpcyBtYW55IGNoYXJhY3RlcnM6Cityb290b2ZmPSQodGVzdC1wYXRoLXV0aWxzIG5vcm1hbGl6ZV9wYXRoX2NvcHkgLyB8IHdjIC1jKQorIyBBY2NvdW50IGZvciB0aGUgdHJhaWxpbmcgTEY6CitpZiB0ZXN0ICRyb290b2ZmID0gMjsgdGhlbgorCXJvb3RvZmY9CSMgd2UgYXJlIG9uIFVuaXgKK2Vsc2UKKwlyb290b2ZmPSQoKCRyb290b2ZmLTEpKQorZmkKKworYW5jZXN0b3IoKSB7CisJIyBXZSBkbyBzb21lIG1hdGggd2l0aCB0aGUgZXhwZWN0ZWQgYW5jZXN0b3IgbGVuZ3RoLgorCWV4cGVjdGVkPSQzCisJaWYgdGVzdCAtbiAiJHJvb3RvZmYiICYmIHRlc3QgIngkZXhwZWN0ZWQiICE9IHgtMTsgdGhlbgorCQlleHBlY3RlZD0kKCgkZXhwZWN0ZWQrJHJvb3RvZmYpKQorCWZpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibG9uZ2VzdCBhbmNlc3RvcjogJDEgJDIgPT4gJGV4cGVjdGVkIiBcCisJImFjdHVhbD1cJCh0ZXN0LXBhdGgtdXRpbHMgbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGggJyQxJyAnJDInKSAmJgorCSB0ZXN0IFwiXCRhY3R1YWxcIiA9ICckZXhwZWN0ZWQnIgorfQorCisjIEFic29sdXRlIHBhdGggdGVzdHMgbXVzdCBiZSBza2lwcGVkIG9uIFdpbmRvd3MgYmVjYXVzZSBkdWUgdG8gcGF0aCBtYW5nbGluZworIyB0aGUgdGVzdCBwcm9ncmFtIG5ldmVyIHNlZXMgYSBQT1NJWC1zdHlsZSBhYnNvbHV0ZSBwYXRoCitjYXNlICQodW5hbWUgLXMpIGluCisqTUlOR1cqKQorCTs7CisqKQorCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWAorCTs7Citlc2FjCisKK25vcm1fcGF0aCAiIiAiIgorbm9ybV9wYXRoIC4gIiIKK25vcm1fcGF0aCAuLyAiIgorbm9ybV9wYXRoIC4vLiAiIgorbm9ybV9wYXRoIC4vLi4gKytmYWlsZWQrKworbm9ybV9wYXRoIC4uLy4gKytmYWlsZWQrKworbm9ybV9wYXRoIC4vLi4vLi8vICsrZmFpbGVkKysKK25vcm1fcGF0aCBkaXIvLi4gIiIKK25vcm1fcGF0aCBkaXIvc3ViLy4uLy4uICIiCitub3JtX3BhdGggZGlyL3N1Yi8uLi8uLi8uLiArK2ZhaWxlZCsrCitub3JtX3BhdGggZGlyIGRpcgorbm9ybV9wYXRoIGRpci8vIGRpci8KK25vcm1fcGF0aCAuL2RpciBkaXIKK25vcm1fcGF0aCBkaXIvLiBkaXIvCitub3JtX3BhdGggZGlyLy8vLi8gZGlyLworbm9ybV9wYXRoIGRpci8vc3ViLy4uIGRpci8KK25vcm1fcGF0aCBkaXIvc3ViLy4uLyBkaXIvCitub3JtX3BhdGggZGlyL3N1Yi8uLi8uIGRpci8KK25vcm1fcGF0aCBkaXIvczEvLi4vczIvIGRpci9zMi8KK25vcm1fcGF0aCBkMS9zMS8vL3MyLy4uLy8uLi9zMy8gZDEvczMvCitub3JtX3BhdGggZDEvczEvLy4uL3MyLy4uLy4uL2QyIGQyCitub3JtX3BhdGggZDEvLi4uL2QyIGQxLy4uLi9kMgorbm9ybV9wYXRoIGQxLy4uLi8uLy4uL2QyIGQxL2QyCisKK25vcm1fcGF0aCAvIC8gUE9TSVgKK25vcm1fcGF0aCAvLyAvIFBPU0lYCitub3JtX3BhdGggLy8vIC8gUE9TSVgKK25vcm1fcGF0aCAvLiAvIFBPU0lYCitub3JtX3BhdGggLy4vIC8gUE9TSVgKK25vcm1fcGF0aCAvLi8uLiArK2ZhaWxlZCsrIFBPU0lYCitub3JtX3BhdGggLy4uLy4gKytmYWlsZWQrKyBQT1NJWAorbm9ybV9wYXRoIC8uLy4uLy4vLyArK2ZhaWxlZCsrIFBPU0lYCitub3JtX3BhdGggL2Rpci8uLiAvIFBPU0lYCitub3JtX3BhdGggL2Rpci9zdWIvLi4vLi4gLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvc3ViLy4uLy4uLy4uICsrZmFpbGVkKysgUE9TSVgKK25vcm1fcGF0aCAvZGlyIC9kaXIgUE9TSVgKK25vcm1fcGF0aCAvZGlyLy8gL2Rpci8gUE9TSVgKK25vcm1fcGF0aCAvLi9kaXIgL2RpciBQT1NJWAorbm9ybV9wYXRoIC9kaXIvLiAvZGlyLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvLy8uLyAvZGlyLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvL3N1Yi8uLiAvZGlyLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvc3ViLy4uLyAvZGlyLyBQT1NJWAorbm9ybV9wYXRoIC8vZGlyL3N1Yi8uLi8uIC9kaXIvIFBPU0lYCitub3JtX3BhdGggL2Rpci9zMS8uLi9zMi8gL2Rpci9zMi8gUE9TSVgKK25vcm1fcGF0aCAvZDEvczEvLy9zMi8uLi8vLi4vczMvIC9kMS9zMy8gUE9TSVgKK25vcm1fcGF0aCAvZDEvczEvLy4uL3MyLy4uLy4uL2QyIC9kMiBQT1NJWAorbm9ybV9wYXRoIC9kMS8uLi4vZDIgL2QxLy4uLi9kMiBQT1NJWAorbm9ybV9wYXRoIC9kMS8uLi4vLi8uLi9kMiAvZDEvZDIgUE9TSVgKKworYW5jZXN0b3IgLyAiIiAtMQorYW5jZXN0b3IgLyAvIC0xCithbmNlc3RvciAvZm9vICIiIC0xCithbmNlc3RvciAvZm9vIDogLTEKK2FuY2VzdG9yIC9mb28gOjouIC0xCithbmNlc3RvciAvZm9vIDo6Li46OiAtMQorYW5jZXN0b3IgL2ZvbyAvIDAKK2FuY2VzdG9yIC9mb28gL2ZvIC0xCithbmNlc3RvciAvZm9vIC9mb28gLTEKK2FuY2VzdG9yIC9mb28gL2Zvby8gLTEKK2FuY2VzdG9yIC9mb28gL2JhciAtMQorYW5jZXN0b3IgL2ZvbyAvYmFyLyAtMQorYW5jZXN0b3IgL2ZvbyAvZm9vL2JhciAtMQorYW5jZXN0b3IgL2ZvbyAvZm9vOi9iYXIvIC0xCithbmNlc3RvciAvZm9vIC9mb28vOi9iYXIvIC0xCithbmNlc3RvciAvZm9vIC9mb286Oi9iYXIvIC0xCithbmNlc3RvciAvZm9vIC86L2ZvbzovYmFyLyAwCithbmNlc3RvciAvZm9vIC9mb286LzovYmFyLyAwCithbmNlc3RvciAvZm9vIC86L2Jhci86L2ZvbyAwCithbmNlc3RvciAvZm9vL2JhciAiIiAtMQorYW5jZXN0b3IgL2Zvby9iYXIgLyAwCithbmNlc3RvciAvZm9vL2JhciAvZm8gLTEKK2FuY2VzdG9yIC9mb28vYmFyIGZvbyAtMQorYW5jZXN0b3IgL2Zvby9iYXIgL2ZvbyA0CithbmNlc3RvciAvZm9vL2JhciAvZm9vLyA0CithbmNlc3RvciAvZm9vL2JhciAvZm9vL2JhIC0xCithbmNlc3RvciAvZm9vL2JhciAvOi9mbyAwCithbmNlc3RvciAvZm9vL2JhciAvZm9vOi9mb28vYmEgNAorYW5jZXN0b3IgL2Zvby9iYXIgL2JhciAtMQorYW5jZXN0b3IgL2Zvby9iYXIgL2Jhci8gLTEKK2FuY2VzdG9yIC9mb28vYmFyIC9mbzogLTEKK2FuY2VzdG9yIC9mb28vYmFyIDovZm8gLTEKK2FuY2VzdG9yIC9mb28vYmFyIC9mb286L2Jhci8gNAorYW5jZXN0b3IgL2Zvby9iYXIgLzovZm9vOi9iYXIvIDQKK2FuY2VzdG9yIC9mb28vYmFyIC9mb286LzovYmFyLyA0CithbmNlc3RvciAvZm9vL2JhciAvOi9iYXIvOi9mbyAwCithbmNlc3RvciAvZm9vL2JhciAvOi9iYXIvIDAKK2FuY2VzdG9yIC9mb28vYmFyIC46L2Zvby8uIDQKK2FuY2VzdG9yIC9mb28vYmFyIC46L2Zvby8uOi46IDQKK2FuY2VzdG9yIC9mb28vYmFyIC9mb28vLi86LjovYmFyIDQKK2FuY2VzdG9yIC9mb28vYmFyIC46L2JhciAtMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJpcF9wYXRoX3N1ZmZpeCcgJworCXRlc3QgYzovbXN5c2dpdCA9ICQodGVzdC1wYXRoLXV0aWxzIHN0cmlwX3BhdGhfc3VmZml4IFwKKwkJYzovbXN5c2dpdC9saWJleGVjLy9naXQtY29yZSBsaWJleGVjL2dpdC1jb3JlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvbHV0ZSBwYXRoIHJlamVjdHMgdGhlIGVtcHR5IHN0cmluZycgJworCXRlc3RfbXVzdF9mYWlsIHRlc3QtcGF0aC11dGlscyBhYnNvbHV0ZV9wYXRoICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWwgcGF0aCByZWplY3RzIHRoZSBlbXB0eSBzdHJpbmcnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVggJ3JlYWwgcGF0aCB3b3JrcyBvbiBhYnNvbHV0ZSBwYXRocyAxJyAnCisJbm9wYXRoPSJob3BlZnVsbHktYWJzZW50LXBhdGgiICYmCisJdGVzdCAiLyIgPSAiJCh0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIvIikiICYmCisJdGVzdCAiLyRub3BhdGgiID0gIiQodGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAiLyRub3BhdGgiKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhbCBwYXRoIHdvcmtzIG9uIGFic29sdXRlIHBhdGhzIDInICcKKwlub3BhdGg9ImhvcGVmdWxseS1hYnNlbnQtcGF0aCIgJiYKKwkjIEZpbmQgYW4gZXhpc3RpbmcgdG9wLWxldmVsIGRpcmVjdG9yeSBmb3IgdGhlIHJlbWFpbmluZyB0ZXN0czoKKwlkPSQocHdkIC1QIHwgc2VkIC1lICJzfF5cKFteL10qL1teL10qXCkvLip8XDF8IikgJiYKKwl0ZXN0ICIkZCIgPSAiJCh0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIkZCIpIiAmJgorCXRlc3QgIiRkLyRub3BhdGgiID0gIiQodGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAiJGQvJG5vcGF0aCIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYICdyZWFsIHBhdGggcmVtb3ZlcyBleHRyYSBsZWFkaW5nIHNsYXNoZXMnICcKKwlub3BhdGg9ImhvcGVmdWxseS1hYnNlbnQtcGF0aCIgJiYKKwl0ZXN0ICIvIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIi8vLyIpIiAmJgorCXRlc3QgIi8kbm9wYXRoIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIi8vLyRub3BhdGgiKSIgJiYKKwkjIEZpbmQgYW4gZXhpc3RpbmcgdG9wLWxldmVsIGRpcmVjdG9yeSBmb3IgdGhlIHJlbWFpbmluZyB0ZXN0czoKKwlkPSQocHdkIC1QIHwgc2VkIC1lICJzfF5cKFteL10qL1teL10qXCkvLip8XDF8IikgJiYKKwl0ZXN0ICIkZCIgPSAiJCh0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIvLyRkIikiICYmCisJdGVzdCAiJGQvJG5vcGF0aCIgPSAiJCh0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIvLyRkLyRub3BhdGgiKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhbCBwYXRoIHJlbW92ZXMgb3RoZXIgZXh0cmEgc2xhc2hlcycgJworCW5vcGF0aD0iaG9wZWZ1bGx5LWFic2VudC1wYXRoIiAmJgorCSMgRmluZCBhbiBleGlzdGluZyB0b3AtbGV2ZWwgZGlyZWN0b3J5IGZvciB0aGUgcmVtYWluaW5nIHRlc3RzOgorCWQ9JChwd2QgLVAgfCBzZWQgLWUgInN8XlwoW14vXSovW14vXSpcKS8uKnxcMXwiKSAmJgorCXRlc3QgIiRkIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIiRkLy8vIikiICYmCisJdGVzdCAiJGQvJG5vcGF0aCIgPSAiJCh0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIkZC8vLyRub3BhdGgiKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncmVhbCBwYXRoIHdvcmtzIG9uIHN5bWxpbmtzJyAnCisJbWtkaXIgZmlyc3QgJiYKKwlsbiAtcyAuLi8uZ2l0IGZpcnN0Ly5naXQgJiYKKwlta2RpciBzZWNvbmQgJiYKKwlsbiAtcyAuLi9maXJzdCBzZWNvbmQvb3RoZXIgJiYKKwlta2RpciB0aGlyZCAmJgorCWRpcj0iJChjZCAuZ2l0OyBwd2QgLVApIiAmJgorCWRpcjI9dGhpcmQvLi4vc2Vjb25kL290aGVyLy5naXQgJiYKKwl0ZXN0ICIkZGlyIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggJGRpcjIpIiAmJgorCWZpbGU9IiRkaXIiL2luZGV4ICYmCisJdGVzdCAiJGZpbGUiID0gIiQodGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAkZGlyMi9pbmRleCkiICYmCisJYmFzZW5hbWU9Ymx1YiAmJgorCXRlc3QgIiRkaXIvJGJhc2VuYW1lIiA9ICIkKGNkIC5naXQgJiYgdGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAiJGJhc2VuYW1lIikiICYmCisJbG4gLXMgLi4vZmlyc3QvZmlsZSAuZ2l0L3N5bWwgJiYKKwlzeW09IiQoY2QgZmlyc3Q7IHB3ZCAtUCkiL2ZpbGUgJiYKKwl0ZXN0ICIkc3ltIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIiRkaXIyL3N5bWwiKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDYxLXJ1bi1jb21tYW5kLnNoIGIvdC90MDA2MS1ydW4tY29tbWFuZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xN2U5NjlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDA2MS1ydW4tY29tbWFuZC5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IElsYXJpIExpdXN2YWFyYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJ1biBjb21tYW5kJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5oZWxsby1zY3JpcHQgPDwtRU9GCisJIyEkU0hFTExfUEFUSAorCWNhdCBoZWxsby1zY3JpcHQKK0VPRgorPmVtcHR5CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0X2NvbW1hbmQgcmVwb3J0cyBFTk9FTlQnICcKKwl0ZXN0LXJ1bi1jb21tYW5kIHN0YXJ0LWNvbW1hbmQtRU5PRU5UIC4vZG9lcy1ub3QtZXhpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuX2NvbW1hbmQgY2FuIHJ1biBhIGNvbW1hbmQnICcKKwljYXQgaGVsbG8tc2NyaXB0ID5oZWxsby5zaCAmJgorCWNobW9kICt4IGhlbGxvLnNoICYmCisJdGVzdC1ydW4tY29tbWFuZCBydW4tY29tbWFuZCAuL2hlbGxvLnNoID5hY3R1YWwgMj5lcnIgJiYKKworCXRlc3RfY21wIGhlbGxvLXNjcmlwdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3J1bl9jb21tYW5kIHJlcG9ydHMgRUFDQ0VTJyAnCisJY2F0IGhlbGxvLXNjcmlwdCA+aGVsbG8uc2ggJiYKKwljaG1vZCAteCBoZWxsby5zaCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QtcnVuLWNvbW1hbmQgcnVuLWNvbW1hbmQgLi9oZWxsby5zaCAyPmVyciAmJgorCisJZ3JlcCAiZmF0YWw6IGNhbm5vdCBleGVjLipoZWxsby5zaCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd1bnJlYWRhYmxlIGRpcmVjdG9yeSBpbiBQQVRIJyAnCisJbWtkaXIgbG9jYWwtY29tbWFuZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgdStyd3ggbG9jYWwtY29tbWFuZCAmJiBybSAtZnIgbG9jYWwtY29tbWFuZCIgJiYKKwlnaXQgY29uZmlnIGFsaWFzLm5pdGZvbCAiIWVjaG8gZnJvdHoiICYmCisJY2htb2QgYS1yeCBsb2NhbC1jb21tYW5kICYmCisJKAorCQlQQVRIPS4vbG9jYWwtY29tbWFuZDokUEFUSCAmJgorCQlnaXQgbml0Zm9sID5hY3R1YWwKKwkpICYmCisJZWNobyBmcm90eiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNjItcmV2aXNpb24td2Fsa2luZy5zaCBiL3QvdDAwNjItcmV2aXNpb24td2Fsa2luZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZDk4ZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA2Mi1yZXZpc2lvbi13YWxraW5nLnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgSGVpa28gVm9pZ3QKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZXZpc2lvbiB3YWxraW5nIGFwaScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+cnVuX3R3aWNlX2V4cGVjdGVkIDw8LUVPRgorMXN0CisgPiBhZGQgYgorID4gYWRkIGEKKzJuZAorID4gYWRkIGIKKyA+IGFkZCBhCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGEgPiBhICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGEiICYmCisJZWNobyBiID4gYiAmJgorCWdpdCBhZGQgYiAmJgorCWdpdCBjb21taXQgLW0gImFkZCBiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZpc2lvbiB3YWxraW5nIGNhbiBiZSBkb25lIHR3aWNlJyAnCisJdGVzdC1yZXZpc2lvbi13YWxraW5nIHJ1bi10d2ljZSA+IHJ1bl90d2ljZV9hY3R1YWwKKwl0ZXN0X2NtcCBydW5fdHdpY2VfZXhwZWN0ZWQgcnVuX3R3aWNlX2FjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNjMtc3RyaW5nLWxpc3Quc2ggYi90L3QwMDYzLXN0cmluZy1saXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxYzg4MjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDYzLXN0cmluZy1saXN0LnNoCkBAIC0wLDAgKzEsMTIxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIE1pY2hhZWwgSGFnZ2VydHkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzdHJpbmcgbGlzdCBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9zcGxpdCAoKSB7CisJY2F0ID5leHBlY3RlZCAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNwbGl0ICQxIGF0ICQyLCBtYXggJDMiICIKKwkJdGVzdC1zdHJpbmctbGlzdCBzcGxpdCAnJDEnICckMicgJyQzJyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCQl0ZXN0LXN0cmluZy1saXN0IHNwbGl0X2luX3BsYWNlICckMScgJyQyJyAnJDMnID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJIgorfQorCit0ZXN0X2xvbmdlc3RfcHJlZml4ICgpIHsKKwl0ZXN0ICIkKHRlc3Qtc3RyaW5nLWxpc3QgbG9uZ2VzdF9wcmVmaXggIiQxIiAiJDIiKSIgPSAiJDMiCit9CisKK3Rlc3Rfbm9fbG9uZ2VzdF9wcmVmaXggKCkgeworCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3RyaW5nLWxpc3QgbG9uZ2VzdF9wcmVmaXggIiQxIiAiJDIiCit9CisKK3Rlc3Rfc3BsaXQgImZvbzpiYXI6YmF6IiAiOiIgIi0xIiA8PEVPRgorMworWzBdOiAiZm9vIgorWzFdOiAiYmFyIgorWzJdOiAiYmF6IgorRU9GCisKK3Rlc3Rfc3BsaXQgImZvbzpiYXI6YmF6IiAiOiIgIjAiIDw8RU9GCisxCitbMF06ICJmb286YmFyOmJheiIKK0VPRgorCit0ZXN0X3NwbGl0ICJmb286YmFyOmJheiIgIjoiICIxIiA8PEVPRgorMgorWzBdOiAiZm9vIgorWzFdOiAiYmFyOmJheiIKK0VPRgorCit0ZXN0X3NwbGl0ICJmb286YmFyOmJheiIgIjoiICIyIiA8PEVPRgorMworWzBdOiAiZm9vIgorWzFdOiAiYmFyIgorWzJdOiAiYmF6IgorRU9GCisKK3Rlc3Rfc3BsaXQgImZvbzpiYXI6IiAiOiIgIi0xIiA8PEVPRgorMworWzBdOiAiZm9vIgorWzFdOiAiYmFyIgorWzJdOiAiIgorRU9GCisKK3Rlc3Rfc3BsaXQgIiIgIjoiICItMSIgPDxFT0YKKzEKK1swXTogIiIKK0VPRgorCit0ZXN0X3NwbGl0ICI6IiAiOiIgIi0xIiA8PEVPRgorMgorWzBdOiAiIgorWzFdOiAiIgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInRlc3QgZmlsdGVyX3N0cmluZ19saXN0IiAnCisJdGVzdCAieC0iID0gIngkKHRlc3Qtc3RyaW5nLWxpc3QgZmlsdGVyIC0geSkiICYmCisJdGVzdCAieC0iID0gIngkKHRlc3Qtc3RyaW5nLWxpc3QgZmlsdGVyIG5vIHkpIiAmJgorCXRlc3QgeWVzID0gIiQodGVzdC1zdHJpbmctbGlzdCBmaWx0ZXIgeWVzIHkpIiAmJgorCXRlc3QgeWVzID0gIiQodGVzdC1zdHJpbmctbGlzdCBmaWx0ZXIgbm86eWVzIHkpIiAmJgorCXRlc3QgeWVzID0gIiQodGVzdC1zdHJpbmctbGlzdCBmaWx0ZXIgeWVzOm5vIHkpIiAmJgorCXRlc3QgeTE6eTIgPSAiJCh0ZXN0LXN0cmluZy1saXN0IGZpbHRlciB5MTp5MiB5KSIgJiYKKwl0ZXN0IHkyOnkxID0gIiQodGVzdC1zdHJpbmctbGlzdCBmaWx0ZXIgeTI6eTEgeSkiICYmCisJdGVzdCAieC0iID0gIngkKHRlc3Qtc3RyaW5nLWxpc3QgZmlsdGVyIHgxOngyIHkpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0ZXN0IHJlbW92ZV9kdXBsaWNhdGVzIiAnCisJdGVzdCAieC0iID0gIngkKHRlc3Qtc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgLSkiICYmCisJdGVzdCAieCIgPSAieCQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyAiIikiICYmCisJdGVzdCBhID0gIiQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhKSIgJiYKKwl0ZXN0IGEgPSAiJCh0ZXN0LXN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YSkiICYmCisJdGVzdCBhID0gIiQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmE6YTphOmEpIiAmJgorCXRlc3QgYTpiID0gIiQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmIpIiAmJgorCXRlc3QgYTpiID0gIiQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmE6YikiICYmCisJdGVzdCBhOmIgPSAiJCh0ZXN0LXN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YjpiKSIgJiYKKwl0ZXN0IGE6YjpjID0gIiQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmI6YykiICYmCisJdGVzdCBhOmI6YyA9ICIkKHRlc3Qtc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTphOmI6YykiICYmCisJdGVzdCBhOmI6YyA9ICIkKHRlc3Qtc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTpiOmI6YykiICYmCisJdGVzdCBhOmI6YyA9ICIkKHRlc3Qtc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTpiOmM6YykiICYmCisJdGVzdCBhOmI6YyA9ICIkKHRlc3Qtc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTphOmI6YjpjOmMpIiAmJgorCXRlc3QgYTpiOmMgPSAiJCh0ZXN0LXN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YTphOmI6YjpiOmM6YzpjKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidGVzdCBsb25nZXN0X3ByZWZpeCIgJworCXRlc3Rfbm9fbG9uZ2VzdF9wcmVmaXggLSAnJyAmJgorCXRlc3Rfbm9fbG9uZ2VzdF9wcmVmaXggLSB4ICYmCisJdGVzdF9sb25nZXN0X3ByZWZpeCAiIiB4ICIiICYmCisJdGVzdF9sb25nZXN0X3ByZWZpeCB4IHggeCAmJgorCXRlc3RfbG9uZ2VzdF9wcmVmaXggIiIgZm9vICIiICYmCisJdGVzdF9sb25nZXN0X3ByZWZpeCA6IGZvbyAiIiAmJgorCXRlc3RfbG9uZ2VzdF9wcmVmaXggZiBmb28gZiAmJgorCXRlc3RfbG9uZ2VzdF9wcmVmaXggZm9vIGZvb2JhciBmb28gJiYKKwl0ZXN0X2xvbmdlc3RfcHJlZml4IGZvbyBmb28gZm9vICYmCisJdGVzdF9ub19sb25nZXN0X3ByZWZpeCBiYXIgZm9vICYmCisJdGVzdF9ub19sb25nZXN0X3ByZWZpeCBiYXI6YmFyIGZvbyAmJgorCXRlc3Rfbm9fbG9uZ2VzdF9wcmVmaXggZm9vYmFyIGZvbyAmJgorCXRlc3RfbG9uZ2VzdF9wcmVmaXggZm9vOmJhciBmb28gZm9vICYmCisJdGVzdF9sb25nZXN0X3ByZWZpeCBmb286YmFyIGJhciBiYXIgJiYKKwl0ZXN0X2xvbmdlc3RfcHJlZml4IGZvbzo6YmFyIGZvbyBmb28gJiYKKwl0ZXN0X2xvbmdlc3RfcHJlZml4IGZvbzpmb29iYXIgZm9vIGZvbyAmJgorCXRlc3RfbG9uZ2VzdF9wcmVmaXggZm9vYmFyOmZvbyBmb28gZm9vICYmCisJdGVzdF9sb25nZXN0X3ByZWZpeCBmb286IGJhciAiIiAmJgorCXRlc3RfbG9uZ2VzdF9wcmVmaXggOmZvbyBiYXIgIiIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDcwLWZ1bmRhbWVudGFsLnNoIGIvdC90MDA3MC1mdW5kYW1lbnRhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTJjNTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA3MC1mdW5kYW1lbnRhbC5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgdGhhdCB0aGUgbW9zdCBiYXNpYyBmdW5jdGlvbnMgd29yaworCisKK1ZlcmlmeSB3cmFwcGVycyBhbmQgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFyYWN0ZXIgY2xhc3NlcyAoaXNzcGFjZSwgaXNhbHBoYSBldGMuKScgJworCXRlc3QtY3R5cGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWt0ZW1wIHRvIG5vbmV4aXN0ZW50IGRpcmVjdG9yeSBwcmludHMgZmlsZW5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LW1rdGVtcCBkb2Vzbm90ZXhpc3QvdGVzdFhYWFhYWCAyPmVyciAmJgorCWdyZXAgImRvZXNub3RleGlzdC90ZXN0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ21rdGVtcCB0byB1bndyaXRhYmxlIGRpcmVjdG9yeSBwcmludHMgZmlsZW5hbWUnICcKKwlta2RpciBjYW5ub3R3cml0ZSAmJgorCWNobW9kIC13IGNhbm5vdHdyaXRlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCArdyBjYW5ub3R3cml0ZSIgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LW1rdGVtcCBjYW5ub3R3cml0ZS90ZXN0WFhYWFhYIDI+ZXJyICYmCisJZ3JlcCAiY2Fubm90d3JpdGUvdGVzdCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZvciBhIGJ1ZyBpbiB0aGUgcmVnZXggcm91dGluZXMnICcKKwkjIGlmIHRoaXMgdGVzdCBmYWlscywgcmUtYnVpbGQgZ2l0IHdpdGggTk9fUkVHRVg9MQorCXRlc3QtcmVnZXgKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDgxLWxpbmUtYnVmZmVyLnNoIGIvdC90MDA4MS1saW5lLWJ1ZmZlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZDgzZWQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDA4MS1saW5lLWJ1ZmZlci5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdCB0aGUgc3ZuIGltcG9ydGVyJ3MgaW5wdXQgaGFuZGxpbmcgcm91dGluZXMuCisKK1RoZXNlIHRlc3RzIHByb3ZpZGUgc29tZSBzaW1wbGUgY2hlY2tzIHRoYXQgdGhlIGxpbmVfYnVmZmVyIEFQSQorYmVoYXZlcyBhcyBhZHZlcnRpc2VkLgorCitXaGlsZSBhdCBpdCwgY2hlY2sgdGhhdCBpbnB1dCBvZiBuZXdsaW5lcyBhbmQgbnVsbCBieXRlcyBhcmUgaGFuZGxlZAorY29ycmVjdGx5LgorIgorLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hlbGxvIHdvcmxkJyAnCisJZWNobyAiPkhFTExPIiA+ZXhwZWN0ICYmCisJdGVzdC1saW5lLWJ1ZmZlciA8PC1cRU9GID5hY3R1YWwgJiYKKwliaW5hcnkgNgorCUhFTExPCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcwLWxlbmd0aCByZWFkLCBzZW5kIGFsb25nIGdyZWV0aW5nJyAnCisJZWNobyAiPkhFTExPIiA+ZXhwZWN0ICYmCisJdGVzdC1saW5lLWJ1ZmZlciA8PC1cRU9GID5hY3R1YWwgJiYKKwliaW5hcnkgMAorCWNvcHkgNgorCUhFTExPCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIGZyb20gZmlsZSBkZXNjcmlwdG9yJyAnCisJcm0gLWYgaW5wdXQgJiYKKwllY2hvIGhlbGxvID5leHBlY3QgJiYKKwllY2hvIGhlbGxvID5pbnB1dCAmJgorCWVjaG8gY29weSA2IHwKKwl0ZXN0LWxpbmUtYnVmZmVyICImNCIgNDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwLCBjb3B5IG51bGwgYnl0ZScgJworCWVjaG8gUSB8IHFfdG9fbnVsID5leHBlY3QgJiYKKwlxX3RvX251bCA8PC1cRU9GIHwgdGVzdC1saW5lLWJ1ZmZlciA+YWN0dWFsICYmCisJc2tpcCAyCisJUQorCWNvcHkgMgorCVEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgbnVsbCBieXRlJyAnCisJZWNobyAiPlFoZWxsb1EiIHwgcV90b19udWwgPmV4cGVjdCAmJgorCXFfdG9fbnVsIDw8LVxFT0YgfCB0ZXN0LWxpbmUtYnVmZmVyID5hY3R1YWwgJiYKKwliaW5hcnkgOAorCVFoZWxsb1EKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgcmVhZHMgYXJlIHRydW5jYXRlZCcgJworCWVjaG8gIj5mb28iID5leHBlY3QgJiYKKwl0ZXN0LWxpbmUtYnVmZmVyIDw8LVxFT0YgPmFjdHVhbCAmJgorCWJpbmFyeSA1CisJZm9vCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb25nIGNvcGllcyBhcmUgdHJ1bmNhdGVkJyAnCisJcHJpbnRmICIlc1xuIiAiPiIgZm9vID5leHBlY3QgJiYKKwl0ZXN0LWxpbmUtYnVmZmVyIDw8LVxFT0YgPmFjdHVhbCAmJgorCWJpbmFyeSAxCisKKwljb3B5IDUKKwlmb28KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgYmluYXJ5IHJlYWRzIGFyZSB0cnVuY2F0ZWQnICcKKwllY2hvICI+Zm9vIiA+ZXhwZWN0ICYmCisJdGVzdC1saW5lLWJ1ZmZlciA8PC1cRU9GID5hY3R1YWwgJiYKKwliaW5hcnkgNQorCWZvbworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDkwLWNhY2hlLXRyZWUuc2ggYi90L3QwMDkwLWNhY2hlLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmMzM2UyOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwOTAtY2FjaGUtdHJlZS5zaApAQCAtMCwwICsxLDkzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdCB3aGV0aGVyIGNhY2hlLXRyZWUgaXMgcHJvcGVybHkgdXBkYXRlZAorCitUZXN0cyB3aGV0aGVyIHZhcmlvdXMgY29tbWFuZHMgcHJvcGVybHkgdXBkYXRlIGFuZC9vciByZXdyaXRlIHRoZQorY2FjaGUtdHJlZSBleHRlbnNpb24uCisiCisgLiAuL3Rlc3QtbGliLnNoCisKK2NtcF9jYWNoZV90cmVlICgpIHsKKwl0ZXN0LWR1bXAtY2FjaGUtdHJlZSA+YWN0dWFsICYmCisJc2VkICJzLyRfeDQwL1NIQS8iIDxhY3R1YWwgPmZpbHRlcmVkICYmCisJdGVzdF9jbXAgIiQxIiBmaWx0ZXJlZAorfQorCisjIFdlIGRvbid0IGJvdGhlciB3aXRoIGFjdHVhbGx5IGNoZWNraW5nIHRoZSBTSEExOgorIyB0ZXN0LWR1bXAtY2FjaGUtdHJlZSBhbHJlYWR5IHZlcmlmaWVzIHRoYXQgYWxsIGV4aXN0aW5nIGRhdGEgaXMKKyMgY29ycmVjdC4KK3Rlc3Rfc2hhbGxvd19jYWNoZV90cmVlICgpIHsKKwlwcmludGYgIlNIQSAgKCVkIGVudHJpZXMsIDAgc3VidHJlZXMpXG4iICQoZ2l0IGxzLWZpbGVzfHdjIC1sKSA+ZXhwZWN0ICYmCisJY21wX2NhY2hlX3RyZWUgZXhwZWN0Cit9CisKK3Rlc3RfaW52YWxpZF9jYWNoZV90cmVlICgpIHsKKwllY2hvICJpbnZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCBzdWJ0cmVlcykiID5leHBlY3QgJiYKKwlwcmludGYgIlNIQSAjKHJlZikgICglZCBlbnRyaWVzLCAwIHN1YnRyZWVzKVxuIiAkKGdpdCBscy1maWxlc3x3YyAtbCkgPj5leHBlY3QgJiYKKwljbXBfY2FjaGVfdHJlZSBleHBlY3QKK30KKwordGVzdF9ub19jYWNoZV90cmVlICgpIHsKKwk6ID5leHBlY3QgJiYKKwljbXBfY2FjaGVfdHJlZSBleHBlY3QKK30KKwordGVzdF9leHBlY3RfZmFpbHVyZSAnaW5pdGlhbCBjb21taXQgaGFzIGNhY2hlLXRyZWUnICcKKwl0ZXN0X2NvbW1pdCBmb28gJiYKKwl0ZXN0X3NoYWxsb3dfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgSEVBRCBlc3RhYmxpc2hlcyBjYWNoZS10cmVlJyAnCisJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJdGVzdF9zaGFsbG93X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFkZCBpbnZhbGlkYXRlcyBjYWNoZS10cmVlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkOyBnaXQgcmVhZC10cmVlIEhFQUQiICYmCisJZWNobyAiSSBjaGFuZ2VkIHRoaXMgZmlsZSIgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfaW52YWxpZF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCBpbnZhbGlkYXRlcyBjYWNoZS10cmVlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkOyBnaXQgcmVhZC10cmVlIEhFQUQiICYmCisJZWNobyAiSSBjaGFuZ2VkIHRoaXMgZmlsZSIgPiBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbyAmJgorCXRlc3RfaW52YWxpZF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlLXRyZWUgZXN0YWJsaXNoZXMgY2FjaGUtdHJlZScgJworCXRlc3Qtc2NyYXAtY2FjaGUtdHJlZSAmJgorCWdpdCB3cml0ZS10cmVlICYmCisJdGVzdF9zaGFsbG93X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdC1zY3JhcC1jYWNoZS10cmVlIHdvcmtzJyAnCisJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJdGVzdC1zY3JhcC1jYWNoZS10cmVlICYmCisJdGVzdF9ub19jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlY29uZCBjb21taXQgaGFzIGNhY2hlLXRyZWUnICcKKwl0ZXN0X2NvbW1pdCBiYXIgJiYKKwl0ZXN0X3NoYWxsb3dfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgZ2l2ZXMgY2FjaGUtdHJlZScgJworCXRlc3Qtc2NyYXAtY2FjaGUtdHJlZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X3NoYWxsb3dfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgd2l0aG91dCBpbmRleCBnaXZlcyBjYWNoZS10cmVlJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X3NoYWxsb3dfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjaGVja291dCBnaXZlcyBjYWNoZS10cmVlJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJdGVzdF9zaGFsbG93X2NhY2hlX3RyZWUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMTAwLXByZXZpb3VzLnNoIGIvdC90MDEwMC1wcmV2aW91cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMTViOWIzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDEwMC1wcmV2aW91cy5zaApAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHJldmlvdXMgYnJhbmNoIHN5bnRheCBAey1ufScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtZCBAey0xfScgJworCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgY2hlY2tvdXQgLWIganVuayAmJgorCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtZCBAey0xfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9qdW5rCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtZCBAey0xMn0gd2hlbiB0aGVyZSBpcyBub3QgZW5vdWdoIHN3aXRjaGVzIHlldCcgJworCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAmJgorCWdpdCBjaGVja291dCAtYiBqdW5rMiAmJgorCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtZCBAey0xMn0gJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEB7LTF9JyAnCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IGJyYW5jaCAtZiBtYXN0ZXIgQiAmJgorCWdpdCBicmFuY2ggLWYgb3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIEB7LTF9ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAiTWVyZ2UgYnJhbmNoICdcJydvdGhlcidcJyciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEB7LTF9IHdoZW4gdGhlcmUgaXMgbm90IGVub3VnaCBzd2l0Y2hlcyB5ZXQnICcKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBCICYmCisJZ2l0IGJyYW5jaCAtZiBvdGhlciBDICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBAey0xMn0KKycKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDAxMDEtYXQtc3ludGF4LnNoIGIvdC90MDEwMS1hdC1zeW50YXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTE5OThiNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMDEtYXQtc3ludGF4LnNoCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd2YXJpb3VzIEB7d2hhdGV2ZXJ9IHN5bnRheCB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3bworJworCitjaGVja19hdCgpIHsKKwllY2hvICIkMiIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgIiQxIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAezB9IHNob3dzIGN1cnJlbnQnICcKKwljaGVja19hdCBAezB9IHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAezF9IHNob3dzIG9sZCcgJworCWNoZWNrX2F0IEB7MX0gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7bm93fSBzaG93cyBjdXJyZW50JyAnCisJY2hlY2tfYXQgQHtub3d9IHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAezIwMDEtMDktMTd9IChiZWZvcmUgdGhlIGZpcnN0IGNvbW1pdCkgc2hvd3Mgb2xkJyAnCisJY2hlY2tfYXQgQHsyMDAxLTA5LTE3fSBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lsbHkgYXBwcm94aWRhdGVzIHdvcmsnICcKKwljaGVja19hdCBAezMuaG90LmRvZ3Mub24uMjAwMS0wOS0xN30gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGljZSBtaXNzcGVsbGVkIHVwc3RyZWFtJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyBAe3VzcHRyZWFtfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGFpbiBhYm91dCB0b3RhbCBub25zZW5zZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgQHt1dHRlci5ib2dvc2l0eX0KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjAwLWdldHRleHQtYmFzaWMuc2ggYi90L3QwMjAwLWdldHRleHQtYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODg1M2Q4YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDAtZ2V0dGV4dC1iYXNpYy5zaApAQCAtMCwwICsxLDEwOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdHZXR0ZXh0IHN1cHBvcnQgZm9yIEdpdCcKKworLiAuL2xpYi1nZXR0ZXh0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNhbml0eTogXCRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgaXMgc2V0ICh0byAkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FKSIgJworICAgIHRlc3QgLW4gIiRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nhbml0eTogJFRFWFRET01BSU4gaXMgZ2l0JyAnCisgICAgdGVzdCAkVEVYVERPTUFJTiA9ICJnaXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3hnZXR0ZXh0IHNhbml0eTogUGVybCBfKCkgc3RyaW5ncyBhcmUgbm90IGV4dHJhY3RlZCcgJworICAgICEgZ3JlcCAiQSBQZXJsIHN0cmluZyB4Z2V0dGV4dCB3aWxsIG5vdCBnZXQiICIkR0lUX1BPX1BBVEgiL2lzLnBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3hnZXR0ZXh0IHNhbml0eTogQ29tbWVudCBleHRyYWN0aW9uIHdpdGggLS1hZGQtY29tbWVudHMnICcKKyAgICBncmVwICJUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QiICIkVEVTVF9ESVJFQ1RPUlkiL3QwMjAwLyogfCB3YyAtbCA+ZXhwZWN0ICYmCisgICAgZ3JlcCAiVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0IiAiJEdJVF9QT19QQVRIIi9pcy5wbyAgfCB3YyAtbCA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd4Z2V0dGV4dCBzYW5pdHk6IENvbW1lbnQgZXh0cmFjdGlvbiB3aXRoIC0tYWRkLWNvbW1lbnRzIHN0b3BzIGF0IHN0YXRlbWVudHMnICcKKyAgICAhIGdyZXAgIlRoaXMgaXMgYSBwaG9ueSIgIiRHSVRfUE9fUEFUSCIvaXMucG8gJiYKKyAgICAhIGdyZXAgInRoZSBhYm92ZSBjb21tZW50IiAiJEdJVF9QT19QQVRIIi9pcy5wbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFQgJ3Nhbml0eTogJFRFWFRET01BSU5ESVIgZXhpc3RzIHdpdGhvdXQgTk9fR0VUVEVYVD1ZZXNQbGVhc2UnICcKKyAgICB0ZXN0IC1kICIkVEVYVERPTUFJTkRJUiIgJiYKKyAgICB0ZXN0ICIkVEVYVERPTUFJTkRJUiIgPSAiJEdJVF9URVhURE9NQUlORElSIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFQgJ3Nhbml0eTogSWNlbGFuZGljIGxvY2FsZSB3YXMgY29tcGlsZWQnICcKKyAgICB0ZXN0IC1mICIkVEVYVERPTUFJTkRJUi9pcy9MQ19NRVNTQUdFUy9naXQubW8iCisnCisKKyMgVE9ETzogV2hlbiB3ZSBoYXZlIG1vcmUgbG9jYWxlcywgZ2VuZXJhbGl6ZSB0aGlzIHRvIHRlc3QgdGhlbQorIyBhbGwuIE1heWJlIHdlJ2xsIG5lZWQgYSBkaXItPmxvY2FsZSBtYXAgZm9yIHRoYXQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdzYW5pdHk6IGdldHRleHQoIiIpIG1ldGFkYXRhIGlzIE9LJyAnCisgICAgIyBSZXR1cm4gdmFsdWUgbWF5IGJlIG5vbi16ZXJvCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICIiID56ZXJvLWV4cGVjdCAmJgorICAgIGdyZXAgIlByb2plY3QtSWQtVmVyc2lvbjogR2l0IiB6ZXJvLWV4cGVjdCAmJgorICAgIGdyZXAgIkdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+IiB6ZXJvLWV4cGVjdCAmJgorICAgIGdyZXAgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIgemVyby1leHBlY3QgJiYKKyAgICBncmVwICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0IiB6ZXJvLWV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdzYW5pdHk6IGdldHRleHQodW5rbm93bikgaXMgcGFzc2VkIHRocm91Z2gnICcKKyAgICBwcmludGYgIlRoaXMgaXMgbm90IGEgdHJhbnNsYXRpb24gc3RyaW5nIiAgPmV4cGVjdCAmJgorICAgIGdldHRleHQgIlRoaXMgaXMgbm90IGEgdHJhbnNsYXRpb24gc3RyaW5nIiA+YWN0dWFsICYmCisgICAgZXZhbF9nZXR0ZXh0ICJUaGlzIGlzIG5vdCBhIHRyYW5zbGF0aW9uIHN0cmluZyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB4Z2V0dGV4dCBmcm9tIEMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ3hnZXR0ZXh0OiBDIGV4dHJhY3Rpb24gb2YgXygpIGFuZCBOXygpIHN0cmluZ3MnICcKKyAgICBwcmludGYgIlRJTFJBVU46IEMgdGlscmF1bmFzdHJlbmd1ciIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiXG4iID4+ZXhwZWN0ICYmCisgICAgcHJpbnRmICJTasOhICdcJydnaXQgaGVscCBTS0lQVU4nXCcnIHRpbCBhw7Agc2rDoSBoasOhbHAgZnlyaXIgdGlsdGVrbmEgc2tpcHVuLiIgPj5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEEgQyB0ZXN0IHN0cmluZyIgPmFjdHVhbCAmJgorICAgIHByaW50ZiAiXG4iID4+YWN0dWFsICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJTZWUgJ1wnJ2dpdCBoZWxwIENPTU1BTkQnXCcnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iID4+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogQyBleHRyYWN0aW9uIHdpdGggJXMnICcKKyAgICBwcmludGYgIlRJTFJBVU46IEMgdGlscmF1bmFzdHJlbmd1ciAlJXMiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEEgQyB0ZXN0IHN0cmluZyAlcyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB4Z2V0dGV4dCBmcm9tIFNoZWxsCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogU2hlbGwgZXh0cmFjdGlvbicgJworICAgIHByaW50ZiAiVElMUkFVTjogU2tlbGphcnRpbHJhdW5hc3RyZW5ndXIiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEEgU2hlbGwgdGVzdCBzdHJpbmciID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ3hnZXR0ZXh0OiBTaGVsbCBleHRyYWN0aW9uIHdpdGggJHZhcmlhYmxlJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBTa2VsamFydGlscmF1bmFzdHJlbmd1ciBtZcOwIGJyZXl0dW5uaSBhIHZhciBpIGFibGUiID54LWV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgdmFyaWFibGU9ImEgdmFyIGkgYWJsZSIgZXZhbF9nZXR0ZXh0ICJURVNUOiBBIFNoZWxsIHRlc3QgXCR2YXJpYWJsZSIgPngtYWN0dWFsICYmCisgICAgdGVzdF9jbXAgeC1leHBlY3QgeC1hY3R1YWwKKycKKworIyB4Z2V0dGV4dCBmcm9tIFBlcmwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ3hnZXR0ZXh0OiBQZXJsIGV4dHJhY3Rpb24nICcKKyAgICBwcmludGYgIlRJTFJBVU46IFBlcmwgdGlscmF1bmFzdHJlbmd1ciIgPmV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2V0dGV4dCAiVEVTVDogQSBQZXJsIHRlc3Qgc3RyaW5nIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogUGVybCBleHRyYWN0aW9uIHdpdGggJXMnICcKKyAgICBwcmludGYgIlRJTFJBVU46IFBlcmwgdGlscmF1bmFzdHJlbmd1ciBtZcOwIGJyZXl0dW5uaSAlJXMiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEEgUGVybCB0ZXN0IHZhcmlhYmxlICVzIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdzYW5pdHk6IFNvbWUgZ2V0dGV4dCgiIikgZGF0YSBmb3IgcmVhbCBsb2NhbGUnICcKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIiIgPnJlYWwtbG9jYWxlICYmCisgICAgdGVzdCAtcyByZWFsLWxvY2FsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAyMDAvdGVzdC5jIGIvdC90MDIwMC90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0ZDQ1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDAvdGVzdC5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qIFRoaXMgaXMgYSBwaG9ueSBDIHByb2dyYW0gdGhhdCdzIG9ubHkgaGVyZSB0byB0ZXN0IHhnZXR0ZXh0IG1lc3NhZ2UgZXh0cmFjdGlvbiAqLworCitjb25zdCBjaGFyIGhlbHBbXSA9CisJLyogVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuICovCisJTl8oIlNlZSAnZ2l0IGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIpOworCitpbnQgbWFpbih2b2lkKQoreworCS8qIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LiAqLworCXB1dHMoXygiVEVTVDogQSBDIHRlc3Qgc3RyaW5nIikpOworCisJLyogVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuICovCisJcHJpbnRmKF8oIlRFU1Q6IEEgQyB0ZXN0IHN0cmluZyAlcyIpLCAidmFyaWFibGUiKTsKKworCS8qIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LiAqLworCXByaW50ZihfKCJURVNUOiBIZWxsbyBXb3JsZCEiKSk7CisKKwkvKiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4gKi8KKwlwcmludGYoXygiVEVTVDogT2xkIEVuZ2xpc2ggUnVuZXMiKSk7CisKKwkvKiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4gKi8KKwlwcmludGYoXygiVEVTVDog4oCYc2luZ2xl4oCZIGFuZCDigJxkb3VibGXigJ0gcXVvdGVzIikpOworfQpkaWZmIC0tZ2l0IGEvdC90MDIwMC90ZXN0LnBlcmwgYi90L3QwMjAwL3Rlc3QucGVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmZiYTM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwMC90ZXN0LnBlcmwKQEAgLTAsMCArMSwxNCBAQAorIyBUaGlzIGlzIGEgcGhvbnkgUGVybCBwcm9ncmFtIHRoYXQncyBvbmx5IGhlcmUgdG8gdGVzdCB4Z2V0dGV4dAorIyBtZXNzYWdlIGV4dHJhY3Rpb24KKworIyBzbyB0aGUgYWJvdmUgY29tbWVudCB3b24ndCBiZSBmb2xkZWQgaW50byB0aGUgbmV4dCBvbmUgYnkgeGdldHRleHQKKzE7CisKKyMgVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCitwcmludCBfXygiVEVTVDogQSBQZXJsIHRlc3Qgc3RyaW5nIik7CisKKyMgVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCitwcmludGYgX18oIlRFU1Q6IEEgUGVybCB0ZXN0IHZhcmlhYmxlICVzIiksICJtb28iOworCisjIFRSQU5TTEFUT1JTOiBJZiB5b3Ugc2VlIHRoaXMsIEdpdCBoYXMgYSBidWcKK3ByaW50IF8iVEVTVDogQSBQZXJsIHN0cmluZyB4Z2V0dGV4dCB3aWxsIG5vdCBnZXQiOwpkaWZmIC0tZ2l0IGEvdC90MDIwMC90ZXN0LnNoIGIvdC90MDIwMC90ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMmQ2MDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAwL3Rlc3Quc2gKQEAgLTAsMCArMSwxNCBAQAorIyBUaGlzIGlzIGEgcGhvbnkgU2hlbGwgcHJvZ3JhbSB0aGF0J3Mgb25seSBoZXJlIHRvIHRlc3QgeGdldHRleHQKKyMgbWVzc2FnZSBleHRyYWN0aW9uCisKKyMgc28gdGhlIGFib3ZlIGNvbW1lbnQgd29uJ3QgYmUgZm9sZGVkIGludG8gdGhlIG5leHQgb25lIGJ5IHhnZXR0ZXh0CitlY2hvCisKKyMgVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCitnZXR0ZXh0ICJURVNUOiBBIFNoZWxsIHRlc3Qgc3RyaW5nIgorCisjIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorZXZhbF9nZXR0ZXh0ICJURVNUOiBBIFNoZWxsIHRlc3QgXCR2YXJpYWJsZSIKKworIyBUUkFOU0xBVE9SUzogSWYgeW91IHNlZSB0aGlzLCBHaXQgaGFzIGEgYnVnCitfKCJURVNUOiBBIFNoZWxsIHN0cmluZyB4Z2V0dGV4dCB3b24ndCBnZXQiKQpkaWZmIC0tZ2l0IGEvdC90MDIwMS1nZXR0ZXh0LWZhbGxiYWNrcy5zaCBiL3QvdDAyMDEtZ2V0dGV4dC1mYWxsYmFja3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWQ4MGE5OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDEtZ2V0dGV4dC1mYWxsYmFja3Muc2gKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdHZXR0ZXh0IFNoZWxsIGZhbGxiYWNrcycKKworR0lUX0lOVEVSTkFMX0dFVFRFWFRfVEVTVF9GQUxMQkFDS1M9WWVzUGxlYXNlCitleHBvcnQgR0lUX0lOVEVSTkFMX0dFVFRFWFRfVEVTVF9GQUxMQkFDS1MKKworLiAuL2xpYi1nZXR0ZXh0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNhbml0eTogXCRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgaXMgc2V0ICh0byAkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FKSIgJworICAgIHRlc3QgLW4gIiRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nhbml0eTogJEdJVF9JTlRFUk5BTF9HRVRURVhUX1RFU1RfRkFMTEJBQ0tTIGlzIHNldCcgJworICAgIHRlc3QgLW4gIiRHSVRfSU5URVJOQUxfR0VUVEVYVF9URVNUX0ZBTExCQUNLUyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3Nhbml0eTogJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSIgaXMgZmFsbHRocm91Z2gnICcKKyAgICBlY2hvIGZhbGx0aHJvdWdoID5leHBlY3QgJiYKKyAgICBlY2hvICRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0dGV4dDogb3VyIGdldHRleHQoKSBmYWxsYmFjayBoYXMgcGFzcy10aHJvdWdoIHNlbWFudGljcycgJworICAgIHByaW50ZiAidGVzdCIgPmV4cGVjdCAmJgorICAgIGdldHRleHQgInRlc3QiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorICAgIHByaW50ZiAidGVzdCBtb3JlIHdvcmRzIiA+ZXhwZWN0ICYmCisgICAgZ2V0dGV4dCAidGVzdCBtb3JlIHdvcmRzIiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXZhbF9nZXR0ZXh0OiBvdXIgZXZhbF9nZXR0ZXh0KCkgZmFsbGJhY2sgaGFzIHBhc3MtdGhyb3VnaCBzZW1hbnRpY3MnICcKKyAgICBwcmludGYgInRlc3QiID5leHBlY3QgJiYKKyAgICBldmFsX2dldHRleHQgInRlc3QiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorICAgIHByaW50ZiAidGVzdCBtb3JlIHdvcmRzIiA+ZXhwZWN0ICYmCisgICAgZXZhbF9nZXR0ZXh0ICJ0ZXN0IG1vcmUgd29yZHMiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdldmFsX2dldHRleHQ6IG91ciBldmFsX2dldHRleHQoKSBmYWxsYmFjayBjYW4gaW50ZXJwb2xhdGUgdmFyaWFibGVzJyAnCisgICAgcHJpbnRmICJ0ZXN0IFllc1BsZWFzZSIgPmV4cGVjdCAmJgorICAgIEdJVF9JTlRFUk5BTF9HRVRURVhUX1RFU1RfRkFMTEJBQ0tTPVllc1BsZWFzZSBldmFsX2dldHRleHQgInRlc3QgXCRHSVRfSU5URVJOQUxfR0VUVEVYVF9URVNUX0ZBTExCQUNLUyIgPmFjdHVhbCAmJgorICAgIHRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V2YWxfZ2V0dGV4dDogb3VyIGV2YWxfZ2V0dGV4dCgpIGZhbGxiYWNrIGNhbiBpbnRlcnBvbGF0ZSB2YXJpYWJsZXMgd2l0aCBzcGFjZXMnICcKKyAgICBjbWRsaW5lPSJnaXQgYW0iICYmCisgICAgZXhwb3J0IGNtZGxpbmU7CisgICAgcHJpbnRmICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIGdpdCBhbSAtLXJlc29sdmVkLiIgPmV4cGVjdCAmJgorICAgIGV2YWxfZ2V0dGV4dCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcJGNtZGxpbmUgLS1yZXNvbHZlZC4iID5hY3R1YWwKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdldmFsX2dldHRleHQ6IG91ciBldmFsX2dldHRleHQoKSBmYWxsYmFjayBjYW4gaW50ZXJwb2xhdGUgdmFyaWFibGVzIHdpdGggc3BhY2VzIGFuZCBxdW90ZXMnICcKKyAgICBjbWRsaW5lPSJnaXQgYW0iICYmCisgICAgZXhwb3J0IGNtZGxpbmU7CisgICAgcHJpbnRmICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIi4iID5leHBlY3QgJiYKKyAgICBldmFsX2dldHRleHQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCJcJGNtZGxpbmUgLS1yZXNvbHZlZFwiLiIgPmFjdHVhbAorICAgIHRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDIwMi1nZXR0ZXh0LXBlcmwuc2ggYi90L3QwMjAyLWdldHRleHQtcGVybC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MjhlYmIwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwMi1nZXR0ZXh0LXBlcmwuc2gKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdQZXJsIGdldHRleHQgaW50ZXJmYWNlIChHaXQ6OkkxOE4pJworCisuIC4vbGliLWdldHRleHQuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgcGVybCBpbnRlcmZhY2UgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKKyIkUEVSTF9QQVRIIiAtTVRlc3Q6Ok1vcmUgLWUgMCAyPi9kZXYvbnVsbCB8fCB7CisJc2tpcF9hbGw9IlBlcmwgVGVzdDo6TW9yZSB1bmF2YWlsYWJsZSwgc2tpcHBpbmcgdGVzdCIKKwl0ZXN0X2RvbmUKK30KKworIyBUaGUgZXh0ZXJuYWwgdGVzdCB3aWxsIG91dHB1dHMgaXRzIG93biBwbGFuCit0ZXN0X2V4dGVybmFsX2hhc190YXA9MQorCit0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIFwKKyAgICAnUGVybCBHaXQ6OkkxOE4gQVBJJyBcCisgICAgIiRQRVJMX1BBVEgiICIkVEVTVF9ESVJFQ1RPUlkiL3QwMjAyL3Rlc3QucGwKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjAyL3Rlc3QucGwgYi90L3QwMjAyL3Rlc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxMGNiNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDIvdGVzdC5wbApAQCAtMCwwICsxLDExMCBAQAorIyEvdXNyL2Jpbi9wZXJsCit1c2UgNS4wMDg7Cit1c2UgbGliIChzcGxpdCgvOi8sICRFTlZ7R0lUUEVSTExJQn0pKTsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUE9TSVggcXcoOmxvY2FsZV9oKTsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDg7Cit1c2UgR2l0OjpJMThOOworCitteSAkaGFzX2dldHRleHRfbGlicmFyeSA9ICRHaXQ6OkkxOE46Ol9fSEFTX0xJQlJBUlk7CisKK29rKDEsICJUZXN0aW5nIEdpdDo6STE4TiB3aXRoICIgLgorCSAoJGhhc19nZXR0ZXh0X2xpYnJhcnkKKwkgID8gKGRlZmluZWQgJExvY2FsZTo6TWVzc2FnZXM6OlZFUlNJT04KKwkJID8gIkxvY2FsZTo6TWVzc2FnZXMgdmVyc2lvbiAkTG9jYWxlOjpNZXNzYWdlczo6VkVSU0lPTiIKKwkJICMgVmVyc2lvbnMgb2YgTG9jYWxlOjpNZXNzYWdlcyBiZWZvcmUgMS4xNyBkaWRuJ3QgaGF2ZSBhCisJCSAjICRWRVJTSU9OIHZhcmlhYmxlLgorCQkgOiAiTG9jYWxlOjpNZXNzYWdlcyB2ZXJzaW9uIDwxLjE3IikKKwkgIDogIk5PIFBlcmwgZ2V0dGV4dCBsaWJyYXJ5IikpOworb2soMSwgIkdpdDo6STE4TiBpcyBsb2NhdGVkIGF0ICRJTkN7J0dpdC9JMThOLnBtJ30iKTsKKworeworCW15ICRleHBvcnRzID0gQEdpdDo6STE4Tjo6RVhQT1JUOworCW9rKCRleHBvcnRzLCAic2FuaXR5OiBHaXQ6OkkxOE4gaGFzICRleHBvcnRzIGV4cG9ydChzKSIpOworfQoraXNfZGVlcGx5KFxAR2l0OjpJMThOOjpFWFBPUlQsIFxAR2l0OjpJMThOOjpFWFBPUlRfT0ssICJzYW5pdHk6IEdpdDo6STE4TiBleHBvcnRzIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdCIpOworCisjIHByb3RvdHlwZXMKK3sKKwkjIEFkZCBwcm90b3R5cGVzIGhlcmUgd2hlbiBtb2RpZnlpbmcgdGhlIHB1YmxpYyBpbnRlcmZhY2UgdG8gYWRkCisJIyBtb3JlIGdldHRleHQgd3JhcHBlciBmdW5jdGlvbnMuCisJbXkgJXByb3RvdHlwZXMgPSAocXcoCisJCV9fCSQKKwkpKTsKKwl3aGlsZSAobXkgKCRzdWIsICRwcm90bykgPSBlYWNoICVwcm90b3R5cGVzKSB7CisJCWlzKHByb3RvdHlwZShcJnsiR2l0OjpJMThOOjokc3ViIn0pLCAkcHJvdG8sICJzYW5pdHk6ICRzdWIgaGFzIGEgJHByb3RvIHByb3RvdHlwZSIpOworCX0KK30KKworIyBUZXN0IGJhc2ljIHBhc3N0aHJvdWdoIGluIHRoZSBDIGxvY2FsZQoreworCWxvY2FsICRFTlZ7TEFOR1VBR0V9ID0gJ0MnOworCWxvY2FsICRFTlZ7TENfQUxMfSAgID0gJ0MnOworCWxvY2FsICRFTlZ7TEFOR30gICAgID0gJ0MnOworCisJbXkgKCRnb3QsICRleHBlY3QpID0gKCgnVEVTVDogQSBQZXJsIHRlc3Qgc3RyaW5nJykgeCAyKTsKKworCWlzKF9fKCRnb3QpLCAkZXhwZWN0LCAiUGFzc2luZyBhIHN0cmluZyB0aHJvdWdoIF9fKCkgaW4gdGhlIEMgbG9jYWxlIHdvcmtzIik7Cit9CisKKyMgVGVzdCBhIGJhc2ljIG1lc3NhZ2Ugb24gZGlmZmVyZW50IGxvY2FsZXMKK1NLSVA6IHsKKwl1bmxlc3MgKCRFTlZ7R0VUVEVYVF9MT0NBTEV9KSB7CisJCSMgQ2FuJ3QgcmVsaWFibHkgdGVzdCBfXygpIHdpdGggYSBub24tQyBsb2NhbGVzIGJlY2F1c2UgdGhlCisJCSMgcmVxdWlyZWQgbG9jYWxlcyBtYXkgbm90IGJlIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLgorCQkjCisJCSMgV2UgdGVzdCBmb3IgdGhlc2UgYW55d2F5IGFzIHBhcnQgb2YgdGhlIHNoZWxsCisJCSMgdGVzdHMuIFNraXBwaW5nIHRoZXNlIGhlcmUgd2lsbCBlbGltaW5hdGUgZmFpbHVyZXMgb24gb2RkCisJCSMgcGxhdGZvcm1zIHdpdGggaW5jb21wbGV0ZSBsb2NhbGUgZGF0YS4KKworCQlza2lwICJHRVRURVhUX0xPQ0FMRSBtdXN0IGJlIHNldCBieSBsaWItZ2V0dGV4dC5zaCBmb3IgZXhoYXVzdGl2ZSBHaXQ6OkkxOE4gdGVzdHMiLCAyOworCX0KKworCSMgVGhlIGlzX0lTIFVURi04IGxvY2FsZSBwYXNzZWQgZnJvbSBsaWItZ2V0dGV4dC5zaAorCW15ICRpc19JU19sb2NhbGUgPSAkRU5We2lzX0lTX2xvY2FsZX07CisKKwlteSAkdGVzdCA9IHN1YiB7CisJCW15ICgkZ290LCAkZXhwZWN0LCAkbXNnLCAkbG9jYWxlKSA9IEBfOworCQkjIE1heWJlIHRoaXMgc3lzdGVtIGRvZXNuJ3QgaGF2ZSB0aGUgbG9jYWxlIHdlJ3JlIHRyeWluZyB0bworCQkjIHRlc3QuCisJCW15ICRsb2NhbGVfb2sgPSBzZXRsb2NhbGUoTENfQUxMLCAkbG9jYWxlKTsKKwkJaXMoX18oJGdvdCksICRleHBlY3QsICIkbXNnIGEgZ2V0dGV4dCBsaWJyYXJ5ICsgPCRsb2NhbGU+IGxvY2FsZSA8JGdvdD4gdHVybnMgaW50byA8JGV4cGVjdD4iKTsKKwl9OworCisJbXkgJGVudl9DID0gc3ViIHsKKwkJJEVOVntMQU5HVUFHRX0gPSAnQyc7CisJCSRFTlZ7TENfQUxMfSAgID0gJ0MnOworCX07CisKKwlteSAkZW52X2lzID0gc3ViIHsKKwkJJEVOVntMQU5HVUFHRX0gPSAnaXMnOworCQkkRU5We0xDX0FMTH0gICA9ICRpc19JU19sb2NhbGU7CisJfTsKKworCSMgVHJhbnNsYXRpb24ncyB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwKKwlteSAoJGdvdCwgJGV4cGVjdCkgPSAoKCdURVNUOiBBIFBlcmwgdGVzdCBzdHJpbmcnKSB4IDIpOworCisJaWYgKCRoYXNfZ2V0dGV4dF9saWJyYXJ5KSB7CisJCXsKKwkJCWxvY2FsICVFTlY7ICRlbnZfQy0+KCk7CisJCQkkdGVzdC0+KCRnb3QsICRleHBlY3QsICJXaXRoIiwgJ0MnKTsKKwkJfQorCisJCXsKKwkJCW15ICgkZ290LCAkZXhwZWN0KSA9ICgkZ290LCAnVElMUkFVTjogUGVybCB0aWxyYXVuYXN0cmVuZ3VyJyk7CisJCQlsb2NhbCAlRU5WOyAkZW52X2lzLT4oKTsKKwkJCSR0ZXN0LT4oJGdvdCwgJGV4cGVjdCwgIldpdGgiLCAkaXNfSVNfbG9jYWxlKTsKKwkJfQorCX0gZWxzZSB7CisJCXsKKwkJCWxvY2FsICVFTlY7ICRlbnZfQy0+KCk7CisJCQkkdGVzdC0+KCRnb3QsICRleHBlY3QsICJXaXRob3V0IiwgJ0MnKTsKKwkJfQorCisJCXsKKwkJCWxvY2FsICVFTlY7ICRlbnZfaXMtPigpOworCQkJJHRlc3QtPigkZ290LCAkZXhwZWN0LCAiV2l0aG91dCIsICdpcycpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvdC90MDIwMy1nZXR0ZXh0LXNldGxvY2FsZS1zYW5pdHkuc2ggYi90L3QwMjAzLWdldHRleHQtc2V0bG9jYWxlLXNhbml0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMjEyNDYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwMy1nZXR0ZXh0LXNldGxvY2FsZS1zYW5pdHkuc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSJUaGUgR2l0IEMgZnVuY3Rpb25zIGFyZW4ndCBicm9rZW4gYnkgc2V0bG9jYWxlKDMpIgorCisuIC4vbGliLWdldHRleHQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3cgYSBJU08tODg1OS0xIGNvbW1pdCB1bmRlciBDIGxvY2FsZScgJworCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCXRlc3RfY29tbWl0ICJpc28tYy1jb21taXQiIGlzby11bmRlci1jICYmCisJZ2l0IHNob3cgPm91dCAyPmVyciAmJgorCSEgdGVzdCAtcyBlcnIgJiYKKwlncmVwIC1xICJpc28tYy1jb21taXQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdnaXQgc2hvdyBhIElTTy04ODU5LTEgY29tbWl0IHVuZGVyIGEgVVRGLTggbG9jYWxlJyAnCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCisJdGVzdF9jb21taXQgImlzby11dGY4LWNvbW1pdCIgaXNvLXVuZGVyLXV0ZjggJiYKKwlMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdpdCBzaG93ID5vdXQgMj5lcnIgJiYKKwkhIHRlc3QgLXMgZXJyICYmCisJZ3JlcCAtcSAiaXNvLXV0ZjgtY29tbWl0IiBvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjA0LWdldHRleHQtcmVlbmNvZGUtc2FuaXR5LnNoIGIvdC90MDIwNC1nZXR0ZXh0LXJlZW5jb2RlLXNhbml0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NDM3ZTUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwNC1nZXR0ZXh0LXJlZW5jb2RlLXNhbml0eS5zaApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249IkdldHRleHQgcmVlbmNvZGluZyBvZiBvdXIgKi5wby8qLm1vIGZpbGVzIHdvcmtzIgorCisuIC4vbGliLWdldHRleHQuc2gKKworIyBUaGUgY29uc3RhbnRzIHVzZWQgaW4gYSB0cmlja3kgb2JzZXJ2YXRpb24gZm9yIHVuZGVmaW5lZCBiZWhhdmlvdXIKK1JVTkVTPSJUSUxSQVVOOiDhmrvhm5Yg4Zqz4Zq54Zqr4ZqmIOGapuGaq+GbjyDhmrvhm5Yg4ZuS4Zqi4Zue4ZuWIOGaqeGaviDhmqbhmqvhm5cg4Zua4Zqq4Zq+4Zue4ZuWIOGavuGaqeGaseGapuGaueGbluGaquGaseGbnuGaouGblyDhmrnhm4HhmqYg4Zqm4ZqqIOGaueGbluGbpeGaqyIKK1BVTlRTPSJUSUxSQVVOOiA/PyA/Pz8/ID8/PyA/PyA/Pz8/ID8/ID8/PyA/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8gPz8gPz8/PyIKK01TR0tFWT0iVEVTVDogT2xkIEVuZ2xpc2ggUnVuZXMiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ2dldHRleHQ6IEVtaXR0aW5nIFVURi04IGZyb20gb3VyIFVURi04ICoubW8gZmlsZXMgLyBJY2VsYW5kaWMnICcKKyAgICBwcmludGYgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIhIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBIZWxsbyBXb3JsZCEiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ2dldHRleHQ6IEVtaXR0aW5nIFVURi04IGZyb20gb3VyIFVURi04ICoubW8gZmlsZXMgLyBSdW5lcycgJworICAgIHByaW50ZiAiJXMiICIkUlVORVMiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIiRNU0dLRVkiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9JU09fTE9DQUxFICdnZXR0ZXh0OiBFbWl0dGluZyBJU08tODg1OS0xIGZyb20gb3VyIFVURi04ICoubW8gZmlsZXMgLyBJY2VsYW5kaWMnICcKKyAgICBwcmludGYgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIhIiB8IGljb252IC1mIFVURi04IC10IElTTzg4NTktMSA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfaXNvX2xvY2FsZSIgZ2V0dGV4dCAiVEVTVDogSGVsbG8gV29ybGQhIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfSVNPX0xPQ0FMRSAnZ2V0dGV4dDogaW1wb3NzaWJsZSBJU08tODg1OS0xIG91dHB1dCcgJworCUxBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2lzb19sb2NhbGUiIGdldHRleHQgIiRNU0dLRVkiID5ydW5lcyAmJgorCWNhc2UgIiQoY2F0IHJ1bmVzKSIgaW4KKwkiJE1TR0tFWSIpCisJCXNheSAiWW91ciBzeXN0ZW0gZ2l2ZXMgYmFjayB0aGUga2V5IHRvIG1lc3NhZ2UgY2F0YWxvZyIKKwkJOzsKKwkiJFBVTlRTIikKKwkJc2F5ICJZb3VyIHN5c3RlbSByZXBsYWNlcyBhbiBpbXBvc3NpYmxlIGNoYXJhY3RlciB3aXRoID8iCisJCTs7CisJIiRSVU5FUyIpCisJCXNheSAiWW91ciBzeXN0ZW0gZ2l2ZXMgYmFjayB0aGUgcmF3IG1lc3NhZ2UgZm9yIGFuIGltcG9zc2libGUgcmVxdWVzdCIKKwkJOzsKKwkqKQorCQlzYXkgIldlIG5ldmVyIHNhdyB0aGUgZXJyb3IgYmVoYXZpb3VyIHlvdXIgc3lzdGVtIGV4aGliaXRzIgorCQlmYWxzZQorCQk7OworCWVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnZ2V0dGV4dDogRmV0Y2hpbmcgYSBVVEYtOCBtc2dpZCAtPiBVVEYtOCcgJworICAgIHByaW50ZiAiVElMUkFVTjog4oCaZWluZmFsZGFy4oCYIG9nIOKAnnR2w7ZmYWxkYXLigJwgZ8Omc2FsYXBwaXIiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IOKAmHNpbmdsZeKAmSBhbmQg4oCcZG91Ymxl4oCdIHF1b3RlcyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBIb3cgdGhlc2UgcXVvdGVzIGdldCB0cmFuc2xpdGVyYXRlZCBkZXBlbmRzIG9uIHRoZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uOgorIworIyAgIERlYmlhbjogICxlaW5mYWxkYXInIG9nICwsdHbDtmZhbGRhciIgW0dOVSBsaWJpbnRsXQorIyAgIEZyZWVCU0Q6IGBlaW5mYWxkYXJgIG9nICJ0dsO2ZmFsZGFyIiAgW0dOVSBsaWJpbnRsXQorIyAgIFNvbGFyaXM6ID9laW5mYWxkYXI/IG9nID90dsO2ZmFsZGFyPyAgW1NvbGFyaXMgbGliaW50bF0KKyMKKyMgSnVzdCBtYWtlIHN1cmUgdGhlIGNvbnRlbnRzIGFyZSB0cmFuc2xpdGVyYXRlZCwgYW5kIGRvbid0IHVzZSBncmVwIC1xCisjIHNvIHRoYXQgdGhlc2UgZGlmZmVyZW5jZXMgYXJlIGVtaXR0ZWQgdW5kZXIgLS12ZXJib3NlIGZvciBjdXJpb3VzCisjIGV5ZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfSVNPX0xPQ0FMRSAnZ2V0dGV4dDogRmV0Y2hpbmcgYSBVVEYtOCBtc2dpZCAtPiBJU08tODg1OS0xJyAnCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfaXNvX2xvY2FsZSIgZ2V0dGV4dCAiVEVTVDog4oCYc2luZ2xl4oCZIGFuZCDigJxkb3VibGXigJ0gcXVvdGVzIiA+YWN0dWFsICYmCisgICAgZ3JlcCAiZWluZmFsZGFyIiBhY3R1YWwgJiYKKyAgICBncmVwICIkKGVjaG8gdHbDtmZhbGRhciB8IGljb252IC1mIFVURi04IC10IElTTzg4NTktMSkiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdnZXR0ZXh0LmM6IGdpdCBpbml0IFVURi04IC0+IFVURi04JyAnCisgICAgcHJpbnRmICJCasOzIHRpbCB0w7NtYSBHaXQgbGluZCIgPmV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2l0IGluaXQgcmVwbyA+YWN0dWFsICYmCisgICAgdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcmVwbyIgJiYKKyAgICBncmVwICJeJChjYXQgZXhwZWN0KSAiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfSVNPX0xPQ0FMRSAnZ2V0dGV4dC5jOiBnaXQgaW5pdCBVVEYtOCAtPiBJU08tODg1OS0xJyAnCisgICAgcHJpbnRmICJCasOzIHRpbCB0w7NtYSBHaXQgbGluZCIgPmV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2lzb19sb2NhbGUiIGdpdCBpbml0IHJlcG8gPmFjdHVhbCAmJgorICAgIHRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHJlcG8iICYmCisgICAgZ3JlcCAiXiQoY2F0IGV4cGVjdCB8IGljb252IC1mIFVURi04IC10IElTTzg4NTktMSkgIiBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjA1LWdldHRleHQtcG9pc29uLnNoIGIvdC90MDIwNS1nZXR0ZXh0LXBvaXNvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMzYxNTkwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwNS1nZXR0ZXh0LXBvaXNvbi5zaApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J0dldHRleHQgU2hlbGwgcG9pc29uJworCisuIC4vbGliLWdldHRleHQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX1BPSVNPTiAic2FuaXR5OiBcJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSBpcyBzZXQgKHRvICRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUpIiAnCisgICAgdGVzdCAtbiAiJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX1BPSVNPTiAnc2FuaXR5OiAkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIiBpcyBwb2lzb24nICcKKyAgICB0ZXN0ICIkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIiA9ICJwb2lzb24iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9QT0lTT04gJ2dldHRleHQ6IG91ciBnZXR0ZXh0KCkgZmFsbGJhY2sgaGFzIHBvaXNvbiBzZW1hbnRpY3MnICcKKyAgICBwcmludGYgIiMgR0VUVEVYVCBQT0lTT04gIyIgPmV4cGVjdCAmJgorICAgIGdldHRleHQgInRlc3QiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisgICAgcHJpbnRmICIjIEdFVFRFWFQgUE9JU09OICMiID5leHBlY3QgJiYKKyAgICBnZXR0ZXh0ICJ0ZXN0IG1vcmUgd29yZHMiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9QT0lTT04gJ2V2YWxfZ2V0dGV4dDogb3VyIGV2YWxfZ2V0dGV4dCgpIGZhbGxiYWNrIGhhcyBwb2lzb24gc2VtYW50aWNzJyAnCisgICAgcHJpbnRmICIjIEdFVFRFWFQgUE9JU09OICMiID5leHBlY3QgJiYKKyAgICBldmFsX2dldHRleHQgInRlc3QiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisgICAgcHJpbnRmICIjIEdFVFRFWFQgUE9JU09OICMiID5leHBlY3QgJiYKKyAgICBldmFsX2dldHRleHQgInRlc3QgbW9yZSB3b3JkcyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMzAwLWNyZWRlbnRpYWxzLnNoIGIvdC90MDMwMC1jcmVkZW50aWFscy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzhlYTVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDMwMC1jcmVkZW50aWFscy5zaApAQCAtMCwwICsxLDI5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIGNyZWRlbnRpYWwgaGVscGVyIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1jcmVkZW50aWFsLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGhlbHBlciBzY3JpcHRzJyAnCisJY2F0ID5kdW1wIDw8LVxFT0YgJiYKKwl3aG9hbWk9YGVjaG8gJDAgfCBzZWQgcy8uKmdpdC1jcmVkZW50aWFsLS8vYAorCWVjaG8gPiYyICIkd2hvYW1pOiAkKiIKKwlPSUZTPSRJRlMKKwlJRlM9PQorCXdoaWxlIHJlYWQga2V5IHZhbHVlOyBkbworCQllY2hvID4mMiAiJHdob2FtaTogJGtleT0kdmFsdWUiCisJCWV2YWwgIiRrZXk9JHZhbHVlIgorCWRvbmUKKwlJRlM9JE9JRlMKKwlFT0YKKworCXdyaXRlX3NjcmlwdCBnaXQtY3JlZGVudGlhbC11c2VsZXNzIDw8LVxFT0YgJiYKKwkuIC4vZHVtcAorCWV4aXQgMAorCUVPRgorCisJd3JpdGVfc2NyaXB0IGdpdC1jcmVkZW50aWFsLXZlcmJhdGltIDw8LVxFT0YgJiYKKwl1c2VyPSQxOyBzaGlmdAorCXBhc3M9JDE7IHNoaWZ0CisJLiAuL2R1bXAKKwl0ZXN0IC16ICIkdXNlciIgfHwgZWNobyB1c2VybmFtZT0kdXNlcgorCXRlc3QgLXogIiRwYXNzIiB8fCBlY2hvIHBhc3N3b3JkPSRwYXNzCisJRU9GCisKKwlQQVRIPSIkUFdEOiRQQVRIIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX2ZpbGwgaW52b2tlcyBoZWxwZXInICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBmb28gYmFyIiA8PC1cRU9GCisJLS0KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCXZlcmJhdGltOiBnZXQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlZGVudGlhbF9maWxsIGludm9rZXMgbXVsdGlwbGUgaGVscGVycycgJworCWNoZWNrIGZpbGwgdXNlbGVzcyAidmVyYmF0aW0gZm9vIGJhciIgPDwtXEVPRgorCS0tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwl1c2VsZXNzOiBnZXQKKwl2ZXJiYXRpbTogZ2V0CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWRlbnRpYWxfZmlsbCBzdG9wcyB3aGVuIHdlIGdldCBhIGZ1bGwgcmVzcG9uc2UnICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBvbmUgdHdvIiAidmVyYmF0aW0gdGhyZWUgZm91ciIgPDwtXEVPRgorCS0tCisJdXNlcm5hbWU9b25lCisJcGFzc3dvcmQ9dHdvCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWRlbnRpYWxfZmlsbCBjb250aW51ZXMgdGhyb3VnaCBwYXJ0aWFsIHJlc3BvbnNlJyAnCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gb25lIFwiXCIiICJ2ZXJiYXRpbSB0d28gdGhyZWUiIDw8LVxFT0YKKwktLQorCXVzZXJuYW1lPXR3bworCXBhc3N3b3JkPXRocmVlCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiB1c2VybmFtZT1vbmUKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlZGVudGlhbF9maWxsIHBhc3NlcyBhbG9uZyBtZXRhZGF0YScgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIG9uZSB0d28iIDw8LVxFT0YKKwlwcm90b2NvbD1mdHAKKwlob3N0PWV4YW1wbGUuY29tCisJcGF0aD1mb28uZ2l0CisJLS0KKwlwcm90b2NvbD1mdHAKKwlob3N0PWV4YW1wbGUuY29tCisJcGF0aD1mb28uZ2l0CisJdXNlcm5hbWU9b25lCisJcGFzc3dvcmQ9dHdvCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHByb3RvY29sPWZ0cAorCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJdmVyYmF0aW06IHBhdGg9Zm9vLmdpdAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX2FwcHJvdmUgY2FsbHMgYWxsIGhlbHBlcnMnICcKKwljaGVjayBhcHByb3ZlIHVzZWxlc3MgInZlcmJhdGltIG9uZSB0d28iIDw8LVxFT0YKKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCS0tCisJdXNlbGVzczogc3RvcmUKKwl1c2VsZXNzOiB1c2VybmFtZT1mb28KKwl1c2VsZXNzOiBwYXNzd29yZD1iYXIKKwl2ZXJiYXRpbTogc3RvcmUKKwl2ZXJiYXRpbTogdXNlcm5hbWU9Zm9vCisJdmVyYmF0aW06IHBhc3N3b3JkPWJhcgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgYm90aGVyIHN0b3JpbmcgcGFzc3dvcmQtbGVzcyBjcmVkZW50aWFsJyAnCisJY2hlY2sgYXBwcm92ZSB1c2VsZXNzIDw8LVxFT0YKKwl1c2VybmFtZT1mb28KKwktLQorCS0tCisJRU9GCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlZGVudGlhbF9yZWplY3QgY2FsbHMgYWxsIGhlbHBlcnMnICcKKwljaGVjayByZWplY3QgdXNlbGVzcyAidmVyYmF0aW0gb25lIHR3byIgPDwtXEVPRgorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJLS0KKwl1c2VsZXNzOiBlcmFzZQorCXVzZWxlc3M6IHVzZXJuYW1lPWZvbworCXVzZWxlc3M6IHBhc3N3b3JkPWJhcgorCXZlcmJhdGltOiBlcmFzZQorCXZlcmJhdGltOiB1c2VybmFtZT1mb28KKwl2ZXJiYXRpbTogcGFzc3dvcmQ9YmFyCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZXJuYW1lcyBjYW4gYmUgcHJlc2VydmVkJyAnCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gXCJcIiB0aHJlZSIgPDwtXEVPRgorCXVzZXJuYW1lPW9uZQorCS0tCisJdXNlcm5hbWU9b25lCisJcGFzc3dvcmQ9dGhyZWUKKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogdXNlcm5hbWU9b25lCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZXJuYW1lcyBjYW4gYmUgb3ZlcnJpZGRlbicgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIHR3byB0aHJlZSIgPDwtXEVPRgorCXVzZXJuYW1lPW9uZQorCS0tCisJdXNlcm5hbWU9dHdvCisJcGFzc3dvcmQ9dGhyZWUKKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogdXNlcm5hbWU9b25lCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBib3RoZXIgY29tcGxldGluZyBhbHJlYWR5LWZ1bGwgY3JlZGVudGlhbCcgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIHRocmVlIGZvdXIiIDw8LVxFT0YKKwl1c2VybmFtZT1vbmUKKwlwYXNzd29yZD10d28KKwktLQorCXVzZXJuYW1lPW9uZQorCXBhc3N3b3JkPXR3bworCS0tCisJRU9GCisnCisKKyMgV2UgY2FuJ3QgdGVzdCB0aGUgYmFzaWMgdGVybWluYWwgcGFzc3dvcmQgcHJvbXB0IGhlcmUgYmVjYXVzZQorIyBnZXRwYXNzKCkgdHJpZXMgdG9vIGhhcmQgdG8gZmluZCB0aGUgcmVhbCB0ZXJtaW5hbC4gQnV0IGlmIG91cgorIyBhc2twYXNzIGhlbHBlciBpcyBydW4sIHdlIGtub3cgdGhlIGludGVybmFsIGdldHBhc3MgaXMgd29ya2luZy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGhlbHBlciBsaXN0IGZhbGxzIGJhY2sgdG8gaW50ZXJuYWwgZ2V0cGFzcycgJworCWNoZWNrIGZpbGwgPDwtXEVPRgorCS0tCisJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwktLQorCWFza3Bhc3M6IFVzZXJuYW1lOgorCWFza3Bhc3M6IFBhc3N3b3JkOgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcm5hbCBnZXRwYXNzIGRvZXMgbm90IGFzayBmb3Iga25vd24gdXNlcm5hbWUnICcKKwljaGVjayBmaWxsIDw8LVxFT0YKKwl1c2VybmFtZT1mb28KKwktLQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwktLQorCWFza3Bhc3M6IFBhc3N3b3JkOgorCUVPRgorJworCitIRUxQRVI9IiFmKCkgeworCQljYXQgPi9kZXYvbnVsbAorCQllY2hvIHVzZXJuYW1lPWZvbworCQllY2hvIHBhc3N3b3JkPWJhcgorCX07IGYiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNwZWN0IGNvbmZpZ3VyZWQgY3JlZGVudGlhbHMnICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAiJEhFTFBFUiIgJiYKKwljaGVjayBmaWxsIDw8LVxFT0YKKwktLQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoIGNvbmZpZ3VyZWQgY3JlZGVudGlhbCcgJworCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS5oZWxwZXIgIiRIRUxQRVIiICYmCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJcGF0aD1yZXBvLmdpdAorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IG1hdGNoIGNvbmZpZ3VyZWQgY3JlZGVudGlhbCcgJworCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9mb28uaGVscGVyICIkSEVMUEVSIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1iYXIKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1iYXIKKwl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCS0tCisJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwczovL2JhcidcJyc6CisJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL2Fza3Bhc3MtdXNlcm5hbWVAYmFyJ1wnJzoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCB1c2VybmFtZSBmcm9tIGNvbmZpZycgJworCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS51c2VybmFtZSBmb28gJiYKKwljaGVjayBmaWxsIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwktLQorCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly9mb29AZXhhbXBsZS5jb20nXCcnOgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIHBhdGhzIGNhbiBiZSBwYXJ0IG9mIGNvbnRleHQnICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBmb28gYmFyIiA8PC1cRU9GICYmCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJcGF0aD1mb28uZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9aHR0cHMKKwl2ZXJiYXRpbTogaG9zdD1leGFtcGxlLmNvbQorCUVPRgorCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS51c2VIdHRwUGF0aCB0cnVlICYmCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gZm9vIGJhciIgPDwtXEVPRgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXBhdGg9Zm9vLmdpdAorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJcGF0aD1mb28uZ2l0CisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHByb3RvY29sPWh0dHBzCisJdmVyYmF0aW06IGhvc3Q9ZXhhbXBsZS5jb20KKwl2ZXJiYXRpbTogcGF0aD1mb28uZ2l0CisJRU9GCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDMwMS1jcmVkZW50aWFsLWNhY2hlLnNoIGIvdC90MDMwMS1jcmVkZW50aWFsLWNhY2hlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyYzg0MTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMzAxLWNyZWRlbnRpYWwtY2FjaGUuc2gKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NyZWRlbnRpYWwtY2FjaGUgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWNyZWRlbnRpYWwuc2gKKwordGVzdCAteiAiJE5PX1VOSVhfU09DS0VUUyIgfHwgeworCXNraXBfYWxsPSdza2lwcGluZyBjcmVkZW50aWFsLWNhY2hlIHRlc3RzLCB1bml4IHNvY2tldHMgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK30KKworIyBkb24ndCBsZWF2ZSBhIHN0YWxlIGRhZW1vbiBydW5uaW5nCit0cmFwICdjb2RlPSQ/OyBnaXQgY3JlZGVudGlhbC1jYWNoZSBleGl0OyAoZXhpdCAkY29kZSk7IGRpZScgRVhJVAorCitoZWxwZXJfdGVzdCBjYWNoZQoraGVscGVyX3Rlc3RfdGltZW91dCBjYWNoZSAtLXRpbWVvdXQ9MQorCisjIHdlIGNhbid0IHJlbHkgb24gb3VyICJ0cmFwIiBhYm92ZSB3b3JraW5nIGFmdGVyIHRlc3RfZG9uZSwKKyMgYXMgdGVzdF9kb25lIHdpbGwgZGVsZXRlIHRoZSB0cmFzaCBkaXJlY3RvcnkgY29udGFpbmluZworIyBvdXIgc29ja2V0LCBsZWF2aW5nIHVzIHdpdGggbm8gd2F5IHRvIGFjY2VzcyB0aGUgZGFlbW9uLgorZ2l0IGNyZWRlbnRpYWwtY2FjaGUgZXhpdAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAzMDItY3JlZGVudGlhbC1zdG9yZS5zaCBiL3QvdDAzMDItY3JlZGVudGlhbC1zdG9yZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNjFiNDBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDMwMi1jcmVkZW50aWFsLXN0b3JlLnNoCkBAIC0wLDAgKzEsOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NyZWRlbnRpYWwtc3RvcmUgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWNyZWRlbnRpYWwuc2gKKworaGVscGVyX3Rlc3Qgc3RvcmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMzAzLWNyZWRlbnRpYWwtZXh0ZXJuYWwuc2ggYi90L3QwMzAzLWNyZWRlbnRpYWwtZXh0ZXJuYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjAyOGZkMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAzMDMtY3JlZGVudGlhbC1leHRlcm5hbC5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZXh0ZXJuYWwgY3JlZGVudGlhbCBoZWxwZXIgdGVzdHMKKworVGhpcyBpcyBhIHRvb2wgZm9yIGF1dGhvcnMgb2YgZXh0ZXJuYWwgaGVscGVyIHRvb2xzIHRvIHNhbml0eS1jaGVjawordGhlaXIgaGVscGVycy4gSWYgeW91IGhhdmUgd3JpdHRlbiB0aGUgImdpdC1jcmVkZW50aWFsLWZvbyIgaGVscGVyLAoreW91IGNoZWNrIGl0IHdpdGg6CisKKyAgbWFrZSBHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUj1mb28gdDAzMDMtY3JlZGVudGlhbC1leHRlcm5hbC5zaAorCitUaGlzIGFzc3VtZXMgdGhhdCB5b3VyIGhlbHBlciBpcyBjYXBhYmxlIG9mIGJvdGggc3RvcmluZyBhbmQKK3JldHJpZXZpbmcgY3JlZGVudGlhbHMgKHNvbWUgaGVscGVycyBtYXkgYmUgcmVhZC1vbmx5LCBhbmQgdGhleSB3aWxsCitmYWlsIHRoZXNlIHRlc3RzKS4KKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgaW5kaXZpZHVhbCB0ZXN0cyBkbyBub3QgdmVyaWZ5IGFsbCBvZiB0aGUKK3ByZWNvbmRpdGlvbnMgdGhlbXNlbHZlcywgYnV0IHJhdGhlciBidWlsZCBvbiBlYWNoIG90aGVyLiBBIGZhaWxpbmcKK3Rlc3QgbWVhbnMgdGhhdCB0ZXN0cyBsYXRlciBpbiB0aGUgc2VxdWVuY2UgY2FuIHJldHVybiBmYWxzZSAiT0siCityZXN1bHRzLgorCitJZiB5b3VyIGhlbHBlciBzdXBwb3J0cyB0aW1lLWJhc2VkIGV4cGlyYXRpb24gd2l0aCBhIGNvbmZpZ3VyYWJsZQordGltZW91dCwgeW91IGNhbiB0ZXN0IHRoYXQgZmVhdHVyZSB3aXRoOgorCisgIG1ha2UgR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVI9Zm9vIFwKKyAgICAgICBHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUl9USU1FT1VUPSJmb28gLS10aW1lb3V0PTEiIFwKKyAgICAgICB0MDMwMy1jcmVkZW50aWFsLWV4dGVybmFsLnNoCisKK0lmIHlvdXIgaGVscGVyIHJlcXVpcmVzIGFkZGl0aW9uYWwgc2V0dXAgYmVmb3JlIHRoZSB0ZXN0cyBhcmUgc3RhcnRlZCwKK3lvdSBjYW4gc2V0IEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSX1NFVFVQIHRvIGEgc2VxdWVuY2Ugb2Ygc2hlbGwKK2NvbW1hbmRzLgorJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWNyZWRlbnRpYWwuc2gKKworaWYgdGVzdCAteiAiJEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSIjsgdGhlbgorCXNraXBfYWxsPSJ1c2VkIHRvIHRlc3QgZXh0ZXJuYWwgY3JlZGVudGlhbCBoZWxwZXJzIgorCXRlc3RfZG9uZQorZmkKKwordGVzdCAteiAiJEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSX1NFVFVQIiB8fAorCWV2YWwgIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUl9TRVRVUCIKKworIyBjbGVhbiBiZWZvcmUgdGhlIHRlc3QgaW4gY2FzZSB0aGVyZSBpcyBjcnVmdCBsZWZ0CisjIG92ZXIgZnJvbSBhIHByZXZpb3VzIHJ1biB0aGF0IHdvdWxkIGltcGFjdCByZXN1bHRzCitoZWxwZXJfdGVzdF9jbGVhbiAiJEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSIgorCitoZWxwZXJfdGVzdCAiJEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSIgorCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVJfVElNRU9VVCI7IHRoZW4KKwlzYXkgIiMgc2tpcHBpbmcgdGltZW91dCB0ZXN0cyAoR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVJfVElNRU9VVCBub3Qgc2V0KSIKK2Vsc2UKKwloZWxwZXJfdGVzdF90aW1lb3V0ICIkR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVJfVElNRU9VVCIKK2ZpCisKKyMgY2xlYW4gYWZ0ZXJ3YXJkcyBzbyB0aGF0IHdlIGFyZSBnb29kIGNpdGl6ZW5zCisjIGFuZCBkb24ndCBsZWF2ZSBjcnVmdCBpbiB0aGUgaGVscGVyJ3Mgc3RvcmFnZSwgd2hpY2gKKyMgbWlnaHQgYmUgbG9uZy10ZXJtIHN5c3RlbSBzdG9yYWdlCitoZWxwZXJfdGVzdF9jbGVhbiAiJEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDAtcmVhZC10cmVlLW0tM3dheS5zaCBiL3QvdDEwMDAtcmVhZC10cmVlLW0tM3dheS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYWJjZGQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoCkBAIC0wLDAgKzEsNTI5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1RocmVlIHdheSBtZXJnZSB3aXRoIHJlYWQtdHJlZSAtbQorCitUaGlzIHRlc3QgdHJpZXMgdGhyZWUtd2F5IG1lcmdlIHdpdGggcmVhZC10cmVlIC1tCisKK1RoZXJlIGlzIG9uZSBhbmNlc3RvciAoY2FsbGVkIE8gZm9yIE9yaWdpbmFsKSBhbmQgdHdvIGJyYW5jaGVzIEEKK2FuZCBCIGRlcml2ZWQgZnJvbSBpdC4gIFdlIHdhbnQgdG8gZG8gYSAzLXdheSBtZXJnZSBiZXR3ZWVuIEEgYW5kCitCLCB1c2luZyBPIGFzIHRoZSBjb21tb24gYW5jZXN0b3IuCisKKyAgICBtZXJnZSBBIE8gQgorCitEZWNpc2lvbnMgYXJlIG1hZGUgYnkgY29tcGFyaW5nIGNvbnRlbnRzIG9mIE8sIEEgYW5kIEIgcGF0aG5hbWUKK2J5IHBhdGhuYW1lLiAgVGhlIHJlc3VsdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgZ3VpZGluZworcHJpbmNpcGxlOgorCisgLSBJZiBvbmx5IEEgZG9lcyBzb21ldGhpbmcgdG8gaXQgYW5kIEIgZG9lcyBub3QgdG91Y2ggaXQsIHRha2UKKyAgIHdoYXRldmVyIEEgZG9lcy4KKworIC0gSWYgb25seSBCIGRvZXMgc29tZXRoaW5nIHRvIGl0IGFuZCBBIGRvZXMgbm90IHRvdWNoIGl0LCB0YWtlCisgICB3aGF0ZXZlciBCIGRvZXMuCisKKyAtIElmIGJvdGggQSBhbmQgQiBkb2VzIHNvbWV0aGluZyBidXQgaW4gdGhlIHNhbWUgd2F5LCB0YWtlCisgICB3aGF0ZXZlciB0aGV5IGRvLgorCisgLSBJZiBBIGFuZCBCIGRvZXMgc29tZXRoaW5nIGJ1dCBkaWZmZXJlbnQgdGhpbmdzLCB3ZSBuZWVkIGEKKyAgIDMtd2F5IG1lcmdlOgorCisgICAtIFdlIGNhbm5vdCBkbyBhbnl0aGluZyBhYm91dCB0aGUgZm9sbG93aW5nIGNhc2VzOgorCisgICAgICogTyBkb2VzIG5vdCBoYXZlIGl0LiAgQSBhbmQgQiBib3RoIG11c3QgYmUgYWRkaW5nIHRvIHRoZQorICAgICAgIHNhbWUgcGF0aCBpbmRlcGVuZGVudGx5LgorCisgICAgICogQSBkZWxldGVzIGl0LiAgQiBtdXN0IGJlIG1vZGlmeWluZy4KKworICAgLSBPdGhlcndpc2UsIEEgYW5kIEIgYXJlIG1vZGlmeWluZy4gIFJ1biAzLXdheSBtZXJnZS4KKworRmlyc3QsIHRoZSBjYXNlIG1hdHJpeC4KKworIC0gVmVydGljYWwgYXhpcyBpcyBmb3IgQSdcJydzIGFjdGlvbnMuCisgLSBIb3Jpem9udGFsIGF4aXMgaXMgZm9yIEInXCcncyBhY3Rpb25zLgorCisuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgQSAgICAgICAgQiB8IE5vIEFjdGlvbiAgfCAgIERlbGV0ZSAgIHwgICBNb2RpZnkgICB8ICAgIEFkZCAgICAgfAorfC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS18Cit8IE5vIEFjdGlvbiAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICB8IHNlbGVjdCBPICAgfCBkZWxldGUgICAgIHwgc2VsZWN0IEIgICB8IHNlbGVjdCBCICAgfAorfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8Cit8LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLXwKK3wgRGVsZXRlICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgKioqKioqKioqKiB8ICAgIGNhbiAgICAgfAorfCAgICAgICAgICAgIHwgZGVsZXRlICAgICB8IGRlbGV0ZSAgICAgfCBtZXJnZSAgICAgIHwgICAgbm90ICAgICB8Cit8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgaGFwcGVuICAgIHwKK3wtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tfAorfCBNb2RpZnkgICAgIHwgICAgICAgICAgICB8ICoqKioqKioqKiogfCA/Pz8/Pz8/Pz8/IHwgICAgY2FuICAgICB8Cit8ICAgICAgICAgICAgfCBzZWxlY3QgQSAgIHwgbWVyZ2UgICAgICB8IHNlbGVjdCBBPUIgfCAgICBub3QgICAgIHwKK3wgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgbWVyZ2UgICAgICB8ICBoYXBwZW4gICAgfAorfC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS18Cit8IEFkZCAgICAgICAgfCAgICAgICAgICAgIHwgICAgY2FuICAgICB8ICAgIGNhbiAgICAgfCA/Pz8/Pz8/Pz8/IHwKK3wgICAgICAgICAgICB8IHNlbGVjdCBBICAgfCAgICBub3QgICAgIHwgICAgbm90ICAgICB8IHNlbGVjdCBBPUIgfAorfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICBoYXBwZW4gICAgfCAgaGFwcGVuICAgIHwgbWVyZ2UgICAgICB8CisuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKworSW4gYWRkaXRpb246CisKKyBTUzogYSBzcGVjaWFsIGNhc2Ugb2YgTU0sIHdoZXJlIEEgYW5kIEIgbWFrZXMgdGhlIHNhbWUgbW9kaWZpY2F0aW9uLgorIExMOiBhIHNwZWNpYWwgY2FzZSBvZiBBQSwgd2hlcmUgQSBhbmQgQiBjcmVhdGVzIHRoZSBzYW1lIGZpbGUuCisgVFQ6IGEgc3BlY2lhbCBjYXNlIG9mIE1NLCB3aGVyZSBBIGFuZCBCIG1ha2VzIG1lcmdlYWJsZSBjaGFuZ2VzLgorIERGOiBhIHNwZWNpYWwgY2FzZSwgd2hlcmUgQSBtYWtlcyBhIGRpcmVjdG9yeSBhbmQgQiBtYWtlcyBhIGZpbGUuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmVhZC10cmVlLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUtbS0zd2F5LnNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVHJpdmlhbCAibWFqb3JpdHkgd2hlbiAzIHN0YWdlcyBleGlzdCIgbWVyZ2UgcGx1cyAjMkFMVCwgIzNBTFQKKyMgYW5kICM1QUxUIHRyaXZpYWwgbWVyZ2VzLgorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorMTAwNjQ0IFggMglBQQorMTAwNjQ0IFggMwlBQQorMTAwNjQ0IFggMAlBTgorMTAwNjQ0IFggMQlERAorMTAwNjQ0IFggMwlERgorMTAwNjQ0IFggMglERi9ERgorMTAwNjQ0IFggMQlETQorMTAwNjQ0IFggMwlETQorMTAwNjQ0IFggMQlETgorMTAwNjQ0IFggMwlETgorMTAwNjQ0IFggMAlMTAorMTAwNjQ0IFggMQlNRAorMTAwNjQ0IFggMglNRAorMTAwNjQ0IFggMQlNTQorMTAwNjQ0IFggMglNTQorMTAwNjQ0IFggMwlNTQorMTAwNjQ0IFggMAlNTgorMTAwNjQ0IFggMAlOQQorMTAwNjQ0IFggMQlORAorMTAwNjQ0IFggMglORAorMTAwNjQ0IFggMAlOTQorMTAwNjQ0IFggMAlOTgorMTAwNjQ0IFggMAlTUworMTAwNjQ0IFggMQlUVAorMTAwNjQ0IFggMglUVAorMTAwNjQ0IFggMwlUVAorMTAwNjQ0IFggMglaL0FBCisxMDA2NDQgWCAzCVovQUEKKzEwMDY0NCBYIDAJWi9BTgorMTAwNjQ0IFggMQlaL0RECisxMDA2NDQgWCAxCVovRE0KKzEwMDY0NCBYIDMJWi9ETQorMTAwNjQ0IFggMQlaL0ROCisxMDA2NDQgWCAzCVovRE4KKzEwMDY0NCBYIDEJWi9NRAorMTAwNjQ0IFggMglaL01ECisxMDA2NDQgWCAxCVovTU0KKzEwMDY0NCBYIDIJWi9NTQorMTAwNjQ0IFggMwlaL01NCisxMDA2NDQgWCAwCVovTU4KKzEwMDY0NCBYIDAJWi9OQQorMTAwNjQ0IFggMQlaL05ECisxMDA2NDQgWCAyCVovTkQKKzEwMDY0NCBYIDAJWi9OTQorMTAwNjQ0IFggMAlaL05OCitFT0YKKworY2hlY2tfcmVzdWx0ICgpIHsKKyAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IHNlZCAtZSAncy8gJyIkX3g0MCInIC8gWCAvJyA+Y3VycmVudCAmJgorICAgIHRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKK30KKworIyBUaGlzIGlzIGRvbmUgb24gYW4gZW1wdHkgd29yayBkaXJlY3RvcnksIHdoaWNoIGlzIHRoZSBub3JtYWwKKyMgbWVyZ2UgcGVyc29uIGJlaGF2aW91ci4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICczLXdheSBtZXJnZSB3aXRoIGdpdCByZWFkLXRyZWUgLW0sIGVtcHR5IGNhY2hlJyBcCisgICAgInJtIC1mciBbTkRNQUxUU11bTkRNQUxUU0ZdIFogJiYKKyAgICAgcm0gLmdpdC9pbmRleCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKworIyBUaGlzIHN0YXJ0cyBvdXQgd2l0aCB0aGUgZmlyc3QgaGVhZCwgd2hpY2ggaXMgdGhlIG5vcm1hbAorIyBwYXRjaCBzdWJtaXR0ZXIgYmVoYXZpb3VyLgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzMtd2F5IG1lcmdlIHdpdGggZ2l0IHJlYWQtdHJlZSAtbSwgbWF0Y2ggSCcgXAorICAgICJybSAtZnIgW05ETUFMVFNdW05ETUFMVFNGXSBaICYmCisgICAgIHJtIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZV9BICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtdSAtYSAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKworOiA8PFxFTkRfT0ZfQ0FTRV9UQUJMRQorCitXZSBoYXZlIHNvIGZhciB0ZXN0ZWQgb25seSBlbXB0eSBpbmRleCBhbmQgY2xlYW4tYW5kLW1hdGNoaW5nLUEgaW5kZXgKK2Nhc2Ugd2hpY2ggYXJlIHRyaXZpYWwuICBNYWtlIHN1cmUgaW5kZXggcmVxdWlyZW1lbnRzIGFyZSBhbHNvCitjaGVja2VkLgorCisiZ2l0IHJlYWQtdHJlZSAtbSBPIEEgQiIKKworICAgICBPICAgICAgIEEgICAgICAgQiAgICAgICAgIHJlc3VsdCAgICAgIGluZGV4IHJlcXVpcmVtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAxICBtaXNzaW5nIG1pc3NpbmcgbWlzc2luZyAgIC0gICAgICAgICAgIG11c3Qgbm90IGV4aXN0LgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAyICBtaXNzaW5nIG1pc3NpbmcgZXhpc3RzICAgIHRha2UgQiogICAgIG11c3QgbWF0Y2ggQiwgaWYgZXhpc3RzLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAzICBtaXNzaW5nIGV4aXN0cyAgbWlzc2luZyAgIHRha2UgQSogICAgIG11c3QgbWF0Y2ggQSwgaWYgZXhpc3RzLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICA0ICBtaXNzaW5nIGV4aXN0cyAgQSE9QiAgICAgIG5vIG1lcmdlICAgIG11c3QgbWF0Y2ggQSBhbmQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cC10by1kYXRlLCBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDUgIG1pc3NpbmcgZXhpc3RzICBBPT1CICAgICAgdGFrZSBBICAgICAgbXVzdCBtYXRjaCBBLCBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDYgIGV4aXN0cyAgbWlzc2luZyBtaXNzaW5nICAgcmVtb3ZlICAgICAgbXVzdCBub3QgZXhpc3QuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDcgIGV4aXN0cyAgbWlzc2luZyBPIT1CICAgICAgbm8gbWVyZ2UgICAgbXVzdCBub3QgZXhpc3QuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDggIGV4aXN0cyAgbWlzc2luZyBPPT1CICAgICAgcmVtb3ZlICAgICAgbXVzdCBub3QgZXhpc3QuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDkgIGV4aXN0cyAgTyE9QSAgICBtaXNzaW5nICAgbm8gbWVyZ2UgICAgbXVzdCBtYXRjaCBBIGFuZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwLXRvLWRhdGUsIGlmIGV4aXN0cy4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxMCAgZXhpc3RzICBPPT1BICAgIG1pc3NpbmcgICBubyBtZXJnZSAgICBtdXN0IG1hdGNoIEEKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxMSAgZXhpc3RzICBPIT1BICAgIE8hPUIgICAgICBubyBtZXJnZSAgICBtdXN0IG1hdGNoIEEgYW5kIGJlCisgICAgICAgICAgICAgICAgICAgICBBIT1CICAgICAgICAgICAgICAgICAgdXAtdG8tZGF0ZSwgaWYgZXhpc3RzLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEyICBleGlzdHMgIE8hPUEgICAgTyE9QiAgICAgIHRha2UgQSAgICAgIG11c3QgbWF0Y2ggQSwgaWYgZXhpc3RzLgorICAgICAgICAgICAgICAgICAgICAgQT09QgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEzICBleGlzdHMgIE8hPUEgICAgTz09QiAgICAgIHRha2UgQSAgICAgIG11c3QgbWF0Y2ggQSwgaWYgZXhpc3RzLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDE0ICBleGlzdHMgIE89PUEgICAgTyE9QiAgICAgIHRha2UgQiAgICAgIGlmIGV4aXN0cywgbXVzdCBlaXRoZXIgKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggQSBhbmQgYmUgdXAtdG8tZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAoMikgbWF0Y2ggQi4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxNSAgZXhpc3RzICBPPT1BICAgIE89PUIgICAgICB0YWtlIEIgICAgICBtdXN0IG1hdGNoIEEgaWYgZXhpc3RzLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDE2ICBleGlzdHMgIE89PUEgICAgTz09QiAgICAgIGJhcmYgICAgICAgIG11c3QgbWF0Y2ggQSBpZiBleGlzdHMuCisgICAgICptdWx0aSogaW4gb25lICBpbiBhbm90aGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGU6IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBpbiBjYXNlIDIgYW5kIDMuICBUaGUgdHJlZSBBIG1heSBjb250YWluCitERiAoZmlsZSkgd2hlbiB0cmVlIEIgcmVxdWlyZSBERiB0byBiZSBhIGRpcmVjdG9yeSBieSBoYXZpbmcgREYvREYKKyhmaWxlKS4KKworRU5EX09GX0NBU0VfVEFCTEUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMSAtIG11c3Qgbm90IGhhdmUgYW4gZW50cnkgbm90IGluIEEuJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggWFggJiYKKyAgICAgZWNobyBYWCA+WFggJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBYWCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcyIC0gbXVzdCBtYXRjaCBCIGluICFPICYmICFBICYmIEIgY2FzZS4nIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBOQSAmJgorICAgICBjcCAub3JpZy1CL05BIE5BICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTkEgJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzIgLSBtYXRjaGluZyBCIGFsb25lIGlzIE9LIGluICFPICYmICFBICYmIEIgY2FzZS4nIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBOQSAmJgorICAgICBjcCAub3JpZy1CL05BIE5BICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTkEgJiYKKyAgICAgZWNobyBleHRyYSA+Pk5BICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICczIC0gbXVzdCBtYXRjaCBBIGluICFPICYmIEEgJiYgIUIgY2FzZS4nIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBBTiAmJgorICAgICBjcCAub3JpZy1BL0FOIEFOICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQU4gJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICczIC0gbWF0Y2hpbmcgQSBhbG9uZSBpcyBPSyBpbiAhTyAmJiBBICYmICFCIGNhc2UuJyBcCisgICAgInJtIC1mIC5naXQvaW5kZXggQU4gJiYKKyAgICAgY3AgLm9yaWctQS9BTiBBTiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEFOICYmCisgICAgIGVjaG8gZXh0cmEgPj5BTiAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMyAoZmFpbCkgLSBtdXN0IG1hdGNoIEEgaW4gIU8gJiYgQSAmJiAhQiBjYXNlLicgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IEFOICYmCisgICAgIGNwIC5vcmlnLUEvQU4gQU4gJiYKKyAgICAgZWNobyBleHRyYSA+PkFOICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQU4gJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNCAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gIU8gJiYgQSAmJiBCICYmIEEhPUIgY2FzZS4nIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBBQSAmJgorICAgICBjcCAub3JpZy1BL0FBIEFBICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQUEgJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc0IChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gIU8gJiYgQSAmJiBCICYmIEEhPUIgY2FzZS4nICIKKyAgICAgcm0gLWYgLmdpdC9pbmRleCBBQSAmJgorICAgICBjcCAub3JpZy1BL0FBIEFBICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQUEgJiYKKyAgICAgZWNobyBleHRyYSA+PkFBICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzQgKGZhaWwpIC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiAhTyAmJiBBICYmIEIgJiYgQSE9QiBjYXNlLicgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IEFBICYmCisgICAgIGNwIC5vcmlnLUEvQUEgQUEgJiYKKyAgICAgZWNobyBleHRyYSA+PkFBICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQUEgJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNSAtIG11c3QgbWF0Y2ggaW4gIU8gJiYgQSAmJiBCICYmIEE9PUIgY2FzZS4nIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBMTCAmJgorICAgICBjcCAub3JpZy1BL0xMIExMICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTEwgJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc1IC0gbXVzdCBtYXRjaCBpbiAhTyAmJiBBICYmIEIgJiYgQT09QiBjYXNlLicgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IExMICYmCisgICAgIGNwIC5vcmlnLUEvTEwgTEwgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBMTCAmJgorICAgICBlY2hvIGV4dHJhID4+TEwgJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc1IChmYWlsKSAtIG11c3QgbWF0Y2ggQSBpbiAhTyAmJiBBICYmIEIgJiYgQT09QiBjYXNlLicgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IExMICYmCisgICAgIGNwIC5vcmlnLUEvTEwgTEwgJiYKKyAgICAgZWNobyBleHRyYSA+PkxMICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTEwgJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNiAtIG11c3Qgbm90IGV4aXN0IGluIE8gJiYgIUEgJiYgIUIgY2FzZScgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IEREICYmCisgICAgIGVjaG8gREQgPkREICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgREQgJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNyAtIG11c3Qgbm90IGV4aXN0IGluIE8gJiYgIUEgJiYgQiAmJiBPIT1CIGNhc2UnICIKKyAgICAgcm0gLWYgLmdpdC9pbmRleCBETSAmJgorICAgICBjcCAub3JpZy1CL0RNIERNICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgRE0gJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnOCAtIG11c3Qgbm90IGV4aXN0IGluIE8gJiYgIUEgJiYgQiAmJiBPPT1CIGNhc2UnICIKKyAgICAgcm0gLWYgLmdpdC9pbmRleCBETiAmJgorICAgICBjcCAub3JpZy1CL0ROIEROICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgRE4gJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnOSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmICFCICYmIE8hPUEgY2FzZScgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IE1EICYmCisgICAgIGNwIC5vcmlnLUEvTUQgTUQgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBNRCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzkgKGZhaWwpIC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiBPICYmIEEgJiYgIUIgJiYgTyE9QSBjYXNlJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggTUQgJiYKKyAgICAgY3AgLm9yaWctQS9NRCBNRCAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE1EICYmCisgICAgIGVjaG8gZXh0cmEgPj5NRCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc5IChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmICFCICYmIE8hPUEgY2FzZScgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IE1EICYmCisgICAgIGNwIC5vcmlnLUEvTUQgTUQgJiYKKyAgICAgZWNobyBleHRyYSA+Pk1EICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTUQgJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTAgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiAhQiAmJiBPPT1BIGNhc2UnIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBORCAmJgorICAgICBjcCAub3JpZy1BL05EIE5EICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTkQgJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMCAoZmFpbCkgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiAhQiAmJiBPPT1BIGNhc2UnICIKKyAgICAgcm0gLWYgLmdpdC9pbmRleCBORCAmJgorICAgICBjcCAub3JpZy1BL05EIE5EICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTkQgJiYKKyAgICAgZWNobyBleHRyYSA+Pk5EICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEwIChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmICFCICYmIE89PUEgY2FzZScgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IE5EICYmCisgICAgIGNwIC5vcmlnLUEvTkQgTkQgJiYKKyAgICAgZWNobyBleHRyYSA+Pk5EICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTkQgJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTEgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiBCICYmIE8hPUEgJiYgTyE9QiAmJiBBIT1CIGNhc2UnIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBNTSAmJgorICAgICBjcCAub3JpZy1BL01NIE1NICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTU0gJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMSAoZmFpbCkgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiBCICYmIE8hPUEgJiYgTyE9QiAmJiBBIT1CIGNhc2UnICIKKyAgICAgcm0gLWYgLmdpdC9pbmRleCBNTSAmJgorICAgICBjcCAub3JpZy1BL01NIE1NICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTU0gJiYKKyAgICAgZWNobyBleHRyYSA+Pk1NICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzExIChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmIEIgJiYgTyE9QSAmJiBPIT1CICYmIEEhPUIgY2FzZScgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IE1NICYmCisgICAgIGNwIC5vcmlnLUEvTU0gTU0gJiYKKyAgICAgZWNobyBleHRyYSA+Pk1NICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTU0gJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTIgLSBtdXN0IG1hdGNoIEEgaW4gTyAmJiBBICYmIEIgJiYgTyE9QSAmJiBBPT1CIGNhc2UnIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBTUyAmJgorICAgICBjcCAub3JpZy1BL1NTIFNTICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgU1MgJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMiAtIG11c3QgbWF0Y2ggQSBpbiBPICYmIEEgJiYgQiAmJiBPIT1BICYmIEE9PUIgY2FzZScgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IFNTICYmCisgICAgIGNwIC5vcmlnLUEvU1MgU1MgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBTUyAmJgorICAgICBlY2hvIGV4dHJhID4+U1MgJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMiAoZmFpbCkgLSBtdXN0IG1hdGNoIEEgaW4gTyAmJiBBICYmIEIgJiYgTyE9QSAmJiBBPT1CIGNhc2UnICIKKyAgICAgcm0gLWYgLmdpdC9pbmRleCBTUyAmJgorICAgICBjcCAub3JpZy1BL1NTIFNTICYmCisgICAgIGVjaG8gZXh0cmEgPj5TUyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIFNTICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEzIC0gbXVzdCBtYXRjaCBBIGluIE8gJiYgQSAmJiBCICYmIE8hPUEgJiYgTz09QiBjYXNlJyBcCisgICAgInJtIC1mIC5naXQvaW5kZXggTU4gJiYKKyAgICAgY3AgLm9yaWctQS9NTiBNTiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE1OICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKyAgICAgY2hlY2tfcmVzdWx0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTMgLSBtdXN0IG1hdGNoIEEgaW4gTyAmJiBBICYmIEIgJiYgTyE9QSAmJiBPPT1CIGNhc2UnIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBNTiAmJgorICAgICBjcCAub3JpZy1BL01OIE1OICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTU4gJiYKKyAgICAgZWNobyBleHRyYSA+Pk1OICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKyAgICAgY2hlY2tfcmVzdWx0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTQgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiBCICYmIE89PUEgJiYgTyE9QiBjYXNlJyBcCisgICAgInJtIC1mIC5naXQvaW5kZXggTk0gJiYKKyAgICAgY3AgLm9yaWctQS9OTSBOTSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE5NICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKyAgICAgY2hlY2tfcmVzdWx0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTQgLSBtYXkgbWF0Y2ggQiBpbiBPICYmIEEgJiYgQiAmJiBPPT1BICYmIE8hPUIgY2FzZScgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IE5NICYmCisgICAgIGNwIC5vcmlnLUIvTk0gTk0gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBOTSAmJgorICAgICBlY2hvIGV4dHJhID4+Tk0gJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNCAoZmFpbCkgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiBCICYmIE89PUEgJiYgTyE9QiBjYXNlJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggTk0gJiYKKyAgICAgY3AgLm9yaWctQS9OTSBOTSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE5NICYmCisgICAgIGVjaG8gZXh0cmEgPj5OTSAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNCAoZmFpbCkgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiBCICYmIE89PUEgJiYgTyE9QiBjYXNlJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggTk0gJiYKKyAgICAgY3AgLm9yaWctQS9OTSBOTSAmJgorICAgICBlY2hvIGV4dHJhID4+Tk0gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBOTSAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNSAtIG11c3QgbWF0Y2ggQSBpbiBPICYmIEEgJiYgQiAmJiBPPT1BICYmIE89PUIgY2FzZScgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IE5OICYmCisgICAgIGNwIC5vcmlnLUEvTk4gTk4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBOTiAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE1IC0gbXVzdCBtYXRjaCBBIGluIE8gJiYgQSAmJiBCICYmIE89PUEgJiYgTz09QiBjYXNlJyBcCisgICAgInJtIC1mIC5naXQvaW5kZXggTk4gJiYKKyAgICAgY3AgLm9yaWctQS9OTiBOTiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE5OICYmCisgICAgIGVjaG8gZXh0cmEgPj5OTiAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE1IChmYWlsKSAtIG11c3QgbWF0Y2ggQSBpbiBPICYmIEEgJiYgQiAmJiBPPT1BICYmIE89PUIgY2FzZScgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IE5OICYmCisgICAgIGNwIC5vcmlnLUEvTk4gTk4gJiYKKyAgICAgZWNobyBleHRyYSA+Pk5OICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTk4gJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCisjICMxNgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE2IC0gQSBtYXRjaGVzIGluIG9uZSBhbmQgQiBtYXRjaGVzIGluIGFub3RoZXIuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggRjE2ICYmCisgICAgZWNobyBGMTYgPkYxNiAmJgorICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgRjE2ICYmCisgICAgdHJlZTA9YGdpdCB3cml0ZS10cmVlYCAmJgorICAgIGVjaG8gRTE2ID5GMTYgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IEYxNiAmJgorICAgIHRyZWUxPWBnaXQgd3JpdGUtdHJlZWAgJiYKKyAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlMCAkdHJlZTEgJHRyZWUxICR0cmVlMCAmJgorICAgIGdpdCBscy1maWxlcyAtLXN0YWdlJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDEtcmVhZC10cmVlLW0tMndheS5zaCBiL3QvdDEwMDEtcmVhZC10cmVlLW0tMndheS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hY2FhYjA3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwMS1yZWFkLXRyZWUtbS0yd2F5LnNoCkBAIC0wLDAgKzEsNDEwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1R3byB3YXkgbWVyZ2Ugd2l0aCByZWFkLXRyZWUgLW0gJEggJE0KKworVGhpcyB0ZXN0IHRyaWVzIHR3by13YXkgbWVyZ2UgKGFrYSBmYXN0LWZvcndhcmQgd2l0aCBjYXJyeSBmb3J3YXJkKS4KKworVGhlcmUgaXMgdGhlIGhlYWQgKGNhbGxlZCBIKSBhbmQgYW5vdGhlciBjb21taXQgKGNhbGxlZCBNKSwgd2hpY2ggaXMKK3NpbXBseSBhaGVhZCBvZiBILiAgVGhlIGluZGV4IGFuZCB0aGUgd29yayB0cmVlIGNvbnRhaW5zIGEgc3RhdGUgdGhhdAoraXMgZGVyaXZlZCBmcm9tIEgsIGJ1dCBtYXkgYWxzbyBoYXZlIGxvY2FsIGNoYW5nZXMuICBUaGlzIHRlc3QgY2hlY2tzCithbGwgdGhlIGNvbWJpbmF0aW9ucyBkZXNjcmliZWQgaW4gdGhlIHR3by10cmVlIG1lcmdlICJjYXJyeSBmb3J3YXJkIgorcnVsZXMsIGZvdW5kIGluIDxEb2N1bWVudGF0aW9uL2dpdCByZWFkLXRyZWUudHh0Pi4KKworSW4gdGhlIHRlc3QsIHRoZXNlIHBhdGhzIGFyZSB1c2VkOgorICAgICAgICBib3piYXIgIC0gaW4gSCwgc3RheXMgaW4gTSwgbW9kaWZpZWQgZnJvbSBib3piYXIgdG8gZ251c3RvCisgICAgICAgIGZyb3R6ICAgLSBub3QgaW4gSCBhZGRlZCBpbiBNCisgICAgICAgIG5pdGZvbCAgLSBpbiBILCBzdGF5cyBpbiBNIHVubW9kaWZpZWQKKyAgICAgICAgcmV6cm92ICAtIGluIEgsIGRlbGV0ZWQgaW4gTQorICAgICAgICB5b21pbiAgIC0gbm90IGluIEggbm9yIE0KKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmVhZC10cmVlLnNoCisKK3JlYWRfdHJlZV90d293YXkgKCkgeworICAgIGdpdCByZWFkLXRyZWUgLW0gIiQxIiAiJDIiICYmIGdpdCBscy1maWxlcyAtLXN0YWdlCit9CisKK2NvbXBhcmVfY2hhbmdlICgpIHsKKwlzZWQgLW4gPmN1cnJlbnQgXAorCSAgICAtZSAnL14tLS0gL2Q7IC9eKysrIC9kOyAvXkBAIC9kOycgXAorCSAgICAtZSAncy9eXChbLStdWzAtN11bMC03XVswLTddWzAtN11bMC03XVswLTddXCkgJyIkX3g0MCInIC9cMSBYIC9wJyBcCisJICAgICIkMSIKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50Cit9CisKK2NoZWNrX2NhY2hlX2F0ICgpIHsKKwljbGVhbl9pZl9lbXB0eT1gZ2l0IGRpZmYtZmlsZXMgLS0gIiQxImAKKwljYXNlICIkY2xlYW5faWZfZW1wdHkiIGluCisJJycpICBlY2hvICIkMTogY2xlYW4iIDs7CisJPyopICBlY2hvICIkMTogZGlydHkiIDs7CisJZXNhYworCWNhc2UgIiQyLCRjbGVhbl9pZl9lbXB0eSIgaW4KKwljbGVhbiwpCQk6ICAgICA7OworCWNsZWFuLD8qKQlmYWxzZSA7OworCWRpcnR5LCkJCWZhbHNlIDs7CisJZGlydHksPyopCTogICAgIDs7CisJZXNhYworfQorCitjYXQgPmJvemJhci1vbGQgPDxcRU9GCitUaGlzIGlzIGEgc2FtcGxlIGZpbGUgdXNlZCBpbiB0d28td2F5IGZhc3QtZm9yd2FyZCBtZXJnZQordGVzdHMuICBJdHMgc2Vjb25kIGxpbmUgZW5kcyB3aXRoIGEgbWFnaWMgd29yZCBib3piYXIKK3doaWNoIHdpbGwgYmUgbW9kaWZpZWQgYnkgdGhlIG1lcmdlZCBoZWFkIHRvIGdudXN0by4KK0l0IGhhcyBzb21lIGV4dHJhIGxpbmVzIHNvIHRoYXQgZXh0ZXJuYWwgdG9vbHMgY2FuCitzdWNjZXNzZnVsbHkgbWVyZ2UgaW5kZXBlbmRlbnQgY2hhbmdlcyBtYWRlIHRvIGxhdGVyCitsaW5lcyAoc3VjaCBhcyB0aGlzIG9uZSksIGF2b2lkaW5nIGxpbmUgY29uZmxpY3RzLgorRU9GCisKK3NlZCAtZSAncy9ib3piYXIvZ251c3RvIChlYXJsaWVyIGJvemJhcikvJyBib3piYXItb2xkID5ib3piYXItbmV3CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgIHNldHVwIFwKKyAgICAnZWNobyBmcm90eiA+ZnJvdHogJiYKKyAgICAgZWNobyBuaXRmb2wgPm5pdGZvbCAmJgorICAgICBjYXQgYm96YmFyLW9sZCA+Ym96YmFyICYmCisgICAgIGVjaG8gcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZWNobyB5b21pbiA+eW9taW4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuaXRmb2wgYm96YmFyIHJlenJvdiAmJgorICAgICB0cmVlSD1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gdHJlZUggJHRyZWVIICYmCisgICAgIGdpdCBscy10cmVlICR0cmVlSCAmJgorCisgICAgIGNhdCBib3piYXItbmV3ID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiBib3piYXIgLS1mb3JjZS1yZW1vdmUgcmV6cm92ICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID5NLm91dCAmJgorICAgICB0cmVlTT1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gdHJlZU0gJHRyZWVNICYmCisgICAgIGdpdCBscy10cmVlICR0cmVlTSAmJgorICAgICBnaXQgZGlmZi10cmVlICR0cmVlSCAkdHJlZU0nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxLCAyLCAzIC0gbm8gY2FycnkgZm9yd2FyZCcgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MS0zLm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCAxLTMub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBkaXJ0eSAmJgorICAgICBjaGVja19jYWNoZV9hdCBmcm90eiBkaXJ0eSAmJgorICAgICBjaGVja19jYWNoZV9hdCBuaXRmb2wgZGlydHknCisKK2VjaG8gJysxMDA2NDQgWCAwCXlvbWluJyA+ZXhwZWN0ZWQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzQgLSBjYXJyeSBmb3J3YXJkIGxvY2FsIGFkZGl0aW9uLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHlvbWluICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+NC5vdXQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCBNLm91dCA0Lm91dCA+NGRpZmYub3V0ICYmCisgICAgIGNvbXBhcmVfY2hhbmdlIDRkaWZmLm91dCBleHBlY3RlZCAmJgorICAgICBjaGVja19jYWNoZV9hdCB5b21pbiBjbGVhbicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzUgLSBjYXJyeSBmb3J3YXJkIGxvY2FsIGFkZGl0aW9uLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBlY2hvIHlvbWluID55b21pbiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHlvbWluICYmCisgICAgIGVjaG8geW9taW4geW9taW4gPnlvbWluICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+NS5vdXQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCBNLm91dCA1Lm91dCA+NWRpZmYub3V0ICYmCisgICAgIGNvbXBhcmVfY2hhbmdlIDVkaWZmLm91dCBleHBlY3RlZCAmJgorICAgICBjaGVja19jYWNoZV9hdCB5b21pbiBkaXJ0eScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzYgLSBsb2NhbCBhZGRpdGlvbiBhbHJlYWR5IGhhcyB0aGUgc2FtZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjYub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDYub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGZyb3R6IGNsZWFuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNyAtIGxvY2FsIGFkZGl0aW9uIGFscmVhZHkgaGFzIHRoZSBzYW1lLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBlY2hvIGZyb3R6ID5mcm90eiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZyb3R6ICYmCisgICAgIGVjaG8gZnJvdHogZnJvdHogPmZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+Ny5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgNy5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgZnJvdHogZGlydHknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc4IC0gY29uZmxpY3RpbmcgYWRkaXRpb24uJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8gZnJvdHogZnJvdHogPmZyb3R6ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogJiYKKyAgICAgaWYgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnOSAtIGNvbmZsaWN0aW5nIGFkZGl0aW9uLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBlY2hvIGZyb3R6IGZyb3R6ID5mcm90eiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZyb3R6ICYmCisgICAgIGVjaG8gZnJvdHogPmZyb3R6ICYmCisgICAgIGlmIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEwIC0gcGF0aCByZW1vdmVkLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBlY2hvIHJlenJvdiA+cmV6cm92ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTAub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDEwLm91dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzExIC0gZGlydHkgcGF0aCByZW1vdmVkLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBlY2hvIHJlenJvdiA+cmV6cm92ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisgICAgIGVjaG8gcmV6cm92IHJlenJvdiA+cmV6cm92ICYmCisgICAgIGlmIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEyIC0gdW5tYXRjaGluZyBsb2NhbCBjaGFuZ2VzIGJlaW5nIHJlbW92ZWQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8gcmV6cm92IHJlenJvdiA+cmV6cm92ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisgICAgIGlmIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEzIC0gdW5tYXRjaGluZyBsb2NhbCBjaGFuZ2VzIGJlaW5nIHJlbW92ZWQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8gcmV6cm92IHJlenJvdiA+cmV6cm92ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisgICAgIGVjaG8gcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgaWYgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCistMTAwNjQ0IFggMAluaXRmb2wKKysxMDA2NDQgWCAwCW5pdGZvbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNCAtIHVuY2hhbmdlZCBpbiB0d28gaGVhZHMuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCA+bml0Zm9sICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTQub3V0ICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggTS5vdXQgMTQub3V0ID4xNGRpZmYub3V0ICYmCisgICAgIGNvbXBhcmVfY2hhbmdlIDE0ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgbml0Zm9sIGNsZWFuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTUgLSB1bmNoYW5nZWQgaW4gdHdvIGhlYWRzLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBlY2hvIG5pdGZvbCBuaXRmb2wgPm5pdGZvbCAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG5pdGZvbCAmJgorICAgICBlY2hvIG5pdGZvbCBuaXRmb2wgbml0Zm9sID5uaXRmb2wgJiYKKyAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xNS5vdXQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCBNLm91dCAxNS5vdXQgPjE1ZGlmZi5vdXQgJiYKKyAgICAgY29tcGFyZV9jaGFuZ2UgMTVkaWZmLm91dCBleHBlY3RlZCAmJgorICAgICBjaGVja19jYWNoZV9hdCBuaXRmb2wgZGlydHknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNiAtIGNvbmZsaWN0aW5nIGxvY2FsIGNoYW5nZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKyAgICAgZWNobyBib3piYXIgYm96YmFyID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgaWYgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTcgLSBjb25mbGljdGluZyBsb2NhbCBjaGFuZ2UuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8gYm96YmFyIGJvemJhciA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisgICAgIGVjaG8gYm96YmFyIGJvemJhciBib3piYXIgPmJvemJhciAmJgorICAgICBpZiByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxOCAtIGxvY2FsIGNoYW5nZSBhbHJlYWR5IGhhdmluZyBhIGdvb2QgcmVzdWx0LicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBjYXQgYm96YmFyLW5ldyA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTgub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDE4Lm91dCAmJgorICAgICBjaGVja19jYWNoZV9hdCBib3piYXIgY2xlYW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxOSAtIGxvY2FsIGNoYW5nZSBhbHJlYWR5IGhhdmluZyBhIGdvb2QgcmVzdWx0LCBmdXJ0aGVyIG1vZGlmaWVkLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBjYXQgYm96YmFyLW5ldyA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisgICAgIGVjaG8gZ251c3RvIGdudXN0byA+Ym96YmFyICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTkub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDE5Lm91dCAmJgorICAgICBjaGVja19jYWNoZV9hdCBib3piYXIgZGlydHknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcyMCAtIG5vIGxvY2FsIGNoYW5nZSwgdXNlIG5ldyB0cmVlLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBjYXQgYm96YmFyLW9sZCA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MjAub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDIwLm91dCAmJgorICAgICBjaGVja19jYWNoZV9hdCBib3piYXIgZGlydHknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcyMSAtIG5vIGxvY2FsIGNoYW5nZSwgZGlydHkgY2FjaGUuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGNhdCBib3piYXItb2xkID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgZWNobyBnbnVzdG8gZ251c3RvID5ib3piYXIgJiYKKyAgICAgaWYgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCisjIFRoaXMgZmFpbHMgd2l0aCBzdHJhaWdodCB0d28td2F5IGZhc3QtZm9yd2FyZC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcyMiAtIGxvY2FsIGNoYW5nZSBjYWNoZSB1cGRhdGVkLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBzZWQgLWUgInMvc3VjaCBhcy9TVUNIIEFTLyIgYm96YmFyLW9sZCA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisgICAgIGlmIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKworIyBBbHNvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IGJyZWFrIERGIHZzIERGL0RGIGNhc2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnREYgdnMgREYvREYgY2FzZSBzZXR1cC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICBlY2hvIERGID5ERiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGICYmCisgICAgIHRyZWVERj1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gdHJlZURGICR0cmVlREYgJiYKKyAgICAgZ2l0IGxzLXRyZWUgJHRyZWVERiAmJgorCisgICAgIHJtIC1mIERGICYmCisgICAgIG1rZGlyIERGICYmCisgICAgIGVjaG8gREYvREYgPkRGL0RGICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgREYgREYvREYgJiYKKyAgICAgdHJlZURGREY9YGdpdCB3cml0ZS10cmVlYCAmJgorICAgICBlY2hvIHRyZWVERkRGICR0cmVlREZERiAmJgorICAgICBnaXQgbHMtdHJlZSAkdHJlZURGREYgJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPkRGREYub3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnREYgdnMgREYvREYgY2FzZSB0ZXN0LicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJtIC1mciBERiAmJgorICAgICBlY2hvIERGID5ERiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVERiAkdHJlZURGREYgJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPkRGREZjaGVjay5vdXQgJiYKKyAgICAgdGVzdF9jbXAgREZERi5vdXQgREZERmNoZWNrLm91dCAmJgorICAgICBjaGVja19jYWNoZV9hdCBERi9ERiBkaXJ0eSAmJgorICAgICA6JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYS9iICh1bnRyYWNrZWQpIHZzIGEgY2FzZSBzZXR1cC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICA6ID5hICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSAmJgorICAgICB0cmVlTT1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gdHJlZU0gJHRyZWVNICYmCisgICAgIGdpdCBscy10cmVlICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+dHJlZU0ub3V0ICYmCisKKyAgICAgcm0gLWYgYSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGEgJiYKKyAgICAgbWtkaXIgYSAmJgorICAgICA6ID5hL2IgJiYKKyAgICAgdHJlZUg9YGdpdCB3cml0ZS10cmVlYCAmJgorICAgICBlY2hvIHRyZWVIICR0cmVlSCAmJgorICAgICBnaXQgbHMtdHJlZSAkdHJlZUgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhL2IgKHVudHJhY2tlZCkgdnMgYSwgcGx1cyBjL2QgY2FzZSB0ZXN0LicgXAorICAgICdyZWFkX3RyZWVfdV9tdXN0X2ZhaWwgLXUgLW0gIiR0cmVlSCIgIiR0cmVlTSIgJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgJiYKKyAgICAgdGVzdCAtZiBhL2InCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhL2IgdnMgYSwgcGx1cyBjL2QgY2FzZSBzZXR1cC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICBybSAtZnIgYSAmJgorICAgICA6ID5hICYmCisgICAgIG1rZGlyIGMgJiYKKyAgICAgOiA+Yy9kICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSBjL2QgJiYKKyAgICAgdHJlZU09YGdpdCB3cml0ZS10cmVlYCAmJgorICAgICBlY2hvIHRyZWVNICR0cmVlTSAmJgorICAgICBnaXQgbHMtdHJlZSAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPnRyZWVNLm91dCAmJgorCisgICAgIHJtIC1mIGEgJiYKKyAgICAgbWtkaXIgYSAmJgorICAgICA6ID5hL2IgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBhIGEvYiAmJgorICAgICB0cmVlSD1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gdHJlZUggJHRyZWVIICYmCisgICAgIGdpdCBscy10cmVlICR0cmVlSCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2EvYiB2cyBhLCBwbHVzIGMvZCBjYXNlIHRlc3QuJyBcCisgICAgJ3JlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtdSAtbSAiJHRyZWVIIiAiJHRyZWVNIiAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IHRlZSA+dHJlZU1jaGVjay5vdXQgJiYKKyAgICAgdGVzdF9jbXAgdHJlZU0ub3V0IHRyZWVNY2hlY2sub3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctbSByZWZlcmVuY2VzIHRoZSBjb3JyZWN0IG1vZGlmaWVkIHRyZWUnICcKKwllY2hvID5maWxlLWEgJiYKKwllY2hvID5maWxlLWIgJiYKKwlnaXQgYWRkIGZpbGUtYSBmaWxlLWIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0ZXN0IGZvciBjb3JyZWN0IG1vZGlmaWVkIHRyZWUiICYmCisJZ2l0IGJyYW5jaCBpbml0aWFsLW1vZCAmJgorCWVjaG8gYiA+ZmlsZS1iICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQiIgJiYKKwllY2hvIGEgPmZpbGUtYSAmJgorCWdpdCBhZGQgZmlsZS1hICYmCisJZ2l0IGxzLXRyZWUgJChnaXQgd3JpdGUtdHJlZSkgZmlsZS1hID5leHBlY3QgJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tIEhFQUQgaW5pdGlhbC1tb2QgJiYKKwlnaXQgbHMtdHJlZSAkKGdpdCB3cml0ZS10cmVlKSBmaWxlLWEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDAyLXJlYWQtdHJlZS1tLXUtMndheS5zaCBiL3QvdDEwMDItcmVhZC10cmVlLW0tdS0yd2F5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4NDc3MDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDAyLXJlYWQtdHJlZS1tLXUtMndheS5zaApAQCAtMCwwICsxLDM0NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUd28gd2F5IG1lcmdlIHdpdGggcmVhZC10cmVlIC1tIC11ICRIICRNCisKK1RoaXMgaXMgaWRlbnRpY2FsIHRvIHQxMDAxLCBidXQgdXNlcyAtdSB0byB1cGRhdGUgdGhlIHdvcmsgdHJlZSBhcyB3ZWxsLgorCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS5zaAorCitjb21wYXJlX2NoYW5nZSAoKSB7CisJc2VkID5jdXJyZW50IFwKKwkgICAgLWUgJzF7L15kaWZmIC0tZ2l0IC9kO30nIFwKKwkgICAgLWUgJzJ7L15pbmRleCAvZDt9JyBcCisJICAgIC1lICcvXi0tLSAvZDsgL14rKysgL2Q7IC9eQEAgL2Q7JyBcCisJICAgIC1lICdzL15cKC5bMC03XVswLTddWzAtN11bMC03XVswLTddWzAtN11cKSAnIiRfeDQwIicgL1wxIFggLycgIiQxIgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKK30KKworY2hlY2tfY2FjaGVfYXQgKCkgeworCWNsZWFuX2lmX2VtcHR5PWBnaXQgZGlmZi1maWxlcyAtLSAiJDEiYAorCWNhc2UgIiRjbGVhbl9pZl9lbXB0eSIgaW4KKwknJykgIGVjaG8gIiQxOiBjbGVhbiIgOzsKKwk/KikgIGVjaG8gIiQxOiBkaXJ0eSIgOzsKKwllc2FjCisJY2FzZSAiJDIsJGNsZWFuX2lmX2VtcHR5IiBpbgorCWNsZWFuLCkJCTogICAgIDs7CisJY2xlYW4sPyopCWZhbHNlIDs7CisJZGlydHksKQkJZmFsc2UgOzsKKwlkaXJ0eSw/KikJOiAgICAgOzsKKwllc2FjCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgIHNldHVwIFwKKyAgICAnZWNobyBmcm90eiA+ZnJvdHogJiYKKyAgICAgZWNobyBuaXRmb2wgPm5pdGZvbCAmJgorICAgICBlY2hvIGJvemJhciA+Ym96YmFyICYmCisgICAgIGVjaG8gcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuaXRmb2wgYm96YmFyIHJlenJvdiAmJgorICAgICB0cmVlSD1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gdHJlZUggJHRyZWVIICYmCisgICAgIGdpdCBscy10cmVlICR0cmVlSCAmJgorCisgICAgIGVjaG8gZ251c3RvID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiBib3piYXIgLS1mb3JjZS1yZW1vdmUgcmV6cm92ICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID5NLm91dCAmJgorICAgICB0cmVlTT1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gdHJlZU0gJHRyZWVNICYmCisgICAgIGdpdCBscy10cmVlICR0cmVlTSAmJgorICAgICBzdW0gYm96YmFyIGZyb3R6IG5pdGZvbCA+TS5zdW0gJiYKKyAgICAgZ2l0IGRpZmYtdHJlZSAkdHJlZUggJHRyZWVNJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMSwgMiwgMyAtIG5vIGNhcnJ5IGZvcndhcmQnIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjEtMy5vdXQgJiYKKyAgICAgY21wIE0ub3V0IDEtMy5vdXQgJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiBuaXRmb2wgPmFjdHVhbDMuc3VtICYmCisgICAgIGNtcCBNLnN1bSBhY3R1YWwzLnN1bSAmJgorICAgICBjaGVja19jYWNoZV9hdCBib3piYXIgY2xlYW4gJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgZnJvdHogY2xlYW4gJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgbml0Zm9sIGNsZWFuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNCAtIGNhcnJ5IGZvcndhcmQgbG9jYWwgYWRkaXRpb24uJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gIisxMDA2NDQgWCAwCXlvbWluIiA+ZXhwZWN0ZWQgJiYKKyAgICAgZWNobyB5b21pbiA+eW9taW4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB5b21pbiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+NC5vdXQgfHwgcmV0dXJuIDEKKyAgICAgZ2l0IGRpZmYgLVUwIC0tbm8taW5kZXggTS5vdXQgNC5vdXQgPjRkaWZmLm91dAorICAgICBjb21wYXJlX2NoYW5nZSA0ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgeW9taW4gY2xlYW4gJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiBuaXRmb2wgPmFjdHVhbDQuc3VtICYmCisgICAgIGNtcCBNLnN1bSBhY3R1YWw0LnN1bSAmJgorICAgICBlY2hvIHlvbWluID55b21pbjEgJiYKKyAgICAgZGlmZiB5b21pbiB5b21pbjEgJiYKKyAgICAgcm0gLWYgeW9taW4xJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNSAtIGNhcnJ5IGZvcndhcmQgbG9jYWwgYWRkaXRpb24uJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJiYKKyAgICAgZWNobyB5b21pbiA+eW9taW4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB5b21pbiAmJgorICAgICBlY2hvIHlvbWluIHlvbWluID55b21pbiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+NS5vdXQgfHwgcmV0dXJuIDEKKyAgICAgZ2l0IGRpZmYgLVUwIC0tbm8taW5kZXggTS5vdXQgNS5vdXQgPjVkaWZmLm91dAorICAgICBjb21wYXJlX2NoYW5nZSA1ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgeW9taW4gZGlydHkgJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiBuaXRmb2wgPmFjdHVhbDUuc3VtICYmCisgICAgIGNtcCBNLnN1bSBhY3R1YWw1LnN1bSAmJgorICAgICA6IGRpcnR5IGluZGV4IHNob3VsZCBoYXZlIHByZXZlbnRlZCAtdSBmcm9tIGNoZWNraW5nIGl0IG91dC4gJiYKKyAgICAgZWNobyB5b21pbiB5b21pbiA+eW9taW4xICYmCisgICAgIGRpZmYgeW9taW4geW9taW4xICYmCisgICAgIHJtIC1mIHlvbWluMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzYgLSBsb2NhbCBhZGRpdGlvbiBhbHJlYWR5IGhhcyB0aGUgc2FtZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBmcm90eiA+ZnJvdHogJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+Ni5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgNi5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgZnJvdHogY2xlYW4gJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiBuaXRmb2wgPmFjdHVhbDMuc3VtICYmCisgICAgIGNtcCBNLnN1bSBhY3R1YWwzLnN1bSAmJgorICAgICBlY2hvIGZyb3R6ID5mcm90ejEgJiYKKyAgICAgZGlmZiBmcm90eiBmcm90ejEgJiYKKyAgICAgcm0gLWYgZnJvdHoxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNyAtIGxvY2FsIGFkZGl0aW9uIGFscmVhZHkgaGFzIHRoZSBzYW1lLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIGZyb3R6ID5mcm90eiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZyb3R6ICYmCisgICAgIGVjaG8gZnJvdHogZnJvdHogPmZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID43Lm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCA3Lm91dCAmJgorICAgICBjaGVja19jYWNoZV9hdCBmcm90eiBkaXJ0eSAmJgorICAgICBzdW0gYm96YmFyIGZyb3R6IG5pdGZvbCA+YWN0dWFsNy5zdW0gJiYKKyAgICAgaWYgY21wIE0uc3VtIGFjdHVhbDcuc3VtOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpICYmCisgICAgIDogZGlydHkgaW5kZXggc2hvdWxkIGhhdmUgcHJldmVudGVkIC11IGZyb20gY2hlY2tpbmcgaXQgb3V0LiAmJgorICAgICBlY2hvIGZyb3R6IGZyb3R6ID5mcm90ejEgJiYKKyAgICAgZGlmZiBmcm90eiBmcm90ejEgJiYKKyAgICAgcm0gLWYgZnJvdHoxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnOCAtIGNvbmZsaWN0aW5nIGFkZGl0aW9uLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIGZyb3R6IGZyb3R6ID5mcm90eiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZyb3R6ICYmCisgICAgIGlmIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnOSAtIGNvbmZsaWN0aW5nIGFkZGl0aW9uLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIGZyb3R6IGZyb3R6ID5mcm90eiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZyb3R6ICYmCisgICAgIGVjaG8gZnJvdHogPmZyb3R6ICYmCisgICAgIGlmIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTAgLSBwYXRoIHJlbW92ZWQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjEwLm91dCAmJgorICAgICBjbXAgTS5vdXQgMTAub3V0ICYmCisgICAgIHN1bSBib3piYXIgZnJvdHogbml0Zm9sID5hY3R1YWwxMC5zdW0gJiYKKyAgICAgY21wIE0uc3VtIGFjdHVhbDEwLnN1bScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzExIC0gZGlydHkgcGF0aCByZW1vdmVkLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIHJlenJvdiA+cmV6cm92ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisgICAgIGVjaG8gcmV6cm92IHJlenJvdiA+cmV6cm92ICYmCisgICAgIGlmIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTIgLSB1bm1hdGNoaW5nIGxvY2FsIGNoYW5nZXMgYmVpbmcgcmVtb3ZlZC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyByZXpyb3YgcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKyAgICAgaWYgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMyAtIHVubWF0Y2hpbmcgbG9jYWwgY2hhbmdlcyBiZWluZyByZW1vdmVkLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIHJlenJvdiByZXpyb3YgPnJlenJvdiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHJlenJvdiAmJgorICAgICBlY2hvIHJlenJvdiA+cmV6cm92ICYmCisgICAgIGlmIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCistMTAwNjQ0IFggMAluaXRmb2wKKysxMDA2NDQgWCAwCW5pdGZvbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNCAtIHVuY2hhbmdlZCBpbiB0d28gaGVhZHMuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCA+bml0Zm9sICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xNC5vdXQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLVUwIC0tbm8taW5kZXggTS5vdXQgMTQub3V0ID4xNGRpZmYub3V0ICYmCisgICAgIGNvbXBhcmVfY2hhbmdlIDE0ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiA+YWN0dWFsMTQuc3VtICYmCisgICAgIGdyZXAgLXYgbml0Zm9sIE0uc3VtID4gZXhwZWN0ZWQxNC5zdW0gJiYKKyAgICAgY21wIGV4cGVjdGVkMTQuc3VtIGFjdHVhbDE0LnN1bSAmJgorICAgICBzdW0gYm96YmFyIGZyb3R6IG5pdGZvbCA+YWN0dWFsMTRhLnN1bSAmJgorICAgICBpZiBjbXAgTS5zdW0gYWN0dWFsMTRhLnN1bTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaSAmJgorICAgICBjaGVja19jYWNoZV9hdCBuaXRmb2wgY2xlYW4gJiYKKyAgICAgZWNobyBuaXRmb2wgbml0Zm9sID5uaXRmb2wxICYmCisgICAgIGRpZmYgbml0Zm9sIG5pdGZvbDEgJiYKKyAgICAgcm0gLWYgbml0Zm9sMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE1IC0gdW5jaGFuZ2VkIGluIHR3byBoZWFkcy4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBuaXRmb2wgbml0Zm9sID5uaXRmb2wgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuaXRmb2wgJiYKKyAgICAgZWNobyBuaXRmb2wgbml0Zm9sIG5pdGZvbCA+bml0Zm9sICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xNS5vdXQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLVUwIC0tbm8taW5kZXggTS5vdXQgMTUub3V0ID4xNWRpZmYub3V0ICYmCisgICAgIGNvbXBhcmVfY2hhbmdlIDE1ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgbml0Zm9sIGRpcnR5ICYmCisgICAgIHN1bSBib3piYXIgZnJvdHogPmFjdHVhbDE1LnN1bSAmJgorICAgICBncmVwIC12IG5pdGZvbCBNLnN1bSA+IGV4cGVjdGVkMTUuc3VtICYmCisgICAgIGNtcCBleHBlY3RlZDE1LnN1bSBhY3R1YWwxNS5zdW0gJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiBuaXRmb2wgPmFjdHVhbDE1YS5zdW0gJiYKKyAgICAgaWYgY21wIE0uc3VtIGFjdHVhbDE1YS5zdW07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmkgJiYKKyAgICAgZWNobyBuaXRmb2wgbml0Zm9sIG5pdGZvbCA+bml0Zm9sMSAmJgorICAgICBkaWZmIG5pdGZvbCBuaXRmb2wxICYmCisgICAgIHJtIC1mIG5pdGZvbDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNiAtIGNvbmZsaWN0aW5nIGxvY2FsIGNoYW5nZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBib3piYXIgYm96YmFyID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgaWYgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNyAtIGNvbmZsaWN0aW5nIGxvY2FsIGNoYW5nZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBib3piYXIgYm96YmFyID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgZWNobyBib3piYXIgYm96YmFyIGJvemJhciA+Ym96YmFyICYmCisgICAgIGlmIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTggLSBsb2NhbCBjaGFuZ2UgYWxyZWFkeSBoYXZpbmcgYSBnb29kIHJlc3VsdC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBnbnVzdG8gPmJvemJhciAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTgub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDE4Lm91dCAmJgorICAgICBjaGVja19jYWNoZV9hdCBib3piYXIgY2xlYW4gJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiBuaXRmb2wgPmFjdHVhbDE4LnN1bSAmJgorICAgICBjbXAgTS5zdW0gYWN0dWFsMTguc3VtJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTkgLSBsb2NhbCBjaGFuZ2UgYWxyZWFkeSBoYXZpbmcgYSBnb29kIHJlc3VsdCwgZnVydGhlciBtb2RpZmllZC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBnbnVzdG8gPmJvemJhciAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorICAgICBlY2hvIGdudXN0byBnbnVzdG8gPmJvemJhciAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTkub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDE5Lm91dCAmJgorICAgICBjaGVja19jYWNoZV9hdCBib3piYXIgZGlydHkgJiYKKyAgICAgc3VtIGZyb3R6IG5pdGZvbCA+YWN0dWFsMTkuc3VtICYmCisgICAgIGdyZXAgLXYgYm96YmFyICBNLnN1bSA+IGV4cGVjdGVkMTkuc3VtICYmCisgICAgIGNtcCBleHBlY3RlZDE5LnN1bSBhY3R1YWwxOS5zdW0gJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiBuaXRmb2wgPmFjdHVhbDE5YS5zdW0gJiYKKyAgICAgaWYgY21wIE0uc3VtIGFjdHVhbDE5YS5zdW07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmkgJiYKKyAgICAgZWNobyBnbnVzdG8gZ251c3RvID5ib3piYXIxICYmCisgICAgIGRpZmYgYm96YmFyIGJvemJhcjEgJiYKKyAgICAgcm0gLWYgYm96YmFyMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzIwIC0gbm8gbG9jYWwgY2hhbmdlLCB1c2UgbmV3IHRyZWUuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gYm96YmFyID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjIwLm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCAyMC5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgYm96YmFyIGNsZWFuICYmCisgICAgIHN1bSBib3piYXIgZnJvdHogbml0Zm9sID5hY3R1YWwyMC5zdW0gJiYKKyAgICAgY21wIE0uc3VtIGFjdHVhbDIwLnN1bScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzIxIC0gbm8gbG9jYWwgY2hhbmdlLCBkaXJ0eSBjYWNoZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBib3piYXIgPmJvemJhciAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorICAgICBlY2hvIGdudXN0byBnbnVzdG8gPmJvemJhciAmJgorICAgICBpZiByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKworIyBBbHNvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IGJyZWFrIERGIHZzIERGL0RGIGNhc2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnREYgdnMgREYvREYgY2FzZSBzZXR1cC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICBlY2hvIERGID5ERiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGICYmCisgICAgIHRyZWVERj1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gdHJlZURGICR0cmVlREYgJiYKKyAgICAgZ2l0IGxzLXRyZWUgJHRyZWVERiAmJgorCisgICAgIHJtIC1mIERGICYmCisgICAgIG1rZGlyIERGICYmCisgICAgIGVjaG8gREYvREYgPkRGL0RGICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgREYgREYvREYgJiYKKyAgICAgdHJlZURGREY9YGdpdCB3cml0ZS10cmVlYCAmJgorICAgICBlY2hvIHRyZWVERkRGICR0cmVlREZERiAmJgorICAgICBnaXQgbHMtdHJlZSAkdHJlZURGREYgJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPkRGREYub3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnREYgdnMgREYvREYgY2FzZSB0ZXN0LicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJtIC1mciBERiAmJgorICAgICBlY2hvIERGID5ERiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZURGICR0cmVlREZERiAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+REZERmNoZWNrLm91dCAmJgorICAgICB0ZXN0X2NtcCBERkRGLm91dCBERkRGY2hlY2sub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IERGL0RGIGNsZWFuJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDMtcmVhZC10cmVlLXByZWZpeC5zaCBiL3QvdDEwMDMtcmVhZC10cmVlLXByZWZpeC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YzZkNjdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwMy1yZWFkLXRyZWUtcHJlZml4LnNoCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYWQtdHJlZSAtLXByZWZpeCB0ZXN0LgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBvbmUgJiYKKwl0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKKwllY2hvIHRyZWUgaXMgJHRyZWUKKycKKworZWNobyAnb25lCit0d28vb25lJyA+ZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSAtLXByZWZpeCcgJworCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9dHdvLyAkdHJlZSAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDA0LXJlYWQtdHJlZS1tLXUtd2Yuc2ggYi90L3QxMDA0LXJlYWQtdHJlZS1tLXUtd2Yuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjNhZTdkNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDQtcmVhZC10cmVlLW0tdS13Zi5zaApAQCAtMCwwICsxLDI0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYWQtdHJlZSAtbSAtdSBjaGVja3Mgd29ya2luZyB0cmVlIGZpbGVzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS5zaAorCisjIHR3by10cmVlIHRlc3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvLXdheSBzZXR1cCcgJworCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyA+ZmlsZTEgZmlsZSBvbmUgJiYKKwllY2hvID5maWxlMiBmaWxlIHR3byAmJgorCWVjaG8gPnN1YmRpci9maWxlMSBmaWxlIG9uZSBpbiBzdWJkaXJlY3RvcnkgJiYKKwllY2hvID5zdWJkaXIvZmlsZTIgZmlsZSB0d28gaW4gc3ViZGlyZWN0b3J5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMSBmaWxlMiBzdWJkaXIvZmlsZTEgc3ViZGlyL2ZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwlnaXQgdGFnIC1mIGJyYW5jaC1wb2ludCAmJgorCisJZWNobyBmaWxlMiBpcyBub3QgdHJhY2tlZCBvbiB0aGUgbWFzdGVyIGFueW1vcmUgJiYKKwlybSAtZiBmaWxlMiBzdWJkaXIvZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGZpbGUyIHN1YmRpci9maWxlMiAmJgorCWdpdCBjb21taXQgLWEgLW0gIm1hc3RlciByZW1vdmVzIGZpbGUyIGFuZCBzdWJkaXIvZmlsZTIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3by13YXkgbm90IGNsb2JiZXJpbmcnICcKKworCWVjaG8gPmZpbGUyIG1hc3RlciBjcmVhdGVzIHVudHJhY2tlZCBmaWxlMiAmJgorCWVjaG8gPnN1YmRpci9maWxlMiBtYXN0ZXIgY3JlYXRlcyB1bnRyYWNrZWQgc3ViZGlyL2ZpbGUyICYmCisJaWYgZXJyPWByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgbWFzdGVyIHNpZGUgMj4mMWAKKwl0aGVuCisJCWVjaG8gc2hvdWxkIGhhdmUgY29tcGxhaW5lZAorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiaGFwcHkgdG8gc2VlICRlcnIiCisJZmkKKycKKworZWNobyBmaWxlMiA+LmdpdGlnbm9yZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28td2F5IHdpdGggaW5jb3JyZWN0IC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5ICgxKScgJworCisJaWYgZXJyPWByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBtYXN0ZXIgc2lkZSAyPiYxYAorCXRoZW4KKwkJZWNobyBzaG91bGQgaGF2ZSBjb21wbGFpbmVkCisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSB0byBzZWUgJGVyciIKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28td2F5IHdpdGggaW5jb3JyZWN0IC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5ICgyKScgJworCisJaWYgZXJyPWByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9Zm9vIC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PS5naXRpZ25vcmUgbWFzdGVyIHNpZGUgMj4mMWAKKwl0aGVuCisJCWVjaG8gc2hvdWxkIGhhdmUgY29tcGxhaW5lZAorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiaGFwcHkgdG8gc2VlICRlcnIiCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvLXdheSBjbG9iYmVyaW5nIGEgaWdub3JlZCBmaWxlJyAnCisKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBtYXN0ZXIgc2lkZQorJworCitybSAtZiAuZ2l0aWdub3JlCisKKyMgdGhyZWUtdHJlZSB0ZXN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVlLXdheSBub3QgY29tcGxhaW5pbmcgb24gYW4gdW50cmFja2VkIHBhdGggaW4gYm90aCcgJworCisJcm0gLWYgZmlsZTIgc3ViZGlyL2ZpbGUyICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvID5maWxlMyBmaWxlIHRocmVlICYmCisJZWNobyA+c3ViZGlyL2ZpbGUzIGZpbGUgdGhyZWUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUzIHN1YmRpci9maWxlMyAmJgorCWdpdCBjb21taXQgLWEgLW0gInNpZGUgYWRkcyBmaWxlMyBhbmQgcmVtb3ZlcyBmaWxlMiIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvID5maWxlMiBmaWxlIHR3byBpcyB1bnRyYWNrZWQgb24gdGhlIG1hc3RlciBzaWRlICYmCisJZWNobyA+c3ViZGlyL2ZpbGUyIGZpbGUgdHdvIGlzIHVudHJhY2tlZCBvbiB0aGUgbWFzdGVyIHNpZGUgJiYKKworCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBicmFuY2gtcG9pbnQgbWFzdGVyIHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWUtd2F5IG5vdCBjbG9iYmVyaW5nIGEgd29ya2luZyB0cmVlIGZpbGUnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBmaWxlMiBzdWJkaXIvZmlsZTIgZmlsZTMgc3ViZGlyL2ZpbGUzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gPmZpbGUzIGZpbGUgdGhyZWUgY3JlYXRlZCBpbiBtYXN0ZXIsIHVudHJhY2tlZCAmJgorCWVjaG8gPnN1YmRpci9maWxlMyBmaWxlIHRocmVlIGNyZWF0ZWQgaW4gbWFzdGVyLCB1bnRyYWNrZWQgJiYKKwlpZiBlcnI9YHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBicmFuY2gtcG9pbnQgbWFzdGVyIHNpZGUgMj4mMWAKKwl0aGVuCisJCWVjaG8gc2hvdWxkIGhhdmUgY29tcGxhaW5lZAorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiaGFwcHkgdG8gc2VlICRlcnIiCisJZmkKKycKKworZWNobyA+LmdpdGlnbm9yZSBmaWxlMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlZS13YXkgbm90IGNvbXBsYWluaW5nIG9uIGFuIHVudHJhY2tlZCBmaWxlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgZmlsZTIgc3ViZGlyL2ZpbGUyIGZpbGUzIHN1YmRpci9maWxlMyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvID5maWxlMyBmaWxlIHRocmVlIGNyZWF0ZWQgaW4gbWFzdGVyLCB1bnRyYWNrZWQgJiYKKwllY2hvID5zdWJkaXIvZmlsZTMgZmlsZSB0aHJlZSBjcmVhdGVkIGluIG1hc3RlciwgdW50cmFja2VkICYmCisKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBicmFuY2gtcG9pbnQgbWFzdGVyIHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMy13YXkgbm90IG92ZXJ3cml0aW5nIGxvY2FsIGNoYW5nZXMgKHNldHVwKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlLWEgYnJhbmNoLXBvaW50ICYmCisJZWNobyA+PmZpbGUxICJuZXcgbGluZSB0byBiZSBrZXB0IGluIHRoZSBtZXJnZSByZXN1bHQiICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic2lkZS1hIGNoYW5nZXMgZmlsZTEiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUtYiBicmFuY2gtcG9pbnQgJiYKKwllY2hvID4+ZmlsZTIgIm5ldyBsaW5lIHRvIGJlIGtlcHQgaW4gdGhlIG1lcmdlIHJlc3VsdCIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzaWRlLWIgY2hhbmdlcyBmaWxlMiIgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZS1hCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMy13YXkgbm90IG92ZXJ3cml0aW5nIGxvY2FsIGNoYW5nZXMgKG91ciBzaWRlKScgJworCisJIyBBdCB0aGlzIHBvaW50LCBmaWxlMSBmcm9tIHNpZGUtYSBzaG91bGQgYmUga2VwdCBhcyBzaWRlLWIKKwkjIGRpZCBub3QgdG91Y2ggaXQuCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwllY2hvID4+ZmlsZTEgImxvY2FsIGNoYW5nZXMiICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IGJyYW5jaC1wb2ludCBzaWRlLWEgc2lkZS1iICYmCisJZ3JlcCAibmV3IGxpbmUgdG8gYmUga2VwdCIgZmlsZTEgJiYKKwlncmVwICJsb2NhbCBjaGFuZ2VzIiBmaWxlMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzMtd2F5IG5vdCBvdmVyd3JpdGluZyBsb2NhbCBjaGFuZ2VzICh0aGVpciBzaWRlKScgJworCisJIyBBdCB0aGlzIHBvaW50LCBmaWxlMiBmcm9tIHNpZGUtYiBzaG91bGQgYmUgdGFrZW4gYXMgc2lkZS1hCisJIyBkaWQgbm90IHRvdWNoIGl0LgorCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZWNobyA+PmZpbGUyICJsb2NhbCBjaGFuZ2VzIiAmJgorCXJlYWRfdHJlZV91X211c3RfZmFpbCAtbSAtdSBicmFuY2gtcG9pbnQgc2lkZS1hIHNpZGUtYiAmJgorCSEgZ3JlcCAibmV3IGxpbmUgdG8gYmUga2VwdCIgZmlsZTIgJiYKKwlncmVwICJsb2NhbCBjaGFuZ2VzIiBmaWxlMgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2Z1bm55IHN5bWxpbmsgaW4gd29yayB0cmVlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIHN5bS1iIHNpZGUtYiAmJgorCW1rZGlyIC1wIGEgJiYKKwk+YS9iICYmCisJZ2l0IGFkZCBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJzaWRlIGFkZHMgYS9iIiAmJgorCisJcm0gLWZyIGEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc3ltLWEgc2lkZS1hICYmCisJbWtkaXIgLXAgYSAmJgorCWxuIC1zIC4uL2IgYS9iICYmCisJZ2l0IGFkZCBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJ3ZSBhZGQgYS9iIiAmJgorCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IHN5bS1hIHN5bS1hIHN5bS1iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyxTQU5JVFkgJ2Z1bm55IHN5bWxpbmsgaW4gd29yayB0cmVlLCB1bi11bmxpbmstYWJsZScgJworCisJcm0gLWZyIGEgYiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjaGVja291dCBzeW0tYSAmJgorCWNobW9kIGEtdyBhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtbSAtdSBzeW0tYSBzeW0tYSBzeW0tYgorCisnCisKKyMgY2xlYW4tdXAgZnJvbSB0aGUgYWJvdmUgdGVzdAorY2htb2QgYSt3IGEgMj4vZGV2L251bGwKK3JtIC1mciBhIGIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIHNldHVwJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZS1hICYmCisJcm0gLWYgc3ViZGlyL2ZpbGUyICYmCisJbWtkaXIgc3ViZGlyL2ZpbGUyICYmCisJZWNobyBxZndmcSA+c3ViZGlyL2ZpbGUyL2Fub3RoZXIgJiYKKwlnaXQgYWRkIHN1YmRpci9maWxlMi9hbm90aGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2lkZS1hIGNoYW5nZXMgZmlsZTIgdG8gZGlyZWN0b3J5IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRicgJworCisJZ2l0IGNoZWNrb3V0IHNpZGUtYiAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBicmFuY2gtcG9pbnQgc2lkZS1iIHNpZGUtYSAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsICYmCisJKAorCQlhPSQoZ2l0IHJldi1wYXJzZSBicmFuY2gtcG9pbnQ6c3ViZGlyL2ZpbGUyKQorCQliPSQoZ2l0IHJldi1wYXJzZSBzaWRlLWE6c3ViZGlyL2ZpbGUyL2Fub3RoZXIpCisJCWVjaG8gIjEwMDY0NCAkYSAxCXN1YmRpci9maWxlMiIKKwkJZWNobyAiMTAwNjQ0ICRhIDIJc3ViZGlyL2ZpbGUyIgorCQllY2hvICIxMDA2NDQgJGIgMwlzdWJkaXIvZmlsZTIvYW5vdGhlciIKKwkpID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIHJlc29sdmUnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZS1iICYmCisJZ2l0IG1lcmdlLXJlc29sdmUgYnJhbmNoLXBvaW50IC0tIHNpZGUtYiBzaWRlLWEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgcmVjdXJzaXZlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUtYiAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgYnJhbmNoLXBvaW50IC0tIHNpZGUtYiBzaWRlLWEKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDUtcmVhZC10cmVlLXJlc2V0LnNoIGIvdC90MTAwNS1yZWFkLXRyZWUtcmVzZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjUzZGU3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDUtcmVhZC10cmVlLXJlc2V0LnNoCkBAIC0wLDAgKzEsOTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWFkLXRyZWUgLXUgLS1yZXNldCcKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKworIyB0d28tdHJlZSB0ZXN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisgIGdpdCBpbml0ICYmCisgIG1rZGlyIGRmICYmCisgIGVjaG8gY29udGVudCA+ZGYvZmlsZSAmJgorICBnaXQgYWRkIGRmL2ZpbGUgJiYKKyAgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKyAgZ2l0IGxzLWZpbGVzID5leHBlY3QgJiYKKyAgcm0gLXJmIGRmICYmCisgIGVjaG8gY29udGVudCA+ZGYgJiYKKyAgZ2l0IGFkZCBkZiAmJgorICBlY2hvIGNvbnRlbnQgPm5ldyAmJgorICBnaXQgYWRkIG5ldyAmJgorICBnaXQgY29tbWl0IC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBzaG91bGQgd29yaycgJworICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLXUgLS1yZXNldCBIRUFEXiAmJgorICBnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHNob3VsZCByZW1vdmUgcmVtbmFudHMgZnJvbSBhIGZhaWxlZCBtZXJnZScgJworICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSBIRUFEICYmCisgIGdpdCBscy1maWxlcyAtcyA+ZXhwZWN0ICYmCisgIHNoYTE9JChnaXQgcmV2LXBhcnNlIDpuZXcpICYmCisgICgKKwllY2hvICIxMDA2NDQgJHNoYTEgMQlvbGQiCisJZWNobyAiMTAwNjQ0ICRzaGExIDMJb2xkIgorICApIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKyAgPm9sZCAmJgorICBnaXQgbHMtZmlsZXMgLXMgJiYKKyAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgSEVBRCAmJgorICBnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorICAhIHRlc3QgLWYgb2xkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1BvcmNlbGFpbiByZXNldCBzaG91bGQgcmVtb3ZlIHJlbW5hbnRzIHRvbycgJworICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSBIRUFEICYmCisgIGdpdCBscy1maWxlcyAtcyA+ZXhwZWN0ICYmCisgIHNoYTE9JChnaXQgcmV2LXBhcnNlIDpuZXcpICYmCisgICgKKwllY2hvICIxMDA2NDQgJHNoYTEgMQlvbGQiCisJZWNobyAiMTAwNjQ0ICRzaGExIDMJb2xkIgorICApIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKyAgPm9sZCAmJgorICBnaXQgbHMtZmlsZXMgLXMgJiYKKyAgZ2l0IHJlc2V0IC0taGFyZCAmJgorICBnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorICAhIHRlc3QgLWYgb2xkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1BvcmNlbGFpbiBjaGVja291dCAtZiBzaG91bGQgcmVtb3ZlIHJlbW5hbnRzIHRvbycgJworICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSBIRUFEICYmCisgIGdpdCBscy1maWxlcyAtcyA+ZXhwZWN0ICYmCisgIHNoYTE9JChnaXQgcmV2LXBhcnNlIDpuZXcpICYmCisgICgKKwllY2hvICIxMDA2NDQgJHNoYTEgMQlvbGQiCisJZWNobyAiMTAwNjQ0ICRzaGExIDMJb2xkIgorICApIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKyAgPm9sZCAmJgorICBnaXQgbHMtZmlsZXMgLXMgJiYKKyAgZ2l0IGNoZWNrb3V0IC1mICYmCisgIGdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisgICEgdGVzdCAtZiBvbGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUG9yY2VsYWluIGNoZWNrb3V0IC1mIEhFQUQgc2hvdWxkIHJlbW92ZSByZW1uYW50cyB0b28nICcKKyAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgSEVBRCAmJgorICBnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdCAmJgorICBzaGExPSQoZ2l0IHJldi1wYXJzZSA6bmV3KSAmJgorICAoCisJZWNobyAiMTAwNjQ0ICRzaGExIDEJb2xkIgorCWVjaG8gIjEwMDY0NCAkc2hhMSAzCW9sZCIKKyAgKSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisgID5vbGQgJiYKKyAgZ2l0IGxzLWZpbGVzIC1zICYmCisgIGdpdCBjaGVja291dCAtZiBIRUFEICYmCisgIGdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisgICEgdGVzdCAtZiBvbGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDA2LWNhdC1maWxlLnNoIGIvdC90MTAwNi1jYXQtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kOGI3ZjJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwNi1jYXQtZmlsZS5zaApAQCAtMCwwICsxLDI0NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjYXQtZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK2VjaG9fd2l0aG91dF9uZXdsaW5lICgpIHsKKyAgICBwcmludGYgJyVzJyAiJCoiCit9CisKK3N0cmxlbiAoKSB7CisgICAgZWNob193aXRob3V0X25ld2xpbmUgIiQxIiB8IHdjIC1jIHwgc2VkIC1lICdzL14gKi8vJworfQorCittYXliZV9yZW1vdmVfdGltZXN0YW1wICgpIHsKKyAgICBpZiB0ZXN0IC16ICIkMiI7IHRoZW4KKyAgICAgICAgZWNob193aXRob3V0X25ld2xpbmUgIiQxIgorICAgIGVsc2UKKwllY2hvX3dpdGhvdXRfbmV3bGluZSAiJChwcmludGYgJyVzXG4nICIkMSIgfCBzZWQgLWUgJ3MvIFswLTldWzAtOV0qIFstK11bMC05XVswLTldWzAtOV1bMC05XSQvLycpIgorICAgIGZpCit9CisKK3J1bl90ZXN0cyAoKSB7CisgICAgdHlwZT0kMQorICAgIHNoYTE9JDIKKyAgICBzaXplPSQzCisgICAgY29udGVudD0kNAorICAgIHByZXR0eV9jb250ZW50PSQ1CisgICAgbm9fdHM9JDYKKworICAgIGJhdGNoX291dHB1dD0iJHNoYTEgJHR5cGUgJHNpemUKKyRjb250ZW50IgorCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiJHR5cGUgZXhpc3RzIiAnCisJZ2l0IGNhdC1maWxlIC1lICRzaGExCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiVHlwZSBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCisgICAgICAgIHRlc3QgJHR5cGUgPSAiJChnaXQgY2F0LWZpbGUgLXQgJHNoYTEpIgorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlNpemUgb2YgJHR5cGUgaXMgY29ycmVjdCIgJworICAgICAgICB0ZXN0ICRzaXplID0gIiQoZ2l0IGNhdC1maWxlIC1zICRzaGExKSIKKyAgICAnCisKKyAgICB0ZXN0IC16ICIkY29udGVudCIgfHwKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJDb250ZW50IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwlleHBlY3Q9IiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGNvbnRlbnQiICRub190cykiCisJYWN0dWFsPSIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiQoZ2l0IGNhdC1maWxlICR0eXBlICRzaGExKSIgJG5vX3RzKSIKKworICAgICAgICBpZiB0ZXN0ICJ6JGV4cGVjdCIgPSAieiRhY3R1YWwiCisJdGhlbgorCQk6IGhhcHB5CisJZWxzZQorCQllY2hvICJPb3BzOiBleHBlY3RlZCAkZXhwZWN0IgorCQllY2hvICJidXQgZ290ICRhY3R1YWwiCisJCWZhbHNlCisgICAgICAgIGZpCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiUHJldHR5IGNvbnRlbnQgb2YgJHR5cGUgaXMgY29ycmVjdCIgJworCWV4cGVjdD0iJChtYXliZV9yZW1vdmVfdGltZXN0YW1wICIkcHJldHR5X2NvbnRlbnQiICRub190cykiCisJYWN0dWFsPSIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiQoZ2l0IGNhdC1maWxlIC1wICRzaGExKSIgJG5vX3RzKSIKKyAgICAgICAgaWYgdGVzdCAieiRleHBlY3QiID0gInokYWN0dWFsIgorCXRoZW4KKwkJOiBoYXBweQorCWVsc2UKKwkJZWNobyAiT29wczogZXhwZWN0ZWQgJGV4cGVjdCIKKwkJZWNobyAiYnV0IGdvdCAkYWN0dWFsIgorCQlmYWxzZQorICAgICAgICBmaQorICAgICcKKworICAgIHRlc3QgLXogIiRjb250ZW50IiB8fAorICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2ggb3V0cHV0IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwlleHBlY3Q9IiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGJhdGNoX291dHB1dCIgJG5vX3RzKSIKKwlhY3R1YWw9IiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJChlY2hvICRzaGExIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gpIiAkbm9fdHMpIgorICAgICAgICBpZiB0ZXN0ICJ6JGV4cGVjdCIgPSAieiRhY3R1YWwiCisJdGhlbgorCQk6IGhhcHB5CisJZWxzZQorCQllY2hvICJPb3BzOiBleHBlY3RlZCAkZXhwZWN0IgorCQllY2hvICJidXQgZ290ICRhY3R1YWwiCisJCWZhbHNlCisgICAgICAgIGZpCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaC1jaGVjayBvdXRwdXQgb2YgJHR5cGUgaXMgY29ycmVjdCIgJworCWV4cGVjdD0iJHNoYTEgJHR5cGUgJHNpemUiCisJYWN0dWFsPSIkKGVjaG9fd2l0aG91dF9uZXdsaW5lICRzaGExIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2spIgorICAgICAgICBpZiB0ZXN0ICJ6JGV4cGVjdCIgPSAieiRhY3R1YWwiCisJdGhlbgorCQk6IGhhcHB5CisJZWxzZQorCQllY2hvICJPb3BzOiBleHBlY3RlZCAkZXhwZWN0IgorCQllY2hvICJidXQgZ290ICRhY3R1YWwiCisJCWZhbHNlCisgICAgICAgIGZpCisgICAgJworfQorCitoZWxsb19jb250ZW50PSJIZWxsbyBXb3JsZCIKK2hlbGxvX3NpemU9JChzdHJsZW4gIiRoZWxsb19jb250ZW50IikKK2hlbGxvX3NoYTE9JChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGhlbGxvX2NvbnRlbnQiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIiAnCisJZWNob193aXRob3V0X25ld2xpbmUgIiRoZWxsb19jb250ZW50IiA+IGhlbGxvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBoZWxsbworJworCitydW5fdGVzdHMgJ2Jsb2InICRoZWxsb19zaGExICRoZWxsb19zaXplICIkaGVsbG9fY29udGVudCIgIiRoZWxsb19jb250ZW50IgorCit0cmVlX3NoYTE9JChnaXQgd3JpdGUtdHJlZSkKK3RyZWVfc2l6ZT0zMwordHJlZV9wcmV0dHlfY29udGVudD0iMTAwNjQ0IGJsb2IgJGhlbGxvX3NoYTEJaGVsbG8iCisKK3J1bl90ZXN0cyAndHJlZScgJHRyZWVfc2hhMSAkdHJlZV9zaXplICIiICIkdHJlZV9wcmV0dHlfY29udGVudCIKKworY29tbWl0X21lc3NhZ2U9IkludGlhbCBjb21taXQiCitjb21taXRfc2hhMT0kKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkY29tbWl0X21lc3NhZ2UiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlX3NoYTEpCitjb21taXRfc2l6ZT0xNzYKK2NvbW1pdF9jb250ZW50PSJ0cmVlICR0cmVlX3NoYTEKK2F1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gMDAwMDAwMDAwMCArMDAwMAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAwMDAwMDAwMDAwICswMDAwCisKKyRjb21taXRfbWVzc2FnZSIKKworcnVuX3Rlc3RzICdjb21taXQnICRjb21taXRfc2hhMSAkY29tbWl0X3NpemUgIiRjb21taXRfY29udGVudCIgIiRjb21taXRfY29udGVudCIgMQorCit0YWdfaGVhZGVyX3dpdGhvdXRfdGltZXN0YW1wPSJvYmplY3QgJGhlbGxvX3NoYTEKK3R5cGUgYmxvYgordGFnIGhlbGxvdGFnCit0YWdnZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IgordGFnX2Rlc2NyaXB0aW9uPSJUaGlzIGlzIGEgdGFnIgordGFnX2NvbnRlbnQ9IiR0YWdfaGVhZGVyX3dpdGhvdXRfdGltZXN0YW1wIDAwMDAwMDAwMDAgKzAwMDAKKworJHRhZ19kZXNjcmlwdGlvbiIKK3RhZ19wcmV0dHlfY29udGVudD0iJHRhZ19oZWFkZXJfd2l0aG91dF90aW1lc3RhbXAgVGh1IEphbiAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKworJHRhZ19kZXNjcmlwdGlvbiIKKwordGFnX3NoYTE9JChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJHRhZ19jb250ZW50IiB8IGdpdCBta3RhZykKK3RhZ19zaXplPSQoc3RybGVuICIkdGFnX2NvbnRlbnQiKQorCitydW5fdGVzdHMgJ3RhZycgJHRhZ19zaGExICR0YWdfc2l6ZSAiJHRhZ19jb250ZW50IiAiJHRhZ19wcmV0dHlfY29udGVudCIgMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAiUmVhY2ggYSBibG9iIGZyb20gYSB0YWcgcG9pbnRpbmcgdG8gaXQiIFwKKyAgICAidGVzdCAnJGhlbGxvX2NvbnRlbnQnID0gXCJcJChnaXQgY2F0LWZpbGUgYmxvYiAkdGFnX3NoYTEpXCIiCisKK2ZvciBiYXRjaCBpbiBiYXRjaCBiYXRjaC1jaGVjaworZG8KKyAgICBmb3Igb3B0IGluIHQgcyBlIHAKKyAgICBkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBhc3NpbmcgLSRvcHQgd2l0aCAtLSRiYXRjaCBmYWlscyIgJworCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLS0kYmF0Y2ggLSRvcHQgJGhlbGxvX3NoYTEKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIC0tJGJhdGNoIHdpdGggLSRvcHQgZmFpbHMiICcKKwkgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0kb3B0IC0tJGJhdGNoICRoZWxsb19zaGExCisJJworICAgIGRvbmUKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBhc3NpbmcgPHR5cGU+IHdpdGggLS0kYmF0Y2ggZmFpbHMiICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLS0kYmF0Y2ggYmxvYiAkaGVsbG9fc2hhMQorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBhc3NpbmcgLS0kYmF0Y2ggd2l0aCA8dHlwZT4gZmFpbHMiICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAtLSRiYXRjaCAkaGVsbG9fc2hhMQorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBhc3Npbmcgc2hhMSB3aXRoIC0tJGJhdGNoIGZhaWxzIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0tJGJhdGNoICRoZWxsb19zaGExCisgICAgJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoLWNoZWNrIGZvciBhIG5vbi1leGlzdGVudCBuYW1lZCBvYmplY3QiICcKKyAgICB0ZXN0ICJmb29iYXI0MiBtaXNzaW5nCitmb29iYXI4NCBtaXNzaW5nIiA9IFwKKyAgICAiJCggKCBlY2hvIGZvb2JhcjQyOyBlY2hvX3dpdGhvdXRfbmV3bGluZSBmb29iYXI4NDsgKSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaC1jaGVjayBmb3IgYSBub24tZXhpc3RlbnQgaGFzaCIgJworICAgIHRlc3QgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIgbWlzc2luZworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NCBtaXNzaW5nIiA9IFwKKyAgICAiJCggKCBlY2hvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDI7CisgICAgICAgICBlY2hvX3dpdGhvdXRfbmV3bGluZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0OyApIFwKKyAgICAgICB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaCBmb3IgYW4gZXhpc3RlbnQgYW5kIGEgbm9uLWV4aXN0ZW50IGhhc2giICcKKyAgICB0ZXN0ICIkdGFnX3NoYTEgdGFnICR0YWdfc2l6ZQorJHRhZ19jb250ZW50CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIG1pc3NpbmciID0gXAorICAgICIkKCAoIGVjaG8gJHRhZ19zaGExOworICAgICAgICAgZWNob193aXRob3V0X25ld2xpbmUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDsgKSBcCisgICAgICAgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgZm9yIGFuIGVtdHB5IGxpbmUiICcKKyAgICB0ZXN0ICIgbWlzc2luZyIgPSAiJChlY2hvIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2spIgorJworCitiYXRjaF9pbnB1dD0iJGhlbGxvX3NoYTEKKyRjb21taXRfc2hhMQorJHRhZ19zaGExCitkZWFkYmVlZgorCisiCisKK2JhdGNoX291dHB1dD0iJGhlbGxvX3NoYTEgYmxvYiAkaGVsbG9fc2l6ZQorJGhlbGxvX2NvbnRlbnQKKyRjb21taXRfc2hhMSBjb21taXQgJGNvbW1pdF9zaXplCiskY29tbWl0X2NvbnRlbnQKKyR0YWdfc2hhMSB0YWcgJHRhZ19zaXplCiskdGFnX2NvbnRlbnQKK2RlYWRiZWVmIG1pc3NpbmcKKyBtaXNzaW5nIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWJhdGNoIHdpdGggbXVsdGlwbGUgc2hhMXMgZ2l2ZXMgY29ycmVjdCBmb3JtYXQnICcKKwl0ZXN0ICIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiRiYXRjaF9vdXRwdXQiIDEpIiA9ICIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiQoZWNob193aXRob3V0X25ld2xpbmUgIiRiYXRjaF9pbnB1dCIgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCkiIDEpIgorJworCitiYXRjaF9jaGVja19pbnB1dD0iJGhlbGxvX3NoYTEKKyR0cmVlX3NoYTEKKyRjb21taXRfc2hhMQorJHRhZ19zaGExCitkZWFkYmVlZgorCisiCisKK2JhdGNoX2NoZWNrX291dHB1dD0iJGhlbGxvX3NoYTEgYmxvYiAkaGVsbG9fc2l6ZQorJHRyZWVfc2hhMSB0cmVlICR0cmVlX3NpemUKKyRjb21taXRfc2hhMSBjb21taXQgJGNvbW1pdF9zaXplCiskdGFnX3NoYTEgdGFnICR0YWdfc2l6ZQorZGVhZGJlZWYgbWlzc2luZworIG1pc3NpbmciCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgd2l0aCBtdWx0aXBsZSBzaGExcyBnaXZlcyBjb3JyZWN0IGZvcm1hdCIgJworICAgIHRlc3QgIiRiYXRjaF9jaGVja19vdXRwdXQiID0gXAorICAgICIkKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkYmF0Y2hfY2hlY2tfaW5wdXQiIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2spIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDctaGFzaC1vYmplY3Quc2ggYi90L3QxMDA3LWhhc2gtb2JqZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4M2RmOGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDA3LWhhc2gtb2JqZWN0LnNoCkBAIC0wLDAgKzEsMjA0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iZ2l0IGhhc2gtb2JqZWN0IgorCisuIC4vdGVzdC1saWIuc2gKKworZWNob193aXRob3V0X25ld2xpbmUoKSB7CisJcHJpbnRmICclcycgIiQqIgorfQorCit0ZXN0X2Jsb2JfZG9lc19ub3RfZXhpc3QoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYiBkb2VzIG5vdCBleGlzdCBpbiBkYXRhYmFzZScgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkMQorCSIKK30KKwordGVzdF9ibG9iX2V4aXN0cygpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iIGV4aXN0cyBpbiBkYXRhYmFzZScgIgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkMQorCSIKK30KKworaGVsbG9fY29udGVudD0iSGVsbG8gV29ybGQiCitoZWxsb19zaGExPTVlMWMzMDlkYWU3ZjQ1ZTBmMzliMWJmM2FjM2NkOWRiMTJlN2Q2ODkKKworZXhhbXBsZV9jb250ZW50PSJUaGlzIGlzIGFuIGV4YW1wbGUiCitleGFtcGxlX3NoYTE9ZGRkM2Y4MzZkM2UzZmJiN2FlMjg5YWE5YWU4MzUzNmY3Njk1NjM5OQorCitzZXR1cF9yZXBvKCkgeworCWVjaG9fd2l0aG91dF9uZXdsaW5lICIkaGVsbG9fY29udGVudCIgPiBoZWxsbworCWVjaG9fd2l0aG91dF9uZXdsaW5lICIkZXhhbXBsZV9jb250ZW50IiA+IGV4YW1wbGUKK30KKwordGVzdF9yZXBvPXRlc3QKK3B1c2hfcmVwbygpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvICR0ZXN0X3JlcG8KKwljZCAkdGVzdF9yZXBvCisKKwlzZXR1cF9yZXBvCit9CisKK3BvcF9yZXBvKCkgeworCWNkIC4uCisJcm0gLXJmICR0ZXN0X3JlcG8KK30KKworc2V0dXBfcmVwbworCisjIEFyZ3VtZW50IGNoZWNraW5nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm11bHRpcGxlICctLXN0ZGluJ3MgYXJlIHJlamVjdGVkIiAnCisJZWNobyBleGFtcGxlIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJDYW4ndCB1c2UgLS1zdGRpbiBhbmQgLS1zdGRpbi1wYXRocyB0b2dldGhlciIgJworCWVjaG8gZXhhbXBsZSB8IHRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC0tc3RkaW4tcGF0aHMgJiYKKwllY2hvIGV4YW1wbGUgfCB0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyAtLXN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIkNhbid0IHBhc3MgZmlsZW5hbWVzIGFzIGFyZ3VtZW50cyB3aXRoIC0tc3RkaW4tcGF0aHMiICcKKwllY2hvIGV4YW1wbGUgfCB0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyBoZWxsbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJDYW4ndCB1c2UgLS1wYXRoIHdpdGggLS1zdGRpbi1wYXRocyIgJworCWVjaG8gZXhhbXBsZSB8IHRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluLXBhdGhzIC0tcGF0aD1mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiQ2FuJ3QgdXNlIC0tcGF0aCB3aXRoIC0tbm8tZmlsdGVycyIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLW5vLWZpbHRlcnMgLS1wYXRoPWZvbworJworCisjIEJlaGF2aW9yCisKK3B1c2hfcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoIGEgZmlsZScgJworCXRlc3QgJGhlbGxvX3NoYTEgPSAkKGdpdCBoYXNoLW9iamVjdCBoZWxsbykKKycKKwordGVzdF9ibG9iX2RvZXNfbm90X2V4aXN0ICRoZWxsb19zaGExCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhc2ggZnJvbSBzdGRpbicgJworCXRlc3QgJGV4YW1wbGVfc2hhMSA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPCBleGFtcGxlKQorJworCit0ZXN0X2Jsb2JfZG9lc19ub3RfZXhpc3QgJGV4YW1wbGVfc2hhMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoIGEgZmlsZSBhbmQgd3JpdGUgdG8gZGF0YWJhc2UnICcKKwl0ZXN0ICRoZWxsb19zaGExID0gJChnaXQgaGFzaC1vYmplY3QgLXcgaGVsbG8pCisnCisKK3Rlc3RfYmxvYl9leGlzdHMgJGhlbGxvX3NoYTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gZmlsZTEgPGZpbGUwIGZpcnN0IG9wZXJhdGVzIG9uIGZpbGUwLCB0aGVuIGZpbGUxJyAnCisJZWNobyBmb28gPiBmaWxlMSAmJgorCW9ibmFtZTA9JChlY2hvIGJhciB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCW9ibmFtZTE9JChnaXQgaGFzaC1vYmplY3QgZmlsZTEpICYmCisJb2JuYW1lMG5ldz0kKGVjaG8gYmFyIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gZmlsZTEgfCBzZWQgLW4gLWUgMXApICYmCisJb2JuYW1lMW5ldz0kKGVjaG8gYmFyIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gZmlsZTEgfCBzZWQgLW4gLWUgMnApICYmCisJdGVzdCAiJG9ibmFtZTAiID0gIiRvYm5hbWUwbmV3IiAmJgorCXRlc3QgIiRvYm5hbWUxIiA9ICIkb2JuYW1lMW5ldyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGhhdCBhcHByb3ByaWF0ZSBmaWx0ZXIgaXMgaW52b2tlIHdoZW4gLS1wYXRoIGlzIHVzZWQnICcKKwllY2hvIGZvb1EgfCB0ciBRICJcXDAxNSIgPmZpbGUwICYmCisJY3AgZmlsZTAgZmlsZTEgJiYKKwllY2hvICJmaWxlMCAtY3JsZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiZmlsZTEgY3JsZiIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZmlsZTBfc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUwKSAmJgorCWZpbGUxX3NoYT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMSkgJiYKKwl0ZXN0ICIkZmlsZTBfc2hhIiAhPSAiJGZpbGUxX3NoYSIgJiYKKwlwYXRoMV9zaGE9JChnaXQgaGFzaC1vYmplY3QgLS1wYXRoPWZpbGUxIGZpbGUwKSAmJgorCXBhdGgwX3NoYT0kKGdpdCBoYXNoLW9iamVjdCAtLXBhdGg9ZmlsZTAgZmlsZTEpICYmCisJdGVzdCAiJGZpbGUwX3NoYSIgPSAiJHBhdGgwX3NoYSIgJiYKKwl0ZXN0ICIkZmlsZTFfc2hhIiA9ICIkcGF0aDFfc2hhIiAmJgorCXBhdGgxX3NoYT0kKGNhdCBmaWxlMCB8IGdpdCBoYXNoLW9iamVjdCAtLXBhdGg9ZmlsZTEgLS1zdGRpbikgJiYKKwlwYXRoMF9zaGE9JChjYXQgZmlsZTEgfCBnaXQgaGFzaC1vYmplY3QgLS1wYXRoPWZpbGUwIC0tc3RkaW4pICYmCisJdGVzdCAiJGZpbGUwX3NoYSIgPSAiJHBhdGgwX3NoYSIgJiYKKwl0ZXN0ICIkZmlsZTFfc2hhIiA9ICIkcGF0aDFfc2hhIiAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb3JlLmF1dG9jcmxmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoYXQgLS1uby1maWx0ZXJzIG9wdGlvbiB3b3JrcycgJworCWVjaG8gZm9vUSB8IHRyIFEgIlxcMDE1IiA+ZmlsZTAgJiYKKwljcCBmaWxlMCBmaWxlMSAmJgorCWVjaG8gImZpbGUwIC1jcmxmIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJmaWxlMSBjcmxmIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlmaWxlMF9zaGE9JChnaXQgaGFzaC1vYmplY3QgZmlsZTApICYmCisJZmlsZTFfc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUxKSAmJgorCXRlc3QgIiRmaWxlMF9zaGEiICE9ICIkZmlsZTFfc2hhIiAmJgorCW5vZmlsdGVyc19maWxlMT0kKGdpdCBoYXNoLW9iamVjdCAtLW5vLWZpbHRlcnMgZmlsZTEpICYmCisJdGVzdCAiJGZpbGUwX3NoYSIgPSAiJG5vZmlsdGVyc19maWxlMSIgJiYKKwlub2ZpbHRlcnNfZmlsZTE9JChjYXQgZmlsZTEgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwl0ZXN0ICIkZmlsZTBfc2hhIiA9ICIkbm9maWx0ZXJzX2ZpbGUxIiAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb3JlLmF1dG9jcmxmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoYXQgLS1uby1maWx0ZXJzIG9wdGlvbiB3b3JrcyB3aXRoIC0tc3RkaW4tcGF0aHMnICcKKwllY2hvIGZvb1EgfCB0ciBRICJcXDAxNSIgPmZpbGUwICYmCisJY3AgZmlsZTAgZmlsZTEgJiYKKwllY2hvICJmaWxlMCAtY3JsZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiZmlsZTEgY3JsZiIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZmlsZTBfc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUwKSAmJgorCWZpbGUxX3NoYT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMSkgJiYKKwl0ZXN0ICIkZmlsZTBfc2hhIiAhPSAiJGZpbGUxX3NoYSIgJiYKKwlub2ZpbHRlcnNfZmlsZTE9JChlY2hvICJmaWxlMSIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyAtLW5vLWZpbHRlcnMpICYmCisJdGVzdCAiJGZpbGUwX3NoYSIgPSAiJG5vZmlsdGVyc19maWxlMSIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5hdXRvY3JsZgorJworCitwb3BfcmVwbworCitmb3IgYXJncyBpbiAiLXcgLS1zdGRpbiIgIi0tc3RkaW4gLXciOyBkbworCXB1c2hfcmVwbworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGFzaCBmcm9tIHN0ZGluIGFuZCB3cml0ZSB0byBkYXRhYmFzZSAoJGFyZ3MpIiAnCisJCXRlc3QgJGV4YW1wbGVfc2hhMSA9ICQoZ2l0IGhhc2gtb2JqZWN0ICRhcmdzIDwgZXhhbXBsZSkKKwknCisKKwl0ZXN0X2Jsb2JfZXhpc3RzICRleGFtcGxlX3NoYTEKKworCXBvcF9yZXBvCitkb25lCisKK2ZpbGVuYW1lcz0iaGVsbG8KK2V4YW1wbGUiCisKK3NoYTFzPSIkaGVsbG9fc2hhMQorJGV4YW1wbGVfc2hhMSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiaGFzaCB0d28gZmlsZXMgd2l0aCBuYW1lcyBvbiBzdGRpbiIgJworCXRlc3QgIiRzaGExcyIgPSAiJChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGZpbGVuYW1lcyIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocykiCisnCisKK2ZvciBhcmdzIGluICItdyAtLXN0ZGluLXBhdGhzIiAiLS1zdGRpbi1wYXRocyAtdyI7IGRvCisJcHVzaF9yZXBvCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoYXNoIHR3byBmaWxlcyB3aXRoIG5hbWVzIG9uIHN0ZGluIGFuZCB3cml0ZSB0byBkYXRhYmFzZSAoJGFyZ3MpIiAnCisJCXRlc3QgIiRzaGExcyIgPSAiJChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGZpbGVuYW1lcyIgfCBnaXQgaGFzaC1vYmplY3QgJGFyZ3MpIgorCScKKworCXRlc3RfYmxvYl9leGlzdHMgJGhlbGxvX3NoYTEKKwl0ZXN0X2Jsb2JfZXhpc3RzICRleGFtcGxlX3NoYTEKKworCXBvcF9yZXBvCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgdHJlZScgJworCWVjaG8gYWJjID5tYWxmb3JtZWQtdHJlZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIG1hbGZvcm1lZC10cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtLXN0ZGluIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycnVwdCB0YWcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLXQgdGFnIC0tc3RkaW4gPC9kZXYvbnVsbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDgtcmVhZC10cmVlLW92ZXJsYXkuc2ggYi90L3QxMDA4LXJlYWQtdHJlZS1vdmVybGF5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjNTBlZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDA4LXJlYWQtdHJlZS1vdmVybGF5LnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IG11bHRpLXRyZWUgcmVhZC10cmVlIHdpdGhvdXQgbWVyZ2luZycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBvbmUgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwllY2hvIHR3byA+YiAmJgorCWdpdCBhZGQgYiAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgaW5pdGlhbCAmJgorCWVjaG8gdGhyZWUgPmEgJiYKKwlta2RpciBiICYmCisJZWNobyBmb3VyID5iL2MgJiYKKwlnaXQgYWRkIGIvYyAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGktcmVhZCcgJworCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgaW5pdGlhbCBtYXN0ZXIgc2lkZSAmJgorCShlY2hvIGE7IGVjaG8gYi9jKSA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3QxMDA5LXJlYWQtdHJlZS1uZXctaW5kZXguc2ggYi90L3QxMDA5LXJlYWQtdHJlZS1uZXctaW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTliM2FhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDktcmVhZC10cmVlLW5ldy1pbmRleC5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCByZWFkLXRyZWUgaW50byBhIGZyZXNoIGluZGV4IGZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIG9uZSA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZXhpc3RlbnQgaW5kZXggZmlsZScgJworCXJtIC1mIG5ldy1pbmRleCAmJgorCUdJVF9JTkRFWF9GSUxFPW5ldy1pbmRleCBnaXQgcmVhZC10cmVlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBpbmRleCBmaWxlJyAnCisJcm0gLWYgbmV3LWluZGV4ICYmCisJPiBuZXctaW5kZXggJiYKKwlHSVRfSU5ERVhfRklMRT1uZXctaW5kZXggZ2l0IHJlYWQtdHJlZSBtYXN0ZXIKKycKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDEwMTAtbWt0cmVlLnNoIGIvdC90MTAxMC1ta3RyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGY1NzNjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMTAtbWt0cmVlLnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWt0cmVlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGQgaW4gYSBhLiBhMAorCWRvCisJCW1rZGlyICIkZCIgJiYgZWNobyAiJGQvb25lIiA+IiRkL29uZSIgJiYKKwkJZ2l0IGFkZCAiJGQiCisJZG9uZSAmJgorCWVjaG8gemVybyA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWluZm8tb25seSBvbmUgJiYKKwlnaXQgd3JpdGUtdHJlZSAtLW1pc3Npbmctb2sgPnRyZWUubWlzc2luZyAmJgorCWdpdCBscy10cmVlICQoY2F0IHRyZWUubWlzc2luZykgPnRvcC5taXNzaW5nICYmCisJZ2l0IGxzLXRyZWUgLXIgJChjYXQgdHJlZS5taXNzaW5nKSA+YWxsLm1pc3NpbmcgJiYKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgd3JpdGUtdHJlZSA+dHJlZSAmJgorCWdpdCBscy10cmVlICQoY2F0IHRyZWUpID50b3AgJiYKKwlnaXQgbHMtdHJlZSAtciAkKGNhdCB0cmVlKSA+YWxsICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtcSAtbSBvbmUgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICRIIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLXEgLW0gdHdvICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+dHJlZS53aXRoc3ViICYmCisJZ2l0IGxzLXRyZWUgSEVBRCA+dG9wLndpdGhzdWIgJiYKKwlnaXQgbHMtdHJlZSAtciBIRUFEID5hbGwud2l0aHN1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIHBpcGVkIHRvIG1rdHJlZSAoMSknICcKKwlnaXQgbWt0cmVlIDx0b3AgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgcGlwZWQgdG8gbWt0cmVlICgyKScgJworCWdpdCBta3RyZWUgPHRvcC53aXRoc3ViID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLndpdGhzdWIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgb3V0cHV0IGluIHdyb25nIG9yZGVyIGdpdmVuIHRvIG1rdHJlZSAoMSknICcKKwkiJFBFUkxfUEFUSCIgLWUgInByaW50IHJldmVyc2UgPD4iIDx0b3AgfAorCWdpdCBta3RyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgb3V0cHV0IGluIHdyb25nIG9yZGVyIGdpdmVuIHRvIG1rdHJlZSAoMiknICcKKwkiJFBFUkxfUEFUSCIgLWUgInByaW50IHJldmVyc2UgPD4iIDx0b3Aud2l0aHN1YiB8CisJZ2l0IG1rdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgdHJlZS53aXRoc3ViIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBtaXNzaW5nIG9iamVjdCB3aXRoIC0tbWlzc2luZycgJworCWdpdCBta3RyZWUgLS1taXNzaW5nIDx0b3AubWlzc2luZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgdHJlZS5taXNzaW5nIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdta3RyZWUgcmVmdXNlcyB0byByZWFkIGxzLXRyZWUgLXIgb3V0cHV0ICgxKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBta3RyZWUgPGFsbCA+YWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21rdHJlZSByZWZ1c2VzIHRvIHJlYWQgbHMtdHJlZSAtciBvdXRwdXQgKDIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1rdHJlZSA8YWxsLndpdGhzdWIgPmFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMTEtcmVhZC10cmVlLXNwYXJzZS1jaGVja291dC5zaCBiL3QvdDEwMTEtcmVhZC10cmVlLXNwYXJzZS1jaGVja291dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YzAwNTNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoCkBAIC0wLDAgKzEsMjUzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3BhcnNlIGNoZWNrb3V0IHRlc3RzCisKKyogKHRhZzogcmVtb3ZlZCwgbWFzdGVyKSByZW1vdmVkCit8IEQJc3ViL2FkZGVkCisqIChIRUFELCB0YWc6IHRvcCkgbW9kaWZpZWQgYW5kIGFkZGVkCit8IE0JaW5pdC50Cit8IEEJc3ViL2FkZGVkCisqICh0YWc6IGluaXQpIGluaXQKKyAgQQlpbml0LnQKKycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkxMDA2NDQgNzdmMGJhMTczNGVkNzlkMTI4ODFmODFiMzZlZTEzNGRlNmEzMzI3YiAwCWluaXQudAorCTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJc3ViL2FkZGVkCisJMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlzdWIvYWRkZWR0b28KKwkxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCXN1YnN1Yi9hZGRlZAorCUVPRgorCWNhdCA+ZXhwZWN0ZWQuc3d0IDw8LVxFT0YgJiYKKwlIIGluaXQudAorCUggc3ViL2FkZGVkCisJSCBzdWIvYWRkZWR0b28KKwlIIHN1YnN1Yi9hZGRlZAorCUVPRgorCisJdGVzdF9jb21taXQgaW5pdCAmJgorCWVjaG8gbW9kaWZpZWQgPj5pbml0LnQgJiYKKwlta2RpciBzdWIgc3Vic3ViICYmCisJdG91Y2ggc3ViL2FkZGVkIHN1Yi9hZGRlZHRvbyBzdWJzdWIvYWRkZWQgJiYKKwlnaXQgYWRkIGluaXQudCBzdWIvYWRkZWQgc3ViL2FkZGVkdG9vIHN1YnN1Yi9hZGRlZCAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGFuZCBhZGRlZCIgJiYKKwlnaXQgdGFnIHRvcCAmJgorCWdpdCBybSBzdWIvYWRkZWQgJiYKKwlnaXQgY29tbWl0IC1tIHJlbW92ZWQgJiYKKwlnaXQgdGFnIHJlbW92ZWQgJiYKKwlnaXQgY2hlY2tvdXQgdG9wICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgd2l0aG91dCAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0JyAnCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3QgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB3aXRoIC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgYnV0IGRpc2FibGVkJyAnCisJZWNobyA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3QgcmVzdWx0ICYmCisJdGVzdCAtZiBpbml0LnQgJiYKKwl0ZXN0IC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgLS1uby1zcGFyc2UtY2hlY2tvdXQgd2l0aCBlbXB0eSAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IGFuZCBlbmFibGVkJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnNwYXJzZWNoZWNrb3V0IHRydWUgJiYKKwllY2hvID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tbm8tc3BhcnNlLWNoZWNrb3V0IC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dCByZXN1bHQgJiYKKwl0ZXN0IC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB3aXRoIGVtcHR5IC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQnICcKKwlnaXQgY29uZmlnIGNvcmUuc3BhcnNlY2hlY2tvdXQgdHJ1ZSAmJgorCWVjaG8gPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X2ZhaWwgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dCByZXN1bHQgJiYKKwl0ZXN0IC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoIGRpcmVjdG9yaWVzIHdpdGggdHJhaWxpbmcgc2xhc2gnICcKKwljYXQgPmV4cGVjdGVkLnN3dC1ub2luaXQgPDwtXEVPRiAmJgorCVMgaW5pdC50CisJSCBzdWIvYWRkZWQKKwlIIHN1Yi9hZGRlZHRvbworCVMgc3Vic3ViL2FkZGVkCisJRU9GCisKKwllY2hvIHN1Yi8gPiAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3Qtbm9pbml0IHJlc3VsdCAmJgorCXRlc3QgISAtZiBpbml0LnQgJiYKKwl0ZXN0IC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBkaXJlY3RvcmllcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoJyAnCisJZWNobyBzdWIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5vaW5pdCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggZGlyZWN0b3JpZXMgd2l0aCBuZWdhdGVkIHBhdHRlcm5zJyAnCisJY2F0ID5leHBlY3RlZC5zd3QtbmVnYXRpb24gPDxcRU9GICYmCitTIGluaXQudAorUyBzdWIvYWRkZWQKK0ggc3ViL2FkZGVkdG9vCitTIHN1YnN1Yi9hZGRlZAorRU9GCisKKwljYXQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDxcRU9GICYmCitzdWIKKyFzdWIvYWRkZWQKK0VPRgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5lZ2F0aW9uIHJlc3VsdCAmJgorCXRlc3QgISAtZiBpbml0LnQgJiYKKwl0ZXN0ICEgLWYgc3ViL2FkZGVkICYmCisJdGVzdCAtZiBzdWIvYWRkZWR0b28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggZGlyZWN0b3JpZXMgd2l0aCBuZWdhdGVkIHBhdHRlcm5zICgyKScgJworCWNhdCA+ZXhwZWN0ZWQuc3d0LW5lZ2F0aW9uMiA8PFxFT0YgJiYKK0ggaW5pdC50CitIIHN1Yi9hZGRlZAorUyBzdWIvYWRkZWR0b28KK0ggc3Vic3ViL2FkZGVkCitFT0YKKworCWNhdCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PFxFT0YgJiYKKy8qCishc3ViCitzdWIvYWRkZWQKK0VPRgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5lZ2F0aW9uMiByZXN1bHQgJiYKKwl0ZXN0IC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkICYmCisJdGVzdCAhIC1mIHN1Yi9hZGRlZHRvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBkaXJlY3RvcnkgcGF0dGVybicgJworCWVjaG8gInM/YiIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5vaW5pdCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYXJlYSBjaGFuZ2VzJyAnCisJY2F0ID5leHBlY3RlZC5zd3Qtbm9zdWIgPDwtXEVPRiAmJgorCUggaW5pdC50CisJUyBzdWIvYWRkZWQKKwlTIHN1Yi9hZGRlZHRvbworCVMgc3Vic3ViL2FkZGVkCisJRU9GCisKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3Qtbm9zdWIgcmVzdWx0ICYmCisJdGVzdCAtZiBpbml0LnQgJiYKKwl0ZXN0ICEgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB1cGRhdGVzIHdvcmt0cmVlLCBhYnNlbnQgY2FzZScgJworCWVjaG8gc3ViL2FkZGVkID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEXiAmJgorCXRlc3QgISAtZiBpbml0LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHVwZGF0ZXMgd29ya3RyZWUsIGRpcnR5IGNhc2UnICcKKwllY2hvIHN1Yi9hZGRlZCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwllY2hvIGRpcnR5ID5pbml0LnQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRF4gJiYKKwlncmVwIC1xIGRpcnR5IGluaXQudCAmJgorCXJtIGluaXQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgcmVtb3ZlcyB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWVjaG8gZGlydHkgPmFkZGVkICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUReICYmCisJZ3JlcCAtcSBkaXJ0eSBhZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgYWRkcyB0byB3b3JrdHJlZSwgYWJzZW50IGNhc2UnICcKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiByZW1vdmVkICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC11IC1tIEhFQUReICYmCisJdGVzdCAhIC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgYWRkcyB0byB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHJlbW92ZWQgJiYKKwlta2RpciBzdWIgJiYKKwllY2hvIGRpcnR5ID5zdWIvYWRkZWQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLXUgLW0gSEVBRF4gJiYKKwlncmVwIC1xIGRpcnR5IHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCByZW1vdmFsIGFuZCB3b3JrdHJlZSBuYXJyb3dpbmcgYXQgdGhlIHNhbWUgdGltZScgJworCT5lbXB0eSAmJgorCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZWNobyBzdWIvYWRkZWQgPj4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IHJlbW92ZWQgJiYKKwlnaXQgbHMtZmlsZXMgc3ViL2FkZGVkID5yZXN1bHQgJiYKKwl0ZXN0ICEgLWYgc3ViL2FkZGVkICYmCisJdGVzdF9jbXAgZW1wdHkgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSAtLXJlc2V0IHJlbW92ZXMgb3V0c2lkZSB3b3JrdHJlZScgJworCT5lbXB0eSAmJgorCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWdpdCByZXNldCAtLWhhcmQgcmVtb3ZlZCAmJgorCWdpdCBscy1maWxlcyBzdWIvYWRkZWQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGVtcHR5IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmludCBlcnJvcnMgd2hlbiBmYWlsZWQgdG8gdXBkYXRlIHdvcmt0cmVlJyAnCisJZWNobyBzdWIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgaW5pdCAmJgorCW1rZGlyIHN1YiAmJgorCXRvdWNoIHN1Yi9hZGRlZCBzdWIvYWRkZWR0b28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgdG9wIDI+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK2Vycm9yOiBUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6CisJc3ViL2FkZGVkCisJc3ViL2FkZGVkdG9vCitQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IGNhbiBzd2l0Y2ggYnJhbmNoZXMuCitBYm9ydGluZworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxMi1yZWFkLXRyZWUtZGYuc2ggYi90L3QxMDEyLXJlYWQtdHJlZS1kZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNmEwNGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTAxMi1yZWFkLXRyZWUtZGYuc2gKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWFkLXRyZWUgRC9GIGNvbmZsaWN0IGNvcm5lciBjYXNlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKworbWFrZXRyZWUgKCkgeworCSgKKwkJcm0gLWYgLmdpdC9pbmRleCAuZ2l0L2luZGV4LmxvY2sgJiYKKwkJZ2l0IGNsZWFuIC1kIC1mIC1mIC1xIC14ICYmCisJCW5hbWU9IiQxIiAmJgorCQlzaGlmdCAmJgorCQlmb3IgaXQKKwkJZG8KKwkJCXBhdGg9JChleHByICIkaXQiIDogJ1woW146XSpcKScpICYmCisJCQlta2RpciAtcCAkKGRpcm5hbWUgIiRwYXRoIikgJiYKKwkJCWVjaG8gIiRpdCIgPiIkcGF0aCIgJiYKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiRwYXRoIiB8fCBleGl0CisJCWRvbmUgJiYKKwkJZ2l0IHRhZyAiJG5hbWUiICQoZ2l0IHdyaXRlLXRyZWUpCisJKQorfQorCitzZXR0cmVlICgpIHsKKwlybSAtZiAuZ2l0L2luZGV4IC5naXQvaW5kZXgubG9jayAmJgorCWdpdCBjbGVhbiAtZCAtZiAtZiAtcSAteCAmJgorCWdpdCByZWFkLXRyZWUgIiQxIiAmJgorCWdpdCBjaGVja291dC1pbmRleCAtZiAtcSAtdSAtYSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCit9CisKK2NoZWNraW5kZXggKCkgeworCWdpdCBscy1maWxlcyAtcyB8CisJc2VkICJzfF5bMC03XVswLTddKiAkX3g0MCBcKFswLTNdXCkJfFwxIHwiID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwltYWtldHJlZSBPLTAwMCBhL2ItMi9jL2QgYS9iL2MvZCBhL3ggJiYKKwltYWtldHJlZSBBLTAwMCBhL2ItMi9jL2QgYS9iL2MvZCBhL3ggJiYKKwltYWtldHJlZSBBLTAwMSBhL2ItMi9jL2QgYS9iL2MvZCBhL2IvYy9lIGEveCAmJgorCW1ha2V0cmVlIEItMDAwIGEvYi0yL2MvZCBhL2IgICAgIGEveCAmJgorCisJbWFrZXRyZWUgTy0wMTAgdC0wICAgICB0LzEgIHQvMiB0PTMgJiYKKwltYWtldHJlZSBBLTAxMCB0LTAgdCAgICAgICAgICAgIHQ9MyAmJgorCW1ha2V0cmVlIEItMDEwICAgICAgICAgdC8xOiAgICAgdD0zOiAmJgorCisJbWFrZXRyZWUgTy0wMjAgZHMvZG1hL2lvYXQuYyBkcy9kbWEvaW9hdF9kY2EuYyAmJgorCW1ha2V0cmVlIEEtMDIwIGRzL2RtYS9pb2F0L01ha2VmaWxlIGRzL2RtYS9pb2F0L3JlZ2lzdGVycy5oICYmCisJOgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczLXdheSAoMSknICcKKwlzZXR0cmVlIEEtMDAwICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IE8tMDAwIEEtMDAwIEItMDAwICYmCisJY2hlY2tpbmRleCA8PC1FT0YKKwkzIGEvYgorCTAgYS9iLTIvYy9kCisJMSBhL2IvYy9kCisJMiBhL2IvYy9kCisJMCBhL3gKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMy13YXkgKDIpJyAnCisJc2V0dHJlZSBBLTAwMSAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBPLTAwMCBBLTAwMSBCLTAwMCAmJgorCWNoZWNraW5kZXggPDwtRU9GCisJMyBhL2IKKwkwIGEvYi0yL2MvZAorCTEgYS9iL2MvZAorCTIgYS9iL2MvZAorCTIgYS9iL2MvZQorCTAgYS94CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzMtd2F5ICgzKScgJworCXNldHRyZWUgQS0wMTAgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgTy0wMTAgQS0wMTAgQi0wMTAgJiYKKwljaGVja2luZGV4IDw8LUVPRgorCTIgdAorCTEgdC0wCisJMiB0LTAKKwkxIHQvMQorCTMgdC8xCisJMSB0LzIKKwkwIHQ9MworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyLXdheSAoMSknICcKKwlzZXR0cmVlIE8tMDIwICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IE8tMDIwIEEtMDIwICYmCisJY2hlY2tpbmRleCA8PC1FT0YKKwkwIGRzL2RtYS9pb2F0L01ha2VmaWxlCisJMCBkcy9kbWEvaW9hdC9yZWdpc3RlcnMuaAorCUVPRgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMTMtbG9vc2Utb2JqZWN0LWZvcm1hdC5zaCBiL3QvdDEwMTMtbG9vc2Utb2JqZWN0LWZvcm1hdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYmY1ZjJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAxMy1sb29zZS1vYmplY3QtZm9ybWF0LnNoCkBAIC0wLDAgKzEsNjYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgUm9iZXJ0byBUeWxleQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdDb3JyZWN0bHkgaWRlbnRpZnkgYW5kIHBhcnNlIGxvb3NlIG9iamVjdCBoZWFkZXJzCisKK1RoZXJlIGFyZSB0d28gZmlsZSBmb3JtYXRzIGZvciBsb29zZSBvYmplY3RzIC0gdGhlIG9yaWdpbmFsIHN0YW5kYXJkCitmb3JtYXQsIGFuZCB0aGUgZXhwZXJpbWVudGFsIGZvcm1hdCBpbnRyb2R1Y2VkIHdpdGggR2l0IHYxLjQuMywgbGF0ZXIKK2RlcHJlY2F0ZWQgd2l0aCB2MS41LjMuIEFsdGhvdWdoIEdpdCBubyBsb25nZXIgd3JpdGVzIHRoZQorZXhwZXJpbWVudGFsIGZvcm1hdCwgb2JqZWN0cyBpbiBib3RoIGZvcm1hdHMgbXVzdCBiZSByZWFkLCB3aXRoIHRoZQorZm9ybWF0IGZvciBhIGdpdmVuIGZpbGUgYmVpbmcgZGV0ZXJtaW5lZCBieSB0aGUgaGVhZGVyLgorCitEZXRlY3RpbmcgZmlsZSBmb3JtYXQgYmFzZWQgb24gaGVhZGVyIGlzIG5vdCBlbnRpcmVseSB0cml2aWFsLCBub3QKK2xlYXN0IGJlY2F1c2UgdGhlIGZpcnN0IGJ5dGUgb2YgYSB6bGliLWRlZmxhdGVkIHN0cmVhbSB3aWxsIHZhcnkKK2RlcGVuZGluZyBvbiBob3cgbXVjaCBtZW1vcnkgd2FzIGFsbG9jYXRlZCBmb3IgdGhlIGRlZmxhdGlvbiB3aW5kb3cKK2J1ZmZlciB3aGVuIHRoZSBvYmplY3Qgd2FzIHdyaXR0ZW4gb3V0IChmb3IgZXhhbXBsZSA0S0Igb24gQW5kcm9pZCwKK3JhdGhlciB0aGF0IDMyS0Igb24gYSBub3JtYWwgUEMpLgorCitUaGUgbG9vc2Ugb2JqZWN0cyB1c2VkIGFzIHRlc3QgdmVjdG9ycyBoYXZlIGJlZW4gZ2VuZXJhdGVkIHdpdGggdGhlCitmb2xsb3dpbmcgR2l0IHZlcnNpb25zOgorCitzdGFuZGFyZCBmb3JtYXQ6IEdpdCB2MS43LjQuMQorZXhwZXJpbWVudGFsIGZvcm1hdDogR2l0IHYxLjQuMyAobGVnYWN5aGVhZGVycz1mYWxzZSkKK3N0YW5kYXJkIGZvcm1hdCwgZGVmbGF0ZWQgd2l0aCA0S0Igd2luZG93IHNpemU6IEFnaXQvSkdpdCBvbiBBbmRyb2lkCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCithc3NlcnRfYmxvYl9lcXVhbHMoKSB7CisJcHJpbnRmICIlcyIgIiQyIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgIiQxIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWNwIC1SICIkVEVTVF9ESVJFQ1RPUlkvdDEwMTMvb2JqZWN0cyIgLmdpdC8gJiYKKwlnaXQgLS12ZXJzaW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgc3RhbmRhcmQtZm9ybWF0IGxvb3NlIG9iamVjdHMnICcKKwlnaXQgY2F0LWZpbGUgdGFnIDhkNGUzNjBkNmM3MGZiZDcyNDExOTkxYzAyYTA5YzQ0MmNmN2E5ZmEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IDZiYWVlMDU0MGVhOTkwZDk3NjFhM2ViOWFiMTgzMDAzYTcxYzM2OTYgJiYKKwlnaXQgbHMtdHJlZSA3YTM3Yjg4N2E3Mzc5MWQxMmQyNmMwZDNlMzk1NjhhOGZiMGZhNmU4ICYmCisJYXNzZXJ0X2Jsb2JfZXF1YWxzICIyNTdjYzU2NDJjYjFhMDU0ZjA4Y2M4M2YyZDk0M2U1NmZkM2ViZTk5IiAiZm9vJExGIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIGV4cGVyaW1lbnRhbC1mb3JtYXQgbG9vc2Ugb2JqZWN0cycgJworCWdpdCBjYXQtZmlsZSB0YWcgNzZlN2ZhOTk0MWY0ZDVmOTdmNjRmZWE2NWEyY2JhNDM2YmM3OWNiYiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgNzg3NWM2MjM3ZDNmY2RkMGFjMmYwZGVjYzdkM2ZhNmE1MGI2NmMwOSAmJgorCWdpdCBscy10cmVlIDk1YjE2MjVkZTNiYThiMjIxNGQxZTBkMDU5MTEzOGFlYTczM2Y2NGYgJiYKKwlhc3NlcnRfYmxvYl9lcXVhbHMgIjJlNjVlZmUyYTE0NWRkYTdlZTUxZDE3NDEyOTlmODQ4ZTViZjc1MmUiICJhIiAmJgorCWFzc2VydF9ibG9iX2VxdWFscyAiOWFlOWU4NmI3YmQ2Y2IxNDcyZDkzNzM3MDJkODI0OTk3M2RhMDgzMiIgImFiIiAmJgorCWFzc2VydF9ibG9iX2VxdWFscyAiODVkZjUwNzg1ZDYyZDNiMDVhYjAzZDljYmY3ZTRhMGI0OTQ0OTczMCIgImFiY2QiICYmCisJYXNzZXJ0X2Jsb2JfZXF1YWxzICIxNjU2ZjkyMzNkOTk5ZjYxZWYyM2VmMzkwYjljNzFkNzUzOTlmNDM1IiAiYWJjZGVmZ2giICYmCisJYXNzZXJ0X2Jsb2JfZXF1YWxzICIxZTcyYTZiMmM0YTU3N2FiMDMzODg2MGZhOWZlODdmNzYxZmM5YmJkIiAiYWJjZGVmZ2hpIiAmJgorCWFzc2VydF9ibG9iX2VxdWFscyAiNzBlNmE4M2Q4ZGNiMjZmYzhiYzBjZjcwMmUyZGRlYjZhZGNhMThmZCIgImFiY2RlZmdoaWprbG1ub3AiICYmCisJYXNzZXJ0X2Jsb2JfZXF1YWxzICJiZDE1MDQ1ZjZjZThmZjc1NzQ3NTYyMTczNjQwNDU2YTM5NDQxMmM4IiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIHN0YW5kYXJkLWZvcm1hdCBvYmplY3RzIGRlZmxhdGVkIHdpdGggc21hbGxlciB3aW5kb3cgYnVmZmVyJyAnCisJZ2l0IGNhdC1maWxlIHRhZyBmODE2ZDUyNTU4NTVhYzE2MDY1MmVlNTI1M2IwNmNkOGVlMTQxNjVhICYmCisJZ2l0IGNhdC1maWxlIHRhZyAxNDljZWRiNWM0NjkyOWQxOGUwZjExOGU5ZmEzMTkyNzQ4N2FmM2I2CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzE0LzljZWRiNWM0NjkyOWQxOGUwZjExOGU5ZmEzMTkyNzQ4N2FmM2I2IGIvdC90MTAxMy9vYmplY3RzLzE0LzljZWRiNWM0NjkyOWQxOGUwZjExOGU5ZmEzMTkyNzQ4N2FmM2I2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MmZkMTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvMTQvOWNlZGI1YzQ2OTI5ZDE4ZTBmMTE4ZTlmYTMxOTI3NDg3YWYzYjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzE2LzU2ZjkyMzNkOTk5ZjYxZWYyM2VmMzkwYjljNzFkNzUzOTlmNDM1IGIvdC90MTAxMy9vYmplY3RzLzE2LzU2ZjkyMzNkOTk5ZjYxZWYyM2VmMzkwYjljNzFkNzUzOTlmNDM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzlkNzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvMTYvNTZmOTIzM2Q5OTlmNjFlZjIzZWYzOTBiOWM3MWQ3NTM5OWY0MzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzFlLzcyYTZiMmM0YTU3N2FiMDMzODg2MGZhOWZlODdmNzYxZmM5YmJkIGIvdC90MTAxMy9vYmplY3RzLzFlLzcyYTZiMmM0YTU3N2FiMDMzODg2MGZhOWZlODdmNzYxZmM5YmJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNzA2MzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvMWUvNzJhNmIyYzRhNTc3YWIwMzM4ODYwZmE5ZmU4N2Y3NjFmYzliYmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzI1LzdjYzU2NDJjYjFhMDU0ZjA4Y2M4M2YyZDk0M2U1NmZkM2ViZTk5IGIvdC90MTAxMy9vYmplY3RzLzI1LzdjYzU2NDJjYjFhMDU0ZjA4Y2M4M2YyZDk0M2U1NmZkM2ViZTk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkY2Y3MDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvMjUvN2NjNTY0MmNiMWEwNTRmMDhjYzgzZjJkOTQzZTU2ZmQzZWJlOTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzJlLzY1ZWZlMmExNDVkZGE3ZWU1MWQxNzQxMjk5Zjg0OGU1YmY3NTJlIGIvdC90MTAxMy9vYmplY3RzLzJlLzY1ZWZlMmExNDVkZGE3ZWU1MWQxNzQxMjk5Zjg0OGU1YmY3NTJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjJjNDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvMmUvNjVlZmUyYTE0NWRkYTdlZTUxZDE3NDEyOTlmODQ4ZTViZjc1MmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzZiL2FlZTA1NDBlYTk5MGQ5NzYxYTNlYjlhYjE4MzAwM2E3MWMzNjk2IGIvdC90MTAxMy9vYmplY3RzLzZiL2FlZTA1NDBlYTk5MGQ5NzYxYTNlYjlhYjE4MzAwM2E3MWMzNjk2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMmYwMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvNmIvYWVlMDU0MGVhOTkwZDk3NjFhM2ViOWFiMTgzMDAzYTcxYzM2OTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzcwL2U2YTgzZDhkY2IyNmZjOGJjMGNmNzAyZTJkZGViNmFkY2ExOGZkIGIvdC90MTAxMy9vYmplY3RzLzcwL2U2YTgzZDhkY2IyNmZjOGJjMGNmNzAyZTJkZGViNmFkY2ExOGZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZjcxYTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvNzAvZTZhODNkOGRjYjI2ZmM4YmMwY2Y3MDJlMmRkZWI2YWRjYTE4ZmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzc2L2U3ZmE5OTQxZjRkNWY5N2Y2NGZlYTY1YTJjYmE0MzZiYzc5Y2JiIGIvdC90MTAxMy9vYmplY3RzLzc2L2U3ZmE5OTQxZjRkNWY5N2Y2NGZlYTY1YTJjYmE0MzZiYzc5Y2JiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNGU5YTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvNzYvZTdmYTk5NDFmNGQ1Zjk3ZjY0ZmVhNjVhMmNiYTQzNmJjNzljYmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzc4Lzc1YzYyMzdkM2ZjZGQwYWMyZjBkZWNjN2QzZmE2YTUwYjY2YzA5IGIvdC90MTAxMy9vYmplY3RzLzc4Lzc1YzYyMzdkM2ZjZGQwYWMyZjBkZWNjN2QzZmE2YTUwYjY2YzA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZDI4YmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvNzgvNzVjNjIzN2QzZmNkZDBhYzJmMGRlY2M3ZDNmYTZhNTBiNjZjMDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzdhLzM3Yjg4N2E3Mzc5MWQxMmQyNmMwZDNlMzk1NjhhOGZiMGZhNmU4IGIvdC90MTAxMy9vYmplY3RzLzdhLzM3Yjg4N2E3Mzc5MWQxMmQyNmMwZDNlMzk1NjhhOGZiMGZhNmU4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTdiMjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvN2EvMzdiODg3YTczNzkxZDEyZDI2YzBkM2UzOTU2OGE4ZmIwZmE2ZTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzg1L2RmNTA3ODVkNjJkM2IwNWFiMDNkOWNiZjdlNGEwYjQ5NDQ5NzMwIGIvdC90MTAxMy9vYmplY3RzLzg1L2RmNTA3ODVkNjJkM2IwNWFiMDNkOWNiZjdlNGEwYjQ5NDQ5NzMwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmY3NDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvODUvZGY1MDc4NWQ2MmQzYjA1YWIwM2Q5Y2JmN2U0YTBiNDk0NDk3MzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzhkLzRlMzYwZDZjNzBmYmQ3MjQxMTk5MWMwMmEwOWM0NDJjZjdhOWZhIGIvdC90MTAxMy9vYmplY3RzLzhkLzRlMzYwZDZjNzBmYmQ3MjQxMTk5MWMwMmEwOWM0NDJjZjdhOWZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDFlOTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvOGQvNGUzNjBkNmM3MGZiZDcyNDExOTkxYzAyYTA5YzQ0MmNmN2E5ZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzk1L2IxNjI1ZGUzYmE4YjIyMTRkMWUwZDA1OTExMzhhZWE3MzNmNjRmIGIvdC90MTAxMy9vYmplY3RzLzk1L2IxNjI1ZGUzYmE4YjIyMTRkMWUwZDA1OTExMzhhZWE3MzNmNjRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzQ2YjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvOTUvYjE2MjVkZTNiYThiMjIxNGQxZTBkMDU5MTEzOGFlYTczM2Y2NGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzLzlhL2U5ZTg2YjdiZDZjYjE0NzJkOTM3MzcwMmQ4MjQ5OTczZGEwODMyIGIvdC90MTAxMy9vYmplY3RzLzlhL2U5ZTg2YjdiZDZjYjE0NzJkOTM3MzcwMmQ4MjQ5OTczZGEwODMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODMxNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvOWEvZTllODZiN2JkNmNiMTQ3MmQ5MzczNzAyZDgyNDk5NzNkYTA4MzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzL2JkLzE1MDQ1ZjZjZThmZjc1NzQ3NTYyMTczNjQwNDU2YTM5NDQxMmM4IGIvdC90MTAxMy9vYmplY3RzL2JkLzE1MDQ1ZjZjZThmZjc1NzQ3NTYyMTczNjQwNDU2YTM5NDQxMmM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYmYyMzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvYmQvMTUwNDVmNmNlOGZmNzU3NDc1NjIxNzM2NDA0NTZhMzk0NDEyYzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIGIvdC90MTAxMy9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNGNmMTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAxMy9vYmplY3RzL2Y4LzE2ZDUyNTU4NTVhYzE2MDY1MmVlNTI1M2IwNmNkOGVlMTQxNjVhIGIvdC90MTAxMy9vYmplY3RzL2Y4LzE2ZDUyNTU4NTVhYzE2MDY1MmVlNTI1M2IwNmNkOGVlMTQxNjVhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Yjc1YWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzL29iamVjdHMvZjgvMTZkNTI1NTg1NWFjMTYwNjUyZWU1MjUzYjA2Y2Q4ZWUxNDE2NWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2ggYi90L3QxMDIwLXN1YmRpcmVjdG9yeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMjNhYzBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2gKQEAgLTAsMCArMSwxOTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVHJ5IHZhcmlvdXMgY29yZS1sZXZlbCBjb21tYW5kcyBpbiBzdWJkaXJlY3RvcnkuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmVhZC10cmVlLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWxvbmc9ImEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiIgJiYKKwlmb3IgYyBpbiAkbG9uZzsgZG8gZWNobyAkYzsgZG9uZSA+b25lICYmCisJbWtkaXIgZGlyICYmCisJZm9yIGMgaW4geCB5IHogJGxvbmcgYSBiIGM7IGRvIGVjaG8gJGM7IGRvbmUgPmRpci90d28gJiYKKwljcCBvbmUgb3JpZ2luYWwub25lICYmCisJY3AgZGlyL3R3byBvcmlnaW5hbC50d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IGFuZCBscy1maWxlcycgJworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb25lICYmCisJY2FzZSAiYGdpdCBscy1maWxlc2AiIGluCisJb25lKSBlY2hvIHBhc3Mgb25lIDs7CisJKikgZWNobyBiYWQgb25lOyBleGl0IDEgOzsKKwllc2FjICYmCisJKAorCQljZCBkaXIgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0d28gJiYKKwkJY2FzZSAiYGdpdCBscy1maWxlc2AiIGluCisJCXR3bykgZWNobyBwYXNzIHR3byA7OworCQkqKSBlY2hvIGJhZCB0d287IGV4aXQgMSA7OworCQllc2FjCisJKSAmJgorCWNhc2UgImBnaXQgbHMtZmlsZXNgIiBpbgorCWRpci90d28iJExGIm9uZSkgZWNobyBwYXNzIGJvdGggOzsKKwkqKSBlY2hvIGJhZDsgZXhpdCAxIDs7CisJZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZScgJworCXR3bz1gZ2l0IGxzLWZpbGVzIC1zIGRpci90d29gICYmCisJdHdvPWBleHByICIkdHdvIiA6ICJbMC03XSogXFwoWzAtOWEtZl0qXFwpImAgJiYKKwllY2hvICIkdHdvIiAmJgorCWdpdCBjYXQtZmlsZSAtcCAiJHR3byIgPmFjdHVhbCAmJgorCWNtcCBkaXIvdHdvIGFjdHVhbCAmJgorCSgKKwkJY2QgZGlyICYmCisJCWdpdCBjYXQtZmlsZSAtcCAiJHR3byIgPmFjdHVhbCAmJgorCQljbXAgdHdvIGFjdHVhbAorCSkKKycKK3JtIC1mIGFjdHVhbCBkaXIvYWN0dWFsCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMnICcKKwllY2hvIGEgPj5vbmUgJiYKKwllY2hvIGQgPj5kaXIvdHdvICYmCisJY2FzZSAiYGdpdCBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5YCIgaW4KKwlkaXIvdHdvIiRMRiJvbmUpIGVjaG8gcGFzcyB0b3AgOzsKKwkqKSBlY2hvIGJhZCB0b3A7IGV4aXQgMSA7OworCWVzYWMgJiYKKwkjIGRpZmYgc2hvdWxkIG5vdCBvbWl0IGxlYWRpbmcgcGF0aHMKKwkoCisJCWNkIGRpciAmJgorCQljYXNlICJgZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHlgIiBpbgorCQlkaXIvdHdvIiRMRiJvbmUpIGVjaG8gcGFzcyBzdWJkaXIgOzsKKwkJKikgZWNobyBiYWQgc3ViZGlyOyBleGl0IDEgOzsKKwkJZXNhYyAmJgorCQljYXNlICJgZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLmAiIGluCisJCWRpci90d28pIGVjaG8gcGFzcyBzdWJkaXIgbGltaXRlZCA7OworCQkqKSBlY2hvIGJhZCBzdWJkaXIgbGltaXRlZDsgZXhpdCAxIDs7CisJCWVzYWMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlLXRyZWUnICcKKwl0b3A9YGdpdCB3cml0ZS10cmVlYCAmJgorCWVjaG8gJHRvcCAmJgorCSgKKwkJY2QgZGlyICYmCisJCXN1Yj1gZ2l0IHdyaXRlLXRyZWVgICYmCisJCWVjaG8gJHN1YiAmJgorCQl0ZXN0ICJ6JHRvcCIgPSAieiRzdWIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dC1pbmRleCcgJworCWdpdCBjaGVja291dC1pbmRleCAtZiAtdSBvbmUgJiYKKwljbXAgb25lIG9yaWdpbmFsLm9uZSAmJgorCSgKKwkJY2QgZGlyICYmCisJCWdpdCBjaGVja291dC1pbmRleCAtZiAtdSB0d28gJiYKKwkJY21wIHR3byAuLi9vcmlnaW5hbC50d28KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZScgJworCXJtIC1mIG9uZSBkaXIvdHdvICYmCisJdHJlZT1gZ2l0IHdyaXRlLXRyZWVgICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgIiR0cmVlIiAmJgorCWNtcCBvbmUgb3JpZ2luYWwub25lICYmCisJY21wIGRpci90d28gb3JpZ2luYWwudHdvICYmCisJKAorCQljZCBkaXIgJiYKKwkJcm0gLWYgdHdvICYmCisJCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICIkdHJlZSIgJiYKKwkJY21wIHR3byAuLi9vcmlnaW5hbC50d28gJiYKKwkJY21wIC4uL29uZSAuLi9vcmlnaW5hbC5vbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIGV4cGFuc2lvbicgJworCSgKKwkJZ2l0IGNvbmZpZyBhbGlhcy5zcyBzdGF0dXMgJiYKKwkJY2QgZGlyICYmCisJCWdpdCBzdGF0dXMgJiYKKwkJZ2l0IHNzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE5PVF9NSU5HVyAnIWFsaWFzIGV4cGFuc2lvbicgJworCXB3ZCA+ZXhwZWN0ICYmCisJKAorCQlnaXQgY29uZmlnIGFsaWFzLnRlc3QgIXB3ZCAmJgorCQljZCBkaXIgJiYKKwkJZ2l0IHRlc3QgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9QUkVGSVggZm9yICFhbGlhcycgJworCXByaW50ZiAiZGlyLyIgPmV4cGVjdCAmJgorCSgKKwkJZ2l0IGNvbmZpZyBhbGlhcy50ZXN0ICIhc2ggLWMgXCJwcmludGYgXCRHSVRfUFJFRklYXCIiICYmCisJCWNkIGRpciAmJgorCQlnaXQgdGVzdCA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1BSRUZJWCBmb3IgYnVpbHQtaW5zJyAnCisJIyBVc2UgR0lUX0VYVEVSTkFMX0RJRkYgdG8gdGVzdCB0aGF0IHRoZSAiZGlmZiIgYnVpbHQtaW4KKwkjIHJlY2VpdmVzIHRoZSBHSVRfUFJFRklYIHZhcmlhYmxlLgorCXByaW50ZiAiZGlyLyIgPmV4cGVjdCAmJgorCXByaW50ZiAiIyEvYmluL3NoXG4iID5kaWZmICYmCisJcHJpbnRmICJwcmludGYgXCJcJEdJVF9QUkVGSVhcIiIgPj5kaWZmICYmCisJY2htb2QgK3ggZGlmZiAmJgorCSgKKwkJY2QgZGlyICYmCisJCXByaW50ZiAiY2hhbmdlIiA+dHdvICYmCisJCWVudiBHSVRfRVhURVJOQUxfRElGRj0uL2RpZmYgZ2l0IGRpZmYgPi4uL2FjdHVhbAorCQlnaXQgY2hlY2tvdXQgLS0gdHdvCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsZS9yZXYgYW1iaWd1aXR5IGNoZWNrIGluc2lkZSAuZ2l0JyAnCisJZ2l0IGNvbW1pdCAtYSAtbSAxICYmCisJKAorCQljZCAuZ2l0ICYmCisJCWdpdCBzaG93IC1zIEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUvcmV2IGFtYmlndWl0eSBjaGVjayBpbnNpZGUgYSBiYXJlIHJlcG8nICcKKwlnaXQgY2xvbmUgLXMgLS1iYXJlIC5naXQgZm9vLmdpdCAmJgorCSgKKwkJY2QgZm9vLmdpdCAmJgorCQlHSVRfRElSPS4gZ2l0IHNob3cgLXMgSEVBRAorCSkKKycKKworIyBUaGlzIHN0aWxsIGRvZXMgbm90IHdvcmsgYXMgaXQgc2hvdWxkLi4uCis6IHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUvcmV2IGFtYmlndWl0eSBjaGVjayBpbnNpZGUgYSBiYXJlIHJlcG8nICcKKwlnaXQgY2xvbmUgLXMgLS1iYXJlIC5naXQgZm9vLmdpdCAmJgorCSgKKwkJY2QgZm9vLmdpdCAmJgorCQlnaXQgc2hvdyAtcyBIRUFECisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkZXRlY3Rpb24gc2hvdWxkIG5vdCBiZSBmb29sZWQgYnkgYSBzeW1saW5rJyAnCisJcm0gLWZyIGZvby5naXQgJiYKKwlnaXQgY2xvbmUgLXMgLmdpdCBhbm90aGVyICYmCisJbG4gLXMgYW5vdGhlciB5ZXRhbm90aGVyICYmCisJKAorCQljZCB5ZXRhbm90aGVyLy5naXQgJiYKKwkJZ2l0IHNob3cgLXMgSEVBRAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDIxLXJlcmVyZS1pbi13b3JrZGlyLnNoIGIvdC90MTAyMS1yZXJlcmUtaW4td29ya2Rpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDFlMDcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAyMS1yZXJlcmUtaW4td29ya2Rpci5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVyZXJlIHJ1biBpbiBhIHdvcmtkaXInCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBzZXR1cCAnCisJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJPndvcmxkICYmCisJZ2l0IGFkZCB3b3JsZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZWNobyBoZWxsbyA+d29ybGQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGhlbGxvICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCWVjaG8gZ29vZGJ5ZSA+d29ybGQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGdvb2RieWUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncmVyZXJlIGluIHdvcmtkaXInICcKKwlybSAtcmYgLmdpdC9yci1jYWNoZSAmJgorCSIkU0hFTExfUEFUSCIgIiRURVNUX0RJUkVDVE9SWS8uLi9jb250cmliL3dvcmtkaXIvZ2l0LW5ldy13b3JrZGlyIiAuIHdvcmsgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNpZGUgJiYKKwkJZ2l0IHJlcmVyZSBzdGF0dXMgPmFjdHVhbCAmJgorCQllY2hvIHdvcmxkID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUaGlzIGZhaWxzIGJlY2F1c2Ugd2UgZG9uJ3QgcmVzb2x2ZSByZWxhdGl2ZSBzeW1saW5rIGluIG1rZGlyX2luX2dpdGRpcigpCisjIEZvciB0aGUgcHVycG9zZSBvZiBoZWxwaW5nIGNvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIgdXNlcnMsIHdlIGRvIG5vdAorIyBoYXZlIHRvIHN1cHBvcnQgcmVsYXRpdmUgc3ltbGlua3MsIGJ1dCBpdCBtaWdodCBiZSBuaWNlciB0byBtYWtlIHRoaXMgd29yaworIyB3aXRoIGEgcmVsYXRpdmUgc3ltYm9saWMgbGluayBzb21lZGF5LgordGVzdF9leHBlY3RfZmFpbHVyZSBTWU1MSU5LUyAncmVyZXJlIGluIHdvcmtkaXIgKHJlbGF0aXZlKScgJworCXJtIC1yZiAuZ2l0L3JyLWNhY2hlICYmCisJIiRTSEVMTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZLy4uL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIiIC4ga3JvdyAmJgorCSgKKwkJY2Qga3JvdyAmJgorCQlybSAtZiAuZ2l0L3JyLWNhY2hlICYmCisJCWxuIC1zIC4uLy5naXQvcnItY2FjaGUgLmdpdC9yci1jYWNoZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2lkZSAmJgorCQlnaXQgcmVyZXJlIHN0YXR1cyA+YWN0dWFsICYmCisJCWVjaG8gd29ybGQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwNTAtbGFyZ2Uuc2ggYi90L3QxMDUwLWxhcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkMTA1MjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDUwLWxhcmdlLnNoCkBAIC0wLDAgKzEsMTY2IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhZGRpbmcgYW5kIGNoZWNraW5nIG91dCBsYXJnZSBibG9icycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCSMgY2xvbmUgZG9lcyBub3QgYWxsb3cgdXMgdG8gcGFzcyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgdG8KKwkjIG5ldyByZXBvcywgc28gc2V0IGNvcmUuYmlnZmlsZXRocmVzaG9sZCBnbG9iYWxseQorCWdpdCBjb25maWcgLS1nbG9iYWwgY29yZS5iaWdmaWxldGhyZXNob2xkIDIwMGsgJiYKKwllY2hvIFggfCBkZCBvZj1sYXJnZTEgYnM9MWsgc2Vlaz0yMDAwICYmCisJZWNobyBYIHwgZGQgb2Y9bGFyZ2UyIGJzPTFrIHNlZWs9MjAwMCAmJgorCWVjaG8gWCB8IGRkIG9mPWxhcmdlMyBicz0xayBzZWVrPTIwMDAgJiYKKwllY2hvIFkgfCBkZCBvZj1odWdlIGJzPTFrIHNlZWs9MjUwMCAmJgorCUdJVF9BTExPQ19MSU1JVD0xNTAwICYmCisJZXhwb3J0IEdJVF9BTExPQ19MSU1JVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBsYXJnZSBmaWxlIG9yIHR3bycgJworCWdpdCBhZGQgbGFyZ2UxIGh1Z2UgbGFyZ2UyICYmCisJIyBtYWtlIHN1cmUgd2UgZ290IGEgc2luZ2xlIHBhY2tmaWxlIGFuZCBubyBsb29zZSBvYmplY3RzCisJYmFkPSBjb3VudD0wIGlkeD0gJiYKKwlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucGFjaworCWRvCisJCWNvdW50PSQoKCAkY291bnQgKyAxICkpCisJCWlmIHRlc3QgLWYgIiRwIiAmJiBpZHg9JHtwJS5wYWNrfS5pZHggJiYgdGVzdCAtZiAiJGlkeCIKKwkJdGhlbgorCQkJY29udGludWUKKwkJZmkKKwkJYmFkPXQKKwlkb25lICYmCisJdGVzdCAteiAiJGJhZCIgJiYKKwl0ZXN0ICRjb3VudCA9IDEgJiYKKwljbnQ9JChnaXQgc2hvdy1pbmRleCA8IiRpZHgiIHwgd2MgLWwpICYmCisJdGVzdCAkY250ID0gMiAmJgorCWZvciBsIGluIC5naXQvb2JqZWN0cy8/Py8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PworCWRvCisJCXRlc3QgLWYgIiRsIiB8fCBjb250aW51ZQorCQliYWQ9dAorCWRvbmUgJiYKKwl0ZXN0IC16ICIkYmFkIiAmJgorCisJIyBhdHRlbXB0IHRvIGFkZCBhbm90aGVyIGNvcHkgb2YgdGhlIHNhbWUKKwlnaXQgYWRkIGxhcmdlMyAmJgorCWJhZD0gY291bnQ9MCAmJgorCWZvciBwIGluIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrCisJZG8KKwkJY291bnQ9JCgoICRjb3VudCArIDEgKSkKKwkJaWYgdGVzdCAtZiAiJHAiICYmIGlkeD0ke3AlLnBhY2t9LmlkeCAmJiB0ZXN0IC1mICIkaWR4IgorCQl0aGVuCisJCQljb250aW51ZQorCQlmaQorCQliYWQ9dAorCWRvbmUgJiYKKwl0ZXN0IC16ICIkYmFkIiAmJgorCXRlc3QgJGNvdW50ID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhIGxhcmdlIGZpbGUnICcKKwlsYXJnZTE9JChnaXQgcmV2LXBhcnNlIDpsYXJnZTEpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJGxhcmdlMSBhbm90aGVyICYmCisJZ2l0IGNoZWNrb3V0IGFub3RoZXIgJiYKKwljbXAgbGFyZ2UxIGFub3RoZXIgOyMgdGhpcyBtdXN0IG5vdCBiZSB0ZXN0X2NtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrc2l6ZSBsaW1pdCcgJworCXRlc3RfY3JlYXRlX3JlcG8gbWlkICYmCisJKAorCQljZCBtaWQgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgNjRrICYmCisJCWdpdCBjb25maWcgcGFjay5wYWNrc2l6ZWxpbWl0IDI1NmsgJiYKKworCQkjIG1pZDEgYW5kIG1pZDIgd2lsbCBmaXQgd2l0aGluIDI1NmsgbGltaXQgYnV0CisJCSMgYXBwZW5kaW5nIG1pZDMgd2lsbCBidXN0IHRoZSBsaW1pdCBhbmQgd2lsbAorCQkjIHJlc3VsdCBpbiBhIHNlcGFyYXRlIHBhY2tmaWxlLgorCQl0ZXN0LWdlbnJhbmRvbSAiYSIgJCgoIDY2ICogMTAyNCApKSA+bWlkMSAmJgorCQl0ZXN0LWdlbnJhbmRvbSAiYiIgJCgoIDgwICogMTAyNCApKSA+bWlkMiAmJgorCQl0ZXN0LWdlbnJhbmRvbSAiYyIgJCgoIDEyOCAqIDEwMjQgKSkgPm1pZDMgJiYKKwkJZ2l0IGFkZCBtaWQxIG1pZDIgbWlkMyAmJgorCisJCWNvdW50PTAKKwkJZm9yIHBpIGluIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5pZHgKKwkJZG8KKwkJCXRlc3QgLWYgIiRwaSIgJiYgY291bnQ9JCgoICRjb3VudCArIDEgKSkKKwkJZG9uZSAmJgorCQl0ZXN0ICRjb3VudCA9IDIgJiYKKworCQkoCisJCQlnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8bWlkMQorCQkJZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPG1pZDIKKwkJCWdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxtaWQzCisJCSkgfAorCQlzb3J0ID5leHBlY3QgJiYKKworCQlmb3IgcGkgaW4gLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLmlkeAorCQlkbworCQkJZ2l0IHNob3ctaW5kZXggPCIkcGkiCisJCWRvbmUgfAorCQlzZWQgLWUgInMvXlswLTldKiBcKFswLTlhLWZdKlwpIC4qL1wxLyIgfAorCQlzb3J0ID5hY3R1YWwgJiYKKworCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tcmF3JyAnCisJZ2l0IGNvbW1pdCAtcSAtbSBpbml0aWFsICYmCisJZWNobyBtb2RpZmllZCA+PmxhcmdlMSAmJgorCWdpdCBhZGQgbGFyZ2UxICYmCisJZ2l0IGNvbW1pdCAtcSAtbSBtb2RpZmllZCAmJgorCWdpdCBkaWZmIC0tcmF3IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhc2gtb2JqZWN0JyAnCisJZ2l0IGhhc2gtb2JqZWN0IGxhcmdlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSBhIGxhcmdlIGZpbGUnICcKKwlnaXQgY2F0LWZpbGUgYmxvYiA6bGFyZ2UxID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgYSBsYXJnZSBmaWxlIGZyb20gYSB0YWcnICcKKwlnaXQgdGFnIC1tIGxhcmdlZmlsZSBsYXJnZWZpbGV0YWcgOmxhcmdlMSAmJgorCWdpdCBjYXQtZmlsZSBibG9iIGxhcmdlZmlsZXRhZyA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1zaG93IGEgbGFyZ2UgZmlsZScgJworCWdpdCBzaG93IDpsYXJnZTEgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2snICcKKwlnaXQgY2xvbmUgZmlsZTovLyJgcHdkYCIvLmdpdCBmb28gJiYKKwlHSVRfRElSPW5vbi1leGlzdGVudCBnaXQgaW5kZXgtcGFjayAtLXN0cmljdCAtLXZlcmlmeSBmb28vLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjaycgJworCWdpdCByZXBhY2sgLWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stb2JqZWN0cyB3aXRoIGxhcmdlIGxvb3NlIG9iamVjdCcgJworCVNIQTE9YGdpdCBoYXNoLW9iamVjdCBodWdlYCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gbG9vc2UgJiYKKwllY2hvICRTSEExIHwgZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCB8CisJCUdJVF9BTExPQ19MSU1JVD0wIEdJVF9ESVI9bG9vc2UvLmdpdCBnaXQgdW5wYWNrLW9iamVjdHMgJiYKKwllY2hvICRTSEExIHwgR0lUX0RJUj1sb29zZS8uZ2l0IGdpdCBwYWNrLW9iamVjdHMgcGFjayAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcGFja2VkICYmCisJbXYgcGFjay0qIHBhY2tlZC8uZ2l0L29iamVjdHMvcGFjayAmJgorCUdJVF9ESVI9cGFja2VkLy5naXQgZ2l0IGNhdC1maWxlIGJsb2IgJFNIQTEgPmFjdHVhbCAmJgorCWNtcCBodWdlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YXIgYWNoaXZpbmcnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgSEVBRCA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ppcCBhY2hpdmluZywgc3RvcmUgb25seScgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCAtMCBIRUFEID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnemlwIGFjaGl2aW5nLCBkZWZsYXRlJyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIEhFQUQgPi9kZXYvbnVsbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwNTEtbGFyZ2UtY29udmVyc2lvbi5zaCBiL3QvdDEwNTEtbGFyZ2UtY29udmVyc2lvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Yjc2NDBiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTA1MS1sYXJnZS1jb252ZXJzaW9uLnNoCkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNvbnZlcnNpb24gZmlsdGVycyBvbiBsYXJnZSBmaWxlcycKKy4gLi90ZXN0LWxpYi5zaAorCitzZXRfYXR0cigpIHsKKwl0ZXN0X3doZW5fZmluaXNoZWQgJ3JtIC1mIC5naXRhdHRyaWJ1dGVzJyAmJgorCWVjaG8gIiogJCoiID4uZ2l0YXR0cmlidXRlcworfQorCitjaGVja19pbnB1dCgpIHsKKwlnaXQgcmVhZC10cmVlIC0tZW1wdHkgJiYKKwlnaXQgYWRkIHNtYWxsIGxhcmdlICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOnNtYWxsID5zbWFsbC5pbmRleCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIDpsYXJnZSB8IGhlYWQgLW4gMSA+bGFyZ2UuaW5kZXggJiYKKwl0ZXN0X2NtcCBzbWFsbC5pbmRleCBsYXJnZS5pbmRleAorfQorCitjaGVja19vdXRwdXQoKSB7CisJcm0gLWYgc21hbGwgbGFyZ2UgJiYKKwlnaXQgY2hlY2tvdXQgc21hbGwgbGFyZ2UgJiYKKwloZWFkIC1uIDEgbGFyZ2UgPmxhcmdlLmhlYWQgJiYKKwl0ZXN0X2NtcCBzbWFsbCBsYXJnZS5oZWFkCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGlucHV0IHRlc3RzJyAnCisJcHJpbnRmICJcJElkOiBmb29cJFxcclxcbiIgPnNtYWxsICYmCisJY2F0IHNtYWxsIHNtYWxsID5sYXJnZSAmJgorCWdpdCBjb25maWcgY29yZS5iaWdmaWxldGhyZXNob2xkIDIwICYmCisJZ2l0IGNvbmZpZyBmaWx0ZXIudGVzdC5jbGVhbiAic2VkIHMvLiovQ0xFQU4vIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvY3JsZj10cnVlIGNvbnZlcnRzIG9uIGlucHV0JyAnCisJdGVzdF9jb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJY2hlY2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW9sPWNybGYgY29udmVydHMgb24gaW5wdXQnICcKKwlzZXRfYXR0ciBlb2w9Y3JsZiAmJgorCWNoZWNrX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lkZW50IGNvbnZlcnRzIG9uIGlucHV0JyAnCisJc2V0X2F0dHIgaWRlbnQgJiYKKwljaGVja19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2VyLWRlZmluZWQgZmlsdGVycyBjb252ZXJ0IG9uIGlucHV0JyAnCisJc2V0X2F0dHIgZmlsdGVyPXRlc3QgJiYKKwljaGVja19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvdXRwdXQgdGVzdHMnICcKKwllY2hvICJcJElkXCQiID5zbWFsbCAmJgorCWNhdCBzbWFsbCBzbWFsbCA+bGFyZ2UgJiYKKwlnaXQgYWRkIHNtYWxsIGxhcmdlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgNyAmJgorCWdpdCBjb25maWcgZmlsdGVyLnRlc3Quc211ZGdlICJzZWQgcy8uKi9TTVVER0UvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvY3JsZj10cnVlIGNvbnZlcnRzIG9uIG91dHB1dCcgJworCXRlc3RfY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWNoZWNrX291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlb2w9Y3JsZiBjb252ZXJ0cyBvbiBvdXRwdXQnICcKKwlzZXRfYXR0ciBlb2w9Y3JsZiAmJgorCWNoZWNrX291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2VyLWRlZmluZWQgZmlsdGVycyBjb252ZXJ0IG9uIG91dHB1dCcgJworCXNldF9hdHRyIGZpbHRlcj10ZXN0ICYmCisJY2hlY2tfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lkZW50IGNvbnZlcnRzIG9uIG91dHB1dCcgJworCXNldF9hdHRyIGlkZW50ICYmCisJcm0gLWYgc21hbGwgbGFyZ2UgJiYKKwlnaXQgY2hlY2tvdXQgc21hbGwgbGFyZ2UgJiYKKwlzZWQgLW4gInMvSWQ6IC4qL0lkOiBTSEEvcCIgPHNtYWxsID5zbWFsbC5jbGVhbiAmJgorCWhlYWQgLW4gMSBsYXJnZSA+bGFyZ2UuaGVhZCAmJgorCXNlZCAtbiAicy9JZDogLiovSWQ6IFNIQS9wIiA8bGFyZ2UuaGVhZCA+bGFyZ2UuY2xlYW4gJiYKKwl0ZXN0X2NtcCBzbWFsbC5jbGVhbiBsYXJnZS5jbGVhbgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDExMDAtY29tbWl0LXRyZWUtb3B0aW9ucy5zaCBiL3QvdDExMDAtY29tbWl0LXRyZWUtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mODQ1N2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTEwMC1jb21taXQtdHJlZS1vcHRpb25zLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDUgUmVuZSBTY2hhcmZlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjb21taXQtdHJlZSBvcHRpb25zIHRlc3QKKworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGdpdCBjb21taXQtdHJlZSBjYW4gY3JlYXRlIGEgc3BlY2lmaWMgY29tbWl0CitvYmplY3QgYnkgZGVmaW5pbmcgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGl0IHVuZGVyc3RhbmRzLgorCitBbHNvIG1ha2Ugc3VyZSB0aGF0IGNvbW1hbmQgbGluZSBwYXJzZXIgdW5kZXJzdGFuZHMgdGhlIG5vcm1hbAorImZsYWdzIGZpcnN0IGFuZCB0aGVuIG5vbiBmbGFnIGFyZ3VtZW50cyIgY29tbWFuZCBsaW5lLgorJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5leHBlY3RlZCA8PEVPRgordHJlZSA0YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CithdXRob3IgQXV0aG9yIE5hbWUgPGF1dGhvckBlbWFpbD4gMTExNzE0ODQwMCArMDAwMAorY29tbWl0dGVyIENvbW1pdHRlciBOYW1lIDxjb21taXR0ZXJAZW1haWw+IDExMTcxNTAyMDAgKzAwMDAKKworY29tbWVudCB0ZXh0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3Rlc3QgcHJlcGFyYXRpb246IHdyaXRlIGVtcHR5IHRyZWUnIFwKKyAgICAnZ2l0IHdyaXRlLXRyZWUgPnRyZWVpZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbnN0cnVjdCBjb21taXQnIFwKKyAgICAnZWNobyBjb21tZW50IHRleHQgfAorICAgICBHSVRfQVVUSE9SX05BTUU9IkF1dGhvciBOYW1lIiBcCisgICAgIEdJVF9BVVRIT1JfRU1BSUw9ImF1dGhvckBlbWFpbCIgXAorICAgICBHSVRfQVVUSE9SX0RBVEU9IjIwMDUtMDUtMjYgMjM6MDAiIFwKKyAgICAgR0lUX0NPTU1JVFRFUl9OQU1FPSJDb21taXR0ZXIgTmFtZSIgXAorICAgICBHSVRfQ09NTUlUVEVSX0VNQUlMPSJjb21taXR0ZXJAZW1haWwiIFwKKyAgICAgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBcCisgICAgIFRaPUdNVCBnaXQgY29tbWl0LXRyZWUgYGNhdCB0cmVlaWRgID5jb21taXRpZCAyPi9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlYWQgY29tbWl0JyBcCisgICAgJ2dpdCBjYXQtZmlsZSBjb21taXQgYGNhdCBjb21taXRpZGAgPmNvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbXBhcmUgY29tbWl0JyBcCisgICAgJ3Rlc3RfY21wIGV4cGVjdGVkIGNvbW1pdCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmbGFncyBhbmQgdGhlbiBub24gZmxhZ3MnICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIGNvbW1lbnQgdGV4dCB8CisJZ2l0IGNvbW1pdC10cmVlICQoY2F0IHRyZWVpZCkgPmNvbW1pdGlkICYmCisJZWNobyBjb21tZW50IHRleHQgfAorCWdpdCBjb21taXQtdHJlZSAkKGNhdCB0cmVlaWQpIC1wICQoY2F0IGNvbW1pdGlkKSA+Y2hpbGRpZC0xICYmCisJZWNobyBjb21tZW50IHRleHQgfAorCWdpdCBjb21taXQtdHJlZSAtcCAkKGNhdCBjb21taXRpZCkgJChjYXQgdHJlZWlkKSA+Y2hpbGRpZC0yICYmCisJdGVzdF9jbXAgY2hpbGRpZC0xIGNoaWxkaWQtMiAmJgorCWdpdCBjb21taXQtdHJlZSAkKGNhdCB0cmVlaWQpIC1tIGZvbyA+Y2hpbGRpZC0zICYmCisJZ2l0IGNvbW1pdC10cmVlIC1tIGZvbyAkKGNhdCB0cmVlaWQpID5jaGlsZGlkLTQgJiYKKwl0ZXN0X2NtcCBjaGlsZGlkLTMgY2hpbGRpZC00CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTIwMC10dXRvcmlhbC5zaCBiL3QvdDEyMDAtdHV0b3JpYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzk3Y2NiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEyMDAtdHV0b3JpYWwuc2gKQEAgLTAsMCArMSwyNjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdBIHNpbXBsZSB0dXJpYWwgaW4gdGhlIGZvcm0gb2YgYSB0ZXN0IGNhc2UnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iJyAgJworCWVjaG8gIkhlbGxvIFdvcmxkIiA+IGhlbGxvICYmCisJZWNobyAiU2lsbHkgZXhhbXBsZSIgPiBleGFtcGxlICYmCisKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGhlbGxvIGV4YW1wbGUgJiYKKworCXRlc3QgYmxvYiA9ICIkKGdpdCBjYXQtZmlsZSAtdCA1NTdkYjAzKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYiA1NTdkYjAzJyAnCisJdGVzdCAiSGVsbG8gV29ybGQiID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgNTU3ZGIwMykiCisnCisKK2VjaG8gIkl0J3MgYSBuZXcgZGF5IGZvciBnaXQiID4+aGVsbG8KK2NhdCA+IGRpZmYuZXhwZWN0IDw8IEVPRgorZGlmZiAtLWdpdCBhL2hlbGxvIGIvaGVsbG8KK2luZGV4IDU1N2RiMDMuLjI2MzQxNGYgMTAwNjQ0CistLS0gYS9oZWxsbworKysrIGIvaGVsbG8KK0BAIC0xICsxLDIgQEAKKyBIZWxsbyBXb3JsZAorK0l0J3MgYSBuZXcgZGF5IGZvciBnaXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcyAtcCcgJworCWdpdCBkaWZmLWZpbGVzIC1wID4gZGlmZi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBkaWZmLmV4cGVjdCBkaWZmLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZicgJworCWdpdCBkaWZmID4gZGlmZi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBkaWZmLmV4cGVjdCBkaWZmLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlJyAnCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlIDI+L2Rldi9udWxsKSAmJgorCXRlc3QgODk4OGRhMTVkMDc3ZDQ4MjlmYzUxZDg1NDRjMDk3ZGVmNjY0NGRiYiA9ICR0cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC1wIEhFQUQnICcKKwl0ZXN0X3RpY2sgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0PSQoZWNobyAiSW5pdGlhbCBjb21taXQiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgJGNvbW1pdCAmJgorCWdpdCBkaWZmLWluZGV4IC1wIEhFQUQgPiBkaWZmLm91dHB1dCAmJgorCXRlc3RfY21wIGRpZmYuZXhwZWN0IGRpZmYub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQnICcKKwlnaXQgZGlmZiBIRUFEID4gZGlmZi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBkaWZmLmV4cGVjdCBkaWZmLm91dHB1dAorJworCitjYXQgPiB3aGF0Y2hhbmdlZC5leHBlY3QgPDwgRU9GCitjb21taXQgVkFSSUFCTEUKK0F1dGhvcjogVkFSSUFCTEUKK0RhdGU6ICAgVkFSSUFCTEUKKworICAgIEluaXRpYWwgY29tbWl0CisKK2RpZmYgLS1naXQgYS9leGFtcGxlIGIvZXhhbXBsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYyNGM3NGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2V4YW1wbGUKK0BAIC0wLDAgKzEgQEAKKytTaWxseSBleGFtcGxlCitkaWZmIC0tZ2l0IGEvaGVsbG8gYi9oZWxsbworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU1N2RiMDMKKy0tLSAvZGV2L251bGwKKysrKyBiL2hlbGxvCitAQCAtMCwwICsxIEBACisrSGVsbG8gV29ybGQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgd2hhdGNoYW5nZWQgLXAgLS1yb290JyAnCisJZ2l0IHdoYXRjaGFuZ2VkIC1wIC0tcm9vdCB8CisJCXNlZCAtZSAiMXMvXlwoLlx7N1x9XCkuXHs0MFx9L1wxVkFSSUFCTEUvIiBcCisJCS1lICIyLDNzL15cKC5cezhcfVwpLiokL1wxVkFSSUFCTEUvIiBcCisJPiB3aGF0Y2hhbmdlZC5vdXRwdXQgJiYKKwl0ZXN0X2NtcCB3aGF0Y2hhbmdlZC5leHBlY3Qgd2hhdGNoYW5nZWQub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB0YWcgbXktZmlyc3QtdGFnJyAnCisJZ2l0IHRhZyBteS1maXJzdC10YWcgJiYKKwl0ZXN0X2NtcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy90YWdzL215LWZpcnN0LXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2ggJiYKKwl0ZXN0X2NtcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9teWJyYW5jaAorJworCitjYXQgPiBicmFuY2guZXhwZWN0IDw8RU9GCisgIG1hc3RlcgorKiBteWJyYW5jaAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2gnICcKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCXRlc3RfY21wIGJyYW5jaC5leHBlY3QgYnJhbmNoLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVzb2x2ZSBub3cgZmFpbHMnICcKKwlnaXQgY2hlY2tvdXQgbXlicmFuY2ggJiYKKwllY2hvICJXb3JrLCB3b3JrLCB3b3JrIiA+PmhlbGxvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU29tZSB3b3JrLiIgLWkgaGVsbG8gJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCWVjaG8gIlBsYXksIHBsYXksIHBsYXkiID4+aGVsbG8gJiYKKwllY2hvICJMb3RzIG9mIGZ1biIgPj5leGFtcGxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU29tZSBmdW4uIiAtaSBoZWxsbyBleGFtcGxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLW0gIk1lcmdlIHdvcmsgaW4gbXlicmFuY2giIG15YnJhbmNoCisnCisKK2NhdCA+IGhlbGxvIDw8IEVPRgorSGVsbG8gV29ybGQKK0l0J3MgYSBuZXcgZGF5IGZvciBnaXQKK1BsYXksIHBsYXksIHBsYXkKK1dvcmssIHdvcmssIHdvcmsKK0VPRgorCitjYXQgPiBzaG93LWJyYW5jaC5leHBlY3QgPDwgRU9GCisqIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKyAhIFtteWJyYW5jaF0gU29tZSB3b3JrLgorLS0KKy0gIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKyorIFtteWJyYW5jaF0gU29tZSB3b3JrLgorKiAgW21hc3Rlcl5dIFNvbWUgZnVuLgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93LWJyYW5jaCcgJworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHdvcmsgaW4gbXlicmFuY2giIC1pIGhlbGxvICYmCisJZ2l0IHNob3ctYnJhbmNoIC0tdG9wby1vcmRlciAtLW1vcmU9MSBtYXN0ZXIgbXlicmFuY2ggXAorCQk+IHNob3ctYnJhbmNoLm91dHB1dCAmJgorCXRlc3RfY21wIHNob3ctYnJhbmNoLmV4cGVjdCBzaG93LWJyYW5jaC5vdXRwdXQKKycKKworY2F0ID4gcmVzb2x2ZS5leHBlY3QgPDwgRU9GCitVcGRhdGluZyBWQVJJQUJMRS4uVkFSSUFCTEUKK0ZBU1RGT1JXQVJEIChubyBjb21taXQgY3JlYXRlZDsgLW0gb3B0aW9uIGlnbm9yZWQpCisgZXhhbXBsZSB8IDEgKworIGhlbGxvICAgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXNvbHZlJyAnCisJZ2l0IGNoZWNrb3V0IG15YnJhbmNoICYmCisJZ2l0IG1lcmdlIC1tICJNZXJnZSB1cHN0cmVhbSBjaGFuZ2VzLiIgbWFzdGVyIHwKKwkJc2VkIC1lICIxcy9bMC05YS1mXVx7N1x9L1ZBUklBQkxFL2ciIFwKKwkJLWUgInMvXkZhc3RbLSBdZm9yd2FyZCAvRkFTVEZPUldBUkQgLyIgPnJlc29sdmUub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXNvbHZlIG91dHB1dCcgJworCXRlc3RfaTE4bmNtcCByZXNvbHZlLmV4cGVjdCByZXNvbHZlLm91dHB1dAorJworCitjYXQgPiBzaG93LWJyYW5jaDIuZXhwZWN0IDw8IEVPRgorISBbbWFzdGVyXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCisgKiBbbXlicmFuY2hdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKy0tCistLSBbbWFzdGVyXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3ctYnJhbmNoIChwYXJ0IDIpJyAnCisJZ2l0IHNob3ctYnJhbmNoIC0tdG9wby1vcmRlciBtYXN0ZXIgbXlicmFuY2ggPiBzaG93LWJyYW5jaDIub3V0cHV0ICYmCisJdGVzdF9jbXAgc2hvdy1icmFuY2gyLmV4cGVjdCBzaG93LWJyYW5jaDIub3V0cHV0CisnCisKK2NhdCA+IHNob3ctYnJhbmNoMy5leHBlY3QgPDwgRU9GCishIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKyAqIFtteWJyYW5jaF0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorLS0KKy0tIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKysqIFttYXN0ZXJeMl0gU29tZSB3b3JrLgorKyogW21hc3Rlcl5dIFNvbWUgZnVuLgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93LWJyYW5jaCAocGFydCAzKScgJworCWdpdCBzaG93LWJyYW5jaCAtLXRvcG8tb3JkZXIgLS1tb3JlPTIgbWFzdGVyIG15YnJhbmNoIFwKKwkJPiBzaG93LWJyYW5jaDMub3V0cHV0ICYmCisJdGVzdF9jbXAgc2hvdy1icmFuY2gzLmV4cGVjdCBzaG93LWJyYW5jaDMub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld2luZCB0byAiU29tZSBmdW4uIiBhbmQgIlNvbWUgd29yay4iJyAnCisJZ2l0IGNoZWNrb3V0IG15YnJhbmNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJeMiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3Rlcl4KKycKKworY2F0ID4gc2hvdy1icmFuY2g0LmV4cGVjdCA8PCBFT0YKKyogW21hc3Rlcl0gU29tZSBmdW4uCisgISBbbXlicmFuY2hdIFNvbWUgd29yay4KKy0tCisqICBbbWFzdGVyXSBTb21lIGZ1bi4KKyArIFtteWJyYW5jaF0gU29tZSB3b3JrLgorKisgW21hc3Rlcl5dIEluaXRpYWwgY29tbWl0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3ctYnJhbmNoIChwYXJ0IDQpJyAnCisJZ2l0IHNob3ctYnJhbmNoIC0tdG9wby1vcmRlciA+IHNob3ctYnJhbmNoNC5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBzaG93LWJyYW5jaDQuZXhwZWN0IHNob3ctYnJhbmNoNC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFudWFsIG1lcmdlJyAnCisJbWI9JChnaXQgbWVyZ2UtYmFzZSBIRUFEIG15YnJhbmNoKSAmJgorCWdpdCBuYW1lLXJldiAtLW5hbWUtb25seSAtLXRhZ3MgJG1iID4gbmFtZS1yZXYub3V0cHV0ICYmCisJdGVzdCAibXktZmlyc3QtdGFnIiA9ICQoY2F0IG5hbWUtcmV2Lm91dHB1dCkgJiYKKworCWdpdCByZWFkLXRyZWUgLW0gLXUgJG1iIEhFQUQgbXlicmFuY2gKKycKKworY2F0ID4gbHMtZmlsZXMuZXhwZWN0IDw8IEVPRgorMTAwNjQ0IDdmOGIxNDFiNjVmZGNlZTQ3MzIxZTM5OWEyNTk4YTIzNWEwMzI0MjIgMAlleGFtcGxlCisxMDA2NDQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOCAxCWhlbGxvCisxMDA2NDQgYmE0MmEyYTk2ZTMwMjdmMzMzM2UxM2VkZTRjY2Y0NDk4YzNhZTk0MiAyCWhlbGxvCisxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC0tc3RhZ2UnICcKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+IGxzLWZpbGVzLm91dHB1dCAmJgorCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5vdXRwdXQKKycKKworY2F0ID4gbHMtZmlsZXMtdW5tZXJnZWQuZXhwZWN0IDw8IEVPRgorMTAwNjQ0IDU1N2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzggMQloZWxsbworMTAwNjQ0IGJhNDJhMmE5NmUzMDI3ZjMzMzNlMTNlZGU0Y2NmNDQ5OGMzYWU5NDIgMgloZWxsbworMTAwNjQ0IGNjNDRjNzNlYjc4MzU2NWRhNTgzMWI0ZDgyMGM5NjI5NTQwMTliNjkgMwloZWxsbworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtLXVubWVyZ2VkJyAnCisJZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQgPiBscy1maWxlcy11bm1lcmdlZC5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBscy1maWxlcy11bm1lcmdlZC5leHBlY3QgbHMtZmlsZXMtdW5tZXJnZWQub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1tZXJnZS1pbmRleCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgaGVsbG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgKHBhcnQgMiknICcKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+IGxzLWZpbGVzLm91dHB1dDIgJiYKKwl0ZXN0X2NtcCBscy1maWxlcy5leHBlY3QgbHMtZmlsZXMub3V0cHV0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVwYWNrJyAnZ2l0IHJlcGFjaycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwcnVuZS1wYWNrZWQnICdnaXQgcHJ1bmUtcGFja2VkJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLT4gb25seSBwYWNrZWQgb2JqZWN0cycgJworCWdpdCBwcnVuZSAmJiAjIFJlbW92ZSBjb25mbGljdCBtYXJrZWQgYmxvYnMKKwl0ZXN0ICQoZmluZCAuZ2l0L29iamVjdHMvWzAtOWEtZl1bMC05YS1mXSAtdHlwZSBmIC1wcmludCAyPi9kZXYvbnVsbCB8IHdjIC1sKSA9IDAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzAwLXJlcG8tY29uZmlnLnNoIGIvdC90MTMwMC1yZXBvLWNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMTI3ZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwMC1yZXBvLWNvbmZpZy5zaApAQCAtMCwwICsxLDEwMjcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBjb25maWcgaW4gZGlmZmVyZW50IHNldHRpbmdzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYXIgZGVmYXVsdCBjb25maWcnICcKKwlybSAtZiAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbY29yZV0KKwlwZW5ndWluID0gbGl0dGxlIGJsdWUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCcgJworCWdpdCBjb25maWcgY29yZS5wZW5ndWluICJsaXR0bGUgYmx1ZSIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2NvcmVdCisJcGVuZ3VpbiA9IGxpdHRsZSBibHVlCisJTW92aWUgPSBCYWRQaHlzaWNzCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peGVkIGNhc2UnICcKKwlnaXQgY29uZmlnIENvcmUuTW92aWUgQmFkUGh5c2ljcyAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbY29yZV0KKwlwZW5ndWluID0gbGl0dGxlIGJsdWUKKwlNb3ZpZSA9IEJhZFBoeXNpY3MKK1tDb3Jlc10KKwlXaGF0RXZlciA9IFNlY29uZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1pbGFyIHNlY3Rpb24nICcKKwlnaXQgY29uZmlnIENvcmVzLldoYXRFdmVyIFNlY29uZCAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbY29yZV0KKwlwZW5ndWluID0gbGl0dGxlIGJsdWUKKwlNb3ZpZSA9IEJhZFBoeXNpY3MKKwlVUFBFUkNBU0UgPSB0cnVlCitbQ29yZXNdCisJV2hhdEV2ZXIgPSBTZWNvbmQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBwZXJjYXNlIHNlY3Rpb24nICcKKwlnaXQgY29uZmlnIENPUkUuVVBQRVJDQVNFIHRydWUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSB3aXRoIG5vbi1tYXRjaCcgXAorCSdnaXQgY29uZmlnIGNvcmUucGVuZ3VpbiBraW5ncGluICFibHVlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlIHdpdGggbm9uLW1hdGNoIChhY3R1YWxseSBtYXRjaGluZyknIFwKKwknZ2l0IGNvbmZpZyBjb3JlLnBlbmd1aW4gInZlcnkgYmx1ZSIgIWtpbmdwaW4nCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tjb3JlXQorCXBlbmd1aW4gPSB2ZXJ5IGJsdWUKKwlNb3ZpZSA9IEJhZFBoeXNpY3MKKwlVUFBFUkNBU0UgPSB0cnVlCisJcGVuZ3VpbiA9IGtpbmdwaW4KK1tDb3Jlc10KKwlXaGF0RXZlciA9IFNlY29uZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1tYXRjaCByZXN1bHQnICd0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgbWl4ZWQtY2FzZSBrZXkgYnkgY2Fub25pY2FsIG5hbWUnICcKKwllY2hvIFNlY29uZCA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBjb3Jlcy53aGF0ZXZlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIG1peGVkLWNhc2Uga2V5IGJ5IG5vbi1jYW5vbmljYWwgbmFtZScgJworCWVjaG8gU2Vjb25kID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIENvUmVTLldoQXRFdkVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YnNlY3Rpb25zIGFyZSBub3QgY2Fub25pY2FsaXplZCBieSBnaXQtY29uZmlnJyAnCisJY2F0ID4+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtzZWN0aW9uLlN1YlNlY3Rpb25dCisJa2V5ID0gb25lCisJW3NlY3Rpb24gIlN1YlNlY3Rpb24iXQorCWtleSA9IHR3bworCUVPRgorCWVjaG8gb25lID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHNlY3Rpb24uc3Vic2VjdGlvbi5rZXkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIHR3byA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBzZWN0aW9uLlN1YlNlY3Rpb24ua2V5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IC5naXQvY29uZmlnIDw8XEVPRgorW2FscGhhXQorYmFyID0gZm9vCitbYmV0YV0KK2JheiA9IG11bHRpcGxlIFwKK2xpbmVzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXQgd2l0aCBjb250LiBsaW5lcycgXAorCSdnaXQgY29uZmlnIC0tdW5zZXQgYmV0YS5iYXonCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKK1thbHBoYV0KK2JhciA9IGZvbworW2JldGFdCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXQgd2l0aCBjb250LiBsaW5lcyBpcyBjb3JyZWN0JyAndGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKKwkJaGFoYSAgID0iYmV0YSIgIyBsYXN0IHNpbGx5IGNvbW1lbnQKK2hhaGEgPSBoZWxsbworCWhhaGEgPSBiZWxsbworW25leHRTZWN0aW9uXSBub05ld2xpbmUgPSBvdWNoCitFT0YKKworY3AgLmdpdC9jb25maWcgLmdpdC9jb25maWcyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIHVuc2V0JyBcCisJJ2dpdCBjb25maWcgLS11bnNldC1hbGwgYmV0YS5oYWhhJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CitbbmV4dFNlY3Rpb25dIG5vTmV3bGluZSA9IG91Y2gKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSB1bnNldCBpcyBjb3JyZWN0JyAndGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnJworCitjcCAuZ2l0L2NvbmZpZzIgLmdpdC9jb25maWcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZXBsYWNlLWFsbCBtaXNzaW5nIHZhbHVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGJldGEuaGFoYSAmJgorCXRlc3RfY21wIC5naXQvY29uZmlnMiAuZ2l0L2NvbmZpZworJworCitybSAuZ2l0L2NvbmZpZzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZXBsYWNlLWFsbCcgXAorCSdnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgYmV0YS5oYWhhIGdhbW1hJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CisJaGFoYSA9IGdhbW1hCitbbmV4dFNlY3Rpb25dIG5vTmV3bGluZSA9IG91Y2gKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgcmVwbGFjZWQnICd0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKKwloYWhhID0gYWxwaGEKK1tuZXh0U2VjdGlvbl0gbm9OZXdsaW5lID0gb3VjaAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsbHkgbWVhbiB0ZXN0JyAnCisJZ2l0IGNvbmZpZyBiZXRhLmhhaGEgYWxwaGEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorCWhhaGEgPSBhbHBoYQorW25leHRTZWN0aW9uXQorCW5vbmV3bGluZSA9IHdvdworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsbHkgcmVhbGx5IG1lYW4gdGVzdCcgJworCWdpdCBjb25maWcgbmV4dHNlY3Rpb24ubm9uZXdsaW5lIHdvdyAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgdmFsdWUnICd0ZXN0IGFscGhhID0gJChnaXQgY29uZmlnIGJldGEuaGFoYSknCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKK1tuZXh0U2VjdGlvbl0KKwlub25ld2xpbmUgPSB3b3cKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXQnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgYmV0YS5oYWhhICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKK1tuZXh0U2VjdGlvbl0KKwlub25ld2xpbmUgPSB3b3cKKwlOb05ld0xpbmUgPSB3b3cyIGZvciBtZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXZhcicgJworCWdpdCBjb25maWcgbmV4dHNlY3Rpb24uTm9OZXdMaW5lICJ3b3cyIGZvciBtZSIgImZvciBtZSQiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1tYXRjaCcgXAorCSdnaXQgY29uZmlnIC0tZ2V0IG5leHRzZWN0aW9uLm5vbmV3bGluZSAhZm9yJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tbWF0Y2ggdmFsdWUnIFwKKwkndGVzdCB3b3cgPSAkKGdpdCBjb25maWcgLS1nZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICFmb3IpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXMgZ2V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldCBuZXh0c2VjdGlvbi5ub25ld2xpbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IG11bHRpdmFyJyBcCisJJ2dpdCBjb25maWcgLS1nZXQtYWxsIG5leHRzZWN0aW9uLm5vbmV3bGluZScKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorW25leHRTZWN0aW9uXQorCW5vbmV3bGluZSA9IHdvdzMKKwlOb05ld0xpbmUgPSB3b3cyIGZvciBtZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXZhciByZXBsYWNlJyAnCisJZ2l0IGNvbmZpZyBuZXh0c2VjdGlvbi5ub25ld2xpbmUgIndvdzMiICJ3b3ckIiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXMgdmFsdWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIG5leHRzZWN0aW9uLm5vbmV3bGluZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXMgdW5zZXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgdW5zZXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgc29tZXNlY3Rpb24ubm9uZXdsaW5lCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKK1tuZXh0U2VjdGlvbl0KKwlOb05ld0xpbmUgPSB3b3cyIGZvciBtZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpdmFyIHVuc2V0JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IG5leHRzZWN0aW9uLm5vbmV3bGluZSAid293MyQiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQga2V5JyAndGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBpbnZhbC4ya2V5IGJsYWJsYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCBrZXknICdnaXQgY29uZmlnIDEyMzQ1Ni5hMTIzIDk4NycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGllcmFyY2hpY2FsIHNlY3Rpb24nIFwKKwknZ2l0IGNvbmZpZyBWZXJzaW9uLjEuMi4zZVguQWxwaGEgYmV0YScKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorW25leHRTZWN0aW9uXQorCU5vTmV3TGluZSA9IHdvdzIgZm9yIG1lCitbMTIzNDU2XQorCWExMjMgPSA5ODcKK1tWZXJzaW9uICIxLjIuM2VYIl0KKwlBbHBoYSA9IGJldGEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoaWVyYXJjaGljYWwgc2VjdGlvbiB2YWx1ZScgJ3Rlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorYmV0YS5ub2luZGVudD1zaWxseVZhbHVlCituZXh0c2VjdGlvbi5ub25ld2xpbmU9d293MiBmb3IgbWUKKzEyMzQ1Ni5hMTIzPTk4NwordmVyc2lvbi4xLjIuM2VYLmFscGhhPWJldGEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JraW5nIC0tbGlzdCcgXAorCSdnaXQgY29uZmlnIC0tbGlzdCA+IG91dHB1dCAmJiBjbXAgb3V0cHV0IGV4cGVjdCcKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbGlzdCB3aXRob3V0IHJlcG8gcHJvZHVjZXMgZW1wdHkgb3V0cHV0JyAnCisJZ2l0IC0tZ2l0LWRpcj1ub25leGlzdGVudCBjb25maWcgLS1saXN0ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2JldGEubm9pbmRlbnQgc2lsbHlWYWx1ZQorbmV4dHNlY3Rpb24ubm9uZXdsaW5lIHdvdzIgZm9yIG1lCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1nZXQtcmVnZXhwJyBcCisJJ2dpdCBjb25maWcgLS1nZXQtcmVnZXhwIGluID4gb3V0cHV0ICYmIGNtcCBvdXRwdXQgZXhwZWN0JworCitjYXQgPiBleHBlY3QgPDwgRU9GCit3b3cyIGZvciBtZQord293NCBmb3IgeW91CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hZGQnICcKKwlnaXQgY29uZmlnIC0tYWRkIG5leHRzZWN0aW9uLm5vbmV3bGluZSAid293NCBmb3IgeW91IiAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIG5leHRzZWN0aW9uLm5vbmV3bGluZSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gLmdpdC9jb25maWcgPDwgRU9GCitbbm92YWx1ZV0KKwl2YXJpYWJsZQorW2VtcHR5dmFsdWVdCisJdmFyaWFibGUgPQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCB2YXJpYWJsZSB3aXRoIG5vIHZhbHVlJyBcCisJJ2dpdCBjb25maWcgLS1nZXQgbm92YWx1ZS52YXJpYWJsZSBeJCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHZhcmlhYmxlIHdpdGggZW1wdHkgdmFsdWUnIFwKKwknZ2l0IGNvbmZpZyAtLWdldCBlbXB0eXZhbHVlLnZhcmlhYmxlIF4kJworCitlY2hvIG5vdmFsdWUudmFyaWFibGUgPiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0LXJlZ2V4cCB2YXJpYWJsZSB3aXRoIG5vIHZhbHVlJyBcCisJJ2dpdCBjb25maWcgLS1nZXQtcmVnZXhwIG5vdmFsdWUgPiBvdXRwdXQgJiYKKwkgY21wIG91dHB1dCBleHBlY3QnCisKK2VjaG8gJ25vdmFsdWUudmFyaWFibGUgdHJ1ZScgPiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0LXJlZ2V4cCAtLWJvb2wgdmFyaWFibGUgd2l0aCBubyB2YWx1ZScgXAorCSdnaXQgY29uZmlnIC0tYm9vbCAtLWdldC1yZWdleHAgbm92YWx1ZSA+IG91dHB1dCAmJgorCSBjbXAgb3V0cHV0IGV4cGVjdCcKKworZWNobyAnZW1wdHl2YWx1ZS52YXJpYWJsZSAnID4gZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldC1yZWdleHAgdmFyaWFibGUgd2l0aCBlbXB0eSB2YWx1ZScgXAorCSdnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCBlbXB0eXZhbHVlID4gb3V0cHV0ICYmCisJIGNtcCBvdXRwdXQgZXhwZWN0JworCitlY2hvIHRydWUgPiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IGJvb2wgdmFyaWFibGUgd2l0aCBubyB2YWx1ZScgXAorCSdnaXQgY29uZmlnIC0tYm9vbCBub3ZhbHVlLnZhcmlhYmxlID4gb3V0cHV0ICYmCisJIGNtcCBvdXRwdXQgZXhwZWN0JworCitlY2hvIGZhbHNlID4gZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBib29sIHZhcmlhYmxlIHdpdGggZW1wdHkgdmFsdWUnIFwKKwknZ2l0IGNvbmZpZyAtLWJvb2wgZW1wdHl2YWx1ZS52YXJpYWJsZSA+IG91dHB1dCAmJgorCSBjbXAgb3V0cHV0IGV4cGVjdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gYXJndW1lbnRzLCBidXQgbm8gY3Jhc2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgdXNhZ2Ugb3V0cHV0CisnCisKK2NhdCA+IC5naXQvY29uZmlnIDw8IEVPRgorW2EuYl0KKwljID0gZAorRU9GCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1thLmJdCisJYyA9IGQKK1thXQorCXggPSB5CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHNlY3Rpb24gaXMgcGFydGlhbCBtYXRjaCBvZiBhbm90aGVyJyAnCisJZ2l0IGNvbmZpZyBhLnggeSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYS5iXQorCWMgPSBkCitbYV0KKwl4ID0geQorCWIgPSBjCitbYl0KKwl4ID0geQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyB2YXJpYWJsZSBpbnNlcnRzIGludG8gcHJvcGVyIHNlY3Rpb24nICcKKwlnaXQgY29uZmlnIGIueCB5ICYmCisJZ2l0IGNvbmZpZyBhLmIgYyAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHRlcm5hdGl2ZSBHSVRfQ09ORklHIChub24tZXhpc3RpbmcgZmlsZSBzaG91bGQgZmFpbCknIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWZpbGUgbm9uLWV4aXN0aW5nLWNvbmZpZyAtbCcKKworY2F0ID4gb3RoZXItY29uZmlnIDw8IEVPRgorW2Vpbl0KKwliYWhuID0gc3RyYXNzZQorRU9GCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2Vpbi5iYWhuPXN0cmFzc2UKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHRlcm5hdGl2ZSBHSVRfQ09ORklHJyAnCisJR0lUX0NPTkZJRz1vdGhlci1jb25maWcgZ2l0IGNvbmZpZyAtbCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHRlcm5hdGl2ZSBHSVRfQ09ORklHICgtLWZpbGUpJyBcCisJJ2dpdCBjb25maWcgLS1maWxlIG90aGVyLWNvbmZpZyAtbCA+IG91dHB1dCAmJiBjbXAgb3V0cHV0IGV4cGVjdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmZXIgY29uZmlnIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJbWtkaXIgeCAmJgorCSgKKwkJY2QgeCAmJgorCQllY2hvIHN0cmFzc2UgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIC0tZ2V0IC0tZmlsZSAuLi9vdGhlci1jb25maWcgZWluLmJhaG4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmVyIGNvbmZpZyBmcm9tIHN1YmRpcmVjdG9yeSB2aWEgR0lUX0NPTkZJRycgJworCSgKKwkJY2QgeCAmJgorCQlHSVRfQ09ORklHPS4uL290aGVyLWNvbmZpZyBnaXQgY29uZmlnIC0tZ2V0IGVpbi5iYWhuID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2Vpbl0KKwliYWhuID0gc3RyYXNzZQorW2Fud29obmVyXQorCXBhcmsgPSBhdXN3ZWlzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQgaW4gYWx0ZXJuYXRpdmUgR0lUX0NPTkZJRycgJworCUdJVF9DT05GSUc9b3RoZXItY29uZmlnIGdpdCBjb25maWcgYW53b2huZXIucGFyayBhdXN3ZWlzICYmCisJdGVzdF9jbXAgZXhwZWN0IG90aGVyLWNvbmZpZworJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PCBFT0YKKyMgSGFsbG8KKwkjQmVsbG8KK1ticmFuY2ggImVpbnMiXQorCXggPSAxCitbYnJhbmNoLmVpbnNdCisJeSA9IDEKKwlbYnJhbmNoICIxIDIzNCBibGFibC9hIl0KK3dlaXJkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHNlY3Rpb24iIFwKKwkiZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC5laW5zIGJyYW5jaC56d2VpIgorCitjYXQgPiBleHBlY3QgPDwgRU9GCisjIEhhbGxvCisJI0JlbGxvCitbYnJhbmNoICJ6d2VpIl0KKwl4ID0gMQorW2JyYW5jaCAiendlaSJdCisJeSA9IDEKKwlbYnJhbmNoICIxIDIzNCBibGFibC9hIl0KK3dlaXJkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgInRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIG5vbi1leGlzdGluZyBzZWN0aW9uIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIFwKKwkJYnJhbmNoLiJ3b3JsZCBkb21pbmF0aW9uIiBicmFuY2guZHJlaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgc3VjY2VlZGVkIiAidGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgYW5vdGhlciBzZWN0aW9uIiBcCisJJ2dpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2guIjEgMjM0IGJsYWJsL2EiIGJyYW5jaC5kcmVpJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisjIEhhbGxvCisJI0JlbGxvCitbYnJhbmNoICJ6d2VpIl0KKwl4ID0gMQorW2JyYW5jaCAiendlaSJdCisJeSA9IDEKK1ticmFuY2ggImRyZWkiXQord2VpcmQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgc3VjY2VlZGVkIiAidGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnIgorCitjYXQgPj4gLmdpdC9jb25maWcgPDwgRU9GCitbYnJhbmNoICJ2aWVyIl0geiA9IDEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgYSBzZWN0aW9uIHdpdGggYSB2YXIgb24gdGhlIHNhbWUgbGluZSIgXAorCSdnaXQgY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gYnJhbmNoLnZpZXIgYnJhbmNoLnp3ZWknCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyMgSGFsbG8KKwkjQmVsbG8KK1ticmFuY2ggInp3ZWkiXQorCXggPSAxCitbYnJhbmNoICJ6d2VpIl0KKwl5ID0gMQorW2JyYW5jaCAiZHJlaSJdCit3ZWlyZAorW2JyYW5jaCAiendlaSJdCisJeiA9IDEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgc3VjY2VlZGVkIiAidGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWluZyBlbXB0eSBzZWN0aW9uIG5hbWUgaXMgcmVqZWN0ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gYnJhbmNoLnp3ZWkgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1pbmcgdG8gYm9ndXMgc2VjdGlvbiBpcyByZWplY3RlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2guendlaSAiYm9ndXMgbmFtZSIKKycKKworY2F0ID4+IC5naXQvY29uZmlnIDw8IEVPRgorICBbYnJhbmNoICJ6d2VpIl0gYSA9IDEgW2JyYW5jaCAidmllciJdCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVtb3ZlIHNlY3Rpb24iICJnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gYnJhbmNoLnp3ZWkiCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyMgSGFsbG8KKwkjQmVsbG8KK1ticmFuY2ggImRyZWkiXQord2VpcmQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZWN0aW9uIHdhcyByZW1vdmVkIHByb3Blcmx5IiBcCisJInRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZyIKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2dpdGN2c10KKwllbmFibGVkID0gdHJ1ZQorCWRibmFtZSA9ICVHZ2l0Y3ZzMi4lYS4lbS5zcWxpdGUKK1tnaXRjdnMgImV4dCJdCisJZGJuYW1lID0gJUdnaXRjdnMxLiVhLiVtLnNxbGl0ZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlY3Rpb24gZW5kaW5nJyAnCisKKwlybSAtZiAuZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSAmJgorCWdpdCBjb25maWcgZ2l0Y3ZzLmV4dC5kYm5hbWUgJUdnaXRjdnMxLiVhLiVtLnNxbGl0ZSAmJgorCWdpdCBjb25maWcgZ2l0Y3ZzLmRibmFtZSAlR2dpdGN2czIuJWEuJW0uc3FsaXRlICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBudW1iZXJzICcKKworCWdpdCBjb25maWcga2lsby5ncmFtIDFrICYmCisJZ2l0IGNvbmZpZyBtZWdhLnRvbiAxbSAmJgorCWs9JChnaXQgY29uZmlnIC0taW50IC0tZ2V0IGtpbG8uZ3JhbSkgJiYKKwl0ZXN0IHoxMDI0ID0gInokayIgJiYKKwltPSQoZ2l0IGNvbmZpZyAtLWludCAtLWdldCBtZWdhLnRvbikgJiYKKwl0ZXN0IHoxMDQ4NTc2ID0gInokbSIKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitmYXRhbDogYmFkIGNvbmZpZyB2YWx1ZSBmb3IgJ2FuaW52YWxpZC51bml0JyBpbiAuZ2l0L2NvbmZpZworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgdW5pdCcgJworCisJZ2l0IGNvbmZpZyBhbmludmFsaWQudW5pdCAiMWF1dG8iICYmCisJcz0kKGdpdCBjb25maWcgYW5pbnZhbGlkLnVuaXQpICYmCisJdGVzdCAiejFhdXRvIiA9ICJ6JHMiICYmCisJaWYgZ2l0IGNvbmZpZyAtLWludCAtLWdldCBhbmludmFsaWQudW5pdCAyPmFjdHVhbAorCXRoZW4KKwkJZWNobyBjb25maWcgc2hvdWxkIGhhdmUgZmFpbGVkCisJCWZhbHNlCisJZmkgJiYKKwljbXAgYWN0dWFsIGV4cGVjdAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCit0cnVlCitmYWxzZQordHJ1ZQorZmFsc2UKK3RydWUKK2ZhbHNlCit0cnVlCitmYWxzZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYm9vbCAnCisKKwlnaXQgY29uZmlnIGJvb2wudHJ1ZTEgMDEgJiYKKwlnaXQgY29uZmlnIGJvb2wudHJ1ZTIgLTEgJiYKKwlnaXQgY29uZmlnIGJvb2wudHJ1ZTMgWWVTICYmCisJZ2l0IGNvbmZpZyBib29sLnRydWU0IHRydWUgJiYKKwlnaXQgY29uZmlnIGJvb2wuZmFsc2UxIDAwMCAmJgorCWdpdCBjb25maWcgYm9vbC5mYWxzZTIgIiIgJiYKKwlnaXQgY29uZmlnIGJvb2wuZmFsc2UzIG5PICYmCisJZ2l0IGNvbmZpZyBib29sLmZhbHNlNCBGQUxTRSAmJgorCXJtIC1mIHJlc3VsdCAmJgorCWZvciBpIGluIDEgMiAzIDQKKwlkbworCSAgICBnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBib29sLnRydWUkaSA+PnJlc3VsdAorCSAgICBnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBib29sLmZhbHNlJGkgPj5yZXN1bHQKKyAgICAgICAgZG9uZSAmJgorCWNtcCBleHBlY3QgcmVzdWx0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIGJvb2wgKC0tZ2V0KScgJworCisJZ2l0IGNvbmZpZyBib29sLm5vYm9vbCBmb29iYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBib29sLm5vYm9vbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBib29sIChzZXQpJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYm9vbCBib29sLm5vYm9vbCBmb29iYXInCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKK1tib29sXQorCXRydWUxID0gdHJ1ZQorCXRydWUyID0gdHJ1ZQorCXRydWUzID0gdHJ1ZQorCXRydWU0ID0gdHJ1ZQorCWZhbHNlMSA9IGZhbHNlCisJZmFsc2UyID0gZmFsc2UKKwlmYWxzZTMgPSBmYWxzZQorCWZhbHNlNCA9IGZhbHNlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IC0tYm9vbCcgJworCisJcm0gLWYgLmdpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBib29sLnRydWUxIDAxICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC50cnVlMiAtMSAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wudHJ1ZTMgWWVTICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC50cnVlNCB0cnVlICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC5mYWxzZTEgMDAwICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC5mYWxzZTIgIiIgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBib29sLmZhbHNlMyBuTyAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wuZmFsc2U0IEZBTFNFICYmCisJY21wIGV4cGVjdCAuZ2l0L2NvbmZpZycKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorW2ludF0KKwl2YWwxID0gMQorCXZhbDIgPSAtMQorCXZhbDMgPSA1MjQyODgwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IC0taW50JyAnCisKKwlybSAtZiAuZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgLS1pbnQgaW50LnZhbDEgMDEgJiYKKwlnaXQgY29uZmlnIC0taW50IGludC52YWwyIC0xICYmCisJZ2l0IGNvbmZpZyAtLWludCBpbnQudmFsMyA1bSAmJgorCWNtcCBleHBlY3QgLmdpdC9jb25maWcnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorW2Jvb2xdCisJdHJ1ZTEgPSB0cnVlCisJdHJ1ZTIgPSB0cnVlCisJZmFsc2UxID0gZmFsc2UKKwlmYWxzZTIgPSBmYWxzZQorW2ludF0KKwlpbnQxID0gMAorCWludDIgPSAxCisJaW50MyA9IC0xCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IC0tYm9vbC1vci1pbnQnICcKKwlybSAtZiAuZ2l0L2NvbmZpZyAmJgorCSgKKwkJZWNobyAiW2Jvb2xdIgorCQllY2hvIHRydWUxCisJCWVjaG8gdHJ1ZTIgPSB0cnVlCisJCWVjaG8gZmFsc2UgPSBmYWxzZQorCQllY2hvICJbaW50XSIKKwkJZWNobyBpbnQxID0gMAorCQllY2hvIGludDIgPSAxCisJCWVjaG8gaW50MyA9IC0xCisJKSA+Pi5naXQvY29uZmlnICYmCisJdGVzdCAkKGdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLnRydWUxKSA9IHRydWUgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wudHJ1ZTIpID0gdHJ1ZSAmJgorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC5mYWxzZSkgPSBmYWxzZSAmJgorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDEpID0gMCAmJgorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDIpID0gMSAmJgorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDMpID0gLTEKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK1tib29sXQorCXRydWUxID0gdHJ1ZQorCWZhbHNlMSA9IGZhbHNlCisJdHJ1ZTIgPSB0cnVlCisJZmFsc2UyID0gZmFsc2UKK1tpbnRdCisJaW50MSA9IDAKKwlpbnQyID0gMQorCWludDMgPSAtMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCAtLWJvb2wtb3ItaW50JyAnCisJcm0gLWYgLmdpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC50cnVlMSB0cnVlICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wuZmFsc2UxIGZhbHNlICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wudHJ1ZTIgeWVzICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wuZmFsc2UyIG5vICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGludC5pbnQxIDAgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDIgMSAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MyAtMSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK1twYXRoXQorCWhvbWUgPSB+LworCW5vcm1hbCA9IC9kZXYvbnVsbAorCXRyYWlsaW5ndGlsZGUgPSBmb29+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOT1RfTUlOR1cgJ3NldCAtLXBhdGgnICcKKwlybSAtZiAuZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgLS1wYXRoIHBhdGguaG9tZSAifi8iICYmCisJZ2l0IGNvbmZpZyAtLXBhdGggcGF0aC5ub3JtYWwgIi9kZXYvbnVsbCIgJiYKKwlnaXQgY29uZmlnIC0tcGF0aCBwYXRoLnRyYWlsaW5ndGlsZGUgImZvb34iICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnJworCitpZiB0ZXN0X2hhdmVfcHJlcmVxIE5PVF9NSU5HVyAmJiB0ZXN0ICIke0hPTUUrc2V0fSIKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgSE9NRVZBUgorZmkKKworY2F0ID5leHBlY3QgPDxFT0YKKyRIT01FLworL2Rldi9udWxsCitmb29+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBIT01FVkFSICdnZXQgLS1wYXRoJyAnCisJZ2l0IGNvbmZpZyAtLWdldCAtLXBhdGggcGF0aC5ob21lID4gcmVzdWx0ICYmCisJZ2l0IGNvbmZpZyAtLWdldCAtLXBhdGggcGF0aC5ub3JtYWwgPj4gcmVzdWx0ICYmCisJZ2l0IGNvbmZpZyAtLWdldCAtLXBhdGggcGF0aC50cmFpbGluZ3RpbGRlID4+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdCByZXN1bHQKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisvZGV2L251bGwKK2Zvb34KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE5PVF9NSU5HVyAnZ2V0IC0tcGF0aCBjb3BlcyB3aXRoIHVuc2V0ICRIT01FJyAnCisJKAorCQl1bnNldCBIT01FOworCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLmhvbWUgXAorCQkJPnJlc3VsdCAyPm1zZyAmJgorCQlnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLm5vcm1hbCA+PnJlc3VsdCAmJgorCQlnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLnRyYWlsaW5ndGlsZGUgPj5yZXN1bHQKKwkpICYmCisJZ3JlcCAiW0ZmXWFpbGVkIHRvIGV4cGFuZC4qfi8iIG1zZyAmJgorCXRlc3RfY21wIGV4cGVjdCByZXN1bHQKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW3F1b3RlXQorCWxlYWRpbmcgPSAiIHRlc3QiCisJZW5kaW5nID0gInRlc3QgIgorCXNlbWljb2xvbiA9ICJ0ZXN0O3Rlc3QiCisJaGFzaCA9ICJ0ZXN0I3Rlc3QiCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RpbmcnICcKKwlybSAtZiAuZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgcXVvdGUubGVhZGluZyAiIHRlc3QiICYmCisJZ2l0IGNvbmZpZyBxdW90ZS5lbmRpbmcgInRlc3QgIiAmJgorCWdpdCBjb25maWcgcXVvdGUuc2VtaWNvbG9uICJ0ZXN0O3Rlc3QiICYmCisJZ2l0IGNvbmZpZyBxdW90ZS5oYXNoICJ0ZXN0I3Rlc3QiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tleSB3aXRoIG5ld2xpbmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnICJrZXkud2l0aAorbmV3bGluZSIgMTIzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWx1ZSB3aXRoIG5ld2xpbmUnICdnaXQgY29uZmlnIGtleS5zdWIgdmFsdWUud2l0aFxcXAorbmV3bGluZScKKworY2F0ID4gLmdpdC9jb25maWcgPDxcRU9GCitbc2VjdGlvbl0KKwk7IGNvbW1lbnQgXAorCWNvbnRpbnVlZCA9IGNvbnRcCitpbnVlZAorCW5vbmNvbnQgICA9IG5vdCBjb250aW51ZWQgOyBcCisJcXVvdGVjb250ID0gImNvbnQ7XAoraW51ZWQiCitFT0YKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorc2VjdGlvbi5jb250aW51ZWQ9Y29udGludWVkCitzZWN0aW9uLm5vbmNvbnQ9bm90IGNvbnRpbnVlZAorc2VjdGlvbi5xdW90ZWNvbnQ9Y29udDtpbnVlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbHVlIGNvbnRpbnVlZCBvbiBuZXh0IGxpbmUnICcKKwlnaXQgY29uZmlnIC0tbGlzdCA+IHJlc3VsdCAmJgorCWNtcCByZXN1bHQgZXhwZWN0CisnCisKK2NhdCA+IC5naXQvY29uZmlnIDw8XEVPRgorW3NlY3Rpb24gInN1Yj1zZWN0aW9uIl0KKwl2YWwxID0gZm9vPWJhcgorCXZhbDIgPSBmb29cbmJhcgorCXZhbDMgPSBcblxuCisJdmFsNCA9CisJdmFsNQorRU9GCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKK3NlY3Rpb24uc3ViPXNlY3Rpb24udmFsMQorZm9vPWJhclFzZWN0aW9uLnN1Yj1zZWN0aW9uLnZhbDIKK2ZvbworYmFyUXNlY3Rpb24uc3ViPXNlY3Rpb24udmFsMworCisKK1FzZWN0aW9uLnN1Yj1zZWN0aW9uLnZhbDQKK1FzZWN0aW9uLnN1Yj1zZWN0aW9uLnZhbDVRCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbnVsbCAtLWxpc3QnICcKKwlnaXQgY29uZmlnIC0tbnVsbCAtLWxpc3QgfCBudWxfdG9fcSA+cmVzdWx0ICYmCisJZWNobyA+PnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1udWxsIC0tZ2V0LXJlZ2V4cCcgJworCWdpdCBjb25maWcgLS1udWxsIC0tZ2V0LXJlZ2V4cCAidmFsWzAtOV0iIHwgbnVsX3RvX3EgPnJlc3VsdCAmJgorCWVjaG8gPj5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lubmVyIHdoaXRlc3BhY2Uga2VwdCB2ZXJiYXRpbScgJworCWdpdCBjb25maWcgc2VjdGlvbi52YWwgImZvbyAJICBiYXIiICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBzZWN0aW9uLnZhbCkiID0gInpmb28gCSAgYmFyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rZWQgY29uZmlndXJhdGlvbicgJworCisJbG4gLXMgbm90eWV0IG15Y29uZmlnICYmCisJR0lUX0NPTkZJRz1teWNvbmZpZyBnaXQgY29uZmlnIHRlc3QuZnJvdHogbml0Zm9sICYmCisJdGVzdCAtaCBteWNvbmZpZyAmJgorCXRlc3QgLWYgbm90eWV0ICYmCisJdGVzdCAieiQoR0lUX0NPTkZJRz1ub3R5ZXQgZ2l0IGNvbmZpZyB0ZXN0LmZyb3R6KSIgPSB6bml0Zm9sICYmCisJR0lUX0NPTkZJRz1teWNvbmZpZyBnaXQgY29uZmlnIHRlc3QueHl6enkgcmV6cm92ICYmCisJdGVzdCAtaCBteWNvbmZpZyAmJgorCXRlc3QgLWYgbm90eWV0ICYmCisJdGVzdCAieiQoR0lUX0NPTkZJRz1ub3R5ZXQgZ2l0IGNvbmZpZyB0ZXN0LmZyb3R6KSIgPSB6bml0Zm9sICYmCisJdGVzdCAieiQoR0lUX0NPTkZJRz1ub3R5ZXQgZ2l0IGNvbmZpZyB0ZXN0Lnh5enp5KSIgPSB6cmV6cm92CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uZXhpc3RlbnQgY29uZmlndXJhdGlvbicgJworCSgKKwkJR0lUX0NPTkZJRz1kb2Vzbm90ZXhpc3QgJiYKKwkJZXhwb3J0IEdJVF9DT05GSUcgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWxpc3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyB0ZXN0Lnh5enp5CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIHRvIG5vbmV4aXN0ZW50IGNvbmZpZ3VyYXRpb24nICcKKwlsbiAtcyBkb2Vzbm90ZXhpc3QgbGlua3RvbmFkYSAmJgorCWxuIC1zIGxpbmt0b25hZGEgbGlua3RvbGlua3RvbmFkYSAmJgorCSgKKwkJR0lUX0NPTkZJRz1saW5rdG9uYWRhICYmCisJCWV4cG9ydCBHSVRfQ09ORklHICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1saXN0ICYmCisJCUdJVF9DT05GSUc9bGlua3RvbGlua3RvbmFkYSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tbGlzdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BsaXRfY21kbGluZSByZXR1cm4nICIKKwlnaXQgY29uZmlnIGFsaWFzLnNwbGl0LWNtZGxpbmUtZml4ICdlY2hvIFwiJyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzcGxpdC1jbWRsaW5lLWZpeCAmJgorCWVjaG8gZm9vID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICdpbml0aWFsIGNvbW1pdCcgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICdlY2hvIFwiJyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtYyAia2V5PXZhbHVlIiBzdXBwb3J0JyAnCisJdGVzdCAieiQoZ2l0IC1jIGNvcmUubmFtZT12YWx1ZSBjb25maWcgY29yZS5uYW1lKSIgPSB6dmFsdWUgJiYKKwl0ZXN0ICJ6JChnaXQgLWMgZm9vLkNhbWVsQ2FzZT12YWx1ZSBjb25maWcgZm9vLmNhbWVsY2FzZSkiID0genZhbHVlICYmCisJdGVzdCAieiQoZ2l0IC1jIGZvby5mbGFnIGNvbmZpZyAtLWJvb2wgZm9vLmZsYWcpIiA9IHp0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG5hbWU9dmFsdWUgY29uZmlnIGNvcmUubmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXkgc2FuaXR5LWNoZWNraW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb289YmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb289LmJhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgZm9vLmJhPXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGZvby4xYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb28uImJhCisJCQkJeiIuYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAuIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAuZm9vIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb28uIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAuZm9vLiBmYWxzZSAmJgorCWdpdCBjb25maWcgZm9vLmJhciB0cnVlICYmCisJZ2l0IGNvbmZpZyBmb28uImJhID16Ii5iYXIgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIHdvcmtzIHdpdGggYWxpYXNlcyBvZiBidWlsdGlucycgJworCWdpdCBjb25maWcgYWxpYXMuY2hlY2tjb25maWcgIi1jIGZvby5jaGVjaz1iYXIgY29uZmlnIGZvby5jaGVjayIgJiYKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IGNoZWNrY29uZmlnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtYyBkb2VzIG5vdCBzcGxpdCB2YWx1ZXMgb24gZXF1YWxzJyAnCisJZWNobyAidmFsdWUgd2l0aCA9IGluIGl0IiA+ZXhwZWN0ICYmCisJZ2l0IC1jIGNvcmUuZm9vPSJ2YWx1ZSB3aXRoID0gaW4gaXQiIGNvbmZpZyBjb3JlLmZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgZGllcyBvbiBib2d1cyBjb25maWcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgY29yZS5iYXJlPWZvbyByZXYtcGFyc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIGNvbXBsYWlucyBhYm91dCBlbXB0eSBrZXknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgIj1mb28iIHJldi1wYXJzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgY29tcGxhaW5zIGFib3V0IGVtcHR5IGtleSBhbmQgdmFsdWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgIiIgcmV2LXBhcnNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb25maWcgLS1lZGl0IHdvcmtzJyAnCisJZ2l0IGNvbmZpZyAtZiB0bXAgdGVzdC52YWx1ZSBubyAmJgorCWVjaG8gdGVzdC52YWx1ZT15ZXMgPmV4cGVjdCAmJgorCUdJVF9FRElUT1I9ImVjaG8gW3Rlc3RddmFsdWU9eWVzID4iIGdpdCBjb25maWcgLWYgdG1wIC0tZWRpdCAmJgorCWdpdCBjb25maWcgLWYgdG1wIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIC0tZWRpdCByZXNwZWN0cyBjb3JlLmVkaXRvcicgJworCWdpdCBjb25maWcgLWYgdG1wIHRlc3QudmFsdWUgbm8gJiYKKwllY2hvIHRlc3QudmFsdWU9eWVzID5leHBlY3QgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLmVkaXRvciAiZWNobyBbdGVzdF12YWx1ZT15ZXMgPiIgJiYKKwlnaXQgY29uZmlnIC1mIHRtcCAtLWVkaXQgJiYKKwlnaXQgY29uZmlnIC1mIHRtcCAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBtYWxmb3JtZWQgY29uZmlndXJhdGlvbiBmaWxlcwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZiBvbiBzeW50YXggZXJyb3InICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwkjIGJyb2tlbiBzZWN0aW9uIGxpbmUKKwlbc2VjdGlvbl0KKwlrZXkgZ2FyYmFnZQorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgc2VjdGlvbi5rZXkgPmFjdHVhbCAyPmVycm9yICYmCisJZ3JlcCAiIGxpbmUgMyAiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmYgb24gaW5jb21wbGV0ZSBzZWN0aW9uIGhlYWRlcicgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCSMgYnJva2VuIHNlY3Rpb24gbGluZQorCVtzZWN0aW9uCisJa2V5ID0gdmFsdWUKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0IHNlY3Rpb24ua2V5ID5hY3R1YWwgMj5lcnJvciAmJgorCWdyZXAgIiBsaW5lIDIgIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJmIG9uIGluY29tcGxldGUgc3RyaW5nJyAnCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJIyBicm9rZW4gc2VjdGlvbiBsaW5lCisJW3NlY3Rpb25dCisJa2V5ID0gInZhbHVlIHN0cmluZworCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgc2VjdGlvbi5rZXkgPmFjdHVhbCAyPmVycm9yICYmCisJZ3JlcCAiIGxpbmUgMyAiIGVycm9yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwMS1zaGFyZWQtcmVwby5zaCBiL3QvdDEzMDEtc2hhcmVkLXJlcG8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGU0MmQyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDEtc2hhcmVkLXJlcG8uc2gKQEAgLTAsMCArMSwxNzAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHNoYXJlZCByZXBvc2l0b3J5IGluaXRpYWxpemF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworIyBSZW1vdmUgYSBkZWZhdWx0IEFDTCBmcm9tIHRoZSB0ZXN0IGRpciBpZiBwb3NzaWJsZS4KK3NldGZhY2wgLWsgLiAyPi9kZXYvbnVsbAorCisjIFVzZXIgbXVzdCBoYXZlIHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIHJlcG8gLT4gZmFpbHVyZSBvbiAtLXNoYXJlZD0wNDAwCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQgPSAwNDAwIChmYXVsdHkgcGVybWlzc2lvbiB1LXcpJyAnCisJbWtkaXIgc3ViICYmICgKKwkJY2Qgc3ViICYmIGdpdCBpbml0IC0tc2hhcmVkPTA0MDAKKwkpCisJcmV0PSIkPyIKKwlybSAtcmYgc3ViCisJdGVzdCAkcmV0ICE9ICIwIgorJworCittb2RlYml0cyAoKSB7CisJbHMgLWwgIiQxIiB8IHNlZCAtZSAnc3xeXCguLi4uLi4uLi4uXCkuKnxcMXwnCit9CisKK2ZvciB1IGluIDAwMiAwMjIKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gInNoYXJlZD0xIGRvZXMgbm90IGNsZWFyIGJpdHMgcHJlc2V0IGJ5IHVtYXNrICR1IiAnCisJCW1rZGlyIHN1YiAmJiAoCisJCQljZCBzdWIgJiYKKwkJCXVtYXNrICR1ICYmCisJCQlnaXQgaW5pdCAtLXNoYXJlZD0xICYmCisJCQl0ZXN0IDEgPSAiJChnaXQgY29uZmlnIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSkiCisJCSkgJiYKKwkJYWN0dWFsPSQobHMgLWwgc3ViLy5naXQvSEVBRCkKKwkJY2FzZSAiJGFjdHVhbCIgaW4KKwkJLXJ3LXJ3LXItLSopCisJCQk6IGhhcHB5CisJCQk7OworCQkqKQorCQkJZWNobyBPb3BzLCAuZ2l0L0hFQUQgaXMgbm90IDA2NjQgYnV0ICRhY3R1YWwKKwkJCWZhbHNlCisJCQk7OworCQllc2FjCisJJworCXJtIC1yZiBzdWIKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhcmVkPWFsbCcgJworCW1rZGlyIHN1YiAmJgorCWNkIHN1YiAmJgorCWdpdCBpbml0IC0tc2hhcmVkPWFsbCAmJgorCXRlc3QgMiA9ICQoZ2l0IGNvbmZpZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd1cGRhdGUtc2VydmVyLWluZm8gaG9ub3JzIGNvcmUuc2hhcmVkUmVwb3NpdG9yeScgJworCTogPiBhMSAmJgorCWdpdCBhZGQgYTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGExICYmCisJdW1hc2sgMDI3NyAmJgorCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwlhY3R1YWw9IiQobHMgLWwgLmdpdC9pbmZvL3JlZnMpIiAmJgorCWNhc2UgIiRhY3R1YWwiIGluCisJLXItLXItLXItLSopCisJCTogaGFwcHkKKwkJOzsKKwkqKQorCQllY2hvIE9vcHMsIC5naXQvaW5mby9yZWZzIGlzIG5vdCAwNDQ0CisJCWZhbHNlCisJCTs7CisJZXNhYworJworCitmb3IgdSBpbgkwNjYwOnJ3LXJ3LS0tLSBcCisJCTA2NDA6cnctci0tLS0tIFwKKwkJMDYwMDpydy0tLS0tLS0gXAorCQkwNjY2OnJ3LXJ3LXJ3LSBcCisJCTA2NjQ6cnctcnctci0tCitkbworCXg9JChleHByICIkdSIgOiAiLio6XChbcnctXSpcKSIpICYmCisJeT0kKGVjaG8gIiR4IiB8IHNlZCAtZSAicy93Ly0vZyIpICYmCisJdT0kKGV4cHIgIiR1IiA6ICJcKFswLTddKlwpIikgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSAiJHUiICYmCisJdW1hc2sgMDI3NyAmJgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gInNoYXJlZCA9ICR1ICgkeSkgcm8iICcKKworCQlybSAtZiAuZ2l0L2luZm8vcmVmcyAmJgorCQlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJCWFjdHVhbD0iJChtb2RlYml0cyAuZ2l0L2luZm8vcmVmcykiICYmCisJCXRlc3QgIngkYWN0dWFsIiA9ICJ4LSR5IiB8fCB7CisJCQlscyAtbHQgLmdpdC9pbmZvCisJCQlmYWxzZQorCQl9CisJJworCisJdW1hc2sgMDc3ICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gInNoYXJlZCA9ICR1ICgkeCkgcnciICcKKworCQlybSAtZiAuZ2l0L2luZm8vcmVmcyAmJgorCQlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJCWFjdHVhbD0iJChtb2RlYml0cyAuZ2l0L2luZm8vcmVmcykiICYmCisJCXRlc3QgIngkYWN0dWFsIiA9ICJ4LSR4IiB8fCB7CisJCQlscyAtbHQgLmdpdC9pbmZvCisJCQlmYWxzZQorCQl9CisKKwknCisKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ2dpdCByZWZsb2cgZXhwaXJlIGhvbm9ycyBjb3JlLnNoYXJlZFJlcG9zaXRvcnknICcKKwlnaXQgY29uZmlnIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBncm91cCAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tYWxsICYmCisJYWN0dWFsPSIkKGxzIC1sIC5naXQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcikiICYmCisJY2FzZSAiJGFjdHVhbCIgaW4KKwktcnctcnctKikKKwkJOiBoYXBweQorCQk7OworCSopCisJCWVjaG8gT29vcHMsIC5naXQvbG9ncy9yZWZzL2hlYWRzL21hc3RlciBpcyBub3QgMDY2MiBbJGFjdHVhbF0KKwkJZmFsc2UKKwkJOzsKKwllc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdmb3JjZWQgbW9kZXMnICcKKwlta2RpciAtcCB0ZW1wbGF0ZXMvaG9va3MgJiYKKwllY2hvIHVwZGF0ZS1zZXJ2ZXItaW5mbyA+dGVtcGxhdGVzL2hvb2tzL3Bvc3QtdXBkYXRlICYmCisJY2htb2QgK3ggdGVtcGxhdGVzL2hvb2tzL3Bvc3QtdXBkYXRlICYmCisJZWNobyA6ID5yYW5kb20tZmlsZSAmJgorCW1rZGlyIG5ldyAmJgorCSgKKwkJY2QgbmV3ICYmCisJCXVtYXNrIDAwMiAmJgorCQlnaXQgaW5pdCAtLXNoYXJlZD0wNjYwIC0tdGVtcGxhdGU9Li4vdGVtcGxhdGVzICYmCisJCT5mcm90eiAmJgorCQlnaXQgYWRkIGZyb3R6ICYmCisJCWdpdCBjb21taXQgLWEgLW0gaW5pdGlhbCAmJgorCQlnaXQgcmVwYWNrCisJKSAmJgorCSMgTGlzdCByZXBvc2l0b3J5IGZpbGVzIG1lYW50IHRvIGJlIHByb3RlY3RlZDsgbm90ZSB0aGF0CisJIyBDT01NSVRfRURJVE1TRyBkb2VzIG5vdCBtYXR0ZXItLS0wbW9kZSBpcyBub3QgYWJvdXQgYQorCSMgcmVwb3NpdG9yeSB3aXRoIGEgd29yayB0cmVlLgorCWZpbmQgbmV3Ly5naXQgLXR5cGUgZiAtbmFtZSBDT01NSVRfRURJVE1TRyAtcHJ1bmUgLW8gLXByaW50IHwKKwl4YXJncyBscyAtbGQgPmFjdHVhbCAmJgorCisJIyBFdmVyeXRoaW5nIG11c3QgYmUgdW5hY2Nlc3NpYmxlIHRvIG90aGVycworCXRlc3QgLXogIiQoc2VkIC1lICIvXi4uLi4uLi4tLS0vZCIgYWN0dWFsKSIgJiYKKworCSMgQWxsIGRpcmVjdG9yaWVzIG11c3QgaGF2ZSBlaXRoZXIgMjc3MCBvciA3NzAKKwl0ZXN0IC16ICIkKHNlZCAtbiAtZSAiL15kcnd4cndbc3hdLS0tL2QiIC1lICIvXmQvcCIgYWN0dWFsKSIgJiYKKworCSMgcG9zdC11cGRhdGUgaG9vayBtdXN0IGJlIDA3NzAKKwl0ZXN0IC16ICIkKHNlZCAtbiAtZSAiL3Bvc3QtdXBkYXRlL3sKKwkJL14tcnd4cnd4LS0tL2QKKwkJcAorCX0iIGFjdHVhbCkiICYmCisKKwkjIEFsbCBmaWxlcyBpbnNpZGUgb2JqZWN0cyBtdXN0IGJlIGFjY2Vzc2libGUgYnkgdXMKKwl0ZXN0IC16ICIkKHNlZCAtbiAtZSAiL29iamVjdHNcLy97CisJCS9eZC9kCisJCS9eLXIuLXIuLS0tLS9kCisJCXAKKwl9IiBhY3R1YWwpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDItcmVwby12ZXJzaW9uLnNoIGIvdC90MTMwMi1yZXBvLXZlcnNpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGU0NzY2MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDItcmVwby12ZXJzaW9uLnNoCkBAIC0wLDAgKzEsNzAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlcG9zaXRvcnkgdmVyc2lvbiBjaGVjaycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2F0ID50ZXN0LnBhdGNoIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvdGVzdC50eHQgYi90ZXN0LnR4dAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3Rlc3QudHh0CisJQEAgLTAsMCArMSBAQAorCSsxMjMKKwlFT0YKKworCXRlc3RfY3JlYXRlX3JlcG8gInRlc3QiICYmCisJdGVzdF9jcmVhdGVfcmVwbyAidGVzdDIiICYmCisJR0lUX0NPTkZJRz10ZXN0Mi8uZ2l0L2NvbmZpZyBnaXQgY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gOTkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIHNlbGVjdGlvbiBvbiBub3JtYWwgcmVwb3MnICcKKwllY2hvIDAgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA+YWN0dWFsICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA+Li4vYWN0dWFsMgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIHNlbGVjdGlvbiBvbiB1bnN1cHBvcnRlZCByZXBvJyAnCisJIyBNYWtlIHN1cmUgaXQgd291bGQgc3RvcCBhdCB0ZXN0Miwgbm90IHRyYXNoCisJZWNobyA5OSA+ZXhwZWN0ICYmCisJKAorCQljZCB0ZXN0MiAmJgorCQlnaXQgY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciBub3QgcmVxdWlyZWQgbW9kZScgJworCWdpdCBhcHBseSAtLXN0YXQgdGVzdC5wYXRjaCAmJgorCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgYXBwbHkgLS1zdGF0IC4uL3Rlc3QucGF0Y2gKKwkpICYmCisJKAorCQljZCB0ZXN0MiAmJgorCQlnaXQgYXBwbHkgLS1zdGF0IC4uL3Rlc3QucGF0Y2gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciByZXF1aXJlZCBtb2RlJyAnCisJZ2l0IGFwcGx5IC0tY2hlY2sgLS1pbmRleCB0ZXN0LnBhdGNoICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBhcHBseSAtLWNoZWNrIC0taW5kZXggLi4vdGVzdC5wYXRjaAorCSkgJiYKKwkoCisJCWNkIHRlc3QyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIC0taW5kZXggLi4vdGVzdC5wYXRjaAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzAzLXdhY2t5LWNvbmZpZy5zaCBiL3QvdDEzMDMtd2Fja3ktY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2MTAzYTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzAzLXdhY2t5LWNvbmZpZy5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB3YWNreSBpbnB1dCB0byBnaXQgY29uZmlnJworLiAuL3Rlc3QtbGliLnNoCisKK3NldHVwKCkgeworCShwcmludGYgIltzZWN0aW9uXVxuIiAmJgorCXByaW50ZiAiICBrZXkgPSBmb28iKSA+LmdpdC9jb25maWcKK30KKworY2hlY2soKSB7CisJZWNobyAiJDIiID5leHBlY3RlZAorCWdpdCBjb25maWcgLS1nZXQgIiQxIiA+YWN0dWFsIDI+JjEKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZ5IHNhbWUga2V5JyAnCisJc2V0dXAgJiYKKwlnaXQgY29uZmlnIHNlY3Rpb24ua2V5IGJhciAmJgorCWNoZWNrIHNlY3Rpb24ua2V5IGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQga2V5IGluIHNhbWUgc2VjdGlvbicgJworCXNldHVwICYmCisJZ2l0IGNvbmZpZyBzZWN0aW9uLm90aGVyIGJhciAmJgorCWNoZWNrIHNlY3Rpb24ua2V5IGZvbyAmJgorCWNoZWNrIHNlY3Rpb24ub3RoZXIgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBrZXkgaW4gZGlmZmVyZW50IHNlY3Rpb24nICcKKwlzZXR1cCAmJgorCWdpdCBjb25maWcgc2VjdGlvbjIua2V5IGJhciAmJgorCWNoZWNrIHNlY3Rpb24ua2V5IGZvbyAmJgorCWNoZWNrIHNlY3Rpb24yLmtleSBiYXIKKycKKworU0VDVElPTj0idGVzdC5xXCJzXFxzcSdzcCBlLmtleSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSBnaXQgY29uZmlnIGVzY2FwZXMgc2VjdGlvbiBuYW1lcyBwcm9wZXJseScgJworCWdpdCBjb25maWcgIiRTRUNUSU9OIiBiYXIgJiYKKwljaGVjayAiJFNFQ1RJT04iIGJhcgorJworCitMT05HX1ZBTFVFPSQocHJpbnRmICJ4JTAxMDIxZHggYSIgNykKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBjcmFzaCBvbiBzcGVjaWFsIGxvbmcgY29uZmlnIGxpbmUnICcKKwlzZXR1cCAmJgorCWdpdCBjb25maWcgc2VjdGlvbi5rZXkgIiRMT05HX1ZBTFVFIiAmJgorCWNoZWNrIHNlY3Rpb24ua2V5ICIkTE9OR19WQUxVRSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzA0LWRlZmF1bHQtYWNsLnNoIGIvdC90MTMwNC1kZWZhdWx0LWFjbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43OTA0NWFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwNC1kZWZhdWx0LWFjbC5zaApAQCAtMCwwICsxLDY1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIE1hdHRoaWV1IE1veQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlcG9zaXRvcnkgd2l0aCBkZWZhdWx0IEFDTCcKKworIyBDcmVhdGUgdGhlIHRlc3QgcmVwbyB3aXRoIHJlc3RyaWN0aXZlIHVtYXNrCisjID0+IHRoaXMgbXVzdCBjb21lIGJlZm9yZSAuIC4vdGVzdC1saWIuc2gKK3VtYXNrIDA3NworCisuIC4vdGVzdC1saWIuc2gKKworIyBXZSBuZWVkIGFuIGFyYml0cmFyeSBvdGhlciB1c2VyIGdpdmUgcGVybWlzc2lvbiB0byB1c2luZyBBQ0xzLiByb290CisjIGlzIGEgZ29vZCBjYW5kaWRhdGU6IGV4aXN0cyBvbiBhbGwgdW5pY2VzLCBhbmQgaXQgaGFzIHBlcm1pc3Npb24KKyMgYW55d2F5LCBzbyB3ZSBkb24ndCBjcmVhdGUgYSBzZWN1cml0eSBob2xlIHJ1bm5pbmcgdGhlIHRlc3RzdWl0ZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIGZvciBhIHdvcmtpbmcgYWNsIHNldHVwJyAnCisJaWYgc2V0ZmFjbCAtbSBkOm06cnd4IC1tIHU6cm9vdDpyd3ggLiAmJgorCSAgIGdldGZhY2wgLiB8IGdyZXAgdXNlcjpyb290OnJ3eCAmJgorCSAgIHRvdWNoIHNob3VsZC1oYXZlLXJlYWRhYmxlLWFjbCAmJgorCSAgIGdldGZhY2wgc2hvdWxkLWhhdmUtcmVhZGFibGUtYWNsIHwgZWdyZXAgIm1hc2s6Oj9ydy0iCisJdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgU0VURkFDTAorCWZpCisnCisKK2lmIHRlc3QgLXogIiRMT0dOQU1FIgordGhlbgorCUxPR05BTUU9JFVTRVIKK2ZpCisKK2NoZWNrX3Blcm1zX2FuZF9hY2wgKCkgeworCXRlc3QgLXIgIiQxIiAmJgorCWdldGZhY2wgIiQxIiA+IGFjdHVhbCAmJgorCWdyZXAgLXEgInVzZXI6cm9vdDpyd3giIGFjdHVhbCAmJgorCWdyZXAgLXEgInVzZXI6JHtMT0dOQU1FfTpyd3giIGFjdHVhbCAmJgorCWVncmVwICJtYXNrOjo/ci0tIiBhY3R1YWwgPiAvZGV2L251bGwgMj4mMSAmJgorCWdyZXAgLXEgImdyb3VwOjotLS0iIGFjdHVhbCB8fCBmYWxzZQorfQorCitkaXJzX3RvX3NldD0iLi8gLmdpdC8gLmdpdC9vYmplY3RzLyAuZ2l0L29iamVjdHMvcGFjay8iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0VURkFDTCAnU2V0dXAgdGVzdCByZXBvJyAnCisJc2V0ZmFjbCAtbSBkOnU6OnJ3eCxkOmc6Oi0tLSxkOm86LS0tLGQ6bTpyd3ggJGRpcnNfdG9fc2V0ICYmCisJc2V0ZmFjbCAtbSBtOnJ3eCAgICAgICAgICAgICAgICRkaXJzX3RvX3NldCAmJgorCXNldGZhY2wgLW0gdTpyb290OnJ3eCAgICAgICAgICAkZGlyc190b19zZXQgJiYKKwlzZXRmYWNsIC1tIGQ6dToiJExPR05BTUUiOnJ3eCAgJGRpcnNfdG9fc2V0ICYmCisJc2V0ZmFjbCAtbSBkOnU6cm9vdDpyd3ggICAgICAgICRkaXJzX3RvX3NldCAmJgorCisJdG91Y2ggZmlsZS50eHQgJiYKKwlnaXQgYWRkIGZpbGUudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTRVRGQUNMICdPYmplY3RzIGNyZWF0aW9uIGRvZXMgbm90IGJyZWFrIEFDTHMgd2l0aCByZXN0cmljdGl2ZSB1bWFzaycgJworCSMgU0hBMSBmb3IgZW1wdHkgYmxvYgorCWNoZWNrX3Blcm1zX2FuZF9hY2wgLmdpdC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0VURkFDTCAnZ2l0IGdjIGRvZXMgbm90IGJyZWFrIEFDTHMgd2l0aCByZXN0cmljdGl2ZSB1bWFzaycgJworCWdpdCBnYyAmJgorCWNoZWNrX3Blcm1zX2FuZF9hY2wgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwNS1jb25maWctaW5jbHVkZS5zaCBiL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTcwNzA3NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2gKQEAgLTAsMCArMSwxNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNvbmZpZyBmaWxlIGluY2x1ZGUgZGlyZWN0aXZlcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNsdWRlIGZpbGUgYnkgYWJzb2x1dGUgcGF0aCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gXCIkKHB3ZCkvb25lXCIiID4uZ2l0Y29uZmlnICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY2x1ZGUgZmlsZSBieSByZWxhdGl2ZSBwYXRoJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYWluZWQgcmVsYXRpdmUgcGF0aHMnICcKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvICJbdGVzdF10aHJlZSA9IDMiID5zdWJkaXIvdGhyZWUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gdGhyZWUiID5zdWJkaXIvdHdvICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IHN1YmRpci90d28iID4uZ2l0Y29uZmlnICYmCisJZWNobyAzID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3QudGhyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jbHVkZSBwYXRocyBnZXQgdGlsZGUtZXhwYW5zaW9uJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSB+L29uZSIgPi5naXRjb25maWcgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jbHVkZSBvcHRpb25zIGNhbiBzdGlsbCBiZSBleGFtaW5lZCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gb25lIiA+LmdpdGNvbmZpZyAmJgorCWVjaG8gb25lID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGluY2x1ZGUucGF0aCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIGluY2x1ZGVzIG9wdGlvbiBhbmQgZXhwYW5zaW9uJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWluY2x1ZGUucGF0aD1vbmUKKwl0ZXN0Lm9uZT0xCisJRU9GCisJZ2l0IGNvbmZpZyAtLWxpc3QgPmFjdHVhbC5mdWxsICYmCisJZ3JlcCAtdiBeY29yZSBhY3R1YWwuZnVsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgZmlsZSBsb29rdXAgZG9lcyBub3QgZXhwYW5kIGluY2x1ZGVzIGJ5IGRlZmF1bHQnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IG9uZSIgPi5naXRjb25maWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRjb25maWcgdGVzdC5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2xvYmFsIHRlc3Qub25lICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0taW5jbHVkZXMgLWYgLmdpdGNvbmZpZyB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgZmlsZSBsaXN0IGRvZXMgbm90IGV4cGFuZCBpbmNsdWRlcyBieSBkZWZhdWx0JyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJZWNobyAiaW5jbHVkZS5wYXRoPW9uZSIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLWYgLmdpdGNvbmZpZyAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBjb25maWcgZmlsZSBkb2VzIG5vdCBleHBhbmQgaW5jbHVkZXMnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IG9uZSIgPi5naXRjb25maWcgJiYKKwlnaXQgY29uZmlnIHRlc3QudHdvIDIgJiYKKwllY2hvIDIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1uby1pbmNsdWRlcyB0ZXN0LnR3byA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1uby1pbmNsdWRlcyB0ZXN0Lm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFmZmVjdCBpbmNsdWRlcycgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gb25lIiA+LmdpdGNvbmZpZyAmJgorCWdpdCBjb25maWcgdGVzdC5vbmUgMiAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtZiBvbmUgdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJMQorCTIKKwlFT0YKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIGluY2x1ZGUgZmlsZXMgYXJlIGlnbm9yZWQnICcKKwljYXQgPi5naXRjb25maWcgPDwtXEVPRiAmJgorCVtpbmNsdWRlXXBhdGggPSBmb28KKwlbdGVzdF12YWx1ZSA9IHllcworCUVPRgorCWVjaG8geWVzID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3QudmFsdWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgaW5jbHVkZXMgZnJvbSBjb21tYW5kIGxpbmUgd29yaycgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCAtYyBpbmNsdWRlLnBhdGg9IiRQV0Qvb25lIiBjb25maWcgdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgaW5jbHVkZXMgZnJvbSBjb21tYW5kIGxpbmUgZmFpbCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgaW5jbHVkZS5wYXRoPW9uZSBjb25maWcgdGVzdC5vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jbHVkZSBjeWNsZXMgYXJlIGRldGVjdGVkJyAnCisJY2F0ID4uZ2l0Y29uZmlnIDw8LVxFT0YgJiYKKwlbdGVzdF12YWx1ZSA9IGdpdGNvbmZpZworCVtpbmNsdWRlXXBhdGggPSBjeWNsZQorCUVPRgorCWNhdCA+Y3ljbGUgPDwtXEVPRiAmJgorCVt0ZXN0XXZhbHVlID0gY3ljbGUKKwlbaW5jbHVkZV1wYXRoID0gLmdpdGNvbmZpZworCUVPRgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlnaXRjb25maWcKKwljeWNsZQorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHRlc3QudmFsdWUgMj5zdGRlcnIgJiYKKwlncmVwICJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGgiIHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDYteGRnLWZpbGVzLnNoIGIvdC90MTMwNi14ZGctZmlsZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGIxNGFiMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDYteGRnLWZpbGVzLnNoCkBAIC0wLDAgKzEsMTk3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIFZhbGVudGluIER1cGVycmF5LCBMdWNpZW4gS29uZywgRnJhbmNrIEpvbmFzLAorIwkJICAgICBUaG9tYXMgTmd1eSwgS2hvaSBOZ3V5ZW4KKyMJCSAgICAgR3Jlbm9ibGUgSU5QIEVuc2ltYWcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nQ29tcGF0aWJpbGl0eSB3aXRoICRYREdfQ09ORklHX0hPTUUvZ2l0LyBmaWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgY29uZmlnOiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBkb2VzbidcJyd0JyAnCisJbWtkaXIgLXAgLmNvbmZpZy9naXQgJiYKKwllY2hvICJbYWxpYXNdIiA+LmNvbmZpZy9naXQvY29uZmlnICYmCisJZWNobyAiCW15YWxpYXMgPSAhZWNobyBpbl9jb25maWciID4+LmNvbmZpZy9naXQvY29uZmlnICYmCisJZWNobyBpbl9jb25maWcgPmV4cGVjdGVkICYmCisJZ2l0IG15YWxpYXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgY29uZmlnOiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBleGlzdHMnICcKKwk+LmdpdGNvbmZpZyAmJgorCWVjaG8gIlthbGlhc10iID4uZ2l0Y29uZmlnICYmCisJZWNobyAiCW15YWxpYXMgPSAhZWNobyBpbl9naXRjb25maWciID4+LmdpdGNvbmZpZyAmJgorCWVjaG8gaW5fZ2l0Y29uZmlnID5leHBlY3RlZCAmJgorCWdpdCBteWFsaWFzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIHdpdGggLS1nZXQ6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGRvZXNuJ1wnJ3QnICcKKwlybSAuZ2l0Y29uZmlnICYmCisJZWNobyAiW3VzZXJdIiA+LmNvbmZpZy9naXQvY29uZmlnICYmCisJZWNobyAiCW5hbWUgPSByZWFkX2NvbmZpZyIgPj4uY29uZmlnL2dpdC9jb25maWcgJiYKKwllY2hvIHJlYWRfY29uZmlnID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgLS1nZXQgdXNlci5uYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIiRYREdfQ09ORklHX0hPTUUgb3ZlcnJpZGVzICRIT01FLy5jb25maWcvZ2l0JyAnCisJbWtkaXIgLXAgIiRIT01FIi94ZGcvZ2l0ICYmCisJZWNobyAiW3VzZXJdbmFtZSA9IGluX3hkZyIgPiIkSE9NRSIveGRnL2dpdC9jb25maWcgJiYKKwllY2hvIGluX3hkZyA+ZXhwZWN0ZWQgJiYKKwlYREdfQ09ORklHX0hPTUU9IiRIT01FIi94ZGcgZ2l0IGNvbmZpZyAtLWdldC1hbGwgdXNlci5uYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCB3aXRoIC0tZ2V0OiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBleGlzdHMnICcKKwk+LmdpdGNvbmZpZyAmJgorCWVjaG8gIlt1c2VyXSIgPi5naXRjb25maWcgJiYKKwllY2hvICIJbmFtZSA9IHJlYWRfZ2l0Y29uZmlnIiA+Pi5naXRjb25maWcgJiYKKwllY2hvIHJlYWRfZ2l0Y29uZmlnID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgLS1nZXQgdXNlci5uYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIHdpdGggLS1saXN0OiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBkb2VzbidcJyd0JyAnCisJcm0gLmdpdGNvbmZpZyAmJgorCWVjaG8gdXNlci5uYW1lPXJlYWRfY29uZmlnID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgLS1saXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIHdpdGggLS1saXN0OiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBleGlzdHMnICcKKwk+LmdpdGNvbmZpZyAmJgorCWVjaG8gIlt1c2VyXSIgPi5naXRjb25maWcgJiYKKwllY2hvICIJbmFtZSA9IHJlYWRfZ2l0Y29uZmlnIiA+Pi5naXRjb25maWcgJiYKKwllY2hvIHVzZXIubmFtZT1yZWFkX2dpdGNvbmZpZyA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0dXAnICcKKwlnaXQgaW5pdCBnaXQgJiYKKwljZCBnaXQgJiYKKwllY2hvIGZvbyA+dG9fYmVfZXhjbHVkZWQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFeGNsdXNpb24gb2YgYSBmaWxlIGluIHRoZSBYREcgaWdub3JlIGZpbGUnICcKKwlta2RpciAtcCAiJEhPTUUiLy5jb25maWcvZ2l0LyAmJgorCWVjaG8gdG9fYmVfZXhjbHVkZWQgPiIkSE9NRSIvLmNvbmZpZy9naXQvaWdub3JlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCB0b19iZV9leGNsdWRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICckWERHX0NPTkZJR19IT01FIG92ZXJyaWRlcyAkSE9NRS8uY29uZmlnL2dpdC9pZ25vcmUnICcKKwlta2RpciAtcCAiJEhPTUUiL3hkZy9naXQgJiYKKwllY2hvIGNvbnRlbnQgPmV4Y2x1ZGVkX2J5X3hkZ19vbmx5ICYmCisJZWNobyBleGNsdWRlZF9ieV94ZGdfb25seSA+IiRIT01FIi94ZGcvZ2l0L2lnbm9yZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYWQtdHJlZSAtLWVtcHR5IiAmJgorCShYREdfQ09ORklHX0hPTUU9IiRIT01FL3hkZyIgJiYKKwkgZXhwb3J0IFhER19DT05GSUdfSE9NRSAmJgorCSBnaXQgYWRkIHRvX2JlX2V4Y2x1ZGVkICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgZXhjbHVkZWRfYnlfeGRnX29ubHkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0V4Y2x1c2lvbiBpbiBib3RoIFhERyBhbmQgbG9jYWwgaWdub3JlIGZpbGVzJyAnCisJZWNobyB0b19iZV9leGNsdWRlZCA+LmdpdGlnbm9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgdG9fYmVfZXhjbHVkZWQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFeGNsdXNpb24gaW4gYSBub24tWERHIGdsb2JhbCBpZ25vcmUgZmlsZScgJworCXJtIC5naXRpZ25vcmUgJiYKKwllY2hvID4iJEhPTUUiLy5jb25maWcvZ2l0L2lnbm9yZSAmJgorCWVjaG8gdG9fYmVfZXhjbHVkZWQgPiIkSE9NRSIvbXlfZ2l0aWdub3JlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmV4Y2x1ZGVzZmlsZSAiJEhPTUUiL215X2dpdGlnbm9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgdG9fYmVfZXhjbHVkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2tpbmcgWERHIGlnbm9yZSBmaWxlIHdoZW4gSE9NRSBpcyB1bnNldCcgJworCT5leHBlY3RlZCAmJgorCShzYW5lX3Vuc2V0IEhPTUUgJiYKKwkgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUuZXhjbHVkZXNmaWxlICYmCisJIGdpdCBscy1maWxlcyAtLWV4Y2x1ZGUtc3RhbmRhcmQgLS1pZ25vcmVkID5hY3R1YWwpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNraW5nIGF0dHJpYnV0ZXMgaW4gdGhlIFhERyBhdHRyaWJ1dGVzIGZpbGUnICcKKwllY2hvIGZvbyA+ZiAmJgorCWdpdCBjaGVjay1hdHRyIC1hIGYgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCAtZXEgMCBhY3R1YWwgJiYKKwllY2hvICJmIGF0dHJfZiIgPiIkSE9NRSIvLmNvbmZpZy9naXQvYXR0cmlidXRlcyAmJgorCWVjaG8gImY6IGF0dHJfZjogc2V0IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2stYXR0ciAtYSBmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2tpbmcgWERHIGF0dHJpYnV0ZXMgd2hlbiBIT01FIGlzIHVuc2V0JyAnCisJPmV4cGVjdGVkICYmCisJKHNhbmVfdW5zZXQgSE9NRSAmJgorCSBnaXQgY2hlY2stYXR0ciAtYSBmID5hY3R1YWwpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyRYREdfQ09ORklHX0hPTUUgb3ZlcnJpZGVzICRIT01FLy5jb25maWcvZ2l0L2F0dHJpYnV0ZXMnICcKKwlta2RpciAtcCAiJEhPTUUiL3hkZy9naXQgJiYKKwllY2hvICJmIGF0dHJfZj14ZGciID4iJEhPTUUiL3hkZy9naXQvYXR0cmlidXRlcyAmJgorCWVjaG8gImY6IGF0dHJfZjogeGRnIiA+ZXhwZWN0ZWQgJiYKKwlYREdfQ09ORklHX0hPTUU9IiRIT01FL3hkZyIgZ2l0IGNoZWNrLWF0dHIgLWEgZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNraW5nIGF0dHJpYnV0ZXMgaW4gYm90aCBYREcgYW5kIGxvY2FsIGF0dHJpYnV0ZXMgZmlsZXMnICcKKwllY2hvICJmIC1hdHRyX2YiID4uZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gImY6IGF0dHJfZjogdW5zZXQiID5leHBlY3RlZCAmJgorCWdpdCBjaGVjay1hdHRyIC1hIGYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNraW5nIGF0dHJpYnV0ZXMgaW4gYSBub24tWERHIGdsb2JhbCBhdHRyaWJ1dGVzIGZpbGUnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgcm0gLmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJmIGF0dHJfZj10ZXN0IiA+IiRIT01FIi9teV9naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF0dHJpYnV0ZXNmaWxlICIkSE9NRSIvbXlfZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gImY6IGF0dHJfZjogdGVzdCIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrLWF0dHIgLWEgZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGU6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGRvZXNuJ1wnJ3QnICcKKwlta2RpciAtcCAiJEhPTUUiLy5jb25maWcvZ2l0ICYmCisJPiIkSE9NRSIvLmNvbmZpZy9naXQvY29uZmlnICYmCisJdGVzdF9taWdodF9mYWlsIHJtICIkSE9NRSIvLmdpdGNvbmZpZyAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICJ3cml0ZV9jb25maWciICYmCisJZWNobyAiW3VzZXJdIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICIJbmFtZSA9IHdyaXRlX2NvbmZpZyIgPj5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkSE9NRSIvLmNvbmZpZy9naXQvY29uZmlnCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGU6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGV4aXN0cycgJworCT4iJEhPTUUiLy5naXRjb25maWcgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAid3JpdGVfZ2l0Y29uZmlnIiAmJgorCWVjaG8gIlt1c2VyXSIgPmV4cGVjdGVkICYmCisJZWNobyAiCW5hbWUgPSB3cml0ZV9naXRjb25maWciID4+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJEhPTUUiLy5naXRjb25maWcKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZTogfi8uY29uZmlnL2dpdC8gZXhpc3RzIGFuZCBjb25maWcgZmlsZSBkb2VzbidcJyd0JyAnCisJdGVzdF9taWdodF9mYWlsIHJtICIkSE9NRSIvLmdpdGNvbmZpZyAmJgorCXRlc3RfbWlnaHRfZmFpbCBybSAiJEhPTUUiLy5jb25maWcvZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICJ3cml0ZV9naXRjb25maWciICYmCisJZWNobyAiW3VzZXJdIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICIJbmFtZSA9IHdyaXRlX2dpdGNvbmZpZyIgPj5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkSE9NRSIvLmdpdGNvbmZpZworJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQwMC11cGRhdGUtcmVmLnNoIGIvdC90MTQwMC11cGRhdGUtcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRmZDgzYTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKQEAgLTAsMCArMSwyODcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgU2hhd24gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHVwZGF0ZS1yZWYgYW5kIGJhc2ljIHJlZiBsb2dnaW5nJworLiAuL3Rlc3QtbGliLnNoCisKK1o9JF96NDAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlmb3IgbmFtZSBpbiBBIEIgQyBEIEUgRgorCWRvCisJCXRlc3RfdGljayAmJgorCQlUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCXNoYTE9JChlY2hvICRuYW1lIHwgZ2l0IGNvbW1pdC10cmVlICRUKSAmJgorCQlldmFsICRuYW1lPSRzaGExCisJZG9uZQorCisnCisKK209cmVmcy9oZWFkcy9tYXN0ZXIKK25fZGlyPXJlZnMvaGVhZHMvZ3UKK249JG5fZGlyL2ZpeGVzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJjcmVhdGUgJG0iIFwKKwkiZ2l0IHVwZGF0ZS1yZWYgJG0gJEEgJiYKKwkgdGVzdCAkQSInID0gJChjYXQgLmdpdC8nIiRtIicpJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJImNyZWF0ZSAkbSIgXAorCSJnaXQgdXBkYXRlLXJlZiAkbSAkQiAkQSAmJgorCSB0ZXN0ICRCIicgPSAkKGNhdCAuZ2l0LyciJG0iJyknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmYWlsIHRvIGRlbGV0ZSAkbSB3aXRoIHN0YWxlIHJlZiIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC1kICRtICRBICYmCisJdGVzdCAkQiA9ICIkKGNhdCAuZ2l0LyRtKSIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlbGV0ZSAkbSIgJworCWdpdCB1cGRhdGUtcmVmIC1kICRtICRCICYmCisJISB0ZXN0IC1mIC5naXQvJG0KKycKK3JtIC1mIC5naXQvJG0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVsZXRlICRtIHdpdGhvdXQgb2xkdmFsdWUgdmVyaWZpY2F0aW9uIiAiCisJZ2l0IHVwZGF0ZS1yZWYgJG0gJEEgJiYKKwl0ZXN0ICRBID0gXCQoY2F0IC5naXQvJG0pICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgJG0gJiYKKwkhIHRlc3QgLWYgLmdpdC8kbQorIgorcm0gLWYgLmdpdC8kbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiZmFpbCB0byBjcmVhdGUgJG4iIFwKKwkidG91Y2ggLmdpdC8kbl9kaXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgJG4gJEEgPm91dCAyPmVyciIKK3JtIC1mIC5naXQvJG5fZGlyIG91dCBlcnIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJImNyZWF0ZSAkbSAoYnkgSEVBRCkiIFwKKwkiZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQSAmJgorCSB0ZXN0ICRBIicgPSAkKGNhdCAuZ2l0LyciJG0iJyknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiY3JlYXRlICRtIChieSBIRUFEKSIgXAorCSJnaXQgdXBkYXRlLXJlZiBIRUFEICRCICRBICYmCisJIHRlc3QgJEIiJyA9ICQoY2F0IC5naXQvJyIkbSInKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhaWwgdG8gZGVsZXRlICRtIChieSBIRUFEKSB3aXRoIHN0YWxlIHJlZiIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC1kIEhFQUQgJEEgJiYKKwl0ZXN0ICRCID0gJChjYXQgLmdpdC8kbSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlbGV0ZSAkbSAoYnkgSEVBRCkiICcKKwlnaXQgdXBkYXRlLXJlZiAtZCBIRUFEICRCICYmCisJISB0ZXN0IC1mIC5naXQvJG0KKycKK3JtIC1mIC5naXQvJG0KKworY3AgLWYgLmdpdC9IRUFEIC5naXQvSEVBRC5vcmlnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWxldGUgc3ltcmVmIHdpdGhvdXQgZGVyZWZlcmVuY2UiICcKKwlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIEhFQUQgJiYKKwkhIHRlc3QgLWYgLmdpdC9IRUFECisnCitjcCAtZiAuZ2l0L0hFQUQub3JpZyAuZ2l0L0hFQUQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVsZXRlIHN5bXJlZiB3aXRob3V0IGRlcmVmZXJlbmNlIHdoZW4gdGhlIHJlZmVycmVkIHJlZiBpcyBwYWNrZWQiICcKKwllY2hvIGZvbyA+Zm9vLmMgJiYKKwlnaXQgYWRkIGZvby5jICYmCisJZ2l0IGNvbW1pdCAtbSBmb28gJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCBIRUFEICYmCisJISB0ZXN0IC1mIC5naXQvSEVBRAorJworY3AgLWYgLmdpdC9IRUFELm9yaWcgLmdpdC9IRUFECitnaXQgdXBkYXRlLXJlZiAtZCAkbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcobm90KSBjcmVhdGUgSEVBRCB3aXRoIG9sZCBzaGExJyAiCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQSAkQgorIgordGVzdF9leHBlY3Rfc3VjY2VzcyAiKG5vdCkgcHJpb3IgY3JlYXRlZCAuZ2l0LyRtIiAiCisJISB0ZXN0IC1mIC5naXQvJG0KKyIKK3JtIC1mIC5naXQvJG0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJImNyZWF0ZSBIRUFEIiBcCisJImdpdCB1cGRhdGUtcmVmIEhFQUQgJEEiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcobm90KSBjaGFuZ2UgSEVBRCB3aXRoIHdyb25nIFNIQTEnICIKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiBIRUFEICRCICRaCisiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIobm90KSBjaGFuZ2VkIC5naXQvJG0iICIKKwkhIHRlc3QgJEIiJyA9ICQoY2F0IC5naXQvJyIkbSInKQorJworcm0gLWYgLmdpdC8kbQorCis6IGEgcmVwb3NpdG9yeSB3aXRoIHdvcmtpbmcgdHJlZSBhbHdheXMgaGFzIHJlZmxvZyB0aGVzZSBkYXlzLi4uCis6ID4uZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJjcmVhdGUgJG0gKGxvZ2dlZCBieSB0b3VjaCkiIFwKKwknR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBcCisJIGdpdCB1cGRhdGUtcmVmIEhFQUQgJyIkQSInIC1tICJJbml0aWFsIENyZWF0aW9uIiAmJgorCSB0ZXN0ICciJEEiJyA9ICQoY2F0IC5naXQvJyIkbSInKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJ1cGRhdGUgJG0gKGxvZ2dlZCBieSB0b3VjaCkiIFwKKwknR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMxIiBcCisJIGdpdCB1cGRhdGUtcmVmIEhFQUQnIiAkQiAkQSAiJy1tICJTd2l0Y2giICYmCisJIHRlc3QgJyIkQiInID0gJChjYXQgLmdpdC8nIiRtIicpJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJInNldCAkbSAobG9nZ2VkIGJ5IHRvdWNoKSIgXAorCSdHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6NDEiIFwKKwkgZ2l0IHVwZGF0ZS1yZWYgSEVBRCciICRBICYmCisJIHRlc3QgJEEiJyA9ICQoY2F0IC5naXQvJyIkbSInKScKKworY2F0ID5leHBlY3QgPDxFT0YKKyRaICRBICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMjAwICswMDAwCUluaXRpYWwgQ3JlYXRpb24KKyRBICRCICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMjYwICswMDAwCVN3aXRjaAorJEIgJEEgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA4NjAgKzAwMDAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJInZlcmlmeWluZyAkbSdzIGxvZyIgXAorCSJ0ZXN0X2NtcCBleHBlY3QgLmdpdC9sb2dzLyRtIgorcm0gLXJmIC5naXQvJG0gLmdpdC9sb2dzIGV4cGVjdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZW5hYmxlIGNvcmUubG9nQWxsUmVmVXBkYXRlcycgXAorCSdnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyB0cnVlICYmCisJIHRlc3QgdHJ1ZSA9ICQoZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgY29yZS5sb2dBbGxSZWZVcGRhdGVzKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJImNyZWF0ZSAkbSAobG9nZ2VkIGJ5IGNvbmZpZykiIFwKKwknR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMyIiBcCisJIGdpdCB1cGRhdGUtcmVmIEhFQUQnIiAkQSAiJy1tICJJbml0aWFsIENyZWF0aW9uIiAmJgorCSB0ZXN0ICciJEEiJyA9ICQoY2F0IC5naXQvJyIkbSInKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJ1cGRhdGUgJG0gKGxvZ2dlZCBieSBjb25maWcpIiBcCisJJ0dJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMyIgXAorCSBnaXQgdXBkYXRlLXJlZiBIRUFEJyIgJEIgJEEgIictbSAiU3dpdGNoIiAmJgorCSB0ZXN0ICciJEIiJyA9ICQoY2F0IC5naXQvJyIkbSInKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJzZXQgJG0gKGxvZ2dlZCBieSBjb25maWcpIiBcCisJJ0dJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzo0MyIgXAorCSBnaXQgdXBkYXRlLXJlZiBIRUFEICciJEEgJiYKKwkgdGVzdCAkQSInID0gJChjYXQgLmdpdC8nIiRtIicpJworCitjYXQgPmV4cGVjdCA8PEVPRgorJFogJEEgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzMjAgKzAwMDAJSW5pdGlhbCBDcmVhdGlvbgorJEEgJEIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzODAgKzAwMDAJU3dpdGNoCiskQiAkQSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDk4MCArMDAwMAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkidmVyaWZ5aW5nICRtJ3MgbG9nIiBcCisJJ3Rlc3RfY21wIGV4cGVjdCAuZ2l0L2xvZ3MvJG0nCitybSAtZiAuZ2l0LyRtIC5naXQvbG9ncy8kbSBleHBlY3QKKworZ2l0IHVwZGF0ZS1yZWYgJG0gJEQKK2NhdCA+LmdpdC9sb2dzLyRtIDw8RU9GCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICRDICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzIwIC0wNTAwCiskQyAkQSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDM1MCAtMDUwMAorJEEgJEIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzODAgLTA1MDAKKyRGICRaICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwNjgwIC0wNTAwCiskWiAkRSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDk4MCAtMDUwMAorRU9GCisKK2VkPSJUaHUsIDI2IE1heSAyMDA1IDE4OjMyOjAwIC0wNTAwIgorZ2Q9IlRodSwgMjYgTWF5IDIwMDUgMTg6MzM6MDAgLTA1MDAiCitsZD0iVGh1LCAyNiBNYXkgMjAwNSAxODo0MzowMCAtMDUwMCIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdRdWVyeSAibWFzdGVyQHtNYXkgMjUgMjAwNX0iIChiZWZvcmUgaGlzdG9yeSknIFwKKwkncm0gLWYgbyBlICYmCisJIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7TWF5IDI1IDIwMDV9IiA+byAyPmUgJiYKKwkgdGVzdCAnIiRDIicgPSAkKGNhdCBvKSAmJgorCSB0ZXN0ICJ3YXJuaW5nOiBMb2cgZm9yICdcJ21hc3RlclwnJyBvbmx5IGdvZXMgYmFjayB0byAkZWQuIiA9ICIkKGNhdCBlKSInCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiUXVlcnkgbWFzdGVyQHsyMDA1LTA1LTI1fSAoYmVmb3JlIGhpc3RvcnkpIiBcCisJJ3JtIC1mIG8gZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7MjAwNS0wNS0yNX0gPm8gMj5lICYmCisJIHRlc3QgJyIkQyInID0gJChjYXQgbykgJiYKKwkgZWNobyB0ZXN0ICJ3YXJuaW5nOiBMb2cgZm9yICdcJ21hc3RlclwnJyBvbmx5IGdvZXMgYmFjayB0byAkZWQuIiA9ICIkKGNhdCBlKSInCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUXVlcnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzE6NTl9IiAoMSBzZWNvbmQgYmVmb3JlIGhpc3RvcnkpJyBcCisJJ3JtIC1mIG8gZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMxOjU5fSIgPm8gMj5lICYmCisJIHRlc3QgJyIkQyInID0gJChjYXQgbykgJiYKKwkgdGVzdCAid2FybmluZzogTG9nIGZvciAnXCcnbWFzdGVyJ1wnJyBvbmx5IGdvZXMgYmFjayB0byAkZWQuIiA9ICIkKGNhdCBlKSInCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUXVlcnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzI6MDB9IiAoZXhhY3RseSBoaXN0b3J5IHN0YXJ0KScgXAorCSdybSAtZiBvIGUgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMjowMH0iID5vIDI+ZSAmJgorCSB0ZXN0ICciJEMiJyA9ICQoY2F0IG8pICYmCisJIHRlc3QgIiIgPSAiJChjYXQgZSkiJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1F1ZXJ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMyOjMwfSIgKGZpcnN0IG5vbi1jcmVhdGlvbiBjaGFuZ2UpJyBcCisJJ3JtIC1mIG8gZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMyOjMwfSIgPm8gMj5lICYmCisJIHRlc3QgJyIkQSInID0gJChjYXQgbykgJiYKKwkgdGVzdCAiIiA9ICIkKGNhdCBlKSInCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUXVlcnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzozMzowMX0iIChtaWRkbGUgb2YgaGlzdG9yeSB3aXRoIGdhcCknIFwKKwkncm0gLWYgbyBlICYmCisJIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzozMzowMX0iID5vIDI+ZSAmJgorCSB0ZXN0ICciJEIiJyA9ICQoY2F0IG8pICYmCisJIHRlc3QgIndhcm5pbmc6IExvZyAuZ2l0L2xvZ3MvJyIkbSBoYXMgZ2FwIGFmdGVyICRnZCInLiIgPSAiJChjYXQgZSkiJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1F1ZXJ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6Mzg6MDB9IiAobWlkZGxlIG9mIGhpc3RvcnkpJyBcCisJJ3JtIC1mIG8gZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6Mzg6MDB9IiA+byAyPmUgJiYKKwkgdGVzdCAnIiRaIicgPSAkKGNhdCBvKSAmJgorCSB0ZXN0ICIiID0gIiQoY2F0IGUpIicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdRdWVyeSAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjQzOjAwfSIgKGV4YWN0IGVuZCBvZiBoaXN0b3J5KScgXAorCSdybSAtZiBvIGUgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjQzOjAwfSIgPm8gMj5lICYmCisJIHRlc3QgJyIkRSInID0gJChjYXQgbykgJiYKKwkgdGVzdCAiIiA9ICIkKGNhdCBlKSInCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUXVlcnkgIm1hc3RlckB7MjAwNS0wNS0yOH0iIChwYXN0IGVuZCBvZiBoaXN0b3J5KScgXAorCSdybSAtZiBvIGUgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHsyMDA1LTA1LTI4fSIgPm8gMj5lICYmCisJIHRlc3QgJyIkRCInID0gJChjYXQgbykgJiYKKwkgdGVzdCAid2FybmluZzogTG9nIC5naXQvbG9ncy8nIiRtIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAkbGQiJy4iID0gIiQoY2F0IGUpIicKKworCitybSAtZiAuZ2l0LyRtIC5naXQvbG9ncy8kbSBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0aW5nIGluaXRpYWwgZmlsZXMnIFwKKyAgICAnZWNobyBURVNUID5GICYmCisgICAgIGdpdCBhZGQgRiAmJgorCSBHSVRfQVVUSE9SX0RBVEU9IjIwMDUtMDUtMjYgMjM6MzAiIFwKKwkgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBnaXQgY29tbWl0IC1tIGFkZCAtYSAmJgorCSBoX1RFU1Q9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJIGVjaG8gVGhlIG90aGVyIGRheSB0aGlzIGRpZCBub3Qgd29yay4gPk0gJiYKKwkgZWNobyBBbmQgdGhlbiBCb2IgdG9sZCBtZSBob3cgdG8gZml4IGl0LiA+Pk0gJiYKKwkgZWNobyBPVEhFUiA+RiAmJgorCSBHSVRfQVVUSE9SX0RBVEU9IjIwMDUtMDUtMjYgMjM6NDEiIFwKKwkgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQxIiBnaXQgY29tbWl0IC1GIE0gLWEgJiYKKwkgaF9PVEhFUj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkgR0lUX0FVVEhPUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQ0IiBcCisJIEdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzo0NCIgZ2l0IGNvbW1pdCAtLWFtZW5kICYmCisJIGhfRklYRUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJIGVjaG8gTWVyZ2VkIGluaXRpYWwgY29tbWl0IGFuZCBhIGxhdGVyIGNvbW1pdC4gPk0gJiYKKwkgZWNobyAkaF9URVNUID4uZ2l0L01FUkdFX0hFQUQgJiYKKwkgR0lUX0FVVEhPUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQ1IiBcCisJIEdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzo0NSIgZ2l0IGNvbW1pdCAtRiBNICYmCisJIGhfTUVSR0VEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCSBybSAtZiBNJworCitjYXQgPmV4cGVjdCA8PEVPRgorJFogJGhfVEVTVCAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDIwMCArMDAwMAljb21taXQgKGluaXRpYWwpOiBhZGQKKyRoX1RFU1QgJGhfT1RIRVIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA4NjAgKzAwMDAJY29tbWl0OiBUaGUgb3RoZXIgZGF5IHRoaXMgZGlkIG5vdCB3b3JrLgorJGhfT1RIRVIgJGhfRklYRUQgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTEwNDAgKzAwMDAJY29tbWl0IChhbWVuZCk6IFRoZSBvdGhlciBkYXkgdGhpcyBkaWQgbm90IHdvcmsuCiskaF9GSVhFRCAkaF9NRVJHRUQgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTExMDAgKzAwMDAJY29tbWl0IChtZXJnZSk6IE1lcmdlZCBpbml0aWFsIGNvbW1pdCBhbmQgYSBsYXRlciBjb21taXQuCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdnaXQgY29tbWl0IGxvZ2dlZCB1cGRhdGVzJyBcCisJInRlc3RfY21wIGV4cGVjdCAuZ2l0L2xvZ3MvJG0iCit1bnNldCBoX1RFU1QgaF9PVEhFUiBoX0ZJWEVEIGhfTUVSR0VECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiBtYXN0ZXI6RiAoZXhwZWN0IE9USEVSKScgXAorCSd0ZXN0IE9USEVSID0gJChnaXQgY2F0LWZpbGUgYmxvYiBtYXN0ZXI6RiknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyQHsyMDA1LTA1LTI2IDIzOjMwfTpGIChleHBlY3QgVEVTVCknIFwKKwkndGVzdCBURVNUID0gJChnaXQgY2F0LWZpbGUgYmxvYiAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjMwfTpGIiknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyQHsyMDA1LTA1LTI2IDIzOjQyfTpGIChleHBlY3QgT1RIRVIpJyBcCisJJ3Rlc3QgT1RIRVIgPSAkKGdpdCBjYXQtZmlsZSBibG9iICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6NDJ9OkYiKScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAxLXN5bWJvbGljLXJlZi5zaCBiL3QvdDE0MDEtc3ltYm9saWMtcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjOTY1NTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDAxLXN5bWJvbGljLXJlZi5zaApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgc3ltYm9saWMtcmVmIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgSWYgdGhlIHRlc3RzIG11bmdpbmcgSEVBRCBmYWlsLCB0aGV5IGNhbiBicmVhayBkZXRlY3Rpb24gb2YKKyMgdGhlIGdpdCByZXBvLCBtZWFuaW5nIHRoYXQgZnVydGhlciB0ZXN0cyB3aWxsIG9wZXJhdGUgb24KKyMgdGhlIHN1cnJvdW5kaW5nIGdpdCByZXBvIGluc3RlYWQgb2YgdGhlIHRyYXNoIGRpcmVjdG9yeS4KK3Jlc2V0X3RvX3NhbmUoKSB7CisJZWNobyByZWY6IHJlZnMvaGVhZHMvZm9vID4uZ2l0L0hFQUQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIHdyaXRlcyBIRUFEJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvZm9vICYmCisJZWNobyByZWY6IHJlZnMvaGVhZHMvZm9vID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWFkcyBIRUFEJyAnCisJZWNobyByZWZzL2hlYWRzL2ZvbyA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWZ1c2VzIG5vbi1yZWYgZm9yIEhFQUQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgZm9vCisnCityZXNldF90b19zYW5lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWZ1c2VzIGJhcmUgc2hhMScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgYGdpdCByZXYtcGFyc2UgSEVBRGAKKycKK3Jlc2V0X3RvX3NhbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAyLWNoZWNrLXJlZi1mb3JtYXQuc2ggYi90L3QxNDAyLWNoZWNrLXJlZi1mb3JtYXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWFlNGQ4NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MDItY2hlY2stcmVmLWZvcm1hdC5zaApAQCAtMCwwICsxLDE5NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IGNoZWNrLXJlZi1mb3JtYXQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit2YWxpZF9yZWYoKSB7CisJcHJlcmVxPQorCWNhc2UgJDEgaW4KKwlbQS1aXSopCisJCXByZXJlcT0kMQorCQlzaGlmdAorCWVzYWMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgInJlZiBuYW1lICckMScgaXMgdmFsaWQkezI6KyB3aXRoIG9wdGlvbnMgJDJ9IiAiCisJCWdpdCBjaGVjay1yZWYtZm9ybWF0ICQyICckMScKKwkiCit9CitpbnZhbGlkX3JlZigpIHsKKwlwcmVyZXE9CisJY2FzZSAkMSBpbgorCVtBLVpdKikKKwkJcHJlcmVxPSQxCisJCXNoaWZ0CisJZXNhYworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByZXJlcSAicmVmIG5hbWUgJyQxJyBpcyBpbnZhbGlkJHsyOisgd2l0aCBvcHRpb25zICQyfSIgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stcmVmLWZvcm1hdCAkMiAnJDEnCisJIgorfQorCitpbnZhbGlkX3JlZiAnJworaW52YWxpZF9yZWYgTk9UX01JTkdXICcvJworaW52YWxpZF9yZWYgTk9UX01JTkdXICcvJyAtLWFsbG93LW9uZWxldmVsCitpbnZhbGlkX3JlZiBOT1RfTUlOR1cgJy8nIC0tbm9ybWFsaXplCitpbnZhbGlkX3JlZiBOT1RfTUlOR1cgJy8nICctLWFsbG93LW9uZWxldmVsIC0tbm9ybWFsaXplJwordmFsaWRfcmVmICdmb28vYmFyL2JheicKK3ZhbGlkX3JlZiAnZm9vL2Jhci9iYXonIC0tbm9ybWFsaXplCitpbnZhbGlkX3JlZiAncmVmcy8vL2hlYWRzL2ZvbycKK3ZhbGlkX3JlZiAncmVmcy8vL2hlYWRzL2ZvbycgLS1ub3JtYWxpemUKK2ludmFsaWRfcmVmICdoZWFkcy9mb28vJworaW52YWxpZF9yZWYgTk9UX01JTkdXICcvaGVhZHMvZm9vJwordmFsaWRfcmVmIE5PVF9NSU5HVyAnL2hlYWRzL2ZvbycgLS1ub3JtYWxpemUKK2ludmFsaWRfcmVmICcvLy9oZWFkcy9mb28nCit2YWxpZF9yZWYgJy8vL2hlYWRzL2ZvbycgLS1ub3JtYWxpemUKK2ludmFsaWRfcmVmICcuL2ZvbycKK2ludmFsaWRfcmVmICcuL2Zvby9iYXInCitpbnZhbGlkX3JlZiAnZm9vLy4vYmFyJworaW52YWxpZF9yZWYgJ2Zvby9iYXIvLicKK2ludmFsaWRfcmVmICcucmVmcy9mb28nCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vLi5iYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vP2JhcicKK3ZhbGlkX3JlZiAnZm9vLi9iYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vLmxvY2snCitpbnZhbGlkX3JlZiAnaGVhZHMvLy9mb28ubG9jaycKK2ludmFsaWRfcmVmICdmb28ubG9jay9iYXInCitpbnZhbGlkX3JlZiAnZm9vLmxvY2svLy9iYXInCit2YWxpZF9yZWYgJ2hlYWRzL2Zvb0BiYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvdkB7YXRpb24nCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vXGJhcicKK2ludmFsaWRfcmVmICIkKHByaW50ZiAnaGVhZHMvZm9vXHQnKSIKK2ludmFsaWRfcmVmICIkKHByaW50ZiAnaGVhZHMvZm9vXDE3NycpIgordmFsaWRfcmVmICIkKHByaW50ZiAnaGVhZHMvZnVcMzAzXDIzNycpIgoraW52YWxpZF9yZWYgJ2hlYWRzLypmb28vYmFyJyAtLXJlZnNwZWMtcGF0dGVybgoraW52YWxpZF9yZWYgJ2hlYWRzL2ZvbyovYmFyJyAtLXJlZnNwZWMtcGF0dGVybgoraW52YWxpZF9yZWYgJ2hlYWRzL2Yqby9iYXInIC0tcmVmc3BlYy1wYXR0ZXJuCisKK3JlZj0nZm9vJworaW52YWxpZF9yZWYgIiRyZWYiCit2YWxpZF9yZWYgIiRyZWYiIC0tYWxsb3ctb25lbGV2ZWwKK2ludmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgordmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKK2ludmFsaWRfcmVmICIkcmVmIiAtLW5vcm1hbGl6ZQordmFsaWRfcmVmICIkcmVmIiAnLS1hbGxvdy1vbmVsZXZlbCAtLW5vcm1hbGl6ZScKKworcmVmPSdmb28vYmFyJwordmFsaWRfcmVmICIkcmVmIgordmFsaWRfcmVmICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCit2YWxpZF9yZWYgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCit2YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJwordmFsaWRfcmVmICIkcmVmIiAtLW5vcm1hbGl6ZQorCityZWY9J2Zvby8qJworaW52YWxpZF9yZWYgIiRyZWYiCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1hbGxvdy1vbmVsZXZlbAordmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgordmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKKworcmVmPScqL2ZvbycKK2ludmFsaWRfcmVmICIkcmVmIgoraW52YWxpZF9yZWYgIiRyZWYiIC0tYWxsb3ctb25lbGV2ZWwKK3ZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1ub3JtYWxpemUKK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tbm9ybWFsaXplJworCityZWY9J2Zvby8qL2JhcicKK2ludmFsaWRfcmVmICIkcmVmIgoraW52YWxpZF9yZWYgIiRyZWYiIC0tYWxsb3ctb25lbGV2ZWwKK3ZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCisKK3JlZj0nKicKK2ludmFsaWRfcmVmICIkcmVmIgoraW52YWxpZF9yZWYgIiRyZWYiIC0tYWxsb3ctb25lbGV2ZWwKK2ludmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgordmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKKworcmVmPSdmb28vKi8qJworaW52YWxpZF9yZWYgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCitpbnZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCisKK3JlZj0nKi9mb28vKicKK2ludmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgoraW52YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJworCityZWY9JyovKi9mb28nCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK2ludmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKKworcmVmPScvZm9vJworaW52YWxpZF9yZWYgTk9UX01JTkdXICIkcmVmIgoraW52YWxpZF9yZWYgTk9UX01JTkdXICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCitpbnZhbGlkX3JlZiBOT1RfTUlOR1cgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCitpbnZhbGlkX3JlZiBOT1RfTUlOR1cgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJworaW52YWxpZF9yZWYgTk9UX01JTkdXICIkcmVmIiAtLW5vcm1hbGl6ZQordmFsaWRfcmVmIE5PVF9NSU5HVyAiJHJlZiIgJy0tYWxsb3ctb25lbGV2ZWwgLS1ub3JtYWxpemUnCitpbnZhbGlkX3JlZiBOT1RfTUlOR1cgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLW5vcm1hbGl6ZScKK3ZhbGlkX3JlZiBOT1RfTUlOR1cgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsIC0tbm9ybWFsaXplJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9IiAnCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXNoYTE9JChlY2hvIEEgfCBnaXQgY29tbWl0LXRyZWUgJFQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJHNoYTEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAkc2hhMSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgb3JpZ2luL21hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlyZWZuYW1lPSQoZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggQHstMX0pICYmCisJdGVzdCAiJHJlZm5hbWUiID0gIiRzaGExIiAmJgorCXJlZm5hbWUyPSQoZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggQHstMn0pICYmCisJdGVzdCAiJHJlZm5hbWUyIiA9IG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBmcm9tIHN1YmRpcicgJworCW1rZGlyIHN1YmRpciAmJgorCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXNoYTE9JChlY2hvIEEgfCBnaXQgY29tbWl0LXRyZWUgJFQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJHNoYTEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAkc2hhMSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgb3JpZ2luL21hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlyZWZuYW1lPSQoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfQorCSkgJiYKKwl0ZXN0ICIkcmVmbmFtZSIgPSAiJHNoYTEiCisnCisKK3ZhbGlkX3JlZl9ub3JtYWxpemVkKCkgeworCXByZXJlcT0KKwljYXNlICQxIGluCisJW0EtWl0qKQorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICJyZWYgbmFtZSAnJDEnIHNpbXBsaWZpZXMgdG8gJyQyJyIgIgorCQlyZWZuYW1lPVwkKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tbm9ybWFsaXplICckMScpICYmCisJCXRlc3QgXCJcJHJlZm5hbWVcIiA9ICckMicKKwkiCit9CitpbnZhbGlkX3JlZl9ub3JtYWxpemVkKCkgeworCXByZXJlcT0KKwljYXNlICQxIGluCisJW0EtWl0qKQorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICJjaGVjay1yZWYtZm9ybWF0IC0tbm9ybWFsaXplIHJlamVjdHMgJyQxJyIgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stcmVmLWZvcm1hdCAtLW5vcm1hbGl6ZSAnJDEnCisJIgorfQorCit2YWxpZF9yZWZfbm9ybWFsaXplZCAnaGVhZHMvZm9vJyAnaGVhZHMvZm9vJwordmFsaWRfcmVmX25vcm1hbGl6ZWQgJ3JlZnMvLy9oZWFkcy9mb28nICdyZWZzL2hlYWRzL2ZvbycKK3ZhbGlkX3JlZl9ub3JtYWxpemVkIE5PVF9NSU5HVyAnL2hlYWRzL2ZvbycgJ2hlYWRzL2ZvbycKK3ZhbGlkX3JlZl9ub3JtYWxpemVkICcvLy9oZWFkcy9mb28nICdoZWFkcy9mb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdmb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkIE5PVF9NSU5HVyAnL2ZvbycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzL2Zvby8uLi9iYXInCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdoZWFkcy8uL2ZvbycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzXGZvbycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzL2Zvby5sb2NrJworaW52YWxpZF9yZWZfbm9ybWFsaXplZCAnaGVhZHMvLy9mb28ubG9jaycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2Zvby5sb2NrL2JhcicKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2Zvby5sb2NrLy8vYmFyJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MTAtcmVmbG9nLnNoIGIvdC90MTQxMC1yZWZsb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjM2YjEzYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MTAtcmVmbG9nLnNoCkBAIC0wLDAgKzEsMjQ4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcHJ1bmUgYW5kIHJlZmxvZyBleHBpcmF0aW9uJworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX2hhdmUgKCkgeworCWdhYWg9ICYmCisJZm9yIE4gaW4gIiRAIgorCWRvCisJCWV2YWwgIm89XCQkTiIgJiYgZ2l0IGNhdC1maWxlIC10ICRvIHx8IHsKKwkJCWVjaG8gR2FhaCAkTgorCQkJZ2FhaD0kTgorCQkJYnJlYWsKKwkJfQorCWRvbmUgJiYKKwl0ZXN0IC16ICIkZ2FhaCIKK30KKworY2hlY2tfZnNjayAoKSB7CisJb3V0cHV0PSQoZ2l0IGZzY2sgLS1mdWxsKQorCWNhc2UgIiQxIiBpbgorCScnKQorCQl0ZXN0IC16ICIkb3V0cHV0IiA7OworCSopCisJCWVjaG8gIiRvdXRwdXQiIHwgZ3JlcCAiJDEiIDs7CisJZXNhYworfQorCitjb3JydXB0ICgpIHsKKwlhYT0kezElPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz99IHp6PSR7MSM/P30KKwltdiAuZ2l0L29iamVjdHMvJGFhLyR6eiAuZ2l0LyRhYSR6egorfQorCityZWNvdmVyICgpIHsKKwlhYT0kezElPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz99IHp6PSR7MSM/P30KKwlta2RpciAtcCAuZ2l0L29iamVjdHMvJGFhCisJbXYgLmdpdC8kYWEkenogLmdpdC9vYmplY3RzLyRhYS8kenoKK30KKworY2hlY2tfZG9udF9oYXZlICgpIHsKKwlnYWFoPSAmJgorCWZvciBOIGluICIkQCIKKwlkbworCQlldmFsICJvPVwkJE4iCisJCWdpdCBjYXQtZmlsZSAtdCAkbyAmJiB7CisJCQllY2hvIEdhYWggJE4KKwkJCWdhYWg9JE4KKwkJCWJyZWFrCisJCX0KKwlkb25lCisJdGVzdCAteiAiJGdhYWgiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIC1wIEEvQiAmJgorCWVjaG8gcmF0ID5DICYmCisJZWNobyBveCA+QS9EICYmCisJZWNobyB0aWdlciA+QS9CL0UgJiYKKwlnaXQgYWRkIC4gJiYKKworCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIHJhYmJpdCAmJgorCUg9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRGAgJiYKKwlBPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6QWAgJiYKKwlCPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6QS9CYCAmJgorCUM9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpDYCAmJgorCUQ9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpBL0RgICYmCisJRT1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOkEvQi9FYCAmJgorCWNoZWNrX2ZzY2sgJiYKKworCXRlc3RfY2htb2QgK3ggQyAmJgorCWdpdCBhZGQgQyAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGRyYWdvbiAmJgorCUw9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRGAgJiYKKwljaGVja19mc2NrICYmCisKKwlybSAtZiBDIEEvQi9FICYmCisJZWNobyBzbmFrZSA+RiAmJgorCWVjaG8gaG9yc2UgPkEvRyAmJgorCWdpdCBhZGQgRiBBL0cgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSBzaGVlcCAmJgorCUY9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpGYCAmJgorCUc9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpBL0dgICYmCisJST1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOkFgICYmCisJSj1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYCAmJgorCWNoZWNrX2ZzY2sgJiYKKworCXJtIC1mIEEvRyAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tIG1vbmtleSAmJgorCUs9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRGAgJiYKKwljaGVja19mc2NrICYmCisKKwljaGVja19oYXZlIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMICYmCisKKwlnaXQgcHJ1bmUgJiYKKworCWNoZWNrX2hhdmUgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgJiYKKworCWNoZWNrX2ZzY2sgJiYKKworCXRlc3RfbGluZV9jb3VudCA9IDQgLmdpdC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcmV3aW5kICcKKwl0ZXN0X3RpY2sgJiYgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgJiYKKwl0ZXN0IC1mIEMgJiYKKwl0ZXN0IC1mIEEvQi9FICYmCisJISB0ZXN0IC1mIEYgJiYKKwkhIHRlc3QgLWYgQS9HICYmCisKKwljaGVja19oYXZlIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMICYmCisKKwlnaXQgcHJ1bmUgJiYKKworCWNoZWNrX2hhdmUgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgJiYKKworCXRlc3RfbGluZV9jb3VudCA9IDUgLmdpdC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgYW5kIGNoZWNrJyAnCisKKwljb3JydXB0ICRGICYmCisJY2hlY2tfZnNjayAibWlzc2luZyBibG9iICRGIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBleHBpcmUgLS1kcnktcnVuIHNob3VsZCBub3QgdG91Y2ggcmVmbG9nJyAnCisKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWRyeS1ydW4gXAorCQktLWV4cGlyZT0kKCgkdGVzdF90aWNrIC0gMTAwMDApKSBcCisJCS0tZXhwaXJlLXVucmVhY2hhYmxlPSQoKCR0ZXN0X3RpY2sgLSAxMDAwMCkpIFwKKwkJLS1zdGFsZS1maXggXAorCQktLWFsbCAmJgorCisJdGVzdF9saW5lX2NvdW50ID0gNSAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKworCWNoZWNrX2ZzY2sgIm1pc3NpbmcgYmxvYiAkRiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIGV4cGlyZScgJworCisJZ2l0IHJlZmxvZyBleHBpcmUgLS12ZXJib3NlIFwKKwkJLS1leHBpcmU9JCgoJHRlc3RfdGljayAtIDEwMDAwKSkgXAorCQktLWV4cGlyZS11bnJlYWNoYWJsZT0kKCgkdGVzdF90aWNrIC0gMTAwMDApKSBcCisJCS0tc3RhbGUtZml4IFwKKwkJLS1hbGwgJiYKKworCXRlc3RfbGluZV9jb3VudCA9IDIgLmdpdC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyICYmCisKKwljaGVja19mc2NrICJkYW5nbGluZyBjb21taXQgJEsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIGFuZCBmc2NrJyAnCisKKwlnaXQgcHJ1bmUgJiYKKwljaGVja19mc2NrICYmCisKKwljaGVja19oYXZlIEEgQiBDIEQgRSBIIEwgJiYKKwljaGVja19kb250X2hhdmUgRiBHIEkgSiBLCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjb3ZlciBhbmQgY2hlY2snICcKKworCXJlY292ZXIgJEYgJiYKKwljaGVja19mc2NrICJkYW5nbGluZyBibG9iICRGIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZScgJworCWVjaG8gMSA+IEMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJhdCBDICYmCisKKwllY2hvIDIgPiBDICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBveCBDICYmCisKKwllY2hvIDMgPiBDICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aWdlciBDICYmCisKKwlIRUFEX2VudHJ5X2NvdW50PSQoZ2l0IHJlZmxvZyB8IHdjIC1sKSAmJgorCW1hc3Rlcl9lbnRyeV9jb3VudD0kKGdpdCByZWZsb2cgc2hvdyBtYXN0ZXIgfCB3YyAtbCkgJiYKKworCXRlc3QgJEhFQURfZW50cnlfY291bnQgPSA1ICYmCisJdGVzdCAkbWFzdGVyX2VudHJ5X2NvdW50ID0gNSAmJgorCisKKwlnaXQgcmVmbG9nIGRlbGV0ZSBtYXN0ZXJAezF9ICYmCisJZ2l0IHJlZmxvZyBzaG93IG1hc3RlciA+IG91dHB1dCAmJgorCXRlc3QgJCgoJG1hc3Rlcl9lbnRyeV9jb3VudCAtIDEpKSA9ICQod2MgLWwgPCBvdXRwdXQpICYmCisJdGVzdCAkSEVBRF9lbnRyeV9jb3VudCA9ICQoZ2l0IHJlZmxvZyB8IHdjIC1sKSAmJgorCSEgZ3JlcCBveCA8IG91dHB1dCAmJgorCisJbWFzdGVyX2VudHJ5X2NvdW50PSQod2MgLWwgPCBvdXRwdXQpICYmCisKKwlnaXQgcmVmbG9nIGRlbGV0ZSBIRUFEQHsxfSAmJgorCXRlc3QgJCgoJEhFQURfZW50cnlfY291bnQgLTEpKSA9ICQoZ2l0IHJlZmxvZyB8IHdjIC1sKSAmJgorCXRlc3QgJG1hc3Rlcl9lbnRyeV9jb3VudCA9ICQoZ2l0IHJlZmxvZyBzaG93IG1hc3RlciB8IHdjIC1sKSAmJgorCisJSEVBRF9lbnRyeV9jb3VudD0kKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKworCWdpdCByZWZsb2cgZGVsZXRlIG1hc3RlckB7MDcuMDQuMjAwNS4xNToxNTowMC4tMDcwMH0gJiYKKwlnaXQgcmVmbG9nIHNob3cgbWFzdGVyID4gb3V0cHV0ICYmCisJdGVzdCAkKCgkbWFzdGVyX2VudHJ5X2NvdW50IC0gMSkpID0gJCh3YyAtbCA8IG91dHB1dCkgJiYKKwkhIGdyZXAgZHJhZ29uIDwgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3aW5kMicgJworCisJdGVzdF90aWNrICYmIGdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1leHBpcmU9bmV2ZXInICcKKworCWdpdCByZWZsb2cgZXhwaXJlIC0tdmVyYm9zZSBcCisJCS0tZXhwaXJlPW5ldmVyIFwKKwkJLS1leHBpcmUtdW5yZWFjaGFibGU9bmV2ZXIgXAorCQktLWFsbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgLmdpdC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djLnJlZmxvZ2V4cGlyZT1uZXZlcicgJworCisJZ2l0IGNvbmZpZyBnYy5yZWZsb2dleHBpcmUgbmV2ZXIgJiYKKwlnaXQgY29uZmlnIGdjLnJlZmxvZ2V4cGlyZXVucmVhY2hhYmxlIG5ldmVyICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS12ZXJib3NlIC0tYWxsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MucmVmbG9nZXhwaXJlPWZhbHNlJyAnCisKKwlnaXQgY29uZmlnIGdjLnJlZmxvZ2V4cGlyZSBmYWxzZSAmJgorCWdpdCBjb25maWcgZ2MucmVmbG9nZXhwaXJldW5yZWFjaGFibGUgZmFsc2UgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLXZlcmJvc2UgLS1hbGwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IC5naXQvbG9ncy9yZWZzL2hlYWRzL21hc3RlciAmJgorCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGdjLnJlZmxvZ2V4cGlyZSAmJgorCWdpdCBjb25maWcgLS11bnNldCBnYy5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQxMS1yZWZsb2ctc2hvdy5zaCBiL3QvdDE0MTEtcmVmbG9nLXNob3cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWExMDVmZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MTEtcmVmbG9nLXNob3cuc2gKQEAgLTAsMCArMSwxNDcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlZmxvZyBkaXNwbGF5IHJvdXRpbmVzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworUmVmbG9nOiBIRUFEQHswfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1nIHNob3dzIHJlZmxvZyBoZWFkZXJzJyAnCisJZ2l0IGxvZyAtZyAtMSA+dG1wICYmCisJZ3JlcCBeUmVmbG9nIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworZTQ2NTEzZSBIRUFEQHswfTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZWxpbmUgcmVmbG9nIGZvcm1hdCcgJworCWdpdCBsb2cgLWcgLTEgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBkZWZhdWx0IGZvcm1hdCcgJworCWdpdCByZWZsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworY29tbWl0IGU0NjUxM2UKK1JlZmxvZzogSEVBREB7MH0gKEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4pCitSZWZsb2cgbWVzc2FnZTogY29tbWl0IChpbml0aWFsKTogb25lCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisKKyAgICBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGUgcmVmbG9nIGRlZmF1bHQgZm9ybWF0JyAnCisJZ2l0IHJlZmxvZyAtLWZvcm1hdD1zaG9ydCAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitSZWZsb2c6IEhFQURAe1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgQHtub3d9IHN5bnRheCBzaG93cyByZWZsb2cgZGF0ZSAobXVsdGlsaW5lKScgJworCWdpdCBsb2cgLWcgLTEgSEVBREB7bm93fSA+dG1wICYmCisJZ3JlcCBeUmVmbG9nIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworZTQ2NTEzZSBIRUFEQHtUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMH06IGNvbW1pdCAoaW5pdGlhbCk6IG9uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBAe25vd30gc3ludGF4IHNob3dzIHJlZmxvZyBkYXRlIChvbmVsaW5lKScgJworCWdpdCBsb2cgLWcgLTEgLS1vbmVsaW5lIEhFQURAe25vd30gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworSEVBREB7VGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDB9CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIEB7bm93fSBzeW50YXggc2hvd3MgcmVmbG9nIGRhdGUgKGZvcm1hdD0lZ2QpJyAnCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgSEVBREB7bm93fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitSZWZsb2c6IEhFQURAe1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgLS1kYXRlPSBzaG93cyByZWZsb2cgZGF0ZSAobXVsdGlsaW5lKScgJworCWdpdCBsb2cgLWcgLTEgLS1kYXRlPWRlZmF1bHQgPnRtcCAmJgorCWdyZXAgXlJlZmxvZyA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK2U0NjUxM2UgSEVBREB7VGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDB9OiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgLS1kYXRlPSBzaG93cyByZWZsb2cgZGF0ZSAob25lbGluZSknICcKKwlnaXQgbG9nIC1nIC0xIC0tb25lbGluZSAtLWRhdGU9ZGVmYXVsdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitIRUFEQHsxMTEyOTExOTkzIC0wNzAwfQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAtLWRhdGU9IHNob3dzIHJlZmxvZyBkYXRlIChmb3JtYXQ9JWdkKScgJworCWdpdCBsb2cgLWcgLTEgLS1mb3JtYXQ9JWdkIC0tZGF0ZT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworUmVmbG9nOiBIRUFEQHswfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nLmRhdGUgZG9lcyBub3QgaW52b2tlICItLWRhdGUiIG1hZ2ljIChtdWx0aWxpbmUpJyAnCisJdGVzdF9jb25maWcgbG9nLmRhdGUgcmF3ICYmCisJZ2l0IGxvZyAtZyAtMSA+dG1wICYmCisJZ3JlcCBeUmVmbG9nIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworZTQ2NTEzZSBIRUFEQHswfTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5kYXRlIGRvZXMgbm90IGludm9rZSAiLS1kYXRlIiBtYWdpYyAob25lbGluZSknICcKKwl0ZXN0X2NvbmZpZyBsb2cuZGF0ZSByYXcgJiYKKwlnaXQgbG9nIC1nIC0xIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitIRUFEQHswfQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cuZGF0ZSBkb2VzIG5vdCBpbnZva2UgIi0tZGF0ZSIgbWFnaWMgKGZvcm1hdD0lZ2QpJyAnCisJdGVzdF9jb25maWcgbG9nLmRhdGUgcmF3ICYmCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworSEVBREB7MH0KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kYXRlIG1hZ2ljIGRvZXMgbm90IG92ZXJyaWRlIGV4cGxpY2l0IEB7MH0gc3ludGF4JyAnCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgLS1kYXRlPXJhdyBIRUFEQHswfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCis6ID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHJlZmxvZyBmaWxlJyAnCisJZ2l0IGJyYW5jaCBlbXB0eSAmJgorCTogPi5naXQvbG9ncy9yZWZzL2hlYWRzL2VtcHR5ICYmCisKKwlnaXQgbG9nIC1nIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQxMi1yZWZsb2ctbG9vcC5zaCBiL3QvdDE0MTItcmVmbG9nLWxvb3Auc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2FjZDg5NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MTItcmVmbG9nLWxvb3Auc2gKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlZmxvZyB3YWxrIHNob3dzIHJlcGVhdGVkIGNvbW1pdHMgYWdhaW4nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tbWl0cycgJworCXRlc3RfdGljayAmJgorCWVjaG8gY29udGVudCA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwlnaXQgdGFnIG9uZSAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gdHdvICYmCisJZ2l0IHRhZyB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVmbG9nIHdpdGggYWx0ZXJuYXRpbmcgY29tbWl0cycgJworCWdpdCBjaGVja291dCAtYiB0b3BpYyAmJgorCWdpdCByZXNldCBvbmUgJiYKKwlnaXQgcmVzZXQgdHdvICYmCisJZ2l0IHJlc2V0IG9uZSAmJgorCWdpdCByZXNldCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIHNob3dzIGFsbCBlbnRyaWVzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQl0b3BpY0B7MH0gcmVzZXQ6IG1vdmluZyB0byB0d28KKwkJdG9waWNAezF9IHJlc2V0OiBtb3ZpbmcgdG8gb25lCisJCXRvcGljQHsyfSByZXNldDogbW92aW5nIHRvIHR3bworCQl0b3BpY0B7M30gcmVzZXQ6IG1vdmluZyB0byBvbmUKKwkJdG9waWNAezR9IGJyYW5jaDogQ3JlYXRlZCBmcm9tIEhFQUQKKwlFT0YKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiB0b3BpYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MjAtbG9zdC1mb3VuZC5zaCBiL3QvdDE0MjAtbG9zdC1mb3VuZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYzllNDAyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTQyMC1sb3N0LWZvdW5kLnNoCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGZzY2sgLS1sb3N0LWZvdW5kJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIDAgJiYKKwk6ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyAxID4gZmlsZTEgJiYKKwllY2hvIDIgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCWVjaG8gMyA+IGZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb3N0IGFuZCBmb3VuZCBzb21ldGhpbmcnICcKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPiBsb3N0LWNvbW1pdCAmJgorCWdpdCByZXYtcGFyc2UgOmZpbGUzID4gbG9zdC1vdGhlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgZnNjayAtLWxvc3QtZm91bmQgJiYKKwl0ZXN0IDIgPSAkKGxzIC5naXQvbG9zdC1mb3VuZC8qLyogfCB3YyAtbCkgJiYKKwl0ZXN0IC1mIC5naXQvbG9zdC1mb3VuZC9jb21taXQvJChjYXQgbG9zdC1jb21taXQpICYmCisJdGVzdCAtZiAuZ2l0L2xvc3QtZm91bmQvb3RoZXIvJChjYXQgbG9zdC1vdGhlcikKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDUwLWZzY2suc2ggYi90L3QxNDUwLWZzY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDhhYTI0YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0NTAtZnNjay5zaApAQCAtMCwwICsxLDI0MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBmc2NrIHJhbmRvbSBjb2xsZWN0aW9uIG9mIHRlc3RzCisKKyogKEhFQUQpIEIKKyogKG1hc3RlcikgQQorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBnYy5hdXRvIDAgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCXRlc3RfY29tbWl0IEEgZmlsZUEgb25lICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJdGVzdF9jb21taXQgQiBmaWxlQiB0d28gJiYKKwlnaXQgdGFnIC1kIEEgQiAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAtLWFsbCAmJgorCT5lbXB0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29zZSBvYmplY3RzIGJvcnJvd2VkIGZyb20gYWx0ZXJuYXRlIGFyZSBub3QgbWlzc2luZycgJworCW1rZGlyIGFub3RoZXIgJiYKKwkoCisJCWNkIGFub3RoZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAuLi8uLi8uLi8uZ2l0L29iamVjdHMgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkJdGVzdF9jb21taXQgQyBmaWxlQyBvbmUgJiYKKwkJZ2l0IGZzY2sgLS1uby1kYW5nbGluZyA+Li4vYWN0dWFsIDI+JjEKKwkpICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hFQUQgaXMgcGFydCBvZiByZWZzLCB2YWxpZCBvYmplY3RzIGFwcGVhciB2YWxpZCcgJworCWdpdCBmc2NrID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCisjIENvcnJ1cHRpb24gdGVzdHMgZm9sbG93LiAgTWFrZSBzdXJlIHRvIHJlbW92ZSBhbGwgdHJhY2VzIG9mIHRoZQorIyBzcGVjaWZpYyBjb3JydXB0aW9uIHlvdSB0ZXN0IGFmdGVyd2FyZHMsIGxlc3QgYSBsYXRlciB0ZXN0IHRyaXAgb3ZlcgorIyBpdC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGhlbHBlcnMgZm9yIGNvcnJ1cHRpb24gdGVzdHMnICcKKwlzaGExX2ZpbGUoKSB7CisJCWVjaG8gIiQqIiB8IHNlZCAicyMuLiMuZ2l0L29iamVjdHMvJi8jIgorCX0gJiYKKworCXJlbW92ZV9vYmplY3QoKSB7CisJCWZpbGU9JChzaGExX2ZpbGUgIiQqIikgJiYKKwkJdGVzdCAtZSAiJGZpbGUiICYmCisJCXJtIC1mICIkZmlsZSIKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29iamVjdCB3aXRoIGJhZCBzaGExJyAnCisJc2hhPSQoZWNobyBibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJb2xkPSQoZWNobyAkc2hhIHwgc2VkICJzK14uLismLysiKSAmJgorCW5ldz0kKGRpcm5hbWUgJG9sZCkvZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgJiYKKwlzaGE9IiQoZGlybmFtZSAkbmV3KSQoYmFzZW5hbWUgJG5ldykiICYmCisJbXYgLmdpdC9vYmplY3RzLyRvbGQgLmdpdC9vYmplY3RzLyRuZXcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkc2hhIGZvbyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IEhFQUQiICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdHJlZSIgJiYKKwljbXQ9JChlY2hvIGJvZ3VzIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkY210IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgJGNtdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCWNhdCBvdXQgJiYKKwlncmVwICIkc2hhLipjb3JydXB0IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHBvaW50aW5nIHRvIG5vbi1jb21taXQnICcKKwlnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9ID4uZ2l0L3JlZnMvaGVhZHMvaW52YWxpZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9pbnZhbGlkIiAmJgorCWdpdCBmc2NrIDI+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgIm5vdCBhIGNvbW1pdCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtYWlsIHdpdGhvdXQgQCBpcyBva2F5JyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy9AL0FULyIgYmFzaXMgPm9rYXkgJiYKKwluZXc9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gPG9rYXkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRuZXciICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAiJG5ldyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisJZ2l0IGZzY2sgMj5vdXQgJiYKKwljYXQgb3V0ICYmCisJISBncmVwICJjb21taXQgJG5ldyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtYWlsIHdpdGggZW1iZWRkZWQgPiBpcyBub3Qgb2theScgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YmFzaXMgJiYKKwlzZWQgInMvQFthLXpdLyY+LyIgYmFzaXMgPmJhZC1lbWFpbCAmJgorCW5ldz0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8YmFkLWVtYWlsKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkbmV3IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgIiRuZXciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JvZ3VzIiAmJgorCWdpdCBmc2NrIDI+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgImVycm9yIGluIGNvbW1pdCAkbmV3IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyA8IGVtYWlsIGRlbGltaXRlciBpcyByZXBvcnRlZCBuaWNlbHknICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmJhc2lzICYmCisJc2VkICJzLzwvLyIgYmFzaXMgPmJhZC1lbWFpbC0yICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxiYWQtZW1haWwtMikgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwlnaXQgZnNjayAyPm91dCAmJgorCWNhdCBvdXQgJiYKKwlncmVwICJlcnJvciBpbiBjb21taXQgJG5ldy4qIC0gYmFkIG5hbWUiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIGVtYWlsIGlzIHJlcG9ydGVkIG5pY2VseScgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YmFzaXMgJiYKKwlzZWQgInMvW2Etel0qIDxbXj5dKj4vLyIgYmFzaXMgPmJhZC1lbWFpbC0zICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxiYWQtZW1haWwtMykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwlnaXQgZnNjayAyPm91dCAmJgorCWNhdCBvdXQgJiYKKwlncmVwICJlcnJvciBpbiBjb21taXQgJG5ldy4qIC0gbWlzc2luZyBlbWFpbCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJz4gaW4gbmFtZSBpcyByZXBvcnRlZCcgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YmFzaXMgJiYKKwlzZWQgInMvIDwvPiA8LyIgYmFzaXMgPmJhZC1lbWFpbC00ICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxiYWQtZW1haWwtNCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwlnaXQgZnNjayAyPm91dCAmJgorCWNhdCBvdXQgJiYKKwlncmVwICJlcnJvciBpbiBjb21taXQgJG5ldyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyBwb2ludGluZyB0byBub25leGlzdGVudCcgJworCWNhdCA+aW52YWxpZC10YWcgPDwtXEVPRiAmJgorCW9iamVjdCBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCisJdHlwZSBjb21taXQKKwl0YWcgaW52YWxpZAorCXRhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjM0NTY3ODkwIC0wMDAwCisKKwlUaGlzIGlzIGFuIGludmFsaWQgdGFnLgorCUVPRgorCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRhZyAtdyAtLXN0ZGluIDxpbnZhbGlkLXRhZykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHRhZyIgJiYKKwllY2hvICR0YWcgPi5naXQvcmVmcy90YWdzL2ludmFsaWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvdGFncy9pbnZhbGlkIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tdGFncyA+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgImJyb2tlbiBsaW5rIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHBvaW50aW5nIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gaXRzIHR5cGUnICcKKwlzaGE9JChlY2hvIGJsb2IgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKKwljYXQgPndyb25nLXRhZyA8PC1FT0YgJiYKKwlvYmplY3QgJHNoYQorCXR5cGUgY29tbWl0CisJdGFnIHdyb25nCisJdGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDEyMzQ1Njc4OTAgLTAwMDAKKworCVRoaXMgaXMgYW4gaW52YWxpZCB0YWcuCisJRU9GCisKKwl0YWc9JChnaXQgaGFzaC1vYmplY3QgLXQgdGFnIC13IC0tc3RkaW4gPHdyb25nLXRhZykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHRhZyIgJiYKKwllY2hvICR0YWcgPi5naXQvcmVmcy90YWdzL3dyb25nICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL3RhZ3Mvd3JvbmciICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS10YWdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuZWQgdXAnICcKKwlnaXQgZnNjayA+YWN0dWFsIDI+JjEgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS12ZXJpZnktb2JqZWN0cycgJworCWdpdCByZXYtbGlzdCAtLXZlcmlmeS1vYmplY3RzIC0tYWxsID4vZGV2L251bGwgMj5vdXQgJiYKKwl0ZXN0X2NtcCBlbXB0eSBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS12ZXJpZnktb2JqZWN0cyB3aXRoIGJhZCBzaGExJyAnCisJc2hhPSQoZWNobyBibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJb2xkPSQoZWNobyAkc2hhIHwgc2VkICJzK14uLismLysiKSAmJgorCW5ldz0kKGRpcm5hbWUgJG9sZCkvZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgJiYKKwlzaGE9IiQoZGlybmFtZSAkbmV3KSQoYmFzZW5hbWUgJG5ldykiICYmCisJbXYgLmdpdC9vYmplY3RzLyRvbGQgLmdpdC9vYmplY3RzLyRuZXcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkc2hhIGZvbyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IEhFQUQiICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdHJlZSIgJiYKKwljbXQ9JChlY2hvIGJvZ3VzIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkY210IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgJGNtdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgcmV2LWxpc3QgLS12ZXJpZnktb2JqZWN0cyByZWZzL2hlYWRzL2JvZ3VzID4vZGV2L251bGwgMj5vdXQgJiYKKwljYXQgb3V0ICYmCisJZ3JlcCAtcSAiZXJyb3I6IHNoYTEgbWlzbWF0Y2ggNjNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIgb3V0CisnCisKK19iej0nXDAnCitfYno1PSIkX2J6JF9ieiRfYnokX2J6JF9ieiIKK19iejIwPSIkX2J6NSRfYno1JF9iejUkX2J6NSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIGJsb2IgZW50cnkgcG9pbnRpbmcgdG8gbnVsbCBzaGExJyAnCisJKGdpdCBpbml0IG51bGwtYmxvYiAmJgorCSBjZCBudWxsLWJsb2IgJiYKKwkgc2hhPSQocHJpbnRmICIxMDA2NDQgZmlsZSRfYnokX2J6MjAiIHwKKwkgICAgICAgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gLXQgdHJlZSkgJiYKKwkgIGdpdCBmc2NrIDI+b3V0ICYmCisJICBjYXQgb3V0ICYmCisJICBncmVwICJ3YXJuaW5nLipudWxsIHNoYTEiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIHN1Ym1vZHVsZSBlbnRyeSBwb2ludGluZyB0byBudWxsIHNoYTEnICcKKwkoZ2l0IGluaXQgbnVsbC1jb21taXQgJiYKKwkgY2QgbnVsbC1jb21taXQgJiYKKwkgc2hhPSQocHJpbnRmICIxNjAwMDAgc3VibW9kdWxlJF9ieiRfYnoyMCIgfAorCSAgICAgICBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiAtdCB0cmVlKSAmJgorCSAgZ2l0IGZzY2sgMj5vdXQgJiYKKwkgIGNhdCBvdXQgJiYKKwkgIGdyZXAgIndhcm5pbmcuKm51bGwgc2hhMSIgb3V0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDAtcmV2LXBhcnNlLnNoIGIvdC90MTUwMC1yZXYtcGFyc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDhlZTA3NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDAtcmV2LXBhcnNlLnNoCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCByZXYtcGFyc2UnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9yZXZfcGFyc2UoKSB7CisJbmFtZT0kMQorCXNoaWZ0CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZTogaXMtYmFyZS1yZXBvc2l0b3J5IiBcCisJInRlc3QgJyQxJyA9IFwiXCQoZ2l0IHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSlcIiIKKwlzaGlmdAorCVsgJCMgLWVxIDAgXSAmJiByZXR1cm4KKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lOiBpcy1pbnNpZGUtZ2l0LWRpciIgXAorCSJ0ZXN0ICckMScgPSBcIlwkKGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtZ2l0LWRpcilcIiIKKwlzaGlmdAorCVsgJCMgLWVxIDAgXSAmJiByZXR1cm4KKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lOiBpcy1pbnNpZGUtd29yay10cmVlIiBcCisJInRlc3QgJyQxJyA9IFwiXCQoZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUpXCIiCisJc2hpZnQKKwlbICQjIC1lcSAwIF0gJiYgcmV0dXJuCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZTogcHJlZml4IiBcCisJInRlc3QgJyQxJyA9IFwiXCQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KVwiIgorCXNoaWZ0CisJWyAkIyAtZXEgMCBdICYmIHJldHVybgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWU6IGdpdC1kaXIiIFwKKwkidGVzdCAnJDEnID0gXCJcJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcilcIiIKKwlzaGlmdAorCVsgJCMgLWVxIDAgXSAmJiByZXR1cm4KK30KKworIyBsYWJlbCBpcy1iYXJlIGlzLWluc2lkZS1naXQgaXMtaW5zaWRlLXdvcmsgcHJlZml4IGdpdC1kaXIKKworUk9PVD0kKHB3ZCkKKwordGVzdF9yZXZfcGFyc2UgdG9wbGV2ZWwgZmFsc2UgZmFsc2UgdHJ1ZSAnJyAuZ2l0CisKK2NkIC5naXQgfHwgZXhpdCAxCit0ZXN0X3Jldl9wYXJzZSAuZ2l0LyBmYWxzZSB0cnVlIGZhbHNlICcnIC4KK2NkIG9iamVjdHMgfHwgZXhpdCAxCit0ZXN0X3Jldl9wYXJzZSAuZ2l0L29iamVjdHMvIGZhbHNlIHRydWUgZmFsc2UgJycgIiRST09ULy5naXQiCitjZCAuLi8uLiB8fCBleGl0IDEKKworbWtkaXIgLXAgc3ViL2RpciB8fCBleGl0IDEKK2NkIHN1Yi9kaXIgfHwgZXhpdCAxCit0ZXN0X3Jldl9wYXJzZSBzdWJkaXJlY3RvcnkgZmFsc2UgZmFsc2UgdHJ1ZSBzdWIvZGlyLyAiJFJPT1QvLmdpdCIKK2NkIC4uLy4uIHx8IGV4aXQgMQorCitnaXQgY29uZmlnIGNvcmUuYmFyZSB0cnVlCit0ZXN0X3Jldl9wYXJzZSAnY29yZS5iYXJlID0gdHJ1ZScgdHJ1ZSBmYWxzZSBmYWxzZQorCitnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5iYXJlCit0ZXN0X3Jldl9wYXJzZSAnY29yZS5iYXJlIHVuZGVmaW5lZCcgZmFsc2UgZmFsc2UgdHJ1ZQorCitta2RpciB3b3JrIHx8IGV4aXQgMQorY2Qgd29yayB8fCBleGl0IDEKK0dJVF9ESVI9Li4vLmdpdAorR0lUX0NPTkZJRz0iJChwd2QpIi8uLi8uZ2l0L2NvbmZpZworZXhwb3J0IEdJVF9ESVIgR0lUX0NPTkZJRworCitnaXQgY29uZmlnIGNvcmUuYmFyZSBmYWxzZQordGVzdF9yZXZfcGFyc2UgJ0dJVF9ESVI9Li4vLmdpdCwgY29yZS5iYXJlID0gZmFsc2UnIGZhbHNlIGZhbHNlIHRydWUgJycKKworZ2l0IGNvbmZpZyBjb3JlLmJhcmUgdHJ1ZQordGVzdF9yZXZfcGFyc2UgJ0dJVF9ESVI9Li4vLmdpdCwgY29yZS5iYXJlID0gdHJ1ZScgdHJ1ZSBmYWxzZSBmYWxzZSAnJworCitnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5iYXJlCit0ZXN0X3Jldl9wYXJzZSAnR0lUX0RJUj0uLi8uZ2l0LCBjb3JlLmJhcmUgdW5kZWZpbmVkJyBmYWxzZSBmYWxzZSB0cnVlICcnCisKK212IC4uLy5naXQgLi4vcmVwby5naXQgfHwgZXhpdCAxCitHSVRfRElSPS4uL3JlcG8uZ2l0CitHSVRfQ09ORklHPSIkKHB3ZCkiLy4uL3JlcG8uZ2l0L2NvbmZpZworCitnaXQgY29uZmlnIGNvcmUuYmFyZSBmYWxzZQordGVzdF9yZXZfcGFyc2UgJ0dJVF9ESVI9Li4vcmVwby5naXQsIGNvcmUuYmFyZSA9IGZhbHNlJyBmYWxzZSBmYWxzZSB0cnVlICcnCisKK2dpdCBjb25maWcgY29yZS5iYXJlIHRydWUKK3Rlc3RfcmV2X3BhcnNlICdHSVRfRElSPS4uL3JlcG8uZ2l0LCBjb3JlLmJhcmUgPSB0cnVlJyB0cnVlIGZhbHNlIGZhbHNlICcnCisKK2dpdCBjb25maWcgLS11bnNldCBjb3JlLmJhcmUKK3Rlc3RfcmV2X3BhcnNlICdHSVRfRElSPS4uL3JlcG8uZ2l0LCBjb3JlLmJhcmUgdW5kZWZpbmVkJyBmYWxzZSBmYWxzZSB0cnVlICcnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwMS13b3JrdHJlZS5zaCBiL3QvdDE1MDEtd29ya3RyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGYzNmFhOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDEtd29ya3RyZWUuc2gKQEAgLTAsMCArMSwzNDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHNlcGFyYXRlIHdvcmsgdHJlZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCUVNUFRZX1RSRUU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlFTVBUWV9CTE9CPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS1zdGRpbiA8L2Rldi9udWxsKSAmJgorCUNIQU5HRURfQkxPQj0kKGVjaG8gY2hhbmdlZCB8IGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tc3RkaW4pICYmCisJRU1QVFlfQkxPQjc9JChlY2hvICRFTVBUWV9CTE9CIHwgc2VkICJzL1woLi4uLi4uLlwpLiovXDEvIikgJiYKKwlDSEFOR0VEX0JMT0I3PSQoZWNobyAkQ0hBTkdFRF9CTE9CIHwgc2VkICJzL1woLi4uLi4uLlwpLiovXDEvIikgJiYKKworCW1rZGlyIC1wIHdvcmsvc3ViL2RpciAmJgorCW1rZGlyIC1wIHdvcmsyICYmCisJbXYgLmdpdCByZXBvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogaGVscGVyIGZvciB0ZXN0aW5nIHJldi1wYXJzZScgJworCXRlc3RfcmV2X3BhcnNlKCkgeworCQllY2hvICQxID5leHBlY3RlZC5iYXJlICYmCisJCWVjaG8gJDIgPmV4cGVjdGVkLmluc2lkZS1naXQgJiYKKwkJZWNobyAkMyA+ZXhwZWN0ZWQuaW5zaWRlLXdvcmt0cmVlICYmCisJCWlmIHRlc3QgJCMgLWdlIDQKKwkJdGhlbgorCQkJZWNobyAkNCA+ZXhwZWN0ZWQucHJlZml4CisJCWZpICYmCisKKwkJZ2l0IHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSA+YWN0dWFsLmJhcmUgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS1naXQtZGlyID5hY3R1YWwuaW5zaWRlLWdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLXdvcmstdHJlZSA+YWN0dWFsLmluc2lkZS13b3JrdHJlZSAmJgorCQlpZiB0ZXN0ICQjIC1nZSA0CisJCXRoZW4KKwkJCWdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeCA+YWN0dWFsLnByZWZpeAorCQlmaSAmJgorCisJCXRlc3RfY21wIGV4cGVjdGVkLmJhcmUgYWN0dWFsLmJhcmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQuaW5zaWRlLWdpdCBhY3R1YWwuaW5zaWRlLWdpdCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC5pbnNpZGUtd29ya3RyZWUgYWN0dWFsLmluc2lkZS13b3JrdHJlZSAmJgorCQlpZiB0ZXN0ICQjIC1nZSA0CisJCXRoZW4KKwkJCSMgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXggc2hvdWxkIG91dHB1dAorCQkJIyBhIHNpbmdsZSBuZXdsaW5lIHdoZW4gYXQgdGhlIHRvcCBvZiB0aGUgd29yayB0cmVlLAorCQkJIyBidXQgd2UgdGVzdCBmb3IgdGhhdCBzZXBhcmF0ZWx5LgorCQkJdGVzdCAteiAiJDQiICYmICEgdGVzdCAtcyBhY3R1YWwucHJlZml4IHx8CisJCQl0ZXN0X2NtcCBleHBlY3RlZC5wcmVmaXggYWN0dWFsLnByZWZpeAorCQlmaQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNvcmUud29ya3RyZWUgPSByZWxhdGl2ZSBwYXRoJyAnCisJc2FuZV91bnNldCBHSVRfV09SS19UUkVFICYmCisJR0lUX0RJUj1yZXBvLmdpdCAmJgorCUdJVF9DT05GSUc9IiQocHdkKSIvJEdJVF9ESVIvY29uZmlnICYmCisJZXhwb3J0IEdJVF9ESVIgR0lUX0NPTkZJRyAmJgorCWdpdCBjb25maWcgY29yZS53b3JrdHJlZSAuLi93b3JrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHNpZGUnICcKKwl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnNpZGUgd29yayB0cmVlJyAnCisJKAorCQljZCB3b3JrICYmCisJCUdJVF9ESVI9Li4vcmVwby5naXQgJiYKKwkJR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgdHJ1ZSAiIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgcHJlZml4IGlzIGFjdHVhbGx5IHdyaXR0ZW4gb3V0JyAnCisJZWNobyA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJR0lUX0RJUj0uLi9yZXBvLmdpdCAmJgorCQlHSVRfQ09ORklHPSIkKHB3ZCkiLyRHSVRfRElSL2NvbmZpZyAmJgorCQlnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXggPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIG9mIHdvcmsgdHJlZScgJworCSgKKwkJY2Qgd29yay9zdWIvZGlyICYmCisJCUdJVF9ESVI9Li4vLi4vLi4vcmVwby5naXQgJiYKKwkJR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgdHJ1ZSBzdWIvZGlyLworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNvcmUud29ya3RyZWUgPSBhYnNvbHV0ZSBwYXRoJyAnCisJc2FuZV91bnNldCBHSVRfV09SS19UUkVFICYmCisJR0lUX0RJUj0kKHB3ZCkvcmVwby5naXQgJiYKKwlHSVRfQ09ORklHPSRHSVRfRElSL2NvbmZpZyAmJgorCWV4cG9ydCBHSVRfRElSIEdJVF9DT05GSUcgJiYKKwlnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgIiQocHdkKS93b3JrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRzaWRlJyAnCisJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgZmFsc2UgJiYKKwkoCisJCWNkIHdvcmsyICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIGZhbHNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnNpZGUgd29yayB0cmVlJyAnCisJKAorCQljZCB3b3JrICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIHRydWUgIiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBvZiB3b3JrIHRyZWUnICcKKwkoCisJCWNkIHdvcmsvc3ViL2RpciAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSB0cnVlIHN1Yi9kaXIvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogR0lUX1dPUktfVFJFRT1yZWxhdGl2ZSAob3ZlcnJpZGUgY29yZS53b3JrdHJlZSknICcKKwlHSVRfRElSPSQocHdkKS9yZXBvLmdpdCAmJgorCUdJVF9DT05GSUc9JEdJVF9ESVIvY29uZmlnICYmCisJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlIG5vbi1leGlzdGVudCAmJgorCUdJVF9XT1JLX1RSRUU9d29yayAmJgorCWV4cG9ydCBHSVRfRElSIEdJVF9DT05GSUcgR0lUX1dPUktfVFJFRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRzaWRlJyAnCisJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgZmFsc2UgJiYKKwkoCisJCWNkIHdvcmsyICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIGZhbHNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnNpZGUgd29yayB0cmVlJyAnCisJKAorCQljZCB3b3JrICYmCisJCUdJVF9XT1JLX1RSRUU9LiAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSB0cnVlICIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgb2Ygd29yayB0cmVlJyAnCisJKAorCQljZCB3b3JrL3N1Yi9kaXIgJiYKKwkJR0lUX1dPUktfVFJFRT0uLi8uLiAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSB0cnVlIHN1Yi9kaXIvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogR0lUX1dPUktfVFJFRT1hYnNvbHV0ZSwgYmVsb3cgZ2l0IGRpcicgJworCW12IHdvcmsgcmVwby5naXQvd29yayAmJgorCW12IHdvcmsyIHJlcG8uZ2l0L3dvcmsyICYmCisJR0lUX0RJUj0kKHB3ZCkvcmVwby5naXQgJiYKKwlHSVRfQ09ORklHPSRHSVRfRElSL2NvbmZpZyAmJgorCUdJVF9XT1JLX1RSRUU9JChwd2QpL3JlcG8uZ2l0L3dvcmsgJiYKKwlleHBvcnQgR0lUX0RJUiBHSVRfQ09ORklHIEdJVF9XT1JLX1RSRUUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0c2lkZScgJworCWVjaG8gb3V0c2lkZSAmJgorCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luIHJlcG8uZ2l0JyAnCisJKAorCQljZCByZXBvLmdpdCAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSB0cnVlIGZhbHNlCisJKSAmJgorCSgKKwkJY2QgcmVwby5naXQvb2JqZWN0cyAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSB0cnVlIGZhbHNlCisJKSAmJgorCSgKKwkJY2QgcmVwby5naXQvd29yazIgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgdHJ1ZSBmYWxzZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zaWRlIHdvcmsgdHJlZScgJworCSgKKwkJY2QgcmVwby5naXQvd29yayAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSB0cnVlIHRydWUgIiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBvZiB3b3JrIHRyZWUnICcKKwkoCisJCWNkIHJlcG8uZ2l0L3dvcmsvc3ViL2RpciAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSB0cnVlIHRydWUgc3ViL2Rpci8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgd29yayB0cmVlIGZyb20gcmVwbycgJworCWVjaG8gc3ViL2Rpci91bnRyYWNrZWQgPmV4cGVjdGVkICYmCisJY2F0IDw8LVxFT0YgPnJlcG8uZ2l0L3dvcmsvLmdpdGlnbm9yZSAmJgorCWV4cGVjdGVkLioKKwlhY3R1YWwuKgorCS5naXRpZ25vcmUKKwlFT0YKKwk+cmVwby5naXQvd29yay9zdWIvZGlyL3VudHJhY2tlZCAmJgorCSgKKwkJY2QgcmVwby5naXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHdvcmsgdHJlZSBmcm9tIHdvcmsgdHJlZScgJworCWVjaG8gc3ViL2Rpci90cmFja2VkID5leHBlY3RlZCAmJgorCT5yZXBvLmdpdC93b3JrL3N1Yi9kaXIvdHJhY2tlZCAmJgorCSgKKwkJY2QgcmVwby5naXQvd29yay9zdWIvZGlyICYmCisJCWdpdCAtLWdpdC1kaXI9Li4vLi4vLi4gYWRkIHRyYWNrZWQKKwkpICYmCisJKAorCQljZCByZXBvLmdpdCAmJgorCQlnaXQgbHMtZmlsZXMgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX2dlbnRseSgpIGdyb2tzIHJlbGF0aXZlIEdJVF9ESVIgJiBHSVRfV09SS19UUkVFJyAnCisJKAorCQljZCByZXBvLmdpdC93b3JrL3N1Yi9kaXIgJiYKKwkJR0lUX0RJUj0uLi8uLi8uLiAmJgorCQlHSVRfV09SS19UUkVFPS4uLy4uICYmCisJCUdJVF9QQUdFUj0gJiYKKwkJZXhwb3J0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSBHSVRfUEFHRVIgJiYKKworCQlnaXQgZGlmZiAtLWV4aXQtY29kZSB0cmFja2VkICYmCisJCWVjaG8gY2hhbmdlZCA+dHJhY2tlZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWV4aXQtY29kZSB0cmFja2VkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IHJlc3BlY3RzIHdvcmsgdHJlZSB1bmRlciAuZ2l0IGRpcicgJworCWNhdCA+ZGlmZi1pbmRleC1jYWNoZWQuZXhwZWN0ZWQgPDwtRU9GICYmCisJOjAwMDAwMCAxMDA2NDQgJF96NDAgJEVNUFRZX0JMT0IgQQlzdWIvZGlyL3RyYWNrZWQKKwlFT0YKKwljYXQgPmRpZmYtaW5kZXguZXhwZWN0ZWQgPDwtRU9GICYmCisJOjAwMDAwMCAxMDA2NDQgJF96NDAgJF96NDAgQQlzdWIvZGlyL3RyYWNrZWQKKwlFT0YKKworCSgKKwkJR0lUX0RJUj1yZXBvLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPXJlcG8uZ2l0L3dvcmsgJiYKKwkJZXhwb3J0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSAmJgorCQlnaXQgZGlmZi1pbmRleCAkRU1QVFlfVFJFRSA+ZGlmZi1pbmRleC5hY3R1YWwgJiYKKwkJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJEVNUFRZX1RSRUUgPmRpZmYtaW5kZXgtY2FjaGVkLmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBkaWZmLWluZGV4LmV4cGVjdGVkIGRpZmYtaW5kZXguYWN0dWFsICYmCisJdGVzdF9jbXAgZGlmZi1pbmRleC1jYWNoZWQuZXhwZWN0ZWQgZGlmZi1pbmRleC1jYWNoZWQuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgcmVzcGVjdHMgd29yayB0cmVlIHVuZGVyIC5naXQgZGlyJyAnCisJY2F0ID5kaWZmLWZpbGVzLmV4cGVjdGVkIDw8LUVPRiAmJgorCToxMDA2NDQgMTAwNjQ0ICRFTVBUWV9CTE9CICRfejQwIE0Jc3ViL2Rpci90cmFja2VkCisJRU9GCisKKwkoCisJCUdJVF9ESVI9cmVwby5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT1yZXBvLmdpdC93b3JrICYmCisJCWV4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwkJZ2l0IGRpZmYtZmlsZXMgPmRpZmYtZmlsZXMuYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGRpZmYtZmlsZXMuZXhwZWN0ZWQgZGlmZi1maWxlcy5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgcmVzcGVjdHMgd29yayB0cmVlIHVuZGVyIC5naXQgZGlyJyAnCisJY2F0ID5kaWZmLVRSRUUuZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3N1Yi9kaXIvdHJhY2tlZCBiL3N1Yi9kaXIvdHJhY2tlZAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uJENIQU5HRURfQkxPQjcKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc3ViL2Rpci90cmFja2VkCisJQEAgLTAsMCArMSBAQAorCStjaGFuZ2VkCisJRU9GCisJY2F0ID5kaWZmLVRSRUUtY2FjaGVkLmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zdWIvZGlyL3RyYWNrZWQgYi9zdWIvZGlyL3RyYWNrZWQKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLiRFTVBUWV9CTE9CNworCUVPRgorCWNhdCA+ZGlmZi1GSUxFUy5leHBlY3RlZCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc3ViL2Rpci90cmFja2VkIGIvc3ViL2Rpci90cmFja2VkCisJaW5kZXggJEVNUFRZX0JMT0I3Li4kQ0hBTkdFRF9CTE9CNyAxMDA2NDQKKwktLS0gYS9zdWIvZGlyL3RyYWNrZWQKKwkrKysgYi9zdWIvZGlyL3RyYWNrZWQKKwlAQCAtMCwwICsxIEBACisJK2NoYW5nZWQKKwlFT0YKKworCSgKKwkJR0lUX0RJUj1yZXBvLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPXJlcG8uZ2l0L3dvcmsgJiYKKwkJZXhwb3J0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSAmJgorCQlnaXQgZGlmZiAkRU1QVFlfVFJFRSA+ZGlmZi1UUkVFLmFjdHVhbCAmJgorCQlnaXQgZGlmZiAtLWNhY2hlZCAkRU1QVFlfVFJFRSA+ZGlmZi1UUkVFLWNhY2hlZC5hY3R1YWwgJiYKKwkJZ2l0IGRpZmYgPmRpZmYtRklMRVMuYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGRpZmYtVFJFRS5leHBlY3RlZCBkaWZmLVRSRUUuYWN0dWFsICYmCisJdGVzdF9jbXAgZGlmZi1UUkVFLWNhY2hlZC5leHBlY3RlZCBkaWZmLVRSRUUtY2FjaGVkLmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmYtRklMRVMuZXhwZWN0ZWQgZGlmZi1GSUxFUy5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAnICcKKwllY2hvIGRpci90cmFja2VkID5leHBlY3RlZC5ncmVwICYmCisJKAorCQljZCByZXBvLmdpdC93b3JrL3N1YiAmJgorCQlHSVRfRElSPS4uLy4uICYmCisJCUdJVF9XT1JLX1RSRUU9Li4gJiYKKwkJZXhwb3J0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSAmJgorCQlnaXQgZ3JlcCAtbCBjaGFuZ2VkID4uLi8uLi8uLi9hY3R1YWwuZ3JlcAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5ncmVwIGFjdHVhbC5ncmVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQnICcKKwkoCisJCWNkIHJlcG8uZ2l0ICYmCisJCUdJVF9ESVI9LiBHSVRfV09SS19UUkVFPXdvcmsgZ2l0IGNvbW1pdCAtYSAtbSBkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvbHV0ZSBwYXRoc3BlYyBzaG91bGQgZmFpbCBncmFjZWZ1bGx5JyAnCisJKAorCQljZCByZXBvLmdpdCAmJgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud29ya3RyZWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyBIRUFEIC0tIC9ob21lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlX3JlbGF0aXZlX3BhdGggaGFuZGxlcyBkb3VibGUgc2xhc2hlcyBpbiBHSVRfRElSJyAnCisJPmR1bW15X2ZpbGUgJiYKKwllY2hvIGdpdCAtLWdpdC1kaXI9IiQocHdkKS8vcmVwby5naXQiIC0td29yay10cmVlPSIkKHB3ZCkiIGFkZCBkdW1teV9maWxlICYmCisJZ2l0IC0tZ2l0LWRpcj0iJChwd2QpLy9yZXBvLmdpdCIgLS13b3JrLXRyZWU9IiQocHdkKSIgYWRkIGR1bW15X2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgJEdJVF9XT1JLX1RSRUUgYW5kIGdpdCBzdWJwcm9jZXNzZXMnICcKKwlHSVRfRElSPXJlcG8uZ2l0IEdJVF9XT1JLX1RSRUU9cmVwby5naXQvd29yayBcCisJdGVzdC1zdWJwcm9jZXNzIC0tc2V0dXAtd29yay10cmVlIHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwgPmFjdHVhbCAmJgorCWVjaG8gIiQocHdkKS9yZXBvLmdpdC93b3JrIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaCBiL3QvdDE1MDItcmV2LXBhcnNlLXBhcnNlb3B0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEzYzg4YzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0JworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+IGV4cGVjdCA8PFxFTkRfRVhQRUNUCitjYXQgPDxcRU9GCit1c2FnZTogc29tZS1jb21tYW5kIFtvcHRpb25zXSA8YXJncz4uLi4KKworICAgIHNvbWUtY29tbWFuZCBkb2VzIGZvbyBhbmQgYmFyIQorCisgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhlIGhlbHAKKyAgICAtLWZvbyAgICAgICAgICAgICAgICAgc29tZSBuaWZ0eSBvcHRpb24gLS1mb28KKyAgICAtLWJhciAuLi4gICAgICAgICAgICAgc29tZSBjb29sIG9wdGlvbiAtLWJhciB3aXRoIGFuIGFyZ3VtZW50CisKK0FuIG9wdGlvbiBncm91cCBIZWFkZXIKKyAgICAtQ1suLi5dICAgICAgICAgICAgICAgb3B0aW9uIEMgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorCitFeHRyYXMKKyAgICAtLWV4dHJhMSAgICAgICAgICAgICAgbGluZSBhYm92ZSB1c2VkIHRvIGNhdXNlIGEgc2VnZmF1bHQgYnV0IG5vIGxvbmdlciBkb2VzCisKK0VPRgorRU5EX0VYUEVDVAorCitjYXQgPiBvcHRpb25zcGVjIDw8IEVPRgorc29tZS1jb21tYW5kIFtvcHRpb25zXSA8YXJncz4uLi4KKworc29tZS1jb21tYW5kIGRvZXMgZm9vIGFuZCBiYXIhCistLQoraCxoZWxwICAgIHNob3cgdGhlIGhlbHAKKworZm9vICAgICAgIHNvbWUgbmlmdHkgb3B0aW9uIC0tZm9vCitiYXI9ICAgICAgc29tZSBjb29sIG9wdGlvbiAtLWJhciB3aXRoIGFuIGFyZ3VtZW50CisKKyBBbiBvcHRpb24gZ3JvdXAgSGVhZGVyCitDPyAgICAgICAgb3B0aW9uIEMgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorCitFeHRyYXMKK2V4dHJhMSAgICBsaW5lIGFib3ZlIHVzZWQgdG8gY2F1c2UgYSBzZWdmYXVsdCBidXQgbm8gbG9uZ2VyIGRvZXMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgaGVscCBvdXRwdXQnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLWggPiBvdXRwdXQgPCBvcHRpb25zcGVjICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS1iYXIgJ2hhbScgLS0gJ2FyZycKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLS1mb28gLS1iYXI9aGFtIGFyZyA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCB3aXRoIG1peGVkIG9wdGlvbnMgYW5kIGFyZ3VtZW50cycgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWZvbyBhcmcgLS1iYXI9aGFtIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS0gJ2FyZycgJy0tYmFyPWhhbScKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgd2l0aCAtLScgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWZvbyAtLSBhcmcgLS1iYXI9aGFtIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uIC0tIC0tZm9vIGFyZyAtLWJhcj1oYW0gPCBvcHRpb25zcGVjID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK3NldCAtLSAtLWZvbyAtLSAnLS0nICdhcmcnICctLWJhcj1oYW0nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0ta2VlcC1kYXNoZGFzaCcgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2ggLS0gLS1mb28gLS0gYXJnIC0tYmFyPWhhbSA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS0gJy0tJyAnYXJnJyAnLS1zcGFtPWhhbScKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgLS1rZWVwLWRhc2hkYXNoIC0tc3RvcC1hdC1ub24tb3B0aW9uIHdpdGggLS0nICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1rZWVwLWRhc2hkYXNoIC0tc3RvcC1hdC1ub24tb3B0aW9uIC0tIC0tZm9vIC0tIGFyZyAtLXNwYW09aGFtIDxvcHRpb25zcGVjID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZm9vIC0tICdhcmcnICctLXNwYW09aGFtJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2ggLS1zdG9wLWF0LW5vbi1vcHRpb24gd2l0aG91dCAtLScgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2ggLS1zdG9wLWF0LW5vbi1vcHRpb24gLS0gLS1mb28gYXJnIC0tc3BhbT1oYW0gPG9wdGlvbnNwZWMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTAzLXJldi1wYXJzZS12ZXJpZnkuc2ggYi90L3QxNTAzLXJldi1wYXJzZS12ZXJpZnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODEzY2MxYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDMtcmV2LXBhcnNlLXZlcmlmeS5zaApAQCAtMCwwICsxLDExOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDaHJpc3RpYW4gQ291ZGVyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnknCisKK2V4ZWMgPC9kZXYvbnVsbAorCisuIC4vdGVzdC1saWIuc2gKKworYWRkX2xpbmVfaW50b19maWxlKCkKK3sKKyAgICBfbGluZT0kMQorICAgIF9maWxlPSQyCisKKyAgICBpZiBbIC1mICIkX2ZpbGUiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJF9saW5lIiA+PiAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQWRkIDwkX2xpbmU+IGludG8gPCRfZmlsZT4uIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJF9saW5lIiA+ICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICAgICAgZ2l0IGFkZCAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQ3JlYXRlIGZpbGUgPCRfZmlsZT4gd2l0aCA8JF9saW5lPiBpbnNpZGUuIgorICAgIGZpCisKKyAgICB0ZXN0X3RpY2sKKyAgICBnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRNU0ciICRfZmlsZQorfQorCitIQVNIMT0KK0hBU0gyPQorSEFTSDM9CitIQVNIND0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG8gd2l0aCAxIGZpbGUgKGhlbGxvKSBhbmQgNCBjb21taXRzJyAnCisJYWRkX2xpbmVfaW50b19maWxlICIxOiBIZWxsbyBXb3JsZCIgaGVsbG8gJiYKKwlIQVNIMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjI6IEEgbmV3IGRheSBmb3IgZ2l0IiBoZWxsbyAmJgorCUhBU0gyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiMzogQW5vdGhlciBuZXcgZGF5IGZvciBnaXQiIGhlbGxvICYmCisJSEFTSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICI0OiBDaWFvIGZvciBub3ciIGhlbGxvICYmCisJSEFTSDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmtzIHdpdGggb25lIGdvb2QgcmV2JyAnCisJcmV2X2hhc2gxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDEpICYmCisJdGVzdCAiJHJldl9oYXNoMSIgPSAiJEhBU0gxIiAmJgorCXJldl9oYXNoMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0gyKSAmJgorCXRlc3QgIiRyZXZfaGFzaDIiID0gIiRIQVNIMiIgJiYKKwlyZXZfaGFzaDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMykgJiYKKwl0ZXN0ICIkcmV2X2hhc2gzIiA9ICIkSEFTSDMiICYmCisJcmV2X2hhc2g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDQpICYmCisJdGVzdCAiJHJldl9oYXNoNCIgPSAiJEhBU0g0IiAmJgorCXJldl9tYXN0ZXI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcmV2X21hc3RlciIgPSAiJEhBU0g0IiAmJgorCXJldl9oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRyZXZfaGVhZCIgPSAiJEhBU0g0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyB3aXRoIGFueSBiYWQgcmV2IG9yIG1hbnkgZ29vZCByZXZzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZm9vIDI+ZXJyb3IgJiYKKwlncmVwICJzaW5nbGUgcmV2aXNpb24iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIGJhciAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYmF6IEhFQUQgMj5lcnJvciAmJgorCWdyZXAgInNpbmdsZSByZXZpc2lvbiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMiBIRUFEIDI+ZXJyb3IgJiYKKwlncmVwICJzaW5nbGUgcmV2aXNpb24iIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHNpbGVudGx5IHdoZW4gdXNpbmcgLXEnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgMj5lcnJvciAmJgorCXRlc3QgLXogIiQoY2F0IGVycm9yKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IGZvbyAyPmVycm9yICYmCisJdGVzdCAteiAiJChjYXQgZXJyb3IpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCBiYXIgMj5lcnJvciAmJgorCXRlc3QgLXogIiQoY2F0IGVycm9yKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgYmF6IEhFQUQgMj5lcnJvciAmJgorCXRlc3QgLXogIiQoY2F0IGVycm9yKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICRIQVNIMiBIRUFEIDI+ZXJyb3IgJiYKKwl0ZXN0IC16ICIkKGNhdCBlcnJvcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHN0ZG91dCBvdXRwdXQgb24gZXJyb3InICcKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkpIiAmJgorCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBmb28pIiAmJgorCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBiYXogSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgYmFyKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0gyIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgLS1kZWZhdWx0JyAnCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgbWFzdGVyICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgbWFzdGVyIEhFQUQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBtYXN0ZXIgLS12ZXJpZnkgJiYKKwlnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBtYXN0ZXIgLS12ZXJpZnkgSEVBRCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAtLWRlZmF1bHQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBmb28gLS1kZWZhdWx0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1kZWZhdWx0IEhFQUQgLS12ZXJpZnkgYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgSEVBRCBiYXogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBmb28gLS12ZXJpZnkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tZGVmYXVsdCBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyQHtufSBmb3IgdmFyaW91cyBuJyAnCisJTj0kKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKwlObTE9JCgoJE4tMSkpICYmCisJTnAxPSQoKCROKzEpKSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyQHswfSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyQHsxfSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyQHskTm0xfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyQHskTn0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7JE5wMX0KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA0LWNlaWxpbmctZGlycy5zaCBiL3QvdDE1MDQtY2VpbGluZy1kaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjZTg3YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA0LWNlaWxpbmctZGlycy5zaApAQCAtMCwwICsxLDE2NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9wcmVmaXgoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJDEiIFwKKwkidGVzdCAnJDInID0gXCJcJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgpXCIiCit9CisKK3Rlc3RfZmFpbCgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMTogcHJlZml4IiAnCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeAorCScKK30KKworVFJBU0hfUk9PVD0iJFBXRCIKK1JPT1RfUEFSRU5UPSQoZGlybmFtZSAiJFRSQVNIX1JPT1QiKQorCisKK3Vuc2V0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCit0ZXN0X3ByZWZpeCBub19jZWlsICIiCisKK2V4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iIgordGVzdF9wcmVmaXggY2VpbF9lbXB0eSAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFJPT1RfUEFSRU5UIgordGVzdF9wcmVmaXggY2VpbF9hdF9wYXJlbnQgIiIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRST09UX1BBUkVOVC8iCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3BhcmVudF9zbGFzaCAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QiCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3RyYXNoICIiCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC8iCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3RyYXNoX3NsYXNoICIiCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIiCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3N1YiAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViLyIKK3Rlc3RfcHJlZml4IGNlaWxfYXRfc3ViX3NsYXNoICIiCisKKworbWtkaXIgLXAgc3ViL2RpciB8fCBleGl0IDEKK2NkIHN1Yi9kaXIgfHwgZXhpdCAxCisKK3Vuc2V0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCit0ZXN0X3ByZWZpeCBzdWJkaXJfbm9fY2VpbCAic3ViL2Rpci8iCisKK2V4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iIgordGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfZW1wdHkgInN1Yi9kaXIvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QiCit0ZXN0X2ZhaWwgc3ViZGlyX2NlaWxfYXRfdHJhc2gKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09ULyIKK3Rlc3RfZmFpbCBzdWJkaXJfY2VpbF9hdF90cmFzaF9zbGFzaAorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViIgordGVzdF9mYWlsIHN1YmRpcl9jZWlsX2F0X3N1YgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViLyIKK3Rlc3RfZmFpbCBzdWJkaXJfY2VpbF9hdF9zdWJfc2xhc2gKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1Yi9kaXIiCit0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9hdF9zdWJkaXIgInN1Yi9kaXIvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViL2Rpci8iCit0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9hdF9zdWJkaXJfc2xhc2ggInN1Yi9kaXIvIgorCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdSIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1ICJzdWIvZGlyLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1LyIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1X3NsYXNoICJzdWIvZGlyLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1Yi9kaSIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1Yl9kaSAic3ViL2Rpci8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIvZGkiCit0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9hdF9zdWJfZGlfc2xhc2ggInN1Yi9kaXIvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViZGkiCit0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9hdF9zdWJkaSAic3ViL2Rpci8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWJkaSIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1YmRpX3NsYXNoICJzdWIvZGlyLyIKKworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iL2ZvbzokVFJBU0hfUk9PVC9zdWIiCit0ZXN0X2ZhaWwgc2Vjb25kX29mX3R3bworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViOi9iYXIiCit0ZXN0X2ZhaWwgZmlyc3Rfb2ZfdHdvCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIvZm9vOiRUUkFTSF9ST09UL3N1YjovYmFyIgordGVzdF9mYWlsIHNlY29uZF9vZl90aHJlZQorCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIiCitHSVRfRElSPS4uLy4uLy5naXQKK2V4cG9ydCBHSVRfRElSCit0ZXN0X3ByZWZpeCBnaXRfZGlyX3NwZWNpZmllZCAiIgordW5zZXQgR0lUX0RJUgorCisKK2NkIC4uLy4uIHx8IGV4aXQgMQorbWtkaXIgLXAgcy9kIHx8IGV4aXQgMQorY2Qgcy9kIHx8IGV4aXQgMQorCit1bnNldCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUwordGVzdF9wcmVmaXggc2Rfbm9fY2VpbCAicy9kLyIKKworZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2VtcHR5ICJzL2QvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QiCit0ZXN0X2ZhaWwgc2RfY2VpbF9hdF90cmFzaAorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QvIgordGVzdF9mYWlsIHNkX2NlaWxfYXRfdHJhc2hfc2xhc2gKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MiCit0ZXN0X2ZhaWwgc2RfY2VpbF9hdF9zCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zLyIKK3Rlc3RfZmFpbCBzZF9jZWlsX2F0X3Nfc2xhc2gKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MvZCIKK3Rlc3RfcHJlZml4IHNkX2NlaWxfYXRfc2QgInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zL2QvIgordGVzdF9wcmVmaXggc2RfY2VpbF9hdF9zZF9zbGFzaCAicy9kLyIKKworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3UiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3N1ICJzL2QvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3UvIgordGVzdF9wcmVmaXggc2RfY2VpbF9hdF9zdV9zbGFzaCAicy9kLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MvZGkiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3NfZGkgInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zL2RpIgordGVzdF9wcmVmaXggc2RfY2VpbF9hdF9zX2RpX3NsYXNoICJzL2QvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc2RpIgordGVzdF9wcmVmaXggc2RfY2VpbF9hdF9zZGkgInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zZGkiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3NkaV9zbGFzaCAicy9kLyIKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDUtcmV2LXBhcnNlLWxhc3Quc2ggYi90L3QxNTA1LXJldi1wYXJzZS1sYXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ3MDllY2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA1LXJldi1wYXJzZS1sYXN0LnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IEB7LU59IHN5bnRheCcKKworLiAuL3Rlc3QtbGliLnNoCisKKworbWFrZV9jb21taXQgKCkgeworCWVjaG8gIiQxIiA+ICIkMSIgJiYKKwlnaXQgYWRkICIkMSIgJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJbWFrZV9jb21taXQgMSAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCW1ha2VfY29tbWl0IDIgJiYKKwltYWtlX2NvbW1pdCAzICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwltYWtlX2NvbW1pdCA0ICYmCisJZ2l0IG1lcmdlIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKworJworCisjIDEgLS0gMiAtLSAzIG1hc3RlcgorIyAgXCAgICAgICAgIFwKKyMgICBcICAgICAgICAgXAorIyAgICAtLS0gNCAtLS0gNSBzaWRlCisjCisjIGFuZCAnc2lkZScgc2hvdWxkIGJlIHRoZSBsYXN0IGJyYW5jaAorCit0ZXN0X3Jldl9lcXVpdmFsZW50ICgpIHsKKworCWdpdCByZXYtcGFyc2UgIiQxIiA+IGV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgIiQyIiA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAey0xfSB3b3JrcycgJworCXRlc3RfcmV2X2VxdWl2YWxlbnQgc2lkZSBAey0xfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAey0xfX4yIHdvcmtzJyAnCisJdGVzdF9yZXZfZXF1aXZhbGVudCBzaWRlfjIgQHstMX1+MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAey0xfV4yIHdvcmtzJyAnCisJdGVzdF9yZXZfZXF1aXZhbGVudCBzaWRlXjIgQHstMX1eMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAey0xfUB7MX0gd29ya3MnICcKKwl0ZXN0X3Jldl9lcXVpdmFsZW50IHNpZGVAezF9IEB7LTF9QHsxfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAey0yfSB3b3JrcycgJworCXRlc3RfcmV2X2VxdWl2YWxlbnQgbWFzdGVyIEB7LTJ9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTN9IGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBAey0zfQorJworCit0ZXN0X2RvbmUKKworCmRpZmYgLS1naXQgYS90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2ggYi90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjk1MGMxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDYtcmV2LXBhcnNlLWRpYWdub3Npcy5zaApAQCAtMCwwICsxLDE5OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHJldi1wYXJzZSBkaWFnbm9zaXMgZm9yIGludmFsaWQgYXJndW1lbnQnCisKK2V4ZWMgPC9kZXYvbnVsbAorCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9kaWRfeW91X21lYW4gKCkKK3sKKwlzcT0iJyIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBQYXRoICckMiQzJyAkNCwgYnV0IG5vdCAkezU6LSRzcSQzJHNxfS4KKwlEaWQgeW91IG1lYW4gJyQxOiQyJDMnJHsyOisgYWthICRzcSQxOi4vJDMkc3F9PworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGVycm9yCit9CisKK0hBU0hfZmlsZT0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG8nICcKKwllY2hvIG9uZSA+IGZpbGUudHh0ICYmCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyB0d28gPiBzdWJkaXIvZmlsZS50eHQgJiYKKwllY2hvIHRocmVlID4gc3ViZGlyL2ZpbGUyLnR4dCAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gaW5pdCAmJgorCWVjaG8gZm91ciA+IGluZGV4LW9ubHkudHh0ICYmCisJZ2l0IGFkZCBpbmRleC1vbmx5LnR4dCAmJgorCWVjaG8gZml2ZSA+IGRpc2stb25seS50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCBmaWxlIG9iamVjdHMnICcKKwlIQVNIX2ZpbGU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZS50eHQpICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEOnN1YmRpci9maWxlLnR4dCAmJgorCWdpdCByZXYtcGFyc2UgOmluZGV4LW9ubHkudHh0ICYmCisJKGNkIHN1YmRpciAmJgorCSBnaXQgcmV2LXBhcnNlIEhFQUQ6c3ViZGlyL2ZpbGUyLnR4dCAmJgorCSB0ZXN0ICRIQVNIX2ZpbGUgPSAkKGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlLnR4dCkgJiYKKwkgdGVzdCAkSEFTSF9maWxlID0gJChnaXQgcmV2LXBhcnNlIDpmaWxlLnR4dCkgJiYKKwkgdGVzdCAkSEFTSF9maWxlID0gJChnaXQgcmV2LXBhcnNlIDowOmZpbGUudHh0KSApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICgwKScgJworCWdpdCByZXYtcGFyc2UgOmZpbGUudHh0ID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgOi4vZmlsZS50eHQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCWdpdCByZXYtcGFyc2UgOjA6Li9maWxlLnR4dCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICgxKScgJworCWdpdCByZXYtcGFyc2UgSEVBRDpmaWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6Li9maWxlLnR4dCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICgyKScgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRDouLi9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCByZWxhdGl2ZSBmaWxlIG9iamVjdHMgKDMpJyAnCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEOi4uL3N1YmRpci8uLi9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCByZWxhdGl2ZSBmaWxlIG9iamVjdHMgKDQpJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEOnN1YmRpci9maWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQ6Li9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCByZWxhdGl2ZSBmaWxlIG9iamVjdHMgKDUpJyAnCisJZ2l0IHJldi1wYXJzZSA6c3ViZGlyL2ZpbGUudHh0ID5leHBlY3RlZCAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCByZXYtcGFyc2UgOi4vZmlsZS50eHQgPnJlc3VsdCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3RlZCByZXN1bHQgJiYKKwkJZ2l0IHJldi1wYXJzZSA6MDouL2ZpbGUudHh0ID5yZXN1bHQgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0ZWQgcmVzdWx0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IHJlbGF0aXZlIGZpbGUgb2JqZWN0cyAoNiknICcKKwlnaXQgcmV2LXBhcnNlIDpmaWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgcmV2LXBhcnNlIDouLi9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdCAmJgorCQlnaXQgcmV2LXBhcnNlIDowOi4uL2ZpbGUudHh0ID5yZXN1bHQgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0ZWQgcmVzdWx0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3QgcmV2aXNpb24gaWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGZvb2JhcjpmaWxlLnR4dCAyPmVycm9yICYmCisJZ3JlcCAiSW52YWxpZCBvYmplY3QgbmFtZSAnIiciJ2Zvb2JhciciJyInLiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGZvb2JhciAyPiBlcnJvciAmJgorCWdyZXAgInVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS4iIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBmaWxlIGluIHNoYTE6cGF0aCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpub3RoaW5nLnR4dCAyPiBlcnJvciAmJgorCWdyZXAgImZhdGFsOiBQYXRoICciJyInbm90aGluZy50eHQnIiciJyBkb2VzIG5vdCBleGlzdCBpbiAnIiciJ0hFQUQnIiciJyIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6aW5kZXgtb25seS50eHQgMj4gZXJyb3IgJiYKKwlncmVwICJmYXRhbDogUGF0aCAnIiciJ2luZGV4LW9ubHkudHh0JyInIicgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gJyInIidIRUFEJyInIicuIiBlcnJvciAmJgorCShjZCBzdWJkaXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUyLnR4dCAyPiBlcnJvciAmJgorCSB0ZXN0X2RpZF95b3VfbWVhbiBIRUFEIHN1YmRpci8gZmlsZTIudHh0IGV4aXN0cyApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBmaWxlIGluIDpwYXRoIGFuZCA6TjpwYXRoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6bm90aGluZy50eHQgMj4gZXJyb3IgJiYKKwlncmVwICJmYXRhbDogUGF0aCAnIiciJ25vdGhpbmcudHh0JyInIicgZG9lcyBub3QgZXhpc3QgKG5laXRoZXIgb24gZGlzayBub3IgaW4gdGhlIGluZGV4KS4iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6MTpub3RoaW5nLnR4dCAyPiBlcnJvciAmJgorCWdyZXAgIlBhdGggJyInIidub3RoaW5nLnR4dCciJyInIGRvZXMgbm90IGV4aXN0IChuZWl0aGVyIG9uIGRpc2sgbm9yIGluIHRoZSBpbmRleCkuIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjE6ZmlsZS50eHQgMj4gZXJyb3IgJiYKKwl0ZXN0X2RpZF95b3VfbWVhbiAiOjAiICIiIGZpbGUudHh0ICJpcyBpbiB0aGUgaW5kZXgiICJhdCBzdGFnZSAxIiAmJgorCShjZCBzdWJkaXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6MTpmaWxlLnR4dCAyPiBlcnJvciAmJgorCSB0ZXN0X2RpZF95b3VfbWVhbiAiOjAiICIiIGZpbGUudHh0ICJpcyBpbiB0aGUgaW5kZXgiICJhdCBzdGFnZSAxIiAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDpmaWxlMi50eHQgMj4gZXJyb3IgJiYKKwkgdGVzdF9kaWRfeW91X21lYW4gIjowIiBzdWJkaXIvIGZpbGUyLnR4dCAiaXMgaW4gdGhlIGluZGV4IiAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDoyOmZpbGUyLnR4dCAyPiBlcnJvciAmJgorCSB0ZXN0X2RpZF95b3VfbWVhbiA6MCBzdWJkaXIvIGZpbGUyLnR4dCAiaXMgaW4gdGhlIGluZGV4IikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDpkaXNrLW9ubHkudHh0IDI+IGVycm9yICYmCisJZ3JlcCAiZmF0YWw6IFBhdGggJyInIidkaXNrLW9ubHkudHh0JyInIicgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4LiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBAe259IHJlZmVyZW5jZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzdGVyQHs5OTk5OX0gPm91dHB1dCAyPmVycm9yICYmCisJdGVzdCAteiAiJChjYXQgb3V0cHV0KSIgJiYKKwlncmVwICJmYXRhbDogTG9nIGZvciBbXiBdKiBvbmx5IGhhcyBbMC05XVswLTldKiBlbnRyaWVzLiIgZXJyb3IgICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJAezk5OTk5fSA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0IC16ICIkKGNhdCBvdXRwdXQpIiAmJgorCWdyZXAgImZhdGFsOiBMb2cgZm9yIFteIF0qIG9ubHkgaGFzIFswLTldWzAtOV0qIGVudHJpZXMuIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRoIG5vdCBmb3VuZCcgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDouL25vbmV4aXN0ZW50LnR4dCAyPmVycm9yICYmCisJCWdyZXAgc3ViZGlyL25vbmV4aXN0ZW50LnR4dCBlcnJvcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgcGF0aCBvdXRzaWRlIHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOi4uL2ZpbGUudHh0ID5vdXRwdXQgMj5lcnJvciAmJgorCXRlc3QgLXogIiQoY2F0IG91dHB1dCkiICYmCisJZ3JlcCAib3V0c2lkZSByZXBvc2l0b3J5IiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRoIHdoZW4gY3dkIGlzIG91dHNpZGUgd29ya3RyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPS5naXQgLS13b3JrLXRyZWU9c3ViZGlyIHJldi1wYXJzZSBIRUFEOi4vZmlsZS50eHQgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdCAteiAiJChjYXQgb3V0cHV0KSIgJiYKKwlncmVwICJyZWxhdGl2ZSBwYXRoIHN5bnRheCBjYW4udCBiZSB1c2VkIG91dHNpZGUgd29ya2luZyB0cmVlLiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgcGF0aCB3aGVuIHN0YXJ0dXBfaW5mbyBpcyBOVUxMJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1tYXRjaC10cmVlcyBIRUFEOi4vZmlsZS50eHQgSEVBRDouL2ZpbGUudHh0IDI+ZXJyb3IgJiYKKwlncmVwICJCVUc6IHN0YXJ0dXBfaW5mbyBzdHJ1Y3QgaXMgbm90IGluaXRpYWxpemVkLiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnPGNvbW1pdD46ZmlsZSBjb3JyZWN0bHkgZGlhZ25vc2VkIGFmdGVyIGEgcGF0aG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGZpbGUudHh0IEhFQUQ6ZmlsZS50eHQgMT5hY3R1YWwgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgISAiZXhpc3RzIG9uIGRpc2siIGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAibm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUiIGVycm9yICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGUudHh0CisJSEVBRDpmaWxlLnR4dAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG90ZG90IGlzIG5vdCBhbiBlbXB0eSBzZXQnICcKKwkoIEg9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmIGVjaG8gJEggJiYgZWNobyBeJEggKSA+ZXhwZWN0ICYmCisKKwlnaXQgcmV2LXBhcnNlIEhFQUQuLiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHJldi1wYXJzZSAuLkhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gLi4gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLi4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA3LXJldi1wYXJzZS11cHN0cmVhbS5zaCBiL3QvdDE1MDctcmV2LXBhcnNlLXVwc3RyZWFtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ2ZTU3NjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA3LXJldi1wYXJzZS11cHN0cmVhbS5zaApAQCAtMCwwICsxLDIxNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgPGJyYW5jaD5Ae3Vwc3RyZWFtfSBzeW50YXgnCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwl0ZXN0X2NvbW1pdCAxICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCAyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjbG9uZSAuIGNsb25lICYmCisJdGVzdF9jb21taXQgMyAmJgorCShjZCBjbG9uZSAmJgorCSB0ZXN0X2NvbW1pdCA0ICYmCisJIGdpdCBicmFuY2ggLS10cmFjayBteS1zaWRlIG9yaWdpbi9zaWRlICYmCisJIGdpdCBicmFuY2ggLS10cmFjayBsb2NhbC1tYXN0ZXIgbWFzdGVyICYmCisJIGdpdCByZW1vdGUgYWRkIC10IG1hc3RlciBtYXN0ZXItb25seSAuLiAmJgorCSBnaXQgZmV0Y2ggbWFzdGVyLW9ubHkgJiYKKwkgZ2l0IGJyYW5jaCBiYWQtdXBzdHJlYW0gJiYKKwkgZ2l0IGNvbmZpZyBicmFuY2guYmFkLXVwc3RyZWFtLnJlbW90ZSBtYXN0ZXItb25seSAmJgorCSBnaXQgY29uZmlnIGJyYW5jaC5iYWQtdXBzdHJlYW0ubWVyZ2UgcmVmcy9oZWFkcy9zaWRlCisJKQorJworCitzcT0iJyIKKworZnVsbF9uYW1lICgpIHsKKwkoY2QgY2xvbmUgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSAiJEAiKQorfQorCitjb21taXRfc3ViamVjdCAoKSB7CisJKGNkIGNsb25lICYmCisJIGdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolcyAiJEAiKQorfQorCitlcnJvcl9tZXNzYWdlICgpIHsKKwkoY2QgY2xvbmUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJEAiKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3Vwc3RyZWFtfSByZXNvbHZlcyB0byBjb3JyZWN0IGZ1bGwgbmFtZScgJworCXRlc3QgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPSAiJChmdWxsX25hbWUgQHt1cHN0cmVhbX0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3V9IHJlc29sdmVzIHRvIGNvcnJlY3QgZnVsbCBuYW1lJyAnCisJdGVzdCByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA9ICIkKGZ1bGxfbmFtZSBAe3V9KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXktc2lkZUB7dXBzdHJlYW19IHJlc29sdmVzIHRvIGNvcnJlY3QgZnVsbCBuYW1lJyAnCisJdGVzdCByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgPSAiJChmdWxsX25hbWUgbXktc2lkZUB7dX0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdteS1zaWRlQHt1fSByZXNvbHZlcyB0byBjb3JyZWN0IGNvbW1pdCcgJworCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdF9jb21taXQgNSAmJgorCShjZCBjbG9uZSAmJiBnaXQgZmV0Y2gpICYmCisJdGVzdCAyID0gIiQoY29tbWl0X3N1YmplY3QgbXktc2lkZSkiICYmCisJdGVzdCA1ID0gIiQoY29tbWl0X3N1YmplY3QgbXktc2lkZUB7dX0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QtdHJhY2tpbmdAe3V9IGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZnVsbF9uYW1lIG5vbi10cmFja2luZ0B7dX0gJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IGNoZWNrb3V0IC0tbm8tdHJhY2sgLWIgbm9uLXRyYWNraW5nKSAmJgorCXRlc3RfbXVzdF9mYWlsIGZ1bGxfbmFtZSBub24tdHJhY2tpbmdAe3V9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzxicmFuY2g+QHt1fUB7MX0gcmVzb2x2ZXMgY29ycmVjdGx5JyAnCisJdGVzdF9jb21taXQgNiAmJgorCShjZCBjbG9uZSAmJiBnaXQgZmV0Y2gpICYmCisJdGVzdCA1ID0gJChjb21taXRfc3ViamVjdCBteS1zaWRlQHt1fUB7MX0pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dX0gd2l0aG91dCBzcGVjaWZ5aW5nIGJyYW5jaCBmYWlscyBvbiBhIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBAe3V9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIG5ldyBteS1zaWRlQHt1fSBmb3JrcyBmcm9tIHRoZSBzYW1lJyAnCisoCisJY2QgY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3IG15LXNpZGVAe3V9ICYmCisJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBteS1zaWRlQHt1fSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBuZXdAe3V9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG15LXNpZGVAe3V9IHJlY29yZHMgdGhlIGNvcnJlY3QgbmFtZScgJworKAorCWNkIGNsb25lIHx8IGV4aXQKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIHx8IGV4aXQKKwlnaXQgYnJhbmNoIC1EIG5ldyA7IyBjYW4gZmFpbCBidXQgaXMgb2sKKwlnaXQgYnJhbmNoIC10IG5ldyBteS1zaWRlQHt1fSAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIG5ld0B7dX0gJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JXMgPmFjdHVhbCAmJgorCWVjaG8gIk1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJHtzcX1vcmlnaW4vc2lkZSR7c3F9IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWQgb3RoZXJAe3V9JyAnCisJZ2l0IGNoZWNrb3V0IC10IC1iIG90aGVyIG1hc3RlciAmJgorCWdpdCBicmFuY2ggLWQgQHt1fSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG90aGVyQHt1fScgJworCWdpdCBicmFuY2ggLWYgbWFzdGVyIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgLXQgLWIgYW5vdGhlciBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgQHt1fSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJZWNobyByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2hAe3V9IHdvcmtzIHdoZW4gdHJhY2tpbmcgYSBsb2NhbCBicmFuY2gnICcKKwl0ZXN0IHJlZnMvaGVhZHMvbWFzdGVyID0gIiQoZnVsbF9uYW1lIGxvY2FsLW1hc3RlckB7dX0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2hAe3V9IGVycm9yIG1lc3NhZ2Ugd2hlbiBubyB1cHN0cmVhbScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWVycm9yOiBObyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJHtzcX1ub24tdHJhY2tpbmcke3NxfQorCWZhdGFsOiBOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24KKwlFT0YKKwllcnJvcl9tZXNzYWdlIG5vbi10cmFja2luZ0B7dX0gMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3V9IGVycm9yIG1lc3NhZ2Ugd2hlbiBubyB1cHN0cmVhbScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWVycm9yOiBObyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJHtzcX1tYXN0ZXIke3NxfQorCWZhdGFsOiBOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24KKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEB7dX0gMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2hAe3V9IGVycm9yIG1lc3NhZ2Ugd2l0aCBtaXNzcGVsdCBicmFuY2gnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwllcnJvcjogTm8gc3VjaCBicmFuY2g6ICR7c3F9bm8tc3VjaC1icmFuY2gke3NxfQorCWZhdGFsOiBOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24KKwlFT0YKKwllcnJvcl9tZXNzYWdlIG5vLXN1Y2gtYnJhbmNoQHt1fSAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dX0gZXJyb3IgbWVzc2FnZSB3aGVuIG5vdCBvbiBhIGJyYW5jaCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWVycm9yOiBIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoCisJZmF0YWw6IE5lZWRlZCBhIHNpbmdsZSByZXZpc2lvbgorCUVPRgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEB7dX0gMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2hAe3V9IGVycm9yIG1lc3NhZ2UgaWYgdXBzdHJlYW0gYnJhbmNoIG5vdCBmZXRjaGVkJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZXJyb3I6IFVwc3RyZWFtIGJyYW5jaCAke3NxfXJlZnMvaGVhZHMvc2lkZSR7c3F9IG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCisJZmF0YWw6IE5lZWRlZCBhIHNpbmdsZSByZXZpc2lvbgorCUVPRgorCWVycm9yX21lc3NhZ2UgYmFkLXVwc3RyZWFtQHt1fSAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgd29ya3Mgd2hlbiB0cmFja2luZyBhIGxvY2FsIGJyYW5jaCcgJworKAorCWNkIGNsb25lICYmCisJZ2l0IGNoZWNrb3V0IGxvY2FsLW1hc3RlciAmJgorCWdpdCBwdWxsCispCisnCisKKyMgbWFrZXMgc2Vuc2UgaWYgdGhlIHByZXZpb3VzIG9uZSBzdWNjZWVkZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dX0gd29ya3Mgd2hlbiB0cmFja2luZyBhIGxvY2FsIGJyYW5jaCcgJworCXRlc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPSAiJChmdWxsX25hbWUgQHt1fSkiCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitjb21taXQgOGY0ODlkMDFkMGNjNjVjM2IwZjA5NTA0ZWM1MGI1ZWQwMmE3MGJkNQorUmVmbG9nOiBtYXN0ZXJAezB9IChDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+KQorUmVmbG9nIG1lc3NhZ2U6IGJyYW5jaDogQ3JlYXRlZCBmcm9tIEhFQUQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE1OjEzIDIwMDUgLTA3MDAKKworICAgIDMKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1nIG90aGVyQHt1fScgJworCWdpdCBsb2cgLTEgLWcgb3RoZXJAe3V9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitjb21taXQgOGY0ODlkMDFkMGNjNjVjM2IwZjA5NTA0ZWM1MGI1ZWQwMmE3MGJkNQorUmVmbG9nOiBtYXN0ZXJAe1RodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBicmFuY2g6IENyZWF0ZWQgZnJvbSBIRUFECitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxNToxMyAyMDA1IC0wNzAwCisKKyAgICAzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1nIG90aGVyQHt1fUB7bm93fScgJworCWdpdCBsb2cgLTEgLWcgb3RoZXJAe3V9QHtub3d9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwOC1hdC1jb21iaW5hdGlvbnMuc2ggYi90L3QxNTA4LWF0LWNvbWJpbmF0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNWQ2MjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwOC1hdC1jb21iaW5hdGlvbnMuc2gKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdmFyaW91cyBAe1h9IHN5bnRheCBjb21iaW5hdGlvbnMgdG9nZXRoZXInCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2soKSB7Cit0ZXN0X2V4cGVjdF8kezM6LXN1Y2Nlc3N9ICIkMSA9ICQyIiAiCisJZWNobyAnJDInID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVzICckMScgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyIKK30KK25vbnNlbnNlKCkgewordGVzdF9leHBlY3RfJHsyOi1zdWNjZXNzfSAiJDEgaXMgbm9uc2Vuc2ljYWwiICIKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0xICckMScKKyIKK30KK2ZhaWwoKSB7CisJIiRAIiBmYWlsdXJlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgbWFzdGVyLW9uZSAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci10d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgdXBzdHJlYW0tYnJhbmNoICYmCisJdGVzdF9jb21taXQgdXBzdHJlYW0tb25lICYmCisJdGVzdF9jb21taXQgdXBzdHJlYW0tdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1iIG9sZC1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBvbGQtb25lICYmCisJdGVzdF9jb21taXQgb2xkLXR3byAmJgorCWdpdCBjaGVja291dCAtYiBuZXctYnJhbmNoICYmCisJdGVzdF9jb21taXQgbmV3LW9uZSAmJgorCXRlc3RfY29tbWl0IG5ldy10d28gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5vbGQtYnJhbmNoLnJlbW90ZSAuICYmCisJZ2l0IGNvbmZpZyBicmFuY2gub2xkLWJyYW5jaC5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBjb25maWcgYnJhbmNoLm5ldy1icmFuY2gucmVtb3RlIC4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5uZXctYnJhbmNoLm1lcmdlIHJlZnMvaGVhZHMvdXBzdHJlYW0tYnJhbmNoCisnCisKK2NoZWNrIEhFQUQgbmV3LXR3bworY2hlY2sgIkB7MX0iIG5ldy1vbmUKK2NoZWNrICJAey0xfSIgb2xkLXR3bworY2hlY2sgIkB7LTF9QHsxfSIgb2xkLW9uZQorY2hlY2sgIkB7dX0iIHVwc3RyZWFtLXR3bworY2hlY2sgIkB7dX1AezF9IiB1cHN0cmVhbS1vbmUKK2NoZWNrICJAey0xfUB7dX0iIG1hc3Rlci10d28KK2NoZWNrICJAey0xfUB7dX1AezF9IiBtYXN0ZXItb25lCitub25zZW5zZSAiQHt1fUB7LTF9Igorbm9uc2Vuc2UgIkB7MX1Ae3V9IgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDktcm9vdC13b3JrdHJlZS5zaCBiL3QvdDE1MDktcm9vdC13b3JrdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMzU0MjBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwOS1yb290LXdvcmt0cmVlLnNoCkBAIC0wLDAgKzEsMjQ5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBHaXQgd2hlbiBnaXQgcmVwb3NpdG9yeSBpcyBsb2NhdGVkIGF0IHJvb3QKKworVGhpcyB0ZXN0IHJlcXVpcmVzIHdyaXRlIGFjY2VzcyBpbiByb290LiBEbyBub3QgYm90aGVyIGlmIHlvdSBkbyBub3QKK2hhdmUgYSB0aHJvd2F3YXkgY2hyb290IG9yIFZNLgorCitTY3JpcHQgdDE1MDkvcHJlcGFyZS1jaHJvb3Quc2ggbWF5IGhlbHAgeW91IHNldHVwIGNocm9vdCwgdGhlbiB5b3UKK2NhbiBjaHJvb3QgaW4gYW5kIGV4ZWN1dGUgdGhpcyB0ZXN0IGZyb20gdGhlcmUuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2NtcF92YWwoKSB7CisJZWNobyAiJDEiID4gZXhwZWN0ZWQKKwllY2hvICIkMiIgPiByZXN1bHQKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKK30KKwordGVzdF92YXJzKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiQxOiBnaXRkaXIiICcKKwkJdGVzdF9jbXBfdmFsICInIiQyIiciICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKSIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMTogd29ya3RyZWUiICcKKwkJdGVzdF9jbXBfdmFsICInIiQzIiciICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMTogcHJlZml4IiAnCisJCXRlc3RfY21wX3ZhbCAiJyIkNCInIiAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgpIgorCScKK30KKwordGVzdF9mb29iYXJfcm9vdCgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVsYXRpdmUnICcKKwkJdGVzdCAteiAiJChjZCAvICYmIGdpdCBscy1maWxlcykiICYmCisJCWdpdCBhZGQgZm9vL2Zvb21lICYmCisJCWdpdCBhZGQgZm9vL2Jhci9iYXJtZSAmJgorCQlnaXQgYWRkIG1lICYmCisJCSggY2QgLyAmJiBnaXQgbHMtZmlsZXMgLS1zdGFnZSApID4gcmVzdWx0ICYmCisJCXRlc3RfY21wIC9scy5leHBlY3RlZCByZXN1bHQgJiYKKwkJcm0gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2luZGV4IgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhYnNvbHV0ZScgJworCQl0ZXN0IC16ICIkKGNkIC8gJiYgZ2l0IGxzLWZpbGVzKSIgJiYKKwkJZ2l0IGFkZCAvZm9vL2Zvb21lICYmCisJCWdpdCBhZGQgL2Zvby9iYXIvYmFybWUgJiYKKwkJZ2l0IGFkZCAvbWUgJiYKKwkJKCBjZCAvICYmIGdpdCBscy1maWxlcyAtLXN0YWdlICkgPiByZXN1bHQgJiYKKwkJdGVzdF9jbXAgL2xzLmV4cGVjdGVkIHJlc3VsdCAmJgorCQlybSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaW5kZXgiCisJJworCit9CisKK3Rlc3RfZm9vYmFyX2ZvbygpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVsYXRpdmUnICcKKwkJdGVzdCAteiAiJChjZCAvICYmIGdpdCBscy1maWxlcykiICYmCisJCWdpdCBhZGQgZm9vbWUgJiYKKwkJZ2l0IGFkZCBiYXIvYmFybWUgJiYKKwkJZ2l0IGFkZCAuLi9tZSAmJgorCQkoIGNkIC8gJiYgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgKSA+IHJlc3VsdCAmJgorCQl0ZXN0X2NtcCAvbHMuZXhwZWN0ZWQgcmVzdWx0ICYmCisJCXJtICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9pbmRleCIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYWJzb2x1dGUnICcKKwkJdGVzdCAteiAiJChjZCAvICYmIGdpdCBscy1maWxlcykiICYmCisJCWdpdCBhZGQgL2Zvby9mb29tZSAmJgorCQlnaXQgYWRkIC9mb28vYmFyL2Jhcm1lICYmCisJCWdpdCBhZGQgL21lICYmCisJCSggY2QgLyAmJiBnaXQgbHMtZmlsZXMgLS1zdGFnZSApID4gcmVzdWx0ICYmCisJCXRlc3RfY21wIC9scy5leHBlY3RlZCByZXN1bHQgJiYKKwkJcm0gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2luZGV4IgorCScKK30KKwordGVzdF9mb29iYXJfZm9vYmFyKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCByZWxhdGl2ZScgJworCQl0ZXN0IC16ICIkKGNkIC8gJiYgZ2l0IGxzLWZpbGVzKSIgJiYKKwkJZ2l0IGFkZCAuLi9mb29tZSAmJgorCQlnaXQgYWRkIGJhcm1lICYmCisJCWdpdCBhZGQgLi4vLi4vbWUgJiYKKwkJKCBjZCAvICYmIGdpdCBscy1maWxlcyAtLXN0YWdlICkgPiByZXN1bHQgJiYKKwkJdGVzdF9jbXAgL2xzLmV4cGVjdGVkIHJlc3VsdCAmJgorCQlybSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaW5kZXgiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFic29sdXRlJyAnCisJCXRlc3QgLXogIiQoY2QgLyAmJiBnaXQgbHMtZmlsZXMpIiAmJgorCQlnaXQgYWRkIC9mb28vZm9vbWUgJiYKKwkJZ2l0IGFkZCAvZm9vL2Jhci9iYXJtZSAmJgorCQlnaXQgYWRkIC9tZSAmJgorCQkoIGNkIC8gJiYgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgKSA+IHJlc3VsdCAmJgorCQl0ZXN0X2NtcCAvbHMuZXhwZWN0ZWQgcmVzdWx0ICYmCisJCXJtICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9pbmRleCIKKwknCit9CisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQT1NJWFBFUk0gfHwgISBbIC13IC8gXTsgdGhlbgorCXNraXBfYWxsPSJEYW5nZXJvdXMgdGVzdCBza2lwcGVkLiBSZWFkIHRoaXMgdGVzdCBpZiB5b3Ugd2FudCB0byBleGVjdXRlIGl0IgorCXRlc3RfZG9uZQorZmkKKworaWYgWyAiJElLTk9XV0hBVElBTURPSU5HIiAhPSAiWUVTIiBdOyB0aGVuCisJc2tpcF9hbGw9IllvdSBtdXN0IHNldCBlbnYgdmFyIElLTk9XV0hBVElBTURPSU5HPVlFUyBpbiBvcmRlciB0byBydW4gdGhpcyB0ZXN0IgorCXRlc3RfZG9uZQorZmkKKworaWYgWyAiJFVJRCIgPSAwIF07IHRoZW4KKwlza2lwX2FsbD0iTm8geW91IGNhbid0IHJ1biB0aGlzIHdpdGggcm9vdCIKKwl0ZXN0X2RvbmUKK2ZpCisKK09ORV9TSEExPWQwMDQ5MWZkN2U1YmI2ZmEyOGM1MTdhMGJiMzJiOGI1MDY1MzlkNGQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlybSAtcmYgL2ZvbworCW1rZGlyIC9mb28gJiYKKwlta2RpciAvZm9vL2JhciAmJgorCWVjaG8gMSA+IC9mb28vZm9vbWUgJiYKKwllY2hvIDEgPiAvZm9vL2Jhci9iYXJtZSAmJgorCWVjaG8gMSA+IC9tZQorJworCitzYXkgIkdJVF9ESVIgYWJzb2x1dGUsIEdJVF9XT1JLX1RSRUUgc2V0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvJyAnY2QgLycKKworY2F0ID5scy5leHBlY3RlZCA8PEVPRgorMTAwNjQ0ICRPTkVfU0hBMSAwCWZvby9iYXIvYmFybWUKKzEwMDY0NCAkT05FX1NIQTEgMAlmb28vZm9vbWUKKzEwMDY0NCAkT05FX1NIQTEgMAltZQorRU9GCisKK0dJVF9ESVI9IiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgJiYgZXhwb3J0IEdJVF9ESVIKK0dJVF9XT1JLX1RSRUU9LyAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ2FicyBnaXRkaXIsIHJvb3QnICIkR0lUX0RJUiIgIi8iICIiCit0ZXN0X2Zvb2Jhcl9yb290CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28nICdjZCAvZm9vJworCit0ZXN0X3ZhcnMgJ2FicyBnaXRkaXIsIGZvbycgIiRHSVRfRElSIiAiLyIgImZvby8iCit0ZXN0X2Zvb2Jhcl9mb28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2Zvby9iYXInICdjZCAvZm9vL2JhcicKKwordGVzdF92YXJzICdhYnMgZ2l0ZGlyLCBmb28vYmFyJyAiJEdJVF9ESVIiICIvIiAiZm9vL2Jhci8iCit0ZXN0X2Zvb2Jhcl9mb29iYXIKKworc2F5ICJHSVRfRElSIHJlbGF0aXZlLCBHSVRfV09SS19UUkVFIHNldCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gLycgJ2NkIC8nCisKK0dJVF9ESVI9IiQoZWNobyAkVFJBU0hfRElSRUNUT1JZfHNlZCAncyxeLywsJykvLmdpdCIgJiYgZXhwb3J0IEdJVF9ESVIKK0dJVF9XT1JLX1RSRUU9LyAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ3JlbCBnaXRkaXIsIHJvb3QnICIkR0lUX0RJUiIgIi8iICIiCit0ZXN0X2Zvb2Jhcl9yb290CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28nICdjZCAvZm9vJworCitHSVRfRElSPSIuLi8kVFJBU0hfRElSRUNUT1JZLy5naXQiICYmIGV4cG9ydCBHSVRfRElSCitHSVRfV09SS19UUkVFPS8gJiYgZXhwb3J0IEdJVF9XT1JLX1RSRUUKKwordGVzdF92YXJzICdyZWwgZ2l0ZGlyLCBmb28nICIkVFJBU0hfRElSRUNUT1JZLy5naXQiICIvIiAiZm9vLyIKK3Rlc3RfZm9vYmFyX2ZvbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvZm9vL2JhcicgJ2NkIC9mb28vYmFyJworCitHSVRfRElSPSIuLi8uLi8kVFJBU0hfRElSRUNUT1JZLy5naXQiICYmIGV4cG9ydCBHSVRfRElSCitHSVRfV09SS19UUkVFPS8gJiYgZXhwb3J0IEdJVF9XT1JLX1RSRUUKKwordGVzdF92YXJzICdyZWwgZ2l0ZGlyLCBmb28vYmFyJyAiJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAiLyIgImZvby9iYXIvIgordGVzdF9mb29iYXJfZm9vYmFyCisKK3NheSAiR0lUX0RJUiByZWxhdGl2ZSwgR0lUX1dPUktfVFJFRSByZWxhdGl2ZSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gLycgJ2NkIC8nCisKK0dJVF9ESVI9IiQoZWNobyAkVFJBU0hfRElSRUNUT1JZfHNlZCAncyxeLywsJykvLmdpdCIgJiYgZXhwb3J0IEdJVF9ESVIKK0dJVF9XT1JLX1RSRUU9LiAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ3JlbCBnaXRkaXIsIHJvb3QnICIkR0lUX0RJUiIgIi8iICIiCit0ZXN0X2Zvb2Jhcl9yb290CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC8nICdjZCAvZm9vJworCitHSVRfRElSPSIuLi8kVFJBU0hfRElSRUNUT1JZLy5naXQiICYmIGV4cG9ydCBHSVRfRElSCitHSVRfV09SS19UUkVFPS4uICYmIGV4cG9ydCBHSVRfV09SS19UUkVFCisKK3Rlc3RfdmFycyAncmVsIGdpdGRpciwgZm9vJyAiJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAiLyIgImZvby8iCit0ZXN0X2Zvb2Jhcl9mb28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2Zvby9iYXInICdjZCAvZm9vL2JhcicKKworR0lUX0RJUj0iLi4vLi4vJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAmJiBleHBvcnQgR0lUX0RJUgorR0lUX1dPUktfVFJFRT0uLi8uLiAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ3JlbCBnaXRkaXIsIGZvby9iYXInICIkVFJBU0hfRElSRUNUT1JZLy5naXQiICIvIiAiZm9vL2Jhci8iCit0ZXN0X2Zvb2Jhcl9mb29iYXIKKworc2F5ICIuZ2l0IGF0IHJvb3QiCisKK3Vuc2V0IEdJVF9ESVIKK3Vuc2V0IEdJVF9XT1JLX1RSRUUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gLycgJ2NkIC8nCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXJtIC1yZiAvLmdpdAorCWVjaG8gIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC8uZ2l0LyIgPiBleHBlY3RlZCAmJgorCWdpdCBpbml0ID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfdmFycyAnYXV0byBnaXRkaXIsIHJvb3QnICIuZ2l0IiAiLyIgIiIKK3Rlc3RfZm9vYmFyX3Jvb3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2ZvbycgJ2NkIC9mb28nCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCBmb28nICIvLmdpdCIgIi8iICJmb28vIgordGVzdF9mb29iYXJfZm9vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28vYmFyJyAnY2QgL2Zvby9iYXInCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCBmb28vYmFyJyAiLy5naXQiICIvIiAiZm9vL2Jhci8iCit0ZXN0X2Zvb2Jhcl9mb29iYXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCcgJ3JtIC1yZiAvLmdpdCcKKworc2F5ICJhdXRvIGJhcmUgZ2l0ZGlyIgorCisjIERFU1RST1lZWVlZISEhISEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJcm0gLXJmIC9yZWZzIC9vYmplY3RzIC9pbmZvIC9ob29rcworCXJtIC8qCisJY2QgLyAmJgorCWVjaG8gIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC8iID4gZXhwZWN0ZWQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF92YXJzICdhdXRvIGdpdGRpciwgcm9vdCcgIi4iICIiICIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28nICdjZCAvZm9vJworCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCByb290JyAiLyIgIiIgIiIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA5L2V4Y2x1ZGVzIGIvdC90MTUwOS9leGNsdWRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGQyMWQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwOS9leGNsdWRlcwpAQCAtMCwwICsxLDE0IEBACisqLm8KKyp+CisqLmJhaworKi5jCisqLmgKKy5naXQKK2NvbnRyaWIKK0RvY3VtZW50YXRpb24KK2dpdC1ndWkKK2dpdGstZ2l0CitnaXR3ZWIKK3QvdDQwMTMKK3QvdDUxMDAKK3QvdDU1MTUKZGlmZiAtLWdpdCBhL3QvdDE1MDkvcHJlcGFyZS1jaHJvb3Quc2ggYi90L3QxNTA5L3ByZXBhcmUtY2hyb290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1MzM0YTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA5L3ByZXBhcmUtY2hyb290LnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorCitkaWUoKSB7CisJZWNobyA+JjIgIiRAIgorCWV4aXQgMQorfQorCit4bWtkaXIoKSB7CisJd2hpbGUgWyAtbiAiJDEiIF07IGRvCisJCVsgLWQgIiQxIiBdIHx8IG1rZGlyICIkMSIgfHwgZGllICJVbmFibGUgdG8gbWtkaXIgJDEiCisJCXNoaWZ0CisJZG9uZQorfQorCitSPSIkMSIKKworWyAtbiAiJFIiIF0gfHwgZGllICJVc2FnZTogcHJlcGFyZS1jaHJvb3Quc2ggPHJvb3Q+IgorWyAteCBnaXQgXSB8fCBkaWUgIlRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIGF0IGdpdCBzb3VyY2UgY29kZSdzIHRvcCBkaXJlY3RvcnkiCitbIC14IC9iaW4vYnVzeWJveCBdIHx8IGRpZSAiWW91IG5lZWQgYnVzeWJveCIKKworeG1rZGlyICIkUiIgIiRSL2JpbiIgIiRSL2V0YyIgIiRSL2xpYiIgIiRSL2RldiIKK1sgLWMgIiRSL2Rldi9udWxsIiBdIHx8IGRpZSAiL2Rldi9udWxsIGlzIG1pc3NpbmcuIERvIG1rbm9kICRSL2Rldi9udWxsIGMgMSAzICYmIGNobW9kIDY2NiAkUi9kZXYvbnVsbCIKK2VjaG8gInJvb3Q6eDowOjA6cm9vdDovOi9iaW4vc2giID4gIiRSL2V0Yy9wYXNzd2QiCitlY2hvICIkKGlkIC1udSk6eDokKGlkIC11KTokKGlkIC1nKTo6JChwd2QpL3Q6L2Jpbi9zaCIgPj4gIiRSL2V0Yy9wYXNzd2QiCitlY2hvICJyb290OjowOnJvb3QiID4gIiRSL2V0Yy9ncm91cCIKK2VjaG8gIiQoaWQgLW5nKTo6JChpZCAtZyk6JChpZCAtbnUpIiA+PiAiJFIvZXRjL2dyb3VwIgorCitbIC14ICIkUi9iaW4vYnVzeWJveCIgXSB8fCBjcCAvYmluL2J1c3lib3ggIiRSL2Jpbi9idXN5Ym94IgorWyAteCAiJFIvYmluL3NoIiBdIHx8IGxuIC1zIC9iaW4vYnVzeWJveCAiJFIvYmluL3NoIgorWyAteCAiJFIvYmluL3N1IiBdIHx8IGxuIC1zIC9iaW4vYnVzeWJveCAiJFIvYmluL3N1IgorCitta2RpciAtcCAiJFIkKHB3ZCkiCityc3luYyAtLWV4Y2x1ZGUtZnJvbSB0L3QxNTA5L2V4Y2x1ZGVzIC1IYSAuICIkUiQocHdkKSIKK2xkZCBnaXQgfCBncmVwICcvJyB8IHNlZCAncywuKlxzXCgvW14gXSpcKS4qLFwxLCcgfCB3aGlsZSByZWFkIGk7IGRvCisJbWtkaXIgLXAgIiRSJChkaXJuYW1lICRpKSIKKwljcCAiJGkiICIkUi8kaSIKK2RvbmUKK2VjaG8gIkV4ZWN1dGUgdGhpcyBpbiByb290OiAnY2hyb290ICRSIC9iaW4vc3UgLSAkKGlkIC1udSknIgpkaWZmIC0tZ2l0IGEvdC90MTUxMC1yZXBvLXNldHVwLnNoIGIvdC90MTUxMC1yZXBvLXNldHVwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgwYWVkZmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTEwLXJlcG8tc2V0dXAuc2gKQEAgLTAsMCArMSw3NzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0cyBvZiBjd2QvcHJlZml4L3dvcmt0cmVlL2dpdGRpciBzZXR1cCBpbiBhbGwgY2FzZXMKKworQSBmZXcgcnVsZXMgZm9yIHJlcG8gc2V0dXA6CisKKzEuIEdJVF9ESVIgaXMgcmVsYXRpdmUgdG8gdXNlcidzIGN3ZC4gLS1naXQtZGlyIGlzIGVxdWl2YWxlbnQgdG8KKyAgIEdJVF9ESVIuCisKKzIuIC5naXQgZmlsZSBpcyByZWxhdGl2ZSB0byBwYXJlbnQgZGlyZWN0b3J5LiAuZ2l0IGZpbGUgaXMgYmFzaWNhbGx5CisgICBzeW1saW5rIGluIGRpc2d1aXNlLiBUaGUgZGlyZWN0b3J5IHdoZXJlIC5naXQgZmlsZSBwb2ludHMgdG8gd2lsbAorICAgYmVjb21lIG5ldyBnaXRfZGlyLgorCiszLiBjb3JlLndvcmt0cmVlIGlzIHJlbGF0aXZlIHRvIGdpdF9kaXIuCisKKzQuIEdJVF9XT1JLX1RSRUUgaXMgcmVsYXRpdmUgdG8gdXNlcidzIGN3ZC4gLS13b3JrLXRyZWUgaXMKKyAgIGVxdWl2YWxlbnQgdG8gR0lUX1dPUktfVFJFRS4KKworNS4gR0lUX1dPUktfVFJFRS9jb3JlLndvcmt0cmVlIHdhcyBvcmlnaW5hbGx5IG1lYW50IHRvIHdvcmsgb25seSBpZgorICAgR0lUX0RJUiBpcyBzZXQsIGJ1dCBlYXJsaWVyIGdpdCBkaWRuJ3QgZW5mb3JjZSBpdCwgYW5kIHNvbWUgc2NyaXB0cworICAgZGVwZW5kIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGhhcHBlbmVkIHRvIGZpcnN0IGRpc2NvdmVyIC5naXQgYnkKKyAgIGdvaW5nIHVwIGZyb20gdGhlIHVzZXJzICRjd2QgYW5kIHRoZW4gdXNpbmcgdGhlIHNwZWNpZmllZCB3b3JraW5nIHRyZWUKKyAgIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbnkgcmVsYXRpb24gdG8gd2hlcmUgLmdpdCB3YXMgZm91bmQgaW4uICBUaGlzCisgICBoaXN0b3JpY2FsIGJlaGF2aW91ciBtdXN0IGJlIGtlcHQuCisKKzYuIEVmZmVjdGl2ZSBHSVRfV09SS19UUkVFIG92ZXJyaWRlcyBjb3JlLndvcmt0cmVlIGFuZCBjb3JlLmJhcmUKKworNy4gRWZmZWN0aXZlIGNvcmUud29ya3RyZWUgY29uZmxpY3RzIHdpdGggY29yZS5iYXJlCisKKzguIElmIEdJVF9ESVIgaXMgc2V0IGJ1dCBuZWl0aGVyIHdvcmt0cmVlIG5vciBiYXJlIHNldHRpbmcgaXMgZ2l2ZW4sCisgICBvcmlnaW5hbCBjd2QgYmVjb21lcyB3b3JrdHJlZS4KKworOS4gSWYgLmdpdCBkaXNjb3ZlcnkgaXMgZG9uZSBpbnNpZGUgYSByZXBvLCB0aGUgcmVwbyBiZWNvbWVzIGEgYmFyZQorICAgcmVwby4gLmdpdCBkaXNjb3ZlcnkgaXMgcGVyZm9ybWVkIGlmIEdJVF9ESVIgaXMgbm90IHNldC4KKworMTAuIElmIG5vIHdvcmt0cmVlIGlzIGF2YWlsYWJsZSwgY3dkIHJlbWFpbnMgdW5jaGFuZ2VkLCBwcmVmaXggaXMKKyAgICBOVUxMLgorCisxMS4gV2hlbiB1c2VyJ3MgY3dkIGlzIG91dHNpZGUgd29ya3RyZWUsIGN3ZCByZW1haW5zIHVuY2hhbmdlZCwKKyAgICBwcmVmaXggaXMgTlVMTC4KKyIKKy4gLi90ZXN0LWxpYi5zaAorCitoZXJlPSQocHdkKQorCit0ZXN0X3JlcG8gKCkgeworCSgKKwkJY2QgIiQxIiAmJgorCQlpZiB0ZXN0IC1uICIkMiIKKwkJdGhlbgorCQkJR0lUX0RJUj0iJDIiICYmCisJCQlleHBvcnQgR0lUX0RJUgorCQlmaSAmJgorCQlpZiB0ZXN0IC1uICIkMyIKKwkJdGhlbgorCQkJR0lUX1dPUktfVFJFRT0iJDMiICYmCisJCQlleHBvcnQgR0lUX1dPUktfVFJFRQorCQlmaSAmJgorCQlybSAtZiB0cmFjZSAmJgorCQlHSVRfVFJBQ0VfU0VUVVA9IiQocHdkKS90cmFjZSIgZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwgJiYKKwkJZ3JlcCAnXnNldHVwOiAnIHRyYWNlID5yZXN1bHQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisJKQorfQorCittYXliZV9jb25maWcgKCkgeworCWZpbGU9JDEgdmFyPSQyIHZhbHVlPSQzICYmCisJaWYgdGVzdCAiJHZhbHVlIiAhPSB1bnNldAorCXRoZW4KKwkJZ2l0IGNvbmZpZyAtLWZpbGU9IiRmaWxlIiAiJHZhciIgIiR2YWx1ZSIKKwlmaQorfQorCitzZXR1cF9yZXBvICgpIHsKKwluYW1lPSQxIHdvcmt0cmVlY2ZnPSQyIGdpdGZpbGU9JDMgYmFyZWNmZz0kNCAmJgorCXNhbmVfdW5zZXQgR0lUX0RJUiBHSVRfV09SS19UUkVFICYmCisKKwlnaXQgaW5pdCAiJG5hbWUiICYmCisJbWF5YmVfY29uZmlnICIkbmFtZS8uZ2l0L2NvbmZpZyIgY29yZS53b3JrdHJlZSAiJHdvcmt0cmVlY2ZnIiAmJgorCW1heWJlX2NvbmZpZyAiJG5hbWUvLmdpdC9jb25maWciIGNvcmUuYmFyZSAiJGJhcmVjZmciICYmCisJbWtkaXIgLXAgIiRuYW1lL3N1Yi9zdWIiICYmCisKKwlpZiB0ZXN0ICIke2dpdGZpbGU6K3NldH0iCisJdGhlbgorCQltdiAiJG5hbWUvLmdpdCIgIiRuYW1lLmdpdCIgJiYKKwkJZWNobyAiZ2l0ZGlyOiAuLi8kbmFtZS5naXQiID4iJG5hbWUvLmdpdCIKKwlmaQorfQorCittYXliZV9zZXQgKCkgeworCXZhcj0kMSB2YWx1ZT0kMiAmJgorCWlmIHRlc3QgIiR2YWx1ZSIgIT0gdW5zZXQKKwl0aGVuCisJCWV2YWwgIiR2YXI9XCR2YWx1ZSIgJiYKKwkJZXhwb3J0ICR2YXIKKwlmaQorfQorCitzZXR1cF9lbnYgKCkgeworCXdvcmt0cmVlbnY9JDEgZ2l0ZGlyZW52PSQyICYmCisJc2FuZV91bnNldCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwltYXliZV9zZXQgR0lUX0RJUiAiJGdpdGRpcmVudiIgJiYKKwltYXliZV9zZXQgR0lUX1dPUktfVFJFRSAiJHdvcmt0cmVlZW52IgorfQorCitleHBlY3QgKCkgeworCWNhdCA+IiQxL2V4cGVjdGVkIiA8PC1FT0YKKwlzZXR1cDogZ2l0X2RpcjogJDIKKwlzZXR1cDogd29ya3RyZWU6ICQzCisJc2V0dXA6IGN3ZDogJDQKKwlzZXR1cDogcHJlZml4OiAkNQorCUVPRgorfQorCit0cnlfY2FzZSAoKSB7CisJbmFtZT0kMSB3b3JrdHJlZWVudj0kMiBnaXRkaXJlbnY9JDMgJiYKKwlzZXR1cF9lbnYgIiR3b3JrdHJlZWVudiIgIiRnaXRkaXJlbnYiICYmCisJZXhwZWN0ICIkbmFtZSIgIiQ0IiAiJDUiICIkNiIgIiQ3IiAmJgorCXRlc3RfcmVwbyAiJG5hbWUiCit9CisKK3J1bl93dF90ZXN0cyAoKSB7CisJTj0kMSBnaXRmaWxlPSQyCisKKwlhYnNnaXQ9IiRoZXJlLyROLy5naXQiCisJZG90Z2l0PS5naXQKKwlkb3Rkb3RnaXQ9Li4vLi4vLmdpdAorCisJaWYgdGVzdCAiJGdpdGZpbGUiCisJdGhlbgorCQlhYnNnaXQ9IiRoZXJlLyROLmdpdCIKKwkJZG90Z2l0PSRhYnNnaXQgZG90ZG90Z2l0PSRhYnNnaXQKKwlmaQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiIyROOiBleHBsaWNpdCBHSVRfV09SS19UUkVFIGFuZCBHSVRfRElSIGF0IHRvcGxldmVsIiAnCisJCXRyeV9jYXNlICROICIkaGVyZS8kTiIgLmdpdCBcCisJCQkiJGRvdGdpdCIgIiRoZXJlLyROIiAiJGhlcmUvJE4iICIobnVsbCkiICYmCisJCXRyeV9jYXNlICROIC4gLmdpdCBcCisJCQkiJGRvdGdpdCIgIiRoZXJlLyROIiAiJGhlcmUvJE4iICIobnVsbCkiICYmCisJCXRyeV9jYXNlICROICIkaGVyZS8kTiIgIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUvJE4iICIkaGVyZS8kTiIgIihudWxsKSIgJiYKKwkJdHJ5X2Nhc2UgJE4gLiAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZS8kTiIgIiRoZXJlLyROIiAiKG51bGwpIgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiMkTjogZXhwbGljaXQgR0lUX1dPUktfVFJFRSBhbmQgR0lUX0RJUiBpbiBzdWJkaXIiICcKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAiJGhlcmUvJE4iIC4uLy4uLy5naXQgXAorCQkJIiRhYnNnaXQiICIkaGVyZS8kTiIgIiRoZXJlLyROIiBzdWIvc3ViLyAmJgorCQl0cnlfY2FzZSAkTi9zdWIvc3ViIC4uLy4uIC4uLy4uLy5naXQgXAorCQkJIiRhYnNnaXQiICIkaGVyZS8kTiIgIiRoZXJlLyROIiBzdWIvc3ViLyAmJgorCQl0cnlfY2FzZSAkTi9zdWIvc3ViICIkaGVyZS8kTiIgIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUvJE4iICIkaGVyZS8kTiIgc3ViL3N1Yi8gJiYKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAuLi8uLiAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZS8kTiIgIiRoZXJlLyROIiBzdWIvc3ViLworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiMkTjogZXhwbGljaXQgR0lUX1dPUktfVFJFRSBmcm9tIHBhcmVudCBvZiB3b3JrdHJlZSIgJworCQl0cnlfY2FzZSAkTiAiJGhlcmUvJE4vd3QiIC5naXQgXAorCQkJIiRkb3RnaXQiICIkaGVyZS8kTi93dCIgIiRoZXJlLyROIiAiKG51bGwpIiAmJgorCQl0cnlfY2FzZSAkTiB3dCAuZ2l0IFwKKwkJCSIkZG90Z2l0IiAiJGhlcmUvJE4vd3QiICIkaGVyZS8kTiIgIihudWxsKSIgJiYKKwkJdHJ5X2Nhc2UgJE4gd3QgIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUvJE4vd3QiICIkaGVyZS8kTiIgIihudWxsKSIgJiYKKwkJdHJ5X2Nhc2UgJE4gIiRoZXJlLyROL3d0IiAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZS8kTi93dCIgIiRoZXJlLyROIiAiKG51bGwpIgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiMkTjogZXhwbGljaXQgR0lUX1dPUktfVFJFRSBmcm9tIG5lcGhldyBvZiB3b3JrdHJlZSIgJworCQl0cnlfY2FzZSAkTi9zdWIvc3ViICIkaGVyZS8kTi93dCIgLi4vLi4vLmdpdCBcCisJCQkiJGRvdGRvdGdpdCIgIiRoZXJlLyROL3d0IiAiJGhlcmUvJE4vc3ViL3N1YiIgIihudWxsKSIgJiYKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAuLi8uLi93dCAuLi8uLi8uZ2l0IFwKKwkJCSIkZG90ZG90Z2l0IiAiJGhlcmUvJE4vd3QiICIkaGVyZS8kTi9zdWIvc3ViIiAiKG51bGwpIiAmJgorCQl0cnlfY2FzZSAkTi9zdWIvc3ViIC4uLy4uL3d0ICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlLyROL3d0IiAiJGhlcmUvJE4vc3ViL3N1YiIgIihudWxsKSIgJiYKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAiJGhlcmUvJE4vd3QiICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlLyROL3d0IiAiJGhlcmUvJE4vc3ViL3N1YiIgIihudWxsKSIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIjJE46IGNoZGlyX3RvX3RvcGxldmVsIHVzZXMgd29ya3RyZWUsIG5vdCBnaXQgZGlyIiAnCisJCXRyeV9jYXNlICROICIkaGVyZSIgLmdpdCBcCisJCQkiJGFic2dpdCIgIiRoZXJlIiAiJGhlcmUiICROLyAmJgorCQl0cnlfY2FzZSAkTiAuLiAuZ2l0IFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUiICIkaGVyZSIgJE4vICYmCisJCXRyeV9jYXNlICROIC4uICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlIiAiJGhlcmUiICROLyAmJgorCQl0cnlfY2FzZSAkTiAiJGhlcmUiICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlIiAiJGhlcmUiICROLworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiMkTjogY2hkaXJfdG9fdG9wbGV2ZWwgdXNlcyB3b3JrdHJlZSAoZnJvbSBzdWJkaXIpIiAnCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgIiRoZXJlIiAuLi8uLi8uZ2l0IFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUiICIkaGVyZSIgJE4vc3ViL3N1Yi8gJiYKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAuLi8uLi8uLiAuLi8uLi8uZ2l0IFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUiICIkaGVyZSIgJE4vc3ViL3N1Yi8gJiYKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAuLi8uLi8uLi8gIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUiICIkaGVyZSIgJE4vc3ViL3N1Yi8gJiYKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAiJGhlcmUiICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlIiAiJGhlcmUiICROL3N1Yi9zdWIvCisJJworfQorCisjIHRyeV9yZXBvICNjIEdJVF9XT1JLX1RSRUUgR0lUX0RJUiBjb3JlLndvcmt0cmVlIC5naXRmaWxlPyBjb3JlLmJhcmUgXAorIwkoZ2l0IGRpcikgKHdvcmsgdHJlZSkgKGN3ZCkgKHByZWZpeCkgXAk8LS0gYXQgdG9wbGV2ZWwKKyMJKGdpdCBkaXIpICh3b3JrIHRyZWUpIChjd2QpIChwcmVmaXgpCTwtLSBmcm9tIHN1YmRpcgordHJ5X3JlcG8gKCkgeworCW5hbWU9JDEgd29ya3RyZWVlbnY9JDIgZ2l0ZGlyZW52PSQzICYmCisJc2V0dXBfcmVwbyAiJG5hbWUiICIkNCIgIiQ1IiAiJDYiICYmCisJc2hpZnQgNiAmJgorCXRyeV9jYXNlICIkbmFtZSIgIiR3b3JrdHJlZWVudiIgIiRnaXRkaXJlbnYiIFwKKwkJIiQxIiAiJDIiICIkMyIgIiQ0IiAmJgorCXNoaWZ0IDQgJiYKKwljYXNlICIkZ2l0ZGlyZW52IiBpbgorCS8qIHwgPzovKiB8IHVuc2V0KSA7OworCSopCisJCWdpdGRpcmVudj0uLi8kZ2l0ZGlyZW52IDs7CisJZXNhYyAmJgorCXRyeV9jYXNlICIkbmFtZS9zdWIiICIkd29ya3RyZWVlbnYiICIkZ2l0ZGlyZW52IiBcCisJCSIkMSIgIiQyIiAiJDMiICIkNCIKK30KKworIyBCaXQgMCA9IEdJVF9XT1JLX1RSRUUKKyMgQml0IDEgPSBHSVRfRElSCisjIEJpdCAyID0gY29yZS53b3JrdHJlZQorIyBCaXQgMyA9IC5naXQgaXMgYSBmaWxlCisjIEJpdCA0ID0gYmFyZSByZXBvCisjIENhc2UjID0gZW5jb2Rpbmcgb2YgdGhlIGFib3ZlIDUgYml0cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMDogbm9uYmFyZSByZXBvLCBubyBleHBsaWNpdCBjb25maWd1cmF0aW9uJyAnCisJdHJ5X3JlcG8gMCB1bnNldCB1bnNldCB1bnNldCAiIiB1bnNldCBcCisJCS5naXQgIiRoZXJlLzAiICIkaGVyZS8wIiAiKG51bGwpIiBcCisJCS5naXQgIiRoZXJlLzAiICIkaGVyZS8wIiBzdWIvIDI+bWVzc2FnZSAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxOiBHSVRfV09SS19UUkVFIHdpdGhvdXQgZXhwbGljaXQgR0lUX0RJUiBpcyBhY2NlcHRlZCcgJworCW1rZGlyIC1wIHd0ICYmCisJdHJ5X3JlcG8gMSAiJGhlcmUiIHVuc2V0IHVuc2V0ICIiIHVuc2V0IFwKKwkJIiRoZXJlLzEvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDEvIFwKKwkJIiRoZXJlLzEvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDEvc3ViLyAyPm1lc3NhZ2UgJiYKKwkhIHRlc3QgLXMgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjogd29ya3RyZWUgZGVmYXVsdHMgdG8gY3dkIHdpdGggZXhwbGljaXQgR0lUX0RJUicgJworCXRyeV9yZXBvIDIgdW5zZXQgIiRoZXJlLzIvLmdpdCIgdW5zZXQgIiIgdW5zZXQgXAorCQkiJGhlcmUvMi8uZ2l0IiAiJGhlcmUvMiIgIiRoZXJlLzIiICIobnVsbCkiIFwKKwkJIiRoZXJlLzIvLmdpdCIgIiRoZXJlLzIvc3ViIiAiJGhlcmUvMi9zdWIiICIobnVsbCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyYjogcmVsYXRpdmUgR0lUX0RJUicgJworCXRyeV9yZXBvIDJiIHVuc2V0ICIuZ2l0IiB1bnNldCAiIiB1bnNldCBcCisJCSIuZ2l0IiAiJGhlcmUvMmIiICIkaGVyZS8yYiIgIihudWxsKSIgXAorCQkiLi4vLmdpdCIgIiRoZXJlLzJiL3N1YiIgIiRoZXJlLzJiL3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzM6IHNldHVwJyAnCisJc2V0dXBfcmVwbyAzIHVuc2V0ICIiIHVuc2V0ICYmCisJbWtkaXIgLXAgMy9zdWIvc3ViIDMvd3Qvc3ViCisnCitydW5fd3RfdGVzdHMgMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjNDogY29yZS53b3JrdHJlZSB3aXRob3V0IEdJVF9ESVIgc2V0IGlzIGFjY2VwdGVkJyAnCisJc2V0dXBfcmVwbyA0IC4uL3N1YiAiIiB1bnNldCAmJgorCW1rZGlyIC1wIDQvc3ViIHN1YiAmJgorCXRyeV9jYXNlIDQgdW5zZXQgdW5zZXQgXAorCQkuZ2l0ICIkaGVyZS80L3N1YiIgIiRoZXJlLzQiICIobnVsbCkiIFwKKwkJIiRoZXJlLzQvLmdpdCIgIiRoZXJlLzQvc3ViIiAiJGhlcmUvNC9zdWIiICIobnVsbCkiIDI+bWVzc2FnZSAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM1OiBjb3JlLndvcmt0cmVlICsgR0lUX1dPUktfVFJFRSBpcyBhY2NlcHRlZCcgJworCSMgb3I6IHlvdSBjYW5ub3QgaW50aW1pZGF0ZSBhd2F5IHRoZSBsYWNrIG9mIEdJVF9ESVIgc2V0dGluZworCXRyeV9yZXBvIDUgIiRoZXJlIiB1bnNldCAiJGhlcmUvNSIgIiIgdW5zZXQgXAorCQkiJGhlcmUvNS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgNS8gXAorCQkiJGhlcmUvNS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgNS9zdWIvIDI+bWVzc2FnZSAmJgorCXRyeV9yZXBvIDVhIC4uIHVuc2V0ICIkaGVyZS81YSIgIiIgdW5zZXQgXAorCQkiJGhlcmUvNWEvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDVhLyBcCisJCSIkaGVyZS81YS8uZ2l0IiAiJGhlcmUvNWEiICIkaGVyZS81YSIgc3ViLyAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM2OiBzZXR0aW5nIEdJVF9ESVIgYnJpbmdzIGNvcmUud29ya3RyZWUgdG8gbGlmZScgJworCXNldHVwX3JlcG8gNiAiJGhlcmUvNiIgIiIgdW5zZXQgJiYKKwl0cnlfY2FzZSA2IHVuc2V0IC5naXQgXAorCQkuZ2l0ICIkaGVyZS82IiAiJGhlcmUvNiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSA2IHVuc2V0ICIkaGVyZS82Ly5naXQiIFwKKwkJIiRoZXJlLzYvLmdpdCIgIiRoZXJlLzYiICIkaGVyZS82IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDYvc3ViL3N1YiB1bnNldCAuLi8uLi8uZ2l0IFwKKwkJIiRoZXJlLzYvLmdpdCIgIiRoZXJlLzYiICIkaGVyZS82IiBzdWIvc3ViLyAmJgorCXRyeV9jYXNlIDYvc3ViL3N1YiB1bnNldCAiJGhlcmUvNi8uZ2l0IiBcCisJCSIkaGVyZS82Ly5naXQiICIkaGVyZS82IiAiJGhlcmUvNiIgc3ViL3N1Yi8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzZiOiBHSVRfRElSIHNldCwgY29yZS53b3JrdHJlZSByZWxhdGl2ZScgJworCXNldHVwX3JlcG8gNmIgLi4gIiIgdW5zZXQgJiYKKwl0cnlfY2FzZSA2YiB1bnNldCAuZ2l0IFwKKwkJLmdpdCAiJGhlcmUvNmIiICIkaGVyZS82YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSA2YiB1bnNldCAiJGhlcmUvNmIvLmdpdCIgXAorCQkiJGhlcmUvNmIvLmdpdCIgIiRoZXJlLzZiIiAiJGhlcmUvNmIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgNmIvc3ViL3N1YiB1bnNldCAuLi8uLi8uZ2l0IFwKKwkJIiRoZXJlLzZiLy5naXQiICIkaGVyZS82YiIgIiRoZXJlLzZiIiBzdWIvc3ViLyAmJgorCXRyeV9jYXNlIDZiL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzZiLy5naXQiIFwKKwkJIiRoZXJlLzZiLy5naXQiICIkaGVyZS82YiIgIiRoZXJlLzZiIiBzdWIvc3ViLworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjNmM6IEdJVF9ESVIgc2V0LCBjb3JlLndvcmt0cmVlPS4uL3d0IChhYnNvbHV0ZSknICcKKwlzZXR1cF9yZXBvIDZjICIkaGVyZS82Yy93dCIgIiIgdW5zZXQgJiYKKwlta2RpciAtcCA2Yy93dC9zdWIgJiYKKworCXRyeV9jYXNlIDZjIHVuc2V0IC5naXQgXAorCQkuZ2l0ICIkaGVyZS82Yy93dCIgIiRoZXJlLzZjIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDZjIHVuc2V0ICIkaGVyZS82Yy8uZ2l0IiBcCisJCSIkaGVyZS82Yy8uZ2l0IiAiJGhlcmUvNmMvd3QiICIkaGVyZS82YyIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSA2Yy9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkuLi8uLi8uZ2l0ICIkaGVyZS82Yy93dCIgIiRoZXJlLzZjL3N1Yi9zdWIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgNmMvc3ViL3N1YiB1bnNldCAiJGhlcmUvNmMvLmdpdCIgXAorCQkiJGhlcmUvNmMvLmdpdCIgIiRoZXJlLzZjL3d0IiAiJGhlcmUvNmMvc3ViL3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzZkOiBHSVRfRElSIHNldCwgY29yZS53b3JrdHJlZT0uLi93dCAocmVsYXRpdmUpJyAnCisJc2V0dXBfcmVwbyA2ZCAiJGhlcmUvNmQvd3QiICIiIHVuc2V0ICYmCisJbWtkaXIgLXAgNmQvd3Qvc3ViICYmCisKKwl0cnlfY2FzZSA2ZCB1bnNldCAuZ2l0IFwKKwkJLmdpdCAiJGhlcmUvNmQvd3QiICIkaGVyZS82ZCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSA2ZCB1bnNldCAiJGhlcmUvNmQvLmdpdCIgXAorCQkiJGhlcmUvNmQvLmdpdCIgIiRoZXJlLzZkL3d0IiAiJGhlcmUvNmQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgNmQvc3ViL3N1YiB1bnNldCAuLi8uLi8uZ2l0IFwKKwkJLi4vLi4vLmdpdCAiJGhlcmUvNmQvd3QiICIkaGVyZS82ZC9zdWIvc3ViIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDZkL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzZkLy5naXQiIFwKKwkJIiRoZXJlLzZkLy5naXQiICIkaGVyZS82ZC93dCIgIiRoZXJlLzZkL3N1Yi9zdWIiICIobnVsbCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM2ZTogR0lUX0RJUiBzZXQsIGNvcmUud29ya3RyZWU9Li4vLi4gKGFic29sdXRlKScgJworCXNldHVwX3JlcG8gNmUgIiRoZXJlIiAiIiB1bnNldCAmJgorCXRyeV9jYXNlIDZlIHVuc2V0IC5naXQgXAorCQkiJGhlcmUvNmUvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDZlLyAmJgorCXRyeV9jYXNlIDZlIHVuc2V0ICIkaGVyZS82ZS8uZ2l0IiBcCisJCSIkaGVyZS82ZS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgNmUvICYmCisJdHJ5X2Nhc2UgNmUvc3ViL3N1YiB1bnNldCAuLi8uLi8uZ2l0IFwKKwkJIiRoZXJlLzZlLy5naXQiICIkaGVyZSIgIiRoZXJlIiA2ZS9zdWIvc3ViLyAmJgorCXRyeV9jYXNlIDZlL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzZlLy5naXQiIFwKKwkJIiRoZXJlLzZlLy5naXQiICIkaGVyZSIgIiRoZXJlIiA2ZS9zdWIvc3ViLworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjNmY6IEdJVF9ESVIgc2V0LCBjb3JlLndvcmt0cmVlPS4uLy4uIChyZWxhdGl2ZSknICcKKwlzZXR1cF9yZXBvIDZmIC4uLy4uLyAiIiB1bnNldCAmJgorCXRyeV9jYXNlIDZmIHVuc2V0IC5naXQgXAorCQkiJGhlcmUvNmYvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDZmLyAmJgorCXRyeV9jYXNlIDZmIHVuc2V0ICIkaGVyZS82Zi8uZ2l0IiBcCisJCSIkaGVyZS82Zi8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgNmYvICYmCisJdHJ5X2Nhc2UgNmYvc3ViL3N1YiB1bnNldCAuLi8uLi8uZ2l0IFwKKwkJIiRoZXJlLzZmLy5naXQiICIkaGVyZSIgIiRoZXJlIiA2Zi9zdWIvc3ViLyAmJgorCXRyeV9jYXNlIDZmL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzZmLy5naXQiIFwKKwkJIiRoZXJlLzZmLy5naXQiICIkaGVyZSIgIiRoZXJlIiA2Zi9zdWIvc3ViLworJworCisjIGNhc2UgIzc6IEdJVF9XT1JLX1RSRUUgb3ZlcnJpZGVzIGNvcmUud29ya3RyZWUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjNzogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDcgbm9uLWV4aXN0ZW50ICIiIHVuc2V0ICYmCisJbWtkaXIgLXAgNy9zdWIvc3ViIDcvd3Qvc3ViCisnCitydW5fd3RfdGVzdHMgNworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjODogZ2l0ZmlsZSwgZWFzeSBjYXNlJyAnCisJdHJ5X3JlcG8gOCB1bnNldCB1bnNldCB1bnNldCBnaXRmaWxlIHVuc2V0IFwKKwkJIiRoZXJlLzguZ2l0IiAiJGhlcmUvOCIgIiRoZXJlLzgiICIobnVsbCkiIFwKKwkJIiRoZXJlLzguZ2l0IiAiJGhlcmUvOCIgIiRoZXJlLzgiIHN1Yi8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzk6IEdJVF9XT1JLX1RSRUUgYWNjZXB0ZWQgd2l0aCBnaXRmaWxlJyAnCisJbWtkaXIgLXAgOS93dCAmJgorCXRyeV9yZXBvIDkgd3QgdW5zZXQgdW5zZXQgZ2l0ZmlsZSB1bnNldCBcCisJCSIkaGVyZS85LmdpdCIgIiRoZXJlLzkvd3QiICIkaGVyZS85IiAiKG51bGwpIiBcCisJCSIkaGVyZS85LmdpdCIgIiRoZXJlLzkvc3ViL3d0IiAiJGhlcmUvOS9zdWIiICIobnVsbCkiIDI+bWVzc2FnZSAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxMDogR0lUX0RJUiBjYW4gcG9pbnQgdG8gZ2l0ZmlsZScgJworCXRyeV9yZXBvIDEwIHVuc2V0ICIkaGVyZS8xMC8uZ2l0IiB1bnNldCBnaXRmaWxlIHVuc2V0IFwKKwkJIiRoZXJlLzEwLmdpdCIgIiRoZXJlLzEwIiAiJGhlcmUvMTAiICIobnVsbCkiIFwKKwkJIiRoZXJlLzEwLmdpdCIgIiRoZXJlLzEwL3N1YiIgIiRoZXJlLzEwL3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzEwYjogcmVsYXRpdmUgR0lUX0RJUiBjYW4gcG9pbnQgdG8gZ2l0ZmlsZScgJworCXRyeV9yZXBvIDEwYiB1bnNldCAuZ2l0IHVuc2V0IGdpdGZpbGUgdW5zZXQgXAorCQkiJGhlcmUvMTBiLmdpdCIgIiRoZXJlLzEwYiIgIiRoZXJlLzEwYiIgIihudWxsKSIgXAorCQkiJGhlcmUvMTBiLmdpdCIgIiRoZXJlLzEwYi9zdWIiICIkaGVyZS8xMGIvc3ViIiAiKG51bGwpIgorJworCisjIGNhc2UgIzExOiBHSVRfV09SS19UUkVFIHdvcmtzLCBnaXRmaWxlIGNhc2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTE6IHNldHVwJyAnCisJc2V0dXBfcmVwbyAxMSB1bnNldCBnaXRmaWxlIHVuc2V0ICYmCisJbWtkaXIgLXAgMTEvc3ViL3N1YiAxMS93dC9zdWIKKycKK3J1bl93dF90ZXN0cyAxMSBnaXRmaWxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxMjogY29yZS53b3JrdHJlZSB3aXRoIGdpdGZpbGUgaXMgYWNjZXB0ZWQnICcKKwl0cnlfcmVwbyAxMiB1bnNldCB1bnNldCAiJGhlcmUvMTIiIGdpdGZpbGUgdW5zZXQgXAorCQkiJGhlcmUvMTIuZ2l0IiAiJGhlcmUvMTIiICIkaGVyZS8xMiIgIihudWxsKSIgXAorCQkiJGhlcmUvMTIuZ2l0IiAiJGhlcmUvMTIiICIkaGVyZS8xMiIgc3ViLyAyPm1lc3NhZ2UgJiYKKwkhIHRlc3QgLXMgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTM6IGNvcmUud29ya3RyZWUrR0lUX1dPUktfVFJFRSBhY2NlcHRlZCAod2l0aCBnaXRmaWxlKScgJworCSMgb3I6IHlvdSBjYW5ub3QgaW50aW1pZGF0ZSBhd2F5IHRoZSBsYWNrIG9mIEdJVF9ESVIgc2V0dGluZworCXRyeV9yZXBvIDEzIG5vbi1leGlzdGVudC10b28gdW5zZXQgbm9uLWV4aXN0ZW50IGdpdGZpbGUgdW5zZXQgXAorCQkiJGhlcmUvMTMuZ2l0IiAiJGhlcmUvMTMvbm9uLWV4aXN0ZW50LXRvbyIgIiRoZXJlLzEzIiAiKG51bGwpIiBcCisJCSIkaGVyZS8xMy5naXQiICIkaGVyZS8xMy9zdWIvbm9uLWV4aXN0ZW50LXRvbyIgIiRoZXJlLzEzL3N1YiIgIihudWxsKSIgMj5tZXNzYWdlICYmCisJISB0ZXN0IC1zIG1lc3NhZ2UKKycKKworIyBjYXNlICMxNC4KKyMgSWYgdGhpcyB3ZXJlIG1vcmUgdGFibGUtZHJpdmVuLCBpdCBjb3VsZCBzaGFyZSBjb2RlIHdpdGggY2FzZSAjNi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzE0OiBjb3JlLndvcmt0cmVlIHdpdGggR0lUX0RJUiBwb2ludGluZyB0byBnaXRmaWxlJyAnCisJc2V0dXBfcmVwbyAxNCAiJGhlcmUvMTQiIGdpdGZpbGUgdW5zZXQgJiYKKwl0cnlfY2FzZSAxNCB1bnNldCAuZ2l0IFwKKwkJIiRoZXJlLzE0LmdpdCIgIiRoZXJlLzE0IiAiJGhlcmUvMTQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTQgdW5zZXQgIiRoZXJlLzE0Ly5naXQiIFwKKwkJIiRoZXJlLzE0LmdpdCIgIiRoZXJlLzE0IiAiJGhlcmUvMTQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTQvc3ViL3N1YiB1bnNldCAuLi8uLi8uZ2l0IFwKKwkJIiRoZXJlLzE0LmdpdCIgIiRoZXJlLzE0IiAiJGhlcmUvMTQiIHN1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgMTQvc3ViL3N1YiB1bnNldCAiJGhlcmUvMTQvLmdpdCIgXAorCQkiJGhlcmUvMTQuZ2l0IiAiJGhlcmUvMTQiICIkaGVyZS8xNCIgc3ViL3N1Yi8gJiYKKworCXNldHVwX3JlcG8gMTRjICIkaGVyZS8xNGMvd3QiIGdpdGZpbGUgdW5zZXQgJiYKKwlta2RpciAtcCAxNGMvd3Qvc3ViICYmCisKKwl0cnlfY2FzZSAxNGMgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS8xNGMuZ2l0IiAiJGhlcmUvMTRjL3d0IiAiJGhlcmUvMTRjIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDE0YyB1bnNldCAiJGhlcmUvMTRjLy5naXQiIFwKKwkJIiRoZXJlLzE0Yy5naXQiICIkaGVyZS8xNGMvd3QiICIkaGVyZS8xNGMiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRjL3N1Yi9zdWIgdW5zZXQgLi4vLi4vLmdpdCBcCisJCSIkaGVyZS8xNGMuZ2l0IiAiJGhlcmUvMTRjL3d0IiAiJGhlcmUvMTRjL3N1Yi9zdWIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRjL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzE0Yy8uZ2l0IiBcCisJCSIkaGVyZS8xNGMuZ2l0IiAiJGhlcmUvMTRjL3d0IiAiJGhlcmUvMTRjL3N1Yi9zdWIiICIobnVsbCkiICYmCisKKwlzZXR1cF9yZXBvIDE0ZCAiJGhlcmUvMTRkL3d0IiBnaXRmaWxlIHVuc2V0ICYmCisJbWtkaXIgLXAgMTRkL3d0L3N1YiAmJgorCisJdHJ5X2Nhc2UgMTRkIHVuc2V0IC5naXQgXAorCQkiJGhlcmUvMTRkLmdpdCIgIiRoZXJlLzE0ZC93dCIgIiRoZXJlLzE0ZCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNGQgdW5zZXQgIiRoZXJlLzE0ZC8uZ2l0IiBcCisJCSIkaGVyZS8xNGQuZ2l0IiAiJGhlcmUvMTRkL3d0IiAiJGhlcmUvMTRkIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDE0ZC9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvMTRkLmdpdCIgIiRoZXJlLzE0ZC93dCIgIiRoZXJlLzE0ZC9zdWIvc3ViIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDE0ZC9zdWIvc3ViIHVuc2V0ICIkaGVyZS8xNGQvLmdpdCIgXAorCQkiJGhlcmUvMTRkLmdpdCIgIiRoZXJlLzE0ZC93dCIgIiRoZXJlLzE0ZC9zdWIvc3ViIiAiKG51bGwpIiAmJgorCisJc2V0dXBfcmVwbyAxNGUgIiRoZXJlIiBnaXRmaWxlIHVuc2V0ICYmCisJdHJ5X2Nhc2UgMTRlIHVuc2V0IC5naXQgXAorCQkiJGhlcmUvMTRlLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDE0ZS8gJiYKKwl0cnlfY2FzZSAxNGUgdW5zZXQgIiRoZXJlLzE0ZS8uZ2l0IiBcCisJCSIkaGVyZS8xNGUuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRlLyAmJgorCXRyeV9jYXNlIDE0ZS9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvMTRlLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDE0ZS9zdWIvc3ViLyAmJgorCXRyeV9jYXNlIDE0ZS9zdWIvc3ViIHVuc2V0ICIkaGVyZS8xNGUvLmdpdCIgXAorCQkiJGhlcmUvMTRlLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDE0ZS9zdWIvc3ViLworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTRiOiBjb3JlLndvcmt0cmVlIGlzIHJlbGF0aXZlIHRvIGFjdHVhbCBnaXQgZGlyJyAnCisJc2V0dXBfcmVwbyAxNGIgLi4vMTRiIGdpdGZpbGUgdW5zZXQgJiYKKwl0cnlfY2FzZSAxNGIgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS8xNGIuZ2l0IiAiJGhlcmUvMTRiIiAiJGhlcmUvMTRiIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDE0YiB1bnNldCAiJGhlcmUvMTRiLy5naXQiIFwKKwkJIiRoZXJlLzE0Yi5naXQiICIkaGVyZS8xNGIiICIkaGVyZS8xNGIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRiL3N1Yi9zdWIgdW5zZXQgLi4vLi4vLmdpdCBcCisJCSIkaGVyZS8xNGIuZ2l0IiAiJGhlcmUvMTRiIiAiJGhlcmUvMTRiIiBzdWIvc3ViLyAmJgorCXRyeV9jYXNlIDE0Yi9zdWIvc3ViIHVuc2V0ICIkaGVyZS8xNGIvLmdpdCIgXAorCQkiJGhlcmUvMTRiLmdpdCIgIiRoZXJlLzE0YiIgIiRoZXJlLzE0YiIgc3ViL3N1Yi8gJiYKKworCXNldHVwX3JlcG8gMTRmIC4uLyBnaXRmaWxlIHVuc2V0ICYmCisJdHJ5X2Nhc2UgMTRmIHVuc2V0IC5naXQgXAorCQkiJGhlcmUvMTRmLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDE0Zi8gJiYKKwl0cnlfY2FzZSAxNGYgdW5zZXQgIiRoZXJlLzE0Zi8uZ2l0IiBcCisJCSIkaGVyZS8xNGYuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRmLyAmJgorCXRyeV9jYXNlIDE0Zi9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvMTRmLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDE0Zi9zdWIvc3ViLyAmJgorCXRyeV9jYXNlIDE0Zi9zdWIvc3ViIHVuc2V0ICIkaGVyZS8xNGYvLmdpdCIgXAorCQkiJGhlcmUvMTRmLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDE0Zi9zdWIvc3ViLworJworCisjIGNhc2UgIzE1OiBHSVRfV09SS19UUkVFIG92ZXJyaWRlcyBjb3JlLndvcmt0cmVlIChnaXRmaWxlIGNhc2UpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzE1OiBzZXR1cCcgJworCXNldHVwX3JlcG8gMTUgbm9uLWV4aXN0ZW50IGdpdGZpbGUgdW5zZXQgJiYKKwlta2RpciAtcCAxNS9zdWIvc3ViIDE1L3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDE1IGdpdGZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzE2YTogaW1wbGljaXRseSBiYXJlIHJlcG8gKGN3ZCBpbnNpZGUgLmdpdCBkaXIpJyAnCisJc2V0dXBfcmVwbyAxNmEgdW5zZXQgIiIgdW5zZXQgJiYKKwlta2RpciAtcCAxNmEvLmdpdC93dC9zdWIgJiYKKworCXRyeV9jYXNlIDE2YS8uZ2l0IHVuc2V0IHVuc2V0IFwKKwkJLiAiKG51bGwpIiAiJGhlcmUvMTZhLy5naXQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTZhLy5naXQvd3QgdW5zZXQgdW5zZXQgXAorCQkiJGhlcmUvMTZhLy5naXQiICIobnVsbCkiICIkaGVyZS8xNmEvLmdpdC93dCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNmEvLmdpdC93dC9zdWIgdW5zZXQgdW5zZXQgXAorCQkiJGhlcmUvMTZhLy5naXQiICIobnVsbCkiICIkaGVyZS8xNmEvLmdpdC93dC9zdWIiICIobnVsbCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxNmI6IGJhcmUgLmdpdCAoY3dkIGluc2lkZSAuZ2l0IGRpciknICcKKwlzZXR1cF9yZXBvIDE2YiB1bnNldCAiIiB0cnVlICYmCisJbWtkaXIgLXAgMTZiLy5naXQvd3Qvc3ViICYmCisKKwl0cnlfY2FzZSAxNmIvLmdpdCB1bnNldCB1bnNldCBcCisJCS4gIihudWxsKSIgIiRoZXJlLzE2Yi8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDE2Yi8uZ2l0L3d0IHVuc2V0IHVuc2V0IFwKKwkJIiRoZXJlLzE2Yi8uZ2l0IiAiKG51bGwpIiAiJGhlcmUvMTZiLy5naXQvd3QiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTZiLy5naXQvd3Qvc3ViIHVuc2V0IHVuc2V0IFwKKwkJIiRoZXJlLzE2Yi8uZ2l0IiAiKG51bGwpIiAiJGhlcmUvMTZiLy5naXQvd3Qvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTZjOiBiYXJlIC5naXQgaGFzIG5vIHdvcmt0cmVlJyAnCisJdHJ5X3JlcG8gMTZjIHVuc2V0IHVuc2V0IHVuc2V0ICIiIHRydWUgXAorCQkuZ2l0ICIobnVsbCkiICIkaGVyZS8xNmMiICIobnVsbCkiIFwKKwkJIiRoZXJlLzE2Yy8uZ2l0IiAiKG51bGwpIiAiJGhlcmUvMTZjL3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzE3OiBHSVRfV09SS19UUkVFIHdpdGhvdXQgZXhwbGljaXQgR0lUX0RJUiBpcyBhY2NlcHRlZCAoYmFyZSBjYXNlKScgJworCSMgSnVzdCBsaWtlICMxNi4KKwlzZXR1cF9yZXBvIDE3YSB1bnNldCAiIiB0cnVlICYmCisJc2V0dXBfcmVwbyAxN2IgdW5zZXQgIiIgdHJ1ZSAmJgorCW1rZGlyIC1wIDE3YS8uZ2l0L3d0L3N1YiAmJgorCW1rZGlyIC1wIDE3Yi8uZ2l0L3d0L3N1YiAmJgorCisJdHJ5X2Nhc2UgMTdhLy5naXQgIiRoZXJlLzE3YSIgdW5zZXQgXAorCQkiJGhlcmUvMTdhLy5naXQiICIkaGVyZS8xN2EiICIkaGVyZS8xN2EiIC5naXQvIFwKKwkJMj5tZXNzYWdlICYmCisJdHJ5X2Nhc2UgMTdhLy5naXQvd3QgIiRoZXJlLzE3YSIgdW5zZXQgXAorCQkiJGhlcmUvMTdhLy5naXQiICIkaGVyZS8xN2EiICIkaGVyZS8xN2EiIC5naXQvd3QvICYmCisJdHJ5X2Nhc2UgMTdhLy5naXQvd3Qvc3ViICIkaGVyZS8xN2EiIHVuc2V0IFwKKwkJIiRoZXJlLzE3YS8uZ2l0IiAiJGhlcmUvMTdhIiAiJGhlcmUvMTdhIiAuZ2l0L3d0L3N1Yi8gJiYKKworCXRyeV9jYXNlIDE3Yi8uZ2l0ICIkaGVyZS8xN2IiIHVuc2V0IFwKKwkJIiRoZXJlLzE3Yi8uZ2l0IiAiJGhlcmUvMTdiIiAiJGhlcmUvMTdiIiAuZ2l0LyAmJgorCXRyeV9jYXNlIDE3Yi8uZ2l0L3d0ICIkaGVyZS8xN2IiIHVuc2V0IFwKKwkJIiRoZXJlLzE3Yi8uZ2l0IiAiJGhlcmUvMTdiIiAiJGhlcmUvMTdiIiAuZ2l0L3d0LyAmJgorCXRyeV9jYXNlIDE3Yi8uZ2l0L3d0L3N1YiAiJGhlcmUvMTdiIiB1bnNldCBcCisJCSIkaGVyZS8xN2IvLmdpdCIgIiRoZXJlLzE3YiIgIiRoZXJlLzE3YiIgLmdpdC93dC9zdWIvICYmCisKKwl0cnlfcmVwbyAxN2MgIiRoZXJlLzE3YyIgdW5zZXQgdW5zZXQgIiIgdHJ1ZSBcCisJCS5naXQgIiRoZXJlLzE3YyIgIiRoZXJlLzE3YyIgIihudWxsKSIgXAorCQkiJGhlcmUvMTdjLy5naXQiICIkaGVyZS8xN2MiICIkaGVyZS8xN2MiIHN1Yi8gMj5tZXNzYWdlICYmCisJISB0ZXN0IC1zIG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzE4OiBiYXJlIC5naXQgbmFtZWQgYnkgR0lUX0RJUiBoYXMgbm8gd29ya3RyZWUnICcKKwl0cnlfcmVwbyAxOCB1bnNldCAuZ2l0IHVuc2V0ICIiIHRydWUgXAorCQkuZ2l0ICIobnVsbCkiICIkaGVyZS8xOCIgIihudWxsKSIgXAorCQkuLi8uZ2l0ICIobnVsbCkiICIkaGVyZS8xOC9zdWIiICIobnVsbCkiICYmCisJdHJ5X3JlcG8gMThiIHVuc2V0ICIkaGVyZS8xOGIvLmdpdCIgdW5zZXQgIiIgdHJ1ZSBcCisJCSIkaGVyZS8xOGIvLmdpdCIgIihudWxsKSIgIiRoZXJlLzE4YiIgIihudWxsKSIgXAorCQkiJGhlcmUvMThiLy5naXQiICIobnVsbCkiICIkaGVyZS8xOGIvc3ViIiAiKG51bGwpIgorJworCisjIENhc2UgIzE5OiBHSVRfRElSICsgR0lUX1dPUktfVFJFRSBzdXBwcmVzc2VzIGJhcmVuZXNzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzE5OiBzZXR1cCcgJworCXNldHVwX3JlcG8gMTkgdW5zZXQgIiIgdHJ1ZSAmJgorCW1rZGlyIC1wIDE5L3N1Yi9zdWIgMTkvd3Qvc3ViCisnCitydW5fd3RfdGVzdHMgMTkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzIwYTogY29yZS53b3JrdHJlZSB3aXRob3V0IEdJVF9ESVIgYWNjZXB0ZWQgKGluc2lkZSAuZ2l0KScgJworCSMgVW5saWtlIGNhc2UgIzE2YS4KKwlzZXR1cF9yZXBvIDIwYSAiJGhlcmUvMjBhIiAiIiB1bnNldCAmJgorCW1rZGlyIC1wIDIwYS8uZ2l0L3d0L3N1YiAmJgorCXRyeV9jYXNlIDIwYS8uZ2l0IHVuc2V0IHVuc2V0IFwKKwkJIiRoZXJlLzIwYS8uZ2l0IiAiJGhlcmUvMjBhIiAiJGhlcmUvMjBhIiAuZ2l0LyAyPm1lc3NhZ2UgJiYKKwl0cnlfY2FzZSAyMGEvLmdpdC93dCB1bnNldCB1bnNldCBcCisJCSIkaGVyZS8yMGEvLmdpdCIgIiRoZXJlLzIwYSIgIiRoZXJlLzIwYSIgLmdpdC93dC8gJiYKKwl0cnlfY2FzZSAyMGEvLmdpdC93dC9zdWIgdW5zZXQgdW5zZXQgXAorCQkiJGhlcmUvMjBhLy5naXQiICIkaGVyZS8yMGEiICIkaGVyZS8yMGEiIC5naXQvd3Qvc3ViLyAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyMGIvYzogY29yZS53b3JrdHJlZSBhbmQgY29yZS5iYXJlIGNvbmZsaWN0JyAnCisJc2V0dXBfcmVwbyAyMGIgbm9uLWV4aXN0ZW50ICIiIHRydWUgJiYKKwlta2RpciAtcCAyMGIvLmdpdC93dC9zdWIgJiYKKwkoCisJCWNkIDIwYi8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+L2Rldi9udWxsCisJKSAyPm1lc3NhZ2UgJiYKKwlncmVwICJjb3JlLmJhcmUgYW5kIGNvcmUud29ya3RyZWUiIG1lc3NhZ2UKKycKKworIyBDYXNlICMyMTogY29yZS53b3JrdHJlZS9HSVRfV09SS19UUkVFIG92ZXJyaWRlcyBjb3JlLmJhcmUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyMTogc2V0dXAsIGNvcmUud29ya3RyZWUgd2FybnMgYmVmb3JlIG92ZXJyaWRpbmcgY29yZS5iYXJlJyAnCisJc2V0dXBfcmVwbyAyMSBub24tZXhpc3RlbnQgIiIgdW5zZXQgJiYKKwlta2RpciAtcCAyMS8uZ2l0L3d0L3N1YiAmJgorCSgKKwkJY2QgMjEvLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPSIkaGVyZS8yMSIgJiYKKwkJZXhwb3J0IEdJVF9XT1JLX1RSRUUgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwKKwkpIDI+bWVzc2FnZSAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisKKycKK3J1bl93dF90ZXN0cyAyMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjJhOiBjb3JlLndvcmt0cmVlID0gR0lUX0RJUiA9IC5naXQgZGlyJyAnCisJIyBsaWtlIGNhc2UgIzYuCisKKwlzZXR1cF9yZXBvIDIyYSAiJGhlcmUvMjJhLy5naXQiICIiIHVuc2V0ICYmCisJc2V0dXBfcmVwbyAyMmFiIC4gIiIgdW5zZXQgJiYKKwlta2RpciAtcCAyMmEvLmdpdC9zdWIgMjJhL3N1YiAmJgorCW1rZGlyIC1wIDIyYWIvLmdpdC9zdWIgMjJhYi9zdWIgJiYKKwl0cnlfY2FzZSAyMmEvLmdpdCB1bnNldCAuIFwKKwkJLiAiJGhlcmUvMjJhLy5naXQiICIkaGVyZS8yMmEvLmdpdCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAyMmEvLmdpdCB1bnNldCAiJGhlcmUvMjJhLy5naXQiIFwKKwkJIiRoZXJlLzIyYS8uZ2l0IiAiJGhlcmUvMjJhLy5naXQiICIkaGVyZS8yMmEvLmdpdCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAyMmEvLmdpdC9zdWIgdW5zZXQgLi4gXAorCQkiJGhlcmUvMjJhLy5naXQiICIkaGVyZS8yMmEvLmdpdCIgIiRoZXJlLzIyYS8uZ2l0IiBzdWIvICYmCisJdHJ5X2Nhc2UgMjJhLy5naXQvc3ViIHVuc2V0ICIkaGVyZS8yMmEvLmdpdCIgXAorCQkiJGhlcmUvMjJhLy5naXQiICIkaGVyZS8yMmEvLmdpdCIgIiRoZXJlLzIyYS8uZ2l0IiBzdWIvICYmCisKKwl0cnlfY2FzZSAyMmFiLy5naXQgdW5zZXQgLiBcCisJCS4gIiRoZXJlLzIyYWIvLmdpdCIgIiRoZXJlLzIyYWIvLmdpdCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAyMmFiLy5naXQgdW5zZXQgIiRoZXJlLzIyYWIvLmdpdCIgXAorCQkiJGhlcmUvMjJhYi8uZ2l0IiAiJGhlcmUvMjJhYi8uZ2l0IiAiJGhlcmUvMjJhYi8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYWIvLmdpdC9zdWIgdW5zZXQgLi4gXAorCQkiJGhlcmUvMjJhYi8uZ2l0IiAiJGhlcmUvMjJhYi8uZ2l0IiAiJGhlcmUvMjJhYi8uZ2l0IiBzdWIvICYmCisJdHJ5X2Nhc2UgMjJhYi8uZ2l0IHVuc2V0ICIkaGVyZS8yMmFiLy5naXQiIFwKKwkJIiRoZXJlLzIyYWIvLmdpdCIgIiRoZXJlLzIyYWIvLmdpdCIgIiRoZXJlLzIyYWIvLmdpdCIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzIyYjogY29yZS53b3JrdHJlZSBjaGlsZCBvZiAuZ2l0LCBHSVRfRElSPS5naXQnICcKKwlzZXR1cF9yZXBvIDIyYiAiJGhlcmUvMjJiLy5naXQvd3QiICIiIHVuc2V0ICYmCisJc2V0dXBfcmVwbyAyMmJiIHd0ICIiIHVuc2V0ICYmCisJbWtkaXIgLXAgMjJiLy5naXQvc3ViIDIyYi9zdWIgMjJiLy5naXQvd3Qvc3ViIDIyYi93dC9zdWIgJiYKKwlta2RpciAtcCAyMmJiLy5naXQvc3ViIDIyYmIvc3ViIDIyYmIvLmdpdC93dCAyMmJiL3d0ICYmCisKKwl0cnlfY2FzZSAyMmIvLmdpdCB1bnNldCAuIFwKKwkJLiAiJGhlcmUvMjJiLy5naXQvd3QiICIkaGVyZS8yMmIvLmdpdCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAyMmIvLmdpdCB1bnNldCAiJGhlcmUvMjJiLy5naXQiIFwKKwkJIiRoZXJlLzIyYi8uZ2l0IiAiJGhlcmUvMjJiLy5naXQvd3QiICIkaGVyZS8yMmIvLmdpdCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAyMmIvLmdpdC9zdWIgdW5zZXQgLi4gXAorCQkuLiAiJGhlcmUvMjJiLy5naXQvd3QiICIkaGVyZS8yMmIvLmdpdC9zdWIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMjJiLy5naXQvc3ViIHVuc2V0ICIkaGVyZS8yMmIvLmdpdCIgXAorCQkiJGhlcmUvMjJiLy5naXQiICIkaGVyZS8yMmIvLmdpdC93dCIgIiRoZXJlLzIyYi8uZ2l0L3N1YiIgIihudWxsKSIgJiYKKworCXRyeV9jYXNlIDIyYmIvLmdpdCB1bnNldCAuIFwKKwkJLiAiJGhlcmUvMjJiYi8uZ2l0L3d0IiAiJGhlcmUvMjJiYi8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYmIvLmdpdCB1bnNldCAiJGhlcmUvMjJiYi8uZ2l0IiBcCisJCSIkaGVyZS8yMmJiLy5naXQiICIkaGVyZS8yMmJiLy5naXQvd3QiICIkaGVyZS8yMmJiLy5naXQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMjJiYi8uZ2l0L3N1YiB1bnNldCAuLiBcCisJCS4uICIkaGVyZS8yMmJiLy5naXQvd3QiICIkaGVyZS8yMmJiLy5naXQvc3ViIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYmIvLmdpdC9zdWIgdW5zZXQgIiRoZXJlLzIyYmIvLmdpdCIgXAorCQkiJGhlcmUvMjJiYi8uZ2l0IiAiJGhlcmUvMjJiYi8uZ2l0L3d0IiAiJGhlcmUvMjJiYi8uZ2l0L3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzIyYzogY29yZS53b3JrdHJlZSA9IC5naXQvLi4sIEdJVF9ESVI9LmdpdCcgJworCXNldHVwX3JlcG8gMjJjICIkaGVyZS8yMmMiICIiIHVuc2V0ICYmCisJc2V0dXBfcmVwbyAyMmNiIC4uICIiIHVuc2V0ICYmCisJbWtkaXIgLXAgMjJjLy5naXQvc3ViIDIyYy9zdWIgJiYKKwlta2RpciAtcCAyMmNiLy5naXQvc3ViIDIyY2Ivc3ViICYmCisKKwl0cnlfY2FzZSAyMmMvLmdpdCB1bnNldCAuIFwKKwkJIiRoZXJlLzIyYy8uZ2l0IiAiJGhlcmUvMjJjIiAiJGhlcmUvMjJjIiAuZ2l0LyAmJgorCXRyeV9jYXNlIDIyYy8uZ2l0IHVuc2V0ICIkaGVyZS8yMmMvLmdpdCIgXAorCQkiJGhlcmUvMjJjLy5naXQiICIkaGVyZS8yMmMiICIkaGVyZS8yMmMiIC5naXQvICYmCisJdHJ5X2Nhc2UgMjJjLy5naXQvc3ViIHVuc2V0IC4uIFwKKwkJIiRoZXJlLzIyYy8uZ2l0IiAiJGhlcmUvMjJjIiAiJGhlcmUvMjJjIiAuZ2l0L3N1Yi8gJiYKKwl0cnlfY2FzZSAyMmMvLmdpdC9zdWIgdW5zZXQgIiRoZXJlLzIyYy8uZ2l0IiBcCisJCSIkaGVyZS8yMmMvLmdpdCIgIiRoZXJlLzIyYyIgIiRoZXJlLzIyYyIgLmdpdC9zdWIvICYmCisKKwl0cnlfY2FzZSAyMmNiLy5naXQgdW5zZXQgLiBcCisJCSIkaGVyZS8yMmNiLy5naXQiICIkaGVyZS8yMmNiIiAiJGhlcmUvMjJjYiIgLmdpdC8gJiYKKwl0cnlfY2FzZSAyMmNiLy5naXQgdW5zZXQgIiRoZXJlLzIyY2IvLmdpdCIgXAorCQkiJGhlcmUvMjJjYi8uZ2l0IiAiJGhlcmUvMjJjYiIgIiRoZXJlLzIyY2IiIC5naXQvICYmCisJdHJ5X2Nhc2UgMjJjYi8uZ2l0L3N1YiB1bnNldCAuLiBcCisJCSIkaGVyZS8yMmNiLy5naXQiICIkaGVyZS8yMmNiIiAiJGhlcmUvMjJjYiIgLmdpdC9zdWIvICYmCisJdHJ5X2Nhc2UgMjJjYi8uZ2l0L3N1YiB1bnNldCAiJGhlcmUvMjJjYi8uZ2l0IiBcCisJCSIkaGVyZS8yMmNiLy5naXQiICIkaGVyZS8yMmNiIiAiJGhlcmUvMjJjYiIgLmdpdC9zdWIvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyMi4yOiBjb3JlLndvcmt0cmVlIGFuZCBjb3JlLmJhcmUgY29uZmxpY3QnICcKKwlzZXR1cF9yZXBvIDIyICIkaGVyZS8yMiIgIiIgdHJ1ZSAmJgorCSgKKwkJY2QgMjIvLmdpdCAmJgorCQlHSVRfRElSPS4gJiYKKwkJZXhwb3J0IEdJVF9ESVIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+cmVzdWx0CisJKSAmJgorCSgKKwkJY2QgMjIgJiYKKwkJR0lUX0RJUj0uZ2l0ICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPnJlc3VsdAorCSkgJiYKKwlncmVwICJjb3JlLmJhcmUgYW5kIGNvcmUud29ya3RyZWUiIDIyLy5naXQvcmVzdWx0ICYmCisJZ3JlcCAiY29yZS5iYXJlIGFuZCBjb3JlLndvcmt0cmVlIiAyMi9yZXN1bHQKKycKKworIyBDYXNlICMyMzogR0lUX0RJUiArIEdJVF9XT1JLX1RSRUUoK2NvcmUud29ya3RyZWUpIHN1cHByZXNzZXMgYmFyZW5lc3MuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjM6IHNldHVwJyAnCisJc2V0dXBfcmVwbyAyMyBub24tZXhpc3RlbnQgIiIgdHJ1ZSAmJgorCW1rZGlyIC1wIDIzL3N1Yi9zdWIgMjMvd3Qvc3ViCisnCitydW5fd3RfdGVzdHMgMjMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzI0OiBiYXJlIHJlcG8gaGFzIG5vIHdvcmt0cmVlIChnaXRmaWxlIGNhc2UpJyAnCisJdHJ5X3JlcG8gMjQgdW5zZXQgdW5zZXQgdW5zZXQgZ2l0ZmlsZSB0cnVlIFwKKwkJIiRoZXJlLzI0LmdpdCIgIihudWxsKSIgIiRoZXJlLzI0IiAiKG51bGwpIiBcCisJCSIkaGVyZS8yNC5naXQiICIobnVsbCkiICIkaGVyZS8yNC9zdWIiICIobnVsbCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyNTogR0lUX1dPUktfVFJFRSBhY2NlcHRlZCBpZiBHSVRfRElSIHVuc2V0IChiYXJlIGdpdGZpbGUgY2FzZSknICcKKwl0cnlfcmVwbyAyNSAiJGhlcmUvMjUiIHVuc2V0IHVuc2V0IGdpdGZpbGUgdHJ1ZSBcCisJCSIkaGVyZS8yNS5naXQiICIkaGVyZS8yNSIgIiRoZXJlLzI1IiAiKG51bGwpIiAgXAorCQkiJGhlcmUvMjUuZ2l0IiAiJGhlcmUvMjUiICIkaGVyZS8yNSIgInN1Yi8iIDI+bWVzc2FnZSAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyNjogYmFyZSByZXBvIGhhcyBubyB3b3JrdHJlZSAoR0lUX0RJUiAtPiBnaXRmaWxlIGNhc2UpJyAnCisJdHJ5X3JlcG8gMjYgdW5zZXQgIiRoZXJlLzI2Ly5naXQiIHVuc2V0IGdpdGZpbGUgdHJ1ZSBcCisJCSIkaGVyZS8yNi5naXQiICIobnVsbCkiICIkaGVyZS8yNiIgIihudWxsKSIgXAorCQkiJGhlcmUvMjYuZ2l0IiAiKG51bGwpIiAiJGhlcmUvMjYvc3ViIiAiKG51bGwpIiAmJgorCXRyeV9yZXBvIDI2YiB1bnNldCAuZ2l0IHVuc2V0IGdpdGZpbGUgdHJ1ZSBcCisJCSIkaGVyZS8yNmIuZ2l0IiAiKG51bGwpIiAiJGhlcmUvMjZiIiAiKG51bGwpIiBcCisJCSIkaGVyZS8yNmIuZ2l0IiAiKG51bGwpIiAiJGhlcmUvMjZiL3N1YiIgIihudWxsKSIKKycKKworIyBDYXNlICMyNzogR0lUX0RJUiArIEdJVF9XT1JLX1RSRUUgc3VwcHJlc3NlcyBiYXJlbmVzcyAod2l0aCBnaXRmaWxlKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyNzogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDI3IHVuc2V0IGdpdGZpbGUgdHJ1ZSAmJgorCW1rZGlyIC1wIDI3L3N1Yi9zdWIgMjcvd3Qvc3ViCisnCitydW5fd3RfdGVzdHMgMjcgZ2l0ZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjg6IGNvcmUud29ya3RyZWUgYW5kIGNvcmUuYmFyZSBjb25mbGljdCAoZ2l0ZmlsZSBjYXNlKScgJworCXNldHVwX3JlcG8gMjggIiRoZXJlLzI4IiBnaXRmaWxlIHRydWUgJiYKKwkoCisJCWNkIDI4ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRAorCSkgMj5tZXNzYWdlICYmCisJISBncmVwICJed2FybmluZzoiIG1lc3NhZ2UgJiYKKwlncmVwICJjb3JlLmJhcmUgYW5kIGNvcmUud29ya3RyZWUiIG1lc3NhZ2UKKycKKworIyBDYXNlICMyOTogR0lUX1dPUktfVFJFRSgrY29yZS53b3JrdHJlZSkgb3ZlcnJpZGVzIGNvcmUuYmFyZSAoZ2l0ZmlsZSBjYXNlKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyOTogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDI5IG5vbi1leGlzdGVudCBnaXRmaWxlIHRydWUgJiYKKwlta2RpciAtcCAyOS9zdWIvc3ViIDI5L3d0L3N1YiAmJgorCSgKKwkJY2QgMjkgJiYKKwkJR0lUX1dPUktfVFJFRT0iJGhlcmUvMjkiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+L2Rldi9udWxsCisJKSAyPm1lc3NhZ2UgJiYKKwkhIHRlc3QgLXMgbWVzc2FnZQorJworcnVuX3d0X3Rlc3RzIDI5IGdpdGZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzMwOiBjb3JlLndvcmt0cmVlIGFuZCBjb3JlLmJhcmUgY29uZmxpY3QgKGdpdGZpbGUgdmVyc2lvbiknICcKKwkjIEp1c3QgbGlrZSBjYXNlICMyMi4KKwlzZXR1cF9yZXBvIDMwICIkaGVyZS8zMCIgZ2l0ZmlsZSB0cnVlICYmCisJKAorCQljZCAzMCAmJgorCQlHSVRfRElSPS5naXQgJiYKKwkJZXhwb3J0IEdJVF9ESVIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+cmVzdWx0CisJKSAmJgorCWdyZXAgImNvcmUuYmFyZSBhbmQgY29yZS53b3JrdHJlZSIgMzAvcmVzdWx0CisnCisKKyMgQ2FzZSAjMzE6IEdJVF9ESVIgKyBHSVRfV09SS19UUkVFKCtjb3JlLndvcmt0cmVlKSBzdXBwcmVzc2VzCisjIGJhcmVuZXNzIChnaXRmaWxlIHZlcnNpb24pLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzMxOiBzZXR1cCcgJworCXNldHVwX3JlcG8gMzEgbm9uLWV4aXN0ZW50IGdpdGZpbGUgdHJ1ZSAmJgorCW1rZGlyIC1wIDMxL3N1Yi9zdWIgMzEvd3Qvc3ViCisnCitydW5fd3RfdGVzdHMgMzEgZ2l0ZmlsZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MTEtcmV2LXBhcnNlLWNhcmV0LnNoIGIvdC90MTUxMS1yZXYtcGFyc2UtY2FyZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWFlZmM3NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MTEtcmV2LXBhcnNlLWNhcmV0LnNoCkBAIC0wLDAgKzEsNzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0cyBmb3IgcmVmXntzdHVmZn0nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYmxvYiA+YS1ibG9iICYmCisJZ2l0IHRhZyAtYSAtbSBibG9iIGJsb2ItdGFnIGBnaXQgaGFzaC1vYmplY3QgLXcgYS1ibG9iYCAmJgorCW1rZGlyIGEtdHJlZSAmJgorCWVjaG8gbW9yZWJsb2JzID5hLXRyZWUvYW5vdGhlci1ibG9iICYmCisJZ2l0IGFkZCAuICYmCisJVFJFRV9TSEExPWBnaXQgd3JpdGUtdHJlZWAgJiYKKwlnaXQgdGFnIC1hIC1tIHRyZWUgdHJlZS10YWcgIiRUUkVFX1NIQTEiICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisJZ2l0IHRhZyAtYSAtbSBjb21taXQgY29tbWl0LXRhZyAmJgorCWdpdCBicmFuY2ggcmVmICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gbW9kaWZpZWQgPj5hLWJsb2IgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGNvbW1pdCAtbSBNb2RpZmllZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZee25vbi1leGlzdGVudH0nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZl57bm9uLWV4aXN0ZW50fQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZee30nICcKKwlnaXQgcmV2LXBhcnNlIHJlZiA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZl57fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBjb21taXQtdGFnXnt9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXntjb21taXR9JyAnCisJZ2l0IHJldi1wYXJzZSByZWYgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSByZWZee2NvbW1pdH0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgY29tbWl0LXRhZ157Y29tbWl0fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSB0cmVlLXRhZ157Y29tbWl0fSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgYmxvYi10YWdee2NvbW1pdH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXnt0cmVlfScgJworCWVjaG8gJFRSRUVfU0hBMSA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZl57dHJlZX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgY29tbWl0LXRhZ157dHJlZX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgdHJlZS10YWdee3RyZWV9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGJsb2ItdGFnXnt0cmVlfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZeey8ufScgJworCWdpdCByZXYtcGFyc2UgbWFzdGVyID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyXnsvLn0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZeey9ub24tZXhpc3RlbnR9JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBtYXN0ZXJeey9ub24tZXhpc3RlbnR9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZl57L0luaXRpYWx9JyAnCisJZ2l0IHJldi1wYXJzZSByZWYgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXJeey9Jbml0aWFsfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2ggYi90L3QxNTEyLXJldi1wYXJzZS1kaXNhbWJpZ3VhdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjNkNzk3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2gKQEAgLTAsMCArMSwyNjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdvYmplY3QgbmFtZSBkaXNhbWJpZ3VhdGlvbgorCitDcmVhdGUgYmxvYnMsIHRyZWVzLCBjb21taXRzIGFuZCBhIHRhZyB0aGF0IGFsbCBzaGFyZSB0aGUgc2FtZQorcHJlZml4LCBhbmQgbWFrZSBzdXJlICJnaXQgcmV2LXBhcnNlIiBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YKK3R5cGUgaW5mb3JtYXRpb24gdG8gZGlzYW1iaWd1YXRlIHNob3J0IG9iamVjdCBuYW1lcyB0aGF0IGFyZQorbm90IG5lY2Vzc2FyaWx5IHVuaXF1ZS4KKworVGhlIGZpbmFsIGhpc3RvcnkgdXNlZCBpbiB0aGUgdGVzdCBoYXMgZml2ZSBjb21taXRzLCB3aXRoIHRoZSBib3R0b20KK29uZSB0YWdnZWQgYXMgdjEuMC4wLiAgVGhleSBhbGwgaGF2ZSBvbmUgcmVndWxhciBmaWxlIGVhY2guCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAuLS0tLS0tLWIzd2V0dHZpLS0tLSBhZDJ1ZWUgICAgIHwKKyAgfCAgICAgICAgICAvICAgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICB8CisgIHwgIGEyb25zeGJ2ai0tLWN6eThmNzN0LS1pb2lsZXk1byAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jsb2IgYW5kIHRyZWUnICcKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkKKwkJZG8KKwkJCWVjaG8gJGkKKwkJZG9uZQorCQllY2hvCisJCWVjaG8gYjFyd3p5YzMKKwkpID5hMGJsZ3FzamMgJiYKKworCSMgY3JlYXRlIG9uZSBibG9iIDAwMDAwMDAwMDBiMzYKKwlnaXQgYWRkIGEwYmxncXNqYyAmJgorCisJIyBjcmVhdGUgb25lIHRyZWUgMDAwMDAwMDAwMGNkYworCWdpdCB3cml0ZS10cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhcm4gYW1iaWd1aXR5IHdoZW4gbm8gY2FuZGlkYXRlIG1hdGNoZXMgdHlwZSBoaW50JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAwMDAwMDAwMDBee2NvbW1pdH0gMj5hY3R1YWwgJiYKKwlncmVwICJzaG9ydCBTSEExIDAwMDAwMDAwMCBpcyBhbWJpZ3VvdXMiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGUgdHJlZS1pc2gnICcKKwkjIGZlZWQgdHJlZS1pc2ggaW4gYW4gdW5hbWJpZ3VvdXMgd2F5CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAwMDAwMDAwMDAwY2RjOmEwYmxncXNqYyAmJgorCisJIyBhbWJpZ3VvdXMgYXQgdGhlIG9iamVjdCBuYW1lIGxldmVsLCBidXQgdGhlcmUgaXMgb25seSBvbmUKKwkjIHN1Y2ggdHJlZS1pc2ggKHRoZSBvdGhlciBpcyBhIGJsb2IpCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAwMDAwMDAwMDA6YTBibGdxc2pjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSBibG9iJyAnCisJc2VkIC1lICJzL3wkLy8iID5wYXRjaCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvZnJvdHogYi9mcm90egorCWluZGV4IDAwMDAwMDAwMC4uZmZmZmZmIDEwMDY0NAorCS0tLSBhL2Zyb3R6CisJKysrIGIvZnJvdHoKKwlAQCAtMTAsMyArMTAsNCBAQAorCSA5CisJIHwKKwkgYjFyd3p5YzMKKwkraXJ3cnkKKwlFT0YKKwkoCisJCUdJVF9JTkRFWF9GSUxFPWZyb3R6ICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQlnaXQgYXBwbHkgLS1idWlsZC1mYWtlLWFuY2VzdG9yIGZyb3R6IHBhdGNoICYmCisJCWdpdCBjYXQtZmlsZSBibG9iIDpmcm90eiA+YWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGEwYmxncXNqYyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIHRyZWUnICcKKwljb21taXQ9JChlY2hvICJkN3htIiB8IGdpdCBjb21taXQtdHJlZSAwMDAwMDAwMDApICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgJGNvbW1pdF57dHJlZX0pID0gJChnaXQgcmV2LXBhcnNlIDAwMDAwMDAwMDBjZGMpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpcnN0IGNvbW1pdCcgJworCSMgY3JlYXRlIG9uZSBjb21taXQgMDAwMDAwMDAwMGU0ZgorCWdpdCBjb21taXQgLW0gYTJvbnN4YnZqCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSBjb21taXQtaXNoJyAnCisJIyBmZWVkIGNvbW1pdC1pc2ggaW4gYW4gdW5hbWJpZ3VvdXMgd2F5CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAwMDAwMDAwMDAwZTRmXntjb21taXR9ICYmCisKKwkjIGFtYmlndW91cyBhdCB0aGUgb2JqZWN0IG5hbWUgbGV2ZWwsIGJ1dCB0aGVyZSBpcyBvbmx5IG9uZQorCSMgc3VjaCBjb21taXQgKHRoZSBvdGhlcnMgYXJlIHRyZWUgYW5kIGJsb2IpCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAwMDAwMDAwMDBee2NvbW1pdH0gJiYKKworCSMgbGlrZXdpc2UKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMF4wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSBjb21taXQnICcKKwljb21taXQ9JChlY2hvICJob2F4aiIgfCBnaXQgY29tbWl0LXRyZWUgMDAwMDAwMDAwMGNkYyAtcCAwMDAwMDAwMDApICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgJGNvbW1pdF4pID0gJChnaXQgcmV2LXBhcnNlIDAwMDAwMDAwMDBlNGYpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBuYW1lMS4ubmFtZTIgdGFrZXMgb25seSBjb21taXQtaXNoZXMgb24gYm90aCBlbmRzJyAnCisJZ2l0IGxvZyAwMDAwMDAwMDAuLjAwMDAwMDAwMCAmJgorCWdpdCBsb2cgLi4wMDAwMDAwMDAgJiYKKwlnaXQgbG9nIDAwMDAwMDAwMC4uICYmCisJZ2l0IGxvZyAwMDAwMDAwMDAuLi4wMDAwMDAwMDAgJiYKKwlnaXQgbG9nIC4uLjAwMDAwMDAwMCAmJgorCWdpdCBsb2cgMDAwMDAwMDAwLi4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSBuYW1lMS4ubmFtZTIgdGFrZXMgb25seSBjb21taXQtaXNoZXMgb24gYm90aCBlbmRzJyAnCisJZ2l0IHJldi1wYXJzZSAwMDAwMDAwMDAuLjAwMDAwMDAwMCAmJgorCWdpdCByZXYtcGFyc2UgLi4wMDAwMDAwMDAgJiYKKwlnaXQgcmV2LXBhcnNlIDAwMDAwMDAwMC4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgdGFrZXMgb25seSBjb21taXQtaXNoJyAnCisJZ2l0IGxvZyAwMDAwMDAwMDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlc2V0IHRha2VzIG9ubHkgY29tbWl0LWlzaCcgJworCWdpdCByZXNldCAwMDAwMDAwMDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlyc3QgdGFnJyAnCisJIyBjcmVhdGUgb25lIHRhZyAwMDAwMDAwMDAwZjhmCisJZ2l0IHRhZyAtYSAtbSBqN2NwODN1bSB2MS4wLjAKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAndHdvIHNlbWktYW1iaWd1b3VzIGNvbW1pdC1pc2gnICcKKwkjIE9uY2UgdGhlIHBhcnNlciBiZWNvbWVzIHVsdHJhLXNtYXJ0LCBpdCBjb3VsZCBub3RpY2UgdGhhdAorCSMgMTEwMjgyIGJlZm9yZSBee2NvbW1pdH0gbmFtZSBtYW55IGRpZmZlcmVudCBvYmplY3RzLCBidXQKKwkjIHRoYXQgb25seSB0d28gKEhFQUQgYW5kIHYxLjAuMCB0YWcpIGNhbiBiZSBwZWVsZWQgdG8gY29tbWl0LAorCSMgYW5kIHRoYXQgcGVlbGluZyB0aGVtIGRvd24gdG8gY29tbWl0IHlpZWxkIHRoZSBzYW1lIGNvbW1pdAorCSMgd2l0aG91dCBhbWJpZ3VpdHkuCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAxMTAyODJee2NvbW1pdH0gJiYKKworCSMgbGlrZXdpc2UKKwlnaXQgbG9nIDAwMDAwMDAwMC4uMDAwMDAwMDAwICYmCisJZ2l0IGxvZyAuLjAwMDAwMDAwMCAmJgorCWdpdCBsb2cgMDAwMDAwMDAwLi4gJiYKKwlnaXQgbG9nIDAwMDAwMDAwMC4uLjAwMDAwMDAwMCAmJgorCWdpdCBsb2cgLi4uMDAwMDAwMDAwICYmCisJZ2l0IGxvZyAwMDAwMDAwMDAuLi4KKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAndGhyZWUgc2VtaS1hbWJpZ3VvdXMgdHJlZS1pc2gnICcKKwkjIExpa2V3aXNlIGZvciB0cmVlLWlzaC4gIEhFQUQsIHYxLjAuMCBhbmQgSEVBRF57dHJlZX0gc2hhcmUKKwkjIHRoZSBwcmVmaXggYnV0IHBlZWxpbmcgdGhlbSB0byB0cmVlIHlpZWxkcyB0aGUgc2FtZSB0aGluZworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgMDAwMDAwMDAwXnt0cmVlfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJzZSBkZXNjcmliZSBuYW1lJyAnCisJIyBmZWVkIGFuIHVuYW1iaWd1b3VzIGRlc2NyaWJlIG5hbWUKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHYxLjAuMC0wLWcwMDAwMDAwMDAwZTRmICYmCisKKwkjIGFtYmlndW91cyBhdCB0aGUgb2JqZWN0IG5hbWUgbGV2ZWwsIGJ1dCB0aGVyZSBpcyBvbmx5IG9uZQorCSMgc3VjaCBjb21taXQgKG90aGVycyBhcmUgYmxvYiwgdHJlZSBhbmQgdGFnKQorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdjEuMC4wLTAtZzAwMDAwMDAwMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3JlIGhpc3RvcnknICcKKwkjIGNvbW1pdCAwMDAwMDAwMDAwMDQzCisJZ2l0IG12IGEwYmxncXNqYyBkMTJjcjNoOHQgJiYKKwllY2hvIGg2MnhzamV1ID4+ZDEyY3IzaDh0ICYmCisJZ2l0IGFkZCBkMTJjcjNoOHQgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gY3p5OGY3M3QgJiYKKworCSMgY29tbWl0IDAwMDAwMDAwMDA4ZWMKKwlnaXQgbXYgZDEyY3IzaDh0IGowMDBqbXB6biAmJgorCWVjaG8gajA4YmVrZnZ0ID4+ajAwMGptcHpuICYmCisJZ2l0IGFkZCBqMDAwam1wem4gJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW9pbGV5NW8gJiYKKworCSMgY29tbWl0IDAwMDAwMDAwMDViMAorCWdpdCBjaGVja291dCB2MS4wLjBeMCAmJgorCWdpdCBtdiBhMGJsZ3FzamMgZjU1MThud3UgJiYKKworCWZvciBpIGluIGg2MnhzamV1IGowOGJla2Z2dCBrZzd4ZmxobQorCWRvCisJCWVjaG8gJGkKKwlkb25lID4+ZjU1MThud3UgJiYKKwlnaXQgYWRkIGY1NTE4bnd1ICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGIzd2V0dHZpICYmCisJc2lkZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCSMgY29tbWl0IDAwMDAwMDAwMDA2NgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCSMgSWYgeW91IHVzZSByZWN1cnNpdmUsIG1lcmdlIHdpbGwgZmFpbCBhbmQgeW91IHdpbGwgbmVlZCB0bworCSMgY2xlYW4gdXAgYTBibGdxc2pjIGFzIHdlbGwuICBJZiB5b3UgdXNlIHJlc29sdmUsIG1lcmdlIHdpbGwKKwkjIHN1Y2NlZWQuCisJdGVzdF9taWdodF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyByZWN1cnNpdmUgJHNpZGUgJiYKKwlnaXQgcm0gLWYgZjU1MThud3UgajAwMGptcHpuICYmCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJtIC1mIGEwYmxncXNqYyAmJgorCSgKKwkJZ2l0IGNhdC1maWxlIGJsb2IgJHNpZGU6ZjU1MThud3UKKwkJZWNobyBqM2wwaTlzNgorCSkgPmFiMmdzODc5ICYmCisJZ2l0IGFkZCBhYjJnczg3OSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBhZDJ1ZWUKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdwYXJzZSBkZXNjcmliZSBuYW1lIHRha2luZyBhZHZhbnRhZ2Ugb2YgZ2VuZXJhdGlvbicgJworCSMgYW1iaWd1b3VzIGF0IHRoZSBvYmplY3QgbmFtZSBsZXZlbCwgYnV0IHRoZXJlIGlzIG9ubHkgb25lCisJIyBzdWNoIGNvbW1pdCBhdCBnZW5lcmF0aW9uIDAKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHYxLjAuMC0wLWcwMDAwMDAwMDAgJiYKKworCSMgbGlrZXdpc2UgZm9yIGdlbmVyYXRpb24gMiBhbmQgNAorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdjEuMC4wLTItZzAwMDAwMDAwMCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdjEuMC4wLTQtZzAwMDAwMDAwMAorJworCisjIE5vdGU6IGJlY2F1c2UgcmV2LXBhcnNlIGRvZXMgbm90IGV2ZW4gdHJ5IHRvIGRpc2FtYmlndWF0ZSBiYXNlZCBvbgorIyB0aGUgZ2VuZXJhdGlvbiBudW1iZXIsIHRoaXMgdGVzdCBjdXJyZW50bHkgc3VjY2VlZHMgZm9yIGEgd3JvbmcKKyMgcmVhc29uLiAgV2hlbiBpdCBsZWFybnMgdG8gdXNlIHRoZSBnZW5lcmF0aW9uIG51bWJlciwgdGhlIHByZXZpb3VzCisjIHRlc3Qgc2hvdWxkIHN1Y2NlZWQsIGFuZCBhbHNvIHRoaXMgdGVzdCBzaG91bGQgZmFpbCBiZWNhdXNlIHRoZQorIyBkZXNjcmliZSBuYW1lIHVzZWQgaW4gdGhlIHRlc3Qgd2l0aCBnZW5lcmF0aW9uIG51bWJlciBjYW4gbmFtZSB0d28KKyMgY29tbWl0cy4gIE1ha2Ugc3VyZSB0aGF0IHN1Y2ggYSBmdXR1cmUgZW5oYW5jZW1lbnQgZG9lcyBub3QgcmFuZG9tbHkKKyMgcGljayBvbmUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJzZSBkZXNjcmliZSBuYW1lIG5vdCBpZ25vcmluZyBhbWJpZ3VpdHknICcKKwkjIGFtYmlndW91cyBhdCB0aGUgb2JqZWN0IG5hbWUgbGV2ZWwsIGFuZCB0aGVyZSBhcmUgdHdvIHN1Y2gKKwkjIGNvbW1pdHMgYXQgZ2VuZXJhdGlvbiAxCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB2MS4wLjAtMS1nMDAwMDAwMDAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91cyBjb21taXQtaXNoJyAnCisJIyBOb3cgdGhlcmUgYXJlIG1hbnkgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggdGhlCisJIyBjb21tb24gcHJlZml4LCBub25lIG9mIHRoZXNlIHNob3VsZCBwaWNrIG9uZSBhdAorCSMgcmFuZG9tLiAgVGhleSBhbGwgc2hvdWxkIHJlc3VsdCBpbiBhbWJpZ3VpdHkgZXJyb3JzLgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgMTEwMjgyXntjb21taXR9ICYmCisKKwkjIGxpa2V3aXNlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAwMDAwMDAwMDAuLjAwMDAwMDAwMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLi4wMDAwMDAwMDAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDAwMDAwMDAwMC4uICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAwMDAwMDAwMDAuLi4wMDAwMDAwMDAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC4uLjAwMDAwMDAwMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgMDAwMDAwMDAwLi4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWRpc2FtYmlndWF0ZScgJworCSMgVGhlIHRlc3QgY3JlYXRlcyAxNiBvYmplY3RzIHRoYXQgc2hhcmUgdGhlIHByZWZpeCBhbmQgdHdvCisJIyBjb21taXRzIGNyZWF0ZWQgYnkgY29tbWl0LXRyZWUgaW4gZWFybGllciB0ZXN0cyBzaGFyZSBhCisJIyBkaWZmZXJlbnQgcHJlZml4LgorCWdpdCByZXYtcGFyc2UgLS1kaXNhbWJpZ3VhdGU9MDAwMDAwMDAwID5hY3R1YWwgJiYKKwl0ZXN0ICQod2MgLWwgPGFjdHVhbCkgPSAxNiAmJgorCXRlc3QgIiQoc2VkIC1lICJzL15cKC4uLi4uLi4uLlwpLiovXDEvIiBhY3R1YWwgfCBzb3J0IC11KSIgPSAwMDAwMDAwMDAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDAwLWNoZWNrb3V0LWNhY2hlLWNsYXNoLnNoIGIvdC90MjAwMC1jaGVja291dC1jYWNoZS1jbGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZTNlZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwMC1jaGVja291dC1jYWNoZS1jbGFzaC5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dC1pbmRleCB0ZXN0LgorCitUaGlzIHRlc3QgcmVnaXN0ZXJzIHRoZSBmb2xsb3dpbmcgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgaW4gdGhlCitjYWNoZToKKworICAgIHBhdGgwICAgICAgIC0gYSBmaWxlCisgICAgcGF0aDEvZmlsZTEgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKworQW5kIHRoZW4gdHJpZXMgdG8gY2hlY2tvdXQgaW4gYSB3b3JrIHRyZWUgdGhhdCBoYXMgdGhlIGZvbGxvd2luZzoKKworICAgIHBhdGgwL2ZpbGUwIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDEgICAgICAgLSBhIGZpbGUKKworVGhlIGdpdCBjaGVja291dC1pbmRleCBjb21tYW5kIHNob3VsZCBmYWlsIHdoZW4gYXR0ZW1wdGluZyB0byBjaGVja291dAorcGF0aDAsIGZpbmRpbmcgaXQgaXMgb2NjdXBpZWQgYnkgYSBkaXJlY3RvcnksIGFuZCBwYXRoMS9maWxlMSwgZmluZGluZworcGF0aDEgaXMgb2NjdXBpZWQgYnkgYSBub24tZGlyZWN0b3J5LiAgV2l0aCAiLWYiIGZsYWcsIGl0IHNob3VsZCByZW1vdmUKK3RoZSBjb25mbGljdGluZyBwYXRocyBhbmQgc3VjY2VlZC4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitkYXRlID5wYXRoMAorbWtkaXIgcGF0aDEKK2RhdGUgPnBhdGgxL2ZpbGUxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHZhcmlvdXMgcGF0aHMuJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAgcGF0aDEvZmlsZTEnCisKK3JtIC1mciBwYXRoMCBwYXRoMQorbWtkaXIgcGF0aDAKK2RhdGUgPnBhdGgwL2ZpbGUwCitkYXRlID5wYXRoMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGNoZWNrb3V0LWluZGV4IHdpdGhvdXQgLWYgc2hvdWxkIGZhaWwgb24gY29uZmxpY3Rpbmcgd29yayB0cmVlLicgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQtaW5kZXggLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgY2hlY2tvdXQtaW5kZXggd2l0aCAtZiBzaG91bGQgc3VjY2VlZC4nIFwKKyAgICAnZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGNoZWNrb3V0LWluZGV4IGNvbmZsaWN0aW5nIHBhdGhzLicgXAorICAgICd0ZXN0IC1mIHBhdGgwICYmIHRlc3QgLWQgcGF0aDEgJiYgdGVzdCAtZiBwYXRoMS9maWxlMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY2hlY2tvdXQtaW5kZXggLWYgdHdpY2Ugd2l0aCAtLXByZWZpeCcgJworCW1rZGlyIC1wIHRhci9nZXQgJiYKKwlsbiAtcyB0YXIvZ2V0IHRoZXJlICYmCisJZWNobyBmaXJzdCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtYSAtZiAtLXByZWZpeD10aGVyZS8gJiYKKwllY2hvIHNlY29uZCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtYSAtZiAtLXByZWZpeD10aGVyZS8KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDAxLWNoZWNrb3V0LWNhY2hlLWNsYXNoLnNoIGIvdC90MjAwMS1jaGVja291dC1jYWNoZS1jbGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OGFhNzNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwMS1jaGVja291dC1jYWNoZS1jbGFzaC5zaApAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dC1pbmRleCB0ZXN0LgorCitUaGlzIHRlc3QgcmVnaXN0ZXJzIHRoZSBmb2xsb3dpbmcgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgaW4gdGhlIGNhY2hlOgorCisgICAgcGF0aDAvZmlsZTAJLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMS9maWxlMSAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorCithbmQgYXR0ZW1wdHMgdG8gY2hlY2sgaXQgb3V0IHdoZW4gdGhlIHdvcmsgdHJlZSBoYXM6CisKKyAgICBwYXRoMC9maWxlMCAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgxICAgICAgIC0gYSBzeW1saW5rIHBvaW50aW5nIGF0ICJwYXRoMCIKKworQ2hlY2tvdXQgY2FjaGUgc2hvdWxkIGZhaWwgdG8gZXh0cmFjdCBwYXRoMS9maWxlMSBiZWNhdXNlIHRoZSBsZWFkaW5nCitwYXRoIHBhdGgxIGlzIG9jY3VwaWVkIGJ5IGEgbm9uLWRpcmVjdG9yeS4gIFdpdGggIi1mIiBpdCBzaG91bGQgcmVtb3ZlCit0aGUgc3ltbGluayBwYXRoMSBhbmQgY3JlYXRlIGRpcmVjdG9yeSBwYXRoMSBhbmQgZmlsZSBwYXRoMS9maWxlMS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitzaG93X2ZpbGVzKCkgeworCSMgc2hvdyBmaWxlc3lzdGVtIGZpbGVzLCBqdXN0IFstZGxdIGZvciB0eXBlIGFuZCBuYW1lCisJZmluZCBwYXRoPyAtbHMgfAorCXNlZCAtZSAncy9eWzAtOV0qICogWzAtOV0qICogXChbLWJjZGxdXClbXiBdKiAqWzAtOV0qICpbXiBdKiAqW14gXSogKlswLTldKiBbQS1aXVthLXpdW2Etel0gWzAtOV1bMC05XSBbXiBdKiAvZnM6IFwxIC8nCisJIyB3aGF0J3MgaW4gdGhlIGNhY2hlLCBqdXN0IG1vZGUgYW5kIG5hbWUKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8CisJc2VkIC1lICdzL15cKFswLTldKlwpIFswLTlhLWZdKiBbMC0zXSAvY2E6IFwxIC8nCisJIyB3aGF0J3MgaW4gdGhlIHRyZWUsIGp1c3QgbW9kZSBhbmQgbmFtZS4KKwlnaXQgbHMtdHJlZSAtciAiJDEiIHwKKwlzZWQgLWUgJ3MvXlwoWzAtOV0qXCkJW14gXSoJWzAtOWEtZl0qCS90cjogXDEgLycKK30KKworbWtkaXIgcGF0aDAKK2RhdGUgPnBhdGgwL2ZpbGUwCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMC9maWxlMCcgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwL2ZpbGUwJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3dyaXRpbmcgdHJlZSBvdXQgd2l0aCBnaXQgd3JpdGUtdHJlZScgXAorICAgICd0cmVlMT0kKGdpdCB3cml0ZS10cmVlKScKK3Rlc3RfZGVidWcgJ3Nob3dfZmlsZXMgJHRyZWUxJworCitta2RpciBwYXRoMQorZGF0ZSA+cGF0aDEvZmlsZTEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgxL2ZpbGUxJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDEvZmlsZTEnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnd3JpdGluZyB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlJyBcCisgICAgJ3RyZWUyPSQoZ2l0IHdyaXRlLXRyZWUpJwordGVzdF9kZWJ1ZyAnc2hvd19maWxlcyAkdHJlZTInCisKK3JtIC1mciBwYXRoMQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlYWQgcHJldmlvdXNseSB3cml0dGVuIHRyZWUgYW5kIGNoZWNrb3V0LicgXAorICAgICdnaXQgcmVhZC10cmVlIC1tICR0cmVlMSAmJiBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLWEnCit0ZXN0X2RlYnVnICdzaG93X2ZpbGVzICR0cmVlMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSBzeW1saW5rLicgXAorICAgICdsbiAtcyBwYXRoMCBwYXRoMSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgxJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3dyaXRpbmcgdHJlZSBvdXQgd2l0aCBnaXQgd3JpdGUtdHJlZScgXAorICAgICd0cmVlMz0kKGdpdCB3cml0ZS10cmVlKScKK3Rlc3RfZGVidWcgJ3Nob3dfZmlsZXMgJHRyZWUzJworCisjIE1vcnRlbiBzYXlzICJHb3QgdGhhdD8iIGhlcmUuCisjIFRlc3QgYmVnaW5zLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVhZCBwcmV2aW91c2x5IHdyaXR0ZW4gdHJlZSBhbmQgY2hlY2tvdXQuJyBcCisgICAgJ2dpdCByZWFkLXRyZWUgJHRyZWUyICYmIGdpdCBjaGVja291dC1pbmRleCAtZiAtYScKK3Rlc3RfZGVidWcgJ3Nob3dfZmlsZXMgJHRyZWUyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgb3V0IGNvbmZsaWN0aW5nIHBhdGggd2l0aCAtZicgXAorICAgICd0ZXN0ICEgLWggcGF0aDAgJiYgdGVzdCAtZCBwYXRoMCAmJgorICAgICB0ZXN0ICEgLWggcGF0aDEgJiYgdGVzdCAtZCBwYXRoMSAmJgorICAgICB0ZXN0ICEgLWggcGF0aDAvZmlsZTAgJiYgdGVzdCAtZiBwYXRoMC9maWxlMCAmJgorICAgICB0ZXN0ICEgLWggcGF0aDEvZmlsZTEgJiYgdGVzdCAtZiBwYXRoMS9maWxlMScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDAyLWNoZWNrb3V0LWNhY2hlLXUuc2ggYi90L3QyMDAyLWNoZWNrb3V0LWNhY2hlLXUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzAzNjFjOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMDItY2hlY2tvdXQtY2FjaGUtdS5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dC1pbmRleCAtdSB0ZXN0LgorCitXaXRoIC11IGZsYWcsIGdpdCBjaGVja291dC1pbmRleCBpbnRlcm5hbGx5IHJ1bnMgdGhlIGVxdWl2YWxlbnQgb2YKK2dpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIG9uIHRoZSBjaGVja2VkIG91dCBlbnRyeS4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydwcmVwYXJhdGlvbicgJworZWNobyBmcm90eiA+cGF0aDAgJiYKK2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAgJiYKK3Q9JChnaXQgd3JpdGUtdHJlZSknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ3dpdGhvdXQgLXUsIGdpdCBjaGVja291dC1pbmRleCBzbXVkZ2VzIHN0YXQgaW5mb3JtYXRpb24uJyAnCitybSAtZiBwYXRoMCAmJgorZ2l0IHJlYWQtdHJlZSAkdCAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hICYmCit0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnd2l0aCAtdSwgZ2l0IGNoZWNrb3V0LWluZGV4IHBpY2tzIHVwIHN0YXQgaW5mb3JtYXRpb24gZnJvbSBuZXcgZmlsZXMuJyAnCitybSAtZiBwYXRoMCAmJgorZ2l0IHJlYWQtdHJlZSAkdCAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1hICYmCitnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDAzLWNoZWNrb3V0LWNhY2hlLW1rZGlyLnNoIGIvdC90MjAwMy1jaGVja291dC1jYWNoZS1ta2Rpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMmE0ZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwMy1jaGVja291dC1jYWNoZS1ta2Rpci5zaApAQCAtMCwwICsxLDk2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dC1pbmRleCAtLXByZWZpeCB0ZXN0LgorCitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IC0tcHJlZml4IG9wdGlvbiB3b3JrcyBhcyBhZHZlcnRpc2VkLCBhbmQKK2Fsc28gdmVyaWZpZXMgdGhhdCBzdWNoIGxlYWRpbmcgcGF0aCBtYXkgY29udGFpbiBzeW1saW5rcywgdW5saWtlCit0aGUgR0lUIGNvbnRyb2xsZWQgcGF0aHMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAnIFwKKyAgICAnbWtkaXIgcGF0aDEgJiYKKyAgICBlY2hvIGZyb3R6ID5wYXRoMCAmJgorICAgIGVjaG8gcmV6cm92ID5wYXRoMS9maWxlMSAmJgorICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAgcGF0aDEvZmlsZTEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgXAorICAgICdoYXZlIHN5bWxpbmsgaW4gcGxhY2Ugd2hlcmUgZGlyIGlzIGV4cGVjdGVkLicgXAorICAgICdybSAtZnIgcGF0aDAgcGF0aDEgJiYKKyAgICAgbWtkaXIgcGF0aDIgJiYKKyAgICAgbG4gLXMgcGF0aDIgcGF0aDEgJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hICYmCisgICAgIHRlc3QgISAtaCBwYXRoMSAmJiB0ZXN0IC1kIHBhdGgxICYmCisgICAgIHRlc3QgLWYgcGF0aDEvZmlsZTEgJiYgdGVzdCAhIC1mIHBhdGgyL2ZpbGUxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndXNlIC0tcHJlZml4PXBhdGgyLycgXAorICAgICdybSAtZnIgcGF0aDAgcGF0aDEgcGF0aDIgJiYKKyAgICAgbWtkaXIgcGF0aDIgJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PXBhdGgyLyAtZiAtYSAmJgorICAgICB0ZXN0IC1mIHBhdGgyL3BhdGgwICYmCisgICAgIHRlc3QgLWYgcGF0aDIvcGF0aDEvZmlsZTEgJiYKKyAgICAgdGVzdCAhIC1mIHBhdGgwICYmCisgICAgIHRlc3QgISAtZiBwYXRoMS9maWxlMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VzZSAtLXByZWZpeD10bXAtJyBcCisgICAgJ3JtIC1mciBwYXRoMCBwYXRoMSBwYXRoMiB0bXAqICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD10bXAtIC1mIC1hICYmCisgICAgIHRlc3QgLWYgdG1wLXBhdGgwICYmCisgICAgIHRlc3QgLWYgdG1wLXBhdGgxL2ZpbGUxICYmCisgICAgIHRlc3QgISAtZiBwYXRoMCAmJgorICAgICB0ZXN0ICEgLWYgcGF0aDEvZmlsZTEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd1c2UgLS1wcmVmaXg9dG1wLSBidXQgd2l0aCBhIGNvbmZsaWN0aW5nIGZpbGUgYW5kIGRpcicgXAorICAgICdybSAtZnIgcGF0aDAgcGF0aDEgcGF0aDIgdG1wKiAmJgorICAgICBlY2hvIG5pdGZvbCA+dG1wLXBhdGgxICYmCisgICAgIG1rZGlyIHRtcC1wYXRoMCAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9dG1wLSAtZiAtYSAmJgorICAgICB0ZXN0IC1mIHRtcC1wYXRoMCAmJgorICAgICB0ZXN0IC1mIHRtcC1wYXRoMS9maWxlMSAmJgorICAgICB0ZXN0ICEgLWYgcGF0aDAgJiYKKyAgICAgdGVzdCAhIC1mIHBhdGgxL2ZpbGUxJworCisjIExpbnVzIGZpeCAjMQordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCisgICAgJ3VzZSAtLXByZWZpeD10bXAvb3JhcnkvIHdoZXJlIHRtcCBpcyBhIHN5bWxpbmsnIFwKKyAgICAncm0gLWZyIHBhdGgwIHBhdGgxIHBhdGgyIHRtcCogJiYKKyAgICAgbWtkaXIgdG1wMSB0bXAxL29yYXJ5ICYmCisgICAgIGxuIC1zIHRtcDEgdG1wICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD10bXAvb3JhcnkvIC1mIC1hICYmCisgICAgIHRlc3QgLWQgdG1wMS9vcmFyeSAmJgorICAgICB0ZXN0IC1mIHRtcDEvb3JhcnkvcGF0aDAgJiYKKyAgICAgdGVzdCAtZiB0bXAxL29yYXJ5L3BhdGgxL2ZpbGUxICYmCisgICAgIHRlc3QgLWggdG1wJworCisjIExpbnVzIGZpeCAjMgordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCisgICAgJ3VzZSAtLXByZWZpeD10bXAvb3JhcnktIHdoZXJlIHRtcCBpcyBhIHN5bWxpbmsnIFwKKyAgICAncm0gLWZyIHBhdGgwIHBhdGgxIHBhdGgyIHRtcCogJiYKKyAgICAgbWtkaXIgdG1wMSAmJgorICAgICBsbiAtcyB0bXAxIHRtcCAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9dG1wL29yYXJ5LSAtZiAtYSAmJgorICAgICB0ZXN0IC1mIHRtcDEvb3JhcnktcGF0aDAgJiYKKyAgICAgdGVzdCAtZiB0bXAxL29yYXJ5LXBhdGgxL2ZpbGUxICYmCisgICAgIHRlc3QgLWggdG1wJworCisjIExpbnVzIGZpeCAjMwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCisgICAgJ3VzZSAtLXByZWZpeD10bXAtIHdoZXJlIHRtcC1wYXRoMSBpcyBhIHN5bWxpbmsnIFwKKyAgICAncm0gLWZyIHBhdGgwIHBhdGgxIHBhdGgyIHRtcCogJiYKKyAgICAgbWtkaXIgdG1wMSAmJgorICAgICBsbiAtcyB0bXAxIHRtcC1wYXRoMSAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9dG1wLSAtZiAtYSAmJgorICAgICB0ZXN0IC1mIHRtcC1wYXRoMCAmJgorICAgICB0ZXN0ICEgLWggdG1wLXBhdGgxICYmCisgICAgIHRlc3QgLWQgdG1wLXBhdGgxICYmCisgICAgIHRlc3QgLWYgdG1wLXBhdGgxL2ZpbGUxJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMDQtY2hlY2tvdXQtY2FjaGUtdGVtcC5zaCBiL3QvdDIwMDQtY2hlY2tvdXQtY2FjaGUtdGVtcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZjRiMjg5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwNC1jaGVja291dC1jYWNoZS10ZW1wLnNoCkBAIC0wLDAgKzEsMjEyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFNoYXduIFBlYXJjZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlY2tvdXQtaW5kZXggLS10ZW1wIHRlc3QuCisKK1dpdGggLS10ZW1wIGZsYWcsIGdpdCBjaGVja291dC1pbmRleCB3cml0ZXMgdG8gdGVtcG9yYXJ5IG1lcmdlIGZpbGVzCityYXRoZXIgdGhhbiB0aGUgdHJhY2tlZCBwYXRoLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ3ByZXBhcmF0aW9uJyAnCitta2RpciBhc3ViZGlyICYmCitlY2hvIHRyZWUxcGF0aDAgPnBhdGgwICYmCitlY2hvIHRyZWUxcGF0aDEgPnBhdGgxICYmCitlY2hvIHRyZWUxcGF0aDMgPnBhdGgzICYmCitlY2hvIHRyZWUxcGF0aDQgPnBhdGg0ICYmCitlY2hvIHRyZWUxYXN1YmRpci9wYXRoNSA+YXN1YmRpci9wYXRoNSAmJgorZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCBwYXRoMSBwYXRoMyBwYXRoNCBhc3ViZGlyL3BhdGg1ICYmCit0MT0kKGdpdCB3cml0ZS10cmVlKSAmJgorcm0gLWYgcGF0aCogLm1lcmdlXyogb3V0IC5naXQvaW5kZXggJiYKK2VjaG8gdHJlZTJwYXRoMCA+cGF0aDAgJiYKK2VjaG8gdHJlZTJwYXRoMSA+cGF0aDEgJiYKK2VjaG8gdHJlZTJwYXRoMiA+cGF0aDIgJiYKK2VjaG8gdHJlZTJwYXRoNCA+cGF0aDQgJiYKK2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAgcGF0aDEgcGF0aDIgcGF0aDQgJiYKK3QyPSQoZ2l0IHdyaXRlLXRyZWUpICYmCitybSAtZiBwYXRoKiAubWVyZ2VfKiBvdXQgLmdpdC9pbmRleCAmJgorZWNobyB0cmVlMnBhdGgwID5wYXRoMCAmJgorZWNobyB0cmVlM3BhdGgxID5wYXRoMSAmJgorZWNobyB0cmVlM3BhdGgyID5wYXRoMiAmJgorZWNobyB0cmVlM3BhdGgzID5wYXRoMyAmJgorZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCBwYXRoMSBwYXRoMiBwYXRoMyAmJgordDM9JChnaXQgd3JpdGUtdHJlZSknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ2NoZWNrb3V0IG9uZSBzdGFnZSAwIHRvIHRlbXBvcmFyeSBmaWxlJyAnCitybSAtZiBwYXRoKiAubWVyZ2VfKiBvdXQgLmdpdC9pbmRleCAmJgorZ2l0IHJlYWQtdHJlZSAkdDEgJiYKK2dpdCBjaGVja291dC1pbmRleCAtLXRlbXAgLS0gcGF0aDEgPm91dCAmJgordGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKK3Rlc3QgJChjdXQgIi1kCSIgLWYyIG91dCkgPSBwYXRoMSAmJgorcD0kKGN1dCAiLWQJIiAtZjEgb3V0KSAmJgordGVzdCAtZiAkcCAmJgordGVzdCAkKGNhdCAkcCkgPSB0cmVlMXBhdGgxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydjaGVja291dCBhbGwgc3RhZ2UgMCB0byB0ZW1wb3JhcnkgZmlsZXMnICcKK3JtIC1mIHBhdGgqIC5tZXJnZV8qIG91dCAuZ2l0L2luZGV4ICYmCitnaXQgcmVhZC10cmVlICR0MSAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IC1hIC0tdGVtcCA+b3V0ICYmCit0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorZm9yIGYgaW4gcGF0aDAgcGF0aDEgcGF0aDMgcGF0aDQgYXN1YmRpci9wYXRoNQorZG8KKwl0ZXN0ICQoZ3JlcCAkZiBvdXQgfCBjdXQgIi1kCSIgLWYyKSA9ICRmICYmCisJcD0kKGdyZXAgJGYgb3V0IHwgY3V0ICItZAkiIC1mMSkgJiYKKwl0ZXN0IC1mICRwICYmCisJdGVzdCAkKGNhdCAkcCkgPSB0cmVlMSRmCitkb25lJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydwcmVwYXJlIDMtd2F5IG1lcmdlJyAnCitybSAtZiBwYXRoKiAubWVyZ2VfKiBvdXQgLmdpdC9pbmRleCAmJgorZ2l0IHJlYWQtdHJlZSAtbSAkdDEgJHQyICR0MycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnY2hlY2tvdXQgb25lIHN0YWdlIDIgdG8gdGVtcG9yYXJ5IGZpbGUnICcKK3JtIC1mIHBhdGgqIC5tZXJnZV8qIG91dCAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IC0tc3RhZ2U9MiAtLXRlbXAgLS0gcGF0aDEgPm91dCAmJgordGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKK3Rlc3QgJChjdXQgIi1kCSIgLWYyIG91dCkgPSBwYXRoMSAmJgorcD0kKGN1dCAiLWQJIiAtZjEgb3V0KSAmJgordGVzdCAtZiAkcCAmJgordGVzdCAkKGNhdCAkcCkgPSB0cmVlMnBhdGgxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydjaGVja291dCBhbGwgc3RhZ2UgMiB0byB0ZW1wb3JhcnkgZmlsZXMnICcKK3JtIC1mIHBhdGgqIC5tZXJnZV8qIG91dCAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IC0tYWxsIC0tc3RhZ2U9MiAtLXRlbXAgPm91dCAmJgordGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKK2ZvciBmIGluIHBhdGgxIHBhdGgyIHBhdGg0CitkbworCXRlc3QgJChncmVwICRmIG91dCB8IGN1dCAiLWQJIiAtZjIpID0gJGYgJiYKKwlwPSQoZ3JlcCAkZiBvdXQgfCBjdXQgIi1kCSIgLWYxKSAmJgorCXRlc3QgLWYgJHAgJiYKKwl0ZXN0ICQoY2F0ICRwKSA9IHRyZWUyJGYKK2RvbmUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ2NoZWNrb3V0IGFsbCBzdGFnZXMvb25lIGZpbGUgdG8gbm90aGluZycgJworcm0gLWYgcGF0aCogLm1lcmdlXyogb3V0ICYmCitnaXQgY2hlY2tvdXQtaW5kZXggLS1zdGFnZT1hbGwgLS10ZW1wIC0tIHBhdGgwID5vdXQgJiYKK3Rlc3RfbGluZV9jb3VudCA9IDAgb3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydjaGVja291dCBhbGwgc3RhZ2VzL29uZSBmaWxlIHRvIHRlbXBvcmFyeSBmaWxlcycgJworcm0gLWYgcGF0aCogLm1lcmdlXyogb3V0ICYmCitnaXQgY2hlY2tvdXQtaW5kZXggLS1zdGFnZT1hbGwgLS10ZW1wIC0tIHBhdGgxID5vdXQgJiYKK3Rlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCit0ZXN0ICQoY3V0ICItZAkiIC1mMiBvdXQpID0gcGF0aDEgJiYKK2N1dCAiLWQJIiAtZjEgb3V0IHwgKHJlYWQgczEgczIgczMgJiYKK3Rlc3QgLWYgJHMxICYmCit0ZXN0IC1mICRzMiAmJgordGVzdCAtZiAkczMgJiYKK3Rlc3QgJChjYXQgJHMxKSA9IHRyZWUxcGF0aDEgJiYKK3Rlc3QgJChjYXQgJHMyKSA9IHRyZWUycGF0aDEgJiYKK3Rlc3QgJChjYXQgJHMzKSA9IHRyZWUzcGF0aDEpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydjaGVja291dCBzb21lIHN0YWdlcy9vbmUgZmlsZSB0byB0ZW1wb3JhcnkgZmlsZXMnICcKK3JtIC1mIHBhdGgqIC5tZXJnZV8qIG91dCAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IC0tc3RhZ2U9YWxsIC0tdGVtcCAtLSBwYXRoMiA+b3V0ICYmCit0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgordGVzdCAkKGN1dCAiLWQJIiAtZjIgb3V0KSA9IHBhdGgyICYmCitjdXQgIi1kCSIgLWYxIG91dCB8IChyZWFkIHMxIHMyIHMzICYmCit0ZXN0ICRzMSA9IC4gJiYKK3Rlc3QgLWYgJHMyICYmCit0ZXN0IC1mICRzMyAmJgordGVzdCAkKGNhdCAkczIpID0gdHJlZTJwYXRoMiAmJgordGVzdCAkKGNhdCAkczMpID0gdHJlZTNwYXRoMiknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ2NoZWNrb3V0IGFsbCBzdGFnZXMvYWxsIGZpbGVzIHRvIHRlbXBvcmFyeSBmaWxlcycgJworcm0gLWYgcGF0aCogLm1lcmdlXyogb3V0ICYmCitnaXQgY2hlY2tvdXQtaW5kZXggLWEgLS1zdGFnZT1hbGwgLS10ZW1wID5vdXQgJiYKK3Rlc3RfbGluZV9jb3VudCA9IDUgb3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyctLSBwYXRoMDogbm8gZW50cnknICcKK3Rlc3QgeCQoZ3JlcCBwYXRoMCBvdXQgfCBjdXQgIi1kCSIgLWYyKSA9IHgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJy0tIHBhdGgxOiBhbGwgMyBzdGFnZXMnICcKK3Rlc3QgJChncmVwIHBhdGgxIG91dCB8IGN1dCAiLWQJIiAtZjIpID0gcGF0aDEgJiYKK2dyZXAgcGF0aDEgb3V0IHwgY3V0ICItZAkiIC1mMSB8IChyZWFkIHMxIHMyIHMzICYmCit0ZXN0IC1mICRzMSAmJgordGVzdCAtZiAkczIgJiYKK3Rlc3QgLWYgJHMzICYmCit0ZXN0ICQoY2F0ICRzMSkgPSB0cmVlMXBhdGgxICYmCit0ZXN0ICQoY2F0ICRzMikgPSB0cmVlMnBhdGgxICYmCit0ZXN0ICQoY2F0ICRzMykgPSB0cmVlM3BhdGgxKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnLS0gcGF0aDI6IG5vIHN0YWdlIDEsIGhhdmUgc3RhZ2UgMiBhbmQgMycgJwordGVzdCAkKGdyZXAgcGF0aDIgb3V0IHwgY3V0ICItZAkiIC1mMikgPSBwYXRoMiAmJgorZ3JlcCBwYXRoMiBvdXQgfCBjdXQgIi1kCSIgLWYxIHwgKHJlYWQgczEgczIgczMgJiYKK3Rlc3QgJHMxID0gLiAmJgordGVzdCAtZiAkczIgJiYKK3Rlc3QgLWYgJHMzICYmCit0ZXN0ICQoY2F0ICRzMikgPSB0cmVlMnBhdGgyICYmCit0ZXN0ICQoY2F0ICRzMykgPSB0cmVlM3BhdGgyKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnLS0gcGF0aDM6IG5vIHN0YWdlIDIsIGhhdmUgc3RhZ2UgMSBhbmQgMycgJwordGVzdCAkKGdyZXAgcGF0aDMgb3V0IHwgY3V0ICItZAkiIC1mMikgPSBwYXRoMyAmJgorZ3JlcCBwYXRoMyBvdXQgfCBjdXQgIi1kCSIgLWYxIHwgKHJlYWQgczEgczIgczMgJiYKK3Rlc3QgLWYgJHMxICYmCit0ZXN0ICRzMiA9IC4gJiYKK3Rlc3QgLWYgJHMzICYmCit0ZXN0ICQoY2F0ICRzMSkgPSB0cmVlMXBhdGgzICYmCit0ZXN0ICQoY2F0ICRzMykgPSB0cmVlM3BhdGgzKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnLS0gcGF0aDQ6IG5vIHN0YWdlIDMsIGhhdmUgc3RhZ2UgMSBhbmQgMycgJwordGVzdCAkKGdyZXAgcGF0aDQgb3V0IHwgY3V0ICItZAkiIC1mMikgPSBwYXRoNCAmJgorZ3JlcCBwYXRoNCBvdXQgfCBjdXQgIi1kCSIgLWYxIHwgKHJlYWQgczEgczIgczMgJiYKK3Rlc3QgLWYgJHMxICYmCit0ZXN0IC1mICRzMiAmJgordGVzdCAkczMgPSAuICYmCit0ZXN0ICQoY2F0ICRzMSkgPSB0cmVlMXBhdGg0ICYmCit0ZXN0ICQoY2F0ICRzMikgPSB0cmVlMnBhdGg0KScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnLS0gYXN1YmRpci9wYXRoNTogbm8gc3RhZ2UgMiBhbmQgMyBoYXZlIHN0YWdlIDEnICcKK3Rlc3QgJChncmVwIGFzdWJkaXIvcGF0aDUgb3V0IHwgY3V0ICItZAkiIC1mMikgPSBhc3ViZGlyL3BhdGg1ICYmCitncmVwIGFzdWJkaXIvcGF0aDUgb3V0IHwgY3V0ICItZAkiIC1mMSB8IChyZWFkIHMxIHMyIHMzICYmCit0ZXN0IC1mICRzMSAmJgordGVzdCAkczIgPSAuICYmCit0ZXN0ICRzMyA9IC4gJiYKK3Rlc3QgJChjYXQgJHMxKSA9IHRyZWUxYXN1YmRpci9wYXRoNSknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ2NoZWNrb3V0IC0tdGVtcCB3aXRoaW4gc3ViZGlyJyAnCisoY2QgYXN1YmRpciAmJgorIGdpdCBjaGVja291dC1pbmRleCAtYSAtLXN0YWdlPWFsbCA+b3V0ICYmCisgdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKyB0ZXN0ICQoZ3JlcCBwYXRoNSBvdXQgfCBjdXQgIi1kCSIgLWYyKSA9IHBhdGg1ICYmCisgZ3JlcCBwYXRoNSBvdXQgfCBjdXQgIi1kCSIgLWYxIHwgKHJlYWQgczEgczIgczMgJiYKKyB0ZXN0IC1mIC4uLyRzMSAmJgorIHRlc3QgJHMyID0gLiAmJgorIHRlc3QgJHMzID0gLiAmJgorIHRlc3QgJChjYXQgLi4vJHMxKSA9IHRyZWUxYXN1YmRpci9wYXRoNSkKKyknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgXAorJ2NoZWNrb3V0IC0tdGVtcCBzeW1saW5rJyAnCitybSAtZiBwYXRoKiAubWVyZ2VfKiBvdXQgLmdpdC9pbmRleCAmJgorbG4gLXMgYiBhICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgJiYKK3Q0PSQoZ2l0IHdyaXRlLXRyZWUpICYmCitybSAtZiAuZ2l0L2luZGV4ICYmCitnaXQgcmVhZC10cmVlICR0NCAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IC0tdGVtcCAtYSA+b3V0ICYmCit0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgordGVzdCAkKGN1dCAiLWQJIiAtZjIgb3V0KSA9IGEgJiYKK3A9JChjdXQgIi1kCSIgLWYxIG91dCkgJiYKK3Rlc3QgLWYgJHAgJiYKK3Rlc3QgJChjYXQgJHApID0gYicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDA1LWNoZWNrb3V0LWluZGV4LXN5bWxpbmtzLnNoIGIvdC90MjAwNS1jaGVja291dC1pbmRleC1zeW1saW5rcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZmE1NjEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwNS1jaGVja291dC1pbmRleC1zeW1saW5rcy5zaApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIFNpeHQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0LWluZGV4IG9uIGZpbGVzeXN0ZW0gdy9vIHN5bWxpbmtzIHRlc3QuCisKK1RoaXMgdGVzdHMgdGhhdCBnaXQgY2hlY2tvdXQtaW5kZXggY3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgYXMgYSBwbGFpbgorZmlsZSBpZiBjb3JlLnN5bWxpbmtzIGlzIGZhbHNlLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ3ByZXBhcmF0aW9uJyAnCitnaXQgY29uZmlnIGNvcmUuc3ltbGlua3MgZmFsc2UgJiYKK2w9JChwcmludGYgZmlsZSB8IGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IC0tc3RkaW4pICYmCitlY2hvICIxMjAwMDAgJGwJc3ltbGluayIgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisndGhlIGNoZWNrZWQtb3V0IHN5bWxpbmsgbXVzdCBiZSBhIGZpbGUnICcKK2dpdCBjaGVja291dC1pbmRleCBzeW1saW5rICYmCit0ZXN0IC1mIHN5bWxpbmsnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ3RoZSBmaWxlIG11c3QgYmUgdGhlIGJsb2Igd2UgYWRkZWQgZHVyaW5nIHRoZSBzZXR1cCcgJwordGVzdCAiJChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiBzeW1saW5rKSIgPSAkbCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDA2LWNoZWNrb3V0LWluZGV4LWJhc2ljLnNoIGIvdC90MjAwNi1jaGVja291dC1pbmRleC1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41N2NiZGZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwNi1jaGVja291dC1pbmRleC1iYXNpYy5zaApAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgY2hlY2tvdXQtaW5kZXggdGVzdHMKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0LWluZGV4IC0tZ29iYmxlZGVnb29rJyAnCisJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGNoZWNrb3V0LWluZGV4IC0tZ29iYmxlZGVnb29rIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2UiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dC1pbmRleCAtaCBpbiBicm9rZW4gcmVwb3NpdG9yeScgJworCW1rZGlyIGJyb2tlbiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCT4uZ2l0L2luZGV4ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBjaGVja291dC1pbmRleCAtaCA+dXNhZ2UgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZSIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwNy1jaGVja291dC1zeW1saW5rLnNoIGIvdC90MjAwNy1jaGVja291dC1zeW1saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2ZjU5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDA3LWNoZWNrb3V0LXN5bWxpbmsuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlY2tvdXQgdG8gc3dpdGNoIGJldHdlZW4gYnJhbmNoZXMgd2l0aCBzeW1saW5rPC0+ZGlyJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBzZXR1cCAnCisKKwlta2RpciBmcm90eiAmJgorCWVjaG8gaGVsbG8gPmZyb3R6L2ZpbGZyZSAmJgorCWdpdCBhZGQgZnJvdHovZmlsZnJlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibWFzdGVyIGhhcyBmaWxlIGZyb3R6L2ZpbGZyZSIgJiYKKworCWdpdCBicmFuY2ggc2lkZSAmJgorCisJZWNobyBnb29kYnllID5uaXRmb2wgJiYKKwlnaXQgYWRkIG5pdGZvbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIm1hc3RlciBhZGRzIGZpbGUgbml0Zm9sIiAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKworCWdpdCBybSAtLWNhY2hlZCBmcm90ei9maWxmcmUgJiYKKwltdiBmcm90eiB4eXp6eSAmJgorCWxuIC1zIHh5enp5IGZyb3R6ICYmCisJZ2l0IGFkZCB4eXp6eS9maWxmcmUgZnJvdHogJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzaWRlIG1vdmVzIGZyb3R6LyB0byB4eXp6eS8gYW5kIGFkZHMgZnJvdHotPnh5enp5LyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzd2l0Y2ggZnJvbSBzeW1saW5rIHRvIGRpcicgJworCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ1JlbW92ZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgJiBzd2l0Y2ggdG8gbWFzdGVyJyAnCisJcm0gLWZyIGZyb3R6IHh5enp5IG5pdGZvbCAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3dpdGNoIGZyb20gZGlyIHRvIHN5bWxpbmsnICcKKworCWdpdCBjaGVja291dCBzaWRlCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDA4LWNoZWNrb3V0LXN1YmRpci5zaCBiL3QvdDIwMDgtY2hlY2tvdXQtc3ViZGlyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlMDk4YWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDA4LWNoZWNrb3V0LXN1YmRpci5zaApAQCAtMCwwICsxLDgyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IERhdmlkIFN5bW9uZHMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0IGZyb20gc3ViZGlyZWN0b3JpZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gImJhc2UiID4gZmlsZTAgJiYKKwlnaXQgYWRkIGZpbGUwICYmCisJbWtkaXIgZGlyMSAmJgorCWVjaG8gImhlbGxvIiA+IGRpcjEvZmlsZTEgJiYKKwlnaXQgYWRkIGRpcjEvZmlsZTEgJiYKKwlta2RpciBkaXIyICYmCisJZWNobyAiYm9uam91ciIgPiBkaXIyL2ZpbGUyICYmCisJZ2l0IGFkZCBkaXIyL2ZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicG9wdWxhdGUgdHJlZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgYW5kIHJlc3RvcmUgd2l0aCByZWxhdGl2ZSBwYXRoJyAnCisKKwkoCisJCWNkIGRpcjEgJiYKKwkJcm0gLi4vZmlsZTAgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gLi4vZmlsZTAgJiYKKwkJdGVzdCAiYmFzZSIgPSAiJChjYXQgLi4vZmlsZTApIiAmJgorCQlybSAuLi9kaXIyL2ZpbGUyICYmCisJCWdpdCBjaGVja291dCBIRUFEIC0tIC4uL2RpcjIvZmlsZTIgJiYKKwkJdGVzdCAiYm9uam91ciIgPSAiJChjYXQgLi4vZGlyMi9maWxlMikiICYmCisJCXJtIC4uL2ZpbGUwIC4vZmlsZTEgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gLi4gJiYKKwkJdGVzdCAiYmFzZSIgPSAiJChjYXQgLi4vZmlsZTApIiAmJgorCQl0ZXN0ICJoZWxsbyIgPSAiJChjYXQgZmlsZTEpIgorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGVtcHR5IHByZWZpeCcgJworCisJcm0gZmlsZTAgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBmaWxlMCAmJgorCXRlc3QgImJhc2UiID0gIiQoY2F0IGZpbGUwKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIHNpbXBsZSBwcmVmaXgnICcKKworCXJtIGRpcjEvZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBkaXIxICYmCisJdGVzdCAiaGVsbG8iID0gIiQoY2F0IGRpcjEvZmlsZTEpIiAmJgorCXJtIGRpcjEvZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBkaXIxL2ZpbGUxICYmCisJdGVzdCAiaGVsbG8iID0gIiQoY2F0IGRpcjEvZmlsZTEpIgorCisnCisKKyMgVGhpcyBpcyBub3QgZXhwZWN0ZWQgdG8gd29yayBhcyBscy1maWxlcyB3YXMgbm90IGRlc2lnbmVkCisjIHRvIGRlYWwgd2l0aCBzdWNoLiAgRW5hYmxlIGl0IHdoZW4gbHMtZmlsZXMgaXMgdXBkYXRlZC4KKzogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aCBjb21wbGV4IHJlbGF0aXZlIHBhdGgnICcKKworCXJtIGZpbGUxICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gLi4vZGlyMS8uLi9kaXIxL2ZpbGUxICYmIHRlc3QgLWYgLi9maWxlMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlIHBhdGggb3V0c2lkZSB0cmVlIHNob3VsZCBmYWlsJyBcCisJJ3Rlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBIRUFEIC0tIC4uLy4uL01ha2VmaWxlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3QgcmVsYXRpdmUgcGF0aCB0byBmaWxlIHNob3VsZCBmYWlsICgxKScgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgSEVBRCAtLSAuLi9maWxlMCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IHJlbGF0aXZlIHBhdGggc2hvdWxkIGZhaWwgKDIpJyBcCisJJyggY2QgZGlyMSAmJiB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgSEVBRCAtLSAuL2ZpbGUwICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCByZWxhdGl2ZSBwYXRoIHNob3VsZCBmYWlsICgzKScgXAorCScoIGNkIGRpcjEgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IEhFQUQgLS0gLi4vLi4vZmlsZTAgKScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDA5LWNoZWNrb3V0LXN0YXRpbmZvLnNoIGIvdC90MjAwOS1jaGVja291dC1zdGF0aW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mM2MyMTUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwOS1jaGVja291dC1zdGF0aW5mby5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgc2hvdWxkIGxlYXZlIGNsZWFuIHN0YXQgaW5mbycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwllY2hvIGhlbGxvID53b3JsZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgd29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwllY2hvIGdvb2RieWUgPndvcmxkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB3b3JsZCAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHN3aXRjaGluZycgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1yYXcpIiA9ICIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tcmF3KSIgPSAiIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGggY2hlY2tvdXQnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tcmF3KSIgPSAiIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciB3b3JsZCAmJgorCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1yYXcpIiA9ICIiICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSB3b3JsZCAmJgorCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1yYXcpIiA9ICIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIHdvcmxkICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIKKworJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90MjAxMC1jaGVja291dC1hbWJpZ3VvdXMuc2ggYi90L3QyMDEwLWNoZWNrb3V0LWFtYmlndW91cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43Y2MwYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxMC1jaGVja291dC1hbWJpZ3VvdXMuc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IGFuZCBwYXRoc3BlY3MvcmVmc3BlY3MgYW1iaWd1aXRpZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gaGVsbG8gPndvcmxkICYmCisJZWNobyBoZWxsbyA+YWxsICYmCisJZ2l0IGFkZCBhbGwgd29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHdvcmxkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmVyZW5jZSBtdXN0IGJlIGEgdHJlZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAkKGdpdCBoYXNoLW9iamVjdCAuL2FsbCkgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHN3aXRjaGluZycgJworCXRlc3QgInJlZnMvaGVhZHMvbWFzdGVyIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiICYmCisJZ2l0IGNoZWNrb3V0IHdvcmxkIC0tICYmCisJdGVzdCAicmVmcy9oZWFkcy93b3JsZCIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3b3JsZCBmcm9tIHRoZSBpbmRleCcgJworCWVjaG8gYnllID4gd29ybGQgJiYKKwlnaXQgY2hlY2tvdXQgLS0gd29ybGQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbiBhbWJpZ3VvdXMgY2FsbCcgJworCWdpdCBjaGVja291dCBhbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgdGhlIG1vc3QgY29tbW9uIGNhc2UnICcKKwlnaXQgY2hlY2tvdXQgd29ybGQgJiYKKwl0ZXN0ICJyZWZzL2hlYWRzL3dvcmxkIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGFtYmlndWl0eScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCB3b3JsZCBhbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIGNoZWNraW5nIG91dCBmcm9tIGEgdHJlZS1pc2gnICcKKwllY2hvIGJ5ZSA+IHdvcmxkICYmCisJZ2l0IGNoZWNrb3V0IHdvcmxkIC0tIHdvcmxkICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgLS1xdWlldAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTEtY2hlY2tvdXQtaW52YWxpZC1oZWFkLnNoIGIvdC90MjAxMS1jaGVja291dC1pbnZhbGlkLWhlYWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzAwZjhiZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTEtY2hlY2tvdXQtaW52YWxpZC1oZWFkLnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBzd2l0Y2hpbmcgYXdheSBmcm9tIGFuIGludmFsaWQgYnJhbmNoJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGhlbGxvID53b3JsZCAmJgorCWdpdCBhZGQgd29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc2hvdWxkIG5vdCBzdGFydCBicmFuY2ggZnJvbSBhIHRyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLWIgbmV3YnJhbmNoIG1hc3Rlcl57dHJlZX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgbWFzdGVyIGZyb20gaW52YWxpZCBIRUFEJyAnCisJZWNobyAkX3o0MCA+LmdpdC9IRUFEICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAtLQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTItY2hlY2tvdXQtbGFzdC5zaCBiL3QvdDIwMTItY2hlY2tvdXQtbGFzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNDRkZTlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxMi1jaGVja291dC1sYXN0LnNoCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgY2FuIHN3aXRjaCB0byBsYXN0IGJyYW5jaCBhbmQgbWVyZ2UgYmFzZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBoZWxsbyA+d29ybGQgJiYKKwlnaXQgYWRkIHdvcmxkICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBvdGhlciAmJgorCWVjaG8gImhlbGxvIGFnYWluIiA+PndvcmxkICYmCisJZ2l0IGFkZCB3b3JsZCAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCAtIiBkb2VzIG5vdCB3b3JrIGluaXRpYWxseScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpcnN0IGJyYW5jaCBzd2l0Y2gnICcKKwlnaXQgY2hlY2tvdXQgb3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIHN3aXRjaGVzIGJhY2snICcKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL21hc3RlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIHN3aXRjaGVzIGZvcnRoJyAnCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9vdGhlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0YWNoIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCAtIiBhdHRhY2hlcyBhZ2FpbicgJworCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvb3RoZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCAtIiBkZXRhY2hlcyBhZ2FpbicgJworCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAieiQoZ2l0IHJldi1wYXJzZSBvdGhlcikiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vcmUgc3dpdGNoZXMnICcKKwlmb3IgaSBpbiAxNiAxNSAxNCAxMyAxMiAxMSAxMCA5IDggNyA2IDUgNCAzIDIgMQorCWRvCisJCWdpdCBjaGVja291dCAtYiBicmFuY2gkaQorCWRvbmUKKycKKworbW9yZV9zd2l0Y2hlcyAoKSB7CisJZm9yIGkgaW4gMTYgMTUgMTQgMTMgMTIgMTEgMTAgOSA4IDcgNiA1IDQgMyAyIDEKKwlkbworCQlnaXQgY2hlY2tvdXQgYnJhbmNoJGkKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byB0aGUgbGFzdCcgJworCW1vcmVfc3dpdGNoZXMgJiYKKwlnaXQgY2hlY2tvdXQgQHstMX0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9icmFuY2gyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggdG8gc2Vjb25kIGZyb20gdGhlIGxhc3QnICcKKwltb3JlX3N3aXRjaGVzICYmCisJZ2l0IGNoZWNrb3V0IEB7LTJ9ICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvYnJhbmNoMyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIHRoaXJkIGZyb20gdGhlIGxhc3QnICcKKwltb3JlX3N3aXRjaGVzICYmCisJZ2l0IGNoZWNrb3V0IEB7LTN9ICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvYnJhbmNoNCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIGZvdXJ0aCBmcm9tIHRoZSBsYXN0JyAnCisJbW9yZV9zd2l0Y2hlcyAmJgorCWdpdCBjaGVja291dCBAey00fSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL2JyYW5jaDUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byB0d2VsZnRoIGZyb20gdGhlIGxhc3QnICcKKwltb3JlX3N3aXRjaGVzICYmCisJZ2l0IGNoZWNrb3V0IEB7LTEyfSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL2JyYW5jaDEzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBiYXNlIHRlc3Qgc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlciBvdGhlciAmJgorCWVjaG8gImhlbGxvIGFnYWluIiA+PndvcmxkICYmCisJZ2l0IGFkZCB3b3JsZCAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5vdGhlci4uLm1hc3RlcicgJworCWdpdCBjaGVja291dCBhbm90aGVyICYmCisJZ2l0IGNoZWNrb3V0IGFub3RoZXIuLi5tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiA9ICJ6JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3Rlcl4pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi5tYXN0ZXInICcKKwlnaXQgY2hlY2tvdXQgYW5vdGhlciAmJgorCWdpdCBjaGVja291dCAuLi5tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiA9ICJ6JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3Rlcl4pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXN0ZXIuLi4nICcKKwlnaXQgY2hlY2tvdXQgYW5vdGhlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIuLi4gJiYKKwl0ZXN0ICJ6JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiA9ICJ6JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3Rlcl4pIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTMtY2hlY2tvdXQtc3VibW9kdWxlLnNoIGIvdC90MjAxMy1jaGVja291dC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzBlZGJiMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTMtY2hlY2tvdXQtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsNjUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHN1Ym1vZHVsZSAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGluaXQgJiYKKwkgdGVzdF9jb21taXQgZmlyc3QpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN1cGVycHJvamVjdCAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkgdGVzdF9jb21taXQgc2Vjb25kKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB1cGRhdGVkLnN1cGVycHJvamVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcicmVzZXQgPHN1Ym1vZHVsZT4iIHVwZGF0ZXMgdGhlIGluZGV4JyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IEhFQUReIHN1Ym1vZHVsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgcmVzZXQgc3VibW9kdWxlICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgPHN1Ym1vZHVsZT4iIHVwZGF0ZXMgdGhlIGluZGV4IG9ubHknICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gc3VibW9kdWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBjaGVja291dCBIRUFEIHN1Ym1vZHVsZSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IDxzdWJtb2R1bGU+IiBob25vcnMgZGlmZi5pZ25vcmVTdWJtb2R1bGVzJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgZGlydHkgJiYKKwllY2hvIHg+IHN1Ym1vZHVsZS91bnRyYWNrZWQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCA+YWN0dWFsIDI+JjEgJiYKKwkhIHRlc3QgLXMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCA8c3VibW9kdWxlPiIgaG9ub3JzIHN1Ym1vZHVsZS4qLmlnbm9yZSBmcm9tIC5naXRtb2R1bGVzJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgbm9uZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS5wYXRoIHN1Ym1vZHVsZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS5pZ25vcmUgdW50cmFja2VkICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgPmFjdHVhbCAyPiYxICYmCisJISB0ZXN0IC1zIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgPHN1Ym1vZHVsZT4iIGhvbm9ycyBzdWJtb2R1bGUuKi5pZ25vcmUgZnJvbSAuZ2l0L2NvbmZpZycgJworCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS5wYXRoIHN1Ym1vZHVsZSAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgPmFjdHVhbCAyPiYxICYmCisJISB0ZXN0IC1zIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTQtc3dpdGNoLnNoIGIvdC90MjAxNC1zd2l0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2NmYjE0NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTQtc3dpdGNoLnNoCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdQZXRlciBNYWNNaWxsYW4nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBIZWxsbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gVjEgJiYKKwllY2hvIEhlbGxvIHdvcmxkID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGFsbCBjaGFuZ2VzIGFyZSBzdGFnZWQnICcKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWNvbmQgY29tbWl0JyAnCisJZ2l0IGNvbW1pdCAtbSBWMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjaycgJworCWdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAxNS1jaGVja291dC11bmJvcm4uc2ggYi90L3QyMDE1LWNoZWNrb3V0LXVuYm9ybi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zN2JkY2VkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxNS1jaGVja291dC11bmJvcm4uc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IGZyb20gdW5ib3JuIGJyYW5jaCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHBhcmVudCAmJgorCShjZCBwYXJlbnQgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZWNobyBjb250ZW50ID5maWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSBnaXQgY29tbWl0IC1tIGJhc2UKKwkpICYmCisJZ2l0IGZldGNoIHBhcmVudCBtYXN0ZXI6b3JpZ2luCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGZyb20gdW5ib3JuIHByZXNlcnZlcyB1bnRyYWNrZWQgZmlsZXMnICcKKwllY2hvIHByZWNpb3VzID5leHBlY3QgJiYKKwllY2hvIHByZWNpb3VzID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC1iIG5ldyBvcmlnaW4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBmcm9tIHVuYm9ybiBwcmVzZXJ2ZXMgaW5kZXggY29udGVudHMnICcKKwllY2hvIHByZWNpb3VzID5leHBlY3QgJiYKKwllY2hvIHByZWNpb3VzID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC1iIG5ldyBvcmlnaW4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWdpdCBzaG93IDpmaWxlID5maWxlICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZnJvbSB1bmJvcm4gbWVyZ2VzIGlkZW50aWNhbCBpbmRleCBjb250ZW50cycgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjaGVja291dCAtYiBuZXcgb3JpZ2luCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIG91dCBhbm90aGVyIGJyYW5jaCBmcm9tIHVuYm9ybiBzdGF0ZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBuZXdyb290ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXJuYW1lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV3cm9vdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJZWNobyByZWZzL2hlYWRzL2Fub3RoZXJuYW1lID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIG91dCBpbiBhIG5ld2x5IGNyZWF0ZWQgcmVwbycgJworCXRlc3RfY3JlYXRlX3JlcG8gZW1wdHkgJiYKKwkoCisJCWNkIGVtcHR5ICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+ZXhwZWN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAmJgorCQlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTYtY2hlY2tvdXQtcGF0Y2guc2ggYi90L3QyMDE2LWNoZWNrb3V0LXBhdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjljZDBhYzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDE2LWNoZWNrb3V0LXBhdGNoLnNoCkBAIC0wLDAgKzEsMTE1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0IC0tcGF0Y2gnCisKKy4gLi9saWItcGF0Y2gtbW9kZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwJyAnCisJbWtkaXIgZGlyICYmCisJZWNobyBwYXJlbnQgPiBkaXIvZm9vICYmCisJZWNobyBkdW1teSA+IGJhciAmJgorCWdpdCBhZGQgYmFyIGRpci9mb28gJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmQgZGlyL2ZvbyBoZWFkICYmCisJc2V0X2FuZF9zYXZlX3N0YXRlIGJhciBiYXJfd29yayBiYXJfaW5kZXggJiYKKwlzYXZlX2hlYWQKKycKKworIyBub3RlOiBiYXIgc29ydHMgYmVmb3JlIGRpci9mb28sIHNvIHRoZSBmaXJzdCAnbicgaXMgYWx3YXlzIHRvIHNraXAgJ2JhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzYXlpbmcgIm4iIGRvZXMgbm90aGluZycgJworCXNldF9hbmRfc2F2ZV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCShlY2hvIG47IGVjaG8gbikgfCBnaXQgY2hlY2tvdXQgLXAgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgY2hlY2tvdXQgLXAnICcKKwkoZWNobyBuOyBlY2hvIHkpIHwgZ2l0IGNoZWNrb3V0IC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCBjaGVja291dCAtcCB3aXRoIHN0YWdlZCBjaGFuZ2VzJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCShlY2hvIG47IGVjaG8geSkgfCBnaXQgY2hlY2tvdXQgLXAgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaW5kZXggaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgY2hlY2tvdXQgLXAgSEVBRCB3aXRoIE5PIHN0YWdlZCBjaGFuZ2VzOiBhYm9ydCcgJworCXNldF9hbmRfc2F2ZV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCShlY2hvIG47IGVjaG8geTsgZWNobyBuKSB8IGdpdCBjaGVja291dCAtcCBIRUFEICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBkaXIvZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IGNoZWNrb3V0IC1wIEhFQUQgd2l0aCBOTyBzdGFnZWQgY2hhbmdlczogYXBwbHknICcKKwkoZWNobyBuOyBlY2hvIHk7IGVjaG8geSkgfCBnaXQgY2hlY2tvdXQgLXAgSEVBRCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgY2hlY2tvdXQgLXAgSEVBRCB3aXRoIGNoYW5nZSBhbHJlYWR5IHN0YWdlZCcgJworCXNldF9zdGF0ZSBkaXIvZm9vIGluZGV4IGluZGV4ICYmCisJIyB0aGUgdGhpcmQgbiBpcyB0byBnZXQgb3V0IGluIGNhc2UgaXQgbWlzdGFrZW5seSBkb2VzIG5vdCBhcHBseQorCShlY2hvIG47IGVjaG8geTsgZWNobyBuKSB8IGdpdCBjaGVja291dCAtcCBIRUFEICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCBjaGVja291dCAtcCBIRUFEXicgJworCSMgdGhlIHRoaXJkIG4gaXMgdG8gZ2V0IG91dCBpbiBjYXNlIGl0IG1pc3Rha2VubHkgZG9lcyBub3QgYXBwbHkKKwkoZWNobyBuOyBlY2hvIHk7IGVjaG8gbikgfCBnaXQgY2hlY2tvdXQgLXAgSEVBRF4gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gcGFyZW50IHBhcmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCBjaGVja291dCAtcCBoYW5kbGVzIGRlbGV0aW9uJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCXJtIGRpci9mb28gJiYKKwkoZWNobyBuOyBlY2hvIHkpIHwgZ2l0IGNoZWNrb3V0IC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGluZGV4IGluZGV4CisnCisKKyMgVGhlIGlkZWEgaW4gdGhlIHJlc3QgaXMgdGhhdCBiYXIgc29ydHMgZmlyc3QsIHNvIHdlIGFsd2F5cyBzYXkgJ3knCisjIGZpcnN0IGFuZCBpZiB0aGUgcGF0aCBsaW1pdGVyIGZhaWxzIGl0J2xsIGFwcGx5IHRvIGJhciBpbnN0ZWFkIG9mCisjIGRpci9mb28uICBUaGVyZSdzIGFsd2F5cyBhbiBleHRyYSAnbicgdG8gcmVqZWN0IGVkaXRzIHRvIGRpci9mb28gaW4KKyMgdGhlIGZhaWx1cmUgY2FzZSAoYW5kIHRodXMgZ2V0IG91dCBvZiB0aGUgbG9vcCkuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncGF0aCBsaW1pdGluZyB3b3JrczogZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJKGVjaG8geTsgZWNobyBuKSB8IGdpdCBjaGVja291dCAtcCBkaXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncGF0aCBsaW1pdGluZyB3b3JrczogLS0gZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJKGVjaG8geTsgZWNobyBuKSB8IGdpdCBjaGVja291dCAtcCAtLSBkaXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncGF0aCBsaW1pdGluZyB3b3JrczogSEVBRF4gLS0gZGlyJyAnCisJIyB0aGUgdGhpcmQgbiBpcyB0byBnZXQgb3V0IGluIGNhc2UgaXQgbWlzdGFrZW5seSBkb2VzIG5vdCBhcHBseQorCShlY2hvIHk7IGVjaG8gbjsgZWNobyBuKSB8IGdpdCBjaGVja291dCAtcCBIRUFEXiAtLSBkaXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gcGFyZW50IHBhcmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3BhdGggbGltaXRpbmcgd29ya3M6IGZvbyBpbnNpZGUgZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJIyB0aGUgdGhpcmQgbiBpcyB0byBnZXQgb3V0IGluIGNhc2UgaXQgbWlzdGFrZW5seSBkb2VzIG5vdCBhcHBseQorCShlY2hvIHk7IGVjaG8gbjsgZWNobyBuKSB8IChjZCBkaXIgJiYgZ2l0IGNoZWNrb3V0IC1wIGZvbykgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnbm9uZSBvZiB0aGlzIG1vdmVkIEhFQUQnICcKKwl2ZXJpZnlfc2F2ZWRfaGVhZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTctY2hlY2tvdXQtb3JwaGFuLnNoIGIvdC90MjAxNy1jaGVja291dC1vcnBoYW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjU1ZjI3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTctY2hlY2tvdXQtb3JwaGFuLnNoCkBAIC0wLDAgKzEsMTI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEVyaWNrIE1hdHRvcworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlY2tvdXQgLS1vcnBoYW4KKworTWFpbiBUZXN0cyBmb3IgLS1vcnBoYW4gZnVuY3Rpb25hbGl0eS4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitURVNUX0ZJTEU9Zm9vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldHVwJyAnCisJZWNobyAiSW5pdGlhbCIgPiIkVEVTVF9GSUxFIiAmJgorCWdpdCBhZGQgIiRURVNUX0ZJTEUiICYmCisJZ2l0IGNvbW1pdCAtbSAiRmlyc3QgQ29tbWl0IiAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gIlN0YXRlIDEiID4+IiRURVNUX0ZJTEUiICYmCisJZ2l0IGFkZCAiJFRFU1RfRklMRSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTZWNvbmQgQ29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBjcmVhdGVzIGEgbmV3IG9ycGhhbiBicmFuY2ggZnJvbSBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGFscGhhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEICYmCisJdGVzdCAicmVmcy9oZWFkcy9hbHBoYSIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlRoaXJkIENvbW1pdCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReICYmCisJZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IG1hc3RlciBhbHBoYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBjcmVhdGVzIGEgbmV3IG9ycGhhbiBicmFuY2ggZnJvbSA8c3RhcnRfcG9pbnQ+JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBiZXRhIG1hc3Rlcl4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgJiYKKwl0ZXN0ICJyZWZzL2hlYWRzL2JldGEiID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJGb3VydGggQ29tbWl0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF4gJiYKKwlnaXQgZGlmZi10cmVlIC0tcXVpZXQgbWFzdGVyXiBiZXRhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIG11c3QgYmUgcmVqZWN0ZWQgd2l0aCAtYicgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3IC1iIG5ld2VyICYmCisJdGVzdCByZWZzL2hlYWRzL21hc3RlciA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIG11c3QgYmUgcmVqZWN0ZWQgd2l0aCAtdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3IC10IG1hc3RlciAmJgorCXRlc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBpZ25vcmVzIGJyYW5jaC5hdXRvc2V0dXBtZXJnZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBhbHdheXMgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gZ2FtbWEgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLmdhbW1hLm1lcmdlKSIgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvZ2FtbWEgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gbWFrZXMgcmVmbG9nIGJ5IGRlZmF1bHQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUubG9nQWxsUmVmVXBkYXRlcyAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBkZWx0YSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZGVsdGFAezB9ICYmCisJZ2l0IGNvbW1pdCAtbSBEZWx0YSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZGVsdGFAezB9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIGRvZXMgbm90IG1ha2UgcmVmbG9nIHdoZW4gY29yZS5sb2dBbGxSZWZVcGRhdGVzID0gZmFsc2UnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgZmFsc2UgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gZXBzaWxvbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZXBzaWxvbkB7MH0gJiYKKwlnaXQgY29tbWl0IC1tIEVwc2lsb24gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGVwc2lsb25AezB9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIHdpdGggLWwgbWFrZXMgcmVmbG9nIHdoZW4gY29yZS5sb2dBbGxSZWZVcGRhdGVzID0gZmFsc2UnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1sIC0tb3JwaGFuIHpldGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHpldGFAezB9ICYmCisJZ2l0IGNvbW1pdCAtbSBaZXRhICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB6ZXRhQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZpbmcgdXAgLS1vcnBoYW4gbm90IGNvbW1pdHRlZCB3aGVuIC1sIGFuZCBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgPSBmYWxzZSBkZWxldGVzIHJlZmxvZycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWwgLS1vcnBoYW4gZXRhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBldGFAezB9ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZXRhQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBpcyByZWplY3RlZCB3aXRoIGFuIGV4aXN0aW5nIG5hbWUnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG1hc3RlciAmJgorCXRlc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiByZWZ1c2VzIHRvIHN3aXRjaCBpZiBhIG1lcmdlIGlzIG5lZWRlZCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBsb2NhbCA+PiIkVEVTVF9GSUxFIiAmJgorCWNhdCAiJFRFU1RfRklMRSIgPiIkVEVTVF9GSUxFLnNhdmVkIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLW9ycGhhbiBuZXcgbWFzdGVyXiAmJgorCXRlc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorCXRlc3RfY21wICIkVEVTVF9GSUxFIiAiJFRFU1RfRklMRS5zYXZlZCIgJiYKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm5vdCAtLWRldGFjaCBvbiBhbiB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBuZXcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1kZXRhY2gKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDE4LWNoZWNrb3V0LWJyYW5jaC5zaCBiL3QvdDIwMTgtY2hlY2tvdXQtYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI3NDEyNjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDE4LWNoZWNrb3V0LWJyYW5jaC5zaApAQCAtMCwwICsxLDIwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0ICcKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgQXJndW1lbnRzOiA8YnJhbmNoPiA8c2hhPiBbPGNoZWNrb3V0IG9wdGlvbnM+XQorIworIyBSdW5zICJnaXQgY2hlY2tvdXQiIHRvIHN3aXRjaCB0byA8YnJhbmNoPiwgdGVzdGluZyB0aGF0CisjCisjICAgMSkgd2UgYXJlIG9uIHRoZSBzcGVjaWZpZWQgYnJhbmNoLCA8YnJhbmNoPjsKKyMgICAyKSBIRUFEIGlzIDxzaGE+OyBpZiA8c2hhPiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgb2xkIEhFQUQgaXMgdXNlZC4KKyMKKyMgSWYgPGNoZWNrb3V0IG9wdGlvbnM+IGlzIG5vdCBzcGVjaWZpZWQsICJnaXQgY2hlY2tvdXQiIGlzIHJ1biB3aXRoIC1iLgorZG9fY2hlY2tvdXQoKSB7CisJZXhwX2JyYW5jaD0kMSAmJgorCWV4cF9yZWY9InJlZnMvaGVhZHMvJGV4cF9icmFuY2giICYmCisKKwkjIGlmIDxzaGE+IGlzIG5vdCBzcGVjaWZpZWQsIHVzZSBIRUFELgorCWV4cF9zaGE9JHsyOi0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCl9ICYmCisKKwkjIGRlZmF1bHQgb3B0aW9ucyBmb3IgZ2l0IGNoZWNrb3V0OiAtYgorCWlmIFsgLXogIiQzIiBdOyB0aGVuCisJCW9wdHM9Ii1iIgorCWVsc2UKKwkJb3B0cz0iJDMiCisJZmkKKworCWdpdCBjaGVja291dCAkb3B0cyAkZXhwX2JyYW5jaCAkZXhwX3NoYSAmJgorCisJdGVzdCAkZXhwX3JlZiA9ICQoZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBIRUFEKSAmJgorCXRlc3QgJGV4cF9zaGEgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKK30KKwordGVzdF9kaXJ0eV91bm1lcmdlYWJsZSgpIHsKKwkhIGdpdCBkaWZmIC0tZXhpdC1jb2RlID4vZGV2L251bGwKK30KKworc2V0dXBfZGlydHlfdW5tZXJnZWFibGUoKSB7CisJZWNobyA+PmZpbGUxIGNoYW5nZTIKK30KKwordGVzdF9kaXJ0eV9tZXJnZWFibGUoKSB7CisJISBnaXQgZGlmZiAtLWNhY2hlZCAtLWV4aXQtY29kZSA+L2Rldi9udWxsCit9CisKK3NldHVwX2RpcnR5X21lcmdlYWJsZSgpIHsKKwllY2hvID5maWxlMiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGZpbGUxICYmCisJSEVBRDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwl0ZXN0X2NvbW1pdCBjaGFuZ2UxIGZpbGUxICYmCisJSEVBRDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwlnaXQgYnJhbmNoIC1tIGJyYW5jaDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYSBuZXcgYnJhbmNoLCBzZXQgdG8gSEVBRCcgJworCWRvX2NoZWNrb3V0IGJyYW5jaDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYSBuZXcgYnJhbmNoLCBzZXQgdG8gYW4gZXhwbGljaXQgcmVmJyAnCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwlnaXQgYnJhbmNoIC1EIGJyYW5jaDIgJiYKKworCWRvX2NoZWNrb3V0IGJyYW5jaDIgJEhFQUQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHRvIGEgbmV3IGJyYW5jaCB3aXRoIHVubWVyZ2VhYmxlIGNoYW5nZXMgZmFpbHMnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCisJIyBjbGVhbiB1cCBmcm9tIHByZXZpb3VzIHRlc3QKKwlnaXQgYnJhbmNoIC1EIGJyYW5jaDIgJiYKKworCXNldHVwX2RpcnR5X3VubWVyZ2VhYmxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEgJiYKKwl0ZXN0X2RpcnR5X3VubWVyZ2VhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1mIC1iIHRvIGEgbmV3IGJyYW5jaCB3aXRoIHVubWVyZ2VhYmxlIGNoYW5nZXMgZGlzY2FyZHMgY2hhbmdlcycgJworCSMgc3RpbGwgZGlydHkgYW5kIG9uIGJyYW5jaDEKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAiLWYgLWIiICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF9kaXJ0eV91bm1lcmdlYWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiB0byBhIG5ldyBicmFuY2ggcHJlc2VydmVzIG1lcmdlYWJsZSBjaGFuZ2VzJyAnCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKworCSMgY2xlYW4gdXAgZnJvbSBwcmV2aW91cyB0ZXN0CisJZ2l0IGJyYW5jaCAtRCBicmFuY2gyICYmCisKKwlzZXR1cF9kaXJ0eV9tZXJnZWFibGUgJiYKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAmJgorCXRlc3RfZGlydHlfbWVyZ2VhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1mIC1iIHRvIGEgbmV3IGJyYW5jaCB3aXRoIG1lcmdlYWJsZSBjaGFuZ2VzIGRpc2NhcmRzIGNoYW5nZXMnICcKKwkjIGNsZWFuIHVwIGZyb20gcHJldmlvdXMgdGVzdAorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwkjIGNsZWFuIHVwIGZyb20gcHJldmlvdXMgdGVzdAorCWdpdCBicmFuY2ggLUQgYnJhbmNoMiAmJgorCisJc2V0dXBfZGlydHlfbWVyZ2VhYmxlICYmCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEgIi1mIC1iIiAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3RfZGlydHlfbWVyZ2VhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHRvIGFuIGV4aXN0aW5nIGJyYW5jaCBmYWlscycgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gQHstMX0gZmFpbHMgd2l0aCB0aGUgcmlnaHQgYnJhbmNoIG5hbWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCWdpdCBjaGVja291dCBicmFuY2gyICYmCisJZWNobyAgPmV4cGVjdCAiZmF0YWw6IEEgYnJhbmNoIG5hbWVkICdcJydicmFuY2gxJ1wnJyBhbHJlYWR5IGV4aXN0cy4iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC1iIEB7LTF9IDI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtQiB0byBhbiBleGlzdGluZyBicmFuY2ggcmVzZXRzIGJyYW5jaCB0byBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKworCWRvX2NoZWNrb3V0IGJyYW5jaDIgIiIgLUIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIGZyb20gZGV0YWNoZWQgSEVBRCByZXNldHMgYnJhbmNoIHRvIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwlkb19jaGVja291dCBicmFuY2gyICIiIC1CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1CIHRvIGFuIGV4aXN0aW5nIGJyYW5jaCB3aXRoIGFuIGV4cGxpY2l0IHJlZiByZXNldHMgYnJhbmNoIHRvIHRoYXQgcmVmJyAnCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKworCWRvX2NoZWNrb3V0IGJyYW5jaDIgJEhFQUQxIC1CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1CIHRvIGFuIGV4aXN0aW5nIGJyYW5jaCB3aXRoIHVubWVyZ2VhYmxlIGNoYW5nZXMgZmFpbHMnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCisJc2V0dXBfZGlydHlfdW5tZXJnZWFibGUgJiYKKwl0ZXN0X211c3RfZmFpbCBkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAtQiAmJgorCXRlc3RfZGlydHlfdW5tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWYgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHdpdGggdW5tZXJnZWFibGUgY2hhbmdlcyBkaXNjYXJkcyBjaGFuZ2VzJyAnCisJIyBzdGlsbCBkaXJ0eSBhbmQgb24gYnJhbmNoMQorCWRvX2NoZWNrb3V0IGJyYW5jaDIgJEhFQUQxICItZiAtQiIgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X2RpcnR5X3VubWVyZ2VhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1CIHRvIGFuIGV4aXN0aW5nIGJyYW5jaCBwcmVzZXJ2ZXMgbWVyZ2VhYmxlIGNoYW5nZXMnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCisJc2V0dXBfZGlydHlfbWVyZ2VhYmxlICYmCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEgLUIgJiYKKwl0ZXN0X2RpcnR5X21lcmdlYWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtZiAtQiB0byBhbiBleGlzdGluZyBicmFuY2ggd2l0aCBtZXJnZWFibGUgY2hhbmdlcyBkaXNjYXJkcyBjaGFuZ2VzJyAnCisJIyBjbGVhbiB1cCBmcm9tIHByZXZpb3VzIHRlc3QKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCisJc2V0dXBfZGlydHlfbWVyZ2VhYmxlICYmCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEgIi1mIC1CIiAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3RfZGlydHlfbWVyZ2VhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIDxkZXNjcmliZT4nICcKKwlnaXQgdGFnIC1mIC1tICJGaXJzdCBjb21taXQiIGluaXRpYWwgaW5pdGlhbCAmJgorCWdpdCBjaGVja291dCAtZiBjaGFuZ2UxICYmCisJbmFtZT0kKGdpdCBkZXNjcmliZSkgJiYKKwlnaXQgY2hlY2tvdXQgLWIgJG5hbWUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjaGFuZ2UxICYmCisJZWNobyAicmVmcy9oZWFkcy8kbmFtZSIgPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtQiB0byB0aGUgY3VycmVudCBicmFuY2ggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCWdpdCBjaGVja291dCAtQiBicmFuY2gxLXNjcmF0Y2ggJiYKKworCXNldHVwX2RpcnR5X21lcmdlYWJsZSAmJgorCWdpdCBjaGVja291dCAtQiBicmFuY2gxLXNjcmF0Y2ggaW5pdGlhbCAmJgorCXRlc3RfZGlydHlfbWVyZ2VhYmxlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAxOS1jaGVja291dC1hbWJpZ3VvdXMtcmVmLnNoIGIvdC90MjAxOS1jaGVja291dC1hbWJpZ3VvdXMtcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI5OWQ1MTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDE5LWNoZWNrb3V0LWFtYmlndW91cy1yZWYuc2gKQEAgLTAsMCArMSw1OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IGhhbmRsaW5nIG9mIGFtYmlndW91cyAoYnJhbmNoL3RhZykgcmVmcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhbWJpZ3VvdXMgcmVmcycgJworCXRlc3RfY29tbWl0IGJyYW5jaCBmaWxlICYmCisJZ2l0IGJyYW5jaCBhbWJpZ3VpdHkgJiYKKwlnaXQgYnJhbmNoIHZhZ3VlbmVzcyAmJgorCXRlc3RfY29tbWl0IHRhZyBmaWxlICYmCisJZ2l0IHRhZyBhbWJpZ3VpdHkgJiYKKwlnaXQgdGFnIHZhZ3VlbmVzcyBIRUFEOmZpbGUgJiYKKwl0ZXN0X2NvbW1pdCBvdGhlciBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGFtYmlndW91cyByZWYgc3VjY2VlZHMnICcKKwlnaXQgY2hlY2tvdXQgYW1iaWd1aXR5ID5zdGRvdXQgMj5zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgcHJvZHVjZXMgYW1iaWd1aXR5IHdhcm5pbmcnICcKKwlncmVwICJ3YXJuaW5nLiphbWJpZ3VvdXMiIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBjaG9vc2VzIGJyYW5jaCBvdmVyIHRhZycgJworCWVjaG8gcmVmcy9oZWFkcy9hbWJpZ3VpdHkgPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCByZXBvcnRzIHN3aXRjaCB0byBicmFuY2gnICcKKwl0ZXN0X2kxOG5ncmVwICJTd2l0Y2hlZCB0byBicmFuY2giIHN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiXkhFQUQgaXMgbm93IGF0IiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdmFndWUgcmVmIHN1Y2NlZWRzJyAnCisJZ2l0IGNoZWNrb3V0IHZhZ3VlbmVzcyA+c3Rkb3V0IDI+c3RkZXJyICYmCisJdGVzdF9zZXRfcHJlcmVxIFZBR1VFTkVTU19TVUNDRVNTCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVkFHVUVORVNTX1NVQ0NFU1MgJ2NoZWNrb3V0IHByb2R1Y2VzIGFtYmlndWl0eSB3YXJuaW5nJyAnCisJZ3JlcCAid2FybmluZy4qYW1iaWd1b3VzIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBWQUdVRU5FU1NfU1VDQ0VTUyAnY2hlY2tvdXQgY2hvb3NlcyBicmFuY2ggb3ZlciB0YWcnICcKKwllY2hvIHJlZnMvaGVhZHMvdmFndWVuZXNzID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBWQUdVRU5FU1NfU1VDQ0VTUyAnY2hlY2tvdXQgcmVwb3J0cyBzd2l0Y2ggdG8gYnJhbmNoJyAnCisJdGVzdF9pMThuZ3JlcCAiU3dpdGNoZWQgdG8gYnJhbmNoIiBzdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIl5IRUFEIGlzIG5vdyBhdCIgc3RkZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAyMC1jaGVja291dC1kZXRhY2guc2ggYi90L3QyMDIwLWNoZWNrb3V0LWRldGFjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MTAwNTM3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyMC1jaGVja291dC1kZXRhY2guc2gKQEAgLTAsMCArMSwxNjUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBpbnRvIGRldGFjaGVkIEhFQUQgc3RhdGUnCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfZGV0YWNoZWQgKCkgeworCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCA+L2Rldi9udWxsCit9CisKK2NoZWNrX25vdF9kZXRhY2hlZCAoKSB7CisJZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEID4vZGV2L251bGwKK30KKworUFJFVl9IRUFEX0RFU0M9J1ByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzJworY2hlY2tfb3JwaGFuX3dhcm5pbmcoKSB7CisJdGVzdF9pMThuZ3JlcCAieW91IGFyZSBsZWF2aW5nICQyIGJlaGluZCIgIiQxIiAmJgorCXRlc3RfaTE4bmdyZXAgISAiJFBSRVZfSEVBRF9ERVNDIiAiJDEiCit9CitjaGVja19ub19vcnBoYW5fd2FybmluZygpIHsKKwl0ZXN0X2kxOG5ncmVwICEgInlvdSBhcmUgbGVhdmluZyAuKiBjb21taXQuKmJlaGluZCIgIiQxIiAmJgorCXRlc3RfaTE4bmdyZXAgIiRQUkVWX0hFQURfREVTQyIgIiQxIgorfQorCityZXNldCAoKSB7CisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWNoZWNrX25vdF9kZXRhY2hlZAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmIGdpdCB0YWcgLWQgdGhyZWUgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyICYmIGdpdCB0YWcgLWQgZm91ciAmJgorCWdpdCBicmFuY2ggYnJhbmNoICYmCisJZ2l0IHRhZyB0YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYnJhbmNoIGRvZXMgbm90IGRldGFjaCcgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaCAmJgorCWNoZWNrX25vdF9kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB0YWcgZGV0YWNoZXMnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCB0YWcgJiYKKwljaGVja19kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBicmFuY2ggYnkgZnVsbCBuYW1lIGRldGFjaGVzJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgcmVmcy9oZWFkcy9icmFuY2ggJiYKKwljaGVja19kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBub24tcmVmIGRldGFjaGVzJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgYnJhbmNoXiAmJgorCWNoZWNrX2RldGFjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHJlZl4wIGRldGFjaGVzJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgYnJhbmNoXjAgJiYKKwljaGVja19kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLWRldGFjaCBkZXRhY2hlcycgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIGJyYW5jaCAmJgorCWNoZWNrX2RldGFjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tZGV0YWNoIHdpdGhvdXQgYnJhbmNoIG5hbWUnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCAmJgorCWNoZWNrX2RldGFjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tZGV0YWNoIGVycm9ycyBvdXQgZm9yIG5vbi1jb21taXQnICcKKwlyZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLWRldGFjaCBvbmVee3RyZWV9ICYmCisJY2hlY2tfbm90X2RldGFjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tZGV0YWNoIGVycm9ycyBvdXQgZm9yIGV4dHJhIGFyZ3VtZW50JyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIHRhZyBvbmUudCAmJgorCWNoZWNrX25vdF9kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLWRldGFjaGVkIGFuZCAtYiBhcmUgaW5jb21wYXRpYmxlJyAnCisJcmVzZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1kZXRhY2ggLWIgbmV3YnJhbmNoIHRhZyAmJgorCWNoZWNrX25vdF9kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLWRldGFjaCBtb3ZlcyBIRUFEJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIHR3byAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2FybnMgb24gb3JwaGFuIGNvbW1pdHMnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCB0d28gJiYKKwllY2hvIGNvbnRlbnQgPm9ycGhhbiAmJgorCWdpdCBhZGQgb3JwaGFuICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBvcnBoYW4xICYmCisJZWNobyBuZXcgY29udGVudCA+b3JwaGFuICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBvcnBoYW4yICYmCisJb3JwaGFuMj0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIDI+c3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdhcm5zIG9uIG9ycGhhbiBjb21taXRzOiBvdXRwdXQnICcKKwljaGVja19vcnBoYW5fd2FybmluZyBzdGRlcnIgIjIgY29tbWl0cyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2FybnMgb3JwaGFuaW5nIDEgb2YgMiBjb21taXRzJyAnCisJZ2l0IGNoZWNrb3V0ICIkb3JwaGFuMiIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gMj5zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2FybnMgb3JwaGFuaW5nIDEgb2YgMiBjb21taXRzOiBvdXRwdXQnICcKKwljaGVja19vcnBoYW5fd2FybmluZyBzdGRlcnIgIjEgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBkb2VzIG5vdCB3YXJuIGxlYXZpbmcgcmVmIHRpcCcgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIHR3byAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgMj5zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZG9lcyBub3Qgd2FybiBsZWF2aW5nIHJlZiB0aXAnICcKKwljaGVja19ub19vcnBoYW5fd2FybmluZyBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZG9lcyBub3Qgd2FybiBsZWF2aW5nIHJlYWNoYWJsZSBjb21taXQnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCBIRUFEXiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgMj5zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZG9lcyBub3Qgd2FybiBsZWF2aW5nIHJlYWNoYWJsZSBjb21taXQnICcKKwljaGVja19ub19vcnBoYW5fd2FybmluZyBzdGRlcnIKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworWW91ciBicmFuY2ggaXMgYmVoaW5kICdtYXN0ZXInIGJ5IDEgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFja2luZyBjb3VudCBpcyBhY2N1cmF0ZSBhZnRlciBvcnBoYW4gY2hlY2snICcKKwlyZXNldCAmJgorCWdpdCBicmFuY2ggY2hpbGQgbWFzdGVyXiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmNoaWxkLnJlbW90ZSAuICYmCisJZ2l0IGNvbmZpZyBicmFuY2guY2hpbGQubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgY2hpbGReICYmCisJZ2l0IGNoZWNrb3V0IGNoaWxkID5zdGRvdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IHN0ZG91dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjEtY2hlY2tvdXQtb3ZlcndyaXRlLnNoIGIvdC90MjAyMS1jaGVja291dC1vdmVyd3JpdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWRhNjNlOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMjEtY2hlY2tvdXQtb3ZlcndyaXRlLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBtdXN0IG5vdCBvdmVyd3JpdGUgYW4gdW50cmFja2VkIG9iamVjdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCW1rZGlyIC1wIGEvYi9jICYmCisJPmEvYi9jL2QgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZ2l0IHRhZyBzdGFydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYSBjb21taXQgd2hlcmUgZGlyIGEvYiBjaGFuZ2VkIHRvIGZpbGUnICcKKworCWdpdCBjaGVja291dCAtYiBmaWxlICYmCisJcm0gLXJmIGEvYiAmJgorCT5hL2IgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiZGlyIHRvIGZpbGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGNvbW1pdCB3aXRoIGRpciBtdXN0IG5vdCByZW1vdmUgdW50cmFja2VkIGEvYicgJworCisJZ2l0IHJtIC0tY2FjaGVkIGEvYiAmJgorCWdpdCBjb21taXQgLW0gInVuLXRyYWNrIHRoZSBmaWxlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBzdGFydCAmJgorCXRlc3QgLWYgYS9iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NyZWF0ZSBhIGNvbW1pdCB3aGVyZSBkaXIgYS9iIGNoYW5nZWQgdG8gc3ltbGluaycgJworCisJcm0gLXJmIGEvYiAmJgkjIGNsZWFudXAgaWYgcHJldmlvdXMgdGVzdCBmYWlsZWQKKwlnaXQgY2hlY2tvdXQgLWYgLWIgc3ltbGluayBzdGFydCAmJgorCXJtIC1yZiBhL2IgJiYKKwlsbiAtcyBmb28gYS9iICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gImRpciB0byBzeW1saW5rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjaGVja291dCBjb21taXQgd2l0aCBkaXIgbXVzdCBub3QgcmVtb3ZlIHVudHJhY2tlZCBhL2InICcKKworCWdpdCBybSAtLWNhY2hlZCBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJ1bi10cmFjayB0aGUgc3ltbGluayIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgc3RhcnQgJiYKKwl0ZXN0IC1oIGEvYgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjItY2hlY2tvdXQtcGF0aHMuc2ggYi90L3QyMDIyLWNoZWNrb3V0LXBhdGhzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2MDkwZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDIyLWNoZWNrb3V0LXBhdGhzLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCAkdHJlZSAtLSAkcGF0aHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgZGlyICYmCisJPmRpci9tYXN0ZXIgJiYKKwllY2hvIGNvbW1vbiA+ZGlyL2NvbW1vbiAmJgorCWdpdCBhZGQgZGlyL21hc3RlciBkaXIvY29tbW9uICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIm1hc3RlciBoYXMgZGlyL21hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV4dCAmJgorCWdpdCBtdiBkaXIvbWFzdGVyIGRpci9uZXh0MCAmJgorCWVjaG8gbmV4dCA+ZGlyL25leHQxICYmCisJZ2l0IGFkZCBkaXIgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAibmV4dCBoYXMgZGlyL25leHQgYnV0IG5vdCBkaXIvbWFzdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyBvdXQgcGF0aHMgb3V0IG9mIGEgdHJlZSBkb2VzIG5vdCBjbG9iYmVyIHVucmVsYXRlZCBwYXRocycgJworCWdpdCBjaGVja291dCBuZXh0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGRpci9uZXh0MCAmJgorCWNhdCBkaXIvY29tbW9uID5leHBlY3QuY29tbW9uICYmCisJZWNobyBtb2RpZmllZCA+ZXhwZWN0Lm5leHQxICYmCisJY2F0IGV4cGVjdC5uZXh0MSA+ZGlyL25leHQxICYmCisJZWNobyB1bnRyYWNrZWQgPmV4cGVjdC5uZXh0MiAmJgorCWNhdCBleHBlY3QubmV4dDIgPmRpci9uZXh0MiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciBkaXIgJiYKKworCXRlc3RfY21wIGV4cGVjdC5jb21tb24gZGlyL2NvbW1vbiAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpci9tYXN0ZXIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIgZGlyL21hc3RlciAmJgorCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlyL25leHQwICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5leHQxIGRpci9uZXh0MSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpci9uZXh0MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZGlyL25leHQyICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5leHQyIGRpci9uZXh0MgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjMtY2hlY2tvdXQtbS5zaCBiL3QvdDIwMjMtY2hlY2tvdXQtbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZTE4OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyMy1jaGVja291dC1tLnNoCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCAtbSAtLSA8Y29uZmxpY3RlZCBwYXRoPgorCitFbnN1cmVzIHRoYXQgY2hlY2tvdXQgLW0gb24gYSByZXNvbHZlZCBmaWxlIHJlc3RvcmVzIHRoZSBjb25mbGljdGVkIGZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X2NvbW1pdCBib3RoLnR4dCBib3RoLnR4dCBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCB0b3BpYyAmJgorCXRlc3RfY29tbWl0IG1vZGlmaWVkX2luX21hc3RlciBib3RoLnR4dCBpbl9tYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBhZGRlZF9pbl9tYXN0ZXIgZWFjaC50eHQgaW5fbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJdGVzdF9jb21taXQgbW9kaWZpZWRfaW5fdG9waWMgYm90aC50eHQgaW5fdG9waWMgJiYKKwl0ZXN0X2NvbW1pdCBhZGRlZF9pbl90b3BpYyBlYWNoLnR4dCBpbl90b3BpYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbWVyZ2UgbWFzdGVyJyAnCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlcgorJworCitjbGVhbl9icmFuY2huYW1lcyAoKSB7CisJIyBSZW1vdmUgYnJhbmNoIG5hbWVzIGFmdGVyIGNvbmZsaWN0IGxpbmVzCisJc2VkICdzL15cKFs8Pl1cezUsXH1cKSAuKiQvXDEvJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctbSByZXN0b3JlcyAyLXdheSBjb25mbGljdGVkK3Jlc29sdmVkIGZpbGUnICcKKwljcCBlYWNoLnR4dCBlYWNoLnR4dC5jb25mbGljdGVkICYmCisJZWNobyByZXNvbHZlZCA+ZWFjaC50eHQgJiYKKwlnaXQgYWRkIGVhY2gudHh0ICYmCisJZ2l0IGNoZWNrb3V0IC1tIC0tIGVhY2gudHh0ICYmCisJY2xlYW5fYnJhbmNobmFtZXMgPGVhY2gudHh0ID5lYWNoLnR4dC5jbGVhbmVkICYmCisJY2xlYW5fYnJhbmNobmFtZXMgPGVhY2gudHh0LmNvbmZsaWN0ZWQgPmVhY2gudHh0LmNvbmZsaWN0ZWQuY2xlYW5lZCAmJgorCXRlc3RfY21wIGVhY2gudHh0LmNvbmZsaWN0ZWQuY2xlYW5lZCBlYWNoLnR4dC5jbGVhbmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1tIHJlc3RvcmVzIDMtd2F5IGNvbmZsaWN0ZWQrcmVzb2x2ZWQgZmlsZScgJworCWNwIGJvdGgudHh0IGJvdGgudHh0LmNvbmZsaWN0ZWQgJiYKKwllY2hvIHJlc29sdmVkID5ib3RoLnR4dCAmJgorCWdpdCBhZGQgYm90aC50eHQgJiYKKwlnaXQgY2hlY2tvdXQgLW0gLS0gYm90aC50eHQgJiYKKwljbGVhbl9icmFuY2huYW1lcyA8Ym90aC50eHQgPmJvdGgudHh0LmNsZWFuZWQgJiYKKwljbGVhbl9icmFuY2huYW1lcyA8Ym90aC50eHQuY29uZmxpY3RlZCA+Ym90aC50eHQuY29uZmxpY3RlZC5jbGVhbmVkICYmCisJdGVzdF9jbXAgYm90aC50eHQuY29uZmxpY3RlZC5jbGVhbmVkIGJvdGgudHh0LmNsZWFuZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDMwLXVucmVzb2x2ZS1pbmZvLnNoIGIvdC90MjAzMC11bnJlc29sdmUtaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMjYyMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAzMC11bnJlc29sdmUtaW5mby5zaApAQCAtMCwwICsxLDE3MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3VuZG9pbmcgcmVzb2x1dGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX3Jlc29sdmVfdW5kbyAoKSB7CisJbXNnPSQxCisJc2hpZnQKKwl3aGlsZSBjYXNlICQjIGluCisJMCkJYnJlYWsgOzsKKwkxfDJ8MykJZGllICJCdWcgaW4gY2hlY2stcmVzb2x2ZS11bmRvIHRlc3QiIDs7CisJZXNhYworCWRvCisJCXBhdGg9JDEKKwkJc2hpZnQKKwkJZm9yIHN0YWdlIGluIDEgMiAzCisJCWRvCisJCQlzaGExPSQxCisJCQlzaGlmdAorCQkJY2FzZSAiJHNoYTEiIGluCisJCQknJykgY29udGludWUgOzsKKwkJCWVzYWMKKwkJCXNoYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkc2hhMSIpCisJCQlwcmludGYgIjEwMDY0NCAlcyAlc1x0JXNcbiIgJHNoYTEgJHN0YWdlICRwYXRoCisJCWRvbmUKKwlkb25lID4iJG1zZy5leHBlY3QiICYmCisJZ2l0IGxzLWZpbGVzIC0tcmVzb2x2ZS11bmRvID4iJG1zZy5hY3R1YWwiICYmCisJdGVzdF9jbXAgIiRtc2cuZXhwZWN0IiAiJG1zZy5hY3R1YWwiCit9CisKK3ByaW1lX3Jlc29sdmVfdW5kbyAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBzZWNvbmReMCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0aGlyZF4wICYmCisJZWNobyBtZXJnZSBkb2VzIG5vdCBsZWF2ZSBhbnl0aGluZyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBlbXB0eSAmJgorCWVjaG8gZGlmZmVyZW50ID5maS9sZSAmJgorCWdpdCBhZGQgZmkvbGUgJiYKKwllY2hvIHJlc29sdmluZyByZWNvcmRzICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIHJlY29yZGVkIGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGZpICYmCisJdGVzdF9jb21taXQgaW5pdGlhbCBmaS9sZSBmaXJzdCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCWdpdCBicmFuY2ggYW5vdGhlciAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBmaS9sZSBzZWNvbmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCXRlc3RfY29tbWl0IHRoaXJkIGZpL2xlIHRoaXJkICYmCisJZ2l0IGNoZWNrb3V0IGFub3RoZXIgJiYKKwl0ZXN0X2NvbW1pdCBmb3VydGggZmkvbGUgZm91cnRoICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVjb3JkcyBzd2l0Y2ggY2xlYXJzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBtZXJnZWQgJiYKKwllY2hvIGNvbW1pdHRpbmcga2VlcHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8ga2VwdCBmaS9sZSBpbml0aWFsOmZpL2xlIHNlY29uZDpmaS9sZSB0aGlyZDpmaS9sZSAmJgorCWdpdCBjaGVja291dCBzZWNvbmReMCAmJgorCWVjaG8gc3dpdGNoaW5nIGNsZWFycyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBjbGVhcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlY29yZHMgcmVzZXQgY2xlYXJzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBtZXJnZWQgJiYKKwllY2hvIGNvbW1pdHRpbmcga2VlcHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8ga2VwdCBmaS9sZSBpbml0aWFsOmZpL2xlIHNlY29uZDpmaS9sZSB0aGlyZDpmaS9sZSAmJgorCisJZWNobyBtZXJnZSBjbGVhcnMgdXBmcm9udCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmb3VydGheMCAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBudWtlZCAmJgorCisJZ2l0IHJtIC1mIGZpL2xlICYmCisJZWNobyByZXNvbHZpbmcgcmVjb3JkcyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyByZWNvcmRlZCBmaS9sZSBpbml0aWFsOmZpL2xlIEhFQUQ6ZmkvbGUgZm91cnRoOmZpL2xlICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyByZXNldHRpbmcgZGlzY2FyZHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8gZGlzY2FyZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsdW1iaW5nIGNsZWFycycgJworCXByaW1lX3Jlc29sdmVfdW5kbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbWVyZ2VkICYmCisJZWNobyBjb21taXR0aW5nIGtlZXBzICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGtlcHQgZmkvbGUgaW5pdGlhbDpmaS9sZSBzZWNvbmQ6ZmkvbGUgdGhpcmQ6ZmkvbGUgJiYKKworCWVjaG8gcGx1bWJpbmcgY2xlYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tY2xlYXItcmVzb2x2ZS11bmRvICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGNsZWFyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlY29yZHMgY2hlY2tvdXQgLW0gdW5kb2VzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJZ2l0IGRpZmYgSEVBRCAmJgorCWdpdCBjaGVja291dCAtLWNvbmZsaWN0PW1lcmdlIGZpL2xlICYmCisJZWNobyBjaGVja291dCB1c2VkIHRoZSByZWNvcmQgYW5kIHJlbW92ZWQgaXQgJiYKKwljaGVja19yZXNvbHZlX3VuZG8gcmVtb3ZlZCAmJgorCWVjaG8gdGhlIGluZGV4IGFuZCB0aGUgd29yayB0cmVlIGlzIHVubWVyZ2VkIGFnYWluICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCWdyZXAgIl4rKzw8PDw8PDwiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bm1lcmdlIHdpdGggcGx1bWJpbmcnICcKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tdW5yZXNvbHZlIGZpL2xlICYmCisJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgYW5kIHJlcmVyZSBmb3JnZXQnICcKKwlta2RpciAuZ2l0L3JyLWNhY2hlICYmCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJZWNobyByZWNvcmQgdGhlIHJlc29sdXRpb24gJiYKKwlnaXQgcmVyZXJlICYmCisJcmVyZXJlX2lkPSQoY2QgLmdpdC9yci1jYWNoZSAmJiBlY2hvICovcG9zdGltYWdlKSAmJgorCXJlcmVyZV9pZD0ke3JlcmVyZV9pZCUvcG9zdGltYWdlfSAmJgorCXRlc3QgLWYgLmdpdC9yci1jYWNoZS8kcmVyZXJlX2lkL3Bvc3RpbWFnZSAmJgorCWdpdCBjaGVja291dCAtbSBmaS9sZSAmJgorCWVjaG8gcmVzdXJyZWN0IHRoZSBjb25mbGljdCAmJgorCWdyZXAgIl49PT09PT09IiBmaS9sZSAmJgorCWVjaG8gcmVyZXNvbHZlIHRoZSBjb25mbGljdCAmJgorCWdpdCByZXJlcmUgJiYKKwl0ZXN0ICJ6JChjYXQgZmkvbGUpIiA9IHpkaWZmZXJlbnQgJiYKKwllY2hvIHJlZ2lzdGVyIHRoZSByZXNvbHV0aW9uIGFnYWluICYmCisJZ2l0IGFkZCBmaS9sZSAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBrZXB0IGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCWdpdCByZXJlcmUgZm9yZ2V0IGZpL2xlICYmCisJISB0ZXN0IC1mIC5naXQvcnItY2FjaGUvJHJlcmVyZV9pZC9wb3N0aW1hZ2UgJiYKKwl0ciAiXDAiICJcbiIgPC5naXQvTUVSR0VfUlIgPmFjdHVhbCAmJgorCWVjaG8gIiRyZXJlcmVfaWQJZmkvbGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSBhbmQgcmVyZXJlIGZvcmdldCAoc3ViZGlyZWN0b3J5KScgJworCXJtIC1mciAuZ2l0L3JyLWNhY2hlICYmCisJbWtkaXIgLmdpdC9yci1jYWNoZSAmJgorCXByaW1lX3Jlc29sdmVfdW5kbyAmJgorCWVjaG8gcmVjb3JkIHRoZSByZXNvbHV0aW9uICYmCisJKGNkIGZpICYmIGdpdCByZXJlcmUpICYmCisJcmVyZXJlX2lkPSQoY2QgLmdpdC9yci1jYWNoZSAmJiBlY2hvICovcG9zdGltYWdlKSAmJgorCXJlcmVyZV9pZD0ke3JlcmVyZV9pZCUvcG9zdGltYWdlfSAmJgorCXRlc3QgLWYgLmdpdC9yci1jYWNoZS8kcmVyZXJlX2lkL3Bvc3RpbWFnZSAmJgorCShjZCBmaSAmJiBnaXQgY2hlY2tvdXQgLW0gbGUpICYmCisJZWNobyByZXN1cnJlY3QgdGhlIGNvbmZsaWN0ICYmCisJZ3JlcCAiXj09PT09PT0iIGZpL2xlICYmCisJZWNobyByZXJlc29sdmUgdGhlIGNvbmZsaWN0ICYmCisJKGNkIGZpICYmIGdpdCByZXJlcmUpICYmCisJdGVzdCAieiQoY2F0IGZpL2xlKSIgPSB6ZGlmZmVyZW50ICYmCisJZWNobyByZWdpc3RlciB0aGUgcmVzb2x1dGlvbiBhZ2FpbiAmJgorCShjZCBmaSAmJiBnaXQgYWRkIGxlKSAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBrZXB0IGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCShjZCBmaSAmJiBnaXQgcmVyZXJlIGZvcmdldCBsZSkgJiYKKwkhIHRlc3QgLWYgLmdpdC9yci1jYWNoZS8kcmVyZXJlX2lkL3Bvc3RpbWFnZSAmJgorCXRyICJcMCIgIlxuIiA8LmdpdC9NRVJHRV9SUiA+YWN0dWFsICYmCisJZWNobyAiJHJlcmVyZV9pZAlmaS9sZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDUwLWdpdC1kaXItcmVsYXRpdmUuc2ggYi90L3QyMDUwLWdpdC1kaXItcmVsYXRpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjFmNDY1OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwNTAtZ2l0LWRpci1yZWxhdGl2ZS5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgcHJvYmxlbXMgd2l0aCByZWxhdGl2ZSBHSVRfRElSCisKK1RoaXMgdGVzdCBjcmVhdGVzIGEgd29ya2luZyB0cmVlIHN0YXRlIHdpdGggYSBmaWxlIGFuZCBzdWJkaXI6CisKKyAgdG9wIChjb21taXR0ZWQgc2V2ZXJhbCB0aW1lcykKKyAgc3ViZGlyIChhIHN1YmRpcmVjdG9yeSkKKworSXQgY3JlYXRlcyBhIGNvbW1pdC1ob29rIGFuZCB0ZXN0cyBpdCwgdGhlbiBtb3ZlcyAuZ2l0CitpbnRvIHRoZSBzdWJkaXIgd2hpbGUga2VlcGluZyB0aGUgd29ya3RyZWUgbG9jYXRpb24sCithbmQgdHJpZXMgY29tbWl0cyBmcm9tIHRoZSB0b3AgYW5kIHRoZSBzdWJkaXIsIGNoZWNraW5nCit0aGF0IHRoZSBjb21taXQtaG9vayBzdGlsbCBnZXRzIGNhbGxlZC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitDT01NSVRfRklMRT0iJChwd2QpL291dHB1dCIKK2V4cG9ydCBDT01NSVRfRklMRQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR0aW5nIHVwIHBvc3QtY29tbWl0IGhvb2snICcKK21rZGlyIC1wIC5naXQvaG9va3MgJiYKK2VjaG8gPi5naXQvaG9va3MvcG9zdC1jb21taXQgIiMhL2Jpbi9zaAordG91Y2ggXCJcJHtDT01NSVRfRklMRX1cIgorZWNobyBQb3N0IGNvbW1pdCBob29rIHdhcyBjYWxsZWQuIiAmJgorY2htb2QgK3ggLmdpdC9ob29rcy9wb3N0LWNvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQgaG9vayB1c2VkIG9yZGluYXJpbHknICcKK2VjaG8gaW5pdGlhbCA+dG9wICYmCitnaXQgYWRkIHRvcCAmJgorZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCit0ZXN0IC1yICIke0NPTU1JVF9GSUxFfSIKKycKKworcm0gLXJmICIke0NPTU1JVF9GSUxFfSIKK21rZGlyIHN1YmRpcgorbXYgLmdpdCBzdWJkaXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQtaG9vayBjcmVhdGVkIGFuZCB1c2VkIGZyb20gdG9wIGRpcicgJworZWNobyBjaGFuZ2VkID50b3AgJiYKK2dpdCAtLWdpdC1kaXIgc3ViZGlyLy5naXQgYWRkIHRvcCAmJgorZ2l0IC0tZ2l0LWRpciBzdWJkaXIvLmdpdCBjb21taXQgLW0gdG9wY29tbWl0ICYmCit0ZXN0IC1yICIke0NPTU1JVF9GSUxFfSIKKycKKworcm0gLXJmICIke0NPTU1JVF9GSUxFfSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQtaG9vayBmcm9tIHN1YiBkaXInICcKK2VjaG8gY2hhbmdlZCBhZ2FpbiA+dG9wICYmCitjZCBzdWJkaXIgJiYKK2dpdCAtLWdpdC1kaXIgLmdpdCAtLXdvcmstdHJlZSAuLiBhZGQgLi4vdG9wICYmCitnaXQgLS1naXQtZGlyIC5naXQgLS13b3JrLXRyZWUgLi4gY29tbWl0IC1tIHN1YmNvbW1pdCAmJgordGVzdCAtciAiJHtDT01NSVRfRklMRX0iCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwMC11cGRhdGUtY2FjaGUtYmFkcGF0aC5zaCBiL3QvdDIxMDAtdXBkYXRlLWNhY2hlLWJhZHBhdGguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmRmM2ZkZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDAtdXBkYXRlLWNhY2hlLWJhZHBhdGguc2gKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdXBkYXRlLWluZGV4IG5vbnNlbnNlLXBhdGggdGVzdC4KKworVGhpcyB0ZXN0IGNyZWF0ZXMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIGNhY2hlOgorCisgICAgcGF0aDAgICAgICAgLSBhIGZpbGUKKyAgICBwYXRoMSAgICAgICAtIGEgc3ltbGluaworICAgIHBhdGgyL2ZpbGUyIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDMvZmlsZTMgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKworYW5kIHRyaWVzIHRvIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdGhlIGZvbGxvd2luZzoKKworICAgIHBhdGgwL2ZpbGUwIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDEvZmlsZTEgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMiAgICAgICAtIGEgZmlsZQorICAgIHBhdGgzICAgICAgIC0gYSBzeW1saW5rCisKK0FsbCBvZiB0aGUgYXR0ZW1wdHMgc2hvdWxkIGZhaWwuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitta2RpciBwYXRoMiBwYXRoMworZGF0ZSA+cGF0aDAKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlsbiAtcyB4eXp6eSBwYXRoMQorZWxzZQorCWRhdGUgPiBwYXRoMQorZmkKK2RhdGUgPnBhdGgyL2ZpbGUyCitkYXRlID5wYXRoMy9maWxlMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0byBhZGQgdmFyaW91cyBwYXRocy4nIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLSBwYXRoMCBwYXRoMSBwYXRoMi9maWxlMiBwYXRoMy9maWxlMycKKworcm0gLWZyIHBhdGg/CisKK21rZGlyIHBhdGgwIHBhdGgxCitkYXRlID5wYXRoMgoraWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCWxuIC1zIGZyb3R6IHBhdGgzCitlbHNlCisJZGF0ZSA+IHBhdGgzCitmaQorZGF0ZSA+cGF0aDAvZmlsZTAKK2RhdGUgPnBhdGgxL2ZpbGUxCisKK2ZvciBwIGluIHBhdGgwL2ZpbGUwIHBhdGgxL2ZpbGUxIHBhdGgyIHBhdGgzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSAgICAiZ2l0IHVwZGF0ZS1pbmRleCB0byBhZGQgY29uZmxpY3RpbmcgcGF0aCAkcCBzaG91bGQgZmFpbC4iIFwKKwkgICAgInRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gJHAiCitkb25lCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDEtdXBkYXRlLWluZGV4LXJldXBkYXRlLnNoIGIvdC90MjEwMS11cGRhdGUtaW5kZXgtcmV1cGRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzhiY2U4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDEtdXBkYXRlLWluZGV4LXJldXBkYXRlLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHVwZGF0ZS1pbmRleCAtLWFnYWluIHRlc3QuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPiBleHBlY3RlZCA8PFxFT0YKKzEwMDY0NCAzYjE4ZTUxMmRiYTc5ZTRjODMwMGRkMDhhZWIzN2Y4ZTcyOGI4ZGFkIDAJZmlsZTEKKzEwMDY0NCA5ZGI4ODkzODU2YThhMDJlYWE3MzQ3MDA1NGI3YzFjNWE3YzgyZTQ3IDAJZmlsZTIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tYWRkJyBcCisJJ2VjaG8gaGVsbG8gd29ybGQgPmZpbGUxICYmCisJIGVjaG8gZ29vZGJ5ZSBwZW9wbGUgPmZpbGUyICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTEgZmlsZTIgJiYKKwkgZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50ICYmCisJIGNtcCBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1hZ2FpbicgXAorCSdybSAtZiBmaWxlMSAmJgorCWVjaG8gaGVsbG8gZXZlcnlib2R5ID5maWxlMiAmJgorCWlmIGdpdCB1cGRhdGUtaW5kZXggLS1hZ2FpbgorCXRoZW4KKwkJZWNobyBzaG91bGQgaGF2ZSByZWZ1c2VkIHRvIHJlbW92ZSBmaWxlMQorCQlleGl0IDEKKwllbHNlCisJCWVjaG8gaGFwcHkgLSBmYWlsZWQgYXMgZXhwZWN0ZWQKKwlmaSAmJgorCSBnaXQgbHMtZmlsZXMgLXMgPmN1cnJlbnQgJiYKKwkgY21wIGN1cnJlbnQgZXhwZWN0ZWQnCisKK2NhdCA+IGV4cGVjdGVkIDw8XEVPRgorMTAwNjQ0IDBmMWFlMTQyMmMyYmY0M2YxMTdkM2RiZDcxNWM5ODhhOWVkMjEwM2YgMAlmaWxlMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1hZ2FpbicgXAorCSdnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tYWdhaW4gJiYKKwkgZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50ICYmCisJIGNtcCBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCBjb21taXQnICdnaXQgY29tbWl0IC1tIGluaXRpYWwnCisKK2NhdCA+IGV4cGVjdGVkIDw8XEVPRgorMTAwNjQ0IDUzYWI0NDZjM2Y0ZTQyY2U5YmI3MjhhMGNjYjI4M2ExMDFiZTQ5NzkgMAlkaXIxL2ZpbGUzCisxMDA2NDQgMGYxYWUxNDIyYzJiZjQzZjExN2QzZGJkNzE1Yzk4OGE5ZWQyMTAzZiAwCWZpbGUyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCBhZ2FpbicgXAorCSdta2RpciAtcCBkaXIxICYmCisJZWNobyBoZWxsbyB3b3JsZCA+ZGlyMS9maWxlMyAmJgorCWVjaG8gZ29vZGJ5ZSBwZW9wbGUgPmZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMiBkaXIxL2ZpbGUzICYmCisJZWNobyBoZWxsbyBldmVyeWJvZHkgPmZpbGUyICYmCisJZWNobyBoYXBweSA+ZGlyMS9maWxlMyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZ2FpbiAmJgorCWdpdCBscy1maWxlcyAtcyA+Y3VycmVudCAmJgorCWNtcCBjdXJyZW50IGV4cGVjdGVkJworCitjYXQgPiBleHBlY3RlZCA8PFxFT0YKKzEwMDY0NCBkN2ZiM2Y2OTVmMDZjNzU5ZGJmM2FiMDAwNDZlN2NjMmRhMjJkMTBmIDAJZGlyMS9maWxlMworMTAwNjQ0IDBmMWFlMTQyMmMyYmY0M2YxMTdkM2RiZDcxNWM5ODhhOWVkMjEwM2YgMAlmaWxlMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS11cGRhdGUgZnJvbSBzdWJkaXInIFwKKwknZWNobyBub3Qgc28gaGFwcHkgPmZpbGUyICYmCisJKGNkIGRpcjEgJiYKKwljYXQgLi4vZmlsZTIgPmZpbGUzICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFnYWluCisJKSAmJgorCWdpdCBscy1maWxlcyAtcyA+Y3VycmVudCAmJgorCWNtcCBjdXJyZW50IGV4cGVjdGVkJworCitjYXQgPiBleHBlY3RlZCA8PFxFT0YKKzEwMDY0NCA1OTRmYjViYjE3NTlkOTA5OThlMmJmMmEzODI2MWFlOGUyNDNjNzYwIDAJZGlyMS9maWxlMworMTAwNjQ0IDBmMWFlMTQyMmMyYmY0M2YxMTdkM2RiZDcxNWM5ODhhOWVkMjEwM2YgMAlmaWxlMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS11cGRhdGUgd2l0aCBwYXRoc3BlYycgXAorCSdlY2hvIHZlcnkgaGFwcHkgPmZpbGUyICYmCisJY2F0IGZpbGUyID5kaXIxL2ZpbGUzICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFnYWluIGRpcjEvICYmCisJZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50ICYmCisJY21wIGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwMi11cGRhdGUtaW5kZXgtc3ltbGlua3Muc2ggYi90L3QyMTAyLXVwZGF0ZS1pbmRleC1zeW1saW5rcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZDBkMGEzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjEwMi11cGRhdGUtaW5kZXgtc3ltbGlua3Muc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBTaXh0CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCB1cGRhdGUtaW5kZXggb24gZmlsZXN5c3RlbSB3L28gc3ltbGlua3MgdGVzdC4KKworVGhpcyB0ZXN0cyB0aGF0IGdpdCB1cGRhdGUtaW5kZXgga2VlcHMgdGhlIHN5bWJvbGljIGxpbmsgcHJvcGVydHkKK2V2ZW4gaWYgYSBwbGFpbiBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUgaWYgY29yZS5zeW1saW5rcyBpcyBmYWxzZS4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydwcmVwYXJhdGlvbicgJworZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIGZhbHNlICYmCitsPSQocHJpbnRmIGZpbGUgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyAtLXN0ZGluKSAmJgorZWNobyAiMTIwMDAwICRsCXN5bWxpbmsiIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ21vZGlmeSB0aGUgc3ltYm9saWMgbGluaycgJworcHJpbnRmIG5ldy1maWxlID4gc3ltbGluayAmJgorZ2l0IHVwZGF0ZS1pbmRleCBzeW1saW5rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyd0aGUgaW5kZXggZW50cnkgbXVzdCBzdGlsbCBiZSBhIHN5bWJvbGljIGxpbmsnICcKK2Nhc2UgImBnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLWNhY2hlZCBzeW1saW5rYCIgaW4KKzEyMDAwMCIgIipzeW1saW5rKSBlY2hvIHBhc3M7OworKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLWNhY2hlZCBzeW1saW5rOyAoZXhpdCAxKTs7Citlc2FjJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDMtdXBkYXRlLWluZGV4LWlnbm9yZS1taXNzaW5nLnNoIGIvdC90MjEwMy11cGRhdGUtaW5kZXgtaWdub3JlLW1pc3Npbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzMyNjk0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDMtdXBkYXRlLWluZGV4LWlnbm9yZS1taXNzaW5nLnNoCkBAIC0wLDAgKzEsODkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1cGRhdGUtaW5kZXggd2l0aCBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBiYXNpY3MgJworCT5vbmUgJiYKKwk+dHdvICYmCisJPnRocmVlICYmCisKKwkjIG5lZWQgLS1hZGQgd2hlbiBhZGRpbmcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IG9uZSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzKSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSAmJgorCXRlc3Qgem9uZSA9ICJ6JChnaXQgbHMtZmlsZXMpIiAmJgorCisJIyB1cGRhdGUtaW5kZXggaXMgYXRvbWljCisJZWNobyAxID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IG9uZSB0d28gJiYKKwllY2hvICJNCW9uZSIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1zdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb25lIHR3byB0aHJlZSAmJgorCWZvciBpIGluIG9uZSB0aHJlZSB0d287IGRvIGVjaG8gJGk7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF90aWNrICYmCisJKAorCQl0ZXN0X2NyZWF0ZV9yZXBvIHh5enp5ICYmCisJCWNkIHh5enp5ICYmCisJCT5maWxlICYmCisJCWdpdCBhZGQgZmlsZQorCQlnaXQgY29tbWl0IC1tICJzdWIgaW5pdGlhbCIKKwkpICYmCisJZ2l0IGFkZCB4eXp6eSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZWNobyAyID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWVjaG8gMSA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlybSAtZiB0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVubWVyZ2VkIC0tcmVmcmVzaCcgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWluZm89JChnaXQgbHMtZmlsZXMgLXMgb25lIHwgc2VkIC1lICJzLyAwCS8gMQkvIikgJiYKKwlnaXQgcm0gLS1jYWNoZWQgb25lICYmCisJZWNobyAiJGluZm8iIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS11bm1lcmdlZCAtLXJlZnJlc2ggJiYKKwllY2hvIDIgPnR3byAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS11bm1lcmdlZCAtLXJlZnJlc2ggPmFjdHVhbCAmJgorCWdyZXAgdHdvIGFjdHVhbCAmJgorCSEgZ3JlcCBvbmUgYWN0dWFsICYmCisJISBncmVwIHRocmVlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaCAoMSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlybSAtZiB0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoICgyKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJY2QgeHl6enkgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ViIHNlY29uZCIgLS1hbGxvdy1lbXB0eQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwNC11cGRhdGUtaW5kZXgtc2tpcC13b3JrdHJlZS5zaCBiL3QvdDIxMDQtdXBkYXRlLWluZGV4LXNraXAtd29ya3RyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWQwODc5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDQtdXBkYXRlLWluZGV4LXNraXAtd29ya3RyZWUuc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3NraXAtd29ya3RyZWUgYml0IHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdC5mdWxsIDw8RU9GCitIIDEKK0ggMgorSCBzdWIvMQorSCBzdWIvMgorRU9GCisKK2NhdCA+ZXhwZWN0LnNraXAgPDxFT0YKK1MgMQorSCAyCitTIHN1Yi8xCitIIHN1Yi8yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBzdWIgJiYKKwl0b3VjaCAuLzEgLi8yIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IGFkZCAxIDIgc3ViLzEgc3ViLzIgJiYKKwlnaXQgbHMtZmlsZXMgLXQgfCB0ZXN0X2NtcCBleHBlY3QuZnVsbCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IGlzIGF0IHZlcnNpb24gMicgJworCXRlc3QgIiQodGVzdC1pbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMSBzdWIvMSAmJgorCWdpdCBscy1maWxlcyAtdCB8IHRlc3RfY21wIGV4cGVjdC5za2lwIC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggaXMgYXQgdmVyc2lvbiAzIGFmdGVyIGhhdmluZyBzb21lIHNraXAtd29ya3RyZWUgZW50cmllcycgJworCXRlc3QgIiQodGVzdC1pbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtdCcgJworCWdpdCBscy1maWxlcyAtdCB8IHRlc3RfY21wIGV4cGVjdC5za2lwIC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1uby1za2lwLXdvcmt0cmVlIDEgc3ViLzEgJiYKKwlnaXQgbHMtZmlsZXMgLXQgfCB0ZXN0X2NtcCBleHBlY3QuZnVsbCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IHZlcnNpb24gaXMgYmFjayB0byAyIHdoZW4gdGhlcmUgaXMgbm8gc2tpcC13b3JrdHJlZSBlbnRyeScgJworCXRlc3QgIiQodGVzdC1pbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDUtdXBkYXRlLWluZGV4LWdpdGZpbGUuc2ggYi90L3QyMTA1LXVwZGF0ZS1pbmRleC1naXRmaWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3ZjNkNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA1LXVwZGF0ZS1pbmRleC1naXRmaWxlLnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQnJhZCBLaW5nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCB1cGRhdGUtaW5kZXggZm9yIGdpdGxpbmsgdG8gLmdpdCBmaWxlLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHdpdGggYWJzb2x1dGUgLmdpdCBmaWxlJyAnCisJbWtkaXIgc3ViMSAmJgorCShjZCBzdWIxICYmCisJIGdpdCBpbml0ICYmCisJIFJFQUw9IiQocHdkKS8ucmVhbCIgJiYKKwkgbXYgLmdpdCAiJFJFQUwiICYmCisJIGVjaG8gImdpdGRpcjogJFJFQUwiID4uZ2l0ICYmCisJIHRlc3RfY29tbWl0IGZpcnN0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZ2l0bGluayB0byBhYnNvbHV0ZSAuZ2l0IGZpbGUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIHN1YjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHdpdGggcmVsYXRpdmUgLmdpdCBmaWxlJyAnCisJbWtkaXIgc3ViMiAmJgorCShjZCBzdWIyICYmCisJIGdpdCBpbml0ICYmCisJIG12IC5naXQgLnJlYWwgJiYKKwkgZWNobyAiZ2l0ZGlyOiAucmVhbCIgPi5naXQgJiYKKwkgdGVzdF9jb21taXQgZmlyc3QpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBnaXRsaW5rIHRvIHJlbGF0aXZlIC5naXQgZmlsZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gc3ViMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDYtdXBkYXRlLWluZGV4LWFzc3VtZS11bmNoYW5nZWQuc2ggYi90L3QyMTA2LXVwZGF0ZS1pbmRleC1hc3N1bWUtdW5jaGFuZ2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5ZDg1OGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA2LXVwZGF0ZS1pbmRleC1hc3N1bWUtdW5jaGFuZ2VkLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCB0ZXN0LgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnIFwKKwknOiA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJIGdpdCBicmFuY2ggb3RoZXIgJiYKKwkgZWNobyB1cHN0cmVhbSA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSB1cHN0cmVhbScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHN3aXRjaCBicmFuY2hlcyB3aXRoIGRpcnR5IGZpbGUnIFwKKwknZ2l0IHJlc2V0IC0taGFyZCAmJgorCSBnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwkgZWNobyBkaXJ0ID5maWxlICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLS1hc3N1bWUtdW5jaGFuZ2VkIGZpbGUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IG1hc3RlcicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMTA3LXVwZGF0ZS1pbmRleC1iYXNpYy5zaCBiL3QvdDIxMDctdXBkYXRlLWluZGV4LWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2NDA1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA3LXVwZGF0ZS1pbmRleC1iYXNpYy5zaApAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgdXBkYXRlLWluZGV4IHRlc3RzCisKK1Rlc3RzIGZvciBjb21tYW5kLWxpbmUgcGFyc2luZyBhbmQgYmFzaWMgb3BlcmF0aW9uLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgMj5tc2cgJiYKKwljYXQgbXNnICYmCisJdGVzdCAtcyBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgZHVtcHMgdXNhZ2UnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgdXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZTogZ2l0IHVwZGF0ZS1pbmRleCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtaCB3aXRoIGNvcnJ1cHQgaW5kZXgnICcKKwlta2RpciBicm9rZW4gJiYKKwkoCisJCWNkIGJyb2tlbiAmJgorCQlnaXQgaW5pdCAmJgorCQk+LmdpdC9pbmRleCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgdXBkYXRlLWluZGV4IC1oID51c2FnZSAyPiYxCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlOiBnaXQgdXBkYXRlLWluZGV4IiBicm9rZW4vdXNhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jYWNoZWluZm8gZG9lcyBub3QgYWNjZXB0IGJsb2IgbnVsbCBzaGExJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IHJldi1wYXJzZSA6ZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxMDA2NDQgJF96NDAgZmlsZSAmJgorCWdpdCByZXYtcGFyc2UgOmZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jYWNoZWluZm8gZG9lcyBub3QgYWNjZXB0IGdpdGxpbmsgbnVsbCBzaGExJyAnCisJZ2l0IGluaXQgc3VibW9kdWxlICYmCisJKGNkIHN1Ym1vZHVsZSAmJiB0ZXN0X2NvbW1pdCBmb28pICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgcmV2LXBhcnNlIDpzdWJtb2R1bGUgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICRfejQwIHN1Ym1vZHVsZSAmJgorCWdpdCByZXYtcGFyc2UgOnN1Ym1vZHVsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaCBiL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40Y2RlYmRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjIwMC1hZGQtdXBkYXRlLnNoCkBAIC0wLDAgKzEsMTc0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFkZCAtdQorCitUaGlzIHRlc3QgY3JlYXRlcyBhIHdvcmtpbmcgdHJlZSBzdGF0ZSB3aXRoIHRocmVlIGZpbGVzOgorCisgIHRvcCAocHJldmlvdXNseSBjb21taXR0ZWQsIG1vZGlmaWVkKQorICBkaXIvc3ViIChwcmV2aW91c2x5IGNvbW1pdHRlZCwgbW9kaWZpZWQpCisgIGRpci9vdGhlciAodW50cmFja2VkKQorCithbmQgaXNzdWVzIGEgZ2l0IGFkZCAtdSB3aXRoIHBhdGggbGltaXRpbmcgb24gImRpciIgdG8gYWRkCitvbmx5IHRoZSB1cGRhdGVzIHRvIGRpci9zdWIuCisKK0Fsc28gdGVzdGVkIGFyZSAiZ2l0IGFkZCAtdSIgd2l0aG91dCBsaW1pdGluZywgYW5kICJnaXQgYWRkIC11Igord2l0aG91dCBjb250ZW50cyBjaGFuZ2VzLCBhbmQgb3RoZXIgY29uZGl0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gaW5pdGlhbCA+Y2hlY2sgJiYKKwllY2hvIGluaXRpYWwgPnRvcCAmJgorCWVjaG8gaW5pdGlhbCA+Zm9vICYmCisJbWtkaXIgZGlyMSBkaXIyICYmCisJZWNobyBpbml0aWFsID5kaXIxL3N1YjEgJiYKKwllY2hvIGluaXRpYWwgPmRpcjEvc3ViMiAmJgorCWVjaG8gaW5pdGlhbCA+ZGlyMi9zdWIzICYmCisJZ2l0IGFkZCBjaGVjayBkaXIxIGRpcjIgdG9wIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZWNobyBjaGFuZ2VkID5jaGVjayAmJgorCWVjaG8gY2hhbmdlZCA+dG9wICYmCisJZWNobyBjaGFuZ2VkID5kaXIyL3N1YjMgJiYKKwlybSAtZiBkaXIxL3N1YjEgJiYKKwllY2hvIG90aGVyID5kaXIyL290aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgdXBkYXRlICcKKwlnaXQgYWRkIC11IGRpcjEgZGlyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgbm90aWNlZCBhIHJlbW92YWwnICcKKwl0ZXN0ICIkKGdpdCBscy1maWxlcyBkaXIxL3N1YjEpIiA9ICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSB0b3VjaGVkIGNvcnJlY3QgcGF0aCcgJworCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLXN0YXR1cyBkaXIyL3N1YjMpIiA9ICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBkaWQgbm90IHRvdWNoIG90aGVyIHRyYWNrZWQgZmlsZXMnICcKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tbmFtZS1zdGF0dXMgY2hlY2spIiA9ICJNCWNoZWNrIiAmJgorCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLXN0YXR1cyB0b3ApIiA9ICJNCXRvcCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGRpZCBub3QgdG91Y2ggdW50cmFja2VkIGZpbGVzJyAnCisJdGVzdCAiJChnaXQgbHMtZmlsZXMgZGlyMi9vdGhlcikiID0gIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FjaGUgdHJlZSBoYXMgbm90IGJlZW4gY29ycnVwdGVkJyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgfAorCXNlZCAtZSAicy8gMAkvCS8iID5leHBlY3QgJiYKKwlnaXQgbHMtdHJlZSAtciAkKGdpdCB3cml0ZS10cmVlKSB8CisJc2VkIC1lICJzLyBibG9iIC8gLyIgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBmcm9tIGEgc3ViZGlyZWN0b3J5JyAnCisJKAorCQljZCBkaXIxICYmCisJCWVjaG8gbW9yZSA+c3ViMiAmJgorCQlnaXQgYWRkIC11IHN1YjIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBnZXRzIG5vdGljZWQnICcKKworCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLXN0YXR1cyBkaXIxKSIgPSAiIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3JlcGxhY2UgYSBmaWxlIHdpdGggYSBzeW1saW5rJyAnCisKKwlybSBmb28gJiYKKwlsbiAtcyB0b3AgZm9vICYmCisJZ2l0IGFkZCAtdSAtLSBmb28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZXZlcnl0aGluZyBjaGFuZ2VkJyAnCisKKwlnaXQgYWRkIC11ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1maWxlcykiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndG91Y2ggYW5kIHRoZW4gYWRkIC11JyAnCisKKwl0b3VjaCBjaGVjayAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWZpbGVzKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b3VjaCBhbmQgdGhlbiBhZGQgZXhwbGljaXRseScgJworCisJdG91Y2ggY2hlY2sgJiYKKwlnaXQgYWRkIGNoZWNrICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1maWxlcykiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC1uIC11IHNob3VsZCBub3QgYWRkIGJ1dCBqdXN0IHJlcG9ydCcgJworCisJKAorCQllY2hvICJhZGQgJ1wnJ2NoZWNrJ1wnJyIgJiYKKwkJZWNobyAicmVtb3ZlICdcJyd0b3AnXCcnIgorCSkgPmV4cGVjdCAmJgorCWJlZm9yZT0kKGdpdCBscy1maWxlcyAtcyBjaGVjayB0b3ApICYmCisJZWNobyBjaGFuZ2VkID4+Y2hlY2sgJiYKKwlybSAtZiB0b3AgJiYKKwlnaXQgYWRkIC1uIC11ID5hY3R1YWwgJiYKKwlhZnRlcj0kKGdpdCBscy1maWxlcyAtcyBjaGVjayB0b3ApICYmCisKKwl0ZXN0ICIkYmVmb3JlIiA9ICIkYWZ0ZXIiICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLXUgcmVzb2x2ZXMgdW5tZXJnZWQgcGF0aHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJb25lPSQoZWNobyAxIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJdHdvPSQoZWNobyAyIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJdGhyZWU9JChlY2hvIDMgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwl7CisJCWZvciBwYXRoIGluIHBhdGgxIHBhdGgyCisJCWRvCisJCQllY2hvICIxMDA2NDQgJG9uZSAxCSRwYXRoIgorCQkJZWNobyAiMTAwNjQ0ICR0d28gMgkkcGF0aCIKKwkJCWVjaG8gIjEwMDY0NCAkdGhyZWUgMwkkcGF0aCIKKwkJZG9uZQorCQllY2hvICIxMDA2NDQgJG9uZSAxCXBhdGgzIgorCQllY2hvICIxMDA2NDQgJG9uZSAxCXBhdGg0IgorCQllY2hvICIxMDA2NDQgJG9uZSAzCXBhdGg1IgorCQllY2hvICIxMDA2NDQgJG9uZSAzCXBhdGg2IgorCX0gfAorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJZWNobyAzID5wYXRoMSAmJgorCWVjaG8gMiA+cGF0aDMgJiYKKwllY2hvIDIgPnBhdGg1ICYmCisKKwkjIEV4cGxpY2l0IHJlc29sdmluZyBieSBhZGRpbmcgcmVtb3ZlZCBwYXRocyBzaG91bGQgZmFpbAorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgcGF0aDQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIHBhdGg2ICYmCisKKwkjICJhZGQgLXUiIHNob3VsZCBub3RpY2UgcmVtb3ZhbHMgbm8gbWF0dGVyIHdoYXQgc3RhZ2VzCisJIyB0aGUgaW5kZXggZW50cmllcyBhcmUgaW4uCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBscy1maWxlcyAtcyBwYXRoMSBwYXRoMiBwYXRoMyBwYXRoNCBwYXRoNSBwYXRoNiA+YWN0dWFsICYmCisJeworCQllY2hvICIxMDA2NDQgJHRocmVlIDAJcGF0aDEiCisJCWVjaG8gIjEwMDY0NCAkdHdvIDAJcGF0aDMiCisJCWVjaG8gIjEwMDY0NCAkdHdvIDAJcGF0aDUiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIC11IG5vbi1leGlzdGVudCIgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC11IG5vbi1leGlzdGVudCAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIm5vbi1leGlzdGVudCIpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjIwMS1hZGQtdXBkYXRlLXR5cGVjaGFuZ2Uuc2ggYi90L3QyMjAxLWFkZC11cGRhdGUtdHlwZWNoYW5nZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NTRmYzUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjIwMS1hZGQtdXBkYXRlLXR5cGVjaGFuZ2Uuc2gKQEAgLTAsMCArMSwxNDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtb3JlIGdpdCBhZGQgLXUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+eHl6enkgJiYKKwlfZW1wdHk9JChnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8eHl6enkpICYmCisJPnlvbWluICYmCisJPmNhc2tseSAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwkJbG4gLXMgZnJvdHogbml0Zm9sICYmCisJCVRfbGV0dGVyPVQKKwllbHNlCisJCXByaW50ZiAlcyBmcm90eiA+IG5pdGZvbCAmJgorCQlUX2xldHRlcj1NCisJZmkgJiYKKwlta2RpciByZXpyb3YgJiYKKwk+cmV6cm92L2JvemJhciAmJgorCWdpdCBhZGQgY2Fza2x5IHh5enp5IHlvbWluIG5pdGZvbCByZXpyb3YvYm96YmFyICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG1vZGlmeSAnCisJcm0gLWYgeHl6enkgeW9taW4gbml0Zm9sIGNhc2tseSAmJgorCSMgY2Fza2x5IGRpc2FwcGVhcnMgKG5vdCBhIHN1Ym1vZHVsZSkKKwlta2RpciBjYXNrbHkgJiYKKwkjIG5pdGZvbCBjaGFuZ2VzIGZyb20gc3ltbGluayB0byByZWd1bGFyCisJPm5pdGZvbCAmJgorCSMgcmV6cm92L2JvemJhciBkaXNhcHBlYXJzCisJcm0gLWZyIHJlenJvdiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwkJbG4gLXMgeHl6enkgcmV6cm92CisJZWxzZQorCQlwcmludGYgJXMgeHl6enkgPiByZXpyb3YKKwlmaSAmJgorCSMgeHl6enkgZGlzYXBwZWFycyAobm90IGEgc3VibW9kdWxlKQorCW1rZGlyIHh5enp5ICYmCisJZWNobyBnbnVzdG8gPnh5enp5L2JvemJhciAmJgorCSMgeW9taW4gZ2V0cyByZXBsYWNlZCB3aXRoIGEgc3VibW9kdWxlCisJbWtkaXIgeW9taW4gJiYKKwk+eW9taW4veW9taW4gJiYKKwkoCisJCWNkIHlvbWluICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBhZGQgeW9taW4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ViIGluaXRpYWwiCisJKSAmJgorCXlvbWluPSQoR0lUX0RJUj15b21pbi8uZ2l0IGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkjIHlvbmsgaXMgYWRkZWQgYW5kIHRoZW4gdHVybmVkIGludG8gYSBzdWJtb2R1bGUKKwkjIHRoaXMgc2hvdWxkIGFwcGVhciBhcyBUIGluIGRpZmYtZmlsZXMgYW5kIGFzIEEgaW4gZGlmZi1pbmRleAorCT55b25rICYmCisJZ2l0IGFkZCB5b25rICYmCisJcm0gLWYgeW9uayAmJgorCW1rZGlyIHlvbmsgJiYKKwk+eW9uay95b25rICYmCisJKAorCQljZCB5b25rICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBhZGQgeW9uayAmJgorCQlnaXQgY29tbWl0IC1tICJzdWIgaW5pdGlhbCIKKwkpICYmCisJeW9uaz0kKEdJVF9ESVI9eW9uay8uZ2l0IGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkjIHppZm1pYSBpcyBhZGRlZCBhbmQgdGhlbiByZW1vdmVkCisJIyB0aGlzIHNob3VsZCBhcHBlYXIgaW4gZGlmZi1maWxlcyBidXQgbm90IGluIGRpZmYtaW5kZXguCisJPnppZm1pYSAmJgorCWdpdCBhZGQgemlmbWlhICYmCisJcm0gLWYgemlmbWlhICYmCisJbWtkaXIgemlmbWlhICYmCisJeworCQlnaXQgbHMtdHJlZSAtciBIRUFEIHwKKwkJc2VkIC1lICJzL14vOi8iIC1lICIKKwkJCS8JY2Fza2x5L3sKKwkJCQlzLwljYXNrbHkvICRfejQwIEQmLworCQkJCXMvYmxvYi8wMDAwMDAvCisJCQl9CisJCQkvCW5pdGZvbC97CisJCQkJcy8Jbml0Zm9sLyAkX3o0MCAkVF9sZXR0ZXImLworCQkJCXMvYmxvYi8xMDA2NDQvCisJCQl9CisJCQkvCXJlenJvdi5ib3piYXIveworCQkJCXMvCXJlenJvdi5ib3piYXIvICRfejQwIEQmLworCQkJCXMvYmxvYi8wMDAwMDAvCisJCQl9CisJCQkvCXh5enp5L3sKKwkJCQlzLwl4eXp6eS8gJF96NDAgRCYvCisJCQkJcy9ibG9iLzAwMDAwMC8KKwkJCX0KKwkJCS8JeW9taW4veworCQkJICAgIHMvCXlvbWluLyAkX3o0MCBUJi8KKwkJCQlzL2Jsb2IvMTYwMDAwLworCQkJfQorCQkiCisJfSA+ZXhwZWN0ICYmCisJeworCQljYXQgZXhwZWN0CisJCWVjaG8gIjoxMDA2NDQgMTYwMDAwICRfZW1wdHkgJF96NDAgVAl5b25rIgorCQllY2hvICI6MTAwNjQ0IDAwMDAwMCAkX2VtcHR5ICRfejQwIEQJemlmbWlhIgorCX0gPmV4cGVjdC1maWxlcyAmJgorCXsKKwkJY2F0IGV4cGVjdAorCQllY2hvICI6MDAwMDAwIDE2MDAwMCAkX3o0MCAkX3o0MCBBCXlvbmsiCisJfSA+ZXhwZWN0LWluZGV4ICYmCisJeworCQllY2hvICIxMDA2NDQgJF9lbXB0eSAwCW5pdGZvbCIKKwkJZWNobyAiMTYwMDAwICR5b21pbiAwCXlvbWluIgorCQllY2hvICIxNjAwMDAgJHlvbmsgMAl5b25rIgorCX0gPmV4cGVjdC1maW5hbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGRpZmYtZmlsZXMgJworCWdpdCBkaWZmLWZpbGVzIC0tcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtZmlsZXMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgZGlmZi1pbmRleCAnCisJZ2l0IGRpZmYtaW5kZXggLS1yYXcgSEVBRCAtLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWluZGV4IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLXUnICcKKwlybSAtZiAiLmdpdC9zYXZlZC1pbmRleCIgJiYKKwljcCAtcCAiLmdpdC9pbmRleCIgIi5naXQvc2F2ZWQtaW5kZXgiICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWZpbmFsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLWEnICcKKwlpZiB0ZXN0IC1mICIuZ2l0L3NhdmVkLWluZGV4IgorCXRoZW4KKwkJcm0gLWYgIi5naXQvaW5kZXgiICYmCisJCW12ICIuZ2l0L3NhdmVkLWluZGV4IiAiLmdpdC9pbmRleCIKKwlmaSAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCIgLWEgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1maW5hbCBhY3R1YWwgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtZmluYWwgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjIwMi1hZGQtYWRkcmVtb3ZlLnNoIGIvdC90MjIwMi1hZGQtYWRkcmVtb3ZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhODE1MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMjAyLWFkZC1hZGRyZW1vdmUuc2gKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhZGQgLS1hbGwnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwkoCisJCWVjaG8gLmdpdGlnbm9yZQorCQllY2hvIHdpbGwtcmVtb3ZlCisJKSA+ZXhwZWN0ICYmCisJKAorCQllY2hvIGFjdHVhbAorCQllY2hvIGV4cGVjdAorCQllY2hvIGlnbm9yZWQKKwkpID4uZ2l0aWdub3JlICYmCisJPndpbGwtcmVtb3ZlICYmCisJZ2l0IGFkZCAtLWFsbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIC0tYWxsJyAnCisJKAorCQllY2hvIC5naXRpZ25vcmUKKwkJZWNobyBub3QtaWdub3JlZAorCQllY2hvICJNCS5naXRpZ25vcmUiCisJCWVjaG8gIkEJbm90LWlnbm9yZWQiCisJCWVjaG8gIkQJd2lsbC1yZW1vdmUiCisJKSA+ZXhwZWN0ICYmCisJPmlnbm9yZWQgJiYKKwk+bm90LWlnbm9yZWQgJiYKKwllY2hvIG1vZGlmaWNhdGlvbiA+Pi5naXRpZ25vcmUgJiYKKwlybSAtZiB3aWxsLXJlbW92ZSAmJgorCWdpdCBhZGQgLS1hbGwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJZ2l0IGRpZmYtaW5kZXggLS1uYW1lLXN0YXR1cyAtLWNhY2hlZCBIRUFEID4+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDMtYWRkLWludGVudC5zaCBiL3QvdDIyMDMtYWRkLWludGVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYzM1NDA5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjIwMy1hZGQtaW50ZW50LnNoCkBAIC0wLDAgKzEsNjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdJbnRlbnQgdG8gYWRkJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZW50IHRvIGFkZCcgJworCWVjaG8gaGVsbG8gPmZpbGUgJiYKKwllY2hvIGhlbGxvID5lbGlmICYmCisJZ2l0IGFkZCAtTiBmaWxlICYmCisJZ2l0IGFkZCBlbGlmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHJlc3VsdCBvZiAiYWRkIC1OIicgJworCWdpdCBscy1maWxlcyAtcyBmaWxlID5hY3R1YWwgJiYKKwllbXB0eT0kKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDwvZGV2L251bGwpICYmCisJZWNobyAiMTAwNjQ0ICRlbXB0eSAwCWZpbGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVudCB0byBhZGQgaXMganVzdCBhbiBvcmRpbmFyeSBlbXB0eSBibG9iJyAnCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBscy1maWxlcyAtcyBmaWxlID5hY3R1YWwgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZWxpZiB8IHNlZCAtZSAicy9lbGlmL2ZpbGUvIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlbnQgdG8gYWRkIGRvZXMgbm90IGNsb2JiZXIgZXhpc3RpbmcgcGF0aHMnICcKKwlnaXQgYWRkIC1OIGZpbGUgZWxpZiAmJgorCWVtcHR5PSQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPC9kZXYvbnVsbCkgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSEgZ3JlcCAiJGVtcHR5IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaS10LWEgZW50cnkgaXMgc2ltcGx5IGlnbm9yZWQnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGluaXRpYWwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwllY2hvIHh5enp5ID5yZXpyb3YgJiYKKwllY2hvIGZyb3R6ID5uaXRmb2wgJiYKKwlnaXQgYWRkIHJlenJvdiAmJgorCWdpdCBhZGQgLU4gbml0Zm9sICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwl0ZXN0ICQoZ2l0IGxzLXRyZWUgSEVBRCAtLSBuaXRmb2wgfCB3YyAtbCkgPSAwICYmCisJdGVzdCAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUQgLS0gbml0Zm9sIHwgd2MgLWwpID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gY29tbWl0IHdpdGggYW4gdW5yZWxhdGVkIGktdC1hIGVudHJ5IGluIGluZGV4JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gYm96YmFyID5yZXpyb3YgJiYKKwllY2hvIGZyb3R6ID5uaXRmb2wgJiYKKwlnaXQgYWRkIHJlenJvdiAmJgorCWdpdCBhZGQgLU4gbml0Zm9sICYmCisJZ2l0IGNvbW1pdCAtbSBwYXJ0aWFsIHJlenJvdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gImNvbW1pdCAtYSIgd2l0aCBhbiBpLXQtYSBlbnRyeScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk6ID5uaXRmb2wgJiYKKwlnaXQgYWRkIC1OIG5pdGZvbCAmJgorCWdpdCBjb21taXQgLWEgLW0gYWxsCisnCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3QyMjA0LWFkZC1pZ25vcmVkLnNoIGIvdC90MjIwNC1hZGQtaWdub3JlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MzQwYWMyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjIwNC1hZGQtaWdub3JlZC5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l2aW5nIGlnbm9yZWQgcGF0aHMgdG8gZ2l0IGFkZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIHN1YiBkaXIgZGlyL3N1YiAmJgorCWVjaG8gc3ViID4uZ2l0aWdub3JlICYmCisJZWNobyBpZ24gPj4uZ2l0aWdub3JlICYmCisJZm9yIHAgaW4gLiBzdWIgZGlyIGRpci9zdWIKKwlkbworCQk+IiRwL2lnbiIgJiYKKwkJPiIkcC9maWxlIiB8fCBleGl0IDEKKwlkb25lCisnCisKK2ZvciBpIGluIGZpbGUgZGlyL2ZpbGUgZGlyICdkKicKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibm8gY29tcGxhaW50cyBmb3IgdW5pZ25vcmVkICRpIiAnCisJCXJtIC1mIC5naXQvaW5kZXggJiYKKwkJZ2l0IGFkZCAiJGkiICYmCisJCWdpdCBscy1maWxlcyAiJGkiID5vdXQgJiYKKwkJdGVzdCAtcyBvdXQKKwknCitkb25lCisKK2ZvciBpIGluIGlnbiBkaXIvaWduIGRpci9zdWIgZGlyL3N1Yi8qaWduIHN1Yi9maWxlIHN1YiBzdWIvKgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGFpbnRzIGZvciBpZ25vcmVkICRpIiAnCisJCXJtIC1mIC5naXQvaW5kZXggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAiJGkiIDI+ZXJyICYmCisJCWdpdCBscy1maWxlcyAiJGkiID5vdXQgJiYKKwkJISB0ZXN0IC1zIG91dAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsYWludHMgZm9yIGlnbm9yZWQgJGkgb3V0cHV0IiAnCisJCXRlc3RfaTE4bmdyZXAgLWUgIlVzZSAtZiBpZiIgZXJyCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSB3aXRoIHVuaWdub3JlZCBmaWxlIiAnCisJCXJtIC1mIC5naXQvaW5kZXggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAiJGkiIGZpbGUgMj5lcnIgJiYKKwkJZ2l0IGxzLWZpbGVzICIkaSIgPm91dCAmJgorCQkhIHRlc3QgLXMgb3V0CisJJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsYWludHMgZm9yIGlnbm9yZWQgJGkgd2l0aCB1bmlnbm9yZWQgZmlsZSBvdXRwdXQiICcKKwkJdGVzdF9pMThuZ3JlcCAtZSAiVXNlIC1mIGlmIiBlcnIKKwknCitkb25lCisKK2ZvciBpIGluIHN1YiBzdWIvKgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGFpbnRzIGZvciBpZ25vcmVkICRpIGluIGRpciIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCSgKKwkJCWNkIGRpciAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAiJGkiIDI+ZXJyICYmCisJCQlnaXQgbHMtZmlsZXMgIiRpIiA+b3V0ICYmCisJCQkhIHRlc3QgLXMgb3V0CisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGFpbnRzIGZvciBpZ25vcmVkICRpIGluIGRpciBvdXRwdXQiICcKKwkJKAorCQkJY2QgZGlyICYmCisJCQl0ZXN0X2kxOG5ncmVwIC1lICJVc2UgLWYgaWYiIGVycgorCQkpCisJJworZG9uZQorCitmb3IgaSBpbiBpZ24gZmlsZQorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGFpbnRzIGZvciBpZ25vcmVkICRpIGluIHN1YiIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCSgKKwkJCWNkIHN1YiAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAiJGkiIDI+ZXJyICYmCisJCQlnaXQgbHMtZmlsZXMgIiRpIiA+b3V0ICYmCisJCQkhIHRlc3QgLXMgb3V0CisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGFpbnRzIGZvciBpZ25vcmVkICRpIGluIHN1YiBvdXRwdXQiICcKKwkJKAorCQkJY2Qgc3ViICYmCisJCQl0ZXN0X2kxOG5ncmVwIC1lICJVc2UgLWYgaWYiIGVycgorCQkpCisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIzMDAtY2QtdG8tdG9wbGV2ZWwuc2ggYi90L3QyMzAwLWNkLXRvLXRvcGxldmVsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5NjViYzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMzAwLWNkLXRvLXRvcGxldmVsLnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjZF90b190b3BsZXZlbCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfY2RfdG9fdG9wbGV2ZWwgKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJDMgIiQyIiAnCisJCSgKKwkJCWNkICciJyQxJyInICYmCisJCQkuICIkKGdpdCAtLWV4ZWMtcGF0aCkiL2dpdC1zaC1zZXR1cCAmJgorCQkJY2RfdG9fdG9wbGV2ZWwgJiYKKwkJCVsgIiQocHdkIC1QKSIgPSAiJFRPUExFVkVMIiBdCisJCSkKKwknCit9CisKK1RPUExFVkVMPSIkKHB3ZCAtUCkvcmVwbyIKK21rZGlyIC1wIHJlcG8vc3ViL2RpcgorbXYgLmdpdCByZXBvLworU1VCRElSRUNUT1JZX09LPTEKKwordGVzdF9jZF90b190b3BsZXZlbCByZXBvICdhdCBwaHlzaWNhbCByb290JworCit0ZXN0X2NkX3RvX3RvcGxldmVsIHJlcG8vc3ViL2RpciAnYXQgcGh5c2ljYWwgc3ViZGlyJworCitsbiAtcyByZXBvIHN5bXJlcG8gMj4vZGV2L251bGwKK3Rlc3RfY2RfdG9fdG9wbGV2ZWwgc3ltcmVwbyAnYXQgc3ltYm9saWMgcm9vdCcgU1lNTElOS1MKKworbG4gLXMgcmVwby9zdWIvZGlyIHN1YmRpci1saW5rIDI+L2Rldi9udWxsCit0ZXN0X2NkX3RvX3RvcGxldmVsIHN1YmRpci1saW5rICdhdCBzeW1ib2xpYyBzdWJkaXInIFNZTUxJTktTCisKK2NkIHJlcG8KK2xuIC1zIHN1Yi9kaXIgaW50ZXJuYWwtbGluayAyPi9kZXYvbnVsbAordGVzdF9jZF90b190b3BsZXZlbCBpbnRlcm5hbC1saW5rICdhdCBpbnRlcm5hbCBzeW1ib2xpYyBzdWJkaXInIFNZTUxJTktTCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwMC1scy1maWxlcy1vdGhlcnMuc2ggYi90L3QzMDAwLWxzLWZpbGVzLW90aGVycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGJlOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwMC1scy1maWxlcy1vdGhlcnMuc2gKQEAgLTAsMCArMSw4NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtZmlsZXMgdGVzdCAoLS1vdGhlcnMgc2hvdWxkIHBpY2sgdXAgc3ltbGlua3MpLgorCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgLS1vdGhlcnMgd2l0aCB0aGUgZm9sbG93aW5nIG9uIHRoZQorZmlsZXN5c3RlbS4KKworICAgIHBhdGgwICAgICAgIC0gYSBmaWxlCisgICAgcGF0aDEJLSBhIHN5bWxpbmsKKyAgICBwYXRoMi9maWxlMiAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgzLWp1bmsgIC0gYSBmaWxlIHRvIGNvbmZ1c2UgdGhpbmdzCisgICAgcGF0aDMvZmlsZTMgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoNCAgICAgICAtIGFuIGVtcHR5IGRpcmVjdG9yeQorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwICcgJworCWRhdGUgPnBhdGgwICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUworCXRoZW4KKwkJbG4gLXMgeHl6enkgcGF0aDEKKwllbHNlCisJCWRhdGUgPnBhdGgxCisJZmkgJiYKKwlta2RpciBwYXRoMiBwYXRoMyBwYXRoNCAmJgorCWRhdGUgPnBhdGgyL2ZpbGUyICYmCisJZGF0ZSA+cGF0aDItanVuayAmJgorCWRhdGUgPnBhdGgzL2ZpbGUzICYmCisJZGF0ZSA+cGF0aDMtanVuayAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDMtanVuayBwYXRoMy9maWxlMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogZXhwZWN0ZWQgb3V0cHV0JyAnCisJY2F0ID5leHBlY3RlZDEgPDwtXEVPRiAmJgorCWV4cGVjdGVkMQorCWV4cGVjdGVkMgorCWV4cGVjdGVkMworCW91dHB1dAorCXBhdGgwCisJcGF0aDEKKwlwYXRoMi1qdW5rCisJcGF0aDIvZmlsZTIKKwlFT0YKKworCXNlZCAtZSAic3xwYXRoMi9maWxlMnxwYXRoMi98IiA8ZXhwZWN0ZWQxID5leHBlY3RlZDIgJiYKKwljcCBleHBlY3RlZDIgZXhwZWN0ZWQzICYmCisJZWNobyBwYXRoNC8gPj5leHBlY3RlZDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1vdGhlcnMnICcKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkMSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1vdGhlcnMgLS1kaXJlY3RvcnknICcKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1kaXJlY3RvcnkgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkMiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1lbXB0eS1kaXJlY3RvcnkgaGlkZXMgZW1wdHkgZGlyZWN0b3J5JyAnCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5IC0tbm8tZW1wdHktZGlyZWN0b3J5ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDMgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2xzLWZpbGVzIC0tb3RoZXJzIHdpdGggc3ltbGlua2VkIHN1Ym1vZHVsZScgJworCWdpdCBpbml0IHN1cGVyICYmCisJZ2l0IGluaXQgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0gc3ViICYmCisJCWdpdCBwYWNrLXJlZnMgLS1hbGwKKwkpICYmCisJKAorCQljZCBzdXBlciAmJgorCQkiJFNIRUxMX1BBVEgiICIkVEVTVF9ESVJFQ1RPUlkvLi4vY29udHJpYi93b3JrZGlyL2dpdC1uZXctd29ya2RpciIgLi4vc3ViIHN1YgorCQlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlLXN0YW5kYXJkID4uLi9hY3R1YWwKKwkpICYmCisJZWNobyBzdWIvID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwMS1scy1maWxlcy1vdGhlcnMtZXhjbHVkZS5zaCBiL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzhmZTk3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2gKQEAgLTAsMCArMSwyMTcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZQorCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgLS1vdGhlcnMgYW5kIHRlc3RzIC0tZXhjbHVkZSBwYXR0ZXJucy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3JtIC1mciBvbmUgdGhyZWUKK2ZvciBkaXIgaW4gLiBvbmUgb25lL3R3byB0aHJlZQorZG8KKyAgbWtkaXIgLXAgJGRpciAmJgorICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDgKKyAgZG8KKyAgICA+JGRpci9hLiRpCisgIGRvbmUKK2RvbmUKKz4iI2lnbm9yZTEiCis+IiNpZ25vcmUyIgorPiIjaGlkZGVuIgorCitjYXQgPmV4cGVjdCA8PEVPRgorYS4yCithLjQKK2EuNQorYS44CitvbmUvYS4zCitvbmUvYS40CitvbmUvYS41CitvbmUvYS43CitvbmUvdHdvL2EuMgorb25lL3R3by9hLjMKK29uZS90d28vYS41CitvbmUvdHdvL2EuNworb25lL3R3by9hLjgKK3RocmVlL2EuMgordGhyZWUvYS4zCit0aHJlZS9hLjQKK3RocmVlL2EuNQordGhyZWUvYS44CitFT0YKKworZWNobyAnLmdpdGlnbm9yZQorXCNpZ25vcmUxCitcI2lnbm9yZTIqCitcI2hpZCpuCitvdXRwdXQKK2V4cGVjdAorLmdpdGlnbm9yZQorKi43CishKi44JyA+LmdpdC9pZ25vcmUKKworZWNobyAnKi4xCisvKi4zCishKi42JyA+LmdpdGlnbm9yZQorZWNobyAnKi4yCit0d28vKi40CishKi43CisqLjgnID5vbmUvLmdpdGlnbm9yZQorZWNobyAnISouMgorISouOCcgPm9uZS90d28vLmdpdGlnbm9yZQorCithbGxpZ25vcmVzPScuZ2l0aWdub3JlIG9uZS8uZ2l0aWdub3JlIG9uZS90d28vLmdpdGlnbm9yZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyB3aXRoIHZhcmlvdXMgZXhjbHVkZSBvcHRpb25zLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgXAorICAgICAgIC0tZXhjbHVkZT1cKi42IFwKKyAgICAgICAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIFwKKyAgICAgICAtLWV4Y2x1ZGUtZnJvbT0uZ2l0L2lnbm9yZSBcCisgICAgICAgPm91dHB1dCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0JworCisjIFRlc3QgXHJcbiAoTVNET1MtbGlrZSBzeXN0ZW1zKQorcHJpbnRmICcqLjFcclxuLyouM1xyXG4hKi42XHJcbicgPi5naXRpZ25vcmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyB3aXRoIFxyXG4gbGluZSBlbmRpbmdzLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgXAorICAgICAgIC0tZXhjbHVkZT1cKi42IFwKKyAgICAgICAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIFwKKyAgICAgICAtLWV4Y2x1ZGUtZnJvbT0uZ2l0L2lnbm9yZSBcCisgICAgICAgPm91dHB1dCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBza2lwLXdvcmt0cmVlIGdpdGlnbm9yZScgJworCWdpdCBhZGQgJGFsbGlnbm9yZXMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAkYWxsaWdub3JlcyAmJgorCXJtICRhbGxpZ25vcmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgd2l0aCB2YXJpb3VzIGV4Y2x1ZGUgb3B0aW9ucy4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIFwKKyAgICAgICAtLWV4Y2x1ZGU9XCouNiBcCisgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCisgICAgICAgLS1leGNsdWRlLWZyb209LmdpdC9pZ25vcmUgXAorICAgICAgID5vdXRwdXQgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSBnaXRpZ25vcmUnICcKKwlnaXQgY2hlY2tvdXQgJGFsbGlnbm9yZXMgJiYKKwlybSAuZ2l0L2luZGV4CisnCisKK2NhdCA+IGV4Y2x1ZGVzLWZpbGUgPDxcRU9GCisqLlsxLThdCitlKgorXCMqCitFT0YKKworZ2l0IGNvbmZpZyBjb3JlLmV4Y2x1ZGVzRmlsZSBleGNsdWRlcy1maWxlCisKK2dpdCBzdGF0dXMgfCBncmVwICJeIwkiID4gb3V0cHV0CisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyMJLmdpdGlnbm9yZQorIwlhLjYKKyMJb25lLworIwlvdXRwdXQKKyMJdGhyZWUvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXR1cyBob25vcnMgY29yZS5leGNsdWRlc2ZpbGUnIFwKKwkndGVzdF9jbXAgZXhwZWN0IG91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxpbmcgc2xhc2ggaW4gZXhjbHVkZSBhbGxvd3MgZGlyZWN0b3J5IG1hdGNoKDEpJyAnCisKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlPW9uZS8gPm91dHB1dCAmJgorCWlmIGdyZXAgIl5vbmUvIiBvdXRwdXQKKwl0aGVuCisJCWVjaG8gT29vcHMKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIHNsYXNoIGluIGV4Y2x1ZGUgYWxsb3dzIGRpcmVjdG9yeSBtYXRjaCAoMiknICcKKworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9b25lL3R3by8gPm91dHB1dCAmJgorCWlmIGdyZXAgIl5vbmUvdHdvLyIgb3V0cHV0CisJdGhlbgorCQllY2hvIE9vb3BzCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGluZyBzbGFzaCBpbiBleGNsdWRlIGZvcmNlcyBkaXJlY3RvcnkgbWF0Y2ggKDEpJyAnCisKKwk+dHdvICYmCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZT10d28vID5vdXRwdXQgJiYKKwlncmVwICJedHdvIiBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGluZyBzbGFzaCBpbiBleGNsdWRlIGZvcmNlcyBkaXJlY3RvcnkgbWF0Y2ggKDIpJyAnCisKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlPW9uZS9hLjEvID5vdXRwdXQgJiYKKwlncmVwICJeb25lL2EuMSIgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVnYXRlZCBleGNsdWRlIG1hdGNoZXMgY2FuIG92ZXJyaWRlIHByZXZpb3VzIG9uZXMnICcKKworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9ImEuKiIgLS1leGNsdWRlPSIhYS4xIiA+b3V0cHV0ICYmCisJZ3JlcCAiXmEuMSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpcmVjdG9yeSBpZ25vcmUgKHNldHVwKScgJworCW1rZGlyIC1wIHRvcC9sMS9sMiAmJgorCSgKKwkJY2QgdG9wICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gLy5naXRpZ25vcmUgPi5naXRpZ25vcmUgJiYKKwkJZWNobyBsMSA+Pi5naXRpZ25vcmUgJiYKKwkJZWNobyBsMiA+bDEvLmdpdGlnbm9yZSAmJgorCQk+bDEvbDIvbDEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpcmVjdG9yeSBpZ25vcmUgKHRvcGxldmVsKScgJworCSgKKwkJY2QgdG9wICYmCisJCWdpdCBscy1maWxlcyAtbyAtLWV4Y2x1ZGUtc3RhbmRhcmQKKwkpID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXJlY3RvcnkgaWdub3JlIChsMS9sMiknICcKKwkoCisJCWNkIHRvcC9sMS9sMiAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLS1leGNsdWRlLXN0YW5kYXJkCisJKSA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyZWN0b3J5IGlnbm9yZSAobDEpJyAnCisJKAorCQljZCB0b3AvbDEgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC0tZXhjbHVkZS1zdGFuZGFyZAorCSkgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwMi1scy1maWxlcy1kYXNocGF0aC5zaCBiL3QvdDMwMDItbHMtZmlsZXMtZGFzaHBhdGguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODcwNGIwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDItbHMtZmlsZXMtZGFzaHBhdGguc2gKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtZmlsZXMgdGVzdCAoLS0gdG8gdGVybWluYXRlIHRoZSBwYXRoIGxpc3QpLgorCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgLS1vdGhlcnMgd2l0aCB0aGUgZm9sbG93aW5nIG9uIHRoZQorZmlsZXN5c3RlbS4KKworICAgIHBhdGgwICAgICAgIC0gYSBmaWxlCisgICAgLWZvbwktIGEgZmlsZSB3aXRoIGEgZnVubnkgbmFtZS4KKyAgICAtLQkJLSBhbm90aGVyIGZpbGUgd2l0aCBhIGZ1bm55IG5hbWUuCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJc2V0dXAgXAorCSdlY2hvIGZyb3R6ID5wYXRoMCAmJgorCWVjaG8gZnJvdHogPi4vLWZvbyAmJgorCWVjaG8gZnJvdHogPi4vLS0nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgd2l0aG91dCBwYXRoIHJlc3RyaWN0aW9uLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgPm91dHB1dCAmJgorICAgICB0ZXN0X2NtcCBvdXRwdXQgLSA8PEVPRgorLS0KKy1mb28KK291dHB1dAorcGF0aDAKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIHdpdGggcGF0aCByZXN0cmljdGlvbi4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHBhdGgwID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgLSA8PEVPRgorcGF0aDAKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIHdpdGggcGF0aCByZXN0cmljdGlvbiB3aXRoIC0tLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS0gcGF0aDAgPm91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCAtIDw8RU9GCitwYXRoMAorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgd2l0aCBwYXRoIHJlc3RyaWN0aW9uIHdpdGggLS0gLS0uJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyAtLSAtLSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKKy0tCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyB3aXRoIG5vIHBhdGggcmVzdHJpY3Rpb24uJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyAtLSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKKy0tCistZm9vCitvdXRwdXQKK3BhdGgwCitFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDAzLWxzLWZpbGVzLWV4Y2x1ZGUuc2ggYi90L3QzMDAzLWxzLWZpbGVzLWV4Y2x1ZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDVlYzMzMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDMtbHMtZmlsZXMtZXhjbHVkZS5zaApAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbHMtZmlsZXMgLS1leGNsdWRlIGRvZXMgbm90IGFmZmVjdCBpbmRleCBmaWxlcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcmVwbyB3aXRoIGZpbGUnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGZpbGUgJiYKKwllY2hvIG1vZGlmaWNhdGlvbiA+ZmlsZQorJworCitjaGVja19vdXRwdXQoKSB7Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICJscy1maWxlcyBvdXRwdXQgY29udGFpbnMgZmlsZSAoJDEpIiAiCisJZWNobyAnJDInID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLS1leGNsdWRlLXN0YW5kYXJkIC0tJDEgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKyIKK30KKworY2hlY2tfYWxsX291dHB1dCgpIHsKKwljaGVja19vdXRwdXQgJ2NhY2hlZCcgJ2ZpbGUnCisJY2hlY2tfb3V0cHV0ICdtb2RpZmllZCcgJ2ZpbGUnCit9CisKK2NoZWNrX2FsbF9vdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBmaWxlIHRvIGdpdGlnbm9yZScgJworCWVjaG8gZmlsZSA+LmdpdGlnbm9yZQorJworY2hlY2tfYWxsX291dHB1dAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtaSBsaXN0cyBvbmx5IHRyYWNrZWQtYnV0LWlnbm9yZWQgZmlsZXMnICcKKwllY2hvIGNvbnRlbnQgPm90aGVyLWZpbGUgJiYKKwlnaXQgYWRkIG90aGVyLWZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyAtaSAtLWV4Y2x1ZGUtc3RhbmRhcmQgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDA0LWxzLWZpbGVzLWJhc2ljLnNoIGIvdC90MzAwNC1scy1maWxlcy1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZDliYzNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwNC1scy1maWxlcy1iYXNpYy5zaApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgbHMtZmlsZXMgdGVzdHMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIHdpdGggdmFyaW91cyB1bnVzdWFsIG9yIG1hbGZvcm1lZAorY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKKz5lbXB0eQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyBpbiBlbXB0eSByZXBvc2l0b3J5JyAnCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgd2l0aCBub25leGlzdGVudCBwYXRoJyAnCisJZ2l0IGxzLWZpbGVzIGRvZXNub3RleGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIHdpdGggbm9uc2Vuc2Ugb3B0aW9uJyAnCisJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGxzLWZpbGVzIC0tbm9uc2Vuc2UgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZTogZ2l0IGxzLWZpbGVzIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLWggaW4gY29ycnVwdCByZXBvc2l0b3J5JyAnCisJbWtkaXIgYnJva2VuICYmCisJKAorCQljZCBicm9rZW4gJiYKKwkJZ2l0IGluaXQgJiYKKwkJPi5naXQvaW5kZXggJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGxzLWZpbGVzIC1oID51c2FnZSAyPiYxCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlOiBnaXQgbHMtZmlsZXMgIiBicm9rZW4vdXNhZ2UKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDA1LWxzLWZpbGVzLXJlbGF0aXZlLnNoIGIvdC90MzAwNS1scy1maWxlcy1yZWxhdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNzc4Njk0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwNS1scy1maWxlcy1yZWxhdGl2ZS5zaApAQCAtMCwwICsxLDcyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbHMtZmlsZXMgdGVzdHMgd2l0aCByZWxhdGl2ZSBwYXRocworCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgd2l0aCB2YXJpb3VzIHJlbGF0aXZlIHBhdGggYXJndW1lbnRzLgorJworCisuIC4vdGVzdC1saWIuc2gKKworbmV3X2xpbmU9JworJworc3E9XCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZScgJworCTogPm5ldmVyLW1pbmQtbWUgJiYKKwlnaXQgYWRkIG5ldmVyLW1pbmQtbWUgJiYKKwlta2RpciB0b3AgJiYKKwkoCisJCWNkIHRvcCAmJgorCQlta2RpciBzdWIgJiYKKwkJeD0ieCB4YSB4YmMgeGRlZiB4Z2hpaiB4a2xtbm8iICYmCisJCXk9JChlY2hvICIkeCIgfCB0ciB4IHkpICYmCisJCXRvdWNoICR4ICYmCisJCXRvdWNoICR5ICYmCisJCWNkIHN1YiAmJgorCQlnaXQgYWRkIC4uL3gqCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyB3aXRoIG1peGVkIGxldmVscycgJworCSgKKwkJY2QgdG9wL3N1YiAmJgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJLi4vLi4vbmV2ZXItbWluZC1tZQorCQkuLi94CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgJChjYXQgZXhwZWN0KSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC1jJyAnCisJKAorCQljZCB0b3Avc3ViICYmCisJCWZvciBmIGluIC4uL3kqCisJCWRvCisJCQllY2hvICJlcnJvcjogcGF0aHNwZWMgJHNxJGYkc3EgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQuIgorCQlkb25lID5leHBlY3QuZXJyICYmCisJCWVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvICR7c3F9Z2l0IGFkZCR7c3F9PyIgPj5leHBlY3QuZXJyICYmCisJCWxzIC4uL3gqID5leHBlY3Qub3V0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtYyAtLWVycm9yLXVubWF0Y2ggLi4vW3h5XSogPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJCXRlc3RfY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCQl0ZXN0X2NtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC1vJyAnCisJKAorCQljZCB0b3Avc3ViICYmCisJCWZvciBmIGluIC4uL3gqCisJCWRvCisJCQllY2hvICJlcnJvcjogcGF0aHNwZWMgJHNxJGYkc3EgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQuIgorCQlkb25lID5leHBlY3QuZXJyICYmCisJCWVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvICR7c3F9Z2l0IGFkZCR7c3F9PyIgPj5leHBlY3QuZXJyICYmCisJCWxzIC4uL3kqID5leHBlY3Qub3V0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtbyAtLWVycm9yLXVubWF0Y2ggLi4vW3h5XSogPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJCXRlc3RfY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCQl0ZXN0X2NtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwNi1scy1maWxlcy1sb25nLnNoIGIvdC90MzAwNi1scy1maWxlcy1sb25nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIwMmFkNjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDA2LWxzLWZpbGVzLWxvbmcuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J292ZXJseSBsb25nIHBhdGhzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXA9ZmlsZWZpbGVmaWxlZmlsZWZpbGVmaWxlZmlsZWZpbGUgJiYKKwlwPSRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwICYmCisJcD0kcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCAmJgorCisJcGF0aF9hPSR7cH1fYSAmJgorCXBhdGhfej0ke3B9X3ogJiYKKworCWJsb2JfYT0kKGVjaG8gZnJvdHogfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlibG9iX3o9JChlY2hvIG5pdGZvbCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCisJcGF0PSIxMDA2NDQgJXMgMFx0JXNcbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3Zlcmx5LWxvbmcgcGF0aCBieSBpdHNlbGYgaXMgbm90IGEgcHJvYmxlbScgJworCXByaW50ZiAiJHBhdCIgIiRibG9iX2EiICIkcGF0aF9hIiB8CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWluZGV4LWluZm8gJiYKKwllY2hvICIkcGF0aF9hIiA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJseS1sb25nIHBhdGggZG9lcyBub3QgcmVwbGFjZSBhbm90aGVyIGJ5IG1pc3Rha2UnICcKKwlwcmludGYgIiRwYXQiICIkYmxvYl9hIiAiJHBhdGhfYSIgIiRibG9iX3oiICIkcGF0aF96IiB8CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWluZGV4LWluZm8gJiYKKwkoCisJCWVjaG8gIiRwYXRoX2EiCisJCWVjaG8gIiRwYXRoX3oiCisJKSA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2ggYi90L3QzMDEwLWxzLWZpbGVzLWtpbGxlZC1tb2RpZmllZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NTY3MWMyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2gKQEAgLTAsMCArMSwxMDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLWZpbGVzIC1rIGFuZCAtbSBmbGFncyB0ZXN0LgorCitUaGlzIHRlc3QgcHJlcGFyZXMgdGhlIGZvbGxvd2luZyBpbiB0aGUgY2FjaGU6CisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIHBhdGgxICAgICAgIC0gYSBzeW1saW5rCisgICAgcGF0aDIvZmlsZTIgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy9maWxlMyAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorCithbmQgdGhlIGZvbGxvd2luZyBvbiB0aGUgZmlsZXN5c3RlbToKKworICAgIHBhdGgwL2ZpbGUwIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDEvZmlsZTEgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMiAgICAgICAtIGEgZmlsZQorICAgIHBhdGgzICAgICAgIC0gYSBzeW1saW5rCisgICAgcGF0aDQJLSBhIGZpbGUKKyAgICBwYXRoNQktIGEgc3ltbGluaworICAgIHBhdGg2L2ZpbGU2IC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisKK2dpdCBscy1maWxlcyAtayBzaG91bGQgcmVwb3J0IHRoYXQgZXhpc3RpbmcgZmlsZXN5c3RlbQorb2JqZWN0cyBleGNlcHQgcGF0aDQsIHBhdGg1IGFuZCBwYXRoNi9maWxlNiB0byBiZSBraWxsZWQuCisKK0Fsc28gZm9yIG1vZGlmaWNhdGlvbiB0ZXN0LCB0aGUgY2FjaGUgYW5kIHdvcmtpbmcgdHJlZSBoYXZlOgorCisgICAgcGF0aDcgICAgICAgLSBhbiBlbXB0eSBmaWxlLCBtb2RpZmllZCB0byBhIG5vbi1lbXB0eSBmaWxlLgorICAgIHBhdGg4ICAgICAgIC0gYSBub24tZW1wdHkgZmlsZSwgbW9kaWZpZWQgdG8gYW4gZW1wdHkgZmlsZS4KKyAgICBwYXRoOQktIGFuIGVtcHR5IGZpbGUsIGNhY2hlIGRpcnRpZWQuCisgICAgcGF0aDEwCS0gYSBub24tZW1wdHkgZmlsZSwgY2FjaGUgZGlydGllZC4KKworV2Ugc2hvdWxkIHJlcG9ydCBwYXRoMCwgcGF0aDEsIHBhdGgyL2ZpbGUyLCBwYXRoMy9maWxlMywgcGF0aDcgYW5kIHBhdGg4Cittb2RpZmllZCB3aXRob3V0IHJlcG9ydGluZyBwYXRoOSBhbmQgcGF0aDEwLgorJworLiAuL3Rlc3QtbGliLnNoCisKK2RhdGUgPnBhdGgwCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJbG4gLXMgeHl6enkgcGF0aDEKK2Vsc2UKKwlkYXRlID4gcGF0aDEKK2ZpCitta2RpciBwYXRoMiBwYXRoMworZGF0ZSA+cGF0aDIvZmlsZTIKK2RhdGUgPnBhdGgzL2ZpbGUzCis6ID5wYXRoNworZGF0ZSA+cGF0aDgKKzogPnBhdGg5CitkYXRlID5wYXRoMTAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRvIGFkZCB2YXJpb3VzIHBhdGhzLicgXAorICAgICJnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIHBhdGgwIHBhdGgxIHBhdGg/L2ZpbGU/IHBhdGg3IHBhdGg4IHBhdGg5IHBhdGgxMCIKKworcm0gLWZyIHBhdGg/IDsjIGxlYXZlIHBhdGgxMCBhbG9uZQorZGF0ZSA+cGF0aDIKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlsbiAtcyBmcm90eiBwYXRoMworCWxuIC1zIG5pdGZvbCBwYXRoNQorZWxzZQorCWRhdGUgPiBwYXRoMworCWRhdGUgPiBwYXRoNQorZmkKK21rZGlyIHBhdGgwIHBhdGgxIHBhdGg2CitkYXRlID5wYXRoMC9maWxlMAorZGF0ZSA+cGF0aDEvZmlsZTEKK2RhdGUgPnBhdGg2L2ZpbGU2CitkYXRlID5wYXRoNworOiA+cGF0aDgKKzogPnBhdGg5Cit0b3VjaCBwYXRoMTAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyAtayB0byBzaG93IGtpbGxlZCBmaWxlcy4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC1rID4ub3V0cHV0JworY2F0ID4uZXhwZWN0ZWQgPDxFT0YKK3BhdGgwL2ZpbGUwCitwYXRoMS9maWxlMQorcGF0aDIKK3BhdGgzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIGdpdCBscy1maWxlcyAtayBvdXRwdXQuJyBcCisgICAgJ3Rlc3RfY21wIC5leHBlY3RlZCAub3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC1tIHRvIHNob3cgbW9kaWZpZWQgZmlsZXMuJyBcCisgICAgJ2dpdCBscy1maWxlcyAtbSA+Lm91dHB1dCcKK2NhdCA+LmV4cGVjdGVkIDw8RU9GCitwYXRoMAorcGF0aDEKK3BhdGgyL2ZpbGUyCitwYXRoMy9maWxlMworcGF0aDcKK3BhdGg4CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIGdpdCBscy1maWxlcyAtbSBvdXRwdXQuJyBcCisgICAgJ3Rlc3RfY21wIC5leHBlY3RlZCAub3V0cHV0JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMjAtbHMtZmlsZXMtZXJyb3ItdW5tYXRjaC5zaCBiL3QvdDMwMjAtbHMtZmlsZXMtZXJyb3ItdW5tYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYTAxMDUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAyMC1scy1maWxlcy1lcnJvci11bm1hdGNoLnNoCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgQ2FybCBELiBXb3J0aAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtZmlsZXMgdGVzdCBmb3IgLS1lcnJvci11bm1hdGNoIG9wdGlvbgorCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkKK3JldHVybnMgYW4gZXJyb3Igd2hlbiBhIG5vbi1leGlzdGVudCBwYXRoIGlzIHByb3ZpZGVkIG9uIHRoZSBjb21tYW5kCitsaW5lLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdG91Y2ggZm9vIGJhciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vIGJhciAmJgorCWdpdCBjb21taXQgLW0gImFkZCBmb28gYmFyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzaG91bGQgZmFpbCB3aXRoIHVubWF0Y2hlZCBwYXRoLicgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyBiYXItZG9lcy1ub3QtbWF0Y2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIHNob3VsZCBzdWNjZWVkIGVpdGggbWF0Y2hlZCBwYXRocy4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gYmFyJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoIGIvdC90MzAzMC1tZXJnZS1yZWN1cnNpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTVlM2RhNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCkBAIC0wLDAgKzEsNTk2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UtcmVjdXJzaXZlIGJhY2tlbmQgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDEnICcKKworCWVjaG8gaGVsbG8gPmEgJiYKKwlvMD0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgorCWNwIGEgYiAmJgorCWNwIGEgYyAmJgorCW1rZGlyIGQgJiYKKwljcCBhIGQvZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGFkZCBhIGIgYyBkL2UgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwljMD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwlnaXQgYnJhbmNoIGRmLTEgJiYKKwlnaXQgYnJhbmNoIGRmLTIgJiYKKwlnaXQgYnJhbmNoIGRmLTMgJiYKKwlnaXQgYnJhbmNoIHJlbW92ZSAmJgorCWdpdCBicmFuY2ggc3VibW9kICYmCisJZ2l0IGJyYW5jaCBjb3B5ICYmCisJZ2l0IGJyYW5jaCByZW5hbWUgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCisJdGhlbgorCQlnaXQgYnJhbmNoIHJlbmFtZS1sbgorCWZpICYmCisKKwllY2hvIGhlbGxvID4+YSAmJgorCWNwIGEgZC9lICYmCisJbzE9JChnaXQgaGFzaC1vYmplY3QgYSkgJiYKKworCWdpdCBhZGQgYSBkL2UgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIm1hc3RlciBtb2RpZmllcyBhIGFuZCBkL2UiICYmCisJYzE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEIDsgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8xCWEiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8xCWQvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAyJyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwllY2hvIGdvb2RieWUgPj5hICYmCisJbzI9JChnaXQgaGFzaC1vYmplY3QgYSkgJiYKKworCWdpdCBhZGQgYSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2lkZSBtb2RpZmllcyBhIiAmJgorCWMyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCA7IGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMglhIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzIgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgMycgJworCisJcm0gLXJmIFthYmNkXSAmJgorCWdpdCBjaGVja291dCBkZi0xICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEIDsgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWEiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJcm0gLWYgYiAmJiBta2RpciBiICYmIGVjaG8gZGYtMSA+Yi9jICYmIGdpdCBhZGQgYi9jICYmCisJbzM9JChnaXQgaGFzaC1vYmplY3QgYi9jKSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZGYtMSBtYWtlcyBiL2MiICYmCisJYzM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEIDsgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWEiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMwliL2MiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMyAwCWIvYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgNCcgJworCisJcm0gLXJmIFthYmNkXSAmJgorCWdpdCBjaGVja291dCBkZi0yICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEIDsgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWEiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJcm0gLWYgYSAmJiBta2RpciBhICYmIGVjaG8gZGYtMiA+YS9jICYmIGdpdCBhZGQgYS9jICYmCisJbzQ9JChnaXQgaGFzaC1vYmplY3QgYS9jKSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZGYtMiBtYWtlcyBhL2MiICYmCisJYzQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEIDsgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG80CWEvYyIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgJG80IDAJYS9jIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgNScgJworCisJcm0gLXJmIFthYmNkXSAmJgorCWdpdCBjaGVja291dCByZW1vdmUgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlybSAtZiBiICYmCisJZWNobyByZW1vdmUtY29uZmxpY3QgPmEgJiYKKworCWdpdCBhZGQgYSAmJgorCWdpdCBybSBiICYmCisJbzU9JChnaXQgaGFzaC1vYmplY3QgYSkgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSByZW1vdmVzIGIgYW5kIG1vZGlmaWVzIGEiICYmCisJYzU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEIDsgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG81CWEiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgJG81IDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCA2JyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IGRmLTMgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlybSAtZnIgZCAmJiBlY2hvIGRmLTMgPmQgJiYgZ2l0IGFkZCBkICYmCisJbzY9JChnaXQgaGFzaC1vYmplY3QgZCkgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImRmLTMgbWFrZXMgZCIgJiYKKwljNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzYJZCIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvNiAwCWQiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgNycgJworCisJZ2l0IGNoZWNrb3V0IHN1Ym1vZCAmJgorCWdpdCBybSBkL2UgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgZC9lIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICRjMSBkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibWFrZSBkLyBhIHN1Ym1vZHVsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgOCcgJworCWdpdCBjaGVja291dCByZW5hbWUgJiYKKwlnaXQgbXYgYSBlICYmCisJZ2l0IGFkZCBlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIGEtPmUiICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUworCXRoZW4KKwkJZ2l0IGNoZWNrb3V0IHJlbmFtZS1sbiAmJgorCQlnaXQgbXYgYSBlICYmCisJCWxuIC1zIGUgYSAmJgorCQlnaXQgYWRkIGEgZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIGEtPmUsIHN5bWxpbmsgYS0+ZSIgJiYKKwkJb2xuPWBwcmludGYgZSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluYAorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDknICcKKwlnaXQgY2hlY2tvdXQgY29weSAmJgorCWNwIGEgZSAmJgorCWdpdCBhZGQgZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvcHkgYS0+ZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHNpbXBsZScgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCBjaGVja291dCAtZiAiJGMyIiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRjMCIgLS0gIiRjMiIgIiRjMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHJlc3VsdCcgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzAgMQlhIgorCQllY2hvICIxMDA2NDQgJG8yIDIJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAzCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgdGhlIGluZGV4IGhhcyB1bnJlc29sdmVkIGVudHJpZXMnICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjMSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcyIgb3V0ICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UiIG91dCAmJgorCXJtIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgcmVtb3ZlIGNvbmZsaWN0JyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiJGMwIiAtLSAiJGMxIiAiJGM1IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgcmVtb3ZlIGNvbmZsaWN0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMCAxCWEiCisJCWVjaG8gIjEwMDY0NCAkbzEgMglhIgorCQllY2hvICIxMDA2NDQgJG81IDMJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIHNpbXBsZScgJworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzEiICIkYzMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSByZXN1bHQnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMyAwCWIvYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0JyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtZiAiJGMxIiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRjMCIgLS0gIiRjMSIgIiRjNCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIGQvZiBjb25mbGljdCByZXN1bHQnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8wIDEJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAyCWEiCisJCWVjaG8gIjEwMDY0NCAkbzQgMAlhL2MiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgdGhlIG90aGVyIHdheScgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjNCIgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzQiICIkYzEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgcmVzdWx0IHRoZSBvdGhlciB3YXknICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8wIDEJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAzCWEiCisJCWVjaG8gIjEwMDY0NCAkbzQgMAlhL2MiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QnICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiJGMwIiAtLSAiJGMxIiAiJGM2IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0IHJlc3VsdCcgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzYgMwlkIgorCQllY2hvICIxMDA2NDQgJG8wIDEJZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDIJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIGQvZiBjb25mbGljdCcgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjNiIgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzYiICIkYzEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgcmVzdWx0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvNiAyCWQiCisJCWVjaG8gIjEwMDY0NCAkbzAgMQlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzEgMwlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBhbmQgMy13YXkgbWVyZ2UnICcKKworCWdpdCByZXNldCAtLWhhcmQgIiRjMiIgJiYKKwlnaXQgcmVhZC10cmVlIC1tICIkYzAiICIkYzIiICIkYzEiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgYW5kIGJpbmQgbWVyZ2UnICcKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IHJlYWQtdHJlZSAtLXByZWZpeD1NLyBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PWExLyBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWExL2EiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhMS9iIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYTEvYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWExL2QvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PXovIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJTS9hIgorCQllY2hvICIxMDA2NDQgJG8wIDAJTS9iIgorCQllY2hvICIxMDA2NDQgJG8wIDAJTS9jIgorCQllY2hvICIxMDA2NDQgJG8xIDAJTS9kL2UiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYTEvYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWExL2IiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhMS9jIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYTEvZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAl6L2EiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAl6L2IiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAl6L2MiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAl6L2QvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHJlbW92ZXMgZW1wdHkgZGlyZWN0b3JpZXMnICcKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJtICYmCisJZ2l0IHJtIGQvZSAmJgorCWdpdCBjb21taXQgLW1yZW1vdmVkLWQvZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHJtICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZCBkCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21lcmdlLXJlY3Vyc2l2ZSBzaW1wbGUgdy9zdWJtb2R1bGUnICcKKworCWdpdCBjaGVja291dCBzdWJtb2QgJiYKKwlnaXQgbWVyZ2UgcmVtb3ZlCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21lcmdlLXJlY3Vyc2l2ZSBzaW1wbGUgdy9zdWJtb2R1bGUgcmVzdWx0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvNSAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxNjAwMDAgJGMxIDAJZCIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgY29weSB2cy4gcmVuYW1lJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYKKwlnaXQgbWVyZ2UgcmVuYW1lICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEICYmIGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWUiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWUiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ21lcmdlLXJlY3Vyc2l2ZSByZW5hbWUgdnMuIHJlbmFtZS9zeW1saW5rJyAnCisKKwkJZ2l0IGNoZWNrb3V0IC1mIHJlbmFtZSAmJgorCQlnaXQgbWVyZ2UgcmVuYW1lLWxuICYmCisJCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCA7IGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkJKAorCQkJZWNobyAiMTIwMDAwIGJsb2IgJG9sbglhIgorCQkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIKKwkJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZSIKKwkJCWVjaG8gIjEyMDAwMCAkb2xuIDAJYSIKKwkJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCQkJZWNobyAiMTAwNjQ0ICRvMCAwCWUiCisJCSkgPmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKK2ZpCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDMxLW1lcmdlLWNyaXNjcm9zcy5zaCBiL3QvdDMwMzEtbWVyZ2UtY3Jpc2Nyb3NzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmNDE2MDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDMxLW1lcmdlLWNyaXNjcm9zcy5zaApAQCAtMCwwICsxLDk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UtcmVjdXJzaXZlIGJhY2tlbmQgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgICAgICAgICBBICAgICAgPC0gY3JlYXRlIHNvbWUgZmlsZXMKKyMgICAgICAgIC8gXAorIyAgICAgICBCICAgQyAgICA8LSBjYXVzZSByZW5hbWUvZGVsZXRlIGNvbmZsaWN0cyBiZXR3ZWVuIEIgYW5kIEMKKyMgICAgICAvICAgICBcCisjICAgICB8XCAgICAgL3wKKyMgICAgIHwgRCAgIEUgfAorIyAgICAgfCAgXCAvICB8CisjICAgICB8ICAgWCAgIHwKKyMgICAgIHwgIC8gXCAgfAorIyAgICAgfCAvICAgXCB8CisjICAgICB8LyAgICAgXHwKKyMgICAgIEYgICAgICAgRyAgPC0gbWVyZ2UgRSBpbnRvIEIsIEQgaW50byBDCisjICAgICAgXCAgICAgLworIyAgICAgICBcICAgLworIyAgICAgICAgXCAvCisjICAgICAgICAgSCAgICAgIDwtIHJlY3Vyc2l2ZSBtZXJnZSBjcmFzaGVzCisjCisKKyMgaW5pdGlhbGl6ZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbyB3aXRoIGNyaXNzLWNyb3NzIGhpc3RvcnknICcKKwlta2RpciBkYXRhICYmCisKKwkjIGNyZWF0ZSBhIGJ1bmNoIG9mIGZpbGVzCisJbj0xICYmCisJd2hpbGUgdGVzdCAkbiAtbGUgMTAKKwlkbworCQllY2hvICRuID4gZGF0YS8kbiAmJgorCQluPSQoKCRuKzEpKSB8fAorCQlicmVhaworCWRvbmUgJiYKKworCSMgY2hlY2sgdGhlbSBpbgorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCWdpdCBicmFuY2ggQSAmJgorCisJIyBhIGZpbGUgaW4gb25lIGJyYW5jaAorCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwlnaXQgcm0gZGF0YS85ICYmCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwkjIHdpdGggYSBicmFuY2ggb2ZmIG9mIGl0CisJZ2l0IGJyYW5jaCBEICYmCisKKwkjIHB1dCBzb21lIGNvbW1pdHMgb24gRAorCWdpdCBjaGVja291dCBEICYmCisJZWNobyB0ZXN0RCA+IGRhdGEvdGVzdEQgJiYKKwlnaXQgYWRkIGRhdGEgJiYKKwlnaXQgY29tbWl0IC1tIEQgJiYKKworCSMgYmFjayB1cCB0byB0aGUgdG9wLCBjcmVhdGUgYW5vdGhlciBicmFuY2ggYW5kIGNhdXNlCisJIyBhIHJlbmFtZSBjb25mbGljdCB3aXRoIHRoZSBmaWxlIHdlIGRlbGV0ZWQgZWFybGllcgorCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwlnaXQgbXYgZGF0YS85IGRhdGEvbmV3LTkgJiYKKwlnaXQgYWRkIGRhdGEgJiYKKwlnaXQgY29tbWl0IC1tIEMgJiYKKworCSMgd2l0aCBhIGJyYW5jaCBvZmYgb2YgaXQKKwlnaXQgYnJhbmNoIEUgJiYKKworCSMgcHV0IGEgY29tbWl0IG9uIEUKKwlnaXQgY2hlY2tvdXQgRSAmJgorCWVjaG8gdGVzdEUgPiBkYXRhL3Rlc3RFICYmCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBFICYmCisKKwkjIG5vdywgbWVyZ2UgRSBpbnRvIEIKKwlnaXQgY2hlY2tvdXQgQiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBFICYmCisJIyBmb3JjZS1yZXNvbHZlCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBGICYmCisJZ2l0IGJyYW5jaCBGICYmCisKKwkjIGFuZCBtZXJnZSBEIGludG8gQworCWdpdCBjaGVja291dCBDICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEQgJiYKKwkjIGZvcmNlLXJlc29sdmUKKwlnaXQgYWRkIGRhdGEgJiYKKwlnaXQgY29tbWl0IC1tIEcgJiYKKwlnaXQgYnJhbmNoIEcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjdXJzaXZlIG1lcmdlIGJldHdlZW4gRiBhbmQgRywgY2F1c2VzIHNlZ2ZhdWx0JyAnCisJZ2l0IG1lcmdlIEYKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDMyLW1lcmdlLXJlY3Vyc2l2ZS1vcHRpb25zLnNoIGIvdC90MzAzMi1tZXJnZS1yZWN1cnNpdmUtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYjE3MzExCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAzMi1tZXJnZS1yZWN1cnNpdmUtb3B0aW9ucy5zaApAQCAtMCwwICsxLDIwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlLXJlY3Vyc2l2ZSBvcHRpb25zCisKKyogW21hc3Rlcl0gQ2xhcmlmeQorICEgW3JlbW90ZV0gUmVtb3ZlIGNydWZ0CistLQorICsgW3JlbW90ZV0gUmVtb3ZlIGNydWZ0CisqICBbbWFzdGVyXSBDbGFyaWZ5CisqKyBbcmVtb3RlXl0gSW5pdGlhbCByZXZpc2lvbgorKiAgIG9rIDE6IHNldHVwCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2hhdmVfcHJlcmVxIFNFRF9TVFJJUFNfQ1IgJiYgU0VEX09QVElPTlM9LWIKK3Rlc3RfaGF2ZV9wcmVyZXEgTUlOR1cgJiYgZXhwb3J0IEdSRVBfT1BUSU9OUz0tVQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNvbmZsaWN0X2h1bmtzICgpIHsKKwkJc2VkICRTRURfT1BUSU9OUyAtbiAtZSAiCisJCQkvXjw8PDwvIGIgY29uZmxpY3QKKwkJCWIKKwkJCTogY29uZmxpY3QKKwkJCXAKKwkJCS9ePj4+Pi8gYgorCQkJbgorCQkJYiBjb25mbGljdAorCQkiICIkQCIKKwl9ICYmCisKKwljYXQgPDwtXEVPRiA+dGV4dC50eHQgJiYKKwkgICAgSG9wZSwgaGUgc2F5cywgY2hlcmlzaGVzIHRoZSBzb3VsIG9mIGhpbSB3aG8gbGl2ZXMgaW4KKwkgICAganVzdGljZSBhbmQgaG9saW5lc3MgYW5kIGlzIHRoZSBudXJzZSBvZiBoaXMgYWdlIGFuZCB0aGUKKwkgICAgY29tcGFuaW9uIG9mIGhpcyBqb3VybmV5Oy0taG9wZSB3aGljaCBpcyBtaWdodGllc3QgdG8gc3dheQorCSAgICB0aGUgcmVzdGxlc3Mgc291bCBvZiBtYW4uCisKKwlIb3cgYWRtaXJhYmxlIGFyZSBoaXMgd29yZHMhICBBbmQgdGhlIGdyZWF0IGJsZXNzaW5nIG9mIHJpY2hlcywgSSBkbworCW5vdCBzYXkgdG8gZXZlcnkgbWFuLCBidXQgdG8gYSBnb29kIG1hbiwgaXMsIHRoYXQgaGUgaGFzIGhhZCBubworCW9jY2FzaW9uIHRvIGRlY2VpdmUgb3IgdG8gZGVmcmF1ZCBvdGhlcnMsIGVpdGhlciBpbnRlbnRpb25hbGx5IG9yCisJdW5pbnRlbnRpb25hbGx5OyBhbmQgd2hlbiBoZSBkZXBhcnRzIHRvIHRoZSB3b3JsZCBiZWxvdyBoZSBpcyBub3QgaW4KKwlhbnkgYXBwcmVoZW5zaW9uIGFib3V0IG9mZmVyaW5ncyBkdWUgdG8gdGhlIGdvZHMgb3IgZGVidHMgd2hpY2ggaGUgb3dlcworCXRvIG1lbi4gIE5vdyB0byB0aGlzIHBlYWNlIG9mIG1pbmQgdGhlIHBvc3Nlc3Npb24gb2Ygd2VhbHRoIGdyZWF0bHkKKwljb250cmlidXRlczsgYW5kIHRoZXJlZm9yZSBJIHNheSwgdGhhdCwgc2V0dGluZyBvbmUgdGhpbmcgYWdhaW5zdAorCWFub3RoZXIsIG9mIHRoZSBtYW55IGFkdmFudGFnZXMgd2hpY2ggd2VhbHRoIGhhcyB0byBnaXZlLCB0byBhIG1hbiBvZgorCXNlbnNlIHRoaXMgaXMgaW4gbXkgb3BpbmlvbiB0aGUgZ3JlYXRlc3QuCisKKwlXZWxsIHNhaWQsIENlcGhhbHVzLCBJIHJlcGxpZWQ7IGJ1dCBhcyBjb25jZXJuaW5nIGp1c3RpY2UsIHdoYXQgaXMKKwlpdD8tLXRvIHNwZWFrIHRoZSB0cnV0aCBhbmQgdG8gcGF5IHlvdXIgZGVidHMtLW5vIG1vcmUgdGhhbiB0aGlzPyAgQW5kCisJZXZlbiB0byB0aGlzIGFyZSB0aGVyZSBub3QgZXhjZXB0aW9ucz8gIFN1cHBvc2UgdGhhdCBhIGZyaWVuZCB3aGVuIGluCisJaGlzIHJpZ2h0IG1pbmQgaGFzIGRlcG9zaXRlZCBhcm1zIHdpdGggbWUgYW5kIGhlIGFza3MgZm9yIHRoZW0gd2hlbiBoZQorCWlzIG5vdCBpbiBoaXMgcmlnaHQgbWluZCwgb3VnaHQgSSB0byBnaXZlIHRoZW0gYmFjayB0byBoaW0/ICBObyBvbmUKKwl3b3VsZCBzYXkgdGhhdCBJIG91Z2h0IG9yIHRoYXQgSSBzaG91bGQgYmUgcmlnaHQgaW4gZG9pbmcgc28sIGFueSBtb3JlCisJdGhhbiB0aGV5IHdvdWxkIHNheSB0aGF0IEkgb3VnaHQgYWx3YXlzIHRvIHNwZWFrIHRoZSB0cnV0aCB0byBvbmUgd2hvCisJaXMgaW4gaGlzIGNvbmRpdGlvbi4KKworCVlvdSBhcmUgcXVpdGUgcmlnaHQsIGhlIHJlcGxpZWQuCisKKwlCdXQgdGhlbiwgSSBzYWlkLCBzcGVha2luZyB0aGUgdHJ1dGggYW5kIHBheWluZyB5b3VyIGRlYnRzIGlzIG5vdCBhCisJY29ycmVjdCBkZWZpbml0aW9uIG9mIGp1c3RpY2UuCisKKwlDRVBIQUxVUyAtIFNPQ1JBVEVTIC0gUE9MRU1BUkNIVVMKKworCVF1aXRlIGNvcnJlY3QsIFNvY3JhdGVzLCBpZiBTaW1vbmlkZXMgaXMgdG8gYmUgYmVsaWV2ZWQsIHNhaWQKKwlQb2xlbWFyY2h1cyBpbnRlcnBvc2luZy4KKworCUkgZmVhciwgc2FpZCBDZXBoYWx1cywgdGhhdCBJIG11c3QgZ28gbm93LCBmb3IgSSBoYXZlIHRvIGxvb2sgYWZ0ZXIgdGhlCisJc2FjcmlmaWNlcywgYW5kIEkgaGFuZCBvdmVyIHRoZSBhcmd1bWVudCB0byBQb2xlbWFyY2h1cyBhbmQgdGhlIGNvbXBhbnkuCisJRU9GCisJZ2l0IGFkZCB0ZXh0LnR4dCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgcmV2aXNpb24iICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVtb3RlICYmCisJc2VkIC1lICIKKwkJCXMvXC4gIC9cLiAvZworCQkJcy9bP10gIC8/IC9nCisJCQlzLyAgICAvCS9nCisJCQlzLy0tLy0tLS9nCisJCQlzL2J1dCBhcyBjb25jZXJuaW5nL2J1dCBhcyBjb24gY2VybmluZy8KKwkJCS9DRVBIQUxVUyAtIFNPQ1JBVEVTIC0gUE9MRU1BUkNIVVMvIGQKKwkJIiB0ZXh0LnR4dCA+dGV4dC50eHQrICYmCisJbXYgdGV4dC50eHQrIHRleHQudHh0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiUmVtb3ZlIGNydWZ0IiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXNlZCAtZSAiCisJCQlzL1wobm90IGluIGhpcyByaWdodCBtaW5kXCksXCguKlwpL1wxO1wyUS8KKwkJCXMvUXVpdGUgY29ycmVjdFwoLipcKS9JdCBpcyB0b28gY29ycmVjdFwxUS8KKwkJCXMvdW5pbnRlbnRpb25hbGx5L3VuIGludGVudGlvbmFsbHkvCisJCQkvdW4gaW50ZW50aW9uYWxseS8gcy8kL1EvCisJCQlzL1BvbGVtYXJjaHVzIGludGVycG9zaW5nLi9Qb2xlbWFyY2h1cywgaW50ZXJwb3NpbmcuUS8KKwkJCS9qdXN0aWNlIGFuZCBob2xpbmVzcy8gcy8kL1EvCisJCQkvcGF5IHlvdXIgZGVidHMvIHMvJC9RLworCQkiIHRleHQudHh0IHwgcV90b19jciA+dGV4dC50eHQrICYmCisJbXYgdGV4dC50eHQrIHRleHQudHh0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQ2xhcmlmeSIgJiYKKwlnaXQgc2hvdy1icmFuY2ggLS1hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmFpdmUgbWVyZ2UgZmFpbHMnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdyZXAgIjw8PDw8PCIgdGV4dC50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3BhY2UtY2hhbmdlIG1ha2VzIG1lcmdlIHN1Y2NlZWQnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIEhFQUReIC0tIEhFQUQgcmVtb3RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25haXZlIGNoZXJyeS1waWNrIGZhaWxzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1uby1jb21taXQgcmVtb3RlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcmVtb3RlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlncmVwICI8PDw8PDwiIHRleHQudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1YaWdub3JlLXNwYWNlLWNoYW5nZSBtYWtlcyBjaGVycnktcGljayBzdWNjZWVkJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1uby1jb21taXQgLVhpZ25vcmUtc3BhY2UtY2hhbmdlIHJlbW90ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zcGFjZS1jaGFuZ2U6IG91ciB3L3Mtb25seSBjaGFuZ2Ugd2lucycgJworCXFfdG9fY3IgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwkgICAganVzdGljZSBhbmQgaG9saW5lc3MgYW5kIGlzIHRoZSBudXJzZSBvZiBoaXMgYWdlIGFuZCB0aGVRCisJRU9GCisKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIEhFQUReIC0tIEhFQUQgcmVtb3RlICYmCisJZ3JlcCAianVzdGljZSBhbmQgaG9saW5lc3MiIHRleHQudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3BhY2UtY2hhbmdlOiB0aGVpciByZWFsIGNoYW5nZSB3aW5zIG92ZXIgdy9zJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJaXQ/LS0tdG8gc3BlYWsgdGhlIHRydXRoIGFuZCB0byBwYXkgeW91ciBkZWJ0cy0tLW5vIG1vcmUgdGhhbiB0aGlzPyBBbmQKKwlFT0YKKworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwlncmVwICJwYXkgeW91ciBkZWJ0cyIgdGV4dC50eHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zcGFjZS1jaGFuZ2U6IGRvZXMgbm90IGlnbm9yZSBuZXcgc3BhY2VzJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkMSAmJgorCVdlbGwgc2FpZCwgQ2VwaGFsdXMsIEkgcmVwbGllZDsgYnV0IGFzIGNvbiBjZXJuaW5nIGp1c3RpY2UsIHdoYXQgaXMKKwlFT0YKKwlxX3RvX2NyIDw8LVxFT0YgPmV4cGVjdGVkMiAmJgorCXVuIGludGVudGlvbmFsbHk7IGFuZCB3aGVuIGhlIGRlcGFydHMgdG8gdGhlIHdvcmxkIGJlbG93IGhlIGlzIG5vdCBpblEKKwlFT0YKKworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwlncmVwICJXZWxsIHNhaWQiIHRleHQudHh0ID5hY3R1YWwxICYmCisJZ3JlcCAid2hlbiBoZSBkZXBhcnRzIiB0ZXh0LnR4dCA+YWN0dWFsMiAmJgorCXRlc3RfY21wIGV4cGVjdGVkMSBhY3R1YWwxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQyIGFjdHVhbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtYWxsLXNwYWNlIGRyb3BzIHRoZWlyIG5ldyBzcGFjZXMnICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlXZWxsIHNhaWQsIENlcGhhbHVzLCBJIHJlcGxpZWQ7IGJ1dCBhcyBjb25jZXJuaW5nIGp1c3RpY2UsIHdoYXQgaXMKKwlFT0YKKworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1hbGwtc3BhY2UgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwlncmVwICJXZWxsIHNhaWQiIHRleHQudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtYWxsLXNwYWNlIGtlZXBzIG91ciBuZXcgc3BhY2VzJyAnCisJcV90b19jciA8PC1cRU9GID5leHBlY3RlZCAmJgorCXVuIGludGVudGlvbmFsbHk7IGFuZCB3aGVuIGhlIGRlcGFydHMgdG8gdGhlIHdvcmxkIGJlbG93IGhlIGlzIG5vdCBpblEKKwlFT0YKKworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1hbGwtc3BhY2UgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwlncmVwICJ3aGVuIGhlIGRlcGFydHMiIHRleHQudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3BhY2UtYXQtZW9sJyAnCisJcV90b19jciA8PC1cRU9GID5leHBlY3RlZCAmJgorCTw8PDw8PDwgSEVBRAorCWlzIG5vdCBpbiBoaXMgcmlnaHQgbWluZDsgb3VnaHQgSSB0byBnaXZlIHRoZW0gYmFjayB0byBoaW0/ICBObyBvbmVRCisJPT09PT09PQorCWlzIG5vdCBpbiBoaXMgcmlnaHQgbWluZCwgb3VnaHQgSSB0byBnaXZlIHRoZW0gYmFjayB0byBoaW0/IE5vIG9uZQorCT4+Pj4+Pj4gcmVtb3RlCisJRU9GCisKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIFwKKwkJCQkJCSBIRUFEXiAtLSBIRUFEIHJlbW90ZSAmJgorCWNvbmZsaWN0X2h1bmtzIHRleHQudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDQwLXN1YnByb2plY3RzLWJhc2ljLnNoIGIvdC90MzA0MC1zdWJwcm9qZWN0cy1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYTRmZjZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzA0MC1zdWJwcm9qZWN0cy1iYXNpYy5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQmFzaWMgc3VicHJvamVjdCBmdW5jdGlvbmFsaXR5JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjcmVhdGUgc3VwZXJwcm9qZWN0JyAnCisJOiA+TWFrZWZpbGUgJiYKKwlnaXQgYWRkIE1ha2VmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiU3VwZXJwcm9qZWN0IGNyZWF0ZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjcmVhdGUgc3VicHJvamVjdHMnICcKKwlta2RpciBzdWIxICYmCisJKCBjZCBzdWIxICYmIGdpdCBpbml0ICYmIDogPk1ha2VmaWxlICYmIGdpdCBhZGQgKiAmJgorCWdpdCBjb21taXQgLXEgLW0gInN1YnByb2plY3QgMSIgKSAmJgorCW1rZGlyIHN1YjIgJiYKKwkoIGNkIHN1YjIgJiYgZ2l0IGluaXQgJiYgOiA+TWFrZWZpbGUgJiYgZ2l0IGFkZCAqICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAic3VicHJvamVjdCAyIiApICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBzdWIxICYmCisJZ2l0IGFkZCBzdWIyICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAic3VicHJvamVjdHMgYWRkZWQiICYmCisJZ2l0IGRpZmYtdHJlZSAtLWFiYnJldj01IEhFQUReIEhFQUQgfGN1dCAtZCIgIiAtZi0zLDUtID5jdXJyZW50ICYmCisJZ2l0IGJyYW5jaCBzYXZlIEhFQUQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwk6MDAwMDAwIDE2MDAwMCAwMDAwMC4uLiBBCXN1YjEKKwk6MDAwMDAwIDE2MDAwMCAwMDAwMC4uLiBBCXN1YjIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGZzY2sgaWdub3JlcyB0aGUgc3VicHJvamVjdHMnICcKKwlnaXQgZnNjayAtLWZ1bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgY29tbWl0IGluIGEgc3VicHJvamVjdCBkZXRlY3RlZCcgJworCSggY2Qgc3ViMSAmJgorCWVjaG8gImFsbDoiID4+TWFrZWZpbGUgJiYKKwllY2hvICIJdHJ1ZSIgPj5NYWtlZmlsZSAmJgorCWdpdCBjb21taXQgLXEgLWEgLW0gIm1ha2UgYWxsIiApICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGEgY2hhbmdlZCBzdWJwcm9qZWN0IEhFQUQgY2FuIGJlIGNvbW1pdHRlZCcgJworCWdpdCBjb21taXQgLXEgLWEgLW0gInN1YjEgY2hhbmdlZCIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGRpZmYtaW5kZXggd29ya3MgZm9yIHN1YnByb2plY3QgZWxlbWVudHMnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgLS1jYWNoZWQgc2F2ZSAtLSBzdWIxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGRpZmYtdHJlZSB3b3JrcyBmb3Igc3VicHJvamVjdCBlbGVtZW50cycgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQgLS0gc3ViMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiBnaXQgZGlmZiB3b3JrcyBmb3Igc3VicHJvamVjdCBlbGVtZW50cycgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGNsb25lIHdvcmtzJyAnCisJZ2l0IGxzLWZpbGVzIC1zID5leHBlY3RlZCAmJgorCWdpdCBjbG9uZSAtbCAtcyAuIGNsb25lZCAmJgorCSggY2QgY2xvbmVkICYmIGdpdCBscy1maWxlcyAtcyApID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyBhbmQgYWRkaW5nIHN1YnByb2plY3QnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIC0tIHN1YjIgJiYKKwltdiBzdWIyIHN1YjMgJiYKKwlnaXQgYWRkIHN1YjMgJiYKKwlnaXQgY29tbWl0IC1xIC1tICJyZW5hbWluZyBhIHN1YnByb2plY3QiICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC1NIC0tbmFtZS1zdGF0dXMgLS1leGl0LWNvZGUgSEVBRF4gSEVBRAorJworCisjIHRoZSBpbmRleCBtdXN0IGNvbnRhaW4gdGhlIG9iamVjdCBuYW1lIHRoZSBIRUFEIG9mIHRoZQorIyBzdWJwcm9qZWN0IHN1YjEgd2FzIGF0IHRoZSBwb2ludCAic2F2ZSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGluIHN1cGVycHJvamVjdCcgJworCWdpdCBjaGVja291dCBzYXZlICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgLS1yYXcgLS1jYWNoZWQgc2F2ZSAtLSBzdWIxCisnCisKKyMganVzdCBpbnRlcmVzdGluZyB3aGF0IGhhcHBlbmVkLi4uCisjIGdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgLU0gc2F2ZSBtYXN0ZXIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDUwLXN1YnByb2plY3RzLWZldGNoLnNoIGIvdC90MzA1MC1zdWJwcm9qZWN0cy1mZXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZjVmNDFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzA1MC1zdWJwcm9qZWN0cy1mZXRjaC5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2hpbmcgYW5kIHB1c2hpbmcgcHJvamVjdCB3aXRoIHN1YnByb2plY3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X3RpY2sgJiYKKwlta2RpciAtcCBzdWIgJiYgKAorCQljZCBzdWIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJPnN1YmZpbGUgJiYKKwkJZ2l0IGFkZCBzdWJmaWxlICYmCisJCWdpdCBjb21taXQgLW0gInN1YnByb2plY3QgY29tbWl0ICMxIgorCSkgJiYKKwk+bWFpbmZpbGUgJiYKKwlnaXQgYWRkIHN1YiBtYWluZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInN1cGVycHJvamVjdCBjb21taXQgIzEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgY2xvbmUgJworCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS8uZ2l0IiBjbG9uZWQgJiYKKwkoZ2l0IHJldi1wYXJzZSBIRUFEOyBnaXQgbHMtZmlsZXMgLXMpID5leHBlY3RlZCAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCShnaXQgcmV2LXBhcnNlIEhFQUQ7IGdpdCBscy1maWxlcyAtcykgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBhZHZhbmNlICcKKwllY2hvIG1vcmUgPm1haW5maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSBzdWIgJiYKKwltdiBzdWIvLmdpdCBzdWIvLmdpdC1kaXNhYmxlZCAmJgorCWdpdCBhZGQgc3ViL3N1YmZpbGUgbWFpbmZpbGUgJiYKKwltdiBzdWIvLmdpdC1kaXNhYmxlZCBzdWIvLmdpdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInN1cGVycHJvamVjdCBjb21taXQgIzIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgZmV0Y2ggJworCShnaXQgcmV2LXBhcnNlIEhFQUQ7IGdpdCBscy1maWxlcyAtcykgPmV4cGVjdGVkICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IHB1bGwgJiYKKwkJKGdpdCByZXYtcGFyc2UgSEVBRDsgZ2l0IGxzLWZpbGVzIC1zKSA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwNjAtbHMtZmlsZXMtd2l0aC10cmVlLnNoIGIvdC90MzA2MC1scy1maWxlcy13aXRoLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjFjMWY1MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwNjAtbHMtZmlsZXMtd2l0aC10cmVlLnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2FybCBELiBXb3J0aAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtZmlsZXMgdGVzdCAoLS13aXRoLXRyZWUpLgorCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgLS13aXRoLXRyZWUgYW5kIGluIHBhcnRpY3VsYXIgaW4KK2Egc2NlbmFyaW8ga25vd24gdG8gdHJpZ2dlciBhIGNyYXNoIHdpdGggc29tZSB2ZXJzaW9ucyBvZiBnaXQuCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwkjIFRoZSBidWcgd2UgYXJlIGV4ZXJjaXNpbmcgcmVxdWlyZXMgYSBmYWlyIG51bWJlciBvZiBlbnRyaWVzCisJIyBpbiBhIHN1Yi1kaXJlY3Rvcnkgc28gdGhhdCBhZGRfaW5kZXhfZW50cnkgd2lsbCB0cmlnZ2VyIGEKKwkjIHJlYWxsb2MuCisKKwllY2hvIGZpbGUgPmV4cGVjdGVkICYmCisJbWtkaXIgc3ViICYmCisJYmFkPSAmJgorCWZvciBuIGluIDAgMSAyIDMgNCA1CisJZG8KKwkJZm9yIG0gaW4gMCAxIDIgMyA0IDUgNiA3IDggOQorCQlkbworCQkJbnVtPTAwJG4kbSAmJgorCQkJPnN1Yi9maWxlLSRudW0gJiYKKwkJCWVjaG8gZmlsZS0kbnVtID4+ZXhwZWN0ZWQgfHwgeworCQkJCWJhZD10CisJCQkJYnJlYWsKKwkJCX0KKwkJZG9uZSAmJiB0ZXN0IC16ICIkYmFkIiB8fCB7CisJCQliYWQ9dAorCQkJYnJlYWsKKwkJfQorCWRvbmUgJiYgdGVzdCAteiAiJGJhZCIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgYSBidW5jaCBvZiBmaWxlcyIgJiYKKworCSMgV2UgcmVtb3ZlIHRoZW0gYWxsIHNvIHRoYXQgd2Ugd2lsbCBoYXZlIHNvbWV0aGluZyB0byBhZGQKKwkjIGJhY2sgd2l0aCAtLXdpdGgtdHJlZSBhbmQgc28gdGhhdCB3ZSB3aWxsIGRlZmluaXRlbHkgYmUKKwkjIHVuZGVyIHRoZSByZWFsbG9jIHNpemUgdG8gdHJpZ2dlciB0aGUgYnVnLgorCXJtIC1yZiBzdWIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJyZW1vdmUgdGhlbSBhbGwiICYmCisKKwkjIFRoZSBidWcgYWxzbyByZXF1aXJlcyBzb21lIGVudHJ5IGJlZm9yZSBvdXIgZGlyZWN0b3J5IHNvIHRoYXQKKwkjIHBydW5lX3BhdGggd2lsbCBtb2RpZnkgdGhlX2luZGV4LmNhY2hlCisKKwlta2RpciBhX2RpcmVjdG9yeV90aGF0X3NvcnRzX2JlZm9yZV9zdWIgJiYKKwk+YV9kaXJlY3RvcnlfdGhhdF9zb3J0c19iZWZvcmVfc3ViL2ZpbGUgJiYKKwlta2RpciBzdWIgJiYKKwk+c3ViL2ZpbGUgJiYKKwlnaXQgYWRkIC4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1scy1maWxlcyAtLXdpdGgtdHJlZSBzaG91bGQgc3VjY2VlZCBmcm9tIHN1YmRpcicgJworCSMgV2UgaGF2ZSB0byBydW4gZnJvbSBhIHN1Yi1kaXJlY3RvcnkgdG8gdHJpZ2dlciBwcnVuZV9wYXRoCisJIyBUaGVuIHdlIGZpbmFsbHkgZ2V0IHRvIHJ1biBvdXIgLS13aXRoLXRyZWUgdGVzdAorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBscy1maWxlcyAtLXdpdGgtdHJlZT1IRUFEfjEgPi4uL291dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCAtbHMtZmlsZXMgLS13aXRoLXRyZWUgc2hvdWxkIGFkZCBlbnRyaWVzIGZyb20gbmFtZWQgdHJlZS4nIFwKKyAgICAndGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaCBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MWQ5MGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCkBAIC0wLDAgKzEsMTc3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBscy10cmVlIHRlc3QuCisKK1RoaXMgdGVzdCBydW5zIGdpdCBscy10cmVlIHdpdGggdGhlIGZvbGxvd2luZyBpbiBhIHRyZWUuCisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIHBhdGgxCS0gYSBzeW1saW5rCisgICAgcGF0aDIvZm9vICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMi9iYXpibyAtIGEgc3ltbGluayBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgyL2Jhei9iIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5CisKK1RoZSBuZXcgcGF0aCByZXN0cmljdGlvbiBjb2RlIHNob3VsZCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIHBhdGgyIGFuZAorcGF0aDIvYmF6LiAgQWxzbyBwYXRoMC8gc2hvdWxkIHNub3cgbm90aGluZy4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAnIFwKKyAgICAnbWtkaXIgcGF0aDIgcGF0aDIvYmF6ICYmCisgICAgIGVjaG8gSGkgPnBhdGgwICYmCisgICAgIGlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKyAgICAgdGhlbgorCWxuIC1zIHBhdGgwIHBhdGgxICYmCisJbG4gLXMgLi4vcGF0aDEgcGF0aDIvYmF6Ym8KKwltYWtlX2V4cGVjdGVkICgpIHsKKwkJY2F0ID5leHBlY3RlZAorCX0KKyAgICAgZWxzZQorCXByaW50ZiBwYXRoMCA+IHBhdGgxICYmCisJcHJpbnRmIC4uL3BhdGgxID4gcGF0aDIvYmF6Ym8KKwltYWtlX2V4cGVjdGVkICgpIHsKKwkJc2VkIC1lICJzLzEyMDAwMCAvMTAwNjQ0IC8iID5leHBlY3RlZAorCX0KKyAgICAgZmkgJiYKKyAgICAgZWNobyBMbyA+cGF0aDIvZm9vICYmCisgICAgIGVjaG8gTWkgPnBhdGgyL2Jhei9iICYmCisgICAgIGZpbmQgcGF0aD8gXCggLXR5cGUgZiAtbyAtdHlwZSBsIFwpIC1wcmludCB8CisgICAgIHhhcmdzIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJiYKKyAgICAgdHJlZT1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gJHRyZWUnCisKK3Rlc3Rfb3V0cHV0ICgpIHsKKyAgICBzZWQgLWUgInMvICRfeDQwCS8gWAkvIiA8Y3VycmVudCA+Y2hlY2sKKyAgICB0ZXN0X2NtcCBleHBlY3RlZCBjaGVjaworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBwbGFpbicgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSA+Y3VycmVudCAmJgorICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAlwYXRoMAorMTIwMDAwIGJsb2IgWAlwYXRoMQorMDQwMDAwIHRyZWUgWAlwYXRoMgorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSByZWN1cnNpdmUnIFwKKyAgICAnZ2l0IGxzLXRyZWUgLXIgJHRyZWUgPmN1cnJlbnQgJiYKKyAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJcGF0aDAKKzEyMDAwMCBibG9iIFgJcGF0aDEKKzEwMDY0NCBibG9iIFgJcGF0aDIvYmF6L2IKKzEyMDAwMCBibG9iIFgJcGF0aDIvYmF6Ym8KKzEwMDY0NCBibG9iIFgJcGF0aDIvZm9vCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIHJlY3Vyc2l2ZSB3aXRoIC10JyBcCisgICAgJ2dpdCBscy10cmVlIC1yIC10ICR0cmVlID5jdXJyZW50ICYmCisgICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCXBhdGgwCisxMjAwMDAgYmxvYiBYCXBhdGgxCiswNDAwMDAgdHJlZSBYCXBhdGgyCiswNDAwMDAgdHJlZSBYCXBhdGgyL2JhegorMTAwNjQ0IGJsb2IgWAlwYXRoMi9iYXovYgorMTIwMDAwIGJsb2IgWAlwYXRoMi9iYXpibworMTAwNjQ0IGJsb2IgWAlwYXRoMi9mb28KK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgcmVjdXJzaXZlIHdpdGggLWQnIFwKKyAgICAnZ2l0IGxzLXRyZWUgLXIgLWQgJHRyZWUgPmN1cnJlbnQgJiYKKyAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aCcgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoID5jdXJyZW50ICYmCisgICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKKworIyBpdCB1c2VkIHRvIGJlIHBhdGgxIGFuZCB0aGVuIHBhdGgwLCBidXQgd2l0aCBwYXRoc3BlYyBzZW1hbnRpY3MKKyMgdGhleSBhcmUgc2hvd24gaW4gY2Fub25pY2FsIG9yZGVyLgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMSBwYXRoMCcgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMSBwYXRoMCA+Y3VycmVudCAmJgorICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAlwYXRoMAorMTIwMDAwIGJsb2IgWAlwYXRoMQorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgwLycgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMC8gPmN1cnJlbnQgJiYKKyAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKworIyBJdCB1c2VkIHRvIHNob3cgcGF0aDIgYW5kIGl0cyBpbW1lZGlhdGUgY2hpbGRyZW4gYnV0CisjIHdpdGggcGF0aHNwZWMgc2VtYW50aWNzIGl0IHNob3dzIG9ubHkgcGF0aDIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aDInIFwKKyAgICAnZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDIgPmN1cnJlbnQgJiYKKyAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDIKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKworIyAuLi4gYW5kIHBhdGgyLyBzaG93cyB0aGUgY2hpbGRyZW4uCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgyLycgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi8gPmN1cnJlbnQgJiYKKyAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CisxMjAwMDAgYmxvYiBYCXBhdGgyL2JhemJvCisxMDA2NDQgYmxvYiBYCXBhdGgyL2ZvbworRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCisjIFRoZSBzYW1lIGNoYW5nZSAtLSBleGFjdCBtYXRjaCBkb2VzIG5vdCBzaG93IGNoaWxkcmVuIG9mCisjIHBhdGgyL2JhegordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMi9iYXonIFwKKyAgICAnZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDIvYmF6ID5jdXJyZW50ICYmCisgICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCiswNDAwMDAgdHJlZSBYCXBhdGgyL2JhegorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgyL2JhaycgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi9iYWsgPmN1cnJlbnQgJiYKKyAgICAgbWFrZV9leHBlY3RlZCA8PFxFT0YgJiYKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgLXQgZmlsdGVyZWQgd2l0aCBwYXRoMi9iYWsnIFwKKyAgICAnZ2l0IGxzLXRyZWUgLXQgJHRyZWUgcGF0aDIvYmFrID5jdXJyZW50ICYmCisgICAgIG1ha2VfZXhwZWN0ZWQgPDxcRU9GICYmCiswNDAwMDAgdHJlZSBYCXBhdGgyCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIHdpdGggb25lIHBhdGggYSBwcmVmaXggb2YgdGhlIG90aGVyJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgyL2JheiBwYXRoMi9iYXpibyA+Y3VycmVudCAmJgorICAgICBtYWtlX2V4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMi9iYXoKKzEyMDAwMCBibG9iIFgJcGF0aDIvYmF6Ym8KK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaCBiL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyNmY5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaApAQCAtMCwwICsxLDIyOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIyBDb3B5cmlnaHQgKGMpIDIwMDUgUm9iZXJ0IEZpdHpzaW1vbnMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLXRyZWUgZGlyZWN0b3J5IGFuZCBmaWxlbmFtZXMgaGFuZGxpbmcuCisKK1RoaXMgdGVzdCBydW5zIGdpdCBscy10cmVlIHdpdGggdGhlIGZvbGxvd2luZyBpbiBhIHRyZWUuCisKKyAgICAxLnR4dCAgICAgICAgICAgICAgLSBhIGZpbGUKKyAgICAyLnR4dCAgICAgICAgICAgICAgLSBhIGZpbGUKKyAgICBwYXRoMC9hL2IvYy8xLnR4dCAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMS9iL2MvMS50eHQgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMi8xLnR4dCAgICAgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy8xLnR4dCAgICAgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy8yLnR4dCAgICAgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKworVGVzdCB0aGUgaGFuZGxpbmcgb2YgbXVsaXRwbGUgZGlyZWN0b3JpZXMgd2hpY2ggaGF2ZSBtYXRjaGluZyBmaWxlCitlbnRyaWVzLiAgQWxzbyB0ZXN0IG9kZCBmaWxlbmFtZSBhbmQgbWlzc2luZyBlbnRyaWVzIGhhbmRsaW5nLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyAxMTEgPjEudHh0ICYmCisJZWNobyAyMjIgPjIudHh0ICYmCisJbWtkaXIgcGF0aDAgcGF0aDAvYSBwYXRoMC9hL2IgcGF0aDAvYS9iL2MgJiYKKwllY2hvIDExMSA+cGF0aDAvYS9iL2MvMS50eHQgJiYKKwlta2RpciBwYXRoMSBwYXRoMS9iIHBhdGgxL2IvYyAmJgorCWVjaG8gMTExID5wYXRoMS9iL2MvMS50eHQgJiYKKwlta2RpciBwYXRoMiAmJgorCWVjaG8gMTExID5wYXRoMi8xLnR4dCAmJgorCW1rZGlyIHBhdGgzICYmCisJZWNobyAxMTEgPnBhdGgzLzEudHh0ICYmCisJZWNobyAyMjIgPnBhdGgzLzIudHh0ICYmCisJZmluZCAqLnR4dCBwYXRoKiBcKCAtdHlwZSBmIC1vIC10eXBlIGwgXCkgLXByaW50IHwKKwl4YXJncyBnaXQgdXBkYXRlLWluZGV4IC0tYWRkICYmCisJdHJlZT1gZ2l0IHdyaXRlLXRyZWVgICYmCisJZWNobyAkdHJlZQorJworCit0ZXN0X291dHB1dCAoKSB7CisJc2VkIC1lICJzLyAkX3g0MAkvIFgJLyIgPGN1cnJlbnQgPmNoZWNrICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY2hlY2sKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBwbGFpbicgJworCWdpdCBscy10cmVlICR0cmVlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJMi50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDAKKzA0MDAwMCB0cmVlIFgJcGF0aDEKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDMKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKKyMgUmVjdXJzaXZlIGRvZXMgbm90IHNob3cgdHJlZSBub2RlcyBhbnltb3JlLi4uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIHJlY3Vyc2l2ZScgJworCWdpdCBscy10cmVlIC1yICR0cmVlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJMi50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDAvYS9iL2MvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDEvYi9jLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgyLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgzLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgzLzIudHh0CitFT0YKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGZpbHRlciAxLnR4dCcgJworCWdpdCBscy10cmVlICR0cmVlIDEudHh0ID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIHBhdGgxL2IvYy8xLnR4dCcgJworCWdpdCBscy10cmVlICR0cmVlIHBhdGgxL2IvYy8xLnR4dCA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCXBhdGgxL2IvYy8xLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBmaWx0ZXIgYWxsIDEudHh0IGZpbGVzJyAnCisJZ2l0IGxzLXRyZWUgJHRyZWUgMS50eHQgcGF0aDAvYS9iL2MvMS50eHQgXAorCQlwYXRoMS9iL2MvMS50eHQgcGF0aDIvMS50eHQgcGF0aDMvMS50eHQgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMC9hL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMS9iL2MvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDIvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKKyMgSSBhbSBub3Qgc28gc3VyZSBhYm91dCB0aGlzIG9uZSBhZnRlciBscy10cmVlIGRvaW5nIHBhdGhzcGVjIG1hdGNoLgorIyBIYXZpbmcgYm90aCBwYXRoMC9hIGFuZCBwYXRoMC9hL2IvYyBtYWtlcyBwYXRoMC9hIHJlZHVuZGFudCwgYW5kCisjIGl0IGJlaGF2ZXMgYXMgaWYgcGF0aDAvYS9iL2MsIHBhdGgxL2IvYywgcGF0aDIgYW5kIHBhdGgzIGFyZSBzcGVjaWZpZWQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGZpbHRlciBkaXJlY3RvcmllcycgJworCWdpdCBscy10cmVlICR0cmVlIHBhdGgzIHBhdGgyIHBhdGgwL2EvYi9jIHBhdGgxL2IvYyBwYXRoMC9hID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDAvYS9iL2MKKzA0MDAwMCB0cmVlIFgJcGF0aDEvYi9jCiswNDAwMDAgdHJlZSBYCXBhdGgyCiswNDAwMDAgdHJlZSBYCXBhdGgzCitFT0YKKwl0ZXN0X291dHB1dAorJworCisjIEFnYWluLCBkdXBsaWNhdGVzIGFyZSBmaWx0ZXJlZCBhd2F5IHNvIHRoaXMgaXMgZXF1aXZhbGVudCB0bworIyBoYXZpbmcgMS50eHQgYW5kIHBhdGgzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGZpbHRlciBvZGQgbmFtZXMnICcKKwlnaXQgbHMtdHJlZSAkdHJlZSAxLnR4dCAuLzEudHh0IC4vLzEudHh0IFwKKwkJcGF0aDMvMS50eHQgcGF0aDMvLi8xLnR4dCBwYXRoMyBwYXRoMy8vID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIG1pc3NpbmcgZmlsZXMgYW5kIGV4dHJhIHNsYXNoZXMnICcKKwlnaXQgbHMtdHJlZSAkdHJlZSAxLnR4dC8gYWJjLnR4dCBcCisJCXBhdGgzLy8yMy50eHQgcGF0aDMvMi50eHQvLy8gPmN1cnJlbnQgJiYKKwk+ZXhwZWN0ZWQgJiYKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGZpbHRlciBpcyBsZWFkaW5nIHBhdGggbWF0Y2gnICcKKwlnaXQgbHMtdHJlZSAkdHJlZSBwYSBwYXRoMy9hID5jdXJyZW50ICYmCisJPmV4cGVjdGVkICYmCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLWZ1bGwtbmFtZScgJworCSgKKwkJY2QgcGF0aDAgJiYKKwkJZ2l0IGxzLXRyZWUgLS1mdWxsLW5hbWUgJHRyZWUgYQorCSkgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMC9hCitFT0YKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIC0tZnVsbC10cmVlJyAnCisJKAorCQljZCBwYXRoMS9iL2MgJiYKKwkJZ2l0IGxzLXRyZWUgLS1mdWxsLXRyZWUgJHRyZWUKKwkpID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJMi50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDAKKzA0MDAwMCB0cmVlIFgJcGF0aDEKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDMKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1mdWxsLXRyZWUgLXInICcKKwkoCisJCWNkIHBhdGgzLyAmJgorCQlnaXQgbHMtdHJlZSAtLWZ1bGwtdHJlZSAtciAkdHJlZQorCSkgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMC9hL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMS9iL2MvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDIvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1hYmJyZXY9NScgJworCWdpdCBscy10cmVlIC0tYWJicmV2PTUgJHRyZWUgPmN1cnJlbnQgJiYKKwlzZWQgLWUgInMvICRfeDA1WzAtOWEtZl0qCS8gWAkvIiA8Y3VycmVudCA+Y2hlY2sgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMDQwMDAwIHRyZWUgWAlwYXRoMAorMDQwMDAwIHRyZWUgWAlwYXRoMQorMDQwMDAwIHRyZWUgWAlwYXRoMgorMDQwMDAwIHRyZWUgWAlwYXRoMworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLW5hbWUtb25seScgJworCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5ICR0cmVlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEudHh0CisyLnR4dAorcGF0aDAKK3BhdGgxCitwYXRoMgorcGF0aDMKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1uYW1lLW9ubHkgLXInICcKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSAtciAkdHJlZSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxLnR4dAorMi50eHQKK3BhdGgwL2EvYi9jLzEudHh0CitwYXRoMS9iL2MvMS50eHQKK3BhdGgyLzEudHh0CitwYXRoMy8xLnR4dAorcGF0aDMvMi50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzEwMi1scy10cmVlLXdpbGRjYXJkcy5zaCBiL3QvdDMxMDItbHMtdHJlZS13aWxkY2FyZHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzI4Njg1NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMxMDItbHMtdHJlZS13aWxkY2FyZHMuc2gKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2xzLXRyZWUgd2l0aChvdXQpIGdsb2JzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBhIGFhICJhW2FdIiAmJgorCXRvdWNoIGEvb25lIGFhL3R3byAiYVthXS90aHJlZSIgJiYKKwlnaXQgYWRkIGEvb25lIGFhL3R3byAiYVthXS90aHJlZSIgJiYKKwlnaXQgY29tbWl0IC1tIHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBhW2FdIG1hdGNoZXMgbGl0ZXJhbGx5JyAnCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorMTAwNjQ0IGJsb2IgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQlhW2FdL3RocmVlCitFT0YKKwlnaXQgbHMtdHJlZSAtciBIRUFEICJhW2FdIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzEwMy1scy10cmVlLW1pc2Muc2ggYi90L3QzMTAzLWxzLXRyZWUtbWlzYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOWRjZjA0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzEwMy1scy10cmVlLW1pc2Muc2gKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249JworTWlzY2VsbGFuZW91cyB0ZXN0cyBmb3IgZ2l0IGxzLXRyZWUuCisKKwkgICAgICAxLiBnaXQgbHMtdHJlZSBmYWlscyBpbiBwcmVzZW5jZSBvZiB0cmVlIGRhbWFnZS4KKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBhICYmCisJdG91Y2ggYS9vbmUgJiYKKwlnaXQgYWRkIGEvb25lICYmCisJZ2l0IGNvbW1pdCAtbSB0ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmFpbHMgd2l0aCBub24temVybyBleGl0IGNvZGUgb24gYnJva2VuIHRyZWUnICcKKwlybSAtZiAuZ2l0L29iamVjdHMvNWYvY2ZmYmQ2ZTRjNWM1YjhkODFmNWU5MzE0YjIwZTMzOGUzZmZmZjUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtdHJlZSAtciBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwMC1icmFuY2guc2ggYi90L3QzMjAwLWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43OWM4ZDAxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzIwMC1icmFuY2guc2gKQEAgLTAsMCArMSw4MDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgQW1vcyBXYXRlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGJyYW5jaCBhc3NvcnRlZCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIGEgdHJpdmlhbCByZXBvc2l0b3J5JyBcCisgICAgJ2VjaG8gSGVsbG8gPiBBICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQSAmJgorICAgICBnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdC4iICYmCisgICAgIGVjaG8gV29ybGQgPj4gQSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEEgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIGNvbW1pdC4iICYmCisgICAgIEhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGJyYW5jaCAtLWhlbHAgc2hvdWxkIG5vdCBoYXZlIGNyZWF0ZWQgYSBib2d1cyBicmFuY2gnICcKKyAgICAgdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLS1oZWxwIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCAmJgorICAgICB0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvLS1oZWxwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtaCBpbiBicm9rZW4gcmVwb3NpdG9yeScgJworCW1rZGlyIGJyb2tlbiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCT4uZ2l0L3JlZnMvaGVhZHMvbWFzdGVyICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBicmFuY2ggLWggPnVzYWdlIDI+JjEKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2UiIGJyb2tlbi91c2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGJyYW5jaCBhYmMgc2hvdWxkIGNyZWF0ZSBhIGJyYW5jaCcgXAorICAgICdnaXQgYnJhbmNoIGFiYyAmJiB0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvYWJjJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGJyYW5jaCBhL2IvYyBzaG91bGQgY3JlYXRlIGEgYnJhbmNoJyBcCisgICAgJ2dpdCBicmFuY2ggYS9iL2MgJiYgdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL2EvYi9jJworCitjYXQgPmV4cGVjdCA8PEVPRgorJF96NDAgJEhFQUQgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAyMDAgKzAwMDAJYnJhbmNoOiBDcmVhdGVkIGZyb20gbWFzdGVyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYnJhbmNoIC1sIGQvZS9mIHNob3VsZCBjcmVhdGUgYSBicmFuY2ggYW5kIGEgbG9nJyBcCisJJ0dJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMCIgXAorICAgICBnaXQgYnJhbmNoIC1sIGQvZS9mICYmCisJIHRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9kL2UvZiAmJgorCSB0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9kL2UvZiAmJgorCSB0ZXN0X2NtcCBleHBlY3QgLmdpdC9sb2dzL3JlZnMvaGVhZHMvZC9lL2YnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYnJhbmNoIC1kIGQvZS9mIHNob3VsZCBkZWxldGUgYSBicmFuY2ggYW5kIGEgbG9nJyBcCisJJ2dpdCBicmFuY2ggLWQgZC9lL2YgJiYKKwkgdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2QvZS9mICYmCisJIHRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvbG9ncy9yZWZzL2hlYWRzL2QvZS9mJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGJyYW5jaCBqL2sgc2hvdWxkIHdvcmsgYWZ0ZXIgYnJhbmNoIGogaGFzIGJlZW4gZGVsZXRlZCcgXAorICAgICAgICdnaXQgYnJhbmNoIGogJiYKKyAgICAgICAgZ2l0IGJyYW5jaCAtZCBqICYmCisgICAgICAgIGdpdCBicmFuY2ggai9rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGJyYW5jaCBsIHNob3VsZCB3b3JrIGFmdGVyIGJyYW5jaCBsL20gaGFzIGJlZW4gZGVsZXRlZCcgXAorICAgICAgICdnaXQgYnJhbmNoIGwvbSAmJgorICAgICAgICBnaXQgYnJhbmNoIC1kIGwvbSAmJgorICAgICAgICBnaXQgYnJhbmNoIGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYnJhbmNoIC1tIGR1bXBzIHVzYWdlJyBcCisgICAgICAgJ3Rlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBicmFuY2ggLW0gMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZTogZ2l0IGJyYW5jaCIgZXJyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGJyYW5jaCAtbSBtIG0vbSBzaG91bGQgd29yaycgXAorICAgICAgICdnaXQgYnJhbmNoIC1sIG0gJiYKKyAgICAgICAgZ2l0IGJyYW5jaCAtbSBtIG0vbSAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvbG9ncy9yZWZzL2hlYWRzL20vbScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBicmFuY2ggLW0gbi9uIG4gc2hvdWxkIHdvcmsnIFwKKyAgICAgICAnZ2l0IGJyYW5jaCAtbCBuL24gJiYKKwlnaXQgYnJhbmNoIC1tIG4vbiBuICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9sb2dzL3JlZnMvaGVhZHMvbicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBvL28gbyBzaG91bGQgZmFpbCB3aGVuIG8vcCBleGlzdHMnICcKKwlnaXQgYnJhbmNoIG8vbyAmJgorICAgICAgICBnaXQgYnJhbmNoIG8vcCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gby9vIG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBxIHIvcSBzaG91bGQgZmFpbCB3aGVuIHIgZXhpc3RzJyAnCisJZ2l0IGJyYW5jaCBxICYmCisJZ2l0IGJyYW5jaCByICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtbSBxIHIvcQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIGZvbyBiYXIgc2hvdWxkIGZhaWwgd2hlbiBiYXIgaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgYnJhbmNoIGJhciAmJgorCWdpdCBjaGVja291dCAtYiBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1NIGJhciBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtTSBiYXogYmFtIHNob3VsZCBzdWNjZWVkIHdoZW4gYmF6IGlzIGNoZWNrZWQgb3V0JyAnCisJZ2l0IGNoZWNrb3V0IC1iIGJheiAmJgorCWdpdCBicmFuY2ggYmFtICYmCisJZ2l0IGJyYW5jaCAtTSBiYXogYmFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gbWFzdGVyIHNob3VsZCB3b3JrIHdoZW4gbWFzdGVyIGlzIGNoZWNrZWQgb3V0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLU0gbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gbWFzdGVyIG1hc3RlciBzaG91bGQgd29yayB3aGVuIG1hc3RlciBpcyBjaGVja2VkIG91dCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1NIG1hc3RlciBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtTSBtYXN0ZXIyIG1hc3RlcjIgc2hvdWxkIHdvcmsgd2hlbiBtYXN0ZXIgaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCBtYXN0ZXIyICYmCisJZ2l0IGJyYW5jaCAtTSBtYXN0ZXIyIG1hc3RlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtdiAtZCB0IHNob3VsZCB3b3JrJyAnCisJZ2l0IGJyYW5jaCB0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3QgJiYKKwlnaXQgYnJhbmNoIC12IC1kIHQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC12IC1tIHQgcyBzaG91bGQgd29yaycgJworCWdpdCBicmFuY2ggdCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy90ICYmCisJZ2l0IGJyYW5jaCAtdiAtbSB0IHMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvdCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9zICYmCisJZ2l0IGJyYW5jaCAtZCBzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gLWQgdCBzIHNob3VsZCBmYWlsJyAnCisJZ2l0IGJyYW5jaCB0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1tIC1kIHQgcyAmJgorCWdpdCBicmFuY2ggLWQgdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy90CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1saXN0IC1kIHQgc2hvdWxkIGZhaWwnICcKKwlnaXQgYnJhbmNoIHQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1saXN0IC1kIHQgJiYKKwlnaXQgYnJhbmNoIC1kIHQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tY29sdW1uJyAnCisJQ09MVU1OUz04MSBnaXQgYnJhbmNoIC0tY29sdW1uPWNvbHVtbiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyAgYS9iL2MgICAgIGJhbSAgICAgICBmb28gICAgICAgbCAgICAgICAqIG1hc3RlciAgICBuICAgICAgICAgby9wICAgICAgIHIKKyAgYWJjICAgICAgIGJhciAgICAgICBqL2sgICAgICAgbS9tICAgICAgIG1hc3RlcjIgICBvL28gICAgICAgcQorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1jb2x1bW4gd2l0aCBhbiBleHRyZW1lbHkgbG9uZyBicmFuY2ggbmFtZScgJworCWxvbmc9dGhpcy9pcy9hL3BhcnQvb2YvbG9uZy9icmFuY2gvbmFtZSAmJgorCWxvbmc9eiRsb25nLyRsb25nLyRsb25nLyRsb25nICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1kICRsb25nIiAmJgorCWdpdCBicmFuY2ggJGxvbmcgJiYKKwlDT0xVTU5TPTgwIGdpdCBicmFuY2ggLS1jb2x1bW49Y29sdW1uID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCisgIGEvYi9jCisgIGFiYworICBiYW0KKyAgYmFyCisgIGZvbworICBqL2sKKyAgbAorICBtL20KKyogbWFzdGVyCisgIG1hc3RlcjIKKyAgbgorICBvL28KKyAgby9wCisgIHEKKyAgcgorICAkbG9uZworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggd2l0aCBjb2x1bW4uKicgJworCWdpdCBjb25maWcgY29sdW1uLnVpIGNvbHVtbiAmJgorCWdpdCBjb25maWcgY29sdW1uLmJyYW5jaCAiZGVuc2UiICYmCisJQ09MVU1OUz04MCBnaXQgYnJhbmNoID5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sdW1uLmJyYW5jaCAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb2x1bW4udWkgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorICBhL2IvYyAgIGJhbSAgIGZvbyAgIGwgICAqIG1hc3RlciAgICBuICAgICBvL3AgICByCisgIGFiYyAgICAgYmFyICAgai9rICAgbS9tICAgbWFzdGVyMiAgIG8vbyAgIHEKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tY29sdW1uIC12IHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLWNvbHVtbiAtdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC12IHdpdGggY29sdW1uLnVpIGlnbm9yZWQnICcKKwlnaXQgY29uZmlnIGNvbHVtbi51aSBjb2x1bW4gJiYKKwlDT0xVTU5TPTgwIGdpdCBicmFuY2ggLXYgfCBjdXQgLWMgLTEwIHwgc2VkICJzLyAqJC8vIiA+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbHVtbi51aSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgIGEvYi9jCisgIGFiYworICBiYW0KKyAgYmFyCisgIGZvbworICBqL2sKKyAgbAorICBtL20KKyogbWFzdGVyCisgIG1hc3RlcjIKKyAgbgorICBvL28KKyAgby9wCisgIHEKKyAgcgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK212IC5naXQvY29uZmlnIC5naXQvY29uZmlnLXNhdmVkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gcSBxMiB3aXRob3V0IGNvbmZpZyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCBicmFuY2ggLW0gcSBxMiAmJgorCWdpdCBicmFuY2ggLW0gcTIgcQorJworCittdiAuZ2l0L2NvbmZpZy1zYXZlZCAuZ2l0L2NvbmZpZworCitnaXQgY29uZmlnIGJyYW5jaC5zL3MuZHVtbXkgSGVsbG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBicmFuY2ggLW0gcy9zIHMgc2hvdWxkIHdvcmsgd2hlbiBzL3QgaXMgZGVsZXRlZCcgXAorICAgICAgICdnaXQgYnJhbmNoIC1sIHMvcyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvbG9ncy9yZWZzL2hlYWRzL3MvcyAmJgorICAgICAgICBnaXQgYnJhbmNoIC1sIHMvdCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvbG9ncy9yZWZzL2hlYWRzL3MvdCAmJgorICAgICAgICBnaXQgYnJhbmNoIC1kIHMvdCAmJgorICAgICAgICBnaXQgYnJhbmNoIC1tIHMvcyBzICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9sb2dzL3JlZnMvaGVhZHMvcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIGluZm9ybWF0aW9uIHdhcyByZW5hbWVkLCB0b28nIFwKKwkidGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLnMuZHVtbXkpID0gSGVsbG8gJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gucy9zL2R1bW15IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWluZyBhIHN5bXJlZiBpcyBub3QgYWxsb3dlZCcgXAorJworCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIyIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtbSBtYXN0ZXIyIG1hc3RlcjMgJiYKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvbWFzdGVyMiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKKyAgICAnZ2l0IGJyYW5jaCAtbSB1IHYgc2hvdWxkIGZhaWwgd2hlbiB0aGUgcmVmbG9nIGZvciB1IGlzIGEgc3ltbGluaycgJworICAgICBnaXQgYnJhbmNoIC1sIHUgJiYKKyAgICAgbXYgLmdpdC9sb2dzL3JlZnMvaGVhZHMvdSByZWFsLXUgJiYKKyAgICAgbG4gLXMgcmVhbC11IC5naXQvbG9ncy9yZWZzL2hlYWRzL3UgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtbSB1IHYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0cmFja2luZyBzZXR1cCB2aWEgLS10cmFjaycgXAorICAgICdnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorICAgICBnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKyAgICAgKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKyAgICAgZ2l0IGJyYW5jaCAtLXRyYWNrIG15MSBsb2NhbC9tYXN0ZXIgJiYKKyAgICAgdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLm15MS5yZW1vdGUpID0gbG9jYWwgJiYKKyAgICAgdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLm15MS5tZXJnZSkgPSByZWZzL2hlYWRzL21hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0cmFja2luZyBzZXR1cCAobm9uLXdpbGRjYXJkLCBtYXRjaGluZyknIFwKKyAgICAnZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKyAgICAgZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciAmJgorICAgICAoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorICAgICBnaXQgYnJhbmNoIC0tdHJhY2sgbXk0IGxvY2FsL21hc3RlciAmJgorICAgICB0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubXk0LnJlbW90ZSkgPSBsb2NhbCAmJgorICAgICB0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubXk0Lm1lcmdlKSA9IHJlZnMvaGVhZHMvbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRyYWNraW5nIHNldHVwIChub24td2lsZGNhcmQsIG5vdCBtYXRjaGluZyknIFwKKyAgICAnZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKyAgICAgZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy9zOnJlZnMvcmVtb3Rlcy9sb2NhbC9zICYmCisgICAgIChnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisgICAgIGdpdCBicmFuY2ggLS10cmFjayBteTUgbG9jYWwvbWFzdGVyICYmCisgICAgICEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTUucmVtb3RlKSIgPSBsb2NhbCAmJgorICAgICAhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk1Lm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0cmFja2luZyBzZXR1cCB2aWEgY29uZmlnJyBcCisgICAgJ2dpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIHRydWUgJiYKKyAgICAgZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKyAgICAgZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisgICAgIChnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisgICAgIGdpdCBicmFuY2ggbXkzIGxvY2FsL21hc3RlciAmJgorICAgICB0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubXkzLnJlbW90ZSkgPSBsb2NhbCAmJgorICAgICB0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubXkzLm1lcmdlKSA9IHJlZnMvaGVhZHMvbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG92ZXJyaWRpbmcgdHJhY2tpbmcgc2V0dXAgdmlhIC0tbm8tdHJhY2snIFwKKyAgICAnZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgdHJ1ZSAmJgorICAgICBnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorICAgICBnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKyAgICAgKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKyAgICAgZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15MiBsb2NhbC9tYXN0ZXIgJiYKKyAgICAgZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgZmFsc2UgJiYKKyAgICAgISB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15Mi5yZW1vdGUpIiA9IGxvY2FsICYmCisgICAgICEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTIubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB0cmFja2luZyB3aXRob3V0IC5mZXRjaCBlbnRyaWVzJyBcCisgICAgJ2dpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIHRydWUgJiYKKyAgICAgZ2l0IGJyYW5jaCBteTYgcyAmJgorICAgICBnaXQgY29uZmlnIGJyYW5jaC5hdXRvbXNldHVwbWVyZ2UgZmFsc2UgJiYKKyAgICAgdGVzdCAteiAiJChnaXQgY29uZmlnIGJyYW5jaC5teTYucmVtb3RlKSIgJiYKKyAgICAgdGVzdCAteiAiJChnaXQgY29uZmlnIGJyYW5jaC5teTYubWVyZ2UpIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0cmFja2luZyBzZXR1cCB2aWEgLS10cmFjayBidXQgZGVlcGVyJyBcCisgICAgJ2dpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisgICAgIGdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorICAgICAoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9vL28gfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorICAgICBnaXQgYnJhbmNoIC0tdHJhY2sgbXk3IGxvY2FsL28vbyAmJgorICAgICB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15Ny5yZW1vdGUpIiA9IGxvY2FsICYmCisgICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk3Lm1lcmdlKSIgPSByZWZzL2hlYWRzL28vbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkZWxldGluZyBicmFuY2ggZGVsZXRlcyBicmFuY2ggY29uZmlnJyBcCisgICAgJ2dpdCBicmFuY2ggLWQgbXk3ICYmCisgICAgIHRlc3QgLXogIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk3LnJlbW90ZSkiICYmCisgICAgIHRlc3QgLXogIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk3Lm1lcmdlKSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVsZXRpbmcgYnJhbmNoIHdpdGhvdXQgY29uZmlnJyBcCisgICAgJ2dpdCBicmFuY2ggbXk3IHMgJiYKKyAgICAgc2hhMT0kKGdpdCByZXYtcGFyc2UgbXk3IHwgY3V0IC1jIDEtNykgJiYKKyAgICAgZWNobyAiRGVsZXRlZCBicmFuY2ggbXk3ICh3YXMgJHNoYTEpLiIgPmV4cGVjdCAmJgorICAgICBnaXQgYnJhbmNoIC1kIG15NyA+YWN0dWFsIDI+JjEgJiYKKyAgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS10cmFjayB3aXRob3V0IC5mZXRjaCBlbnRyaWVzJyBcCisgICAgJ2dpdCBicmFuY2ggLS10cmFjayBteTggJiYKKyAgICAgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTgucmVtb3RlKSIgJiYKKyAgICAgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTgubWVyZ2UpIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2JyYW5jaCBmcm9tIG5vbi1icmFuY2ggSEVBRCB3L2F1dG9zZXR1cG1lcmdlPWFsd2F5cycgXAorICAgICdnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBhbHdheXMgJiYKKyAgICAgZ2l0IGJyYW5jaCBteTkgSEVBRF4gJiYKKyAgICAgZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgZmFsc2UnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdicmFuY2ggZnJvbSBub24tYnJhbmNoIEhFQUQgdy8tLXRyYWNrIGNhdXNlcyBmYWlsdXJlJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS10cmFjayBteTEwIEhFQUReJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYnJhbmNoIGZyb20gdGFnIHcvLS10cmFjayBjYXVzZXMgZmFpbHVyZScgXAorICAgICdnaXQgdGFnIGZvb2JhciAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdHJhY2sgbXkxMSBmb29iYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAtLXNldC11cHN0cmVhbS10byBtb2RpZnkgSEVBRCcgXAorICAgICd0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBmb28gJiYKKyAgICAgdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSBmb28gJiYKKyAgICAgZ2l0IGJyYW5jaCBteTEyCisgICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gbXkxMiAmJgorICAgICB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUpIiA9ICIuIiAmJgorICAgICB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSkiID0gInJlZnMvaGVhZHMvbXkxMiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAtLXNldC11cHN0cmVhbS10byBtb2RpZnkgYSBwYXJ0aWN1bGFyIGJyYW5jaCcgXAorICAgICdnaXQgYnJhbmNoIG15MTMKKyAgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBtYXN0ZXIgbXkxMyAmJgorICAgICB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15MTMucmVtb3RlKSIgPSAiLiIgJiYKKyAgICAgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTEzLm1lcmdlKSIgPSAicmVmcy9oZWFkcy9tYXN0ZXIiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVuc2V0LXVwc3RyZWFtIHNob3VsZCBmYWlsIGlmIGdpdmVuIGEgbm9uLWV4aXN0ZW50IGJyYW5jaCcgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW0gaS1kb250LWV4aXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tdW5zZXQtdXBzdHJlYW0gb24gSEVBRCcgXAorICAgICdnaXQgYnJhbmNoIG15MTQKKyAgICAgdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgZm9vICYmCisgICAgIHRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgZm9vICYmCisgICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gbXkxNCAmJgorICAgICBnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW0gJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgJiYKKyAgICAgIyBmYWlsIGZvciBhIGJyYW5jaCB3aXRob3V0IHVwc3RyZWFtIHNldAorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXVuc2V0LXVwc3RyZWFtIG9uIGEgcGFydGljdWxhciBicmFuY2gnIFwKKyAgICAnZ2l0IGJyYW5jaCBteTE1CisgICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gbWFzdGVyIG15MTQgJiYKKyAgICAgZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtIG15MTQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubXkxNC5yZW1vdGUgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubXkxNC5tZXJnZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0gc2hvd3MgbWVzc2FnZSB3aGVuIGNyZWF0aW5nIGEgbmV3IGJyYW5jaCB0aGF0IGV4aXN0cyBhcyByZW1vdGUtdHJhY2tpbmcnIFwKKyAgICAnZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgSEVBRCAmJgorICAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIgMj5hY3R1YWwgJiYKKyAgICAgdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisgICAgIHRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1kIG9yaWdpbi9tYXN0ZXIgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorVGhlIC0tc2V0LXVwc3RyZWFtIGZsYWcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBDb25zaWRlciB1c2luZyAtLXRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvCisKK0lmIHlvdSB3YW50ZWQgdG8gbWFrZSAnIidtYXN0ZXInIicgdHJhY2sgJyInb3JpZ2luL21hc3RlciciJywgZG8gdGhpczoKKworICAgIGdpdCBicmFuY2ggLWQgb3JpZ2luL21hc3RlcgorICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gb3JpZ2luL21hc3RlcgorRU9GCisgICAgIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbSB3aXRoIHR3byBhcmdzIG9ubHkgc2hvd3MgdGhlIGRlcHJlY2F0aW9uIG1lc3NhZ2UnIFwKKyAgICAnZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSBtYXN0ZXIgbXkxMyAyPmFjdHVhbCAmJgorICAgICB0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtIG1hc3RlciAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8RU9GICYmCitUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tdHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG8KK0VPRgorICAgICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0gd2l0aCBvbmUgYXJnIG9ubHkgc2hvd3MgdGhlIGRlcHJlY2F0aW9uIG1lc3NhZ2UgaWYgdGhlIGJyYW5jaCBleGlzdGVkJyBcCisgICAgJ2dpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gbXkxMyAyPmFjdHVhbCAmJgorICAgICB0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtIG15MTMgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorVGhlIC0tc2V0LXVwc3RyZWFtIGZsYWcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBDb25zaWRlciB1c2luZyAtLXRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvCitFT0YKKyAgICAgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKyMgS2VlcCB0aGlzIHRlc3QgbGFzdCwgYXMgaXQgY2hhbmdlcyB0aGUgY3VycmVudCBicmFuY2gKK2NhdCA+ZXhwZWN0IDw8RU9GCiskX3o0MCAkSEVBRCAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDIwMCArMDAwMAlicmFuY2g6IENyZWF0ZWQgZnJvbSBtYXN0ZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBjaGVja291dCAtYiBnL2gvaSAtbCBzaG91bGQgY3JlYXRlIGEgYnJhbmNoIGFuZCBhIGxvZycgXAorCSdHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6MzAiIFwKKyAgICAgZ2l0IGNoZWNrb3V0IC1iIGcvaC9pIC1sIG1hc3RlciAmJgorCSB0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZy9oL2kgJiYKKwkgdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9sb2dzL3JlZnMvaGVhZHMvZy9oL2kgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IC5naXQvbG9ncy9yZWZzL2hlYWRzL2cvaC9pJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiBtYWtlcyByZWZsb2cgYnkgZGVmYXVsdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5sb2dBbGxSZWZVcGRhdGVzICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFscGhhICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBhbHBoYUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgZG9lcyBub3QgbWFrZSByZWZsb2cgd2hlbiBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgPSBmYWxzZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBmYWxzZSAmJgorCWdpdCBjaGVja291dCAtYiBiZXRhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBiZXRhQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiB3aXRoIC1sIG1ha2VzIHJlZmxvZyB3aGVuIGNvcmUubG9nQWxsUmVmVXBkYXRlcyA9IGZhbHNlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtbGIgZ2FtbWEgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5sb2dBbGxSZWZVcGRhdGVzICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBnYW1tYUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgYW1iaWd1b3VzIHRyYWNrJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgdHJ1ZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmFtYmkxLnVybCBsYWxhbGEgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5hbWJpMS5mZXRjaCByZWZzL2hlYWRzL2xhbGFsYTpyZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBjb25maWcgcmVtb3RlLmFtYmkyLnVybCBsaWxpbGkgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5hbWJpMi5mZXRjaCByZWZzL2hlYWRzL2xpbGlsaTpyZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBicmFuY2ggYWxsMSBtYXN0ZXIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLmFsbDEubWVyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbG9jYWwgb24gYSB0cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGxvY2FsICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2UgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyMSBteWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjEucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIxLm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZSAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMS5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgYWx3YXlzICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2UyICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjIgbXliYXNlICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIyLnJlbW90ZSkiID0gLiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMi5tZXJnZSkiID0gcmVmcy9oZWFkcy9teWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjIucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSByZW1vdGUgb24gYSB0cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28gfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXliYXNlMyAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXIzIG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjMucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIzLm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZTIgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMy5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIG5ldmVyIG9uIGEgdHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28gfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXliYXNlNCAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI0IG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjQucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI0Lm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZTIgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNC5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGxvY2FsIG9uIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbG9jYWwgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI1IGxvY2FsL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNS5yZW1vdGUpIiA9IGxvY2FsICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI1Lm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCSEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI1LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjYgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI2LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjYubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJISB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjYucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSByZW1vdGUgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI3IGxvY2FsL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNy5yZW1vdGUpIiA9IGxvY2FsICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI3Lm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNy5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjggbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI4LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjgubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI4LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjkgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI5LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjkubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyOS5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHVuY29uZmlndXJlZCBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9vIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIG15YmFzZTEwICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjEwIG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjEwLnJlbW90ZSkiID0gLiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTAubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEwLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIHVudHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjExIG15YmFzZTIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMS5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMS5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjExLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIHVudHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxMiBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMi5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMi5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEyLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYW4gdW50cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTMgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEzLnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEzLm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTMucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBsb2NhbCBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGxvY2FsICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxNCBteWJhc2UyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTQucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTQubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNC5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTUgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE1LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE1Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTUucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBhbHdheXMgb24gYW4gdW50cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBhbHdheXMgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE2IG15YmFzZTIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNi5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNi5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE2LnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYW4gdW50cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbmV2ZXIgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE3IGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE3LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE3Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTcucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBsb2NhbCBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBsb2NhbCAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTggbG9jYWwvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTgucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTgubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxOC5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE5IGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE5LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE5Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTkucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBhbHdheXMgb24gYW4gdW50cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgYWx3YXlzICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIyMCBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIyMC5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIyMC5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjIwLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgYWx3YXlzIG9uIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBhbHdheXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlnaXQgYnJhbmNoIG15MTEgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLm15MTEucmVtb3RlKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLm15MTEubWVyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWlzY29uZmlndXJlZCBhdXRvc2V0dXByZWJhc2UgKGJhZCB2YWx1ZSknICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgZ2FyYmFnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc2NvbmZpZ3VyZWQgYXV0b3NldHVwcmViYXNlIChubyB2YWx1ZSknICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSAmJgorCWVjaG8gIlticmFuY2hdIGF1dG9zZXR1cHJlYmFzZSIgPj4gLmdpdC9jb25maWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJyYW5jaC5hdXRvc2V0dXByZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0ZW1wdCB0byBkZWxldGUgYSBicmFuY2ggd2l0aG91dCBiYXNlIGFuZCB1bm1lcmdlZCB0byBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IG15OSAmJgorCWdpdCBjb25maWcgLS11bnNldCBicmFuY2gubXk4Lm1lcmdlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtZCBteTgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0ZW1wdCB0byBkZWxldGUgYSBicmFuY2ggbWVyZ2VkIHRvIGl0cyBiYXNlJyAnCisJIyB3ZSBhcmUgb24gbXk5IHdoaWNoIGlzIHRoZSBpbml0aWFsIGNvbW1pdDsgdHJhZGl0aW9uYWxseQorCSMgd2Ugd291bGQgbm90IGhhdmUgYWxsb3dlZCBkZWxldGluZyBteTggdGhhdCBpcyBub3QgbWVyZ2VkCisJIyB0byBteTksIGJ1dCBpdCBpcyBzZXQgdG8gdHJhY2sgbWFzdGVyIHRoYXQgYWxyZWFkeSBoYXMgbXk4CisJZ2l0IGNvbmZpZyBicmFuY2gubXk4Lm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtZCBteTgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0ZW1wdCB0byBkZWxldGUgYSBicmFuY2ggbWVyZ2VkIHRvIGl0cyBiYXNlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gVGhpcmQgPj5BICYmCisJZ2l0IGNvbW1pdCAtbSAiVGhpcmQgY29tbWl0IiBBICYmCisJZ2l0IGJyYW5jaCAtdCBteTEwIG15OSAmJgorCWdpdCBicmFuY2ggLWYgbXkxMCBIRUFEXiAmJgorCSMgd2UgYXJlIG9uIG1hc3RlciB3aGljaCBpcyBhdCB0aGUgdGhpcmQgY29tbWl0LCBhbmQgbXkxMAorCSMgaXMgYmVoaW5kIHVzLCBzbyB0cmFkaXRpb25hbGx5IHdlIHdvdWxkIGhhdmUgYWxsb3dlZCBkZWxldGluZworCSMgaXQ7IGJ1dCBteTEwIGlzIHNldCB0byB0cmFjayBteTkgdGhhdCBpcyBmdXJ0aGVyIGJlaGluZC4KKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1kIG15MTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIHNldC11cHN0cmVhbSBvbiB0aGUgY3VycmVudCBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IC0tYmFyZSBpbml0IG15dXBzdHJlYW0uZ2l0ICYmCisJZ2l0IHB1c2ggbXl1cHN0cmVhbS5naXQgbWFzdGVyOnJlZnMvaGVhZHMvZnJvdHogJiYKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gbXl1cHN0cmVhbS5naXQgJiYKKwlnaXQgZmV0Y2ggJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIG1hc3RlciBvcmlnaW4vZnJvdHogJiYKKworCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUpIiA9ICJ6b3JpZ2luIiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSkiID0gInpyZWZzL2hlYWRzL2Zyb3R6IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAtLWVkaXQtZGVzY3JpcHRpb24nICcKKwl3cml0ZV9zY3JpcHQgZWRpdG9yIDw8LVxFT0YgJiYKKwkJZWNobyAiTmV3IGNvbnRlbnRzIiA+IiQxIgorCUVPRgorCUVESVRPUj0uL2VkaXRvciBnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiAmJgorCQl3cml0ZV9zY3JpcHQgZWRpdG9yIDw8LVxFT0YgJiYKKwkJZ2l0IHN0cmlwc3BhY2UgLXMgPCIkMSIgPiJFRElUT1JfT1VUUFVUIgorCUVPRgorCUVESVRPUj0uL2VkaXRvciBnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiAmJgorCWVjaG8gIk5ldyBjb250ZW50cyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIEVESVRPUl9PVVRQVVQgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCB0eXBvIGluIGJyYW5jaCBuYW1lIHdoZW4gdXNpbmcgLS1lZGl0LWRlc2NyaXB0aW9uJyAnCisJd3JpdGVfc2NyaXB0IGVkaXRvciA8PC1cRU9GICYmCisJCWVjaG8gIk5ldyBjb250ZW50cyIgPiIkMSIKKwlFT0YKKwkoCisJCUVESVRPUj0uL2VkaXRvciAmJgorCQlleHBvcnQgRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uIG5vLXN1Y2gtYnJhbmNoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgLS1lZGl0LWRlc2NyaXB0aW9uIG9uIHVuYm9ybiBicmFuY2ggZm9yIG5vdycgJworCXdyaXRlX3NjcmlwdCBlZGl0b3IgPDwtXEVPRiAmJgorCQllY2hvICJOZXcgY29udGVudHMiID4iJDEiCisJRU9GCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHVuYm9ybiAmJgorCSgKKwkJRURJVE9SPS4vZWRpdG9yICYmCisJCWV4cG9ydCBFRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWVyZ2VkIGNhdGNoZXMgaW52YWxpZCBvYmplY3QgbmFtZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tbWVyZ2VkIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjAxLWJyYW5jaC1jb250YWlucy5zaCBiL3QvdDMyMDEtYnJhbmNoLWNvbnRhaW5zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4NmY0YmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjAxLWJyYW5jaC1jb250YWlucy5zaApAQCAtMCwwICsxLDk4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYnJhbmNoIC0tY29udGFpbnMgPGNvbW1pdD4sIC0tbWVyZ2VkLCBhbmQgLS1uby1tZXJnZWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwllY2hvIDEgPmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgb24gbWFzdGVyIiAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIDEgPmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgb24gc2lkZSIgJiYKKworCWdpdCBtZXJnZSBtYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1jb250YWlucz1tYXN0ZXInICcKKworCWdpdCBicmFuY2ggLS1jb250YWlucz1tYXN0ZXIgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiICBtYXN0ZXIiICYmIGVjaG8gIiogc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tY29udGFpbnMgbWFzdGVyJyAnCisKKwlnaXQgYnJhbmNoIC0tY29udGFpbnMgbWFzdGVyID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiAgbWFzdGVyIiAmJiBlY2hvICIqIHNpZGUiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLWNvbnRhaW5zPXNpZGUnICcKKworCWdpdCBicmFuY2ggLS1jb250YWlucz1zaWRlID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiogc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZTogYnJhbmNoIC0tbWVyZ2VkJyAnCisKKwlnaXQgYnJhbmNoIC0tbWVyZ2VkID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiAgbWFzdGVyIiAmJgorCQllY2hvICIqIHNpZGUiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGU6IGJyYW5jaCAtLW5vLW1lcmdlZCcgJworCisJZ2l0IGJyYW5jaCAtLW5vLW1lcmdlZCA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXN0ZXI6IGJyYW5jaCAtLW1lcmdlZCcgJworCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLS1tZXJnZWQgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiKiBtYXN0ZXIiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3RlcjogYnJhbmNoIC0tbm8tbWVyZ2VkJyAnCisKKwlnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiAgc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjAyLXNob3ctYnJhbmNoLW9jdG9wdXMuc2ggYi90L3QzMjAyLXNob3ctYnJhbmNoLW9jdG9wdXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGE1ZDVlNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDItc2hvdy1icmFuY2gtb2N0b3B1cy5zaApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzaG93LWJyYW5jaCB3aXRoIG1vcmUgdGhhbiA4IGhlYWRzJworCisuIC4vdGVzdC1saWIuc2gKKworbnVtYmVycz0iMSAyIDMgNCA1IDYgNyA4IDkgMTAiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwk+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWZvciBpIGluICRudW1iZXJzCisJZG8KKwkJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCRpIG1hc3RlciAmJgorCQk+IGZpbGUkaSAmJgorCQlnaXQgYWRkIGZpbGUkaSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBicmFuY2gkaSB8fCBicmVhaworCWRvbmUKKworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCishIFticmFuY2gxXSBicmFuY2gxCisgISBbYnJhbmNoMl0gYnJhbmNoMgorICAhIFticmFuY2gzXSBicmFuY2gzCisgICAhIFticmFuY2g0XSBicmFuY2g0CisgICAgISBbYnJhbmNoNV0gYnJhbmNoNQorICAgICAhIFticmFuY2g2XSBicmFuY2g2CisgICAgICAhIFticmFuY2g3XSBicmFuY2g3CisgICAgICAgISBbYnJhbmNoOF0gYnJhbmNoOAorICAgICAgICAhIFticmFuY2g5XSBicmFuY2g5CisgICAgICAgICAqIFticmFuY2gxMF0gYnJhbmNoMTAKKy0tLS0tLS0tLS0KKyAgICAgICAgICogW2JyYW5jaDEwXSBicmFuY2gxMAorICAgICAgICArICBbYnJhbmNoOV0gYnJhbmNoOQorICAgICAgICsgICBbYnJhbmNoOF0gYnJhbmNoOAorICAgICAgKyAgICBbYnJhbmNoN10gYnJhbmNoNworICAgICArICAgICBbYnJhbmNoNl0gYnJhbmNoNgorICAgICsgICAgICBbYnJhbmNoNV0gYnJhbmNoNQorICAgKyAgICAgICBbYnJhbmNoNF0gYnJhbmNoNAorICArICAgICAgICBbYnJhbmNoM10gYnJhbmNoMworICsgICAgICAgICBbYnJhbmNoMl0gYnJhbmNoMgorKyAgICAgICAgICBbYnJhbmNoMV0gYnJhbmNoMQorKysrKysrKysrKiBbYnJhbmNoMTBeXSBpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1icmFuY2ggd2l0aCBtb3JlIHRoYW4gOCBicmFuY2hlcycgJworCisJZ2l0IHNob3ctYnJhbmNoICQoZm9yIGkgaW4gJG51bWJlcnM7IGRvIGVjaG8gYnJhbmNoJGk7IGRvbmUpID4gb3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctYnJhbmNoIHdpdGggc2hvd2JyYW5jaC5kZWZhdWx0JyAnCisJZm9yIGkgaW4gJG51bWJlcnM7IGRvCisJCWdpdCBjb25maWcgLS1hZGQgc2hvd2JyYW5jaC5kZWZhdWx0IGJyYW5jaCRpCisJZG9uZSAmJgorCWdpdCBzaG93LWJyYW5jaCA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDMtYnJhbmNoLW91dHB1dC5zaCBiL3QvdDMyMDMtYnJhbmNoLW91dHB1dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NmZlN2UwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzIwMy1icmFuY2gtb3V0cHV0LnNoCkBAIC0wLDAgKzEsMTA5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGJyYW5jaCBkaXNwbGF5IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgY29tbWl0cycgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgYnJhbmNoZXMnICcKKwlnaXQgYnJhbmNoIGJyYW5jaC1vbmUgJiYKKwlnaXQgYnJhbmNoIGJyYW5jaC10d28gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSByZW1vdGUgYnJhbmNoZXMnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaC1vbmUgYnJhbmNoLW9uZSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoLXR3byBicmFuY2gtdHdvICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgcmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gtb25lCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKyAgYnJhbmNoLW9uZQorICBicmFuY2gtdHdvCisqIG1hc3RlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGxvY2FsIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tbGlzdCBzaG93cyBsb2NhbCBicmFuY2hlcycgJworCWdpdCBicmFuY2ggLS1saXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKyAgYnJhbmNoLW9uZQorICBicmFuY2gtdHdvCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1saXN0IHBhdHRlcm4gc2hvd3MgbWF0Y2hpbmcgbG9jYWwgYnJhbmNoZXMnICcKKwlnaXQgYnJhbmNoIC0tbGlzdCBicmFuY2gqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKyAgb3JpZ2luL0hFQUQgLT4gb3JpZ2luL2JyYW5jaC1vbmUKKyAgb3JpZ2luL2JyYW5jaC1vbmUKKyAgb3JpZ2luL2JyYW5jaC10d28KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtciBzaG93cyByZW1vdGUgYnJhbmNoZXMnICcKKwlnaXQgYnJhbmNoIC1yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKyAgYnJhbmNoLW9uZQorICBicmFuY2gtdHdvCisqIG1hc3RlcgorICByZW1vdGVzL29yaWdpbi9IRUFEIC0+IG9yaWdpbi9icmFuY2gtb25lCisgIHJlbW90ZXMvb3JpZ2luL2JyYW5jaC1vbmUKKyAgcmVtb3Rlcy9vcmlnaW4vYnJhbmNoLXR3bworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1hIHNob3dzIGxvY2FsIGFuZCByZW1vdGUgYnJhbmNoZXMnICcKKwlnaXQgYnJhbmNoIC1hID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK3R3bworb25lCit0d28KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtdiBzaG93cyBicmFuY2ggc3VtbWFyaWVzJyAnCisJZ2l0IGJyYW5jaCAtdiA+dG1wICYmCisJYXdrICJ7cHJpbnQgXCRORn0iIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJwordHdvCitvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWxpc3QgLXYgcGF0dGVybiBzaG93cyBicmFuY2ggc3VtbWFyaWVzJyAnCisJZ2l0IGJyYW5jaCAtLWxpc3QgLXYgYnJhbmNoKiA+dG1wICYmCisJYXdrICJ7cHJpbnQgXCRORn0iIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtdiBwYXR0ZXJuIGRvZXMgbm90IHNob3cgYnJhbmNoIHN1bW1hcmllcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLXYgYnJhbmNoKgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisqIChubyBicmFuY2gpCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworICBtYXN0ZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBzaG93cyBkZXRhY2hlZCBIRUFEIHByb3Blcmx5JyAnCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCWdpdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIxMC1wYWNrLXJlZnMuc2ggYi90L3QzMjEwLXBhY2stcmVmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDA0MzYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzIxMC1wYWNrLXJlZnMuc2gKQEAgLTAsMCArMSwxMjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgQW1vcyBXYXRlcmxhbmQKKyMgQ29weXJpZ2h0IChjKSAyMDA2IENocmlzdGlhbiBDb3VkZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHBhY2stcmVmcyBzaG91bGQgbm90IGNoYW5nZSB0aGUgYnJhbmNoIHNlbWFudGljCisKK1RoaXMgdGVzdCBydW5zIGdpdCBwYWNrLXJlZnMgYW5kIGdpdCBzaG93LXJlZiBhbmQgY2hlY2tzIHRoYXQgdGhlIGJyYW5jaAorc2VtYW50aWMgaXMgc3RpbGwgdGhlIHNhbWUuCisnCisuIC4vdGVzdC1saWIuc2gKKworZWNobyAnW2NvcmVdIGxvZ2FsbHJlZnVwZGF0ZXMgPSB0cnVlJyA+Pi5naXQvY29uZmlnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIGEgdHJpdmlhbCByZXBvc2l0b3J5JyBcCisgICAgJ2VjaG8gSGVsbG8gPiBBICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQSAmJgorICAgICBnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdC4iICYmCisgICAgIEhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpJworCitTSEExPQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2VlIGlmIGdpdCBzaG93LXJlZiB3b3JrcyBhcyBleHBlY3RlZCcgXAorICAgICdnaXQgYnJhbmNoIGEgJiYKKyAgICAgU0hBMT1gY2F0IC5naXQvcmVmcy9oZWFkcy9hYCAmJgorICAgICBlY2hvICIkU0hBMSByZWZzL2hlYWRzL2EiID5leHBlY3QgJiYKKyAgICAgZ2l0IHNob3ctcmVmIGEgPnJlc3VsdCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3QgcmVzdWx0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2VlIGlmIGEgYnJhbmNoIHN0aWxsIGV4aXN0cyB3aGVuIHBhY2tlZCcgXAorICAgICdnaXQgYnJhbmNoIGIgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorICAgICBybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYiAmJgorICAgICBlY2hvICIkU0hBMSByZWZzL2hlYWRzL2IiID5leHBlY3QgJiYKKyAgICAgZ2l0IHNob3ctcmVmIGIgPnJlc3VsdCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3QgcmVzdWx0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGMvZCBzaG91bGQgYmFyZiBpZiBicmFuY2ggYyBleGlzdHMnICcKKyAgICAgZ2l0IGJyYW5jaCBjICYmCisgICAgIGdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKyAgICAgcm0gLWYgLmdpdC9yZWZzL2hlYWRzL2MgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBjL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NlZSBpZiBhIGJyYW5jaCBzdGlsbCBleGlzdHMgYWZ0ZXIgZ2l0IHBhY2stcmVmcyAtLXBydW5lJyBcCisgICAgJ2dpdCBicmFuY2ggZSAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgZWNobyAiJFNIQTEgcmVmcy9oZWFkcy9lIiA+ZXhwZWN0ICYmCisgICAgIGdpdCBzaG93LXJlZiBlID5yZXN1bHQgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0IHJlc3VsdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VlIGlmIGdpdCBwYWNrLXJlZnMgLS1wcnVuZSByZW1vdmUgcmVmIGZpbGVzJyAnCisgICAgIGdpdCBicmFuY2ggZiAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgISB0ZXN0IC1mIC5naXQvcmVmcy9oZWFkcy9mCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlZSBpZiBnaXQgcGFjay1yZWZzIC0tcHJ1bmUgcmVtb3ZlcyBlbXB0eSBkaXJzJyAnCisgICAgIGdpdCBicmFuY2ggci9zL3QgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisgICAgICEgdGVzdCAtZSAuZ2l0L3JlZnMvaGVhZHMvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGJyYW5jaCBnIHNob3VsZCB3b3JrIHdoZW4gZ2l0IGJyYW5jaCBnL2ggaGFzIGJlZW4gZGVsZXRlZCcgXAorICAgICdnaXQgYnJhbmNoIGcvaCAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBnL2ggJiYKKyAgICAgZ2l0IGJyYW5jaCBnICYmCisgICAgIGdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGkvai9rIHNob3VsZCBiYXJmIGlmIGJyYW5jaCBpIGV4aXN0cycgJworICAgICBnaXQgYnJhbmNoIGkgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggaS9qL2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3Rlc3QgZ2l0IGJyYW5jaCBrIGFmdGVyIGJyYW5jaCBrL2wvbSBhbmQgay9sbSBoYXZlIGJlZW4gZGVsZXRlZCcgXAorICAgICdnaXQgYnJhbmNoIGsvbCAmJgorICAgICBnaXQgYnJhbmNoIGsvbG0gJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBrL2wgJiYKKyAgICAgZ2l0IGJyYW5jaCBrL2wvbSAmJgorICAgICBnaXQgYnJhbmNoIC1kIGsvbC9tICYmCisgICAgIGdpdCBicmFuY2ggLWQgay9sbSAmJgorICAgICBnaXQgYnJhbmNoIGsnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd0ZXN0IGdpdCBicmFuY2ggbiBhZnRlciBzb21lIGJyYW5jaCBkZWxldGlvbiBhbmQgcHJ1bmluZycgXAorICAgICdnaXQgYnJhbmNoIG4vbyAmJgorICAgICBnaXQgYnJhbmNoIG4vb3AgJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBuL28gJiYKKyAgICAgZ2l0IGJyYW5jaCBuL28vcCAmJgorICAgICBnaXQgYnJhbmNoIC1kIG4vb3AgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisgICAgIGdpdCBicmFuY2ggLWQgbi9vL3AgJiYKKyAgICAgZ2l0IGJyYW5jaCBuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VlIGlmIHVwLXRvLWRhdGUgcGFja2VkIHJlZnMgYXJlIHByZXNlcnZlZCcgXAorCSdnaXQgYnJhbmNoIHEgJiYKKwkgZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisJIGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvcSByZWZzL2hlYWRzL3EgJiYKKwkgISB0ZXN0IC1mIC5naXQvcmVmcy9oZWFkcy9xJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLCBwcnVuZSBhbmQgcmVwYWNrJyAnCisJZ2l0IHRhZyBmb28gJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwlnaXQgc2hvdy1yZWYgPmFsbC1vZi10aGVtICYmCisJZ2l0IHBhY2stcmVmcyAmJgorCWdpdCBzaG93LXJlZiA+YWdhaW4gJiYKKwl0ZXN0X2NtcCBhbGwtb2YtdGhlbSBhZ2FpbgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDAtZnVubnktbmFtZXMuc2ggYi90L3QzMzAwLWZ1bm55LW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc0ODBkNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzAwLWZ1bm55LW5hbWVzLnNoCkBAIC0wLDAgKzEsMjE2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1BhdGhuYW1lcyB3aXRoIGZ1bm55IGNoYXJhY3RlcnMuCisKK1RoaXMgdGVzdCB0cmllcyBwYXRobmFtZXMgd2l0aCBmdW5ueSBjaGFyYWN0ZXJzIGluIHRoZSB3b3JraW5nCit0cmVlLCBpbmRleCwgYW5kIHRyZWUgb2JqZWN0cy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK0hUPScJJworCitlY2hvIDI+L2Rldi9udWxsID4gIk5hbWUgd2l0aCBhbiR7SFR9SFQiCitpZiAhIHRlc3QgLWYgIk5hbWUgd2l0aCBhbiR7SFR9SFQiCit0aGVuCisJIyBzaW5jZSBGQVQvTlRGUyBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcywgc2tpcCB0aGlzIHRlc3QKKwlza2lwX2FsbD0nWW91ciBmaWxlc3lzdGVtIGRvZXMgbm90IGFsbG93IHRhYnMgaW4gZmlsZW5hbWVzJworCXRlc3RfZG9uZQorZmkKKworcDA9J25vLWZ1bm55JworcDE9J3RhYnMJLCIgKGRxKSBhbmQgc3BhY2VzJworcDI9J2p1c3Qgc3BhY2UnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2F0ID4iJHAwIiA8PC1cRU9GICYmCisJMS4gQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBjYXQsIG9vcHMgZG9nLgorCTIuIEEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgY2F0LCBvb3BzIGRvZy4KKwkzLiBBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGNhdCwgb29wcyBkb2cuCisJRU9GCisKKwl7IGNhdCAiJHAwIiA+IiRwMSIgfHwgOjsgfSAmJgorCXsgZWNobyAiRm9vIEJhciBCYXoiID4iJHAyIiB8fCA6OyB9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBwb3B1bGF0ZSBpbmRleCBhbmQgdHJlZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiRwMCIgIiRwMiIgJiYKKwl0MD0kKGdpdCB3cml0ZS10cmVlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyBwcmludHMgc3BhY2UgaW4gZmlsZW5hbWUgdmVyYmF0aW0nICcKKwlwcmludGYgIiVzXG4iICJqdXN0IHNwYWNlIiBuby1mdW5ueSA+ZXhwZWN0ZWQgJiYKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBhZGQgZnVubnkgZmlsZW5hbWUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICIkcDEiICYmCisJdDE9JChnaXQgd3JpdGUtdHJlZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJanVzdCBzcGFjZQorCW5vLWZ1bm55CisJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAteiBkb2VzIG5vdCBxdW90ZSBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWp1c3Qgc3BhY2UKKwluby1mdW5ueQorCXRhYnMJLCIgKGRxKSBhbmQgc3BhY2VzCisJRU9GCisJZ2l0IGxzLWZpbGVzIC16ID5scy1maWxlcy56ICYmCisJIiRQRVJMX1BBVEgiIC1wZSAieS9cMDAwL1wwMTIvIiA8bHMtZmlsZXMueiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlqdXN0IHNwYWNlCisJbm8tZnVubnkKKwkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgbHMtdHJlZSAtciAkdDEgPmxzLXRyZWUgJiYKKwlzZWQgLWUgInMvXlteCV0qCS8vIiA8bHMtdHJlZSA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtLW5hbWUtc3RhdHVzIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUEJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLS1uYW1lLXN0YXR1cyAkdDAgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAtLW5hbWUtc3RhdHVzIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUEJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtdHJlZSAtLW5hbWUtc3RhdHVzICR0MCAkdDEgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLXogZG9lcyBub3QgcXVvdGUgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlBCisJdGFicwksIiAoZHEpIGFuZCBzcGFjZXMKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAteiAtLW5hbWUtc3RhdHVzICR0MCA+ZGlmZi1pbmRleC56ICYmCisJIiRQRVJMX1BBVEgiIC1wZSAieS9cMDAwL1wwMTIvIiA8ZGlmZi1pbmRleC56ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLXogZG9lcyBub3QgcXVvdGUgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlBCisJdGFicwksIiAoZHEpIGFuZCBzcGFjZXMKKwlFT0YKKwlnaXQgZGlmZi10cmVlIC16IC0tbmFtZS1zdGF0dXMgJHQwICR0MSA+ZGlmZi10cmVlLnogJiYKKwkiJFBFUkxfUEFUSCIgLXBlIHkvXFwwMDAvXFwwMTIvIDxkaWZmLXRyZWUueiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUNOVU0Jbm8tZnVubnkJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtLW5hbWUtc3RhdHVzICR0MCAkdDEgPm91dCAmJgorCXNlZCAtZSAicy9eQ1swLTldKi9DTlVNLyIgPG91dCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHJlbW92ZSB1bmZ1bm55IGluZGV4IGVudHJ5JyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAiJHAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLU0gcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJUk5VTQluby1mdW5ueQkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtTSAtLW5hbWUtc3RhdHVzICR0MCA+b3V0ICYmCisJc2VkIC1lICJzL15SWzAtOV0qL1JOVU0vIiA8b3V0ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IC1NIC1wIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS9uby1mdW5ueSAiYi90YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCXNpbWlsYXJpdHkgaW5kZXggTlVNJQorCXJlbmFtZSBmcm9tIG5vLWZ1bm55CisJcmVuYW1lIHRvICJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0MCA+ZGlmZiAmJgorCXNlZCAtZSAicy9pbmRleCBbMC05XSolL2luZGV4IE5VTSUvIiA8ZGlmZiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IG1vZGUgY2hhbmdlJyAnCisJY2htb2QgK3ggIiRwMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtTSAtcCB3aXRoIG1vZGUgY2hhbmdlIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS9uby1mdW5ueSAiYi90YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCW9sZCBtb2RlIDEwMDY0NAorCW5ldyBtb2RlIDEwMDc1NQorCXNpbWlsYXJpdHkgaW5kZXggTlVNJQorCXJlbmFtZSBmcm9tIG5vLWZ1bm55CisJcmVuYW1lIHRvICJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0MCA+ZGlmZiAmJgorCXNlZCAtZSAicy9pbmRleCBbMC05XSolL2luZGV4IE5VTSUvIiA8ZGlmZiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnN0YXQgZm9yIHJlbmFtZSBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkgInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHQwID5kaWZmICYmCisJZ2l0IGFwcGx5IC0tc3RhdCA8ZGlmZiA+ZGlmZnN0YXQgJiYKKwlzZWQgLWUgInMvfC4qLy8iIC1lICJzLyAqXCQvLyIgPGRpZmZzdGF0ID5jdXJyZW50ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbnVtc3RhdCBmb3IgcmVuYW1lIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTAJMAkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtTSAtcCAkdDAgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdudW1zdGF0IHdpdGhvdXQgLU0gcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJMAkzCW5vLWZ1bm55CisJMwkwCSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1wICR0MCA+ZGlmZiAmJgorCWdpdCBhcHBseSAtLW51bXN0YXQgPGRpZmYgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ251bXN0YXQgZm9yIG5vbi1naXQgcmVuYW1lIGRpZmYgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJMAkzCW5vLWZ1bm55CisJMwkwCSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1wICR0MCA+Z2l0LWRpZmYgJiYKKwlzZWQgLW5lICIvXlstK0BdL3AiIDxnaXQtZGlmZiA+ZGlmZiAmJgorCWdpdCBhcHBseSAtLW51bXN0YXQgPGRpZmYgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwMS1ub3Rlcy5zaCBiL3QvdDMzMDEtbm90ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTZkZTA1YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDEtbm90ZXMuc2gKQEAgLTAsMCArMSwxMjI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjb21taXQgbm90ZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPiBmYWtlX2VkaXRvci5zaCA8PCBcRU9GCisjIS9iaW4vc2gKK2VjaG8gIiRNU0ciID4gIiQxIgorZWNobyAiJE1TRyIgPiYgMgorRU9GCitjaG1vZCBhK3ggZmFrZV9lZGl0b3Iuc2gKK0dJVF9FRElUT1I9Li9mYWtlX2VkaXRvci5zaAorZXhwb3J0IEdJVF9FRElUT1IKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGFubm90YXRlIG5vbi1leGlzdGluZyBIRUFEJyAnCisJKE1TRz0zICYmIGV4cG9ydCBNU0cgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGFkZCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJOiA+IGExICYmCisJZ2l0IGFkZCBhMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gMXN0ICYmCisJOiA+IGEyICYmCisJZ2l0IGFkZCBhMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gMm5kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lZWQgdmFsaWQgbm90ZXMgcmVmJyAnCisJKE1TRz0xIEdJVF9OT1RFU19SRUY9LyAmJiBleHBvcnQgTVNHIEdJVF9OT1RFU19SRUYgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGFkZCkgJiYKKwkoTVNHPTIgR0lUX05PVEVTX1JFRj0vICYmIGV4cG9ydCBNU0cgR0lUX05PVEVTX1JFRiAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNpbmcgdG8gYWRkIG5vdGVzIGluIHJlZnMvaGVhZHMvJyAnCisJKE1TRz0xIEdJVF9OT1RFU19SRUY9cmVmcy9oZWFkcy9ib2d1cyAmJgorCSBleHBvcnQgTVNHIEdJVF9OT1RFU19SRUYgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGFkZCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNpbmcgdG8gZWRpdCBub3RlcyBpbiByZWZzL3JlbW90ZXMvJyAnCisJKE1TRz0xIEdJVF9OT1RFU19SRUY9cmVmcy9yZW1vdGVzL2JvZ3VzICYmCisJIGV4cG9ydCBNU0cgR0lUX05PVEVTX1JFRiAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgZWRpdCkKKycKKworIyAxIGluZGljYXRlcyBjYXVnaHQgZ3JhY2VmdWxseSBieSBkaWUsIDEyOCBtZWFucyBnaXQtc2hvdyBiYXJrZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsZSBlbXB0eSBub3RlcyBncmFjZWZ1bGx5JyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBub3RlcyBzaG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgbm9uLWV4aXN0ZW50IG5vdGVzIGVudHJ5IHdpdGggJU4nICcKKwlmb3IgbCBpbiBBIEIKKwlkbworCQllY2hvICIkbCIKKwlkb25lID5leHBlY3QgJiYKKwlnaXQgc2hvdyAtcyAtLWZvcm1hdD0nQSVuJU5CJyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZXMnICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9jb21taXRzICYmCisJTVNHPWI0IGdpdCBub3RlcyBhZGQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9OT1RFU19FRElUTVNHICYmCisJdGVzdCAxID0gJChnaXQgbHMtdHJlZSByZWZzL25vdGVzL2NvbW1pdHMgfCB3YyAtbCkgJiYKKwl0ZXN0IGI0ID0gJChnaXQgbm90ZXMgc2hvdykgJiYKKwlnaXQgc2hvdyBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgbm90ZXMgZW50cnkgd2l0aCAlTicgJworCWZvciBsIGluIEEgYjQgQgorCWRvCisJCWVjaG8gIiRsIgorCWRvbmUgPmV4cGVjdCAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSdBJW4lTkInID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitkNDIzZjhjIHJlZnMvbm90ZXMvY29tbWl0c0B7MH06IG5vdGVzOiBOb3RlcyBhZGRlZCBieSAnZ2l0IG5vdGVzIGFkZCcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcmVmbG9nIGVudHJ5JyAnCisJZ2l0IHJlZmxvZyBzaG93IHJlZnMvbm90ZXMvY29tbWl0cyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IGV4aXN0aW5nIG5vdGVzJyAnCisJTVNHPWIzIGdpdCBub3RlcyBlZGl0ICYmCisJdGVzdCAhIC1mIC5naXQvTk9URVNfRURJVE1TRyAmJgorCXRlc3QgMSA9ICQoZ2l0IGxzLXRyZWUgcmVmcy9ub3Rlcy9jb21taXRzIHwgd2MgLWwpICYmCisJdGVzdCBiMyA9ICQoZ2l0IG5vdGVzIHNob3cpICYmCisJZ2l0IHNob3cgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgImdpdCBub3RlcyBhZGQgLW0iIHdoZXJlIG5vdGVzIGFscmVhZHkgZXhpc3RzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGFkZCAtbSAiYjIiICYmCisJdGVzdCAhIC1mIC5naXQvTk9URVNfRURJVE1TRyAmJgorCXRlc3QgMSA9ICQoZ2l0IGxzLXRyZWUgcmVmcy9ub3Rlcy9jb21taXRzIHwgd2MgLWwpICYmCisJdGVzdCBiMyA9ICQoZ2l0IG5vdGVzIHNob3cpICYmCisJZ2l0IHNob3cgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gb3ZlcndyaXRlIGV4aXN0aW5nIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGFkZCAtZiAtbSInICcKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJiMSIgJiYKKwl0ZXN0ICEgLWYgLmdpdC9OT1RFU19FRElUTVNHICYmCisJdGVzdCAxID0gJChnaXQgbHMtdHJlZSByZWZzL25vdGVzL2NvbW1pdHMgfCB3YyAtbCkgJiYKKwl0ZXN0IGIxID0gJChnaXQgbm90ZXMgc2hvdykgJiYKKwlnaXQgc2hvdyBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB3L25vIG9wdGlvbnMgb24gZXhpc3Rpbmcgbm90ZSBtb3JwaHMgaW50byBlZGl0JyAnCisJTVNHPWIyIGdpdCBub3RlcyBhZGQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9OT1RFU19FRElUTVNHICYmCisJdGVzdCAxID0gJChnaXQgbHMtdHJlZSByZWZzL25vdGVzL2NvbW1pdHMgfCB3YyAtbCkgJiYKKwl0ZXN0IGIyID0gJChnaXQgbm90ZXMgc2hvdykgJiYKKwlnaXQgc2hvdyBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZSB3aXRoICJnaXQgbm90ZXMgYWRkIC1mIicgJworCU1TRz1iMSBnaXQgbm90ZXMgYWRkIC1mICYmCisJdGVzdCAhIC1mIC5naXQvTk9URVNfRURJVE1TRyAmJgorCXRlc3QgMSA9ICQoZ2l0IGxzLXRyZWUgcmVmcy9ub3Rlcy9jb21taXRzIHwgd2MgLWwpICYmCisJdGVzdCBiMSA9ICQoZ2l0IG5vdGVzIHNob3cpICYmCisJZ2l0IHNob3cgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitjb21taXQgMjY4MDQ4YmZiOGExZmIzOGU3MDNiYWNlYjhhYjIzNTQyMWJmODBjNQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMAorCisgICAgMm5kCisKK05vdGVzOgorICAgIGIxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBub3RlcycgJworCSEgKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgYjEpICYmCisJZ2l0IGxvZyAtMSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG11bHRpLWxpbmUgbm90ZXMgKHNldHVwKScgJworCTogPiBhMyAmJgorCWdpdCBhZGQgYTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDNyZCAmJgorCU1TRz0iYjMKK2MzYzNjM2MzCitkM2QzZDMiIGdpdCBub3RlcyBhZGQKKycKKworY2F0ID4gZXhwZWN0LW11bHRpbGluZSA8PCBFT0YKK2NvbW1pdCAxNTg0MjE1ZjFkMjljNjVlOTljNmM2ODQ4NjI2NTUzZmRkMDdmZDc1CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxNToxMyAyMDA1IC0wNzAwCisKKyAgICAzcmQKKworTm90ZXM6CisgICAgYjMKKyAgICBjM2MzYzNjMworICAgIGQzZDNkMworRU9GCisKK3ByaW50ZiAiXG4iID4+IGV4cGVjdC1tdWx0aWxpbmUKK2NhdCBleHBlY3QgPj4gZXhwZWN0LW11bHRpbGluZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IG11bHRpLWxpbmUgbm90ZXMnICcKKwlnaXQgbG9nIC0yID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0LW11bHRpbGluZSBvdXRwdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSAtRiBub3RlcyAoc2V0dXApJyAnCisJOiA+IGE0ICYmCisJZ2l0IGFkZCBhNCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gNHRoICYmCisJZWNobyAieHl6enkiID4gbm90ZTUgJiYKKwlnaXQgbm90ZXMgYWRkIC1GIG5vdGU1CisnCisKK2NhdCA+IGV4cGVjdC1GIDw8IEVPRgorY29tbWl0IDE1MDIzNTM1NTc0ZGVkOGIxYTg5MDUyYjMyNjczZjg0Y2Y5NTgyYjgKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE2OjEzIDIwMDUgLTA3MDAKKworICAgIDR0aAorCitOb3RlczoKKyAgICB4eXp6eQorRU9GCisKK3ByaW50ZiAiXG4iID4+IGV4cGVjdC1GCitjYXQgZXhwZWN0LW11bHRpbGluZSA+PiBleHBlY3QtRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IC1GIG5vdGVzJyAnCisJZ2l0IGxvZyAtMyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdC1GIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZS1hZGRpbmcgLUYgbm90ZXMgd2l0aG91dCAtZiBmYWlscycgJworCWVjaG8gInp5eHh5IiA+IG5vdGU1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGFkZCAtRiBub3RlNSAmJgorCWdpdCBsb2cgLTMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QtRiBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDwgRU9GCitjb21taXQgMTUwMjM1MzU1NzRkZWQ4YjFhODkwNTJiMzI2NzNmODRjZjk1ODJiOAordHJlZSBlMDcwZTNhZjUxMDExZTQ3YjE4M2MzM2FkZjk3MzY3MzZhNTI1NzA5CitwYXJlbnQgMTU4NDIxNWYxZDI5YzY1ZTk5YzZjNjg0ODYyNjU1M2ZkZDA3ZmQ3NQorYXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDExMTI5MTIxNzMgLTA3MDAKK2NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTIxNzMgLTA3MDAKKworICAgIDR0aAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tcHJldHR5PXJhdyBkb2VzIG5vdCBzaG93IG5vdGVzJyAnCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1yYXcgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4+ZXhwZWN0IDw8RU9GCisKK05vdGVzOgorICAgIHh5enp5CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1zaG93LW5vdGVzJyAnCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1yYXcgLS1zaG93LW5vdGVzID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby1ub3RlcycgJworCWdpdCBsb2cgLTEgLS1uby1ub3RlcyA+b3V0cHV0ICYmCisJISBncmVwIHh5enp5IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZm9ybWF0LXBhdGNoIGRvZXMgbm90IHNob3cgbm90ZXMnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5vdXRwdXQgJiYKKwkhIGdyZXAgeHl6enkgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmb3JtYXQtcGF0Y2ggLS1zaG93LW5vdGVzIGRvZXMgc2hvdyBub3RlcycgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zaG93LW5vdGVzIC0xIC0tc3Rkb3V0ID5vdXRwdXQgJiYKKwlncmVwIHh5enp5IG91dHB1dAorJworCitmb3IgcHJldHR5IGluIFwKKwkiIiAtLXByZXR0eSAtLXByZXR0eT1yYXcgLS1wcmV0dHk9c2hvcnQgLS1wcmV0dHk9bWVkaXVtIFwKKwktLXByZXR0eT1mdWxsIC0tcHJldHR5PWZ1bGxlciAtLXByZXR0eT1mb3JtYXQ6JXMgLS1vbmVsaW5lCitkbworCWNhc2UgIiRwcmV0dHkiIGluCisJIiIpIHA9IG5vdD0gbmVnYXRlPSIiIDs7CisJPyopIHA9IiRwcmV0dHkiIG5vdD0iIG5vdCIgbmVnYXRlPSIhIiA7OworCWVzYWMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgc2hvdyAkcHJldHR5IGRvZXMkbm90IHNob3cgbm90ZXMiICcKKwkJZ2l0IHNob3cgJHAgPm91dHB1dCAmJgorCQlldmFsICIkbmVnYXRlIGdyZXAgeHl6enkgb3V0cHV0IgorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYWx0ZXJuYXRlIG5vdGVzIHJlZicgJworCWdpdCBub3RlcyAtLXJlZj1hbHRlcm5hdGUgYWRkIC1tIGFsdGVybmF0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm90ZXMgc2hvd3MgZGVmYXVsdCBub3RlcycgJworCWdpdCBsb2cgLTEgLS1ub3RlcyA+b3V0cHV0ICYmCisJZ3JlcCB4eXp6eSBvdXRwdXQgJiYKKwkhIGdyZXAgYWx0ZXJuYXRlIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm90ZXM9WCBzaG93cyBvbmx5IFgnICcKKwlnaXQgbG9nIC0xIC0tbm90ZXM9YWx0ZXJuYXRlID5vdXRwdXQgJiYKKwkhIGdyZXAgeHl6enkgb3V0cHV0ICYmCisJZ3JlcCBhbHRlcm5hdGUgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1ub3RlcyAtLW5vdGVzPVggc2hvd3MgYm90aCcgJworCWdpdCBsb2cgLTEgLS1ub3RlcyAtLW5vdGVzPWFsdGVybmF0ZSA+b3V0cHV0ICYmCisJZ3JlcCB4eXp6eSBvdXRwdXQgJiYKKwlncmVwIGFsdGVybmF0ZSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vLW5vdGVzIHJlc2V0cyBkZWZhdWx0IHN0YXRlJyAnCisJZ2l0IGxvZyAtMSAtLW5vdGVzIC0tbm90ZXM9YWx0ZXJuYXRlIFwKKwkJLS1uby1ub3RlcyAtLW5vdGVzPWFsdGVybmF0ZSBcCisJCT5vdXRwdXQgJiYKKwkhIGdyZXAgeHl6enkgb3V0cHV0ICYmCisJZ3JlcCBhbHRlcm5hdGUgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby1ub3RlcyByZXNldHMgcmVmIGxpc3QnICcKKwlnaXQgbG9nIC0xIC0tbm90ZXMgLS1ub3Rlcz1hbHRlcm5hdGUgXAorCQktLW5vLW5vdGVzIC0tbm90ZXMgXAorCQk+b3V0cHV0ICYmCisJZ3JlcCB4eXp6eSBvdXRwdXQgJiYKKwkhIGdyZXAgYWx0ZXJuYXRlIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgLW0gbm90ZXMgKHNldHVwKScgJworCTogPiBhNSAmJgorCWdpdCBhZGQgYTUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDV0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gc3BhbSAtbSAiZm9vCitiYXIKK2JheiIKKycKKword2hpdGVzcGFjZT0iICAgICIKK2NhdCA+IGV4cGVjdC1tIDw8IEVPRgorY29tbWl0IGJkMTc1MzIwMDMwM2QwYTAzNDRiZTgxM2U1MDQyNTNiM2Q5OGU3NGQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE3OjEzIDIwMDUgLTA3MDAKKworICAgIDV0aAorCitOb3RlczoKKyAgICBzcGFtCiskd2hpdGVzcGFjZQorICAgIGZvbworICAgIGJhcgorICAgIGJhegorRU9GCisKK3ByaW50ZiAiXG4iID4+IGV4cGVjdC1tCitjYXQgZXhwZWN0LUYgPj4gZXhwZWN0LW0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyAtbSBub3RlcycgJworCWdpdCBsb2cgLTQgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIG5vdGUgd2l0aCBhZGQgLWYgLUYgL2Rldi9udWxsIChzZXR1cCknICcKKwlnaXQgbm90ZXMgYWRkIC1mIC1GIC9kZXYvbnVsbAorJworCitjYXQgPiBleHBlY3Qtcm0tRiA8PCBFT0YKK2NvbW1pdCBiZDE3NTMyMDAzMDNkMGEwMzQ0YmU4MTNlNTA0MjUzYjNkOThlNzRkCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwCisKKyAgICA1dGgKK0VPRgorCitwcmludGYgIlxuIiA+PiBleHBlY3Qtcm0tRgorY2F0IGV4cGVjdC1GID4+IGV4cGVjdC1ybS1GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBub3RlIHJlbW92YWwgd2l0aCAtRiAvZGV2L251bGwnICcKKwlnaXQgbG9nIC00ID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0LXJtLUYgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGNyZWF0ZSBlbXB0eSBub3RlIHdpdGggLW0gIiIgKHNldHVwKScgJworCWdpdCBub3RlcyBhZGQgLW0gIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vbi1jcmVhdGlvbiBvZiBub3RlIHdpdGggLW0gIiInICcKKwlnaXQgbG9nIC00ID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0LXJtLUYgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cKKycKKworY2F0ID4gZXhwZWN0LWNvbWJpbmVfbV9hbmRfRiA8PCBFT0YKK2ZvbworCit4eXp6eQorCitiYXIKKworenl4eHkKKworYmF6CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGUgd2l0aCBjb21iaW5hdGlvbiBvZiAtbSBhbmQgLUYnICcKKwllY2hvICJ4eXp6eSIgPiBub3RlX2EgJiYKKwllY2hvICJ6eXh4eSIgPiBub3RlX2IgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJmb28iIC1GIG5vdGVfYSAtbSAiYmFyIiAtRiBub3RlX2IgLW0gImJheiIgJiYKKwlnaXQgbm90ZXMgc2hvdyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdC1jb21iaW5lX21fYW5kX0Ygb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBub3RlIHdpdGggImdpdCBub3RlcyByZW1vdmUiIChzZXR1cCknICcKKwlnaXQgbm90ZXMgcmVtb3ZlIEhFQUReICYmCisJZ2l0IG5vdGVzIHJlbW92ZQorJworCitjYXQgPiBleHBlY3Qtcm0tcmVtb3ZlIDw8IEVPRgorY29tbWl0IGJkMTc1MzIwMDMwM2QwYTAzNDRiZTgxM2U1MDQyNTNiM2Q5OGU3NGQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE3OjEzIDIwMDUgLTA3MDAKKworICAgIDV0aAorCitjb21taXQgMTUwMjM1MzU1NzRkZWQ4YjFhODkwNTJiMzI2NzNmODRjZjk1ODJiOAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTY6MTMgMjAwNSAtMDcwMAorCisgICAgNHRoCitFT0YKKworcHJpbnRmICJcbiIgPj4gZXhwZWN0LXJtLXJlbW92ZQorY2F0IGV4cGVjdC1tdWx0aWxpbmUgPj4gZXhwZWN0LXJtLXJlbW92ZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZSByZW1vdmFsIHdpdGggImdpdCBub3RlcyByZW1vdmUiJyAnCisJZ2l0IGxvZyAtNCA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdC1ybS1yZW1vdmUgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorYzE4ZGMwMjRlMTRmMDhkMThkMTRlZWEwZDc0N2ZmNjkyZDY2ZDZhMyAxNTg0MjE1ZjFkMjljNjVlOTljNmM2ODQ4NjI2NTUzZmRkMDdmZDc1CitjOWM2YWY3Zjc4YmM0NzQ5MGRiZjNlODIyY2YyZjNjMjRkNGI5MDYxIDI2ODA0OGJmYjhhMWZiMzhlNzAzYmFjZWI4YWIyMzU0MjFiZjgwYzUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyBub24tZXhpc3Rpbmcgbm90ZSBzaG91bGQgbm90IGNyZWF0ZSBuZXcgY29tbWl0JyAnCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMgPiBiZWZvcmVfY29tbWl0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHJlbW92ZSBIRUFEXiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzID4gYWZ0ZXJfY29tbWl0ICYmCisJdGVzdF9jbXAgYmVmb3JlX2NvbW1pdCBhZnRlcl9jb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZpbmcgbW9yZSB0aGFuIG9uZScgJworCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9jb21taXRzICRiZWZvcmUiICYmCisKKwkjIFdlIGhhdmUgb25seSB0d28gLS0gYWRkIGFub3RoZXIgYW5kIG1ha2Ugc3VyZSBpdCBzdGF5cworCWdpdCBub3RlcyBhZGQgLW0gImV4dHJhIiAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFmdGVyLXJlbW92YWwtZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSBIRUFEXl4gSEVBRF5eXiAmJgorCWdpdCBub3RlcyBsaXN0IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgYWZ0ZXItcmVtb3ZhbC1leHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIGlzIGF0b21pYycgJworCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9jb21taXRzICRiZWZvcmUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHJlbW92ZSBIRUFEXl4gSEVBRF5eXiBIRUFEXiAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdCAiJGJlZm9yZSIgPSAiJGFmdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyB3aXRoIC0taWdub3JlLW1pc3NpbmcnICcKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvY29tbWl0cyAkYmVmb3JlIiAmJgorCisJIyBXZSBoYXZlIG9ubHkgdHdvIC0tIGFkZCBhbm90aGVyIGFuZCBtYWtlIHN1cmUgaXQgc3RheXMKKwlnaXQgbm90ZXMgYWRkIC1tICJleHRyYSIgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hZnRlci1yZW1vdmFsLWV4cGVjdCAmJgorCWdpdCBub3RlcyByZW1vdmUgLS1pZ25vcmUtbWlzc2luZyBIRUFEXl4gSEVBRF5eXiBIRUFEXiAmJgorCWdpdCBub3RlcyBsaXN0IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgYWZ0ZXItcmVtb3ZhbC1leHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIHdpdGggLS1pZ25vcmUtbWlzc2luZyBidXQgYm9ndXMgcmVmJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgcmVtb3ZlIC0taWdub3JlLW1pc3NpbmcgSEVBRF5eIEhFQUReXl4gTk8tU1VDSC1DT01NSVQgJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3QgIiRiZWZvcmUiID0gIiRhZnRlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJlYWRzIGZyb20gLS1zdGRpbicgJworCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9jb21taXRzICRiZWZvcmUiICYmCisKKwkjIFdlIGhhdmUgb25seSB0d28gLS0gYWRkIGFub3RoZXIgYW5kIG1ha2Ugc3VyZSBpdCBzdGF5cworCWdpdCBub3RlcyBhZGQgLW0gImV4dHJhIiAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFmdGVyLXJlbW92YWwtZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXl4gSEVBRF5eXiA+aW5wdXQgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIC0tc3RkaW4gPGlucHV0ICYmCisJZ2l0IG5vdGVzIGxpc3QgfCBzZWQgLWUgInMvIC4qLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhZnRlci1yZW1vdmFsLWV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIC0tc3RkaW4gaXMgYWxzbyBhdG9taWMnICcKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvY29tbWl0cyAkYmVmb3JlIiAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF5eIEhFQUReXl4gSEVBRF4gPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHJlbW92ZSAtLXN0ZGluIDxpbnB1dCAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdCAiJGJlZm9yZSIgPSAiJGFmdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyB3aXRoIC0tc3RkaW4gLS1pZ25vcmUtbWlzc2luZycgJworCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9jb21taXRzICRiZWZvcmUiICYmCisKKwkjIFdlIGhhdmUgb25seSB0d28gLS0gYWRkIGFub3RoZXIgYW5kIG1ha2Ugc3VyZSBpdCBzdGF5cworCWdpdCBub3RlcyBhZGQgLW0gImV4dHJhIiAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFmdGVyLXJlbW92YWwtZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXl4gSEVBRF5eXiBIRUFEXiA+aW5wdXQgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIC0taWdub3JlLW1pc3NpbmcgLS1zdGRpbiA8aW5wdXQgJiYKKwlnaXQgbm90ZXMgbGlzdCB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFmdGVyLXJlbW92YWwtZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IG5vdGVzIHdpdGggImdpdCBub3RlcyBsaXN0IicgJworCWdpdCBub3RlcyBsaXN0ID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IG5vdGVzIHdpdGggImdpdCBub3RlcyInICcKKwlnaXQgbm90ZXMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2MxOGRjMDI0ZTE0ZjA4ZDE4ZDE0ZWVhMGQ3NDdmZjY5MmQ2NmQ2YTMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IHNwZWNpZmljIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGxpc3QgPG9iamVjdD4iJyAnCisJZ2l0IG5vdGVzIGxpc3QgSEVBRF5eID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyBub24tZXhpc3Rpbmcgbm90ZXMgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbGlzdCBIRUFEID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitJbml0aWFsIHNldCBvZiBub3RlcworCitNb3JlIG5vdGVzIGFwcGVuZGVkIHdpdGggZ2l0IG5vdGVzIGFwcGVuZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB0byBleGlzdGluZyBub3RlIHdpdGggImdpdCBub3RlcyBhcHBlbmQiJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAiSW5pdGlhbCBzZXQgb2Ygbm90ZXMiICYmCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiTW9yZSBub3RlcyBhcHBlbmRlZCB3aXRoIGdpdCBub3RlcyBhcHBlbmQiICYmCisJZ2l0IG5vdGVzIHNob3cgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdF9saXN0IDw8IEVPRgorYzE4ZGMwMjRlMTRmMDhkMThkMTRlZWEwZDc0N2ZmNjkyZDY2ZDZhMyAxNTg0MjE1ZjFkMjljNjVlOTljNmM2ODQ4NjI2NTUzZmRkMDdmZDc1CitjOWM2YWY3Zjc4YmM0NzQ5MGRiZjNlODIyY2YyZjNjMjRkNGI5MDYxIDI2ODA0OGJmYjhhMWZiMzhlNzAzYmFjZWI4YWIyMzU0MjFiZjgwYzUKKzRiNmFkMjIzNTdjYzhhMTI5NjcyMDU3NGI4ZDJmYmMyMmZhYjA2NzEgYmQxNzUzMjAwMzAzZDBhMDM0NGJlODEzZTUwNDI1M2IzZDk4ZTc0ZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbm90ZXMgbGlzdCIgZG9lcyBub3QgZXhwYW5kIHRvICJnaXQgbm90ZXMgbGlzdCBIRUFEIicgJworCWdpdCBub3RlcyBsaXN0ID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2xpc3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZGluZyBlbXB0eSBzdHJpbmcgZG9lcyBub3QgY2hhbmdlIGV4aXN0aW5nIG5vdGUnICcKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICIiICYmCisJZ2l0IG5vdGVzIHNob3cgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBhcHBlbmQgPT0gYWRkIHdoZW4gdGhlcmUgaXMgbm8gZXhpc3Rpbmcgbm90ZScgJworCWdpdCBub3RlcyByZW1vdmUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBsaXN0IEhFQUQgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICJJbml0aWFsIHNldCBvZiBub3RlcworCitNb3JlIG5vdGVzIGFwcGVuZGVkIHdpdGggZ2l0IG5vdGVzIGFwcGVuZCIgJiYKKwlnaXQgbm90ZXMgc2hvdyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwZW5kaW5nIGVtcHR5IHN0cmluZyB0byBub24tZXhpc3Rpbmcgbm90ZSBkb2VzIG5vdCBjcmVhdGUgbm90ZScgJworCWdpdCBub3RlcyByZW1vdmUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBsaXN0IEhFQUQgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgb3RoZXIgbm90ZSBvbiBhIGRpZmZlcmVudCBub3RlcyByZWYgKHNldHVwKScgJworCTogPiBhNiAmJgorCWdpdCBhZGQgYTYgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDZ0aCAmJgorCUdJVF9OT1RFU19SRUY9InJlZnMvbm90ZXMvb3RoZXIiIGdpdCBub3RlcyBhZGQgLW0gIm90aGVyIG5vdGUiCisnCisKK2NhdCA+IGV4cGVjdC1vdGhlciA8PCBFT0YKK2NvbW1pdCAzODdhODk5MjFjNzNkN2VkNzJjZDk0ZDE3OWMxYzcwNDhjYTQ3NzU2CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKyAgICA2dGgKKworTm90ZXMgKG90aGVyKToKKyAgICBvdGhlciBub3RlCitFT0YKKworY2F0ID4gZXhwZWN0LW5vdC1vdGhlciA8PCBFT0YKK2NvbW1pdCAzODdhODk5MjFjNzNkN2VkNzJjZDk0ZDE3OWMxYzcwNDhjYTQ3NzU2CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKyAgICA2dGgKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEbyBub3Qgc2hvdyBub3RlIG9uIG90aGVyIHJlZiBieSBkZWZhdWx0JyAnCisJZ2l0IGxvZyAtMSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdC1ub3Qtb3RoZXIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RvIHNob3cgbm90ZSB3aGVuIHJlZiBpcyBnaXZlbiBpbiBHSVRfTk9URVNfUkVGJyAnCisJR0lUX05PVEVTX1JFRj0icmVmcy9ub3Rlcy9vdGhlciIgZ2l0IGxvZyAtMSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdC1vdGhlciBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRG8gc2hvdyBub3RlIHdoZW4gcmVmIGlzIGdpdmVuIGluIGNvcmUubm90ZXNSZWYgY29uZmlnJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmICJyZWZzL25vdGVzL290aGVyIiAmJgorCWdpdCBsb2cgLTEgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtb3RoZXIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RvIG5vdCBzaG93IG5vdGUgd2hlbiBjb3JlLm5vdGVzUmVmIGlzIG92ZXJyaWRkZW4nICcKKwlHSVRfTk9URVNfUkVGPSJyZWZzL25vdGVzL3dyb25nIiBnaXQgbG9nIC0xID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0LW5vdC1vdGhlciBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0LWJvdGggPDwgRU9GCitjb21taXQgMzg3YTg5OTIxYzczZDdlZDcyY2Q5NGQxNzljMWM3MDQ4Y2E0Nzc1NgorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTg6MTMgMjAwNSAtMDcwMAorCisgICAgNnRoCisKK05vdGVzOgorICAgIG9yZGVyIHRlc3QKKworTm90ZXMgKG90aGVyKToKKyAgICBvdGhlciBub3RlCisKK2NvbW1pdCBiZDE3NTMyMDAzMDNkMGEwMzQ0YmU4MTNlNTA0MjUzYjNkOThlNzRkCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwCisKKyAgICA1dGgKKworTm90ZXM6CisgICAgcmVwbGFjZW1lbnQgZm9yIGRlbGV0ZWQgbm90ZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Nob3cgYWxsIG5vdGVzIHdoZW4gbm90ZXMuZGlzcGxheVJlZj1yZWZzL25vdGVzLyonICcKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvY29tbWl0cyBnaXQgbm90ZXMgYWRkIFwKKwkJLW0icmVwbGFjZW1lbnQgZm9yIGRlbGV0ZWQgbm90ZSIgSEVBRF4gJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvY29tbWl0cyBnaXQgbm90ZXMgYWRkIC1tIm9yZGVyIHRlc3QiICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUubm90ZXNSZWYgJiYKKwlnaXQgY29uZmlnIG5vdGVzLmRpc3BsYXlSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlnaXQgbG9nIC0yID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUubm90ZXNSZWYgaXMgaW1wbGljaXRseSBpbiBub3Rlcy5kaXNwbGF5UmVmJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvY29tbWl0cyAmJgorCWdpdCBjb25maWcgbm90ZXMuZGlzcGxheVJlZiByZWZzL25vdGVzL290aGVyICYmCisJZ2l0IGxvZyAtMiA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdC1ib3RoIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3Rlcy5kaXNwbGF5UmVmIGNhbiBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZScgJworCWdpdCBjb25maWcgLS11bnNldCBjb3JlLm5vdGVzUmVmICYmCisJZ2l0IGNvbmZpZyBub3Rlcy5kaXNwbGF5UmVmIHJlZnMvbm90ZXMvY29tbWl0cyAmJgorCWdpdCBjb25maWcgLS1hZGQgbm90ZXMuZGlzcGxheVJlZiByZWZzL25vdGVzL290aGVyICYmCisJZ2l0IGxvZyAtMiA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdC1ib3RoIG91dHB1dAorJworCitjYXQgPiBleHBlY3QtYm90aC1yZXZlcnNlZCA8PCBFT0YKK2NvbW1pdCAzODdhODk5MjFjNzNkN2VkNzJjZDk0ZDE3OWMxYzcwNDhjYTQ3NzU2CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKyAgICA2dGgKKworTm90ZXMgKG90aGVyKToKKyAgICBvdGhlciBub3RlCisKK05vdGVzOgorICAgIG9yZGVyIHRlc3QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3Rlcy5kaXNwbGF5UmVmIHJlc3BlY3RzIG9yZGVyJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvb3RoZXIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG5vdGVzLmRpc3BsYXlSZWYgJiYKKwlnaXQgY29uZmlnIG5vdGVzLmRpc3BsYXlSZWYgcmVmcy9ub3Rlcy9jb21taXRzICYmCisJZ2l0IGxvZyAtMSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdC1ib3RoLXJldmVyc2VkIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfTk9URVNfRElTUExBWV9SRUYgd29ya3MnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGNvcmUubm90ZXNSZWYgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG5vdGVzLmRpc3BsYXlSZWYgJiYKKwlHSVRfTk9URVNfRElTUExBWV9SRUY9cmVmcy9ub3Rlcy9jb21taXRzOnJlZnMvbm90ZXMvb3RoZXIgXAorCQlnaXQgbG9nIC0yID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdC1ub25lIDw8IEVPRgorY29tbWl0IDM4N2E4OTkyMWM3M2Q3ZWQ3MmNkOTRkMTc5YzFjNzA0OGNhNDc3NTYKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE4OjEzIDIwMDUgLTA3MDAKKworICAgIDZ0aAorCitjb21taXQgYmQxNzUzMjAwMzAzZDBhMDM0NGJlODEzZTUwNDI1M2IzZDk4ZTc0ZAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTc6MTMgMjAwNSAtMDcwMAorCisgICAgNXRoCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX05PVEVTX0RJU1BMQVlfUkVGIG92ZXJyaWRlcyBjb25maWcnICcKKwlnaXQgY29uZmlnIG5vdGVzLmRpc3BsYXlSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlHSVRfTk9URVNfUkVGPSBHSVRfTk9URVNfRElTUExBWV9SRUY9IGdpdCBsb2cgLTIgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtbm9uZSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LW5vdGVzPSogYWRkcyB0byBHSVRfTk9URVNfRElTUExBWV9SRUYnICcKKwlHSVRfTk9URVNfUkVGPSBHSVRfTk9URVNfRElTUExBWV9SRUY9IGdpdCBsb2cgLS1zaG93LW5vdGVzPSogLTIgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QtYm90aCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0LWNvbW1pdHMgPDwgRU9GCitjb21taXQgMzg3YTg5OTIxYzczZDdlZDcyY2Q5NGQxNzljMWM3MDQ4Y2E0Nzc1NgorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTg6MTMgMjAwNSAtMDcwMAorCisgICAgNnRoCisKK05vdGVzOgorICAgIG9yZGVyIHRlc3QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXN0YW5kYXJkLW5vdGVzJyAnCisJZ2l0IGxvZyAtLW5vLXN0YW5kYXJkLW5vdGVzIC0tc2hvdy1ub3Rlcz1jb21taXRzIC0xID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0LWNvbW1pdHMgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RhbmRhcmQtbm90ZXMnICcKKwlnaXQgbG9nIC0tbm8tc3RhbmRhcmQtbm90ZXMgLS1zaG93LW5vdGVzPWNvbW1pdHMgXAorCQktLXN0YW5kYXJkLW5vdGVzIC0yID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1ub3Rlcz1yZWYgYWNjdW11bGF0ZXMnICcKKwlnaXQgbG9nIC0tc2hvdy1ub3Rlcz1vdGhlciAtLXNob3ctbm90ZXM9Y29tbWl0cyBcCisJCSAtLW5vLXN0YW5kYXJkLW5vdGVzIC0xID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGgtcmV2ZXJzZWQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0FsbG93IG5vdGVzIG9uIG5vbi1jb21taXRzICh0cmVlcywgYmxvYnMsIHRhZ3MpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvb3RoZXIgJiYKKwllY2hvICJOb3RlIG9uIGEgdHJlZSIgPiBleHBlY3QgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlIG9uIGEgdHJlZSIgSEVBRDogJiYKKwlnaXQgbm90ZXMgc2hvdyBIRUFEOiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICJOb3RlIG9uIGEgYmxvYiIgPiBleHBlY3QgJiYKKwlmaWxlbmFtZT0kKGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IEhFQUQgfCBoZWFkIC1uMSkgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlIG9uIGEgYmxvYiIgSEVBRDokZmlsZW5hbWUgJiYKKwlnaXQgbm90ZXMgc2hvdyBIRUFEOiRmaWxlbmFtZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICJOb3RlIG9uIGEgdGFnIiA+IGV4cGVjdCAmJgorCWdpdCB0YWcgLWEgLW0gIlRoaXMgaXMgYW4gYW5ub3RhdGVkIHRhZyIgZm9vYmFyIEhFQUReICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZSBvbiBhIHRhZyIgZm9vYmFyICYmCisJZ2l0IG5vdGVzIHNob3cgZm9vYmFyID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitjb21taXQgMmVkZTg5NDY4MTgyYTYyZDBiZGUyNTgzYzczNjA4OWJjZjdkN2U5MgorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTk6MTMgMjAwNSAtMDcwMAorCisgICAgN3RoCisKK05vdGVzIChvdGhlcik6CisgICAgb3RoZXIgbm90ZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYWRkIC1DIicgJworCTogPiBhNyAmJgorCWdpdCBhZGQgYTcgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDd0aCAmJgorCWdpdCBub3RlcyBhZGQgLUMgJChnaXQgbm90ZXMgbGlzdCBIRUFEXikgJiYKKwlnaXQgbG9nIC0xID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRCkiID0gIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG5vbi1leGlzdGluZyBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLUMiIGZhaWxzJyAnCisJOiA+IGE4ICYmCisJZ2l0IGFkZCBhOCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gOHRoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGFkZCAtQyBkZWFkYmVlZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBsaXN0IEhFQUQKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorY29tbWl0IDAxNmU5ODJiYWQ5N2VhY2RiZGEwZmNiZDdjZTViMGJhODdjODFmMWIKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjIxOjEzIDIwMDUgLTA3MDAKKworICAgIDl0aAorCitOb3RlcyAob3RoZXIpOgorICAgIHlldCBhbm90aGVyIG5vdGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG90aGVyIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGFkZCAtYyInICcKKwk6ID4gYTkgJiYKKwlnaXQgYWRkIGE5ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSA5dGggJiYKKwlNU0c9InlldCBhbm90aGVyIG5vdGUiIGdpdCBub3RlcyBhZGQgLWMgJChnaXQgbm90ZXMgbGlzdCBIRUFEXl4pICYmCisJZ2l0IGxvZyAtMSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGUgZnJvbSBub24tZXhpc3Rpbmcgbm90ZSB3aXRoICJnaXQgbm90ZXMgYWRkIC1jIiBmYWlscycgJworCTogPiBhMTAgJiYKKwlnaXQgYWRkIGExMCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gMTB0aCAmJgorCSgKKwkJTVNHPSJ5ZXQgYW5vdGhlciBub3RlIiAmJgorCQlleHBvcnQgTVNHICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBhZGQgLWMgZGVhZGJlZWYKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitjb21taXQgMDE2ZTk4MmJhZDk3ZWFjZGJkYTBmY2JkN2NlNWIwYmE4N2M4MWYxYgorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MjE6MTMgMjAwNSAtMDcwMAorCisgICAgOXRoCisKK05vdGVzIChvdGhlcik6CisgICAgeWV0IGFub3RoZXIgbm90ZQorJHdoaXRlc3BhY2UKKyAgICB5ZXQgYW5vdGhlciBub3RlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwZW5kIHRvIG5vdGUgZnJvbSBvdGhlciBub3RlIHdpdGggImdpdCBub3RlcyBhcHBlbmQgLUMiJyAnCisJZ2l0IG5vdGVzIGFwcGVuZCAtQyAkKGdpdCBub3RlcyBsaXN0IEhFQUReKSBIRUFEXiAmJgorCWdpdCBsb2cgLTEgSEVBRF4gPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2NvbW1pdCBmZmVkNjAzMjM2YmZhMzg5MWM0OTY0NDI1N2E4MzU5OGFmZThhZTVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToyMjoxMyAyMDA1IC0wNzAwCisKKyAgICAxMHRoCisKK05vdGVzIChvdGhlcik6CisgICAgb3RoZXIgbm90ZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYXBwZW5kIC1jIicgJworCU1TRz0ib3RoZXIgbm90ZSIgZ2l0IG5vdGVzIGFwcGVuZCAtYyAkKGdpdCBub3RlcyBsaXN0IEhFQUReKSAmJgorCWdpdCBsb2cgLTEgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2NvbW1pdCBmZmVkNjAzMjM2YmZhMzg5MWM0OTY0NDI1N2E4MzU5OGFmZThhZTVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToyMjoxMyAyMDA1IC0wNzAwCisKKyAgICAxMHRoCisKK05vdGVzIChvdGhlcik6CisgICAgb3RoZXIgbm90ZQorJHdoaXRlc3BhY2UKKyAgICB5ZXQgYW5vdGhlciBub3RlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwZW5kIHRvIG5vdGUgZnJvbSBvdGhlciBub3RlIHdpdGggImdpdCBub3RlcyBhcHBlbmQgLWMiJyAnCisJTVNHPSJ5ZXQgYW5vdGhlciBub3RlIiBnaXQgbm90ZXMgYXBwZW5kIC1jICQoZ2l0IG5vdGVzIGxpc3QgSEVBRCkgJiYKKwlnaXQgbG9nIC0xID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitjb21taXQgNjM1MmM1ZTMzZGJjYWI3MjVmZTA1NzliZTE2YWEyYmE4ZWIzNjliZQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MjM6MTMgMjAwNSAtMDcwMAorCisgICAgMTF0aAorCitOb3RlcyAob3RoZXIpOgorICAgIG90aGVyIG5vdGUKKyR3aGl0ZXNwYWNlCisgICAgeWV0IGFub3RoZXIgbm90ZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgbm90ZSB3aXRoICJnaXQgbm90ZXMgY29weSInICcKKwk6ID4gYTExICYmCisJZ2l0IGFkZCBhMTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDExdGggJiYKKwlnaXQgbm90ZXMgY29weSBIRUFEXiBIRUFEICYmCisJZ2l0IGxvZyAtMSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUQpIiA9ICIkKGdpdCBub3RlcyBsaXN0IEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldmVudCBvdmVyd3JpdGUgd2l0aCAiZ2l0IG5vdGVzIGNvcHkiJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgSEVBRH4yIEhFQUQgJiYKKwlnaXQgbG9nIC0xID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRCkiID0gIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pIgorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitjb21taXQgNjM1MmM1ZTMzZGJjYWI3MjVmZTA1NzliZTE2YWEyYmE4ZWIzNjliZQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MjM6MTMgMjAwNSAtMDcwMAorCisgICAgMTF0aAorCitOb3RlcyAob3RoZXIpOgorICAgIHlldCBhbm90aGVyIG5vdGUKKyR3aGl0ZXNwYWNlCisgICAgeWV0IGFub3RoZXIgbm90ZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IG92ZXJ3cml0ZSB3aXRoICJnaXQgbm90ZXMgY29weSAtZiInICcKKwlnaXQgbm90ZXMgY29weSAtZiBIRUFEfjIgSEVBRCAmJgorCWdpdCBsb2cgLTEgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdCAiJChnaXQgbm90ZXMgbGlzdCBIRUFEKSIgPSAiJChnaXQgbm90ZXMgbGlzdCBIRUFEfjIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgY29weSBub3RlIGZyb20gb2JqZWN0IHdpdGhvdXQgbm90ZXMnICcKKwk6ID4gYTEyICYmCisJZ2l0IGFkZCBhMTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDEydGggJiYKKwk6ID4gYTEzICYmCisJZ2l0IGFkZCBhMTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDEzdGggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgY29weSBIRUFEXiBIRUFECisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2NvbW1pdCBlNWQ0ZmI1Njk4ZDU2NGFiOGM3MzU1MTUzOGVjYWYyYjBjNjY2MTg1CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToyNToxMyAyMDA1IC0wNzAwCisKKyAgICAxM3RoCisKK05vdGVzIChvdGhlcik6CisgICAgeWV0IGFub3RoZXIgbm90ZQorJHdoaXRlc3BhY2UKKyAgICB5ZXQgYW5vdGhlciBub3RlCisKK2NvbW1pdCA3MDM4Nzg3ZGZlMjJhMTRjMzg2N2NlODE2ZGJiYTM5ODQ1MzU5NzE5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToyNDoxMyAyMDA1IC0wNzAwCisKKyAgICAxMnRoCisKK05vdGVzIChvdGhlcik6CisgICAgb3RoZXIgbm90ZQorJHdoaXRlc3BhY2UKKyAgICB5ZXQgYW5vdGhlciBub3RlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbicgJworCShlY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXik7IFwKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICQoZ2l0IHJldi1wYXJzZSBIRUFEKSkgfAorCWdpdCBub3RlcyBjb3B5IC0tc3RkaW4gJiYKKwlnaXQgbG9nIC0yID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgorCXRlc3QgIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRCkiID0gIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRH4yKSIgJiYKKwl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUReKSIgPSAiJChnaXQgbm90ZXMgbGlzdCBIRUFEfjMpIgorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitjb21taXQgMzdhMGQ0Y2JhMzhhZmVmOTZiYTU0YTNlYTU2N2U2ZGFjNTc1NzAwYgorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6Mjc6MTMgMjAwNSAtMDcwMAorCisgICAgMTV0aAorCitjb21taXQgYmUyOGQ4YjRkOTk1MWFkOTQwZDIyOWVlM2IwYjllZTNiMWVjMjczZAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MjY6MTMgMjAwNSAtMDcwMAorCisgICAgMTR0aAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKHVuY29uZmlndXJlZCknICcKKwl0ZXN0X2NvbW1pdCAxNHRoICYmCisJdGVzdF9jb21taXQgMTV0aCAmJgorCShlY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXik7IFwKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICQoZ2l0IHJldi1wYXJzZSBIRUFEKSkgfAorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vICYmCisJZ2l0IGxvZyAtMiA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorY29tbWl0IDM3YTBkNGNiYTM4YWZlZjk2YmE1NGEzZWE1NjdlNmRhYzU3NTcwMGIKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjI3OjEzIDIwMDUgLTA3MDAKKworICAgIDE1dGgKKworTm90ZXMgKG90aGVyKToKKyAgICB5ZXQgYW5vdGhlciBub3RlCiskd2hpdGVzcGFjZQorICAgIHlldCBhbm90aGVyIG5vdGUKKworY29tbWl0IGJlMjhkOGI0ZDk5NTFhZDk0MGQyMjllZTNiMGI5ZWUzYjFlYzI3M2QKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjI2OjEzIDIwMDUgLTA3MDAKKworICAgIDE0dGgKKworTm90ZXMgKG90aGVyKToKKyAgICBvdGhlciBub3RlCiskd2hpdGVzcGFjZQorICAgIHlldCBhbm90aGVyIG5vdGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChlbmFibGVkKScgJworCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZU1vZGUgb3ZlcndyaXRlICYmCisJZ2l0IGNvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJKGVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJChnaXQgcmV2LXBhcnNlIEhFQUReKTsgXAorCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJChnaXQgcmV2LXBhcnNlIEhFQUQpKSB8CisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlnaXQgbG9nIC0yID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChkaXNhYmxlZCknICcKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGUuYmFyIGZhbHNlICYmCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgfAorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9YmFyICYmCisJZ2l0IGxvZyAtMiA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorY29tbWl0IDM3YTBkNGNiYTM4YWZlZjk2YmE1NGEzZWE1NjdlNmRhYzU3NTcwMGIKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjI3OjEzIDIwMDUgLTA3MDAKKworICAgIDE1dGgKKworTm90ZXMgKG90aGVyKToKKyAgICBhIGZyZXNoIG5vdGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChvdmVyd3JpdGUpJyAnCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSJhIGZyZXNoIG5vdGUiIEhFQUReICYmCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlnaXQgbG9nIC0xID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChpZ25vcmUpJyAnCisJZ2l0IGNvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBpZ25vcmUgJiYKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWdpdCBsb2cgLTEgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2NvbW1pdCAzN2EwZDRjYmEzOGFmZWY5NmJhNTRhM2VhNTY3ZTZkYWM1NzU3MDBiCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToyNzoxMyAyMDA1IC0wNzAwCisKKyAgICAxNXRoCisKK05vdGVzIChvdGhlcik6CisgICAgYSBmcmVzaCBub3RlCiskd2hpdGVzcGFjZQorICAgIGFub3RoZXIgZnJlc2ggbm90ZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKGFwcGVuZCknICcKKwlnaXQgbm90ZXMgYWRkIC1mIC1tImFub3RoZXIgZnJlc2ggbm90ZSIgSEVBRF4gJiYKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGNvbmNhdGVuYXRlICYmCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlnaXQgbG9nIC0xID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitjb21taXQgMzdhMGQ0Y2JhMzhhZmVmOTZiYTU0YTNlYTU2N2U2ZGFjNTc1NzAwYgorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6Mjc6MTMgMjAwNSAtMDcwMAorCisgICAgMTV0aAorCitOb3RlcyAob3RoZXIpOgorICAgIGEgZnJlc2ggbm90ZQorJHdoaXRlc3BhY2UKKyAgICBhbm90aGVyIGZyZXNoIG5vdGUKKyR3aGl0ZXNwYWNlCisgICAgYXBwZW5kIDEKKyR3aGl0ZXNwYWNlCisgICAgYXBwZW5kIDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChhcHBlbmQgdHdvIHRvIG9uZSknICcKKwlnaXQgbm90ZXMgYWRkIC1mIC1tImFwcGVuZCAxIiBIRUFEXiAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0iYXBwZW5kIDIiIEhFQUReXiAmJgorCShlY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpOworCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUReXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpKSB8CisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlnaXQgbG9nIC0xID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChhcHBlbmQgZW1wdHkpJyAnCisJZ2l0IG5vdGVzIHJlbW92ZSBIRUFEXiAmJgorCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgfAorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vICYmCisJZ2l0IGxvZyAtMSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorY29tbWl0IDM3YTBkNGNiYTM4YWZlZjk2YmE1NGEzZWE1NjdlNmRhYzU3NTcwMGIKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjI3OjEzIDIwMDUgLTA3MDAKKworICAgIDE1dGgKKworTm90ZXMgKG90aGVyKToKKyAgICByZXBsYWNlbWVudCBub3RlIDEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfTk9URVNfUkVXUklURV9NT0RFIHdvcmtzJyAnCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSJyZXBsYWNlbWVudCBub3RlIDEiIEhFQUReICYmCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJR0lUX05PVEVTX1JFV1JJVEVfTU9ERT1vdmVyd3JpdGUgZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlnaXQgbG9nIC0xID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitjb21taXQgMzdhMGQ0Y2JhMzhhZmVmOTZiYTU0YTNlYTU2N2U2ZGFjNTc1NzAwYgorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6Mjc6MTMgMjAwNSAtMDcwMAorCisgICAgMTV0aAorCitOb3RlcyAob3RoZXIpOgorICAgIHJlcGxhY2VtZW50IG5vdGUgMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9OT1RFU19SRVdSSVRFX1JFRiB3b3JrcycgJworCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZU1vZGUgb3ZlcndyaXRlICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSJyZXBsYWNlbWVudCBub3RlIDIiIEhFQUReICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBub3Rlcy5yZXdyaXRlUmVmICYmCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJR0lUX05PVEVTX1JFV1JJVEVfUkVGPXJlZnMvbm90ZXMvY29tbWl0czpyZWZzL25vdGVzL290aGVyIFwKKwkJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlnaXQgbG9nIC0xID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfTk9URVNfUkVXUklURV9SRUYgb3ZlcnJpZGVzIGNvbmZpZycgJworCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZVJlZiByZWZzL25vdGVzL290aGVyICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSJyZXBsYWNlbWVudCBub3RlIDMiIEhFQUReICYmCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJR0lUX05PVEVTX1JFV1JJVEVfUkVGPSBnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWdpdCBsb2cgLTEgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IGRpYWdub3NlcyB0b28gbWFueSBvciB0b28gZmV3IHBhcmFtZXRlcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgY29weSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBjb3B5IG9uZSB0d28gdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgKG5vIG92ZXJyaWRlcyknICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5ub3Rlc1JlZiAmJgorCXNhbmVfdW5zZXQgR0lUX05PVEVTX1JFRiAmJgorCXRlc3QgIiQoZ2l0IG5vdGVzIGdldC1yZWYpIiA9ICJyZWZzL25vdGVzL2NvbW1pdHMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBnZXQtcmVmIChjb3JlLm5vdGVzUmVmKScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2ZvbyAmJgorCXRlc3QgIiQoZ2l0IG5vdGVzIGdldC1yZWYpIiA9ICJyZWZzL25vdGVzL2ZvbyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgKEdJVF9OT1RFU19SRUYpJyAnCisJdGVzdCAiJChHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvYmFyIGdpdCBub3RlcyBnZXQtcmVmKSIgPSAicmVmcy9ub3Rlcy9iYXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBnZXQtcmVmICgtLXJlZiknICcKKwl0ZXN0ICIkKEdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9iYXIgZ2l0IG5vdGVzIC0tcmVmPWJheiBnZXQtcmVmKSIgPSAicmVmcy9ub3Rlcy9iYXoiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwMi1ub3Rlcy1pbmRleC1leHBlbnNpdmUuc2ggYi90L3QzMzAyLW5vdGVzLWluZGV4LWV4cGVuc2l2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzVkNzgxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwMi1ub3Rlcy1pbmRleC1leHBlbnNpdmUuc2gKQEAgLTAsMCArMSwxMjYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNvbW1pdCBub3RlcyBpbmRleCAoZXhwZW5zaXZlISknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3NldF9wcmVyZXEgTk9UX0VYUEVOU0lWRQordGVzdCAtbiAiJEdJVF9OT1RFU19USU1JTkdfVEVTVFMiICYmIHRlc3Rfc2V0X3ByZXJlcSBFWFBFTlNJVkUKK3Rlc3QgLXggL3Vzci9iaW4vdGltZSAmJiB0ZXN0X3NldF9wcmVyZXEgVVNSX0JJTl9USU1FCisKK2NyZWF0ZV9yZXBvICgpIHsKKwludW1iZXJfb2ZfY29tbWl0cz0kMQorCW5yPTAKKwl0ZXN0IC1kIC5naXQgfHwgeworCWdpdCBpbml0ICYmCisJKAorCQl3aGlsZSBbICRuciAtbHQgJG51bWJlcl9vZl9jb21taXRzIF07IGRvCisJCQlucj0kKCgkbnIrMSkpCisJCQltYXJrPSQoKCRuciskbnIpKQorCQkJbm90ZW1hcms9JCgoJG1hcmsrMSkpCisJCQl0ZXN0X3RpY2sgJiYKKwkJCWNhdCA8PElOUFVUX0VORCAmJgorY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCittYXJrIDokbWFyaworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgIyRucgorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlCitkYXRhIDw8RU9GCitmaWxlIGluIGNvbW1pdCAjJG5yCitFT0YKKworYmxvYgorbWFyayA6JG5vdGVtYXJrCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIyRucgorRU9GCisKK0lOUFVUX0VORAorCisJCQllY2hvICJOIDokbm90ZW1hcmsgOiRtYXJrIiA+PiBub3RlX2NvbW1pdAorCQlkb25lICYmCisJCXRlc3RfdGljayAmJgorCQljYXQgPDxJTlBVVF9FTkQgJiYKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMKK0NPTU1JVAorCitJTlBVVF9FTkQKKworCQljYXQgbm90ZV9jb21taXQKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2NvbW1pdHMKKwl9Cit9CisKK3Rlc3Rfbm90ZXMgKCkgeworCWNvdW50PSQxICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvY29tbWl0cyAmJgorCWdpdCBsb2cgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPSRjb3VudCAmJgorCXdoaWxlIFsgJGkgLWd0IDAgXTsgZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQlpPSQoKCRpLTEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCitjYXQgPiB0aW1lX25vdGVzIDw8IFxFT0YKKwltb2RlPSQxCisJaT0xCisJd2hpbGUgWyAkaSAtbHQgJDIgXTsgZG8KKwkJY2FzZSAkMSBpbgorCQluby1ub3RlcykKKwkJCUdJVF9OT1RFU19SRUY9bm9uLWV4aXN0aW5nOyBleHBvcnQgR0lUX05PVEVTX1JFRgorCQk7OworCQlub3RlcykKKwkJCXVuc2V0IEdJVF9OT1RFU19SRUYKKwkJOzsKKwkJZXNhYworCQlnaXQgbG9nID4vZGV2L251bGwKKwkJaT0kKCgkaSsxKSkKKwlkb25lCitFT0YKKwordGltZV9ub3RlcyAoKSB7CisJZm9yIG1vZGUgaW4gbm8tbm90ZXMgbm90ZXMKKwlkbworCQllY2hvICRtb2RlCisJCS91c3IvYmluL3RpbWUgIiRTSEVMTF9QQVRIIiAuLi90aW1lX25vdGVzICRtb2RlICQxCisJZG9uZQorfQorCitkb190ZXN0cyAoKSB7CisJcHI9JDEKKwljb3VudD0kMgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHIgJ3NldHVwIC8gbWtkaXInICcKKwkJbWtkaXIgJGNvdW50ICYmCisJCWNkICRjb3VudAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByICJzZXR1cCAkY291bnQiICJjcmVhdGVfcmVwbyAkY291bnQiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAnbm90ZXMgd29yaycgInRlc3Rfbm90ZXMgJGNvdW50IgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVU1JfQklOX1RJTUUsJHByICdub3RlcyB0aW1pbmcgd2l0aCAvdXNyL2Jpbi90aW1lJyAidGltZV9ub3RlcyAxMDAiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAndGVhcmRvd24gLyBjZCAuLicgJ2NkIC4uJworfQorCitkb190ZXN0cyBOT1RfRVhQRU5TSVZFIDEwCitmb3IgY291bnQgaW4gMTAwIDEwMDAgMTAwMDA7IGRvCisJZG9fdGVzdHMgRVhQRU5TSVZFICRjb3VudAorZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDMtbm90ZXMtc3VidHJlZXMuc2ggYi90L3QzMzAzLW5vdGVzLXN1YnRyZWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcwNGFlZTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzAzLW5vdGVzLXN1YnRyZWVzLnNoCkBAIC0wLDAgKzEsMTk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjb21taXQgbm90ZXMgb3JnYW5pemVkIGluIHN1YnRyZWVzJworCisuIC4vdGVzdC1saWIuc2gKKworbnVtYmVyX29mX2NvbW1pdHM9MTAwCisKK3N0YXJ0X25vdGVfY29tbWl0ICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvY29tbWl0c14wCitkZWxldGVhbGwKK0lOUFVUX0VORAorCit9CisKK3ZlcmlmeV9ub3RlcyAoKSB7CisJZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IG91dHB1dCAmJgorCWk9JG51bWJlcl9vZl9jb21taXRzICYmCisJd2hpbGUgWyAkaSAtZ3QgMCBdOyBkbworCQllY2hvICIgICAgY29tbWl0ICMkaSIgJiYKKwkJZWNobyAiICAgIG5vdGUgZm9yIGNvbW1pdCAjJGkiICYmCisJCWk9JCgoJGktMSkpOworCWRvbmUgPiBleHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwOiBjcmVhdGUgJG51bWJlcl9vZl9jb21taXRzIGNvbW1pdHMiICcKKworCSgKKwkJbnI9MCAmJgorCQl3aGlsZSBbICRuciAtbHQgJG51bWJlcl9vZl9jb21taXRzIF07IGRvCisJCQlucj0kKCgkbnIrMSkpICYmCisJCQl0ZXN0X3RpY2sgJiYKKwkJCWNhdCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdCAjJG5yCitDT01NSVQKKworTSA2NDQgaW5saW5lIGZpbGUKK2RhdGEgPDxFT0YKK2ZpbGUgaW4gY29tbWl0ICMkbnIKK0VPRgorCitJTlBVVF9FTkQKKworCQlkb25lICYmCisJCXRlc3RfdGljayAmJgorCQljYXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm8gbm90ZXMKK0NPTU1JVAorCitkZWxldGVhbGwKKworSU5QVVRfRU5ECisKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2NvbW1pdHMKKycKKwordGVzdF9zaGExX2Jhc2VkICgpIHsKKwkoCisJCXN0YXJ0X25vdGVfY29tbWl0ICYmCisJCW5yPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCQlnaXQgcmV2LWxpc3QgcmVmcy9oZWFkcy9tYXN0ZXIgfAorCQl3aGlsZSByZWFkIHNoYTE7IGRvCisJCQlub3RlX3BhdGg9JChlY2hvICIkc2hhMSIgfCBzZWQgIiQxIikKKwkJCWNhdCA8PElOUFVUX0VORCAmJgorTSAxMDA2NDQgaW5saW5lICRub3RlX3BhdGgKK2RhdGEgPDxFT0YKK25vdGUgZm9yIGNvbW1pdCAjJG5yCitFT0YKKworSU5QVVRfRU5ECisKKwkJCW5yPSQoKCRuci0xKSkKKwkJZG9uZQorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLXF1aWV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gMi8zOC1mYW5vdXQnICd0ZXN0X3NoYTFfYmFzZWQgInN8Xi4ufCYvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gMi8zOC1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gMi8yLzM2LWZhbm91dCcgJ3Rlc3Rfc2hhMV9iYXNlZCAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIDIvMi8zNi1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gMi8yLzIvMzQtZmFub3V0JyAndGVzdF9zaGExX2Jhc2VkICJzfF5cKC4uXClcKC4uXClcKC4uXCl8XDEvXDIvXDMvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gMi8yLzIvMzQtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X3NhbWVfbm90ZXMgKCkgeworCSgKKwkJc3RhcnRfbm90ZV9jb21taXQgJiYKKwkJbnI9JG51bWJlcl9vZl9jb21taXRzICYmCisJCWdpdCByZXYtbGlzdCByZWZzL2hlYWRzL21hc3RlciB8CisJCXdoaWxlIHJlYWQgc2hhMTsgZG8KKwkJCWZpcnN0X25vdGVfcGF0aD0kKGVjaG8gIiRzaGExIiB8IHNlZCAiJDEiKQorCQkJc2Vjb25kX25vdGVfcGF0aD0kKGVjaG8gIiRzaGExIiB8IHNlZCAiJDIiKQorCQkJY2F0IDw8SU5QVVRfRU5EICYmCitNIDEwMDY0NCBpbmxpbmUgJHNlY29uZF9ub3RlX3BhdGgKK2RhdGEgPDxFT0YKK25vdGUgZm9yIGNvbW1pdCAjJG5yCitFT0YKKworTSAxMDA2NDQgaW5saW5lICRmaXJzdF9ub3RlX3BhdGgKK2RhdGEgPDxFT0YKK25vdGUgZm9yIGNvbW1pdCAjJG5yCitFT0YKKworSU5QVVRfRU5ECisKKwkJCW5yPSQoKCRuci0xKSkKKwkJZG9uZQorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLXF1aWV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc2FtZSBub3RlcyBpbiBubyBmYW5vdXQgYW5kIDIvMzgtZmFub3V0JyAndGVzdF9zYW1lX25vdGVzICJzfF4uLnwmL3wiICIiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNhbWUgbm90ZXMgaW4gbm8gZmFub3V0IGFuZCAyLzM4LWZhbm91dCcgJ3ZlcmlmeV9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzYW1lIG5vdGVzIGluIG5vIGZhbm91dCBhbmQgMi8yLzM2LWZhbm91dCcgJ3Rlc3Rfc2FtZV9ub3RlcyAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiICIiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNhbWUgbm90ZXMgaW4gbm8gZmFub3V0IGFuZCAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNhbWUgbm90ZXMgaW4gMi8zOC1mYW5vdXQgYW5kIDIvMi8zNi1mYW5vdXQnICd0ZXN0X3NhbWVfbm90ZXMgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IiAic3xeLi58Ji98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzYW1lIG5vdGVzIGluIDIvMzgtZmFub3V0IGFuZCAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNhbWUgbm90ZXMgaW4gMi8yLzIvMzQtZmFub3V0IGFuZCAyLzIvMzYtZmFub3V0JyAndGVzdF9zYW1lX25vdGVzICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCIgInN8XlwoLi5cKVwoLi5cKVwoLi5cKXxcMS9cMi9cMy98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzYW1lIG5vdGVzIGluIDIvMi8yLzM0LWZhbm91dCBhbmQgMi8yLzM2LWZhbm91dCcgJ3ZlcmlmeV9ub3RlcycKKwordGVzdF9jb25jYXRlbmF0ZWRfbm90ZXMgKCkgeworCSgKKwkJc3RhcnRfbm90ZV9jb21taXQgJiYKKwkJbnI9JG51bWJlcl9vZl9jb21taXRzICYmCisJCWdpdCByZXYtbGlzdCByZWZzL2hlYWRzL21hc3RlciB8CisJCXdoaWxlIHJlYWQgc2hhMTsgZG8KKwkJCWZpcnN0X25vdGVfcGF0aD0kKGVjaG8gIiRzaGExIiB8IHNlZCAiJDEiKQorCQkJc2Vjb25kX25vdGVfcGF0aD0kKGVjaG8gIiRzaGExIiB8IHNlZCAiJDIiKQorCQkJY2F0IDw8SU5QVVRfRU5EICYmCitNIDEwMDY0NCBpbmxpbmUgJHNlY29uZF9ub3RlX3BhdGgKK2RhdGEgPDxFT0YKK3NlY29uZCBub3RlIGZvciBjb21taXQgIyRucgorRU9GCisKK00gMTAwNjQ0IGlubGluZSAkZmlyc3Rfbm90ZV9wYXRoCitkYXRhIDw8RU9GCitmaXJzdCBub3RlIGZvciBjb21taXQgIyRucgorRU9GCisKK0lOUFVUX0VORAorCisJCQlucj0kKCgkbnItMSkpCisJCWRvbmUKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldAorfQorCit2ZXJpZnlfY29uY2F0ZW5hdGVkX25vdGVzICgpIHsKKwlnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gb3V0cHV0ICYmCisJaT0kbnVtYmVyX29mX2NvbW1pdHMgJiYKKwl3aGlsZSBbICRpIC1ndCAwIF07IGRvCisJCWVjaG8gIiAgICBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgZmlyc3Qgbm90ZSBmb3IgY29tbWl0ICMkaSIgJiYKKwkJZWNobyAiICAgICIgJiYKKwkJZWNobyAiICAgIHNlY29uZCBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQlpPSQoKCRpLTEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIG5vIGZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzM4LWZhbm91dCcgJ3Rlc3RfY29uY2F0ZW5hdGVkX25vdGVzICJzfF4uLnwmL3wiICIiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIG5vIGZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzM4LWZhbm91dCcgJ3ZlcmlmeV9jb25jYXRlbmF0ZWRfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gbm8gZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8zNi1mYW5vdXQnICd0ZXN0X2NvbmNhdGVuYXRlZF9ub3RlcyAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiICIiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIG5vIGZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X2NvbmNhdGVuYXRlZF9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBub3RlcyBpbiAyLzM4LWZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzIvMzYtZmFub3V0JyAndGVzdF9jb25jYXRlbmF0ZWRfbm90ZXMgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IiAic3xeLi58Ji98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBub3RlcyBpbiAyLzM4LWZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X2NvbmNhdGVuYXRlZF9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBub3RlcyBpbiAyLzIvMzYtZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8yLzM0LWZhbm91dCcgJ3Rlc3RfY29uY2F0ZW5hdGVkX25vdGVzICJzfF5cKC4uXClcKC4uXClcKC4uXCl8XDEvXDIvXDMvfCIgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBub3RlcyBpbiAyLzIvMzYtZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8yLzM0LWZhbm91dCcgJ3ZlcmlmeV9jb25jYXRlbmF0ZWRfbm90ZXMnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwNC1ub3Rlcy1taXhlZC5zaCBiL3QvdDMzMDQtbm90ZXMtbWl4ZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTcwOWU4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDQtbm90ZXMtbWl4ZWQuc2gKQEAgLTAsMCArMSwyMDYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG5vdGVzIHRyZWVzIHRoYXQgYWxzbyBjb250YWluIG5vbi1ub3RlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK251bWJlcl9vZl9jb21taXRzPTEwMAorCitzdGFydF9ub3RlX2NvbW1pdCAoKSB7CisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzCitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL2NvbW1pdHNeMAorZGVsZXRlYWxsCitJTlBVVF9FTkQKKworfQorCit2ZXJpZnlfbm90ZXMgKCkgeworCWdpdCBsb2cgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCXdoaWxlIFsgJGkgLWd0IDAgXTsgZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQlpPSQoKCRpLTEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cDogY3JlYXRlIGEgY291cGxlIG9mIGNvbW1pdHMiICcKKworCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORCA+aW5wdXQgJiYKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgIzEKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZmlsZQorZGF0YSA8PEVPRgorZmlsZSBpbiBjb21taXQgIzEKK0VPRgorCitJTlBVVF9FTkQKKworCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORCA+PmlucHV0ICYmCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0ICMyCitDT01NSVQKKworTSA2NDQgaW5saW5lIGZpbGUKK2RhdGEgPDxFT0YKK2ZpbGUgaW4gY29tbWl0ICMyCitFT0YKKworSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSBhIG5vdGVzIHRyZWUgd2l0aCBib3RoIG5vdGVzIGFuZCBub24tbm90ZXMiICcKKworCWNvbW1pdDE9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyXikgJiYKKwljb21taXQyPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQgPmlucHV0ICYmCitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzIGNvbW1pdCAjMQorQ09NTUlUCisKK04gaW5saW5lICRjb21taXQxCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIzEKK0VPRgorCitOIGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMyCitFT0YKKworSU5QVVRfRU5ECisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5EID4+aW5wdXQgJiYKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMgY29tbWl0ICMyCitDT01NSVQKKworTSA2NDQgaW5saW5lIGZvb2Jhci9ub24tbm90ZS50eHQKK2RhdGEgPDxFT0YKK0Egbm9uLW5vdGUgaW4gYSBub3RlcyB0cmVlCitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDIKK2RhdGEgPDxFT0YKK2VkaXRlZCBub3RlIGZvciBjb21taXQgIzIKK0VPRgorCitJTlBVVF9FTkQKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQgPj5pbnB1dCAmJgorY29tbWl0IHJlZnMvbm90ZXMvY29tbWl0cworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyBjb21taXQgIzMKK0NPTU1JVAorCitOIGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgorZWRpdGVkIG5vdGUgZm9yIGNvbW1pdCAjMQorRU9GCisKK00gNjQ0IGlubGluZSBkZWFkYmVlZgorZGF0YSA8PEVPRgorbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRU9GCisKK00gNjQ0IGlubGluZSBkZS9hZGJlZWYKK2RhdGEgPDxFT0YKK2Fub3RoZXIgbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRU9GCisKK00gNjQ0IGlubGluZSBkZS9hZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZgorZGF0YSA8PEVPRgorVGhpcyBpcyBhY3R1YWxseSBhIHZhbGlkIG5vdGUsIGFsYmVpdCB0byBhIG5vbi1leGlzdGluZyBvYmplY3QuCitJdCBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gdHJpZ2dlciB0aGUgIm1pc2hhbmRsaW5nIiBvZiB0aGUgZGVhZC9iZWVmIG5vbi1ub3RlLgorRU9GCisKK00gNjQ0IGlubGluZSBkZWFkL2JlZWYKK2RhdGEgPDxFT0YKK3lldCBhbm90aGVyIG5vbi1ub3RlIHdpdGggU0hBMS1saWtlIG5hbWUKK0VPRgorCitJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCA8aW5wdXQgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9jb21taXRzCisnCisKK2NhdCA+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGNvbW1pdCAjMgorICAgIGVkaXRlZCBub3RlIGZvciBjb21taXQgIzIKKyAgICBjb21taXQgIzEKKyAgICBlZGl0ZWQgbm90ZSBmb3IgY29tbWl0ICMxCitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInZlcmlmeSBjb250ZW50cyBvZiBub3RlcyIgJworCisJZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3Rfbm4xIDw8RVhQRUNUX0VORAorQSBub24tbm90ZSBpbiBhIG5vdGVzIHRyZWUKK0VYUEVDVF9FTkQKK2NhdCA+ZXhwZWN0X25uMiA8PEVYUEVDVF9FTkQKK25vbi1ub3RlIHdpdGggU0hBMS1saWtlIG5hbWUKK0VYUEVDVF9FTkQKK2NhdCA+ZXhwZWN0X25uMyA8PEVYUEVDVF9FTkQKK2Fub3RoZXIgbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRVhQRUNUX0VORAorY2F0ID5leHBlY3Rfbm40IDw8RVhQRUNUX0VORAoreWV0IGFub3RoZXIgbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ2ZXJpZnkgY29udGVudHMgb2Ygbm9uLW5vdGVzIiAnCisKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmZvb2Jhci9ub24tbm90ZS50eHQgPiBhY3R1YWxfbm4xICYmCisJdGVzdF9jbXAgZXhwZWN0X25uMSBhY3R1YWxfbm4xICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvY29tbWl0czpkZWFkYmVlZiA+IGFjdHVhbF9ubjIgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4yIGFjdHVhbF9ubjIgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlL2FkYmVlZiA+IGFjdHVhbF9ubjMgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4zIGFjdHVhbF9ubjMgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlYWQvYmVlZiA+IGFjdHVhbF9ubjQgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm40IGFjdHVhbF9ubjQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0LW5vdGVzIHByZXNlcnZlcyBub24tbm90ZXMiICcKKworCXRlc3RfdGljayAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gImZvbyBiYXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInZlcmlmeSBjb250ZW50cyBvZiBub24tbm90ZXMgYWZ0ZXIgZ2l0LW5vdGVzIiAnCisKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmZvb2Jhci9ub24tbm90ZS50eHQgPiBhY3R1YWxfbm4xICYmCisJdGVzdF9jbXAgZXhwZWN0X25uMSBhY3R1YWxfbm4xICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvY29tbWl0czpkZWFkYmVlZiA+IGFjdHVhbF9ubjIgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4yIGFjdHVhbF9ubjIgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlL2FkYmVlZiA+IGFjdHVhbF9ubjMgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4zIGFjdHVhbF9ubjMgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlYWQvYmVlZiA+IGFjdHVhbF9ubjQgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm40IGFjdHVhbF9ubjQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzA1LW5vdGVzLWZhbm91dC5zaCBiL3QvdDMzMDUtbm90ZXMtZmFub3V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxZWE2NGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzA1LW5vdGVzLWZhbm91dC5zaApAQCAtMCwwICsxLDk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGF0IGFkZGluZy9yZW1vdmluZyBtYW55IG5vdGVzIHRyaWdnZXJzIGF1dG9tYXRpYyBmYW5vdXQgcmVzdHJ1Y3R1cmluZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIG1hbnkgbm90ZXMgd2l0aCBnaXQtbm90ZXMnICcKKwludW1fbm90ZXM9MzAwICYmCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgJG51bV9ub3RlcworCWRvCisJCWk9JCgoJGkgKyAxKSkgJiYKKwkJdGVzdF90aWNrICYmCisJCWVjaG8gImZpbGUgZm9yIGNvbW1pdCAjJGkiID4gZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtcSAtbSAiY29tbWl0ICMkaSIgJiYKKwkJZ2l0IG5vdGVzIGFkZCAtbSAibm90ZSAjJGkiIHx8IHJldHVybiAxCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYW55IG5vdGVzIGNyZWF0ZWQgY29ycmVjdGx5IHdpdGggZ2l0LW5vdGVzJyAnCisJZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IG91dHB1dCAmJgorCWk9MzAwICYmCisJd2hpbGUgdGVzdCAkaSAtZ3QgMAorCWRvCisJCWVjaG8gIiAgICBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgbm90ZSAjJGkiICYmCisJCWk9JCgoJGkgLSAxKSk7CisJZG9uZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFueSBub3RlcyBjcmVhdGVkIHdpdGggZ2l0LW5vdGVzIHRyaWdnZXJzIGZhbm91dCcgJworCSMgRXhwZWN0IGVudGlyZSBub3RlcyB0cmVlIHRvIGhhdmUgYSBmYW5vdXQgPT0gMQorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5IHJlZnMvbm90ZXMvY29tbWl0cyB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJY2FzZSAiJHBhdGgiIGluCisJCT8/Lz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/KQorCQkJOiB0cnVlCisJCQk7OworCQkqKQorCQkJZWNobyAiSW52YWxpZCBwYXRoIFwiJHBhdGhcIiIgJiYKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBtb3N0IG5vdGVzIHdpdGggZ2l0LW5vdGVzJyAnCisJbnVtX25vdGVzPTI1MCAmJgorCWk9MCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIHwKKwl3aGlsZSByZWFkIHNoYTEKKwlkbworCQlpPSQoKCRpICsgMSkpICYmCisJCWlmIHRlc3QgJGkgLWd0ICRudW1fbm90ZXMKKwkJdGhlbgorCQkJYnJlYWsKKwkJZmkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBub3RlcyByZW1vdmUgIiRzaGExIgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9zdCBub3RlcyBkZWxldGVkIGNvcnJlY3RseSB3aXRoIGdpdC1ub3RlcycgJworCWdpdCBsb2cgSEVBRH4yNTAgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPTUwICYmCisJd2hpbGUgdGVzdCAkaSAtZ3QgMAorCWRvCisJCWVjaG8gIiAgICBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgbm90ZSAjJGkiICYmCisJCWk9JCgoJGkgLSAxKSk7CisJZG9uZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgbW9zdCBub3RlcyB0cmlnZ2VycyBmYW5vdXQgY29uc29saWRhdGlvbicgJworCSMgRXhwZWN0IGVudGlyZSBub3RlcyB0cmVlIHRvIGhhdmUgYSBmYW5vdXQgPT0gMAorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5IHJlZnMvbm90ZXMvY29tbWl0cyB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJY2FzZSAiJHBhdGgiIGluCisJCT8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8pCisJCQk6IHRydWUKKwkJCTs7CisJCSopCisJCQllY2hvICJJbnZhbGlkIHBhdGggXCIkcGF0aFwiIiAmJgorCQkJcmV0dXJuIDEKKwkJCTs7CisJCWVzYWMKKwlkb25lCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwNi1ub3Rlcy1wcnVuZS5zaCBiL3QvdDMzMDYtbm90ZXMtcHJ1bmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODZiZjkwOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDYtbm90ZXMtcHJ1bmUuc2gKQEAgLTAsMCArMSwxNDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBub3RlcyBwcnVuZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjcmVhdGUgYSBmZXcgY29tbWl0cyB3aXRoIG5vdGVzJyAnCisKKwk6ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAxc3QgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlICMxIiAmJgorCTogPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDJuZCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGUgIzIiICYmCisJOiA+IGZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gM3JkICYmCisJQ09NTUlUX0ZJTEU9LmdpdC9vYmplY3RzLzVlL2UxYzM1ZTgzZWE0N2NkM2NjNGY4Y2JlZTA1Njg5MTVmYmJiZDI5ICYmCisJdGVzdCAtZiAkQ09NTUlUX0ZJTEUgJiYKKwl0ZXN0LWNobXRpbWUgPSswICRDT01NSVRfRklMRSAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGUgIzMiCisnCisKK2NhdCA+IGV4cGVjdCA8PEVORF9PRl9MT0cKK2NvbW1pdCA1ZWUxYzM1ZTgzZWE0N2NkM2NjNGY4Y2JlZTA1Njg5MTVmYmJiZDI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxNToxMyAyMDA1IC0wNzAwCisKKyAgICAzcmQKKworTm90ZXM6CisgICAgTm90ZSAjMworCitjb21taXQgMDgzNDFhZDllOTRmYWEwODlkNjBmZDNmNTIzYWZmYjI1YzZkYTE4OQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMAorCisgICAgMm5kCisKK05vdGVzOgorICAgIE5vdGUgIzIKKworY29tbWl0IGFiNWYzMDIwMzVmMmU3YWFmMDQyNjVmMDhiNDIwMzRjMjMyNTZlMWYKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAKKworICAgIDFzdAorCitOb3RlczoKKyAgICBOb3RlICMxCitFTkRfT0ZfTE9HCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBjb21taXRzIGFuZCBub3RlcycgJworCisJZ2l0IGxvZyA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHNvbWUgY29tbWl0cycgJworCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgSEVBRCAmJgorCWdpdCBnYyAtLXBydW5lPW5vdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBjb21taXRzIGFyZSBnb25lJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLXAgNWVlMWMzNWU4M2VhNDdjZDNjYzRmOGNiZWUwNTY4OTE1ZmJiYmQyOSAmJgorCWdpdCBjYXQtZmlsZSAtcCAwODM0MWFkOWU5NGZhYTA4OWQ2MGZkM2Y1MjNhZmZiMjVjNmRhMTg5ICYmCisJZ2l0IGNhdC1maWxlIC1wIGFiNWYzMDIwMzVmMmU3YWFmMDQyNjVmMDhiNDIwMzRjMjMyNTZlMWYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbm90ZXMgYXJlIHN0aWxsIHByZXNlbnQnICcKKworCWdpdCBub3RlcyBzaG93IDVlZTFjMzVlODNlYTQ3Y2QzY2M0ZjhjYmVlMDU2ODkxNWZiYmJkMjkgJiYKKwlnaXQgbm90ZXMgc2hvdyAwODM0MWFkOWU5NGZhYTA4OWQ2MGZkM2Y1MjNhZmZiMjVjNmRhMTg5ICYmCisJZ2l0IG5vdGVzIHNob3cgYWI1ZjMwMjAzNWYyZTdhYWYwNDI2NWYwOGI0MjAzNGMyMzI1NmUxZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSAtbiBkb2VzIG5vdCByZW1vdmUgbm90ZXMnICcKKworCWdpdCBub3RlcyBsaXN0ID4gZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHBydW5lIC1uICYmCisJZ2l0IG5vdGVzIGxpc3QgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorNWVlMWMzNWU4M2VhNDdjZDNjYzRmOGNiZWUwNTY4OTE1ZmJiYmQyOQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIC1uIGxpc3RzIHBydW5hYmxlIG5vdGVzJyAnCisKKworCWdpdCBub3RlcyBwcnVuZSAtbiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBub3RlcycgJworCisJZ2l0IG5vdGVzIHBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IG5vdGVzIGFyZSBnb25lJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyA1ZWUxYzM1ZTgzZWE0N2NkM2NjNGY4Y2JlZTA1Njg5MTVmYmJiZDI5ICYmCisJZ2l0IG5vdGVzIHNob3cgMDgzNDFhZDllOTRmYWEwODlkNjBmZDNmNTIzYWZmYjI1YzZkYTE4OSAmJgorCWdpdCBub3RlcyBzaG93IGFiNWYzMDIwMzVmMmU3YWFmMDQyNjVmMDhiNDIwMzRjMjMyNTZlMWYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHNvbWUgY29tbWl0cycgJworCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgSEVBRCAmJgorCWdpdCBnYyAtLXBydW5lPW5vdworJworCitjYXQgPiBleHBlY3QgPDxFT0YKKzA4MzQxYWQ5ZTk0ZmFhMDg5ZDYwZmQzZjUyM2FmZmIyNWM2ZGExODkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSAtdiBub3RlcycgJworCisJZ2l0IG5vdGVzIHBydW5lIC12ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBub3RlcyBhcmUgZ29uZScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgNWVlMWMzNWU4M2VhNDdjZDNjYzRmOGNiZWUwNTY4OTE1ZmJiYmQyOSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IDA4MzQxYWQ5ZTk0ZmFhMDg5ZDYwZmQzZjUyM2FmZmIyNWM2ZGExODkgJiYKKwlnaXQgbm90ZXMgc2hvdyBhYjVmMzAyMDM1ZjJlN2FhZjA0MjY1ZjA4YjQyMDM0YzIzMjU2ZTFmCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwNy1ub3Rlcy1tYW4uc2ggYi90L3QzMzA3LW5vdGVzLW1hbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYWEzNjZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwNy1ub3Rlcy1tYW4uc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0V4YW1wbGVzIGZyb20gdGhlIGdpdC1ub3RlcyBtYW4gcGFnZQorCitNYWtlIHN1cmUgdGhlIG1hbnVhbCBpcyBub3QgZnVsbCBvZiBsaWVzLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQSAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwl0ZXN0X2NvbW1pdCBDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4YW1wbGUgMTogbm90ZXMgdG8gYWRkIGFuIEFja2VkLWJ5IGxpbmUnICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJICAgIEIKKworCU5vdGVzOgorCSAgICBBY2tlZC1ieTogQSBDIEtlciA8YWNrZXJAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IG5vdGVzIGFkZCAtbSAiQWNrZWQtYnk6IEEgQyBLZXIgPGFja2VyQGV4YW1wbGUuY29tPiIgQiAmJgorCWdpdCBzaG93IC1zIEJee2NvbW1pdH0gPmxvZyAmJgorCXRhaWwgLW4gNCBsb2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhhbXBsZSAyOiBiaW5hcnkgbm90ZXMnICcKKwljcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyAuICYmCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwlibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IHRlc3QtYmluYXJ5LTEucG5nKSAmJgorCWdpdCBub3RlcyAtLXJlZj1sb2dvIGFkZCAtQyAiJGJsb2IiICYmCisJZ2l0IG5vdGVzIC0tcmVmPWxvZ28gY29weSBCIEMgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bG9nbyBzaG93IEMgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRlc3QtYmluYXJ5LTEucG5nIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDgtbm90ZXMtbWVyZ2Uuc2ggYi90L3QzMzA4LW5vdGVzLW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI0ZDgyYjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzA4LW5vdGVzLW1lcmdlLnNoCkBAIC0wLDAgKzEsMzY4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpvaGFuIEhlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBtZXJnaW5nIG9mIG5vdGVzIHRyZWVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgMXN0ICYmCisJdGVzdF9jb21taXQgMm5kICYmCisJdGVzdF9jb21taXQgM3JkICYmCisJdGVzdF9jb21taXQgNHRoICYmCisJdGVzdF9jb21taXQgNXRoICYmCisJIyBDcmVhdGUgbm90ZXMgb24gNCBmaXJzdCBjb21taXRzCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGVzIG9uIDFzdCBjb21taXQiIDFzdCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGVzIG9uIDJuZCBjb21taXQiIDJuZCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGVzIG9uIDNyZCBjb21taXQiIDNyZCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGVzIG9uIDR0aCBjb21taXQiIDR0aAorJworCitjb21taXRfc2hhMT0kKGdpdCByZXYtcGFyc2UgMXN0Xntjb21taXR9KQorY29tbWl0X3NoYTI9JChnaXQgcmV2LXBhcnNlIDJuZF57Y29tbWl0fSkKK2NvbW1pdF9zaGEzPSQoZ2l0IHJldi1wYXJzZSAzcmRee2NvbW1pdH0pCitjb21taXRfc2hhND0kKGdpdCByZXYtcGFyc2UgNHRoXntjb21taXR9KQorY29tbWl0X3NoYTU9JChnaXQgcmV2LXBhcnNlIDV0aF57Y29tbWl0fSkKKwordmVyaWZ5X25vdGVzICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIG5vdGVzIHwKKwkJc29ydCA+Im91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiAmJgorCXRlc3RfY21wICJleHBlY3Rfbm90ZXNfJG5vdGVzX3JlZiIgIm91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiAmJgorCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIGxvZyAtLWZvcm1hdD0iJUggJXMlbiVOIiBcCisJCT4ib3V0cHV0X2xvZ18kbm90ZXNfcmVmIiAmJgorCXRlc3RfY21wICJleHBlY3RfbG9nXyRub3Rlc19yZWYiICJvdXRwdXRfbG9nXyRub3Rlc19yZWYiCit9CisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc194Cis1ZTkzZDI0MDg0ZDMyZTFjYjYxZjcwNzA1MDViOWQyNTMwY2NhOTg3ICRjb21taXRfc2hhNAorODM2NjczMWVlZWU1Mzc4N2QyYmRmOGZjMWVmZjdkOTQ3NTdlOGRhMCAkY29tbWl0X3NoYTMKK2VlZGU4OTA2NGNkNDI0NDE1OTBkNmFmZWM2YzM3YjMyMWFkYTMzODkgJGNvbW1pdF9zaGEyCitkYWE1NWZmYWQ2Y2I5OWJmNjQyMjY1MzIxNDdmZmNhZjVjZThiZGQxICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ194IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK05vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAorTm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCitOb3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK05vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBpbml0aWFsIG5vdGVzICh4KScgJworCXZlcmlmeV9ub3RlcyB4CisnCisKK2NwIGV4cGVjdF9ub3Rlc194IGV4cGVjdF9ub3Rlc195CitjcCBleHBlY3RfbG9nX3ggZXhwZWN0X2xvZ195CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgdG8gbWVyZ2UgZW1wdHkgbm90ZXMgcmVmIGludG8gZW1wdHkgbm90ZXMgcmVmICh6ID0+IHkpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICJjb3JlLm5vdGVzUmVmPXJlZnMvbm90ZXMveSIgbm90ZXMgbWVyZ2UgegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHRvIG1lcmdlIGludG8gdmFyaW91cyBub24tbm90ZXMgcmVmcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzIiBub3RlcyBtZXJnZSB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICJjb3JlLm5vdGVzUmVmPXJlZnMvbm90ZXMvIiBub3RlcyBtZXJnZSB4ICYmCisJbWtkaXIgLXAgLmdpdC9yZWZzL25vdGVzL2RpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzL2RpciIgbm90ZXMgbWVyZ2UgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzL2Rpci8iIG5vdGVzIG1lcmdlIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9oZWFkcy9tYXN0ZXIiIG5vdGVzIG1lcmdlIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9ub3Rlcy95OiIgbm90ZXMgbWVyZ2UgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzL3k6Zm9vIiBub3RlcyBtZXJnZSB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICJjb3JlLm5vdGVzUmVmPXJlZnMvbm90ZXMvZm9vXntiYXIiIG5vdGVzIG1lcmdlIHgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB0byBtZXJnZSB2YXJpb3VzIG5vbi1ub3RlLXRyZWVzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSByZWZzL25vdGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHJlZnMvbm90ZXMvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHJlZnMvbm90ZXMvZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHJlZnMvbm90ZXMvZGlyLyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB4OiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB4OmZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSBmb29ee2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBub3RlcyBpbnRvIGVtcHR5IG5vdGVzIHJlZiAoeCA9PiB5KScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeCAmJgorCXZlcmlmeV9ub3RlcyB5ICYmCisJIyB4IGFuZCB5IHNob3VsZCBwb2ludCB0byB0aGUgc2FtZSBub3RlcyBjb21taXQKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy94KSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGVtcHR5IG5vdGVzIHJlZiAoeiA9PiB5KScgJworCWdpdCBub3RlcyBtZXJnZSB6ICYmCisJIyB5IHNob3VsZCBub3QgY2hhbmdlIChzdGlsbCA9PSB4KQorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3gpIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIG5vdGVzIG9uIG90aGVyIG5vdGVzIHJlZiAoeSknICcKKwkjIE5vdCB0b3VjaGluZyBub3RlcyB0byAxc3QgY29tbWl0CisJZ2l0IG5vdGVzIHJlbW92ZSAybmQgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICJNb3JlIG5vdGVzIG9uIDNyZCBjb21taXQiIDNyZCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gIk5ldyBub3RlcyBvbiA0dGggY29tbWl0IiA0dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlcyBvbiA1dGggY29tbWl0IiA1dGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgcHJldmlvdXMgbm90ZXMgY29tbWl0ICh5XiA9PiB5KSA9PiBOby1vcCcgJworCXByZV9zdGF0ZT0iJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiICYmCisJZ2l0IG5vdGVzIG1lcmdlIHleICYmCisJIyB5IHNob3VsZCBub3QgbW92ZQorCXRlc3QgIiRwcmVfc3RhdGUiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIgorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeQorMGYyZWZiZDAwMjYyZjJmZDQxZGZhZTMzZGY4NzY1NjE4ZWVhY2Q5OSAkY29tbWl0X3NoYTUKK2RlYzI1MDJkYWMzZWExNjE1NDNmNzE5MzAwNDRkZWZmOTNmYTk0NWMgJGNvbW1pdF9zaGE0Cis0MDY5Y2RiMzk5ZmQ0NTQ2M2VjNmVlZjhlMDUxYTE2YTAzNTkyZDkxICRjb21taXRfc2hhMworZGFhNTVmZmFkNmNiOTliZjY0MjI2NTMyMTQ3ZmZjYWY1Y2U4YmRkMSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeSA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorTm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCitOZXcgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCitOb3RlcyBvbiAzcmQgY29tbWl0CisKK01vcmUgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCisKKyRjb21taXRfc2hhMSAxc3QKK05vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBjaGFuZ2VkIG5vdGVzIG9uIG90aGVyIG5vdGVzIHJlZiAoeSknICcKKwl2ZXJpZnlfbm90ZXMgeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW5jaGFuZ2VkIG5vdGVzIG9uIG9yaWdpbmFsIG5vdGVzIHJlZiAoeCknICcKKwl2ZXJpZnlfbm90ZXMgeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvcmlnaW5hbCBub3RlcyAoeCkgaW50byBjaGFuZ2VkIG5vdGVzICh5KSA9PiBOby1vcCcgJworCWdpdCBub3RlcyBtZXJnZSAtdnZ2IHggJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyB4CisnCisKK2NwIGV4cGVjdF9ub3Rlc195IGV4cGVjdF9ub3Rlc194CitjcCBleHBlY3RfbG9nX3kgZXhwZWN0X2xvZ194CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGNoYW5nZWQgKHkpIGludG8gb3JpZ2luYWwgKHgpID0+IEZhc3QtZm9yd2FyZCcgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeSAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwkjIHggYW5kIHkgc2hvdWxkIHBvaW50IHRvIHNhbWUgdGhlIG5vdGVzIGNvbW1pdAorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3gpIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZW1wdHkgbm90ZXMgcmVmICh6ID0+IHkpJyAnCisJIyBQcmVwYXJlIGVtcHR5IChidXQgdmFsaWQpIG5vdGVzIHJlZiAoeikKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy96ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiZm9vIiAmJgorCWdpdCBub3RlcyByZW1vdmUgJiYKKwlnaXQgbm90ZXMgPm91dHB1dF9ub3Rlc196ICYmCisJdGVzdF9jbXAgL2Rldi9udWxsIG91dHB1dF9ub3Rlc196ICYmCisJIyBEbyB0aGUgbWVyZ2UgKHogPT4geSkKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJZ2l0IG5vdGVzIG1lcmdlIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCSMgeSBzaG91bGQgbm8gbG9uZ2VyIHBvaW50IHRvIHRoZSBzYW1lIG5vdGVzIGNvbW1pdCBhcyB4CisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveCkiICE9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3kKKzBmMmVmYmQwMDI2MmYyZmQ0MWRmYWUzM2RmODc2NTYxOGVlYWNkOTkgJGNvbW1pdF9zaGE1CitkZWMyNTAyZGFjM2VhMTYxNTQzZjcxOTMwMDQ0ZGVmZjkzZmE5NDVjICRjb21taXRfc2hhNAorNDA2OWNkYjM5OWZkNDU0NjNlYzZlZWY4ZTA1MWExNmEwMzU5MmQ5MSAkY29tbWl0X3NoYTMKK2QwMDBkMzBlNmRkY2ZjZTNhODEyMmM0MDMyMjZhMmNlMmZkMDRkOWQgJGNvbW1pdF9zaGEyCis0M2FkZDZiZDBjOGMwYmM4NzFhYzc5OTFlMGY1NTczY2ZiYTI3ODA0ICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ195IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCitOb3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK05ldyBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK05vdGVzIG9uIDNyZCBjb21taXQKKworTW9yZSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK05ldyBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK05vdGVzIG9uIDFzdCBjb21taXQKKworTW9yZSBub3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugbm90ZXMgb24gb3RoZXIgbm90ZXMgcmVmICh5KScgJworCSMgQXBwZW5kIHRvIDFzdCBjb21taXQgbm90ZXMKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICJNb3JlIG5vdGVzIG9uIDFzdCBjb21taXQiIDFzdCAmJgorCSMgQWRkIG5ldyBub3RlcyB0byAybmQgY29tbWl0CisJZ2l0IG5vdGVzIGFkZCAtbSAiTmV3IG5vdGVzIG9uIDJuZCBjb21taXQiIDJuZCAmJgorCXZlcmlmeV9ub3RlcyB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc194CiswZjJlZmJkMDAyNjJmMmZkNDFkZmFlMzNkZjg3NjU2MThlZWFjZDk5ICRjb21taXRfc2hhNQorMWYyNTdhM2E5MDMyODU1N2M0NTJmMDgxN2Q2Y2M1MGM4OWQzMTVkNCAkY29tbWl0X3NoYTQKK2RhYTU1ZmZhZDZjYjk5YmY2NDIyNjUzMjE0N2ZmY2FmNWNlOGJkZDEgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKK05vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAorTmV3IG5vdGVzIG9uIDR0aCBjb21taXQKKworTW9yZSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAorCiskY29tbWl0X3NoYTEgMXN0CitOb3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugbm90ZXMgb24gbm90ZXMgcmVmICh4KScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDNyZCAmJgorCWdpdCBub3RlcyBhcHBlbmQgLW0gIk1vcmUgbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJdmVyaWZ5X25vdGVzIHgKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3gKKzBmMmVmYmQwMDI2MmYyZmQ0MWRmYWUzM2RmODc2NTYxOGVlYWNkOTkgJGNvbW1pdF9zaGE1CisxZjI1N2EzYTkwMzI4NTU3YzQ1MmYwODE3ZDZjYzUwYzg5ZDMxNWQ0ICRjb21taXRfc2hhNAorZDAwMGQzMGU2ZGRjZmNlM2E4MTIyYzQwMzIyNmEyY2UyZmQwNGQ5ZCAkY29tbWl0X3NoYTIKKzQzYWRkNmJkMGM4YzBiYzg3MWFjNzk5MWUwZjU1NzNjZmJhMjc4MDQgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKK05vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAorTmV3IG5vdGVzIG9uIDR0aCBjb21taXQKKworTW9yZSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAorTmV3IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorTm90ZXMgb24gMXN0IGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHkgaW50byB4ID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCBub3RlcyBtZXJnZSB5ICYmCisJdmVyaWZ5X25vdGVzIHggJiYKKwl2ZXJpZnlfbm90ZXMgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdworMDVhNDkyNzk1MWJjZWYzNDdmNTE0ODY1NzViODc4YjJiNjAxMzdmMiAkY29tbWl0X3NoYTMKK2QwMDBkMzBlNmRkY2ZjZTNhODEyMmM0MDMyMjZhMmNlMmZkMDRkOWQgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3cgPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAorCiskY29tbWl0X3NoYTMgM3JkCitOZXcgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCitOZXcgbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZXMgb24gbmV3LCBzZXBhcmF0ZSBub3RlcyByZWYgKHcpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvdyAmJgorCSMgQWRkIHNhbWUgbm90ZSBhcyByZWZzL25vdGVzL3kgb24gMm5kIGNvbW1pdAorCWdpdCBub3RlcyBhZGQgLW0gIk5ldyBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwkjIEFkZCBuZXcgbm90ZSBvbiAzcmQgY29tbWl0IChub24tY29uZmxpY3RpbmcpCisJZ2l0IG5vdGVzIGFkZCAtbSAiTmV3IG5vdGVzIG9uIDNyZCBjb21taXQiIDNyZCAmJgorCSMgVmVyaWZ5IHN0YXRlIG9mIG5vdGVzIG9uIG5ldywgc2VwYXJhdGUgbm90ZXMgcmVmICh3KQorCXZlcmlmeV9ub3RlcyB3CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc194CiswZjJlZmJkMDAyNjJmMmZkNDFkZmFlMzNkZjg3NjU2MThlZWFjZDk5ICRjb21taXRfc2hhNQorMWYyNTdhM2E5MDMyODU1N2M0NTJmMDgxN2Q2Y2M1MGM4OWQzMTVkNCAkY29tbWl0X3NoYTQKKzA1YTQ5Mjc5NTFiY2VmMzQ3ZjUxNDg2NTc1Yjg3OGIyYjYwMTM3ZjIgJGNvbW1pdF9zaGEzCitkMDAwZDMwZTZkZGNmY2UzYTgxMjJjNDAzMjI2YTJjZTJmZDA0ZDlkICRjb21taXRfc2hhMgorNDNhZGQ2YmQwYzhjMGJjODcxYWM3OTkxZTBmNTU3M2NmYmEyNzgwNCAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeCA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorTm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCitOZXcgbm90ZXMgb24gNHRoIGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAorTmV3IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAorTmV3IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorTm90ZXMgb24gMXN0IGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHcgaW50byB4ID0+IE5vbi1jb25mbGljdGluZyBoaXN0b3J5LWxlc3MgbWVyZ2UnICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIG1lcmdlIHcgJiYKKwkjIFZlcmlmeSBuZXcgc3RhdGUgb2Ygbm90ZXMgb24gb3RoZXIgbm90ZXMgcmVmICh4KQorCXZlcmlmeV9ub3RlcyB4ICYmCisJIyBBbHNvIHZlcmlmeSB0aGF0IG5vdGhpbmcgY2hhbmdlZCBvbiBvdGhlciBub3RlcyByZWZzICh5IGFuZCB3KQorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIHcKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzA5LW5vdGVzLW1lcmdlLWF1dG8tcmVzb2x2ZS5zaCBiL3QvdDMzMDktbm90ZXMtbWVyZ2UtYXV0by1yZXNvbHZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2MWZkODQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzA5LW5vdGVzLW1lcmdlLWF1dG8tcmVzb2x2ZS5zaApAQCAtMCwwICsxLDY0NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBKb2hhbiBIZXJsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgbm90ZXMgbWVyZ2luZyB3aXRoIGF1dG8tcmVzb2x2aW5nIHN0cmF0ZWdpZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFNldCB1cCBhIG5vdGVzIG1lcmdlIHNjZW5hcmlvIHdpdGggYWxsIGtpbmRzIG9mIHBvdGVudGlhbCBjb25mbGljdHMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1pdHMnICcKKwl0ZXN0X2NvbW1pdCAxc3QgJiYKKwl0ZXN0X2NvbW1pdCAybmQgJiYKKwl0ZXN0X2NvbW1pdCAzcmQgJiYKKwl0ZXN0X2NvbW1pdCA0dGggJiYKKwl0ZXN0X2NvbW1pdCA1dGggJiYKKwl0ZXN0X2NvbW1pdCA2dGggJiYKKwl0ZXN0X2NvbW1pdCA3dGggJiYKKwl0ZXN0X2NvbW1pdCA4dGggJiYKKwl0ZXN0X2NvbW1pdCA5dGggJiYKKwl0ZXN0X2NvbW1pdCAxMHRoICYmCisJdGVzdF9jb21taXQgMTF0aCAmJgorCXRlc3RfY29tbWl0IDEydGggJiYKKwl0ZXN0X2NvbW1pdCAxM3RoICYmCisJdGVzdF9jb21taXQgMTR0aCAmJgorCXRlc3RfY29tbWl0IDE1dGgKKycKKworY29tbWl0X3NoYTE9JChnaXQgcmV2LXBhcnNlIDFzdF57Y29tbWl0fSkKK2NvbW1pdF9zaGEyPSQoZ2l0IHJldi1wYXJzZSAybmRee2NvbW1pdH0pCitjb21taXRfc2hhMz0kKGdpdCByZXYtcGFyc2UgM3JkXntjb21taXR9KQorY29tbWl0X3NoYTQ9JChnaXQgcmV2LXBhcnNlIDR0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGE1PSQoZ2l0IHJldi1wYXJzZSA1dGhee2NvbW1pdH0pCitjb21taXRfc2hhNj0kKGdpdCByZXYtcGFyc2UgNnRoXntjb21taXR9KQorY29tbWl0X3NoYTc9JChnaXQgcmV2LXBhcnNlIDd0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGE4PSQoZ2l0IHJldi1wYXJzZSA4dGhee2NvbW1pdH0pCitjb21taXRfc2hhOT0kKGdpdCByZXYtcGFyc2UgOXRoXntjb21taXR9KQorY29tbWl0X3NoYTEwPSQoZ2l0IHJldi1wYXJzZSAxMHRoXntjb21taXR9KQorY29tbWl0X3NoYTExPSQoZ2l0IHJldi1wYXJzZSAxMXRoXntjb21taXR9KQorY29tbWl0X3NoYTEyPSQoZ2l0IHJldi1wYXJzZSAxMnRoXntjb21taXR9KQorY29tbWl0X3NoYTEzPSQoZ2l0IHJldi1wYXJzZSAxM3RoXntjb21taXR9KQorY29tbWl0X3NoYTE0PSQoZ2l0IHJldi1wYXJzZSAxNHRoXntjb21taXR9KQorY29tbWl0X3NoYTE1PSQoZ2l0IHJldi1wYXJzZSAxNXRoXntjb21taXR9KQorCit2ZXJpZnlfbm90ZXMgKCkgeworCW5vdGVzX3JlZj0iJDEiCisJc3VmZml4PSIkMiIKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBub3RlcyB8CisJCXNvcnQgPiJvdXRwdXRfbm90ZXNfJHN1ZmZpeCIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X25vdGVzXyRzdWZmaXgiICJvdXRwdXRfbm90ZXNfJHN1ZmZpeCIgJiYKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBsb2cgLS1mb3JtYXQ9IiVIICVzJW4lTiIgXAorCQk+Im91dHB1dF9sb2dfJHN1ZmZpeCIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X2xvZ18kc3VmZml4IiAib3V0cHV0X2xvZ18kc3VmZml4IgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtZXJnZSBiYXNlICh4KScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDZ0aCBjb21taXQiIDZ0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gN3RoIGNvbW1pdCIgN3RoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiA4dGggY29tbWl0IiA4dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDl0aCBjb21taXQiIDl0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gMTB0aCBjb21taXQiIDEwdGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDExdGggY29tbWl0IiAxMXRoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAxMnRoIGNvbW1pdCIgMTJ0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gMTN0aCBjb21taXQiIDEzdGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDE0dGggY29tbWl0IiAxNHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAxNXRoIGNvbW1pdCIgMTV0aAorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorNDU3YTg1ZDZjODE0ZWEyMDg1NTBmMTVmY2M0OGY4MDRhYzhkYzAyMyAkY29tbWl0X3NoYTE1CitiMGM5NWI5NTQzMDFkNjlkYTJiYzM3MjNmNGNiMTY4MGQzNTU5MzdjICRjb21taXRfc2hhMTQKKzVkMzAyMTZhMTI5ZWVmZmE5N2Q5Njk0ZmZlOGM3NDMxN2E1NjAzMTUgJGNvbW1pdF9zaGExMworZGQxNjFiYzE0OTQ3MGZkODkwZGQ0YWI1MmE0Y2JkNzliYmQxOGMzNiAkY29tbWl0X3NoYTEyCis3YWJiYzQ1MTI2ZDY4MDMzNmZiMjQyOTRmMDEzYTdjZGZhM2VkNTQ1ICRjb21taXRfc2hhMTEKK2I4ZDAzZTE3M2Y2N2Y2NTA1YTc2ZjZlMDBjZjkzNDQwMjAwZGQ5YmUgJGNvbW1pdF9zaGExMAorMjBjNjEzYzgzNTAxMWM0OGE1YWJlMjkxNzBhMjQwMmNhNjM1NDkxMCAkY29tbWl0X3NoYTkKK2EzZGFmOGExZTRlNWRjMzQwOWEzMDNhZDg0ODFkNTdiZmVhN2Y1ZDYgJGNvbW1pdF9zaGE4Cis4OTcwMDMzMjJiNTNiYzZjYTA5OGU5MzI0ZWU1MDgzNjIzNDdlNzM0ICRjb21taXRfc2hhNworMTFkOTdmZGViZmE1Y2VlZTU0MGEzZGEwN2JjZTZmYTAyMjJiYzA4MiAkY29tbWl0X3NoYTYKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeCA8PEVPRgorJGNvbW1pdF9zaGExNSAxNXRoCit4IG5vdGVzIG9uIDE1dGggY29tbWl0CisKKyRjb21taXRfc2hhMTQgMTR0aAoreCBub3RlcyBvbiAxNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEzIDEzdGgKK3ggbm90ZXMgb24gMTN0aCBjb21taXQKKworJGNvbW1pdF9zaGExMiAxMnRoCit4IG5vdGVzIG9uIDEydGggY29tbWl0CisKKyRjb21taXRfc2hhMTEgMTF0aAoreCBub3RlcyBvbiAxMXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEwIDEwdGgKK3ggbm90ZXMgb24gMTB0aCBjb21taXQKKworJGNvbW1pdF9zaGE5IDl0aAoreCBub3RlcyBvbiA5dGggY29tbWl0CisKKyRjb21taXRfc2hhOCA4dGgKK3ggbm90ZXMgb24gOHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTcgN3RoCit4IG5vdGVzIG9uIDd0aCBjb21taXQKKworJGNvbW1pdF9zaGE2IDZ0aAoreCBub3RlcyBvbiA2dGggY29tbWl0CisKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHN0YXRlIG9mIG1lcmdlIGJhc2UgKHgpJyAndmVyaWZ5X25vdGVzIHggeCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbG9jYWwgYnJhbmNoICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3ggJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gNXRoIGNvbW1pdCIgNXRoICYmCisJZ2l0IG5vdGVzIHJlbW92ZSA2dGggJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDd0aCAmJgorCWdpdCBub3RlcyByZW1vdmUgOHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAxMnRoIGNvbW1pdCIgMTJ0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gMTN0aCBjb21taXQiIDEzdGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDE0dGggY29tbWl0IiAxNHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAxNXRoIGNvbW1pdCIgMTV0aAorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeQorNjhiODYzMGQyNTUxNjAyOGJlZDg2MjcxOTg1NWIzZDY3NjhkNzgzMyAkY29tbWl0X3NoYTE1Cis1ZGU3ZWE3YWQ0ZjQ3ZTdmZjkxOTg5ZmI4MjIzNDYzNDczMGY3NWRmICRjb21taXRfc2hhMTQKKzNhNjMxZmRiNmY0MWIwNWI1NWQ4ZjRiYWYyMDcyOGJhOGY2ZmNjYmMgJGNvbW1pdF9zaGExMworYTY2MDU1ZmE4MmY3YTAzZmUwYzAyYTZhYmEzMjg3YTg1YWJmN2M2MiAkY29tbWl0X3NoYTEyCis3YWJiYzQ1MTI2ZDY4MDMzNmZiMjQyOTRmMDEzYTdjZGZhM2VkNTQ1ICRjb21taXRfc2hhMTEKK2I4ZDAzZTE3M2Y2N2Y2NTA1YTc2ZjZlMDBjZjkzNDQwMjAwZGQ5YmUgJGNvbW1pdF9zaGExMAorMjBjNjEzYzgzNTAxMWM0OGE1YWJlMjkxNzBhMjQwMmNhNjM1NDkxMCAkY29tbWl0X3NoYTkKKzE1NDUwOGM3YTBiY2FkODJiNmZlNGI0NzJiYzRjMjZiM2JmMDgyNWIgJGNvbW1pdF9zaGE1CitlMmJmZDA2YTM3ZGQyMDMxNjg0YTU5YTZlMmIwMzNlMjEyMjM5Yzc4ICRjb21taXRfc2hhNAorNTc3MmY0MjQwOGMwZGQ2ZjA5N2E3Y2EyZDI0ZGUwZTc4ZDFjNDZiMSAkY29tbWl0X3NoYTMKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeSA8PEVPRgorJGNvbW1pdF9zaGExNSAxNXRoCit5IG5vdGVzIG9uIDE1dGggY29tbWl0CisKKyRjb21taXRfc2hhMTQgMTR0aAoreSBub3RlcyBvbiAxNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEzIDEzdGgKK3kgbm90ZXMgb24gMTN0aCBjb21taXQKKworJGNvbW1pdF9zaGExMiAxMnRoCit5IG5vdGVzIG9uIDEydGggY29tbWl0CisKKyRjb21taXRfc2hhMTEgMTF0aAoreCBub3RlcyBvbiAxMXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEwIDEwdGgKK3ggbm90ZXMgb24gMTB0aCBjb21taXQKKworJGNvbW1pdF9zaGE5IDl0aAoreCBub3RlcyBvbiA5dGggY29tbWl0CisKKyRjb21taXRfc2hhOCA4dGgKKworJGNvbW1pdF9zaGE3IDd0aAorCiskY29tbWl0X3NoYTYgNnRoCisKKyRjb21taXRfc2hhNSA1dGgKK3kgbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHN0YXRlIG9mIGxvY2FsIGJyYW5jaCAoeSknICd2ZXJpZnlfbm90ZXMgeSB5JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUgYnJhbmNoICh6KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveiByZWZzL25vdGVzL3ggJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy96ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gNXRoIGNvbW1pdCIgNXRoICYmCisJZ2l0IG5vdGVzIHJlbW92ZSA2dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ6IG5vdGVzIG9uIDh0aCBjb21taXQiIDh0aCAmJgorCWdpdCBub3RlcyByZW1vdmUgOXRoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiAxMXRoIGNvbW1pdCIgMTF0aCAmJgorCWdpdCBub3RlcyByZW1vdmUgMTJ0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gMTR0aCBjb21taXQiIDE0dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ6IG5vdGVzIG9uIDE1dGggY29tbWl0IiAxNXRoCisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc196Cis5YjRiMmM2MWYwNjE1NDEyZGEzYzEwZjk4ZmY4NWI1N2MwNGVjNzY1ICRjb21taXRfc2hhMTUKKzVkZTdlYTdhZDRmNDdlN2ZmOTE5ODlmYjgyMjM0NjM0NzMwZjc1ZGYgJGNvbW1pdF9zaGExNAorNWQzMDIxNmExMjllZWZmYTk3ZDk2OTRmZmU4Yzc0MzE3YTU2MDMxNSAkY29tbWl0X3NoYTEzCis3ZTNjNTM1MDNhM2RiOGRkOTk2Y2I2MmUzN2M2NmUwNzBiNDRiNTRkICRjb21taXRfc2hhMTEKK2I4ZDAzZTE3M2Y2N2Y2NTA1YTc2ZjZlMDBjZjkzNDQwMjAwZGQ5YmUgJGNvbW1pdF9zaGExMAorODUxZTE2Mzg3ODRhODg0YzdkZDI2YzVkNDFmMzM0MGY2Mzg3NDEzYSAkY29tbWl0X3NoYTgKKzg5NzAwMzMyMmI1M2JjNmNhMDk4ZTkzMjRlZTUwODM2MjM0N2U3MzQgJGNvbW1pdF9zaGE3Cis5OWZjMzRhZGZjNDAwYjk1YzY3YjAxMzExNWUzN2UzMWFhOWE2ZDIzICRjb21taXRfc2hhNQorZTJiZmQwNmEzN2RkMjAzMTY4NGE1OWE2ZTJiMDMzZTIxMjIzOWM3OCAkY29tbWl0X3NoYTQKKzI4M2I0ODIxOWFlZTlhNDEwNWY2Y2FiMzM3ZTc4OTA2NWM4MmMyYjkgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ogPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreiBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit4IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAorCiskY29tbWl0X3NoYTExIDExdGgKK3ogbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKKworJGNvbW1pdF9zaGE4IDh0aAoreiBub3RlcyBvbiA4dGggY29tbWl0CisKKyRjb21taXRfc2hhNyA3dGgKK3ggbm90ZXMgb24gN3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTYgNnRoCisKKyRjb21taXRfc2hhNSA1dGgKK3ogbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAorCiskY29tbWl0X3NoYTIgMm5kCit6IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHN0YXRlIG9mIHJlbW90ZSBicmFuY2ggKHopJyAndmVyaWZ5X25vdGVzIHogeicKKworIyBBdCB0aGlzIHBvaW50LCBiZWZvcmUgbWVyZ2luZyB6IGludG8geSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0YXR1czoKKyMKKyMgY29tbWl0IHwgYmFzZS94ICB8IGxvY2FsL3kgfCByZW1vdGUveiB8IGRpZmYgZnJvbSB4IHRvIHkveiAgICAgICAgIHwgcmVzdWx0CisjIC0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLQorIyAxc3QgICAgfCBbbm9uZV0gIHwgW25vbmVdICB8IFtub25lXSAgIHwgdW5jaGFuZ2VkIC8gdW5jaGFuZ2VkICAgICAgfCBbbm9uZV0KKyMgMm5kICAgIHwgW25vbmVdICB8IFtub25lXSAgfCAyODNiNDgyICB8IHVuY2hhbmdlZCAvIGFkZGVkICAgICAgICAgIHwgMjgzYjQ4MgorIyAzcmQgICAgfCBbbm9uZV0gIHwgNTc3MmY0MiB8IFtub25lXSAgIHwgYWRkZWQgICAgIC8gdW5jaGFuZ2VkICAgICAgfCA1NzcyZjQyCisjIDR0aCAgICB8IFtub25lXSAgfCBlMmJmZDA2IHwgZTJiZmQwNiAgfCBhZGRlZCAgICAgLyBhZGRlZCAoc2FtZSkgICB8IGUyYmZkMDYKKyMgNXRoICAgIHwgW25vbmVdICB8IDE1NDUwOGMgfCA5OWZjMzRhICB8IGFkZGVkICAgICAvIGFkZGVkIChkaWZmKSAgIHwgPz8/CisjIDZ0aCAgICB8IDExZDk3ZmQgfCBbbm9uZV0gIHwgW25vbmVdICAgfCByZW1vdmVkICAgLyByZW1vdmVkICAgICAgICB8IFtub25lXQorIyA3dGggICAgfCA4OTcwMDMzIHwgW25vbmVdICB8IDg5NzAwMzMgIHwgcmVtb3ZlZCAgIC8gdW5jaGFuZ2VkICAgICAgfCBbbm9uZV0KKyMgOHRoICAgIHwgYTNkYWY4YSB8IFtub25lXSAgfCA4NTFlMTYzICB8IHJlbW92ZWQgICAvIGNoYW5nZWQgICAgICAgIHwgPz8/CisjIDl0aCAgICB8IDIwYzYxM2MgfCAyMGM2MTNjIHwgW25vbmVdICAgfCB1bmNoYW5nZWQgLyByZW1vdmVkICAgICAgICB8IFtub25lXQorIyAxMHRoICAgfCBiOGQwM2UxIHwgYjhkMDNlMSB8IGI4ZDAzZTEgIHwgdW5jaGFuZ2VkIC8gdW5jaGFuZ2VkICAgICAgfCBiOGQwM2UxCisjIDExdGggICB8IDdhYmJjNDUgfCA3YWJiYzQ1IHwgN2UzYzUzNSAgfCB1bmNoYW5nZWQgLyBjaGFuZ2VkICAgICAgICB8IDdlM2M1MzUKKyMgMTJ0aCAgIHwgZGQxNjFiYyB8IGE2NjA1NWYgfCBbbm9uZV0gICB8IGNoYW5nZWQgICAvIHJlbW92ZWQgICAgICAgIHwgPz8/CisjIDEzdGggICB8IDVkMzAyMTYgfCAzYTYzMWZkIHwgNWQzMDIxNiAgfCBjaGFuZ2VkICAgLyB1bmNoYW5nZWQgICAgICB8IDNhNjMxZmQKKyMgMTR0aCAgIHwgYjBjOTViOSB8IDVkZTdlYTcgfCA1ZGU3ZWE3ICB8IGNoYW5nZWQgICAvIGNoYW5nZWQgKHNhbWUpIHwgNWRlN2VhNworIyAxNXRoICAgfCA0NTdhODVkIHwgNjhiODYzMCB8IDliNGIyYzYgIHwgY2hhbmdlZCAgIC8gY2hhbmdlZCAoZGlmZikgfCA/Pz8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCBpbnZhbGlkIHN0cmF0ZWd5ID0+IEZhaWwvTm8gY2hhbmdlcycgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT1mb28geiAmJgorCSMgVmVyaWZ5IG5vIGNoYW5nZXMgKHkpCisJdmVyaWZ5X25vdGVzIHkgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfb3VycworNjhiODYzMGQyNTUxNjAyOGJlZDg2MjcxOTg1NWIzZDY3NjhkNzgzMyAkY29tbWl0X3NoYTE1Cis1ZGU3ZWE3YWQ0ZjQ3ZTdmZjkxOTg5ZmI4MjIzNDYzNDczMGY3NWRmICRjb21taXRfc2hhMTQKKzNhNjMxZmRiNmY0MWIwNWI1NWQ4ZjRiYWYyMDcyOGJhOGY2ZmNjYmMgJGNvbW1pdF9zaGExMworYTY2MDU1ZmE4MmY3YTAzZmUwYzAyYTZhYmEzMjg3YTg1YWJmN2M2MiAkY29tbWl0X3NoYTEyCis3ZTNjNTM1MDNhM2RiOGRkOTk2Y2I2MmUzN2M2NmUwNzBiNDRiNTRkICRjb21taXRfc2hhMTEKK2I4ZDAzZTE3M2Y2N2Y2NTA1YTc2ZjZlMDBjZjkzNDQwMjAwZGQ5YmUgJGNvbW1pdF9zaGExMAorMTU0NTA4YzdhMGJjYWQ4MmI2ZmU0YjQ3MmJjNGMyNmIzYmYwODI1YiAkY29tbWl0X3NoYTUKK2UyYmZkMDZhMzdkZDIwMzE2ODRhNTlhNmUyYjAzM2UyMTIyMzljNzggJGNvbW1pdF9zaGE0Cis1NzcyZjQyNDA4YzBkZDZmMDk3YTdjYTJkMjRkZTBlNzhkMWM0NmIxICRjb21taXRfc2hhMworMjgzYjQ4MjE5YWVlOWE0MTA1ZjZjYWIzMzdlNzg5MDY1YzgyYzJiOSAkY29tbWl0X3NoYTIKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfb3VycyA8PEVPRgorJGNvbW1pdF9zaGExNSAxNXRoCit5IG5vdGVzIG9uIDE1dGggY29tbWl0CisKKyRjb21taXRfc2hhMTQgMTR0aAoreSBub3RlcyBvbiAxNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEzIDEzdGgKK3kgbm90ZXMgb24gMTN0aCBjb21taXQKKworJGNvbW1pdF9zaGExMiAxMnRoCit5IG5vdGVzIG9uIDEydGggY29tbWl0CisKKyRjb21taXRfc2hhMTEgMTF0aAoreiBub3RlcyBvbiAxMXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEwIDEwdGgKK3ggbm90ZXMgb24gMTB0aCBjb21taXQKKworJGNvbW1pdF9zaGE5IDl0aAorCiskY29tbWl0X3NoYTggOHRoCisKKyRjb21taXRfc2hhNyA3dGgKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit5IG5vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAoreSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3kgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCit6IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCAib3VycyIgc3RyYXRlZ3kgPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9b3VycyB6ICYmCisJdmVyaWZ5X25vdGVzIHkgb3VycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB0byBwcmUtbWVyZ2Ugc3RhdGUgKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveV4xICYmCisJIyBWZXJpZnkgcHJlLW1lcmdlIHN0YXRlCisJdmVyaWZ5X25vdGVzIHkgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdGhlaXJzCis5YjRiMmM2MWYwNjE1NDEyZGEzYzEwZjk4ZmY4NWI1N2MwNGVjNzY1ICRjb21taXRfc2hhMTUKKzVkZTdlYTdhZDRmNDdlN2ZmOTE5ODlmYjgyMjM0NjM0NzMwZjc1ZGYgJGNvbW1pdF9zaGExNAorM2E2MzFmZGI2ZjQxYjA1YjU1ZDhmNGJhZjIwNzI4YmE4ZjZmY2NiYyAkY29tbWl0X3NoYTEzCis3ZTNjNTM1MDNhM2RiOGRkOTk2Y2I2MmUzN2M2NmUwNzBiNDRiNTRkICRjb21taXRfc2hhMTEKK2I4ZDAzZTE3M2Y2N2Y2NTA1YTc2ZjZlMDBjZjkzNDQwMjAwZGQ5YmUgJGNvbW1pdF9zaGExMAorODUxZTE2Mzg3ODRhODg0YzdkZDI2YzVkNDFmMzM0MGY2Mzg3NDEzYSAkY29tbWl0X3NoYTgKKzk5ZmMzNGFkZmM0MDBiOTVjNjdiMDEzMTE1ZTM3ZTMxYWE5YTZkMjMgJGNvbW1pdF9zaGE1CitlMmJmZDA2YTM3ZGQyMDMxNjg0YTU5YTZlMmIwMzNlMjEyMjM5Yzc4ICRjb21taXRfc2hhNAorNTc3MmY0MjQwOGMwZGQ2ZjA5N2E3Y2EyZDI0ZGUwZTc4ZDFjNDZiMSAkY29tbWl0X3NoYTMKKzI4M2I0ODIxOWFlZTlhNDEwNWY2Y2FiMzM3ZTc4OTA2NWM4MmMyYjkgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3RoZWlycyA8PEVPRgorJGNvbW1pdF9zaGExNSAxNXRoCit6IG5vdGVzIG9uIDE1dGggY29tbWl0CisKKyRjb21taXRfc2hhMTQgMTR0aAoreSBub3RlcyBvbiAxNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEzIDEzdGgKK3kgbm90ZXMgb24gMTN0aCBjb21taXQKKworJGNvbW1pdF9zaGExMiAxMnRoCisKKyRjb21taXRfc2hhMTEgMTF0aAoreiBub3RlcyBvbiAxMXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEwIDEwdGgKK3ggbm90ZXMgb24gMTB0aCBjb21taXQKKworJGNvbW1pdF9zaGE5IDl0aAorCiskY29tbWl0X3NoYTggOHRoCit6IG5vdGVzIG9uIDh0aCBjb21taXQKKworJGNvbW1pdF9zaGE3IDd0aAorCiskY29tbWl0X3NoYTYgNnRoCisKKyRjb21taXRfc2hhNSA1dGgKK3ogbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoICJ0aGVpcnMiIHN0cmF0ZWd5ID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCBub3RlcyBtZXJnZSAtLXN0cmF0ZWd5PXRoZWlycyB6ICYmCisJdmVyaWZ5X25vdGVzIHkgdGhlaXJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc191bmlvbgorN2M0ZTU0NmVmZDBmZTkzOWY4NzZiZWIyNjJlY2UwMjc5Nzg4MGI1NCAkY29tbWl0X3NoYTE1Cis1ZGU3ZWE3YWQ0ZjQ3ZTdmZjkxOTg5ZmI4MjIzNDYzNDczMGY3NWRmICRjb21taXRfc2hhMTQKKzNhNjMxZmRiNmY0MWIwNWI1NWQ4ZjRiYWYyMDcyOGJhOGY2ZmNjYmMgJGNvbW1pdF9zaGExMworYTY2MDU1ZmE4MmY3YTAzZmUwYzAyYTZhYmEzMjg3YTg1YWJmN2M2MiAkY29tbWl0X3NoYTEyCis3ZTNjNTM1MDNhM2RiOGRkOTk2Y2I2MmUzN2M2NmUwNzBiNDRiNTRkICRjb21taXRfc2hhMTEKK2I4ZDAzZTE3M2Y2N2Y2NTA1YTc2ZjZlMDBjZjkzNDQwMjAwZGQ5YmUgJGNvbW1pdF9zaGExMAorODUxZTE2Mzg3ODRhODg0YzdkZDI2YzVkNDFmMzM0MGY2Mzg3NDEzYSAkY29tbWl0X3NoYTgKKzZjODQxY2MzNmVhNDk2MDI3MjkwOTY3Y2E5NmJkMmJlZjU0ZGJiNDcgJGNvbW1pdF9zaGE1CitlMmJmZDA2YTM3ZGQyMDMxNjg0YTU5YTZlMmIwMzNlMjEyMjM5Yzc4ICRjb21taXRfc2hhNAorNTc3MmY0MjQwOGMwZGQ2ZjA5N2E3Y2EyZDI0ZGUwZTc4ZDFjNDZiMSAkY29tbWl0X3NoYTMKKzI4M2I0ODIxOWFlZTlhNDEwNWY2Y2FiMzM3ZTc4OTA2NWM4MmMyYjkgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3VuaW9uIDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3kgbm90ZXMgb24gMTV0aCBjb21taXQKKworeiBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit5IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreSBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ogbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKKworJGNvbW1pdF9zaGE4IDh0aAoreiBub3RlcyBvbiA4dGggY29tbWl0CisKKyRjb21taXRfc2hhNyA3dGgKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit5IG5vdGVzIG9uIDV0aCBjb21taXQKKworeiBub3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK3kgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggInVuaW9uIiBzdHJhdGVneSA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT11bmlvbiB6ICYmCisJdmVyaWZ5X25vdGVzIHkgdW5pb24KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdG8gcHJlLW1lcmdlIHN0YXRlICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3leMSAmJgorCSMgVmVyaWZ5IHByZS1tZXJnZSBzdGF0ZQorCXZlcmlmeV9ub3RlcyB5IHkKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3VuaW9uMgorZDY4MjEwN2I4YmY3YTdhZWExZTUzN2E4ZDVjYjZhMTJiNjAxMzVmMSAkY29tbWl0X3NoYTE1Cis1ZGU3ZWE3YWQ0ZjQ3ZTdmZjkxOTg5ZmI4MjIzNDYzNDczMGY3NWRmICRjb21taXRfc2hhMTQKKzNhNjMxZmRiNmY0MWIwNWI1NWQ4ZjRiYWYyMDcyOGJhOGY2ZmNjYmMgJGNvbW1pdF9zaGExMworYTY2MDU1ZmE4MmY3YTAzZmUwYzAyYTZhYmEzMjg3YTg1YWJmN2M2MiAkY29tbWl0X3NoYTEyCis3ZTNjNTM1MDNhM2RiOGRkOTk2Y2I2MmUzN2M2NmUwNzBiNDRiNTRkICRjb21taXRfc2hhMTEKK2I4ZDAzZTE3M2Y2N2Y2NTA1YTc2ZjZlMDBjZjkzNDQwMjAwZGQ5YmUgJGNvbW1pdF9zaGExMAorODUxZTE2Mzg3ODRhODg0YzdkZDI2YzVkNDFmMzM0MGY2Mzg3NDEzYSAkY29tbWl0X3NoYTgKKzM1N2I2Y2ExNGM3YWZkNTliN2Y4YjhhYWFhNmI4YjcyMzc3MTEzNWIgJGNvbW1pdF9zaGE1CitlMmJmZDA2YTM3ZGQyMDMxNjg0YTU5YTZlMmIwMzNlMjEyMjM5Yzc4ICRjb21taXRfc2hhNAorNTc3MmY0MjQwOGMwZGQ2ZjA5N2E3Y2EyZDI0ZGUwZTc4ZDFjNDZiMSAkY29tbWl0X3NoYTMKKzI4M2I0ODIxOWFlZTlhNDEwNWY2Y2FiMzM3ZTc4OTA2NWM4MmMyYjkgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3VuaW9uMiA8PEVPRgorJGNvbW1pdF9zaGExNSAxNXRoCit6IG5vdGVzIG9uIDE1dGggY29tbWl0CisKK3kgbm90ZXMgb24gMTV0aCBjb21taXQKKworJGNvbW1pdF9zaGExNCAxNHRoCit5IG5vdGVzIG9uIDE0dGggY29tbWl0CisKKyRjb21taXRfc2hhMTMgMTN0aAoreSBub3RlcyBvbiAxM3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTEyIDEydGgKK3kgbm90ZXMgb24gMTJ0aCBjb21taXQKKworJGNvbW1pdF9zaGExMSAxMXRoCit6IG5vdGVzIG9uIDExdGggY29tbWl0CisKKyRjb21taXRfc2hhMTAgMTB0aAoreCBub3RlcyBvbiAxMHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTkgOXRoCisKKyRjb21taXRfc2hhOCA4dGgKK3ogbm90ZXMgb24gOHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTcgN3RoCisKKyRjb21taXRfc2hhNiA2dGgKKworJGNvbW1pdF9zaGE1IDV0aAoreiBub3RlcyBvbiA1dGggY29tbWl0CisKK3kgbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB5IGludG8geiB3aXRoICJ1bmlvbiIgc3RyYXRlZ3kgPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveiAmJgorCWdpdCBub3RlcyBtZXJnZSAtLXN0cmF0ZWd5PXVuaW9uIHkgJiYKKwl2ZXJpZnlfbm90ZXMgeiB1bmlvbjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdG8gcHJlLW1lcmdlIHN0YXRlICh6KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveiByZWZzL25vdGVzL3peMSAmJgorCSMgVmVyaWZ5IHByZS1tZXJnZSBzdGF0ZQorCXZlcmlmeV9ub3RlcyB6IHoKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX2NhdF9zb3J0X3VuaXEKKzZiZTkwMjQwYjVmNTQ1OTQyMDNlMjVkOWYyZjY0Yjc1NjcxNzVhZWUgJGNvbW1pdF9zaGExNQorNWRlN2VhN2FkNGY0N2U3ZmY5MTk4OWZiODIyMzQ2MzQ3MzBmNzVkZiAkY29tbWl0X3NoYTE0CiszYTYzMWZkYjZmNDFiMDViNTVkOGY0YmFmMjA3MjhiYThmNmZjY2JjICRjb21taXRfc2hhMTMKK2E2NjA1NWZhODJmN2EwM2ZlMGMwMmE2YWJhMzI4N2E4NWFiZjdjNjIgJGNvbW1pdF9zaGExMgorN2UzYzUzNTAzYTNkYjhkZDk5NmNiNjJlMzdjNjZlMDcwYjQ0YjU0ZCAkY29tbWl0X3NoYTExCitiOGQwM2UxNzNmNjdmNjUwNWE3NmY2ZTAwY2Y5MzQ0MDIwMGRkOWJlICRjb21taXRfc2hhMTAKKzg1MWUxNjM4Nzg0YTg4NGM3ZGQyNmM1ZDQxZjMzNDBmNjM4NzQxM2EgJGNvbW1pdF9zaGE4Cis2NjAzMTFkN2Y3OGRjNTNkYjEyYWMzNzNhNDNmY2E3NDY1MzgxYTdlICRjb21taXRfc2hhNQorZTJiZmQwNmEzN2RkMjAzMTY4NGE1OWE2ZTJiMDMzZTIxMjIzOWM3OCAkY29tbWl0X3NoYTQKKzU3NzJmNDI0MDhjMGRkNmYwOTdhN2NhMmQyNGRlMGU3OGQxYzQ2YjEgJGNvbW1pdF9zaGEzCisyODNiNDgyMTlhZWU5YTQxMDVmNmNhYjMzN2U3ODkwNjVjODJjMmI5ICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ19jYXRfc29ydF91bmlxIDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3kgbm90ZXMgb24gMTV0aCBjb21taXQKK3ogbm90ZXMgb24gMTV0aCBjb21taXQKKworJGNvbW1pdF9zaGExNCAxNHRoCit5IG5vdGVzIG9uIDE0dGggY29tbWl0CisKKyRjb21taXRfc2hhMTMgMTN0aAoreSBub3RlcyBvbiAxM3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTEyIDEydGgKK3kgbm90ZXMgb24gMTJ0aCBjb21taXQKKworJGNvbW1pdF9zaGExMSAxMXRoCit6IG5vdGVzIG9uIDExdGggY29tbWl0CisKKyRjb21taXRfc2hhMTAgMTB0aAoreCBub3RlcyBvbiAxMHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTkgOXRoCisKKyRjb21taXRfc2hhOCA4dGgKK3ogbm90ZXMgb24gOHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTcgN3RoCisKKyRjb21taXRfc2hhNiA2dGgKKworJGNvbW1pdF9zaGE1IDV0aAoreSBub3RlcyBvbiA1dGggY29tbWl0Cit6IG5vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAoreSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3kgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCit6IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeSBpbnRvIHogd2l0aCAiY2F0X3NvcnRfdW5pcSIgc3RyYXRlZ3kgPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9Y2F0X3NvcnRfdW5pcSB5ICYmCisJdmVyaWZ5X25vdGVzIHogY2F0X3NvcnRfdW5pcQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMTAtbm90ZXMtbWVyZ2UtbWFudWFsLXJlc29sdmUuc2ggYi90L3QzMzEwLW5vdGVzLW1lcmdlLW1hbnVhbC1yZXNvbHZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5NWJiOTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzEwLW5vdGVzLW1lcmdlLW1hbnVhbC1yZXNvbHZlLnNoCkBAIC0wLDAgKzEsNTc1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpvaGFuIEhlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBub3RlcyBtZXJnaW5nIHdpdGggbWFudWFsIGNvbmZsaWN0IHJlc29sdXRpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFNldCB1cCBhIG5vdGVzIG1lcmdlIHNjZW5hcmlvIHdpdGggZGlmZmVyZW50IGtpbmRzIG9mIGNvbmZsaWN0cwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tbWl0cycgJworCXRlc3RfY29tbWl0IDFzdCAmJgorCXRlc3RfY29tbWl0IDJuZCAmJgorCXRlc3RfY29tbWl0IDNyZCAmJgorCXRlc3RfY29tbWl0IDR0aCAmJgorCXRlc3RfY29tbWl0IDV0aAorJworCitjb21taXRfc2hhMT0kKGdpdCByZXYtcGFyc2UgMXN0Xntjb21taXR9KQorY29tbWl0X3NoYTI9JChnaXQgcmV2LXBhcnNlIDJuZF57Y29tbWl0fSkKK2NvbW1pdF9zaGEzPSQoZ2l0IHJldi1wYXJzZSAzcmRee2NvbW1pdH0pCitjb21taXRfc2hhND0kKGdpdCByZXYtcGFyc2UgNHRoXntjb21taXR9KQorY29tbWl0X3NoYTU9JChnaXQgcmV2LXBhcnNlIDV0aF57Y29tbWl0fSkKKwordmVyaWZ5X25vdGVzICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIG5vdGVzIHwKKwkJc29ydCA+Im91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiAmJgorCXRlc3RfY21wICJleHBlY3Rfbm90ZXNfJG5vdGVzX3JlZiIgIm91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiAmJgorCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIGxvZyAtLWZvcm1hdD0iJUggJXMlbiVOIiBcCisJCT4ib3V0cHV0X2xvZ18kbm90ZXNfcmVmIiAmJgorCXRlc3RfY21wICJleHBlY3RfbG9nXyRub3Rlc19yZWYiICJvdXRwdXRfbG9nXyRub3Rlc19yZWYiCit9CisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc194Cis2ZThlM2ZlYmNhM2MyYmI4OTY3MDQzMzVjYzRkMGMzNGNiMmY4NzE1ICRjb21taXRfc2hhNAorZTUzODhjMTA4NjA0NTZlZTYwNjczMDI1MzQ1ZmUyZTE1M2ViOGNmOCAkY29tbWl0X3NoYTMKK2NlZWZhNjc0ODczNjcwZTdlY2QxMzE4MTRkOTA5NzIzY2NlMmI2NjkgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAoreCBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3ggbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCit4IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbWVyZ2UgYmFzZSAoeCknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDNyZCBjb21taXQiIDNyZCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJdmVyaWZ5X25vdGVzIHgKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3kKK2UyYmZkMDZhMzdkZDIwMzE2ODRhNTlhNmUyYjAzM2UyMTIyMzljNzggJGNvbW1pdF9zaGE0Cis1NzcyZjQyNDA4YzBkZDZmMDk3YTdjYTJkMjRkZTBlNzhkMWM0NmIxICRjb21taXRfc2hhMworYjBhNjAyMWVjMDA2ZDA3ZTgwZTliMjBlYzliNDQ0Y2JkOWQ1NjBkMyAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeSA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKKworJGNvbW1pdF9zaGExIDFzdAoreSBub3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBsb2NhbCBicmFuY2ggKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDFzdCBjb21taXQiIDFzdCAmJgorCWdpdCBub3RlcyByZW1vdmUgMm5kICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCXZlcmlmeV9ub3RlcyB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc196CitjZmY1OWM3OTNjMjBiYjQ5YTRlMDFiYzA2ZmIwNmJhZDY0MmUwZDU0ICRjb21taXRfc2hhNAorMjgzYjQ4MjE5YWVlOWE0MTA1ZjZjYWIzMzdlNzg5MDY1YzgyYzJiOSAkY29tbWl0X3NoYTIKKzBhODFkYTg5NTYzNDZlMTliY2IyN2E5MDZmMDRhZjMyN2UwM2UzMWIgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ogPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAoreiBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3ogbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlIGJyYW5jaCAoeiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3ogcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveiAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gMXN0IGNvbW1pdCIgMXN0ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDNyZCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKworIyBBdCB0aGlzIHBvaW50LCBiZWZvcmUgbWVyZ2luZyB6IGludG8geSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0YXR1czoKKyMKKyMgY29tbWl0IHwgYmFzZS94ICB8IGxvY2FsL3kgfCByZW1vdGUveiB8IGRpZmYgZnJvbSB4IHRvIHkvegorIyAtLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMXN0ICAgIHwgW25vbmVdICB8IGIwYTYwMjEgfCAwYTgxZGE4ICB8IGFkZGVkICAgICAvIGFkZGVkIChkaWZmKQorIyAybmQgICAgfCBjZWVmYTY3IHwgW25vbmVdICB8IDI4M2I0ODIgIHwgcmVtb3ZlZCAgIC8gY2hhbmdlZAorIyAzcmQgICAgfCBlNTM4OGMxIHwgNTc3MmY0MiB8IFtub25lXSAgIHwgY2hhbmdlZCAgIC8gcmVtb3ZlZAorIyA0dGggICAgfCA2ZThlM2ZlIHwgZTJiZmQwNiB8IGNmZjU5YzcgIHwgY2hhbmdlZCAgIC8gY2hhbmdlZCAoZGlmZikKKyMgNXRoICAgIHwgW25vbmVdICB8IFtub25lXSAgfCBbbm9uZV0gICB8IFtub25lXQorCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3RfY29uZmxpY3RzCiskY29tbWl0X3NoYTEKKyRjb21taXRfc2hhMgorJGNvbW1pdF9zaGEzCiskY29tbWl0X3NoYTQKK0VPRgorCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTEgPDxFT0YKKzw8PDw8PDwgcmVmcy9ub3Rlcy9tCit5IG5vdGVzIG9uIDFzdCBjb21taXQKKz09PT09PT0KK3ogbm90ZXMgb24gMXN0IGNvbW1pdAorPj4+Pj4+PiByZWZzL25vdGVzL3oKK0VPRgorCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTIgPDxFT0YKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorRU9GCisKK2NhdCA+ZXhwZWN0X2NvbmZsaWN0XyRjb21taXRfc2hhMyA8PEVPRgoreSBub3RlcyBvbiAzcmQgY29tbWl0CitFT0YKKworY2F0ID5leHBlY3RfY29uZmxpY3RfJGNvbW1pdF9zaGE0IDw8RU9GCis8PDw8PDw8IHJlZnMvbm90ZXMvbQoreSBub3RlcyBvbiA0dGggY29tbWl0Cis9PT09PT09Cit6IG5vdGVzIG9uIDR0aCBjb21taXQKKz4+Pj4+Pj4gcmVmcy9ub3Rlcy96CitFT0YKKworY3AgZXhwZWN0X25vdGVzX3kgZXhwZWN0X25vdGVzX20KK2NwIGV4cGVjdF9sb2dfeSBleHBlY3RfbG9nX20KKworZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kgPiBwcmVfbWVyZ2VfeQorZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3ogPiBwcmVfbWVyZ2VfegorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8gbSAoPT0geSkgd2l0aCBkZWZhdWx0ICgibWFudWFsIikgcmVzb2x2ZXIgPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy95ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvbSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ID5vdXRwdXQgJiYKKwkjIE91dHB1dCBzaG91bGQgcG9pbnQgdG8gd2hlcmUgdG8gcmVzb2x2ZSBjb25mbGljdHMKKwlncmVwIC1xICJcXC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUiIG91dHB1dCAmJgorCSMgSW5zcGVjdCBtZXJnZSBjb25mbGljdHMKKwlscyAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFID5vdXRwdXRfY29uZmxpY3RzICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbmZsaWN0cyBvdXRwdXRfY29uZmxpY3RzICYmCisJKCBmb3IgZiBpbiAkKGNhdCBleHBlY3RfY29uZmxpY3RzKTsgZG8KKwkJdGVzdF9jbXAgImV4cGVjdF9jb25mbGljdF8kZiIgIi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGYiIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IHRoYXQgY3VycmVudCBub3RlcyB0cmVlIChwcmUtbWVyZ2UpIGhhcyBub3QgY2hhbmdlZCAobSA9PSB5KQorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIG0gJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChjYXQgcHJlX21lcmdlX3kpIgorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfegorMDA0OTRhZGVjZjJkOTYzNWEwMmZhNDMxMzA4ZDY3OTkzZjg1Mzk2OCAkY29tbWl0X3NoYTQKKzI4M2I0ODIxOWFlZTlhNDEwNWY2Y2FiMzM3ZTc4OTA2NWM4MmMyYjkgJGNvbW1pdF9zaGEyCiswYTgxZGE4OTU2MzQ2ZTE5YmNiMjdhOTA2ZjA0YWYzMjdlMDNlMzFiICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ196IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK3ogbm90ZXMgb24gNHRoIGNvbW1pdAorCitNb3JlIHogbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit6IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBub3RlcyBpbiB6JyAnCisJZ2l0IG5vdGVzIC0tcmVmIHogYXBwZW5kIC1tICJNb3JlIHogbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGRvIG1lcmdlIHcvY29uZmxpY3RzIHdoZW4gcHJldmlvdXMgbWVyZ2UgaXMgdW5maW5pc2hlZCcgJworCXRlc3QgLWQgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ID5vdXRwdXQgMj4mMSAmJgorCSMgT3V0cHV0IHNob3VsZCBpbmRpY2F0ZSB3aGF0IGlzIHdyb25nCisJZ3JlcCAtcSAiXFwuZ2l0L05PVEVTX01FUkdFX1xcKiBleGlzdHMiIG91dHB1dAorJworCisjIFNldHVwIG5vbi1jb25mbGljdGluZyBtZXJnZSBiZXR3ZWVuIHggYW5kIG5ldyBub3RlcyByZWYgdworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdworY2VlZmE2NzQ4NzM2NzBlN2VjZDEzMTgxNGQ5MDk3MjNjY2UyYjY2OSAkY29tbWl0X3NoYTIKK2Y3NWQxZGY4OGNiZmU0MjU4ZDQ5ODUyZjI2Y2ZjODNmMmFkNDQ5NGIgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3cgPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKK3ggbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit3IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVucmVsYXRlZCBub3RlcyByZWYgKHcpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvdyAmJgorCWdpdCBub3RlcyBhZGQgLW0gIncgbm90ZXMgb24gMXN0IGNvbW1pdCIgMXN0ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwl2ZXJpZnlfbm90ZXMgdworJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdworNmU4ZTNmZWJjYTNjMmJiODk2NzA0MzM1Y2M0ZDBjMzRjYjJmODcxNSAkY29tbWl0X3NoYTQKK2U1Mzg4YzEwODYwNDU2ZWU2MDY3MzAyNTM0NWZlMmUxNTNlYjhjZjggJGNvbW1pdF9zaGEzCitjZWVmYTY3NDg3MzY3MGU3ZWNkMTMxODE0ZDkwOTcyM2NjZTJiNjY5ICRjb21taXRfc2hhMgorZjc1ZDFkZjg4Y2JmZTQyNThkNDk4NTJmMjZjZmM4M2YyYWQ0NDk0YiAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfdyA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorCiskY29tbWl0X3NoYTQgNHRoCit4IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreCBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ggbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit3IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBkbyBtZXJnZSB3aXRob3V0IGNvbmZsaWN0cyBldmVuIGlmIHByZXZpb3VzIG1lcmdlIGlzIHVuZmluaXNoZWQgKHggPT4gdyknICcKKwl0ZXN0IC1kIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeCAmJgorCXZlcmlmeV9ub3RlcyB3ICYmCisJIyBWZXJpZnkgdGhhdCBvdGhlciBub3RlcyByZWZzIGhhcyBub3QgY2hhbmdlZCAoeCBhbmQgeSkKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc19tCiswMjFmYWEyMGU5MzFmYjQ4OTg2ZmZjNjI4MmI0YmIwNTU1M2FjOTQ2ICRjb21taXRfc2hhNAorNTc3MmY0MjQwOGMwZGQ2ZjA5N2E3Y2EyZDI0ZGUwZTc4ZDFjNDZiMSAkY29tbWl0X3NoYTMKKzI4M2I0ODIxOWFlZTlhNDEwNWY2Y2FiMzM3ZTc4OTA2NWM4MmMyYjkgJGNvbW1pdF9zaGEyCiswYTU5ZTc4N2U2ZDY4OGFhNjMwOWU1NmU4YzFiODk0MzFhMGZjMWMxICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ19tIDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK3kgYW5kIHogbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3kgYW5kIHogbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWxpemUgY29uZmxpY3RpbmcgbWVyZ2UgKHogPT4gbSknICcKKwkjIFJlc29sdmUgY29uZmxpY3RzIGFuZCBmaW5hbGl6ZSBtZXJnZQorCWNhdCA+LmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTEgPDxFT0YgJiYKK3kgYW5kIHogbm90ZXMgb24gMXN0IGNvbW1pdAorRU9GCisJY2F0ID4uZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNCA8PEVPRiAmJgoreSBhbmQgeiBub3RlcyBvbiA0dGggY29tbWl0CitFT0YKKwlnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgJiYKKwkjIE5vIC5naXQvTk9URVNfTUVSR0VfKiBmaWxlcyBsZWZ0CisJdGVzdF9taWdodF9mYWlsIGxzIC5naXQvTk9URVNfTUVSR0VfKiA+b3V0cHV0IDI+L2Rldi9udWxsICYmCisJdGVzdF9jbXAgL2Rldi9udWxsIG91dHB1dCAmJgorCSMgTWVyZ2UgY29tbWl0IGhhcyBwcmUtbWVyZ2UgeSBhbmQgcHJlLW1lcmdlIHogYXMgcGFyZW50cworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL21eMSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tXjIpIiA9ICIkKGNhdCBwcmVfbWVyZ2VfeikiICYmCisJIyBNZXJnZSBjb21taXQgbWVudGlvbnMgdGhlIG5vdGVzIHJlZnMgbWVyZ2VkCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQiByZWZzL25vdGVzL20gPiBtZXJnZV9jb21taXRfbXNnICYmCisJZ3JlcCAtcSByZWZzL25vdGVzL20gbWVyZ2VfY29tbWl0X21zZyAmJgorCWdyZXAgLXEgcmVmcy9ub3Rlcy96IG1lcmdlX2NvbW1pdF9tc2cgJiYKKwkjIE1lcmdlIGNvbW1pdCBtZW50aW9ucyBjb25mbGljdGluZyBub3RlcworCWdyZXAgLXEgIkNvbmZsaWN0cyIgbWVyZ2VfY29tbWl0X21zZyAmJgorCSggZm9yIHNoYTEgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCWdyZXAgLXEgIiRzaGExIiBtZXJnZV9jb21taXRfbXNnIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IGNvbnRlbnRzIG9mIG1lcmdlIHJlc3VsdAorCXZlcmlmeV9ub3RlcyBtICYmCisJIyBWZXJpZnkgdGhhdCBvdGhlciBub3RlcyByZWZzIGhhcyBub3QgY2hhbmdlZCAodywgeCwgeSBhbmQgeikKKwl2ZXJpZnlfbm90ZXMgdyAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgegorJworCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTQgPDxFT0YKKzw8PDw8PDwgcmVmcy9ub3Rlcy9tCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKz09PT09PT0KK3ogbm90ZXMgb24gNHRoIGNvbW1pdAorCitNb3JlIHogbm90ZXMgb24gNHRoIGNvbW1pdAorPj4+Pj4+PiByZWZzL25vdGVzL3oKK0VPRgorCitjcCBleHBlY3Rfbm90ZXNfeSBleHBlY3Rfbm90ZXNfbQorY3AgZXhwZWN0X2xvZ195IGV4cGVjdF9sb2dfbQorCitnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSA+IHByZV9tZXJnZV95CitnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveiA+IHByZV9tZXJnZV96CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZG8gbWVyZ2Ugb2YgeiBpbnRvIG0gKD09IHkpIHdpdGggZGVmYXVsdCAoIm1hbnVhbCIpIHJlc29sdmVyID0+IENvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMveSAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL20gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiA+b3V0cHV0ICYmCisJIyBPdXRwdXQgc2hvdWxkIHBvaW50IHRvIHdoZXJlIHRvIHJlc29sdmUgY29uZmxpY3RzCisJZ3JlcCAtcSAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKKwkjIEluc3BlY3QgbWVyZ2UgY29uZmxpY3RzCisJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgorCSggZm9yIGYgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCXRlc3RfY21wICJleHBlY3RfY29uZmxpY3RfJGYiICIuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRmIiB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSB0aGF0IGN1cnJlbnQgbm90ZXMgdHJlZSAocHJlLW1lcmdlKSBoYXMgbm90IGNoYW5nZWQgKG0gPT0geSkKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQgbm90ZXMgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCAmJgorCSMgTm8gLmdpdC9OT1RFU19NRVJHRV8qIGZpbGVzIGxlZnQKKwl0ZXN0X21pZ2h0X2ZhaWwgbHMgLmdpdC9OT1RFU19NRVJHRV8qID5vdXRwdXQgMj4vZGV2L251bGwgJiYKKwl0ZXN0X2NtcCAvZGV2L251bGwgb3V0cHV0ICYmCisJIyBtIGhhcyBub3QgbW92ZWQgKHN0aWxsID09IHkpCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIgJiYKKwkjIFZlcmlmeSB0aGF0IG90aGVyIG5vdGVzIHJlZnMgaGFzIG5vdCBjaGFuZ2VkICh3LCB4LCB5IGFuZCB6KQorCXZlcmlmeV9ub3RlcyB3ICYmCisJdmVyaWZ5X25vdGVzIHggJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyB6CisnCisKK2dpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95ID4gcHJlX21lcmdlX3kKK2dpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy96ID4gcHJlX21lcmdlX3oKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkbyBtZXJnZSBvZiB6IGludG8gbSAoPT0geSkgd2l0aCBkZWZhdWx0ICgibWFudWFsIikgcmVzb2x2ZXIgPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiA+b3V0cHV0ICYmCisJIyBPdXRwdXQgc2hvdWxkIHBvaW50IHRvIHdoZXJlIHRvIHJlc29sdmUgY29uZmxpY3RzCisJZ3JlcCAtcSAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKKwkjIEluc3BlY3QgbWVyZ2UgY29uZmxpY3RzCisJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgorCSggZm9yIGYgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCXRlc3RfY21wICJleHBlY3RfY29uZmxpY3RfJGYiICIuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRmIiB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSB0aGF0IGN1cnJlbnQgbm90ZXMgdHJlZSAocHJlLW1lcmdlKSBoYXMgbm90IGNoYW5nZWQgKG0gPT0geSkKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX20KKzMwNGRmYjQzMjVjZjI0MzAyNWI5OTU3NDg2ZWI2MDVhOWI1MWMxOTkgJGNvbW1pdF9zaGE1CisyODNiNDgyMTlhZWU5YTQxMDVmNmNhYjMzN2U3ODkwNjVjODJjMmI5ICRjb21taXRfc2hhMgorMGE1OWU3ODdlNmQ2ODhhYTYzMDllNTZlOGMxYjg5NDMxYTBmYzFjMSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfbSA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorbmV3IG5vdGUgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3kgYW5kIHogbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkICsgcmVtb3ZlIG5vdGVzIGluIGZpbmFsaXplZCBtZXJnZSAoeiA9PiBtKScgJworCSMgUmVzb2x2ZSBvbmUgY29uZmxpY3QKKwljYXQgPi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGExIDw8RU9GICYmCit5IGFuZCB6IG5vdGVzIG9uIDFzdCBjb21taXQKK0VPRgorCSMgUmVtb3ZlIGFub3RoZXIgY29uZmxpY3QKKwlybSAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNCAmJgorCSMgUmVtb3ZlIGEgRC9GIGNvbmZsaWN0CisJcm0gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTMgJiYKKwkjIEFkZCBhIG5ldyBub3RlCisJZWNobyAibmV3IG5vdGUgb24gNXRoIGNvbW1pdCIgPiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNSAmJgorCSMgRmluYWxpemUgbWVyZ2UKKwlnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgJiYKKwkjIE5vIC5naXQvTk9URVNfTUVSR0VfKiBmaWxlcyBsZWZ0CisJdGVzdF9taWdodF9mYWlsIGxzIC5naXQvTk9URVNfTUVSR0VfKiA+b3V0cHV0IDI+L2Rldi9udWxsICYmCisJdGVzdF9jbXAgL2Rldi9udWxsIG91dHB1dCAmJgorCSMgTWVyZ2UgY29tbWl0IGhhcyBwcmUtbWVyZ2UgeSBhbmQgcHJlLW1lcmdlIHogYXMgcGFyZW50cworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL21eMSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tXjIpIiA9ICIkKGNhdCBwcmVfbWVyZ2VfeikiICYmCisJIyBNZXJnZSBjb21taXQgbWVudGlvbnMgdGhlIG5vdGVzIHJlZnMgbWVyZ2VkCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQiByZWZzL25vdGVzL20gPiBtZXJnZV9jb21taXRfbXNnICYmCisJZ3JlcCAtcSByZWZzL25vdGVzL20gbWVyZ2VfY29tbWl0X21zZyAmJgorCWdyZXAgLXEgcmVmcy9ub3Rlcy96IG1lcmdlX2NvbW1pdF9tc2cgJiYKKwkjIE1lcmdlIGNvbW1pdCBtZW50aW9ucyBjb25mbGljdGluZyBub3RlcworCWdyZXAgLXEgIkNvbmZsaWN0cyIgbWVyZ2VfY29tbWl0X21zZyAmJgorCSggZm9yIHNoYTEgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCWdyZXAgLXEgIiRzaGExIiBtZXJnZV9jb21taXRfbXNnIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IGNvbnRlbnRzIG9mIG1lcmdlIHJlc3VsdAorCXZlcmlmeV9ub3RlcyBtICYmCisJIyBWZXJpZnkgdGhhdCBvdGhlciBub3RlcyByZWZzIGhhcyBub3QgY2hhbmdlZCAodywgeCwgeSBhbmQgeikKKwl2ZXJpZnlfbm90ZXMgdyAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgegorJworCitjcCBleHBlY3Rfbm90ZXNfeSBleHBlY3Rfbm90ZXNfbQorY3AgZXhwZWN0X2xvZ195IGV4cGVjdF9sb2dfbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRvIG1lcmdlIG9mIHogaW50byBtICg9PSB5KSB3aXRoIGRlZmF1bHQgKCJtYW51YWwiKSByZXNvbHZlciA9PiBDb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3kgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiA+b3V0cHV0ICYmCisJIyBPdXRwdXQgc2hvdWxkIHBvaW50IHRvIHdoZXJlIHRvIHJlc29sdmUgY29uZmxpY3RzCisJZ3JlcCAtcSAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKKwkjIEluc3BlY3QgbWVyZ2UgY29uZmxpY3RzCisJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgorCSggZm9yIGYgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCXRlc3RfY21wICJleHBlY3RfY29uZmxpY3RfJGYiICIuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRmIiB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSB0aGF0IGN1cnJlbnQgbm90ZXMgdHJlZSAocHJlLW1lcmdlKSBoYXMgbm90IGNoYW5nZWQgKG0gPT0geSkKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIKKycKKworY3AgZXhwZWN0X25vdGVzX3cgZXhwZWN0X25vdGVzX20KK2NwIGV4cGVjdF9sb2dfdyBleHBlY3RfbG9nX20KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgbm90ZXMgcmVmIG0gdG8gc29tZXdoZXJlIGVsc2UgKHcpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMvdyAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3cpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHRvIGZpbmFsaXplIGNvbmZsaWN0aW5nIG1lcmdlIGlmIHVuZGVybHlpbmcgcmVmIGhhcyBtb3ZlZCBpbiB0aGUgbWVhbnRpbWUgKG0gIT0gTk9URVNfTUVSR0VfUEFSVElBTF4xKScgJworCSMgUmVzb2x2ZSBjb25mbGljdHMKKwljYXQgPi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGExIDw8RU9GICYmCit5IGFuZCB6IG5vdGVzIG9uIDFzdCBjb21taXQKK0VPRgorCWNhdCA+LmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTQgPDxFT0YgJiYKK3kgYW5kIHogbm90ZXMgb24gNHRoIGNvbW1pdAorRU9GCisJIyBGYWlsIHRvIGZpbmFsaXplIG1lcmdlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0ID5vdXRwdXQgMj4mMSAmJgorCSMgLmdpdC9OT1RFU19NRVJHRV8qIG11c3QgcmVtYWluCisJdGVzdCAtZiAuZ2l0L05PVEVTX01FUkdFX1BBUlRJQUwgJiYKKwl0ZXN0IC1mIC5naXQvTk9URVNfTUVSR0VfUkVGICYmCisJdGVzdCAtZiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhMSAmJgorCXRlc3QgLWYgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTIgJiYKKwl0ZXN0IC1mIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGEzICYmCisJdGVzdCAtZiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNCAmJgorCSMgUmVmcyBhcmUgdW5jaGFuZ2VkCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3cpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIiA9ICIkKGdpdCByZXYtcGFyc2UgTk9URVNfTUVSR0VfUEFSVElBTF4xKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSBOT1RFU19NRVJHRV9QQVJUSUFMXjEpIiAmJgorCSMgTWVudGlvbiByZWZzL25vdGVzL20sIGFuZCBpdHMgY3VycmVudCBhbmQgZXhwZWN0ZWQgdmFsdWUgaW4gb3V0cHV0CisJZ3JlcCAtcSAicmVmcy9ub3Rlcy9tIiBvdXRwdXQgJiYKKwlncmVwIC1xICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgb3V0cHV0ICYmCisJZ3JlcCAtcSAiJChnaXQgcmV2LXBhcnNlIE5PVEVTX01FUkdFX1BBUlRJQUxeMSkiIG91dHB1dCAmJgorCSMgVmVyaWZ5IHRoYXQgb3RoZXIgbm90ZXMgcmVmcyBoYXMgbm90IGNoYW5nZWQgKHcsIHgsIHkgYW5kIHopCisJdmVyaWZ5X25vdGVzIHcgJiYKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzb2x2ZSBzaXR1YXRpb24gYnkgYWJvcnRpbmcgdGhlIG5vdGVzIG1lcmdlJyAnCisJZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgJiYKKwkjIE5vIC5naXQvTk9URVNfTUVSR0VfKiBmaWxlcyBsZWZ0CisJdGVzdF9taWdodF9mYWlsIGxzIC5naXQvTk9URVNfTUVSR0VfKiA+b3V0cHV0IDI+L2Rldi9udWxsICYmCisJdGVzdF9jbXAgL2Rldi9udWxsIG91dHB1dCAmJgorCSMgbSBoYXMgbm90IG1vdmVkIChzdGlsbCA9PSB3KQorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy93KSIgJiYKKwkjIFZlcmlmeSB0aGF0IG90aGVyIG5vdGVzIHJlZnMgaGFzIG5vdCBjaGFuZ2VkICh3LCB4LCB5IGFuZCB6KQorCXZlcmlmeV9ub3RlcyB3ICYmCisJdmVyaWZ5X25vdGVzIHggJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyB6CisnCisKK2NhdCA+ZXhwZWN0X25vdGVzIDw8RU9GCitmb28KK2JhcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBjd2QgYmVmb3JlIGNvbW1pdHRpbmcgbm90ZXMgbWVyZ2UnICcKKwlnaXQgbm90ZXMgYWRkIC1tIGZvbyBIRUFEICYmCisJZ2l0IG5vdGVzIC0tcmVmPW90aGVyIGFkZCAtbSBiYXIgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSByZWZzL25vdGVzL290aGVyICYmCisJKAorCQljZCAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFICYmCisJCWVjaG8gImZvbyIgPiAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJZWNobyAiYmFyIiA+PiAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0CisJKSAmJgorCWdpdCBub3RlcyBzaG93IEhFQUQgPiBhY3R1YWxfbm90ZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm90ZXMgYWN0dWFsX25vdGVzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMxMS1ub3Rlcy1tZXJnZS1mYW5vdXQuc2ggYi90L3QzMzExLW5vdGVzLW1lcmdlLWZhbm91dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MzUxNmVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMxMS1ub3Rlcy1tZXJnZS1mYW5vdXQuc2gKQEAgLTAsMCArMSw0MzYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSm9oYW4gSGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG5vdGVzIG1lcmdpbmcgYXQgdmFyaW91cyBmYW5vdXQgbGV2ZWxzJworCisuIC4vdGVzdC1saWIuc2gKKwordmVyaWZ5X25vdGVzICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCWNvbW1pdD0iJDIiCisJaWYgdGVzdCAtZiAiZXhwZWN0X25vdGVzXyRub3Rlc19yZWYiCisJdGhlbgorCQlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBub3RlcyB8CisJCQlzb3J0ID4ib3V0cHV0X25vdGVzXyRub3Rlc19yZWYiICYmCisJCXRlc3RfY21wICJleHBlY3Rfbm90ZXNfJG5vdGVzX3JlZiIgIm91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiB8fAorCQkJcmV0dXJuIDEKKwlmaSAmJgorCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIGxvZyAtLWZvcm1hdD0iJUggJXMlbiVOIiBcCisJCSIkY29tbWl0IiA+Im91dHB1dF9sb2dfJG5vdGVzX3JlZiIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X2xvZ18kbm90ZXNfcmVmIiAib3V0cHV0X2xvZ18kbm90ZXNfcmVmIgorfQorCit2ZXJpZnlfZmFub3V0ICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCSMgRXhwZWN0IGVudGlyZSBub3RlcyB0cmVlIHRvIGhhdmUgYSBmYW5vdXQgPT0gMQorCWdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSAicmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiA+L2Rldi9udWxsICYmCisJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgInJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgfAorCXdoaWxlIHJlYWQgcGF0aAorCWRvCisJCWNhc2UgIiRwYXRoIiBpbgorCQk/Py8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PykKKwkJCTogdHJ1ZQorCQkJOzsKKwkJKikKKwkJCWVjaG8gIkludmFsaWQgcGF0aCBcIiRwYXRoXCIiICYmCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKwordmVyaWZ5X25vX2Zhbm91dCAoKSB7CisJbm90ZXNfcmVmPSIkMSIKKwkjIEV4cGVjdCBlbnRpcmUgbm90ZXMgdHJlZSB0byBoYXZlIGEgZmFub3V0ID09IDAKKwlnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgInJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgPi9kZXYvbnVsbCAmJgorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5ICJyZWZzL25vdGVzLyRub3Rlc19yZWYiIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQljYXNlICIkcGF0aCIgaW4KKwkJPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PykKKwkJCTogdHJ1ZQorCQkJOzsKKwkJKikKKwkJCWVjaG8gIkludmFsaWQgcGF0aCBcIiRwYXRoXCIiICYmCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworIyBTZXQgdXAgYSBub3RlcyBtZXJnZSBzY2VuYXJpbyB3aXRoIGRpZmZlcmVudCBraW5kcyBvZiBjb25mbGljdHMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgZmV3IGluaXRpYWwgY29tbWl0cyB3aXRoIG5vdGVzIChub3RlcyByZWY6IHgpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCWZvciBpIGluIDEgMiAzIDQgNQorCWRvCisJCXRlc3RfY29tbWl0ICJjb21taXQkaSIgPi9kZXYvbnVsbCAmJgorCQlnaXQgbm90ZXMgYWRkIC1tICJub3RlcyBmb3IgY29tbWl0JGkiIHx8IHJldHVybiAxCisJZG9uZQorJworCitjb21taXRfc2hhMT0kKGdpdCByZXYtcGFyc2UgY29tbWl0MV57Y29tbWl0fSkKK2NvbW1pdF9zaGEyPSQoZ2l0IHJldi1wYXJzZSBjb21taXQyXntjb21taXR9KQorY29tbWl0X3NoYTM9JChnaXQgcmV2LXBhcnNlIGNvbW1pdDNee2NvbW1pdH0pCitjb21taXRfc2hhND0kKGdpdCByZXYtcGFyc2UgY29tbWl0NF57Y29tbWl0fSkKK2NvbW1pdF9zaGE1PSQoZ2l0IHJldi1wYXJzZSBjb21taXQ1Xntjb21taXR9KQorCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorYWVkOTExNTVjN2E3MmMyMTg4ZTc4MWZkZjQwZTBmMzc2MWIyOTlkYiAkY29tbWl0X3NoYTUKKzk5ZmFiMjY4ZjlkN2VlN2IwMTFlMDkxYTQzNmM3OGRlZjhlZWVlNjkgJGNvbW1pdF9zaGE0Cis5NTNjMjBhZTI2YzdhYTBiNDI4YzIwNjkzZmUzOGJjNjg3ZjlkMWE5ICRjb21taXRfc2hhMworNjM1ODc5NjEzMWI4OTE2ZWFhMmRkZTY5MDI2NDI5NDJhMWNiMzdlMSAkY29tbWl0X3NoYTIKK2IwMmQ0NTljMzJmMGU2OGYyZmUwOTgxMDMzYmIzNGYzODc3NmJhNDcgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1Citub3RlcyBmb3IgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorbm90ZXMgZm9yIGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK25vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCitub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nhbml0eSBjaGVjayAoeCknICcKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vX2Zhbm91dCB4CisnCisKK251bT0zMDAKKworY3AgZXhwZWN0X2xvZ194IGV4cGVjdF9sb2dfeQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgYSBmZXcgaHVuZHJlZCBjb21taXRzIHcvbm90ZXMgdG8gdHJpZ2dlciBmYW5vdXQgKHggLT4geSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCWk9NSAmJgorCXdoaWxlIHRlc3QgJGkgLWx0ICRudW0KKwlkbworCQlpPSQoKCRpICsgMSkpICYmCisJCXRlc3RfY29tbWl0ICJjb21taXQkaSIgPi9kZXYvbnVsbCAmJgorCQlnaXQgbm90ZXMgYWRkIC1tICJub3RlcyBmb3IgY29tbWl0JGkiIHx8IHJldHVybiAxCisJZG9uZSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIiAhPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveCkiICYmCisJIyBFeHBlY3RlZCBudW1iZXIgb2YgY29tbWl0cyBhbmQgbm90ZXMKKwl0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgfCB3YyAtbCkgPSAkbnVtICYmCisJdGVzdCAkKGdpdCBub3RlcyBsaXN0IHwgd2MgLWwpID0gJG51bSAmJgorCSMgNSBmaXJzdCBub3RlcyB1bmNoYW5nZWQKKwl2ZXJpZnlfbm90ZXMgeSBjb21taXQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgaGFzIGZhbm91dCAoeSknICd2ZXJpZnlfZmFub3V0IHknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05vLW9wIG1lcmdlIChhbHJlYWR5IGluY2x1ZGVkKSAoeCA9PiB5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3kgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9tICYmCisJZ2l0IG5vdGVzIG1lcmdlIHggJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Zhc3QtZm9yd2FyZCBtZXJnZSAoeSA9PiB4KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3oKKzlmNTA2ZWU3MGUyMDM3OWQ3Zjc4MjA0Yzc3YjMzNGY0M2Q3NzQxMGQgJGNvbW1pdF9zaGEzCisyM2E0N2Q2ZWE3ZDU4OTg5NWZhZjgwMDc1MjA1NDgxOGUxZTc2MjdiICRjb21taXRfc2hhMgorYjAyZDQ1OWMzMmYwZTY4ZjJmZTA5ODEwMzNiYjM0ZjM4Nzc2YmE0NyAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeiA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK25vdGVzIGZvciBjb21taXQzCisKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCituZXcgbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK25vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugc29tZSBvZiB0aGUgaW5pdGlhbCA1IG5vdGVzICh4IC0+IHopJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy96IHJlZnMvbm90ZXMveCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ogJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJuZXcgbm90ZXMgZm9yIGNvbW1pdDIiIGNvbW1pdDIgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICJhcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0MyIgY29tbWl0MyAmJgorCWdpdCBub3RlcyByZW1vdmUgY29tbWl0NCAmJgorCWdpdCBub3RlcyByZW1vdmUgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBoYXMgbm8gZmFub3V0ICh6KScgJ3ZlcmlmeV9ub19mYW5vdXQgeicKKworY3AgZXhwZWN0X2xvZ196IGV4cGVjdF9sb2dfbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIG1lcmdlIHdpdGhvdXQgY29uZmxpY3RzICh5ID0+IHopJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMveiAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL20gJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeSAmJgorCXZlcmlmeV9ub3RlcyBtIGNvbW1pdDUgJiYKKwkjIHgveS96IHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB4IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHogY29tbWl0NQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIHN0aWxsIGhhcyBmYW5vdXQgYWZ0ZXIgbWVyZ2UgKG0pJyAndmVyaWZ5X2Zhbm91dCBtJworCitjYXQgPmV4cGVjdF9sb2dfdyA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKK290aGVyIG5vdGVzIGZvciBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCitvdGhlciBub3RlcyBmb3IgY29tbWl0MworCiskY29tbWl0X3NoYTIgY29tbWl0Mgorbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK290aGVyIG5vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRyb2R1Y2UgY29uZmxpY3RpbmcgY2hhbmdlcyAoeSAtPiB3KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvdyByZWZzL25vdGVzL3kgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy93ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAib3RoZXIgbm90ZXMgZm9yIGNvbW1pdDEiIGNvbW1pdDEgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJvdGhlciBub3RlcyBmb3IgY29tbWl0MyIgY29tbWl0MyAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gIm90aGVyIG5vdGVzIGZvciBjb21taXQ0IiBjb21taXQ0ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHcgY29tbWl0NQorJworCitjYXQgPmV4cGVjdF9sb2dfbSA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKK290aGVyIG5vdGVzIGZvciBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCitvdGhlciBub3RlcyBmb3IgY29tbWl0MworCiskY29tbWl0X3NoYTIgY29tbWl0MgorbmV3IG5vdGVzIGZvciBjb21taXQyCisKKyRjb21taXRfc2hhMSBjb21taXQxCitvdGhlciBub3RlcyBmb3IgY29tbWl0MQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCBtZXJnZSB1c2luZyAib3VycyIgc3RyYXRlZ3kgKHogPT4gdyknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy93ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvbSAmJgorCWdpdCBub3RlcyBtZXJnZSAtcyBvdXJzIHogJiYKKwl2ZXJpZnlfbm90ZXMgbSBjb21taXQ1ICYmCisJIyB3L3gveS96IHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB3IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHkgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBzdGlsbCBoYXMgZmFub3V0IGFmdGVyIG1lcmdlIChtKScgJ3ZlcmlmeV9mYW5vdXQgbScKKworY2F0ID5leHBlY3RfbG9nX20gPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1CisKKyRjb21taXRfc2hhNCBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCitub3RlcyBmb3IgY29tbWl0MworCithcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0MworCiskY29tbWl0X3NoYTIgY29tbWl0MgorbmV3IG5vdGVzIGZvciBjb21taXQyCisKKyRjb21taXRfc2hhMSBjb21taXQxCitvdGhlciBub3RlcyBmb3IgY29tbWl0MQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCBtZXJnZSB1c2luZyAidGhlaXJzIiBzdHJhdGVneSAoeiA9PiB3KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3cgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgLXMgdGhlaXJzIHogJiYKKwl2ZXJpZnlfbm90ZXMgbSBjb21taXQ1ICYmCisJIyB3L3gveS96IHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB3IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHkgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBzdGlsbCBoYXMgZmFub3V0IGFmdGVyIG1lcmdlIChtKScgJ3ZlcmlmeV9mYW5vdXQgbScKKworY2F0ID5leHBlY3RfbG9nX20gPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1CisKKyRjb21taXRfc2hhNCBjb21taXQ0CitvdGhlciBub3RlcyBmb3IgY29tbWl0NAorCiskY29tbWl0X3NoYTMgY29tbWl0Mworb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDMKKworbm90ZXMgZm9yIGNvbW1pdDMKKworYXBwZW5kZWQgbm90ZXMgZm9yIGNvbW1pdDMKKworJGNvbW1pdF9zaGEyIGNvbW1pdDIKK25ldyBub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgbWVyZ2UgdXNpbmcgInVuaW9uIiBzdHJhdGVneSAoeiA9PiB3KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3cgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgLXMgdW5pb24geiAmJgorCXZlcmlmeV9ub3RlcyBtIGNvbW1pdDUgJiYKKwkjIHcveC95L3ogdW5jaGFuZ2VkCisJdmVyaWZ5X25vdGVzIHcgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB4IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHogY29tbWl0NQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIHN0aWxsIGhhcyBmYW5vdXQgYWZ0ZXIgbWVyZ2UgKG0pJyAndmVyaWZ5X2Zhbm91dCBtJworCitjYXQgPmV4cGVjdF9sb2dfbSA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKK290aGVyIG5vdGVzIGZvciBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCithcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0Mworbm90ZXMgZm9yIGNvbW1pdDMKK290aGVyIG5vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCituZXcgbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK290aGVyIG5vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIG1lcmdlIHVzaW5nICJjYXRfc29ydF91bmlxIiBzdHJhdGVneSAoeiA9PiB3KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3cgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgLXMgY2F0X3NvcnRfdW5pcSB6ICYmCisJdmVyaWZ5X25vdGVzIG0gY29tbWl0NSAmJgorCSMgdy94L3kveiB1bmNoYW5nZWQKKwl2ZXJpZnlfbm90ZXMgdyBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHggY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB5IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjb21taXQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgc3RpbGwgaGFzIGZhbm91dCBhZnRlciBtZXJnZSAobSknICd2ZXJpZnlfZmFub3V0IG0nCisKKyMgV2UncmUgbWVyZ2luZyB6IGludG8gdy4gSGVyZSBhcmUgdGhlIGNvbmZsaWN0cyB3ZSBleHBlY3Q6CisjCisjIGNvbW1pdCB8IHggLT4gdyAgICB8IHggLT4geiAgICB8IGNvbmZsaWN0PworIyAtLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0KKyMgMSAgICAgIHwgY2hhbmdlZCAgIHwgdW5jaGFuZ2VkIHwgbm8sIHVzZSB3CisjIDIgICAgICB8IHVuY2hhbmdlZCB8IGNoYW5nZWQgICB8IG5vLCB1c2UgegorIyAzICAgICAgfCBjaGFuZ2VkICAgfCBjaGFuZ2VkICAgfCB5ZXMgKHcsIHRoZW4geiBpbiBjb25mbGljdCBtYXJrZXJzKQorIyA0ICAgICAgfCBjaGFuZ2VkICAgfCBkZWxldGVkICAgfCB5ZXMgKHcpCisjIDUgICAgICB8IGRlbGV0ZWQgICB8IGRlbGV0ZWQgICB8IG5vLCBkZWxldGVkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHRvIG1lcmdlIHVzaW5nICJtYW51YWwiIHN0cmF0ZWd5ICh6ID0+IHcpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMvdyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgc3RpbGwgaGFzIGZhbm91dCBhZnRlciBtZXJnZSAobSknICd2ZXJpZnlfZmFub3V0IG0nCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9jb25mbGljdHMKKyRjb21taXRfc2hhMworJGNvbW1pdF9zaGE0CitFT0YKKworY2F0ID5leHBlY3RfY29uZmxpY3RfJGNvbW1pdF9zaGEzIDw8RU9GCis8PDw8PDw8IHJlZnMvbm90ZXMvbQorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDMKKz09PT09PT0KK25vdGVzIGZvciBjb21taXQzCisKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCis+Pj4+Pj4+IHJlZnMvbm90ZXMvegorRU9GCisKK2NhdCA+ZXhwZWN0X2NvbmZsaWN0XyRjb21taXRfc2hhNCA8PEVPRgorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgY29uZmxpY3QgZW50cmllcyAod2l0aCBubyBmYW5vdXQpJyAnCisJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgorCSggZm9yIGYgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCXRlc3RfY21wICJleHBlY3RfY29uZmxpY3RfJGYiICIuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRmIiB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSB0aGF0IGN1cnJlbnQgbm90ZXMgdHJlZSAocHJlLW1lcmdlKSBoYXMgbm90IGNoYW5nZWQgKG0gPT0gdykKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvdykiCisnCisKK2NhdCA+ZXhwZWN0X2xvZ19tIDw8RU9GCiskY29tbWl0X3NoYTUgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK290aGVyIG5vdGVzIGZvciBjb21taXQzCisKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCituZXcgbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK290aGVyIG5vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZlIGFuZCBmaW5hbGl6ZSBtZXJnZSAoeiA9PiB3KScgJworCWNhdCA+LmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTMgPDxFT0YgJiYKK290aGVyIG5vdGVzIGZvciBjb21taXQzCisKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCitFT0YKKwlnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgJiYKKwl2ZXJpZnlfbm90ZXMgbSBjb21taXQ1ICYmCisJIyB3L3gveS96IHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB3IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHkgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBzdGlsbCBoYXMgZmFub3V0IGFmdGVyIG1lcmdlIChtKScgJ3ZlcmlmeV9mYW5vdXQgbScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDAwLXJlYmFzZS5zaCBiL3QvdDM0MDAtcmViYXNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFkZTBlYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDAwLXJlYmFzZS5zaApAQCAtMCwwICsxLDI0MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBBbW9zIFdhdGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIGFzc29ydGVkIHRlc3RzCisKK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2UgYW5kIGNoZWNrcyB0aGF0IHRoZSBhdXRob3IgaW5mb3JtYXRpb24gaXMgbm90IGxvc3QKK2Ftb25nIG90aGVyIHRoaW5ncy4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitHSVRfQVVUSE9SX05BTUU9YXV0aG9yQG5hbWUKK0dJVF9BVVRIT1JfRU1BSUw9Ym9ndXNAZW1haWxAYWRkcmVzcworZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgcmVwb3NpdG9yeSB3aXRoIHRvcGljIGJyYW5jaGVzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgdHJ1ZSAmJgorCWVjaG8gRmlyc3QgPkEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEEgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgQS4iICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvcmNlLTN3YXkgJiYKKwllY2hvIER1bW15ID5ZICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBZICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIFkuIiAmJgorCWdpdCBjaGVja291dCAtYiBmaWxlbW92ZSAmJgorCWdpdCByZXNldCAtLXNvZnQgbWFzdGVyICYmCisJbWtkaXIgRCAmJgorCWdpdCBtdiBBIEQvQSAmJgorCWdpdCBjb21taXQgLW0gIk1vdmUgQS4iICYmCisJZ2l0IGNoZWNrb3V0IC1iIG15LXRvcGljLWJyYW5jaCBtYXN0ZXIgJiYKKwllY2hvIFNlY29uZCA+QiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQiAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBCLiIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZWNobyBUaGlyZCA+PkEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IEEgJiYKKwlnaXQgY29tbWl0IC1tICJNb2RpZnkgQS4iICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgbXktdG9waWMtYnJhbmNoICYmCisJZWNobyBTaWRlID4+QyAmJgorCWdpdCBhZGQgQyAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBDIiAmJgorCWdpdCBjaGVja291dCAtYiBub25saW5lYXIgbXktdG9waWMtYnJhbmNoICYmCisJZWNobyBFZGl0ID4+QiAmJgorCWdpdCBhZGQgQiAmJgorCWdpdCBjb21taXQgLW0gIk1vZGlmeSBCIiAmJgorCWdpdCBtZXJnZSBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHVwc3RyZWFtLW1lcmdlZC1ub25saW5lYXIgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1mIG15LXRvcGljLWJyYW5jaCAmJgorCWdpdCB0YWcgdG9waWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIGRpcnR5IHdvcmt0cmVlJyAnCisJZWNobyBkaXJ0eSA+PkEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugb24gZGlydHkgY2FjaGUnICcKKwlnaXQgYWRkIEEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXInICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwlnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXIgdHdpY2UnICcKKwlnaXQgcmViYXNlIG1hc3RlciA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggbXktdG9waWMtYnJhbmNoIGlzIHVwIHRvIGRhdGUiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXIgdHdpY2Ugd2l0aCAtLWZvcmNlJyAnCisJZ2l0IHJlYmFzZSAtLWZvcmNlLXJlYmFzZSBtYXN0ZXIgPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIkN1cnJlbnQgYnJhbmNoIG15LXRvcGljLWJyYW5jaCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFnYWluc3QgbWFzdGVyIHR3aWNlIGZyb20gYW5vdGhlciBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgbXktdG9waWMtYnJhbmNoXiAmJgorCWdpdCByZWJhc2UgbWFzdGVyIG15LXRvcGljLWJyYW5jaCA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggbXktdG9waWMtYnJhbmNoIGlzIHVwIHRvIGRhdGUiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZmFzdC1mb3J3YXJkIHRvIG1hc3RlcicgJworCWdpdCBjaGVja291dCBteS10b3BpYy1icmFuY2heICYmCisJZ2l0IHJlYmFzZSBteS10b3BpYy1icmFuY2ggPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIkZhc3QtZm9yd2FyZGVkIEhFQUQgdG8gbXktdG9waWMtYnJhbmNoIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIHJlYmFzZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGRlc3Ryb3llZCBhdXRob3IgaW5mb3JtYXRpb24nICcKKwkhIChnaXQgbG9nIHwgZ3JlcCAiQXV0aG9yOiIgfCBncmVwICI8PiIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSByZWJhc2Ugb3BlcmF0aW9uIHNob3VsZCBub3QgaGF2ZSBkZXN0cm95ZWQgYXV0aG9yIGluZm9ybWF0aW9uICgyKScgIgorCWdpdCBsb2cgLTEgfAorCWdyZXAgJ0F1dGhvcjogJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+JworIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIRUFEIHdhcyBkZXRhY2hlZCBkdXJpbmcgcmViYXNlJyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBREB7MX0pICE9ICQoZ2l0IHJldi1wYXJzZSBteS10b3BpYy1icmFuY2hAezF9KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWZ0ZXIgbWVyZ2UgbWFzdGVyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCB0b3BpYyAmJgorCWdpdCBtZXJnZSBtYXN0ZXIgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCSEgKGdpdCBzaG93IHwgZ3JlcCAiXk1lcmdlOiIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBvZiBoaXN0b3J5IHdpdGggbWVyZ2VzIGlzIGxpbmVhcml6ZWQnICcKKwlnaXQgY2hlY2tvdXQgbm9ubGluZWFyICYmCisJdGVzdCA0ID0gJChnaXQgcmV2LWxpc3QgbWFzdGVyLi4gfCB3YyAtbCkgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCXRlc3QgMyA9ICQoZ2l0IHJldi1saXN0IG1hc3Rlci4uIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBvZiBoaXN0b3J5IHdpdGggbWVyZ2VzIGFmdGVyIHVwc3RyZWFtIG1lcmdlIGlzIGxpbmVhcml6ZWQnICcKKwlnaXQgY2hlY2tvdXQgdXBzdHJlYW0tbWVyZ2VkLW5vbmxpbmVhciAmJgorCXRlc3QgNSA9ICQoZ2l0IHJldi1saXN0IG1hc3Rlci4uIHwgd2MgLWwpICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwl0ZXN0IDMgPSAkKGdpdCByZXYtbGlzdCBtYXN0ZXIuLiB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYSBzaW5nbGUgbW9kZSBjaGFuZ2UnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyAxID5YICYmCisJZ2l0IGFkZCBYICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBwcmVwYXJlICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1vZGVjaGFuZ2UgSEVBRF4gJiYKKwllY2hvIDEgPlggJiYKKwlnaXQgYWRkIFggJiYKKwl0ZXN0X2NobW9kICt4IEEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG1vZGVjaGFuZ2UgJiYKKwlHSVRfVFJBQ0U9MSBnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgaXMgbm90IGJyb2tlbiBieSBkaWZmLnJlbmFtZXMnICcKKwlnaXQgY29uZmlnIGRpZmYucmVuYW1lcyBjb3BpZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS11bnNldCBkaWZmLnJlbmFtZXMiICYmCisJZ2l0IGNoZWNrb3V0IGZpbGVtb3ZlICYmCisJR0lUX1RSQUNFPTEgZ2l0IHJlYmFzZSBmb3JjZS0zd2F5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiByZWNvdmVyJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbW9kZWNoYW5nZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTaG93IHZlcmJvc2UgZXJyb3Igd2hlbiBIRUFEIGNvdWxkIG5vdCBiZSBkZXRhY2hlZCcgJworCT5CICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSB0b3BpYyAyPm91dHB1dC5lcnIgPm91dHB1dC5vdXQgJiYKKwlncmVwICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6IiBvdXRwdXQuZXJyICYmCisJZ3JlcCBCIG91dHB1dC5lcnIKKycKK3JtIC1mIEIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB3aGVuIHVwc3RyZWFtIGFyZyBpcyBtaXNzaW5nIGFuZCBub3Qgb24gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHdoZW4gdXBzdHJlYW0gYXJnIGlzIG1pc3NpbmcgYW5kIG5vdCBjb25maWd1cmVkJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG5vLWNvbmZpZyB0b3BpYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCB0byBAe3Vwc3RyZWFtfSB3aGVuIHVwc3RyZWFtIGFyZyBpcyBtaXNzaW5nJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGRlZmF1bHQgdG9waWMgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5kZWZhdWx0LnJlbW90ZSAuICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZGVmYXVsdC5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCByZWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgZGVmYXVsdH4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtcSBpcyBxdWlldCcgJworCWdpdCBjaGVja291dCAtYiBxdWlldCB0b3BpYyAmJgorCWdpdCByZWJhc2UgLXEgbWFzdGVyID5vdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZWJhc2UgYSBjb21taXQgdGhhdCBzcHJpbmtsZXMgQ1JzIGluJyAnCisJKAorCQllY2hvICJPbmUiCisJCWVjaG8gIlR3b1EiCisJCWVjaG8gIlRocmVlIgorCQllY2hvICJGUXVyIgorCQllY2hvICJGaXZlIgorCSkgfCBxX3RvX2NyID5DUiAmJgorCWdpdCBhZGQgQ1IgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJBIGZpbGUgd2l0aCBhIGxpbmUgd2l0aCBDUiIgJiYKKwlnaXQgdGFnIGZpbGUtd2l0aC1jciAmJgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlnaXQgcmViYXNlIC0tb250byBIRUFEXl4gSEVBRF4gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBmaWxlLXdpdGgtY3I6Q1IgSEVBRDpDUgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgY2FuIGNvcHkgbm90ZXMnICcKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGUucmViYXNlIHRydWUgJiYKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwl0ZXN0X2NvbW1pdCBuMSAmJgorCXRlc3RfY29tbWl0IG4yICYmCisJdGVzdF9jb21taXQgbjMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tImEgbm90ZSIgbjMgJiYKKwlnaXQgcmViYXNlIC0tb250byBuMSBuMiAmJgorCXRlc3QgImEgbm90ZSIgPSAiJChnaXQgbm90ZXMgc2hvdyBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1tIGNhbiBjb3B5IG5vdGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBuMyAmJgorCWdpdCByZWJhc2UgLW0gLS1vbnRvIG4xIG4yICYmCisJdGVzdCAiYSBub3RlIiA9ICIkKGdpdCBub3RlcyBzaG93IEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgY29tbWl0IHdpdGggYW4gYW5jaWVudCB0aW1lc3RhbXAnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwk+b2xkLm9uZSAmJiBnaXQgYWRkIG9sZC5vbmUgJiYgdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWRhdGU9IkAxMjM0NSArMDQwMCIgLW0gIk9sZCBvbmUiICYmCisJPm9sZC50d28gJiYgZ2l0IGFkZCBvbGQudHdvICYmIHRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1kYXRlPSJAMjM0NTYgKzA1MDAiIC1tICJPbGQgdHdvIiAmJgorCT5vbGQudGhyZWUgJiYgZ2l0IGFkZCBvbGQudGhyZWUgJiYgdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWRhdGU9IkAzNDU2NyArMDYwMCIgLW0gIk9sZCB0aHJlZSIgJiYKKworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF5eID5hY3R1YWwgJiYKKwlncmVwICJhdXRob3IgLiogMTIzNDUgKzA0MDAkIiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5hY3R1YWwgJiYKKwlncmVwICJhdXRob3IgLiogMjM0NTYgKzA1MDAkIiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFjdHVhbCAmJgorCWdyZXAgImF1dGhvciAuKiAzNDU2NyArMDYwMCQiIGFjdHVhbCAmJgorCisJZ2l0IHJlYmFzZSAtLW9udG8gSEVBRF5eIEhFQUReICYmCisKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFjdHVhbCAmJgorCWdyZXAgImF1dGhvciAuKiAzNDU2NyArMDYwMCQiIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDEtcmViYXNlLXBhcnRpYWwuc2ggYi90L3QzNDAxLXJlYmFzZS1wYXJ0aWFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4ZjQ4MjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDAxLXJlYmFzZS1wYXJ0aWFsLnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgWWFubiBEaXJzb24sIGJhc2VkIG9uIHQzNDAwIGJ5IEFtb3MgV2F0ZXJsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2Ugc2hvdWxkIGRldGVjdCBwYXRjaGVzIGludGVncmF0ZWQgdXBzdHJlYW0KKworVGhpcyB0ZXN0IGNoZXJyeS1waWNrcyBvbmUgbG9jYWwgY2hhbmdlIG9mIHR3byBpbnRvIG1hc3RlciBicmFuY2gsIGFuZAorY2hlY2tzIHRoYXQgZ2l0IHJlYmFzZSBzdWNjZWVkcyB3aXRoIG9ubHkgdGhlIHNlY29uZCBwYXRjaCBpbiB0aGUKK2xvY2FsIGJyYW5jaC4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHJlcG9zaXRvcnkgd2l0aCB0b3BpYyBicmFuY2gnICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJZ2l0IGNoZWNrb3V0IC1iIG15LXRvcGljLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IEEyIEEudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwaWNrIHRvcCBwYXRjaCBmcm9tIHRvcGljIGJyYW5jaCBpbnRvIG1hc3RlcicgJworCWdpdCBjaGVycnktcGljayBDICYmCisJZ2l0IGNoZWNrb3V0IC1mIG15LXRvcGljLWJyYW5jaAorJworCit0ZXN0X2RlYnVnICcKKwlnaXQgY2hlcnJ5IG1hc3RlciAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLWsgLS1zdGRvdXQgLS1mdWxsLWluZGV4IG1hc3RlciA+L2Rldi9udWxsICYmCisJZ2l0ayAtLWFsbCAmIHNsZWVwIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHRvcGljIGJyYW5jaCBhZ2FpbnN0IG5ldyBtYXN0ZXIgYW5kIGNoZWNrIGdpdCBhbSBkaWQgbm90IGdldCBoYWx0ZWQnICcKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIHRvcGljIGJyYW5jaCB0aGF0IHdhcyBwYXJ0aWFsbHkgbWVyZ2VkIHVwc3RyZWFtJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBDICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLW1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBpZ25vcmVzIGVtcHR5IGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgQSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCXRlc3RfY29tbWl0IEQgJiYKKwlnaXQgcmViYXNlIEMgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLS1mb3JtYXQ9JXMgQy4uKSIgPSAiRCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0ta2VlcC1lbXB0eScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWdpdCByZWJhc2UgLS1rZWVwLWVtcHR5IEMgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLS1mb3JtYXQ9JXMgQy4uKSIgPSAiRAorZW1wdHkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWtlZXAtZW1wdHkga2VlcHMgZW1wdHkgZXZlbiBpZiBhbHJlYWR5IGluIHVwc3RyZWFtJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBBICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGFsc28tZW1wdHkgJiYKKwlnaXQgcmViYXNlIC0ta2VlcC1lbXB0eSBEICYmCisJdGVzdCAiJChnaXQgbG9nIC0tZm9ybWF0PSVzIEEuLikiID0gImFsc28tZW1wdHkKK0QKK2VtcHR5IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDItcmViYXNlLW1lcmdlLnNoIGIvdC90MzQwMi1yZWJhc2UtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmU4YzFkNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDItcmViYXNlLW1lcmdlLnNoCkBAIC0wLDAgKzEsMTQxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1tZXJnZSB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKworVD0iQSBxdWljayBicm93biBmb3gKK2p1bXBzIG92ZXIgdGhlIGxhenkgZG9nLiIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWVjaG8gIiRpICRUIgorZG9uZSA+b3JpZ2luYWwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGFkZCBvcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLW0iaW5pdGlhbCIgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwllY2hvICIxMSAkVCIgPj5vcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLWEgLW0ibWFzdGVyIHVwZGF0ZXMgYSBiaXQuIiAmJgorCisJZWNobyAiMTIgJFQiID4+b3JpZ2luYWwgJiYKKwlnaXQgY29tbWl0IC1hIC1tIm1hc3RlciB1cGRhdGVzIGEgYml0IG1vcmUuIiAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwkoZWNobyAiMCAkVCIgOyBjYXQgb3JpZ2luYWwpID5yZW5hbWVkICYmCisJZ2l0IGFkZCByZW5hbWVkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSBvcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLWEgLW0ic2lkZSByZW5hbWVzIGFuZCBlZGl0cy4iICYmCisKKwl0ciAiW2Etel0iICJbQS1aXSIgPG9yaWdpbmFsID5uZXdmaWxlICYmCisJZ2l0IGFkZCBuZXdmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSJzaWRlIGVkaXRzIGZ1cnRoZXIuIiAmJgorCisJdHIgIlthLW1dIiAiW0EtTV0iIDxvcmlnaW5hbCA+bmV3ZmlsZSAmJgorCXJtIC1mIG9yaWdpbmFsICYmCisJZ2l0IGNvbW1pdCAtYSAtbSJzaWRlIGVkaXRzIG9uY2UgYWdhaW4uIiAmJgorCisJZ2l0IGJyYW5jaCB0ZXN0LXJlYmFzZSBzaWRlICYmCisJZ2l0IGJyYW5jaCB0ZXN0LXJlYmFzZS1waWNrIHNpZGUgJiYKKwlnaXQgYnJhbmNoIHRlc3QtcmVmZXJlbmNlLXBpY2sgc2lkZSAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0LW1lcmdlIHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmZXJlbmNlIG1lcmdlJyAnCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSAicmVmZXJlbmNlIG1lcmdlIiBIRUFEIG1hc3RlcgorJworCitQUkVfUkVCQVNFPSQoZ2l0IHJldi1wYXJzZSB0ZXN0LXJlYmFzZSkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcmViYXNlICcKKwlnaXQgY2hlY2tvdXQgdGVzdC1yZWJhc2UgJiYKKwlHSVRfVFJBQ0U9MSBnaXQgcmViYXNlIC0tbWVyZ2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QtcmViYXNlQHsxfSBpcyBwcmUgcmViYXNlJyAnCisJdGVzdCAkUFJFX1JFQkFTRSA9ICQoZ2l0IHJldi1wYXJzZSB0ZXN0LXJlYmFzZUB7MX0pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGFuZCByZWJhc2Ugc2hvdWxkIG1hdGNoJyAnCisJZ2l0IGRpZmYtdHJlZSAtciB0ZXN0LXJlYmFzZSB0ZXN0LW1lcmdlID5kaWZmZXJlbmNlICYmCisJaWYgdGVzdCAtcyBkaWZmZXJlbmNlCisJdGhlbgorCQljYXQgZGlmZmVyZW5jZQorCQkoZXhpdCAxKQorCWVsc2UKKwkJZWNobyBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB0aGUgb3RoZXIgd2F5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2Ugc2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLVh0aGVpcnMnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3RpbmcgbWFzdGVyfjIgJiYKKwllY2hvICJBQiAkVCIgPj4gb3JpZ2luYWwgJiYKKwlnaXQgY29tbWl0IC1tY29uZmxpY3Rpbmcgb3JpZ2luYWwgJiYKKwlnaXQgcmViYXNlIC1YdGhlaXJzIG1hc3RlciAmJgorCWdyZXAgQUIgb3JpZ2luYWwgJiYKKwkhIGdyZXAgMTEgb3JpZ2luYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYW5kIHJlYmFzZSBzaG91bGQgbWF0Y2gnICcKKwlnaXQgZGlmZi10cmVlIC1yIHRlc3QtcmViYXNlIHRlc3QtbWVyZ2UgPmRpZmZlcmVuY2UgJiYKKwlpZiB0ZXN0IC1zIGRpZmZlcmVuY2UKKwl0aGVuCisJCWNhdCBkaWZmZXJlbmNlCisJCShleGl0IDEpCisJZWxzZQorCQllY2hvIGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGlja2luZyByZWJhc2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgLS1vbnRvIG1hc3RlciBzaWRlXl4gJiYKKwltYj0kKGdpdCBtZXJnZS1iYXNlIG1hc3RlciBIRUFEKSAmJgorCWlmIHRlc3QgIiRtYiIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiCisJdGhlbgorCQllY2hvIGhhcHB5CisJZWxzZQorCQlnaXQgc2hvdy1icmFuY2gKKwkJKGV4aXQgMSkKKwlmaSAmJgorCWY9JChnaXQgZGlmZi10cmVlIC0tbmFtZS1vbmx5IEhFQUReIEhFQUQpICYmCisJZz0kKGdpdCBkaWZmLXRyZWUgLS1uYW1lLW9ubHkgSEVBRF5eIEhFQUReKSAmJgorCWNhc2UgIiRmLCRnIiBpbgorCW5ld2ZpbGUsbmV3ZmlsZSkKKwkJZWNobyBoYXBweSA7OworCSopCisJCWVjaG8gIiRmIgorCQllY2hvICIkZyIKKwkJKGV4aXQgMSkKKwllc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtcyBmdW5ueSAtWG9wdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIHRlc3QtYmluIGZ1bm55Lndhcy5ydW4iICYmCisJbWtkaXIgdGVzdC1iaW4gJiYKKwljYXQgPnRlc3QtYmluL2dpdC1tZXJnZS1mdW5ueSA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisJY2FzZSAiXCQxIiBpbiAtLW9wdCkgOzsgKikgZXhpdCAyIDs7IGVzYWMKKwlzaGlmdCAmJgorCT5mdW5ueS53YXMucnVuICYmCisJZXhlYyBnaXQgbWVyZ2UtcmVjdXJzaXZlICJcJEAiCisJRU9GCisJY2htb2QgK3ggdGVzdC1iaW4vZ2l0LW1lcmdlLWZ1bm55ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0LWZ1bm55IG1hc3Rlcl4gJiYKKwl0ZXN0X2NvbW1pdCBmdW5ueSAmJgorCSgKKwkJUEFUSD0uL3Rlc3QtYmluOiRQQVRICisJCWdpdCByZWJhc2UgLXMgZnVubnkgLVhvcHQgbWFzdGVyCisJKSAmJgorCXRlc3QgLWYgZnVubnkud2FzLnJ1bgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDMtcmViYXNlLXNraXAuc2ggYi90L3QzNDAzLXJlYmFzZS1za2lwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyNjUwMGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDAzLXJlYmFzZS1za2lwLnNoCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1tZXJnZSAtLXNraXAgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIHdlIGFzc3VtZSB0aGUgZGVmYXVsdCBnaXQgYW0gLTMgLS1za2lwIHN0cmF0ZWd5IGlzIHRlc3RlZCBpbmRlcGVuZGVudGx5CisjIGFuZCBhbHdheXMgd29ya3MgOikKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+IGhlbGxvICYmCisJZ2l0IGFkZCBoZWxsbyAmJgorCWdpdCBjb21taXQgLW0gImhlbGxvIiAmJgorCWdpdCBicmFuY2ggc2tpcC1yZWZlcmVuY2UgJiYKKworCWVjaG8gd29ybGQgPj4gaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJoZWxsbyB3b3JsZCIgJiYKKwllY2hvIGdvb2RieWUgPj4gaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJnb29kYnllIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1mIHNraXAtcmVmZXJlbmNlICYmCisJZWNobyBtb28gPiBoZWxsbyAmJgorCWdpdCBjb21taXQgLWEgLW0gIndlIHNob3VsZCBza2lwIHRoaXMiICYmCisJZWNobyBtb28gPiBjb3cgJiYKKwlnaXQgYWRkIGNvdyAmJgorCWdpdCBjb21taXQgLW0gInRoaXMgc2hvdWxkIG5vdCBiZSBza2lwcGVkIiAmJgorCWdpdCBicmFuY2ggcHJlLXJlYmFzZSBza2lwLXJlZmVyZW5jZSAmJgorCWdpdCBicmFuY2ggc2tpcC1tZXJnZSBza2lwLXJlZmVyZW5jZQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdpdGggZ2l0IGFtIC0zIChkZWZhdWx0KScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXNraXAgY2FuIG5vdCBiZSB1c2VkIHdpdGggb3RoZXIgb3B0aW9ucycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXYgLS1za2lwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXNraXAgLXYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tc2tpcCB3aXRoIGFtIC0zJyAnCisJZ2l0IHJlYmFzZSAtLXNraXAKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBtb3ZlcyBiYWNrIHRvIHNraXAtcmVmZXJlbmNlJyAnCisJdGVzdCByZWZzL2hlYWRzL3NraXAtcmVmZXJlbmNlID0gJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpICYmCisJZ2l0IGJyYW5jaCBwb3N0LXJlYmFzZSAmJgorCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyICYmCisJZWNobyAiaGVsbG8iID4gaGVsbG8gJiYKKwlnaXQgYWRkIGhlbGxvICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCByZWZzL2hlYWRzL3NraXAtcmVmZXJlbmNlID0gJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBwb3N0LXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBza2lwLW1lcmdlJyAnZ2l0IGNoZWNrb3V0IC1mIHNraXAtbWVyZ2UnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIC0tbWVyZ2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tbWVyZ2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXNraXAgd2l0aCAtLW1lcmdlJyAnCisJZ2l0IHJlYmFzZSAtLXNraXAKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGFuZCByZWZlcmVuY2UgdHJlZXMgZXF1YWwnIFwKKwkndGVzdCAteiAiYGdpdCBkaWZmLXRyZWUgc2tpcC1tZXJnZSBza2lwLXJlZmVyZW5jZWAiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZlZCBiYWNrIHRvIGJyYW5jaCBjb3JyZWN0bHknICcKKwl0ZXN0IHJlZnMvaGVhZHMvc2tpcC1tZXJnZSA9ICQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKQorJworCit0ZXN0X2RlYnVnICdnaXRrIC0tYWxsICYgc2xlZXAgMScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaCBiL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyZmRjOTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaApAQCAtMCwwICsxLDk0MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgaW50ZXJhY3RpdmUKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IHJlYmFzZSAiaW50ZXJhY3RpdmVseSIsIGJ5IGZha2luZyBhbiBlZGl0LCBhbmQgdmVyaWZpZXMKK3RoYXQgdGhlIHJlc3VsdCBzdGlsbCBtYWtlcyBzZW5zZS4KKworSW5pdGlhbCBzZXR1cDoKKworICAgICBvbmUgLSB0d28gLSB0aHJlZSAtIGZvdXIgKGNvbmZsaWN0LWJyYW5jaCkKKyAgIC8KKyBBIC0gQiAtIEMgLSBEIC0gRSAgICAgICAgICAgIChtYXN0ZXIpCisgfCBcCisgfCAgIEYgLSBHIC0gSCAgICAgICAgICAgICAgICAoYnJhbmNoMSkKKyB8ICAgICBcCisgfFwgICAgICBJICAgICAgICAgICAgICAgICAgICAoYnJhbmNoMikKKyB8IFwKKyB8ICAgSiAtIEsgLSBMIC0gTSAgICAgICAgICAgIChuby1jb25mbGljdC1icmFuY2gpCisgIFwKKyAgICBOIC0gTyAtIFAgICAgICAgICAgICAgICAgIChuby1mZi1icmFuY2gpCisKKyB3aGVyZSBBLCBCLCBEIGFuZCBHIGFsbCB0b3VjaCBmaWxlMSwgYW5kIG9uZSwgdHdvLCB0aHJlZSwgZm91ciBhbGwKKyB0b3VjaCBmaWxlICJjb25mbGljdCIuCisnCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3Rlc3RfY21wX3JldiAoKSB7CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiID5leHBlY3QucmV2ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDIiID5hY3R1YWwucmV2ICYmCisJdGVzdF9jbXAgZXhwZWN0LnJldiBhY3R1YWwucmV2Cit9CisKK3NldF9mYWtlX2VkaXRvcgorCisjIFdBUk5JTkc6IE1vZGlmaWNhdGlvbnMgdG8gdGhlIGluaXRpYWwgcmVwb3NpdG9yeSBjYW4gY2hhbmdlIHRoZSBTSEEgSUQgdXNlZAorIyBpbiB0aGUgZXhwZWN0MiBmaWxlIGZvciB0aGUgJ3N0b3Agb24gY29uZmxpY3RpbmcgcGljaycgdGVzdC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBBIGZpbGUxICYmCisJdGVzdF9jb21taXQgQiBmaWxlMSAmJgorCXRlc3RfY29tbWl0IEMgZmlsZTIgJiYKKwl0ZXN0X2NvbW1pdCBEIGZpbGUxICYmCisJdGVzdF9jb21taXQgRSBmaWxlMyAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gxIEEgJiYKKwl0ZXN0X2NvbW1pdCBGIGZpbGU0ICYmCisJdGVzdF9jb21taXQgRyBmaWxlMSAmJgorCXRlc3RfY29tbWl0IEggZmlsZTUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBGICYmCisJdGVzdF9jb21taXQgSSBmaWxlNiAmJgorCWdpdCBjaGVja291dCAtYiBjb25mbGljdC1icmFuY2ggQSAmJgorCXRlc3RfY29tbWl0IG9uZSBjb25mbGljdCAmJgorCXRlc3RfY29tbWl0IHR3byBjb25mbGljdCAmJgorCXRlc3RfY29tbWl0IHRocmVlIGNvbmZsaWN0ICYmCisJdGVzdF9jb21taXQgZm91ciBjb25mbGljdCAmJgorCWdpdCBjaGVja291dCAtYiBuby1jb25mbGljdC1icmFuY2ggQSAmJgorCXRlc3RfY29tbWl0IEogZmlsZUogJiYKKwl0ZXN0X2NvbW1pdCBLIGZpbGVLICYmCisJdGVzdF9jb21taXQgTCBmaWxlTCAmJgorCXRlc3RfY29tbWl0IE0gZmlsZU0gJiYKKwlnaXQgY2hlY2tvdXQgLWIgbm8tZmYtYnJhbmNoIEEgJiYKKwl0ZXN0X2NvbW1pdCBOIGZpbGVOICYmCisJdGVzdF9jb21taXQgTyBmaWxlTyAmJgorCXRlc3RfY29tbWl0IFAgZmlsZVAKKycKKworIyAiZXhlYyIgY29tbWFuZHMgYXJlIHJhbiB3aXRoIHRoZSB1c2VyIHNoZWxsIGJ5IGRlZmF1bHQsIGJ1dCB0aGlzIG1heQorIyBiZSBub24tUE9TSVguIEZvciBleGFtcGxlLCBpZiBTSEVMTD16c2ggdGhlbiAiPmZpbGUiIGRvZXNuJ3Qgd29yaworIyB0byBjcmVhdGUgYSBmaWxlLiBVbnNldGluZyBTSEVMTCBhdm9pZHMgc3VjaCBub24tcG9ydGFibGUgYmVoYXZpb3IKKyMgaW4gdGVzdHMuIEl0IG11c3QgYmUgZXhwb3J0ZWQgZm9yIGl0IHRvIHRha2UgZWZmZWN0IHdoZXJlIG5lZWRlZC4KK1NIRUxMPQorZXhwb3J0IFNIRUxMCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIHRoZSBleGVjIGNvbW1hbmQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJKAorCUZBS0VfTElORVM9IjEgZXhlY18+dG91Y2gtb25lCisJCTIgZXhlY18+dG91Y2gtdHdvIGV4ZWNfZmFsc2UgZXhlY18+dG91Y2gtdGhyZWUKKwkJMyA0IGV4ZWNfPlwidG91Y2gtZmlsZV9fbmFtZV93aXRoX3NwYWNlc1wiO18+dG91Y2gtYWZ0ZXItc2VtaWNvbG9uIDUiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIEEKKwkpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdG91Y2gtb25lICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdG91Y2gtdHdvICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdG91Y2gtdGhyZWUgIiAoc2hvdWxkIGhhdmUgc3RvcHBlZCBiZWZvcmUpIiAmJgorCXRlc3RfY21wX3JldiBDIEhFQUQgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0b3VjaC10aHJlZSAmJgorCXRlc3RfcGF0aF9pc19maWxlICJ0b3VjaC1maWxlICBuYW1lIHdpdGggc3BhY2VzIiAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRvdWNoLWFmdGVyLXNlbWljb2xvbiAmJgorCXRlc3RfY21wX3JldiBtYXN0ZXIgSEVBRCAmJgorCXJtIC1mIHRvdWNoLSoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggdGhlIGV4ZWMgY29tbWFuZCBydW5zIGZyb20gdHJlZSByb290JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCW1rZGlyIHN1YmRpciAmJiAoY2Qgc3ViZGlyICYmCisJRkFLRV9MSU5FUz0iMSBleGVjXz50b3VjaC1zdWJkaXIiIFwKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXgorCSkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0b3VjaC1zdWJkaXIgJiYKKwlybSAtZnIgc3ViZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIHRoZSBleGVjIGNvbW1hbmQgY2hlY2tzIHRyZWUgY2xlYW5uZXNzJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSgKKwlGQUtFX0xJTkVTPSJleGVjX2VjaG9fZm9vXz5maWxlMSAxIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBIRUFEXgorCSkgJiYKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyXiBIRUFEICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgd2l0aCBleGVjIG9mIGluZXhpc3RlbnQgY29tbWFuZCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJRkFLRV9MSU5FUz0iZXhlY190aGlzLWNvbW1hbmQtZG9lcy1ub3QtZXhpc3QgMSIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgSEVBRF4gPmFjdHVhbCAyPiYxCisJKSAmJgorCSEgZ3JlcCAiTWF5YmUgZ2l0LXJlYmFzZSBpcyBicm9rZW4iIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGFuZ2VzIGFyZSBhIG5vcCcgJworCWdpdCBjaGVja291dCBicmFuY2gyICYmCisJZ2l0IHJlYmFzZSAtaSBGICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDIiICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aGUgW2JyYW5jaF0gb3B0aW9uJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGRlYWQtZW5kICYmCisJZ2l0IHJtIGZpbGU2ICYmCisJZ2l0IGNvbW1pdCAtbSAic3RvcCBoZXJlIiAmJgorCWdpdCByZWJhc2UgLWkgRiBicmFuY2gyICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDIiICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBJKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tb250byA8YnJhbmNoPicgJworCWdpdCBjaGVja291dCAtYiB0ZXN0LW9udG8gYnJhbmNoMiAmJgorCWdpdCByZWJhc2UgLWkgLS1vbnRvIGJyYW5jaDEgRiAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy90ZXN0LW9udG8iICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDEpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIHRvcCBvZiBhIG5vbi1jb25mbGljdGluZyBjb21taXQnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCWdpdCB0YWcgb3JpZ2luYWwtYnJhbmNoMSAmJgorCWdpdCByZWJhc2UgLWkgYnJhbmNoMiAmJgorCXRlc3QgZmlsZTYgPSAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5IG9yaWdpbmFsLWJyYW5jaDEpICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDEiICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBJKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBmb3IgdGhlIGJyYW5jaCBzaG93cyBzdGF0ZSBiZWZvcmUgcmViYXNlJyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMUB7MX0pID0gJChnaXQgcmV2LXBhcnNlIG9yaWdpbmFsLWJyYW5jaDEpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2hhbmdlIHR3byBjb21taXRzJyAnCisJRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIEhFQUR+MiAmJgorCXRlc3QgSCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgRyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCitpbmRleCBmNzBmMTBlLi5mZDc5MjM1IDEwMDY0NAorLS0tIGEvZmlsZTEKKysrKyBiL2ZpbGUxCitAQCAtMSArMSBAQAorLUEKKytHCitFT0YKKworY2F0ID4gZXhwZWN0MiA8PCBFT0YKKzw8PDw8PDwgSEVBRAorRAorPT09PT09PQorRworPj4+Pj4+PiA1ZDE4ZTU0Li4uIEcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdG9wIG9uIGNvbmZsaWN0aW5nIHBpY2snICcKKwlnaXQgdGFnIG5ldy1icmFuY2gxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvcmViYXNlLW1lcmdlL3BhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0MiBmaWxlMSAmJgorCXRlc3QgIiQoZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyB8CisJCXNlZCAtbiAtZSAiL15VL3MvXlVbXmEtel0qLy9wIikiID0gZmlsZTEgJiYKKwl0ZXN0IDQgPSAkKGdyZXAgLXYgIl4jIiA8IC5naXQvcmViYXNlLW1lcmdlL2RvbmUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgPSAkKGdyZXAgLWMgIl5bXiNdIiA8IC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQnICcKKwlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBuZXctYnJhbmNoMSkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkiID0gInJlZnMvaGVhZHMvYnJhbmNoMSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYm9ydCB3aXRoIGVycm9yIHdoZW4gbmV3IGJhc2UgY2Fubm90IGJlIGNoZWNrZWQgb3V0JyAnCisJZ2l0IHJtIC0tY2FjaGVkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGUgaW4gYmFzZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIG1hc3RlciA+IG91dHB1dCAyPiYxICYmCisJZ3JlcCAiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OiIgXAorCQlvdXRwdXQgJiYKKwlncmVwICJmaWxlMSIgb3V0cHV0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtbWVyZ2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldGFpbiBhdXRob3JzaGlwJyAnCisJZWNobyBBID4gZmlsZTcgJiYKKwlnaXQgYWRkIGZpbGU3ICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPSJUd2VycCBTbm9nIiBnaXQgY29tbWl0IC1tICJkaWZmZXJlbnQgYXV0aG9yIiAmJgorCWdpdCB0YWcgdHdlcnAgJiYKKwlnaXQgcmViYXNlIC1pIC0tb250byBtYXN0ZXIgSEVBRF4gJiYKKwlnaXQgc2hvdyBIRUFEIHwgZ3JlcCAiXkF1dGhvcjogVHdlcnAgU25vZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCB0d2VycCAmJgorCWVjaG8gQiA+IGZpbGU3ICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPSJOaXRmb2wiIGdpdCBjb21taXQgLW0gIm5pdGZvbCIgZmlsZTcgJiYKKwllY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiICYmCisJRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKKwkJZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyIEhFQUR+MiAmJgorCXRlc3QgQiA9ICQoY2F0IGZpbGU3KSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldGFpbiBhdXRob3JzaGlwIHdoZW4gc3F1YXNoaW5nJyAnCisJZ2l0IHNob3cgSEVBRCB8IGdyZXAgIl5BdXRob3I6IFR3ZXJwIFNub2ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1wIGhhbmRsZXMgIm5vIGNoYW5nZXMiIGdyYWNlZnVsbHknICcKKwlIRUFEPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZWJhc2UgLWkgLXAgSEVBRF4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS0gJiYKKwl0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2V4Y2hhbmdlIHR3byBjb21taXRzIHdpdGggLXAnICcKKwlnaXQgY2hlY2tvdXQgSCAmJgorCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSAtcCBIRUFEfjIgJiYKKwl0ZXN0IEggPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IEcgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVzZXJ2ZSBtZXJnZXMgd2l0aCAtcCcgJworCWdpdCBjaGVja291dCAtYiB0by1iZS1wcmVzZXJ2ZWQgbWFzdGVyXiAmJgorCTogPiB1bnJlbGF0ZWQtZmlsZSAmJgorCWdpdCBhZGQgdW5yZWxhdGVkLWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJ1bnJlbGF0ZWQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXItYnJhbmNoIG1hc3RlciAmJgorCWVjaG8gQiA+IGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBKIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIHRvLWJlLXByZXNlcnZlZCAmJgorCWVjaG8gQyA+IGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBLIGZpbGUxICYmCisJZWNobyBEID4gZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEwxIGZpbGUxICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZWNobyAxID4gdW5yZWxhdGVkLWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEwyIHVucmVsYXRlZC1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIGFub3RoZXItYnJhbmNoICYmCisJZWNobyBFID4gZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIE0gZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdG8tYmUtcmViYXNlZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLWkgLXAgLS1vbnRvIGJyYW5jaDEgbWFzdGVyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRH42KSA9ICQoZ2l0IHJldi1wYXJzZSBicmFuY2gxKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUR+NF4yKSA9ICQoZ2l0IHJldi1wYXJzZSB0by1iZS1wcmVzZXJ2ZWQpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF5eMl4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUReXl4pICYmCisJdGVzdCAkKGdpdCBzaG93IEhFQUR+NTpmaWxlMSkgPSBCICYmCisJdGVzdCAkKGdpdCBzaG93IEhFQUR+MzpmaWxlMSkgPSBDICYmCisJdGVzdCAkKGdpdCBzaG93IEhFQUQ6ZmlsZTEpID0gRSAmJgorCXRlc3QgJChnaXQgc2hvdyBIRUFEOnVucmVsYXRlZC1maWxlKSA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBhbmNlc3RvciB3aXRoIC1wJyAnCisJRkFLRV9MSU5FUz0iMSAyIGVkaXQgMyA0IiBnaXQgcmViYXNlIC1pIC1wIEhFQUR+MyAmJgorCWVjaG8gMiA+IHVucmVsYXRlZC1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBMMi1tb2RpZmllZCAtLWFtZW5kIHVucmVsYXRlZC1maWxlICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmCisJdGVzdCAkKGdpdCBzaG93IEhFQUQ6dW5yZWxhdGVkLWZpbGUpID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIHRyaWVzIHRvIGNvbW1pdCcgJworCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1vbnRvIG5ldy1icmFuY2gxIEhFQUReICYmCisJZWNobyByZXNvbHZlZCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNob3VldHRlISIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIG5ldy1icmFuY2gxKSAmJgorCWdpdCBzaG93IEhFQUQgfCBncmVwIGNob3VldHRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2UgZmxhZyBpcyBoZWVkZWQsIGV2ZW4gYWZ0ZXIgLS1jb250aW51ZScgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyQHsxfSAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXYgLWkgLS1vbnRvIG5ldy1icmFuY2gxIEhFQUReICYmCisJZWNobyByZXNvbHZlZCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSA+IG91dHB1dCAmJgorCWdyZXAgIl4gZmlsZTEgfCAyICstJCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLXNxdWFzaCBvbmx5IGZpcmVzIHVwIGVkaXRvciBvbmNlJyAnCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIHNxdWFzaCAzIHNxdWFzaCA0IiBcCisJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGktZml4dXAgZG9lcyBub3QgZmlyZSB1cCBlZGl0b3InICcKKwlnaXQgY2hlY2tvdXQgLWIgbXVsdGktZml4dXAgRSAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKKwlGQUtFX0NPTU1JVF9BTUVORD0iTkVWRVIiIEZBS0VfTElORVM9IjEgZml4dXAgMiBmaXh1cCAzIGZpeHVwIDQiIFwKKwkJZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAwID0gJChnaXQgc2hvdyB8IGdyZXAgTkVWRVIgfCB3YyAtbCkgJiYKKwlnaXQgY2hlY2tvdXQgdG8tYmUtcmViYXNlZCAmJgorCWdpdCBicmFuY2ggLUQgbXVsdGktZml4dXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgdXNlZCBhZnRlciBjb25mbGljdCcgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdC1maXh1cCBjb25mbGljdC1icmFuY2ggJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJKAorCQlGQUtFX0xJTkVTPSIxIGZpeHVwIDMgZml4dXAgNCIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAkYmFzZQorCSkgJiYKKwllY2hvIHRocmVlID4gY29uZmxpY3QgJiYKKwlnaXQgYWRkIGNvbmZsaWN0ICYmCisJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCisJCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyB8IGdyZXAgT05DRSB8IHdjIC1sKSAmJgorCWdpdCBjaGVja291dCB0by1iZS1yZWJhc2VkICYmCisJZ2l0IGJyYW5jaCAtRCBjb25mbGljdC1maXh1cAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSByZXRhaW5lZCBhZnRlciBjb25mbGljdCcgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdC1zcXVhc2ggY29uZmxpY3QtYnJhbmNoICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCSgKKwkJRkFLRV9MSU5FUz0iMSBmaXh1cCAzIHNxdWFzaCA0IiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pICRiYXNlCisJKSAmJgorCWVjaG8gdGhyZWUgPiBjb25mbGljdCAmJgorCWdpdCBhZGQgY29uZmxpY3QgJiYKKwlGQUtFX0NPTU1JVF9BTUVORD0iVFdJQ0UiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCisJCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAyID0gJChnaXQgc2hvdyB8IGdyZXAgVFdJQ0UgfCB3YyAtbCkgJiYKKwlnaXQgY2hlY2tvdXQgdG8tYmUtcmViYXNlZCAmJgorCWdpdCBicmFuY2ggLUQgY29uZmxpY3Qtc3F1YXNoCisnCisKK2NhdCA+IGV4cGVjdC1zcXVhc2gtZml4dXAgPDwgRU9GCitCCisKK0QKKworT05DRQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCBhbmQgZml4dXAgZ2VuZXJhdGUgY29ycmVjdCBsb2cgbWVzc2FnZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgc3F1YXNoLWZpeHVwIEUgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEZBS0VfTElORVM9IjEgZml4dXAgMiBzcXVhc2ggMyBmaXh1cCA0IiBcCisJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgMSwvXlwkL2QgPiBhY3R1YWwtc3F1YXNoLWZpeHVwICYmCisJdGVzdF9jbXAgZXhwZWN0LXNxdWFzaC1maXh1cCBhY3R1YWwtc3F1YXNoLWZpeHVwICYmCisJZ2l0IGNoZWNrb3V0IHRvLWJlLXJlYmFzZWQgJiYKKwlnaXQgYnJhbmNoIC1EIHNxdWFzaC1maXh1cAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggaWdub3JlcyBjb21tZW50cycgJworCWdpdCBjaGVja291dCAtYiBza2lwLWNvbW1lbnRzIEUgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEZBS0VfTElORVM9IiMgMSAjIHNxdWFzaCAyICMgc3F1YXNoIDMgIyBzcXVhc2ggNCAjIiBcCisJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkgJiYKKwlnaXQgY2hlY2tvdXQgdG8tYmUtcmViYXNlZCAmJgorCWdpdCBicmFuY2ggLUQgc2tpcC1jb21tZW50cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggaWdub3JlcyBibGFuayBsaW5lcycgJworCWdpdCBjaGVja291dCAtYiBza2lwLWJsYW5rLWxpbmVzIEUgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEZBS0VfTElORVM9Ij4gMSA+IHNxdWFzaCAyID4gc3F1YXNoIDMgPiBzcXVhc2ggNCA+IiBcCisJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkgJiYKKwlnaXQgY2hlY2tvdXQgdG8tYmUtcmViYXNlZCAmJgorCWdpdCBicmFuY2ggLUQgc2tpcC1ibGFuay1saW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggd29ya3MgYXMgZXhwZWN0ZWQnICcKKwlnaXQgY2hlY2tvdXQgLWIgc3F1YXNoLXdvcmtzIG5vLWNvbmZsaWN0LWJyYW5jaCAmJgorCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCUZBS0VfTElORVM9IjEgc3F1YXNoIDMgMiIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwl0ZXN0ICRvbmUgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBzcXVhc2ggd29ya3MgYXMgZXhwZWN0ZWQnICcKKwlnaXQgY2hlY2tvdXQgLWIgaW50ZXJydXB0ZWQtc3F1YXNoIGNvbmZsaWN0LWJyYW5jaCAmJgorCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCSgKKwkJRkFLRV9MSU5FUz0iMSBzcXVhc2ggMyAyIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIEhFQUR+MworCSkgJiYKKwkoZWNobyBvbmU7IGVjaG8gdHdvOyBlY2hvIGZvdXIpID4gY29uZmxpY3QgJiYKKwlnaXQgYWRkIGNvbmZsaWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZXNvbHZlZCA+IGNvbmZsaWN0ICYmCisJZ2l0IGFkZCBjb25mbGljdCAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJG9uZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVycnVwdGVkIHNxdWFzaCB3b3JrcyBhcyBleHBlY3RlZCAoY2FzZSAyKScgJworCWdpdCBjaGVja291dCAtYiBpbnRlcnJ1cHRlZC1zcXVhc2gyIGNvbmZsaWN0LWJyYW5jaCAmJgorCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCSgKKwkJRkFLRV9MSU5FUz0iMyBzcXVhc2ggMSAyIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIEhFQUR+MworCSkgJiYKKwkoZWNobyBvbmU7IGVjaG8gZm91cikgPiBjb25mbGljdCAmJgorCWdpdCBhZGQgY29uZmxpY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkoZWNobyBvbmU7IGVjaG8gdHdvOyBlY2hvIGZvdXIpID4gY29uZmxpY3QgJiYKKwlnaXQgYWRkIGNvbmZsaWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZXNvbHZlZCA+IGNvbmZsaWN0ICYmCisJZ2l0IGFkZCBjb25mbGljdCAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJG9uZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZSBwYXRjaCBpZiBpbiB1cHN0cmVhbScgJworCUhFQUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IC1iIGhhcy1jaGVycnktcGlja2VkIEhFQUReICYmCisJZWNobyB1bnJlbGF0ZWQgPiBmaWxlNyAmJgorCWdpdCBhZGQgZmlsZTcgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJ1bnJlbGF0ZWQgY2hhbmdlIiAmJgorCWdpdCBjaGVycnktcGljayAkSEVBRCAmJgorCUVYUEVDVF9DT1VOVD0xIGdpdCByZWJhc2UgLWkgJEhFQUQgJiYKKwl0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIHRyaWVzIHRvIGNvbW1pdCwgZXZlbiBmb3IgImVkaXQiJyAnCisJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0X3RpY2sgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwllY2hvIGVkaXRlZCA+IGZpbGU3ICYmCisJZ2l0IGFkZCBmaWxlNyAmJgorCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNob3VldHRlISIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCBlZGl0ZWQgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZTcpICYmCisJZ2l0IHNob3cgSEVBRCB8IGdyZXAgY2hvdWV0dGUgJiYKKwl0ZXN0ICRwYXJlbnQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fib3J0ZWQgLS1jb250aW51ZSBkb2VzIG5vdCBzcXVhc2ggY29tbWl0cyBhZnRlciAiZWRpdCInICcKKwlvbGQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF90aWNrICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCisJZ2l0IGFkZCBmaWxlNyAmJgorCSgKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT0iICIgJiYKKwkJZXhwb3J0IEZBS0VfQ09NTUlUX01FU1NBR0UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3QgJG9sZCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZWJhc2UgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvLWFtZW5kIG9ubHkgZWRpdGVkIGNvbW1pdHMgYWZ0ZXIgImVkaXQiJyAnCisJdGVzdF90aWNrICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCisJZ2l0IGFkZCBmaWxlNyAmJgorCUZBS0VfQ09NTUlUX01FU1NBR0U9ImVkaXRlZCBmaWxlNyBhZ2FpbiIgZ2l0IGNvbW1pdCAmJgorCWVjaG8gImFuZCBhZ2FpbiIgPiBmaWxlNyAmJgorCWdpdCBhZGQgZmlsZTcgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ImFuZCBhZ2FpbiIgJiYKKwkJZXhwb3J0IEZBS0VfQ09NTUlUX01FU1NBR0UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCWdpdCByZWJhc2UgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbiBlcnJvciBhZnRlciBmYWlsZWQgImV4ZWMiJyAnCisJdGVzdF90aWNrICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQgfHwgOiIgJiYKKwkoCisJCUZBS0VfTElORVM9IjEgZXhlY19mYWxzZSIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBIRUFEXgorCSkgJiYKKwllY2hvICJlZGl0ZWQgYWdhaW4iID4gZmlsZTcgJiYKKwlnaXQgYWRkIGZpbGU3ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIDI+ZXJyb3IgJiYKKwlncmVwICJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4iIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhIGRldGFjaGVkIEhFQUQnICcKKwlncmFuZHBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAmJgorCWdpdCBjaGVja291dCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yICYmCisJdGVzdCAkZ3JhbmRwYXJlbnQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYSBjb21taXQgdmlvbGF0aW5nIHByZS1jb21taXQnICcKKworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwlQUkVfQ09NTUlUPS5naXQvaG9va3MvcHJlLWNvbW1pdCAmJgorCWVjaG8gIiMhL2Jpbi9zaCIgPiAkUFJFX0NPTU1JVCAmJgorCWVjaG8gInRlc3QgLXogXCJcJChnaXQgZGlmZiAtLWNhY2hlZCAtLWNoZWNrKVwiIiA+PiAkUFJFX0NPTU1JVCAmJgorCWNobW9kIGEreCAkUFJFX0NPTU1JVCAmJgorCWVjaG8gIm1vbmRlISAiID4+IGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBkb2VzbnQtdmVyaWZ5IGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSBkb2VzbnQtdmVyaWZ5IC0tbm8tdmVyaWZ5IGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJRkFLRV9MSU5FUz0yIGdpdCByZWJhc2UgLWkgSEVBRH4yCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdpdGggYSBmaWxlIG5hbWVkIEhFQUQgaW4gd29ya3RyZWUnICcKKworCXJtIC1mciAuZ2l0L2hvb2tzICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gzIEEgJiYKKworCSgKKwkJR0lUX0FVVEhPUl9OQU1FPSJTcXVhc2hlZCBBd2F5IiAmJgorCQlleHBvcnQgR0lUX0FVVEhPUl9OQU1FICYmCisJCT5IRUFEICYmCisJCWdpdCBhZGQgSEVBRCAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgaGVhZCIgJiYKKwkJPkJPRFkgJiYKKwkJZ2l0IGFkZCBCT0RZICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBib2R5IgorCSkgJiYKKworCUZBS0VfTElORVM9IjEgc3F1YXNoIDIiIGdpdCByZWJhc2UgLWkgdG8tYmUtcmViYXNlZCAmJgorCXRlc3QgIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVhbikiID0gIlNxdWFzaGVkIEF3YXkiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gIm5vb3AiIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBjaGVycnktcGljaycgJworCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDQgSEVBRCAmJgorCUdJVF9FRElUT1I9OiBnaXQgY29tbWl0IC0tYW1lbmQgXAorCQktLWF1dGhvcj0iU29tZWJvZHkgZWxzZSA8c29tZWJvZHlAZWxzZS5jb20+IiAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIGJyYW5jaDMpICE9ICQoZ2l0IHJldi1wYXJzZSBicmFuY2g0KSAmJgorCWdpdCByZWJhc2UgLWkgYnJhbmNoMyAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIGJyYW5jaDMpID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDQpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHJlYmFzZSBzZXR1cCcgJworCWdpdCBjaGVja291dCBBICYmCisJbWtkaXIgc3ViICYmCisJKAorCQljZCBzdWIgJiYgZ2l0IGluaXQgJiYgPmVsaWYgJiYKKwkJZ2l0IGFkZCBlbGlmICYmIGdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSBpbml0aWFsIgorCSkgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJPbmUiICYmCisJZWNobyAyID5maWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIlR3byIgJiYKKwkoCisJCWNkIHN1YiAmJiBlY2hvIDMgPmVsaWYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAic3VibW9kdWxlIHNlY29uZCIKKwkpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiVGhyZWUgY2hhbmdlcyBzdWJtb2R1bGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSByZWJhc2UgLWknICcKKwlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIDMiIGdpdCByZWJhc2UgLWkgQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29uZmxpY3Qgc2V0dXAnICcKKwlnaXQgdGFnIHN1Ym1vZHVsZS1iYXNlICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJKAorCQljZCBzdWIgJiYgZ2l0IGNoZWNrb3V0IEhFQUReICYmIGVjaG8gNCA+ZWxpZiAmJgorCQlnaXQgYWRkIGVsaWYgJiYgZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIGNvbmZsaWN0IgorCSkgJiYKKwlnaXQgYWRkIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkNvbmZsaWN0IGluIHN1Ym1vZHVsZSIgJiYKKwlnaXQgdGFnIHN1Ym1vZHVsZS10b3BpYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29udGludWUgd2l0aCBvbmx5IHN1Ym1vZHVsZSBzdGFnZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIHN1Ym1vZHVsZS1iYXNlICYmCisJZ2l0IGFkZCBzdWIgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBzdWJtb2R1bGUtYmFzZSkgIT0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjb250aW51ZSB3aXRoIHVuc3RhZ2VkIHN1Ym1vZHVsZScgJworCWdpdCBjaGVja291dCBzdWJtb2R1bGUtdG9waWMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBzdWJtb2R1bGUtYmFzZSAmJgorCWdpdCByZXNldCAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHN1Ym1vZHVsZS1iYXNlKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCB1bm5lY2Vzc2FyeSByZXNldCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdC1jaG10aW1lID0xMjM0NTY3ODkgZmlsZTMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjQgJiYKKwl0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJTVRJTUU9JCh0ZXN0LWNobXRpbWUgLXYgKzAgZmlsZTMgfCBzZWQgJ3MvW14wLTldLiokLy8nKSAmJgorCXRlc3QgMTIzNDU2Nzg5ID0gJE1USU1FCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld29yZCcgJworCWdpdCBjaGVja291dCAtYiByZXdvcmQtYnJhbmNoIG1hc3RlciAmJgorCUZBS0VfTElORVM9IjEgMiAzIHJld29yZCA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJFIGNoYW5nZWQiIGdpdCByZWJhc2UgLWkgQSAmJgorCWdpdCBzaG93IEhFQUQgfCBncmVwICJFIGNoYW5nZWQiICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAhPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwlGQUtFX0xJTkVTPSIxIDIgcmV3b3JkIDMgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iRCBjaGFuZ2VkIiBnaXQgcmViYXNlIC1pIEEgJiYKKwlnaXQgc2hvdyBIRUFEXiB8IGdyZXAgIkQgY2hhbmdlZCIgJiYKKwlGQUtFX0xJTkVTPSJyZXdvcmQgMSAyIDMgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQiBjaGFuZ2VkIiBnaXQgcmViYXNlIC1pIEEgJiYKKwlnaXQgc2hvdyBIRUFEfjMgfCBncmVwICJCIGNoYW5nZWQiICYmCisJRkFLRV9MSU5FUz0iMSByZXdvcmQgMiAzIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkMgY2hhbmdlZCIgZ2l0IHJlYmFzZSAtaSBBICYmCisJZ2l0IHNob3cgSEVBRH4yIHwgZ3JlcCAiQyBjaGFuZ2VkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY2FuIGNvcHkgbm90ZXMnICcKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGUucmViYXNlIHRydWUgJiYKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwl0ZXN0X2NvbW1pdCBuMSAmJgorCXRlc3RfY29tbWl0IG4yICYmCisJdGVzdF9jb21taXQgbjMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tImEgbm90ZSIgbjMgJiYKKwlnaXQgcmViYXNlIC0tb250byBuMSBuMiAmJgorCXRlc3QgImEgbm90ZSIgPSAiJChnaXQgbm90ZXMgc2hvdyBIRUFEKSIKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2FuIGVhcmxpZXIgbm90ZQorCithIG5vdGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY2FuIGNvcHkgbm90ZXMgb3ZlciBhIGZpeHVwJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBuMyAmJgorCWdpdCBub3RlcyBhZGQgLW0iYW4gZWFybGllciBub3RlIiBuMiAmJgorCUdJVF9OT1RFU19SRVdSSVRFX01PREU9Y29uY2F0ZW5hdGUgRkFLRV9MSU5FUz0iMSBmaXh1cCAyIiBnaXQgcmViYXNlIC1pIG4xICYmCisJZ2l0IG5vdGVzIHNob3cgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aGlsZSBkZXRhY2hpbmcgSEVBRCcgJworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgorCWdyYW5kcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCisJdGVzdF90aWNrICYmCisJRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIEhFQUR+MiBIRUFEXjAgJiYKKwl0ZXN0ICRncmFuZHBhcmVudCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFECisnCisKK3Rlc3RfdGljayAjIEVuc3VyZSB0aGF0IHRoZSByZWJhc2VkIGNvbW1pdHMgZ2V0IGEgZGlmZmVyZW50IHRpbWVzdGFtcC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fsd2F5cyBjaGVycnktcGljayB3aXRoIC0tbm8tZmYnICcKKwlnaXQgY2hlY2tvdXQgbm8tZmYtYnJhbmNoICYmCisJZ2l0IHRhZyBvcmlnaW5hbC1uby1mZi1icmFuY2ggJiYKKwlnaXQgcmViYXNlIC1pIC0tbm8tZmYgQSAmJgorCXRvdWNoIGVtcHR5ICYmCisJZm9yIHAgaW4gMCAxIDIKKwlkbworCQl0ZXN0ICEgJChnaXQgcmV2LXBhcnNlIEhFQUR+JHApID0gJChnaXQgcmV2LXBhcnNlIG9yaWdpbmFsLW5vLWZmLWJyYW5jaH4kcCkgJiYKKwkJZ2l0IGRpZmYgSEVBRH4kcCBvcmlnaW5hbC1uby1mZi1icmFuY2h+JHAgPiBvdXQgJiYKKwkJdGVzdF9jbXAgZW1wdHkgb3V0CisJZG9uZSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUR+MykgPSAkKGdpdCByZXYtcGFyc2Ugb3JpZ2luYWwtbm8tZmYtYnJhbmNofjMpICYmCisJZ2l0IGRpZmYgSEVBRH4zIG9yaWdpbmFsLW5vLWZmLWJyYW5jaH4zID4gb3V0ICYmCisJdGVzdF9jbXAgZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBjb21taXRzIHdpdGggZnVubnkgbWVzc2FnZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgZnVubnkgQSAmJgorCWVjaG8gPj5maWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gImVuZCB3aXRoIHNsYXNoXFwiICYmCisJZWNobyA+PmZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic29tZXRoaW5nIChcMDAwKSB0aGF0IGxvb2tzIGxpa2Ugb2N0YWwiICYmCisJZWNobyA+PmZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic29tZXRoaW5nIChcbikgdGhhdCBsb29rcyBsaWtlIGEgbmV3bGluZSIgJiYKKwllY2hvID4+ZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJhbm90aGVyIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlLWkgaGlzdG9yeSB3aXRoIGZ1bm55IG1lc3NhZ2VzJyAnCisJZ2l0IHJldi1saXN0IEEuLmZ1bm55ID5leHBlY3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlGQUtFX0xJTkVTPSIxIDIgMyA0IiBnaXQgcmViYXNlIC1pIEEgJiYKKwlnaXQgcmV2LWxpc3QgQS4uID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBmb3IgcmViYXNlIC1pIC0tZXhlYycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZXhlY3V0ZSAmJgorCXRlc3RfY29tbWl0IG9uZV9leGVjIG1haW4udHh0IG9uZV9leGVjICYmCisJdGVzdF9jb21taXQgdHdvX2V4ZWMgbWFpbi50eHQgdHdvX2V4ZWMgJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9leGVjIG1haW4udHh0IHRocmVlX2V4ZWMKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5uaW5nICJnaXQgcmViYXNlIC1pIC0tZXhlYyBnaXQgc2hvdyBIRUFEIicgJworCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiBIRUFEfjIgPmFjdHVhbCAmJgorCSgKKwkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQgMiBleGVjX2dpdF9zaG93X0hFQUQiICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKKwkpICYmCisJc2VkIC1lICIxLDlkIiBleHBlY3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVubmluZyAiZ2l0IHJlYmFzZSAtLWV4ZWMgZ2l0IHNob3cgSEVBRCAtaSInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwlnaXQgcmViYXNlIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgLWkgSEVBRH4yID5hY3R1YWwgJiYKKwkoCisJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEIDIgZXhlY19naXRfc2hvd19IRUFEIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUR+MiA+ZXhwZWN0CisJKSAmJgorCXNlZCAtZSAiMSw5ZCIgZXhwZWN0ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bm5pbmcgImdpdCByZWJhc2UgLWl4IGdpdCBzaG93IEhFQUQiJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCisJZ2l0IHJlYmFzZSAtaXggImdpdCBzaG93IEhFQUQiIEhFQUR+MiA+YWN0dWFsICYmCisJKAorCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRCIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgPmV4cGVjdAorCSkgJiYKKwlzZWQgLWUgIjEsOWQiIGV4cGVjdCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWl4IHdpdGggc2V2ZXJhbCA8Q01EPicgJworCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgorCWdpdCByZWJhc2UgLWl4ICJnaXQgc2hvdyBIRUFEOyBwd2QiIEhFQUR+MiA+YWN0dWFsICYmCisJKAorCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRDtfcHdkIDIgZXhlY19naXRfc2hvd19IRUFEO19wd2QiICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKKwkpICYmCisJc2VkIC1lICIxLDlkIiBleHBlY3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1peCB3aXRoIHNldmVyYWwgaW5zdGFuY2VzIG9mIC0tZXhlYycgJworCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgorCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtLWV4ZWMgInB3ZCIgSEVBRH4yID5hY3R1YWwgJiYKKwkoCisJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEIGV4ZWNfcHdkIDIKKwkJCQlleGVjX2dpdF9zaG93X0hFQUQgZXhlY19wd2QiICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKKwkpICYmCisJc2VkIC1lICIxLDExZCIgZXhwZWN0ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaXggd2l0aCAtLWF1dG9zcXVhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYXV0b3NxdWFzaCAmJgorCWVjaG8gc2Vjb25kID5zZWNvbmQudHh0ICYmCisJZ2l0IGFkZCBzZWNvbmQudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiZml4dXAhIHR3b19leGVjIiAmJgorCWVjaG8gYmlzID5iaXMudHh0ICYmCisJZ2l0IGFkZCBiaXMudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiZml4dXAhIHR3b19leGVjIiAmJgorCSgKKwkJZ2l0IGNoZWNrb3V0IC1iIGF1dG9zcXVhc2hfYWN0dWFsICYmCisJCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtLWF1dG9zcXVhc2ggSEVBRH40ID5hY3R1YWwKKwkpICYmCisJZ2l0IGNoZWNrb3V0IGF1dG9zcXVhc2ggJiYKKwkoCisJCWdpdCBjaGVja291dCAtYiBhdXRvc3F1YXNoX2V4cGVjdGVkICYmCisJCUZBS0VfTElORVM9IjEgZml4dXAgMyBmaXh1cCA0IGV4ZWNfZ2l0X3Nob3dfSEVBRCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRCIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjQgPmV4cGVjdAorCSkgJiYKKwlzZWQgLWUgIjEsMTNkIiBleHBlY3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tZXhlYyB3aXRob3V0IC1pIHNob3dzIGVycm9yIG1lc3NhZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgSEVBRH4yIDI+YWN0dWFsICYmCisJZWNobyAiVGhlIC0tZXhlYyBvcHRpb24gbXVzdCBiZSB1c2VkIHdpdGggdGhlIC0taW50ZXJhY3RpdmUgb3B0aW9uIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tZXhlYyB3aXRob3V0IDxDTUQ+JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgMj50bXAgJiYKKwlzZWQgLWUgIjFkIiB0bXAgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWggPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHJlLW9yZGVyIGFuZCBkcm9wIGNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgRSAmJgorCUZBS0VfTElORVM9IjMgMSAyIDUiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJdGVzdCBFID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IEIgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IEEgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF5eIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBDID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReXl4gfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IDAgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF5eXiB8IGdyZXAgLWMgXnBhcmVudFwgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHJldGFpbiByb290IGNvbW1pdCBhdXRob3IgYW5kIG1lc3NhZ2UnICcKKwlnaXQgY2hlY2tvdXQgQSAmJgorCWVjaG8gQiA+ZmlsZTcgJiYKKwlnaXQgYWRkIGZpbGU3ICYmCisJR0lUX0FVVEhPUl9OQU1FPSJUd2VycCBTbm9nIiBnaXQgY29tbWl0IC1tICJkaWZmZXJlbnQgYXV0aG9yIiAmJgorCUZBS0VfTElORVM9IjIiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAtcSAiXmF1dGhvciBUd2VycCBTbm9nIiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgLXEgIl5kaWZmZXJlbnQgYXV0aG9yJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCB0ZW1wb3Jhcnkgc2VudGluZWwgY29tbWl0JyAnCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwkoCisJCUZBS0VfTElORVM9IjIiICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIl50cmVlIDRiODI1ZGM2NDJjYiIgJiYKKwlnaXQgcmViYXNlIC0tYWJvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCBmaXh1cCByb290IGNvbW1pdCcgJworCWdpdCBjaGVja291dCBCICYmCisJRkFLRV9MSU5FUz0iMSBmaXh1cCAyIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCXRlc3QgQSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBCID0gJChnaXQgc2hvdyBIRUFEOmZpbGUxKSAmJgorCXRlc3QgMCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAtYyBecGFyZW50XCApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWVkaXQtdG9kbyBkb2VzIG5vdCB3b3JrcyBvbiBub24taW50ZXJhY3RpdmUgcmViYXNlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjb25mbGljdC1icmFuY2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBIRUFEfjIgSEVBRH4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJZ2l0IHJlYmFzZSAtLWFib3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWVkaXQtdG9kbyBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdG9kbycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbm8tY29uZmxpY3QtYnJhbmNoXjAgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgMiAzIiBnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZQorCXRlc3QgTSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgTCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwNS1yZWJhc2UtbWFsZm9ybWVkLnNoIGIvdC90MzQwNS1yZWJhc2UtbWFsZm9ybWVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5ZWRkYWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDA1LXJlYmFzZS1tYWxmb3JtZWQuc2gKQEAgLTAsMCArMSw3MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzZSBzaG91bGQgaGFuZGxlIGFyYml0cmFyeSBnaXQgbWVzc2FnZScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+RiA8PFxFT0YKK1RoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbW1pdCBsb2cgbWVzc2FnZQordGhhdCBkb2VzIG5vdCAgY29uZm9ybSB0byBnaXQgY29tbWl0IGNvbnZlbnRpb24uCisKK0l0IGhhcyB0d28gcGFyYWdyYXBocywgYnV0IGl0cyBmaXJzdCBwYXJhZ3JhcGggaXMgbm90IGZyaWVuZGx5Cit0byBvbmVsaW5lIHN1bW1hcnkgZm9ybWF0LgorRU9GCisKK2NhdCA+RyA8PFxFT0YKK2NvbW1pdCBsb2cgbWVzc2FnZSBjb250YWluaW5nIGEgZGlmZgorRU9GCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZTEgJiYKKwk+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJZ2l0IGJyYW5jaCBkaWZmLWluLW1lc3NhZ2UKKworCWdpdCBjaGVja291dCAtYiBtdWx0aS1saW5lLXN1YmplY3QgJiYKKwljYXQgRiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtRiBGICYmCisKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+RjAgJiYKKworCWdpdCBjaGVja291dCBkaWZmLWluLW1lc3NhZ2UgJiYKKwllY2hvICJjb21taXQgbG9nIG1lc3NhZ2UgY29udGFpbmluZyBhIGRpZmYiID5HICYmCisJZWNobyAiIiA+PkcKKwljYXQgRyA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPj5HICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtRiBHICYmCisKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+RzAgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCWVjaG8gT25lID5maWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tICJTZWNvbmQgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgY29tbWl0IHdpdGggbXVsdGktbGluZSBzdWJqZWN0JyAnCisKKwlnaXQgcmViYXNlIG1hc3RlciBtdWx0aS1saW5lLXN1YmplY3QgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+RjEgJiYKKworCXRlc3RfY21wIEYwIEYxICYmCisJdGVzdF9jbXAgRiBGMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgY29tbWl0IHdpdGggZGlmZiBpbiBtZXNzYWdlJyAnCisJZ2l0IHJlYmFzZSBtYXN0ZXIgZGlmZi1pbi1tZXNzYWdlICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eJC9kIiA+RzEgJiYKKwl0ZXN0X2NtcCBHMCBHMSAmJgorCXRlc3RfY21wIEcgRzAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDA2LXJlYmFzZS1tZXNzYWdlLnNoIGIvdC90MzQwNi1yZWJhc2UtbWVzc2FnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNmE5YTBkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwNi1yZWJhc2UtbWVzc2FnZS5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVzc2FnZXMgZnJvbSByZWJhc2Ugb3BlcmF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworcXVpY2tfb25lICgpIHsKKwllY2hvICIkMSIgPiJmaWxlJDEiICYmCisJZ2l0IGFkZCAiZmlsZSQxIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlxdWlja19vbmUgTyAmJgorCWdpdCBicmFuY2ggdG9waWMgJiYKKwlxdWlja19vbmUgWCAmJgorCXF1aWNrX29uZSBBICYmCisJcXVpY2tfb25lIEIgJiYKKwlxdWlja19vbmUgWSAmJgorCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJcXVpY2tfb25lIEEgJiYKKwlxdWlja19vbmUgQiAmJgorCXF1aWNrX29uZSBaICYmCisJZ2l0IHRhZyBzdGFydAorCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorQWxyZWFkeSBhcHBsaWVkOiAwMDAxIEEKK0FscmVhZHkgYXBwbGllZDogMDAwMiBCCitDb21taXR0ZWQ6IDAwMDMgWgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtbScgJworCisJZ2l0IHJlYmFzZSAtbSBtYXN0ZXIgPnJlcG9ydCAmJgorCXNlZCAtbiAtZSAiL15BbHJlYWR5IGFwcGxpZWQ6IC9wIiBcCisJCS1lICIvXkNvbW1pdHRlZDogL3AiIHJlcG9ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXN0YXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCByZWJhc2UgLS1zdGF0IG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgIGdyZXAgIl4gZmlsZVggfCAgKjEgKyQiIGRpZmZzdGF0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugdy9jb25maWcgcmViYXNlLnN0YXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCBjb25maWcgcmViYXNlLnN0YXQgdHJ1ZSAmJgorICAgICAgICBnaXQgcmViYXNlIG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgIGdyZXAgIl4gZmlsZVggfCAgKjEgKyQiIGRpZmZzdGF0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLW4gb3ZlcnJpZGVzIGNvbmZpZyByZWJhc2Uuc3RhdCBjb25maWcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCBjb25maWcgcmViYXNlLnN0YXQgdHJ1ZSAmJgorICAgICAgICBnaXQgcmViYXNlIC1uIG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgICEgZ3JlcCAiXiBmaWxlWCB8ICAqMSArJCIgZGlmZnN0YXQudHh0CisnCisKKyMgT3V0cHV0IHRvIHN0ZGVycjoKKyMKKyMgICAgICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogaW52YWxpZC1yZWYiCisjCisjIE5FRURTV09SSzogVGhpcyAiZ3JlcCIgaXMgZmluZSBpbiByZWFsIG5vbi1DIGxvY2FsZXMsIGJ1dAorIyBHRVRURVhUX1BPSVNPTiBwb2lzb25zIHRoZSByZWZuYW1lIGFsb25nIHdpdGggdGhlIGVuY2xvc2luZworIyBlcnJvciBtZXNzYWdlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tb250byBvdXRwdXRzIHRoZSBpbnZhbGlkIHJlZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIGludmFsaWQtcmVmIEhFQUQgSEVBRCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQtcmVmIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDA3LXJlYmFzZS1hYm9ydC5zaCBiL3QvdDM0MDctcmViYXNlLWFib3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2YTZjNDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDA3LXJlYmFzZS1hYm9ydC5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1hYm9ydCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMjIyBUZXN0IHRoYXQgd2UgaGFuZGxlIHNwYWNlIGNoYXJhY3RlcnMgcHJvcGVybHkKK3dvcmtfZGlyPSIkKHB3ZCkvdGVzdCBkaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIC1wICIkd29ya19kaXIiICYmCisJY2QgIiR3b3JrX2RpciIgJiYKKwlnaXQgaW5pdCAmJgorCWVjaG8gYSA+IGEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIGEgJiYKKwlnaXQgYnJhbmNoIHRvLXJlYmFzZSAmJgorCisJZWNobyBiID4gYSAmJgorCWdpdCBjb21taXQgLWEgLW0gYiAmJgorCWVjaG8gYyA+IGEgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGMgJiYKKworCWdpdCBjaGVja291dCB0by1yZWJhc2UgJiYKKwllY2hvIGQgPiBhICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibWVyZ2Ugc2hvdWxkIGZhaWwgb24gdGhpcyIgJiYKKwllY2hvIGUgPiBhICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibWVyZ2Ugc2hvdWxkIGZhaWwgb24gdGhpcywgdG9vIiAmJgorCWdpdCBicmFuY2ggcHJlLXJlYmFzZQorJworCit0ZXN0cmViYXNlKCkgeworCXR5cGU9JDEKKwlkb3Rlc3Q9JDIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlIC0tYWJvcnQiICcKKwkJY2QgIiR3b3JrX2RpciIgJiYKKwkJIyBDbGVhbiB1cCB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgb25lCisJCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgbWFzdGVyICYmCisJCXRlc3RfcGF0aF9pc19kaXIgIiRkb3Rlc3QiICYmCisJCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSB0by1yZWJhc2UpID0gJChnaXQgcmV2LXBhcnNlIHByZS1yZWJhc2UpICYmCisJCXRlc3QgISAtZCAiJGRvdGVzdCIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZSAtLWFib3J0IGFmdGVyIC0tc2tpcCIgJworCQljZCAiJHdvcmtfZGlyIiAmJgorCQkjIENsZWFuIHVwIHRoZSBzdGF0ZSBmcm9tIHRoZSBwcmV2aW91cyBvbmUKKwkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSBtYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX2RpciAiJGRvdGVzdCIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCQlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgdG8tcmViYXNlKSA9ICQoZ2l0IHJldi1wYXJzZSBwcmUtcmViYXNlKSAmJgorCQl0ZXN0ICEgLWQgIiRkb3Rlc3QiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGUgLS1hYm9ydCBhZnRlciAtLWNvbnRpbnVlIiAnCisJCWNkICIkd29ya19kaXIiICYmCisJCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQorCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIG1hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfZGlyICIkZG90ZXN0IiAmJgorCQllY2hvIGMgPiBhICYmCisJCWVjaG8gZCA+PiBhICYmCisJCWdpdCBhZGQgYSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgIT0gJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIHRvLXJlYmFzZSkgPSAkKGdpdCByZXYtcGFyc2UgcHJlLXJlYmFzZSkgJiYKKwkJdGVzdCAhIC1kICIkZG90ZXN0IgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlIC0tYWJvcnQgZG9lcyBub3QgdXBkYXRlIHJlZmxvZyIgJworCQljZCAiJHdvcmtfZGlyIiAmJgorCQkjIENsZWFuIHVwIHRoZSBzdGF0ZSBmcm9tIHRoZSBwcmV2aW91cyBvbmUKKwkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJCWdpdCByZWZsb2cgc2hvdyB0by1yZWJhc2UgPiByZWZsb2dfYmVmb3JlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSBtYXN0ZXIgJiYKKwkJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJCWdpdCByZWZsb2cgc2hvdyB0by1yZWJhc2UgPiByZWZsb2dfYWZ0ZXIgJiYKKwkJdGVzdF9jbXAgcmVmbG9nX2JlZm9yZSByZWZsb2dfYWZ0ZXIgJiYKKwkJcm0gcmVmbG9nX2JlZm9yZSByZWZsb2dfYWZ0ZXIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1hYm9ydCBjYW4gbm90IGJlIHVzZWQgd2l0aCBvdGhlciBvcHRpb25zJyAnCisJCWNkICIkd29ya19kaXIiICYmCisJCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQorCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIG1hc3RlciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC12IC0tYWJvcnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IC12ICYmCisJCWdpdCByZWJhc2UgLS1hYm9ydAorCScKK30KKwordGVzdHJlYmFzZSAiIiAuZ2l0L3JlYmFzZS1hcHBseQordGVzdHJlYmFzZSAiIC0tbWVyZ2UiIC5naXQvcmViYXNlLW1lcmdlCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwOC1yZWJhc2UtbXVsdGktbGluZS5zaCBiL3QvdDM0MDgtcmViYXNlLW11bHRpLWxpbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmI4NGU2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDgtcmViYXNlLW11bHRpLWxpbmUuc2gKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzaW5nIGEgY29tbWl0IHdpdGggbXVsdGktbGluZSBmaXJzdCBwYXJhZ3JhcGguJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZWNobyBoZWxsbyA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkEgc2FtcGxlIGNvbW1pdCBsb2cgbWVzc2FnZSB0aGF0IGhhcyBhIGxvbmcKK3N1bW1hcnkgdGhhdCBzcGlsbHMgb3ZlciBtdWx0aXBsZSBsaW5lcy4KKworQnV0IG90aGVyd2lzZSB3aXRoIGEgc2FuZSBkZXNjcmlwdGlvbi4iICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwk+ZWxpZiAmJgorCWdpdCBhZGQgZWxpZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyByZWJhc2UgJworCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHNpZGVAezF9IHwgc2VkIC1lICIxLC9eXCQvZCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDktcmViYXNlLXByZXNlcnZlLW1lcmdlcy5zaCBiL3QvdDM0MDktcmViYXNlLXByZXNlcnZlLW1lcmdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZGU0ZTIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwOS1yZWJhc2UtcHJlc2VydmUtbWVyZ2VzLnNoCkBAIC0wLDAgKzEsMTUyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0KEMpIDIwMDggU3RlcGhlbiBIYWJlcm1hbm4gJiBBbmRyZWFzIEVyaWNzc29uCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIC1wIHNob3VsZCBwcmVzZXJ2ZSBtZXJnZXMKKworUnVuICJnaXQgcmViYXNlIC1wIiBhbmQgY2hlY2sgdGhhdCBtZXJnZXMgYXJlIHByb3Blcmx5IGNhcnJpZWQgYWxvbmcKKycKKy4gLi90ZXN0LWxpYi5zaAorCitHSVRfQVVUSE9SX0VNQUlMPWJvZ3VzX2VtYWlsX2FkZHJlc3MKK2V4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCisKKyMgQ2xvbmUgMSAodHJpdmlhbCBtZXJnZSk6CisjCisjIEExLS1BMiAgPC0tIG9yaWdpbi9tYXN0ZXIKKyMgIFwgICBcCisjICAgQjEtLU0gIDwtLSB0b3BpYworIyAgICBcCisjICAgICBCMiAgPC0tIG9yaWdpbi90b3BpYworIworIyBDbG9uZSAyIChjb25mbGljdGluZyBtZXJnZSk6CisjCisjIEExLS1BMi0tQjMgICA8LS0gb3JpZ2luL21hc3RlcgorIyAgXCAgICAgICBcCisjICAgQjEtLS0tLS1NICA8LS0gdG9waWMKKyMgICAgXAorIyAgICAgQjIgICAgICAgPC0tIG9yaWdpbi90b3BpYworIworIyBDbG9uZSAzIChuby1mZiBtZXJnZSk6CisjCisjIEExLS1BMi0tQjMgICA8LS0gb3JpZ2luL21hc3RlcgorIyAgXAorIyAgIEIxLS0tLS0tTSAgPC0tIHRvcGljCisjICAgIFwgICAgIC8KKyMgICAgIFwtLUEzICAgIDwtLSB0b3BpYzIKKyMgICAgICBcCisjICAgICAgIEIyICAgICA8LS0gb3JpZ2luL3RvcGljCisjCisjIENsb25lIDQgKG1lcmdlIHVzaW5nIHNlY29uZCBwYXJlbnQgYXMgYmFzZSk6CisjCisjIEExLS1BMi0tQjMgICA8LS0gb3JpZ2luL21hc3RlcgorIyAgXAorIyAgIEIxLS1BMy0tTSAgPC0tIHRvcGljCisjICAgIFwgICAgIC8KKyMgICAgIFwtLUE0ICAgIDwtLSB0b3BpYzIKKyMgICAgICBcCisjICAgICAgIEIyICAgICA8LS0gb3JpZ2luL3RvcGljCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBtZXJnZS1wcmVzZXJ2aW5nIHJlYmFzZScgXAorCSdlY2hvIEZpcnN0ID4gQSAmJgorCWdpdCBhZGQgQSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBBMSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKKwllY2hvIFNlY29uZCA+IEIgJiYKKwlnaXQgYWRkIEIgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgQjEiICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWVjaG8gVGhpcmQgPj4gQSAmJgorCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBBMiIgJiYKKworCWdpdCBjbG9uZSAuLy4gY2xvbmUxICYmCisJKGNkIGNsb25lMSAmJgorCWdpdCBjaGVja291dCAtYiB0b3BpYyBvcmlnaW4vdG9waWMgJiYKKwlnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlcgorCSkgJiYKKworCWdpdCBjbG9uZSAuLy4gY2xvbmU0ICYmCisJKAorCQljZCBjbG9uZTQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIG9yaWdpbi90b3BpYyAmJgorCQlnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlcgorCSkgJiYKKworCWVjaG8gRmlmdGggPiBCICYmCisJZ2l0IGFkZCBCICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIGRpZmZlcmVudCBCIiAmJgorCisJZ2l0IGNsb25lIC4vLiBjbG9uZTIgJiYKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdG9waWMgb3JpZ2luL3RvcGljICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBvcmlnaW4vbWFzdGVyICYmCisJCWVjaG8gUmVzb2x2ZWQgPkIgJiYKKwkJZ2l0IGFkZCBCICYmCisJCWdpdCBjb21taXQgLW0gIk1lcmdlIG9yaWdpbi9tYXN0ZXIgaW50byB0b3BpYyIKKwkpICYmCisKKwlnaXQgY2xvbmUgLi8uIGNsb25lMyAmJgorCSgKKwkJY2QgY2xvbmUzICYmCisJCWdpdCBjaGVja291dCAtYiB0b3BpYzIgb3JpZ2luL3RvcGljICYmCisJCWVjaG8gU2l4dGggPiBBICYmCisJCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBBMyIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIG9yaWdpbi90b3BpYyAmJgorCQlnaXQgbWVyZ2UgLS1uby1mZiB0b3BpYzIKKwkpICYmCisKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwllY2hvIEZvdXJ0aCA+PiBCICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IEIyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLXAgZmFrZXMgaW50ZXJhY3RpdmUgcmViYXNlJyAnCisJKAorCWNkIGNsb25lMSAmJgorCWdpdCBmZXRjaCAmJgorCWdpdCByZWJhc2UgLXAgb3JpZ2luL3RvcGljICYmCisJdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIk1vZGlmeSBBIiB8IHdjIC1sKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICIgfCB3YyAtbCkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgd29ya3MgYWZ0ZXIgYSBjb25mbGljdCcgJworCSgKKwljZCBjbG9uZTIgJiYKKwlnaXQgZmV0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1wIG9yaWdpbi90b3BpYyAmJgorCXRlc3QgMiA9ICQoZ2l0IGxzLWZpbGVzIEIgfCB3YyAtbCkgJiYKKwllY2hvIFJlc29sdmVkIGFnYWluID4gQiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdyZXAgIl5AQEAgIiAuZ2l0L3JlYmFzZS1tZXJnZS9wYXRjaCAmJgorCWdpdCBhZGQgQiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNb2RpZnkgQSIgfCB3YyAtbCkgJiYKKwl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiQWRkIGRpZmZlcmVudCIgfCB3YyAtbCkgJiYKKwl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiTWVyZ2Ugb3JpZ2luIiB8IHdjIC1sKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1wIHByZXNlcnZlcyBuby1mZiBtZXJnZXMnICcKKwkoCisJY2QgY2xvbmUzICYmCisJZ2l0IGZldGNoICYmCisJZ2l0IHJlYmFzZSAtcCBvcmlnaW4vdG9waWMgJiYKKwl0ZXN0IDMgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiTW9kaWZ5IEEiIHwgd2MgLWwpICYmCisJdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIk1lcmdlIGJyYW5jaCIgfCB3YyAtbCkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtcCB3b3JrcyB3aGVuIGJhc2UgaW5zaWRlIHNlY29uZCBwYXJlbnQnICcKKwkoCisJY2QgY2xvbmU0ICYmCisJZ2l0IGZldGNoICYmCisJZ2l0IHJlYmFzZSAtcCBIRUFEXjIgJiYKKwl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiTW9kaWZ5IEEiIHwgd2MgLWwpICYmCisJdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIk1vZGlmeSBCIiB8IHdjIC1sKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICIgfCB3YyAtbCkKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxMC1yZWJhc2UtcHJlc2VydmUtZHJvcHBlZC1tZXJnZXMuc2ggYi90L3QzNDEwLXJlYmFzZS1wcmVzZXJ2ZS1kcm9wcGVkLW1lcmdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjczYjk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxMC1yZWJhc2UtcHJlc2VydmUtZHJvcHBlZC1tZXJnZXMuc2gKQEAgLTAsMCArMSw4NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBTdGVwaGVuIEhhYmVybWFuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgcHJlc2VydmUgbWVyZ2VzCisKK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2Ugd2l0aCBwcmVzZXJ2ZSBtZXJnZXMgYW5kIGVuc3VyZXMgY29tbWl0cworZHJvcHBlZCBieSB0aGUgLS1jaGVycnktcGljayBmbGFnIGhhdmUgdGhlaXIgY2hpbGRyZW5zIHBhcmVudHMKK3Jld3JpdHRlbi4KKycKKy4gLi90ZXN0LWxpYi5zaAorCisjIHNldCB1cCB0d28gYnJhbmNoZXMgbGlrZSB0aGlzOgorIworIyBBIC0gQiAtIEMgLSBEIC0gRQorIyAgIFwKKyMgICAgIEYgLSBHIC0gSAorIyAgICAgICBcCisjICAgICAgICAgSQorIworIyB3aGVyZSBCLCBEIGFuZCBHIHRvdWNoIHRoZSBzYW1lIGZpbGUuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQSBmaWxlMSAmJgorCXRlc3RfY29tbWl0IEIgZmlsZTEgMSAmJgorCXRlc3RfY29tbWl0IEMgZmlsZTIgJiYKKwl0ZXN0X2NvbW1pdCBEIGZpbGUxIDIgJiYKKwl0ZXN0X2NvbW1pdCBFIGZpbGUzICYmCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwl0ZXN0X2NvbW1pdCBGIGZpbGU0ICYmCisJdGVzdF9jb21taXQgRyBmaWxlMSAzICYmCisJdGVzdF9jb21taXQgSCBmaWxlNSAmJgorCWdpdCBjaGVja291dCBGICYmCisJdGVzdF9jb21taXQgSSBmaWxlNgorJworCisjIEEgLSBCIC0gQyAtIEQgLSBFCisjICAgXCAgICAgICAgICAgICBcIFwKKyMgICAgIEYgLSBHIC0gSCAtLSBMIFwgICAgICAgIC0tPiAgIEwKKyMgICAgICAgXCAgICAgICAgICAgIHwgICAgICAgICAgICAgICBcCisjICAgICAgICAgSSAtLSBHMiAtLSBKIC0tIEsgICAgICAgICAgIEkgLS0gSworIyBHMiA9IHNhbWUgY2hhbmdlcyBhcyBHCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwIHNhbWUtcmVzb2x1dGlvbiBtZXJnZXMgd2l0aCAtcCcgJworCWdpdCBjaGVja291dCBIICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEUgJiYKKwl0ZXN0X2NvbW1pdCBMIGZpbGUxIDIzICYmCisJZ2l0IGNoZWNrb3V0IEkgJiYKKwl0ZXN0X2NvbW1pdCBHMiBmaWxlMSAzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEUgJiYKKwl0ZXN0X2NvbW1pdCBKIGZpbGUxIDIzICYmCisJdGVzdF9jb21taXQgSyBmaWxlNyBmaWxlNyAmJgorCWdpdCByZWJhc2UgLWkgLXAgTCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXikgPSAkKGdpdCByZXYtcGFyc2UgTCkgJiYKKwl0ZXN0ICIyMyIgPSAiJChjYXQgZmlsZTEpIiAmJgorCXRlc3QgIkkiID0gIiQoY2F0IGZpbGU2KSIgJiYKKwl0ZXN0ICJmaWxlNyIgPSAiJChjYXQgZmlsZTcpIgorJworCisjIEEgLSBCIC0gQyAtIEQgLSBFCisjICAgXCAgICAgICAgICAgICBcIFwKKyMgICAgIEYgLSBHIC0gSCAtLSBMMiBcICAgICAgICAtLT4gICBMMgorIyAgICAgICBcICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgXAorIyAgICAgICAgIEkgLS0gRzMgLS0tIEoyIC0tIEsyICAgICAgICAgICBJIC0tIEczIC0tIEsyCisjIEcyID0gZGlmZmVyZW50IGNoYW5nZXMgYXMgRwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2VlcCBkaWZmZXJlbnQtcmVzb2x1dGlvbiBtZXJnZXMgd2l0aCAtcCcgJworCWdpdCBjaGVja291dCBIICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEUgJiYKKwl0ZXN0X2NvbW1pdCBMMiBmaWxlMSAyMyAmJgorCWdpdCBjaGVja291dCBJICYmCisJdGVzdF9jb21taXQgRzMgZmlsZTEgNCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBFICYmCisJdGVzdF9jb21taXQgSjIgZmlsZTEgMjQgJiYKKwl0ZXN0X2NvbW1pdCBLMiBmaWxlNyBmaWxlNyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLXAgTDIgJiYKKwllY2hvIDIzNCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXl4pID0gJChnaXQgcmV2LXBhcnNlIEwyKSAmJgorCXRlc3QgIjIzNCIgPSAiJChjYXQgZmlsZTEpIiAmJgorCXRlc3QgIkkiID0gIiQoY2F0IGZpbGU2KSIgJiYKKwl0ZXN0ICJmaWxlNyIgPSAiJChjYXQgZmlsZTcpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTEtcmViYXNlLXByZXNlcnZlLWFyb3VuZC1tZXJnZXMuc2ggYi90L3QzNDExLXJlYmFzZS1wcmVzZXJ2ZS1hcm91bmQtbWVyZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjODFiZjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDExLXJlYmFzZS1wcmVzZXJ2ZS1hcm91bmQtbWVyZ2VzLnNoCkBAIC0wLDAgKzEsNzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggU3RlcGhlbiBIYWJlcm1hbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIHByZXNlcnZlIG1lcmdlcworCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlIHdpdGggLXAgYW5kIHRyaWVzIHRvIHNxdWFzaCBhIGNvbW1pdCBmcm9tIGFmdGVyCithIG1lcmdlIHRvIGJlZm9yZSB0aGUgbWVyZ2UuCisnCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCisjIHNldCB1cCB0d28gYnJhbmNoZXMgbGlrZSB0aGlzOgorIworIyBBMSAtIEIxIC0gRDEgLSBFMSAtIEYxCisjICAgICAgIFwgICAgICAgIC8KKyMgICAgICAgIC0tIEMxIC0tCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQTEgJiYKKwl0ZXN0X2NvbW1pdCBCMSAmJgorCXRlc3RfY29tbWl0IEMxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBCMSAmJgorCXRlc3RfY29tbWl0IEQxICYmCisJdGVzdF9tZXJnZSBFMSBDMSAmJgorCXRlc3RfY29tbWl0IEYxCisnCisKKyMgU2hvdWxkIHJlc3VsdCBpbjoKKyMKKyMgQTEgLSBCMSAtIEQyIC0gRTIKKyMgICAgICAgXCAgICAgICAgLworIyAgICAgICAgLS0gQzEgLS0KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCBGMSBpbnRvIEQxJyAnCisJRkFLRV9MSU5FUz0iMSBzcXVhc2ggNCAyIDMiIGdpdCByZWJhc2UgLWkgLXAgQjEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEMxKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEIxKSIgJiYKKwlnaXQgdGFnIEUyCisnCisKKyMgU3RhcnQgd2l0aDoKKyMKKyMgQTEgLSBCMSAtIEQyIC0gRTIKKyMgIFwKKyMgICBHMSAtLS0tIEwxIC0tLS0gTTEKKyMgICAgXCAgICAgICAgICAgICAvCisjICAgICBIMSAtLSBKMSAtLSBLMQorIyAgICAgIFwgICAgICAgICAvCisjICAgICAgICAtLSBJMSAtLQorIworIyBBbmQgcmViYXNlIEcxLi5NMSBvbnRvIEUyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB0d28gbGV2ZWxzIG9mIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IEExICYmCisJdGVzdF9jb21taXQgRzEgJiYKKwl0ZXN0X2NvbW1pdCBIMSAmJgorCXRlc3RfY29tbWl0IEkxICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDMgSDEgJiYKKwl0ZXN0X2NvbW1pdCBKMSAmJgorCXRlc3RfbWVyZ2UgSzEgSTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBHMSAmJgorCXRlc3RfY29tbWl0IEwxICYmCisJdGVzdF9tZXJnZSBNMSBLMSAmJgorCUdJVF9FRElUT1I9OiBnaXQgcmViYXNlIC1pIC1wIEUyICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUR+MykiID0gIiQoZ2l0IHJldi1wYXJzZSBFMikiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUR+MikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMn4yKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yXjFeMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMl4xKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDEyLXJlYmFzZS1yb290LnNoIGIvdC90MzQxMi1yZWJhc2Utcm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYjUyMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxMi1yZWJhc2Utcm9vdC5zaApAQCAtMCwwICsxLDI4MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1yb290CisKK1Rlc3RzIGlmIGdpdCByZWJhc2UgLS1yb290IC0tb250byA8bmV3cGFyZW50PiBjYW4gcmViYXNlIHRoZSByb290IGNvbW1pdC4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitsb2dfd2l0aF9uYW1lcyAoKSB7CisJZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAtLXBhcmVudHMgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIEhFQUQgfAorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz1yZWZzL2hlYWRzLyQxCit9CisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSByZXBvc2l0b3J5JyAnCisJdGVzdF9jb21taXQgMSBBICYmCisJdGVzdF9jb21taXQgMiBBICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvb3RoZXIgJiYKKwlybSAuZ2l0L2luZGV4ICYmCisJdGVzdF9jb21taXQgMyBCICYmCisJdGVzdF9jb21taXQgMWIgQSAxICYmCisJdGVzdF9jb21taXQgNCBCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXJvb3QgZmFpbHMgd2l0aCB0b28gbWFueSBhcmdzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGZhaWwgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIgLS1yb290IGZhaWwgZmFpbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwcmUtcmViYXNlIGhvb2snICcKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJY2F0ID4uZ2l0L2hvb2tzL3ByZS1yZWJhc2UgPDxFT0YgJiYKKyMhJFNIRUxMX1BBVEgKK2VjaG8gIlwkMSxcJDIiID4uZ2l0L1BSRS1SRUJBU0UtSU5QVVQKK0VPRgorCWNobW9kICt4IC5naXQvaG9va3MvcHJlLXJlYmFzZQorJworY2F0ID4gZXhwZWN0IDw8RU9GCis0CiszCisyCisxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcm9vdCAtLW9udG8gPG5ld2Jhc2U+JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdvcmsgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiByZWJhc2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlYmFzZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBnb3QgY29ycmVjdCBpbnB1dCAoMSknICcKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6LS1yb290LAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yb290IC0tb250byA8bmV3YmFzZT4gPGJyYW5jaD4nICcKKwlnaXQgYnJhbmNoIHdvcmsyIG90aGVyICYmCisJZ2l0IHJlYmFzZSAtLXJvb3QgLS1vbnRvIG1hc3RlciB3b3JrMiAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJXMiID4gcmViYXNlZDIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmViYXNlZDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBnb3QgY29ycmVjdCBpbnB1dCAoMiknICcKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6LS1yb290LHdvcmsyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgLS1vbnRvIDxuZXdiYXNlPicgJworCWdpdCBjaGVja291dCAtYiB3b3JrMyBvdGhlciAmJgorCWdpdCByZWJhc2UgLWkgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IHJlYmFzZWQzICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlYmFzZWQzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgZ290IGNvcnJlY3QgaW5wdXQgKDMpJyAnCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gei0tcm9vdCwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCAtLW9udG8gPG5ld2Jhc2U+IDxicmFuY2g+JyAnCisJZ2l0IGJyYW5jaCB3b3JrNCBvdGhlciAmJgorCWdpdCByZWJhc2UgLWkgLS1yb290IC0tb250byBtYXN0ZXIgd29yazQgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IHJlYmFzZWQ0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlYmFzZWQ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgZ290IGNvcnJlY3QgaW5wdXQgKDQpJyAnCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gei0tcm9vdCx3b3JrNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLXAgd2l0aCBsaW5lYXIgaGlzdG9yeScgJworCWdpdCBjaGVja291dCAtYiB3b3JrNSBvdGhlciAmJgorCWdpdCByZWJhc2UgLWkgLXAgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IHJlYmFzZWQ1ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlYmFzZWQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgZ290IGNvcnJlY3QgaW5wdXQgKDUpJyAnCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gei0tcm9vdCwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1lcmdlIGhpc3RvcnknICcKKwlnaXQgY2hlY2tvdXQgb3RoZXJeICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCA1IEMgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgbWVyZ2Ugc2lkZQorJworCitjYXQgPiBleHBlY3Qtc2lkZSA8PCdFT0YnCitjb21taXQgd29yazYgd29yazZ+MSB3b3JrNl4yCitNZXJnZSBicmFuY2ggJ3NpZGUnIGludG8gb3RoZXIKK2NvbW1pdCB3b3JrNl4yIHdvcms2fjIKKzUKK2NvbW1pdCB3b3JrNn4xIHdvcms2fjIKKzQKK2NvbW1pdCB3b3JrNn4yIHdvcms2fjMKKzMKK2NvbW1pdCB3b3JrNn4zIHdvcms2fjQKKzIKK2NvbW1pdCB3b3JrNn40CisxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC1wIHdpdGggbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLWIgd29yazYgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIC1wIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJbG9nX3dpdGhfbmFtZXMgd29yazYgPiByZWJhc2VkNiAmJgorCXRlc3RfY21wIGV4cGVjdC1zaWRlIHJlYmFzZWQ2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBzZWNvbmQgcm9vdCBhbmQgbWVyZ2UnICcKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy90aGlyZCAmJgorCXJtIC5naXQvaW5kZXggJiYKKwlybSBBIEIgQyAmJgorCXRlc3RfY29tbWl0IDYgRCAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCBtZXJnZSB0aGlyZAorJworCitjYXQgPiBleHBlY3QtdGhpcmQgPDwnRU9GJworY29tbWl0IHdvcms3IHdvcms3fjEgd29yazdeMgorTWVyZ2UgYnJhbmNoICd0aGlyZCcgaW50byBvdGhlcgorY29tbWl0IHdvcms3XjIgd29yazd+NAorNgorY29tbWl0IHdvcms3fjEgd29yazd+MiB3b3JrN34xXjIKK01lcmdlIGJyYW5jaCAnc2lkZScgaW50byBvdGhlcgorY29tbWl0IHdvcms3fjFeMiB3b3JrN34zCis1Citjb21taXQgd29yazd+MiB3b3JrN34zCis0Citjb21taXQgd29yazd+MyB3b3JrN340CiszCitjb21taXQgd29yazd+NCB3b3JrN341CisyCitjb21taXQgd29yazd+NQorMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtcCB3aXRoIHR3byByb290cycgJworCWdpdCBjaGVja291dCAtYiB3b3JrNyBvdGhlciAmJgorCWdpdCByZWJhc2UgLWkgLXAgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlsb2dfd2l0aF9uYW1lcyB3b3JrNyA+IHJlYmFzZWQ3ICYmCisJdGVzdF9jbXAgZXhwZWN0LXRoaXJkIHJlYmFzZWQ3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHByZS1yZWJhc2UgaG9vayB0aGF0IGZhaWxzJyAnCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCWNhdCA+LmdpdC9ob29rcy9wcmUtcmViYXNlIDw8RU9GICYmCisjISRTSEVMTF9QQVRICitmYWxzZQorRU9GCisJY2htb2QgK3ggLmdpdC9ob29rcy9wcmUtcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBzdG9wcyByZWJhc2UnICcKKwlnaXQgY2hlY2tvdXQgLWIgc3RvcHMxIG90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0genJlZnMvaGVhZHMvc3RvcHMxICYmCisJdGVzdCAwID0gJChnaXQgcmV2LWxpc3Qgb3RoZXIuLi5zdG9wczEgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIHN0b3BzIHJlYmFzZSAtaScgJworCWdpdCBjaGVja291dCAtYiBzdG9wczIgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy9zdG9wczIgJiYKKwl0ZXN0IDAgPSAkKGdpdCByZXYtbGlzdCBvdGhlci4uLnN0b3BzMiB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgcHJlLXJlYmFzZSBob29rJyAnCisJcm0gLWYgLmdpdC9ob29rcy9wcmUtcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhIGNvbmZsaWN0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gY29uZmxpY3QgPiBCICYmCisJZ2l0IGFkZCBCICYmCisJZ2l0IGNvbW1pdCAtbSBjb25mbGljdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yb290IHdpdGggY29uZmxpY3QgKGZpcnN0IHBhcnQpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0MSBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXUgfCBncmVwICJCJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4IHRoZSBjb25mbGljdCcgJworCWVjaG8gMyA+IEIgJiYKKwlnaXQgYWRkIEIKKycKKworY2F0ID4gZXhwZWN0LWNvbmZsaWN0IDw8RU9GCis2Cis1Cis0CiszCitjb25mbGljdAorMgorMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXJvb3Qgd2l0aCBjb25mbGljdCAoc2Vjb25kIHBhcnQpJyAnCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiBjb25mbGljdDEgJiYKKwl0ZXN0X2NtcCBleHBlY3QtY29uZmxpY3QgY29uZmxpY3QxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3Qgd2l0aCBjb25mbGljdCAoZmlyc3QgcGFydCknICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QyIG90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtdSB8IGdyZXAgIkIkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXggdGhlIGNvbmZsaWN0JyAnCisJZWNobyAzID4gQiAmJgorCWdpdCBhZGQgQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHdpdGggY29uZmxpY3QgKHNlY29uZCBwYXJ0KScgJworCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJXMiID4gY29uZmxpY3QyICYmCisJdGVzdF9jbXAgZXhwZWN0LWNvbmZsaWN0IGNvbmZsaWN0MgorJworCitjYXQgPmV4cGVjdC1jb25mbGljdC1wIDw8XEVPRgorY29tbWl0IGNvbmZsaWN0MyBjb25mbGljdDN+MSBjb25mbGljdDNeMgorTWVyZ2UgYnJhbmNoICd0aGlyZCcgaW50byBvdGhlcgorY29tbWl0IGNvbmZsaWN0M14yIGNvbmZsaWN0M340Cis2Citjb21taXQgY29uZmxpY3QzfjEgY29uZmxpY3QzfjIgY29uZmxpY3QzfjFeMgorTWVyZ2UgYnJhbmNoICdzaWRlJyBpbnRvIG90aGVyCitjb21taXQgY29uZmxpY3QzfjFeMiBjb25mbGljdDN+MworNQorY29tbWl0IGNvbmZsaWN0M34yIGNvbmZsaWN0M34zCis0Citjb21taXQgY29uZmxpY3QzfjMgY29uZmxpY3QzfjQKKzMKK2NvbW1pdCBjb25mbGljdDN+NCBjb25mbGljdDN+NQorY29uZmxpY3QKK2NvbW1pdCBjb25mbGljdDN+NSBjb25mbGljdDN+NgorMgorY29tbWl0IGNvbmZsaWN0M342CisxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC1wIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChmaXJzdCBwYXJ0KScgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdDMgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC1wIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxzLWZpbGVzIC11IHwgZ3JlcCAiQiQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpeCB0aGUgY29uZmxpY3QnICcKKwllY2hvIDMgPiBCICYmCisJZ2l0IGFkZCBCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtcCAtLXJvb3Qgd2l0aCBjb25mbGljdCAoc2Vjb25kIHBhcnQpJyAnCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJbG9nX3dpdGhfbmFtZXMgY29uZmxpY3QzID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QtY29uZmxpY3QtcCBvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDEzLXJlYmFzZS1ob29rLnNoIGIvdC90MzQxMy1yZWJhc2UtaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOThiNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxMy1yZWJhc2UtaG9vay5zaApAQCAtMCwwICsxLDE0NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2Ugd2l0aCBpdHMgaG9vayhzKScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gaGVsbG8gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIGdvb2RieWUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisJZWNobyB3b3JsZCA+Z2l0ICYmCisJZ2l0IGFkZCBnaXQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNpZGUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtLWdyYXBoIC0tYWxsICYmCisJZ2l0IGJyYW5jaCB0ZXN0IHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCXRlc3QgInokKGNhdCBnaXQpIiA9IHp3b3JsZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCUVESVRPUj10cnVlIGdpdCByZWJhc2UgLWkgbWFzdGVyICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHByZS1yZWJhc2UgaG9vaycgJworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwljYXQgPi5naXQvaG9va3MvcHJlLXJlYmFzZSA8PEVPRiAmJgorIyEkU0hFTExfUEFUSAorZWNobyAiXCQxLFwkMiIgPi5naXQvUFJFLVJFQkFTRS1JTlBVVAorRU9GCisJY2htb2QgK3ggLmdpdC9ob29rcy9wcmUtcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBnZXRzIGNvcnJlY3QgaW5wdXQgKDEpJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCXRlc3QgInokKGNhdCBnaXQpIiA9IHp3b3JsZCAmJgorCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHptYXN0ZXIsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIGdldHMgY29ycmVjdCBpbnB1dCAoMiknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgbWFzdGVyIHRlc3QgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQgJiYKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6bWFzdGVyLHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIGdldHMgY29ycmVjdCBpbnB1dCAoMyknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmViYXNlIG1hc3RlciB0ZXN0ICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkICYmCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gem1hc3Rlcix0ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBnZXRzIGNvcnJlY3QgaW5wdXQgKDQpJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlFRElUT1I9dHJ1ZSBnaXQgcmViYXNlIC1pIG1hc3RlciAmJgorCXRlc3QgInokKGNhdCBnaXQpIiA9IHp3b3JsZCAmJgorCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHptYXN0ZXIsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIGdldHMgY29ycmVjdCBpbnB1dCAoNSknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCUVESVRPUj10cnVlIGdpdCByZWJhc2UgLWkgbWFzdGVyIHRlc3QgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQgJiYKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6bWFzdGVyLHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIGdldHMgY29ycmVjdCBpbnB1dCAoNiknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlFRElUT1I9dHJ1ZSBnaXQgcmViYXNlIC1pIG1hc3RlciB0ZXN0ICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkICYmCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gem1hc3Rlcix0ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHByZS1yZWJhc2UgaG9vayB0aGF0IGZhaWxzJyAnCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCWNhdCA+LmdpdC9ob29rcy9wcmUtcmViYXNlIDw8RU9GICYmCisjISRTSEVMTF9QQVRICitmYWxzZQorRU9GCisJY2htb2QgK3ggLmdpdC9ob29rcy9wcmUtcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBzdG9wcyByZWJhc2UgKDEpJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlciAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0genJlZnMvaGVhZHMvdGVzdCAmJgorCXRlc3QgMCA9ICQoZ2l0IHJldi1saXN0IEhFQUQuLi5zaWRlIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBzdG9wcyByZWJhc2UgKDIpJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwkoCisJCUVESVRPUj06CisJCWV4cG9ydCBFRElUT1IKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIKKwkpICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy90ZXN0ICYmCisJdGVzdCAwID0gJChnaXQgcmV2LWxpc3QgSEVBRC4uLnNpZGUgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbm8tdmVyaWZ5IG92ZXJyaWRlcyBwcmUtcmViYXNlICgxKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLW5vLXZlcmlmeSBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHpyZWZzL2hlYWRzL3Rlc3QgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbm8tdmVyaWZ5IG92ZXJyaWRlcyBwcmUtcmViYXNlICgyKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJRURJVE9SPXRydWUgZ2l0IHJlYmFzZSAtLW5vLXZlcmlmeSAtaSBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHpyZWZzL2hlYWRzL3Rlc3QgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDE0LXJlYmFzZS1wcmVzZXJ2ZS1vbnRvLnNoIGIvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZTBhNmNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaApAQCAtMCwwICsxLDgwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEdyZWcgUHJpY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtcCBzaG91bGQgcmVzcGVjdCAtLW9udG8KKworSW4gYSByZWJhc2Ugd2l0aCAtLW9udG8sIHdlIHNob3VsZCByZXdyaXRlIGFsbCB0aGUgY29tbWl0cyB0aGF0CithcmVuJyInIid0IG9uIHRvcCBvZiAkT05UTywgZXZlbiBpZiB0aGV5IGFyZSBvbiB0b3Agb2YgJFVQU1RSRUFNLgorJworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCisjIFNldCB1cCBicmFuY2hlcyBsaWtlIHRoaXM6CisjIEExLS0tQjEtLS1FMS0tLUYxLS0tRzEKKyMgIFwgICAgXCAgICAgICAgICAgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLS0vCisjICAgIEgxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQTEgJiYKKwl0ZXN0X2NvbW1pdCBCMSAmJgorCXRlc3RfY29tbWl0IEMxICYmCisJdGVzdF9jb21taXQgRDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEIxICYmCisJdGVzdF9jb21taXQgRTEgJiYKKwl0ZXN0X2NvbW1pdCBGMSAmJgorCXRlc3RfbWVyZ2UgRzEgRDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEExICYmCisJdGVzdF9jb21taXQgSDEKKycKKworIyBOb3cgcmViYXNlIG1lcmdlIEcxIGZyb20gYm90aCBicmFuY2hlcycgYmFzZSBCMSwgYm90aCBzaG91bGQgbW92ZToKKyMgQTEtLS1CMS0tLUUxLS0tRjEtLS1HMQorIyAgXCAgICBcICAgICAgICAgICAgIC8KKyMgICBcICAgIFwtLUMxLS0tRDEtLS8KKyMgICAgXAorIyAgICAgSDEtLS1FMi0tLUYyLS0tRzIKKyMgICAgICBcICAgICAgICAgICAgIC8KKyMgICAgICAgXC0tQzItLS1EMi0tLworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZnJvbSBCMSBvbnRvIEgxJyAnCisJZ2l0IGNoZWNrb3V0IEcxICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gSDEgQjEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xXjFeMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMl4xXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSDEpIgorJworCisjIE9uIHRoZSBvdGhlciBoYW5kIGlmIHJlYmFzZSBmcm9tIEUxIHdoaWNoIGlzIHdpdGhpbiBvbmUgYnJhbmNoLAorIyB0aGVuIHRoZSBvdGhlciBicmFuY2ggc3RheXM6CisjIEExLS0tQjEtLS1FMS0tLUYxLS0tRzEKKyMgIFwgICAgXCAgICAgICAgICAgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLS0vCisjICAgIFwgICAgICAgICAgICAgXAorIyAgICAgSDEtLS0tLUYzLS0tLS1HMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZnJvbSBFMSBvbnRvIEgxJyAnCisJZ2l0IGNoZWNrb3V0IEcxICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gSDEgRTEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSDEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgRDEpIgorJworCisjIEFuZCB0aGUgc2FtZSBpZiB3ZSByZWJhc2UgZnJvbSBhIGNvbW1pdCBpbiB0aGUgc2Vjb25kLXBhcmVudCBicmFuY2guCisjIEExLS0tQjEtLS1FMS0tLUYxLS0tLUcxCisjICBcICAgIFwgICAgICAgICAgXCAgIC8KKyMgICBcICAgIFwtLUMxLS0tRDEtXC0vCisjICAgIFwgICAgICAgICAgICAgICBcCisjICAgICBIMS0tLS0tLUQzLS0tLS0tRzQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZyb20gQzEgb250byBIMScgJworCWdpdCBjaGVja291dCBHMSAmJgorCWdpdCByZXYtbGlzdCAtLWZpcnN0LXBhcmVudCAtLXByZXR0eT1vbmVsaW5lIEMxLi5HMSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIEgxIEMxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMl4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEgxKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEYxKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDE1LXJlYmFzZS1hdXRvc3F1YXNoLnNoIGIvdC90MzQxNS1yZWJhc2UtYXV0b3NxdWFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMWU4NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxNS1yZWJhc2UtYXV0b3NxdWFzaC5zaApAQCAtMCwwICsxLDE5NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2F1dG8gc3F1YXNoJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyAwID5maWxlMCAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCWVjaG8gMCA+ZmlsZTEgJiYKKwllY2hvIDIgPmZpbGUyICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiAmJgorCWdpdCB0YWcgZmlyc3QtY29tbWl0ICYmCisJZWNobyAzID5maWxlMyAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCBjb21taXQiICYmCisJZ2l0IHRhZyBiYXNlCisnCisKK3Rlc3RfYXV0b19maXh1cCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJmaXh1cCEgZmlyc3QiICYmCisKKwlnaXQgdGFnICQxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAkMiAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJDEgJiYKKwl0ZXN0IDEgPSAiJChnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSkiICYmCisJdGVzdCAxID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCBmaXJzdCB8IHdjIC1sKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIGZpeHVwIChvcHRpb24pJyAnCisJdGVzdF9hdXRvX2ZpeHVwIGZpbmFsLWZpeHVwLW9wdGlvbiAtLWF1dG9zcXVhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0byBmaXh1cCAoY29uZmlnKScgJworCWdpdCBjb25maWcgcmViYXNlLmF1dG9zcXVhc2ggdHJ1ZSAmJgorCXRlc3RfYXV0b19maXh1cCBmaW5hbC1maXh1cC1jb25maWctdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3RfYXV0b19maXh1cCBmaXh1cC1jb25maWctdHJ1ZS1ubyAtLW5vLWF1dG9zcXVhc2ggJiYKKwlnaXQgY29uZmlnIHJlYmFzZS5hdXRvc3F1YXNoIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF9hdXRvX2ZpeHVwIGZpbmFsLWZpeHVwLWNvbmZpZy1mYWxzZQorJworCit0ZXN0X2F1dG9fc3F1YXNoICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgZmlyc3QiICYmCisKKwlnaXQgdGFnICQxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAkMiAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJDEgJiYKKwl0ZXN0IDEgPSAiJChnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSkiICYmCisJdGVzdCAyID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCBmaXJzdCB8IHdjIC1sKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHNxdWFzaCAob3B0aW9uKScgJworCXRlc3RfYXV0b19zcXVhc2ggZmluYWwtc3F1YXNoIC0tYXV0b3NxdWFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHNxdWFzaCAoY29uZmlnKScgJworCWdpdCBjb25maWcgcmViYXNlLmF1dG9zcXVhc2ggdHJ1ZSAmJgorCXRlc3RfYXV0b19zcXVhc2ggZmluYWwtc3F1YXNoLWNvbmZpZy10cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF9hdXRvX3NxdWFzaCBzcXVhc2gtY29uZmlnLXRydWUtbm8gLS1uby1hdXRvc3F1YXNoICYmCisJZ2l0IGNvbmZpZyByZWJhc2UuYXV0b3NxdWFzaCBmYWxzZSAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3RfYXV0b19zcXVhc2ggZmluYWwtc3F1YXNoLWNvbmZpZy1mYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzcGVsbGVkIGF1dG8gc3F1YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzcXVhc2ghIGZvcnN0IiAmJgorCWdpdCB0YWcgZmluYWwtbWlzc3F1YXNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLW1pc3NxdWFzaCAmJgorCXRlc3QgMCA9ICQoZ2l0IHJldi1saXN0IGZpbmFsLW1pc3NxdWFzaC4uLkhFQUQgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0byBzcXVhc2ggdGhhdCBtYXRjaGVzIDIgY29tbWl0cycgJworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gNCA+ZmlsZTQgJiYKKwlnaXQgYWRkIGZpbGU0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QgbmV3IGNvbW1pdCIgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgZmlyc3QiICYmCisJZ2l0IHRhZyBmaW5hbC1tdWx0aXNxdWFzaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUR+NCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLW11bHRpc3F1YXNoICYmCisJdGVzdCAxID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF5eOmZpbGUxKSIgJiYKKwl0ZXN0IDIgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF5eIHwgZ3JlcCBmaXJzdCB8IHdjIC1sKSAmJgorCXRlc3QgMSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBmaXJzdCB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHNxdWFzaCB0aGF0IG1hdGNoZXMgYSBjb21taXQgYWZ0ZXIgdGhlIHNxdWFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISB0aGlyZCIgJiYKKwllY2hvIDQgPmZpbGU0ICYmCisJZ2l0IGFkZCBmaWxlNCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInRoaXJkIGNvbW1pdCIgJiYKKwlnaXQgdGFnIGZpbmFsLXByZXNxdWFzaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUR+NCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLXByZXNxdWFzaCAmJgorCXRlc3QgMCA9ICIkKGdpdCBjYXQtZmlsZSBibG9iIEhFQUReXjpmaWxlMSkiICYmCisJdGVzdCAxID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEpIiAmJgorCXRlc3QgMSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCB0aGlyZCB8IHdjIC1sKSAmJgorCXRlc3QgMSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IGdyZXAgdGhpcmQgfCB3YyAtbCkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gc3F1YXNoIHRoYXQgbWF0Y2hlcyBhIHNoYTEnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pIiAmJgorCWdpdCB0YWcgZmluYWwtc2hhc3F1YXNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLXNoYXNxdWFzaCAmJgorCXRlc3QgMSA9ICIkKGdpdCBjYXQtZmlsZSBibG9iIEhFQUReOmZpbGUxKSIgJiYKKwl0ZXN0IDEgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBncmVwIHNxdWFzaCB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHNxdWFzaCB0aGF0IG1hdGNoZXMgbG9uZ2VyIHNoYTEnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9MTEgSEVBRF4pIiAmJgorCWdpdCB0YWcgZmluYWwtbG9uZ3NoYXNxdWFzaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUReXl4gJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBmaW5hbC1sb25nc2hhc3F1YXNoICYmCisJdGVzdCAxID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEpIiAmJgorCXRlc3QgMSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IGdyZXAgc3F1YXNoIHwgd2MgLWwpCisnCisKK3Rlc3RfYXV0b19jb21taXRfZmxhZ3MgKCkgeworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLSQxIGZpcnN0LWNvbW1pdCAmJgorCWdpdCB0YWcgZmluYWwtY29tbWl0LSQxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLWNvbW1pdC0kMSAmJgorCXRlc3QgMSA9ICIkKGdpdCBjYXQtZmlsZSBibG9iIEhFQUReOmZpbGUxKSIgJiYKKwl0ZXN0ICQyID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCBmaXJzdCB8IHdjIC1sKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgY29tbWl0IC0tZml4dXAnICcKKwl0ZXN0X2F1dG9fY29tbWl0X2ZsYWdzIGZpeHVwIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIGNvbW1pdCAtLXNxdWFzaCcgJworCXRlc3RfYXV0b19jb21taXRfZmxhZ3Mgc3F1YXNoIDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDE2LXJlYmFzZS1vbnRvLXRocmVlZG90cy5zaCBiL3QvdDM0MTYtcmViYXNlLW9udG8tdGhyZWVkb3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRkZjJmNjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDE2LXJlYmFzZS1vbnRvLXRocmVlZG90cy5zaApAQCAtMCwwICsxLDEwNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1vbnRvIEEuLi5CJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItcmViYXNlLnNoIgorCisjIFJlYmFzZSBvbmx5IHRoZSB0aXAgY29tbWl0IG9mICJ0b3BpYyIgb24gbWVyZ2UgYmFzZSBiZXR3ZWVuICJtYXN0ZXIiCisjIGFuZCAidG9waWMiLiAgQ2Fubm90IGRvIHRoaXMgZm9yICJzaWRlIiB3aXRoICJtYXN0ZXIiIGJlY2F1c2UgdGhlcmUKKyMgaXMgbm8gc2luZ2xlIG1lcmdlIGJhc2UuCisjCisjCisjCSAgICBGLS0tRyB0b3BpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRycKKyMJICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8KKyMgQS0tLUItLS1DLS0tRC0tLUUgbWFzdGVyICAgICAgLS0+ICAgICAgIEEtLS1CLS0tQy0tLUQtLS1FCisjICAgICAgXCAgIFwgLworIwlcICAgeAorIwkgXCAvIFwKKyMJICBILS0tSS0tLUotLS1LIHNpZGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgQSAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IGJyYW5jaCB0b3BpYyAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdF9jb21taXQgSCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgSCAmJgorCWdpdCB0YWcgRCAmJgorCXRlc3RfY29tbWl0IEUgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwl0ZXN0X2NvbW1pdCBGICYmCisJdGVzdF9jb21taXQgRyAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIEMgJiYKKwlnaXQgdGFnIEkgJiYKKwl0ZXN0X2NvbW1pdCBKICYmCisJdGVzdF9jb21taXQgSworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1vbnRvIG1hc3Rlci4uLnRvcGljJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCisJZ2l0IHJlYmFzZSAtLW9udG8gbWFzdGVyLi4udG9waWMgRiAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIENeMCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1vbnRvIG1hc3Rlci4uLicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEcgJiYKKworCWdpdCByZWJhc2UgLS1vbnRvIG1hc3Rlci4uLiBGICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQ14wID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW9udG8gbWFzdGVyLi4uc2lkZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSyAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW9udG8gbWFzdGVyLi4uc2lkZSBKCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4udG9waWMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJZ2l0IHJlc2V0IC0taGFyZCBHICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRVhQRUNUX0NPVU5UPTEgZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4udG9waWMgRiAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIENeMCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1vbnRvIG1hc3Rlci4uLicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEcgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlFWFBFQ1RfQ09VTlQ9MSBnaXQgcmViYXNlIC1pIC0tb250byBtYXN0ZXIuLi4gRiAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIENeMCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1vbnRvIG1hc3Rlci4uLnNpZGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEsgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3Rlci4uLnNpZGUgSgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTctcmViYXNlLXdoaXRlc3BhY2UtZml4LnNoIGIvdC90MzQxNy1yZWJhc2Utd2hpdGVzcGFjZS1maXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWZiM2U0OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTctcmViYXNlLXdoaXRlc3BhY2UtZml4LnNoCkBAIC0wLDAgKzEsMTI2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLXdoaXRlc3BhY2U9Zml4CisKK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeCBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgd29ya3MuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIHByZXBhcmUgaW5pdGlhbCByZXZpc2lvbiBvZiAiZmlsZSIgd2l0aCBhIGJsYW5rIGxpbmUgYXQgdGhlIGVuZAorY2F0ID5maWxlIDw8RU9GCithCitiCitjCisKK0VPRgorCisjIGV4cGVjdGVkIGNvbnRlbnRzIGluICJmaWxlIiBhZnRlciByZWJhc2UKK2NhdCA+ZXhwZWN0LWZpcnN0IDw8RU9GCithCitiCitjCitFT0YKKworIyBwcmVwYXJlIHNlY29uZCByZXZpc2lvbiBvZiAiZmlsZSIKK2NhdCA+c2Vjb25kIDw8RU9GCithCitiCitjCisKK2QKK2UKK2YKKworCisKKworRU9GCisKKyMgZXhwZWN0ZWQgY29udGVudHMgaW4gc2Vjb25kIHJldmlzaW9uIGFmdGVyIHJlYmFzZQorY2F0ID5leHBlY3Qtc2Vjb25kIDw8RU9GCithCitiCitjCisKK2QKK2UKK2YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBsaW5lIGF0IGVuZCBvZiBmaWxlOyBleHRlbmQgYXQgZW5kIG9mIGZpbGUnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkluaXRpYWwgZW1wdHkgY29tbWl0IiAmJgorCWdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisJbXYgc2Vjb25kIGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwlnaXQgcmViYXNlIC0td2hpdGVzcGFjZT1maXggSEVBRF5eICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRF46ZmlsZSBleHBlY3QtZmlyc3QgJiYKKwl0ZXN0X2NtcCBmaWxlIGV4cGVjdC1zZWNvbmQKKycKKworIyBwcmVwYXJlIHRoaXJkIHJldmlzaW9uIG9mICJmaWxlIgorc2VkIC1lJ3MvWi8vJyA+dGhpcmQgPDxFT0YKK2EKK2IKK2MKKworZAorZQorZgorICAgIFoKKyBaCitoCitpCitqCitrCitsCitFT0YKKworc2VkIC1lJ3MvIC8vZycgPHRoaXJkID5leHBlY3QtdGhpcmQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIGJsYW5rcyBsaW5lIGF0IGVuZCBvZiBmaWxlOyBleHRlbmQgYXQgZW5kIG9mIGZpbGUnICcKKwljcCB0aGlyZCBmaWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIHRoaXJkICYmCisJZ2l0IHJlYmFzZSAtLXdoaXRlc3BhY2U9Zml4IEhFQUReXiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUReOmZpbGUgZXhwZWN0LXNlY29uZCAmJgorCXRlc3RfY21wIGZpbGUgZXhwZWN0LXRoaXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUsIGJ1dCBkbyBub3QgcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcycgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICItYmxhbmstYXQtZW9sIiAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwljcCB0aGlyZCBmaWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIHRoaXJkICYmCisJZ2l0IHJlYmFzZSAtLXdoaXRlc3BhY2U9Zml4IEhFQUReXiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUReOmZpbGUgZXhwZWN0LXNlY29uZCAmJgorCXRlc3RfY21wIGZpbGUgdGhpcmQKKycKKworc2VkIC1lJ3MvWi8vJyA+YmVnaW5uaW5nIDw8RU9GCithCisJCSAgICBaCisgICAgICAgWgorRU9GCisKK2NhdCA+ZXhwZWN0LWJlZ2lubmluZyA8PEVPRgorYQorCisKKzEKKzIKKzMKKzQKKzUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdCBiZWdpbm5pbmcgb2YgZmlsZScgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJibGFuay1hdC1lb2wiICYmCisJY3AgYmVnaW5uaW5nIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJlZ2lubmluZyBmaWxlICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1OyBkbworCQllY2hvICRpCisJZG9uZSA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBtb3JlIGZpbGUJJiYKKwlnaXQgcmViYXNlIC0td2hpdGVzcGFjZT1maXggSEVBRF5eICYmCisJdGVzdF9jbXAgZmlsZSBleHBlY3QtYmVnaW5uaW5nCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxOC1yZWJhc2UtY29udGludWUuc2ggYi90L3QzNDE4LXJlYmFzZS1jb250aW51ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNjgwMzc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxOC1yZWJhc2UtY29udGludWUuc2gKQEAgLTAsMCArMSw5OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1jb250aW51ZSB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCitzZXRfZmFrZV9lZGl0b3IKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYxIiBGMSAxICYmCisJdGVzdF9jb21taXQgImNvbW1pdC1uZXctZmlsZS1GMiIgRjIgMiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIEhFQUReICYmCisJdGVzdF9jb21taXQgImNvbW1pdC1uZXctZmlsZS1GMi1vbi10b3BpYy1icmFuY2giIEYyIDIyICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyYWN0aXZlIHJlYmFzZSAtLWNvbnRpbnVlIHdvcmtzIHdpdGggdG91Y2hlZCBmaWxlJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLSogJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJdGVzdC1jaG10aW1lID0tNjAgRjEgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWludGVyYWN0aXZlIHJlYmFzZSAtLWNvbnRpbnVlIHdvcmtzIHdpdGggdG91Y2hlZCBmaWxlJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLSogJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW9udG8gbWFzdGVyIG1hc3RlciB0b3BpYyAmJgorCWVjaG8gIlJlc29sdmVkIiA+RjIgJiYKKwlnaXQgYWRkIEYyICYmCisJdGVzdC1jaG10aW1lID0tNjAgRjEgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tY29udGludWUgY2FuIG5vdCBiZSB1c2VkIHdpdGggb3RoZXIgb3B0aW9ucycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXYgLS1jb250aW51ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAtdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1jb250aW51ZSByZW1lbWJlcnMgbWVyZ2Ugc3RyYXRlZ3kgYW5kIG9wdGlvbnMnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0LW5ldy1maWxlLUYyLW9uLXRvcGljLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0ICJjb21taXQtbmV3LWZpbGUtRjMtb24tdG9waWMtYnJhbmNoIiBGMyAzMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIHRlc3QtYmluIGZ1bm55Lndhcy5ydW4iICYmCisJbWtkaXIgdGVzdC1iaW4gJiYKKwljYXQgPnRlc3QtYmluL2dpdC1tZXJnZS1mdW5ueSA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisJY2FzZSAiXCQxIiBpbiAtLW9wdCkgOzsgKikgZXhpdCAyIDs7IGVzYWMKKwlzaGlmdCAmJgorCT5mdW5ueS53YXMucnVuICYmCisJZXhlYyBnaXQgbWVyZ2UtcmVjdXJzaXZlICJcJEAiCisJRU9GCisJY2htb2QgK3ggdGVzdC1iaW4vZ2l0LW1lcmdlLWZ1bm55ICYmCisJKAorCQlQQVRIPS4vdGVzdC1iaW46JFBBVEgKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtcyBmdW5ueSAtWG9wdCBtYXN0ZXIgdG9waWMKKwkpICYmCisJdGVzdCAtZiBmdW5ueS53YXMucnVuICYmCisJcm0gZnVubnkud2FzLnJ1biAmJgorCWVjaG8gIlJlc29sdmVkIiA+RjIgJiYKKwlnaXQgYWRkIEYyICYmCisJKAorCQlQQVRIPS4vdGVzdC1iaW46JFBBVEgKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3QgLWYgZnVubnkud2FzLnJ1bgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1jb250aW51ZSByZW1lbWJlcnMgLS1yZXJlcmUtYXV0b3VwZGF0ZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS0qICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXQtbmV3LWZpbGUtRjMtb24tdG9waWMtYnJhbmNoICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0ICJjb21taXQtbmV3LWZpbGUtRjMiIEYzIDMgJiYKKwlnaXQgY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1tIG1hc3RlciB0b3BpYyAmJgorCWVjaG8gIlJlc29sdmVkIiA+RjIgJiYKKwlnaXQgYWRkIEYyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyAiUmVzb2x2ZWQiID5GMyAmJgorCWdpdCBhZGQgRjMgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvcGljQHsxfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLW0gLS1yZXJlcmUtYXV0b3VwZGF0ZSBtYXN0ZXIgJiYKKwl0ZXN0ICIkKGNhdCBGMikiID0gIlJlc29sdmVkIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgIiQoY2F0IEYzKSIgPSAiUmVzb2x2ZWQiICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxOS1yZWJhc2UtcGF0Y2gtaWQuc2ggYi90L3QzNDE5LXJlYmFzZS1wYXRjaC1pZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNzBhYzEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxOS1yZWJhc2UtcGF0Y2gtaWQuc2gKQEAgLTAsMCArMSwxMDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIC0gdGVzdCBwYXRjaCBpZCBjb21wdXRhdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3Rfc2V0X3ByZXJlcSBOT1RfRVhQRU5TSVZFCit0ZXN0IC1uICIkR0lUX1BBVENISURfVElNSU5HX1RFU1RTIiAmJiB0ZXN0X3NldF9wcmVyZXEgRVhQRU5TSVZFCit0ZXN0IC14IC91c3IvYmluL3RpbWUgJiYgdGVzdF9zZXRfcHJlcmVxIFVTUl9CSU5fVElNRQorCitjb3VudCgpCit7CisJaT0wCisJd2hpbGUgdGVzdCAkaSAtbHQgJDEKKwlkbworCQllY2hvICIkaSIKKwkJaT0kKCgkaSsxKSkKKwlkb25lCit9CisKK3NjcmFtYmxlKCkKK3sKKwlpPTAKKwl3aGlsZSByZWFkIHgKKwlkbworCQlpZiB0ZXN0ICRpIC1uZSAwCisJCXRoZW4KKwkJCWVjaG8gIiR4IgorCQlmaQorCQlpPSQoKCgkaSsxKSAlIDEwKSkKKwlkb25lIDwgIiQxIiA+ICIkMS5uZXciCisJbXYgLWYgIiQxLm5ldyIgIiQxIgorfQorCitydW4oKQoreworCWVjaG8gXCQgIiRAIgorCS91c3IvYmluL3RpbWUgIiRAIiA+L2Rldi9udWxsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIHJvb3QKKycKKworZG9fdGVzdHMoKQoreworCXByPSQxCisJbmxpbmVzPSQyCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAic2V0dXA6ICRubGluZXMgbGluZXMiICIKKwkJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJZ2l0IGNoZWNrb3V0IC1xIC1mIG1hc3RlciAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHJvb3QgJiYKKwkJY291bnQgJG5saW5lcyA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtcSAtbSBpbml0aWFsICYmCisJCWdpdCBicmFuY2ggLWYgb3RoZXIgJiYKKworCQlzY3JhbWJsZSBmaWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1xIC1tICdjaGFuZ2UgYmlnIGZpbGUnICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1xIG90aGVyICYmCisJCTogPm5ld2ZpbGUgJiYKKwkJZ2l0IGFkZCBuZXdmaWxlICYmCisJCWdpdCBjb21taXQgLXEgLW0gJ2FkZCBzbWFsbCBmaWxlJyAmJgorCisJCWdpdCBjaGVycnktcGljayBtYXN0ZXIgPi9kZXYvbnVsbCAyPiYxCisJIgorCisJdGVzdF9kZWJ1ZyAiCisJCXJ1biBnaXQgZGlmZiBtYXN0ZXJeXCEKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAnc2V0dXAgYXR0cmlidXRlcycgIgorCQllY2hvICdmaWxlIGJpbmFyeScgPi5naXRhdHRyaWJ1dGVzCisJIgorCisJdGVzdF9kZWJ1ZyAiCisJCXJ1biBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3RlciAmJgorCQlydW4gZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSBtYXN0ZXIKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAnZGV0ZWN0IHVwc3RyZWFtIHBhdGNoJyAiCisJCWdpdCBjaGVja291dCAtcSBtYXN0ZXIgJiYKKwkJc2NyYW1ibGUgZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtcSAtbSAnY2hhbmdlIGJpZyBmaWxlIGFnYWluJyAmJgorCQlnaXQgY2hlY2tvdXQgLXEgb3RoZXJee30gJiYKKwkJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtbiBcIlwkKGdpdCByZXYtbGlzdCBtYXN0ZXIuLi5IRUFEfilcIgorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByICdkbyBub3QgZHJvcCBwYXRjaCcgIgorCQlnaXQgYnJhbmNoIC1mIHNxdWFzaGVkIG1hc3RlciAmJgorCQlnaXQgY2hlY2tvdXQgLXEgLWYgc3F1YXNoZWQgJiYKKwkJZ2l0IHJlc2V0IC1xIC0tc29mdCBIRUFEfjIgJiYKKwkJZ2l0IGNvbW1pdCAtcSAtbSBzcXVhc2hlZCAmJgorCQlnaXQgY2hlY2tvdXQgLXEgb3RoZXJee30gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSBzcXVhc2hlZCAmJgorCQlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkKKwkiCit9CisKK2RvX3Rlc3RzIE5PVF9FWFBFTlNJVkUgNTAwCitkb190ZXN0cyBFWFBFTlNJVkUgNTAwMDAKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTAwLWNoZXJyeS5zaCBiL3QvdDM1MDAtY2hlcnJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwMzhmMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTAwLWNoZXJyeS5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFlhbm4gRGlyc29uLCBiYXNlZCBvbiB0MzQwMCBieSBBbW9zIFdhdGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlcnJ5IHNob3VsZCBkZXRlY3QgcGF0Y2hlcyBpbnRlZ3JhdGVkIHVwc3RyZWFtCisKK1RoaXMgdGVzdCBjaGVycnktcGlja3Mgb25lIGxvY2FsIGNoYW5nZSBvZiB0d28gaW50byBtYXN0ZXIgYnJhbmNoLCBhbmQKK2NoZWNrcyB0aGF0IGdpdCBjaGVycnkgb25seSByZXR1cm5zIHRoZSBzZWNvbmQgcGF0Y2ggaW4gdGhlIGxvY2FsIGJyYW5jaAorJworLiAuL3Rlc3QtbGliLnNoCisKK0dJVF9BVVRIT1JfRU1BSUw9Ym9ndXNfZW1haWxfYWRkcmVzcworZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgcmVwb3NpdG9yeSB3aXRoIHRvcGljIGJyYW5jaCwgYW5kIGNoZWNrIGNoZXJyeSBmaW5kcyB0aGUgMiBwYXRjaGVzIGZyb20gdGhlcmUnIFwKKyAgICAnZWNobyBGaXJzdCA+IEEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCisgICAgIHRlc3RfdGljayAmJgorICAgICBnaXQgY29tbWl0IC1tICJBZGQgQS4iICYmCisKKyAgICAgZ2l0IGNoZWNrb3V0IC1iIG15LXRvcGljLWJyYW5jaCAmJgorCisgICAgIGVjaG8gU2Vjb25kID4gQiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEIgJiYKKyAgICAgdGVzdF90aWNrICYmCisgICAgIGdpdCBjb21taXQgLW0gIkFkZCBCLiIgJiYKKworICAgICBlY2hvIEFub3RoZXJTZWNvbmQgPiBDICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQyAmJgorICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiQWRkIEMuIiAmJgorCisgICAgIGdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKyAgICAgcm0gLWYgQiBDICYmCisKKyAgICAgZWNobyBUaGlyZCA+PiBBICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggQSAmJgorICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiTW9kaWZ5IEEuIiAmJgorCisgICAgIGV4cHIgIiQoZWNobyAkKGdpdCBjaGVycnkgbWFzdGVyIG15LXRvcGljLWJyYW5jaCkgKSIgOiAiKyBbXiBdKiArIC4qIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2sgdGhhdCBjaGVycnkgd2l0aCBsaW1pdCByZXR1cm5zIG9ubHkgdGhlIHRvcCBwYXRjaCdcCisgICAgJ2V4cHIgIiQoZWNobyAkKGdpdCBjaGVycnkgbWFzdGVyIG15LXRvcGljLWJyYW5jaCBteS10b3BpYy1icmFuY2heMSkgKSIgOiAiKyBbXiBdKiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZXJyeS1waWNrIG9uZSBvZiB0aGUgMiBwYXRjaGVzLCBhbmQgY2hlY2sgY2hlcnJ5IHJlY29nbml6ZWQgb25lIGFuZCBvbmx5IG9uZSBhcyBuZXcnIFwKKyAgICAnZ2l0IGNoZXJyeS1waWNrIG15LXRvcGljLWJyYW5jaF4wICYmCisgICAgIGVjaG8gJChnaXQgY2hlcnJ5IG1hc3RlciBteS10b3BpYy1icmFuY2gpICYmCisgICAgIGV4cHIgIiQoZWNobyAkKGdpdCBjaGVycnkgbWFzdGVyIG15LXRvcGljLWJyYW5jaCkgKSIgOiAiKyBbXiBdKiAtIC4qIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoIGIvdC90MzUwMS1yZXZlcnQtY2hlcnJ5LXBpY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzRjODZlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoCkBAIC0wLDAgKzEsMTAzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGljayBhbmQgcmV2ZXJ0IHdpdGggcmVuYW1lcworCisgIC0tCisgICArIHJlbmFtZTI6IHJlbmFtZXMgb29wcyB0byBvcG9zCisgICsgIHJlbmFtZTE6IHJlbmFtZXMgb29wcyB0byBzcG9vCisgICsgIGFkZGVkOiAgIGFkZHMgZXh0cmEgbGluZSB0byBvb3BzCisgICsrIGluaXRpYWw6IGhhcyBsaW5lcyBpbiBvb3BzCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIGwgaW4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8KKwlkbworCQllY2hvICRsJGwkbCRsJGwkbCRsJGwkbAorCWRvbmUgPm9vcHMgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBhZGQgb29wcyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyAiQWRkIGV4dHJhIGxpbmUgYXQgdGhlIGVuZCIgPj5vb3BzICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBhZGRlZCAmJgorCWdpdCB0YWcgYWRkZWQgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBtdiBvb3BzIHNwb28gJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZTEgJiYKKwlnaXQgdGFnIHJlbmFtZTEgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIGluaXRpYWwgJiYKKwlnaXQgbXYgb29wcyBvcG9zICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUyICYmCisJZ2l0IHRhZyByZW5hbWUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tbm9uc2Vuc2UnICcKKworCXBvcz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tbm9uc2Vuc2UgMj5tc2cgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICIkcG9zIiAmJgorCXRlc3RfaTE4bmdyZXAgJ1tVdV1zYWdlOicgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCAtLW5vbnNlbnNlJyAnCisKKwlwb3M9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgLS1ub25zZW5zZSAyPm1zZyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgIiRwb3MiICYmCisJdGVzdF9pMThuZ3JlcCAnW1V1XXNhZ2U6JyBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYWZ0ZXIgcmVuYW1pbmcgYnJhbmNoJyAnCisKKwlnaXQgY2hlY2tvdXQgcmVuYW1lMiAmJgorCWdpdCBjaGVycnktcGljayBhZGRlZCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSByZW5hbWUyKSAmJgorCXRlc3QgLWYgb3BvcyAmJgorCWdyZXAgIkFkZCBleHRyYSBsaW5lIGF0IHRoZSBlbmQiIG9wb3MgJiYKKwlnaXQgcmVmbG9nIC0xIHwgZ3JlcCBjaGVycnktcGljaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhZnRlciByZW5hbWluZyBicmFuY2gnICcKKworCWdpdCBjaGVja291dCByZW5hbWUxICYmCisJZ2l0IHJldmVydCBhZGRlZCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSByZW5hbWUxKSAmJgorCXRlc3QgLWYgc3BvbyAmJgorCSEgZ3JlcCAiQWRkIGV4dHJhIGxpbmUgYXQgdGhlIGVuZCIgc3BvbyAmJgorCWdpdCByZWZsb2cgLTEgfCBncmVwIHJldmVydAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIG9uIHN0YXQtZGlydHkgd29ya2luZyB0cmVlJyAnCisJZ2l0IGNsb25lIC4gY29weSAmJgorCSgKKwkJY2QgY29weSAmJgorCQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCQl0ZXN0LWNobXRpbWUgKzQwIG9vcHMgJiYKKwkJZ2l0IGNoZXJyeS1waWNrIGFkZGVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgZm9yYmlkZGVuIG9uIGRpcnR5IHdvcmtpbmcgdHJlZScgJworCisJZWNobyBjb250ZW50ID5leHRyYV9maWxlICYmCisJZ2l0IGFkZCBleHRyYV9maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBIRUFEIDI+ZXJyb3JzICYmCisJdGVzdF9pMThuZ3JlcCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIgZXJyb3JzCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTAyLWNoZXJyeS1waWNrLW1lcmdlLnNoIGIvdC90MzUwMi1jaGVycnktcGljay1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzc1NDdmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwMi1jaGVycnktcGljay1tZXJnZS5zaApAQCAtMCwwICsxLDEyMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZXJyeSBwaWNraW5nIGFuZCByZXZlcnRpbmcgYSBtZXJnZQorCisJCWItLS1jCisJICAgICAgIC8gICAvCisJaW5pdGlhbC0tLWEKKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+QSAmJgorCT5CICYmCisJZ2l0IGFkZCBBIEIgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCWVjaG8gbmV3IGxpbmUgPkEgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSB0byBBIiBBICYmCisJZ2l0IHRhZyBhICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIG5ldyBsaW5lID5CICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgdG8gQiIgQiAmJgorCWdpdCB0YWcgYiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAmJgorCWdpdCB0YWcgYworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgbm9uLW1lcmdlIHdpdGggLW0gc2hvdWxkIGZhaWwnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYV4wICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC1tIDEgYiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGEgLS0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayBhIG1lcmdlIHdpdGhvdXQgLW0gc2hvdWxkIGZhaWwnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYV4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBhIC0tCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYSBtZXJnZSAoMSknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYV4wICYmCisJZ2l0IGNoZXJyeS1waWNrIC1tIDEgYyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayBhIG1lcmdlICgyKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLW0gMiBjICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGEgbWVyZ2UgcmVsYXRpdmUgdG8gbm9uZXhpc3RlbnQgcGFyZW50IHNob3VsZCBmYWlsJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtbSAzIGMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSBub24tbWVyZ2Ugd2l0aCAtbSBzaG91bGQgZmFpbCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IC1tIDEgYiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSBtZXJnZSB3aXRob3V0IC1tIHNob3VsZCBmYWlsJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGNeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgYyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSBtZXJnZSAoMSknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgY14wICYmCisJZ2l0IHJldmVydCAtbSAxIGMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBhIC0tCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGEgbWVyZ2UgKDIpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGNeMCAmJgorCWdpdCByZXZlcnQgLW0gMiBjICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYiAtLQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhIG1lcmdlIHJlbGF0aXZlIHRvIG5vbmV4aXN0ZW50IHBhcmVudCBzaG91bGQgZmFpbCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IC1tIDMgYyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDMtY2hlcnJ5LXBpY2stcm9vdC5zaCBiL3QvdDM1MDMtY2hlcnJ5LXBpY2stcm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMjdmMzlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwMy1jaGVycnktcGljay1yb290LnNoCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNoZXJyeS1waWNraW5nIChhbmQgcmV2ZXJ0aW5nKSBhIHJvb3QgY29tbWl0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwllY2hvIGZpcnN0ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QiICYmCisKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9zZWNvbmQgJiYKKwlybSAuZ2l0L2luZGV4IGZpbGUxICYmCisJZWNobyBzZWNvbmQgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzZWNvbmQiICYmCisKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy90aGlyZCAmJgorCXJtIC5naXQvaW5kZXggZmlsZTIgJiYKKwllY2hvIHRoaXJkID4gZmlsZTMgJiYKKwlnaXQgYWRkIGZpbGUzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAidGhpcmQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYSByb290IGNvbW1pdCcgJworCisJZ2l0IGNoZWNrb3V0IHNlY29uZF4wICYmCisJZ2l0IGNoZXJyeS1waWNrIG1hc3RlciAmJgorCWVjaG8gZmlyc3QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhIHJvb3QgY29tbWl0JyAnCisKKwlnaXQgcmV2ZXJ0IG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUxCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYSByb290IGNvbW1pdCB3aXRoIGFuIGV4dGVybmFsIHN0cmF0ZWd5JyAnCisKKwlnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneT1yZXNvbHZlIG1hc3RlciAmJgorCWVjaG8gZmlyc3QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhIHJvb3QgY29tbWl0IHdpdGggYW4gZXh0ZXJuYWwgc3RyYXRlZ3knICcKKworCWdpdCByZXZlcnQgLS1zdHJhdGVneT1yZXNvbHZlIG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUxCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgdHdvIHJvb3QgY29tbWl0cycgJworCisJZWNobyBmaXJzdCA+ZXhwZWN0LmZpbGUxICYmCisJZWNobyBzZWNvbmQgPmV4cGVjdC5maWxlMiAmJgorCWVjaG8gdGhpcmQgPmV4cGVjdC5maWxlMyAmJgorCisJZ2l0IGNoZWNrb3V0IHNlY29uZF4wICYmCisJZ2l0IGNoZXJyeS1waWNrIG1hc3RlciB0aGlyZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0LmZpbGUxIGZpbGUxICYmCisJdGVzdF9jbXAgZXhwZWN0LmZpbGUyIGZpbGUyICYmCisJdGVzdF9jbXAgZXhwZWN0LmZpbGUzIGZpbGUzICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXl4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReXl4KKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDQtY2hlcnJ5LXBpY2stcmVyZXJlLnNoIGIvdC90MzUwNC1jaGVycnktcGljay1yZXJlcmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTZhNjQ4MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDQtY2hlcnJ5LXBpY2stcmVyZXJlLnNoCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVycnktcGljayBzaG91bGQgcmVyZXJlIGZvciBjb25mbGljdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGZvbyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLXEgLW0gMSAmJgorCWVjaG8gZm9vLW1hc3RlciA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLXEgLW0gMiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGRldiBIRUFEXiAmJgorCWVjaG8gZm9vLWRldiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLXEgLW0gMyAmJgorCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdGluZyBtZXJnZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4dXAnICcKKwllY2hvIGZvby1kZXYgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1xIC1tIDQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZWNobyBmb28tZGV2ID5leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgY29uZmxpY3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgbWFzdGVyICYmCisJdGVzdF9jbXAgZXhwZWN0IGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWNvbmZpZ3VyZScgJworCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgZmFsc2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGNvbmZsaWN0IHdpdGhvdXQgcmVyZXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3RfY21wIGV4cGVjdCBmb28KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTA1LWNoZXJyeS1waWNrLWVtcHR5LnNoIGIvdC90MzUwNS1jaGVycnktcGljay1lbXB0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMGM2ZTMwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwNS1jaGVycnktcGljay1lbXB0eS5zaApAQCAtMCwwICsxLDEwOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2hlcnJ5LXBpY2tpbmcgYW4gZW1wdHkgY29tbWl0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwllY2hvIGZpcnN0ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgZW1wdHktYnJhbmNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJlbXB0eSIgJiYKKworCWVjaG8gdGhpcmQgPj4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0gIiIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZW1wdHktYnJhbmNoMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYW4gZW1wdHkgY29tbWl0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiB7CisJCWdpdCBjaGVycnktcGljayBlbXB0eS1icmFuY2heCisJCXRlc3QgIiQ/IiA9IDEKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IGxvY2tmaWxlIHdhcyByZW1vdmVkJyAnCisKKwl0ZXN0ICEgLWYgLmdpdC9pbmRleC5sb2NrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYSBjb21taXQgd2l0aCBhbiBlbXB0eSBtZXNzYWdlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiB7CisJCWdpdCBjaGVycnktcGljayBlbXB0eS1icmFuY2gKKwkJdGVzdCAiJD8iID0gMQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggbG9ja2ZpbGUgd2FzIHJlbW92ZWQnICcKKworCXRlc3QgISAtZiAuZ2l0L2luZGV4LmxvY2sKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhIGNvbW1pdCB3aXRoIGFuIGVtcHR5IG1lc3NhZ2Ugd2l0aCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWxsb3ctZW1wdHktbWVzc2FnZSBlbXB0eS1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYW4gZW1wdHkgbm9uLWZmIGNvbW1pdCB3aXRob3V0IC0tYWxsb3ctZW1wdHknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBmb3VydGggPj5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tICJmb3VydGgiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGVtcHR5LWJyYW5jaDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYW4gZW1wdHkgbm9uLWZmIGNvbW1pdCB3aXRoIC0tYWxsb3ctZW1wdHknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWxsb3ctZW1wdHkgZW1wdHktYnJhbmNoMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayB3aXRoIC0ta2VlcC1yZWR1bmRhbnQtY29tbWl0cycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1rZWVwLXJlZHVuZGFudC1jb21taXRzIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgY29tbWl0IHRoYXQgYmVjb21lcyBuby1vcCAocHJlcCknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCBmb3JrICYmCisJZWNobyBmb28gPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBmaWxlMiBvbiBtYXN0ZXIiICYmCisKKwlnaXQgY2hlY2tvdXQgZm9yayAmJgorCWVjaG8gZm9vID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZmlsZTIgb24gdGhlIHNpZGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgbm8tb3Agd2l0aG91dCAtLWtlZXAtcmVkdW5kYW50JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmb3JrXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgbm8tb3Agd2l0aCAtLWtlZXAtcmVkdW5kYW50JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmb3JrXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1rZWVwLXJlZHVuZGFudC1jb21taXRzIG1hc3RlciAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSclcycgPmFjdHVhbCAmJgorCWVjaG8gImFkZCBmaWxlMiBvbiBtYXN0ZXIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwNi1jaGVycnktcGljay1mZi5zaCBiL3QvdDM1MDYtY2hlcnJ5LXBpY2stZmYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTFjYTM5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDYtY2hlcnJ5LXBpY2stZmYuc2gKQEAgLTAsMCArMSwxMDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNoZXJyeS1waWNraW5nIHdpdGggLS1mZiBvcHRpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGZpcnN0ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QiICYmCisJZ2l0IHRhZyBmaXJzdCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyICYmCisJZWNobyBzZWNvbmQgPj4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIiAmJgorCWdpdCB0YWcgc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHVzaW5nIC0tZmYgZmFzdCBmb3J3YXJkcycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tZmYgc2Vjb25kICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc2Vjb25kKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgbm90IHVzaW5nIC0tZmYgZG9lcyBub3QgZmFzdCBmb3J3YXJkcycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIHNlY29uZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzZWNvbmQpIgorJworCisjCisjIFdlIHNldHVwIHRoZSBmb2xsb3dpbmcgZ3JhcGg6CisjCisjCSAgICAgIEItLS1DCisjCSAgICAgLyAgIC8KKyMJZmlyc3QtLS1BCisjCisjIChUaGlzIGhhcyBiZWVuIHRha2VuIGZyb20gdDM1MDItY2hlcnJ5LXBpY2stbWVyZ2Uuc2gpCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBzZXR1cCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJZWNobyBuZXcgbGluZSA+QSAmJgorCWdpdCBhZGQgQSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsaW5lIHRvIEEiIEEgJiYKKwlnaXQgdGFnIEEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBmaXJzdCAmJgorCWVjaG8gbmV3IGxpbmUgPkIgJiYKKwlnaXQgYWRkIEIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSB0byBCIiBCICYmCisJZ2l0IHRhZyBCICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBzaWRlICYmCisJZ2l0IHRhZyBDICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ldyBBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgbm9uLW1lcmdlIHdpdGggLS1mZiBhbmQgLW0gc2hvdWxkIGZhaWwnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEEgLS0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1mZiAtbSAxIEIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBBIC0tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGEgbWVyZ2Ugd2l0aCAtLWZmIGJ1dCB3aXRob3V0IC1tIHNob3VsZCBmYWlsJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBBIC0tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tZmYgQyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEEgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgd2l0aCAtLWZmIGEgbWVyZ2UgKDEpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBBIC0tICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tZmYgLW0gMSBDICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgQyAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEMpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayB3aXRoIC0tZmYgYSBtZXJnZSAoMiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEIgLS0gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1mZiAtbSAyIEMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBDICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGEgbWVyZ2UgcmVsYXRpdmUgdG8gbm9uZXhpc3RlbnQgcGFyZW50IHdpdGggLS1mZiBzaG91bGQgZmFpbCcgJworCWdpdCByZXNldCAtLWhhcmQgQiAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWZmIC1tIDMgQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayBhIHJvb3QgY29tbWl0IHdpdGggLS1mZicgJworCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgLS0gJiYKKwlnaXQgcm0gZmlsZTEgJiYKKwllY2hvIGZpcnN0ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImZpbGUyIiAmJgorCWdpdCBjaGVycnktcGljayAtLWZmIGZpcnN0ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiA9ICIxZGYxOTJjZDhiYzU4YTJiMjc1ZDg0MmNlZGU0ZDIyMWFkOTAwMGQxIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDctY2hlcnJ5LXBpY2stY29uZmxpY3Quc2ggYi90L3QzNTA3LWNoZXJyeS1waWNrLWNvbmZsaWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM4MmY3MjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTA3LWNoZXJyeS1waWNrLWNvbmZsaWN0LnNoCkBAIC0wLDAgKzEsMzc1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGljayBhbmQgcmV2ZXJ0IHdpdGggY29uZmxpY3RzCisKKyAgLQorICArIHBpY2tlZDogcmV3cml0ZXMgZm9vIHRvIGMKKyAgKyBiYXNlOiByZXdyaXRlcyBmb28gdG8gYgorICArIGluaXRpYWw6IHdyaXRlcyBmb28gYXMgYSwgdW5yZWxhdGVkIGFzIHVucmVsYXRlZAorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2NtcF9yZXYgKCkgeworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIiA+ZXhwZWN0LnJldiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQyIiA+YWN0dWFsLnJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5yZXYgYWN0dWFsLnJldgorfQorCitwcmlzdGluZV9kZXRhY2ggKCkgeworCWdpdCBjaGVja291dCAtZiAiJDFeMCIgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCWdpdCBjbGVhbiAtZCAtZiAtZiAtcSAteAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gdW5yZWxhdGVkID51bnJlbGF0ZWQgJiYKKwlnaXQgYWRkIHVucmVsYXRlZCAmJgorCXRlc3RfY29tbWl0IGluaXRpYWwgZm9vIGEgJiYKKwl0ZXN0X2NvbW1pdCBiYXNlIGZvbyBiICYmCisJdGVzdF9jb21taXQgcGlja2VkIGZvbyBjICYmCisJdGVzdF9jb21taXQgLS1zaWdub2ZmIHBpY2tlZC1zaWduZWQgZm9vIGQgJiYKKwlnaXQgY29uZmlnIGFkdmljZS5kZXRhY2hlZGhlYWQgZmFsc2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2hlcnJ5LXBpY2sgZG9lcyBub3QgYWR2YW5jZSBIRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCW5ld2hlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwl0ZXN0ICIkaGVhZCIgPSAiJG5ld2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkdmljZSBmcm9tIGZhaWxlZCBjaGVycnktcGljaycgIgorCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwlwaWNrZWQ9XCQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHBpY2tlZCkgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCWVycm9yOiBjb3VsZCBub3QgYXBwbHkgXCRwaWNrZWQuLi4gcGlja2VkCisJaGludDogYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRocworCWhpbnQ6IHdpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JworCWhpbnQ6IGFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JworCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgMj5hY3R1YWwgJiYKKworCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWR2aWNlIGZyb20gZmFpbGVkIGNoZXJyeS1waWNrIC0tbm8tY29tbWl0JyAiCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXBpY2tlZD1cJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcGlja2VkKSAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJZXJyb3I6IGNvdWxkIG5vdCBhcHBseSBcJHBpY2tlZC4uLiBwaWNrZWQKKwloaW50OiBhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzCisJaGludDogd2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tbm8tY29tbWl0IHBpY2tlZCAyPmFjdHVhbCAmJgorCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2hlcnJ5LXBpY2sgc2V0cyBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgY2hlcnJ5LXBpY2sgZG9lcyBub3Qgc2V0IENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayBiYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tbm8tY29tbWl0IGRvZXMgbm90IHNldCBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1uby1jb21taXQgYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayB3L2RpcnR5IHRyZWUgZG9lcyBub3Qgc2V0IENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gZm9vID4gZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVzb2x2ZSB3L2RpcnR5IHRyZWUgZG9lcyBub3Qgc2V0IENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gZm9vID4gZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVzb2x2ZSBiYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9DSEVSUllfUElDS19IRUxQIHN1cHByZXNzZXMgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJKAorCQlHSVRfQ0hFUlJZX1BJQ0tfSEVMUD0iYW5kIHRoZW4gZG8gc29tZXRoaW5nIGVsc2UiICYmCisJCWV4cG9ydCBHSVRfQ0hFUlJZX1BJQ0tfSEVMUCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVzZXQgY2xlYXJzIENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWdpdCByZXNldCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjb21taXQgZG9lcyBub3QgY2xlYXIgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAmJgorCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbmNlbGxlZCBjb21taXQgZG9lcyBub3QgY2xlYXIgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZWNobyByZXNvbHZlZCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQgJiYKKwkoCisJCUdJVF9FRElUT1I9ZmFsc2UgJiYKKwkJZXhwb3J0IEdJVF9FRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdAorCSkgJiYKKworCXRlc3RfY21wX3JldiBwaWNrZWQgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIGNvbW1pdCBjbGVhcnMgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZWNobyByZXNvbHZlZCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNoZXJyeS1waWNrIHByb2R1Y2VzIGRpcnR5IGluZGV4JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2hlcnJ5LXBpY2sgcmVnaXN0ZXJzIHBhcnRpY2lwYW50cyBpbiBpbmRleCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJeworCQlnaXQgY2hlY2tvdXQgYmFzZSAtLSBmb28gJiYKKwkJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZm9vICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsIC0tIGZvbyAmJgorCQlnaXQgbHMtZmlsZXMgLS1zdGFnZSBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IHBpY2tlZCAtLSBmb28gJiYKKwkJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZm9vCisJfSA+IHN0YWdlcyAmJgorCXNlZCAiCisJCTEgcy8gMAkvIDEJLworCQkyIHMvIDAJLyAyCS8KKwkJMyBzLyAwCS8gMwkvCisJIiA8IHN0YWdlcyA+IGV4cGVjdGVkICYmCisJZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IEhFQUQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLXVubWVyZ2VkID4gYWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNoZXJyeS1waWNrIGRlc2NyaWJlcyBjb25mbGljdCBpbiB3b3JrIHRyZWUnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWNhdCA8PC1FT0YgPiBleHBlY3RlZCAmJgorCTw8PDw8PDwgSEVBRAorCWEKKwk9PT09PT09CisJYworCT4+Pj4+Pj4gb2JqaWQgcGlja2VkCisJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisKKwlzZWQgInMvW2EtZjAtOV0qXC5cLlwuL29iamlkLyIgZm9vID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYzIC1tIHN0eWxlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwljYXQgPDwtRU9GID4gZXhwZWN0ZWQgJiYKKwk8PDw8PDw8IEhFQUQKKwlhCisJfHx8fHx8fCBwYXJlbnQgb2Ygb2JqaWQgcGlja2VkCisJYgorCT09PT09PT0KKwljCisJPj4+Pj4+PiBvYmppZCBwaWNrZWQKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKworCXNlZCAicy9bYS1mMC05XSpcLlwuXC4vb2JqaWQvIiBmb28gPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGFsc28gaGFuZGxlcyBjb25mbGljdHMgc2FuZWx5JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IG1lcmdlLmNvbmZsaWN0c3R5bGUgJiYKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWNhdCA8PC1FT0YgPiBleHBlY3RlZCAmJgorCTw8PDw8PDwgSEVBRAorCWEKKwk9PT09PT09CisJYgorCT4+Pj4+Pj4gcGFyZW50IG9mIG9iamlkIHBpY2tlZAorCUVPRgorCXsKKwkJZ2l0IGNoZWNrb3V0IHBpY2tlZCAtLSBmb28gJiYKKwkJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZm9vICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsIC0tIGZvbyAmJgorCQlnaXQgbHMtZmlsZXMgLS1zdGFnZSBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IGJhc2UgLS0gZm9vICYmCisJCWdpdCBscy1maWxlcyAtLXN0YWdlIGZvbworCX0gPiBzdGFnZXMgJiYKKwlzZWQgIgorCQkxIHMvIDAJLyAxCS8KKwkJMiBzLyAwCS8gMgkvCisJCTMgcy8gMAkvIDMJLworCSIgPCBzdGFnZXMgPiBleHBlY3RlZC1zdGFnZXMgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCW5ld2hlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgLS11bm1lcmdlZCA+IGFjdHVhbC1zdGFnZXMgJiYKKworCXRlc3QgIiRoZWFkIiA9ICIkbmV3aGVhZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zdGFnZXMgYWN0dWFsLXN0YWdlcyAmJgorCXNlZCAicy9bYS1mMC05XSpcLlwuXC4vb2JqaWQvIiBmb28gPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIHJldmVydCBzZXRzIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCXRlc3RfY21wX3JldiBwaWNrZWQgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCByZXZlcnQgZG9lcyBub3Qgc2V0IFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGJhc2UgJiYKKwlnaXQgcmV2ZXJ0IGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFJFVkVSVF9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCAtLW5vLWNvbW1pdCBzZXRzIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGJhc2UgJiYKKwlnaXQgcmV2ZXJ0IC0tbm8tY29tbWl0IGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgYmFzZSBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgdy9kaXJ0eSB0cmVlIGRvZXMgbm90IHNldCBSRVZFUlRfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBiYXNlICYmCisJZWNobyBmb28gPiBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFJFVkVSVF9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9DSEVSUllfUElDS19IRUxQIGRvZXMgbm90IHN1cHByZXNzIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwkoCisJCUdJVF9DSEVSUllfUElDS19IRUxQPSJhbmQgdGhlbiBkbyBzb21ldGhpbmcgZWxzZSIgJiYKKwkJR0lUX1JFVkVSVF9IRUxQPSJhbmQgdGhlbiBkbyBzb21ldGhpbmcgZWxzZSwgYWdhaW4iICYmCisJCWV4cG9ydCBHSVRfQ0hFUlJZX1BJQ0tfSEVMUCBHSVRfUkVWRVJUX0hFTFAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBwaWNrZWQKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFEICYmCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVzZXQgY2xlYXJzIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCWdpdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNvbW1pdCBkb2VzIG5vdCBjbGVhciBSRVZFUlRfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBwaWNrZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0ICYmCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgY29uZmxpY3QsIGRpZmYzIC1tIHN0eWxlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwljYXQgPDwtRU9GID4gZXhwZWN0ZWQgJiYKKwk8PDw8PDw8IEhFQUQKKwlhCisJfHx8fHx8fCBvYmppZCBwaWNrZWQKKwljCisJPT09PT09PQorCWIKKwk+Pj4+Pj4+IHBhcmVudCBvZiBvYmppZCBwaWNrZWQKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgcGlja2VkICYmCisKKwlzZWQgInMvW2EtZjAtOV0qXC5cLlwuL29iamlkLyIgZm9vID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjaGVycnktcGljayBkb2VzIG5vdCBmb3JnZXQgLXMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtcyBwaWNrZWQgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICJTaWduZWQtb2ZmLWJ5IiAuZ2l0L01FUkdFX01TRworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgYWZ0ZXIgZmFpbGVkIGNoZXJyeS1waWNrIGRvZXMgbm90IGFkZCBkdXBsaWNhdGVkIC1zJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLXMgcGlja2VkLXNpZ25lZCAmJgorCWdpdCBjb21taXQgLWEgLXMgJiYKKwl0ZXN0ICQoZ2l0IHNob3cgLXMgfGdyZXAgLWMgIlNpZ25lZC1vZmYtYnkiKSA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGFmdGVyIGZhaWxlZCBjaGVycnktcGljayBhZGRzIC1zIGF0IHRoZSByaWdodCBwbGFjZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWdpdCBjb21taXQgLWEgLXMgJiYKKwlwd2QgJiYKKwljYXQgPDxFT0YgPiBleHBlY3RlZCAmJgorcGlja2VkCisKK1NpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKworQ29uZmxpY3RzOgorCWZvbworRU9GCisKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JUIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTA4LWNoZXJyeS1waWNrLW1hbnktY29tbWl0cy5zaCBiL3QvdDM1MDgtY2hlcnJ5LXBpY2stbWFueS1jb21taXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0MGFmYzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTA4LWNoZXJyeS1waWNrLW1hbnktY29tbWl0cy5zaApAQCAtMCwwICsxLDE4OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2hlcnJ5LXBpY2tpbmcgbWFueSBjb21taXRzJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfaGVhZF9kaWZmZXJzX2Zyb20oKSB7CisJaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhcmc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSIpICYmCisJdGVzdCAiJGhlYWQiICE9ICIkYXJnIgorfQorCitjaGVja19oZWFkX2VxdWFscygpIHsKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFyZz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIikgJiYKKwl0ZXN0ICIkaGVhZCIgPSAiJGFyZyIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBmaXJzdCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IiAmJgorCWdpdCB0YWcgZmlyc3QgJiYKKworCWdpdCBjaGVja291dCAtYiBvdGhlciAmJgorCWZvciB2YWwgaW4gc2Vjb25kIHRoaXJkIGZvdXJ0aAorCWRvCisJCWVjaG8gJHZhbCA+PiBmaWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICIkdmFsIiAmJgorCQlnaXQgdGFnICR2YWwKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGZpcnN0Li5mb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayBmaXJzdC4uZm91cnRoICYmCisJZ2l0IGRpZmYgLS1xdWlldCBvdGhlciAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBvdGhlciAmJgorCWNoZWNrX2hlYWRfZGlmZmVyc19mcm9tIGZvdXJ0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayB0aHJlZSBvbmUgdHdvIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGZpcnN0ICYmCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCWdpdCBjaGVycnktcGljayB0aHJlZSBvbmUgdHdvICYmCisJZ2l0IGRpZmYgLS1xdWlldCB0aHJlZSAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCB0aHJlZSAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtLXJldmVyc2UgLS1mb3JtYXQ9JXMgZmlyc3QuLikiID0gInRocmVlCitvbmUKK3R3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IHRvIGtlZXAgdXNlciBlbnRlcnRhaW5lZCBkdXJpbmcgbXVsdGktcGljaycgJworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCVttYXN0ZXIgT0JKSURdIHNlY29uZAorCSBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCVttYXN0ZXIgT0JKSURdIHRoaXJkCisJIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJW21hc3RlciBPQkpJRF0gZm91cnRoCisJIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJRU9GCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayBmaXJzdC4uZm91cnRoID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvJF94MDVbMC05YS1mXVswLTlhLWZdL09CSklELyIgPGFjdHVhbCA+YWN0dWFsLmZ1enp5ICYmCisJdGVzdF9saW5lX2NvdW50IC1nZSAzIGFjdHVhbC5mdXp6eSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwuZnV6enkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1zdHJhdGVneSByZXNvbHZlIGZpcnN0Li5mb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayAtLXN0cmF0ZWd5IHJlc29sdmUgZmlyc3QuLmZvdXJ0aCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgb3RoZXIgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgb3RoZXIgJiYKKwljaGVja19oZWFkX2RpZmZlcnNfZnJvbSBmb3VydGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IGR1cmluZyBtdWx0aS1waWNrIGluZGljYXRlcyBtZXJnZSBzdHJhdGVneScgJworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCVRyeWluZyBzaW1wbGUgbWVyZ2UuCisJW21hc3RlciBPQkpJRF0gc2Vjb25kCisJIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJVHJ5aW5nIHNpbXBsZSBtZXJnZS4KKwlbbWFzdGVyIE9CSklEXSB0aGlyZAorCSBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCVRyeWluZyBzaW1wbGUgbWVyZ2UuCisJW21hc3RlciBPQkpJRF0gZm91cnRoCisJIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJRU9GCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayAtLXN0cmF0ZWd5IHJlc29sdmUgZmlyc3QuLmZvdXJ0aCA+YWN0dWFsICYmCisJc2VkIC1lICJzLyRfeDA1WzAtOWEtZl1bMC05YS1mXS9PQkpJRC8iIDxhY3R1YWwgPmFjdHVhbC5mdXp6eSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwuZnV6enkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1mZiBmaXJzdC4uZm91cnRoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1mZiBmaXJzdC4uZm91cnRoICYmCisJZ2l0IGRpZmYgLS1xdWlldCBvdGhlciAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBvdGhlciAmJgorCWNoZWNrX2hlYWRfZXF1YWxzIGZvdXJ0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtbiBmaXJzdC4uZm91cnRoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLW4gZmlyc3QuLmZvdXJ0aCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgb3RoZXIgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0IG90aGVyICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIGZpcnN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBmaXJzdC4uZm91cnRoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZm91cnRoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJldmVydCBmaXJzdC4uZm91cnRoICYmCisJZ2l0IGRpZmYgLS1xdWlldCBmaXJzdCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgZmlyc3QgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgZmlyc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IF5maXJzdCBmb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmb3VydGggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmV2ZXJ0IF5maXJzdCBmb3VydGggJiYKKwlnaXQgZGlmZiAtLXF1aWV0IGZpcnN0ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1xdWlldCBmaXJzdCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBmaXJzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgZm91cnRoIGZvdXJ0aH4xIGZvdXJ0aH4yIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZm91cnRoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJldmVydCBmb3VydGggZm91cnRofjEgZm91cnRofjIgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IGZpcnN0ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1xdWlldCBmaXJzdCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBmaXJzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtMyBmb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayAtMyBmb3VydGggJiYKKwlnaXQgZGlmZiAtLXF1aWV0IG90aGVyICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIG90aGVyICYmCisJY2hlY2tfaGVhZF9kaWZmZXJzX2Zyb20gZm91cnRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tc3RkaW4gd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXYtbGlzdCAtLXJldmVyc2UgZmlyc3QuLmZvdXJ0aCB8IGdpdCBjaGVycnktcGljayAtLXN0ZGluICYmCisJZ2l0IGRpZmYgLS1xdWlldCBvdGhlciAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBvdGhlciAmJgorCWNoZWNrX2hlYWRfZGlmZmVyc19mcm9tIGZvdXJ0aAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDktY2hlcnJ5LXBpY2stbWVyZ2UtZGYuc2ggYi90L3QzNTA5LWNoZXJyeS1waWNrLW1lcmdlLWRmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmOTIxZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTA5LWNoZXJyeS1waWNrLW1lcmdlLWRmLnNoCkBAIC0wLDAgKzEsMTAzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjaGVycnktcGljayB3aXRoIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJbml0aWFsaXplIHJlcG9zaXRvcnknICcKKwlta2RpciBhICYmCisJPmEvZiAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdTZXR1cCByZW5hbWUgYWNyb3NzIHBhdGhzIGVhY2ggYmVsb3cgRC9GIGNvbmZsaWN0cycgJworCW1rZGlyIGIgJiYKKwlsbiAtcyAuLi9hIGIvYSAmJgorCWdpdCBhZGQgYiAmJgorCWdpdCBjb21taXQgLW0gYiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCXJtIGIvYSAmJgorCW12IGEgYi9hICYmCisJbG4gLXMgYi9hIGEgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIHN3YXAgJiYKKworCT5mMSAmJgorCWdpdCBhZGQgZjEgJiYKKwlnaXQgY29tbWl0IC1tIGYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ0NoZXJyeS1waWNrIHN1Y2NlZWRzIHdpdGggcmVuYW1lIGFjcm9zcyBEL0YgY29uZmxpY3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBjaGVycnktcGljayBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0dXAgcmVuYW1lIHdpdGggZmlsZSBvbiBvbmUgc2lkZSBtYXRjaGluZyBkaXJlY3RvcnkgbmFtZSBvbiBvdGhlcicgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBuaWNrLXRlc3RjYXNlICYmCisJZ2l0IHJtIC1yZiAuICYmCisKKwk+ZW1wdHkgJiYKKwlnaXQgYWRkIGVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSAiRW1wdHkgZmlsZSIgJiYKKworCWdpdCBjaGVja291dCAtYiBzaW1wbGUgJiYKKwltdiBlbXB0eSBmaWxlICYmCisJbWtkaXIgZW1wdHkgJiYKKwltdiBmaWxlIGVtcHR5ICYmCisJZ2l0IGFkZCBlbXB0eS9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiRW1wdHkgZmlsZSB1bmRlciBlbXB0eSBkaXIiICYmCisKKwllY2hvIGNvbnRlbnQgPm5ld2ZpbGUgJiYKKwlnaXQgYWRkIG5ld2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJOZXcgZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlcnJ5LXBpY2sgc3VjY2VlZHMgd2l0aCB3YXNfYV9kaXIvZmlsZSAtPiB3YXNfYV9kaXIgKHJlc29sdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtcSBuaWNrLXRlc3RjYXNlXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneT1yZXNvbHZlIHNpbXBsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVycnktcGljayBzdWNjZWVkcyB3aXRoIHdhc19hX2Rpci9maWxlIC0+IHdhc19hX2RpciAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLXEgbmljay10ZXN0Y2FzZV4wICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHNpbXBsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR1cCByZW5hbWUgd2l0aCBmaWxlIG9uIG9uZSBzaWRlIG1hdGNoaW5nIGRpZmZlcmVudCBkaXJuYW1lIG9uIG90aGVyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBtZXJnZW1lICYmCisJZ2l0IHJtIC1yZiAuICYmCisKKwlta2RpciBzdWIgJiYKKwlta2RpciBvdGhlcnN1YiAmJgorCWVjaG8gY29udGVudCA+IHN1Yi9maWxlICYmCisJZWNobyBmb28gPiBvdGhlcnN1Yi93aGF0ZXZlciAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb21tb24gY29tbW1pdCIgJiYKKworCWdpdCBybSAtcmYgb3RoZXJzdWIgJiYKKwlnaXQgbXYgc3ViL2ZpbGUgb3RoZXJzdWIgJiYKKwlnaXQgY29tbWl0IC1tICJDb21taXQgdG8gbWVyZ2UiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbmV3aGVhZCBtZXJnZW1lfjEgJiYKKwk+aW5kZXBlbmRlbnQtY2hhbmdlICYmCisJZ2l0IGFkZCBpbmRlcGVuZGVudC1jaGFuZ2UgJiYKKwlnaXQgY29tbWl0IC1tICJDb21wbGV0ZWx5IHVucmVsYXRlZCBjaGFuZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZXJyeS1waWNrIHdpdGggcmVuYW1lIHRvIGRpZmZlcmVudCBEL0YgY29uZmxpY3Qgc3VjY2VlZHMgKHJlc29sdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtcSBuZXdoZWFkXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneT1yZXNvbHZlIG1lcmdlbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlcnJ5LXBpY2sgd2l0aCByZW5hbWUgdG8gZGlmZmVyZW50IEQvRiBjb25mbGljdCBzdWNjZWVkcyAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLXEgbmV3aGVhZF4wICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIG1lcmdlbWUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTEwLWNoZXJyeS1waWNrLXNlcXVlbmNlLnNoIGIvdC90MzUxMC1jaGVycnktcGljay1zZXF1ZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNWZiNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzUxMC1jaGVycnktcGljay1zZXF1ZW5jZS5zaApAQCAtMCwwICsxLDUyMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY2hlcnJ5LXBpY2sgY29udGludWF0aW9uIGZlYXR1cmVzCisKKyArICBjb25mbGljdGluZzogcmV3cml0ZXMgdW5yZWxhdGVkIHRvIGNvbmZsaWN0aW5nCisgICsgeWV0YW5vdGhlcnBpY2s6IHJld3JpdGVzIGZvbyB0byBlCisgICsgYW5vdGhlcnBpY2s6IHJld3JpdGVzIGZvbyB0byBkCisgICsgcGlja2VkOiByZXdyaXRlcyBmb28gdG8gYworICArIHVucmVsYXRlZHBpY2s6IHJld3JpdGVzIHVucmVsYXRlZCB0byByZWFsbHl1bnJlbGF0ZWQKKyAgKyBiYXNlOiByZXdyaXRlcyBmb28gdG8gYgorICArIGluaXRpYWw6IHdyaXRlcyBmb28gYXMgYSwgdW5yZWxhdGVkIGFzIHVucmVsYXRlZAorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFJlcGVhdCBmaXJzdCBtYXRjaCAxMCB0aW1lcworX3IxMD0nXDFcMVwxXDFcMVwxXDFcMVwxXDEnCisKK3ByaXN0aW5lX2RldGFjaCAoKSB7CisJZ2l0IGNoZXJyeS1waWNrIC0tcXVpdCAmJgorCWdpdCBjaGVja291dCAtZiAiJDFeMCIgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCWdpdCBjbGVhbiAtZCAtZiAtZiAtcSAteAorfQorCit0ZXN0X2NtcF9yZXYgKCkgeworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIiA+ZXhwZWN0LnJldiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQyIiA+YWN0dWFsLnJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5yZXYgYWN0dWFsLnJldgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGFkdmljZS5kZXRhY2hlZGhlYWQgZmFsc2UgJiYKKwllY2hvIHVucmVsYXRlZCA+dW5yZWxhdGVkICYmCisJZ2l0IGFkZCB1bnJlbGF0ZWQgJiYKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGZvbyBhICYmCisJdGVzdF9jb21taXQgYmFzZSBmb28gYiAmJgorCXRlc3RfY29tbWl0IHVucmVsYXRlZHBpY2sgdW5yZWxhdGVkIHJlYWxseXVucmVsYXRlZCAmJgorCXRlc3RfY29tbWl0IHBpY2tlZCBmb28gYyAmJgorCXRlc3RfY29tbWl0IGFub3RoZXJwaWNrIGZvbyBkICYmCisJdGVzdF9jb21taXQgeWV0YW5vdGhlcnBpY2sgZm9vIGUgJiYKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0IGNvbmZsaWN0aW5nIHVucmVsYXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBwZXJzaXN0cyBkYXRhIG9uIGZhaWx1cmUnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgLXMgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9zZXF1ZW5jZXIvaGVhZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL3RvZG8gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci9vcHRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIG1pZC1jaGVycnktcGljay1zZXF1ZW5jZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBDSEVSUllfUElDS19IRUFEICYmCisJIyAib29wcywgSSBmb3Jnb3QgdGhhdCB0aGVzZSBwYXRjaGVzIHJlbHkgb24gdGhlIGNoYW5nZSBmcm9tIGJhc2UiCisJZ2l0IGNoZWNrb3V0IEhFQUQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIGJhc2UgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBhbm90aGVycGljaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBwZXJzaXN0cyBvcHRzIGNvcnJlY3RseScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC1zIC1tIDEgLS1zdHJhdGVneT1yZWN1cnNpdmUgLVggcGF0aWVuY2UgLVggb3VycyBpbml0aWFsLi5hbm90aGVycGljayAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci9oZWFkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL29wdHMgJiYKKwllY2hvICJ0cnVlIiA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdC9zZXF1ZW5jZXIvb3B0cyAtLWdldC1hbGwgb3B0aW9ucy5zaWdub2ZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAiMSIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1maWxlPS5naXQvc2VxdWVuY2VyL29wdHMgLS1nZXQtYWxsIG9wdGlvbnMubWFpbmxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICJyZWN1cnNpdmUiID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZmlsZT0uZ2l0L3NlcXVlbmNlci9vcHRzIC0tZ2V0LWFsbCBvcHRpb25zLnN0cmF0ZWd5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXBhdGllbmNlCisJb3VycworCUVPRgorCWdpdCBjb25maWcgLS1maWxlPS5naXQvc2VxdWVuY2VyL29wdHMgLS1nZXQtYWxsIG9wdGlvbnMuc3RyYXRlZ3ktb3B0aW9uID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGNsZWFucyB1cCBzZXF1ZW5jZXIgc3RhdGUgdXBvbiBzdWNjZXNzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgaW5pdGlhbC4ucGlja2VkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1xdWl0IGRvZXMgbm90IGNvbXBsYWluIHdoZW4gbm8gY2hlcnJ5LXBpY2sgaXMgaW4gcHJvZ3Jlc3MnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtLXF1aXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCByZXF1aXJlcyBjaGVycnktcGljayBpbiBwcm9ncmVzcycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1xdWl0IGNsZWFucyB1cCBzZXF1ZW5jZXIgc3RhdGUnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4ucGlja2VkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tcXVpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcXVpdCBrZWVwcyBIRUFEIGFuZCBjb25mbGljdGVkIGluZGV4IGludGFjdCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQl1bnJlbGF0ZWQKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZm9vCisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQl1bnJlbGF0ZWQKKwlFT0YKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLnBpY2tlZCAmJgorCWdpdCBjaGVycnktcGljayAtLXF1aXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJF94NDAvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQgdG8gY2FuY2VsIG11bHRpcGxlIGNoZXJyeS1waWNrJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCB0byBjYW5jZWwgc2luZ2xlIGNoZXJyeS1waWNrJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWdpdCBjaGVycnktcGljayAtLWFib3J0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tYWJvcnQgdG8gY2FuY2VsIG11bHRpcGxlIHJldmVydCcgJworCXByaXN0aW5lX2RldGFjaCBhbm90aGVycGljayAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcmV2ZXJ0IGJhc2UuLnBpY2tlZCAmJgorCWdpdCBjaGVycnktcGljayAtLWFib3J0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X2NtcF9yZXYgYW5vdGhlcnBpY2sgSEVBRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgLS1hYm9ydCB3b3JrcywgdG9vJyAnCisJcHJpc3RpbmVfZGV0YWNoIGFub3RoZXJwaWNrICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCByZXZlcnQgYmFzZS4ucGlja2VkICYmCisJZ2l0IHJldmVydCAtLWFib3J0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X2NtcF9yZXYgYW5vdGhlcnBpY2sgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFib3J0IHRvIGNhbmNlbCBzaW5nbGUgcmV2ZXJ0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGFub3RoZXJwaWNrICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCByZXZlcnQgcGlja2VkICYmCisJZ2l0IHJldmVydCAtLWFib3J0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X2NtcF9yZXYgYW5vdGhlcnBpY2sgSEVBRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFib3J0IGtlZXBzIHVucmVsYXRlZCBjaGFuZ2UsIGVhc3kgY2FzZScgJworCXByaXN0aW5lX2RldGFjaCB1bnJlbGF0ZWRwaWNrICYmCisJZWNobyBjaGFuZ2VkID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZC4ueWV0YW5vdGhlcnBpY2sgJiYKKwllY2hvIGNoYW5nZWQgPnVucmVsYXRlZCAmJgorCWdpdCBjaGVycnktcGljayAtLWFib3J0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVucmVsYXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFib3J0IHJlZnVzZXMgdG8gY2xvYmJlciB1bnJlbGF0ZWQgY2hhbmdlLCBoYXJkZXIgY2FzZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZWNobyBjaGFuZ2VkID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyBjaGFuZ2VkID51bnJlbGF0ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAmJgorCXRlc3RfY21wIGV4cGVjdCB1bnJlbGF0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCA+bG9nICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBsb2cgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IGNoZWNrb3V0IHVucmVsYXRlZCAmJgorCWdpdCBjaGVycnktcGljayAtLWFib3J0ICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBzdGlsbCB3cml0ZXMgc2VxdWVuY2VyIHN0YXRlIHdoZW4gb25lIGNvbW1pdCBpcyBsZWZ0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLnBpY2tlZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9zZXF1ZW5jZXIgJiYKKwllY2hvICJyZXNvbHZlZCIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRfeDQwL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQlmb28KKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JdW5yZWxhdGVkCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWZvbworCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJdW5yZWxhdGVkCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFib3J0IGFmdGVyIGxhc3QgY29tbWl0IGluIHNlcXVlbmNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLnBpY2tlZCAmJgorCWdpdCBjaGVycnktcGljayAtLWFib3J0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGRvZXMgbm90IGltcGxpY2l0bHkgc3RvbXAgYW4gZXhpc3Rpbmcgb3BlcmF0aW9uJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJdGVzdC1jaG10aW1lIC12ICswIC5naXQvc2VxdWVuY2VyID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgY2hlcnJ5LXBpY2sgdW5yZWxhdGVkcGljayAmJgorCXRlc3QtY2htdGltZSAtdiArMCAuZ2l0L3NlcXVlbmNlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIGNvbXBsYWlucyB3aGVuIG5vIGNoZXJyeS1waWNrIGlzIGluIHByb2dyZXNzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIGNvbXBsYWlucyB3aGVuIHRoZXJlIGFyZSB1bnJlc29sdmVkIGNvbmZsaWN0cycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5hbm90aGVycGljayAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgb2Ygc2luZ2xlIGNoZXJyeS1waWNrJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwllY2hvIGMgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKworCXRlc3RfY21wIGV4cGVjdCBmb28gJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEXiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBvZiBzaW5nbGUgcmV2ZXJ0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwllY2hvIHJlc29sdmVkID5leHBlY3QgJiYKKwllY2hvICJSZXZlcnQgXCJwaWNrZWRcIiIgPmV4cGVjdC5tc2cgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCWVjaG8gcmVzb2x2ZWQgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKworCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZm9vICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRF4gJiYKKwlnaXQgZGlmZi10cmVlIC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMgSEVBRCA+bXNnICYmCisJdGVzdF9jbXAgZXhwZWN0Lm1zZyBtc2cgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFJFVkVSVF9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgYWZ0ZXIgcmVzb2x2aW5nIGNvbmZsaWN0cycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZWNobyBkID5leHBlY3QgJiYKKwljYXQgPmV4cGVjdC5sb2cgPDwtXEVPRiAmJgorCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQlmb28KKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZm9vCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCXVucmVsYXRlZAorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlmb28KKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCXVucmVsYXRlZAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiYXNlLi5hbm90aGVycGljayAmJgorCWVjaG8gYyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRfeDQwL09CSklEL2ciCisJfSA+YWN0dWFsLmxvZyAmJgorCXRlc3RfY21wIGV4cGVjdCBmb28gJiYKKwl0ZXN0X2NtcCBleHBlY3QubG9nIGFjdHVhbC5sb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBhZnRlciByZXNvbHZpbmcgY29uZmxpY3RzIGFuZCBjb21taXR0aW5nJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAiYyIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kX3g0MC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZm9vCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCWZvbworCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQl1bnJlbGF0ZWQKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZm9vCisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQl1bnJlbGF0ZWQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgYXNrcyBmb3IgaGVscCBhZnRlciByZXNvbHZpbmcgcGF0Y2ggdG8gbmlsJyAnCisJcHJpc3RpbmVfZGV0YWNoIGNvbmZsaWN0aW5nICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGluaXRpYWwuLnBpY2tlZCAmJgorCisJdGVzdF9jbXBfcmV2IHVucmVsYXRlZHBpY2sgQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCWdpdCBjaGVja291dCBIRUFEIC0tIHVucmVsYXRlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlIDI+bXNnICYmCisJdGVzdF9pMThuZ3JlcCAiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSIgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBhZHZpY2UgYW5kIHNraXAgbmlsIHBhdGNoJyAnCisJcHJpc3RpbmVfZGV0YWNoIGNvbmZsaWN0aW5nICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGluaXRpYWwuLnBpY2tlZCAmJgorCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gdW5yZWxhdGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwlnaXQgcmVzZXQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCisJZ2l0IHJldi1saXN0IGluaXRpYWwuLkhFQUQgPmNvbW1pdHMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGNvbW1pdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSByZXNwZWN0cyBvcHRzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIC14IGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAiYyIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFub3RoZXJwaWNrX21zZyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRH4xID5waWNrZWRfbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfjIgPnVucmVsYXRlZHBpY2tfbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfjMgPmluaXRpYWxfbXNnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ3JlcCAiY2hlcnJ5IHBpY2tlZCBmcm9tIiBpbml0aWFsX21zZyAmJgorCWdyZXAgImNoZXJyeSBwaWNrZWQgZnJvbSIgdW5yZWxhdGVkcGlja19tc2cgJiYKKwlncmVwICJjaGVycnkgcGlja2VkIGZyb20iIHBpY2tlZF9tc2cgJiYKKwlncmVwICJjaGVycnkgcGlja2VkIGZyb20iIGFub3RoZXJwaWNrX21zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIG9mIHNpbmdsZS1waWNrIHJlc3BlY3RzIC14JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLXggcGlja2VkICYmCisJZWNobyBjID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPm1zZyAmJgorCWdyZXAgImNoZXJyeSBwaWNrZWQgZnJvbSIgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgcmVzcGVjdHMgLXggaW4gZmlyc3QgY29tbWl0IGluIG11bHRpLXBpY2snICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAteCBwaWNrZWQgYW5vdGhlcnBpY2sgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gPm1zZyAmJgorCXBpY2tlZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcGlja2VkKSAmJgorCWdyZXAgImNoZXJyeSBwaWNrZWQgZnJvbS4qJHBpY2tlZCIgbXNnCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJy0tc2lnbm9mZiBpcyBhdXRvbWF0aWNhbGx5IHByb3BhZ2F0ZWQgdG8gcmVzb2x2ZWQgY29uZmxpY3QnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgLS1zaWdub2ZmIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAiYyIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFub3RoZXJwaWNrX21zZyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRH4xID5waWNrZWRfbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfjIgPnVucmVsYXRlZHBpY2tfbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfjMgPmluaXRpYWxfbXNnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ3JlcCAiU2lnbmVkLW9mZi1ieToiIGluaXRpYWxfbXNnICYmCisJZ3JlcCAiU2lnbmVkLW9mZi1ieToiIHVucmVsYXRlZHBpY2tfbXNnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ3JlcCAiU2lnbmVkLW9mZi1ieToiIHBpY2tlZF9tc2cgJiYKKwlncmVwICJTaWduZWQtb2ZmLWJ5OiIgYW5vdGhlcnBpY2tfbXNnCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJy0tc2lnbm9mZiBkcm9wcGVkIGZvciBpbXBsaWNpdCBjb21taXQgb2YgcmVzb2x1dGlvbiwgbXVsdGktcGljayBjYXNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLXMgcGlja2VkIGFub3RoZXJwaWNrICYmCisJZWNobyBjID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRF5eICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiA+bXNnICYmCisJISBncmVwIFNpZ25lZC1vZmYtYnk6IG1zZworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdzaWduLW9mZiBuZWVkcyB0byBiZSByZWFmZmlybWVkIGFmdGVyIGNvbmZsaWN0IHJlc29sdXRpb24sIHNpbmdsZS1waWNrIGNhc2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtcyBwaWNrZWQgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKworCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEXiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+bXNnICYmCisJISBncmVwIFNpZ25lZC1vZmYtYnk6IG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWxmb3JtZWQgaW5zdHJ1Y3Rpb24gc2hlZXQgMScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5hbm90aGVycGljayAmJgorCWVjaG8gInJlc29sdmVkIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJc2VkICJzL3BpY2sgL3BpY2svIiAuZ2l0L3NlcXVlbmNlci90b2RvID5uZXdfc2hlZXQgJiYKKwljcCBuZXdfc2hlZXQgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hbGZvcm1lZCBpbnN0cnVjdGlvbiBzaGVldCAyJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAicmVzb2x2ZWQiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwlzZWQgInMvcGljay9yZXZlcnQvIiAuZ2l0L3NlcXVlbmNlci90b2RvID5uZXdfc2hlZXQgJiYKKwljcCBuZXdfc2hlZXQgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGNvbW1pdCBzZXQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayBiYXNlLi5iYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hbGZvcm1lZCBpbnN0cnVjdGlvbiBzaGVldCAzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAicmVzb2x2ZWQiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwlzZWQgInMvcGljayBcKFswLTlhLWZdKlwpL3BpY2sgJF9yMTAvIiAuZ2l0L3NlcXVlbmNlci90b2RvID5uZXdfc2hlZXQgJiYKKwljcCBuZXdfc2hlZXQgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luc3RydWN0aW9uIHNoZWV0LCBmYXQtZmluZ2VycyB2ZXJzaW9uJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAiYyIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCXNlZCAicy9waWNrIFwoWzAtOWEtZl0qXCkvcGljayAJIFwxIAkvIiAuZ2l0L3NlcXVlbmNlci90b2RvID5uZXdfc2hlZXQgJiYKKwljcCBuZXdfc2hlZXQgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBkZXNjcmlwdGlvbnMgaW4gaW5zbiBzaGVldCBhcmUgb3B0aW9uYWwnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJjIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJY3V0IC1kIiAiIC1mMSwyIC5naXQvc2VxdWVuY2VyL3RvZG8gPm5ld19zaGVldCAmJgorCWNwIG5ld19zaGVldCAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5jb21taXRzICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBjb21taXRzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzYwMC1ybS5zaCBiL3QvdDM2MDAtcm0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWZkMjhiY2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNjAwLXJtLnNoCkBAIC0wLDAgKzEsMjY1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IENhcmwgRC4gV29ydGgKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBvZiB0aGUgdmFyaW91cyBvcHRpb25zIHRvIGdpdCBybS4nCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFNldHVwIHNvbWUgZmlsZXMgdG8gYmUgcmVtb3ZlZCwgc29tZSB3aXRoIGZ1bm55IGNoYXJhY3RlcnMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdJbml0aWFsaXplIHRlc3QgZGlyZWN0b3J5JyBcCisgICAgInRvdWNoIC0tIGZvbyBiYXIgYmF6ICdzcGFjZSBlbWJlZGRlZCcgLXEgJiYKKyAgICAgZ2l0IGFkZCAtLSBmb28gYmFyIGJheiAnc3BhY2UgZW1iZWRkZWQnIC1xICYmCisgICAgIGdpdCBjb21taXQgLW0gJ2FkZCBub3JtYWwgZmlsZXMnIgorCitpZiB0b3VjaCAtLSAndGFiCWVtYmVkZGVkJyAnbmV3bGluZQorZW1iZWRkZWQnIDI+L2Rldi9udWxsCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIEZVTk5ZTkFNRVMKK2Vsc2UKKwlzYXkgJ1lvdXIgZmlsZXN5c3RlbSBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcy4nCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJ2FkZCBmaWxlcyB3aXRoIGZ1bm55IG5hbWVzJyAiCisgICAgIGdpdCBhZGQgLS0gJ3RhYgllbWJlZGRlZCcgJ25ld2xpbmUKK2VtYmVkZGVkJyAmJgorICAgICBnaXQgY29tbWl0IC1tICdhZGQgZmlsZXMgd2l0aCB0YWJzIGFuZCBuZXdsaW5lcycKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1ByZS1jaGVjayB0aGF0IGZvbyBleGlzdHMgYW5kIGlzIGluIGluZGV4IGJlZm9yZSBnaXQgcm0gZm9vJyBcCisgICAgJ1sgLWYgZm9vIF0gJiYgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdUZXN0IHRoYXQgZ2l0IHJtIGZvbyBzdWNjZWVkcycgXAorICAgICdnaXQgcm0gLS1jYWNoZWQgZm9vJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnVGVzdCB0aGF0IGdpdCBybSAtLWNhY2hlZCBmb28gc3VjY2VlZHMgaWYgdGhlIGluZGV4IG1hdGNoZXMgdGhlIGZpbGUnIFwKKyAgICAnZWNobyBjb250ZW50ID4gZm9vCisgICAgIGdpdCBhZGQgZm9vCisgICAgIGdpdCBybSAtLWNhY2hlZCBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdUZXN0IHRoYXQgZ2l0IHJtIC0tY2FjaGVkIGZvbyBzdWNjZWVkcyBpZiB0aGUgaW5kZXggbWF0Y2hlcyB0aGUgZmlsZScgXAorICAgICdlY2hvIGNvbnRlbnQgPiBmb28KKyAgICAgZ2l0IGFkZCBmb28KKyAgICAgZ2l0IGNvbW1pdCAtbSBmb28KKyAgICAgZWNobyAib3RoZXIgY29udGVudCIgPiBmb28KKyAgICAgZ2l0IHJtIC0tY2FjaGVkIGZvbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Rlc3QgdGhhdCBnaXQgcm0gLS1jYWNoZWQgZm9vIGZhaWxzIGlmIHRoZSBpbmRleCBtYXRjaGVzIG5laXRoZXIgdGhlIGZpbGUgbm9yIEhFQUQnICcKKyAgICAgZWNobyBjb250ZW50ID4gZm9vCisgICAgIGdpdCBhZGQgZm9vCisgICAgIGdpdCBjb21taXQgLW0gZm9vCisgICAgIGVjaG8gIm90aGVyIGNvbnRlbnQiID4gZm9vCisgICAgIGdpdCBhZGQgZm9vCisgICAgIGVjaG8gInlldCBhbm90aGVyIGNvbnRlbnQiID4gZm9vCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBybSAtLWNhY2hlZCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Rlc3QgdGhhdCBnaXQgcm0gLS1jYWNoZWQgLWYgZm9vIHdvcmtzIGluIGNhc2Ugd2hlcmUgLS1jYWNoZWQgb25seSBkaWQgbm90JyBcCisgICAgJ2VjaG8gY29udGVudCA+IGZvbworICAgICBnaXQgYWRkIGZvbworICAgICBnaXQgY29tbWl0IC1tIGZvbworICAgICBlY2hvICJvdGhlciBjb250ZW50IiA+IGZvbworICAgICBnaXQgYWRkIGZvbworICAgICBlY2hvICJ5ZXQgYW5vdGhlciBjb250ZW50IiA+IGZvbworICAgICBnaXQgcm0gLS1jYWNoZWQgLWYgZm9vJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUG9zdC1jaGVjayB0aGF0IGZvbyBleGlzdHMgYnV0IGlzIG5vdCBpbiBpbmRleCBhZnRlciBnaXQgcm0gZm9vJyBcCisgICAgJ1sgLWYgZm9vIF0gJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdQcmUtY2hlY2sgdGhhdCBiYXIgZXhpc3RzIGFuZCBpcyBpbiBpbmRleCBiZWZvcmUgImdpdCBybSBiYXIiJyBcCisgICAgJ1sgLWYgYmFyIF0gJiYgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBiYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdUZXN0IHRoYXQgImdpdCBybSBiYXIiIHN1Y2NlZWRzJyBcCisgICAgJ2dpdCBybSBiYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdQb3N0LWNoZWNrIHRoYXQgYmFyIGRvZXMgbm90IGV4aXN0IGFuZCBpcyBub3QgaW4gaW5kZXggYWZ0ZXIgImdpdCBybSAtZiBiYXIiJyBcCisgICAgJyEgWyAtZiBiYXIgXSAmJiB0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Rlc3QgdGhhdCAiZ2l0IHJtIC0tIC1xIiBzdWNjZWVkcyAocmVtb3ZlIGEgZmlsZSB0aGF0IGxvb2tzIGxpa2UgYW4gb3B0aW9uKScgXAorICAgICdnaXQgcm0gLS0gLXEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyBcCisgICAgIlRlc3QgdGhhdCBcImdpdCBybSAtZlwiIHN1Y2NlZWRzIHdpdGggZW1iZWRkZWQgc3BhY2UsIHRhYiwgb3IgbmV3bGluZSBjaGFyYWN0ZXJzLiIgXAorICAgICJnaXQgcm0gLWYgJ3NwYWNlIGVtYmVkZGVkJyAndGFiCWVtYmVkZGVkJyAnbmV3bGluZQorZW1iZWRkZWQnIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNBTklUWSAnVGVzdCB0aGF0ICJnaXQgcm0gLWYiIGZhaWxzIGlmIGl0cyBybSBmYWlscycgJworCWNobW9kIGEtdyAuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIC1mIGJheiAmJgorCWNobW9kIDc3NSAuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdXaGVuIHRoZSBybSBpbiAiZ2l0IHJtIC1mIiBmYWlscywgaXQgc2hvdWxkIG5vdCByZW1vdmUgdGhlIGZpbGUgZnJvbSB0aGUgaW5kZXgnIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBiYXonCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlbW92ZSBub25leGlzdGVudCBmaWxlIHdpdGggLS1pZ25vcmUtdW5tYXRjaCcgJworCWdpdCBybSAtLWlnbm9yZS11bm1hdGNoIG5vbmV4aXN0ZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJybSIgY29tbWFuZCBwcmludGVkJyAnCisJZWNobyBmcm90eiA+IHRlc3QtZmlsZSAmJgorCWdpdCBhZGQgdGVzdC1maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGZpbGUgZm9yIHJtIHRlc3QiICYmCisJZ2l0IHJtIHRlc3QtZmlsZSA+IHJtLW91dHB1dCAmJgorCXRlc3QgYGdyZXAgIl5ybSAiIHJtLW91dHB1dCB8IHdjIC1sYCA9IDEgJiYKKwlybSAtZiB0ZXN0LWZpbGUgcm0tb3V0cHV0ICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGUgZnJvbSBybSB0ZXN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcicm0iIGNvbW1hbmQgc3VwcHJlc3NlZCB3aXRoIC0tcXVpZXQnICcKKwllY2hvIGZyb3R6ID4gdGVzdC1maWxlICYmCisJZ2l0IGFkZCB0ZXN0LWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZmlsZSBmb3Igcm0gLS1xdWlldCB0ZXN0IiAmJgorCWdpdCBybSAtLXF1aWV0IHRlc3QtZmlsZSA+IHJtLW91dHB1dCAmJgorCXRlc3QgYHdjIC1sIDwgcm0tb3V0cHV0YCA9IDAgJiYKKwlybSAtZiB0ZXN0LWZpbGUgcm0tb3V0cHV0ICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGUgZnJvbSBybSAtLXF1aWV0IHRlc3QiCisnCisKKyMgTm93LCBmYWlsdXJlIGNhc2VzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmUtYWRkIGZvbyBhbmQgYmF6JyAnCisJZ2l0IGFkZCBmb28gYmF6ICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01vZGlmeSBmb28gLS0gcm0gc2hvdWxkIHJlZnVzZScgJworCWVjaG8gPj5mb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZm9vIGJheiAmJgorCXRlc3QgLWYgZm9vICYmCisJdGVzdCAtZiBiYXogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTW9kaWZpZWQgZm9vIC0tIHJtIC1mIHNob3VsZCB3b3JrJyAnCisJZ2l0IHJtIC1mIGZvbyBiYXogJiYKKwl0ZXN0ICEgLWYgZm9vICYmCisJdGVzdCAhIC1mIGJheiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmUtYWRkIGZvbyBhbmQgYmF6IGZvciBIRUFEIHRlc3RzJyAnCisJZWNobyBmcm90eiA+Zm9vICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gYmF6ICYmCisJZ2l0IGFkZCBmb28gYmF6ICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbyBpcyBkaWZmZXJlbnQgaW4gaW5kZXggZnJvbSBIRUFEIC0tIHJtIHNob3VsZCByZWZ1c2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZm9vIGJheiAmJgorCXRlc3QgLWYgZm9vICYmCisJdGVzdCAtZiBiYXogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnV0IHdpdGggLWYgaXQgc2hvdWxkIHdvcmsuJyAnCisJZ2l0IHJtIC1mIGZvbyBiYXogJiYKKwl0ZXN0ICEgLWYgZm9vICYmCisJdGVzdCAhIC1mIGJheiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIHRvIHJlbW92ZSBjYWNoZWQgZW1wdHkgZmlsZSB3aXRoIG1vZGlmaWNhdGlvbnMnICcKKwk+ZW1wdHkgJiYKKwlnaXQgYWRkIGVtcHR5ICYmCisJZWNobyBjb250ZW50ID5lbXB0eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAtLWNhY2hlZCBlbXB0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgaW50ZW50LXRvLWFkZCBmaWxlIHdpdGhvdXQgLS1mb3JjZScgJworCWVjaG8gY29udGVudCA+aW50ZW50LXRvLWFkZCAmJgorCWdpdCBhZGQgLU4gaW50ZW50LXRvLWFkZAorCWdpdCBybSAtLWNhY2hlZCBpbnRlbnQtdG8tYWRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlY3Vyc2l2ZSB0ZXN0IHNldHVwJyAnCisJbWtkaXIgLXAgZnJvdHogJiYKKwllY2hvIHFmd2ZxID5mcm90ei9uaXRmb2wgJiYKKwlnaXQgYWRkIGZyb3R6ICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViZGlyIHRlc3QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlY3Vyc2l2ZSB3aXRob3V0IC1yIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGZyb3R6ICYmCisJdGVzdCAtZCBmcm90eiAmJgorCXRlc3QgLWYgZnJvdHovbml0Zm9sCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlY3Vyc2l2ZSB3aXRoIC1yIGJ1dCBkaXJ0eScgJworCWVjaG8gcWZ3ZnEgPj5mcm90ei9uaXRmb2wKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLXIgZnJvdHogJiYKKwl0ZXN0IC1kIGZyb3R6ICYmCisJdGVzdCAtZiBmcm90ei9uaXRmb2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVjdXJzaXZlIHdpdGggLXIgLWYnICcKKwlnaXQgcm0gLWYgLXIgZnJvdHogJiYKKwkhIHRlc3QgLWYgZnJvdHovbml0Zm9sICYmCisJISB0ZXN0IC1kIGZyb3R6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlbW92ZSBub25leGlzdGVudCBmaWxlIHJldHVybnMgbm9uemVybyBleGl0IHN0YXR1cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBub25leGlzdGVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDYWxsICJybSIgZnJvbSBvdXRzaWRlIHRoZSB3b3JrIHRyZWUnICcKKwlta2RpciByZXBvICYmCisJKGNkIHJlcG8gJiYKKwkgZ2l0IGluaXQgJiYKKwkgZWNobyBzb21ldGhpbmcgPiBzb21lZmlsZSAmJgorCSBnaXQgYWRkIHNvbWVmaWxlICYmCisJIGdpdCBjb21taXQgLW0gImFkZCBhIGZpbGUiICYmCisJIChjZCAuLiAmJgorCSAgZ2l0IC0tZ2l0LWRpcj1yZXBvLy5naXQgLS13b3JrLXRyZWU9cmVwbyBybSBzb21lZmlsZSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIHNvbWVmaWxlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZyZXNoIGluZGV4IGJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyB1cC10by1kYXRlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdC1jaG10aW1lIC04NjQwMCBmcm90ei9uaXRmb2wgJiYKKwlnaXQgcm0gZnJvdHovbml0Zm9sICYmCisJdGVzdCAhIC1mIGZyb3R6L25pdGZvbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nob2tpbmcgImdpdCBybSIgc2hvdWxkIG5vdCBsZXQgaXQgZGllIHdpdGggY3J1ZnQnICcKKwlnaXQgcmVzZXQgLXEgLS1oYXJkICYmCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgMTIwMDAKKwlkbworCSAgICBlY2hvICIxMDA2NDQgJF96NDAgMAlzb21lLWZpbGUtJGkiCisJICAgIGk9JCgoICRpICsgMSApKQorCWRvbmUgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWdpdCBybSAtbiAic29tZS1maWxlLSoiIHwgOjsKKwl0ZXN0IC1mIC5naXQvaW5kZXgubG9jaworCXN0YXR1cz0kPworCXJtIC1mIC5naXQvaW5kZXgubG9jaworCWdpdCByZXNldCAtcSAtLWhhcmQKKwl0ZXN0ICIkc3RhdHVzIiAhPSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlbW92ZXMgc3ViZGlyZWN0b3JpZXMgcmVjdXJzaXZlbHknICcKKwlta2RpciAtcCBkaXIvc3ViZGlyL3N1YnN1YmRpciAmJgorCWVjaG8gY29udGVudCA+ZGlyL3N1YmRpci9zdWJzdWJkaXIvZmlsZSAmJgorCWdpdCBhZGQgZGlyL3N1YmRpci9zdWJzdWJkaXIvZmlsZSAmJgorCWdpdCBybSAtZiBkaXIvc3ViZGlyL3N1YnN1YmRpci9maWxlICYmCisJISB0ZXN0IC1kIGRpcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDAtYWRkLnNoIGIvdC90MzcwMC1hZGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODc0YjNhNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM3MDAtYWRkLnNoCkBAIC0wLDAgKzEsMzEzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IENhcmwgRC4gV29ydGgKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBvZiBnaXQgYWRkLCBpbmNsdWRpbmcgdGhlIC0tIG9wdGlvbi4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnVGVzdCBvZiBnaXQgYWRkJyBcCisgICAgJ3RvdWNoIGZvbyAmJiBnaXQgYWRkIGZvbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Bvc3QtY2hlY2sgdGhhdCBmb28gaXMgaW4gdGhlIGluZGV4JyBcCisgICAgJ2dpdCBscy1maWxlcyBmb28gfCBncmVwIGZvbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Rlc3QgdGhhdCAiZ2l0IGFkZCAtLSAtcSIgd29ya3MnIFwKKyAgICAndG91Y2ggLS0gLXEgJiYgZ2l0IGFkZCAtLSAtcScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2dpdCBhZGQ6IFRlc3QgdGhhdCBleGVjdXRhYmxlIGJpdCBpcyBub3QgdXNlZCBpZiBjb3JlLmZpbGVtb2RlPTAnIFwKKwknZ2l0IGNvbmZpZyBjb3JlLmZpbGVtb2RlIDAgJiYKKwkgZWNobyBmb28gPnhmb28xICYmCisJIGNobW9kIDc1NSB4Zm9vMSAmJgorCSBnaXQgYWRkIHhmb28xICYmCisJIGNhc2UgImBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMWAiIGluCisJIDEwMDY0NCIgIip4Zm9vMSkgZWNobyBwYXNzOzsKKwkgKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMTsgKGV4aXQgMSk7OworCSBlc2FjJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKKwlybSAtZiB4Zm9vMSAmJgorCWxuIC1zIGZvbyB4Zm9vMSAmJgorCWdpdCBhZGQgeGZvbzEgJiYKKwljYXNlICJgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgeGZvbzFgIiBpbgorCTEyMDAwMCIgIip4Zm9vMSkgZWNobyBwYXNzOzsKKwkqKSBlY2hvIGZhaWw7IGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28xOyAoZXhpdCAxKTs7CisJZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZDogVGVzdCB0aGF0IGV4ZWN1dGFibGUgYml0IGlzIG5vdCB1c2VkLi4uJyBcCisJJ2dpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJIGVjaG8gZm9vID54Zm9vMiAmJgorCSBjaG1vZCA3NTUgeGZvbzIgJiYKKwkgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB4Zm9vMiAmJgorCSBjYXNlICJgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgeGZvbzJgIiBpbgorCSAxMDA2NDQiICIqeGZvbzIpIGVjaG8gcGFzczs7CisJICopIGVjaG8gZmFpbDsgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgeGZvbzI7IChleGl0IDEpOzsKKwkgZXNhYycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZ2l0IGFkZDogZmlsZW1vZGU9MCBzaG91bGQgbm90IGdldCBjb25mdXNlZCBieSBzeW1saW5rJyAnCisJcm0gLWYgeGZvbzIgJiYKKwlsbiAtcyBmb28geGZvbzIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHhmb28yICYmCisJY2FzZSAiYGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28yYCIgaW4KKwkxMjAwMDAiICIqeGZvbzIpIGVjaG8gcGFzczs7CisJKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMjsgKGV4aXQgMSk7OworCWVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCisJJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQ6IFRlc3QgdGhhdCBleGVjdXRhYmxlIGJpdCBpcyBub3QgdXNlZC4uLicgXAorCSdnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgMCAmJgorCSBsbiAtcyB4Zm9vMiB4Zm9vMyAmJgorCSBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHhmb28zICYmCisJIGNhc2UgImBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vM2AiIGluCisJIDEyMDAwMCIgIip4Zm9vMykgZWNobyBwYXNzOzsKKwkgKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMzsgKGV4aXQgMSk7OworCSBlc2FjJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0aWdub3JlIHRlc3Qgc2V0dXAnICcKKwllY2hvICIqLmlnIiA+LmdpdGlnbm9yZSAmJgorCW1rZGlyIGMuaWYgZC5pZyAmJgorCT5hLmlnICYmID5iLmlmICYmCisJPmMuaWYvYy5pZiAmJiA+Yy5pZi9jLmlnICYmCisJPmQuaWcvZC5pZiAmJiA+ZC5pZy9kLmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRpZ25vcmUgaXMgaG9ub3JlZCcgJworCWdpdCBhZGQgLiAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIlxcLmlnIikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb3V0IHdoZW4gYXR0ZW1wdGluZyB0byBhZGQgaWdub3JlZCBvbmVzIHdpdGhvdXQgLWYnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGEuPz8gJiYKKwkhIChnaXQgbHMtZmlsZXMgfCBncmVwICJcXC5pZyIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIG91dCB3aGVuIGF0dGVtcHRpbmcgdG8gYWRkIGlnbm9yZWQgb25lcyB3aXRob3V0IC1mJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBkLj8/ICYmCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAiXFwuaWciKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgaWdub3JlZCBvbmVzIHdpdGggLWYnICcKKwlnaXQgYWRkIC1mIGEuPz8gJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGEuaWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGlnbm9yZWQgb25lcyB3aXRoIC1mJyAnCisJZ2l0IGFkZCAtZiBkLj8/LyogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGQuaWcvZC5pZiBkLmlnL2QuaWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGlnbm9yZWQgb25lcyB3aXRoIC1mJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgLWYgZC4/PyAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZC5pZy9kLmlmIGQuaWcvZC5pZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0aWdub3JlIHdpdGggc3ViZGlyZWN0b3J5JyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJbWtkaXIgLXAgc3ViL2RpciAmJgorCWVjaG8gIiFkaXIvYS4qIiA+c3ViLy5naXRpZ25vcmUgJiYKKwk+c3ViL2EuaWcgJiYKKwk+c3ViL2Rpci9hLmlnICYmCisJZ2l0IGFkZCBzdWIvZGlyICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzdWIvZGlyL2EuaWcgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJKAorCQljZCBzdWIvZGlyICYmCisJCWdpdCBhZGQgLgorCSkgJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIHN1Yi9kaXIvYS5pZworJworCitta2RpciAxIDEvMiAxLzMKK3RvdWNoIDEvMi9hIDEvMy9iIDEvMi9jCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjb3JyZWN0IHByZWZpeCBkZXRlY3Rpb24nICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCAxLzIvYSAxLzMvYiAxLzIvYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIHdpdGggZmlsZW1vZGU9MCwgc3ltbGlua3M9MCwgYW5kIHVubWVyZ2VkIGVudHJpZXMnICcKKwlmb3IgcyBpbiAxIDIgMworCWRvCisJCWVjaG8gJHMgPiBzdGFnZSRzCisJCWVjaG8gIjEwMDc1NSAkKGdpdCBoYXNoLW9iamVjdCAtdyBzdGFnZSRzKSAkcwlmaWxlIgorCQllY2hvICIxMjAwMDAgJChwcmludGYgJHMgfCBnaXQgaGFzaC1vYmplY3QgLXcgLXQgYmxvYiAtLXN0ZGluKSAkcwlzeW1saW5rIgorCWRvbmUgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWdpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIDAgJiYKKwllY2hvIG5ldyA+IGZpbGUgJiYKKwllY2hvIG5ldyA+IHN5bWxpbmsgJiYKKwlnaXQgYWRkIGZpbGUgc3ltbGluayAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIHwgZ3JlcCAiXjEwMDc1NSAuKiAwCWZpbGUkIiAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIHwgZ3JlcCAiXjEyMDAwMCAuKiAwCXN5bWxpbmskIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIHdpdGggZmlsZW1vZGU9MCwgc3ltbGlua3M9MCBwcmVmZXJzIHN0YWdlIDIgb3ZlciBzdGFnZSAxJyAnCisJZ2l0IHJtIC0tY2FjaGVkIC1mIGZpbGUgc3ltbGluayAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICQoZ2l0IGhhc2gtb2JqZWN0IC13IHN0YWdlMSkgMQlmaWxlIgorCQllY2hvICIxMDA3NTUgJChnaXQgaGFzaC1vYmplY3QgLXcgc3RhZ2UyKSAyCWZpbGUiCisJCWVjaG8gIjEwMDY0NCAkKHByaW50ZiAxIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC10IGJsb2IgLS1zdGRpbikgMQlzeW1saW5rIgorCQllY2hvICIxMjAwMDAgJChwcmludGYgMiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtdCBibG9iIC0tc3RkaW4pIDIJc3ltbGluayIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgMCAmJgorCWdpdCBjb25maWcgY29yZS5zeW1saW5rcyAwICYmCisJZWNobyBuZXcgPiBmaWxlICYmCisJZWNobyBuZXcgPiBzeW1saW5rICYmCisJZ2l0IGFkZCBmaWxlIHN5bWxpbmsgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IGdyZXAgIl4xMDA3NTUgLiogMAlmaWxlJCIgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IGdyZXAgIl4xMjAwMDAgLiogMAlzeW1saW5rJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLXJlZnJlc2gnICcKKwk+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLWEgLW0gImNvbW1pdCBhbGwiICYmCisJdGVzdCAteiAiYGdpdCBkaWZmLWluZGV4IEhFQUQgLS0gZm9vYCIgJiYKKwlnaXQgcmVhZC10cmVlIEhFQUQgJiYKKwljYXNlICJgZ2l0IGRpZmYtaW5kZXggSEVBRCAtLSBmb29gIiBpbgorCToxMDA2NDQiICIqIk0JZm9vIikgZWNobyBwYXNzOzsKKwkqKSBlY2hvIGZhaWw7IChleGl0IDEpOzsKKwllc2FjICYmCisJZ2l0IGFkZCAtLXJlZnJlc2ggLS0gZm9vICYmCisJdGVzdCAteiAiYGdpdCBkaWZmLWluZGV4IEhFQUQgLS0gZm9vYCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLXJlZnJlc2ggd2l0aCBwYXRoc3BlYycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvID5mb28gJiYgZWNobyA+YmFyICYmIGVjaG8gPmJheiAmJgorCWdpdCBhZGQgZm9vIGJhciBiYXogJiYgSD0kKGdpdCByZXYtcGFyc2UgOmZvbykgJiYgZ2l0IHJtIC1mIGZvbyAmJgorCWVjaG8gIjEwMDY0NCAkSCAzCWZvbyIgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCXRlc3QtY2htdGltZSAtNjAgYmFyIGJheiAmJgorCT5leHBlY3QgJiYKKwlnaXQgYWRkIC0tcmVmcmVzaCBiYXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5ID5hY3R1YWwgJiYKKwkhIGdyZXAgYmFyIGFjdHVhbCYmCisJZ3JlcCBiYXogYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnZ2l0IGFkZCBzaG91bGQgZmFpbCBhdG9taWNhbGx5IHVwb24gYW4gdW5yZWFkYWJsZSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWRhdGUgPmZvbzEgJiYKKwlkYXRlID5mb28yICYmCisJY2htb2QgMCBmb28yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXZlcmJvc2UgLiAmJgorCSEgKCBnaXQgbHMtZmlsZXMgZm9vMSB8IGdyZXAgZm9vMSApCisnCisKK3JtIC1mIGZvbzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdnaXQgYWRkIC0taWdub3JlLWVycm9ycycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlkYXRlID5mb28xICYmCisJZGF0ZSA+Zm9vMiAmJgorCWNobW9kIDAgZm9vMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC0taWdub3JlLWVycm9ycyAuICYmCisJZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEKKycKKworcm0gLWYgZm9vMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ2dpdCBhZGQgKGFkZC5pZ25vcmUtZXJyb3JzKScgJworCWdpdCBjb25maWcgYWRkLmlnbm9yZS1lcnJvcnMgMSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlkYXRlID5mb28xICYmCisJZGF0ZSA+Zm9vMiAmJgorCWNobW9kIDAgZm9vMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC4gJiYKKwlnaXQgbHMtZmlsZXMgZm9vMSB8IGdyZXAgZm9vMQorJworcm0gLWYgZm9vMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ2dpdCBhZGQgKGFkZC5pZ25vcmUtZXJyb3JzID0gZmFsc2UpJyAnCisJZ2l0IGNvbmZpZyBhZGQuaWdub3JlLWVycm9ycyAwICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWRhdGUgPmZvbzEgJiYKKwlkYXRlID5mb28yICYmCisJY2htb2QgMCBmb28yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXZlcmJvc2UgLiAmJgorCSEgKCBnaXQgbHMtZmlsZXMgZm9vMSB8IGdyZXAgZm9vMSApCisnCitybSAtZiBmb28yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnLS1uby1pZ25vcmUtZXJyb3JzIG92ZXJyaWRlcyBjb25maWcnICcKKyAgICAgICBnaXQgY29uZmlnIGFkZC5pZ25vcmUtZXJyb3JzIDEgJiYKKyAgICAgICBnaXQgcmVzZXQgLS1oYXJkICYmCisgICAgICAgZGF0ZSA+Zm9vMSAmJgorICAgICAgIGRhdGUgPmZvbzIgJiYKKyAgICAgICBjaG1vZCAwIGZvbzIgJiYKKyAgICAgICB0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tdmVyYm9zZSAtLW5vLWlnbm9yZS1lcnJvcnMgLiAmJgorICAgICAgICEgKCBnaXQgbHMtZmlsZXMgZm9vMSB8IGdyZXAgZm9vMSApICYmCisgICAgICAgZ2l0IGNvbmZpZyBhZGQuaWdub3JlLWVycm9ycyAwCisnCitybSAtZiBmb28yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQlNMQVNIUFNQRUMgImdpdCBhZGQgJ2ZvXFxbb3VcXF1iYXInIGlnbm9yZXMgZm9vYmFyIiAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRvdWNoIGZvXFtvdVxdYmFyIGZvb2JhciAmJgorCWdpdCBhZGQgJ1wnJ2ZvXFtvdVxdYmFyJ1wnJyAmJgorCWdpdCBscy1maWxlcyBmb1xbb3VcXWJhciB8IGZncmVwIGZvXFtvdVxdYmFyICYmCisJISAoIGdpdCBscy1maWxlcyBmb29iYXIgfCBncmVwIGZvb2JhciApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgdG8gcmVzb2x2ZSBjb25mbGljdHMgb24gb3RoZXJ3aXNlIGlnbm9yZWQgcGF0aCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSA6MS8yL2EpICYmCisJKAorCQllY2hvICIxMDA2NDQgJEggMQl0cmFjay10aGlzIgorCQllY2hvICIxMDA2NDQgJEggMwl0cmFjay10aGlzIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWVjaG8gdHJhY2stdGhpcyA+Pi5naXRpZ25vcmUgJiYKKwllY2hvIHJlc29sdmVkID50cmFjay10aGlzICYmCisJZ2l0IGFkZCB0cmFjay10aGlzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQgbm9uLWV4aXN0ZW50IiBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgbm9uLWV4aXN0ZW50ICYmCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAibm9uLWV4aXN0ZW50IikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWRyeS1ydW4gb2YgZXhpc3RpbmcgY2hhbmdlZCBmaWxlJyAiCisJZWNobyBuZXcgPj50cmFjay10aGlzICYmCisJZ2l0IGFkZCAtLWRyeS1ydW4gdHJhY2stdGhpcyA+YWN0dWFsIDI+JjEgJiYKKwllY2hvIFwiYWRkICd0cmFjay10aGlzJ1wiIHwgdGVzdF9jbXAgLSBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWRyeS1ydW4gb2Ygbm9uLWV4aXN0aW5nIGZpbGUnICIKKwllY2hvIGlnbm9yZWQtZmlsZSA+Pi5naXRpZ25vcmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tZHJ5LXJ1biB0cmFjay10aGlzIGlnbm9yZWQtZmlsZSA+YWN0dWFsIDI+JjEKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWRyeS1ydW4gb2YgYW4gZXhpc3RpbmcgZmlsZSBvdXRwdXQnICIKKwllY2hvIFwiZmF0YWw6IHBhdGhzcGVjICdpZ25vcmVkLWZpbGUnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzXCIgPmV4cGVjdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisiCisKK2NhdCA+ZXhwZWN0LmVyciA8PFxFT0YKK1RoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczoKK2lnbm9yZWQtZmlsZQorVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS4KK2ZhdGFsOiBubyBmaWxlcyBhZGRlZAorRU9GCitjYXQgPmV4cGVjdC5vdXQgPDxcRU9GCithZGQgJ3RyYWNrLXRoaXMnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWRyeS1ydW4gLS1pZ25vcmUtbWlzc2luZyBvZiBub24tZXhpc3RpbmcgZmlsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS1kcnktcnVuIC0taWdub3JlLW1pc3NpbmcgdHJhY2stdGhpcyBpZ25vcmVkLWZpbGUgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1kcnktcnVuIC0taWdub3JlLW1pc3Npbmcgb2Ygbm9uLWV4aXN0aW5nIGZpbGUgb3V0cHV0JyAnCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaCBiL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA5OGE2YWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaApAQCAtMCwwICsxLDM1OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FkZCAtaSBiYXNpYyB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcHJlcmVxLUZJTEVNT0RFLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgKGluaXRpYWwpJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBtb3JlID4+ZmlsZSAmJgorCWVjaG8gbGluZXMgPj5maWxlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3N0YXR1cyB3b3JrcyAoaW5pdGlhbCknICcKKwlnaXQgYWRkIC1pIDwvZGV2L251bGwgPm91dHB1dCAmJgorCWdyZXAgIisxLy0wICorMi8tMCBmaWxlIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCBleHBlY3RlZCcgJworY2F0ID5leHBlY3RlZCA8PEVPRgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ5NWYzYWQKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUKK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmIHdvcmtzIChpbml0aWFsKScgJworCShlY2hvIGQ7IGVjaG8gMSkgfCBnaXQgYWRkIC1pID5vdXRwdXQgJiYKKwlzZWQgLW5lICIvbmV3IGZpbGUvLC9jb250ZW50L3AiIDxvdXRwdXQgPmRpZmYgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaWZmCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3JldmVydCB3b3JrcyAoaW5pdGlhbCknICcKKwlnaXQgYWRkIGZpbGUgJiYKKwkoZWNobyByOyBlY2hvIDEpIHwgZ2l0IGFkZCAtaSAmJgorCWdpdCBscy1maWxlcyA+b3V0cHV0ICYmCisJISBncmVwIC4gb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgKGNvbW1pdCknICcKKwllY2hvIGJhc2VsaW5lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBjb21taXQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBtb3JlID4+ZmlsZSAmJgorCWVjaG8gbGluZXMgPj5maWxlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3N0YXR1cyB3b3JrcyAoY29tbWl0KScgJworCWdpdCBhZGQgLWkgPC9kZXYvbnVsbCA+b3V0cHV0ICYmCisJZ3JlcCAiKzEvLTAgKisyLy0wIGZpbGUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwIGV4cGVjdGVkJyAnCitjYXQgPmV4cGVjdGVkIDw8RU9GCitpbmRleCAxODBiNDdjLi5iNmYyYzA4IDEwMDY0NAorLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEgKzEsMiBAQAorIGJhc2VsaW5lCisrY29udGVudAorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZiB3b3JrcyAoY29tbWl0KScgJworCShlY2hvIGQ7IGVjaG8gMSkgfCBnaXQgYWRkIC1pID5vdXRwdXQgJiYKKwlzZWQgLW5lICIvXmluZGV4LywvY29udGVudC9wIiA8b3V0cHV0ID5kaWZmICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlmZgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdyZXZlcnQgd29ya3MgKGNvbW1pdCknICcKKwlnaXQgYWRkIGZpbGUgJiYKKwkoZWNobyByOyBlY2hvIDEpIHwgZ2l0IGFkZCAtaSAmJgorCWdpdCBhZGQgLWkgPC9kZXYvbnVsbCA+b3V0cHV0ICYmCisJZ3JlcCAidW5jaGFuZ2VkICorMy8tMCBmaWxlIiBvdXRwdXQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwIGV4cGVjdGVkJyAnCitjYXQgPmV4cGVjdGVkIDw8RU9GCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCBmYWtlIGVkaXRvcicgJworCT5mYWtlX2VkaXRvci5zaCAmJgorCWNobW9kIGEreCBmYWtlX2VkaXRvci5zaCAmJgorCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2VfZWRpdG9yLnNoIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2R1bW15IGVkaXQgd29ya3MnICcKKwkoZWNobyBlOyBlY2hvIGEpIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBkaWZmID4gZGlmZiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCBwYXRjaCcgJworY2F0ID5wYXRjaCA8PEVPRgorQEAgLTEsMSArMSw0IEBACisgdGhpcworK3BhdGNoCistZG9lcyBub3QKKyBhcHBseQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgZmFrZSBlZGl0b3InICcKKwllY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZV9lZGl0b3Iuc2ggJiYKKwljYXQgPj5mYWtlX2VkaXRvci5zaCA8PFxFT0YgJiYKK212IC1mICIkMSIgb2xkcGF0Y2ggJiYKK212IC1mIHBhdGNoICIkMSIKK0VPRgorCWNobW9kIGEreCBmYWtlX2VkaXRvci5zaCAmJgorCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2VfZWRpdG9yLnNoIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2JhZCBlZGl0IHJlamVjdGVkJyAnCisJZ2l0IHJlc2V0ICYmCisJKGVjaG8gZTsgZWNobyBuOyBlY2hvIGQpIHwgZ2l0IGFkZCAtcCA+b3V0cHV0ICYmCisJZ3JlcCAiaHVuayBkb2VzIG5vdCBhcHBseSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgcGF0Y2gnICcKK2NhdCA+cGF0Y2ggPDxFT0YKK3RoaXMgcGF0Y2gKK2lzIGdhcmJhZ2UKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dhcmJhZ2UgZWRpdCByZWplY3RlZCcgJworCWdpdCByZXNldCAmJgorCShlY2hvIGU7IGVjaG8gbjsgZWNobyBkKSB8IGdpdCBhZGQgLXAgPm91dHB1dCAmJgorCWdyZXAgImh1bmsgZG9lcyBub3QgYXBwbHkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwIHBhdGNoJyAnCitjYXQgPnBhdGNoIDw8RU9GCitAQCAtMSwwICsxLDAgQEAKKyBiYXNlbGluZQorK2NvbnRlbnQKKytuZXdjb250ZW50CisrbGluZXMKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwIGV4cGVjdGVkJyAnCitjYXQgPmV4cGVjdGVkIDw8RU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI1ZGQ2YzkuLmY5MTBhZTkgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSw0ICsxLDQgQEAKKyBiYXNlbGluZQorIGNvbnRlbnQKKy1uZXdjb250ZW50CisrbW9yZQorIGxpbmVzCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdyZWFsIGVkaXQgd29ya3MnICcKKwkoZWNobyBlOyBlY2hvIG47IGVjaG8gZCkgfCBnaXQgYWRkIC1wICYmCisJZ2l0IGRpZmYgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NraXAgZmlsZXMgc2ltaWxhcmx5IGFzIGNvbW1pdCAtYScgJworCWdpdCByZXNldCAmJgorCWVjaG8gZmlsZSA+LmdpdGlnbm9yZSAmJgorCWVjaG8gY2hhbmdlZCA+ZmlsZSAmJgorCWVjaG8geSB8IGdpdCBhZGQgLXAgZmlsZSAmJgorCWdpdCBkaWZmID5vdXRwdXQgJiYKKwlnaXQgcmVzZXQgJiYKKwlnaXQgY29tbWl0IC1hbSBjb21taXQgJiYKKwlnaXQgZGlmZiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisnCitybSAtZiAuZ2l0aWdub3JlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCxGSUxFTU9ERSAncGF0Y2ggZG9lcyBub3QgYWZmZWN0IG1vZGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWNobW9kICt4IGZpbGUgJiYKKwlwcmludGYgIm5cXG55XFxuIiB8IGdpdCBhZGQgLXAgJiYKKwlnaXQgc2hvdyA6ZmlsZSB8IGdyZXAgY29udGVudCAmJgorCWdpdCBkaWZmIGZpbGUgfCBncmVwICJuZXcgbW9kZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMLEZJTEVNT0RFICdzdGFnZSBtb2RlIGJ1dCBub3QgaHVuaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJY2htb2QgK3ggZmlsZSAmJgorCXByaW50ZiAieVxcbm5cXG4iIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIGZpbGUgfCBncmVwICJuZXcgbW9kZSIgJiYKKwlnaXQgZGlmZiAgICAgICAgICBmaWxlIHwgZ3JlcCAiK2NvbnRlbnQiCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMLEZJTEVNT0RFICdzdGFnZSBtb2RlIGFuZCBodW5rJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwljaG1vZCAreCBmaWxlICYmCisJcHJpbnRmICJ5XFxueVxcbiIgfCBnaXQgYWRkIC1wICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgZmlsZSB8IGdyZXAgIm5ldyBtb2RlIiAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIGZpbGUgfCBncmVwICIrY29udGVudCIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIGZpbGUpIgorJworCisjIGVuZCBvZiB0ZXN0cyBkaXNhYmxlZCB3aGVuIGZpbGVtb2RlIGlzIG5vdCB1c2FibGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCBhZ2FpbicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X2NobW9kICt4IGZpbGUgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlCisnCisKKyMgV3JpdGUgdGhlIHBhdGNoIGZpbGUgd2l0aCBhIG5ldyBsaW5lIGF0IHRoZSB0b3AgYW5kIGJvdHRvbQordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCBwYXRjaCcgJworY2F0ID5wYXRjaCA8PEVPRgoraW5kZXggMTgwYjQ3Yy4uYjZmMmMwOCAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDIgKzEsNCBAQAorK2ZpcnN0bGluZQorIGJhc2VsaW5lCisgY29udGVudAorK2xhc3RsaW5lCitFT0YKKycKKworIyBFeHBlY3RlZCBvdXRwdXQsIHNpbWlsYXIgdG8gdGhlIHBhdGNoIGJ1dCB3LyBkaWZmIGF0IHRoZSB0b3AKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgZXhwZWN0ZWQnICcKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggYjZmMmMwOC4uNjFiOTA1MyAxMDA3NTUKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDIgKzEsNCBAQAorK2ZpcnN0bGluZQorIGJhc2VsaW5lCisgY29udGVudAorK2xhc3RsaW5lCitFT0YKKycKKworIyBUZXN0IHNwbGl0dGluZyB0aGUgZmlyc3QgcGF0Y2gsIHRoZW4gYWRkaW5nIGJvdGgKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnYWRkIGZpcnN0IGxpbmUgd29ya3MnICcKKwlnaXQgY29tbWl0IC1hbSAiY2xlYXIgbG9jYWwgY2hhbmdlcyIgJiYKKwlnaXQgYXBwbHkgcGF0Y2ggJiYKKwkoZWNobyBzOyBlY2hvIHk7IGVjaG8geSkgfCBnaXQgYWRkIC1wIGZpbGUgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+IGRpZmYgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgZXhwZWN0ZWQnICcKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2RpZmYgLS1naXQgYS9ub24tZW1wdHkgYi9ub24tZW1wdHkKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggZDk1ZjNhZC4uMDAwMDAwMAorLS0tIGEvbm9uLWVtcHR5CisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistY29udGVudAorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGVsZXRpbmcgYSBub24tZW1wdHkgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPm5vbi1lbXB0eSAmJgorCWdpdCBhZGQgbm9uLWVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSBub24tZW1wdHkgJiYKKwlybSBub24tZW1wdHkgJiYKKwllY2hvIHkgfCBnaXQgYWRkIC1wIG5vbi1lbXB0eSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5kaWZmICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwIGV4cGVjdGVkJyAnCitjYXQgPmV4cGVjdGVkIDw8RU9GCitkaWZmIC0tZ2l0IGEvZW1wdHkgYi9lbXB0eQorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCBlNjlkZTI5Li4wMDAwMDAwCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkZWxldGluZyBhbiBlbXB0eSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT4gZW1wdHkgJiYKKwlnaXQgYWRkIGVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSBlbXB0eSAmJgorCXJtIGVtcHR5ICYmCisJZWNobyB5IHwgZ2l0IGFkZCAtcCBlbXB0eSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5kaWZmICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NwbGl0IGh1bmsgc2V0dXAnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZm9yIGkgaW4gMTAgMjAgMzAgNDAgNTAgNjAKKwlkbworCQllY2hvICRpCisJZG9uZSA+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGVzdCAmJgorCisJZm9yIGkgaW4gMTAgMTUgMjAgMjEgMjIgMjMgMjQgMzAgNDAgNTAgNjAKKwlkbworCQllY2hvICRpCisJZG9uZSA+dGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NwbGl0IGh1bmsgImFkZCAtcCAoZWRpdCkiJyAnCisJIyBTcGxpdCwgc2F5IEVkaXQgYW5kIGRvIG5vdGhpbmcuICBUaGVuOgorCSMKKwkjIDEuIEJyb2tlbiB2ZXJzaW9uIHJlc3VsdHMgaW4gYSBwYXRjaCB0aGF0IGRvZXMgbm90IGFwcGx5IGFuZAorCSMgb25seSB0YWtlcyBbeS9uXSAoZWRpdCBhZ2Fpbikgc28gdGhlIGZpcnN0IHEgaXMgZGlzY2FyZGVkCisJIyBhbmQgdGhlbiBuIGF0dGVtcHRzIHRvIGRpc2NhcmQgdGhlIGVkaXQuIFJlcGVhdCBxIGVub3VnaAorCSMgdGltZXMgdG8gZ2V0IG91dC4KKwkjCisJIyAyLiBDb3JyZWN0IHZlcnNpb24gYXBwbGllcyB0aGUgKG5vdCllZGl0ZWQgdmVyc2lvbiwgYW5kIGFza3MKKwkjICAgIGFib3V0IHRoZSBuZXh0IGh1bmssIGFnYWluc3Qgd2ljaCB3ZSBzYXkgcSBhbmQgcHJvZ3JhbQorCSMgICAgZXhpdHMuCisJZm9yIGEgaW4gcyBlICAgICBxIG4gcSBxCisJZG8KKwkJZWNobyAkYQorCWRvbmUgfAorCUVESVRPUj06IGdpdCBhZGQgLXAgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJISBncmVwICJeKzE1IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggbW9kZSBpZ25vcmVzIHVubWVyZ2VkIGVudHJpZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9jb21taXQgY29uZmxpY3QgJiYKKwl0ZXN0X2NvbW1pdCBub24tY29uZmxpY3QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCXRlc3RfY29tbWl0IHNpZGUgY29uZmxpY3QudCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXIgY29uZmxpY3QudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzaWRlICYmCisJZWNobyBjaGFuZ2VkID5ub24tY29uZmxpY3QudCAmJgorCWVjaG8geSB8IGdpdCBhZGQgLXAgPm91dHB1dCAmJgorCSEgZ3JlcCBhL2NvbmZsaWN0LnQgb3V0cHV0ICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJKiBVbm1lcmdlZCBwYXRoIGNvbmZsaWN0LnQKKwlkaWZmIC0tZ2l0IGEvbm9uLWNvbmZsaWN0LnQgYi9ub24tY29uZmxpY3QudAorCWluZGV4IGY3NjYyMjEuLjVlYTJlZDQgMTAwNjQ0CisJLS0tIGEvbm9uLWNvbmZsaWN0LnQKKwkrKysgYi9ub24tY29uZmxpY3QudAorCUBAIC0xICsxIEBACisJLW5vbi1jb25mbGljdAorCStjaGFuZ2VkCisJRU9GCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmRpZmYgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaWZmCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMi1hZGQtZWRpdC5zaCBiL3QvdDM3MDItYWRkLWVkaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGVlNDdjYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM3MDItYWRkLWVkaXQuc2gKQEAgLTAsMCArMSwxMjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdhZGQgLWUgYmFzaWMgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKworCitjYXQgPiBmaWxlIDw8IEVPRgorTE8sIHByYWlzZSBvZiB0aGUgcHJvd2VzcyBvZiBwZW9wbGUta2luZ3MKK29mIHNwZWFyLWFybWVkIERhbmVzLCBpbiBkYXlzIGxvbmcgc3BlZCwKK3dlIGhhdmUgaGVhcmQsIGFuZCB3aGF0IGhvbm9yIHRoZSBhdGhlbGluZ3Mgd29uIQorT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorZnJvbSBtYW55IGEgdHJpYmUsIHRoZSBtZWFkLWJlbmNoIHRvcmUsCithd2luZyB0aGUgZWFybHMuIFNpbmNlIGVyc3QgaGUgbGF5CitmcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorZm9yIGhlIHdheGVkIHVuZGVyIHdlbGtpbiwgaW4gd2VhbHRoIGhlIHRocm92ZSwKK3RpbGwgYmVmb3JlIGhpbSB0aGUgZm9saywgYm90aCBmYXIgYW5kIG5lYXIsCit3aG8gaG91c2UgYnkgdGhlIHdoYWxlLXBhdGgsIGhlYXJkIGhpcyBtYW5kYXRlLAorZ2F2ZSBoaW0gZ2lmdHM6ICBhIGdvb2Qga2luZyBoZSEKK0VPRgorCitjYXQgPiBzZWNvbmQtcGFydCA8PCBFT0YKK1RvIGhpbSBhbiBoZWlyIHdhcyBhZnRlcndhcmQgYm9ybiwKK2Egc29uIGluIGhpcyBoYWxscywgd2hvbSBoZWF2ZW4gc2VudAordG8gZmF2b3IgdGhlIGZvbGssIGZlZWxpbmcgdGhlaXIgd29lCit0aGF0IGVyc3QgdGhleSBoYWQgbGFja2VkIGFuIGVhcmwgZm9yIGxlYWRlcgorc28gbG9uZyBhIHdoaWxlOyB0aGUgTG9yZCBlbmRvd2VkIGhpbSwKK3RoZSBXaWVsZGVyIG9mIFdvbmRlciwgd2l0aCB3b3JsZCdzIHJlbm93bi4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsIGZpbGUKKworJworCitjYXQgPiBleHBlY3RlZC1wYXRjaCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggYjk4MzRiNS4uOTAyMGFjYiAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDExICsxLDYgQEAKKy1MTywgcHJhaXNlIG9mIHRoZSBwcm93ZXNzIG9mIHBlb3BsZS1raW5ncworLW9mIHNwZWFyLWFybWVkIERhbmVzLCBpbiBkYXlzIGxvbmcgc3BlZCwKKy13ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKKy1PZnQgU2N5bGQgdGhlIFNjZWZpbmcgZnJvbSBzcXVhZHJvbmVkIGZvZXMsCistZnJvbSBtYW55IGEgdHJpYmUsIHRoZSBtZWFkLWJlbmNoIHRvcmUsCistYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorLWZyaWVuZGxlc3MsIGEgZm91bmRsaW5nLCBmYXRlIHJlcGFpZCBoaW06CistZm9yIGhlIHdheGVkIHVuZGVyIHdlbGtpbiwgaW4gd2VhbHRoIGhlIHRocm92ZSwKKy10aWxsIGJlZm9yZSBoaW0gdGhlIGZvbGssIGJvdGggZmFyIGFuZCBuZWFyLAorLXdobyBob3VzZSBieSB0aGUgd2hhbGUtcGF0aCwgaGVhcmQgaGlzIG1hbmRhdGUsCistZ2F2ZSBoaW0gZ2lmdHM6ICBhIGdvb2Qga2luZyBoZSEKKytUbyBoaW0gYW4gaGVpciB3YXMgYWZ0ZXJ3YXJkIGJvcm4sCisrYSBzb24gaW4gaGlzIGhhbGxzLCB3aG9tIGhlYXZlbiBzZW50CisrdG8gZmF2b3IgdGhlIGZvbGssIGZlZWxpbmcgdGhlaXIgd29lCisrdGhhdCBlcnN0IHRoZXkgaGFkIGxhY2tlZCBhbiBlYXJsIGZvciBsZWFkZXIKKytzbyBsb25nIGEgd2hpbGU7IHRoZSBMb3JkIGVuZG93ZWQgaGltLAorK3RoZSBXaWVsZGVyIG9mIFdvbmRlciwgd2l0aCB3b3JsZCdzIHJlbm93bi4KK0VPRgorCitjYXQgPiBwYXRjaCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggYjk4MzRiNS4uZWY2ZTk0YyAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0zLDEgKzMsMzMzIEBAIG9mIHNwZWFyLWFybWVkIERhbmVzLCBpbiBkYXlzIGxvbmcgc3BlZCwKKyB3ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKKysKKyBPZnQgU2N5bGQgdGhlIFNjZWZpbmcgZnJvbSBzcXVhZHJvbmVkIGZvZXMsCitAQCAtMiw3ICsxLDUgQEAgYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorIGZyaWVuZGxlc3MsIGEgZm91bmRsaW5nLCBmYXRlIHJlcGFpZCBoaW06CisrCisgZm9yIGhlIHdheGVkIHVuZGVyIHdlbGtpbiwgaW4gd2VhbHRoIGhlIHRocm92ZSwKK0VPRgorCitjYXQgPiBleHBlY3RlZCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggYjk4MzRiNS4uZWY2ZTk0YyAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDEwICsxLDEyIEBACisgTE8sIHByYWlzZSBvZiB0aGUgcHJvd2VzcyBvZiBwZW9wbGUta2luZ3MKKyBvZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCisgd2UgaGF2ZSBoZWFyZCwgYW5kIHdoYXQgaG9ub3IgdGhlIGF0aGVsaW5ncyB3b24hCisrCisgT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorIGZyb20gbWFueSBhIHRyaWJlLCB0aGUgbWVhZC1iZW5jaCB0b3JlLAorIGF3aW5nIHRoZSBlYXJscy4gU2luY2UgZXJzdCBoZSBsYXkKKyBmcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorKworIGZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCisgdGlsbCBiZWZvcmUgaGltIHRoZSBmb2xrLCBib3RoIGZhciBhbmQgbmVhciwKKyB3aG8gaG91c2UgYnkgdGhlIHdoYWxlLXBhdGgsIGhlYXJkIGhpcyBtYW5kYXRlLAorRU9GCisKK2VjaG8gIiMhJFNIRUxMX1BBVEgiID5mYWtlLWVkaXRvci5zaAorY2F0ID4+IGZha2UtZWRpdG9yLnNoIDw8XEVPRgorbXYgLWYgIiQxIiBvcmlnLXBhdGNoICYmCittdiAtZiBwYXRjaCAiJDEiCitFT0YKKwordGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZmFrZS1lZGl0b3Iuc2giCitjaG1vZCBhK3ggZmFrZS1lZGl0b3Iuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC1lJyAnCisKKwljcCBzZWNvbmQtcGFydCBmaWxlICYmCisJZ2l0IGFkZCAtZSAmJgorCXRlc3RfY21wIHNlY29uZC1wYXJ0IGZpbGUgJiYKKwl0ZXN0X2NtcCBvcmlnLXBhdGNoIGV4cGVjdGVkLXBhdGNoICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPiBvdXQgJiYKKwl0ZXN0X2NtcCBvdXQgZXhwZWN0ZWQKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDMtYWRkLW1hZ2ljLXBhdGhzcGVjLnNoIGIvdC90MzcwMy1hZGQtbWFnaWMtcGF0aHNwZWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTExNWRlNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM3MDMtYWRkLW1hZ2ljLXBhdGhzcGVjLnNoCkBAIC0wLDAgKzEsNTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtYWdpYyBwYXRoc3BlYyB0ZXN0cyB1c2luZyBnaXQtYWRkJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBzdWIgYW5vdGhlcnN1YiAmJgorCTogPnN1Yi9mb28gJiYKKwk6ID5hbm90aGVyc3ViL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgOi8nICIKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWFkZCAnYW5vdGhlcnN1Yi9mb28nCisJYWRkICdleHBlY3RlZCcKKwlhZGQgJ3N1Yi9hY3R1YWwnCisJYWRkICdzdWIvZm9vJworCUVPRgorCShjZCBzdWIgJiYgZ2l0IGFkZCAtbiA6LyA+YWN0dWFsKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHN1Yi9hY3R1YWwKKyIKKworY2F0ID5leHBlY3RlZCA8PEVPRgorYWRkICdhbm90aGVyc3ViL2ZvbycKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgOi9hbm90aGVyc3ViJyAnCisJKGNkIHN1YiAmJiBnaXQgYWRkIC1uIDovYW5vdGhlcnN1YiA+YWN0dWFsKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHN1Yi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIDovbm9uLWV4aXN0ZW50JyAnCisJKGNkIHN1YiAmJiB0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC1uIDovbm9uLWV4aXN0ZW50KQorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCithZGQgJ3N1Yi9mb28nCitFT0YKKworaWYgbWtkaXIgIjoiIDI+L2Rldi9udWxsCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIENPTE9OX0RJUgorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDT0xPTl9ESVIgJ2EgZmlsZSB3aXRoIHRoZSBzYW1lIChsb25nKSBtYWdpYyBuYW1lIGV4aXN0cycgJworCTogPiI6KGljYXNlKWhhIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLW4gIjooaWNhc2UpaGEiICYmCisJZ2l0IGFkZCAtbiAiLi86KGljYXNlKWhhIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENPTE9OX0RJUiAnYSBmaWxlIHdpdGggdGhlIHNhbWUgKHNob3J0KSBtYWdpYyBuYW1lIGV4aXN0cycgJworCTogPiI6L2JhciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC1uIDovYmFyICYmCisJZ2l0IGFkZCAtbiAiLi86L2JhciIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzODAwLW1rdGFnLnNoIGIvdC90MzgwMC1ta3RhZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZWI0Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzgwMC1ta3RhZy5zaApAQCAtMCwwICsxLDM2NSBAQAorIyEvYmluL3NoCisjCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBta3RhZzogdGFnIG9iamVjdCB2ZXJpZnkgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGNoZWNrIHRoZSB0YWcuc2lnIGZpbGUsIGV4cGVjdGluZyB2ZXJpZnlfdGFnKCkgdG8gZmFpbCwKKyMgYW5kIGNoZWNraW5nIHRoYXQgdGhlIGVycm9yIG1lc3NhZ2UgbWF0Y2hlcyB0aGUgcGF0dGVybgorIyBnaXZlbiBpbiB0aGUgZXhwZWN0LnBhdCBmaWxlLgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAoKSB7CisJZXhwZWN0PSIkMiIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMSIgJworCQkoIHRlc3RfbXVzdF9mYWlsIGdpdCBta3RhZyA8dGFnLnNpZyAyPm1lc3NhZ2UgKSAmJgorCQlncmVwICIkZXhwZWN0IiBtZXNzYWdlCisJJworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmaXJzdCBjcmVhdGUgYSBjb21taXQsIHNvIHdlIGhhdmUgYSB2YWxpZCBvYmplY3QvdHlwZQorIyBmb3IgdGhlIHRhZy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBIZWxsbyA+QSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQSAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorCWhlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgMS4gbGVuZ3RoIGNoZWNrCisKK2NhdCA+dGFnLnNpZyA8PEVPRgordG9vIHNob3J0IGZvciBhIHRhZworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdUYWcgb2JqZWN0IGxlbmd0aCBjaGVjaycgXAorCSdeZXJyb3I6IC4qc2l6ZSB3cm9uZy4qJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICAyLiBvYmplY3QgbGluZSBsYWJlbCBjaGVjaworCitjYXQgPnRhZy5zaWcgPDxFT0YKK3h4eHh4eCAxMzllOWIzMzk4NmIxYzI2NzBmZmY1MmM1MDY3NjAzMTE3YjNlODk1Cit0eXBlIHRhZwordGFnIG15dGFnCit0YWdnZXIgLiA8PiAwICswMDAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnIm9iamVjdCIgbGluZSBsYWJlbCBjaGVjaycgJ15lcnJvcjogY2hhcjA6IC4qIm9iamVjdCAiJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICAzLiBvYmplY3QgbGluZSBTSEExIGNoZWNrCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0IHp6OWU5YjMzOTg2YjFjMjY3MGZmZjUyYzUwNjc2MDMxMTdiM2U4OTUKK3R5cGUgdGFnCit0YWcgbXl0YWcKK3RhZ2dlciAuIDw+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcib2JqZWN0IiBsaW5lIFNIQTEgY2hlY2snICdeZXJyb3I6IGNoYXI3OiAuKlNIQTEgaGFzaCQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgNC4gdHlwZSBsaW5lIGxhYmVsIGNoZWNrCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0IDc3OWU5YjMzOTg2YjFjMjY3MGZmZjUyYzUwNjc2MDMxMTdiM2U4OTUKK3h4eHggdGFnCit0YWcgbXl0YWcKK3RhZ2dlciAuIDw+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidHlwZSIgbGluZSBsYWJlbCBjaGVjaycgJ15lcnJvcjogY2hhcjQ3OiAuKiJcXG50eXBlICIkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDUuIHR5cGUgbGluZSBlb2wgY2hlY2sKKworZWNobyAib2JqZWN0IDc3OWU5YjMzOTg2YjFjMjY3MGZmZjUyYzUwNjc2MDMxMTdiM2U4OTUiID50YWcuc2lnCitwcmludGYgInR5cGUgdGFnc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcyIgPj50YWcuc2lnCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidHlwZSIgbGluZSBlb2wgY2hlY2snICdeZXJyb3I6IGNoYXI0ODogLioiXFxuIiQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgNi4gdGFnIGxpbmUgbGFiZWwgY2hlY2sgIzEKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgNzc5ZTliMzM5ODZiMWMyNjcwZmZmNTJjNTA2NzYwMzExN2IzZTg5NQordHlwZSB0YWcKK3h4eCBteXRhZwordGFnZ2VyIC4gPD4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJ0YWciIGxpbmUgbGFiZWwgY2hlY2sgIzEnIFwKKwknXmVycm9yOiBjaGFyNTc6IG5vICJ0YWcgIiBmb3VuZCQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgNy4gdGFnIGxpbmUgbGFiZWwgY2hlY2sgIzIKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgNzc5ZTliMzM5ODZiMWMyNjcwZmZmNTJjNTA2NzYwMzExN2IzZTg5NQordHlwZSB0YWdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cKK3RhZworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidGFnIiBsaW5lIGxhYmVsIGNoZWNrICMyJyBcCisJJ15lcnJvcjogY2hhcjg3OiBubyAidGFnICIgZm91bmQkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDguIHR5cGUgbGluZSB0eXBlLW5hbWUgbGVuZ3RoIGNoZWNrCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0IDc3OWU5YjMzOTg2YjFjMjY3MGZmZjUyYzUwNjc2MDMxMTdiM2U4OTUKK3R5cGUgdGFnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnCit0YWcgbXl0YWcKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnInR5cGUiIGxpbmUgdHlwZS1uYW1lIGxlbmd0aCBjaGVjaycgXAorCSdeZXJyb3I6IGNoYXI1MzogdHlwZSB0b28gbG9uZyQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgOS4gdmVyaWZ5IG9iamVjdCAoU0hBMS90eXBlKSBjaGVjaworCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCA3NzllOWIzMzk4NmIxYzI2NzBmZmY1MmM1MDY3NjAzMTE3YjNlODk1Cit0eXBlIHRhZ2dnZwordGFnIG15dGFnCit0YWdnZXIgLiA8PiAwICswMDAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAndmVyaWZ5IG9iamVjdCAoU0hBMS90eXBlKSBjaGVjaycgXAorCSdeZXJyb3I6IGNoYXI3OiBjb3VsZCBub3QgdmVyaWZ5IG9iamVjdC4qJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDEwLiB2ZXJpZnkgdGFnLW5hbWUgY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXkJdGFnCit0YWdnZXIgLiA8PiAwICswMDAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAndmVyaWZ5IHRhZy1uYW1lIGNoZWNrJyBcCisJJ15lcnJvcjogY2hhcjY3OiBjb3VsZCBub3QgdmVyaWZ5IHRhZyBuYW1lJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDExLiB0YWdnZXIgbGluZSBsYWJlbCBjaGVjayAjMQorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZworCitUaGlzIGlzIGZpbGxlcgorRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidGFnZ2VyIiBsaW5lIGxhYmVsIGNoZWNrICMxJyBcCisJJ15lcnJvcjogY2hhcjcwOiBjb3VsZCBub3QgZmluZCAidGFnZ2VyICIkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTIuIHRhZ2dlciBsaW5lIGxhYmVsIGNoZWNrICMyCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIKKworVGhpcyBpcyBmaWxsZXIKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnInRhZ2dlciIgbGluZSBsYWJlbCBjaGVjayAjMicgXAorCSdeZXJyb3I6IGNoYXI3MDogY291bGQgbm90IGZpbmQgInRhZ2dlciAiJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDEzLiBkaXNhbGxvdyBtaXNzaW5nIHRhZyBhdXRob3IgbmFtZQorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyICA8PiAwICswMDAwCisKK1RoaXMgaXMgZmlsbGVyCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2Rpc2FsbG93IG1pc3NpbmcgdGFnIGF1dGhvciBuYW1lJyBcCisJJ15lcnJvcjogY2hhcjc3OiBtaXNzaW5nIHRhZ2dlciBuYW1lJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDE0LiBkaXNhbGxvdyBtaXNzaW5nIHRhZyBhdXRob3IgbmFtZQorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDwKKyA+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdkaXNhbGxvdyBtYWxmb3JtZWQgdGFnZ2VyJyBcCisJJ15lcnJvcjogY2hhcjc3OiBtYWxmb3JtZWQgdGFnZ2VyIGZpZWxkJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDE1LiBhbGxvdyBlbXB0eSB0YWcgZW1haWwKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8PiAwICswMDAwCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYWxsb3cgZW1wdHkgdGFnIGVtYWlsJyBcCisgICAgJ2dpdCBta3RhZyA8dGFnLnNpZyA+LmdpdC9yZWZzL3RhZ3MvbXl0YWcgMj5tZXNzYWdlJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTYuIGRpc2FsbG93IHNwYWNlcyBpbiB0YWcgZW1haWwKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8dGFnIGdlckBleGFtcGxlLmNvbT4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2Rpc2FsbG93IHNwYWNlcyBpbiB0YWcgZW1haWwnIFwKKwknXmVycm9yOiBjaGFyNzc6IG1hbGZvcm1lZCB0YWdnZXIgZmllbGQkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTcuIGRpc2FsbG93IG1pc3NpbmcgdGFnIHRpbWVzdGFtcAorCit0ciAnXycgJyAnID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPl9fCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGlzYWxsb3cgbWlzc2luZyB0YWcgdGltZXN0YW1wJyBcCisJJ15lcnJvcjogY2hhcjEwNzogbWlzc2luZyB0YWcgdGltZXN0YW1wJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDE4LiBkZXRlY3QgaW52YWxpZCB0YWcgdGltZXN0YW1wMQorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IFR1ZSBNYXIgMjUgMTU6NDc6NDQgMjAwOAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2RldGVjdCBpbnZhbGlkIHRhZyB0aW1lc3RhbXAxJyBcCisJJ15lcnJvcjogY2hhcjEwNzogbWlzc2luZyB0YWcgdGltZXN0YW1wJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDE5LiBkZXRlY3QgaW52YWxpZCB0YWcgdGltZXN0YW1wMgorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDIwMDgtMDMtMzFUMTI6MjA6MTUtMDUwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2RldGVjdCBpbnZhbGlkIHRhZyB0aW1lc3RhbXAyJyBcCisJJ15lcnJvcjogY2hhcjExMTogbWFsZm9ybWVkIHRhZyB0aW1lc3RhbXAkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMjAuIGRldGVjdCBpbnZhbGlkIHRhZyB0aW1lem9uZTEKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjA2NDc4MjMzIEdNVAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2RldGVjdCBpbnZhbGlkIHRhZyB0aW1lem9uZTEnIFwKKwknXmVycm9yOiBjaGFyMTE4OiBtYWxmb3JtZWQgdGFnIHRpbWV6b25lJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDIxLiBkZXRlY3QgaW52YWxpZCB0YWcgdGltZXpvbmUyCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjQ3ODIzMyArICAzMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2RldGVjdCBpbnZhbGlkIHRhZyB0aW1lem9uZTInIFwKKwknXmVycm9yOiBjaGFyMTE4OiBtYWxmb3JtZWQgdGFnIHRpbWV6b25lJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDIyLiBkZXRlY3QgaW52YWxpZCB0YWcgdGltZXpvbmUzCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjQ3ODIzMyAtMTQzMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2RldGVjdCBpbnZhbGlkIHRhZyB0aW1lem9uZTMnIFwKKwknXmVycm9yOiBjaGFyMTE4OiBtYWxmb3JtZWQgdGFnIHRpbWV6b25lJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDIzLiBkZXRlY3QgaW52YWxpZCBoZWFkZXIgZW50cnkKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjA2NDc4MjMzIC0wNTAwCit0aGlzIGxpbmUgc2hvdWxkIG5vdCBiZSBoZXJlCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGV0ZWN0IGludmFsaWQgaGVhZGVyIGVudHJ5JyBcCisJJ15lcnJvcjogY2hhcjEyNDogdHJhaWxpbmcgZ2FyYmFnZSBpbiB0YWcgaGVhZGVyJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDI0LiBjcmVhdGUgdmFsaWQgdGFnCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjQ3ODIzMyAtMDUwMAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSB2YWxpZCB0YWcnIFwKKyAgICAnZ2l0IG1rdGFnIDx0YWcuc2lnID4uZ2l0L3JlZnMvdGFncy9teXRhZyAyPm1lc3NhZ2UnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAyNS4gY2hlY2sgbXl0YWcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIG15dGFnJyBcCisgICAgJ2dpdCB0YWcgLWwgfCBncmVwIG15dGFnJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwMC1pMThuLWNvbW1pdC5zaCBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzdkZGFiYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKQEAgLTAsMCArMSwxNzEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tbWl0IGFuZCBsb2cgb3V0cHV0IGVuY29kaW5ncycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbXBhcmVfd2l0aCAoKSB7CisJZ2l0IHNob3cgLXMgJDEgfCBzZWQgLWUgJzEsL14kL2QnIC1lICdzL14gICAgLy8nID5jdXJyZW50ICYmCisJY2FzZSAiJDMiIGluCisJJycpCisJCXRlc3RfY21wICIkMiIgY3VycmVudCA7OworCT8qKQorCQlpY29udiAtZiAiJDMiIC10IFVURi04ID5jdXJyZW50LnV0ZjggPGN1cnJlbnQgJiYKKwkJaWNvbnYgLWYgIiQzIiAtdCBVVEYtOCA+ZXhwZWN0LnV0ZjggPCIkMiIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LnV0ZjggY3VycmVudC51dGY4CisJCTs7CisJZXNhYworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk6ID5GICYmCisJZ2l0IGFkZCBGICYmCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCUM9JChnaXQgY29tbWl0LXRyZWUgJFQgPCIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0KSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgJEMgJiYKKwlnaXQgdGFnIEMwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGVuY29kaW5nIGhlYWRlciBmb3IgYmFzZSBjYXNlJyAnCisJRT0kKGdpdCBjYXQtZmlsZSBjb21taXQgQzAgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCXRlc3QgeiA9ICJ6JEUiCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ1VURi0xNiByZWZ1c2VkIGJlY2F1c2Ugb2YgTlVMcycgJworCWVjaG8gVVRGLTE2ID5GICYmCisJZ2l0IGNvbW1pdCAtYSAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC9VVEYtMTYudHh0CisnCisKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgJEggQzAgJiYKKwkJZWNobyAkSCA+RiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dAorCScKK2RvbmUKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrIGVuY29kaW5nIGhlYWRlciBmb3IgJEgiICcKKwkJRT0kKGdpdCBjYXQtZmlsZSBjb21taXQgJyRIJyB8IHNlZCAtbmUgInMvXmVuY29kaW5nIC8vcCIpICYmCisJCXRlc3QgInokRSIgPSAieickSCciCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgdG8gcmVtb3ZlIGN1c3RvbWl6YXRpb24nICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwlpZiBaPSQoZ2l0IGNvbmZpZyAtLWdldC1hbGwgaTE4bi5jb21taXRlbmNvZGluZykKKwl0aGVuCisJCWVjaG8gT29wcywgc2hvdWxkIGhhdmUgZmFpbGVkLgorCQlmYWxzZQorCWVsc2UKKwkJdGVzdCB6ID0gInokWiIKKwlmaSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJU084ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJworCWNvbXBhcmVfd2l0aCBJU084ODU5LTEgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKKycKKworZm9yIEggaW4gZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdyIgJworCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8yLVVURi04LnR4dAorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIHRvIGFkZCBjdXN0b21pemF0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJaWYgWj0kKGdpdCBjb25maWcgLS1nZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcpCisJdGhlbgorCQllY2hvIE9vcHMsIHNob3VsZCBoYXZlIGZhaWxlZC4KKwkJZmFsc2UKKwllbHNlCisJCXRlc3QgeiA9ICJ6JFoiCisJZmkKKycKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiBpdHNlbGYgbm93IiAnCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAnJEgnICYmCisJCWNvbXBhcmVfd2l0aCAnJEgnICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyckSCcudHh0CisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgdG8gdHdlYWsgY3VzdG9taXphdGlvbicgJworCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJU084ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJworCWNvbXBhcmVfd2l0aCBJU084ODU5LTEgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKKycKKworZm9yIEggaW4gZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdyIgJworCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8yLVVURi04LnR4dAorCScKK2RvbmUKKworZm9yIEogaW4gZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJaWYgdGVzdCAiJEoiID0gSVNPLTIwMjItSlAKKwl0aGVuCisJCUlDT05WPSRKCisJZWxzZQorCQlJQ09OVj0KKwlmaQorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyAkSgorCWZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2hvdWxkIGJlIHNob3duIGluICRKIG5vdyIgJworCQkJY29tcGFyZV93aXRoICckSCcgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJyRKJy50eHQgJElDT05WCisJCScKKwlkb25lCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJObyBjb252ZXJzaW9uIHdpdGggJEgiICcKKwkJY29tcGFyZV93aXRoICItLWVuY29kaW5nPW5vbmUgJyRIJyIgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJyRIJy50eHQKKwknCitkb25lCisKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfZmxhZ3MgKCkgeworCUg9JDEKKwlmbGFnPSQyCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0IC0tJGZsYWcgd2l0aCAkSCBlbmNvZGluZyIgJworCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJEggJiYKKwkJZ2l0IGNoZWNrb3V0IC1iICRILSRmbGFnIEMwICYmCisJCWVjaG8gJEggPj5GICYmCisJCWdpdCBjb21taXQgLWEgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJEgudHh0ICYmCisJCXRlc3RfdGljayAmJgorCQllY2hvIGludGVybWVkaWF0ZSBzdHVmZiA+PkcgJiYKKwkJZ2l0IGFkZCBHICYmCisJCWdpdCBjb21taXQgLWEgLW0gImludGVybWVkaWF0ZSBjb21taXQiICYmCisJCXRlc3RfdGljayAmJgorCQllY2hvICRIICRmbGFnID4+RiAmJgorCQlnaXQgY29tbWl0IC1hIC0tJGZsYWcgSEVBRH4xICYmCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0ICckSC0kZmxhZycgfAorCQkJc2VkIC1uZSAicy9eZW5jb2RpbmcgLy9wIikgJiYKKwkJdGVzdCAieiRFIiA9ICJ6JEgiICYmCisJCWdpdCBjb25maWcgLS11bnNldC1hbGwgaTE4bi5jb21taXRlbmNvZGluZyAmJgorCQlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwKKwknCit9CisKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfZmxhZ3MgZXVjSlAgZml4dXAKKwordGVzdF9jb21taXRfYXV0b3NxdWFzaF9mbGFncyBJU08tMjAyMi1KUCBzcXVhc2gKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAwLzEtVVRGLTgudHh0IGIvdC90MzkwMC8xLVVURi04LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTMxZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMC8xLVVURi04LnR4dApAQCAtMCwwICsxLDMgQEAKK8OEw4vDkcOPw5YKKworw4Fiw6dkw6hmZwpkaWZmIC0tZ2l0IGEvdC90MzkwMC8yLVVURi04LnR4dCBiL3QvdDM5MDAvMi1VVEYtOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNmNGY4ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDAvMi1VVEYtOC50eHQKQEAgLTAsMCArMSw0IEBACivjga/jgozjgbLjgbvjgbUKKwor44GX44Gm44GE44KL44Gu44GM44CB44GE44KL44Gu44Gn44CCCivmv7HmtZzjgbvjgozjgbfjgorjgb3jgozjgb7jgbPjgZDjgorjgo3jgbjjgIIKZGlmZiAtLWdpdCBhL3QvdDM5MDAvSVNPLTIwMjItSlAudHh0IGIvdC90MzkwMC9JU08tMjAyMi1KUC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiNTMzMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDAvSVNPLTIwMjItSlAudHh0CkBAIC0wLDAgKzEsNCBAQAorGyRCJE8kbCRSJFskVRsoQgorCisbJEIkNyRGJCQkayROJCwhIiQkJGskTiRHISMbKEIKKxskQl9ASU0kWyRsJFckaiRdJGwkXiRTJDAkaiRtJFghIxsoQgpkaWZmIC0tZ2l0IGEvdC90MzkwMC9JU084ODU5LTEudHh0IGIvdC90MzkwMC9JU084ODU5LTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYmVmMGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAwL0lTTzg4NTktMS50eHQKQEAgLTAsMCArMSwzIEBACivEy9HP1gorCivBYudk6GZnCmRpZmYgLS1naXQgYS90L3QzOTAwL2V1Y0pQLnR4dCBiL3QvdDM5MDAvZXVjSlAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NmYyYWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAwL2V1Y0pQLnR4dApAQCAtMCwwICsxLDQgQEAKK6TPpOyk0qTbpNUKKworpLekxqSkpOukzqSsoaKkpKTrpM6kx6GjCivfwMnNpNuk7KTXpOqk3aTspN6k06SwpOqk7aTYoaMKZGlmZiAtLWdpdCBhL3QvdDM5MDEtODg1OS0xLnR4dCBiL3QvdDM5MDEtODg1OS0xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOGMyMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMS04ODU5LTEudHh0CkBAIC0wLDAgKzEsNCBAQAorOiB0byBiZSBzb3VyY2VkIGluIHQzOTAxIC0tIHRoaXMgaXMgbGF0aW4tMQorR0lUX0FVVEhPUl9OQU1FPSLB6e0g8/oiICYmCitHSVRfQ09NTUlUVEVSX05BTUU9JEdJVF9BVVRIT1JfTkFNRSAmJgorZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQ09NTUlUVEVSX05BTUUKZGlmZiAtLWdpdCBhL3QvdDM5MDEtaTE4bi1wYXRjaC5zaCBiL3QvdDM5MDEtaTE4bi1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWE1NzcwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMS1pMThuLXBhdGNoLnNoCkBAIC0wLDAgKzEsMjU1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2kxOG4gc2V0dGluZ3MgYW5kIGZvcm1hdC1wYXRjaCB8IGFtIHBpcGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19lbmNvZGluZyAoKSB7CisJIyBNYWtlIHN1cmUgY2hhcmFjdGVycyBhcmUgbm90IGNvcnJ1cHRlZAorCWNudD0iJDEiIGhlYWRlcj0iJDIiIGk9MSBqPTAgYmFkPTAKKwl3aGlsZSB0ZXN0ICIkaSIgLWxlICRjbnQKKwlkbworCQlnaXQgZm9ybWF0LXBhdGNoIC0tZW5jb2Rpbmc9VVRGLTggLS1zdGRvdXQgSEVBRH4kaS4uSEVBRH4kaiB8CisJCWdyZXAgIl5Gcm9tOiA9P1VURi04P3E/PUMzPTgxPUMzPUE5PUMzPUFEPTIwPUMzPUIzPUMzPUJBPz0iICYmCisJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRH4kaiB8CisJCWNhc2UgIiRoZWFkZXIiIGluCisJCTg4NTkpCisJCQlncmVwICJeZW5jb2RpbmcgSVNPODg1OS0xIiA7OworCQkqKQorCQkJZ3JlcCAiXmVuY29kaW5nIElTTzg4NTktMSI7IHRlc3QgIiQ/IiAhPSAwIDs7CisJCWVzYWMgfHwgeworCQkJYmFkPTEKKwkJCWJyZWFrCisJCX0KKwkJaj0kaQorCQlpPSQoKCRpKzEpKQorCWRvbmUKKwkoZXhpdCAkYmFkKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKworCSMgdXNlIFVURi04IGluIGF1dGhvciBhbmQgY29tbWl0dGVyIG5hbWUgdG8gbWF0Y2ggdGhlCisJIyBpMThuLmNvbW1pdGVuY29kaW5nIHNldHRpbmdzCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS11dGY4LnR4dCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyAiJEdJVF9BVVRIT1JfTkFNRSIgPm1pbmUgJiYKKwlnaXQgYWRkIG1pbmUgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gSGVsbG8gd29ybGQgPm1pbmUgJiYKKwlnaXQgYWRkIG1pbmUgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJTZWNvbmQgb24gbWFpbiIgJiYKKworCSMgdGhlIGZpcnN0IGNvbW1pdCBvbiB0aGUgc2lkZSBicmFuY2ggaXMgVVRGLTgKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBtYXN0ZXJeICYmCisJZWNobyBBbm90aGVyIGZpbGUgPnlvdXJzICYmCisJZ2l0IGFkZCB5b3VycyAmJgorCWdpdCBjb21taXQgLXMgLW0gIlNlY29uZCBvbiBzaWRlIiAmJgorCisJIyB0aGUgc2Vjb25kIG9uZSBvbiB0aGUgc2lkZSBicmFuY2ggaXMgSVNPLTg4NTktMQorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkjIHVzZSBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lIGluIElTTy04ODU5LTEgdG8gbWF0Y2ggaXQuCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCisJdGVzdF90aWNrICYmCisJZWNobyBZZXQgYW5vdGhlciA+dGhlaXJzICYmCisJZ2l0IGFkZCB0aGVpcnMgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJUaGlyZCBvbiBzaWRlIiAmJgorCisJIyBCYWNrIHRvIGRlZmF1bHQKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIG91dHB1dCAoSVNPLTg4NTktMSknICcKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uSEVBRF4gPm91dC1sMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPm91dC1sMiAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPODg1OS0xIiBvdXQtbDEgJiYKKwlncmVwICJeRnJvbTogPT9JU084ODU5LTE/cT89QzE9RTk9RUQ9MjA9RjM9RkE/PSIgb3V0LWwxICYmCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTEiIG91dC1sMiAmJgorCWdyZXAgIl5Gcm9tOiA9P0lTTzg4NTktMT9xPz1DMT1FOT1FRD0yMD1GMz1GQT89IiBvdXQtbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIG91dHB1dCAoVVRGLTgpJyAnCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uSEVBRF4gPm91dC11MSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPm91dC11MiAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiIG91dC11MSAmJgorCWdyZXAgIl5Gcm9tOiA9P1VURi04P3E/PUMzPTgxPUMzPUE5PUMzPUFEPTIwPUMzPUIzPUMzPUJBPz0iIG91dC11MSAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiIG91dC11MiAmJgorCWdyZXAgIl5Gcm9tOiA9P1VURi04P3E/PUMzPTgxPUMzPUE5PUMzPUFEPTIwPUMzPUIzPUMzPUJBPz0iIG91dC11MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKFUvVSknICcKKwkjIFdlIHdhbnQgdGhlIHJlc3VsdCBvZiByZWJhc2UgaW4gVVRGLTgKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKworCSMgVGhlIHRlc3QgaXMgYWJvdXQgbG9nb3V0cHV0ZW5jb2Rpbmcgbm90IGFmZmVjdGluZyB0aGUKKwkjIGZpbmFsIG91dGNvbWUgLS0gaXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGdlbmVyYXRlIHRoZQorCSMgcGF0Y2ggYW5kIHRoZSBsb2cuCisKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKworCSMgVGhlIHJlc3VsdCB3aWxsIGJlIGNvbW1pdHRlZCBieSBHSVRfQ09NTUlUVEVSX05BTUUgLS0KKwkjIHdlIHdhbnQgVVRGLTggZW5jb2RlZCBuYW1lLgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtdXRmOC50eHQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisKKwljaGVja19lbmNvZGluZyAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAoVS9MKScgJworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKEwvTCknICcKKwkjIEluIHRoaXMgdGVzdCB3ZSB3YW50IElTTy04ODU5LTEgZW5jb2RlZCBjb21taXRzIGFzIHRoZSByZXN1bHQKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIgODg1OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKEwvVSknICcKKwkjIFRoaXMgaXMgcGF0aG9sb2dpY2FsIC0tIHVzZSBVVEYtOCBhcyBpbnRlcm1lZGlhdGUgZm9ybQorCSMgdG8gZ2V0IElTTy04ODU5LTEgcmVzdWx0cy4KKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMiA4ODU5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrKFUvVSknICcKKwkjIEJvdGggdGhlIGNvbW1pdGVuY29kaW5nIGFuZCBsb2dvdXRwdXRlbmNvZGluZyBpcyBzZXQgdG8gVVRGLTguCisKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayBzaWRlXiAmJgorCWdpdCBjaGVycnktcGljayBzaWRlICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisKKwljaGVja19lbmNvZGluZyAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrKEwvTCknICcKKwkjIEJvdGggdGhlIGNvbW1pdGVuY29kaW5nIGFuZCBsb2dvdXRwdXRlbmNvZGluZyBpcyBzZXQgdG8gSVNPLTg4NTktMQorCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIHNpZGVeICYmCisJZ2l0IGNoZXJyeS1waWNrIHNpZGUgJiYKKwlnaXQgcmV2ZXJ0IEhFQUQgJiYKKworCWNoZWNrX2VuY29kaW5nIDMgODg1OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayhVL0wpJyAnCisJIyBDb21taXRlbmNvZGluZyBpcyBzZXQgdG8gVVRGLTggYnV0IGxvZ291dHB1dGVuY29kaW5nIGlzIElTTy04ODU5LTEKKworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayBzaWRlXiAmJgorCWdpdCBjaGVycnktcGljayBzaWRlICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisKKwljaGVja19lbmNvZGluZyAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrKEwvVSknICcKKwkjIEFnYWluLCB0aGUgY29tbWl0ZW5jb2RpbmcgaXMgc2V0IHRvIElTTy04ODU5LTEgYnV0CisJIyBsb2dvdXRwdXRlbmNvZGluZyBpcyBzZXQgdG8gVVRGLTguCisKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayBzaWRlXiAmJgorCWdpdCBjaGVycnktcGljayBzaWRlICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisKKwljaGVja19lbmNvZGluZyAzIDg4NTkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgKFUvVSknICcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgbWFzdGVyICYmCisKKwljaGVja19lbmNvZGluZyAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIChVL0wpJyAnCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtdXRmOC50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSBtYXN0ZXIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgKEwvTCknICcKKwkjIEluIHRoaXMgdGVzdCB3ZSB3YW50IElTTy04ODU5LTEgZW5jb2RlZCBjb21taXRzIGFzIHRoZSByZXN1bHQKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMiA4ODU5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIChML1UpJyAnCisJIyBUaGlzIGlzIHBhdGhvbG9naWNhbCAtLSB1c2UgVVRGLTggYXMgaW50ZXJtZWRpYXRlIGZvcm0KKwkjIHRvIGdldCBJU08tODg1OS0xIHJlc3VsdHMuCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMiA4ODU5CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwMS11dGY4LnR4dCBiL3QvdDM5MDEtdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWY1MjA1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDEtdXRmOC50eHQKQEAgLTAsMCArMSw0IEBACis6IHRvIGJlIHNvdXJjZWQgaW4gdDM5MDEgLS0gdGhpcyBpcyB1dGY4CitHSVRfQVVUSE9SX05BTUU9IsOBw6nDrSDDs8O6IiAmJgorR0lUX0NPTU1JVFRFUl9OQU1FPSRHSVRfQVVUSE9SX05BTUUgJiYKK2V4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0NPTU1JVFRFUl9OQU1FCmRpZmYgLS1naXQgYS90L3QzOTAyLXF1b3RlZC5zaCBiL3QvdDM5MDItcXVvdGVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5MmY1NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAyLXF1b3RlZC5zaApAQCAtMCwwICsxLDE1MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdxdW90ZWQgb3V0cHV0JworCisuIC4vdGVzdC1saWIuc2gKKworRk49J+a/semHjicKK0dOPSfntJQnCitIVD0nCScKK0RRPSciJworCitlY2hvIGZvbyAyPi9kZXYvbnVsbCA+ICJOYW1lIGFuZCBhbiR7SFR9SFQiCitpZiAhIHRlc3QgLWYgIk5hbWUgYW5kIGFuJHtIVH1IVCIKK3RoZW4KKwkjIEZBVC9OVEZTIGRvZXMgbm90IGFsbG93IHRhYnMgaW4gZmlsZW5hbWVzCisJc2tpcF9hbGw9J1lvdXIgZmlsZXN5c3RlbSBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcycKKwl0ZXN0X2RvbmUKK2ZpCisKK2Zvcl9lYWNoX25hbWUgKCkgeworCWZvciBuYW1lIGluIFwKKwkgICAgTmFtZSAiTmFtZSBhbmQgYSR7TEZ9TEYiICJOYW1lIGFuZCBhbiR7SFR9SFQiICJOYW1lJHtEUX0iIFwKKwkgICAgIiRGTiRIVCRHTiIgIiRGTiRMRiRHTiIgIiRGTiAkR04iICIkRk4kR04iICIkRk4kRFEkR04iIFwKKwkgICAgIldpdGggU1AgaW4gaXQiICIkRk4vZmlsZSIKKwlkbworCQlldmFsICIkMSIKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlta2RpciAiJEZOIiAmJgorCWZvcl9lYWNoX25hbWUgImVjaG8gaW5pdGlhbCA+XCJcJG5hbWVcIiIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1xIC1tIEluaXRpYWwgJiYKKworCWZvcl9lYWNoX25hbWUgImVjaG8gc2Vjb25kID5cIlwkbmFtZVwiIiAmJgorCWdpdCBjb21taXQgLWEgLW0gU2Vjb25kICYmCisKKwlmb3JfZWFjaF9uYW1lICJlY2hvIG1vZGlmaWVkID5cIlwkbmFtZVwiIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdGVkIGZpbGVzJyAnCitjYXQgPmV4cGVjdC5xdW90ZWQgPDxcRU9GICYmCitOYW1lCisiTmFtZSBhbmQgYVxuTEYiCisiTmFtZSBhbmQgYW5cdEhUIgorIk5hbWVcIiIKK1dpdGggU1AgaW4gaXQKKyJcMzQ2XDI3N1wyNjFcMzUxXDIwN1wyMTZcdFwzNDdcMjY0XDIyNCIKKyJcMzQ2XDI3N1wyNjFcMzUxXDIwN1wyMTZcblwzNDdcMjY0XDIyNCIKKyJcMzQ2XDI3N1wyNjFcMzUxXDIwN1wyMTYgXDM0N1wyNjRcMjI0IgorIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNlwiXDM0N1wyNjRcMjI0IgorIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNi9maWxlIgorIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNlwzNDdcMjY0XDIyNCIKK0VPRgorCitjYXQgPmV4cGVjdC5yYXcgPDxcRU9GCitOYW1lCisiTmFtZSBhbmQgYVxuTEYiCisiTmFtZSBhbmQgYW5cdEhUIgorIk5hbWVcIiIKK1dpdGggU1AgaW4gaXQKKyLmv7Hph45cdOe0lCIKKyLmv7Hph45cbue0lCIKK+a/semHjiDntJQKKyLmv7Hph45cIue0lCIKK+a/semHji9maWxlCivmv7Hph47ntJQKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gbHMtZmlsZXMnICcKKworCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJiB0ZXN0X2NtcCBleHBlY3QucXVvdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gZGlmZi1maWxlcycgJworCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucXVvdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gZGlmZi1pbmRleCcgJworCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgSEVBRCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5xdW90ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBkaWZmLXRyZWUnICcKKworCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUReIEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucXVvdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gbHMtdHJlZScgJworCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgLXIgSEVBRCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5xdW90ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgY29yZS5xdW90ZXBhdGgnICcKKworCWdpdCBjb25maWcgLS1ib29sIGNvcmUucXVvdGVwYXRoIGZhbHNlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGxzLWZpbGVzJyAnCisKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYgdGVzdF9jbXAgZXhwZWN0LnJhdyBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGRpZmYtZmlsZXMnICcKKworCWdpdCBkaWZmIC0tbmFtZS1vbmx5ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LnJhdyBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGRpZmYtaW5kZXgnICcKKworCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmF3IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gZGlmZi10cmVlJyAnCisKKwlnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEXiBIRUFEID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LnJhdyBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGxzLXRyZWUnICcKKworCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IC1yIEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmF3IGN1cnJlbnQKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDMtc3Rhc2guc2ggYi90L3QzOTAzLXN0YXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkZmJkYTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAzLXN0YXNoLnNoCkBAIC0wLDAgKzEsNjQwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBzdGFzaCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNvbWUgZGlydHkgd29ya2luZyBkaXJlY3RvcnknICcKKwllY2hvIDEgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyAyID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gMyA+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFECisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggMGNmYmYwOC4uMDA3NTBlZCAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xICsxIEBACistMgorKzMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJlbnRzIG9mIHN0YXNoJyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2Ugc3Rhc2heKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBkaWZmIHN0YXNoXjIuLnN0YXNoID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseWluZyBib2d1cyBzdGFzaCBkb2VzIG5vdGhpbmcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYXBwbHkgc3Rhc2hAezF9ICYmCisJZWNobyAxID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBkb2VzIG5vdCBuZWVkIGNsZWFuIHdvcmtpbmcgZGlyZWN0b3J5JyAnCisJZWNobyA0ID5vdGhlci1maWxlICYmCisJZ2l0IGFkZCBvdGhlci1maWxlICYmCisJZWNobyA1ID5vdGhlci1maWxlICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJZWNobyAzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBkb2VzIG5vdCBjbG9iYmVyIHdvcmtpbmcgZGlyZWN0b3J5IGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA0ID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5ICYmCisJZWNobyA0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBzdGFzaGVkIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA1ID5vdGhlci1maWxlICYmCisJZ2l0IGFkZCBvdGhlci1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBvdGhlci1maWxlICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCAzID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IDpmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBzdGFzaGVkIGNoYW5nZXMgKGluY2x1ZGluZyBpbmRleCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZWNobyA2ID4gb3RoZXItZmlsZSAmJgorCWdpdCBhZGQgb3RoZXItZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gb3RoZXItZmlsZSAmJgorCWdpdCBzdGFzaCBhcHBseSAtLWluZGV4ICYmCisJdGVzdCAzID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IDIgPSAkKGdpdCBzaG93IDpmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnN0YXNoaW5nIGluIGEgc3ViZGlyZWN0b3J5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJbWtkaXIgc3ViZGlyICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHN0YXNoIGFwcGx5CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcm9wIHRvcCBzdGFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggbGlzdCA+IHN0YXNobGlzdDEgJiYKKwllY2hvIDcgPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGRyb3AgJiYKKwlnaXQgc3Rhc2ggbGlzdCA+IHN0YXNobGlzdDIgJiYKKwl0ZXN0X2NtcCBzdGFzaGxpc3QxIHN0YXNobGlzdDIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IDMgPSAkKGNhdCBmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgOmZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyBIRUFEOmZpbGUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AgbWlkZGxlIHN0YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gOCA+IGZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwllY2hvIDkgPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGRyb3Agc3Rhc2hAezF9ICYmCisJdGVzdCAyID0gJChnaXQgc3Rhc2ggbGlzdCB8IHdjIC1sKSAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgOSA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGRyb3AgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IDMgPSAkKGNhdCBmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgOmZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyBIRUFEOmZpbGUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHBvcCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdCAzID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IDpmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlKSAmJgorCXRlc3QgMCA9ICQoZ2l0IHN0YXNoIGxpc3QgfCB3YyAtbCkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xZmU5MTJjCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSBAQAorK2JhcjIKK0VPRgorCitjYXQgPiBleHBlY3QxIDw8IEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCitpbmRleCAyNTdjYzU2Li41NzE2Y2E1IDEwMDY0NAorLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEgKzEgQEAKKy1mb28KKytiYXIKK0VPRgorCitjYXQgPiBleHBlY3QyIDw8IEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCitpbmRleCA3NjAxODA3Li41NzE2Y2E1IDEwMDY0NAorLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEgKzEgQEAKKy1iYXoKKytiYXIKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMWZlOTEyYworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEgQEAKKytiYXIyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggYnJhbmNoJyAnCisJZWNobyBmb28gPiBmaWxlICYmCisJZ2l0IGNvbW1pdCBmaWxlIC1tIGZpcnN0ICYmCisJZWNobyBiYXIgPiBmaWxlICYmCisJZWNobyBiYXIyID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IHN0YXNoICYmCisJZWNobyBiYXogPiBmaWxlICYmCisJZ2l0IGNvbW1pdCBmaWxlIC1tIHNlY29uZCAmJgorCWdpdCBzdGFzaCBicmFuY2ggc3Rhc2hicmFuY2ggJiYKKwl0ZXN0IHJlZnMvaGVhZHMvc3Rhc2hicmFuY2ggPSAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeKSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdCAmJgorCWdpdCBkaWZmID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdDEgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGFsdGVybmF0ZVwgc2Vjb25kICYmCisJZ2l0IGRpZmYgbWFzdGVyLi5zdGFzaGJyYW5jaCA+IG91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCBleHBlY3QyICYmCisJdGVzdCAwID0gJChnaXQgc3Rhc2ggbGlzdCB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtcSBpcyBxdWlldCcgJworCWVjaG8gZm9vID4gZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBhcHBseSAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3QgISAtcyBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhdmUgLXEgaXMgcXVpZXQnICcKKwlnaXQgc3Rhc2ggc2F2ZSAtLXF1aWV0ID4gb3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdCAhIC1zIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wIC1xIGlzIHF1aWV0JyAnCisJZ2l0IHN0YXNoIHBvcCAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3QgISAtcyBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BvcCAtcSAtLWluZGV4IHdvcmtzIGFuZCBpcyBxdWlldCcgJworCWVjaG8gZm9vID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlIC0tcXVpZXQgJiYKKwlnaXQgc3Rhc2ggcG9wIC1xIC0taW5kZXggPiBvdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0IGZvbyA9ICIkKGdpdCBzaG93IDpmaWxlKSIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcm9wIC1xIGlzIHF1aWV0JyAnCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGRyb3AgLXEgPiBvdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtaycgJworCWVjaG8gYmFyMyA+IGZpbGUgJiYKKwllY2hvIGJhcjQgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgc3Rhc2ggLWsgJiYKKwl0ZXN0IGJhcixiYXI0ID0gJChjYXQgZmlsZSksJChjYXQgZmlsZTIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC0tbm8ta2VlcC1pbmRleCcgJworCWVjaG8gYmFyMzMgPiBmaWxlICYmCisJZWNobyBiYXI0NCA+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBzdGFzaCAtLW5vLWtlZXAtaW5kZXggJiYKKwl0ZXN0IGJhcixiYXIyID0gJChjYXQgZmlsZSksJChjYXQgZmlsZTIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC0taW52YWxpZC1vcHRpb24nICcKKwllY2hvIGJhcjUgPiBmaWxlICYmCisJZWNobyBiYXI2ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIC0taW52YWxpZC1vcHRpb24gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggc2F2ZSAtLWludmFsaWQtb3B0aW9uICYmCisJdGVzdCBiYXI1LGJhcjYgPSAkKGNhdCBmaWxlKSwkKGNhdCBmaWxlMikgJiYKKwlnaXQgc3Rhc2ggLS0gLW1lc3NhZ2Utc3RhcnRpbmctd2l0aC1kYXNoICYmCisJdGVzdCBiYXIsYmFyMiA9ICQoY2F0IGZpbGUpLCQoY2F0IGZpbGUyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBhbiBhZGRlZCBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gbmV3ID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAiYWRkZWQgZmlsZSIgJiYKKwkhIHRlc3QgLXIgZmlsZTMgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IG5ldyA9ICIkKGNhdCBmaWxlMykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHJtIHRoZW4gcmVjcmVhdGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHJtIGZpbGUgJiYKKwllY2hvIGJhcjcgPmZpbGUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAicm0gdGhlbiByZWNyZWF0ZSIgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IGJhcjcgPSAiJChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHJtIGFuZCBpZ25vcmUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHJtIGZpbGUgJiYKKwllY2hvIGZpbGUgPi5naXRpZ25vcmUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAicm0gYW5kIGlnbm9yZSIgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwl0ZXN0IGZpbGUgPSAiJChjYXQgLmdpdGlnbm9yZSkiICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJISB0ZXN0IC1yIGZpbGUgJiYKKwl0ZXN0IGZpbGUgPSAiJChjYXQgLmdpdGlnbm9yZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHJtIGFuZCBpZ25vcmUgKHN0YWdlIC5naXRpZ25vcmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBybSBmaWxlICYmCisJZWNobyBmaWxlID4uZ2l0aWdub3JlICYmCisJZ2l0IGFkZCAuZ2l0aWdub3JlICYmCisJZ2l0IHN0YXNoIHNhdmUgInJtIGFuZCBpZ25vcmUgKHN0YWdlIC5naXRpZ25vcmUpIiAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCSEgdGVzdCAtciAuZ2l0aWdub3JlICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJISB0ZXN0IC1yIGZpbGUgJiYKKwl0ZXN0IGZpbGUgPSAiJChjYXQgLmdpdGlnbm9yZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N0YXNoIGZpbGUgdG8gc3ltbGluaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSBmaWxlICYmCisJbG4gLXMgZmlsZTIgZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlICJmaWxlIHRvIHN5bWxpbmsiICYmCisJdGVzdCAtZiBmaWxlICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJY2FzZSAiJChscyAtbCBmaWxlKSIgaW4gKiIgZmlsZSAtPiBmaWxlMiIpIDo7OyAqKSBmYWxzZTs7IGVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3Rhc2ggZmlsZSB0byBzeW1saW5rIChzdGFnZSBybSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHJtIGZpbGUgJiYKKwlsbiAtcyBmaWxlMiBmaWxlICYmCisJZ2l0IHN0YXNoIHNhdmUgImZpbGUgdG8gc3ltbGluayAoc3RhZ2Ugcm0pIiAmJgorCXRlc3QgLWYgZmlsZSAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCWNhc2UgIiQobHMgLWwgZmlsZSkiIGluICoiIGZpbGUgLT4gZmlsZTIiKSA6OzsgKikgZmFsc2U7OyBlc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N0YXNoIGZpbGUgdG8gc3ltbGluayAoZnVsbCBzdGFnZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gZmlsZSAmJgorCWxuIC1zIGZpbGUyIGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAiZmlsZSB0byBzeW1saW5rIChmdWxsIHN0YWdlKSIgJiYKKwl0ZXN0IC1mIGZpbGUgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwljYXNlICIkKGxzIC1sIGZpbGUpIiBpbiAqIiBmaWxlIC0+IGZpbGUyIikgOjs7ICopIGZhbHNlOzsgZXNhYworJworCisjIFRoaXMgdGVzdCBjcmVhdGVzIGEgY29tbWl0IHdpdGggYSBzeW1saW5rIHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcgdGVzdHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3Rhc2ggc3ltbGluayB0byBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWxuIC1zIGZpbGUgZmlsZWxpbmsgJiYKKwlnaXQgYWRkIGZpbGVsaW5rICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIHN5bWxpbmsiICYmCisJcm0gZmlsZWxpbmsgJiYKKwljcCBmaWxlIGZpbGVsaW5rICYmCisJZ2l0IHN0YXNoIHNhdmUgInN5bWxpbmsgdG8gZmlsZSIgJiYKKwl0ZXN0IC1oIGZpbGVsaW5rICYmCisJY2FzZSAiJChscyAtbCBmaWxlbGluaykiIGluICoiIGZpbGVsaW5rIC0+IGZpbGUiKSA6OzsgKikgZmFsc2U7OyBlc2FjICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJISB0ZXN0IC1oIGZpbGVsaW5rICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N0YXNoIHN5bWxpbmsgdG8gZmlsZSAoc3RhZ2Ugcm0pJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBybSBmaWxlbGluayAmJgorCWNwIGZpbGUgZmlsZWxpbmsgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAic3ltbGluayB0byBmaWxlIChzdGFnZSBybSkiICYmCisJdGVzdCAtaCBmaWxlbGluayAmJgorCWNhc2UgIiQobHMgLWwgZmlsZWxpbmspIiBpbiAqIiBmaWxlbGluayAtPiBmaWxlIikgOjs7ICopIGZhbHNlOzsgZXNhYyAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCSEgdGVzdCAtaCBmaWxlbGluayAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzdGFzaCBzeW1saW5rIHRvIGZpbGUgKGZ1bGwgc3RhZ2UpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGZpbGVsaW5rICYmCisJY3AgZmlsZSBmaWxlbGluayAmJgorCWdpdCBhZGQgZmlsZWxpbmsgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAic3ltbGluayB0byBmaWxlIChmdWxsIHN0YWdlKSIgJiYKKwl0ZXN0IC1oIGZpbGVsaW5rICYmCisJY2FzZSAiJChscyAtbCBmaWxlbGluaykiIGluICoiIGZpbGVsaW5rIC0+IGZpbGUiKSA6OzsgKikgZmFsc2U7OyBlc2FjICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJISB0ZXN0IC1oIGZpbGVsaW5rICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3N0YXNoIGRpcmVjdG9yeSB0byBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCW1rZGlyIGRpciAmJgorCWVjaG8gZm9vID5kaXIvZmlsZSAmJgorCWdpdCBhZGQgZGlyL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgZmlsZSBpbiBkaXIiICYmCisJcm0gLWZyIGRpciAmJgorCWVjaG8gYmFyID5kaXIgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAiZGlyZWN0b3J5IHRvIGZpbGUiICYmCisJdGVzdCAtZCBkaXIgJiYKKwl0ZXN0IGZvbyA9ICIkKGNhdCBkaXIvZmlsZSkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZGlyKSIgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3N0YXNoIGZpbGUgdG8gZGlyZWN0b3J5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGZpbGUgJiYKKwlta2RpciBmaWxlICYmCisJZWNobyBmb28gPmZpbGUvZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlICJmaWxlIHRvIGRpcmVjdG9yeSIgJiYKKwl0ZXN0IC1mIGZpbGUgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IC1mIGZpbGUvZmlsZSAmJgorCXRlc3QgZm9vID0gIiQoY2F0IGZpbGUvZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGJyYW5jaCAtIG5vIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj4gZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGJyYW5jaCBzdGFzaC1icmFuY2ggJHtTVEFTSF9JRH0gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyICYmIGdpdCBicmFuY2ggLUQgc3Rhc2gtYnJhbmNoIiAmJgorCXRlc3QgJChnaXQgbHMtZmlsZXMgLS1tb2RpZmllZCB8IHdjIC1sKSAtZXEgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBicmFuY2ggLSBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+IGZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCWVjaG8gYmFyID4+IGZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBicmFuY2ggc3Rhc2gtYnJhbmNoICR7U1RBU0hfSUR9ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiBnaXQgYnJhbmNoIC1EIHN0YXNoLWJyYW5jaCIgJiYKKwl0ZXN0ICQoZ2l0IGxzLWZpbGVzIC0tbW9kaWZpZWQgfCB3YyAtbCkgLWVxIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2hvdyBmb3JtYXQgZGVmYXVsdHMgdG8gLS1zdGF0JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+IGZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCWVjaG8gYmFyID4+IGZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJIGZpbGUgfCAxICsKKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJRU9GCisJZ2l0IHN0YXNoIHNob3cgJHtTVEFTSF9JRH0gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2hvdyAtIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj4gZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN0YXNoIGRyb3AiICYmCisJZWNobyBiYXIgPj4gZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAiMQkwCWZpbGUiID5leHBlY3RlZCAmJgorCWdpdCBzdGFzaCBzaG93IC0tbnVtc3RhdCAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNob3cgLXAgLSBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+IGZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCWVjaG8gYmFyID4+IGZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCisJaW5kZXggNzYwMTgwNy4uOTM1ZmJkMyAxMDA2NDQKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xICsxLDIgQEAKKwkgYmF6CisJK2JhcgorCUVPRgorCWdpdCBzdGFzaCBzaG93IC1wICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2hvdyAtIG5vIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj4gZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAiMQkwCWZpbGUiID5leHBlY3RlZCAmJgorCWdpdCBzdGFzaCBzaG93IC0tbnVtc3RhdCAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNob3cgLXAgLSBubyBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+IGZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCisJaW5kZXggNzYwMTgwNy4uNzFiNTJjNCAxMDA2NDQKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xICsxLDIgQEAKKwkgYmF6CisJK2ZvbworCUVPRgorCWdpdCBzdGFzaCBzaG93IC1wICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggZHJvcCAtIGZhaWwgZWFybHkgaWYgc3BlY2lmaWVkIHN0YXNoIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZScgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmIGdpdCBzdGFzaCBjbGVhciIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJZWNobyBiYXIgPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3AgJChnaXQgcmV2LXBhcnNlIHN0YXNoQHswfSkgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHBvcCAtIGZhaWwgZWFybHkgaWYgc3BlY2lmaWVkIHN0YXNoIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZScgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmIGdpdCBzdGFzaCBjbGVhciIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJZWNobyBiYXIgPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHBvcCAkKGdpdCByZXYtcGFyc2Ugc3Rhc2hAezB9KSAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmIHdpdGggbm9uLWV4aXN0ZW50IHJlZmxvZycgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWVjaG8gYmFyNSA+IGZpbGUgJiYKKwllY2hvIGJhcjYgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgZG9lcy1ub3QtZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcCBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBkcm9wIGRvZXMtbm90LWV4aXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBwb3AgZG9lcy1ub3QtZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggcG9wIGRvZXMtbm90LWV4aXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSBkb2VzLW5vdC1leGlzdEB7MH0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggc2hvdyBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzaG93IGRvZXMtbm90LWV4aXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBicmFuY2ggdG1wIGRvZXMtbm90LWV4aXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCB0bXAgZG9lcy1ub3QtZXhpc3RAezB9ICYmCisJZ2l0IHN0YXNoIGRyb3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCByZWYgb2YgdGhlIGZvcm0gc3Rhc2hAe259LCBuID49IE4nICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcCBzdGFzaEB7MH0gJiYKKwllY2hvIGJhcjUgPiBmaWxlICYmCisJZWNobyBiYXI2ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3Agc3Rhc2hAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHBvcCBzdGFzaEB7MX0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYXBwbHkgc3Rhc2hAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHNob3cgc3Rhc2hAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCB0bXAgc3Rhc2hAezF9ICYmCisJZ2l0IHN0YXNoIGRyb3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggYnJhbmNoIHNob3VsZCBub3QgZHJvcCB0aGUgc3Rhc2ggaWYgdGhlIGJyYW5jaCBleGlzdHMnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwllY2hvIGZvbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gYmFyID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCBtYXN0ZXIgc3Rhc2hAezB9ICYmCisJZ2l0IHJldi1wYXJzZSBzdGFzaEB7MH0gLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggYXBwbHkgc2hvd3Mgc3RhdHVzIHNhbWUgYXMgZ2l0IHN0YXR1cyAocmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3RvcnkpJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZWNobyAxID5zdWJkaXIvc3ViZmlsZTEgJiYKKwllY2hvIDIgPnN1YmRpci9zdWJmaWxlMiAmJgorCWdpdCBhZGQgc3ViZGlyL3N1YmZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSBzdWJkaXIgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQllY2hvIHggPnN1YmZpbGUxICYmCisJCWVjaG8geCA+Li4vZmlsZSAmJgorCQlnaXQgc3RhdHVzID4uLi9leHBlY3QgJiYKKwkJZ2l0IHN0YXNoICYmCisJCXNhbmVfdW5zZXQgR0lUX01FUkdFX1ZFUkJPU0lUWSAmJgorCQlnaXQgc3Rhc2ggYXBwbHkKKwkpIHwKKwlzZWQgLWUgMSwyZCA+YWN0dWFsICYmICMgZHJvcCAiU2F2ZWQuLi4iIGFuZCAiSEVBRCBpcyBub3cuLi4iCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorZGlmZiAtLWdpdCBhL0hFQUQgYi9IRUFECituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZmUwY2JlZQorLS0tIC9kZXYvbnVsbAorKysrIGIvSEVBRAorQEAgLTAsMCArMSBAQAorK2ZpbGUtbm90LWEtcmVmCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggd2hlcmUgd29ya2luZyBkaXJlY3RvcnkgY29udGFpbnMgIkhFQUQiIGZpbGUnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmaWxlLW5vdC1hLXJlZiA+IEhFQUQgJiYKKwlnaXQgYWRkIEhFQUQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHN0YXNoXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwlnaXQgZGlmZiBzdGFzaF4uLnN0YXNoID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDQtc3Rhc2gtcGF0Y2guc2ggYi90L3QzOTA0LXN0YXNoLXBhdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcwNjU1YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTA0LXN0YXNoLXBhdGNoLnNoCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlY2tvdXQgLS1wYXRjaCcKKy4gLi9saWItcGF0Y2gtbW9kZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwJyAnCisJbWtkaXIgZGlyICYmCisJZWNobyBwYXJlbnQgPiBkaXIvZm9vICYmCisJZWNobyBkdW1teSA+IGJhciAmJgorCWVjaG8gY29tbWl0dGVkID4gSEVBRCAmJgorCWdpdCBhZGQgYmFyIGRpci9mb28gSEVBRCAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBkaXIvZm9vIGhlYWQgJiYKKwllY2hvIGluZGV4ID4gZGlyL2ZvbyAmJgorCWdpdCBhZGQgZGlyL2ZvbyAmJgorCXNldF9hbmRfc2F2ZV9zdGF0ZSBiYXIgYmFyX3dvcmsgYmFyX2luZGV4ICYmCisJc2F2ZV9oZWFkCisnCisKKyMgbm90ZTogb3JkZXIgb2YgZmlsZXMgd2l0aCB1bnN0YWdlZCBjaGFuZ2VzOiBIRUFEIGJhciBkaXIvZm9vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2F5aW5nICJuIiBkb2VzIG5vdGhpbmcnICcKKwlzZXRfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIEhFQURmaWxlX2luZGV4ICYmCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCShlY2hvIG47IGVjaG8gbjsgZWNobyBuKSB8IHRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzYXZlIC1wICYmCisJdmVyaWZ5X3N0YXRlIEhFQUQgSEVBRGZpbGVfd29yayBIRUFEZmlsZV9pbmRleCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHN0YXNoIC1wJyAnCisJKGVjaG8geTsgZWNobyBuOyBlY2hvIHkpIHwgZ2l0IHN0YXNoIHNhdmUgLXAgJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBjb21taXR0ZWQgSEVBRGZpbGVfaW5kZXggJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBpbmRleCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIGNvbW1pdHRlZCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgZHVtbXkgZHVtbXkgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgc3Rhc2ggLXAgLS1uby1rZWVwLWluZGV4JyAnCisJc2V0X3N0YXRlIEhFQUQgSEVBRGZpbGVfd29yayBIRUFEZmlsZV9pbmRleCAmJgorCXNldF9zdGF0ZSBiYXIgYmFyX3dvcmsgYmFyX2luZGV4ICYmCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCShlY2hvIHk7IGVjaG8gbjsgZWNobyB5KSB8IGdpdCBzdGFzaCBzYXZlIC1wIC0tbm8ta2VlcC1pbmRleCAmJgorCXZlcmlmeV9zdGF0ZSBIRUFEIGNvbW1pdHRlZCBjb21taXR0ZWQgJiYKKwl2ZXJpZnlfc3RhdGUgYmFyIGJhcl93b3JrIGR1bW15ICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBhcHBseSAtLWluZGV4ICYmCisJdmVyaWZ5X3N0YXRlIEhFQUQgSEVBRGZpbGVfd29yayBIRUFEZmlsZV9pbmRleCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgZHVtbXkgYmFyX2luZGV4ICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBpbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCBzdGFzaCAtLW5vLWtlZXAtaW5kZXggLXAnICcKKwlzZXRfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIEhFQURmaWxlX2luZGV4ICYmCisJc2V0X3N0YXRlIGJhciBiYXJfd29yayBiYXJfaW5kZXggJiYKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJKGVjaG8geTsgZWNobyBuOyBlY2hvIHkpIHwgZ2l0IHN0YXNoIHNhdmUgLS1uby1rZWVwLWluZGV4IC1wICYmCisJdmVyaWZ5X3N0YXRlIEhFQUQgY29tbWl0dGVkIGNvbW1pdHRlZCAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgYmFyX3dvcmsgZHVtbXkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGFwcGx5IC0taW5kZXggJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIEhFQURmaWxlX2luZGV4ICYmCisJdmVyaWZ5X3N0YXRlIGJhciBkdW1teSBiYXJfaW5kZXggJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnbm9uZSBvZiB0aGlzIG1vdmVkIEhFQUQnICcKKwl2ZXJpZnlfc2F2ZWRfaGVhZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDUtc3Rhc2gtaW5jbHVkZS11bnRyYWNrZWQuc2ggYi90L3QzOTA1LXN0YXNoLWluY2x1ZGUtdW50cmFja2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1ZTdlNmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTA1LXN0YXNoLWluY2x1ZGUtdW50cmFja2VkLnNoCkBAIC0wLDAgKzEsMTg4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIERhdmlkIENhbGR3ZWxsCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHN0YXNoIC0taW5jbHVkZS11bnRyYWNrZWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgc29tZSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeScgJworCWVjaG8gMSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIDIgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAzID4gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gMSA+IGZpbGUyICYmCisJZWNobyAxID4gSEVBRCAmJgorCW1rZGlyIHVudHJhY2tlZCAmJgorCWVjaG8gdW50cmFja2VkID51bnRyYWNrZWQvdW50cmFja2VkICYmCisJZ2l0IHN0YXNoIC0taW5jbHVkZS11bnRyYWNrZWQgJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFECisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorPz8gYWN0dWFsCis/PyBleHBlY3QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgY2xlYW5lZCB0aGUgdW50cmFja2VkIGZpbGVzJyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QuZGlmZiA8PEVPRgorZGlmZiAtLWdpdCBhL0hFQUQgYi9IRUFECituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDAwNDkxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvSEVBRAorQEAgLTAsMCArMSBAQAorKzEKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDAwNDkxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEgQEAKKysxCitkaWZmIC0tZ2l0IGEvdW50cmFja2VkL3VudHJhY2tlZCBiL3VudHJhY2tlZC91bnRyYWNrZWQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41YTcyZWIyCistLS0gL2Rldi9udWxsCisrKysgYi91bnRyYWNrZWQvdW50cmFja2VkCitAQCAtMCwwICsxIEBACisrdW50cmFja2VkCitFT0YKK2NhdCA+IGV4cGVjdC5sc3RyZWUgPDxFT0YKK0hFQUQKK2ZpbGUyCit1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgc3Rhc2hlZCB0aGUgdW50cmFja2VkIGZpbGVzJyAnCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB1bnRyYWNrZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBIRUFEICYmCisJZ2l0IGRpZmYgSEVBRCBzdGFzaF4zIC0tIEhFQUQgZmlsZTIgdW50cmFja2VkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGlmZiBhY3R1YWwgJiYKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSBzdGFzaF4zOiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmxzdHJlZSBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1wYXRjaCAtLWluY2x1ZGUtdW50cmFja2VkIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIC0tcGF0Y2ggLS1pbmNsdWRlLXVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0tcGF0Y2ggLS1hbGwgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggLS1wYXRjaCAtLWFsbAorJworCitnaXQgY2xlYW4gLS1mb3JjZSAtLXF1aWV0CisKK2NhdCA+IGV4cGVjdCA8PEVPRgorIE0gZmlsZQorPz8gSEVBRAorPz8gYWN0dWFsCis/PyBleHBlY3QKKz8/IGZpbGUyCis/PyB1bnRyYWNrZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcG9wIGFmdGVyIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCBsZWF2ZXMgZmlsZXMgdW50cmFja2VkIGFnYWluJyAnCisJZ2l0IHN0YXNoIHBvcCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0ICIxIiA9ICJgY2F0IGZpbGUyYCIgJiYKKwl0ZXN0IHVudHJhY2tlZCA9ICJgY2F0IHVudHJhY2tlZC91bnRyYWNrZWRgIgorJworCitnaXQgY2xlYW4gLS1mb3JjZSAtLXF1aWV0IC1kCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLXUgZGlydHkgaW5kZXgnICcKKwllY2hvIDQgPiBmaWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgc3Rhc2ggLXUKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI4NjI2YzQKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxIEBACisrNAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCBkaXJ0eSBpbmRleCBnb3Qgc3Rhc2hlZCcgJworCWdpdCBzdGFzaCBwb3AgLS1pbmRleCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dpdCByZXNldCA+IC9kZXYvbnVsbAorCisjIE11c3QgZGlyZWN0IG91dHB1dCBzb21ld2hlcmUgd2hlcmUgaXQgd29uJ3QgYmUgY29uc2lkZXJlZCBhbiB1bnRyYWNrZWQgZmlsZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkIC1xIGlzIHF1aWV0JyAnCisJZWNobyAxID4gZmlsZTUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkIC0tcXVpZXQgPiAuZ2l0L3N0YXNoLW91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgLmdpdC9zdGFzaC1vdXRwdXQub3V0ICYmCisJcm0gLWYgLmdpdC9zdGFzaC1vdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCByZW1vdmVkIGZpbGVzJyAnCisJcm0gLWYgZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgJiYKKwllY2hvIDEgPiBleHBlY3QgJiYKKwl0ZXN0X2NtcCBmaWxlIGV4cGVjdAorJworCitybSAtZiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkIHJlbW92ZWQgZmlsZXMgZ290IHN0YXNoZWQnICcKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZQorJworCitjYXQgPiAuZ2l0aWdub3JlIDw8RU9GCisuZ2l0aWdub3JlCitpZ25vcmVkCitpZ25vcmVkLmQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkIHJlc3BlY3RzIC5naXRpZ25vcmUnICcKKwllY2hvIGlnbm9yZWQgPiBpZ25vcmVkICYmCisJbWtkaXIgaWdub3JlZC5kICYmCisJZWNobyBpZ25vcmVkID5pZ25vcmVkLmQvdW50cmFja2VkICYmCisJZ2l0IHN0YXNoIC11ICYmCisJdGVzdCAtcyBpZ25vcmVkICYmCisJdGVzdCAtcyBpZ25vcmVkLmQvdW50cmFja2VkICYmCisJdGVzdCAtcyAuZ2l0aWdub3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLXUgY2FuIHN0YXNoIHdpdGggb25seSB1bnRyYWNrZWQgZmlsZXMgZGlmZmVyZW50JyAnCisJZWNobyA0ID4gZmlsZTQgJiYKKwlnaXQgc3Rhc2ggLXUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0tYWxsIGRvZXMgbm90IHJlc3BlY3QgLmdpdGlnbm9yZScgJworCWdpdCBzdGFzaCAtYSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGlnbm9yZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBpZ25vcmVkLmQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0aWdub3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1hbGwgaXMgc3Rhc2ggcG9wcGFibGUnICcKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdCAtcyBpZ25vcmVkICYmCisJdGVzdCAtcyBpZ25vcmVkLmQvdW50cmFja2VkICYmCisJdGVzdCAtcyAuZ2l0aWdub3JlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkxMC1tYWMtb3MtcHJlY29tcG9zZS5zaCBiL3QvdDM5MTAtbWFjLW9zLXByZWNvbXBvc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWZlNTdjNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MTAtbWFjLW9zLXByZWNvbXBvc2Uuc2gKQEAgLTAsMCArMSwxNTMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgVG9yc3RlbiBCw7ZnZXJzaGF1c2VuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3V0Zi04IGRlY29tcG9zZWQgKG5mZCkgY29udmVydGVkIHRvIHByZWNvbXBvc2VkIChuZmMpJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFVURjhfTkZEX1RPX05GQwordGhlbgorCXNraXBfYWxsPSJmaWxlc3lzdGVtIGRvZXMgbm90IGNvcnJ1cHQgdXRmLTgiCisJdGVzdF9kb25lCitmaQorCisjIGNyZWF0ZSB1dGYtOCB2YXJpYWJsZXMKK0FkaWFybmZjPWBwcmludGYgJ1wzMDNcMjA0J2AKK0FkaWFybmZkPWBwcmludGYgJ0FcMzE0XDIxMCdgCisKK09kaWFybmZjPWBwcmludGYgJ1wzMDNcMjI2J2AKK09kaWFybmZkPWBwcmludGYgJ09cMzE0XDIxMCdgCitBRWxpZ2F0dT1gcHJpbnRmICdcMzAzXDIwNidgCitJbnZhbGlkdT1gcHJpbnRmICdcMzAzXDM3NydgCisKKworI0NyZWF0ZSBhIHN0cmluZyB3aXRoIDI1NSBieXRlcyAoZGVjb21wb3NlZCkKK0Fsb25nZD0kQWRpYXJuZmQkQWRpYXJuZmQkQWRpYXJuZmQkQWRpYXJuZmQkQWRpYXJuZmQkQWRpYXJuZmQkQWRpYXJuZmQgIzIxIEJ5dGUKK0Fsb25nZD0kQWxvbmdkJEFsb25nZCRBbG9uZ2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzYzIEJ5dGUKK0Fsb25nZD0kQWxvbmdkJEFsb25nZCRBbG9uZ2QkQWxvbmdkJEFkaWFybmZkICAgICAgICAgICAgICAgICAgICAgICAgICAgIzI1NSBCeXRlCisKKyNDcmVhdGUgYSBzdHJpbmcgd2l0aCAyNTQgYnl0ZXMgKHByZWNvbXBvc2VkKQorQWxvbmdjPSRBRWxpZ2F0dSRBRWxpZ2F0dSRBRWxpZ2F0dSRBRWxpZ2F0dSRBRWxpZ2F0dSAjMTAgQnl0ZQorQWxvbmdjPSRBbG9uZ2MkQWxvbmdjJEFsb25nYyRBbG9uZ2MkQWxvbmdjICAgICAgICAgICAjNTAgQnl0ZQorQWxvbmdjPSRBbG9uZ2MkQWxvbmdjJEFsb25nYyRBbG9uZ2MkQWxvbmdjICAgICAgICAgICAjMjUwIEJ5dGUKK0Fsb25nYz0kQWxvbmdjJEFFbGlnYXR1JEFFbGlnYXR1ICAgICAgICAgICAgICAgICAgICAgIzI1NCBCeXRlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRldGVjdCBpZiBuZmQgbmVlZGVkIiAnCisJcHJlY29tcG9zZXVuaWNvZGU9YGdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZWAgJiYKKwl0ZXN0ICIkcHJlY29tcG9zZXVuaWNvZGUiID0gZmFsc2UgJiYKKwlnaXQgY29uZmlnIGNvcmUucHJlY29tcG9zZXVuaWNvZGUgdHJ1ZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAiICcKKwk+eCAmJgorCWdpdCBhZGQgeCAmJgorCWdpdCBjb21taXQgLW0gIjFzdCBjb21taXQiICYmCisJZ2l0IHJtIHggJiYKKwlnaXQgY29tbWl0IC1tICJybSB4IgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgY2FzZSBtYWMiICcKKwlnaXQgY2hlY2tvdXQgLWIgbWFjX29zCisnCisjIFRoaXMgd2lsbCB0ZXN0IG5mZDJuZmMgaW4gcmVhZGRpcigpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJhZGQgZmlsZSBBZGlhcm5mYyIgJworCWVjaG8gZi5BZGlhcm5mYyA+Zi4kQWRpYXJuZmMgJiYKKwlnaXQgYWRkIGYuJEFkaWFybmZjICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGYuJEFkaWFybmZjIgorJworIyBUaGlzIHdpbGwgdGVzdCBuZmQybmZjIGluIGdpdCBzdGFnZSgpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzdGFnZSBmaWxlIGQuQWRpYXJuZmQvZi5BZGlhcm5mZCIgJworCW1rZGlyIGQuJEFkaWFybmZkICYmCisJZWNobyBkLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCA+ZC4kQWRpYXJuZmQvZi4kQWRpYXJuZmQgJiYKKwlnaXQgc3RhZ2UgZC4kQWRpYXJuZmQvZi4kQWRpYXJuZmQgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZC4kQWRpYXJuZmQvZi4kQWRpYXJuZmQiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJhZGQgbGluayBBZGlhcm5mYyIgJworCWxuIC1zIGQuJEFkaWFybmZkL2YuJEFkaWFybmZkIGwuJEFkaWFybmZjICYmCisJZ2l0IGFkZCBsLiRBZGlhcm5mYyAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsLkFkaWFybmZjIgorJworIyBUaGlzIHdpbGwgdGVzdCBnaXQgbG9nCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgbG9nIGYuQWRpYXIiICcKKwlnaXQgbG9nIGYuJEFkaWFybmZjID4gZi5BZGlhcm5mYy5sb2cgJiYKKwlnaXQgbG9nIGYuJEFkaWFybmZkID4gZi5BZGlhcm5mZC5sb2cgJiYKKwl0ZXN0IC1zIGYuQWRpYXJuZmMubG9nICYmCisJdGVzdCAtcyBmLkFkaWFybmZkLmxvZyAmJgorCXRlc3RfY21wIGYuQWRpYXJuZmMubG9nIGYuQWRpYXJuZmQubG9nICYmCisJcm0gZi5BZGlhcm5mYy5sb2cgZi5BZGlhcm5mZC5sb2cKKycKKyMgVGhpcyB3aWxsIHRlc3QgZ2l0IGxzLWZpbGVzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgbHNmaWxlcyBmLkFkaWFyIiAnCisJZ2l0IGxzLWZpbGVzIGYuJEFkaWFybmZjID4gZi5BZGlhcm5mYy5sb2cgJiYKKwlnaXQgbHMtZmlsZXMgZi4kQWRpYXJuZmQgPiBmLkFkaWFybmZkLmxvZyAmJgorCXRlc3QgLXMgZi5BZGlhcm5mYy5sb2cgJiYKKwl0ZXN0IC1zIGYuQWRpYXJuZmQubG9nICYmCisJdGVzdF9jbXAgZi5BZGlhcm5mYy5sb2cgZi5BZGlhcm5mZC5sb2cgJiYKKwlybSBmLkFkaWFybmZjLmxvZyBmLkFkaWFybmZkLmxvZworJworIyBUaGlzIHdpbGwgdGVzdCBnaXQgbXYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBtdiIgJworCWdpdCBtdiBmLiRBZGlhcm5mZCBmLiRPZGlhcm5mYyAmJgorCWdpdCBtdiBkLiRBZGlhcm5mZCBkLiRPZGlhcm5mYyAmJgorCWdpdCBtdiBsLiRBZGlhcm5mZCBsLiRPZGlhcm5mYyAmJgorCWdpdCBjb21taXQgLW0gIm12IEFkaWFybmZkIE9kaWFybmZjIgorJworIyBGaWxlcyBjYW4gYmUgY2hlY2tlZCBvdXQgYXMgbmZjCisjIEFuZCB0aGUgbGluayBoYXMgYmVlbiBjb3JyZWN0ZWQgZnJvbSBuZmQgdG8gbmZjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgY2hlY2tvdXQgbmZjIiAnCisJcm0gZi4kT2RpYXJuZmMgJiYKKwlnaXQgY2hlY2tvdXQgZi4kT2RpYXJuZmMKKycKKyMgTWFrZSBpdCBwb3NzaWJsZSB0byBjaGVja291dCBmaWxlcyB3aXRoIHRoZWlyIE5GRCBuYW1lcwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IGNoZWNrb3V0IGZpbGUgbmZkIiAnCisJcm0gLWYgZi4qICYmCisJZ2l0IGNoZWNrb3V0IGYuJE9kaWFybmZkCisnCisjIE1ha2UgaXQgcG9zc2libGUgdG8gY2hlY2tvdXQgbGlua3Mgd2l0aCB0aGVpciBORkQgbmFtZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBjaGVja291dCBsaW5rIG5mZCIgJworCXJtIGwuKiAmJgorCWdpdCBjaGVja291dCBsLiRPZGlhcm5mZAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgY2FzZSBtYWMyIiAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFjX29zXzIKKycKKyMgVGhpcyB3aWxsIHRlc3QgbmZkMm5mYyBpbiBnaXQgY29tbWl0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQgZmlsZSBkMi5BZGlhcm5mZC9mLkFkaWFybmZkIiAnCisJbWtkaXIgZDIuJEFkaWFybmZkICYmCisJZWNobyBkMi4kQWRpYXJuZmQvZi4kQWRpYXJuZmQgPmQyLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCAmJgorCWdpdCBhZGQgZDIuJEFkaWFybmZkL2YuJEFkaWFybmZkICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGQyLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCIgLS0gZDIuJEFkaWFybmZkL2YuJEFkaWFybmZkCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBmb3IgbG9uZyBkZWNvbXBvc2VkIGZpbGVuYW1lIiAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFjX29zX2xvbmdfbmZkX2ZuCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJBZGQgbG9uZyBkZWNvbXBvc2VkIGZpbGVuYW1lIiAnCisJZWNobyBsb25nZCA+JEFsb25nZCAmJgorCWdpdCBhZGQgKiAmJgorCWdpdCBjb21taXQgLW0gIkxvbmcgZmlsZW5hbWUiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBmb3IgbG9uZyBwcmVjb21wb3NlZCBmaWxlbmFtZSIgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1hY19vc19sb25nX25mY19mbgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiQWRkIGxvbmcgcHJlY29tcG9zZWQgZmlsZW5hbWUiICcKKwllY2hvIGxvbmdjID4kQWxvbmdjICYmCisJZ2l0IGFkZCAqICYmCisJZ2l0IGNvbW1pdCAtbSAiTG9uZyBmaWxlbmFtZSIKKycKKyMgVGVzdCBpZiB0aGUgZ2xvYmFsIGNvcmUucHJlY29tcG9zZXVuaWNvZGUgc3RvcHMgYXV0b3NlbnNpbmcKKyMgTXVzdCBiZSB0aGUgbGFzdCB0ZXN0IGNhc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlc3BlY3QgZ2l0IGNvbmZpZyAtLWdsb2JhbCBjb3JlLnByZWNvbXBvc2V1bmljb2RlIiAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBjb3JlLnByZWNvbXBvc2V1bmljb2RlIHRydWUgJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisJcHJlY29tcG9zZXVuaWNvZGU9YGdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZWAgJiYKKwl0ZXN0ICIkcHJlY29tcG9zZXVuaWNvZGUiID0gInRydWUiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwMC1kaWZmLWZvcm1hdC5zaCBiL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmRkZDQ2OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGJ1aWx0LWluIGRpZmYgb3V0cHV0IGVuZ2luZS4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK2VjaG8gPnBhdGgwICdMaW5lIDEKK0xpbmUgMgorbGluZSAzJworY2F0IHBhdGgwID5wYXRoMQorY2htb2QgK3ggcGF0aDEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VwZGF0ZS1pbmRleCAtLWFkZCB0d28gZmlsZXMgd2l0aCBhbmQgd2l0aG91dCAreC4nIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCBwYXRoMScKKworbXYgcGF0aDAgcGF0aDAtCitzZWQgLWUgJ3MvbGluZS9MaW5lLycgPHBhdGgwLSA+cGF0aDAKK2NobW9kICt4IHBhdGgwCitybSAtZiBwYXRoMQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBkaWZmLWZpbGVzIC1wIGFmdGVyIGVkaXRpbmcgd29yayB0cmVlLicgXAorICAgICdnaXQgZGlmZi1maWxlcyAtcCA+Y3VycmVudCcKKworIyB0aGF0J3MgYXMgZmFyIGFzIGl0IGNvbWVzCitpZiBbICIkKGdpdCBjb25maWcgLS1nZXQgY29yZS5maWxlbW9kZSkiID0gZmFsc2UgXQordGhlbgorCXNheSAnZmlsZW1vZGUgZGlzYWJsZWQgb24gdGhlIGZpbGVzeXN0ZW0nCisJdGVzdF9kb25lCitmaQorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorZGlmZiAtLWdpdCBhL3BhdGgwIGIvcGF0aDAKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CistLS0gYS9wYXRoMAorKysrIGIvcGF0aDAKK0BAIC0xLDMgKzEsMyBAQAorIExpbmUgMQorIExpbmUgMgorLWxpbmUgMworK0xpbmUgMworZGlmZiAtLWdpdCBhL3BhdGgxIGIvcGF0aDEKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQorLS0tIGEvcGF0aDEKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLUxpbmUgMQorLUxpbmUgMgorLWxpbmUgMworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSBnaXQgZGlmZi1maWxlcyAtcCBvdXRwdXQuJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDEtZGlmZi1yZW5hbWUuc2ggYi90L3Q0MDAxLWRpZmYtcmVuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0NDI3N2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDAxLWRpZmYtcmVuYW1lLnNoCkBAIC0wLDAgKzEsMTA1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcmVuYW1lIGRldGVjdGlvbiBpbiBkaWZmIGVuZ2luZS4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK2VjaG8gPnBhdGgwICdMaW5lIDEKK0xpbmUgMgorTGluZSAzCitMaW5lIDQKK0xpbmUgNQorTGluZSA2CitMaW5lIDcKK0xpbmUgOAorTGluZSA5CitMaW5lIDEwCitsaW5lIDExCitMaW5lIDEyCitMaW5lIDEzCitMaW5lIDE0CitMaW5lIDE1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd1cGRhdGUtaW5kZXggLS1hZGQgYSBmaWxlLicgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnd3JpdGUgdGhhdCB0cmVlLicgXAorICAgICd0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmIGVjaG8gJHRyZWUnCisKK3NlZCAtZSAncy9saW5lL0xpbmUvJyA8cGF0aDAgPnBhdGgxCitybSAtZiBwYXRoMAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlbmFtZWQgYW5kIGVkaXRlZCB0aGUgZmlsZS4nIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBwYXRoMCBwYXRoMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC1wIC1NIGFmdGVyIHJlbmFtZSBhbmQgZWRpdGluZy4nIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLXAgLU0gJHRyZWUgPmN1cnJlbnQnCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorZGlmZiAtLWdpdCBhL3BhdGgwIGIvcGF0aDEKK3JlbmFtZSBmcm9tIHBhdGgwCityZW5hbWUgdG8gcGF0aDEKKy0tLSBhL3BhdGgwCisrKysgYi9wYXRoMQorQEAgLTgsNyArOCw3IEBAIExpbmUgNworIExpbmUgOAorIExpbmUgOQorIExpbmUgMTAKKy1saW5lIDExCisrTGluZSAxMQorIExpbmUgMTIKKyBMaW5lIDEzCisgTGluZSAxNAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSB0aGUgb3V0cHV0LicgXAorICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmF2b3VyIHNhbWUgYmFzZW5hbWVzIG92ZXIgZGlmZmVyZW50IG9uZXMnICcKKwljcCBwYXRoMSBhbm90aGVyLXBhdGggJiYKKwlnaXQgYWRkIGFub3RoZXItcGF0aCAmJgorCWdpdCBjb21taXQgLW0gMSAmJgorCWdpdCBybSBwYXRoMSAmJgorCW1rZGlyIHN1YmRpciAmJgorCWdpdCBtdiBhbm90aGVyLXBhdGggc3ViZGlyL3BhdGgxICYmCisJZ2l0IHN0YXR1cyB8IHRlc3RfaTE4bmdyZXAgInJlbmFtZWQ6IC4qcGF0aDEgLT4gc3ViZGlyL3BhdGgxIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmF2b3VyIHNhbWUgYmFzZW5hbWVzIGV2ZW4gd2l0aCBtaW5vciBkaWZmZXJlbmNlcycgJworCWdpdCBzaG93IEhFQUQ6cGF0aDEgfCBzZWQgInMvMTUvMTYvIiA+IHN1YmRpci9wYXRoMSAmJgorCWdpdCBzdGF0dXMgfCB0ZXN0X2kxOG5ncmVwICJyZW5hbWVkOiAuKnBhdGgxIC0+IHN1YmRpci9wYXRoMSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBtYW55IHJlbmFtZSBzb3VyY2UgY2FuZGlkYXRlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OworCWRvCisJCWZvciBqIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7CisJCWRvCisJCQllY2hvICIkaSRqIiA+InBhdGgkaSRqIgorCQlkb25lCisJZG9uZSAmJgorCWdpdCBhZGQgInBhdGg/PyIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJodW5kcmVkIiAmJgorCShjYXQgcGF0aDE7IGVjaG8gbmV3KSA+bmV3LXBhdGggJiYKKwllY2hvIG9sZCA+PnBhdGgxICYmCisJZ2l0IGFkZCBuZXctcGF0aCBwYXRoMSAmJgorCWdpdCBkaWZmIC1sIDQgLUMgLUMgLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCXNlZCAtZSAicy9eXChbQ01dXClbMC05XSoJL1wxCS8iIGFjdHVhbCA+YWN0dWFsLm11bmdlZCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCUMJcGF0aDEJbmV3LXBhdGgKKwlNCXBhdGgxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5tdW5nZWQgJiYKKwlncmVwIHdhcm5pbmcgYWN0dWFsLmVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDItZGlmZi1iYXNpYy5zaCBiL3QvdDQwMDItZGlmZi1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWU4YjgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwMi1kaWZmLWJhc2ljLnNoCkBAIC0wLDAgKzEsMjY2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZGlmZiByYXctb3V0cHV0LgorCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS1tLTN3YXkuc2gKKworY2F0ID4udGVzdC1wbGFpbi1PQSA8PFxFT0YKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgY2NiYTcyYWQzODg4YTM1MjBiMzllZmNmNzgwYjllZTY0MTY3NTM1ZCBBCUFBCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDdlNDI2ZmIwNzk0NzlmZDY3ZjZkODFmOTg0ZTRlYzY0OWE0NGJjMjUgQQlBTgorOjEwMDY0NCAwMDAwMDAgYmNjNjhlZjk5NzAxNzQ2NmQ1YzkwOTRiY2Y3NjkyMjk1ZjU4OGM5YSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJREQKKzowMDAwMDAgMDQwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNmQ1MGY2NWQzYmRhYjkxYzYzNDQ0Mjk0ZDM4ZjA4YWVmZjMyOGU0MiBBCURGCis6MTAwNjQ0IDAwMDAwMCAxNDFjMWYxNjQyMzI4ZTRiYzQ2YTdkODAxYTcxZGEzOTJlNjY3OTFlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlETQorOjEwMDY0NCAwMDAwMDAgMzVhYmRlMTUwNmRkZjgwNjU3MmZmNGQ0MDdiZDA2ODg1ZDBmOGVlOSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJRE4KKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMWQ0MTEyMmViZGQ3YTY0MGYyOWQzYzljYzRmOWQ3MDA5NDM3NDc2MiBBCUxMCis6MTAwNjQ0IDEwMDY0NCAwM2YyNGM4YzQ3MDBiYWJjY2ZkMjhiNjU0ZTdlOGVhYzQwMmFkNmNkIDEwM2Q5Zjg5YjUwYjlhYWQwMzA1NGI1NzliZTVlN2FhNjY1ZjJkNTcgTQlNRAorOjEwMDY0NCAxMDA2NDQgYjI1ODUwOGFmYjdjZWI0NDk5ODFiZDlkNjNkMmQzZTk3MWJmOGQzNCBiNDMxYjI3MmQ4MjlmZjNhYTRkMWE1MDg1ZjQzOTRhYjRkMzMwNWI2IE0JTU0KKzoxMDA2NDQgMTAwNjQ0IGJkMDg0YjBjMjdjN2I2Y2MzNGYxMWQ2ZDA1MDlhMjliZTNjYWY5NzAgYTcxNmQ1OGRlNGE1NzBlMDAzOGY1YzMwN2JkOGRiMzRkYWVhMDIxZiBNCU1OCis6MTAwNjQ0IDEwMDY0NCA0MGM5NTlmOTg0YzhiODlhMmIwMjUyMGQxN2YwMGQ3MTdmMDI0Mzk3IDJhYzU0N2FlOTYxNGEwMGQxYjI4Mjc1ZGU2MDgxMzFmN2EwZTI1OWYgTQlTUworOjEwMDY0NCAxMDA2NDQgNGFjMTM0NTg4OTlhYjkwOGVmM2IxMTI4ZmEzNzhkYWVmYzg4ZDM1NiA0Yzg2ZjlhODVmYmM1ZTY4MDRlZTJlMTdhNzk3NTM4ZmJlNzg1YmNhIE0JVFQKKzowNDAwMDAgMDQwMDAwIDdkNjcwZmRjZGI5OTI5ZjZjN2RhYzE5NmZmNzg2ODljZDFjNTY2YTEgNWU1ZjIyMDcyYmIzOWY2ZTEyY2Y2NjNhNTdjYjYzNGM3NmVlZmI0OSBNCVoKK0VPRgorCitjYXQgPi50ZXN0LXJlY3Vyc2l2ZS1PQSA8PFxFT0YKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgY2NiYTcyYWQzODg4YTM1MjBiMzllZmNmNzgwYjllZTY0MTY3NTM1ZCBBCUFBCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDdlNDI2ZmIwNzk0NzlmZDY3ZjZkODFmOTg0ZTRlYzY0OWE0NGJjMjUgQQlBTgorOjEwMDY0NCAwMDAwMDAgYmNjNjhlZjk5NzAxNzQ2NmQ1YzkwOTRiY2Y3NjkyMjk1ZjU4OGM5YSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJREQKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNjhhNmQ4YjkxZGExMTA0NWNmNGFhM2E1YWI5ZjJhNzgxYzcwMTI0OSBBCURGL0RGCis6MTAwNjQ0IDAwMDAwMCAxNDFjMWYxNjQyMzI4ZTRiYzQ2YTdkODAxYTcxZGEzOTJlNjY3OTFlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlETQorOjEwMDY0NCAwMDAwMDAgMzVhYmRlMTUwNmRkZjgwNjU3MmZmNGQ0MDdiZDA2ODg1ZDBmOGVlOSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJRE4KKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMWQ0MTEyMmViZGQ3YTY0MGYyOWQzYzljYzRmOWQ3MDA5NDM3NDc2MiBBCUxMCis6MTAwNjQ0IDEwMDY0NCAwM2YyNGM4YzQ3MDBiYWJjY2ZkMjhiNjU0ZTdlOGVhYzQwMmFkNmNkIDEwM2Q5Zjg5YjUwYjlhYWQwMzA1NGI1NzliZTVlN2FhNjY1ZjJkNTcgTQlNRAorOjEwMDY0NCAxMDA2NDQgYjI1ODUwOGFmYjdjZWI0NDk5ODFiZDlkNjNkMmQzZTk3MWJmOGQzNCBiNDMxYjI3MmQ4MjlmZjNhYTRkMWE1MDg1ZjQzOTRhYjRkMzMwNWI2IE0JTU0KKzoxMDA2NDQgMTAwNjQ0IGJkMDg0YjBjMjdjN2I2Y2MzNGYxMWQ2ZDA1MDlhMjliZTNjYWY5NzAgYTcxNmQ1OGRlNGE1NzBlMDAzOGY1YzMwN2JkOGRiMzRkYWVhMDIxZiBNCU1OCis6MTAwNjQ0IDEwMDY0NCA0MGM5NTlmOTg0YzhiODlhMmIwMjUyMGQxN2YwMGQ3MTdmMDI0Mzk3IDJhYzU0N2FlOTYxNGEwMGQxYjI4Mjc1ZGU2MDgxMzFmN2EwZTI1OWYgTQlTUworOjEwMDY0NCAxMDA2NDQgNGFjMTM0NTg4OTlhYjkwOGVmM2IxMTI4ZmEzNzhkYWVmYzg4ZDM1NiA0Yzg2ZjlhODVmYmM1ZTY4MDRlZTJlMTdhNzk3NTM4ZmJlNzg1YmNhIE0JVFQKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOGFjYjhlOTc1MGUzZjY0NGJmMzIzZmNmM2QzMzg4NDlkYjEwNmM3NyBBCVovQUEKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDg3NDk0MjYyMDg0Y2VmZWU3ZWQ0ODRkMjBjOGRjMDU4MDc5MTI3MiBBCVovQU4KKzoxMDA2NDQgMDAwMDAwIDg3OTAwN2VmYWU2MjRkMmIxMzA3MjE0YjI0YTk1NmYwYThkNjg2YTggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECVovREQKKzoxMDA2NDQgMDAwMDAwIDliNTQxYjIyNzVjMDZlM2E3YjEzZjI4YmFkZjUyOTRlMmFlNjNkZjQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECVovRE0KKzoxMDA2NDQgMDAwMDAwIGJlYjVkMzhjNTUyODNkMjgwNjg1ZWEyMWEwZTUwY2ZjYzBjYTA2NGEgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECVovRE4KKzoxMDA2NDQgMTAwNjQ0IGQ0MWZkYTQxYjdlYzRkZTQ2YjQzY2I3ZWE0MmE0NTAwMWFlMzkzZDUgYTc5YWMzYmU5Mzc3NjM5ZTFjN2QxZWRmMWFlMWIzYTVmMGNjZDhhOSBNCVovTUQKKzoxMDA2NDQgMTAwNjQ0IDRjYTIyYmFlMjUyN2QzZDllMTY3NjQ5OGEwZmJhM2IzNTViZDEyNzggNjE0MjJiYTljMmM4NzM0MTYwNjFhODhjZDQwYTU5YTM1YjU3NjQ3NCBNCVovTU0KKzoxMDA2NDQgMTAwNjQ0IGIxNmQ3YjI1Yjg2OWYyYmViMTI0ZWZhNTM0NjdkOGExNTUwYWQ2OTQgYTVjNTQ0YzIxY2ZjYjA3ZWI4MGE0ZDg5YTViN2QxNTcwMDAyZWRmZCBNCVovTU4KK0VPRgorY2F0ID4udGVzdC1wbGFpbi1PQiA8PFxFT0YKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNmFhMmI1MzM1YjE2NDMxYTBlZjcxZTVjMGEyOGJlNjkxODNjZjZhMiBBCUFBCis6MTAwNjQ0IDAwMDAwMCBiY2M2OGVmOTk3MDE3NDY2ZDVjOTA5NGJjZjc2OTIyOTVmNTg4YzlhIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlERAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA3MTQyMGFiODFlMjU0MTQ1ZDI2ZDZmYzBjZGRlZTY0YzFhY2Q0Nzg3IEEJREYKKzoxMDA2NDQgMTAwNjQ0IDE0MWMxZjE2NDIzMjhlNGJjNDZhN2Q4MDFhNzFkYTM5MmU2Njc5MWUgM2M0ZDhkZTVmYmFkMDg1NzJiYWI4ZTEwZWVmOGRiYjI2NGNmMDIzMSBNCURNCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDFkNDExMjJlYmRkN2E2NDBmMjlkM2M5Y2M0ZjlkNzAwOTQzNzQ3NjIgQQlMTAorOjEwMDY0NCAwMDAwMDAgMDNmMjRjOGM0NzAwYmFiY2NmZDI4YjY1NGU3ZThlYWM0MDJhZDZjZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJTUQKKzoxMDA2NDQgMTAwNjQ0IGIyNTg1MDhhZmI3Y2ViNDQ5OTgxYmQ5ZDYzZDJkM2U5NzFiZjhkMzQgMTk5ODlkNDU1OWFhZTQxN2ZlZGVlMjQwY2NmMmJhMzE1ZWE0ZGMyYiBNCU1NCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDE1ODg1ODgxZWE2OTExNTM1MWMwOWIzODM3MWYwMzQ4YTNmYjhjNjcgQQlOQQorOjEwMDY0NCAwMDAwMDAgYTRlMTc5ZTQyOTFlNTUzNmE1ZTFjODJlMDkxMDUyNzcyZDJjNWE5MyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJTkQKKzoxMDA2NDQgMTAwNjQ0IGM4ZjI1NzgxZThmMTc5MmUzZTQwYjc0MjI1ZTIwNTUzMDQxYjUyMjYgY2RiOWE4YzNkYTU3MTUwMmFjMzAyMjVlOWMxN2JlY2NiODM4Nzk4MyBNCU5NCis6MTAwNjQ0IDEwMDY0NCA0MGM5NTlmOTg0YzhiODlhMmIwMjUyMGQxN2YwMGQ3MTdmMDI0Mzk3IDJhYzU0N2FlOTYxNGEwMGQxYjI4Mjc1ZGU2MDgxMzFmN2EwZTI1OWYgTQlTUworOjEwMDY0NCAxMDA2NDQgNGFjMTM0NTg4OTlhYjkwOGVmM2IxMTI4ZmEzNzhkYWVmYzg4ZDM1NiBjNGU0YTEyMjMxYjlmYTc5YTAwNTNjYjYwNzdmY2IyMWJiNWIxMzVhIE0JVFQKKzowNDAwMDAgMDQwMDAwIDdkNjcwZmRjZGI5OTI5ZjZjN2RhYzE5NmZmNzg2ODljZDFjNTY2YTEgMWJhNTIzOTU1ZDUxNjA2ODFhZjY1Y2I3NzY0MTFmNTc0YzFlODE1NSBNCVoKK0VPRgorY2F0ID4udGVzdC1yZWN1cnNpdmUtT0IgPDxcRU9GCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDZhYTJiNTMzNWIxNjQzMWEwZWY3MWU1YzBhMjhiZTY5MTgzY2Y2YTIgQQlBQQorOjEwMDY0NCAwMDAwMDAgYmNjNjhlZjk5NzAxNzQ2NmQ1YzkwOTRiY2Y3NjkyMjk1ZjU4OGM5YSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJREQKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNzE0MjBhYjgxZTI1NDE0NWQyNmQ2ZmMwY2RkZWU2NGMxYWNkNDc4NyBBCURGCis6MTAwNjQ0IDEwMDY0NCAxNDFjMWYxNjQyMzI4ZTRiYzQ2YTdkODAxYTcxZGEzOTJlNjY3OTFlIDNjNGQ4ZGU1ZmJhZDA4NTcyYmFiOGUxMGVlZjhkYmIyNjRjZjAyMzEgTQlETQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxZDQxMTIyZWJkZDdhNjQwZjI5ZDNjOWNjNGY5ZDcwMDk0Mzc0NzYyIEEJTEwKKzoxMDA2NDQgMDAwMDAwIDAzZjI0YzhjNDcwMGJhYmNjZmQyOGI2NTRlN2U4ZWFjNDAyYWQ2Y2QgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECU1ECis6MTAwNjQ0IDEwMDY0NCBiMjU4NTA4YWZiN2NlYjQ0OTk4MWJkOWQ2M2QyZDNlOTcxYmY4ZDM0IDE5OTg5ZDQ1NTlhYWU0MTdmZWRlZTI0MGNjZjJiYTMxNWVhNGRjMmIgTQlNTQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxNTg4NTg4MWVhNjkxMTUzNTFjMDliMzgzNzFmMDM0OGEzZmI4YzY3IEEJTkEKKzoxMDA2NDQgMDAwMDAwIGE0ZTE3OWU0MjkxZTU1MzZhNWUxYzgyZTA5MTA1Mjc3MmQyYzVhOTMgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECU5ECis6MTAwNjQ0IDEwMDY0NCBjOGYyNTc4MWU4ZjE3OTJlM2U0MGI3NDIyNWUyMDU1MzA0MWI1MjI2IGNkYjlhOGMzZGE1NzE1MDJhYzMwMjI1ZTljMTdiZWNjYjgzODc5ODMgTQlOTQorOjEwMDY0NCAxMDA2NDQgNDBjOTU5Zjk4NGM4Yjg5YTJiMDI1MjBkMTdmMDBkNzE3ZjAyNDM5NyAyYWM1NDdhZTk2MTRhMDBkMWIyODI3NWRlNjA4MTMxZjdhMGUyNTlmIE0JU1MKKzoxMDA2NDQgMTAwNjQ0IDRhYzEzNDU4ODk5YWI5MDhlZjNiMTEyOGZhMzc4ZGFlZmM4OGQzNTYgYzRlNGExMjIzMWI5ZmE3OWEwMDUzY2I2MDc3ZmNiMjFiYjViMTM1YSBNCVRUCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDZjMGI5OTI4NmQwYmNlNTUxYWM0YTdiM2RmZjhiNzA2ZWRmZjM3MTUgQQlaL0FBCis6MTAwNjQ0IDAwMDAwMCA4NzkwMDdlZmFlNjI0ZDJiMTMwNzIxNGIyNGE5NTZmMGE4ZDY4NmE4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL0RECis6MTAwNjQ0IDEwMDY0NCA5YjU0MWIyMjc1YzA2ZTNhN2IxM2YyOGJhZGY1Mjk0ZTJhZTYzZGY0IGQ3NzM3MWQxNTgxN2ZjYWE1N2VlZWMyN2Y3NzBjNTA1YmE5NzRlYzEgTQlaL0RNCis6MTAwNjQ0IDAwMDAwMCBkNDFmZGE0MWI3ZWM0ZGU0NmI0M2NiN2VhNDJhNDUwMDFhZTM5M2Q1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL01ECis6MTAwNjQ0IDEwMDY0NCA0Y2EyMmJhZTI1MjdkM2Q5ZTE2NzY0OThhMGZiYTNiMzU1YmQxMjc4IDY5N2FhZDc3MTVhMWU3MzA2Y2E3NjI5MGEzZGQ0MjA4ZmJhZWRkZmEgTQlaL01NCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGQxMjk3OWMyMmZmZjY5YzU5Y2E5NDA5ZTdhOGZlM2VlMjVlYWVlODAgQQlaL05BCis6MTAwNjQ0IDAwMDAwMCBhMTgzOTNjNjM2Yjk4ZTliZDcyOTZiOGI0MzdlYTQ5OTJiNzI0NDBjIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL05ECis6MTAwNjQ0IDEwMDY0NCAzZmRiZTE3ZmQwMTMzMDNhMmU5ODFlMWNhMWM2Y2Q2ZTcyNzg5MDg3IDdlMDlkNmEzYTE0YmQ2MzA5MTNlOGM3NTY5M2NlYTMyMTU3YjYwNmQgTQlaL05NCitFT0YKK2NhdCA+LnRlc3QtcGxhaW4tQUIgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCBjY2JhNzJhZDM4ODhhMzUyMGIzOWVmY2Y3ODBiOWVlNjQxNjc1MzVkIDZhYTJiNTMzNWIxNjQzMWEwZWY3MWU1YzBhMjhiZTY5MTgzY2Y2YTIgTQlBQQorOjEwMDY0NCAwMDAwMDAgN2U0MjZmYjA3OTQ3OWZkNjdmNmQ4MWY5ODRlNGVjNjQ5YTQ0YmMyNSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJQU4KKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNzE0MjBhYjgxZTI1NDE0NWQyNmQ2ZmMwY2RkZWU2NGMxYWNkNDc4NyBBCURGCis6MDQwMDAwIDAwMDAwMCA2ZDUwZjY1ZDNiZGFiOTFjNjM0NDQyOTRkMzhmMDhhZWZmMzI4ZTQyIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlERgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAzYzRkOGRlNWZiYWQwODU3MmJhYjhlMTBlZWY4ZGJiMjY0Y2YwMjMxIEEJRE0KKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMzVhYmRlMTUwNmRkZjgwNjU3MmZmNGQ0MDdiZDA2ODg1ZDBmOGVlOSBBCUROCis6MTAwNjQ0IDAwMDAwMCAxMDNkOWY4OWI1MGI5YWFkMDMwNTRiNTc5YmU1ZTdhYTY2NWYyZDU3IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlNRAorOjEwMDY0NCAxMDA2NDQgYjQzMWIyNzJkODI5ZmYzYWE0ZDFhNTA4NWY0Mzk0YWI0ZDMzMDViNiAxOTk4OWQ0NTU5YWFlNDE3ZmVkZWUyNDBjY2YyYmEzMTVlYTRkYzJiIE0JTU0KKzoxMDA2NDQgMTAwNjQ0IGE3MTZkNThkZTRhNTcwZTAwMzhmNWMzMDdiZDhkYjM0ZGFlYTAyMWYgYmQwODRiMGMyN2M3YjZjYzM0ZjExZDZkMDUwOWEyOWJlM2NhZjk3MCBNCU1OCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDE1ODg1ODgxZWE2OTExNTM1MWMwOWIzODM3MWYwMzQ4YTNmYjhjNjcgQQlOQQorOjEwMDY0NCAwMDAwMDAgYTRlMTc5ZTQyOTFlNTUzNmE1ZTFjODJlMDkxMDUyNzcyZDJjNWE5MyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJTkQKKzoxMDA2NDQgMTAwNjQ0IGM4ZjI1NzgxZThmMTc5MmUzZTQwYjc0MjI1ZTIwNTUzMDQxYjUyMjYgY2RiOWE4YzNkYTU3MTUwMmFjMzAyMjVlOWMxN2JlY2NiODM4Nzk4MyBNCU5NCis6MTAwNjQ0IDEwMDY0NCA0Yzg2ZjlhODVmYmM1ZTY4MDRlZTJlMTdhNzk3NTM4ZmJlNzg1YmNhIGM0ZTRhMTIyMzFiOWZhNzlhMDA1M2NiNjA3N2ZjYjIxYmI1YjEzNWEgTQlUVAorOjA0MDAwMCAwNDAwMDAgNWU1ZjIyMDcyYmIzOWY2ZTEyY2Y2NjNhNTdjYjYzNGM3NmVlZmI0OSAxYmE1MjM5NTVkNTE2MDY4MWFmNjVjYjc3NjQxMWY1NzRjMWU4MTU1IE0JWgorRU9GCitjYXQgPi50ZXN0LXJlY3Vyc2l2ZS1BQiA8PFxFT0YKKzoxMDA2NDQgMTAwNjQ0IGNjYmE3MmFkMzg4OGEzNTIwYjM5ZWZjZjc4MGI5ZWU2NDE2NzUzNWQgNmFhMmI1MzM1YjE2NDMxYTBlZjcxZTVjMGEyOGJlNjkxODNjZjZhMiBNCUFBCis6MTAwNjQ0IDAwMDAwMCA3ZTQyNmZiMDc5NDc5ZmQ2N2Y2ZDgxZjk4NGU0ZWM2NDlhNDRiYzI1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlBTgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA3MTQyMGFiODFlMjU0MTQ1ZDI2ZDZmYzBjZGRlZTY0YzFhY2Q0Nzg3IEEJREYKKzoxMDA2NDQgMDAwMDAwIDY4YTZkOGI5MWRhMTEwNDVjZjRhYTNhNWFiOWYyYTc4MWM3MDEyNDkgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECURGL0RGCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDNjNGQ4ZGU1ZmJhZDA4NTcyYmFiOGUxMGVlZjhkYmIyNjRjZjAyMzEgQQlETQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAzNWFiZGUxNTA2ZGRmODA2NTcyZmY0ZDQwN2JkMDY4ODVkMGY4ZWU5IEEJRE4KKzoxMDA2NDQgMDAwMDAwIDEwM2Q5Zjg5YjUwYjlhYWQwMzA1NGI1NzliZTVlN2FhNjY1ZjJkNTcgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECU1ECis6MTAwNjQ0IDEwMDY0NCBiNDMxYjI3MmQ4MjlmZjNhYTRkMWE1MDg1ZjQzOTRhYjRkMzMwNWI2IDE5OTg5ZDQ1NTlhYWU0MTdmZWRlZTI0MGNjZjJiYTMxNWVhNGRjMmIgTQlNTQorOjEwMDY0NCAxMDA2NDQgYTcxNmQ1OGRlNGE1NzBlMDAzOGY1YzMwN2JkOGRiMzRkYWVhMDIxZiBiZDA4NGIwYzI3YzdiNmNjMzRmMTFkNmQwNTA5YTI5YmUzY2FmOTcwIE0JTU4KKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTU4ODU4ODFlYTY5MTE1MzUxYzA5YjM4MzcxZjAzNDhhM2ZiOGM2NyBBCU5BCis6MTAwNjQ0IDAwMDAwMCBhNGUxNzllNDI5MWU1NTM2YTVlMWM4MmUwOTEwNTI3NzJkMmM1YTkzIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlORAorOjEwMDY0NCAxMDA2NDQgYzhmMjU3ODFlOGYxNzkyZTNlNDBiNzQyMjVlMjA1NTMwNDFiNTIyNiBjZGI5YThjM2RhNTcxNTAyYWMzMDIyNWU5YzE3YmVjY2I4Mzg3OTgzIE0JTk0KKzoxMDA2NDQgMTAwNjQ0IDRjODZmOWE4NWZiYzVlNjgwNGVlMmUxN2E3OTc1MzhmYmU3ODViY2EgYzRlNGExMjIzMWI5ZmE3OWEwMDUzY2I2MDc3ZmNiMjFiYjViMTM1YSBNCVRUCis6MTAwNjQ0IDEwMDY0NCA4YWNiOGU5NzUwZTNmNjQ0YmYzMjNmY2YzZDMzODg0OWRiMTA2Yzc3IDZjMGI5OTI4NmQwYmNlNTUxYWM0YTdiM2RmZjhiNzA2ZWRmZjM3MTUgTQlaL0FBCis6MTAwNjQ0IDAwMDAwMCAwODc0OTQyNjIwODRjZWZlZTdlZDQ4NGQyMGM4ZGMwNTgwNzkxMjcyIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL0FOCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGQ3NzM3MWQxNTgxN2ZjYWE1N2VlZWMyN2Y3NzBjNTA1YmE5NzRlYzEgQQlaL0RNCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGJlYjVkMzhjNTUyODNkMjgwNjg1ZWEyMWEwZTUwY2ZjYzBjYTA2NGEgQQlaL0ROCis6MTAwNjQ0IDAwMDAwMCBhNzlhYzNiZTkzNzc2MzllMWM3ZDFlZGYxYWUxYjNhNWYwY2NkOGE5IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL01ECis6MTAwNjQ0IDEwMDY0NCA2MTQyMmJhOWMyYzg3MzQxNjA2MWE4OGNkNDBhNTlhMzViNTc2NDc0IDY5N2FhZDc3MTVhMWU3MzA2Y2E3NjI5MGEzZGQ0MjA4ZmJhZWRkZmEgTQlaL01NCis6MTAwNjQ0IDEwMDY0NCBhNWM1NDRjMjFjZmNiMDdlYjgwYTRkODlhNWI3ZDE1NzAwMDJlZGZkIGIxNmQ3YjI1Yjg2OWYyYmViMTI0ZWZhNTM0NjdkOGExNTUwYWQ2OTQgTQlaL01OCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGQxMjk3OWMyMmZmZjY5YzU5Y2E5NDA5ZTdhOGZlM2VlMjVlYWVlODAgQQlaL05BCis6MTAwNjQ0IDAwMDAwMCBhMTgzOTNjNjM2Yjk4ZTliZDcyOTZiOGI0MzdlYTQ5OTJiNzI0NDBjIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL05ECis6MTAwNjQ0IDEwMDY0NCAzZmRiZTE3ZmQwMTMzMDNhMmU5ODFlMWNhMWM2Y2Q2ZTcyNzg5MDg3IDdlMDlkNmEzYTE0YmQ2MzA5MTNlOGM3NTY5M2NlYTMyMTU3YjYwNmQgTQlaL05NCitFT0YKKworY21wX2RpZmZfZmlsZXNfb3V0cHV0ICgpIHsKKyAgICAjIGRpZmYtZmlsZXMgbmV2ZXIgcmVwb3J0cyBhZGRpdGlvbnMuICBBbHNvIGl0IGRvZXMgbm90IGZpbGwgaW4gdGhlCisgICAgIyBvYmplY3QgSUQgZm9yIHRoZSBjaGFuZ2VkIGZpbGVzIGJlY2F1c2UgaXQgd2FudHMgeW91IHRvIGxvb2sgYXQgdGhlCisgICAgIyBmaWxlc3lzdGVtLgorICAgIHNlZCA8IiQyIiA+LnRlc3QtdG1wIFwKKwktZSAnL146MDAwMDAwIC9kO3MvJyRfeDQwJ1woIFtNQ1JORFVdWzAtOV0qXCkJLyckX3o0MCdcMQkvJyAmJgorICAgIHRlc3RfY21wICIkMSIgLnRlc3QtdG1wCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgJHRyZWVfTyAkdHJlZV9BID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXBsYWluLU9BJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi10cmVlIG9mIGtub3duIHRyZWVzLicgXAorICAgICdnaXQgZGlmZi10cmVlIC1yICR0cmVlX08gJHRyZWVfQSA+LnRlc3QtYSAmJgorICAgICBjbXAgLXMgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtT0EnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgJHRyZWVfTyAkdHJlZV9CID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXBsYWluLU9CJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi10cmVlIG9mIGtub3duIHRyZWVzLicgXAorICAgICdnaXQgZGlmZi10cmVlIC1yICR0cmVlX08gJHRyZWVfQiA+LnRlc3QtYSAmJgorICAgICBjbXAgLXMgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtT0InCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgJHRyZWVfQSAkdHJlZV9CID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXBsYWluLUFCJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi10cmVlIG9mIGtub3duIHRyZWVzLicgXAorICAgICdnaXQgZGlmZi10cmVlIC1yICR0cmVlX0EgJHRyZWVfQiA+LnRlc3QtYSAmJgorICAgICBjbXAgLXMgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtQUInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgLS1zdGRpbiBvZiBrbm93biB0cmVlcy4nIFwKKyAgICAnZWNobyAkdHJlZV9BICR0cmVlX0IgfCBnaXQgZGlmZi10cmVlIC0tc3RkaW4gPiAudGVzdC1hICYmCisgICAgIGVjaG8gJHRyZWVfQSAkdHJlZV9CID4gLnRlc3QtcGxhaW4tQUJ4ICYmCisgICAgIGNhdCAudGVzdC1wbGFpbi1BQiA+PiAudGVzdC1wbGFpbi1BQnggJiYKKyAgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtcGxhaW4tQUJ4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi10cmVlIC0tc3RkaW4gb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2VjaG8gJHRyZWVfQSAkdHJlZV9CIHwgZ2l0IGRpZmYtdHJlZSAtciAtLXN0ZGluID4gLnRlc3QtYSAmJgorICAgICBlY2hvICR0cmVlX0EgJHRyZWVfQiA+IC50ZXN0LXJlY3Vyc2l2ZS1BQnggJiYKKyAgICAgY2F0IC50ZXN0LXJlY3Vyc2l2ZS1BQiA+PiAudGVzdC1yZWN1cnNpdmUtQUJ4ICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1BQngnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLWNhY2hlIE8gd2l0aCBBIGluIGNhY2hlJyBcCisgICAgJ2dpdCByZWFkLXRyZWUgJHRyZWVfQSAmJgorICAgICBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZV9PID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1PQScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtY2FjaGUgTyB3aXRoIEIgaW4gY2FjaGUnIFwKKyAgICAnZ2l0IHJlYWQtdHJlZSAkdHJlZV9CICYmCisgICAgIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlX08gPi50ZXN0LWEgJiYKKyAgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtcmVjdXJzaXZlLU9CJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi1jYWNoZSBBIHdpdGggQiBpbiBjYWNoZScgXAorICAgICdnaXQgcmVhZC10cmVlICR0cmVlX0IgJiYKKyAgICAgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWVfQSA+LnRlc3QtYSAmJgorICAgICBjbXAgLXMgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtQUInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLWZpbGVzIHdpdGggTyBpbiBjYWNoZSBhbmQgQSBjaGVja2VkIG91dCcgXAorICAgICdybSAtZnIgWiBbQS1aXVtBLVpdICYmCisgICAgIGdpdCByZWFkLXRyZWUgJHRyZWVfQSAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLWEgJiYKKyAgICAgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0ICR0cmVlX08gJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLXEgJiYKKyAgICAgZ2l0IGRpZmYtZmlsZXMgPi50ZXN0LWEgJiYKKyAgICAgY21wX2RpZmZfZmlsZXNfb3V0cHV0IC50ZXN0LWEgLnRlc3QtcmVjdXJzaXZlLU9BJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi1maWxlcyB3aXRoIE8gaW4gY2FjaGUgYW5kIEIgY2hlY2tlZCBvdXQnIFwKKyAgICAncm0gLWZyIFogW0EtWl1bQS1aXSAmJgorICAgICBnaXQgcmVhZC10cmVlICR0cmVlX0IgJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hICYmCisgICAgIGdpdCByZWFkLXRyZWUgLS1yZXNldCAkdHJlZV9PICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xICYmCisgICAgIGdpdCBkaWZmLWZpbGVzID4udGVzdC1hICYmCisgICAgIGNtcF9kaWZmX2ZpbGVzX291dHB1dCAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1PQicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtZmlsZXMgd2l0aCBBIGluIGNhY2hlIGFuZCBCIGNoZWNrZWQgb3V0JyBcCisgICAgJ3JtIC1mciBaIFtBLVpdW0EtWl0gJiYKKyAgICAgZ2l0IHJlYWQtdHJlZSAkdHJlZV9CICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtYSAmJgorICAgICBnaXQgcmVhZC10cmVlIC0tcmVzZXQgJHRyZWVfQSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcSAmJgorICAgICBnaXQgZGlmZi1maWxlcyA+LnRlc3QtYSAmJgorICAgICBjbXBfZGlmZl9maWxlc19vdXRwdXQgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtQUInCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTm93IHdlIGhhdmUgZXN0YWJsaXNoZWQgdGhlIGJhc2VsaW5lLCB3ZSBkbyBub3QgaGF2ZSB0bworIyByZWx5IG9uIGluZGl2aWR1YWwgb2JqZWN0IElEIHZhbHVlcyB0aGF0IG11Y2guCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgTyBBID09IGRpZmYtdHJlZSAtUiBBIE8nIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAkdHJlZV9PICR0cmVlX0EgPi50ZXN0LWEgJiYKKyAgICBnaXQgZGlmZi10cmVlIC1SICR0cmVlX0EgJHRyZWVfTyA+LnRlc3QtYiAmJgorICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LWInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgLXIgTyBBID09IGRpZmYtdHJlZSAtciAtUiBBIE8nIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAtciAkdHJlZV9PICR0cmVlX0EgPi50ZXN0LWEgJiYKKyAgICBnaXQgZGlmZi10cmVlIC1yIC1SICR0cmVlX0EgJHRyZWVfTyA+LnRlc3QtYiAmJgorICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LWInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgQiBBID09IGRpZmYtdHJlZSAtUiBBIEInIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAkdHJlZV9CICR0cmVlX0EgPi50ZXN0LWEgJiYKKyAgICBnaXQgZGlmZi10cmVlIC1SICR0cmVlX0EgJHRyZWVfQiA+LnRlc3QtYiAmJgorICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LWInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgLXIgQiBBID09IGRpZmYtdHJlZSAtciAtUiBBIEInIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAtciAkdHJlZV9CICR0cmVlX0EgPi50ZXN0LWEgJiYKKyAgICBnaXQgZGlmZi10cmVlIC1yIC1SICR0cmVlX0EgJHRyZWVfQiA+LnRlc3QtYiAmJgorICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LWInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmIGNhbiByZWFkIGZyb20gc3RkaW4nIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAtLSBNTiAtIDwgTk4gfAorICAgICAgICBncmVwIC12ICJeaW5kZXgiIHwgc2VkICJzIy8tIy9OTiMiID4udGVzdC1hICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAtLSBNTiBOTiB8CisgICAgICAgIGdyZXAgLXYgIl5pbmRleCIgPi50ZXN0LWIgJiYKKyAgICB0ZXN0X2NtcCAudGVzdC1hIC50ZXN0LWInCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwMy1kaWZmLXJlbmFtZS0xLnNoIGIvdC90NDAwMy1kaWZmLXJlbmFtZS0xLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmYTg4MzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDAzLWRpZmYtcmVuYW1lLTEuc2gKQEAgLTAsMCArMSwxMjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nTW9yZSByZW5hbWUgZGV0ZWN0aW9uCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgcmVmZXJlbmNlIHRyZWUnIFwKKyAgICAnY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPkNPUFlJTkcgJiYKKyAgICAgZWNobyBmcm90eiA+cmV6cm92ICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBDT1BZSU5HIHJlenJvdiAmJgorICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICBlY2hvICR0cmVlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSB3b3JrIHRyZWUnIFwKKyAgICAnc2VkIC1lICdzL0hPV0VWRVIvSG93ZXZlci8nIDxDT1BZSU5HID5DT1BZSU5HLjEgJiYKKyAgICBzZWQgLWUgJ3MvR1BML0cuUC5ML2cnIDxDT1BZSU5HID5DT1BZSU5HLjIgJiYKKyAgICBybSAtZiBDT1BZSU5HICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBDT1BZSU5HIENPUFlJTkcuPycKKworIyB0cmVlIGhhcyBDT1BZSU5HIGFuZCByZXpyb3YuICB3b3JrIHRyZWUgaGFzIENPUFlJTkcuMSBhbmQgQ09QWUlORy4yLAorIyBib3RoIGFyZSBzbGlnaHRseSBlZGl0ZWQsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgU28gd2Ugc2F5IHlvdQorIyBjb3B5LWFuZC1lZGl0IG9uZSwgYW5kIHJlbmFtZS1hbmQtZWRpdCB0aGUgb3RoZXIuICBXZSBkbyBub3Qgc2F5CisjIGFueXRoaW5nIGFib3V0IHJlenJvdi4KKworR0lUX0RJRkZfT1BUUz0tLXVuaWZpZWQ9MCBnaXQgZGlmZi1pbmRleCAtQyAtcCAkdHJlZSA+Y3VycmVudAorY2F0ID5leHBlY3RlZCA8PFxFT0YKK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORy4xCitjb3B5IGZyb20gQ09QWUlORworY29weSB0byBDT1BZSU5HLjEKKy0tLSBhL0NPUFlJTkcKKysrKyBiL0NPUFlJTkcuMQorQEAgLTYgKzYgQEAKKy0gSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCisrIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HLjIKK3JlbmFtZSBmcm9tIENPUFlJTkcKK3JlbmFtZSB0byBDT1BZSU5HLjIKKy0tLSBhL0NPUFlJTkcKKysrKyBiL0NPUFlJTkcuMgorQEAgLTIgKzIgQEAKKy0gTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEdQTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0CisrIE5vdGUgdGhhdCB0aGUgb25seSB2YWxpZCB2ZXJzaW9uIG9mIHRoZSBHLlAuTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0CitAQCAtNiArNiBAQAorLSBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKKysgSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gRy5QLkx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKK0BAIC0xMiArMTIgQEAKKy0JVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgorKwlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEcuUC5MIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMSknIFwKKyAgICAnY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHdvcmsgdHJlZSBhZ2FpbicgXAorICAgICdtdiBDT1BZSU5HLjIgQ09QWUlORyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4xIENPUFlJTkcuMicKKworIyB0cmVlIGhhcyBDT1BZSU5HIGFuZCByZXpyb3YuICB3b3JrIHRyZWUgaGFzIENPUFlJTkcgYW5kIENPUFlJTkcuMSwKKyMgYm90aCBhcmUgc2xpZ2h0bHkgZWRpdGVkLCBhbmQgdW5jaGFuZ2VkIHJlenJvdi4gIFNvIHdlIHNheSB5b3UKKyMgZWRpdGVkIG9uZSwgYW5kIGNvcHktYW5kLWVkaXQgdGhlIG90aGVyLiAgV2UgZG8gbm90IHNheQorIyBhbnl0aGluZyBhYm91dCByZXpyb3YuCisKK0dJVF9ESUZGX09QVFM9LS11bmlmaWVkPTAgZ2l0IGRpZmYtaW5kZXggLUMgLXAgJHRyZWUgPmN1cnJlbnQKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKKy0tLSBhL0NPUFlJTkcKKysrKyBiL0NPUFlJTkcKK0BAIC0yICsyIEBACistIE5vdGUgdGhhdCB0aGUgb25seSB2YWxpZCB2ZXJzaW9uIG9mIHRoZSBHUEwgYXMgZmFyIGFzIHRoaXMgcHJvamVjdAorKyBOb3RlIHRoYXQgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBvZiB0aGUgRy5QLkwgYXMgZmFyIGFzIHRoaXMgcHJvamVjdAorQEAgLTYgKzYgQEAKKy0gSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCisrIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEcuUC5MdjMgaWYgdGhhdCBzZWVtcyBsaWtlCitAQCAtMTIgKzEyIEBACistCVRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KKysJVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHLlAuTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcuMQorY29weSBmcm9tIENPUFlJTkcKK2NvcHkgdG8gQ09QWUlORy4xCistLS0gYS9DT1BZSU5HCisrKysgYi9DT1BZSU5HLjEKK0BAIC02ICs2IEBACistIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorKyBIb3dldmVyLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMiknIFwKKyAgICAnY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHdvcmsgdHJlZSBvbmNlIGFnYWluJyBcCisgICAgJ2NhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID5DT1BZSU5HICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgQ09QWUlORyBDT1BZSU5HLjEnCisKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyBDT1BZSU5HIGFuZCBDT1BZSU5HLjEsCisjIGJ1dCBDT1BZSU5HIGlzIG5vdCBlZGl0ZWQuICBXZSBzYXkgeW91IGNvcHktYW5kLWVkaXQgQ09QWUlORy4xOyB0aGlzCisjIGlzIG9ubHkgcG9zc2libGUgYmVjYXVzZSAtQyBtb2RlIG5vdyByZXBvcnRzIHRoZSB1bm1vZGlmaWVkIGZpbGUgdG8KKyMgdGhlIGRpZmYtY29yZS4gIFVuY2hhbmdlZCByZXpyb3YsIGFsdGhvdWdoIGJlaW5nIGZlZCB0bworIyBnaXQgZGlmZi1pbmRleCBhcyB3ZWxsLCBzaG91bGQgbm90IGJlIG1lbnRpb25lZC4KKworR0lUX0RJRkZfT1BUUz0tLXVuaWZpZWQ9MCBcCisgICAgZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXAgJHRyZWUgPmN1cnJlbnQKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcuMQorY29weSBmcm9tIENPUFlJTkcKK2NvcHkgdG8gQ09QWUlORy4xCistLS0gYS9DT1BZSU5HCisrKysgYi9DT1BZSU5HLjEKK0BAIC02ICs2IEBACistIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorKyBIb3dldmVyLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMyknIFwKKyAgICAnY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwNC1kaWZmLXJlbmFtZS1zeW1saW5rLnNoIGIvdC90NDAwNC1kaWZmLXJlbmFtZS1zeW1saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlNTYyYzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDA0LWRpZmYtcmVuYW1lLXN5bWxpbmsuc2gKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdNb3JlIHJlbmFtZSBkZXRlY3Rpb24gdGVzdHMuCisKK1RoZSByZW5hbWUgZGV0ZWN0aW9uIGxvZ2ljIHNob3VsZCBiZSBhYmxlIHRvIGRldGVjdCBwdXJlIHJlbmFtZSBvcgorY29weSBvZiBzeW1ib2xpYyBsaW5rcywgYnV0IHNob3VsZCBub3QgcHJvZHVjZSByZW5hbWUvY29weSBmb2xsb3dlZAorYnkgYW4gZWRpdCBmb3IgdGhlbS4KKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKKyAgICAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgXAorICAgICdlY2hvIHh5enp5IHwgdHIgLWQgJ1xcXFwnMDEyID55b21pbiAmJgorICAgICBsbiAtcyB4eXp6eSBmcm90eiAmJgorICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogeW9taW4gJiYKKyAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgZWNobyAkdHJlZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCisgICAgJ3ByZXBhcmUgd29yayB0cmVlJyBcCisgICAgJ212IGZyb3R6IHJlenJvdiAmJgorICAgICBybSAtZiB5b21pbiAmJgorICAgICBsbiAtcyB4eXp6eSBuaXRmb2wgJiYKKyAgICAgbG4gLXMgeHp6enkgYm96YmFyICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBmcm90eiByZXpyb3Ygbml0Zm9sIGJvemJhciB5b21pbicKKworIyB0cmVlIGhhcyBmcm90eiBwb2ludGluZyBhdCB4eXp6eSwgYW5kIHlvbWluIHRoYXQgY29udGFpbnMgeHl6enkgdG8KKyMgY29uZnVzZSB0aGluZ3MuICB3b3JrIHRyZWUgaGFzIHJlenJvdiAoeHl6enkpIG5pdGZvbCAoeHl6enkpIGFuZAorIyBib3piYXIgKHh6enp5KS4KKyMgcmV6cm92IGFuZCBuaXRmb2wgYXJlIHJlbmFtZS9jb3B5IG9mIGZyb3R6IGFuZCBib3piYXIgc2hvdWxkIGJlCisjIGEgbmV3IGNyZWF0aW9uLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzZXR1cCBkaWZmIG91dHB1dCcgIgorICAgIEdJVF9ESUZGX09QVFM9LS11bmlmaWVkPTAgZ2l0IGRpZmYtaW5kZXggLUMgLXAgJHRyZWUgPmN1cnJlbnQgJiYKKyAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRgorZGlmZiAtLWdpdCBhL2JvemJhciBiL2JvemJhcgorbmV3IGZpbGUgbW9kZSAxMjAwMDAKKy0tLSAvZGV2L251bGwKKysrKyBiL2JvemJhcgorQEAgLTAsMCArMSBAQAorK3h6enp5CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9mcm90eiBiL25pdGZvbAorc2ltaWxhcml0eSBpbmRleCAxMDAlCitjb3B5IGZyb20gZnJvdHoKK2NvcHkgdG8gbml0Zm9sCitkaWZmIC0tZ2l0IGEvZnJvdHogYi9yZXpyb3YKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gZnJvdHoKK3JlbmFtZSB0byByZXpyb3YKK2RpZmYgLS1naXQgYS95b21pbiBiL3lvbWluCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKy0tLSBhL3lvbWluCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACisteHl6enkKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgXAorICAgICd2YWxpZGF0ZSBkaWZmIG91dHB1dCcgXAorICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDA1LWRpZmYtcmVuYW1lLTIuc2ggYi90L3Q0MDA1LWRpZmYtcmVuYW1lLTIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzdkN2Y0OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDUtZGlmZi1yZW5hbWUtMi5zaApAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1NhbWUgcmVuYW1lIGRldGVjdGlvbiBhcyB0NDAwMyBidXQgdGVzdGluZyBkaWZmLXJhdy4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoIDsjIHRlc3QtbGliIGNoZGlyJ3MgaW50byB0cmFzaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgXAorICAgICdjYXQgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyA+Q09QWUlORyAmJgorICAgICBlY2hvIGZyb3R6ID5yZXpyb3YgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIENPUFlJTkcgcmV6cm92ICYmCisgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgIGVjaG8gJHRyZWUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHdvcmsgdHJlZScgXAorICAgICdzZWQgLWUgJ3MvSE9XRVZFUi9Ib3dldmVyLycgPENPUFlJTkcgPkNPUFlJTkcuMSAmJgorICAgIHNlZCAtZSAncy9HUEwvRy5QLkwvZycgPENPUFlJTkcgPkNPUFlJTkcuMiAmJgorICAgIHJtIC1mIENPUFlJTkcgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4/JworCisjIHRyZWUgaGFzIENPUFlJTkcgYW5kIHJlenJvdi4gIHdvcmsgdHJlZSBoYXMgQ09QWUlORy4xIGFuZCBDT1BZSU5HLjIsCisjIGJvdGggYXJlIHNsaWdodGx5IGVkaXRlZCwgYW5kIHVuY2hhbmdlZCByZXpyb3YuICBXZSBzYXkgQ09QWUlORy4xCisjIGFuZCBDT1BZSU5HLjIgYXJlIGJhc2VkIG9uIENPUFlJTkcsIGFuZCBkbyBub3Qgc2F5IGFueXRoaW5nIGFib3V0CisjIHJlenJvdi4KKworZ2l0IGRpZmYtaW5kZXggLUMgJHRyZWUgPmN1cnJlbnQKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKzoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgMDYwM2IzMjM4YTA3NmRjNmM4MDIyYWVkYzY2NDhmYTUyM2ExNzE3OCBDMTIzNAlDT1BZSU5HCUNPUFlJTkcuMQorOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyAwNmM2Nzk2MWJiYWVkMzRhMTI3Zjc2ZDI2MWY0YzBiZjczZWRhNDcxIFIxMjM0CUNPUFlJTkcJQ09QWUlORy4yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIHJlbmFtZS9jb3B5IGRldGVjdGlvbiAoIzEpJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSB3b3JrIHRyZWUgYWdhaW4nIFwKKyAgICAnbXYgQ09QWUlORy4yIENPUFlJTkcgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBDT1BZSU5HIENPUFlJTkcuMSBDT1BZSU5HLjInCisKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyBDT1BZSU5HIGFuZCBDT1BZSU5HLjEsCisjIGJvdGggYXJlIHNsaWdodGx5IGVkaXRlZCwgYW5kIHVuY2hhbmdlZCByZXpyb3YuICBXZSBzYXkgQ09QWUlORy4xCisjIGlzIGJhc2VkIG9uIENPUFlJTkcgYW5kIENPUFlJTkcgaXMgc3RpbGwgdGhlcmUsIGFuZCBkbyBub3Qgc2F5IGFueXRoaW5nCisjIGFib3V0IHJlenJvdi4KKworZ2l0IGRpZmYtaW5kZXggLUMgJHRyZWUgPmN1cnJlbnQKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDA2YzY3OTYxYmJhZWQzNGExMjdmNzZkMjYxZjRjMGJmNzNlZGE0NzEgTQlDT1BZSU5HCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDA2MDNiMzIzOGEwNzZkYzZjODAyMmFlZGM2NjQ4ZmE1MjNhMTcxNzggQzEyMzQJQ09QWUlORwlDT1BZSU5HLjEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMiknIFwKKyAgICAnY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyB0aGUgc2FtZSBDT1BZSU5HIGFuZAorIyBjb3B5LWVkaXRlZCBDT1BZSU5HLjEsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgV2Ugc2hvdWxkIG5vdCBzYXkKKyMgYW55dGhpbmcgYWJvdXQgcmV6cm92IG5vciBDT1BZSU5HLCBzaW5jZSB0aGUgcmV2aXNlZCBhZ2FpbiBkaWZmLXJhdworIyBub3dzIGhvdyB0byBzYXkgQ29weS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgd29yayB0cmVlIG9uY2UgYWdhaW4nIFwKKyAgICAnY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPkNPUFlJTkcgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBDT1BZSU5HIENPUFlJTkcuMScKKworZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgJHRyZWUgPmN1cnJlbnQKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDA2MDNiMzIzOGEwNzZkYzZjODAyMmFlZGM2NjQ4ZmE1MjNhMTcxNzggQzEyMzQJQ09QWUlORwlDT1BZSU5HLjEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMyknIFwKKyAgICAnY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDYtZGlmZi1tb2RlLnNoIGIvdC90NDAwNi1kaWZmLW1vZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2Q0YjFiYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDYtZGlmZi1tb2RlLnNoCkBAIC0wLDAgKzEsNTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBtb2RlIGNoYW5nZSBkaWZmcy4KKworJworLiAuL3Rlc3QtbGliLnNoCisKK3NlZF9zY3JpcHQ9J3MvXCg6MTAwNjQ0IDEwMDc1NVwpIFwoJyIkX3g0MCInXCkgXDIgL1wxIFggWCAvJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gZnJvdHogPnJlenJvdiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisJdHJlZT1gZ2l0IHdyaXRlLXRyZWVgICYmCisJZWNobyAkdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaG1vZCcgJworCXRlc3RfY2htb2QgK3ggcmV6cm92ICYmCisJZ2l0IGRpZmYtaW5kZXggJHRyZWUgPmN1cnJlbnQgJiYKKwlzZWQgLWUgIiRzZWRfc2NyaXB0IiA8Y3VycmVudCA+Y2hlY2sgJiYKKwllY2hvICI6MTAwNjQ0IDEwMDc1NSBYIFggTQlyZXpyb3YiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgYmluYXJ5IGZpbGUnICcKKwlnaXQgY29tbWl0IC1tIHJlenJvdiAmJgorCXByaW50ZiAiXDAwXDAxXDAyXDAzXDA0XDA1XDA2IiA+YmluYmluICYmCisJZ2l0IGFkZCBiaW5iaW4gJiYKKwlnaXQgY29tbWl0IC1tIGJpbmJpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0YXQgb3V0cHV0IGFmdGVyIHRleHQgY2htb2QnICcKKwl0ZXN0X2NobW9kIC14IHJlenJvdiAmJgorCWVjaG8gIiAwIGZpbGVzIGNoYW5nZWQiID5leHBlY3QgJiYKKwlnaXQgZGlmZiBIRUFEIC0tc3RhdCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG9ydHN0YXQgb3V0cHV0IGFmdGVyIHRleHQgY2htb2QnICcKKwlnaXQgZGlmZiBIRUFEIC0tc2hvcnRzdGF0ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0YXQgb3V0cHV0IGFmdGVyIGJpbmFyeSBjaG1vZCcgJworCXRlc3RfY2htb2QgK3ggYmluYmluICYmCisJZWNobyAiIDAgZmlsZXMgY2hhbmdlZCIgPmV4cGVjdCAmJgorCWdpdCBkaWZmIEhFQUQgLS1zdGF0ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3J0c3RhdCBvdXRwdXQgYWZ0ZXIgYmluYXJ5IGNobW9kJyAnCisJZ2l0IGRpZmYgSEVBRCAtLXNob3J0c3RhdCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDA3LXJlbmFtZS0zLnNoIGIvdC90NDAwNy1yZW5hbWUtMy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTUwMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwNy1yZW5hbWUtMy5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1JlbmFtZSBpbnRlcmFjdGlvbiB3aXRoIHBhdGhzcGVjLgorCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2ggOyMgdGVzdC1saWIgY2hkaXIncyBpbnRvIHRyYXNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgcmVmZXJlbmNlIHRyZWUnICcKKwlta2RpciBwYXRoMCBwYXRoMSAmJgorCWNwICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgcGF0aDAvQ09QWUlORyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAvQ09QWUlORyAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvICR0cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgd29yayB0cmVlJyAnCisJY3AgcGF0aDAvQ09QWUlORyBwYXRoMS9DT1BZSU5HICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBwYXRoMC9DT1BZSU5HIHBhdGgxL0NPUFlJTkcKKycKKworIyBJbiB0aGUgdHJlZSwgdGhlcmUgaXMgb25seSBwYXRoMC9DT1BZSU5HLiAgSW4gdGhlIGNhY2hlLCBwYXRoMCBhbmQKKyMgcGF0aDEgYm90aCBoYXZlIENPUFlJTkcgYW5kIHRoZSBsYXR0ZXIgaXMgYSBjb3B5IG9mIHBhdGgwL0NPUFlJTkcuCisjIENvbXBhcmluZyB0aGUgZnVsbCB0cmVlIHdpdGggY2FjaGUgc2hvdWxkIHRlbGwgdXMgc28uCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgQzEwMAlwYXRoMC9DT1BZSU5HCXBhdGgxL0NPUFlJTkcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IGRldGVjdGlvbicgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgZGV0ZWN0aW9uLCBjYWNoZWQnICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtLWNhY2hlZCAkdHJlZSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJworCisjIEluIHRoZSB0cmVlLCB0aGVyZSBpcyBvbmx5IHBhdGgwL0NPUFlJTkcuICBJbiB0aGUgY2FjaGUsIHBhdGgwIGFuZAorIyBwYXRoMSBib3RoIGhhdmUgQ09QWUlORyBhbmQgdGhlIGxhdHRlciBpcyBhIGNvcHkgb2YgcGF0aDAvQ09QWUlORy4KKyMgSG93ZXZlciB3aGVuIHdlIHNheSB3ZSBjYXJlIG9ubHkgYWJvdXQgcGF0aDEsIHdlIHNob3VsZCBqdXN0IHNlZQorIyBwYXRoMS9DT1BZSU5HIHN1ZGRlbmx5IGFwcGVhcmluZyBmcm9tIG5vd2hlcmUsIG5vdCBkZXRlY3RlZCBhcworIyBhIGNvcHkgZnJvbSBwYXRoMC9DT1BZSU5HLgorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIEEJcGF0aDEvQ09QWUlORworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHksIGxpbWl0ZWQgdG8gYSBzdWJ0cmVlJyAnCisJZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgJHRyZWUgcGF0aDEgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdlYWsgd29yayB0cmVlJyAnCisJcm0gLWYgcGF0aDAvQ09QWUlORyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgcGF0aDAvQ09QWUlORworJworIyBJbiB0aGUgdHJlZSwgdGhlcmUgaXMgb25seSBwYXRoMC9DT1BZSU5HLiAgSW4gdGhlIGNhY2hlLCBwYXRoMCBkb2VzCisjIG5vdCBoYXZlIENPUFlJTkcgYW55bW9yZSBhbmQgcGF0aDEgaGFzIENPUFlJTkcgd2hpY2ggaXMgYSBjb3B5IG9mCisjIHBhdGgwL0NPUFlJTkcuICBTaG93aW5nIHRoZSBmdWxsIHRyZWUgd2l0aCBjYWNoZSBzaG91bGQgdGVsbCB1cyBhYm91dAorIyB0aGUgcmVuYW1lLgorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIFIxMDAJcGF0aDAvQ09QWUlORwlwYXRoMS9DT1BZSU5HCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGRldGVjdGlvbicgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCisKKyMgSW4gdGhlIHRyZWUsIHRoZXJlIGlzIG9ubHkgcGF0aDAvQ09QWUlORy4gIEluIHRoZSBjYWNoZSwgcGF0aDAgZG9lcworIyBub3QgaGF2ZSBDT1BZSU5HIGFueW1vcmUgYW5kIHBhdGgxIGhhcyBDT1BZSU5HIHdoaWNoIGlzIGEgY29weSBvZgorIyBwYXRoMC9DT1BZSU5HLiAgV2hlbiB3ZSBzYXkgd2UgY2FyZSBvbmx5IGFib3V0IHBhdGgxLCB3ZSBzaG91bGQganVzdAorIyBzZWUgcGF0aDEvQ09QWUlORyBhcHBlYXJpbmcgZnJvbSBub3doZXJlLgorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIEEJcGF0aDEvQ09QWUlORworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSwgbGltaXRlZCB0byBhIHN1YnRyZWUnICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkdHJlZSBwYXRoMSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDgtZGlmZi1icmVhay1yZXdyaXRlLnNoIGIvdC90NDAwOC1kaWZmLWJyZWFrLXJld3JpdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzNiNGEyNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDgtZGlmZi1icmVhay1yZXdyaXRlLnNoCkBAIC0wLDAgKzEsMTg4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J0JyZWFrIGFuZCB0aGVuIHJlbmFtZQorCitXZSBoYXZlIHR3byB2ZXJ5IGRpZmZlcmVudCBmaWxlcywgZmlsZTAgYW5kIGZpbGUxLCByZWdpc3RlcmVkIGluIGEgdHJlZS4KKworV2UgdXBkYXRlIGZpbGUxIHNvIGRyYXN0aWNhbGx5IHRoYXQgaXQgaXMgbW9yZSBzaW1pbGFyIHRvIGZpbGUwLCBhbmQKK3RoZW4gcmVtb3ZlIGZpbGUwLiAgV2l0aCAtQiwgY2hhbmdlcyB0byBmaWxlMSBzaG91bGQgYmUgYnJva2VuIGludG8KK3NlcGFyYXRlIGRlbGV0ZSBhbmQgY3JlYXRlLCByZXN1bHRpbmcgaW4gcmVtb3ZhbCBvZiBmaWxlMCwgcmVtb3ZhbCBvZgorb3JpZ2luYWwgZmlsZTEgYW5kIGNyZWF0aW9uIG9mIGNvbXBsZXRlbHkgcmV3cml0dGVuIGZpbGUxLgorCitGdXJ0aGVyLCB3aXRoIC1CIGFuZCAtTSB0b2dldGhlciwgdGhlc2UgdGhyZWUgbW9kaWZpY2F0aW9ucyBzaG91bGQKK3R1cm4gaW50byByZW5hbWUtZWRpdCBvZiBmaWxlMCBpbnRvIGZpbGUxLgorCitTdGFydGluZyBmcm9tIHRoZSBzYW1lIHR3byBmaWxlcyBpbiB0aGUgdHJlZSwgd2Ugc3dhcCBmaWxlMCBhbmQgZmlsZTEuCitXaXRoIC1CLCB0aGlzIHNob3VsZCBiZSBkZXRlY3RlZCBhcyB0d28gY29tcGxldGUgcmV3cml0ZXMsIHJlc3VsdGluZyBpbgorZm91ciBjaGFuZ2VzIGluIHRvdGFsLgorCitGdXJ0aGVyLCB3aXRoIC1CIGFuZCAtTSB0b2dldGhlciwgdGhlc2Ugc2hvdWxkIHR1cm4gaW50byB0d28gcmVuYW1lcy4KKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgc2V0dXAgXAorICAgICdjYXQgIiRURVNUX0RJUkVDVE9SWSIvLi4vUkVBRE1FID5maWxlMCAmJgorICAgICBjYXQgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyA+ZmlsZTEgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUwIGZpbGUxICYmCisgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgIGVjaG8gIiR0cmVlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoYW5nZSBmaWxlMSB3aXRoIGNvcHktZWRpdCBvZiBmaWxlMCBhbmQgcmVtb3ZlIGZpbGUwJyBcCisgICAgJ3NlZCAtZSAicy9naXQvR0lULyIgZmlsZTAgPmZpbGUxICYmCisgICAgIHJtIC1mIGZpbGUwICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBmaWxlMCBmaWxlMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3J1biBkaWZmIHdpdGggLUInIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLUIgLS1jYWNoZWQgIiR0cmVlIiA+Y3VycmVudCcKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKzoxMDA2NDQgMDAwMDAwIGY1ZGVhYzdiZTU5ZTdlZWFiODY1N2ZkOWFlNzA2ZmQ2YTU3ZGFlZDIgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGUwCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDExZTMzMTQ2NWE4OWMzOTRkYzI1Yzc4MGRlMjMwMDQzNzUwYzFlYzggTTEwMAlmaWxlMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSByZXN1bHQgb2YgLUIgKCMxKScgXAorICAgICdjb21wYXJlX2RpZmZfcmF3IGV4cGVjdGVkIGN1cnJlbnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdydW4gZGlmZiB3aXRoIC1CIGFuZCAtTScgXAorICAgICdnaXQgZGlmZi1pbmRleCAtQiAtTSAiJHRyZWUiID5jdXJyZW50JworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjEwMDY0NCAxMDA2NDQgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiAwOGJiMmZiNjcxZGVmZjRjMDNhNGQ0YTBhMTMxNWRmZjk4ZDU3MzJjIFIxMDAJZmlsZTAJZmlsZTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgcmVzdWx0IG9mIC1CIC1NICgjMiknIFwKKyAgICAnY29tcGFyZV9kaWZmX3JhdyBleHBlY3RlZCBjdXJyZW50JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc3dhcCBmaWxlMCBhbmQgZmlsZTEnIFwKKyAgICAncm0gLWYgZmlsZTAgZmlsZTEgJiYKKyAgICAgZ2l0IHJlYWQtdHJlZSAtbSAkdHJlZSAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgLWEgJiYKKyAgICAgbXYgZmlsZTAgdG1wICYmCisgICAgIG12IGZpbGUxIGZpbGUwICYmCisgICAgIG12IHRtcCBmaWxlMSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IGZpbGUwIGZpbGUxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncnVuIGRpZmYgd2l0aCAtQicgXAorICAgICdnaXQgZGlmZi1pbmRleCAtQiAiJHRyZWUiID5jdXJyZW50JworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjEwMDY0NCAxMDA2NDQgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIE0xMDAJZmlsZTAKKzoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiBNMTAwCWZpbGUxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIHJlc3VsdCBvZiAtQiAoIzMpJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9yYXcgZXhwZWN0ZWQgY3VycmVudCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3J1biBkaWZmIHdpdGggLUIgYW5kIC1NJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC1CIC1NICIkdHJlZSIgPmN1cnJlbnQnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgUjEwMAlmaWxlMQlmaWxlMAorOjEwMDY0NCAxMDA2NDQgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiBmNWRlYWM3YmU1OWU3ZWVhYjg2NTdmZDlhZTcwNmZkNmE1N2RhZWQyIFIxMDAJZmlsZTAJZmlsZTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgcmVzdWx0IG9mIC1CIC1NICgjNCknIFwKKyAgICAnY29tcGFyZV9kaWZmX3JhdyBleHBlY3RlZCBjdXJyZW50JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKKyAgICAnbWFrZSBmaWxlMCBpbnRvIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCcgXAorICAgICdybSAtZiBmaWxlMCAmJgorICAgICBsbiAtcyBmcm90eiBmaWxlMCAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IGZpbGUwIGZpbGUxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncnVuIGRpZmYgd2l0aCAtQicgXAorICAgICdnaXQgZGlmZi1pbmRleCAtQiAiJHRyZWUiID5jdXJyZW50JworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjEwMDY0NCAxMjAwMDAgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiA2N2JlNDIxZjg4ODI0NTc4ODU3NjI0ZjdiM2RjNzVlOTlhOGExNDgxIFQJZmlsZTAKKzoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiBNMTAwCWZpbGUxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCisgICAgJ3ZhbGlkYXRlIHJlc3VsdCBvZiAtQiAoIzUpJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9yYXcgZXhwZWN0ZWQgY3VycmVudCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3J1biBkaWZmIHdpdGggLUIgLU0nIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLUIgLU0gIiR0cmVlIiA+Y3VycmVudCcKKworIyBmaWxlMCBjaGFuZ2VkIGZyb20gcmVndWxhciB0byBzeW1saW5rLiAgZmlsZTEgaXMgdmVyeSBjbG9zZSB0byB0aGUgcHJlaW1hZ2Ugb2YgZmlsZTAuCisjIGJlY2F1c2Ugd2UgYnJlYWsgZmlsZTAsIGZpbGUxIGNhbiBiZWNvbWUgYSByZW5hbWUgb2YgaXQuCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjEwMDY0NCAxMjAwMDAgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiA2N2JlNDIxZjg4ODI0NTc4ODU3NjI0ZjdiM2RjNzVlOTlhOGExNDgxIFQJZmlsZTAKKzoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiBSCWZpbGUwCWZpbGUxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCisgICAgJ3ZhbGlkYXRlIHJlc3VsdCBvZiAtQiAtTSAoIzYpJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9yYXcgZXhwZWN0ZWQgY3VycmVudCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3J1biBkaWZmIHdpdGggLU0nIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLU0gIiR0cmVlIiA+Y3VycmVudCcKKworIyBUaGlzIHNob3VsZCBub3QgbWlzdGFrZSBmaWxlMCBhcyB0aGUgY29weSBzb3VyY2Ugb2YgbmV3IGZpbGUxCisjIGR1ZSB0byB0eXBlIGRpZmZlcmVuY2VzLgorY2F0ID5leHBlY3RlZCA8PFxFT0YKKzoxMDA2NDQgMTIwMDAwIGY1ZGVhYzdiZTU5ZTdlZWFiODY1N2ZkOWFlNzA2ZmQ2YTU3ZGFlZDIgNjdiZTQyMWY4ODgyNDU3ODg1NzYyNGY3YjNkYzc1ZTk5YThhMTQ4MSBUCWZpbGUwCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIGY1ZGVhYzdiZTU5ZTdlZWFiODY1N2ZkOWFlNzA2ZmQ2YTU3ZGFlZDIgTQlmaWxlMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgXAorICAgICd2YWxpZGF0ZSByZXN1bHQgb2YgLU0gKCM3KScgXAorICAgICdjb21wYXJlX2RpZmZfcmF3IGV4cGVjdGVkIGN1cnJlbnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdmaWxlMSBlZGl0ZWQgdG8gbG9vayBsaWtlIGZpbGUwIGFuZCBmaWxlMCByZW5hbWUtZWRpdGVkIHRvIGZpbGUyJyBcCisgICAgJ3JtIC1mIGZpbGUwIGZpbGUxICYmCisgICAgIGdpdCByZWFkLXRyZWUgLW0gJHRyZWUgJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IC1hICYmCisgICAgIHNlZCAtZSAicy9naXQvR0lULyIgZmlsZTAgPmZpbGUxICYmCisgICAgIHNlZCAtZSAicy9naXQvR0VULyIgZmlsZTAgPmZpbGUyICYmCisgICAgIHJtIC1mIGZpbGUwICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgZmlsZTAgZmlsZTEgZmlsZTInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdydW4gZGlmZiB3aXRoIC1CJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC1CICIkdHJlZSIgPmN1cnJlbnQnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDAwMDAwMCBmNWRlYWM3YmU1OWU3ZWVhYjg2NTdmZDlhZTcwNmZkNmE1N2RhZWQyIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlmaWxlMAorOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyAwOGJiMmZiNjcxZGVmZjRjMDNhNGQ0YTBhMTMxNWRmZjk4ZDU3MzJjIE0xMDAJZmlsZTEKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZjVkZWFjN2JlNTllN2VlYWI4NjU3ZmQ5YWU3MDZmZDZhNTdkYWVkMiBBCWZpbGUyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIHJlc3VsdCBvZiAtQiAoIzgpJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9yYXcgZXhwZWN0ZWQgY3VycmVudCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3J1biBkaWZmIHdpdGggLUIgLUMnIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLUIgLUMgIiR0cmVlIiA+Y3VycmVudCcKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKzoxMDA2NDQgMTAwNjQ0IGY1ZGVhYzdiZTU5ZTdlZWFiODY1N2ZkOWFlNzA2ZmQ2YTU3ZGFlZDIgMDhiYjJmYjY3MWRlZmY0YzAzYTRkNGEwYTEzMTVkZmY5OGQ1NzMyYyBDMDk1CWZpbGUwCWZpbGUxCis6MTAwNjQ0IDEwMDY0NCBmNWRlYWM3YmU1OWU3ZWVhYjg2NTdmZDlhZTcwNmZkNmE1N2RhZWQyIDU5ZjgzMmU1YzhiM2Y3ZTQ4NmJlMTVhZDBjZDNlOTViYTlhZjg5OTggUjA5NQlmaWxlMAlmaWxlMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSByZXN1bHQgb2YgLUIgLU0gKCM5KScgXAorICAgICdjb21wYXJlX2RpZmZfcmF3IGV4cGVjdGVkIGN1cnJlbnQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwOS1kaWZmLXJlbmFtZS00LnNoIGIvdC90NDAwOS1kaWZmLXJlbmFtZS00LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyMmM4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDA5LWRpZmYtcmVuYW1lLTQuc2gKQEAgLTAsMCArMSw5NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdTYW1lIHJlbmFtZSBkZXRlY3Rpb24gYXMgdDQwMDMgYnV0IHRlc3RpbmcgZGlmZi1yYXcgLXouCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgcmVmZXJlbmNlIHRyZWUnIFwKKyAgICAnY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPkNPUFlJTkcgJiYKKyAgICAgZWNobyBmcm90eiA+cmV6cm92ICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBDT1BZSU5HIHJlenJvdiAmJgorICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICBlY2hvICR0cmVlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSB3b3JrIHRyZWUnIFwKKyAgICAnc2VkIC1lICdzL0hPV0VWRVIvSG93ZXZlci8nIDxDT1BZSU5HID5DT1BZSU5HLjEgJiYKKyAgICBzZWQgLWUgJ3MvR1BML0cuUC5ML2cnIDxDT1BZSU5HID5DT1BZSU5HLjIgJiYKKyAgICBybSAtZiBDT1BZSU5HICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBDT1BZSU5HIENPUFlJTkcuPycKKworIyB0cmVlIGhhcyBDT1BZSU5HIGFuZCByZXpyb3YuICB3b3JrIHRyZWUgaGFzIENPUFlJTkcuMSBhbmQgQ09QWUlORy4yLAorIyBib3RoIGFyZSBzbGlnaHRseSBlZGl0ZWQsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgV2Ugc2F5IENPUFlJTkcuMQorIyBhbmQgQ09QWUlORy4yIGFyZSBiYXNlZCBvbiBDT1BZSU5HLCBhbmQgZG8gbm90IHNheSBhbnl0aGluZyBhYm91dAorIyByZXpyb3YuCisKK2dpdCBkaWZmLWluZGV4IC16IC1DICR0cmVlID5jdXJyZW50CisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDA2MDNiMzIzOGEwNzZkYzZjODAyMmFlZGM2NjQ4ZmE1MjNhMTcxNzggQzEyMzQKK0NPUFlJTkcKK0NPUFlJTkcuMQorOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyAwNmM2Nzk2MWJiYWVkMzRhMTI3Zjc2ZDI2MWY0YzBiZjczZWRhNDcxIFIxMjM0CitDT1BZSU5HCitDT1BZSU5HLjIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMSknIFwKKyAgICAnY29tcGFyZV9kaWZmX3Jhd196IGN1cnJlbnQgZXhwZWN0ZWQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgd29yayB0cmVlIGFnYWluJyBcCisgICAgJ212IENPUFlJTkcuMiBDT1BZSU5HICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgQ09QWUlORyBDT1BZSU5HLjEgQ09QWUlORy4yJworCisjIHRyZWUgaGFzIENPUFlJTkcgYW5kIHJlenJvdi4gIHdvcmsgdHJlZSBoYXMgQ09QWUlORyBhbmQgQ09QWUlORy4xLAorIyBib3RoIGFyZSBzbGlnaHRseSBlZGl0ZWQsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgV2Ugc2F5IENPUFlJTkcuMQorIyBpcyBiYXNlZCBvbiBDT1BZSU5HIGFuZCBDT1BZSU5HIGlzIHN0aWxsIHRoZXJlLCBhbmQgZG8gbm90IHNheSBhbnl0aGluZworIyBhYm91dCByZXpyb3YuCisKK2dpdCBkaWZmLWluZGV4IC16IC1DICR0cmVlID5jdXJyZW50CitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyAwNmM2Nzk2MWJiYWVkMzRhMTI3Zjc2ZDI2MWY0YzBiZjczZWRhNDcxIE0KK0NPUFlJTkcKKzoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgMDYwM2IzMjM4YTA3NmRjNmM4MDIyYWVkYzY2NDhmYTUyM2ExNzE3OCBDMTIzNAorQ09QWUlORworQ09QWUlORy4xCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIHJlbmFtZS9jb3B5IGRldGVjdGlvbiAoIzIpJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9yYXdfeiBjdXJyZW50IGV4cGVjdGVkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyB0aGUgc2FtZSBDT1BZSU5HIGFuZAorIyBjb3B5LWVkaXRlZCBDT1BZSU5HLjEsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgV2Ugc2hvdWxkIG5vdCBzYXkKKyMgYW55dGhpbmcgYWJvdXQgcmV6cm92IG5vciBDT1BZSU5HLCBzaW5jZSB0aGUgcmV2aXNlZCBhZ2FpbiBkaWZmLXJhdworIyBub3dzIGhvdyB0byBzYXkgQ29weS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgd29yayB0cmVlIG9uY2UgYWdhaW4nIFwKKyAgICAnY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPkNPUFlJTkcgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBDT1BZSU5HIENPUFlJTkcuMScKKworZ2l0IGRpZmYtaW5kZXggLXogLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgJHRyZWUgPmN1cnJlbnQKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDA2MDNiMzIzOGEwNzZkYzZjODAyMmFlZGM2NjQ4ZmE1MjNhMTcxNzggQzEyMzQKK0NPUFlJTkcKK0NPUFlJTkcuMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSByZW5hbWUvY29weSBkZXRlY3Rpb24gKCMzKScgXAorICAgICdjb21wYXJlX2RpZmZfcmF3X3ogY3VycmVudCBleHBlY3RlZCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDEwLWRpZmYtcGF0aHNwZWMuc2ggYi90L3Q0MDEwLWRpZmYtcGF0aHNwZWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWY1MTM0YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTAtZGlmZi1wYXRoc3BlYy5zaApAQCAtMCwwICsxLDExMyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdQYXRoc3BlYyByZXN0cmljdGlvbnMKKworUHJlcGFyZToKKyAgICAgICAgZmlsZTAKKyAgICAgICAgcGF0aDEvZmlsZTEKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgc2V0dXAgXAorICAgICdlY2hvIGZyb3R6ID5maWxlMCAmJgorICAgICBta2RpciBwYXRoMSAmJgorICAgICBlY2hvIHJlenJvdiA+cGF0aDEvZmlsZTEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMCBwYXRoMS9maWxlMSAmJgorICAgICB0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKKyAgICAgZWNobyAiJHRyZWUiICYmCisgICAgIGVjaG8gbml0Zm9sID5maWxlMCAmJgorICAgICBlY2hvIHlvbWluID5wYXRoMS9maWxlMSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IGZpbGUwIHBhdGgxL2ZpbGUxJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGltaXQgdG8gcGF0aCBzaG91bGQgc2hvdyBub3RoaW5nJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIHBhdGggPmN1cnJlbnQgJiYKKyAgICAgY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjEwMDY0NCAxMDA2NDQgNzY2NDk4ZDkzYTRiMDYwNTdhOGU0OWQyM2Y0MDY4ZjExNzBmZjM4ZiAwYTQxZTExNWFiNjFiZTAzMjhhMTliMjlmMThjZGNiNDkzMzhkNTE2IE0JcGF0aDEvZmlsZTEKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xpbWl0IHRvIHBhdGgxIHNob3VsZCBzaG93IHBhdGgxL2ZpbGUxJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIHBhdGgxID5jdXJyZW50ICYmCisgICAgIGNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKzoxMDA2NDQgMTAwNjQ0IDc2NjQ5OGQ5M2E0YjA2MDU3YThlNDlkMjNmNDA2OGYxMTcwZmYzOGYgMGE0MWUxMTVhYjYxYmUwMzI4YTE5YjI5ZjE4Y2RjYjQ5MzM4ZDUxNiBNCXBhdGgxL2ZpbGUxCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdsaW1pdCB0byBwYXRoMS8gc2hvdWxkIHNob3cgcGF0aDEvZmlsZTEnIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWUgLS0gcGF0aDEvID5jdXJyZW50ICYmCisgICAgIGNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKzoxMDA2NDQgMTAwNjQ0IDc2NjQ5OGQ5M2E0YjA2MDU3YThlNDlkMjNmNDA2OGYxMTcwZmYzOGYgMGE0MWUxMTVhYjYxYmUwMzI4YTE5YjI5ZjE4Y2RjYjQ5MzM4ZDUxNiBNCXBhdGgxL2ZpbGUxCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICciKmZpbGUxIiBzaG91bGQgc2hvdyBwYXRoMS9maWxlMScgXAorICAgICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZSAtLSAiKmZpbGUxIiA+Y3VycmVudCAmJgorICAgICBjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA3NjY0OThkOTNhNGIwNjA1N2E4ZTQ5ZDIzZjQwNjhmMTE3MGZmMzhmIDBhNDFlMTE1YWI2MWJlMDMyOGExOWIyOWYxOGNkY2I0OTMzOGQ1MTYgTQlmaWxlMAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGltaXQgdG8gZmlsZTAgc2hvdWxkIHNob3cgZmlsZTAnIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWUgLS0gZmlsZTAgPmN1cnJlbnQgJiYKKyAgICAgY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGltaXQgdG8gZmlsZTAvIHNob3VsZCBlbWl0IG5vdGhpbmcuJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIGZpbGUwLyA+Y3VycmVudCAmJgorICAgICBjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSBwYXRoc3BlYycgJworCXRyZWUyPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyAiJHRyZWUyIiAmJgorCWdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgJHRyZWUgJHRyZWUyIC0tIHBhIHBhdGgxL2EgPmN1cnJlbnQgJiYKKwk+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK0VNUFRZX1RSRUU9NGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgd2l0aCB3aWxkY2FyZCBzaG93cyBkaXIgYWxzbyBtYXRjaGVzJyAnCisJZ2l0IGRpZmYtdHJlZSAtLW5hbWUtb25seSAkRU1QVFlfVFJFRSAkdHJlZSAtLSAiZioiID5yZXN1bHQgJiYKKwllY2hvIGZpbGUwID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLXIgd2l0aCB3aWxkY2FyZCcgJworCWdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgJEVNUFRZX1RSRUUgJHRyZWUgLS0gIipmaWxlMSIgPnJlc3VsdCAmJgorCWVjaG8gcGF0aDEvZmlsZTEgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSB3aXRoIHdpbGRjYXJkIHNob3dzIGRpciBhbHNvIG1hdGNoZXMnICcKKwlnaXQgZGlmZi10cmVlIC0tbmFtZS1vbmx5ICR0cmVlICR0cmVlMiAtLSAicGF0aDEvZioiID5yZXN1bHQgJiYKKwllY2hvIHBhdGgxID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLXIgd2l0aCB3aWxkY2FyZCBmcm9tIGJlZ2lubmluZycgJworCWdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgJHRyZWUgJHRyZWUyIC0tICJwYXRoMS8qZmlsZTEiID5yZXN1bHQgJiYKKwllY2hvIHBhdGgxL2ZpbGUxID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLXIgd2l0aCB3aWxkY2FyZCcgJworCWdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgJHRyZWUgJHRyZWUyIC0tICJwYXRoMS9mKiIgPnJlc3VsdCAmJgorCWVjaG8gcGF0aDEvZmlsZTEgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMS1kaWZmLXN5bWxpbmsuc2ggYi90L3Q0MDExLWRpZmYtc3ltbGluay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMGQ1MDQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMS1kaWZmLXN5bWxpbmsuc2gKQEAgLTAsMCArMSwxNDIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGRpZmYgb2Ygc3ltbGlua3MuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaWZmIG5ldyBzeW1saW5rIGFuZCBmaWxlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKKwluZXcgZmlsZSBtb2RlIDEyMDAwMAorCWluZGV4IDAwMDAwMDAuLjdjNDY1YWYKKwktLS0gL2Rldi9udWxsCisJKysrIGIvZnJvdHoKKwlAQCAtMCwwICsxIEBACisJK3h5enp5CisJXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisJZGlmZiAtLWdpdCBhL25pdGZvbCBiL25pdGZvbAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uN2M0NjVhZgorCS0tLSAvZGV2L251bGwKKwkrKysgYi9uaXRmb2wKKwlAQCAtMCwwICsxIEBACisJK3h5enp5CisJRU9GCisJbG4gLXMgeHl6enkgZnJvdHogJiYKKwllY2hvIHh5enp5ID5uaXRmb2wgJiYKKwlnaXQgdXBkYXRlLWluZGV4ICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogbml0Zm9sICYmCisJR0lUX0RJRkZfT1BUUz0tLXVuaWZpZWQ9MCBnaXQgZGlmZi1pbmRleCAtTSAtcCAkdHJlZSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RpZmYgdW5jaGFuZ2VkIHN5bWxpbmsgYW5kIGZpbGUnICAnCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggZnJvdHogbml0Zm9sICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSAkdHJlZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RpZmYgcmVtb3ZlZCBzeW1saW5rIGFuZCBmaWxlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKKwlkZWxldGVkIGZpbGUgbW9kZSAxMjAwMDAKKwlpbmRleCA3YzQ2NWFmLi4wMDAwMDAwCisJLS0tIGEvZnJvdHoKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS14eXp6eQorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCWRpZmYgLS1naXQgYS9uaXRmb2wgYi9uaXRmb2wKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCA3YzQ2NWFmLi4wMDAwMDAwCisJLS0tIGEvbml0Zm9sCisJKysrIC9kZXYvbnVsbAorCUBAIC0xICswLDAgQEAKKwkteHl6enkKKwlFT0YKKwltdiBmcm90eiBmcm90ejIgJiYKKwltdiBuaXRmb2wgbml0Zm9sMiAmJgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGlmZiBpZGVudGljYWwsIGJ1dCBuZXdseSBjcmVhdGVkIHN5bWxpbmsgYW5kIGZpbGUnICcKKwk+ZXhwZWN0ZWQgJiYKKwlybSAtZiBmcm90eiBuaXRmb2wgJiYKKwllY2hvIHh5enp5ID5uaXRmb2wgJiYKKwl0ZXN0LWNobXRpbWUgKzEwIG5pdGZvbCAmJgorCWxuIC1zIHh5enp5IGZyb3R6ICYmCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgY3VycmVudCAmJgorCisJPmV4cGVjdGVkICYmCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgLXcgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaWZmIGRpZmZlcmVudCBzeW1saW5rIGFuZCBmaWxlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKKwlpbmRleCA3YzQ2NWFmLi5kZjFkYjU0IDEyMDAwMAorCS0tLSBhL2Zyb3R6CisJKysrIGIvZnJvdHoKKwlAQCAtMSArMSBAQAorCS14eXp6eQorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCSt5eHl5egorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCWRpZmYgLS1naXQgYS9uaXRmb2wgYi9uaXRmb2wKKwlpbmRleCA3YzQ2NWFmLi5kZjFkYjU0IDEwMDY0NAorCS0tLSBhL25pdGZvbAorCSsrKyBiL25pdGZvbAorCUBAIC0xICsxIEBACisJLXh5enp5CisJK3l4eXl6CisJRU9GCisJcm0gLWYgZnJvdHogJiYKKwlsbiAtcyB5eHl5eiBmcm90eiAmJgorCWVjaG8geXh5eXogPm5pdGZvbCAmJgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGlmZiBzeW1saW5rcyB3aXRoIG5vbi1leGlzdGluZyB0YXJnZXRzJyAnCisJbG4gLXMgbmFyZiBwaW5reSAmJgorCWxuIC1zIHRha2VcIG92ZXIgYnJhaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IHBpbmt5IGJyYWluID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJZ3JlcCBuYXJmIG91dHB1dCAmJgorCSEgdGVzdCAtcyBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3NldHVwIHN5bWxpbmtzIHdpdGggYXR0cmlidXRlcycgJworCWVjaG8gIiouYmluIGRpZmY9YmluIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyBjb250ZW50ID5maWxlLmJpbiAmJgorCWxuIC1zIGZpbGUuYmluIGxpbmsuYmluICYmCisJZ2l0IGFkZCAtTiBmaWxlLmJpbiBsaW5rLmJpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rcyBkbyBub3QgcmVzcGVjdCB1c2VyZGlmZiBjb25maWcgYnkgcGF0aCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvZmlsZS5iaW4gYi9maWxlLmJpbgorCWluZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CisJQmluYXJ5IGZpbGVzIGEvZmlsZS5iaW4gYW5kIGIvZmlsZS5iaW4gZGlmZmVyCisJZGlmZiAtLWdpdCBhL2xpbmsuYmluIGIvbGluay5iaW4KKwlpbmRleCBlNjlkZTI5Li5kY2U0MWVjIDEyMDAwMAorCS0tLSBhL2xpbmsuYmluCisJKysrIGIvbGluay5iaW4KKwlAQCAtMCwwICsxIEBACisJK2ZpbGUuYmluCisJXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisJRU9GCisJZ2l0IGNvbmZpZyBkaWZmLmJpbi5iaW5hcnkgdHJ1ZSAmJgorCWdpdCBkaWZmIGZpbGUuYmluIGxpbmsuYmluID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMi1kaWZmLWJpbmFyeS5zaCBiL3QvdDQwMTItZGlmZi1iaW5hcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTIxNWFlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTItZGlmZi1iaW5hcnkuc2gKQEAgLTAsMCArMSwxMzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nQmluYXJ5IGRpZmYgYW5kIGFwcGx5CisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdC5iaW5hcnktbnVtc3RhdCA8PFxFT0YKKzEJMQlhCistCS0JYgorMQkxCWMKKy0JLQlkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSByZXBvc2l0b3J5JyAnCisJZWNobyBBSVQgPmEgJiYgZWNobyBCSVQgPmIgJiYgZWNobyBDSVQgPmMgJiYgZWNobyBESVQgPmQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgYiBjIGQgJiYKKwllY2hvIGdpdCA+YSAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyA+YiAmJgorCWVjaG8gZ2l0ID5jICYmCisJY2F0IGIgYiA+ZAorJworCitjYXQgPiBleHBlY3RlZCA8PFxFT0YKKyBhIHwgICAgMiArLQorIGIgfCAgQmluCisgYyB8ICAgIDIgKy0KKyBkIHwgIEJpbgorIDQgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXN0YXQgb3V0cHV0IGZvciBiaW5hcnkgZmlsZSBjaGFuZ2UnICcKKwlnaXQgZGlmZiA+ZGlmZiAmJgorCWdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXNob3J0c3RhdCBvdXRwdXQgZm9yIGJpbmFyeSBmaWxlIGNoYW5nZScgJworCXRhaWwgLW4gMSBleHBlY3RlZCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS1zaG9ydHN0YXQgPmN1cnJlbnQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXNob3J0c3RhdCBvdXRwdXQgZm9yIGJpbmFyeSBmaWxlIGNoYW5nZSBvbmx5JyAnCisJZWNobyAiIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtLXNob3J0c3RhdCAtLSBiID5jdXJyZW50ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1udW1zdGF0IG5vdGljZXMgYmluYXJ5IGZpbGUgY2hhbmdlJyAnCisJZ2l0IGRpZmYgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJpbmFyeS1udW1zdGF0IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1udW1zdGF0IHVuZGVyc3RhbmRzIGRpZmYgLS1iaW5hcnkgZm9ybWF0JyAnCisJZ2l0IGRpZmYgLS1iaW5hcnkgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJpbmFyeS1udW1zdGF0IGN1cnJlbnQKKycKKworIyBhcHBseSBuZWVkcyB0byBiZSBhYmxlIHRvIHNraXAgdGhlIGJpbmFyeSBtYXRlcmlhbCBjb3JyZWN0bHkKKyMgaW4gb3JkZXIgdG8gcmVwb3J0IHRoZSBsaW5lIG51bWJlciBvZiBhIGNvcnJ1cHQgcGF0Y2guCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnYXBwbHkgZGV0ZWN0aW5nIGNvcnJ1cHQgcGF0Y2ggY29ycmVjdGx5JyAnCisJZ2l0IGRpZmYgPm91dHB1dCAmJgorCXNlZCAtZSAicy8tQ0lUL3hDSVQvIiA8b3V0cHV0ID5icm9rZW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSBicm9rZW4gMj5kZXRlY3RlZCAmJgorCWRldGVjdGVkPWBjYXQgZGV0ZWN0ZWRgICYmCisJZGV0ZWN0ZWQ9YGV4cHIgIiRkZXRlY3RlZCIgOiAiZmF0YWwuKmF0IGxpbmUgXFwoWzAtOV0qXFwpXCQiYCAmJgorCWRldGVjdGVkPWBzZWQgLW5lICIke2RldGVjdGVkfXAiIGJyb2tlbmAgJiYKKwl0ZXN0ICIkZGV0ZWN0ZWQiID0geENJVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnYXBwbHkgZGV0ZWN0aW5nIGNvcnJ1cHQgcGF0Y2ggY29ycmVjdGx5JyAnCisJZ2l0IGRpZmYgLS1iaW5hcnkgfCBzZWQgLWUgInMvLUNJVC94Q0lULyIgPmJyb2tlbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IGJyb2tlbiAyPmRldGVjdGVkICYmCisJZGV0ZWN0ZWQ9YGNhdCBkZXRlY3RlZGAgJiYKKwlkZXRlY3RlZD1gZXhwciAiJGRldGVjdGVkIiA6ICJmYXRhbC4qYXQgbGluZSBcXChbMC05XSpcXClcJCJgICYmCisJZGV0ZWN0ZWQ9YHNlZCAtbmUgIiR7ZGV0ZWN0ZWR9cCIgYnJva2VuYCAmJgorCXRlc3QgIiRkZXRlY3RlZCIgPSB4Q0lUCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgY29tbWl0JyAnZ2l0IGNvbW1pdCAtYSAtbSBpbml0aWFsJworCisjIFRyeSByZW1vdmFsIChiKSwgbW9kaWZpY2F0aW9uIChkKSwgYW5kIGNyZWF0aW9uIChlKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggd2l0aCAtLWJpbmFyeScgJworCWVjaG8gQUlUID5hICYmIG12IGIgZSAmJiBlY2hvIENJVCA+YyAmJiBjYXQgZSA+ZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgYSBiIGMgZCBlICYmCisJdHJlZTA9YGdpdCB3cml0ZS10cmVlYCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tYmluYXJ5ID5jdXJyZW50ICYmCisJZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgcGF0Y2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFwcGx5IC0tYmluYXJ5IC0taW5kZXggPGN1cnJlbnQgJiYKKwl0cmVlMT1gZ2l0IHdyaXRlLXRyZWVgICYmCisJdGVzdCAiJHRyZWUxIiA9ICIkdHJlZTAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1uby1pbmRleCB3aXRoIGJpbmFyeSBjcmVhdGlvbicgJworCWVjaG8gUSB8IHFfdG9fbnVsID5iaW5hcnkgJiYKKwkoOiBoaWRlIGVycm9yIGNvZGUgZnJvbSBkaWZmLCB3aGljaCBqdXN0IGluZGljYXRlcyBkaWZmZXJlbmNlcworCSBnaXQgZGlmZiAtLWJpbmFyeSAtLW5vLWluZGV4IC9kZXYvbnVsbCBiaW5hcnkgPmN1cnJlbnQgfHwKKwkgdHJ1ZQorCSkgJiYKKwlybSBiaW5hcnkgJiYKKwlnaXQgYXBwbHkgLS1iaW5hcnkgPGN1cnJlbnQgJiYKKwllY2hvIFEgPmV4cGVjdGVkICYmCisJbnVsX3RvX3EgPGJpbmFyeSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisgYmluZmlsZSAgfCAgIEJpbiAwIC0+IDEwMjYgYnl0ZXMKKyB0ZXh0ZmlsZSB8IDEwMDAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tc3RhdCB3aXRoIGJpbmFyeSBmaWxlcyBhbmQgYmlnIGNoYW5nZSBjb3VudCcgJworCXByaW50ZiAiXDAxXDAwJTEwMjRkIiAxID5iaW5maWxlICYmCisJZ2l0IGFkZCBiaW5maWxlICYmCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgMTAwMDA7IGRvCisJCWVjaG8gJGkgJiYKKwkJaT0kKCgkaSArIDEpKQorCWRvbmUgPnRleHRmaWxlICYmCisJZ2l0IGFkZCB0ZXh0ZmlsZSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tc3RhdCBiaW5maWxlIHRleHRmaWxlID5vdXRwdXQgJiYKKwlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoIGIvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc3YzA5YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoCkBAIC0wLDAgKzEsMzI3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1ZhcmlvdXMgZGlmZiBmb3JtYXR0aW5nIG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitMRj0nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAwOjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowMDowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJbWtkaXIgZGlyICYmCisJbWtkaXIgZGlyMiAmJgorCWZvciBpIGluIDEgMiAzOyBkbyBlY2hvICRpOyBkb25lID5maWxlMCAmJgorCWZvciBpIGluIEEgQjsgZG8gZWNobyAkaTsgZG9uZSA+ZGlyL3N1YiAmJgorCWNhdCBmaWxlMCA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUwIGZpbGUyIGRpci9zdWIgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKworCWdpdCBicmFuY2ggaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAxOjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowMTowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJZm9yIGkgaW4gNCA1IDY7IGRvIGVjaG8gJGk7IGRvbmUgPj5maWxlMCAmJgorCWZvciBpIGluIEMgRDsgZG8gZWNobyAkaTsgZG9uZSA+PmRpci9zdWIgJiYKKwlybSAtZiBmaWxlMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgZmlsZTAgZmlsZTIgZGlyL3N1YiAmJgorCWdpdCBjb21taXQgLW0gIlNlY29uZCR7TEZ9JHtMRn1UaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LiIgJiYKKworCUdJVF9BVVRIT1JfREFURT0iMjAwNi0wNi0yNiAwMDowMjowMCArMDAwMCIgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDI6MDAgKzAwMDAiICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfREFURSBHSVRfQ09NTUlUVEVSX0RBVEUgJiYKKworCWZvciBpIGluIEEgQiBDOyBkbyBlY2hvICRpOyBkb25lID5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlmb3IgaSBpbiBFIEY7IGRvIGVjaG8gJGk7IGRvbmUgPj5kaXIvc3ViICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBkaXIvc3ViICYmCisJZ2l0IGNvbW1pdCAtbSBUaGlyZCAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAzOjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowMzowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlmb3IgaSBpbiBBIEIgQzsgZG8gZWNobyAkaTsgZG9uZSA+PmZpbGUwICYmCisJZm9yIGkgaW4gMSAyOyBkbyBlY2hvICRpOyBkb25lID4+ZGlyL3N1YiAmJgorCWNhdCBkaXIvc3ViID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUwIGRpci9zdWIgJiYKKwlnaXQgY29tbWl0IC1tIFNpZGUgJiYKKworCUdJVF9BVVRIT1JfREFURT0iMjAwNi0wNi0yNiAwMDowNDowMCArMDAwMCIgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDQ6MDAgKzAwMDAiICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfREFURSBHSVRfQ09NTUlUVEVSX0RBVEUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcHVsbCAtcyBvdXJzIC4gc2lkZSAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA1OjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowNTowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJZm9yIGkgaW4gQSBCIEM7IGRvIGVjaG8gJGk7IGRvbmUgPj5maWxlMCAmJgorCWZvciBpIGluIDEgMjsgZG8gZWNobyAkaTsgZG9uZSA+PmRpci9zdWIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUwIGRpci9zdWIgJiYKKworCW1rZGlyIGRpcjMgJiYKKwljcCBkaXIvc3ViIGRpcjMvc3ViICYmCisJdGVzdC1jaG10aW1lICsxIGRpcjMvc3ViICYmCisKKwlnaXQgY29uZmlnIGxvZy5zaG93cm9vdCBmYWxzZSAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA2OjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowNjowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCWdpdCBjaGVja291dCAtYiByZWFycmFuZ2UgaW5pdGlhbCAmJgorCWZvciBpIGluIEIgQTsgZG8gZWNobyAkaTsgZG9uZSA+ZGlyL3N1YiAmJgorCWdpdCBhZGQgZGlyL3N1YiAmJgorCWdpdCBjb21taXQgLW0gIlJlYXJyYW5nZWQgbGluZXMgaW4gZGlyL3N1YiIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgc2hvdy1icmFuY2gKKycKKworOiA8PFxFT0YKKyEgW2luaXRpYWxdIEluaXRpYWwKKyAqIFttYXN0ZXJdIE1lcmdlIGJyYW5jaCAnc2lkZScKKyAgISBbcmVhcnJhbmdlXSBSZWFycmFuZ2VkIGxpbmVzIGluIGRpci9zdWIKKyAgICEgW3NpZGVdIFNpZGUKKy0tLS0KKyAgKyAgW3JlYXJyYW5nZV0gUmVhcnJhbmdlZCBsaW5lcyBpbiBkaXIvc3ViCisgLSAgIFttYXN0ZXJdIE1lcmdlIGJyYW5jaCAnc2lkZScKKyAqICsgW3NpZGVdIFNpZGUKKyAqICAgW21hc3Rlcl5dIFRoaXJkCisgKiAgIFttYXN0ZXJ+Ml0gU2Vjb25kCisrKisrIFtpbml0aWFsXSBJbml0aWFsCitFT0YKKworVj1gZ2l0IHZlcnNpb24gfCBzZWQgLWUgJ3MvXmdpdCB2ZXJzaW9uIC8vJyAtZSAncy9cLi9cXC4vZydgCit3aGlsZSByZWFkIGNtZAorZG8KKwljYXNlICIkY21kIiBpbgorCScnIHwgJyMnKikgY29udGludWUgOzsKKwllc2FjCisJdGVzdD1gZWNobyAiJGNtZCIgfCBzZWQgLWUgJ3N8Wy8gXVsvIF0qfF98ZydgCisJcGZ4PWBwcmludGYgIiUwNGQiICR0ZXN0X2NvdW50YAorCWV4cGVjdD0iJFRFU1RfRElSRUNUT1JZL3Q0MDEzL2RpZmYuJHRlc3QiCisJYWN0dWFsPSIkcGZ4LWRpZmYuJHRlc3QiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgJGNtZCIgJworCQl7CisJCQllY2hvICJcJCBnaXQgJGNtZCIKKwkJCWdpdCAkY21kIHwKKwkJCXNlZCAtZSAicy9eXFwoLSpcXCkkVlxcKC0qXFwpXCQvXFwxZy1pLXQtLXYtZS1yLXMtaS1vLW5cMi8iIFwKKwkJCSAgICAtZSAicy9eXFwoLiptaXhlZDsgYm91bmRhcnk9XCItKlxcKSRWXFwoLSpcXClcIlwkL1xcMWctaS10LS12LWUtci1zLWktby1uXDJcIi8iCisJCQllY2hvICJcJCIKKwkJfSA+IiRhY3R1YWwiICYmCisJCWlmIHRlc3QgLWYgIiRleHBlY3QiCisJCXRoZW4KKwkJCWNhc2UgJGNtZCBpbgorCQkJKmZvcm1hdC1wYXRjaCogfCAqLXN0YXQqKQorCQkJCXRlc3RfaTE4bmNtcCAiJGV4cGVjdCIgIiRhY3R1YWwiOzsKKwkJCSopCisJCQkJdGVzdF9jbXAgIiRleHBlY3QiICIkYWN0dWFsIjs7CisJCQllc2FjICYmCisJCQlybSAtZiAiJGFjdHVhbCIKKwkJZWxzZQorCQkJIyB0aGlzIGlzIHRvIGhlbHAgZGV2ZWxvcGluZyBuZXcgdGVzdHMuCisJCQljcCAiJGFjdHVhbCIgIiRleHBlY3QiCisJCQlmYWxzZQorCQlmaQorCScKK2RvbmUgPDxcRU9GCitkaWZmLXRyZWUgaW5pdGlhbAorZGlmZi10cmVlIC1yIGluaXRpYWwKK2RpZmYtdHJlZSAtciAtLWFiYnJldiBpbml0aWFsCitkaWZmLXRyZWUgLXIgLS1hYmJyZXY9NCBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgLS1hYmJyZXYgaW5pdGlhbAorZGlmZi10cmVlIC0tcm9vdCAtciBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC1yIC0tYWJicmV2IGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgLXIgLS1hYmJyZXY9NCBpbml0aWFsCitkaWZmLXRyZWUgLXAgaW5pdGlhbAorZGlmZi10cmVlIC0tcm9vdCAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorZGlmZi10cmVlIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsCitkaWZmLXRyZWUgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorCitkaWZmLXRyZWUgLS1wcmV0dHkgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLXAgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tc3RhdCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1zdW1tYXJ5IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXN0YXQgLS1zdW1tYXJ5IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLXAgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXN0YXQgaW5pdGlhbAorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdW1tYXJ5IGluaXRpYWwKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3VtbWFyeSAtciBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3RhdCAtLXN1bW1hcnkgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKKworZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC1wIGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC0tcm9vdCAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsCisjIGltcHJvdmVkIGJ5IFRpbW8ncyBwYXRjaAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorCitkaWZmLXRyZWUgLS1wcmV0dHkgc2lkZQorZGlmZi10cmVlIC0tcHJldHR5IC1wIHNpZGUKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXBhdGNoLXdpdGgtc3RhdCBzaWRlCisKK2RpZmYtdHJlZSBtYXN0ZXIKK2RpZmYtdHJlZSAtcCBtYXN0ZXIKK2RpZmYtdHJlZSAtcCAtbSBtYXN0ZXIKK2RpZmYtdHJlZSAtYyBtYXN0ZXIKK2RpZmYtdHJlZSAtYyAtLWFiYnJldiBtYXN0ZXIKK2RpZmYtdHJlZSAtLWNjIG1hc3RlcgorIyBzdGF0IG9ubHkgc2hvdWxkIHNob3cgdGhlIGRpZmZzdGF0IHdpdGggdGhlIGZpcnN0IHBhcmVudAorZGlmZi10cmVlIC1jIC0tc3RhdCBtYXN0ZXIKK2RpZmYtdHJlZSAtLWNjIC0tc3RhdCBtYXN0ZXIKK2RpZmYtdHJlZSAtYyAtLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorZGlmZi10cmVlIC0tY2MgLS1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgc3RhdCBzdW1tYXJ5IHNob3VsZCBzaG93IHRoZSBkaWZmc3RhdCBhbmQgc3VtbWFyeSB3aXRoIHRoZSBmaXJzdCBwYXJlbnQKK2RpZmYtdHJlZSAtYyAtLXN0YXQgLS1zdW1tYXJ5IHNpZGUKK2RpZmYtdHJlZSAtLWNjIC0tc3RhdCAtLXN1bW1hcnkgc2lkZQorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2RpZmYtdHJlZSAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IG1hc3RlcgorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2RpZmYtdHJlZSAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgdGhpcyBpcyBjb3JyZWN0CitkaWZmLXRyZWUgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgc2lkZQorCitsb2cgbWFzdGVyCitsb2cgLXAgbWFzdGVyCitsb2cgLS1yb290IG1hc3RlcgorbG9nIC0tcm9vdCAtcCBtYXN0ZXIKK2xvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2xvZyAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCitsb2cgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCitsb2cgLS1yb290IC1jIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCitsb2cgLS1yb290IC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorbG9nIC1wIC0tZmlyc3QtcGFyZW50IG1hc3RlcgorbG9nIC1tIC1wIC0tZmlyc3QtcGFyZW50IG1hc3RlcgorbG9nIC1tIC1wIG1hc3RlcgorbG9nIC1TRiBtYXN0ZXIKK2xvZyAtUyBGIG1hc3RlcgorbG9nIC1TRiAtcCBtYXN0ZXIKK2xvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTAKK2xvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTEKK2xvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTIKK2xvZyAtR0YgbWFzdGVyCitsb2cgLUdGIC1wIG1hc3RlcgorbG9nIC1HRiAtcCAtLXBpY2theGUtYWxsIG1hc3RlcgorbG9nIC0tZGVjb3JhdGUgLS1hbGwKK2xvZyAtLWRlY29yYXRlPWZ1bGwgLS1hbGwKKworcmV2LWxpc3QgLS1wYXJlbnRzIEhFQUQKK3Jldi1saXN0IC0tY2hpbGRyZW4gSEVBRAorCit3aGF0Y2hhbmdlZCBtYXN0ZXIKK3doYXRjaGFuZ2VkIC1wIG1hc3Rlcgord2hhdGNoYW5nZWQgLS1yb290IG1hc3Rlcgord2hhdGNoYW5nZWQgLS1yb290IC1wIG1hc3Rlcgord2hhdGNoYW5nZWQgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK3doYXRjaGFuZ2VkIC0tcm9vdCAtYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCisjIGltcHJvdmVkIGJ5IFRpbW8ncyBwYXRjaAord2hhdGNoYW5nZWQgLS1yb290IC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3Rlcgord2hhdGNoYW5nZWQgLVNGIG1hc3Rlcgord2hhdGNoYW5nZWQgLVNGIC1wIG1hc3RlcgorCitsb2cgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyIC0tIGRpci8KK3doYXRjaGFuZ2VkIC0tcGF0Y2gtd2l0aC1zdGF0IG1hc3RlciAtLSBkaXIvCitsb2cgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlciAtLSBkaXIvCit3aGF0Y2hhbmdlZCAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyIC0tIGRpci8KKworc2hvdyBpbml0aWFsCitzaG93IC0tcm9vdCBpbml0aWFsCitzaG93IHNpZGUKK3Nob3cgbWFzdGVyCitzaG93IC1jIG1hc3Rlcgorc2hvdyAtbSBtYXN0ZXIKK3Nob3cgLS1maXJzdC1wYXJlbnQgbWFzdGVyCitzaG93IC0tc3RhdCBzaWRlCitzaG93IC0tc3RhdCAtLXN1bW1hcnkgc2lkZQorc2hvdyAtLXBhdGNoLXdpdGgtc3RhdCBzaWRlCitzaG93IC0tcGF0Y2gtd2l0aC1yYXcgc2lkZQorc2hvdyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgc2lkZQorCitmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIKK2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLW5vLW51bWJlcmVkIGluaXRpYWwuLm1hc3RlcgorZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbnVtYmVyZWQgaW5pdGlhbC4ubWFzdGVyCitmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IC0tc3VmZml4PS5kaWZmIGluaXRpYWwuLnNpZGUKK2Zvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeCitmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyCitmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK2Zvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCAtLW51bWJlcmVkLWZpbGVzIGluaXRpYWwuLm1hc3RlcgorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlcgorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IC0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0UgaW5pdGlhbC4ubWFzdGVyCitjb25maWcgZm9ybWF0LnN1YmplY3RwcmVmaXggRElGRkVSRU5UX1BSRUZJWAorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl5eCitmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLW4gaW5pdGlhbC4ubWFzdGVyXgorCitkaWZmIC0tYWJicmV2IGluaXRpYWwuLnNpZGUKK2RpZmYgLXIgaW5pdGlhbC4uc2lkZQorZGlmZiAtLXN0YXQgaW5pdGlhbC4uc2lkZQorZGlmZiAtciAtLXN0YXQgaW5pdGlhbC4uc2lkZQorZGlmZiBpbml0aWFsLi5zaWRlCitkaWZmIC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwuLnNpZGUKK2RpZmYgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsLi5zaWRlCitkaWZmIC0tcGF0Y2gtd2l0aC1zdGF0IC1yIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1wYXRjaC13aXRoLXJhdyAtciBpbml0aWFsLi5zaWRlCitkaWZmIC0tbmFtZS1zdGF0dXMgZGlyMiBkaXIKK2RpZmYgLS1uby1pbmRleCAtLW5hbWUtc3RhdHVzIGRpcjIgZGlyCitkaWZmIC0tbm8taW5kZXggLS1uYW1lLXN0YXR1cyAtLSBkaXIyIGRpcgorZGlmZiAtLW5vLWluZGV4IGRpciBkaXIzCitkaWZmIG1hc3RlciBtYXN0ZXJeIHNpZGUKK2RpZmYgLS1kaXJzdGF0IG1hc3Rlcn4xIG1hc3Rlcn4yCitkaWZmIC0tZGlyc3RhdCBpbml0aWFsIHJlYXJyYW5nZQorZGlmZiAtLWRpcnN0YXQtYnktZmlsZSBpbml0aWFsIHJlYXJyYW5nZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtUyByZXF1aXJlcyBhbiBhcmd1bWVudCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLVMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNhY2hlZCBvbiB1bmJvcm4gYnJhbmNoJyAnCisJZWNobyByZWY6IHJlZnMvaGVhZHMvdW5ib3JuID4uZ2l0L0hFQUQgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWS90NDAxMy9kaWZmLmRpZmZfLS1jYWNoZWQiIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2FjaGVkIC0tIGZpbGUgb24gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBkaWZmIC0tY2FjaGVkIC0tIGZpbGUwID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZL3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZF8tLV9maWxlMCIgcmVzdWx0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmNvbmZpZ19mb3JtYXQuc3ViamVjdHByZWZpeF9ESUZGRVJFTlRfUFJFRklYIGIvdC90NDAxMy9kaWZmLmNvbmZpZ19mb3JtYXQuc3ViamVjdHByZWZpeF9ESUZGRVJFTlRfUFJFRklYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Zjg5NzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuY29uZmlnX2Zvcm1hdC5zdWJqZWN0cHJlZml4X0RJRkZFUkVOVF9QUkVGSVgKQEAgLTAsMCArMSwyIEBACiskIGdpdCBjb25maWcgZm9ybWF0LnN1YmplY3RwcmVmaXggRElGRkVSRU5UX1BSRUZJWAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTUxZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWMzM2ZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9zaWRlCkBAIC0wLDAgKzEsMzkgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBzaWRlCitjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzYzBhNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTk4NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1jYyAtLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjJlZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCkBAIC0wLDAgKzEsOCBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1zdGF0IC0tc3VtbWFyeSBzaWRlCitjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBiOTE3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfbWFzdGVyCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1zdGF0IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY19tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlY2I0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfbWFzdGVyCkBAIC0wLDAgKzEsMzAgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLWNjIG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOTA1YjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiOGI0NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkZGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDc5ZjFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKQEAgLTAsMCArMSwzMyBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSBJbml0aWFsCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3ZWQwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSBJbml0aWFsCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLXBfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLXBfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzUwOTJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tcF9pbml0aWFsCkBAIC0wLDAgKzEsMjkgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC0tcm9vdCAtcCBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIEluaXRpYWwKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OTIwYWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSBJbml0aWFsCis6MDAwMDAwIDA0MDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGRhN2EzM2ZhNzdkODA2NmQ2Njk4NjQzOTQwY2U1ODYwZmUyZDdmYjMgQQlkaXIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy1wX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLXBfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGI3NmJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy1wX2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtcCBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDk3MGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4NTMxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDgyMzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlM2Y2YjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1zdGF0X3NpZGUKQEAgLTAsMCArMSw0MyBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1zdGF0IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjAzYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKQEAgLTAsMCArMSwzOCBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmViNzdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDM5IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3RhdF8tLXN1bW1hcnlfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3RhdF8tLXN1bW1hcnlfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODBlYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0Xy0tc3VtbWFyeV9pbml0aWFsCkBAIC0wLDAgKzEsMTUgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdGF0IC0tc3VtbWFyeSBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN0YXRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzIyZDFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwxMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXN0YXQgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN1bW1hcnlfLXJfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3VtbWFyeV8tcl9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZGFhZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN1bW1hcnlfLXJfaW5pdGlhbApAQCAtMCwwICsxLDExIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3VtbWFyeSAtciBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworIGNyZWF0ZSBtb2RlIDEwMDY0NCBkaXIvc3ViCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN1bW1hcnlfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3VtbWFyeV9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTVmNzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN1bW1hcnlfaW5pdGlhbApAQCAtMCwwICsxLDExIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3VtbWFyeSBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworIGNyZWF0ZSBtb2RlIDEwMDY0NCBkaXIvc3ViCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tcF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLXBfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDQxMWY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLXBfaW5pdGlhbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC1wIGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTMyZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF9pbml0aWFsCkBAIC0wLDAgKzEsMTEgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKzowMDAwMDAgMDQwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZGE3YTMzZmE3N2Q4MDY2ZDY2OTg2NDM5NDBjZTU4NjBmZTJkN2ZiMyBBCWRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3RhdF8tLXN1bW1hcnlfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdGF0Xy0tc3VtbWFyeV9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMjk4M2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3RhdF8tLXN1bW1hcnlfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXN0YXQgLS1zdW1tYXJ5IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdGF0X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZGNmYjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3RhdF9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tc3RhdCBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3VtbWFyeV9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN1bW1hcnlfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmMyYzRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN1bW1hcnlfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXN1bW1hcnkgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOTk0MmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1wX2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLXAgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OTNhYTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1wX3NpZGUKQEAgLTAsMCArMSwzOCBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC1wIHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3MTViZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliNmUxYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfc2lkZQpAQCAtMCwwICsxLDExIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKzowNDAwMDAgMDQwMDAwIGRhN2EzM2ZhNzdkODA2NmQ2Njk4NjQzOTQwY2U1ODYwZmUyZDdmYjMgZjk3N2VkNDZhZTY4NzNjMWMzMGFiODc4ZTE1YTRhY2NlZGMzNjE4YiBNCWRpcgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBmNDYxNWRhNjc0YzA5ZGYzMjJkNmJhOGQ2YjIxZWNmYjFiMWJhNTEwIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNzI4OWUzNWJmZjMyNzI3YzA4ZGRhMjA3NTExYmVjMTM4ZmRiOWVhNSBBCWZpbGUzCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tLWFiYnJldl9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1hYmJyZXZfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE4NGIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1hYmJyZXZfaW5pdGlhbApAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1hYmJyZXYgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorOjAwMDAwMCAwNDAwMDAgMDAwMDAwMC4uLiBkYTdhMzNmLi4uIEEJZGlyCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxZTc5YzMuLi4gQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAwMWU3OWMzLi4uIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjk1ZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMzMgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY5ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXBfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1wX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxOWM3MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1wX2luaXRpYWwKQEAgLTAsMCArMSwyOSBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2PTRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2PTRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzUzNjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXJfLS1hYmJyZXY9NF9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtciAtLWFiYnJldj00IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMTAwNjQ0IDAwMDAuLi4gMzVkMi4uLiBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAuLi4gMDFlNy4uLiBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwLi4uIDAxZTcuLi4gQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXJfLS1hYmJyZXZfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdiNDYwZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC1yIC0tYWJicmV2IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMzVkMjQyYi4uLiBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDFlNzljMy4uLiBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxZTc5YzMuLi4gQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXJfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkNDM1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yX2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC1yIGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMzVkMjQyYmE3OWFlODlhYzY5NWUyNmIzZDRjMjdhOGU2ZjAyOGY5ZSBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmNmIwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMDQwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZGE3YTMzZmE3N2Q4MDY2ZDY2OTg2NDM5NDBjZTU4NjBmZTJkN2ZiMyBBCWRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tYWJicmV2X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1hYmJyZXZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTRhYTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tYWJicmV2X21hc3RlcgpAQCAtMCwwICsxLDUgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtYyAtLWFiYnJldiBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgY2VhZDMyZS4uLiA3Mjg5ZTM1Li4uIDk5MjkxM2MuLi4gTU0JZGlyL3N1YgorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBiNDE0MTA4Li4uIGY0NjE1ZGEuLi4gMTBhOGE5Zi4uLiBNTQlmaWxlMAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfLS1zdW1tYXJ5X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMzAyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLWMgLS1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF8tLXN1bW1hcnlfc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZGMxMmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF8tLXN1bW1hcnlfc2lkZQpAQCAtMCwwICsxLDggQEAKKyQgZ2l0IGRpZmYtdHJlZSAtYyAtLXN0YXQgLS1zdW1tYXJ5IHNpZGUKK2M3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDU5YjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLWMgLS1zdGF0IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY19tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkMmJiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfbWFzdGVyCkBAIC0wLDAgKzEsNSBAQAorJCBnaXQgZGlmZi10cmVlIC1jIG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBjZWFkMzJlOTI1YjE0MjBjODRjMTRjYmY3Y2Y3NTVlN2U0NWFmOGFkIDcyODllMzViZmYzMjcyN2MwOGRkYTIwNzUxMWJlYzEzOGZkYjllYTUgOTkyOTEzYzVhYTBhNTQ3NmQxMGM0OWVkMGYyMWZjMGM2ZDFhZWRmMyBNTQlkaXIvc3ViCis6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0IGI0MTQxMDhlODFlNTA5MWZlMDk3NGExODU4YjRkMGQyMmIxMDdmNzAgZjQ2MTVkYTY3NGMwOWRmMzIyZDZiYThkNmIyMWVjZmIxYjFiYTUxMCAxMGE4YTlmMzY1N2Y5MWExNTZiOWYwMTg0ZWQ3OWEyMGFkZWY5ZjdmIE1NCWZpbGUwCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wXy1tX21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXBfLW1fbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MGJlYTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wXy1tX21hc3RlcgpAQCAtMCwwICsxLDgwIEBACiskIGdpdCBkaWZmLXRyZWUgLXAgLW0gbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IGNlYWQzMmUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtNCwzICs0LDUgQEAgQworIEQKKyBFCisgRgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggYjQxNDEwOC4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTQsMyArNCw2IEBACisgNAorIDUKKyA2CisrQQorK0IKKytDCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDcyODllMzUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSw0ICsxLDggQEAKKyBBCisgQgorK0MKKytECisrRQorK0YKKyAxCisgMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGY0NjE1ZGEuLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDYgKzEsOSBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorIEEKKyBCCisgQworZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA3Mjg5ZTM1Li4wMDAwMDAwCistLS0gYS9maWxlMworKysrIC9kZXYvbnVsbAorQEAgLTEsNCArMCwwIEBACistQQorLUIKKy0xCistMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMGNlODgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wX2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLXAgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTgyODc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9tYXN0ZXIKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLXAgbWFzdGVyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yXy0tYWJicmV2PTRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfLS1hYmJyZXY9NF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YTNhYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yXy0tYWJicmV2PTRfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtciAtLWFiYnJldj00IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfLS1hYmJyZXZfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfLS1hYmJyZXZfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjY4OWI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcl8tLWFiYnJldl9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC1yIC0tYWJicmV2IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzY1ZDgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcl9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC1yIGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDlmYzUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5MjI2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfbWFzdGVyCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIG1hc3RlcgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1hYmJyZXZfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tYWJicmV2X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4ZTY2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tYWJicmV2X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzMiBAQAorJCBnaXQgZGlmZiAtLWFiYnJldiBpbml0aWFsLi5zaWRlCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZCBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTZlODMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZApAQCAtMCwwICsxLDM4IEBACitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45OTI5MTNjCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDggQEAKKytBCisrQgorK0MKKytECisrRQorK0YKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMGE4YTlmCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSw5IEBACisrMQorKzIKKyszCisrNAorKzUKKys2CisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkXy0tX2ZpbGUwIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1jYWNoZWRfLS1fZmlsZTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYjg1OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkXy0tX2ZpbGUwCkBAIC0wLDAgKzEsMTUgQEAKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTBhOGE5ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsOSBAQAorKzEKKysyCisrMworKzQKKys1CisrNgorK0EKKytCCisrQwpkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0LWJ5LWZpbGVfaW5pdGlhbF9yZWFycmFuZ2UgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXQtYnktZmlsZV9pbml0aWFsX3JlYXJyYW5nZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhlMzNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0LWJ5LWZpbGVfaW5pdGlhbF9yZWFycmFuZ2UKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tZGlyc3RhdC1ieS1maWxlIGluaXRpYWwgcmVhcnJhbmdlCisgMTAwLjAlIGRpci8KKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF9pbml0aWFsX3JlYXJyYW5nZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF9pbml0aWFsX3JlYXJyYW5nZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmIwMmMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X2luaXRpYWxfcmVhcnJhbmdlCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZiAtLWRpcnN0YXQgaW5pdGlhbCByZWFycmFuZ2UKKyAxMDAuMCUgZGlyLworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X21hc3Rlcn4xX21hc3Rlcn4yIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X21hc3Rlcn4xX21hc3Rlcn4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzJlMWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXRfbWFzdGVyfjFfbWFzdGVyfjIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tZGlyc3RhdCBtYXN0ZXJ+MSBtYXN0ZXJ+MgorICA0MC4wJSBkaXIvCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLW5hbWUtc3RhdHVzX2RpcjJfZGlyIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGQ5NmFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgpAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyBkaXIyIGRpcgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLW5hbWUtc3RhdHVzXy0tX2RpcjJfZGlyIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLW5hbWUtc3RhdHVzXy0tX2RpcjJfZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTZmOGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfLS1fZGlyMl9kaXIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tbm8taW5kZXggLS1uYW1lLXN0YXR1cyAtLSBkaXIyIGRpcgorQQlkaXIvc3ViCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0NzU4NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1uby1pbmRleCAtLW5hbWUtc3RhdHVzIGRpcjIgZGlyCitBCWRpci9zdWIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfZGlyX2RpcjMgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4X2Rpcl9kaXIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNDJjMmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4X2Rpcl9kaXIzCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZiAtLW5vLWluZGV4IGRpciBkaXIzCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtcmF3Xy1yX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtcmF3Xy1yX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MGRjNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfLXJfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDM2IEBACiskIGdpdCBkaWZmIC0tcGF0Y2gtd2l0aC1yYXcgLXIgaW5pdGlhbC4uc2lkZQorOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA3Mjg5ZTM1Li4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiBmNDYxNWRhLi4uIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gNzI4OWUzNS4uLiBBCWZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjFkNWRjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzYgQEAKKyQgZ2l0IGRpZmYgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsLi5zaWRlCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDcyODllMzUuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIGY0NjE1ZGEuLi4gTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiA3Mjg5ZTM1Li4uIEEJZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXN0YXRfLXJfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0Xy1yX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4ZDFlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0Xy1yX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzNyBAQAorJCBnaXQgZGlmZiAtLXBhdGNoLXdpdGgtc3RhdCAtciBpbml0aWFsLi5zaWRlCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyNGU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzNyBAQAorJCBnaXQgZGlmZiAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsLi5zaWRlCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1zdGF0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXN0YXRfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzc0MWUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1zdGF0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmIC0tc3RhdCBpbml0aWFsLi5zaWRlCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy1yXy0tc3RhdF9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmZfLXJfLS1zdGF0X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1MTRmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy1yXy0tc3RhdF9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZiAtciAtLXN0YXQgaW5pdGlhbC4uc2lkZQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tcl9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmZfLXJfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmIyZmUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLXJfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDMyIEBACiskIGdpdCBkaWZmIC1yIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YWRhZjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzIgQEAKKyQgZ2l0IGRpZmYgaW5pdGlhbC4uc2lkZQorZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfbWFzdGVyX21hc3Rlcl5fc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmX21hc3Rlcl9tYXN0ZXJeX3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlYzljYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmX21hc3Rlcl9tYXN0ZXJeX3NpZGUKQEAgLTAsMCArMSwyOSBAQAorJCBnaXQgZGlmZiBtYXN0ZXIgbWFzdGVyXiBzaWRlCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF8tLXN1ZmZpeD0uZGlmZl9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF8tLXN1ZmZpeD0uZGlmZl9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0N2NhMDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0Xy0tc3VmZml4PS5kaWZmX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw2MSBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IC0tc3VmZml4PS5kaWZmIGluaXRpYWwuLnNpZGUKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFNpZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TaWRlLmRpZmYiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMS1TaWRlLmRpZmYiCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmZlZGMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKQEAgLTAsMCArMSwxNzAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvM10gVGhpcmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDItVGhpcmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDMtU2lkZS5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAzLVNpZGUucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjM2NkZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KQEAgLTAsMCArMSwxMTAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMl0gU2Vjb25kCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIFRoaXJkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MTdiZDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw2MSBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IGluaXRpYWwuLnNpZGUKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFNpZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TaWRlLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDEtU2lkZS5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tbnVtYmVyZWQtZmlsZXNfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF8tLW51bWJlcmVkLWZpbGVzX2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM0ZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF8tLW51bWJlcmVkLWZpbGVzX2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDE3MCBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IC0tbnVtYmVyZWQtZmlsZXMgaW5pdGlhbC4ubWFzdGVyCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvM10gU2Vjb25kCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjEiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIxIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIFRoaXJkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMiIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjIiCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjMiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIzIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRV9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0VfaW5pdGlhbC4ubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3Njc3YzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0VfaW5pdGlhbC4ubWFzdGVyCkBAIC0wLDAgKzEsMTcwIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRSBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbVEVTVENBU0UgMS8zXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbVEVTVENBU0UgMi8zXSBUaGlyZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDItVGhpcmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1RFU1RDQVNFIDMvM10gU2lkZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAzLVNpZGUucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAzLVNpZGUucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjNlMzRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKQEAgLTAsMCArMSwxNzAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBUaGlyZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDItVGhpcmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDMvM10gU2lkZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAzLVNpZGUucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAzLVNpZGUucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxM2Y4YTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KQEAgLTAsMCArMSwxMTAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMl0gU2Vjb25kCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvMl0gVGhpcmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXl4gYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl5eCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZWM1NTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl5eCkBAIC0wLDAgKzEsNjIgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeXgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtESUZGRVJFTlRfUFJFRklYXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhNjc2MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDYxIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gU2lkZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNpZGUucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAxLVNpZGUucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLWNvdmVyLWxldHRlcl8tbl9pbml0aWFsLi5tYXN0ZXJeIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLWNvdmVyLWxldHRlcl8tbl9pbml0aWFsLi5tYXN0ZXJeCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NGQ5NjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tY292ZXItbGV0dGVyXy1uX2luaXRpYWwuLm1hc3Rlcl4KQEAgLTAsMCArMSwxMDMgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtbiBpbml0aWFsLi5tYXN0ZXJeCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjA2OjAwICswMDAwCitTdWJqZWN0OiBbRElGRkVSRU5UX1BSRUZJWCAwLzJdICoqKiBTVUJKRUNUIEhFUkUgKioqCisKKyoqKiBCTFVSQiBIRVJFICoqKgorCitBIFUgVGhvciAoMik6CisgIFNlY29uZAorICBUaGlyZAorCisgZGlyL3N1YiB8IDQgKysrKworIGZpbGUwICAgfCAzICsrKworIGZpbGUxICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDQgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW0RJRkZFUkVOVF9QUkVGSVggMS8yXSBTZWNvbmQKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW0RJRkZFUkVOVF9QUkVGSVggMi8yXSBUaGlyZAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tbm8tbnVtYmVyZWRfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLW5vLW51bWJlcmVkX2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmMyODdhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLW5vLW51bWJlcmVkX2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDEyNyBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbm8tbnVtYmVyZWQgaW5pdGlhbC4ubWFzdGVyCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBTZWNvbmQKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBUaGlyZAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFNpZGUKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tbnVtYmVyZWRfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLW51bWJlcmVkX2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhmNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLW51bWJlcmVkX2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDEyNyBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbnVtYmVyZWQgaW5pdGlhbC4ubWFzdGVyCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvM10gU2Vjb25kCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIFRoaXJkCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKworRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIFNpZGUKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMDM1MmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDEyNyBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlcgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIFNlY29uZAorCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBUaGlyZAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBTaWRlCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTQ1NGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KQEAgLTAsMCArMSw4MSBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBTZWNvbmQKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvMl0gVGhpcmQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZDUyZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw0NyBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGluaXRpYWwuLnNpZGUKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFNpZGUKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGU9ZnVsbF8tLWFsbCBiL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZT1mdWxsXy0tYWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZDQ1MjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGU9ZnVsbF8tLWFsbApAQCAtMCwwICsxLDQwIEBACiskIGdpdCBsb2cgLS1kZWNvcmF0ZT1mdWxsIC0tYWxsCitjb21taXQgY2Q0ZTcyZmQ5NmZhZWQzZjBiYTk0OWRjNDI5Njc0MzAzNzRlMjI5MCAocmVmcy9oZWFkcy9yZWFycmFuZ2UpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDY6MDAgMjAwNiArMDAwMAorCisgICAgUmVhcnJhbmdlZCBsaW5lcyBpbiBkaXIvc3ViCisKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChIRUFELCByZWZzL2hlYWRzL21hc3RlcikKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIChyZWZzL2hlYWRzL3NpZGUpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EgKHJlZnMvaGVhZHMvaW5pdGlhbCkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGVfLS1hbGwgYi90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGVfLS1hbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkM2VhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZV8tLWFsbApAQCAtMCwwICsxLDQwIEBACiskIGdpdCBsb2cgLS1kZWNvcmF0ZSAtLWFsbAorY29tbWl0IGNkNGU3MmZkOTZmYWVkM2YwYmE5NDlkYzQyOTY3NDMwMzc0ZTIyOTAgKHJlYXJyYW5nZSkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNjowMCAyMDA2ICswMDAwCisKKyAgICBSZWFycmFuZ2VkIGxpbmVzIGluIGRpci9zdWIKKworY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQgKEhFQUQsIG1hc3RlcikKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIChzaWRlKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIChpbml0aWFsKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3Rlcl8tLV9kaXJfIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyXy0tX2Rpcl8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4ZjE0NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3Rlcl8tLV9kaXJfCkBAIC0wLDAgKzEsNzQgQEAKKyQgZ2l0IGxvZyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyIC0tIGRpci8KK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQyNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSwxMjkgQEAKKyQgZ2l0IGxvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyXy0tX2Rpcl8gYi90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjA3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfCkBAIC0wLDAgKzEsNzQgQEAKKyQgZ2l0IGxvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIgLS0gZGlyLworY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjMWU4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDE5OSBAQAorJCBnaXQgbG9nIC0tcm9vdCAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZmMwOWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCkBAIC0wLDAgKzEsMTY3IEBACiskIGdpdCBsb2cgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWFhOTgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyCkBAIC0wLDAgKzEsMTYxIEBACiskIGdpdCBsb2cgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy1jXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOWQ4NWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCkBAIC0wLDAgKzEsMTk5IEBACiskIGdpdCBsb2cgLS1yb290IC1jIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tY29tYmluZWQgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNvbWJpbmVkIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDJjMzM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLXBfbWFzdGVyCkBAIC0wLDAgKzEsMTQyIEBACiskIGdpdCBsb2cgLS1yb290IC1wIG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmNDYxNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290X21hc3RlcgpAQCAtMCwwICsxLDM0IEBACiskIGdpdCBsb2cgLS1yb290IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1HRl8tcF8tLXBpY2theGUtYWxsX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLUdGXy1wXy0tcGlja2F4ZS1hbGxfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNmY4ODAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1HRl8tcF8tLXBpY2theGUtYWxsX21hc3RlcgpAQCAtMCwwICsxLDI3IEBACiskIGdpdCBsb2cgLUdGIC1wIC0tcGlja2F4ZS1hbGwgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tR0ZfLXBfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tR0ZfLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOTNmMmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1HRl8tcF9tYXN0ZXIKQEAgLTAsMCArMSwxOCBAQAorJCBnaXQgbG9nIC1HRiAtcCBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tR0ZfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tR0ZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNjcwOGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1HRl9tYXN0ZXIKQEAgLTAsMCArMSw3IEBACiskIGdpdCBsb2cgLUdGIG1hc3RlcgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tU0ZfLXBfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzI0MzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl8tcF9tYXN0ZXIKQEAgLTAsMCArMSwxOCBAQAorJCBnaXQgbG9nIC1TRiAtcCBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNTk5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXIKQEAgLTAsMCArMSw3IEBACiskIGdpdCBsb2cgLVNGIG1hc3RlcgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTAgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWZjNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTAKQEAgLTAsMCArMSwyIEBACiskIGdpdCBsb2cgLVNGIG1hc3RlciAtLW1heC1jb3VudD0wCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MSBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ODFhMDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MQpAQCAtMCwwICsxLDcgQEAKKyQgZ2l0IGxvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTEKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0yIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjNTVmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0yCkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgbG9nIC1TRiBtYXN0ZXIgLS1tYXgtY291bnQ9MgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tU19GX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLVNfRl9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4ZDJiNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLVNfRl9tYXN0ZXIKQEAgLTAsMCArMSw3IEBACiskIGdpdCBsb2cgLVMgRiBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLW1fLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tbV8tcF8tLWZpcnN0LXBhcmVudF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwMDczZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLW1fLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyCkBAIC0wLDAgKzEsMTAwIEBACiskIGdpdCBsb2cgLW0gLXAgLS1maXJzdC1wYXJlbnQgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCBjZWFkMzJlLi45OTI5MTNjIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTQsMyArNCw1IEBAIEMKKyBECisgRQorIEYKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGI0MTQxMDguLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC00LDMgKzQsNiBAQAorIDQKKyA1CisgNgorK0EKKytCCisrQworCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1tXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLW1fLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTYyYTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1tXy1wX21hc3RlcgpAQCAtMCwwICsxLDIwMCBAQAorJCBnaXQgbG9nIC1tIC1wIG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQgKGZyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCkKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggY2VhZDMyZS4uOTkyOTEzYyAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC00LDMgKzQsNSBAQCBDCisgRAorIEUKKyBGCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCBiNDE0MTA4Li4xMGE4YTlmIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtNCwzICs0LDYgQEAKKyA0CisgNQorIDYKKytBCisrQgorK0MKKworY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQgKGZyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSkKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggNzI4OWUzNS4uOTkyOTEzYyAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDQgKzEsOCBAQAorIEEKKyBCCisrQworK0QKKytFCisrRgorIDEKKyAyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggZjQ2MTVkYS4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsNiArMSw5IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CisgQQorIEIKKyBDCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDcyODllMzUuLjAwMDAwMDAKKy0tLSBhL2ZpbGUzCisrKysgL2Rldi9udWxsCitAQCAtMSw0ICswLDAgQEAKKy1BCistQgorLTEKKy0yCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tcF8tLWZpcnN0LXBhcmVudF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjODk2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyCkBAIC0wLDAgKzEsNzggQEAKKyQgZ2l0IGxvZyAtcCAtLWZpcnN0LXBhcmVudCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMTMyNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1wX21hc3RlcgpAQCAtMCwwICsxLDExNSBAQAorJCBnaXQgbG9nIC1wIG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ19tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmNmNlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfbWFzdGVyCkBAIC0wLDAgKzEsMzQgQEAKKyQgZ2l0IGxvZyBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnJldi1saXN0Xy0tY2hpbGRyZW5fSEVBRCBiL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLWNoaWxkcmVuX0hFQUQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmMTdkNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLWNoaWxkcmVuX0hFQUQKQEAgLTAsMCArMSw3IEBACiskIGdpdCByZXYtbGlzdCAtLWNoaWxkcmVuIEhFQUQKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK2M3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CisxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYucmV2LWxpc3RfLS1wYXJlbnRzX0hFQUQgYi90L3Q0MDEzL2RpZmYucmV2LWxpc3RfLS1wYXJlbnRzX0hFQUQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkMmE4MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLXBhcmVudHNfSEVBRApAQCAtMCwwICsxLDcgQEAKKyQgZ2l0IHJldi1saXN0IC0tcGFyZW50cyBIRUFECis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKKzFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLS1maXJzdC1wYXJlbnRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLnNob3dfLS1maXJzdC1wYXJlbnRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkY2JlNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLWZpcnN0LXBhcmVudF9tYXN0ZXIKQEAgLTAsMCArMSwzMCBAQAorJCBnaXQgc2hvdyAtLWZpcnN0LXBhcmVudCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IGNlYWQzMmUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtNCwzICs0LDUgQEAgQworIEQKKyBFCisgRgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggYjQxNDEwOC4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTQsMyArNCw2IEBACisgNAorIDUKKyA2CisrQQorK0IKKytDCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtcmF3X3NpZGUgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtcmF3X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxYjQ2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1yYXdfc2lkZQpAQCAtMCwwICsxLDQyIEBACiskIGdpdCBzaG93IC0tcGF0Y2gtd2l0aC1yYXcgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIuLi4gNzI4OWUzNS4uLiBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMuLi4gZjQ2MTVkYS4uLiBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDcyODllMzUuLi4gQQlmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZSBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YTQ3NGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZQpAQCAtMCwwICsxLDQ0IEBACiskIGdpdCBzaG93IC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBzaWRlCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1zdGF0X3NpZGUgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtc3RhdF9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NGU5OWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtc3RhdF9zaWRlCkBAIC0wLDAgKzEsNDMgQEAKKyQgZ2l0IHNob3cgLS1wYXRjaC13aXRoLXN0YXQgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLXJvb3RfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcm9vdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjODkxMzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXJvb3RfaW5pdGlhbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBzaG93IC0tcm9vdCBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxNDkyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tc3RhdF8tLXN1bW1hcnlfc2lkZQpAQCAtMCwwICsxLDEzIEBACiskIGdpdCBzaG93IC0tc3RhdCAtLXN1bW1hcnkgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLS1zdGF0X3NpZGUgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXN0YXRfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU3MTI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfLS1zdGF0X3NpZGUKQEAgLTAsMCArMSwxMiBAQAorJCBnaXQgc2hvdyAtLXN0YXQgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLWNfbWFzdGVyIGIvdC90NDAxMy9kaWZmLnNob3dfLWNfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYWJhOGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tY19tYXN0ZXIKQEAgLTAsMCArMSwzNiBAQAorJCBnaXQgc2hvdyAtYyBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tY29tYmluZWQgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNvbWJpbmVkIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLW1fbWFzdGVyIGIvdC90NDAxMy9kaWZmLnNob3dfLW1fbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTJlZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tbV9tYXN0ZXIKQEAgLTAsMCArMSw5MyBAQAorJCBnaXQgc2hvdyAtbSBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChmcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzApCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IGNlYWQzMmUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtNCwzICs0LDUgQEAgQworIEQKKyBFCisgRgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggYjQxNDEwOC4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTQsMyArNCw2IEBACisgNAorIDUKKyA2CisrQQorK0IKKytDCisKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChmcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEpCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDcyODllMzUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSw0ICsxLDggQEAKKyBBCisgQgorK0MKKytECisrRQorK0YKKyAxCisgMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGY0NjE1ZGEuLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDYgKzEsOSBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorIEEKKyBCCisgQworZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA3Mjg5ZTM1Li4wMDAwMDAwCistLS0gYS9maWxlMworKysrIC9kZXYvbnVsbAorQEAgLTEsNCArMCwwIEBACistQQorLUIKKy0xCistMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5zaG93X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0MDY2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93X2luaXRpYWwKQEAgLTAsMCArMSw3IEBACiskIGdpdCBzaG93IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfbWFzdGVyIGIvdC90NDAxMy9kaWZmLnNob3dfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMDhjZTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd19tYXN0ZXIKQEAgLTAsMCArMSwzNiBAQAorJCBnaXQgc2hvdyBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfc2lkZSBiL3QvdDQwMTMvZGlmZi5zaG93X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwYTA3MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93X3NpZGUKQEAgLTAsMCArMSwzOCBAQAorJCBnaXQgc2hvdyBzaWRlCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXJfLS1fZGlyXyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyXy0tX2Rpcl8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiNmFmMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyXy0tX2Rpcl8KQEAgLTAsMCArMSw2MSBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlciAtLSBkaXIvCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWM0MzFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpAQCAtMCwwICsxLDExNiBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMGMyODUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyXy0tX2Rpcl8KQEAgLTAsMCArMSw2MSBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyIC0tIGRpci8KK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhYWU3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCkBAIC0wLDAgKzEsMTk5IEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXJvb3QgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5MGU1MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDE2MCBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkaXIvc3ViCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTZjYzkyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSwxNTQgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQzMmJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCkBAIC0wLDAgKzEsMTk5IEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXJvb3QgLWMgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1jb21iaW5lZCBkaXIvc3ViCitpbmRleCBjZWFkMzJlLDcyODllMzUuLjk5MjkxM2MKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAQCAtMSw2IC0xLDQgKzEsOCBAQEAKKyAgQQorICBCCisgK0MKKyArRAorICtFCisgK0YKKysgMQorKyAyCitkaWZmIC0tY29tYmluZWQgZmlsZTAKK2luZGV4IGI0MTQxMDgsZjQ2MTVkYS4uMTBhOGE5ZgorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQEAgLTEsNiAtMSw2ICsxLDkgQEBACisgIDEKKyAgMgorICAzCisgKzQKKyArNQorICs2CisrIEEKKysgQgorKyBDCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkaXIvc3ViCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmYxZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tcF9tYXN0ZXIKQEAgLTAsMCArMSwxMzUgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcm9vdCAtcCBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290X21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MDVjYjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290X21hc3RlcgpAQCAtMCwwICsxLDQyIEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXJvb3QgbWFzdGVyCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA3Mjg5ZTM1Li4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiBmNDYxNWRhLi4uIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gNzI4OWUzNS4uLiBBCWZpbGUzCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworOjEwMDY0NCAxMDA2NDQgODQyMmQ0MC4uLiBjZWFkMzJlLi4uIE0JZGlyL3N1YgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiBiMWU2NzIyLi4uIEEJZmlsZTEKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDg0MjJkNDAuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIGI0MTQxMDguLi4gTQlmaWxlMAorOjEwMDY0NCAwMDAwMDAgMDFlNzljMy4uLiAwMDAwMDAwLi4uIEQJZmlsZTIKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMzVkMjQyYi4uLiBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDFlNzljMy4uLiBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxZTc5YzMuLi4gQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1TRl8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLVNGXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzlkYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1TRl8tcF9tYXN0ZXIKQEAgLTAsMCArMSwxOCBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLVNGIC1wIG1hc3RlcgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLVNGX21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tU0ZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTkzMjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLVNGX21hc3RlcgpAQCAtMCwwICsxLDkgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC1TRiBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworOjEwMDY0NCAxMDA2NDQgODQyMmQ0MC4uLiBjZWFkMzJlLi4uIE0JZGlyL3N1YgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tcF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4ZDQzMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tcF9tYXN0ZXIKQEAgLTAsMCArMSwxMDIgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC1wIG1hc3RlcgorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDNiY2MyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkX21hc3RlcgpAQCAtMCwwICsxLDMyIEBACiskIGdpdCB3aGF0Y2hhbmdlZCBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDcyODllMzUuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIGY0NjE1ZGEuLi4gTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiA3Mjg5ZTM1Li4uIEEJZmlsZTMKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCis6MTAwNjQ0IDEwMDY0NCA4NDIyZDQwLi4uIGNlYWQzMmUuLi4gTQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIGIxZTY3MjIuLi4gQQlmaWxlMQorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIuLi4gODQyMmQ0MC4uLiBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMuLi4gYjQxNDEwOC4uLiBNCWZpbGUwCis6MTAwNjQ0IDAwMDAwMCAwMWU3OWMzLi4uIDAwMDAwMDAuLi4gRAlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2ggYi90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NTlhYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKQEAgLTAsMCArMSw4OTQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndmFyaW91cyBmb3JtYXQtcGF0Y2ggdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMDsgZG8gZWNobyAiJGkiOyBkb25lID5maWxlICYmCisJY2F0IGZpbGUgPmVsaWYgJiYKKwlnaXQgYWRkIGZpbGUgZWxpZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisKKwlmb3IgaSBpbiAxIDIgNSA2IEEgQiBDIDcgOCA5IDEwOyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUgJiYKKwl0ZXN0X2NobW9kICt4IGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIGNoYW5nZXMgIzEiICYmCisKKwlmb3IgaSBpbiBEIEUgRjsgZG8gZWNobyAiJGkiOyBkb25lID4+ZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNpZGUgY2hhbmdlcyAjMiIgJiYKKwlnaXQgdGFnIEMyICYmCisKKwlmb3IgaSBpbiA1IDYgMSAyIDMgQSA0IEIgQyA3IDggOSAxMCBEIEUgRjsgZG8gZWNobyAiJGkiOyBkb25lID5maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2lkZSBjaGFuZ2VzICMzIHdpdGggXFxuIGJhY2tzbGFzaC1uIGluIGl0LiIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEMyIHwgZ2l0IGFwcGx5IC0taW5kZXggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJNYXN0ZXIgYWNjZXB0cyBtb3JhbCBlcXVpdmFsZW50IG9mICMyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZvcm1hdC1wYXRjaCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSIgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoMCAmJgorCWNudD1gZ3JlcCAiXkZyb20gIiBwYXRjaDAgfCB3YyAtbGAgJiYKKwl0ZXN0ICRjbnQgPSAzCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIiAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IFwKKwkJLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gbWFzdGVyLi5zaWRlID5wYXRjaDEgJiYKKwljbnQ9YGdyZXAgIl5Gcm9tICIgcGF0Y2gxIHwgd2MgLWxgICYmCisJdGVzdCAkY250ID0gMgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZvcm1hdC1wYXRjaCBkb2Vzbid0IGNvbnNpZGVyIG1lcmdlIGNvbW1pdHMiICcKKworCWdpdCBjaGVja291dCAtYiBzbGF2ZSBtYXN0ZXIgJiYKKwllY2hvICJBbm90aGVyIGxpbmUiID4+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWFtICJTbGF2ZSBjaGFuZ2UgIzEiICYmCisJZWNobyAiWWV0IGFub3RoZXIgbGluZSIgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYW0gIlNsYXZlIGNoYW5nZSAjMiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWVyZ2VyIG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIHNsYXZlICYmCisJY250PWBnaXQgZm9ybWF0LXBhdGNoIC0zIC0tc3Rkb3V0IHwgZ3JlcCAiXkZyb20gIiB8IHdjIC1sYCAmJgorCXRlc3QgJGNudCA9IDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0LXBhdGNoIHJlc3VsdCBhcHBsaWVzIiAnCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVidWlsZC0wIG1hc3RlciAmJgorCWdpdCBhbSAtMyBwYXRjaDAgJiYKKwljbnQ9YGdpdCByZXYtbGlzdCBtYXN0ZXIuLiB8IHdjIC1sYCAmJgorCXRlc3QgJGNudCA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIHJlc3VsdCBhcHBsaWVzIiAnCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVidWlsZC0xIG1hc3RlciAmJgorCWdpdCBhbSAtMyBwYXRjaDEgJiYKKwljbnQ9YGdpdCByZXYtbGlzdCBtYXN0ZXIuLiB8IHdjIC1sYCAmJgorCXRlc3QgJGNudCA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGRpZCBub3Qgc2NyZXcgdXAgdGhlIGxvZyBtZXNzYWdlJyAnCisKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHNpZGUgfCBncmVwICJeU2lkZSAuKiB3aXRoIC4qIGJhY2tzbGFzaC1uIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBkaWQgbm90IHNjcmV3IHVwIHRoZSBsb2cgbWVzc2FnZScgJworCisJZ3JlcCAiXlN1YmplY3Q6IC4qU2lkZSBjaGFuZ2VzICMzIHdpdGggLiogYmFja3NsYXNoLW4iIHBhdGNoMCAmJgorCWdyZXAgIl5TdWJqZWN0OiAuKlNpZGUgY2hhbmdlcyAjMyB3aXRoIC4qIGJhY2tzbGFzaC1uIiBwYXRjaDEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYXkgZGlkIG5vdCBzY3JldyB1cCB0aGUgbG9nIG1lc3NhZ2UnICcKKworCWdpdCBjYXQtZmlsZSBjb21taXQgcmVidWlsZC0xIHwgZ3JlcCAiXlNpZGUgLiogd2l0aCAuKiBiYWNrc2xhc2gtbiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBoZWFkZXJzJyAnCisKKwlnaXQgY29uZmlnIGZvcm1hdC5oZWFkZXJzICJUbzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+CisiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBmb3JtYXQuaGVhZGVycyAiQ2M6IFMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPgorIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlID4gcGF0Y2gyICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoMiA+IGhkcnMyICYmCisJZ3JlcCAiXlRvOiBSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczIgJiYKKwlncmVwICJeQ2M6IFMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dHJhIGhlYWRlcnMgd2l0aG91dCBuZXdsaW5lcycgJworCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5oZWFkZXJzICJUbzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBjb25maWcgLS1hZGQgZm9ybWF0LmhlYWRlcnMgIkNjOiBTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoMyAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDMgPiBoZHJzMyAmJgorCWdyZXAgIl5UbzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnMzICYmCisJZ3JlcCAiXkNjOiBTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBoZWFkZXJzIHdpdGggbXVsdGlwbGUgVG86cycgJworCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5oZWFkZXJzICJUbzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBjb25maWcgLS1hZGQgZm9ybWF0LmhlYWRlcnMgIlRvOiBTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPiBwYXRjaDQgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g0ID4gaGRyczQgJiYKKwlncmVwICJeVG86IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPixcJCIgaGRyczQgJiYKKwlncmVwICJeICpTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgY2MnICcKKworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQuaGVhZGVycyAiQ2M6IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY2M9IlMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwgc2VkIC1lICIvXlwkL3EiID5wYXRjaDUgJiYKKwlncmVwICJeQ2M6IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPixcJCIgcGF0Y2g1ICYmCisJZ3JlcCAiXiAqUy4gRS4gQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tYW5kIGxpbmUgaGVhZGVycycgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBmb3JtYXQuaGVhZGVycyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1hZGQtaGVhZGVyPSJDYzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgfCBzZWQgLWUgIi9eXCQvcSIgPnBhdGNoNiAmJgorCWdyZXAgIl5DYzogUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmF0aW9uIGhlYWRlcnMgYW5kIGNvbW1hbmQgbGluZSBoZWFkZXJzJyAnCisKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIkNjOiBSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWFkZC1oZWFkZXI9IkNjOiBTLiBFLiBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8IHNlZCAtZSAiL15cJC9xIiA+cGF0Y2g3ICYmCisJZ3JlcCAiXkNjOiBSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4sXCQiIHBhdGNoNyAmJgorCWdyZXAgIl4gKlMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBwYXRjaDcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWFuZCBsaW5lIFRvOiBoZWFkZXInICcKKworCWdpdCBjb25maWcgLS11bnNldC1hbGwgZm9ybWF0LmhlYWRlcnMgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tdG89IlIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwgc2VkIC1lICIvXlwkL3EiID5wYXRjaDggJiYKKwlncmVwICJeVG86IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBwYXRjaDgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlndXJhdGlvbiBUbzogaGVhZGVyJyAnCisKKwlnaXQgY29uZmlnIGZvcm1hdC50byAiUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwgc2VkIC1lICIvXlwkL3EiID5wYXRjaDkgJiYKKwlncmVwICJeVG86IFIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBwYXRjaDkKKycKKworIyBjaGVja19wYXRjaCA8cGF0Y2g+OiBWZXJpZnkgdGhhdCA8cGF0Y2g+IGxvb2tzIGxpa2UgYSBoYWxmLXNhbmUKKyMgcGF0Y2ggZW1haWwgdG8gYXZvaWQgYSBmYWxzZSBwb3NpdGl2ZSB3aXRoICFncmVwCitjaGVja19wYXRjaCAoKSB7CisJZ3JlcCAtZSAiXkZyb206IiAiJDEiICYmCisJZ3JlcCAtZSAiXkRhdGU6IiAiJDEiICYmCisJZ3JlcCAtZSAiXlN1YmplY3Q6IiAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdG8gb3ZlcnJpZGVzIGNvbmZpZy50bycgJworCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC50byBcCisJCSJSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLXRvIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8CisJc2VkIC1lICIvXlwkL3EiID5wYXRjaDEwICYmCisJY2hlY2tfcGF0Y2ggcGF0Y2gxMCAmJgorCSEgZ3JlcCAiXlRvOiBSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgcGF0Y2gxMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXRvIGFuZCAtLXRvIHJlcGxhY2VzIGNvbmZpZy50bycgJworCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC50byBcCisJCSJTb21lb25lIDxzb21lb25lQG91dC50aGVyZT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLXRvIC0tdG89IlNvbWVvbmUgRWxzZSA8ZWxzZUBvdXQudGhlcmU+IiBcCisJCS0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8CisJc2VkIC1lICIvXlwkL3EiID5wYXRjaDExICYmCisJY2hlY2tfcGF0Y2ggcGF0Y2gxMSAmJgorCSEgZ3JlcCAiXlRvOiBTb21lb25lIDxzb21lb25lQG91dC50aGVyZT5cJCIgcGF0Y2gxMSAmJgorCWdyZXAgIl5UbzogU29tZW9uZSBFbHNlIDxlbHNlQG91dC50aGVyZT5cJCIgcGF0Y2gxMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLWNjIG92ZXJyaWRlcyBjb25maWcuY2MnICcKKworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQuY2MgXAorCQkiQy4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1jYyAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgfAorCXNlZCAtZSAiL15cJC9xIiA+cGF0Y2gxMiAmJgorCWNoZWNrX3BhdGNoIHBhdGNoMTIgJiYKKwkhIGdyZXAgIl5DYzogQy4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoMTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1hZGQtaGVhZGVyIG92ZXJyaWRlcyBjb25maWcuaGVhZGVycycgJworCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5oZWFkZXJzIFwKKwkJIkhlYWRlcjE6IEIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tYWRkLWhlYWRlciAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgfAorCXNlZCAtZSAiL15cJC9xIiA+cGF0Y2gxMyAmJgorCWNoZWNrX3BhdGNoIHBhdGNoMTMgJiYKKwkhIGdyZXAgIl5IZWFkZXIxOiBCLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgcGF0Y2gxMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBmaWxlcycgJworCisJcm0gLXJmIHBhdGNoZXMvICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHBhdGNoZXMvIG1hc3RlciAmJgorCWxzIHBhdGNoZXMvMDAwMS1TaWRlLWNoYW5nZXMtMS5wYXRjaCBwYXRjaGVzLzAwMDItU2lkZS1jaGFuZ2VzLTIucGF0Y2ggcGF0Y2hlcy8wMDAzLVNpZGUtY2hhbmdlcy0zLXdpdGgtbi1iYWNrc2xhc2gtbi1pbi1pdC5wYXRjaAorJworCitjaGVja190aHJlYWRpbmcgKCkgeworCWV4cGVjdD0iJDEiICYmCisJc2hpZnQgJiYKKwkoZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAiJEAiOyBlY2hvICQ/ID4gc3RhdHVzLm91dCkgfAorCSMgUHJpbnRzIGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGUgTWVzc2FnZS1JRCBhbmQgSW4tUmVwbHktVG8sCisJIyBhbmQgcmVwbGFjZXMgYWxsIE1lc3NhZ2UtSUQtbG9va2FsaWtlcyBieSBhIHNlcXVlbmNlIG51bWJlcgorCSIkUEVSTF9QQVRIIiAtbmUgJworCQlpZiAoL14obWVzc2FnZS1pZHxyZWZlcmVuY2VzfGluLXJlcGx5LXRvKS9pKSB7CisJCQkkcHJpbnRpbmcgPSAxOworCQl9IGVsc2lmICgvXlxTLykgeworCQkJJHByaW50aW5nID0gMDsKKwkJfQorCQlpZiAoJHByaW50aW5nKSB7CisJCQkkaHskMX09JGkrKyBpZiAoLzwoW14+XSspPi8gYW5kICFleGlzdHMgJGh7JDF9KTsKKwkJCWZvciAkayAoa2V5cyAlaCkge3MvJGsvJGh7JGt9L307CisJCQlwcmludDsKKwkJfQorCQlwcmludCAiLS0tXG4iIGlmIC9eRnJvbSAvaTsKKwknID4gYWN0dWFsICYmCisJdGVzdCAwID0gIiQoY2F0IHN0YXR1cy5vdXQpIiAmJgorCXRlc3RfY21wICIkZXhwZWN0IiBhY3R1YWwKK30KKworY2F0ID4+IGV4cGVjdC5uby10aHJlYWRpbmcgPDxFT0YKKy0tLQorLS0tCistLS0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB0aHJlYWRpbmcnICcKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWNoZWNrX3RocmVhZGluZyBleHBlY3Qubm8tdGhyZWFkaW5nIG1hc3RlcgorJworCitjYXQgPiBleHBlY3QudGhyZWFkIDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8MT4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCcgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QudGhyZWFkIC0tdGhyZWFkIG1hc3RlcgorJworCitjYXQgPiBleHBlY3QuaW4tcmVwbHktdG8gPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgaW4tcmVwbHktdG8nICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmluLXJlcGx5LXRvIC0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiBcCisJCS0tdGhyZWFkIG1hc3RlcgorJworCitjYXQgPiBleHBlY3QuY292ZXItbGV0dGVyIDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8MT4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBjb3Zlci1sZXR0ZXInICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmNvdmVyLWxldHRlciAtLWNvdmVyLWxldHRlciAtLXRocmVhZCBtYXN0ZXIKKycKKworY2F0ID4gZXhwZWN0LmNsLWlydCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorLS0tCitNZXNzYWdlLUlkOiA8ND4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBjb3Zlci1sZXR0ZXIgaW4tcmVwbHktdG8nICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmNsLWlydCAtLWNvdmVyLWxldHRlciBcCisJCS0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiAtLXRocmVhZCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGV4cGxpY2l0IHNoYWxsb3cnICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmNsLWlydCAtLWNvdmVyLWxldHRlciBcCisJCS0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiAtLXRocmVhZD1zaGFsbG93IG1hc3RlcgorJworCitjYXQgPiBleHBlY3QuZGVlcCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDE+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MD4KKwk8MT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgZGVlcCcgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcCAtLXRocmVhZD1kZWVwIG1hc3RlcgorJworCitjYXQgPiBleHBlY3QuZGVlcC1pcnQgPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDI+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKwk8Mj4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgZGVlcCBpbi1yZXBseS10bycgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcC1pcnQgIC0tdGhyZWFkPWRlZXAgXAorCQktLWluLXJlcGx5LXRvPSI8dGVzdC5tZXNzYWdlPiIgbWFzdGVyCisnCisKK2NhdCA+IGV4cGVjdC5kZWVwLWNsIDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8MT4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwwPgorCTwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8Mj4KK1JlZmVyZW5jZXM6IDwwPgorCTwxPgorCTwyPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwIGNvdmVyLWxldHRlcicgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcC1jbCAtLWNvdmVyLWxldHRlciAtLXRocmVhZD1kZWVwIG1hc3RlcgorJworCitjYXQgPiBleHBlY3QuZGVlcC1jbC1pcnQgPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDI+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKwk8Mj4KKy0tLQorTWVzc2FnZS1JZDogPDQ+CitJbi1SZXBseS1UbzogPDM+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKwk8Mj4KKwk8Mz4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgZGVlcCBjb3Zlci1sZXR0ZXIgaW4tcmVwbHktdG8nICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmRlZXAtY2wtaXJ0IC0tY292ZXItbGV0dGVyIFwKKwkJLS1pbi1yZXBseS10bz0iPHRlc3QubWVzc2FnZT4iIC0tdGhyZWFkPWRlZXAgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCB2aWEgY29uZmlnJyAnCisJdGVzdF9jb25maWcgZm9ybWF0LnRocmVhZCB0cnVlICYmCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC50aHJlYWQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwIHZpYSBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQudGhyZWFkIGRlZXAgJiYKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmRlZXAgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBjb25maWcgKyBvdmVycmlkZScgJworCXRlc3RfY29uZmlnIGZvcm1hdC50aHJlYWQgZGVlcCAmJgorCWNoZWNrX3RocmVhZGluZyBleHBlY3QudGhyZWFkIC0tdGhyZWFkIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgY29uZmlnICsgLS1uby10aHJlYWQnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQudGhyZWFkIGRlZXAgJiYKKwljaGVja190aHJlYWRpbmcgZXhwZWN0Lm5vLXRocmVhZGluZyAtLW5vLXRocmVhZCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjZXNzaXZlIHN1YmplY3QnICcKKworCXJtIC1yZiBwYXRjaGVzLyAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZm9yIGkgaW4gNSA2IDEgMiAzIEEgNCBCIEMgNyA4IDkgMTAgRCBFIEY7IGRvIGVjaG8gIiRpIjsgZG9uZSA+PmZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJUaGlzIGlzIGFuIGV4Y2Vzc2l2ZWx5IGxvbmcgc3ViamVjdCBsaW5lIGZvciBhIG1lc3NhZ2UgZHVlIHRvIHRoZSBoYWJpdCBzb21lIHByb2plY3RzIGhhdmUgb2Ygbm90IGhhdmluZyBhIHNob3J0LCBvbmUtbGluZSBzdWJqZWN0IGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UsIGJ1dCByYXRoZXIgc3RpY2tpbmcgYSB3aG9sZSBwYXJhZ3JhcGggcmlnaHQgYXQgdGhlIHN0YXJ0IGFzIHRoZSBvbmx5IHRoaW5nIGluIHRoZSBjb21taXQgbWVzc2FnZS4gSXQgaGFkIGJldHRlciBub3QgYmVjb21lIHRoZSBmaWxlbmFtZSBmb3IgdGhlIHBhdGNoLiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHBhdGNoZXMvIG1hc3Rlci4uc2lkZSAmJgorCWxzIHBhdGNoZXMvMDAwNC1UaGlzLWlzLWFuLWV4Y2Vzc2l2ZWx5LWxvbmctc3ViamVjdC1saW5lLWZvci1hLW1lc3NhLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyLWxldHRlciBpbmhlcml0cyBkaWZmIG9wdGlvbnMnICcKKworCWdpdCBtdiBmaWxlIGZvbyAmJgorCWdpdCBjb21taXQgLW0gZm9vICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtMSAmJgorCWNoZWNrX3BhdGNoIDAwMDAtY292ZXItbGV0dGVyLnBhdGNoICYmCisJISBncmVwICJmaWxlID0+IGZvbyAuKiAwICpcJCIgMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2ggJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0xIC1NICYmCisJZ3JlcCAiZmlsZSA9PiBmb28gLiogMCAqXCQiIDAwMDAtY292ZXItbGV0dGVyLnBhdGNoCisKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorICBUaGlzIGlzIGFuIGV4Y2Vzc2l2ZWx5IGxvbmcgc3ViamVjdCBsaW5lIGZvciBhIG1lc3NhZ2UgZHVlIHRvIHRoZQorICAgIGhhYml0IHNvbWUgcHJvamVjdHMgaGF2ZSBvZiBub3QgaGF2aW5nIGEgc2hvcnQsIG9uZS1saW5lIHN1YmplY3QgYXQKKyAgICB0aGUgc3RhcnQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLCBidXQgcmF0aGVyIHN0aWNraW5nIGEgd2hvbGUKKyAgICBwYXJhZ3JhcGggcmlnaHQgYXQgdGhlIHN0YXJ0IGFzIHRoZSBvbmx5IHRoaW5nIGluIHRoZSBjb21taXQKKyAgICBtZXNzYWdlLiBJdCBoYWQgYmV0dGVyIG5vdCBiZWNvbWUgdGhlIGZpbGVuYW1lIGZvciB0aGUgcGF0Y2guCisgIGZvbworCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgb2YgY292ZXItbGV0dGVyIHdyYXBzIG92ZXJseS1sb25nIG9uZWxpbmVzJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0yICYmCisJc2VkIC1lICIxLC9BIFUgVGhvci9kIiAtZSAiL15cJC9xIiA8IDAwMDAtY292ZXItbGV0dGVyLnBhdGNoID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2luZGV4IDQwZjM2YzYuLjJkYzVjMjMgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMTMsNCArMTMsMjAgQEAgQworIDEwCisgRAorIEUKKyBGCisrNQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCByZXNwZWN0cyAtVScgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtVTQgLTIgJiYKKwlzZWQgLWUgIjEsL15kaWZmL2QiIC1lICIvXis1L3EiIFwKKwkJPDAwMDEtVGhpcy1pcy1hbi1leGNlc3NpdmVseS1sb25nLXN1YmplY3QtbGluZS1mb3ItYS1tZXNzYS5wYXRjaCBcCisJCT5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IDQwZjM2YzYuLjJkYzVjMjMgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMTQsMyArMTQsMTkgQEAgQworIEQKKyBFCisgRgorKzUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLXAgc3VwcHJlc3NlcyBzdGF0JyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC1wIC0yICYmCisJc2VkIC1lICIxLC9eXCQvZCIgLWUgIi9eKzUvcSIgPCAwMDAxLVRoaXMtaXMtYW4tZXhjZXNzaXZlbHktbG9uZy1zdWJqZWN0LWxpbmUtZm9yLWEtbWVzc2EucGF0Y2ggPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGZyb20gYSBzdWJkaXJlY3RvcnkgKDEpJyAnCisJZmlsZW5hbWU9JCgKKwkJcm0gLXJmIHN1YiAmJgorCQlta2RpciAtcCBzdWIvZGlyICYmCisJCWNkIHN1Yi9kaXIgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtMQorCSkgJiYKKwljYXNlICIkZmlsZW5hbWUiIGluCisJMCopCisJCTs7ICMgb2sKKwkqKQorCQllY2hvICJPb3BzPyAkZmlsZW5hbWUiCisJCWZhbHNlCisJCTs7CisJZXNhYyAmJgorCXRlc3QgLWYgIiRmaWxlbmFtZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGZyb20gYSBzdWJkaXJlY3RvcnkgKDIpJyAnCisJZmlsZW5hbWU9JCgKKwkJcm0gLXJmIHN1YiAmJgorCQlta2RpciAtcCBzdWIvZGlyICYmCisJCWNkIHN1Yi9kaXIgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtbyAuLgorCSkgJiYKKwljYXNlICIkZmlsZW5hbWUiIGluCisJLi4vMCopCisJCTs7ICMgb2sKKwkqKQorCQllY2hvICJPb3BzPyAkZmlsZW5hbWUiCisJCWZhbHNlCisJCTs7CisJZXNhYyAmJgorCWJhc2VuYW1lPSQoZXhwciAiJGZpbGVuYW1lIiA6ICIuKi9cKC4qXCkiKSAmJgorCXRlc3QgLWYgInN1Yi8kYmFzZW5hbWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBmcm9tIGEgc3ViZGlyZWN0b3J5ICgzKScgJworCXJtIC1mIDAqICYmCisJZmlsZW5hbWU9JCgKKwkJcm0gLXJmIHN1YiAmJgorCQlta2RpciAtcCBzdWIvZGlyICYmCisJCWNkIHN1Yi9kaXIgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtbyAiJFRSQVNIX0RJUkVDVE9SWSIKKwkpICYmCisJYmFzZW5hbWU9JChleHByICIkZmlsZW5hbWUiIDogIi4qL1woLipcKSIpICYmCisJdGVzdCAtZiAiJGJhc2VuYW1lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1pbi1yZXBseS10bycgJworCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1pbi1yZXBseS10byAiYmF6QGZvby5iYXIiID4gcGF0Y2g4ICYmCisJZ3JlcCAiXkluLVJlcGx5LVRvOiA8YmF6QGZvby5iYXI+IiBwYXRjaDggJiYKKwlncmVwICJeUmVmZXJlbmNlczogPGJhekBmb28uYmFyPiIgcGF0Y2g4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXNpZ25vZmYnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc2lnbm9mZiAtLXN0ZG91dCB8CisJZ3JlcCAiXlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIKKycKKworZWNobyAiZmF0YWw6IC0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiID4gZXhwZWN0Lm5hbWUtb25seQorZWNobyAiZmF0YWw6IC0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIgPiBleHBlY3QubmFtZS1zdGF0dXMKK2VjaG8gImZhdGFsOiAtLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiID4gZXhwZWN0LmNoZWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbnMgbm8gbG9uZ2VyIGFsbG93ZWQgZm9yIGZvcm1hdC1wYXRjaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1uYW1lLW9ubHkgMj4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5uYW1lLW9ubHkgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLW5hbWUtc3RhdHVzIDI+IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QubmFtZS1zdGF0dXMgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLWNoZWNrIDI+IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuY2hlY2sgb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1udW1zdGF0IHNob3VsZCBwcm9kdWNlIGEgcGF0Y2gnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbnVtc3RhdCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPiBvdXRwdXQgJiYKKwl0ZXN0IDYgPSAkKGdyZXAgIl5kaWZmIC0tZ2l0IGEvIiBvdXRwdXQgfCB3YyAtbCknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLSA8cGF0aD4nICcKKwlnaXQgZm9ybWF0LXBhdGNoIG1hc3Rlci4uc2lkZSAtLSBmaWxlIDI+ZXJyb3IgJiYKKwkhIGdyZXAgIlVzZSAuLS0iIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSBIRUFEJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXNpZ25hdHVyZScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1zaWduYXR1cmU9Im15IHNpZyIgLTEgPm91dHB1dCAmJgorCWdyZXAgIm15IHNpZyIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB3aXRoIGZvcm1hdC5zaWduYXR1cmUgY29uZmlnJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQuc2lnbmF0dXJlICJjb25maWcgc2lnIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPm91dHB1dCAmJgorCWdyZXAgImNvbmZpZyBzaWciIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1zaWduYXR1cmUgb3ZlcnJpZGVzIGZvcm1hdC5zaWduYXR1cmUnICcKKwlnaXQgY29uZmlnIGZvcm1hdC5zaWduYXR1cmUgImNvbmZpZyBzaWciICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXNpZ25hdHVyZT0ib3ZlcnJpZGVzIiAtMSA+b3V0cHV0ICYmCisJISBncmVwICJjb25maWcgc2lnIiBvdXRwdXQgJiYKKwlncmVwICJvdmVycmlkZXMiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1uby1zaWduYXR1cmUgaWdub3JlcyBmb3JtYXQuc2lnbmF0dXJlJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQuc2lnbmF0dXJlICJjb25maWcgc2lnIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1zaWduYXR1cmU9Im15IHNpZyIgLS1uby1zaWduYXR1cmUgXAorCQktMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJISBncmVwICJjb25maWcgc2lnIiBvdXRwdXQgJiYKKwkhIGdyZXAgIm15IHNpZyIgb3V0cHV0ICYmCisJISBncmVwICJeLS0gXCQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1zaWduYXR1cmUgLS1jb3Zlci1sZXR0ZXInICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGZvcm1hdC5zaWduYXR1cmUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tc2lnbmF0dXJlPSJteSBzaWciIC0tY292ZXItbGV0dGVyIFwKKwkJLTEgPm91dHB1dCAmJgorCWdyZXAgIm15IHNpZyIgb3V0cHV0ICYmCisJdGVzdCAyID0gJChncmVwICJteSBzaWciIG91dHB1dCB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQuc2lnbmF0dXJlPSIiIHN1cHJlc3NlcyBzaWduYXR1cmVzJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQuc2lnbmF0dXJlICIiICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJISBncmVwICJeLS0gXCQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1uby1zaWduYXR1cmUgc3VwcmVzc2VzIHNpZ25hdHVyZXMnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGZvcm1hdC5zaWduYXR1cmUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbm8tc2lnbmF0dXJlIC0xID5vdXRwdXQgJiYKKwljaGVja19wYXRjaCBvdXRwdXQgJiYKKwkhIGdyZXAgIl4tLSBcJCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXNpZ25hdHVyZT0iIiBzdXByZXNzZXMgc2lnbmF0dXJlcycgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1zaWduYXR1cmU9IiIgLTEgPm91dHB1dCAmJgorCWNoZWNrX3BhdGNoIG91dHB1dCAmJgorCSEgZ3JlcCAiXi0tIFwkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCBwYWdpbmF0ZXMnICcKKwlybSAtZiBwYWdlcl91c2VkICYmCisJKAorCQlHSVRfUEFHRVI9IndjID5wYWdlcl91c2VkIiAmJgorCQlleHBvcnQgR0lUX1BBR0VSICYmCisJCXRlc3RfdGVybWluYWwgZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWFsbAorCSkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBwYWdlcl91c2VkCisnCisKKyB0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IHBhZ2luYXRpb24gY2FuIGJlIGRpc2FibGVkJyAnCisJcm0gLWYgcGFnZXJfdXNlZCAmJgorCSgKKwkJR0lUX1BBR0VSPSJ3YyA+cGFnZXJfdXNlZCIgJiYKKwkJZXhwb3J0IEdJVF9QQUdFUiAmJgorCQl0ZXN0X3Rlcm1pbmFsIGdpdCAtLW5vLXBhZ2VyIGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWFsbCAmJgorCQl0ZXN0X3Rlcm1pbmFsIGdpdCAtYyAicGFnZXIuZm9ybWF0LXBhdGNoPWZhbHNlIiBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1hbGwKKwkpICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgcGFnZXJfdXNlZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcGFnZXJfdXNlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggaGFuZGxlcyBtdWx0aS1saW5lIHN1YmplY3RzJyAnCisJcm0gLXJmIHBhdGNoZXMvICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWZvciBpIGluIG9uZSB0d28gdGhyZWU7IGRvIGVjaG8gJGk7IGRvbmUgPm1zZyAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLUYgbXNnICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyBwYXRjaGVzIC0xICYmCisJZ3JlcCBeU3ViamVjdDogcGF0Y2hlcy8wMDAxLW9uZS5wYXRjaCA+YWN0dWFsICYmCisJZWNobyAiU3ViamVjdDogW1BBVENIXSBvbmUgdHdvIHRocmVlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggaGFuZGxlcyBtdWx0aS1saW5lIGVuY29kZWQgc3ViamVjdHMnICcKKwlybSAtcmYgcGF0Y2hlcy8gJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZm9yIGkgaW4gZW4gdHbDpSB0cmU7IGRvIGVjaG8gJGk7IGRvbmUgPm1zZyAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLUYgbXNnICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyBwYXRjaGVzIC0xICYmCisJZ3JlcCBeU3ViamVjdDogcGF0Y2hlcy8wMDAxLWVuLnBhdGNoID5hY3R1YWwgJiYKKwllY2hvICJTdWJqZWN0OiBbUEFUQ0hdID0/VVRGLTg/cT9lbj0yMHR2PUMzPUE1PTIwdHJlPz0iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK004PSJmb28gYmFyICIKK002ND0kTTgkTTgkTTgkTTgkTTgkTTgkTTgkTTgKK001MTI9JE02NCRNNjQkTTY0JE02NCRNNjQkTTY0JE02NCRNNjQKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1N1YmplY3Q6IFtQQVRDSF0gZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28KKyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhcgorIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vCisgYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIKKyBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbworIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyCisgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28KKyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhcgorIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdyYXBzIGV4dHJlbWVseSBsb25nIGhlYWRlcnMgKGFzY2lpKScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICIkTTUxMiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5wYXRjaCAmJgorCXNlZCAtbiAiL15TdWJqZWN0L3A7IC9eIC9wOyAvXiQvcSIgPHBhdGNoID5zdWJqZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmplY3QKKycKKworTTg9ImbDtsO2IGJhciAiCitNNjQ9JE04JE04JE04JE04JE04JE04JE04JE04CitNNTEyPSRNNjQkTTY0JE02NCRNNjQkTTY0JE02NCRNNjQkTTY0CitjYXQgPmV4cGVjdCA8PCdFT0YnCitTdWJqZWN0OiBbUEFUQ0hdID0/VVRGLTg/cT9mPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPz0KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdyYXBzIGV4dHJlbWVseSBsb25nIGhlYWRlcnMgKHJmYzIwNDcpJyAnCisJcm0gLXJmIHBhdGNoZXMvICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIiRNNTEyIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnBhdGNoICYmCisJc2VkIC1uICIvXlN1YmplY3QvcDsgL14gL3A7IC9eJC9xIiA8cGF0Y2ggPnN1YmplY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3ViamVjdAorJworCitNOD0iZm9vX2Jhcl8iCitNNjQ9JE04JE04JE04JE04JE04JE04JE04JE04CitjYXQgPmV4cGVjdCA8PEVPRgorRnJvbTogJE02NAorIDxmb29iYXJAZm9vLmJhcj4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdyYXBzIG5vbi1xdW90YWJsZSBoZWFkZXJzJyAnCisJcm0gLXJmIHBhdGNoZXMvICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW1mb28gLS1hdXRob3IgIiRNNjQgPGZvb2JhckBmb28uYmFyPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5wYXRjaCAmJgorCXNlZCAtbiAiL15Gcm9tOiAvcDsgL14gL3A7IC9eJC9xIiA8cGF0Y2ggPmZyb20gJiYKKwl0ZXN0X2NtcCBleHBlY3QgZnJvbQorJworCitjaGVja19hdXRob3IoKSB7CisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUdJVF9BVVRIT1JfTkFNRT0kMSBnaXQgY29tbWl0IC1tIGF1dGhvci1jaGVjayAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnBhdGNoICYmCisJZ3JlcCBeRnJvbTogcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworY2F0ID5leHBlY3QgPDwnRU9GJworRnJvbTogIkZvbyBCLiBCYXIiIDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBxdW90ZXMgZG90IGluIGhlYWRlcnMnICcKKwljaGVja19hdXRob3IgIkZvbyBCLiBCYXIiCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0Zyb206ICJGb28gXCJUaGUgQmF6XCIgQmFyIiA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggcXVvdGVzIGRvdWJsZS1xdW90ZSBpbiBoZWFkZXJzJyAnCisJY2hlY2tfYXV0aG9yICJGb28gXCJUaGUgQmF6XCIgQmFyIgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitGcm9tOiA9P1VURi04P3E/IkY9QzM9QjZvPTIwQi49MjBCYXIiPz0gPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmZjMjA0Ny1lbmNvZGVkIGhlYWRlcnMgYWxzbyBkb3VibGUtcXVvdGUgODIyIHNwZWNpYWxzJyAnCisJY2hlY2tfYXV0aG9yICJGw7ZvIEIuIEJhciIKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworU3ViamVjdDogaGVhZGVyIHdpdGggLiBpbiBpdAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJqZWN0IGxpbmVzIGRvIG5vdCBoYXZlIDgyMiBhdG9tLXF1b3RpbmcnICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiaGVhZGVyIHdpdGggLiBpbiBpdCIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIC0xIC0tc3Rkb3V0ID5wYXRjaCAmJgorCWdyZXAgXlN1YmplY3Q6IHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1N1YmplY3Q6IFtQUkVGSVggMS8xXSBoZWFkZXIgd2l0aCAuIGluIGl0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmplY3QgcHJlZml4ZXMgaGF2ZSBzcGFjZSBwcmVwZW5kZWQnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC1uIC0xIC0tc3Rkb3V0IC0tc3ViamVjdC1wcmVmaXg9UFJFRklYID5wYXRjaCAmJgorCWdyZXAgXlN1YmplY3Q6IHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1N1YmplY3Q6IFsxLzFdIGhlYWRlciB3aXRoIC4gaW4gaXQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgc3ViamVjdCBwcmVmaXggZG9lcyBub3QgaGF2ZSBleHRyYSBzcGFjZScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLW4gLTEgLS1zdGRvdXQgLS1zdWJqZWN0LXByZWZpeD0gPnBhdGNoICYmCisJZ3JlcCBeU3ViamVjdDogcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0IHBhdGNoIGlnbm9yZXMgY29sb3IudWknICcKKwl0ZXN0X3VuY29uZmlnIGNvbG9yLnVpICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+ZXhwZWN0ICYmCisJdGVzdF9jb25maWcgY29sb3IudWkgYWx3YXlzICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2MzZGIxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoCkBAIC0wLDAgKzEsNTU5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzcGVjaWFsIHdoaXRlc3BhY2UgaW4gZGlmZiBlbmdpbmUuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCisjIFJheSBMZWh0aW5pZW1pJ3MgZXhhbXBsZQorCitjYXQgPDwgRU9GID4geAorZG8geworICAgbm90aGluZzsKK30gd2hpbGUgKDApOworRU9GCisKK2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgeAorCitjYXQgPDwgRU9GID4geAorZG8KK3sKKyAgIG5vdGhpbmc7Cit9Cit3aGlsZSAoMCk7CitFT0YKKworY2F0IDw8IEVPRiA+IGV4cGVjdAorZGlmZiAtLWdpdCBhL3ggYi94CitpbmRleCBhZGYzOTM3Li42ZWRjMTcyIDEwMDY0NAorLS0tIGEveAorKysrIGIveAorQEAgLTEsMyArMSw1IEBACistZG8geworK2RvCisreworICAgIG5vdGhpbmc7CistfSB3aGlsZSAoMCk7CisrfQorK3doaWxlICgwKTsKK0VPRgorCitnaXQgZGlmZiA+IG91dAordGVzdF9leHBlY3Rfc3VjY2VzcyAiUmF5J3MgZXhhbXBsZSB3aXRob3V0IG9wdGlvbnMiICd0ZXN0X2NtcCBleHBlY3Qgb3V0JworCitnaXQgZGlmZiAtdyA+IG91dAordGVzdF9leHBlY3Rfc3VjY2VzcyAiUmF5J3MgZXhhbXBsZSB3aXRoIC13IiAndGVzdF9jbXAgZXhwZWN0IG91dCcKKworZ2l0IGRpZmYgLWIgPiBvdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJheSdzIGV4YW1wbGUgd2l0aCAtYiIgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCisKK3RyICdRJyAnXDAxNScgPDwgRU9GID4geAord2hpdGVzcGFjZSBhdCBiZWdpbm5pbmcKK3doaXRlc3BhY2UgY2hhbmdlCit3aGl0ZXNwYWNlIGluIHRoZSBtaWRkbGUKK3doaXRlc3BhY2UgYXQgZW5kCit1bmNoYW5nZWQgbGluZQorQ1IgYXQgZW5kUQorRU9GCisKK2dpdCB1cGRhdGUtaW5kZXggeAorCit0ciAnXycgJyAnIDw8IEVPRiA+IHgKKwl3aGl0ZXNwYWNlIGF0IGJlZ2lubmluZword2hpdGVzcGFjZSAJIGNoYW5nZQord2hpdGUgc3BhY2UgaW4gdGhlIG1pZGRsZQord2hpdGVzcGFjZSBhdCBlbmRfXwordW5jaGFuZ2VkIGxpbmUKK0NSIGF0IGVuZAorRU9GCisKK3RyICdRXycgJ1wwMTUgJyA8PCBFT0YgPiBleHBlY3QKK2RpZmYgLS1naXQgYS94IGIveAoraW5kZXggZDk5YWYyMy4uOGIzMmZiNSAxMDA2NDQKKy0tLSBhL3gKKysrKyBiL3gKK0BAIC0xLDYgKzEsNiBAQAorLXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCistd2hpdGVzcGFjZSBjaGFuZ2UKKy13aGl0ZXNwYWNlIGluIHRoZSBtaWRkbGUKKy13aGl0ZXNwYWNlIGF0IGVuZAorKwl3aGl0ZXNwYWNlIGF0IGJlZ2lubmluZworK3doaXRlc3BhY2UgCSBjaGFuZ2UKKyt3aGl0ZSBzcGFjZSBpbiB0aGUgbWlkZGxlCisrd2hpdGVzcGFjZSBhdCBlbmRfXworIHVuY2hhbmdlZCBsaW5lCistQ1IgYXQgZW5kUQorK0NSIGF0IGVuZAorRU9GCitnaXQgZGlmZiA+IG91dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5vdGhlciB0ZXN0LCB3aXRob3V0IG9wdGlvbnMnICd0ZXN0X2NtcCBleHBlY3Qgb3V0JworCitjYXQgPDwgRU9GID4gZXhwZWN0CitFT0YKK2dpdCBkaWZmIC13ID4gb3V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm90aGVyIHRlc3QsIHdpdGggLXcnICd0ZXN0X2NtcCBleHBlY3Qgb3V0JworZ2l0IGRpZmYgLXcgLWIgPiBvdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aCAtdyAtYicgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCitnaXQgZGlmZiAtdyAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgPiBvdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aCAtdyAtLWlnbm9yZS1zcGFjZS1hdC1lb2wnICd0ZXN0X2NtcCBleHBlY3Qgb3V0JworZ2l0IGRpZmYgLXcgLWIgLS1pZ25vcmUtc3BhY2UtYXQtZW9sID4gb3V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm90aGVyIHRlc3QsIHdpdGggLXcgLWIgLS1pZ25vcmUtc3BhY2UtYXQtZW9sJyAndGVzdF9jbXAgZXhwZWN0IG91dCcKKwordHIgJ1FfJyAnXDAxNSAnIDw8IEVPRiA+IGV4cGVjdAorZGlmZiAtLWdpdCBhL3ggYi94CitpbmRleCBkOTlhZjIzLi44YjMyZmI1IDEwMDY0NAorLS0tIGEveAorKysrIGIveAorQEAgLTEsNiArMSw2IEBACistd2hpdGVzcGFjZSBhdCBiZWdpbm5pbmcKKysJd2hpdGVzcGFjZSBhdCBiZWdpbm5pbmcKKyB3aGl0ZXNwYWNlIAkgY2hhbmdlCistd2hpdGVzcGFjZSBpbiB0aGUgbWlkZGxlCisrd2hpdGUgc3BhY2UgaW4gdGhlIG1pZGRsZQorIHdoaXRlc3BhY2UgYXQgZW5kX18KKyB1bmNoYW5nZWQgbGluZQorIENSIGF0IGVuZAorRU9GCitnaXQgZGlmZiAtYiA+IG91dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5vdGhlciB0ZXN0LCB3aXRoIC1iJyAndGVzdF9jbXAgZXhwZWN0IG91dCcKK2dpdCBkaWZmIC1iIC0taWdub3JlLXNwYWNlLWF0LWVvbCA+IG91dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5vdGhlciB0ZXN0LCB3aXRoIC1iIC0taWdub3JlLXNwYWNlLWF0LWVvbCcgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCisKK3RyICdRXycgJ1wwMTUgJyA8PCBFT0YgPiBleHBlY3QKK2RpZmYgLS1naXQgYS94IGIveAoraW5kZXggZDk5YWYyMy4uOGIzMmZiNSAxMDA2NDQKKy0tLSBhL3gKKysrKyBiL3gKK0BAIC0xLDYgKzEsNiBAQAorLXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCistd2hpdGVzcGFjZSBjaGFuZ2UKKy13aGl0ZXNwYWNlIGluIHRoZSBtaWRkbGUKKysJd2hpdGVzcGFjZSBhdCBiZWdpbm5pbmcKKyt3aGl0ZXNwYWNlIAkgY2hhbmdlCisrd2hpdGUgc3BhY2UgaW4gdGhlIG1pZGRsZQorIHdoaXRlc3BhY2UgYXQgZW5kX18KKyB1bmNoYW5nZWQgbGluZQorIENSIGF0IGVuZAorRU9GCitnaXQgZGlmZiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgPiBvdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aCAtLWlnbm9yZS1zcGFjZS1hdC1lb2wnICd0ZXN0X2NtcCBleHBlY3Qgb3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBtaXhlZCBzcGFjZXMgYW5kIHRhYnMgaW4gaW5kZW50JyAnCisKKwkjIFRoaXMgaXMgaW5kZW50ZWQgd2l0aCBTUCBIVCBTUC4KKwllY2hvICIgCSBmb28oKTsiID4geCAmJgorCWdpdCBkaWZmIC0tY2hlY2sgfCBncmVwICJzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBtaXhlZCB0YWJzIGFuZCBzcGFjZXMgaW4gaW5kZW50JyAnCisKKwkjIFRoaXMgaXMgaW5kZW50ZWQgd2l0aCBIVCBTUCBIVC4KKwllY2hvICIJIAlmb28oKTsiID4geCAmJgorCWdpdCBkaWZmIC0tY2hlY2sgfCBncmVwICJzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3aXRoIG5vIHdoaXRlc3BhY2UgZXJyb3JzJyAnCisKKwlnaXQgY29tbWl0IC1tICJzbmFwc2hvdCIgJiYKKwllY2hvICJmb28oKTsiID4geCAmJgorCWdpdCBkaWZmIC0tY2hlY2sKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UnICcKKworCWVjaG8gImZvbygpOyAiID4geCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3aXRoIHNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50JyAnCisKKwkjIGluZGVudCBoYXMgc3BhY2UgZm9sbG93ZWQgYnkgaGFyZCB0YWIKKwllY2hvICIgCWZvbygpOyIgPiB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlY2sgYW5kIC0tZXhpdC1jb2RlIGFyZSBub3QgZXhjbHVzaXZlJyAnCisKKwlnaXQgY2hlY2tvdXQgeCAmJgorCWdpdCBkaWZmIC0tY2hlY2sgLS1leGl0LWNvZGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZWNrIGFuZCAtLXF1aWV0IGFyZSBub3QgZXhjbHVzaXZlJyAnCisKKwlnaXQgZGlmZiAtLWNoZWNrIC0tcXVpZXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzdGFnZWQgd2l0aCBubyB3aGl0ZXNwYWNlIGVycm9ycycgJworCisJZWNobyAiZm9vKCk7IiA+IHggJiYKKwlnaXQgYWRkIHggJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLWNoZWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3RhZ2VkIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZScgJworCisJZWNobyAiZm9vKCk7ICIgPiB4ICYmCisJZ2l0IGFkZCB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jYWNoZWQgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHN0YWdlZCB3aXRoIHNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50JyAnCisKKwkjIGluZGVudCBoYXMgc3BhY2UgZm9sbG93ZWQgYnkgaGFyZCB0YWIKKwllY2hvICIgCWZvbygpOyIgPiB4ICYmCisJZ2l0IGFkZCB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jYWNoZWQgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggbm8gd2hpdGVzcGFjZSBlcnJvcnMgKGRpZmYtaW5kZXgpJyAnCisKKwllY2hvICJmb28oKTsiID4geCAmJgorCWdpdCBhZGQgeCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2hlY2sgSEVBRAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSAoZGlmZi1pbmRleCknICcKKworCWVjaG8gImZvbygpOyAiID4geCAmJgorCWdpdCBhZGQgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tY2hlY2sgSEVBRAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggc3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQgKGRpZmYtaW5kZXgpJyAnCisKKwkjIGluZGVudCBoYXMgc3BhY2UgZm9sbG93ZWQgYnkgaGFyZCB0YWIKKwllY2hvICIgCWZvbygpOyIgPiB4ICYmCisJZ2l0IGFkZCB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1jaGVjayBIRUFECisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3RhZ2VkIHdpdGggbm8gd2hpdGVzcGFjZSBlcnJvcnMgKGRpZmYtaW5kZXgpJyAnCisKKwllY2hvICJmb28oKTsiID4geCAmJgorCWdpdCBhZGQgeCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tY2hlY2sgSEVBRAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHN0YWdlZCB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UgKGRpZmYtaW5kZXgpJyAnCisKKwllY2hvICJmb28oKTsgIiA+IHggJiYKKwlnaXQgYWRkIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWNoZWNrIEhFQUQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzdGFnZWQgd2l0aCBzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCAoZGlmZi1pbmRleCknICcKKworCSMgaW5kZW50IGhhcyBzcGFjZSBmb2xsb3dlZCBieSBoYXJkIHRhYgorCWVjaG8gIiAJZm9vKCk7IiA+IHggJiYKKwlnaXQgYWRkIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWNoZWNrIEhFQUQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3aXRoIG5vIHdoaXRlc3BhY2UgZXJyb3JzIChkaWZmLXRyZWUpJyAnCisKKwllY2hvICJmb28oKTsiID4geCAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBjb21taXQiIHggJiYKKwlnaXQgZGlmZi10cmVlIC0tY2hlY2sgSEVBRF4gSEVBRAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSAoZGlmZi10cmVlKScgJworCisJZWNobyAiZm9vKCk7ICIgPiB4ICYmCisJZ2l0IGNvbW1pdCAtbSAiYW5vdGhlciBjb21taXQiIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC0tY2hlY2sgSEVBRF4gSEVBRAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggc3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQgKGRpZmYtdHJlZSknICcKKworCSMgaW5kZW50IGhhcyBzcGFjZSBmb2xsb3dlZCBieSBoYXJkIHRhYgorCWVjaG8gIiAJZm9vKCk7IiA+IHggJiYKKwlnaXQgY29tbWl0IC1tICJ5ZXQgYW5vdGhlciIgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLXRyZWUgLS1jaGVjayBIRUFEXiBIRUFECisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdHJhaWxpbmcgd2hpdGVzcGFjZSAodHJhaWxpbmctc3BhY2U6IG9mZiknICcKKworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICItdHJhaWxpbmctc3BhY2UiICYmCisJZWNobyAiZm9vICgpOyAgICIgPiB4ICYmCisJZ2l0IGRpZmYgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRyYWlsaW5nIHdoaXRlc3BhY2UgKHRyYWlsaW5nLXNwYWNlOiBvbiknICcKKworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJ0cmFpbGluZy1zcGFjZSIgJiYKKwllY2hvICJmb28gKCk7ICAgIiA+IHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQgKHNwYWNlLWJlZm9yZS10YWI6IG9mZiknICcKKworCSMgaW5kZW50IGNvbnRhaW5zIHNwYWNlIGZvbGxvd2VkIGJ5IEhUCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgIi1zcGFjZS1iZWZvcmUtdGFiIiAmJgorCWVjaG8gIiAJZm9vICgpOyIgPiB4ICYmCisJZ2l0IGRpZmYgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50IChzcGFjZS1iZWZvcmUtdGFiOiBvbiknICcKKworCSMgaW5kZW50IGNvbnRhaW5zIHNwYWNlIGZvbGxvd2VkIGJ5IEhUCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgInNwYWNlLWJlZm9yZS10YWIiICYmCisJZWNobyAiIAlmb28gKCk7ICAgIiA+IHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BhY2VzIGFzIGluZGVudGF0aW9uIChpbmRlbnQtd2l0aC1ub24tdGFiOiBvZmYpJyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiLWluZGVudC13aXRoLW5vbi10YWIiICYmCisJZWNobyAiICAgICAgICBmb28gKCk7IiA+IHggJiYKKwlnaXQgZGlmZiAtLWNoZWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BhY2VzIGFzIGluZGVudGF0aW9uIChpbmRlbnQtd2l0aC1ub24tdGFiOiBvbiknICcKKworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJpbmRlbnQtd2l0aC1ub24tdGFiIiAmJgorCWVjaG8gIiAgICAgICAgZm9vICgpOyIgPiB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpdHRvLCBidXQgdGFid2lkdGg9OScgJworCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgImluZGVudC13aXRoLW5vbi10YWIsdGFid2lkdGg9OSIgJiYKKwlnaXQgZGlmZiAtLWNoZWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGFicyBhbmQgc3BhY2VzIGFzIGluZGVudGF0aW9uIChpbmRlbnQtd2l0aC1ub24tdGFiOiBvbiknICcKKworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJpbmRlbnQtd2l0aC1ub24tdGFiIiAmJgorCWVjaG8gIgkgICAgICAgICAgICAgICAgZm9vICgpOyIgPiB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpdHRvLCBidXQgdGFid2lkdGg9MTAnICcKKworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJpbmRlbnQtd2l0aC1ub24tdGFiLHRhYndpZHRoPTEwIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXR0bywgYnV0IHRhYndpZHRoPTIwJyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiaW5kZW50LXdpdGgtbm9uLXRhYix0YWJ3aWR0aD0yMCIgJiYKKwlnaXQgZGlmZiAtLWNoZWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGFicyBhcyBpbmRlbnRhdGlvbiAodGFiLWluLWluZGVudDogb2ZmKScgJworCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgIi10YWItaW4taW5kZW50IiAmJgorCWVjaG8gIglmb28gKCk7IiA+IHggJiYKKwlnaXQgZGlmZiAtLWNoZWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGFicyBhcyBpbmRlbnRhdGlvbiAodGFiLWluLWluZGVudDogb24pJyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAidGFiLWluLWluZGVudCIgJiYKKwllY2hvICIJZm9vICgpOyIgPiB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRhYnMgYW5kIHNwYWNlcyBhcyBpbmRlbnRhdGlvbiAodGFiLWluLWluZGVudDogb24pJyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAidGFiLWluLWluZGVudCIgJiYKKwllY2hvICIJICAgICAgICAgICAgICAgIGZvbyAoKTsiID4geCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXR0bywgYnV0IHRhYndpZHRoPTEgKG11c3QgYmUgaXJyZWxldmFudCknICcKKworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJ0YWItaW4taW5kZW50LHRhYndpZHRoPTEiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRhYi1pbi1pbmRlbnQgYW5kIGluZGVudC13aXRoLW5vbi10YWIgY29uZmxpY3QnICcKKworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJ0YWItaW4taW5kZW50LGluZGVudC13aXRoLW5vbi10YWIiICYmCisJZWNobyAiZm9vICgpOyIgPiB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRhYi1pbi1pbmRlbnQgZXhjbHVkZWQgZnJvbSB3aWxkY2FyZCB3aGl0ZXNwYWNlIGF0dHJpYnV0ZScgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCWVjaG8gInggd2hpdGVzcGFjZSIgPiAuZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gIgkgIGZvbyAoKTsiID4geCAmJgorCWdpdCBkaWZmIC0tY2hlY2sgJiYKKwlybSAtZiAuZ2l0YXR0cmlidXRlcworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpbmUgbnVtYmVycyBpbiAtLWNoZWNrIG91dHB1dCBhcmUgY29ycmVjdCcgJworCisJZWNobyAiIiA+IHggJiYKKwllY2hvICJmb28oKTsgIiA+PiB4ICYmCisJZ2l0IGRpZmYgLS1jaGVjayB8IGdyZXAgIng6MjoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tkaWZmIGRldGVjdHMgbmV3IHRyYWlsaW5nIGJsYW5rIGxpbmVzICgxKScgJworCWVjaG8gImZvbygpOyIgPnggJiYKKwllY2hvICIiID4+eCAmJgorCWdpdCBkaWZmIC0tY2hlY2sgfCBncmVwICJuZXcgYmxhbmsgbGluZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tkaWZmIGRldGVjdHMgbmV3IHRyYWlsaW5nIGJsYW5rIGxpbmVzICgyKScgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG87IGVjaG87IH0gPnggJiYKKwlnaXQgYWRkIHggJiYKKwl7IGVjaG8gYTsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgfSA+eCAmJgorCWdpdCBkaWZmIC0tY2hlY2sgfCBncmVwICJuZXcgYmxhbmsgbGluZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tkaWZmIGFsbG93cyBuZXcgYmxhbmsgbGluZXMnICcKKwlnaXQgY2hlY2tvdXQgeCAmJgorCW12IHggeSAmJgorCSgKKwkJZWNobyAiLyogVGhpcyBpcyBuZXcgKi8iICYmCisJCWVjaG8gIiIgJiYKKwkJY2F0IHkKKwkpID54ICYmCisJZ2l0IGRpZmYgLS1jaGVjaworJworCitjYXQgPDxFT0YgPmV4cGVjdAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlLW9ubHkgY2hhbmdlcyBub3QgcmVwb3J0ZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA+eCAiaGVsbG8gd29ybGQiICYmCisJZ2l0IGFkZCB4ICYmCisJZ2l0IGNvbW1pdCAtbSAiaGVsbG8gMSIgJiYKKwllY2hvID54ICJoZWxsbyAgd29ybGQiICYmCisJZ2l0IGRpZmYgLWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0IDw8RU9GID5leHBlY3QKK2RpZmYgLS1naXQgYS94IGIvegorc2ltaWxhcml0eSBpbmRleCBOVU0lCityZW5hbWUgZnJvbSB4CityZW5hbWUgdG8gegoraW5kZXggMzgwYzMyYS4uYTk3Yjc4NSAxMDA2NDQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZS1vbmx5IGNoYW5nZXMgcmVwb3J0ZWQgYWNyb3NzIHJlbmFtZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDk7IGRvIGVjaG8gIiRpJGkkaSRpJGkkaSI7IGRvbmUgPnggJiYKKwlnaXQgYWRkIHggJiYKKwlnaXQgY29tbWl0IC1tICJiYXNlIiAmJgorCXNlZCAtZSAiNXMvXi8gLyIgeCA+eiAmJgorCWdpdCBybSB4ICYmCisJZ2l0IGFkZCB6ICYmCisJZ2l0IGRpZmYgLXcgLU0gLS1jYWNoZWQgfAorCXNlZCAtZSAiL15zaW1pbGFyaXR5IGluZGV4IC9zL1swLTldWzAtOV0qL05VTS8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitkaWZmIC0tZ2l0IGEvZW1wdHkgYi92b2lkCitzaW1pbGFyaXR5IGluZGV4IDEwMCUKK3JlbmFtZSBmcm9tIGVtcHR5CityZW5hbWUgdG8gdm9pZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBlbXB0eScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+ZW1wdHkgJiYKKwlnaXQgYWRkIGVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSBlbXB0eSAmJgorCWdpdCBtdiBlbXB0eSB2b2lkICYmCisJZ2l0IGRpZmYgLXcgLS1jYWNoZWQgLU0gPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmVkIGRpZmYgd2l0aCBhdXRvY3JsZiBjb252ZXJzaW9uJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA+eCBoZWxsbyAmJgorCWdpdCBjb21taXQgLW0gIm9uZSBzaWRlIiB4ICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZWNobyA+eCBnb29kYnllICYmCisJZ2l0IGNvbW1pdCAtbSAidGhlIG90aGVyIHNpZGUiIHggJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKworCWdpdCBkaWZmIHwgc2VkIC1lICIxLC9eQEBAL2QiID5hY3R1YWwgJiYKKwkhIGdyZXAgIl4tIiBhY3R1YWwKKworJworCisjIFN0YXJ0IHRlc3RpbmcgdGhlIGNvbG9yZWQgZm9ybWF0IGZvciB3aGl0ZXNwYWNlIGNoZWNrcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaWZmIGNvbG9ycycgJworCWdpdCBjb25maWcgY29sb3IuZGlmZiBhbHdheXMgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYucGxhaW4gbm9ybWFsICYmCisJZ2l0IGNvbmZpZyBjb2xvci5kaWZmLm1ldGEgYm9sZCAmJgorCWdpdCBjb25maWcgY29sb3IuZGlmZi5mcmFnIGN5YW4gJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYuZnVuYyBub3JtYWwgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYub2xkIHJlZCAmJgorCWdpdCBjb25maWcgY29sb3IuZGlmZi5uZXcgZ3JlZW4gJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYuY29tbWl0IHllbGxvdyAmJgorCWdpdCBjb25maWcgY29sb3IuZGlmZi53aGl0ZXNwYWNlICJub3JtYWwgcmVkIiAmJgorCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlCisnCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ggYi94PFJFU0VUPgorPEJPTEQ+aW5kZXggOWRhZWFmYi4uMjg3NGI5MSAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS94PFJFU0VUPgorPEJPTEQ+KysrIGIveDxSRVNFVD4KKzxDWUFOPkBAIC0xICsxLDQgQEA8UkVTRVQ+CisgdGVzdDxSRVNFVD4KKzxHUkVFTj4rPFJFU0VUPjxHUkVFTj57PFJFU0VUPgorPEdSRUVOPis8UkVTRVQ+PEJSRUQ+CTxSRVNFVD4KKzxHUkVFTj4rPFJFU0VUPjxHUkVFTj59PFJFU0VUPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgdGhhdCBpbnRyb2R1Y2VzIGEgbGluZSB3aXRoIG9ubHkgdGFicycgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIGJsYW5rLWF0LWVvbCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvICJ0ZXN0IiA+IHggJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIiB4ICYmCisJZWNobyAie05UTn0iIHwgdHIgIk5UIiAiXG5cdCIgPj4geCAmJgorCWdpdCAtYyBjb2xvci5kaWZmPWFsd2F5cyBkaWZmIHwgdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxNi1kaWZmLXF1b3RlLnNoIGIvdC90NDAxNi1kaWZmLXF1b3RlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkNTQzZWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE2LWRpZmYtcXVvdGUuc2gKQEAgLTAsMCArMSw4NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdRdW90aW5nIHBhdGhzIGluIGRpZmYgb3V0cHV0LgorJworCisuIC4vdGVzdC1saWIuc2gKKworUDA9J3BhdGhuYW1lJworUDE9J3BhdGhuYW1lCXdpdGggSFQnCitQMj0ncGF0aG5hbWUgd2l0aCBTUCcKK1AzPSdwYXRobmFtZQord2l0aCBMRicKK2VjaG8gMj4vZGV2L251bGwgPiIkUDEiICYmIHRlc3QgLWYgIiRQMSIgJiYgcm0gLWYgIiRQMSIgfHwgeworCXNraXBfYWxsPSdZb3VyIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWxsb3cgdGFicyBpbiBmaWxlbmFtZXMnCisJdGVzdF9kb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gUDAuMCA+IiRQMC4wIiAmJgorCWVjaG8gUDAuMSA+IiRQMC4xIiAmJgorCWVjaG8gUDAuMiA+IiRQMC4yIiAmJgorCWVjaG8gUDAuMyA+IiRQMC4zIiAmJgorCWVjaG8gUDEuMCA+IiRQMS4wIiAmJgorCWVjaG8gUDEuMiA+IiRQMS4yIiAmJgorCWVjaG8gUDEuMyA+IiRQMS4zIiAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBtdiAiJFAwLjAiICJSJFAwLjAiICYmCisJZ2l0IG12ICIkUDAuMSIgIlIkUDEuMCIgJiYKKwlnaXQgbXYgIiRQMC4yIiAiUiRQMi4wIiAmJgorCWdpdCBtdiAiJFAwLjMiICJSJFAzLjAiICYmCisJZ2l0IG12ICIkUDEuMCIgIlIkUDAuMSIgJiYKKwlnaXQgbXYgIiRQMS4yIiAiUiRQMi4xIiAmJgorCWdpdCBtdiAiJFAxLjMiICJSJFAzLjEiICYmCisJOgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCBmaWxlcycgJworY2F0ID5leHBlY3QgPDxcRU9GCisgcmVuYW1lIHBhdGhuYW1lLjEgPT4gIlJwYXRobmFtZVx0d2l0aCBIVC4wIiAoMTAwJSkKKyByZW5hbWUgcGF0aG5hbWUuMyA9PiAiUnBhdGhuYW1lXG53aXRoIExGLjAiICgxMDAlKQorIHJlbmFtZSAicGF0aG5hbWVcdHdpdGggSFQuMyIgPT4gIlJwYXRobmFtZVxud2l0aCBMRi4xIiAoMTAwJSkKKyByZW5hbWUgcGF0aG5hbWUuMiA9PiBScGF0aG5hbWUgd2l0aCBTUC4wICgxMDAlKQorIHJlbmFtZSAicGF0aG5hbWVcdHdpdGggSFQuMiIgPT4gUnBhdGhuYW1lIHdpdGggU1AuMSAoMTAwJSkKKyByZW5hbWUgcGF0aG5hbWUuMCA9PiBScGF0aG5hbWUuMCAoMTAwJSkKKyByZW5hbWUgInBhdGhuYW1lXHR3aXRoIEhULjAiID0+IFJwYXRobmFtZS4xICgxMDAlKQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0tc3VtbWFyeSAtTSBIRUFEJyAnCisJZ2l0IGRpZmYgLS1zdW1tYXJ5IC1NIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1udW1zdGF0IC1NIEhFQUQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJMAkwCXBhdGhuYW1lLjEgPT4gIlJwYXRobmFtZVx0d2l0aCBIVC4wIgorCTAJMAlwYXRobmFtZS4zID0+ICJScGF0aG5hbWVcbndpdGggTEYuMCIKKwkwCTAJInBhdGhuYW1lXHR3aXRoIEhULjMiID0+ICJScGF0aG5hbWVcbndpdGggTEYuMSIKKwkwCTAJcGF0aG5hbWUuMiA9PiBScGF0aG5hbWUgd2l0aCBTUC4wCisJMAkwCSJwYXRobmFtZVx0d2l0aCBIVC4yIiA9PiBScGF0aG5hbWUgd2l0aCBTUC4xCisJMAkwCXBhdGhuYW1lLjAgPT4gUnBhdGhuYW1lLjAKKwkwCTAJInBhdGhuYW1lXHR3aXRoIEhULjAiID0+IFJwYXRobmFtZS4xCisJRU9GCisJZ2l0IGRpZmYgLS1udW1zdGF0IC1NIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1zdGF0IC1NIEhFQUQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIHBhdGhuYW1lLjEgPT4gIlJwYXRobmFtZVx0d2l0aCBIVC4wIiAgICAgICAgICAgIHwgMAorCSBwYXRobmFtZS4zID0+ICJScGF0aG5hbWVcbndpdGggTEYuMCIgICAgICAgICAgICB8IDAKKwkgInBhdGhuYW1lXHR3aXRoIEhULjMiID0+ICJScGF0aG5hbWVcbndpdGggTEYuMSIgfCAwCisJIHBhdGhuYW1lLjIgPT4gUnBhdGhuYW1lIHdpdGggU1AuMCAgICAgICAgICAgICAgIHwgMAorCSAicGF0aG5hbWVcdHdpdGggSFQuMiIgPT4gUnBhdGhuYW1lIHdpdGggU1AuMSAgICB8IDAKKwkgcGF0aG5hbWUuMCA9PiBScGF0aG5hbWUuMCAgICAgICAgICAgICAgICAgICAgICAgfCAwCisJICJwYXRobmFtZVx0d2l0aCBIVC4wIiA9PiBScGF0aG5hbWUuMSAgICAgICAgICAgIHwgMAorCSA3IGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKwlFT0YKKwlnaXQgZGlmZiAtLXN0YXQgLU0gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE3LWRpZmYtcmV0dmFsLnNoIGIvdC90NDAxNy1kaWZmLXJldHZhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NWE3Y2E3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxNy1kaWZmLXJldHZhbC5zaApAQCAtMCwwICsxLDEzNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1JldHVybiB2YWx1ZSBvZiBkaWZmcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyAiMSAiID5hICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSB6ZXJvdGggJiYKKwllY2hvIDEgPmEgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisJZWNobyAyID5iICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1xdWlldCAtdyAgSEVBRF5eIEhFQUReJyAnCisJZ2l0IGRpZmYgLS1xdWlldCAtdyBIRUFEXl4gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1xdWlldCBIRUFEXl4gSEVBRF4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0IEhFQUReXiBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXF1aWV0IC13ICBIRUFEXiBIRUFEJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAtdyBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRF4gSEVBRCcgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRF4gSEVBRCAtLSBhJyAnCisJZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEXiBIRUFEIC0tIGEKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRF4gSEVBRCAtLSBiJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLS1leGl0LWNvZGUgSEVBRF4gSEVBRCAtLSBiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlY2hvIEhFQUQgfCBnaXQgZGlmZi10cmVlIC0tc3RkaW4nICcKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIC0tc3RkaW4KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRCBIRUFEJyAnCisJZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEIEhFQUQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzJyAnCisJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQnICcKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFECisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEXicgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFEXgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRF4nICcKKwllY2hvIHRleHQgPj5iICYmCisJZWNobyAzID5jICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUReCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIC1TdGV4dCBIRUFEXiBIRUFEIC0tIGInICcKKwlnaXQgY29tbWl0IC1tICJ0ZXh0IGluIGIiICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLXAgLS1leGl0LWNvZGUgLVN0ZXh0IEhFQUReIEhFQUQgLS0gYgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSAtU25vdC1mb3VuZCBIRUFEXiBIRUFEIC0tIGInICcKKwlnaXQgZGlmZi10cmVlIC1wIC0tZXhpdC1jb2RlIC1Tbm90LWZvdW5kIEhFQUReIEhFQUQgLS0gYgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMnICcKKwllY2hvIDMgPj5jICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCBjICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVjayAtLWV4aXQtY29kZSByZXR1cm5zIDAgZm9yIG5vIGRpZmZlcmVuY2UnICcKKworCWdpdCBkaWZmIC0tY2hlY2sgLS1leGl0LWNvZGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZWNrIC0tZXhpdC1jb2RlIHJldHVybnMgMSBmb3IgYSBjbGVhbiBkaWZmZXJlbmNlJyAnCisKKwllY2hvICJnb29kIiA+IGEgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1jaGVjayAtLWV4aXQtY29kZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlY2sgLS1leGl0LWNvZGUgcmV0dXJucyAzIGZvciBhIGRpcnR5IGRpZmZlcmVuY2UnICcKKworCWVjaG8gImJhZCAgICIgPj4gYSAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMyBnaXQgZGlmZiAtLWNoZWNrIC0tZXhpdC1jb2RlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVjayB3aXRoIC0tbm8tcGFnZXIgcmV0dXJucyAyIGZvciBkaXJ0eSBkaWZmZXJlbmNlJyAnCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDIgZ2l0IC0tbm8tcGFnZXIgZGlmZiAtLWNoZWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc2hvdWxkIHRlc3Qgbm90IGp1c3QgdGhlIGxhc3QgbGluZScgJworCWVjaG8gIiIgPj5hICYmCisJdGVzdF9leHBlY3RfY29kZSAyIGdpdCAtLW5vLXBhZ2VyIGRpZmYgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGRldGVjdHMgbGVmdG92ZXIgY29uZmxpY3QgbWFya2VycycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwllY2hvIGJpbmFyeSA+PmIgJiYKKwlnaXQgY29tbWl0IC1tICJzaWRlIiBiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWdpdCBhZGQgYiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgLS1uby1wYWdlciBkaWZmIC0tY2FjaGVkIC0tY2hlY2sgPnRlc3Qub3V0ICYmCisJdGVzdCAzID0gJChncmVwICJjb25mbGljdCBtYXJrZXIiIHRlc3Qub3V0IHwgd2MgLWwpICYmCisJZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBob25vcnMgY29uZmxpY3QgbWFya2VyIGxlbmd0aCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvICI+Pj4+Pj4+IGJvbyIgPj5iICYmCisJZWNobyAiPT09PT09IiA+PmEgJiYKKwlnaXQgZGlmZiAtLWNoZWNrIGEgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDIgZ2l0IGRpZmYgLS1jaGVjayBiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gIj4+Pj4+Pj4+IGJvbyIgPj5iICYmCisJZWNobyAiPT09PT09PT0iID4+YSAmJgorCWdpdCBkaWZmIC0tY2hlY2sgJiYKKwllY2hvICJiIGNvbmZsaWN0LW1hcmtlci1zaXplPTgiID4uZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgZGlmZiAtLWNoZWNrIGIgJiYKKwlnaXQgZGlmZiAtLWNoZWNrIGEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoIGIvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4MmQzZTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKQEAgLTAsMCArMSwxOTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGN1c3RvbSBkaWZmIGZ1bmN0aW9uIG5hbWUgcGF0dGVybnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitMRj0nCisnCitjYXQgPkJlZXIuamF2YSA8PFxFT0YKK3B1YmxpYyBjbGFzcyBCZWVyCit7CisJaW50IHNwZWNpYWw7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKKwl7CisJCVN0cmluZyBzPSIgIjsKKwkJZm9yKGludCB4ID0gOTk7IHggPiAwOyB4LS0pCisJCXsKKwkJCVN5c3RlbS5vdXQucHJpbnQoeCArICIgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsICIKKwkJCQkrIHggKyAiIGJvdHRsZXMgb2YgYmVlclxuIgorCQkJCSsgIlRha2Ugb25lIGRvd24sIHBhc3MgaXQgYXJvdW5kLCAiICsgKHggLSAxKQorCQkJCSsgIiBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwuXG4iKTsKKwkJfQorCQlTeXN0ZW0ub3V0LnByaW50KCJHbyB0byB0aGUgc3RvcmUsIGJ1eSBzb21lIG1vcmUsXG4iCisJCQkrICI5OSBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwuXG4iKTsKKwl9Cit9CitFT0YKK3NlZCAncy9iZWVyXFwvYmVlcixcXC8nIDxCZWVyLmphdmEgPkJlZXItY29ycmVjdC5qYXZhCitjYXQgPkJlZXIucGVybCA8PFxFT1QKK3BhY2thZ2UgQmVlcjsKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBwYXJlbnQgcXcoRXhwb3J0ZXIpOworb3VyIEBFWFBPUlRfT0sgPSBxdyhyb3VuZCBmaW5hbHJvdW5kKTsKKworc3ViIG90aGVyOyAjIGZvcndhcmQgZGVjbGFyYXRpb24KKworIyBoZWxsbworCitzdWIgcm91bmQgeworCW15ICgkbikgPSBAXzsKKwlwcmludCAiJG4gYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsICI7CisJcHJpbnQgIiRuIGJvdHRsZXMgb2YgYmVlclxuIjsKKwlwcmludCAiVGFrZSBvbmUgZG93biwgcGFzcyBpdCBhcm91bmQsICI7CisJJG4gPSAkbiAtIDE7CisJcHJpbnQgIiRuIGJvdHRsZXMgb2YgYmVlciBvbiB0aGUgd2FsbC5cbiI7Cit9CisKK3N1YiBmaW5hbHJvdW5kCit7CisJcHJpbnQgIkdvIHRvIHRoZSBzdG9yZSwgYnV5IHNvbWUgbW9yZVxuIjsKKwlwcmludCAiOTkgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsLlxuIik7Cit9CisKK3N1YiB3aXRoaGVyZWRvY3VtZW50IHsKKwlwcmludCA8PCJFT0YiCitkZWNveSBoZXJlLWRvYworRU9GCisJIyBzb21lIGxpbmVzIG9mIGNvbnRleHQKKwkjIHRvIHBhZCBpdCBvdXQKKwlwcmludCAiaGVsbG9cbiI7Cit9CisKK19fRU5EX18KKworPWhlYWQxIE5BTUUKKworQmVlciAtIHN1YnJvdXRpbmUgdG8gb3V0cHV0IGZyYWdtZW50IG9mIGEgZHJpbmtpbmcgc29uZworCis9aGVhZDEgU1lOT1BTSVMKKworCXVzZSBCZWVyIHF3KHJvdW5kIGZpbmFscm91bmQpOworCisJc3ViIHNvbmcgeworCQlmb3IgKG15ICRpID0gOTk7ICRpID4gMDsgJGktLSkgeworCQkJcm91bmQgJGk7CisJCX0KKwkJZmluYWxyb3VuZDsKKwl9CisKKwlzb25nOworCis9Y3V0CitFT1QKK3NlZCAtZSAnCisJcy9oZWxsby9nb29kYnllLworCXMvYmVlclxcL2JlZXIsXFwvCisJcy9tb3JlXFwvbW9yZSxcXC8KKwlzL3Nvbmc7L3NvbmcoKTsvCisnIDxCZWVyLnBlcmwgPkJlZXItY29ycmVjdC5wZXJsCisKK3Rlc3RfY29uZmlnICgpIHsKKwlnaXQgY29uZmlnICIkMSIgIiQyIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNvbmZpZyAtLXVuc2V0ICQxIgorfQorCit0ZXN0X2V4cGVjdF9mdW5jbmFtZSAoKSB7CisJbGFuZz0kezItamF2YX0KKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtVTEgXAorCQkiQmVlci4kbGFuZyIgIkJlZXItY29ycmVjdC4kbGFuZyIgPmRpZmYgJiYKKwlncmVwICJeQEAuKkBAICQxIiBkaWZmCit9CisKK2ZvciBwIGluIGFkYSBiaWJ0ZXggY3BwIGNzaGFycCBmb3J0cmFuIGh0bWwgamF2YSBtYXRsYWIgb2JqYyBwYXNjYWwgcGVybCBwaHAgcHl0aG9uIHJ1YnkgdGV4CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImJ1aWx0aW4gJHAgcGF0dGVybiBjb21waWxlcyIgJworCQllY2hvICIqLmphdmEgZGlmZj0kcCIgPi5naXRhdHRyaWJ1dGVzICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IFwKKwkJCUJlZXIuamF2YSBCZWVyLWNvcnJlY3QuamF2YSAyPm1zZyAmJgorCQkhIGdyZXAgZmF0YWwgbXNnICYmCisJCSEgZ3JlcCBlcnJvciBtc2cKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYnVpbHRpbiAkcCB3b3JkUmVnZXggcGF0dGVybiBjb21waWxlcyIgJworCQllY2hvICIqLmphdmEgZGlmZj0kcCIgPi5naXRhdHRyaWJ1dGVzICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IC0td29yZC1kaWZmIFwKKwkJCUJlZXIuamF2YSBCZWVyLWNvcnJlY3QuamF2YSAyPm1zZyAmJgorCQkhIGdyZXAgZmF0YWwgbXNnICYmCisJCSEgZ3JlcCBlcnJvciBtc2cKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgYmVoYXZpb3VyJyAnCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X2V4cGVjdF9mdW5jbmFtZSAicHVibGljIGNsYXNzIEJlZXJcJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIC5naXRhdHRyaWJ1dGVzIGRlY2xhcmluZyBkcml2ZXJzIHRvIHRlc3QnICcKKwljYXQgPi5naXRhdHRyaWJ1dGVzIDw8LVxFT0YKKwkqLmphdmEgZGlmZj1qYXZhCisJKi5wZXJsIGRpZmY9cGVybAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVzZXQgamF2YSBwYXR0ZXJuJyAnCisJdGVzdF9leHBlY3RfZnVuY25hbWUgInB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2V0IHBlcmwgcGF0dGVybicgJworCXRlc3RfZXhwZWN0X2Z1bmNuYW1lICJzdWIgcm91bmQge1wkIiBwZXJsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlcmwgcGF0dGVybiBhY2NlcHRzIEsmUiBzdHlsZSBicmFjZSBwbGFjZW1lbnQsIHRvbycgJworCXRlc3RfZXhwZWN0X2Z1bmNuYW1lICJzdWIgZmluYWxyb3VuZFwkIiBwZXJsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1dCBpcyBub3QgZGlzdHJhY3RlZCBieSBlbmQgb2YgPDxoZXJlIGRvY3VtZW50JyAnCisJdGVzdF9leHBlY3RfZnVuY25hbWUgInN1YiB3aXRoaGVyZWRvY3VtZW50IHtcJCIgcGVybAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwZXJsIHBhdHRlcm4gaXMgbm90IGRpc3RyYWN0ZWQgYnkgc3ViIHdpdGhpbiBQT0QnICcKKwl0ZXN0X2V4cGVjdF9mdW5jbmFtZSAiPWhlYWQiIHBlcmwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGVybCBwYXR0ZXJuIGdldHMgZnVsbCBsaW5lIG9mIFBPRCBoZWFkZXInICcKKwl0ZXN0X2V4cGVjdF9mdW5jbmFtZSAiPWhlYWQxIFNZTk9QU0lTXCQiIHBlcmwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGVybCBwYXR0ZXJuIGlzIG5vdCBkaXN0cmFjdGVkIGJ5IGZvcndhcmQgZGVjbGFyYXRpb24nICcKKwl0ZXN0X2V4cGVjdF9mdW5jbmFtZSAicGFja2FnZSBCZWVyO1wkIiBwZXJsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBwYXR0ZXJuJyAnCisJdGVzdF9jb25maWcgZGlmZi5qYXZhLmZ1bmNuYW1lICIhc3RhdGljCishU3RyaW5nCitbXiAJXS4qcy4qIiAmJgorCXRlc3RfZXhwZWN0X2Z1bmNuYW1lICJpbnQgc3BlY2lhbDtcJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFzdCByZWdleHAgbXVzdCBub3QgYmUgbmVnYXRlZCcgJworCXRlc3RfY29uZmlnIGRpZmYuamF2YS5mdW5jbmFtZSAiIXN0YXRpYyIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgZGlmZiAtLW5vLWluZGV4IEJlZXIuamF2YSBCZWVyLWNvcnJlY3QuamF2YSAyPm1zZyAmJgorCWdyZXAgIjogTGFzdCBleHByZXNzaW9uIG11c3Qgbm90IGJlIG5lZ2F0ZWQ6IiBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0dGVybiB3aGljaCBtYXRjaGVzIHRvIGVuZCBvZiBsaW5lJyAnCisJdGVzdF9jb25maWcgZGlmZi5qYXZhLmZ1bmNuYW1lICJCZWVyXCQiICYmCisJdGVzdF9leHBlY3RfZnVuY25hbWUgIkJlZXJcJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWx0ZXJuYXRpb24gaW4gcGF0dGVybicgJworCXRlc3RfY29uZmlnIGRpZmYuamF2YS5mdW5jbmFtZSAiQmVlciQiICYmCisJdGVzdF9jb25maWcgZGlmZi5qYXZhLnhmdW5jbmFtZSAiXlsgCV0qKChwdWJsaWN8c3RhdGljKS4qKSQiICYmCisJdGVzdF9leHBlY3RfZnVuY25hbWUgInB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE5LWRpZmYtd3NlcnJvci5zaCBiL3QvdDQwMTktZGlmZi13c2Vycm9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1MDE5NzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE5LWRpZmYtd3NlcnJvci5zaApAQCAtMCwwICsxLDI5NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgd2hpdGVzcGFjZSBlcnJvciBkZXRlY3Rpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWdpdCBjb25maWcgZGlmZi5jb2xvci53aGl0ZXNwYWNlICJibHVlIHJldmVyc2UiICYmCisJPkYgJiYKKwlnaXQgYWRkIEYgJiYKKwllY2hvICIgICAgICAgICBFaWdodCBTUCBpbmRlbnQiID4+RiAmJgorCWVjaG8gIiAJSFQgYW5kIFNQIGluZGVudCIgPj5GICYmCisJZWNobyAiV2l0aCB0cmFpbGluZyBTUCAiID4+RiAmJgorCWVjaG8gIkNhcnJpYWdlIFJldHVyblEiIHwgdHIgUSAiXDAxNSIgPj5GICYmCisJZWNobyAiTm8gcHJvYmxlbSIgPj5GICYmCisJZWNobyA+PkYKKworJworCitibHVlX2dyZXA9Jzc7MzRtJyA7IyBFU0MgWyA3IDsgMyA0IG0KKworcHJpbnRmICJcMDMzWyVzIiAiJGJsdWVfZ3JlcCIgPmNoZWNrLWdyZXAKK2lmIChncmVwICIkYmx1ZV9ncmVwIiA8Y2hlY2stZ3JlcCB8IGdyZXAgIiRibHVlX2dyZXAiKSA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwlncmVwX2E9Z3JlcAorZWxpZiAoZ3JlcCAtYSAiJGJsdWVfZ3JlcCIgPGNoZWNrLWdyZXAgfCBncmVwIC1hICIkYmx1ZV9ncmVwIikgPi9kZXYvbnVsbCAyPiYxCit0aGVuCisJZ3JlcF9hPSdncmVwIC1hJworZWxzZQorCWdyZXBfYT1ncmVwIDsjIGV4cGVjdGVkIHRvIGZhaWwuLi4KK2ZpCitybSAtZiBjaGVjay1ncmVwCisKK3ByZXBhcmVfb3V0cHV0ICgpIHsKKwlnaXQgZGlmZiAtLWNvbG9yID5vdXRwdXQKKwkkZ3JlcF9hICIkYmx1ZV9ncmVwIiBvdXRwdXQgPmVycm9yCisJJGdyZXBfYSAtdiAiJGJsdWVfZ3JlcCIgb3V0cHV0ID5ub3JtYWwKKwlyZXR1cm4gMAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGRlZmF1bHQgJworCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCAoYXR0cmlidXRlKScgJworCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJGIHdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCwgdGFid2lkdGg9MTAgKGF0dHJpYnV0ZSknICcKKworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJ0YWJ3aWR0aD0xMCIgJiYKKwllY2hvICJGIHdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoZWNrIChhdHRyaWJ1dGUpJyAnCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCWVjaG8gIkYgLXdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoZWNrLCB0YWJ3aWR0aD0xMCAoYXR0cmlidXRlKSwgbXVzdCBiZSBpcnJlbGV2YW50JyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAidGFid2lkdGg9MTAiICYmCisJZWNobyAiRiAtd2hpdGVzcGFjZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aG91dCAtdHJhaWwnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgLXRyYWlsICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRob3V0IC10cmFpbCAoYXR0cmlidXRlKScgJworCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJGIHdoaXRlc3BhY2U9LXRyYWlsIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhvdXQgLXNwYWNlJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIC1zcGFjZSAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRob3V0IC1zcGFjZSAoYXR0cmlidXRlKScgJworCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJGIHdoaXRlc3BhY2U9LXNwYWNlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBpbmRlbnQtbm9uLXRhYiBvbmx5JyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIGluZGVudCwtdHJhaWxpbmcsLXNwYWNlICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGluZGVudC1ub24tdGFiIG9ubHkgKGF0dHJpYnV0ZSknICcKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJZWNobyAiRiB3aGl0ZXNwYWNlPWluZGVudCwtdHJhaWxpbmcsLXNwYWNlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaW5kZW50LW5vbi10YWIgb25seSwgdGFid2lkdGg9MTAnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgaW5kZW50LHRhYndpZHRoPTEwLC10cmFpbGluZywtc3BhY2UgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGluZGVudC1ub24tdGFiIG9ubHksIHRhYndpZHRoPTEwIChhdHRyaWJ1dGUpJyAnCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCWVjaG8gIkYgd2hpdGVzcGFjZT1pbmRlbnQsLXRyYWlsaW5nLC1zcGFjZSx0YWJ3aWR0aD0xMCIgPi5naXRhdHRyaWJ1dGVzICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjci1hdC1lb2wnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgY3ItYXQtZW9sICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY3ItYXQtZW9sIChhdHRyaWJ1dGUpJyAnCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCWVjaG8gIkYgd2hpdGVzcGFjZT10cmFpbGluZyxjci1hdC1lb2wiID4uZ2l0YXR0cmlidXRlcyAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGluZyBlbXB0eSBsaW5lcyAoMSknICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjayA+b3V0cHV0ICYmCisJZ3JlcCAibmV3IGJsYW5rIGxpbmUgYXQiIG91dHB1dCAmJgorCWdyZXAgInRyYWlsaW5nIHdoaXRlc3BhY2UiIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIGVtcHR5IGxpbmVzICgyKScgJworCisJZWNobyAiRiAtd2hpdGVzcGFjZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGRpZmYgLS1jaGVjayA+b3V0cHV0ICYmCisJISB0ZXN0IC1zIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBzaG93cyBjb3JyZWN0IGxpbmUgbnVtYmVyIGZvciB0cmFpbGluZyBibGFuayBsaW5lcycgJworCisJcHJpbnRmICJhXG5iXG4iID4gRyAmJgorCWdpdCBhZGQgRyAmJgorCXByaW50ZiAieFxueFxueFxuYVxuYlxuY1xuXG4iID4gRyAmJgorCVsgIiQoZ2l0IGRpZmYgLS1jaGVjayAtLSBHKSIgPSAiRzo3OiBuZXcgYmxhbmsgbGluZSBhdCBFT0YuIiBdCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGNvbG9yIHRyYWlsaW5nIGNyIGluIGNvbnRleHQnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZWNobyBBQUFRIHwgdHIgUSAiXDAxNSIgPkcgJiYKKwlnaXQgYWRkIEcgJiYKKwllY2hvIEJCQlEgfCB0ciBRICJcMDE1IiA+PkcgJiYKKwlnaXQgZGlmZiAtLWNvbG9yIEcgfCB0ciAiXDAxNSIgUSA+b3V0cHV0ICYmCisJZ3JlcCAiQkJCLioke2JsdWVfZ3JlcH1RIiBvdXRwdXQgJiYKKwlncmVwICJBQUEuKlxbbVEiIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbG9yIG5ldyB0cmFpbGluZyBibGFuayBsaW5lcycgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG87IGVjaG87IH0gPnggJiYKKwlnaXQgYWRkIHggJiYKKwl7IGVjaG8gYTsgZWNobzsgZWNobzsgZWNobzsgZWNobyBjOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyB9ID54ICYmCisJZ2l0IGRpZmYgLS1jb2xvciB4ID5vdXRwdXQgJiYKKwljbnQ9JCgkZ3JlcF9hICIke2JsdWVfZ3JlcH0iIG91dHB1dCB8IHdjIC1sKSAmJgorCXRlc3QgJGNudCA9IDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2ggYi90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmU3ZDczZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjAtZGlmZi1leHRlcm5hbC5zaApAQCAtMCwwICsxLDIyOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2V4dGVybmFsIGRpZmYgaW50ZXJmYWNlIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCXRlc3RfdGljayAmJgorCWVjaG8gaW5pdGlhbCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBzZWNvbmQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyB0aGlyZCA+ZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBlbnZpcm9ubWVudCcgJworCisJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZiB8IHsKKwkJcmVhZCBwYXRoIG9sZGZpbGUgb2xkaGV4IG9sZG1vZGUgbmV3ZmlsZSBuZXdoZXggbmV3bW9kZSAmJgorCQl0ZXN0ICJ6JHBhdGgiID0gemZpbGUgJiYKKwkJdGVzdCAieiRvbGRtb2RlIiA9IHoxMDA2NDQgJiYKKwkJdGVzdCAieiRuZXdoZXgiID0gInokX3o0MCIgJiYKKwkJdGVzdCAieiRuZXdtb2RlIiA9IHoxMDA2NDQgJiYKKwkJb2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6ZmlsZSkgJiYKKwkJdGVzdCAieiRvaCIgPSAieiRvbGRoZXgiCisJfQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9FWFRFUk5BTF9ESUZGIGVudmlyb25tZW50IHNob3VsZCBhcHBseSBvbmx5IHRvIGRpZmYnICcKKworCUdJVF9FWFRFUk5BTF9ESUZGPWVjaG8gZ2l0IGxvZyAtcCAtMSBIRUFEIHwKKwlncmVwICJeZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9FWFRFUk5BTF9ESUZGIGVudmlyb25tZW50IGFuZCAtLW5vLWV4dC1kaWZmJyAnCisKKwlHSVRfRVhURVJOQUxfRElGRj1lY2hvIGdpdCBkaWZmIC0tbm8tZXh0LWRpZmYgfAorCWdyZXAgIl5kaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndHlwZWNoYW5nZSBkaWZmJyAnCisJcm0gLWYgZmlsZSAmJgorCWxuIC1zIGVsaWYgZmlsZSAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPWVjaG8gZ2l0IGRpZmYgIHwgeworCQlyZWFkIHBhdGggb2xkZmlsZSBvbGRoZXggb2xkbW9kZSBuZXdmaWxlIG5ld2hleCBuZXdtb2RlICYmCisJCXRlc3QgInokcGF0aCIgPSB6ZmlsZSAmJgorCQl0ZXN0ICJ6JG9sZG1vZGUiID0gejEwMDY0NCAmJgorCQl0ZXN0ICJ6JG5ld2hleCIgPSAieiRfejQwIiAmJgorCQl0ZXN0ICJ6JG5ld21vZGUiID0gejEyMDAwMCAmJgorCQlvaD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpmaWxlKSAmJgorCQl0ZXN0ICJ6JG9oIiA9ICJ6JG9sZGhleCIKKwl9ICYmCisJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZiAtLW5vLWV4dC1kaWZmID5hY3R1YWwgJiYKKwlnaXQgZGlmZiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmV4dGVybmFsJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gdGhpcmQgPmZpbGUgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmV4dGVybmFsIGVjaG8gJiYKKwlnaXQgZGlmZiB8IHsKKwkJcmVhZCBwYXRoIG9sZGZpbGUgb2xkaGV4IG9sZG1vZGUgbmV3ZmlsZSBuZXdoZXggbmV3bW9kZSAmJgorCQl0ZXN0ICJ6JHBhdGgiID0gemZpbGUgJiYKKwkJdGVzdCAieiRvbGRtb2RlIiA9IHoxMDA2NDQgJiYKKwkJdGVzdCAieiRuZXdoZXgiID0gInokX3o0MCIgJiYKKwkJdGVzdCAieiRuZXdtb2RlIiA9IHoxMDA2NDQgJiYKKwkJb2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6ZmlsZSkgJiYKKwkJdGVzdCAieiRvaCIgPSAieiRvbGRoZXgiCisJfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmV4dGVybmFsIHNob3VsZCBhcHBseSBvbmx5IHRvIGRpZmYnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLmV4dGVybmFsIGVjaG8gJiYKKwlnaXQgbG9nIC1wIC0xIEhFQUQgfAorCWdyZXAgIl5kaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZXh0ZXJuYWwgYW5kIC0tbm8tZXh0LWRpZmYnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLmV4dGVybmFsIGVjaG8gJiYKKwlnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIHwKKwlncmVwICJeZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGF0dHJpYnV0ZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHRoaXJkID5maWxlICYmCisKKwlnaXQgY29uZmlnIGRpZmYucGFycm90LmNvbW1hbmQgZWNobyAmJgorCisJZWNobyA+LmdpdGF0dHJpYnV0ZXMgImZpbGUgZGlmZj1wYXJyb3QiICYmCisKKwlnaXQgZGlmZiB8IHsKKwkJcmVhZCBwYXRoIG9sZGZpbGUgb2xkaGV4IG9sZG1vZGUgbmV3ZmlsZSBuZXdoZXggbmV3bW9kZSAmJgorCQl0ZXN0ICJ6JHBhdGgiID0gemZpbGUgJiYKKwkJdGVzdCAieiRvbGRtb2RlIiA9IHoxMDA2NDQgJiYKKwkJdGVzdCAieiRuZXdoZXgiID0gInokX3o0MCIgJiYKKwkJdGVzdCAieiRuZXdtb2RlIiA9IHoxMDA2NDQgJiYKKwkJb2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6ZmlsZSkgJiYKKwkJdGVzdCAieiRvaCIgPSAieiRvbGRoZXgiCisJfQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgYXR0cmlidXRlIHNob3VsZCBhcHBseSBvbmx5IHRvIGRpZmYnICcKKworCWdpdCBsb2cgLXAgLTEgSEVBRCB8CisJZ3JlcCAiXmRpZmYgLS1naXQgYS9maWxlIGIvZmlsZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGF0dHJpYnV0ZSBhbmQgLS1uby1leHQtZGlmZicgJworCisJZ2l0IGRpZmYgLS1uby1leHQtZGlmZiB8CisJZ3JlcCAiXmRpZmYgLS1naXQgYS9maWxlIGIvZmlsZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGF0dHJpYnV0ZScgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYucGFycm90LmNvbW1hbmQgJiYKKwlnaXQgY29uZmlnIGRpZmYuY29sb3IuY29tbWFuZCBlY2hvICYmCisKKwllY2hvID4uZ2l0YXR0cmlidXRlcyAiZmlsZSBkaWZmPWNvbG9yIiAmJgorCisJZ2l0IGRpZmYgfCB7CisJCXJlYWQgcGF0aCBvbGRmaWxlIG9sZGhleCBvbGRtb2RlIG5ld2ZpbGUgbmV3aGV4IG5ld21vZGUgJiYKKwkJdGVzdCAieiRwYXRoIiA9IHpmaWxlICYmCisJCXRlc3QgInokb2xkbW9kZSIgPSB6MTAwNjQ0ICYmCisJCXRlc3QgInokbmV3aGV4IiA9ICJ6JF96NDAiICYmCisJCXRlc3QgInokbmV3bW9kZSIgPSB6MTAwNjQ0ICYmCisJCW9oPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOmZpbGUpICYmCisJCXRlc3QgInokb2giID0gInokb2xkaGV4IgorCX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGF0dHJpYnV0ZSBzaG91bGQgYXBwbHkgb25seSB0byBkaWZmJyAnCisKKwlnaXQgbG9nIC1wIC0xIEhFQUQgfAorCWdyZXAgIl5kaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBhdHRyaWJ1dGUgYW5kIC0tbm8tZXh0LWRpZmYnICcKKworCWdpdCBkaWZmIC0tbm8tZXh0LWRpZmYgfAorCWdyZXAgIl5kaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0VYVEVSTkFMX0RJRkYgdHJ1bXBzIGRpZmYuZXh0ZXJuYWwnICcKKwk+LmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmV4dGVybmFsICJlY2hvIGV4dC1nbG9iYWwiICYmCisJR0lUX0VYVEVSTkFMX0RJRkY9ImVjaG8gZXh0LWVudiIgZ2l0IGRpZmYgfCBncmVwIGV4dC1lbnYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0cmlidXRlcyB0cnVtcCBHSVRfRVhURVJOQUxfRElGRiBhbmQgZGlmZi5leHRlcm5hbCcgJworCXRlc3RfY29uZmlnIGRpZmYuZm9vLmNvbW1hbmQgImVjaG8gZXh0LWF0dHJpYnV0ZSIgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmV4dGVybmFsICJlY2hvIGV4dC1nbG9iYWwiICYmCisJZWNobyAiZmlsZSBkaWZmPWZvbyIgPi5naXRhdHRyaWJ1dGVzICYmCisJR0lUX0VYVEVSTkFMX0RJRkY9ImVjaG8gZXh0LWVudiIgZ2l0IGRpZmYgfCBncmVwIGV4dC1hdHRyaWJ1dGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZGlmZiB3aXRoIC1kaWZmJyAnCisJZWNobyA+LmdpdGF0dHJpYnV0ZXMgImZpbGUgLWRpZmYiICYmCisJZ2l0IGRpZmYgfCBncmVwIEJpbmFyeQorJworCitlY2hvIE5VTFpiZXR3ZWVuWndvcmRzIHwgIiRQRVJMX1BBVEgiIC1wZSAneS9aL1wwMDAvJyA+IGZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2UgZGlmZiB3aXRoICJkaWZmIicgJworCWVjaG8gPi5naXRhdHRyaWJ1dGVzICJmaWxlIGRpZmYiICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q0MDIwL2RpZmYuTlVMIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiB3aXRoIG1vcmUgdGhhbiBvbmUgY2hhbmdlZCBmaWxlcycgJworCWVjaG8gYW5vdGhlcmZpbGUgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCAybmQgZmlsZSIgJiYKKwllY2hvIG1vZGlmaWVkID5maWxlMiAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPWVjaG8gZ2l0IGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0VYVEVSTkFMX0RJRkYgZ2VuZXJhdGVzIHByZXR0eSBwYXRocycgJworCXRvdWNoIGZpbGUuZXh0ICYmCisJZ2l0IGFkZCBmaWxlLmV4dCAmJgorCWVjaG8gd2l0aCBleHRlbnNpb24gPiBmaWxlLmV4dCAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPWVjaG8gZ2l0IGRpZmYgZmlsZS5leHQgfCBncmVwIC4uLi4uLl9maWxlXC5leHQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIGZpbGUuZXh0ICYmCisJcm0gZmlsZS5leHQKKycKKworZWNobyAiIyEkU0hFTExfUEFUSCIgPmZha2UtZGlmZi5zaAorY2F0ID4+IGZha2UtZGlmZi5zaCA8PFxFT0YKK2NhdCAkMiA+PiBjcmxmZWQudHh0CitFT0YKK2NobW9kIGEreCBmYWtlLWRpZmYuc2gKKwora2VlcF9vbmx5X2NyICgpIHsKKwl0ciAtZGMgJ1wwMTUnCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dGVybmFsIGRpZmYgd2l0aCBhdXRvY3JsZiA9IHRydWUnICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPS4vZmFrZS1kaWZmLnNoIGdpdCBkaWZmICYmCisJdGVzdCAkKHdjIC1sIDwgY3JsZmVkLnR4dCkgPSAkKGNhdCBjcmxmZWQudHh0IHwga2VlcF9vbmx5X2NyIHwgd2MgLWMpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1jYWNoZWQnICcKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCBmaWxlICYmCisJZWNobyBzZWNvbmQgPmZpbGUgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDQwMjAvZGlmZi5OVUwgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAyMC9kaWZmLk5VTCBiL3QvdDQwMjAvZGlmZi5OVUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyZjg5MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjAvZGlmZi5OVUwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90NDAyMS1mb3JtYXQtcGF0Y2gtbnVtYmVyZWQuc2ggYi90L3Q0MDIxLWZvcm1hdC1wYXRjaC1udW1iZXJlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ODY0OTRiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAyMS1mb3JtYXQtcGF0Y2gtbnVtYmVyZWQuc2gKQEAgLTAsMCArMSwxMjQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgQnJpYW4gQyBHZXJuaGFyZHQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nRm9ybWF0LXBhdGNoIG51bWJlcmluZyBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwllY2hvIEEgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBGaXJzdCAmJgorCisJZWNobyBCID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFNlY29uZCAmJgorCisJZWNobyBDID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFRoaXJkCisKKycKKworIyBFYWNoIG9mIHRoZXNlIGdldHMgdXNlZCBtdWx0aXBsZSB0aW1lcy4KKwordGVzdF9udW1fbm9fbnVtYmVyZWQoKSB7CisJY250PSQoZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0hcXSIgJDEgfCB3YyAtbCkgJiYKKwl0ZXN0ICRjbnQgPSAkMgorfQorCit0ZXN0X3NpbmdsZV9ub19udW1iZXJlZCgpIHsKKwl0ZXN0X251bV9ub19udW1iZXJlZCAkMSAxCit9CisKK3Rlc3Rfbm9fbnVtYmVyZWQoKSB7CisJdGVzdF9udW1fbm9fbnVtYmVyZWQgJDEgMgorfQorCit0ZXN0X3NpbmdsZV9udW1iZXJlZCgpIHsKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAxLzFcXSIgJDEKK30KKwordGVzdF9udW1iZXJlZCgpIHsKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAxLzJcXSIgJDEgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAyLzJcXSIgJDEKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlIHBhdGNoIGRlZmF1bHRzIHRvIG5vIG51bWJlcnMnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IEhFQUR+MSA+cGF0Y2gwLnNpbmdsZSAmJgorCXRlc3Rfc2luZ2xlX25vX251bWJlcmVkIHBhdGNoMC5zaW5nbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgcGF0Y2ggZGVmYXVsdHMgdG8gbnVtYmVyZWQnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRH4yID5wYXRjaDAubXVsdGlwbGUgJiYKKwl0ZXN0X251bWJlcmVkIHBhdGNoMC5tdWx0aXBsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1VzZSAtLW51bWJlcmVkJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbnVtYmVyZWQgLS1zdGRvdXQgSEVBRH4xID5wYXRjaDEgJiYKKwl0ZXN0X3NpbmdsZV9udW1iZXJlZCBwYXRjaDEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQubnVtYmVyZWQgPSB0cnVlJyAnCisKKwlnaXQgY29uZmlnIGZvcm1hdC5udW1iZXJlZCB0cnVlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEfjIgPnBhdGNoMiAmJgorCXRlc3RfbnVtYmVyZWQgcGF0Y2gyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0Lm51bWJlcmVkICYmIHNpbmdsZSBwYXRjaCcgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEXiA+IHBhdGNoMyAmJgorCXRlc3Rfc2luZ2xlX251bWJlcmVkIHBhdGNoMworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5udW1iZXJlZCAmJiAtLW5vLW51bWJlcmVkJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tbnVtYmVyZWQgLS1zdGRvdXQgSEVBRH4yID5wYXRjaDQgJiYKKwl0ZXN0X25vX251bWJlcmVkIHBhdGNoNAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5udW1iZXJlZCAmJiAtLWtlZXAtc3ViamVjdCcgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWtlZXAtc3ViamVjdCAtLXN0ZG91dCBIRUFEXiA+cGF0Y2g0YSAmJgorCWdyZXAgIl5TdWJqZWN0OiBUaGlyZCIgcGF0Y2g0YQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5udW1iZXJlZCA9IGF1dG8nICcKKworCWdpdCBjb25maWcgZm9ybWF0Lm51bWJlcmVkIGF1dG8gJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IEhFQUR+MiA+IHBhdGNoNSAmJgorCXRlc3RfbnVtYmVyZWQgcGF0Y2g1CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0Lm51bWJlcmVkID0gYXV0byAmJiBzaW5nbGUgcGF0Y2gnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPiBwYXRjaDYgJiYKKwl0ZXN0X3NpbmdsZV9ub19udW1iZXJlZCBwYXRjaDYKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQubnVtYmVyZWQgPSBhdXRvICYmIC0tbm8tbnVtYmVyZWQnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1udW1iZXJlZCAtLXN0ZG91dCBIRUFEfjIgPiBwYXRjaDcgJiYKKwl0ZXN0X25vX251bWJlcmVkIHBhdGNoNworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RhcnQtbnVtYmVyICYmIC0tbnVtYmVyZWQnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGFydC1udW1iZXIgMyAtLW51bWJlcmVkIC0tc3Rkb3V0IEhFQUR+MSA+IHBhdGNoOCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDMvM1xdIiBwYXRjaDgKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDIyLWRpZmYtcmV3cml0ZS5zaCBiL3QvdDQwMjItZGlmZi1yZXdyaXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkMDMwYTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDIyLWRpZmYtcmV3cml0ZS5zaApAQCAtMCwwICsxLDEwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jld3JpdGUgZGlmZicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPnRlc3QgJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwl0ciBcCisJICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIgXAorCSAgIm5vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtTk9QUVJTVFVWV1hZWkFCQ0RFRkdISUpLTE0iIFwKKwkgIDwiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID50ZXN0ICYmCisJZWNobyAidG8gYmUgZGVsZXRlZCIgPnRlc3QyICYmCisJZ2l0IGFkZCB0ZXN0MgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCByZXdyaXRlJyAnCisKKwlhY3R1YWw9JChnaXQgZGlmZi1maWxlcyAtQiAtLXN1bW1hcnkgdGVzdCkgJiYKKwlleHByICIkYWN0dWFsIiA6ICIgcmV3cml0ZSB0ZXN0IChbMC05XSolKSQiIHx8IHsKKwkJZWNobyAiRWg/IDw8JGFjdHVhbD4+IgorCQlmYWxzZQorCX0KKworJworCitjYXQgPmV4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL3Rlc3QyIGIvdGVzdDIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggNDIwMjAxMS4uMDAwMDAwMAorLS0tIGEvdGVzdDIKKysrKyAvZGV2L251bGwKK0BAIC0xICswLDAgQEAKKy10byBiZSBkZWxldGVkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgZGVsZXRpb24gZGlmZiB3aXRob3V0IC1EJyAnCisKKwlybSB0ZXN0MiAmJgorCWdpdCBkaWZmIC0tIHRlc3QyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvdGVzdDIgYi90ZXN0MgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA0MjAyMDExLi4wMDAwMDAwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1cHByZXNzIGRlbGV0aW9uIGRpZmYgd2l0aCAtRCcgJworCisJZ2l0IGRpZmYgLUQgLS0gdGVzdDIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBkZWxldGlvbiBkaWZmIHdpdGggLUInICcKKworCWdpdCBkaWZmIC1CIC0tIHRlc3QgPmFjdHVhbCAmJgorCWdyZXAgIkxpbnVzIFRvcnZhbGRzIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VwcHJlc3MgZGVsZXRpb24gZGlmZiB3aXRoIC1CIC1EJyAnCisKKwlnaXQgZGlmZiAtQiAtRCAtLSB0ZXN0ID5hY3R1YWwgJiYKKwlncmVwIC12ICJMaW51cyBUb3J2YWxkcyIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgYSBmaWxlIHRoYXQgZW5kcyB3aXRoIGFuIGluY29tcGxldGUgbGluZScgJworCXRlc3Rfc2VxIDEgOTkgPnNlcSAmJgorCXByaW50ZiAxMDAgPj5zZXEgJiYKKwlnaXQgYWRkIHNlcSAmJgorCWdpdCBjb21taXQgc2VxIC1tIHNlcQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIHRoZSBtaWRkbGUgOTAlIG9mIHNlcXVlbmNlIGZpbGUgYW5kIHRlcm1pbmF0ZSB3aXRoIG5ld2xpbmUnICcKKwl0ZXN0X3NlcSAxIDUgPnNlcSAmJgorCXRlc3Rfc2VxIDkzMzEgOTQyMCA+PnNlcSAmJgorCXRlc3Rfc2VxIDk2IDEwMCA+PnNlcQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maXJtIHRoYXQgc2VxdWVuY2UgZmlsZSBpcyBjb25zaWRlcmVkIGEgcmV3cml0ZScgJworCWdpdCBkaWZmIC1CIHNlcSA+cmVzICYmCisJZ3JlcCAiZGlzc2ltaWxhcml0eSBpbmRleCIgcmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIG5ld2xpbmUgYXQgZW9mIGlzIG9uIGl0cyBvd24gbGluZSB3aXRob3V0IC1CJyAnCisJZ2l0IGRpZmYgc2VxID5yZXMgJiYKKwlncmVwICJeXFxcXCAiIHJlcyAmJgorCSEgZ3JlcCAiXi4uKlxcXFwgIiByZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gbmV3bGluZSBhdCBlb2YgaXMgb24gaXRzIG93biBsaW5lIHdpdGggLUInICcKKwlnaXQgZGlmZiAtQiBzZXEgPnJlcyAmJgorCWdyZXAgIl5cXFxcICIgcmVzICYmCisJISBncmVwICJeLi4qXFxcXCAiIHJlcworJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90NDAyMy1kaWZmLXJlbmFtZS10eXBlY2hhbmdlLnNoIGIvdC90NDAyMy1kaWZmLXJlbmFtZS10eXBlY2hhbmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkMjBhY2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDIzLWRpZmYtcmVuYW1lLXR5cGVjaGFuZ2Uuc2gKQEAgLTAsMCArMSw4NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3R5cGVjaGFuZ2UgcmVuYW1lIGRldGVjdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1Mgc2V0dXAgJworCisJcm0gLWYgZm9vIGJhciAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID5mb28gJiYKKwlsbiAtcyBsaW5rbGluayBiYXIgJiYKKwlnaXQgYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1hIC1tIEluaXRpYWwgJiYKKwlnaXQgdGFnIG9uZSAmJgorCisJcm0gLWYgZm9vIGJhciAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID5iYXIgJiYKKwlsbiAtcyBsaW5rbGluayBmb28gJiYKKwlnaXQgYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFNlY29uZCAmJgorCWdpdCB0YWcgdHdvICYmCisKKwlybSAtZiBmb28gYmFyICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBUaGlyZCAmJgorCWdpdCB0YWcgdGhyZWUgJiYKKworCW12IGZvbyBiYXIgJiYKKwlsbiAtcyBsaW5rbGluayBmb28gJiYKKwlnaXQgYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1hIC1tIEZvdXJ0aCAmJgorCWdpdCB0YWcgZm91ciAmJgorCisJIyBUaGlzIGlzIHB1cmVseSBmb3Igc2FuaXR5IGNoZWNrCisKKwlybSAtZiBmb28gYmFyICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPmZvbyAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9NYWtlZmlsZSA+YmFyICYmCisJZ2l0IGFkZCBmb28gYmFyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBGaWZ0aCAmJgorCWdpdCB0YWcgZml2ZSAmJgorCisJcm0gLWYgZm9vIGJhciAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9NYWtlZmlsZSA+Zm9vICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPmJhciAmJgorCWdpdCBhZGQgZm9vIGJhciAmJgorCWdpdCBjb21taXQgLWEgLW0gU2l4dGggJiYKKwlnaXQgdGFnIHNpeAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2Nyb3NzIHJlbmFtZXMgdG8gYmUgZGV0ZWN0ZWQgZm9yIHJlZ3VsYXIgZmlsZXMnICcKKworCWdpdCBkaWZmLXRyZWUgZml2ZSBzaXggLXIgLS1uYW1lLXN0YXR1cyAtQiAtTSB8IHNvcnQgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiUjEwMAlmb28JYmFyIgorCQllY2hvICJSMTAwCWJhcglmb28iCisJfSB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjcm9zcyByZW5hbWVzIHRvIGJlIGRldGVjdGVkIGZvciB0eXBlY2hhbmdlJyAnCisKKwlnaXQgZGlmZi10cmVlIG9uZSB0d28gLXIgLS1uYW1lLXN0YXR1cyAtQiAtTSB8IHNvcnQgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiUjEwMAlmb28JYmFyIgorCQllY2hvICJSMTAwCWJhcglmb28iCisJfSB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdtb3ZlcyBhbmQgcmVuYW1lcycgJworCisJZ2l0IGRpZmYtdHJlZSB0aHJlZSBmb3VyIC1yIC0tbmFtZS1zdGF0dXMgLUIgLU0gfCBzb3J0ID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIlIxMDAJZm9vCWJhciIKKwkJZWNobyAiVDEwMAlmb28iCisJfSB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMjQtZGlmZi1vcHRpbWl6ZS1jb21tb24uc2ggYi90L3Q0MDI0LWRpZmYtb3B0aW1pemUtY29tbW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0ZDczM2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDI0LWRpZmYtb3B0aW1pemUtY29tbW9uLnNoCkBAIC0wLDAgKzEsMTU3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tbW9uIHRhaWwgb3B0aW1pemF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworej16enp6enp6eiA7IyA4Cit6PSIkeiR6JHokeiR6JHokeiR6IiA7IyA2NAorej0iJHokeiR6JHokeiR6JHokeiIgOyMgNTEyCit6PSIkeiR6JHokeiIgOyMgMjA0OAorejIwNDc9JChleHByICIkeiIgOiAnLlwoLipcKScpIDsgIzIwNDcKKworeD16enp6enp6enp6CQkJOyMgMTAKK3k9IiR4JHgkeCR4JHgkeCR4JHgkeCR4Igk7IyAxMDAKK3o9IiR5JHkkeSR5JHkkeSR5JHkkeSR5Igk7IyAxMDAwCit6MTAwMD0kegorejEwMD0keQorejEwPSR4CisKK3pzKCkgeworCWNvdW50PSIkMSIKKwl3aGlsZSB0ZXN0ICIkY291bnQiIC1nZSAxMDAwCisJZG8KKwkJY291bnQ9JCgoJGNvdW50IC0gMTAwMCkpCisJCXByaW50ZiAiJXMiICR6MTAwMAorCWRvbmUKKwl3aGlsZSB0ZXN0ICIkY291bnQiIC1nZSAxMDAKKwlkbworCQljb3VudD0kKCgkY291bnQgLSAxMDApKQorCQlwcmludGYgIiVzIiAkejEwMAorCWRvbmUKKwl3aGlsZSB0ZXN0ICIkY291bnQiIC1nZSAxMAorCWRvCisJCWNvdW50PSQoKCRjb3VudCAtIDEwKSkKKwkJcHJpbnRmICIlcyIgJHoxMAorCWRvbmUKKwl3aGlsZSB0ZXN0ICIkY291bnQiIC1nZSAxCisJZG8KKwkJY291bnQ9JCgoJGNvdW50IC0gMSkpCisJCXByaW50ZiAieiIKKwlkb25lCit9CisKK3pjICgpIHsKKwlzZWQgLWUgIi9eaW5kZXgvZCIgXAorCQktZSAicy8kejEwMDAvUS9nIiBcCisJCS1lICJzL1FRUVFRUVFRUS9aOTAwMC9nIiBcCisJCS1lICJzL1FRUVFRUVFRL1o4MDAwL2ciIFwKKwkJLWUgInMvUVFRUVFRUS9aNzAwMC9nIiBcCisJCS1lICJzL1FRUVFRUS9aNjAwMC9nIiBcCisJCS1lICJzL1FRUVFRL1o1MDAwL2ciIFwKKwkJLWUgInMvUVFRUS9aNDAwMC9nIiBcCisJCS1lICJzL1FRUS9aMzAwMC9nIiBcCisJCS1lICJzL1FRL1oyMDAwL2ciIFwKKwkJLWUgInMvUS9aMTAwMC9nIiBcCisJCS1lICJzLyR6MTAwL1EvZyIgXAorCQktZSAicy9RUVFRUVFRUVEvWjkwMC9nIiBcCisJCS1lICJzL1FRUVFRUVFRL1o4MDAvZyIgXAorCQktZSAicy9RUVFRUVFRL1o3MDAvZyIgXAorCQktZSAicy9RUVFRUVEvWjYwMC9nIiBcCisJCS1lICJzL1FRUVFRL1o1MDAvZyIgXAorCQktZSAicy9RUVFRL1o0MDAvZyIgXAorCQktZSAicy9RUVEvWjMwMC9nIiBcCisJCS1lICJzL1FRL1oyMDAvZyIgXAorCQktZSAicy9RL1oxMDAvZyIgXAorCQktZSAicy8wMDBaLy9nIiBcCisJCS1lICJzLyR6MTAvUS9nIiBcCisJCS1lICJzL1FRUVFRUVFRUS9aOTAvZyIgXAorCQktZSAicy9RUVFRUVFRUS9aODAvZyIgXAorCQktZSAicy9RUVFRUVFRL1o3MC9nIiBcCisJCS1lICJzL1FRUVFRUS9aNjAvZyIgXAorCQktZSAicy9RUVFRUS9aNTAvZyIgXAorCQktZSAicy9RUVFRL1o0MC9nIiBcCisJCS1lICJzL1FRUS9aMzAvZyIgXAorCQktZSAicy9RUS9aMjAvZyIgXAorCQktZSAicy9RL1oxMC9nIiBcCisJCS1lICJzLzAwWi8vZyIgXAorCQktZSAicy96L1EvZyIgXAorCQktZSAicy9RUVFRUVFRUVEvWjkvZyIgXAorCQktZSAicy9RUVFRUVFRUS9aOC9nIiBcCisJCS1lICJzL1FRUVFRUVEvWjcvZyIgXAorCQktZSAicy9RUVFRUVEvWjYvZyIgXAorCQktZSAicy9RUVFRUS9aNS9nIiBcCisJCS1lICJzL1FRUVEvWjQvZyIgXAorCQktZSAicy9RUVEvWjMvZyIgXAorCQktZSAicy9RUS9aMi9nIiBcCisJCS1lICJzL1EvWjEvZyIgXAorCQktZSAicy8wWi8vZyIgXAorCTsKK30KKworZXhwZWN0X3BhdHRlcm4gKCkgeworCWNudD0iJDEiCisJY2F0IDw8RU9GCitkaWZmIC0tZ2l0IGEvZmlsZS1hJGNudCBiL2ZpbGUtYSRjbnQKKy0tLSBhL2ZpbGUtYSRjbnQKKysrKyBiL2ZpbGUtYSRjbnQKK0BAIC0xICsxIEBACistWiR7Y250fWEKKytaJHtjbnR9QQorZGlmZiAtLWdpdCBhL2ZpbGUtYiRjbnQgYi9maWxlLWIkY250CistLS0gYS9maWxlLWIkY250CisrKysgYi9maWxlLWIkY250CitAQCAtMSArMSBAQAorLWIKKytCCitkaWZmIC0tZ2l0IGEvZmlsZS1jJGNudCBiL2ZpbGUtYyRjbnQKKy0tLSBhL2ZpbGUtYyRjbnQKKysrKyBiL2ZpbGUtYyRjbnQKK0BAIC0xICsxIEBACistY1okY250CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKytDWiRjbnQKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL2ZpbGUtZCRjbnQgYi9maWxlLWQkY250CistLS0gYS9maWxlLWQkY250CisrKysgYi9maWxlLWQkY250CitAQCAtMSArMSBAQAorLWQKKytECitFT0YKK30KKworc2FtcGxlPScxMDIzIDEwMjQgMTAyNSAyMDQ3IDQwOTUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIG4gaW4gJHNhbXBsZQorCWRvCisJCSggenMgJG4gOyBlY2hvIGEgKSA+ZmlsZS1hJG4gJiYKKwkJKCBlY2hvIGI7IHpzICRuOyBlY2hvICkgPmZpbGUtYiRuICYmCisJCSggcHJpbnRmIGM7IHpzICRuICkgPmZpbGUtYyRuICYmCisJCSggZWNobyBkOyB6cyAkbiApID5maWxlLWQkbiAmJgorCisJCWdpdCBhZGQgZmlsZS1hJG4gZmlsZS1iJG4gZmlsZS1jJG4gZmlsZS1kJG4gJiYKKworCQkoIHpzICRuIDsgZWNobyBBICkgPmZpbGUtYSRuICYmCisJCSggZWNobyBCOyB6cyAkbjsgZWNobyApID5maWxlLWIkbiAmJgorCQkoIHByaW50ZiBDOyB6cyAkbiApID5maWxlLWMkbiAmJgorCQkoIGVjaG8gRDsgenMgJG4gKSA+ZmlsZS1kJG4gJiYKKworCQlleHBlY3RfcGF0dGVybiAkbiB8fCBicmVhaworCisJZG9uZSA+ZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLVUwJyAnCisKKwlmb3IgbiBpbiAkc2FtcGxlCisJZG8KKwkJZ2l0IGRpZmYgLVUwIGZpbGUtPyRuCisJZG9uZSB8IHpjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDI1LWh1bmstaGVhZGVyLnNoIGIvdC90NDAyNS1odW5rLWhlYWRlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YTNkYmMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAyNS1odW5rLWhlYWRlci5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZiBodW5rIGhlYWRlciB0cnVuY2F0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworTj0n5pel5pys6KqeJworTjE9J+aXpScKK04yPSfml6XmnKwnCitOUz0iJE4kTiROJE4kTiROJE4kTiROJE4kTiROJE4iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJKAorCQllY2hvICJBICROUyIKKwkJZm9yIGMgaW4gQiBDIEQgRSBGIEcgSCBJIEogSworCQlkbworCQkJZWNobyAiICAkYyIKKwkJZG9uZQorCQllY2hvICJMICAkTlMiCisJCWZvciBjIGluIE0gTiBPIFAgUSBSIFMgVCBVIFYKKwkJZG8KKwkJCWVjaG8gIiAgJGMiCisJCWRvbmUKKwkpID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwlzZWQgLWUgIi9eICBbRVBdL3MvJC8gbW9kaWZpZWQvIiA8ZmlsZSA+ZmlsZSsgJiYKKwltdiBmaWxlKyBmaWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHVuayBoZWFkZXIgdHJ1bmNhdGlvbiB3aXRoIGFuIG92ZXJseSBsb25nIGxpbmUnICcKKworCWdpdCBkaWZmIHwgc2VkIC1uIC1lICJzL14uKkBALy9wIiA+YWN0dWFsICYmCisJKAorCQllY2hvICIgQSAkTiROJE4kTiROJE4kTiROJE4yIgorCQllY2hvICIgTCAgJE4kTiROJE4kTiROJE4kTiROMSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAyNi1jb2xvci5zaCBiL3QvdDQwMjYtY29sb3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzcyNmEwZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjYtY29sb3Iuc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBUaW1vIEhpcnZvbmVuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZGlmZi9zdGF0dXMgY29sb3IgZXNjYXBlIGNvZGVzJworLiAuL3Rlc3QtbGliLnNoCisKK2NvbG9yKCkKK3sKKwlhY3R1YWw9JChnaXQgY29uZmlnIC0tZ2V0LWNvbG9yIG5vLnN1Y2guc2xvdCAiJDEiKSAmJgorCXRlc3QgIiRhY3R1YWwiID0gIhskMiIKK30KKworaW52YWxpZF9jb2xvcigpCit7CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBuby5zdWNoLnNsb3QgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCcgJworCWNvbG9yICJyZXNldCIgIlttIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRyaWJ1dGUgYmVmb3JlIGNvbG9yIG5hbWUnICcKKwljb2xvciAiYm9sZCByZWQiICJbMTszMW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbG9yIG5hbWUgYmVmb3JlIGF0dHJpYnV0ZScgJworCWNvbG9yICJyZWQgYm9sZCIgIlsxOzMxbSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0ciBmZyBiZycgJworCWNvbG9yICJ1bCBibHVlIHJlZCIgIls0OzM0OzQxbSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmcgYXR0ciBiZycgJworCWNvbG9yICJibHVlIHVsIHJlZCIgIls0OzM0OzQxbSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmcgYmcgYXR0cicgJworCWNvbG9yICJibHVlIHJlZCB1bCIgIls0OzM0OzQxbSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmcgYmcgYXR0ci4uLicgJworCWNvbG9yICJibHVlIGJvbGQgZGltIHVsIGJsaW5rIHJldmVyc2UiICJbMTsyOzQ7NTs3OzM0bSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9uZyBjb2xvciBzcGVjaWZpY2F0aW9uJyAnCisJY29sb3IgIjI1NCAyNTUgYm9sZCBkaW0gdWwgYmxpbmsgcmV2ZXJzZSIgIlsxOzI7NDs1Ozc7Mzg7NTsyNTQ7NDg7NTsyNTVtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyNTYgY29sb3JzJyAnCisJY29sb3IgIjI1NCBib2xkIDI1NSIgIlsxOzM4OzU7MjU0OzQ4OzU7MjU1bSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3IgdG9vIHNtYWxsJyAnCisJaW52YWxpZF9jb2xvciAiLTIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbG9yIHRvbyBiaWcnICcKKwlpbnZhbGlkX2NvbG9yICIyNTYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dHJhIGNoYXJhY3RlciBhZnRlciBjb2xvciBudW1iZXInICcKKwlpbnZhbGlkX2NvbG9yICIzWCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0cmEgY2hhcmFjdGVyIGFmdGVyIGNvbG9yIG5hbWUnICcKKwlpbnZhbGlkX2NvbG9yICJyZWRYIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBjaGFyYWN0ZXIgYWZ0ZXIgYXR0cmlidXRlJyAnCisJaW52YWxpZF9jb2xvciAiZGltWCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5rbm93biBjb2xvciBzbG90cyBhcmUgaWdub3JlZCAoZGlmZiknICcKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYubm9zdWNoc2xvdHdpbGxldmVyYmVkZWZpbmVkIHdoaXRlICYmCisJZ2l0IGRpZmYgLS1jb2xvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmtub3duIGNvbG9yIHNsb3RzIGFyZSBpZ25vcmVkIChicmFuY2gpJyAnCisJZ2l0IGNvbmZpZyBjb2xvci5icmFuY2gubm9zdWNoc2xvdHdpbGxldmVyYmVkZWZpbmVkIHdoaXRlICYmCisJZ2l0IGJyYW5jaCAtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmtub3duIGNvbG9yIHNsb3RzIGFyZSBpZ25vcmVkIChzdGF0dXMpJyAnCisJZ2l0IGNvbmZpZyBjb2xvci5zdGF0dXMubm9zdWNoc2xvdHdpbGxldmVyYmVkZWZpbmVkIHdoaXRlIHx8IGV4aXQKKwlnaXQgc3RhdHVzCisJY2FzZSAkPyBpbiAwfDEpIDogb2sgOzsgKikgZmFsc2UgOzsgZXNhYworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMjctZGlmZi1zdWJtb2R1bGUuc2ggYi90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxOGJmOTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMzU0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZmVyZW5jZSBpbiBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF90aWNrICYmCisJdGVzdF9jcmVhdGVfcmVwbyBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQllY2hvIGhlbGxvID53b3JsZCAmJgorCQlnaXQgYWRkIHdvcmxkICYmCisJCWdpdCBjb21taXQgLW0gc3VibW9kdWxlCisJKSAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBmcm90eiA+bml0Zm9sICYmCisJZ2l0IGFkZCBuaXRmb2wgc3ViICYmCisJZ2l0IGNvbW1pdCAtbSBzdXBlcnByb2plY3QgJiYKKworCSgKKwkJY2Qgc3ViICYmCisJCWVjaG8gZ29vZGJ5ZSA+d29ybGQgJiYKKwkJZ2l0IGFkZCB3b3JsZCAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgIzIiCisJKSAmJgorCisJc2V0IHggJCgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXYtbGlzdCBIRUFECisJKSAmJgorCWVjaG8gIjoxNjAwMDAgMTYwMDAwICQzICRfejQwIE0Jc3ViIiA+ZXhwZWN0ICYmCisJc3VidGlwPSQzIHN1YnByZXY9JDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1yYXcgSEVBRCcgJworCWdpdCBkaWZmIC0tcmF3IC0tYWJicmV2PTQwIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1yYXcgSEVBRCcgJworCWdpdCBkaWZmLWluZGV4IC0tcmF3IEhFQUQgPmFjdHVhbC5pbmRleCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMgLS1yYXcnICcKKwlnaXQgZGlmZi1maWxlcyAtLXJhdyA+YWN0dWFsLmZpbGVzICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWxlcworJworCitleHBlY3RfZnJvbV90byAoKSB7CisJcHJpbnRmICIlc1N1YnByb2plY3QgY29tbWl0ICVzXG4rU3VicHJvamVjdCBjb21taXQgJXNcbiIgXAorCQkiLSIgIiQxIiAiJDIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQnICcKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEIHdpdGggZGlydHkgc3VibW9kdWxlICh3b3JrIHRyZWUpJyAnCisJZWNobyA+PnN1Yi93b3JsZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKGluZGV4KScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZWNobyA+PndvcmxkICYmCisJCWdpdCBhZGQgd29ybGQKKwkpICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VidGlwICRzdWJwcmV2LWRpcnR5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCB3aXRoIGRpcnR5IHN1Ym1vZHVsZSAodW50cmFja2VkKScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNsZWFuIC1xZmR4ICYmCisJCT5jcnVmdAorCSkgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEIHdpdGggZGlydHkgc3VibW9kdWxlICh3b3JrIHRyZWUsIHJlZnMgbWF0Y2gpJyAnCisJZ2l0IGNvbW1pdCAtbSAieCIgc3ViICYmCisJZWNobyA+PnN1Yi93b3JsZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBkaWZmIC0taWdub3JlLXN1Ym1vZHVsZXMgSEVBRCA+YWN0dWFsMiAmJgorCSEgdGVzdCAtcyBhY3R1YWwyICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgSEVBRCA+YWN0dWFsMyAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbDMgPmFjdHVhbDMuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbDMuYm9keSAmJgorCWdpdCBkaWZmIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgSEVBRCA+YWN0dWFsNCAmJgorCSEgdGVzdCAtcyBhY3R1YWw0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKHdvcmsgdHJlZSwgcmVmcyBtYXRjaCkgWy5naXQvY29uZmlnXScgJworCWdpdCBjb25maWcgZGlmZi5pZ25vcmVTdWJtb2R1bGVzIGFsbCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGFsbCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDIgJiYKKwkhIHRlc3QgLXMgYWN0dWFsMiAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDMgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwzID5hY3R1YWwzLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwzLmJvZHkgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsNCAmJgorCWdpdCBkaWZmIEhFQUQgLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJwcmV2ICRzdWJwcmV2LWRpcnR5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi5pZ25vcmVTdWJtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKHdvcmsgdHJlZSwgcmVmcyBtYXRjaCkgWy5naXRtb2R1bGVzXScgJworCWdpdCBjb25maWcgZGlmZi5pZ25vcmVTdWJtb2R1bGVzIGRpcnR5ICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJISB0ZXN0IC1zIGFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDIgJiYKKwkhIHRlc3QgLXMgYWN0dWFsMiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDMgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwzID5hY3R1YWwzLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwzLmJvZHkgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsNCAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYuaWdub3JlU3VibW9kdWxlcyAmJgorCXJtIC5naXRtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKGluZGV4LCByZWZzIG1hdGNoKScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZWNobyA+PndvcmxkICYmCisJCWdpdCBhZGQgd29ybGQKKwkpICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKHVudHJhY2tlZCwgcmVmcyBtYXRjaCknICcKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjbGVhbiAtcWZkeCAmJgorCQk+Y3J1ZnQKKwkpICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1hbGwgSEVBRCA+YWN0dWFsMiAmJgorCSEgdGVzdCAtcyBhY3R1YWwyICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgSEVBRCA+YWN0dWFsMyAmJgorCSEgdGVzdCAtcyBhY3R1YWwzICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSBIRUFEID5hY3R1YWw0ICYmCisJISB0ZXN0IC1zIGFjdHVhbDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCB3aXRoIGRpcnR5IHN1Ym1vZHVsZSAodW50cmFja2VkLCByZWZzIG1hdGNoKSBbLmdpdC9jb25maWddJyAnCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDIgJiYKKwkhIHRlc3QgLXMgYWN0dWFsMiAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDMgJiYKKwkhIHRlc3QgLXMgYWN0dWFsMyAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsNCAmJgorCSEgdGVzdCAtcyBhY3R1YWw0ICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEIHdpdGggZGlydHkgc3VibW9kdWxlICh1bnRyYWNrZWQsIHJlZnMgbWF0Y2gpIFsuZ2l0bW9kdWxlc10nICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBhbGwgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsMiAmJgorCSEgdGVzdCAtcyBhY3R1YWwyICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgdW50cmFja2VkICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsMyAmJgorCSEgdGVzdCAtcyBhY3R1YWwzICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWw0ICYmCisJISB0ZXN0IC1zIGFjdHVhbDQgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZSAmJgorCXJtIC5naXRtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIGJldHdlZW4gc3VibW9kdWxlIGNvbW1pdHMnICcKKwlnaXQgZGlmZiBIRUFEXi4uSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VidGlwICRzdWJwcmV2ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkgJiYKKwlnaXQgZGlmZiAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBkaWZmIC0taWdub3JlLXN1Ym1vZHVsZXMgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgYmV0d2VlbiBzdWJtb2R1bGUgY29tbWl0cyBbLmdpdC9jb25maWddJyAnCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgYmV0d2VlbiBzdWJtb2R1bGUgY29tbWl0cyBbLmdpdG1vZHVsZXNdJyAnCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzdWIgJiYKKwlnaXQgZGlmZiAgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZSAmJgorCXJtIC5naXRtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIChlbXB0eSBzdWJtb2R1bGUgZGlyKScgJworCTogPmVtcHR5ICYmCisJcm0gLXJmIHN1Yi8qIHN1Yi8uZ2l0ICYmCisJZ2l0IGRpZmYgPiBhY3R1YWwuZW1wdHkgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwuZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3RlZCBzdWJtb2R1bGUgc2V0dXAnICcKKworCSMgMzkgZWZzCisJYz1mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgJiYKKwkoCisJCWVjaG8gIjAwMDAwMCAkX3o0MCAwCXN1YiIgJiYKKwkJZWNobyAiMTYwMDAwIDEkYyAxCXN1YiIgJiYKKwkJZWNobyAiMTYwMDAwIDIkYyAyCXN1YiIgJiYKKwkJZWNobyAiMTYwMDAwIDMkYyAzCXN1YiIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwllY2hvID5leHBlY3Qubm9zdWIgJ1wnJ2RpZmYgLS1jYyBzdWIKK2luZGV4IDJmZmZmZmYsM2ZmZmZmZi4uMDAwMDAwMAorLS0tIGEvc3ViCisrKysgYi9zdWIKK0BAQCAtMSwxIC0xLDEgKzEsMSBAQEAKKy0gU3VicHJvamVjdCBjb21taXQgMmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgorIC1TdWJwcm9qZWN0IGNvbW1pdCAzZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCisrK1N1YnByb2plY3QgY29tbWl0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnXCcnICYmCisKKwloaD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlzZWQgLWUgInMvJF96NDAvJGhoLyIgZXhwZWN0Lm5vc3ViID5leHBlY3Qud2l0aHN1YgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmVkIChlbXB0eSBzdWJtb2R1bGUpJyAnCisJcm0gLWZyIHN1YiAmJiBta2RpciBzdWIgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5vc3ViIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lZCAod2l0aCBzdWJtb2R1bGUpJyAnCisJcm0gLWZyIHN1YiAmJgorCWdpdCBjbG9uZSAtLW5vLWNoZWNrb3V0IC4gc3ViICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC53aXRoc3ViIGFjdHVhbAorJworCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDI4LWZvcm1hdC1wYXRjaC1taW1lLWhlYWRlcnMuc2ggYi90L3Q0MDI4LWZvcm1hdC1wYXRjaC1taW1lLWhlYWRlcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjA0YmE2NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjgtZm9ybWF0LXBhdGNoLW1pbWUtaGVhZGVycy5zaApAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZm9ybWF0LXBhdGNoIG1pbWUgaGVhZGVycyBhbmQgZXh0cmEgaGVhZGVycyBkbyBub3QgY29uZmxpY3QnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGNvbW1pdCB3aXRoIHV0Zi04IGJvZHknICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gbW9yZSA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0d28KKworCXV0Zi04IGJvZHk6IMOxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaCBoYXMgbWltZSBoZWFkZXJzJyAnCisJcm0gLWYgMDAwMS10d28ucGF0Y2ggJiYKKwlnaXQgZm9ybWF0LXBhdGNoIEhFQUReICYmCisJZ3JlcCAtaSAiY29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiAwMDAxLXR3by5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaCBoYXMgbWltZSBhbmQgZXh0cmEgaGVhZGVycycgJworCXJtIC1mIDAwMDEtdHdvLnBhdGNoICYmCisJZ2l0IGNvbmZpZyBmb3JtYXQuaGVhZGVycyAieC1mb286IGJhciIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIEhFQUReICYmCisJZ3JlcCAtaSAieC1mb286IGJhciIgMDAwMS10d28ucGF0Y2ggJiYKKwlncmVwIC1pICJjb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiIDAwMDEtdHdvLnBhdGNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAyOS1kaWZmLXRyYWlsaW5nLXNwYWNlLnNoIGIvdC90NDAyOS1kaWZmLXRyYWlsaW5nLXNwYWNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM2ZTJmMDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDI5LWRpZmYtdHJhaWxpbmctc3BhY2Uuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgSmltIE1leWVyaW5nCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIGhvbm9ycyBjb25maWcgb3B0aW9uLCBkaWZmLnN1cHByZXNzQmxhbmtFbXB0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA8PFxFT0YgPiBleHAgfHwKK2RpZmYgLS1naXQgYS9mIGIvZgoraW5kZXggNWY2YTI2My4uOGNiOGJhZSAxMDA2NDQKKy0tLSBhL2YKKysrKyBiL2YKK0BAIC0xLDIgKzEsMiBAQAorCisteAorK3kKK0VPRgorZXhpdCAxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICIkdGVzdF9kZXNjcmlwdGlvbiIgXAorICAgICdwcmludGYgIlxueFxuIiA+IGYgJiYKKyAgICAgZ2l0IGFkZCBmICYmCisgICAgIGdpdCBjb21taXQgLXEgLW0uIGYgJiYKKyAgICAgcHJpbnRmICJcbnlcbiIgPiBmICYmCisgICAgIGdpdCBjb25maWcgLS1ib29sIGRpZmYuc3VwcHJlc3NCbGFua0VtcHR5IHRydWUgJiYKKyAgICAgZ2l0IGRpZmYgZiA+IGFjdHVhbCAmJgorICAgICB0ZXN0X2NtcCBleHAgYWN0dWFsICYmCisgICAgICIkUEVSTF9QQVRIIiAtaS5iYWsgLXAgLWUgInMvXlwkLyAvIiBleHAgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWJvb2wgZGlmZi5zdXBwcmVzc0JsYW5rRW1wdHkgZmFsc2UgJiYKKyAgICAgZ2l0IGRpZmYgZiA+IGFjdHVhbCAmJgorICAgICB0ZXN0X2NtcCBleHAgYWN0dWFsICYmCisgICAgIGdpdCBjb25maWcgLS1ib29sIC0tdW5zZXQgZGlmZi5zdXBwcmVzc0JsYW5rRW1wdHkgJiYKKyAgICAgZ2l0IGRpZmYgZiA+IGFjdHVhbCAmJgorICAgICB0ZXN0X2NtcCBleHAgYWN0dWFsCisgICAgICcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDMwLWRpZmYtdGV4dGNvbnYuc2ggYi90L3Q0MDMwLWRpZmYtdGV4dGNvbnYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWViYjFlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzAtZGlmZi10ZXh0Y29udi5zaApAQCAtMCwwICsxLDEzMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYuKi50ZXh0Y29udiB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCitmaW5kX2RpZmYoKSB7CisJc2VkICcxLC9eaW5kZXggL2QnIHwgc2VkICcvXi0tICQvLCRkJworfQorCitjYXQgPmV4cGVjdC5iaW5hcnkgPDwnRU9GJworQmluYXJ5IGZpbGVzIGEvZmlsZSBhbmQgYi9maWxlIGRpZmZlcgorRU9GCisKK2NhdCA+ZXhwZWN0LnRleHQgPDwnRU9GJworLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEgKzEsMiBAQAorIDAKKysxCitFT0YKKworY2F0ID5oZXhkdW1wIDw8J0VPRicKKyMhL2Jpbi9zaAorIiRQRVJMX1BBVEgiIC1lICckLyA9IHVuZGVmOyAkXyA9IDw+OyBzLy4vb3JkKCQmKS9nZTsgcHJpbnQgJF8nIDwgIiQxIgorRU9GCitjaG1vZCAreCBoZXhkdW1wCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJpbmFyeSBmaWxlIHdpdGggaGlzdG9yeScgJworCXByaW50ZiAiXFwwXFxuIiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJcHJpbnRmICJcXDAxXFxuIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGlzIGNvbnNpZGVyZWQgYmluYXJ5IGJ5IHBvcmNlbGFpbicgJworCWdpdCBkaWZmIEhFQUReIEhFQUQgPmRpZmYgJiYKKwlmaW5kX2RpZmYgPGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5iaW5hcnkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgaXMgY29uc2lkZXJlZCBiaW5hcnkgYnkgcGx1bWJpbmcnICcKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUReIEhFQUQgPmRpZmYgJiYKKwlmaW5kX2RpZmYgPGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5iaW5hcnkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRleHRjb252IGZpbHRlcnMnICcKKwllY2hvIGZpbGUgZGlmZj1mb28gPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBkaWZmLmZvby50ZXh0Y29udiAiXCIkKHB3ZClcIiIvaGV4ZHVtcCAmJgorCWdpdCBjb25maWcgZGlmZi5mYWlsLnRleHRjb252IGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgcHJvZHVjZXMgdGV4dCcgJworCWdpdCBkaWZmIEhFQUReIEhFQUQgPmRpZmYgJiYKKwlmaW5kX2RpZmYgPGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC50ZXh0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgcHJvZHVjZXMgYmluYXJ5JyAnCisJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEXiBIRUFEID5kaWZmICYmCisJZmluZF9kaWZmIDxkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYmluYXJ5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgcHJvZHVjZXMgdGV4dCcgJworCWdpdCBsb2cgLTEgLXAgPmxvZyAmJgorCWZpbmRfZGlmZiA8bG9nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QudGV4dCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHByb2R1Y2VzIGJpbmFyeScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1iaW5hcnkgLS1zdGRvdXQgSEVBRF4gPnBhdGNoICYmCisJZmluZF9kaWZmIDxwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmJpbmFyeSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC12IHByb2R1Y2VzIHRleHQnICcKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUReICYmCisJZ2l0IHN0YXR1cyAtdiA+ZGlmZiAmJgorCWZpbmRfZGlmZiA8ZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnRleHQgYWN0dWFsICYmCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEQHsxfQorJworCitjYXQgPmV4cGVjdC5zdGF0IDw8J0VPRicKKyBmaWxlIHwgQmluIDIgLT4gNCBieXRlcworIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZzdGF0IGRvZXMgbm90IHJ1biB0ZXh0Y29udicgJworCWVjaG8gZmlsZSBkaWZmPWZhaWwgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGRpZmYgLS1zdGF0IEhFQUReIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Quc3RhdCBhY3R1YWwgJiYKKworCWhlYWQgLW4xIDxleHBlY3Quc3RhdCA+ZXhwZWN0LmxpbmUxICYmCisJaGVhZCAtbjEgPGFjdHVhbCA+YWN0dWFsLmxpbmUxICYmCisJdGVzdF9jbXAgZXhwZWN0LmxpbmUxIGFjdHVhbC5saW5lMQorJworIyByZXN0b3JlIHdvcmtpbmcgc2V0dXAKK2VjaG8gZmlsZSBkaWZmPWZvbyA+LmdpdGF0dHJpYnV0ZXMKKworY2F0ID5leHBlY3QudHlwZWNoYW5nZSA8PCdFT0YnCistLS0gYS9maWxlCisrKysgL2Rldi9udWxsCitAQCAtMSwyICswLDAgQEAKKy0wCistMQorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCituZXcgZmlsZSBtb2RlIDEyMDAwMAoraW5kZXggMDAwMDAwMC4uNjdiZTQyMQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZQorQEAgLTAsMCArMSBAQAorK2Zyb3R6CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0VPRgorIyBtYWtlIGEgc3ltbGluayB0aGUgaGFyZCB3YXkgdGhhdCB3b3JrcyBvbiBzeW1saW5rLWNoYWxsZW5nZWQgZmlsZSBzeXN0ZW1zCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXh0Y29udiBkb2VzIG5vdCBhY3Qgb24gc3ltbGlua3MnICcKKwlwcmludGYgZnJvdHogPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGxzLWZpbGVzIC1zIHwgc2VkIC1lIHMvMTAwNjQ0LzEyMDAwMC8gfAorCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWdpdCBjb21taXQgLW0gdHlwZWNoYW5nZSAmJgorCWdpdCBzaG93ID5kaWZmICYmCisJZmluZF9kaWZmIDxkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QudHlwZWNoYW5nZSBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDMxLWRpZmYtcmV3cml0ZS1iaW5hcnkuc2ggYi90L3Q0MDMxLWRpZmYtcmV3cml0ZS1iaW5hcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWFjYzY2OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzEtZGlmZi1yZXdyaXRlLWJpbmFyeS5zaApAQCAtMCwwICsxLDgwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmV3cml0ZSBkaWZmIG9uIGJpbmFyeSBmaWxlJworCisuIC4vdGVzdC1saWIuc2gKKworIyBXZSBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBtZWV0IHRoZSBNSU5JTVVNX0JSRUFLX1NJWkUKKyMgcmVxdWlyZW1lbnQuCittYWtlX2ZpbGUoKSB7CisJIyBjb21tb24gZmlyc3QgbGluZSB0byBoZWxwIGlkZW50aWZ5IHJld3JpdGUgdmVyc3VzIHJlZ3VsYXIgZGlmZgorCXByaW50ZiAiPVxuIiA+ZmlsZQorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCisJZG8KKwkJZm9yIGogaW4gMSAyIDMgNCA1IDYgNyA4IDkKKwkJZG8KKwkJCWZvciBrIGluIDEgMiAzIDQgNQorCQkJZG8KKwkJCQlwcmludGYgIiQxXG4iCisJCQlkb25lCisJCWRvbmUKKwlkb25lID4+ZmlsZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYmluYXJ5IGZpbGUgd2l0aCBjaGFuZ2VzJyAnCisJbWFrZV9maWxlICJcXDAiICYmCisJZ2l0IGFkZCBmaWxlICYmCisJbWFrZV9maWxlICJcXDAxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YW5pbGxhIGRpZmYgaXMgYmluYXJ5JyAnCisJZ2l0IGRpZmYgPmRpZmYgJiYKKwlncmVwICJCaW5hcnkgZmlsZXMgYS9maWxlIGFuZCBiL2ZpbGUgZGlmZmVyIiBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGUgZGlmZiBpcyBiaW5hcnknICcKKwlnaXQgZGlmZiAtQiA+ZGlmZiAmJgorCWdyZXAgImRpc3NpbWlsYXJpdHkgaW5kZXgiIGRpZmYgJiYKKwlncmVwICJCaW5hcnkgZmlsZXMgYS9maWxlIGFuZCBiL2ZpbGUgZGlmZmVyIiBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGUgZGlmZiBjYW4gc2hvdyBiaW5hcnkgcGF0Y2gnICcKKwlnaXQgZGlmZiAtQiAtLWJpbmFyeSA+ZGlmZiAmJgorCWdyZXAgImRpc3NpbWlsYXJpdHkgaW5kZXgiIGRpZmYgJiYKKwlncmVwICJHSVQgYmluYXJ5IHBhdGNoIiBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGUgZGlmZiAtLW51bXN0YXQgc2hvd3MgYmluYXJ5IGNoYW5nZXMnICcKKwlnaXQgZGlmZiAtQiAtLW51bXN0YXQgLS1zdW1tYXJ5ID5kaWZmICYmCisJZ3JlcCAtZSAiLQktCSIgZGlmZiAmJgorCWdyZXAgIiByZXdyaXRlIGZpbGUiIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXN0YXQgY291bnRzIGJpbmFyeSByZXdyaXRlIGFzIDAgbGluZXMnICcKKwlnaXQgZGlmZiAtQiAtLXN0YXQgLS1zdW1tYXJ5ID5kaWZmICYmCisJZ3JlcCAiQmluIiBkaWZmICYmCisJdGVzdF9pMThuZ3JlcCAiMCBpbnNlcnRpb25zLiowIGRlbGV0aW9ucyIgZGlmZiAmJgorCWdyZXAgIiByZXdyaXRlIGZpbGUiIGRpZmYKKycKKworeworCWVjaG8gIiMhJFNIRUxMX1BBVEgiCisJY2F0IDw8J0VPRicKKyIkUEVSTF9QQVRIIiAtZSAnJC8gPSB1bmRlZjsgJF8gPSA8Pjsgcy8uL29yZCgkJikvZ2U7IHByaW50ICRfJyA8ICIkMSIKK0VPRgorfSA+ZHVtcAorY2htb2QgK3ggZHVtcAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXh0Y29udicgJworCWVjaG8gZmlsZSBkaWZmPWZvbyA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGRpZmYuZm9vLnRleHRjb252ICJcIiQocHdkKVwiIi9kdW1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGUgZGlmZiByZXNwZWN0cyB0ZXh0Y29udicgJworCWdpdCBkaWZmIC1CID5kaWZmICYmCisJZ3JlcCAiZGlzc2ltaWxhcml0eSBpbmRleCIgZGlmZiAmJgorCWdyZXAgIl4tNjEiIGRpZmYgJiYKKwlncmVwICJeLTAiIGRpZmYKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDMyLWRpZmYtaW50ZXItaHVuay1jb250ZXh0LnNoIGIvdC90NDAzMi1kaWZmLWludGVyLWh1bmstY29udGV4dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNGUzZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzMi1kaWZmLWludGVyLWh1bmstY29udGV4dC5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZiBodW5rIGZ1c2luZycKKworLiAuL3Rlc3QtbGliLnNoCisKK2YoKSB7CisJZWNobyAkMQorCWk9MQorCXdoaWxlIHRlc3QgJGkgLWxlICQyCisJZG8KKwkJZWNobyAkaQorCQlpPSQoZXhwciAkaSArIDEpCisJZG9uZQorCWVjaG8gJDMKK30KKwordCgpIHsKKwljYXNlICQjIGluCisJNCkgaHVua3M9JDQ7IGNtZD0iZGlmZiAtVSQzIjs7CisJNSkgaHVua3M9JDU7IGNtZD0iZGlmZiAtVSQzIC0taW50ZXItaHVuay1jb250ZXh0PSQ0Ijs7CisJZXNhYworCWxhYmVsPSIkY21kLCAkMSBjb21tb24gJDIiCisJZmlsZT1mJDEKKwlleHBlY3RlZD1leHBlY3RlZC4kZmlsZS4kMy4kaHVua3MKKworCWlmICEgdGVzdCAtZiAkZmlsZQorCXRoZW4KKwkJZiBBICQxIEIgPiRmaWxlCisJCWdpdCBhZGQgJGZpbGUKKwkJZ2l0IGNvbW1pdCAtcSAtbS4gJGZpbGUKKwkJZiBYICQxIFkgPiRmaWxlCisJZmkKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRsYWJlbDogY291bnQgaHVua3MgKCRodW5rcykiICIKKwkJdGVzdCAkKGdpdCAkY21kICRmaWxlIHwgZ3JlcCAnXkBAICcgfCB3YyAtbCkgPSAkaHVua3MKKwkiCisKKwl0ZXN0IC1mICRleHBlY3RlZCAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRsYWJlbDogY2hlY2sgb3V0cHV0IiAiCisJCWdpdCAkY21kICRmaWxlIHwgZ3JlcCAtdiAnXmluZGV4ICcgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAkZXhwZWN0ZWQgYWN0dWFsCisJIgorfQorCitjYXQgPDxFT0YgPmV4cGVjdGVkLmYxLjAuMSB8fCBleGl0IDEKK2RpZmYgLS1naXQgYS9mMSBiL2YxCistLS0gYS9mMQorKysrIGIvZjEKK0BAIC0xLDMgKzEsMyBAQAorLUEKKytYCisgMQorLUIKKytZCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RlZC5mMS4wLjIgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvZjEgYi9mMQorLS0tIGEvZjEKKysrKyBiL2YxCitAQCAtMSArMSBAQAorLUEKKytYCitAQCAtMyArMyBAQCBBCistQgorK1kKK0VPRgorCisjIGNvbW1vbiBsaW5lcwljdHgJaW50cmN0eAlodW5rcwordCAxIGxpbmUJMAkJMgordCAxIGxpbmUJMAkwCTIKK3QgMSBsaW5lCTAJMQkxCit0IDEgbGluZQkwCTIJMQordCAxIGxpbmUJMQkJMQorCit0IDIgbGluZXMJMAkJMgordCAyIGxpbmVzCTAJMAkyCit0IDIgbGluZXMJMAkxCTIKK3QgMiBsaW5lcwkwCTIJMQordCAyIGxpbmVzCTEJCTEKKwordCAzIGxpbmVzCTEJCTIKK3QgMyBsaW5lcwkxCTAJMgordCAzIGxpbmVzCTEJMQkxCit0IDMgbGluZXMJMQkyCTEKKwordCA5IGxpbmVzCTMJCTIKK3QgOSBsaW5lcwkzCTIJMgordCA5IGxpbmVzCTMJMwkxCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzMy1kaWZmLXBhdGllbmNlLnNoIGIvdC90NDAzMy1kaWZmLXBhdGllbmNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjOTkzMmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDMzLWRpZmYtcGF0aWVuY2Uuc2gKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhdGllbmNlIGRpZmYgYWxnb3JpdGhtJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWRpZmYtYWx0ZXJuYXRpdmUuc2gKKwordGVzdF9kaWZmX2Zyb2JuaXR6ICJwYXRpZW5jZSIKKwordGVzdF9kaWZmX3VuaXF1ZSAicGF0aWVuY2UiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzNC1kaWZmLXdvcmRzLnNoIGIvdC90NDAzNC1kaWZmLXdvcmRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwYWIzMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0LWRpZmYtd29yZHMuc2gKQEAgLTAsMCArMSwzODggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd3b3JkIGRpZmYgY29sb3JzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2gKKworY2F0ID5wcmUuc2ltcGxlIDw8LVxFT0YKKwloKDQpCisKKwlhID0gYiArIGMKK0VPRgorY2F0ID5wb3N0LnNpbXBsZSA8PC1cRU9GCisJaCg0KSxoaFs0NF0KKworCWEgPSBiICsgYworCisJYWEgPSBhCisKKwlhZWZmID0gYWVmZiAqICggYWFhICkKK0VPRgorY2F0ID5leHBlY3QubGV0dGVyLXJ1bnMtYXJlLXdvcmRzIDw8LVxFT0YKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CisJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKwk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CisJaCg0KSw8R1JFRU4+aGg8UkVTRVQ+WzQ0XQorCisJYSA9IGIgKyBjPFJFU0VUPgorCisJPEdSRUVOPmFhID0gYTxSRVNFVD4KKworCTxHUkVFTj5hZWZmID0gYWVmZiAqICggYWFhPFJFU0VUPiApCitFT0YKK2NhdCA+ZXhwZWN0Lm5vbi13aGl0ZXNwYWNlLWlzLXdvcmQgPDwtXEVPRgorCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKwk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorCTxDWUFOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KKwloKDQpPEdSRUVOPixoaFs0NF08UkVTRVQ+CisKKwlhID0gYiArIGM8UkVTRVQ+CisKKwk8R1JFRU4+YWEgPSBhPFJFU0VUPgorCisJPEdSRUVOPmFlZmYgPSBhZWZmICogKCBhYWEgKTxSRVNFVD4KK0VPRgorCit3b3JkX2RpZmYgKCkgeworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggIiRAIiBwcmUgcG9zdCA+b3V0cHV0ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPG91dHB1dCA+b3V0cHV0LmRlY3J5cHRlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQuZGVjcnlwdGVkCit9CisKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyICgpIHsKKwlsYW5nPSQxCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZGlmZiBkcml2ZXIgJyRsYW5nJyIgJworCQljcCAiJFRFU1RfRElSRUNUT1JZL3Q0MDM0LyciJGxhbmciJy9wcmUiIFwKKwkJCSIkVEVTVF9ESVJFQ1RPUlkvdDQwMzQvJyIkbGFuZyInL3Bvc3QiIFwKKwkJCSIkVEVTVF9ESVJFQ1RPUlkvdDQwMzQvJyIkbGFuZyInL2V4cGVjdCIgLiAmJgorCQllY2hvICIqIGRpZmY9JyIkbGFuZyInIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJd29yZF9kaWZmIC0tY29sb3Itd29yZHMKKwknCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgZGlmZi5jb2xvci5vbGQgcmVkICYmCisJZ2l0IGNvbmZpZyBkaWZmLmNvbG9yLm5ldyBncmVlbiAmJgorCWdpdCBjb25maWcgZGlmZi5jb2xvci5mdW5jIG1hZ2VudGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHByZSBhbmQgcG9zdCB3aXRoIHJ1bnMgb2Ygd2hpdGVzcGFjZScgJworCWNwIHByZS5zaW1wbGUgcHJlICYmCisJY3AgcG9zdC5zaW1wbGUgcG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JkIGRpZmYgd2l0aCBydW5zIG9mIHdoaXRlc3BhY2UnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorCQk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CisJCTxSRUQ+aCg0KTxSRVNFVD48R1JFRU4+aCg0KSxoaFs0NF08UkVTRVQ+CisKKwkJYSA9IGIgKyBjPFJFU0VUPgorCisJCTxHUkVFTj5hYSA9IGE8UkVTRVQ+CisKKwkJPEdSRUVOPmFlZmYgPSBhZWZmICogKCBhYWEgKTxSRVNFVD4KKwlFT0YKKwl3b3JkX2RpZmYgLS1jb2xvci13b3JkcyAmJgorCXdvcmRfZGlmZiAtLXdvcmQtZGlmZj1jb2xvciAmJgorCXdvcmRfZGlmZiAtLWNvbG9yIC0td29yZC1kaWZmPWNvbG9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0td29yZC1kaWZmPXBvcmNlbGFpbicgJworCXNlZCAncy8jLiokLy8nID5leHBlY3QgPDwtXEVPRiAmJgorCQlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAorCQlpbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NAorCQktLS0gYS9wcmUKKwkJKysrIGIvcG9zdAorCQlAQCAtMSwzICsxLDcgQEAKKwkJLWgoNCkKKwkJK2goNCksaGhbNDRdCisJCX4KKwkJICMgc2lnbmlmaWNhbnQgc3BhY2UKKwkJfgorCQkgYSA9IGIgKyBjCisJCX4KKwkJfgorCQkrYWEgPSBhCisJCX4KKwkJfgorCQkrYWVmZiA9IGFlZmYgKiAoIGFhYSApCisJCX4KKwlFT0YKKwl3b3JkX2RpZmYgLS13b3JkLWRpZmY9cG9yY2VsYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0td29yZC1kaWZmPXBsYWluJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAorCQlpbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NAorCQktLS0gYS9wcmUKKwkJKysrIGIvcG9zdAorCQlAQCAtMSwzICsxLDcgQEAKKwkJWy1oKDQpLV17K2goNCksaGhbNDRdK30KKworCQlhID0gYiArIGMKKworCQl7K2FhID0gYSt9CisKKwkJeythZWZmID0gYWVmZiAqICggYWFhICkrfQorCUVPRgorCXdvcmRfZGlmZiAtLXdvcmQtZGlmZj1wbGFpbiAmJgorCXdvcmRfZGlmZiAtLXdvcmQtZGlmZj1wbGFpbiAtLW5vLWNvbG9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0td29yZC1kaWZmPXBsYWluIC0tY29sb3InICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorCQk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CisJCTxSRUQ+Wy1oKDQpLV08UkVTRVQ+PEdSRUVOPnsraCg0KSxoaFs0NF0rfTxSRVNFVD4KKworCQlhID0gYiArIGM8UkVTRVQ+CisKKwkJPEdSRUVOPnsrYWEgPSBhK308UkVTRVQ+CisKKwkJPEdSRUVOPnsrYWVmZiA9IGFlZmYgKiAoIGFhYSApK308UkVTRVQ+CisJRU9GCisJd29yZF9kaWZmIC0td29yZC1kaWZmPXBsYWluIC0tY29sb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZCBkaWZmIHdpdGhvdXQgY29udGV4dCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+CisJCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CisJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CisJCTxDWUFOPkBAIC0xICsxIEBAPFJFU0VUPgorCQk8UkVEPmgoNCk8UkVTRVQ+PEdSRUVOPmgoNCksaGhbNDRdPFJFU0VUPgorCQk8Q1lBTj5AQCAtMywwICs0LDQgQEA8UkVTRVQ+IDxSRVNFVD48TUFHRU5UQT5hID0gYiArIGM8UkVTRVQ+CisKKwkJPEdSRUVOPmFhID0gYTxSRVNFVD4KKworCQk8R1JFRU4+YWVmZiA9IGFlZmYgKiAoIGFhYSApPFJFU0VUPgorCUVPRgorCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzIC0tdW5pZmllZD0wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmQgZGlmZiB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uJyAnCisJY3AgZXhwZWN0LmxldHRlci1ydW5zLWFyZS13b3JkcyBleHBlY3QgJiYKKwl3b3JkX2RpZmYgLS1jb2xvci13b3Jkcz0iW2Etel0rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYSBkaWZmIGRyaXZlcicgJworCWdpdCBjb25maWcgZGlmZi50ZXN0ZHJpdmVyLndvcmRSZWdleCAiW15bOnNwYWNlOl1dIiAmJgorCWNhdCA8PC1cRU9GID4uZ2l0YXR0cmlidXRlcworCQlwcmUgZGlmZj10ZXN0ZHJpdmVyCisJCXBvc3QgZGlmZj10ZXN0ZHJpdmVyCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiBvdmVycmlkZXMgLmdpdGF0dHJpYnV0ZXMnICcKKwljcCBleHBlY3QubGV0dGVyLXJ1bnMtYXJlLXdvcmRzIGV4cGVjdCAmJgorCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzPSJbYS16XSsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSByZWdleCBzdXBwbGllZCBieSBkcml2ZXInICcKKwljcCBleHBlY3Qubm9uLXdoaXRlc3BhY2UtaXMtd29yZCBleHBlY3QgJiYKKwl3b3JkX2RpZmYgLS1jb2xvci13b3JkcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZGlmZi53b3JkUmVnZXggb3B0aW9uJyAnCisJZ2l0IGNvbmZpZyBkaWZmLndvcmRSZWdleCAiW1s6YWxudW06XV0rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tYW5kLWxpbmUgb3ZlcnJpZGVzIGNvbmZpZycgJworCWNwIGV4cGVjdC5sZXR0ZXItcnVucy1hcmUtd29yZHMgZXhwZWN0ICYmCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHM9IlthLXpdKyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWFuZC1saW5lIG92ZXJyaWRlcyBjb25maWc6IC0td29yZC1kaWZmLXJlZ2V4JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKwkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKwkJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgorCQloKDQpLDxHUkVFTj57K2hoK308UkVTRVQ+WzQ0XQorCisJCWEgPSBiICsgYzxSRVNFVD4KKworCQk8R1JFRU4+eythYSA9IGErfTxSRVNFVD4KKworCQk8R1JFRU4+eythZWZmID0gYWVmZiAqICggYWFhK308UkVTRVQ+ICkKKwlFT0YKKwl3b3JkX2RpZmYgLS1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD0iW2Etel0rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0YXR0cmlidXRlcyBvdmVycmlkZSBjb25maWcnICcKKwljcCBleHBlY3Qubm9uLXdoaXRlc3BhY2UtaXMtd29yZCBleHBlY3QgJiYKKwl3b3JkX2RpZmYgLS1jb2xvci13b3JkcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogcmVtb3ZlIGRpZmYgZHJpdmVyIHJlZ2V4JyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBkaWZmLnRlc3Rkcml2ZXIud29yZFJlZ2V4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBjb25maWd1cmVkIHJlZ2V4JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKwkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKwkJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgorCQloKDQpLDxHUkVFTj5oaFs0NDxSRVNFVD5dCisKKwkJYSA9IGIgKyBjPFJFU0VUPgorCisJCTxHUkVFTj5hYSA9IGE8UkVTRVQ+CisKKwkJPEdSRUVOPmFlZmYgPSBhZWZmICogKCBhYWE8UkVTRVQ+ICkKKwlFT0YKKwl3b3JkX2RpZmYgLS1jb2xvci13b3JkcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHBhcnNpbmcgd29yZHMgZm9yIG5ld2xpbmUnICcKKwllY2hvICJhYWEgKGFhYSkiID5wcmUgJiYKKwllY2hvICJhYWEgKGFhYSkgYWFhIiA+cG9zdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+CisJCTxCT0xEPmluZGV4IGMyOTQ1M2IuLmJlMjJmMzcgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CisJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CisJCTxDWUFOPkBAIC0xICsxIEBAPFJFU0VUPgorCQlhYWEgKGFhYSkgPEdSRUVOPmFhYTxSRVNFVD4KKwlFT0YKKwl3b3JkX2RpZmYgLS1jb2xvci13b3Jkcz0iYSsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgd2hlbiB3b3JkcyBhcmUgb25seSByZW1vdmVkIGF0IHRoZSBlbmQnICcKKwllY2hvICIoOiIgPnByZSAmJgorCWVjaG8gIigiID5wb3N0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggMjg5Y2I5ZC4uMmQwNmYzNyAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKwkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKwkJPENZQU4+QEAgLTEgKzEgQEA8UkVTRVQ+CisJCSg8UkVEPjo8UkVTRVQ+CisJRU9GCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHM9LgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXdvcmQtZGlmZj1ub25lJyAnCisJZWNobyAiKDoiID5wcmUgJiYKKwllY2hvICIoIiA+cG9zdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKKwkJaW5kZXggMjg5Y2I5ZC4uMmQwNmYzNyAxMDA2NDQKKwkJLS0tIGEvcHJlCisJCSsrKyBiL3Bvc3QKKwkJQEAgLTEgKzEgQEAKKwkJLSg6CisJCSsoCisJRU9GCisJd29yZF9kaWZmIC0td29yZC1kaWZmPXBsYWluIC0td29yZC1kaWZmPW5vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXQgZGVmYXVsdCBkcml2ZXInICcKKwl0ZXN0X3VuY29uZmlnIGRpZmYud29yZHJlZ2V4CisnCisKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIGFkYQordGVzdF9sYW5ndWFnZV9kcml2ZXIgYmlidGV4Cit0ZXN0X2xhbmd1YWdlX2RyaXZlciBjcHAKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIGNzaGFycAordGVzdF9sYW5ndWFnZV9kcml2ZXIgZm9ydHJhbgordGVzdF9sYW5ndWFnZV9kcml2ZXIgaHRtbAordGVzdF9sYW5ndWFnZV9kcml2ZXIgamF2YQordGVzdF9sYW5ndWFnZV9kcml2ZXIgbWF0bGFiCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBvYmpjCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBwYXNjYWwKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIHBlcmwKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIHBocAordGVzdF9sYW5ndWFnZV9kcml2ZXIgcHl0aG9uCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBydWJ5Cit0ZXN0X2xhbmd1YWdlX2RyaXZlciB0ZXgKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZC1kaWZmIHdpdGggZGlmZi5zYmUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKKwlpbmRleCBhMWE1M2I1Li5iYzhmZTZkIDEwMDY0NAorCS0tLSBhL3ByZQorCSsrKyBiL3Bvc3QKKwlAQCAtMSwzICsxLDMgQEAKKwlhCisKKwlbLWItXXsrYyt9CisJRU9GCisJY2F0ID5wcmUgPDwtXEVPRiAmJgorCWEKKworCWIKKwlFT0YKKwljYXQgPnBvc3QgPDwtXEVPRiAmJgorCWEKKworCWMKKwlFT0YKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS11bnNldCBkaWZmLnN1cHByZXNzLWJsYW5rLWVtcHR5IiAmJgorCWdpdCBjb25maWcgZGlmZi5zdXBwcmVzcy1ibGFuay1lbXB0eSB0cnVlICYmCisJd29yZF9kaWZmIC0td29yZC1kaWZmPXBsYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmQtZGlmZiB3aXRoIG5vIG5ld2xpbmUgYXQgRU9GJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS9wcmUgYi9wb3N0CisJaW5kZXggN2JmMzE2ZS4uM2RkMDMwMyAxMDA2NDQKKwktLS0gYS9wcmUKKwkrKysgYi9wb3N0CisJQEAgLTEgKzEgQEAKKwlhIGEgWy1hLV17K2FiK30gYSBhCisJRU9GCisJcHJpbnRmICIlcyIgImEgYSBhIGEgYSIgPnByZSAmJgorCXByaW50ZiAiJXMiICJhIGEgYWIgYSBhIiA+cG9zdCAmJgorCXdvcmRfZGlmZiAtLXdvcmQtZGlmZj1wbGFpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBoaXN0b3J5IHdpdGggdHdvIGZpbGVzJyAnCisJZWNobyAiYSBiOyBjIiA+YS50ZXggJiYKKwllY2hvICJhIGI7IGMiID56LnR4dCAmJgorCWdpdCBhZGQgYS50ZXggei50eHQgJiYKKwlnaXQgY29tbWl0IC1taW5pdGlhbCAmJgorCisJIyBtb2RpZnkgYm90aAorCWVjaG8gImEgYng7IGMiID5hLnRleCAmJgorCWVjaG8gImEgYng7IGMiID56LnR4dCAmJgorCWdpdCBjb21taXQgLW1tb2RpZmllZCAtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JkUmVnZXggZm9yIHRoZSBmaXJzdCBmaWxlIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBzZWNvbmQnICcKKwllY2hvICIqLnRleCBkaWZmPXRleCIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBkaWZmLnRleC53b3JkUmVnZXggIlthLXpdK3wuIiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJZGlmZiAtLWdpdCBhL2EudGV4IGIvYS50ZXgKKwkJLS0tIGEvYS50ZXgKKwkJKysrIGIvYS50ZXgKKwkJQEAgLTEgKzEgQEAKKwkJYSBbLWItXXsrYngrfTsgYworCQlkaWZmIC0tZ2l0IGEvei50eHQgYi96LnR4dAorCQktLS0gYS96LnR4dAorCQkrKysgYi96LnR4dAorCQlAQCAtMSArMSBAQAorCQlhIFstYjstXXsrYng7K30gYworCUVPRgorCWdpdCBkaWZmIC0td29yZC1kaWZmIEhFQUR+ID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMzQvYWRhL2V4cGVjdCBiL3QvdDQwMzQvYWRhL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTIzNzZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9hZGEvZXhwZWN0CkBAIC0wLDAgKzEsMjcgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggZDk2ZmRkMS4uZGYyMWJiMCAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMTMgKzEsMTMgQEA8UkVTRVQ+CitBZGEuVGV4dF9JTy5QdXRfTGluZSgiSGVsbG8gV29ybGQ8UkVEPiE8UkVTRVQ+PEdSRUVOPj88UkVTRVQ+Iik7CisxIDFlPFJFRD4tPFJFU0VUPjEwIDE2I0ZFMTIjRTIgMy4xNDFfNTkyICc8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JworPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+Kio8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4oPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPikKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD46PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89IDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPi4uPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PD48UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CmRpZmYgLS1naXQgYS90L3Q0MDM0L2FkYS9wb3N0IGIvdC90NDAzNC9hZGEvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjIxYmIwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9hZGEvcG9zdApAQCAtMCwwICsxLDEzIEBACitBZGEuVGV4dF9JTy5QdXRfTGluZSgiSGVsbG8gV29ybGQ/Iik7CisxIDFlMTAgMTYjRkUxMiNFMiAzLjE0MV81OTIgJ3knCit4K3kgeC15Cit4KnkgeC95Cit4Kip5Cit4KHkpCit4Oj15Cit4PXkgeC89IHkKK3g8eSB4PD15IHg+eSB4Pj15Cit4LHkKK3g9PnkKK3guLnkKK3g8PnkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvYWRhL3ByZSBiL3QvdDQwMzQvYWRhL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTZmZGQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9hZGEvcHJlCkBAIC0wLDAgKzEsMTMgQEAKK0FkYS5UZXh0X0lPLlB1dF9MaW5lKCJIZWxsbyBXb3JsZCEiKTsKKzEgMWUtMTAgMTYjRkUxMiNFMiAzLjE0MV81OTIgJ3gnCithK2IgYS1iCithKmIgYS9iCithKipiCithKGIpCithOj1iCithPWIgYS89IGIKK2E8YiBhPD1iIGE+YiBhPj1iCithLGIKK2E9PmIKK2EuLmIKK2E8PmIKZGlmZiAtLWdpdCBhL3QvdDQwMzQvYmlidGV4L2V4cGVjdCBiL3QvdDQwMzQvYmlidGV4L2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTU3Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9iaWJ0ZXgvZXhwZWN0CkBAIC0wLDAgKzEsMTUgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggOTVjZDU1Yi4uZGRjYmE5YiAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsOSArMSwxMCBAQDxSRVNFVD4KK0BhcnRpY2xle2FsZG91czE5ODd1aWUsPFJFU0VUPgorICB0aXRsZT17e1VsdGltYXRlIGluc3RhYmlsaXR5IG9mIGV4cG9uZW50aWFsIGJhY2stb2ZmIHByb3RvY29sIGZvciBhY2tub3dsZWRnbWVudC1iYXNlZCB0cmFuc21pc3Npb24gY29udHJvbCBvZiByYW5kb20gYWNjZXNzIGNvbW11bmljYXRpb24gY2hhbm5lbHN9fSw8UkVTRVQ+CisgIGF1dGhvcj17QWxkb3VzLCA8UkVEPkQuPFJFU0VUPjxHUkVFTj5EYXZpZDxSRVNFVD59LAorICBqb3VybmFsPXtJbmZvcm1hdGlvbiBUaGVvcnksIElFRUUgVHJhbnNhY3Rpb25zIG9ufSw8UkVTRVQ+CisgIHZvbHVtZT17PFJFRD4zMzxSRVNFVD48R1JFRU4+Qm9ndXMuPFJFU0VUPn0sCisgIG51bWJlcj17PFJFRD4yPFJFU0VUPjxHUkVFTj40PFJFU0VUPn0sCisgIHBhZ2VzPXsyMTktLTIyM30sPFJFU0VUPgorICB5ZWFyPTxHUkVFTj4xOTg3LDxSRVNFVD4KKzxHUkVFTj4gIG5vdGU9e1RoaXMgaXMgaW4gZmFjdCBhIHJhdGhlciBmdW5ueSByZWFkIHNpbmNlIGV0aGVybmV0IHdvcmtzIHdlbGwgaW4gcHJhY3RpY2UuIFRoZTxSRVNFVD4gezxSRUQ+MTk4NzxSRVNFVD48R1JFRU4+XGVtIHByZX0gcmVmZXJlbmNlIGlzIHRoZSByaWdodCBvbmUsIGhvd2V2ZXIuPFJFU0VUPn08UkVEPiw8UkVTRVQ+Cit9PFJFU0VUPgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9iaWJ0ZXgvcG9zdCBiL3QvdDQwMzQvYmlidGV4L3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjYmE5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvYmlidGV4L3Bvc3QKQEAgLTAsMCArMSwxMCBAQAorQGFydGljbGV7YWxkb3VzMTk4N3VpZSwKKyAgdGl0bGU9e3tVbHRpbWF0ZSBpbnN0YWJpbGl0eSBvZiBleHBvbmVudGlhbCBiYWNrLW9mZiBwcm90b2NvbCBmb3IgYWNrbm93bGVkZ21lbnQtYmFzZWQgdHJhbnNtaXNzaW9uIGNvbnRyb2wgb2YgcmFuZG9tIGFjY2VzcyBjb21tdW5pY2F0aW9uIGNoYW5uZWxzfX0sCisgIGF1dGhvcj17QWxkb3VzLCBEYXZpZH0sCisgIGpvdXJuYWw9e0luZm9ybWF0aW9uIFRoZW9yeSwgSUVFRSBUcmFuc2FjdGlvbnMgb259LAorICB2b2x1bWU9e0JvZ3VzLn0sCisgIG51bWJlcj17NH0sCisgIHBhZ2VzPXsyMTktLTIyM30sCisgIHllYXI9MTk4NywKKyAgbm90ZT17VGhpcyBpcyBpbiBmYWN0IGEgcmF0aGVyIGZ1bm55IHJlYWQgc2luY2UgZXRoZXJuZXQgd29ya3Mgd2VsbCBpbiBwcmFjdGljZS4gVGhlIHtcZW0gcHJlfSByZWZlcmVuY2UgaXMgdGhlIHJpZ2h0IG9uZSwgaG93ZXZlci59Cit9CmRpZmYgLS1naXQgYS90L3Q0MDM0L2JpYnRleC9wcmUgYi90L3Q0MDM0L2JpYnRleC9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjZDU1YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvYmlidGV4L3ByZQpAQCAtMCwwICsxLDkgQEAKK0BhcnRpY2xle2FsZG91czE5ODd1aWUsCisgIHRpdGxlPXt7VWx0aW1hdGUgaW5zdGFiaWxpdHkgb2YgZXhwb25lbnRpYWwgYmFjay1vZmYgcHJvdG9jb2wgZm9yIGFja25vd2xlZGdtZW50LWJhc2VkIHRyYW5zbWlzc2lvbiBjb250cm9sIG9mIHJhbmRvbSBhY2Nlc3MgY29tbXVuaWNhdGlvbiBjaGFubmVsc319LAorICBhdXRob3I9e0FsZG91cywgRC59LAorICBqb3VybmFsPXtJbmZvcm1hdGlvbiBUaGVvcnksIElFRUUgVHJhbnNhY3Rpb25zIG9ufSwKKyAgdm9sdW1lPXszM30sCisgIG51bWJlcj17Mn0sCisgIHBhZ2VzPXsyMTktLTIyM30sCisgIHllYXI9ezE5ODd9LAorfQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9jcHAvZXhwZWN0IGIvdC90NDAzNC9jcHAvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDFlYTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2NwcC9leHBlY3QKQEAgLTAsMCArMSwzNiBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCAyM2Q1YzhhLi43ZThjMDI2IDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxOSArMSwxOSBAQDxSRVNFVD4KK0ZvbygpIDogeCgwPFJFRD4mJjE8UkVTRVQ+PEdSRUVOPiY0MjxSRVNFVD4pIHsgPEdSRUVOPmJhcih4KTs8UkVTRVQ+IH0KK2NvdXQ8PCJIZWxsbyBXb3JsZDxSRUQ+ITxSRVNFVD48R1JFRU4+PzxSRVNFVD5cbiI8PGVuZGw7Cis8R1JFRU4+KDxSRVNFVD4xPEdSRUVOPikgKDxSRVNFVD4tMWUxMDxHUkVFTj4pICg8UkVTRVQ+MHhhYmNkZWY8R1JFRU4+KTxSRVNFVD4gJzxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD4nCitbPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPl0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorITxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4gfjxSRUQ+YSBhPFJFU0VUPjxHUkVFTj54IHg8UkVTRVQ+KysgPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0tIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+IT08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+XjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mJjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnx8PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PzxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD46egorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPis9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PDw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+Pj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5ePTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fD08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4seQorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPjo6PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9jcHAvcG9zdCBiL3QvdDQwMzQvY3BwL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4YzAyNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvY3BwL3Bvc3QKQEAgLTAsMCArMSwxOSBAQAorRm9vKCkgOiB4KDAmNDIpIHsgYmFyKHgpOyB9Citjb3V0PDwiSGVsbG8gV29ybGQ/XG4iPDxlbmRsOworKDEpICgtMWUxMCkgKDB4YWJjZGVmKSAneScKK1t4XSB4LT55IHgueQorIXggfnggeCsrIHgtLSB4KnkgeCZ5Cit4KnkgeC95IHgleQoreCt5IHgteQoreDw8eSB4Pj55Cit4PHkgeDw9eSB4PnkgeD49eQoreD09eSB4IT15Cit4JnkKK3heeQoreHx5Cit4JiZ5Cit4fHx5Cit4P3k6egoreD15IHgrPXkgeC09eSB4Kj15IHgvPXkgeCU9eSB4PDw9eSB4Pj49eSB4Jj15IHhePXkgeHw9eQoreCx5Cit4Ojp5CmRpZmYgLS1naXQgYS90L3Q0MDM0L2NwcC9wcmUgYi90L3Q0MDM0L2NwcC9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkNWM4YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvY3BwL3ByZQpAQCAtMCwwICsxLDE5IEBACitGb28oKTp4KDAmJjEpe30KK2NvdXQ8PCJIZWxsbyBXb3JsZCFcbiI8PGVuZGw7CisxIC0xZTEwIDB4YWJjZGVmICd4JworW2FdIGEtPmIgYS5iCishYSB+YSBhKysgYS0tIGEqYiBhJmIKK2EqYiBhL2IgYSViCithK2IgYS1iCithPDxiIGE+PmIKK2E8YiBhPD1iIGE+YiBhPj1iCithPT1iIGEhPWIKK2EmYgorYV5iCithfGIKK2EmJmIKK2F8fGIKK2E/Yjp6CithPWIgYSs9YiBhLT1iIGEqPWIgYS89YiBhJT1iIGE8PD1iIGE+Pj1iIGEmPWIgYV49YiBhfD1iCithLHkKK2E6OmIKZGlmZiAtLWdpdCBhL3QvdDQwMzQvY3NoYXJwL2V4cGVjdCBiL3QvdDQwMzQvY3NoYXJwL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQxZGQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9jc2hhcnAvZXhwZWN0CkBAIC0wLDAgKzEsMzUgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggOTEwNmQ2My4uZGQ1ZjQyMSAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMTggKzEsMTggQEA8UkVTRVQ+CitGb28oKSA6IHgoMDxSRUQ+JiYxPFJFU0VUPjxHUkVFTj4mNDI8UkVTRVQ+KSB7IDxHUkVFTj5iYXIoeCk7PFJFU0VUPiB9Citjb3V0PDwiSGVsbG8gV29ybGQ8UkVEPiE8UkVTRVQ+PEdSRUVOPj88UkVTRVQ+XG4iPDxlbmRsOworPEdSRUVOPig8UkVTRVQ+MTxHUkVFTj4pICg8UkVTRVQ+LTFlMTA8R1JFRU4+KSAoPFJFU0VUPjB4YWJjZGVmPEdSRUVOPik8UkVTRVQ+ICc8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JworWzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD5dIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tPjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKyE8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+IH48UkVEPmEgYTxSRVNFVD48R1JFRU4+eCB4PFJFU0VUPisrIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tLSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi88UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4rPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj49PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiE9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPl48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj88UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OnoKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4rPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPio9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw8PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Xj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPnw9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+LHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvY3NoYXJwL3Bvc3QgYi90L3Q0MDM0L2NzaGFycC9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNWY0MjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2NzaGFycC9wb3N0CkBAIC0wLDAgKzEsMTggQEAKK0ZvbygpIDogeCgwJjQyKSB7IGJhcih4KTsgfQorY291dDw8IkhlbGxvIFdvcmxkP1xuIjw8ZW5kbDsKKygxKSAoLTFlMTApICgweGFiY2RlZikgJ3knCitbeF0geC0+eSB4LnkKKyF4IH54IHgrKyB4LS0geCp5IHgmeQoreCp5IHgveSB4JXkKK3greSB4LXkKK3g8PHkgeD4+eQoreDx5IHg8PXkgeD55IHg+PXkKK3g9PXkgeCE9eQoreCZ5Cit4XnkKK3h8eQoreCYmeQoreHx8eQoreD95OnoKK3g9eSB4Kz15IHgtPXkgeCo9eSB4Lz15IHglPXkgeDw8PXkgeD4+PXkgeCY9eSB4Xj15IHh8PXkKK3gseQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9jc2hhcnAvcHJlIGIvdC90NDAzNC9jc2hhcnAvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMDZkNjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2NzaGFycC9wcmUKQEAgLTAsMCArMSwxOCBAQAorRm9vKCk6eCgwJiYxKXt9Citjb3V0PDwiSGVsbG8gV29ybGQhXG4iPDxlbmRsOworMSAtMWUxMCAweGFiY2RlZiAneCcKK1thXSBhLT5iIGEuYgorIWEgfmEgYSsrIGEtLSBhKmIgYSZiCithKmIgYS9iIGElYgorYStiIGEtYgorYTw8YiBhPj5iCithPGIgYTw9YiBhPmIgYT49YgorYT09YiBhIT1iCithJmIKK2FeYgorYXxiCithJiZiCithfHxiCithP2I6egorYT1iIGErPWIgYS09YiBhKj1iIGEvPWIgYSU9YiBhPDw9YiBhPj49YiBhJj1iIGFePWIgYXw9YgorYSx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L2ZvcnRyYW4vZXhwZWN0IGIvdC90NDAzNC9mb3J0cmFuL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjMzZGJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9mb3J0cmFuL2V4cGVjdApAQCAtMCwwICsxLDEwIEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IDg3ZjBkMGIuLmQzMDhkYTIgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDUgKzEsNSBAQDxSRVNFVD4KK3ByaW50ICosICJIZWxsbyBXb3JsZDxSRUQ+ITxSRVNFVD48R1JFRU4+PzxSRVNFVD4iCisKK0RPMTBJID0gMSwxMDxSRVNFVD4KKzxSRUQ+RE8xMEk8UkVTRVQ+PEdSRUVOPkRPIDEwIEk8UkVTRVQ+ID0gMSwxMAorPFJFRD5ETzEwSTxSRVNFVD48R1JFRU4+RE8gMSAwIEk8UkVTRVQ+ID0gMSwxMApkaWZmIC0tZ2l0IGEvdC90NDAzNC9mb3J0cmFuL3Bvc3QgYi90L3Q0MDM0L2ZvcnRyYW4vcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA4ZGEyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9mb3J0cmFuL3Bvc3QKQEAgLTAsMCArMSw1IEBACitwcmludCAqLCAiSGVsbG8gV29ybGQ/IgorCitETzEwSSA9IDEsMTAKK0RPIDEwIEkgPSAxLDEwCitETyAxIDAgSSA9IDEsMTAKZGlmZiAtLWdpdCBhL3QvdDQwMzQvZm9ydHJhbi9wcmUgYi90L3Q0MDM0L2ZvcnRyYW4vcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZjBkMGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2ZvcnRyYW4vcHJlCkBAIC0wLDAgKzEsNSBAQAorcHJpbnQgKiwgIkhlbGxvIFdvcmxkISIKKworRE8xMEkgPSAxLDEwCitETzEwSSA9IDEsMTAKK0RPMTBJID0gMSwxMApkaWZmIC0tZ2l0IGEvdC90NDAzNC9odG1sL2V4cGVjdCBiL3QvdDQwMzQvaHRtbC9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3YjQ5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvaHRtbC9leHBlY3QKQEAgLTAsMCArMSw4IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IDhjYTRhZWEuLjQ2OTIxZTUgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDMgKzEsMyBAQDxSRVNFVD4KKzx0YWcgPEdSRUVOPm5ld2F0dHI9Im5ld3ZhbHVlIjxSRVNFVD4+PEdSRUVOPmFkZGVkPFJFU0VUPiBjb250ZW50PC90YWc+Cis8dGFnIGF0dHI9PFJFRD4idmFsdWUiPFJFU0VUPjxHUkVFTj4ibmV3dmFsdWUiPFJFU0VUPj48UkVEPmNvbnRlbnQ8UkVTRVQ+PEdSRUVOPmNoYW5nZWQ8UkVTRVQ+PC90YWc+Cis8PFJFRD50YWc8UkVTRVQ+PEdSRUVOPm5ld3RhZzxSRVNFVD4+Y29udGVudCA8UkVEPiZlbnRpdHk7PFJFU0VUPjxHUkVFTj4mbmV3ZW50aXR5OzxSRVNFVD48PFJFRD4vdGFnPFJFU0VUPjxHUkVFTj4vbmV3dGFnPFJFU0VUPj4KZGlmZiAtLWdpdCBhL3QvdDQwMzQvaHRtbC9wb3N0IGIvdC90NDAzNC9odG1sL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5MjFlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvaHRtbC9wb3N0CkBAIC0wLDAgKzEsMyBAQAorPHRhZyBuZXdhdHRyPSJuZXd2YWx1ZSI+YWRkZWQgY29udGVudDwvdGFnPgorPHRhZyBhdHRyPSJuZXd2YWx1ZSI+Y2hhbmdlZDwvdGFnPgorPG5ld3RhZz5jb250ZW50ICZuZXdlbnRpdHk7PC9uZXd0YWc+CmRpZmYgLS1naXQgYS90L3Q0MDM0L2h0bWwvcHJlIGIvdC90NDAzNC9odG1sL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2E0YWVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9odG1sL3ByZQpAQCAtMCwwICsxLDMgQEAKKzx0YWc+Y29udGVudDwvdGFnPgorPHRhZyBhdHRyPSJ2YWx1ZSI+Y29udGVudDwvdGFnPgorPHRhZz5jb250ZW50ICZlbnRpdHk7PC90YWc+CmRpZmYgLS1naXQgYS90L3Q0MDM0L2phdmEvZXhwZWN0IGIvdC90NDAzNC9qYXZhL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2QxZWEyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9qYXZhL2V4cGVjdApAQCAtMCwwICsxLDM2IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IDIzZDVjOGEuLjdlOGMwMjYgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDE5ICsxLDE5IEBAPFJFU0VUPgorRm9vKCkgOiB4KDA8UkVEPiYmMTxSRVNFVD48R1JFRU4+JjQyPFJFU0VUPikgeyA8R1JFRU4+YmFyKHgpOzxSRVNFVD4gfQorY291dDw8IkhlbGxvIFdvcmxkPFJFRD4hPFJFU0VUPjxHUkVFTj4/PFJFU0VUPlxuIjw8ZW5kbDsKKzxHUkVFTj4oPFJFU0VUPjE8R1JFRU4+KSAoPFJFU0VUPi0xZTEwPEdSRUVOPikgKDxSRVNFVD4weGFiY2RlZjxHUkVFTj4pPFJFU0VUPiAnPFJFRD54PFJFU0VUPjxHUkVFTj55PFJFU0VUPicKK1s8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+XSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LT48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi48UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CishPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPiB+PFJFRD5hIGE8UkVTRVQ+PEdSRUVOPnggeDxSRVNFVD4rKyA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LS0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4hPTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD5ePFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiYmPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fHw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4/PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjp6Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4qPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Lz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Jj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPl49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD58PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPix5Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+Ojo8UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CmRpZmYgLS1naXQgYS90L3Q0MDM0L2phdmEvcG9zdCBiL3QvdDQwMzQvamF2YS9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOGMwMjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2phdmEvcG9zdApAQCAtMCwwICsxLDE5IEBACitGb28oKSA6IHgoMCY0MikgeyBiYXIoeCk7IH0KK2NvdXQ8PCJIZWxsbyBXb3JsZD9cbiI8PGVuZGw7CisoMSkgKC0xZTEwKSAoMHhhYmNkZWYpICd5JworW3hdIHgtPnkgeC55CisheCB+eCB4KysgeC0tIHgqeSB4JnkKK3gqeSB4L3kgeCV5Cit4K3kgeC15Cit4PDx5IHg+PnkKK3g8eSB4PD15IHg+eSB4Pj15Cit4PT15IHghPXkKK3gmeQoreF55Cit4fHkKK3gmJnkKK3h8fHkKK3g/eTp6Cit4PXkgeCs9eSB4LT15IHgqPXkgeC89eSB4JT15IHg8PD15IHg+Pj15IHgmPXkgeF49eSB4fD15Cit4LHkKK3g6OnkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvamF2YS9wcmUgYi90L3Q0MDM0L2phdmEvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDVjOGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2phdmEvcHJlCkBAIC0wLDAgKzEsMTkgQEAKK0ZvbygpOngoMCYmMSl7fQorY291dDw8IkhlbGxvIFdvcmxkIVxuIjw8ZW5kbDsKKzEgLTFlMTAgMHhhYmNkZWYgJ3gnCitbYV0gYS0+YiBhLmIKKyFhIH5hIGErKyBhLS0gYSpiIGEmYgorYSpiIGEvYiBhJWIKK2ErYiBhLWIKK2E8PGIgYT4+YgorYTxiIGE8PWIgYT5iIGE+PWIKK2E9PWIgYSE9YgorYSZiCithXmIKK2F8YgorYSYmYgorYXx8YgorYT9iOnoKK2E9YiBhKz1iIGEtPWIgYSo9YiBhLz1iIGElPWIgYTw8PWIgYT4+PWIgYSY9YiBhXj1iIGF8PWIKK2EseQorYTo6YgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9tYXRsYWIvZXhwZWN0IGIvdC90NDAzNC9tYXRsYWIvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyY2YzZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L21hdGxhYi9leHBlY3QKQEAgLTAsMCArMSwxNCBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCBkYzIwNGRiLi43MGUwNWYwIDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSw5ICsxLDkgQEA8UkVTRVQ+CisoPFJFRD4xPFJFU0VUPjxHUkVFTj4wPFJFU0VUPikgKDxSRUQ+LTFlMTA8UkVTRVQ+PEdSRUVOPi0wZTEwPFJFU0VUPikgJzxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4nOworWzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD5dIHs8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+fSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD47Cit+PFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPjsKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uKjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Li88UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPl48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi5ePFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uXDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Lic7Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LTxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD47Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+JjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JiY8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPnw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPnx8PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjsKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD48PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj08UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OworPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPj09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5+PTxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD47Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LDxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD47CmRpZmYgLS1naXQgYS90L3Q0MDM0L21hdGxhYi9wb3N0IGIvdC90NDAzNC9tYXRsYWIvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGUwNWYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9tYXRsYWIvcG9zdApAQCAtMCwwICsxLDkgQEAKKygwKSAoLTBlMTApICd5JzsKK1t4XSB7eH0geC55Oworfng7Cit4KnkgeC4qeSB4L3kgeC4veSB4XnkgeC5eeSB4Llx5IHguJzsKK3greSB4LXk7Cit4JnkgeCYmeSB4fHkgeHx8eTsKK3g8eSB4PD15IHg+eSB4Pj15OworeD09eSB4fj15OworeCx5OwpkaWZmIC0tZ2l0IGEvdC90NDAzNC9tYXRsYWIvcHJlIGIvdC90NDAzNC9tYXRsYWIvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMjA0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L21hdGxhYi9wcmUKQEAgLTAsMCArMSw5IEBACisoMSkgKC0xZTEwKSAnYic7CitbYV0ge2F9IGEuYjsKK35hOworYSpiIGEuKmIgYS9iIGEuL2IgYV5iIGEuXmIgYS5cYiBhLic7CithK2IgYS1iOworYSZiIGEmJmIgYXxiIGF8fGI7CithPGIgYTw9YiBhPmIgYT49YjsKK2E9PWIgYX49YjsKK2EsYjsKZGlmZiAtLWdpdCBhL3QvdDQwMzQvb2JqYy9leHBlY3QgYi90L3Q0MDM0L29iamMvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZDFkZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L29iamMvZXhwZWN0CkBAIC0wLDAgKzEsMzUgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggOTEwNmQ2My4uZGQ1ZjQyMSAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMTggKzEsMTggQEA8UkVTRVQ+CitGb28oKSA6IHgoMDxSRUQ+JiYxPFJFU0VUPjxHUkVFTj4mNDI8UkVTRVQ+KSB7IDxHUkVFTj5iYXIoeCk7PFJFU0VUPiB9Citjb3V0PDwiSGVsbG8gV29ybGQ8UkVEPiE8UkVTRVQ+PEdSRUVOPj88UkVTRVQ+XG4iPDxlbmRsOworPEdSRUVOPig8UkVTRVQ+MTxHUkVFTj4pICg8UkVTRVQ+LTFlMTA8R1JFRU4+KSAoPFJFU0VUPjB4YWJjZGVmPEdSRUVOPik8UkVTRVQ+ICc8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JworWzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD5dIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tPjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKyE8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+IH48UkVEPmEgYTxSRVNFVD48R1JFRU4+eCB4PFJFU0VUPisrIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tLSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi88UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4rPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj49PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiE9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPl48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj88UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OnoKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4rPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPio9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw8PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Xj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPnw9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+LHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvb2JqYy9wb3N0IGIvdC90NDAzNC9vYmpjL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ1ZjQyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvb2JqYy9wb3N0CkBAIC0wLDAgKzEsMTggQEAKK0ZvbygpIDogeCgwJjQyKSB7IGJhcih4KTsgfQorY291dDw8IkhlbGxvIFdvcmxkP1xuIjw8ZW5kbDsKKygxKSAoLTFlMTApICgweGFiY2RlZikgJ3knCitbeF0geC0+eSB4LnkKKyF4IH54IHgrKyB4LS0geCp5IHgmeQoreCp5IHgveSB4JXkKK3greSB4LXkKK3g8PHkgeD4+eQoreDx5IHg8PXkgeD55IHg+PXkKK3g9PXkgeCE9eQoreCZ5Cit4XnkKK3h8eQoreCYmeQoreHx8eQoreD95OnoKK3g9eSB4Kz15IHgtPXkgeCo9eSB4Lz15IHglPXkgeDw8PXkgeD4+PXkgeCY9eSB4Xj15IHh8PXkKK3gseQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9vYmpjL3ByZSBiL3QvdDQwMzQvb2JqYy9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwNmQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvb2JqYy9wcmUKQEAgLTAsMCArMSwxOCBAQAorRm9vKCk6eCgwJiYxKXt9Citjb3V0PDwiSGVsbG8gV29ybGQhXG4iPDxlbmRsOworMSAtMWUxMCAweGFiY2RlZiAneCcKK1thXSBhLT5iIGEuYgorIWEgfmEgYSsrIGEtLSBhKmIgYSZiCithKmIgYS9iIGElYgorYStiIGEtYgorYTw8YiBhPj5iCithPGIgYTw9YiBhPmIgYT49YgorYT09YiBhIT1iCithJmIKK2FeYgorYXxiCithJiZiCithfHxiCithP2I6egorYT1iIGErPWIgYS09YiBhKj1iIGEvPWIgYSU9YiBhPDw9YiBhPj49YiBhJj1iIGFePWIgYXw9YgorYSx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3Bhc2NhbC9leHBlY3QgYi90L3Q0MDM0L3Bhc2NhbC9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlNDIzMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcGFzY2FsL2V4cGVjdApAQCAtMCwwICsxLDM1IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IDA3NzA0NmMuLjg4NjVlNmIgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDE4ICsxLDE4IEBAPFJFU0VUPgord3JpdGVsbigiSGVsbG8gV29ybGQ8UkVEPiE8UkVTRVQ+PEdSRUVOPj88UkVTRVQ+Iik7Cis8R1JFRU4+KDxSRVNFVD4xPEdSRUVOPikgKDxSRVNFVD4tMWUxMDxHUkVFTj4pICg8UkVTRVQ+MHhhYmNkZWY8R1JFRU4+KTxSRVNFVD4gJzxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD4nCitbPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPl0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorITxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4gfjxSRUQ+YSBhPFJFU0VUPjxHUkVFTj54IHg8UkVTRVQ+KysgPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0tIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+IT08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+XjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mJjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnx8PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PzxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD46egorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPis9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PDw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+Pj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5ePTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fD08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4seQorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPjo6PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9wYXNjYWwvcG9zdCBiL3QvdDQwMzQvcGFzY2FsL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2NWU2YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcGFzY2FsL3Bvc3QKQEAgLTAsMCArMSwxOCBAQAord3JpdGVsbigiSGVsbG8gV29ybGQ/Iik7CisoMSkgKC0xZTEwKSAoMHhhYmNkZWYpICd5JworW3hdIHgtPnkgeC55CisheCB+eCB4KysgeC0tIHgqeSB4JnkKK3gqeSB4L3kgeCV5Cit4K3kgeC15Cit4PDx5IHg+PnkKK3g8eSB4PD15IHg+eSB4Pj15Cit4PT15IHghPXkKK3gmeQoreF55Cit4fHkKK3gmJnkKK3h8fHkKK3g/eTp6Cit4PXkgeCs9eSB4LT15IHgqPXkgeC89eSB4JT15IHg8PD15IHg+Pj15IHgmPXkgeF49eSB4fD15Cit4LHkKK3g6OnkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcGFzY2FsL3ByZSBiL3QvdDQwMzQvcGFzY2FsL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzcwNDZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9wYXNjYWwvcHJlCkBAIC0wLDAgKzEsMTggQEAKK3dyaXRlbG4oIkhlbGxvIFdvcmxkISIpOworMSAtMWUxMCAweGFiY2RlZiAneCcKK1thXSBhLT5iIGEuYgorIWEgfmEgYSsrIGEtLSBhKmIgYSZiCithKmIgYS9iIGElYgorYStiIGEtYgorYTw8YiBhPj5iCithPGIgYTw9YiBhPmIgYT49YgorYT09YiBhIT1iCithJmIKK2FeYgorYXxiCithJiZiCithfHxiCithP2I6egorYT1iIGErPWIgYS09YiBhKj1iIGEvPWIgYSU9YiBhPDw9YiBhPj49YiBhJj1iIGFePWIgYXw9YgorYSx5CithOjpiCmRpZmYgLS1naXQgYS90L3Q0MDM0L3BlcmwvZXhwZWN0IGIvdC90NDAzNC9wZXJsL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWRlYjZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9wZXJsL2V4cGVjdApAQCAtMCwwICsxLDEzIEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IGY2NjEwZDMuLmU4YjcyZWYgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC00LDggKzQsOCBAQDxSRVNFVD4KKworcGFja2FnZSBGcm90ejs8UkVTRVQ+CitzdWIgbmV3IHs8UkVTRVQ+CisJbXkgPEdSRUVOPig8UkVTRVQ+JGNsYXNzPEdSRUVOPiwgJW9wdHMpPFJFU0VUPiA9IDxSRUQ+c2hpZnQ8UkVTRVQ+PEdSRUVOPkBfPFJFU0VUPjsKKwlyZXR1cm4gYmxlc3MgeyA8R1JFRU4+eHl6enkgPT4gIm5pdGZvbCIsICVvcHRzPFJFU0VUPiB9LCAkY2xhc3M7Cit9PFJFU0VUPgorCitfX0VORF9fPFJFU0VUPgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9wZXJsL3Bvc3QgYi90L3Q0MDM0L3BlcmwvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGI3MmVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9wZXJsL3Bvc3QKQEAgLTAsMCArMSwyMiBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7CisKK3BhY2thZ2UgRnJvdHo7CitzdWIgbmV3IHsKKwlteSAoJGNsYXNzLCAlb3B0cykgPSBAXzsKKwlyZXR1cm4gYmxlc3MgeyB4eXp6eSA9PiAibml0Zm9sIiwgJW9wdHMgfSwgJGNsYXNzOworfQorCitfX0VORF9fCis9aGVhZDEgTkFNRQorCitmcm90eiAtIEZyb3R6CisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBmcm90ejsKKworICAkbml0Zm9sID0gbmV3IEZyb3R6KCk7CisKKz1jdXQKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcGVybC9wcmUgYi90L3Q0MDM0L3BlcmwvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NjEwZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3BlcmwvcHJlCkBAIC0wLDAgKzEsMjIgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OworCitwYWNrYWdlIEZyb3R6Oworc3ViIG5ldyB7CisJbXkgJGNsYXNzID0gc2hpZnQ7CisJcmV0dXJuIGJsZXNzIHt9LCAkY2xhc3M7Cit9CisKK19fRU5EX18KKz1oZWFkMSBOQU1FCisKK2Zyb3R6IC0gRnJvdHoKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgdXNlIGZyb3R6OworCisgICRuaXRmb2wgPSBuZXcgRnJvdHooKTsKKworPWN1dApkaWZmIC0tZ2l0IGEvdC90NDAzNC9waHAvZXhwZWN0IGIvdC90NDAzNC9waHAvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDQ0MDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3BocC9leHBlY3QKQEAgLTAsMCArMSwzNSBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCBjZjZlMDZiLi40NDIwYTQ5IDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxOCArMSwxOCBAQDxSRVNFVD4KKzxHUkVFTj4oPFJFU0VUPiR2YXI8R1JFRU4+KTxSRVNFVD4gJCB2YXIKKzw/PSJIZWxsbyBXb3JsZDxSRUQ+ITxSRVNFVD48R1JFRU4+PzxSRVNFVD4iPz4KKzxHUkVFTj4oPFJFU0VUPjE8R1JFRU4+KSAoPFJFU0VUPi0xZTEwPEdSRUVOPikgKDxSRVNFVD4weGFiY2RlZjxHUkVFTj4pPFJFU0VUPiAnPFJFRD54PFJFU0VUPjxHUkVFTj55PFJFU0VUPicKK1s8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+XSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LT48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi48UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CishPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPiB+PFJFRD5hIGE8UkVTRVQ+PEdSRUVOPnggeDxSRVNFVD4rKyA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LS0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4hPTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD5ePFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiYmPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fHw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4/PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjp6Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4qPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Lz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Jj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPl49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD58PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPix5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3BocC9wb3N0IGIvdC90NDAzNC9waHAvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDIwYTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9waHAvcG9zdApAQCAtMCwwICsxLDE4IEBACisoJHZhcikgJCB2YXIKKzw/PSJIZWxsbyBXb3JsZD8iPz4KKygxKSAoLTFlMTApICgweGFiY2RlZikgJ3knCitbeF0geC0+eSB4LnkKKyF4IH54IHgrKyB4LS0geCp5IHgmeQoreCp5IHgveSB4JXkKK3greSB4LXkKK3g8PHkgeD4+eQoreDx5IHg8PXkgeD55IHg+PXkKK3g9PXkgeCE9eQoreCZ5Cit4XnkKK3h8eQoreCYmeQoreHx8eQoreD95OnoKK3g9eSB4Kz15IHgtPXkgeCo9eSB4Lz15IHglPXkgeDw8PXkgeD4+PXkgeCY9eSB4Xj15IHh8PXkKK3gseQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9waHAvcHJlIGIvdC90NDAzNC9waHAvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNmUwNmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3BocC9wcmUKQEAgLTAsMCArMSwxOCBAQAorJHZhciAkdmFyCis8Pz0gIkhlbGxvIFdvcmxkISIgPz4KKzEgLTFlMTAgMHhhYmNkZWYgJ3gnCitbYV0gYS0+YiBhLmIKKyFhIH5hIGErKyBhLS0gYSpiIGEmYgorYSpiIGEvYiBhJWIKK2ErYiBhLWIKK2E8PGIgYT4+YgorYTxiIGE8PWIgYT5iIGE+PWIKK2E9PWIgYSE9YgorYSZiCithXmIKK2F8YgorYSYmYgorYXx8YgorYT9iOnoKK2E9YiBhKz1iIGEtPWIgYSo9YiBhLz1iIGElPWIgYTw8PWIgYT4+PWIgYSY9YiBhXj1iIGF8PWIKK2EseQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9weXRob24vZXhwZWN0IGIvdC90NDAzNC9weXRob24vZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmI4YTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3B5dGhvbi9leHBlY3QKQEAgLTAsMCArMSwzNCBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCA0MzhmNzc2Li42OGJhZjM0IDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxNyArMSwxNyBAQDxSRVNFVD4KK3ByaW50PFJFRD51PFJFU0VUPiAiSGVsbG8gV29ybGQ8UkVEPiE8UkVTRVQ+PEdSRUVOPj88UkVTRVQ+XG4iPEdSRUVOPjsgcHJpbnQ8UkVTRVQ+Cis8R1JFRU4+KDxSRVNFVD4xPEdSRUVOPikgKDxSRVNFVD4tMWUxMDxHUkVFTj4pICg8UkVTRVQ+MHhhYmNkZWY8R1JFRU4+KSB1PFJFU0VUPic8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JworWzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD5dIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tPjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKyE8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+IH48UkVEPmEgYTxSRVNFVD48R1JFRU4+eCB4PFJFU0VUPisrIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tLSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi88UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4rPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj49PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiE9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPl48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj88UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OnoKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4rPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPio9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw8PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Xj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPnw9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+LHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcHl0aG9uL3Bvc3QgYi90L3Q0MDM0L3B5dGhvbi9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YmFmMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3B5dGhvbi9wb3N0CkBAIC0wLDAgKzEsMTcgQEAKK3ByaW50ICJIZWxsbyBXb3JsZD9cbiI7IHByaW50CisoMSkgKC0xZTEwKSAoMHhhYmNkZWYpIHUneScKK1t4XSB4LT55IHgueQorIXggfnggeCsrIHgtLSB4KnkgeCZ5Cit4KnkgeC95IHgleQoreCt5IHgteQoreDw8eSB4Pj55Cit4PHkgeDw9eSB4PnkgeD49eQoreD09eSB4IT15Cit4JnkKK3heeQoreHx5Cit4JiZ5Cit4fHx5Cit4P3k6egoreD15IHgrPXkgeC09eSB4Kj15IHgvPXkgeCU9eSB4PDw9eSB4Pj49eSB4Jj15IHhePXkgeHw9eQoreCx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3B5dGhvbi9wcmUgYi90L3Q0MDM0L3B5dGhvbi9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4Zjc3NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcHl0aG9uL3ByZQpAQCAtMCwwICsxLDE3IEBACitwcmludCB1IkhlbGxvIFdvcmxkIVxuIgorMSAtMWUxMCAweGFiY2RlZiAneCcKK1thXSBhLT5iIGEuYgorIWEgfmEgYSsrIGEtLSBhKmIgYSZiCithKmIgYS9iIGElYgorYStiIGEtYgorYTw8YiBhPj5iCithPGIgYTw9YiBhPmIgYT49YgorYT09YiBhIT1iCithJmIKK2FeYgorYXxiCithJiZiCithfHxiCithP2I6egorYT1iIGErPWIgYS09YiBhKj1iIGEvPWIgYSU9YiBhPDw9YiBhPj49YiBhJj1iIGFePWIgYXw9YgorYSx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3J1YnkvZXhwZWN0IGIvdC90NDAzNC9ydWJ5L2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmUxZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9ydWJ5L2V4cGVjdApAQCAtMCwwICsxLDM0IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IDMwZWQ5YTEuLjc2NzhmMTQgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDE3ICsxLDE3IEBAPFJFU0VUPgorMTAuZG93bnRvKDEpIHt8PFJFRD54PFJFU0VUPjxHUkVFTj55PFJFU0VUPnwgcHV0cyA8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+fQorPEdSRUVOPig8UkVTRVQ+MTxHUkVFTj4pICg8UkVTRVQ+LTFlMTA8R1JFRU4+KSAoPFJFU0VUPjB4YWJjZGVmPEdSRUVOPik8UkVTRVQ+ICc8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JworWzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD5dIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tPjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKyE8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+IH48UkVEPmEgYTxSRVNFVD48R1JFRU4+eCB4PFJFU0VUPisrIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tLSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi88UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4rPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj49PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiE9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPl48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YT9iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng/eTxSRVNFVD46egorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPis9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PDw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+Pj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5ePTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fD08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4seQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9ydWJ5L3Bvc3QgYi90L3Q0MDM0L3J1YnkvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njc4ZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9ydWJ5L3Bvc3QKQEAgLTAsMCArMSwxNyBAQAorMTAuZG93bnRvKDEpIHt8eXwgcHV0cyB5fQorKDEpICgtMWUxMCkgKDB4YWJjZGVmKSAneScKK1t4XSB4LT55IHgueQorIXggfnggeCsrIHgtLSB4KnkgeCZ5Cit4KnkgeC95IHgleQoreCt5IHgteQoreDw8eSB4Pj55Cit4PHkgeDw9eSB4PnkgeD49eQoreD09eSB4IT15Cit4JnkKK3heeQoreHx5Cit4JiZ5Cit4fHx5Cit4P3k6egoreD15IHgrPXkgeC09eSB4Kj15IHgvPXkgeCU9eSB4PDw9eSB4Pj49eSB4Jj15IHhePXkgeHw9eQoreCx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3J1YnkvcHJlIGIvdC90NDAzNC9ydWJ5L3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGVkOWExCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9ydWJ5L3ByZQpAQCAtMCwwICsxLDE3IEBACisxMC5kb3dudG8oMSkge3x4fCBwdXRzIHh9CisxIC0xZTEwIDB4YWJjZGVmICd4JworW2FdIGEtPmIgYS5iCishYSB+YSBhKysgYS0tIGEqYiBhJmIKK2EqYiBhL2IgYSViCithK2IgYS1iCithPDxiIGE+PmIKK2E8YiBhPD1iIGE+YiBhPj1iCithPT1iIGEhPWIKK2EmYgorYV5iCithfGIKK2EmJmIKK2F8fGIKK2E/Yjp6CithPWIgYSs9YiBhLT1iIGEqPWIgYS89YiBhJT1iIGE8PD1iIGE+Pj1iIGEmPWIgYV49YiBhfD1iCithLHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvdGV4L2V4cGVjdCBiL3QvdDQwMzQvdGV4L2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDQ5NjliCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC90ZXgvZXhwZWN0CkBAIC0wLDAgKzEsOSBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCAyYjJkZmNiLi42NWNhYjYxIDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSw0ICsxLDQgQEA8UkVTRVQ+Citcc2VjdGlvbntTb21ldGhpbmcgPEdSRUVOPm5ldzxSRVNFVD59Cis8UkVEPlxlbXBoPFJFU0VUPjxHUkVFTj5cdGV4dGJmPFJFU0VUPntNYWNybyBzdHlsZX0KK3s8UkVEPlxlbTxSRVNFVD48R1JFRU4+XGJmc2VyaWVzPFJFU0VUPiBTdGF0ZSB0b2dnbGUgc3R5bGV9CitcXFs8UkVEPjFlbTxSRVNFVD48R1JFRU4+MWNtPFJFU0VUPl0KZGlmZiAtLWdpdCBhL3QvdDQwMzQvdGV4L3Bvc3QgYi90L3Q0MDM0L3RleC9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1Y2FiNjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3RleC9wb3N0CkBAIC0wLDAgKzEsNCBAQAorXHNlY3Rpb257U29tZXRoaW5nIG5ld30KK1x0ZXh0YmZ7TWFjcm8gc3R5bGV9Cit7XGJmc2VyaWVzIFN0YXRlIHRvZ2dsZSBzdHlsZX0KK1xcWzFjbV0KZGlmZiAtLWdpdCBhL3QvdDQwMzQvdGV4L3ByZSBiL3QvdDQwMzQvdGV4L3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjJkZmNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC90ZXgvcHJlCkBAIC0wLDAgKzEsNCBAQAorXHNlY3Rpb257U29tZXRoaW5nfQorXGVtcGh7TWFjcm8gc3R5bGV9Cit7XGVtIFN0YXRlIHRvZ2dsZSBzdHlsZX0KK1xcWzFlbV0KZGlmZiAtLWdpdCBhL3QvdDQwMzUtZGlmZi1xdWlldC5zaCBiL3QvdDQwMzUtZGlmZi1xdWlldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMzE0MTJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNS1kaWZmLXF1aWV0LnNoCkBAIC0wLDAgKzEsMTUxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nUmV0dXJuIHZhbHVlIG9mIGRpZmZzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIDEgPmEgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisJZWNobyAyID5iICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKwlta2RpciAtcCB0ZXN0LW91dHNpZGUvcmVwbyAmJiAoCisJCWNkIHRlc3Qtb3V0c2lkZS9yZXBvICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIjEgMSIgPmEgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW0gMQorCSkgJiYKKwlta2RpciAtcCB0ZXN0LW91dHNpZGUvbm9uL2dpdCAmJiAoCisJCWNkIHRlc3Qtb3V0c2lkZS9ub24vZ2l0ICYmCisJCWVjaG8gIjEgMSIgPmEgJiYKKwkJZWNobyAiMSAxIiA+bWF0Y2hpbmctZmlsZSAmJgorCQllY2hvICIxIDEgIiA+dHJhaWxpbmctc3BhY2UgJiYKKwkJZWNobyAiMSAgIDEiID5leHRyYS1zcGFjZSAmJgorCQllY2hvICIyIiA+bmV2ZXItbWF0Y2gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRF4gSEVBRCcgJworCWdpdCBkaWZmLXRyZWUgLS1xdWlldCBIRUFEXiBIRUFEID5jbnQKKwl0ZXN0ICQ/ID0gMSAmJiB0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEXiBIRUFEIC0tIGEnICcKKwlnaXQgZGlmZi10cmVlIC0tcXVpZXQgSEVBRF4gSEVBRCAtLSBhID5jbnQKKwl0ZXN0ICQ/ID0gMCAmJiB0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEXiBIRUFEIC0tIGInICcKKwlnaXQgZGlmZi10cmVlIC0tcXVpZXQgSEVBRF4gSEVBRCAtLSBiID5jbnQKKwl0ZXN0ICQ/ID0gMSAmJiB0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorJworIyB0aGlzIGRpZmYgb3V0cHV0cyBvbmUgbGluZTogc2hhMSBvZiB0aGUgZ2l2ZW4gaGVhZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWNobyBIRUFEIHwgZ2l0IGRpZmYtdHJlZSAtLXN0ZGluJyAnCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRCkgfCBnaXQgZGlmZi10cmVlIC0tcXVpZXQgLS1zdGRpbiA+Y250CisJdGVzdCAkPyA9IDEgJiYgdGVzdF9saW5lX2NvdW50ID0gMSBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRCBIRUFEJyAnCisJZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IEhFQUQgSEVBRCA+Y250CisJdGVzdCAkPyA9IDAgJiYgdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzJyAnCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCA+Y250CisJdGVzdCAkPyA9IDAgJiYgdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQnICcKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgPmNudAorCXRlc3QgJD8gPSAwICYmIHRlc3RfbGluZV9jb3VudCA9IDAgY250CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEXicgJworCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRF4gPmNudAorCXRlc3QgJD8gPSAxICYmIHRlc3RfbGluZV9jb3VudCA9IDAgY250CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEXicgJworCWVjaG8gdGV4dCA+PmIgJiYKKwllY2hvIDMgPmMgJiYKKwlnaXQgYWRkIC4gJiYgeworCQlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUReID5jbnQKKwkJdGVzdCAkPyA9IDEgJiYgdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKwl9CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIC1TdGV4dCBIRUFEXiBIRUFEIC0tIGInICcKKwlnaXQgY29tbWl0IC1tICJ0ZXh0IGluIGIiICYmIHsKKwkJZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IC1TdGV4dCBIRUFEXiBIRUFEIC0tIGIgPmNudAorCQl0ZXN0ICQ/ID0gMSAmJiB0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorCX0KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgLVNub3QtZm91bmQgSEVBRF4gSEVBRCAtLSBiJyAnCisJZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IC1Tbm90LWZvdW5kIEhFQUReIEhFQUQgLS0gYiA+Y250CisJdGVzdCAkPyA9IDAgJiYgdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzJyAnCisJZWNobyAzID4+YyAmJiB7CisJCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgPmNudAorCQl0ZXN0ICQ/ID0gMSAmJiB0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorCX0KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQnICcKKwlnaXQgdXBkYXRlLWluZGV4IGMgJiYgeworCQlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgPmNudAorCQl0ZXN0ICQ/ID0gMSAmJiB0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYsIG9uZSBmaWxlIG91dHNpZGUgcmVwbycgJworCSgKKwkJY2QgdGVzdC1vdXRzaWRlL3JlcG8gJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tcXVpZXQgYSAuLi9ub24vZ2l0L21hdGNoaW5nLWZpbGUgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tcXVpZXQgYSAuLi9ub24vZ2l0L2V4dHJhLXNwYWNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiwgYm90aCBmaWxlcyBvdXRzaWRlIHJlcG8nICcKKwkoCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfRElSRUNUT1JZL3Rlc3Qtb3V0c2lkZSIgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisJCWNkIHRlc3Qtb3V0c2lkZS9ub24vZ2l0ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZiAtLXF1aWV0IGEgbWF0Y2hpbmctZmlsZSAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1xdWlldCBhIGV4dHJhLXNwYWNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wsIG9uZSBmaWxlIG91dHNpZGUgcmVwbycgJworCSgKKwkJY2QgdGVzdC1vdXRzaWRlL3JlcG8gJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tcXVpZXQgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIGEgLi4vbm9uL2dpdC90cmFpbGluZy1zcGFjZSAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1xdWlldCAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgYSAuLi9ub24vZ2l0L2V4dHJhLXNwYWNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wsIGJvdGggZmlsZXMgb3V0c2lkZSByZXBvJyAnCisJKAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX0RJUkVDVE9SWS90ZXN0LW91dHNpZGUiICYmCisJCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyAmJgorCQljZCB0ZXN0LW91dHNpZGUvbm9uL2dpdCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYgLS1xdWlldCAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgYSB0cmFpbGluZy1zcGFjZSAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1xdWlldCAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgYSBleHRyYS1zcGFjZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1pZ25vcmUtYWxsLXNwYWNlLCBvbmUgZmlsZSBvdXRzaWRlIHJlcG8nICcKKwkoCisJCWNkIHRlc3Qtb3V0c2lkZS9yZXBvICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZiAtLXF1aWV0IC0taWdub3JlLWFsbC1zcGFjZSBhIC4uL25vbi9naXQvdHJhaWxpbmctc3BhY2UgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tcXVpZXQgLS1pZ25vcmUtYWxsLXNwYWNlIGEgLi4vbm9uL2dpdC9leHRyYS1zcGFjZSAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1xdWlldCAtLWlnbm9yZS1hbGwtc3BhY2UgYSAuLi9ub24vZ2l0L25ldmVyLW1hdGNoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLWlnbm9yZS1hbGwtc3BhY2UsIGJvdGggZmlsZXMgb3V0c2lkZSByZXBvJyAnCisJKAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX0RJUkVDVE9SWS90ZXN0LW91dHNpZGUiICYmCisJCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyAmJgorCQljZCB0ZXN0LW91dHNpZGUvbm9uL2dpdCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYgLS1xdWlldCAtLWlnbm9yZS1hbGwtc3BhY2UgYSB0cmFpbGluZy1zcGFjZSAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYgLS1xdWlldCAtLWlnbm9yZS1hbGwtc3BhY2UgYSBleHRyYS1zcGFjZSAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1xdWlldCAtLWlnbm9yZS1hbGwtc3BhY2UgYSBuZXZlci1tYXRjaAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDM2LWZvcm1hdC1wYXRjaC1zaWduZXItbWltZS5zaCBiL3QvdDQwMzYtZm9ybWF0LXBhdGNoLXNpZ25lci1taW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJhNDNmMTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM2LWZvcm1hdC1wYXRjaC1zaWduZXItbWltZS5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZm9ybWF0LXBhdGNoIC1zIHNob3VsZCBmb3JjZSBNSU1FIGVuY29kaW5nIGFzIG5lZWRlZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPkYgJiYKKwlnaXQgYWRkIEYgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIG5ldyBsaW5lID5GICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJUaGlzIGFkZHMgc29tZSBsaW5lcyB0byBGIiBGCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0IG5vcm1hbGx5JyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5vdXRwdXQgJiYKKwkhIGdyZXAgQ29udGVudC1UeXBlIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCB3aXRoIHNpZ25vZmYgd2l0aG91dCBmdW5ueSBzaWduZXIgbmFtZScgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtcyAtLXN0ZG91dCAtMSA+b3V0cHV0ICYmCisJISBncmVwIENvbnRlbnQtVHlwZSBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQgd2l0aCBub24gQVNDSUkgc2lnbmVyIG5hbWUnICcKKworCUdJVF9DT01NSVRURVJfTkFNRT0i44Gv44G+44GuIOOBteOBq+OBiuOBhiIgXAorCWdpdCBmb3JtYXQtcGF0Y2ggLXMgLS1zdGRvdXQgLTEgPm91dHB1dCAmJgorCWdyZXAgQ29udGVudC1UeXBlIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dGFjaCBhbmQgc2lnbm9mZiBkbyBub3QgZHVwbGljYXRlIG1pbWUgaGVhZGVycycgJworCisJR0lUX0NPTU1JVFRFUl9OQU1FPSLjga/jgb7jga4g44G144Gr44GK44GGIiBcCisJZ2l0IGZvcm1hdC1wYXRjaCAtcyAtLXN0ZG91dCAtMSAtLWF0dGFjaCA+b3V0cHV0ICYmCisJdGVzdCBgZ3JlcCAtY2kgXk1JTUUtVmVyc2lvbjogb3V0cHV0YCA9IDEKKworJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90NDAzNy1kaWZmLXItdC1kaXJzLnNoIGIvdC90NDAzNy1kaWZmLXItdC1kaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1Y2UzYjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM3LWRpZmYtci10LWRpcnMuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLXIgLXQgc2hvd3MgZGlyZWN0b3J5IGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgZGMgZHIgZHQgJiYKKwk+ZGMvMSAmJgorCT5kci8yICYmCisJPmR0LzMgJiYKKwk+ZmMgJiYKKwk+ZnIgJiYKKwk+ZnQgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCXJtIC1mciBkdCBkciBmdCBmciAmJgorCW1rZGlyIGRhIGZ0ICYmCisJZm9yIHAgaW4gZGMvMSBkYS80IGR0IGZ0LzUgZmMKKwlkbworCQllY2hvIGhlbGxvID4kcCB8fCBleGl0CisJZG9uZSAmJgorCWdpdCBhZGQgLXUgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0EJZGEKK0EJZGEvNAorTQlkYworTQlkYy8xCitECWRyCitECWRyLzIKK0EJZHQKK0QJZHQKK0QJZHQvMworTQlmYworRAlmcgorRAlmdAorQQlmdAorQQlmdC81CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyB2ZXJpZnkgJworCWdpdCBkaWZmLXRyZWUgLXIgLXQgLS1uYW1lLXN0YXR1cyBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoIGIvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwMjc3YzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM4LWRpZmYtY29tYmluZWQuc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvbWJpbmVkIGRpZmYnCisKKy4gLi90ZXN0LWxpYi5zaAorCitzZXR1cF9oZWxwZXIgKCkgeworCW9uZT0kMSBicmFuY2g9JDIgc2lkZT0kMyAmJgorCisJZ2l0IGJyYW5jaCAkc2lkZSAkYnJhbmNoICYmCisJZm9yIGwgaW4gJG9uZSB0d28gdGhyZWUgZnlyYQorCWRvCisJCWVjaG8gJGwKKwlkb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAkYnJhbmNoICYmCisJZ2l0IGNoZWNrb3V0ICRzaWRlICYmCisJZm9yIGwgaW4gJG9uZSB0d28gdGhyZWUgcXVhdHJvCisJZG8KKwkJZWNobyAkbAorCWRvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICRzaWRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlICRicmFuY2ggJiYKKwlmb3IgbCBpbiAkb25lIHRocmVlIGZvdXIKKwlkbworCQllY2hvICRsCisJZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIm1lcmdlICRicmFuY2ggaW50byAkc2lkZSIKK30KKwordmVyaWZ5X2hlbHBlciAoKSB7CisJaXQ9JDEgJiYKKworCSMgSWdub3JlIGxpbmVzIHRoYXQgd2VyZSByZW1vdmVkIG9ubHkgZnJvbSB0aGUgb3RoZXIgcGFyZW50CisJc2VkIC1lICcKKwkJMSwvXkBAQC9kCisJCS9eIC0vZAorCQlzL15cKC5cKS4vXDEvCisJJyAiJGl0IiA+IiRpdC5hY3R1YWwuMSIgJiYKKwlzZWQgLWUgJworCQkxLC9eQEBAL2QKKwkJL14tIC9kCisJCXMvXi5cKC5cKS9cMS8KKwknICIkaXQiID4iJGl0LmFjdHVhbC4yIiAmJgorCisJZ2l0IGRpZmYgIiRpdF4iICIkaXQiIC0tIHwgc2VkIC1lICcxLC9eQEAvZCcgPiIkaXQuZXhwZWN0LjEiICYmCisJdGVzdF9jbXAgIiRpdC5leHBlY3QuMSIgIiRpdC5hY3R1YWwuMSIgJiYKKworCWdpdCBkaWZmICIkaXReMiIgIiRpdCIgLS0gfCBzZWQgLWUgJzEsL15AQC9kJyA+IiRpdC5leHBlY3QuMiIgJiYKKwl0ZXN0X2NtcCAiJGl0LmV4cGVjdC4yIiAiJGl0LmFjdHVhbC4yIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCB3aXRob25lICYmCisJZ2l0IGJyYW5jaCBzYW5zb25lICYmCisKKwlnaXQgY2hlY2tvdXQgd2l0aG9uZSAmJgorCXNldHVwX2hlbHBlciBvbmUgd2l0aG9uZSBzaWRld2l0aG9uZSAmJgorCisJZ2l0IGNoZWNrb3V0IHNhbnNvbmUgJiYKKwlzZXR1cF9oZWxwZXIgIiIgc2Fuc29uZSBzaWRlc2Fuc29uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjb21iaW5lZCBvdXRwdXQgKDEpJyAnCisJZ2l0IHNob3cgc2lkZXdpdGhvbmUgLS0gPnNpZGV3aXRob25lICYmCisJdmVyaWZ5X2hlbHBlciBzaWRld2l0aG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjb21iaW5lZCBvdXRwdXQgKDIpJyAnCisJZ2l0IHNob3cgc2lkZXNhbnNvbmUgLS0gPnNpZGVzYW5zb25lICYmCisJdmVyaWZ5X2hlbHBlciBzaWRlc2Fuc29uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWFnbm9zZSB0cnVuY2F0ZWQgZmlsZScgJworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1DIEhFQUQgJiYKKwlnaXQgc2hvdyA+b3V0ICYmCisJZ3JlcCAiZGlmZiAtLWNjIGZpbGUiIG91dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoIGIvdC90NDAzOS1kaWZmLWFzc3VtZS11bmNoYW5nZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWQ5NDk4YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIHdpdGggYXNzdW1lLXVuY2hhbmdlZCBlbnRyaWVzJworCisuIC4vdGVzdC1saWIuc2gKKworIyBleHRlcm5hbCBkaWZmIGhhcyBiZWVuIHRlc3RlZCBpbiB0NDAyMC1kaWZmLWV4dGVybmFsLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyB6ZXJvID4gemVybyAmJgorCWdpdCBhZGQgemVybyAmJgorCWdpdCBjb21taXQgLW0gemVybyAmJgorCWVjaG8gb25lID4gb25lICYmCisJZWNobyB0d28gPiB0d28gJiYKKwlnaXQgYWRkIG9uZSB0d28gJiYKKwlnaXQgY29tbWl0IC1tIG9uZXR3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hc3N1bWUtdW5jaGFuZ2VkIG9uZSAmJgorCWVjaG8gYm9ya2VkID4+IG9uZSAmJgorCXRlc3QgIiQoZ2l0IGxzLWZpbGVzIC12IG9uZSkiID0gImggb25lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IGRvZXMgbm90IGV4YW1pbmUgYXNzdW1lLXVuY2hhbmdlZCBlbnRyaWVzJyAnCisJZ2l0IGRpZmYtaW5kZXggSEVBRF4gLS0gb25lIHwgZ3JlcCAtcSA1NjI2YWJmMGY3MmU1OGQ3YTE1MzM2OGJhNTdkYjRjNjczYzBlMTcxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgZG9lcyBub3QgZXhhbWluZSBhc3N1bWUtdW5jaGFuZ2VkIGVudHJpZXMnICcKKwlybSBvbmUgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWZpbGVzIC0tIG9uZSkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA0MC13aGl0ZXNwYWNlLXN0YXR1cy5zaCBiL3QvdDQwNDAtd2hpdGVzcGFjZS1zdGF0dXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2M3MjhhMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNDAtd2hpdGVzcGFjZS1zdGF0dXMuc2gKQEAgLTAsMCArMSw3NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLS1leGl0LWNvZGUgd2l0aCB3aGl0ZXNwYWNlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGEgYiAmJgorCWVjaG8gPmMgJiYKKwllY2hvID5hL2QgJiYKKwllY2hvID5iL2UgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvICIgIiA+YS9kICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKwllY2hvICIgICIgPmEvZCAmJgorCWVjaG8gIiAiID5iL2UgJiYKKwlnaXQgYWRkIGEvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLS1leGl0LWNvZGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXiBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAtYiAtLWV4aXQtY29kZScgJworCWdpdCBkaWZmIC1iIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQgJiYKKwlnaXQgZGlmZi10cmVlIC1iIC1wIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQgJiYKKwlnaXQgZGlmZi10cmVlIC1iIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtLWNhY2hlZCAtLWV4aXQtY29kZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLWIgLXAgLS1jYWNoZWQgLS1leGl0LWNvZGUnICcKKwlnaXQgZGlmZiAtYiAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFEICYmCisJZ2l0IGRpZmYtaW5kZXggLWIgLXAgLS1jYWNoZWQgLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IC0tZXhpdC1jb2RlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtYiAtcCAtLWV4aXQtY29kZScgJworCWdpdCBkaWZmIC1iIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwlnaXQgZGlmZi1pbmRleCAtYiAtcCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgLS1leGl0LWNvZGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgLWIgLXAgLS1leGl0LWNvZGUnICcKKwlnaXQgZGlmZiAtYiAtLWV4aXQtY29kZSAmJgorCWdpdCBkaWZmLWZpbGVzIC1iIC1wIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgLS1kaWZmLWZpbHRlciAtLXF1aWV0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGEvZCAmJgorCWVjaG8geCA+PmIvZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tZGlmZi1maWx0ZXI9TSAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAtLWRpZmYtZmlsdGVyIC0tcXVpZXQnICcKKwlnaXQgY29tbWl0IC1hIC1tICJ3b3JrdHJlZSBzdGF0ZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC0tZGlmZi1maWx0ZXI9TSAtLXF1aWV0IEhFQUReIEhFQUQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLW9wdGlvbi5zaCBiL3QvdDQwNDEtZGlmZi1zdWJtb2R1bGUtb3B0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjMDFkMGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLW9wdGlvbi5zaApAQCAtMCwwICsxLDQ5NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBKZW5zIExlaG1hbm4sIGJhc2VkIG9uIHQ3NDAxIGJ5IFBpbmcgWWluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1N1cHBvcnQgZm9yIHZlcmJvc2Ugc3VibW9kdWxlIGRpZmZlcmVuY2VzIGluIGdpdCBkaWZmCisKK1RoaXMgdGVzdCB0cmllcyB0byB2ZXJpZnkgdGhlIHNhbml0eSBvZiB0aGUgLS1zdWJtb2R1bGUgb3B0aW9uIG9mIGdpdCBkaWZmLgorJworCisuIC4vdGVzdC1saWIuc2gKKworYWRkX2ZpbGUgKCkgeworCXNtPSQxCisJc2hpZnQKKwlvd2Q9JChwd2QpCisJY2QgIiRzbSIKKwlmb3IgbmFtZTsgZG8KKwkJZWNobyAiJG5hbWUiID4gIiRuYW1lIiAmJgorCQlnaXQgYWRkICIkbmFtZSIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCAkbmFtZSIKKwlkb25lID4vZGV2L251bGwKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgfCBjdXQgLWMxLTcKKwljZCAiJG93ZCIKK30KK2NvbW1pdF9maWxlICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0ICIkQCIgLW0gIkNvbW1pdCAkKiIgPi9kZXYvbnVsbAorfQorCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMSAmJgorYWRkX2ZpbGUgLiBmb28gPi9kZXYvbnVsbAorCitoZWFkMT0kKGFkZF9maWxlIHNtMSBmb28xIGZvbzIpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGVkIHN1Ym1vZHVsZScgIgorCWdpdCBhZGQgc20xICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCitTdWJtb2R1bGUgc20xIDAwMDAwMDAuLi4kaGVhZDEgKG5ldyBzdWJtb2R1bGUpCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY29tbWl0X2ZpbGUgc20xICYmCitoZWFkMj0kKGFkZF9maWxlIHNtMSBmb28zKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCknICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK1N1Ym1vZHVsZSBzbTEgJGhlYWQxLi4kaGVhZDI6CisgID4gQWRkIGZvbzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCknICIKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1sb2cgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCitTdWJtb2R1bGUgc20xICRoZWFkMS4uJGhlYWQyOgorICA+IEFkZCBmb28zCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGZvcndhcmQpIC0tc3VibW9kdWxlJyAiCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGUgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCitTdWJtb2R1bGUgc20xICRoZWFkMS4uJGhlYWQyOgorICA+IEFkZCBmb28zCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworZnVsbGhlYWQxPSQoY2Qgc20xOyBnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSAkaGVhZDEpCitmdWxsaGVhZDI9JChjZCBzbTE7IGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xICRoZWFkMikKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShmb3J3YXJkKSAtLXN1Ym1vZHVsZT1zaG9ydCcgIgorCWdpdCBkaWZmIC0tc3VibW9kdWxlPXNob3J0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQoraW5kZXggJGhlYWQxLi4kaGVhZDIgMTYwMDAwCistLS0gYS9zbTEKKysrKyBiL3NtMQorQEAgLTEgKzEgQEAKKy1TdWJwcm9qZWN0IGNvbW1pdCAkZnVsbGhlYWQxCisrU3VicHJvamVjdCBjb21taXQgJGZ1bGxoZWFkMgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NvbW1pdF9maWxlIHNtMSAmJgoraGVhZDM9JCgKKwljZCBzbTEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MiA+L2Rldi9udWxsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIHwgY3V0IC1jMS03CispCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShiYWNrd2FyZCknICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK1N1Ym1vZHVsZSBzbTEgJGhlYWQyLi4kaGVhZDMgKHJld2luZCk6CisgIDwgQWRkIGZvbzMKKyAgPCBBZGQgZm9vMgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2hlYWQ0PSQoYWRkX2ZpbGUgc20xIGZvbzQgZm9vNSkgJiYKK2hlYWQ0X2Z1bGw9JChHSVRfRElSPXNtMS8uZ2l0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShiYWNrd2FyZCBhbmQgZm9yd2FyZCknICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK1N1Ym1vZHVsZSBzbTEgJGhlYWQyLi4uJGhlYWQ0OgorICA+IEFkZCBmb281CisgID4gQWRkIGZvbzQKKyAgPCBBZGQgZm9vMworICA8IEFkZCBmb28yCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY29tbWl0X2ZpbGUgc20xICYmCittdiBzbTEgc20xLWJhayAmJgorZWNobyBzbTEgPnNtMSAmJgoraGVhZDU9JChnaXQgaGFzaC1vYmplY3Qgc20xIHwgY3V0IC1jMS03KSAmJgorZ2l0IGFkZCBzbTEgJiYKK3JtIC1mIHNtMSAmJgorbXYgc20xLWJhayBzbTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiksIC0tY2FjaGVkJyAiCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGU9bG9nIC0tY2FjaGVkID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorU3VibW9kdWxlIHNtMSA0MWZiZWE5Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCitkaWZmIC0tZ2l0IGEvc20xIGIvc20xCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOWRhNWZiOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc20xCitAQCAtMCwwICsxIEBACisrc20xCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiknICIKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1sb2cgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCitkaWZmIC0tZ2l0IGEvc20xIGIvc20xCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDlkYTVmYjguLjAwMDAwMDAKKy0tLSBhL3NtMQorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLXNtMQorU3VibW9kdWxlIHNtMSAwMDAwMDAwLi4uJGhlYWQ0IChuZXcgc3VibW9kdWxlKQorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3JtIC1yZiBzbTEgJiYKK2dpdCBjaGVja291dC1pbmRleCBzbTEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShzdWJtb2R1bGUtPmJsb2IpJyAiCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCitTdWJtb2R1bGUgc20xICRoZWFkNC4uLjAwMDAwMDAgKHN1Ym1vZHVsZSBkZWxldGVkKQorZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLiRoZWFkNQorLS0tIC9kZXYvbnVsbAorKysrIGIvc20xCitAQCAtMCwwICsxIEBACisrc20xCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworcm0gLWYgc20xICYmCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMSAmJgoraGVhZDY9JChhZGRfZmlsZSBzbTEgZm9vNiBmb283KQorZnVsbGhlYWQ2PSQoY2Qgc20xOyBnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSAkaGVhZDYpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGVudCBjb21taXQnICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ0Li4uJGhlYWQ2IChjb21taXRzIG5vdCBwcmVzZW50KQorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NvbW1pdF9maWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoYmxvYi0+c3VibW9kdWxlKScgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAkaGVhZDUuLjAwMDAwMDAKKy0tLSBhL3NtMQorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLXNtMQorU3VibW9kdWxlIHNtMSAwMDAwMDAwLi4uJGhlYWQ2IChuZXcgc3VibW9kdWxlKQorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NvbW1pdF9maWxlIHNtMSAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGlzIHVwIHRvIGRhdGUnICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQnICIKKwllY2hvIG5ldyA+IHNtMS9uZXctZmlsZSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorU3VibW9kdWxlIHNtMSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudAorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAodW50cmFja2VkIGlnbm9yZWQpJyAiCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50IChkaXJ0eSBpZ25vcmVkKScgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50IChhbGwgaWdub3JlZCknICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWFsbCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJISB0ZXN0IC1zIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQnICIKKwllY2hvIG5ldyA+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCitTdWJtb2R1bGUgc20xIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50CitTdWJtb2R1bGUgc20xIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnQKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQgKHVudHJhY2tlZCBpZ25vcmVkKScgIgorCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK1N1Ym1vZHVsZSBzbTEgY29udGFpbnMgbW9kaWZpZWQgY29udGVudAorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICIKKwllY2hvIG5ldyA+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJISB0ZXN0IC1zIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQgKGFsbCBpZ25vcmVkKScgIgorCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwkhIHRlc3QgLXMgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyBtb2RpZmVkIGNvbnRlbnQnICIKKwlybSAtZiBzbTEvbmV3LWZpbGUgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK1N1Ym1vZHVsZSBzbTEgY29udGFpbnMgbW9kaWZpZWQgY29udGVudAorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKKyhjZCBzbTE7IGdpdCBjb21taXQgLW1jaGFuZ2UgZm9vNiA+L2Rldi9udWxsKSAmJgoraGVhZDg9JChjZCBzbTE7IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCB8IGN1dCAtYzEtNykgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpcyBtb2RpZmllZCcgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKyAgPiBjaGFuZ2UKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQnICIKKwllY2hvIG5ldyA+IHNtMS9uZXctZmlsZSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorU3VibW9kdWxlIHNtMSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudAorU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKyAgPiBjaGFuZ2UKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQgKHVudHJhY2tlZCBpZ25vcmVkKScgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKyAgPiBjaGFuZ2UKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQgKGRpcnR5IGlnbm9yZWQpJyAiCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDg6CisgID4gY2hhbmdlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50IChhbGwgaWdub3JlZCknICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWFsbCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJISB0ZXN0IC1zIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQnICIKKwllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorU3VibW9kdWxlIHNtMSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudAorU3VibW9kdWxlIHNtMSBjb250YWlucyBtb2RpZmllZCBjb250ZW50CitTdWJtb2R1bGUgc20xICRoZWFkNi4uJGhlYWQ4OgorICA+IGNoYW5nZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAodW50cmFja2VkIGlnbm9yZWQpJyAiCisJZWNobyBtb2RpZmljYXRpb24gPj4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK1N1Ym1vZHVsZSBzbTEgY29udGFpbnMgbW9kaWZpZWQgY29udGVudAorU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKyAgPiBjaGFuZ2UKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQgKGRpcnR5IGlnbm9yZWQpJyAiCisJZWNobyBtb2RpZmljYXRpb24gPj4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKyAgPiBjaGFuZ2UKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQgKGFsbCBpZ25vcmVkKScgIgorCWVjaG8gbW9kaWZpY2F0aW9uID4+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcyAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJISB0ZXN0IC1zIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZlZCBjb250ZW50JyAiCisJcm0gLWYgc20xL25ldy1maWxlICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCitTdWJtb2R1bGUgc20xIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnQKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDg6CisgID4gY2hhbmdlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworcm0gLXJmIHNtMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlZCBzdWJtb2R1bGUnICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9jcmVhdGVfcmVwbyBzbTIgJiYKK2hlYWQ3PSQoYWRkX2ZpbGUgc20yIGZvbzggZm9vOSkgJiYKK2dpdCBhZGQgc20yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIHN1Ym1vZHVsZXMnICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKK1N1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCitTdWJtb2R1bGUgc20yIDAwMDAwMDAuLi4kaGVhZDcgKG5ldyBzdWJtb2R1bGUpCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aCBmaWx0ZXInICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCBzbTIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCitTdWJtb2R1bGUgc20yIDAwMDAwMDAuLi4kaGVhZDcgKG5ldyBzdWJtb2R1bGUpCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY29tbWl0X2ZpbGUgc20yCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZlbiBjb21taXQnICIKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRF4gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCitTdWJtb2R1bGUgc20xICRoZWFkNi4uLjAwMDAwMDAgKHN1Ym1vZHVsZSBkZWxldGVkKQorU3VibW9kdWxlIHNtMiAwMDAwMDAwLi4uJGhlYWQ3IChuZXcgc3VibW9kdWxlKQorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmVuIGNvbW1pdCAtLXN1Ym1vZHVsZScgIgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlIEhFQUReID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorU3VibW9kdWxlIHNtMSAkaGVhZDYuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKK1N1Ym1vZHVsZSBzbTIgMDAwMDAwMC4uLiRoZWFkNyAobmV3IHN1Ym1vZHVsZSkKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCitmdWxsaGVhZDc9JChjZCBzbTI7IGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xICRoZWFkNykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2ZW4gY29tbWl0IC0tc3VibW9kdWxlPXNob3J0JyAiCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9c2hvcnQgSEVBRF4gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCitkaWZmIC0tZ2l0IGEvc20xIGIvc20xCitkZWxldGVkIGZpbGUgbW9kZSAxNjAwMDAKK2luZGV4ICRoZWFkNi4uMDAwMDAwMAorLS0tIGEvc20xCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistU3VicHJvamVjdCBjb21taXQgJGZ1bGxoZWFkNgorZGlmZiAtLWdpdCBhL3NtMiBiL3NtMgorbmV3IGZpbGUgbW9kZSAxNjAwMDAKK2luZGV4IDAwMDAwMDAuLiRoZWFkNworLS0tIC9kZXYvbnVsbAorKysrIGIvc20yCitAQCAtMCwwICsxIEBACisrU3VicHJvamVjdCBjb21taXQgJGZ1bGxoZWFkNworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC5naXQgZmlsZSBmb3Igc20yJyAnCisJKGNkIHNtMiAmJgorCSBSRUFMPSIkKHB3ZCkvLi4vLnJlYWwiICYmCisJIG12IC5naXQgIiRSRUFMIgorCSBlY2hvICJnaXRkaXI6ICRSRUFMIiA+LmdpdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXN1Ym1vZHVsZSB3aXRoIC5naXQgZmlsZScgJworCWdpdCBkaWZmIC0tc3VibW9kdWxlIEhFQUReID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorU3VibW9kdWxlIHNtMSAkaGVhZDYuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKK1N1Ym1vZHVsZSBzbTIgMDAwMDAwMC4uLiRoZWFkNyAobmV3IHN1Ym1vZHVsZSkKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tc3VibW9kdWxlIHdpdGggb2JqZWN0cyByZWZlcmVuY2VkIGJ5IGFsdGVybmF0ZXMnICcKKwlta2RpciBzdWJfYWx0ICYmCisJKGNkIHN1Yl9hbHQgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBhID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIGEKKwkpICYmCisJbWtkaXIgc3VwZXIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IGNsb25lIC1zIC4uL3N1Yl9hbHQgc3ViICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBhZGQgc3ViICYmCisJCWdpdCBjb21taXQgLW0gInN1YiBhIgorCSkgJiYKKwkoY2Qgc3ViX2FsdCAmJgorCQlzaGExX2JlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorCQllY2hvIGIgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCWdpdCBjb21taXQgLW0gYgorCQlzaGExX2FmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpCisJCWVjaG8gIlN1Ym1vZHVsZSBzdWIgJHNoYTFfYmVmb3JlLi4kc2hhMV9hZnRlcjoKKyAgPiBiIiA+Li4vZXhwZWN0ZWQKKwkpICYmCisJKGNkIHN1cGVyICYmCisJCShjZCBzdWIgJiYKKwkJCWdpdCBmZXRjaCAmJgorCQkJZ2l0IGNoZWNrb3V0IG9yaWdpbi9tYXN0ZXIKKwkJKSAmJgorCQlnaXQgZGlmZiAtLXN1Ym1vZHVsZSA+IC4uL2FjdHVhbAorCSkKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQyLWRpZmYtdGV4dGNvbnYtY2FjaGluZy5zaCBiL3QvdDQwNDItZGlmZi10ZXh0Y29udi1jYWNoaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxZjgxOTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQyLWRpZmYtdGV4dGNvbnYtY2FjaGluZy5zaApAQCAtMCwwICsxLDEwOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdGV4dGNvbnYgY2FjaGluZycKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmhlbHBlciA8PCdFT0YnCisjIS9iaW4vc2gKK3NlZCAncy9eL2NvbnZlcnRlZDogLycgIiRAIiA+aGVscGVyLm91dAorY2F0IGhlbHBlci5vdXQKK0VPRgorY2htb2QgK3ggaGVscGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBmb28gY29udGVudCAxID5mb28uYmluICYmCisJZWNobyBiYXIgY29udGVudCAxID5iYXIuYmluICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwllY2hvIGZvbyBjb250ZW50IDIgPmZvby5iaW4gJiYKKwllY2hvIGJhciBjb250ZW50IDIgPmJhci5iaW4gJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWVjaG8gIiouYmluIGRpZmY9bWFnaWMiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgZGlmZi5tYWdpYy50ZXh0Y29udiAuL2hlbHBlciAmJgorCWdpdCBjb25maWcgZGlmZi5tYWdpYy5jYWNoZXRleHRjb252IHRydWUKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9iYXIuYmluIGIvYmFyLmJpbgoraW5kZXggZmNmOTE2Ni4uMjgyODNkNSAxMDA2NDQKKy0tLSBhL2Jhci5iaW4KKysrKyBiL2Jhci5iaW4KK0BAIC0xICsxIEBACistY29udmVydGVkOiBiYXIgY29udGVudCAxCisrY29udmVydGVkOiBiYXIgY29udGVudCAyCitkaWZmIC0tZ2l0IGEvZm9vLmJpbiBiL2Zvby5iaW4KK2luZGV4IGQ1YjlmZTMuLjEzNDVkYjIgMTAwNjQ0CistLS0gYS9mb28uYmluCisrKysgYi9mb28uYmluCitAQCAtMSArMSBAQAorLWNvbnZlcnRlZDogZm9vIGNvbnRlbnQgMQorK2NvbnZlcnRlZDogZm9vIGNvbnRlbnQgMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpcnN0IHRleHRjb252IHdvcmtzJyAnCisJZ2l0IGRpZmYgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYWNoZWQgdGV4dGNvbnYgcHJvZHVjZXMgc2FtZSBvdXRwdXQnICcKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhY2hlZCB0ZXh0Y29udiBkb2VzIG5vdCBydW4gaGVscGVyJyAnCisJcm0gLWYgaGVscGVyLm91dCAmJgorCWdpdCBkaWZmIEhFQUReIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkhIHRlc3QgLXIgaGVscGVyLm91dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL2Jhci5iaW4gYi9iYXIuYmluCitpbmRleCBmY2Y5MTY2Li4yODI4M2Q1IDEwMDY0NAorLS0tIGEvYmFyLmJpbgorKysrIGIvYmFyLmJpbgorQEAgLTEsMiArMSwyIEBACisgY29udmVydGVkOiBvdGhlcgorLWNvbnZlcnRlZDogYmFyIGNvbnRlbnQgMQorK2NvbnZlcnRlZDogYmFyIGNvbnRlbnQgMgorZGlmZiAtLWdpdCBhL2Zvby5iaW4gYi9mb28uYmluCitpbmRleCBkNWI5ZmUzLi4xMzQ1ZGIyIDEwMDY0NAorLS0tIGEvZm9vLmJpbgorKysrIGIvZm9vLmJpbgorQEAgLTEsMiArMSwyIEBACisgY29udmVydGVkOiBvdGhlcgorLWNvbnZlcnRlZDogZm9vIGNvbnRlbnQgMQorK2NvbnZlcnRlZDogZm9vIGNvbnRlbnQgMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2luZyB0ZXh0Y29udiBpbnZhbGlkYXRlcyBjYWNoZScgJworCWVjaG8gb3RoZXIgPm90aGVyICYmCisJZ2l0IGNvbmZpZyBkaWZmLm1hZ2ljLnRleHRjb252ICIuL2hlbHBlciBvdGhlciIgJiYKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvYmFyLmJpbiBiL2Jhci5iaW4KK2luZGV4IGZjZjkxNjYuLjI4MjgzZDUgMTAwNjQ0CistLS0gYS9iYXIuYmluCisrKysgYi9iYXIuYmluCitAQCAtMSwyICsxLDIgQEAKKyBjb252ZXJ0ZWQ6IG90aGVyCistY29udmVydGVkOiBiYXIgY29udGVudCAxCisrY29udmVydGVkOiBiYXIgY29udGVudCAyCitkaWZmIC0tZ2l0IGEvZm9vLmJpbiBiL2Zvby5iaW4KK2luZGV4IGQ1YjlmZTMuLjEzNDVkYjIgMTAwNjQ0CistLS0gYS9mb28uYmluCisrKysgYi9mb28uYmluCitAQCAtMSArMSBAQAorLWNvbnZlcnRlZDogZm9vIGNvbnRlbnQgMQorK2NvbnZlcnRlZDogZm9vIGNvbnRlbnQgMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2hpbmcgZGlmZiBkcml2ZXIgcHJvZHVjZXMgY29ycmVjdCByZXN1bHRzJyAnCisJZ2l0IGNvbmZpZyBkaWZmLm1vcmVtYWdpYy50ZXh0Y29udiAuL2hlbHBlciAmJgorCWVjaG8gZm9vLmJpbiBkaWZmPW1vcmVtYWdpYyA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGRpZmYgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDMtZGlmZi1yZW5hbWUtYmluYXJ5LnNoIGIvdC90NDA0My1kaWZmLXJlbmFtZS1iaW5hcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmEyY2Y5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNDMtZGlmZi1yZW5hbWUtYmluYXJ5LnNoCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSmFrdWIgTmFyZWJza2ksIENocmlzdGlhbiBDb3VkZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nTW92ZSBhIGJpbmFyeSBmaWxlJworCisuIC4vdGVzdC1saWIuc2gKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHJlcG9zaXRvcnknICcKKwlnaXQgaW5pdCAmJgorCWVjaG8gZm9vID4gZm9vICYmCisJZWNobyAiYmFyUSIgfCBxX3RvX251bCA+IGJhciAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZlIHRoZSBmaWxlcyBpbnRvIGEgInN1YiIgZGlyZWN0b3J5JyAnCisJbWtkaXIgc3ViICYmCisJZ2l0IG12IGJhciBmb28gc3ViLyAmJgorCWdpdCBjb21taXQgLW0gIk1vdmVkIHRvIHN1Yi8iCisnCisKK2NhdCA+IGV4cGVjdGVkIDw8XEVPRgorLQktCWJhciA9PiBzdWIvYmFyCiswCTAJZm9vID0+IHN1Yi9mb28KKworZGlmZiAtLWdpdCBhL2JhciBiL3N1Yi9iYXIKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gYmFyCityZW5hbWUgdG8gc3ViL2JhcgorZGlmZiAtLWdpdCBhL2ZvbyBiL3N1Yi9mb28KK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gZm9vCityZW5hbWUgdG8gc3ViL2ZvbworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93IC1DIC1DIHJlcG9ydCByZW5hbWVzJyAnCisJZ2l0IHNob3cgLUMgLUMgLS1yYXcgLS1iaW5hcnkgLS1udW1zdGF0ID5wYXRjaC13aXRoLXN0YXQgJiYKKwl0YWlsIC1uIDExIHBhdGNoLXdpdGgtc3RhdCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaCBiL3QvdDQwNDQtZGlmZi1pbmRleC11bmlxdWUtYWJicmV2LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1Y2U3MmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB1bmlxdWUgc2hhMSBhYmJyZXZpYXRpb24gb24gImluZGV4IGZyb20uLnRvIiBsaW5lJworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+ZXhwZWN0X2luaXRpYWwgPDxFT0YKKzEwMDY0NCBibG9iIDUxZDI3Mzg0NjNlYTRjYTY2Zjg2OTFjOTFlMzNjZTY0YjdkNDFiYjEJZm9vCitFT0YKKworY2F0ID5leHBlY3RfdXBkYXRlIDw8RU9GCisxMDA2NDQgYmxvYiA1MWQyNzM4ZWZiNGFkOGExZTQwYmVkODM5YWI4ZTExNmYwYTE1ZTQ3CWZvbworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyA0ODI3ID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIiAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEOiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9pbml0aWFsIGFjdHVhbCAmJgorCWVjaG8gMTE3NDIgPiBmb28gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ1cGRhdGUiICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQ6ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X3VwZGF0ZSBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2luZGV4IDUxZDI3Mzg0Li41MWQyNzM4ZSAxMDA2NDQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGRvZXMgbm90IHByb2R1Y2UgYW1iaWd1b3VzIGluZGV4IGxpbmUnICcKKwlnaXQgZGlmZiBIRUFEXi4uSEVBRCB8IGdyZXAgaW5kZXggPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA0NS1kaWZmLXJlbGF0aXZlLnNoIGIvdC90NDA0NS1kaWZmLXJlbGF0aXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM5NTBmNTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQ1LWRpZmYtcmVsYXRpdmUuc2gKQEAgLTAsMCArMSw3MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLS1yZWxhdGl2ZSB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCWVjaG8gY29udGVudCA+ZmlsZTEgJiYKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvIG90aGVyIGNvbnRlbnQgPnN1YmRpci9maWxlMiAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK2NoZWNrX2RpZmYoKSB7CitleHBlY3Q9JDE7IHNoaWZ0CitjYXQgPmV4cGVjdGVkIDw8RU9GCitkaWZmIC0tZ2l0IGEvJGV4cGVjdCBiLyRleHBlY3QKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNWMwNWVmCistLS0gL2Rldi9udWxsCisrKysgYi8kZXhwZWN0CitAQCAtMCwwICsxIEBACisrb3RoZXIgY29udGVudAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItcCAkKiIgIgorCWdpdCBkaWZmIC1wICQqIEhFQUReID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKK30KKworY2hlY2tfbnVtc3RhdCgpIHsKK2V4cGVjdD0kMTsgc2hpZnQKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKzEJMAkkZXhwZWN0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tbnVtc3RhdCAkKiIgIgorCWVjaG8gJzEJMAkkZXhwZWN0JyA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtLW51bXN0YXQgJCogSEVBRF4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorfQorCitjaGVja19zdGF0KCkgeworZXhwZWN0PSQxOyBzaGlmdAorY2F0ID5leHBlY3RlZCA8PEVPRgorICRleHBlY3QgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1zdGF0ICQqIiAiCisJZ2l0IGRpZmYgLS1zdGF0ICQqIEhFQUReID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCit9CisKK2NoZWNrX3JhdygpIHsKK2V4cGVjdD0kMTsgc2hpZnQKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMjVjMDVlZjM2MzlkMmQyNzBlN2ZlNzY1YTY3NjY4ZjA5ODA5MmJjNSBBCSRleHBlY3QKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1yYXcgJCoiICIKKwlnaXQgZGlmZiAtLW5vLWFiYnJldiAtLXJhdyAkKiBIRUFEXiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCit9CisKK2ZvciB0eXBlIGluIGRpZmYgbnVtc3RhdCBzdGF0IHJhdzsgZG8KKwljaGVja18kdHlwZSBmaWxlMiAtLXJlbGF0aXZlPXN1YmRpci8KKwljaGVja18kdHlwZSBmaWxlMiAtLXJlbGF0aXZlPXN1YmRpcgorCWNoZWNrXyR0eXBlIGRpci9maWxlMiAtLXJlbGF0aXZlPXN1YgorZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDYtZGlmZi11bm1lcmdlZC5zaCBiL3QvdDQwNDYtZGlmZi11bm1lcmdlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNWQ1MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA0Ni1kaWZmLXVubWVyZ2VkLnNoCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIHdpdGggdW5tZXJnZWQgaW5kZXggZW50cmllcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiAwIDEgMiAzCisJZG8KKwkJYmxvYj0kKGVjaG8gJGkgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwkJZXZhbCAiYmxvYiRpPSRibG9iIiAmJgorCQlldmFsICJtJGk9XCIxMDA2NDQgXCRibG9iJGkgJGlcIiIgfHwgYnJlYWsKKwlkb25lICYmCisJcGF0aHM9ICYmCisJZm9yIGIgaW4gbyB4CisJZG8KKwkJZm9yIG8gaW4gbyB4CisJCWRvCisJCQlmb3IgdCBpbiBvIHgKKwkJCWRvCisJCQkJcGF0aD0iJGIkbyR0IiAmJgorCQkJCWNhc2UgIiRwYXRoIiBpbiBvb28pIGNvbnRpbnVlIDs7IGVzYWMKKwkJCQlwYXRocz0iJHBhdGhzJHBhdGggIiAmJgorCQkJCXA9IgkkcGF0aCIgJiYKKwkJCQljYXNlICIkYiIgaW4geCkgZWNobyAiJG0xJHAiIDs7IGVzYWMgJiYKKwkJCQljYXNlICIkbyIgaW4geCkgZWNobyAiJG0yJHAiIDs7IGVzYWMgJiYKKwkJCQljYXNlICIkdCIgaW4geCkgZWNobyAiJG0zJHAiIDs7IGVzYWMgfHwKKwkJCQlicmVhaworCQkJZG9uZSB8fCBicmVhaworCQlkb25lIHx8IGJyZWFrCisJZG9uZSA+bHMtZmlsZXMtcy5leHBlY3QgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8bHMtZmlsZXMtcy5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmxzLWZpbGVzLXMuYWN0dWFsICYmCisJdGVzdF9jbXAgbHMtZmlsZXMtcy5leHBlY3QgbHMtZmlsZXMtcy5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcyAtMCcgJworCWZvciBwYXRoIGluICRwYXRocworCWRvCisJCT4iJHBhdGgiICYmCisJCWVjaG8gIjowMDAwMDAgMTAwNjQ0ICRfejQwICRfejQwIFUJJHBhdGgiCisJZG9uZSA+ZGlmZi1maWxlcy0wLmV4cGVjdCAmJgorCWdpdCBkaWZmLWZpbGVzIC0wID5kaWZmLWZpbGVzLTAuYWN0dWFsICYmCisJdGVzdF9jbXAgZGlmZi1maWxlcy0wLmV4cGVjdCBkaWZmLWZpbGVzLTAuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgLTEnICcKKwlmb3IgcGF0aCBpbiAkcGF0aHMKKwlkbworCQk+IiRwYXRoIiAmJgorCQllY2hvICI6MDAwMDAwIDEwMDY0NCAkX3o0MCAkX3o0MCBVCSRwYXRoIiAmJgorCQljYXNlICIkcGF0aCIgaW4KKwkJeD8/KSBlY2hvICI6MTAwNjQ0IDEwMDY0NCAkYmxvYjEgJF96NDAgTQkkcGF0aCIKKwkJZXNhYworCWRvbmUgPmRpZmYtZmlsZXMtMS5leHBlY3QgJiYKKwlnaXQgZGlmZi1maWxlcyAtMSA+ZGlmZi1maWxlcy0xLmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmYtZmlsZXMtMS5leHBlY3QgZGlmZi1maWxlcy0xLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIC0yJyAnCisJZm9yIHBhdGggaW4gJHBhdGhzCisJZG8KKwkJPiIkcGF0aCIgJiYKKwkJZWNobyAiOjAwMDAwMCAxMDA2NDQgJF96NDAgJF96NDAgVQkkcGF0aCIgJiYKKwkJY2FzZSAiJHBhdGgiIGluCisJCT94PykgZWNobyAiOjEwMDY0NCAxMDA2NDQgJGJsb2IyICRfejQwIE0JJHBhdGgiCisJCWVzYWMKKwlkb25lID5kaWZmLWZpbGVzLTIuZXhwZWN0ICYmCisJZ2l0IGRpZmYtZmlsZXMgLTIgPmRpZmYtZmlsZXMtMi5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBkaWZmLWZpbGVzLTIuZXhwZWN0IGRpZmYtZmlsZXMtMi5hY3R1YWwgJiYKKwlnaXQgZGlmZi1maWxlcyA+ZGlmZi1maWxlcy1kZWZhdWx0LTIuYWN0dWFsICYmCisJdGVzdF9jbXAgZGlmZi1maWxlcy0yLmV4cGVjdCBkaWZmLWZpbGVzLWRlZmF1bHQtMi5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcyAtMycgJworCWZvciBwYXRoIGluICRwYXRocworCWRvCisJCT4iJHBhdGgiICYmCisJCWVjaG8gIjowMDAwMDAgMTAwNjQ0ICRfejQwICRfejQwIFUJJHBhdGgiICYmCisJCWNhc2UgIiRwYXRoIiBpbgorCQk/P3gpIGVjaG8gIjoxMDA2NDQgMTAwNjQ0ICRibG9iMyAkX3o0MCBNCSRwYXRoIgorCQllc2FjCisJZG9uZSA+ZGlmZi1maWxlcy0zLmV4cGVjdCAmJgorCWdpdCBkaWZmLWZpbGVzIC0zID5kaWZmLWZpbGVzLTMuYWN0dWFsICYmCisJdGVzdF9jbXAgZGlmZi1maWxlcy0zLmV4cGVjdCBkaWZmLWZpbGVzLTMuYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA0Ny1kaWZmLWRpcnN0YXQuc2ggYi90L3Q0MDQ3LWRpZmYtZGlyc3RhdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZDdlMDkzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA0Ny1kaWZmLWRpcnN0YXQuc2gKQEAgLTAsMCArMSw5NzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIC0tZGlyc3RhdCB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCisjIHNldCB1cCB0d28gY29tbWl0cyB3aGVyZSB0aGUgc2Vjb25kIGNvbW1pdCBoYXMgdGhlc2UgZmlsZXMKKyMgKDEwIGxpbmVzIGluIGVhY2ggZmlsZSk6CisjCisjICAgdW5jaGFuZ2VkL3RleHQgICAgICAgICAgICh1bmNoYW5nZWQgZnJvbSAxc3QgY29tbWl0KQorIyAgIGNoYW5nZWQvdGV4dCAgICAgICAgICAgICAoY2hhbmdlZCAxc3QgbGluZSkKKyMgICByZWFycmFuZ2VkL3RleHQgICAgICAgICAgKHN3YXBwZWQgMXN0IGFuZCAybmQgbGluZSkKKyMgICBkc3QvY29weS91bmNoYW5nZWQvdGV4dCAgKGNvcGllZCBmcm9tIHNyYy9jb3B5L3VuY2hhbmdlZC90ZXh0LCB1bmNoYW5nZWQpCisjICAgZHN0L2NvcHkvY2hhbmdlZC90ZXh0ICAgIChjb3BpZWQgZnJvbSBzcmMvY29weS9jaGFuZ2VkL3RleHQsIGNoYW5nZWQpCisjICAgZHN0L2NvcHkvcmVhcnJhbmdlZC90ZXh0IChjb3BpZWQgZnJvbSBzcmMvY29weS9yZWFycmFuZ2VkL3RleHQsIHJlYXJyYW5nZWQpCisjICAgZHN0L21vdmUvdW5jaGFuZ2VkL3RleHQgIChtb3ZlZCBmcm9tIHNyYy9tb3ZlL3VuY2hhbmdlZC90ZXh0LCB1bmNoYW5nZWQpCisjICAgZHN0L21vdmUvY2hhbmdlZC90ZXh0ICAgIChtb3ZlZCBmcm9tIHNyYy9tb3ZlL2NoYW5nZWQvdGV4dCwgY2hhbmdlZCkKKyMgICBkc3QvbW92ZS9yZWFycmFuZ2VkL3RleHQgKG1vdmVkIGZyb20gc3JjL21vdmUvcmVhcnJhbmdlZC90ZXh0LCByZWFycmFuZ2VkKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHVuY2hhbmdlZCAmJgorCW1rZGlyIGNoYW5nZWQgJiYKKwlta2RpciByZWFycmFuZ2VkICYmCisJbWtkaXIgc3JjICYmCisJbWtkaXIgc3JjL2NvcHkgJiYKKwlta2RpciBzcmMvY29weS91bmNoYW5nZWQgJiYKKwlta2RpciBzcmMvY29weS9jaGFuZ2VkICYmCisJbWtkaXIgc3JjL2NvcHkvcmVhcnJhbmdlZCAmJgorCW1rZGlyIHNyYy9tb3ZlICYmCisJbWtkaXIgc3JjL21vdmUvdW5jaGFuZ2VkICYmCisJbWtkaXIgc3JjL21vdmUvY2hhbmdlZCAmJgorCW1rZGlyIHNyYy9tb3ZlL3JlYXJyYW5nZWQgJiYKKwljYXQgPDxFT0YgPnVuY2hhbmdlZC90ZXh0ICYmCit1bmNoYW5nZWQgICAgICAgbGluZSAjMAordW5jaGFuZ2VkICAgICAgIGxpbmUgIzEKK3VuY2hhbmdlZCAgICAgICBsaW5lICMyCit1bmNoYW5nZWQgICAgICAgbGluZSAjMwordW5jaGFuZ2VkICAgICAgIGxpbmUgIzQKK3VuY2hhbmdlZCAgICAgICBsaW5lICM1Cit1bmNoYW5nZWQgICAgICAgbGluZSAjNgordW5jaGFuZ2VkICAgICAgIGxpbmUgIzcKK3VuY2hhbmdlZCAgICAgICBsaW5lICM4Cit1bmNoYW5nZWQgICAgICAgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5jaGFuZ2VkL3RleHQgJiYKK2NoYW5nZWQgICAgICAgICBsaW5lICMwCitjaGFuZ2VkICAgICAgICAgbGluZSAjMQorY2hhbmdlZCAgICAgICAgIGxpbmUgIzIKK2NoYW5nZWQgICAgICAgICBsaW5lICMzCitjaGFuZ2VkICAgICAgICAgbGluZSAjNAorY2hhbmdlZCAgICAgICAgIGxpbmUgIzUKK2NoYW5nZWQgICAgICAgICBsaW5lICM2CitjaGFuZ2VkICAgICAgICAgbGluZSAjNworY2hhbmdlZCAgICAgICAgIGxpbmUgIzgKK2NoYW5nZWQgICAgICAgICBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPnJlYXJyYW5nZWQvdGV4dCAmJgorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzAKK3JlYXJyYW5nZWQgICAgICBsaW5lICMxCityZWFycmFuZ2VkICAgICAgbGluZSAjMgorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzMKK3JlYXJyYW5nZWQgICAgICBsaW5lICM0CityZWFycmFuZ2VkICAgICAgbGluZSAjNQorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzYKK3JlYXJyYW5nZWQgICAgICBsaW5lICM3CityZWFycmFuZ2VkICAgICAgbGluZSAjOAorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+c3JjL2NvcHkvdW5jaGFuZ2VkL3RleHQgJiYKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICMwCitjb3B5ICB1bmNoYW5nZWQgbGluZSAjMQorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzIKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICMzCitjb3B5ICB1bmNoYW5nZWQgbGluZSAjNAorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzUKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM2Citjb3B5ICB1bmNoYW5nZWQgbGluZSAjNworY29weSAgdW5jaGFuZ2VkIGxpbmUgIzgKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPnNyYy9jb3B5L2NoYW5nZWQvdGV4dCAmJgorY29weSAgICBjaGFuZ2VkIGxpbmUgIzAKK2NvcHkgICAgY2hhbmdlZCBsaW5lICMxCitjb3B5ICAgIGNoYW5nZWQgbGluZSAjMgorY29weSAgICBjaGFuZ2VkIGxpbmUgIzMKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM0Citjb3B5ICAgIGNoYW5nZWQgbGluZSAjNQorY29weSAgICBjaGFuZ2VkIGxpbmUgIzYKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM3Citjb3B5ICAgIGNoYW5nZWQgbGluZSAjOAorY29weSAgICBjaGFuZ2VkIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+c3JjL2NvcHkvcmVhcnJhbmdlZC90ZXh0ICYmCitjb3B5IHJlYXJyYW5nZWQgbGluZSAjMAorY29weSByZWFycmFuZ2VkIGxpbmUgIzEKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICMyCitjb3B5IHJlYXJyYW5nZWQgbGluZSAjMworY29weSByZWFycmFuZ2VkIGxpbmUgIzQKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM1Citjb3B5IHJlYXJyYW5nZWQgbGluZSAjNgorY29weSByZWFycmFuZ2VkIGxpbmUgIzcKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM4Citjb3B5IHJlYXJyYW5nZWQgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5zcmMvbW92ZS91bmNoYW5nZWQvdGV4dCAmJgorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzAKK21vdmUgIHVuY2hhbmdlZCBsaW5lICMxCittb3ZlICB1bmNoYW5nZWQgbGluZSAjMgorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzMKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM0Cittb3ZlICB1bmNoYW5nZWQgbGluZSAjNQorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzYKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM3Cittb3ZlICB1bmNoYW5nZWQgbGluZSAjOAorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+c3JjL21vdmUvY2hhbmdlZC90ZXh0ICYmCittb3ZlICAgIGNoYW5nZWQgbGluZSAjMAorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzEKK21vdmUgICAgY2hhbmdlZCBsaW5lICMyCittb3ZlICAgIGNoYW5nZWQgbGluZSAjMworbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzQKK21vdmUgICAgY2hhbmdlZCBsaW5lICM1Cittb3ZlICAgIGNoYW5nZWQgbGluZSAjNgorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzcKK21vdmUgICAgY2hhbmdlZCBsaW5lICM4Cittb3ZlICAgIGNoYW5nZWQgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5zcmMvbW92ZS9yZWFycmFuZ2VkL3RleHQgJiYKK21vdmUgcmVhcnJhbmdlZCBsaW5lICMwCittb3ZlIHJlYXJyYW5nZWQgbGluZSAjMQorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzIKK21vdmUgcmVhcnJhbmdlZCBsaW5lICMzCittb3ZlIHJlYXJyYW5nZWQgbGluZSAjNAorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzUKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM2Cittb3ZlIHJlYXJyYW5nZWQgbGluZSAjNworbW92ZSByZWFycmFuZ2VkIGxpbmUgIzgKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM5CitFT0YKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIiAmJgorCW1rZGlyIGRzdCAmJgorCW1rZGlyIGRzdC9jb3B5ICYmCisJbWtkaXIgZHN0L2NvcHkvdW5jaGFuZ2VkICYmCisJbWtkaXIgZHN0L2NvcHkvY2hhbmdlZCAmJgorCW1rZGlyIGRzdC9jb3B5L3JlYXJyYW5nZWQgJiYKKwlta2RpciBkc3QvbW92ZSAmJgorCW1rZGlyIGRzdC9tb3ZlL3VuY2hhbmdlZCAmJgorCW1rZGlyIGRzdC9tb3ZlL2NoYW5nZWQgJiYKKwlta2RpciBkc3QvbW92ZS9yZWFycmFuZ2VkICYmCisJY2F0IDw8RU9GID5jaGFuZ2VkL3RleHQgJiYKK0NIQU5HRUQgWFhYWFhYWCBsaW5lICMwCitjaGFuZ2VkICAgICAgICAgbGluZSAjMQorY2hhbmdlZCAgICAgICAgIGxpbmUgIzIKK2NoYW5nZWQgICAgICAgICBsaW5lICMzCitjaGFuZ2VkICAgICAgICAgbGluZSAjNAorY2hhbmdlZCAgICAgICAgIGxpbmUgIzUKK2NoYW5nZWQgICAgICAgICBsaW5lICM2CitjaGFuZ2VkICAgICAgICAgbGluZSAjNworY2hhbmdlZCAgICAgICAgIGxpbmUgIzgKK2NoYW5nZWQgICAgICAgICBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPnJlYXJyYW5nZWQvdGV4dCAmJgorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzEKK3JlYXJyYW5nZWQgICAgICBsaW5lICMwCityZWFycmFuZ2VkICAgICAgbGluZSAjMgorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzMKK3JlYXJyYW5nZWQgICAgICBsaW5lICM0CityZWFycmFuZ2VkICAgICAgbGluZSAjNQorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzYKK3JlYXJyYW5nZWQgICAgICBsaW5lICM3CityZWFycmFuZ2VkICAgICAgbGluZSAjOAorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+ZHN0L2NvcHkvdW5jaGFuZ2VkL3RleHQgJiYKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICMwCitjb3B5ICB1bmNoYW5nZWQgbGluZSAjMQorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzIKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICMzCitjb3B5ICB1bmNoYW5nZWQgbGluZSAjNAorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzUKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM2Citjb3B5ICB1bmNoYW5nZWQgbGluZSAjNworY29weSAgdW5jaGFuZ2VkIGxpbmUgIzgKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPmRzdC9jb3B5L2NoYW5nZWQvdGV4dCAmJgorY29weSBYWFhDSEFOR0VEIGxpbmUgIzAKK2NvcHkgICAgY2hhbmdlZCBsaW5lICMxCitjb3B5ICAgIGNoYW5nZWQgbGluZSAjMgorY29weSAgICBjaGFuZ2VkIGxpbmUgIzMKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM0Citjb3B5ICAgIGNoYW5nZWQgbGluZSAjNQorY29weSAgICBjaGFuZ2VkIGxpbmUgIzYKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM3Citjb3B5ICAgIGNoYW5nZWQgbGluZSAjOAorY29weSAgICBjaGFuZ2VkIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+ZHN0L2NvcHkvcmVhcnJhbmdlZC90ZXh0ICYmCitjb3B5IHJlYXJyYW5nZWQgbGluZSAjMQorY29weSByZWFycmFuZ2VkIGxpbmUgIzAKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICMyCitjb3B5IHJlYXJyYW5nZWQgbGluZSAjMworY29weSByZWFycmFuZ2VkIGxpbmUgIzQKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM1Citjb3B5IHJlYXJyYW5nZWQgbGluZSAjNgorY29weSByZWFycmFuZ2VkIGxpbmUgIzcKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM4Citjb3B5IHJlYXJyYW5nZWQgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5kc3QvbW92ZS91bmNoYW5nZWQvdGV4dCAmJgorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzAKK21vdmUgIHVuY2hhbmdlZCBsaW5lICMxCittb3ZlICB1bmNoYW5nZWQgbGluZSAjMgorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzMKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM0Cittb3ZlICB1bmNoYW5nZWQgbGluZSAjNQorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzYKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM3Cittb3ZlICB1bmNoYW5nZWQgbGluZSAjOAorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+ZHN0L21vdmUvY2hhbmdlZC90ZXh0ICYmCittb3ZlIFhYWENIQU5HRUQgbGluZSAjMAorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzEKK21vdmUgICAgY2hhbmdlZCBsaW5lICMyCittb3ZlICAgIGNoYW5nZWQgbGluZSAjMworbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzQKK21vdmUgICAgY2hhbmdlZCBsaW5lICM1Cittb3ZlICAgIGNoYW5nZWQgbGluZSAjNgorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzcKK21vdmUgICAgY2hhbmdlZCBsaW5lICM4Cittb3ZlICAgIGNoYW5nZWQgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5kc3QvbW92ZS9yZWFycmFuZ2VkL3RleHQgJiYKK21vdmUgcmVhcnJhbmdlZCBsaW5lICMxCittb3ZlIHJlYXJyYW5nZWQgbGluZSAjMAorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzIKK21vdmUgcmVhcnJhbmdlZCBsaW5lICMzCittb3ZlIHJlYXJyYW5nZWQgbGluZSAjNAorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzUKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM2Cittb3ZlIHJlYXJyYW5nZWQgbGluZSAjNworbW92ZSByZWFycmFuZ2VkIGxpbmUgIzgKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM5CitFT0YKKwlnaXQgYWRkIC4gJiYKKwlnaXQgcm0gLXIgc3JjL21vdmUvdW5jaGFuZ2VkICYmCisJZ2l0IHJtIC1yIHNyYy9tb3ZlL2NoYW5nZWQgJiYKKwlnaXQgcm0gLXIgc3JjL21vdmUvcmVhcnJhbmdlZCAmJgorCWdpdCBjb21taXQgLW0gImNoYW5nZXMiCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfc3RhdAorMQkxCWNoYW5nZWQvdGV4dAorMTAJMAlkc3QvY29weS9jaGFuZ2VkL3RleHQKKzEwCTAJZHN0L2NvcHkvcmVhcnJhbmdlZC90ZXh0CisxMAkwCWRzdC9jb3B5L3VuY2hhbmdlZC90ZXh0CisxMAkwCWRzdC9tb3ZlL2NoYW5nZWQvdGV4dAorMTAJMAlkc3QvbW92ZS9yZWFycmFuZ2VkL3RleHQKKzEwCTAJZHN0L21vdmUvdW5jaGFuZ2VkL3RleHQKKzEJMQlyZWFycmFuZ2VkL3RleHQKKzAJMTAJc3JjL21vdmUvY2hhbmdlZC90ZXh0CiswCTEwCXNyYy9tb3ZlL3JlYXJyYW5nZWQvdGV4dAorMAkxMAlzcmMvbW92ZS91bmNoYW5nZWQvdGV4dAorRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfc3RhdF9NCisxCTEJY2hhbmdlZC90ZXh0CisxMAkwCWRzdC9jb3B5L2NoYW5nZWQvdGV4dAorMTAJMAlkc3QvY29weS9yZWFycmFuZ2VkL3RleHQKKzEwCTAJZHN0L2NvcHkvdW5jaGFuZ2VkL3RleHQKKzEJMQl7c3JjID0+IGRzdH0vbW92ZS9jaGFuZ2VkL3RleHQKKzEJMQl7c3JjID0+IGRzdH0vbW92ZS9yZWFycmFuZ2VkL3RleHQKKzAJMAl7c3JjID0+IGRzdH0vbW92ZS91bmNoYW5nZWQvdGV4dAorMQkxCXJlYXJyYW5nZWQvdGV4dAorRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfc3RhdF9DQworMQkxCWNoYW5nZWQvdGV4dAorMQkxCXtzcmMgPT4gZHN0fS9jb3B5L2NoYW5nZWQvdGV4dAorMQkxCXtzcmMgPT4gZHN0fS9jb3B5L3JlYXJyYW5nZWQvdGV4dAorMAkwCXtzcmMgPT4gZHN0fS9jb3B5L3VuY2hhbmdlZC90ZXh0CisxCTEJe3NyYyA9PiBkc3R9L21vdmUvY2hhbmdlZC90ZXh0CisxCTEJe3NyYyA9PiBkc3R9L21vdmUvcmVhcnJhbmdlZC90ZXh0CiswCTAJe3NyYyA9PiBkc3R9L21vdmUvdW5jaGFuZ2VkL3RleHQKKzEJMQlyZWFycmFuZ2VkL3RleHQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW5pdHkgY2hlY2sgc2V0dXAgKC0tbnVtc3RhdCknICcKKwlnaXQgZGlmZiAtLW51bXN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX3N0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9zdGF0IGFjdHVhbF9kaWZmX3N0YXQgJiYKKwlnaXQgZGlmZiAtLW51bXN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX3N0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX3N0YXRfTSBhY3R1YWxfZGlmZl9zdGF0X00gJiYKKwlnaXQgZGlmZiAtLW51bXN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX3N0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9zdGF0X0NDIGFjdHVhbF9kaWZmX3N0YXRfQ0MKKycKKworIyBjaGFuZ2VkL3RleHQgYW5kIHJlYXJyYW5nZWQvdGV4dCBmYWxscyBiZWxvdyBkZWZhdWx0IDMlIHRocmVzaG9sZAorY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgIDEwLjglIGRzdC9jb3B5L2NoYW5nZWQvCisgIDEwLjglIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDEwLjglIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMTAuOCUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTAuOCUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTAuOCUgZHN0L21vdmUvdW5jaGFuZ2VkLworICAxMC44JSBzcmMvbW92ZS9jaGFuZ2VkLworICAxMC44JSBzcmMvbW92ZS9yZWFycmFuZ2VkLworICAxMC44JSBzcmMvbW92ZS91bmNoYW5nZWQvCitFT0YKKworIyByZWFycmFuZ2VkL3RleHQgZmFsbHMgYmVsb3cgZGVmYXVsdCAzJSB0aHJlc2hvbGQKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9NCisgICA1LjglIGNoYW5nZWQvCisgIDI5LjMlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDI5LjMlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDI5LjMlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgIDUuOCUgZHN0L21vdmUvY2hhbmdlZC8KK0VPRgorCisjIHJlYXJyYW5nZWQvdGV4dCBmYWxscyBiZWxvdyBkZWZhdWx0IDMlIHRocmVzaG9sZAorY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X0NDCisgIDMyLjYlIGNoYW5nZWQvCisgIDMyLjYlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDMyLjYlIGRzdC9tb3ZlL2NoYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFyaW91cyB3YXlzIHRvIG1pc3NwZWxsIC0tZGlyc3RhdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93IC0tZGlyc3RhdDEwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3cgLS1kaXJzdGF0MTAsZmlsZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAtWD0yMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93IC1YPTIwLGN1bXVsYXRpdmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSAtLWRpcnN0YXQnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSAtWCcgJworCWdpdCBkaWZmIC1YIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLVggLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtWCAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCBkZWZhdWx0czogLS1kaXJzdGF0PWNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGxpY2l0IGRlZmF1bHRzOiAtWGNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzJyAnCisJZ2l0IGRpZmYgLVhjaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC1YY2hhbmdlcyxub25jdW11bGF0aXZlLDMgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtWGNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhdGVyIG9wdGlvbnMgb3ZlcnJpZGUgZWFybGllciBvcHRpb25zOicgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcywxMCxjdW11bGF0aXZlLGNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLDEwLGN1bXVsYXRpdmUsY2hhbmdlcyxub25jdW11bGF0aXZlLDMgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsMTAsY3VtdWxhdGl2ZSxjaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyAtLWRpcnN0YXQ9MTAgLS1kaXJzdGF0PWN1bXVsYXRpdmUgLS1kaXJzdGF0PWNoYW5nZXMgLS1kaXJzdGF0PW5vbmN1bXVsYXRpdmUgLVgzIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzIC0tZGlyc3RhdD0xMCAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSAtLWRpcnN0YXQ9Y2hhbmdlcyAtLWRpcnN0YXQ9bm9uY3VtdWxhdGl2ZSAtWDMgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMgLS1kaXJzdGF0PTEwIC0tZGlyc3RhdD1jdW11bGF0aXZlIC0tZGlyc3RhdD1jaGFuZ2VzIC0tZGlyc3RhdD1ub25jdW11bGF0aXZlIC1YMyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZGVmYXVsdHMgaW4gY29uZmlnIG92ZXJyaWRkZW4gYnkgZXhwbGljaXQgZGVmYXVsdHMgb24gY29tbWFuZCBsaW5lJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDUwIGRpZmYgLS1kaXJzdGF0PWNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDUwIGRpZmYgLS1kaXJzdGF0PWNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDUwIGRpZmYgLS1kaXJzdGF0PWNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAgMi4xJSBjaGFuZ2VkLworICAxMC44JSBkc3QvY29weS9jaGFuZ2VkLworICAxMC44JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxMC44JSBkc3QvY29weS91bmNoYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL2NoYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL3VuY2hhbmdlZC8KKyAgIDAuMCUgcmVhcnJhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvY2hhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvcmVhcnJhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvdW5jaGFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9NCisgICA1LjglIGNoYW5nZWQvCisgIDI5LjMlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDI5LjMlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDI5LjMlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgIDUuOCUgZHN0L21vdmUvY2hhbmdlZC8KKyAgIDAuMSUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgIDAuMSUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMzIuNiUgY2hhbmdlZC8KKyAgMzIuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgIDAuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMzIuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgIDAuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgIDAuNiUgcmVhcnJhbmdlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQ9MCcgJworCWdpdCBkaWZmIC0tZGlyc3RhdD0wIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9MCAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctWDAnICcKKwlnaXQgZGlmZiAtWDAgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtWDAgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtWDAgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PTAnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgICAyLjElIGNoYW5nZWQvCisgIDEwLjglIGRzdC9jb3B5L2NoYW5nZWQvCisgIDEwLjglIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDEwLjglIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMzIuNSUgZHN0L2NvcHkvCisgIDEwLjglIGRzdC9tb3ZlL2NoYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL3VuY2hhbmdlZC8KKyAgMzIuNSUgZHN0L21vdmUvCisgIDY1LjElIGRzdC8KKyAgIDAuMCUgcmVhcnJhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvY2hhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvcmVhcnJhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvdW5jaGFuZ2VkLworICAzMi41JSBzcmMvbW92ZS8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICAgNS44JSBjaGFuZ2VkLworICAyOS4zJSBkc3QvY29weS9jaGFuZ2VkLworICAyOS4zJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAyOS4zJSBkc3QvY29weS91bmNoYW5nZWQvCisgIDg4LjAlIGRzdC9jb3B5LworICAgNS44JSBkc3QvbW92ZS9jaGFuZ2VkLworICAgMC4xJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAgNS45JSBkc3QvbW92ZS8KKyAgOTQuMCUgZHN0LworICAgMC4xJSByZWFycmFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAzMi42JSBjaGFuZ2VkLworICAzMi42JSBkc3QvY29weS9jaGFuZ2VkLworICAgMC42JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAzMy4zJSBkc3QvY29weS8KKyAgMzIuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgIDAuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMzMuMyUgZHN0L21vdmUvCisgIDY2LjYlIGRzdC8KKyAgIDAuNiUgcmVhcnJhbmdlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQ9MCAtLWN1bXVsYXRpdmUnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9MCAtLWN1bXVsYXRpdmUgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9MCAtLWN1bXVsYXRpdmUgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9MCAtLWN1bXVsYXRpdmUgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PTAsY3VtdWxhdGl2ZScgJworCWdpdCBkaWZmIC0tZGlyc3RhdD0wLGN1bXVsYXRpdmUgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9MCxjdW11bGF0aXZlIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAsY3VtdWxhdGl2ZSAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctWDAsY3VtdWxhdGl2ZScgJworCWdpdCBkaWZmIC1YMCxjdW11bGF0aXZlIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLVgwLGN1bXVsYXRpdmUgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtWDAsY3VtdWxhdGl2ZSAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9MCxjdW11bGF0aXZlJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wLGN1bXVsYXRpdmUgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAsY3VtdWxhdGl2ZSBkaWZmIC0tZGlyc3RhdCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MCxjdW11bGF0aXZlIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD0wICYgLS1kaXJzdGF0PWN1bXVsYXRpdmUnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAgZGlmZiAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MCBkaWZmIC0tZGlyc3RhdD1jdW11bGF0aXZlIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wIGRpZmYgLS1kaXJzdGF0PWN1bXVsYXRpdmUgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgICA5LjAlIGNoYW5nZWQvCisgICA5LjAlIGRzdC9jb3B5L2NoYW5nZWQvCisgICA5LjAlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgICA5LjAlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgIDkuMCUgZHN0L21vdmUvY2hhbmdlZC8KKyAgIDkuMCUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgIDkuMCUgZHN0L21vdmUvdW5jaGFuZ2VkLworICAgOS4wJSByZWFycmFuZ2VkLworICAgOS4wJSBzcmMvbW92ZS9jaGFuZ2VkLworICAgOS4wJSBzcmMvbW92ZS9yZWFycmFuZ2VkLworICAgOS4wJSBzcmMvbW92ZS91bmNoYW5nZWQvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgMTQuMiUgY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICAxNC4yJSBkc3QvbW92ZS9jaGFuZ2VkLworICAxNC4yJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxNC4yJSByZWFycmFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAxNi42JSBjaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9jaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxNi42JSByZWFycmFuZ2VkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdC1ieS1maWxlJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGUgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQtYnktZmlsZSAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdC1ieS1maWxlIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1maWxlcycgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9ZmlsZXMnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWZpbGVzIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1maWxlcyBkaWZmIC0tZGlyc3RhdCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZmlsZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgIDI3LjIlIGRzdC9jb3B5LworICAyNy4yJSBkc3QvbW92ZS8KKyAgMjcuMiUgc3JjL21vdmUvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgMTQuMiUgY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICAxNC4yJSBkc3QvbW92ZS9jaGFuZ2VkLworICAxNC4yJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxNC4yJSByZWFycmFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAxNi42JSBjaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9jaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxNi42JSByZWFycmFuZ2VkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdC1ieS1maWxlPTEwJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGU9MTAgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQtYnktZmlsZT0xMCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdC1ieS1maWxlPTEwIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1maWxlcywxMCcgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcywxMCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcywxMCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcywxMCAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9MTAsZmlsZXMnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTEwLGZpbGVzIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xMCxmaWxlcyBkaWZmIC0tZGlyc3RhdCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MTAsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgICA5LjAlIGNoYW5nZWQvCisgICA5LjAlIGRzdC9jb3B5L2NoYW5nZWQvCisgICA5LjAlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgICA5LjAlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMjcuMiUgZHN0L2NvcHkvCisgICA5LjAlIGRzdC9tb3ZlL2NoYW5nZWQvCisgICA5LjAlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgICA5LjAlIGRzdC9tb3ZlL3VuY2hhbmdlZC8KKyAgMjcuMiUgZHN0L21vdmUvCisgIDU0LjUlIGRzdC8KKyAgIDkuMCUgcmVhcnJhbmdlZC8KKyAgIDkuMCUgc3JjL21vdmUvY2hhbmdlZC8KKyAgIDkuMCUgc3JjL21vdmUvcmVhcnJhbmdlZC8KKyAgIDkuMCUgc3JjL21vdmUvdW5jaGFuZ2VkLworICAyNy4yJSBzcmMvbW92ZS8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICAxNC4yJSBjaGFuZ2VkLworICAxNC4yJSBkc3QvY29weS9jaGFuZ2VkLworICAxNC4yJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxNC4yJSBkc3QvY29weS91bmNoYW5nZWQvCisgIDQyLjglIGRzdC9jb3B5LworICAxNC4yJSBkc3QvbW92ZS9jaGFuZ2VkLworICAxNC4yJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAyOC41JSBkc3QvbW92ZS8KKyAgNzEuNCUgZHN0LworICAxNC4yJSByZWFycmFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAxNi42JSBjaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9jaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAzMy4zJSBkc3QvY29weS8KKyAgMTYuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMzMuMyUgZHN0L21vdmUvCisgIDY2LjYlIGRzdC8KKyAgMTYuNiUgcmVhcnJhbmdlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQtYnktZmlsZSAtLWN1bXVsYXRpdmUnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQtYnktZmlsZSAtLWN1bXVsYXRpdmUgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQtYnktZmlsZSAtLWN1bXVsYXRpdmUgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQtYnktZmlsZSAtLWN1bXVsYXRpdmUgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PWN1bXVsYXRpdmUsZmlsZXMnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgIDI3LjIlIGRzdC9jb3B5LworICAyNy4yJSBkc3QvbW92ZS8KKyAgNTQuNSUgZHN0LworICAyNy4yJSBzcmMvbW92ZS8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICAxNC4yJSBjaGFuZ2VkLworICAxNC4yJSBkc3QvY29weS9jaGFuZ2VkLworICAxNC4yJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxNC4yJSBkc3QvY29weS91bmNoYW5nZWQvCisgIDQyLjglIGRzdC9jb3B5LworICAxNC4yJSBkc3QvbW92ZS9jaGFuZ2VkLworICAxNC4yJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAyOC41JSBkc3QvbW92ZS8KKyAgNzEuNCUgZHN0LworICAxNC4yJSByZWFycmFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAxNi42JSBjaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9jaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAzMy4zJSBkc3QvY29weS8KKyAgMTYuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMzMuMyUgZHN0L21vdmUvCisgIDY2LjYlIGRzdC8KKyAgMTYuNiUgcmVhcnJhbmdlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwxMCcgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDEwIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMTAgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwxMCAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9MTAsY3VtdWxhdGl2ZSxmaWxlcycgJworCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MTAsY3VtdWxhdGl2ZSxmaWxlcyBkaWZmIC0tZGlyc3RhdCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MTAsY3VtdWxhdGl2ZSxmaWxlcyBkaWZmIC0tZGlyc3RhdCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MTAsY3VtdWxhdGl2ZSxmaWxlcyBkaWZmIC0tZGlyc3RhdCAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXQKKyAgMjcuMiUgZHN0L2NvcHkvCisgIDI3LjIlIGRzdC9tb3ZlLworICA1NC41JSBkc3QvCisgIDI3LjIlIHNyYy9tb3ZlLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9NCisgIDQyLjglIGRzdC9jb3B5LworICAyOC41JSBkc3QvbW92ZS8KKyAgNzEuNCUgZHN0LworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAzMy4zJSBkc3QvY29weS8KKyAgMzMuMyUgZHN0L21vdmUvCisgIDY2LjYlIGRzdC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwxNi43JyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMTYuNyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDE2LjcgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwxNi43IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD0xNi43LGN1bXVsYXRpdmUsZmlsZXMnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTE2LjcsY3VtdWxhdGl2ZSxmaWxlcyBkaWZmIC0tZGlyc3RhdCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MTYuNyxjdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xNi43LGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PTE2LjcwLGN1bXVsYXRpdmUsZmlsZXMnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTE2LjcwLGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTE2LjcwLGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTE2LjcwLGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMjcuMicgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDI3LjIgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwyNy4yIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMjcuMiAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwyNy4wOScgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDI3LjA5IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMjcuMDkgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwyNy4wOSAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXQKKyAgMTAuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTAuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTAuNiUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICAxMC42JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxMC42JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxMC42JSBkc3QvbW92ZS91bmNoYW5nZWQvCisgIDEwLjYlIHNyYy9tb3ZlL2NoYW5nZWQvCisgIDEwLjYlIHNyYy9tb3ZlL3JlYXJyYW5nZWQvCisgIDEwLjYlIHNyYy9tb3ZlL3VuY2hhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICAgNS4yJSBjaGFuZ2VkLworICAyNi4zJSBkc3QvY29weS9jaGFuZ2VkLworICAyNi4zJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAyNi4zJSBkc3QvY29weS91bmNoYW5nZWQvCisgICA1LjIlIGRzdC9tb3ZlL2NoYW5nZWQvCisgICA1LjIlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgICA1LjIlIHJlYXJyYW5nZWQvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X0NDCisgIDE2LjYlIGNoYW5nZWQvCisgIDE2LjYlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDE2LjYlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDE2LjYlIGRzdC9tb3ZlL2NoYW5nZWQvCisgIDE2LjYlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDE2LjYlIHJlYXJyYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWxpbmVzJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWxpbmVzIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWxpbmVzIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWxpbmVzIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD1saW5lcycgJworCWdpdCAtYyBkaWZmLmRpcnN0YXQ9bGluZXMgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWxpbmVzIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1saW5lcyBkaWZmIC0tZGlyc3RhdCAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXQKKyAgIDIuMSUgY2hhbmdlZC8KKyAgMTAuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTAuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTAuNiUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICAxMC42JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxMC42JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxMC42JSBkc3QvbW92ZS91bmNoYW5nZWQvCisgICAyLjElIHJlYXJyYW5nZWQvCisgIDEwLjYlIHNyYy9tb3ZlL2NoYW5nZWQvCisgIDEwLjYlIHNyYy9tb3ZlL3JlYXJyYW5nZWQvCisgIDEwLjYlIHNyYy9tb3ZlL3VuY2hhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICAgNS4yJSBjaGFuZ2VkLworICAyNi4zJSBkc3QvY29weS9jaGFuZ2VkLworICAyNi4zJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAyNi4zJSBkc3QvY29weS91bmNoYW5nZWQvCisgICA1LjIlIGRzdC9tb3ZlL2NoYW5nZWQvCisgICA1LjIlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgICA1LjIlIHJlYXJyYW5nZWQvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X0NDCisgIDE2LjYlIGNoYW5nZWQvCisgIDE2LjYlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDE2LjYlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDE2LjYlIGRzdC9tb3ZlL2NoYW5nZWQvCisgIDE2LjYlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDE2LjYlIHJlYXJyYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWxpbmVzLDAnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9bGluZXMsMCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1saW5lcywwIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWxpbmVzLDAgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PTAsbGluZXMnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAsbGluZXMgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAsbGluZXMgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAsbGluZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWZ1dHVyZV9wYXJhbSxsaW5lcywwIHNob3VsZCBmYWlsIGxvdWRseScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tZGlyc3RhdD1mdXR1cmVfcGFyYW0sbGluZXMsMCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAyPmFjdHVhbF9lcnJvciAmJgorCXRlc3RfZGVidWcgImNhdCBhY3R1YWxfZXJyb3IiICYmCisJdGVzdF9jbXAgL2Rldi9udWxsIGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJmdXR1cmVfcGFyYW0iIGFjdHVhbF9lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgLXEgIlwtLWRpcnN0YXQiIGFjdHVhbF9lcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQ9ZHVtbXkxLGN1bXVsYXRpdmUsMmR1bW15IHNob3VsZCByZXBvcnQgYm90aCB1bnJlY29nbml6ZWQgcGFyYW1ldGVycycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tZGlyc3RhdD1kdW1teTEsY3VtdWxhdGl2ZSwyZHVtbXkgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgMj5hY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2RlYnVnICJjYXQgYWN0dWFsX2Vycm9yIiAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiZHVtbXkxIiBhY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICIyZHVtbXkiIGFjdHVhbF9lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgLXEgIlwtLWRpcnN0YXQiIGFjdHVhbF9lcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9ZnV0dXJlX3BhcmFtLDAsbGluZXMgc2hvdWxkIHdhcm4sIGJ1dCBzdGlsbCB3b3JrJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1mdXR1cmVfcGFyYW0sMCxsaW5lcyBkaWZmIC0tZGlyc3RhdCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAyPmFjdHVhbF9lcnJvciAmJgorCXRlc3RfZGVidWcgImNhdCBhY3R1YWxfZXJyb3IiICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiZnV0dXJlX3BhcmFtIiBhY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJkaWZmXFwuZGlyc3RhdCIgYWN0dWFsX2Vycm9yICYmCisKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWZ1dHVyZV9wYXJhbSwwLGxpbmVzIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gMj5hY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2RlYnVnICJjYXQgYWN0dWFsX2Vycm9yIiAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJmdXR1cmVfcGFyYW0iIGFjdHVhbF9lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgLXEgImRpZmZcXC5kaXJzdGF0IiBhY3R1YWxfZXJyb3IgJiYKKworCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZnV0dXJlX3BhcmFtLDAsbGluZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgMj5hY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2RlYnVnICJjYXQgYWN0dWFsX2Vycm9yIiAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfaTE4bmdyZXAgLXEgImZ1dHVyZV9wYXJhbSIgYWN0dWFsX2Vycm9yICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiZGlmZlxcLmRpcnN0YXQiIGFjdHVhbF9lcnJvcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDgtZGlmZi1jb21iaW5lZC1iaW5hcnkuc2ggYi90L3Q0MDQ4LWRpZmYtY29tYmluZWQtYmluYXJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3YTg5NDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQ4LWRpZmYtY29tYmluZWQtYmluYXJ5LnNoCkBAIC0wLDAgKzEsMjEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tYmluZWQgYW5kIG1lcmdlIGRpZmYgaGFuZGxlIGJpbmFyeSBmaWxlcyBhbmQgdGV4dGNvbnYnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmluYXJ5IG1lcmdlIGNvbmZsaWN0JyAnCisJZWNobyBvbmVRMSB8IHFfdG9fbnVsID5iaW5hcnkgJiYKKwlnaXQgYWRkIGJpbmFyeSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyB0d29RMiB8IHFfdG9fbnVsID5iaW5hcnkgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gtYmluYXJ5IEhFQUReICYmCisJZWNobyB0aHJlZVEzIHwgcV90b19udWwgPmJpbmFyeSAmJgorCWdpdCBjb21taXQgLWEgLW0gdGhyZWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJZWNobyByZXNvbHZlZFFob29yYXkgfCBxX3RvX251bCA+YmluYXJ5ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSByZXNvbHZlZAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCityZXNvbHZlZAorCitkaWZmIC0tZ2l0IGEvYmluYXJ5IGIvYmluYXJ5CitpbmRleCA3ZWE2ZGVkLi45NTYzNjkxIDEwMDY0NAorQmluYXJ5IGZpbGVzIGEvYmluYXJ5IGFuZCBiL2JpbmFyeSBkaWZmZXIKK3Jlc29sdmVkCisKK2RpZmYgLS1naXQgYS9iaW5hcnkgYi9iaW5hcnkKK2luZGV4IDYxOTc1NzAuLjk1NjM2OTEgMTAwNjQ0CitCaW5hcnkgZmlsZXMgYS9iaW5hcnkgYW5kIGIvYmluYXJ5IGRpZmZlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1tIGluZGljYXRlcyBiaW5hcnktbmVzcycgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC1tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK3Jlc29sdmVkCisKK2RpZmYgLS1jb21iaW5lZCBiaW5hcnkKK2luZGV4IDdlYTZkZWQsNjE5NzU3MC4uOTU2MzY5MQorQmluYXJ5IGZpbGVzIGRpZmZlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1jIGluZGljYXRlcyBiaW5hcnktbmVzcycgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC1jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK3Jlc29sdmVkCisKK2RpZmYgLS1jYyBiaW5hcnkKK2luZGV4IDdlYTZkZWQsNjE5NzU3MC4uOTU2MzY5MQorQmluYXJ5IGZpbGVzIGRpZmZlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2MgaW5kaWNhdGVzIGJpbmFyeS1uZXNzJyAnCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLS1jYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBub24tYmluYXJ5IHdpdGggYmluYXJ5IGF0dHJpYnV0ZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgdGV4dCAmJgorCXRlc3RfY29tbWl0IHR3byB0ZXh0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaC10ZXh0IEhFQUReICYmCisJdGVzdF9jb21taXQgdGhyZWUgdGV4dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCByZXNvbHZlZCB0ZXh0ICYmCisJZWNobyB0ZXh0IC1kaWZmID4uZ2l0YXR0cmlidXRlcworJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCityZXNvbHZlZAorCitkaWZmIC0tZ2l0IGEvdGV4dCBiL3RleHQKK2luZGV4IDJiZGY2N2EuLjJhYjE5YWUgMTAwNjQ0CitCaW5hcnkgZmlsZXMgYS90ZXh0IGFuZCBiL3RleHQgZGlmZmVyCityZXNvbHZlZAorCitkaWZmIC0tZ2l0IGEvdGV4dCBiL3RleHQKK2luZGV4IGY3MTllZmQuLjJhYjE5YWUgMTAwNjQ0CitCaW5hcnkgZmlsZXMgYS90ZXh0IGFuZCBiL3RleHQgZGlmZmVyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLW0gcmVzcGVjdHMgYmluYXJ5IGF0dHJpYnV0ZScgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC1tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK3Jlc29sdmVkCisKK2RpZmYgLS1jb21iaW5lZCB0ZXh0CitpbmRleCAyYmRmNjdhLGY3MTllZmQuLjJhYjE5YWUKK0JpbmFyeSBmaWxlcyBkaWZmZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtYyByZXNwZWN0cyBiaW5hcnkgYXR0cmlidXRlJyAnCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworcmVzb2x2ZWQKKworZGlmZiAtLWNjIHRleHQKK2luZGV4IDJiZGY2N2EsZjcxOWVmZC4uMmFiMTlhZQorQmluYXJ5IGZpbGVzIGRpZmZlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2MgcmVzcGVjdHMgYmluYXJ5IGF0dHJpYnV0ZScgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC0tY2MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGV4dGNvbnYgYXR0cmlidXRlJyAnCisJZWNobyAidGV4dCBkaWZmPXVwY2FzZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBkaWZmLnVwY2FzZS50ZXh0Y29udiAidHIgYS16IEEtWiA8IgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCityZXNvbHZlZAorCitkaWZmIC0tZ2l0IGEvdGV4dCBiL3RleHQKK2luZGV4IDJiZGY2N2EuLjJhYjE5YWUgMTAwNjQ0CistLS0gYS90ZXh0CisrKysgYi90ZXh0CitAQCAtMSArMSBAQAorLVRIUkVFCisrUkVTT0xWRUQKK3Jlc29sdmVkCisKK2RpZmYgLS1naXQgYS90ZXh0IGIvdGV4dAoraW5kZXggZjcxOWVmZC4uMmFiMTlhZSAxMDA2NDQKKy0tLSBhL3RleHQKKysrKyBiL3RleHQKK0BAIC0xICsxIEBACistVFdPCisrUkVTT0xWRUQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtbSByZXNwZWN0cyB0ZXh0Y29udiBhdHRyaWJ1dGUnICcKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCityZXNvbHZlZAorCitkaWZmIC0tY29tYmluZWQgdGV4dAoraW5kZXggMmJkZjY3YSxmNzE5ZWZkLi4yYWIxOWFlCistLS0gYS90ZXh0CisrKysgYi90ZXh0CitAQEAgLTEsMSAtMSwxICsxLDEgQEBACistIFRIUkVFCisgLVRXTworKytSRVNPTFZFRAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1jIHJlc3BlY3RzIHRleHRjb252IGF0dHJpYnV0ZScgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC1jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK3Jlc29sdmVkCisKK2RpZmYgLS1jYyB0ZXh0CitpbmRleCAyYmRmNjdhLGY3MTllZmQuLjJhYjE5YWUKKy0tLSBhL3RleHQKKysrKyBiL3RleHQKK0BAQCAtMSwxIC0xLDEgKzEsMSBAQEAKKy0gVEhSRUUKKyAtVFdPCisrK1JFU09MVkVECitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1jYyByZXNwZWN0cyB0ZXh0Y29udiBhdHRyaWJ1dGUnICcKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtLWNjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK2RpZmYgLS1jb21iaW5lZCB0ZXh0CitpbmRleCAyYmRmNjdhLGY3MTllZmQuLjJhYjE5YWUKKy0tLSBhL3RleHQKKysrKyBiL3RleHQKK0BAQCAtMSwxIC0xLDEgKzEsMSBAQEAKKy0gdGhyZWUKKyAtdHdvCisrK3Jlc29sdmVkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSBwbHVtYmluZyBkb2VzIG5vdCByZXNwZWN0IHRleHRjb252JyAnCisJZ2l0IGRpZmYtdHJlZSBIRUFEIC1jIC1wID5mdWxsICYmCisJdGFpbCAtbiArMiBmdWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK2RpZmYgLS1jYyB0ZXh0CitpbmRleCAyYmRmNjdhLGY3MTllZmQuLjAwMDAwMDAKKy0tLSBhL3RleHQKKysrKyBiL3RleHQKK0BAQCAtMSwxIC0xLDEgKzEsNSBAQEAKKysrPDw8PDw8PCBIRUFECisgK1RIUkVFCisrKz09PT09PT0KKysgVFdPCisrKz4+Pj4+Pj4gTUFTVEVSCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1jYyByZXNwZWN0cyB0ZXh0Y29udiBvbiB3b3JrdHJlZSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDktZGlmZi1zdGF0LWNvdW50LnNoIGIvdC90NDA0OS1kaWZmLXN0YXQtY291bnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjQxZWI2MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNDktZGlmZi1zdGF0LWNvdW50LnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLS1zdGF0LWNvdW50JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5hICYmCisJPmIgJiYKKwk+YyAmJgorCT5kICYmCisJZ2l0IGFkZCBhIGIgYyBkICYmCisJY2htb2QgK3ggYyBkICYmCisJZWNobyBhID5hICYmCisJZWNobyBiID5iICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRgorCSBhIHwgMSArCisJIGIgfCAxICsKKwkgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKwlFT0YKKwlnaXQgZGlmZiAtLXN0YXQgLS1zdGF0LWNvdW50PTIgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA1MC1kaWZmLWhpc3RvZ3JhbS5zaCBiL3QvdDQwNTAtZGlmZi1oaXN0b2dyYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQzZTg2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTAtZGlmZi1oaXN0b2dyYW0uc2gKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2hpc3RvZ3JhbSBkaWZmIGFsZ29yaXRobScKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1kaWZmLWFsdGVybmF0aXZlLnNoCisKK3Rlc3RfZGlmZl9mcm9ibml0eiAiaGlzdG9ncmFtIgorCit0ZXN0X2RpZmZfdW5pcXVlICJoaXN0b2dyYW0iCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA1MS1kaWZmLWZ1bmN0aW9uLWNvbnRleHQuc2ggYi90L3Q0MDUxLWRpZmYtZnVuY3Rpb24tY29udGV4dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMDFkNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1MS1kaWZmLWZ1bmN0aW9uLWNvbnRleHQuc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgZnVuY3Rpb24gY29udGV4dCcKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKKworY2F0IDw8XEVPRiA+aGVsbG8uYworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3N0YXRpYyBpbnQgYSh2b2lkKQoreworCS8qCisJICogRHVtbXkuCisJICovCit9CisKK3N0YXRpYyBpbnQgaGVsbG9fd29ybGQodm9pZCkKK3sKKwkvKiBDbGFzc2ljLiAqLworCXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKKworCS8qIFN1Y2Nlc3MhICovCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IGIodm9pZCkKK3sKKwkvKgorCSAqIER1bW15LCB0b28uCisJICovCit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlhKCk7CisJYigpOworCXJldHVybiBoZWxsb193b3JsZCgpOworfQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGFkZCBoZWxsby5jICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlncmVwIC12IENsYXNzaWMgPGhlbGxvLmMgPmhlbGxvLmMubmV3ICYmCisJbXYgaGVsbG8uYy5uZXcgaGVsbG8uYworJworCitjYXQgPDxcRU9GID5leHBlY3RlZAorZGlmZiAtLWdpdCBhL2hlbGxvLmMgYi9oZWxsby5jCistLS0gYS9oZWxsby5jCisrKysgYi9oZWxsby5jCitAQCAtMTAsOCArMTAsNyBAQCBzdGF0aWMgaW50IGEodm9pZCkKKyBzdGF0aWMgaW50IGhlbGxvX3dvcmxkKHZvaWQpCisgeworLQkvKiBDbGFzc2ljLiAqLworIAlwcmludGYoIkhlbGxvIHdvcmxkLlxuIik7CisgCisgCS8qIFN1Y2Nlc3MhICovCisgCXJldHVybiAwOworIH0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1VMCAtVycgJworCWdpdCBkaWZmIC1VMCAtVyA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGFjdHVhbCBleHBlY3RlZAorJworCitjYXQgPDxcRU9GID5leHBlY3RlZAorZGlmZiAtLWdpdCBhL2hlbGxvLmMgYi9oZWxsby5jCistLS0gYS9oZWxsby5jCisrKysgYi9oZWxsby5jCitAQCAtOSw5ICs5LDggQEAgc3RhdGljIGludCBhKHZvaWQpCisgCisgc3RhdGljIGludCBoZWxsb193b3JsZCh2b2lkKQorIHsKKy0JLyogQ2xhc3NpYy4gKi8KKyAJcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOworIAorIAkvKiBTdWNjZXNzISAqLworIAlyZXR1cm4gMDsKKyB9CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtVycgJworCWdpdCBkaWZmIC1XID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggYWN0dWFsIGV4cGVjdGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA1Mi1zdGF0LW91dHB1dC5zaCBiL3QvdDQwNTItc3RhdC1vdXRwdXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjY4YWZlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTItc3RhdC1vdXRwdXQuc2gKQEAgLTAsMCArMSwzMzYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgWmJpZ25pZXcgSsSZZHJ6ZWpld3NraS1Tem1laworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IC0tc3RhdCBvdXRwdXQgb2YgdmFyaW91cyBjb21tYW5kcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCisjIDEyMCBjaGFyYWN0ZXIgbmFtZQorbmFtZT1hYWFhYWFhYWFhCituYW1lPSRuYW1lJG5hbWUkbmFtZSRuYW1lJG5hbWUkbmFtZSRuYW1lJG5hbWUkbmFtZSRuYW1lJG5hbWUkbmFtZQordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyYXRpb24nICcKKwk+IiRuYW1lIiAmJgorCWdpdCBhZGQgIiRuYW1lIiAmJgorCWdpdCBjb21taXQgLW0gbWVzc2FnZSAmJgorCWVjaG8gYSA+IiRuYW1lIiAmJgorCWdpdCBjb21taXQgLW0gbWVzc2FnZSAiJG5hbWUiCisnCisKK3doaWxlIHJlYWQgY21kIGFyZ3MKK2RvCisJY2F0ID5leHBlY3QgPDwtJ0VPRicKKwkgLi4uYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIHwgMSArCisJRU9GCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZDogc21hbGwgY2hhbmdlIHdpdGggbG9uZyBuYW1lIGdpdmVzIG1vcmUgc3BhY2UgdG8gdGhlIG5hbWUiICcKKwkJZ2l0ICRjbWQgJGFyZ3MgPm91dHB1dCAmJgorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwljYXQgPmV4cGVjdCA8PC0nRU9GJworCSAuLi5hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEgKworCUVPRgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0PXdpZHRoOiBhIGxvbmcgbmFtZSBpcyBnaXZlbiBtb3JlIHJvb20gd2hlbiB0aGUgYmFyIGlzIHNob3J0IiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdD00MCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0LXdpZHRoPXdpZHRoIHdpdGggbG9uZyBuYW1lIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC13aWR0aD00MCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCWNhdCA+ZXhwZWN0IDw8LSdFT0YnCisJIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEgKworCUVPRgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0PS4uLixuYW1lLXdpZHRoIHdpdGggbG9uZyBuYW1lIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdD02MCwzMCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0LW5hbWUtd2lkdGggd2l0aCBsb25nIG5hbWUiICcKKwkJZ2l0ICRjbWQgJGFyZ3MgLS1zdGF0LW5hbWUtd2lkdGg9MzAgPm91dHB1dCAmJgorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCitkb25lIDw8XEVPRgorZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0CitkaWZmIEhFQUReIEhFQUQgLS1zdGF0CitzaG93IC0tc3RhdAorbG9nIC0xIC0tc3RhdAorRU9GCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyYXRpb24gZm9yIGJpZyBjaGFuZ2UgdGVzdHMnICcKKwk+YWJjZCAmJgorCWdpdCBhZGQgYWJjZCAmJgorCWdpdCBjb21taXQgLW0gbWVzc2FnZSAmJgorCWk9MCAmJgorCXdoaWxlIHRlc3QgJGkgLWx0IDEwMDAKKwlkbworCQllY2hvICRpICYmIGk9JCgoJGkgKyAxKSkKKwlkb25lID5hYmNkICYmCisJZ2l0IGNvbW1pdCAtbSBtZXNzYWdlIGFiY2QKKycKKworY2F0ID5leHBlY3Q4MCA8PCdFT0YnCisgYWJjZCB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK2NhdCA+ZXhwZWN0ODAtZ3JhcGggPDwnRU9GJworfCAgYWJjZCB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK2NhdCA+ZXhwZWN0MjAwIDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3QyMDAtZ3JhcGggPDwnRU9GJworfCAgYWJjZCB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCit3aGlsZSByZWFkIHZlcmIgZXhwZWN0IGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgJHZlcmIgQ09MVU1OUyAoYmlnIGNoYW5nZSkiICcKKwkJQ09MVU1OUz0yMDAgZ2l0ICRjbWQgJGFyZ3MgPm91dHB1dAorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wICIkZXhwZWN0IiBhY3R1YWwKKwknCisKKwl0ZXN0ICIkY21kIiAhPSBkaWZmIHx8IGNvbnRpbnVlCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tZ3JhcGggJHZlcmIgQ09MVU1OUyAoYmlnIGNoYW5nZSkiICcKKwkJQ09MVU1OUz0yMDAgZ2l0ICRjbWQgJGFyZ3MgLS1ncmFwaCA+b3V0cHV0CisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QtZ3JhcGgiIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitpZ25vcmVzIGV4cGVjdDgwIGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorcmVzcGVjdHMgZXhwZWN0MjAwIGRpZmYgSEVBRF4gSEVBRCAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDIwMCBzaG93IC0tc3RhdAorcmVzcGVjdHMgZXhwZWN0MjAwIGxvZyAtMSAtLXN0YXQKK0VPRgorCitjYXQgPmV4cGVjdDQwIDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDQwLWdyYXBoIDw8J0VPRicKK3wgIGFiY2QgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKworRU9GCit3aGlsZSByZWFkIHZlcmIgZXhwZWN0IGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgJHZlcmIgbm90IGVub3VnaCBDT0xVTU5TIChiaWcgY2hhbmdlKSIgJworCQlDT0xVTU5TPTQwIGdpdCAkY21kICRhcmdzID5vdXRwdXQKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAiJGV4cGVjdCIgYWN0dWFsCisJJworCisJdGVzdCAiJGNtZCIgIT0gZGlmZiB8fCBjb250aW51ZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLWdyYXBoICR2ZXJiIG5vdCBlbm91Z2ggQ09MVU1OUyAoYmlnIGNoYW5nZSkiICcKKwkJQ09MVU1OUz00MCBnaXQgJGNtZCAkYXJncyAtLWdyYXBoID5vdXRwdXQKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAiJGV4cGVjdC1ncmFwaCIgYWN0dWFsCisJJworZG9uZSA8PFxFT0YKK2lnbm9yZXMgZXhwZWN0ODAgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0CityZXNwZWN0cyBleHBlY3Q0MCBkaWZmIEhFQUReIEhFQUQgLS1zdGF0CityZXNwZWN0cyBleHBlY3Q0MCBzaG93IC0tc3RhdAorcmVzcGVjdHMgZXhwZWN0NDAgbG9nIC0xIC0tc3RhdAorRU9GCisKK2NhdCA+ZXhwZWN0NDAgPDwnRU9GJworIGFiY2QgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK2NhdCA+ZXhwZWN0NDAtZ3JhcGggPDwnRU9GJworfCAgYWJjZCB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgord2hpbGUgcmVhZCB2ZXJiIGV4cGVjdCBjbWQgYXJncworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kICR2ZXJiIHN0YXRHcmFwaFdpZHRoIGNvbmZpZyIgJworCQlnaXQgLWMgZGlmZi5zdGF0R3JhcGhXaWR0aD0yNiAkY21kICRhcmdzID5vdXRwdXQKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAiJGV4cGVjdCIgYWN0dWFsCisJJworCisJdGVzdCAiJGNtZCIgIT0gZGlmZiB8fCBjb250aW51ZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLWdyYXBoICR2ZXJiIHN0YXRHcmFwaFdpZHRoIGNvbmZpZyIgJworCQlnaXQgLWMgZGlmZi5zdGF0R3JhcGhXaWR0aD0yNiAkY21kICRhcmdzIC0tZ3JhcGggPm91dHB1dAorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wICIkZXhwZWN0LWdyYXBoIiBhY3R1YWwKKwknCitkb25lIDw8XEVPRgoraWdub3JlcyBleHBlY3Q4MCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQKK3Jlc3BlY3RzIGV4cGVjdDQwIGRpZmYgSEVBRF4gSEVBRCAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDQwIHNob3cgLS1zdGF0CityZXNwZWN0cyBleHBlY3Q0MCBsb2cgLTEgLS1zdGF0CitFT0YKKworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgYWJjZCB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3QtZ3JhcGggPDwnRU9GJworfCAgYWJjZCB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgord2hpbGUgcmVhZCBjbWQgYXJncworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tc3RhdD13aWR0aCB3aXRoIGJpZyBjaGFuZ2UiICcKKwkJZ2l0ICRjbWQgJGFyZ3MgLS1zdGF0PTQwID5vdXRwdXQKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLXN0YXQtd2lkdGg9d2lkdGggd2l0aCBiaWcgY2hhbmdlIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC13aWR0aD00MCA+b3V0cHV0CisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0LWdyYXBoLXdpZHRoIHdpdGggYmlnIGNoYW5nZSIgJworCQlnaXQgJGNtZCAkYXJncyAtLXN0YXQtZ3JhcGgtd2lkdGg9MjYgPm91dHB1dAorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0ICIkY21kIiAhPSBkaWZmIHx8IGNvbnRpbnVlCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tc3RhdC13aWR0aD13aWR0aCAtLWdyYXBoIHdpdGggYmlnIGNoYW5nZSIgJworCQlnaXQgJGNtZCAkYXJncyAtLXN0YXQtd2lkdGg9NDAgLS1ncmFwaCA+b3V0cHV0CisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LWdyYXBoIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0LWdyYXBoLXdpZHRoIC0tZ3JhcGggd2l0aCBiaWcgY2hhbmdlIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC1ncmFwaC13aWR0aD0yNiAtLWdyYXBoID5vdXRwdXQKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QtZ3JhcGggYWN0dWFsCisJJworZG9uZSA8PFxFT0YKK2Zvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorZGlmZiBIRUFEXiBIRUFEIC0tc3RhdAorc2hvdyAtLXN0YXQKK2xvZyAtMSAtLXN0YXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJhdGlvbiBmb3IgbG9uZyBmaWxlbmFtZSB0ZXN0cycgJworCWNwIGFiY2QgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhICYmCisJZ2l0IGFkZCBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgJiYKKwlnaXQgY29tbWl0IC1tIG1lc3NhZ2UKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIHwgMTAwMCArKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3QtZ3JhcGggPDwnRU9GJworfCAgLi4uYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxMDAwICsrKysrKysrKysrKworRU9GCit3aGlsZSByZWFkIGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0PXdpZHRoIHdpdGggYmlnIGNoYW5nZSBpcyBtb3JlIGJhbGFuY2VkIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC13aWR0aD02MCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3QgIiRjbWQiICE9IGRpZmYgfHwgY29udGludWUKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0PXdpZHRoIC0tZ3JhcGggd2l0aCBiaWcgY2hhbmdlIGlzIGJhbGFuY2VkIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC13aWR0aD02MCAtLWdyYXBoID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QtZ3JhcGggYWN0dWFsCisJJworZG9uZSA8PFxFT0YKK2Zvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorZGlmZiBIRUFEXiBIRUFEIC0tc3RhdAorc2hvdyAtLXN0YXQKK2xvZyAtMSAtLXN0YXQKK0VPRgorCitjYXQgPmV4cGVjdDgwIDw8J0VPRicKKyAuLi5hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3Q4MC1ncmFwaCA8PCdFT0YnCit8ICAuLi5hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3QyMDAgPDwnRU9GJworIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDIwMC1ncmFwaCA8PCdFT0YnCit8ICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK3doaWxlIHJlYWQgdmVyYiBleHBlY3QgY21kIGFyZ3MKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAkdmVyYiBDT0xVTU5TIChsb25nIGZpbGVuYW1lKSIgJworCQlDT0xVTU5TPTIwMCBnaXQgJGNtZCAkYXJncyA+b3V0cHV0CisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QiIGFjdHVhbAorCScKKworCXRlc3QgIiRjbWQiICE9IGRpZmYgfHwgY29udGludWUKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1ncmFwaCAkdmVyYiBDT0xVTU5TIChsb25nIGZpbGVuYW1lKSIgJworCQlDT0xVTU5TPTIwMCBnaXQgJGNtZCAkYXJncyAtLWdyYXBoID5vdXRwdXQKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAiJGV4cGVjdC1ncmFwaCIgYWN0dWFsCisJJworZG9uZSA8PFxFT0YKK2lnbm9yZXMgZXhwZWN0ODAgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0CityZXNwZWN0cyBleHBlY3QyMDAgZGlmZiBIRUFEXiBIRUFEIC0tc3RhdAorcmVzcGVjdHMgZXhwZWN0MjAwIHNob3cgLS1zdGF0CityZXNwZWN0cyBleHBlY3QyMDAgbG9nIC0xIC0tc3RhdAorRU9GCisKK2NhdCA+ZXhwZWN0MSA8PCdFT0YnCisgLi4uYWFhYWFhYSB8IDEwMDAgKysrKysrCitFT0YKK2NhdCA+ZXhwZWN0MS1ncmFwaCA8PCdFT0YnCit8ICAuLi5hYWFhYWFhIHwgMTAwMCArKysrKysKK0VPRgord2hpbGUgcmVhZCB2ZXJiIGV4cGVjdCBjbWQgYXJncworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIENPTFVNTlNfQ0FOX0JFXzEgXAorCQkiJGNtZCAkdmVyYiBwcmVmaXggZ3JlYXRlciB0aGFuIENPTFVNTlMgKGJpZyBjaGFuZ2UpIiAnCisJCUNPTFVNTlM9MSBnaXQgJGNtZCAkYXJncyA+b3V0cHV0CisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QiIGFjdHVhbAorCScKKworCXRlc3QgIiRjbWQiICE9IGRpZmYgfHwgY29udGludWUKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgQ09MVU1OU19DQU5fQkVfMSBcCisJCSIkY21kIC0tZ3JhcGggJHZlcmIgcHJlZml4IGdyZWF0ZXIgdGhhbiBDT0xVTU5TIChiaWcgY2hhbmdlKSIgJworCQlDT0xVTU5TPTEgZ2l0ICRjbWQgJGFyZ3MgLS1ncmFwaCA+b3V0cHV0CisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QtZ3JhcGgiIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitpZ25vcmVzIGV4cGVjdDgwIGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorcmVzcGVjdHMgZXhwZWN0MSBkaWZmIEhFQUReIEhFQUQgLS1zdGF0CityZXNwZWN0cyBleHBlY3QxIHNob3cgLS1zdGF0CityZXNwZWN0cyBleHBlY3QxIGxvZyAtMSAtLXN0YXQKK0VPRgorCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgYWJjZCB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1zdGF0IHJlc3BlY3RzIENPTFVNTlMgKGJpZyBjaGFuZ2UpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCBIRUFEXl4gJiYKKwlDT0xVTU5TPTEwMCBnaXQgbWVyZ2UgLS1zdGF0IC0tbm8tZmYgbWFzdGVyXiA+b3V0cHV0ICYmCisJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tc3RhdCByZXNwZWN0cyBDT0xVTU5TIChsb25nIGZpbGVuYW1lKScgJworCUNPTFVNTlM9MTAwIGdpdCBtZXJnZSAtLXN0YXQgLS1uby1mZiBtYXN0ZXIgPm91dHB1dCAmJgorCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA1My1kaWZmLW5vLWluZGV4LnNoIGIvdC90NDA1My1kaWZmLW5vLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk3OWU5ODMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDUzLWRpZmYtbm8taW5kZXguc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLS1uby1pbmRleCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgYSAmJgorCW1rZGlyIGIgJiYKKwllY2hvIDEgPmEvMSAmJgorCWVjaG8gMiA+YS8yICYmCisJZ2l0IGluaXQgcmVwbyAmJgorCWVjaG8gMSA+cmVwby9hICYmCisJbWtkaXIgLXAgbm9uL2dpdCAmJgorCWVjaG8gMSA+bm9uL2dpdC9hICYmCisJZWNobyAxID5ub24vZ2l0L2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1uby1pbmRleCBkaXJlY3RvcmllcycgJworCWdpdCBkaWZmIC0tbm8taW5kZXggYSBiID5jbnQKKwl0ZXN0ICQ/ID0gMSAmJiB0ZXN0X2xpbmVfY291bnQgPSAxNCBjbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1uby1pbmRleCByZWxhdGl2ZSBwYXRoIG91dHNpZGUgcmVwbycgJworCSgKKwkJY2QgcmVwbyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYgLS1uby1pbmRleCBhIC4uL25vbi9naXQvYSAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYgLS1uby1pbmRleCAuLi9ub24vZ2l0L2EgLi4vbm9uL2dpdC9iCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNTQtZGlmZi1ib2d1cy10cmVlLnNoIGIvdC90NDA1NC1kaWZmLWJvZ3VzLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDg0M2M4NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTQtZGlmZi1ib2d1cy10cmVlLnNoCkBAIC0wLDAgKzEsODMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRpZmYgd2l0aCBhIGJvZ3VzIHRyZWUgY29udGFpbmluZyB0aGUgbnVsbCBzaGExJworLiAuL3Rlc3QtbGliLnNoCisKK2VtcHR5X3RyZWU9NGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYm9ndXMgdHJlZScgJworCWJvZ3VzX3RyZWU9JCgKKwkJcHJpbnRmICIxMDA2NDQgZm9vUVFRUVFRUVFRUVFRUVFRUVFRUVFRIiB8CisJCXFfdG9fbnVsIHwKKwkJZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gLXQgdHJlZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHRyZWUgd2l0aCBtYXRjaGluZyBmaWxlJyAnCisJZWNobyBiYXIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ29vZF90cmVlPSQoZ2l0IHdyaXRlLXRyZWUpCisJYmxvYj0kKGdpdCByZXYtcGFyc2UgOmZvbykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3IGRpZmYgc2hvd3MgbnVsbCBzaGExIChhZGRpdGlvbiknICcKKwllY2hvICI6MDAwMDAwIDEwMDY0NCAkX3o0MCAkX3o0MCBBCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLXRyZWUgJGVtcHR5X3RyZWUgJGJvZ3VzX3RyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3IGRpZmYgc2hvd3MgbnVsbCBzaGExIChyZW1vdmFsKScgJworCWVjaG8gIjoxMDA2NDQgMDAwMDAwICRfejQwICRfejQwIEQJZm9vIiA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYtdHJlZSAkYm9ndXNfdHJlZSAkZW1wdHlfdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYXcgZGlmZiBzaG93cyBudWxsIHNoYTEgKG1vZGlmaWNhdGlvbiknICcKKwllY2hvICI6MTAwNjQ0IDEwMDY0NCAkYmxvYiAkX3o0MCBNCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLXRyZWUgJGdvb2RfdHJlZSAkYm9ndXNfdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYXcgZGlmZiBzaG93cyBudWxsIHNoYTEgKG90aGVyIGRpcmVjdGlvbiknICcKKwllY2hvICI6MTAwNjQ0IDEwMDY0NCAkX3o0MCAkYmxvYiBNCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLXRyZWUgJGJvZ3VzX3RyZWUgJGdvb2RfdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYXcgZGlmZiBzaG93cyBudWxsIHNoYTEgKHJldmVyc2UpJyAnCisJZWNobyAiOjEwMDY0NCAxMDA2NDQgJF96NDAgJGJsb2IgTQlmb28iID5leHBlY3QgJiYKKwlnaXQgZGlmZi10cmVlIC1SICRnb29kX3RyZWUgJGJvZ3VzX3RyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3IGRpZmYgc2hvd3MgbnVsbCBzaGExIChpbmRleCknICcKKwllY2hvICI6MTAwNjQ0IDEwMDY0NCAkX3o0MCAkYmxvYiBNCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLWluZGV4ICRib2d1c190cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChhZGRpdGlvbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRlbXB0eV90cmVlICRib2d1c190cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChyZW1vdmFsKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLXRyZWUgLXAgJGJvZ3VzX3RyZWUgJGVtcHR5X3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZmFpbHMgZHVlIHRvIGJvZ3VzIHNoYTEgKG1vZGlmaWNhdGlvbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRnb29kX3RyZWUgJGJvZ3VzX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZmFpbHMgZHVlIHRvIGJvZ3VzIHNoYTEgKG90aGVyIGRpcmVjdGlvbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRib2d1c190cmVlICRnb29kX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZmFpbHMgZHVlIHRvIGJvZ3VzIHNoYTEgKHJldmVyc2UpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtdHJlZSAtUiAtcCAkZ29vZF90cmVlICRib2d1c190cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChpbmRleCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtcCAkYm9ndXNfdHJlZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDAtYXBwbHktc3RhdC5zaCBiL3QvdDQxMDAtYXBwbHktc3RhdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NDRiOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC1hcHBseS1zdGF0LnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgdGVzdCwgd2l0aCAtLXJlY291bnQKKworJworLiAuL3Rlc3QtbGliLnNoCisKK1VOQz0ncy9eXChAQCAtWzEtOV1bMC05XSpcKSxbMC05XSogXCgrWzEtOV1bMC05XSpcKSxbMC05XSogQEAvXDEsOTk5IFwyLDk5OSBAQC8nCisKK251bT0wCit3aGlsZSByZWFkIHRpdGxlCitkbworCW51bT0kKCggJG51bSArIDEgKSkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkdGl0bGUiICcKKwkJZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgXAorCQkJPCIkVEVTVF9ESVJFQ1RPUlkvdDQxMDAvdC1hcHBseS0kbnVtLnBhdGNoIiA+Y3VycmVudCAmJgorCQl0ZXN0X2kxOG5jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDQxMDAvdC1hcHBseS0kbnVtLmV4cGVjdCBjdXJyZW50CisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJHRpdGxlIHdpdGggcmVjb3VudCIgJworCQlzZWQgLWUgIiRVTkMiIDwiJFRFU1RfRElSRUNUT1JZL3Q0MTAwL3QtYXBwbHktJG51bS5wYXRjaCIgfAorCQlnaXQgYXBwbHkgLS1yZWNvdW50IC0tc3RhdCAtLXN1bW1hcnkgPmN1cnJlbnQgJiYKKwkJdGVzdF9pMThuY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q0MTAwL3QtYXBwbHktJG51bS5leHBlY3QgY3VycmVudAorCScKK2RvbmUgPDxcRU9GCityZW5hbWUKK2NvcHkKK3Jld3JpdGUKK21vZGUKK25vbiBnaXQgKDEpCitub24gZ2l0ICgyKQorbm9uIGdpdCAoMykKK2luY29tcGxldGUgKDEpCitpbmNvbXBsZXRlICgyKQorRU9GCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTEuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTEuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGU2NGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktMS5leHBlY3QKQEAgLTAsMCArMSwxMSBAQAorIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dCB8ICAgMTIgKysrKysrLS0tLS0tCisgRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0IHwgICAxMCArKysrKy0tLS0tCisgRG9jdW1lbnRhdGlvbi9naXQudHh0ICAgICAgICAgIHwgICAgNiArKystLS0KKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsrKy0tLQorIHNzaC1wdWxsLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKystLQorIHNzaC1wdXNoLmMgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKysrKysrKy0tLS0tLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorIHJlbmFtZSBEb2N1bWVudGF0aW9uL3tnaXQtcnB1bGwudHh0ID0+IGdpdC1zc2gtcHVsbC50eHR9ICg5MCUpCisgcmVuYW1lIERvY3VtZW50YXRpb24ve2dpdC1ycHVzaC50eHQgPT4gZ2l0LXNzaC1wdXNoLnR4dH0gKDcxJSkKKyByZW5hbWUgcnB1bGwuYyA9PiBzc2gtcHVsbC5jICg5NyUpCisgcmVuYW1lIHJwdXNoLmMgPT4gc3NoLXB1c2guYyAoOTMlKQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTEucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGFiNTRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTEucGF0Y2gKQEAgLTAsMCArMSwxOTQgQEAKKzQxOGFhZjg0N2E4YjNmZmZmYjRmNzc3YTJkZDUyNjJjYTVjZTBlZjcgKGZyb20gZGM5Mzg0MTcxNWRmYTlhOWNkZGE2ZjJjNGEyNWVlYzgzMWVhN2FhMCkKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQKK3NpbWlsYXJpdHkgaW5kZXggOTAlCityZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQKK3JlbmFtZSB0byBEb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0CitAQCAtMSwyMSArMSwyMSBAQAorLWdpdC1ycHVsbCgxKQorLT09PT09PT09PT09PQorK2dpdC1zc2gtcHVsbCgxKQorKz09PT09PT09PT09PT09PQorIHYwLjEsIE1heSAyMDA1CisgCisgTkFNRQorIC0tLS0KKy1naXQtcnB1bGwgLSBQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgorK2dpdC1zc2gtcHVsbCAtIFB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCisgCisgCisgCisgU1lOT1BTSVMKKyAtLS0tLS0tLQorLSdnaXQtcnB1bGwnIFstY10gWy10XSBbLWFdIFstZF0gWy12XSBbLS1yZWNvdmVyXSBjb21taXQtaWQgdXJsCisrJ2dpdC1zc2gtcHVsbCcgWy1jXSBbLXRdIFstYV0gWy1kXSBbLXZdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwKKyAKKyBERVNDUklQVElPTgorIC0tLS0tLS0tLS0tCistUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24sIGludm9raW5nIGdpdC1ycHVzaCBvbgorLXRoZSBvdGhlciBlbmQuCisrUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24sIGludm9raW5nIGdpdC1zc2gtcHVzaAorK29uIHRoZSBvdGhlciBlbmQuCisgCisgT1BUSU9OUworIC0tLS0tLS0KK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQKK3NpbWlsYXJpdHkgaW5kZXggNzElCityZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQKK3JlbmFtZSB0byBEb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdXNoLnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0CitAQCAtMSwxOSArMSwxOSBAQAorLWdpdC1ycHVzaCgxKQorLT09PT09PT09PT09PQorK2dpdC1zc2gtcHVzaCgxKQorKz09PT09PT09PT09PT09PQorIHYwLjEsIE1heSAyMDA1CisgCisgTkFNRQorIC0tLS0KKy1naXQtcnB1c2ggLSBIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXJwdWxsCisrZ2l0LXNzaC1wdXNoIC0gSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1zc2gtcHVsbAorIAorIAorIFNZTk9QU0lTCisgLS0tLS0tLS0KKy0nZ2l0LXJwdXNoJworKydnaXQtc3NoLXB1c2gnCisgCisgREVTQ1JJUFRJT04KKyAtLS0tLS0tLS0tLQorLUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtcnB1bGwuCisrSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1zc2gtcHVsbC4KKyAKKyAKKyBBdXRob3IKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CitAQCAtMTQ4LDcgKzE0OCw3IEBAIGxpbms6Z2l0LXJlc29sdmUtc2NyaXB0Lmh0bWxbZ2l0LXJlc29sdmUKKyBsaW5rOmdpdC10YWctc2NyaXB0Lmh0bWxbZ2l0LXRhZy1zY3JpcHRdOjoKKyAJQW4gZXhhbXBsZSBzY3JpcHQgdG8gY3JlYXRlIGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEcKKyAKKy1saW5rOmdpdC1ycHVsbC5odG1sW2dpdC1ycHVsbF06OgorK2xpbms6Z2l0LXNzaC1wdWxsLmh0bWxbZ2l0LXNzaC1wdWxsXTo6CisgCVB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCisgCisgSW50ZXJvZ2F0b3JzOgorQEAgLTE1Niw4ICsxNTYsOCBAQCBJbnRlcm9nYXRvcnM6CisgbGluazpnaXQtZGlmZi1oZWxwZXIuaHRtbFtnaXQtZGlmZi1oZWxwZXJdOjoKKyAJR2VuZXJhdGVzIHBhdGNoIGZvcm1hdCBvdXRwdXQgZm9yIGdpdC1kaWZmLSoKKyAKKy1saW5rOmdpdC1ycHVzaC5odG1sW2dpdC1ycHVzaF06OgorLQlIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXJwdWxsCisrbGluazpnaXQtc3NoLXB1c2guaHRtbFtnaXQtc3NoLXB1c2hdOjoKKysJSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1zc2gtcHVsbAorIAorIAorIAorZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTMwLDcgKzMwLDcgQEAgUFJPRz0gICBnaXQtdXBkYXRlLWluZGV4IGdpdC1kaWZmLWZpbGVzCisgCWdpdC1jaGVja291dC1jYWNoZSBnaXQtZGlmZi10cmVlIGdpdC1yZXYtdHJlZSBnaXQtbHMtZmlsZXMgXAorIAlnaXQtY2hlY2stZmlsZXMgZ2l0LWxzLXRyZWUgZ2l0LW1lcmdlLWJhc2UgZ2l0LW1lcmdlLWNhY2hlIFwKKyAJZ2l0LXVucGFjay1maWxlIGdpdC1leHBvcnQgZ2l0LWRpZmYtY2FjaGUgZ2l0LWNvbnZlcnQtY2FjaGUgXAorLQlnaXQtaHR0cC1wdWxsIGdpdC1ycHVzaCBnaXQtcnB1bGwgZ2l0LXJldi1saXN0IGdpdC1ta3RhZyBcCisrCWdpdC1odHRwLXB1bGwgZ2l0LXNzaC1wdXNoIGdpdC1zc2gtcHVsbCBnaXQtcmV2LWxpc3QgZ2l0LW1rdGFnIFwKKyAJZ2l0LWRpZmYtaGVscGVyIGdpdC10YXItdHJlZSBnaXQtbG9jYWwtcHVsbCBnaXQtd3JpdGUtYmxvYiBcCisgCWdpdC1nZXQtdGFyLWNvbW1pdC1pZCBnaXQtbWtkZWx0YSBnaXQtYXBwbHkgZ2l0LXN0cmlwc3BhY2UKKyAKK0BAIC0xMDUsOCArMTA1LDggQEAgZ2l0LWRpZmYtY2FjaGU6IGRpZmYtY2FjaGUuYworIGdpdC1jb252ZXJ0LWNhY2hlOiBjb252ZXJ0LWNhY2hlLmMKKyBnaXQtaHR0cC1wdWxsOiBodHRwLXB1bGwuYyBwdWxsLmMKKyBnaXQtbG9jYWwtcHVsbDogbG9jYWwtcHVsbC5jIHB1bGwuYworLWdpdC1ycHVzaDogcnNoLmMKKy1naXQtcnB1bGw6IHJzaC5jIHB1bGwuYworK2dpdC1zc2gtcHVzaDogcnNoLmMKKytnaXQtc3NoLXB1bGw6IHJzaC5jIHB1bGwuYworIGdpdC1yZXYtbGlzdDogcmV2LWxpc3QuYworIGdpdC1ta3RhZzogbWt0YWcuYworIGdpdC1kaWZmLWhlbHBlcjogZGlmZi1oZWxwZXIuYworZGlmZiAtLWdpdCBhL3JwdWxsLmMgYi9zc2gtcHVsbC5jCitzaW1pbGFyaXR5IGluZGV4IDk3JQorcmVuYW1lIGZyb20gcnB1bGwuYworcmVuYW1lIHRvIHNzaC1wdWxsLmMKKy0tLSBhL3JwdWxsLmMKKysrKyBiL3NzaC1wdWxsLmMKK0BAIC02NCwxMyArNjQsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJYXJnKys7CisgCX0KKyAJaWYgKGFyZ2MgPCBhcmcgKyAyKSB7CistCQl1c2FnZSgiZ2l0LXJwdWxsIFstY10gWy10XSBbLWFdIFstdl0gWy1kXSBbLS1yZWNvdmVyXSBjb21taXQtaWQgdXJsIik7CisrCQl1c2FnZSgiZ2l0LXNzaC1wdWxsIFstY10gWy10XSBbLWFdIFstdl0gWy1kXSBbLS1yZWNvdmVyXSBjb21taXQtaWQgdXJsIik7CisgCQlyZXR1cm4gMTsKKyAJfQorIAljb21taXRfaWQgPSBhcmd2W2FyZ107CisgCXVybCA9IGFyZ3ZbYXJnICsgMV07CisgCistCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1ycHVzaCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCisrCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1zc2gtcHVzaCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCisgCQlyZXR1cm4gMTsKKyAKKyAJaWYgKGdldF92ZXJzaW9uKCkpCitkaWZmIC0tZ2l0IGEvcnB1c2guYyBiL3NzaC1wdXNoLmMKK3NpbWlsYXJpdHkgaW5kZXggOTMlCityZW5hbWUgZnJvbSBycHVzaC5jCityZW5hbWUgdG8gc3NoLXB1c2guYworLS0tIGEvcnB1c2guYworKysrIGIvc3NoLXB1c2guYworQEAgLTE2LDcgKzE2LDcgQEAgaW50IHNlcnZlX29iamVjdChpbnQgZmRfaW4sIGludCBmZF9vdXQpIAorIAlkbyB7CisgCQlzaXplID0gcmVhZChmZF9pbiwgc2hhMSArIHBvc24sIDIwIC0gcG9zbik7CisgCQlpZiAoc2l6ZSA8IDApIHsKKy0JCQlwZXJyb3IoImdpdC1ycHVzaDogcmVhZCAiKTsKKysJCQlwZXJyb3IoImdpdC1zc2gtcHVzaDogcmVhZCAiKTsKKyAJCQlyZXR1cm4gLTE7CisgCQl9CisgCQlpZiAoIXNpemUpCitAQCAtMzAsNyArMzAsNyBAQCBpbnQgc2VydmVfb2JqZWN0KGludCBmZF9pbiwgaW50IGZkX291dCkgCisgCWJ1ZiA9IG1hcF9zaGExX2ZpbGUoc2hhMSwgJm9ianNpemUpOworIAkKKyAJaWYgKCFidWYpIHsKKy0JCWZwcmludGYoc3RkZXJyLCAiZ2l0LXJwdXNoOiBjb3VsZCBub3QgZmluZCAlc1xuIiwgCisrCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1zc2gtcHVzaDogY291bGQgbm90IGZpbmQgJXNcbiIsIAorIAkJCXNoYTFfdG9faGV4KHNoYTEpKTsKKyAJCXJlbW90ZSA9IC0xOworIAl9CitAQCAtNDUsOSArNDUsOSBAQCBpbnQgc2VydmVfb2JqZWN0KGludCBmZF9pbiwgaW50IGZkX291dCkgCisgCQlzaXplID0gd3JpdGUoZmRfb3V0LCBidWYgKyBwb3NuLCBvYmpzaXplIC0gcG9zbik7CisgCQlpZiAoc2l6ZSA8PSAwKSB7CisgCQkJaWYgKCFzaXplKSB7CistCQkJCWZwcmludGYoc3RkZXJyLCAiZ2l0LXJwdXNoOiB3cml0ZSBjbG9zZWQiKTsKKysJCQkJZnByaW50ZihzdGRlcnIsICJnaXQtc3NoLXB1c2g6IHdyaXRlIGNsb3NlZCIpOworIAkJCX0gZWxzZSB7CistCQkJCXBlcnJvcigiZ2l0LXJwdXNoOiB3cml0ZSAiKTsKKysJCQkJcGVycm9yKCJnaXQtc3NoLXB1c2g6IHdyaXRlICIpOworIAkJCX0KKyAJCQlyZXR1cm4gLTE7CisgCQl9CitAQCAtNzEsNyArNzEsNyBAQCB2b2lkIHNlcnZpY2UoaW50IGZkX2luLCBpbnQgZmRfb3V0KSB7CisgCQlyZXR2YWwgPSByZWFkKGZkX2luLCAmdHlwZSwgMSk7CisgCQlpZiAocmV0dmFsIDwgMSkgeworIAkJCWlmIChyZXR2YWwgPCAwKQorLQkJCQlwZXJyb3IoInJwdXNoOiByZWFkICIpOworKwkJCQlwZXJyb3IoImdpdC1zc2gtcHVzaDogcmVhZCAiKTsKKyAJCQlyZXR1cm47CisgCQl9CisgCQlpZiAodHlwZSA9PSAndicgJiYgc2VydmVfdmVyc2lvbihmZF9pbiwgZmRfb3V0KSkKK0BAIC05MSwxMiArOTEsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgICAgICAgICBhcmcrKzsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmIChhcmdjIDwgYXJnICsgMikgeworLQkJdXNhZ2UoImdpdC1ycHVzaCBbLWNdIFstdF0gWy1hXSBjb21taXQtaWQgdXJsIik7CisrCQl1c2FnZSgiZ2l0LXNzaC1wdXNoIFstY10gWy10XSBbLWFdIGNvbW1pdC1pZCB1cmwiKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICB9CisgCWNvbW1pdF9pZCA9IGFyZ3ZbYXJnXTsKKyAJdXJsID0gYXJndlthcmcgKyAxXTsKKy0JaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXJwdWxsIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKysJaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXNzaC1wdWxsIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKyAJCXJldHVybiAxOworIAorIAlzZXJ2aWNlKGZkX2luLCBmZF9vdXQpOwpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTIuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTIuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZTY0NTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktMi5leHBlY3QKQEAgLTAsMCArMSw1IEBACisgTWFrZWZpbGUgICAgICAgICB8ICAgIDIgKy0KKyBnaXQtZmV0Y2gtc2NyaXB0IHwgICAgNSAtLS0tLQorIGdpdC1wdWxsLXNjcmlwdCAgfCAgIDM0ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCisgY29weSBnaXQtcHVsbC1zY3JpcHQgPT4gZ2l0LWZldGNoLXNjcmlwdCAoODclKQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTIucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWM3ZDYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTIucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorN2VmNzY5MjVkOWMxOWVmNzQ4NzRlMTczNWUyNDM2ZTU2ZDBjNDg5NyAoZnJvbSA2YjE0ZDdmYWYwYmFkMDI2YTgxYTI3YmFjMDdiNDc2OTFmNjIxYjhmKQorZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTIwLDcgKzIwLDcgQEAgSU5TVEFMTD1pbnN0YWxsCisgCisgU0NSSVBUUz1naXQtYXBwbHktcGF0Y2gtc2NyaXB0IGdpdC1tZXJnZS1vbmUtZmlsZS1zY3JpcHQgZ2l0LXBydW5lLXNjcmlwdCBcCisgCWdpdC1wdWxsLXNjcmlwdCBnaXQtdGFnLXNjcmlwdCBnaXQtcmVzb2x2ZS1zY3JpcHQgZ2l0LXdoYXRjaGFuZ2VkIFwKKy0JZ2l0LWRlbHRhZnktc2NyaXB0CisrCWdpdC1kZWx0YWZ5LXNjcmlwdCBnaXQtZmV0Y2gtc2NyaXB0CisgCisgUFJPRz0gICBnaXQtdXBkYXRlLWluZGV4IGdpdC1kaWZmLWZpbGVzIGdpdC1pbml0LWRiIGdpdC13cml0ZS10cmVlIFwKKyAJZ2l0LXJlYWQtdHJlZSBnaXQtY29tbWl0LXRyZWUgZ2l0LWNhdC1maWxlIGdpdC1mc2NrLWNhY2hlIFwKK2RpZmYgLS1naXQgYS9naXQtcHVsbC1zY3JpcHQgYi9naXQtZmV0Y2gtc2NyaXB0CitzaW1pbGFyaXR5IGluZGV4IDg3JQorY29weSBmcm9tIGdpdC1wdWxsLXNjcmlwdAorY29weSB0byBnaXQtZmV0Y2gtc2NyaXB0CistLS0gYS9naXQtcHVsbC1zY3JpcHQKKysrKyBiL2dpdC1mZXRjaC1zY3JpcHQKK0BAIC0zOSw4ICszOSwzIEBAIGRvd25sb2FkX29uZSAiJG1lcmdlX3JlcG8vJG1lcmdlX25hbWUiICIKKyAKKyBlY2hvICJHZXR0aW5nIG9iamVjdCBkYXRhYmFzZSIKKyBkb3dubG9hZF9vYmplY3RzICIkbWVyZ2VfcmVwbyIgIiQoY2F0ICIkR0lUX0RJUiIvTUVSR0VfSEVBRCkiCistCistZ2l0LXJlc29sdmUtc2NyaXB0IFwKKy0JIiQoY2F0ICIkR0lUX0RJUiIvSEVBRCkiIFwKKy0JIiQoY2F0ICIkR0lUX0RJUiIvTUVSR0VfSEVBRCkiIFwKKy0JIiRtZXJnZV9yZXBvIgorZGlmZiAtLWdpdCBhL2dpdC1wdWxsLXNjcmlwdCBiL2dpdC1wdWxsLXNjcmlwdAorLS0tIGEvZ2l0LXB1bGwtc2NyaXB0CisrKysgYi9naXQtcHVsbC1zY3JpcHQKK0BAIC02LDM5ICs2LDcgQEAgbWVyZ2VfbmFtZT0kezI6LUhFQUR9CisgOiAke0dJVF9ESVI9LmdpdH0KKyA6ICR7R0lUX09CSkVDVF9ESVJFQ1RPUlk9IiR7U0hBMV9GSUxFX0RJUkVDVE9SWS0iJEdJVF9ESVIvb2JqZWN0cyJ9In0KKyAKKy1kb3dubG9hZF9vbmUgKCkgeworLQkjIHJlbW90ZV9wYXRoPSIkMSIgbG9jYWxfZmlsZT0iJDIiCistCWNhc2UgIiQxIiBpbgorLQlodHRwOi8vKikKKy0JCXdnZXQgLXEgLU8gIiQyIiAiJDEiIDs7CistCS8qKQorLQkJdGVzdCAtZiAiJDEiICYmIGNhdCA+IiQyIiAiJDEiIDs7CistCSopCistCQlyc3luYyAtTCAiJDEiICIkMiIgOzsKKy0JZXNhYworLX0KKy0KKy1kb3dubG9hZF9vYmplY3RzICgpIHsKKy0JIyByZW1vdGVfcmVwbz0iJDEiIGhlYWRfc2hhMT0iJDIiCistCWNhc2UgIiQxIiBpbgorLQlodHRwOi8vKikKKy0JCWdpdC1odHRwLXB1bGwgLWEgIiQyIiAiJDEvIgorLQkJOzsKKy0JLyopCistCQlnaXQtbG9jYWwtcHVsbCAtbCAtYSAiJDIiICIkMS8iCistCQk7OworLQkqKQorLQkJcnN5bmMgLWF2eiAtLWlnbm9yZS1leGlzdGluZyBcCistCQkJIiQxL29iamVjdHMvLiIgIiRHSVRfT0JKRUNUX0RJUkVDVE9SWSIvLgorLQkJOzsKKy0JZXNhYworLX0KKy0KKy1lY2hvICJHZXR0aW5nIHJlbW90ZSAkbWVyZ2VfbmFtZSIKKy1kb3dubG9hZF9vbmUgIiRtZXJnZV9yZXBvLyRtZXJnZV9uYW1lIiAiJEdJVF9ESVIiL01FUkdFX0hFQUQKKy0KKy1lY2hvICJHZXR0aW5nIG9iamVjdCBkYXRhYmFzZSIKKy1kb3dubG9hZF9vYmplY3RzICIkbWVyZ2VfcmVwbyIgIiQoY2F0ICIkR0lUX0RJUiIvTUVSR0VfSEVBRCkiCisrZ2l0LWZldGNoLXNjcmlwdCAiJG1lcmdlX3JlcG8iICIkbWVyZ2VfbmFtZSIKKyAKKyBnaXQtcmVzb2x2ZS1zY3JpcHQgXAorIAkiJChjYXQgIiRHSVRfRElSIi9IRUFEKSIgXApkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTMuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTMuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMmE1NTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktMy5leHBlY3QKQEAgLTAsMCArMSw3IEBACisgRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQgfCAgIDIwICstCisgbHMtdHJlZS5jICAgICAgICAgICAgICAgICAgICAgfCAgNDU5ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCisgdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoICAgfCAgICAzIAorIHRyZWUuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAKKyB0cmVlLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgCisgNSBmaWxlcyBjaGFuZ2VkLCAyNjIgaW5zZXJ0aW9ucygrKSwgMjIzIGRlbGV0aW9ucygtKQorIHJld3JpdGUgbHMtdHJlZS5jICg4MiUpCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktMy5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS0zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwY2RiYWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktMy5wYXRjaApAQCAtMCwwICsxLDU2NyBAQAorNmFmMWYwMTkyZmY4NzQwZmU3N2RiN2NmMDJjNzM5Y2NmYmRmMTE5YyAoZnJvbSAyYmMyNTY0MTQ1ODM1OTk2NzM0ZDZlZDVkMTg4MGY4NWIxNzIzM2Q2KQorZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dAorQEAgLTQsMjMgKzQsMjYgQEAgdjAuMSwgTWF5IDIwMDUKKyAKKyBOQU1FCisgLS0tLQorLWdpdC1scy10cmVlIC0gRGlzcGxheXMgYSB0cmVlIG9iamVjdCBpbiBodW1hbiByZWFkYWJsZSBmb3JtCisrZ2l0LWxzLXRyZWUgLSBMaXN0cyB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdC4KKyAKKyAKKyBTWU5PUFNJUworIC0tLS0tLS0tCistJ2dpdC1scy10cmVlJyBbLXJdIFstel0gPHRyZWUtaXNoPiBbcGF0aHMuLi5dCisrJ2dpdC1scy10cmVlJyBbLWRdIFstcl0gWy16XSA8dHJlZS1pc2g+IFtwYXRocy4uLl0KKyAKKyBERVNDUklQVElPTgorIC0tLS0tLS0tLS0tCistQ29udmVydHMgdGhlIHRyZWUgb2JqZWN0IHRvIGEgaHVtYW4gcmVhZGFibGUgKGFuZCBzY3JpcHQgcHJvY2Vzc2FibGUpCistZm9ybS4KKytMaXN0cyB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdCwgbGlrZSB3aGF0ICIvYmluL2xzIC1hIiBkb2VzCisraW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgCisgT1BUSU9OUworIC0tLS0tLS0KKyA8dHJlZS1pc2g+OjoKKyAJSWQgb2YgYSB0cmVlLgorIAorKy1kOjoKKysJc2hvdyBvbmx5IHRoZSBuYW1lZCB0cmVlIGVudHJ5IGl0c2VsZiwgbm90IGl0cyBjaGlsZHJlbgorKworIC1yOjoKKyAJcmVjdXJzZSBpbnRvIHN1Yi10cmVlcworIAorQEAgLTI4LDE4ICszMSwxOSBAQCBPUFRJT05TCisgCVwwIGxpbmUgdGVybWluYXRpb24gb24gb3V0cHV0CisgCisgcGF0aHM6OgorLQlPcHRpb25hbGx5LCByZXN0cmljdCB0aGUgb3V0cHV0IG9mIGdpdC1scy10cmVlIHRvIHNwZWNpZmljCistCXBhdGhzLiBEaXJlY3RvcmllcyB3aWxsIG9ubHkgbGlzdCB0aGVpciB0cmVlIGJsb2IgaWRzLgorLQlJbXBsaWVzIC1yLgorKwlXaGVuIHBhdGhzIGFyZSBnaXZlbiwgc2hvd3MgdGhlbS4gIE90aGVyd2lzZSBpbXBsaWNpdGx5CisrCXVzZXMgdGhlIHJvb3QgbGV2ZWwgb2YgdGhlIHRyZWUgYXMgdGhlIHNvbGUgcGF0aCBhcmd1bWVudC4KKysKKyAKKyBPdXRwdXQgRm9ybWF0CisgLS0tLS0tLS0tLS0tLQorLSAgICAgICAgPG1vZGU+XHQJPHR5cGU+XHQJPG9iamVjdD5cdAk8ZmlsZT4KKysgICAgICAgIDxtb2RlPiBTUCA8dHlwZT4gU1AgPG9iamVjdD4gVEFCIDxmaWxlPgorIAorIAorIEF1dGhvcgorIC0tLS0tLQorIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorK0NvbXBsZXRlbHkgcmV3cml0dGVuIGZyb20gc2NyYXRjaCBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CisgCisgRG9jdW1lbnRhdGlvbgorIC0tLS0tLS0tLS0tLS0tCitkaWZmIC0tZ2l0IGEvbHMtdHJlZS5jIGIvbHMtdHJlZS5jCitkaXNzaW1pbGFyaXR5IGluZGV4IDgyJQorLS0tIGxzLXRyZWUuYworKysrIGxzLXRyZWUuYworQEAgLTEsMjEyICsxLDI0NyBAQAorLS8qCistICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCistICoKKy0gKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CistICovCistI2luY2x1ZGUgImNhY2hlLmgiCistCistc3RhdGljIGludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKy1zdGF0aWMgaW50IHJlY3Vyc2l2ZSA9IDA7CistCistc3RydWN0IHBhdGhfcHJlZml4IHsKKy0Jc3RydWN0IHBhdGhfcHJlZml4ICpwcmV2OworLQljb25zdCBjaGFyICpuYW1lOworLX07CistCistI2RlZmluZSBERUJVRyhmbXQsIC4uLikJCistCistc3RhdGljIGludCBzdHJpbmdfcGF0aF9wcmVmaXgoY2hhciAqYnVmZiwgc2l6ZV90IGJsZW4sIHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4KQorLXsKKy0JaW50IGxlbiA9IDA7CistCWlmIChwcmVmaXgpIHsKKy0JCWlmIChwcmVmaXgtPnByZXYpIHsKKy0JCQlsZW4gPSBzdHJpbmdfcGF0aF9wcmVmaXgoYnVmZixibGVuLHByZWZpeC0+cHJldik7CistCQkJYnVmZiArPSBsZW47CistCQkJYmxlbiAtPSBsZW47CistCQkJaWYgKGJsZW4gPiAwKSB7CistCQkJCSpidWZmID0gJy8nOworLQkJCQlsZW4rKzsKKy0JCQkJYnVmZisrOworLQkJCQlibGVuLS07CistCQkJfQorLQkJfQorLQkJc3RybmNweShidWZmLHByZWZpeC0+bmFtZSxibGVuKTsKKy0JCXJldHVybiBsZW4gKyBzdHJsZW4ocHJlZml4LT5uYW1lKTsKKy0JfQorLQorLQlyZXR1cm4gMDsKKy19CistCistc3RhdGljIHZvaWQgcHJpbnRfcGF0aF9wcmVmaXgoc3RydWN0IHBhdGhfcHJlZml4ICpwcmVmaXgpCisteworLQlpZiAocHJlZml4KSB7CistCQlpZiAocHJlZml4LT5wcmV2KSB7CistCQkJcHJpbnRfcGF0aF9wcmVmaXgocHJlZml4LT5wcmV2KTsKKy0JCQlwdXRjaGFyKCcvJyk7CistCQl9CistCQlmcHV0cyhwcmVmaXgtPm5hbWUsIHN0ZG91dCk7CistCX0KKy19CistCistLyoKKy0gKiByZXR1cm46CistICogCS0xIGlmIHByZWZpeCBpcyAqbm90KiBhIHN1YnNldCBvZiBwYXRoCistICogCSAwIGlmIHByZWZpeCA9PSBwYXRoCistICogCSAxIGlmIHByZWZpeCBpcyBhIHN1YnNldCBvZiBwYXRoCistICovCistc3RhdGljIGludCBwYXRoY21wKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4KQorLXsKKy0JY2hhciBidWZmW1BBVEhfTUFYXTsKKy0JaW50IGxlbixzbGVuOworLQorLQlpZiAocHJlZml4ID09IE5VTEwpCistCQlyZXR1cm4gMTsKKy0KKy0JbGVuID0gc3RyaW5nX3BhdGhfcHJlZml4KGJ1ZmYsIHNpemVvZiBidWZmLCBwcmVmaXgpOworLQlzbGVuID0gc3RybGVuKHBhdGgpOworLQorLQlpZiAoc2xlbiA8IGxlbikKKy0JCXJldHVybiAtMTsKKy0KKy0JaWYgKHN0cm5jbXAocGF0aCxidWZmLGxlbikgPT0gMCkgeworLQkJaWYgKHNsZW4gPT0gbGVuKQorLQkJCXJldHVybiAwOworLQkJZWxzZQorLQkJCXJldHVybiAxOworLQl9CistCistCXJldHVybiAtMTsKKy19CQorLQorLS8qCistICogbWF0Y2ggbWF5IGJlIE5VTEwsIG9yIGEgKnNvcnRlZCogbGlzdCBvZiBwYXRocworLSAqLworLXN0YXRpYyB2b2lkIGxpc3RfcmVjdXJzaXZlKHZvaWQgKmJ1ZmZlciwKKy0JCQkgICBjb25zdCBjaGFyICp0eXBlLAorLQkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKy0JCQkgICBzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCwKKy0JCQkgICBjaGFyICoqbWF0Y2gsIGludCBtYXRjaGVzKQorLXsKKy0Jc3RydWN0IHBhdGhfcHJlZml4IHRoaXNfcHJlZml4OworLQl0aGlzX3ByZWZpeC5wcmV2ID0gcHJlZml4OworLQorLQlpZiAoc3RyY21wKHR5cGUsICJ0cmVlIikpCistCQlkaWUoImV4cGVjdGVkIGEgJ3RyZWUnIG5vZGUiKTsKKy0KKy0JaWYgKG1hdGNoZXMpCistCQlyZWN1cnNpdmUgPSAxOworLQorLQl3aGlsZSAoc2l6ZSkgeworLQkJaW50IG5hbWVsZW4gPSBzdHJsZW4oYnVmZmVyKSsxOworLQkJdm9pZCAqZWx0YnVmID0gTlVMTDsKKy0JCWNoYXIgZWx0dHlwZVsyMF07CistCQl1bnNpZ25lZCBsb25nIGVsdHNpemU7CistCQl1bnNpZ25lZCBjaGFyICpzaGExID0gYnVmZmVyICsgbmFtZWxlbjsKKy0JCWNoYXIgKnBhdGggPSBzdHJjaHIoYnVmZmVyLCAnICcpICsgMTsKKy0JCXVuc2lnbmVkIGludCBtb2RlOworLQkJY29uc3QgY2hhciAqbWF0Y2hlZCA9IE5VTEw7CistCQlpbnQgbXR5cGUgPSAtMTsKKy0JCWludCBtaW5kZXg7CistCistCQlpZiAoc2l6ZSA8IG5hbWVsZW4gKyAyMCB8fCBzc2NhbmYoYnVmZmVyLCAiJW8iLCAmbW9kZSkgIT0gMSkKKy0JCQlkaWUoImNvcnJ1cHQgJ3RyZWUnIGZpbGUiKTsKKy0JCWJ1ZmZlciA9IHNoYTEgKyAyMDsKKy0JCXNpemUgLT0gbmFtZWxlbiArIDIwOworLQorLQkJdGhpc19wcmVmaXgubmFtZSA9IHBhdGg7CistCQlmb3IgKCBtaW5kZXggPSAwOyBtaW5kZXggPCBtYXRjaGVzOyBtaW5kZXgrKykgeworLQkJCW10eXBlID0gcGF0aGNtcChtYXRjaFttaW5kZXhdLCZ0aGlzX3ByZWZpeCk7CistCQkJaWYgKG10eXBlID49IDApIHsKKy0JCQkJbWF0Y2hlZCA9IG1hdGNoW21pbmRleF07CistCQkJCWJyZWFrOworLQkJCX0KKy0JCX0KKy0KKy0JCS8qCistCQkgKiBJZiB3ZSdyZSBub3QgbWF0Y2hpbmcsIG9yIGlmIHRoaXMgaXMgYW4gZXhhY3QgbWF0Y2gsCistCQkgKiBwcmludCBvdXQgdGhlIGluZm8KKy0JCSAqLworLQkJaWYgKCFtYXRjaGVzIHx8IChtYXRjaGVkICE9IE5VTEwgJiYgbXR5cGUgPT0gMCkpIHsKKy0JCQlwcmludGYoIiUwNm8gJXMgJXNcdCIsIG1vZGUsCistCQkJICAgICAgIFNfSVNESVIobW9kZSkgPyAidHJlZSIgOiAiYmxvYiIsCistCQkJICAgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKy0JCQlwcmludF9wYXRoX3ByZWZpeCgmdGhpc19wcmVmaXgpOworLQkJCXB1dGNoYXIobGluZV90ZXJtaW5hdGlvbik7CistCQl9CistCistCQlpZiAoISByZWN1cnNpdmUgfHwgISBTX0lTRElSKG1vZGUpKQorLQkJCWNvbnRpbnVlOworLQorLQkJaWYgKG1hdGNoZXMgJiYgISBtYXRjaGVkKQorLQkJCWNvbnRpbnVlOworLQorLQkJaWYgKCEgKGVsdGJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsIGVsdHR5cGUsICZlbHRzaXplKSkgKSB7CistCQkJZXJyb3IoImNhbm5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworLQkJCWNvbnRpbnVlOworLQkJfQorLQorLQkJLyogSWYgdGhpcyBpcyBhbiBleGFjdCBkaXJlY3RvcnkgbWF0Y2gsIHdlIG1heSBoYXZlCistCQkgKiBkaXJlY3RvcnkgZmlsZXMgZm9sbG93aW5nIHRoaXMgcGF0aC4gTWF0Y2ggb24gdGhlbS4KKy0JCSAqIE90aGVyd2lzZSwgd2UncmUgYXQgYSBwYWNoIHN1YmNvbXBvbmVudCwgYW5kIHdlIG5lZWQKKy0JCSAqIHRvIHRyeSB0byBtYXRjaCBhZ2Fpbi4KKy0JCSAqLworLQkJaWYgKG10eXBlID09IDApCistCQkJbWluZGV4Kys7CistCistCQlsaXN0X3JlY3Vyc2l2ZShlbHRidWYsIGVsdHR5cGUsIGVsdHNpemUsICZ0aGlzX3ByZWZpeCwgJm1hdGNoW21pbmRleF0sIG1hdGNoZXMtbWluZGV4KTsKKy0JCWZyZWUoZWx0YnVmKTsKKy0JfQorLX0KKy0KKy1zdGF0aWMgaW50IHFjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKKy17CistCXJldHVybiBzdHJjbXAoKihjaGFyICoqKWEsICooY2hhciAqKiliKTsKKy19CistCistc3RhdGljIGludCBsaXN0KHVuc2lnbmVkIGNoYXIgKnNoYTEsY2hhciAqKnBhdGgpCisteworLQl2b2lkICpidWZmZXI7CistCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKy0JaW50IG5wYXRoczsKKy0KKy0JZm9yIChucGF0aHMgPSAwOyBwYXRoW25wYXRoc10gIT0gTlVMTDsgbnBhdGhzKyspCistCQk7CistCistCXFzb3J0KHBhdGgsbnBhdGhzLHNpemVvZihjaGFyICopLHFjbXApOworLQorLQlidWZmZXIgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzaGExLCAidHJlZSIsICZzaXplLCBOVUxMKTsKKy0JaWYgKCFidWZmZXIpCistCQlkaWUoInVuYWJsZSB0byByZWFkIHNoYTEgZmlsZSIpOworLQlsaXN0X3JlY3Vyc2l2ZShidWZmZXIsICJ0cmVlIiwgc2l6ZSwgTlVMTCwgcGF0aCwgbnBhdGhzKTsKKy0JZnJlZShidWZmZXIpOworLQlyZXR1cm4gMDsKKy19CistCistc3RhdGljIGNvbnN0IGNoYXIgKmxzX3RyZWVfdXNhZ2UgPSAiZ2l0LWxzLXRyZWUgWy1yXSBbLXpdIDxrZXk+IFtwYXRocy4uLl0iOworLQorLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKy17CistCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CistCistCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworLQkJc3dpdGNoIChhcmd2WzFdWzFdKSB7CistCQljYXNlICd6JzoKKy0JCQlsaW5lX3Rlcm1pbmF0aW9uID0gMDsKKy0JCQlicmVhazsKKy0JCWNhc2UgJ3InOgorLQkJCXJlY3Vyc2l2ZSA9IDE7CistCQkJYnJlYWs7CistCQlkZWZhdWx0OgorLQkJCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworLQkJfQorLQkJYXJnYy0tOyBhcmd2Kys7CistCX0KKy0KKy0JaWYgKGFyZ2MgPCAyKQorLQkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CistCWlmIChnZXRfc2hhMShhcmd2WzFdLCBzaGExKSA8IDApCistCQl1c2FnZShsc190cmVlX3VzYWdlKTsKKy0JaWYgKGxpc3Qoc2hhMSwgJmFyZ3ZbMl0pIDwgMCkKKy0JCWRpZSgibGlzdCBmYWlsZWQiKTsKKy0JcmV0dXJuIDA7CistfQorKy8qCisrICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisrICovCisrI2luY2x1ZGUgImNhY2hlLmgiCisrI2luY2x1ZGUgImJsb2IuaCIKKysjaW5jbHVkZSAidHJlZS5oIgorKworK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CisrI2RlZmluZSBMU19SRUNVUlNJVkUgMQorKyNkZWZpbmUgTFNfVFJFRV9PTkxZIDIKKytzdGF0aWMgaW50IGxzX29wdGlvbnMgPSAwOworKworK3N0YXRpYyBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0IHJvb3RfZW50cnk7CisrCisrc3RhdGljIHZvaWQgcHJlcGFyZV9yb290KHVuc2lnbmVkIGNoYXIgKnNoYTEpCisreworKwl1bnNpZ25lZCBjaGFyIHJzaGFbMjBdOworKwl1bnNpZ25lZCBsb25nIHNpemU7CisrCXZvaWQgKmJ1ZjsKKysJc3RydWN0IHRyZWUgKnJvb3RfdHJlZTsKKysKKysJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgInRyZWUiLCAmc2l6ZSwgcnNoYSk7CisrCWZyZWUoYnVmKTsKKysJaWYgKCFidWYpCisrCQlkaWUoIkNvdWxkIG5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworKworKwlyb290X3RyZWUgPSBsb29rdXBfdHJlZShyc2hhKTsKKysJaWYgKCFyb290X3RyZWUpCisrCQlkaWUoIkNvdWxkIG5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworKworKwkvKiBQcmVwYXJlIGEgZmFrZSBlbnRyeSAqLworKwlyb290X2VudHJ5LmRpcmVjdG9yeSA9IDE7CisrCXJvb3RfZW50cnkuZXhlY3V0YWJsZSA9IHJvb3RfZW50cnkuc3ltbGluayA9IDA7CisrCXJvb3RfZW50cnkubW9kZSA9IFNfSUZESVI7CisrCXJvb3RfZW50cnkubmFtZSA9ICIiOworKwlyb290X2VudHJ5Lml0ZW0udHJlZSA9IHJvb3RfdHJlZTsKKysJcm9vdF9lbnRyeS5wYXJlbnQgPSBOVUxMOworK30KKysKKytzdGF0aWMgaW50IHByZXBhcmVfY2hpbGRyZW4oc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZWxlbSkKKyt7CisrCWlmICghZWxlbS0+ZGlyZWN0b3J5KQorKwkJcmV0dXJuIC0xOworKwlpZiAoIWVsZW0tPml0ZW0udHJlZS0+b2JqZWN0LnBhcnNlZCkgeworKwkJc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZTsKKysJCWlmIChwYXJzZV90cmVlKGVsZW0tPml0ZW0udHJlZSkpCisrCQkJcmV0dXJuIC0xOworKwkJLyogU2V0IHVwIHRoZSBwYXJlbnQgbGluayAqLworKwkJZm9yIChlID0gZWxlbS0+aXRlbS50cmVlLT5lbnRyaWVzOyBlOyBlID0gZS0+bmV4dCkKKysJCQllLT5wYXJlbnQgPSBlbGVtOworKwl9CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZmluZF9lbnRyeV8wKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmVsZW0sCisrCQkJCQkgICAgY29uc3QgY2hhciAqcGF0aCwKKysJCQkJCSAgICBjb25zdCBjaGFyICpwYXRoX2VuZCkKKyt7CisrCWNvbnN0IGNoYXIgKmVwOworKwlpbnQgbGVuOworKworKwl3aGlsZSAocGF0aCA8IHBhdGhfZW5kKSB7CisrCQlpZiAocHJlcGFyZV9jaGlsZHJlbihlbGVtKSkKKysJCQlyZXR1cm4gTlVMTDsKKysKKysJCS8qIEluIGVsZW0tPnRyZWUtPmVudHJpZXMsIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBuYW1lCisrCQkgKiB0aGF0IG1hdGNoZXMgd2hhdCBpcyBiZXR3ZWVuIHBhdGggYW5kIGVwLgorKwkJICovCisrCQllbGVtID0gZWxlbS0+aXRlbS50cmVlLT5lbnRyaWVzOworKworKwkJZXAgPSBzdHJjaHIocGF0aCwgJy8nKTsKKysJCWlmICghZXAgfHwgcGF0aF9lbmQgPD0gZXApCisrCQkJZXAgPSBwYXRoX2VuZDsKKysJCWxlbiA9IGVwIC0gcGF0aDsKKysKKysJCXdoaWxlIChlbGVtKSB7CisrCQkJaWYgKChzdHJsZW4oZWxlbS0+bmFtZSkgPT0gbGVuKSAmJgorKwkJCSAgICAhc3RybmNtcChlbGVtLT5uYW1lLCBwYXRoLCBsZW4pKQorKwkJCQlicmVhazsKKysJCQllbGVtID0gZWxlbS0+bmV4dDsKKysJCX0KKysJCWlmIChwYXRoX2VuZCA8PSBlcCB8fCAhZWxlbSkKKysJCQlyZXR1cm4gZWxlbTsKKysJCXdoaWxlICgqZXAgPT0gJy8nICYmIGVwIDwgcGF0aF9lbmQpCisrCQkJZXArKzsKKysJCXBhdGggPSBlcDsKKysJfQorKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmZpbmRfZW50cnkoY29uc3QgY2hhciAqcGF0aCwKKysJCQkJCSAgY29uc3QgY2hhciAqcGF0aF9lbmQpCisreworKwkvKiBGaW5kIHRyZWUgZWxlbWVudCwgZGVzY2VuZGluZyBmcm9tIHJvb3QsIHRoYXQKKysJICogY29ycmVzcG9uZHMgdG8gdGhlIG5hbWVkIHBhdGgsIGxhemlseSBleHBhbmRpbmcKKysJICogdGhlIHRyZWUgaWYgcG9zc2libGUuCisrCSAqLworKwlpZiAocGF0aCA9PSBwYXRoX2VuZCkgeworKwkJLyogU3BlY2lhbC4gIFRoaXMgaXMgdGhlIHJvb3QgbGV2ZWwgKi8KKysJCXJldHVybiAmcm9vdF9lbnRyeTsKKysJfQorKwlyZXR1cm4gZmluZF9lbnRyeV8wKCZyb290X2VudHJ5LCBwYXRoLCBwYXRoX2VuZCk7CisrfQorKworK3N0YXRpYyB2b2lkIHNob3dfZW50cnlfbmFtZShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplKQorK3sKKysJLyogVGhpcyBpcyB5dWNreS4gIFRoZSByb290IGxldmVsIGlzIHRoZXJlIGZvcgorKwkgKiBvdXIgY29udmVuaWVuY2UgYnV0IHdlIHJlYWxseSB3YW50IHRvIGRvIGEKKysJICogZm9yZXN0LgorKwkgKi8KKysJaWYgKGUtPnBhcmVudCAmJiBlLT5wYXJlbnQgIT0gJnJvb3RfZW50cnkpIHsKKysJCXNob3dfZW50cnlfbmFtZShlLT5wYXJlbnQpOworKwkJcHV0Y2hhcignLycpOworKwl9CisrCXByaW50ZigiJXMiLCBlLT5uYW1lKTsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3R5cGUoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSkKKyt7CisrCXJldHVybiAoZS0+ZGlyZWN0b3J5ID8gInRyZWUiIDogImJsb2IiKTsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X2hleChzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplKQorK3sKKysJcmV0dXJuIHNoYTFfdG9faGV4KGUtPmRpcmVjdG9yeQorKwkJCSAgID8gZS0+aXRlbS50cmVlLT5vYmplY3Quc2hhMQorKwkJCSAgIDogZS0+aXRlbS5ibG9iLT5vYmplY3Quc2hhMSk7CisrfQorKworKy8qIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIG11dHVhbGx5IHJlY3Vyc2l2ZSByb3V0aW5lcyAqLworK3N0YXRpYyBpbnQgc2hvd19lbnRyeShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICosIGludCk7CisrCisrc3RhdGljIGludCBzaG93X2NoaWxkcmVuKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUsIGludCBsZXZlbCkKKyt7CisrCWlmIChwcmVwYXJlX2NoaWxkcmVuKGUpKQorKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogbHMtdHJlZSBzaG93X2NoaWxkcmVuIGNhbGxlZCB3aXRoIG5vbiB0cmVlIik7CisrCWUgPSBlLT5pdGVtLnRyZWUtPmVudHJpZXM7CisrCXdoaWxlIChlKSB7CisrCQlzaG93X2VudHJ5KGUsIGxldmVsKTsKKysJCWUgPSBlLT5uZXh0OworKwl9CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNob3dfZW50cnkoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSwgaW50IGxldmVsKQorK3sKKysJaW50IGVyciA9IDA7IAorKworKwlpZiAoZSAhPSAmcm9vdF9lbnRyeSkgeworKwkJcHJpbnRmKCIlMDZvICVzICVzCSIsIGUtPm1vZGUsIGVudHJ5X3R5cGUoZSksCisrCQkgICAgICAgZW50cnlfaGV4KGUpKTsKKysJCXNob3dfZW50cnlfbmFtZShlKTsKKysJCXB1dGNoYXIobGluZV90ZXJtaW5hdGlvbik7CisrCX0KKysKKysJaWYgKGUtPmRpcmVjdG9yeSkgeworKwkJLyogSWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNhc2VzOgorKwkJICogKDEpIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCByZXF1ZXN0IChleHBsaWNpdCBwYXRoIGZyb20gdGhlCisrCQkgKiAgICAgY29tbWFuZCBsaW5lLCBvciAicm9vdCIgaWYgdGhlcmUgaXMgbm8gY29tbWFuZCBsaW5lKS4KKysJCSAqICBhLiBXaXRob3V0IGFueSBmbGFnLiAgV2Ugc2hvdyBkaXJlY3QgY2hpbGRyZW4uICBXZSBkbyBub3QgCisrCQkgKiAgICAgcmVjdXJzZSBpbnRvIHRoZW0uCisrCQkgKiAgYi4gV2l0aCAtci4gIFdlIGRvIHJlY3Vyc2UgaW50byBjaGlsZHJlbi4KKysJCSAqICBjLiBXaXRoIC1kLiAgV2UgZG8gbm90IHJlY3Vyc2UgaW50byBjaGlsZHJlbi4KKysJCSAqICgyKSBXZSBjYW1lIGhlcmUgYmVjYXVzZSBvdXIgY2FsbGVyIGlzIGVpdGhlciAoMS1hKSBvcgorKwkJICogICAgICgxLWIpLgorKwkJICogIGEuIFdpdGhvdXQgYW55IGZsYWcuICBXZSBkbyBub3Qgc2hvdyBvdXIgY2hpbGRyZW4gKHdoaWNoCisrCQkgKiAgICAgYXJlIGdyYW5kY2hpbGRyZW4gZm9yIHRoZSBvcmlnaW5hbCByZXF1ZXN0KS4KKysJCSAqICBiLiBXaXRoIC1yLiAgV2UgY29udGludWUgdG8gcmVjdXJzZSBpbnRvIG91ciBjaGlsZHJlbi4KKysJCSAqICBjLiBXaXRoIC1kLiAgV2Ugc2hvdWxkIG5vdCBoYXZlIGNvbWUgaGVyZSB0byBiZWdpbiB3aXRoLgorKwkJICovCisrCQlpZiAobGV2ZWwgPT0gMCAmJiAhKGxzX29wdGlvbnMgJiBMU19UUkVFX09OTFkpKQorKwkJCS8qIGNhc2UgKDEpLWEgYW5kICgxKS1iICovCisrCQkJZXJyID0gZXJyIHwgc2hvd19jaGlsZHJlbihlLCBsZXZlbCsxKTsKKysJCWVsc2UgaWYgKGxldmVsICYmIGxzX29wdGlvbnMgJiBMU19SRUNVUlNJVkUpCisrCQkJLyogY2FzZSAoMiktYiAqLworKwkJCWVyciA9IGVyciB8IHNob3dfY2hpbGRyZW4oZSwgbGV2ZWwrMSk7CisrCX0KKysJcmV0dXJuIGVycjsKKyt9CisrCisrc3RhdGljIGludCBsaXN0X29uZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYXRoX2VuZCkKKyt7CisrCWludCBlcnIgPSAwOworKwlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplID0gZmluZF9lbnRyeShwYXRoLCBwYXRoX2VuZCk7CisrCWlmICghZSkgeworKwkJLyogdHJhZGl0aW9uYWxseSBscy10cmVlIGRvZXMgbm90IGNvbXBsYWluIGFib3V0CisrCQkgKiBtaXNzaW5nIHBhdGguICBXZSBtYXkgY2hhbmdlIHRoaXMgbGF0ZXIgdG8gbWF0Y2gKKysJCSAqIHdoYXQgIi9iaW4vbHMgLWEiIGRvZXMsIHdoaWNoIGlzIHRvIGNvbXBsYWluLgorKwkJICovCisrCQlyZXR1cm4gZXJyOworKwl9CisrCWVyciA9IGVyciB8IHNob3dfZW50cnkoZSwgMCk7CisrCXJldHVybiBlcnI7CisrfQorKworK3N0YXRpYyBpbnQgbGlzdChjaGFyICoqcGF0aCkKKyt7CisrCWludCBpOworKwlpbnQgZXJyID0gMDsKKysJZm9yIChpID0gMDsgcGF0aFtpXTsgaSsrKSB7CisrCQlpbnQgbGVuID0gc3RybGVuKHBhdGhbaV0pOworKwkJd2hpbGUgKDAgPD0gbGVuICYmIHBhdGhbaV1bbGVuXSA9PSAnLycpCisrCQkJbGVuLS07CisrCQllcnIgPSBlcnIgfCBsaXN0X29uZShwYXRoW2ldLCBwYXRoW2ldICsgbGVuKTsKKysJfQorKwlyZXR1cm4gZXJyOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciAqbHNfdHJlZV91c2FnZSA9CisrCSJnaXQtbHMtdHJlZSBbLWRdIFstcl0gWy16XSA8dHJlZS1pc2g+IFtwYXRoLi4uXSI7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysJc3RhdGljIGNoYXIgKnBhdGgwW10gPSB7ICIiLCBOVUxMIH07CisrCWNoYXIgKipwYXRoOworKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworKworKwl3aGlsZSAoMSA8IGFyZ2MgJiYgYXJndlsxXVswXSA9PSAnLScpIHsKKysJCXN3aXRjaCAoYXJndlsxXVsxXSkgeworKwkJY2FzZSAneic6CisrCQkJbGluZV90ZXJtaW5hdGlvbiA9IDA7CisrCQkJYnJlYWs7CisrCQljYXNlICdyJzoKKysJCQlsc19vcHRpb25zIHw9IExTX1JFQ1VSU0lWRTsKKysJCQlicmVhazsKKysJCWNhc2UgJ2QnOgorKwkJCWxzX29wdGlvbnMgfD0gTFNfVFJFRV9PTkxZOworKwkJCWJyZWFrOworKwkJZGVmYXVsdDoKKysJCQl1c2FnZShsc190cmVlX3VzYWdlKTsKKysJCX0KKysJCWFyZ2MtLTsgYXJndisrOworKwl9CisrCisrCWlmIChhcmdjIDwgMikKKysJCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworKwlpZiAoZ2V0X3NoYTEoYXJndlsxXSwgc2hhMSkgPCAwKQorKwkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CisrCisrCXBhdGggPSAoYXJnYyA9PSAyKSA/IHBhdGgwIDogKGFyZ3YgKyAyKTsKKysJcHJlcGFyZV9yb290KHNoYTEpOworKwlpZiAobGlzdChwYXRoKSA8IDApCisrCQlkaWUoImxpc3QgZmFpbGVkIik7CisrCXJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2ggYi90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKKy0tLSBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAorKysrIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCitAQCAtNzQsOCArNzQsOCBAQCB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgJ2xzLXRyZWUgZmlsdGVyZWQnIFwKKyAgICAgJ2dpdC1scy10cmVlICR0cmVlIHBhdGgxIHBhdGgwID5jdXJyZW50ICYmCisgICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorLTEwMDY0NCBibG9iIFgJcGF0aDAKKyAxMjAwMDAgYmxvYiBYCXBhdGgxCisrMTAwNjQ0IGJsb2IgWAlwYXRoMAorIEVPRgorICAgICAgdGVzdF9vdXRwdXQnCisgCitAQCAtODUsNyArODUsNiBAQCB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgMDQwMDAwIHRyZWUgWAlwYXRoMgorIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CistMTAwNjQ0IGJsb2IgWAlwYXRoMi9iYXovYgorIDEyMDAwMCBibG9iIFgJcGF0aDIvYmF6Ym8KKyAxMDA2NDQgYmxvYiBYCXBhdGgyL2ZvbworIEVPRgorZGlmZiAtLWdpdCBhL3RyZWUuYyBiL3RyZWUuYworLS0tIGEvdHJlZS5jCisrKysgYi90cmVlLmMKK0BAIC0xMzMsNyArMTMzLDcgQEAgaW50IHBhcnNlX3RyZWVfYnVmZmVyKHN0cnVjdCB0cmVlICppdGVtLAorIAkJfQorIAkJaWYgKG9iaikKKyAJCQlhZGRfcmVmKCZpdGVtLT5vYmplY3QsIG9iaik7CistCisrCQllbnRyeS0+cGFyZW50ID0gTlVMTDsgLyogbmVlZHMgdG8gYmUgZmlsbGVkIGJ5IHRoZSB1c2VyICovCisgCQkqbGlzdF9wID0gZW50cnk7CisgCQlsaXN0X3AgPSAmZW50cnktPm5leHQ7CisgCX0KK2RpZmYgLS1naXQgYS90cmVlLmggYi90cmVlLmgKKy0tLSBhL3RyZWUuaAorKysrIGIvdHJlZS5oCitAQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0IHsKKyAJCXN0cnVjdCB0cmVlICp0cmVlOworIAkJc3RydWN0IGJsb2IgKmJsb2I7CisgCX0gaXRlbTsKKysJc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqcGFyZW50OworIH07CisgCisgc3RydWN0IHRyZWUgewpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTQuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTQuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYzAyOGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNC5leHBlY3QKQEAgLTAsMCArMSw1IEBACisgdC90MDAwMC1iYXNpYy5zaCB8ICAgIDAgCisgdC90ZXN0LWxpYi5zaCAgICB8ICAgIDAgCisgMiBmaWxlcyBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSB0L3QwMDAwLWJhc2ljLnNoCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSB0L3Rlc3QtbGliLnNoCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNC5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTZhYjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNC5wYXRjaApAQCAtMCwwICsxLDcgQEAKK2NlZWRlNTllYTkwY2ViYWQ1MmJhOWM4MjYzZmVmM2ZiNmVmMTc1OTMgKGZyb20gMzY4Zjk5ZDU3ZThlZDE3MjQzZjJlMTY0NDMxNDQ5ZDQ4YmZjYTJmYikKK2RpZmYgLS1naXQgYS90L3QwMDAwLWJhc2ljLnNoIGIvdC90MDAwMC1iYXNpYy5zaAorb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2RpZmYgLS1naXQgYS90L3Rlc3QtbGliLnNoIGIvdC90ZXN0LWxpYi5zaAorb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS01LmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS01LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg3ZGYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTUuZXhwZWN0CkBAIC0wLDAgKzEsMTkgQEAKKyBEb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQgICAgfCAgIDUwIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyBEb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQgICAgfCAgIDMwIC0tLS0tLS0tLS0tLQorIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dCB8ICAgNTAgKysrKysrKysrKysrKysrKysrKworIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dCB8ICAgMzAgKysrKysrKysrKysrCisgRG9jdW1lbnRhdGlvbi9naXQudHh0ICAgICAgICAgIHwgICAgNiArLQorIE1ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KKyBycHVsbC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDgzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcnB1c2guYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc3NoLXB1bGwuYyAgICAgICAgICAgICAgICAgICAgIHwgICA4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNzaC1wdXNoLmMgICAgICAgICAgICAgICAgICAgICB8ICAxMDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEwIGZpbGVzIGNoYW5nZWQsIDI3MyBpbnNlcnRpb25zKCspLCAyNzMgZGVsZXRpb25zKC0pCisgZGVsZXRlIERvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dAorIGRlbGV0ZSBEb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQKKyBjcmVhdGUgRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0CisgY3JlYXRlIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dAorIGRlbGV0ZSBycHVsbC5jCisgZGVsZXRlIHJwdXNoLmMKKyBjcmVhdGUgc3NoLXB1bGwuYworIGNyZWF0ZSBzc2gtcHVzaC5jCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNS5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS01LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNmRkYzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNS5wYXRjaApAQCAtMCwwICsxLDYxMiBAQAorZGlmZiBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dAorLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcnB1bGwudHh0CisrKysgL2Rldi9udWxsCitAQCAtMSw1MCArMCwwIEBACistZ2l0LXJwdWxsKDEpCistPT09PT09PT09PT09CistdjAuMSwgTWF5IDIwMDUKKy0KKy1OQU1FCistLS0tLQorLWdpdC1ycHVsbCAtIFB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCistCistCistCistU1lOT1BTSVMKKy0tLS0tLS0tLQorLSdnaXQtcnB1bGwnIFstY10gWy10XSBbLWFdIFstZF0gWy12XSBbLS1yZWNvdmVyXSBjb21taXQtaWQgdXJsCistCistREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tLQorLVB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uLCBpbnZva2luZyBnaXQtcnB1c2ggb24KKy10aGUgb3RoZXIgZW5kLgorLQorLU9QVElPTlMKKy0tLS0tLS0tCistLWM6OgorLQlHZXQgdGhlIGNvbW1pdCBvYmplY3RzLgorLS10OjoKKy0JR2V0IHRyZWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tbWl0IG9iamVjdHMuCistLWE6OgorLQlHZXQgYWxsIHRoZSBvYmplY3RzLgorLS1kOjoKKy0JRG8gbm90IGNoZWNrIGZvciBkZWx0YSBiYXNlIG9iamVjdHMgKHVzZSB0aGlzIG9wdGlvbgorLQlvbmx5IHdoZW4geW91IGtub3cgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGlzIG5vdAorLQlkZWx0aWZpZWQpLgorLS0tcmVjb3Zlcjo6CistCUNoZWNrIGRlcGVuZGVuY3kgb2YgZGVsdGlmaWVkIG9iamVjdCBtb3JlIGNhcmVmdWxseSB0aGFuCistCXVzdWFsLCB0byByZWNvdmVyIGFmdGVyIGVhcmxpZXIgcHVsbCB0aGF0IHdhcyBpbnRlcnJ1cHRlZC4KKy0tdjo6CistCVJlcG9ydCB3aGF0IGlzIGRvd25sb2FkZWQuCistCistCistQXV0aG9yCistLS0tLS0tCistV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CistCistRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0tCistRG9jdW1lbnRhdGlvbiBieSBEYXZpZCBHcmVhdmVzLCBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKy0KKy1HSVQKKy0tLS0KKy1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKKy0KK2RpZmYgYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdXNoLnR4dAorKysrIC9kZXYvbnVsbAorQEAgLTEsMzAgKzAsMCBAQAorLWdpdC1ycHVzaCgxKQorLT09PT09PT09PT09PQorLXYwLjEsIE1heSAyMDA1CistCistTkFNRQorLS0tLS0KKy1naXQtcnB1c2ggLSBIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXJwdWxsCistCistCistU1lOT1BTSVMKKy0tLS0tLS0tLQorLSdnaXQtcnB1c2gnCistCistREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tLQorLUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtcnB1bGwuCistCistCistQXV0aG9yCistLS0tLS0tCistV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CistCistRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0tCistRG9jdW1lbnRhdGlvbiBieSBEYXZpZCBHcmVhdmVzLCBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKy0KKy1HSVQKKy0tLS0KKy1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKKy0KK2RpZmYgYS9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQKKy0tLSAvZGV2L251bGwKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dAorQEAgLTAsMCArMSw1MCBAQAorK2dpdC1zc2gtcHVsbCgxKQorKz09PT09PT09PT09PT09PQorK3YwLjEsIE1heSAyMDA1CisrCisrTkFNRQorKy0tLS0KKytnaXQtc3NoLXB1bGwgLSBQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgorKworKworKworK1NZTk9QU0lTCisrLS0tLS0tLS0KKysnZ2l0LXNzaC1wdWxsJyBbLWNdIFstdF0gWy1hXSBbLWRdIFstdl0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybAorKworK0RFU0NSSVBUSU9OCisrLS0tLS0tLS0tLS0KKytQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbiwgaW52b2tpbmcgZ2l0LXNzaC1wdXNoCisrb24gdGhlIG90aGVyIGVuZC4KKysKKytPUFRJT05TCisrLS0tLS0tLQorKy1jOjoKKysJR2V0IHRoZSBjb21taXQgb2JqZWN0cy4KKystdDo6CisrCUdldCB0cmVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1pdCBvYmplY3RzLgorKy1hOjoKKysJR2V0IGFsbCB0aGUgb2JqZWN0cy4KKystZDo6CisrCURvIG5vdCBjaGVjayBmb3IgZGVsdGEgYmFzZSBvYmplY3RzICh1c2UgdGhpcyBvcHRpb24KKysJb25seSB3aGVuIHlvdSBrbm93IHRoZSByZW1vdGUgcmVwb3NpdG9yeSBpcyBub3QKKysJZGVsdGlmaWVkKS4KKystLXJlY292ZXI6OgorKwlDaGVjayBkZXBlbmRlbmN5IG9mIGRlbHRpZmllZCBvYmplY3QgbW9yZSBjYXJlZnVsbHkgdGhhbgorKwl1c3VhbCwgdG8gcmVjb3ZlciBhZnRlciBlYXJsaWVyIHB1bGwgdGhhdCB3YXMgaW50ZXJydXB0ZWQuCisrLXY6OgorKwlSZXBvcnQgd2hhdCBpcyBkb3dubG9hZGVkLgorKworKworK0F1dGhvcgorKy0tLS0tLQorK1dyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorKworK0RvY3VtZW50YXRpb24KKystLS0tLS0tLS0tLS0tLQorK0RvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCisrCisrR0lUCisrLS0tCisrUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCisrCitkaWZmIGEvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0CistLS0gL2Rldi9udWxsCisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQKK0BAIC0wLDAgKzEsMzAgQEAKKytnaXQtc3NoLXB1c2goMSkKKys9PT09PT09PT09PT09PT0KKyt2MC4xLCBNYXkgMjAwNQorKworK05BTUUKKystLS0tCisrZ2l0LXNzaC1wdXNoIC0gSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1zc2gtcHVsbAorKworKworK1NZTk9QU0lTCisrLS0tLS0tLS0KKysnZ2l0LXNzaC1wdXNoJworKworK0RFU0NSSVBUSU9OCisrLS0tLS0tLS0tLS0KKytIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXNzaC1wdWxsLgorKworKworK0F1dGhvcgorKy0tLS0tLQorK1dyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorKworK0RvY3VtZW50YXRpb24KKystLS0tLS0tLS0tLS0tLQorK0RvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCisrCisrR0lUCisrLS0tCisrUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCisrCitkaWZmIGEvRG9jdW1lbnRhdGlvbi9naXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAorQEAgLTE0OCw3ICsxNDgsNyBAQCBsaW5rOmdpdC1yZXNvbHZlLXNjcmlwdC5odG1sW2dpdC1yZXNvbHZlCisgbGluazpnaXQtdGFnLXNjcmlwdC5odG1sW2dpdC10YWctc2NyaXB0XTo6CisgCUFuIGV4YW1wbGUgc2NyaXB0IHRvIGNyZWF0ZSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHCisgCistbGluazpnaXQtcnB1bGwuaHRtbFtnaXQtcnB1bGxdOjoKKytsaW5rOmdpdC1zc2gtcHVsbC5odG1sW2dpdC1zc2gtcHVsbF06OgorIAlQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgorIAorIEludGVyb2dhdG9yczoKK0BAIC0xNTYsOCArMTU2LDggQEAgSW50ZXJvZ2F0b3JzOgorIGxpbms6Z2l0LWRpZmYtaGVscGVyLmh0bWxbZ2l0LWRpZmYtaGVscGVyXTo6CisgCUdlbmVyYXRlcyBwYXRjaCBmb3JtYXQgb3V0cHV0IGZvciBnaXQtZGlmZi0qCisgCistbGluazpnaXQtcnB1c2guaHRtbFtnaXQtcnB1c2hdOjoKKy0JSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1ycHVsbAorK2xpbms6Z2l0LXNzaC1wdXNoLmh0bWxbZ2l0LXNzaC1wdXNoXTo6CisrCUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtc3NoLXB1bGwKKyAKKyAKKyAKK2RpZmYgYS9NYWtlZmlsZSBiL01ha2VmaWxlCistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0zMCw3ICszMCw3IEBAIFBST0c9ICAgZ2l0LXVwZGF0ZS1pbmRleCBnaXQtZGlmZi1maWxlcworIAlnaXQtY2hlY2tvdXQtY2FjaGUgZ2l0LWRpZmYtdHJlZSBnaXQtcmV2LXRyZWUgZ2l0LWxzLWZpbGVzIFwKKyAJZ2l0LWNoZWNrLWZpbGVzIGdpdC1scy10cmVlIGdpdC1tZXJnZS1iYXNlIGdpdC1tZXJnZS1jYWNoZSBcCisgCWdpdC11bnBhY2stZmlsZSBnaXQtZXhwb3J0IGdpdC1kaWZmLWNhY2hlIGdpdC1jb252ZXJ0LWNhY2hlIFwKKy0JZ2l0LWh0dHAtcHVsbCBnaXQtcnB1c2ggZ2l0LXJwdWxsIGdpdC1yZXYtbGlzdCBnaXQtbWt0YWcgXAorKwlnaXQtaHR0cC1wdWxsIGdpdC1zc2gtcHVzaCBnaXQtc3NoLXB1bGwgZ2l0LXJldi1saXN0IGdpdC1ta3RhZyBcCisgCWdpdC1kaWZmLWhlbHBlciBnaXQtdGFyLXRyZWUgZ2l0LWxvY2FsLXB1bGwgZ2l0LXdyaXRlLWJsb2IgXAorIAlnaXQtZ2V0LXRhci1jb21taXQtaWQgZ2l0LW1rZGVsdGEgZ2l0LWFwcGx5IGdpdC1zdHJpcHNwYWNlCisgCitAQCAtMTA1LDggKzEwNSw4IEBAIGdpdC1kaWZmLWNhY2hlOiBkaWZmLWNhY2hlLmMKKyBnaXQtY29udmVydC1jYWNoZTogY29udmVydC1jYWNoZS5jCisgZ2l0LWh0dHAtcHVsbDogaHR0cC1wdWxsLmMgcHVsbC5jCisgZ2l0LWxvY2FsLXB1bGw6IGxvY2FsLXB1bGwuYyBwdWxsLmMKKy1naXQtcnB1c2g6IHJzaC5jCistZ2l0LXJwdWxsOiByc2guYyBwdWxsLmMKKytnaXQtc3NoLXB1c2g6IHJzaC5jCisrZ2l0LXNzaC1wdWxsOiByc2guYyBwdWxsLmMKKyBnaXQtcmV2LWxpc3Q6IHJldi1saXN0LmMKKyBnaXQtbWt0YWc6IG1rdGFnLmMKKyBnaXQtZGlmZi1oZWxwZXI6IGRpZmYtaGVscGVyLmMKK2RpZmYgYS9ycHVsbC5jIGIvcnB1bGwuYworLS0tIGEvcnB1bGwuYworKysrIC9kZXYvbnVsbAorQEAgLTEsODMgKzAsMCBAQAorLSNpbmNsdWRlICJjYWNoZS5oIgorLSNpbmNsdWRlICJjb21taXQuaCIKKy0jaW5jbHVkZSAicnNoLmgiCistI2luY2x1ZGUgInB1bGwuaCIKKy0KKy1zdGF0aWMgaW50IGZkX2luOworLXN0YXRpYyBpbnQgZmRfb3V0OworLQorLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJlbW90ZV92ZXJzaW9uID0gMDsKKy1zdGF0aWMgdW5zaWduZWQgY2hhciBsb2NhbF92ZXJzaW9uID0gMTsKKy0KKy1pbnQgZmV0Y2godW5zaWduZWQgY2hhciAqc2hhMSkKKy17CistCWludCByZXQ7CistCXNpZ25lZCBjaGFyIHJlbW90ZTsKKy0JY2hhciB0eXBlID0gJ28nOworLQlpZiAoaGFzX3NoYTFfZmlsZShzaGExKSkKKy0JCXJldHVybiAwOworLQl3cml0ZShmZF9vdXQsICZ0eXBlLCAxKTsKKy0Jd3JpdGUoZmRfb3V0LCBzaGExLCAyMCk7CistCWlmIChyZWFkKGZkX2luLCAmcmVtb3RlLCAxKSA8IDEpCistCQlyZXR1cm4gLTE7CistCWlmIChyZW1vdGUgPCAwKQorLQkJcmV0dXJuIHJlbW90ZTsKKy0JcmV0ID0gd3JpdGVfc2hhMV9mcm9tX2ZkKHNoYTEsIGZkX2luKTsKKy0JaWYgKCFyZXQpCistCQlwdWxsX3NheSgiZ290ICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CistCXJldHVybiByZXQ7CistfQorLQorLWludCBnZXRfdmVyc2lvbih2b2lkKQorLXsKKy0JY2hhciB0eXBlID0gJ3YnOworLQl3cml0ZShmZF9vdXQsICZ0eXBlLCAxKTsKKy0Jd3JpdGUoZmRfb3V0LCAmbG9jYWxfdmVyc2lvbiwgMSk7CistCWlmIChyZWFkKGZkX2luLCAmcmVtb3RlX3ZlcnNpb24sIDEpIDwgMSkgeworLQkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCByZWFkIHZlcnNpb24gZnJvbSByZW1vdGUgZW5kIik7CistCX0KKy0JcmV0dXJuIDA7CistfQorLQorLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKy17CistCWNoYXIgKmNvbW1pdF9pZDsKKy0JY2hhciAqdXJsOworLQlpbnQgYXJnID0gMTsKKy0KKy0Jd2hpbGUgKGFyZyA8IGFyZ2MgJiYgYXJndlthcmddWzBdID09ICctJykgeworLQkJaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndCcpIHsKKy0JCQlnZXRfdHJlZSA9IDE7CistCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnYycpIHsKKy0JCQlnZXRfaGlzdG9yeSA9IDE7CistCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnZCcpIHsKKy0JCQlnZXRfZGVsdGEgPSAwOworLQkJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbYXJnXSwgIi0tcmVjb3ZlciIpKSB7CistCQkJZ2V0X2RlbHRhID0gMjsKKy0JCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdhJykgeworLQkJCWdldF9hbGwgPSAxOworLQkJCWdldF90cmVlID0gMTsKKy0JCQlnZXRfaGlzdG9yeSA9IDE7CistCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndicpIHsKKy0JCQlnZXRfdmVyYm9zZWx5ID0gMTsKKy0JCX0KKy0JCWFyZysrOworLQl9CistCWlmIChhcmdjIDwgYXJnICsgMikgeworLQkJdXNhZ2UoImdpdC1ycHVsbCBbLWNdIFstdF0gWy1hXSBbLXZdIFstZF0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybCIpOworLQkJcmV0dXJuIDE7CistCX0KKy0JY29tbWl0X2lkID0gYXJndlthcmddOworLQl1cmwgPSBhcmd2W2FyZyArIDFdOworLQorLQlpZiAoc2V0dXBfY29ubmVjdGlvbigmZmRfaW4sICZmZF9vdXQsICJnaXQtcnB1c2giLCB1cmwsIGFyZywgYXJndiArIDEpKQorLQkJcmV0dXJuIDE7CistCistCWlmIChnZXRfdmVyc2lvbigpKQorLQkJcmV0dXJuIDE7CistCistCWlmIChwdWxsKGNvbW1pdF9pZCkpCistCQlyZXR1cm4gMTsKKy0KKy0JcmV0dXJuIDA7CistfQorZGlmZiBhL3JwdXNoLmMgYi9ycHVzaC5jCistLS0gYS9ycHVzaC5jCisrKysgL2Rldi9udWxsCitAQCAtMSwxMDQgKzAsMCBAQAorLSNpbmNsdWRlICJjYWNoZS5oIgorLSNpbmNsdWRlICJyc2guaCIKKy0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorLSNpbmNsdWRlIDxlcnJuby5oPgorLQorLXVuc2lnbmVkIGNoYXIgbG9jYWxfdmVyc2lvbiA9IDE7CistdW5zaWduZWQgY2hhciByZW1vdGVfdmVyc2lvbiA9IDA7CistCistaW50IHNlcnZlX29iamVjdChpbnQgZmRfaW4sIGludCBmZF9vdXQpIHsKKy0Jc3NpemVfdCBzaXplOworLQlpbnQgcG9zbiA9IDA7CistCWNoYXIgc2hhMVsyMF07CistCXVuc2lnbmVkIGxvbmcgb2Jqc2l6ZTsKKy0Jdm9pZCAqYnVmOworLQlzaWduZWQgY2hhciByZW1vdGU7CistCWRvIHsKKy0JCXNpemUgPSByZWFkKGZkX2luLCBzaGExICsgcG9zbiwgMjAgLSBwb3NuKTsKKy0JCWlmIChzaXplIDwgMCkgeworLQkJCXBlcnJvcigiZ2l0LXJwdXNoOiByZWFkICIpOworLQkJCXJldHVybiAtMTsKKy0JCX0KKy0JCWlmICghc2l6ZSkKKy0JCQlyZXR1cm4gLTE7CistCQlwb3NuICs9IHNpemU7CistCX0gd2hpbGUgKHBvc24gPCAyMCk7CistCQorLQkvKiBmcHJpbnRmKHN0ZGVyciwgIlNlcnZpbmcgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsgKi8KKy0JcmVtb3RlID0gMDsKKy0JCistCWJ1ZiA9IG1hcF9zaGExX2ZpbGUoc2hhMSwgJm9ianNpemUpOworLQkKKy0JaWYgKCFidWYpIHsKKy0JCWZwcmludGYoc3RkZXJyLCAiZ2l0LXJwdXNoOiBjb3VsZCBub3QgZmluZCAlc1xuIiwgCistCQkJc2hhMV90b19oZXgoc2hhMSkpOworLQkJcmVtb3RlID0gLTE7CistCX0KKy0JCistCXdyaXRlKGZkX291dCwgJnJlbW90ZSwgMSk7CistCQorLQlpZiAocmVtb3RlIDwgMCkKKy0JCXJldHVybiAwOworLQkKKy0JcG9zbiA9IDA7CistCWRvIHsKKy0JCXNpemUgPSB3cml0ZShmZF9vdXQsIGJ1ZiArIHBvc24sIG9ianNpemUgLSBwb3NuKTsKKy0JCWlmIChzaXplIDw9IDApIHsKKy0JCQlpZiAoIXNpemUpIHsKKy0JCQkJZnByaW50ZihzdGRlcnIsICJnaXQtcnB1c2g6IHdyaXRlIGNsb3NlZCIpOworLQkJCX0gZWxzZSB7CistCQkJCXBlcnJvcigiZ2l0LXJwdXNoOiB3cml0ZSAiKTsKKy0JCQl9CistCQkJcmV0dXJuIC0xOworLQkJfQorLQkJcG9zbiArPSBzaXplOworLQl9IHdoaWxlIChwb3NuIDwgb2Jqc2l6ZSk7CistCXJldHVybiAwOworLX0KKy0KKy1pbnQgc2VydmVfdmVyc2lvbihpbnQgZmRfaW4sIGludCBmZF9vdXQpCisteworLQlpZiAocmVhZChmZF9pbiwgJnJlbW90ZV92ZXJzaW9uLCAxKSA8IDEpCistCQlyZXR1cm4gLTE7CistCXdyaXRlKGZkX291dCwgJmxvY2FsX3ZlcnNpb24sIDEpOworLQlyZXR1cm4gMDsKKy19CistCistdm9pZCBzZXJ2aWNlKGludCBmZF9pbiwgaW50IGZkX291dCkgeworLQljaGFyIHR5cGU7CistCWludCByZXR2YWw7CistCWRvIHsKKy0JCXJldHZhbCA9IHJlYWQoZmRfaW4sICZ0eXBlLCAxKTsKKy0JCWlmIChyZXR2YWwgPCAxKSB7CistCQkJaWYgKHJldHZhbCA8IDApCistCQkJCXBlcnJvcigicnB1c2g6IHJlYWQgIik7CistCQkJcmV0dXJuOworLQkJfQorLQkJaWYgKHR5cGUgPT0gJ3YnICYmIHNlcnZlX3ZlcnNpb24oZmRfaW4sIGZkX291dCkpCistCQkJcmV0dXJuOworLQkJaWYgKHR5cGUgPT0gJ28nICYmIHNlcnZlX29iamVjdChmZF9pbiwgZmRfb3V0KSkKKy0JCQlyZXR1cm47CistCX0gd2hpbGUgKDEpOworLX0KKy0KKy1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisteworLQlpbnQgYXJnID0gMTsKKy0gICAgICAgIGNoYXIgKmNvbW1pdF9pZDsKKy0gICAgICAgIGNoYXIgKnVybDsKKy0JaW50IGZkX2luLCBmZF9vdXQ7CistCXdoaWxlIChhcmcgPCBhcmdjICYmIGFyZ3ZbYXJnXVswXSA9PSAnLScpIHsKKy0gICAgICAgICAgICAgICAgYXJnKys7CistICAgICAgICB9CistICAgICAgICBpZiAoYXJnYyA8IGFyZyArIDIpIHsKKy0JCXVzYWdlKCJnaXQtcnB1c2ggWy1jXSBbLXRdIFstYV0gY29tbWl0LWlkIHVybCIpOworLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKKy0gICAgICAgIH0KKy0JY29tbWl0X2lkID0gYXJndlthcmddOworLQl1cmwgPSBhcmd2W2FyZyArIDFdOworLQlpZiAoc2V0dXBfY29ubmVjdGlvbigmZmRfaW4sICZmZF9vdXQsICJnaXQtcnB1bGwiLCB1cmwsIGFyZywgYXJndiArIDEpKQorLQkJcmV0dXJuIDE7CistCistCXNlcnZpY2UoZmRfaW4sIGZkX291dCk7CistCXJldHVybiAwOworLX0KK2RpZmYgYS9zc2gtcHVsbC5jIGIvc3NoLXB1bGwuYworLS0tIC9kZXYvbnVsbAorKysrIGIvc3NoLXB1bGwuYworQEAgLTAsMCArMSw4MyBAQAorKyNpbmNsdWRlICJjYWNoZS5oIgorKyNpbmNsdWRlICJjb21taXQuaCIKKysjaW5jbHVkZSAicnNoLmgiCisrI2luY2x1ZGUgInB1bGwuaCIKKysKKytzdGF0aWMgaW50IGZkX2luOworK3N0YXRpYyBpbnQgZmRfb3V0OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHJlbW90ZV92ZXJzaW9uID0gMDsKKytzdGF0aWMgdW5zaWduZWQgY2hhciBsb2NhbF92ZXJzaW9uID0gMTsKKysKKytpbnQgZmV0Y2godW5zaWduZWQgY2hhciAqc2hhMSkKKyt7CisrCWludCByZXQ7CisrCXNpZ25lZCBjaGFyIHJlbW90ZTsKKysJY2hhciB0eXBlID0gJ28nOworKwlpZiAoaGFzX3NoYTFfZmlsZShzaGExKSkKKysJCXJldHVybiAwOworKwl3cml0ZShmZF9vdXQsICZ0eXBlLCAxKTsKKysJd3JpdGUoZmRfb3V0LCBzaGExLCAyMCk7CisrCWlmIChyZWFkKGZkX2luLCAmcmVtb3RlLCAxKSA8IDEpCisrCQlyZXR1cm4gLTE7CisrCWlmIChyZW1vdGUgPCAwKQorKwkJcmV0dXJuIHJlbW90ZTsKKysJcmV0ID0gd3JpdGVfc2hhMV9mcm9tX2ZkKHNoYTEsIGZkX2luKTsKKysJaWYgKCFyZXQpCisrCQlwdWxsX3NheSgiZ290ICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CisrCXJldHVybiByZXQ7CisrfQorKworK2ludCBnZXRfdmVyc2lvbih2b2lkKQorK3sKKysJY2hhciB0eXBlID0gJ3YnOworKwl3cml0ZShmZF9vdXQsICZ0eXBlLCAxKTsKKysJd3JpdGUoZmRfb3V0LCAmbG9jYWxfdmVyc2lvbiwgMSk7CisrCWlmIChyZWFkKGZkX2luLCAmcmVtb3RlX3ZlcnNpb24sIDEpIDwgMSkgeworKwkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCByZWFkIHZlcnNpb24gZnJvbSByZW1vdGUgZW5kIik7CisrCX0KKysJcmV0dXJuIDA7CisrfQorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrCWNoYXIgKmNvbW1pdF9pZDsKKysJY2hhciAqdXJsOworKwlpbnQgYXJnID0gMTsKKysKKysJd2hpbGUgKGFyZyA8IGFyZ2MgJiYgYXJndlthcmddWzBdID09ICctJykgeworKwkJaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndCcpIHsKKysJCQlnZXRfdHJlZSA9IDE7CisrCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnYycpIHsKKysJCQlnZXRfaGlzdG9yeSA9IDE7CisrCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnZCcpIHsKKysJCQlnZXRfZGVsdGEgPSAwOworKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbYXJnXSwgIi0tcmVjb3ZlciIpKSB7CisrCQkJZ2V0X2RlbHRhID0gMjsKKysJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdhJykgeworKwkJCWdldF9hbGwgPSAxOworKwkJCWdldF90cmVlID0gMTsKKysJCQlnZXRfaGlzdG9yeSA9IDE7CisrCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndicpIHsKKysJCQlnZXRfdmVyYm9zZWx5ID0gMTsKKysJCX0KKysJCWFyZysrOworKwl9CisrCWlmIChhcmdjIDwgYXJnICsgMikgeworKwkJdXNhZ2UoImdpdC1zc2gtcHVsbCBbLWNdIFstdF0gWy1hXSBbLXZdIFstZF0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybCIpOworKwkJcmV0dXJuIDE7CisrCX0KKysJY29tbWl0X2lkID0gYXJndlthcmddOworKwl1cmwgPSBhcmd2W2FyZyArIDFdOworKworKwlpZiAoc2V0dXBfY29ubmVjdGlvbigmZmRfaW4sICZmZF9vdXQsICJnaXQtc3NoLXB1c2giLCB1cmwsIGFyZywgYXJndiArIDEpKQorKwkJcmV0dXJuIDE7CisrCisrCWlmIChnZXRfdmVyc2lvbigpKQorKwkJcmV0dXJuIDE7CisrCisrCWlmIChwdWxsKGNvbW1pdF9pZCkpCisrCQlyZXR1cm4gMTsKKysKKysJcmV0dXJuIDA7CisrfQorZGlmZiBhL3NzaC1wdXNoLmMgYi9zc2gtcHVzaC5jCistLS0gL2Rldi9udWxsCisrKysgYi9zc2gtcHVzaC5jCitAQCAtMCwwICsxLDEwNCBAQAorKyNpbmNsdWRlICJjYWNoZS5oIgorKyNpbmNsdWRlICJyc2guaCIKKysjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKworK3Vuc2lnbmVkIGNoYXIgbG9jYWxfdmVyc2lvbiA9IDE7CisrdW5zaWduZWQgY2hhciByZW1vdGVfdmVyc2lvbiA9IDA7CisrCisraW50IHNlcnZlX29iamVjdChpbnQgZmRfaW4sIGludCBmZF9vdXQpIHsKKysJc3NpemVfdCBzaXplOworKwlpbnQgcG9zbiA9IDA7CisrCWNoYXIgc2hhMVsyMF07CisrCXVuc2lnbmVkIGxvbmcgb2Jqc2l6ZTsKKysJdm9pZCAqYnVmOworKwlzaWduZWQgY2hhciByZW1vdGU7CisrCWRvIHsKKysJCXNpemUgPSByZWFkKGZkX2luLCBzaGExICsgcG9zbiwgMjAgLSBwb3NuKTsKKysJCWlmIChzaXplIDwgMCkgeworKwkJCXBlcnJvcigiZ2l0LXNzaC1wdXNoOiByZWFkICIpOworKwkJCXJldHVybiAtMTsKKysJCX0KKysJCWlmICghc2l6ZSkKKysJCQlyZXR1cm4gLTE7CisrCQlwb3NuICs9IHNpemU7CisrCX0gd2hpbGUgKHBvc24gPCAyMCk7CisrCQorKwkvKiBmcHJpbnRmKHN0ZGVyciwgIlNlcnZpbmcgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsgKi8KKysJcmVtb3RlID0gMDsKKysJCisrCWJ1ZiA9IG1hcF9zaGExX2ZpbGUoc2hhMSwgJm9ianNpemUpOworKwkKKysJaWYgKCFidWYpIHsKKysJCWZwcmludGYoc3RkZXJyLCAiZ2l0LXNzaC1wdXNoOiBjb3VsZCBub3QgZmluZCAlc1xuIiwgCisrCQkJc2hhMV90b19oZXgoc2hhMSkpOworKwkJcmVtb3RlID0gLTE7CisrCX0KKysJCisrCXdyaXRlKGZkX291dCwgJnJlbW90ZSwgMSk7CisrCQorKwlpZiAocmVtb3RlIDwgMCkKKysJCXJldHVybiAwOworKwkKKysJcG9zbiA9IDA7CisrCWRvIHsKKysJCXNpemUgPSB3cml0ZShmZF9vdXQsIGJ1ZiArIHBvc24sIG9ianNpemUgLSBwb3NuKTsKKysJCWlmIChzaXplIDw9IDApIHsKKysJCQlpZiAoIXNpemUpIHsKKysJCQkJZnByaW50ZihzdGRlcnIsICJnaXQtc3NoLXB1c2g6IHdyaXRlIGNsb3NlZCIpOworKwkJCX0gZWxzZSB7CisrCQkJCXBlcnJvcigiZ2l0LXNzaC1wdXNoOiB3cml0ZSAiKTsKKysJCQl9CisrCQkJcmV0dXJuIC0xOworKwkJfQorKwkJcG9zbiArPSBzaXplOworKwl9IHdoaWxlIChwb3NuIDwgb2Jqc2l6ZSk7CisrCXJldHVybiAwOworK30KKysKKytpbnQgc2VydmVfdmVyc2lvbihpbnQgZmRfaW4sIGludCBmZF9vdXQpCisreworKwlpZiAocmVhZChmZF9pbiwgJnJlbW90ZV92ZXJzaW9uLCAxKSA8IDEpCisrCQlyZXR1cm4gLTE7CisrCXdyaXRlKGZkX291dCwgJmxvY2FsX3ZlcnNpb24sIDEpOworKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBzZXJ2aWNlKGludCBmZF9pbiwgaW50IGZkX291dCkgeworKwljaGFyIHR5cGU7CisrCWludCByZXR2YWw7CisrCWRvIHsKKysJCXJldHZhbCA9IHJlYWQoZmRfaW4sICZ0eXBlLCAxKTsKKysJCWlmIChyZXR2YWwgPCAxKSB7CisrCQkJaWYgKHJldHZhbCA8IDApCisrCQkJCXBlcnJvcigiZ2l0LXNzaC1wdXNoOiByZWFkICIpOworKwkJCXJldHVybjsKKysJCX0KKysJCWlmICh0eXBlID09ICd2JyAmJiBzZXJ2ZV92ZXJzaW9uKGZkX2luLCBmZF9vdXQpKQorKwkJCXJldHVybjsKKysJCWlmICh0eXBlID09ICdvJyAmJiBzZXJ2ZV9vYmplY3QoZmRfaW4sIGZkX291dCkpCisrCQkJcmV0dXJuOworKwl9IHdoaWxlICgxKTsKKyt9CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysJaW50IGFyZyA9IDE7CisrICAgICAgICBjaGFyICpjb21taXRfaWQ7CisrICAgICAgICBjaGFyICp1cmw7CisrCWludCBmZF9pbiwgZmRfb3V0OworKwl3aGlsZSAoYXJnIDwgYXJnYyAmJiBhcmd2W2FyZ11bMF0gPT0gJy0nKSB7CisrICAgICAgICAgICAgICAgIGFyZysrOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGFyZ2MgPCBhcmcgKyAyKSB7CisrCQl1c2FnZSgiZ2l0LXNzaC1wdXNoIFstY10gWy10XSBbLWFdIGNvbW1pdC1pZCB1cmwiKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrCWNvbW1pdF9pZCA9IGFyZ3ZbYXJnXTsKKysJdXJsID0gYXJndlthcmcgKyAxXTsKKysJaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXNzaC1wdWxsIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKysJCXJldHVybiAxOworKworKwlzZXJ2aWNlKGZkX2luLCBmZF9vdXQpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNi5leHBlY3QgYi90L3Q0MTAwL3QtYXBwbHktNi5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzNDNkNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS02LmV4cGVjdApAQCAtMCwwICsxLDUgQEAKKyBNYWtlZmlsZSAgICAgICAgIHwgICAgMiArLQorIGdpdC1mZXRjaC1zY3JpcHQgfCAgIDQxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZ2l0LXB1bGwtc2NyaXB0ICB8ICAgMzQgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCisgY3JlYXRlIGdpdC1mZXRjaC1zY3JpcHQKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS02LnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyNzI5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS02LnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitkaWZmIGEvTWFrZWZpbGUgYi9NYWtlZmlsZQorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMjAsNyArMjAsNyBAQCBJTlNUQUxMPWluc3RhbGwKKyAKKyBTQ1JJUFRTPWdpdC1hcHBseS1wYXRjaC1zY3JpcHQgZ2l0LW1lcmdlLW9uZS1maWxlLXNjcmlwdCBnaXQtcHJ1bmUtc2NyaXB0IFwKKyAJZ2l0LXB1bGwtc2NyaXB0IGdpdC10YWctc2NyaXB0IGdpdC1yZXNvbHZlLXNjcmlwdCBnaXQtd2hhdGNoYW5nZWQgXAorLQlnaXQtZGVsdGFmeS1zY3JpcHQKKysJZ2l0LWRlbHRhZnktc2NyaXB0IGdpdC1mZXRjaC1zY3JpcHQKKyAKKyBQUk9HPSAgIGdpdC11cGRhdGUtaW5kZXggZ2l0LWRpZmYtZmlsZXMgZ2l0LWluaXQtZGIgZ2l0LXdyaXRlLXRyZWUgXAorIAlnaXQtcmVhZC10cmVlIGdpdC1jb21taXQtdHJlZSBnaXQtY2F0LWZpbGUgZ2l0LWZzY2stY2FjaGUgXAorZGlmZiBhL2dpdC1mZXRjaC1zY3JpcHQgYi9naXQtZmV0Y2gtc2NyaXB0CistLS0gL2Rldi9udWxsCisrKysgYi9naXQtZmV0Y2gtc2NyaXB0CitAQCAtMCwwICsxLDQxIEBACisrIyEvYmluL3NoCisrIworK21lcmdlX3JlcG89JDEKKyttZXJnZV9uYW1lPSR7MjotSEVBRH0KKysKKys6ICR7R0lUX0RJUj0uZ2l0fQorKzogJHtHSVRfT0JKRUNUX0RJUkVDVE9SWT0iJHtTSEExX0ZJTEVfRElSRUNUT1JZLSIkR0lUX0RJUi9vYmplY3RzIn0ifQorKworK2Rvd25sb2FkX29uZSAoKSB7CisrCSMgcmVtb3RlX3BhdGg9IiQxIiBsb2NhbF9maWxlPSIkMiIKKysJY2FzZSAiJDEiIGluCisrCWh0dHA6Ly8qKQorKwkJd2dldCAtcSAtTyAiJDIiICIkMSIgOzsKKysJLyopCisrCQl0ZXN0IC1mICIkMSIgJiYgY2F0ID4iJDIiICIkMSIgOzsKKysJKikKKysJCXJzeW5jIC1MICIkMSIgIiQyIiA7OworKwllc2FjCisrfQorKworK2Rvd25sb2FkX29iamVjdHMgKCkgeworKwkjIHJlbW90ZV9yZXBvPSIkMSIgaGVhZF9zaGExPSIkMiIKKysJY2FzZSAiJDEiIGluCisrCWh0dHA6Ly8qKQorKwkJZ2l0LWh0dHAtcHVsbCAtYSAiJDIiICIkMS8iCisrCQk7OworKwkvKikKKysJCWdpdC1sb2NhbC1wdWxsIC1sIC1hICIkMiIgIiQxLyIKKysJCTs7CisrCSopCisrCQlyc3luYyAtYXZ6IC0taWdub3JlLWV4aXN0aW5nIFwKKysJCQkiJDEvb2JqZWN0cy8uIiAiJEdJVF9PQkpFQ1RfRElSRUNUT1JZIi8uCisrCQk7OworKwllc2FjCisrfQorKworK2VjaG8gIkdldHRpbmcgcmVtb3RlICRtZXJnZV9uYW1lIgorK2Rvd25sb2FkX29uZSAiJG1lcmdlX3JlcG8vJG1lcmdlX25hbWUiICIkR0lUX0RJUiIvTUVSR0VfSEVBRAorKworK2VjaG8gIkdldHRpbmcgb2JqZWN0IGRhdGFiYXNlIgorK2Rvd25sb2FkX29iamVjdHMgIiRtZXJnZV9yZXBvIiAiJChjYXQgIiRHSVRfRElSIi9NRVJHRV9IRUFEKSIKK2RpZmYgYS9naXQtcHVsbC1zY3JpcHQgYi9naXQtcHVsbC1zY3JpcHQKKy0tLSBhL2dpdC1wdWxsLXNjcmlwdAorKysrIGIvZ2l0LXB1bGwtc2NyaXB0CitAQCAtNiwzOSArNiw3IEBAIG1lcmdlX25hbWU9JHsyOi1IRUFEfQorIDogJHtHSVRfRElSPS5naXR9CisgOiAke0dJVF9PQkpFQ1RfRElSRUNUT1JZPSIke1NIQTFfRklMRV9ESVJFQ1RPUlktIiRHSVRfRElSL29iamVjdHMifSJ9CisgCistZG93bmxvYWRfb25lICgpIHsKKy0JIyByZW1vdGVfcGF0aD0iJDEiIGxvY2FsX2ZpbGU9IiQyIgorLQljYXNlICIkMSIgaW4KKy0JaHR0cDovLyopCistCQl3Z2V0IC1xIC1PICIkMiIgIiQxIiA7OworLQkvKikKKy0JCXRlc3QgLWYgIiQxIiAmJiBjYXQgPiIkMiIgIiQxIiA7OworLQkqKQorLQkJcnN5bmMgLUwgIiQxIiAiJDIiIDs7CistCWVzYWMKKy19CistCistZG93bmxvYWRfb2JqZWN0cyAoKSB7CistCSMgcmVtb3RlX3JlcG89IiQxIiBoZWFkX3NoYTE9IiQyIgorLQljYXNlICIkMSIgaW4KKy0JaHR0cDovLyopCistCQlnaXQtaHR0cC1wdWxsIC1hICIkMiIgIiQxLyIKKy0JCTs7CistCS8qKQorLQkJZ2l0LWxvY2FsLXB1bGwgLWwgLWEgIiQyIiAiJDEvIgorLQkJOzsKKy0JKikKKy0JCXJzeW5jIC1hdnogLS1pZ25vcmUtZXhpc3RpbmcgXAorLQkJCSIkMS9vYmplY3RzLy4iICIkR0lUX09CSkVDVF9ESVJFQ1RPUlkiLy4KKy0JCTs7CistCWVzYWMKKy19CistCistZWNobyAiR2V0dGluZyByZW1vdGUgJG1lcmdlX25hbWUiCistZG93bmxvYWRfb25lICIkbWVyZ2VfcmVwby8kbWVyZ2VfbmFtZSIgIiRHSVRfRElSIi9NRVJHRV9IRUFECistCistZWNobyAiR2V0dGluZyBvYmplY3QgZGF0YWJhc2UiCistZG93bmxvYWRfb2JqZWN0cyAiJG1lcmdlX3JlcG8iICIkKGNhdCAiJEdJVF9ESVIiL01FUkdFX0hFQUQpIgorK2dpdC1mZXRjaC1zY3JpcHQgIiRtZXJnZV9yZXBvIiAiJG1lcmdlX25hbWUiCisgCisgZ2l0LXJlc29sdmUtc2NyaXB0IFwKKyAJIiQoY2F0ICIkR0lUX0RJUiIvSEVBRCkiIFwKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS03LmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS03LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjgzMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTcuZXhwZWN0CkBAIC0wLDAgKzEsNiBAQAorIERvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0IHwgICAyMCArLQorIGxzLXRyZWUuYyAgICAgICAgICAgICAgICAgICAgIHwgIDMzMyArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaCAgIHwgICAgMyAKKyB0cmVlLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgCisgdHJlZS5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIAorIDUgZmlsZXMgY2hhbmdlZCwgMTk5IGluc2VydGlvbnMoKyksIDE2MCBkZWxldGlvbnMoLSkKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS03LnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjNjU4OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS03LnBhdGNoCkBAIC0wLDAgKzEsNDk0IEBACitkaWZmIGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dAorLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CitAQCAtNCwyMyArNCwyNiBAQCB2MC4xLCBNYXkgMjAwNQorIAorIE5BTUUKKyAtLS0tCistZ2l0LWxzLXRyZWUgLSBEaXNwbGF5cyBhIHRyZWUgb2JqZWN0IGluIGh1bWFuIHJlYWRhYmxlIGZvcm0KKytnaXQtbHMtdHJlZSAtIExpc3RzIHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0LgorIAorIAorIFNZTk9QU0lTCisgLS0tLS0tLS0KKy0nZ2l0LWxzLXRyZWUnIFstcl0gWy16XSA8dHJlZS1pc2g+IFtwYXRocy4uLl0KKysnZ2l0LWxzLXRyZWUnIFstZF0gWy1yXSBbLXpdIDx0cmVlLWlzaD4gW3BhdGhzLi4uXQorIAorIERFU0NSSVBUSU9OCisgLS0tLS0tLS0tLS0KKy1Db252ZXJ0cyB0aGUgdHJlZSBvYmplY3QgdG8gYSBodW1hbiByZWFkYWJsZSAoYW5kIHNjcmlwdCBwcm9jZXNzYWJsZSkKKy1mb3JtLgorK0xpc3RzIHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0LCBsaWtlIHdoYXQgIi9iaW4vbHMgLWEiIGRvZXMKKytpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAKKyBPUFRJT05TCisgLS0tLS0tLQorIDx0cmVlLWlzaD46OgorIAlJZCBvZiBhIHRyZWUuCisgCisrLWQ6OgorKwlzaG93IG9ubHkgdGhlIG5hbWVkIHRyZWUgZW50cnkgaXRzZWxmLCBub3QgaXRzIGNoaWxkcmVuCisrCisgLXI6OgorIAlyZWN1cnNlIGludG8gc3ViLXRyZWVzCisgCitAQCAtMjgsMTggKzMxLDE5IEBAIE9QVElPTlMKKyAJXDAgbGluZSB0ZXJtaW5hdGlvbiBvbiBvdXRwdXQKKyAKKyBwYXRoczo6CistCU9wdGlvbmFsbHksIHJlc3RyaWN0IHRoZSBvdXRwdXQgb2YgZ2l0LWxzLXRyZWUgdG8gc3BlY2lmaWMKKy0JcGF0aHMuIERpcmVjdG9yaWVzIHdpbGwgb25seSBsaXN0IHRoZWlyIHRyZWUgYmxvYiBpZHMuCistCUltcGxpZXMgLXIuCisrCVdoZW4gcGF0aHMgYXJlIGdpdmVuLCBzaG93cyB0aGVtLiAgT3RoZXJ3aXNlIGltcGxpY2l0bHkKKysJdXNlcyB0aGUgcm9vdCBsZXZlbCBvZiB0aGUgdHJlZSBhcyB0aGUgc29sZSBwYXRoIGFyZ3VtZW50LgorKworIAorIE91dHB1dCBGb3JtYXQKKyAtLS0tLS0tLS0tLS0tCistICAgICAgICA8bW9kZT5cdAk8dHlwZT5cdAk8b2JqZWN0Plx0CTxmaWxlPgorKyAgICAgICAgPG1vZGU+IFNQIDx0eXBlPiBTUCA8b2JqZWN0PiBUQUIgPGZpbGU+CisgCisgCisgQXV0aG9yCisgLS0tLS0tCisgV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CisrQ29tcGxldGVseSByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KKyAKKyBEb2N1bWVudGF0aW9uCisgLS0tLS0tLS0tLS0tLS0KK2RpZmYgYS9scy10cmVlLmMgYi9scy10cmVlLmMKKy0tLSBhL2xzLXRyZWUuYworKysrIGIvbHMtdHJlZS5jCitAQCAtNCwxODggKzQsMjE3IEBACisgICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICAqLworICNpbmNsdWRlICJjYWNoZS5oIgorKyNpbmNsdWRlICJibG9iLmgiCisrI2luY2x1ZGUgInRyZWUuaCIKKyAKKyBzdGF0aWMgaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOworLXN0YXRpYyBpbnQgcmVjdXJzaXZlID0gMDsKKysjZGVmaW5lIExTX1JFQ1VSU0lWRSAxCisrI2RlZmluZSBMU19UUkVFX09OTFkgMgorK3N0YXRpYyBpbnQgbHNfb3B0aW9ucyA9IDA7CisgCistc3RydWN0IHBhdGhfcHJlZml4IHsKKy0Jc3RydWN0IHBhdGhfcHJlZml4ICpwcmV2OworLQljb25zdCBjaGFyICpuYW1lOworLX07CistCistI2RlZmluZSBERUJVRyhmbXQsIC4uLikJCistCistc3RhdGljIGludCBzdHJpbmdfcGF0aF9wcmVmaXgoY2hhciAqYnVmZiwgc2l6ZV90IGJsZW4sIHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4KQorLXsKKy0JaW50IGxlbiA9IDA7CistCWlmIChwcmVmaXgpIHsKKy0JCWlmIChwcmVmaXgtPnByZXYpIHsKKy0JCQlsZW4gPSBzdHJpbmdfcGF0aF9wcmVmaXgoYnVmZixibGVuLHByZWZpeC0+cHJldik7CistCQkJYnVmZiArPSBsZW47CistCQkJYmxlbiAtPSBsZW47CistCQkJaWYgKGJsZW4gPiAwKSB7CistCQkJCSpidWZmID0gJy8nOworLQkJCQlsZW4rKzsKKy0JCQkJYnVmZisrOworLQkJCQlibGVuLS07CistCQkJfQorLQkJfQorLQkJc3RybmNweShidWZmLHByZWZpeC0+bmFtZSxibGVuKTsKKy0JCXJldHVybiBsZW4gKyBzdHJsZW4ocHJlZml4LT5uYW1lKTsKKy0JfQorK3N0YXRpYyBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0IHJvb3RfZW50cnk7CisgCistCXJldHVybiAwOworK3N0YXRpYyB2b2lkIHByZXBhcmVfcm9vdCh1bnNpZ25lZCBjaGFyICpzaGExKQorK3sKKysJdW5zaWduZWQgY2hhciByc2hhWzIwXTsKKysJdW5zaWduZWQgbG9uZyBzaXplOworKwl2b2lkICpidWY7CisrCXN0cnVjdCB0cmVlICpyb290X3RyZWU7CisrCisrCWJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHNoYTEsICJ0cmVlIiwgJnNpemUsIHJzaGEpOworKwlmcmVlKGJ1Zik7CisrCWlmICghYnVmKQorKwkJZGllKCJDb3VsZCBub3QgcmVhZCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKysKKysJcm9vdF90cmVlID0gbG9va3VwX3RyZWUocnNoYSk7CisrCWlmICghcm9vdF90cmVlKQorKwkJZGllKCJDb3VsZCBub3QgcmVhZCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKysKKysJLyogUHJlcGFyZSBhIGZha2UgZW50cnkgKi8KKysJcm9vdF9lbnRyeS5kaXJlY3RvcnkgPSAxOworKwlyb290X2VudHJ5LmV4ZWN1dGFibGUgPSByb290X2VudHJ5LnN5bWxpbmsgPSAwOworKwlyb290X2VudHJ5Lm1vZGUgPSBTX0lGRElSOworKwlyb290X2VudHJ5Lm5hbWUgPSAiIjsKKysJcm9vdF9lbnRyeS5pdGVtLnRyZWUgPSByb290X3RyZWU7CisrCXJvb3RfZW50cnkucGFyZW50ID0gTlVMTDsKKyB9CisgCistc3RhdGljIHZvaWQgcHJpbnRfcGF0aF9wcmVmaXgoc3RydWN0IHBhdGhfcHJlZml4ICpwcmVmaXgpCisrc3RhdGljIGludCBwcmVwYXJlX2NoaWxkcmVuKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmVsZW0pCisgeworLQlpZiAocHJlZml4KSB7CistCQlpZiAocHJlZml4LT5wcmV2KSB7CistCQkJcHJpbnRfcGF0aF9wcmVmaXgocHJlZml4LT5wcmV2KTsKKy0JCQlwdXRjaGFyKCcvJyk7CistCQl9CistCQlmcHV0cyhwcmVmaXgtPm5hbWUsIHN0ZG91dCk7CisrCWlmICghZWxlbS0+ZGlyZWN0b3J5KQorKwkJcmV0dXJuIC0xOworKwlpZiAoIWVsZW0tPml0ZW0udHJlZS0+b2JqZWN0LnBhcnNlZCkgeworKwkJc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZTsKKysJCWlmIChwYXJzZV90cmVlKGVsZW0tPml0ZW0udHJlZSkpCisrCQkJcmV0dXJuIC0xOworKwkJLyogU2V0IHVwIHRoZSBwYXJlbnQgbGluayAqLworKwkJZm9yIChlID0gZWxlbS0+aXRlbS50cmVlLT5lbnRyaWVzOyBlOyBlID0gZS0+bmV4dCkKKysJCQllLT5wYXJlbnQgPSBlbGVtOworIAl9CisrCXJldHVybiAwOworIH0KKyAKKy0vKgorLSAqIHJldHVybjoKKy0gKiAJLTEgaWYgcHJlZml4IGlzICpub3QqIGEgc3Vic2V0IG9mIHBhdGgKKy0gKiAJIDAgaWYgcHJlZml4ID09IHBhdGgKKy0gKiAJIDEgaWYgcHJlZml4IGlzIGEgc3Vic2V0IG9mIHBhdGgKKy0gKi8KKy1zdGF0aWMgaW50IHBhdGhjbXAoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHBhdGhfcHJlZml4ICpwcmVmaXgpCisteworLQljaGFyIGJ1ZmZbUEFUSF9NQVhdOworLQlpbnQgbGVuLHNsZW47Cisrc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmZpbmRfZW50cnlfMChzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplbGVtLAorKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgsCisrCQkJCQkgICAgY29uc3QgY2hhciAqcGF0aF9lbmQpCisreworKwljb25zdCBjaGFyICplcDsKKysJaW50IGxlbjsKKysKKysJd2hpbGUgKHBhdGggPCBwYXRoX2VuZCkgeworKwkJaWYgKHByZXBhcmVfY2hpbGRyZW4oZWxlbSkpCisrCQkJcmV0dXJuIE5VTEw7CisgCistCWlmIChwcmVmaXggPT0gTlVMTCkKKy0JCXJldHVybiAxOworKwkJLyogSW4gZWxlbS0+dHJlZS0+ZW50cmllcywgZmluZCB0aGUgb25lIHRoYXQgaGFzIG5hbWUKKysJCSAqIHRoYXQgbWF0Y2hlcyB3aGF0IGlzIGJldHdlZW4gcGF0aCBhbmQgZXAuCisrCQkgKi8KKysJCWVsZW0gPSBlbGVtLT5pdGVtLnRyZWUtPmVudHJpZXM7CisgCistCWxlbiA9IHN0cmluZ19wYXRoX3ByZWZpeChidWZmLCBzaXplb2YgYnVmZiwgcHJlZml4KTsKKy0Jc2xlbiA9IHN0cmxlbihwYXRoKTsKKysJCWVwID0gc3RyY2hyKHBhdGgsICcvJyk7CisrCQlpZiAoIWVwIHx8IHBhdGhfZW5kIDw9IGVwKQorKwkJCWVwID0gcGF0aF9lbmQ7CisrCQlsZW4gPSBlcCAtIHBhdGg7CisrCisrCQl3aGlsZSAoZWxlbSkgeworKwkJCWlmICgoc3RybGVuKGVsZW0tPm5hbWUpID09IGxlbikgJiYKKysJCQkgICAgIXN0cm5jbXAoZWxlbS0+bmFtZSwgcGF0aCwgbGVuKSkKKysJCQkJYnJlYWs7CisrCQkJZWxlbSA9IGVsZW0tPm5leHQ7CisrCQl9CisrCQlpZiAocGF0aF9lbmQgPD0gZXAgfHwgIWVsZW0pCisrCQkJcmV0dXJuIGVsZW07CisrCQl3aGlsZSAoKmVwID09ICcvJyAmJiBlcCA8IHBhdGhfZW5kKQorKwkJCWVwKys7CisrCQlwYXRoID0gZXA7CisrCX0KKysJcmV0dXJuIE5VTEw7CisrfQorIAorLQlpZiAoc2xlbiA8IGxlbikKKy0JCXJldHVybiAtMTsKKytzdGF0aWMgc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZmluZF9lbnRyeShjb25zdCBjaGFyICpwYXRoLAorKwkJCQkJICBjb25zdCBjaGFyICpwYXRoX2VuZCkKKyt7CisrCS8qIEZpbmQgdHJlZSBlbGVtZW50LCBkZXNjZW5kaW5nIGZyb20gcm9vdCwgdGhhdAorKwkgKiBjb3JyZXNwb25kcyB0byB0aGUgbmFtZWQgcGF0aCwgbGF6aWx5IGV4cGFuZGluZworKwkgKiB0aGUgdHJlZSBpZiBwb3NzaWJsZS4KKysJICovCisrCWlmIChwYXRoID09IHBhdGhfZW5kKSB7CisrCQkvKiBTcGVjaWFsLiAgVGhpcyBpcyB0aGUgcm9vdCBsZXZlbCAqLworKwkJcmV0dXJuICZyb290X2VudHJ5OworKwl9CisrCXJldHVybiBmaW5kX2VudHJ5XzAoJnJvb3RfZW50cnksIHBhdGgsIHBhdGhfZW5kKTsKKyt9CisgCistCWlmIChzdHJuY21wKHBhdGgsYnVmZixsZW4pID09IDApIHsKKy0JCWlmIChzbGVuID09IGxlbikKKy0JCQlyZXR1cm4gMDsKKy0JCWVsc2UKKy0JCQlyZXR1cm4gMTsKKytzdGF0aWMgdm9pZCBzaG93X2VudHJ5X25hbWUoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSkKKyt7CisrCS8qIFRoaXMgaXMgeXVja3kuICBUaGUgcm9vdCBsZXZlbCBpcyB0aGVyZSBmb3IKKysJICogb3VyIGNvbnZlbmllbmNlIGJ1dCB3ZSByZWFsbHkgd2FudCB0byBkbyBhCisrCSAqIGZvcmVzdC4KKysJICovCisrCWlmIChlLT5wYXJlbnQgJiYgZS0+cGFyZW50ICE9ICZyb290X2VudHJ5KSB7CisrCQlzaG93X2VudHJ5X25hbWUoZS0+cGFyZW50KTsKKysJCXB1dGNoYXIoJy8nKTsKKyAJfQorKwlwcmludGYoIiVzIiwgZS0+bmFtZSk7CisrfQorIAorLQlyZXR1cm4gLTE7CistfQkKKytzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfdHlwZShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplKQorK3sKKysJcmV0dXJuIChlLT5kaXJlY3RvcnkgPyAidHJlZSIgOiAiYmxvYiIpOworK30KKyAKKy0vKgorLSAqIG1hdGNoIG1heSBiZSBOVUxMLCBvciBhICpzb3J0ZWQqIGxpc3Qgb2YgcGF0aHMKKy0gKi8KKy1zdGF0aWMgdm9pZCBsaXN0X3JlY3Vyc2l2ZSh2b2lkICpidWZmZXIsCistCQkJICAgY29uc3QgY2hhciAqdHlwZSwKKy0JCQkgICB1bnNpZ25lZCBsb25nIHNpemUsCistCQkJICAgc3RydWN0IHBhdGhfcHJlZml4ICpwcmVmaXgsCistCQkJICAgY2hhciAqKm1hdGNoLCBpbnQgbWF0Y2hlcykKKy17CistCXN0cnVjdCBwYXRoX3ByZWZpeCB0aGlzX3ByZWZpeDsKKy0JdGhpc19wcmVmaXgucHJldiA9IHByZWZpeDsKKy0KKy0JaWYgKHN0cmNtcCh0eXBlLCAidHJlZSIpKQorLQkJZGllKCJleHBlY3RlZCBhICd0cmVlJyBub2RlIik7CistCistCWlmIChtYXRjaGVzKQorLQkJcmVjdXJzaXZlID0gMTsKKy0KKy0Jd2hpbGUgKHNpemUpIHsKKy0JCWludCBuYW1lbGVuID0gc3RybGVuKGJ1ZmZlcikrMTsKKy0JCXZvaWQgKmVsdGJ1ZiA9IE5VTEw7CistCQljaGFyIGVsdHR5cGVbMjBdOworLQkJdW5zaWduZWQgbG9uZyBlbHRzaXplOworLQkJdW5zaWduZWQgY2hhciAqc2hhMSA9IGJ1ZmZlciArIG5hbWVsZW47CistCQljaGFyICpwYXRoID0gc3RyY2hyKGJ1ZmZlciwgJyAnKSArIDE7CistCQl1bnNpZ25lZCBpbnQgbW9kZTsKKy0JCWNvbnN0IGNoYXIgKm1hdGNoZWQgPSBOVUxMOworLQkJaW50IG10eXBlID0gLTE7CistCQlpbnQgbWluZGV4OworLQorLQkJaWYgKHNpemUgPCBuYW1lbGVuICsgMjAgfHwgc3NjYW5mKGJ1ZmZlciwgIiVvIiwgJm1vZGUpICE9IDEpCistCQkJZGllKCJjb3JydXB0ICd0cmVlJyBmaWxlIik7CistCQlidWZmZXIgPSBzaGExICsgMjA7CistCQlzaXplIC09IG5hbWVsZW4gKyAyMDsKKy0KKy0JCXRoaXNfcHJlZml4Lm5hbWUgPSBwYXRoOworLQkJZm9yICggbWluZGV4ID0gMDsgbWluZGV4IDwgbWF0Y2hlczsgbWluZGV4KyspIHsKKy0JCQltdHlwZSA9IHBhdGhjbXAobWF0Y2hbbWluZGV4XSwmdGhpc19wcmVmaXgpOworLQkJCWlmIChtdHlwZSA+PSAwKSB7CistCQkJCW1hdGNoZWQgPSBtYXRjaFttaW5kZXhdOworLQkJCQlicmVhazsKKy0JCQl9CistCQl9Cisrc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X2hleChzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplKQorK3sKKysJcmV0dXJuIHNoYTFfdG9faGV4KGUtPmRpcmVjdG9yeQorKwkJCSAgID8gZS0+aXRlbS50cmVlLT5vYmplY3Quc2hhMQorKwkJCSAgIDogZS0+aXRlbS5ibG9iLT5vYmplY3Quc2hhMSk7CisrfQorIAorLQkJLyoKKy0JCSAqIElmIHdlJ3JlIG5vdCBtYXRjaGluZywgb3IgaWYgdGhpcyBpcyBhbiBleGFjdCBtYXRjaCwKKy0JCSAqIHByaW50IG91dCB0aGUgaW5mbworLQkJICovCistCQlpZiAoIW1hdGNoZXMgfHwgKG1hdGNoZWQgIT0gTlVMTCAmJiBtdHlwZSA9PSAwKSkgeworLQkJCXByaW50ZigiJTA2byAlcyAlc1x0IiwgbW9kZSwKKy0JCQkgICAgICAgU19JU0RJUihtb2RlKSA/ICJ0cmVlIiA6ICJibG9iIiwKKy0JCQkgICAgICAgc2hhMV90b19oZXgoc2hhMSkpOworLQkJCXByaW50X3BhdGhfcHJlZml4KCZ0aGlzX3ByZWZpeCk7CistCQkJcHV0Y2hhcihsaW5lX3Rlcm1pbmF0aW9uKTsKKy0JCX0KKysvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIGZvciBtdXR1YWxseSByZWN1cnNpdmUgcm91dGluZXMgKi8KKytzdGF0aWMgaW50IHNob3dfZW50cnkoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqLCBpbnQpOworIAorLQkJaWYgKCEgcmVjdXJzaXZlIHx8ICEgU19JU0RJUihtb2RlKSkKKy0JCQljb250aW51ZTsKKytzdGF0aWMgaW50IHNob3dfY2hpbGRyZW4oc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSwgaW50IGxldmVsKQorK3sKKysJaWYgKHByZXBhcmVfY2hpbGRyZW4oZSkpCisrCQlkaWUoImludGVybmFsIGVycm9yOiBscy10cmVlIHNob3dfY2hpbGRyZW4gY2FsbGVkIHdpdGggbm9uIHRyZWUiKTsKKysJZSA9IGUtPml0ZW0udHJlZS0+ZW50cmllczsKKysJd2hpbGUgKGUpIHsKKysJCXNob3dfZW50cnkoZSwgbGV2ZWwpOworKwkJZSA9IGUtPm5leHQ7CisrCX0KKysJcmV0dXJuIDA7CisrfQorIAorLQkJaWYgKG1hdGNoZXMgJiYgISBtYXRjaGVkKQorLQkJCWNvbnRpbnVlOworK3N0YXRpYyBpbnQgc2hvd19lbnRyeShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplLCBpbnQgbGV2ZWwpCisreworKwlpbnQgZXJyID0gMDsgCisgCistCQlpZiAoISAoZWx0YnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgZWx0dHlwZSwgJmVsdHNpemUpKSApIHsKKy0JCQllcnJvcigiY2Fubm90IHJlYWQgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CistCQkJY29udGludWU7CistCQl9CisrCWlmIChlICE9ICZyb290X2VudHJ5KSB7CisrCQlwcmludGYoIiUwNm8gJXMgJXMJIiwgZS0+bW9kZSwgZW50cnlfdHlwZShlKSwKKysJCSAgICAgICBlbnRyeV9oZXgoZSkpOworKwkJc2hvd19lbnRyeV9uYW1lKGUpOworKwkJcHV0Y2hhcihsaW5lX3Rlcm1pbmF0aW9uKTsKKysJfQorIAorLQkJLyogSWYgdGhpcyBpcyBhbiBleGFjdCBkaXJlY3RvcnkgbWF0Y2gsIHdlIG1heSBoYXZlCistCQkgKiBkaXJlY3RvcnkgZmlsZXMgZm9sbG93aW5nIHRoaXMgcGF0aC4gTWF0Y2ggb24gdGhlbS4KKy0JCSAqIE90aGVyd2lzZSwgd2UncmUgYXQgYSBwYWNoIHN1YmNvbXBvbmVudCwgYW5kIHdlIG5lZWQKKy0JCSAqIHRvIHRyeSB0byBtYXRjaCBhZ2Fpbi4KKysJaWYgKGUtPmRpcmVjdG9yeSkgeworKwkJLyogSWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNhc2VzOgorKwkJICogKDEpIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCByZXF1ZXN0IChleHBsaWNpdCBwYXRoIGZyb20gdGhlCisrCQkgKiAgICAgY29tbWFuZCBsaW5lLCBvciAicm9vdCIgaWYgdGhlcmUgaXMgbm8gY29tbWFuZCBsaW5lKS4KKysJCSAqICBhLiBXaXRob3V0IGFueSBmbGFnLiAgV2Ugc2hvdyBkaXJlY3QgY2hpbGRyZW4uICBXZSBkbyBub3QgCisrCQkgKiAgICAgcmVjdXJzZSBpbnRvIHRoZW0uCisrCQkgKiAgYi4gV2l0aCAtci4gIFdlIGRvIHJlY3Vyc2UgaW50byBjaGlsZHJlbi4KKysJCSAqICBjLiBXaXRoIC1kLiAgV2UgZG8gbm90IHJlY3Vyc2UgaW50byBjaGlsZHJlbi4KKysJCSAqICgyKSBXZSBjYW1lIGhlcmUgYmVjYXVzZSBvdXIgY2FsbGVyIGlzIGVpdGhlciAoMS1hKSBvcgorKwkJICogICAgICgxLWIpLgorKwkJICogIGEuIFdpdGhvdXQgYW55IGZsYWcuICBXZSBkbyBub3Qgc2hvdyBvdXIgY2hpbGRyZW4gKHdoaWNoCisrCQkgKiAgICAgYXJlIGdyYW5kY2hpbGRyZW4gZm9yIHRoZSBvcmlnaW5hbCByZXF1ZXN0KS4KKysJCSAqICBiLiBXaXRoIC1yLiAgV2UgY29udGludWUgdG8gcmVjdXJzZSBpbnRvIG91ciBjaGlsZHJlbi4KKysJCSAqICBjLiBXaXRoIC1kLiAgV2Ugc2hvdWxkIG5vdCBoYXZlIGNvbWUgaGVyZSB0byBiZWdpbiB3aXRoLgorIAkJICovCistCQlpZiAobXR5cGUgPT0gMCkKKy0JCQltaW5kZXgrKzsKKy0KKy0JCWxpc3RfcmVjdXJzaXZlKGVsdGJ1ZiwgZWx0dHlwZSwgZWx0c2l6ZSwgJnRoaXNfcHJlZml4LCAmbWF0Y2hbbWluZGV4XSwgbWF0Y2hlcy1taW5kZXgpOworLQkJZnJlZShlbHRidWYpOworKwkJaWYgKGxldmVsID09IDAgJiYgIShsc19vcHRpb25zICYgTFNfVFJFRV9PTkxZKSkKKysJCQkvKiBjYXNlICgxKS1hIGFuZCAoMSktYiAqLworKwkJCWVyciA9IGVyciB8IHNob3dfY2hpbGRyZW4oZSwgbGV2ZWwrMSk7CisrCQllbHNlIGlmIChsZXZlbCAmJiBsc19vcHRpb25zICYgTFNfUkVDVVJTSVZFKQorKwkJCS8qIGNhc2UgKDIpLWIgKi8KKysJCQllcnIgPSBlcnIgfCBzaG93X2NoaWxkcmVuKGUsIGxldmVsKzEpOworIAl9CisrCXJldHVybiBlcnI7CisgfQorIAorLXN0YXRpYyBpbnQgcWNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQorK3N0YXRpYyBpbnQgbGlzdF9vbmUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGF0aF9lbmQpCisgeworLQlyZXR1cm4gc3RyY21wKCooY2hhciAqKilhLCAqKGNoYXIgKiopYik7CisrCWludCBlcnIgPSAwOworKwlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplID0gZmluZF9lbnRyeShwYXRoLCBwYXRoX2VuZCk7CisrCWlmICghZSkgeworKwkJLyogdHJhZGl0aW9uYWxseSBscy10cmVlIGRvZXMgbm90IGNvbXBsYWluIGFib3V0CisrCQkgKiBtaXNzaW5nIHBhdGguICBXZSBtYXkgY2hhbmdlIHRoaXMgbGF0ZXIgdG8gbWF0Y2gKKysJCSAqIHdoYXQgIi9iaW4vbHMgLWEiIGRvZXMsIHdoaWNoIGlzIHRvIGNvbXBsYWluLgorKwkJICovCisrCQlyZXR1cm4gZXJyOworKwl9CisrCWVyciA9IGVyciB8IHNob3dfZW50cnkoZSwgMCk7CisrCXJldHVybiBlcnI7CisgfQorIAorLXN0YXRpYyBpbnQgbGlzdCh1bnNpZ25lZCBjaGFyICpzaGExLGNoYXIgKipwYXRoKQorK3N0YXRpYyBpbnQgbGlzdChjaGFyICoqcGF0aCkKKyB7CistCXZvaWQgKmJ1ZmZlcjsKKy0JdW5zaWduZWQgbG9uZyBzaXplOworLQlpbnQgbnBhdGhzOworLQorLQlmb3IgKG5wYXRocyA9IDA7IHBhdGhbbnBhdGhzXSAhPSBOVUxMOyBucGF0aHMrKykKKy0JCTsKKy0KKy0JcXNvcnQocGF0aCxucGF0aHMsc2l6ZW9mKGNoYXIgKikscWNtcCk7CistCistCWJ1ZmZlciA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHNoYTEsICJ0cmVlIiwgJnNpemUsIE5VTEwpOworLQlpZiAoIWJ1ZmZlcikKKy0JCWRpZSgidW5hYmxlIHRvIHJlYWQgc2hhMSBmaWxlIik7CistCWxpc3RfcmVjdXJzaXZlKGJ1ZmZlciwgInRyZWUiLCBzaXplLCBOVUxMLCBwYXRoLCBucGF0aHMpOworLQlmcmVlKGJ1ZmZlcik7CistCXJldHVybiAwOworKwlpbnQgaTsKKysJaW50IGVyciA9IDA7CisrCWZvciAoaSA9IDA7IHBhdGhbaV07IGkrKykgeworKwkJaW50IGxlbiA9IHN0cmxlbihwYXRoW2ldKTsKKysJCXdoaWxlICgwIDw9IGxlbiAmJiBwYXRoW2ldW2xlbl0gPT0gJy8nKQorKwkJCWxlbi0tOworKwkJZXJyID0gZXJyIHwgbGlzdF9vbmUocGF0aFtpXSwgcGF0aFtpXSArIGxlbik7CisrCX0KKysJcmV0dXJuIGVycjsKKyB9CisgCistc3RhdGljIGNvbnN0IGNoYXIgKmxzX3RyZWVfdXNhZ2UgPSAiZ2l0LWxzLXRyZWUgWy1yXSBbLXpdIDxrZXk+IFtwYXRocy4uLl0iOworK3N0YXRpYyBjb25zdCBjaGFyICpsc190cmVlX3VzYWdlID0KKysJImdpdC1scy10cmVlIFstZF0gWy1yXSBbLXpdIDx0cmVlLWlzaD4gW3BhdGguLi5dIjsKKyAKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworKwlzdGF0aWMgY2hhciAqcGF0aDBbXSA9IHsgIiIsIE5VTEwgfTsKKysJY2hhciAqKnBhdGg7CisgCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisgCisgCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworQEAgLTE5NCw3ICsyMjMsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCWxpbmVfdGVybWluYXRpb24gPSAwOworIAkJCWJyZWFrOworIAkJY2FzZSAncic6CistCQkJcmVjdXJzaXZlID0gMTsKKysJCQlsc19vcHRpb25zIHw9IExTX1JFQ1VSU0lWRTsKKysJCQlicmVhazsKKysJCWNhc2UgJ2QnOgorKwkJCWxzX29wdGlvbnMgfD0gTFNfVFJFRV9PTkxZOworIAkJCWJyZWFrOworIAkJZGVmYXVsdDoKKyAJCQl1c2FnZShsc190cmVlX3VzYWdlKTsKK0BAIC0yMDYsNyArMjM4LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworIAlpZiAoZ2V0X3NoYTEoYXJndlsxXSwgc2hhMSkgPCAwKQorIAkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CistCWlmIChsaXN0KHNoYTEsICZhcmd2WzJdKSA8IDApCisrCisrCXBhdGggPSAoYXJnYyA9PSAyKSA/IHBhdGgwIDogKGFyZ3YgKyAyKTsKKysJcHJlcGFyZV9yb290KHNoYTEpOworKwlpZiAobGlzdChwYXRoKSA8IDApCisgCQlkaWUoImxpc3QgZmFpbGVkIik7CisgCXJldHVybiAwOworIH0KK2RpZmYgYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2ggYi90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKKy0tLSBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAorKysrIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCitAQCAtNzQsOCArNzQsOCBAQCB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgJ2xzLXRyZWUgZmlsdGVyZWQnIFwKKyAgICAgJ2dpdC1scy10cmVlICR0cmVlIHBhdGgxIHBhdGgwID5jdXJyZW50ICYmCisgICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorLTEwMDY0NCBibG9iIFgJcGF0aDAKKyAxMjAwMDAgYmxvYiBYCXBhdGgxCisrMTAwNjQ0IGJsb2IgWAlwYXRoMAorIEVPRgorICAgICAgdGVzdF9vdXRwdXQnCisgCitAQCAtODUsNyArODUsNiBAQCB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgMDQwMDAwIHRyZWUgWAlwYXRoMgorIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CistMTAwNjQ0IGJsb2IgWAlwYXRoMi9iYXovYgorIDEyMDAwMCBibG9iIFgJcGF0aDIvYmF6Ym8KKyAxMDA2NDQgYmxvYiBYCXBhdGgyL2ZvbworIEVPRgorZGlmZiBhL3RyZWUuYyBiL3RyZWUuYworLS0tIGEvdHJlZS5jCisrKysgYi90cmVlLmMKK0BAIC0xMzMsNyArMTMzLDcgQEAgaW50IHBhcnNlX3RyZWVfYnVmZmVyKHN0cnVjdCB0cmVlICppdGVtLAorIAkJfQorIAkJaWYgKG9iaikKKyAJCQlhZGRfcmVmKCZpdGVtLT5vYmplY3QsIG9iaik7CistCisrCQllbnRyeS0+cGFyZW50ID0gTlVMTDsgLyogbmVlZHMgdG8gYmUgZmlsbGVkIGJ5IHRoZSB1c2VyICovCisgCQkqbGlzdF9wID0gZW50cnk7CisgCQlsaXN0X3AgPSAmZW50cnktPm5leHQ7CisgCX0KK2RpZmYgYS90cmVlLmggYi90cmVlLmgKKy0tLSBhL3RyZWUuaAorKysrIGIvdHJlZS5oCitAQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0IHsKKyAJCXN0cnVjdCB0cmVlICp0cmVlOworIAkJc3RydWN0IGJsb2IgKmJsb2I7CisgCX0gaXRlbTsKKysJc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqcGFyZW50OworIH07CisgCisgc3RydWN0IHRyZWUgewpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTguZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTguZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTU1YzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktOC5leHBlY3QKQEAgLTAsMCArMSwyIEBACisgdC90NDEwMC1hcHBseS1zdGF0LnNoIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTgucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2ExM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTgucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtLWdpdCBhL3QvdDQxMDAtYXBwbHktc3RhdC5zaCBiL3QvdDQxMDAtYXBwbHktc3RhdC5zaAoraW5kZXggYmU4MzdiYi4uMDc5OGM2NCAxMDA3NTUKKy0tLSBhL3QvdDQxMDAtYXBwbHktc3RhdC5zaAorKysrIGIvdC90NDEwMC1hcHBseS1zdGF0LnNoCitAQCAtMzUsNCArMzUsNCBAQCBub24gZ2l0ICgyKQorIG5vbiBnaXQgKDMpCisgRU9GCisgCistdGVzdF9kb25lCisrdGVzdF9kb25lCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS05LmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS05LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWE1NWMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTkuZXhwZWN0CkBAIC0wLDAgKzEsMiBAQAorIHQvdDQxMDAtYXBwbHktc3RhdC5zaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS05LnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1ZDU3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS05LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLS1naXQgYS90L3Q0MTAwLWFwcGx5LXN0YXQuc2ggYi90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKK2luZGV4IDA3OThjNjQuLmJlODM3YmIgMTAwNzU1CistLS0gYS90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKKysrKyBiL3QvdDQxMDAtYXBwbHktc3RhdC5zaAorQEAgLTM1LDQgKzM1LDQgQEAgbm9uIGdpdCAoMikKKyBub24gZ2l0ICgzKQorIEVPRgorIAorLXRlc3RfZG9uZQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTAxLWFwcGx5LW5vbmwuc2ggYi90L3Q0MTAxLWFwcGx5LW5vbmwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM0NDNkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEtYXBwbHktbm9ubC5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBzaG91bGQgaGFuZGxlIGZpbGVzIHdpdGggaW5jb21wbGV0ZSBsaW5lcy4KKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgc2V0dXAKKworKGVjaG8gYTsgZWNobyBiKSA+ZnJvdHouMAorKGVjaG8gYTsgZWNobyBiOyBlY2hvIGMpID5mcm90ei4xCisoZWNobyBhOyBlY2hvIGIgfCB0ciAtZCAnXDAxMicpID5mcm90ei4yCisoZWNobyBhOyBlY2hvIGM7IGVjaG8gYiB8IHRyIC1kICdcMDEyJykgPmZyb3R6LjMKKworZm9yIGkgaW4gMCAxIDIgMworZG8KKyAgZm9yIGogaW4gMCAxIDIgMworICBkbworICAgIHRlc3QgJGkgLWVxICRqICYmIGNvbnRpbnVlCisgICAgY2F0IGZyb3R6LiRpID5mcm90egorICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFwcGx5IGRpZmYgYmV0d2VlbiAkaSBhbmQgJGoiICcKKwlnaXQgYXBwbHkgPCIkVEVTVF9ESVJFQ1RPUlkiL3Q0MTAxL2RpZmYuJGktJGogJiYKKwl0ZXN0X2NtcCBmcm90ei4kaiBmcm90egorICAgICcKKyAgZG9uZQorZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4wLTEgYi90L3Q0MTAxL2RpZmYuMC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMTBhODgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMC0xCkBAIC0wLDAgKzEsNiBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwyICsxLDMgQEAKKyBhCisgYgorK2MKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4wLTIgYi90L3Q0MTAxL2RpZmYuMC0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NDYwYTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMC0yCkBAIC0wLDAgKzEsNyBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwyICsxLDIgQEAKKyBhCistYgorK2IKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjAtMyBiL3QvdDQxMDEvZGlmZi4wLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4MWM0MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4wLTMKQEAgLTAsMCArMSw4IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDIgKzEsMyBAQAorIGEKKy1iCisrYworK2IKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjEtMCBiL3QvdDQxMDEvZGlmZi4xLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhMmU5MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4xLTAKQEAgLTAsMCArMSw2IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDMgKzEsMiBAQAorIGEKKyBiCistYwpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjEtMiBiL3QvdDQxMDEvZGlmZi4xLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0NDBhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4xLTIKQEAgLTAsMCArMSw4IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDMgKzEsMiBAQAorIGEKKy1iCistYworK2IKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjEtMyBiL3QvdDQxMDEvZGlmZi4xLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhZmY5NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4xLTMKQEAgLTAsMCArMSw4IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDMgKzEsMyBAQAorIGEKKy1iCisgYworK2IKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjItMCBiL3QvdDQxMDEvZGlmZi4yLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlNzFlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4yLTAKQEAgLTAsMCArMSw3IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDIgKzEsMiBAQAorIGEKKy1iCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKytiCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMi0xIGIvdC90NDEwMS9kaWZmLjItMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjZkOWZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjItMQpAQCAtMCwwICsxLDggQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMiArMSwzIEBACisgYQorLWIKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK2IKKytjCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMi0zIGIvdC90NDEwMS9kaWZmLjItMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjMzYzgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjItMwpAQCAtMCwwICsxLDcgQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMiArMSwzIEBACisgYQorK2MKKyBiCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4zLTAgYi90L3Q0MTAxL2RpZmYuMy0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYjFhNDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMy0wCkBAIC0wLDAgKzEsOCBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwzICsxLDIgQEAKKyBhCistYworLWIKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK2IKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4zLTEgYi90L3Q0MTAxL2RpZmYuMy0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OTljNjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMy0xCkBAIC0wLDAgKzEsOCBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwzICsxLDMgQEAKKyBhCisrYgorIGMKKy1iCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4zLTIgYi90L3Q0MTAxL2RpZmYuMy0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDFiYTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMy0yCkBAIC0wLDAgKzEsNyBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwzICsxLDIgQEAKKyBhCistYworIGIKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMi1hcHBseS1yZW5hbWUuc2ggYi90L3Q0MTAyLWFwcGx5LXJlbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lM2VhM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMi1hcHBseS1yZW5hbWUuc2gKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgaGFuZGxpbmcgY29weS9yZW5hbWUgcGF0Y2guCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcHJlcmVxLUZJTEVNT0RFLnNoCisKKyMgc2V0dXAKKworY2F0ID50ZXN0LXBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL2ZvbyBiL2Jhcgorc2ltaWxhcml0eSBpbmRleCA0NyUKK3JlbmFtZSBmcm9tIGZvbworcmVuYW1lIHRvIGJhcgorLS0tIGEvZm9vCisrKysgYi9iYXIKK0BAIC0xICsxIEBACistVGhpcyBpcyBmb28KKytUaGlzIGlzIGJhcgorRU9GCisKK2VjaG8gJ1RoaXMgaXMgZm9vJyA+Zm9vCitjaG1vZCAreCBmb28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGFwcGx5IFwKKyAgICAnZ2l0IGFwcGx5IC0taW5kZXggLS1zdGF0IC0tc3VtbWFyeSAtLWFwcGx5IHRlc3QtcGF0Y2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgdmFsaWRhdGUgXAorCSAgICAndGVzdCAtZiBiYXIgJiYgbHMgLWwgYmFyIHwgZ3JlcCAiXi0uLnguLi4uLi4iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSByZXZlcnNlJyBcCisgICAgJ2dpdCBhcHBseSAtUiAtLWluZGV4IC0tc3RhdCAtLXN1bW1hcnkgLS1hcHBseSB0ZXN0LXBhdGNoICYmCisgICAgIHRlc3QgIiQoY2F0IGZvbykiID0gIlRoaXMgaXMgZm9vIicKKworY2F0ID50ZXN0LXBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL2ZvbyBiL2Jhcgorc2ltaWxhcml0eSBpbmRleCA0NyUKK2NvcHkgZnJvbSBmb28KK2NvcHkgdG8gYmFyCistLS0gYS9mb28KKysrKyBiL2JhcgorQEAgLTEgKzEgQEAKKy1UaGlzIGlzIGZvbworK1RoaXMgaXMgYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgY29weScgXAorICAgICdnaXQgYXBwbHkgLS1pbmRleCAtLXN0YXQgLS1zdW1tYXJ5IC0tYXBwbHkgdGVzdC1wYXRjaCAmJgorICAgICB0ZXN0ICIkKGNhdCBiYXIpIiA9ICJUaGlzIGlzIGJhciIgLWEgIiQoY2F0IGZvbykiID0gIlRoaXMgaXMgZm9vIicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTAzLWFwcGx5LWJpbmFyeS5zaCBiL3QvdDQxMDMtYXBwbHktYmluYXJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxYjkwNmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAzLWFwcGx5LWJpbmFyeS5zaApAQCAtMCwwICsxLDE1OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgaGFuZGxpbmcgYmluYXJ5IHBhdGNoZXMKKworJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2F0ID5maWxlMSA8PC1cRU9GICYmCisJQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuCisJQSB0aW55IGxpdHRsZSBwZW5ndWluIHJ1bnMgYXJvdW5kIGluIGNpcmNsZXMuCisJVGhlcmUgaXMgYSBmbGFnIHdpdGggTGludXggd3JpdHRlbiBvbiBpdC4KKwlBIHNsb3cgYmxhY2stYW5kLXdoaXRlIHBhbmRhIGp1c3Qgc2l0cyB0aGVyZSwKKwltdW5jaGluZyBvbiBoaXMgYmFtYm9vLgorCUVPRgorCWNhdCBmaWxlMSA+ZmlsZTIgJiYKKwljYXQgZmlsZTEgPmZpbGU0ICYmCisKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGZpbGUxIGZpbGUyIGZpbGU0ICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBWZXJzaW9uIiAyPi9kZXYvbnVsbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJpbmFyeSAmJgorCSIkUEVSTF9QQVRIIiAtcGUgInkveC9cMDAwLyIgPGZpbGUxID5maWxlMyAmJgorCWNhdCBmaWxlMyA+ZmlsZTQgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJIiRQRVJMX1BBVEgiIC1wZSAieS9cMDAwL3YvIiA8ZmlsZTMgPmZpbGUxICYmCisJcm0gLWYgZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGZpbGUxIGZpbGUyIGZpbGUzIGZpbGU0ICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIFZlcnNpb24iICYmCisKKwlnaXQgZGlmZi10cmVlIC1wIG1hc3RlciBiaW5hcnkgPkIuZGlmZiAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLUMgbWFzdGVyIGJpbmFyeSA+Qy5kaWZmICYmCisKKwlnaXQgZGlmZi10cmVlIC1wIC0tYmluYXJ5IG1hc3RlciBiaW5hcnkgPkJGLmRpZmYgJiYKKwlnaXQgZGlmZi10cmVlIC1wIC0tYmluYXJ5IC1DIG1hc3RlciBiaW5hcnkgPkNGLmRpZmYgJiYKKworCWdpdCBkaWZmLXRyZWUgLXAgLS1mdWxsLWluZGV4IG1hc3RlciBiaW5hcnkgPkItaW5kZXguZGlmZiAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLUMgLS1mdWxsLWluZGV4IG1hc3RlciBiaW5hcnkgPkMtaW5kZXguZGlmZiAmJgorCisJZ2l0IGRpZmYtdHJlZSAtcCAtLWJpbmFyeSAtLW5vLXByZWZpeCBtYXN0ZXIgYmluYXJ5IC0tIGZpbGUzID5CMC5kaWZmICYmCisKKwlnaXQgaW5pdCBvdGhlci1yZXBvICYmCisJKAorCQljZCBvdGhlci1yZXBvICYmCisJCWdpdCBmZXRjaCAuLiBtYXN0ZXIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBGRVRDSF9IRUFECisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0IGJpbmFyeSBkaWZmIC0tIHNob3VsZCBub3QgZmFpbC4nIFwKKwknZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSBCLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXQgYmluYXJ5IC1wMCBkaWZmIC0tIHNob3VsZCBub3QgZmFpbC4nICcKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgYXBwbHkgLS1zdGF0IC1wMCBCMC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXQgYmluYXJ5IGRpZmYgKGNvcHkpIC0tIHNob3VsZCBub3QgZmFpbC4nIFwKKwknZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSBDLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGJpbmFyeSBkaWZmIC0tIHNob3VsZCBmYWlsLicgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIEIuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYmluYXJ5IGRpZmYgKGNvcHkpIC0tIHNob3VsZCBmYWlsLicgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIEMuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoZWNrIGluY29tcGxldGUgYmluYXJ5IGRpZmYgd2l0aCByZXBsYWNlbWVudCAtLSBzaG91bGQgZmFpbC4nICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQgQi5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVjayBpbmNvbXBsZXRlIGJpbmFyeSBkaWZmIHdpdGggcmVwbGFjZW1lbnQgKGNvcHkpIC0tIHNob3VsZCBmYWlsLicgJworCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIC0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IEMuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBiaW5hcnkgZGlmZiB3aXRoIHJlcGxhY2VtZW50LicgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBhcHBseSAtLWNoZWNrIC0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IEJGLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGJpbmFyeSBkaWZmIHdpdGggcmVwbGFjZW1lbnQgKGNvcHkpLicgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBhcHBseSAtLWNoZWNrIC0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IENGLmRpZmYnCisKKyMgTm93IHdlIHN0YXJ0IGFwcGx5aW5nIHRoZW0uCisKK2RvX3Jlc2V0ICgpIHsKKwlybSAtZiBmaWxlPyAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIC0tIHNob3VsZCBmYWlsLicgXAorCSdkb19yZXNldCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgQi5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiAtLSBzaG91bGQgZmFpbC4nIFwKKwknZG9fcmVzZXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggQi5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiAoY29weSkgLS0gc2hvdWxkIGZhaWwuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBDLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIChjb3B5KSAtLSBzaG91bGQgZmFpbC4nIFwKKwknZG9fcmVzZXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggQy5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiB3aXRoIGZ1bGwtaW5kZXgnICcKKwlkb19yZXNldCAmJgorCWdpdCBhcHBseSBCLWluZGV4LmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgd2l0aCBmdWxsLWluZGV4IChjb3B5KScgJworCWRvX3Jlc2V0ICYmCisJZ2l0IGFwcGx5IEMtaW5kZXguZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBmdWxsLWluZGV4IGJpbmFyeSBkaWZmIGluIG5ldyByZXBvJyAnCisJKGNkIG90aGVyLXJlcG8gJiYKKwkgZG9fcmVzZXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC4uL0ItaW5kZXguZGlmZikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgd2l0aG91dCByZXBsYWNlbWVudC4nIFwKKwknZG9fcmVzZXQgJiYKKwkgZ2l0IGFwcGx5IEJGLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIHdpdGhvdXQgcmVwbGFjZW1lbnQgKGNvcHkpLicgXAorCSdkb19yZXNldCAmJgorCSBnaXQgYXBwbHkgQ0YuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIGdpdCBhcHBseSAtLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCAtLWluZGV4IEJGLmRpZmYgJiYKKwkgdGVzdCAteiAiJChnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIGJpbmFyeSkiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiAoY29weSkuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIGdpdCBhcHBseSAtLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCAtLWluZGV4IENGLmRpZmYgJiYKKwkgdGVzdCAteiAiJChnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIGJpbmFyeSkiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgLXAwIGRpZmYnICcKKwlkb19yZXNldCAmJgorCWdpdCBhcHBseSAtcDAgLS1pbmRleCBCMC5kaWZmICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIGJpbmFyeSAtLSBmaWxlMykiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwNC1hcHBseS1ib3VuZGFyeS5zaCBiL3QvdDQxMDQtYXBwbHktYm91bmRhcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzYxN2MyYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDQtYXBwbHktYm91bmRhcnkuc2gKQEAgLTAsMCArMSwxNDYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IGJvdW5kYXJ5IHRlc3RzCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCitMPSJjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiBiICciJEwiJyB5CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPm9yaWdpbmFsICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB2aWN0aW0gJiYKKworCTogYWRkIHRvIHRoZSBoZWFkCisJZm9yIGkgaW4gYSBiICciJEwiJyB5CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPmFkZC1hLWV4cGVjdCAmJgorCWdpdCBkaWZmIHZpY3RpbSA+YWRkLWEtcGF0Y2gud2l0aCAmJgorCWdpdCBkaWZmIC0tdW5pZmllZD0wID5hZGQtYS1wYXRjaC53aXRob3V0ICYmCisKKwk6IGluc2VydCBhdCBsaW5lIHR3bworCWZvciBpIGluIGIgYSAnIiRMIicgeQorCWRvCisJCWVjaG8gJGkKKwlkb25lID52aWN0aW0gJiYKKwljYXQgdmljdGltID5pbnNlcnQtYS1leHBlY3QgJiYKKwlnaXQgZGlmZiB2aWN0aW0gPmluc2VydC1hLXBhdGNoLndpdGggJiYKKwlnaXQgZGlmZiAtLXVuaWZpZWQ9MCA+aW5zZXJ0LWEtcGF0Y2gud2l0aG91dCAmJgorCisJOiBtb2RpZnkgYXQgdGhlIGhlYWQKKwlmb3IgaSBpbiBhICciJEwiJyB5CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPm1vZC1hLWV4cGVjdCAmJgorCWdpdCBkaWZmIHZpY3RpbSA+bW9kLWEtcGF0Y2gud2l0aCAmJgorCWdpdCBkaWZmIC0tdW5pZmllZD0wID5tb2QtYS1wYXRjaC53aXRob3V0ICYmCisKKwk6IHJlbW92ZSBmcm9tIHRoZSBoZWFkCisJZm9yIGkgaW4gJyIkTCInIHkKKwlkbworCQllY2hvICRpCisJZG9uZSA+dmljdGltICYmCisJY2F0IHZpY3RpbSA+ZGVsLWEtZXhwZWN0ICYmCisJZ2l0IGRpZmYgdmljdGltID5kZWwtYS1wYXRjaC53aXRoCisJZ2l0IGRpZmYgLS11bmlmaWVkPTAgPmRlbC1hLXBhdGNoLndpdGhvdXQgJiYKKworCTogYWRkIHRvIHRoZSB0YWlsCisJZm9yIGkgaW4gYiAnIiRMIicgeSB6CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPmFkZC16LWV4cGVjdCAmJgorCWdpdCBkaWZmIHZpY3RpbSA+YWRkLXotcGF0Y2gud2l0aCAmJgorCWdpdCBkaWZmIC0tdW5pZmllZD0wID5hZGQtei1wYXRjaC53aXRob3V0ICYmCisKKwk6IG1vZGlmeSBhdCB0aGUgdGFpbAorCWZvciBpIGluIGIgJyIkTCInIHoKKwlkbworCQllY2hvICRpCisJZG9uZSA+dmljdGltICYmCisJY2F0IHZpY3RpbSA+bW9kLXotZXhwZWN0ICYmCisJZ2l0IGRpZmYgdmljdGltID5tb2Qtei1wYXRjaC53aXRoICYmCisJZ2l0IGRpZmYgLS11bmlmaWVkPTAgPm1vZC16LXBhdGNoLndpdGhvdXQgJiYKKworCTogcmVtb3ZlIGZyb20gdGhlIHRhaWwKKwlmb3IgaSBpbiBiICciJEwiJworCWRvCisJCWVjaG8gJGkKKwlkb25lID52aWN0aW0gJiYKKwljYXQgdmljdGltID5kZWwtei1leHBlY3QgJiYKKwlnaXQgZGlmZiB2aWN0aW0gPmRlbC16LXBhdGNoLndpdGgKKwlnaXQgZGlmZiAtLXVuaWZpZWQ9MCA+ZGVsLXotcGF0Y2gud2l0aG91dCAmJgorCisJOiBkb25lCisnCisKK2ZvciB3aXRoIGluIHdpdGggd2l0aG91dAorZG8KKwljYXNlICIkd2l0aCIgaW4KKwl3aXRoKSB1PSA7OworCXdpdGhvdXQpIHU9Jy0tdW5pZGlmZi16ZXJvICcgOzsKKwllc2FjCisJZm9yIGtpbmQgaW4gYWRkLWEgYWRkLXogaW5zZXJ0LWEgbW9kLWEgbW9kLXogZGVsLWEgZGVsLXoKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhcHBseSAka2luZC1wYXRjaCAkd2l0aCBjb250ZXh0IiAnCisJCQljYXQgb3JpZ2luYWwgPnZpY3RpbSAmJgorCQkJZ2l0IHVwZGF0ZS1pbmRleCB2aWN0aW0gJiYKKwkJCWdpdCBhcHBseSAtLWluZGV4ICciJHUka2luZC1wYXRjaC4kd2l0aCInIHx8IHsKKwkJCQljYXQgJyIka2luZC1wYXRjaC4kd2l0aCInCisJCQkJKGV4aXQgMSkKKwkJCX0gJiYKKwkJCXRlc3RfY21wICciJGtpbmQiJy1leHBlY3QgdmljdGltCisJCScKKwlkb25lCitkb25lCisKK2ZvciBraW5kIGluIGFkZC1hIGFkZC16IGluc2VydC1hIG1vZC1hIG1vZC16IGRlbC1hIGRlbC16CitkbworCXJtIC1mICRraW5kLW5nLndpdGhvdXQKKwlzZWQJLWUgInMvXmRpZmYgLS1naXQgL2RpZmYgLyIgXAorCQktZSAnL15pbmRleCAvZCcgXAorCQk8JGtpbmQtcGF0Y2gud2l0aG91dCA+JGtpbmQtbmcud2l0aG91dAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFwcGx5IG5vbi1naXQgJGtpbmQtcGF0Y2ggd2l0aG91dCBjb250ZXh0IiAnCisJCWNhdCBvcmlnaW5hbCA+dmljdGltICYmCisJCWdpdCB1cGRhdGUtaW5kZXggdmljdGltICYmCisJCWdpdCBhcHBseSAtLXVuaWRpZmYtemVybyAtLWluZGV4ICciJGtpbmQtbmcud2l0aG91dCInIHx8IHsKKwkJCWNhdCAnIiRraW5kLW5nLndpdGhvdXQiJworCQkJKGV4aXQgMSkKKwkJfSAmJgorCQl0ZXN0X2NtcCAnIiRraW5kIictZXhwZWN0IHZpY3RpbQorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIGxpbmVzJyAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gYWFhID5maWxlICYmCisJZ2l0IGRpZmYgPnBhdGNoICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBiYmIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jaGVjayBwYXRjaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHBhdGNoIHdpdGggMyBjb250ZXh0IGxpbmVzIG1hdGNoaW5nIGF0IGVuZCcgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgZWNobyBkOyB9ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBlID4+ZmlsZSAmJgorCWdpdCBkaWZmID5wYXRjaCAmJgorCT5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwNS1hcHBseS1mdXp6LnNoIGIvdC90NDEwNS1hcHBseS1mdXp6LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyNjZlMzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA1LWFwcGx5LWZ1enouc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FwcGx5IHdpdGggZnV6eiBhbmQgb2Zmc2V0JworCisuIC4vdGVzdC1saWIuc2gKKworZG90ZXN0ICgpIHsKKwluYW1lPSIkMSIgJiYgc2hpZnQgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgorCQlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXEgLXUgZmlsZSAmJgorCQlnaXQgYXBwbHkgJCogJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKwkiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZSAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgYSBiIGMgZCBlIDggOSAxMCAxMSAxMgorCWRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlICYmCisJY2F0IGZpbGUgPmV4cGVjdCAmJgorCWdpdCBkaWZmID5PMC5kaWZmICYmCisKKwlzZWQgLWUgInMvQEAgLTUsNiArNSwxMSBAQC9AQCAtMiw2ICsyLDExIEBALyIgPk8xLmRpZmYgTzAuZGlmZiAmJgorCXNlZCAtZSAicy9AQCAtNSw2ICs1LDExIEBAL0BAIC03LDYgKzcsMTEgQEAvIiA+TzIuZGlmZiBPMC5kaWZmICYmCisJc2VkIC1lICJzL0BAIC01LDYgKzUsMTEgQEAvQEAgLTE5LDYgKzE5LDExIEBALyIgPk8zLmRpZmYgTzAuZGlmZiAmJgorCisJc2VkIC1lICJzL14gNS8gUy8iID5GMC5kaWZmIE8wLmRpZmYgJiYKKwlzZWQgLWUgInMvXiA1LyBTLyIgPkYxLmRpZmYgTzEuZGlmZiAmJgorCXNlZCAtZSAicy9eIDUvIFMvIiA+RjIuZGlmZiBPMi5kaWZmICYmCisJc2VkIC1lICJzL14gNS8gUy8iID5GMy5kaWZmIE8zLmRpZmYKKworJworCitkb3Rlc3QgJ3VubW9kaWZpZWQgcGF0Y2gnIE8wLmRpZmYKKworZG90ZXN0ICdtaW51cyBvZmZzZXQnIE8xLmRpZmYKKworZG90ZXN0ICdwbHVzIG9mZnNldCcgTzIuZGlmZgorCitkb3Rlc3QgJ2JpZyBvZmZzZXQnIE8zLmRpZmYKKworZG90ZXN0ICdmdXp6IHdpdGggbm8gb2Zmc2V0JyAtQzIgRjAuZGlmZgorCitkb3Rlc3QgJ2Z1enogd2l0aCBtaW51cyBvZmZzZXQnIC1DMiBGMS5kaWZmCisKK2RvdGVzdCAnZnV6eiB3aXRoIHBsdXMgb2Zmc2V0JyAtQzIgRjIuZGlmZgorCitkb3Rlc3QgJ2Z1enogd2l0aCBiaWcgb2Zmc2V0JyAtQzIgRjMuZGlmZgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDYtYXBwbHktc3RkaW4uc2ggYi90L3Q0MTA2LWFwcGx5LXN0ZGluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcyNDY3YTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA2LWFwcGx5LXN0ZGluLnNoCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgLS1udW1zdGF0IC0gPHBhdGNoJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+dGV4dCAmJgorCWdpdCBhZGQgdGV4dCAmJgorCWVjaG8gZ29vZGJ5ZSA+dGV4dCAmJgorCWdpdCBkaWZmID5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgLS1udW1zdGF0IC0gPCBwYXRjaCcgJworCWVjaG8gIjEJMQl0ZXh0IiA+ZXhwZWN0ICYmCisJZ2l0IGFwcGx5IC0tbnVtc3RhdCAtIDxwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgLS1udW1zdGF0IC0gPCBwYXRjaCBwYXRjaCcgJworCWZvciBpIGluIDEgMjsgZG8gZWNobyAiMQkxCXRleHQiOyBkb25lID5leHBlY3QgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IC0gPCBwYXRjaCBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDctYXBwbHktaWdub3JlLXdoaXRlc3BhY2Uuc2ggYi90L3Q0MTA3LWFwcGx5LWlnbm9yZS13aGl0ZXNwYWNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwNGZjOGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA3LWFwcGx5LWlnbm9yZS13aGl0ZXNwYWNlLnNoCkBAIC0wLDAgKzEsMTg1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEdpdXNlcHBlIEJpbG90dGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWFwcGx5IC0taWdub3JlLXdoaXRlc3BhY2UuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoaXMgcHJpbWVzIG1haW4uYyBmaWxlIHRoYXQgaW5kZW50cyB3aXRob3V0IHVzaW5nIEhUIGF0IGFsbC4KKyMgVmFyaW91cyBwYXRjaGVzIHdpdGggSFQgYW5kIG90aGVyIHNwYWNlcyBhcmUgYXR0ZW1wdGVkIGluIHRoZSB0ZXN0LgorCitjYXQgPiBwYXRjaDEucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWFpbi5jCitAQCAtMCwwICsxLDIyIEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrdm9pZCBwcmludF9pbnQoaW50IG51bSk7CisraW50IGZ1bmMoaW50IG51bSk7CisrCisraW50IG1haW4oKSB7CisrICAgICAgIGludCBpOworKworKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworKyAgICAgICAgICAgICAgIHByaW50X2ludChmdW5jKGkpKTsgLyogc3R1ZmYgKi8KKysgICAgICAgfQorKworKyAgICAgICByZXR1cm4gMDsKKyt9CisrCisraW50IGZ1bmMoaW50IG51bSkgeworKyAgICAgICByZXR1cm4gbnVtICogbnVtOworK30KKysKKyt2b2lkIHByaW50X2ludChpbnQgbnVtKSB7CisrICAgICAgIHByaW50ZigiJWQiLCBudW0pOworK30KK0VPRgorCisjIFNpbmNlIHdoaXRlc3BhY2UgaXMgdmVyeSBzaWduaWZpY2FudCBhbmQgd2Ugd2FudCB0byBwcmV2ZW50IHdoaXRlc3BhY2UKKyMgbWFuZ2xpbmcgd2hlbiBjcmVhdGluZyB0aGlzIHRlc3QgZnJvbSBhIHBhdGNoLCB3ZSBwcm90ZWN0ICdmaXhhYmxlJworIyB3aGl0ZXNwYWNlIGJ5IHJlcGxhY2luZyBzcGFjZXMgd2l0aCBaIGFuZCByZXBsYWNpbmcgdGhlbSBhdCBwYXRjaAorIyBjcmVhdGlvbiB0aW1lLCBoZW5jZSB0aGUgc2VkIHRyaWNrLgorCisjIFRoaXMgcGF0Y2ggd2lsbCBmYWlsIHVubGVzcyB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIGFyZSBiZWluZyBpZ25vcmVkCisKK3NlZCAtZSAncy9aLyAvZycgPiBwYXRjaDIucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEwLDYgKzEwLDggQEAKK1oJCXByaW50X2ludChmdW5jKGkpKTsgLyogc3R1ZmYgKi8KK1oJfQorWgorKwlwcmludGYoIlxuIik7CisrCitaCXJldHVybiAwOworWn0KK1oKK0VPRgorCisjIFRoaXMgcGF0Y2ggd2lsbCBmYWlsIGV2ZW4gaWYgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyBhcmUgYmVpbmcgaWdub3JlZCwKKyMgYmVjYXVzZSBvZiB0aGUgbWlzc2luZyBzdHJpbmcgYXQgRU9MLiBUT0RPOiB0aGlzIHRlc3RjYXNlIHNob3VsZCBiZQorIyBpbXByb3ZlZCBieSBjcmVhdGluZyBhIGxpbmUgdGhhdCBoYXMgdGhlIHNhbWUgaGFzaCB3aXRoIGFuZCB3aXRob3V0CisjIHRoZSBmaW5hbCBzdHJpbmcuCisKK3NlZCAtZSAncy9aLyAvZycgPiBwYXRjaDMucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEwLDMgKzEwLDQgQEAKK1oJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKK1oJCXByaW50X2ludChmdW5jKGkpKTtaCisrCQkvKiBzdHVmZiAqLworWgl9CitFT0YKKworIyBUaGlzIHBhdGNoIHdpbGwgZmFpbCBldmVuIGlmIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMgYXJlIGJlaW5nIGlnbm9yZWQsCisjIGJlY2F1c2Ugb2YgdGhlIG1pc3NpbmcgRU9MIGF0IEVPRi4KKworc2VkIC1lICdzL1ovIC9nJyA+IHBhdGNoNC5wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMjEsMSArMjEsMSBAQAorLQl9O1oKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorKwl9OworRU9GCisKKyMgVGhpcyBwYXRjaCB3aWxsIGZhaWwgdW5sZXNzIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMgYXJlIGJlaW5nIGlnbm9yZWQuCisKK3NlZCAtZSAncy9aLyAvZycgPiBwYXRjaDUucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTIsMiArMiwzIEBACitaCXZvaWQgcHJpbnRfaW50KGludCBudW0pOworKwkvKiBhIGNvbW1lbnQgKi8KK1oJaW50IGZ1bmMoaW50IG51bSk7CitFT0YKKworIyBBbmQgdGhpcyBpcyBob3cgdGhlIGZpbmFsIG91dHB1dCBzaG91bGQgYmUuICBQYXRjaGVzIGludHJvZHVjZQorIyBIVHMgYnV0IHRoZSBvcmlnaW5hbCBTUCBpbmRlbnRzIGFyZSBtb3N0bHkga2VwdC4KKworc2VkIC1lICdzL1QvCS9nJyA+IG1haW4uYy5maW5hbCA8PFxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgorCit2b2lkIHByaW50X2ludChpbnQgbnVtKTsKK1QvKiBhIGNvbW1lbnQgKi8KK2ludCBmdW5jKGludCBudW0pOworCitpbnQgbWFpbigpIHsKKyAgICAgICBpbnQgaTsKKworICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICAgICBwcmludF9pbnQoZnVuYyhpKSk7IC8qIHN0dWZmICovCisgICAgICAgfQorCitUcHJpbnRmKCJcbiIpOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmdW5jKGludCBudW0pIHsKKyAgICAgICByZXR1cm4gbnVtICogbnVtOworfQorCit2b2lkIHByaW50X2ludChpbnQgbnVtKSB7CisgICAgICAgcHJpbnRmKCIlZCIsIG51bSk7Cit9CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjcmVhdGlvbicgJworCWdpdCBhcHBseSBwYXRjaDEucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gyIGZhaWxzIChyZXRhYiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2gyLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoMiBhcHBsaWVzIHdpdGggLS1pZ25vcmUtd2hpdGVzcGFjZScgJworCWdpdCBhcHBseSAtLWlnbm9yZS13aGl0ZXNwYWNlIHBhdGNoMi5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDIgcmV2ZXJzZSBhcHBsaWVzIHdpdGggLS1pZ25vcmUtc3BhY2UtY2hhbmdlJyAnCisJZ2l0IGFwcGx5IC1SIC0taWdub3JlLXNwYWNlLWNoYW5nZSBwYXRjaDIucGF0Y2gKKycKKworZ2l0IGNvbmZpZyBhcHBseS5pZ25vcmV3aGl0ZXNwYWNlIGNoYW5nZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDIgYXBwbGllcyAoYXBwbHkuaWdub3Jld2hpdGVzcGFjZSA9IGNoYW5nZSknICcKKwlnaXQgYXBwbHkgcGF0Y2gyLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoMyBmYWlscyAobWlzc2luZyBzdHJpbmcgYXQgRU9MKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaDMucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2g0IGZhaWxzIChtaXNzaW5nIEVPTCBhdCBFT0YpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoNC5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDUgYXBwbGllcyAobGVhZGluZyB3aGl0ZXNwYWNlKScgJworCWdpdCBhcHBseSBwYXRjaDUucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2hlcyBkbyBub3QgbWFuZ2xlIHdoaXRlc3BhY2UnICcKKwl0ZXN0X2NtcCBtYWluLmMgbWFpbi5jLmZpbmFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLWNyZWF0ZSBmaWxlICh3aXRoIC0taWdub3JlLXdoaXRlc3BhY2UpJyAnCisJcm0gLWYgbWFpbi5jICYmCisJZ2l0IGFwcGx5IHBhdGNoMS5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDUgZmFpbHMgKC0tbm8taWdub3JlLXdoaXRlc3BhY2UpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tbm8taWdub3JlLXdoaXRlc3BhY2UgcGF0Y2g1LnBhdGNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwOC1hcHBseS10aHJlZXdheS5zaCBiL3QvdDQxMDgtYXBwbHktdGhyZWV3YXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmE1ZDRlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDgtYXBwbHktdGhyZWV3YXkuc2gKQEAgLTAsMCArMSwxNTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgLS0zd2F5JworCisuIC4vdGVzdC1saWIuc2gKKworY3JlYXRlX2ZpbGUgKCkgeworCWZvciBpCisJZG8KKwkJZWNobyAiJGkiCisJZG9uZQorfQorCitzYW5pdGl6ZV9jb25mbGljdGVkX2RpZmYgKCkgeworCXNlZCAtZSAnCisJCS9eaW5kZXggL2QKKwkJcy9eXCgrWzw+XVs8Pl1bPD5dWzw+XSpcKSAuKi9cMS8KKwknCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCWNyZWF0ZV9maWxlID5vbmUgMSAyIDMgNCA1IDYgNyAmJgorCWNhdCBvbmUgPnR3byAmJgorCWdpdCBhZGQgb25lIHR3byAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwl0ZXN0X3RpY2sgJiYKKwljcmVhdGVfZmlsZSA+b25lIDEgdHdvIDMgNCA1IHNpeCA3ICYmCisJY3JlYXRlX2ZpbGUgPnR3byAxIHR3byAzIDQgNSA2IDcgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwljcmVhdGVfZmlsZSA+b25lIDEgMiAzIDQgZml2ZSA2IDcgJiYKKwljcmVhdGVfZmlsZSA+dHdvIDEgMiAzIDQgZml2ZSA2IDcgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNpZGUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aG91dCAtLTN3YXknICcKKwlnaXQgZGlmZiBzaWRlXiBzaWRlID5QLmRpZmYgJiYKKworCSMgc2hvdWxkIGZhaWwgdG8gYXBwbHkKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggUC5kaWZmICYmCisJIyBzaG91bGQgbGVhdmUgdGhpbmdzIGludGFjdAorCWdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgLS1jYWNoZWQgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tM3dheScgJworCSMgTWVyZ2luZyBzaWRlIHNob3VsZCBiZSBzaW1pbGFyIHRvIGFwcGx5aW5nIHRoaXMgcGF0Y2gKKwlnaXQgZGlmZiAuLi5zaWRlID5QLmRpZmYgJiYKKworCSMgVGhlIGNvcnJlc3BvbmRpbmcgY29uZmxpY3RlZCBtZXJnZQorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgc2lkZSAmJgorCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0LmxzICYmCisJZ2l0IGRpZmYgSEVBRCB8IHNhbml0aXplX2NvbmZsaWN0ZWRfZGlmZiA+ZXhwZWN0LmRpZmYgJiYKKworCSMgc2hvdWxkIGZhaWwgdG8gYXBwbHkKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS0zd2F5IFAuZGlmZiAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsLmxzICYmCisJZ2l0IGRpZmYgSEVBRCB8IHNhbml0aXplX2NvbmZsaWN0ZWRfZGlmZiA+YWN0dWFsLmRpZmYgJiYKKworCSMgVGhlIHJlc3VsdCBzaG91bGQgcmVzZW1ibGUgdGhlIGNvcnJlc3BvbmRpbmcgbWVyZ2UKKwl0ZXN0X2NtcCBleHBlY3QubHMgYWN0dWFsLmxzICYmCisJdGVzdF9jbXAgZXhwZWN0LmRpZmYgYWN0dWFsLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLTN3YXkgd2l0aCByZXJlcmUgZW5hYmxlZCcgJworCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCisJIyBNZXJnaW5nIHNpZGUgc2hvdWxkIGJlIHNpbWlsYXIgdG8gYXBwbHlpbmcgdGhpcyBwYXRjaAorCWdpdCBkaWZmIC4uLnNpZGUgPlAuZGlmZiAmJgorCisJIyBUaGUgY29ycmVzcG9uZGluZyBjb25mbGljdGVkIG1lcmdlCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBzaWRlICYmCisKKwkjIE1hbnVhbGx5IHJlc29sdmUgYW5kIHJlY29yZCB0aGUgcmVzb2x1dGlvbgorCWNyZWF0ZV9maWxlIDEgdHdvIDMgNCBmaXZlIHNpeCA3ID5vbmUgJiYKKwlnaXQgcmVyZXJlICYmCisJY2F0IG9uZSA+ZXhwZWN0ICYmCisKKwkjIHNob3VsZCBmYWlsIHRvIGFwcGx5CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IC0tM3dheSBQLmRpZmYgJiYKKworCSMgYnV0IHJlcmVyZSBzaG91bGQgaGF2ZSByZXBsYXllZCB0aGUgcmVjb3JkZWQgcmVzb2x1dGlvbgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLTMgd2l0aCBhZGQvYWRkIGNvbmZsaWN0IHNldHVwJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGFkZGVyICYmCisJY3JlYXRlX2ZpbGUgMSAyIDMgNCA1IDYgNyA+dGhyZWUgJiYKKwljcmVhdGVfZmlsZSAxIDIgMyA0IDUgNiA3ID5mb3VyICYmCisJZ2l0IGFkZCB0aHJlZSBmb3VyICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHRocmVlIGFuZCBmb3VyIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXIgYWRkZXJeICYmCisJY3JlYXRlX2ZpbGUgMSAyIDMgNCA1IDYgNyA+dGhyZWUgJiYKKwljcmVhdGVfZmlsZSAxIDIgMyBmb3VyIDUgNiA3ID5mb3VyICYmCisJZ2l0IGFkZCB0aHJlZSBmb3VyICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHRocmVlIGFuZCBmb3VyIiAmJgorCisJIyBNZXJnaW5nIGFub3RoZXIgc2hvdWxkIGJlIHNpbWlsYXIgdG8gYXBwbHlpbmcgdGhpcyBwYXRjaAorCWdpdCBkaWZmIGFkZGVyLi4uYW5vdGhlciA+UC5kaWZmICYmCisKKwlnaXQgY2hlY2tvdXQgYWRkZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBhbm90aGVyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5leHBlY3QubHMgJiYKKwlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5leHBlY3QuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtMyB3aXRoIGFkZC9hZGQgY29uZmxpY3QnICcKKwkjIHNob3VsZCBmYWlsIHRvIGFwcGx5IC4uLgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYWRkZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IC0tM3dheSBQLmRpZmYgJiYKKwkjIC4uLiBhbmQgbGVhdmUgY29uZmxpY3RzIGluIHRoZSBpbmRleCBhbmQgaW4gdGhlIHdvcmtpbmcgdHJlZQorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsLmxzICYmCisJZ2l0IGRpZmYgSEVBRCB8IHNhbml0aXplX2NvbmZsaWN0ZWRfZGlmZiA+YWN0dWFsLmRpZmYgJiYKKworCSMgVGhlIHJlc3VsdCBzaG91bGQgcmVzZW1ibGUgdGhlIGNvcnJlc3BvbmRpbmcgbWVyZ2UKKwl0ZXN0X2NtcCBleHBlY3QubHMgYWN0dWFsLmxzICYmCisJdGVzdF9jbXAgZXhwZWN0LmRpZmYgYWN0dWFsLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLTMgd2l0aCBhZGQvYWRkIGNvbmZsaWN0IChkaXJ0eSB3b3JraW5nIHRyZWUpJyAnCisJIyBzaG91bGQgZmFpbCB0byBhcHBseSAuLi4KKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGFkZGVyXjAgJiYKKwllY2hvID4+Zm91ciAmJgorCWNhdCBmb3VyID5mb3VyLnNhdmUgJiYKKwljYXQgdGhyZWUgPnRocmVlLnNhdmUgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdC5scyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IC0tM3dheSBQLmRpZmYgJiYKKwkjIC4uLiBhbmQgc2hvdWxkIG5vdCB0b3VjaCBhbnl0aGluZworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsLmxzICYmCisJdGVzdF9jbXAgZXhwZWN0LmxzIGFjdHVhbC5scyAmJgorCXRlc3RfY21wIGZvdXIuc2F2ZSBmb3VyICYmCisJdGVzdF9jbXAgdGhyZWUuc2F2ZSB0aHJlZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDktYXBwbHktbXVsdGlmcmFnLnNoIGIvdC90NDEwOS1hcHBseS1tdWx0aWZyYWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWM1ODA4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDktYXBwbHktbXVsdGlmcmFnLnNoCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMgQ29weXJpZ2h0IChjKSAyMDA1IFJvYmVydCBGaXR6c2ltb25zCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSB0ZXN0IHBhdGNoZXMgd2l0aCBtdWx0aXBsZSBmcmFnbWVudHMuJworCisuIC4vdGVzdC1saWIuc2gKKworY3AgIiRURVNUX0RJUkVDVE9SWS90NDEwOS9wYXRjaDEucGF0Y2giIC4KK2NwICIkVEVTVF9ESVJFQ1RPUlkvdDQxMDkvcGF0Y2gyLnBhdGNoIiAuCitjcCAiJFRFU1RfRElSRUNUT1JZL3Q0MTA5L3BhdGNoMy5wYXRjaCIgLgorY3AgIiRURVNUX0RJUkVDVE9SWS90NDEwOS9wYXRjaDQucGF0Y2giIC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFwcGx5ICgxKScgJworCWdpdCBhcHBseSBwYXRjaDEucGF0Y2ggcGF0Y2gyLnBhdGNoICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWS90NDEwOS9leHBlY3QtMSIgbWFpbi5jCisnCitybSAtZiBtYWluLmMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFwcGx5ICgyKScgJworCWdpdCBhcHBseSBwYXRjaDEucGF0Y2ggcGF0Y2gyLnBhdGNoIHBhdGNoMy5wYXRjaCAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkvdDQxMDkvZXhwZWN0LTIiIG1haW4uYworJworcm0gLWYgbWFpbi5jCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcHBseSAoMyknICcKKwlnaXQgYXBwbHkgcGF0Y2gxLnBhdGNoIHBhdGNoNC5wYXRjaCAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkvdDQxMDkvZXhwZWN0LTMiIG1haW4uYworJworbXYgbWFpbi5jIG1haW4uYy5naXQKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDQxMDkvZXhwZWN0LTEgYi90L3Q0MTA5L2V4cGVjdC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYjVmZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA5L2V4cGVjdC0xCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgZnVuYyhpbnQgbnVtKTsKK3ZvaWQgcHJpbnRfaW50KGludCBudW0pOwordm9pZCBwcmludF9sbigpOworCitpbnQgbWFpbigpIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXByaW50X2ludChmdW5jKGkpKTsKKwl9CisKKwlwcmludF9sbigpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBmdW5jKGludCBudW0pIHsKKwlyZXR1cm4gbnVtICogbnVtOworfQorCit2b2lkIHByaW50X2ludChpbnQgbnVtKSB7CisJcHJpbnRmKCIlZCIsIG51bSk7Cit9CisKK3ZvaWQgcHJpbnRfbG4oKSB7CisJcHJpbnRmKCJcbiIpOworfQorCmRpZmYgLS1naXQgYS90L3Q0MTA5L2V4cGVjdC0yIGIvdC90NDEwOS9leHBlY3QtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzUyOTI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS9leHBlY3QtMgpAQCAtMCwwICsxLDIzIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGZ1bmMoaW50IG51bSk7Cit2b2lkIHByaW50X2ludChpbnQgbnVtKTsKKworaW50IG1haW4oKSB7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlwcmludF9pbnQoZnVuYyhpKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBmdW5jKGludCBudW0pIHsKKwlyZXR1cm4gbnVtICogbnVtOworfQorCit2b2lkIHByaW50X2ludChpbnQgbnVtKSB7CisJcHJpbnRmKCIlZCIsIG51bSk7Cit9CisKZGlmZiAtLWdpdCBhL3QvdDQxMDkvZXhwZWN0LTMgYi90L3Q0MTA5L2V4cGVjdC0zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMmE0NzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA5L2V4cGVjdC0zCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgZnVuYyhpbnQgbnVtKTsKK2ludCBmdW5jMihpbnQgbnVtKTsKKworaW50IG1haW4oKSB7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlwcmludGYoIiVkIiwgZnVuYyhpKSk7CisJCXByaW50ZigiJWQiLCBmdW5jMyhpKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBmdW5jKGludCBudW0pIHsKKwlyZXR1cm4gbnVtICogbnVtOworfQorCitpbnQgZnVuYzIoaW50IG51bSkgeworCXJldHVybiBudW0gKiBudW0gKiBudW07Cit9CisKZGlmZiAtLWdpdCBhL3QvdDQxMDkvcGF0Y2gxLnBhdGNoIGIvdC90NDEwOS9wYXRjaDEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0MTFmYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDkvcGF0Y2gxLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9tYWluLmMKK0BAIC0wLDAgKzEsMjMgQEAKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytpbnQgZnVuYyhpbnQgbnVtKTsKKyt2b2lkIHByaW50X2ludChpbnQgbnVtKTsKKysKKytpbnQgbWFpbigpIHsKKysJaW50IGk7CisrCisrCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisrCQlwcmludF9pbnQoZnVuYyhpKSk7CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorKworK2ludCBmdW5jKGludCBudW0pIHsKKysJcmV0dXJuIG51bSAqIG51bTsKKyt9CisrCisrdm9pZCBwcmludF9pbnQoaW50IG51bSkgeworKwlwcmludGYoIiVkIiwgbnVtKTsKKyt9CisrCmRpZmYgLS1naXQgYS90L3Q0MTA5L3BhdGNoMi5wYXRjaCBiL3QvdDQxMDkvcGF0Y2gyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNmIwNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA5L3BhdGNoMi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEsNyArMSw5IEBACisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorIAorIGludCBmdW5jKGludCBudW0pOworIHZvaWQgcHJpbnRfaW50KGludCBudW0pOworK3ZvaWQgcHJpbnRfbG4oKTsKKyAKKyBpbnQgbWFpbigpIHsKKyAJaW50IGk7CitAQCAtMTAsNiArMTIsOCBAQAorIAkJcHJpbnRfaW50KGZ1bmMoaSkpOworIAl9CisgCisrCXByaW50X2xuKCk7CisrCisgCXJldHVybiAwOworIH0KKyAKK0BAIC0yMSwzICsyNSw3IEBACisgCXByaW50ZigiJWQiLCBudW0pOworIH0KKyAKKyt2b2lkIHByaW50X2xuKCkgeworKwlwcmludGYoIlxuIik7CisrfQorKwpkaWZmIC0tZ2l0IGEvdC90NDEwOS9wYXRjaDMucGF0Y2ggYi90L3Q0MTA5L3BhdGNoMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjk2YzU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS9wYXRjaDMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorY2F0ID4gcGF0Y2gzLnBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0xLDkgKzEsNyBAQAorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKyBpbnQgZnVuYyhpbnQgbnVtKTsKKyB2b2lkIHByaW50X2ludChpbnQgbnVtKTsKKy12b2lkIHByaW50X2xuKCk7CisgCisgaW50IG1haW4oKSB7CisgCWludCBpOworQEAgLTEyLDggKzEwLDYgQEAKKyAJCXByaW50X2ludChmdW5jKGkpKTsKKyAJfQorIAorLQlwcmludF9sbigpOworLQorIAlyZXR1cm4gMDsKKyB9CisgCitAQCAtMjUsNyArMjEsMyBAQAorIAlwcmludGYoIiVkIiwgbnVtKTsKKyB9CisgCistdm9pZCBwcmludF9sbigpIHsKKy0JcHJpbnRmKCJcbiIpOworLX0KKy0KZGlmZiAtLWdpdCBhL3QvdDQxMDkvcGF0Y2g0LnBhdGNoIGIvdC90NDEwOS9wYXRjaDQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwODU5MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDkvcGF0Y2g0LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMSwxMyArMSwxNCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorIAorIGludCBmdW5jKGludCBudW0pOworLXZvaWQgcHJpbnRfaW50KGludCBudW0pOworK2ludCBmdW5jMihpbnQgbnVtKTsKKyAKKyBpbnQgbWFpbigpIHsKKyAJaW50IGk7CisgCisgCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CistCQlwcmludF9pbnQoZnVuYyhpKSk7CisrCQlwcmludGYoIiVkIiwgZnVuYyhpKSk7CisrCQlwcmludGYoIiVkIiwgZnVuYzMoaSkpOworIAl9CisgCisgCXJldHVybiAwOworQEAgLTE3LDcgKzE4LDcgQEAKKyAJcmV0dXJuIG51bSAqIG51bTsKKyB9CisgCistdm9pZCBwcmludF9pbnQoaW50IG51bSkgeworLQlwcmludGYoIiVkIiwgbnVtKTsKKytpbnQgZnVuYzIoaW50IG51bSkgeworKwlyZXR1cm4gbnVtICogbnVtICogbnVtOworIH0KKyAKZGlmZiAtLWdpdCBhL3QvdDQxMTAtYXBwbHktc2Nhbi5zaCBiL3QvdDQxMTAtYXBwbHktc2Nhbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOWY1ODExCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMC1hcHBseS1zY2FuLnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMgQ29weXJpZ2h0IChjKSAyMDA1IFJvYmVydCBGaXR6c2ltb25zCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSB0ZXN0IGZvciBwYXRjaGVzIHdoaWNoIHJlcXVpcmUgc2Nhbm5pbmcgZm9yd2FyZHMgYW5kIGJhY2t3YXJkcy4KKworJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcHBseSBzY2FuJyAnCisJZ2l0IGFwcGx5IFwKKwkJIiRURVNUX0RJUkVDVE9SWS90NDExMC9wYXRjaDEucGF0Y2giIFwKKwkJIiRURVNUX0RJUkVDVE9SWS90NDExMC9wYXRjaDIucGF0Y2giIFwKKwkJIiRURVNUX0RJUkVDVE9SWS90NDExMC9wYXRjaDMucGF0Y2giIFwKKwkJIiRURVNUX0RJUkVDVE9SWS90NDExMC9wYXRjaDQucGF0Y2giIFwKKwkJIiRURVNUX0RJUkVDVE9SWS90NDExMC9wYXRjaDUucGF0Y2giICYmCisJdGVzdF9jbXAgbmV3LnR4dCAiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL2V4cGVjdCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTEwL2V4cGVjdCBiL3QvdDQxMTAvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Y2M0OTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEwL2V4cGVjdApAQCAtMCwwICsxLDIwIEBACithMQorYTExCithMTExCithMTExMQorYjEKK2IxMQorYjExMQorYjExMTEKK2IyCitiMjIKK2IyMjIKK2IyMjIyCitjMQorYzExCitjMTExCitjMTExMQorYzIKK2MyMgorYzIyMgorYzIyMjIKZGlmZiAtLWdpdCBhL3QvdDQxMTAvcGF0Y2gxLnBhdGNoIGIvdC90NDExMC9wYXRjaDEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxMzkwOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTAvcGF0Y2gxLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK2RpZmYgLS1naXQgYS9uZXcudHh0IGIvbmV3LnR4dAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL25ldy50eHQKK0BAIC0wLDAgKzEsMTIgQEAKKythMQorK2ExMQorK2ExMTEKKythMTExMQorK2IxCisrYjExCisrYjExMQorK2IxMTExCisrYzEKKytjMTEKKytjMTExCisrYzExMTEKZGlmZiAtLWdpdCBhL3QvdDQxMTAvcGF0Y2gyLnBhdGNoIGIvdC90NDExMC9wYXRjaDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5NzQyNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTAvcGF0Y2gyLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLS1naXQgYS9uZXcudHh0IGIvbmV3LnR4dAorLS0tIGEvbmV3LnR4dAorKysrIGIvbmV3LnR4dAorQEAgLTEsNyArMSwzIEBACistYTEKKy1hMTEKKy1hMTExCistYTExMTEKKyBiMQorIGIxMQorIGIxMTEKZGlmZiAtLWdpdCBhL3QvdDQxMTAvcGF0Y2gzLnBhdGNoIGIvdC90NDExMC9wYXRjaDMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZiZDQ0MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTAvcGF0Y2gzLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK2RpZmYgLS1naXQgYS9uZXcudHh0IGIvbmV3LnR4dAorLS0tIGEvbmV3LnR4dAorKysrIGIvbmV3LnR4dAorQEAgLTYsNiArNiwxMCBAQAorIGIxMQorIGIxMTEKKyBiMTExMQorK2IyCisrYjIyCisrYjIyMgorK2IyMjIyCisgYzEKKyBjMTEKKyBjMTExCmRpZmYgLS1naXQgYS90L3Q0MTEwL3BhdGNoNC5wYXRjaCBiL3QvdDQxMTAvcGF0Y2g0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmI5YzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEwL3BhdGNoNC5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC0tZ2l0IGEvbmV3LnR4dCBiL25ldy50eHQKKy0tLSBhL25ldy50eHQKKysrKyBiL25ldy50eHQKK0BAIC0xLDMgKzEsNyBAQAorK2ExCisrYTExCisrYTExMQorK2ExMTExCisgYjEKKyBiMTEKKyBiMTExCmRpZmYgLS1naXQgYS90L3Q0MTEwL3BhdGNoNS5wYXRjaCBiL3QvdDQxMTAvcGF0Y2g1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YWM2OTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEwL3BhdGNoNS5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC0tZ2l0IGEvbmV3LnR4dCBiL25ldy50eHQKKy0tLSBhL25ldy50eHQKKysrKyBiL25ldy50eHQKK0BAIC0xMCwzICsxMCw3IEBACisgYzExCisgYzExMQorIGMxMTExCisrYzIKKytjMjIKKytjMjIyCisrYzIyMjIKZGlmZiAtLWdpdCBhL3QvdDQxMTEtYXBwbHktc3ViZGlyLnNoIGIvdC90NDExMS1hcHBseS1zdWJkaXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2MzOTg0MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTEtYXBwbHktc3ViZGlyLnNoCkBAIC0wLDAgKzEsMTQyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGF0Y2hpbmcgZnJvbSBpbmNvbnZlbmllbnQgcGxhY2VzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPnBhdGNoIDw8LVxFT0YgJiYKKwlkaWZmIGZpbGUub3JpZyBmaWxlCisJLS0tIGEvZmlsZS5vcmlnCisJKysrIGIvZmlsZQorCUBAIC0xICsxLDIgQEAKKwkgMQorCSsyCisJRU9GCisJcGF0Y2g9IiQocHdkKS9wYXRjaCIgJiYKKworCWVjaG8gMSA+cHJlaW1hZ2UgJiYKKwlwcmludGYgIiVzXG4iIDEgMiA+cG9zdGltYWdlICYmCisJZWNobyAzID5vdGhlciAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGJhc2lzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBzdWJkaXInICcKKwlyZXNldF9zdWJkaXIoKSB7CisJCWdpdCByZXNldCAmJgorCQlta2RpciAtcCBzdWIvZGlyL2IgJiYKKwkJbWtkaXIgLXAgb2JqZWN0cyAmJgorCQljcCAiJDEiIGZpbGUgJiYKKwkJY3AgIiQxIiBvYmplY3RzL2ZpbGUgJiYKKwkJY3AgIiQxIiBzdWIvZGlyL2ZpbGUgJiYKKwkJY3AgIiQxIiBzdWIvZGlyL2IvZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgc3ViL2Rpci9maWxlIHN1Yi9kaXIvYi9maWxlIG9iamVjdHMvZmlsZSAmJgorCQljcCAiJDIiIGZpbGUgJiYKKwkJY3AgIiQyIiBzdWIvZGlyL2ZpbGUgJiYKKwkJY3AgIiQyIiBzdWIvZGlyL2IvZmlsZSAmJgorCQljcCAiJDIiIG9iamVjdHMvZmlsZSAmJgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLXEKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGZyb20gc3ViZGlyIG9mIHRvcGxldmVsJyAnCisJY3AgcG9zdGltYWdlIGV4cGVjdGVkICYmCisJcmVzZXRfc3ViZGlyIG90aGVyIHByZWltYWdlICYmCisJKAorCQljZCBzdWIvZGlyICYmCisJCWdpdCBhcHBseSAiJHBhdGNoIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBzdWIvZGlyL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1jYWNoZWQgZnJvbSBzdWJkaXIgb2YgdG9wbGV2ZWwnICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwljcCBvdGhlciBleHBlY3RlZC53b3JraW5nICYmCisJcmVzZXRfc3ViZGlyIHByZWltYWdlIG90aGVyICYmCisJKAorCQljZCBzdWIvZGlyICYmCisJCWdpdCBhcHBseSAtLWNhY2hlZCAiJHBhdGNoIgorCSkgJiYKKwlnaXQgc2hvdyA6c3ViL2Rpci9maWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC53b3JraW5nIHN1Yi9kaXIvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWluZGV4IGZyb20gc3ViZGlyIG9mIHRvcGxldmVsJyAnCisJY3AgcG9zdGltYWdlIGV4cGVjdGVkICYmCisJcmVzZXRfc3ViZGlyIHByZWltYWdlIG90aGVyICYmCisJKAorCQljZCBzdWIvZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4ICIkcGF0Y2giCisJKSAmJgorCXJlc2V0X3N1YmRpciBvdGhlciBwcmVpbWFnZSAmJgorCSgKKwkJY2Qgc3ViL2RpciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCAiJHBhdGNoIgorCSkgJiYKKwlyZXNldF9zdWJkaXIgcHJlaW1hZ2UgcHJlaW1hZ2UgJiYKKwkoCisJCWNkIHN1Yi9kaXIgJiYKKwkJZ2l0IGFwcGx5IC0taW5kZXggIiRwYXRjaCIKKwkpICYmCisJZ2l0IHNob3cgOnN1Yi9kaXIvZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgc3ViL2Rpci9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGZyb20gLmdpdCBkaXInICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwljcCBwcmVpbWFnZSAuZ2l0L2ZpbGUgJiYKKwljcCBwcmVpbWFnZSAuZ2l0L29iamVjdHMvZmlsZSAmJgorCSgKKwkJY2QgLmdpdCAmJgorCQlnaXQgYXBwbHkgIiRwYXRjaCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgLmdpdC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGZyb20gc3ViZGlyIG9mIC5naXQgZGlyJyAnCisJY3AgcG9zdGltYWdlIGV4cGVjdGVkICYmCisJY3AgcHJlaW1hZ2UgLmdpdC9maWxlICYmCisJY3AgcHJlaW1hZ2UgLmdpdC9vYmplY3RzL2ZpbGUgJiYKKwkoCisJCWNkIC5naXQvb2JqZWN0cyAmJgorCQlnaXQgYXBwbHkgIiRwYXRjaCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgLmdpdC9vYmplY3RzL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1jYWNoZWQgZnJvbSAuZ2l0IGRpcicgJworCWNwIHBvc3RpbWFnZSBleHBlY3RlZCAmJgorCWNwIG90aGVyIGV4cGVjdGVkLndvcmtpbmcgJiYKKwljcCBvdGhlciAuZ2l0L2ZpbGUgJiYKKwlyZXNldF9zdWJkaXIgcHJlaW1hZ2Ugb3RoZXIgJiYKKwkoCisJCWNkIC5naXQgJiYKKwkJZ2l0IGFwcGx5IC0tY2FjaGVkICIkcGF0Y2giCisJKSAmJgorCWdpdCBzaG93IDpmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC53b3JraW5nIGZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC53b3JraW5nIC5naXQvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWNhY2hlZCBmcm9tIHN1YmRpciBvZiAuZ2l0IGRpcicgJworCWNwIHBvc3RpbWFnZSBleHBlY3RlZCAmJgorCWNwIHByZWltYWdlIGV4cGVjdGVkLnN1YmRpciAmJgorCWNwIG90aGVyIC5naXQvZmlsZSAmJgorCWNwIG90aGVyIC5naXQvb2JqZWN0cy9maWxlICYmCisJcmVzZXRfc3ViZGlyIHByZWltYWdlIG90aGVyICYmCisJKAorCQljZCAuZ2l0L29iamVjdHMgJiYKKwkJZ2l0IGFwcGx5IC0tY2FjaGVkICIkcGF0Y2giCisJKSAmJgorCWdpdCBzaG93IDpmaWxlID5hY3R1YWwgJiYKKwlnaXQgc2hvdyA6b2JqZWN0cy9maWxlID5hY3R1YWwuc3ViZGlyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3ViZGlyIGFjdHVhbC5zdWJkaXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTEyLWFwcGx5LXJlbmFtZXMuc2ggYi90L3Q0MTEyLWFwcGx5LXJlbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjlhZDE4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTItYXBwbHktcmVuYW1lcy5zaApAQCAtMCwwICsxLDE0NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgc2hvdWxkIG5vdCBnZXQgY29uZnVzZWQgd2l0aCByZW5hbWUvY29weS4KKworJworCisuIC4vdGVzdC1saWIuc2gKKworIyBzZXR1cAorCitta2RpciAtcCBrbGliYy9hcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjCisKK2NhdCA+a2xpYmMvYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmggPDxcRU9GCisvKgorICogYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKKyAqLworCisjaWZuZGVmIF9LTElCQ19BUkNIU0VUSk1QX0gKKyNkZWZpbmUgX0tMSUJDX0FSQ0hTRVRKTVBfSAorCitzdHJ1Y3QgX19qbXBfYnVmIHsKKyAgdW5zaWduZWQgbG9uZyBfX3JieDsKKyAgdW5zaWduZWQgbG9uZyBfX3JzcDsKKyAgdW5zaWduZWQgbG9uZyBfX3JicDsKKyAgdW5zaWduZWQgbG9uZyBfX3IxMjsKKyAgdW5zaWduZWQgbG9uZyBfX3IxMzsKKyAgdW5zaWduZWQgbG9uZyBfX3IxNDsKKyAgdW5zaWduZWQgbG9uZyBfX3IxNTsKKyAgdW5zaWduZWQgbG9uZyBfX3JpcDsKK307CisKK3R5cGVkZWYgc3RydWN0IF9fam1wX2J1ZiBqbXBfYnVmWzFdOworCisjZW5kaWYgLyogX1NFVEpNUF9IICovCitFT0YKK2NhdCA+a2xpYmMvUkVBRE1FIDw8XEVPRgorVGhpcyBpcyBhIHNpbXBsZSByZWFkbWUgZmlsZS4KK0VPRgorCitjYXQgPnBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL2tsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oIGIvaW5jbHVkZS9hcmNoL2NyaXMva2xpYmMvYXJjaHNldGptcC5oCitzaW1pbGFyaXR5IGluZGV4IDc2JQorY29weSBmcm9tIGtsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCitjb3B5IHRvIGluY2x1ZGUvYXJjaC9jcmlzL2tsaWJjL2FyY2hzZXRqbXAuaAorLS0tIGEva2xpYmMvYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKKysrKyBiL2luY2x1ZGUvYXJjaC9jcmlzL2tsaWJjL2FyY2hzZXRqbXAuaAorQEAgLTEsMjEgKzEsMjQgQEAKKyAvKgorLSAqIGFyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisrICogYXJjaC9jcmlzL2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisgICovCisKKyAjaWZuZGVmIF9LTElCQ19BUkNIU0VUSk1QX0gKKyAjZGVmaW5lIF9LTElCQ19BUkNIU0VUSk1QX0gKKworIHN0cnVjdCBfX2ptcF9idWYgeworLSAgdW5zaWduZWQgbG9uZyBfX3JieDsKKy0gIHVuc2lnbmVkIGxvbmcgX19yc3A7CistICB1bnNpZ25lZCBsb25nIF9fcmJwOworLSAgdW5zaWduZWQgbG9uZyBfX3IxMjsKKy0gIHVuc2lnbmVkIGxvbmcgX19yMTM7CistICB1bnNpZ25lZCBsb25nIF9fcjE0OworLSAgdW5zaWduZWQgbG9uZyBfX3IxNTsKKy0gIHVuc2lnbmVkIGxvbmcgX19yaXA7CisrICB1bnNpZ25lZCBsb25nIF9fcjA7CisrICB1bnNpZ25lZCBsb25nIF9fcjE7CisrICB1bnNpZ25lZCBsb25nIF9fcjI7CisrICB1bnNpZ25lZCBsb25nIF9fcjM7CisrICB1bnNpZ25lZCBsb25nIF9fcjQ7CisrICB1bnNpZ25lZCBsb25nIF9fcjU7CisrICB1bnNpZ25lZCBsb25nIF9fcjY7CisrICB1bnNpZ25lZCBsb25nIF9fcjc7CisrICB1bnNpZ25lZCBsb25nIF9fcjg7CisrICB1bnNpZ25lZCBsb25nIF9fc3A7CisrICB1bnNpZ25lZCBsb25nIF9fc3JwOworIH07CisKKyB0eXBlZGVmIHN0cnVjdCBfX2ptcF9idWYgam1wX2J1ZlsxXTsKKworLSNlbmRpZiAvKiBfU0VUSk1QX0ggKi8KKysjZW5kaWYgLyogX0tMSUJDX0FSQ0hTRVRKTVBfSCAqLworZGlmZiAtLWdpdCBhL2tsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oIGIvaW5jbHVkZS9hcmNoL20zMnIva2xpYmMvYXJjaHNldGptcC5oCitzaW1pbGFyaXR5IGluZGV4IDY2JQorcmVuYW1lIGZyb20ga2xpYmMvYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKK3JlbmFtZSB0byBpbmNsdWRlL2FyY2gvbTMyci9rbGliYy9hcmNoc2V0am1wLmgKKy0tLSBhL2tsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisrKysgYi9pbmNsdWRlL2FyY2gvbTMyci9rbGliYy9hcmNoc2V0am1wLmgKK0BAIC0xLDIxICsxLDIxIEBACisgLyoKKy0gKiBhcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorKyAqIGFyY2gvbTMyci9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorICAqLworCisgI2lmbmRlZiBfS0xJQkNfQVJDSFNFVEpNUF9ICisgI2RlZmluZSBfS0xJQkNfQVJDSFNFVEpNUF9ICisKKyBzdHJ1Y3QgX19qbXBfYnVmIHsKKy0gIHVuc2lnbmVkIGxvbmcgX19yYng7CistICB1bnNpZ25lZCBsb25nIF9fcnNwOworLSAgdW5zaWduZWQgbG9uZyBfX3JicDsKKysgIHVuc2lnbmVkIGxvbmcgX19yODsKKysgIHVuc2lnbmVkIGxvbmcgX19yOTsKKysgIHVuc2lnbmVkIGxvbmcgX19yMTA7CisrICB1bnNpZ25lZCBsb25nIF9fcjExOworICAgdW5zaWduZWQgbG9uZyBfX3IxMjsKKyAgIHVuc2lnbmVkIGxvbmcgX19yMTM7CisgICB1bnNpZ25lZCBsb25nIF9fcjE0OworICAgdW5zaWduZWQgbG9uZyBfX3IxNTsKKy0gIHVuc2lnbmVkIGxvbmcgX19yaXA7CisgfTsKKworIHR5cGVkZWYgc3RydWN0IF9fam1wX2J1ZiBqbXBfYnVmWzFdOworCistI2VuZGlmIC8qIF9TRVRKTVBfSCAqLworKyNlbmRpZiAvKiBfS0xJQkNfQVJDSFNFVEpNUF9IICovCitkaWZmIC0tZ2l0IGEva2xpYmMvUkVBRE1FIGIva2xpYmMvUkVBRE1FCistLS0gYS9rbGliYy9SRUFETUUKKysrKyBiL2tsaWJjL1JFQURNRQorQEAgLTEsMSArMSw0IEBACisgVGhpcyBpcyBhIHNpbXBsZSByZWFkbWUgZmlsZS4KKytBbmQgd2UgYWRkIGEgZmV3CisrbGluZXMgYXQgdGhlCisrZW5kIG9mIGl0LgorZGlmZiAtLWdpdCBhL2tsaWJjL1JFQURNRSBiL2tsaWJjL2FyY2gvUkVBRE1FCitjb3B5IGZyb20ga2xpYmMvUkVBRE1FCitjb3B5IHRvIGtsaWJjL2FyY2gvUkVBRE1FCistLS0gYS9rbGliYy9SRUFETUUKKysrKyBiL2tsaWJjL2FyY2gvUkVBRE1FCitAQCAtMSwxICsxLDMgQEAKKyBUaGlzIGlzIGEgc2ltcGxlIHJlYWRtZSBmaWxlLgorK0FuZCB3ZSBjb3B5IGl0IHRvIG9uZSBsZXZlbCBkb3duLCBhbmQKKythZGQgYSBmZXcgbGluZXMgYXQgdGhlIGVuZCBvZiBpdC4KK0VPRgorCitmaW5kIGtsaWJjIC10eXBlIGYgLXByaW50IHwgeGFyZ3MgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZW5hbWUvY29weSBwYXRjaCcgJ2dpdCBhcHBseSAtLWNoZWNrIHBhdGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSByZW5hbWUvY29weSBwYXRjaCcgJ2dpdCBhcHBseSAtLWluZGV4IHBhdGNoJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTMtYXBwbHktZW5kaW5nLnNoIGIvdC90NDExMy1hcHBseS1lbmRpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjZmYTUxNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTMtYXBwbHktZW5kaW5nLnNoCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgQ2F0YWxpbiBNYXJpbmFzCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSB0cnlpbmcgdG8gYWRkIGFuIGVuZGluZyBsaW5lLgorCisnCisuIC4vdGVzdC1saWIuc2gKKworIyBzZXR1cAorCitjYXQgPnRlc3QtcGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDIgKzEsMyBAQAorIGEKKyBiCisrYworRU9GCisKK2VjaG8gJ2EnID5maWxlCitlY2hvICdiJyA+PmZpbGUKK2VjaG8gJ2MnID4+ZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlJworCisjIHRlc3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYXQgdGhlIGVuZCcgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCB0ZXN0LXBhdGNoJworCitjYXQgPnRlc3QtcGF0Y2ggPDxcRU9GCitkaWZmIGEvZmlsZSBiL2ZpbGUKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDIgKzEsMyBAQAorK2EKKyBiCisgYworRU9GCisKK2VjaG8gPmZpbGUgJ2EKK2IKK2MnCitnaXQgdXBkYXRlLWluZGV4IGZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYXQgdGhlIGJlZ2lubmluZycgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCB0ZXN0LXBhdGNoJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaCBiL3QvdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMTI4MjZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExNC1hcHBseS10eXBlY2hhbmdlLnNoCkBAIC0wLDAgKzEsMTIzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgc2hvdWxkIG5vdCBnZXQgY29uZnVzZWQgd2l0aCB0eXBlIGNoYW5nZXMuCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3NldHVwIHJlcG9zaXRvcnkgYW5kIGNvbW1pdHMnICcKKwllY2hvICJoZWxsbyB3b3JsZCIgPiBmb28gJiYKKwllY2hvICJoaSBwbGFuZXQiID4gYmFyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmb28gYmFyICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBpbml0aWFsICYmCisJcm0gLWYgZm9vICYmCisJbG4gLXMgYmFyIGZvbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vIHN5bWxpbmtlZCB0byBiYXIiICYmCisJZ2l0IGJyYW5jaCBmb28tc3ltbGlua2VkLXRvLWJhciAmJgorCXJtIC1mIGZvbyAmJgorCWVjaG8gImhvdyBmYXIgaXMgdGhlIHN1bj8iID4gZm9vICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJmb28gYmFjayB0byBmaWxlIiAmJgorCWdpdCBicmFuY2ggZm9vLWJhY2stdG8tZmlsZSAmJgorCXByaW50ZiAiXDAiID4gZm9vICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJmb28gYmVjb21lcyBiaW5hcnkiICYmCisJZ2l0IGJyYW5jaCBmb28tYmVjb21lcy1iaW5hcnkgJiYKKwlybSAtZiBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGZvbyAmJgorCW1rZGlyIGZvbyAmJgorCWVjaG8gImlmIG9ubHkgSSBrbmV3IiA+IGZvby9iYXogJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvby9iYXogJiYKKwlnaXQgY29tbWl0IC1tICJmb28gYmVjb21lcyBhIGRpcmVjdG9yeSIgJiYKKwlnaXQgYnJhbmNoICJmb28tYmVjb21lcy1hLWRpcmVjdG9yeSIgJiYKKwllY2hvICJoZWxsbyB3b3JsZCIgPiBmb28vYmF6ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmb28vYmF6ICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vL2JheiBpcyB0aGUgb3JpZ2luYWwgZm9vIiAmJgorCWdpdCBicmFuY2ggZm9vLWJhei1yZW5hbWVkLWZyb20tZm9vCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdmaWxlIHJlbmFtZWQgZnJvbSBmb28gdG8gZm9vL2JheicgJworCWdpdCBjaGVja291dCAtZiBpbml0aWFsICYmCisJZ2l0IGRpZmYtdHJlZSAtTSAtcCBIRUFEIGZvby1iYXotcmVuYW1lZC1mcm9tLWZvbyA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdmaWxlIHJlbmFtZWQgZnJvbSBmb28vYmF6IHRvIGZvbycgJworCWdpdCBjaGVja291dCAtZiBmb28tYmF6LXJlbmFtZWQtZnJvbS1mb28gJiYKKwlnaXQgZGlmZi10cmVlIC1NIC1wIEhFQUQgaW5pdGlhbCA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaXJlY3RvcnkgYmVjb21lcyBmaWxlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGZvby1iZWNvbWVzLWEtZGlyZWN0b3J5ICYmCisJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEIGluaXRpYWwgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZmlsZSBiZWNvbWVzIGRpcmVjdG9yeScgJworCWdpdCBjaGVja291dCAtZiBpbml0aWFsICYmCisJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEIGZvby1iZWNvbWVzLWEtZGlyZWN0b3J5ID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2ZpbGUgYmVjb21lcyBzeW1saW5rJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGluaXRpYWwgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUQgZm9vLXN5bWxpbmtlZC10by1iYXIgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayBiZWNvbWVzIGZpbGUnICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLXN5bWxpbmtlZC10by1iYXIgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUQgZm9vLWJhY2stdG8tZmlsZSA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYmluYXJ5IGZpbGUgYmVjb21lcyBzeW1saW5rJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGZvby1iZWNvbWVzLWJpbmFyeSAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLS1iaW5hcnkgSEVBRCBmb28tc3ltbGlua2VkLXRvLWJhciA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayBiZWNvbWVzIGJpbmFyeSBmaWxlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGZvby1zeW1saW5rZWQtdG8tYmFyICYmCisJZ2l0IGRpZmYtdHJlZSAtcCAtLWJpbmFyeSBIRUFEIGZvby1iZWNvbWVzLWJpbmFyeSA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIGJlY29tZXMgZGlyZWN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IC1mIGZvby1zeW1saW5rZWQtdG8tYmFyICYmCisJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEIGZvby1iZWNvbWVzLWEtZGlyZWN0b3J5ID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RpcmVjdG9yeSBiZWNvbWVzIHN5bWxpbmsnICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUQgZm9vLXN5bWxpbmtlZC10by1iYXIgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTE1LWFwcGx5LXN5bWxpbmsuc2ggYi90L3Q0MTE1LWFwcGx5LXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzY3NGRkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaApAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBzeW1saW5rcyBhbmQgcGFydGlhbCBmaWxlcworCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIHNldHVwICcKKworCWxuIC1zIHBhdGgxL3BhdGgyL3BhdGgzL3BhdGg0L3BhdGg1IGxpbmsxICYmCisJZ2l0IGFkZCBsaW5rPyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwlybSAtZiBsaW5rPyAmJgorCisJbG4gLXMgaHRhcDYgbGluazEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGxpbms/ICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKworCWdpdCBkaWZmLXRyZWUgLXAgSEVBRF4gSEVBRCA+cGF0Y2ggICYmCisJZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgcGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhcHBseSBzeW1saW5rIHBhdGNoJyAnCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBhcHBseSBwYXRjaCAmJgorCWdpdCBkaWZmLWZpbGVzIC1wID5wYXRjaGVkICYmCisJdGVzdF9jbXAgcGF0Y2ggcGF0Y2hlZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2FwcGx5IC0taW5kZXggc3ltbGluayBwYXRjaCcgJworCisJZ2l0IGNoZWNrb3V0IC1mIHNpZGUgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCBwYXRjaCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC1wIEhFQUQgPnBhdGNoZWQgJiYKKwl0ZXN0X2NtcCBwYXRjaCBwYXRjaGVkCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTE2LWFwcGx5LXJldmVyc2Uuc2ggYi90L3Q0MTE2LWFwcGx5LXJldmVyc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmNhODE1MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTYtYXBwbHktcmV2ZXJzZS5zaApAQCAtMCwwICsxLDkxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBpbiByZXZlcnNlCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIGkgaW4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuOyBkbyBlY2hvICRpOyBkb25lID5maWxlMSAmJgorCSIkUEVSTF9QQVRIIiAtcGUgInkvaWprL1xcMDAwXFwwMDFcXDAwMi8iIDxmaWxlMSA+ZmlsZTIgJiYKKworCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKworCWZvciBpIGluIGEgYiBjIGcgaCBpIEogSyBMIG0gbyBuIHAgcTsgZG8gZWNobyAkaTsgZG9uZSA+ZmlsZTEgJiYKKwkiJFBFUkxfUEFUSCIgLXBlICJ5L21vbi9cXDAwMFxcMDAxXFwwMDIvIiA8ZmlsZTEgPmZpbGUyICYmCisKKwlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCWdpdCB0YWcgc2Vjb25kICYmCisKKwlnaXQgZGlmZiAtLWJpbmFyeSBpbml0aWFsIHNlY29uZCA+cGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBpbiBmb3J3YXJkJyAnCisKKwlUMD1gZ2l0IHJldi1wYXJzZSAic2Vjb25kXnt0cmVlfSJgICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IGFwcGx5IC0taW5kZXggLS1iaW5hcnkgcGF0Y2ggJiYKKwlUMT1gZ2l0IHdyaXRlLXRyZWVgICYmCisJdGVzdCAiJFQwIiA9ICIkVDEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGluIHJldmVyc2UnICcKKworCWdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisJZ2l0IGFwcGx5IC0tcmV2ZXJzZSAtLWJpbmFyeSAtLWluZGV4IHBhdGNoICYmCisJZ2l0IGRpZmYgPmRpZmYgJiYKKwl0ZXN0X2NtcCAvZGV2L251bGwgZGlmZgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNlcGFyYXRlIHJlcG9zaXRvcnkgbGFja2luZyBwb3N0aW1hZ2UnICcKKworCWdpdCB0YXItdHJlZSBpbml0aWFsIGluaXRpYWwgfCAkVEFSIHhmIC0gJiYKKwkoCisJCWNkIGluaXRpYWwgJiYgZ2l0IGluaXQgJiYgZ2l0IGFkZCAuCisJKSAmJgorCisJZ2l0IHRhci10cmVlIHNlY29uZCBzZWNvbmQgfCAkVEFSIHhmIC0gJiYKKwkoCisJCWNkIHNlY29uZCAmJiBnaXQgaW5pdCAmJiBnaXQgYWRkIC4KKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgaW4gZm9yd2FyZCB3aXRob3V0IHBvc3RpbWFnZScgJworCisJVDA9YGdpdCByZXYtcGFyc2UgInNlY29uZF57dHJlZX0iYCAmJgorCSgKKwkJY2QgaW5pdGlhbCAmJgorCQlnaXQgYXBwbHkgLS1pbmRleCAtLWJpbmFyeSAuLi9wYXRjaCAmJgorCQlUMT1gZ2l0IHdyaXRlLXRyZWVgICYmCisJCXRlc3QgIiRUMCIgPSAiJFQxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgaW4gcmV2ZXJzZSB3aXRob3V0IHBvc3RpbWFnZScgJworCisJVDA9YGdpdCByZXYtcGFyc2UgImluaXRpYWxee3RyZWV9ImAgJiYKKwkoCisJCWNkIHNlY29uZCAmJgorCQlnaXQgYXBwbHkgLS1pbmRleCAtLWJpbmFyeSAtLXJldmVyc2UgLi4vcGF0Y2ggJiYKKwkJVDE9YGdpdCB3cml0ZS10cmVlYCAmJgorCQl0ZXN0ICIkVDAiID0gIiRUMSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVyc2luZyBhIHdoaXRlc3BhY2UgaW50cm9kdWN0aW9uJyAnCisJc2VkICJzL2EvYSAvIiA8IGZpbGUxID4gZmlsZTEubmV3ICYmCisJbXYgZmlsZTEubmV3IGZpbGUxICYmCisJZ2l0IGRpZmYgfCBnaXQgYXBwbHkgLS1yZXZlcnNlIC0td2hpdGVzcGFjZT1lcnJvcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTctYXBwbHktcmVqZWN0LnNoIGIvdC90NDExNy1hcHBseS1yZWplY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGUxNWVjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTctYXBwbHktcmVqZWN0LnNoCkBAIC0wLDAgKzEsMTY1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSB3aXRoIHJlamVjdHMKKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgMjEKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZTEgJiYKKwljYXQgZmlsZTEgPnNhdmVkLmZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZm9yIGkgaW4gMSAyIEEgQiA0IDUgNiA3IDggOSAxMCAxMSAxMiBDIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIEQgMjEKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZTEgJiYKKwlnaXQgZGlmZiA+cGF0Y2guMSAmJgorCWNhdCBmaWxlMSA+Y2xlYW4gJiYKKworCWZvciBpIGluIDEgRSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgQyAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCBGIDIxCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPmV4cGVjdGVkICYmCisKKwltdiBmaWxlMSBmaWxlMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgZmlsZTEgZmlsZTIgJiYKKwlnaXQgZGlmZiAtTSBIRUFEID5wYXRjaC4yICYmCisKKwlybSAtZiBmaWxlMSBmaWxlMiAmJgorCW12IHNhdmVkLmZpbGUxIGZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBmaWxlMSBmaWxlMiAmJgorCisJZm9yIGkgaW4gMSBFIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCBGIDIxCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPmZpbGUxICYmCisKKwljYXQgZmlsZTEgPnNhdmVkLmZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tcmVqZWN0IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tM3dheScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2F0IHNhdmVkLmZpbGUxID5maWxlMSIgJiYKKwlnaXQgZGlmZiA+cGF0Y2guMCAmJgorCWdpdCBjaGVja291dCBmaWxlMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXJlamVjdCAtLTN3YXkgcGF0Y2guMCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGhvdXQgLS1yZWplY3Qgc2hvdWxkIGZhaWwnICcKKworCWlmIGdpdCBhcHBseSBwYXRjaC4xCisJdGhlbgorCQllY2hvICJFaD8gV2h5PyIKKwkJZXhpdCAxCisJZmkKKworCXRlc3RfY21wIGZpbGUxIHNhdmVkLmZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGhvdXQgLS1yZWplY3Qgc2hvdWxkIGZhaWwnICcKKworCWlmIGdpdCBhcHBseSAtLXZlcmJvc2UgcGF0Y2guMQorCXRoZW4KKwkJZWNobyAiRWg/IFdoeT8iCisJCWV4aXQgMQorCWZpCisKKwl0ZXN0X2NtcCBmaWxlMSBzYXZlZC5maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tcmVqZWN0IHNob3VsZCBmYWlsIGJ1dCB1cGRhdGUgdGhlIGZpbGUnICcKKworCWNhdCBzYXZlZC5maWxlMSA+ZmlsZTEgJiYKKwlybSAtZiBmaWxlMS5yZWogZmlsZTIucmVqICYmCisKKwlpZiBnaXQgYXBwbHkgLS1yZWplY3QgcGF0Y2guMQorCXRoZW4KKwkJZWNobyAic3VjY2VlZHMgd2l0aCAtLXJlamVjdD8iCisJCWV4aXQgMQorCWZpCisKKwl0ZXN0X2NtcCBmaWxlMSBleHBlY3RlZCAmJgorCisJY2F0IGZpbGUxLnJlaiAmJgorCisJaWYgdGVzdCAtZiBmaWxlMi5yZWoKKwl0aGVuCisJCWVjaG8gImZpbGUyIHNob3VsZCBub3QgaGF2ZSBiZWVuIHRvdWNoZWQiCisJCWV4aXQgMQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggLS1yZWplY3Qgc2hvdWxkIGZhaWwgYnV0IHVwZGF0ZSB0aGUgZmlsZScgJworCisJY2F0IHNhdmVkLmZpbGUxID5maWxlMSAmJgorCXJtIC1mIGZpbGUxLnJlaiBmaWxlMi5yZWogZmlsZTIgJiYKKworCWlmIGdpdCBhcHBseSAtLXJlamVjdCBwYXRjaC4yID5yZWplY3RzCisJdGhlbgorCQllY2hvICJzdWNjZWVkcyB3aXRoIC0tcmVqZWN0PyIKKwkJZXhpdCAxCisJZmkKKworCXRlc3QgLWYgZmlsZTEgJiYgeworCQllY2hvICJmaWxlMSBzdGlsbCBleGlzdHM/IgorCQlleGl0IDEKKwl9CisJdGVzdF9jbXAgZmlsZTIgZXhwZWN0ZWQgJiYKKworCWNhdCBmaWxlMi5yZWogJiYKKworCWlmIHRlc3QgLWYgZmlsZTEucmVqCisJdGhlbgorCQllY2hvICJmaWxlMiBzaG91bGQgbm90IGhhdmUgYmVlbiB0b3VjaGVkIgorCQlleGl0IDEKKwlmaQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSBzYW1lIHRlc3Qgd2l0aCAtLXZlcmJvc2UnICcKKworCWNhdCBzYXZlZC5maWxlMSA+ZmlsZTEgJiYKKwlybSAtZiBmaWxlMS5yZWogZmlsZTIucmVqIGZpbGUyICYmCisKKwlpZiBnaXQgYXBwbHkgLS1yZWplY3QgLS12ZXJib3NlIHBhdGNoLjIgPnJlamVjdHMKKwl0aGVuCisJCWVjaG8gInN1Y2NlZWRzIHdpdGggLS1yZWplY3Q/IgorCQlleGl0IDEKKwlmaQorCisJdGVzdCAtZiBmaWxlMSAmJiB7CisJCWVjaG8gImZpbGUxIHN0aWxsIGV4aXN0cz8iCisJCWV4aXQgMQorCX0KKwl0ZXN0X2NtcCBmaWxlMiBleHBlY3RlZCAmJgorCisJY2F0IGZpbGUyLnJlaiAmJgorCisJaWYgdGVzdCAtZiBmaWxlMS5yZWoKKwl0aGVuCisJCWVjaG8gImZpbGUyIHNob3VsZCBub3QgaGF2ZSBiZWVuIHRvdWNoZWQiCisJCWV4aXQgMQorCWZpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgY2xlYW5seSB3aXRoIC0tdmVyYm9zZScgJworCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQ6ZmlsZTEgPmZpbGUxICYmCisJcm0gLWYgZmlsZT8ucmVqIGZpbGUyICYmCisKKwlnaXQgYXBwbHkgLS12ZXJib3NlIHBhdGNoLjEgJiYKKworCXRlc3RfY21wIGZpbGUxIGNsZWFuCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoIGIvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1ZjJlNGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTE4LWFwcGx5LWVtcHR5LWNvbnRleHQuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgd2l0aCBuZXcgc3R5bGUgR05VIGRpZmYgd2l0aCBlbXB0eSBjb250ZXh0CisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXsKKwkJZWNobzsgZWNobzsKKwkJZWNobyBBOyBlY2hvIEI7IGVjaG8gQzsKKwkJZWNobzsKKwl9ID5maWxlMSAmJgorCWNhdCBmaWxlMSA+ZmlsZTEub3JpZyAmJgorCXsKKwkJY2F0IGZpbGUxICYmCisJCWVjaG8gUSB8IHRyIC1kICJcXDAxMiIKKwl9ID5maWxlMiAmJgorCWNhdCBmaWxlMiA+ZmlsZTIub3JpZyAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwlzZWQgLWUgIi9eQi9kIiA8ZmlsZTEub3JpZyA+ZmlsZTEgJiYKKwljYXQgZmlsZTEgPiBmaWxlMiAmJgorCWVjaG8gUSB8IHRyIC1kICJcXDAxMiIgPj5maWxlMiAmJgorCWNhdCBmaWxlMSA+ZmlsZTEubW9kcyAmJgorCWNhdCBmaWxlMiA+ZmlsZTIubW9kcyAmJgorCWdpdCBkaWZmIHwKKwlzZWQgLWUgInMvXiBcJC8vIiA+ZGlmZi5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1udW1zdGF0JyAnCisKKwlnaXQgYXBwbHkgLS1udW1zdGF0IGRpZmYub3V0cHV0ID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIjAJMQlmaWxlMSIgJiYKKwkJZWNobyAiMAkxCWZpbGUyIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWFwcGx5JyAnCisKKwljYXQgZmlsZTEub3JpZyA+ZmlsZTEgJiYKKwljYXQgZmlsZTIub3JpZyA+ZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUxIGZpbGUyICYmCisJZ2l0IGFwcGx5IC0taW5kZXggZGlmZi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBmaWxlMS5tb2RzIGZpbGUxICYmCisJdGVzdF9jbXAgZmlsZTIubW9kcyBmaWxlMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTktYXBwbHktY29uZmlnLnNoIGIvdC90NDExOS1hcHBseS1jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2QwMzg0ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTktYXBwbHktY29uZmlnLnNoCkBAIC0wLDAgKzEsMTYyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgc3ViICYmCisJZWNobyBBID5zdWIvZmlsZTEgJiYKKwljcCBzdWIvZmlsZTEgc2F2ZWQgJiYKKwlnaXQgYWRkIHN1Yi9maWxlMSAmJgorCWVjaG8gIkIgIiA+c3ViL2ZpbGUxICYmCisJZ2l0IGRpZmYgPnBhdGNoLmZpbGUKKycKKworIyBBbHNvIGhhbmRjcmFmdCBHTlUgZGlmZiBvdXRwdXQ7IG5vdGUgdGhpcyBoYXMgdHJhaWxpbmcgd2hpdGVzcGFjZS4KK3RyICdfJyAnICcgPmdwYXRjaC5maWxlIDw8XEVPRiAmJgorLS0tIGZpbGUxCTIwMDctMDItMjEgMDE6MDQ6MjQuMDAwMDAwMDAwIC0wODAwCisrKysgZmlsZTErCTIwMDctMDItMjEgMDE6MDc6NDQuMDAwMDAwMDAwIC0wODAwCitAQCAtMSArMSBAQAorLUEKKytCXworRU9GCisKK3NlZCAtZSAnc3xmaWxlMXxzdWIvJnwnIGdwYXRjaC5maWxlID5ncGF0Y2gtc3ViLmZpbGUgJiYKK3NlZCAtZSAnCisJL14tLS0gL3N8ZmlsZTF8YS9zdWIvJnwKKwkvXisrKyAvc3xmaWxlMXxiL3N1Yi8mfAorJyBncGF0Y2guZmlsZSA+Z3BhdGNoLWFiLXN1Yi5maWxlICYmCisKK2NoZWNrX3Jlc3VsdCAoKSB7CisJaWYgZ3JlcCAiICIgIiQxIgorCXRoZW4KKwkJZWNobyAiRWg/IgorCQlmYWxzZQorCWVsaWYgZ3JlcCBCICIkMSIKKwl0aGVuCisJCWVjaG8gSGFwcHkKKwllbHNlCisJCWVjaG8gIkh1aD8iCisJCWZhbHNlCisJZmkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwJyAnCisKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1zdHJpcCBwYXRjaC5maWxlICYmCisJY2hlY2tfcmVzdWx0IHN1Yi9maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgZnJvbSBjb25maWcnICcKKworCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlnaXQgYXBwbHkgcGF0Y2guZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBzdWIvZmlsZTEKKycKKworRD1gcHdkYAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgaW4gc3ViZGlyJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBhcHBseS53aGl0ZXNwYWNlICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgLi4vcGF0Y2guZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgZnJvbSBjb25maWcgaW4gc3ViZGlyJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAuLi9wYXRjaC5maWxlICYmCisJY2hlY2tfcmVzdWx0IGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgaW4gc3ViZGlyIGJ1dCB3aXRoIHRyYWRpdGlvbmFsIHBhdGNoIGlucHV0JyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAuLi9ncGF0Y2guZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGJ1dCB3aXRoIHRyYWRpdGlvbmFsIHBhdGNoIGlucHV0IG9mIGRlcHRoIDEnICcKKworCWNkICIkRCIgJiYKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJY2Qgc3ViICYmCisJZ2l0IGFwcGx5IC4uL2dwYXRjaC1zdWIuZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGJ1dCB3aXRoIHRyYWRpdGlvbmFsIHBhdGNoIGlucHV0IG9mIGRlcHRoIDInICcKKworCWNkICIkRCIgJiYKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJY2Qgc3ViICYmCisJZ2l0IGFwcGx5IC4uL2dwYXRjaC1hYi1zdWIuZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGJ1dCB3aXRoIHRyYWRpdGlvbmFsIHBhdGNoIGlucHV0IG9mIGRlcHRoIDEnICcKKworCWNkICIkRCIgJiYKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IGFwcGx5IC1wMCBncGF0Y2gtc3ViLmZpbGUgJiYKKwljaGVja19yZXN1bHQgc3ViL2ZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgYnV0IHdpdGggdHJhZGl0aW9uYWwgcGF0Y2ggaW5wdXQgb2YgZGVwdGggMicgJworCisJY2QgIiREIiAmJgorCWdpdCBjb25maWcgYXBwbHkud2hpdGVzcGFjZSBzdHJpcCAmJgorCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwlnaXQgYXBwbHkgZ3BhdGNoLWFiLXN1Yi5maWxlICYmCisJY2hlY2tfcmVzdWx0IHN1Yi9maWxlMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjAtYXBwbHktcG9wdC5zaCBiL3QvdDQxMjAtYXBwbHktcG9wdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNWZlY2RmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyMC1hcHBseS1wb3B0LnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgU2hhd24gTy4gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtcCBoYW5kbGluZy4nCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcHJlcmVxLUZJTEVNT0RFLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIHN1YiAmJgorCWVjaG8gQSA+c3ViL2ZpbGUxICYmCisJY3Agc3ViL2ZpbGUxIGZpbGUxLnNhdmVkICYmCisJZ2l0IGFkZCBzdWIvZmlsZTEgJiYKKwllY2hvIEIgPnN1Yi9maWxlMSAmJgorCWdpdCBkaWZmID5wYXRjaC5maWxlICYmCisJZ2l0IGNoZWNrb3V0IC0tIHN1Yi9maWxlMSAmJgorCWdpdCBtdiBzdWIgc8O8YiAmJgorCWVjaG8gQiA+c8O8Yi9maWxlMSAmJgorCWdpdCBkaWZmID5wYXRjaC5lc2NhcGVkICYmCisJZ3JlcCAiW1xdIiBwYXRjaC5lc2NhcGVkICYmCisJcm0gc8O8Yi9maWxlMSAmJgorCXJtZGlyIHPDvGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZ2l0IGRpZmYgd2l0aCAtcDInICcKKwljcCBmaWxlMS5zYXZlZCBmaWxlMSAmJgorCWdpdCBhcHBseSAtcDIgcGF0Y2guZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIHRvbyBsYXJnZSAtcCcgJworCWNwIGZpbGUxLnNhdmVkIGZpbGUxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tc3RhdCAtcDMgcGF0Y2guZmlsZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInJlbW92aW5nIDMgbGVhZGluZyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5ICgtcDIpIHRyYWRpdGlvbmFsIGRpZmYgd2l0aCBmdW5ueSBmaWxlbmFtZXMnICcKKwljYXQgPnBhdGNoLnF1b3RlcyA8PC1cRU9GICYmCisJZGlmZiAtdSAiYS8ic3ViL2ZpbGUxICJiLyJzdWIvZmlsZTEKKwktLS0gImEvInN1Yi9maWxlMQorCSsrKyAiYi8ic3ViL2ZpbGUxCisJQEAgLTEgKzEgQEAKKwktQQorCStCCisJRU9GCisJZWNobyBCID5leHBlY3RlZCAmJgorCisJY3AgZmlsZTEuc2F2ZWQgZmlsZTEgJiYKKwlnaXQgYXBwbHkgLXAyIHBhdGNoLnF1b3RlcyAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggdG9vIGxhcmdlIC1wIGFuZCBmYW5jeSBmaWxlbmFtZScgJworCWNwIGZpbGUxLnNhdmVkIGZpbGUxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tc3RhdCAtcDMgcGF0Y2guZXNjYXBlZCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInJlbW92aW5nIDMgbGVhZGluZyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5ICgtcDIpIGRpZmYsIG1vZGUgY2hhbmdlIG9ubHknICcKKwljYXQgPnBhdGNoLmNobW9kIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc3ViL2ZpbGUxIGIvc3ViL2ZpbGUxCisJb2xkIG1vZGUgMTAwNjQ0CisJbmV3IG1vZGUgMTAwNzU1CisJRU9GCisJdGVzdF9jaG1vZCAteCBmaWxlMSAmJgorCWdpdCBhcHBseSAtLWluZGV4IC1wMiBwYXRjaC5jaG1vZCAmJgorCWNhc2UgJChnaXQgbHMtZmlsZXMgLXMgZmlsZTEpIGluIDEwMDc1NSopIDogZ29vZDs7ICopIGZhbHNlOzsgZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdmaWxlIG1vZGUgd2FzIGNoYW5nZWQnICcKKwl0ZXN0IC14IGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5ICgtcDIpIGRpZmYsIHJlbmFtZScgJworCWNhdCA+cGF0Y2gucmVuYW1lIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc3ViL2ZpbGUxIGIvc3ViL2ZpbGUyCisJc2ltaWxhcml0eSBpbmRleCAxMDAlCisJcmVuYW1lIGZyb20gc3ViL2ZpbGUxCisJcmVuYW1lIHRvIHN1Yi9maWxlMgorCUVPRgorCWVjaG8gQSA+ZXhwZWN0ZWQgJiYKKworCWNwIGZpbGUxLnNhdmVkIGZpbGUxICYmCisJcm0gLWYgZmlsZTIgJiYKKwlnaXQgYXBwbHkgLXAyIHBhdGNoLnJlbmFtZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyMS1hcHBseS1kaWZmcy5zaCBiL3QvdDQxMjEtYXBwbHktZGlmZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWZmNTUxYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjEtYXBwbHktZGlmZnMuc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBmb3IgY29udGV4dHVhbGx5IGluZGVwZW5kZW50IGRpZmZzJworLiAuL3Rlc3QtbGliLnNoCisKK2VjaG8gJzEKKzIKKzMKKzQKKzUKKzYKKzcKKzgnID5maWxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyBcCisJJ2dpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLXEgLW0gMSAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0ICYmCisJbXYgZmlsZSBmaWxlLnRtcCAmJgorCWVjaG8gMCA+ZmlsZSAmJgorCWNhdCBmaWxlLnRtcCA+PmZpbGUgJiYKKwlybSBmaWxlLnRtcCAmJgorCWdpdCBjb21taXQgLWEgLXEgLW0gMiAmJgorCWVjaG8gOSA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1xIC1tIDMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hlY2sgaWYgY29udGV4dHVhbGx5IGluZGVwZW5kZW50IGRpZmZzIGZvciB0aGUgc2FtZSBmaWxlIGFwcGx5JyBcCisJJyggZ2l0IGRpZmYgdGVzdH4yIHRlc3R+MTsgZ2l0IGRpZmYgdGVzdH4xIHRlc3R+MCApfCBnaXQgYXBwbHknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyMi1hcHBseS1zeW1saW5rLWluc2lkZS5zaCBiL3QvdDQxMjItYXBwbHktc3ltbGluay1pbnNpZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzk0MDczNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjItYXBwbHktc3ltbGluay1pbnNpZGUuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FwcGx5IHRvIGRlZXBlciBkaXJlY3Rvcnkgd2l0aG91dCBnZXR0aW5nIGZvb2xlZCB3aXRoIHN5bWxpbmsnCisuIC4vdGVzdC1saWIuc2gKKworbGVjaG8gKCkgeworCWZvciBsXworCWRvCisJCWVjaG8gIiRsXyIKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1Mgc2V0dXAgJworCisJbWtkaXIgLXAgYXJjaC9pMzg2L2Jvb3QgYXJjaC94ODZfNjQgJiYKKwlsZWNobyAxIDIgMyA0IDUgPmFyY2gvaTM4Ni9ib290L01ha2VmaWxlICYmCisJbG4gLXMgLi4vaTM4Ni9ib290IGFyY2gveDg2XzY0L2Jvb3QgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHRlc3QgJiYKKworCXJtIGFyY2gveDg2XzY0L2Jvb3QgJiYKKwlta2RpciBhcmNoL3g4Nl82NC9ib290ICYmCisJbGVjaG8gMiAzIDQgNSA2ID5hcmNoL3g4Nl82NC9ib290L01ha2VmaWxlICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1iaW5hcnkgLTEgLS1zdGRvdXQgPnRlc3QucGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIGFwcGx5ICcKKworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgdGVzdCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkIHRlc3QgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCB0ZXN0LnBhdGNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY2hlY2sgcmVzdWx0JyAnCisKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAtLWNhY2hlZCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJlcGxheSAmJgorCVQxPSQoZ2l0IHJldi1wYXJzZSAibWFzdGVyXnt0cmVlfSIpICYmCisJVDI9JChnaXQgcmV2LXBhcnNlICJIRUFEXnt0cmVlfSIpICYmCisJdGVzdCAieiRUMSIgPSAieiRUMiIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjMtYXBwbHktc2hyaW5rLnNoIGIvdC90NDEyMy1hcHBseS1zaHJpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTg0MTU3ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjMtYXBwbHktc2hyaW5rLnNoCkBAIC0wLDAgKzEsNTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseSBhIHBhdGNoIHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIHByZWltYWdlJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5GICA8PFxFT0YKKzEKKzIKKzMKKzQKKzUKKzYKKzcKKzgKKzk5OTk5OQorQQorQgorQworRAorRQorRgorRworSAorSQorSgorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgYWRkIEYgJiYKKwltdiBGIEcgJiYKKwlzZWQgLWUgInMvMS8xMS8iIC1lICJzLzk5OTk5OS85LyIgLWUgInMvSC9ISC8iIDxHID5GICYmCisJZ2l0IGRpZmYgPnBhdGNoICYmCisJc2VkIC1lICIvXlwkL2QiIDxHID5GICYmCisJZ2l0IGFkZCBGCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc2hvdWxkIGZhaWwgZ3JhY2VmdWxseScgJworCisJaWYgZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gKKwl0aGVuCisJCWVjaG8gT29wcywgc2hvdWxkIG5vdCBoYXZlIHN1Y2NlZWRlZAorCQlmYWxzZQorCWVsc2UKKwkJc3RhdHVzPSQ/CisJCWVjaG8gIlN0YXR1cyB3YXMgJHN0YXR1cyIKKwkJaWYgdGVzdCAtZiAuZ2l0L2luZGV4LmxvY2sKKwkJdGhlbgorCQkJZWNobyBPb3BzLCBzaG91bGQgbm90IGhhdmUgY3Jhc2hlZAorCQkJZmFsc2UKKwkJZmkKKwlmaQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjQtYXBwbHktd3MtcnVsZS5zaCBiL3QvdDQxMjQtYXBwbHktd3MtcnVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjZlZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyNC1hcHBseS13cy1ydWxlLnNoCkBAIC0wLDAgKzEsNDg5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29yZS53aGl0ZXNwYWNlIHJ1bGVzIGFuZCBnaXQgYXBwbHknCisKKy4gLi90ZXN0LWxpYi5zaAorCitwcmVwYXJlX3Rlc3RfZmlsZSAoKSB7CisKKwkjIEEgbGluZSB0aGF0IGhhcyBjaGFyYWN0ZXIgWCBpcyB0b3VjaGVkIGlmZiBSVUxFIGlzIGluIGVmZmVjdDoKKwkjICAgICAgIFggIFJVTEUKKwkjICAgCSEgIHRyYWlsaW5nLXNwYWNlCisJIyAgIAlAICBzcGFjZS1iZWZvcmUtdGFiCisJIyAgIAkjICBpbmRlbnQtd2l0aC1ub24tdGFiIChkZWZhdWx0IHRhYiB3aWR0aCA4KQorCSMJPSAgaW5kZW50LXdpdGgtbm9uLXRhYix0YWJ3aWR0aD0xNgorCSMgICAJJSAgdGFiLWluLWluZGVudAorCXNlZCAtZSAicy9fLyAvZyIgLWUgInMvPi8JLyIgPDwtXEVPRgorCQlBbl9TUCBpbiBhbiBvcmRpbmFyeSBsaW5lPmFuZCBhIEhULgorCQk+QSBIVCAoJSkuCisJCV8+QSBTUCBhbmQgYSBIVCAoQCUpLgorCQlfPl9BIFNQLCBhIEhUIGFuZCBhIFNQIChAJSkuCisJCV9fX19fX19TZXZlbiBTUC4KKwkJX19fX19fX19FaWdodCBTUCAoIykuCisJCV9fX19fX18+U2V2ZW4gU1AgYW5kIGEgSFQgKEAlKS4KKwkJX19fX19fX18+RWlnaHQgU1AgYW5kIGEgSFQgKEAjJSkuCisJCV9fX19fX18+X1NldmVuIFNQLCBhIEhUIGFuZCBhIFNQIChAJSkuCisJCV9fX19fX19fPl9FaWdodCBTUCwgYSBIVCBhbmQgYSBTUCAoQCMlKS4KKwkJX19fX19fX19fX19fX19fRmlmdGVlbiBTUCAoIykuCisJCV9fX19fX19fX19fX19fXz5GaWZ0ZWVuIFNQIGFuZCBhIEhUIChAIyUpLgorCQlfX19fX19fX19fX19fX19fU2l4dGVlbiBTUCAoIz0pLgorCQlfX19fX19fX19fX19fX19fPlNpeHRlZW4gU1AgYW5kIGEgSFQgKEAjJT0pLgorCQlfX19fX2FfX0ZpdmUgU1AsIGEgbm9uIFdTLCB0d28gU1AuCisJCUEgbGluZSB3aXRoIGEgKCEpIHRyYWlsaW5nIFNQXworCQlBIGxpbmUgd2l0aCBhICghKSB0cmFpbGluZyBIVD4KKwlFT0YKK30KKworYXBwbHlfcGF0Y2ggKCkgeworCT50YXJnZXQgJiYKKwlzZWQgLWUgInN8XChbYWJdXCkvZmlsZXxcMS90YXJnZXR8IiA8cGF0Y2ggfAorCWdpdCBhcHBseSAiJEAiCit9CisKK3Rlc3RfZml4ICgpIHsKKwkjIGZpeCBzaG91bGQgbm90IGJhcmYKKwlhcHBseV9wYXRjaCAtLXdoaXRlc3BhY2U9Zml4IHx8IHJldHVybiAxCisKKwkjIGZpbmQgdG91Y2hlZCBsaW5lcworCSRESUZGIGZpbGUgdGFyZ2V0IHwgc2VkIC1uIC1lICJzL14+IC8vcCIgPmZpeGVkCisKKwkjIHRoZSBjaGFuZ2VkIGxpbmVzIGFyZSBhbGwgZXhwZWNlZCB0byBjaGFuZ2UKKwlmaXhlZF9jbnQ9JCh3YyAtbCA8Zml4ZWQpCisJY2FzZSAiJDEiIGluCisJJycpIGV4cGVjdF9jbnQ9JGZpeGVkX2NudCA7OworCT8qKSBleHBlY3RfY250PSQoZ3JlcCAiWyQxXSIgPGZpeGVkIHwgd2MgLWwpIDs7CisJZXNhYworCXRlc3QgJGZpeGVkX2NudCAtZXEgJGV4cGVjdF9jbnQgfHwgcmV0dXJuIDEKKworCSMgYW5kIHdlIGFyZSBub3QgbWlzc2luZyBhbnl0aGluZworCWNhc2UgIiQxIiBpbgorCScnKSBleHBlY3RfY250PTAgOzsKKwk/KikgZXhwZWN0X2NudD0kKGdyZXAgIlskMV0iIDxmaWxlIHwgd2MgLWwpIDs7CisJZXNhYworCXRlc3QgJGZpeGVkX2NudCAtZXEgJGV4cGVjdF9jbnQgfHwgcmV0dXJuIDEKKworCSMgR2V0IHRoZSBwYXRjaCBhY3R1YWxseSBhcHBsaWVkCisJZ2l0IGRpZmYtZmlsZXMgLXAgdGFyZ2V0ID5maXhlZC1wYXRjaAorCXRlc3QgLXMgZml4ZWQtcGF0Y2ggJiYgcmV0dXJuIDAKKworCSMgTWFrZSBzdXJlIGl0IGlzIGNvbXBsYWludC1mcmVlCisJPnRhcmdldAorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9ZXJyb3ItYWxsIDxmaXhlZC1wYXRjaAorCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlwcmVwYXJlX3Rlc3RfZmlsZSA+ZmlsZSAmJgorCWdpdCBkaWZmLWZpbGVzIC1wID5wYXRjaCAmJgorCT50YXJnZXQgJiYKKwlnaXQgYWRkIHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2U9bm93YXJuLCBkZWZhdWx0IHJ1bGUnICcKKworCWFwcGx5X3BhdGNoIC0td2hpdGVzcGFjZT1ub3dhcm4gJiYKKwl0ZXN0X2NtcCBmaWxlIHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2U9d2FybiwgZGVmYXVsdCBydWxlJyAnCisKKwlhcHBseV9wYXRjaCAtLXdoaXRlc3BhY2U9d2FybiAmJgorCXRlc3RfY21wIGZpbGUgdGFyZ2V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZT1lcnJvci1hbGwsIGRlZmF1bHQgcnVsZScgJworCisJYXBwbHlfcGF0Y2ggLS13aGl0ZXNwYWNlPWVycm9yLWFsbCAmJiByZXR1cm4gMQorCXRlc3QgLXMgdGFyZ2V0ICYmIHJldHVybiAxCisJOiBoYXBweQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2U9ZXJyb3ItYWxsLCBubyBydWxlJyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAtdHJhaWxpbmcsLXNwYWNlLWJlZm9yZSwtaW5kZW50ICYmCisJYXBwbHlfcGF0Y2ggLS13aGl0ZXNwYWNlPWVycm9yLWFsbCAmJgorCXRlc3RfY21wIGZpbGUgdGFyZ2V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZT1lcnJvci1hbGwsIG5vIHJ1bGUgKGF0dHJpYnV0ZSknICcKKworCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJ0YXJnZXQgLXdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCWFwcGx5X3BhdGNoIC0td2hpdGVzcGFjZT1lcnJvci1hbGwgJiYKKwl0ZXN0X2NtcCBmaWxlIHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwYWNlcyBpbnNlcnRlZCBieSB0YWItaW4taW5kZW50JyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAtdHJhaWxpbmcsLXNwYWNlLC1pbmRlbnQsdGFiICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X2ZpeCAlICYmCisJc2VkIC1lICJzL18vIC9nIiAtZSAicy8+LwkvIiA8PC1cRU9GID5leHBlY3QgJiYKKwkJQW5fU1AgaW4gYW4gb3JkaW5hcnkgbGluZT5hbmQgYSBIVC4KKwkJX19fX19fX19BIEhUICglKS4KKwkJX19fX19fX19BIFNQIGFuZCBhIEhUIChAJSkuCisJCV9fX19fX19fX0EgU1AsIGEgSFQgYW5kIGEgU1AgKEAlKS4KKwkJX19fX19fX1NldmVuIFNQLgorCQlfX19fX19fX0VpZ2h0IFNQICgjKS4KKwkJX19fX19fX19TZXZlbiBTUCBhbmQgYSBIVCAoQCUpLgorCQlfX19fX19fX19fX19fX19fRWlnaHQgU1AgYW5kIGEgSFQgKEAjJSkuCisJCV9fX19fX19fX1NldmVuIFNQLCBhIEhUIGFuZCBhIFNQIChAJSkuCisJCV9fX19fX19fX19fX19fX19fRWlnaHQgU1AsIGEgSFQgYW5kIGEgU1AgKEAjJSkuCisJCV9fX19fX19fX19fX19fX0ZpZnRlZW4gU1AgKCMpLgorCQlfX19fX19fX19fX19fX19fRmlmdGVlbiBTUCBhbmQgYSBIVCAoQCMlKS4KKwkJX19fX19fX19fX19fX19fX1NpeHRlZW4gU1AgKCM9KS4KKwkJX19fX19fX19fX19fX19fX19fX19fX19fU2l4dGVlbiBTUCBhbmQgYSBIVCAoQCMlPSkuCisJCV9fX19fYV9fRml2ZSBTUCwgYSBub24gV1MsIHR3byBTUC4KKwkJQSBsaW5lIHdpdGggYSAoISkgdHJhaWxpbmcgU1BfCisJCUEgbGluZSB3aXRoIGEgKCEpIHRyYWlsaW5nIEhUPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCB0YXJnZXQKKworJworCitmb3IgdCBpbiAtICcnCitkbworCWNhc2UgIiR0IiBpbiAnJykgdHQ9JyEnIDs7ICopIHR0PSA7OyBlc2FjCisJZm9yIHMgaW4gLSAnJworCWRvCisJCWNhc2UgIiRzIiBpbiAnJykgdHM9J0AnIDs7ICopIHRzPSA7OyBlc2FjCisJCWZvciBpIGluIC0gJycKKwkJZG8KKwkJCWNhc2UgIiRpIiBpbiAnJykgdGk9JyMnIHRpMTY9Jz0nOzsgKikgdGk9IHRpMTY9IDs7IGVzYWMKKwkJCWZvciBoIGluIC0gJycKKwkJCWRvCisJCQkJWyAteiAiJGgkaSIgXSAmJiBjb250aW51ZQorCQkJCWNhc2UgIiRoIiBpbiAnJykgdGg9JyUnIDs7ICopIHRoPSA7OyBlc2FjCisJCQkJcnVsZT0ke3R9dHJhaWxpbmcsJHtzfXNwYWNlLCR7aX1pbmRlbnQsJHtofXRhYgorCisJCQkJcm0gLWYgLmdpdGF0dHJpYnV0ZXMKKwkJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJydWxlPSRydWxlIiAnCisJCQkJCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICIkcnVsZSIgJiYKKwkJCQkJdGVzdF9maXggIiR0dCR0cyR0aSR0aCIKKwkJCQknCisKKwkJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJydWxlPSRydWxlLHRhYndpZHRoPTE2IiAnCisJCQkJCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICIkcnVsZSx0YWJ3aWR0aD0xNiIgJiYKKwkJCQkJdGVzdF9maXggIiR0dCR0cyR0aTE2JHRoIgorCQkJCScKKworCQkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJ1bGU9JHJ1bGUgKGF0dHJpYnV0ZXMpIiAnCisJCQkJCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwkJCQkJZWNobyAidGFyZ2V0IHdoaXRlc3BhY2U9JHJ1bGUiID4uZ2l0YXR0cmlidXRlcyAmJgorCQkJCQl0ZXN0X2ZpeCAiJHR0JHRzJHRpJHRoIgorCQkJCScKKworCQkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJ1bGU9JHJ1bGUsdGFid2lkdGg9MTYgKGF0dHJpYnV0ZXMpIiAnCisJCQkJCWVjaG8gInRhcmdldCB3aGl0ZXNwYWNlPSRydWxlLHRhYndpZHRoPTE2IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJCQkJdGVzdF9maXggIiR0dCR0cyR0aTE2JHRoIgorCQkJCScKKworCQkJZG9uZQorCQlkb25lCisJZG9uZQorZG9uZQorCitjcmVhdGVfcGF0Y2ggKCkgeworCXNlZCAtZSAicy9fLyAvIiA8PC1cRU9GCisJCWRpZmYgLS1naXQgYS90YXJnZXQgYi90YXJnZXQKKwkJaW5kZXggZTY5ZGUyOS4uOGJkNjY0OCAxMDA2NDQKKwkJLS0tIGEvdGFyZ2V0CisJCSsrKyBiL3RhcmdldAorCQlAQCAtMCwwICsxLDMgQEAKKwkJK0FuIGVtcHR5IGxpbmUgZm9sbG93cworCQkrCisJCStBIGxpbmUgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBubyBuZXdsaW5lXworCQlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxpbmcgd2hpdGVzcGFjZSAmIG5vIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiBmaWxlJyAnCisJPnRhcmdldCAmJgorCWNyZWF0ZV9wYXRjaCA+cGF0Y2gtZmlsZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoLWZpbGUgJiYKKwlncmVwICJuZXdsaW5lJCIgdGFyZ2V0ICYmCisJZ3JlcCAiXiQiIHRhcmdldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9Zml4ICgxKScgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPmV4cGVjdCAmJgorCXsgY2F0IGV4cGVjdDsgZWNobzsgfSA+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9Zml4ICgyKScgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl7IGVjaG8gYTsgZWNobyBjOyB9ID5leHBlY3QgJiYKKwl7IGNhdCBleHBlY3Q7IGVjaG87IGVjaG87IH0gPm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPWZpeCAoMyknICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBhOyBlY2hvIGM7IGVjaG87IH0gPmV4cGVjdCAmJgorCXsgY2F0IGV4cGVjdDsgZWNobzsgZWNobzsgfSA+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBlbmQgb2YgaHVuaywgbm90IGF0IEVPRiB3aXRoIC0td2hpdGVzcGFjZT1maXgnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvIGQ7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGE7IGVjaG8gYzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobyBkOyB9ID5leHBlY3QgJiYKKwljcCBleHBlY3Qgb25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9d2FybicgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvID4+b25lICYmCisJY2F0IG9uZSA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9d2FybiBwYXRjaCAyPmVycm9yICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZSAmJgorCWdyZXAgIm5ldyBibGFuayBsaW5lIGF0IEVPRiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPWVycm9yJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobyBjOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWNhdCBvbmUgPmV4cGVjdCAmJgorCWVjaG8gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1lcnJvciBwYXRjaCAyPmVycm9yICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZSAmJgorCWdyZXAgIm5ldyBibGFuayBsaW5lIGF0IEVPRiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYnV0IG5vdCBlbXB0eSBhdCBFT0YnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZWNobyAiICAgIiA+Pm9uZSAmJgorCWNhdCBvbmUgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXdhcm4gcGF0Y2ggMj5lcnJvciAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUgJiYKKwlncmVwICJuZXcgYmxhbmsgbGluZSBhdCBFT0YiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5aW5nIGJleW9uZCBFT0YgcmVxdWlyZXMgb25lIG5vbi1ibGFuayBjb250ZXh0IGxpbmUnICcKKwl7IGVjaG87IGVjaG87IGVjaG87IGVjaG87IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGI7IH0gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJeyBlY2hvIGE7IGVjaG87IH0gPm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvbnMgb2YgYmxhbmtzIGF0IEVPRiBzaG91bGQgbm90IGFwcGx5JyAnCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTY7IGRvCisJCWVjaG87IGVjaG87IGVjaG87IGVjaG87CisJZG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGEgPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwk+b25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyBibGFuayBsaW5lIGF0IGVuZCB3aXRoIC0td2hpdGVzcGFjZT1maXgnICcKKwllY2hvIGEgPm9uZSAmJgorCWVjaG8gPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gYiA+Pm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJZWNobyBhID5vbmUgJiYKKwljcCBvbmUgc2F2ZWQtb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0ICYmCisJbXYgc2F2ZWQtb25lIG9uZSAmJgorCWdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIG1pc3NpbmcgYmxhbmsgbGluZXMgYXQgZW5kIHdpdGggLS13aGl0ZXNwYWNlPWZpeCcgJworCXsgZWNobyBhOyBlY2hvOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJY3Agb25lIG5vLWJsYW5rLWxpbmVzICYmCisJeyBlY2hvOyBlY2hvOyB9ID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGQgPj5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZWNobyA+Pm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwljcCBuby1ibGFuay1saW5lcyBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QgJiYKKwltdiBuby1ibGFuay1saW5lcyBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgYmxhbmsgbGluZSBhdCBlbmQsIGluc2VydCBiZWZvcmUgZW5kLCAtLXdoaXRlc3BhY2U9Zml4JyAnCisJeyBlY2hvIGE7IGVjaG87IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGI7IGVjaG8gYTsgZWNobzsgfSA+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwllY2hvIGEgPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgb25lIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaHJpbmsgZmlsZSB3aXRoIHRvbnMgb2YgbWlzc2luZyBibGFua3MgYXQgZW5kIG9mIGZpbGUnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWNwIG9uZSBuby1ibGFuay1saW5lcyAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2OyBkbworCQllY2hvOyBlY2hvOyBlY2hvOyBlY2hvOworCWRvbmUgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gYSA+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwljcCBuby1ibGFuay1saW5lcyBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QgJiYKKwltdiBuby1ibGFuay1saW5lcyBvbmUgJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgYmxhbmtzIGF0IEVPRiBtdXN0IG9ubHkgbWF0Y2ggYmxhbmsgbGluZXMnICcKKwl7IGVjaG8gYTsgZWNobyBiOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBjOyBlY2hvIGQ7IH0gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwllY2hvIGEgPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoCisnCisKK3NlZCAtZSdzL1ovLycgPm9uZSA8PEVPRgorYQorYgorYworCQkgICAgICBaCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyBibGFuayBsaW5lIHNob3VsZCBtYXRjaCBjb250ZXh0IGxpbmUgd2l0aCBzcGFjZXMnICcKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gZCA+Pm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwl7IGVjaG87IGVjaG8gZDsgfSA+PmV4cGVjdCAmJgorCWdpdCBhZGQgb25lICYmCisKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QKKycKKworc2VkIC1lJ3MvWi8vJyA+b25lIDw8RU9GCithCitiCitjCisJCSAgICAgIFoKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lLCBidXQgd2l0aCB0aGUgLS1pZ25vcmUtc3BhY2Utb3B0aW9uJyAnCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGQgPj5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKworCWdpdCBjaGVja291dC1pbmRleCAtZiBvbmUgJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUsIGJ1dCB3aXRoIENSLUxGIGxpbmUgZW5kaW5ncyAmJiBjci1hdC1lb2wgc2V0JyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgY3ItYXQtZW9sICYmCisJcHJpbnRmICJhXHJcbiIgPm9uZSAmJgorCXByaW50ZiAiYlxyXG4iID4+b25lICYmCisJcHJpbnRmICJjXHJcbiIgPj5vbmUgJiYKKwljcCBvbmUgc2F2ZS1vbmUgJiYKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgXHJcbiIgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXByaW50ZiAiZFxyXG4iID4+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwltdiBzYXZlLW9uZSBvbmUgJiYKKworCWdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSwgYnV0IHdpdGggQ1ItTEYgbGluZSBlbmRpbmdzICYmIGNyLWF0LWVvbCB1bnNldCcgJworCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwlwcmludGYgImFcclxuIiA+b25lICYmCisJcHJpbnRmICJiXHJcbiIgPj5vbmUgJiYKKwlwcmludGYgImNcclxuIiA+Pm9uZSAmJgorCWNwIG9uZSBzYXZlLW9uZSAmJgorCXByaW50ZiAiICAgICAgICAgICAgICAgICBcclxuIiA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCXByaW50ZiAiZFxyXG4iID4+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCW12IHNhdmUtb25lIG9uZSAmJgorCWVjaG8gZCA+PmV4cGVjdCAmJgorCisJZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgb25lIGV4cGVjdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjUtYXBwbHktd3MtZnV6ei5zaCBiL3QvdDQxMjUtYXBwbHktd3MtZnV6ei5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjcxZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyNS1hcHBseS13cy1mdXp6LnNoCkBAIC0wLDAgKzEsMTAzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHlpbmcgcGF0Y2ggdGhhdCBoYXMgYnJva2VuIHdoaXRlc3BhY2VzIGluIGNvbnRleHQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIGZpbGUtMCBpcyBmdWxsIG9mIHdoaXRlc3BhY2UgYnJlYWthZ2VzCisJZm9yIGwgaW4gYSBiYiBjIGQgZWVlZSBmIGdnZyBoCisJZG8KKwkJZWNobyAiJGwgIgorCWRvbmUgPmZpbGUtMCAmJgorCisJIyBwYXRjaC0wIGNyZWF0ZXMgYSB3aGl0ZXNwYWNlIGJyb2tlbiBmaWxlCisJY2F0IGZpbGUtMCA+ZmlsZSAmJgorCWdpdCBkaWZmID5wYXRjaC0wICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIGZpbGUtMSBpcyBzdGlsbCBmdWxsIG9mIHdoaXRlc3BhY2UgYnJlYWthZ2VzLAorCSMgYnV0IGhhcyBvbmUgbGluZSB1cGRhdGVkLCB3aXRob3V0IGZpeGluZyBhbnkKKwkjIHdoaXRlc3BhY2VzLgorCSMgcGF0Y2gtMSByZWNvcmRzIHRoYXQgY2hhbmdlLgorCXNlZCAtZSAicy9kL0QvIiBmaWxlLTAgPmZpbGUtMSAmJgorCWNhdCBmaWxlLTEgPmZpbGUgJiYKKwlnaXQgZGlmZiA+cGF0Y2gtMSAmJgorCisJIyBwYXRjaC1hbGwgaXMgdGhlIGVmZmVjdCBvZiBib3RoIHBhdGNoLTAgYW5kIHBhdGNoLTEKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWNhdCBmaWxlLTEgPmZpbGUgJiYKKwlnaXQgZGlmZiA+cGF0Y2gtYWxsICYmCisKKwkjIHBhdGNoLTIgaXMgdGhlIHNhbWUgYXMgcGF0Y2gtMSBidXQgaXMgYmFzZWQKKwkjIG9uIGEgdmVyc2lvbiB0aGF0IGFscmVhZHkgaGFzIHdoaXRlc3BhY2UgZml4ZWQsCisJIyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHdoaXRlc3BhY2UgYnJlYWthZ2VzLgorCXNlZCAtZSAicy8gXCQvLyIgcGF0Y2gtMSA+cGF0Y2gtMiAmJgorCisJIyBJZiBhbGwgd2hpdGVzcGFjZSBicmVha2FnZXMgYXJlIGZpeGVkIHRoZSBjb250ZW50cworCSMgc2hvdWxkIGxvb2sgbGlrZSBmaWxlLWZpeGVkCisJc2VkIC1lICJzLyBcJC8vIiBmaWxlLTEgPmZpbGUtZml4ZWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG5vZml4ICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIEJhc2VsaW5lLiAgQXBwbHlpbmcgd2l0aG91dCBmaXhpbmcgYW55IHdoaXRlc3BhY2UKKwkjIGJyZWFrYWdlcy4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPW5vd2FybiBwYXRjaC0wICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1ub3dhcm4gcGF0Y2gtMSAmJgorCisJIyBUaGUgcmVzdWx0IHNob3VsZCBvYnZpb3VzbHkgbWF0Y2guCisJdGVzdF9jbXAgZmlsZS0xIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aGZpeCAoZm9yd2FyZCknICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIFRoZSBmaXJzdCBhcHBsaWNhdGlvbiB3aWxsIG11bmdlIHRoZSBjb250ZXh0IGxpbmVzCisJIyB0aGUgc2Vjb25kIHBhdGNoIGRlcGVuZHMgb24uICBXZSBzaG91bGQgYmUgYWJsZSB0bworCSMgYWRqdXN0IGFuZCBzdGlsbCBhcHBseS4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaC0wICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2gtMSAmJgorCisJdGVzdF9jbXAgZmlsZS1maXhlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhmaXggKGJhY2t3YXJkKScgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKworCSMgTm93IHdlIGhhdmUgYSB3aGl0ZXNwYWNlIGJyZWFrYWdlcyBvbiBvdXIgc2lkZS4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPW5vd2FybiBwYXRjaC0wICYmCisKKwkjIEFuZCBzb21lYm9keSBzZW5kcyBpbiBhIHBhdGNoIGJhc2VkIG9uIGltYWdlCisJIyB3aXRoIHdoaXRlc3BhY2UgYWxyZWFkeSBmaXhlZC4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaC0yICYmCisKKwkjIFRoZSByZXN1bHQgc2hvdWxkIGFjY2VwdCB0aGUgd2hpdGVzcGFjZSBmaXhlZAorCSMgcG9zdGltYWdlLiAgQnV0IHRoZSBsaW5lIHdpdGggImgiIGlzIGJleW9uZCBjb250ZXh0CisJIyBob3Jpem9uIGFuZCBsZWZ0IHVuZml4ZWQuCisKKwlzZWQgLWUgL2gvZCBmaWxlLWZpeGVkID5maXhlZC1oZWFkICYmCisJc2VkIC1lIC9oL2QgZmlsZSA+ZmlsZS1oZWFkICYmCisJdGVzdF9jbXAgZml4ZWQtaGVhZCBmaWxlLWhlYWQgJiYKKworCXNlZCAtbiAtZSAvaC9wIGZpbGUtZml4ZWQgPmZpeGVkLXRhaWwgJiYKKwlzZWQgLW4gLWUgL2gvcCBmaWxlID5maWxlLXRhaWwgJiYKKworCSEgdGVzdF9jbXAgZml4ZWQtdGFpbCBmaWxlLXRhaWwKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjYtYXBwbHktZW1wdHkuc2ggYi90L3Q0MTI2LWFwcGx5LWVtcHR5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlYjZhNzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTI2LWFwcGx5LWVtcHR5LnNoCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseSBlbXB0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5lbXB0eSAmJgorCWdpdCBhZGQgZW1wdHkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlmb3IgaSBpbiBhIGIgYyBkIGUKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZW1wdHkgJiYKKwljYXQgZW1wdHkgPmV4cGVjdCAmJgorCWdpdCBkaWZmIHwKKwlzZWQgLWUgIi9eZGlmZiAtLWdpdC9kIiBcCisJICAgIC1lICIvXmluZGV4IC9kIiBcCisJICAgIC1lICJzfGEvZW1wdHl8ZW1wdHkub3JpZ3wiIFwKKwkgICAgLWUgInN8Yi9lbXB0eXxlbXB0eXwiID5wYXRjaDAgJiYKKwlzZWQgLWUgInN8ZW1wdHl8bWlzc2luZ3wiIHBhdGNoMCA+cGF0Y2gxICYmCisJPmVtcHR5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZW1wdHknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgbWlzc2luZyAmJgorCWdpdCBhcHBseSBwYXRjaDAgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1pbmRleCBlbXB0eScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBtaXNzaW5nICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gwICYmCisJdGVzdF9jbXAgZXhwZWN0IGVtcHR5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgY3JlYXRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIG1pc3NpbmcgJiYKKwlnaXQgYXBwbHkgcGF0Y2gxICYmCisJdGVzdF9jbXAgZXhwZWN0IG1pc3NpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1pbmRleCBjcmVhdGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgbWlzc2luZyAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoMSAmJgorCXRlc3RfY21wIGV4cGVjdCBtaXNzaW5nICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTI3LWFwcGx5LXNhbWUtZm4uc2ggYi90L3Q0MTI3LWFwcGx5LXNhbWUtZm4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTcyOTQ2YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjctYXBwbHktc2FtZS1mbi5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgc2FtZSBmaWxlbmFtZScKKworLiAuL3Rlc3QtbGliLnNoCisKK21vZGlmeSAoKSB7CisJc2VkIC1lICIkMSIgPCAiJDIiID4gIiQyIi54ICYmCisJbXYgIiQyIi54ICIkMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5zYW1lX2ZuICYmCisJY3Agc2FtZV9mbiBvdGhlcl9mbiAmJgorCWdpdCBhZGQgc2FtZV9mbiBvdGhlcl9mbiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc2FtZSBmaWxlbmFtZSB3aXRoIGluZGVwZW5kZW50IGNoYW5nZXMnICcKKwltb2RpZnkgInMvXmQvei8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+IHBhdGNoMCAmJgorCWdpdCBhZGQgc2FtZV9mbiAmJgorCW1vZGlmeSAicy9eaS95LyIgc2FtZV9mbiAmJgorCWdpdCBkaWZmID4+IHBhdGNoMCAmJgorCWNwIHNhbWVfZm4gc2FtZV9mbjIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFwcGx5IHBhdGNoMCAmJgorCXRlc3RfY21wIHNhbWVfZm4gc2FtZV9mbjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc2FtZSBmaWxlbmFtZSB3aXRoIG92ZXJsYXBwaW5nIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbW9kaWZ5ICJzL15kL3ovIiBzYW1lX2ZuICYmCisJZ2l0IGRpZmYgPiBwYXRjaDAgJiYKKwlnaXQgYWRkIHNhbWVfZm4gJiYKKwltb2RpZnkgInMvXmUveS8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+PiBwYXRjaDAgJiYKKwljcCBzYW1lX2ZuIHNhbWVfZm4yICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSBwYXRjaDAgJiYKKwl0ZXN0X2NtcCBzYW1lX2ZuIHNhbWVfZm4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHNhbWUgbmV3IGZpbGVuYW1lIGFmdGVyIHJlbmFtZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgbXYgc2FtZV9mbiBuZXdfZm4gJiYKKwltb2RpZnkgInMvXmQvei8iIG5ld19mbiAmJgorCWdpdCBhZGQgbmV3X2ZuICYmCisJZ2l0IGRpZmYgLU0gLS1jYWNoZWQgPiBwYXRjaDEgJiYKKwltb2RpZnkgInMvXmUveS8iIG5ld19mbiAmJgorCWdpdCBkaWZmID4+IHBhdGNoMSAmJgorCWNwIG5ld19mbiBuZXdfZm4yICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoMSAmJgorCXRlc3RfY21wIG5ld19mbiBuZXdfZm4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHNhbWUgb2xkIGZpbGVuYW1lIGFmdGVyIHJlbmFtZSAtLSBzaG91bGQgZmFpbC4nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IG12IHNhbWVfZm4gbmV3X2ZuICYmCisJbW9kaWZ5ICJzL15kL3ovIiBuZXdfZm4gJiYKKwlnaXQgYWRkIG5ld19mbiAmJgorCWdpdCBkaWZmIC1NIC0tY2FjaGVkID4gcGF0Y2gxICYmCisJZ2l0IG12IG5ld19mbiBzYW1lX2ZuICYmCisJbW9kaWZ5ICJzL15lL3kvIiBzYW1lX2ZuICYmCisJZ2l0IGRpZmYgPj4gcGF0Y2gxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgQS0+QiAocmVuYW1lKSwgQy0+QSAocmVuYW1lKSwgQS0+QSAtLSBzaG91bGQgcGFzcy4nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IG12IHNhbWVfZm4gbmV3X2ZuICYmCisJbW9kaWZ5ICJzL15kL3ovIiBuZXdfZm4gJiYKKwlnaXQgYWRkIG5ld19mbiAmJgorCWdpdCBkaWZmIC1NIC0tY2FjaGVkID4gcGF0Y2gxICYmCisJZ2l0IGNvbW1pdCAtbSAiYSByZW5hbWUiICYmCisJZ2l0IG12IG90aGVyX2ZuIHNhbWVfZm4gJiYKKwltb2RpZnkgInMvXmUveS8iIHNhbWVfZm4gJiYKKwlnaXQgYWRkIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiAtTSAtLWNhY2hlZCA+PiBwYXRjaDEgJiYKKwltb2RpZnkgInMvXmcveC8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+PiBwYXRjaDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGFwcGx5IHBhdGNoMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjgtYXBwbHktcm9vdC5zaCBiL3QvdDQxMjgtYXBwbHktcm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Y2M3NDFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyOC1hcHBseS1yb290LnNoCkBAIC0wLDAgKzEsMTEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgc2FtZSBmaWxlbmFtZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlta2RpciAtcCBzb21lL3N1Yi9kaXIgJiYKKwllY2hvIEhlbGxvID4gc29tZS9zdWIvZGlyL2ZpbGUgJiYKKwlnaXQgYWRkIHNvbWUvc3ViL2Rpci9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsCisKKycKKworY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIGEvYmxhL2JsdWIvZGlyL2ZpbGUgYi9ibGEvYmx1Yi9kaXIvZmlsZQorLS0tIGEvYmxhL2JsdWIvZGlyL2ZpbGUKKysrKyBiL2JsYS9ibHViL2Rpci9maWxlCitAQCAtMSwxICsxLDEgQEAKKy1IZWxsbworK0JlbGxvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1kaXJlY3RvcnkgLXAgKDEpJyAnCisKKwlnaXQgYXBwbHkgLS1kaXJlY3Rvcnk9c29tZS9zdWIgLXAzIC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0IEJlbGxvID0gJChnaXQgc2hvdyA6c29tZS9zdWIvZGlyL2ZpbGUpICYmCisJdGVzdCBCZWxsbyA9ICQoY2F0IHNvbWUvc3ViL2Rpci9maWxlKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tZGlyZWN0b3J5IC1wICgyKSAnICcKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtLWRpcmVjdG9yeT1zb21lL3N1Yi8gLXAzIC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0IEJlbGxvID0gJChnaXQgc2hvdyA6c29tZS9zdWIvZGlyL2ZpbGUpICYmCisJdGVzdCBCZWxsbyA9ICQoY2F0IHNvbWUvc3ViL2Rpci9maWxlKQorCisnCisKK2NhdCA+IHBhdGNoIDw8IEVPRgorZGlmZiAtLWdpdCBhL25ld2ZpbGUgYi9uZXdmaWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDk1ZjNhZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbmV3ZmlsZQorQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAobmV3IGZpbGUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IGFwcGx5IC0tZGlyZWN0b3J5PXNvbWUvc3ViL2Rpci8gLS1pbmRleCBwYXRjaCAmJgorCXRlc3QgY29udGVudCA9ICQoZ2l0IHNob3cgOnNvbWUvc3ViL2Rpci9uZXdmaWxlKSAmJgorCXRlc3QgY29udGVudCA9ICQoY2F0IHNvbWUvc3ViL2Rpci9uZXdmaWxlKQorJworCitjYXQgPiBwYXRjaCA8PCBFT0YKK2RpZmYgLS1naXQgYS9jL25ld2ZpbGUyIGIvYy9uZXdmaWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ5NWYzYWQKKy0tLSAvZGV2L251bGwKKysrKyBiL2MvbmV3ZmlsZTIKK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1kaXJlY3RvcnkgLXAgKG5ldyBmaWxlKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtcDIgLS1kaXJlY3Rvcnk9c29tZS9zdWIvZGlyLyAtLWluZGV4IHBhdGNoICYmCisJdGVzdCBjb250ZW50ID0gJChnaXQgc2hvdyA6c29tZS9zdWIvZGlyL25ld2ZpbGUyKSAmJgorCXRlc3QgY29udGVudCA9ICQoY2F0IHNvbWUvc3ViL2Rpci9uZXdmaWxlMikKKycKKworY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvZGVsZmlsZSBiL2RlbGZpbGUKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggZDk1ZjNhZC4uMDAwMDAwMAorLS0tIGEvZGVsZmlsZQorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLWNvbnRlbnQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAoZGVsZXRlIGZpbGUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZWNobyBjb250ZW50ID5zb21lL3N1Yi9kaXIvZGVsZmlsZSAmJgorCWdpdCBhZGQgc29tZS9zdWIvZGlyL2RlbGZpbGUgJiYKKwlnaXQgYXBwbHkgLS1kaXJlY3Rvcnk9c29tZS9zdWIvZGlyLyAtLWluZGV4IHBhdGNoICYmCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCBkZWxmaWxlKQorJworCitjYXQgPiBwYXRjaCA8PCAnRU9GJworZGlmZiAtLWdpdCAiYS9xdVwxNTd0ZWZpbGUiICJiL3F1XDE1N3RlZmlsZSIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kOTVmM2FkCistLS0gL2Rldi9udWxsCisrKysgImIvcXVcMTU3dGVmaWxlIgorQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAocXVvdGVkIGZpbGVuYW1lKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtLWRpcmVjdG9yeT1zb21lL3N1Yi9kaXIvIC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0IGNvbnRlbnQgPSAkKGdpdCBzaG93IDpzb21lL3N1Yi9kaXIvcXVvdGVmaWxlKSAmJgorCXRlc3QgY29udGVudCA9ICQoY2F0IHNvbWUvc3ViL2Rpci9xdW90ZWZpbGUpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyOS1hcHBseS1zYW1lbW9kZS5zaCBiL3QvdDQxMjktYXBwbHktc2FtZW1vZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQzNmViZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjktYXBwbHktc2FtZW1vZGUuc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FwcGx5aW5nIHBhdGNoIHdpdGggbW9kZSBiaXRzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXByZXJlcS1GSUxFTU9ERS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIG9yaWdpbmFsID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZWNobyBtb2RpZmllZCA+ZmlsZSAmJgorCWdpdCBkaWZmIC0tc3RhdCAtcCA+cGF0Y2gtMC50eHQgJiYKKwljaG1vZCAreCBmaWxlICYmCisJZ2l0IGRpZmYgLS1zdGF0IC1wID5wYXRjaC0xLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdzYW1lIG1vZGUgKG5vIGluZGV4KScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwljaG1vZCAreCBmaWxlICYmCisJZ2l0IGFwcGx5IHBhdGNoLTAudHh0ICYmCisJdGVzdCAteCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ3NhbWUgbW9kZSAod2l0aCBpbmRleCknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2htb2QgK3ggZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoLTAudHh0ICYmCisJdGVzdCAteCBmaWxlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnc2FtZSBtb2RlIChpbmRleCBvbmx5KScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwljaG1vZCAreCBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGFwcGx5IC0tY2FjaGVkIHBhdGNoLTAudHh0ICYmCisJZ2l0IGxzLWZpbGVzIC1zIGZpbGUgfCBncmVwICJeMTAwNzU1IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdtb2RlIHVwZGF0ZSAobm8gaW5kZXgpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSBwYXRjaC0xLnR4dCAmJgorCXRlc3QgLXggZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdtb2RlIHVwZGF0ZSAod2l0aCBpbmRleCknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gtMS50eHQgJiYKKwl0ZXN0IC14IGZpbGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdtb2RlIHVwZGF0ZSAoaW5kZXggb25seSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFwcGx5IC0tY2FjaGVkIHBhdGNoLTEudHh0ICYmCisJZ2l0IGxzLWZpbGVzIC1zIGZpbGUgfCBncmVwICJeMTAwNzU1IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzAtYXBwbHktY3Jpc3MtY3Jvc3MtcmVuYW1lLnNoIGIvdC90NDEzMC1hcHBseS1jcmlzcy1jcm9zcy1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDE3M2FjZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzAtYXBwbHktY3Jpc3MtY3Jvc3MtcmVuYW1lLnNoCkBAIC0wLDAgKzEsNjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgaGFuZGxpbmcgY3Jpc3MtY3Jvc3MgcmVuYW1lIHBhdGNoLicKKy4gLi90ZXN0LWxpYi5zaAorCitjcmVhdGVfZmlsZSgpIHsKKwljbnQ9MAorCXdoaWxlIHRlc3QgJGNudCAtbGUgMTAwCisJZG8KKwkJY250PSQoKCRjbnQgKyAxKSkKKwkJZWNobyAiJDIiID4+ICIkMSIKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY3JlYXRlX2ZpbGUgZmlsZTEgIkZpbGUxIGNvbnRlbnRzIiAmJgorCWNyZWF0ZV9maWxlIGZpbGUyICJGaWxlMiBjb250ZW50cyIgJiYKKwljcmVhdGVfZmlsZSBmaWxlMyAiRmlsZTMgY29udGVudHMiICYmCisJZ2l0IGFkZCBmaWxlMSBmaWxlMiBmaWxlMyAmJgorCWdpdCBjb21taXQgLW0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmlzcy1jcm9zcyByZW5hbWUnICcKKwltdiBmaWxlMSB0bXAgJiYKKwltdiBmaWxlMiBmaWxlMSAmJgorCW12IHRtcCBmaWxlMiAmJgorCWNwIGZpbGUxIGZpbGUxLXN3YXBwZWQgJiYKKwljcCBmaWxlMiBmaWxlMi1zd2FwcGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLU0gLUInICcKKwlnaXQgZGlmZiAtTSAtQiA+IGRpZmYgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHknICcKKwlnaXQgYXBwbHkgZGlmZiAmJgorCXRlc3RfY21wIGZpbGUxIGZpbGUxLXN3YXBwZWQgJiYKKwl0ZXN0X2NtcCBmaWxlMiBmaWxlMi1zd2FwcGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyaXNzLWNyb3NzIHJlbmFtZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwltdiBmaWxlMSB0bXAgJiYKKwltdiBmaWxlMiBmaWxlMSAmJgorCW12IGZpbGUzIGZpbGUyICYmCisJbXYgdG1wIGZpbGUzICYmCisJY3AgZmlsZTEgZmlsZTEtc3dhcHBlZCAmJgorCWNwIGZpbGUyIGZpbGUyLXN3YXBwZWQgJiYKKwljcCBmaWxlMyBmaWxlMy1zd2FwcGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLU0gLUInICcKKwlnaXQgZGlmZiAtTSAtQiA+IGRpZmYgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5JyAnCisJZ2l0IGFwcGx5IGRpZmYgJiYKKwl0ZXN0X2NtcCBmaWxlMSBmaWxlMS1zd2FwcGVkICYmCisJdGVzdF9jbXAgZmlsZTIgZmlsZTItc3dhcHBlZCAmJgorCXRlc3RfY21wIGZpbGUzIGZpbGUzLXN3YXBwZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTMxLWFwcGx5LWZha2UtYW5jZXN0b3Iuc2ggYi90L3Q0MTMxLWFwcGx5LWZha2UtYW5jZXN0b3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjEzNjFjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzEtYXBwbHktZmFrZS1hbmNlc3Rvci5zaApAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXBoZW4gQm95ZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgLS1idWlsZC1mYWtlLWFuY2VzdG9yIGhhbmRsaW5nLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgMSAmJgorCXRlc3RfY29tbWl0IDIgJiYKKwlta2RpciBzdWIgJiYKKwl0ZXN0X2NvbW1pdCAzIHN1Yi8zLnQgJiYKKwl0ZXN0X2NvbW1pdCA0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvcicgJworCWdpdCBjaGVja291dCAyICYmCisJZWNobyAiQSIgPiAxLnQgJiYKKwlnaXQgZGlmZiA+IDEucGF0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IDEgJiYKKwlnaXQgYXBwbHkgLS1idWlsZC1mYWtlLWFuY2VzdG9yIDEuYW5jZXN0b3IgMS5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3IgaW4gYSBzdWJkaXJlY3RvcnknICcKKwlnaXQgY2hlY2tvdXQgMyAmJgorCWVjaG8gIkMiID4gc3ViLzMudCAmJgorCWdpdCBkaWZmID4gMy5wYXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgNCAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3IgMy5hbmNlc3RvciAuLi8zLnBhdGNoICYmCisJCXRlc3QgLWYgMy5hbmNlc3RvcgorCSkgJiYKKwlnaXQgYXBwbHkgLS1idWlsZC1mYWtlLWFuY2VzdG9yIDMuYW5jZXN0b3IgMy5wYXRjaCAmJgorCXRlc3RfY21wIHN1Yi8zLmFuY2VzdG9yIDMuYW5jZXN0b3IKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTMyLWFwcGx5LXJlbW92YWwuc2ggYi90L3Q0MTMyLWFwcGx5LXJlbW92YWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTJiYzFjZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzItYXBwbHktcmVtb3ZhbC5zaApAQCAtMCwwICsxLDk3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEp1bmlvIEMgSGFtYW5vCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1hcHBseSBub3RpY2VzIHJlbW92YWwgcGF0Y2hlcyBnZW5lcmF0ZWQgYnkgR05VIGRpZmYnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwljYXQgPDwtRU9GID5jICYmCisJZGlmZiAtcnVOIGEvZmlsZSBiL2ZpbGUKKwktLS0gYS9maWxlCVRTMAorCSsrKyBiL2ZpbGUJVFMxCisJQEAgLTAsMCArMSBAQAorCStzb21ldGhpbmcKKwlFT0YKKworCWNhdCA8PC1FT0YgPmQgJiYKKwlkaWZmIC1ydU4gYS9maWxlIGIvZmlsZQorCS0tLSBhL2ZpbGUJVFMwCisJKysrIGIvZmlsZQlUUzEKKwlAQCAtMSArMCwwIEBACisJLXNvbWV0aGluZworCUVPRgorCisJdGltZVdlc3Q9IjE5ODItMDktMTYgMDc6MDA6MDAuMDAwMDAwMDAwIC0wODAwIiAmJgorCSB0aW1lR01UPSIxOTgyLTA5LTE2IDE1OjAwOjAwLjAwMDAwMDAwMCArMDAwMCIgJiYKKwl0aW1lRWFzdD0iMTk4Mi0wOS0xNyAwMDowMDowMC4wMDAwMDAwMDAgKzA5MDAiICYmCisKKwllcG9jV2VzdD0iMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAiICYmCisJIGVwb2NHTVQ9IjE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwIiAmJgorCWVwb2NFYXN0PSIxOTcwLTAxLTAxIDA5OjAwOjAwLjAwMDAwMDAwMCArMDkwMCIgJiYKKwllcG9jV2VzdDI9IjE5NjktMTItMzEgMTY6MDA6MDAgLTA4OjAwIiAmJgorCisJc2VkIC1lICJzL1RTMC8kZXBvY1dlc3QvIiAtZSAicy9UUzEvJHRpbWVXZXN0LyIgPGMgPmNyZWF0ZVdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyRlcG9jRWFzdC8iIC1lICJzL1RTMS8kdGltZUVhc3QvIiA8YyA+Y3JlYXRlRWFzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJGVwb2NHTVQvIiAtZSAicy9UUzEvJHRpbWVHTVQvIiA8YyA+Y3JlYXRlR01ULnBhdGNoICYmCisKKwlzZWQgLWUgInMvVFMwLyR0aW1lV2VzdC8iIC1lICJzL1RTMS8kdGltZVdlc3QvIiA8YyA+YWRkV2VzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVFYXN0LyIgLWUgInMvVFMxLyR0aW1lRWFzdC8iIDxjID5hZGRFYXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUdNVC8iIC1lICJzL1RTMS8kdGltZUdNVC8iIDxjID5hZGRHTVQucGF0Y2ggJiYKKworCXNlZCAtZSAicy9UUzAvJHRpbWVXZXN0LyIgLWUgInMvVFMxLyR0aW1lV2VzdC8iIDxkID5lbXB0eVdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lRWFzdC8iIC1lICJzL1RTMS8kdGltZUVhc3QvIiA8ZCA+ZW1wdHlFYXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUdNVC8iIC1lICJzL1RTMS8kdGltZUdNVC8iIDxkID5lbXB0eUdNVC5wYXRjaCAmJgorCisJc2VkIC1lICJzL1RTMC8kdGltZVdlc3QvIiAtZSAicy9UUzEvJGVwb2NXZXN0LyIgPGQgPnJlbW92ZVdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lRWFzdC8iIC1lICJzL1RTMS8kZXBvY0Vhc3QvIiA8ZCA+cmVtb3ZlRWFzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVHTVQvIiAtZSAicy9UUzEvJGVwb2NHTVQvIiA8ZCA+cmVtb3ZlR01ULnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZVdlc3QvIiAtZSAicy9UUzEvJGVwb2NXZXN0Mi8iIDxkID5yZW1vdmVXZXN0Mi5wYXRjaCAmJgorCisJZWNobyBzb21ldGhpbmcgPnNvbWV0aGluZyAmJgorCT5lbXB0eQorJworCitmb3IgcGF0Y2ggaW4gKi5wYXRjaAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0ZXN0ICRwYXRjaCIgJworCQlybSAtZiBmaWxlIC5naXQvaW5kZXggJiYKKwkJY2FzZSAiJHBhdGNoIiBpbgorCQljcmVhdGUqKQorCQkJIyBtdXN0IGJlIGFibGUgdG8gY3JlYXRlCisJCQlnaXQgYXBwbHkgLS1pbmRleCAkcGF0Y2ggJiYKKwkJCXRlc3RfY21wIGZpbGUgc29tZXRoaW5nICYmCisJCQkjIG11c3Qgbm90aWNlIHRoZSBmaWxlIGlzIGFscmVhZHkgdGhlcmUKKwkJCT5maWxlICYmCisJCQlnaXQgYWRkIGZpbGUgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAkcGF0Y2gKKwkJCTs7CisJCWFkZCopCisJCQkjIG11c3QgYmUgYWJsZSB0byBjcmVhdGUgb3IgcGF0Y2gKKwkJCWdpdCBhcHBseSAkcGF0Y2ggJiYKKwkJCXRlc3RfY21wIGZpbGUgc29tZXRoaW5nICYmCisJCQk+ZmlsZSAmJgorCQkJZ2l0IGFwcGx5ICRwYXRjaCAmJgorCQkJdGVzdF9jbXAgZmlsZSBzb21ldGhpbmcKKwkJCTs7CisJCWVtcHR5KikKKwkJCSMgbXVzdCBsZWF2ZSBhbiBlbXB0eSBmaWxlCisJCQljYXQgc29tZXRoaW5nID5maWxlICYmCisJCQlnaXQgYWRkIGZpbGUgJiYKKwkJCWdpdCBhcHBseSAtLWluZGV4ICRwYXRjaCAmJgorCQkJdGVzdCAtZiBmaWxlICYmCisJCQl0ZXN0X2NtcCBlbXB0eSBmaWxlCisJCQk7OworCQlyZW1vdmUqKQorCQkJIyBtdXN0IHJlbW92ZSB0aGUgZmlsZQorCQkJY2F0IHNvbWV0aGluZyA+ZmlsZSAmJgorCQkJZ2l0IGFkZCBmaWxlICYmCisJCQlnaXQgYXBwbHkgLS1pbmRleCAkcGF0Y2ggJiYKKwkJCSEgdGVzdCAtZiBmaWxlCisJCQk7OworCQllc2FjCisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzMtYXBwbHktZmlsZW5hbWVzLnNoIGIvdC90NDEzMy1hcHBseS1maWxlbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmVjYjQyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzMtYXBwbHktZmlsZW5hbWVzLnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQW5kcmVhcyBHcnVlbmJhY2hlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgZmlsZW5hbWUgY29uc2lzdGVuY3kgY2hlY2snCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwljYXQgPiBiYWQxLnBhdGNoIDw8RU9GICYmCitkaWZmIC0tZ2l0IGEvZiBiL2YKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kMDA0OTFmCistLS0gL2Rldi9udWxsCisrKysgYi9mLWJsYWgKK0BAIC0wLDAgKzEgQEAKKysxCitFT0YKKwljYXQgPiBiYWQyLnBhdGNoIDw8RU9GCitkaWZmIC0tZ2l0IGEvZiBiL2YKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggZDAwNDkxZi4uMDAwMDAwMAorLS0tIGIvZi1ibGFoCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistMQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGRpZmYgd2l0aCBpbmNvbnNpc3RlbnQgZmlsZW5hbWVzIGluIGhlYWRlcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgYmFkMS5wYXRjaCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUiIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBiYWQyLnBhdGNoIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzNC1hcHBseS1zdWJtb2R1bGUuc2ggYi90L3Q0MTM0LWFwcGx5LXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMDQzOTMwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNC1hcHBseS1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBQZXRlciBDb2xsaW5nYm91cm5lCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBzdWJtb2R1bGUgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwljYXQgPiBjcmVhdGUtc20ucGF0Y2ggPDxFT0YgJiYKK2RpZmYgLS1naXQgYS9kaXIvc20gYi9kaXIvc20KK25ldyBmaWxlIG1vZGUgMTYwMDAwCitpbmRleCAwMDAwMDAwLi4wMTIzNDU2CistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc20KK0BAIC0wLDAgKzEgQEAKKytTdWJwcm9qZWN0IGNvbW1pdCAwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3CitFT0YKKwljYXQgPiByZW1vdmUtc20ucGF0Y2ggPDxFT0YKK2RpZmYgLS1naXQgYS9kaXIvc20gYi9kaXIvc20KK2RlbGV0ZWQgZmlsZSBtb2RlIDE2MDAwMAoraW5kZXggMDEyMzQ1Ni4uMDAwMDAwMAorLS0tIGEvZGlyL3NtCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistU3VicHJvamVjdCBjb21taXQgMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2NworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIGEgc3VibW9kdWxlIGFsc28gcmVtb3ZlcyBhbGwgbGVhZGluZyBzdWJkaXJlY3RvcmllcycgJworCWdpdCBhcHBseSAtLWluZGV4IGNyZWF0ZS1zbS5wYXRjaCAmJgorCXRlc3QgLWQgZGlyL3NtICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcmVtb3ZlLXNtLnBhdGNoICYmCisJdGVzdCBcISAtZCBkaXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTM1LWFwcGx5LXdlaXJkLWZpbGVuYW1lcy5zaCBiL3QvdDQxMzUtYXBwbHktd2VpcmQtZmlsZW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmNWRjNTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1LWFwcGx5LXdlaXJkLWZpbGVuYW1lcy5zaApAQCAtMCwwICsxLDkxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHdpdGggd2VpcmQgcG9zdGltYWdlIGZpbGVuYW1lcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdmVjdG9yPSRURVNUX0RJUkVDVE9SWS90NDEzNSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHByZWltYWdlICYmCisJZ2l0IHRhZyBwcmVpbWFnZSAmJgorCisJcmVzZXRfcHJlaW1hZ2UoKSB7CisJCWdpdCBjaGVja291dCAtZiBwcmVpbWFnZV4wICYmCisJCWdpdCByZWFkLXRyZWUgLXUgLS1yZXNldCBIRUFEICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisJfSAmJgorCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcInRhYgllbWJlZGRlZC50eHRcIiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mICdcJydcInF1b3RlZW1iZWRkZWRcIi50eHQnXCcnIiAmJgorCWlmIHRvdWNoIC0tICJ0YWIJZW1iZWRkZWQudHh0IiAnXCcnInF1b3RlZW1iZWRkZWQiLnR4dCdcJycKKwl0aGVuCisJCXRlc3Rfc2V0X3ByZXJlcSBGVU5OWU5BTUVTCisJZmkKKycKKwordHJ5X2ZpbGVuYW1lKCkgeworCWRlc2M9JDEKKwlwb3N0aW1hZ2U9JDIKKwlwcmVyZXE9JHszOi19CisJZXhwMT0kezQ6LXN1Y2Nlc3N9CisJZXhwMj0kezU6LXN1Y2Nlc3N9CisJZXhwMz0kezY6LXN1Y2Nlc3N9CisKKwl0ZXN0X2V4cGVjdF8kZXhwMSAkcHJlcmVxICIkZGVzYywgZ2l0LXN0eWxlIGZpbGUgY3JlYXRpb24gcGF0Y2giICIKKwkJZWNobyBwb3N0aW1hZ2UgPmV4cGVjdGVkICYmCisJCXJlc2V0X3ByZWltYWdlICYmCisJCXJtIC1mICckcG9zdGltYWdlJyAmJgorCQlnaXQgYXBwbHkgLXYgXCJcJHZlY3RvclwiLydnaXQtJGRlc2MuZGlmZicgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgJyRwb3N0aW1hZ2UnCisJIgorCisJdGVzdF9leHBlY3RfJGV4cDIgJHByZXJlcSAiJGRlc2MsIHRyYWRpdGlvbmFsIHBhdGNoIiAiCisJCWVjaG8gcG9zdGltYWdlID5leHBlY3RlZCAmJgorCQlyZXNldF9wcmVpbWFnZSAmJgorCQllY2hvIHByZWltYWdlID4nJHBvc3RpbWFnZScgJiYKKwkJZ2l0IGFwcGx5IC12IFwiXCR2ZWN0b3JcIi8nZGlmZi0kZGVzYy5kaWZmJyAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCAnJHBvc3RpbWFnZScKKwkiCisKKwl0ZXN0X2V4cGVjdF8kZXhwMyAkcHJlcmVxICIkZGVzYywgdHJhZGl0aW9uYWwgZmlsZSBjcmVhdGlvbiBwYXRjaCIgIgorCQllY2hvIHBvc3RpbWFnZSA+ZXhwZWN0ZWQgJiYKKwkJcmVzZXRfcHJlaW1hZ2UgJiYKKwkJcm0gLWYgJyRwb3N0aW1hZ2UnICYmCisJCWdpdCBhcHBseSAtdiBcIlwkdmVjdG9yXCIvJ2FkZC0kZGVzYy5kaWZmJyAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCAnJHBvc3RpbWFnZScKKwkiCit9CisKK3RyeV9maWxlbmFtZSAncGxhaW4nICAgICAgICAgICAgJ3Bvc3RpbWFnZS50eHQnCit0cnlfZmlsZW5hbWUgJ3dpdGggc3BhY2VzJyAgICAgICdwb3N0IGltYWdlLnR4dCcKK3RyeV9maWxlbmFtZSAnd2l0aCB0YWInICAgICAgICAgJ3Bvc3QJaW1hZ2UudHh0JyBGVU5OWU5BTUVTCit0cnlfZmlsZW5hbWUgJ3dpdGggYmFja3NsYXNoJyAgICdwb3N0XGltYWdlLnR4dCcgQlNMQVNIUFNQRUMKK3RyeV9maWxlbmFtZSAnd2l0aCBxdW90ZScgICAgICAgJyJwb3N0aW1hZ2UiLnR4dCcgRlVOTllOQU1FUyBzdWNjZXNzIGZhaWx1cmUgc3VjY2VzcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlLWRhbWFnZWQgdHJhZGl0aW9uYWwgcGF0Y2gnICcKKwllY2hvIHBvc3RpbWFnZSA+ZXhwZWN0ZWQgJiYKKwlyZXNldF9wcmVpbWFnZSAmJgorCXJtIC1mIHBvc3RpbWFnZS50eHQgJiYKKwlnaXQgYXBwbHkgLXYgIiR2ZWN0b3IvZGFtYWdlZC5kaWZmIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHBvc3RpbWFnZS50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhZGl0aW9uYWwgcGF0Y2ggd2l0aCBjb2xvbiBpbiB0aW1lem9uZScgJworCWVjaG8gcG9zdGltYWdlID5leHBlY3RlZCAmJgorCXJlc2V0X3ByZWltYWdlICYmCisJcm0gLWYgInBvc3QgaW1hZ2UudHh0IiAmJgorCWdpdCBhcHBseSAiJHZlY3Rvci9mdW5ueS10ei5kaWZmIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICJwb3N0IGltYWdlLnR4dCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhZGl0aW9uYWwsIHdoaXRlc3BhY2UtZGFtYWdlZCwgY29sb24gaW4gdGltZXpvbmUnICcKKwllY2hvIHBvc3RpbWFnZSA+ZXhwZWN0ZWQgJiYKKwlyZXNldF9wcmVpbWFnZSAmJgorCXJtIC1mICJwb3N0IGltYWdlLnR4dCIgJiYKKwlnaXQgYXBwbHkgIiR2ZWN0b3IvZGFtYWdlZC10ei5kaWZmIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICJwb3N0IGltYWdlLnR4dCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTM1Ly5naXRpZ25vcmUgYi90L3Q0MTM1Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1OGU2NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKKy9maWxlLWNyZWF0aW9uLworL3RyYWQtY3JlYXRpb24vCisvdHJhZC1tb2RpZmljYXRpb24vCmRpZmYgLS1naXQgYS90L3Q0MTM1L2FkZC1wbGFpbi5kaWZmIGIvdC90NDEzNS9hZGQtcGxhaW4uZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjU5NzBhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9hZGQtcGxhaW4uZGlmZgpAQCAtMCwwICsxLDUgQEAKK2RpZmYgLXBydU4gYS9wb3N0aW1hZ2UudHh0IGIvcG9zdGltYWdlLnR4dAorLS0tIGEvcG9zdGltYWdlLnR4dAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGIvcG9zdGltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjQ4NDAwMjI1NSAtMDUwMAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9hZGQtd2l0aCBiYWNrc2xhc2guZGlmZiBiL3QvdDQxMzUvYWRkLXdpdGggYmFja3NsYXNoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY4NjFlMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvYWRkLXdpdGggYmFja3NsYXNoLmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC1wcnVOIGEvcG9zdFxpbWFnZS50eHQgYi9wb3N0XGltYWdlLnR4dAorLS0tIGEvcG9zdFxpbWFnZS50eHQJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBiL3Bvc3RcaW1hZ2UudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNjkyMDAyMjU1IC0wNTAwCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2FkZC13aXRoIHF1b3RlLmRpZmYgYi90L3Q0MTM1L2FkZC13aXRoIHF1b3RlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY2ZGU3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvYWRkLXdpdGggcXVvdGUuZGlmZgpAQCAtMCwwICsxLDUgQEAKK2RpZmYgLXBydU4gYS8icG9zdGltYWdlIi50eHQgYi8icG9zdGltYWdlIi50eHQKKy0tLSBhLyJwb3N0aW1hZ2UiLnR4dAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGIvInBvc3RpbWFnZSIudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNzU2MDAyMjU1IC0wNTAwCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2FkZC13aXRoIHNwYWNlcy5kaWZmIGIvdC90NDEzNS9hZGQtd2l0aCBzcGFjZXMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWExMjEyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9hZGQtd2l0aCBzcGFjZXMuZGlmZgpAQCAtMCwwICsxLDUgQEAKK2RpZmYgLXBydU4gYS9wb3N0IGltYWdlLnR4dCBiL3Bvc3QgaW1hZ2UudHh0CistLS0gYS9wb3N0IGltYWdlLnR4dAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGIvcG9zdCBpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS41NTYwMDIyNTUgLTA1MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvYWRkLXdpdGggdGFiLmRpZmYgYi90L3Q0MTM1L2FkZC13aXRoIHRhYi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjdjYjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2FkZC13aXRoIHRhYi5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtcHJ1TiBhL3Bvc3QJaW1hZ2UudHh0IGIvcG9zdAlpbWFnZS50eHQKKy0tLSBhL3Bvc3QJaW1hZ2UudHh0CTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgYi9wb3N0CWltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjYyODAwMjI1NSAtMDUwMAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9kYW1hZ2VkLXR6LmRpZmYgYi90L3Q0MTM1L2RhbWFnZWQtdHouZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2FhZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9kYW1hZ2VkLXR6LmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC11ck4gLVggL3Vzci9wZW9wbGUvamVzL2V4Y2x1ZGUtbGludXggbGludXgtMi42LjEyLXJjMi1tbTMtdmFuaWxsYS9wb3N0IGltYWdlLnR4dCBsaW51eC0yLjYuMTItcmMyLW1tMy9wb3N0IGltYWdlLnR4dAorLS0tIGxpbnV4LTIuNi4xMi1yYzItbW0zLXZhbmlsbGEvcG9zdCBpbWFnZS50eHQgMTk2OS0xMi0zMSAxNjowMDowMCAtMDg6MDAKKysrKyBsaW51eC0yLjYuMTItcmMyLW1tMy9wb3N0IGltYWdlLnR4dCAyMDA1LTA0LTEyIDAyOjE0OjA2IC0wNzowMAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9kYW1hZ2VkLmRpZmYgYi90L3Q0MTM1L2RhbWFnZWQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGY3ZWRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9kYW1hZ2VkLmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC1wcnVOIGEvcG9zdGltYWdlLnR4dCBiL3Bvc3RpbWFnZS50eHQKKy0tLSBhL3Bvc3RpbWFnZS50eHQgICAgIDE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgYi9wb3N0aW1hZ2UudHh0ICAgICAyMDEwLTA4LTE4IDIwOjEzOjMxLjQ4NDAwMjI1NSAtMDUwMAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9kaWZmLXBsYWluLmRpZmYgYi90L3Q0MTM1L2RpZmYtcGxhaW4uZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2VkY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9kaWZmLXBsYWluLmRpZmYKQEAgLTAsMCArMSw1IEBACistLS0gcG9zdGltYWdlLnR4dC5vcmlnCTIwMTAtMDgtMTggMjA6MTM6MzEuNDMyMDAyMjU1IC0wNTAwCisrKysgcG9zdGltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjQzMjAwMjI1NSAtMDUwMAorQEAgLTEgKzEgQEAKKy1wcmVpbWFnZQorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9kaWZmLXdpdGggYmFja3NsYXNoLmRpZmYgYi90L3Q0MTM1L2RpZmYtd2l0aCBiYWNrc2xhc2guZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY4YTYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9kaWZmLXdpdGggYmFja3NsYXNoLmRpZmYKQEAgLTAsMCArMSw1IEBACistLS0gcG9zdFxpbWFnZS50eHQub3JpZwkyMDEwLTA4LTE4IDIwOjEzOjMxLjY4MDAwMjI1NSAtMDUwMAorKysrIHBvc3RcaW1hZ2UudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNjgwMDAyMjU1IC0wNTAwCitAQCAtMSArMSBAQAorLXByZWltYWdlCisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2RpZmYtd2l0aCBxdW90ZS5kaWZmIGIvdC90NDEzNS9kaWZmLXdpdGggcXVvdGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGU4Y2MxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9kaWZmLXdpdGggcXVvdGUuZGlmZgpAQCAtMCwwICsxLDUgQEAKKy0tLSAicG9zdGltYWdlIi50eHQub3JpZwkyMDEwLTA4LTE4IDIwOjEzOjMxLjc0NDAwMjI1NSAtMDUwMAorKysrICJwb3N0aW1hZ2UiLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjc0NDAwMjI1NSAtMDUwMAorQEAgLTEgKzEgQEAKKy1wcmVpbWFnZQorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9kaWZmLXdpdGggc3BhY2VzLmRpZmYgYi90L3Q0MTM1L2RpZmYtd2l0aCBzcGFjZXMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTEyMDU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9kaWZmLXdpdGggc3BhY2VzLmRpZmYKQEAgLTAsMCArMSw1IEBACistLS0gcG9zdCBpbWFnZS50eHQub3JpZwkyMDEwLTA4LTE4IDIwOjEzOjMxLjU0NDAwMjI1NSAtMDUwMAorKysrIHBvc3QgaW1hZ2UudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNTQ0MDAyMjU1IC0wNTAwCitAQCAtMSArMSBAQAorLXByZWltYWdlCisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2RpZmYtd2l0aCB0YWIuZGlmZiBiL3QvdDQxMzUvZGlmZi13aXRoIHRhYi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNmQ5YjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2RpZmYtd2l0aCB0YWIuZGlmZgpAQCAtMCwwICsxLDUgQEAKKy0tLSBwb3N0CWltYWdlLnR4dC5vcmlnCTIwMTAtMDgtMTggMjA6MTM6MzEuNjE2MDAyMjU1IC0wNTAwCisrKysgcG9zdAlpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS42MTYwMDIyNTUgLTA1MDAKK0BAIC0xICsxIEBACistcHJlaW1hZ2UKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZnVubnktdHouZGlmZiBiL3QvdDQxMzUvZnVubnktdHouZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OThlM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9mdW5ueS10ei5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtdXJOIC1YIC91c3IvcGVvcGxlL2plcy9leGNsdWRlLWxpbnV4IGxpbnV4LTIuNi4xMi1yYzItbW0zLXZhbmlsbGEvcG9zdCBpbWFnZS50eHQgbGludXgtMi42LjEyLXJjMi1tbTMvcG9zdCBpbWFnZS50eHQKKy0tLSBsaW51eC0yLjYuMTItcmMyLW1tMy12YW5pbGxhL3Bvc3QgaW1hZ2UudHh0CTE5NjktMTItMzEgMTY6MDA6MDAgLTA4OjAwCisrKysgbGludXgtMi42LjEyLXJjMi1tbTMvcG9zdCBpbWFnZS50eHQJMjAwNS0wNC0xMiAwMjoxNDowNiAtMDc6MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZ2l0LXBsYWluLmRpZmYgYi90L3Q0MTM1L2dpdC1wbGFpbi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNDdkMWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2dpdC1wbGFpbi5kaWZmCkBAIC0wLDAgKzEsNyBAQAorZGlmZiAtLWdpdCBhL3Bvc3RpbWFnZS50eHQgYi9wb3N0aW1hZ2UudHh0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZWZmMGM1NAorLS0tIC9kZXYvbnVsbAorKysrIGIvcG9zdGltYWdlLnR4dAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9naXQtd2l0aCBiYWNrc2xhc2guZGlmZiBiL3QvdDQxMzUvZ2l0LXdpdGggYmFja3NsYXNoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4NGExMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZ2l0LXdpdGggYmFja3NsYXNoLmRpZmYKQEAgLTAsMCArMSw3IEBACitkaWZmIC0tZ2l0ICJhL3Bvc3RcXGltYWdlLnR4dCIgImIvcG9zdFxcaW1hZ2UudHh0IgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmZjBjNTQKKy0tLSAvZGV2L251bGwKKysrKyAiYi9wb3N0XFxpbWFnZS50eHQiCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2dpdC13aXRoIHF1b3RlLmRpZmYgYi90L3Q0MTM1L2dpdC13aXRoIHF1b3RlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiZWE4YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZ2l0LXdpdGggcXVvdGUuZGlmZgpAQCAtMCwwICsxLDcgQEAKK2RpZmYgLS1naXQgImEvXCJwb3N0aW1hZ2VcIi50eHQiICJiL1wicG9zdGltYWdlXCIudHh0IgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmZjBjNTQKKy0tLSAvZGV2L251bGwKKysrKyAiYi9cInBvc3RpbWFnZVwiLnR4dCIKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZ2l0LXdpdGggc3BhY2VzLmRpZmYgYi90L3Q0MTM1L2dpdC13aXRoIHNwYWNlcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYWE4MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2dpdC13aXRoIHNwYWNlcy5kaWZmCkBAIC0wLDAgKzEsNyBAQAorZGlmZiAtLWdpdCBhL3Bvc3QgaW1hZ2UudHh0IGIvcG9zdCBpbWFnZS50eHQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lZmYwYzU0CistLS0gL2Rldi9udWxsCisrKysgYi9wb3N0IGltYWdlLnR4dAkKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZ2l0LXdpdGggdGFiLmRpZmYgYi90L3Q0MTM1L2dpdC13aXRoIHRhYi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYTNjOTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2dpdC13aXRoIHRhYi5kaWZmCkBAIC0wLDAgKzEsNyBAQAorZGlmZiAtLWdpdCAiYS9wb3N0XHRpbWFnZS50eHQiICJiL3Bvc3RcdGltYWdlLnR4dCIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lZmYwYzU0CistLS0gL2Rldi9udWxsCisrKysgImIvcG9zdFx0aW1hZ2UudHh0IgorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9tYWtlLXBhdGNoZXMgYi90L3Q0MTM1L21ha2UtcGF0Y2hlcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNWY0NWRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9tYWtlLXBhdGNoZXMKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisKK2RvX2ZpbGVuYW1lKCkgeworCWRlc2M9JDEKKwlwb3N0aW1hZ2U9JDIKKworCXJtIC1mciBmaWxlLWNyZWF0aW9uICYmCisJZ2l0IGluaXQgZmlsZS1jcmVhdGlvbiAmJgorCSgKKwkJY2QgZmlsZS1jcmVhdGlvbiAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdCAmJgorCQllY2hvIHBvc3RpbWFnZSA+IiRwb3N0aW1hZ2UiICYmCisJCWdpdCBhZGQgLU4gIiRwb3N0aW1hZ2UiICYmCisJCWdpdCBkaWZmIEhFQUQgPiIuLi9naXQtJGRlc2MuZGlmZiIKKwkpICYmCisKKwlybSAtZnIgdHJhZC1tb2RpZmljYXRpb24gJiYKKwlta2RpciB0cmFkLW1vZGlmaWNhdGlvbiAmJgorCSgKKwkJY2QgdHJhZC1tb2RpZmljYXRpb24gJiYKKwkJZWNobyBwcmVpbWFnZSA+IiRwb3N0aW1hZ2Uub3JpZyIgJiYKKwkJZWNobyBwb3N0aW1hZ2UgPiIkcG9zdGltYWdlIiAmJgorCQkhIGRpZmYgLXUgIiRwb3N0aW1hZ2Uub3JpZyIgIiRwb3N0aW1hZ2UiID4iLi4vZGlmZi0kZGVzYy5kaWZmIgorCSkgJiYKKworCXJtIC1mciB0cmFkLWNyZWF0aW9uICYmCisJbWtkaXIgdHJhZC1jcmVhdGlvbiAmJgorCSgKKwkJY2QgdHJhZC1jcmVhdGlvbiAmJgorCQlta2RpciBhIGIgJiYKKwkJZWNobyBwb3N0aW1hZ2UgPiJiLyRwb3N0aW1hZ2UiICYmCisJCSEgZGlmZiAtcHJ1TiBhIGIgPiIuLi9hZGQtJGRlc2MuZGlmZiIKKwkpCit9CisKK2RvX2ZpbGVuYW1lIHBsYWluIHBvc3RpbWFnZS50eHQgJiYKK2RvX2ZpbGVuYW1lICd3aXRoIHNwYWNlcycgJ3Bvc3QgaW1hZ2UudHh0JyAmJgorZG9fZmlsZW5hbWUgJ3dpdGggdGFiJyAncG9zdAlpbWFnZS50eHQnICYmCitkb19maWxlbmFtZSAnd2l0aCBiYWNrc2xhc2gnICdwb3N0XGltYWdlLnR4dCcgJiYKK2RvX2ZpbGVuYW1lICd3aXRoIHF1b3RlJyAnInBvc3RpbWFnZSIudHh0JyAmJgorZXhwYW5kIGFkZC1wbGFpbi5kaWZmID5kYW1hZ2VkLmRpZmYgfHwKK3sKKwllY2hvID4mMiBGYWlsZWQuICYmCisJZXhpdCAxCit9CmRpZmYgLS1naXQgYS90L3Q0MTM2LWFwcGx5LWNoZWNrLnNoIGIvdC90NDEzNi1hcHBseS1jaGVjay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMzIxZjdjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNi1hcHBseS1jaGVjay5zaApAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHNob3VsZCBleGl0IG5vbi16ZXJvIHdpdGggdW5yZWNvZ25pemVkIGlucHV0LicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWNoZWNrIGV4aXRzIG5vbi16ZXJvIHdpdGggdW5yZWNvZ25pemVkIGlucHV0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgLSA8PC1cRU9GCisJSSBhbSBub3QgYSBwYXRjaAorCUkgbG9vayBub3RoaW5nIGxpa2UgYSBwYXRjaAorCWdpdCBhcHBseSBtdXN0IGZhaWwKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTUwLWFtLnNoIGIvdC90NDE1MC1hbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZGFmZDdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDE1MC1hbS5zaApAQCAtMCwwICsxLDUzMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhbSBydW5uaW5nJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IG1lc3NhZ2VzJyAnCisJY2F0ID5tc2cgPDwtXEVPRiAmJgorCXNlY29uZAorCisJTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkKKwllaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0KKwl2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YQorCWthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtCisJaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZAorCXRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdAorCXZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uCisKKwlFT0YKKwlxX3RvX3RhYiA8PC1cRU9GID4+bXNnICYmCisJUUR1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdAorCVFlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcworCVFhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQKKwlRcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhCisJUWZhY2lsaXNpLgorCUVPRgorCWNhdCA+Pm1zZyA8PC1cRU9GICYmCisKKwlMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwKKwljb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQKKwlsYW9yZWV0IGRvbG9yZSBtYWduYSBhbGlxdWFtIGVyYXQgdm9sdXRwYXQuCisKKwkgIGdpdAorCSAgLS0tCisJICArKysKKworCVV0IHdpc2kgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2kgdGF0aW9uIHVsbGFtY29ycGVyIHN1c2NpcGl0CisJbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LiBEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlCisJZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtCisJZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvCisJZGlnbmlzc2ltIHF1aSBibGFuZGl0IHByYWVzZW50IGx1cHRhdHVtIHp6cmlsIGRlbGVuaXQgYXVndWUgZHVpcyBkb2xvcmUgdGUKKwlmZXVnYWl0IG51bGxhIGZhY2lsaXNpLgorCUVPRgorCisJY2F0ID5mYWlsbWFpbCA8PC1cRU9GICYmCisJRnJvbSBmb29AZXhhbXBsZS5jb20gRnJpIE1heSAyMyAxMDo0Mzo0OSAyMDA4CisJRnJvbToJZm9vQGV4YW1wbGUuY29tCisJVG86CWJhckBleGFtcGxlLmNvbQorCVN1YmplY3Q6IFJlOiBbUkZDL1BBVENIXSBnaXQtZm9vLnNoCisJRGF0ZToJRnJpLCAyMyBNYXkgMjAwOCAwNToyMzo0MiArMDIwMAorCisJU29tZXRpbWVzIHdlIGhhdmUgdG8gZmluZCBvdXQgdGhhdCB0aGVyZSdcJydzIG5vdGhpbmcgbGVmdC4KKworCUVPRgorCisJY2F0ID5waW5lIDw8LVxFT0YgJiYKKwlGcm9tIE1BSUxFUi1EQUVNT04gRnJpIE1heSAyMyAxMDo0Mzo0OSAyMDA4CisJRGF0ZTogMjMgTWF5IDIwMDggMDU6MjM6NDIgKzAyMDAKKwlGcm9tOiBNYWlsIFN5c3RlbSBJbnRlcm5hbCBEYXRhIDxNQUlMRVItREFFTU9OQGV4YW1wbGUuY29tPgorCVN1YmplY3Q6IERPTidcJydUIERFTEVURSBUSElTIE1FU1NBR0UgLS0gRk9MREVSIElOVEVSTkFMIERBVEEKKwlNZXNzYWdlLUlEOiA8Zm9vLTAwMDFAZXhhbXBsZS5jb20+CisKKwlUaGlzIHRleHQgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9ybWF0IG9mIHlvdXIgbWFpbCBmb2xkZXIsIGFuZCBpcyBub3QKKwlhIHJlYWwgbWVzc2FnZS4gIEl0IGlzIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgbWFpbCBzeXN0ZW0gc29mdHdhcmUuCisJSWYgZGVsZXRlZCwgaW1wb3J0YW50IGZvbGRlciBkYXRhIHdpbGwgYmUgbG9zdCwgYW5kIGl0IHdpbGwgYmUgcmUtY3JlYXRlZAorCXdpdGggdGhlIGRhdGEgcmVzZXQgdG8gaW5pdGlhbCB2YWx1ZXMuCisKKwlFT0YKKworCXNpZ25vZmY9IlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwlnaXQgdGFnIGZpcnN0ICYmCisKKwllY2hvIHdvcmxkID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLXMgLUYgbXNnICYmCisJZ2l0IHRhZyBzZWNvbmQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZmlyc3QgPnBhdGNoMSAmJgorCXsKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIE9uZSIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFR3byIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFRocmVlIiAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0IHwgc2VkIC1lICIxZCIKKwl9ID4gcGF0Y2gxLmVtbCAmJgorCXsKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIE9uZSIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFR3byIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFRocmVlIiAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0IHwgc2VkIC1lICIxZCIKKwl9IHwgYXBwZW5kX2NyID5wYXRjaDEtY3JsZi5lbWwgJiYKKwl7CisJCXByaW50ZiAiJTI1NXNcXG4iICIiCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBPbmUiICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUd28iICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUaHJlZSIgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCB8IHNlZCAtZSAiMWQiCisJfSA+IHBhdGNoMS13cy5lbWwgJiYKKworCXNlZCAtbiAtZSAiMyxcJHAiIG1zZyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZmlyc3QgPnBhdGNoMgkmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtICYmCisJc2VkIC1uIC1lICIxMSxcJHAiIG1zZyA+ZmlsZSAmJgorCWhlYWQgLW4gOSBtc2cgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibW92ZWQgc3R1ZmYiICYmCisKKwllY2hvIGdvb2RieWUgPmFub3RoZXIgJiYKKwlnaXQgYWRkIGFub3RoZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBhbm90aGVyIGZpbGUiICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3RlciA+bG9yZW0tbW92ZS5wYXRjaCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1wcmVmaXggLS1zdGRvdXQgbWFzdGVyID5sb3JlbS16ZXJvLnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lICYmCisJZ2l0IG12IGZpbGUgcmVuYW1lZCAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZWQgYSBmaWxlIiAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtTSAtLXN0ZG91dCBsb3JlbSA+cmVuYW1lLnBhdGNoICYmCisKKwlnaXQgcmVzZXQgLS1zb2Z0IGxvcmVtXiAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZWQgYSBmaWxlIGFuZCBhZGRlZCBhbm90aGVyIiAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtTSAtLXN0ZG91dCBsb3JlbV4gPnJlbmFtZS1hZGQucGF0Y2ggJiYKKworCSMgcmVzZXQgdGltZQorCXNhbmVfdW5zZXQgdGVzdF90aWNrICYmCisJdGVzdF90aWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgcGF0Y2ggY29ycmVjdGx5JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhbSA8cGF0Y2gxICYmCisJISB0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgcGF0Y2ggZS1tYWlsIG5vdCBpbiBhIG1ib3gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJZ2l0IGFtIHBhdGNoMS5lbWwgJiYKKwkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmReKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYXBwbGllcyBwYXRjaCBlLW1haWwgbm90IGluIGEgbWJveCB3aXRoIENSTEYnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJZ2l0IGFtIHBhdGNoMS1jcmxmLmVtbCAmJgorCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBhcHBsaWVzIHBhdGNoIGUtbWFpbCB3aXRoIHByZWNlZGluZyB3aGl0ZXNwYWNlJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCWdpdCBhbSBwYXRjaDEtd3MuZW1sICYmCisJISB0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBuZXcgYXV0aG9yIGFuZCBjb21taXR0ZXInICcKKwlHSVRfQVVUSE9SX05BTUU9IkFub3RoZXIgVGhvciIgJiYKKwlHSVRfQVVUSE9SX0VNQUlMPSJhLnRob3JAZXhhbXBsZS5jb20iICYmCisJR0lUX0NPTU1JVFRFUl9OQU1FPSJDbyBNIE1pdGVyIiAmJgorCUdJVF9DT01NSVRURVJfRU1BSUw9ImMubWl0ZXJAZXhhbXBsZS5jb20iICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMIEdJVF9DT01NSVRURVJfTkFNRSBHSVRfQ09NTUlUVEVSX0VNQUlMCisnCisKK2NvbXBhcmUgKCkgeworCWE9JChnaXQgY2F0LWZpbGUgY29tbWl0ICIkMiIgfCBncmVwICJeJDEgIikgJiYKKwliPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDMiIHwgZ3JlcCAiXiQxICIpICYmCisJdGVzdCAiJGEiID0gIiRiIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBjaGFuZ2VzIGNvbW1pdHRlciBhbmQga2VlcHMgYXV0aG9yJyAnCisJdGVzdF90aWNrICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCWdpdCBhbSBwYXRjaDIgJiYKKwkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIuLkhFQUQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXJeLi5IRUFEXiAmJgorCWNvbXBhcmUgYXV0aG9yIG1hc3RlciBIRUFEICYmCisJY29tcGFyZSBhdXRob3IgbWFzdGVyXiBIRUFEXiAmJgorCXRlc3QgIiRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIgPSBcCisJICAgICAiJChnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDoiJWNuIDwlY2U+IiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1zaWdub2ZmIGFkZHMgU2lnbmVkLW9mZi1ieTogbGluZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyMiBmaXJzdCAmJgorCWdpdCBhbSAtLXNpZ25vZmYgPHBhdGNoMiAmJgorCXByaW50ZiAiJXNcbiIgIiRzaWdub2ZmIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID4+ZXhwZWN0ZWQgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCAiU2lnbmVkLW9mZi1ieToiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID5leHBlY3RlZCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIlNpZ25lZC1vZmYtYnk6IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHN0YXlzIGluIGJyYW5jaCcgJworCWVjaG8gcmVmcy9oZWFkcy9tYXN0ZXIyID5leHBlY3RlZCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2lnbm9mZiBkb2VzIG5vdCBhZGQgU2lnbmVkLW9mZi1ieTogbGluZSBpZiBhbHJlYWR5IHRoZXJlJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEXiA+cGF0Y2gzICYmCisJc2VkIC1lICIvXlN1YmplY3QvIHMsXFtQQVRDSCxSZTogUmU6IFJlOiAmIDEvNSB2Ml0gW2ZvbywiIHBhdGNoMyA+cGF0Y2g0ICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBhbSAtLXNpZ25vZmYgcGF0Y2g0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiXlNpZ25lZC1vZmYtYnk6IiBhY3R1YWwpIC1lcSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGhvdXQgLS1rZWVwIHJlbW92ZXMgUmU6IGFuZCBbUEFUQ0hdIHN0dWZmJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0ta2VlcCByZWFsbHkga2VlcHMgdGhlIHN1YmplY3QnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IGFtIC0ta2VlcCBwYXRjaDQgJiYKKwkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFjdHVhbCAmJgorCWdyZXAgIlJlOiBSZTogUmU6IFxbUEFUQ0ggMS81IHYyXF0gXFtmb29cXSB0aGlyZCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0ta2VlcC1ub24tcGF0Y2ggcmVhbGx5IGtlZXBzIHRoZSBub24tcGF0Y2ggcGFydCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwlnaXQgYW0gLS1rZWVwLW5vbi1wYXRjaCBwYXRjaDQgJiYKKwkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFjdHVhbCAmJgorCWdyZXAgIl5cW2Zvb1xdIHRoaXJkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgZmFsbHMgYmFjayB0byAzLXdheSBtZXJnZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9yZW0yIG1hc3RlcjIgJiYKKwlzZWQgLW4gLWUgIjMsXCRwIiBtc2cgPmZpbGUgJiYKKwloZWFkIC1uIDkgbXNnID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvcGllZCBzdHVmZiIgJiYKKwlnaXQgYW0gLTMgbG9yZW0tbW92ZS5wYXRjaCAmJgorCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGxvcmVtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIC1wMCBjYW4gcmVhZCAtLW5vLXByZWZpeCBwYXRjaCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9yZW0zIG1hc3RlcjIgJiYKKwlzZWQgLW4gLWUgIjMsXCRwIiBtc2cgPmZpbGUgJiYKKwloZWFkIC1uIDkgbXNnID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvcGllZCBzdHVmZiIgJiYKKwlnaXQgYW0gLTMgLXAwIGxvcmVtLXplcm8ucGF0Y2ggJiYKKwkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBsb3JlbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBjYW4gcmVuYW1lIGEgZmlsZScgJworCWdyZXAgIl5yZW5hbWUgZnJvbSIgcmVuYW1lLnBhdGNoICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBsb3JlbV4wICYmCisJZ2l0IGFtIHJlbmFtZS5wYXRjaCAmJgorCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgcmVuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIGNhbiByZW5hbWUgYSBmaWxlJyAnCisJZ3JlcCAiXnJlbmFtZSBmcm9tIiByZW5hbWUucGF0Y2ggJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtXjAgJiYKKwlnaXQgYW0gLTMgcmVuYW1lLnBhdGNoICYmCisJISB0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSByZW5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgY2FuIHJlbmFtZSBhIGZpbGUgYWZ0ZXIgZmFsbGluZyBiYWNrIHRvIDMtd2F5IG1lcmdlJyAnCisJZ3JlcCAiXnJlbmFtZSBmcm9tIiByZW5hbWUtYWRkLnBhdGNoICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBsb3JlbV4wICYmCisJZ2l0IGFtIC0zIHJlbmFtZS1hZGQucGF0Y2ggJiYKKwkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHJlbmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyAtcSBpcyBxdWlldCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjaGVja291dCAtZiBsb3JlbTIgJiYKKwlnaXQgcmVzZXQgbWFzdGVyMiAtLWhhcmQgJiYKKwlzZWQgLW4gLWUgIjMsXCRwIiBtc2cgPmZpbGUgJiYKKwloZWFkIC1uIDkgbXNnID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvcGllZCBzdHVmZiIgJiYKKwlnaXQgYW0gLTMgLXEgbG9yZW0tbW92ZS5wYXRjaCA+b3V0cHV0Lm91dCAyPiYxICYmCisJISB0ZXN0IC1zIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gcGF1c2VzIG9uIGNvbmZsaWN0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBsb3JlbTJeXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNraXAgd29ya3MnICcKKwllY2hvIGdvb2RieWUgPmV4cGVjdGVkICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCSEgdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGxvcmVtMl5eIC0tIGZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhbm90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcmVzb2x2ZWQgd29ya3MnICcKKwllY2hvIGdvb2RieWUgPmV4cGVjdGVkICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBsb3JlbTJeXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWVjaG8gcmVzb2x2ZWQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGFtIC0tcmVzb2x2ZWQgJiYKKwkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhbm90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHRha2VzIHBhdGNoZXMgZnJvbSBhIFBpbmUgbWFpbGJveCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwljYXQgcGluZSBwYXRjaDEgfCBnaXQgYW0gJiYKKwkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXJeLi5IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGZhaWxzIG9uIG1haWwgd2l0aG91dCBwYXRjaCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gPGZhaWxtYWlsICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gZmFpbHMgb24gZW1wdHkgcGF0Y2gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAiLS0tIiA+PmZhaWxtYWlsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDxmYWlsbWFpbCAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwkhIHRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd29ya3MgZnJvbSBzdGRpbiBpbiBzdWJkaXJlY3RvcnknICcKKwlybSAtZnIgc3ViZGlyICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCSgKKwkJbWtkaXIgLXAgc3ViZGlyICYmCisJCWNkIHN1YmRpciAmJgorCQlnaXQgYW0gPC4uL3BhdGNoMQorCSkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd29ya3MgZnJvbSBmaWxlIChyZWxhdGl2ZSBwYXRoIGdpdmVuKSBpbiBzdWJkaXJlY3RvcnknICcKKwlybSAtZnIgc3ViZGlyICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCSgKKwkJbWtkaXIgLXAgc3ViZGlyICYmCisJCWNkIHN1YmRpciAmJgorCQlnaXQgYW0gLi4vcGF0Y2gxCisJKSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3b3JrcyBmcm9tIGZpbGUgKGFic29sdXRlIHBhdGggZ2l2ZW4pIGluIHN1YmRpcmVjdG9yeScgJworCXJtIC1mciBzdWJkaXIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJUD0kKHB3ZCkgJiYKKwkoCisJCW1rZGlyIC1wIHN1YmRpciAmJgorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGFtICIkUC9wYXRjaDEiCisJKSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhbSAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIHBhdGNoMSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiL15cJC9xIiA+aGVhZDEgJiYKKwlzZWQgLW5lICIvXmF1dGhvciAvcy8uKj4gLy9wIiBoZWFkMSA+YXQgJiYKKwlzZWQgLW5lICIvXmNvbW1pdHRlciAvcy8uKj4gLy9wIiBoZWFkMSA+Y3QgJiYKKwl0ZXN0X2NtcCBhdCBjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRob3V0IC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFtIHBhdGNoMSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiL15cJC9xIiA+aGVhZDEgJiYKKwlzZWQgLW5lICIvXmF1dGhvciAvcy8uKj4gLy9wIiBoZWFkMSA+YXQgJiYKKwlzZWQgLW5lICIvXmNvbW1pdHRlciAvcy8uKj4gLy9wIiBoZWFkMSA+Y3QgJiYKKwkhIHRlc3RfY21wIGF0IGN0CisnCisKKyMgVGhpcyBjaGVja3MgZm9yICswMDAwIGJlY2F1c2UgVFogaXMgc2V0IHRvIFVUQyBhbmQgdGhhdCBzaG91bGQKKyMgc2hvdyB1cCB3aGVuIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZC4gVGhlIGRhdGUgaW4gbWVzc2FnZSBpcyBzZXQKKyMgYnkgdGVzdF90aWNrIHRoYXQgdXNlcyAtMDcwMCB0aW1lem9uZTsgaWYgdGhpcyBmZWF0dXJlIGRvZXMgbm90CisjIHdvcmssIHdlIHdpbGwgc2VlIHRoYXQgaW5zdGVhZCBvZiArMDAwMC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0taWdub3JlLWRhdGUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFtIC0taWdub3JlLWRhdGUgcGF0Y2gxICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIvXlwkL3EiID5oZWFkMSAmJgorCXNlZCAtbmUgIi9eYXV0aG9yIC9zLy4qPiAvL3AiIGhlYWQxID5hdCAmJgorCWdyZXAgIiswMDAwIiBhdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBpbnRvIGFuIHVuYm9ybiBicmFuY2gnICcKKwlnaXQgcmV2LXBhcnNlIGZpcnN0Xnt0cmVlfSA+ZXhwZWN0ZWQgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWZyIHN1YmRpciAmJgorCW1rZGlyIHN1YmRpciAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1udW1iZXJlZC1maWxlcyAtbyBzdWJkaXIgLTEgZmlyc3QgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgYW0gMQorCSkgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9ID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIG5ld2xpbmUgaW4gc3ViamVjdCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlzZWQgLWUgInMvc2Vjb25kL3NlY29uZCBcXFxuIGZvby8iIHBhdGNoMSA+cGF0Y2hubCAmJgorCWdpdCBhbSA8cGF0Y2hubCA+b3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAiXkFwcGx5aW5nOiBzZWNvbmQgXFxcbiBmb28kIiBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC1xIGlzIHF1aWV0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhbSAtcSA8cGF0Y2gxID5vdXRwdXQub3V0IDI+JjEgJiYKKwkhIHRlc3QgLXMgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBlbXB0eS1maWxlIGRvZXMgbm90IGluZmxvb3AnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdG91Y2ggZW1wdHktZmlsZSAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBlbXB0eS1maWxlIDI+YWN0dWFsICYmCisJZWNobyBQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4gPmV4cGVjdGVkICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxNTEtYW0tYWJvcnQuc2ggYi90L3Q0MTUxLWFtLWFib3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjExNzZiY2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTUxLWFtLWFib3J0LnNoCkBAIC0wLDAgKzEsNzUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhbSAtLWFib3J0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gYSBiIGMgZCBlIGYgZworCWRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlLTEgJiYKKwljcCBmaWxlLTEgZmlsZS0yICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFkZCBmaWxlLTEgZmlsZS0yICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZm9yIGkgaW4gMiAzIDQgNSA2CisJZG8KKwkJZWNobyAkaSA+PmZpbGUtMSAmJgorCQllY2hvICRpID5vdGhlcmZpbGUtJGkgJiYKKwkJZ2l0IGFkZCBvdGhlcmZpbGUtJGkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gJGkgfHwgYnJlYWsKKwlkb25lICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLW51bWJlcmVkIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBpbml0aWFsICYmCisJZWNobyBsb2NhbCBjaGFuZ2UgPmZpbGUtMi1leHBlY3QKKycKKworZm9yIHdpdGgzIGluICcnICcgLTMnCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFtJHdpdGgzIHN0b3BzIGF0IGEgcGF0Y2ggdGhhdCBkb2VzIG5vdCBhcHBseSIgJworCisJCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCQljcCBmaWxlLTItZXhwZWN0IGZpbGUtMiAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSR3aXRoMyAwMDBbMTI0NV0tKi5wYXRjaCAmJgorCQlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCQlmb3IgaSBpbiAzIDIgaW5pdGlhbAorCQlkbworCQkJZWNobyAkaQorCQlkb25lID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFtJHdpdGgzIC0tc2tpcCBjb250aW51ZSBhZnRlciBmYWlsZWQgYW0kd2l0aDMiICcKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtJHdpdGgzIC0tc2tpcCA+b3V0cHV0ICYmCisJCXRlc3RfaTE4bmdyZXAgIl5BcHBseWluZyIgb3V0cHV0ID5vdXRwdXQuYXBwbHlpbmcgJiYKKwkJdGVzdF9pMThuZ3JlcCAiXkFwcGx5aW5nOiA2JCIgb3V0cHV0LmFwcGx5aW5nICYmCisJCXRlc3RfaTE4bmNtcCBmaWxlLTItZXhwZWN0IGZpbGUtMiAmJgorCQl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9SUgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFtIC0tYWJvcnQgZ29lcyBiYWNrIGFmdGVyIGZhaWxlZCBhbSR3aXRoMyIgJworCQlnaXQgYW0gLS1hYm9ydCAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlIGluaXRpYWwgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfY21wIGZpbGUtMi1leHBlY3QgZmlsZS0yICYmCisJCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUQgJiYKKwkJdGVzdCAhIC1mIC5naXQvTUVSR0VfUlIKKwknCisKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1hYm9ydCB3aWxsIGtlZXAgdGhlIGxvY2FsIGNvbW1pdHMgaW50YWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDAwMDQtKi5wYXRjaCAmJgorCXRlc3RfY29tbWl0IHVucmVsYXRlZCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTUyLWFtLXN1YmplY3RzLnNoIGIvdC90NDE1Mi1hbS1zdWJqZWN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YzY4MjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDE1Mi1hbS1zdWJqZWN0cy5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzdWJqZWN0IHByZXNlcnZhdGlvbiB3aXRoIGZvcm1hdC1wYXRjaCB8IGFtJworLiAuL3Rlc3QtbGliLnNoCisKK21ha2VfcGF0Y2hlcygpIHsKKwl0eXBlPSQxCisJc3ViamVjdD0kMgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSBwYXRjaGVzIHdpdGggJHR5cGUgc3ViamVjdCIgJworCQlnaXQgcmVzZXQgLS1oYXJkIGJhc2VsaW5lICYmCisJCWVjaG8gJHR5cGUgPmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiJHN1YmplY3QiICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPiR0eXBlLnBhdGNoICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLWsgPiR0eXBlLWsucGF0Y2gKKwknCit9CisKK2NoZWNrX3N1YmplY3QoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlbGluZSAmJgorCWdpdCBhbSAkMiAkMS5wYXRjaCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhc2VsaW5lIGNvbW1pdCcgJworCXRlc3RfY29tbWl0IGJhc2VsaW5lIGZpbGUKKycKKworU0hPUlRfU1VCSkVDVD0nc2hvcnQgc3ViamVjdCcKK21ha2VfcGF0Y2hlcyBzaG9ydCAiJFNIT1JUX1NVQkpFQ1QiCisKK0xPTkdfU1VCSkVDVDE9J3RoaXMgaXMgYSBsb25nIHN1YmplY3QgdGhhdCBpcyB2aXJ0dWFsbHkgZ3VhcmFudGVlZCcKK0xPTkdfU1VCSkVDVDI9J3RvIHJlcXVpcmUgd3JhcHBpbmcgdmlhIGZvcm1hdC1wYXRjaCBpZiBpdCBpcyBhbGwnCitMT05HX1NVQkpFQ1QzPSdnb2luZyB0byBhcHBlYXIgb24gYSBzaW5nbGUgbGluZScKK0xPTkdfU1VCSkVDVD0iJExPTkdfU1VCSkVDVDEgJExPTkdfU1VCSkVDVDIgJExPTkdfU1VCSkVDVDMiCittYWtlX3BhdGNoZXMgbG9uZyAiJExPTkdfU1VCSkVDVCIKKworTVVMVElMSU5FX1NVQkpFQ1Q9IiRMT05HX1NVQkpFQ1QxCiskTE9OR19TVUJKRUNUMgorJExPTkdfU1VCSkVDVDMiCittYWtlX3BhdGNoZXMgbXVsdGlsaW5lICIkTVVMVElMSU5FX1NVQkpFQ1QiCisKK2VjaG8gIiRTSE9SVF9TVUJKRUNUIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydCBzdWJqZWN0IHByZXNlcnZlZCAoZm9ybWF0LXBhdGNoIHwgYW0pJyAnCisJY2hlY2tfc3ViamVjdCBzaG9ydAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgc3ViamVjdCBwcmVzZXJ2ZWQgKGZvcm1hdC1wYXRjaCAtayB8IGFtKScgJworCWNoZWNrX3N1YmplY3Qgc2hvcnQtaworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgc3ViamVjdCBwcmVzZXJ2ZWQgKGZvcm1hdC1wYXRjaCAtayB8IGFtIC1rKScgJworCWNoZWNrX3N1YmplY3Qgc2hvcnQtayAtaworJworCitlY2hvICIkTE9OR19TVUJKRUNUIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb25nIHN1YmplY3QgcHJlc2VydmVkIChmb3JtYXQtcGF0Y2ggfCBhbSknICcKKwljaGVja19zdWJqZWN0IGxvbmcKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgc3ViamVjdCBwcmVzZXJ2ZWQgKGZvcm1hdC1wYXRjaCAtayB8IGFtKScgJworCWNoZWNrX3N1YmplY3QgbG9uZy1rCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb25nIHN1YmplY3QgcHJlc2VydmVkIChmb3JtYXQtcGF0Y2ggLWsgfCBhbSAtayknICcKKwljaGVja19zdWJqZWN0IGxvbmctayAtaworJworCitlY2hvICIkTE9OR19TVUJKRUNUIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aWxpbmUgc3ViamVjdCB1bndyYXBwZWQgKGZvcm1hdC1wYXRjaCB8IGFtKScgJworCWNoZWNrX3N1YmplY3QgbXVsdGlsaW5lCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aWxpbmUgc3ViamVjdCB1bndyYXBwZWQgKGZvcm1hdC1wYXRjaCAtayB8IGFtKScgJworCWNoZWNrX3N1YmplY3QgbXVsdGlsaW5lLWsKKycKK2VjaG8gIiRNVUxUSUxJTkVfU1VCSkVDVCIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlsaW5lIHN1YmplY3QgcHJlc2VydmVkIChmb3JtYXQtcGF0Y2ggLWsgfCBhbSAtayknICcKKwljaGVja19zdWJqZWN0IG11bHRpbGluZS1rIC1rCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwMC1yZXJlcmUuc2ggYi90L3Q0MjAwLXJlcmVyZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZjY2NjZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwMC1yZXJlcmUuc2gKQEAgLTAsMCArMSwzOTQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVyZXJlCisKKyEgW2ZpZnRoXSB2ZXJzaW9uMQorICEgW2ZpcnN0XSBmaXJzdAorICAhIFtmb3VydGhdIHZlcnNpb24xCisgICAhIFttYXN0ZXJdIGluaXRpYWwKKyAgICAhIFtzZWNvbmRdIHByZWZlciBmaXJzdCBvdmVyIHNlY29uZAorICAgICAhIFt0aGlyZF0gdmVyc2lvbjIKKy0tLS0tLQorICAgICArIFt0aGlyZF0gdmVyc2lvbjIKKysgICAgICBbZmlmdGhdIHZlcnNpb24xCisgICsgICAgW2ZvdXJ0aF0gdmVyc2lvbjEKKysgKyAgKyBbdGhpcmReXSB0aGlyZAorICAgIC0gIFtzZWNvbmRdIHByZWZlciBmaXJzdCBvdmVyIHNlY29uZAorICsgICsgIFtmaXJzdF0gZmlyc3QKKyAgICArICBbc2Vjb25kXl0gc2Vjb25kCisrKysrKysgW21hc3Rlcl0gaW5pdGlhbAorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPmExIDw8LVxFT0YgJiYKKwlTb21lIHRpdGxlCisJPT09PT09PT09PQorCVdoZXRoZXIgJ1wnJ3RpcyBub2JsZXIgaW4gdGhlIG1pbmQgdG8gc3VmZmVyCisJVGhlIHNsaW5ncyBhbmQgYXJyb3dzIG9mIG91dHJhZ2VvdXMgZm9ydHVuZSwKKwlPciB0byB0YWtlIGFybXMgYWdhaW5zdCBhIHNlYSBvZiB0cm91YmxlcywKKwlBbmQgYnkgb3Bwb3NpbmcgZW5kIHRoZW0/IFRvIGRpZTogdG8gc2xlZXA7CisJTm8gbW9yZTsgYW5kIGJ5IGEgc2xlZXAgdG8gc2F5IHdlIGVuZAorCVRoZSBoZWFydC1hY2hlIGFuZCB0aGUgdGhvdXNhbmQgbmF0dXJhbCBzaG9ja3MKKwlUaGF0IGZsZXNoIGlzIGhlaXIgdG8sICdcJyd0aXMgYSBjb25zdW1tYXRpb24KKwlEZXZvdXRseSB0byBiZSB3aXNoJ1wnJ2QuCisJRU9GCisKKwlnaXQgYWRkIGExICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSBpbml0aWFsICYmCisKKwljYXQgPj5hMSA8PC1cRU9GICYmCisJU29tZSB0aXRsZQorCT09PT09PT09PT0KKwlUbyBkaWUsIHRvIHNsZWVwOworCVRvIHNsZWVwOiBwZXJjaGFuY2UgdG8gZHJlYW06IGF5LCB0aGVyZSdcJydzIHRoZSBydWI7CisJRm9yIGluIHRoYXQgc2xlZXAgb2YgZGVhdGggd2hhdCBkcmVhbXMgbWF5IGNvbWUKKwlXaGVuIHdlIGhhdmUgc2h1ZmZsZWQgb2ZmIHRoaXMgbW9ydGFsIGNvaWwsCisJTXVzdCBnaXZlIHVzIHBhdXNlOiB0aGVyZSdcJydzIHRoZSByZXNwZWN0CisJVGhhdCBtYWtlcyBjYWxhbWl0eSBvZiBzbyBsb25nIGxpZmU7CisJRU9GCisKKwlnaXQgY2hlY2tvdXQgLWIgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIGZpcnN0ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kIG1hc3RlciAmJgorCWdpdCBzaG93IGZpcnN0OmExIHwKKwlzZWQgLWUgInMvVG8gZGllLCB0L1RvIGRpZSEgVC8iIC1lICJzL1NvbWUgdGl0bGUvU29tZSBUaXRsZS8iID5hMSAmJgorCWVjaG8gIiogRU5EICoiID4+YTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RoaW5nIHJlY29yZGVkIHdpdGhvdXQgcmVyZXJlJyAnCisJcm0gLXJmIC5naXQvcnItY2FjaGUgJiYKKwlnaXQgY29uZmlnIHJlcmVyZS5lbmFibGVkIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpcnN0ICYmCisJISB0ZXN0IC1kIC5naXQvcnItY2FjaGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWN0aXZhdGUgcmVyZXJlLCBvbGQgc3R5bGUgKGNvbmZsaWN0aW5nIG1lcmdlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlta2RpciAuZ2l0L3JyLWNhY2hlICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCByZXJlcmUuZW5hYmxlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaXJzdCAmJgorCisJc2hhMT0kKCIkUEVSTF9QQVRIIiAtcGUgInMvCS4qLy8iIC5naXQvTUVSR0VfUlIpICYmCisJcnI9LmdpdC9yci1jYWNoZS8kc2hhMSAmJgorCWdyZXAgIl49PT09PT09XCQiICRyci9wcmVpbWFnZSAmJgorCSEgdGVzdCAtZiAkcnIvcG9zdGltYWdlICYmCisJISB0ZXN0IC1mICRyci90aGlzaW1hZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlLmVuYWJsZWQgd29ya3MsIHRvbycgJworCXJtIC1yZiAuZ2l0L3JyLWNhY2hlICYmCisJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaXJzdCAmJgorCisJc2hhMT0kKCIkUEVSTF9QQVRIIiAtcGUgInMvCS4qLy8iIC5naXQvTUVSR0VfUlIpICYmCisJcnI9LmdpdC9yci1jYWNoZS8kc2hhMSAmJgorCWdyZXAgXj09PT09PT0kICRyci9wcmVpbWFnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgcnItY2FjaGUnICcKKwlybSAtcmYgLmdpdC9yci1jYWNoZSAmJgorCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlyc3QgJiYKKwlzaGExPSQoIiRQRVJMX1BBVEgiIC1wZSAicy8JLiovLyIgLmdpdC9NRVJHRV9SUikgJiYKKwlycj0uZ2l0L3JyLWNhY2hlLyRzaGExCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JyLWNhY2hlIGxvb2tzIHNhbmUnICcKKwkjIG5vIHBvc3RpbWFnZSBvciB0aGlzaW1hZ2UgeWV0CisJISB0ZXN0IC1mICRyci9wb3N0aW1hZ2UgJiYKKwkhIHRlc3QgLWYgJHJyL3RoaXNpbWFnZSAmJgorCisJIyBwcmVpbWFnZSBoYXMgcmlnaHQgbnVtYmVyIG9mIGxpbmVzCisJY250PSQoc2VkIC1uZSAiL148PDw8PDw8LywvXj4+Pj4+Pj4vcCIgJHJyL3ByZWltYWdlIHwgd2MgLWwpICYmCisJZWNobyAkY250ICYmCisJdGVzdCAkY250ID0gMTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGRpZmYnICcKKwlnaXQgc2hvdyBmaXJzdDphMSA+YTEgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLS0tIGEvYTEKKwkrKysgYi9hMQorCUBAIC0xLDQgKzEsNCBAQAorCS1Tb21lIFRpdGxlCisJK1NvbWUgdGl0bGUKKwkgPT09PT09PT09PQorCSBXaGV0aGVyICdcJyd0aXMgbm9ibGVyIGluIHRoZSBtaW5kIHRvIHN1ZmZlcgorCSBUaGUgc2xpbmdzIGFuZCBhcnJvd3Mgb2Ygb3V0cmFnZW91cyBmb3J0dW5lLAorCUBAIC04LDIxICs4LDExIEBACisJIFRoZSBoZWFydC1hY2hlIGFuZCB0aGUgdGhvdXNhbmQgbmF0dXJhbCBzaG9ja3MKKwkgVGhhdCBmbGVzaCBpcyBoZWlyIHRvLCAnXCcndGlzIGEgY29uc3VtbWF0aW9uCisJIERldm91dGx5IHRvIGJlIHdpc2gnXCcnZC4KKwktPDw8PDw8PAorCS1Tb21lIFRpdGxlCisJLT09PT09PT09PT0KKwktVG8gZGllISBUbyBzbGVlcDsKKwktPT09PT09PQorCSBTb21lIHRpdGxlCisJID09PT09PT09PT0KKwkgVG8gZGllLCB0byBzbGVlcDsKKwktPj4+Pj4+PgorCSBUbyBzbGVlcDogcGVyY2hhbmNlIHRvIGRyZWFtOiBheSwgdGhlcmUnXCcncyB0aGUgcnViOworCSBGb3IgaW4gdGhhdCBzbGVlcCBvZiBkZWF0aCB3aGF0IGRyZWFtcyBtYXkgY29tZQorCSBXaGVuIHdlIGhhdmUgc2h1ZmZsZWQgb2ZmIHRoaXMgbW9ydGFsIGNvaWwsCisJIE11c3QgZ2l2ZSB1cyBwYXVzZTogdGhlcmUnXCcncyB0aGUgcmVzcGVjdAorCSBUaGF0IG1ha2VzIGNhbGFtaXR5IG9mIHNvIGxvbmcgbGlmZTsKKwktPDw8PDw8PAorCS09PT09PT09CisJLSogRU5EICoKKwktPj4+Pj4+PgorCUVPRgorCWdpdCByZXJlcmUgZGlmZiA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgc3RhdHVzJyAnCisJZWNobyBhMSA+ZXhwZWN0ICYmCisJZ2l0IHJlcmVyZSBzdGF0dXMgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlyc3QgcG9zdGltYWdlIHdpbnMnICcKKwlnaXQgc2hvdyBmaXJzdDphMSB8IHNlZCAicy9UbyBkaWU6IHQvVG8gZGllISBULyIgPmV4cGVjdCAmJgorCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSAicHJlZmVyIGZpcnN0IG92ZXIgc2Vjb25kIiAmJgorCXRlc3QgLWYgJHJyL3Bvc3RpbWFnZSAmJgorCisJb2xkbXRpbWVwb3N0PSQodGVzdC1jaG10aW1lIC12IC02MCAkcnIvcG9zdGltYWdlIHwgY3V0IC1mIDEpICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdGhpcmQgbWFzdGVyICYmCisJZ2l0IHNob3cgc2Vjb25kXjphMSB8IHNlZCAicy9UbyBkaWU6IHQvVG8gZGllISBULyIgPmExICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSB0aGlyZCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBmaXJzdCAmJgorCSMgcmVyZXJlIGtpY2tlZCBpbgorCSEgZ3JlcCAiXj09PT09PT1cJCIgYTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIHVwZGF0ZXMgcG9zdGltYWdlIHRpbWVzdGFtcCcgJworCW5ld210aW1lcG9zdD0kKHRlc3QtY2htdGltZSAtdiArMCAkcnIvcG9zdGltYWdlIHwgY3V0IC1mIDEpICYmCisJdGVzdCAkb2xkbXRpbWVwb3N0IC1sdCAkbmV3bXRpbWVwb3N0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSBjbGVhcicgJworCXJtICRyci9wb3N0aW1hZ2UgJiYKKwllY2hvICIkc2hhMQlhMSIgfCAiJFBFUkxfUEFUSCIgLXBlICJ5L1wwMTIvXDAwMC8iID4uZ2l0L01FUkdFX1JSICYmCisJZ2l0IHJlcmVyZSBjbGVhciAmJgorCSEgdGVzdCAtZCAkcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24gdGVzdHMnICcKKwlta2RpciAtcCAkcnIgJiYKKwllY2hvIEhlbGxvID4kcnIvcHJlaW1hZ2UgJiYKKwllY2hvIFdvcmxkID4kcnIvcG9zdGltYWdlICYmCisKKwlzaGEyPTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgJiYKKwlycjI9LmdpdC9yci1jYWNoZS8kc2hhMiAmJgorCW1rZGlyICRycjIgJiYKKwllY2hvIEhlbGxvID4kcnIyL3ByZWltYWdlICYmCisKKwlhbG1vc3RfMTVfZGF5c19hZ289JCgoNjAtMTUqODY0MDApKSAmJgorCWp1c3Rfb3Zlcl8xNV9kYXlzX2Fnbz0kKCgtMS0xNSo4NjQwMCkpICYmCisJYWxtb3N0XzYwX2RheXNfYWdvPSQoKDYwLTYwKjg2NDAwKSkgJiYKKwlqdXN0X292ZXJfNjBfZGF5c19hZ289JCgoLTEtNjAqODY0MDApKSAmJgorCisJdGVzdC1jaG10aW1lID0kanVzdF9vdmVyXzYwX2RheXNfYWdvICRyci9wcmVpbWFnZSAmJgorCXRlc3QtY2htdGltZSA9JGFsbW9zdF82MF9kYXlzX2FnbyAkcnIvcG9zdGltYWdlICYmCisJdGVzdC1jaG10aW1lID0kYWxtb3N0XzE1X2RheXNfYWdvICRycjIvcHJlaW1hZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgcHJlc2VydmVzIHlvdW5nIG9yIHJlY2VudGx5IHVzZWQgcmVjb3JkcycgJworCWdpdCByZXJlcmUgZ2MgJiYKKwl0ZXN0IC1mICRyci9wcmVpbWFnZSAmJgorCXRlc3QgLWYgJHJyMi9wcmVpbWFnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbGQgcmVjb3JkcyByZXN0IGluIHBlYWNlJyAnCisJdGVzdC1jaG10aW1lID0kanVzdF9vdmVyXzYwX2RheXNfYWdvICRyci9wb3N0aW1hZ2UgJiYKKwl0ZXN0LWNobXRpbWUgPSRqdXN0X292ZXJfMTVfZGF5c19hZ28gJHJyMi9wcmVpbWFnZSAmJgorCWdpdCByZXJlcmUgZ2MgJiYKKwkhIHRlc3QgLWYgJHJyL3ByZWltYWdlICYmCisJISB0ZXN0IC1mICRycjIvcHJlaW1hZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGZpbGUyIGFkZGVkIGRpZmZlcmVudGx5IGluIHR3byBicmFuY2hlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjaGVja291dCAtYiBmb3VydGggJiYKKwllY2hvIEhhbGxvID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24xICYmCisKKwlnaXQgY2hlY2tvdXQgdGhpcmQgJiYKKwllY2hvIEJlbGxvID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24yICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZm91cnRoICYmCisJZWNobyBDZWxsbyA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSByZXNvbHV0aW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdXRpb24gd2FzIHJlY29yZGVkIHByb3Blcmx5JyAnCisJZWNobyBDZWxsbyA+ZXhwZWN0ZWQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZpZnRoICYmCisKKwllY2hvIEhhbGxvID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24xICYmCisKKwlnaXQgY2hlY2tvdXQgdGhpcmQgJiYKKwllY2hvIEJlbGxvID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24yICYmCisJZ2l0IHRhZyB2ZXJzaW9uMiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpZnRoICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZTMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUuYXV0b3VwZGF0ZScgJworCWdpdCBjb25maWcgcmVyZXJlLmF1dG91cGRhdGUgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlmdGggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtLXJlcmVyZS1hdXRvdXBkYXRlJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCByZXJlcmUuYXV0b3VwZGF0ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1yZXJlcmUtYXV0b3VwZGF0ZSBmaWZ0aCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUnICcKKwloZWFkYmxvYj0kKGdpdCByZXYtcGFyc2UgdmVyc2lvbjI6ZmlsZTMpICYmCisJbWVyZ2VibG9iPSQoZ2l0IHJldi1wYXJzZSBmaWZ0aDpmaWxlMykgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCAkaGVhZGJsb2IgMglmaWxlMworCTEwMDY0NCAkbWVyZ2VibG9iIDMJZmlsZTMKKwlFT0YKKworCWdpdCBjb25maWcgcmVyZXJlLmF1dG91cGRhdGUgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSBmaWZ0aCAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhbiB1bnJlc29sdmVkIG1lcmdlJyAnCisJaGVhZGJsb2I9JChnaXQgcmV2LXBhcnNlIHZlcnNpb24yOmZpbGUzKSAmJgorCW1lcmdlYmxvYj0kKGdpdCByZXYtcGFyc2UgZmlmdGg6ZmlsZTMpICYmCisJY2F0ID5leHBlY3RlZC51bnJlc29sdmVkIDw8LUVPRiAmJgorCTEwMDY0NCAkaGVhZGJsb2IgMglmaWxlMworCTEwMDY0NCAkbWVyZ2VibG9iIDMJZmlsZTMKKwlFT0YKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgcmVyZXJlLmF1dG91cGRhdGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHZlcnNpb24yICYmCisJZmlmdGg9JChnaXQgcmV2LXBhcnNlIGZpZnRoKSAmJgorCWVjaG8gIiRmaWZ0aAkJYnJhbmNoICdmaWZ0aCcgb2YgLiIgfAorCWdpdCBmbXQtbWVyZ2UtbXNnID5tc2cgJiYKKwlhbmNlc3Rvcj0kKGdpdCBtZXJnZS1iYXNlIHZlcnNpb24yIGZpZnRoKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRhbmNlc3RvciIgLS0gSEVBRCBmaWZ0aCAmJgorCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMgZmlsZTMuY29uZmxpY3QgJiYKKworCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudW5yZXNvbHZlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcmVyZXJlJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCByZXJlcmUuYXV0b3VwZGF0ZSAmJgorCWdpdCBybSAtZnIgLS1jYWNoZWQgLiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxmYWlsZWRtZXJnZSAmJgorCWNwIGZpbGUzLmNvbmZsaWN0IGZpbGUzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLXEgJiYKKworCWdpdCByZXJlcmUgJiYKKwlnaXQgbHMtZmlsZXMgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnVucmVzb2x2ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGxpY2l0IHJlcmVyZSB3aXRoIGF1dG91cGRhdGUnICcKKwlnaXQgY29uZmlnIHJlcmVyZS5hdXRvdXBkYXRlIHRydWUgJiYKKwlnaXQgcm0gLWZyIC0tY2FjaGVkIC4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8ZmFpbGVkbWVyZ2UgJiYKKwljcCBmaWxlMy5jb25mbGljdCBmaWxlMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xICYmCisKKwlnaXQgcmVyZXJlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgb3ZlcnJpZGVzJyAnCisJZ2l0IGNvbmZpZyByZXJlcmUuYXV0b3VwZGF0ZSBmYWxzZSAmJgorCWdpdCBybSAtZnIgLS1jYWNoZWQgLiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxmYWlsZWRtZXJnZSAmJgorCWNwIGZpbGUzLmNvbmZsaWN0IGZpbGUzICYmCisJZ2l0IHJlcmVyZSAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsMSAmJgorCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwlnaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwlnaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsMiAmJgorCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwlnaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSAtLXJlcmVyZS1hdXRvdXBkYXRlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCXRlc3RfY21wIGV4cGVjdGVkLnVucmVzb2x2ZWQgYWN0dWFsMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnVucmVzb2x2ZWQgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgLS1uby1uby1yZXJlcmUtYXV0b3VwZGF0ZScgJworCWdpdCBybSAtZnIgLS1jYWNoZWQgLiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxmYWlsZWRtZXJnZSAmJgorCWNwIGZpbGUzLmNvbmZsaWN0IGZpbGUzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcmVyZSAtLW5vLW5vLXJlcmVyZS1hdXRvdXBkYXRlIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCBbVXVdc2FnZSBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgLWgnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVyZXJlIC1oID5oZWxwICYmCisJdGVzdF9pMThuZ3JlcCBbVXVdc2FnZSBoZWxwCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwMS1zaG9ydGxvZy5zaCBiL3QvdDQyMDEtc2hvcnRsb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjg3MmJhMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDEtc2hvcnRsb2cuc2gKQEAgLTAsMCArMSwxNTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc2hvcnRsb2cKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyAxID5hMSAmJgorCWdpdCBhZGQgYTEgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0PSQocHJpbnRmICIlc1xuIiAiVGVzdCIgIiIgfCBnaXQgY29tbWl0LXRyZWUgIiR0cmVlIikgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICIkY29tbWl0IiAmJgorCisJZWNobyAyID5hMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiVGhpcyBpcyBhIHZlcnksIHZlcnkgbG9uZyBmaXJzdCBsaW5lIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gc2VlIGlmIGl0IGlzIHdyYXBwZWQgY29ycmVjdGx5IiBhMSAmJgorCisJIyB0ZXN0IGlmIHRoZSB3cmFwcGluZyBpcyBzdGlsbCB2YWxpZAorCSMgd2hlbiByZXBsYWNpbmcgYWxsIGlzIGJ5IHRyZWJsZSBjbGVmcy4KKwllY2hvIDMgPmExICYmCisJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkKAorCQllY2hvICJUaGlzIGlzIGEgdmVyeSwgdmVyeSBsb25nIGZpcnN0IGxpbmUgZm9yIHRoZSBjb21taXQgbWVzc2FnZSB0byBzZWUgaWYgaXQgaXMgd3JhcHBlZCBjb3JyZWN0bHkiIHwKKwkJc2VkICJzL2kvMTIzNC9nIiB8CisJCXRyIDEyMzQgIlwzNjBcMjM1XDIwNFwyMzYiKSIgYTEgJiYKKworCSMgbm93IGZzY2sgdXAgdGhlIHV0ZjgKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2Rpbmcgbm9uLXV0Zi04ICYmCisJZWNobyA0ID5hMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiJCgKKwkJZWNobyAiVGhpcyBpcyBhIHZlcnksIHZlcnkgbG9uZyBmaXJzdCBsaW5lIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gc2VlIGlmIGl0IGlzIHdyYXBwZWQgY29ycmVjdGx5IiB8CisJCXNlZCAicy9pLzEyMzQvZyIgfAorCQl0ciAxMjM0ICJcMzcwXDIzNVwyMDRcMjM2IikiIGExICYmCisKKwllY2hvIDUgPmExICYmCisJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICJhCQkJCQkJCQkxMgkzNAk1Ngk3OCIgYTEgJiYKKworCWVjaG8gNiA+YTEgJiYKKwlnaXQgY29tbWl0IC0tcXVpZXQgLW0gIkNvbW1pdCBieSBzb21lb25lIGVsc2UiIFwKKwkJLS1hdXRob3I9IlNvbWVvbmUgZWxzZSA8bm90IW1lPiIgYTEgJiYKKworCWNhdCA+ZXhwZWN0LnRlbXBsYXRlIDw8LVxFT0YKKwlBIFUgVGhvciAoNSk6CisJICAgICAgU1VCSkVDVAorCSAgICAgIFNVQkpFQ1QKKwkgICAgICBTVUJKRUNUCisJICAgICAgU1VCSkVDVAorCSAgICAgIFNVQkpFQ1QKKworCVNvbWVvbmUgZWxzZSAoMSk6CisJICAgICAgU1VCSkVDVAorCisJRU9GCisnCisKK2Z1enooKSB7CisJZmlsZT0kMSAmJgorCXNlZCAiCisJCQlzLyRfeDQwL09CSkVDVF9OQU1FL2cKKwkJCXMvJF94MDUvT0JKSUQvZworCQkJcy9eIFx7Nlx9W0NUYV0uKi8gICAgICBTVUJKRUNUL2cKKwkJCXMvXiBcezhcfVteIF0uKi8gICAgICAgIENPTlRJTlVBVElPTi9nCisJCSIgPCIkZmlsZSIgPiIkZmlsZS5mdXp6eSIgJiYKKwlzZWQgIi9DT05USU5VQVRJT04vIGQiIDwiJGZpbGUuZnV6enkiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgb3V0cHV0IGZvcm1hdCcgJworCWdpdCBzaG9ydGxvZyBIRUFEID5sb2cgJiYKKwlmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCisJdGVzdF9jbXAgZXhwZWN0LnRlbXBsYXRlIGxvZy5wcmVkaWN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgZm9ybWF0JyAnCisJc2VkIHMvU1VCSkVDVC9PQkpFQ1RfTkFNRS8gZXhwZWN0LnRlbXBsYXRlID5leHBlY3QgJiYKKwlnaXQgc2hvcnRsb2cgLS1mb3JtYXQ9IiVIIiBIRUFEID5sb2cgJiYKKwlmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCisJdGVzdF9jbXAgZXhwZWN0IGxvZy5wcmVkaWN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFiYnJldicgJworCXNlZCBzL1NVQkpFQ1QvT0JKSUQvIGV4cGVjdC50ZW1wbGF0ZSA+ZXhwZWN0ICYmCisJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSIlaCIgLS1hYmJyZXY9NSBIRUFEID5sb2cgJiYKKwlmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCisJdGVzdF9jbXAgZXhwZWN0IGxvZy5wcmVkaWN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRwdXQgZnJvbSB1c2VyLWRlZmluZWQgZm9ybWF0IGlzIHJlLXdyYXBwZWQnICcKKwlzZWQgInMvU1VCSkVDVC90d28gbGluZXMvIiBleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgorCWdpdCBzaG9ydGxvZyAtLWZvcm1hdD0idHdvJW5saW5lcyIgSEVBRCA+bG9nICYmCisJZnV6eiBsb2cgPmxvZy5wcmVkaWN0YWJsZSAmJgorCXRlc3RfY21wIGV4cGVjdCBsb2cucHJlZGljdGFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgd3JhcHBpbmcnICcKKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKK0EgVSBUaG9yICg1KToKKyAgICAgIFRlc3QKKyAgICAgIFRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZmlyc3QgbGluZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZgorICAgICAgICAgaXQgaXMgd3JhcHBlZCBjb3JyZWN0bHkKKyAgICAgIFRo8J2EnnMg8J2EnnMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZvCdhJ5yc3QgbPCdhJ5uZSBmb3IgdGhlIGNvbW3wnYSedCBtZXNzYWdlIHRvIHNlZSDwnYSeZgorICAgICAgICAg8J2EnnQg8J2EnnMgd3JhcHBlZCBjb3JyZWN0bHkKKyAgICAgIFRo+J2EnnMg+J2EnnMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZvidhJ5yc3QgbPidhJ5uZSBmb3IgdGhlIGNvbW34nYSedAorICAgICAgICAgbWVzc2FnZSB0byBzZWUg+J2EnmYg+J2EnnQg+J2EnnMgd3JhcHBlZCBjb3JyZWN0bHkKKyAgICAgIGEJCQkJCQkJCTEyCTM0CisgICAgICAgICA1Ngk3OAorCitTb21lb25lIGVsc2UgKDEpOgorICAgICAgQ29tbWl0IGJ5IHNvbWVvbmUgZWxzZQorCitFT0YKKwlnaXQgc2hvcnRsb2cgLXcgSEVBRCA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyBmcm9tIG5vbi1naXQgZGlyZWN0b3J5JyAnCisJZ2l0IGxvZyBIRUFEID5sb2cgJiYKKwlHSVRfRElSPW5vbi1leGlzdGluZyBnaXQgc2hvcnRsb2cgLXcgPGxvZyA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCitpY29udmZyb211dGY4dG9pc284ODU5MSgpIHsKKwlwcmludGYgIiVzIiAiJCoiIHwgaWNvbnYgLWYgVVRGLTggLXQgSVNPODg1OS0xCit9CisKK0RTQ0hPPSJKw7Zow6RubsOrcyBcIkRzY2jDtlwiIFNjaGluZMOrbGluIgorRFNDSE9FPSIkRFNDSE8gPEpvaGFubmVzLlNjaGluZGVsaW5AZ214LmRlPiIKK01TRzE9InNldCBhMSB0byAyIGFuZCBzb21lIG5vbi1BU0NJSSBjaGFyczogw4TDn8O4IgorTVNHMj0ic2V0IGExIHRvIDMgYW5kIHNvbWUgbm9uLUFTQ0lJIGNoYXJzOiDDocOmw68iCitjYXQgPiBleHBlY3QgPDwgRU9GCiskRFNDSE8gKDIpOgorICAgICAgJE1TRzEKKyAgICAgICRNU0cyCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyBlbmNvZGluZycgJworCWdpdCByZXNldCAtLWhhcmQgIiRjb21taXQiICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwllY2hvIDIgPiBhMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiJE1TRzEiIC0tYXV0aG9yPSIkRFNDSE9FIiBhMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAiSVNPODg1OS0xIiAmJgorCWVjaG8gMyA+IGExICYmCisJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkKGljb252ZnJvbXV0Zjh0b2lzbzg4NTkxICIkTVNHMiIpIiBcCisJCS0tYXV0aG9yPSIkKGljb252ZnJvbXV0Zjh0b2lzbzg4NTkxICIkRFNDSE9FIikiIGExICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRH4yLi4gPiBvdXQgJiYKK3Rlc3RfY21wIGV4cGVjdCBvdXQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwMi1sb2cuc2ggYi90L3Q0MjAyLWxvZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MjRiYTUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwMi1sb2cuc2gKQEAgLTAsMCArMSw4MjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbG9nJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWVjaG8gaWNoaSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCisJZ2l0IG12IG9uZSBpY2hpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCisJY3AgaWNoaSBlaW4gJiYKKwlnaXQgYWRkIGVpbiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZm91cnRoICYmCisKKwlta2RpciBhICYmCisJZWNobyBuaSA+YS90d28gJiYKKwlnaXQgYWRkIGEvdHdvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBmaWZ0aCAgJiYKKworCWdpdCBybSBhL3R3byAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2l4dGgKKworJworCitwcmludGYgInNpeHRoXG5maWZ0aFxuZm91cnRoXG50aGlyZFxuc2Vjb25kXG5pbml0aWFsIiA+IGV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5JyAnCisKKwlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JXMiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitwcmludGYgInNpeHRoXG5maWZ0aFxuZm91cnRoXG50aGlyZFxuc2Vjb25kXG5pbml0aWFsXG4iID4gZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgKHRmb3JtYXQpJyAnCisKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IChzaG9ydGN1dCknICcKKworCWdpdCBsb2cgLS1wcmV0dHk9IiVzIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0JyAnCisKKwlnaXQgbG9nIC0tZm9ybWF0PSIlcyIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyBUaGlzIGlzCisgIHRoZSBzaXh0aAorICBjb21taXQuCisgVGhpcyBpcworICB0aGUgZmlmdGgKKyAgY29tbWl0LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCAldygxMiwxLDIpJyAnCisKKwlnaXQgbG9nIC0yIC0tZm9ybWF0PSIldygxMiwxLDIpVGhpcyBpcyB0aGUgJXMgY29tbWl0LiIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCAldygsMSwyKScgJworCisJZ2l0IGxvZyAtMiAtLWZvcm1hdD0iJXcoLDEsMilUaGlzIGlzJW50aGUgJXMlbmNvbW1pdC4iID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCis4MDRhNzg3IHNpeHRoCiszOTRlZjc4IGZpZnRoCis1ZDMxMTU5IGZvdXJ0aAorMmZiZThjMCB0aGlyZAorZjdkYWI4ZSBzZWNvbmQKKzNhMmZkY2IgaW5pdGlhbAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmVsaW5lJyAnCisKKwlnaXQgbG9nIC0tb25lbGluZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWx0ZXI9QScgJworCisJZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiVzIiAtLWRpZmYtZmlsdGVyPUEgSEVBRCA+IGFjdHVhbCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolcyIgLS1kaWZmLWZpbHRlciBBIEhFQUQgPiBhY3R1YWwtc2VwYXJhdGUgJiYKKwlwcmludGYgImZpZnRoXG5mb3VydGhcbnRoaXJkXG5pbml0aWFsIiA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLXNlcGFyYXRlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWx0ZXI9TScgJworCisJYWN0dWFsPSQoZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiVzIiAtLWRpZmYtZmlsdGVyPU0gSEVBRCkgJiYKKwlleHBlY3Q9JChlY2hvIHNlY29uZCkgJiYKKwl0ZXN0ICIkYWN0dWFsIiA9ICIkZXhwZWN0IiB8fCB7CisJCWVjaG8gT29wcworCQllY2hvICJBY3R1YWw6ICRhY3R1YWwiCisJCWZhbHNlCisJfQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsdGVyPUQnICcKKworCWFjdHVhbD0kKGdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolcyIgLS1kaWZmLWZpbHRlcj1EIEhFQUQpICYmCisJZXhwZWN0PSQoZWNobyBzaXh0aCA7IGVjaG8gdGhpcmQpICYmCisJdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIgfHwgeworCQllY2hvIE9vcHMKKwkJZWNobyAiQWN0dWFsOiAkYWN0dWFsIgorCQlmYWxzZQorCX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1SJyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC1NIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9UiBIRUFEKSAmJgorCWV4cGVjdD0kKGVjaG8gdGhpcmQpICYmCisJdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIgfHwgeworCQllY2hvIE9vcHMKKwkJZWNobyAiQWN0dWFsOiAkYWN0dWFsIgorCQlmYWxzZQorCX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1DJyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC1DIC1DIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9QyBIRUFEKSAmJgorCWV4cGVjdD0kKGVjaG8gZm91cnRoKSAmJgorCXRlc3QgIiRhY3R1YWwiID0gIiRleHBlY3QiIHx8IHsKKwkJZWNobyBPb3BzCisJCWVjaG8gIkFjdHVhbDogJGFjdHVhbCIKKwkJZmFsc2UKKwl9CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLWZvbGxvdycgJworCisJYWN0dWFsPSQoZ2l0IGxvZyAtLWZvbGxvdyAtLXByZXR0eT0iZm9ybWF0OiVzIiBpY2hpKSAmJgorCWV4cGVjdD0kKGVjaG8gdGhpcmQgOyBlY2hvIHNlY29uZCA7IGVjaG8gaW5pdGlhbCkgJiYKKwl0ZXN0ICIkYWN0dWFsIiA9ICIkZXhwZWN0IiB8fCB7CisJCWVjaG8gT29wcworCQllY2hvICJBY3R1YWw6ICRhY3R1YWwiCisJCWZhbHNlCisJfQorCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKzgwNGE3ODcgc2l4dGgKKzM5NGVmNzggZmlmdGgKKzVkMzExNTkgZm91cnRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby13YWxrIDxjb21taXRzPiBzb3J0cyBieSBjb21taXQgdGltZScgJworCWdpdCBsb2cgLS1uby13YWxrIC0tb25lbGluZSA1ZDMxMTU5IDgwNGE3ODcgMzk0ZWY3OCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vLXdhbGs9c29ydGVkIDxjb21taXRzPiBzb3J0cyBieSBjb21taXQgdGltZScgJworCWdpdCBsb2cgLS1uby13YWxrPXNvcnRlZCAtLW9uZWxpbmUgNWQzMTE1OSA4MDRhNzg3IDM5NGVmNzggPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKzVkMzExNTkgZm91cnRoCis4MDRhNzg3IHNpeHRoCiszOTRlZjc4IGZpZnRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby13YWxrPXVuc29ydGVkIDxjb21taXRzPiBsZWF2ZXMgbGlzdCBvZiBjb21taXRzIGFzIGdpdmVuJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGs9dW5zb3J0ZWQgLS1vbmVsaW5lIDVkMzExNTkgODA0YTc4NyAzOTRlZjc4ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc2hvdyA8Y29tbWl0cz4gbGVhdmVzIGxpc3Qgb2YgY29tbWl0cyBhcyBnaXZlbicgJworCWdpdCBzaG93IC0tb25lbGluZSAtcyA1ZDMxMTU5IDgwNGE3ODcgMzk0ZWY3OCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY2FzZSBzZW5zaXRpdml0eSB0ZXN0cycgJworCWVjaG8gY2FzZSA+b25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwJyAnCisJZWNobyBzZWNvbmQgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0tZ3JlcD1zZWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JlcCBvcHRpb24gcGFyc2luZycgJworCWVjaG8gc2Vjb25kID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWdyZXAgc2VjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1ncmVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtaSAtLWdyZXAnICcKKwllY2hvIFNlY29uZCA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLWkgLS1ncmVwPXNlYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwIC1pJyAnCisJZWNobyBTZWNvbmQgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0tZ3JlcD1zZWMgLWkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCisqIFNlY29uZAorKiBzaXh0aAorKiBmaWZ0aAorKiBmb3VydGgKKyogdGhpcmQKKyogc2Vjb25kCisqIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgbG9nIC0tZ3JhcGgnICcKKwlnaXQgbG9nIC0tZ3JhcGggLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgbWVyZ2UgaGlzdG9yeScgJworCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUR+NCAmJgorCXRlc3RfY29tbWl0IHNpZGUtMSAxIDEgJiYKKwl0ZXN0X2NvbW1pdCBzaWRlLTIgMiAyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBzaWRlCisnCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKKyogICBNZXJnZSBicmFuY2ggJ3NpZGUnCit8XAorfCAqIHNpZGUtMgorfCAqIHNpZGUtMQorKiB8IFNlY29uZAorKiB8IHNpeHRoCisqIHwgZmlmdGgKKyogfCBmb3VydGgKK3wvCisqIHRoaXJkCisqIHNlY29uZAorKiBpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBtZXJnZScgJworCWdpdCBsb2cgLS1ncmFwaCAtLWRhdGUtb3JkZXIgLS1wcmV0dHk9dGZvcm1hdDolcyB8CisJCXNlZCAicy8gKlwkLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKKyogICBjb21taXQgbWFzdGVyCit8XCAgTWVyZ2U6IEEgQgorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCit8IHwKK3wgKiBjb21taXQgc2lkZQorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBzaWRlLTIKK3wgfAorfCAqIGNvbW1pdCB0YWdzL3NpZGUtMQorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBzaWRlLTEKK3wgfAorKiB8IGNvbW1pdCBtYXN0ZXJ+MQorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBTZWNvbmQKK3wgfAorKiB8IGNvbW1pdCBtYXN0ZXJ+MgorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBzaXh0aAorfCB8CisqIHwgY29tbWl0IG1hc3Rlcn4zCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIGZpZnRoCit8IHwKKyogfCBjb21taXQgbWFzdGVyfjQKK3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICAgIGZvdXJ0aAorfAorKiBjb21taXQgdGFncy9zaWRlLTF+MQorfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICB0aGlyZAorfAorKiBjb21taXQgdGFncy9zaWRlLTF+MgorfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICBzZWNvbmQKK3wKKyogY29tbWl0IHRhZ3Mvc2lkZS0xfjMKKyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisgICAgICBpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBmdWxsIG91dHB1dCcgJworCWdpdCBsb2cgLS1ncmFwaCAtLWRhdGUtb3JkZXIgLS1wcmV0dHk9c2hvcnQgfAorCQlnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkgLS1zdGRpbiB8CisJCXNlZCAicy9NZXJnZTouKi9NZXJnZTogQSBCLztzLyAqXCQvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1vcmUgdGFuZ2xlZCBoaXN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRhbmdsZSBIRUFEfjYgJiYKKwl0ZXN0X2NvbW1pdCB0YW5nbGUtYSB0YW5nbGUtYSBhICYmCisJZ2l0IG1lcmdlIG1hc3Rlcn4zICYmCisJZ2l0IG1lcmdlIHNpZGV+MSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgdGFuZ2xlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYWNoICYmCisJdGVzdF9jb21taXQgcmVhY2ggJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG9jdG9wdXMtYSAmJgorCXRlc3RfY29tbWl0IG9jdG9wdXMtYSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb2N0b3B1cy1iICYmCisJdGVzdF9jb21taXQgb2N0b3B1cy1iICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHNldmVudGggJiYKKwlnaXQgbWVyZ2Ugb2N0b3B1cy1hIG9jdG9wdXMtYiAmJgorCWdpdCBtZXJnZSByZWFjaAorJworCitjYXQgPiBleHBlY3QgPDxcRU9GCisqICAgTWVyZ2UgdGFnICdyZWFjaCcKK3xcCit8IFwKK3wgIFwKKyotLiBcICAgTWVyZ2UgdGFncyAnb2N0b3B1cy1hJyBhbmQgJ29jdG9wdXMtYicKK3xcIFwgXAorKiB8IHwgfCBzZXZlbnRoCit8IHwgKiB8IG9jdG9wdXMtYgorfCB8LyAvCit8L3wgfAorfCAqIHwgb2N0b3B1cy1hCit8LyAvCit8ICogcmVhY2gKK3wvCisqICAgTWVyZ2UgYnJhbmNoICd0YW5nbGUnCit8XAorfCAqICAgTWVyZ2UgYnJhbmNoICdzaWRlJyAoZWFybHkgcGFydCkgaW50byB0YW5nbGUKK3wgfFwKK3wgKiBcICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIChlYXJseSBwYXJ0KSBpbnRvIHRhbmdsZQorfCB8XCBcCit8ICogfCB8IHRhbmdsZS1hCisqIHwgfCB8ICAgTWVyZ2UgYnJhbmNoICdzaWRlJworfFwgXCBcIFwKK3wgKiB8IHwgfCBzaWRlLTIKK3wgfCB8X3wvCit8IHwvfCB8Cit8ICogfCB8IHNpZGUtMQorKiB8IHwgfCBTZWNvbmQKKyogfCB8IHwgc2l4dGgKK3wgfF98LworfC98IHwKKyogfCB8IGZpZnRoCisqIHwgfCBmb3VydGgKK3wvIC8KKyogfCB0aGlyZAorfC8KKyogc2Vjb25kCisqIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG1lcmdlJyAnCisJZ2l0IGxvZyAtLWdyYXBoIC0tZGF0ZS1vcmRlciAtLXByZXR0eT10Zm9ybWF0OiVzIHwKKwkJc2VkICJzLyAqXCQvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nLmRlY29yYXRlIGNvbmZpZ3VyYXRpb24nICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBsb2cuZGVjb3JhdGUgJiYKKworCWdpdCBsb2cgLS1vbmVsaW5lID5leHBlY3Qubm9uZSAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGUgPmV4cGVjdC5zaG9ydCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9ZnVsbCA+ZXhwZWN0LmZ1bGwgJiYKKworCWVjaG8gIltsb2ddIGRlY29yYXRlIiA+Pi5naXQvY29uZmlnICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwgJiYKKworCWdpdCBjb25maWcgLS11bnNldC1hbGwgbG9nLmRlY29yYXRlICYmCisJZ2l0IGNvbmZpZyBsb2cuZGVjb3JhdGUgdHJ1ZSAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2hvcnQgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1kZWNvcmF0ZT1mdWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZnVsbCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9uZSBhY3R1YWwgJiYKKworCWdpdCBjb25maWcgLS11bnNldC1hbGwgbG9nLmRlY29yYXRlICYmCisJZ2l0IGNvbmZpZyBsb2cuZGVjb3JhdGUgbm8gJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5vbmUgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1kZWNvcmF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnNob3J0IGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9ZnVsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmZ1bGwgYWN0dWFsICYmCisKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGxvZy5kZWNvcmF0ZSAmJgorCWdpdCBjb25maWcgbG9nLmRlY29yYXRlIDEgJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnNob3J0IGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9ZnVsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmZ1bGwgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1kZWNvcmF0ZT1ubyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5vbmUgYWN0dWFsICYmCisKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGxvZy5kZWNvcmF0ZSAmJgorCWdpdCBjb25maWcgbG9nLmRlY29yYXRlIHNob3J0ICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLW5vLWRlY29yYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9uZSBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPWZ1bGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5mdWxsIGFjdHVhbCAmJgorCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBsb2cuZGVjb3JhdGUgJiYKKwlnaXQgY29uZmlnIGxvZy5kZWNvcmF0ZSBmdWxsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5mdWxsIGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tbm8tZGVjb3JhdGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5ub25lIGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwKKworCWdpdCBjb25maWcgLS11bnNldC1hbGwgbG9nLmRlY29yYXRlICYmCisJZ2l0IGxvZyAtLXByZXR0eT1yYXcgPmV4cGVjdC5yYXcgJiYKKwlnaXQgY29uZmlnIGxvZy5kZWNvcmF0ZSBmdWxsICYmCisJZ2l0IGxvZyAtLXByZXR0eT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5yYXcgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIGlzIGV4cGVjdGVkIGZvcm1hdCcgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gbG9nICYmCisJZ2l0IGxvZyAtZyAtLWFiYnJldi1jb21taXQgLS1wcmV0dHk9b25lbGluZSA+ZXhwZWN0ICYmCisJZ2l0IHJlZmxvZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGF0Y2hhbmdlZCBpcyBleHBlY3RlZCBmb3JtYXQnICcKKwlnaXQgbG9nIC0tbm8tbWVyZ2VzIC0tcmF3ID5leHBlY3QgJiYKKwlnaXQgd2hhdGNoYW5nZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nLmFiYnJldkNvbW1pdCBjb25maWd1cmF0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgbG9nLmFiYnJldkNvbW1pdCIgJiYKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgbG9nLmFiYnJldkNvbW1pdCAmJgorCisJZ2l0IGxvZyAtLWFiYnJldi1jb21taXQgPmV4cGVjdC5sb2cuYWJicmV2ICYmCisJZ2l0IGxvZyAtLW5vLWFiYnJldi1jb21taXQgPmV4cGVjdC5sb2cuZnVsbCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9cmF3ID5leHBlY3QubG9nLnJhdyAmJgorCWdpdCByZWZsb2cgLS1hYmJyZXYtY29tbWl0ID5leHBlY3QucmVmbG9nLmFiYnJldiAmJgorCWdpdCByZWZsb2cgLS1uby1hYmJyZXYtY29tbWl0ID5leHBlY3QucmVmbG9nLmZ1bGwgJiYKKwlnaXQgd2hhdGNoYW5nZWQgLS1hYmJyZXYtY29tbWl0ID5leHBlY3Qud2hhdGNoYW5nZWQuYWJicmV2ICYmCisJZ2l0IHdoYXRjaGFuZ2VkIC0tbm8tYWJicmV2LWNvbW1pdCA+ZXhwZWN0LndoYXRjaGFuZ2VkLmZ1bGwgJiYKKworCWdpdCBjb25maWcgbG9nLmFiYnJldkNvbW1pdCB0cnVlICYmCisKKwlnaXQgbG9nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubG9nLmFiYnJldiBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tbm8tYWJicmV2LWNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmxvZy5mdWxsIGFjdHVhbCAmJgorCisJZ2l0IGxvZyAtLXByZXR0eT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5sb2cucmF3IGFjdHVhbCAmJgorCisJZ2l0IHJlZmxvZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnJlZmxvZy5hYmJyZXYgYWN0dWFsICYmCisJZ2l0IHJlZmxvZyAtLW5vLWFiYnJldi1jb21taXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5yZWZsb2cuZnVsbCBhY3R1YWwgJiYKKworCWdpdCB3aGF0Y2hhbmdlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LndoYXRjaGFuZ2VkLmFiYnJldiBhY3R1YWwgJiYKKwlnaXQgd2hhdGNoYW5nZWQgLS1uby1hYmJyZXYtY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qud2hhdGNoYW5nZWQuZnVsbCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBhZGRlZCBwYXRoIHVuZGVyICItLWZvbGxvdyAtTSInICcKKwkjIFRoaXMgdGVzdHMgZm9yIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIHYxLjcuMi1yYzB+MTAzXjJ+MgorCXRlc3RfY3JlYXRlX3JlcG8gcmVncmVzc2lvbiAmJgorCSgKKwkJY2QgcmVncmVzc2lvbiAmJgorCQl0ZXN0X2NvbW1pdCBuZWVkcy1hbm90aGVyLWNvbW1pdCAmJgorCQl0ZXN0X2NvbW1pdCBmb28uYmFyICYmCisJCWdpdCBsb2cgLU0gLS1mb2xsb3cgLXAgZm9vLmJhci50ICYmCisJCWdpdCBsb2cgLU0gLS1mb2xsb3cgLS1zdGF0IGZvby5iYXIudCAmJgorCQlnaXQgbG9nIC1NIC0tZm9sbG93IC0tbmFtZS1vbmx5IGZvby5iYXIudAorCSkKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisqICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIE1lcmdlIEhFQURTIERFU0NSSVBUSU9OCit8IHwKK3wgKiBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIHJlYWNoCit8IHwgLS0tCit8IHwgIHJlYWNoLnQgfCAxICsKK3wgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwKK3wgfCBkaWZmIC0tZ2l0IGEvcmVhY2gudCBiL3JlYWNoLnQKK3wgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IGluZGV4IDAwMDAwMDAuLjEwYzk1OTEKK3wgfCAtLS0gL2Rldi9udWxsCit8IHwgKysrIGIvcmVhY2gudAorfCB8IEBAIC0wLDAgKzEgQEAKK3wgfCArcmVhY2gKK3wgfAorfCAgXAorKi0uIFwgICBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8XCBcIFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfCB8IHwKK3wgfCB8IHwgICAgIE1lcmdlIEhFQURTIERFU0NSSVBUSU9OCit8IHwgfCB8Cit8IHwgKiB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8LyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwKK3wgfCB8ICAgICAgIG9jdG9wdXMtYgorfCB8IHwgICAtLS0KK3wgfCB8ICAgIG9jdG9wdXMtYi50IHwgMSArCit8IHwgfCAgICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKK3wgfCB8Cit8IHwgfCAgIGRpZmYgLS1naXQgYS9vY3RvcHVzLWIudCBiL29jdG9wdXMtYi50Cit8IHwgfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgfCAgIGluZGV4IDAwMDAwMDAuLmQ1ZmNhZDAKK3wgfCB8ICAgLS0tIC9kZXYvbnVsbAorfCB8IHwgICArKysgYi9vY3RvcHVzLWIudAorfCB8IHwgICBAQCAtMCwwICsxIEBACit8IHwgfCAgICtvY3RvcHVzLWIKK3wgfCB8Cit8ICogfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHwvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwKK3wgfCAgICAgICBvY3RvcHVzLWEKK3wgfCAgIC0tLQorfCB8ICAgIG9jdG9wdXMtYS50IHwgMSArCit8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwKK3wgfCAgIGRpZmYgLS1naXQgYS9vY3RvcHVzLWEudCBiL29jdG9wdXMtYS50Cit8IHwgICBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8ICAgaW5kZXggMDAwMDAwMC4uMTFlZTAxNQorfCB8ICAgLS0tIC9kZXYvbnVsbAorfCB8ICAgKysrIGIvb2N0b3B1cy1hLnQKK3wgfCAgIEBAIC0wLDAgKzEgQEAKK3wgfCAgICtvY3RvcHVzLWEKK3wgfAorKiB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICAgIHNldmVudGgKK3wgICAtLS0KK3wgICAgc2V2ZW50aC50IHwgMSArCit8ICAgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorfAorfCAgIGRpZmYgLS1naXQgYS9zZXZlbnRoLnQgYi9zZXZlbnRoLnQKK3wgICBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCAgIGluZGV4IDAwMDAwMDAuLjk3NDRmZmMKK3wgICAtLS0gL2Rldi9udWxsCit8ICAgKysrIGIvc2V2ZW50aC50Cit8ICAgQEAgLTAsMCArMSBAQAorfCAgICtzZXZlbnRoCit8CisqICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIE1lcmdlIGJyYW5jaCAndGFuZ2xlJworfCB8Cit8ICogICBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHxcICBNZXJnZTogTUVSR0VfUEFSRU5UUworfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwKK3wgfCB8ICAgICBNZXJnZSBicmFuY2ggJ3NpZGUnIChlYXJseSBwYXJ0KSBpbnRvIHRhbmdsZQorfCB8IHwKK3wgKiB8ICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfCB8XCBcICBNZXJnZTogTUVSR0VfUEFSRU5UUworfCB8IHwgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwgfCB8Cit8IHwgfCB8ICAgICBNZXJnZSBicmFuY2ggJ21hc3RlcicgKGVhcmx5IHBhcnQpIGludG8gdGFuZ2xlCit8IHwgfCB8Cit8ICogfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfAorfCB8IHwgfCAgICAgdGFuZ2xlLWEKK3wgfCB8IHwgLS0tCit8IHwgfCB8ICB0YW5nbGUtYSB8IDEgKworfCB8IHwgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwgfCB8Cit8IHwgfCB8IGRpZmYgLS1naXQgYS90YW5nbGUtYSBiL3RhbmdsZS1hCit8IHwgfCB8IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgfCB8IGluZGV4IDAwMDAwMDAuLjc4OTgxOTIKK3wgfCB8IHwgLS0tIC9kZXYvbnVsbAorfCB8IHwgfCArKysgYi90YW5nbGUtYQorfCB8IHwgfCBAQCAtMCwwICsxIEBACit8IHwgfCB8ICthCit8IHwgfCB8CisqIHwgfCB8ICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfFwgXCBcIFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfCB8Cit8IHwgfCB8IHwgICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKK3wgfCB8IHwgfAorfCAqIHwgfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8X3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwvfCB8Cit8IHwgfCB8ICAgICAgIHNpZGUtMgorfCB8IHwgfCAgIC0tLQorfCB8IHwgfCAgICAyIHwgMSArCit8IHwgfCB8ICAgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorfCB8IHwgfAorfCB8IHwgfCAgIGRpZmYgLS1naXQgYS8yIGIvMgorfCB8IHwgfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgfCB8ICAgaW5kZXggMDAwMDAwMC4uMGNmYmYwOAorfCB8IHwgfCAgIC0tLSAvZGV2L251bGwKK3wgfCB8IHwgICArKysgYi8yCit8IHwgfCB8ICAgQEAgLTAsMCArMSBAQAorfCB8IHwgfCAgICsyCit8IHwgfCB8Cit8ICogfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfAorfCB8IHwgfCAgICAgc2lkZS0xCit8IHwgfCB8IC0tLQorfCB8IHwgfCAgMSB8IDEgKworfCB8IHwgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwgfCB8Cit8IHwgfCB8IGRpZmYgLS1naXQgYS8xIGIvMQorfCB8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgfCBpbmRleCAwMDAwMDAwLi5kMDA0OTFmCit8IHwgfCB8IC0tLSAvZGV2L251bGwKK3wgfCB8IHwgKysrIGIvMQorfCB8IHwgfCBAQCAtMCwwICsxIEBACit8IHwgfCB8ICsxCit8IHwgfCB8CisqIHwgfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfAorfCB8IHwgfCAgICAgU2Vjb25kCit8IHwgfCB8IC0tLQorfCB8IHwgfCAgb25lIHwgMSArCit8IHwgfCB8ICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKK3wgfCB8IHwKK3wgfCB8IHwgZGlmZiAtLWdpdCBhL29uZSBiL29uZQorfCB8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgfCBpbmRleCAwMDAwMDAwLi45YTMzMzgzCit8IHwgfCB8IC0tLSAvZGV2L251bGwKK3wgfCB8IHwgKysrIGIvb25lCit8IHwgfCB8IEBAIC0wLDAgKzEgQEAKK3wgfCB8IHwgK2Nhc2UKK3wgfCB8IHwKKyogfCB8IHwgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfCB8X3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8L3wgfAorfCB8IHwgICAgICAgc2l4dGgKK3wgfCB8ICAgLS0tCit8IHwgfCAgICBhL3R3byB8IDEgLQorfCB8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKK3wgfCB8Cit8IHwgfCAgIGRpZmYgLS1naXQgYS9hL3R3byBiL2EvdHdvCit8IHwgfCAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgICBpbmRleCA5MjQ1YWY1Li4wMDAwMDAwCit8IHwgfCAgIC0tLSBhL2EvdHdvCit8IHwgfCAgICsrKyAvZGV2L251bGwKK3wgfCB8ICAgQEAgLTEgKzAsMCBAQAorfCB8IHwgICAtbmkKK3wgfCB8CisqIHwgfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHwgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwgfAorfCB8IHwgICAgIGZpZnRoCit8IHwgfCAtLS0KK3wgfCB8ICBhL3R3byB8IDEgKworfCB8IHwgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorfCB8IHwKK3wgfCB8IGRpZmYgLS1naXQgYS9hL3R3byBiL2EvdHdvCit8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgaW5kZXggMDAwMDAwMC4uOTI0NWFmNQorfCB8IHwgLS0tIC9kZXYvbnVsbAorfCB8IHwgKysrIGIvYS90d28KK3wgfCB8IEBAIC0wLDAgKzEgQEAKK3wgfCB8ICtuaQorfCB8IHwKKyogfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wvIC8gIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICAgIGZvdXJ0aAorfCB8ICAgLS0tCit8IHwgICAgZWluIHwgMSArCit8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwKK3wgfCAgIGRpZmYgLS1naXQgYS9laW4gYi9laW4KK3wgfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgICBpbmRleCAwMDAwMDAwLi45ZDdlNjlmCit8IHwgICAtLS0gL2Rldi9udWxsCit8IHwgICArKysgYi9laW4KK3wgfCAgIEBAIC0wLDAgKzEgQEAKK3wgfCAgICtpY2hpCit8IHwKKyogfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8LyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfAorfCAgICAgICB0aGlyZAorfCAgIC0tLQorfCAgICBpY2hpIHwgMSArCit8ICAgIG9uZSAgfCAxIC0KK3wgICAgMiBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorfAorfCAgIGRpZmYgLS1naXQgYS9pY2hpIGIvaWNoaQorfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8ICAgaW5kZXggMDAwMDAwMC4uOWQ3ZTY5ZgorfCAgIC0tLSAvZGV2L251bGwKK3wgICArKysgYi9pY2hpCit8ICAgQEAgLTAsMCArMSBAQAorfCAgICtpY2hpCit8ICAgZGlmZiAtLWdpdCBhL29uZSBiL29uZQorfCAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorfCAgIGluZGV4IDlkN2U2OWYuLjAwMDAwMDAKK3wgICAtLS0gYS9vbmUKK3wgICArKysgL2Rldi9udWxsCit8ICAgQEAgLTEgKzAsMCBAQAorfCAgIC1pY2hpCit8CisqIGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfAorfCAgICAgc2Vjb25kCit8IC0tLQorfCAgb25lIHwgMiArLQorfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCit8Cit8IGRpZmYgLS1naXQgYS9vbmUgYi9vbmUKK3wgaW5kZXggNTYyNmFiZi4uOWQ3ZTY5ZiAxMDA2NDQKK3wgLS0tIGEvb25lCit8ICsrKyBiL29uZQorfCBAQCAtMSArMSBAQAorfCAtb25lCit8ICtpY2hpCit8CisqIGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisgICAgICBpbml0aWFsCisgIC0tLQorICAgb25lIHwgMSArCisgICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworICBkaWZmIC0tZ2l0IGEvb25lIGIvb25lCisgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0CisgIGluZGV4IDAwMDAwMDAuLjU2MjZhYmYKKyAgLS0tIC9kZXYvbnVsbAorICArKysgYi9vbmUKKyAgQEAgLTAsMCArMSBAQAorICArb25lCitFT0YKKworc2FuaXRpemVfb3V0cHV0ICgpIHsKKwlzZWQgLWUgJ3MvICokLy8nIFwKKwkgICAgLWUgJ3MvY29tbWl0IFswLTlhLWZdKiQvY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRS8nIFwKKwkgICAgLWUgJ3MvTWVyZ2U6IFsgMC05YS1mXSokL01lcmdlOiBNRVJHRV9QQVJFTlRTLycgXAorCSAgICAtZSAncy9NZXJnZSB0YWcuKi9NZXJnZSBIRUFEUyBERVNDUklQVElPTi8nIFwKKwkgICAgLWUgJ3MvTWVyZ2UgY29tbWl0LiovTWVyZ2UgSEVBRFMgREVTQ1JJUFRJT04vJyBcCisJICAgIC1lICdzLywgMCBkZWxldGlvbnMoLSkvLycgXAorCSAgICAtZSAncy8sIDAgaW5zZXJ0aW9ucygrKS8vJyBcCisJICAgIC1lICdzLyAxIGZpbGVzIGNoYW5nZWQsIC8gMSBmaWxlIGNoYW5nZWQsIC8nIFwKKwkgICAgLWUgJ3MvLCAxIGRlbGV0aW9ucygtKS8sIDEgZGVsZXRpb24oLSkvJyBcCisJICAgIC1lICdzLywgMSBpbnNlcnRpb25zKCspLywgMSBpbnNlcnRpb24oKykvJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIGRpZmYgYW5kIHN0YXRzJyAnCisJZ2l0IGxvZyAtLWdyYXBoIC0tcHJldHR5PXNob3J0IC0tc3RhdCAtcCA+YWN0dWFsICYmCisJc2FuaXRpemVfb3V0cHV0ID5hY3R1YWwuc2FuaXRpemVkIDxhY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbC5zYW5pdGl6ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG90ZG90IGlzIGEgcGFyZW50IGRpcmVjdG9yeScgJworCW1rZGlyIC1wIGEvYiAmJgorCSggZWNobyBzaXh0aCAmJiBlY2hvIGZpZnRoICkgPmV4cGVjdCAmJgorCSggY2QgYS9iICYmIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLi4gKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDMtbWFpbG1hcC5zaCBiL3QvdDQyMDMtbWFpbG1hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZjE4MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwMy1tYWlsbWFwLnNoCkBAIC0wLDAgKzEsMjU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nLm1haWxtYXAgY29uZmlndXJhdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitmdXp6X2JsYW1lICgpIHsKKwlzZWQgIgorCQlzLyRfeDA1WzAtOWEtZl1bMC05YS1mXVswLTlhLWZdL09CSklEL2cKKwkJcy8kX3gwNVswLTlhLWZdWzAtOWEtZl0vT0JKSS9nCisJCXMvWy0wLTldXHsxMFx9IFs6MC05XVx7OFx9IFstK11bMC05XVx7NFx9L0RBVEUvZworCSIgIiRAIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIHR3byA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAibmljazEgPGJ1Z3NAY29tcGFueS54eD4iIC1tIHNlY29uZAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0EgVSBUaG9yICgxKToKKyAgICAgIGluaXRpYWwKKworbmljazEgKDEpOgorICAgICAgc2Vjb25kCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdObyBtYWlsbWFwJyAnCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitSZXBvIEd1eSAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCAubWFpbG1hcCcgJworCWVjaG8gIlJlcG8gR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+IC5tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBVc2luZyBhIG1haWxtYXAgZmlsZSBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgcmVwbyBoZXJlLCBidXQKKyMgY291bGQganVzdCBhcyB3ZWxsIGhhdmUgYmVlbiBhIGZpbGUgb3V0c2lkZSBvZiB0aGUgcmVwb3NpdG9yeQorY2F0ID5leHBlY3QgPDxcRU9GCitJbnRlcm5hbCBHdXkgKDEpOgorICAgICAgc2Vjb25kCisKK1JlcG8gR3V5ICgxKToKKyAgICAgIGluaXRpYWwKKworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmZpbGUgc2V0JyAnCisJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgorCWVjaG8gIkludGVybmFsIEd1eSA8YnVnc0Bjb21wYW55Lnh4PiIgPiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZ2l0IGNvbmZpZyBtYWlsbWFwLmZpbGUgaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorRXh0ZXJuYWwgR3V5ICgxKToKKyAgICAgIGluaXRpYWwKKworSW50ZXJuYWwgR3V5ICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxtYXAuZmlsZSBvdmVycmlkZScgJworCWVjaG8gIkV4dGVybmFsIEd1eSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBjb25maWcgbWFpbG1hcC5maWxlIGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK1JlcG8gR3V5ICgxKToKKyAgICAgIGluaXRpYWwKKworbmljazEgKDEpOgorICAgICAgc2Vjb25kCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmZpbGUgbm9uLWV4aXN0ZW50JyAnCisJcm0gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCXJtZGlyIGludGVybmFsX21haWxtYXAgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0ludGVybmFsIEd1eSAoMSk6CisgICAgICBzZWNvbmQKKworUmVwbyBHdXkgKDEpOgorICAgICAgaW5pdGlhbAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmFtZSBlbnRyeSBhZnRlciBlbWFpbCBlbnRyeScgJworCW1rZGlyIC1wIGludGVybmFsX21haWxtYXAgJiYKKwllY2hvICI8YnVnc0Bjb21wYW55Lnh5PiA8YnVnc0Bjb21wYW55Lnh4PiIgPmludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJJbnRlcm5hbCBHdXkgPGJ1Z3NAY29tcGFueS54eD4iID4+aW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorSW50ZXJuYWwgR3V5ICgxKToKKyAgICAgIHNlY29uZAorCitSZXBvIEd1eSAoMSk6CisgICAgICBpbml0aWFsCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYW1lIGVudHJ5IGFmdGVyIGVtYWlsIGVudHJ5LCBjYXNlLWluc2Vuc2l0aXZlJyAnCisJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgorCWVjaG8gIjxidWdzQGNvbXBhbnkueHk+IDxidWdzQGNvbXBhbnkueHg+IiA+aW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIkludGVybmFsIEd1eSA8QlVHU0BDb21wYW55Lnh4PiIgPj5pbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitBIFUgVGhvciAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05vIG1haWxtYXAgZmlsZXMsIGJ1dCBjb25maWd1cmVkJyAnCisJcm0gLWYgLm1haWxtYXAgaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgRXh0ZW5kZWQgbWFpbG1hcCBjb25maWd1cmF0aW9ucyBzaG91bGQgZ2l2ZSB1cyB0aGUgZm9sbG93aW5nIG91dHB1dCBmb3Igc2hvcnRsb2cKK2NhdCA+ZXhwZWN0IDw8XEVPRgorQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gKDEpOgorICAgICAgaW5pdGlhbAorCitDVE8gPGN0b0Bjb21wYW55Lnh4PiAoMSk6CisgICAgICBzZXZlbnRoCisKK090aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PiAoMik6CisgICAgICB0aGlyZAorICAgICAgZm91cnRoCisKK1NhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+ICgyKToKKyAgICAgIGZpZnRoCisgICAgICBzaXh0aAorCitTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4gKDEpOgorICAgICAgc2Vjb25kCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTaG9ydGxvZyBvdXRwdXQgKGNvbXBsZXggbWFwcGluZyknICcKKwllY2hvIHRocmVlID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PiIgLW0gdGhpcmQgJiYKKworCWVjaG8gZm91ciA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAibmljazIgPG5pY2syQGNvbXBhbnkueHg+IiAtbSBmb3VydGggJiYKKworCWVjaG8gZml2ZSA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAic2FudGEgPG1lQGNvbXBhbnkueHg+IiAtbSBmaWZ0aCAmJgorCisJZWNobyBzaXggPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgImNsYXVzIDxtZUBjb21wYW55Lnh4PiIgLW0gc2l4dGggJiYKKworCWVjaG8gc2V2ZW4gPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIkNUTyA8Y3RvQGNvb21wYW55Lnh4PiIgLW0gc2V2ZW50aCAmJgorCisJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgorCWVjaG8gIkNvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiIgPiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiPGN0b0Bjb21wYW55Lnh4PiAgICAgICAgICAgICAgICAgICAgICAgPGN0b0Bjb29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4gICAgICAgICBuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIk90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PiAgIG5pY2syIDxidWdzQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+ICAgICAgICAgPG5pY2syQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4gPG1lQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4gPG1lQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisKKwlnaXQgc2hvcnRsb2cgLWUgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKKyMgZ2l0IGxvZyB3aXRoIC0tcHJldHR5IGZvcm1hdCB3aGljaCB1c2VzIHRoZSBuYW1lIGFuZCBlbWFpbCBtYWlsbWFwIHBsYWNlbWFya2VycworY2F0ID5leHBlY3QgPDxcRU9GCitBdXRob3IgQ1RPIDxjdG9AY29vbXBhbnkueHg+IG1hcHMgdG8gQ1RPIDxjdG9AY29tcGFueS54eD4KK0NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisKK0F1dGhvciBjbGF1cyA8bWVAY29tcGFueS54eD4gbWFwcyB0byBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKworQXV0aG9yIHNhbnRhIDxtZUBjb21wYW55Lnh4PiBtYXBzIHRvIFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CitDb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCitBdXRob3IgbmljazIgPG5pY2syQGNvbXBhbnkueHg+IG1hcHMgdG8gT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CitDb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCitBdXRob3IgbmljazIgPGJ1Z3NAY29tcGFueS54eD4gbWFwcyB0byBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KK0NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisKK0F1dGhvciBuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiBtYXBzIHRvIFNvbWUgRHVkZSA8c29tZUBkdWRlLnh4PgorQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKworQXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IG1hcHMgdG8gQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTG9nIG91dHB1dCAoY29tcGxleCBtYXBwaW5nKScgJworCWdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiJBdXRob3IgJWFuIDwlYWU+IG1hcHMgdG8gJWFOIDwlYUU+JW5Db21taXR0ZXIgJWNuIDwlY2U+IG1hcHMgdG8gJWNOIDwlY0U+JW4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgZ2l0IGJsYW1lCitjYXQgPmV4cGVjdCA8PFxFT0YKK15PQkpJIChBIFUgVGhvciAgICAgREFURSAxKSBvbmUKK09CSklEIChTb21lIER1ZGUgICAgREFURSAyKSB0d28KK09CSklEIChPdGhlciBBdXRob3IgREFURSAzKSB0aHJlZQorT0JKSUQgKE90aGVyIEF1dGhvciBEQVRFIDQpIGZvdXIKK09CSklEIChTYW50YSBDbGF1cyAgREFURSA1KSBmaXZlCitPQkpJRCAoU2FudGEgQ2xhdXMgIERBVEUgNikgc2l4CitPQkpJRCAoQ1RPICAgICAgICAgIERBVEUgNykgc2V2ZW4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnQmxhbWUgb3V0cHV0IChjb21wbGV4IG1hcHBpbmcpJyAnCisJZ2l0IGJsYW1lIG9uZSA+YWN0dWFsICYmCisJZnV6el9ibGFtZSBhY3R1YWwgPmFjdHVhbC5mdXp6ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5mdXp6CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwNC1wYXRjaC1pZC5zaCBiL3QvdDQyMDQtcGF0Y2gtaWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDJjOTMwZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDQtcGF0Y2gtaWQuc2gKQEAgLTAsMCArMSwxMDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcGF0Y2gtaWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXRpYWwgZm9vIGEgJiYKKwl0ZXN0X2NvbW1pdCBmaXJzdCBmb28gYiAmJgorCWdpdCBjaGVja291dCAtYiBzYW1lIEhFQUReICYmCisJdGVzdF9jb21taXQgc2FtZS1tc2cgZm9vIGIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbm90c2FtZSBIRUFEXiAmJgorCXRlc3RfY29tbWl0IG5vdHNhbWUtbXNnIGZvbyBjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIG91dHB1dCBpcyB3ZWxsLWZvcm1lZCcgJworCWdpdCBsb2cgLXAgLTEgfCBnaXQgcGF0Y2gtaWQgPiBvdXRwdXQgJiYKKwlncmVwICJeW2EtZjAtOV1cezQwXH0gJChnaXQgcmV2LXBhcnNlIEhFQUQpJCIgb3V0cHV0CisnCisKK2NhbGNfcGF0Y2hfaWQgKCkgeworCWdpdCBwYXRjaC1pZCB8CisJCXNlZCAicyMgLiojIyIgPiBwYXRjaC1pZF8iJDEiCit9CisKK2dldF9wYXRjaF9pZCAoKSB7CisJZ2l0IGxvZyAtcCAtMSAiJDEiIHwgZ2l0IHBhdGNoLWlkIHwKKwkJc2VkICJzIyAuKiMjIiA+IHBhdGNoLWlkXyIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgZGV0ZWN0cyBlcXVhbGl0eScgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnZXRfcGF0Y2hfaWQgc2FtZSAmJgorCXRlc3RfY21wIHBhdGNoLWlkX21hc3RlciBwYXRjaC1pZF9zYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIGRldGVjdHMgaW5lcXVhbGl0eScgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnZXRfcGF0Y2hfaWQgbm90c2FtZSAmJgorCSEgdGVzdF9jbXAgcGF0Y2gtaWRfbWFzdGVyIHBhdGNoLWlkX25vdHNhbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgc3VwcG9ydHMgZ2l0LWZvcm1hdC1wYXRjaCBvdXRwdXQnICcKKwlnZXRfcGF0Y2hfaWQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IHNhbWUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IHwgY2FsY19wYXRjaF9pZCBzYW1lICYmCisJdGVzdF9jbXAgcGF0Y2gtaWRfbWFzdGVyIHBhdGNoLWlkX3NhbWUgJiYKKwlzZXQgYGdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgfCBnaXQgcGF0Y2gtaWRgICYmCisJdGVzdCAiJDIiID0gYGdpdCByZXYtcGFyc2UgSEVBRGAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZSBpcyBpcnJlbGV2YW50IGluIGZvb3RlcicgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgc2FtZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgfCBzZWQgInMvIFwkLy8iIHwgY2FsY19wYXRjaF9pZCBzYW1lICYmCisJdGVzdF9jbXAgcGF0Y2gtaWRfbWFzdGVyIHBhdGNoLWlkX3NhbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgc3VwcG9ydHMgZ2l0LWZvcm1hdC1wYXRjaCBNSU1FIG91dHB1dCcgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgc2FtZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1hdHRhY2ggLS1zdGRvdXQgfCBjYWxjX3BhdGNoX2lkIHNhbWUgJiYKKwl0ZXN0X2NtcCBwYXRjaC1pZF9tYXN0ZXIgcGF0Y2gtaWRfc2FtZQorJworCitjYXQgPm5vbmwgPDxcRU9GCitkaWZmIC0tZ2l0IGkvYSB3L2EKK2luZGV4IGU2OWRlMjkuLjJlNjVlZmUgMTAwNjQ0CistLS0gaS9hCisrKysgdy9hCitAQCAtMCwwICsxIEBACisrYQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGkvYiB3L2IKK2luZGV4IGU2OWRlMjkuLjYxNzgwNzkgMTAwNjQ0CistLS0gaS9iCisrKysgdy9iCitAQCAtMCwwICsxIEBACisrYgorRU9GCisKK2NhdCA+d2l0aG5sIDw8XEVPRgorZGlmZiAtLWdpdCBpL2Egdy9hCitpbmRleCBlNjlkZTI5Li43ODk4MTkyIDEwMDY0NAorLS0tIGkvYQorKysrIHcvYQorQEAgLTAsMCArMSBAQAorK2EKK2RpZmYgLS1naXQgaS9iIHcvYgoraW5kZXggZTY5ZGUyOS4uNjE3ODA3OSAxMDA2NDQKKy0tLSBpL2IKKysrKyB3L2IKK0BAIC0wLDAgKzEgQEAKKytiCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgaGFuZGxlcyBuby1ubC1hdC1lb2YgbWFya2VycycgJworCWNhdCBub25sIHwgY2FsY19wYXRjaF9pZCBub25sICYmCisJY2F0IHdpdGhubCB8IGNhbGNfcGF0Y2hfaWQgd2l0aG5sICYmCisJdGVzdF9jbXAgcGF0Y2gtaWRfbm9ubCBwYXRjaC1pZF93aXRobmwKKycKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2ggYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYzQ1ZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2gKQEAgLTAsMCArMSwxMDIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAsIFdpbGwgUGFsbWVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcHJldHR5IGZvcm1hdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG9zJyAnCisJPmZvbyAmJgorCT5iYXIgJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGJhciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgYnVpbHRpbiBmb3JtYXQnICcKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyBwcmV0dHkudGVzdC1hbGlhcyBvbmVsaW5lICYmCisJZ2l0IGxvZyAtLXByZXR0eT10ZXN0LWFsaWFzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgbWFza2luZyBidWlsdGluIGZvcm1hdCcgJworCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIHByZXR0eS5vbmVsaW5lICIlSCIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyB1c2VyLWRlZmluZWQgZm9ybWF0JyAnCisJZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiVoIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWFsaWFzICJmb3JtYXQ6JWgiICYmCisJZ2l0IGxvZyAtLXByZXR0eT10ZXN0LWFsaWFzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgdXNlci1kZWZpbmVkIHRmb3JtYXQnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWFsaWFzICJ0Zm9ybWF0OiVoIiAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGVzdC1hbGlhcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIG5vbi1leGlzdGVudCBmb3JtYXQnICcKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWFsaWFzIGZvcm1hdC10aGF0LXdpbGwtbmV2ZXItZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0tcHJldHR5PXRlc3QtYWxpYXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgb2YgYW4gYWxpYXMnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWZvbyAidGZvcm1hdDolaCIgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWJhciB0ZXN0LWZvbyAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGVzdC1iYXIgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgbWFza2luZyBhbiBhbGlhcycgJworCWdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiJUd28gJUgiID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgcHJldHR5LmR1cGxpY2F0ZSAiZm9ybWF0Ok9uZSAlSCIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHByZXR0eS5kdXBsaWNhdGUgImZvcm1hdDpUd28gJUgiICYmCisJZ2l0IGxvZyAtLXByZXR0eT1kdXBsaWNhdGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyBsb29wJyAnCisJZ2l0IGNvbmZpZyBwcmV0dHkudGVzdC1mb28gdGVzdC1iYXIgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWJhciB0ZXN0LWZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLS1wcmV0dHk9dGVzdC1mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIHNlcGFyYXRpb24nICcKKwlwcmludGYgImFkZCBiYXJcMGluaXRpYWwiID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLXogLS1wcmV0dHk9ImZvcm1hdDolcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgdGVybWluYXRpb24nICcKKwlwcmludGYgImFkZCBiYXJcMGluaXRpYWxcMCIgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAteiAtLXByZXR0eT0idGZvcm1hdDolcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgc2VwYXJhdGlvbiB3aXRoIC0tc3RhdCcgJworCXN0YXQwX3BhcnQ9JChnaXQgZGlmZiAtLXN0YXQgSEVBRF4gSEVBRCkgJiYKKwlzdGF0MV9wYXJ0PSQoZ2l0IGRpZmYgLS1zdGF0IC0tcm9vdCBIRUFEXikgJiYKKwlwcmludGYgImFkZCBiYXJcbiRzdGF0MF9wYXJ0XG5cMGluaXRpYWxcbiRzdGF0MV9wYXJ0XG4iID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLXogLS1zdGF0IC0tcHJldHR5PSJmb3JtYXQ6JXMiID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ05VTCB0ZXJtaW5hdGlvbiB3aXRoIC0tc3RhdCcgJworCXN0YXQwX3BhcnQ9JChnaXQgZGlmZiAtLXN0YXQgSEVBRF4gSEVBRCkgJiYKKwlzdGF0MV9wYXJ0PSQoZ2l0IGRpZmYgLS1zdGF0IC0tcm9vdCBIRUFEXikgJiYKKwlwcmludGYgImFkZCBiYXJcbiRzdGF0MF9wYXJ0XG5cMGluaXRpYWxcbiRzdGF0MV9wYXJ0XG5cMCIgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAteiAtLXN0YXQgLS1wcmV0dHk9InRmb3JtYXQ6JXMiID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwNi1sb2ctZm9sbG93LWhhcmRlci1jb3BpZXMuc2ggYi90L3Q0MjA2LWxvZy1mb2xsb3ctaGFyZGVyLWNvcGllcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZDI5ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwNi1sb2ctZm9sbG93LWhhcmRlci1jb3BpZXMuc2gKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBCbyBZYW5nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgLS1mb2xsb3cgc2hvdWxkIGFsd2F5cyBmaW5kIGNvcGllcyBoYXJkIGluIGdpdCBsb2cuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCitlY2hvID5wYXRoMCAnTGluZSAxCitMaW5lIDIKK0xpbmUgMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYWRkIGEgZmlsZSBwYXRoMCBhbmQgY29tbWl0LicgXAorICAgICdnaXQgYWRkIHBhdGgwICYmCisgICAgIGdpdCBjb21taXQgLW0gIkFkZCBwYXRoMCInCisKK2VjaG8gPnBhdGgwICdOZXcgbGluZSAxCitOZXcgbGluZSAyCitOZXcgbGluZSAzCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnQ2hhbmdlIHBhdGgwLicgXAorICAgICdnaXQgYWRkIHBhdGgwICYmCisgICAgIGdpdCBjb21taXQgLW0gIkNoYW5nZSBwYXRoMCInCisKK2NhdCA8cGF0aDAgPnBhdGgxCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29weSBwYXRoMCB0byBwYXRoMS4nIFwKKyAgICAnZ2l0IGFkZCBwYXRoMSAmJgorICAgICBnaXQgY29tbWl0IC1tICJDb3B5IHBhdGgxIGZyb20gcGF0aDAiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZmluZCB0aGUgY29weSBwYXRoMCAtPiBwYXRoMSBoYXJkZXInIFwKKyAgICAnZ2l0IGxvZyAtLWZvbGxvdyAtLW5hbWUtc3RhdHVzIC0tcHJldHR5PSJmb3JtYXQ6JXMiICBwYXRoMSA+IGN1cnJlbnQnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitDb3B5IHBhdGgxIGZyb20gcGF0aDAKK0MxMDAJcGF0aDAJcGF0aDEKKworQ2hhbmdlIHBhdGgwCitNCXBhdGgwCisKK0FkZCBwYXRoMAorQQlwYXRoMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSB0aGUgb3V0cHV0LicgXAorICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjA3LWxvZy1kZWNvcmF0aW9uLWNvbG9ycy5zaCBiL3QvdDQyMDctbG9nLWRlY29yYXRpb24tY29sb3JzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJiZGUzMWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA3LWxvZy1kZWNvcmF0aW9uLWNvbG9ycy5zaApAQCAtMCwwICsxLDY2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIE5henJpIFJhbWxpeQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGZvciAiZ2l0IGxvZyAtLWRlY29yYXRlIiBjb2xvcnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitnZXRfY29sb3IgKCkKK3sKKwlnaXQgY29uZmlnIC0tZ2V0LWNvbG9yIG5vLnN1Y2guc2xvdCAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgZGlmZi5jb2xvci5jb21taXQgeWVsbG93ICYmCisJZ2l0IGNvbmZpZyBjb2xvci5kZWNvcmF0ZS5icmFuY2ggZ3JlZW4gJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRlY29yYXRlLnJlbW90ZUJyYW5jaCByZWQgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRlY29yYXRlLnRhZyAicmV2ZXJzZSBib2xkIHllbGxvdyIgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRlY29yYXRlLnN0YXNoIG1hZ2VudGEgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRlY29yYXRlLkhFQUQgY3lhbiAmJgorCisJY19yZXNldD0kKGdldF9jb2xvciByZXNldCkgJiYKKworCWNfY29tbWl0PSQoZ2V0X2NvbG9yIHllbGxvdykgJiYKKwljX2JyYW5jaD0kKGdldF9jb2xvciBncmVlbikgJiYKKwljX3JlbW90ZUJyYW5jaD0kKGdldF9jb2xvciByZWQpICYmCisJY190YWc9JChnZXRfY29sb3IgInJldmVyc2UgYm9sZCB5ZWxsb3ciKSAmJgorCWNfc3Rhc2g9JChnZXRfY29sb3IgbWFnZW50YSkgJiYKKwljX0hFQUQ9JChnZXRfY29sb3IgY3lhbikgJiYKKworCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgY2xvbmUgLiBvdGhlciAmJgorCSgKKwkJY2Qgb3RoZXIgJiYKKwkJdGVzdF9jb21taXQgQTEKKwkpICYmCisKKwlnaXQgcmVtb3RlIGFkZCAtZiBvdGhlciAuL290aGVyICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCB0YWcgdjEuMCAmJgorCWVjaG8gPj5BLnQgJiYKKwlnaXQgc3Rhc2ggc2F2ZSBDaGFuZ2VzIHRvIEEudAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCiske2NfY29tbWl0fUNPTU1JVF9JRCAoJHtjX0hFQUR9SEVBRCR7Y19yZXNldH0ke2NfY29tbWl0fSxcCisgJHtjX3RhZ310YWc6IHYxLjAke2NfcmVzZXR9JHtjX2NvbW1pdH0sXAorICR7Y190YWd9dGFnOiBCJHtjX3Jlc2V0fSR7Y19jb21taXR9LFwKKyAke2NfYnJhbmNofW1hc3RlciR7Y19yZXNldH0ke2NfY29tbWl0fSkke2NfcmVzZXR9IEIKKyR7Y19jb21taXR9Q09NTUlUX0lEICgke2NfdGFnfXRhZzogQTEke2NfcmVzZXR9JHtjX2NvbW1pdH0sXAorICR7Y19yZW1vdGVCcmFuY2h9b3RoZXIvbWFzdGVyJHtjX3Jlc2V0fSR7Y19jb21taXR9KSR7Y19yZXNldH0gQTEKKyR7Y19jb21taXR9Q09NTUlUX0lEICgke2Nfc3Rhc2h9cmVmcy9zdGFzaCR7Y19yZXNldH0ke2NfY29tbWl0fSkke2NfcmVzZXR9XAorIE9uIG1hc3RlcjogQ2hhbmdlcyB0byBBLnQKKyR7Y19jb21taXR9Q09NTUlUX0lEICgke2NfdGFnfXRhZzogQSR7Y19yZXNldH0ke2NfY29tbWl0fSkke2NfcmVzZXR9IEEKK0VPRgorCisjIFdlIHdhbnQgbG9nIHRvIHNob3cgYWxsLCBidXQgdGhlIHNlY29uZCBwYXJlbnQgdG8gcmVmcy9zdGFzaCBpcyBpcnJlbGV2YW50CisjIHRvIHRoaXMgdGVzdCBzaW5jZSBpdCBkb2VzIG5vdCBjb250YWluIGFueSBkZWNvcmF0aW9uLCBoZW5jZSAtLWZpcnN0LXBhcmVudAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ29tbWl0IERlY29yYXRpb25zIENvbG9yZWQgQ29ycmVjdGx5JyAnCisJZ2l0IGxvZyAtLWZpcnN0LXBhcmVudCAtLWFiYnJldj0xMCAtLWFsbCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWNvbG9yPWFsd2F5cyB8CisJc2VkICJzL1swLTlhLWZdXHsxMCwxMFx9L0NPTU1JVF9JRC8iID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjA4LWxvZy1tYWdpYy1wYXRoc3BlYy5zaCBiL3QvdDQyMDgtbG9nLW1hZ2ljLXBhdGhzcGVjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjNDgyYjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA4LWxvZy1tYWdpYy1wYXRoc3BlYy5zaApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWFnaWMgcGF0aHNwZWMgdGVzdHMgdXNpbmcgZ2l0LWxvZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCW1rZGlyIHN1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6LyIgc2hvdWxkIGJlIGFtYmlndW91cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgOi8gMj5lcnJvciAmJgorCWdyZXAgYW1iaWd1b3VzIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDoiIHNob3VsZCBiZSBhbWJpZ3VvdXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDogMj5lcnJvciAmJgorCWdyZXAgYW1iaWd1b3VzIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS0gOicgJworCWdpdCBsb2cgLS0gOgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIEhFQUQgLS0gOi8nICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTI0YjI0Y2YgaW5pdGlhbAorCUVPRgorCShjZCBzdWIgJiYgZ2l0IGxvZyAtLW9uZWxpbmUgSEVBRCAtLSA6LyA+Li4vYWN0dWFsKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDktbG9nLXBpY2theGUuc2ggYi90L3Q0MjA5LWxvZy1waWNrYXhlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVlZDcyNzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA5LWxvZy1waWNrYXhlLnNoCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbG9nIC0tZ3JlcC8tLWF1dGhvci8tLXJlZ2V4cC1pZ25vcmUtY2FzZS8tUy8tRycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZWNobyBQaWNrZWQgPmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC0tYXV0aG9yPSJBbm90aGVyIFBlcnNvbiA8YW5vdGhlckBleGFtcGxlLmNvbT4iIC1tIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwJyAnCisJZ2l0IGxvZyAtLWdyZXA9aW5pdGlhbCAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwIC0tcmVnZXhwLWlnbm9yZS1jYXNlJyAnCisJZ2l0IGxvZyAtLXJlZ2V4cC1pZ25vcmUtY2FzZSAtLWdyZXA9SW5JdGlhbCAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwIC1pJyAnCisJZ2l0IGxvZyAtaSAtLWdyZXA9SW5JdGlhbCAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1hdXRob3IgLS1yZWdleHAtaWdub3JlLWNhc2UnICcKKwlnaXQgbG9nIC0tcmVnZXhwLWlnbm9yZS1jYXNlIC0tYXV0aG9yPXBlcnNvbiAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWF1dGhvciAtaScgJworCWdpdCBsb2cgLWkgLS1hdXRob3I9cGVyc29uIC0tZm9ybWF0PSVIID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1HIChub21hdGNoKScgJworCWdpdCBsb2cgLUdwaWNrZWQgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtRyAobWF0Y2gpJyAnCisJZ2l0IGxvZyAtR1BpY2tlZCAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtRyAtLXJlZ2V4cC1pZ25vcmUtY2FzZSAobm9tYXRjaCknICcKKwlnaXQgbG9nIC0tcmVnZXhwLWlnbm9yZS1jYXNlIC1HcGlja2xlIC0tZm9ybWF0PSVIID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLUcgLWkgKG5vbWF0Y2gpJyAnCisJZ2l0IGxvZyAtaSAtR3BpY2tsZSAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1HIC0tcmVnZXhwLWlnbm9yZS1jYXNlIChtYXRjaCknICcKKwlnaXQgbG9nIC0tcmVnZXhwLWlnbm9yZS1jYXNlIC1HcGlja2VkIC0tZm9ybWF0PSVIID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1HIC1pIChtYXRjaCknICcKKwlnaXQgbG9nIC1pIC1HcGlja2VkIC0tZm9ybWF0PSVIID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1TIChub21hdGNoKScgJworCWdpdCBsb2cgLVNwaWNrZWQgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtUyAobWF0Y2gpJyAnCisJZ2l0IGxvZyAtU1BpY2tlZCAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtUyAtLXJlZ2V4cC1pZ25vcmUtY2FzZSAobWF0Y2gpJyAnCisJZ2l0IGxvZyAtLXJlZ2V4cC1pZ25vcmUtY2FzZSAtU3BpY2tlZCAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtUyAtaSAobWF0Y2gpJyAnCisJZ2l0IGxvZyAtaSAtU3BpY2tlZCAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtUyAtLXJlZ2V4cC1pZ25vcmUtY2FzZSAobm9tYXRjaCknICcKKwlnaXQgbG9nIC0tcmVnZXhwLWlnbm9yZS1jYXNlIC1TcGlja2xlIC0tZm9ybWF0PSVIID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLVMgLWkgKG5vbWF0Y2gpJyAnCisJZ2l0IGxvZyAtaSAtU3BpY2tsZSAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjUyLWFtLW9wdGlvbnMuc2ggYi90L3Q0MjUyLWFtLW9wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc1OGU2MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTItYW0tb3B0aW9ucy5zaApAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFtIHdpdGggb3B0aW9ucyBhbmQgbm90IGxvc2luZyB0aGVtJworLiAuL3Rlc3QtbGliLnNoCisKK3RtPSIkVEVTVF9ESVJFQ1RPUlkvdDQyNTIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWNwICIkdG0vZmlsZS0xLTAiIGZpbGUtMSAmJgorCWNwICIkdG0vZmlsZS0yLTAiIGZpbGUtMiAmJgorCWdpdCBhZGQgZmlsZS0xIGZpbGUtMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBhbSAtLXdoaXRlc3BhY2U9Zml4JyAnCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0td2hpdGVzcGFjZT1maXggIiR0bSIvYW0tdGVzdC0xLT8gJiYKKwlnaXQgYW0gLS1za2lwICYmCisJZ3JlcCAzIGZpbGUtMSAmJgorCWdyZXAgIl5TaXgkIiBmaWxlLTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgYW0gLUMxJyAnCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC1DMSAiJHRtIi9hbS10ZXN0LTItPyAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwlncmVwIDMgZmlsZS0xICYmCisJZ3JlcCAiXlRocmVlJCIgZmlsZS0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVycnVwdGVkIGFtIC1wMicgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtcDIgIiR0bSIvYW0tdGVzdC0zLT8gJiYKKwlnaXQgYW0gLS1za2lwICYmCisJZ3JlcCAzIGZpbGUtMSAmJgorCWdyZXAgIl5UaHJlZSQiIGZpbGUtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBhbSAtQzEgLXAyJyAnCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC1wMiAtQzEgIiR0bSIvYW0tdGVzdC00LT8gJiYKKwlnaXQgYW0gLS1za2lwICYmCisJZ3JlcCAzIGZpbGUtMSAmJgorCWdyZXAgIl5UaHJlZSQiIGZpbGUtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBhbSAtLWRpcmVjdG9yeT0iZnJvdHogbml0Zm9sIicgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLWRpcmVjdG9yeT0iZnJvdHogbml0Zm9sIiAiJHRtIi9hbS10ZXN0LTUtPyAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwlncmVwIE9uZSAiZnJvdHogbml0Zm9sL2ZpbGUtNSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgdG8gYSBmdW5ueSBwYXRoJyAnCisJd2l0aF9zcT0id2l0aCdcJydzcSIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgYW0gLS1kaXJlY3Rvcnk9IiR3aXRoX3NxIiAiJHRtIi9hbS10ZXN0LTUtMiAmJgorCXRlc3QgLWYgIiR3aXRoX3NxL2ZpbGUtNSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1yZWplY3QnICcKKwlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1yZWplY3QgIiR0bSIvYW0tdGVzdC02LTEgJiYKKwlncmVwICJAQCAtMSwzICsxLDMgQEAiIGZpbGUtMi5yZWogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAtLXF1aWV0IGZpbGUtMiAmJgorCWdyZXAgIlstXS1yZWplY3QiIC5naXQvcmViYXNlLWFwcGx5L2FwcGx5LW9wdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC0xLTEgYi90L3Q0MjUyL2FtLXRlc3QtMS0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYzA5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtMS0xCkBAIC0wLDAgKzEsMTkgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFRocmVlCisKK0FwcGxpY2F0aW9uIG9mIHRoaXMgc2hvdWxkIGJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIGZpcnN0IGxpbmUgaW4gdGhlCitjb250ZXh0IGRvZXMgbm90IG1hdGNoLgorCitkaWZmIC0tZ2l0IGkvZmlsZS0xIHcvZmlsZS0xCitpbmRleCAwNmU1NjdiLi4xMGY4MzQyIDEwMDY0NAorLS0tIGkvZmlsZS0xCisrKysgdy9maWxlLTEKK0BAIC0xLDYgKzEsNiBAQAorIE9uZQorIDIKKy0zCisrVGhyZWUgCisgNAorIDUKKyA2CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtMS0yIGIvdC90NDI1Mi9hbS10ZXN0LTEtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjg3NGFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTEtMgpAQCAtMCwwICsxLDIxIEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBTaXgKKworQXBwbHlpbmcgdGhpcyBwYXRjaCB3aXRoIC0td2hpdGVzcGFjZT1maXggc2hvdWxkIGxvc2UgCit0aGUgdHJhaWxpbmcgd2hpdGVzcGFjZSBhZnRlciAiU2l4Ii4KKworZGlmZiAtLWdpdCBpL2ZpbGUtMiB3L2ZpbGUtMgoraW5kZXggMDZlNTY3Yi4uYjZmM2ExNiAxMDA2NDQKKy0tLSBpL2ZpbGUtMgorKysrIHcvZmlsZS0yCitAQCAtMSw3ICsxLDcgQEAKKyAxCisgMgorLTMKKytUaHJlZQorIDQKKyA1CistNgorK1NpeCAKKyA3CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtMi0xIGIvdC90NDI1Mi9hbS10ZXN0LTItMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWRhOTRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTItMQpAQCAtMCwwICsxLDE5IEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBUaHJlZQorCitBcHBsaWNhdGlvbiBvZiB0aGlzIHNob3VsZCBiZSByZWplY3RlZCBldmVuIHdpdGggLUMxIGJlY2F1c2UgdGhlCitwcmVpbWFnZSBsaW5lIGluIHRoZSBjb250ZXh0IGRvZXMgbm90IG1hdGNoLgorCitkaWZmIC0tZ2l0IGkvZmlsZS0xIHcvZmlsZS0xCitpbmRleCAwNmU1NjdiLi4xMGY4MzQyIDEwMDY0NAorLS0tIGkvZmlsZS0xCisrKysgdy9maWxlLTEKK0BAIC0xLDYgKzEsNiBAQAorIDEKKyAyCistVHJlcworK1RocmVlIAorIDQKKyA1CisgNgpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTItMiBiL3QvdDQyNTIvYW0tdGVzdC0yLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjNjYwMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC0yLTIKQEAgLTAsMCArMSwyMSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogU2l4CisKK0FwcGx5aW5nIHRoaXMgcGF0Y2ggd2l0aCAtQzEgc2hvdWxkIGJlIHN1Y2Nlc3NmdWwgZXZlbiB0aG91Z2ggCit0aGUgZmlyc3QgbGluZSBpbiB0aGUgY29udGV4dCBkb2VzIG5vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2ZpbGUtMiB3L2ZpbGUtMgoraW5kZXggMDZlNTY3Yi4uYjZmM2ExNiAxMDA2NDQKKy0tLSBpL2ZpbGUtMgorKysrIHcvZmlsZS0yCitAQCAtMSw3ICsxLDcgQEAKKyBPbmUKKyAyCistMworK1RocmVlCisgNAorIDUKKy02CisrU2l4CisgNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTMtMSBiL3QvdDQyNTIvYW0tdGVzdC0zLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4ZTVhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC0zLTEKQEAgLTAsMCArMSwxOSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogVGhyZWUKKworQXBwbGljYXRpb24gb2YgdGhpcyBzaG91bGQgYmUgcmVqZWN0ZWQgZXZlbiB3aXRoIC1wMiBiZWNhdXNlIHRoZQorcHJlaW1hZ2UgbGluZSBpbiB0aGUgY29udGV4dCBkb2VzIG5vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2p1bmsvZmlsZS0xIHcvanVuay9maWxlLTEKK2luZGV4IDA2ZTU2N2IuLjEwZjgzNDIgMTAwNjQ0CistLS0gaS9qdW5rL2ZpbGUtMQorKysrIHcvanVuay9maWxlLTEKK0BAIC0xLDYgKzEsNiBAQAorIDEKKyAyCistVHJlcworK1RocmVlIAorIDQKKyA1CisgNgpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTMtMiBiL3QvdDQyNTIvYW0tdGVzdC0zLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4MWI5NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC0zLTIKQEAgLTAsMCArMSwyMSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogU2l4CisKK0FwcGx5aW5nIHRoaXMgcGF0Y2ggd2l0aCAtcDIgc2hvdWxkIGJlIHN1Y2Nlc3NmdWwgZXZlbiB0aG91Z2gKK3RoZSBwYXRjaCBpcyBhZ2FpbnN0IGEgd3JvbmcgbGV2ZWwuCisKK2RpZmYgLS1naXQgaS9qdW5rL2ZpbGUtMiB3L2p1bmsvZmlsZS0yCitpbmRleCAwNmU1NjdiLi5iNmYzYTE2IDEwMDY0NAorLS0tIGkvanVuay9maWxlLTIKKysrKyB3L2p1bmsvZmlsZS0yCitAQCAtMSw3ICsxLDcgQEAKKyAxCisgMgorLTMKKytUaHJlZQorIDQKKyA1CistNgorK1NpeAorIDcKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC00LTEgYi90L3Q0MjUyL2FtLXRlc3QtNC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OGNkNmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtNC0xCkBAIC0wLDAgKzEsMTkgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFRocmVlCisKK0FwcGxpY2F0aW9uIG9mIHRoaXMgc2hvdWxkIGJlIHJlamVjdGVkIGV2ZW4gd2l0aCAtQzEgLXAyIGJlY2F1c2UKK3RoZSBwcmVpbWFnZSBsaW5lIGluIHRoZSBjb250ZXh0IGRvZXMgbm90IG1hdGNoLgorCitkaWZmIC0tZ2l0IGkvanVuay9maWxlLTEgdy9qdW5rL2ZpbGUtMQoraW5kZXggMDZlNTY3Yi4uMTBmODM0MiAxMDA2NDQKKy0tLSBpL2p1bmsvZmlsZS0xCisrKysgdy9qdW5rL2ZpbGUtMQorQEAgLTEsNiArMSw2IEBACisgMQorIDIKKy1UcmVzCisrVGhyZWUgCisgNAorIDUKKyA2CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNC0yIGIvdC90NDI1Mi9hbS10ZXN0LTQtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTY5YmZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTQtMgpAQCAtMCwwICsxLDIyIEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBTaXgKKworQXBwbHlpbmcgdGhpcyBwYXRjaCB3aXRoIC1DMSAtcDIgc2hvdWxkIGJlIHN1Y2Nlc3NmdWwgZXZlbiB0aG91Z2gKK3RoZSBwYXRjaCBpcyBhZ2FpbnN0IGEgd3JvbmcgbGV2ZWwgYW5kIHRoZSBmaXJzdCBjb250ZXh0IGxpbmUgZG9lcworbm90IG1hdGNoLgorCitkaWZmIC0tZ2l0IGkvanVuay9maWxlLTIgdy9qdW5rL2ZpbGUtMgoraW5kZXggMDZlNTY3Yi4uYjZmM2ExNiAxMDA2NDQKKy0tLSBpL2p1bmsvZmlsZS0yCisrKysgdy9qdW5rL2ZpbGUtMgorQEAgLTEsNyArMSw3IEBACisgT25lCisgMgorLTMKKytUaHJlZQorIDQKKyA1CistNgorK1NpeAorIDcKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC01LTEgYi90L3Q0MjUyL2FtLXRlc3QtNS0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhN2JmMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtNS0xCkBAIC0wLDAgKzEsMjAgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFNpeAorCitBcHBseWluZyB0aGlzIHBhdGNoIHdpdGggLS1kaXJlY3Rvcnk9J2Zyb3R6IG5pdGZvbCcgc2hvdWxkIGZhaWwKKworZGlmZiAtLWdpdCBpL2p1bmsvZmlsZS0yIHcvanVuay9maWxlLTIKK2luZGV4IDA2ZTU2N2IuLmI2ZjNhMTYgMTAwNjQ0CistLS0gaS9qdW5rL2ZpbGUtMgorKysrIHcvanVuay9maWxlLTIKK0BAIC0xLDcgKzEsNyBAQAorIE9uZQorIDIKKy0zCisrVGhyZWUKKyA0CisgNQorLTYKKytTaXgKKyA3CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNS0yIGIvdC90NDI1Mi9hbS10ZXN0LTUtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzMwMjViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTUtMgpAQCAtMCwwICsxLDE1IEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBTaXgKKworQXBwbHlpbmcgdGhpcyBwYXRjaCB3aXRoIC0tZGlyZWN0b3J5PSdmcm90eiBuaXRmb2wnIHNob3VsZCBzdWNjZWVkCisKK2RpZmYgLS1naXQgaS9maWxlLTUgdy9maWxlLTUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAuLjFkNmVkOWYKKy0tLSAvZGV2L251bGwKKysrKyB3L2ZpbGUtNQorQEAgLTAsMCArMSwzIEBACisrT25lCisrdHdvCisrdGhyZWUKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC02LTEgYi90L3Q0MjUyL2FtLXRlc3QtNi0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ODU5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtNi0xCkBAIC0wLDAgKzEsMjEgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IEh1aAorCitTaG91bGQgZmFpbCBhbmQgbGVhdmUgcmVqZWN0cworCitkaWZmIC0tZ2l0IGkvZmlsZS0yIHcvZmlsZS0yCitpbmRleCAwNmU1NjdiLi5iNmYzYTE2IDEwMDY0NAorLS0tIGkvZmlsZS0yCisrKysgdy9maWxlLTIKK0BAIC0xLDMgKzEsMyBAQAorLTAKKytPbmUKKyAyCisgMworQEAgLTQsNCArNCw0IEBACisgNAorIDUKKy02CisrU2l4CisgNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9maWxlLTEtMCBiL3QvdDQyNTIvZmlsZS0xLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlNTY3YjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2ZpbGUtMS0wCkBAIC0wLDAgKzEsNyBAQAorMQorMgorMworNAorNQorNgorNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9maWxlLTItMCBiL3QvdDQyNTIvZmlsZS0yLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlNTY3YjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2ZpbGUtMi0wCkBAIC0wLDAgKzEsNyBAQAorMQorMgorMworNAorNQorNgorNwpkaWZmIC0tZ2l0IGEvdC90NDI1My1hbS1rZWVwLWNyLWRvcy5zaCBiL3QvdDQyNTMtYW0ta2VlcC1jci1kb3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTUzZmUzZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTMtYW0ta2VlcC1jci1kb3Muc2gKQEAgLTAsMCArMSw5NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBTdGVmYW4tVy4gSGFobgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtYW0gbWJveCB3aXRoIGRvcyBsaW5lIGVuZGluZy4KKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhyZWUgcGF0Y2hlcyB3aGljaCB3aWxsIGJlIGFkZGVkIGFzIGZpbGVzIHdpdGggZG9zIGxpbmUgZW5kaW5nLgorCitjYXQgPmZpbGUxIDw8XEVPRgorbGluZSAxCitFT0YKKworY2F0ID5maWxlMWEgPDxcRU9GCitsaW5lIDEKK2xpbmUgNAorRU9GCisKK2NhdCA+ZmlsZTIgPDxcRU9GCitsaW5lIDEKK2xpbmUgMgorRU9GCisKK2NhdCA+ZmlsZTMgPDxcRU9GCitsaW5lIDEKK2xpbmUgMgorbGluZSAzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeSB3aXRoIGRvcyBmaWxlcycgJworCWFwcGVuZF9jciA8ZmlsZTEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlhcHBlbmRfY3IgPGZpbGUyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQgJiYKKwlhcHBlbmRfY3IgPGZpbGUzID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBUaGlyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGRvcyBmaWxlcyB3aXRob3V0IC0ta2VlcC1jcicgJworCWdpdCBjaGVja291dCAtYiBkb3NmaWxlcyBpbml0aWFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtayBpbml0aWFsLi5tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLWsgLTMgMDAwKi5wYXRjaCAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5IDAwMCoucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBkb3MgZmlsZXMgd2l0aCAtLWtlZXAtY3InICcKKwlnaXQgY2hlY2tvdXQgLWIgZG9zZmlsZXMta2VlcC1jciBpbml0aWFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtayAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIgfCBnaXQgYW0gLS1rZWVwLWNyIC1rIC0zICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggZG9zIGZpbGVzIGNvbmZpZyBhbS5rZWVwY3InICcKKwlnaXQgY29uZmlnIGFtLmtlZXBjciAxICYmCisJZ2l0IGNoZWNrb3V0IC1iIGRvc2ZpbGVzLWNvbmYta2VlcGNyIGluaXRpYWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlciB8IGdpdCBhbSAtayAtMyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGRvcyBmaWxlcyBjb25maWcgYW0ua2VlcGNyIG92ZXJyaWRkZW4gYnkgLS1uby1rZWVwLWNyJyAnCisJZ2l0IGNvbmZpZyBhbS5rZWVwY3IgMSAmJgorCWdpdCBjaGVja291dCAtYiBkb3NmaWxlcy1jb25mLWtlZXBjci1vdmVycmlkZSBpbml0aWFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtayBpbml0aWFsLi5tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLWsgLTMgLS1uby1rZWVwLWNyIDAwMCoucGF0Y2ggJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAwMDAqLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggZG9zIGZpbGVzIHdpdGggLS1rZWVwLWNyIGNvbnRpbnVlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGRvc2ZpbGVzLWtlZXAtY3ItY29udGludWUgaW5pdGlhbCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLWsgaW5pdGlhbC4ubWFzdGVyICYmCisJYXBwZW5kX2NyIDxmaWxlMWEgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJkaWZmZXJlbnQgcGF0Y2giIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1rZWVwLWNyIC1rIC0zIDAwMCoucGF0Y2ggJiYKKwlhcHBlbmRfY3IgPGZpbGUyID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGFtIC0zIC0tcmVzb2x2ZWQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCB1bml4IGZpbGVzIGNvbmZpZyBhbS5rZWVwY3Igb3ZlcnJpZGRlbiBieSAtLW5vLWtlZXAtY3InICcKKwlnaXQgY29uZmlnIGFtLmtlZXBjciAxICYmCisJZ2l0IGNoZWNrb3V0IC1iIHVuaXhmaWxlcy1jb25mLWtlZXBjci1vdmVycmlkZSBpbml0aWFsICYmCisJY3AgLWYgZmlsZTEgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImxpbmUgZW5kaW5nIHRvIHVuaXgiIGZpbGUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIGluaXRpYWwuLm1hc3RlciAmJgorCWdpdCBhbSAtayAtMyAtLW5vLWtlZXAtY3IgMDAwKi5wYXRjaCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC13IG1hc3RlcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyNTQtYW0tY29ycnVwdC5zaCBiL3QvdDQyNTQtYW0tY29ycnVwdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iN2RhOTVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1NC1hbS1jb3JydXB0LnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYW0gd2l0aCBjb3JydXB0IGlucHV0JworLiAuL3Rlc3QtbGliLnNoCisKKyMgTm90ZSB0aGUgbWlzc2luZyAiKysrIiBsaW5lOgorY2F0ID4gYmFkLXBhdGNoLmRpZmYgPDwnRU9GJworRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitkaWZmIC0tZ2l0IGEvZiBiL2YKK2luZGV4IDc4OTgxOTIuLjYxNzgwNzkgMTAwNjQ0CistLS0gYS9mCitAQCAtMSArMSBAQAorLWEKKytiCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdCAkPyA9IDAgJiYKKwllY2hvIGEgPiBmICYmCisJZ2l0IGFkZCBmICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKKyMgVGhpcyB1c2VkIHRvIGZhaWwgYmVmb3JlLCB0b28sIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGRpYWdub3N0aWMuCisjICAgZmF0YWw6IHVuYWJsZSB0byB3cml0ZSBmaWxlICcobnVsbCknIG1vZGUgMTAwNjQ0OiBCYWQgYWRkcmVzcworIyBBbHNvLCBpdCBoYWQgdGhlIHVud2FudGVkIHNpZGUtZWZmZWN0IG9mIGRlbGV0aW5nIGYuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cnkgdG8gYXBwbHkgY29ycnVwdGVkIHBhdGNoJyAnCisJZ2l0IGFtIGJhZC1wYXRjaC5kaWZmIDI+IGFjdHVhbAorCXRlc3QgJD8gPSAxCisnCisKK2NhdCA+IGV4cGVjdGVkIDw8RU9GCitmYXRhbDogZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIChsaW5lIDQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGFyZSBkaWFnbm9zdGljOyBlbnN1cmUgZmlsZSBpcyBzdGlsbCBoZXJlJyAnCisJdGVzdCAkPyA9IDAgJiYKKwl0ZXN0IC1mIGYgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MzAwLW1lcmdlLXRyZWUuc2ggYi90L3Q0MzAwLW1lcmdlLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDZjM2ZlNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQzMDAtbWVyZ2UtdHJlZS5zaApAQCAtMCwwICsxLDI1NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBXaWxsIFBhbG1lcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2UtdHJlZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCAiaW5pdGlhbCIgImluaXRpYWwtZmlsZSIgImluaXRpYWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgYWRkIEEsICFCJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFWFBFQ1RFRCAmJgorYWRkZWQgaW4gcmVtb3RlCisgIHRoZWlyICAxMDA2NDQgNDNkNWE4ZWQ2ZWY2YzAwZmY3NzUwMDg2MzNmOTU3ODdkMDg4Mjg1ZCBPTkUKK0BAIC0wLDAgKzEgQEAKKytBQUEKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLWEtbm90LWIiICJPTkUiICJBQUEiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBpbml0aWFsIGFkZC1hLW5vdC1iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBhZGQgIUEsIEInICcKKwljYXQgPmV4cGVjdGVkIDw8XEVYUEVDVEVEICYmCithZGRlZCBpbiBsb2NhbAorICBvdXIgICAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgT05FCitFWFBFQ1RFRAorCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImFkZC1ub3QtYS1iIiAiT05FIiAiQUFBIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLW5vdC1hLWIgaW5pdGlhbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgYWRkIEEsIEIgKHNhbWUpJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFWFBFQ1RFRCAmJgorYWRkZWQgaW4gYm90aAorICBvdXIgICAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgT05FCisgIHRoZWlyICAxMDA2NDQgNDNkNWE4ZWQ2ZWY2YzAwZmY3NzUwMDg2MzNmOTU3ODdkMDg4Mjg1ZCBPTkUKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLWEtYi1zYW1lLUEiICJPTkUiICJBQUEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImFkZC1hLWItc2FtZS1CIiAiT05FIiAiQUFBIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLWEtYi1zYW1lLUEgYWRkLWEtYi1zYW1lLUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGFkZCBBLCBCIChkaWZmZXJlbnQpJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFWFBFQ1RFRCAmJgorYWRkZWQgaW4gYm90aAorICBvdXIgICAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgT05FCisgIHRoZWlyICAxMDA2NDQgYmE2MjkyMzhjYTg5NDg5ZjJiMzUwZTE5NmNhNDQ1ZTA5ZDhiYjgzNCBPTkUKK0BAIC0xICsxLDUgQEAKKys8PDw8PDw8IC5vdXIKKyBBQUEKKys9PT09PT09CisrQkJCCisrPj4+Pj4+PiAudGhlaXIKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLWEtYi1kaWZmLUEiICJPTkUiICJBQUEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImFkZC1hLWItZGlmZi1CIiAiT05FIiAiQkJCIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLWEtYi1kaWZmLUEgYWRkLWEtYi1kaWZmLUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGNoYW5nZSBBLCAhQicgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLWEtbm90LWIiICJpbml0aWFsLWZpbGUiICJCQkIiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBjaGFuZ2UtYS1ub3QtYiBpbml0aWFsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgIUEsIEInICcKKwljYXQgPmV4cGVjdGVkIDw8XEVYUEVDVEVEICYmCittZXJnZWQKKyAgcmVzdWx0IDEwMDY0NCBiYTYyOTIzOGNhODk0ODlmMmIzNTBlMTk2Y2E0NDVlMDlkOGJiODM0IGluaXRpYWwtZmlsZQorICBvdXIgICAgMTAwNjQ0IGU3OWM1ZThmOTY0NDkzMjkwYTQwOTg4OGQ1NDEzYTczN2U4ZTVkZDUgaW5pdGlhbC1maWxlCitAQCAtMSArMSBAQAorLWluaXRpYWwKKytCQkIKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLW5vdC1hLWIiICJpbml0aWFsLWZpbGUiICJCQkIiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBpbml0aWFsIGNoYW5nZS1ub3QtYS1iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgQSwgQiAoc2FtZSknICcKKwljYXQgPmV4cGVjdGVkIDw8XEVYUEVDVEVEICYmCitFWFBFQ1RFRAorCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLWItc2FtZS1BIiAiaW5pdGlhbC1maWxlIiAiQUFBIiAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLXNhbWUtQiIgImluaXRpYWwtZmlsZSIgIkFBQSIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGNoYW5nZS1hLWItc2FtZS1BIGNoYW5nZS1hLWItc2FtZS1CID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgQSwgQiAoZGlmZmVyZW50KScgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK2NoYW5nZWQgaW4gYm90aAorICBiYXNlICAgMTAwNjQ0IGU3OWM1ZThmOTY0NDkzMjkwYTQwOTg4OGQ1NDEzYTczN2U4ZTVkZDUgaW5pdGlhbC1maWxlCisgIG91ciAgICAxMDA2NDQgNDNkNWE4ZWQ2ZWY2YzAwZmY3NzUwMDg2MzNmOTU3ODdkMDg4Mjg1ZCBpbml0aWFsLWZpbGUKKyAgdGhlaXIgIDEwMDY0NCBiYTYyOTIzOGNhODk0ODlmMmIzNTBlMTk2Y2E0NDVlMDlkOGJiODM0IGluaXRpYWwtZmlsZQorQEAgLTEgKzEsNSBAQAorKzw8PDw8PDwgLm91cgorIEFBQQorKz09PT09PT0KKytCQkIKKys+Pj4+Pj4+IC50aGVpcgorRVhQRUNURUQKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLWRpZmYtQSIgImluaXRpYWwtZmlsZSIgIkFBQSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLWEtYi1kaWZmLUIiICJpbml0aWFsLWZpbGUiICJCQkIiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBjaGFuZ2UtYS1iLWRpZmYtQSBjaGFuZ2UtYS1iLWRpZmYtQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgY2hhbmdlIEEsIEIgKG1peGVkKScgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK2NoYW5nZWQgaW4gYm90aAorICBiYXNlICAgMTAwNjQ0IGY0ZjFmOTk4Yzc3NzY1NjhjNGZmMzhmNTE2ZDc3ZmVmOTM5OWI1YTcgT05FCisgIG91ciAgICAxMDA2NDQgYWYxNGMyYzM0NzUzMzdjNzM3NTlkNTYxZWY3MGI1OWU1YzczMTE3NiBPTkUKKyAgdGhlaXIgIDEwMDY0NCAzNzJkNzYxNDkzZjUyNGQ0NGQ1OWJkMjQ3MDBjM2JkZjkxNGM5NzNjIE9ORQorQEAgLTcsNyArNywxMSBAQAorIEFBQQorIEFBQQorIEFBQQorKzw8PDw8PDwgLm91cgorIEJCQgorKz09PT09PT0KKytDQ0MKKys+Pj4+Pj4+IC50aGVpcgorIEFBQQorIEFBQQorIEFBQQorRVhQRUNURUQKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLW1peC1iYXNlIiAiT05FIiAiCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBIiAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLW1peC1BIiAiT05FIiBcCisJCSIkKHNlZCAtZSAiMXtzL0FBQS9CQkIvO30iIC1lICIxMHtzL0FBQS9CQkIvO30iIDxPTkUpIiAmJgorCWdpdCByZXNldCAtLWhhcmQgY2hhbmdlLWEtYi1taXgtYmFzZSAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLW1peC1CIiAiT05FIiBcCisJCSIkKHNlZCAtZSAiMXtzL0FBQS9CQkIvO30iIC1lICIxMHtzL0FBQS9DQ0MvO30iIDxPTkUpIiAmJgorCWdpdCBtZXJnZS10cmVlIGNoYW5nZS1hLWItbWl4LWJhc2UgY2hhbmdlLWEtYi1taXgtQSBjaGFuZ2UtYS1iLW1peC1CIFwKKwkJPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHJlbW92ZSBBLCAhQicgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK3JlbW92ZWQgaW4gbG9jYWwKKyAgYmFzZSAgIDEwMDY0NCA0M2Q1YThlZDZlZjZjMDBmZjc3NTAwODYzM2Y5NTc4N2QwODgyODVkIE9ORQorICB0aGVpciAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgT05FCitFWFBFQ1RFRAorCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgInJtLWEtbm90LWItYmFzZSIgIk9ORSIgIkFBQSIgJiYKKwlnaXQgcm0gT05FICYmCisJZ2l0IGNvbW1pdCAtbSAicm0tYS1ub3QtYiIgJiYKKwlnaXQgdGFnICJybS1hLW5vdC1iIiAmJgorCWdpdCBtZXJnZS10cmVlIHJtLWEtbm90LWItYmFzZSBybS1hLW5vdC1iIHJtLWEtbm90LWItYmFzZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgcmVtb3ZlICFBLCBCJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFWFBFQ1RFRCAmJgorcmVtb3ZlZCBpbiByZW1vdGUKKyAgYmFzZSAgIDEwMDY0NCA0M2Q1YThlZDZlZjZjMDBmZjc3NTAwODYzM2Y5NTc4N2QwODgyODVkIE9ORQorICBvdXIgICAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgT05FCitAQCAtMSArMCwwIEBACistQUFBCitFWFBFQ1RFRAorCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgInJtLW5vdC1hLWItYmFzZSIgIk9ORSIgIkFBQSIgJiYKKwlnaXQgcm0gT05FICYmCisJZ2l0IGNvbW1pdCAtbSAicm0tbm90LWEtYiIgJiYKKwlnaXQgdGFnICJybS1ub3QtYS1iIiAmJgorCWdpdCBtZXJnZS10cmVlIHJtLWEtbm90LWItYmFzZSBybS1hLW5vdC1iLWJhc2Ugcm0tYS1ub3QtYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgY2hhbmdlIEEsIHJlbW92ZSBCJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFWFBFQ1RFRCAmJgorcmVtb3ZlZCBpbiByZW1vdGUKKyAgYmFzZSAgIDEwMDY0NCA0M2Q1YThlZDZlZjZjMDBmZjc3NTAwODYzM2Y5NTc4N2QwODgyODVkIE9ORQorICBvdXIgICAgMTAwNjQ0IGJhNjI5MjM4Y2E4OTQ4OWYyYjM1MGUxOTZjYTQ0NWUwOWQ4YmI4MzQgT05FCitAQCAtMSArMCwwIEBACistQkJCCitFWFBFQ1RFRAorCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLXJtLWItYmFzZSIgIk9ORSIgIkFBQSIgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLWEtcm0tYi1BIiAiT05FIiAiQkJCIiAmJgorCWdpdCByZXNldCAtLWhhcmQgY2hhbmdlLWEtcm0tYi1iYXNlICYmCisJZ2l0IHJtIE9ORSAmJgorCWdpdCBjb21taXQgLW0gImNoYW5nZS1hLXJtLWItQiIgJiYKKwlnaXQgdGFnICJjaGFuZ2UtYS1ybS1iLUIiICYmCisJZ2l0IG1lcmdlLXRyZWUgY2hhbmdlLWEtcm0tYi1iYXNlIGNoYW5nZS1hLXJtLWItQSBjaGFuZ2UtYS1ybS1iLUIgXAorCQk+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgcmVtb3ZlIEEsIGNoYW5nZSBCJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFWFBFQ1RFRCAmJgorcmVtb3ZlZCBpbiBsb2NhbAorICBiYXNlICAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgT05FCisgIHRoZWlyICAxMDA2NDQgYmE2MjkyMzhjYTg5NDg5ZjJiMzUwZTE5NmNhNDQ1ZTA5ZDhiYjgzNCBPTkUKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAicm0tYS1jaGFuZ2UtYi1iYXNlIiAiT05FIiAiQUFBIiAmJgorCisJZ2l0IHJtIE9ORSAmJgorCWdpdCBjb21taXQgLW0gInJtLWEtY2hhbmdlLWItQSIgJiYKKwlnaXQgdGFnICJybS1hLWNoYW5nZS1iLUEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBybS1hLWNoYW5nZS1iLWJhc2UgJiYKKwl0ZXN0X2NvbW1pdCAicm0tYS1jaGFuZ2UtYi1CIiAiT05FIiAiQkJCIiAmJgorCWdpdCBtZXJnZS10cmVlIHJtLWEtY2hhbmdlLWItYmFzZSBybS1hLWNoYW5nZS1iLUEgcm0tYS1jaGFuZ2UtYi1CIFwKKwkJPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUwMDAtdGFyLXRyZWUuc2ggYi90L3Q1MDAwLXRhci10cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjZjAwZWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDAwLXRhci10cmVlLnNoCkBAIC0wLDAgKzEsMzgxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1IFJlbmUgU2NoYXJmZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdGFyLXRyZWUgYW5kIGdpdCBnZXQtdGFyLWNvbW1pdC1pZCB0ZXN0CisKK1RoaXMgdGVzdCBjb3ZlcnMgdGhlIHRvcGljcyBvZiBmaWxlIGNvbnRlbnRzLCBjb21taXQgZGF0ZSBoYW5kbGluZyBhbmQKK2NvbW1pdCBpZCBlbWJlZGRpbmc6CisKKyAgVGhlIGNvbnRlbnRzIG9mIHRoZSByZXBvc2l0b3J5IGlzIGNvbXBhcmVkIHRvIHRoZSBleHRyYWN0ZWQgdGFyCisgIGFyY2hpdmUuICBUaGUgcmVwb3NpdG9yeSBjb250YWlucyBzaW1wbGUgdGV4dCBmaWxlcywgc3ltbGlua3MgYW5kIGEKKyAgYmluYXJ5IGZpbGUgKC9iaW4vc2gpLiAgT25seSBwYXRocyBzaG9ydGVyIHRoYW4gOTkgY2hhcmFjdGVycyBhcmUKKyAgdXNlZC4KKworICBnaXQgdGFyLXRyZWUgYXBwbGllcyB0aGUgY29tbWl0IGRhdGUgdG8gZXZlcnkgZmlsZSBpbiB0aGUgYXJjaGl2ZSBpdAorICBjcmVhdGVzLiAgVGhlIHRlc3Qgc2V0cyB0aGUgY29tbWl0IGRhdGUgdG8gYSBzcGVjaWZpYyB2YWx1ZSBhbmQgY2hlY2tzCisgIGlmIHRoZSB0YXIgYXJjaGl2ZSBjb250YWlucyB0aGF0IHZhbHVlLgorCisgIFdoZW4gZ2l2aW5nIGdpdCB0YXItdHJlZSBhIGNvbW1pdCBpZCAoaW4gY29udHJhc3QgdG8gYSB0cmVlIGlkKSBpdAorICBlbWJlZHMgdGhpcyBjb21taXQgaWQgaW50byB0aGUgdGFyIGFyY2hpdmUgYXMgYSBjb21tZW50LiAgVGhlIHRlc3QKKyAgY2hlY2tzIHRoZSBhYmlsaXR5IG9mIGdpdCBnZXQtdGFyLWNvbW1pdC1pZCB0byBmaWd1cmUgaXQgb3V0IGZyb20gdGhlCisgIHRhciBmaWxlLgorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorVU5aSVA9JHtVTlpJUDotdW56aXB9CitHWklQPSR7R1pJUDotZ3ppcH0KK0dVTlpJUD0ke0dVTlpJUDotZ3ppcCAtZH0KKworU1VCU1RGT1JNQVQ9JUglbgorCitjaGVja196aXAoKSB7CisJemlwZmlsZT0kMS56aXAKKwlsaXN0ZmlsZT0kMS5sc3QKKwlkaXI9JDEKKwlkaXJfd2l0aF9wcmVmaXg9JGRpci8kMgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIGV4dHJhY3QgWklQIGFyY2hpdmUiICIKKwkJKG1rZGlyICRkaXIgJiYgY2QgJGRpciAmJiAkVU5aSVAgLi4vJHppcGZpbGUpCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIHZhbGlkYXRlIGZpbGVuYW1lcyIgIgorCQkoY2QgJHtkaXJfd2l0aF9wcmVmaXh9YSAmJiBmaW5kIC4pIHwgc29ydCA+JGxpc3RmaWxlICYmCisJCXRlc3RfY21wIGEubHN0ICRsaXN0ZmlsZQorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgIiB2YWxpZGF0ZSBmaWxlIGNvbnRlbnRzIiAiCisJCWRpZmYgLXIgYSAke2Rpcl93aXRoX3ByZWZpeH1hCisJIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncG9wdWxhdGUgd29ya2RpcicgXAorICAgICdta2RpciBhIGIgYyAmJgorICAgICBlY2hvIHNpbXBsZSB0ZXh0ZmlsZSA+YS9hICYmCisgICAgIG1rZGlyIGEvYmluICYmCisgICAgIGNwIC9iaW4vc2ggYS9iaW4gJiYKKyAgICAgcHJpbnRmICJBXCRGb3JtYXQ6JXNcJE8iICIkU1VCU1RGT1JNQVQiID5hL3N1YnN0ZmlsZTEgJiYKKyAgICAgcHJpbnRmICJBIG5vdCBzdWJzdGl0dXRlZCBPIiA+YS9zdWJzdGZpbGUyICYmCisgICAgIGlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwlsbiAtcyBhIGEvbDEKKyAgICAgZWxzZQorCXByaW50ZiAlcyBhID4gYS9sMQorICAgICBmaSAmJgorICAgICAocD1sb25nX3BhdGhfdG9fYV9maWxlICYmIGNkIGEgJiYKKyAgICAgIGZvciBkZXB0aCBpbiAxIDIgMyA0IDU7IGRvIG1rZGlyICRwICYmIGNkICRwOyBkb25lICYmCisgICAgICBlY2hvIHRleHQgPmZpbGVfd2l0aF9sb25nX3BhdGgpICYmCisgICAgIChjZCBhICYmIGZpbmQgLikgfCBzb3J0ID5hLmxzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FkZCBpZ25vcmVkIGZpbGUnIFwKKyAgICAnZWNobyBpZ25vcmUgbWUgPmEvaWdub3JlZCAmJgorICAgICBlY2hvIGlnbm9yZWQgZXhwb3J0LWlnbm9yZSA+LmdpdC9pbmZvL2F0dHJpYnV0ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhZGQgZmlsZXMgdG8gcmVwb3NpdG9yeScgXAorICAgICdmaW5kIGEgLXR5cGUgZiB8IHhhcmdzIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJiYKKyAgICAgZmluZCBhIC10eXBlIGwgfCB4YXJncyBnaXQgdXBkYXRlLWluZGV4IC0tYWRkICYmCisgICAgIHRyZWVpZD1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gJHRyZWVpZCA+dHJlZWlkICYmCisgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJChUWj1HTVQgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI3IDIyOjAwOjAwIiBcCisgICAgIGdpdCBjb21taXQtdHJlZSAkdHJlZWlkIDwvZGV2L251bGwpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY3JlYXRlIGJhcmUgY2xvbmUnIFwKKyAgICAnZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUuZ2l0ICYmCisgICAgIGNwIC5naXQvaW5mby9hdHRyaWJ1dGVzIGJhcmUuZ2l0L2luZm8vYXR0cmlidXRlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlbW92ZSBpZ25vcmVkIGZpbGUnIFwKKyAgICAncm0gYS9pZ25vcmVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGFyY2hpdmUnIFwKKyAgICAnZ2l0IGFyY2hpdmUgSEVBRCA+Yi50YXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgdGFyLXRyZWUnIFwKKyAgICAnZ2l0IHRhci10cmVlIEhFQUQgPmIyLnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlIHZzLiBnaXQgdGFyLXRyZWUnIFwKKyAgICAndGVzdF9jbXAgYi50YXIgYjIudGFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSBvbiBsYXJnZSBmaWxlcycgJworICAgIHRlc3RfY29uZmlnIGNvcmUuYmlnZmlsZXRocmVzaG9sZCAxICYmCisgICAgZ2l0IGFyY2hpdmUgSEVBRCA+YjMudGFyICYmCisgICAgdGVzdF9jbXAgYi50YXIgYjMudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYXJjaGl2ZSBpbiBhIGJhcmUgcmVwbycgXAorICAgICcoY2QgYmFyZS5naXQgJiYgZ2l0IGFyY2hpdmUgSEVBRCkgPmIzLnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlIHZzLiB0aGUgc2FtZSBpbiBhIGJhcmUgcmVwbycgXAorICAgICd0ZXN0X2NtcCBiLnRhciBiMy50YXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggLS1vdXRwdXQnIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1vdXRwdXQ9YjQudGFyIEhFQUQgJiYKKyAgICB0ZXN0X2NtcCBiLnRhciBiNC50YXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlJyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlPS4gSEVBRCA+YjUudGFyICYmCisgICAgdGVzdF9jbXAgYi50YXIgYjUudGFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgZmlsZSBtb2RpZmljYXRpb24gdGltZScgXAorICAgICdta2RpciBleHRyYWN0ICYmCisgICAgICIkVEFSIiB4ZiBiLnRhciAtQyBleHRyYWN0IGEvYSAmJgorICAgICB0ZXN0LWNobXRpbWUgLXYgKzAgZXh0cmFjdC9hL2EgfGN1dCAtZiAxID5iLm10aW1lICYmCisgICAgIGVjaG8gIjExMTcyMzEyMDAiID5leHBlY3RlZC5tdGltZSAmJgorICAgICB0ZXN0X2NtcCBleHBlY3RlZC5tdGltZSBiLm10aW1lJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGdldC10YXItY29tbWl0LWlkJyBcCisgICAgJ2dpdCBnZXQtdGFyLWNvbW1pdC1pZCA8Yi50YXIgPmIuY29tbWl0aWQgJiYKKyAgICAgdGVzdF9jbXAgLmdpdC8kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgYi5jb21taXRpZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2V4dHJhY3QgdGFyIGFyY2hpdmUnIFwKKyAgICAnKGNkIGIgJiYgIiRUQVIiIHhmIC0pIDxiLnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIGZpbGVuYW1lcycgXAorICAgICcoY2QgYi9hICYmIGZpbmQgLikgfCBzb3J0ID5iLmxzdCAmJgorICAgICB0ZXN0X2NtcCBhLmxzdCBiLmxzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIGZpbGUgY29udGVudHMnIFwKKyAgICAnZGlmZiAtciBhIGIvYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCB0YXItdHJlZSB3aXRoIHByZWZpeCcgXAorICAgICdnaXQgdGFyLXRyZWUgSEVBRCBwcmVmaXggPmMudGFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZXh0cmFjdCB0YXIgYXJjaGl2ZSB3aXRoIHByZWZpeCcgXAorICAgICcoY2QgYyAmJiAiJFRBUiIgeGYgLSkgPGMudGFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgZmlsZW5hbWVzIHdpdGggcHJlZml4JyBcCisgICAgJyhjZCBjL3ByZWZpeC9hICYmIGZpbmQgLikgfCBzb3J0ID5jLmxzdCAmJgorICAgICB0ZXN0X2NtcCBhLmxzdCBjLmxzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIGZpbGUgY29udGVudHMgd2l0aCBwcmVmaXgnIFwKKyAgICAnZGlmZiAtciBhIGMvcHJlZml4L2EnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgYXJjaGl2ZXMgd2l0aCBzdWJzdGZpbGVzJyBcCisgICAgJ2NwIC5naXQvaW5mby9hdHRyaWJ1dGVzIC5naXQvaW5mby9hdHRyaWJ1dGVzLmJlZm9yZSAmJgorICAgICBlY2hvICJzdWJzdGZpbGU/IiBleHBvcnQtc3Vic3QgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorICAgICBnaXQgYXJjaGl2ZSBIRUFEID5mLnRhciAmJgorICAgICBnaXQgYXJjaGl2ZSAtLXByZWZpeD1wcmVmaXgvIEhFQUQgPmcudGFyICYmCisgICAgIG12IC5naXQvaW5mby9hdHRyaWJ1dGVzLmJlZm9yZSAuZ2l0L2luZm8vYXR0cmlidXRlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2V4dHJhY3Qgc3Vic3RmaWxlcycgXAorICAgICcobWtkaXIgZiAmJiBjZCBmICYmICIkVEFSIiB4ZiAtKSA8Zi50YXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAndmFsaWRhdGUgc3Vic3RmaWxlIGNvbnRlbnRzJyBcCisgICAgICdnaXQgbG9nIC0tbWF4LWNvdW50PTEgIi0tcHJldHR5PWZvcm1hdDpBJHtTVUJTVEZPUk1BVH1PIiBIRUFEIFwKKyAgICAgID5mL2Evc3Vic3RmaWxlMS5leHBlY3RlZCAmJgorICAgICAgdGVzdF9jbXAgZi9hL3N1YnN0ZmlsZTEuZXhwZWN0ZWQgZi9hL3N1YnN0ZmlsZTEgJiYKKyAgICAgIHRlc3RfY21wIGEvc3Vic3RmaWxlMiBmL2Evc3Vic3RmaWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZXh0cmFjdCBzdWJzdGZpbGVzIGZyb20gYXJjaGl2ZSB3aXRoIHByZWZpeCcgXAorICAgICcobWtkaXIgZyAmJiBjZCBnICYmICIkVEFSIiB4ZiAtKSA8Zy50YXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAndmFsaWRhdGUgc3Vic3RmaWxlIGNvbnRlbnRzIGZyb20gYXJjaGl2ZSB3aXRoIHByZWZpeCcgXAorICAgICAnZ2l0IGxvZyAtLW1heC1jb3VudD0xICItLXByZXR0eT1mb3JtYXQ6QSR7U1VCU1RGT1JNQVR9TyIgSEVBRCBcCisgICAgICA+Zy9wcmVmaXgvYS9zdWJzdGZpbGUxLmV4cGVjdGVkICYmCisgICAgICB0ZXN0X2NtcCBnL3ByZWZpeC9hL3N1YnN0ZmlsZTEuZXhwZWN0ZWQgZy9wcmVmaXgvYS9zdWJzdGZpbGUxICYmCisgICAgICB0ZXN0X2NtcCBhL3N1YnN0ZmlsZTIgZy9wcmVmaXgvYS9zdWJzdGZpbGUyCisnCisKKyRVTlpJUCAtdiA+L2Rldi9udWxsIDI+JjEKK2lmIFsgJD8gLWVxIDEyNyBdOyB0aGVuCisJc2F5ICJTa2lwcGluZyBaSVAgdGVzdHMsIGJlY2F1c2UgdW56aXAgd2FzIG5vdCBmb3VuZCIKK2Vsc2UKKwl0ZXN0X3NldF9wcmVyZXEgVU5aSVAKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAnIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIEhFQUQgPmQuemlwJworCitjaGVja196aXAgZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIGluIGEgYmFyZSByZXBvJyBcCisgICAgJyhjZCBiYXJlLmdpdCAmJiBnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCkgPmQxLnppcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCB2cy4gdGhlIHNhbWUgaW4gYSBiYXJlIHJlcG8nIFwKKyAgICAndGVzdF9jbXAgZC56aXAgZDEuemlwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgd2l0aCAtLW91dHB1dCcgXAorICAgICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgLS1vdXRwdXQ9ZDIuemlwIEhFQUQgJiYKKyAgICB0ZXN0X2NtcCBkLnppcCBkMi56aXAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggLS1vdXRwdXQsIGluZmVycmluZyBmb3JtYXQnICcKKwlnaXQgYXJjaGl2ZSAtLW91dHB1dD1kMy56aXAgSEVBRCAmJgorCXRlc3RfY21wIGQuemlwIGQzLnppcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB3aXRoIC0tb3V0cHV0LCBvdmVycmlkZSBpbmZlcnJlZCBmb3JtYXQnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1vdXRwdXQ9ZDQuemlwIEhFQUQgJiYKKwl0ZXN0X2NtcCBiLnRhciBkNC56aXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCB3aXRoIHByZWZpeCcgXAorICAgICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgLS1wcmVmaXg9cHJlZml4LyBIRUFEID5lLnppcCcKKworY2hlY2tfemlwIGUgcHJlZml4LworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtMCAtLWZvcm1hdD16aXAgb24gbGFyZ2UgZmlsZXMnICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgMSAmJgorCWdpdCBhcmNoaXZlIC0wIC0tZm9ybWF0PXppcCBIRUFEID5sYXJnZS56aXAKKycKKworY2hlY2tfemlwIGxhcmdlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBvbiBsYXJnZSBmaWxlcycgJworCXRlc3RfY29uZmlnIGNvcmUuYmlnZmlsZXRocmVzaG9sZCAxICYmCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIEhFQUQgPmxhcmdlLWNvbXByZXNzZWQuemlwCisnCisKK2NoZWNrX3ppcCBsYXJnZS1jb21wcmVzc2VkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYXJjaGl2ZSAtLWxpc3Qgb3V0c2lkZSBvZiBhIGdpdCByZXBvJyBcCisgICAgJ0dJVF9ESVI9c29tZS9ub24tZXhpc3RpbmcvZGlyZWN0b3J5IGdpdCBhcmNoaXZlIC0tbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xpZW50cyBjYW5ub3QgYWNjZXNzIHVucmVhY2hhYmxlIGNvbW1pdHMnICcKKwl0ZXN0X2NvbW1pdCB1bnJlYWNoYWJsZSAmJgorCXNoYTE9YGdpdCByZXYtcGFyc2UgSEVBRGAgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGFyY2hpdmUgJHNoYTEgPnJlbW90ZS50YXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uICRzaGExID5yZW1vdGUudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1hcmNoaXZlIC0tcHJlZml4PW9sZGUtJyAnCisJZ2l0IGFyY2hpdmUgLS1wcmVmaXg9b2xkZS0gPmgudGFyIEhFQUQgJiYKKwkoCisJCW1rZGlyIGggJiYKKwkJY2QgaCAmJgorCQkiJFRBUiIgeGYgLSA8Li4vaC50YXIKKwkpICYmCisJdGVzdCAtZCBoL29sZGUtYSAmJgorCXRlc3QgLWQgaC9vbGRlLWEvYmluICYmCisJdGVzdCAtZiBoL29sZGUtYS9iaW4vc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGFyIGZpbHRlcnMnICcKKwlnaXQgY29uZmlnIHRhci50YXIuZm9vLmNvbW1hbmQgInRyIGFiIGJhIiAmJgorCWdpdCBjb25maWcgdGFyLmJhci5jb21tYW5kICJ0ciBhYiBiYSIgJiYKKwlnaXQgY29uZmlnIHRhci5iYXIucmVtb3RlIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJjaGl2ZSAtLWxpc3QgbWVudGlvbnMgdXNlciBmaWx0ZXInICcKKwlnaXQgYXJjaGl2ZSAtLWxpc3QgPm91dHB1dCAmJgorCWdyZXAgIl50YXJcLmZvb1wkIiBvdXRwdXQgJiYKKwlncmVwICJeYmFyXCQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmNoaXZlIC0tbGlzdCBzaG93cyBvbmx5IGVuYWJsZWQgcmVtb3RlIGZpbHRlcnMnICcKKwlnaXQgYXJjaGl2ZSAtLWxpc3QgLS1yZW1vdGU9LiA+b3V0cHV0ICYmCisJISBncmVwICJedGFyXC5mb29cJCIgb3V0cHV0ICYmCisJZ3JlcCAiXmJhclwkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52b2tlIHRhciBmaWx0ZXIgYnkgZm9ybWF0JyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyLmZvbyBIRUFEID5jb25maWcudGFyLmZvbyAmJgorCXRyIGFiIGJhIDxjb25maWcudGFyLmZvbyA+Y29uZmlnLnRhciAmJgorCXRlc3RfY21wIGIudGFyIGNvbmZpZy50YXIgJiYKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD1iYXIgSEVBRCA+Y29uZmlnLmJhciAmJgorCXRyIGFiIGJhIDxjb25maWcuYmFyID5jb25maWcudGFyICYmCisJdGVzdF9jbXAgYi50YXIgY29uZmlnLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZva2UgdGFyIGZpbHRlciBieSBleHRlbnNpb24nICcKKwlnaXQgYXJjaGl2ZSAtbyBjb25maWctaW1wbGljaXQudGFyLmZvbyBIRUFEICYmCisJdGVzdF9jbXAgY29uZmlnLnRhci5mb28gY29uZmlnLWltcGxpY2l0LnRhci5mb28gJiYKKwlnaXQgYXJjaGl2ZSAtbyBjb25maWctaW1wbGljaXQuYmFyIEhFQUQgJiYKKwl0ZXN0X2NtcCBjb25maWcudGFyLmZvbyBjb25maWctaW1wbGljaXQuYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgb3V0cHV0IGZvcm1hdCByZW1haW5zIHRhcicgJworCWdpdCBhcmNoaXZlIC1vIGNvbmZpZy1pbXBsaWNpdC5iYXogSEVBRCAmJgorCXRlc3RfY21wIGIudGFyIGNvbmZpZy1pbXBsaWNpdC5iYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0ZW5zaW9uIG1hdGNoaW5nIHJlcXVpcmVzIGRvdCcgJworCWdpdCBhcmNoaXZlIC1vIGNvbmZpZy1pbXBsaWNpdHRhci5mb28gSEVBRCAmJgorCXRlc3RfY21wIGIudGFyIGNvbmZpZy1pbXBsaWNpdHRhci5mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSBlbmFibGVkIGZpbHRlcnMgYXJlIGF2YWlsYWJsZSByZW1vdGVseScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcmNoaXZlIC0tcmVtb3RlPS4gLS1mb3JtYXQ9dGFyLmZvbyBIRUFEIFwKKwkJPnJlbW90ZS50YXIuZm9vICYmCisJZ2l0IGFyY2hpdmUgLS1yZW1vdGU9LiAtLWZvcm1hdD1iYXIgPnJlbW90ZS5iYXIgSEVBRCAmJgorCXRlc3RfY21wIHJlbW90ZS5iYXIgY29uZmlnLmJhcgorJworCitpZiAkR1pJUCAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJdGVzdF9zZXRfcHJlcmVxIEdaSVAKK2Vsc2UKKwlzYXkgIlNraXBwaW5nIHNvbWUgdGFyLmd6IHRlc3RzIGJlY2F1c2UgZ3ppcCBub3QgZm91bmQiCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXRneicgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRneiBIRUFEID5qLnRnegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXRhci5neicgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhci5neiBIRUFEID5qMS50YXIuZ3ogJiYKKwl0ZXN0X2NtcCBqLnRneiBqMS50YXIuZ3oKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdpbmZlciB0Z3ogZnJvbSAudGd6IGZpbGVuYW1lJyAnCisJZ2l0IGFyY2hpdmUgLS1vdXRwdXQ9ajIudGd6IEhFQUQgJiYKKwl0ZXN0X2NtcCBqLnRneiBqMi50Z3oKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdpbmZlciB0Z3ogZnJvbSAudGFyLmd6IGZpbGVuYW1lJyAnCisJZ2l0IGFyY2hpdmUgLS1vdXRwdXQ9ajMudGFyLmd6IEhFQUQgJiYKKwl0ZXN0X2NtcCBqLnRneiBqMy50YXIuZ3oKKycKKworaWYgJEdVTlpJUCAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJdGVzdF9zZXRfcHJlcmVxIEdVTlpJUAorZWxzZQorCXNheSAiU2tpcHBpbmcgc29tZSB0YXIuZ3ogdGVzdHMgYmVjYXVzZSBndW56aXAgd2FzIG5vdCBmb3VuZCIKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCxHVU5aSVAgJ2V4dHJhY3QgdGd6IGZpbGUnICcKKwkkR1VOWklQIC1jIDxqLnRneiA+ai50YXIgJiYKKwl0ZXN0X2NtcCBiLnRhciBqLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ3JlbW90ZSB0YXIuZ3ogaXMgYWxsb3dlZCBieSBkZWZhdWx0JyAnCisJZ2l0IGFyY2hpdmUgLS1yZW1vdGU9LiAtLWZvcm1hdD10YXIuZ3ogSEVBRCA+cmVtb3RlLnRhci5neiAmJgorCXRlc3RfY21wIGoudGd6IHJlbW90ZS50YXIuZ3oKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdyZW1vdGUgdGFyLmd6IGNhbiBiZSBkaXNhYmxlZCcgJworCWdpdCBjb25maWcgdGFyLnRhci5nei5yZW1vdGUgZmFsc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uIC0tZm9ybWF0PXRhci5neiBIRUFEIFwKKwkJPnJlbW90ZS50YXIuZ3oKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MDAxLWFyY2hpdmUtYXR0ci5zaCBiL3QvdDUwMDEtYXJjaGl2ZS1hdHRyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY0N2Q4NzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDAxLWFyY2hpdmUtYXR0ci5zaApAQCAtMCwwICsxLDEwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcmNoaXZlIGF0dHJpYnV0ZSB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK1NVQlNURk9STUFUPSclSCAoJWgpJW4nCisKK3Rlc3RfZXhwZWN0X2V4aXN0cygpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIgJDEgZXhpc3RzIiAidGVzdCAtZSAkMSIKK30KKwordGVzdF9leHBlY3RfbWlzc2luZygpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIgJDEgZG9lcyBub3QgZXhpc3QiICJ0ZXN0ICEgLWUgJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBpZ25vcmVkID5pZ25vcmVkICYmCisJZWNobyBpZ25vcmVkIGV4cG9ydC1pZ25vcmUgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWdpdCBhZGQgaWdub3JlZCAmJgorCisJZWNobyBpZ25vcmVkIGJ5IHRyZWUgPmlnbm9yZWQtYnktdHJlZSAmJgorCWVjaG8gaWdub3JlZC1ieS10cmVlIGV4cG9ydC1pZ25vcmUgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCBpZ25vcmVkLWJ5LXRyZWUgLmdpdGF0dHJpYnV0ZXMgJiYKKworCWVjaG8gaWdub3JlZCBieSB3b3JrdHJlZSA+aWdub3JlZC1ieS13b3JrdHJlZSAmJgorCWVjaG8gaWdub3JlZC1ieS13b3JrdHJlZSBleHBvcnQtaWdub3JlID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhZGQgaWdub3JlZC1ieS13b3JrdHJlZSAmJgorCisJcHJpbnRmICJBXCRGb3JtYXQ6JXNcJE8iICIkU1VCU1RGT1JNQVQiID5ub3N1YnN0ZmlsZSAmJgorCXByaW50ZiAiQVwkRm9ybWF0OiVzXCRPIiAiJFNVQlNURk9STUFUIiA+c3Vic3RmaWxlMSAmJgorCXByaW50ZiAiQSBub3Qgc3Vic3RpdHV0ZWQgTyIgPnN1YnN0ZmlsZTIgJiYKKwllY2hvICJzdWJzdGZpbGU/IiBleHBvcnQtc3Vic3QgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWdpdCBhZGQgbm9zdWJzdGZpbGUgc3Vic3RmaWxlMSBzdWJzdGZpbGUyICYmCisKKwlnaXQgY29tbWl0IC1tLiAmJgorCisJZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUgJiYKKwljcCAuZ2l0L2luZm8vYXR0cmlidXRlcyBiYXJlL2luZm8vYXR0cmlidXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZScgJworCWdpdCBhcmNoaXZlIEhFQUQgPmFyY2hpdmUudGFyICYmCisJKG1rZGlyIGFyY2hpdmUgJiYgY2QgYXJjaGl2ZSAmJiAiJFRBUiIgeGYgLSkgPGFyY2hpdmUudGFyCisnCisKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9pZ25vcmVkCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZC1ieS10cmVlCit0ZXN0X2V4cGVjdF9leGlzdHMJYXJjaGl2ZS9pZ25vcmVkLWJ5LXdvcmt0cmVlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggd29ya3RyZWUgYXR0cmlidXRlcycgJworCWdpdCBhcmNoaXZlIC0td29ya3RyZWUtYXR0cmlidXRlcyBIRUFEID53b3JrdHJlZS50YXIgJiYKKwkobWtkaXIgd29ya3RyZWUgJiYgY2Qgd29ya3RyZWUgJiYgIiRUQVIiIHhmIC0pIDx3b3JrdHJlZS50YXIKKycKKwordGVzdF9leHBlY3RfbWlzc2luZwl3b3JrdHJlZS9pZ25vcmVkCit0ZXN0X2V4cGVjdF9leGlzdHMJd29ya3RyZWUvaWdub3JlZC1ieS10cmVlCit0ZXN0X2V4cGVjdF9taXNzaW5nCXdvcmt0cmVlL2lnbm9yZWQtYnktd29ya3RyZWUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgLS13b3JrdHJlZS1hdHRyaWJ1dGVzIG9wdGlvbicgJworCWdpdCBhcmNoaXZlIC0td29ya3RyZWUtYXR0cmlidXRlcyAtLXdvcmt0cmVlLWF0dHJpYnV0ZXMgSEVBRCA+d29ya3RyZWUudGFyICYmCisJKG1rZGlyIHdvcmt0cmVlMiAmJiBjZCB3b3JrdHJlZTIgJiYgIiRUQVIiIHhmIC0pIDx3b3JrdHJlZS50YXIKKycKKwordGVzdF9leHBlY3RfbWlzc2luZwl3b3JrdHJlZTIvaWdub3JlZAordGVzdF9leHBlY3RfZXhpc3RzCXdvcmt0cmVlMi9pZ25vcmVkLWJ5LXRyZWUKK3Rlc3RfZXhwZWN0X21pc3NpbmcJd29ya3RyZWUyL2lnbm9yZWQtYnktd29ya3RyZWUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgdnMuIGJhcmUnICcKKwkoY2QgYmFyZSAmJiBnaXQgYXJjaGl2ZSBIRUFEKSA+YmFyZS1hcmNoaXZlLnRhciAmJgorCXRlc3RfY21wIGFyY2hpdmUudGFyIGJhcmUtYXJjaGl2ZS50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCB3b3JrdHJlZSBhdHRyaWJ1dGVzLCBiYXJlJyAnCisJKGNkIGJhcmUgJiYgZ2l0IGFyY2hpdmUgLS13b3JrdHJlZS1hdHRyaWJ1dGVzIEhFQUQpID5iYXJlLXdvcmt0cmVlLnRhciAmJgorCShta2RpciBiYXJlLXdvcmt0cmVlICYmIGNkIGJhcmUtd29ya3RyZWUgJiYgIiRUQVIiIHhmIC0pIDxiYXJlLXdvcmt0cmVlLnRhcgorJworCit0ZXN0X2V4cGVjdF9taXNzaW5nCWJhcmUtd29ya3RyZWUvaWdub3JlZAordGVzdF9leHBlY3RfZXhpc3RzCWJhcmUtd29ya3RyZWUvaWdub3JlZC1ieS10cmVlCit0ZXN0X2V4cGVjdF9leGlzdHMJYmFyZS13b3JrdHJlZS9pZ25vcmVkLWJ5LXdvcmt0cmVlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cG9ydC1zdWJzdCcgJworCWdpdCBsb2cgIi0tcHJldHR5PWZvcm1hdDpBJHtTVUJTVEZPUk1BVH1PIiBIRUFEID5zdWJzdGZpbGUxLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgbm9zdWJzdGZpbGUgYXJjaGl2ZS9ub3N1YnN0ZmlsZSAmJgorCXRlc3RfY21wIHN1YnN0ZmlsZTEuZXhwZWN0ZWQgYXJjaGl2ZS9zdWJzdGZpbGUxICYmCisJdGVzdF9jbXAgc3Vic3RmaWxlMiBhcmNoaXZlL3N1YnN0ZmlsZTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHRhci10cmVlIHZzLiBnaXQgYXJjaGl2ZSB3aXRoIHdvcmt0cmVlIGF0dHJpYnV0ZXMnICcKKwlnaXQgdGFyLXRyZWUgSEVBRCA+dGFyLXRyZWUudGFyICYmCisJdGVzdF9jbXAgd29ya3RyZWUudGFyIHRhci10cmVlLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdGFyLXRyZWUgdnMuIGdpdCBhcmNoaXZlIHdpdGggd29ya3RyZWUgYXR0cnMsIGJhcmUnICcKKwkoY2QgYmFyZSAmJiBnaXQgdGFyLXRyZWUgSEVBRCkgPmJhcmUtdGFyLXRyZWUudGFyICYmCisJdGVzdF9jbXAgYmFyZS13b3JrdHJlZS50YXIgYmFyZS10YXItdHJlZS50YXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MTAwLW1haWxpbmZvLnNoIGIvdC90NTEwMC1tYWlsaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZTY0YTdhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC1tYWlsaW5mby5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtYWlsaW5mbyBhbmQgZ2l0IG1haWxzcGxpdCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgc2FtcGxlIGJveCcgXAorCSdnaXQgbWFpbHNwbGl0IC1vLiAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9zYW1wbGUubWJveCA+bGFzdCAmJgorCWxhc3Q9YGNhdCBsYXN0YCAmJgorCWVjaG8gdG90YWwgaXMgJGxhc3QgJiYKKwl0ZXN0IGBjYXQgbGFzdGAgPSAxNycKKworY2hlY2tfbWFpbGluZm8gKCkgeworCW1haWw9JDEgb3B0PSQyCisJbW89IiRtYWlsJG9wdCIKKwlnaXQgbWFpbGluZm8gLXUgJG9wdCBtc2ckbW8gcGF0Y2gkbW8gPCRtYWlsID5pbmZvJG1vICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbXNnJG1vIG1zZyRtbyAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL3BhdGNoJG1vIHBhdGNoJG1vICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvaW5mbyRtbyBpbmZvJG1vCit9CisKKworZm9yIG1haWwgaW4gYGVjaG8gMDAqYAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJtYWlsaW5mbyAkbWFpbCIgJworCQljaGVja19tYWlsaW5mbyAkbWFpbCAiIiAmJgorCQlpZiB0ZXN0IC1mICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL21zZyRtYWlsLS1zY2lzc29ycworCQl0aGVuCisJCQljaGVja19tYWlsaW5mbyAkbWFpbCAtLXNjaXNzb3JzCisJCWZpICYmCisJCWlmIHRlc3QgLWYgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbXNnJG1haWwtLW5vLWluYm9keS1oZWFkZXJzCisJCXRoZW4KKwkJCWNoZWNrX21haWxpbmZvICRtYWlsIC0tbm8taW5ib2R5LWhlYWRlcnMKKwkJZmkKKwknCitkb25lCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgYm94IHdpdGggcmZjMjA0NyBzYW1wbGVzJyBcCisJJ21rZGlyIHJmYzIwNDcgJiYKKwlnaXQgbWFpbHNwbGl0IC1vcmZjMjA0NyAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveCBcCisJICA+cmZjMjA0Ny9sYXN0ICYmCisJbGFzdD1gY2F0IHJmYzIwNDcvbGFzdGAgJiYKKwllY2hvIHRvdGFsIGlzICRsYXN0ICYmCisJdGVzdCBgY2F0IHJmYzIwNDcvbGFzdGAgPSAxMScKKworZm9yIG1haWwgaW4gYGVjaG8gcmZjMjA0Ny8wMCpgCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1haWxpbmZvICRtYWlsIiAnCisJCWdpdCBtYWlsaW5mbyAtdSAkbWFpbC1tc2cgJG1haWwtcGF0Y2ggPCRtYWlsID4kbWFpbC1pbmZvICYmCisJCWVjaG8gbXNnICYmCisJCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL2VtcHR5ICRtYWlsLW1zZyAmJgorCQllY2hvIHBhdGNoICYmCisJCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL2VtcHR5ICRtYWlsLXBhdGNoICYmCisJCWVjaG8gaW5mbyAmJgorCQl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9yZmMyMDQ3LWluZm8tJChiYXNlbmFtZSAkbWFpbCkgJG1haWwtaW5mbworCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzcGVjdCBOVUxzJyAnCisKKwlnaXQgbWFpbHNwbGl0IC1kMyAtby4gIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbnVsLXBsYWluICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbnVsLXBsYWluIDAwMSAmJgorCShjYXQgMDAxIHwgZ2l0IG1haWxpbmZvIG1zZyBwYXRjaCkgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IHBhdGNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUHJlc2VydmUgTlVMcyBvdXQgb2YgTUlNRSBlbmNvZGVkIG1lc3NhZ2UnICcKKworCWdpdCBtYWlsc3BsaXQgLWQ1IC1vLiAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9udWwtYjY0LmluICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbnVsLWI2NC5pbiAwMDAwMSAmJgorCWdpdCBtYWlsaW5mbyBtc2cgcGF0Y2ggPDAwMDAxICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbnVsLWI2NC5leHBlY3QgcGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyBvbiBmcm9tIGhlYWRlciB3aXRob3V0IG5hbWUgd29ya3MnICcKKworCW1rZGlyIGluZm8tZnJvbSAmJgorCWdpdCBtYWlsc3BsaXQgLW9pbmZvLWZyb20gIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvaW5mby1mcm9tLmluICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvaW5mby1mcm9tLmluIGluZm8tZnJvbS8wMDAxICYmCisJZ2l0IG1haWxpbmZvIGluZm8tZnJvbS9tc2cgaW5mby1mcm9tL3BhdGNoIFwKKwkgIDxpbmZvLWZyb20vMDAwMSA+aW5mby1mcm9tL291dCAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL2luZm8tZnJvbS5leHBlY3QgaW5mby1mcm9tL291dAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTEwMC8uZ2l0YXR0cmlidXRlcyBiL3QvdDUxMDAvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZjUxNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSw0IEBACittc2cqCWVuY29kaW5nPVVURi04CitpbmZvKgllbmNvZGluZz1VVEYtOAorcmZjMjA0Ny1pbmZvLSoJZW5jb2Rpbmc9VVRGLTgKK3NhbXBsZS5tYm94CWVuY29kaW5nPVVURi04CmRpZmYgLS1naXQgYS90L3Q1MTAwL2VtcHR5IGIvdC90NTEwMC9lbXB0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9lbXB0eQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvLWZyb20uZXhwZWN0IGIvdC90NTEwMC9pbmZvLWZyb20uZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWQyZWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8tZnJvbS5leHBlY3QKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IGJhcmVAZXhhbXBsZS5jb20KK0VtYWlsOiBiYXJlQGV4YW1wbGUuY29tCitTdWJqZWN0OiB0ZXN0aW5nIGJhcmUgYWRkcmVzcyBpbiBmcm9tIGhlYWRlcgorRGF0ZTogU3VuLCAyNSBNYXkgMjAwOCAwMDozODoxOCAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8tZnJvbS5pbiBiL3QvdDUxMDAvaW5mby1mcm9tLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMDgyMDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8tZnJvbS5pbgpAQCAtMCwwICsxLDggQEAKK0Zyb20gNjY3ZDg5NDBlNzE5Y2RkZWUxY2ZlMjM3Y2JiZTIxNWUyMDI3MGIwOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGJhcmVAZXhhbXBsZS5jb20KK0RhdGU6IFN1biwgMjUgTWF5IDIwMDggMDA6Mzg6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGVzdGluZyBiYXJlIGFkZHJlc3MgaW4gZnJvbSBoZWFkZXIKKworY29tbWl0IG1lc3NhZ2UKKy0tLQorcGF0Y2gKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDEgYi90L3Q1MTAwL2luZm8wMDAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NTE1MzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDAxCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBICh6enopIFUgVGhvciAoQ29tbWVudCkKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogYSBjb21taXQuCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwMiBiL3QvdDUxMDAvaW5mbzAwMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliYjBmZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDIKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGFub3RoZXIgcGF0Y2gKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDAzIGIvdC90NTEwMC9pbmZvMDAwMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDBkMTIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwMwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogdGhpcmQgcGF0Y2gKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDA0IGIvdC90NTEwMC9pbmZvMDAwNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTZjMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwNApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogWU9TSElGVUpJIEhpZGVha2kgLyDlkInol6Toi7HmmI4KK0VtYWlsOiB5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZworU3ViamVjdDogR0lUOiBUcnkgYWxsIGFkZHJlc3NlcyBmb3IgZ2l2ZW4gcmVtb3RlIG5hbWUKK0RhdGU6IFRodSwgMjEgSnVsIDIwMDUgMDk6MTA6MzYgLTA0MDAgKEVEVCkKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwNSBiL3QvdDUxMDAvaW5mbzAwMDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhNDZmYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDUKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IERhdmlkIEvDpWdlZGFsCitFbWFpbDogZGF2aWRrQGx5c2F0b3IubGl1LnNlCitTdWJqZWN0OiBGaXhlZCB0d28gYnVncyBpbiBnaXQtY3ZzaW1wb3J0LXNjcmlwdC4KK0RhdGU6IE1vbiwgMTUgQXVnIDIwMDUgMjA6MTg6MjUgKzAyMDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwNiBiL3QvdDUxMDAvaW5mbzAwMDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwNTI3NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDYKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGEgY29tbWl0LgorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDcgYi90L3Q1MTAwL2luZm8wMDA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YmIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDA3CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBhbm90aGVyIHBhdGNoCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwOCBiL3QvdDUxMDAvaW5mbzAwMDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhMjk1MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDgKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEp1bmlvIEMgSGFtYW5vCitFbWFpbDoganVuaW9Aa2VybmVsLm9yZworU3ViamVjdDogYW5vdGhlciBwYXRjaAorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDkgYi90L3Q1MTAwL2luZm8wMDA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNjYzMjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDA5CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBGIFUgQmFyCitFbWFpbDogZi51LmJhckBleGFtcGxlLmNvbQorU3ViamVjdDogdXBkYXRlcworRGF0ZTogTW9uLCAxNyBTZXAgMjAwMSAwMDowMDowMCArMDkwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDEwIGIvdC90NTEwMC9pbmZvMDAxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzkxMjQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxMApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogTHVrYXMgU2FuZHN0csO2bQorRW1haWw6IGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlCitTdWJqZWN0OiBnaXQtbWFpbGluZm86IEZpeCBnZXR0aW5nIHRoZSBzdWJqZWN0IGZyb20gdGhlIGJvZHkKK0RhdGU6IFRodSwgMTAgSnVsIDIwMDggMjM6NDE6MzMgKzAyMDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxMSBiL3QvdDUxMDAvaW5mbzAwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1YTYwNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTEKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IFh5enp5CitEYXRlOiBGcmksIDggQXVnIDIwMDggMTM6MDg6MzcgKzAyMDAgKENFU1QpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTIgYi90L3Q1MTAwL2luZm8wMDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTIxNmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDEyCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBEbWl0cml5IEJsaW5vdgorRW1haWw6IGJkYUBtbnNzcGIucnUKK1N1YmplY3Q6INCY0LfQvNC10L3RkdC9INGB0L/QuNGB0L7QuiDQv9Cw0LrQtdGC0L7QsiDQvdC10L7QsdGF0L7QtNC40LzRi9GFINC00LvRjyDRgdCx0L7RgNC60LgKK0RhdGU6IFdlZCwgMTIgTm92IDIwMDggMTc6NTQ6NDEgKzAzMDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxMyBiL3QvdDUxMDAvaW5mbzAwMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlMDQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTMKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGEgcGF0Y2gKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE0IGIvdC90NTEwMC9pbmZvMDAxNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODU2NmIzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxNApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogSnVuaW8gSGFtYW5vCitFbWFpbDoganVua2lvQGNveC5uZXQKK1N1YmplY3Q6IEJMQUggT05FCitEYXRlOiBUaHUsIDIwIEF1ZyAyMDA5IDE3OjE4OjIyIC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTQtLXNjaXNzb3JzIGIvdC90NTEwMC9pbmZvMDAxNC0tc2Npc3NvcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5YzhkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTQtLXNjaXNzb3JzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBKdW5pbyBDIEhhbWFubworRW1haWw6IGdpdHN0ZXJAcG9ib3guY29tCitTdWJqZWN0OiBUZWFjaCBtYWlsaW5mbyB0byBpZ25vcmUgZXZlcnl0aGluZyBiZWZvcmUgLS0gPjggLS0gbWFyaworRGF0ZTogVGh1LCAyMCBBdWcgMjAwOSAxNzoxODoyMiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE1IGIvdC90NTEwMC9pbmZvMDAxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE0ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxNQpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogCitFbWFpbDogCitTdWJqZWN0OiBjaGVjayBib2d1cyBib2R5IGhlYWRlciAoZnJvbSkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE1LS1uby1pbmJvZHktaGVhZGVycyBiL3QvdDUxMDAvaW5mbzAwMTUtLW5vLWluYm9keS1oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDhkNzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDE1LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGZyb20pCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNiBiL3QvdDUxMDAvaW5mbzAwMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjY2QwZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTYKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGNoZWNrIGJvZ3VzIGJvZHkgaGVhZGVyIChkYXRlKQorRGF0ZTogYm9ndXMgCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTYtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9pbmZvMDAxNi0tbm8taW5ib2R5LWhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4NTdkNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTYtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBjaGVjayBib2d1cyBib2R5IGhlYWRlciAoZGF0ZSkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE3IGIvdC90NTEwMC9pbmZvMDAxNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmJjODlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxNwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogQSBFIEkgTyBVCitEYXRlOiBNb24sIDE3IFNlcCAyMDEyIDE0OjIzOjQ0IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwMSBiL3QvdDUxMDAvbXNnMDAwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjc1YTlhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDAxCkBAIC0wLDAgKzEsMiBAQAorSGVyZSBpcyBhIHBhdGNoIGZyb20gQSBVIFRob3IuCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwMiBiL3QvdDUxMDAvbXNnMDAwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjU0NmVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDAyCkBAIC0wLDAgKzEsMjEgQEAKK0hlcmUgaXMgYSBwYXRjaCBmcm9tIEEgVSBUaG9yLiAgVGhpcyBhZGRyZXNzZXMgdGhlIGlzc3VlIHJhaXNlZCBpbiB0aGUKK21lc3NhZ2U6CisKK0Zyb206IE5pdCBQaWNrZXIgPG5pdC5waWNrZXJAZXhhbXBsZS5uZXQ+CitTdWJqZWN0OiBmb28gaXMgdG9vIG9sZAorTWVzc2FnZS1JZDogPG5pdHBpY2tlci4xMjEyMTIxMkBleGFtcGxlLm5ldD4KKworSG9wZWZ1bGx5IHRoaXMgd291bGQgZml4IHRoZSBwcm9ibGVtIHN0YXRlZCB0aGVyZS4KKworCitJIGhhdmUgaW5jbHVkZWQgYW4gZXh0cmEgYmxhbmsgbGluZSBhYm92ZSwgYnV0IGl0IGRvZXMgbm90IGhhdmUgdG8gYmUKK3N0cmlwcGVkIGF3YXkgaGVyZSwgYWxvbmcgd2l0aCB0aGUgICAgICAgICAgICAgICAJCSAgIAord2hpdGVzcGFjZXMgYXQgdGhlIGVuZCBvZiB0aGUgYWJvdmUgbGluZS4gIFRoZXkgYXJlIGV4cGVjdGVkIHRvIGJlIHNxdWFzaGVkCit3aGVuIHRoZSBtZXNzYWdlIGlzIG1hZGUgaW50byBhIGNvbW1pdCBsb2cgYnkgc3RyaXBzcGFjZSwKK0Fsc28sIHRoZXJlIGFyZSB0aHJlZSBibGFuayBsaW5lcyBhZnRlciB0aGlzIHBhcmFncmFwaCwKK3R3byB0cnVseSBibGFuayBhbmQgYW5vdGhlciBmdWxsIG9mIHNwYWNlcyBpbiBiZXR3ZWVuLgorCisgICAgICAgICAgICAKKworSG9wZSB0aGlzIGhlbHBzLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDMgYi90L3Q1MTAwL21zZzAwMDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjNjgxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwMwpAQCAtMCwwICsxLDkgQEAKK0hlcmUgaXMgYSBwYXRjaCBmcm9tIEEgVSBUaG9yLiAgVGhpcyBhZGRyZXNzZXMgdGhlIGlzc3VlIHJhaXNlZCBpbiB0aGUKK21lc3NhZ2U6CisKK0Zyb206IE5pdCBQaWNrZXIgPG5pdC5waWNrZXJAZXhhbXBsZS5uZXQ+CitTdWJqZWN0OiBmb28gaXMgdG9vIG9sZAorTWVzc2FnZS1JZDogPG5pdHBpY2tlci4xMjEyMTIxMkBleGFtcGxlLm5ldD4KKworSG9wZWZ1bGx5IHRoaXMgd291bGQgZml4IHRoZSBwcm9ibGVtIHN0YXRlZCB0aGVyZS4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDA0IGIvdC90NTEwMC9tc2cwMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOGJhM2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMDQKQEAgLTAsMCArMSw3IEBACitIZWxsby4KKworVHJ5IGFsbCBhZGRyZXNzZXMgZm9yIGdpdmVuIHJlbW90ZSBuYW1lIHVudGlsIGl0IHN1Y2NlZWRzLgorQWxzbyBzdXBwb3J0cyBJUHY2LgorCitTaWduZWQtb2YtYnk6IEhpZGVha2kgWU9TSElGVUpJIDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDA1IGIvdC90NTEwMC9tc2cwMDA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOTRjZDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMDUKQEAgLTAsMCArMSwxMyBAQAorVGhlIGdpdC1jdnNpbXBvcnQtc2NyaXB0IGhhZCBhIGNvcHVsZSBvZiBzbWFsbCBidWdzIHRoYXQgcHJldmVudGVkIG1lCitmcm9tIGltcG9ydGluZyBhIGJpZyBDVlMgcmVwb3NpdG9yeS4KKworVGhlIGZpcnN0IHdhcyB0aGF0IGl0IGRpZG4ndCBoYW5kbGUgcmVtb3ZlZCBmaWxlcyB3aXRoIGEgbXVsdGktZGlnaXQKK3ByaW1hcnkgcmV2aXNpb24gbnVtYmVyLgorCitUaGUgc2Vjb25kIHdhcyB0aGF0IGl0IHdhcyBhc2tpbmcgdGhlIENWUyBzZXJ2ZXIgZm9yICJGIiBtZXNzYWdlcywKK2FsdGhvdWdoIHRoZXkgd2VyZSBub3QgaGFuZGxlZC4KKworSSBhbHNvIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoYXQgc2NyaXB0IHRvIGNvcnJlc3BvbmQgdG8KK2FjdHVhbCBmbGFncy4KKworU2lnbmVkLW9mZi1ieTogRGF2aWQgS8OlZ2VkYWwgPGRhdmlka0BseXNhdG9yLmxpdS5zZT4KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwNiBiL3QvdDUxMDAvbXNnMDAwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjc1YTlhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDA2CkBAIC0wLDAgKzEsMiBAQAorSGVyZSBpcyBhIHBhdGNoIGZyb20gQSBVIFRob3IuCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwNyBiL3QvdDUxMDAvbXNnMDAwNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWIyM2MwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDA3CkBAIC0wLDAgKzEsMiBAQAorSGVyZSBpcyBhbiBlbXB0eSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDggYi90L3Q1MTAwL21zZzAwMDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgwZWNiOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwOApAQCAtMCwwICsxLDQgQEAKKz5IZXJlIGlzIGFuIGVtcHR5IHBhdGNoIGZyb20gQSBVIFRob3IuCisKK0hleSB5b3UgZm9yZ290IHRoZSBwYXRjaCEKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDA5IGIvdC90NTEwMC9tc2cwMDA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmUxMzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMDkKQEAgLTAsMCArMSwyIEBACitUaGlzIGlzIHRvIGZpeCBkaWZmLWZvcm1hdCBkb2N1bWVudGF0aW9uLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTAgYi90L3Q1MTAwL21zZzAwMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2YzIzMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxMApAQCAtMCwwICsxLDUgQEAKKyJTdWJqZWN0OiAiIGlzbid0IGluIHRoZSBzdGF0aWMgYXJyYXkgImhlYWRlciIsIGFuZCB0aHVzCittZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgNykgd2lsbCBuZXZlciBtYXRjaC4KKworU2lnbmVkLW9mZi1ieTogTHVrYXMgU2FuZHN0csO2bSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitTaWduZWQtb2ZmLWJ5OiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTEgYi90L3Q1MTAwL21zZzAwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2N2YyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxMQpAQCAtMCwwICsxLDIgQEAKK0hlcmUgY29tZXMgYSBjb21taXQgbG9nIG1lc3NhZ2UsIGFuZAoraXRzIHNlY29uZCBsaW5lIGlzIGhlcmUuCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTIgYi90L3Q1MTAwL21zZzAwMTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjMmJmNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxMgpAQCAtMCwwICsxLDcgQEAKK3RleHRsaXZlLSog0LjRgdC/0YDQsNCy0LvQtdC90Ysg0L3QsCB0ZXhsaXZlLSoKK2RvY3V0aWxzINC30LDQvNC10L3RkdC9INC90LAgcHl0aG9uLWRvY3V0aWxzCisKK9CU0LXQudGB0YLQstC40YLQtdC70YzQvdC+LCDQvtC60LDQt9Cw0LvQvtGB0YwsINGH0YLQviByZXN0MndlYiDQstGL0YLRj9Cz0LjQstCw0LXRgiDQt9CwINGB0L7QsdC+0LkKK3B5dGhvbi1kb2N1dGlscy4g0JIg0YLQviDQstGA0LXQvNGPINC60LDQuiDRgdCw0LwgcmVzdDJ3ZWIg0L3QtSDQvdGD0LbQtdC9LgorCitTaWduZWQtb2ZmLWJ5OiBEbWl0cml5IEJsaW5vdiA8YmRhQG1uc3NwYi5ydT4KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxMyBiL3QvdDUxMDAvbXNnMDAxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDEzCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTQgYi90L3Q1MTAwL21zZzAwMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlNWNkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxNApAQCAtMCwwICsxLDE4IEBACitJbiByZWFsIGxpZmUsIHdlIHdpbGwgc2VlIGEgZGlzY3Vzc2lvbiB0aGF0IGluc3BpcmVkIHRoaXMgcGF0Y2gKK2Rpc2N1c3NpbmcgcmVsYXRlZCBhbmQgdW5yZWxhdGVkIHRoaW5ncyBhcm91bmQgPjggc2Npc3NvcnMgbWFyaworaW4gdGhpcyBwYXJ0IG9mIHRoZSBtZXNzYWdlLgorCitTdWJqZWN0OiBbUEFUQ0hdIEJMQUggVFdPCisKK0FuZCB0aGVuIHdlIHdpbGwgc2VlIHRoZSBzY2lzc29ycy4KKworIFRoaXMgbGluZSBpcyBub3QgYSBzY2lzc29ycyBtYXJrIC0tID44IC0tIGJ1dCB0YWxrcyBhYm91dCBpdC4KKyAtIC0gPjggLSAtIHBsZWFzZSByZW1vdmUgZXZlcnl0aGluZyBhYm92ZSB0aGlzIGxpbmUgLSAtID44IC0gLQorCitTdWJqZWN0OiBbUEFUQ0hdIFRlYWNoIG1haWxpbmZvIHRvIGlnbm9yZSBldmVyeXRoaW5nIGJlZm9yZSAtLSA+OCAtLSBtYXJrCitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CisKK1RoaXMgdGVhY2hlcyBtYWlsaW5mbyB0aGUgc2Npc3NvcnMgLS0gPjggLS0gbWFyazsgdGhlIGNvbW1hbmQgaWdub3JlcworZXZlcnl0aGluZyBiZWZvcmUgaXQgaW4gdGhlIG1lc3NhZ2UgYm9keS4KKworU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDE0LS1zY2lzc29ycyBiL3QvdDUxMDAvbXNnMDAxNC0tc2Npc3NvcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5YzZhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxNC0tc2Npc3NvcnMKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlYWNoZXMgbWFpbGluZm8gdGhlIHNjaXNzb3JzIC0tID44IC0tIG1hcms7IHRoZSBjb21tYW5kIGlnbm9yZXMKK2V2ZXJ5dGhpbmcgYmVmb3JlIGl0IGluIHRoZSBtZXNzYWdlIGJvZHkuCisKK1NpZ25lZC1vZmYtYnk6IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNSBiL3QvdDUxMDAvbXNnMDAxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWJiM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE1CkBAIC0wLDAgKzEsMiBAQAorICAtIGEgbGlzdAorICAtIG9mIHN0dWZmCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTUtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9tc2cwMDE1LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTUxMTViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE1LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDMgQEAKK0Zyb206IGJvZ29zaXR5CisgIC0gYSBsaXN0CisgIC0gb2Ygc3R1ZmYKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNiBiL3QvdDUxMDAvbXNnMDAxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDlhZGFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE2CkBAIC0wLDAgKzEsMiBAQAorYW5kIHNvbWUgY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTYtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9tc2cwMDE2LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDYzZjUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE2LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDQgQEAKK0RhdGU6IGJvZ3VzCisKK2FuZCBzb21lIGNvbnRlbnQKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDE3IGIvdC90NTEwMC9tc2cwMDE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZTA5MDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTcKQEAgLTAsMCArMSwyIEBACitOZXcgY29udGVudCBoZXJlCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbnVsLWI2NC5leHBlY3QgYi90L3Q1MTAwL251bC1iNjQuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDY4MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL251bC1iNjQuZXhwZWN0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbnVsLWI2NC5pbiBiL3QvdDUxMDAvbnVsLWI2NC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU0MGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9udWwtYjY0LmluCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gNjY3ZDg5NDBlNzE5Y2RkZWUxY2ZlMjM3Y2JiZTIxNWUyMDI3MGIwOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK0RhdGU6IFN1biwgMjUgTWF5IDIwMDggMDA6Mzg6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gc2Vjb25kCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworTFMwdENpQm1hV3hsSUh3Z0lFSnBiaUF4TXpVM0lDMCtJREV6TlRjZ1lubDBaWE1LSURFZ1ptbHNaWE1nWTJoaGJtZGxaQ3dnCitNQ0JwYm5ObGNuUnBiMjV6S0NzcExDQXdJR1JsYkdWMGFXOXVjeWd0S1FvS1pHbG1aaUF0TFdkcGRDQmhMMlpwYkdVZ1lpOW0KK2FXeGxDbWx1WkdWNElEYzNNell4WkRndUxqbGxNREppWlRZZ01UQXdOalEwQ2kwdExTQmhMMlpwYkdVS0t5c3JJR0l2Wm1scworWlFwQVFDQXRNU3d4TWlBck1Td3hNaUJBUUFvZ1RHOXlaVzBnYVhCemRXMGdaRzlzYjNJZ2MybDBJR0Z0WlhRc0lHTnZibk5sCitZM1JsZEhWbGNpQmhaR2x3YVhOamFXNW5JR1ZzYVhRdUlGTjFjM0JsYm1ScGMzTmxDaUJ6YVhRZ1lXMWxkQ0IwZFhKd2FYTWcKK1pXZGxkQ0JsYzNRZ1kzVnljM1Z6SUd4aGIzSmxaWFF1SUVGc2FYRjFZVzBnYldGMWNtbHpMaUJRY21GbGMyVnVkQW90ZG05cworZFhSd1lYUXVJRkJ5YjJsdUlHbHVJSEIxY25WekxpQk9kV3hzWVNCMWNtNWhJSE5oY0dsbGJpd2daR0Z3YVdKMWN5QnphWFFnCitZVzFsZEN3S0szWnZiSFYwY0dGMExpQlFjbTlwYmlCcGJpQndkWEoxY3k0Z1RuVnNiR0VnZFhKdVlTQnpZWEJwWlc0c0lHUmgKK2NHa0FkWE1nYzJsMElHRnRaWFFzQ2lCb1pXNWtjbVZ5YVhRZ2JtVmpMQ0IwWlcxd2RYTWdaWFVzSUcxcExpQlZkQ0J3YjNKMAorWVN3Z2JHVnZJR2xrSUhScGJtTnBaSFZ1ZENCMWJHeGhiV052Y25CbGNpd0tMWFpsYkdsMElHWmxiR2x6SUhSeWFYTjBhWEYxCitaU0JoYm5SbExDQmhkQ0JzYjJKdmNuUnBjeUJrYVdGdElIQmxaR1VnZFhRZ1pIVnBMaUJRY205cGJpQmhZd29yZG1Wc2FYUWcKK1ptVnNhWE1nZEhKcGMzUnBjWFZsSUdGdWRHVXNJR0YwSUd4dkFHOXlkR2x6SUdScFlXMGdjR1ZrWlNCMWRDQmtkV2t1SUZCeQorYjJsdUlHRmpDaUJzWldOMGRYTXVJRVJ2Ym1WaklHRjBJRzFoYzNOaElHRmpJR2x3YzNWdElHaGxibVJ5WlhKcGRDQnpiMnhzCithV05wZEhWa2FXNHVJRTVoYlNCa2FXTjBkVzBLSUc1cGMya2djMlZrSUcxcExpQkVkV2x6SUhObFpDQmhiblJsTGlCVmRDQjIKK2FYUmhaU0JsYzNRZ2RYUWdaSFZwSUhWc2RISnBZMmxsY3lCa2FXZHVhWE56YVcwdUNpQUtMVWx1SUhabGJDQnZaR2x2SUdWbgorWlhRZ2JtbHpiQ0JqYjI1MllXeHNhWE1nZG05c2RYUndZWFF1SUUxdmNtSnBJSFpwZEdGbElHNXBZbWd1SUU1MWJHeGhiUW9yCitTVzRnZG1Wc0lHOWthVzhnWldkbGRDQnVhWE5zSUdOdmJuWmhiR3hwY3lCMmIyeDFkSEJoZEM0Z1RXOXlBR2tnZG1sMFlXVWcKK2Jta0FhQzRnVG5Wc2JHRnRDaUJoWTJOMWJYTmhiaXdnWkc5c2IzSWdjWFZwY3lCaGJHbHhkV0Z0SUhOalpXeGxjbWx6Y1hWbAorTENCbGJHbDBJR1Z1YVcwZ1kyOXVaR2x0Wlc1MGRXMEtJRzFoZFhKcGN5d2dibTl1SUhSeWFYTjBhWEYxWlNCdFlYVnlhWE1nCitkSFZ5Y0dseklHVjBJRzFoZFhKcGN5NGdWWFFnYm05dUlHNXBjMnd1SUU1aGJTQmthV0Z0Q2lCdGFTd2djMlZ0Y0dWeUlIQnYKK2MzVmxjbVVzSUdWc1pXbG1aVzVrSUhWMExDQmhkV04wYjNJZ2RtVnNMQ0JsY21GMExpQlRaV1FnY0c5emRXVnlaUXBBUUNBdAorTVRZc055QXJNVFlzTnlCQVFDQnpaV1FnWlhOMExpQkZkR2xoYlNCa2FXRnRJR1psYkdsekxDQm1aWEp0Wlc1MGRXMGdaV2RsCitkQ3dnWVdScGNHbHpZMmx1WnlCaGRDd2djRzl6ZFdWeVpTQnBiaXdLSUdSMWFTNGdSWFJwWVcwZ2JIVmpkSFZ6TGdvZ0NpQk8KK2RXeHNZU0JwWkNCaGRXZDFaUzRnVG1GdElHbGhZM1ZzYVhNZ1lXTmpkVzF6WVc0Z2JtbHphUzRnVTNWemNHVnVaR2x6YzJVZworY0c5MFpXNTBhUzRnVG5WdVl3b3RkbUZ5YVhWeklHRjFaM1ZsSUc1bFl5QnZjbU5wTGlCVmRDQmpiMjVrYVcxbGJuUjFiU0JrCitiMnh2Y2lCellXZHBkSFJwY3lCdWFXSm9MaUJUZFhOd1pXNWthWE56WlFvcmRtRnlhWFZ6SUdGMVozVmxJRzVsWXlCdmNtTnAKK0xpQlZkQ0JqYjI1a2FXMWxiblIxYlNCa2IyeHZjaUJ6WVdkcGRIUnBjeUJ1YVFCb0xpQlRkWE53Wlc1a2FYTnpaUW9nZEdWdAorY0c5eUlHeGxZM1IxY3lCelpXUWdiV0ZuYm1FdUlGTjFjM0JsYm1ScGMzTmxJSEJ2ZEdWdWRHa3VJRTUxYkd4aGJTQjBaVzF3CitiM0lnYVhCemRXMHVJRk5sWkFvZ2JXOXNaWE4wYVdVZ2RHVnNiSFZ6TGlCUWFHRnpaV3hzZFhNZ2JHbG5kV3hoTGlCSmJpQjIKK1pXaHBZM1ZzWVNCMWJIUnlhV05sY3dvZ2JtbHphUzRnVTNWemNHVnVaR2x6YzJVZ1ptVnNhWE1nWVhWbmRXVXNJSEJsYkd4bAorYm5SbGMzRjFaU0JoZEN3Z1pHbGpkSFZ0SUhacGRtVnljbUVzQ2kwdElBb3hMalV1TlM0eExqVTBNQzVuTlRjM09EQUtDZz09CmRpZmYgLS1naXQgYS90L3Q1MTAwL251bC1wbGFpbiBiL3QvdDUxMDAvbnVsLXBsYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDA2OTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL251bC1wbGFpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwMSBiL3QvdDUxMDAvcGF0Y2gwMDAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwMQpAQCAtMCwwICsxLDE0IEBACistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwMiBiL3QvdDUxMDAvcGF0Y2gwMDAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwMgpAQCAtMCwwICsxLDE0IEBACistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwMyBiL3QvdDUxMDAvcGF0Y2gwMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwMwpAQCAtMCwwICsxLDE0IEBACistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwNCBiL3QvdDUxMDAvcGF0Y2gwMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NjQ1OGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwNApAQCAtMCwwICsxLDkzIEBACitkaWZmIC0tZ2l0IGEvY29ubmVjdC5jIGIvY29ubmVjdC5jCistLS0gYS9jb25uZWN0LmMKKysrKyBiL2Nvbm5lY3QuYworQEAgLTk2LDQyICs5Niw1NyBAQCBzdGF0aWMgZW51bSBwcm90b2NvbCBnZXRfcHJvdG9jb2woY29uc3QgCisgCWRpZSgiSSBkb24ndCBoYW5kbGUgcHJvdG9jb2wgJyVzJyIsIG5hbWUpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBsb29rdXBfaG9zdChjb25zdCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmluKQorLXsKKy0Jc3RydWN0IGFkZHJpbmZvICpyZXM7CistCWludCByZXQ7CistCistCXJldCA9IGdldGFkZHJpbmZvKGhvc3QsIE5VTEwsIE5VTEwsICZyZXMpOworLQlpZiAocmV0KQorLQkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgZ2FpX3N0cmVycm9yKHJldCkpOworLQkqaW4gPSAqcmVzLT5haV9hZGRyOworLQlmcmVlYWRkcmluZm8ocmVzKTsKKy19CisrI2RlZmluZSBTVFJfKHMpCSMgcworKyNkZWZpbmUgU1RSKHMpCVNUUl8ocykKKyAKKyBzdGF0aWMgaW50IGdpdF90Y3BfY29ubmVjdChpbnQgZmRbMl0sIGNvbnN0IGNoYXIgKnByb2csIGNoYXIgKmhvc3QsIGNoYXIgKnBhdGgpCisgeworLQlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKy0JaW50IHBvcnQgPSBERUZBVUxUX0dJVF9QT1JULCBzb2NrZmQ7CistCWNoYXIgKmNvbG9uOworLQorLQljb2xvbiA9IHN0cmNocihob3N0LCAnOicpOworLQlpZiAoY29sb24pIHsKKy0JCWNoYXIgKmVuZDsKKy0JCXVuc2lnbmVkIGxvbmcgbiA9IHN0cnRvdWwoY29sb24rMSwgJmVuZCwgMCk7CistCQlpZiAoY29sb25bMV0gJiYgISplbmQpIHsKKy0JCQkqY29sb24gPSAwOworLQkJCXBvcnQgPSBuOworKwlpbnQgc29ja2ZkID0gLTE7CisrCWNoYXIgKmNvbG9uLCAqZW5kOworKwljaGFyICpwb3J0ID0gU1RSKERFRkFVTFRfR0lUX1BPUlQpOworKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTAsICphaTsKKysJaW50IGdhaTsKKysKKysJaWYgKGhvc3RbMF0gPT0gJ1snKSB7CisrCQllbmQgPSBzdHJjaHIoaG9zdCArIDEsICddJyk7CisrCQlpZiAoZW5kKSB7CisrCQkJKmVuZCA9IDA7CisrCQkJZW5kKys7CisrCQkJaG9zdCsrOworKwkJfSBlbHNlCisrCQkJZW5kID0gaG9zdDsKKysJfSBlbHNlCisrCQllbmQgPSBob3N0OworKwljb2xvbiA9IHN0cmNocihlbmQsICc6Jyk7CisrCisrCWlmIChjb2xvbikKKysJCXBvcnQgPSBjb2xvbiArIDE7CisrCisrCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwloaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworKworKwlnYWkgPSBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAmaGludHMsICZhaSk7CisrCWlmIChnYWkpCisrCQlkaWUoIlVuYWJsZSB0byBsb29rIHVwICVzICglcykiLCBob3N0LCBnYWlfc3RyZXJyb3IoZ2FpKSk7CisrCisrCWZvciAoYWkwID0gYWk7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CisrCQlzb2NrZmQgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworKwkJaWYgKHNvY2tmZCA8IDApCisrCQkJY29udGludWU7CisrCQlpZiAoY29ubmVjdChzb2NrZmQsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSB7CisrCQkJY2xvc2Uoc29ja2ZkKTsKKysJCQlzb2NrZmQgPSAtMTsKKysJCQljb250aW51ZTsKKyAJCX0KKysJCWJyZWFrOworIAl9CisgCistCWxvb2t1cF9ob3N0KGhvc3QsICZhZGRyKTsKKy0JKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYWRkciktPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisrCWZyZWVhZGRyaW5mbyhhaTApOworIAorLQlzb2NrZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fSVApOworIAlpZiAoc29ja2ZkIDwgMCkKKyAJCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSBzb2NrZXQgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CistCWlmIChjb25uZWN0KHNvY2tmZCwgKHZvaWQgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSA8IDApCistCQlkaWUoInVuYWJsZSB0byBjb25uZWN0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworKworIAlmZFswXSA9IHNvY2tmZDsKKyAJZmRbMV0gPSBzb2NrZmQ7CisgCXBhY2tldF93cml0ZShzb2NrZmQsICIlcyAlc1xuIiwgcHJvZywgcGF0aCk7CisKKy0tIAorWU9TSElGVUpJIEhpZGVha2kgQCBVU0FHSSBQcm9qZWN0ICA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CitHUEctRlAgIDogOTAyMiA2NUVCIDFFQ0YgM0FEMSAwQkRGICA4MEQ4IDQ4MDcgRjg5NCBFMDYyIDBFRUEKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDUgYi90L3Q1MTAwL3BhdGNoMDAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjdhMzgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDUKQEAgLTAsMCArMSw2OSBAQAorLS0tCisKKyBEb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCB8IDkgKysrKysrKystCisgZ2l0LWN2c2ltcG9ydC1zY3JpcHQgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKzUwNDUyZjljMGMyZGYxZjA0ZDgzYTI2MjY2YmE3MDRiMTM4NjE2MzIKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC1zY3JpcHQudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LXNjcmlwdC50eHQKK0BAIC0yOSw2ICsyOSwxMCBAQCBPUFRJT05TCisgCWN1cnJlbnRseSwgb25seSB0aGUgOmxvY2FsOiwgOmV4dDogYW5kIDpwc2VydmVyOiBhY2Nlc3MgbWV0aG9kcyAKKyAJYXJlIHN1cHBvcnRlZC4KKyAKKystQyA8dGFyZ2V0LWRpcj46OgorKyAgICAgICAgVGhlIEdJVCByZXBvc2l0b3J5IHRvIGltcG9ydCB0by4gIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndAorKyAgICAgICAgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4gIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorKworIC1pOjoKKyAJSW1wb3J0LW9ubHk6IGRvbid0IHBlcmZvcm0gYSBjaGVja291dCBhZnRlciBpbXBvcnRpbmcuICBUaGlzIG9wdGlvbgorIAllbnN1cmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgY2FjaGUgcmVtYWluIHVudG91Y2hlZCBhbmQgd2lsbAorQEAgLTQ0LDcgKzQ4LDcgQEAgT1BUSU9OUworIAorIC1wIDxvcHRpb25zLWZvci1jdnNwcz46OgorIAlBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGN2c3BzLgorLQlUaGUgb3B0aW9ucyAnLXgnIGFuZCAnLUEnIGFyZSBpbXBsaWNpdCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmUuCisrCVRoZSBvcHRpb25zICctdScgYW5kICctQScgYXJlIGltcGxpY2l0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4KKyAKKyAJSWYgeW91IG5lZWQgdG8gcGFzcyBtdWx0aXBsZSBvcHRpb25zLCBzZXBhcmF0ZSB0aGVtIHdpdGggYSBjb21tYS4KKyAKK0BAIC01Nyw2ICs2MSw5IEBAIE9QVElPTlMKKyAtaDo6CisgCVByaW50IGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KKyAKKysteiA8ZnV6ej46OgorKyAgICAgICAgUGFzcyB0aGUgdGltZXN0YW1wIGZ1enogZmFjdG9yIHRvIGN2c3BzLgorKworIE9VVFBVVAorIC0tLS0tLQorIElmICctdicgaXMgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IHJlcG9ydHMgd2hhdCBpdCBpcyBkb2luZy4KK2RpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LXNjcmlwdCBiL2dpdC1jdnNpbXBvcnQtc2NyaXB0CistLS0gYS9naXQtY3ZzaW1wb3J0LXNjcmlwdAorKysrIGIvZ2l0LWN2c2ltcG9ydC1zY3JpcHQKK0BAIC0xOTAsNyArMTkwLDcgQEAgc3ViIGNvbm4geworIAkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJSb290ICRyZXBvXG4iKTsKKyAKKyAJIyBUcmlhbCBhbmQgZXJyb3Igc2F5cyB0aGF0IHRoaXMgcHJvYmFibHkgaXMgdGhlIG1pbmltdW0gc2V0CistCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIlZhbGlkLXJlc3BvbnNlcyBvayBlcnJvciBWYWxpZC1yZXF1ZXN0cyBNb2RlIE0gTWJpbmFyeSBFIEYgQ2hlY2tlZC1pbiBDcmVhdGVkIFVwZGF0ZWQgTWVyZ2VkIFJlbW92ZWRcbiIpOworKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJWYWxpZC1yZXNwb25zZXMgb2sgZXJyb3IgVmFsaWQtcmVxdWVzdHMgTW9kZSBNIE1iaW5hcnkgRSBDaGVja2VkLWluIENyZWF0ZWQgVXBkYXRlZCBNZXJnZWQgUmVtb3ZlZFxuIik7CisgCisgCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoInZhbGlkLXJlcXVlc3RzXG4iKTsKKyAJJHNlbGYtPnsnc29ja2V0byd9LT5mbHVzaCgpOworQEAgLTY5MSw3ICs2OTEsNyBAQCB3aGlsZSg8Q1ZTPikgeworIAkJdW5saW5rKCR0bXBuYW1lKTsKKyAJCW15ICRtb2RlID0gcG1vZGUoJGN2cy0+eydtb2RlJ30pOworIAkJcHVzaChAbmV3LFskbW9kZSwgJHNoYSwgJGZuXSk7ICMgbWF5IGJlIHJlc3VycmVjdGVkIQorLQl9IGVsc2lmKCRzdGF0ZSA9PSA5IGFuZCAvXlxzKyhcUyspOlxkKD86XC5cZCspKy0+KFxkKD86XC5cZCspKylcKERFQURcKVxzKiQvKSB7CisrCX0gZWxzaWYoJHN0YXRlID09IDkgYW5kIC9eXHMrKFxTKyk6XGQrKD86XC5cZCspKy0+KFxkKyg/OlwuXGQrKSspXChERUFEXClccyokLykgeworIAkJbXkgJGZuID0gJDE7CisgCQkkZm4gPX4gcyNeLysjIzsKKyAJCXB1c2goQG9sZCwkZm4pOworCistLSAKK0RhdmlkIEvlZ2VkYWwKKy0KK1RvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBnaXQiIGluCit0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZworTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDA2IGIvdC90NTEwMC9wYXRjaDAwMDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjOTc3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDA2CkBAIC0wLDAgKzEsMTQgQEAKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDA3IGIvdC90NTEwMC9wYXRjaDAwMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDA3CmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwOCBiL3QvdDUxMDAvcGF0Y2gwMDA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwOApkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDkgYi90L3Q1MTAwL3BhdGNoMDAwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTYxNWMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDkKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK2luZGV4IGI0MjZhMTQuLjk3NzU2ZWMgMTAwNjQ0CistLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK0BAIC04MSw3ICs4MSw3IEBAIFRoZSAiZGlmZiIgZm9ybWF0dGluZyBvcHRpb25zIGNhbiBiZSBjdXN0b21pemVkIHZpYSB0aGUKKyBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0lUX0RJRkZfT1BUUycuICBGb3IgZXhhbXBsZSwgaWYgeW91CisgcHJlZmVyIGNvbnRleHQgZGlmZjoKKyAKKy0gICAgICBHSVRfRElGRl9PUFRTPS1jIGdpdC1kaWZmLWluZGV4IC1wICQoY2F0IC5naXQvSEVBRCkKKysgICAgICBHSVRfRElGRl9PUFRTPS1jIGdpdC1kaWZmLWluZGV4IC1wIEhFQUQKKyAKKyAKKyAyLiBXaGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0lUX0VYVEVSTkFMX0RJRkYnIGlzIHNldCwgdGhlCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxMCBiL3QvdDUxMDAvcGF0Y2gwMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNjgyMWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxMApAQCAtMCwwICsxLDIwIEBACistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IDk2MmFhMzQuLjJkMTUyMGYgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTMzNCw3ICszMzQsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlYWRlcihjaGFyICpsaW5lLCB1bnNpZ25lZCBsaW5lc2l6ZSwgY2hhciAqKmhkcl9kYXRhLCBpbnQgb3ZlcgorIAkJcmV0dXJuIDE7CisgCWlmICghbWVtY21wKCJbUEFUQ0hdIiwgbGluZSwgNykgJiYgaXNzcGFjZShsaW5lWzddKSkgeworIAkJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKy0JCQlpZiAoIW1lbWNtcCgiU3ViamVjdDogIiwgaGVhZGVyW2ldLCA5KSkgeworKwkJCWlmICghbWVtY21wKCJTdWJqZWN0IiwgaGVhZGVyW2ldLCA3KSkgeworIAkJCQlpZiAoISBoYW5kbGVfaGVhZGVyKGxpbmUsIGhkcl9kYXRhW2ldLCAwKSkgeworIAkJCQkJcmV0dXJuIDE7CisgCQkJCX0KKy0tIAorMS41LjYuMi40NTUuZzFlZmIyCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDExIGIvdC90NTEwMC9wYXRjaDAwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4ODcxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDExCkBAIC0wLDAgKzEsMjIgQEAKKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyAgfCA0ICsrLS0KKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggM2U1ZmU1MS4uYWFiZmU1YyAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtNzU4LDggKzc1OCw4IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHZvaWQpCisgCQkvKiBwcm9jZXNzIGFueSBib3VuZGFyeSBsaW5lcyAqLworIAkJaWYgKCpjb250ZW50X3RvcCAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkoJmxpbmUpKSB7CisgCQkJLyogZmx1c2ggYW55IGxlZnRvdmVyICovCistCQkJaWYgKGxpbmUubGVuKQorLQkJCQloYW5kbGVfZmlsdGVyKCZsaW5lKTsKKysJCQlpZiAocHJldi5sZW4pCisrCQkJCWhhbmRsZV9maWx0ZXIoJnByZXYpOworIAorIAkJCWlmICghaGFuZGxlX2JvdW5kYXJ5KCkpCisgCQkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworLS0gCisxLjYuMC5yYzIKKworCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxMiBiL3QvdDUxMDAvcGF0Y2gwMDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YTBiNjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxMgpAQCAtMCwwICsxLDMwIEBACistLS0KKyBob3d0by9idWlsZF9uYXZ5LnR4dCB8ICAgIDYgKysrLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ob3d0by9idWlsZF9uYXZ5LnR4dCBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitpbmRleCAzZmQzYWZiLi4wZWU4MDdlIDEwMDY0NAorLS0tIGEvaG93dG8vYnVpbGRfbmF2eS50eHQKKysrKyBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitAQCAtMTE5LDggKzExOSw4IEBACisgICAgLSBsaWJ4di1kZXYKKyAgICAtIGxpYnVzcGxhc2gtZGV2CisgICAgLSBsYXRleC1tYWtlCistICAgLSB0ZXh0bGl2ZS1sYW5nLWN5cmlsbGljCistICAgLSB0ZXh0bGl2ZS1sYXRleC1leHRyYQorKyAgIC0gdGV4bGl2ZS1sYW5nLWN5cmlsbGljCisrICAgLSB0ZXhsaXZlLWxhdGV4LWV4dHJhCisgICAgLSBkaWEKKyAgICAtIHB5dGhvbi1weXJleAorICAgIC0gbGlidG9vbAorQEAgLTEyOCw3ICsxMjgsNyBAQAorICAgIC0gc294CisgICAgLSBjeXRob24KKyAgICAtIGltYWdlbWFnaWNrCistICAgLSBkb2N1dGlscworKyAgIC0gcHl0aG9uLWRvY3V0aWxzCisgCisgIy4g0L3QsCDQvNCw0YjQuNC90LUgZGluYXI6INC00L7QsdCw0LLQuNGC0Ywg0YHQstC+0Lkg0L7RgtC60YDRi9GC0YvQuSBzc2gt0LrQu9GO0Ycg0LIgYXV0aG9yaXplZF9rZXlzMiDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gZGRldgorICMuINC90LAg0YHQstC+0LXQuSDQvNCw0YjQuNC90LU6INC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCAvZXRjL3N1ZG9lcnMgKNC60L7QvNCw0L3QtNCwIGBgdmlzdWRvYGApINC/0YDQuNC80LXRgNC90L4g0YHQu9C10LTRg9GO0YnQuNC8INC+0LHRgNCw0LfQvtC8OjoKKy0tIAorMS41LjYuNQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTMgYi90L3Q1MTAwL3BhdGNoMDAxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTMKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE0IGIvdC90NTEwMC9wYXRjaDAwMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzODI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE0CkBAIC0wLDAgKzEsNjQgQEAKKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyB8IDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IGIwYjVkOGYuLjQ2MWM0N2UgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTcxMiw2ICs3MTIsMzQgQEAgc3RhdGljIGlubGluZSBpbnQgcGF0Y2hicmVhayhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGludCBzY2lzc29ycyhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorK3sKKysJc2l6ZV90IGksIGxlbiA9IGxpbmUtPmxlbjsKKysJaW50IHNjaXNzb3JzX2Rhc2hlc19zZWVuID0gMDsKKysJY29uc3QgY2hhciAqYnVmID0gbGluZS0+YnVmOworKworKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKysJCWlmIChpc3NwYWNlKGJ1ZltpXSkpCisrCQkJY29udGludWU7CisrCQlpZiAoYnVmW2ldID09ICctJykgeworKwkJCXNjaXNzb3JzX2Rhc2hlc19zZWVuIHw9IDAyOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyAxIDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgIj44IiwgMikpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMTsKKysJCQlpKys7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAoaSArIDcgPCBsZW4gJiYgIW1lbWNtcChidWYgKyBpLCAiY3V0IGhlcmUiLCA4KSkgeworKwkJCWkgKz0gNzsKKysJCQljb250aW51ZTsKKysJCX0KKysJCS8qIGV2ZXJ5dGhpbmcgZWxzZSAtLS0gbm90IHNjaXNzb3JzICovCisrCQlicmVhazsKKysJfQorKwlyZXR1cm4gc2Npc3NvcnNfZGFzaGVzX3NlZW4gPT0gMDM7CisrfQorKworIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyB7CisgCXN0YXRpYyBpbnQgc3RpbGxfbG9va2luZyA9IDE7CitAQCAtNzIzLDEwICs3NTEsMTcgQEAgc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAkJc3RyYnVmX2x0cmltKGxpbmUpOworIAkJaWYgKCFsaW5lLT5sZW4pCisgCQkJcmV0dXJuIDA7CistCQlpZiAoKHN0aWxsX2xvb2tpbmcgPSBjaGVja19oZWFkZXIobGluZSwgc19oZHJfZGF0YSwgMCkpICE9IDApCisrCQlzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApOworKwkJaWYgKHN0aWxsX2xvb2tpbmcpCisgCQkJcmV0dXJuIDA7CisgCX0KKyAKKysJaWYgKHNjaXNzb3JzKGxpbmUpKSB7CisrCQlmc2VlayhjbWl0bXNnLCAwTCwgU0VFS19TRVQpOworKwkJc3RpbGxfbG9va2luZyA9IDE7CisrCQlyZXR1cm4gMDsKKysJfQorKworIAkvKiBub3JtYWxpemUgdGhlIGxvZyBtZXNzYWdlIHRvIFVURi04LiAqLworIAlpZiAobWV0YWluZm9fY2hhcnNldCkKKyAJCWNvbnZlcnRfdG9fdXRmOChsaW5lLCBjaGFyc2V0LmJ1Zik7CistLSAKKzEuNi40LjEKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE0LS1zY2lzc29ycyBiL3QvdDUxMDAvcGF0Y2gwMDE0LS1zY2lzc29ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjM4MjVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTQtLXNjaXNzb3JzCkBAIC0wLDAgKzEsNjQgQEAKKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyB8IDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IGIwYjVkOGYuLjQ2MWM0N2UgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTcxMiw2ICs3MTIsMzQgQEAgc3RhdGljIGlubGluZSBpbnQgcGF0Y2hicmVhayhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGludCBzY2lzc29ycyhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorK3sKKysJc2l6ZV90IGksIGxlbiA9IGxpbmUtPmxlbjsKKysJaW50IHNjaXNzb3JzX2Rhc2hlc19zZWVuID0gMDsKKysJY29uc3QgY2hhciAqYnVmID0gbGluZS0+YnVmOworKworKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKysJCWlmIChpc3NwYWNlKGJ1ZltpXSkpCisrCQkJY29udGludWU7CisrCQlpZiAoYnVmW2ldID09ICctJykgeworKwkJCXNjaXNzb3JzX2Rhc2hlc19zZWVuIHw9IDAyOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyAxIDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgIj44IiwgMikpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMTsKKysJCQlpKys7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAoaSArIDcgPCBsZW4gJiYgIW1lbWNtcChidWYgKyBpLCAiY3V0IGhlcmUiLCA4KSkgeworKwkJCWkgKz0gNzsKKysJCQljb250aW51ZTsKKysJCX0KKysJCS8qIGV2ZXJ5dGhpbmcgZWxzZSAtLS0gbm90IHNjaXNzb3JzICovCisrCQlicmVhazsKKysJfQorKwlyZXR1cm4gc2Npc3NvcnNfZGFzaGVzX3NlZW4gPT0gMDM7CisrfQorKworIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyB7CisgCXN0YXRpYyBpbnQgc3RpbGxfbG9va2luZyA9IDE7CitAQCAtNzIzLDEwICs3NTEsMTcgQEAgc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAkJc3RyYnVmX2x0cmltKGxpbmUpOworIAkJaWYgKCFsaW5lLT5sZW4pCisgCQkJcmV0dXJuIDA7CistCQlpZiAoKHN0aWxsX2xvb2tpbmcgPSBjaGVja19oZWFkZXIobGluZSwgc19oZHJfZGF0YSwgMCkpICE9IDApCisrCQlzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApOworKwkJaWYgKHN0aWxsX2xvb2tpbmcpCisgCQkJcmV0dXJuIDA7CisgCX0KKyAKKysJaWYgKHNjaXNzb3JzKGxpbmUpKSB7CisrCQlmc2VlayhjbWl0bXNnLCAwTCwgU0VFS19TRVQpOworKwkJc3RpbGxfbG9va2luZyA9IDE7CisrCQlyZXR1cm4gMDsKKysJfQorKworIAkvKiBub3JtYWxpemUgdGhlIGxvZyBtZXNzYWdlIHRvIFVURi04LiAqLworIAlpZiAobWV0YWluZm9fY2hhcnNldCkKKyAJCWNvbnZlcnRfdG9fdXRmOChsaW5lLCBjaGFyc2V0LmJ1Zik7CistLSAKKzEuNi40LjEKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE1IGIvdC90NTEwMC9wYXRjaDAwMTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2NDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE1CkBAIC0wLDAgKzEsOCBAQAorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE1LS1uby1pbmJvZHktaGVhZGVycyBiL3QvdDUxMDAvcGF0Y2gwMDE1LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY0ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTUtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsOCBAQAorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE2IGIvdC90NTEwMC9wYXRjaDAwMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2NDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE2CkBAIC0wLDAgKzEsOCBAQAorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE2LS1uby1pbmJvZHktaGVhZGVycyBiL3QvdDUxMDAvcGF0Y2gwMDE2LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY0ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTYtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsOCBAQAorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE3IGIvdC90NTEwMC9wYXRjaDAwMTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjZjg0YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE3CkBAIC0wLDAgKzEsNiBAQAorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrTmV3IGNvbnRlbnQKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDEgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzgzYjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAxCkBAIC0wLDAgKzEsNCBAQAorQXV0aG9yOiBLZWl0aCBNb29yZQorRW1haWw6IG1vb3JlQGNzLnV0ay5lZHUKK1N1YmplY3Q6IElmIHlvdSBjYW4gcmVhZCB0aGlzIHlvdSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAyIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODFiZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMgpAQCAtMCwwICsxLDQgQEAKK0F1dGhvcjogT2xsZSBKw6RybmVmb3JzCitFbWFpbDogb2phcm5lZkBhZG1pbi5rdGguc2UKK1N1YmplY3Q6IFRpbWUgZm9yIElTTyAxMDY0Nj8KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmNzg5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDMKQEAgLTAsMCArMSw0IEBACitBdXRob3I6IFBhdHJpayBGw6RsdHN0csO2bQorRW1haWw6IHBhZkBuYWRhLmt0aC5zZQorU3ViamVjdDogUkZDLUhEUiBjYXJlIGFuZCBmZWVkaW5nCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDQgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2N2E5MGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA0CkBAIC0wLDAgKzEsNCBAQAorQXV0aG9yOiBOYXRoYW5pZWwgQm9yZW5zdGVpbiAo153Xldec16kg15/XkSDXmdec15jXpNegKQorRW1haWw6IG5zYkB0aHVtcGVyLmJlbGxjb3JlLmNvbQorU3ViamVjdDogVGVzdCBvZiBuZXcgaGVhZGVyIGdlbmVyYXRvcgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA1IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjdiZTNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNQpAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA2IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFkNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNgpAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhIGIpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDcgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NGYxOTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA3CkBAIC0wLDAgKzEsMiBAQAorU3ViamVjdDogKGFiKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA4IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRmMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOApAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhYikKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOSBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0ZjE5NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDkKQEAgLTAsMCArMSwyIEBACitTdWJqZWN0OiAoYWIpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTAgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWQ0NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDEwCkBAIC0wLDAgKzEsMiBAQAorU3ViamVjdDogKGEgYikKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAxMSBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhZDQ3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTEKQEAgLTAsMCArMSwyIEBACitTdWJqZWN0OiAoYSBiKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctc2FtcGxlcy5tYm94IGIvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmMyMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveApAQCAtMCwwICsxLDQ4IEBACitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVMtQVNDSUk/UT9LZWl0aF9Nb29yZT89IDxtb29yZUBjcy51dGsuZWR1PgorVG86ID0/SVNPODg1OS0xP1E/S2VsZF9KPUY4cm5fU2ltb25zZW4/PSA8a2VsZEBka3V1Zy5kaz4KK0NDOiA9P0lTTzg4NTktMT9RP0FuZHI9RTk/PSBQaXJhcmQgPFBJUkFSREB2bTEudWxnLmFjLmJlPgorU3ViamVjdDogPT9JU084ODU5LTE/Qj9TV1lnZVc5MUlHTmhiaUJ5WldGa0lIUm9hWE1nZVc4PT89CisgPT9JU084ODU5LTI/Qj9kU0IxYm1SbGNuTjBZVzVrSUhSb1pTQmxlR0Z0Y0d4bExnPT0/PQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/SVNPODg1OS0xP1E/T2xsZV9KPUU0cm5lZm9ycz89IDxvamFybmVmQGFkbWluLmt0aC5zZT4KK1RvOiBpZXRmLTgyMkBkaW1hY3MucnV0Z2Vycy5lZHUsIG9qYXJuZWZAYWRtaW4ua3RoLnNlCitTdWJqZWN0OiBUaW1lIGZvciBJU08gMTA2NDY/CisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorVG86IERhdmUgQ3JvY2tlciA8ZGNyb2NrZXJAbW9yZG9yLnN0YW5mb3JkLmVkdT4KK0NjOiBpZXRmLTgyMkBkaW1hY3MucnV0Z2Vycy5lZHUsIHBhZkBjb21zb2wuc2UKK0Zyb206ID0/SVNPODg1OS0xP1E/UGF0cmlrX0Y9RTRsdHN0cj1GNm0/PSA8cGFmQG5hZGEua3RoLnNlPgorU3ViamVjdDogUmU6IFJGQy1IRFIgY2FyZSBhbmQgZmVlZGluZworCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5hdGhhbmllbCBCb3JlbnN0ZWluIDxuc2JAdGh1bXBlci5iZWxsY29yZS5jb20+CisgICAgICAoPT9JU084ODU5LTg/Yj83ZVhzK1NEdjRTRHA3T2owOEE9PT89KQorVG86IEdyZWcgVmF1ZHJldWlsIDxndmF1ZHJlQE5SSS5SZXN0b24uVkEuVVM+LCBOZWQgRnJlZWQKKyAgIDxuZWRAaW5ub3NvZnQuY29tPiwgS2VpdGggTW9vcmUgPG1vb3JlQGNzLnV0ay5lZHU+CitTdWJqZWN0OiBUZXN0IG9mIG5ldyBoZWFkZXIgZ2VuZXJhdG9yCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gYikKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gPT9JU084ODU5LTE/UT9iPz0pCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorU3ViamVjdDogKD0/SVNPODg1OS0xP1E/YT89ICA9P0lTTzg4NTktMT9RP2I/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0KKyAgICA9P0lTTzg4NTktMT9RP2I/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hX2I/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gPT9JU084ODU5LTI/UT9fYj89KQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9zYW1wbGUubWJveCBiL3QvdDUxMDAvc2FtcGxlLm1ib3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyYWUwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvc2FtcGxlLm1ib3gKQEAgLTAsMCArMSw3MDEgQEAKKyAgICAKKwkKKyAgICAKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSAoenp6KQorICAgICAgVQorICAgICAgVGhvcgorICAgICAgPGEudS50aG9yQGV4YW1wbGUuY29tPiAoQ29tbWVudCkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhIGNvbW1pdC4KKworSGVyZSBpcyBhIHBhdGNoIGZyb20gQSBVIFRob3IuCisKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGFub3RoZXIgcGF0Y2gKKworSGVyZSBpcyBhIHBhdGNoIGZyb20gQSBVIFRob3IuICBUaGlzIGFkZHJlc3NlcyB0aGUgaXNzdWUgcmFpc2VkIGluIHRoZQorbWVzc2FnZToKKworRnJvbTogTml0IFBpY2tlciA8bml0LnBpY2tlckBleGFtcGxlLm5ldD4KK1N1YmplY3Q6IGZvbyBpcyB0b28gb2xkCitNZXNzYWdlLUlkOiA8bml0cGlja2VyLjEyMTIxMjEyQGV4YW1wbGUubmV0PgorCitIb3BlZnVsbHkgdGhpcyB3b3VsZCBmaXggdGhlIHByb2JsZW0gc3RhdGVkIHRoZXJlLgorCisKK0kgaGF2ZSBpbmNsdWRlZCBhbiBleHRyYSBibGFuayBsaW5lIGFib3ZlLCBidXQgaXQgZG9lcyBub3QgaGF2ZSB0byBiZQorc3RyaXBwZWQgYXdheSBoZXJlLCBhbG9uZyB3aXRoIHRoZSAgICAgICAgICAgICAgIAkJICAgCit3aGl0ZXNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZSBhYm92ZSBsaW5lLiAgVGhleSBhcmUgZXhwZWN0ZWQgdG8gYmUgc3F1YXNoZWQKK3doZW4gdGhlIG1lc3NhZ2UgaXMgbWFkZSBpbnRvIGEgY29tbWl0IGxvZyBieSBzdHJpcHNwYWNlLAorQWxzbywgdGhlcmUgYXJlIHRocmVlIGJsYW5rIGxpbmVzIGFmdGVyIHRoaXMgcGFyYWdyYXBoLAordHdvIHRydWx5IGJsYW5rIGFuZCBhbm90aGVyIGZ1bGwgb2Ygc3BhY2VzIGluIGJldHdlZW4uCisKKyAgICAgICAgICAgIAorCitIb3BlIHRoaXMgaGVscHMuCisKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGp1bmlvQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IHJlOiBbUEFUQ0hdIGFub3RoZXIgcGF0Y2gKKworRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIXSB0aGlyZCBwYXRjaAorCitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4gIFRoaXMgYWRkcmVzc2VzIHRoZSBpc3N1ZSByYWlzZWQgaW4gdGhlCittZXNzYWdlOgorCitGcm9tOiBOaXQgUGlja2VyIDxuaXQucGlja2VyQGV4YW1wbGUubmV0PgorU3ViamVjdDogZm9vIGlzIHRvbyBvbGQKK01lc3NhZ2UtSWQ6IDxuaXRwaWNrZXIuMTIxMjEyMTJAZXhhbXBsZS5uZXQ+CisKK0hvcGVmdWxseSB0aGlzIHdvdWxkIGZpeCB0aGUgcHJvYmxlbSBzdGF0ZWQgdGhlcmUuCisKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKK0Zyb20gbm9ib2R5IFNhdCBBdWcgMjcgMjM6MDc6NDkgMjAwNQorUGF0aDogbmV3cy5nbWFuZS5vcmchbm90LWZvci1tYWlsCitNZXNzYWdlLUlEOiA8MjAwNTA3MjEuMDkxMDM2LjAxMTE5NTE2Lnlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorRnJvbTogWU9TSElGVUpJIEhpZGVha2kgLyA9P0lTTy0yMDIyLUpQP0I/R3lSQ05VaEdJekZSVEVBYktFST0/PSAKKwk8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CitOZXdzZ3JvdXBzOiBnbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIEdJVDogVHJ5IGFsbCBhZGRyZXNzZXMgZm9yIGdpdmVuIHJlbW90ZSBuYW1lCitEYXRlOiBUaHUsIDIxIEp1bCAyMDA1IDA5OjEwOjM2IC0wNDAwIChFRFQpCitMaW5lczogOTkKK09yZ2FuaXphdGlvbjogVVNBR0kvV0lERSBQcm9qZWN0CitBcHByb3ZlZDogbmV3c0BnbWFuZS5vcmcKK05OVFAtUG9zdGluZy1Ib3N0OiBtYWluLmdtYW5lLm9yZworTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogVGV4dC9QbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorWC1UcmFjZTogc2VhLmdtYW5lLm9yZyAxMTIxOTUxNDM0IDI5MzUwIDgwLjkxLjIyOS4yICgyMSBKdWwgMjAwNSAxMzoxMDozNCBHTVQpCitYLUNvbXBsYWludHMtVG86IHVzZW5ldEBzZWEuZ21hbmUub3JnCitOTlRQLVBvc3RpbmctRGF0ZTogVGh1LCAyMSBKdWwgMjAwNSAxMzoxMDozNCArMDAwMCAoVVRDKQorCitIZWxsby4KKworVHJ5IGFsbCBhZGRyZXNzZXMgZm9yIGdpdmVuIHJlbW90ZSBuYW1lIHVudGlsIGl0IHN1Y2NlZWRzLgorQWxzbyBzdXBwb3J0cyBJUHY2LgorCitTaWduZWQtb2YtYnk6IEhpZGVha2kgWU9TSElGVUpJIDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KKworZGlmZiAtLWdpdCBhL2Nvbm5lY3QuYyBiL2Nvbm5lY3QuYworLS0tIGEvY29ubmVjdC5jCisrKysgYi9jb25uZWN0LmMKK0BAIC05Niw0MiArOTYsNTcgQEAgc3RhdGljIGVudW0gcHJvdG9jb2wgZ2V0X3Byb3RvY29sKGNvbnN0IAorIAlkaWUoIkkgZG9uJ3QgaGFuZGxlIHByb3RvY29sICclcyciLCBuYW1lKTsKKyB9CisgCistc3RhdGljIHZvaWQgbG9va3VwX2hvc3QoY29uc3QgY2hhciAqaG9zdCwgc3RydWN0IHNvY2thZGRyICppbikKKy17CistCXN0cnVjdCBhZGRyaW5mbyAqcmVzOworLQlpbnQgcmV0OworLQorLQlyZXQgPSBnZXRhZGRyaW5mbyhob3N0LCBOVUxMLCBOVUxMLCAmcmVzKTsKKy0JaWYgKHJldCkKKy0JCWRpZSgiVW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIsIGhvc3QsIGdhaV9zdHJlcnJvcihyZXQpKTsKKy0JKmluID0gKnJlcy0+YWlfYWRkcjsKKy0JZnJlZWFkZHJpbmZvKHJlcyk7CistfQorKyNkZWZpbmUgU1RSXyhzKQkjIHMKKysjZGVmaW5lIFNUUihzKQlTVFJfKHMpCisgCisgc3RhdGljIGludCBnaXRfdGNwX2Nvbm5lY3QoaW50IGZkWzJdLCBjb25zdCBjaGFyICpwcm9nLCBjaGFyICpob3N0LCBjaGFyICpwYXRoKQorIHsKKy0Jc3RydWN0IHNvY2thZGRyIGFkZHI7CistCWludCBwb3J0ID0gREVGQVVMVF9HSVRfUE9SVCwgc29ja2ZkOworLQljaGFyICpjb2xvbjsKKy0KKy0JY29sb24gPSBzdHJjaHIoaG9zdCwgJzonKTsKKy0JaWYgKGNvbG9uKSB7CistCQljaGFyICplbmQ7CistCQl1bnNpZ25lZCBsb25nIG4gPSBzdHJ0b3VsKGNvbG9uKzEsICZlbmQsIDApOworLQkJaWYgKGNvbG9uWzFdICYmICEqZW5kKSB7CistCQkJKmNvbG9uID0gMDsKKy0JCQlwb3J0ID0gbjsKKysJaW50IHNvY2tmZCA9IC0xOworKwljaGFyICpjb2xvbiwgKmVuZDsKKysJY2hhciAqcG9ydCA9IFNUUihERUZBVUxUX0dJVF9QT1JUKTsKKysJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWkwLCAqYWk7CisrCWludCBnYWk7CisrCisrCWlmIChob3N0WzBdID09ICdbJykgeworKwkJZW5kID0gc3RyY2hyKGhvc3QgKyAxLCAnXScpOworKwkJaWYgKGVuZCkgeworKwkJCSplbmQgPSAwOworKwkJCWVuZCsrOworKwkJCWhvc3QrKzsKKysJCX0gZWxzZQorKwkJCWVuZCA9IGhvc3Q7CisrCX0gZWxzZQorKwkJZW5kID0gaG9zdDsKKysJY29sb24gPSBzdHJjaHIoZW5kLCAnOicpOworKworKwlpZiAoY29sb24pCisrCQlwb3J0ID0gY29sb24gKyAxOworKworKwltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKysKKysJZ2FpID0gZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgJmhpbnRzLCAmYWkpOworKwlpZiAoZ2FpKQorKwkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgZ2FpX3N0cmVycm9yKGdhaSkpOworKworKwlmb3IgKGFpMCA9IGFpOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCkgeworKwkJc29ja2ZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsKKysJCWlmIChzb2NrZmQgPCAwKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKGNvbm5lY3Qoc29ja2ZkLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkgeworKwkJCWNsb3NlKHNvY2tmZCk7CisrCQkJc29ja2ZkID0gLTE7CisrCQkJY29udGludWU7CisgCQl9CisrCQlicmVhazsKKyAJfQorIAorLQlsb29rdXBfaG9zdChob3N0LCAmYWRkcik7CistCSgoc3RydWN0IHNvY2thZGRyX2luICopJmFkZHIpLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworKwlmcmVlYWRkcmluZm8oYWkwKTsKKyAKKy0Jc29ja2ZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX0lQKTsKKyAJaWYgKHNvY2tmZCA8IDApCisgCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgc29ja2V0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworLQlpZiAoY29ubmVjdChzb2NrZmQsICh2b2lkICopJmFkZHIsIHNpemVvZihhZGRyKSkgPCAwKQorLQkJZGllKCJ1bmFibGUgdG8gY29ubmVjdCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKysKKyAJZmRbMF0gPSBzb2NrZmQ7CisgCWZkWzFdID0gc29ja2ZkOworIAlwYWNrZXRfd3JpdGUoc29ja2ZkLCAiJXMgJXNcbiIsIHByb2csIHBhdGgpOworCistLSAKK1lPU0hJRlVKSSBIaWRlYWtpIEAgVVNBR0kgUHJvamVjdCAgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorR1BHLUZQICA6IDkwMjIgNjVFQiAxRUNGIDNBRDEgMEJERiAgODBEOCA0ODA3IEY4OTQgRTA2MiAwRUVBCisKK0Zyb20gbm9ib2R5IFNhdCBBdWcgMjcgMjM6MDc6NDkgMjAwNQorUGF0aDogbmV3cy5nbWFuZS5vcmchbm90LWZvci1tYWlsCitNZXNzYWdlLUlEOiA8dTV0YWNqamRweHEuZnNmQGx5c2F0b3IubGl1LnNlPgorRnJvbTogPT9JU084ODU5LTE/UT9EYXZpZF9LPUU1Z2VkYWw/PSA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgorTmV3c2dyb3VwczogZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0CitTdWJqZWN0OiBbUEFUQ0hdIEZpeGVkIHR3byBidWdzIGluIGdpdC1jdnNpbXBvcnQtc2NyaXB0LgorRGF0ZTogTW9uLCAxNSBBdWcgMjAwNSAyMDoxODoyNSArMDIwMAorTGluZXM6IDgzCitBcHByb3ZlZDogbmV3c0BnbWFuZS5vcmcKK05OVFAtUG9zdGluZy1Ib3N0OiBtYWluLmdtYW5lLm9yZworTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTEKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IFFVT1RFRC1QUklOVEFCTEUKK1gtVHJhY2U6IHNlYS5nbWFuZS5vcmcgMTEyNDEzMDI0NyAzMTgzOSA4MC45MS4yMjkuMiAoMTUgQXVnIDIwMDUgMTg6MjQ6MDcgR01UKQorWC1Db21wbGFpbnRzLVRvOiB1c2VuZXRAc2VhLmdtYW5lLm9yZworTk5UUC1Qb3N0aW5nLURhdGU6IE1vbiwgMTUgQXVnIDIwMDUgMTg6MjQ6MDcgKzAwMDAgKFVUQykKK0NjOiAiSnVuaW8gQy4gSGFtYW5vIiA8anVua2lvQGNveC5uZXQ+CitPcmlnaW5hbC1YLUZyb206IGdpdC1vd25lckB2Z2VyLmtlcm5lbC5vcmcgTW9uIEF1ZyAxNSAyMDoyNDowNSAyMDA1CisKK1RoZSBnaXQtY3ZzaW1wb3J0LXNjcmlwdCBoYWQgYSBjb3B1bGUgb2Ygc21hbGwgYnVncyB0aGF0IHByZXZlbnRlZCBtZQorZnJvbSBpbXBvcnRpbmcgYSBiaWcgQ1ZTIHJlcG9zaXRvcnkuCisKK1RoZSBmaXJzdCB3YXMgdGhhdCBpdCBkaWRuJ3QgaGFuZGxlIHJlbW92ZWQgZmlsZXMgd2l0aCBhIG11bHRpLWRpZ2l0CitwcmltYXJ5IHJldmlzaW9uIG51bWJlci4KKworVGhlIHNlY29uZCB3YXMgdGhhdCBpdCB3YXMgYXNraW5nIHRoZSBDVlMgc2VydmVyIGZvciAiRiIgbWVzc2FnZXMsCithbHRob3VnaCB0aGV5IHdlcmUgbm90IGhhbmRsZWQuCisKK0kgYWxzbyB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGF0IHNjcmlwdCB0byBjb3JyZXNwb25kIHRvCithY3R1YWwgZmxhZ3MuCisKK1NpZ25lZC1vZmYtYnk6IERhdmlkIEs9RTVnZWRhbCA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgorLS0tCisKKyBEb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCB8IDkgKysrKysrKystCisgZ2l0LWN2c2ltcG9ydC1zY3JpcHQgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKzUwNDUyZjljMGMyZGYxZjA0ZDgzYTI2MjY2YmE3MDRiMTM4NjE2MzIKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0PQorLWN2c2ltcG9ydC1zY3JpcHQudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LXNjcmlwdC50eHQKK0BAIC0yOSw2ICsyOSwxMCBAQCBPUFRJT05TCisgCWN1cnJlbnRseSwgb25seSB0aGUgOmxvY2FsOiwgOmV4dDogYW5kIDpwc2VydmVyOiBhY2Nlc3MgbWV0aG9kcz0yMAorIAlhcmUgc3VwcG9ydGVkLgorPTIwCisrLUMgPHRhcmdldC1kaXI+OjoKKysgICAgICAgIFRoZSBHSVQgcmVwb3NpdG9yeSB0byBpbXBvcnQgdG8uICBJZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QKKysgICAgICAgIGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKysKKyAtaTo6CisgCUltcG9ydC1vbmx5OiBkb24ndCBwZXJmb3JtIGEgY2hlY2tvdXQgYWZ0ZXIgaW1wb3J0aW5nLiAgVGhpcyBvcHRpb24KKyAJZW5zdXJlcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIGNhY2hlIHJlbWFpbiB1bnRvdWNoZWQgYW5kIHdpbGwKK0BAIC00NCw3ICs0OCw3IEBAIE9QVElPTlMKKz0yMAorIC1wIDxvcHRpb25zLWZvci1jdnNwcz46OgorIAlBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGN2c3BzLgorLQlUaGUgb3B0aW9ucyAnLXgnIGFuZCAnLUEnIGFyZSBpbXBsaWNpdCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmUuCisrCVRoZSBvcHRpb25zICctdScgYW5kICctQScgYXJlIGltcGxpY2l0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4KKz0yMAorIAlJZiB5b3UgbmVlZCB0byBwYXNzIG11bHRpcGxlIG9wdGlvbnMsIHNlcGFyYXRlIHRoZW0gd2l0aCBhIGNvbW1hLgorPTIwCitAQCAtNTcsNiArNjEsOSBAQCBPUFRJT05TCisgLWg6OgorIAlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCis9MjAKKysteiA8ZnV6ej46OgorKyAgICAgICAgUGFzcyB0aGUgdGltZXN0YW1wIGZ1enogZmFjdG9yIHRvIGN2c3BzLgorKworIE9VVFBVVAorIC0tLS0tLQorIElmICctdicgaXMgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IHJlcG9ydHMgd2hhdCBpdCBpcyBkb2luZy4KK2RpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LXNjcmlwdCBiL2dpdC1jdnNpbXBvcnQtc2NyaXB0CistLS0gYS9naXQtY3ZzaW1wb3J0LXNjcmlwdAorKysrIGIvZ2l0LWN2c2ltcG9ydC1zY3JpcHQKK0BAIC0xOTAsNyArMTkwLDcgQEAgc3ViIGNvbm4geworIAkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJSb290ICRyZXBvXG4iKTsKKz0yMAorIAkjIFRyaWFsIGFuZCBlcnJvciBzYXlzIHRoYXQgdGhpcyBwcm9iYWJseSBpcyB0aGUgbWluaW11bSBzZXQKKy0JJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiVmFsaWQtcmVzcG9uc2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIE1vPQorZGUgTSBNYmluYXJ5IEUgRiBDaGVja2VkLWluIENyZWF0ZWQgVXBkYXRlZCBNZXJnZWQgUmVtb3ZlZFxuIik7CisrCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIlZhbGlkLXJlc3BvbnNlcyBvayBlcnJvciBWYWxpZC1yZXF1ZXN0cyBNbz0KK2RlIE0gTWJpbmFyeSBFIENoZWNrZWQtaW4gQ3JlYXRlZCBVcGRhdGVkIE1lcmdlZCBSZW1vdmVkXG4iKTsKKz0yMAorIAkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJ2YWxpZC1yZXF1ZXN0c1xuIik7CisgCSRzZWxmLT57J3NvY2tldG8nfS0+Zmx1c2goKTsKK0BAIC02OTEsNyArNjkxLDcgQEAgd2hpbGUoPENWUz4pIHsKKyAJCXVubGluaygkdG1wbmFtZSk7CisgCQlteSAkbW9kZSA9M0QgcG1vZGUoJGN2cy0+eydtb2RlJ30pOworIAkJcHVzaChAbmV3LFskbW9kZSwgJHNoYSwgJGZuXSk7ICMgbWF5IGJlIHJlc3VycmVjdGVkIQorLQl9IGVsc2lmKCRzdGF0ZSA9M0Q9M0QgOSBhbmQgL15ccysoXFMrKTpcZCg/OlwuXGQrKSstPihcZCg/OlwuXGQrKSspXCg9CitERUFEXClccyokLykgeworKwl9IGVsc2lmKCRzdGF0ZSA9M0Q9M0QgOSBhbmQgL15ccysoXFMrKTpcZCsoPzpcLlxkKykrLT4oXGQrKD86XC5cZCspKyk9CitcKERFQURcKVxzKiQvKSB7CisgCQlteSAkZm4gPTNEICQxOworIAkJJGZuID0zRH4gcyNeLysjIzsKKyAJCXB1c2goQG9sZCwkZm4pOworCistLT0yMAorRGF2aWQgSz1FNWdlZGFsCistCitUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgZ2l0IiBpbgordGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKK01vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK1JlZmVyZW5jZXM6IDxQaW5lLkxOWC40LjY0MC4wMDAxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDAyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDAzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDEwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDExQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDEyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDEzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDUwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGEgY29tbWl0LgorCitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4KKworLS0tCisgZm9vIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCA5MTIzY2RjLi45MThkY2Y4IDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0xICsxIEBACistRnJpIEp1biAgOSAwMDo0NDowNCBQRFQgMjAwNgorK0ZyaSBKdW4gIDkgMDA6NDQ6MTMgUERUIDIwMDYKKy0tIAorMS40LjAuZzZmMmIKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYW5vdGhlciBwYXRjaAorCitIZXJlIGlzIGFuIGVtcHR5IHBhdGNoIGZyb20gQSBVIFRob3IuCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGp1bmlvQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IHJlOiBbUEFUQ0hdIGFub3RoZXIgcGF0Y2gKKworRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIXSBhbm90aGVyIHBhdGNoCis+SGVyZSBpcyBhbiBlbXB0eSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCitIZXkgeW91IGZvcmdvdCB0aGUgcGF0Y2ghCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAxNyBTZXAgMjAwMSAwMDowMDowMCArMDkwMAorTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogVGV4dC9QbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogUXVvdGVkLVByaW50YWJsZQorCis9MEE9MEFGcm9tOiBGIFUgQmFyIDxmLnUuYmFyQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIXSB1cGRhdGVzPTBBPTBBVGhpcyBpcyB0byBmaXggZGlmZi1mb3JtYXQgZG9jdW1lbnRhdGlvbi4KKworZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK2luZGV4IGI0MjZhMTQuLjk3NzU2ZWMgMTAwNjQ0CistLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK0BAIC04MSw3ICs4MSw3IEBAIFRoZSAiZGlmZiIgZm9ybWF0dGluZyBvcHRpb25zIGNhbiBiZSBjdXN0b21pemVkIHZpYSB0aGUKKyBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0lUX0RJRkZfT1BUUycuICBGb3IgZXhhbXBsZSwgaWYgeW91CisgcHJlZmVyIGNvbnRleHQgZGlmZjoKKz0yMAorLSAgICAgIEdJVF9ESUZGX09QVFM9M0QtYyBnaXQtZGlmZi1pbmRleCAtcCAkKGNhdCAuZ2l0L0hFQUQpCisrICAgICAgR0lUX0RJRkZfT1BUUz0zRC1jIGdpdC1kaWZmLWluZGV4IC1wIEhFQUQKKz0yMAorPTIwCisgMi4gV2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBzZXQsIHRoZQorRnJvbSBiOTcwNGE1MThlMjExNTg0MzNiYWEyY2MyZDU5MWZlYTY4Nzk2N2Y2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0x1a2FzPTIwU2FuZHN0cj1DMz1CNm0/PSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDA4IDIzOjQxOjMzICswMjAwCitTdWJqZWN0OiBSZTogZGlzY3Vzc2lvbiB0aGF0IGxlYWQgdG8gdGhpcyBwYXRjaAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitbUEFUQ0hdIGdpdC1tYWlsaW5mbzogRml4IGdldHRpbmcgdGhlIHN1YmplY3QgZnJvbSB0aGUgYm9keQorCisiU3ViamVjdDogIiBpc24ndCBpbiB0aGUgc3RhdGljIGFycmF5ICJoZWFkZXIiLCBhbmQgdGh1cworbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDcpIHdpbGwgbmV2ZXIgbWF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IEx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgorU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCA5NjJhYTM0Li4yZDE1MjBmIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGludCBjaGVja19oZWFkZXIoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUsIGNoYXIgKipoZHJfZGF0YSwgaW50IG92ZXIKKyAJCXJldHVybiAxOworIAlpZiAoIW1lbWNtcCgiW1BBVENIXSIsIGxpbmUsIDcpICYmIGlzc3BhY2UobGluZVs3XSkpIHsKKyAJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CistCQkJaWYgKCFtZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgOSkpIHsKKysJCQlpZiAoIW1lbWNtcCgiU3ViamVjdCIsIGhlYWRlcltpXSwgNykpIHsKKyAJCQkJaWYgKCEgaGFuZGxlX2hlYWRlcihsaW5lLCBoZHJfZGF0YVtpXSwgMCkpIHsKKyAJCQkJCXJldHVybiAxOworIAkJCQl9CistLSAKKzEuNS42LjIuNDU1LmcxZWZiMgorCitGcm9tIG5vYm9keSBGcmkgQXVnICA4IDIyOjI0OjAzIDIwMDgKK0RhdGU6IEZyaSwgOCBBdWcgMjAwOCAxMzowODozNyArMDIwMCAoQ0VTVCkKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAzLzMgdjJdIFh5enp5CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9LT0tPSIKKworLS09LT0tPQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMTUKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworSGVyZSBjb21lcyBhIGNvbW1pdCBsb2cgbWVzc2FnZSwgYW5kCitpdHMgc2Vjb25kIGxpbmUgaXMgaGVyZS4KKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyAgfCA0ICsrLS0KKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggM2U1ZmU1MS4uYWFiZmU1YyAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtNzU4LDggKzc1OCw4IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHZvaWQpCisgCQkvKiBwcm9jZXNzIGFueSBib3VuZGFyeSBsaW5lcyAqLworIAkJaWYgKCpjb250ZW50X3RvcCAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkoJmxpbmUpKSB7CisgCQkJLyogZmx1c2ggYW55IGxlZnRvdmVyICovCistCQkJaWYgKGxpbmUubGVuKQorLQkJCQloYW5kbGVfZmlsdGVyKCZsaW5lKTsKKysJCQlpZiAocHJldi5sZW4pCisrCQkJCWhhbmRsZV9maWx0ZXIoJnByZXYpOworPTIwCisgCQkJaWYgKCFoYW5kbGVfYm91bmRhcnkoKSkKKyAJCQkJZ290byBoYW5kbGVfYm9keV9vdXQ7CistLT0yMAorMS42LjAucmMyCisKKy0tPS09LT0tLQorCitGcm9tIGJkYUBtbnNzcGIucnUgV2VkIE5vdiAxMiAxNzo1NDo0MSAyMDA4CitGcm9tOiBEbWl0cml5IEJsaW5vdiA8YmRhQG1uc3NwYi5ydT4KK1RvOiBuYXZ5LXBhdGNoZXNAZGluYXIubW5zLm1uc3NwYi5ydQorRGF0ZTogV2VkLCAxMiBOb3YgMjAwOCAxNzo1NDo0MSArMDMwMAorTWVzc2FnZS1JZDogPDEyMjY1MDE2ODEtMjQ5MjMtMS1naXQtc2VuZC1lbWFpbC1iZGFAbW5zc3BiLnJ1PgorWC1NYWlsZXI6IGdpdC1zZW5kLWVtYWlsIDEuNS42LjUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47CisgIGNoYXJzZXQ9dXRmLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK1N1YmplY3Q6IFtOYXZ5LXBhdGNoZXNdIFtQQVRDSF0KKwk9P3V0Zi04P2I/MEpqUXQ5QzgwTFhRdmRHUjBMMGcwWUhRdjlDNDBZSFF2dEM2SU5DLzBMQT0/PQorCT0/dXRmLTg/Yj8wTHJRdGRHQzBMN1FzaURRdmRDMTBMN1FzZEdGMEw3UXROQzQwTHpSaTlHRklOQzAwTHZSanlBPT89CisJPT91dGYtOD9iPzBZSFFzZEMrMFlEUXV0QzQ/PQorCit0ZXh0bGl2ZS0qINC40YHQv9GA0LDQstC70LXQvdGLINC90LAgdGV4bGl2ZS0qCitkb2N1dGlscyDQt9Cw0LzQtdC90ZHQvSDQvdCwIHB5dGhvbi1kb2N1dGlscworCivQlNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Qviwg0L7QutCw0LfQsNC70L7RgdGMLCDRh9GC0L4gcmVzdDJ3ZWIg0LLRi9GC0Y/Qs9C40LLQsNC10YIg0LfQsCDRgdC+0LHQvtC5CitweXRob24tZG9jdXRpbHMuINCSINGC0L4g0LLRgNC10LzRjyDQutCw0Log0YHQsNC8IHJlc3Qyd2ViINC90LUg0L3Rg9C20LXQvS4KKworU2lnbmVkLW9mZi1ieTogRG1pdHJpeSBCbGlub3YgPGJkYUBtbnNzcGIucnU+CistLS0KKyBob3d0by9idWlsZF9uYXZ5LnR4dCB8ICAgIDYgKysrLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ob3d0by9idWlsZF9uYXZ5LnR4dCBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitpbmRleCAzZmQzYWZiLi4wZWU4MDdlIDEwMDY0NAorLS0tIGEvaG93dG8vYnVpbGRfbmF2eS50eHQKKysrKyBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitAQCAtMTE5LDggKzExOSw4IEBACisgICAgLSBsaWJ4di1kZXYKKyAgICAtIGxpYnVzcGxhc2gtZGV2CisgICAgLSBsYXRleC1tYWtlCistICAgLSB0ZXh0bGl2ZS1sYW5nLWN5cmlsbGljCistICAgLSB0ZXh0bGl2ZS1sYXRleC1leHRyYQorKyAgIC0gdGV4bGl2ZS1sYW5nLWN5cmlsbGljCisrICAgLSB0ZXhsaXZlLWxhdGV4LWV4dHJhCisgICAgLSBkaWEKKyAgICAtIHB5dGhvbi1weXJleAorICAgIC0gbGlidG9vbAorQEAgLTEyOCw3ICsxMjgsNyBAQAorICAgIC0gc294CisgICAgLSBjeXRob24KKyAgICAtIGltYWdlbWFnaWNrCistICAgLSBkb2N1dGlscworKyAgIC0gcHl0aG9uLWRvY3V0aWxzCisgCisgIy4g0L3QsCDQvNCw0YjQuNC90LUgZGluYXI6INC00L7QsdCw0LLQuNGC0Ywg0YHQstC+0Lkg0L7RgtC60YDRi9GC0YvQuSBzc2gt0LrQu9GO0Ycg0LIgYXV0aG9yaXplZF9rZXlzMiDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gZGRldgorICMuINC90LAg0YHQstC+0LXQuSDQvNCw0YjQuNC90LU6INC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCAvZXRjL3N1ZG9lcnMgKNC60L7QvNCw0L3QtNCwIGBgdmlzdWRvYGApINC/0YDQuNC80LXRgNC90L4g0YHQu9C10LTRg9GO0YnQuNC8INC+0LHRgNCw0LfQvtC8OjoKKy0tIAorMS41LjYuNQorRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA8YS51LnRob3JAZXhhbXBsZS5jb20+IChBIFUgVGhvcikKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhIHBhdGNoCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVuaW8gSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK0RhdGU6IFRodSwgMjAgQXVnIDIwMDkgMTc6MTg6MjIgLTA3MDAKK1N1YmplY3Q6IFdoeSBkb2Vzbid0IGdpdC1hbSBkb2VzIG5vdCBsaWtlID44IHNjaXNzb3JzIG1hcms/CisKK1N1YmplY3Q6IFtQQVRDSF0gQkxBSCBPTkUKKworSW4gcmVhbCBsaWZlLCB3ZSB3aWxsIHNlZSBhIGRpc2N1c3Npb24gdGhhdCBpbnNwaXJlZCB0aGlzIHBhdGNoCitkaXNjdXNzaW5nIHJlbGF0ZWQgYW5kIHVucmVsYXRlZCB0aGluZ3MgYXJvdW5kID44IHNjaXNzb3JzIG1hcmsKK2luIHRoaXMgcGFydCBvZiB0aGUgbWVzc2FnZS4KKworU3ViamVjdDogW1BBVENIXSBCTEFIIFRXTworCitBbmQgdGhlbiB3ZSB3aWxsIHNlZSB0aGUgc2Npc3NvcnMuCisKKyBUaGlzIGxpbmUgaXMgbm90IGEgc2Npc3NvcnMgbWFyayAtLSA+OCAtLSBidXQgdGFsa3MgYWJvdXQgaXQuCisgLSAtID44IC0gLSBwbGVhc2UgcmVtb3ZlIGV2ZXJ5dGhpbmcgYWJvdmUgdGhpcyBsaW5lIC0gLSA+OCAtIC0KKworU3ViamVjdDogW1BBVENIXSBUZWFjaCBtYWlsaW5mbyB0byBpZ25vcmUgZXZlcnl0aGluZyBiZWZvcmUgLS0gPjggLS0gbWFyaworRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorCitUaGlzIHRlYWNoZXMgbWFpbGluZm8gdGhlIHNjaXNzb3JzIC0tID44IC0tIG1hcms7IHRoZSBjb21tYW5kIGlnbm9yZXMKK2V2ZXJ5dGhpbmcgYmVmb3JlIGl0IGluIHRoZSBtZXNzYWdlIGJvZHkuCisKK1NpZ25lZC1vZmYtYnk6IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyB8IDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IGIwYjVkOGYuLjQ2MWM0N2UgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTcxMiw2ICs3MTIsMzQgQEAgc3RhdGljIGlubGluZSBpbnQgcGF0Y2hicmVhayhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGludCBzY2lzc29ycyhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorK3sKKysJc2l6ZV90IGksIGxlbiA9IGxpbmUtPmxlbjsKKysJaW50IHNjaXNzb3JzX2Rhc2hlc19zZWVuID0gMDsKKysJY29uc3QgY2hhciAqYnVmID0gbGluZS0+YnVmOworKworKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKysJCWlmIChpc3NwYWNlKGJ1ZltpXSkpCisrCQkJY29udGludWU7CisrCQlpZiAoYnVmW2ldID09ICctJykgeworKwkJCXNjaXNzb3JzX2Rhc2hlc19zZWVuIHw9IDAyOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyAxIDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgIj44IiwgMikpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMTsKKysJCQlpKys7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAoaSArIDcgPCBsZW4gJiYgIW1lbWNtcChidWYgKyBpLCAiY3V0IGhlcmUiLCA4KSkgeworKwkJCWkgKz0gNzsKKysJCQljb250aW51ZTsKKysJCX0KKysJCS8qIGV2ZXJ5dGhpbmcgZWxzZSAtLS0gbm90IHNjaXNzb3JzICovCisrCQlicmVhazsKKysJfQorKwlyZXR1cm4gc2Npc3NvcnNfZGFzaGVzX3NlZW4gPT0gMDM7CisrfQorKworIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyB7CisgCXN0YXRpYyBpbnQgc3RpbGxfbG9va2luZyA9IDE7CitAQCAtNzIzLDEwICs3NTEsMTcgQEAgc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAkJc3RyYnVmX2x0cmltKGxpbmUpOworIAkJaWYgKCFsaW5lLT5sZW4pCisgCQkJcmV0dXJuIDA7CistCQlpZiAoKHN0aWxsX2xvb2tpbmcgPSBjaGVja19oZWFkZXIobGluZSwgc19oZHJfZGF0YSwgMCkpICE9IDApCisrCQlzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApOworKwkJaWYgKHN0aWxsX2xvb2tpbmcpCisgCQkJcmV0dXJuIDA7CisgCX0KKyAKKysJaWYgKHNjaXNzb3JzKGxpbmUpKSB7CisrCQlmc2VlayhjbWl0bXNnLCAwTCwgU0VFS19TRVQpOworKwkJc3RpbGxfbG9va2luZyA9IDE7CisrCQlyZXR1cm4gMDsKKysJfQorKworIAkvKiBub3JtYWxpemUgdGhlIGxvZyBtZXNzYWdlIHRvIFVURi04LiAqLworIAlpZiAobWV0YWluZm9fY2hhcnNldCkKKyAJCWNvbnZlcnRfdG9fdXRmOChsaW5lLCBjaGFyc2V0LmJ1Zik7CistLSAKKzEuNi40LjEKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGZyb20pCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKworRnJvbTogYm9nb3NpdHkKKyAgLSBhIGxpc3QKKyAgLSBvZiBzdHVmZgorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGRhdGUpCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKworRGF0ZTogYm9ndXMKKworYW5kIHNvbWUgY29udGVudAorCistLS0KK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBBIEUgSSBPIFUKK0RhdGU6IE1vbiwgMTcgU2VwIDIwMTIgMTQ6MjM6NDQgLTA3MDAKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Imlzby0yMDIyLWpwIgorQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCIKKworTmV3IGNvbnRlbnQgaGVyZQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytOZXcgY29udGVudApkaWZmIC0tZ2l0IGEvdC90NTE1MC1yZXF1ZXN0LXB1bGwuc2ggYi90L3Q1MTUwLXJlcXVlc3QtcHVsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MzJmOThjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTE1MC1yZXF1ZXN0LXB1bGwuc2gKQEAgLTAsMCArMSwyMzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHdvcmtmbG93cyBpbnZvbHZpbmcgcHVsbCByZXF1ZXN0LicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlnaXQgaW5pdCAtLWJhcmUgdXBzdHJlYW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRvd25zdHJlYW0uZ2l0ICYmCisJZ2l0IGNsb25lIHVwc3RyZWFtLmdpdCB1cHN0cmVhbS1wcml2YXRlICYmCisJZ2l0IGNsb25lIGRvd25zdHJlYW0uZ2l0IGxvY2FsICYmCisKKwl0cmFzaF91cmw9ImZpbGU6Ly8kVFJBU0hfRElSRUNUT1JZIiAmJgorCWRvd25zdHJlYW1fdXJsPSIkdHJhc2hfdXJsL2Rvd25zdHJlYW0uZ2l0LyIgJiYKKwl1cHN0cmVhbV91cmw9IiR0cmFzaF91cmwvdXBzdHJlYW0uZ2l0LyIgJiYKKworCSgKKwkJY2QgdXBzdHJlYW0tcHJpdmF0ZSAmJgorCQljYXQgPDwtXEVPVCA+bW5lbW9uaWMudHh0ICYmCisJCVRoaXJ0ZXkgZGF5cyBoYXRoIE5vdmVtYmVyLAorCQlBcHJpbGUsIEp1bmUsIGFuZCBTZXB0ZW1iZXI6CisJCUVPVAorCQlnaXQgYWRkIG1uZW1vbmljLnR4dCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiXCJUaGlydHkgZGF5c1wiLCBhIHJlbWluZGVyIG9mIG1vbnRoIGxlbmd0aHMiICYmCisJCWdpdCB0YWcgLW0gInZlcnNpb24gMSIgLWEgaW5pdGlhbCAmJgorCQlnaXQgcHVzaCAtLXRhZ3Mgb3JpZ2luIG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCByZW1vdGUgYWRkIHVwc3RyZWFtICIkdHJhc2hfdXJsL3Vwc3RyZWFtLmdpdCIgJiYKKwkJZ2l0IGZldGNoIHVwc3RyZWFtICYmCisJCWdpdCBwdWxsIHVwc3RyZWFtIG1hc3RlciAmJgorCQljYXQgPDwtXEVPVCA+Pm1uZW1vbmljLnR4dCAmJgorCQlPZiB0d3llY2VzY29yZS1laWdodHQgaXMgYnV0IGVpbmUsCisJCUFuZCBhbGwgdGhlIHJlbW5hbnRlIGJlIHRocnljZXNjb3JlLWVpbmUuCisJCU/igJljb3Vyc2UgTGVhcCB5YXJlIGNvbWVzIGFu4oCZcHluZXMsCisJCUV24oCZcmllIGZvdXJlIHlhcmVzLCBnb3RlIGl0IHJ5Z2h0aC4KKwkJQW7igJl0d3llY2VzY29yZS1laWdodCBpcyBidXQgdHd5ZWNlc2NvcmUtbnluZS4KKwkJRU9UCisJCWdpdCBhZGQgbW5lbW9uaWMudHh0ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJNb3JlIGRldGFpbCIgJiYKKwkJZ2l0IHRhZyAtbSAidmVyc2lvbiAyIiAtYSBmdWxsICYmCisJCWdpdCBjaGVja291dCAtYiBzaW1wbGlmeSBIRUFEXiAmJgorCQltdiBtbmVtb25pYy50eHQgbW5lbW9uaWMuc3RhbmRhcmQgJiYKKwkJY2F0IDw8LVxFT1QgPm1uZW1vbmljLmNsYXJpZmllZCAmJgorCQlUaGlydHkgZGF5cyBoYXMgU2VwdGVtYmVyLAorCQlBbGwgdGhlIHJlc3QgSSBjYW7igJl0IHJlbWVtYmVyLgorCQlFT1QKKwkJZ2l0IGFkZCAtTiBtbmVtb25pYy5zdGFuZGFyZCBtbmVtb25pYy5jbGFyaWZpZWQgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiQWRhcHQgdG8gdXNlIG1vZGVybiwgc2ltcGxlciBFbmdsaXNoCisKK0J1dCBrZWVwIHRoZSBvbGQgdmVyc2lvbiwgdG9vLCBpbiBjYXNlIHNvbWUgcGVvcGxlIHByZWZlciBpdC4iICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHR3byBzY3JpcHRzIGZvciByZWFkaW5nIHB1bGwgcmVxdWVzdHMnICcKKworCWRvd25zdHJlYW1fdXJsX2Zvcl9zZWQ9JCgKKwkJcHJpbnRmICIlc1xuIiAiJGRvd25zdHJlYW1fdXJsIiB8CisJCXNlZCAtZSAnXCcncy9cXC9cXFxcL2cnXCcnIC1lICdcJydzL1tbLy4qXiRdL1xcJi9nJ1wnJworCSkgJiYKKworCWNhdCA8PC1cRU9UID5yZWFkLXJlcXVlc3Quc2VkICYmCisJIyEvYmluL3NlZCAtbmYKKwkjIE5vdGUgdGhhdCBhIHJlcXVlc3QgY291bGQgYXNrIGZvciAidGFnICR0YWduYW1lIgorCS8gaW4gdGhlIGdpdCByZXBvc2l0b3J5IGF0OiQvIWQKKwluCisJL14kLyBuCisJcy8gdGFnIFwoW14gXSpcKSQvIHRhZy0tXDEvCisJcy9eWyAJXSpcKC4qXCkgXChbXiBdKlwpL3BsZWFzZSBwdWxsXAorCVwxXAorCVwyL3AKKwlxCisJRU9UCisKKwljYXQgPDwtRU9UID5mdXp6LnNlZAorCSMhL2Jpbi9zZWQgLW5mCisJcy8kX3g0MC9PQkpFQ1RfTkFNRS9nCisJcy9BIFUgVGhvci9BVVRIT1IvZworCXMvWy0wLTldXHsxMFx9IFs6MC05XVx7OFx9IFstK11bMC05XVx7NFx9L0RBVEUvZworCXMvICAgICAgICBbXiBdLiovICAgICAgICBTVUJKRUNUL2cKKwlzLyAgW14gXS4qIChEQVRFKS8gIFNVQkpFQ1QgKERBVEUpL2cKKwlzLyRkb3duc3RyZWFtX3VybF9mb3Jfc2VkL1VSTC9nCisJcy9mb3ItdXBzdHJlYW0vQlJBTkNIL2cKKwlzL21uZW1vbmljLnR4dC9GSUxFTkFNRS9nCisJcy9edmVyc2lvbiBbMC05XS9WRVJTSU9OLworCS9eIEZJTEVOQU1FIHwgKlswLTldKiBbLStdKlwkLyBiIGRpZmZzdGF0CisJL15BVVRIT1IgKFswLTldKik6XCQvIGIgc2hvcnRsb2cKKwlwCisJYgorCTogZGlmZnN0YXQKKwluCisJLyBbMC05XSogZmlsZXMqIGNoYW5nZWQvIHsKKwkJYVxcCisJRElGRlNUQVQKKwkJYgorCX0KKwliIGRpZmZzdGF0CisJOiBzaG9ydGxvZworCS9eICAgICAgICBbYS16QS1aXS8gbgorCS9eW2EtekEtWl0qIChbMC05XSopOlwkLyBuCisJL15cJC8gTgorCS9eXG5bYS16QS1aXSogKFswLTldKik6XCQvIXsKKwkJYVxcCisJU0hPUlRMT0cKKwkJRAorCX0KKwluCisJYiBzaG9ydGxvZworCUVPVAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcmVxdWVzdCB3aGVuIGZvcmdvdCB0byBwdXNoJyAnCisKKwlybSAtZnIgZG93bnN0cmVhbS5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZG93bnN0cmVhbS5naXQgJiYKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXF1ZXN0LXB1bGwgaW5pdGlhbCAiJGRvd25zdHJlYW1fdXJsIiBcCisJCQkyPi4uL2VycgorCSkgJiYKKwlncmVwICJObyBicmFuY2ggb2YuKmlzIGF0OlwkIiBlcnIgJiYKKwlncmVwICJBcmUgeW91IHN1cmUgeW91IHB1c2hlZCIgZXJyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZXF1ZXN0IGFmdGVyIHB1c2gnICcKKworCXJtIC1mciBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCSgKKwkJY2QgbG9jYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcjpmb3ItdXBzdHJlYW0gJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsIG9yaWdpbiA+Li4vcmVxdWVzdAorCSkgJiYKKwlzZWQgLW5mIHJlYWQtcmVxdWVzdC5zZWQgPHJlcXVlc3QgPmRpZ2VzdCAmJgorCWNhdCBkaWdlc3QgJiYKKwl7CisJCXJlYWQgdGFzayAmJgorCQlyZWFkIHJlcG9zaXRvcnkgJiYKKwkJcmVhZCBicmFuY2gKKwl9IDxkaWdlc3QgJiYKKwkoCisJCWNkIHVwc3RyZWFtLXByaXZhdGUgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IHB1bGwgLS1mZi1vbmx5ICIkcmVwb3NpdG9yeSIgIiRicmFuY2giCisJKSAmJgorCXRlc3QgIiRicmFuY2giID0gZm9yLXVwc3RyZWFtICYmCisJdGVzdF9jbXAgbG9jYWwvbW5lbW9uaWMudHh0IHVwc3RyZWFtLXByaXZhdGUvbW5lbW9uaWMudHh0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWVzdCBuYW1lcyBhbiBhcHByb3ByaWF0ZSBicmFuY2gnICcKKworCXJtIC1mciBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCSgKKwkJY2QgbG9jYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS10YWdzIG9yaWdpbiBtYXN0ZXIgc2ltcGxpZnkgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcjpmb3ItdXBzdHJlYW0gJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiID4uLi9yZXF1ZXN0CisJKSAmJgorCXNlZCAtbmYgcmVhZC1yZXF1ZXN0LnNlZCA8cmVxdWVzdCA+ZGlnZXN0ICYmCisJY2F0IGRpZ2VzdCAmJgorCXsKKwkJcmVhZCB0YXNrICYmCisJCXJlYWQgcmVwb3NpdG9yeSAmJgorCQlyZWFkIGJyYW5jaAorCX0gPGRpZ2VzdCAmJgorCXRlc3QgIiRicmFuY2giID0gdGFncy9mdWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZXF1ZXN0IGZvcm1hdCcgJworCisJcm0gLWZyIGRvd25zdHJlYW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRvd25zdHJlYW0uZ2l0ICYmCisJY2F0IDw8LVxFT1QgPmV4cGVjdCAmJgorCVRoZSBmb2xsb3dpbmcgY2hhbmdlcyBzaW5jZSBjb21taXQgT0JKRUNUX05BTUU6CisKKwkgIFNVQkpFQ1QgKERBVEUpCisKKwlhcmUgYXZhaWxhYmxlIGluIHRoZSBnaXQgcmVwb3NpdG9yeSBhdDoKKworCSAgVVJMIEJSQU5DSAorCisJZm9yIHlvdSB0byBmZXRjaCBjaGFuZ2VzIHVwIHRvIE9CSkVDVF9OQU1FOgorCisJICBTVUJKRUNUIChEQVRFKQorCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVZFUlNJT04KKworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTSE9SVExPRworCisJRElGRlNUQVQKKwlFT1QKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyICYmCisJCWdpdCBwdXNoIG9yaWdpbiBtYXN0ZXI6Zm9yLXVwc3RyZWFtICYmCisJCWdpdCByZXF1ZXN0LXB1bGwgaW5pdGlhbCAiJGRvd25zdHJlYW1fdXJsIiA+Li4vcmVxdWVzdAorCSkgJiYKKwk8cmVxdWVzdCBzZWQgLW5mIGZ1enouc2VkID5yZXF1ZXN0LmZ1enp5ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCByZXF1ZXN0LmZ1enp5CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWVzdC1wdWxsIGlnbm9yZXMgT1BUSU9OU19LRUVQREFTSERBU0ggcG9pc29uJyAnCisKKwkoCisJCWNkIGxvY2FsICYmCisJCU9QVElPTlNfS0VFUERBU0hEQVNIPVllcyAmJgorCQlleHBvcnQgT1BUSU9OU19LRUVQREFTSERBU0ggJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcjpmb3ItdXBzdHJlYW0gJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCAtLSBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiID4uLi9yZXF1ZXN0CisJKQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwMC1wYWNrLW9iamVjdC5zaCBiL3QvdDUzMDAtcGFjay1vYmplY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTA3Yzg3MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDAtcGFjay1vYmplY3Quc2gKQEAgLTAsMCArMSw0MjYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHBhY2stb2JqZWN0CisKKycKKy4gLi90ZXN0LWxpYi5zaAorCitUUkFTSD1gcHdkYAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAnIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCogJiYKKyAgICAgIiRQRVJMX1BBVEgiIC1lICJwcmludCBcImFcIiB4IDQwOTY7IiA+IGEgJiYKKyAgICAgIiRQRVJMX1BBVEgiIC1lICJwcmludCBcImJcIiB4IDQwOTY7IiA+IGIgJiYKKyAgICAgIiRQRVJMX1BBVEgiIC1lICJwcmludCBcImNcIiB4IDQwOTY7IiA+IGMgJiYKKyAgICAgdGVzdC1nZW5yYW5kb20gInNlZWQgYSIgMjA5NzE1MiA+IGFfYmlnICYmCisgICAgIHRlc3QtZ2VucmFuZG9tICJzZWVkIGIiIDIwOTcxNTIgPiBiX2JpZyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgYV9iaWcgYiBiX2JpZyBjICYmCisgICAgIGNhdCBjID5kICYmIGVjaG8gZm9vID4+ZCAmJiBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGQgJiYKKyAgICAgdHJlZT1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGNvbW1pdD1gZ2l0IGNvbW1pdC10cmVlICR0cmVlIDwvZGV2L251bGxgICYmIHsKKwkgZWNobyAkdHJlZSAmJgorCSBlY2hvICRjb21taXQgJiYKKwkgZ2l0IGxzLXRyZWUgJHRyZWUgfCBzZWQgLWUgInMvLiogXFwoWzAtOWEtZl0qXFwpCS4qL1xcMS8iCisgICAgIH0gPm9iai1saXN0ICYmIHsKKwkgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLXAgJGNvbW1pdCAmJgorCSB3aGlsZSByZWFkIG9iamVjdAorCSBkbworCSAgICB0PWBnaXQgY2F0LWZpbGUgLXQgJG9iamVjdGAgJiYKKwkgICAgZ2l0IGNhdC1maWxlICR0ICRvYmplY3QgfHwgcmV0dXJuIDEKKwkgZG9uZSA8b2JqLWxpc3QKKyAgICAgfSA+ZXhwZWN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjayB3aXRob3V0IGRlbHRhJyBcCisgICAgJ3BhY2tuYW1lXzE9JChnaXQgcGFjay1vYmplY3RzIC0td2luZG93PTAgdGVzdC0xIDxvYmotbGlzdCknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwYWNrLW9iamVjdHMgd2l0aCBib2d1cyBhcmd1bWVudHMnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IHBhY2stb2JqZWN0cyAtLXdpbmRvdz0wIHRlc3QtMSBibGFoIGJsYWggPG9iai1saXN0JworCitybSAtZnIgLmdpdDIKK21rZGlyIC5naXQyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd1bnBhY2sgd2l0aG91dCBkZWx0YScgXAorICAgICJHSVRfT0JKRUNUX0RJUkVDVE9SWT0uZ2l0Mi9vYmplY3RzICYmCisgICAgIGV4cG9ydCBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgorICAgICBnaXQgaW5pdCAmJgorICAgICBnaXQgdW5wYWNrLW9iamVjdHMgLW4gPHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgJiYKKyAgICAgZ2l0IHVucGFjay1vYmplY3RzIDx0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrIgorCit1bnNldCBHSVRfT0JKRUNUX0RJUkVDVE9SWQorY2QgIiRUUkFTSC8uZ2l0MiIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIHVucGFjayB3aXRob3V0IGRlbHRhJyBcCisgICAgJyhjZCAuLi8uZ2l0ICYmIGZpbmQgb2JqZWN0cyAtdHlwZSBmIC1wcmludCkgfAorICAgICB3aGlsZSByZWFkIHBhdGgKKyAgICAgZG8KKyAgICAgICAgIGNtcCAkcGF0aCAuLi8uZ2l0LyRwYXRoIHx8IHsKKwkgICAgIGVjaG8gJHBhdGggZGlmZmVycy4KKwkgICAgIHJldHVybiAxCisJIH0KKyAgICAgZG9uZScKK2NkICIkVFJBU0giCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwYWNrIHdpdGggUkVGX0RFTFRBJyBcCisgICAgJ3B3ZCAmJgorICAgICBwYWNrbmFtZV8yPSQoZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTIgPG9iai1saXN0KScKKworcm0gLWZyIC5naXQyCitta2RpciAuZ2l0MgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndW5wYWNrIHdpdGggUkVGX0RFTFRBJyBcCisgICAgJ0dJVF9PQkpFQ1RfRElSRUNUT1JZPS5naXQyL29iamVjdHMgJiYKKyAgICAgZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCisgICAgIGdpdCBpbml0ICYmCisgICAgIGdpdCB1bnBhY2stb2JqZWN0cyAtbiA8dGVzdC0yLSR7cGFja25hbWVfMn0ucGFjayAmJgorICAgICBnaXQgdW5wYWNrLW9iamVjdHMgPHRlc3QtMi0ke3BhY2tuYW1lXzJ9LnBhY2snCisKK3Vuc2V0IEdJVF9PQkpFQ1RfRElSRUNUT1JZCitjZCAiJFRSQVNILy5naXQyIgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIHVucGFjayB3aXRoIFJFRl9ERUxUQScgXAorICAgICcoY2QgLi4vLmdpdCAmJiBmaW5kIG9iamVjdHMgLXR5cGUgZiAtcHJpbnQpIHwKKyAgICAgd2hpbGUgcmVhZCBwYXRoCisgICAgIGRvCisgICAgICAgICBjbXAgJHBhdGggLi4vLmdpdC8kcGF0aCB8fCB7CisJICAgICBlY2hvICRwYXRoIGRpZmZlcnMuCisJICAgICByZXR1cm4gMQorCSB9CisgICAgIGRvbmUnCitjZCAiJFRSQVNIIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjayB3aXRoIE9GU19ERUxUQScgXAorICAgICdwd2QgJiYKKyAgICAgcGFja25hbWVfMz0kKGdpdCBwYWNrLW9iamVjdHMgLS1kZWx0YS1iYXNlLW9mZnNldCB0ZXN0LTMgPG9iai1saXN0KScKKworcm0gLWZyIC5naXQyCitta2RpciAuZ2l0MgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndW5wYWNrIHdpdGggT0ZTX0RFTFRBJyBcCisgICAgJ0dJVF9PQkpFQ1RfRElSRUNUT1JZPS5naXQyL29iamVjdHMgJiYKKyAgICAgZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCisgICAgIGdpdCBpbml0ICYmCisgICAgIGdpdCB1bnBhY2stb2JqZWN0cyAtbiA8dGVzdC0zLSR7cGFja25hbWVfM30ucGFjayAmJgorICAgICBnaXQgdW5wYWNrLW9iamVjdHMgPHRlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2snCisKK3Vuc2V0IEdJVF9PQkpFQ1RfRElSRUNUT1JZCitjZCAiJFRSQVNILy5naXQyIgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIHVucGFjayB3aXRoIE9GU19ERUxUQScgXAorICAgICcoY2QgLi4vLmdpdCAmJiBmaW5kIG9iamVjdHMgLXR5cGUgZiAtcHJpbnQpIHwKKyAgICAgd2hpbGUgcmVhZCBwYXRoCisgICAgIGRvCisgICAgICAgICBjbXAgJHBhdGggLi4vLmdpdC8kcGF0aCB8fCB7CisJICAgICBlY2hvICRwYXRoIGRpZmZlcnMuCisJICAgICByZXR1cm4gMQorCSB9CisgICAgIGRvbmUnCitjZCAiJFRSQVNIIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wYXJlIGRlbHRhIGZsYXZvcnMnICcKKwkiJFBFUkxfUEFUSCIgLWUgJ1wnJworCQlkZWZpbmVkKCRfID0gLXMgJF8pIG9yIGRpZSBmb3IgQEFSR1Y7CisJCWV4aXQgMSBpZiAkQVJHVlswXSA8PSAkQVJHVlsxXTsKKwknXCcnIHRlc3QtMi0kcGFja25hbWVfMi5wYWNrIHRlc3QtMy0kcGFja25hbWVfMy5wYWNrCisnCisKK3JtIC1mciAuZ2l0MgorbWtkaXIgLmdpdDIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VzZSBwYWNrZWQgb2JqZWN0cycgXAorICAgICdHSVRfT0JKRUNUX0RJUkVDVE9SWT0uZ2l0Mi9vYmplY3RzICYmCisgICAgIGV4cG9ydCBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgorICAgICBnaXQgaW5pdCAmJgorICAgICBjcCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrIHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCAuZ2l0Mi9vYmplY3RzL3BhY2sgJiYgeworCSBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCAkY29tbWl0ICYmCisJIHdoaWxlIHJlYWQgb2JqZWN0CisJIGRvCisJICAgIHQ9YGdpdCBjYXQtZmlsZSAtdCAkb2JqZWN0YCAmJgorCSAgICBnaXQgY2F0LWZpbGUgJHQgJG9iamVjdCB8fCByZXR1cm4gMQorCSBkb25lIDxvYmotbGlzdAorICAgIH0gPmN1cnJlbnQgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgY3VycmVudCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VzZSBwYWNrZWQgZGVsdGlmaWVkIChSRUZfREVMVEEpIG9iamVjdHMnIFwKKyAgICAnR0lUX09CSkVDVF9ESVJFQ1RPUlk9LmdpdDIvb2JqZWN0cyAmJgorICAgICBleHBvcnQgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKyAgICAgcm0gLWYgLmdpdDIvb2JqZWN0cy9wYWNrL3Rlc3QtKiAmJgorICAgICBjcCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrIHRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCAuZ2l0Mi9vYmplY3RzL3BhY2sgJiYgeworCSBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCAkY29tbWl0ICYmCisJIHdoaWxlIHJlYWQgb2JqZWN0CisJIGRvCisJICAgIHQ9YGdpdCBjYXQtZmlsZSAtdCAkb2JqZWN0YCAmJgorCSAgICBnaXQgY2F0LWZpbGUgJHQgJG9iamVjdCB8fCByZXR1cm4gMQorCSBkb25lIDxvYmotbGlzdAorICAgIH0gPmN1cnJlbnQgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgY3VycmVudCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VzZSBwYWNrZWQgZGVsdGlmaWVkIChPRlNfREVMVEEpIG9iamVjdHMnIFwKKyAgICAnR0lUX09CSkVDVF9ESVJFQ1RPUlk9LmdpdDIvb2JqZWN0cyAmJgorICAgICBleHBvcnQgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKyAgICAgcm0gLWYgLmdpdDIvb2JqZWN0cy9wYWNrL3Rlc3QtKiAmJgorICAgICBjcCB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrIHRlc3QtMy0ke3BhY2tuYW1lXzN9LmlkeCAuZ2l0Mi9vYmplY3RzL3BhY2sgJiYgeworCSBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCAkY29tbWl0ICYmCisJIHdoaWxlIHJlYWQgb2JqZWN0CisJIGRvCisJICAgIHQ9YGdpdCBjYXQtZmlsZSAtdCAkb2JqZWN0YCAmJgorCSAgICBnaXQgY2F0LWZpbGUgJHQgJG9iamVjdCB8fCByZXR1cm4gMQorCSBkb25lIDxvYmotbGlzdAorICAgIH0gPmN1cnJlbnQgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgY3VycmVudCcKKwordW5zZXQgR0lUX09CSkVDVF9ESVJFQ1RPUlkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Vydml2ZSBtaXNzaW5nIG9iamVjdHMvcGFjayBkaXJlY3RvcnknICcKKwkoCisJCXJtIC1mciBtaXNzaW5nLXBhY2sgJiYKKwkJbWtkaXIgbWlzc2luZy1wYWNrICYmCisJCWNkIG1pc3NpbmctcGFjayAmJgorCQlnaXQgaW5pdCAmJgorCQlHT1A9LmdpdC9vYmplY3RzL3BhY2sKKwkJcm0gLWZyICRHT1AgJiYKKwkJZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiAtLWtlZXA9dGVzdCA8Li4vdGVzdC0zLSR7cGFja25hbWVfM30ucGFjayAmJgorCQl0ZXN0IC1mICRHT1AvcGFjay0ke3BhY2tuYW1lXzN9LnBhY2sgJiYKKwkJdGVzdF9jbXAgJEdPUC9wYWNrLSR7cGFja25hbWVfM30ucGFjayAuLi90ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrICYmCisJCXRlc3QgLWYgJEdPUC9wYWNrLSR7cGFja25hbWVfM30uaWR4ICYmCisJCXRlc3RfY21wICRHT1AvcGFjay0ke3BhY2tuYW1lXzN9LmlkeCAuLi90ZXN0LTMtJHtwYWNrbmFtZV8zfS5pZHggJiYKKwkJdGVzdCAtZiAkR09QL3BhY2stJHtwYWNrbmFtZV8zfS5rZWVwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5IHBhY2snIFwKKyAgICAnZ2l0IHZlcmlmeS1wYWNrCXRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCBcCisJCQl0ZXN0LTItJHtwYWNrbmFtZV8yfS5pZHggXAorCQkJdGVzdC0zLSR7cGFja25hbWVfM30uaWR4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5IHBhY2sgLXYnIFwKKyAgICAnZ2l0IHZlcmlmeS1wYWNrIC12CXRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCBcCisJCQl0ZXN0LTItJHtwYWNrbmFtZV8yfS5pZHggXAorCQkJdGVzdC0zLSR7cGFja25hbWVfM30uaWR4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgY2F0Y2hlcyBtaXNtYXRjaGVkIC5pZHggYW5kIC5wYWNrIGZpbGVzJyBcCisgICAgJ2NhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggPnRlc3QtMy5pZHggJiYKKyAgICAgY2F0IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LnBhY2sgPnRlc3QtMy5wYWNrICYmCisgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMuaWR4CisgICAgIHRoZW4gZmFsc2UKKyAgICAgZWxzZSA6OworICAgICBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIGNhdGNoZXMgYSBjb3JydXB0ZWQgcGFjayBzaWduYXR1cmUnIFwKKyAgICAnY2F0IHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgPnRlc3QtMy5wYWNrICYmCisgICAgIGVjaG8gfCBkZCBvZj10ZXN0LTMucGFjayBjb3VudD0xIGJzPTEgY29udj1ub3RydW5jIHNlZWs9MiAmJgorICAgICBpZiBnaXQgdmVyaWZ5LXBhY2sgdGVzdC0zLmlkeAorICAgICB0aGVuIGZhbHNlCisgICAgIGVsc2UgOjsKKyAgICAgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnktcGFjayBjYXRjaGVzIGEgY29ycnVwdGVkIHBhY2sgdmVyc2lvbicgXAorICAgICdjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgZWNobyB8IGRkIG9mPXRlc3QtMy5wYWNrIGNvdW50PTEgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz03ICYmCisgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMuaWR4CisgICAgIHRoZW4gZmFsc2UKKyAgICAgZWxzZSA6OworICAgICBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIGNhdGNoZXMgYSBjb3JydXB0ZWQgdHlwZS9zaXplIG9mIHRoZSAxc3QgcGFja2VkIG9iamVjdCBkYXRhJyBcCisgICAgJ2NhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBlY2hvIHwgZGQgb2Y9dGVzdC0zLnBhY2sgY291bnQ9MSBicz0xIGNvbnY9bm90cnVuYyBzZWVrPTEyICYmCisgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMuaWR4CisgICAgIHRoZW4gZmFsc2UKKyAgICAgZWxzZSA6OworICAgICBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIGNhdGNoZXMgYSBjb3JydXB0ZWQgc3VtIG9mIHRoZSBpbmRleCBmaWxlIGl0c2VsZicgXAorICAgICdsPWB3YyAtYyA8dGVzdC0zLmlkeGAgJiYKKyAgICAgbD1gZXhwciAkbCAtIDIwYCAmJgorICAgICBjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgcHJpbnRmICIlMjBzIiAiIiB8IGRkIG9mPXRlc3QtMy5pZHggY291bnQ9MjAgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0kbCAmJgorICAgICBpZiBnaXQgdmVyaWZ5LXBhY2sgdGVzdC0zLnBhY2sKKyAgICAgdGhlbiBmYWxzZQorICAgICBlbHNlIDo7CisgICAgIGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYnVpbGQgcGFjayBpbmRleCBmb3IgYW4gZXhpc3RpbmcgcGFjaycgXAorICAgICdjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgZ2l0IGluZGV4LXBhY2sgLW8gdG1wLmlkeCB0ZXN0LTMucGFjayAmJgorICAgICBjbXAgdG1wLmlkeCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggJiYKKworICAgICBnaXQgaW5kZXgtcGFjayB0ZXN0LTMucGFjayAmJgorICAgICBjbXAgdGVzdC0zLmlkeCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggJiYKKworICAgICBjYXQgdGVzdC0yLSR7cGFja25hbWVfMn0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgZ2l0IGluZGV4LXBhY2sgLW8gdG1wLmlkeCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrICYmCisgICAgIGNtcCB0bXAuaWR4IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCAmJgorCisgICAgIGdpdCBpbmRleC1wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgIGNtcCB0ZXN0LTMuaWR4IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCAmJgorCisgICAgIGNhdCB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBnaXQgaW5kZXgtcGFjayAtbyB0bXAuaWR4IHRlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2sgJiYKKyAgICAgY21wIHRtcC5pZHggdGVzdC0zLSR7cGFja25hbWVfM30uaWR4ICYmCisKKyAgICAgZ2l0IGluZGV4LXBhY2sgdGVzdC0zLnBhY2sgJiYKKyAgICAgY21wIHRlc3QtMy5pZHggdGVzdC0zLSR7cGFja25hbWVfM30uaWR4ICYmCisKKyAgICAgOicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYWNraW5nIHdpdGggLS1zdHJpY3QnICcKKworCWZvciBqIGluIGEgYiBjIGQgZSBmIGcKKwlkbworCQlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5CisJCWRvCisJCQlvPSQoZWNobyAkaiRpIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJCQllY2hvICIxMDA2NDQgJG8JMCAkaiRpIgorCQlkb25lCisJZG9uZSA+TElTVCAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8TElTVCAmJgorCUxJU1Q9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJaGVhZCAtbiAxMCBMSVNUIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlMST0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwl0YWlsIC1uIDEwIExJU1QgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCVNUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJUEFDSzU9JCggZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAiJExJU1QiICIkTEkiICIkU1QiIHwgXAorCQlnaXQgcGFjay1vYmplY3RzIHRlc3QtNSApICYmCisJUEFDSzY9JCggKAorCQkJZWNobyAiJExJU1QiCisJCQllY2hvICIkTEkiCisJCQllY2hvICIkU1QiCisJCSApIHwgZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTYgKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdGVzdC01ICYmCisJKAorCQljZCB0ZXN0LTUgJiYKKwkJZ2l0IHVucGFjay1vYmplY3RzIC0tc3RyaWN0IDwuLi90ZXN0LTUtJFBBQ0s1LnBhY2sgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJExJU1QgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJExJICYmCisJCWdpdCBscy10cmVlIC1yICRTVAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3QtNiAmJgorCSgKKwkJIyB0cmVlLW9ubHkgaW50byBlbXB0eSByZXBvIC0tIG1hbnkgdW5yZWFjaGFibGVzCisJCWNkIHRlc3QtNiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QgPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkgJiYKKwkoCisJCSMgYWxyZWFkeSBwb3B1bGF0ZWQgLS0gbm8gdW5yZWFjaGFibGVzCisJCWNkIHRlc3QtNSAmJgorCQlnaXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QgPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayB3aXRoIC0tc3RyaWN0JyAnCisKKwlmb3IgaiBpbiBhIGIgYyBkIGUgZiBnCisJZG8KKwkJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOQorCQlkbworCQkJbz0kKGVjaG8gJGokaSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQkJZWNobyAiMTAwNjQ0ICRvCTAgJGokaSIKKwkJZG9uZQorCWRvbmUgPkxJU1QgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPExJU1QgJiYKKwlMSVNUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWhlYWQgLW4gMTAgTElTVCB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJTEk9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJdGFpbCAtbiAxMCBMSVNUIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlTVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCVBBQ0s1PSQoIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgIiRMSVNUIiAiJExJIiAiJFNUIiB8IFwKKwkJZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTUgKSAmJgorCVBBQ0s2PSQoICgKKwkJCWVjaG8gIiRMSVNUIgorCQkJZWNobyAiJExJIgorCQkJZWNobyAiJFNUIgorCQkgKSB8IGdpdCBwYWNrLW9iamVjdHMgdGVzdC02ICkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3QtNyAmJgorCSgKKwkJY2QgdGVzdC03ICYmCisJCWdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tc3RkaW4gPC4uL3Rlc3QtNS0kUEFDSzUucGFjayAmJgorCQlnaXQgbHMtdHJlZSAtciAkTElTVCAmJgorCQlnaXQgbHMtdHJlZSAtciAkTEkgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJFNUCisJKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdGVzdC04ICYmCisJKAorCQkjIHRyZWUtb25seSBpbnRvIGVtcHR5IHJlcG8gLS0gbWFueSB1bnJlYWNoYWJsZXMKKwkJY2QgdGVzdC04ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tc3RkaW4gPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkgJiYKKwkoCisJCSMgYWxyZWFkeSBwb3B1bGF0ZWQgLS0gbm8gdW5yZWFjaGFibGVzCisJCWNkIHRlc3QtNyAmJgorCQlnaXQgaW5kZXgtcGFjayAtLXN0cmljdCAtLXN0ZGluIDwuLi90ZXN0LTYtJFBBQ0s2LnBhY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvbm9yIHBhY2sucGFja1NpemVMaW1pdCcgJworCWdpdCBjb25maWcgcGFjay5wYWNrU2l6ZUxpbWl0IDNtICYmCisJcGFja25hbWVfMTA9JChnaXQgcGFjay1vYmplY3RzIHRlc3QtMTAgPG9iai1saXN0KSAmJgorCXRlc3QgMiA9ICQobHMgdGVzdC0xMC0qLnBhY2sgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHJlc3VsdGluZyBwYWNrcycgJworCWdpdCB2ZXJpZnktcGFjayB0ZXN0LTEwLSoucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b2xlcmF0ZSBwYWNrc2l6ZWxpbWl0IHNtYWxsZXIgdGhhbiBiaWdnZXN0IG9iamVjdCcgJworCWdpdCBjb25maWcgcGFjay5wYWNrU2l6ZUxpbWl0IDEgJiYKKwlwYWNrbmFtZV8xMT0kKGdpdCBwYWNrLW9iamVjdHMgdGVzdC0xMSA8b2JqLWxpc3QpICYmCisJdGVzdCA1ID0gJChscyB0ZXN0LTExLSoucGFjayB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgcmVzdWx0aW5nIHBhY2tzJyAnCisJZ2l0IHZlcmlmeS1wYWNrIHRlc3QtMTEtKi5wYWNrCisnCisKKyMKKyMgV0FSTklORyEKKyMKKyMgVGhlIGZvbGxvd2luZyB0ZXN0IGlzIGRlc3RydWN0aXZlLiAgUGxlYXNlIGtlZXAgdGhlIG5leHQKKyMgdHdvIHRlc3RzIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZmFrZSBhIFNIQTEgaGFzaCBjb2xsaXNpb24nIFwKKyAgICAndGVzdCAtZgkuZ2l0L29iamVjdHMvYzgvMmRlMTkzMTJiNmMzNjk1YzBjMThmNzA3MDlhNmM1MzU2ODJhNjcgJiYKKyAgICAgY3AgLWYJLmdpdC9vYmplY3RzLzlkLzIzNWVkMDdjZDE5ODExYTZjZWIzNDJkZTgyZjE5MGU0OWM5ZjY4IFwKKwkJLmdpdC9vYmplY3RzL2M4LzJkZTE5MzEyYjZjMzY5NWMwYzE4ZjcwNzA5YTZjNTM1NjgyYTY3JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbWFrZSBzdXJlIGluZGV4LXBhY2sgZGV0ZWN0cyB0aGUgU0hBMSBjb2xsaXNpb24nIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLW8gYmFkLmlkeCB0ZXN0LTMucGFjayAyPm1zZyAmJgorICAgICB0ZXN0X2kxOG5ncmVwICJTSEExIENPTExJU0lPTiBGT1VORCIgbXNnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbWFrZSBzdXJlIGluZGV4LXBhY2sgZGV0ZWN0cyB0aGUgU0hBMSBjb2xsaXNpb24gKGxhcmdlIGJsb2JzKScgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgLWMgY29yZS5iaWdmaWxldGhyZXNob2xkPTEgaW5kZXgtcGFjayAtbyBiYWQuaWR4IHRlc3QtMy5wYWNrIDI+bXNnICYmCisgICAgIHRlc3RfaTE4bmdyZXAgIlNIQTEgQ09MTElTSU9OIEZPVU5EIiBtc2cnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwMS1zbGlkaW5nLXdpbmRvdy5zaCBiL3QvdDUzMDEtc2xpZGluZy13aW5kb3cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmZjNWFmNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDEtc2xpZGluZy13aW5kb3cuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBTaGF3biBQZWFyY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nbW1hcCBzbGlkaW5nIHdpbmRvdyB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAnIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCogJiYKKyAgICAgZm9yIGkgaW4gYSBiIGMKKyAgICAgZG8KKyAgICAgICAgIGVjaG8gJGkgPiRpICYmCisgICAgICAgICB0ZXN0LWdlbnJhbmRvbSAiJGkiIDMyNzY4ID4+JGkgJiYKKyAgICAgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJGkgfHwgcmV0dXJuIDEKKyAgICAgZG9uZSAmJgorICAgICBlY2hvIGQgPmQgJiYgY2F0IGMgPj5kICYmIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZCAmJgorICAgICB0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKKyAgICAgY29tbWl0MT1gZ2l0IGNvbW1pdC10cmVlICR0cmVlIDwvZGV2L251bGxgICYmCisgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJGNvbW1pdDEgJiYKKyAgICAgZ2l0IHJlcGFjayAtYSAtZCAmJgorICAgICB0ZXN0ICJgZ2l0IGNvdW50LW9iamVjdHNgIiA9ICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiAmJgorICAgICBwYWNrMT1gbHMgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrYCAmJgorICAgICB0ZXN0IC1mICIkcGFjazEiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgLXYsIGRlZmF1bHRzJyBcCisgICAgJ2dpdCB2ZXJpZnktcGFjayAtdiAiJHBhY2sxIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIC12LCBwYWNrZWRHaXRXaW5kb3dTaXplID09IDEgcGFnZScgXAorICAgICdnaXQgY29uZmlnIGNvcmUucGFja2VkR2l0V2luZG93U2l6ZSA1MTIgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrIC12ICIkcGFjazEiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgLXYsIHBhY2tlZEdpdHtXaW5kb3dTaXplLExpbWl0fSA9PSAxIHBhZ2UnIFwKKyAgICAnZ2l0IGNvbmZpZyBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgNTEyICYmCisgICAgIGdpdCBjb25maWcgY29yZS5wYWNrZWRHaXRMaW1pdCA1MTIgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrIC12ICIkcGFjazEiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVwYWNrIC1hIC1kLCBwYWNrZWRHaXR7V2luZG93U2l6ZSxMaW1pdH0gPT0gMSBwYWdlJyBcCisgICAgJ2dpdCBjb25maWcgY29yZS5wYWNrZWRHaXRXaW5kb3dTaXplIDUxMiAmJgorICAgICBnaXQgY29uZmlnIGNvcmUucGFja2VkR2l0TGltaXQgNTEyICYmCisgICAgIGNvbW1pdDI9YGdpdCBjb21taXQtdHJlZSAkdHJlZSAtcCAkY29tbWl0MSA8L2Rldi9udWxsYCAmJgorICAgICBnaXQgdXBkYXRlLXJlZiBIRUFEICRjb21taXQyICYmCisgICAgIGdpdCByZXBhY2sgLWEgLWQgJiYKKyAgICAgdGVzdCAiYGdpdCBjb3VudC1vYmplY3RzYCIgPSAiMCBvYmplY3RzLCAwIGtpbG9ieXRlcyIgJiYKKyAgICAgcGFjazI9YGxzIC5naXQvb2JqZWN0cy9wYWNrLyoucGFja2AgJiYKKyAgICAgdGVzdCAtZiAiJHBhY2syIiAmJgorICAgICB0ZXN0ICIkcGFjazEiIFwhPSAiJHBhY2syIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIC12LCBkZWZhdWx0cycgXAorICAgICdnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5wYWNrZWRHaXRXaW5kb3dTaXplICYmCisgICAgIGdpdCBjb25maWcgLS11bnNldCBjb3JlLnBhY2tlZEdpdExpbWl0ICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAtdiAiJHBhY2syIicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzAyLXBhY2staW5kZXguc2ggYi90L3Q1MzAyLXBhY2staW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmU4MjAyNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDItcGFjay1pbmRleC5zaApAQCAtMCwwICsxLDI0NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBOaWNvbGFzIFBpdHJlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhY2sgaW5kZXggd2l0aCA2NC1iaXQgb2Zmc2V0cyBhbmQgb2JqZWN0IENSQycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAnIFwKKyAgICAncm0gLXJmIC5naXQgJiYKKyAgICAgZ2l0IGluaXQgJiYKKyAgICAgZ2l0IGNvbmZpZyBwYWNrLnRocmVhZHMgMSAmJgorICAgICBpPTEgJiYKKyAgICAgd2hpbGUgdGVzdCAkaSAtbGUgMTAwCisgICAgIGRvCisgICAgICAgICBpaWk9YHByaW50ZiAnJTAzaScgJGlgCisgICAgICAgICB0ZXN0LWdlbnJhbmRvbSAiYmFyIiAyMDAgPiB3aWRlX2RlbHRhXyRpaWkgJiYKKyAgICAgICAgIHRlc3QtZ2VucmFuZG9tICJiYXogJGlpaSIgNTAgPj4gd2lkZV9kZWx0YV8kaWlpICYmCisgICAgICAgICB0ZXN0LWdlbnJhbmRvbSAiZm9vIiRpIDEwMCA+IGRlZXBfZGVsdGFfJGlpaSAmJgorICAgICAgICAgdGVzdC1nZW5yYW5kb20gImZvbyJgZXhwciAkaSArIDFgIDEwMCA+PiBkZWVwX2RlbHRhXyRpaWkgJiYKKyAgICAgICAgIHRlc3QtZ2VucmFuZG9tICJmb28iYGV4cHIgJGkgKyAyYCAxMDAgPj4gZGVlcF9kZWx0YV8kaWlpICYmCisgICAgICAgICBlY2hvICRpaWkgPmZpbGVfJGlpaSAmJgorICAgICAgICAgdGVzdC1nZW5yYW5kb20gIiRpaWkiIDgxOTIgPj5maWxlXyRpaWkgJiYKKyAgICAgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZV8kaWlpIGRlZXBfZGVsdGFfJGlpaSB3aWRlX2RlbHRhXyRpaWkgJiYKKyAgICAgICAgIGk9YGV4cHIgJGkgKyAxYCB8fCByZXR1cm4gMQorICAgICBkb25lICYmCisgICAgIHsgZWNobyAxMDEgJiYgdGVzdC1nZW5yYW5kb20gMTAwIDgxOTI7IH0gPmZpbGVfMTAxICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZV8xMDEgJiYKKyAgICAgdHJlZT1gZ2l0IHdyaXRlLXRyZWVgICYmCisgICAgIGNvbW1pdD1gZ2l0IGNvbW1pdC10cmVlICR0cmVlIDwvZGV2L251bGxgICYmIHsKKwkgZWNobyAkdHJlZSAmJgorCSBnaXQgbHMtdHJlZSAkdHJlZSB8IHNlZCAtZSAicy8uKiBcXChbMC05YS1mXSpcXCkJLiovXFwxLyIKKyAgICAgfSA+b2JqLWxpc3QgJiYKKyAgICAgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjay1vYmplY3RzIHdpdGggaW5kZXggdmVyc2lvbiAxJyBcCisgICAgJ3BhY2sxPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MSB0ZXN0LTEgPG9iai1saXN0KSAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgLXYgInRlc3QtMS0ke3BhY2sxfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3BhY2stb2JqZWN0cyB3aXRoIGluZGV4IHZlcnNpb24gMicgXAorICAgICdwYWNrMj0kKGdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTIgdGVzdC0yIDxvYmotbGlzdCkgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrIC12ICJ0ZXN0LTItJHtwYWNrMn0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdib3RoIHBhY2tzIHNob3VsZCBiZSBpZGVudGljYWwnIFwKKyAgICAnY21wICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayIgInRlc3QtMi0ke3BhY2syfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4IHYxIGFuZCBpbmRleCB2MiBzaG91bGQgYmUgZGlmZmVyZW50JyBcCisgICAgJyEgY21wICJ0ZXN0LTEtJHtwYWNrMX0uaWR4IiAidGVzdC0yLSR7cGFjazJ9LmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleC1wYWNrIHdpdGggaW5kZXggdmVyc2lvbiAxJyBcCisgICAgJ2dpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0xIC1vIDEuaWR4ICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleC1wYWNrIHdpdGggaW5kZXggdmVyc2lvbiAyJyBcCisgICAgJ2dpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0yIC1vIDIuaWR4ICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleC1wYWNrIHJlc3VsdHMgc2hvdWxkIG1hdGNoIHBhY2stb2JqZWN0cyBvbmVzJyBcCisgICAgJ2NtcCAidGVzdC0xLSR7cGFjazF9LmlkeCIgIjEuaWR4IiAmJgorICAgICBjbXAgInRlc3QtMi0ke3BhY2syfS5pZHgiICIyLmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgLS12ZXJpZnkgb24gaW5kZXggdmVyc2lvbiAxJyAnCisJZ2l0IGluZGV4LXBhY2sgLS12ZXJpZnkgInRlc3QtMS0ke3BhY2sxfS5wYWNrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIC0tdmVyaWZ5IG9uIGluZGV4IHZlcnNpb24gMicgJworCWdpdCBpbmRleC1wYWNrIC0tdmVyaWZ5ICJ0ZXN0LTItJHtwYWNrMn0ucGFjayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3BhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiwgaXMgbm90IGFjY2VwdGVkJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTIsIHRlc3QtMyA8b2JqLWxpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleCB2MjogZm9yY2Ugc29tZSA2NC1iaXQgb2Zmc2V0cyB3aXRoIHBhY2stb2JqZWN0cycgXAorICAgICdwYWNrMz0kKGdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTIsMHg0MDAwMCB0ZXN0LTMgPG9iai1saXN0KScKKworaWYgbXNnPSQoZ2l0IHZlcmlmeS1wYWNrIC12ICJ0ZXN0LTMtJHtwYWNrM30ucGFjayIgMj4mMSkgfHwKKwkhIChlY2hvICIkbXNnIiB8IGdyZXAgInBhY2sgdG9vIGxhcmdlIC4qIG9mZl90IikKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgT0ZGNjRfVAorZWxzZQorCXNheSAiIyBza2lwcGluZyB0ZXN0cyBjb25jZXJuaW5nIDY0LWJpdCBvZmZzZXRzIgorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UIFwKKyAgICAnaW5kZXggdjI6IHZlcmlmeSBhIHBhY2sgd2l0aCBzb21lIDY0LWJpdCBvZmZzZXRzJyBcCisgICAgJ2dpdCB2ZXJpZnktcGFjayAtdiAidGVzdC0zLSR7cGFjazN9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgXAorICAgICc2NC1iaXQgb2Zmc2V0czogc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHByZXZpb3VzIGluZGV4IHYyIHJlc3VsdHMnIFwKKyAgICAnISBjbXAgInRlc3QtMi0ke3BhY2syfS5pZHgiICJ0ZXN0LTMtJHtwYWNrM30uaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UIFwKKyAgICAnaW5kZXggdjI6IGZvcmNlIHNvbWUgNjQtYml0IG9mZnNldHMgd2l0aCBpbmRleC1wYWNrJyBcCisgICAgJ2dpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0yLDB4NDAwMDAgLW8gMy5pZHggInRlc3QtMS0ke3BhY2sxfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UIFwKKyAgICAnNjQtYml0IG9mZnNldHM6IGluZGV4LXBhY2sgcmVzdWx0IHNob3VsZCBtYXRjaCBwYWNrLW9iamVjdHMgb25lJyBcCisgICAgJ2NtcCAidGVzdC0zLSR7cGFjazN9LmlkeCIgIjMuaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UICdpbmRleC1wYWNrIC0tdmVyaWZ5IG9uIDY0LWJpdCBvZmZzZXQgdjIgKGNoZWF0KScgJworCSMgVGhpcyBjaGVhdHMgYnkga25vd2luZyB3aGljaCBsb3dlciBvZmZzZXQgc2hvdWxkIHN0aWxsIGJlIGVuY29kZWQKKwkjIGluIDY0LWJpdCByZXByZXNlbnRhdGlvbi4KKwlnaXQgaW5kZXgtcGFjayAtLXZlcmlmeSAtLWluZGV4LXZlcnNpb249MiwweDQwMDAwICJ0ZXN0LTMtJHtwYWNrM30ucGFjayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UICdpbmRleC1wYWNrIC0tdmVyaWZ5IG9uIDY0LWJpdCBvZmZzZXQgdjInICcKKwlnaXQgaW5kZXgtcGFjayAtLXZlcmlmeSAidGVzdC0zLSR7cGFjazN9LnBhY2siCisnCisKKyMgcmV0dXJucyB0aGUgb2JqZWN0IG51bWJlciBmb3IgZ2l2ZW4gb2JqZWN0IGluIGdpdmVuIHBhY2sgaW5kZXgKK2luZGV4X29ial9ucigpCit7CisgICAgaWR4X2ZpbGU9JDEKKyAgICBvYmplY3Rfc2hhMT0kMgorICAgIG5yPTAKKyAgICBnaXQgc2hvdy1pbmRleCA8ICRpZHhfZmlsZSB8CisgICAgd2hpbGUgcmVhZCBvZmZzIHNoYTEgZXh0cmEKKyAgICBkbworICAgICAgbnI9JCgoJG5yICsgMSkpCisgICAgICB0ZXN0ICIkc2hhMSIgPSAiJG9iamVjdF9zaGExIiB8fCBjb250aW51ZQorICAgICAgZWNobyAiJCgoJG5yIC0gMSkpIgorICAgICAgYnJlYWsKKyAgICBkb25lCit9CisKKyMgcmV0dXJucyB0aGUgcGFjayBvZmZzZXQgZm9yIGdpdmVuIG9iamVjdCBhcyBmb3VuZCBpbiBnaXZlbiBwYWNrIGluZGV4CitpbmRleF9vYmpfb2Zmc2V0KCkKK3sKKyAgICBpZHhfZmlsZT0kMQorICAgIG9iamVjdF9zaGExPSQyCisgICAgZ2l0IHNob3ctaW5kZXggPCAkaWR4X2ZpbGUgfCBncmVwICRvYmplY3Rfc2hhMSB8CisgICAgKCByZWFkIG9mZnMgZXh0cmEgJiYgZWNobyAiJG9mZnMiICkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2MV0gMSkgc3RyZWFtIHBhY2sgdG8gcmVwb3NpdG9yeScgXAorICAgICdnaXQgaW5kZXgtcGFjayAtLWluZGV4LXZlcnNpb249MSAtLXN0ZGluIDwgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCBjb3VudC1vYmplY3RzIHwgKCByZWFkIG5yIHJlc3QgJiYgdGVzdCAiJG5yIiAtZXEgMSApICYmCisgICAgIGNtcCAidGVzdC0xLSR7cGFjazF9LnBhY2siICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2siICYmCisgICAgIGNtcCAidGVzdC0xLSR7cGFjazF9LmlkeCIgICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjFdIDIpIGNyZWF0ZSBhIHN0ZWFsdGggY29ycnVwdGlvbiBpbiBhIGRlbHRhIGJhc2UgcmVmZXJlbmNlJyBcCisgICAgJyMgVGhpcyB0ZXN0IGFzc3VtZXMgZmlsZV8xMDEgaXMgYSBkZWx0YSBzbWFsbGVyIHRoYW4gMTYgYnl0ZXMuCisgICAgICMgSXQgc2hvdWxkIGJlIGFnYWluc3QgZmlsZV8xMDAgYnV0IHdlIHN1YnN0aXR1dGUgaXRzIGJhc2UgZm9yIGZpbGVfMDk5CisgICAgIHNoYTFfMTAxPWBnaXQgaGFzaC1vYmplY3QgZmlsZV8xMDFgICYmCisgICAgIHNoYTFfMDk5PWBnaXQgaGFzaC1vYmplY3QgZmlsZV8wOTlgICYmCisgICAgIG9mZnNfMTAxPWBpbmRleF9vYmpfb2Zmc2V0IDEuaWR4ICRzaGExXzEwMWAgJiYKKyAgICAgbnJfMDk5PWBpbmRleF9vYmpfbnIgMS5pZHggJHNoYTFfMDk5YCAmJgorICAgICBjaG1vZCArdyAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBkZCBvZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiBzZWVrPSQoKCRvZmZzXzEwMSArIDEpKSBcCisgICAgICAgIGlmPSIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCIgXAorICAgICAgICBza2lwPSQoKDQgKyAyNTYgKiA0ICsgJG5yXzA5OSAqIDI0KSkgXAorICAgICAgICBicz0xIGNvdW50PTIwIGNvbnY9bm90cnVuYyAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkc2hhMV8xMDEgPiBmaWxlXzEwMV9mb28xJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYxXSAzKSBjb3JydXB0ZWQgZGVsdGEgaGFwcGlseSByZXR1cm5lZCB3cm9uZyBkYXRhJyBcCisgICAgJ3Rlc3QgLWYgZmlsZV8xMDFfZm9vMSAmJiAhIGNtcCBmaWxlXzEwMSBmaWxlXzEwMV9mb28xJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYxXSA0KSBjb25maXJtIHRoYXQgdGhlIHBhY2sgaXMgYWN0dWFsbHkgY29ycnVwdGVkJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tZnVsbCAkY29tbWl0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYxXSA1KSBwYWNrLW9iamVjdHMgaGFwcGlseSByZXVzZXMgY29ycnVwdGVkIGRhdGEnIFwKKyAgICAncGFjazQ9JChnaXQgcGFjay1vYmplY3RzIHRlc3QtNCA8b2JqLWxpc3QpICYmCisgICAgIHRlc3QgLWYgInRlc3QtNC0ke3BhY2sxfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2MV0gNikgbmV3bHkgY3JlYXRlZCBwYWNrIGlzIEJBRCAhJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktcGFjayAtdiAidGVzdC00LSR7cGFjazF9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYyXSAxKSBzdHJlYW0gcGFjayB0byByZXBvc2l0b3J5JyBcCisgICAgJ3JtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKyAgICAgZ2l0IGluZGV4LXBhY2sgLS1pbmRleC12ZXJzaW9uPTIgLS1zdGRpbiA8ICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgY291bnQtb2JqZWN0cyB8ICggcmVhZCBuciByZXN0ICYmIHRlc3QgIiRuciIgLWVxIDEgKSAmJgorICAgICBjbXAgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBjbXAgInRlc3QtMi0ke3BhY2sxfS5pZHgiICAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYyXSAyKSBjcmVhdGUgYSBzdGVhbHRoIGNvcnJ1cHRpb24gaW4gYSBkZWx0YSBiYXNlIHJlZmVyZW5jZScgXAorICAgICcjIFRoaXMgdGVzdCBhc3N1bWVzIGZpbGVfMTAxIGlzIGEgZGVsdGEgc21hbGxlciB0aGFuIDE2IGJ5dGVzLgorICAgICAjIEl0IHNob3VsZCBiZSBhZ2FpbnN0IGZpbGVfMTAwIGJ1dCB3ZSBzdWJzdGl0dXRlIGl0cyBiYXNlIGZvciBmaWxlXzA5OQorICAgICBzaGExXzEwMT1gZ2l0IGhhc2gtb2JqZWN0IGZpbGVfMTAxYCAmJgorICAgICBzaGExXzA5OT1gZ2l0IGhhc2gtb2JqZWN0IGZpbGVfMDk5YCAmJgorICAgICBvZmZzXzEwMT1gaW5kZXhfb2JqX29mZnNldCAxLmlkeCAkc2hhMV8xMDFgICYmCisgICAgIG5yXzA5OT1gaW5kZXhfb2JqX25yIDEuaWR4ICRzaGExXzA5OWAgJiYKKyAgICAgY2htb2QgK3cgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgZGQgb2Y9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgc2Vlaz0kKCgkb2Zmc18xMDEgKyAxKSkgXAorICAgICAgICBpZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiIFwKKyAgICAgICAgc2tpcD0kKCg4ICsgMjU2ICogNCArICRucl8wOTkgKiAyMCkpIFwKKyAgICAgICAgYnM9MSBjb3VudD0yMCBjb252PW5vdHJ1bmMgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJHNoYTFfMTAxID4gZmlsZV8xMDFfZm9vMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2Ml0gMykgY29ycnVwdGVkIGRlbHRhIGhhcHBpbHkgcmV0dXJuZWQgd3JvbmcgZGF0YScgXAorICAgICd0ZXN0IC1mIGZpbGVfMTAxX2ZvbzIgJiYgISBjbXAgZmlsZV8xMDEgZmlsZV8xMDFfZm9vMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2Ml0gNCkgY29uZmlybSB0aGF0IHRoZSBwYWNrIGlzIGFjdHVhbGx5IGNvcnJ1cHRlZCcgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLWZ1bGwgJGNvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2Ml0gNSkgcGFjay1vYmplY3RzIHJlZnVzZXMgdG8gcmV1c2UgY29ycnVwdGVkIGRhdGEnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTUgPG9iai1saXN0ICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLW9iamVjdHMgLS1uby1yZXVzZS1vYmplY3QgdGVzdC02IDxvYmotbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2Ml0gNikgdmVyaWZ5LXBhY2sgZGV0ZWN0cyBDUkMgbWlzbWF0Y2gnIFwKKyAgICAncm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorICAgICBnaXQgaW5kZXgtcGFjayAtLWluZGV4LXZlcnNpb249MiAtLXN0ZGluIDwgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgb2JqPWBnaXQgaGFzaC1vYmplY3QgZmlsZV8wMDFgICYmCisgICAgIG5yPWBpbmRleF9vYmpfbnIgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IiAkb2JqYCAmJgorICAgICBjaG1vZCArdyAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiICYmCisgICAgIHByaW50ZiB4eHh4IHwgZGQgb2Y9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IiBjb252PW5vdHJ1bmMgXAorICAgICAgICBicz0xIGNvdW50PTQgc2Vlaz0kKCg4ICsgMjU2ICogNCArIGB3YyAtbCA8b2JqLWxpc3RgICogMjAgKyAkbnIgKiA0KSkgJiYKKyAgICAgKCB3aGlsZSByZWFkIG9iagorICAgICAgIGRvIGdpdCBjYXQtZmlsZSAtcCAkb2JqID4vZGV2L251bGwgfHwgZXhpdCAxCisgICAgICAgZG9uZSA8b2JqLWxpc3QgKSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LXBhY2sgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVubmluZyBpbmRleC1wYWNrIGluIHRoZSBvYmplY3Qgc3RvcmUnICcKKyAgICBybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisgICAgY3AgdGVzdC0xLSR7cGFjazF9LnBhY2sgLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrICYmCisgICAgKAorCWNkIC5naXQvb2JqZWN0cy9wYWNrCisJZ2l0IGluZGV4LXBhY2sgcGFjay0ke3BhY2sxfS5wYWNrCisgICAgKSAmJgorICAgIHRlc3QgLWYgLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzAzLXBhY2stY29ycnVwdGlvbi1yZXNpbGllbmNlLnNoIGIvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YjEyNTBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaApAQCAtMCwwICsxLDI4NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBOaWNvbGFzIFBpdHJlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jlc2lsaWVuY2UgdG8gcGFjayBjb3JydXB0aW9ucyB3aXRoIHJlZHVuZGFudCBvYmplY3RzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgTm90ZTogdGhlIHRlc3Qgb2JqZWN0cyBhcmUgY3JlYXRlZCB3aXRoIGtub3dsZWRnZSBvZiB0aGVpciBwYWNrIGVuY29kaW5nCisjIHRvIGVuc3VyZSBnb29kIGNvZGUgcGF0aCBjb3ZlcmFnZSwgYW5kIHRvIGZhY2lsaXRhdGUgZGlyZWN0IGFsdGVyYXRpb24KKyMgbGF0ZXIgb24uICBUaGUgYXNzdW1lZCBjaGFyYWN0ZXJpc3RpY3MgYXJlOgorIworIyAxKSBibG9iXzIgaXMgYSBkZWx0YSB3aXRoIGJsb2JfMSBmb3IgYmFzZSBhbmQgYmxvYl8zIGlzIGEgZGVsdGEgd2l0aCBibG9iMgorIyAgICBmb3IgYmFzZSwgc3VjaCB0aGF0IGJsb2JfMyBkZWx0YSBkZXB0aCBpcyAyOworIworIyAyKSB0aGUgYnVsayBvZiBvYmplY3QgZGF0YSBpcyB1bmNvbXByZXNzaWJsZSBzbyB0aGUgdGV4dCBwYXJ0IHJlbWFpbnMKKyMgICAgdmlzaWJsZTsKKyMKKyMgMykgb2JqZWN0IGhlYWRlciBpcyBhbHdheXMgMiBieXRlcy4KKworY3JlYXRlX3Rlc3RfZmlsZXMoKSB7CisgICAgdGVzdC1nZW5yYW5kb20gImZvbyIgMjAwMCA+IGZpbGVfMSAmJgorICAgIHRlc3QtZ2VucmFuZG9tICJmb28iIDE4MDAgPiBmaWxlXzIgJiYKKyAgICB0ZXN0LWdlbnJhbmRvbSAiZm9vIiAxODAwID4gZmlsZV8zICYmCisgICAgZWNobyAiIGJhc2UgIiA+PiBmaWxlXzEgJiYKKyAgICBlY2hvICIgZGVsdGExICIgPj4gZmlsZV8yICYmCisgICAgZWNobyAiIGRlbHRhIGRlbHRhMiAiID4+IGZpbGVfMyAmJgorICAgIHRlc3QtZ2VucmFuZG9tICJiYXIiIDE1MCA+PiBmaWxlXzIgJiYKKyAgICB0ZXN0LWdlbnJhbmRvbSAiYmF6IiAxMDAgPj4gZmlsZV8zCit9CisKK2NyZWF0ZV9uZXdfcGFjaygpIHsKKyAgICBybSAtcmYgLmdpdCAmJgorICAgIGdpdCBpbml0ICYmCisgICAgYmxvYl8xPWBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzFgICYmCisgICAgYmxvYl8yPWBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzJgICYmCisgICAgYmxvYl8zPWBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzNgICYmCisgICAgcGFjaz1gcHJpbnRmICIkYmxvYl8xXG4kYmxvYl8yXG4kYmxvYl8zXG4iIHwKKyAgICAgICAgICBnaXQgcGFjay1vYmplY3RzICRAIC5naXQvb2JqZWN0cy9wYWNrL3BhY2tgICYmCisgICAgcGFjaz0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2t9IiAmJgorICAgIGdpdCB2ZXJpZnktcGFjayAtdiAke3BhY2t9LnBhY2sKK30KKworZG9fcmVwYWNrKCkgeworICAgIHBhY2s9YHByaW50ZiAiJGJsb2JfMVxuJGJsb2JfMlxuJGJsb2JfM1xuIiB8CisgICAgICAgICAgZ2l0IHBhY2stb2JqZWN0cyAkQCAuZ2l0L29iamVjdHMvcGFjay9wYWNrYCAmJgorICAgIHBhY2s9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrfSIKK30KKworZG9fY29ycnVwdF9vYmplY3QoKSB7CisgICAgb2ZzPWBnaXQgc2hvdy1pbmRleCA8ICR7cGFja30uaWR4IHwgZ3JlcCAkMSB8IGN1dCAtZjEgLWQiICJgICYmCisgICAgb2ZzPSQoKCRvZnMgKyAkMikpICYmCisgICAgY2htb2QgK3cgJHtwYWNrfS5wYWNrICYmCisgICAgZGQgb2Y9JHtwYWNrfS5wYWNrIGNvdW50PTEgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0kb2ZzICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1wYWNrICR7cGFja30ucGFjaworfQorCitwcmludGYgJ1wwJyA+IHplcm8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luaXRpYWwgc2V0dXAgdmFsaWRhdGlvbicgXAorICAgICdjcmVhdGVfdGVzdF9maWxlcyAmJgorICAgICBjcmVhdGVfbmV3X3BhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBjb3JydXB0aW9uIGluIGhlYWRlciBvZiBmaXJzdCBvYmplY3QnIFwKKyAgICAnZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMSAwIDwgemVybyAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMSAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIGxvb3NlIGNvcHkgb2YgZmlyc3QgZGVsdGEgYWxsb3dzIGZvciBwYXJ0aWFsIHJlY292ZXJ5JyBcCisgICAgJ2dpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBjb3JydXB0aW9uIGluIGRhdGEgb2YgZmlyc3Qgb2JqZWN0JyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGNobW9kICt3ICR7cGFja30ucGFjayAmJgorICAgICAiJFBFUkxfUEFUSCIgLWkuYmFrIC1wZSAicy8gYmFzZSAvYWJjZGVmLyIgJHtwYWNrfS5wYWNrICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8xICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgbG9vc2UgY29weSBvZiBzZWNvbmQgb2JqZWN0IGFsbG93cyBmb3IgcGFydGlhbCByZWNvdmVyeScgXAorICAgICdnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgY29ycnVwdGlvbiBpbiBoZWFkZXIgb2YgZmlyc3QgZGVsdGEnIFwKKyAgICAnY3JlYXRlX25ld19wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAwIDwgemVybyAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIHRoZW4gYSByZXBhY2sgImNsZWFycyIgdGhlIGNvcnJ1cHRpb24nIFwKKyAgICAnZG9fcmVwYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrICR7cGFja30ucGFjayAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBjb3JydXB0aW9uIGluIGRhdGEgb2YgZmlyc3QgZGVsdGEnIFwKKyAgICAnY3JlYXRlX25ld19wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgY2htb2QgK3cgJHtwYWNrfS5wYWNrICYmCisgICAgICIkUEVSTF9QQVRIIiAtaS5iYWsgLXBlICJzLyBkZWx0YTEgL2FiY2RlZmdoLyIgJHtwYWNrfS5wYWNrICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgdGhlbiBhIHJlcGFjayAiY2xlYXJzIiB0aGUgY29ycnVwdGlvbicgXAorICAgICdkb19yZXBhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgJHtwYWNrfS5wYWNrICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29ycnVwdGlvbiBpbiBkZWx0YSBiYXNlIHJlZmVyZW5jZSBvZiBmaXJzdCBkZWx0YSAoT0JKX1JFRl9ERUxUQSknIFwKKyAgICAnY3JlYXRlX25ld19wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAyIDwgemVybyAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIHRoZW4gYSByZXBhY2sgImNsZWFycyIgdGhlIGNvcnJ1cHRpb24nIFwKKyAgICAnZG9fcmVwYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrICR7cGFja30ucGFjayAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvcnJ1cHRpb24gIzAgaW4gZGVsdGEgYmFzZSByZWZlcmVuY2Ugb2YgZmlyc3QgZGVsdGEgKE9CSl9PRlNfREVMVEEpJyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAtLWRlbHRhLWJhc2Utb2Zmc2V0ICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAyIDwgemVybyAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIHRoZW4gYSByZXBhY2sgImNsZWFycyIgdGhlIGNvcnJ1cHRpb24nIFwKKyAgICAnZG9fcmVwYWNrIC0tZGVsdGEtYmFzZS1vZmZzZXQgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgJHtwYWNrfS5wYWNrICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29ycnVwdGlvbiAjMSBpbiBkZWx0YSBiYXNlIHJlZmVyZW5jZSBvZiBmaXJzdCBkZWx0YSAoT0JKX09GU19ERUxUQSknIFwKKyAgICAnY3JlYXRlX25ld19wYWNrIC0tZGVsdGEtYmFzZS1vZmZzZXQgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBwcmludGYgIlwwMDEiIHwgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAyICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgdGhlbiBhIHJlcGFjayAiY2xlYXJzIiB0aGUgY29ycnVwdGlvbicgXAorICAgICdkb19yZXBhY2sgLS1kZWx0YS1iYXNlLW9mZnNldCAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAke3BhY2t9LnBhY2sgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIGEgcmVkdW5kYW50IHBhY2sgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5IHRvbycgXAorICAgICdkb19jb3JydXB0X29iamVjdCAkYmxvYl8yIDIgPCB6ZXJvICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsICYmCisgICAgIG12ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzEgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIHByaW50ZiAiJGJsb2JfMVxuJGJsb2JfMlxuIiB8IGdpdCBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvcnJ1cHRpbmcgaGVhZGVyIHRvIGhhdmUgdG9vIHNtYWxsIG91dHB1dCBidWZmZXIgZmFpbHMgdW5wYWNrJyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIHByaW50ZiAiXDI2MlwwMDEiIHwgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMSAwICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMDQtcHJ1bmUuc2ggYi90L3Q1MzA0LXBydW5lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ2NDUzMjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzA0LXBydW5lLnNoCkBAIC0wLDAgKzEsMTk4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ncHJ1bmUnCisuIC4vdGVzdC1saWIuc2gKKworZGF5PSQoKDYwKjYwKjI0KSkKK3dlZWs9JCgoJGRheSo3KSkKKworYWRkX2Jsb2IoKSB7CisJYmVmb3JlPSQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCUJMT0I9JChlY2hvIGFsZXBoXzAgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlCTE9CX0ZJTEU9LmdpdC9vYmplY3RzLyQoZWNobyAkQkxPQiB8IHNlZCAicy9eLi4vJlwvLyIpICYmCisJdGVzdCAkKCgxICsgJGJlZm9yZSkpID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJdGVzdCAtZiAkQkxPQl9GSUxFICYmCisJdGVzdC1jaG10aW1lID0rMCAkQkxPQl9GSUxFCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJOiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgZ2MKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBzdGFsZSBwYWNrcycgJworCisJb3JpZ19wYWNrPSQoZWNobyAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2spICYmCisJOiA+IC5naXQvb2JqZWN0cy90bXBfMS5wYWNrICYmCisJOiA+IC5naXQvb2JqZWN0cy90bXBfMi5wYWNrICYmCisJdGVzdC1jaG10aW1lID0tODY1MDEgLmdpdC9vYmplY3RzL3RtcF8xLnBhY2sgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmUgMS5kYXkgJiYKKwl0ZXN0IC1mICRvcmlnX3BhY2sgJiYKKwl0ZXN0IC1mIC5naXQvb2JqZWN0cy90bXBfMi5wYWNrICYmCisJISB0ZXN0IC1mIC5naXQvb2JqZWN0cy90bXBfMS5wYWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLS1leHBpcmUnICcKKworCWFkZF9ibG9iICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPTEuaG91ci5hZ28gJiYKKwl0ZXN0ICQoKDEgKyAkYmVmb3JlKSkgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKKwl0ZXN0LWNobXRpbWUgPS04NjUwMCAkQkxPQl9GSUxFICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlIDEuZGF5ICYmCisJdGVzdCAkYmVmb3JlID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJISB0ZXN0IC1mICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYzogaW1wbGljaXQgcHJ1bmUgLS1leHBpcmUnICcKKworCWFkZF9ibG9iICYmCisJdGVzdC1jaG10aW1lID0tJCgoMiokd2Vlay0zMCkpICRCTE9CX0ZJTEUgJiYKKwlnaXQgZ2MgJiYKKwl0ZXN0ICQoKDEgKyAkYmVmb3JlKSkgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKKwl0ZXN0LWNobXRpbWUgPS0kKCgyKiR3ZWVrKzEpKSAkQkxPQl9GSUxFICYmCisJZ2l0IGdjICYmCisJdGVzdCAkYmVmb3JlID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJISB0ZXN0IC1mICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYzogcmVmdXNlIHRvIHN0YXJ0IHdpdGggaW52YWxpZCBnYy5wcnVuZUV4cGlyZScgJworCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSBpbnZhbGlkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2M6IHN0YXJ0IHdpdGggb2sgZ2MucHJ1bmVFeHBpcmUnICcKKworCWdpdCBjb25maWcgZ2MucHJ1bmVFeHBpcmUgMi5kYXlzLmFnbyAmJgorCWdpdCBnYworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBwcnVuZSBub25zZW5zZSBwYXJhbWV0ZXJzJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHJ1bmUgZ2FyYmFnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwcnVuZSAtLS0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHJ1bmUgLS1uby1zdWNoLW9wdGlvbgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBwcnVuZSB1bnJlYWNoYWJsZSBoZWFkcycgJworCisJZ2l0IGNvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgZmFsc2UgJiYKKwltdiAuZ2l0L2xvZ3MgLmdpdC9sb2dzLm9sZCAmJgorCTogPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHRlbXBvcmFyeSAmJgorCXRtcF9oZWFkPSQoZ2l0IHJldi1saXN0IC0xIEhFQUQpICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJZ2l0IHBydW5lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0ICR0bXBfaGVhZCAtLQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBkbyBub3QgcHJ1bmUgaGVhZHMgbGlzdGVkIGFzIGFuIGFyZ3VtZW50JyAnCisKKwk6ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSB0ZW1wb3JhcnkgJiYKKwl0bXBfaGVhZD0kKGdpdCByZXYtbGlzdCAtMSBIRUFEKSAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWdpdCBwcnVuZSAtLSAkdG1wX2hlYWQgJiYKKwlnaXQgcmVzZXQgJHRtcF9oZWFkIC0tCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLS1uby1wcnVuZScgJworCisJYWRkX2Jsb2IgJiYKKwl0ZXN0LWNobXRpbWUgPS0kKCg1MDAxKiRkYXkpKSAkQkxPQl9GSUxFICYmCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSAyLmRheXMuYWdvICYmCisJZ2l0IGdjIC0tbm8tcHJ1bmUgJiYKKwl0ZXN0IDEgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwl0ZXN0IC1mICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyByZXNwZWN0cyBnYy5wcnVuZUV4cGlyZScgJworCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSA1MDAyLmRheXMuYWdvICYmCisJZ2l0IGdjICYmCisJdGVzdCAtZiAkQkxPQl9GSUxFICYmCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSA1MDAwLmRheXMuYWdvICYmCisJZ2l0IGdjICYmCisJdGVzdCAhIC1mICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyAtLXBydW5lPTxkYXRlPicgJworCisJYWRkX2Jsb2IgJiYKKwl0ZXN0LWNobXRpbWUgPS0kKCg1MDAxKiRkYXkpKSAkQkxPQl9GSUxFICYmCisJZ2l0IGdjIC0tcHJ1bmU9NTAwMi5kYXlzLmFnbyAmJgorCXRlc3QgLWYgJEJMT0JfRklMRSAmJgorCWdpdCBnYyAtLXBydW5lPTUwMDAuZGF5cy5hZ28gJiYKKwl0ZXN0ICEgLWYgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIC0tcHJ1bmU9bmV2ZXInICcKKworCWFkZF9ibG9iICYmCisJZ2l0IGdjIC0tcHJ1bmU9bmV2ZXIgJiYKKwl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKKwlnaXQgZ2MgLS1wcnVuZT1ub3cgJiYKKwl0ZXN0ICEgLWYgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIHJlc3BlY3RzIGdjLnBydW5lRXhwaXJlPW5ldmVyJyAnCisKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIG5ldmVyICYmCisJYWRkX2Jsb2IgJiYKKwlnaXQgZ2MgJiYKKwl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIG5vdyAmJgorCWdpdCBnYyAmJgorCXRlc3QgISAtZiAkQkxPQl9GSUxFCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLS1leHBpcmU9bmV2ZXInICcKKworCWFkZF9ibG9iICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPW5ldmVyICYmCisJdGVzdCAtZiAkQkxPQl9GSUxFICYmCisJZ2l0IHBydW5lICYmCisJdGVzdCAhIC1mICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYzogcHJ1bmUgb2xkIG9iamVjdHMgYWZ0ZXIgbG9jYWwgY2xvbmUnICcKKwlhZGRfYmxvYiAmJgorCXRlc3QtY2htdGltZSA9LSQoKDIqJHdlZWsrMSkpICRCTE9CX0ZJTEUgJiYKKwlnaXQgY2xvbmUgLS1uby1oYXJkbGlua3MgLiBhY2xvbmUgJiYKKwkoCisJCWNkIGFjbG9uZSAmJgorCQl0ZXN0IDEgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwkJdGVzdCAtZiAkQkxPQl9GSUxFICYmCisJCWdpdCBnYyAtLXBydW5lICYmCisJCXRlc3QgMCA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCQkhIHRlc3QgLWYgJEJMT0JfRklMRQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzA1LWluY2x1ZGUtdGFnLnNoIGIvdC90NTMwNS1pbmNsdWRlLXRhZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMDYxODY0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwNS1pbmNsdWRlLXRhZy5zaApAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHBhY2stb2JqZWN0IC0taW5jbHVkZS10YWcnCisuIC4vdGVzdC1saWIuc2gKKworVFJBU0g9YHB3ZGAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBjID5kICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBkICYmCisJdHJlZT1gZ2l0IHdyaXRlLXRyZWVgICYmCisJY29tbWl0PWBnaXQgY29tbWl0LXRyZWUgJHRyZWUgPC9kZXYvbnVsbGAgJiYKKwllY2hvICJvYmplY3QgJGNvbW1pdCIgPnNpZyAmJgorCWVjaG8gInR5cGUgY29tbWl0IiA+PnNpZyAmJgorCWVjaG8gInRhZyBteXRhZyIgPj5zaWcgJiYKKwllY2hvICJ0YWdnZXIgJChnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQpIiA+PnNpZyAmJgorCWVjaG8gPj5zaWcgJiYKKwllY2hvICJvdXIgdGVzdCB0YWciID4+c2lnICYmCisJdGFnPWBnaXQgbWt0YWcgPHNpZ2AgJiYKKwlybSBkIHNpZyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvdGFncy9teXRhZyAkdGFnICYmIHsKKwkJZWNobyAkdHJlZSAmJgorCQllY2hvICRjb21taXQgJiYKKwkJZ2l0IGxzLXRyZWUgJHRyZWUgfCBzZWQgLWUgInMvLiogXFwoWzAtOWEtZl0qXFwpCS4qL1xcMS8iCisJfSA+b2JqLWxpc3QKKycKKworcm0gLXJmIGNsb25lLmdpdAordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB3aXRob3V0IC0taW5jbHVkZS10YWcnICcKKwlwYWNrbmFtZV8xPSQoZ2l0IHBhY2stb2JqZWN0cyBcCisJCS0td2luZG93PTAgXAorCQl0ZXN0LTEgPG9iai1saXN0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhY2sgb2JqZWN0cycgJworCSgKKwkJR0lUX0RJUj1jbG9uZS5naXQgJiYKKwkJZXhwb3J0IEdJVF9ESVIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHVucGFjay1vYmplY3RzIC1uIDx0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrICYmCisJCWdpdCB1bnBhY2stb2JqZWN0cyA8dGVzdC0xLSR7cGFja25hbWVfMX0ucGFjaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdW5wYWNrZWQgcmVzdWx0IChoYXZlIGNvbW1pdCwgbm8gdGFnKScgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGNvbW1pdCA+bGlzdC5leHBlY3QgJiYKKwkoCisJCUdJVF9ESVI9Y2xvbmUuZ2l0ICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtZSAkdGFnICYmCisJCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGNvbW1pdAorCSkgPmxpc3QuYWN0dWFsICYmCisJdGVzdF9jbXAgbGlzdC5leHBlY3QgbGlzdC5hY3R1YWwKKycKKworcm0gLXJmIGNsb25lLmdpdAordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB3aXRoIC0taW5jbHVkZS10YWcnICcKKwlwYWNrbmFtZV8xPSQoZ2l0IHBhY2stb2JqZWN0cyBcCisJCS0td2luZG93PTAgXAorCQktLWluY2x1ZGUtdGFnIFwKKwkJdGVzdC0yIDxvYmotbGlzdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYWNrIG9iamVjdHMnICcKKwkoCisJCUdJVF9ESVI9Y2xvbmUuZ2l0ICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCB1bnBhY2stb2JqZWN0cyAtbiA8dGVzdC0yLSR7cGFja25hbWVfMX0ucGFjayAmJgorCQlnaXQgdW5wYWNrLW9iamVjdHMgPHRlc3QtMi0ke3BhY2tuYW1lXzF9LnBhY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHVucGFja2VkIHJlc3VsdCAoaGF2ZSBjb21taXQsIGhhdmUgdGFnKScgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgbXl0YWcgPmxpc3QuZXhwZWN0ICYmCisJKAorCQlHSVRfRElSPWNsb25lLmdpdCAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzICR0YWcKKwkpID5saXN0LmFjdHVhbCAmJgorCXRlc3RfY21wIGxpc3QuZXhwZWN0IGxpc3QuYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNi1wYWNrLW5vYmFzZS5zaCBiL3QvdDUzMDYtcGFjay1ub2Jhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjQ5MzFjMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDYtcGFjay1ub2Jhc2Uuc2gKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBHb29nbGUgSW5jLgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtcGFjay1vYmplY3Qgd2l0aCBtaXNzaW5nIGJhc2UKKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgQ3JlYXRlIEEtQiBjaGFpbgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NldHVwIGJhc2UnIFwKKyAgICAnZm9yIGEgaW4gYSBiIGMgZCBlIGYgZyBoIGk7IGRvIGVjaG8gJGEgPj50ZXh0OyBkb25lICYmCisgICAgIGVjaG8gc2lkZSA+c2lkZSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRleHQgc2lkZSAmJgorICAgICBBPSQoZWNobyBBIHwgZ2l0IGNvbW1pdC10cmVlICQoZ2l0IHdyaXRlLXRyZWUpKSAmJgorCisgICAgIGVjaG8gbSA+PnRleHQgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCB0ZXh0ICYmCisgICAgIEI9JChlY2hvIEIgfCBnaXQgY29tbWl0LXRyZWUgJChnaXQgd3JpdGUtdHJlZSkgLXAgJEEpICYmCisgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJEIKKyAgICAnCisKKyMgQ3JlYXRlIHJlcG9zaXRvcnkgd2l0aCBDIHdob3NlIHBhcmVudCBpcyBCLgorIyBSZXBvc2l0b3J5IGNvbnRhaW5zIEMsIENee3RyZWV9LCBDOnRleHQsIEIsIEJee3RyZWV9LgorIyBSZXBvc2l0b3J5IGlzIG1pc3NpbmcgQjp0ZXh0IChiZXN0IGRlbHRhIGJhc2UgZm9yIEM6dGV4dCkuCisjIFJlcG9zaXRvcnkgaXMgbWlzc2luZyBBIChwYXJlbnQgb2YgQikuCisjIFJlcG9zaXRvcnkgaXMgbWlzc2luZyBBOnNpZGUuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAgcGF0Y2hfY2xvbmUnIFwKKyAgICAnYmFzZV9vYmplY3RzPSQocHdkKS8uZ2l0L29iamVjdHMgJiYKKyAgICAgKG1rZGlyIHBhdGNoX2Nsb25lICYmCisgICAgICBjZCBwYXRjaF9jbG9uZSAmJgorICAgICAgZ2l0IGluaXQgJiYKKyAgICAgIGVjaG8gIiRiYXNlX29iamVjdHMiID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisgICAgICBlY2hvIHEgPj50ZXh0ICYmCisgICAgICBnaXQgcmVhZC10cmVlICRCICYmCisgICAgICBnaXQgdXBkYXRlLWluZGV4IHRleHQgJiYKKyAgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJChlY2hvIEMgfCBnaXQgY29tbWl0LXRyZWUgJChnaXQgd3JpdGUtdHJlZSkgLXAgJEIpICYmCisgICAgICBybSAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisKKyAgICAgIGdpdCAtLWdpdC1kaXI9Li4vLmdpdCBjYXQtZmlsZSBjb21taXQgJEIgfAorICAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluICYmCisKKyAgICAgIGdpdCAtLWdpdC1kaXI9Li4vLmdpdCBjYXQtZmlsZSB0cmVlICIkQl57dHJlZX0iIHwKKyAgICAgIGdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIC13IC0tc3RkaW4KKyAgICAgKSAmJgorICAgICBDPSQoZ2l0IC0tZ2l0LWRpcj1wYXRjaF9jbG9uZS8uZ2l0IHJldi1wYXJzZSBIRUFEKQorICAgICcKKworIyBDbG9uZSBwYXRjaF9jbG9uZSBpbmRpcmVjdGx5IGJ5IGNsb25pbmcgYmFzZSBhbmQgZmV0Y2hpbmcuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnaW5kaXJlY3RseSBjbG9uZSBwYXRjaF9jbG9uZScgXAorICAgICcobWtkaXIgdXNlcl9jbG9uZSAmJgorICAgICAgY2QgdXNlcl9jbG9uZSAmJgorICAgICAgZ2l0IGluaXQgJiYKKyAgICAgIGdpdCBwdWxsIC4uLy5naXQgJiYKKyAgICAgIHRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJEIgJiYKKworICAgICAgZ2l0IHB1bGwgLi4vcGF0Y2hfY2xvbmUvLmdpdCAmJgorICAgICAgdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkQworICAgICApCisgICAgJworCisjIENsb25pbmcgdGhlIHBhdGNoX2Nsb25lIGRpcmVjdGx5IHNob3VsZCBmYWlsLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2Nsb25lIG9mIHBhdGNoX2Nsb25lIGlzIGluY29tcGxldGUnIFwKKyAgICAnKG1rZGlyIHVzZXJfZGlyZWN0ICYmCisgICAgICBjZCB1c2VyX2RpcmVjdCAmJgorICAgICAgZ2l0IGluaXQgJiYKKyAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAuLi9wYXRjaF9jbG9uZS8uZ2l0CisgICAgICkKKyAgICAnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNy1wYWNrLW1pc3NpbmctY29tbWl0LnNoIGIvdC90NTMwNy1wYWNrLW1pc3NpbmctY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlNTJhMTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzA3LXBhY2stbWlzc2luZy1jb21taXQuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhY2sgc2hvdWxkIG5vdGljZSBtaXNzaW5nIGNvbW1pdCBvYmplY3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gMSAyIDMgNCA1CisJZG8KKwkJZWNobyAiJGkiID4iZmlsZSRpIiAmJgorCQlnaXQgYWRkICJmaWxlJGkiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICIkaSIgJiYKKwkJZ2l0IHRhZyAidGFnJGkiCisJZG9uZSAmJgorCW9iaj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMykgJiYKKwlmYW5vdXQ9JChleHByICIkb2JqIiA6ICJcKC4uXCkiKSAmJgorCXJlbWFpbmRlcj0kKGV4cHIgIiRvYmoiIDogIi4uXCguKlwpIikgJiYKKwlybSAtZiAiLmdpdC9vYmplY3RzLyRmYW5vdXQvJHJlbWFpbmRlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29ycnVwdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG5vdGljZXMgY29ycnVwdGlvbiAoMSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBub3RpY2VzIGNvcnJ1cHRpb24gKDIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stb2JqZWN0cyBub3RpY2VzIGNvcnJ1cHRpb24nICcKKwllY2hvIEhFQUQgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIHBhY2sKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDAwLXNlbmQtcGFjay5zaCBiL3QvdDU0MDAtc2VuZC1wYWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEyOWZjODgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDAwLXNlbmQtcGFjay5zaApAQCAtMCwwICsxLDI1OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdTZWUgd2h5IHJld2luZGluZyBoZWFkIGJyZWFrcyBzZW5kLXBhY2sKKworJworLiAuL3Rlc3QtbGliLnNoCisKK2NudD02NAordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF90aWNrICYmCisJbWtkaXIgbW96YXJ0IG1vemFydC9pcyAmJgorCWVjaG8gIkNvbW1pdCAjMCIgPm1vemFydC9pcy9waW5rICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBtb3phcnQvaXMvcGluayAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwljb21taXQ9JChlY2hvICJDb21taXQgIzAiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCXplcm89JGNvbW1pdCAmJgorCXBhcmVudD0kemVybyAmJgorCWk9MCAmJgorCXdoaWxlIHRlc3QgJGkgLWxlICRjbnQKKwlkbworCSAgICBpPSQoKCRpKzEpKSAmJgorCSAgICB0ZXN0X3RpY2sgJiYKKwkgICAgZWNobyAiQ29tbWl0ICMkaSIgPm1vemFydC9pcy9waW5rICYmCisJICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbW96YXJ0L2lzL3BpbmsgJiYKKwkgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCSAgICBjb21taXQ9JChlY2hvICJDb21taXQgIyRpIiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSAtcCAkcGFyZW50KSAmJgorCSAgICBnaXQgdXBkYXRlLXJlZiByZWZzL3RhZ3MvY29tbWl0JGkgJGNvbW1pdCAmJgorCSAgICBwYXJlbnQ9JGNvbW1pdCB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICIkY29tbWl0IiAmJgorCWdpdCBjbG9uZSAuLy4gdmljdGltICYmCisJKCBjZCB2aWN0aW0gJiYgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4gJiYgZ2l0IGxvZyApICYmCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAiJHplcm8iICYmCisJcGFyZW50PSR6ZXJvICYmCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbGUgJGNudAorCWRvCisJICAgIGk9JCgoJGkrMSkpICYmCisJICAgIHRlc3RfdGljayAmJgorCSAgICBlY2hvICJSZWJhc2UgIyRpIiA+bW96YXJ0L2lzL3BpbmsgJiYKKwkgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBtb3phcnQvaXMvcGluayAmJgorCSAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJICAgIGNvbW1pdD0kKGVjaG8gIlJlYmFzZSAjJGkiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlIC1wICRwYXJlbnQpICYmCisJICAgIGdpdCB1cGRhdGUtcmVmIHJlZnMvdGFncy9yZWJhc2UkaSAkY29tbWl0ICYmCisJICAgIHBhcmVudD0kY29tbWl0IHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRjb21taXQiICYmCisJZWNobyBSZWJhc2UgJiYKKwlnaXQgbG9nJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHRoZSBzb3VyY2UgcmVwb3NpdG9yeScgJworCWdpdCByZXBhY2sgLWEgLWQgJiYKKwlnaXQgcHJ1bmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB0aGUgZGVzdGluYXRpb24gcmVwb3NpdG9yeScgJworICAgICgKKwljZCB2aWN0aW0gJiYKKwlnaXQgcmVwYWNrIC1hIC1kICYmCisJZ2l0IHBydW5lCisgICAgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgcHVzaGluZyByZXdvdW5kIGhlYWQgd2l0aG91dCAtLWZvcmNlJyAnCisJcHVzaGVkX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl2aWN0aW1fb3JpZz0kKGNkIHZpY3RpbSAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC4vdmljdGltIG1hc3RlciAmJgorCXZpY3RpbV9oZWFkPSQoY2QgdmljdGltICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiR2aWN0aW1faGVhZCIgPSAiJHZpY3RpbV9vcmlnIiAmJgorCSMgdGhpcyBzaG91bGQgdXBkYXRlCisJZ2l0IHNlbmQtcGFjayAtLWZvcmNlIC4vdmljdGltIG1hc3RlciAmJgorCXZpY3RpbV9oZWFkPSQoY2QgdmljdGltICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiR2aWN0aW1faGVhZCIgPSAiJHB1c2hlZF9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgICAgJ3B1c2ggY2FuIGJlIHVzZWQgdG8gZGVsZXRlIGEgcmVmJyAnCisJKCBjZCB2aWN0aW0gJiYgZ2l0IGJyYW5jaCBleHRyYSBtYXN0ZXIgKSAmJgorCWdpdCBzZW5kLXBhY2sgLi92aWN0aW0gOmV4dHJhIG1hc3RlciAmJgorCSggY2QgdmljdGltICYmCisJICB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGV4dHJhICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIGRlbGV0aW5nIHB1c2ggd2l0aCBkZW55RGVsZXRlcycgJworCSgKKwkgICAgY2QgdmljdGltICYmCisJICAgICggZ2l0IGJyYW5jaCAtRCBleHRyYSB8fCA6ICkgJiYKKwkgICAgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlEZWxldGVzIHRydWUgJiYKKwkgICAgZ2l0IGJyYW5jaCBleHRyYSBtYXN0ZXIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtcGFjayAuL3ZpY3RpbSA6ZXh0cmEgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm5vdCBvdmVycmlkZSBkZW55RGVsZXRlcyB3aXRoIGdpdCAtYyBzZW5kLXBhY2snICcKKwkoCisJCWNkIHZpY3RpbSAmJgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBleHRyYSAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueURlbGV0ZXMgdHJ1ZSAmJgorCQlnaXQgYnJhbmNoIGV4dHJhIG1hc3RlcgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcmVjZWl2ZS5kZW55RGVsZXRlcz1mYWxzZSBcCisJCQkJCXNlbmQtcGFjayAuL3ZpY3RpbSA6ZXh0cmEgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRlIGRlbnlEZWxldGVzIHdpdGggZ2l0IC1jIHJlY2VpdmUtcGFjaycgJworCSgKKwkJY2QgdmljdGltICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGV4dHJhICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55RGVsZXRlcyB0cnVlICYmCisJCWdpdCBicmFuY2ggZXh0cmEgbWFzdGVyCisJKSAmJgorCWdpdCBzZW5kLXBhY2sgXAorCQktLXJlY2VpdmUtcGFjaz0iZ2l0IC1jIHJlY2VpdmUuZGVueURlbGV0ZXM9ZmFsc2UgcmVjZWl2ZS1wYWNrIiBcCisJCS4vdmljdGltIDpleHRyYSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVueU5vbkZhc3Rmb3J3YXJkcyB0cnVtcHMgLS1mb3JjZScgJworCSgKKwkgICAgY2QgdmljdGltICYmCisJICAgICggZ2l0IGJyYW5jaCAtRCBleHRyYSB8fCA6ICkgJiYKKwkgICAgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlOb25GYXN0Zm9yd2FyZHMgdHJ1ZQorCSkgJiYKKwl2aWN0aW1fb3JpZz0kKGNkIHZpY3RpbSAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC0tZm9yY2UgLi92aWN0aW0gbWFzdGVyXjptYXN0ZXIgJiYKKwl2aWN0aW1faGVhZD0kKGNkIHZpY3RpbSAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkdmljdGltX29yaWciID0gIiR2aWN0aW1faGVhZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWFsbCBleGNsdWRlcyByZW1vdGUtdHJhY2tpbmcgaGllcmFyY2h5JyAnCisJbWtkaXIgcGFyZW50ICYmCisJKAorCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgZ2l0IGluaXQgJiYgOiA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBhZGQKKwkpICYmCisJZ2l0IGNsb25lIHBhcmVudCBjaGlsZCAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYgZ2l0IHB1c2ggLS1hbGwKKwkpICYmCisJKAorCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4pIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjZWl2ZS1wYWNrIHJ1bnMgYXV0by1nYyBpbiByZW1vdGUgcmVwbycgJworCXJtIC1yZiBwYXJlbnQgY2hpbGQgJiYKKwlnaXQgaW5pdCBwYXJlbnQgJiYKKwkoCisJICAgICMgU2V0dXAgYSByZXBvIHdpdGggMiBwYWNrcworCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgZWNobyAiU29tZSB0ZXh0IiA+ZmlsZS50eHQgJiYKKwkgICAgZ2l0IGFkZCAuICYmCisJICAgIGdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorCSAgICBnaXQgcmVwYWNrIC1hZGwgJiYKKwkgICAgZWNobyAiU29tZSBtb3JlIHRleHQiID4+ZmlsZS50eHQgJiYKKwkgICAgZ2l0IGNvbW1pdCAtYSAtbSAiU2Vjb25kIGNvbW1pdCIgJiYKKwkgICAgZ2l0IHJlcGFjaworCSkgJiYKKwljcCAtUiBwYXJlbnQgY2hpbGQgJiYKKwkoCisJICAgICMgU2V0IHRoZSBjaGlsZCB0byBhdXRvLXBhY2sgaWYgbW9yZSB0aGFuIG9uZSBwYWNrIGV4aXN0cworCSAgICBjZCBjaGlsZCAmJgorCSAgICBnaXQgY29uZmlnIGdjLmF1dG9wYWNrbGltaXQgMSAmJgorCSAgICBnaXQgYnJhbmNoIHRlc3RfYXV0b19nYyAmJgorCSAgICAjIEFuZCBjcmVhdGUgYSBmaWxlIHRoYXQgZm9sbG93cyB0aGUgdGVtcG9yYXJ5IG9iamVjdCBuYW1pbmcKKwkgICAgIyBjb252ZW50aW9uIGZvciB0aGUgYXV0by1nYyB0byByZW1vdmUKKwkgICAgOiA+LmdpdC9vYmplY3RzL3RtcF90ZXN0X29iamVjdCAmJgorCSAgICB0ZXN0LWNobXRpbWUgPS0xMjA5NjAxIC5naXQvb2JqZWN0cy90bXBfdGVzdF9vYmplY3QKKwkpICYmCisJKAorCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgZWNobyAiRXZlbiBtb3JlIHRleHQiID4+ZmlsZS50eHQgJiYKKwkgICAgZ2l0IGNvbW1pdCAtYSAtbSAiVGhpcmQgY29tbWl0IiAmJgorCSAgICBnaXQgc2VuZC1wYWNrIC4uL2NoaWxkIEhFQUQ6cmVmcy9oZWFkcy90ZXN0X2F1dG9fZ2MKKwkpICYmCisJdGVzdCAhIC1lIGNoaWxkLy5naXQvb2JqZWN0cy90bXBfdGVzdF9vYmplY3QKKycKKworcmV3b3VuZF9wdXNoX3NldHVwKCkgeworCXJtIC1yZiBwYXJlbnQgY2hpbGQgJiYKKwlta2RpciBwYXJlbnQgJiYKKwkoCisJICAgIGNkIHBhcmVudCAmJgorCSAgICBnaXQgaW5pdCAmJgorCSAgICBlY2hvIG9uZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkgICAgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4gJiYKKwkgICAgZWNobyB0d28gPmZpbGUgJiYgZ2l0IGNvbW1pdCAtYSAtbSB0d28KKwkpICYmCisJZ2l0IGNsb25lIHBhcmVudCBjaGlsZCAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkKK30KKworcmV3b3VuZF9wdXNoX3N1Y2NlZWRlZCgpIHsKKwljbXAgLi4vcGFyZW50Ly5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL21hc3RlcgorfQorCityZXdvdW5kX3B1c2hfZmFpbGVkKCkgeworCWlmIHJld291bmRfcHVzaF9zdWNjZWVkZWQKKwl0aGVuCisJCWZhbHNlCisJZWxzZQorCQl0cnVlCisJZmkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyBleHBsaWNpdCByZWZzcGVjcyByZXNwZWN0cyBmb3JjaW5nJyAnCisJcmV3b3VuZF9wdXNoX3NldHVwICYmCisJcGFyZW50X29yaWc9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJKAorCSAgICBjZCBjaGlsZCAmJgorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudCBcCisJCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyCisJKSAmJgorCXBhcmVudF9oZWFkPSQoY2QgcGFyZW50ICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiRwYXJlbnRfb3JpZyIgPSAiJHBhcmVudF9oZWFkIiAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYKKwkgICAgZ2l0IHNlbmQtcGFjayAuLi9wYXJlbnQgXAorCSAgICAgICAgK3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyCisJKSAmJgorCXBhcmVudF9oZWFkPSQoY2QgcGFyZW50ICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCWNoaWxkX2hlYWQ9JChjZCBjaGlsZCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcGFyZW50X2hlYWQiID0gIiRjaGlsZF9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHdpbGRjYXJkIHJlZnNwZWNzIHJlc3BlY3RzIGZvcmNpbmcnICcKKwlyZXdvdW5kX3B1c2hfc2V0dXAgJiYKKwlwYXJlbnRfb3JpZz0kKGNkIHBhcmVudCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IFwKKwkgICAgICAgICJyZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qIgorCSkgJiYKKwlwYXJlbnRfaGVhZD0kKGNkIHBhcmVudCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcGFyZW50X29yaWciID0gIiRwYXJlbnRfaGVhZCIgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IFwKKwkgICAgICAgICIrcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiIKKwkpICYmCisJcGFyZW50X2hlYWQ9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJY2hpbGRfaGVhZD0kKGNkIGNoaWxkICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiRwYXJlbnRfaGVhZCIgPSAiJGNoaWxkX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbnkgcHVzaGluZyB0byBkZWxldGUgY3VycmVudCBicmFuY2gnICcKKwlyZXdvdW5kX3B1c2hfc2V0dXAgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IDpyZWZzL2hlYWRzL21hc3RlciAyPmVycnMKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwMS11cGRhdGUtaG9va3Muc2ggYi90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xN2JjYjBiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwMS11cGRhdGUtaG9va3Muc2gKQEAgLTAsMCArMSwxMzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgU2hhd24gTy4gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIHVwZGF0ZSBob29rIGluZnJhc3RydWN0dXJlLicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIFRoaXMgaXMgYSB0ZXN0LiA+YSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSAmJgorCXRyZWUwPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0MD0kKGVjaG8gc2V0dXAgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUwKSAmJgorCWVjaG8gV2UgaG9wZSBpdCB3b3Jrcy4gPmEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGEgJiYKKwl0cmVlMT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdDE9JChlY2hvIG1vZGlmeSB8IGdpdCBjb21taXQtdHJlZSAkdHJlZTEgLXAgJGNvbW1pdDApICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJGNvbW1pdDAgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3RvZmFpbCAkY29tbWl0MSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLi8uIHZpY3RpbS5naXQgJiYKKwlHSVRfRElSPXZpY3RpbS5naXQgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy90b2ZhaWwgJGNvbW1pdDEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkY29tbWl0MSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvdG9mYWlsICRjb21taXQwCisnCisKK2NhdCA+dmljdGltLmdpdC9ob29rcy9wcmUtcmVjZWl2ZSA8PCdFT0YnCisjIS9iaW4vc2gKK3ByaW50ZiAlcyAiJEAiID4+JEdJVF9ESVIvcHJlLXJlY2VpdmUuYXJncworY2F0IC0gPiRHSVRfRElSL3ByZS1yZWNlaXZlLnN0ZGluCitlY2hvIFNURE9VVCBwcmUtcmVjZWl2ZQorZWNobyBTVERFUlIgcHJlLXJlY2VpdmUgPiYyCitFT0YKK2NobW9kIHUreCB2aWN0aW0uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlCisKK2NhdCA+dmljdGltLmdpdC9ob29rcy91cGRhdGUgPDwnRU9GJworIyEvYmluL3NoCitlY2hvICIkQCIgPj4kR0lUX0RJUi91cGRhdGUuYXJncworcmVhZCB4OyBwcmludGYgJXMgIiR4IiA+JEdJVF9ESVIvdXBkYXRlLnN0ZGluCitlY2hvIFNURE9VVCB1cGRhdGUgJDEKK2VjaG8gU1RERVJSIHVwZGF0ZSAkMSA+JjIKK3Rlc3QgIiQxIiA9IHJlZnMvaGVhZHMvbWFzdGVyIHx8IGV4aXQKK0VPRgorY2htb2QgdSt4IHZpY3RpbS5naXQvaG9va3MvdXBkYXRlCisKK2NhdCA+dmljdGltLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwnRU9GJworIyEvYmluL3NoCitwcmludGYgJXMgIiRAIiA+PiRHSVRfRElSL3Bvc3QtcmVjZWl2ZS5hcmdzCitjYXQgLSA+JEdJVF9ESVIvcG9zdC1yZWNlaXZlLnN0ZGluCitlY2hvIFNURE9VVCBwb3N0LXJlY2VpdmUKK2VjaG8gU1RERVJSIHBvc3QtcmVjZWl2ZSA+JjIKK0VPRgorY2htb2QgdSt4IHZpY3RpbS5naXQvaG9va3MvcG9zdC1yZWNlaXZlCisKK2NhdCA+dmljdGltLmdpdC9ob29rcy9wb3N0LXVwZGF0ZSA8PCdFT0YnCisjIS9iaW4vc2gKK2VjaG8gIiRAIiA+PiRHSVRfRElSL3Bvc3QtdXBkYXRlLmFyZ3MKK3JlYWQgeDsgcHJpbnRmICVzICIkeCIgPiRHSVRfRElSL3Bvc3QtdXBkYXRlLnN0ZGluCitlY2hvIFNURE9VVCBwb3N0LXVwZGF0ZQorZWNobyBTVERFUlIgcG9zdC11cGRhdGUgPiYyCitFT0YKK2NobW9kIHUreCB2aWN0aW0uZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcHVzaCAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtcGFjayAtLWZvcmNlIC4vdmljdGltLmdpdCBcCisJCW1hc3RlciB0b2ZhaWwgPnNlbmQub3V0IDI+c2VuZC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlZCBhcyBleHBlY3RlZCcgJworCXRlc3QgJChHSVRfRElSPXZpY3RpbS5naXQgZ2l0IHJldi1wYXJzZSBtYXN0ZXIpID0gJGNvbW1pdDEgJiYKKwl0ZXN0ICQoR0lUX0RJUj12aWN0aW0uZ2l0IGdpdCByZXYtcGFyc2UgdG9mYWlsKSA9ICRjb21taXQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvb2tzIHJhbicgJworCXRlc3QgLWYgdmljdGltLmdpdC9wcmUtcmVjZWl2ZS5hcmdzICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3ByZS1yZWNlaXZlLnN0ZGluICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3VwZGF0ZS5hcmdzICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3VwZGF0ZS5zdGRpbiAmJgorCXRlc3QgLWYgdmljdGltLmdpdC9wb3N0LXJlY2VpdmUuYXJncyAmJgorCXRlc3QgLWYgdmljdGltLmdpdC9wb3N0LXJlY2VpdmUuc3RkaW4gJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvcG9zdC11cGRhdGUuYXJncyAmJgorCXRlc3QgLWYgdmljdGltLmdpdC9wb3N0LXVwZGF0ZS5zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmVjZWl2ZSBob29rIGlucHV0JyAnCisJKGVjaG8gJGNvbW1pdDAgJGNvbW1pdDEgcmVmcy9oZWFkcy9tYXN0ZXI7CisJIGVjaG8gJGNvbW1pdDEgJGNvbW1pdDAgcmVmcy9oZWFkcy90b2ZhaWwKKwkpIHwgdGVzdF9jbXAgLSB2aWN0aW0uZ2l0L3ByZS1yZWNlaXZlLnN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBob29rIGFyZ3VtZW50cycgJworCShlY2hvIHJlZnMvaGVhZHMvbWFzdGVyICRjb21taXQwICRjb21taXQxOworCSBlY2hvIHJlZnMvaGVhZHMvdG9mYWlsICRjb21taXQxICRjb21taXQwCisJKSB8IHRlc3RfY21wIC0gdmljdGltLmdpdC91cGRhdGUuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LXJlY2VpdmUgaG9vayBpbnB1dCcgJworCWVjaG8gJGNvbW1pdDAgJGNvbW1pdDEgcmVmcy9oZWFkcy9tYXN0ZXIgfAorCXRlc3RfY21wIC0gdmljdGltLmdpdC9wb3N0LXJlY2VpdmUuc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC11cGRhdGUgaG9vayBhcmd1bWVudHMnICcKKwllY2hvIHJlZnMvaGVhZHMvbWFzdGVyIHwKKwl0ZXN0X2NtcCAtIHZpY3RpbS5naXQvcG9zdC11cGRhdGUuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgaG9vayBzdGRpbiBpcyAvZGV2L251bGwnICcKKwkhIHRlc3QgLXMgdmljdGltLmdpdC91cGRhdGUuc3RkaW4gJiYKKwkhIHRlc3QgLXMgdmljdGltLmdpdC9wb3N0LXVwZGF0ZS5zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgKi1yZWNlaXZlIGhvb2sgYXJncyBhcmUgZW1wdHknICcKKwkhIHRlc3QgLXMgdmljdGltLmdpdC9wcmUtcmVjZWl2ZS5hcmdzICYmCisJISB0ZXN0IC1zIHZpY3RpbS5naXQvcG9zdC1yZWNlaXZlLmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VuZC1wYWNrIHByb2R1Y2VkIG5vIG91dHB1dCcgJworCSEgdGVzdCAtcyBzZW5kLm91dAorJworCitjYXQgPDxFT0YgPmV4cGVjdAorcmVtb3RlOiBTVERPVVQgcHJlLXJlY2VpdmUKK3JlbW90ZTogU1RERVJSIHByZS1yZWNlaXZlCityZW1vdGU6IFNURE9VVCB1cGRhdGUgcmVmcy9oZWFkcy9tYXN0ZXIKK3JlbW90ZTogU1RERVJSIHVwZGF0ZSByZWZzL2hlYWRzL21hc3RlcgorcmVtb3RlOiBTVERPVVQgdXBkYXRlIHJlZnMvaGVhZHMvdG9mYWlsCityZW1vdGU6IFNUREVSUiB1cGRhdGUgcmVmcy9oZWFkcy90b2ZhaWwKK3JlbW90ZTogZXJyb3I6IGhvb2sgZGVjbGluZWQgdG8gdXBkYXRlIHJlZnMvaGVhZHMvdG9mYWlsCityZW1vdGU6IFNURE9VVCBwb3N0LXJlY2VpdmUKK3JlbW90ZTogU1RERVJSIHBvc3QtcmVjZWl2ZQorcmVtb3RlOiBTVERPVVQgcG9zdC11cGRhdGUKK3JlbW90ZTogU1RERVJSIHBvc3QtdXBkYXRlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmQtcGFjayBzdGRlcnIgY29udGFpbnMgaG9vayBtZXNzYWdlcycgJworCWdyZXAgXnJlbW90ZTogc2VuZC5lcnIgfCBzZWQgInMvICpcJC8vIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MDItcG9zdC1tZXJnZS1ob29rLnNoIGIvdC90NTQwMi1wb3N0LW1lcmdlLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmViMmZmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDItcG9zdC1tZXJnZS1ob29rLnNoCkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9zaCBFbmdsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIHBvc3QtbWVyZ2UgaG9vay4nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBEYXRhIGZvciBjb21taXQwLiA+YSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSAmJgorCXRyZWUwPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0MD0kKGVjaG8gc2V0dXAgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUwKSAmJgorCWVjaG8gQ2hhbmdlZCBkYXRhIGZvciBjb21taXQxLiA+YSAmJgorCWdpdCB1cGRhdGUtaW5kZXggYSAmJgorCXRyZWUxPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0MT0kKGVjaG8gbW9kaWZ5IHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlMSAtcCAkY29tbWl0MCkgJiYKKyAgICAgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJGNvbW1pdDAgJiYKKwlnaXQgY2xvbmUgLi8uIGNsb25lMSAmJgorCUdJVF9ESVI9Y2xvbmUxLy5naXQgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBhICYmCisJZ2l0IGNsb25lIC4vLiBjbG9uZTIgJiYKKwlHSVRfRElSPWNsb25lMi8uZ2l0IGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYQorJworCitmb3IgY2xvbmUgaW4gMSAyOyBkbworICAgIGNhdCA+Y2xvbmUke2Nsb25lfS8uZ2l0L2hvb2tzL3Bvc3QtbWVyZ2UgPDwnRU9GJworIyEvYmluL3NoCitlY2hvICRAID4+ICRHSVRfRElSL3Bvc3QtbWVyZ2UuYXJncworRU9GCisgICAgY2htb2QgdSt4IGNsb25lJHtjbG9uZX0vLmdpdC9ob29rcy9wb3N0LW1lcmdlCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtbWVyZ2UgZG9lcyBub3QgcnVuIGZvciB1cC10by1kYXRlICcgJworICAgICAgICBHSVRfRElSPWNsb25lMS8uZ2l0IGdpdCBtZXJnZSAkY29tbWl0MCAmJgorCSEgdGVzdCAtZiBjbG9uZTEvLmdpdC9wb3N0LW1lcmdlLmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1tZXJnZSBydW5zIGFzIGV4cGVjdGVkICcgJworICAgICAgICBHSVRfRElSPWNsb25lMS8uZ2l0IGdpdCBtZXJnZSAkY29tbWl0MSAmJgorCXRlc3QgLWUgY2xvbmUxLy5naXQvcG9zdC1tZXJnZS5hcmdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtbWVyZ2UgZnJvbSBub3JtYWwgbWVyZ2UgcmVjZWl2ZXMgdGhlIHJpZ2h0IGFyZ3VtZW50ICcgJworICAgICAgICBncmVwIDAgY2xvbmUxLy5naXQvcG9zdC1tZXJnZS5hcmdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtbWVyZ2UgZnJvbSBzcXVhc2ggbWVyZ2UgcnVucyBhcyBleHBlY3RlZCAnICcKKyAgICAgICAgR0lUX0RJUj1jbG9uZTIvLmdpdCBnaXQgbWVyZ2UgLS1zcXVhc2ggJGNvbW1pdDEgJiYKKwl0ZXN0IC1lIGNsb25lMi8uZ2l0L3Bvc3QtbWVyZ2UuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LW1lcmdlIGZyb20gc3F1YXNoIG1lcmdlIHJlY2VpdmVzIHRoZSByaWdodCBhcmd1bWVudCAnICcKKyAgICAgICAgZ3JlcCAxIGNsb25lMi8uZ2l0L3Bvc3QtbWVyZ2UuYXJncworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MDMtcG9zdC1jaGVja291dC1ob29rLnNoIGIvdC90NTQwMy1wb3N0LWNoZWNrb3V0LWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTc1M2VmMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDMtcG9zdC1jaGVja291dC1ob29rLnNoCkBAIC0wLDAgKzEsODggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9zaCBFbmdsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIHBvc3QtY2hlY2tvdXQgaG9vay4nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBEYXRhIGZvciBjb21taXQwLiA+YSAmJgorCWVjaG8gRGF0YSBmb3IgY29tbWl0MC4gPmIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGIgJiYKKwl0cmVlMD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdDA9JChlY2hvIHNldHVwIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlMCkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkY29tbWl0MCAmJgorCWdpdCBjbG9uZSAuLy4gY2xvbmUxICYmCisJZ2l0IGNsb25lIC4vLiBjbG9uZTIgJiYKKwlHSVRfRElSPWNsb25lMi8uZ2l0IGdpdCBicmFuY2ggbmV3MiAmJgorCWVjaG8gRGF0YSBmb3IgY29tbWl0MS4gPmNsb25lMi9iICYmCisJR0lUX0RJUj1jbG9uZTIvLmdpdCBnaXQgYWRkIGNsb25lMi9iICYmCisJR0lUX0RJUj1jbG9uZTIvLmdpdCBnaXQgY29tbWl0IC1tIG5ldzIKKycKKworZm9yIGNsb25lIGluIDEgMjsgZG8KKyAgICBjYXQgPmNsb25lJHtjbG9uZX0vLmdpdC9ob29rcy9wb3N0LWNoZWNrb3V0IDw8J0VPRicKKyMhL2Jpbi9zaAorZWNobyAkQCA+ICRHSVRfRElSL3Bvc3QtY2hlY2tvdXQuYXJncworRU9GCisgICAgY2htb2QgdSt4IGNsb25lJHtjbG9uZX0vLmdpdC9ob29rcy9wb3N0LWNoZWNrb3V0Citkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgcnVucyBhcyBleHBlY3RlZCAnICcKKwlHSVRfRElSPWNsb25lMS8uZ2l0IGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0IC1lIGNsb25lMS8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LWNoZWNrb3V0IHJlY2VpdmVzIHRoZSByaWdodCBhcmd1bWVudHMgd2l0aCBIRUFEIHVuY2hhbmdlZCAnICcKKwlvbGQ9JChhd2sgIntwcmludCBcJDF9IiBjbG9uZTEvLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MpICYmCisJbmV3PSQoYXdrICJ7cHJpbnQgXCQyfSIgY2xvbmUxLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCWZsYWc9JChhd2sgIntwcmludCBcJDN9IiBjbG9uZTEvLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MpICYmCisJdGVzdCAkb2xkID0gJG5ldyAtYSAkZmxhZyA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCBydW5zIGFzIGV4cGVjdGVkICcgJworCUdJVF9ESVI9Y2xvbmUxLy5naXQgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3QgLWUgY2xvbmUxLy5naXQvcG9zdC1jaGVja291dC5hcmdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgYXJncyBhcmUgY29ycmVjdCB3aXRoIGdpdCBjaGVja291dCAtYiAnICcKKwlHSVRfRElSPWNsb25lMS8uZ2l0IGdpdCBjaGVja291dCAtYiBuZXcxICYmCisJb2xkPSQoYXdrICJ7cHJpbnQgXCQxfSIgY2xvbmUxLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCW5ldz0kKGF3ayAie3ByaW50IFwkMn0iIGNsb25lMS8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncykgJiYKKwlmbGFnPSQoYXdrICJ7cHJpbnQgXCQzfSIgY2xvbmUxLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCXRlc3QgJG9sZCA9ICRuZXcgLWEgJGZsYWcgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgcmVjZWl2ZXMgdGhlIHJpZ2h0IGFyZ3Mgd2l0aCBIRUFEIGNoYW5nZWQgJyAnCisJR0lUX0RJUj1jbG9uZTIvLmdpdCBnaXQgY2hlY2tvdXQgbmV3MiAmJgorCW9sZD0kKGF3ayAie3ByaW50IFwkMX0iIGNsb25lMi8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncykgJiYKKwluZXc9JChhd2sgIntwcmludCBcJDJ9IiBjbG9uZTIvLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MpICYmCisJZmxhZz0kKGF3ayAie3ByaW50IFwkM30iIGNsb25lMi8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncykgJiYKKwl0ZXN0ICRvbGQgIT0gJG5ldyAtYSAkZmxhZyA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCByZWNlaXZlcyB0aGUgcmlnaHQgYXJncyB3aGVuIG5vdCBzd2l0Y2hpbmcgYnJhbmNoZXMgJyAnCisJR0lUX0RJUj1jbG9uZTIvLmdpdCBnaXQgY2hlY2tvdXQgbWFzdGVyIGIgJiYKKwlvbGQ9JChhd2sgIntwcmludCBcJDF9IiBjbG9uZTIvLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MpICYmCisJbmV3PSQoYXdrICJ7cHJpbnQgXCQyfSIgY2xvbmUyLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCWZsYWc9JChhd2sgIntwcmludCBcJDN9IiBjbG9uZTIvLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MpICYmCisJdGVzdCAkb2xkID0gJG5ldyAtYSAkZmxhZyA9IDAKKycKKworaWYgdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmZpbGVtb2RlKSIgPSB0cnVlOyB0aGVuCitta2RpciAtcCB0ZW1wbGF0ZXMvaG9va3MKK2NhdCA+dGVtcGxhdGVzL2hvb2tzL3Bvc3QtY2hlY2tvdXQgPDwnRU9GJworIyEvYmluL3NoCitlY2hvICRAID4gJEdJVF9ESVIvcG9zdC1jaGVja291dC5hcmdzCitFT0YKK2NobW9kICt4IHRlbXBsYXRlcy9ob29rcy9wb3N0LWNoZWNrb3V0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgaG9vayBpcyB0cmlnZ2VyZWQgYnkgY2xvbmUnICcKKwlnaXQgY2xvbmUgLS10ZW1wbGF0ZT10ZW1wbGF0ZXMgLiBjbG9uZTMgJiYKKwl0ZXN0IC1mIGNsb25lMy8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncworJworZmkKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDA0LXRyYWNraW5nLWJyYW5jaGVzLnNoIGIvdC90NTQwNC10cmFja2luZy1icmFuY2hlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjQwMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwNC10cmFja2luZy1icmFuY2hlcy5zaApAQCAtMCwwICsxLDYyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndHJhY2tpbmcgYnJhbmNoIHVwZGF0ZSBjaGVja3MgZm9yIGdpdCBwdXNoJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIDEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIDEgJiYKKwlnaXQgYnJhbmNoIGIxICYmCisJZ2l0IGJyYW5jaCBiMiAmJgorCWdpdCBicmFuY2ggYjMgJiYKKwlnaXQgY2xvbmUgLiBhYSAmJgorCWdpdCBjaGVja291dCBiMSAmJgorCWVjaG8gYjEgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBiMSAmJgorCWdpdCBjaGVja291dCBiMiAmJgorCWVjaG8gYjIgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBiMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHB1c2hhYmxlIGJyYW5jaGVzJyAnCisJY2QgYWEgJiYKKwliMT0kKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2IxKSAmJgorCWIyPSQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vYjIpICYmCisJZ2l0IGNoZWNrb3V0IC1iIGIxIG9yaWdpbi9iMSAmJgorCWVjaG8gYWEtYjEgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBhYS1iMSAmJgorCWdpdCBjaGVja291dCAtYiBiMiBvcmlnaW4vYjIgJiYKKwllY2hvIGFhLWIyID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gYWEtYjIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBhYS1tYXN0ZXIgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBhYS1tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWl4ZWQtc3VjY2VzcyBwdXNoIHJldHVybnMgZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0cmFja2luZyBicmFuY2hlcyB1cGRhdGVkIGNvcnJlY3RseSBhZnRlciBwdXNoJyAnCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIpIiA9ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdHJhY2tpbmcgYnJhbmNoZXMgbm90IHVwZGF0ZWQgZm9yIGZhaWxlZCByZWZzJyAnCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIG9yaWdpbi9iMSkiID0gIiRiMSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2IyKSIgPSAiJGIyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVkIGJyYW5jaGVzIGhhdmUgdGhlaXIgdHJhY2tpbmcgYnJhbmNoZXMgcmVtb3ZlZCcgJworCWdpdCBwdXNoIG9yaWdpbiA6YjEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2IxKSIgPSAib3JpZ2luL2IxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHJlYWR5IGRlbGV0ZWQgdHJhY2tpbmcgYnJhbmNoZXMgaWdub3JlZCcgJworCWdpdCBicmFuY2ggLWQgLXIgb3JpZ2luL2IzICYmCisJZ2l0IHB1c2ggb3JpZ2luIDpiMyA+b3V0cHV0IDI+JjEgJiYKKwkhIGdyZXAgZXJyb3Igb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwNS1zZW5kLXBhY2stcmV3aW5kLnNoIGIvdC90NTQwNS1zZW5kLXBhY2stcmV3aW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRiZGExOGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDA1LXNlbmQtcGFjay1yZXdpbmQuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZvcmNlZCBwdXNoIHRvIHJlcGxhY2UgY29tbWl0IHdlIGRvIG5vdCBoYXZlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZTEgJiYgZ2l0IGFkZCBmaWxlMSAmJiB0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKwlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybiAmJgorCisJbWtkaXIgYW5vdGhlciAmJiAoCisJCWNkIGFub3RoZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGZldGNoIC0tdXBkYXRlLWhlYWQtb2sgLi4gbWFzdGVyOm1hc3RlcgorCSkgJiYKKworCT5maWxlMiAmJiBnaXQgYWRkIGZpbGUyICYmIHRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gU2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGZvcmNlZCBwdXNoIHNob3VsZCBkaWUgbm90IHNlZ2ZhdWx0JyAnCisKKwkoCisJCWNkIGFub3RoZXIgJiYKKwkJZ2l0IHB1c2ggLi4gbWFzdGVyOm1hc3RlcgorCQl0ZXN0ICQ/ID0gMQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZWQgcHVzaCBzaG91bGQgc3VjY2VlZCcgJworCisJKAorCQljZCBhbm90aGVyICYmCisJCWdpdCBwdXNoIC4uICttYXN0ZXI6bWFzdGVyCisJKQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwNi1yZW1vdGUtcmVqZWN0cy5zaCBiL3QvdDU0MDYtcmVtb3RlLXJlamVjdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTllODBhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDYtcmVtb3RlLXJlamVjdHMuc2gKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlbW90ZSBwdXNoIHJlamVjdHMgYXJlIHJlcG9ydGVkIGJ5IGNsaWVudCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgLmdpdC9ob29rcyAmJgorCShlY2hvICIjIS9iaW4vc2giIDsgZWNobyAiZXhpdCAxIikgPi5naXQvaG9va3MvdXBkYXRlICYmCisJY2htb2QgK3ggLmdpdC9ob29rcy91cGRhdGUgJiYKKwllY2hvIDEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIDEgJiYKKwlnaXQgY2xvbmUgLiBjaGlsZCAmJgorCWNkIGNoaWxkICYmCisJZWNobyAyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggcmVwb3J0cyBlcnJvcicgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIDI+c3RkZXJyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRpdmlkdWFsIHJlZiByZXBvcnRzIGVycm9yJyAnZ3JlcCByZWplY3RlZCBzdGRlcnInCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwNy1wb3N0LXJld3JpdGUtaG9vay5zaCBiL3QvdDU0MDctcG9zdC1yZXdyaXRlLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmFhNjcwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDctcG9zdC1yZXdyaXRlLWhvb2suc2gKQEAgLTAsMCArMSwyMTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhvbWFzIFJhc3QKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgcG9zdC1yZXdyaXRlIGhvb2suJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQSBmb28gQSAmJgorCXRlc3RfY29tbWl0IEIgZm9vIEIgJiYKKwl0ZXN0X2NvbW1pdCBDIGZvbyBDICYmCisJdGVzdF9jb21taXQgRCBmb28gRCAmJgorCWdpdCBjaGVja291dCBBXjAgJiYKKwl0ZXN0X2NvbW1pdCBFIGJhciBFICYmCisJdGVzdF9jb21taXQgRiBmb28gRiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKworbWtkaXIgLmdpdC9ob29rcworCitjYXQgPi5naXQvaG9va3MvcG9zdC1yZXdyaXRlIDw8RU9GCisjIS9iaW4vc2gKK2VjaG8gXCRAID4gIiRUUkFTSF9ESVJFQ1RPUlkiL3Bvc3QtcmV3cml0ZS5hcmdzCitjYXQgPiAiJFRSQVNIX0RJUkVDVE9SWSIvcG9zdC1yZXdyaXRlLmRhdGEKK0VPRgorY2htb2QgdSt4IC5naXQvaG9va3MvcG9zdC1yZXdyaXRlCisKK2NsZWFyX2hvb2tfaW5wdXQgKCkgeworCXJtIC1mIHBvc3QtcmV3cml0ZS5hcmdzIHBvc3QtcmV3cml0ZS5kYXRhCit9CisKK3ZlcmlmeV9ob29rX2lucHV0ICgpIHsKKwl0ZXN0X2NtcCAiJFRSQVNIX0RJUkVDVE9SWSIvcG9zdC1yZXdyaXRlLmFyZ3MgZXhwZWN0ZWQuYXJncyAmJgorCXRlc3RfY21wICIkVFJBU0hfRElSRUNUT1JZIi9wb3N0LXJld3JpdGUuZGF0YSBleHBlY3RlZC5kYXRhCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQgLS1hbWVuZCcgJworCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwllY2hvICJEIG5ldyBtZXNzYWdlIiA+IG5ld21zZyAmJgorCW9sZHNoYT0kKGdpdCByZXYtcGFyc2UgSEVBRF4wKSAmJgorCWdpdCBjb21taXQgLUZuZXdtc2cgLS1hbWVuZCAmJgorCWVjaG8gYW1lbmQgPiBleHBlY3RlZC5hcmdzICYmCisJZWNobyAkb2xkc2hhICQoZ2l0IHJldi1wYXJzZSBIRUFEXjApID4gZXhwZWN0ZWQuZGF0YSAmJgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQgLS1hbWVuZCAtLW5vLXBvc3QtcmV3cml0ZScgJworCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwllY2hvICJEIG5ldyBtZXNzYWdlIGFnYWluIiA+IG5ld21zZyAmJgorCWdpdCBjb21taXQgLS1uby1wb3N0LXJld3JpdGUgLUZuZXdtc2cgLS1hbWVuZCAmJgorCXRlc3QgISAtZiBwb3N0LXJld3JpdGUuYXJncyAmJgorCXRlc3QgISAtZiBwb3N0LXJld3JpdGUuZGF0YQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIEEgQiAmJgorCWVjaG8gQyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDxFT0YgJiYKKyQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCiskKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCitFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC0tc2tpcCcgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBBIEIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tc2tpcCAmJgorCWVjaG8gRCA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDxFT0YgJiYKKyQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKK0VPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLS1za2lwIHRoZSBsYXN0IG9uZScgJworCWdpdCByZXNldCAtLWhhcmQgRiAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBEIEEgJiYKKwlnaXQgcmViYXNlIC0tc2tpcCAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8RU9GICYmCiskKGdpdCByZXYtcGFyc2UgRSkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCitFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1tJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLW0gLS1vbnRvIEEgQiAmJgorCWVjaG8gQyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDxFT0YgJiYKKyQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCiskKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCitFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1tIC0tc2tpcCcgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBBIEIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tc2tpcCAmJgorCWVjaG8gRCA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDxFT0YgJiYKKyQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKK0VPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCitzZXRfZmFrZV9lZGl0b3IKKworIyBIZWxwZXIgdG8gd29yayBhcm91bmQgdGhlIGxhY2sgb2Ygb25lLXNob3QgZXhwb3J0aW5nIGZvcgorIyB0ZXN0X211c3RfZmFpbCAoYXMgaXQgaXMgYSBzaGVsbCBmdW5jdGlvbikKK3Rlc3RfZmFpbF9pbnRlcmFjdGl2ZV9yZWJhc2UgKCkgeworCSgKKwkJRkFLRV9MSU5FUz0iJDEiICYmCisJCXNoaWZ0ICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgIiRAIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtaSAodW5jaGFuZ2VkKScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X2ZhaWxfaW50ZXJhY3RpdmVfcmViYXNlICIxIDIiIC0tb250byBBIEIgJiYKKwllY2hvIEMgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8RU9GICYmCiskKGdpdCByZXYtcGFyc2UgQykgJChnaXQgcmV2LXBhcnNlIEhFQUReKQorJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtaSAoc2tpcCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9mYWlsX2ludGVyYWN0aXZlX3JlYmFzZSAiMiIgLS1vbnRvIEEgQiAmJgorCWVjaG8gRCA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDxFT0YgJiYKKyQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKK0VPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLWkgKHNxdWFzaCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9mYWlsX2ludGVyYWN0aXZlX3JlYmFzZSAiMSBzcXVhc2ggMiIgLS1vbnRvIEEgQiAmJgorCWVjaG8gQyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDxFT0YgJiYKKyQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKyQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKK0VPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLWkgKGZpeHVwIHdpdGhvdXQgY29uZmxpY3QpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCUZBS0VfTElORVM9IjEgZml4dXAgMiIgZ2l0IHJlYmFzZSAtaSBCICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDxFT0YgJiYKKyQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKyQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKK0VPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLWkgKGRvdWJsZSBlZGl0KScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIiBnaXQgcmViYXNlIC1pIEIgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHNvbWV0aGluZyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDxFT0YgJiYKKyQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCiskKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCitFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDAtZmV0Y2gtcGFjay5zaCBiL3QvdDU1MDAtZmV0Y2gtcGFjay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MzIyZThhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCkBAIC0wLDAgKzEsNDQ1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdGluZyBtdWx0aV9hY2sgcGFjayBmZXRjaGluZycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGVzdCBmZXRjaC1wYWNrL3VwbG9hZC1wYWNrIHBhaXIuCisKKyMgU29tZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMKKworYWRkICgpIHsKKwluYW1lPSQxICYmCisJdGV4dD0iJEAiICYmCisJYnJhbmNoPWBlY2hvICRuYW1lIHwgc2VkIC1lICdzL15cKC5cKS4qJC9cMS8nYCAmJgorCXBhcmVudHM9IiIgJiYKKworCXNoaWZ0ICYmCisJd2hpbGUgdGVzdCAkMTsgZG8KKwkJcGFyZW50cz0iJHBhcmVudHMgLXAgJDEiICYmCisJCXNoaWZ0CisJZG9uZSAmJgorCisJZWNobyAiJHRleHQiID4gdGVzdC50eHQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRlc3QudHh0ICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCSMgbWFrZSBzdXJlIHRpbWVzdGFtcHMgYXJlIGluIGNvcnJlY3Qgb3JkZXIKKwl0ZXN0X3RpY2sgJiYKKwljb21taXQ9JChlY2hvICIkdGV4dCIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgJHBhcmVudHMpICYmCisJZXZhbCAiJG5hbWU9JGNvbW1pdDsgZXhwb3J0ICRuYW1lIiAmJgorCWVjaG8gJGNvbW1pdCA+IC5naXQvcmVmcy9oZWFkcy8kYnJhbmNoICYmCisJZXZhbCAke2JyYW5jaH1USVA9JGNvbW1pdAorfQorCitwdWxsX3RvX2NsaWVudCAoKSB7CisJbnVtYmVyPSQxICYmCisJaGVhZHM9JDIgJiYKKwljb3VudD0kMyAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRudW1iZXIgcHVsbCIgJworCQkoCisJCQljZCBjbGllbnQgJiYKKwkJCWdpdCBmZXRjaC1wYWNrIC1rIC12IC4uICRoZWFkcyAmJgorCisJCQljYXNlICIkaGVhZHMiIGluCisJCQkgICAgKkEqKQorCQkJCSAgICBlY2hvICRBVElQID4gLmdpdC9yZWZzL2hlYWRzL0E7OworCQkJZXNhYyAmJgorCQkJY2FzZSAiJGhlYWRzIiBpbiAqQiopCisJCQkgICAgZWNobyAkQlRJUCA+IC5naXQvcmVmcy9oZWFkcy9COzsKKwkJCWVzYWMgJiYKKwkJCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL2BlY2hvICRoZWFkcyBcCisJCQkJfCBzZWQgLWUgInMvXlwoLlwpLiokL1wxLyJgICYmCisKKwkJCWdpdCBmc2NrIC0tZnVsbCAmJgorCisJCQltdiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSogLiAmJgorCQkJcD1gbHMgLTEgcGFjay0qLnBhY2tgICYmCisJCQlnaXQgdW5wYWNrLW9iamVjdHMgPCRwICYmCisJCQlnaXQgZnNjayAtLWZ1bGwgJiYKKworCQkJaWR4PWBlY2hvIHBhY2stKi5pZHhgICYmCisJCQlwYWNrX2NvdW50PWBnaXQgc2hvdy1pbmRleCA8JGlkeCB8IHdjIC1sYCAmJgorCQkJdGVzdCAkcGFja19jb3VudCA9ICRjb3VudCAmJgorCQkJcm0gLWYgcGFjay0qCisJCSkKKwknCit9CisKKyMgSGVyZSBiZWdpbnMgdGhlIGFjdHVhbCB0ZXN0aW5nCisKKyMgQTEgLSAuLi4gLSBBMjAgLSBBMjEKKyMgICAgXAorIyAgICAgIEIxICAtICAgQjIgLSAuLiAtIEI3MAorCisjIGNsaWVudCBwdWxscyBBMjAsIEIxLiBUaGVuIHRyYWNrcyBvbmx5IEIuIFRoZW4gcHVsbHMgQS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBjbGllbnQgJiYKKwkoCisJCWNkIGNsaWVudCAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLnVucGFja2xpbWl0IDAKKwkpICYmCisJYWRkIEExICYmCisJcHJldj0xICYmCisJY3VyPTIgJiYKKwl3aGlsZSBbICRjdXIgLWxlIDEwIF07IGRvCisJCWFkZCBBJGN1ciAkKGV2YWwgZWNobyBcJEEkcHJldikgJiYKKwkJcHJldj0kY3VyICYmCisJCWN1cj0kKCgkY3VyKzEpKQorCWRvbmUgJiYKKwlhZGQgQjEgJEExICYmCisJZWNobyAkQVRJUCA+IC5naXQvcmVmcy9oZWFkcy9BICYmCisJZWNobyAkQlRJUCA+IC5naXQvcmVmcy9oZWFkcy9CICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvQgorJworCitwdWxsX3RvX2NsaWVudCAxc3QgInJlZnMvaGVhZHMvQiByZWZzL2hlYWRzL0EiICQoKDExKjMpKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0IDFzdCBwdWxsIHNldHVwJyAnCisJYWRkIEExMSAkQTEwICYmCisJcHJldj0xICYmCisJY3VyPTIgJiYKKwl3aGlsZSBbICRjdXIgLWxlIDY1IF07IGRvCisJCWFkZCBCJGN1ciAkKGV2YWwgZWNobyBcJEIkcHJldikgJiYKKwkJcHJldj0kY3VyICYmCisJCWN1cj0kKCgkY3VyKzEpKQorCWRvbmUKKycKKworcHVsbF90b19jbGllbnQgMm5kICJyZWZzL2hlYWRzL0IiICQoKDY0KjMpKQorCitwdWxsX3RvX2NsaWVudCAzcmQgInJlZnMvaGVhZHMvQSIgJCgoMSozKSkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlIGJyYW5jaCBjbG9uZScgJworCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggImZpbGU6Ly8kKHB3ZCkvLiIgc2luZ2xlYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBicmFuY2ggb2JqZWN0IGNvdW50JyAnCisJR0lUX0RJUj1zaW5nbGVicmFuY2gvLmdpdCBnaXQgY291bnQtb2JqZWN0cyAtdiB8CisJCWdyZXAgIl5pbi1wYWNrOiIgPiBjb3VudC5zaW5nbGVicmFuY2ggJiYKKwllY2hvICJpbi1wYWNrOiAxOTgiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGNvdW50LnNpbmdsZWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgZ2l2ZW4gYnJhbmNoIGNsb25lJyAnCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLWJyYW5jaCBBICJmaWxlOi8vJChwd2QpLy4iIGJyYW5jaC1hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tZ2l0LWRpcj1icmFuY2gtYS8uZ2l0IHJldi1wYXJzZSBvcmlnaW4vQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93JyAnCisJZ2l0IGNsb25lIC0tbm8tc2luZ2xlLWJyYW5jaCAtLWRlcHRoIDIgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmluLXBhY2s6IDE4IiBjb3VudC5zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50IChwYXJ0IDIpJyAnCisJc2VkIC1lICIvXmluLXBhY2s6L2QiIC1lICIvXnBhY2tzOi9kIiAtZSAiL15zaXplLXBhY2s6L2QiIFwKKwkgICAgLWUgIi86IDAkL2QiIGNvdW50LnNoYWxsb3cgPiBjb3VudF9vdXRwdXQgJiYKKwkhIHRlc3QgLXMgY291bnRfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmc2NrIC0tZnVsbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIGZldGNoIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZmV0Y2gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoYW5nZXMgZXhwZWN0ZWQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdy4yICYmCisJY21wIGNvdW50LnNoYWxsb3cgY291bnQuc2hhbGxvdy4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHNhbWUgZGVwdGggaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmZXRjaCAtLWRlcHRoPTIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoYW5nZXMgZXhwZWN0ZWQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdy4zICYmCisJY21wIGNvdW50LnNoYWxsb3cgY291bnQuc2hhbGxvdy4zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB0d28gbW9yZScgJworCWFkZCBCNjYgJEI2NSAmJgorCWFkZCBCNjcgJEI2NgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgcHVsbCAuLiBCCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmNvdW50OiA2IiBjb3VudC5zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB0d28gbW9yZSAocGFydCAyKScgJworCWFkZCBCNjggJEI2NyAmJgorCWFkZCBCNjkgJEI2OAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWVwZW5pbmcgcHVsbCBpbiBzaGFsbG93IHJlcG8nICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IHB1bGwgLS1kZXB0aCA0IC4uIEIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cgJiYKKwlncmVwICJeY291bnQ6IDEyIiBjb3VudC5zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZXBlbmluZyBmZXRjaCBpbiBzaGFsbG93IHJlcG8nICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGZldGNoIC0tZGVwdGggNCAuLiBBOkEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cgJiYKKwlncmVwICJeY291bnQ6IDE4IiBjb3VudC5zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgaW4gc2hhbGxvdyByZXBvIHdpdGggbWlzc2luZyBtZXJnZSBiYXNlJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tZGVwdGggNCAuLiBBCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpdGlvbmFsIHNpbXBsZSBzaGFsbG93IGRlZXBlbmluZ3MnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGZldGNoIC0tZGVwdGg9OCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0xMCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0xMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5jb3VudDogNTIiIGNvdW50LnNoYWxsb3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyB3aXRob3V0IC0tbm8tc2luZ2xlLWJyYW5jaCcgJworCWdpdCBjbG9uZSAtLWRlcHRoIDEgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cyICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cyICYmCisJZ3JlcCAiXmluLXBhY2s6IDYiIGNvdW50LnNoYWxsb3cyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgd2l0aCAtLWJyYW5jaCcgJworCWdpdCBjbG9uZSAtLWRlcHRoIDEgLS1icmFuY2ggQSAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93MworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCWVjaG8gImluLXBhY2s6IDYiID4gY291bnQzLmV4cGVjdGVkICYmCisJR0lUX0RJUj1zaGFsbG93My8uZ2l0IGdpdCBjb3VudC1vYmplY3RzIC12IHwKKwkJZ3JlcCAiXmluLXBhY2siID4gY291bnQzLmFjdHVhbCAmJgorCXRlc3RfY21wIGNvdW50My5leHBlY3RlZCBjb3VudDMuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgd2l0aCBkZXRhY2hlZCBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IGNsb25lIC0tZGVwdGggMSAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93NSAmJgorCWdpdCBjaGVja291dCAtICYmCisJR0lUX0RJUj1zaGFsbG93NS8uZ2l0IGdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhbGxvdyBjbG9uZSBwdWxsaW5nIHRhZ3MnICcKKwlnaXQgdGFnIC1hIC1tIEEgVEFHQTEgQSAmJgorCWdpdCB0YWcgLWEgLW0gQiBUQUdCMSBCICYmCisJZ2l0IHRhZyBUQUdBMiBBICYmCisJZ2l0IHRhZyBUQUdCMiBCICYmCisJZ2l0IGNsb25lIC0tZGVwdGggMSAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93NiAmJgorCisJY2F0ID50YWdsaXN0LmV4cGVjdGVkIDw8XEVPRiAmJgorVEFHQjEKK1RBR0IyCitFT0YKKwlHSVRfRElSPXNoYWxsb3c2Ly5naXQgZ2l0IHRhZyAtbCA+dGFnbGlzdC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0YWdsaXN0LmV4cGVjdGVkIHRhZ2xpc3QuYWN0dWFsICYmCisKKwllY2hvICJpbi1wYWNrOiA3IiA+IGNvdW50Ni5leHBlY3RlZCAmJgorCUdJVF9ESVI9c2hhbGxvdzYvLmdpdCBnaXQgY291bnQtb2JqZWN0cyAtdiB8CisJCWdyZXAgIl5pbi1wYWNrIiA+IGNvdW50Ni5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBjb3VudDYuZXhwZWN0ZWQgY291bnQ2LmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGNsb25pbmcgc2luZ2xlIHRhZycgJworCWdpdCBjbG9uZSAtLWRlcHRoIDEgLS1icmFuY2g9VEFHQjEgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzcgJiYKKwljYXQgPnRhZ2xpc3QuZXhwZWN0ZWQgPDxcRU9GICYmCitUQUdCMQorVEFHQjIKK0VPRgorCUdJVF9ESVI9c2hhbGxvdzcvLmdpdCBnaXQgdGFnIC1sID50YWdsaXN0LmFjdHVhbCAmJgorCXRlc3RfY21wIHRhZ2xpc3QuZXhwZWN0ZWQgdGFnbGlzdC5hY3R1YWwgJiYKKworCWVjaG8gImluLXBhY2s6IDciID4gY291bnQ3LmV4cGVjdGVkICYmCisJR0lUX0RJUj1zaGFsbG93Ny8uZ2l0IGdpdCBjb3VudC1vYmplY3RzIC12IHwKKwkJZ3JlcCAiXmluLXBhY2siID4gY291bnQ3LmFjdHVhbCAmJgorCXRlc3RfY21wIGNvdW50Ny5leHBlY3RlZCBjb3VudDcuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3RzIGZvciB0aGUgLS1zdGRpbiBwYXJhbWV0ZXInICcKKwlmb3IgaGVhZCBpbiBDIEQgRSBGCisJZG8KKwkJYWRkICRoZWFkCisJZG9uZSAmJgorCWZvciBoZWFkIGluIEEgQiBDIEQgRSBGCisJZG8KKwkJZ2l0IHRhZyAkaGVhZCAkaGVhZAorCWRvbmUgJiYKKwljYXQgPmlucHV0IDw8LVxFT0YKKwlyZWZzL2hlYWRzL0MKKwlyZWZzL2hlYWRzL0EKKwlyZWZzL2hlYWRzL0QKKwlyZWZzL3RhZ3MvQworCXJlZnMvaGVhZHMvQgorCXJlZnMvdGFncy9BCisJcmVmcy9oZWFkcy9FCisJcmVmcy90YWdzL0IKKwlyZWZzL3RhZ3MvRQorCXJlZnMvdGFncy9ECisJRU9GCisJc29ydCA8aW5wdXQgPmV4cGVjdCAmJgorCSgKKwkJZWNobyByZWZzL2hlYWRzL0UgJiYKKwkJZWNobyByZWZzL3RhZ3MvRSAmJgorCQljYXQgaW5wdXQKKwkpID5pbnB1dC5kdXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcmVmcyBmcm9tIGNtZGxpbmUnICcKKwkoCisJCWNkIGNsaWVudCAmJgorCQlnaXQgZmV0Y2gtcGFjayAtLW5vLXByb2dyZXNzIC4uICQoY2F0IC4uL2lucHV0KQorCSkgPm91dHB1dCAmJgorCWN1dCAtZCAiICIgLWYgMiA8b3V0cHV0IHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCByZWZzIGZyb20gc3RkaW4nICcKKwkoCisJCWNkIGNsaWVudCAmJgorCQlnaXQgZmV0Y2gtcGFjayAtLXN0ZGluIC0tbm8tcHJvZ3Jlc3MgLi4gPC4uL2lucHV0CisJKSA+b3V0cHV0ICYmCisJY3V0IC1kICIgIiAtZiAyIDxvdXRwdXQgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG1peGVkIHJlZnMgZnJvbSBjbWRsaW5lIGFuZCBzdGRpbicgJworCSgKKwkJY2QgY2xpZW50ICYmCisJCXRhaWwgLW4gKzUgLi4vaW5wdXQgfAorCQlnaXQgZmV0Y2gtcGFjayAtLXN0ZGluIC0tbm8tcHJvZ3Jlc3MgLi4gJChoZWFkIC1uIDQgLi4vaW5wdXQpCisJKSA+b3V0cHV0ICYmCisJY3V0IC1kICIgIiAtZiAyIDxvdXRwdXQgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZHVwbGljYXRlIHJlZnMgZnJvbSBzdGRpbicgJworCSgKKwljZCBjbGllbnQgJiYKKwlnaXQgZmV0Y2gtcGFjayAtLXN0ZGluIC0tbm8tcHJvZ3Jlc3MgLi4gPC4uL2lucHV0LmR1cAorCSkgPm91dHB1dCAmJgorCWN1dCAtZCAiICIgLWYgMiA8b3V0cHV0IHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgdGVzdHMgb2YgbWlzc2luZyByZWZlcmVuY2UnICcKKwljYXQgPmV4cGVjdC1lcnJvciA8PC1cRU9GCisJZXJyb3I6IG5vIHN1Y2ggcmVtb3RlIHJlZiByZWZzL2hlYWRzL3h5enp5CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgbG9uZWx5IG1pc3NpbmcgcmVmJyAnCisJKAorCQljZCBjbGllbnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoLXBhY2sgLS1uby1wcm9ncmVzcyAuLiByZWZzL2hlYWRzL3h5enp5CisJKSA+L2Rldi9udWxsIDI+ZXJyb3ItbSAmJgorCXRlc3RfY21wIGV4cGVjdC1lcnJvciBlcnJvci1tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgbWlzc2luZyByZWYgYWZ0ZXIgZXhpc3RpbmcnICcKKwkoCisJCWNkIGNsaWVudCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2gtcGFjayAtLW5vLXByb2dyZXNzIC4uIHJlZnMvaGVhZHMvQSByZWZzL2hlYWRzL3h5enp5CisJKSA+L2Rldi9udWxsIDI+ZXJyb3ItZW0gJiYKKwl0ZXN0X2NtcCBleHBlY3QtZXJyb3IgZXJyb3ItZW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBtaXNzaW5nIHJlZiBiZWZvcmUgZXhpc3RpbmcnICcKKwkoCisJCWNkIGNsaWVudCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2gtcGFjayAtLW5vLXByb2dyZXNzIC4uIHJlZnMvaGVhZHMveHl6enkgcmVmcy9oZWFkcy9BCisJKSA+L2Rldi9udWxsIDI+ZXJyb3ItbWUgJiYKKwl0ZXN0X2NtcCBleHBlY3QtZXJyb3IgZXJyb3ItbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLWFsbCwgLS1kZXB0aCwgYW5kIGV4cGxpY2l0IGhlYWQnICcKKwkoCisJCWNkIGNsaWVudCAmJgorCQlnaXQgZmV0Y2gtcGFjayAtLW5vLXByb2dyZXNzIC0tYWxsIC0tZGVwdGg9MSAuLiByZWZzL2hlYWRzL0EKKwkpID5vdXQtYWRoIDI+ZXJyb3ItYWRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1hbGwsIC0tZGVwdGgsIGFuZCBleHBsaWNpdCB0YWcnICcKKwlnaXQgdGFnIE9MRFRBRyByZWZzL2hlYWRzL0J+NSAmJgorCSgKKwkJY2QgY2xpZW50ICYmCisJCWdpdCBmZXRjaC1wYWNrIC0tbm8tcHJvZ3Jlc3MgLS1hbGwgLS1kZXB0aD0xIC4uIHJlZnMvdGFncy9PTERUQUcKKwkpID5vdXQtYWR0IDI+ZXJyb3ItYWR0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwMS1mZXRjaC1wdXNoLWFsdGVybmF0ZXMuc2ggYi90L3Q1NTAxLWZldGNoLXB1c2gtYWx0ZXJuYXRlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYmM1N2FjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwMS1mZXRjaC1wdXNoLWFsdGVybmF0ZXMuc2gKQEAgLTAsMCArMSw2NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoL3B1c2ggaW52b2x2aW5nIGFsdGVybmF0ZXMnCisuIC4vdGVzdC1saWIuc2gKKworY291bnRfb2JqZWN0cyAoKSB7CisJbG9vc2U9MCBpbnBhY2s9MAorCWV2YWwgIiQoCisJCWdpdCBjb3VudC1vYmplY3RzIC12IHwKKwkJc2VkIC1uIC1lICdzL15jb3VudDogXCguKlwpL2xvb3NlPVwxL3AnIFwKKwkJICAgIC1lICdzL15pbi1wYWNrOiBcKC4qXCkvaW5wYWNrPVwxL3AnCisJKSIgJiYKKwllY2hvICQoKCAkbG9vc2UgKyAkaW5wYWNrICkpCit9CisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJKAorCQlnaXQgaW5pdCBvcmlnaW5hbCAmJgorCQljZCBvcmlnaW5hbCAmJgorCQlpPTAgJiYKKwkJd2hpbGUgdGVzdCAkaSAtbGUgMTAwCisJCWRvCisJCQllY2hvICIkaSIgPmNvdW50ICYmCisJCQlnaXQgYWRkIGNvdW50ICYmCisJCQlnaXQgY29tbWl0IC1tICIkaSIgfHwgZXhpdAorCQkJaT0kKCgkaSArIDEpKQorCQlkb25lCisJKSAmJgorCSgKKwkJZ2l0IGNsb25lIC0tcmVmZXJlbmNlPW9yaWdpbmFsICJmaWxlOi8vJChwd2QpL29yaWdpbmFsIiBvbmUgJiYKKwkJY2Qgb25lICYmCisJCWVjaG8gWiA+Y291bnQgJiYKKwkJZ2l0IGFkZCBjb3VudCAmJgorCQlnaXQgY29tbWl0IC1tIFogJiYKKwkJY291bnRfb2JqZWN0cyA+Li4vb25lLmNvdW50CisJKSAmJgorCUE9JChwd2QpL29yaWdpbmFsLy5naXQvb2JqZWN0cyAmJgorCWdpdCBpbml0IHJlY2VpdmVyICYmCisJZWNobyAiJEEiID5yZWNlaXZlci8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZ2l0IGluaXQgZmV0Y2hlciAmJgorCWVjaG8gIiRBIiA+ZmV0Y2hlci8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgd2l0aCB0aGUgc2FtZSBhbHRlcm5hdGUnICcKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgcHVzaCAuLi9yZWNlaXZlciBtYXN0ZXI6cmVmcy9oZWFkcy9pdAorCSkgJiYKKwkoCisJCWNkIHJlY2VpdmVyICYmCisJCWNvdW50X29iamVjdHMgPi4uL3JlY2VpdmVyLmNvdW50CisJKSAmJgorCXRlc3RfY21wIG9uZS5jb3VudCByZWNlaXZlci5jb3VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBmcm9tIGEgcmVwb3NpdG9yeSB3aXRoIHRoZSBzYW1lIGFsdGVybmF0ZScgJworCSgKKwkJY2QgZmV0Y2hlciAmJgorCQlnaXQgZmV0Y2ggLi4vb25lIG1hc3RlcjpyZWZzL2hlYWRzL2l0ICYmCisJCWNvdW50X29iamVjdHMgPi4uL2ZldGNoZXIuY291bnQKKwkpICYmCisJdGVzdF9jbXAgb25lLmNvdW50IGZldGNoZXIuY291bnQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTAyLXF1aWNrZmV0Y2guc2ggYi90L3Q1NTAyLXF1aWNrZmV0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2E0NmNiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDItcXVpY2tmZXRjaC5zaApAQCAtMCwwICsxLDE0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgcXVpY2tmZXRjaCBmcm9tIGxvY2FsJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIGljaGkgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWNudD0kKCAoCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXRlc3QgJGNudCAtZXEgMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRob3V0IGFsdGVybmF0ZScgJworCisJKAorCQlta2RpciBjbG9uZWQgJiYKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBpbml0LWRiICYmCisJCWdpdCByZW1vdGUgYWRkIC1mIG9yaWdpbiAuLgorCSkgJiYKKwljbnQ9JCggKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgLWUgInMvICpvYmplY3RzLC4qLy8iCisJKSApICYmCisJdGVzdCAkY250IC1lcSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1cnRoZXIgY29tbWl0cyBpbiB0aGUgb3JpZ2luYWwnICcKKworCXRlc3RfdGljayAmJgorCWVjaG8gbmkgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCisJY250PSQoICgKKwkJZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgLWUgInMvICpvYmplY3RzLC4qLy8iCisJKSApICYmCisJdGVzdCAkY250IC1lcSA2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgY29tbWl0IGFuZCB0cmVlIGJ1dCBub3QgYmxvYiBieSBoYW5kJyAnCisKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgfAorCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgfAorCSgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCB1bnBhY2stb2JqZWN0cworCSkgJiYKKworCWNudD0kKCAoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAtZSAicy8gKm9iamVjdHMsLiovLyIKKwkpICkgJiYKKwl0ZXN0ICRjbnQgLWVxIDYgJiYKKworCWJsb2I9JChnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZSB8IHNlZCAtZSAic3wuLnwmL3wiKSAmJgorCXRlc3QgLWYgImNsb25lZC8uZ2l0L29iamVjdHMvJGJsb2IiICYmCisJcm0gLWYgImNsb25lZC8uZ2l0L29iamVjdHMvJGJsb2IiICYmCisKKwljbnQ9JCggKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgLWUgInMvICpvYmplY3RzLC4qLy8iCisJKSApICYmCisJdGVzdCAkY250IC1lcSA1CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVpY2tmZXRjaCBzaG91bGQgbm90IGxlYXZlIGEgY29ycnVwdGVkIHJlcG9zaXRvcnknICcKKworCSgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBmZXRjaAorCSkgJiYKKworCWNudD0kKCAoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAtZSAicy8gKm9iamVjdHMsLiovLyIKKwkpICkgJiYKKwl0ZXN0ICRjbnQgLWVxIDYKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdWlja2ZldGNoIHNob3VsZCBub3QgY29weSBmcm9tIGFsdGVybmF0ZScgJworCisJKAorCQlta2RpciBxdWlja2Nsb25lICYmCisJCWNkIHF1aWNrY2xvbmUgJiYKKwkJZ2l0IGluaXQtZGIgJiYKKwkJKGNkIC4uLy5naXQvb2JqZWN0cyAmJiBwd2QpID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAuLiAmJgorCQlnaXQgZmV0Y2ggLWsgLWsKKwkpICYmCisJb2JqX2NudD0kKCAoCisJCWNkIHF1aWNrY2xvbmUgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgLWUgInMvICpvYmplY3RzLC4qLy8iCisJKSApICYmCisJcGNrX2NudD0kKCAoCisJCWNkIHF1aWNrY2xvbmUgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYgfCBzZWQgLW4gLWUgIi9wYWNrczoveworCQkJCXMvcGFja3M6Ly8KKwkJCQlwCisJCQkJcQorCQkJfSIKKwkpICkgJiYKKwlvcmlnaW5fbWFzdGVyPSQoICgKKwkJY2QgcXVpY2tjbG9uZSAmJgorCQlnaXQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIKKwkpICkgJiYKKwllY2hvICJsb29zZSBvYmplY3RzOiAkb2JqX2NudCwgcGFja2ZpbGVzOiAkcGNrX2NudCIgJiYKKwl0ZXN0ICRvYmpfY250IC1lcSAwICYmCisJdGVzdCAkcGNrX2NudCAtZXEgMCAmJgorCXRlc3QgeiRvcmlnaW5fbWFzdGVyID0geiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVpY2tmZXRjaCBzaG91bGQgaGFuZGxlIH4xMDAwIHJlZnMgKG9uIFdpbmRvd3MpJyAnCisKKwlnaXQgZ2MgJiYKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWJyYW5jaHByZWZpeD0iJGhlYWQgcmVmcy9oZWFkcy9icmFuY2giICYmCisJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8KKwkJZm9yIGogaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8KKwkJCWZvciBrIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvCisJCQkJZWNobyAiJGJyYW5jaHByZWZpeCRpJGokayIgPj4gLmdpdC9wYWNrZWQtcmVmcworCQkJZG9uZQorCQlkb25lCisJZG9uZSAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgZmV0Y2gKKwkpCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTAzLXRhZ2ZvbGxvdy5zaCBiL3QvdDU1MDMtdGFnZm9sbG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwZGUyZDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTAzLXRhZ2ZvbGxvdy5zaApAQCAtMCwwICsxLDE2NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgYXV0b21hdGljIHRhZyBmb2xsb3dpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgTk9UX01JTkdXOyB0aGVuCisJc2F5ICJHSVRfREVCVUdfU0VORF9QQUNLIG5vdCBzdXBwb3J0ZWQgLSBza2lwcGluZyB0ZXN0cyIKK2ZpCisKKyMgRW5kIHN0YXRlIG9mIHRoZSByZXBvc2l0b3J5OgorIworIyAgICAgICAgIFQgLSB0YWcxICAgICAgICAgIFMgLSB0YWcyCisjICAgICAgICAvICAgICAgICAgICAgICAgICAvCisjICAgTCAtIEEgLS0tLS0tIE8gLS0tLS0tIEIKKyMgICAgXCAgIFwgICAgICAgICAgICAgICAgIFwKKyMgICAgIFwgICBDIC0gb3JpZ2luL2NhdCAgICBcCisjICAgICAgb3JpZ2luL21hc3RlciAgICAgICAgIG1hc3RlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE5PVF9NSU5HVyBzZXR1cCAnCisJdGVzdF90aWNrICYmCisJZWNobyBpY2hpID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBMICYmCisJTD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKworCSgKKwkJbWtkaXIgY2xvbmVkICYmCisJCWNkIGNsb25lZCAmJgorCQlnaXQgaW5pdC1kYiAmJgorCQlnaXQgcmVtb3RlIGFkZCAtZiBvcmlnaW4gLi4KKwkpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKwlBPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCitVPVVQTE9BRF9MT0cKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOT1RfTUlOR1cgJ3NldHVwIGV4cGVjdCcgJworY2F0IC0gPDxFT0YgPmV4cGVjdAorI1MKK3dhbnQgJEEKKyNFCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOT1RfTUlOR1cgJ2ZldGNoIEEgKG5ldyBjb21taXQgOiAxIGNvbm5lY3Rpb24pJyAnCisJcm0gLWYgJFUgJiYKKwkoCisJCWNkIGNsb25lZCAmJgorCQlHSVRfREVCVUdfU0VORF9QQUNLPTMgZ2l0IGZldGNoIDM+Li4vJFUgJiYKKwkJdGVzdCAkQSA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBvcmlnaW4vbWFzdGVyKQorCSkgJiYKKwl0ZXN0IC1zICRVICYmCisJY3V0IC1kIiAiIC1mMSwyICRVID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTk9UX01JTkdXICJjcmVhdGUgdGFnIFQgb24gQSwgY3JlYXRlIEMgb24gYnJhbmNoIGNhdCIgJworCWdpdCB0YWcgLWEgLW0gdGFnMSB0YWcxICRBICYmCisJVD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMSkgJiYKKworCWdpdCBjaGVja291dCAtYiBjYXQgJiYKKwllY2hvIEMgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIEMgJiYKKwlDPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOT1RfTUlOR1cgJ3NldHVwIGV4cGVjdCcgJworY2F0IC0gPDxFT0YgPmV4cGVjdAorI1MKK3dhbnQgJEMKK3dhbnQgJFQKKyNFCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOT1RfTUlOR1cgJ2ZldGNoIEMsIFQgKG5ldyBicmFuY2gsIHRhZyA6IDEgY29ubmVjdGlvbiknICcKKwlybSAtZiAkVSAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCUdJVF9ERUJVR19TRU5EX1BBQ0s9MyBnaXQgZmV0Y2ggMz4uLi8kVSAmJgorCQl0ZXN0ICRDID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG9yaWdpbi9jYXQpICYmCisJCXRlc3QgJFQgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMSkgJiYKKwkJdGVzdCAkQSA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWcxXjApCisJKSAmJgorCXRlc3QgLXMgJFUgJiYKKwljdXQgLWQiICIgLWYxLDIgJFUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOT1RfTUlOR1cgImNyZWF0ZSBjb21taXRzIE8sIEIsIHRhZyBTIG9uIEIiICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIE8gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIE8gJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gQiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCUI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwlnaXQgdGFnIC1hIC1tIHRhZzIgdGFnMiAkQiAmJgorCVM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTk9UX01JTkdXICdzZXR1cCBleHBlY3QnICcKK2NhdCAtIDw8RU9GID5leHBlY3QKKyNTCit3YW50ICRCCit3YW50ICRTCisjRQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTk9UX01JTkdXICdmZXRjaCBCLCBTIChjb21taXQgYW5kIHRhZyA6IDEgY29ubmVjdGlvbiknICcKKwlybSAtZiAkVSAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCUdJVF9ERUJVR19TRU5EX1BBQ0s9MyBnaXQgZmV0Y2ggMz4uLi8kVSAmJgorCQl0ZXN0ICRCID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG9yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgJEIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMl4wKSAmJgorCQl0ZXN0ICRTID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzIpCisJKSAmJgorCXRlc3QgLXMgJFUgJiYKKwljdXQgLWQiICIgLWYxLDIgJFUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOT1RfTUlOR1cgJ3NldHVwIGV4cGVjdCcgJworY2F0IC0gPDxFT0YgPmV4cGVjdAorI1MKK3dhbnQgJEIKK3dhbnQgJFMKKyNFCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOT1RfTUlOR1cgJ25ldyBjbG9uZSBmZXRjaCBtYXN0ZXIgYW5kIHRhZ3MnICcKKwlnaXQgYnJhbmNoIC1EIGNhdAorCXJtIC1mICRVCisJKAorCQlta2RpciBjbG9uZTIgJiYKKwkJY2QgY2xvbmUyICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAuLiAmJgorCQlHSVRfREVCVUdfU0VORF9QQUNLPTMgZ2l0IGZldGNoIDM+Li4vJFUgJiYKKwkJdGVzdCAkQiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBvcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICRTID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzIpICYmCisJCXRlc3QgJEIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMl4wKSAmJgorCQl0ZXN0ICRUID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzEpICYmCisJCXRlc3QgJEEgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMV4wKQorCSkgJiYKKwl0ZXN0IC1zICRVICYmCisJY3V0IC1kIiAiIC1mMSwyICRVID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwNC1mZXRjaC1yZWNlaXZlLXN0cmljdC5zaCBiL3QvdDU1MDQtZmV0Y2gtcmVjZWl2ZS1zdHJpY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjllZTEzYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDQtZmV0Y2gtcmVjZWl2ZS1zdHJpY3Quc2gKQEAgLTAsMCArMSwxMTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaC9yZWNlaXZlIHN0cmljdCBtb2RlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gaGVsbG8gPmdyZWV0aW5ncyAmJgorCWdpdCBhZGQgZ3JlZXRpbmdzICYmCisJZ2l0IGNvbW1pdCAtbSBncmVldGluZ3MgJiYKKworCVM9JChnaXQgcmV2LXBhcnNlIDpncmVldGluZ3MgfCBzZWQgLWUgInN8Xi4ufCYvfCIpICYmCisJWD0kKGVjaG8gYnllIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gfCBzZWQgLWUgInN8Xi4ufCYvfCIpICYmCisJbXYgLWYgLmdpdC9vYmplY3RzLyRYIC5naXQvb2JqZWN0cy8kUyAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aG91dCBzdHJpY3QnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5mc2Nrb2JqZWN0cyBmYWxzZSAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIGZhbHNlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAuLi8uZ2l0IG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCAhZmV0Y2guZnNja29iamVjdHMnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5mc2Nrb2JqZWN0cyBmYWxzZSAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIHRydWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uLy5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGZldGNoLmZzY2tvYmplY3RzJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBpbml0IGRzdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBjb25maWcgZmV0Y2guZnNja29iamVjdHMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIGZhbHNlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAuLi8uZ2l0IG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCB0cmFuc2Zlci5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIHRydWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uLy5naXQgbWFzdGVyCisJKQorJworCitjYXQgPmV4cCA8PEVPRgorVG8gZHN0CishCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdGVzdAlbcmVtb3RlIHJlamVjdGVkXSAobWlzc2luZyBuZWNlc3Nhcnkgb2JqZWN0cykKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGhvdXQgc3RyaWN0JyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBpbml0IGRzdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBjb25maWcgZmV0Y2guZnNja29iamVjdHMgZmFsc2UgJiYKKwkJZ2l0IGNvbmZpZyB0cmFuc2Zlci5mc2Nrb2JqZWN0cyBmYWxzZQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgbWFzdGVyOnJlZnMvaGVhZHMvdGVzdCA+YWN0ICYmCisJdGVzdF9jbXAgZXhwIGFjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggIXJlY2VpdmUuZnNja29iamVjdHMnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmZzY2tvYmplY3RzIGZhbHNlICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgdHJ1ZQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgbWFzdGVyOnJlZnMvaGVhZHMvdGVzdCA+YWN0ICYmCisJdGVzdF9jbXAgZXhwIGFjdAorJworCitjYXQgPmV4cCA8PEVPRgorVG8gZHN0CishCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdGVzdAlbcmVtb3RlIHJlamVjdGVkXSAodW5wYWNrZXIgZXJyb3IpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHJlY2VpdmUuZnNja29iamVjdHMnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmZzY2tvYmplY3RzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyB0cmFuc2Zlci5mc2Nrb2JqZWN0cyBmYWxzZQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgbWFzdGVyOnJlZnMvaGVhZHMvdGVzdCA+YWN0ICYmCisJdGVzdF9jbXAgZXhwIGFjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggdHJhbnNmZXIuZnNja29iamVjdHMnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyB0cmFuc2Zlci5mc2Nrb2JqZWN0cyB0cnVlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBtYXN0ZXI6cmVmcy9oZWFkcy90ZXN0ID5hY3QgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwNS1yZW1vdGUuc2ggYi90L3Q1NTA1LXJlbW90ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jY2M1NWViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwNS1yZW1vdGUuc2gKQEAgLTAsMCArMSwxMDA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlbW90ZSBwb3JjZWxhaW4taXNoJworCisuIC4vdGVzdC1saWIuc2gKKworc2V0dXBfcmVwb3NpdG9yeSAoKSB7CisJbWtkaXIgIiQxIiAmJiAoCisJY2QgIiQxIiAmJgorCWdpdCBpbml0ICYmCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJPmVsaWYgJiYKKwlnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTZWNvbmQiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkKK30KKwordG9rZW5zX21hdGNoICgpIHsKKwllY2hvICIkMSIgfCB0ciAnICcgJ1wwMTInIHwgc29ydCB8IHNlZCAtZSAnL14kL2QnID5leHBlY3QgJiYKKwllY2hvICIkMiIgfCB0ciAnICcgJ1wwMTInIHwgc29ydCB8IHNlZCAtZSAnL14kL2QnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK2NoZWNrX3JlbW90ZV90cmFjayAoKSB7CisJYWN0dWFsPSQoZ2l0IHJlbW90ZSBzaG93ICIkMSIgfCBzZWQgLW5lICdzfF4gICAgXCguKlwpIHRyYWNrZWQkfFwxfHAnKQorCXNoaWZ0ICYmCisJdG9rZW5zX21hdGNoICIkKiIgIiRhY3R1YWwiCit9CisKK2NoZWNrX3RyYWNraW5nX2JyYW5jaCAoKSB7CisJZj0iIiAmJgorCXI9JChnaXQgZm9yLWVhY2gtcmVmICItLWZvcm1hdD0lKHJlZm5hbWUpIiB8CisJCXNlZCAtbmUgInN8XnJlZnMvcmVtb3Rlcy8kMS98fHAiKSAmJgorCXNoaWZ0ICYmCisJdG9rZW5zX21hdGNoICIkKiIgIiRyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCXNldHVwX3JlcG9zaXRvcnkgb25lICYmCisJc2V0dXBfcmVwb3NpdG9yeSB0d28gJiYKKwkoCisJCWNkIHR3byAmJiBnaXQgYnJhbmNoIGFub3RoZXIKKwkpICYmCisJZ2l0IGNsb25lIG9uZSB0ZXN0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3JlbW90ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbicgJworKAorCWNkIHRlc3QgJiYKKwl0b2tlbnNfbWF0Y2ggb3JpZ2luICIkKGdpdCByZW1vdGUpIiAmJgorCWNoZWNrX3JlbW90ZV90cmFjayBvcmlnaW4gbWFzdGVyIHNpZGUgJiYKKwljaGVja190cmFja2luZ19icmFuY2ggb3JpZ2luIEhFQUQgbWFzdGVyIHNpZGUKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFub3RoZXIgcmVtb3RlJyAnCisoCisJY2QgdGVzdCAmJgorCWdpdCByZW1vdGUgYWRkIC1mIHNlY29uZCAuLi90d28gJiYKKwl0b2tlbnNfbWF0Y2ggIm9yaWdpbiBzZWNvbmQiICIkKGdpdCByZW1vdGUpIiAmJgorCWNoZWNrX3RyYWNraW5nX2JyYW5jaCBzZWNvbmQgbWFzdGVyIHNpZGUgYW5vdGhlciAmJgorCWdpdCBmb3ItZWFjaC1yZWYgIi0tZm9ybWF0PSUocmVmbmFtZSkiIHJlZnMvcmVtb3RlcyB8CisJc2VkIC1lICIvXnJlZnNcL3JlbW90ZXNcL29yaWdpblwvL2QiIFwKKwkgICAgLWUgIi9ecmVmc1wvcmVtb3Rlc1wvc2Vjb25kXC8vZCIgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdjaGVjayByZW1vdGUgdHJhY2tpbmcnICcKKygKKwljZCB0ZXN0ICYmCisJY2hlY2tfcmVtb3RlX3RyYWNrIG9yaWdpbiBtYXN0ZXIgc2lkZSAmJgorCWNoZWNrX3JlbW90ZV90cmFjayBzZWNvbmQgbWFzdGVyIHNpZGUgYW5vdGhlcgorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgZm9yY2VzIHRyYWNraW5nIGJyYW5jaGVzJyAnCisoCisJY2QgdGVzdCAmJgorCWNhc2UgYGdpdCBjb25maWcgcmVtb3RlLnNlY29uZC5mZXRjaGAgaW4KKwkrKikgdHJ1ZSA7OworCSAqKSBmYWxzZSA7OworCWVzYWMKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJlbW90ZScgJworKAorCWNkIHRlc3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9zZWNvbmQvSEVBRCByZWZzL3JlbW90ZXMvc2Vjb25kL21hc3RlciAmJgorCWdpdCByZW1vdGUgcm0gc2Vjb25kCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdyZW1vdmUgcmVtb3RlJyAnCisoCisJY2QgdGVzdCAmJgorCXRva2Vuc19tYXRjaCBvcmlnaW4gIiQoZ2l0IHJlbW90ZSkiICYmCisJY2hlY2tfcmVtb3RlX3RyYWNrIG9yaWdpbiBtYXN0ZXIgc2lkZSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgIi0tZm9ybWF0PSUocmVmbmFtZSkiIHJlZnMvcmVtb3RlcyB8CisJc2VkIC1lICIvXnJlZnNcL3JlbW90ZXNcL29yaWdpblwvL2QiID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgcmVtb3RlIHByb3RlY3RzIGxvY2FsIGJyYW5jaGVzJyAnCisoCisJY2QgdGVzdCAmJgorCXsgY2F0ID5leHBlY3QxIDw8RU9GCitOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7Cit0byBkZWxldGUgaXQsIHVzZToKKyAgZ2l0IGJyYW5jaCAtZCBtYXN0ZXIKK0VPRgorCX0gJiYKKwl7IGNhdCA+ZXhwZWN0MiA8PEVPRgorTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkOwordG8gZGVsZXRlIHRoZW0sIHVzZToKKyAgZ2l0IGJyYW5jaCAtZCBmb29icmFuY2gKKyAgZ2l0IGJyYW5jaCAtZCBtYXN0ZXIKK0VPRgorCX0gJiYKKwlnaXQgdGFnIGZvb3RhZyAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9vcHMuZmV0Y2ggIityZWZzLyo6cmVmcy8qIiAmJgorCWdpdCByZW1vdGUgcmVtb3ZlIG9vcHMgMj5hY3R1YWwxICYmCisJZ2l0IGJyYW5jaCBmb29icmFuY2ggJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vb3BzLmZldGNoICIrcmVmcy8qOnJlZnMvKiIgJiYKKwlnaXQgcmVtb3RlIHJtIG9vcHMgMj5hY3R1YWwyICYmCisJZ2l0IGJyYW5jaCAtZCBmb29icmFuY2ggJiYKKwlnaXQgdGFnIC1kIGZvb3RhZyAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QxIGFjdHVhbDEgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0MiBhY3R1YWwyCispCisnCisKK2NhdCA+IHRlc3QvZXhwZWN0IDw8IEVPRgorKiByZW1vdGUgb3JpZ2luCisgIEZldGNoIFVSTDogJChwd2QpL29uZQorICBQdXNoICBVUkw6ICQocHdkKS9vbmUKKyAgSEVBRCBicmFuY2g6IG1hc3RlcgorICBSZW1vdGUgYnJhbmNoZXM6CisgICAgbWFzdGVyIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvb3JpZ2luKQorICAgIHNpZGUgICB0cmFja2VkCisgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6CisgICAgYWhlYWQgICAgbWVyZ2VzIHdpdGggcmVtb3RlIG1hc3RlcgorICAgIG1hc3RlciAgIG1lcmdlcyB3aXRoIHJlbW90ZSBtYXN0ZXIKKyAgICBvY3RvcHVzICBtZXJnZXMgd2l0aCByZW1vdGUgdG9waWMtYQorICAgICAgICAgICAgICAgIGFuZCB3aXRoIHJlbW90ZSB0b3BpYy1iCisgICAgICAgICAgICAgICAgYW5kIHdpdGggcmVtb3RlIHRvcGljLWMKKyAgICByZWJhc2UgIHJlYmFzZXMgb250byByZW1vdGUgbWFzdGVyCisgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJzoKKyAgICBtYXN0ZXIgcHVzaGVzIHRvIG1hc3RlciAgIChsb2NhbCBvdXQgb2YgZGF0ZSkKKyAgICBtYXN0ZXIgcHVzaGVzIHRvIHVwc3RyZWFtIChjcmVhdGUpCisqIHJlbW90ZSB0d28KKyAgRmV0Y2ggVVJMOiAuLi90d28KKyAgUHVzaCAgVVJMOiAuLi90aHJlZQorICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOgorICAgIGFub3RoZXIKKyAgICBtYXN0ZXIKKyAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnOgorICAgIGFoZWFkICBmb3JjZXMgdG8gbWFzdGVyICAoZmFzdC1mb3J3YXJkYWJsZSkKKyAgICBtYXN0ZXIgcHVzaGVzIHRvIGFub3RoZXIgKHVwIHRvIGRhdGUpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdycgJworCShjZCB0ZXN0ICYmCisJIGdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5mZXRjaCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3Vwc3RyZWFtICYmCisJIGdpdCBmZXRjaCAmJgorCSBnaXQgY2hlY2tvdXQgLWIgYWhlYWQgb3JpZ2luL21hc3RlciAmJgorCSBlY2hvIDEgPj4gZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSB1cGRhdGUgZmlsZSAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBicmFuY2ggLS10cmFjayBvY3RvcHVzIG9yaWdpbi9tYXN0ZXIgJiYKKwkgZ2l0IGJyYW5jaCAtLXRyYWNrIHJlYmFzZSBvcmlnaW4vbWFzdGVyICYmCisJIGdpdCBicmFuY2ggLWQgLXIgb3JpZ2luL21hc3RlciAmJgorCSBnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS50d28udXJsIC4uL3R3byAmJgorCSBnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS50d28ucHVzaHVybCAuLi90aHJlZSAmJgorCSBnaXQgY29uZmlnIGJyYW5jaC5yZWJhc2UucmViYXNlIHRydWUgJiYKKwkgZ2l0IGNvbmZpZyBicmFuY2gub2N0b3B1cy5tZXJnZSAidG9waWMtYSB0b3BpYy1iIHRvcGljLWMiICYmCisJIChjZCAuLi9vbmUgJiYKKwkgIGVjaG8gMSA+IGZpbGUgJiYKKwkgIHRlc3RfdGljayAmJgorCSAgZ2l0IGNvbW1pdCAtbSB1cGRhdGUgZmlsZSkgJiYKKwkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLnB1c2ggOiAmJgorCSBnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4ucHVzaCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3Vwc3RyZWFtICYmCisJIGdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5wdXNoICtyZWZzL3RhZ3MvbGFzdGJhY2t1cCAmJgorCSBnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS50d28ucHVzaCArcmVmcy9oZWFkcy9haGVhZDpyZWZzL2hlYWRzL21hc3RlciAmJgorCSBnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS50d28ucHVzaCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL2Fub3RoZXIgJiYKKwkgZ2l0IHJlbW90ZSBzaG93IG9yaWdpbiB0d28gPiBvdXRwdXQgJiYKKwkgZ2l0IGJyYW5jaCAtZCByZWJhc2Ugb2N0b3B1cyAmJgorCSB0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCkKKycKKworY2F0ID4gdGVzdC9leHBlY3QgPDwgRU9GCisqIHJlbW90ZSBvcmlnaW4KKyAgRmV0Y2ggVVJMOiAkKHB3ZCkvb25lCisgIFB1c2ggIFVSTDogJChwd2QpL29uZQorICBIRUFEIGJyYW5jaDogKG5vdCBxdWVyaWVkKQorICBSZW1vdGUgYnJhbmNoZXM6IChzdGF0dXMgbm90IHF1ZXJpZWQpCisgICAgbWFzdGVyCisgICAgc2lkZQorICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOgorICAgIGFoZWFkICBtZXJnZXMgd2l0aCByZW1vdGUgbWFzdGVyCisgICAgbWFzdGVyIG1lcmdlcyB3aXRoIHJlbW90ZSBtYXN0ZXIKKyAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnIChzdGF0dXMgbm90IHF1ZXJpZWQpOgorICAgIChtYXRjaGluZykgICAgICAgICAgIHB1c2hlcyB0byAobWF0Y2hpbmcpCisgICAgcmVmcy9oZWFkcy9tYXN0ZXIgICAgcHVzaGVzIHRvIHJlZnMvaGVhZHMvdXBzdHJlYW0KKyAgICByZWZzL3RhZ3MvbGFzdGJhY2t1cCBmb3JjZXMgdG8gcmVmcy90YWdzL2xhc3RiYWNrdXAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IC1uJyAnCisJKG12IG9uZSBvbmUudW5yZWFjaGFibGUgJiYKKwkgY2QgdGVzdCAmJgorCSBnaXQgcmVtb3RlIHNob3cgLW4gb3JpZ2luID4gb3V0cHV0ICYmCisJIG12IC4uL29uZS51bnJlYWNoYWJsZSAuLi9vbmUgJiYKKwkgdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lJyAnCisJKGNkIG9uZSAmJgorCSBnaXQgYnJhbmNoIC1tIHNpZGUgc2lkZTIpICYmCisJKGNkIHRlc3QgJiYKKwkgZ2l0IGZldGNoIG9yaWdpbiAmJgorCSBnaXQgcmVtb3RlIHBydW5lIG9yaWdpbiAmJgorCSBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC1oZWFkIC0tZGVsZXRlJyAnCisJKGNkIHRlc3QgJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgJiYKKwkgZ2l0IHJlbW90ZSBzZXQtaGVhZCAtLWRlbGV0ZSBvcmlnaW4gJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC1oZWFkIC0tYXV0bycgJworCShjZCB0ZXN0ICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgLS1hdXRvIG9yaWdpbiAmJgorCSBlY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPm91dHB1dCAmJgorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCitjYXQgPnRlc3QvZXhwZWN0IDw8RU9GCitlcnJvcjogTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoKKyAgZ2l0IHJlbW90ZSBzZXQtaGVhZCB0d28gYW5vdGhlcgorICBnaXQgcmVtb3RlIHNldC1oZWFkIHR3byBtYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtaGVhZCAtLWF1dG8gZmFpbHMgdy9tdWx0aXBsZSBIRUFEcycgJworCShjZCB0ZXN0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgc2V0LWhlYWQgLS1hdXRvIHR3byA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCkKKycKKworY2F0ID50ZXN0L2V4cGVjdCA8PEVPRgorcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC1oZWFkIGV4cGxpY2l0JyAnCisJKGNkIHRlc3QgJiYKKwkgZ2l0IHJlbW90ZSBzZXQtaGVhZCBvcmlnaW4gc2lkZTIgJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPm91dHB1dCAmJgorCSBnaXQgcmVtb3RlIHNldC1oZWFkIG9yaWdpbiBtYXN0ZXIgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKKycKKworY2F0ID4gdGVzdC9leHBlY3QgPDwgRU9GCitQcnVuaW5nIG9yaWdpbgorVVJMOiAkKHB3ZCkvb25lCisgKiBbd291bGQgcHJ1bmVdIG9yaWdpbi9zaWRlMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIC0tZHJ5LXJ1bicgJworCShjZCBvbmUgJiYKKwkgZ2l0IGJyYW5jaCAtbSBzaWRlMiBzaWRlKSAmJgorCShjZCB0ZXN0ICYmCisJIGdpdCByZW1vdGUgcHJ1bmUgLS1kcnktcnVuIG9yaWdpbiA+IG91dHB1dCAmJgorCSBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgJiYKKwkoY2QgLi4vb25lICYmCisJIGdpdCBicmFuY2ggLW0gc2lkZSBzaWRlMikgJiYKKwkgdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtLW1pcnJvciAmJiBwcnVuZScgJworCShta2RpciBtaXJyb3IgJiYKKwkgY2QgbWlycm9yICYmCisJIGdpdCBpbml0IC0tYmFyZSAmJgorCSBnaXQgcmVtb3RlIGFkZCAtLW1pcnJvciAtZiBvcmlnaW4gLi4vb25lKSAmJgorCShjZCBvbmUgJiYKKwkgZ2l0IGJyYW5jaCAtbSBzaWRlMiBzaWRlKSAmJgorCShjZCBtaXJyb3IgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUyICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zaWRlICYmCisJIGdpdCBmZXRjaCBvcmlnaW4gJiYKKwkgZ2l0IHJlbW90ZSBwcnVuZSBvcmlnaW4gJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUyICYmCisJIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zaWRlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLS1taXJyb3I9ZmV0Y2gnICcKKwlta2RpciBtaXJyb3ItZmV0Y2ggJiYKKwlnaXQgaW5pdCBtaXJyb3ItZmV0Y2gvcGFyZW50ICYmCisJKGNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKKwkgdGVzdF9jb21taXQgb25lKSAmJgorCWdpdCBpbml0IC0tYmFyZSBtaXJyb3ItZmV0Y2gvY2hpbGQgJiYKKwkoY2QgbWlycm9yLWZldGNoL2NoaWxkICYmCisJIGdpdCByZW1vdGUgYWRkIC0tbWlycm9yPWZldGNoIC1mIHBhcmVudCAuLi9wYXJlbnQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG1pcnJvcnMgYWN0IGFzIG1pcnJvcnMgZHVyaW5nIGZldGNoJyAnCisJKGNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKKwkgZ2l0IGJyYW5jaCBuZXcgJiYKKwkgZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgcmVuYW1lZAorCSkgJiYKKwkoY2QgbWlycm9yLWZldGNoL2NoaWxkICYmCisJIGdpdCBmZXRjaCBwYXJlbnQgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL25ldyAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVuYW1lZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbWlycm9ycyBjYW4gcHJ1bmUnICcKKwkoY2QgbWlycm9yLWZldGNoL2NoaWxkICYmCisJIGdpdCByZW1vdGUgcHJ1bmUgcGFyZW50ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG1pcnJvcnMgZG8gbm90IGFjdCBhcyBtaXJyb3JzIGR1cmluZyBwdXNoJyAnCisJKGNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKKwkgZ2l0IGNoZWNrb3V0IEhFQUReMAorCSkgJiYKKwkoY2QgbWlycm9yLWZldGNoL2NoaWxkICYmCisJIGdpdCBicmFuY2ggLW0gcmVuYW1lZCByZW5hbWVkMiAmJgorCSBnaXQgcHVzaCBwYXJlbnQKKwkpICYmCisJKGNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZW5hbWVkICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGZldGNoIG1pcnJvciB3aXRoIHNwZWNpZmljIGJyYW5jaGVzJyAnCisJZ2l0IGluaXQgLS1iYXJlIG1pcnJvci1mZXRjaC90cmFjayAmJgorCShjZCBtaXJyb3ItZmV0Y2gvdHJhY2sgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3I9ZmV0Y2ggLXQgaGVhZHMvbmV3IHBhcmVudCAuLi9wYXJlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG1pcnJvciByZXNwZWN0cyBzcGVjaWZpYyBicmFuY2hlcycgJworCShjZCBtaXJyb3ItZmV0Y2gvdHJhY2sgJiYKKwkgZ2l0IGZldGNoIHBhcmVudCAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV3ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLS1taXJyb3I9cHVzaCcgJworCW1rZGlyIG1pcnJvci1wdXNoICYmCisJZ2l0IGluaXQgLS1iYXJlIG1pcnJvci1wdXNoL3B1YmxpYyAmJgorCWdpdCBpbml0IG1pcnJvci1wdXNoL3ByaXZhdGUgJiYKKwkoY2QgbWlycm9yLXB1c2gvcHJpdmF0ZSAmJgorCSB0ZXN0X2NvbW1pdCBvbmUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3I9cHVzaCBwdWJsaWMgLi4vcHVibGljCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvcnMgYWN0IGFzIG1pcnJvcnMgZHVyaW5nIHB1c2gnICcKKwkoY2QgbWlycm9yLXB1c2gvcHJpdmF0ZSAmJgorCSBnaXQgYnJhbmNoIG5ldyAmJgorCSBnaXQgYnJhbmNoIC1tIG1hc3RlciByZW5hbWVkICYmCisJIGdpdCBwdXNoIHB1YmxpYworCSkgJiYKKwkoY2QgbWlycm9yLXB1c2gvcHJpdmF0ZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV3ICYmCisJIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9ycyBkbyBub3QgYWN0IGFzIG1pcnJvcnMgZHVyaW5nIGZldGNoJyAnCisJKGNkIG1pcnJvci1wdXNoL3B1YmxpYyAmJgorCSBnaXQgYnJhbmNoIC1tIHJlbmFtZWQgcmVuYW1lZDIgJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvcmVuYW1lZDIKKwkpICYmCisJKGNkIG1pcnJvci1wdXNoL3ByaXZhdGUgJiYKKwkgZ2l0IGZldGNoIHB1YmxpYyAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVuYW1lZCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVuYW1lZDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9ycyBkbyBub3QgYWxsb3cgeW91IHRvIHNwZWNpZnkgcmVmcycgJworCWdpdCBpbml0IG1pcnJvci1wdXNoL3RyYWNrICYmCisJKGNkIG1pcnJvci1wdXNoL3RyYWNrICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgYWRkIC0tbWlycm9yPXB1c2ggLXQgbmV3IHB1YmxpYyAuLi9wdWJsaWMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhbHQgJiYgcHJ1bmUnICcKKwkobWtkaXIgYWx0dHN0ICYmCisJIGNkIGFsdHRzdCAmJgorCSBnaXQgaW5pdCAmJgorCSBnaXQgcmVtb3RlIGFkZCAtZiBvcmlnaW4gLi4vb25lICYmCisJIGdpdCBjb25maWcgcmVtb3RlLmFsdC51cmwgLi4vb25lICYmCisJIGdpdCBjb25maWcgcmVtb3RlLmFsdC5mZXRjaCAiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKSAmJgorCShjZCBvbmUgJiYKKwkgZ2l0IGJyYW5jaCAtbSBzaWRlIHNpZGUyKSAmJgorCShjZCBhbHR0c3QgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyICYmCisJIGdpdCBmZXRjaCBhbHQgJiYKKwkgZ2l0IHJlbW90ZSBwcnVuZSBhbHQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyKQorJworCitjYXQgPnRlc3QvZXhwZWN0IDw8XEVPRgorc29tZS10YWcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgd2l0aCByZWFjaGFibGUgdGFncyAoZGVmYXVsdCknICcKKwkoY2Qgb25lICYmCisJID5mb29iYXIgJiYKKwkgZ2l0IGFkZCBmb29iYXIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiRm9vYmFyIiAmJgorCSBnaXQgdGFnIC1hIC1tICJGb29iYXIgdGFnIiBmb29iYXItdGFnICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCisJIGdpdCB0YWcgLWEgLW0gIlNvbWUgdGFnIiBzb21lLXRhZykgJiYKKwkobWtkaXIgYWRkLXRhZ3MgJiYKKwkgY2QgYWRkLXRhZ3MgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgLWYgb3JpZ2luIC4uL29uZSAmJgorCSBnaXQgdGFnIC1sIHNvbWUtdGFnID4uLi90ZXN0L291dHB1dCAmJgorCSBnaXQgdGFnIC1sIGZvb2Jhci10YWcgPj4uLi90ZXN0L291dHB1dCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udGFnb3B0KSAmJgorCXRlc3RfY21wIHRlc3QvZXhwZWN0IHRlc3Qvb3V0cHV0CisnCisKK2NhdCA+dGVzdC9leHBlY3QgPDxcRU9GCitzb21lLXRhZworZm9vYmFyLXRhZworLS10YWdzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC0tdGFncycgJworCShybSAtcmYgYWRkLXRhZ3MgJiYKKwkgbWtkaXIgYWRkLXRhZ3MgJiYKKwkgY2QgYWRkLXRhZ3MgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgLWYgLS10YWdzIG9yaWdpbiAuLi9vbmUgJiYKKwkgZ2l0IHRhZyAtbCBzb21lLXRhZyA+Li4vdGVzdC9vdXRwdXQgJiYKKwkgZ2l0IHRhZyAtbCBmb29iYXItdGFnID4+Li4vdGVzdC9vdXRwdXQgJiYKKwkgZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnRhZ29wdCA+Pi4uL3Rlc3Qvb3V0cHV0KSAmJgorCXRlc3RfY21wIHRlc3QvZXhwZWN0IHRlc3Qvb3V0cHV0CisnCisKK2NhdCA+dGVzdC9leHBlY3QgPDxcRU9GCistLW5vLXRhZ3MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLS1uby10YWdzJyAnCisJKHJtIC1yZiBhZGQtdGFncyAmJgorCSBta2RpciBhZGQtbm8tdGFncyAmJgorCSBjZCBhZGQtbm8tdGFncyAmJgorCSBnaXQgaW5pdCAmJgorCSBnaXQgcmVtb3RlIGFkZCAtZiAtLW5vLXRhZ3Mgb3JpZ2luIC4uL29uZSAmJgorCSBnaXQgdGFnIC1sIHNvbWUtdGFnID4uLi90ZXN0L291dHB1dCAmJgorCSBnaXQgdGFnIC1sIGZvb2Jhci10YWcgPi4uL3Rlc3Qvb3V0cHV0ICYmCisJIGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi50YWdvcHQgPj4uLi90ZXN0L291dHB1dCkgJiYKKwkoY2Qgb25lICYmCisJIGdpdCB0YWcgLWQgc29tZS10YWcgZm9vYmFyLXRhZykgJiYKKwl0ZXN0X2NtcCB0ZXN0L2V4cGVjdCB0ZXN0L291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgLS1uby1uby10YWdzJyAnCisJKGNkIGFkZC1uby10YWdzICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgYWRkIC1mIC0tbm8tbm8tdGFncyBuZXdvcmlnaW4gLi4vb25lKQorJworCitjYXQgPiBvbmUvZXhwZWN0IDw8IEVPRgorICBhcGlzL21hc3RlcgorICBhcGlzL3NpZGUKKyAgZHJvc29waGlsYS9hbm90aGVyCisgIGRyb3NvcGhpbGEvbWFzdGVyCisgIGRyb3NvcGhpbGEvc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZScgJworCisJKGNkIG9uZSAmJgorCSBnaXQgcmVtb3RlIGFkZCBkcm9zb3BoaWxhIC4uL3R3byAmJgorCSBnaXQgcmVtb3RlIGFkZCBhcGlzIC4uL21pcnJvciAmJgorCSBnaXQgcmVtb3RlIHVwZGF0ZSAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQpCisKKycKKworY2F0ID4gb25lL2V4cGVjdCA8PCBFT0YKKyAgZHJvc29waGlsYS9hbm90aGVyCisgIGRyb3NvcGhpbGEvbWFzdGVyCisgIGRyb3NvcGhpbGEvc2lkZQorICBtYW5kdWNhL21hc3RlcgorICBtYW5kdWNhL3NpZGUKKyAgbWVnYWxvcHJlcHVzL21hc3RlcgorICBtZWdhbG9wcmVwdXMvc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSB3aXRoIGFyZ3VtZW50cycgJworCisJKGNkIG9uZSAmJgorCSBmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJIGRvCisJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgYnJlYWsKKwkgZG9uZSAmJgorCSBnaXQgcmVtb3RlIGFkZCBtYW5kdWNhIC4uL21pcnJvciAmJgorCSBnaXQgcmVtb3RlIGFkZCBtZWdhbG9wcmVwdXMgLi4vbWlycm9yICYmCisJIGdpdCBjb25maWcgcmVtb3Rlcy5waG9iYWV0aWN1cyAiZHJvc29waGlsYSBtZWdhbG9wcmVwdXMiICYmCisJIGdpdCBjb25maWcgcmVtb3Rlcy50aXRhbnVzIG1hbmR1Y2EgJiYKKwkgZ2l0IHJlbW90ZSB1cGRhdGUgcGhvYmFldGljdXMgdGl0YW51cyAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIC0tcHJ1bmUnICcKKworCShjZCBvbmUgJiYKKwkgZ2l0IGJyYW5jaCAtbSBzaWRlMiBzaWRlMykgJiYKKwkoY2QgdGVzdCAmJgorCSBnaXQgcmVtb3RlIHVwZGF0ZSAtLXBydW5lICYmCisJIChjZCAuLi9vbmUgJiYgZ2l0IGJyYW5jaCAtbSBzaWRlMyBzaWRlMikgJiYKKwkgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUzICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMikKKycKKworY2F0ID4gb25lL2V4cGVjdCA8PCBFT0YKKyAgYXBpcy9tYXN0ZXIKKyAgYXBpcy9zaWRlCisgIG1hbmR1Y2EvbWFzdGVyCisgIG1hbmR1Y2Evc2lkZQorICBtZWdhbG9wcmVwdXMvbWFzdGVyCisgIG1lZ2Fsb3ByZXB1cy9zaWRlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGRlZmF1bHQnICcKKworCShjZCBvbmUgJiYKKwkgZm9yIGIgaW4gJChnaXQgYnJhbmNoIC1yKQorCSBkbworCQlnaXQgYnJhbmNoIC1yIC1kICRiIHx8IGJyZWFrCisJIGRvbmUgJiYKKwkgZ2l0IGNvbmZpZyByZW1vdGUuZHJvc29waGlsYS5za2lwRGVmYXVsdFVwZGF0ZSB0cnVlICYmCisJIGdpdCByZW1vdGUgdXBkYXRlIGRlZmF1bHQgJiYKKwkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQorCisnCisKK2NhdCA+IG9uZS9leHBlY3QgPDwgRU9GCisgIGRyb3NvcGhpbGEvYW5vdGhlcgorICBkcm9zb3BoaWxhL21hc3RlcgorICBkcm9zb3BoaWxhL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZGVmYXVsdCAob3ZlcnJpZGRlbiwgd2l0aCBmdW5ueSB3aGl0ZXNwYWNlKScgJworCisJKGNkIG9uZSAmJgorCSBmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJIGRvCisJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgYnJlYWsKKwkgZG9uZSAmJgorCSBnaXQgY29uZmlnIHJlbW90ZXMuZGVmYXVsdCAiJChwcmludGYgIlx0IGRyb3NvcGhpbGEgIFxuIikiICYmCisJIGdpdCByZW1vdGUgdXBkYXRlIGRlZmF1bHQgJiYKKwkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSAod2l0aCByZW1vdGVzLmRlZmF1bHQgZGVmaW5lZCknICcKKworCShjZCBvbmUgJiYKKwkgZm9yIGIgaW4gJChnaXQgYnJhbmNoIC1yKQorCSBkbworCQlnaXQgYnJhbmNoIC1yIC1kICRiIHx8IGJyZWFrCisJIGRvbmUgJiYKKwkgZ2l0IGNvbmZpZyByZW1vdGVzLmRlZmF1bHQgImRyb3NvcGhpbGEiICYmCisJIGdpdCByZW1vdGUgdXBkYXRlICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcicmVtb3RlIHNob3ciIGRvZXMgbm90IHNob3cgc3ltYm9saWMgcmVmcycgJworCisJZ2l0IGNsb25lIG9uZSB0aHJlZSAmJgorCShjZCB0aHJlZSAmJgorCSBnaXQgcmVtb3RlIHNob3cgb3JpZ2luID4gb3V0cHV0ICYmCisJICEgZ3JlcCAiXiAqSEVBRCQiIDwgb3V0cHV0ICYmCisJICEgZ3JlcCAtaSBzdGFsZSA8IG91dHB1dCkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgYWRkaW5nIHJlbW90ZSB3aXRoIGFuIGludmFsaWQgbmFtZScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBhZGQgc29tZTp1cmwgZGVzaXJlZC1uYW1lCisKKycKKworIyBUaGUgZmlyc3QgdGhyZWUgdGVzdCBpZiB0aGUgdHJhY2tpbmcgYnJhbmNoZXMgYXJlIHByb3Blcmx5IHJlbmFtZWQsCisjIHRoZSBsYXN0IHR3byBvbmVzIGNoZWNrIGlmIHRoZSBjb25maWcgaXMgdXBkYXRlZC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGEgcmVtb3RlJyAnCisKKwlnaXQgY2xvbmUgb25lIGZvdXIgJiYKKwkoY2QgZm91ciAmJgorCSBnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gdXBzdHJlYW0gJiYKKwkgcm1kaXIgLmdpdC9yZWZzL3JlbW90ZXMvb3JpZ2luICYmCisJIHRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvdXBzdHJlYW0vSEVBRCkiID0gInJlZnMvcmVtb3Rlcy91cHN0cmVhbS9tYXN0ZXIiICYmCisJIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSB1cHN0cmVhbS9tYXN0ZXIpIiA9ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSIgJiYKKwkgdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS51cHN0cmVhbS5mZXRjaCkiID0gIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3Vwc3RyZWFtLyoiICYmCisJIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSkiID0gInVwc3RyZWFtIikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgZG9lcyBub3QgdXBkYXRlIGEgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlYycgJworCisJZ2l0IGNsb25lIG9uZSBmb3VyLm9uZSAmJgorCShjZCBmb3VyLm9uZSAmJgorCSBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2ggK3JlZnMvaGVhZHMvKjpyZWZzL2hlYWRzL29yaWdpbi8qICYmCisJIGdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiB1cHN0cmVhbSAmJgorCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLnVwc3RyZWFtLmZldGNoKSIgPSAiK3JlZnMvaGVhZHMvKjpyZWZzL2hlYWRzL29yaWdpbi8qIiAmJgorCSBnaXQgcmV2LXBhcnNlIC1xIG9yaWdpbi9tYXN0ZXIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGEgcmVtb3RlIHdpdGggbmFtZSBwYXJ0IG9mIGZldGNoIHNwZWMnICcKKworCWdpdCBjbG9uZSBvbmUgZm91ci50d28gJiYKKwkoY2QgZm91ci50d28gJiYKKwkgZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIHJlbW90ZSAmJgorCSBnaXQgcmVtb3RlIHJlbmFtZSByZW1vdGUgdXBzdHJlYW0gJiYKKwkgdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS51cHN0cmVhbS5mZXRjaCkiID0gIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3Vwc3RyZWFtLyoiKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBhIHJlbW90ZSB3aXRoIG5hbWUgcHJlZml4IG9mIG90aGVyIHJlbW90ZScgJworCisJZ2l0IGNsb25lIG9uZSBmb3VyLnRocmVlICYmCisJKGNkIGZvdXIudGhyZWUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgbyBnaXQ6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdCAmJgorCSBnaXQgcmVtb3RlIHJlbmFtZSBvIHVwc3RyZWFtICYmCisJIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyKSIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiKQorCisnCisKK2NhdCA+IHJlbW90ZXNfb3JpZ2luIDw8IEVPRgorVVJMOiAkKHB3ZCkvb25lCitQdXNoOiByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3Vwc3RyZWFtCitQdWxsOiByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL29yaWdpbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pZ3JhdGUgYSByZW1vdGUgZnJvbSBuYW1lZCBmaWxlIGluICRHSVRfRElSL3JlbW90ZXMnICcKKwlnaXQgY2xvbmUgb25lIGZpdmUgJiYKKwlvcmlnaW5fdXJsPSQocHdkKS9vbmUgJiYKKwkoY2QgZml2ZSAmJgorCSBnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW4gJiYKKwkgbWtkaXIgLXAgLmdpdC9yZW1vdGVzICYmCisJIGNhdCAuLi9yZW1vdGVzX29yaWdpbiA+IC5naXQvcmVtb3Rlcy9vcmlnaW4gJiYKKwkgZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIG9yaWdpbiAmJgorCSAhIHRlc3QgLWYgLmdpdC9yZW1vdGVzL29yaWdpbiAmJgorCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIkb3JpZ2luX3VybCIgJiYKKwkgdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4ucHVzaCkiID0gInJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdXBzdHJlYW0iICYmCisJIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoKSIgPSAicmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4iKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaWdyYXRlIGEgcmVtb3RlIGZyb20gbmFtZWQgZmlsZSBpbiAkR0lUX0RJUi9icmFuY2hlcycgJworCWdpdCBjbG9uZSBvbmUgc2l4ICYmCisJb3JpZ2luX3VybD0kKHB3ZCkvb25lICYmCisJKGNkIHNpeCAmJgorCSBnaXQgcmVtb3RlIHJtIG9yaWdpbiAmJgorCSBlY2hvICIkb3JpZ2luX3VybCIgPiAuZ2l0L2JyYW5jaGVzL29yaWdpbiAmJgorCSBnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gb3JpZ2luICYmCisJICEgdGVzdCAtZiAuZ2l0L2JyYW5jaGVzL29yaWdpbiAmJgorCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIkb3JpZ2luX3VybCIgJiYKKwkgdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2gpIiA9ICJyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL29yaWdpbiIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBwcnVuZSB0byBjYXVzZSBhIGRhbmdsaW5nIHN5bXJlZicgJworCWdpdCBjbG9uZSBvbmUgc2V2ZW4gJiYKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgc2lkZTIgJiYKKwkJZ2l0IGJyYW5jaCAtRCBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBzZXZlbiAmJgorCQlnaXQgcmVtb3RlIHBydW5lIG9yaWdpbgorCSkgPmVyciAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGJlY29tZSBkYW5nbGluZyIgZXJyICYmCisKKwk6IEFuZCB0aGUgZGFuZ2xpbmcgc3ltcmVmIHdpbGwgbm90IGNhdXNlIG90aGVyIGFubm95aW5nIGVycm9ycyAmJgorCSgKKwkJY2Qgc2V2ZW4gJiYKKwkJZ2l0IGJyYW5jaCAtYQorCSkgMj5lcnIgJiYKKwkhIGdyZXAgInBvaW50cyBub3doZXJlIiBlcnIgJiYKKwkoCisJCWNkIHNldmVuICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggbm9tb3JlIG9yaWdpbgorCSkgMj5lcnIgJiYKKwlncmVwICJkYW5nbGluZyBzeW1yZWYiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGVtcHR5IHJlbW90ZScgJworCisJdGVzdF9jcmVhdGVfcmVwbyBlbXB0eSAmJgorCWdpdCBjbG9uZSBlbXB0eSBlbXB0eS1jbG9uZSAmJgorCSgKKwkJY2QgZW1wdHktY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzaG93IG9yaWdpbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC1icmFuY2hlcyByZXF1aXJlcyBhIHJlbW90ZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgc2V0LWJyYW5jaGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC1icmFuY2hlcycgJworCWVjaG8gIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvKiIgPmV4cGVjdC5pbml0aWFsICYmCisJc29ydCA8PC1cRU9GID5leHBlY3QuYWRkICYmCisJK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvc2NyYXRjaC8qCisJK3JlZnMvaGVhZHMvb3RoZXI6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvb3RoZXIKKwlFT0YKKwlzb3J0IDw8LVxFT0YgPmV4cGVjdC5yZXBsYWNlICYmCisJK3JlZnMvaGVhZHMvbWFpbnQ6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbWFpbnQKKwkrcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbWFzdGVyCisJK3JlZnMvaGVhZHMvbmV4dDpyZWZzL3JlbW90ZXMvc2NyYXRjaC9uZXh0CisJRU9GCisJc29ydCA8PC1cRU9GID5leHBlY3QuYWRkLXR3byAmJgorCStyZWZzL2hlYWRzL21haW50OnJlZnMvcmVtb3Rlcy9zY3JhdGNoL21haW50CisJK3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9zY3JhdGNoL21hc3RlcgorCStyZWZzL2hlYWRzL25leHQ6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbmV4dAorCStyZWZzL2hlYWRzL3B1OnJlZnMvcmVtb3Rlcy9zY3JhdGNoL3B1CisJK3JlZnMvaGVhZHMvdC90b3BpYzpyZWZzL3JlbW90ZXMvc2NyYXRjaC90L3RvcGljCisJRU9GCisJc29ydCA8PC1cRU9GID5leHBlY3Quc2V0dXAtZmZvbmx5ICYmCisJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbWFzdGVyCisJK3JlZnMvaGVhZHMvbmV4dDpyZWZzL3JlbW90ZXMvc2NyYXRjaC9uZXh0CisJRU9GCisJc29ydCA8PC1cRU9GID5leHBlY3QucmVzcGVjdC1mZm9ubHkgJiYKKwlyZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvc2NyYXRjaC9tYXN0ZXIKKwkrcmVmcy9oZWFkcy9uZXh0OnJlZnMvcmVtb3Rlcy9zY3JhdGNoL25leHQKKwkrcmVmcy9oZWFkcy9wdTpyZWZzL3JlbW90ZXMvc2NyYXRjaC9wdQorCUVPRgorCisJZ2l0IGNsb25lIC5naXQvIHNldGJyYW5jaGVzICYmCisJKAorCQljZCBzZXRicmFuY2hlcyAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gc2NyYXRjaCAmJgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc2NyYXRjaC5mZXRjaCA+Y29uZmlnLXJlc3VsdCAmJgorCQlzb3J0IDxjb25maWctcmVzdWx0ID4uLi9hY3R1YWwuaW5pdGlhbCAmJgorCisJCWdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIHNjcmF0Y2ggLS1hZGQgb3RoZXIgJiYKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggPmNvbmZpZy1yZXN1bHQgJiYKKwkJc29ydCA8Y29uZmlnLXJlc3VsdCA+Li4vYWN0dWFsLmFkZCAmJgorCisJCWdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIHNjcmF0Y2ggbWFpbnQgbWFzdGVyIG5leHQgJiYKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggPmNvbmZpZy1yZXN1bHQgJiYKKwkJc29ydCA8Y29uZmlnLXJlc3VsdCA+Li4vYWN0dWFsLnJlcGxhY2UgJiYKKworCQlnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCBzY3JhdGNoIHB1IHQvdG9waWMgJiYKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggPmNvbmZpZy1yZXN1bHQgJiYKKwkJc29ydCA8Y29uZmlnLXJlc3VsdCA+Li4vYWN0dWFsLmFkZC10d28gJiYKKworCQlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIHJlbW90ZS5zY3JhdGNoLmZldGNoICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggXAorCQkJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbWFzdGVyICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggXAorCQkJK3JlZnMvaGVhZHMvbmV4dDpyZWZzL3JlbW90ZXMvc2NyYXRjaC9uZXh0ICYmCisJCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zY3JhdGNoLmZldGNoID5jb25maWctcmVzdWx0ICYmCisJCXNvcnQgPGNvbmZpZy1yZXN1bHQgPi4uL2FjdHVhbC5zZXR1cC1mZm9ubHkgJiYKKworCQlnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCBzY3JhdGNoIHB1ICYmCisJCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zY3JhdGNoLmZldGNoID5jb25maWctcmVzdWx0ICYmCisJCXNvcnQgPGNvbmZpZy1yZXN1bHQgPi4uL2FjdHVhbC5yZXNwZWN0LWZmb25seQorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuaW5pdGlhbCBhY3R1YWwuaW5pdGlhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5hZGQgYWN0dWFsLmFkZCAmJgorCXRlc3RfY21wIGV4cGVjdC5yZXBsYWNlIGFjdHVhbC5yZXBsYWNlICYmCisJdGVzdF9jbXAgZXhwZWN0LmFkZC10d28gYWN0dWFsLmFkZC10d28gJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2V0dXAtZmZvbmx5IGFjdHVhbC5zZXR1cC1mZm9ubHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVzcGVjdC1mZm9ubHkgYWN0dWFsLnJlc3BlY3QtZmZvbmx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtYnJhbmNoZXMgd2l0aCAtLW1pcnJvcicgJworCWVjaG8gIityZWZzLyo6cmVmcy8qIiA+ZXhwZWN0LmluaXRpYWwgJiYKKwllY2hvICIrcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QucmVwbGFjZSAmJgorCWdpdCBjbG9uZSAtLW1pcnJvciAuZ2l0LyBzZXRicmFuY2hlcy1taXJyb3IgJiYKKwkoCisJCWNkIHNldGJyYW5jaGVzLW1pcnJvciAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gc2NyYXRjaCAmJgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc2NyYXRjaC5mZXRjaCA+Li4vYWN0dWFsLmluaXRpYWwgJiYKKworCQlnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBzY3JhdGNoIGhlYWRzL21hc3RlciAmJgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc2NyYXRjaC5mZXRjaCA+Li4vYWN0dWFsLnJlcGxhY2UKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0LmluaXRpYWwgYWN0dWFsLmluaXRpYWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVwbGFjZSBhY3R1YWwucmVwbGFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgcmVtb3RlJyAnCisJZ2l0IHJlbW90ZSBhZGQgc29tZXJlbW90ZSBmb28gJiYKKwllY2hvIGZvbyA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCBiYXInICcKKwlnaXQgcmVtb3RlIHNldC11cmwgc29tZXJlbW90ZSBiYXIgJiYKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCBiYXogYmFyJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIHNvbWVyZW1vdGUgYmF6IGJhciAmJgorCWVjaG8gYmF6ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIHpvdCBiYXInICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHNldC11cmwgc29tZXJlbW90ZSB6b3QgYmFyICYmCisJZWNobyBiYXogPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1wdXNoIHpvdCBiYXonICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIHNvbWVyZW1vdGUgem90IGJheiAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tcHVzaCB6b3QnICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIHNvbWVyZW1vdGUgem90ICYmCisJZWNobyB6b3QgPmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggcXV4IHpvdCcgJworCWdpdCByZW1vdGUgc2V0LXVybCAtLXB1c2ggc29tZXJlbW90ZSBxdXggem90ICYmCisJZWNobyBxdXggPmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggZm9vIHF1K3gnICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIHNvbWVyZW1vdGUgZm9vIHF1K3ggJiYKKwllY2hvIGZvbyA+ZXhwZWN0ICYmCisJZWNobyAiWVlZIiA+PmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWFkZCBhYWEnICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIC0tYWRkIHNvbWVyZW1vdGUgYWFhICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWVjaG8gYWFhID4+ZXhwZWN0ICYmCisJZWNobyAiWVlZIiA+PmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tcHVzaCBiYXIgYWFhJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCBzb21lcmVtb3RlIGJhciBhYWEgJiYKKwllY2hvIGZvbyA+ZXhwZWN0ICYmCisJZWNobyBiYXIgPj5leHBlY3QgJiYKKwllY2hvICJZWVkiID4+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1wdXNoIC0tZGVsZXRlIGJhcicgJworCWdpdCByZW1vdGUgc2V0LXVybCAtLXB1c2ggLS1kZWxldGUgc29tZXJlbW90ZSBiYXIgJiYKKwllY2hvIGZvbyA+ZXhwZWN0ICYmCisJZWNobyAiWVlZIiA+PmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWRlbGV0ZSBmb28nICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIC0tZGVsZXRlIHNvbWVyZW1vdGUgZm9vICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1hZGQgYmJiJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIHNvbWVyZW1vdGUgYmJiICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwllY2hvIGJiYiA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSAuKicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSBzb21lcmVtb3RlIC5cKiAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZWNobyBiYmIgPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1kZWxldGUgYmJiJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmJiICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1kZWxldGUgYmF6JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmF6ICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1hZGQgY2NjJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIHNvbWVyZW1vdGUgY2NjICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwllY2hvIGNjYyA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSBiYXonICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgc29tZXJlbW90ZSBiYXogJiYKKwllY2hvICJZWVkiID5leHBlY3QgJiYKKwllY2hvIGNjYyA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDYtcmVtb3RlLWdyb3Vwcy5zaCBiL3QvdDU1MDYtcmVtb3RlLWdyb3Vwcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzBiMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwNi1yZW1vdGUtZ3JvdXBzLnNoCkBAIC0wLDAgKzEsOTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVtb3RlIGdyb3VwIGhhbmRsaW5nJworLiAuL3Rlc3QtbGliLnNoCisKK21hcmsoKSB7CisJZWNobyAiJDEiID5tYXJrCit9CisKK3VwZGF0ZV9yZXBvKCkgeworCShjZCAkMSAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1GIC4uL21hcmspCit9CisKK3VwZGF0ZV9yZXBvcygpIHsKKwl1cGRhdGVfcmVwbyBvbmUgJDEgJiYKKwl1cGRhdGVfcmVwbyB0d28gJDEKK30KKworcmVwb19mZXRjaGVkKCkgeworCWlmIHRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcyAkMSAtLWAiID0gImBjYXQgbWFya2AiOyB0aGVuCisJCWVjaG8gPiYyICJyZXBvIHdhcyBmZXRjaGVkOiAkMSIKKwkJcmV0dXJuIDAKKwlmaQorCWVjaG8gPiYyICJyZXBvIHdhcyBub3QgZmV0Y2hlZDogJDEiCisJcmV0dXJuIDEKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBvbmUgJiYgKGNkIG9uZSAmJiBnaXQgaW5pdCkgJiYKKwlta2RpciB0d28gJiYgKGNkIHR3byAmJiBnaXQgaW5pdCkgJiYKKwlnaXQgcmVtb3RlIGFkZCAtbSBtYXN0ZXIgb25lIG9uZSAmJgorCWdpdCByZW1vdGUgYWRkIC1tIG1hc3RlciB0d28gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGdyb3VwIHVwZGF0ZXMgYWxsJyAnCisJbWFyayB1cGRhdGUtYWxsICYmCisJdXBkYXRlX3JlcG9zICYmCisJZ2l0IHJlbW90ZSB1cGRhdGUgJiYKKwlyZXBvX2ZldGNoZWQgb25lICYmCisJcmVwb19mZXRjaGVkIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGVudCBncm91cCBwcm9kdWNlcyBlcnJvcicgJworCW1hcmsgbm9uZXhpc3RlbnQgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHVwZGF0ZSBub25leGlzdGVudCAmJgorCSEgcmVwb19mZXRjaGVkIG9uZSAmJgorCSEgcmVwb19mZXRjaGVkIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZyBncm91cCB1cGRhdGVzIGFsbCBtZW1iZXJzIChyZW1vdGUgdXBkYXRlKScgJworCW1hcmsgZ3JvdXAtYWxsICYmCisJdXBkYXRlX3JlcG9zICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGVzLmFsbCBvbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZXMuYWxsIHR3byAmJgorCWdpdCByZW1vdGUgdXBkYXRlIGFsbCAmJgorCXJlcG9fZmV0Y2hlZCBvbmUgJiYKKwlyZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIGdyb3VwIHVwZGF0ZXMgYWxsIG1lbWJlcnMgKGZldGNoKScgJworCW1hcmsgZmV0Y2gtZ3JvdXAtYWxsICYmCisJdXBkYXRlX3JlcG9zICYmCisJZ2l0IGZldGNoIGFsbCAmJgorCXJlcG9fZmV0Y2hlZCBvbmUgJiYKKwlyZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIGdyb3VwIGRvZXMgbm90IHVwZGF0ZSBub24tbWVtYmVycyAocmVtb3RlIHVwZGF0ZSknICcKKwltYXJrIGdyb3VwLXNvbWUgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZXMuc29tZSBvbmUgJiYKKwlnaXQgcmVtb3RlIHVwZGF0ZSBzb21lICYmCisJcmVwb19mZXRjaGVkIG9uZSAmJgorCSEgcmVwb19mZXRjaGVkIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZyBncm91cCBkb2VzIG5vdCB1cGRhdGUgbm9uLW1lbWJlcnMgKGZldGNoKScgJworCW1hcmsgZmV0Y2gtZ3JvdXAtc29tZSAmJgorCXVwZGF0ZV9yZXBvcyAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3Rlcy5zb21lIG9uZSAmJgorCWdpdCByZW1vdGUgdXBkYXRlIHNvbWUgJiYKKwlyZXBvX2ZldGNoZWQgb25lICYmCisJISByZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIHJlbW90ZSBuYW1lIHVwZGF0ZXMgdGhhdCByZW1vdGUnICcKKwltYXJrIHJlbW90ZS1uYW1lICYmCisJdXBkYXRlX3JlcG9zICYmCisJZ2l0IHJlbW90ZSB1cGRhdGUgb25lICYmCisJcmVwb19mZXRjaGVkIG9uZSAmJgorCSEgcmVwb19mZXRjaGVkIHR3bworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDktZmV0Y2gtcHVzaC1uYW1lc3BhY2VzLnNoIGIvdC90NTUwOS1mZXRjaC1wdXNoLW5hbWVzcGFjZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2MwYjMxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDktZmV0Y2gtcHVzaC1uYW1lc3BhY2VzLnNoCkBAIC0wLDAgKzEsODUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaC9wdXNoIGludm9sdmluZyByZWYgbmFtZXNwYWNlcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgaW5pdCBvcmlnaW5hbCAmJgorCSgKKwkJY2Qgb3JpZ2luYWwgJiYKKwkJZWNobyAwID5jb3VudCAmJgorCQlnaXQgYWRkIGNvdW50ICYmCisJCXRlc3RfY29tbWl0IDAgJiYKKwkJZWNobyAxID5jb3VudCAmJgorCQlnaXQgYWRkIGNvdW50ICYmCisJCXRlc3RfY29tbWl0IDEgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgcHVzaGVlLW5hbWVzcGFjZWQgImV4dDo6Z2l0IC0tbmFtZXNwYWNlPW5hbWVzcGFjZSAlcyAuLi9wdXNoZWUiICYmCisJCWdpdCByZW1vdGUgYWRkIHB1c2hlZS11bm5hbWVzcGFjZWQgLi4vcHVzaGVlCisJKSAmJgorCWNvbW1pdDA9JChjZCBvcmlnaW5hbCAmJiBnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCWNvbW1pdDE9JChjZCBvcmlnaW5hbCAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGluaXQgcHVzaGVlICYmCisJZ2l0IGluaXQgcHVsbGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgdXNpbmcgYSByZWYgbmFtZXNwYWNlJyAnCisJKAorCQljZCBvcmlnaW5hbCAmJgorCQlnaXQgcHVzaCBwdXNoZWUtbmFtZXNwYWNlZCBtYXN0ZXIgJiYKKwkJZ2l0IGxzLXJlbW90ZSBwdXNoZWUtbmFtZXNwYWNlZCA+YWN0dWFsICYmCisJCXByaW50ZiAiJGNvbW1pdDFcdHJlZnMvaGVhZHMvbWFzdGVyXG4iID5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkJZ2l0IHB1c2ggcHVzaGVlLW5hbWVzcGFjZWQgLS10YWdzICYmCisJCWdpdCBscy1yZW1vdGUgcHVzaGVlLW5hbWVzcGFjZWQgPmFjdHVhbCAmJgorCQlwcmludGYgIiRjb21taXQwXHRyZWZzL3RhZ3MvMFxuIiA+PmV4cGVjdGVkICYmCisJCXByaW50ZiAiJGNvbW1pdDFcdHJlZnMvdGFncy8xXG4iID4+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCSMgVmVyaWZ5IHRoYXQgdGhlIEdJVF9OQU1FU1BBQ0UgZW52aXJvbm1lbnQgdmFyaWFibGUgd29ya3MgYXMgd2VsbAorCQlHSVRfTkFNRVNQQUNFPW5hbWVzcGFjZSBnaXQgbHMtcmVtb3RlICJleHQ6OmdpdCAlcyAuLi9wdXNoZWUiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCSMgVmVyaWZ5IHRoYXQgLS1uYW1lc3BhY2Ugb3ZlcnJpZGVzIEdJVF9OQU1FU1BBQ0UKKwkJR0lUX05BTUVTUEFDRT1nYXJiYWdlIGdpdCBscy1yZW1vdGUgcHVzaGVlLW5hbWVzcGFjZWQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkJIyBUcnkgYSBuYW1lc3BhY2Ugd2l0aCBubyBjb250ZW50CisJCWdpdCBscy1yZW1vdGUgImV4dDo6Z2l0IC0tbmFtZXNwYWNlPWdhcmJhZ2UgJXMgLi4vcHVzaGVlIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIC9kZXYvbnVsbCBhY3R1YWwgJiYKKwkJZ2l0IGxzLXJlbW90ZSBwdXNoZWUtdW5uYW1lc3BhY2VkID5hY3R1YWwgJiYKKwkJc2VkIC1lICJzfHJlZnMvfHJlZnMvbmFtZXNwYWNlcy9uYW1lc3BhY2UvcmVmcy98IiBleHBlY3RlZCA+ZXhwZWN0ZWQudW5uYW1lc3BhY2VkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkLnVubmFtZXNwYWNlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgZnJvbSBhIHJlcG9zaXRvcnkgdXNpbmcgYSByZWYgbmFtZXNwYWNlJyAnCisJKAorCQljZCBwdWxsZXIgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgcHVzaGVlLW5hbWVzcGFjZWQgImV4dDo6Z2l0IC0tbmFtZXNwYWNlPW5hbWVzcGFjZSAlcyAuLi9wdXNoZWUiICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy8gPmFjdHVhbCAmJgorCQlwcmludGYgIiRjb21taXQxIGNvbW1pdFx0cmVmcy9yZW1vdGVzL3B1c2hlZS1uYW1lc3BhY2VkL21hc3RlclxuIiA+ZXhwZWN0ZWQgJiYKKwkJcHJpbnRmICIkY29tbWl0MCBjb21taXRcdHJlZnMvdGFncy8wXG4iID4+ZXhwZWN0ZWQgJiYKKwkJcHJpbnRmICIkY29tbWl0MSBjb21taXRcdHJlZnMvdGFncy8xXG4iID4+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCisjIFRoaXMgdGVzdCB3aXRoIGNsb25lIC0tbWlycm9yIGNoZWNrcyBmb3IgcG9zc2libGUgcmVncmVzc2lvbnMgaW4gY2xvbmUKKyMgb3IgdGhlIG1hY2hpbmVyeSB1bmRlcm5lYXRoIGl0LiBJdCBlbnN1cmVzIHRoYXQgbm8gZnV0dXJlIGNoYW5nZQorIyBjYXVzZXMgY2xvbmUgdG8gaWdub3JlIHJlZnMgaW4gcmVmcy9uYW1lc3BhY2VzLyouIEluIHBhcnRpY3VsYXIsIGl0CisjIHByb3RlY3RzIGFnYWluc3QgYSByZWdyZXNzaW9uIGNhdXNlZCBieSBhbnkgZnV0dXJlIGNoYW5nZSB0byB0aGUgcmVmcworIyBtYWNoaW5lcnkgdGhhdCBtaWdodCBjYXVzZSBpdCB0byBpZ25vcmUgcmVmcyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMvKgorIyBvciByZWZzL3RhZ3MvKi4gTW9yZSBnZW5lcmFsbHksIHRoaXMgdGVzdCBhbHNvIGNoZWNrcyB0aGUgaGlnaC1sZXZlbAorIyBmdW5jdGlvbmFsaXR5IG9mIHVzaW5nIGNsb25lIC0tbWlycm9yIHRvIGJhY2sgdXAgYSBzZXQgb2YgcmVwb3MgaG9zdGVkCisjIGluIHRoZSBuYW1lc3BhY2VzIG9mIGEgc2luZ2xlIHJlcG8uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXJyb3JpbmcgYSByZXBvc2l0b3J5IHVzaW5nIGEgcmVmIG5hbWVzcGFjZScgJworCWdpdCBjbG9uZSAtLW1pcnJvciBwdXNoZWUgbWlycm9yICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzLyA+YWN0dWFsICYmCisJCXByaW50ZiAiJGNvbW1pdDEgY29tbWl0XHRyZWZzL25hbWVzcGFjZXMvbmFtZXNwYWNlL3JlZnMvaGVhZHMvbWFzdGVyXG4iID5leHBlY3RlZCAmJgorCQlwcmludGYgIiRjb21taXQwIGNvbW1pdFx0cmVmcy9uYW1lc3BhY2VzL25hbWVzcGFjZS9yZWZzL3RhZ3MvMFxuIiA+PmV4cGVjdGVkICYmCisJCXByaW50ZiAiJGNvbW1pdDEgY29tbWl0XHRyZWZzL25hbWVzcGFjZXMvbmFtZXNwYWNlL3JlZnMvdGFncy8xXG4iID4+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTAtZmV0Y2guc2ggYi90L3Q1NTEwLWZldGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ3YTE5YTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTEwLWZldGNoLnNoCkBAIC0wLDAgKzEsNDg5IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDA2LCBKdW5pbyBDIEhhbWFuby4KKwordGVzdF9kZXNjcmlwdGlvbj0nUGVyIGJyYW5jaCBjb25maWcgdmFyaWFibGVzIGFmZmVjdHMgImdpdCBmZXRjaCIuCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK0Q9YHB3ZGAKKwordGVzdF9idW5kbGVfb2JqZWN0X2NvdW50ICgpIHsKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgIiQxIiA+dmVyaWZ5Lm91dCAmJgorCXRlc3QgIiQyIiA9ICQoZ3JlcCAnXlswLTlhLWZdXHs0MFx9ICcgdmVyaWZ5Lm91dCB8IHdjIC1sKQorfQorCitjb252ZXJ0X2J1bmRsZV90b19wYWNrICgpIHsKKwl3aGlsZSByZWFkIHggJiYgdGVzdCAtbiAiJHgiCisJZG8KKwkJOjsKKwlkb25lCisJY2F0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gPmZpbGUgb3JpZ2luYWwgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG9yaWdpbmFsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBhbmQgc2V0dXAgY2hpbGQgcmVwb3MiICcKKwlnaXQgY2xvbmUgLiBvbmUgJiYKKwkoCisJCWNkIG9uZSAmJgorCQllY2hvID5maWxlIHVwZGF0ZWQgYnkgb25lICYmCisJCWdpdCBjb21taXQgLWEgLW0gInVwZGF0ZWQgYnkgb25lIgorCSkgJiYKKwlnaXQgY2xvbmUgLiB0d28gJiYKKwkoCisJCWNkIHR3byAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIG9uZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vbmUudXJsIC4uL29uZS8uZ2l0LyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vbmUuZmV0Y2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vbmUKKwkpICYmCisJZ2l0IGNsb25lIC4gdGhyZWUgJiYKKwkoCisJCWNkIHRocmVlICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgdHdvICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL29uZSAmJgorCQlta2RpciAtcCAuZ2l0L3JlbW90ZXMgJiYKKwkJeworCQkJZWNobyAiVVJMOiAuLi90d28vLmdpdC8iCisJCQllY2hvICJQdWxsOiByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3R3byIKKwkJCWVjaG8gIlB1bGw6IHJlZnMvaGVhZHMvb25lOnJlZnMvaGVhZHMvb25lIgorCQl9ID4uZ2l0L3JlbW90ZXMvdHdvCisJKSAmJgorCWdpdCBjbG9uZSAuIGJ1bmRsZSAmJgorCWdpdCBjbG9uZSAuIHNldmVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIHRlc3QiICcKKwljZCAiJEQiICYmCisJZWNobyA+ZmlsZSB1cGRhdGVkIGJ5IG9yaWdpbiAmJgorCWdpdCBjb21taXQgLWEgLW0gInVwZGF0ZWQgYnkgb3JpZ2luIiAmJgorCWNkIHR3byAmJgorCWdpdCBmZXRjaCAmJgorCXRlc3QgLWYgLmdpdC9yZWZzL2hlYWRzL29uZSAmJgorCW1pbmU9YGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9vbmVgICYmCisJaGlzPWBjZCAuLi9vbmUgJiYgZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcmAgJiYKKwl0ZXN0ICJ6JG1pbmUiID0gInokaGlzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCB0ZXN0IGZvci1tZXJnZSIgJworCWNkICIkRCIgJiYKKwljZCB0aHJlZSAmJgorCWdpdCBmZXRjaCAmJgorCXRlc3QgLWYgLmdpdC9yZWZzL2hlYWRzL3R3byAmJgorCXRlc3QgLWYgLmdpdC9yZWZzL2hlYWRzL29uZSAmJgorCW1hc3Rlcl9pbl90d289YGNkIC4uL3R3byAmJiBnaXQgcmV2LXBhcnNlIG1hc3RlcmAgJiYKKwlvbmVfaW5fdHdvPWBjZCAuLi90d28gJiYgZ2l0IHJldi1wYXJzZSBvbmVgICYmCisJeworCQllY2hvICIkb25lX2luX3R3bwkiCisJCWVjaG8gIiRtYXN0ZXJfaW5fdHdvCW5vdC1mb3ItbWVyZ2UiCisJfSA+ZXhwZWN0ZWQgJiYKKwljdXQgLWYgLTIgLmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tcHJ1bmUgb24gaXRzIG93biB3b3JrcyBhcyBleHBlY3RlZCcgJworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZSAmJgorCWNkIHBydW5lICYmCisJZ2l0IGZldGNoIG9yaWdpbiByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL2V4dHJhYnJhbmNoICYmCisKKwlnaXQgZmV0Y2ggLS1wcnVuZSBvcmlnaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIG9yaWdpbi9leHRyYWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXBydW5lIHdpdGggYSBicmFuY2ggbmFtZSBrZWVwcyBicmFuY2hlcycgJworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZS1icmFuY2ggJiYKKwljZCBwcnVuZS1icmFuY2ggJiYKKwlnaXQgZmV0Y2ggb3JpZ2luIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vZXh0cmFicmFuY2ggJiYKKworCWdpdCBmZXRjaCAtLXBydW5lIG9yaWdpbiBtYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIG9yaWdpbi9leHRyYWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXBydW5lIHdpdGggYSBuYW1lc3BhY2Uga2VlcHMgb3RoZXIgbmFtZXNwYWNlcycgJworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZS1uYW1lc3BhY2UgJiYKKwljZCBwcnVuZS1uYW1lc3BhY2UgJiYKKworCWdpdCBmZXRjaCAtLXBydW5lIG9yaWdpbiByZWZzL2hlYWRzL2EvKjpyZWZzL3JlbW90ZXMvb3JpZ2luL2EvKiAmJgorCWdpdCByZXYtcGFyc2Ugb3JpZ2luL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXBydW5lIC0tdGFncyBkb2VzIG5vdCBkZWxldGUgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcycgJworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZS10YWdzICYmCisJY2QgcHJ1bmUtdGFncyAmJgorCWdpdCBmZXRjaCBvcmlnaW4gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy90YWdzL3NvbWV0YWcgJiYKKworCWdpdCBmZXRjaCAtLXBydW5lIC0tdGFncyBvcmlnaW4gJiYKKwlnaXQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHNvbWVicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1wcnVuZSAtLXRhZ3Mgd2l0aCBicmFuY2ggZG9lcyBub3QgZGVsZXRlIG90aGVyIHJlbW90ZS10cmFja2luZyBicmFuY2hlcycgJworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZS10YWdzLWJyYW5jaCAmJgorCWNkIHBydW5lLXRhZ3MtYnJhbmNoICYmCisJZ2l0IGZldGNoIG9yaWdpbiByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL2V4dHJhYnJhbmNoICYmCisKKwlnaXQgZmV0Y2ggLS1wcnVuZSAtLXRhZ3Mgb3JpZ2luIG1hc3RlciAmJgorCWdpdCByZXYtcGFyc2Ugb3JpZ2luL2V4dHJhYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHRhZ3Mgd2hlbiB0aGVyZSBpcyBubyB0YWdzJyAnCisKKyAgICBjZCAiJEQiICYmCisKKyAgICBta2RpciBub3RhZ3MgJiYKKyAgICBjZCBub3RhZ3MgJiYKKyAgICBnaXQgaW5pdCAmJgorCisgICAgZ2l0IGZldGNoIC10IC4uCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZm9sbG93aW5nIHRhZ3MnICcKKworCWNkICIkRCIgJiYKKwlnaXQgdGFnIC1hIC1tICdhbm5vdGF0ZWQnIGFubm8gSEVBRCAmJgorCWdpdCB0YWcgbGlnaHQgSEVBRCAmJgorCisJbWtkaXIgZm91ciAmJgorCWNkIGZvdXIgJiYKKwlnaXQgaW5pdCAmJgorCisJZ2l0IGZldGNoIC4uIDp0cmFjayAmJgorCWdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL3RhZ3MvYW5ubyAmJgorCWdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL3RhZ3MvbGlnaHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB1c2VzIHJlbW90ZSByZWYgbmFtZXMgdG8gZGVzY3JpYmUgbmV3IHJlZnMnICcKKwljZCAiJEQiICYmCisJZ2l0IGluaXQgZGVzY3JpcHRpdmUgJiYKKwkoCisJCWNkIGRlc2NyaXB0aXZlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm8udXJsIC4uICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm8uZmV0Y2ggInJlZnMvaGVhZHMvKjpyZWZzL2NyYXp5aGVhZHMvKiIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUuby5mZXRjaCAicmVmcy9vdGhlcnMvKjpyZWZzL2hlYWRzLyoiICYmCisJCWdpdCBmZXRjaCBvCisJKSAmJgorCWdpdCB0YWcgLWEgLW0gIkRlc2NyaXB0aXZlIHRhZyIgZGVzY3JpcHRpdmUtdGFnICYmCisJZ2l0IGJyYW5jaCBkZXNjcmlwdGl2ZS1icmFuY2ggJiYKKwlnaXQgY2hlY2tvdXQgZGVzY3JpcHRpdmUtYnJhbmNoICYmCisJZWNobyAiTnV0cyIgPmNyYXp5ICYmCisJZ2l0IGFkZCBjcmF6eSAmJgorCWdpdCBjb21taXQgLWEgLW0gImRlc2NyaXB0aXZlIGNvbW1pdCIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL290aGVycy9jcmF6eSBIRUFEICYmCisJKAorCQljZCBkZXNjcmlwdGl2ZSAmJgorCQlnaXQgZmV0Y2ggbyAyPmFjdHVhbCAmJgorCQlncmVwICIgLT4gcmVmcy9jcmF6eWhlYWRzL2Rlc2NyaXB0aXZlLWJyYW5jaCQiIGFjdHVhbCB8CisJCXRlc3RfaTE4bmdyZXAgIm5ldyBicmFuY2giICYmCisJCWdyZXAgIiAtPiBkZXNjcmlwdGl2ZS10YWckIiBhY3R1YWwgfAorCQl0ZXN0X2kxOG5ncmVwICJuZXcgdGFnIiAmJgorCQlncmVwICIgLT4gY3JhenkkIiBhY3R1YWwgfAorCQl0ZXN0X2kxOG5ncmVwICJuZXcgcmVmIgorCSkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG11c3Qgbm90IHJlc29sdmUgc2hvcnQgdGFnIG5hbWUnICcKKworCWNkICIkRCIgJiYKKworCW1rZGlyIGZpdmUgJiYKKwljZCBmaXZlICYmCisJZ2l0IGluaXQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAuLiBhbm5vOmZpdmUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjYW4gbm93IHJlc29sdmUgc2hvcnQgcmVtb3RlIG5hbWUnICcKKworCWNkICIkRCIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvc2l4L0hFQUQgSEVBRCAmJgorCisJbWtkaXIgc2l4ICYmCisJY2Qgc2l4ICYmCisJZ2l0IGluaXQgJiYKKworCWdpdCBmZXRjaCAuLiBzaXg6c2l4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBidW5kbGUgMScgJworCWNkICIkRCIgJiYKKwllY2hvID5maWxlIHVwZGF0ZWQgYWdhaW4gYnkgb3JpZ2luICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidGlwIiAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZTEgbWFzdGVyXi4ubWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hlYWRlciBvZiBidW5kbGUgbG9va3MgcmlnaHQnICcKKwloZWFkIC1uIDEgIiREIi9idW5kbGUxIHwgZ3JlcCAiXiMiICYmCisJaGVhZCAtbiAyICIkRCIvYnVuZGxlMSB8IGdyZXAgIl4tWzAtOWEtZl1cezQwXH0gIiAmJgorCWhlYWQgLW4gMyAiJEQiL2J1bmRsZTEgfCBncmVwICJeWzAtOWEtZl1cezQwXH0gIiAmJgorCWhlYWQgLW4gNCAiJEQiL2J1bmRsZTEgfCBncmVwICJeJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGJ1bmRsZSAyJyAnCisJY2QgIiREIiAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZTIgbWFzdGVyfjIuLm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmJ1bmRsZSAxJyAnCisJY2QgIiREL2J1bmRsZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc29tZS1icmFuY2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggIiREL2J1bmRsZTEiIG1hc3RlcjptYXN0ZXIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgMSBoYXMgb25seSAzIGZpbGVzICcgJworCWNkICIkRCIgJiYKKwljb252ZXJ0X2J1bmRsZV90b19wYWNrIDxidW5kbGUxID5idW5kbGUucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIGJ1bmRsZS5wYWNrICYmCisJdGVzdF9idW5kbGVfb2JqZWN0X2NvdW50IGJ1bmRsZS5wYWNrIDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5idW5kbGUgMicgJworCWNkICIkRC9idW5kbGUiICYmCisJZ2l0IGZldGNoIC4uL2J1bmRsZTIgbWFzdGVyOm1hc3RlciAmJgorCXRlc3QgInRpcCIgPSAiJChnaXQgbG9nIC0xIC0tcHJldHR5PW9uZWxpbmUgbWFzdGVyIHwgY3V0IC1iNDItKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVuZGxlIGRvZXMgbm90IHByZXJlcXVpc2l0ZSBvYmplY3RzJyAnCisJY2QgIiREIiAmJgorCXRvdWNoIGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gYWRkLmZpbGUyIGZpbGUyICYmCisJZ2l0IGJ1bmRsZSBjcmVhdGUgYnVuZGxlMyAtMSBIRUFEICYmCisJY29udmVydF9idW5kbGVfdG9fcGFjayA8YnVuZGxlMyA+YnVuZGxlLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayBidW5kbGUucGFjayAmJgorCXRlc3RfYnVuZGxlX29iamVjdF9jb3VudCBidW5kbGUucGFjayAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBzaG91bGQgYmUgYWJsZSB0byBjcmVhdGUgYSBmdWxsIGhpc3RvcnknICcKKworCWNkICIkRCIgJiYKKwlnaXQgdGFnIC1hIC1tICcxLjAnIHYxLjAgbWFzdGVyICYmCisJZ2l0IGJ1bmRsZSBjcmVhdGUgYnVuZGxlNCB2MS4wCisKKycKKworISByc3luYyAtLWhlbHAgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsICYmCitzYXkgJ1NraXBwaW5nIHJzeW5jIHRlc3RzIGJlY2F1c2UgcnN5bmMgd2FzIG5vdCBmb3VuZCcgfHwgewordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdmlhIHJzeW5jJyAnCisJZ2l0IHBhY2stcmVmcyAmJgorCW1rZGlyIHJzeW5jZWQgJiYKKwkoY2QgcnN5bmNlZCAmJgorCSBnaXQgaW5pdCAtLWJhcmUgJiYKKwkgZ2l0IGZldGNoICJyc3luYzokKHB3ZCkvLi4vLmdpdCIgbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyICYmCisJIGdpdCBnYyAtLXBydW5lICYmCisJIHRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSAkKGNkIC4uICYmIGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCSBnaXQgZnNjayAtLWZ1bGwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdmlhIHJzeW5jJyAnCisJbWtkaXIgcnN5bmNlZDIgJiYKKwkoY2QgcnN5bmNlZDIgJiYKKwkgZ2l0IGluaXQpICYmCisJKGNkIHJzeW5jZWQgJiYKKwkgZ2l0IHB1c2ggInJzeW5jOiQocHdkKS8uLi9yc3luY2VkMi8uZ2l0IiBtYXN0ZXIpICYmCisJKGNkIHJzeW5jZWQyICYmCisJIGdpdCBnYyAtLXBydW5lICYmCisJIHRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSAkKGNkIC4uICYmIGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCSBnaXQgZnNjayAtLWZ1bGwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdmlhIHJzeW5jJyAnCisJbWtkaXIgcnN5bmNlZDMgJiYKKwkoY2QgcnN5bmNlZDMgJiYKKwkgZ2l0IGluaXQpICYmCisJZ2l0IHB1c2ggLS1hbGwgInJzeW5jOiQocHdkKS9yc3luY2VkMy8uZ2l0IiAmJgorCShjZCByc3luY2VkMyAmJgorCSB0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpID0gJChjZCAuLiAmJiBnaXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkgZ2l0IGZzY2sgLS1mdWxsKQorJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGEgbm9uLWFwcGx5aW5nIGJyYW5jaC48bmFtZT4ubWVyZ2UnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHlldGkgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9iaWdmb290ICYmCisJZ2l0IGNvbmZpZyByZW1vdGUuYmx1Yi51cmwgb25lICYmCisJZ2l0IGNvbmZpZyByZW1vdGUuYmx1Yi5mZXRjaCAicmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vbmUvKiIgJiYKKwlnaXQgZmV0Y2ggYmx1YgorJworCisjIFVSTCBzdXBwbGllZCB0byBmZXRjaCBkb2VzIG5vdCBtYXRjaCB0aGUgdXJsIG9mIHRoZSBjb25maWd1cmVkIGJyYW5jaCdzIHJlbW90ZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSBHSVQgVVJMIHdpdGggYSBub24tYXBwbHlpbmcgYnJhbmNoLjxuYW1lPi5tZXJnZSBbMV0nICcKKwlvbmVfaGVhZD0kKGNkIG9uZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGhpc19oZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIEZFVENIX0hFQUQgJiYKKwlnaXQgZmV0Y2ggb25lICYmCisJdGVzdCAkb25lX2hlYWQgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEZFVENIX0hFQUQpIiAmJgorCXRlc3QgJHRoaXNfaGVhZCA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiCisnCisKKyMgVVJMIHN1cHBsaWVkIHRvIGZldGNoIG1hdGNoZXMgdGhlIHVybCBvZiB0aGUgY29uZmlndXJlZCBicmFuY2gncyByZW1vdGUgYW5kCisjIHRoZSBtZXJnZSBzcGVjIG1hdGNoZXMgdGhlIGJyYW5jaCB0aGUgcmVtb3RlIEhFQUQgcG9pbnRzIHRvCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmcm9tIEdJVCBVUkwgd2l0aCBhIG5vbi1hcHBseWluZyBicmFuY2guPG5hbWU+Lm1lcmdlIFsyXScgJworCW9uZV9yZWY9JChjZCBvbmUgJiYgZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgYmx1YiAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSAiJG9uZV9yZWYiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgRkVUQ0hfSEVBRCAmJgorCWdpdCBmZXRjaCBvbmUgJiYKKwl0ZXN0ICRvbmVfaGVhZCA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgRkVUQ0hfSEVBRCkiICYmCisJdGVzdCAkdGhpc19oZWFkID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIKKycKKworIyBVUkwgc3VwcGxpZWQgdG8gZmV0Y2ggbWF0Y2hlcyB0aGUgdXJsIG9mIHRoZSBjb25maWd1cmVkIGJyYW5jaCdzIHJlbW90ZSwgYnV0CisjIHRoZSBtZXJnZSBzcGVjIGRvZXMgbm90IG1hdGNoIHRoZSBicmFuY2ggdGhlIHJlbW90ZSBIRUFEIHBvaW50cyB0bwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSBHSVQgVVJMIHdpdGggYSBub24tYXBwbHlpbmcgYnJhbmNoLjxuYW1lPi5tZXJnZSBbM10nICcKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgIiR7b25lX3JlZn1fbm90IiAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIEZFVENIX0hFQUQgJiYKKwlnaXQgZmV0Y2ggb25lICYmCisJdGVzdCAkb25lX2hlYWQgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEZFVENIX0hFQUQpIiAmJgorCXRlc3QgJHRoaXNfaGVhZCA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiCisnCisKKyMgdGhlIHN0cmFuZ2UgbmFtZSBpczogYVwhJ2IKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3Rpbmcgb2YgYSBzdHJhbmdlbHkgbmFtZWQgcmVwbycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAiYVxcISdcJydiIiA+IHJlc3VsdCAyPiYxICYmCisJY2F0IHJlc3VsdCAmJgorCWdyZXAgImZhdGFsOiAnXCcnYVxcXFwhJ1wnJ2InXCcnIiByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVuZGxlIHNob3VsZCByZWNvcmQgSEVBRCBjb3JyZWN0bHknICcKKworCWNkICIkRCIgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBidW5kbGU1IEhFQUQgbWFzdGVyICYmCisJZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIGJ1bmRsZTUgPmFjdHVhbCAmJgorCWZvciBoIGluIEhFQUQgcmVmcy9oZWFkcy9tYXN0ZXIKKwlkbworCQllY2hvICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJGgpICRoIgorCWRvbmUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCBmZXRjaCBzaG91bGQgbm90IHVwZGF0ZSB0cmFja2luZycgJworCisJY2QgIiREIiAmJgorCWdpdCBicmFuY2ggLWYgc2lkZSAmJgorCSgKKwkJY2QgdGhyZWUgJiYKKwkJbz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gbWFzdGVyICYmCisJCW49JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICIkbyIgPSAiJG4iICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCBwdWxsIHNob3VsZCBub3QgdXBkYXRlIHRyYWNraW5nJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlICYmCisJKAorCQljZCB0aHJlZSAmJgorCQlvPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJZ2l0IHB1bGwgb3JpZ2luIG1hc3RlciAmJgorCQluPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJdGVzdCAiJG8iID0gIiRuIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlndXJlZCBmZXRjaCB1cGRhdGVzIHRyYWNraW5nJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlICYmCisJKAorCQljZCB0aHJlZSAmJgorCQlvPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJZ2l0IGZldGNoIG9yaWdpbiAmJgorCQluPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJdGVzdCAiJG8iICE9ICIkbiIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2hpbmcgbm9uZXhpc3RlbnQgYnJhbmNoIGJ5IG1pc3Rha2Ugc2hvdWxkIG5vdCBzZWd2JyAnCisKKwljZCAiJEQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggc2V2ZW4gbm86bm8KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHRhZyBmb2xsb3dpbmcgZmV0Y2hlcyBtaW5pbXVtJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNsb25lIC5naXQgZm9sbG93ICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCSgKKwkJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNworCQlkbworCQkJZWNobyAkaSA+PmZpbGUgJiYKKwkJCWdpdCBjb21taXQgLW0gJGkgLWEgJiYKKwkJCWdpdCB0YWcgLWEgLW0gJGkgZXhjZXNzLSRpIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkoCisJCWNkIGZvbGxvdyAmJgorCQlnaXQgZmV0Y2gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSB0byBmZXRjaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCcgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4gc2lkZTptYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIC0tdXBkYXRlLWhlYWQtb2snICcKKworCWdpdCBmZXRjaCAtLXVwZGF0ZS1oZWFkLW9rIC4gc2lkZTptYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLWRyeS1ydW4nICcKKworCXJtIC1mIC5naXQvRkVUQ0hfSEVBRCAmJgorCWdpdCBmZXRjaCAtLWRyeS1ydW4gLiAmJgorCSEgdGVzdCAtZiAuZ2l0L0ZFVENIX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2hvdWxkIGJlIGFibGUgdG8gZmV0Y2ggd2l0aCBkdXBsaWNhdGUgcmVmc3BlY3MiICcKKwlta2RpciBkdXBzICYmCisJKAorCQljZCBkdXBzICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgdGhyZWUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudGhyZWUudXJsIC4uL3RocmVlLy5naXQgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudGhyZWUuZmV0Y2ggK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyogJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudGhyZWUuZmV0Y2ggK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyogJiYKKwkJZ2l0IGZldGNoIHRocmVlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgYm91bmRhcnkgY29tbWl0cyBhcmUgZXhjbHVkZWQnICcKKwl0ZXN0X2NvbW1pdCBiYXNlICYmCisJdGVzdF9jb21taXQgb25lc2lkZSAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCXRlc3RfY29tbWl0IG90aGVyc2lkZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2Ugb3RoZXJzaWRlICYmCisJYWQ9JChnaXQgbG9nIC0tbm8td2FsayAtLWZvcm1hdD0lYWQgSEVBRCkgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSB0d29zaWRlLWJvdW5kYXJ5LmJkbCBtYXN0ZXIgLS1zaW5jZT0iJGFkIiAmJgorCWNvbnZlcnRfYnVuZGxlX3RvX3BhY2sgPHR3b3NpZGUtYm91bmRhcnkuYmRsID50d29zaWRlLWJvdW5kYXJ5LnBhY2sgJiYKKwlwYWNrPSQoZ2l0IGluZGV4LXBhY2sgLS1maXgtdGhpbiAtLXN0ZGluIDx0d29zaWRlLWJvdW5kYXJ5LnBhY2spICYmCisJdGVzdF9idW5kbGVfb2JqZWN0X2NvdW50IC5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrIyNwYWNrCX0ucGFjayAzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxMS1yZWZzcGVjLnNoIGIvdC90NTUxMS1yZWZzcGVjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyODkzMjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTExLXJlZnNwZWMuc2gKQEAgLTAsMCArMSw4NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlZnNwZWMgcGFyc2luZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfcmVmc3BlYyAoKSB7CisKKwlraW5kPSQxIHJlZnNwZWM9JDIgZXhwZWN0PSQzCisJZ2l0IGNvbmZpZyByZW1vdGUuZnJvdHoudXJsICIuIiAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiByZW1vdGUuZnJvdHogJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5mcm90ei51cmwgIi4iICYmCisJZ2l0IGNvbmZpZyAicmVtb3RlLmZyb3R6LiRraW5kIiAiJHJlZnNwZWMiICYmCisJaWYgdGVzdCAiJGV4cGVjdCIgIT0gaW52YWxpZAorCXRoZW4KKwkJdGl0bGU9IiRraW5kICRyZWZzcGVjIgorCQl0ZXN0PSdnaXQgbHMtcmVtb3RlIGZyb3R6JworCWVsc2UKKwkJdGl0bGU9IiRraW5kICRyZWZzcGVjIChpbnZhbGlkKSIKKwkJdGVzdD0ndGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLXJlbW90ZSBmcm90eicKKwlmaQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiR0aXRsZSIgIiR0ZXN0IgorfQorCit0ZXN0X3JlZnNwZWMgcHVzaCAnJwkJCQkJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBwdXNoICc6JwordGVzdF9yZWZzcGVjIHB1c2ggJzo6JwkJCQkJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBwdXNoICcrOicKKwordGVzdF9yZWZzcGVjIGZldGNoICcnCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJzonCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJzo6JwkJCQkJCWludmFsaWQKKwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZnJvdHovKicKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2Zyb3R6JwkJaW52YWxpZAordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHM6cmVmcy9yZW1vdGVzL2Zyb3R6LyonCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL2Zyb3R6L3h5enp5JworCisKKyMgVGhlc2UgaGF2ZSBpbnZhbGlkIExIUywgYnV0IHdlIGRvIG5vdCBoYXZlIGEgZm9ybWFsICJ2YWxpZCBzaGEtMQorIyBleHByZXNzaW9uIHN5bnRheCBjaGVja2VyIiBzbyB0aGV5IGFyZSBub3QgY2hlY2tlZCB3aXRoIHRoZSBjdXJyZW50CisjIGNvZGUuICBUaGV5IHdpbGwgYmUgY2F1Z2h0IGRvd25zdHJlYW0gYW55d2F5LCBidXQgd2UgbWF5IHdhbnQgdG8KKyMgaGF2ZSB0aWdodGVyIGNoZWNrIGxhdGVyLi4uCisKKzogdGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvbWFzdGVyOjpyZWZzL3JlbW90ZXMvZnJvdHoveHl6enknCWludmFsaWQKKzogdGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvbWFzdGUgOnJlZnMvcmVtb3Rlcy9mcm90ei94eXp6eScJaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZnJvdHovKicKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9mcm90eicJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkczpyZWZzL3JlbW90ZXMvZnJvdHovKicJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL2Zyb3R6L3h5enp5JwordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzL21hc3Rlcjo6cmVmcy9yZW1vdGVzL2Zyb3R6L3h5enp5JwlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvbWFzdGUgOnJlZnMvcmVtb3Rlcy9mcm90ei94eXp6eScJaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgcHVzaCAnbWFzdGVyfjE6cmVmcy9yZW1vdGVzL2Zyb3R6L2JhY2t1cCcKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnbWFzdGVyfjE6cmVmcy9yZW1vdGVzL2Zyb3R6L2JhY2t1cCcJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBwdXNoICdIRUFEfjQ6cmVmcy9yZW1vdGVzL2Zyb3R6L25ldycKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnSEVBRH40OnJlZnMvcmVtb3Rlcy9mcm90ei9uZXcnCQlpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBwdXNoICdIRUFEJwordGVzdF9yZWZzcGVjIGZldGNoICdIRUFEJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvIG5pdGZvbCcJCQkJaW52YWxpZAordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzLyBuaXRmb2wnCQkJCWludmFsaWQKKwordGVzdF9yZWZzcGVjIHB1c2ggJ0hFQUQ6JwkJCQkJaW52YWxpZAordGVzdF9yZWZzcGVjIGZldGNoICdIRUFEOicKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyBuaXRmb2w6JwkJCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvIG5pdGZvbDonCQkJaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgcHVzaCAnOnJlZnMvcmVtb3Rlcy9mcm90ei9kZWxldGVtZScKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnOnJlZnMvcmVtb3Rlcy9mcm90ei9IRUFELXRvLW1lJwordGVzdF9yZWZzcGVjIHB1c2ggJzpyZWZzL3JlbW90ZXMvZnJvdHovZGVsZXRlIG1lJwkJaW52YWxpZAordGVzdF9yZWZzcGVjIGZldGNoICc6cmVmcy9yZW1vdGVzL2Zyb3R6L0hFQUQgdG8gbWUnCQlpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy8qL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qLWJsYWgnIGludmFsaWQKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyovZm9yLWxpbnVzOnJlZnMvcmVtb3Rlcy9taW5lLyotYmxhaCcgaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJyBpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcyovZm9yLWxpbnVzOnJlZnMvcmVtb3Rlcy9taW5lLyonIGludmFsaWQKKwordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzLyovKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicgaW52YWxpZAordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKi8qL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJyBpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy8qL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTEyLWxzLXJlbW90ZS5zaCBiL3QvdDU1MTItbHMtcmVtb3RlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxNmU1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTEyLWxzLXJlbW90ZS5zaApAQCAtMCwwICsxLDEyOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBscy1yZW1vdGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgbWFyayAmJgorCWdpdCBzaG93LXJlZiAtLXRhZ3MgLWQgfCBzZWQgLWUgInMvIC8JLyIgPmV4cGVjdGVkLnRhZyAmJgorCSgKKwkJZWNobyAiJChnaXQgcmV2LXBhcnNlIEhFQUQpCUhFQUQiCisJCWdpdCBzaG93LXJlZiAtZAl8IHNlZCAtZSAicy8gLwkvIgorCSkgPmV4cGVjdGVkLmFsbCAmJgorCisJZ2l0IHJlbW90ZSBhZGQgc2VsZiAiJChwd2QpLy5naXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSAtLXRhZ3MgLmdpdCcgJworCWdpdCBscy1yZW1vdGUgLS10YWdzIC5naXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnRhZyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtcmVtb3RlIC5naXQnICcKKwlnaXQgbHMtcmVtb3RlIC5naXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmFsbCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtcmVtb3RlIC0tdGFncyBzZWxmJyAnCisJZ2l0IGxzLXJlbW90ZSAtLXRhZ3Mgc2VsZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudGFnIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgc2VsZicgJworCWdpdCBscy1yZW1vdGUgc2VsZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWVzIHdoZW4gbm8gcmVtb3RlIHNwZWNpZmllZCBhbmQgbm8gZGVmYXVsdCByZW1vdGVzIGZvdW5kJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLXJlbW90ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgIm9yaWdpbiIgd2hlbiBubyByZW1vdGUgc3BlY2lmaWVkJyAnCisJVVJMPSIkKHB3ZCkvLmdpdCIgJiYKKwllY2hvICJGcm9tICRVUkwiID5leHBfZXJyICYmCisKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gIiRVUkwiICYmCisJZ2l0IGxzLXJlbW90ZSAyPmFjdHVhbF9lcnIgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwX2VyciBhY3R1YWxfZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdXBwcmVzcyAiRnJvbSA8dXJsPiIgd2l0aCAtcScgJworCWdpdCBscy1yZW1vdGUgLXEgMj5hY3R1YWxfZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF9jbXAgZXhwX2VyciBhY3R1YWxfZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBicmFuY2guPG5hbWU+LnJlbW90ZSBpZiBwb3NzaWJsZScgJworCSMKKwkjIFRlc3QgdGhhdCB3ZSBhcmUgaW5kZWVkIHVzaW5nIGJyYW5jaC48bmFtZT4ucmVtb3RlLCBub3QgIm9yaWdpbiIsIGV2ZW4KKwkjIHRob3VnaCB0aGUgIm9yaWdpbiIgcmVtb3RlIGhhcyBiZWVuIHNldC4KKwkjCisKKwkjIHNldHVwIGEgbmV3IHJlbW90ZSB0byBkaWZmZXJlbnRpYXRlIGZyb20gIm9yaWdpbiIKKwlnaXQgY2xvbmUgLiBvdGhlci5naXQgJiYKKwkoCisJCWNkIG90aGVyLmdpdCAmJgorCQllY2hvICIkKGdpdCByZXYtcGFyc2UgSEVBRCkJSEVBRCIKKwkJZ2l0IHNob3ctcmVmCXwgc2VkIC1lICJzLyAvCS8iCisJKSA+ZXhwICYmCisKKwlVUkw9Im90aGVyLmdpdCIgJiYKKwllY2hvICJGcm9tICRVUkwiID5leHBfZXJyICYmCisKKwlnaXQgcmVtb3RlIGFkZCBvdGhlciAkVVJMICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBvdGhlciAmJgorCisJZ2l0IGxzLXJlbW90ZSAyPmFjdHVhbF9lcnIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cF9lcnIgYWN0dWFsX2VyciAmJgorCXRlc3RfY21wIGV4cCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZnVzZXMgcGF0dGVybiBhcyByZW1vdGUgd2hlbiBubyByZW1vdGUgc3BlY2lmaWVkJyAnCisJY2F0ID5leHAgPDwtXEVPRiAmJgorCWZhdGFsOiAnXCcncmVmcyptYXN0ZXInXCcnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIGdpdCByZXBvc2l0b3J5CisJZmF0YWw6IENvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuCisKKwlQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHMKKwlhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLgorCUVPRgorCSMKKwkjIERvIG5vdCBleHBlY3QgImdpdCBscy1yZW1vdGUgPHBhdHRlcm4+IiB0byB3b3JrOyBscy1yZW1vdGUgbmVlZHMKKwkjIDxyZW1vdGU+IGlmIHlvdSB3YW50IHRvIGZlZWQgPHBhdHRlcm4+LCBqdXN0IGxpa2UgeW91IGNhbm5vdCBzYXkKKwkjIGZldGNoIDxicmFuY2g+LgorCSMgV2UgY291bGQganVzdCBhcyBlYXNpbHkgaGF2ZSB1c2VkICJtYXN0ZXIiOyB0aGUgIioiIGVtcGhhc2l6ZXMgaXRzCisJIyByb2xlIGFzIGEgcGF0dGVybi4KKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtcmVtb3RlIHJlZnMqbWFzdGVyID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfY21wIGV4cCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGllIHdpdGggbm9uLTIgZm9yIHdyb25nIHJlcG9zaXRvcnkgZXZlbiB3aXRoIC0tZXhpdC1jb2RlJyAnCisJZ2l0IGxzLXJlbW90ZSAtLWV4aXQtY29kZSAuL25vLXN1Y2gtcmVwb3NpdG9yeSA7IyBub3QgJiYKKwlzdGF0dXM9JD8gJiYKKwl0ZXN0ICRzdGF0dXMgIT0gMiAmJiB0ZXN0ICRzdGF0dXMgIT0gMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXBvcnQgc3VjY2VzcyBldmVuIHdoZW4gbm90aGluZyBtYXRjaGVzJyAnCisJZ2l0IGxzLXJlbW90ZSBvdGhlci5naXQgInJlZnMvbnNuLyoiID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXBvcnQgbm8tbWF0Y2ggd2l0aCAtLWV4aXQtY29kZScgJworCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgbHMtcmVtb3RlIC0tZXhpdC1jb2RlIG90aGVyLmdpdCAicmVmcy9uc24vKiIgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlcG9ydCBtYXRjaCB3aXRoIC0tZXhpdC1jb2RlJyAnCisJZ2l0IGxzLXJlbW90ZSAtLWV4aXQtY29kZSBvdGhlci5naXQgInJlZnMvdGFncy8qIiA+YWN0dWFsICYmCisJZ2l0IGxzLXJlbW90ZSAuIHRhZ3MvbWFyayA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTMtZmV0Y2gtdHJhY2suc2ggYi90L3Q1NTEzLWZldGNoLXRyYWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1ZDFlMDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTEzLWZldGNoLXRyYWNrLnNoCkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaCBmb2xsb3dzIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+ZmlsZSAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCWdpdCBicmFuY2ggYi0wICYmCisJZ2l0IGJyYW5jaCBiMSAmJgorCWdpdCBicmFuY2ggYi9vbmUgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIG90aGVyICYmCisJKAorCQljZCBvdGhlciAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4uICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5mZXRjaCAiK3JlZnMvaGVhZHMvYi8qOnJlZnMvcmVtb3Rlcy9iLyoiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGZldGNoICcKKwkoCisJCWNkIG90aGVyICYmIGdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJdGVzdCAiJChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIikiID0gcmVmcy9yZW1vdGVzL2Ivb25lCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTQtZmV0Y2gtbXVsdGlwbGUuc2ggYi90L3Q1NTE0LWZldGNoLW11bHRpcGxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmODE0MDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE0LWZldGNoLW11bHRpcGxlLnNoCkBAIC0wLDAgKzEsMTg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2ggLS1hbGwgd29ya3MgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKworc2V0dXBfcmVwb3NpdG9yeSAoKSB7CisJbWtkaXIgIiQxIiAmJiAoCisJY2QgIiQxIiAmJgorCWdpdCBpbml0ICYmCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJPmVsaWYgJiYKKwlnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTZWNvbmQiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJc2V0dXBfcmVwb3NpdG9yeSBvbmUgJiYKKwlzZXR1cF9yZXBvc2l0b3J5IHR3byAmJgorCSgKKwkJY2QgdHdvICYmIGdpdCBicmFuY2ggYW5vdGhlcgorCSkgJiYKKwlnaXQgY2xvbmUgLS1taXJyb3IgdHdvIHRocmVlICYmCisJZ2l0IGNsb25lIG9uZSB0ZXN0CisnCisKK2NhdCA+IHRlc3QvZXhwZWN0IDw8IEVPRgorICBvbmUvbWFzdGVyCisgIG9uZS9zaWRlCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL21hc3RlcgorICBvcmlnaW4vc2lkZQorICB0aHJlZS9hbm90aGVyCisgIHRocmVlL21hc3RlcgorICB0aHJlZS9zaWRlCisgIHR3by9hbm90aGVyCisgIHR3by9tYXN0ZXIKKyAgdHdvL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1hbGwnICcKKwkoY2QgdGVzdCAmJgorCSBnaXQgcmVtb3RlIGFkZCBvbmUgLi4vb25lICYmCisJIGdpdCByZW1vdGUgYWRkIHR3byAuLi90d28gJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdGhyZWUgLi4vdGhyZWUgJiYKKwkgZ2l0IGZldGNoIC0tYWxsICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tYWxsIHNob3VsZCBjb250aW51ZSBpZiBhIHJlbW90ZSBoYXMgZXJyb3JzJyAnCisJKGdpdCBjbG9uZSBvbmUgdGVzdDIgJiYKKwkgY2QgdGVzdDIgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgYmFkIC4uL25vbi1leGlzdGluZyAmJgorCSBnaXQgcmVtb3RlIGFkZCBvbmUgLi4vb25lICYmCisJIGdpdCByZW1vdGUgYWRkIHR3byAuLi90d28gJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdGhyZWUgLi4vdGhyZWUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC0tYWxsICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgLi4vdGVzdC9leHBlY3Qgb3V0cHV0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1hbGwgZG9lcyBub3QgYWxsb3cgbm9uLW9wdGlvbiBhcmd1bWVudHMnICcKKwkoY2QgdGVzdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1hbGwgb3JpZ2luICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLWFsbCBvcmlnaW4gbWFzdGVyKQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL21hc3RlcgorICBvcmlnaW4vc2lkZQorICB0aHJlZS9hbm90aGVyCisgIHRocmVlL21hc3RlcgorICB0aHJlZS9zaWRlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tbXVsdGlwbGUgKGJ1dCBvbmx5IG9uZSByZW1vdGUpJyAnCisJKGdpdCBjbG9uZSBvbmUgdGVzdDMgJiYKKwkgY2QgdGVzdDMgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdGhyZWUgLi4vdGhyZWUgJiYKKwkgZ2l0IGZldGNoIC0tbXVsdGlwbGUgdGhyZWUgJiYKKwkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgorCSB0ZXN0X2NtcCAuLi9leHBlY3Qgb3V0cHV0KQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisgIG9uZS9tYXN0ZXIKKyAgb25lL3NpZGUKKyAgdHdvL2Fub3RoZXIKKyAgdHdvL21hc3RlcgorICB0d28vc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLW11bHRpcGxlICh0d28gcmVtb3RlcyknICcKKwkoZ2l0IGNsb25lIG9uZSB0ZXN0NCAmJgorCSBjZCB0ZXN0NCAmJgorCSBnaXQgcmVtb3RlIHJtIG9yaWdpbiAmJgorCSBnaXQgcmVtb3RlIGFkZCBvbmUgLi4vb25lICYmCisJIGdpdCByZW1vdGUgYWRkIHR3byAuLi90d28gJiYKKwkgZ2l0IGZldGNoIC0tbXVsdGlwbGUgb25lIHR3byAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIC4uL2V4cGVjdCBvdXRwdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLW11bHRpcGxlIChiYWQgcmVtb3RlIG5hbWVzKScgJworCShjZCB0ZXN0NCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1tdWx0aXBsZSBmb3VyKQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCAoc2tpcEZldGNoQWxsKScgJworCShjZCB0ZXN0NCAmJgorCSBmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJIGRvCisJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgYnJlYWsKKwkgZG9uZSAmJgorCSBnaXQgcmVtb3RlIGFkZCB0aHJlZSAuLi90aHJlZSAmJgorCSBnaXQgY29uZmlnIHJlbW90ZS50aHJlZS5za2lwRmV0Y2hBbGwgdHJ1ZSAmJgorCSBnaXQgZmV0Y2ggLS1hbGwgJiYKKwkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgorCSB0ZXN0X2NtcCAuLi9leHBlY3Qgb3V0cHV0KQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisgIG9uZS9tYXN0ZXIKKyAgb25lL3NpZGUKKyAgdGhyZWUvYW5vdGhlcgorICB0aHJlZS9tYXN0ZXIKKyAgdGhyZWUvc2lkZQorICB0d28vYW5vdGhlcgorICB0d28vbWFzdGVyCisgIHR3by9zaWRlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tbXVsdGlwbGUgKGlnbm9yaW5nIHNraXBGZXRjaEFsbCknICcKKwkoY2QgdGVzdDQgJiYKKwkgZm9yIGIgaW4gJChnaXQgYnJhbmNoIC1yKQorCSBkbworCQlnaXQgYnJhbmNoIC1yIC1kICRiIHx8IGJyZWFrCisJIGRvbmUgJiYKKwkgZ2l0IGZldGNoIC0tbXVsdGlwbGUgb25lIHR3byB0aHJlZSAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIC4uL2V4cGVjdCBvdXRwdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCAtLW5vLXRhZ3MnICcKKwk+ZXhwZWN0ICYmCisJZ2l0IGNsb25lIG9uZSB0ZXN0NSAmJgorCWdpdCBjbG9uZSB0ZXN0NSB0ZXN0NiAmJgorCShjZCB0ZXN0NSAmJiBnaXQgdGFnIHRlc3QtdGFnKSAmJgorCSgKKwkJY2QgdGVzdDYgJiYKKwkJZ2l0IGZldGNoIC0tYWxsIC0tbm8tdGFncyAmJgorCQlnaXQgdGFnID5vdXRwdXQKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IHRlc3Q2L291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1hbGwgLS10YWdzJyAnCisJZWNobyB0ZXN0LXRhZyA+ZXhwZWN0ICYmCisJZ2l0IGNsb25lIG9uZSB0ZXN0NyAmJgorCWdpdCBjbG9uZSB0ZXN0NyB0ZXN0OCAmJgorCSgKKwkJY2QgdGVzdDcgJiYKKwkJdGVzdF9jb21taXQgdGVzdC10YWcgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkgJiYKKwkoCisJCWNkIHRlc3Q4ICYmCisJCWdpdCBmZXRjaCAtLWFsbCAtLXRhZ3MgJiYKKwkJZ2l0IHRhZyA+b3V0cHV0CisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCB0ZXN0OC9vdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTE1LWZldGNoLW1lcmdlLWxvZ2ljLnNoIGIvdC90NTUxNS1mZXRjaC1tZXJnZS1sb2dpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYmI5MjdkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS1mZXRjaC1tZXJnZS1sb2dpYy5zaApAQCAtMCwwICsxLDE3NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBTYW50aSBCw6lqYXIsIGJhc2VkIG9uIHQ0MDEzIGJ5IEp1bmlvIEMgSGFtYW5vCisjCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J01lcmdlIGxvZ2ljIGluIGZldGNoJworCisuIC4vdGVzdC1saWIuc2gKKworTEY9JworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDA6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAwOjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwllY2hvID5maWxlIG9yaWdpbmFsICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBPbmUgJiYKKwlnaXQgdGFnIHRhZy1vbmUgJiYKKwlnaXQgdGFnIHRhZy1vbmUtdHJlZSBIRUFEXnt0cmVlfSAmJgorCWdpdCBicmFuY2ggb25lICYmCisKKwllY2hvIHR3byA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBUd28gJiYKKwlnaXQgdGFnIC1hIC1tICJUYWcgVHdvIiB0YWctdHdvICYmCisJZ2l0IGJyYW5jaCB0d28gJiYKKworCWVjaG8gdGhyZWUgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gVGhyZWUgJiYKKwlnaXQgdGFnIC1hIC1tICJUYWcgVGhyZWUiIHRhZy10aHJlZSAmJgorCWdpdCB0YWcgLWEgLW0gIlRhZyBUaHJlZSBmaWxlIiB0YWctdGhyZWUtZmlsZSBIRUFEXnt0cmVlfTpmaWxlICYmCisJZ2l0IGJyYW5jaCB0aHJlZSAmJgorCisJZWNobyBtYXN0ZXIgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gTWFzdGVyICYmCisJZ2l0IHRhZyAtYSAtbSAiVGFnIE1hc3RlciIgdGFnLW1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IHRocmVlICYmCisKKwlnaXQgY2xvbmUgLiBjbG9uZWQgJiYKKwljZCBjbG9uZWQgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4uLy5naXQvICYmCisKKwlnaXQgY29uZmlnIHJlbW90ZS5jb25maWctZXhwbGljaXQudXJsIC4uLy5naXQvICYmCisJZ2l0IGNvbmZpZyByZW1vdGUuY29uZmlnLWV4cGxpY2l0LmZldGNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlbW90ZXMvcmVtL21hc3RlciAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLmNvbmZpZy1leHBsaWNpdC5mZXRjaCByZWZzL2hlYWRzL29uZTpyZW1vdGVzL3JlbS9vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5jb25maWctZXhwbGljaXQuZmV0Y2ggdHdvOnJlbW90ZXMvcmVtL3R3byAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLmNvbmZpZy1leHBsaWNpdC5mZXRjaCByZWZzL2hlYWRzL3RocmVlOnJlbW90ZXMvcmVtL3RocmVlICYmCisJcmVtb3Rlcz0iY29uZmlnLWV4cGxpY2l0IiAmJgorCisJZ2l0IGNvbmZpZyByZW1vdGUuY29uZmlnLWdsb2IudXJsIC4uLy5naXQvICYmCisJZ2l0IGNvbmZpZyByZW1vdGUuY29uZmlnLWdsb2IuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9yZW0vKiAmJgorCXJlbW90ZXM9IiRyZW1vdGVzIGNvbmZpZy1nbG9iIiAmJgorCisJbWtkaXIgLXAgLmdpdC9yZW1vdGVzICYmCisJeworCQllY2hvICJVUkw6IC4uLy5naXQvIgorCQllY2hvICJQdWxsOiByZWZzL2hlYWRzL21hc3RlcjpyZW1vdGVzL3JlbS9tYXN0ZXIiCisJCWVjaG8gIlB1bGw6IHJlZnMvaGVhZHMvb25lOnJlbW90ZXMvcmVtL29uZSIKKwkJZWNobyAiUHVsbDogdHdvOnJlbW90ZXMvcmVtL3R3byIKKwkJZWNobyAiUHVsbDogcmVmcy9oZWFkcy90aHJlZTpyZW1vdGVzL3JlbS90aHJlZSIKKwl9ID4uZ2l0L3JlbW90ZXMvcmVtb3RlLWV4cGxpY2l0ICYmCisJcmVtb3Rlcz0iJHJlbW90ZXMgcmVtb3RlLWV4cGxpY2l0IiAmJgorCisJeworCQllY2hvICJVUkw6IC4uLy5naXQvIgorCQllY2hvICJQdWxsOiByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3JlbS8qIgorCX0gPi5naXQvcmVtb3Rlcy9yZW1vdGUtZ2xvYiAmJgorCXJlbW90ZXM9IiRyZW1vdGVzIHJlbW90ZS1nbG9iIiAmJgorCisJbWtkaXIgLXAgLmdpdC9icmFuY2hlcyAmJgorCWVjaG8gIi4uLy5naXQiID4gLmdpdC9icmFuY2hlcy9icmFuY2hlcy1kZWZhdWx0ICYmCisJcmVtb3Rlcz0iJHJlbW90ZXMgYnJhbmNoZXMtZGVmYXVsdCIgJiYKKworCWVjaG8gIi4uLy5naXQjb25lIiA+IC5naXQvYnJhbmNoZXMvYnJhbmNoZXMtb25lICYmCisJcmVtb3Rlcz0iJHJlbW90ZXMgYnJhbmNoZXMtb25lIiAmJgorCisJZm9yIHJlbW90ZSBpbiAkcmVtb3RlcyA7IGRvCisJCWdpdCBjb25maWcgYnJhbmNoLmJyLSRyZW1vdGUucmVtb3RlICRyZW1vdGUgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2guYnItJHJlbW90ZS1tZXJnZS5yZW1vdGUgJHJlbW90ZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5ici0kcmVtb3RlLW1lcmdlLm1lcmdlIHJlZnMvaGVhZHMvdGhyZWUgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2guYnItJHJlbW90ZS1vY3RvcHVzLnJlbW90ZSAkcmVtb3RlICYmCisJCWdpdCBjb25maWcgYnJhbmNoLmJyLSRyZW1vdGUtb2N0b3B1cy5tZXJnZSByZWZzL2hlYWRzL29uZSAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGJyYW5jaC5ici0kcmVtb3RlLW9jdG9wdXMubWVyZ2UgdHdvCisJZG9uZQorJworCisjIE1lcmdlIGxvZ2ljIGRlcGVuZHMgb24gYnJhbmNoIHByb3BlcnRpZXMgYW5kIFB1bGw6IG9yIC5mZXRjaCBsaW5lcworZm9yIHJlbW90ZSBpbiAkcmVtb3RlcyA7IGRvCisgICAgZm9yIGJyYW5jaCBpbiAiIiAiLW1lcmdlIiAiLW9jdG9wdXMiIDsgZG8KK2NhdCA8PEVPRgorYnItJHJlbW90ZSRicmFuY2gKK2JyLSRyZW1vdGUkYnJhbmNoICRyZW1vdGUKK0VPRgorICAgIGRvbmUKK2RvbmUgPiB0ZXN0cworCisjIE1lcmdlIGxvZ2ljIGRvZXMgbm90IGRlcGVuZCBvbiBicmFuY2ggcHJvcGVydGllcywKKyMgYnV0IGRvZXMgZGVwZW5kIG9uIFB1bGw6IG9yIGZldGNoIGxpbmVzLgorIyBVc2UgdHdvIGJyYW5jaGVzIGNvbXBsZXRlbHkgdW5yZWxhdGVkIGZyb20gdGhlIGFyZ3VtZW50cywKKyMgdGhlIGNsb25lIGRlZmF1bHQgYW5kIG9uZSB3aXRob3V0IGJyYW5jaCBwcm9wZXJ0aWVzCitmb3IgYnJhbmNoIGluIG1hc3RlciBici11bmNvbmZpZyA7IGRvCisgICAgZWNobyAkYnJhbmNoCisgICAgZm9yIHJlbW90ZSBpbiAkcmVtb3RlcyA7IGRvCisJZWNobyAkYnJhbmNoICRyZW1vdGUKKyAgICBkb25lCitkb25lID4+IHRlc3RzCisKKyMgTWVyZ2UgbG9naWMgZG9lcyBub3QgZGVwZW5kIG9uIGJyYW5jaCBwcm9wZXJ0aWVzCisjIG5laXRoZXIgaW4gdGhlIFB1bGw6IG9yIC5mZXRjaCBjb25maWcKK2ZvciBicmFuY2ggaW4gbWFzdGVyIGJyLXVuY29uZmlnIDsgZG8KKyAgICBjYXQgPDxFT0YKKyRicmFuY2ggLi4vLmdpdAorJGJyYW5jaCAuLi8uZ2l0IG9uZQorJGJyYW5jaCAuLi8uZ2l0IG9uZSB0d28KKyRicmFuY2ggLS10YWdzIC4uLy5naXQKKyRicmFuY2ggLi4vLmdpdCB0YWcgdGFnLW9uZSB0YWcgdGFnLXRocmVlCiskYnJhbmNoIC4uLy5naXQgdGFnIHRhZy1vbmUtdHJlZSB0YWcgdGFnLXRocmVlLWZpbGUKKyRicmFuY2ggLi4vLmdpdCBvbmUgdGFnIHRhZy1vbmUgdGFnIHRhZy10aHJlZS1maWxlCitFT0YKK2RvbmUgPj4gdGVzdHMKKword2hpbGUgcmVhZCBjbWQKK2RvCisJY2FzZSAiJGNtZCIgaW4KKwknJyB8ICcjJyopIGNvbnRpbnVlIDs7CisJZXNhYworCXRlc3Q9YGVjaG8gIiRjbWQiIHwgc2VkIC1lICdzfFsvIF1bLyBdKnxffGcnYAorCXBmeD1gcHJpbnRmICIlMDRkIiAkdGVzdF9jb3VudGAKKwlleHBlY3RfZj0iJFRFU1RfRElSRUNUT1JZL3Q1NTE1L2ZldGNoLiR0ZXN0IgorCWFjdHVhbF9mPSIkcGZ4LWZldGNoLiR0ZXN0IgorCWV4cGVjdF9yPSIkVEVTVF9ESVJFQ1RPUlkvdDU1MTUvcmVmcy4kdGVzdCIKKwlhY3R1YWxfcj0iJHBmeC1yZWZzLiR0ZXN0IgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCIgJworCQl7CisJCQllY2hvICIjICRjbWQiCisJCQlzZXQgeCAkY21kOyBzaGlmdAorCQkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvJDEgOyBzaGlmdAorCQkJcm0gLWYgLmdpdC9GRVRDSF9IRUFECisJCQlnaXQgZm9yLWVhY2gtcmVmIFwKKwkJCQlyZWZzL2hlYWRzIHJlZnMvcmVtb3Rlcy9yZW0gcmVmcy90YWdzIHwKKwkJCXdoaWxlIHJlYWQgdmFsIHR5cGUgcmVmbmFtZQorCQkJZG8KKwkJCQlnaXQgdXBkYXRlLXJlZiAtZCAiJHJlZm5hbWUiICIkdmFsIgorCQkJZG9uZQorCQkJZ2l0IGZldGNoICIkQCIgPi9kZXYvbnVsbAorCQkJY2F0IC5naXQvRkVUQ0hfSEVBRAorCQl9ID4iJGFjdHVhbF9mIiAmJgorCQlnaXQgc2hvdy1yZWYgPiIkYWN0dWFsX3IiICYmCisJCWlmIHRlc3QgLWYgIiRleHBlY3RfZiIKKwkJdGhlbgorCQkJdGVzdF9jbXAgIiRleHBlY3RfZiIgIiRhY3R1YWxfZiIgJiYKKwkJCXJtIC1mICIkYWN0dWFsX2YiCisJCWVsc2UKKwkJCSMgdGhpcyBpcyB0byBoZWxwIGRldmVsb3BpbmcgbmV3IHRlc3RzLgorCQkJY3AgIiRhY3R1YWxfZiIgIiRleHBlY3RfZiIKKwkJCWZhbHNlCisJCWZpICYmCisJCWlmIHRlc3QgLWYgIiRleHBlY3RfciIKKwkJdGhlbgorCQkJdGVzdF9jbXAgIiRleHBlY3RfciIgIiRhY3R1YWxfciIgJiYKKwkJCXJtIC1mICIkYWN0dWFsX3IiCisJCWVsc2UKKwkJCSMgdGhpcyBpcyB0byBoZWxwIGRldmVsb3BpbmcgbmV3IHRlc3RzLgorCQkJY3AgIiRhY3R1YWxfciIgIiRleHBlY3RfciIKKwkJCWZhbHNlCisJCWZpCisJJworZG9uZSA8IHRlc3RzCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYmMzZDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSw4IEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYWIwOGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlX2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2VfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDQyNzUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UgYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1cyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OGE3NjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1cwpAQCAtMCwwICsxLDEwIEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1cworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzX2JyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1N2YxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSwxMCBAQAorIyBici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXMgYnJhbmNoZXMtZGVmYXVsdAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0X2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHRfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2JkNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0X2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSw4IEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQgYnJhbmNoZXMtZGVmYXVsdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZSBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OGY2NzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDggQEAKKyMgYnItYnJhbmNoZXMtb25lCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW1lcmdlIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhNzc0MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW1lcmdlCkBAIC0wLDAgKzEsOSBAQAorIyBici1icmFuY2hlcy1vbmUtbWVyZ2UKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtbWVyZ2VfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtbWVyZ2VfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDFiYjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1tZXJnZV9icmFuY2hlcy1vbmUKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLW9uZS1tZXJnZSBicmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1cyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjNGI1NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW9jdG9wdXMKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW9jdG9wdXNfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MDVmNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW9jdG9wdXNfYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsOSBAQAorIyBici1icmFuY2hlcy1vbmUtb2N0b3B1cyBicmFuY2hlcy1vbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmVfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmVfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODkwZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZV9icmFuY2hlcy1vbmUKQEAgLTAsMCArMSw4IEBACisjIGJyLWJyYW5jaGVzLW9uZSBicmFuY2hlcy1vbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGZjOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZSBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZTc2NGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZQpAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlX2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTE1MmI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtbWVyZ2VfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlIGNvbmZpZy1leHBsaWNpdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDU3N2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXNfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtb2N0b3B1c19jb25maWctZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5ZGQ4YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXNfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMgY29uZmlnLWV4cGxpY2l0Cis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5YjAxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0X2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1leHBsaWNpdCBjb25maWctZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDZkNzBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2ItbWVyZ2UgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjI1OTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW1lcmdlCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWdsb2ItbWVyZ2UKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1tZXJnZV9jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmE0ODMyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1tZXJnZV9jb25maWctZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1nbG9iLW1lcmdlIGNvbmZpZy1nbG9iCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1vY3RvcHVzIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OTk0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXMKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZ2xvYi1vY3RvcHVzCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXNfY29uZmlnLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXNfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxYTcyNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1nbG9iLW9jdG9wdXMgY29uZmlnLWdsb2IKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2JfY29uZmlnLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZGFmMGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWdsb2IgY29uZmlnLWdsb2IKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjQ0YmM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZSBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMThiMzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZQpAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDNkNzgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2VfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlIHJlbW90ZS1leHBsaWNpdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmODQzMDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXNfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1c19yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0NmE4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXNfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMgcmVtb3RlLWV4cGxpY2l0Cis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlMDE0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0X3JlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1leHBsaWNpdCByZW1vdGUtZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWJmY2VlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2ItbWVyZ2UgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMWE0MzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW1lcmdlCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWdsb2ItbWVyZ2UKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1tZXJnZV9yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzU3MWJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1tZXJnZV9yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1nbG9iLW1lcmdlIHJlbW90ZS1nbG9iCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzhiNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXMKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZ2xvYi1vY3RvcHVzCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXNfcmVtb3RlLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXNfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwNzZmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1nbG9iLW9jdG9wdXMgcmVtb3RlLWdsb2IKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2JfcmVtb3RlLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYmE1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWdsb2IgcmVtb3RlLWdsb2IKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3Y2NmYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWcKQEAgLTAsMCArMSwxMSBAQAorIyBici11bmNvbmZpZworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0IGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18tLXRhZ3NfLi5fLmdpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjY5Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18tLXRhZ3NfLi5fLmdpdApAQCAtMCwwICsxLDcgQEAKKyMgYnItdW5jb25maWcgLS10YWdzIC4uLy5naXQKKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0IGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NGJiMWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXQKQEAgLTAsMCArMSwyIEBACisjIGJyLXVuY29uZmlnIC4uLy5naXQKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCS4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZSBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlYjVhNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmUKQEAgLTAsMCArMSwyIEBACisjIGJyLXVuY29uZmlnIC4uLy5naXQgb25lCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MTE1MzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZQpAQCAtMCwwICsxLDggQEAKKyMgYnItdW5jb25maWcgLi4vLmdpdCBvbmUgdGFnIHRhZy1vbmUgdGFnIHRhZy10aHJlZS1maWxlCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90d28gYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3R3bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjFiZTIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90d28KQEAgLTAsMCArMSwzIEBACisjIGJyLXVuY29uZmlnIC4uLy5naXQgb25lIHR3bworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MjY5ODMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUKQEAgLTAsMCArMSw3IEBACisjIGJyLXVuY29uZmlnIC4uLy5naXQgdGFnIHRhZy1vbmUtdHJlZSB0YWcgdGFnLXRocmVlLWZpbGUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM3NTBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKQEAgLTAsMCArMSw3IEBACisjIGJyLXVuY29uZmlnIC4uLy5naXQgdGFnIHRhZy1vbmUgdGFnIHRhZy10aHJlZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJdGFnICd0YWctb25lJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMzBlM2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSw4IEBACisjIGJyLXVuY29uZmlnIGJyYW5jaGVzLWRlZmF1bHQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19icmFuY2hlcy1vbmUgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDYxNDMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19icmFuY2hlcy1vbmUKQEAgLTAsMCArMSw4IEBACisjIGJyLXVuY29uZmlnIGJyYW5jaGVzLW9uZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMzIzYzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIGJyLXVuY29uZmlnIGNvbmZpZy1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfY29uZmlnLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNzJlZDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItdW5jb25maWcgY29uZmlnLWdsb2IKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzE4ZGQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici11bmNvbmZpZyByZW1vdGUtZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDlhZmFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLXVuY29uZmlnIHJlbW90ZS1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyOWQ2NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyCkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy0tdGFnc18uLl8uZ2l0IGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLS10YWdzXy4uXy5naXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3NDkzNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy0tdGFnc18uLl8uZ2l0CkBAIC0wLDAgKzEsNyBAQAorIyBtYXN0ZXIgLS10YWdzIC4uLy5naXQKKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZkMWFhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXQKQEAgLTAsMCArMSwyIEBACisjIG1hc3RlciAuLi8uZ2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQkuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkZWRkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lCkBAIC0wLDAgKzEsMiBAQAorIyBtYXN0ZXIgLi4vLmdpdCBvbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjcyZDEyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsOCBAQAorIyBtYXN0ZXIgLi4vLmdpdCBvbmUgdGFnIHRhZy1vbmUgdGFnIHRhZy10aHJlZS1maWxlCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmVfdHdvIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmVfdHdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZWM1NzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X29uZV90d28KQEAgLTAsMCArMSwzIEBACisjIG1hc3RlciAuLi8uZ2l0IG9uZSB0d28KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDczN2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsNyBAQAorIyBtYXN0ZXIgLi4vLmdpdCB0YWcgdGFnLW9uZS10cmVlIHRhZyB0YWctdGhyZWUtZmlsZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4ODk4NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZQpAQCAtMCwwICsxLDcgQEAKKyMgbWFzdGVyIC4uLy5naXQgdGFnIHRhZy1vbmUgdGFnIHRhZy10aHJlZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJdGFnICd0YWctb25lJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlZGQzYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSw4IEBACisjIG1hc3RlciBicmFuY2hlcy1kZWZhdWx0Cis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDFjZTIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsOCBAQAorIyBtYXN0ZXIgYnJhbmNoZXMtb25lCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTFjODI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIGNvbmZpZy1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjMTU4ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIGNvbmZpZy1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2NmZTZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIHJlbW90ZS1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4YmVmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIHJlbW90ZS1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MTdjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MTdjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlCkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlX2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZV9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZV9icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXMgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTkxN2MxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1c19icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0X2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdF9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdF9icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsMTIgQEAKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9oZWFkcy9icmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1tZXJnZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MDVhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtbWVyZ2UKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW1lcmdlX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtbWVyZ2VfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW1lcmdlX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzCkBAIC0wLDAgKzEsMTIgQEAKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9oZWFkcy9icmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MDVhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmVfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZV9jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZV9jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXNfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzX2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0X2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2ItbWVyZ2UgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2ItbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2ItbWVyZ2VfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1vY3RvcHVzIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1vY3RvcHVzX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2JfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZV9yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZV9yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXNfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzX3JlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0X3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2ItbWVyZ2UgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2ItbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2ItbWVyZ2VfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2JfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0IGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLS10YWdzXy4uXy5naXQKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdCBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOTYyZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdApAQCAtMCwwICsxLDUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lCkBAIC0wLDAgKzEsNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdHdvIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3R3bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3R3bwpAQCAtMCwwICsxLDUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDEyIEBACis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvaGVhZHMvYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWdsb2IgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19jb25maWctZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyIGIvdC90NTUxNS9yZWZzLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3RlcgpAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLS10YWdzXy4uXy5naXQgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy0tdGFnc18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy0tdGFnc18uLl8uZ2l0CkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0IGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOTYyZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXQKQEAgLTAsMCArMSw1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfb25lIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZQpAQCAtMCwwICsxLDUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZV90d28gYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfb25lX3R3bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZV90d28KQEAgLTAsMCArMSw1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZQpAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSwxMiBAQAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL2hlYWRzL2JyYW5jaGVzLWRlZmF1bHQKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1vbmUgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1vbmUKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyX2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNi1mZXRjaC1wdXNoLnNoIGIvdC90NTUxNi1mZXRjaC1wdXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1NDE3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE2LWZldGNoLXB1c2guc2gKQEAgLTAsMCArMSw5OTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaGluZyBhbmQgcHVzaGluZywgd2l0aCBvciB3aXRob3V0IHdpbGRjYXJkJworCisuIC4vdGVzdC1saWIuc2gKKworRD1gcHdkYAorCitta19lbXB0eSAoKSB7CisJcm0gLWZyIHRlc3RyZXBvICYmCisJbWtkaXIgdGVzdHJlcG8gJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuICYmCisJCW12IC5naXQvaG9va3MgLmdpdC9ob29rcy1kaXNhYmxlZAorCSkKK30KKworbWtfdGVzdCAoKSB7CisJbWtfZW1wdHkgJiYKKwkoCisJCWZvciByZWYgaW4gIiRAIgorCQlkbworCQkJZ2l0IHB1c2ggdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQ6cmVmcy8kcmVmIHx8IHsKKwkJCQllY2hvICJPb3BzLCBwdXNoIHJlZnMvJHJlZiBmYWlsdXJlIgorCQkJCWV4aXQgMQorCQkJfQorCQlkb25lICYmCisJCWNkIHRlc3RyZXBvICYmCisJCWZvciByZWYgaW4gIiRAIgorCQlkbworCQkJcj0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzLyRyZWYpICYmCisJCQl0ZXN0ICJ6JHIiID0gInokdGhlX2ZpcnN0X2NvbW1pdCIgfHwgeworCQkJCWVjaG8gIk9vcHMsIHJlZnMvJHJlZiBpcyB3cm9uZyIKKwkJCQlleGl0IDEKKwkJCX0KKwkJZG9uZSAmJgorCQlnaXQgZnNjayAtLWZ1bGwKKwkpCit9CisKK21rX3Rlc3Rfd2l0aF9ob29rcygpIHsKKwlta190ZXN0ICIkQCIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCW1rZGlyIC5naXQvaG9va3MgJiYKKwkJY2QgLmdpdC9ob29rcyAmJgorCisJCWNhdCA+cHJlLXJlY2VpdmUgPDwtJ0VPRicgJiYKKwkJIyEvYmluL3NoCisJCWNhdCAtID4+cHJlLXJlY2VpdmUuYWN0dWFsCisJCUVPRgorCisJCWNhdCA+dXBkYXRlIDw8LSdFT0YnICYmCisJCSMhL2Jpbi9zaAorCQlwcmludGYgIiVzICVzICVzXG4iICIkQCIgPj51cGRhdGUuYWN0dWFsCisJCUVPRgorCisJCWNhdCA+cG9zdC1yZWNlaXZlIDw8LSdFT0YnICYmCisJCSMhL2Jpbi9zaAorCQljYXQgLSA+PnBvc3QtcmVjZWl2ZS5hY3R1YWwKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXVwZGF0ZSA8PC0nRU9GJyAmJgorCQkjIS9iaW4vc2gKKwkJZm9yIHJlZiBpbiAiJEAiCisJCWRvCisJCQlwcmludGYgIiVzXG4iICIkcmVmIiA+PnBvc3QtdXBkYXRlLmFjdHVhbAorCQlkb25lCisJCUVPRgorCisJCWNobW9kICt4IHByZS1yZWNlaXZlIHVwZGF0ZSBwb3N0LXJlY2VpdmUgcG9zdC11cGRhdGUKKwkpCit9CisKK21rX2NoaWxkKCkgeworCXJtIC1yZiAiJDEiICYmCisJZ2l0IGNsb25lIHRlc3RyZXBvICIkMSIKK30KKworY2hlY2tfcHVzaF9yZXN1bHQgKCkgeworCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJaXQ9IiQxIiAmJgorCQlzaGlmdAorCQlmb3IgcmVmIGluICIkQCIKKwkJZG8KKwkJCXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy8kcmVmKSAmJgorCQkJdGVzdCAieiRyIiA9ICJ6JGl0IiB8fCB7CisJCQkJZWNobyAiT29wcywgcmVmcy8kcmVmIGlzIHdyb25nIgorCQkJCWV4aXQgMQorCQkJfQorCQlkb25lICYmCisJCWdpdCBmc2NrIC0tZnVsbAorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+cGF0aDEgJiYKKwlnaXQgYWRkIHBhdGgxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSByZXBvICYmCisJdGhlX2ZpcnN0X2NvbW1pdD0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKworCT5wYXRoMiAmJgorCWdpdCBhZGQgcGF0aDIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCXRoZV9jb21taXQ9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aG91dCB3aWxkY2FyZCcgJworCW1rX2VtcHR5ICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgZmV0Y2ggLi4gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKworCQlyPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICJ6JHIiID0gInokdGhlX2NvbW1pdCIgJiYKKworCQl0ZXN0IDEgPSAkKGdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiB8IHdjIC1sKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCB3aWxkY2FyZCcgJworCW1rX2VtcHR5ICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS51cC51cmwgLi4gJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudXAuZmV0Y2ggInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCisJCWdpdCBmZXRjaCB1cCAmJgorCisJCXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgInokciIgPSAieiR0aGVfY29tbWl0IiAmJgorCisJCXRlc3QgMSA9ICQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGluc3RlYWRPZicgJworCW1rX2VtcHR5ICYmCisJKAorCQlUUkFTSD0kKHB3ZCkvICYmCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjb25maWcgInVybC4kVFJBU0guaW5zdGVhZE9mIiB0cmFzaC8gJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudXAudXJsIHRyYXNoLy4gJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudXAuZmV0Y2ggInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCisJCWdpdCBmZXRjaCB1cCAmJgorCisJCXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgInokciIgPSAieiR0aGVfY29tbWl0IiAmJgorCisJCXRlc3QgMSA9ICQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIHB1c2hJbnN0ZWFkT2YgKHNob3VsZCBub3QgcmV3cml0ZSknICcKKwlta19lbXB0eSAmJgorCSgKKwkJVFJBU0g9JChwd2QpLyAmJgorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY29uZmlnICJ1cmwudHJhc2gvLnB1c2hJbnN0ZWFkT2YiICIkVFJBU0giICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnVwLnVybCAiJFRSQVNILiIgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudXAuZmV0Y2ggInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCisJCWdpdCBmZXRjaCB1cCAmJgorCisJCXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgInokciIgPSAieiR0aGVfY29tbWl0IiAmJgorCisJCXRlc3QgMSA9ICQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGhvdXQgd2lsZGNhcmQnICcKKwlta19lbXB0eSAmJgorCisJZ2l0IHB1c2ggdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgInokciIgPSAieiR0aGVfY29tbWl0IiAmJgorCisJCXRlc3QgMSA9ICQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggd2lsZGNhcmQnICcKKwlta19lbXB0eSAmJgorCisJZ2l0IHB1c2ggdGVzdHJlcG8gInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlyPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICJ6JHIiID0gInokdGhlX2NvbW1pdCIgJiYKKworCQl0ZXN0IDEgPSAkKGdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiB8IHdjIC1sKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGluc3RlYWRPZicgJworCW1rX2VtcHR5ICYmCisJVFJBU0g9IiQocHdkKS8iICYmCisJZ2l0IGNvbmZpZyAidXJsLiRUUkFTSC5pbnN0ZWFkT2YiIHRyYXNoLyAmJgorCWdpdCBwdXNoIHRyYXNoL3Rlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlyPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICJ6JHIiID0gInokdGhlX2NvbW1pdCIgJiYKKworCQl0ZXN0IDEgPSAkKGdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiB8IHdjIC1sKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHB1c2hJbnN0ZWFkT2YnICcKKwlta19lbXB0eSAmJgorCVRSQVNIPSIkKHB3ZCkvIiAmJgorCWdpdCBjb25maWcgInVybC4kVFJBU0gucHVzaEluc3RlYWRPZiIgdHJhc2gvICYmCisJZ2l0IHB1c2ggdHJhc2gvdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgInokciIgPSAieiR0aGVfY29tbWl0IiAmJgorCisJCXRlc3QgMSA9ICQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggcHVzaEluc3RlYWRPZiBhbmQgZXhwbGljaXQgcHVzaHVybCAocHVzaEluc3RlYWRPZiBzaG91bGQgbm90IHJld3JpdGUpJyAnCisJbWtfZW1wdHkgJiYKKwlUUkFTSD0iJChwd2QpLyIgJiYKKwlnaXQgY29uZmlnICJ1cmwudHJhc2gyLy5wdXNoSW5zdGVhZE9mIiB0cmFzaC8gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yLnVybCB0cmFzaC93cm9uZyAmJgorCWdpdCBjb25maWcgcmVtb3RlLnIucHVzaHVybCAiJFRSQVNIL3Rlc3RyZXBvIiAmJgorCWdpdCBwdXNoIHIgcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgInokciIgPSAieiR0aGVfY29tbWl0IiAmJgorCisJCXRlc3QgMSA9ICQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMnICcKKworCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gJiYKKwljaGVja19wdXNoX3Jlc3VsdCAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMgb24gdGhlIGNvbW1hbmQgbGluZScgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIChub24tZmFzdC1mb3J3YXJkKSBwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMnICcKKworCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbWFzc2FnZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJHRoZV9jb21taXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tZm9yY2Ugd2l0aCBtYXRjaGluZyBoZWFkcycgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6ICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tYXNzYWdlZCAmJgorCWdpdCBwdXNoIC0tZm9yY2UgdGVzdHJlcG8gJiYKKwkhIGNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJHRoZV9jb21taXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMgYW5kIGZvcmNlZCB1cGRhdGUnICcKKworCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbWFzc2FnZWQgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyArOiAmJgorCSEgY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAkdGhlX2NvbW1pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBubyBhbWJpZ3VpdHkgKDEpJyAnCisKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlcjptYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbm8gYW1iaWd1aXR5ICgyKScgJworCisJbWtfdGVzdCByZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6b3JpZ2luL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IHJlbW90ZXMvb3JpZ2luL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb2xvbi1sZXNzIHJlZnNwZWMsIG5vIGFtYmlndWl0eScgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgaGVhZHMvdC9tYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1mIHQvbWFzdGVyIG1hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfZmlyc3RfY29tbWl0IGhlYWRzL3QvbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHdlYWsgYW1iaWd1aXR5ICgxKScgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOm1hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfZmlyc3RfY29tbWl0IHJlbW90ZXMvb3JpZ2luL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCB3ZWFrIGFtYmlndWl0eSAoMiknICcKKworCW1rX3Rlc3QgaGVhZHMvbWFzdGVyIHJlbW90ZXMvb3JpZ2luL21hc3RlciByZW1vdGVzL2Fub3RoZXIvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOm1hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfZmlyc3RfY29tbWl0IHJlbW90ZXMvb3JpZ2luL21hc3RlciByZW1vdGVzL2Fub3RoZXIvbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGFtYmlndWl0eScgJworCisJbWtfdGVzdCBoZWFkcy9mcm90eiB0YWdzL2Zyb3R6ICYmCisJaWYgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOmZyb3R6CisJdGhlbgorCQllY2hvICJPb3BzLCBzaG91bGQgaGF2ZSBmYWlsZWQiCisJCWZhbHNlCisJZWxzZQorCQljaGVja19wdXNoX3Jlc3VsdCAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9mcm90eiB0YWdzL2Zyb3R6CisJZmkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggY29sb24tbGVzcyByZWZzcGVjICgxKScgJworCisJbWtfdGVzdCBoZWFkcy9mcm90eiB0YWdzL2Zyb3R6ICYmCisJZ2l0IGJyYW5jaCAtZiBmcm90eiBtYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBmcm90eiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL2Zyb3R6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9maXJzdF9jb21taXQgdGFncy9mcm90egorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb2xvbi1sZXNzIHJlZnNwZWMgKDIpJyAnCisKKwlta190ZXN0IGhlYWRzL2Zyb3R6IHRhZ3MvZnJvdHogJiYKKwlpZiBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLXEgcmVmcy9oZWFkcy9mcm90egorCXRoZW4KKwkJZ2l0IGJyYW5jaCAtRCBmcm90egorCWZpICYmCisJZ2l0IHRhZyAtZiBmcm90eiAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIGZyb3R6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgdGFncy9mcm90eiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfZmlyc3RfY29tbWl0IGhlYWRzL2Zyb3R6CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGNvbG9uLWxlc3MgcmVmc3BlYyAoMyknICcKKworCW1rX3Rlc3QgJiYKKwlpZiBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLXEgcmVmcy90YWdzL2Zyb3R6CisJdGhlbgorCQlnaXQgdGFnIC1kIGZyb3R6CisJZmkgJiYKKwlnaXQgYnJhbmNoIC1mIGZyb3R6IG1hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIGZyb3R6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgaGVhZHMvZnJvdHogJiYKKwl0ZXN0IDEgPSAkKCBjZCB0ZXN0cmVwbyAmJiBnaXQgc2hvdy1yZWYgfCB3YyAtbCApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb2xvbi1sZXNzIHJlZnNwZWMgKDQpJyAnCisKKwlta190ZXN0ICYmCisJaWYgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvZnJvdHoKKwl0aGVuCisJCWdpdCBicmFuY2ggLUQgZnJvdHoKKwlmaSAmJgorCWdpdCB0YWcgLWYgZnJvdHogJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBmcm90eiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IHRhZ3MvZnJvdHogJiYKKwl0ZXN0IDEgPSAkKCBjZCB0ZXN0cmVwbyAmJiBnaXQgc2hvdy1yZWYgfCB3YyAtbCApCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBoZWFkIHdpdGggbm9uLWV4aXN0ZW50LCBpbmNvbXBsZXRlIGRlc3QnICcKKworCW1rX3Rlc3QgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6YnJhbmNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgaGVhZHMvYnJhbmNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0YWcgd2l0aCBub24tZXhpc3RlbnQsIGluY29tcGxldGUgZGVzdCcgJworCisJbWtfdGVzdCAmJgorCWdpdCB0YWcgLWYgdjEuMCAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIHYxLjA6dGFnICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgdGFncy90YWcKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHNoYTEgd2l0aCBub24tZXhpc3RlbnQsIGluY29tcGxldGUgZGVzdCcgJworCisJbWtfdGVzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIGBnaXQgcmV2LXBhcnNlIG1hc3RlcmA6Zm9vCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCByZWYgZXhwcmVzc2lvbiB3aXRoIG5vbi1leGlzdGVudCwgaW5jb21wbGV0ZSBkZXN0JyAnCisKKwlta190ZXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyXjpicmFuY2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggSEVBRCcgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gSEVBRCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBIRUFEIG5vbmV4aXN0aW5nIGF0IHJlbW90ZScgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9jYWwgbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gSEVBRCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL2xvY2FsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCArSEVBRCcgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBsb2NhbCAmJgorCWdpdCBjaGVja291dCAtYiBsb2NhbCAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciBsb2NhbCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL2xvY2FsICYmCisKKwkjIFdpdGhvdXQgZm9yY2UgcmV3aW5kaW5nIHNob3VsZCBmYWlsCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIEhFQUQgJiYKKwljaGVja19wdXNoX3Jlc3VsdCAkdGhlX2NvbW1pdCBoZWFkcy9sb2NhbCAmJgorCisJIyBXaXRoIGZvcmNlIHJld2luZGluZyBzaG91bGQgc3VjY2VlZAorCWdpdCBwdXNoIHRlc3RyZXBvICtIRUFEICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9maXJzdF9jb21taXQgaGVhZHMvbG9jYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIEhFQUQgd2l0aCBub24tZXhpc3RlbnQsIGluY29tcGxldGUgZGVzdCcgJworCisJbWtfdGVzdCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBIRUFEOmJyYW5jaCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL2JyYW5jaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb25maWcgcmVtb3RlLioucHVzaCA9IEhFQUQnICcKKworCW1rX3Rlc3QgaGVhZHMvbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtZiBsb2NhbCAkdGhlX2NvbW1pdCAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNoZWNrb3V0IGxvY2FsICYmCisJCWdpdCByZXNldCAtLWhhcmQgJHRoZV9maXJzdF9jb21taXQKKwkpICYmCisJZ2l0IGNvbmZpZyByZW1vdGUudGhlcmUudXJsIHRlc3RyZXBvICYmCisJZ2l0IGNvbmZpZyByZW1vdGUudGhlcmUucHVzaCBIRUFEICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSB0aGVyZSAmJgorCWdpdCBwdXNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9maXJzdF9jb21taXQgaGVhZHMvbG9jYWwKKycKKworIyBjbGVhbiB1cCB0aGUgY3J1ZnQgbGVmdCB3aXRoIHRoZSBwcmV2aW91cyBvbmUKK2dpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiByZW1vdGUudGhlcmUKK2dpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBicmFuY2gubWFzdGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb25maWcgcmVtb3RlLioucHVzaHVybCcgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyByZW1vdGUudGhlcmUudXJsIHRlc3QycmVwbyAmJgorCWdpdCBjb25maWcgcmVtb3RlLnRoZXJlLnB1c2h1cmwgdGVzdHJlcG8gJiYKKwlnaXQgcHVzaCB0aGVyZSAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorJworCisjIGNsZWFuIHVwIHRoZSBjcnVmdCBsZWZ0IHdpdGggdGhlIHByZXZpb3VzIG9uZQorZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHJlbW90ZS50aGVyZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggZHJ5LXJ1bicgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCW9sZF9jb21taXQ9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpCisJKSAmJgorCWdpdCBwdXNoIC0tZHJ5LXJ1biB0ZXN0cmVwbyAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICRvbGRfY29tbWl0IGhlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHVwZGF0ZXMgbG9jYWwgcmVmcycgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlta19jaGlsZCBjaGlsZCAmJgorCSgKKwkJY2QgY2hpbGQgJiYKKwkJZ2l0IHB1bGwgLi4gbWFzdGVyICYmCisJCWdpdCBwdXNoICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSBcCisJCQkkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHVwZGF0ZXMgdXAtdG8tZGF0ZSBsb2NhbCByZWZzJyAnCisKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCW1rX2NoaWxkIGNoaWxkMSAmJgorCW1rX2NoaWxkIGNoaWxkMiAmJgorCShjZCBjaGlsZDEgJiYgZ2l0IHB1bGwgLi4gbWFzdGVyICYmIGdpdCBwdXNoKSAmJgorCSgKKwkJY2QgY2hpbGQyICYmCisJCWdpdCBwdWxsIC4uL2NoaWxkMSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSA9IFwKKwkJCSQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi9tYXN0ZXIpCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggcHJlc2VydmVzIHVwLXRvLWRhdGUgcGFja2VkIHJlZnMnICcKKworCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCisJbWtfY2hpbGQgY2hpbGQgJiYKKwkoCisJCWNkIGNoaWxkICYmCisJCWdpdCBwdXNoICYmCisJCSEgdGVzdCAtZiAuZ2l0L3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZG9lcyBub3QgdXBkYXRlIGxvY2FsIHJlZnMgb24gZmFpbHVyZScgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlta19jaGlsZCBjaGlsZCAmJgorCW1rZGlyIHRlc3RyZXBvLy5naXQvaG9va3MgJiYKKwllY2hvICIjIS9uby9mcm9ibmljYXRpb24vdG9kYXkiID50ZXN0cmVwby8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlICYmCisJY2htb2QgK3ggdGVzdHJlcG8vLmdpdC9ob29rcy9wcmUtcmVjZWl2ZSAmJgorCSgKKwkJY2QgY2hpbGQgJiYKKwkJZ2l0IHB1bGwgLi4gbWFzdGVyCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgIT0gXAorCQkJJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL21hc3RlcikKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgZGVsZXRpbmcgYW4gaW52YWxpZCByZW1vdGUgcmVmJyAnCisKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCXJtIC1mIHRlc3RyZXBvLy5naXQvb2JqZWN0cy8/Py8qICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOnJlZnMvaGVhZHMvbWFzdGVyICYmCisJKGNkIHRlc3RyZXBvICYmIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyB2YWxpZCByZWZzIHRyaWdnZXJzIHBvc3QtcmVjZWl2ZSBhbmQgcG9zdC11cGRhdGUgaG9va3MnICcKKwlta190ZXN0X3dpdGhfaG9va3MgaGVhZHMvbWFzdGVyIGhlYWRzL25leHQgJiYKKwlvcmdtYXN0ZXI9JChjZCB0ZXN0cmVwbyAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJbmV3bWFzdGVyPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW9yZ25leHQ9JChjZCB0ZXN0cmVwbyAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9uZXh0KSAmJgorCW5ld25leHQ9JF96NDAgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlciA6cmVmcy9oZWFkcy9uZXh0ICYmCisJKAorCQljZCB0ZXN0cmVwby8uZ2l0ICYmCisJCWNhdCA+cHJlLXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkb3JnbWFzdGVyICRuZXdtYXN0ZXIgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJJG9yZ25leHQgJG5ld25leHQgcmVmcy9oZWFkcy9uZXh0CisJCUVPRgorCisJCWNhdCA+dXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIgJG9yZ21hc3RlciAkbmV3bWFzdGVyCisJCXJlZnMvaGVhZHMvbmV4dCAkb3JnbmV4dCAkbmV3bmV4dAorCQlFT0YKKworCQljYXQgPnBvc3QtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRvcmdtYXN0ZXIgJG5ld21hc3RlciByZWZzL2hlYWRzL21hc3RlcgorCQkkb3JnbmV4dCAkbmV3bmV4dCByZWZzL2hlYWRzL25leHQKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXVwZGF0ZS5leHBlY3QgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyCisJCXJlZnMvaGVhZHMvbmV4dAorCQlFT0YKKworCQl0ZXN0X2NtcCBwcmUtcmVjZWl2ZS5leHBlY3QgcHJlLXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHVwZGF0ZS5leHBlY3QgdXBkYXRlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXJlY2VpdmUuZXhwZWN0IHBvc3QtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcG9zdC11cGRhdGUuZXhwZWN0IHBvc3QtdXBkYXRlLmFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgZGFuZ2xpbmcgcmVmIHRyaWdnZXJzIGhvb2tzIHdpdGggY29ycmVjdCBhcmdzJyAnCisJbWtfdGVzdF93aXRoX2hvb2tzIGhlYWRzL21hc3RlciAmJgorCXJtIC1mIHRlc3RyZXBvLy5naXQvb2JqZWN0cy8/Py8qICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOnJlZnMvaGVhZHMvbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwby8uZ2l0ICYmCisJCWNhdCA+cHJlLXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkX3o0MCAkX3o0MCByZWZzL2hlYWRzL21hc3RlcgorCQlFT0YKKworCQljYXQgPnVwZGF0ZS5leHBlY3QgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyICRfejQwICRfejQwCisJCUVPRgorCisJCWNhdCA+cG9zdC1yZWNlaXZlLmV4cGVjdCA8PC1FT0YgJiYKKwkJJF96NDAgJF96NDAgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXVwZGF0ZS5leHBlY3QgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyCisJCUVPRgorCisJCXRlc3RfY21wIHByZS1yZWNlaXZlLmV4cGVjdCBwcmUtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgdXBkYXRlLmV4cGVjdCB1cGRhdGUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtcmVjZWl2ZS5leHBlY3QgcG9zdC1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXVwZGF0ZS5leHBlY3QgcG9zdC11cGRhdGUuYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGlvbiBvZiBhIG5vbi1leGlzdGVudCByZWYgaXMgbm90IGZlZCB0byBwb3N0LXJlY2VpdmUgYW5kIHBvc3QtdXBkYXRlIGhvb2tzJyAnCisJbWtfdGVzdF93aXRoX2hvb2tzIGhlYWRzL21hc3RlciAmJgorCW9yZ21hc3Rlcj0kKGNkIHRlc3RyZXBvICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwluZXdtYXN0ZXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyIDpyZWZzL2hlYWRzL25vbmV4aXN0ZW50ICYmCisJKAorCQljZCB0ZXN0cmVwby8uZ2l0ICYmCisJCWNhdCA+cHJlLXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkb3JnbWFzdGVyICRuZXdtYXN0ZXIgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJJF96NDAgJF96NDAgcmVmcy9oZWFkcy9ub25leGlzdGVudAorCQlFT0YKKworCQljYXQgPnVwZGF0ZS5leHBlY3QgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyICRvcmdtYXN0ZXIgJG5ld21hc3RlcgorCQlyZWZzL2hlYWRzL25vbmV4aXN0ZW50ICRfejQwICRfejQwCisJCUVPRgorCisJCWNhdCA+cG9zdC1yZWNlaXZlLmV4cGVjdCA8PC1FT0YgJiYKKwkJJG9yZ21hc3RlciAkbmV3bWFzdGVyIHJlZnMvaGVhZHMvbWFzdGVyCisJCUVPRgorCisJCWNhdCA+cG9zdC11cGRhdGUuZXhwZWN0IDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL21hc3RlcgorCQlFT0YKKworCQl0ZXN0X2NtcCBwcmUtcmVjZWl2ZS5leHBlY3QgcHJlLXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHVwZGF0ZS5leHBlY3QgdXBkYXRlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXJlY2VpdmUuZXhwZWN0IHBvc3QtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcG9zdC11cGRhdGUuZXhwZWN0IHBvc3QtdXBkYXRlLmFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpb24gb2YgYSBub24tZXhpc3RlbnQgcmVmIGFsb25lIGRvZXMgdHJpZ2dlciBwb3N0LXJlY2VpdmUgYW5kIHBvc3QtdXBkYXRlIGhvb2tzJyAnCisJbWtfdGVzdF93aXRoX2hvb2tzIGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDpyZWZzL2hlYWRzL25vbmV4aXN0ZW50ICYmCisJKAorCQljZCB0ZXN0cmVwby8uZ2l0ICYmCisJCWNhdCA+cHJlLXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkX3o0MCAkX3o0MCByZWZzL2hlYWRzL25vbmV4aXN0ZW50CisJCUVPRgorCisJCWNhdCA+dXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9ub25leGlzdGVudCAkX3o0MCAkX3o0MAorCQlFT0YKKworCQl0ZXN0X2NtcCBwcmUtcmVjZWl2ZS5leHBlY3QgcHJlLXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHVwZGF0ZS5leHBlY3QgdXBkYXRlLmFjdHVhbCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBwb3N0LXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHBvc3QtdXBkYXRlLmFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWl4ZWQgcmVmIHVwZGF0ZXMsIGRlbGV0ZXMsIGludmFsaWQgZGVsZXRlcyB0cmlnZ2VyIGhvb2tzIHdpdGggY29ycmVjdCBpbnB1dCcgJworCW1rX3Rlc3Rfd2l0aF9ob29rcyBoZWFkcy9tYXN0ZXIgaGVhZHMvbmV4dCBoZWFkcy9wdSAmJgorCW9yZ21hc3Rlcj0kKGNkIHRlc3RyZXBvICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwluZXdtYXN0ZXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJb3JnbmV4dD0kKGNkIHRlc3RyZXBvICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL25leHQpICYmCisJbmV3bmV4dD0kX3o0MCAmJgorCW9yZ3B1PSQoY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcHUpICYmCisJbmV3cHU9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIgXAorCSAgICByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3B1IDpyZWZzL2hlYWRzL25leHQgXAorCSAgICA6cmVmcy9oZWFkcy9ub25leGlzdGVudCAmJgorCSgKKwkJY2QgdGVzdHJlcG8vLmdpdCAmJgorCQljYXQgPnByZS1yZWNlaXZlLmV4cGVjdCA8PC1FT0YgJiYKKwkJJG9yZ21hc3RlciAkbmV3bWFzdGVyIHJlZnMvaGVhZHMvbWFzdGVyCisJCSRvcmduZXh0ICRuZXduZXh0IHJlZnMvaGVhZHMvbmV4dAorCQkkb3JncHUgJG5ld3B1IHJlZnMvaGVhZHMvcHUKKwkJJF96NDAgJF96NDAgcmVmcy9oZWFkcy9ub25leGlzdGVudAorCQlFT0YKKworCQljYXQgPnVwZGF0ZS5leHBlY3QgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyICRvcmdtYXN0ZXIgJG5ld21hc3RlcgorCQlyZWZzL2hlYWRzL25leHQgJG9yZ25leHQgJG5ld25leHQKKwkJcmVmcy9oZWFkcy9wdSAkb3JncHUgJG5ld3B1CisJCXJlZnMvaGVhZHMvbm9uZXhpc3RlbnQgJF96NDAgJF96NDAKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkb3JnbWFzdGVyICRuZXdtYXN0ZXIgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJJG9yZ25leHQgJG5ld25leHQgcmVmcy9oZWFkcy9uZXh0CisJCSRvcmdwdSAkbmV3cHUgcmVmcy9oZWFkcy9wdQorCQlFT0YKKworCQljYXQgPnBvc3QtdXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIKKwkJcmVmcy9oZWFkcy9uZXh0CisJCXJlZnMvaGVhZHMvcHUKKwkJRU9GCisKKwkJdGVzdF9jbXAgcHJlLXJlY2VpdmUuZXhwZWN0IHByZS1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCB1cGRhdGUuZXhwZWN0IHVwZGF0ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcG9zdC1yZWNlaXZlLmV4cGVjdCBwb3N0LXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtdXBkYXRlLmV4cGVjdCBwb3N0LXVwZGF0ZS5hY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IGRlbGV0aW5nIGEgcmVmIHVzaW5nIC0tZGVsZXRlJyAnCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwkoY2QgdGVzdHJlcG8gJiYgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50IHdhcm4pICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gLS1kZWxldGUgbWFzdGVyICYmCisJKGNkIHRlc3RyZXBvICYmIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IGRlbGV0aW5nIGEgdGFnIHVzaW5nIC0tZGVsZXRlJyAnCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgdGFnIC1hIC1tIGR1bW15X21lc3NhZ2UgZGVsdGFnIGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIC0tdGFncyAmJgorCShjZCB0ZXN0cmVwbyAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIHJlZnMvdGFncy9kZWx0YWcpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gLS1kZWxldGUgdGFnIGRlbHRhZyAmJgorCShjZCB0ZXN0cmVwbyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvdGFncy9kZWx0YWcpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1kZWxldGUgd2l0aG91dCBhcmdzIGFib3J0cycgJworCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gLS1kZWxldGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWRlbGV0ZSByZWZ1c2VzIHNyYzpkZXN0IHJlZnNwZWNzJyAnCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyAtLWRlbGV0ZSBtYXN0ZXI6Zm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhcm4gb24gcHVzaCB0byBIRUFEIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnknICcKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybgorCSkgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgMj5zdGRlcnIgJiYKKwlncmVwICJ3YXJuaW5nOiB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2giIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZW55IHB1c2ggdG8gSEVBRCBvZiBub24tYmFyZSByZXBvc2l0b3J5JyAnCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHRydWUKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IHB1c2ggdG8gSEVBRCBvZiBiYXJlIHJlcG9zaXRvcnkgKGJhcmUpJyAnCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmJhcmUgdHJ1ZQorCSkgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgMj5zdGRlcnIgJiYKKwkhIGdyZXAgIndhcm5pbmc6IHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IHB1c2ggdG8gSEVBRCBvZiBub24tYmFyZSByZXBvc2l0b3J5IChjb25maWcpJyAnCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGZhbHNlCisJKSAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAyPnN0ZGVyciAmJgorCSEgZ3JlcCAid2FybmluZzogdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBicmFuY2hlcycgJworCW1rX2VtcHR5ICYmCisJZ2l0IGJyYW5jaCBzZWNvbmQgJHRoZV9maXJzdF9jb21taXQgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJZWNobyAiLi4iID4gdGVzdHJlcG8vLmdpdC9icmFuY2hlcy9icmFuY2gxICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgZmV0Y2ggYnJhbmNoMSAmJgorCQlyPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYnJhbmNoMSkgJiYKKwkJdGVzdCAieiRyIiA9ICJ6JHRoZV9jb21taXQiICYmCisJCXRlc3QgMSA9ICQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzIHwgd2MgLWwpCisJKSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBicmFuY2hlcyBjb250YWluaW5nICMnICcKKwlta19lbXB0eSAmJgorCWVjaG8gIi4uI3NlY29uZCIgPiB0ZXN0cmVwby8uZ2l0L2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBmZXRjaCBicmFuY2gyICYmCisJCXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9icmFuY2gyKSAmJgorCQl0ZXN0ICJ6JHIiID0gInokdGhlX2ZpcnN0X2NvbW1pdCIgJiYKKwkJdGVzdCAxID0gJChnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgfCB3YyAtbCkKKwkpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggYnJhbmNoZXMnICcKKwlta19lbXB0eSAmJgorCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwllY2hvICJ0ZXN0cmVwbyIgPiAuZ2l0L2JyYW5jaGVzL2JyYW5jaDEgJiYKKwlnaXQgcHVzaCBicmFuY2gxICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlyPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCQl0ZXN0ICJ6JHIiID0gInokdGhlX2ZpcnN0X2NvbW1pdCIgJiYKKwkJdGVzdCAxID0gJChnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgfCB3YyAtbCkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBicmFuY2hlcyBjb250YWluaW5nICMnICcKKwlta19lbXB0eSAmJgorCWVjaG8gInRlc3RyZXBvI2JyYW5jaDMiID4gLmdpdC9icmFuY2hlcy9icmFuY2gyICYmCisJZ2l0IHB1c2ggYnJhbmNoMiAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJcj0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL2JyYW5jaDMpICYmCisJCXRlc3QgInokciIgPSAieiR0aGVfZmlyc3RfY29tbWl0IiAmJgorCQl0ZXN0IDEgPSAkKGdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcyB8IHdjIC1sKQorCSkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggaW50byBhbGlhc2VkIHJlZnMgKGNvbnNpc3RlbnQpJyAnCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlta19jaGlsZCBjaGlsZDEgJiYKKwlta19jaGlsZCBjaGlsZDIgJiYKKwkoCisJCWNkIGNoaWxkMSAmJgorCQlnaXQgYnJhbmNoIGZvbyAmJgorCQlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvYmFyIHJlZnMvaGVhZHMvZm9vCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBmYWxzZQorCSkgJiYKKwkoCisJCWNkIGNoaWxkMiAmJgorCQk+cGF0aDIgJiYKKwkJZ2l0IGFkZCBwYXRoMiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBjaGlsZDIgJiYKKwkJZ2l0IGJyYW5jaCBmb28gJiYKKwkJZ2l0IGJyYW5jaCBiYXIgJiYKKwkJZ2l0IHB1c2ggLi4vY2hpbGQxIGZvbyBiYXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggaW50byBhbGlhc2VkIHJlZnMgKGluY29uc2lzdGVudCknICcKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCW1rX2NoaWxkIGNoaWxkMSAmJgorCW1rX2NoaWxkIGNoaWxkMiAmJgorCSgKKwkJY2QgY2hpbGQxICYmCisJCWdpdCBicmFuY2ggZm9vICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9iYXIgcmVmcy9oZWFkcy9mb28KKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGZhbHNlCisJKSAmJgorCSgKKwkJY2QgY2hpbGQyICYmCisJCT5wYXRoMiAmJgorCQlnaXQgYWRkIHBhdGgyICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGNoaWxkMiAmJgorCQlnaXQgYnJhbmNoIGZvbyAmJgorCQk+cGF0aDMgJiYKKwkJZ2l0IGFkZCBwYXRoMyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBjaGlsZDIgJiYKKwkJZ2l0IGJyYW5jaCBiYXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLi4vY2hpbGQxIGZvbyBiYXIgMj5zdGRlcnIgJiYKKwkJZ3JlcCAicmVmdXNpbmcgaW5jb25zaXN0ZW50IHVwZGF0ZSIgc3RkZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tcG9yY2VsYWluJyAnCisJbWtfZW1wdHkgJiYKKwllY2hvID4uZ2l0L2ZvbyAgIlRvIHRlc3RyZXBvIiAmJgorCWVjaG8gPj4uZ2l0L2ZvbyAiKglyZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcglbbmV3IGJyYW5jaF0iICAmJgorCWVjaG8gPj4uZ2l0L2ZvbyAiRG9uZSIgJiYKKwlnaXQgcHVzaCA+LmdpdC9iYXIgLS1wb3JjZWxhaW4gIHRlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlyPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICJ6JHIiID0gInokdGhlX2NvbW1pdCIgJiYKKwkJdGVzdCAxID0gJChnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gfCB3YyAtbCkKKwkpICYmCisJdGVzdF9jbXAgLmdpdC9mb28gLmdpdC9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLXBvcmNlbGFpbiBiYWQgdXJsJyAnCisJbWtfZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCA+LmdpdC9iYXIgLS1wb3JjZWxhaW4gYXNkZmFzZGZhc2QgcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBncmVwIC1xIERvbmUgLmdpdC9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLXBvcmNlbGFpbiByZWplY3RlZCcgJworCW1rX2VtcHR5ICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyXgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdHJ1ZSkgJiYKKworCWVjaG8gPi5naXQvZm9vICAiVG8gdGVzdHJlcG8iICAmJgorCWVjaG8gPj4uZ2l0L2ZvbyAiIQlyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlcglbcmVtb3RlIHJlamVjdGVkXSAoYnJhbmNoIGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCkiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCA+LmdpdC9iYXIgLS1wb3JjZWxhaW4gIHRlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9jbXAgLmdpdC9mb28gLmdpdC9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLXBvcmNlbGFpbiAtLWRyeS1ydW4gcmVqZWN0ZWQnICcKKwlta19lbXB0eSAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJKGNkIHRlc3RyZXBvICYmCisJCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL21hc3RlcgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdHJ1ZSkgJiYKKworCWVjaG8gPi5naXQvZm9vICAiVG8gdGVzdHJlcG8iICAmJgorCWVjaG8gPj4uZ2l0L2ZvbyAiIQlyZWZzL2hlYWRzL21hc3Rlcl46cmVmcy9oZWFkcy9tYXN0ZXIJW3JlamVjdGVkXSAobm9uLWZhc3QtZm9yd2FyZCkiICYmCisJZWNobyA+Pi5naXQvZm9vICJEb25lIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggPi5naXQvYmFyIC0tcG9yY2VsYWluICAtLWRyeS1ydW4gdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXJeOnJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9jbXAgLmdpdC9mb28gLmdpdC9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLXBydW5lJyAnCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgaGVhZHMvc2Vjb25kIGhlYWRzL2ZvbyBoZWFkcy9iYXIgJiYKKwlnaXQgcHVzaCAtLXBydW5lIHRlc3RyZXBvICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9maXJzdF9jb21taXQgaGVhZHMvc2Vjb25kICYmCisJISBjaGVja19wdXNoX3Jlc3VsdCAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9mb28gaGVhZHMvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wcnVuZSByZWZzcGVjJyAnCisJbWtfdGVzdCB0bXAvbWFzdGVyIHRtcC9zZWNvbmQgdG1wL2ZvbyB0bXAvYmFyICYmCisJZ2l0IHB1c2ggLS1wcnVuZSB0ZXN0cmVwbyAicmVmcy9oZWFkcy8qOnJlZnMvdG1wLyoiICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgdG1wL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfZmlyc3RfY29tbWl0IHRtcC9zZWNvbmQgJiYKKwkhIGNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfZmlyc3RfY29tbWl0IHRtcC9mb28gdG1wL2JhcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTctcHVzaC1taXJyb3Iuc2ggYi90L3Q1NTE3LXB1c2gtbWlycm9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyYWQyNjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE3LXB1c2gtbWlycm9yLnNoCkBAIC0wLDAgKzEsMjY4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVzaGluZyB0byBhIG1pcnJvciByZXBvc2l0b3J5JworCisuIC4vdGVzdC1saWIuc2gKKworRD1gcHdkYAorCitpbnZlcnQgKCkgeworCWlmICIkQCI7IHRoZW4KKwkJcmV0dXJuIDEKKwllbHNlCisJCXJldHVybiAwCisJZmkKK30KKworbWtfcmVwb19wYWlyICgpIHsKKwlybSAtcmYgbWFzdGVyIG1pcnJvciAmJgorCW1rZGlyIG1pcnJvciAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuCisJKSAmJgorCW1rZGlyIG1hc3RlciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCByZW1vdGUgYWRkICQxIHVwIC4uL21pcnJvcgorCSkKK30KKworCisjIEJSQU5DSCB0ZXN0cwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgY3JlYXRlcyBuZXcgYnJhbmNoZXMnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJbWFzdGVyX21hc3Rlcj0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJbWlycm9yX21hc3Rlcj0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAiJG1hc3Rlcl9tYXN0ZXIiID0gIiRtaXJyb3JfbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIHVwZGF0ZXMgZXhpc3RpbmcgYnJhbmNoZXMnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZWNobyB0d28gPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgZm9yY2UgdXBkYXRlcyBleGlzdGluZyBicmFuY2hlcycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQllY2hvIHR3byA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gdHdvICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJbWFzdGVyX21hc3Rlcj0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJbWlycm9yX21hc3Rlcj0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAiJG1hc3Rlcl9tYXN0ZXIiID0gIiRtaXJyb3JfbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIHJlbW92ZXMgYnJhbmNoZXMnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IGJyYW5jaCByZW1vdmUgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCBicmFuY2ggLUQgcmVtb3ZlCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWludmVydCBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW1vdmUKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgYWRkcywgdXBkYXRlcyBhbmQgcmVtb3ZlcyBicmFuY2hlcyB0b2dldGhlcicgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgYnJhbmNoIHJlbW92ZSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IGJyYW5jaCAtRCByZW1vdmUgJiYKKwkJZ2l0IGJyYW5jaCBhZGQgbWFzdGVyICYmCisJCWVjaG8gdHdvID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJbWFzdGVyX21hc3Rlcj0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJbWFzdGVyX2FkZD0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9hZGQpICYmCisJbWlycm9yX21hc3Rlcj0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJbWlycm9yX2FkZD0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9hZGQpICYmCisJdGVzdCAiJG1hc3Rlcl9tYXN0ZXIiID0gIiRtaXJyb3JfbWFzdGVyIiAmJgorCXRlc3QgIiRtYXN0ZXJfYWRkIiA9ICIkbWlycm9yX2FkZCIgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlpbnZlcnQgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVtb3ZlCisJKQorCisnCisKKworIyBUQUcgdGVzdHMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIGNyZWF0ZXMgbmV3IHRhZ3MnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IHRhZyAtZiB0bWFzdGVyIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdG1hc3RlcikgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdG1hc3RlcikgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgdXBkYXRlcyBleGlzdGluZyB0YWdzJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCB0YWcgLWYgdG1hc3RlciBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZWNobyB0d28gPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciBmb3JjZSB1cGRhdGVzIGV4aXN0aW5nIHRhZ3MnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IHRhZyAtZiB0bWFzdGVyIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQllY2hvIHR3byA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gdHdvICYmCisJCWdpdCB0YWcgLWYgdG1hc3RlciBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciByZW1vdmVzIHRhZ3MnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IHRhZyAtZiB0cmVtb3ZlIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQlnaXQgdGFnIC1kIHRyZW1vdmUKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJaW52ZXJ0IGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdHJlbW92ZQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciBhZGRzLCB1cGRhdGVzIGFuZCByZW1vdmVzIHRhZ3MgdG9nZXRoZXInICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IHRhZyAtZiB0bWFzdGVyIG1hc3RlciAmJgorCQlnaXQgdGFnIC1mIHRyZW1vdmUgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCB0YWcgLWQgdHJlbW92ZSAmJgorCQlnaXQgdGFnIHRhZGQgbWFzdGVyICYmCisJCWVjaG8gdHdvID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkJZ2l0IHRhZyAtZiB0bWFzdGVyIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdG1hc3RlcikgJiYKKwltYXN0ZXJfYWRkPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdGFkZCkgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdG1hc3RlcikgJiYKKwltaXJyb3JfYWRkPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdGFkZCkgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiICYmCisJdGVzdCAiJG1hc3Rlcl9hZGQiID0gIiRtaXJyb3JfYWRkIiAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWludmVydCBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RyZW1vdmUKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlLmZvby5taXJyb3IgYWRkcyBhbmQgcmVtb3ZlcyBicmFuY2hlcycgJworCisJbWtfcmVwb19wYWlyIC0tbWlycm9yICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgYnJhbmNoIGtlZXAgbWFzdGVyICYmCisJCWdpdCBicmFuY2ggcmVtb3ZlIG1hc3RlciAmJgorCQlnaXQgcHVzaCB1cCAmJgorCQlnaXQgYnJhbmNoIC1EIHJlbW92ZQorCQlnaXQgcHVzaCB1cAorCSkgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9rZWVwICYmCisJCWludmVydCBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW1vdmUKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlLmZvby5taXJyb3I9bm8gaGFzIG5vIGVmZmVjdCcgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS51cC5taXJyb3Igbm8gJiYKKwkJZ2l0IGJyYW5jaCBrZWVwIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQlnaXQgYnJhbmNoIC1EIGtlZXAgJiYKKwkJZ2l0IHB1c2ggdXAKKwkpICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMva2VlcAorCSkKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTgtZmV0Y2gtZXhpdC1zdGF0dXMuc2ggYi90L3Q1NTE4LWZldGNoLWV4aXQtc3RhdHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyMDYwYmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE4LWZldGNoLWV4aXQtc3RhdHVzLnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRG1pdHJ5IFYuIExldmluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoIGV4aXQgc3RhdHVzIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gc2lkZSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gc2lkZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gbmV4dCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gbmV4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZmFzdC1mb3J3YXJkIGZldGNoJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLiBtYXN0ZXI6c2lkZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlZCB1cGRhdGUnICcKKworCWdpdCBmZXRjaCAuICttYXN0ZXI6c2lkZQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxOS1wdXNoLWFsdGVybmF0ZXMuc2ggYi90L3Q1NTE5LXB1c2gtYWx0ZXJuYXRlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMDBjOWIwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxOS1wdXNoLWFsdGVybmF0ZXMuc2gKQEAgLTAsMCArMSwxNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdXNoIHRvIGEgcmVwb3NpdG9yeSB0aGF0IGJvcnJvd3MgZnJvbSBlbHNld2hlcmUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBhbGljZS1wdWIgJiYKKwkoCisJCWNkIGFsaWNlLXB1YiAmJgorCQlHSVRfRElSPS4gZ2l0IGluaXQKKwkpICYmCisJbWtkaXIgYWxpY2Utd29yayAmJgorCSgKKwkJY2QgYWxpY2Utd29yayAmJgorCQlnaXQgaW5pdCAmJgorCQk+ZmlsZSAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJCWdpdCBwdXNoIC4uL2FsaWNlLXB1YiBtYXN0ZXIKKwkpICYmCisKKwkjIFByb2plY3QgQm9iIGlzIGEgZm9yayBvZiBwcm9qZWN0IEFsaWNlCisJbWtkaXIgYm9iLXB1YiAmJgorCSgKKwkJY2QgYm9iLXB1YiAmJgorCQlHSVRfRElSPS4gZ2l0IGluaXQgJiYKKwkJbWtkaXIgLXAgb2JqZWN0cy9pbmZvICYmCisJCWVjaG8gLi4vLi4vYWxpY2UtcHViL29iamVjdHMgPm9iamVjdHMvaW5mby9hbHRlcm5hdGVzCisJKSAmJgorCWdpdCBjbG9uZSBhbGljZS1wdWIgYm9iLXdvcmsgJiYKKwkoCisJCWNkIGJvYi13b3JrICYmCisJCWdpdCBwdXNoIC4uL2JvYi1wdWIgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGljZSB3b3JrcyBhbmQgcHVzaGVzJyAnCisJKAorCQljZCBhbGljZS13b3JrICYmCisJCWVjaG8gbW9yZSA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCQlnaXQgcHVzaCAuLi9hbGljZS1wdWIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JvYiBmZXRjaGVzIGZyb20gYWxpY2UsIHdvcmtzIGFuZCBwdXNoZXMnICcKKwkoCisJCSMgQm9iIGFjcXVpcmVzIHdoYXQgQWxpY2UgZGlkIGluIGhpcyB3b3JrIHRyZWUgZmlyc3QuCisJCSMgRXZlbiB0aG91Z2ggdGhlc2Ugb2JqZWN0cyBhcmUgbm90IGRpcmVjdGx5IGluCisJCSMgdGhlIHB1YmxpYyByZXBvc2l0b3J5IG9mIEJvYiwgdGhpcyBwdXNoIGRvZXMgbm90CisJCSMgbmVlZCB0byBzZW5kIHRoZSBjb21taXQgQm9iIHJlY2VpdmVkIGZyb20gQWxpY2UKKwkJIyB0byBoaXMgcHVibGljIHJlcG9zaXRvcnksIGFzIGFsbCB0aGUgb2JqZWN0IEFsaWNlCisJCSMgaGFzIGF0IGhlciBwdWJsaWMgcmVwb3NpdG9yeSBhcmUgYXZhaWxhYmxlIHRvIGl0CisJCSMgdmlhIGl0cyBhbHRlcm5hdGVzLgorCQljZCBib2Itd29yayAmJgorCQlnaXQgcHVsbCAuLi9hbGljZS1wdWIgbWFzdGVyICYmCisJCWVjaG8gbW9yZSBib2IgPmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSB0aGlyZCAmJgorCQlnaXQgcHVzaCAuLi9ib2ItcHViCisJKSAmJgorCisJIyBDaGVjayB0aGF0IHRoZSBzZWNvbmQgY29tbWl0IGJ5IEFsaWNlIGlzIG5vdCBzZW50CisJIyB0byAuLi9ib2ItcHViCisJKAorCQljZCBib2ItcHViICYmCisJCXNlY29uZD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJCXJtIC1mIG9iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtdCAkc2Vjb25kICYmCisJCWVjaG8gLi4vLi4vYWxpY2UtcHViL29iamVjdHMgPm9iamVjdHMvaW5mby9hbHRlcm5hdGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbi11cCBpbiBjYXNlIHRoZSBwcmV2aW91cyBmYWlsZWQnICcKKwkoCisJCWNkIGJvYi1wdWIgJiYKKwkJZWNobyAuLi8uLi9hbGljZS1wdWIvb2JqZWN0cyA+b2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWNlIHdvcmtzIGFuZCBwdXNoZXMgYWdhaW4nICcKKwkoCisJCSMgQWxpY2UgZG9lcyBub3QgY2FyZSB3aGF0IEJvYiBkb2VzLiAgU2hlIGRvZXMgbm90CisJCSMgZXZlbiBoYXZlIHRvIGJlIGF3YXJlIG9mIGhpcyBleGlzdGVuY2UuICBTaGUganVzdAorCQkjIGtlZXBzIHdvcmtpbmcgYW5kIHB1c2hpbmcKKwkJY2QgYWxpY2Utd29yayAmJgorCQllY2hvIG1vcmUgYWxpY2UgPmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBmb3VydGggJiYKKwkJZ2l0IHB1c2ggLi4vYWxpY2UtcHViCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib2Igd29ya3MgYW5kIHB1c2hlcycgJworCSgKKwkJIyBUaGlzIHRpbWUgQm9iIGRvZXMgbm90IHB1bGwgZnJvbSBBbGljZSwgYW5kCisJCSMgdGhlIG1hc3RlciBicmFuY2ggYXQgaGVyIHB1YmxpYyByZXBvc2l0b3J5IHBvaW50cworCQkjIGF0IGEgY29tbWl0IEJvYiBkb2VzIG5vdCBrbm93IGFib3V0LiAgVGhpcyBzaG91bGQKKwkJIyBub3QgcHJldmVudCB0aGUgcHVzaCBieSBCb2IgZnJvbSBzdWNjZWVkaW5nLgorCQljZCBib2Itd29yayAmJgorCQllY2hvIHlldCBtb3JlIGJvYiA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGZpZnRoICYmCisJCWdpdCBwdXNoIC4uL2JvYi1wdWIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWNlIHdvcmtzIGFuZCBwdXNoZXMgeWV0IGFnYWluJyAnCisJKAorCQkjIEFsaWNlIGRvZXMgbm90IGNhcmUgd2hhdCBCb2IgZG9lcy4gIFNoZSBkb2VzIG5vdAorCQkjIGV2ZW4gaGF2ZSB0byBiZSBhd2FyZSBvZiBoaXMgZXhpc3RlbmNlLiAgU2hlIGp1c3QKKwkJIyBrZWVwcyB3b3JraW5nIGFuZCBwdXNoaW5nCisJCWNkIGFsaWNlLXdvcmsgJiYKKwkJZWNobyBtb3JlIGFuZCBtb3JlIGFsaWNlID5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2l4dGguMSAmJgorCQllY2hvIG1vcmUgYW5kIG1vcmUgYWxpY2UgPj5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2l4dGguMiAmJgorCQllY2hvIG1vcmUgYW5kIG1vcmUgYWxpY2UgPj5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2l4dGguMyAmJgorCQlnaXQgcHVzaCAuLi9hbGljZS1wdWIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JvYiB3b3JrcyBhbmQgcHVzaGVzIGFnYWluJyAnCisJKAorCQljZCBhbGljZS1wdWIgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBtYXN0ZXIgPi4uL2JvYi13b3JrL2NvbW1pdAorCSkgJiYKKwkoCisJCSMgVGhpcyB0aW1lIEJvYiBkb2VzIG5vdCBwdWxsIGZyb20gQWxpY2UsIGFuZAorCQkjIHRoZSBtYXN0ZXIgYnJhbmNoIGF0IGhlciBwdWJsaWMgcmVwb3NpdG9yeSBwb2ludHMKKwkJIyBhdCBhIGNvbW1pdCBCb2IgZG9lcyBub3QgZnVsbHkga25vdyBhYm91dCwgYnV0CisJCSMgaGUgaGFwcGVucyB0byBoYXZlIHRoZSBjb21taXQgb2JqZWN0IChidXQgbm90IHRoZQorCQkjIG5lY2Vzc2FyeSB0cmVlKSBpbiBoaXMgcmVwb3NpdG9yeSBmcm9tIEFsaWNlLgorCQkjIFRoaXMgc2hvdWxkIG5vdCBwcmV2ZW50IHRoZSBwdXNoIGJ5IEJvYiBmcm9tCisJCSMgc3VjY2VlZGluZy4KKwkJY2QgYm9iLXdvcmsgJiYKKwkJZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyBjb21taXQgJiYKKwkJZWNobyBldmVuIG1vcmUgYm9iID5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2V2ZW50aCAmJgorCQlnaXQgcHVzaCAuLi9ib2ItcHViCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjAtcHVsbC5zaCBiL3QvdDU1MjAtcHVsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNTMwNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyMC1wdWxsLnNoCkBAIC0wLDAgKzEsMjYyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVsbGluZyBpbnRvIHZvaWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCittb2RpZnkgKCkgeworCXNlZCAtZSAiJDEiIDwiJDIiID4iJDIueCIgJiYKKwltdiAiJDIueCIgIiQyIgorfQorCitEPWBwd2RgCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyBmaWxlID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBvcmlnaW5hbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgaW50byB2b2lkJyAnCisJbWtkaXIgY2xvbmVkICYmCisJY2QgY2xvbmVkICYmCisJZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAuLgorJworCitjZCAiJEQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoZSByZXN1bHRzJyAnCisJdGVzdCAtZiBmaWxlICYmCisJdGVzdCAtZiBjbG9uZWQvZmlsZSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmVkL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBpbnRvIHZvaWQgdXNpbmcgbWFzdGVyOm1hc3RlcicgJworCW1rZGlyIGNsb25lZC11aG8gJiYKKwkoCisJCWNkIGNsb25lZC11aG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHB1bGwgLi4gbWFzdGVyOm1hc3RlcgorCSkgJiYKKwl0ZXN0IC1mIGZpbGUgJiYKKwl0ZXN0IC1mIGNsb25lZC11aG8vZmlsZSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmVkLXVoby9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgaW50byB2b2lkIGRvZXMgbm90IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZXMnICcKKwlnaXQgaW5pdCBjbG9uZWQtdW50cmFja2VkICYmCisJKAorCQljZCBjbG9uZWQtdW50cmFja2VkICYmCisJCWVjaG8gdW50cmFja2VkID5maWxlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4uIG1hc3RlciAmJgorCQllY2hvIHVudHJhY2tlZCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC4gYXMgYSByZW1vdGUnICcKKworCWdpdCBicmFuY2ggY29weSBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5jb3B5LnJlbW90ZSAuICYmCisJZ2l0IGNvbmZpZyBicmFuY2guY29weS5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCWVjaG8gdXBkYXRlZCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdXBkYXRlZCAmJgorCWdpdCBjaGVja291dCBjb3B5ICYmCisJdGVzdCBgY2F0IGZpbGVgID0gZmlsZSAmJgorCWdpdCBwdWxsICYmCisJdGVzdCBgY2F0IGZpbGVgID0gdXBkYXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgZGVmYXVsdCByZW1vdGUgLiBzaG91bGQgbm90IGJyZWFrIGV4cGxpY2l0IHB1bGwnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kIG1hc3Rlcl4gJiYKKwllY2hvIG1vZGlmaWVkID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtb2RpZmllZCAmJgorCWdpdCBjaGVja291dCBjb3B5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3QgYGNhdCBmaWxlYCA9IGZpbGUgJiYKKwlnaXQgcHVsbCAuIHNlY29uZCAmJgorCXRlc3QgYGNhdCBmaWxlYCA9IG1vZGlmaWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlJyAnCisJZ2l0IGJyYW5jaCB0by1yZWJhc2UgJiYKKwllY2hvIG1vZGlmaWVkIGFnYWluID4gZmlsZSAmJgorCWdpdCBjb21taXQgLW0gZmlsZSBmaWxlICYmCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgorCWVjaG8gbmV3ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IGZpbGUiICYmCisJZ2l0IHRhZyBiZWZvcmUtcmViYXNlICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLiBjb3B5ICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIGNvcHkpICYmCisJdGVzdCBuZXcgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZTIpCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLnJlYmFzZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCWdpdCBjb25maWcgLS1ib29sIHB1bGwucmViYXNlIHRydWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS11bnNldCBwdWxsLnJlYmFzZSIgJiYKKwlnaXQgcHVsbCAuIGNvcHkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgY29weSkgJiYKKwl0ZXN0IG5ldyA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBicmFuY2gudG8tcmViYXNlLnJlYmFzZSB0cnVlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2UiICYmCisJZ2l0IHB1bGwgLiBjb3B5ICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIGNvcHkpICYmCisJdGVzdCBuZXcgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZTIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaC50by1yZWJhc2UucmViYXNlIHNob3VsZCBvdmVycmlkZSBwdWxsLnJlYmFzZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCWdpdCBjb25maWcgLS1ib29sIHB1bGwucmViYXNlIHRydWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS11bnNldCBwdWxsLnJlYmFzZSIgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBicmFuY2gudG8tcmViYXNlLnJlYmFzZSBmYWxzZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNvbmZpZyAtLXVuc2V0IGJyYW5jaC50by1yZWJhc2UucmViYXNlIiAmJgorCWdpdCBwdWxsIC4gY29weSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSAhPSAkKGdpdCByZXYtcGFyc2UgY29weSkgJiYKKwl0ZXN0IG5ldyA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2Ugd2l0aCByZWJhc2VkIHVwc3RyZWFtJyAnCisKKwlnaXQgcmVtb3RlIGFkZCAtZiBtZSAuICYmCisJZ2l0IGNoZWNrb3V0IGNvcHkgJiYKKwlnaXQgdGFnIGNvcHktb3JpZyAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwllY2hvIGNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiA+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGNvbmZsaWN0IGZpbGUgJiYKKwlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCisJZWNobyBmaWxlID4gZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHRvLXJlYmFzZSBmaWxlMiAmJgorCWdpdCB0YWcgdG8tcmViYXNlLW9yaWcgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSBtZSBjb3B5ICYmCisJdGVzdCAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA9ICIkKGNhdCBmaWxlKSIgJiYKKwl0ZXN0IGZpbGUgPSAkKGNhdCBmaWxlMikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSB3aXRoIHJlYmFzZWQgZGVmYXVsdCB1cHN0cmVhbScgJworCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL21lL2NvcHkgY29weS1vcmlnICYmCisJZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLWIgdG8tcmViYXNlMiBtZS9jb3B5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBwdWxsIC0tcmViYXNlICYmCisJdGVzdCAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA9ICIkKGNhdCBmaWxlKSIgJiYKKwl0ZXN0IGZpbGUgPSAkKGNhdCBmaWxlMikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2VkIHVwc3RyZWFtICsgZmV0Y2ggKyBwdWxsIC0tcmViYXNlJyAnCisKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvbWUvY29weSBjb3B5LW9yaWcgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLWIgdG8tcmViYXNlMyBtZS9jb3B5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBmZXRjaCAmJgorCWdpdCBwdWxsIC0tcmViYXNlICYmCisJdGVzdCAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA9ICIkKGNhdCBmaWxlKSIgJiYKKwl0ZXN0IGZpbGUgPSAiJChjYXQgZmlsZTIpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2UgZGllcyBlYXJseSB3aXRoIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5JyAnCisKKwlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL21lL2NvcHkgY29weV4gJiYKKwlDT1BZPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtZS9jb3B5KSAmJgorCWdpdCByZWJhc2UgLS1vbnRvICRDT1BZIGNvcHkgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC50by1yZWJhc2UucmVtb3RlIG1lICYmCisJZ2l0IGNvbmZpZyBicmFuY2gudG8tcmViYXNlLm1lcmdlIHJlZnMvaGVhZHMvY29weSAmJgorCWdpdCBjb25maWcgYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2UgdHJ1ZSAmJgorCWVjaG8gZGlydHkgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsICYmCisJdGVzdCAkQ09QWSA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtZS9jb3B5KSAmJgorCWdpdCBjaGVja291dCBIRUFEIC0tIGZpbGUgJiYKKwlnaXQgcHVsbCAmJgorCXRlc3QgJENPUFkgIT0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1lL2NvcHkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSB3b3JrcyBvbiBicmFuY2ggeWV0IHRvIGJlIGJvcm4nICcKKwlnaXQgcmV2LXBhcnNlIG1hc3RlciA+ZXhwZWN0ICYmCisJbWtkaXIgZW1wdHlfcmVwbyAmJgorCShjZCBlbXB0eV9yZXBvICYmCisJIGdpdCBpbml0ICYmCisJIGdpdCBwdWxsIC0tcmViYXNlIC4uIG1hc3RlciAmJgorCSBnaXQgcmV2LXBhcnNlIEhFQUQgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBkZXRlY3RpbmcgdXBzdHJlYW1lZCBjaGFuZ2VzJyAnCisJbWtkaXIgc3JjICYmCisJKGNkIHNyYyAmJgorCSBnaXQgaW5pdCAmJgorCSBwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbjlcbjEwXG4iID4gc3R1ZmYgJiYKKwkgZ2l0IGFkZCBzdHVmZiAmJgorCSBnaXQgY29tbWl0IC1tICJJbml0aWFsIHJldmlzaW9uIgorCSkgJiYKKwlnaXQgY2xvbmUgc3JjIGRzdCAmJgorCShjZCBzcmMgJiYKKwkgbW9kaWZ5IHMvNS80My8gc3R1ZmYgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiNS0+NDMiICYmCisJIG1vZGlmeSBzLzYvNDIvIHN0dWZmICYmCisJIGdpdCBjb21taXQgLWEgLW0gIk1ha2UgaXQgYmlnZ2VyIgorCSkgJiYKKwkoY2QgZHN0ICYmCisJIG1vZGlmeSBzLzUvNDMvIHN0dWZmICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkluZGVwZW5kZW50IGRpc2NvdmVyeSBvZiA1LT40MyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tcmViYXNlIGRldGVjdHMgdXBzdHJlYW1lZCBjaGFuZ2VzJyAnCisJKGNkIGRzdCAmJgorCSBnaXQgcHVsbCAtLXJlYmFzZSAmJgorCSB0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgYXZvaWRpbmcgcmVhcHBseWluZyBvbGQgcGF0Y2hlcycgJworCShjZCBkc3QgJiYKKwkgdGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXIKKwkpICYmCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgc3JjLXJlcGxhY2UuZ2l0ICYmCisJcm0gLXJmIHNyYyAmJgorCW12IHNyYy1yZXBsYWNlLmdpdCBzcmMgJiYKKwkoY2QgZHN0ICYmCisJIG1vZGlmeSBzLzIvMjIvIHN0dWZmICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkNoYW5nZSAyIiAmJgorCSBtb2RpZnkgcy8zLzMzLyBzdHVmZiAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgMyIgJiYKKwkgbW9kaWZ5IHMvNC80NC8gc3R1ZmYgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIDQiICYmCisJIGdpdCBwdXNoICYmCisKKwkgbW9kaWZ5IHMvNDQvNTUvIHN0dWZmICYmCisJIGdpdCBjb21taXQgLS1hbWVuZCAtYSAtbSAiTW9kaWZpZWQgQ2hhbmdlIDQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLXJlYmFzZSBkb2VzIG5vdCByZWFwcGx5IG9sZCBwYXRjaGVzJyAnCisJKGNkIGRzdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZSAmJgorCSB0ZXN0IDEgPSAkKGZpbmQgLmdpdC9yZWJhc2UtYXBwbHkgLW5hbWUgIjAwMCoiIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLXJlYmFzZSBhZ2FpbnN0IGxvY2FsIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtYiBjb3B5MiB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBwdWxsIC0tcmViYXNlIC4gdG8tcmViYXNlICYmCisJdGVzdCAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA9ICIkKGNhdCBmaWxlKSIgJiYKKwl0ZXN0IGZpbGUgPSAiJChjYXQgZmlsZTIpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjEtcHVsbC1vcHRpb25zLnNoIGIvdC90NTUyMS1wdWxsLW9wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWIwNjY5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjEtcHVsbC1vcHRpb25zLnNoCkBAIC0wLDAgKzEsOTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdWxsIG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHBhcmVudCAmJgorCShjZCBwYXJlbnQgJiYgZ2l0IGluaXQgJiYKKwkgZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gb25lKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtcScgJworCW1rZGlyIGNsb25lZHEgJiYKKwkoY2QgY2xvbmVkcSAmJiBnaXQgaW5pdCAmJgorCWdpdCBwdWxsIC1xICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKKwl0ZXN0ICEgLXMgZXJyICYmCisJdGVzdCAhIC1zIG91dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwnICcKKwlta2RpciBjbG9uZWQgJiYKKwkoY2QgY2xvbmVkICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3QgLXMgZXJyICYmCisJdGVzdCAhIC1zIG91dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXYnICcKKwlta2RpciBjbG9uZWR2ICYmCisJKGNkIGNsb25lZHYgJiYgZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAtdiAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdCAtcyBlcnIgJiYKKwl0ZXN0ICEgLXMgb3V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtdiAtcScgJworCW1rZGlyIGNsb25lZHZxICYmCisJKGNkIGNsb25lZHZxICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXYgLXEgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3QgISAtcyBvdXQgJiYKKwl0ZXN0ICEgLXMgZXJyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtcSAtdicgJworCW1rZGlyIGNsb25lZHF2ICYmCisJKGNkIGNsb25lZHF2ICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXEgLXYgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3QgISAtcyBvdXQgJiYKKwl0ZXN0IC1zIGVycikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1mb3JjZScgJworCW1rZGlyIGNsb25lZG9sZHN0eWxlICYmCisJKGNkIGNsb25lZG9sZHN0eWxlICYmIGdpdCBpbml0ICYmCisJY2F0ID4+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtyZW1vdGUgIm9uZSJdCisJCXVybCA9IC4uL3BhcmVudAorCQlmZXRjaCA9IHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWlycm9yCisJW3JlbW90ZSAidHdvIl0KKwkJdXJsID0gLi4vcGFyZW50CisJCWZldGNoID0gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4KKwlbYnJhbmNoICJtYXN0ZXIiXQorCQlyZW1vdGUgPSB0d28KKwkJbWVyZ2UgPSByZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCWdpdCBwdWxsIHR3byAmJgorCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgYnJhbmNoIC1mIG9yaWdpbiAmJgorCWdpdCBwdWxsIC0tYWxsIC0tZm9yY2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tYWxsJyAnCisJbWtkaXIgY2xvbmVkbXVsdGkgJiYKKwkoY2QgY2xvbmVkbXVsdGkgJiYgZ2l0IGluaXQgJiYKKwljYXQgPj4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW3JlbW90ZSAib25lIl0KKwkJdXJsID0gLi4vcGFyZW50CisJCWZldGNoID0gcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vbmUvKgorCVtyZW1vdGUgInR3byJdCisJCXVybCA9IC4uL3BhcmVudAorCQlmZXRjaCA9IHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvdHdvLyoKKwlbYnJhbmNoICJtYXN0ZXIiXQorCQlyZW1vdGUgPSBvbmUKKwkJbWVyZ2UgPSByZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCWdpdCBwdWxsIC0tYWxsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjItcHVsbC1zeW1saW5rLnNoIGIvdC90NTUyMi1wdWxsLXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGU5YjIwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjItcHVsbC1zeW1saW5rLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdWxsaW5nIGZyb20gc3ltbGlua2VkIHN1YmRpcicKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhlIHNjZW5hcmlvIHdlIGFyZSBidWlsZGluZzoKKyMKKyMgICB0cmFzaFwgZGlyZWN0b3J5LworIyAgICAgY2xvbmUtcmVwby8KKyMgICAgICAgc3ViZGlyLworIyAgICAgICAgIGJhcgorIyAgICAgc3ViZGlyLWxpbmsgLT4gY2xvbmUtcmVwby9zdWJkaXIvCisjCisjIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyBzdWJkaXItbGluay4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBzZXR1cCAnCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyBmaWxlID5zdWJkaXIvZmlsZSAmJgorCWdpdCBhZGQgc3ViZGlyL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1xIC1tIGZpbGUgJiYKKwlnaXQgY2xvbmUgLXEgLiBjbG9uZS1yZXBvICYmCisJbG4gLXMgY2xvbmUtcmVwby9zdWJkaXIvIHN1YmRpci1saW5rICYmCisJKAorCQljZCBjbG9uZS1yZXBvICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuCisJKSAmJgorCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuCisnCisKKyMgRGVtb25zdHJhdGUgdGhhdCB0aGluZ3Mgd29yayBpZiB3ZSBqdXN0IGF2b2lkIHRoZSBzeW1saW5rCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwdWxsaW5nIGZyb20gcmVhbCBzdWJkaXInICcKKwkoCisJCWVjaG8gcmVhbCA+c3ViZGlyL2ZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSByZWFsIHN1YmRpci9maWxlICYmCisJCWNkIGNsb25lLXJlcG8vc3ViZGlyLyAmJgorCQlnaXQgcHVsbCAmJgorCQl0ZXN0IHJlYWwgPSAkKGNhdCBmaWxlKQorCSkKKycKKworIyBGcm9tIHN1YmRpci1saW5rLCBwdWxsaW5nIHNob3VsZCB3b3JrIGFzIGl0IGRvZXMgZnJvbQorIyBjbG9uZS1yZXBvL3N1YmRpci8uCisjCisjIEluc3RlYWQsIHRoZSBlcnJvciBwdWxsIGdhdmUgd2FzOgorIworIyAgIGZhdGFsOiAnb3JpZ2luJzogdW5hYmxlIHRvIGNoZGlyIG9yIG5vdCBhIGdpdCBhcmNoaXZlCisjICAgZmF0YWw6IFRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5CisjCisjIGJlY2F1c2UgZ2l0IHdvdWxkIGZpbmQgdGhlIC5naXQvY29uZmlnIGZvciB0aGUgInRyYXNoIGRpcmVjdG9yeSIKKyMgcmVwbywgbm90IGZvciB0aGUgY2xvbmUtcmVwbyByZXBvLiAgVGhlICJ0cmFzaCBkaXJlY3RvcnkiIHJlcG8KKyMgaGFkIG5vIGVudHJ5IGZvciBvcmlnaW4uICBHaXQgZm91bmQgdGhlIHdyb25nIC5naXQgYmVjYXVzZQorIyBnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwIHByaW50ZWQgYSBwYXRoIHJlbGF0aXZlIHRvCisjIGNsb25lLXJlcG8vc3ViZGlyLywgbm90IHN1YmRpci1saW5rLy4gIEdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXAKKyMgdXNlZCB0aGUgY29ycmVjdCAuZ2l0LCBidXQgd2hlbiB0aGUgZ2l0IHB1bGwgc2hlbGwgc2NyaXB0IGRpZAorIyAiY2QgYGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXBgIiwgaXQgZW5kZWQgdXAgaW4gdGhlIHdyb25nCisjIGRpcmVjdG9yeS4gIEEgUE9TSVggc2hlbGwncyAiY2QiIHdvcmtzIGEgbGl0dGxlIGRpZmZlcmVudGx5CisjIHRoYW4gY2hkaXIoKSBpbiBDOyAiY2QgLVAiIGlzIG11Y2ggY2xvc2VyIHRvIGNoZGlyKCkuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwdWxsaW5nIGZyb20gc3ltbGlua2VkIHN1YmRpcicgJworCSgKKwkJZWNobyBsaW5rID5zdWJkaXIvZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIGxpbmsgc3ViZGlyL2ZpbGUgJiYKKwkJY2Qgc3ViZGlyLWxpbmsvICYmCisJCWdpdCBwdWxsICYmCisJCXRlc3QgbGluayA9ICQoY2F0IGZpbGUpCisJKQorJworCisjIFByb3ZlIHRoYXQgdGhlIHJlbW90ZSBlbmQgcmVhbGx5IGlzIGEgcmVwbywgYW5kIG90aGVyIGNvbW1hbmRzCisjIHdvcmsgZmluZSBpbiB0aGlzIGNvbnRleHQuICBJdCdzIGp1c3QgdGhhdCAiZ2l0IHB1bGwiIGJyZWFrcy4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3B1c2hpbmcgZnJvbSBzeW1saW5rZWQgc3ViZGlyJyAnCisJKAorCQljZCBzdWJkaXItbGluay8gJiYKKwkJZWNobyBwdXNoID5maWxlICYmCisJCWdpdCBjb21taXQgLW0gcHVzaCAuL2ZpbGUgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJdGVzdCBwdXNoID0gJChnaXQgc2hvdyBIRUFEOnN1YmRpci9maWxlKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaCBiL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNjgzZGYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyMy1wdXNoLXVwc3RyZWFtLnNoCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVzaCB3aXRoIC0tc2V0LXVwc3RyZWFtJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCitlbnN1cmVfZnJlc2hfdXBzdHJlYW0oKSB7CisJcm0gLXJmIHBhcmVudCAmJiBnaXQgaW5pdCAtLWJhcmUgcGFyZW50Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUgcGFyZW50JyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisJZ2l0IHJlbW90ZSBhZGQgdXBzdHJlYW0gcGFyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxvY2FsIGNvbW1pdCcgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK2NoZWNrX2NvbmZpZygpIHsKKwkoZWNobyAkMjsgZWNobyAkMykgPmV4cGVjdC4kMQorCShnaXQgY29uZmlnIGJyYW5jaC4kMS5yZW1vdGUKKwkgZ2l0IGNvbmZpZyBicmFuY2guJDEubWVyZ2UpID5hY3R1YWwuJDEKKwl0ZXN0X2NtcCBleHBlY3QuJDEgYWN0dWFsLiQxCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgbWFzdGVyOm1hc3RlcicgJworCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlcjptYXN0ZXIgJiYKKwljaGVja19jb25maWcgbWFzdGVyIHVwc3RyZWFtIHJlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgbWFzdGVyOm90aGVyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyOm90aGVyICYmCisJY2hlY2tfY29uZmlnIG1hc3RlciB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgLS1kcnktcnVuIG1hc3RlcjpvdGhlclgnICcKKwlnaXQgcHVzaCAtdSAtLWRyeS1ydW4gdXBzdHJlYW0gbWFzdGVyOm90aGVyWCAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IG1hc3RlcjI6bWFzdGVyMicgJworCWdpdCBicmFuY2ggbWFzdGVyMiAmJgorCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlcjI6bWFzdGVyMiAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIyIHVwc3RyZWFtIHJlZnMvaGVhZHMvbWFzdGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IG1hc3RlcjI6b3RoZXIyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyMjpvdGhlcjIgJiYKKwljaGVja19jb25maWcgbWFzdGVyMiB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IDptYXN0ZXIyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gOm1hc3RlcjIgJiYKKwljaGVja19jb25maWcgbWFzdGVyMiB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IC0tYWxsJyAnCisJZ2l0IGJyYW5jaCBhbGwxICYmCisJZ2l0IGJyYW5jaCBhbGwyICYmCisJZ2l0IHB1c2ggLXUgLS1hbGwgJiYKKwljaGVja19jb25maWcgYWxsMSB1cHN0cmVhbSByZWZzL2hlYWRzL2FsbDEgJiYKKwljaGVja19jb25maWcgYWxsMiB1cHN0cmVhbSByZWZzL2hlYWRzL2FsbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtdSBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGhlYWRicmFuY2ggJiYKKwlnaXQgcHVzaCAtdSB1cHN0cmVhbSBIRUFEICYmCisJY2hlY2tfY29uZmlnIGhlYWRicmFuY2ggdXBzdHJlYW0gcmVmcy9oZWFkcy9oZWFkYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdwcm9ncmVzcyBtZXNzYWdlcyBnbyB0byB0dHknICcKKwllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKKworCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyID5vdXQgMj5lcnIgJiYKKwlncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBtZXNzYWdlcyBkbyBub3QgZ28gdG8gbm9uLXR0eScgJworCWVuc3VyZV9mcmVzaF91cHN0cmVhbSAmJgorCisJIyBza2lwIHByb2dyZXNzIG1lc3NhZ2VzLCBzaW5jZSBzdGRlcnIgaXMgbm9uLXR0eQorCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlciA+b3V0IDI+ZXJyICYmCisJISBncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBtZXNzYWdlcyBnbyB0byBub24tdHR5IChmb3JjZWQpJyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisKKwkjIGZvcmNlIHByb2dyZXNzIG1lc3NhZ2VzIHRvIHN0ZGVyciwgZXZlbiB0aG91Z2ggaXQgaXMgbm9uLXR0eQorCWdpdCBwdXNoIC11IC0tcHJvZ3Jlc3MgdXBzdHJlYW0gbWFzdGVyID5vdXQgMj5lcnIgJiYKKwlncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHVzaCAtcSBzdXBwcmVzc2VzIHByb2dyZXNzJyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBwdXNoIC11IC1xIHVwc3RyZWFtIG1hc3RlciA+b3V0IDI+ZXJyICYmCisJISBncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHVzaCAtLW5vLXByb2dyZXNzIHN1cHByZXNzZXMgcHJvZ3Jlc3MnICcKKwllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKKworCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLXUgLS1uby1wcm9ncmVzcyB1cHN0cmVhbSBtYXN0ZXIgPm91dCAyPmVyciAmJgorCSEgZ3JlcCAiVW5wYWNraW5nIG9iamVjdHMiIGVyciAmJgorCSEgZ3JlcCAiV3JpdGluZyBvYmplY3RzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3F1aWV0IHB1c2gnICcKKwllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKKworCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLS1xdWlldCAtLW5vLXByb2dyZXNzIHVwc3RyZWFtIG1hc3RlciAyPiYxIHwgdGVlIG91dHB1dCAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTI0LXB1bGwtbXNnLnNoIGIvdC90NTUyNC1wdWxsLW1zZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Y2NjZWNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyNC1wdWxsLW1zZy5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHB1bGwgbWVzc2FnZSBnZW5lcmF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworZG9sbGFyPSckRG9sbGFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGFmaWxlIG9yaWdpbmFsICYmCisJZ2l0IGNsb25lIC4gY2xvbmVkICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZWNobyBhZGRlZCA+YmZpbGUgJiYKKwkJZ2l0IGFkZCBiZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGJmaWxlIgorCSkgJiYKKwl0ZXN0X3RpY2sgJiYgdGVzdF90aWNrICYmCisJZWNobyAib3JpZ2luYWwgJGRvbGxhciIgPmFmaWxlICYmCisJZ2l0IGFkZCBhZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImRvIG5vdCBjbG9iYmVyICRkb2xsYXIgc2lnbnMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcHVsbCAnCisoCisJY2QgY2xvbmVkICYmCisJZ2l0IHB1bGwgLS1sb2cgJiYKKwlnaXQgbG9nIC0yICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yZXN1bHQgJiYKKwlncmVwIERvbGxhciByZXN1bHQKKykKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTI1LWZldGNoLXRhZ29wdC5zaCBiL3QvdDU1MjUtZmV0Y2gtdGFnb3B0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRmYmY3YTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTI1LWZldGNoLXRhZ29wdC5zaApAQCAtMCwwICsxLDQxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGFnb3B0IHZhcmlhYmxlIGFmZmVjdHMgImdpdCBmZXRjaCIgYW5kIGlzIG92ZXJyaWRkZW4gYnkgY29tbWFuZGxpbmUuJworCisuIC4vdGVzdC1saWIuc2gKKworc2V0dXBfY2xvbmUgKCkgeworCWdpdCBjbG9uZSAtLW1pcnJvciAuICQxICYmCisJZ2l0IHJlbW90ZSBhZGQgcmVtb3RlXyQxICQxICYmCisJKGNkICQxICYmCisJZ2l0IHRhZyB0YWdfJDEpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IHRlc3QgJiYKKwlzZXR1cF9jbG9uZSBvbmUgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZW1vdGVfb25lLnRhZ29wdCAtLW5vLXRhZ3MgJiYKKwlzZXR1cF9jbG9uZSB0d28gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZW1vdGVfdHdvLnRhZ29wdCAtLXRhZ3MKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIHdpdGggdGFnb3B0PS0tbm8tdGFncyBkb2VzIG5vdCBnZXQgdGFnIiAnCisJZ2l0IGZldGNoIHJlbW90ZV9vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgdGFnX29uZQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggLS10YWdzIHdpdGggdGFnb3B0PS0tbm8tdGFncyBnZXRzIHRhZyIgJworCWdpdCBmZXRjaCAtLXRhZ3MgcmVtb3RlX29uZSAmJgorCWdpdCBzaG93LXJlZiB0YWdfb25lCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCAtLW5vLXRhZ3Mgd2l0aCB0YWdvcHQ9LS10YWdzIGRvZXMgbm90IGdldCB0YWciICcKKwlnaXQgZmV0Y2ggLS1uby10YWdzIHJlbW90ZV90d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgdGFnX3R3bworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggd2l0aCB0YWdvcHQ9LS10YWdzIGdldHMgdGFnIiAnCisJZ2l0IGZldGNoIHJlbW90ZV90d28gJiYKKwlnaXQgc2hvdy1yZWYgdGFnX3R3bworCScKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyNi1mZXRjaC1zdWJtb2R1bGVzLnNoIGIvdC90NTUyNi1mZXRjaC1zdWJtb2R1bGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNhNWIwMjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTI2LWZldGNoLXN1Ym1vZHVsZXMuc2gKQEAgLTAsMCArMSw0NTMgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMTAsIEplbnMgTGVobWFubgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdSZWN1cnNpdmUgImdpdCBmZXRjaCIgZm9yIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitwd2Q9JChwd2QpCisKK2FkZF91cHN0cmVhbV9jb21taXQoKSB7CisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwkJZWNobyBuZXcgPj4gc3ViZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGFkZCBzdWJmaWxlICYmCisJCWdpdCBjb21taXQgLW0gbmV3IHN1YmZpbGUgJiYKKwkJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwkJZWNobyAiRnJvbSAkcHdkL3N1Ym1vZHVsZSIgPiAuLi9leHBlY3QuZXJyICYmCisJCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IC4uL2V4cGVjdC5lcnIKKwkpICYmCisJKAorCQljZCBkZWVwc3VibW9kdWxlICYmCisJCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gbmV3ID4+IGRlZXBzdWJmaWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgYWRkIGRlZXBzdWJmaWxlICYmCisJCWdpdCBjb21taXQgLW0gbmV3IGRlZXBzdWJmaWxlICYmCisJCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gIkZyb20gJHB3ZC9kZWVwc3VibW9kdWxlIiA+PiAuLi9leHBlY3QuZXJyICYmCisJCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IC4uL2V4cGVjdC5lcnIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGRlZXBzdWJtb2R1bGUgJiYKKwkoCisJCWNkIGRlZXBzdWJtb2R1bGUgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBkZWVwc3ViY29udGVudCA+IGRlZXBzdWJmaWxlICYmCisJCWdpdCBhZGQgZGVlcHN1YmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBuZXcgZGVlcHN1YmZpbGUKKwkpICYmCisJbWtkaXIgc3VibW9kdWxlICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBzdWJjb250ZW50ID4gc3ViZmlsZSAmJgorCQlnaXQgYWRkIHN1YmZpbGUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRwd2QvZGVlcHN1Ym1vZHVsZSIgc3ViZGlyL2RlZXBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBuZXcKKwkpICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRwd2Qvc3VibW9kdWxlIiBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1hbSBpbml0aWFsICYmCisJZ2l0IGNsb25lIC4gZG93bnN0cmVhbSAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKKwkpICYmCisJZWNobyAiRmV0Y2hpbmcgc3VibW9kdWxlIHN1Ym1vZHVsZSIgPiBleHBlY3Qub3V0ICYmCisJZWNobyAiRmV0Y2hpbmcgc3VibW9kdWxlIHN1Ym1vZHVsZS9zdWJkaXIvZGVlcHN1Ym1vZHVsZSIgPj4gZXhwZWN0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyByZWN1cnNlcyBpbnRvIHN1Ym1vZHVsZXMiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggYWxvbmUgb25seSBmZXRjaGVzIHN1cGVycHJvamVjdCIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLm91dCAmJgorCSEgdGVzdCAtcyBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzIG9ubHkgZmV0Y2hlcyBzdXBlcnByb2plY3QiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLm91dCAmJgorCSEgdGVzdCAtcyBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInVzaW5nIGZldGNoUmVjdXJzZVN1Ym1vZHVsZXM9dHJ1ZSBpbiAuZ2l0bW9kdWxlcyByZWN1cnNlcyBpbnRvIHN1Ym1vZHVsZXMiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlLmZldGNoUmVjdXJzZVN1Ym1vZHVsZXMgdHJ1ZSAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qub3V0IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzIG92ZXJyaWRlcyAuZ2l0bW9kdWxlcyBjb25maWciICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ1c2luZyBmZXRjaFJlY3Vyc2VTdWJtb2R1bGVzPWZhbHNlIGluIC5naXQvY29uZmlnIG92ZXJyaWRlcyBzZXR0aW5nIGluIC5naXRtb2R1bGVzIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzIGZhbHNlICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLXJlY3Vyc2Utc3VibW9kdWxlcyBvdmVycmlkZXMgZmV0Y2hSZWN1cnNlU3VibW9kdWxlcyBzZXR0aW5nIGZyb20gLmdpdC9jb25maWciICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzICYmCisJCWdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLmZldGNoUmVjdXJzZVN1Ym1vZHVsZXMKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1xdWlldCBwcm9wYWdhdGVzIHRvIHN1Ym1vZHVsZXMiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tcXVpZXQgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCSEgdGVzdCAtcyBhY3R1YWwub3V0ICYmCisJISB0ZXN0IC1zIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1kcnktcnVuIHByb3BhZ2F0ZXMgdG8gc3VibW9kdWxlcyIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tZHJ5LXJ1biA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiV2l0aG91dCAtLWRyeS1ydW4gcHJvcGFnYXRlcyB0byBzdWJtb2R1bGVzIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVjdXJzZVN1Ym1vZHVsZXM9dHJ1ZSBwcm9wYWdhdGVzIGludG8gc3VibW9kdWxlcyIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyB0cnVlCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMgb3ZlcnJpZGVzIGNvbmZpZyBpbiBzdWJtb2R1bGUiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJZ2l0IGNvbmZpZyBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyBmYWxzZQorCQkpICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgb3ZlcnJpZGVzIGNvbmZpZyBzZXR0aW5nIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIHRydWUKKwkJZ2l0IGZldGNoIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLm91dCAmJgorCSEgdGVzdCAtcyBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJlY3Vyc2lvbiBkb2Vzbid0IGhhcHBlbiB3aGVuIG5vIG5ldyBjb21taXRzIGFyZSBmZXRjaGVkIGluIHRoZSBzdXBlcnByb2plY3QiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMKKwkJKSAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLm91dCAmJgorCSEgdGVzdCAtcyBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJlY3Vyc2lvbiBzdG9wcyB3aGVuIG5vIG5ldyBzdWJtb2R1bGUgY29tbWl0cyBhcmUgZmV0Y2hlZCIgJworCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRmV0Y2hpbmcgc3VibW9kdWxlIHN1Ym1vZHVsZSIgPiBleHBlY3Qub3V0LnN1YiAmJgorCWVjaG8gIkZyb20gJHB3ZC8uIiA+IGV4cGVjdC5lcnIuc3ViICYmCisJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gZXhwZWN0LmVyci5zdWIKKwloZWFkIC0yIGV4cGVjdC5lcnIgPj4gZXhwZWN0LmVyci5zdWIgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci5zdWIgYWN0dWFsLmVyciAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qub3V0LnN1YiBhY3R1YWwub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJlY3Vyc2lvbiBkb2Vzbid0IGhhcHBlbiB3aGVuIG5ldyBzdXBlcnByb2plY3QgY29tbWl0cyBkb24ndCBjaGFuZ2UgYW55IHN1Ym1vZHVsZXMiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvIGEgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IGZpbGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLmZpbGUgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiBleHBlY3QuZXJyLmZpbGUgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLmZpbGUgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJSZWN1cnNpb24gcGlja3MgdXAgY29uZmlnIGluIHN1Ym1vZHVsZSIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIHRydWUKKwkJKQorCSkgJiYKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBzdWJtb2R1bGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLnN1YiAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IGV4cGVjdC5lcnIuc3ViICYmCisJY2F0IGV4cGVjdC5lcnIgPj4gZXhwZWN0LmVyci5zdWIgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBjb25maWcgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcworCQkpCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLnN1YiBhY3R1YWwuZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJSZWN1cnNpb24gcGlja3MgdXAgYWxsIHN1Ym1vZHVsZXMgd2hlbiBuZWNlc3NhcnkiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3ViZGlyL2RlZXBzdWJtb2R1bGUgJiYKKwkJCWdpdCBmZXRjaCAmJgorCQkJZ2l0IGNoZWNrb3V0IC1xIEZFVENIX0hFQUQKKwkJKSAmJgorCQloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikgJiYKKwkJZ2l0IGFkZCBzdWJkaXIvZGVlcHN1Ym1vZHVsZSAmJgorCQlnaXQgY29tbWl0IC1tICJuZXcgZGVlcHN1Ym1vZHVsZSIKKwkJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwkJZWNobyAiRnJvbSAkcHdkL3N1Ym1vZHVsZSIgPiAuLi9leHBlY3QuZXJyLnN1YiAmJgorCQllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiAuLi9leHBlY3QuZXJyLnN1YgorCSkgJiYKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IHN1Ym1vZHVsZSIgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWVjaG8gIkZyb20gJHB3ZC8uIiA+IGV4cGVjdC5lcnIuMiAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IGV4cGVjdC5lcnIuMiAmJgorCWNhdCBleHBlY3QuZXJyLnN1YiA+PiBleHBlY3QuZXJyLjIgJiYKKwl0YWlsIC0yIGV4cGVjdC5lcnIgPj4gZXhwZWN0LmVyci4yICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIuMiBhY3R1YWwuZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICInLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kJyBkb2Vzbid0IHJlY3Vyc2Ugd2hlbiBubyBuZXcgY29tbWl0cyBhcmUgZmV0Y2hlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IChhbmQgaWdub3JlcyBjb25maWcpIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1YmRpci9kZWVwc3VibW9kdWxlICYmCisJCQlnaXQgZmV0Y2ggJiYKKwkJCWdpdCBjaGVja291dCAtcSBGRVRDSF9IRUFECisJCSkgJiYKKwkJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJCWdpdCBhZGQgc3ViZGlyL2RlZXBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibmV3IGRlZXBzdWJtb2R1bGUiCisJCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gIkZyb20gJHB3ZC9zdWJtb2R1bGUiID4gLi4vZXhwZWN0LmVyci5zdWIgJiYKKwkJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gLi4vZXhwZWN0LmVyci5zdWIKKwkpICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgdHJ1ZSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICInLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kJyByZWN1cnNlcyBhcyBkZWVwIGFzIG5lY2Vzc2FyeSAoYW5kIGlnbm9yZXMgY29uZmlnKSIgJworCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJdGFpbCAtMiBleHBlY3QuZXJyID4gZXhwZWN0LmVyci5kZWVwc3ViICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyciAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IGV4cGVjdC5lcnIKKwljYXQgZXhwZWN0LmVyci5zdWIgPj4gZXhwZWN0LmVyciAmJgorCWNhdCBleHBlY3QuZXJyLmRlZXBzdWIgPj4gZXhwZWN0LmVyciAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIGZhbHNlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViZGlyL2RlZXBzdWJtb2R1bGUuZmV0Y2hSZWN1cnNpdmUgZmFsc2UKKwkJKSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIC0tdW5zZXQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1YmRpci9kZWVwc3VibW9kdWxlLmZldGNoUmVjdXJzaXZlCisJCSkKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJy0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCcgc3RvcHMgd2hlbiBubyBuZXcgc3VibW9kdWxlIGNvbW1pdHMgYXJlIGZvdW5kIGluIHRoZSBzdXBlcnByb2plY3QgKGFuZCBpZ25vcmVzIGNvbmZpZykiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvIGEgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBmaWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyci5maWxlICYmCisJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gZXhwZWN0LmVyci5maWxlICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCSEgdGVzdCAtcyBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIuZmlsZSBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIidmZXRjaC5yZWN1cnNlU3VibW9kdWxlcz1vbi1kZW1hbmQnIG92ZXJyaWRlcyBnbG9iYWwgY29uZmlnIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcworCSkgJiYKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyBmYWxzZSAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyci4yICYmCisJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gZXhwZWN0LmVyci4yCisJaGVhZCAtMiBleHBlY3QuZXJyID4+IGV4cGVjdC5lcnIuMiAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIG9uLWRlbWFuZCAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQuc3ViIGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci4yIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJ3N1Ym1vZHVsZS48c3ViPi5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzPW9uLWRlbWFuZCcgb3ZlcnJpZGVzIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcworCSkgJiYKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJZ2l0IGNvbmZpZyBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyBmYWxzZSAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyci4yICYmCisJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gZXhwZWN0LmVyci4yCisJaGVhZCAtMiBleHBlY3QuZXJyID4+IGV4cGVjdC5lcnIuMiAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hSZWN1cnNlU3VibW9kdWxlcyBvbi1kZW1hbmQgJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hSZWN1cnNlU3VibW9kdWxlcworCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0Lm91dC5zdWIgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLjIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkb24ndCBmZXRjaCBzdWJtb2R1bGUgd2hlbiBuZXdseSByZWNvcmRlZCBjb21taXRzIGFyZSBhbHJlYWR5IHByZXNlbnQiICcKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgLXEgSEVBRF5eCisJKSAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgcmV3b3VuZCIgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWVjaG8gIkZyb20gJHB3ZC8uIiA+IGV4cGVjdC5lcnIgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiBleHBlY3QuZXJyICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyNy1mZXRjaC1vZGQtcmVmcy5zaCBiL3QvdDU1MjctZmV0Y2gtb2RkLXJlZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWRlYTlmOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjctZmV0Y2gtb2RkLXJlZnMuc2gKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZmV0Y2hpbmcgb2Ygb2RkbHktbmFtZWQgcmVmcycKKy4gLi90ZXN0LWxpYi5zaAorCisjIGFmdGVyd2FyZHMgd2Ugd2lsbCBoYXZlOgorIyAgSEVBRCAtIHR3bworIyAgcmVmcy9mb3IvcmVmcy9oZWFkcy9tYXN0ZXIgLSBvbmUKKyMgIHJlZnMvaGVhZHMvbWFzdGVyIC0gdGhyZWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBvZGQgc3VmZml4IHJlZicgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9mb3IvcmVmcy9oZWFkcy9tYXN0ZXIgSEVBRCAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRocmVlICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1ZmZpeCByZWYgaXMgaWdub3JlZCBkdXJpbmcgZmV0Y2gnICcKKwlnaXQgY2xvbmUgLS1iYXJlIGZpbGU6Ly8iJFBXRCIgc3VmZml4ICYmCisJZWNobyB0aHJlZSA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1zdWZmaXggbG9nIC0xIC0tZm9ybWF0PSVzIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2ggYi90L3Q1NTI4LXB1c2gtZGVmYXVsdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NzM2ZGE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2gKQEAgLTAsMCArMSwxMTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayB2YXJpb3VzIHB1c2guZGVmYXVsdCBzZXR0aW5ncycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXJlIHJlbW90ZXMnICcKKwlnaXQgaW5pdCAtLWJhcmUgcmVwbzEgJiYKKwlnaXQgcmVtb3RlIGFkZCBwYXJlbnQxIHJlcG8xICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcG8yICYmCisJZ2l0IHJlbW90ZSBhZGQgcGFyZW50MiByZXBvMiAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBwdXNoIHBhcmVudDEgSEVBRCAmJgorCWdpdCBwdXNoIHBhcmVudDIgSEVBRAorJworCisjICQxID0gbG9jYWwgcmV2aXNpb24KKyMgJDIgPSByZW1vdGUgcmV2aXNpb24gKHRlc3RlZCB0byBiZSBlcXVhbCB0byB0aGUgbG9jYWwgb25lKQorY2hlY2tfcHVzaGVkX2NvbW1pdCAoKSB7CisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0nJWggJXMnICIkMSIgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9cmVwbzEgbG9nIC0xIC0tZm9ybWF0PSclaCAlcycgIiQyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCisjICQxID0gcHVzaC5kZWZhdWx0IHZhbHVlCisjICQyID0gZXhwZWN0ZWQgdGFyZ2V0IGJyYW5jaCBmb3IgdGhlIHB1c2gKK3Rlc3RfcHVzaF9zdWNjZXNzICgpIHsKKwlnaXQgLWMgcHVzaC5kZWZhdWx0PSIkMSIgcHVzaCAmJgorCWNoZWNrX3B1c2hlZF9jb21taXQgSEVBRCAiJDIiCit9CisKKyMgJDEgPSBwdXNoLmRlZmF1bHQgdmFsdWUKKyMgY2hlY2sgdGhhdCBwdXNoIGZhaWxzIGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IHJlbW90ZSBicmFuY2gKK3Rlc3RfcHVzaF9mYWlsdXJlICgpIHsKKwlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9JyVoICVzJyAtLWFsbCA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHB1c2guZGVmYXVsdD0iJDEiIHB1c2ggJiYKKwlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9JyVoICVzJyAtLWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcidXBzdHJlYW0iIHB1c2hlcyB0byBjb25maWd1cmVkIHVwc3RyZWFtJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgdXBzdHJlYW0gZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJ1cHN0cmVhbSIgZG9lcyBub3QgcHVzaCBvbiB1bmNvbmZpZ3VyZWQgcmVtb3RlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdW5jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgJiYKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgdXBzdHJlYW0gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCXRlc3RfcHVzaF9mYWlsdXJlIHVwc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJ1cHN0cmVhbSIgZG9lcyBub3QgcHVzaCBvbiB1bmNvbmZpZ3VyZWQgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X3VuY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgJiYKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgdXBzdHJlYW0KKwl0ZXN0X2NvbW1pdCBmb3VyICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgdXBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInVwc3RyZWFtIiBkb2VzIG5vdCBwdXNoIHdoZW4gcmVtb3RlcyBkbyBub3QgbWF0Y2gnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcGFyZW50MSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9mb28gJiYKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgdXBzdHJlYW0gJiYKKwl0ZXN0X2NvbW1pdCBmaXZlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggcGFyZW50MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZyb20vdG8gbmV3IGJyYW5jaCB3aXRoIHVwc3RyZWFtLCBtYXRjaGluZyBhbmQgc2ltcGxlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG5ldy1icmFuY2ggJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSBzaW1wbGUgJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSBtYXRjaGluZyAmJgorCXRlc3RfcHVzaF9mYWlsdXJlIHVwc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZnJvbS90byBuZXcgYnJhbmNoIHdpdGggY3VycmVudCBjcmVhdGVzIHJlbW90ZSBicmFuY2gnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gubmV3LWJyYW5jaC5yZW1vdGUgcmVwbzEgJiYKKwlnaXQgY2hlY2tvdXQgbmV3LWJyYW5jaCAmJgorCXRlc3RfcHVzaF9zdWNjZXNzIGN1cnJlbnQgbmV3LWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIGV4aXN0aW5nIGJyYW5jaCwgd2l0aCBubyB1cHN0cmVhbSBjb25maWd1cmVkJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcmVwbzEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgc2ltcGxlICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgdXBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBleGlzdGluZyBicmFuY2gsIHVwc3RyZWFtIGNvbmZpZ3VyZWQgd2l0aCBzYW1lIG5hbWUnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSByZXBvMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgc2l4ICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgdXBzdHJlYW0gbWFzdGVyICYmCisJdGVzdF9jb21taXQgc2V2ZW4gJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyBzaW1wbGUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gZXhpc3RpbmcgYnJhbmNoLCB1cHN0cmVhbSBjb25maWd1cmVkIHdpdGggZGlmZmVyZW50IG5hbWUnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSByZXBvMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9vdGhlci1uYW1lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IGVpZ2h0ICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgdXBzdHJlYW0gb3RoZXItbmFtZSAmJgorCXRlc3RfY29tbWl0IG5pbmUgJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSBzaW1wbGUgJiYKKwlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtMSAtLWZvcm1hdD0iJWggJXMiICJvdGhlci1uYW1lIiA+ZXhwZWN0LW90aGVyLW5hbWUgJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyBjdXJyZW50IG1hc3RlciAmJgorCWdpdCAtLWdpdC1kaXI9cmVwbzEgbG9nIC0xIC0tZm9ybWF0PSIlaCAlcyIgIm90aGVyLW5hbWUiID5hY3R1YWwtb3RoZXItbmFtZSAmJgorCXRlc3RfY21wIGV4cGVjdC1vdGhlci1uYW1lIGFjdHVhbC1vdGhlci1uYW1lCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzMC11cGxvYWQtcGFjay1lcnJvci5zaCBiL3QvdDU1MzAtdXBsb2FkLXBhY2stZXJyb3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzk4M2QzNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzAtdXBsb2FkLXBhY2stZXJyb3Iuc2gKQEAgLTAsMCArMSw5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Vycm9ycyBpbiB1cGxvYWQtcGFjaycKKworLiAuL3Rlc3QtbGliLnNoCisKK0Q9YHB3ZGAKKworY29ycnVwdF9yZXBvICgpIHsKKwlvYmplY3Rfc2hhMT0kKGdpdCByZXYtcGFyc2UgIiQxIikgJiYKKwlvYj0kKGV4cHIgIiRvYmplY3Rfc2hhMSIgOiAiXCguLlwpIikgJiYKKwlqZWN0PSQoZXhwciAiJG9iamVjdF9zaGExIiA6ICIuLlwoLi4qXCkiKSAmJgorCXJtIC1mICIuZ2l0L29iamVjdHMvJG9iLyRqZWN0IgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhbmQgY29ycnVwdCByZXBvc2l0b3J5JyAnCisKKwllY2hvIGZpbGUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgcmV2LXBhcnNlIDpmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBvcmlnaW5hbCAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gY2hhbmdlZCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gY2hhbmdlZCAmJgorCWNvcnJ1cHRfcmVwbyBIRUFEOmZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsb2FkLXBhY2sgZmFpbHMgZHVlIHRvIGVycm9yIGluIHBhY2stb2JqZWN0cyBwYWNraW5nJyAnCisKKwlwcmludGYgIjAwMzJ3YW50ICVzXG4wMDAwMDAwOWRvbmVcbjAwMDAiIFwKKwkJJChnaXQgcmV2LXBhcnNlIEhFQUQpID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGxvYWQtcGFjayAuIDxpbnB1dCA+L2Rldi9udWxsIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byByZWFkIiBvdXRwdXQuZXJyICYmCisJdGVzdF9pMThuZ3JlcCAicGFjay1vYmplY3RzIGRpZWQiIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycnVwdCByZXBvIGRpZmZlcmVudGx5JyAnCisKKwlnaXQgaGFzaC1vYmplY3QgLXcgZmlsZSAmJgorCWNvcnJ1cHRfcmVwbyBIRUFEXl57dHJlZX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1wYWNrIGZhaWxzIGR1ZSB0byBlcnJvciBpbiByZXYtbGlzdCcgJworCisJcHJpbnRmICIwMDMyd2FudCAlc1xuMDAzNHNoYWxsb3cgJXMwMDAwMDAwOWRvbmVcbjAwMDAiIFwKKwkJJChnaXQgcmV2LXBhcnNlIEhFQUQpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwbG9hZC1wYWNrIC4gPGlucHV0ID4vZGV2L251bGwgMj5vdXRwdXQuZXJyICYmCisJIyBwYWNrLW9iamVjdHMgc3Vydml2ZWQKKwlncmVwICJUb3RhbC4qLCByZXVzZWQiIG91dHB1dC5lcnIgJiYKKwkjIGJ1dCB0aGVyZSB3YXMgYW4gZXJyb3IsIHdoaWNoIG11c3QgaGF2ZSBiZWVuIGluIHJldi1saXN0CisJZ3JlcCAiYmFkIHRyZWUgb2JqZWN0IiBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1wYWNrIGVycm9yIG1lc3NhZ2Ugd2hlbiBiYWQgcmVmIHJlcXVlc3RlZCcgJworCisJcHJpbnRmICIwMDQ1d2FudCAlcyBtdWx0aV9hY2tfZGV0YWlsZWRcbjAwMDAwMDA5ZG9uZVxuMDAwMCIgXAorCQkiZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZiIgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwbG9hZC1wYWNrIC4gPGlucHV0ID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJZ3JlcCAtcSAibm90IG91ciByZWYiIG91dHB1dC5lcnIgJiYKKwkhIGdyZXAgLXEgbXVsdGlfYWNrX2RldGFpbGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsb2FkLXBhY2sgZmFpbHMgZHVlIHRvIGVycm9yIGluIHBhY2stb2JqZWN0cyBlbnVtZXJhdGlvbicgJworCisJcHJpbnRmICIwMDMyd2FudCAlc1xuMDAwMDAwMDlkb25lXG4wMDAwIiBcCisJCSQoZ2l0IHJldi1wYXJzZSBIRUFEKSA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBsb2FkLXBhY2sgLiA8aW5wdXQgPi9kZXYvbnVsbCAyPm91dHB1dC5lcnIgJiYKKwlncmVwICJiYWQgdHJlZSBvYmplY3QiIG91dHB1dC5lcnIgJiYKKwlncmVwICJwYWNrLW9iamVjdHMgZGllZCIgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZW1wdHkgcmVwb3NpdG9yeScgJworCisJbWtkaXIgZm9vICYmCisJY2QgZm9vICYmCisJZ2l0IGluaXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmYWlscycgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uIG1hc3RlcgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzMS1kZWVwLXN1Ym1vZHVsZS1wdXNoLnNoIGIvdC90NTUzMS1kZWVwLXN1Ym1vZHVsZS1wdXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5NDdjMjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTMxLWRlZXAtc3VibW9kdWxlLXB1c2guc2gKQEAgLTAsMCArMSwyMTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1bnBhY2stb2JqZWN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIHB1Yi5naXQgJiYKKwlHSVRfRElSPXB1Yi5naXQgZ2l0IGluaXQgLS1iYXJlICYmCisJR0lUX0RJUj1wdWIuZ2l0IGdpdCBjb25maWcgcmVjZWl2ZS5mc2Nrb2JqZWN0cyB0cnVlICYmCisJbWtkaXIgd29yayAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgaW5pdCAmJgorCQlta2RpciAtcCBnYXIvYmFnZSAmJgorCQkoCisJCQljZCBnYXIvYmFnZSAmJgorCQkJZ2l0IGluaXQgJiYKKwkJCT5qdW5rICYmCisJCQlnaXQgYWRkIGp1bmsgJiYKKwkJCWdpdCBjb21taXQgLW0gIkluaXRpYWwganVuayIKKwkJKSAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIkluaXRpYWwgc3VwZXJwcm9qZWN0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBwdXNoICcKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IHB1c2ggLi4vcHViLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggaWYgc3VibW9kdWxlIGhhcyBubyByZW1vdGUnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPmp1bmsyICYmCisJCWdpdCBhZGQganVuazIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIGp1bmsiCisJKSAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIlNlY29uZCBjb21taXQgZm9yIGdhci9iYWdlIiAmJgorCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayAuLi9wdWIuZ2l0IG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmYWlscyBpZiBzdWJtb2R1bGUgY29tbWl0IG5vdCBvbiByZW1vdGUnICcKKwkoCisJCWNkIHdvcmsvZ2FyICYmCisJCWdpdCBjbG9uZSAtLWJhcmUgYmFnZSAuLi8uLi9zdWJtb2R1bGUuZ2l0ICYmCisJCWNkIGJhZ2UgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIC4uLy4uLy4uL3N1Ym1vZHVsZS5naXQgJiYKKwkJZ2l0IGZldGNoICYmCisJCT5qdW5rMyAmJgorCQlnaXQgYWRkIGp1bmszICYmCisJCWdpdCBjb21taXQgLW0gIlRoaXJkIGp1bmsiCisJKSAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIlRoaXJkIGNvbW1pdCBmb3IgZ2FyL2JhZ2UiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrIC4uL3B1Yi5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHN1Y2NlZWRzIGFmdGVyIGNvbW1pdCB3YXMgcHVzaGVkIHRvIHJlbW90ZScgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQlnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCisJKSAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayAuLi9wdWIuZ2l0IG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmYWlscyB3aGVuIGNvbW1pdCBvbiBtdWx0aXBsZSBicmFuY2hlcyBpZiBvbmUgYnJhbmNoIGhhcyBubyByZW1vdGUnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPmp1bms0ICYmCisJCWdpdCBhZGQganVuazQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRm91cnRoIGp1bmsiCisJKSAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJGb3VydGggY29tbWl0IGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCWdpdCBjaGVja291dCBIRUFEfjEKKwkJKSAmJgorCQk+anVuazEgJiYKKwkJZ2l0IGFkZCBqdW5rMSAmJgorCQlnaXQgY29tbWl0IC1tICJGaXJzdCBqdW5rIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayAuLi9wdWIuZ2l0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHN1Y2NlZWRzIGlmIHN1Ym1vZHVsZSBoYXMgbm8gcmVtb3RlIGFuZCBpcyBvbiB0aGUgZmlyc3Qgc3VwZXJwcm9qZWN0IGNvbW1pdCcgJworCWdpdCBpbml0IC0tYmFyZSBhCisJZ2l0IGNsb25lIGEgYTEgJiYKKwkoCisJCWNkIGExICYmCisJCWdpdCBpbml0IGIKKwkJKAorCQkJY2QgYiAmJgorCQkJPmp1bmsgJiYKKwkJCWdpdCBhZGQganVuayAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIKKwkJKSAmJgorCQlnaXQgYWRkIGIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3VibW9kdWxlIiAmJgorCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlPWNoZWNrIG9yaWdpbiBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdW5wdXNoZWQgc3VibW9kdWxlcyB3aGVuIG5vdCBuZWVkZWQnICcKKwkoCisJCWNkIHdvcmsgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJCT5qdW5rNSAmJgorCQkJZ2l0IGFkZCBqdW5rNSAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiRmlmdGgganVuayIgJiYKKwkJCWdpdCBwdXNoICYmCisJCQlnaXQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIgPi4uLy4uLy4uL2V4cGVjdGVkCisJCSkgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIkZpZnRoIGNvbW1pdCBmb3IgZ2FyL2JhZ2UiICYmCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZS5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB1bnB1c2hlZCBzdWJtb2R1bGVzIHdoZW4gbm90IG5lZWRlZCAyJyAnCisJKAorCQljZCBzdWJtb2R1bGUuZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi9leHBlY3RlZAorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCT5qdW5rNiAmJgorCQkJZ2l0IGFkZCBqdW5rNiAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiU2l4dGgganVuayIKKwkJKSAmJgorCQk+anVuazIgJiYKKwkJZ2l0IGFkZCBqdW5rMiAmJgorCQlnaXQgY29tbWl0IC1tICJTZWNvbmQganVuayBmb3Igd29yayIgJiYKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC4uL3B1Yi5naXQgbWFzdGVyCisJKSAmJgorCSgKKwkJY2Qgc3VibW9kdWxlLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIG1hc3RlciA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHVucHVzaGVkIHN1Ym1vZHVsZXMgcmVjdXJzaXZlbHknICcKKwkoCisJCWNkIHdvcmsgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJCT4ganVuazcgJiYKKwkJCWdpdCBhZGQganVuazcgJiYKKwkJCWdpdCBjb21taXQgLW0gIlNldmVudGgganVuayIgJiYKKwkJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi8uLi8uLi9leHBlY3RlZAorCQkpICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJTZXZlbnRoIGNvbW1pdCBmb3IgZ2FyL2JhZ2UiICYmCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZS5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB1bnB1c2hhYmxlIHN1Ym1vZHVsZSByZWN1cnNpdmVseSBmYWlscycgJworCSgKKwkJY2Qgd29yayAmJgorCQkoCisJCQljZCBnYXIvYmFnZSAmJgorCQkJZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyID4uLi8uLi8uLi9leHBlY3RlZCAmJgorCQkJZ2l0IGNoZWNrb3V0IG1hc3Rlcn4wICYmCisJCQk+IGp1bms4ICYmCisJCQlnaXQgYWRkIGp1bms4ICYmCisJCQlnaXQgY29tbWl0IC1tICJFaWdodGgganVuayIKKwkJKSAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIkVpZ2h0aCBjb21taXQgZm9yIGdhci9iYWdlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBzdWJtb2R1bGUuZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzMi1mZXRjaC1wcm94eS5zaCBiL3QvdDU1MzItZmV0Y2gtcHJveHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTUzMWJkMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzItZmV0Y2gtcHJveHkuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoaW5nIHZpYSBnaXQ6Ly8gdXNpbmcgY29yZS5naXRwcm94eScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUgcmVwbycgJworCWdpdCBpbml0IHJlbW90ZSAmJgorCShjZCByZW1vdGUgJiYKKwkgZWNobyBjb250ZW50ID5maWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSBnaXQgY29tbWl0IC1tIG9uZQorCSkKKycKKworY2F0ID5wcm94eSA8PCdFT0YnCisjIS9iaW4vc2gKK2VjaG8gPiYyICJwcm94eWluZyBmb3IgJCoiCitjbWQ9YCIkUEVSTF9QQVRIIiAtZSAnCisJcmVhZChTVERJTiwgJGJ1ZiwgNCk7CisJbXkgJG4gPSBoZXgoJGJ1ZikgLSA0OworCXJlYWQoU1RESU4sICRidWYsICRuKTsKKwlteSAoJGNtZCwgJG90aGVyKSA9IHNwbGl0IC9cMC8sICRidWY7CisJIyBkcm9wIGFic29sdXRlLXBhdGggb24gcmVwbyBuYW1lCisJJGNtZCA9fiBzeyAvfXsgfTsKKwlwcmludCAkY21kOworJ2AKK2VjaG8gPiYyICJSdW5uaW5nICckY21kJyIKK2V4ZWMgJGNtZAorRU9GCitjaG1vZCAreCBwcm94eQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbG9jYWwgcmVwbycgJworCWdpdCByZW1vdGUgYWRkIGZha2UgZ2l0Oi8vZXhhbXBsZS5jb20vcmVtb3RlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmdpdHByb3h5IC4vcHJveHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdGhyb3VnaCBwcm94eSB3b3JrcycgJworCWdpdCBmZXRjaCBmYWtlICYmCisJZWNobyBvbmUgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NDAtaHR0cC1wdXNoLnNoIGIvdC90NTU0MC1odHRwLXB1c2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDFkMGQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NDAtaHR0cC1wdXNoLnNoCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IENsZW1lbnMgQnVjaGFjaGVyIDxkcml6emRAYW9uLmF0PgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IFdlYkRBViBodHRwLXB1c2gKKworVGhpcyB0ZXN0IHJ1bnMgdmFyaW91cyBzYW5pdHkgY2hlY2tzIG9uIGh0dHAtcHVzaC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiBnaXQgaHR0cC1wdXNoID4gL2Rldi9udWxsIDI+JjEgfHwgWyAkPyAtZXEgMTI4IF0KK3RoZW4KKwlza2lwX2FsbD0ic2tpcHBpbmcgdGVzdCwgVVNFX0NVUkxfTVVMVEkgaXMgbm90IGRlZmluZWQiCisJdGVzdF9kb25lCitmaQorCitMSUJfSFRUUERfREFWPXQKK0xJQl9IVFRQRF9QT1JUPSR7TElCX0hUVFBEX1BPUlQtJzU1NDAnfQorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK1JPT1RfUEFUSD0iJFBXRCIKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbW90ZSByZXBvc2l0b3J5JyAnCisJY2QgIiRST09UX1BBVEgiICYmCisJbWtkaXIgdGVzdF9yZXBvICYmCisJY2QgdGVzdF9yZXBvICYmCisJZ2l0IGluaXQgJiYKKwk6ID5wYXRoMSAmJgorCWdpdCBhZGQgcGF0aDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwljZCAtICYmCisJZ2l0IGNsb25lIC0tYmFyZSB0ZXN0X3JlcG8gdGVzdF9yZXBvLmdpdCAmJgorCWNkIHRlc3RfcmVwby5naXQgJiYKKwlnaXQgLS1iYXJlIHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCW12IGhvb2tzL3Bvc3QtdXBkYXRlLnNhbXBsZSBob29rcy9wb3N0LXVwZGF0ZSAmJgorCU9SSUdfSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwljZCAtICYmCisJbXYgdGVzdF9yZXBvLmdpdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBhc3N3b3JkLXByb3RlY3RlZCByZXBvc2l0b3J5JyAnCisJbWtkaXIgLXAgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXV0aC9kdW1iIiAmJgorCWNwIC1SZiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90ZXN0X3JlcG8uZ2l0IiBcCisJICAgICAgICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2F1dGgvZHVtYi90ZXN0X3JlcG8uZ2l0IgorJworCitzZXR1cF9hc2twYXNzX2hlbHBlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZW1vdGUgcmVwb3NpdG9yeScgJworCWNkICIkUk9PVF9QQVRIIiAmJgorCWdpdCBjbG9uZSAkSFRUUERfVVJML2R1bWIvdGVzdF9yZXBvLmdpdCB0ZXN0X3JlcG9fY2xvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byByZW1vdGUgcmVwb3NpdG9yeSB3aXRoIHBhY2tlZCByZWZzJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCTogPnBhdGgyICYmCisJZ2l0IGFkZCBwYXRoMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcGF0aDIgJiYKKwlIRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBwdXNoICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCisJIHRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggYWxyZWFkeSB1cC10by1kYXRlJyAnCisJZ2l0IHB1c2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byByZW1vdGUgcmVwb3NpdG9yeSB3aXRoIHVucGFja2VkIHJlZnMnICcKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgJiYKKwkgcm0gcGFja2VkLXJlZnMgJiYKKwkgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJE9SSUdfSEVBRCAmJgorCSBnaXQgLS1iYXJlIHVwZGF0ZS1zZXJ2ZXItaW5mbykgJiYKKwlnaXQgcHVzaCAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCAmJgorCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLXB1c2ggZmV0Y2hlcyB1bnBhY2tlZCBvYmplY3RzJyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgXAorCQkiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvX3VucGFja2VkLmdpdCAmJgorCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvZHVtYi90ZXN0X3JlcG9fdW5wYWNrZWQuZ2l0IFwKKwkJIiRST09UX1BBVEgiL2ZldGNoX3VucGFja2VkICYmCisKKwkjIEJ5IHJlc2V0LCB3ZSBmb3JjZSBnaXQgdG8gcmV0cmlldmUgdGhlIG9iamVjdAorCShjZCAiJFJPT1RfUEFUSCIvZmV0Y2hfdW5wYWNrZWQgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCSBnaXQgcmVtb3RlIHJtIG9yaWdpbiAmJgorCSBnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT0wIC0tYWxsICYmCisJIGdpdCBwcnVuZSAmJgorCSBnaXQgcHVzaCAtZiAtdiAkSFRUUERfVVJML2R1bWIvdGVzdF9yZXBvX3VucGFja2VkLmdpdCBtYXN0ZXIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAtcHVzaCBmZXRjaGVzIHBhY2tlZCBvYmplY3RzJyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgXAorCQkiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvX3BhY2tlZC5naXQgJiYKKworCWdpdCBjbG9uZSAkSFRUUERfVVJML2R1bWIvdGVzdF9yZXBvX3BhY2tlZC5naXQgXAorCQkiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lX3BhY2tlZCAmJgorCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG9fcGFja2VkLmdpdCAmJgorCSBnaXQgLS1iYXJlIHJlcGFjayAmJgorCSBnaXQgLS1iYXJlIHBydW5lLXBhY2tlZCkgJiYKKworCSMgQnkgcmVzZXQsIHdlIGZvcmNlIGdpdCB0byByZXRyaWV2ZSB0aGUgcGFja2VkIG9iamVjdAorCShjZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lX3BhY2tlZCAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJIGdpdCByZW1vdGUgcmVtb3ZlIG9yaWdpbiAmJgorCSBnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT0wIC0tYWxsICYmCisJIGdpdCBwcnVuZSAmJgorCSBnaXQgcHVzaCAtZiAtdiAkSFRUUERfVVJML2R1bWIvdGVzdF9yZXBvX3BhY2tlZC5naXQgbWFzdGVyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYW5kIGRlbGV0ZSByZW1vdGUgYnJhbmNoJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCWdpdCBjaGVja291dCAtYiBkZXYgJiYKKwk6ID5wYXRoMyAmJgorCWdpdCBhZGQgcGF0aDMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGRldiAmJgorCWdpdCBwdXNoIG9yaWdpbiBkZXYgJiYKKwlnaXQgcHVzaCBvcmlnaW4gOmRldiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL2RldgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNS0NPTCBzZW5kcyBkaXJlY3RvcnkgbmFtZXMgd2l0aCB0cmFpbGluZyBzbGFzaGVzJyAnCisKKwkhIGdyZXAgIlwiTUtDT0wuKlteL10gSFRUUC9bXiBdKlwiIiA8ICIkSFRUUERfUk9PVF9QQVRIIi9hY2Nlc3MubG9nCisKKycKKworeDE9IlswLTlhLWZdIgoreDI9IiR4MSR4MSIKK3g1PSIkeDEkeDEkeDEkeDEkeDEiCit4Mzg9IiR4NSR4NSR4NSR4NSR4NSR4NSR4NSR4MSR4MSR4MSIKK3g0MD0iJHgzOCR4MiIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUFVUIGFuZCBNT1ZFIHNlbmRzIG9iamVjdCB0byBVUkxzIHdpdGggU0hBLTEgaGFzaCBzdWZmaXgnICcKKwlzZWQgXAorCQktZSAicy9QVVQgL09QIC8iIFwKKwkJLWUgInMvTU9WRSAvT1AgLyIgXAorCSAgICAtZSAic3wvb2JqZWN0cy8keDIvJHt4Mzh9XyR4NDB8V0FOVEVEX1BBVEhfUkVRVUVTVHwiIFwKKwkJIiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cgfAorCWdyZXAgLWUgIlwiT1AgLipXQU5URURfUEFUSF9SRVFVRVNUIEhUVFAvWy4wLTldKlwiIDIwWzAtOV0gIgorCisnCisKK3Rlc3RfaHR0cF9wdXNoX25vbmZmICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0IFwKKwkiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lIG1hc3RlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHBhc3N3b3JkLXByb3RlY3RlZCByZXBvc2l0b3J5ICh1c2VyIGluIFVSTCknICcKKwl0ZXN0X2NvbW1pdCBwdy11c2VyICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkxfVVNFUi9hdXRoL2R1bWIvdGVzdF9yZXBvLmdpdCIgSEVBRCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hdXRoL2R1bWIvdGVzdF9yZXBvLmdpdCIgXAorCQlyZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd1c2VyIHdhcyBwcm9tcHRlZCBvbmx5IG9uY2UgZm9yIHBhc3N3b3JkJyAnCisJZXhwZWN0X2Fza3Bhc3MgcGFzcyB1c2VyQGhvc3QKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncHVzaCB0byBwYXNzd29yZC1wcm90ZWN0ZWQgcmVwb3NpdG9yeSAobm8gdXNlciBpbiBVUkwpJyAnCisJdGVzdF9jb21taXQgcHctbm91c2VyICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkwvYXV0aC9kdW1iL3Rlc3RfcmVwby5naXQiIEhFQUQgJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdAorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hdXRoL2R1bWIvdGVzdF9yZXBvLmdpdCIgXAorCQlyZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitzdG9wX2h0dHBkCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU0MS1odHRwLXB1c2guc2ggYi90L3Q1NTQxLWh0dHAtcHVzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YjRiNGE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTU0MS1odHRwLXB1c2guc2gKQEAgLTAsMCArMSwyOTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQ2xlbWVucyBCdWNoYWNoZXIgPGRyaXp6ZEBhb24uYXQ+CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgc21hcnQgcHVzaGluZyBvdmVyIGh0dHAgdmlhIGh0dHAtYmFja2VuZCcKKy4gLi90ZXN0LWxpYi5zaAorCitpZiB0ZXN0IC1uICIkTk9fQ1VSTCI7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgdGVzdCwgZ2l0IGJ1aWx0IHdpdGhvdXQgaHR0cCBzdXBwb3J0JworCXRlc3RfZG9uZQorZmkKKworUk9PVF9QQVRIPSIkUFdEIgorTElCX0hUVFBEX1BPUlQ9JHtMSUJfSFRUUERfUE9SVC0nNTU0MSd9CisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbW90ZSByZXBvc2l0b3J5JyAnCisJY2QgIiRST09UX1BBVEgiICYmCisJbWtkaXIgdGVzdF9yZXBvICYmCisJY2QgdGVzdF9yZXBvICYmCisJZ2l0IGluaXQgJiYKKwk6ID5wYXRoMSAmJgorCWdpdCBhZGQgcGF0aDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwljZCAtICYmCisJZ2l0IGNsb25lIC0tYmFyZSB0ZXN0X3JlcG8gdGVzdF9yZXBvLmdpdCAmJgorCWNkIHRlc3RfcmVwby5naXQgJiYKKwlnaXQgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCWdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIHRydWUgJiYKKwlPUklHX0hFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY2QgLSAmJgorCW12IHRlc3RfcmVwby5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiCisnCisKK3NldHVwX2Fza3Bhc3NfaGVscGVyCisKK2NhdCA+ZXhwIDw8RU9GCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3Rlc3RfcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBlbXB0eSBwYXRoIGNvbXBvbmVudHMnICcKKwkjIEluIHRoZSBVUkwsIGFkZCBhIHRyYWlsaW5nIHNsYXNoLCBhbmQgc2VlIGlmIGdpdCBhcHBlbmRzIHlldCBhbm90aGVyCisJIyBzbGFzaC4KKwljZCAiJFJPT1RfUEFUSCIgJiYKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC90ZXN0X3JlcG8uZ2l0LyB0ZXN0X3JlcG9fY2xvbmUgJiYKKworCXNlZCAtZSAiCisJCXMvXi4qIFwiLy8KKwkJcy9cIi8vCisJCXMvIFsxLTldWzAtOV0qXCQvLworCQlzL15HRVQgL0dFVCAgLworCSIgPmFjdCA8IiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cgJiYKKworCSMgQ2xlYXIgdGhlIGxvZywgc28gdGhhdCBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlICJ1c2VkIHJlY2VpdmUtcGFjaworCSMgc2VydmljZSIgdGVzdCB3aGljaCByZWFkcyB0aGUgbG9nIHRvby4KKwkjCisJIyBXZSBkbyB0aGlzIGJlZm9yZSB0aGUgYWN0dWFsIGNvbXBhcmlzb24gdG8gZW5zdXJlIHRoZSBsb2cgaXMgY2xlYXJlZC4KKwllY2hvID4gIiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cgJiYKKworCXRlc3RfY21wIGV4cCBhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVtb3RlIHJlcG9zaXRvcnknICcKKwlybSAtcmYgdGVzdF9yZXBvX2Nsb25lICYmCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQvdGVzdF9yZXBvLmdpdCB0ZXN0X3JlcG9fY2xvbmUgJiYKKwkoCisJCWNkIHRlc3RfcmVwb19jbG9uZSAmJiBnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byByZW1vdGUgcmVwb3NpdG9yeSAoc3RhbmRhcmQpJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCTogPnBhdGgyICYmCisJZ2l0IGFkZCBwYXRoMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcGF0aDIgJiYKKwlIRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCUdJVF9DVVJMX1ZFUkJPU0U9MSBnaXQgcHVzaCAtdiAtdiAyPmVyciAmJgorCSEgZ3JlcCAiRXhwZWN0OiAxMDAtY29udGludWUiIGVyciAmJgorCWdyZXAgIlBPU1QgZ2l0LXJlY2VpdmUtcGFjayAoWzAtOV0qIGJ5dGVzKSIgZXJyICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCisJIHRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggYWxyZWFkeSB1cC10by1kYXRlJyAnCisJZ2l0IHB1c2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGFuZCBkZWxldGUgcmVtb3RlIGJyYW5jaCcgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGV2ICYmCisJOiA+cGF0aDMgJiYKKwlnaXQgYWRkIHBhdGgzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBkZXYgJiYKKwlnaXQgcHVzaCBvcmlnaW4gZGV2ICYmCisJZ2l0IHB1c2ggb3JpZ2luIDpkZXYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9kZXYKKycKKworY2F0ID4iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90ZXN0X3JlcG8uZ2l0L2hvb2tzL3VwZGF0ZSIgPDxFT0YKKyMhL2Jpbi9zaAorZXhpdCAxCitFT0YKK2NobW9kIGEreCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90ZXN0X3JlcG8uZ2l0L2hvb2tzL3VwZGF0ZSIKKworY2F0ID5leHAgPDxFT0YKK3JlbW90ZTogZXJyb3I6IGhvb2sgZGVjbGluZWQgdG8gdXBkYXRlIHJlZnMvaGVhZHMvZGV2MgorVG8gaHR0cDovLzEyNy4wLjAuMTokTElCX0hUVFBEX1BPUlQvc21hcnQvdGVzdF9yZXBvLmdpdAorICEgW3JlbW90ZSByZWplY3RlZF0gZGV2MiAtPiBkZXYyIChob29rIGRlY2xpbmVkKQorZXJyb3I6IGZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnaHR0cDovLzEyNy4wLjAuMTokTElCX0hUVFBEX1BPUlQvc21hcnQvdGVzdF9yZXBvLmdpdCcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3RlZCB1cGRhdGUgcHJpbnRzIHN0YXR1cycgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGV2MiAmJgorCTogPnBhdGg0ICYmCisJZ2l0IGFkZCBwYXRoNCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZGV2MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiBkZXYyIDI+YWN0ICYmCisJc2VkIC1lICIvXnJlbW90ZTogL3MvICokLy8iIDxhY3QgPmNtcCAmJgorCXRlc3RfY21wIGV4cCBjbXAKKycKK3JtIC1mICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQvaG9va3MvdXBkYXRlIgorCitjYXQgPmV4cCA8PEVPRgorCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3Rlc3RfcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvdGVzdF9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvdGVzdF9yZXBvLmdpdC9naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvdGVzdF9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvdGVzdF9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvdGVzdF9yZXBvLmdpdC9naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvdGVzdF9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvdGVzdF9yZXBvLmdpdC9naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvdGVzdF9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvdGVzdF9yZXBvLmdpdC9naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2VkIHJlY2VpdmUtcGFjayBzZXJ2aWNlJyAnCisJc2VkIC1lICIKKwkJcy9eLiogXCIvLworCQlzL1wiLy8KKwkJcy8gWzEtOV1bMC05XSpcJC8vCisJCXMvXkdFVCAvR0VUICAvCisJIiA+YWN0IDwiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZyAmJgorCXRlc3RfY21wIGV4cCBhY3QKKycKKwordGVzdF9odHRwX3B1c2hfbm9uZmYgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgXAorCSIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgbWFzdGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZmFpbHMgZm9yIG5vbi1mYXN0LWZvcndhcmQgcmVmcyB1bm1hdGNoZWQgYnkgcmVtb3RlIGhlbHBlcicgJworCSMgY3JlYXRlIGEgZGlzc2ltaWxhcmx5LW5hbWVkIHJlbW90ZSByZWYgc28gdGhhdCBnaXQgaXMgdW5hYmxlIHRvIG1hdGNoIHRoZQorCSMgdHdvIHJlZnMgKHZpei4gbG9jYWwsIHJlbW90ZSkgdW5sZXNzIGFuIGV4cGxpY2l0IHJlZnNwZWMgaXMgcHJvdmlkZWQuCisJZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcjpyZXRzYW0KKworCWVjaG8gImNoYW5nZSBjaGFuZ2VkIiA+IHBhdGgyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBwYXRoMiAtLWFtZW5kICYmCisKKwkjIHB1c2ggbWFzdGVyIHRvbzsgdGhpcyBlbnN1cmVzIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSAnIidwdXNoJyInIGNvbW1hbmQgdG8KKwkjIHRoZSByZW1vdGUgaGVscGVyIGFuZCB0cmlnZ2VycyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoZWxwZXIuCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLXYgb3JpZ2luICttYXN0ZXIgbWFzdGVyOnJldHNhbSA+b3V0cHV0IDI+JjEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZmFpbHMgZm9yIG5vbi1mYXN0LWZvcndhcmQgcmVmcyB1bm1hdGNoZWQgYnkgcmVtb3RlIGhlbHBlcjogcmVtb3RlIG91dHB1dCcgJworCWdyZXAgIl4gKyBbYS1mMC05XSpcLlwuXC5bYS1mMC05XSogKm1hc3RlciAtPiBtYXN0ZXIgKGZvcmNlZCB1cGRhdGUpJCIgb3V0cHV0ICYmCisJZ3JlcCAiXiAhIFxbcmVqZWN0ZWRcXSAqbWFzdGVyIC0+IHJldHNhbSAobm9uLWZhc3QtZm9yd2FyZCkkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmYWlscyBmb3Igbm9uLWZhc3QtZm9yd2FyZCByZWZzIHVubWF0Y2hlZCBieSByZW1vdGUgaGVscGVyOiBvdXIgb3V0cHV0JyAnCisJdGVzdF9pMThuZ3JlcCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UiIFwKKwkJb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggKGNodW5rZWQpJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IGNvbW1pdCBwYXRoMyAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGNvbmZpZyBodHRwLnBvc3RidWZmZXIgNCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNvbmZpZyAtLXVuc2V0IGh0dHAucG9zdGJ1ZmZlciIgJiYKKwlnaXQgcHVzaCAtdiAtdiBvcmlnaW4gJEJSQU5DSCAyPmVyciAmJgorCWdyZXAgIlBPU1QgZ2l0LXJlY2VpdmUtcGFjayAoY2h1bmtlZCkiIGVyciAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCAmJgorCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tYWxsIGNhbiBwdXNoIHRvIGVtcHR5IHJlcG8nICcKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvZW1wdHktYWxsLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJGQiICYmCisJZ2l0IC0tZ2l0LWRpcj0iJGQiIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlnaXQgcHVzaCAtLWFsbCAiJEhUVFBEX1VSTCIvc21hcnQvZW1wdHktYWxsLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tbWlycm9yIGNhbiBwdXNoIHRvIGVtcHR5IHJlcG8nICcKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvZW1wdHktbWlycm9yLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJGQiICYmCisJZ2l0IC0tZ2l0LWRpcj0iJGQiIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlnaXQgcHVzaCAtLW1pcnJvciAiJEhUVFBEX1VSTCIvc21hcnQvZW1wdHktbWlycm9yLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tYWxsIHRvIHJlcG8gd2l0aCBhbHRlcm5hdGVzJyAnCisJcz0kSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQgJiYKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYWx0ZXJuYXRlcy1hbGwuZ2l0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLXNoYXJlZCAiJHMiICIkZCIgJiYKKwlnaXQgLS1naXQtZGlyPSIkZCIgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCWdpdCAtLWdpdC1kaXI9IiRkIiByZXBhY2sgLWFkbCAmJgorCWdpdCBwdXNoIC0tYWxsICIkSFRUUERfVVJMIi9zbWFydC9hbHRlcm5hdGVzLWFsbC5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLW1pcnJvciB0byByZXBvIHdpdGggYWx0ZXJuYXRlcycgJworCXM9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90ZXN0X3JlcG8uZ2l0ICYmCisJZD0kSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2FsdGVybmF0ZXMtbWlycm9yLmdpdCAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLS1zaGFyZWQgIiRzIiAiJGQiICYmCisJZ2l0IC0tZ2l0LWRpcj0iJGQiIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlnaXQgLS1naXQtZGlyPSIkZCIgcmVwYWNrIC1hZGwgJiYKKwlnaXQgcHVzaCAtLW1pcnJvciAiJEhUVFBEX1VSTCIvc21hcnQvYWx0ZXJuYXRlcy1taXJyb3IuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdwdXNoIHNob3dzIHByb2dyZXNzIHdoZW4gc3RkZXJyIGlzIGEgdHR5JyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCXRlc3RfY29tbWl0IG5vaXN5ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgcHVzaCA+b3V0cHV0IDI+JjEgJiYKKwlncmVwICJeV3JpdGluZyBvYmplY3RzIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3B1c2ggLS1xdWlldCBzaWxlbmNlcyBzdGF0dXMgYW5kIHByb2dyZXNzJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCXRlc3RfY29tbWl0IHF1aWV0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgcHVzaCAtLXF1aWV0ID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3B1c2ggLS1uby1wcm9ncmVzcyBzaWxlbmNlcyBwcm9ncmVzcyBidXQgbm90IHN0YXR1cycgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwl0ZXN0X2NvbW1pdCBuby1wcm9ncmVzcyAmJgorCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLS1uby1wcm9ncmVzcyA+b3V0cHV0IDI+JjEgJiYKKwlncmVwICJeVG8gaHR0cCIgb3V0cHV0ICYmCisJISBncmVwICJeV3JpdGluZyBvYmplY3RzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tcHJvZ3Jlc3Mgc2hvd3MgcHJvZ3Jlc3MgdG8gbm9uLXR0eScgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwl0ZXN0X2NvbW1pdCBwcm9ncmVzcyAmJgorCWdpdCBwdXNoIC0tcHJvZ3Jlc3MgPm91dHB1dCAyPiYxICYmCisJZ3JlcCAiXlRvIGh0dHAiIG91dHB1dCAmJgorCWdyZXAgIl5Xcml0aW5nIG9iamVjdHMiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIHB1c2ggZ2l2ZXMgc2FuZSBkZWZhdWx0cyB0byByZWZsb2cnICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJdGVzdF9jb21taXQgcmVmbG9nLXRlc3QgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX1VSTCIvc21hcnQvdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCQlsb2cgLWcgLTEgLS1mb3JtYXQ9IiVnbiA8JWdlPiIgPmFjdHVhbCAmJgorCWVjaG8gImFub255bW91cyA8YW5vbnltb3VzQGh0dHAuMTI3LjAuMC4xPiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cCBwdXNoIHJlc3BlY3RzIEdJVF9DT01NSVRURVJfKiBpbiByZWZsb2cnICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJdGVzdF9jb21taXQgY3VzdG9tLXJlZmxvZy10ZXN0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkwiL3NtYXJ0X2N1c3RvbV9lbnYvdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCQlsb2cgLWcgLTEgLS1mb3JtYXQ9IiVnbiA8JWdlPiIgPmFjdHVhbCAmJgorCWVjaG8gIkN1c3RvbSBVc2VyIDxjdXN0b21AZXhhbXBsZS5jb20+IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG92ZXIgc21hcnQgaHR0cCB3aXRoIGF1dGgnICcKKwljZCAiJFJPT1RfUEFUSC90ZXN0X3JlcG9fY2xvbmUiICYmCisJZWNobyBwdXNoLWF1dGgtdGVzdCA+ZXhwZWN0ICYmCisJdGVzdF9jb21taXQgcHVzaC1hdXRoLXRlc3QgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX1VSTCIvYXV0aC9zbWFydC90ZXN0X3JlcG8uZ2l0ICYmCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90ZXN0X3JlcG8uZ2l0IiBcCisJCWxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZXhwZWN0X2Fza3Bhc3MgYm90aCB1c2VyQGhvc3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gYXV0aC1vbmx5LWZvci1wdXNoIHJlcG8nICcKKwljZCAiJFJPT1RfUEFUSC90ZXN0X3JlcG9fY2xvbmUiICYmCisJZWNobyBwdXNoLWhhbGYtYXV0aCA+ZXhwZWN0ICYmCisJdGVzdF9jb21taXQgcHVzaC1oYWxmLWF1dGggJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX1VSTCIvYXV0aC1wdXNoL3NtYXJ0L3Rlc3RfcmVwby5naXQgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQiIFwKKwkJbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworc3RvcF9odHRwZAordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTUwLWh0dHAtZmV0Y2guc2ggYi90L3Q1NTUwLWh0dHAtZmV0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODBkMjBjOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NTAtaHR0cC1mZXRjaC5zaApAQCAtMCwwICsxLDE3NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZHVtYiBmZXRjaGluZyBvdmVyIGh0dHAgdmlhIHN0YXRpYyBmaWxlJworLiAuL3Rlc3QtbGliLnNoCisKK2lmIHRlc3QgLW4gIiROT19DVVJMIjsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyB0ZXN0LCBnaXQgYnVpbHQgd2l0aG91dCBodHRwIHN1cHBvcnQnCisJdGVzdF9kb25lCitmaQorCitMSUJfSFRUUERfUE9SVD0ke0xJQl9IVFRQRF9QT1JULSc1NTUwJ30KKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5JyAnCisJZWNobyBjb250ZW50MSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lCisJZWNobyBjb250ZW50MiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBodHRwLWFjY2Vzc2libGUgYmFyZSByZXBvc2l0b3J5IHdpdGggbG9vc2Ugb2JqZWN0cycgJworCWNwIC1SIC5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSBnaXQgY29uZmlnIGNvcmUuYmFyZSB0cnVlICYmCisJIG1rZGlyIC1wIGhvb2tzICYmCisJIGVjaG8gImV4ZWMgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyIgPmhvb2tzL3Bvc3QtdXBkYXRlICYmCisJIGNobW9kICt4IGhvb2tzL3Bvc3QtdXBkYXRlICYmCisJIGhvb2tzL3Bvc3QtdXBkYXRlCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHB1YmxpYyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBodHRwIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9kdW1iL3JlcG8uZ2l0IGNsb25lLXRtcGwgJiYKKwljcCAtUiBjbG9uZS10bXBsIGNsb25lICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZS9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwYXNzd29yZC1wcm90ZWN0ZWQgcmVwb3NpdG9yeScgJworCW1rZGlyIC1wICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2F1dGgvZHVtYi8iICYmCisJY3AgLVJmICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBcCisJICAgICAgICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2F1dGgvZHVtYi9yZXBvLmdpdCIKKycKKworc2V0dXBfYXNrcGFzc19oZWxwZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBwYXNzd29yZC1wcm90ZWN0ZWQgcmVwb3NpdG9yeSBjYW4gZmFpbCcgJworCXNldF9hc2twYXNzIHdyb25nICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICIkSFRUUERfVVJML2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC1mYWlsICYmCisJZXhwZWN0X2Fza3Bhc3MgYm90aCB3cm9uZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGF1dGggY2FuIHVzZSB1c2VyL3Bhc3MgaW4gVVJMJyAnCisJc2V0X2Fza3Bhc3Mgd3JvbmcgJiYKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkxfVVNFUl9QQVNTL2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC1ub25lICYmCisJZXhwZWN0X2Fza3Bhc3Mgbm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGF1dGggY2FuIHVzZSBqdXN0IHVzZXIgaW4gVVJMJyAnCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0ICYmCisJZ2l0IGNsb25lICIkSFRUUERfVVJMX1VTRVIvYXV0aC9kdW1iL3JlcG8uZ2l0IiBjbG9uZS1hdXRoLXBhc3MgJiYKKwlleHBlY3RfYXNrcGFzcyBwYXNzIHVzZXJAaG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGF1dGggY2FuIHJlcXVlc3QgYm90aCB1c2VyIGFuZCBwYXNzJyAnCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0ICYmCisJZ2l0IGNsb25lICIkSFRUUERfVVJML2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC1ib3RoICYmCisJZXhwZWN0X2Fza3Bhc3MgYm90aCB1c2VyQGhvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cCBhdXRoIHJlc3BlY3RzIGNyZWRlbnRpYWwgaGVscGVyIGNvbmZpZycgJworCXRlc3RfY29uZmlnX2dsb2JhbCBjcmVkZW50aWFsLmhlbHBlciAiIWYoKSB7CisJCWNhdCA+L2Rldi9udWxsCisJCWVjaG8gdXNlcm5hbWU9dXNlckBob3N0CisJCWVjaG8gcGFzc3dvcmQ9dXNlckBob3N0CisJfTsgZiIgJiYKKwlzZXRfYXNrcGFzcyB3cm9uZyAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTC9hdXRoL2R1bWIvcmVwby5naXQiIGNsb25lLWF1dGgtaGVscGVyICYmCisJZXhwZWN0X2Fza3Bhc3Mgbm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGF1dGggY2FuIGdldCB1c2VybmFtZSBmcm9tIGNvbmZpZycgJworCXRlc3RfY29uZmlnX2dsb2JhbCAiY3JlZGVudGlhbC4kSFRUUERfVVJMLnVzZXJuYW1lIiB1c2VyQGhvc3QgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgJiYKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkwvYXV0aC9kdW1iL3JlcG8uZ2l0IiBjbG9uZS1hdXRoLXVzZXIgJiYKKwlleHBlY3RfYXNrcGFzcyBwYXNzIHVzZXJAaG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmVkIHVzZXJuYW1lIGRvZXMgbm90IG92ZXJyaWRlIFVSTCcgJworCXRlc3RfY29uZmlnX2dsb2JhbCAiY3JlZGVudGlhbC4kSFRUUERfVVJMLnVzZXJuYW1lIiB3cm9uZyAmJgorCXNldF9hc2twYXNzIHVzZXJAaG9zdCAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTF9VU0VSL2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC11c2VyMiAmJgorCWV4cGVjdF9hc2twYXNzIHBhc3MgdXNlckBob3N0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNoYW5nZXMgdmlhIGh0dHAnICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwlnaXQgcHVzaCBwdWJsaWMgJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IHB1bGwpICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZS9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNoYW5nZXMgdmlhIG1hbnVhbCBodHRwLWZldGNoJyAnCisJY3AgLVIgY2xvbmUtdG1wbCBjbG9uZTIgJiYKKworCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJKGNkIGNsb25lMiAmJgorCSBnaXQgaHR0cC1mZXRjaCAtYSAtdyBoZWFkcy9tYXN0ZXItbmV3ICRIRUFEICQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3Rlci1uZXcgJiYKKwkgdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSkgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lMi9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgcmVtb3RlIGRldGVjdHMgY29ycmVjdCBIRUFEJyAnCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjpvdGhlciAmJgorCShjZCBjbG9uZSAmJgorCSBnaXQgcmVtb3RlIHNldC1oZWFkIG9yaWdpbiAtZCAmJgorCSBnaXQgcmVtb3RlIHNldC1oZWFkIG9yaWdpbiAtYSAmJgorCSBnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCA+IG91dHB1dCAmJgorCSBlY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID4gZXhwZWN0ICYmCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHBhY2tlZCBvYmplY3RzJyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG8uZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2suZ2l0ICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2suZ2l0ICYmCisJIGdpdCAtLWJhcmUgcmVwYWNrIC1hIC1kCisJKSAmJgorCWdpdCBjbG9uZSAkSFRUUERfVVJML2R1bWIvcmVwb19wYWNrLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBub3RpY2VzIGNvcnJ1cHQgcGFjaycgJworCWNwIC1SICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2suZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX2JhZDEuZ2l0ICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX2JhZDEuZ2l0ICYmCisJIHA9YGxzIG9iamVjdHMvcGFjay9wYWNrLSoucGFja2AgJiYKKwkgY2htb2QgdSt3ICRwICYmCisJIHByaW50ZiAlMDI1NmQgMCB8IGRkIG9mPSRwIGJzPTI1NiBjb3VudD0xIHNlZWs9MSBjb252PW5vdHJ1bmMKKwkpICYmCisJbWtkaXIgcmVwb19iYWQxLmdpdCAmJgorCShjZCByZXBvX2JhZDEuZ2l0ICYmCisJIGdpdCAtLWJhcmUgaW5pdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgLS1iYXJlIGZldGNoICRIVFRQRF9VUkwvZHVtYi9yZXBvX2JhZDEuZ2l0ICYmCisJIHRlc3QgMCA9IGBscyBvYmplY3RzL3BhY2svcGFjay0qLnBhY2sgfCB3YyAtbGAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5vdGljZXMgY29ycnVwdCBpZHgnICcKKwljcCAtUiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19iYWQyLmdpdCAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19iYWQyLmdpdCAmJgorCSBwPWBscyBvYmplY3RzL3BhY2svcGFjay0qLmlkeGAgJiYKKwkgY2htb2QgdSt3ICRwICYmCisJIHByaW50ZiAlMDI1NmQgMCB8IGRkIG9mPSRwIGJzPTI1NiBjb3VudD0xIHNlZWs9MSBjb252PW5vdHJ1bmMKKwkpICYmCisJbWtkaXIgcmVwb19iYWQyLmdpdCAmJgorCShjZCByZXBvX2JhZDIuZ2l0ICYmCisJIGdpdCAtLWJhcmUgaW5pdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgLS1iYXJlIGZldGNoICRIVFRQRF9VUkwvZHVtYi9yZXBvX2JhZDIuZ2l0ICYmCisJIHRlc3QgMCA9IGBscyBvYmplY3RzL3BhY2sgfCB3YyAtbGAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZCBub3QgdXNlIHVwbG9hZC1wYWNrIHNlcnZpY2UnICcKKwlncmVwICcvZ2l0LXVwbG9hZC1wYWNrJyA8IiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cgPmFjdAorCTogPmV4cAorCXRlc3RfY21wIGV4cCBhY3QKKycKKworc3RvcF9odHRwZAordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTUxLWh0dHAtZmV0Y2guc2ggYi90L3Q1NTUxLWh0dHAtZmV0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTA2MDg3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NTEtaHR0cC1mZXRjaC5zaApAQCAtMCwwICsxLDE3NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgc21hcnQgZmV0Y2hpbmcgb3ZlciBodHRwIHZpYSBodHRwLWJhY2tlbmQnCisuIC4vdGVzdC1saWIuc2gKKworaWYgdGVzdCAtbiAiJE5PX0NVUkwiOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHRlc3QsIGdpdCBidWlsdCB3aXRob3V0IGh0dHAgc3VwcG9ydCcKKwl0ZXN0X2RvbmUKK2ZpCisKK0xJQl9IVFRQRF9QT1JUPSR7TElCX0hUVFBEX1BPUlQtJzU1NTEnfQorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgaHR0cC1hY2Nlc3NpYmxlIGJhcmUgcmVwb3NpdG9yeScgJworCW1rZGlyICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkgZ2l0IC0tYmFyZSBpbml0CisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHB1YmxpYyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlcgorJworCitzZXR1cF9hc2twYXNzX2hlbHBlcgorCitjYXQgPmV4cCA8PEVPRgorPiBHRVQgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMQorPiBBY2NlcHQ6ICovKgorPiBBY2NlcHQtRW5jb2Rpbmc6IGd6aXAKKz4gUHJhZ21hOiBuby1jYWNoZQorPCBIVFRQLzEuMSAyMDAgT0sKKzwgUHJhZ21hOiBuby1jYWNoZQorPCBDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGUKKzwgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1hZHZlcnRpc2VtZW50Cis+IFBPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMQorPiBBY2NlcHQtRW5jb2Rpbmc6IGd6aXAKKz4gQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1yZXF1ZXN0Cis+IEFjY2VwdDogYXBwbGljYXRpb24veC1naXQtdXBsb2FkLXBhY2stcmVzdWx0Cis+IENvbnRlbnQtTGVuZ3RoOiB4eHgKKzwgSFRUUC8xLjEgMjAwIE9LCis8IFByYWdtYTogbm8tY2FjaGUKKzwgQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlCis8IENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtdXBsb2FkLXBhY2stcmVzdWx0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGh0dHAgcmVwb3NpdG9yeScgJworCUdJVF9DVVJMX1ZFUkJPU0U9MSBnaXQgY2xvbmUgLS1xdWlldCAkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IGNsb25lIDI+ZXJyICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZS9maWxlICYmCisJdHIgJ1wnJ1wwMTUnXCcnIFEgPGVyciB8CisJc2VkIC1lICIKKwkJcy9RXCQvLworCQkvXlsqXSAvZAorCQkvXiQvZAorCQkvXjwgJC9kCisKKwkJL15bXj48XS97CisJCQlzL14vPiAvCisJCX0KKworCQkvXj4gVXNlci1BZ2VudDogL2QKKwkJL14+IEhvc3Q6IC9kCisJCS9ePiBQT1NUIC8sJCB7CisJCQkvXj4gQWNjZXB0OiBbKl1cXC9bKl0vZAorCQl9CisJCXMvXj4gQ29udGVudC1MZW5ndGg6IC4qLz4gQ29udGVudC1MZW5ndGg6IHh4eC8KKwkJL14+IDAwLi53YW50IC9kCisJCS9ePiAwMC4qZG9uZS9kCisKKwkJL148IFNlcnZlcjogL2QKKwkJL148IEV4cGlyZXM6IC9kCisJCS9ePCBEYXRlOiAvZAorCQkvXjwgQ29udGVudC1MZW5ndGg6IC9kCisJCS9ePCBUcmFuc2Zlci1FbmNvZGluZzogL2QKKwkiID5hY3QgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNoYW5nZXMgdmlhIGh0dHAnICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwlnaXQgcHVzaCBwdWJsaWMKKwkoY2QgY2xvbmUgJiYgZ2l0IHB1bGwpICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZS9maWxlCisnCisKK2NhdCA+ZXhwIDw8RU9GCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZWQgdXBsb2FkLXBhY2sgc2VydmljZScgJworCXNlZCAtZSAiCisJCXMvXi4qIFwiLy8KKwkJcy9cIi8vCisJCXMvIFsxLTldWzAtOV0qXCQvLworCQlzL15HRVQgL0dFVCAgLworCSIgPmFjdCA8IiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyByZWRpcmVjdHMgKDMwMSknICcKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC1yZWRpci1wZXJtL3JlcG8uZ2l0IC0tcXVpZXQgcmVwby1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyByZWRpcmVjdHMgKDMwMiknICcKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC1yZWRpci10ZW1wL3JlcG8uZ2l0IC0tcXVpZXQgcmVwby10CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZyb20gcGFzc3dvcmQtcHJvdGVjdGVkIHJlcG9zaXRvcnknICcKKwllY2hvIHR3byA+ZXhwZWN0ICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAiJEhUVFBEX1VSTC9hdXRoL3NtYXJ0L3JlcG8uZ2l0IiBzbWFydC1hdXRoICYmCisJZXhwZWN0X2Fza3Bhc3MgYm90aCB1c2VyQGhvc3QgJiYKKwlnaXQgLS1naXQtZGlyPXNtYXJ0LWF1dGggbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZyb20gYXV0aC1vbmx5LWZvci1wdXNoIHJlcG9zaXRvcnknICcKKwllY2hvIHR3byA+ZXhwZWN0ICYmCisJc2V0X2Fza3Bhc3Mgd3JvbmcgJiYKKwlnaXQgY2xvbmUgLS1iYXJlICIkSFRUUERfVVJML2F1dGgtcHVzaC9zbWFydC9yZXBvLmdpdCIgc21hcnQtbm9hdXRoICYmCisJZXhwZWN0X2Fza3Bhc3Mgbm9uZSAmJgorCWdpdCAtLWdpdC1kaXI9c21hcnQtbm9hdXRoIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlIGR1bWIgaHR0cCBvbiBzZXJ2ZXInICcKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBcCisJCWNvbmZpZyBodHRwLmdldGFueWZpbGUgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1NNQVJUX0hUVFAgY2FuIGRpc2FibGUgc21hcnQgaHR0cCcgJworCShHSVRfU01BUlRfSFRUUD0wICYmCisJIGV4cG9ydCBHSVRfU01BUlRfSFRUUCAmJgorCSBjZCBjbG9uZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2gpCisnCisKK3Rlc3QgLW4gIiRHSVRfVEVTVF9MT05HIiAmJiB0ZXN0X3NldF9wcmVyZXEgRVhQRU5TSVZFCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFICdjcmVhdGUgNTAsMDAwIHRhZ3MgaW4gdGhlIHJlcG8nICcKKwkoCisJY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZm9yIGkgaW4gYHRlc3Rfc2VxIDUwMDAwYAorCWRvCisJCWVjaG8gImNvbW1pdCByZWZzL2hlYWRzL3Rvby1tYW55LXJlZnMiCisJCWVjaG8gIm1hcmsgOiRpIgorCQllY2hvICJjb21taXR0ZXIgZ2l0IDxnaXRAZXhhbXBsZS5jb20+ICRpICswMDAwIgorCQllY2hvICJkYXRhIDAiCisJCWVjaG8gIk0gNjQ0IGlubGluZSBibGEudHh0IgorCQllY2hvICJkYXRhIDQiCisJCWVjaG8gImJsYSIKKwkJIyBtYWtlIGV2ZXJ5IGNvbW1pdCBkYW5nbGluZyBieSBhbHdheXMKKwkJIyByZXdpbmRpbmcgdGhlIGJyYW5jaCBhZnRlciBlYWNoIGNvbW1pdAorCQllY2hvICJyZXNldCByZWZzL2hlYWRzL3Rvby1tYW55LXJlZnMiCisJCWVjaG8gImZyb20gOjEiCisJZG9uZSB8IGdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcyAmJgorCisJIyBub3cgYXNzaWduIHRhZ3MgdG8gYWxsIHRoZSBkYW5nbGluZyBjb21taXRzIHdlIGNyZWF0ZWQgYWJvdmUKKwl0YWc9JCgiJFBFUkxfUEFUSCIgLWUgInByaW50IFwiYmxhXCIgeCAzMCIpICYmCisJc2VkIC1lICJzL146XCguXCtcKSBcKC5cK1wpJC9cMiByZWZzXC90YWdzXC8kdGFnLVwxLyIgPG1hcmtzID4+cGFja2VkLXJlZnMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFICdjbG9uZSB0aGUgNTAsMDAwIHRhZyByZXBvIHRvIGNoZWNrIE9TIGNvbW1hbmQgbGluZSBvdmVyZmxvdycgJworCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IHRvby1tYW55LXJlZnMgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCitzdG9wX2h0dHBkCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NjAtaHR0cC1iYWNrZW5kLW5vc2VydmVyLnNoIGIvdC90NTU2MC1odHRwLWJhY2tlbmQtbm9zZXJ2ZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWY5OGQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NjAtaHR0cC1iYWNrZW5kLW5vc2VydmVyLnNoCkBAIC0wLDAgKzEsNzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdC1odHRwLWJhY2tlbmQtbm9zZXJ2ZXInCisuIC4vdGVzdC1saWIuc2gKKworSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIPSIkVFJBU0hfRElSRUNUT1JZIgorCit0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXICYmIGV4cG9ydCBHUkVQX09QVElPTlM9LVUKKworcnVuX2JhY2tlbmQoKSB7CisJZWNobyAiJDIiIHwKKwlRVUVSWV9TVFJJTkc9IiR7MSMqXD99IiBcCisJUEFUSF9UUkFOU0xBVEVEPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRILyR7MSUlXD8qfSIgXAorCWdpdCBodHRwLWJhY2tlbmQgPmFjdC5vdXQgMj5hY3QuZXJyCit9CisKK0dFVCgpIHsKKwlSRVFVRVNUX01FVEhPRD0iR0VUIiAmJiBleHBvcnQgUkVRVUVTVF9NRVRIT0QgJiYKKwlydW5fYmFja2VuZCAiL3JlcG8uZ2l0LyQxIiAmJgorCXNhbmVfdW5zZXQgUkVRVUVTVF9NRVRIT0QgJiYKKwlpZiAhIGdyZXAgIlN0YXR1cyIgYWN0Lm91dCA+YWN0CisJdGhlbgorCQlwcmludGYgIlN0YXR1czogMjAwIE9LXHJcbiIgPmFjdAorCWZpCisJcHJpbnRmICJTdGF0dXM6ICQyXHJcbiIgPmV4cCAmJgorCXRlc3RfY21wIGV4cCBhY3QKK30KKworUE9TVCgpIHsKKwlSRVFVRVNUX01FVEhPRD0iUE9TVCIgJiYgZXhwb3J0IFJFUVVFU1RfTUVUSE9EICYmCisJQ09OVEVOVF9UWVBFPSJhcHBsaWNhdGlvbi94LSQxLXJlcXVlc3QiICYmIGV4cG9ydCBDT05URU5UX1RZUEUgJiYKKwlydW5fYmFja2VuZCAiL3JlcG8uZ2l0LyQxIiAiJDIiICYmCisJc2FuZV91bnNldCBSRVFVRVNUX01FVEhPRCAmJgorCXNhbmVfdW5zZXQgQ09OVEVOVF9UWVBFICYmCisJaWYgISBncmVwICJTdGF0dXMiIGFjdC5vdXQgPmFjdAorCXRoZW4KKwkJcHJpbnRmICJTdGF0dXM6IDIwMCBPS1xyXG4iID5hY3QKKwlmaQorCXByaW50ZiAiU3RhdHVzOiAkM1xyXG4iID5leHAgJiYKKwl0ZXN0X2NtcCBleHAgYWN0Cit9CisKK2xvZ19kaXYoKSB7CisJcmV0dXJuIDAKK30KKworLiAiJFRFU1RfRElSRUNUT1JZIi90NTU2eF9jb21tb24KKworZXhwZWN0X2FsaWFzZWQoKSB7CisJUkVRVUVTVF9NRVRIT0Q9IkdFVCIgJiYgZXhwb3J0IFJFUVVFU1RfTUVUSE9EICYmCisJaWYgdGVzdCAkMSA9IDA7IHRoZW4KKwkJcnVuX2JhY2tlbmQgIiQyIgorCWVsc2UKKwkJcnVuX2JhY2tlbmQgIiQyIiAmJgorCQllY2hvICJmYXRhbDogJyQyJzogYWxpYXNlZCIgPmV4cC5lcnIgJiYKKwkJdGVzdF9jbXAgZXhwLmVyciBhY3QuZXJyCisJZmkKKwl1bnNldCBSRVFVRVNUX01FVEhPRAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLWJhY2tlbmQgYmxvY2tzIGJhZCBQQVRIX0lORk8nICcKKwljb25maWcgaHR0cC5nZXRhbnlmaWxlIHRydWUgJiYKKworCWV4cGVjdF9hbGlhc2VkIDAgL3JlcG8uZ2l0L0hFQUQgJiYKKworCWV4cGVjdF9hbGlhc2VkIDEgL3JlcG8uZ2l0Ly4uL0hFQUQgJiYKKwlleHBlY3RfYWxpYXNlZCAxIC8uLi9ldGMvcGFzc3dkICYmCisJZXhwZWN0X2FsaWFzZWQgMSAuLi9ldGMvcGFzc3dkICYmCisJZXhwZWN0X2FsaWFzZWQgMSAvZXRjLy9wYXNzd2QgJiYKKwlleHBlY3RfYWxpYXNlZCAxIC9ldGMvLi9wYXNzd2QgJiYKKwlleHBlY3RfYWxpYXNlZCAxIC8vZG9tYWluL2RhdGEudHh0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU2MS1odHRwLWJhY2tlbmQuc2ggYi90L3Q1NTYxLWh0dHAtYmFja2VuZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNWQ3ZmJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU2MS1odHRwLWJhY2tlbmQuc2gKQEAgLTAsMCArMSwxNDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdC1odHRwLWJhY2tlbmQnCisuIC4vdGVzdC1saWIuc2gKKworaWYgdGVzdCAtbiAiJE5PX0NVUkwiOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHRlc3QsIGdpdCBidWlsdCB3aXRob3V0IGh0dHAgc3VwcG9ydCcKKwl0ZXN0X2RvbmUKK2ZpCisKK0xJQl9IVFRQRF9QT1JUPSR7TElCX0hUVFBEX1BPUlQtJzU1NjEnfQorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK0dFVCgpIHsKKwljdXJsIC0taW5jbHVkZSAiJEhUVFBEX1VSTC8kU01BUlQvcmVwby5naXQvJDEiID5vdXQgMj4vZGV2L251bGwgJiYKKwl0ciAnXDAxNScgUSA8b3V0IHwKKwlzZWQgJworCQlzL1EkLy8KKwkJMXEKKwknID5hY3QgJiYKKwllY2hvICJIVFRQLzEuMSAkMiIgPmV4cCAmJgorCXRlc3RfY21wIGV4cCBhY3QKK30KKworUE9TVCgpIHsKKwljdXJsIC0taW5jbHVkZSAtLWRhdGEgIiQyIiBcCisJLS1oZWFkZXIgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC0kMS1yZXF1ZXN0IiBcCisJIiRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQvJDEiID5vdXQgMj4vZGV2L251bGwgJiYKKwl0ciAnXDAxNScgUSA8b3V0IHwKKwlzZWQgJworCQlzL1EkLy8KKwkJMXEKKwknID5hY3QgJiYKKwllY2hvICJIVFRQLzEuMSAkMyIgPmV4cCAmJgorCXRlc3RfY21wIGV4cCBhY3QKK30KKworbG9nX2RpdigpIHsKKwllY2hvID4+IiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cKKwllY2hvICIjIyMgICQxIiA+PiIkSFRUUERfUk9PVF9QQVRIIi9hY2Nlc3MubG9nCisJZWNobyAiIyMjIiA+PiIkSFRUUERfUk9PVF9QQVRIIi9hY2Nlc3MubG9nCit9CisKKy4gIiRURVNUX0RJUkVDVE9SWSIvdDU1NnhfY29tbW9uCisKK2NhdCA+ZXhwIDw8RU9GCisKKyMjIyAgcmVmcy9oZWFkcy9tYXN0ZXIKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgSFRUUC8xLjEgNDA0IC0KKworIyMjICBnZXRhbnlmaWxlIGRlZmF1bHQKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvSEVBRCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9wYWNrcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kTE9PU0VfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvJFBBQ0tfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvJElEWF9VUkwgSFRUUC8xLjEgMjAwCisKKyMjIyAgbm8gZ2l0LWRhZW1vbi1leHBvcnQtb2sKKyMjIworR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvSEVBRCBIVFRQLzEuMSA0MDQgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvaW5mby9yZWZzIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vcGFja3MgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kTE9PU0VfVVJMIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kUEFDS19VUkwgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0LyRJRFhfVVJMIEhUVFAvMS4xIDQwNCAtCisKKyMjIyAgZ2l0LWRhZW1vbi1leHBvcnQtb2sKKyMjIworR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvSEVBRCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L2luZm8vcmVmcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9wYWNrcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kTE9PU0VfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvJFBBQ0tfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvJElEWF9VUkwgSFRUUC8xLjEgMjAwCisKKyMjIyAgZ2V0YW55ZmlsZSB0cnVlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L0hFQUQgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnMgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vcGFja3MgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBIVFRQLzEuMSAyMDAgLQorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyBIVFRQLzEuMSAyMDAgLQorR0VUICAvc21hcnQvcmVwby5naXQvJExPT1NFX1VSTCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRQQUNLX1VSTCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRJRFhfVVJMIEhUVFAvMS4xIDIwMAorCisjIyMgIGdldGFueWZpbGUgZmFsc2UKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvSEVBRCBIVFRQLzEuMSA0MDMgLQorR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vcGFja3MgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kTE9PU0VfVVJMIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kUEFDS19VUkwgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRJRFhfVVJMIEhUVFAvMS4xIDQwMyAtCisKKyMjIyAgdXBsb2FkcGFjayBkZWZhdWx0CisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAgLQorCisjIyMgIHVwbG9hZHBhY2sgdHJ1ZQorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwIC0KKworIyMjICB1cGxvYWRwYWNrIGZhbHNlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSA0MDMgLQorUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDQwMyAtCisKKyMjIyAgcmVjZWl2ZXBhY2sgZGVmYXVsdAorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDQwMyAtCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDQwMyAtCisKKyMjIyAgcmVjZWl2ZXBhY2sgdHJ1ZQorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAgLQorCisjIyMgIHJlY2VpdmVwYWNrIGZhbHNlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgNDAzIC0KK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgNDAzIC0KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VydmVyIHJlcXVlc3QgbG9nIG1hdGNoZXMgdGVzdCByZXN1bHRzJyAnCisJc2VkIC1lICIKKwkJcy9eLiogXCIvLworCQlzL1wiLy8KKwkJcy8gWzEtOV1bMC05XSpcJC8vCisJCXMvXkdFVCAvR0VUICAvCisJIiA+YWN0IDwiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZyAmJgorCXRlc3RfY21wIGV4cCBhY3QKKycKKworc3RvcF9odHRwZAordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTZ4X2NvbW1vbiBiL3QvdDU1NnhfY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyOTI2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTZ4X2NvbW1vbgpAQCAtMCwwICsxLDEyMiBAQAorIyEvYmluL3NoCisKK2ZpbmRfZmlsZSgpIHsKKwljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlmaW5kICQxIC10eXBlIGYgfAorCXNlZCAtZSAxcQorfQorCitjb25maWcoKSB7CisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgY29uZmlnICQxICQyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCisJbWtkaXIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSBnaXQgLS1iYXJlIGluaXQgJiYKKwkgOiA+b2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkgOiA+b2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcworCSkgJiYKKwlnaXQgcmVtb3RlIGFkZCBwdWJsaWMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjptYXN0ZXIgJiYKKworCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkgZ2l0IHJlcGFjayAtYSAtZAorCSkgJiYKKworCWVjaG8gb3RoZXIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHR3byAmJgorCWdpdCBwdXNoIHB1YmxpYyBtYXN0ZXI6bWFzdGVyICYmCisKKwlMT09TRV9VUkw9JChmaW5kX2ZpbGUgb2JqZWN0cy8/PykgJiYKKwlQQUNLX1VSTD0kKGZpbmRfZmlsZSBvYmplY3RzL3BhY2svKi5wYWNrKSAmJgorCUlEWF9VUkw9JChmaW5kX2ZpbGUgb2JqZWN0cy9wYWNrLyouaWR4KQorJworCitnZXRfc3RhdGljX2ZpbGVzKCkgeworCUdFVCBIRUFEICIkMSIgJiYKKwlHRVQgaW5mby9yZWZzICIkMSIgJiYKKwlHRVQgb2JqZWN0cy9pbmZvL3BhY2tzICIkMSIgJiYKKwlHRVQgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgIiQxIiAmJgorCUdFVCBvYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzICIkMSIgJiYKKwlHRVQgJExPT1NFX1VSTCAiJDEiICYmCisJR0VUICRQQUNLX1VSTCAiJDEiICYmCisJR0VUICRJRFhfVVJMICIkMSIKK30KKworU01BUlQ9c21hcnQKK0dJVF9IVFRQX0VYUE9SVF9BTEw9MSAmJiBleHBvcnQgR0lUX0hUVFBfRVhQT1JUX0FMTAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0IHJlZnMvaGVhZHMvbWFzdGVyIG5vdCBmb3VuZCcgJworCWxvZ19kaXYgInJlZnMvaGVhZHMvbWFzdGVyIiAmJgorCUdFVCByZWZzL2hlYWRzL21hc3RlciAiNDA0IE5vdCBGb3VuZCIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBmaWxlIGlzIG9rJyAnCisJbG9nX2RpdiAiZ2V0YW55ZmlsZSBkZWZhdWx0IiAmJgorCWdldF9zdGF0aWNfZmlsZXMgIjIwMCBPSyIKKycKK1NNQVJUPXNtYXJ0X25vZXhwb3J0Cit1bnNldCBHSVRfSFRUUF9FWFBPUlRfQUxMCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBleHBvcnQgYnkgZGVmYXVsdCcgJworCWxvZ19kaXYgIm5vIGdpdC1kYWVtb24tZXhwb3J0LW9rIiAmJgorCWdldF9zdGF0aWNfZmlsZXMgIjQwNCBOb3QgRm91bmQiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBvcnQgaWYgZ2l0LWRhZW1vbi1leHBvcnQtb2snICcKKwlsb2dfZGl2ICJnaXQtZGFlbW9uLWV4cG9ydC1vayIgJiYKKyAgICAgICAgKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSB0b3VjaCBnaXQtZGFlbW9uLWV4cG9ydC1vaworCSkgJiYKKyAgICAgICAgZ2V0X3N0YXRpY19maWxlcyAiMjAwIE9LIgorJworU01BUlQ9c21hcnQKK0dJVF9IVFRQX0VYUE9SVF9BTEw9MSAmJiBleHBvcnQgR0lUX0hUVFBfRVhQT1JUX0FMTAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGZpbGUgaWYgaHR0cC5nZXRhbnlmaWxlIHRydWUgaXMgb2snICcKKwlsb2dfZGl2ICJnZXRhbnlmaWxlIHRydWUiICYmCisJY29uZmlnIGh0dHAuZ2V0YW55ZmlsZSB0cnVlICYmCisJZ2V0X3N0YXRpY19maWxlcyAiMjAwIE9LIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGZpbGUgaWYgaHR0cC5nZXRhbnlmaWxlIGZhbHNlIGZhaWxzJyAnCisJbG9nX2RpdiAiZ2V0YW55ZmlsZSBmYWxzZSIgJiYKKwljb25maWcgaHR0cC5nZXRhbnlmaWxlIGZhbHNlICYmCisJZ2V0X3N0YXRpY19maWxlcyAiNDAzIEZvcmJpZGRlbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC51cGxvYWRwYWNrIGRlZmF1bHQgZW5hYmxlZCcgJworCWxvZ19kaXYgInVwbG9hZHBhY2sgZGVmYXVsdCIgJiYKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrICIyMDAgT0siICAmJgorCVBPU1QgZ2l0LXVwbG9hZC1wYWNrIDAwMDAgIjIwMCBPSyIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAudXBsb2FkcGFjayB0cnVlJyAnCisJbG9nX2RpdiAidXBsb2FkcGFjayB0cnVlIiAmJgorCWNvbmZpZyBodHRwLnVwbG9hZHBhY2sgdHJ1ZSAmJgorCUdFVCBpbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgIjIwMCBPSyIgJiYKKwlQT1NUIGdpdC11cGxvYWQtcGFjayAwMDAwICIyMDAgT0siCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLnVwbG9hZHBhY2sgZmFsc2UnICcKKwlsb2dfZGl2ICJ1cGxvYWRwYWNrIGZhbHNlIiAmJgorCWNvbmZpZyBodHRwLnVwbG9hZHBhY2sgZmFsc2UgJiYKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrICI0MDMgRm9yYmlkZGVuIiAmJgorCVBPU1QgZ2l0LXVwbG9hZC1wYWNrIDAwMDAgIjQwMyBGb3JiaWRkZW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAucmVjZWl2ZXBhY2sgZGVmYXVsdCBkaXNhYmxlZCcgJworCWxvZ19kaXYgInJlY2VpdmVwYWNrIGRlZmF1bHQiICYmCisJR0VUIGluZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgIjQwMyBGb3JiaWRkZW4iICAmJgorCVBPU1QgZ2l0LXJlY2VpdmUtcGFjayAwMDAwICI0MDMgRm9yYmlkZGVuIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC5yZWNlaXZlcGFjayB0cnVlJyAnCisJbG9nX2RpdiAicmVjZWl2ZXBhY2sgdHJ1ZSIgJiYKKwljb25maWcgaHR0cC5yZWNlaXZlcGFjayB0cnVlICYmCisJR0VUIGluZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgIjIwMCBPSyIgJiYKKwlQT1NUIGdpdC1yZWNlaXZlLXBhY2sgMDAwMCAiMjAwIE9LIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC5yZWNlaXZlcGFjayBmYWxzZScgJworCWxvZ19kaXYgInJlY2VpdmVwYWNrIGZhbHNlIiAmJgorCWNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIGZhbHNlICYmCisJR0VUIGluZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgIjQwMyBGb3JiaWRkZW4iICYmCisJUE9TVCBnaXQtcmVjZWl2ZS1wYWNrIDAwMDAgIjQwMyBGb3JiaWRkZW4iCisnCmRpZmYgLS1naXQgYS90L3Q1NTcwLWdpdC1kYWVtb24uc2ggYi90L3Q1NTcwLWdpdC1kYWVtb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTNhNGU0NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NzAtZ2l0LWRhZW1vbi5zaApAQCAtMCwwICsxLDE0NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZmV0Y2hpbmcgb3ZlciBnaXQgcHJvdG9jb2wnCisuIC4vdGVzdC1saWIuc2gKKworTElCX0dJVF9EQUVNT05fUE9SVD0ke0xJQl9HSVRfREFFTU9OX1BPUlQtNTU3MH0KKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdpdC1kYWVtb24uc2gKK3N0YXJ0X2dpdF9kYWVtb24KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBnaXQtYWNjZXNzaWJsZSBiYXJlIHJlcG9zaXRvcnknICcKKwlta2RpciAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCShjZCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSBnaXQgLS1iYXJlIGluaXQgJiYKKwkgOiA+Z2l0LWRhZW1vbi1leHBvcnQtb2sKKwkpICYmCisJZ2l0IHJlbW90ZSBhZGQgcHVibGljICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjptYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZ2l0IHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgIiRHSVRfREFFTU9OX1VSTC9yZXBvLmdpdCIgY2xvbmUgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2hhbmdlcyB2aWEgZ2l0IHByb3RvY29sJyAnCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJZ2l0IHB1c2ggcHVibGljICYmCisJKGNkIGNsb25lICYmIGdpdCBwdWxsKSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZW1vdGUgZGV0ZWN0cyBjb3JyZWN0IEhFQUQnICcKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm90aGVyICYmCisJKGNkIGNsb25lICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgLWQgb3JpZ2luICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgLWEgb3JpZ2luICYmCisJIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEID4gb3V0cHV0ICYmCisJIGVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPiBleHBlY3QgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBwYWNrIG9iamVjdHMnICcKKwljcCAtUiAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvLmdpdCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2suZ2l0ICYmCisJKGNkICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgJiYKKwkgZ2l0IC0tYmFyZSByZXBhY2sgLWEgLWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5vdGljZXMgY29ycnVwdCBwYWNrJyAnCisJY3AgLVIgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX2JhZDEuZ2l0ICYmCisJKGNkICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMS5naXQgJiYKKwkgcD1gbHMgb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrYCAmJgorCSBjaG1vZCB1K3cgJHAgJiYKKwkgcHJpbnRmICUwMjU2ZCAwIHwgZGQgb2Y9JHAgYnM9MjU2IGNvdW50PTEgc2Vlaz0xIGNvbnY9bm90cnVuYworCSkgJiYKKwlta2RpciByZXBvX2JhZDEuZ2l0ICYmCisJKGNkIHJlcG9fYmFkMS5naXQgJiYKKwkgZ2l0IC0tYmFyZSBpbml0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCAtLWJhcmUgZmV0Y2ggIiRHSVRfREFFTU9OX1VSTC9yZXBvX2JhZDEuZ2l0IiAmJgorCSB0ZXN0IDAgPSBgbHMgb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrIHwgd2MgLWxgCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBub3RpY2VzIGNvcnJ1cHQgaWR4JyAnCisJY3AgLVIgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX2JhZDIuZ2l0ICYmCisJKGNkICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMi5naXQgJiYKKwkgcD1gbHMgb2JqZWN0cy9wYWNrL3BhY2stKi5pZHhgICYmCisJIGNobW9kIHUrdyAkcCAmJgorCSBwcmludGYgJTAyNTZkIDAgfCBkZCBvZj0kcCBicz0yNTYgY291bnQ9MSBzZWVrPTEgY29udj1ub3RydW5jCisJKSAmJgorCW1rZGlyIHJlcG9fYmFkMi5naXQgJiYKKwkoY2QgcmVwb19iYWQyLmdpdCAmJgorCSBnaXQgLS1iYXJlIGluaXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tYmFyZSBmZXRjaCAiJEdJVF9EQUVNT05fVVJML3JlcG9fYmFkMi5naXQiICYmCisJIHRlc3QgMCA9IGBscyBvYmplY3RzL3BhY2sgfCB3YyAtbGAKKwkpCisnCisKK3Rlc3RfcmVtb3RlX2Vycm9yKCkKK3sKKwlkb19leHBvcnQ9WWVzUGxlYXNlCisJd2hpbGUgdGVzdCAkIyAtZ3QgMAorCWRvCisJCWNhc2UgJDEgaW4KKwkJLXgpCisJCQlzaGlmdAorCQkJY2htb2QgLXggIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIKKwkJCTs7CisJCS1uKQorCQkJc2hpZnQKKwkJCWRvX2V4cG9ydD0KKwkJCTs7CisJCSopCisJCQlicmVhaworCQllc2FjCisJZG9uZQorCisJbXNnPSQxCisJc2hpZnQKKwljbWQ9JDEKKwlzaGlmdAorCXJlcG89JDEKKwlzaGlmdCB8fCBlcnJvciAiaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorCisJaWYgdGVzdCAteCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRILyRyZXBvIgorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJGRvX2V4cG9ydCIKKwkJdGhlbgorCQkJOiA+IiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8kcmVwby9naXQtZGFlbW9uLWV4cG9ydC1vayIKKwkJZWxzZQorCQkJcm0gLWYgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8kcmVwby9naXQtZGFlbW9uLWV4cG9ydC1vayIKKwkJZmkKKwlmaQorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0ICIkY21kIiAiJEdJVF9EQUVNT05fVVJMLyRyZXBvIiAiJEAiIDI+b3V0cHV0ICYmCisJZWNobyAiZmF0YWw6IHJlbW90ZSBlcnJvcjogJG1zZzogLyRyZXBvIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCXJldD0kPworCWNobW9kICt4ICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiCisJKGV4aXQgJHJldCkKK30KKworbXNnPSJhY2Nlc3MgZGVuaWVkIG9yIHJlcG9zaXRvcnkgbm90IGV4cG9ydGVkIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgbm9uLWV4aXN0ZW50JyAidGVzdF9yZW1vdGVfZXJyb3IgICAgJyRtc2cnIGNsb25lIG5vd2hlcmUuZ2l0ICAgICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZGlzYWJsZWQnICAgICAgInRlc3RfcmVtb3RlX2Vycm9yICAgICckbXNnJyBwdXNoICByZXBvLmdpdCBtYXN0ZXIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIGFjY2VzcyBkZW5pZWQnICJ0ZXN0X3JlbW90ZV9lcnJvciAteCAnJG1zZycgZmV0Y2ggcmVwby5naXQgICAgICAgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IGV4cG9ydGVkJyAgICAgICAidGVzdF9yZW1vdGVfZXJyb3IgLW4gJyRtc2cnIGZldGNoIHJlcG8uZ2l0ICAgICAgICIKKworc3RvcF9naXRfZGFlbW9uCitzdGFydF9naXRfZGFlbW9uIC0taW5mb3JtYXRpdmUtZXJyb3JzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG5vbi1leGlzdGVudCcgInRlc3RfcmVtb3RlX2Vycm9yICAgICdubyBzdWNoIHJlcG9zaXRvcnknICAgICAgY2xvbmUgbm93aGVyZS5naXQgICAgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBkaXNhYmxlZCcgICAgICAidGVzdF9yZW1vdGVfZXJyb3IgICAgJ3NlcnZpY2Ugbm90IGVuYWJsZWQnICAgICBwdXNoICByZXBvLmdpdCBtYXN0ZXIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIGFjY2VzcyBkZW5pZWQnICJ0ZXN0X3JlbW90ZV9lcnJvciAteCAnbm8gc3VjaCByZXBvc2l0b3J5JyAgICAgIGZldGNoIHJlcG8uZ2l0ICAgICAgICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBleHBvcnRlZCcgICAgICAgInRlc3RfcmVtb3RlX2Vycm9yIC1uICdyZXBvc2l0b3J5IG5vdCBleHBvcnRlZCcgZmV0Y2ggcmVwby5naXQgICAgICAgIgorCitzdG9wX2dpdF9kYWVtb24KK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwMC1jbG9uZS1mYWlsLWNsZWFudXAuc2ggYi90L3Q1NjAwLWNsb25lLWZhaWwtY2xlYW51cC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZTA2ZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwMC1jbG9uZS1mYWlsLWNsZWFudXAuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAwNiBDYXJsIEQuIFdvcnRoIDxjd29ydGhAY3dvcnRoLm9yZz4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgY2xvbmUgdG8gY2xlYW51cCBhZnRlciBmYWlsdXJlCisKK1RoaXMgdGVzdCBjb3ZlcnMgdGhlIGZhY3QgdGhhdCBpZiBnaXQgY2xvbmUgZmFpbHMsIGl0IHNob3VsZCByZW1vdmUKK3RoZSBkaXJlY3RvcnkgaXQgY3JlYXRlZCwgdG8gYXZvaWQgdGhlIHVzZXIgaGF2aW5nIHRvIG1hbnVhbGx5CityZW1vdmUgdGhlIGRpcmVjdG9yeSBiZWZvcmUgYXR0ZW1wdGluZyBhIGNsb25lIGFnYWluLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjbG9uZSBvZiBub24tZXhpc3RlbnQgc291cmNlIHNob3VsZCBmYWlsJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSBmb28gYmFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZmFpbGVkIGNsb25lIHNob3VsZCBub3QgbGVhdmUgYSBkaXJlY3RvcnknIFwKKyAgICAnISB0ZXN0IC1kIGJhcicKKworIyBOZWVkIGEgcmVwbyB0byBjbG9uZQordGVzdF9jcmVhdGVfcmVwbyBmb28KKworIyBjbG9uZSBkb2Vzbid0IGxpa2UgaXQgaWYgdGhlcmUgaXMgbm8gSEVBRC4gSXMgdGhhdCBhIGJ1Zz8KKyhjZCBmb28gJiYgdG91Y2ggZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSAnYWRkIGZpbGUnID4vZGV2L251bGwgMj4mMSkKKworIyBzb3VyY2UgcmVwb3NpdG9yeSBnaXZlbiB0byBnaXQgY2xvbmUgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZQorIyBjdXJyZW50IHBhdGggbm90IHRvIHRoZSB0YXJnZXQgZGlyCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2xvbmUgb2Ygbm9uLWV4aXN0ZW50IChyZWxhdGl2ZSB0byAkUFdEKSBzb3VyY2Ugc2hvdWxkIGZhaWwnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC4uL2ZvbyBiYXonCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjbG9uZSBzaG91bGQgd29yayBub3cgdGhhdCBzb3VyY2UgZXhpc3RzJyBcCisgICAgJ2dpdCBjbG9uZSBmb28gYmFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc3VjY2Vzc2Z1bCBjbG9uZSBtdXN0IGxlYXZlIHRoZSBkaXJlY3RvcnknIFwKKyAgICAnY2QgYmFyJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDEtY2xvbmUuc2ggYi90L3Q1NjAxLWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY3ODY5YjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjAxLWNsb25lLnNoCkBAIC0wLDAgKzEsMjgzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj1jbG9uZQorCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlybSAtZnIgLmdpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gc3JjICYmCisJKAorCQljZCBzcmMgJiYKKwkJPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCQllY2hvIDEgPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gdXBkYXRlZAorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGV4Y2VzcyBwYXJhbWV0ZXJzICgxKScgJworCisJcm0gLWZyIGRzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtbiBzcmMgZHN0IGp1bmsKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGV4Y2VzcyBwYXJhbWV0ZXJzICgyKScgJworCisJcm0gLWZyIGRzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtbiAiZmlsZTovLyQocHdkKS9zcmMiIGRzdCBqdW5rCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ291dHB1dCBmcm9tIGNsb25lJyAnCisJcm0gLWZyIGRzdCAmJgorCWdpdCBjbG9uZSAtbiAiZmlsZTovLyQocHdkKS9zcmMiIGRzdCA+b3V0cHV0ICYmCisJdGVzdCAkKGdyZXAgQ2xvbiBvdXRwdXQgfCB3YyAtbCkgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGRvZXMgbm90IGtlZXAgcGFjaycgJworCisJcm0gLWZyIGRzdCAmJgorCWdpdCBjbG9uZSAtbiAiZmlsZTovLyQocHdkKS9zcmMiIGRzdCAmJgorCSEgdGVzdCAtZiBkc3QvZmlsZSAmJgorCSEgKGVjaG8gZHN0Ly5naXQvb2JqZWN0cy9wYWNrL3BhY2stKiB8IGdyZXAgIlwua2VlcCIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY2hlY2tzIG91dCBmaWxlcycgJworCisJcm0gLWZyIGRzdCAmJgorCWdpdCBjbG9uZSBzcmMgZHN0ICYmCisJdGVzdCAtZiBkc3QvZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlc3BlY3RzIEdJVF9XT1JLX1RSRUUnICcKKworCUdJVF9XT1JLX1RSRUU9d29ya3RyZWUgZ2l0IGNsb25lIHNyYyBiYXJlICYmCisJdGVzdCAtZiBiYXJlL2NvbmZpZyAmJgorCXRlc3QgLWYgd29ya3RyZWUvZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNyZWF0ZXMgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzJyAnCisKKwlnaXQgY2xvbmUgc3JjIGxvbmcvcGF0aC90by9kc3QgJiYKKwl0ZXN0IC1mIGxvbmcvcGF0aC90by9kc3QvZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNyZWF0ZXMgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzIGZvciBiYXJlIHJlcG8nICcKKworCWdpdCBjbG9uZSAtLWJhcmUgc3JjIGxvbmcvcGF0aC90by9iYXJlL2RzdCAmJgorCXRlc3QgLWYgbG9uZy9wYXRoL3RvL2JhcmUvZHN0L2NvbmZpZworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tbWlycm9yJyAnCisKKwlnaXQgY2xvbmUgLS1taXJyb3Igc3JjIG1pcnJvciAmJgorCXRlc3QgLWYgbWlycm9yL0hFQUQgJiYKKwl0ZXN0ICEgLWYgbWlycm9yL2ZpbGUgJiYKKwlGRVRDSD0iJChjZCBtaXJyb3IgJiYgZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoKSIgJiYKKwl0ZXN0ICIrcmVmcy8qOnJlZnMvKiIgPSAiJEZFVENIIiAmJgorCU1JUlJPUj0iJChjZCBtaXJyb3IgJiYgZ2l0IGNvbmZpZyAtLWJvb2wgcmVtb3RlLm9yaWdpbi5taXJyb3IpIiAmJgorCXRlc3QgIiRNSVJST1IiID0gdHJ1ZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tbWlycm9yIHdpdGggZGV0YWNoZWQgSEVBRCcgJworCisJKCBjZCBzcmMgJiYgZ2l0IGNoZWNrb3V0IEhFQUReICYmIGdpdCByZXYtcGFyc2UgSEVBRCA+Li4vZXhwZWN0ZWQgKSAmJgorCWdpdCBjbG9uZSAtLW1pcnJvciBzcmMgbWlycm9yLmRldGFjaGVkICYmCisJKCBjZCBzcmMgJiYgZ2l0IGNoZWNrb3V0IC0gKSAmJgorCUdJVF9ESVI9bWlycm9yLmRldGFjaGVkIGdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1iYXJlIHdpdGggZGV0YWNoZWQgSEVBRCcgJworCisJKCBjZCBzcmMgJiYgZ2l0IGNoZWNrb3V0IEhFQUReICYmIGdpdCByZXYtcGFyc2UgSEVBRCA+Li4vZXhwZWN0ZWQgKSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgc3JjIGJhcmUuZGV0YWNoZWQgJiYKKwkoIGNkIHNyYyAmJiBnaXQgY2hlY2tvdXQgLSApICYmCisJR0lUX0RJUj1iYXJlLmRldGFjaGVkIGdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1iYXJlIG5hbWVzIHRoZSBsb2NhbCByZXBvc2l0b3J5IDxuYW1lPi5naXQnICcKKworCWdpdCBjbG9uZSAtLWJhcmUgc3JjICYmCisJdGVzdCAtZCBzcmMuZ2l0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1taXJyb3IgZG9lcyBub3QgcmVwZWF0IHRhZ3MnICcKKworCShjZCBzcmMgJiYKKwkgZ2l0IHRhZyBzb21lLXRhZyBIRUFEKSAmJgorCWdpdCBjbG9uZSAtLW1pcnJvciBzcmMgbWlycm9yMiAmJgorCShjZCBtaXJyb3IyICYmCisJIGdpdCBzaG93LXJlZiAyPiBjbG9uZS5lcnIgPiBjbG9uZS5vdXQpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ3JlcCBEdXBsaWNhdGUgbWlycm9yMi9jbG9uZS5lcnIgJiYKKwlncmVwIHNvbWUtdGFnIG1pcnJvcjIvY2xvbmUub3V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gZGVzdGluYXRpb24gd2l0aCB0cmFpbGluZyAvJyAnCisKKwlnaXQgY2xvbmUgc3JjIHRhcmdldC0xLyAmJgorCVQ9JCggY2QgdGFyZ2V0LTEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEICkgJiYKKwlTPSQoIGNkIHNyYyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQgKSAmJgorCXRlc3QgIiRUIiA9ICIkUyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byBkZXN0aW5hdGlvbiB3aXRoIGV4dHJhIHRyYWlsaW5nIC8nICcKKworCWdpdCBjbG9uZSBzcmMgdGFyZ2V0LTIvLy8gJiYKKwlUPSQoIGNkIHRhcmdldC0yICYmIGdpdCByZXYtcGFyc2UgSEVBRCApICYmCisJUz0kKCBjZCBzcmMgJiYgZ2l0IHJldi1wYXJzZSBIRUFEICkgJiYKKwl0ZXN0ICIkVCIgPSAiJFMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gYW4gZXhpc3RpbmcgZW1wdHkgZGlyZWN0b3J5JyAnCisJbWtkaXIgdGFyZ2V0LTMgJiYKKwlnaXQgY2xvbmUgc3JjIHRhcmdldC0zICYmCisJVD0kKCBjZCB0YXJnZXQtMyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQgKSAmJgorCVM9JCggY2Qgc3JjICYmIGdpdCByZXYtcGFyc2UgSEVBRCApICYmCisJdGVzdCAiJFQiID0gIiRTIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byBhbiBleGlzdGluZyBub24tZW1wdHkgZGlyZWN0b3J5JyAnCisJbWtkaXIgdGFyZ2V0LTQgJiYKKwk+dGFyZ2V0LTQvRmFrZWZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgc3JjIHRhcmdldC00CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRvIGFuIGV4aXN0aW5nIHBhdGgnICcKKwk+dGFyZ2V0LTUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgc3JjIHRhcmdldC01CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGEgdm9pZCcgJworCW1rZGlyIHNyYy0wICYmCisJKAorCQljZCBzcmMtMCAmJiBnaXQgaW5pdAorCSkgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvc3JjLTAiIHRhcmdldC02IDI+ZXJyLTYgJiYKKwkhIGdyZXAgImZhdGFsOiIgZXJyLTYgJiYKKwkoCisJCWNkIHNyYy0wICYmIHRlc3RfY29tbWl0IEEKKwkpICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NyYy0wIiB0YXJnZXQtNyAyPmVyci03ICYmCisJISBncmVwICJmYXRhbDoiIGVyci03ICYmCisJIyBUaGVyZSBpcyBubyByZWFzb24gdG8gaW5zaXN0IHRoZXkgYXJlIGJpdC1mb3ItYml0CisJIyBpZGVudGljYWwsIGJ1dCB0aGlzIHRlc3Qgc2hvdWxkIHN1ZmZpY2UgZm9yIG5vdy4KKwl0ZXN0X2NtcCB0YXJnZXQtNi8uZ2l0L2NvbmZpZyB0YXJnZXQtNy8uZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXNwZWN0cyBnbG9iYWwgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZScgJworCSgKKwkJdGVzdF9jb25maWc9IiRIT01FLy5naXRjb25maWciICYmCisJCWdpdCBjb25maWcgLWYgIiR0ZXN0X2NvbmZpZyIgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwkJcm0gLWZyIGRzdCAmJgorCQlnaXQgY2xvbmUgc3JjIGRzdCAmJgorCQljZCBkc3QgJiYKKwkJYWN0dWFsPSJ6JChnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmViYXNlKSIgJiYKKwkJdGVzdCB6dHJ1ZSA9ICRhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3BlY3QgdXJsLWVuY29kaW5nIG9mIGZpbGU6Ly8nICcKKwlnaXQgaW5pdCB4K3kgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kUFdEL3greSIgeHktdXJsLTEgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kUFdEL3glMkJ5IiB4eS11cmwtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgcXVlcnktc3RyaW5nLWRlY29kZSArIGluIFVSTHMnICcKKwlybSAtcmYgeCt5ICYmCisJZ2l0IGluaXQgInggeSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgImZpbGU6Ly8kUFdEL3greSIgeHktbm8tcGx1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgcmVzcGVjdCB1cmwtZW5jb2Rpbmcgb2Ygbm9uLXVybCBwYXRoJyAnCisJZ2l0IGluaXQgeCt5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIHglMkJ5IHh5LXJlZ3VsYXIgJiYKKwlnaXQgY2xvbmUgeCt5IHh5LXJlZ3VsYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2VwYXJhdGUgZ2l0ZGlyJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXIgcmVhbGdpdGRpciBzcmMgZHN0ICYmCisJdGVzdCAtZCByZWFsZ2l0ZGlyL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2VwYXJhdGUgZ2l0ZGlyOiBvdXRwdXQnICcKKwllY2hvICJnaXRkaXI6IGBwd2RgL3JlYWxnaXRkaXIiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGRzdC8uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZyb20gLmdpdCBmaWxlJyAnCisJZ2l0IGNsb25lIGRzdC8uZ2l0IGRzdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSAuZ2l0IGdpdGZpbGUnICcKKwkoCisJCWNkIGRzdDIgJiYKKwkJZ2l0IGZldGNoIC4uL2RzdC8uZ2l0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmcm9tIGdpdGZpbGUgcGFyZW50JyAnCisJKAorCQljZCBkc3QyICYmCisJCWdpdCBmZXRjaCAuLi9kc3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNlcGFyYXRlIGdpdGRpciB3aGVyZSB0YXJnZXQgYWxyZWFkeSBleGlzdHMnICcKKwlybSAtcmYgZHN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tc2VwYXJhdGUtZ2l0LWRpciByZWFsZ2l0ZGlyIHNyYyBkc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1yZWZlcmVuY2UgZnJvbSBvcmlnaW5hbCcgJworCWdpdCBjbG9uZSAtLXNoYXJlZCAtLWJhcmUgc3JjIHNyYy0xICYmCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgc3JjLTIgJiYKKwlnaXQgY2xvbmUgLS1yZWZlcmVuY2U9c3JjLTIgLS1iYXJlIHNyYy0xIHRhcmdldC04ICYmCisJZ3JlcCAvc3JjLTIvIHRhcmdldC04L29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggbW9yZSB0aGFuIG9uZSAtLXJlZmVyZW5jZScgJworCWdpdCBjbG9uZSAtLWJhcmUgc3JjIHNyYy0zICYmCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgc3JjLTQgJiYKKwlnaXQgY2xvbmUgLS1yZWZlcmVuY2U9c3JjLTMgLS1yZWZlcmVuY2U9c3JjLTQgc3JjIHRhcmdldC05ICYmCisJZ3JlcCAvc3JjLTMvIHRhcmdldC05Ly5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwlncmVwIC9zcmMtNC8gdGFyZ2V0LTkvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIG9yaWdpbmFsIHdpdGggcmVsYXRpdmUgYWx0ZXJuYXRlJyAnCisJbWtkaXIgbmVzdCAmJgorCWdpdCBjbG9uZSAtLWJhcmUgc3JjIG5lc3Qvc3JjLTUgJiYKKwllY2hvIC4uLy4uLy4uL3NyYy8uZ2l0L29iamVjdHMgPm5lc3Qvc3JjLTUvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIG5lc3Qvc3JjLTUgdGFyZ2V0LTEwICYmCisJZ3JlcCAvc3JjL1xcLmdpdC9vYmplY3RzIHRhcmdldC0xMC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjaGVja2luZyBvdXQgYSB0YWcnICcKKwlnaXQgY2xvbmUgLS1icmFuY2g9c29tZS10YWcgc3JjIGRzdC50YWcgJiYKKwlHSVRfRElSPXNyYy8uZ2l0IGdpdCByZXYtcGFyc2Ugc29tZS10YWcgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZHN0LnRhZy8uZ2l0L0hFQUQgJiYKKwlHSVRfRElSPWRzdC50YWcvLmdpdCBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2ggPmZldGNoLmFjdHVhbCAmJgorCWVjaG8gIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiA+ZmV0Y2guZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBmZXRjaC5leHBlY3RlZCBmZXRjaC5hY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjAyLWNsb25lLXJlbW90ZS1leGVjLnNoIGIvdC90NTYwMi1jbG9uZS1yZW1vdGUtZXhlYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZjM1M2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwMi1jbG9uZS1yZW1vdGUtZXhlYy5zaApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj1jbG9uZQorCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyAiIyEvYmluL3NoIiA+IG5vdF9zc2ggJiYKKwllY2hvICJlY2hvIFwiXCQqXCIgPiBub3Rfc3NoX291dHB1dCIgPj4gbm90X3NzaCAmJgorCWVjaG8gImV4aXQgMSIgPj4gbm90X3NzaCAmJgorCWNobW9kICt4IG5vdF9zc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY2FsbHMgZ2l0IHVwbG9hZC1wYWNrIHVucXVhbGlmaWVkIHdpdGggbm8gLXUgb3B0aW9uJyAnCisJKAorCQlHSVRfU1NIPS4vbm90X3NzaCAmJgorCQlleHBvcnQgR0lUX1NTSCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgbG9jYWxob3N0Oi9wYXRoL3RvL3JlcG8ganVuaworCSkgJiYKKwllY2hvICJsb2NhbGhvc3QgZ2l0LXVwbG9hZC1wYWNrICdcJycvcGF0aC90by9yZXBvJ1wnJyIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbm90X3NzaF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY2FsbHMgc3BlY2lmaWVkIGdpdCB1cGxvYWQtcGFjayB3aXRoIC11IG9wdGlvbicgJworCSgKKwkJR0lUX1NTSD0uL25vdF9zc2ggJiYKKwkJZXhwb3J0IEdJVF9TU0ggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC11IC4vc29tZXRoaW5nL2Jpbi9naXQtdXBsb2FkLXBhY2sgbG9jYWxob3N0Oi9wYXRoL3RvL3JlcG8ganVuaworCSkgJiYKKwllY2hvICJsb2NhbGhvc3QgLi9zb21ldGhpbmcvYmluL2dpdC11cGxvYWQtcGFjayAnXCcnL3BhdGgvdG8vcmVwbydcJyciID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG5vdF9zc2hfb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwMC1jbG9uZS1yZWZlcmVuY2Uuc2ggYi90L3Q1NzAwLWNsb25lLXJlZmVyZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNDdkNDUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwMC1jbG9uZS1yZWZlcmVuY2Uuc2gKQEAgLTAsMCArMSwxODQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgTWFydGluIFdhaXR6IDx0YWxpQGFkbWluZ2lsZGUub3JnPgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNsb25lIC0tcmVmZXJlbmNlJworLiAuL3Rlc3QtbGliLnNoCisKK2Jhc2VfZGlyPWBwd2RgCisKK1U9JGJhc2VfZGlyL1VQTE9BRF9MT0cKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIGZpcnN0IHJlcG9zaXRvcnknIFwKKyd0ZXN0X2NyZWF0ZV9yZXBvIEEgJiYgY2QgQSAmJgorZWNobyBmaXJzdCA+IGZpbGUxICYmCitnaXQgYWRkIGZpbGUxICYmCitnaXQgY29tbWl0IC1tIGluaXRpYWwnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBzZWNvbmQgcmVwb3NpdG9yeScgXAorJ2dpdCBjbG9uZSBBIEIgJiYgY2QgQiAmJgorZWNobyBzZWNvbmQgPiBmaWxlMiAmJgorZ2l0IGFkZCBmaWxlMiAmJgorZ2l0IGNvbW1pdCAtbSBhZGRpdGlvbiAmJgorZ2l0IHJlcGFjayAtYSAtZCAmJgorZ2l0IHBydW5lJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggcmVmZXJlbmNlICgtbCAtcyknIFwKKydnaXQgY2xvbmUgLWwgLXMgLS1yZWZlcmVuY2UgQiBBIEMnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0ZW5jZSBvZiBpbmZvL2FsdGVybmF0ZXMnIFwKKyd0ZXN0X2xpbmVfY291bnQgPSAyIEMvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcycKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBmcm9tIHJlZmVyZW5jZScgXAorJ2NkIEMgJiYKK2dpdCBwdWxsIC4uL0IgbWFzdGVyJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IHJlZmVyZW5jZSBnZXRzIHVzZWQnIFwKKydjZCBDICYmCitlY2hvICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiA+IGV4cGVjdGVkICYmCitnaXQgY291bnQtb2JqZWN0cyA+IGN1cnJlbnQgJiYKK3Rlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCisKK2NkICIkYmFzZV9kaXIiCisKK3JtIC1mICIkVS5EIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggcmVmZXJlbmNlIChubyAtbCAtcyknIFwKKydHSVRfREVCVUdfU0VORF9QQUNLPTMgZ2l0IGNsb25lIC0tcmVmZXJlbmNlIEIgImZpbGU6Ly8kKHB3ZCkvQSIgRCAzPiIkVS5EIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hlZCBubyBvYmplY3RzJyBcCisnISBncmVwICJed2FudCIgIiRVLkQiJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGVuY2Ugb2YgaW5mby9hbHRlcm5hdGVzJyBcCisndGVzdF9saW5lX2NvdW50ID0gMSBELy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgZnJvbSByZWZlcmVuY2UnIFwKKydjZCBEICYmIGdpdCBwdWxsIC4uL0IgbWFzdGVyJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IHJlZmVyZW5jZSBnZXRzIHVzZWQnIFwKKydjZCBEICYmIGVjaG8gIjAgb2JqZWN0cywgMCBraWxvYnl0ZXMiID4gZXhwZWN0ZWQgJiYKK2dpdCBjb3VudC1vYmplY3RzID4gY3VycmVudCAmJgordGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgb3JpZ2luJyBcCisnY2QgQSAmJgorZWNobyB0aGlyZCA+IGZpbGUzICYmCitnaXQgYWRkIGZpbGUzICYmCitnaXQgY29tbWl0IC1tIHVwZGF0ZSAmJgorZ2l0IHJlcGFjayAtYSAtZCAmJgorZ2l0IHBydW5lJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGNoYW5nZXMgZnJvbSBvcmlnaW4nIFwKKydjZCBDICYmCitnaXQgcHVsbCBvcmlnaW4nCisKK2NkICIkYmFzZV9kaXIiCisKKyMgdGhlIDIgbG9jYWwgb2JqZWN0cyBhcmUgY29tbWl0IGFuZCB0cmVlIGZyb20gdGhlIG1lcmdlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IGFsdGVybmF0ZSB0byBvcmlnaW4gZ2V0cyB1c2VkJyBcCisnY2QgQyAmJgorZWNobyAiMiBvYmplY3RzIiA+IGV4cGVjdGVkICYmCitnaXQgY291bnQtb2JqZWN0cyB8IGN1dCAtZCwgLWYxID4gY3VycmVudCAmJgordGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBjaGFuZ2VzIGZyb20gb3JpZ2luJyBcCisnY2QgRCAmJgorZ2l0IHB1bGwgb3JpZ2luJworCitjZCAiJGJhc2VfZGlyIgorCisjIHRoZSA1IGxvY2FsIG9iamVjdHMgYXJlIGV4cGVjdGVkOyBmaWxlMyBibG9iLCBjb21taXQgaW4gQSB0byBhZGQgaXQKKyMgYW5kIGl0cyB0cmVlLCBhbmQgMiBhcmUgb3VyIHRyZWUgYW5kIHRoZSBtZXJnZSBjb21taXQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBvYmplY3RzIGV4cGVjdGVkIHRvIGV4aXN0IGxvY2FsbHknIFwKKydjZCBEICYmCitlY2hvICI1IG9iamVjdHMiID4gZXhwZWN0ZWQgJiYKK2dpdCBjb3VudC1vYmplY3RzIHwgY3V0IC1kLCAtZjEgPiBjdXJyZW50ICYmCit0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgYWx0ZXJuYXRlIHJlcG9zaXRvcnkgIzEnIFwKKyd0ZXN0X2NyZWF0ZV9yZXBvIEYgJiYgY2QgRiAmJgorZWNobyBmaXJzdCA+IGZpbGUxICYmCitnaXQgYWRkIGZpbGUxICYmCitnaXQgY29tbWl0IC1tIGluaXRpYWwnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgYWx0ZXJuYXRlIHJlcG8gIzIgYW5kIGFkZGluZyBjaGFuZ2VzIHRvIHJlcG8gIzEnIFwKKydnaXQgY2xvbmUgRiBHICYmIGNkIEYgJiYKK2VjaG8gc2Vjb25kID4gZmlsZTIgJiYKK2dpdCBhZGQgZmlsZTIgJiYKK2dpdCBjb21taXQgLW0gYWRkaXRpb24nCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgYWx0ZXJuYXRlIHJlcG8gIzEsIHVzaW5nICMyIGFzIHJlZmVyZW5jZScgXAorJ2dpdCBjbG9uZSAtLXJlZmVyZW5jZSBHIEYgSCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyB3aXRoIHJlZmVyZW5jZSBiZWluZyBzdWJzZXQgb2Ygc291cmNlICgtbCAtcyknIFwKKydnaXQgY2xvbmUgLWwgLXMgLS1yZWZlcmVuY2UgQSBCIEUnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggcmVmZXJlbmNlIGZyb20gYSB0YWdnZWQgcmVwb3NpdG9yeScgJworCSgKKwkJY2QgQSAmJiBnaXQgdGFnIC1hIC1tICd0YWdnZWQnIEhFQUQKKwkpICYmCisJZ2l0IGNsb25lIC0tcmVmZXJlbmNlPUEgQSBJCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgYnJhbmNoZWQgcmVwb3NpdG9yeScgJworCWdpdCBjbG9uZSBBIEogJiYKKwkoCisJCWNkIEogJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIG1hc3Rlcl4gJiYKKwkJZWNobyBvdGhlciA+b3RoZXJmaWxlICYmCisJCWdpdCBhZGQgb3RoZXJmaWxlICYmCisJCWdpdCBjb21taXQgLW0gb3RoZXIgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkKKycKKworcm0gLWYgIiRVLksiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggaW5jb21wbGV0ZSBhbHRlcm5hdGVzJyAnCisJZ2l0IGluaXQgSyAmJgorCWVjaG8gIiRiYXNlX2Rpci9BLy5naXQvb2JqZWN0cyIgPksvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCSgKKwkJY2QgSyAmJgorCQlnaXQgcmVtb3RlIGFkZCBKICJmaWxlOi8vJGJhc2VfZGlyL0oiICYmCisJCUdJVF9ERUJVR19TRU5EX1BBQ0s9MyBnaXQgZmV0Y2ggSiAzPiIkVS5LIgorCSkgJiYKKwltYXN0ZXJfb2JqZWN0PSQoY2QgQSAmJiBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpIiByZWZzL2hlYWRzL21hc3RlcikgJiYKKwkhIGdyZXAgIl53YW50ICRtYXN0ZXJfb2JqZWN0IiAiJFUuSyIgJiYKKwl0YWdfb2JqZWN0PSQoY2QgQSAmJiBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpIiByZWZzL3RhZ3MvSEVBRCkgJiYKKwkhIGdyZXAgIl53YW50ICR0YWdfb2JqZWN0IiAiJFUuSyIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzAxLWNsb25lLWxvY2FsLnNoIGIvdC90NTcwMS1jbG9uZS1sb2NhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZmY2ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwMS1jbG9uZS1sb2NhbC5zaApAQCAtMCwwICsxLDEzNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbG9jYWwgY2xvbmUnCisuIC4vdGVzdC1saWIuc2gKKworcmVwb19pc19oYXJkbGlua2VkKCkgeworCWZpbmQgIiQxL29iamVjdHMiIC10eXBlIGYgLWxpbmtzIDEgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBvcmlnaW4gcmVwb3NpdG9yeScgJworCTogPmZpbGUgJiYgZ2l0IGFkZCAuICYmIGdpdCBjb21taXQgLW0xICYmCisJZ2l0IGNsb25lIC0tYmFyZSAuIGEuZ2l0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAuIHggJiYKKwl0ZXN0ICIkKEdJVF9DT05GSUc9YS5naXQvY29uZmlnIGdpdCBjb25maWcgLS1ib29sIGNvcmUuYmFyZSkiID0gdHJ1ZSAmJgorCXRlc3QgIiQoR0lUX0NPTkZJRz14L2NvbmZpZyBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmJhcmUpIiA9IHRydWUgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBiMS5idW5kbGUgLS1hbGwgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBiMi5idW5kbGUgbWFzdGVyICYmCisJbWtkaXIgZGlyICYmCisJY3AgYjEuYnVuZGxlIGRpci9iMyAmJgorCWNwIGIxLmJ1bmRsZSBiNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBjbG9uZSB3aXRob3V0IC5naXQgc3VmZml4JyAnCisJZ2l0IGNsb25lIC1sIC1zIGEgYiAmJgorCShjZCBiICYmCisJdGVzdCAiJChHSVRfQ09ORklHPS5naXQvY29uZmlnIGdpdCBjb25maWcgLS1ib29sIGNvcmUuYmFyZSkiID0gZmFsc2UgJiYKKwlnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIHdpdGggLmdpdCBzdWZmaXgnICcKKwlnaXQgY2xvbmUgLWwgLXMgYS5naXQgYyAmJgorCShjZCBjICYmIGdpdCBmZXRjaCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgY2xvbmUgZnJvbSB4JyAnCisJZ2l0IGNsb25lIC1sIC1zIHggeSAmJgorCShjZCB5ICYmIGdpdCBmZXRjaCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgY2xvbmUgZnJvbSB4LmdpdCB0aGF0IGRvZXMgbm90IGV4aXN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC1sIC1zIHguZ2l0IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnV2l0aCAtbm8taGFyZGxpbmtzLCBsb2NhbCB3aWxsIG1ha2UgYSBjb3B5JyAnCisJZ2l0IGNsb25lIC0tYmFyZSAtLW5vLWhhcmRsaW5rcyB4IHcgJiYKKwkhIHJlcG9faXNfaGFyZGxpbmtlZCB3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0V2ZW4gd2l0aG91dCAtbCwgbG9jYWwgd2lsbCBtYWtlIGEgaGFyZGxpbmsnICcKKwlybSAtZnIgdyAmJgorCWdpdCBjbG9uZSAtbCAtLWJhcmUgeCB3ICYmCisJcmVwb19pc19oYXJkbGlua2VkIHcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgY2xvbmUgb2YgcmVwbyB3aXRoIG5vbmV4aXN0ZW50IHJlZiBpbiBIRUFEJyAnCisJZWNobyAicmVmOiByZWZzL2hlYWRzL25vbmV4aXN0ZW50IiA+IGEuZ2l0L0hFQUQgJiYKKwlnaXQgY2xvbmUgYSBkICYmCisJKGNkIGQgJiYKKwlnaXQgZmV0Y2ggJiYKKwl0ZXN0ICEgLWUgLmdpdC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBjbG9uZSB3aXRob3V0IC5idW5kbGUgc3VmZml4JyAnCisJZ2l0IGNsb25lIGRpci9iMyAmJgorCShjZCBiMyAmJiBnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBjbG9uZSB3aXRoIC5idW5kbGUgc3VmZml4JyAnCisJZ2l0IGNsb25lIGIxLmJ1bmRsZSAmJgorCShjZCBiMSAmJiBnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBjbG9uZSBmcm9tIGI0JyAnCisJZ2l0IGNsb25lIGI0IGJkbCAmJgorCShjZCBiZGwgJiYgZ2l0IGZldGNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgY2xvbmUgZnJvbSBiNC5idW5kbGUgdGhhdCBkb2VzIG5vdCBleGlzdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSBiNC5idW5kbGUgYmIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVuZGxlIGNsb25lIHdpdGggbm9uZXhpc3RlbnQgSEVBRCcgJworCWdpdCBjbG9uZSBiMi5idW5kbGUgYjIgJiYKKwkoY2QgYjIgJiYKKwlnaXQgZmV0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBlbXB0eSByZXBvc2l0b3J5JyAnCisJbWtkaXIgZW1wdHkgJiYKKwkoY2QgZW1wdHkgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4pICYmCisJZ2l0IGNsb25lIGVtcHR5IGVtcHR5LWNsb25lICYmCisJdGVzdF90aWNrICYmCisJKGNkIGVtcHR5LWNsb25lCisJIGVjaG8gImNvbnRlbnQiID4+IGZvbyAmJgorCSBnaXQgYWRkIGZvbyAmJgorCSBnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlciAmJgorCSBleHBlY3RlZD0kKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCSBhY3R1YWw9JChnaXQgLS1naXQtZGlyPS4uL2VtcHR5Ly5naXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkgdGVzdCAkYWN0dWFsID0gJGV4cGVjdGVkKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBlbXB0eSByZXBvc2l0b3J5LCBhbmQgdGhlbiBwdXNoIHNob3VsZCBub3Qgc2VnZmF1bHQuJyAnCisJcm0gLWZyIGVtcHR5LyBlbXB0eS1jbG9uZS8gJiYKKwlta2RpciBlbXB0eSAmJgorCShjZCBlbXB0eSAmJiBnaXQgaW5pdCkgJiYKKwlnaXQgY2xvbmUgZW1wdHkgZW1wdHktY2xvbmUgJiYKKwkoY2QgZW1wdHktY2xvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBub24tZXhpc3RlbnQgZGlyZWN0b3J5IGZhaWxzJyAnCisJcm0gLXJmIGRvZXMtbm90LWV4aXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIGRvZXMtbm90LWV4aXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgbm9uLWdpdCBkaXJlY3RvcnkgZmFpbHMnICcKKwlybSAtcmYgbm90LWEtZ2l0LXJlcG8gbm90LWEtZ2l0LXJlcG8tY2xvbmUgJiYKKwlta2RpciBub3QtYS1naXQtcmVwbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSBub3QtYS1naXQtcmVwbyBub3QtYS1naXQtcmVwby1jbG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGZpbGU6Ly8gZG9lcyBub3QgaGFyZGxpbmsnICcKKwlnaXQgY2xvbmUgLS1iYXJlIGZpbGU6Ly8iJChwd2QpIi9hIG5vbi1sb2NhbCAmJgorCSEgcmVwb19pc19oYXJkbGlua2VkIG5vbi1sb2NhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGEgbG9jYWwgcGF0aCB3aXRoIC0tbm8tbG9jYWwgZG9lcyBub3QgaGFyZGxpbmsnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC0tbm8tbG9jYWwgYSBmb3JjZS1ub25sb2NhbCAmJgorCSEgcmVwb19pc19oYXJkbGlua2VkIGZvcmNlLW5vbmxvY2FsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwMi1jbG9uZS1vcHRpb25zLnNoIGIvdC90NTcwMi1jbG9uZS1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyY2IwMjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NzAyLWNsb25lLW9wdGlvbnMuc2gKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIGNsb25lIG9wdGlvbnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCW1rZGlyIHBhcmVudCAmJgorCShjZCBwYXJlbnQgJiYgZ2l0IGluaXQgJiYKKwkgZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gb25lKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1vJyAnCisKKwlnaXQgY2xvbmUgLW8gZm9vIHBhcmVudCBjbG9uZS1vICYmCisJKGNkIGNsb25lLW8gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvZm9vL21hc3RlcikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdGVkIGNsb25lJyAnCisKKwlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvcGFyZW50IiBjbG9uZS1yZWRpcmVjdGVkID5vdXQgMj5lcnIgJiYKKwl0ZXN0ICEgLXMgZXJyCisKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZGlyZWN0ZWQgY2xvbmUgLXYnICcKKworCWdpdCBjbG9uZSAtLXByb2dyZXNzICJmaWxlOi8vJChwd2QpL3BhcmVudCIgY2xvbmUtcmVkaXJlY3RlZC1wcm9ncmVzcyBcCisJCT5vdXQgMj5lcnIgJiYKKwl0ZXN0IC1zIGVycgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwNC1idW5kbGUuc2ggYi90L3Q1NzA0LWJ1bmRsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZTQzNzMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwNC1idW5kbGUuc2gKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NvbWUgYnVuZGxlIHJlbGF0ZWQgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtbSB0YWcgdGFnICYmCisJdGVzdF9jb21taXQgc2Vjb25kICYmCisJdGVzdF9jb21taXQgdGhpcmQgJiYKKwlnaXQgdGFnIC1kIGluaXRpYWwgJiYKKwlnaXQgdGFnIC1kIHNlY29uZCAmJgorCWdpdCB0YWcgLWQgdGhpcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFncyBjYW4gYmUgZXhjbHVkZWQgYnkgcmV2LWxpc3Qgb3B0aW9ucycgJworCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZSAtLWFsbCAtLXNpbmNlPTcuQXByLjIwMDUuMTU6MTY6MDAuLTA3MDAgJiYKKwlnaXQgbHMtcmVtb3RlIGJ1bmRsZSA+IG91dHB1dCAmJgorCSEgZ3JlcCB0YWcgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZSBpZiBidW5kbGUgZmlsZSBjYW5ub3QgYmUgY3JlYXRlZCcgJworCW1rZGlyIGFkaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnVuZGxlIGNyZWF0ZSBhZGlyIC0tYWxsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2J1bmRsZSAtLXN0ZGluJyAnCisJZWNobyBtYXN0ZXIgfCBnaXQgYnVuZGxlIGNyZWF0ZSBzdGRpbi1idW5kbGUuYmRsIC0tc3RkaW4gJiYKKwlnaXQgbHMtcmVtb3RlIHN0ZGluLWJ1bmRsZS5iZGwgPm91dHB1dCAmJgorCWdyZXAgbWFzdGVyIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdidW5kbGUgLS1zdGRpbiA8cmV2LWxpc3Qgb3B0aW9ucz4nICcKKwllY2hvIG1hc3RlciB8IGdpdCBidW5kbGUgY3JlYXRlIGh5YnJpZC1idW5kbGUuYmRsIC0tc3RkaW4gdGFnICYmCisJZ2l0IGxzLXJlbW90ZSBoeWJyaWQtYnVuZGxlLmJkbCA+b3V0cHV0ICYmCisJZ3JlcCBtYXN0ZXIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGJ1bmRsZSBmaWxlIGlzIHJlamVjdGVkJyAnCisJOiA+ZW1wdHktYnVuZGxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIGVtcHR5LWJ1bmRsZQorJworCisjIFRoaXMgdHJpZ2dlcnMgYSBidWcgaW4gb2xkZXIgdmVyc2lvbnMgd2hlcmUgdGhlIHJlc3VsdGluZyBsaW5lICh3aXRoCisjIC0tcHJldHR5PW9uZWxpbmUpIHdhcyBsb25nZXIgdGhhbiBhIDEwMjQtY2hhciBidWZmZXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWRpY3Vsb3VzbHkgbG9uZyBzdWJqZWN0IGluIGJvdW5kYXJ5JyAnCisJOiA+ZmlsZTQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYWRkIGZpbGU0ICYmCisJcHJpbnRmICIlMDEyMDBkXG4iIDAgfCBnaXQgY29tbWl0IC1GIC0gJiYKKwl0ZXN0X2NvbW1pdCBmaWZ0aCAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGxvbmctc3ViamVjdC1idW5kbGUuYmRsIEhFQUReLi5IRUFEICYmCisJZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIGxvbmctc3ViamVjdC1idW5kbGUuYmRsID5oZWFkcyAmJgorCXRlc3QgLXMgaGVhZHMgJiYKKwlnaXQgZmV0Y2ggbG9uZy1zdWJqZWN0LWJ1bmRsZS5iZGwgJiYKKwlzZWQgLW4gIi9eLS97cDtxO30iIGxvbmctc3ViamVjdC1idW5kbGUuYmRsID5ib3VuZGFyeSAmJgorCWdyZXAgIl4tWzAtOWEtZl1cXHs0MFxcfSAiIGJvdW5kYXJ5CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwNS1jbG9uZS0yZ2Iuc2ggYi90L3Q1NzA1LWNsb25lLTJnYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lOTc4M2MzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwNS1jbG9uZS0yZ2Iuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY2xvbmluZyBhIHJlcG9zaXRvcnkgbGFyZ2VyIHRoYW4gMiBnaWdhYnl0ZScKKy4gLi90ZXN0LWxpYi5zaAorCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfQ0xPTkVfMkdCIgordGhlbgorCXNheSAnU2tpcHBpbmcgZXhwZW5zaXZlIDJHQiBjbG9uZSB0ZXN0OyBlbmFibGUgaXQgd2l0aCBHSVRfVEVTVF9DTE9ORV8yR0I9dCcKK2Vsc2UKKwl0ZXN0X3NldF9wcmVyZXEgQ0xPTkVfMkdCCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENMT05FXzJHQiAnc2V0dXAnICcKKworCWdpdCBjb25maWcgcGFjay5jb21wcmVzc2lvbiAwICYmCisJZ2l0IGNvbmZpZyBwYWNrLmRlcHRoIDAgJiYKKwlibG9ic2l6ZT0kKCgxMDAqMTAyNCoxMDI0KSkgJiYKKwlibG9iY291bnQ9JCgoMioxMDI0KjEwMjQqMTAyNC8kYmxvYnNpemUrMSkpICYmCisJaT0xICYmCisJKHdoaWxlIHRlc3QgJGkgLWxlICRibG9iY291bnQKKwkgZG8KKwkJcHJpbnRmICJHZW5lcmF0aW5nIGJsb2IgJGkvJGJsb2Jjb3VudFxyIiA+JjIgJiYKKwkJcHJpbnRmICJibG9iXG5tYXJrIDokaVxuZGF0YSAkYmxvYnNpemVcbiIgJiYKKwkJI3Rlc3QtZ2VucmFuZG9tICRpICRibG9ic2l6ZSAmJgorCQlwcmludGYgIiUtJHtibG9ic2l6ZX1zIiAkaSAmJgorCQllY2hvICJNIDEwMDY0NCA6JGkgJGkiID4+IGNvbW1pdAorCQlpPSQoKCRpKzEpKSB8fAorCQllY2hvICQ/ID4gZXhpdC1zdGF0dXMKKwkgZG9uZSAmJgorCSBlY2hvICJjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJIGVjaG8gImF1dGhvciBBIFUgVGhvciA8YXV0aG9yQGVtYWlsLmNvbT4gMTIzNDU2Nzg5ICswMDAwIiAmJgorCSBlY2hvICJjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGVtYWlsLmNvbT4gMTIzNDU2Nzg5ICswMDAwIiAmJgorCSBlY2hvICJkYXRhIDUiICYmCisJIGVjaG8gIj4yZ2IiICYmCisJIGNhdCBjb21taXQpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1iaWctZmlsZS10aHJlc2hvbGQ9MiAmJgorCXRlc3QgISAtZiBleGl0LXN0YXR1cworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ0xPTkVfMkdCICdjbG9uZSAtIGJhcmUnICcKKworCWdpdCBjbG9uZSAtLWJhcmUgLS1uby1oYXJkbGlua3MgLiBjbG9uZS1iYXJlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDTE9ORV8yR0IgJ2Nsb25lIC0gd2l0aCB3b3JrdHJlZSwgZmlsZTovLyBwcm90b2NvbCcgJworCisJZ2l0IGNsb25lIGZpbGU6Ly8uIGNsb25lLXd0CisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzA2LWNsb25lLWJyYW5jaC5zaCBiL3QvdDU3MDYtY2xvbmUtYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YmU2N2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NzA2LWNsb25lLWJyYW5jaC5zaApAQCAtMCwwICsxLDY0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2xvbmUgLS1icmFuY2ggb3B0aW9uJworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX0hFQUQoKSB7CisJZWNobyByZWZzL2hlYWRzLyIkMSIgPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCitjaGVja19maWxlKCkgeworCWVjaG8gIiQxIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBwYXJlbnQgJiYKKwkoY2QgcGFyZW50ICYmIGdpdCBpbml0ICYmCisJIGVjaG8gb25lID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCSBnaXQgY2hlY2tvdXQgLWIgdHdvICYmCisJIGVjaG8gdHdvID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YW5pbGxhIGNsb25lIGNob29zZXMgSEVBRCcgJworCWdpdCBjbG9uZSBwYXJlbnQgY2xvbmUgJiYKKwkoY2QgY2xvbmUgJiYKKwkgY2hlY2tfSEVBRCBtYXN0ZXIgJiYKKwkgY2hlY2tfZmlsZSBvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1iIGNob29zZXMgc3BlY2lmaWVkIGJyYW5jaCcgJworCWdpdCBjbG9uZSAtYiB0d28gcGFyZW50IGNsb25lLXR3byAmJgorCShjZCBjbG9uZS10d28gJiYKKwkgY2hlY2tfSEVBRCB0d28gJiYKKwkgY2hlY2tfZmlsZSB0d28KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1iIHNldHMgdXAgdHJhY2tpbmcnICcKKwkoY2QgY2xvbmUtdHdvICYmCisJIGVjaG8gb3JpZ2luID5leHBlY3QgJiYKKwkgZ2l0IGNvbmZpZyBicmFuY2gudHdvLnJlbW90ZSA+YWN0dWFsICYmCisJIGVjaG8gcmVmcy9oZWFkcy90d28gPj5leHBlY3QgJiYKKwkgZ2l0IGNvbmZpZyBicmFuY2gudHdvLm1lcmdlID4+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1iIGRvZXMgbm90IG11bmdlIHJlbW90ZXMvb3JpZ2luL0hFQUQnICcKKwkoY2QgY2xvbmUtdHdvICYmCisJIGVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPmV4cGVjdCAmJgorCSBnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1iIHdpdGggYm9ndXMgYnJhbmNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC1iIGJvZ3VzIHBhcmVudCBjbG9uZS1ib2d1cworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU3MDctY2xvbmUtZGV0YWNoZWQuc2ggYi90L3Q1NzA3LWNsb25lLWRldGFjaGVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiMGQ2MDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NzA3LWNsb25lLWRldGFjaGVkLnNoCkBAIC0wLDAgKzEsNzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNsb25pbmcgYSByZXBvc2l0b3J5IHdpdGggZGV0YWNoZWQgSEVBRCcKKy4gLi90ZXN0LWxpYi5zaAorCitoZWFkX2lzX2RldGFjaGVkKCkgeworCWdpdCAtLWdpdC1kaXI9JDEvLmdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtLWdpdC1kaXI9JDEvLmdpdCBzeW1ib2xpYy1yZWYgSEVBRAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwllY2hvIHR3byA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJZ2l0IHRhZyB0d28gJiYKKwllY2hvIHRocmVlID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXBvIChkZXRhY2hlZCBIRUFEIHBvaW50cyB0byBicmFuY2gpJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJFBXRCIgZGV0YWNoZWQtYnJhbmNoCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZWQgSEVBRCBtYXRjaGVzJyAnCisJZWNobyB0aHJlZSA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1kZXRhY2hlZC1icmFuY2gvLmdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2Nsb25lZCBIRUFEIGlzIGRldGFjaGVkJyAnCisJaGVhZF9pc19kZXRhY2hlZCBkZXRhY2hlZC1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVwbyAoZGV0YWNoZWQgSEVBRCBwb2ludHMgdG8gdGFnKScgJworCWdpdCBjaGVja291dCB0d29eMCAmJgorCWdpdCBjbG9uZSAiZmlsZTovLyRQV0QiIGRldGFjaGVkLXRhZworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgbWF0Y2hlcycgJworCWVjaG8gdHdvID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWRldGFjaGVkLXRhZy8uZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgaXMgZGV0YWNoZWQnICcKKwloZWFkX2lzX2RldGFjaGVkIGRldGFjaGVkLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXBvIChkZXRhY2hlZCBIRUFEIHBvaW50cyB0byBoaXN0b3J5KScgJworCWdpdCBjaGVja291dCB0d29eICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJFBXRCIgZGV0YWNoZWQtaGlzdG9yeQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgbWF0Y2hlcycgJworCWVjaG8gb25lID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWRldGFjaGVkLWhpc3RvcnkvLmdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lZCBIRUFEIGlzIGRldGFjaGVkJyAnCisJaGVhZF9pc19kZXRhY2hlZCBkZXRhY2hlZC1oaXN0b3J5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlcG8gKG9ycGhhbiBkZXRhY2hlZCBIRUFEKScgJworCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWVjaG8gZm91ciA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gZm91ciAmJgorCWdpdCBjbG9uZSAiZmlsZTovLyRQV0QiIGRldGFjaGVkLW9ycGhhbgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgbWF0Y2hlcycgJworCWVjaG8gZm91ciA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1kZXRhY2hlZC1vcnBoYW4vLmdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lZCBIRUFEIGlzIGRldGFjaGVkJyAnCisJaGVhZF9pc19kZXRhY2hlZCBkZXRhY2hlZC1vcnBoYW4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzA4LWNsb25lLWNvbmZpZy5zaCBiL3QvdDU3MDgtY2xvbmUtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI3ZDczMGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NzA4LWNsb25lLWNvbmZpZy5zaApAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdHMgZm9yIGdpdCBjbG9uZSAtYyBrZXk9dmFsdWUnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWMgc2V0cyBjb25maWcgaW4gY2xvbmVkIHJlcG8nICcKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLWMgY29yZS5mb289YmFyIC4gY2hpbGQgJiYKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1jaGlsZC8uZ2l0IGNvbmZpZyBjb3JlLmZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYyBjYW4gc2V0IG11bHRpLWtleXMnICcKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLWMgY29yZS5mb289YmFyIC1jIGNvcmUuZm9vPWJheiAuIGNoaWxkICYmCisJeyBlY2hvIGJhcjsgZWNobyBiYXo7IH0gPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9Y2hpbGQvLmdpdCBjb25maWcgLS1nZXQtYWxsIGNvcmUuZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1jIHdpdGhvdXQgYSB2YWx1ZSBpcyBib29sZWFuIHRydWUnICcKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLWMgY29yZS5mb28gLiBjaGlsZCAmJgorCWVjaG8gdHJ1ZSA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1jaGlsZC8uZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5mb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWMgY29uZmlnIGlzIGF2YWlsYWJsZSBkdXJpbmcgY2xvbmUnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCXJtIC1yZiBjaGlsZCAmJgorCWdpdCBjbG9uZSAtYyBjb3JlLmF1dG9jcmxmIC4gY2hpbGQgJiYKKwlwcmludGYgImNvbnRlbnRcXHJcXG4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY2hpbGQvZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU3MDktY2xvbmUtcmVmc3BlYy5zaCBiL3QvdDU3MDktY2xvbmUtcmVmc3BlYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjFlYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwOS1jbG9uZS1yZWZzcGVjLnNoCkBAIC0wLDAgKzEsMTU2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCByZWZzcGVjIHdyaXR0ZW4gYnkgY2xvbmUtY29tbWFuZCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCSMgTWFrZSB0d28gYnJhbmNoZXMsICJtYXN0ZXIiIGFuZCAic2lkZSIKKwllY2hvIG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyB0d28gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCB0YWcgdHdvICYmCisJZWNobyB0aHJlZSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdGhyZWUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gZm91ciA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gZm91ciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCSMgZGVmYXVsdCBjbG9uZQorCWdpdCBjbG9uZSAuIGRpcl9hbGwgJiYKKworCSMgZGVmYXVsdCAtLXNpbmdsZSB0aGF0IGZvbGxvd3MgSEVBRD1tYXN0ZXIKKwlnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIC4gZGlyX21hc3RlciAmJgorCisJIyBkZWZhdWx0IC0tc2luZ2xlIHRoYXQgZm9sbG93cyBIRUFEPXNpZGUKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggLiBkaXJfc2lkZSAmJgorCisJIyBleHBsaWNpdCAtLXNpbmdsZSB0aGF0IGZvbGxvd3Mgc2lkZQorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIC0tYnJhbmNoIHNpZGUgLiBkaXJfc2lkZTIgJiYKKworCSMgZGVmYXVsdCAtLXNpbmdsZSB3aXRoIC0tbWlycm9yCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLW1pcnJvciAuIGRpcl9taXJyb3IgJiYKKworCSMgZGVmYXVsdCAtLXNpbmdsZSB3aXRoIC0tYnJhbmNoIGFuZCAtLW1pcnJvcgorCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggLS1taXJyb3IgLS1icmFuY2ggc2lkZSAuIGRpcl9taXJyb3Jfc2lkZSAmJgorCisJIyAtLXNpbmdsZSB0aGF0IGRvZXMgbm90IGtub3cgd2hhdCBicmFuY2ggdG8gZm9sbG93CisJZ2l0IGNoZWNrb3V0IHR3b14gJiYKKwlnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIC4gZGlyX2RldGFjaGVkICYmCisKKwkjIGV4cGxpY2l0IC0tc2luZ2xlIHdpdGggdGFnCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLWJyYW5jaCB0d28gLiBkaXJfdGFnICYmCisKKwkjIGFkdmFuY2UgYm90aCAibWFzdGVyIiBhbmQgInNpZGUiIGJyYW5jaGVzCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIGZpdmUgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGZpdmUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBzaXggPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNpeCAmJgorCisJIyB1cGRhdGUgdGFnCisJZ2l0IHRhZyAtZCB0d28gJiYgZ2l0IHRhZyB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnkgZGVmYXVsdCBhbGwgYnJhbmNoZXMgd2lsbCBiZSBrZXB0IHVwZGF0ZWQnICcKKwkoCisJCWNkIGRpcl9hbGwgJiYgZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiB8CisJCXNlZCAtZSAiL0hFQUQkL2QiIFwKKwkJICAgIC1lICJzfC9yZW1vdGVzL29yaWdpbi98L2hlYWRzL3wiID4uLi9hY3R1YWwKKwkpICYmCisJIyBmb2xsb3cgYm90aCBtYXN0ZXIgYW5kIHNpZGUKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnkgZGVmYXVsdCBubyB0YWdzIHdpbGwgYmUga2VwdCB1cGRhdGVkJyAnCisJKAorCQljZCBkaXJfYWxsICYmIGdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+Li4vYWN0dWFsCisJKSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2luZ2xlLWJyYW5jaCB3aGlsZSBIRUFEIHBvaW50aW5nIGF0IG1hc3RlcicgJworCSgKKwkJY2QgZGlyX21hc3RlciAmJiBnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwKKwkJc2VkIC1lICIvSEVBRCQvZCIgXAorCQkgICAgLWUgInN8L3JlbW90ZXMvb3JpZ2luL3wvaGVhZHMvfCIgPi4uL2FjdHVhbAorCSkgJiYKKwkjIG9ubHkgZm9sbG93IG1hc3RlcgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdoaWxlIEhFQUQgcG9pbnRpbmcgYXQgc2lkZScgJworCSgKKwkJY2QgZGlyX3NpZGUgJiYgZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiB8CisJCXNlZCAtZSAiL0hFQUQkL2QiIFwKKwkJICAgIC1lICJzfC9yZW1vdGVzL29yaWdpbi98L2hlYWRzL3wiID4uLi9hY3R1YWwKKwkpICYmCisJIyBvbmx5IGZvbGxvdyBzaWRlCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzL3NpZGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggZXhwbGljaXQgLS1icmFuY2ggc2lkZScgJworCSgKKwkJY2QgZGlyX3NpZGUyICYmIGdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gfAorCQlzZWQgLWUgIi9IRUFEJC9kIiBcCisJCSAgICAtZSAic3wvcmVtb3Rlcy9vcmlnaW4vfC9oZWFkcy98IiA+Li4vYWN0dWFsCisJKSAmJgorCSMgb25seSBmb2xsb3cgc2lkZQorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy9zaWRlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2luZ2xlLWJyYW5jaCB3aXRoIGV4cGxpY2l0IC0tYnJhbmNoIHdpdGggdGFnIGZldGNoZXMgdXBkYXRlZCB0YWcnICcKKwkoCisJCWNkIGRpcl90YWcgJiYgZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID4uLi9hY3R1YWwKKwkpICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggLS1taXJyb3InICcKKwkoCisJCWNkIGRpcl9taXJyb3IgJiYgZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcyA+IC4uL2FjdHVhbAorCSkgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggZXhwbGljaXQgLS1icmFuY2ggYW5kIC0tbWlycm9yJyAnCisJKAorCQljZCBkaXJfbWlycm9yX3NpZGUgJiYgZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcyA+IC4uL2FjdHVhbAorCSkgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggZGV0YWNoZWQnICcKKwkoCisJCWNkIGRpcl9kZXRhY2hlZCAmJiBnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwKKwkJc2VkIC1lICIvSEVBRCQvZCIgXAorCQkgICAgLWUgInN8L3JlbW90ZXMvb3JpZ2luL3wvaGVhZHMvfCIgPi4uL2FjdHVhbAorCSkKKwkjIG5vdGhpbmcKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU3MTAtaW5mby1hbHRlcm5hdGUuc2ggYi90L3Q1NzEwLWluZm8tYWx0ZXJuYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhMDQ1MjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NzEwLWluZm8tYWx0ZXJuYXRlLnNoCkBAIC0wLDAgKzEsMTEyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IE1hcnRpbiBXYWl0eiA8dGFsaUBhZG1pbmdpbGRlLm9yZz4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB0cmFuc2l0aXZlIGluZm8vYWx0ZXJuYXRlIGVudHJpZXMnCisuIC4vdGVzdC1saWIuc2gKKworIyB0ZXN0IHRoYXQgYSBmaWxlIGlzIG5vdCByZWFjaGFibGUgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeQorIyBidXQgdGhhdCBpdCBpcyBhZnRlciBjcmVhdGluZyBhIGluZm8vYWx0ZXJuYXRlIGVudHJ5CityZWFjaGFibGVfdmlhKCkgeworCWFsdGVybmF0ZT0iJDEiCisJZmlsZT0iJDIiCisJaWYgZ2l0IGNhdC1maWxlIC1lICJIRUFEOiRmaWxlIjsgdGhlbiByZXR1cm4gMTsgZmkKKwllY2hvICIkYWx0ZXJuYXRlIiA+PiAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGUKKwlnaXQgY2F0LWZpbGUgLWUgIkhFQUQ6JGZpbGUiCit9CisKK3Rlc3RfdmFsaWRfcmVwbygpIHsKKwlnaXQgZnNjayAtLWZ1bGwgPiBmc2NrLmxvZyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZnNjay5sb2cKK30KKworYmFzZV9kaXI9YHB3ZGAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIGZpcnN0IHJlcG9zaXRvcnknIFwKKyd0ZXN0X2NyZWF0ZV9yZXBvIEEgJiYgY2QgQSAmJgorZWNobyAiSGVsbG8gV29ybGQiID4gZmlsZTEgJiYKK2dpdCBhZGQgZmlsZTEgJiYKK2dpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiBmaWxlMSAmJgorZ2l0IHJlcGFjayAtYSAtZCAmJgorZ2l0IHBydW5lJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc2Vjb25kIHJlcG9zaXRvcnknIFwKKydnaXQgY2xvbmUgLWwgLXMgQSBCICYmIGNkIEIgJiYKK2VjaG8gImZvbyBiYXIiID4gZmlsZTIgJiYKK2dpdCBhZGQgZmlsZTIgJiYKK2dpdCBjb21taXQgLW0gIm5leHQgY29tbWl0IiBmaWxlMiAmJgorZ2l0IHJlcGFjayAtYSAtZCAtbCAmJgorZ2l0IHBydW5lJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgdGhpcmQgcmVwb3NpdG9yeScgXAorJ2dpdCBjbG9uZSAtbCAtcyBCIEMgJiYgY2QgQyAmJgorZWNobyAiR29vZGJ5ZSwgY3J1ZWwgd29ybGQiID4gZmlsZTMgJiYKK2dpdCBhZGQgZmlsZTMgJiYKK2dpdCBjb21taXQgLW0gIm9uZSBtb3JlIiBmaWxlMyAmJgorZ2l0IHJlcGFjayAtYSAtZCAtbCAmJgorZ2l0IHBydW5lJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyB0b28gZGVlcCBuZXN0aW5nJyBcCisnZ2l0IGNsb25lIC1sIC1zIEMgRCAmJgorZ2l0IGNsb25lIC1sIC1zIEQgRSAmJgorZ2l0IGNsb25lIC1sIC1zIEUgRiAmJgorZ2l0IGNsb25lIC1sIC1zIEYgRyAmJgorZ2l0IGNsb25lIC1sIC1zIEcgSCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZGl0eSBvZiBkZWVwZXN0IHJlcG9zaXRvcnknIFwKKydjZCBIICYmIHsKKwl0ZXN0X3ZhbGlkX3JlcG8KKwl0ZXN0ICQ/IC1uZSAwCit9JworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGl0eSBvZiB0aGlyZCByZXBvc2l0b3J5JyBcCisnY2QgQyAmJgordGVzdF92YWxpZF9yZXBvJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGl0eSBvZiBmb3VydGggcmVwb3NpdG9yeScgXAorJ2NkIEQgJiYKK3Rlc3RfdmFsaWRfcmVwbycKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJlYWtpbmcgb2YgbG9vcHMnIFwKKydlY2hvICIkYmFzZV9kaXIiL0IvLmdpdC9vYmplY3RzID4+ICIkYmFzZV9kaXIiL0EvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyYmCitjZCBDICYmCit0ZXN0X3ZhbGlkX3JlcG8nCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgaW5mby9hbHRlcm5hdGVzIGlzIG5lY2Vzc2FyeScgXAorJ2NkIEMgJiYKK3JtIC1mIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKyEgKHRlc3RfdmFsaWRfcmVwbyknCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgcmVsYXRpdmUgYWx0ZXJuYXRlIGlzIHBvc3NpYmxlIGZvciBjdXJyZW50IGRpcicgXAorJ2NkIEMgJiYKK2VjaG8gIi4uLy4uLy4uL0IvLmdpdC9vYmplY3RzIiA+IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKK3Rlc3RfdmFsaWRfcmVwbycKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3RoYXQgcmVsYXRpdmUgYWx0ZXJuYXRlIGlzIG9ubHkgcG9zc2libGUgZm9yIGN1cnJlbnQgZGlyJyAnCisgICAgY2QgRCAmJgorICAgICEgKHRlc3RfdmFsaWRfcmVwbykKKycKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1ODAwLXJlbW90ZS1oZWxwZXJzLnNoIGIvdC90NTgwMC1yZW1vdGUtaGVscGVycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lN2RjNjY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTgwMC1yZW1vdGUtaGVscGVycy5zaApAQCAtMCwwICsxLDE0OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBTdmVycmUgUmFiYmVsaWVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcmVtb3RlLWhlbHBlciBpbXBvcnQgYW5kIGV4cG9ydCBjb21tYW5kcycKKworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQWVRIT04gOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdC1yZW1vdGUtaGcgdGVzdHMsIHB5dGhvbiBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworIiRQWVRIT05fUEFUSCIgLWMgJworaW1wb3J0IHN5cworaWYgc3lzLmhleHZlcnNpb24gPCAweDAyMDQwMDAwOgorICAgIHN5cy5leGl0KDEpCisnIHx8IHsKKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LXJlbW90ZS1oZyB0ZXN0cywgcHl0aG9uIHZlcnNpb24gPCAyLjQnCisJdGVzdF9kb25lCit9CisKK2NvbXBhcmVfcmVmcygpIHsKKwlnaXQgLS1naXQtZGlyPSIkMS8uZ2l0IiByZXYtcGFyc2UgLS12ZXJpZnkgJDIgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9IiQzLy5naXQiIHJldi1wYXJzZSAtLXZlcmlmeSAkNCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5JyAnCisJZ2l0IGluaXQgLS1iYXJlIHNlcnZlci8uZ2l0ICYmCisJZ2l0IGNsb25lIHNlcnZlciBwdWJsaWMgJiYKKwkoY2QgcHVibGljICYmCisJIGVjaG8gY29udGVudCA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBmcm9tIGxvY2FsIHJlcG8nICcKKwlnaXQgY2xvbmUgInRlc3RnaXQ6OiR7UFdEfS9zZXJ2ZXIiIGxvY2FsY2xvbmUgJiYKKwl0ZXN0X2NtcCBwdWJsaWMvZmlsZSBsb2NhbGNsb25lL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBmcm9tIHJlbW90ZSByZXBvJyAnCisJZ2l0IGNsb25lICJ0ZXN0Z2l0OjpmaWxlOi8vJHtQV0R9L3NlcnZlciIgY2xvbmUgJiYKKwl0ZXN0X2NtcCBwdWJsaWMvZmlsZSBjbG9uZS9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBuZXcgY29tbWl0IG9uIHJlbW90ZScgJworCShjZCBwdWJsaWMgJiYKKwkgZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCSBnaXQgcHVzaCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBmcm9tIGxvY2FsIHJlcG8nICcKKwkoY2QgbG9jYWxjbG9uZSAmJiBnaXQgcHVsbCkgJiYKKwl0ZXN0X2NtcCBwdWJsaWMvZmlsZSBsb2NhbGNsb25lL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBmcm9tIHJlbW90ZSByZW1vdGUnICcKKwkoY2QgY2xvbmUgJiYgZ2l0IHB1bGwpICYmCisJdGVzdF9jbXAgcHVibGljL2ZpbGUgY2xvbmUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHRvIGxvY2FsIHJlcG8nICcKKwkoY2QgbG9jYWxjbG9uZSAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRocmVlICYmCisJZ2l0IHB1c2gpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsY2xvbmUgSEVBRCBzZXJ2ZXIgSEVBRAorJworCisjIEdlbmVyYWxseSwgc2tpcCB0aGlzIHRlc3QuICBJdCBkZW1vbnN0cmF0ZXMgYSBub3ctZml4ZWQgcmFjZSBpbgorIyBnaXQtcmVtb3RlLXRlc3RnaXQsIGJ1dCBpcyB0b28gc2xvdyB0byBsZWF2ZSBpbiBmb3IgZ2VuZXJhbCB1c2UuCis6IHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhY2lseSBwdXNoaW5nIHRvIGxvY2FsIHJlcG8nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzZXJ2ZXIyIGxvY2FsY2xvbmUyIiAmJgorCWNwIC1SIHNlcnZlciBzZXJ2ZXIyICYmCisJZ2l0IGNsb25lICJ0ZXN0Z2l0Ojoke1BXRH0vc2VydmVyMiIgbG9jYWxjbG9uZTIgJiYKKwkoY2QgbG9jYWxjbG9uZTIgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0aHJlZSAmJgorCUdJVF9SRU1PVEVfVEVTVEdJVF9TTEVFUFk9MiBnaXQgcHVzaCkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWxjbG9uZTIgSEVBRCBzZXJ2ZXIyIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3luY2ggd2l0aCBjaGFuZ2VzIGZyb20gbG9jYWxjbG9uZScgJworCShjZCBjbG9uZSAmJgorCSBnaXQgcHVsbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyByZW1vdGUgbG9jYWwgcmVwbycgJworCShjZCBjbG9uZSAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGZvdXIgJiYKKwlnaXQgcHVzaCkgJiYKKwljb21wYXJlX3JlZnMgY2xvbmUgSEVBRCBzZXJ2ZXIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBuZXcgYnJhbmNoJyAnCisJKGNkIHB1YmxpYyAmJgorCSBnaXQgY2hlY2tvdXQgLWIgbmV3ICYmCisJIGVjaG8gY29udGVudCA+PmZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSBmaXZlICYmCisJIGdpdCBwdXNoIG9yaWdpbiBuZXcKKwkpICYmCisJKGNkIGxvY2FsY2xvbmUgJiYKKwkgZ2l0IGZldGNoIG9yaWdpbiBuZXcKKwkpICYmCisJY29tcGFyZV9yZWZzIHB1YmxpYyBIRUFEIGxvY2FsY2xvbmUgRkVUQ0hfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBtdWx0aXBsZSBicmFuY2hlcycgJworCShjZCBsb2NhbGNsb25lICYmCisJIGdpdCBmZXRjaAorCSkgJiYKKwljb21wYXJlX3JlZnMgc2VydmVyIG1hc3RlciBsb2NhbGNsb25lIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJY29tcGFyZV9yZWZzIHNlcnZlciBuZXcgbG9jYWxjbG9uZSByZWZzL3JlbW90ZXMvb3JpZ2luL25ldworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdoZW4gcmVtb3RlIGhhcyBleHRyYSByZWZzJyAnCisJKGNkIGNsb25lICYmCisJIGVjaG8gY29udGVudCA+PmZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSBzaXggJiYKKwkgZ2l0IHB1c2gKKwkpICYmCisJY29tcGFyZV9yZWZzIGNsb25lIG1hc3RlciBzZXJ2ZXIgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbmV3IGJyYW5jaCBieSBuYW1lJyAnCisJKGNkIGNsb25lICYmCisJIGdpdCBjaGVja291dCAtYiBuZXctbmFtZSAgJiYKKwkgZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tIHNldmVuICYmCisJIGdpdCBwdXNoIG9yaWdpbiBuZXctbmFtZQorCSkgJiYKKwljb21wYXJlX3JlZnMgY2xvbmUgSEVBRCBzZXJ2ZXIgcmVmcy9oZWFkcy9uZXctbmFtZQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdwdXNoIG5ldyBicmFuY2ggd2l0aCBvbGQ6bmV3IHJlZnNwZWMnICcKKwkoY2QgY2xvbmUgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG5ldy1uYW1lOm5ldy1yZWZzcGVjCisJKSAmJgorCWNvbXBhcmVfcmVmcyBjbG9uZSBIRUFEIHNlcnZlciByZWZzL2hlYWRzL25ldy1yZWZzcGVjCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTkwMC1yZXBvLXNlbGVjdGlvbi5zaCBiL3QvdDU5MDAtcmVwby1zZWxlY3Rpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2Q1YjQxOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU5MDAtcmVwby1zZWxlY3Rpb24uc2gKQEAgLTAsMCArMSwxMDAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzZWxlY3RpbmcgcmVtb3RlIHJlcG8gaW4gYW1iaWd1b3VzIGNhc2VzJworLiAuL3Rlc3QtbGliLnNoCisKK3Jlc2V0KCkgeworCXJtIC1yZiBmb28gZm9vLmdpdCBmZXRjaCBjbG9uZQorfQorCittYWtlX3RyZWUoKSB7CisJZ2l0IGluaXQgIiQxIiAmJgorCShjZCAiJDEiICYmIHRlc3RfY29tbWl0ICIkMSIpCit9CisKK21ha2VfYmFyZSgpIHsKKwlnaXQgaW5pdCAtLWJhcmUgIiQxIiAmJgorCShjZCAiJDEiICYmCisJIHRyZWU9YGdpdCBoYXNoLW9iamVjdCAtdyAtdCB0cmVlIC9kZXYvbnVsbGAgJiYKKwkgY29tbWl0PSQoZWNobyAiJDEiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCSBnaXQgdXBkYXRlLXJlZiBIRUFEICRjb21taXQKKwkpCit9CisKK2dldCgpIHsKKwlnaXQgaW5pdCAtLWJhcmUgZmV0Y2ggJiYKKwkoY2QgZmV0Y2ggJiYgZ2l0IGZldGNoICIuLi8kMSIpICYmCisJZ2l0IGNsb25lICIkMSIgY2xvbmUKK30KKworY2hlY2soKSB7CisJZWNobyAiJDEiID5leHBlY3QgJiYKKwkoY2QgZmV0Y2ggJiYgZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyBGRVRDSF9IRUFEKSA+YWN0dWFsLmZldGNoICYmCisJKGNkIGNsb25lICYmIGdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgSEVBRCkgPmFjdHVhbC5jbG9uZSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmV0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmNsb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgLmdpdCBkaXIgaW4gd29ya3RyZWUnICcKKwlyZXNldCAmJgorCW1ha2VfdHJlZSBmb28gJiYKKwlnZXQgZm9vICYmCisJY2hlY2sgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9tYWdpY2FsbHkgYWRkIC5naXQgc3VmZml4JyAnCisJcmVzZXQgJiYKKwltYWtlX2JhcmUgZm9vLmdpdCAmJgorCWdldCBmb28gJiYKKwljaGVjayBmb28uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9tYWdpY2FsbHkgYWRkIC5naXQgc3VmZml4IHRvIHdvcmt0cmVlJyAnCisJcmVzZXQgJiYKKwltYWtlX3RyZWUgZm9vLmdpdCAmJgorCWdldCBmb28gJiYKKwljaGVjayBmb28uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWZlciB3b3JrdHJlZSBmb28gb3ZlciBiYXJlIGZvby5naXQnICcKKwlyZXNldCAmJgorCW1ha2VfdHJlZSBmb28gJiYKKwltYWtlX2JhcmUgZm9vLmdpdCAmJgorCWdldCBmb28gJiYKKwljaGVjayBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlZmVyIGJhcmUgZm9vIG92ZXIgYmFyZSBmb28uZ2l0JyAnCisJcmVzZXQgJiYKKwltYWtlX2JhcmUgZm9vICYmCisJbWFrZV9iYXJlIGZvby5naXQgJiYKKwlnZXQgZm9vICYmCisJY2hlY2sgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSB3aXRoIGZ1bGwgZm9vLmdpdCcgJworCXJlc2V0ICYmCisJbWFrZV9iYXJlIGZvbyAmJgorCW1ha2VfYmFyZSBmb28uZ2l0ICYmCisJZ2V0IGZvby5naXQgJiYKKwljaGVjayBmb28uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dlIGFyZSBub3QgZm9vbGVkIGJ5IG5vbi1naXQgZm9vIGRpcmVjdG9yeScgJworCXJlc2V0ICYmCisJbWFrZV9iYXJlIGZvby5naXQgJiYKKwlta2RpciBmb28gJiYKKwlnZXQgZm9vICYmCisJY2hlY2sgZm9vLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVmZXIgaW5uZXIgLmdpdCBvdmVyIG91dGVyIGJhcmUnICcKKwlyZXNldCAmJgorCW1ha2VfdHJlZSBmb28gJiYKKwltYWtlX2JhcmUgZm9vLmdpdCAmJgorCW12IGZvby8uZ2l0IGZvby5naXQgJiYKKwlnZXQgZm9vLmdpdCAmJgorCWNoZWNrIGZvbworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDAtcmV2LWxpc3QtbWlzYy5zaCBiL3QvdDYwMDAtcmV2LWxpc3QtbWlzYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTA2ODVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwMC1yZXYtbGlzdC1taXNjLnNoCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtaXNjZWxsYW5lb3VzIHJldi1saXN0IHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBjb250ZW50MSA+d2FudGVkX2ZpbGUgJiYKKwllY2hvIGNvbnRlbnQyID51bndhbnRlZF9maWxlICYmCisJZ2l0IGFkZCB3YW50ZWRfZmlsZSB1bndhbnRlZF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1vYmplY3RzIGhlZWRzIHBhdGhzcGVjcycgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCAtLSB3YW50ZWRfZmlsZSA+b3V0cHV0ICYmCisJZ3JlcCB3YW50ZWRfZmlsZSBvdXRwdXQgJiYKKwkhIGdyZXAgdW53YW50ZWRfZmlsZSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1vYmplY3RzIHdpdGggcGF0aHNwZWNzIGFuZCBkZWVwZXIgcGF0aHMnICcKKwlta2RpciBmb28gJiYKKwk+Zm9vL2ZpbGUgJiYKKwlnaXQgYWRkIGZvby9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSB0d28gJiYKKworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCAtLSBmb28gPm91dHB1dCAmJgorCWdyZXAgZm9vL2ZpbGUgb3V0cHV0ICYmCisKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgLS0gZm9vL2ZpbGUgPm91dHB1dCAmJgorCWdyZXAgZm9vL2ZpbGUgb3V0cHV0ICYmCisJISBncmVwIHVud2FudGVkX2ZpbGUgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tb2JqZWN0cyB3aXRoIHBhdGhzcGVjcyBhbmQgY29waWVkIGZpbGVzJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGp1bmlvLXRlc3RjYXNlICYmCisJZ2l0IHJtIC1yZiAuICYmCisKKwlta2RpciB0d28gJiYKKwllY2hvIGZyb3R6ID5vbmUgJiYKKwljcCBvbmUgdHdvL3RocmVlICYmCisJZ2l0IGFkZCBvbmUgdHdvL3RocmVlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGF0ICYmCisKKwlPTkU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6b25lKQorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCB0d28gPm91dHB1dCAmJgorCWdyZXAgIiRPTkUgdHdvL3RocmVlIiBvdXRwdXQgJiYKKwkhIGdyZXAgb25lIG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDEtcmV2LWxpc3QtZ3JhZnQuc2ggYi90L3Q2MDAxLXJldi1saXN0LWdyYWZ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlZmNkMTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDAxLXJldi1saXN0LWdyYWZ0LnNoCkBAIC0wLDAgKzEsMTEzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nUmV2aXNpb24gdHJhdmVyc2FsIHZzIGdyYWZ0cyBhbmQgcGF0aCBsaW1pdGVyJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyA+ZmlsZUEgZmlsZUEgJiYKKwllY2hvID5zdWJkaXIvZmlsZUIgZmlsZUIgJiYKKwlnaXQgYWRkIGZpbGVBIHN1YmRpci9maWxlQiAmJgorCWdpdCBjb21taXQgLWEgLW0gIkluaXRpYWwgaW4gb25lIGhpc3RvcnkuIiAmJgorCUEwPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgICYmCisKKwllY2hvID5maWxlQSBmaWxlQSBtb2RpZmllZCAmJgorCWdpdCBjb21taXQgLWEgLW0gIlNlY29uZCBpbiBvbmUgaGlzdG9yeS4iICYmCisJQTE9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRGAgJiYKKworCWVjaG8gPnN1YmRpci9maWxlQiBmaWxlQiBtb2RpZmllZCAmJgorCWdpdCBjb21taXQgLWEgLW0gIlRoaXJkIGluIG9uZSBoaXN0b3J5LiIgJiYKKwlBMj1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYCAmJgorCisJcm0gLWYgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L2luZGV4ICYmCisKKwllY2hvID5maWxlQSBmaWxlQSBhZ2FpbiAmJgorCWVjaG8gPnN1YmRpci9maWxlQiBmaWxlQiBhZ2FpbiAmJgorCWdpdCBhZGQgZmlsZUEgc3ViZGlyL2ZpbGVCICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiSW5pdGlhbCBpbiBhbHRlcm5hdGUgaGlzdG9yeS4iICYmCisJQjA9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRGAgJiYKKworCWVjaG8gPmZpbGVBIGZpbGVBIG1vZGlmaWVkIGluIGFsdGVybmF0ZSBoaXN0b3J5ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiU2Vjb25kIGluIGFsdGVybmF0ZSBoaXN0b3J5LiIgJiYKKwlCMT1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYCAmJgorCisJZWNobyA+c3ViZGlyL2ZpbGVCIGZpbGVCIG1vZGlmaWVkIGluIGFsdGVybmF0ZSBoaXN0b3J5ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiVGhpcmQgaW4gYWx0ZXJuYXRlIGhpc3RvcnkuIiAmJgorCUIyPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgICYmCisJOiBkb25lCisnCisKK2NoZWNrICgpIHsKKwl0eXBlPSQxCisJc2hpZnQKKworCWFyZz0KKwl3aGljaD1hcmcKKwlybSAtZiB0ZXN0LmV4cGVjdAorCWZvciBhCisJZG8KKwkJaWYgdGVzdCAieiRhIiA9IHotLQorCQl0aGVuCisJCQl3aGljaD1leHBlY3QKKwkJCWNoaWxkPQorCQkJY29udGludWUKKwkJZmkKKwkJaWYgdGVzdCAiJHdoaWNoIiA9IGFyZworCQl0aGVuCisJCQlhcmc9IiRhcmckYSAiCisJCQljb250aW51ZQorCQlmaQorCQlpZiB0ZXN0ICIkdHlwZSIgPSBiYXNpYworCQl0aGVuCisJCQllY2hvICIkYSIKKwkJZWxzZQorCQkJaWYgdGVzdCAieiRjaGlsZCIgIT0gegorCQkJdGhlbgorCQkJCWVjaG8gIiRjaGlsZCAkYSIKKwkJCWZpCisJCQljaGlsZD0iJGEiCisJCWZpCisJZG9uZSA+dGVzdC5leHBlY3QKKwlpZiB0ZXN0ICIkdHlwZSIgIT0gYmFzaWMgJiYgdGVzdCAieiRjaGlsZCIgIT0gegorCXRoZW4KKwkJZWNobyA+PnRlc3QuZXhwZWN0ICRjaGlsZAorCWZpCisJaWYgdGVzdCAkdHlwZSA9IGJhc2ljCisJdGhlbgorCQlnaXQgcmV2LWxpc3QgJGFyZyA+dGVzdC5hY3R1YWwKKwllbGlmIHRlc3QgJHR5cGUgPSBwYXJlbnRzCisJdGhlbgorCQlnaXQgcmV2LWxpc3QgLS1wYXJlbnRzICRhcmcgPnRlc3QuYWN0dWFsCisJZWxpZiB0ZXN0ICR0eXBlID0gcGFyZW50cy1yYXcKKwl0aGVuCisJCWdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1wcmV0dHk9cmF3ICRhcmcgfAorCQlzZWQgLW4gLWUgJ3MvXmNvbW1pdCAvL3AnID50ZXN0LmFjdHVhbAorCWZpCisJdGVzdF9jbXAgdGVzdC5leHBlY3QgdGVzdC5hY3R1YWwKK30KKworZm9yIHR5cGUgaW4gYmFzaWMgcGFyZW50cyBwYXJlbnRzLXJhdworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRob3V0IGdyYWZ0cycgIgorCQlybSAtZiAuZ2l0L2luZm8vZ3JhZnRzICYmCisJCWNoZWNrICR0eXBlICRCMiAtLSAkQjIgJEIxICRCMAorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZ3JhZnRzJyAiCisJCWVjaG8gJyRCMCAkQTInID4uZ2l0L2luZm8vZ3JhZnRzICYmCisJCWNoZWNrICR0eXBlICRCMiAtLSAkQjIgJEIxICRCMCAkQTIgJEExICRBMAorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhvdXQgZ3JhZnRzLCB3aXRoIHBhdGhsaW1pdCcgIgorCQlybSAtZiAuZ2l0L2luZm8vZ3JhZnRzICYmCisJCWNoZWNrICR0eXBlICRCMiBzdWJkaXIgLS0gJEIyICRCMAorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZ3JhZnRzLCB3aXRoIHBhdGhsaW1pdCcgIgorCQllY2hvICckQjAgJEEyJyA+LmdpdC9pbmZvL2dyYWZ0cyAmJgorCQljaGVjayAkdHlwZSAkQjIgc3ViZGlyIC0tICRCMiAkQjAgJEEyICRBMAorCSIKKworZG9uZQordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDAyLXJldi1saXN0LWJpc2VjdC5zaCBiL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiMDc1MzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDAyLXJldi1saXN0LWJpc2VjdC5zaApAQCAtMCwwICsxLDIzOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKb24gU2V5bW91cgorIwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgZ2l0IHJldi1saXN0IC0tYmlzZWN0IGZ1bmN0aW9uYWxpdHknCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdDYwMDAuc2ggIyB0Nnh4eCBzcGVjaWZpYyBmdW5jdGlvbnMKKworIyB1c2FnZTogdGVzdF9iaXNlY3Rpb24gbWF4LWRpZmYgYmlzZWN0LW9wdGlvbiBoZWFkIF5wcnVuZS4uLgorIworIyBlLmcuIHRlc3RfYmlzZWN0aW9uIDEgLS1iaXNlY3QgbDEgXmwwCisjCit0ZXN0X2Jpc2VjdGlvbl9kaWZmKCkKK3sKKwlfbWF4X2RpZmY9JDEKKwlfYmlzZWN0X29wdGlvbj0kMgorCXNoaWZ0IDIKKwlfYmlzZWN0aW9uPSQoZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiAiJEAiKQorCV9saXN0X3NpemU9JChnaXQgcmV2LWxpc3QgIiRAIiB8IHdjIC1sKQorICAgICAgICBfaGVhZD0kMQorCXNoaWZ0IDEKKwlfYmlzZWN0aW9uX3NpemU9JChnaXQgcmV2LWxpc3QgJF9iaXNlY3Rpb24gIiRAIiB8IHdjIC1sKQorCVsgLW4gIiRfbGlzdF9zaXplIiAtYSAtbiAiJF9iaXNlY3Rpb25fc2l6ZSIgXSB8fAorCWVycm9yICJ0ZXN0X2Jpc2VjdGlvbl9kaWZmIGZhaWxlZCIKKworCSMgVGVzdCBpZiBiaXNlY3Rpb24gc2l6ZSBpcyBjbG9zZSB0byBoYWxmIG9mIGxpc3Qgc2l6ZSB3aXRoaW4KKwkjIHRvbGVyYW5jZS4KKwkjCisJX2Jpc2VjdF9lcnI9YGV4cHIgJF9saXN0X3NpemUgLSAkX2Jpc2VjdGlvbl9zaXplIFwqIDJgCisJdGVzdCAiJF9iaXNlY3RfZXJyIiAtbHQgMCAmJiBfYmlzZWN0X2Vycj1gZXhwciAwIC0gJF9iaXNlY3RfZXJyYAorCV9iaXNlY3RfZXJyPWBleHByICRfYmlzZWN0X2VyciAvIDJgIDsgIyBmbG9vcgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJImJpc2VjdGlvbiBkaWZmICRfYmlzZWN0X29wdGlvbiAkX2hlYWQgJCogPD0gJF9tYXhfZGlmZiIgXAorCSd0ZXN0ICRfYmlzZWN0X2VyciAtbGUgJF9tYXhfZGlmZicKK30KKworZGF0ZSA+cGF0aDAKK2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAKK3NhdmVfdGFnIHRyZWUgZ2l0IHdyaXRlLXRyZWUKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAwIiBoaWRlX2Vycm9yIHNhdmVfdGFnIHJvb3QgdW5pcXVlX2NvbW1pdCByb290IHRyZWUKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAxIiBzYXZlX3RhZyBsMCB1bmlxdWVfY29tbWl0IGwwIHRyZWUgLXAgcm9vdAorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDIiIHNhdmVfdGFnIGwxIHVuaXF1ZV9jb21taXQgbDEgdHJlZSAtcCBsMAorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDMiIHNhdmVfdGFnIGwyIHVuaXF1ZV9jb21taXQgbDIgdHJlZSAtcCBsMQorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDQiIHNhdmVfdGFnIGEwIHVuaXF1ZV9jb21taXQgYTAgdHJlZSAtcCBsMgorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDUiIHNhdmVfdGFnIGExIHVuaXF1ZV9jb21taXQgYTEgdHJlZSAtcCBhMAorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDYiIHNhdmVfdGFnIGIxIHVuaXF1ZV9jb21taXQgYjEgdHJlZSAtcCBhMAorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDciIHNhdmVfdGFnIGMxIHVuaXF1ZV9jb21taXQgYzEgdHJlZSAtcCBiMQorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDgiIHNhdmVfdGFnIGIyIHVuaXF1ZV9jb21taXQgYjIgdHJlZSAtcCBiMQorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDkiIHNhdmVfdGFnIGIzIHVuaXF1ZV9jb21taXQgYjIgdHJlZSAtcCBiMgorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MTAiIHNhdmVfdGFnIGMyIHVuaXF1ZV9jb21taXQgYzIgdHJlZSAtcCBjMSAtcCBiMgorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MTEiIHNhdmVfdGFnIGMzIHVuaXF1ZV9jb21taXQgYzMgdHJlZSAtcCBjMgorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MTIiIHNhdmVfdGFnIGEyIHVuaXF1ZV9jb21taXQgYTIgdHJlZSAtcCBhMQorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MTMiIHNhdmVfdGFnIGEzIHVuaXF1ZV9jb21taXQgYTMgdHJlZSAtcCBhMgorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MTQiIHNhdmVfdGFnIGI0IHVuaXF1ZV9jb21taXQgYjQgdHJlZSAtcCBiMyAtcCBhMworb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MTUiIHNhdmVfdGFnIGE0IHVuaXF1ZV9jb21taXQgYTQgdHJlZSAtcCBhMyAtcCBiNCAtcCBjMworb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MTYiIHNhdmVfdGFnIGwzIHVuaXF1ZV9jb21taXQgbDMgdHJlZSAtcCBhNAorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MTciIHNhdmVfdGFnIGw0IHVuaXF1ZV9jb21taXQgbDQgdHJlZSAtcCBsMworb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MTgiIHNhdmVfdGFnIGw1IHVuaXF1ZV9jb21taXQgbDUgdHJlZSAtcCBsNAorZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkKHRhZyBsNSkKKworCisjICAgICBFCisjICAgIC8gXAorIyAgIGUxICB8CisjICAgfCAgIHwKKyMgICBlMiAgfAorIyAgIHwgICB8CisjICAgZTMgIHwKKyMgICB8ICAgfAorIyAgIGU0ICB8CisjICAgfCAgIHwKKyMgICB8ICAgZjEKKyMgICB8ICAgfAorIyAgIHwgICBmMgorIyAgIHwgICB8CisjICAgfCAgIGYzCisjICAgfCAgIHwKKyMgICB8ICAgZjQKKyMgICB8ICAgfAorIyAgIGU1ICB8CisjICAgfCAgIHwKKyMgICBlNiAgfAorIyAgIHwgICB8CisjICAgZTcgIHwKKyMgICB8ICAgfAorIyAgIGU4ICB8CisjICAgIFwgLworIyAgICAgRgorCisKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAwIiBoaWRlX2Vycm9yIHNhdmVfdGFnIEYgdW5pcXVlX2NvbW1pdCBGIHRyZWUKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAxIiBzYXZlX3RhZyBlOCB1bmlxdWVfY29tbWl0IGU4IHRyZWUgLXAgRgorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDIiIHNhdmVfdGFnIGU3IHVuaXF1ZV9jb21taXQgZTcgdHJlZSAtcCBlOAorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDMiIHNhdmVfdGFnIGU2IHVuaXF1ZV9jb21taXQgZTYgdHJlZSAtcCBlNworb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDQiIHNhdmVfdGFnIGU1IHVuaXF1ZV9jb21taXQgZTUgdHJlZSAtcCBlNgorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDUiIHNhdmVfdGFnIGY0IHVuaXF1ZV9jb21taXQgZjQgdHJlZSAtcCBGCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowNiIgc2F2ZV90YWcgZjMgdW5pcXVlX2NvbW1pdCBmMyB0cmVlIC1wIGY0Citvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowNyIgc2F2ZV90YWcgZjIgdW5pcXVlX2NvbW1pdCBmMiB0cmVlIC1wIGYzCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowOCIgc2F2ZV90YWcgZjEgdW5pcXVlX2NvbW1pdCBmMSB0cmVlIC1wIGYyCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowOSIgc2F2ZV90YWcgZTQgdW5pcXVlX2NvbW1pdCBlNCB0cmVlIC1wIGU1Citvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxMCIgc2F2ZV90YWcgZTMgdW5pcXVlX2NvbW1pdCBlMyB0cmVlIC1wIGU0Citvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxMSIgc2F2ZV90YWcgZTIgdW5pcXVlX2NvbW1pdCBlMiB0cmVlIC1wIGUzCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxMiIgc2F2ZV90YWcgZTEgdW5pcXVlX2NvbW1pdCBlMSB0cmVlIC1wIGUyCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxMyIgc2F2ZV90YWcgRSB1bmlxdWVfY29tbWl0IEUgdHJlZSAtcCBlMSAtcCBmMQorCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyBVIHVuaXF1ZV9jb21taXQgVSB0cmVlCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowMSIgc2F2ZV90YWcgdTAgdW5pcXVlX2NvbW1pdCB1MCB0cmVlIC1wIFUKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAxIiBzYXZlX3RhZyB1MSB1bmlxdWVfY29tbWl0IHUxIHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAyIiBzYXZlX3RhZyB1MiB1bmlxdWVfY29tbWl0IHUyIHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAzIiBzYXZlX3RhZyB1MyB1bmlxdWVfY29tbWl0IHUzIHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA0IiBzYXZlX3RhZyB1NCB1bmlxdWVfY29tbWl0IHU0IHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA1IiBzYXZlX3RhZyB1NSB1bmlxdWVfY29tbWl0IHU1IHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjA2IiBzYXZlX3RhZyBWIHVuaXF1ZV9jb21taXQgViB0cmVlIC1wIHUxIC1wIHUyIC1wIHUzIC1wIHU0IC1wIHU1CisKK3Rlc3Rfc2VxdWVuY2UoKQoreworCV9iaXNlY3Rfb3B0aW9uPSQxCisKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGwwIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBsMSBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gbDIgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGEwIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBhMSBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYTIgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGEzIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBiMSBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYjIgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGIzIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBjMSBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYzIgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGMzIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBFIF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBlMSBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZTIgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGUzIF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBlNCBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZTUgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGU2IF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBlNyBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZjEgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGYyIF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBmMyBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZjQgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIEUgXkYKKworCXRlc3RfYmlzZWN0aW9uX2RpZmYgMSAkX2Jpc2VjdF9vcHRpb24gViBeVQorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gViBeVSBedTEgXnUyIF51MworCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gdTEgXlUKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIHUyIF5VCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiB1MyBeVQorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gdTQgXlUKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIHU1IF5VCisKKyMKKyMgdGhlIGZvbGxvd2luZyBpbGx1c3RyYXRlcyBMaW51cycgYmluYXJ5IGJ1ZyBibGF0dCBpZGVhLgorIworIyBhc3N1bWUgdGhlIGJ1ZyBpcyBhY3R1YWxseSBhdCBsMywgYnV0IHlvdSBkb24ndCBrbm93IHRoYXQgLSBhbGwgeW91IGtub3cgaXMgdGhhdCBsMyBpcyBicm9rZW4KKyMgYW5kIGl0IHdhc24ndCBicm9rZW4gYmVmb3JlCisjCisjIGtlZXAgYmlzZWN0aW5nIHRoZSBsaXN0LCBhZHZhbmNpbmcgdGhlICJiYWQiIGhlYWQgYW5kIGFjY3VtdWxhdGluZyAiZ29vZCIgaGVhZHMgdW50aWwKKyMgdGhlIGJpc2VjdGlvbiBwb2ludCBpcyB0aGUgaGVhZCAtIHRoaXMgaXMgdGhlIGJhZCBwb2ludC4KKyMKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBsNSBecm9vdCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QnIDw8RU9GCitjMworRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QgXmMzIiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBsNSBecm9vdCBeYzMnIDw8RU9GCitiNAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QgXmMzIF5iNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDUgXmMzIF5iNCcgPDxFT0YKK2wzCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBsMyBecm9vdCBeYzMgXmI0IiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBsMyBecm9vdCBeYzMgXmI0JyA8PEVPRgorYTQKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGw1IF5iMyBeYTMgXmI0IF5hNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDMgXmIzIF5hMyBeYTQnIDw8RU9GCitsMworRU9GCisKKyMKKyMgaWYgbDMgaXMgYmFkLCB0aGVuIGw0IGlzIGJhZCB0b28gLSBzbyBhZHZhbmNlIHRoZSBiYWQgcG9pbnRlciBieSBtYWtpbmcgYjQgdGhlIGtub3duIGJhZCBoZWFkCisjCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gbDQgXmEyIF5hMyBeYiBeYTQiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGw0IF5hMiBeYTMgXmE0JyA8PEVPRgorbDMKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGwzIF5hMiBeYTMgXmIgXmE0IiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBsMyBeYTIgXmEzIF5hNCcgPDxFT0YKK2wzCitFT0YKKworIyBmb3VuZCEKKworIworIyBhcyBhbm90aGVyIGV4YW1wbGUsIGxldCdzIGNvbnNpZGVyIGE0IHRvIGJlIHRoZSBiYWQgaGVhZCwgaW4gd2hpY2ggY2FzZQorIworCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGE0IF5hMiBeYTMgXmI0IiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCcgPDxFT0YKK2MyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCBeYzIiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGE0IF5hMiBeYTMgXmI0IF5jMicgPDxFT0YKK2MzCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCBeYzIgXmMzIiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCBeYzIgXmMzJyA8PEVPRgorYTQKK0VPRgorCisjIGZvdW5kIQorCisjCisjIG9yIGNvbnNpZGVyIGMzIHRvIGJlIHRoZSBiYWQgaGVhZAorIworCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGE0IF5hMiBeYTMgXmI0IiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCcgPDxFT0YKK2MyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBjMyBeYTIgXmEzIF5iNCBeYzIiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGMzIF5hMiBeYTMgXmI0IF5jMicgPDxFT0YKK2MzCitFT0YKKworIyBmb3VuZCEKKworfQorCit0ZXN0X3NlcXVlbmNlICItLWJpc2VjdCIKKworIworIwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDAzLXJldi1saXN0LXRvcG8tb3JkZXIuc2ggYi90L3Q2MDAzLXJldi1saXN0LXRvcG8tb3JkZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTRjNTJiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDMtcmV2LWxpc3QtdG9wby1vcmRlci5zaApAQCAtMCwwICsxLDQwOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKb24gU2V5bW91cgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGZ1bmN0aW9uYWxpdHknCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdDYwMDAuc2ggIyB0Nnh4eCBzcGVjaWZpYyBmdW5jdGlvbnMKKworbGlzdF9kdXBsaWNhdGVzKCkKK3sKKyAgICAiJEAiIHwgc29ydCB8IHVuaXEgLWQKK30KKworZGF0ZSA+cGF0aDAKK2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAKK3NhdmVfdGFnIHRyZWUgZ2l0IHdyaXRlLXRyZWUKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAwIiBoaWRlX2Vycm9yIHNhdmVfdGFnIHJvb3QgdW5pcXVlX2NvbW1pdCByb290IHRyZWUKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjAxIiBzYXZlX3RhZyBsMCB1bmlxdWVfY29tbWl0IGwwIHRyZWUgLXAgcm9vdAorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDIiIHNhdmVfdGFnIGwxIHVuaXF1ZV9jb21taXQgbDEgdHJlZSAtcCBsMAorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDMiIHNhdmVfdGFnIGwyIHVuaXF1ZV9jb21taXQgbDIgdHJlZSAtcCBsMQorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDQiIHNhdmVfdGFnIGEwIHVuaXF1ZV9jb21taXQgYTAgdHJlZSAtcCBsMgorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDUiIHNhdmVfdGFnIGExIHVuaXF1ZV9jb21taXQgYTEgdHJlZSAtcCBhMAorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDYiIHNhdmVfdGFnIGIxIHVuaXF1ZV9jb21taXQgYjEgdHJlZSAtcCBhMAorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDciIHNhdmVfdGFnIGMxIHVuaXF1ZV9jb21taXQgYzEgdHJlZSAtcCBiMQorb25fY29tbWl0dGVyX2RhdGUgIjE5NzEtMDgtMTYgMDA6MDA6MDgiIGFzX2F1dGhvciBmb29iYXJAZXhhbXBsZS5jb20gc2F2ZV90YWcgYjIgdW5pcXVlX2NvbW1pdCBiMiB0cmVlIC1wIGIxCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDowOSIgc2F2ZV90YWcgYjMgdW5pcXVlX2NvbW1pdCBiMyB0cmVlIC1wIGIyCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxMCIgc2F2ZV90YWcgYzIgdW5pcXVlX2NvbW1pdCBjMiB0cmVlIC1wIGMxIC1wIGIyCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxMSIgc2F2ZV90YWcgYzMgdW5pcXVlX2NvbW1pdCBjMyB0cmVlIC1wIGMyCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxMiIgc2F2ZV90YWcgYTIgdW5pcXVlX2NvbW1pdCBhMiB0cmVlIC1wIGExCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxMyIgc2F2ZV90YWcgYTMgdW5pcXVlX2NvbW1pdCBhMyB0cmVlIC1wIGEyCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxNCIgc2F2ZV90YWcgYjQgdW5pcXVlX2NvbW1pdCBiNCB0cmVlIC1wIGIzIC1wIGEzCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxNSIgc2F2ZV90YWcgYTQgdW5pcXVlX2NvbW1pdCBhNCB0cmVlIC1wIGEzIC1wIGI0IC1wIGMzCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxNiIgc2F2ZV90YWcgbDMgdW5pcXVlX2NvbW1pdCBsMyB0cmVlIC1wIGE0Citvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxNyIgc2F2ZV90YWcgbDQgdW5pcXVlX2NvbW1pdCBsNCB0cmVlIC1wIGwzCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxOCIgc2F2ZV90YWcgbDUgdW5pcXVlX2NvbW1pdCBsNSB0cmVlIC1wIGw0Citvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxOSIgc2F2ZV90YWcgbTEgdW5pcXVlX2NvbW1pdCBtMSB0cmVlIC1wIGE0IC1wIGMzCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoyMCIgc2F2ZV90YWcgbTIgdW5pcXVlX2NvbW1pdCBtMiB0cmVlIC1wIGMzIC1wIGE0Citvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoyMSIgaGlkZV9lcnJvciBzYXZlX3RhZyBhbHRfcm9vdCB1bmlxdWVfY29tbWl0IGFsdF9yb290IHRyZWUKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjIyIiBzYXZlX3RhZyByMCB1bmlxdWVfY29tbWl0IHIwIHRyZWUgLXAgYWx0X3Jvb3QKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjIzIiBzYXZlX3RhZyByMSB1bmlxdWVfY29tbWl0IHIxIHRyZWUgLXAgcjAKK29uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjI0IiBzYXZlX3RhZyBsNXIxIHVuaXF1ZV9jb21taXQgbDVyMSB0cmVlIC1wIGw1IC1wIHIxCitvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoyNSIgc2F2ZV90YWcgcjFsNSB1bmlxdWVfY29tbWl0IHIxbDUgdHJlZSAtcCByMSAtcCBsNQorCisKKyMKKyMgbm90ZTogYXMgb2YgMjAvNiwgaXQgaXNuJ3QgcG9zc2libGUgdG8gY3JlYXRlIGR1cGxpY2F0ZSBwYXJlbnRzLCBzbyB0aGlzCisjIGNhbid0IGJlIHRlc3RlZC4KKyMKKyNvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoyMCIgc2F2ZV90YWcgbTMgdW5pcXVlX2NvbW1pdCBtMyB0cmVlIC1wIGMzIC1wIGE0IC1wIGMzCitoaWRlX2Vycm9yIHNhdmVfdGFnIGUxIGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTEgdHJlZQorc2F2ZV90YWcgZTIgYXNfYXV0aG9yIGVAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBlMiB0cmVlIC1wIGUxCitzYXZlX3RhZyBmMSBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGYxIHRyZWUgLXAgZTEKK3NhdmVfdGFnIGUzIGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTMgdHJlZSAtcCBlMgorc2F2ZV90YWcgZjIgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmMiB0cmVlIC1wIGYxCitzYXZlX3RhZyBlNCBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGU0IHRyZWUgLXAgZTMgLXAgZjIKK3NhdmVfdGFnIGU1IGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTUgdHJlZSAtcCBlNAorc2F2ZV90YWcgZjMgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmMyB0cmVlIC1wIGYyCitzYXZlX3RhZyBmNCBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGY0IHRyZWUgLXAgZjMKK3NhdmVfdGFnIGU2IGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTYgdHJlZSAtcCBlNSAtcCBmNAorc2F2ZV90YWcgZjUgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmNSB0cmVlIC1wIGY0CitzYXZlX3RhZyBmNiBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGY2IHRyZWUgLXAgZjUgLXAgZTYKK3NhdmVfdGFnIGU3IGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTcgdHJlZSAtcCBlNgorc2F2ZV90YWcgZTggYXNfYXV0aG9yIGVAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBlOCB0cmVlIC1wIGU3CitzYXZlX3RhZyBlOSBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGU5IHRyZWUgLXAgZTgKK3NhdmVfdGFnIGY3IGFzX2F1dGhvciBmQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZjcgdHJlZSAtcCBmNgorc2F2ZV90YWcgZjggYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmOCB0cmVlIC1wIGY3CitzYXZlX3RhZyBmOSBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGY5IHRyZWUgLXAgZjgKK3NhdmVfdGFnIGUxMCBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGUxIHRyZWUgLXAgZTkgLXAgZjgKKworaGlkZV9lcnJvciBzYXZlX3RhZyBnMCB1bmlxdWVfY29tbWl0IGcwIHRyZWUKK3NhdmVfdGFnIGcxIHVuaXF1ZV9jb21taXQgZzEgdHJlZSAtcCBnMAorc2F2ZV90YWcgaDEgdW5pcXVlX2NvbW1pdCBnMiB0cmVlIC1wIGcwCitzYXZlX3RhZyBnMiB1bmlxdWVfY29tbWl0IGczIHRyZWUgLXAgZzEgLXAgaDEKK3NhdmVfdGFnIGgyIHVuaXF1ZV9jb21taXQgZzQgdHJlZSAtcCBnMgorc2F2ZV90YWcgZzMgdW5pcXVlX2NvbW1pdCBnNSB0cmVlIC1wIGcyCitzYXZlX3RhZyBnNCB1bmlxdWVfY29tbWl0IGc2IHRyZWUgLXAgZzMgLXAgaDIKKworZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkKHRhZyBsNSkKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IGhhcyBjb3JyZWN0IG51bWJlciBvZiBlbnRyaWVzJyAnZ2l0IHJldi1saXN0IEhFQUQgfCB3YyAtbCB8IHRyIC1kIFwiIFwiJyA8PEVPRgorMTkKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIHRvcG8gb3JkZXInICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBIRUFEJyA8PEVPRgorbDUKK2w0CitsMworYTQKK2MzCitjMgorYzEKK2I0CithMworYTIKK2ExCitiMworYjIKK2IxCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICd0d28gZGlhbW9uZHMgdG9wbyBvcmRlciAoZzYpJyAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgZzQnIDw8RU9GCitnNAoraDIKK2czCitnMgoraDEKK2cxCitnMAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBoZWFkcycgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgYTMgYjMgYzMnIDw8RU9GCithMworYTIKK2ExCitjMworYzIKK2MxCitiMworYjIKK2IxCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBoZWFkcywgcHJ1bmUgYXQgYTEnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGEzIGIzIGMzIF5hMScgPDxFT0YKK2EzCithMgorYzMKK2MyCitjMQorYjMKK2IyCitiMQorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBoZWFkcywgcHJ1bmUgYXQgbDEnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGEzIGIzIGMzIF5sMScgPDxFT0YKK2EzCithMgorYTEKK2MzCitjMgorYzEKK2IzCitiMgorYjEKK2EwCitsMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdjcm9zcy1lcG9jaCwgaGVhZCBhdCBsNSwgcHJ1bmUgYXQgbDEnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGw1IF5sMScgPDxFT0YKK2w1CitsNAorbDMKK2E0CitjMworYzIKK2MxCitiNAorYTMKK2EyCithMQorYjMKK2IyCitiMQorYTAKK2wyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ2R1cGxpY2F0ZWQgaGVhZCBhcmd1bWVudHMnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGw1IGw1IF5sMScgPDxFT0YKK2w1CitsNAorbDMKK2E0CitjMworYzIKK2MxCitiNAorYTMKK2EyCithMQorYjMKK2IyCitiMQorYTAKK2wyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIG5lYXIgdG9wbycgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgYTQgXmMzJyA8PEVPRgorYTQKK2I0CithMworYTIKK2ExCitiMworRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJoZWFkIGhhcyBubyBwYXJlbnQiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICByb290JyA8PEVPRgorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJ0d28gbm9kZXMgLSBvbmUgaGVhZCwgb25lIGJhc2UiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsMCcgPDxFT0YKK2wwCityb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgInRocmVlIG5vZGVzIG9uZSBoZWFkLCBvbmUgaW50ZXJuYWwsIG9uZSBiYXNlIiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgbDEnIDw8RU9GCitsMQorbDAKK3Jvb3QKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAibGluZWFyIHBydW5lIGwyIF5yb290IiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgbDIgXnJvb3QnIDw8RU9GCitsMgorbDEKK2wwCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsMiBebDAiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsMiBebDAnIDw8RU9GCitsMgorbDEKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAibGluZWFyIHBydW5lIGwyIF5sMSIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGwyIF5sMScgPDxFT0YKK2wyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsNSBeYTQiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsNSBeYTQnIDw8RU9GCitsNQorbDQKK2wzCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsNSBebDMiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsNSBebDMnIDw8RU9GCitsNQorbDQKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAibGluZWFyIHBydW5lIGw1IF5sNCIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGw1IF5sNCcgPDxFT0YKK2w1CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIm1heC1jb3VudCAxMCAtIHRvcG8gb3JkZXIiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICAtLW1heC1jb3VudD0xMCBsNScgPDxFT0YKK2w1CitsNAorbDMKK2E0CitjMworYzIKK2MxCitiNAorYTMKK2EyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIm1heC1jb3VudCAxMCAtIG5vbiB0b3BvIG9yZGVyIiAnZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEwIGw1JyA8PEVPRgorbDUKK2w0CitsMworYTQKK2I0CithMworYTIKK2MzCitjMgorYjMKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnLS1tYXgtYWdlPWMzLCBubyAtLXRvcG8tb3JkZXInICJnaXQgcmV2LWxpc3QgLS1tYXgtYWdlPSQoY29tbWl0X2RhdGUgYzMpIGw1IiA8PEVPRgorbDUKK2w0CitsMworYTQKK2I0CithMworYTIKK2MzCitFT0YKKworIworIyB0aGlzIHRlc3QgZmFpbHMgb24gLS10b3BvLW9yZGVyIC0gYSBmaXggaXMgcmVxdWlyZWQKKyMKKyN0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnLS1tYXgtYWdlPWMzLCAtLXRvcG8tb3JkZXInICJnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIC0tbWF4LWFnZT0kKGNvbW1pdF9kYXRlIGMzKSBsNSIgPDxFT0YKKyNsNQorI2w0CisjbDMKKyNhNAorI2MzCisjYjQKKyNhMworI2EyCisjRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdvbmUgc3BlY2lmaWVkIGhlYWQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBhNCwgYzMsIC0tdG9wby1vcmRlcicgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGE0IGMzIiA8PEVPRgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdvbmUgc3BlY2lmaWVkIGhlYWQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBjMywgYTQsIC0tdG9wby1vcmRlcicgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGMzIGE0IiA8PEVPRgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdvbmUgc3BlY2lmaWVkIGhlYWQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBhNCwgYzMsIG5vIC0tdG9wby1vcmRlcicgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgYTQgYzMiIDw8RU9GCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ29uZSBzcGVjaWZpZWQgaGVhZCByZWFjaGFibGUgZnJvbSBhbm90aGVyIGMzLCBhNCwgbm8gLS10b3BvLW9yZGVyJyAibGlzdF9kdXBsaWNhdGVzIGdpdCByZXYtbGlzdCBjMyBhNCIgPDxFT0YKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnZ3JhcGggd2l0aCBjMyBhbmQgYTQgcGFyZW50cyBvZiBoZWFkJyAibGlzdF9kdXBsaWNhdGVzIGdpdCByZXYtbGlzdCBtMSIgPDxFT0YKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnZ3JhcGggd2l0aCBhNCBhbmQgYzMgcGFyZW50cyBvZiBoZWFkJyAibGlzdF9kdXBsaWNhdGVzIGdpdCByZXYtbGlzdCBtMiIgPDxFT0YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWFkIF5oZWFkIC0tdG9wby1vcmRlciIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGEzIF5hMycgPDxFT0YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWFkIF5oZWFkIG5vIC0tdG9wby1vcmRlciIgJ2dpdCByZXYtbGlzdCBhMyBeYTMnIDw8RU9GCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSB0b3BvIG9yZGVyIChsNXIxKScgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGw1cjEnIDw8RU9GCitsNXIxCityMQorcjAKK2FsdF9yb290CitsNQorbDQKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorbDEKK2wwCityb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSB0b3BvIG9yZGVyIChyMWw1KScgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIHIxbDUnIDw8RU9GCityMWw1CitsNQorbDQKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorbDEKK2wwCityb290CityMQorcjAKK2FsdF9yb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImRvbid0IHByaW50IHRoaW5ncyB1bnJlYWNoYWJsZSBmcm9tIG9uZSBicmFuY2giICJnaXQgcmV2LWxpc3QgYTMgXmIzIC0tdG9wby1vcmRlciIgPDxFT0YKK2EzCithMgorYTEKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiLS10b3BvLW9yZGVyIGE0IGwzIiAiZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBhNCBsMyIgPDxFT0YKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorbDEKK2wwCityb290CitFT0YKKworIworIworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDQtcmV2LWxpc3QtcGF0aC1vcHRpbS5zaCBiL3QvdDYwMDQtcmV2LWxpc3QtcGF0aC1vcHRpbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZThjNDJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwNC1yZXYtbGlzdC1wYXRoLW9wdGltLnNoCkBAIC0wLDAgKzEsOTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmV2LWxpc3QgdHJpdmlhbCBwYXRoIG9wdGltaXphdGlvbiB0ZXN0CisKKyAgIGQvejEKKyAgIGIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMQorICAgby0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotLS0tbyBtYXN0ZXIKKyAgLyAgICAgICAgICAgICAgICAgICAgICAgIC8KKyBvLS0tLS0tLS0tby0tLS1vLS0tLW8tLS0tbyBzaWRlCisgYTAgICAgICAgIGMwICAgYzEgICBhMSAgIGMyCisgZC9mMCAgICAgIGQvZjEKKyBkL3owCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gSGVsbG8gPmEgJiYKKwlta2RpciBkICYmCisJZWNobyBXb3JsZCA+ZC9mICYmCisJZWNobyBXb3JsZCA+ZC96ICYmCisJZ2l0IGFkZCBhIGQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgJiYKKwlnaXQgdGFnIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBwYXRoLW9wdGltaXphdGlvbiAnCisJdGVzdF90aWNrICYmCisJY29tbWl0PSQoZWNobyAiVW5jaGFuZ2VkIHRyZWUiIHwgZ2l0IGNvbW1pdC10cmVlICJIRUFEXnt0cmVlfSIgLXAgSEVBRCkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1saXN0ICRjb21taXQgfCB3YyAtbCkgPSAyICYmCisJdGVzdCAkKGdpdCByZXYtbGlzdCAkY29tbWl0IC0tIC4gfCB3YyAtbCkgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1cnRoZXIgc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gSXJyZWxldmFudCA+YyAmJgorCWVjaG8gSXJyZWxldmFudCA+ZC9mICYmCisJZ2l0IGFkZCBjIGQvZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNpZGUgbWFrZXMgYW4gaXJyZWxldmFudCBjb21taXQiICYmCisJZ2l0IHRhZyBzaWRlX2MwICYmCisJZWNobyAiTW9yZSBJcnJlbGV2YW5jeSIgPmMgJiYKKwlnaXQgYWRkIGMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIG1ha2VzIGFub3RoZXIgaXJyZWxldmFudCBjb21taXQiICYmCisJZWNobyBCeWUgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIHRvdWNoZXMgYSIgJiYKKwlnaXQgdGFnIHNpZGVfYTEgJiYKKwllY2hvICJZZXQgbW9yZSBJcnJlbGV2YW5jeSIgPmMgJiYKKwlnaXQgYWRkIGMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIG1ha2VzIHlldCBhbm90aGVyIGlycmVsZXZhbnQgY29tbWl0IiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIEFub3RoZXIgPmIgJiYKKwllY2hvIE11bmdlZCA+ZC96ICYmCisJZ2l0IGFkZCBiIGQveiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk1hc3RlciB0b3VjaGVzIGIiICYmCisJZ2l0IHRhZyBtYXN0ZXJfYjAgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAmJgorCWVjaG8gVG91Y2hlZCA+YiAmJgorCWdpdCBhZGQgYiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk1hc3RlciB0b3VjaGVzIGIgYWdhaW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGggb3B0aW1pemF0aW9uIDInICcKKwlnaXQgcmV2LXBhcnNlIHNpZGVfYTEgaW5pdGlhbCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCAtLSBhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHNwZWMgd2l0aCBsZWFkaW5nIHBhdGgnICcKKwlnaXQgcmV2LXBhcnNlIG1hc3Rlcl4gbWFzdGVyX2IwIHNpZGVfYzAgaW5pdGlhbCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCAtLSBkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHNwZWMgd2l0aCBnbG9iICgxKScgJworCWdpdCByZXYtcGFyc2UgbWFzdGVyXiBtYXN0ZXJfYjAgc2lkZV9jMCBpbml0aWFsID5leHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIC0tICJkLyoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHNwZWMgd2l0aCBnbG9iICgyKScgJworCWdpdCByZXYtcGFyc2Ugc2lkZV9jMCBpbml0aWFsID5leHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIC0tICJkL1thLW1dKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDUtcmV2LWxpc3QtY291bnQuc2ggYi90L3Q2MDA1LXJldi1saXN0LWNvdW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiNjQ4MjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA1LXJldi1saXN0LWNvdW50LnNoCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQgYW5kIC0tc2tpcCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKyAgICBmb3IgbiBpbiAxIDIgMyA0IDUgOyBkbyBcCisgICAgICAgIGVjaG8gJG4gPiBhIDsgXAorICAgICAgICBnaXQgYWRkIGEgOyBcCisgICAgICAgIGdpdCBjb21taXQgLW0gIiRuIiA7IFwKKyAgICBkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIG9wdGlvbnMnICcKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgfCB3YyAtbCkgPSA1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWF4LWNvdW50JyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTAgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTMgfCB3YyAtbCkgPSAzICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTUgfCB3YyAtbCkgPSA1ICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTEwIHwgd2MgLWwpID0gNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1heC1jb3VudCBhbGwgZm9ybXMnICcKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1tYXgtY291bnQ9MSB8IHdjIC1sKSA9IDEgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLTEgfCB3YyAtbCkgPSAxICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC1uMSB8IHdjIC1sKSA9IDEgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLW4gMSB8IHdjIC1sKSA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1za2lwJyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0wIHwgd2MgLWwpID0gNSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyB8IHdjIC1sKSA9IDIgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTUgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0xMCB8IHdjIC1sKSA9IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1za2lwIC0tbWF4LWNvdW50JyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0wIC0tbWF4LWNvdW50PTAgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0wIC0tbWF4LWNvdW50PTEwIHwgd2MgLWwpID0gNSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0wIHwgd2MgLWwpID0gMCAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0xIHwgd2MgLWwpID0gMSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0yIHwgd2MgLWwpID0gMiAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0xMCB8IHdjIC1sKSA9IDIgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTUgLS1tYXgtY291bnQ9MTAgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0xMCAtLW1heC1jb3VudD0xMCB8IHdjIC1sKSA9IDAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaCBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5NGYwYzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaApAQCAtMCwwICsxLDI5MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXYtbGlzdCAtLXByZXR0eT1mb3JtYXQgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfdGljawordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKK3RvdWNoIGZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tICJhZGRlZCBmb28iICYmCisgIGVjaG8gY2hhbmdlZCA+Zm9vICYmIGdpdCBjb21taXQgLWEgLW0gImNoYW5nZWQgZm9vIgorJworCisjIHVzYWdlOiB0ZXN0X2Zvcm1hdCBuYW1lIGZvcm1hdF9zdHJpbmcgPGV4cGVjdGVkX291dHB1dAordGVzdF9mb3JtYXQoKSB7CisJY2F0ID5leHBlY3QuJDEKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmb3JtYXQgJDEiICIKK2dpdCByZXYtbGlzdCAtLXByZXR0eT1mb3JtYXQ6JyQyJyBtYXN0ZXIgPm91dHB1dC4kMSAmJgordGVzdF9jbXAgZXhwZWN0LiQxIG91dHB1dC4kMQorIgorfQorCit0ZXN0X2Zvcm1hdCBwZXJjZW50ICUlaCA8PCdFT0YnCitjb21taXQgMTMxYTMxMGViOTEzZDEwN2RkM2MwOWE2NWQxNjUxMTc1ODk4NzM1ZAorJWgKK2NvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCislaAorRU9GCisKK3Rlc3RfZm9ybWF0IGhhc2ggJUglbiVoIDw8J0VPRicKK2NvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCisxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCisxMzFhMzEwCitjb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworODZjNzVjZgorRU9GCisKK3Rlc3RfZm9ybWF0IHRyZWUgJVQlbiV0IDw8J0VPRicKK2NvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCitmZTcyMjYxMmYyNmRhNTA2NGMzMmNhMzg0M2FhMTU0YmRiMGIwOGEwCitmZTcyMjYxCitjb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworNGQ1ZmNhZGMyOTNhMzQ4ZTg4Zjc3N2RjMDkyMGYxMWU3ZDcxNDQxYworNGQ1ZmNhZAorRU9GCisKK3Rlc3RfZm9ybWF0IHBhcmVudHMgJVAlbiVwIDw8J0VPRicKK2NvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCis4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCis4NmM3NWNmCitjb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworCisKK0VPRgorCisjIHdlIGRvbid0IHRlc3QgcmVsYXRpdmUgaGVyZQordGVzdF9mb3JtYXQgYXV0aG9yICVhbiVuJWFlJW4lYWQlbiVhRCVuJWF0IDw8J0VPRicKK2NvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCitBIFUgVGhvcgorYXV0aG9yQGV4YW1wbGUuY29tCitUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAorVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCisxMTEyOTExOTkzCitjb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworQSBVIFRob3IKK2F1dGhvckBleGFtcGxlLmNvbQorVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAKK1RodSwgNyBBcHIgMjAwNSAxNToxMzoxMyAtMDcwMAorMTExMjkxMTk5MworRU9GCisKK3Rlc3RfZm9ybWF0IGNvbW1pdHRlciAlY24lbiVjZSVuJWNkJW4lY0QlbiVjdCA8PCdFT0YnCitjb21taXQgMTMxYTMxMGViOTEzZDEwN2RkM2MwOWE2NWQxNjUxMTc1ODk4NzM1ZAorQyBPIE1pdHRlcgorY29tbWl0dGVyQGV4YW1wbGUuY29tCitUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAorVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCisxMTEyOTExOTkzCitjb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworQyBPIE1pdHRlcgorY29tbWl0dGVyQGV4YW1wbGUuY29tCitUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAorVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCisxMTEyOTExOTkzCitFT0YKKwordGVzdF9mb3JtYXQgZW5jb2RpbmcgJWUgPDwnRU9GJworY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKK2NvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCitFT0YKKwordGVzdF9mb3JtYXQgc3ViamVjdCAlcyA8PCdFT0YnCitjb21taXQgMTMxYTMxMGViOTEzZDEwN2RkM2MwOWE2NWQxNjUxMTc1ODk4NzM1ZAorY2hhbmdlZCBmb28KK2NvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCithZGRlZCBmb28KK0VPRgorCit0ZXN0X2Zvcm1hdCBib2R5ICViIDw8J0VPRicKK2NvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCitjb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworRU9GCisKK3Rlc3RfZm9ybWF0IHJhdy1ib2R5ICVCIDw8J0VPRicKK2NvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCitjaGFuZ2VkIGZvbworCitjb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworYWRkZWQgZm9vCisKK0VPRgorCit0ZXN0X2Zvcm1hdCBjb2xvcnMgJUNyZWRmb28lQ2dyZWVuYmFyJUNibHVlYmF6JUNyZXNldHh5enp5IDw8J0VPRicKK2NvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCisbWzMxbWZvbxtbMzJtYmFyG1szNG1iYXobW214eXp6eQorY29tbWl0IDg2Yzc1Y2ZkNzA4YTBlNTg2OGRjODc2ZWQ1YjhiYjY2YzgwYjQ4NzMKKxtbMzFtZm9vG1szMm1iYXIbWzM0bWJhehtbbXh5enp5CitFT0YKKwordGVzdF9mb3JtYXQgYWR2YW5jZWQtY29sb3JzICclQyhyZWQgeWVsbG93IGJvbGQpZm9vJUMocmVzZXQpJyA8PCdFT0YnCitjb21taXQgMTMxYTMxMGViOTEzZDEwN2RkM2MwOWE2NWQxNjUxMTc1ODk4NzM1ZAorG1sxOzMxOzQzbWZvbxtbbQorY29tbWl0IDg2Yzc1Y2ZkNzA4YTBlNTg2OGRjODc2ZWQ1YjhiYjY2YzgwYjQ4NzMKKxtbMTszMTs0M21mb28bW20KK0VPRgorCitjYXQgPmNvbW1pdC1tc2cgPDwnRU9GJworVGVzdCBwcmludGluZyBvZiBjb21wbGV4IGJvZGllcworCitUaGlzIGNvbW1pdCBtZXNzYWdlIGlzIG11Y2ggbG9uZ2VyIHRoYW4gdGhlIG90aGVycywKK2FuZCBpdCB3aWxsIGJlIGVuY29kZWQgaW4gaXNvODg1OS0xLiBXZSBzaG91bGQgdGhlcmVmb3JlCitpbmNsdWRlIGFuIGlzbzg4NTkgY2hhcmFjdGVyOiDCoWJ1ZW5vIQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21wbGV4IGJvZHknICcKK2dpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBpc284ODU5LTEgJiYKKyAgZWNobyBjaGFuZ2UyID5mb28gJiYgZ2l0IGNvbW1pdCAtYSAtRiBjb21taXQtbXNnCisnCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtZW5jb2RpbmcgJWUgPDwnRU9GJworY29tbWl0IGY1OGRiNzBiMDU1YzU3MTg2MzFlNWM2MTUyOGIyOGIxMjA5MGNkZWEKK2lzbzg4NTktMQorY29tbWl0IDEzMWEzMTBlYjkxM2QxMDdkZDNjMDlhNjVkMTY1MTE3NTg5ODczNWQKK2NvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCitFT0YKKwordGVzdF9mb3JtYXQgY29tcGxleC1zdWJqZWN0ICVzIDw8J0VPRicKK2NvbW1pdCBmNThkYjcwYjA1NWM1NzE4NjMxZTVjNjE1MjhiMjhiMTIwOTBjZGVhCitUZXN0IHByaW50aW5nIG9mIGNvbXBsZXggYm9kaWVzCitjb21taXQgMTMxYTMxMGViOTEzZDEwN2RkM2MwOWE2NWQxNjUxMTc1ODk4NzM1ZAorY2hhbmdlZCBmb28KK2NvbW1pdCA4NmM3NWNmZDcwOGEwZTU4NjhkYzg3NmVkNWI4YmI2NmM4MGI0ODczCithZGRlZCBmb28KK0VPRgorCit0ZXN0X2Zvcm1hdCBjb21wbGV4LWJvZHkgJWIgPDwnRU9GJworY29tbWl0IGY1OGRiNzBiMDU1YzU3MTg2MzFlNWM2MTUyOGIyOGIxMjA5MGNkZWEKK1RoaXMgY29tbWl0IG1lc3NhZ2UgaXMgbXVjaCBsb25nZXIgdGhhbiB0aGUgb3RoZXJzLAorYW5kIGl0IHdpbGwgYmUgZW5jb2RlZCBpbiBpc284ODU5LTEuIFdlIHNob3VsZCB0aGVyZWZvcmUKK2luY2x1ZGUgYW4gaXNvODg1OSBjaGFyYWN0ZXI6IMKhYnVlbm8hCisKK2NvbW1pdCAxMzFhMzEwZWI5MTNkMTA3ZGQzYzA5YTY1ZDE2NTExNzU4OTg3MzVkCitjb21taXQgODZjNzVjZmQ3MDhhMGU1ODY4ZGM4NzZlZDViOGJiNjZjODBiNDg3MworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyV4MDAgc2hvd3MgTlVMJyAnCisJZWNobyAgPmV4cGVjdCBjb21taXQgZjU4ZGI3MGIwNTVjNTcxODYzMWU1YzYxNTI4YjI4YjEyMDkwY2RlYSAmJgorCWVjaG8gPj5leHBlY3QgZm9vUWJhciAmJgorCWdpdCByZXYtbGlzdCAtMSAtLWZvcm1hdD1mb28leDAwYmFyIEhFQUQgPmFjdHVhbC5udWwgJiYKKwludWxfdG9fcSA8YWN0dWFsLm51bCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclYWQgcmVzcGVjdHMgLS1kYXRlPScgJworCWVjaG8gMjAwNS0wNC0wNyA+ZXhwZWN0LmFkLXNob3J0ICYmCisJZ2l0IGxvZyAtMSAtLWRhdGU9c2hvcnQgLS1wcmV0dHk9dGZvcm1hdDolYWQgPm91dHB1dC5hZC1zaG9ydCBtYXN0ZXIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYWQtc2hvcnQgb3V0cHV0LmFkLXNob3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGVtYWlsJyAnCisJdGVzdF90aWNrICYmCisJQz0kKEdJVF9BVVRIT1JfRU1BSUw9IGdpdCBjb21taXQtdHJlZSBIRUFEXnt0cmVlfSA8L2Rldi9udWxsKSAmJgorCUE9JChnaXQgc2hvdyAtLXByZXR0eT1mb3JtYXQ6JWFuLCVhZSwlYWQlbiAtcyAkQykgJiYKKwl0ZXN0ICIkQSIgPSAiQSBVIFRob3IsLFRodSBBcHIgNyAxNToxNDoxMyAyMDA1IC0wNzAwIiB8fCB7CisJCWVjaG8gIkVoPyAkQSIgPmZhaWx1cmUKKwkJZmFsc2UKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbCBMRiBiZWZvcmUgZW1wdHkgKDEpJyAnCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiIlcyVuJS1iJW5UaGFua3MlbiIgSEVBRF5eID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWwgTEYgYmVmb3JlIGVtcHR5ICgyKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlbiUtYiVuVGhhbmtzJW4iIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDYgYWN0dWFsICYmCisJZ3JlcCAiXiQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgTEYgYmVmb3JlIG5vbi1lbXB0eSAoMSknICcKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzJStiJW5UaGFua3MlbiIgSEVBRF5eID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgTEYgYmVmb3JlIG5vbi1lbXB0eSAoMiknICcKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzJStiJW5UaGFua3MlbiIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNiBhY3R1YWwgJiYKKwlncmVwICJeJCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBTUCBiZWZvcmUgbm9uLWVtcHR5ICgxKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlIGJUaGFua3MiIEhFQUReXiA+YWN0dWFsICYmCisJdGVzdCAkKHdjIC13IDxhY3R1YWwpID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgU1AgYmVmb3JlIG5vbi1lbXB0eSAoMiknICcKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzJSBzVGhhbmtzIiBIRUFEXl4gPmFjdHVhbCAmJgorCXRlc3QgJCh3YyAtdyA8YWN0dWFsKSA9IDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYmJyZXYnICcKKwllY2hvIFNIT1JUIFNIT1JUIFNIT1JUID5leHBlY3QyICYmCisJZWNobyBMT05HIExPTkcgTE9ORyA+ZXhwZWN0MyAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoICVoICVoIiBIRUFEID5hY3R1YWwxICYmCisJZ2l0IGxvZyAtMSAtLWFiYnJldj01IC0tZm9ybWF0PSIlaCAlaCAlaCIgSEVBRCA+YWN0dWFsMiAmJgorCWdpdCBsb2cgLTEgLS1hYmJyZXY9NSAtLWZvcm1hdD0iJUggJUggJUgiIEhFQUQgPmFjdHVhbDMgJiYKKwlzZWQgLWUgInMvJF94NDAvTE9ORy9nIiAtZSAicy8kX3gwNS9TSE9SVC9nIiA8YWN0dWFsMiA+ZnV6enkyICYmCisJc2VkIC1lICJzLyRfeDQwL0xPTkcvZyIgLWUgInMvJF94MDUvU0hPUlQvZyIgPGFjdHVhbDMgPmZ1enp5MyAmJgorCXRlc3RfY21wIGV4cGVjdDIgZnV6enkyICYmCisJdGVzdF9jbXAgZXhwZWN0MyBmdXp6eTMgJiYKKwkhIHRlc3RfY21wIGFjdHVhbDEgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclSCBpcyBub3QgYWZmZWN0ZWQgYnkgLS1hYmJyZXYtY29tbWl0JyAnCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lSCAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9MjAgSEVBRCA+YWN0dWFsICYmCisJbGVuPSQod2MgLWMgPGFjdHVhbCkgJiYKKwl0ZXN0ICRsZW4gPSA0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclaCBpcyBub3QgYWZmZWN0ZWQgYnkgLS1hYmJyZXYtY29tbWl0JyAnCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0laCAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9MjAgSEVBRCA+YWN0dWFsICYmCisJbGVuPSQod2MgLWMgPGFjdHVhbCkgJiYKKwl0ZXN0ICRsZW4gPSAyMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciJWggJWdEOiAlZ3MiIGlzIHNhbWUgYXMgZ2l0LXJlZmxvZycgJworCWdpdCByZWZsb2cgPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVoICVnRDogJWdzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciJWggJWdEOiAlZ3MiIGlzIHNhbWUgYXMgZ2l0LXJlZmxvZyAod2l0aCBkYXRlKScgJworCWdpdCByZWZsb2cgLS1kYXRlPXJhdyA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWggJWdEOiAlZ3MiIC0tZGF0ZT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIiVoICVnRDogJWdzIiBpcyBzYW1lIGFzIGdpdC1yZWZsb2cgKHdpdGggLS1hYmJyZXYpJyAnCisJZ2l0IHJlZmxvZyAtLWFiYnJldj0xMyAtLWRhdGU9cmF3ID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tYWJicmV2PTEzIC0tZm9ybWF0PSIlaCAlZ0Q6ICVncyIgLS1kYXRlPXJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclZ2Qgc2hvcnRlbnMgcmVmIG5hbWUnICcKKwllY2hvICJtYXN0ZXJAezB9IiA+ZXhwZWN0LmdkLXNob3J0ICYmCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbC5nZC1zaG9ydCAmJgorCXRlc3RfY21wIGV4cGVjdC5nZC1zaG9ydCBhY3R1YWwuZ2Qtc2hvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIGlkZW50aXR5JyAnCisJZWNobyAiQyBPIE1pdHRlcjpjb21taXR0ZXJAZXhhbXBsZS5jb20iID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0xIC0tZm9ybWF0PSIlZ246JWdlIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmVsaW5lIHdpdGggZW1wdHkgbWVzc2FnZScgJworCWdpdCBjb21taXQgLW0gImR1bW15IiAtLWFsbG93LWVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSAiZHVtbXkiIC0tYWxsb3ctZW1wdHkgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtLW1zZy1maWx0ZXIgInNlZCAtZSBzL2R1bW15Ly8iIEhFQUReXi4uICYmCisJZ2l0IHJldi1saXN0IC0tb25lbGluZSBIRUFEID50ZXN0LnR4dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgdGVzdC50eHQgJiYKKwlnaXQgcmV2LWxpc3QgLS1vbmVsaW5lIC0tZ3JhcGggSEVBRCA+dGVzdGcudHh0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSB0ZXN0Zy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlLWNoYXJhY3RlciBuYW1lIGlzIHBhcnNlZCBjb3JyZWN0bHknICcKKwlnaXQgY29tbWl0IC0tYXV0aG9yPSJhIDxhQGV4YW1wbGUuY29tPiIgLS1hbGxvdy1lbXB0eSAtbSBmb28gJiYKKwllY2hvICJhIDxhQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVhbiA8JWFlPiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA3LXJldi1saXN0LWNoZXJyeS1waWNrLWZpbGUuc2ggYi90L3Q2MDA3LXJldi1saXN0LWNoZXJyeS1waWNrLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjhkNGY2YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDctcmV2LWxpc3QtY2hlcnJ5LXBpY2stZmlsZS5zaApAQCAtMCwwICsxLDIxMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHJldi1saXN0IC0tY2hlcnJ5LXBpY2sgLS0gZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgQS0tLUItLS1ELS0tRgorIyAgXAorIyAgIFwKKyMgICAgQy0tLUUKKyMKKyMgQiBjaGFuZ2VzIGEgZmlsZSBmb28uYywgYWRkaW5nIGEgbGluZSBvZiB0ZXh0LiAgQyBjaGFuZ2VzIGZvby5jIGFzCisjIHdlbGwgYXMgYmFyLmMsIGJ1dCB0aGUgY2hhbmdlIGluIGZvby5jIHdhcyBpZGVudGljYWwgdG8gY2hhbmdlIEIuCisjIEQgYW5kIEMgY2hhbmdlIGJhciBpbiB0aGUgc2FtZSB3YXksIEUgYW5kIEYgZGlmZmVyZW50bHkuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gSGFsbG8gPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkEiICYmCisJZ2l0IHRhZyBBICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCWVjaG8gQmVsbG8gPiBmb28gJiYKKwllY2hvIENlbGxvID4gYmFyICYmCisJZ2l0IGFkZCBmb28gYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiQyIgJiYKKwlnaXQgdGFnIEMgJiYKKwllY2hvIERlbGxvID4gYmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJFIiAmJgorCWdpdCB0YWcgRSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgYnJhbmNoIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkIiICYmCisJZ2l0IHRhZyBCICYmCisJZWNobyBDZWxsbyA+IGJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiRCIgJiYKKwlnaXQgdGFnIEQgJiYKKwllY2hvIE5lbGxvID4gYmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJGIiAmJgorCWdpdCB0YWcgRgorJworCitjYXQgPmV4cGVjdCA8PEVPRgorPHRhZ3MvQgorPnRhZ3MvQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbGVmdC1yaWdodCcgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgQi4uLkMgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBhY3R1YWwubmFtZWQgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY291bnQnICcKKwlnaXQgcmV2LWxpc3QgLS1jb3VudCBCLi4uQyA+IGFjdHVhbCAmJgorCXRlc3QgIiQoY2F0IGFjdHVhbCkiID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1waWNrIGZvbyBjb21lcyB1cCBlbXB0eScgJworCXRlc3QgLXogIiQoZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIEIuLi5DIC0tIGZvbykiCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCis+dGFncy9DCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktcGljayBiYXIgZG9lcyBub3QgY29tZSB1cCBlbXB0eScgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBCLi4uQyAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBhY3R1YWwubmFtZWQgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhciBkb2VzIG5vdCBjb21lIHVwIGVtcHR5JyAnCisJZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCBCLi4uQyAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBhY3R1YWwubmFtZWQgZXhwZWN0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCis8dGFncy9GCis+dGFncy9FCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktcGljayBiYXIgZG9lcyBub3QgY29tZSB1cCBlbXB0eSAoSUkpJyAnCisJZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgXAorCQk8IGFjdHVhbCA+IGFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGFjdHVhbC5uYW1lZCBleHBlY3QKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyt0YWdzL0YKKz10YWdzL0QKKyt0YWdzL0UKKz10YWdzL0MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1tYXJrJyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LW1hcmsgRi4uLkUgLS0gYmFyID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgYWN0dWFsLm5hbWVkIGV4cGVjdAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorPHRhZ3MvRgorPXRhZ3MvRAorPnRhZ3MvRQorPXRhZ3MvQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LW1hcmsgLS1sZWZ0LXJpZ2h0JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LW1hcmsgLS1sZWZ0LXJpZ2h0IEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgXAorCQk8IGFjdHVhbCA+IGFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGFjdHVhbC5uYW1lZCBleHBlY3QKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK3RhZ3MvRQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LXBpY2sgLS1yaWdodC1vbmx5JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LXBpY2sgLS1yaWdodC1vbmx5IEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgXAorCQk8IGFjdHVhbCA+IGFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGFjdHVhbC5uYW1lZCBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktcGljayAtLWxlZnQtb25seScgJworCWdpdCByZXYtbGlzdCAtLWNoZXJyeS1waWNrIC0tbGVmdC1vbmx5IEUuLi5GIC0tIGJhciA+IGFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgXAorCQk8IGFjdHVhbCA+IGFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGFjdHVhbC5uYW1lZCBleHBlY3QKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyt0YWdzL0UKKz10YWdzL0MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeScgJworCWdpdCByZXYtbGlzdCAtLWNoZXJyeSBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBhY3R1YWwubmFtZWQgZXhwZWN0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisxCTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeSAtLWNvdW50JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5IC0tY291bnQgRi4uLkUgLS0gYmFyID4gYWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorMgkyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktbWFyayAtLWNvdW50JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LW1hcmsgLS1jb3VudCBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisxCTEJMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LW1hcmsgLS1sZWZ0LXJpZ2h0IC0tY291bnQnICcKKwlnaXQgcmV2LWxpc3QgLS1jaGVycnktbWFyayAtLWxlZnQtcmlnaHQgLS1jb3VudCBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LXBpY2sgd2l0aCBpbmRlcGVuZGVudCwgYnV0IGlkZW50aWNhbCBicmFuY2hlcycgJworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL2luZGVwZW5kZW50ICYmCisJcm0gLmdpdC9pbmRleCAmJgorCWVjaG8gSGFsbG8gPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImluZGVwZW5kZW50IiAmJgorCWVjaG8gQmVsbG8gPiBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJpbmRlcGVuZGVudCwgdG9vIiBmb28gJiYKKwl0ZXN0IC16ICIkKGdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBcCisJCUhFQUQuLi5tYXN0ZXIgLS0gZm9vKSIKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzEJMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY291bnQgLS1sZWZ0LXJpZ2h0JyAnCisJZ2l0IHJldi1saXN0IC0tY291bnQgLS1sZWZ0LXJpZ2h0IEMuLi5EID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDgtcmV2LWxpc3Qtc3VibW9kdWxlLnNoIGIvdC90NjAwOC1yZXYtbGlzdC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzRhZjljYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDgtcmV2LWxpc3Qtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmV2LWxpc3QgaW52b2x2aW5nIHN1Ym1vZHVsZXMgdGhhdCB0aGlzIHJlcG8gaGFzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwk6ID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gMSA+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCBmaWxlICYmCisJZWNobyAyID4gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgZmlsZSAmJgorCisJcm0gLmdpdC9pbmRleCAmJgorCisJOiA+IHN1cGVyLWZpbGUgJiYKKwlnaXQgYWRkIHN1cGVyLWZpbGUgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAiJChwd2QpIiBzdWIgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9zdXBlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc3VwZXItaW5pdGlhbCAmJgorCWVjaG8gMSA+IHN1cGVyLWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN1cGVyLWZpcnN0IHN1cGVyLWZpbGUgJiYKKwllY2hvIDIgPiBzdXBlci1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzdXBlci1zZWNvbmQgc3VwZXItZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJJbGFyaSdzIHRlc3QiICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIHN1cGVyIG1hc3RlciBec3VwZXJeCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwOS1yZXYtbGlzdC1wYXJlbnQuc2ggYi90L3Q2MDA5LXJldi1saXN0LXBhcmVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDUwNzQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwOS1yZXYtbGlzdC1wYXJlbnQuc2gKQEAgLTAsMCArMSwxMzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhbmNlc3RvciBjdWxsaW5nIGFuZCBsaW1pdGluZyBieSBwYXJlbnQgbnVtYmVyJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfcmV2bGlzdCAoKSB7CisJcmV2X2xpc3RfYXJncz0iJDEiICYmCisJc2hpZnQgJiYKKwlnaXQgcmV2LXBhcnNlICIkQCIgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAkcmV2X2xpc3RfYXJncyAtLWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCXRvdWNoIGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKworCXRlc3RfY29tbWl0IG9uZSAmJgorCisJdGVzdF90aWNrPSQoKCR0ZXN0X3RpY2sgLSAyNDAwKSkgJiYKKworCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJdGVzdF9jb21taXQgZm91ciAmJgorCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmUgaXMgYW5jZXN0b3Igb2Ygb3RoZXJzIGFuZCBzaG91bGQgbm90IGJlIHNob3duJyAnCisKKwlnaXQgcmV2LWxpc3Qgb25lIC0tbm90IGZvdXIgPnJlc3VsdCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmVzdWx0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcm9vdHMsIG1lcmdlcyBhbmQgb2N0b3B1c2VzJyAnCisKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3cm9vdCAmJgorCXRlc3RfY29tbWl0IGZpdmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZWJyYW5jaCB0d28gJiYKKwl0ZXN0X2NvbW1pdCBzaXggJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlcmJyYW5jaCB0aHJlZSAmJgorCXRlc3RfY29tbWl0IHNldmVuICYmCisJZ2l0IGNoZWNrb3V0IC1iIHlldGFub3RoZXJicmFuY2ggZm91ciAmJgorCXRlc3RfY29tbWl0IGVpZ2h0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbWVyZ2Ugbm9ybWFsbWVyZ2UgbmV3cm9vdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtbSB0cmlwdXMgc2lkZWJyYW5jaCBhbm90aGVyYnJhbmNoICYmCisJZ2l0IHRhZyB0cmlwdXMgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGV0cmFicmFuY2ggbm9ybWFsbWVyZ2UgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gdGV0cmFwdXMgc2lkZWJyYW5jaCBhbm90aGVyYnJhbmNoIHlldGFub3RoZXJicmFuY2ggJiYKKwlnaXQgdGFnIHRldHJhcHVzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCByb290cycgJworCisJY2hlY2tfcmV2bGlzdCAiLS1tYXgtcGFyZW50cz0wIiBvbmUgZml2ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBubyBtZXJnZXMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWF4LXBhcmVudHM9MSIgb25lIGVpZ2h0IHNldmVuIHNpeCBmaXZlIGZvdXIgdGhyZWUgdHdvICYmCisJY2hlY2tfcmV2bGlzdCAiLS1uby1tZXJnZXMiIG9uZSBlaWdodCBzZXZlbiBzaXggZml2ZSBmb3VyIHRocmVlIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBubyBvY3RvcHVzZXMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWF4LXBhcmVudHM9MiIgb25lIG5vcm1hbG1lcmdlIGVpZ2h0IHNldmVuIHNpeCBmaXZlIGZvdXIgdGhyZWUgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG5vIHJvb3RzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTEiIHRldHJhcHVzIHRyaXB1cyBub3JtYWxtZXJnZSBlaWdodCBzZXZlbiBzaXggZm91ciB0aHJlZSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgbWVyZ2VzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTIiIHRldHJhcHVzIHRyaXB1cyBub3JtYWxtZXJnZSAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWVyZ2VzIiB0ZXRyYXB1cyB0cmlwdXMgbm9ybWFsbWVyZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgb2N0b3B1cycgJworCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0zIiB0ZXRyYXB1cyB0cmlwdXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgb3JkaW5hcnkgY29tbWl0cycgJworCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0xIC0tbWF4LXBhcmVudHM9MSIgZWlnaHQgc2V2ZW4gc2l4IGZvdXIgdGhyZWUgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tbWVyZ2VzIC0tbm8tbWVyZ2VzIHlpZWxkcyBlbXB0eSBzZXQnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MiAtLW5vLW1lcmdlcyIgJiYKKwljaGVja19yZXZsaXN0ICItLW1lcmdlcyAtLW5vLW1lcmdlcyIgJiYKKwljaGVja19yZXZsaXN0ICItLW5vLW1lcmdlcyAtLW1lcmdlcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgb3ZlcnJpZGUgYW5kIGluZmluaXRpZXMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MiAtLW1heC1wYXJlbnRzPTEgLS1tYXgtcGFyZW50cz0zIiB0cmlwdXMgbm9ybWFsbWVyZ2UgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTEgLS1taW4tcGFyZW50cz0yIC0tbWF4LXBhcmVudHM9NyIgdGV0cmFwdXMgdHJpcHVzIG5vcm1hbG1lcmdlICYmCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0yIC0tbWF4LXBhcmVudHM9OCIgdGV0cmFwdXMgdHJpcHVzIG5vcm1hbG1lcmdlICYmCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0yIC0tbWF4LXBhcmVudHM9LTEiIHRldHJhcHVzIHRyaXB1cyBub3JtYWxtZXJnZSAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MiAtLW5vLW1heC1wYXJlbnRzIiB0ZXRyYXB1cyB0cmlwdXMgbm9ybWFsbWVyZ2UgJiYKKwljaGVja19yZXZsaXN0ICItLW1heC1wYXJlbnRzPTAgLS1taW4tcGFyZW50cz0xIC0tbm8tbWluLXBhcmVudHMiIG9uZSBmaXZlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvZGVjYXB1cycgJworCisJcm9vdHM9ICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEKKwlkbworCQlnaXQgY2hlY2tvdXQgLWIgcm9vdCRpIGZpdmUgJiYKKwkJdGVzdF9jb21taXQgJGkgJiYKKwkJcm9vdHM9IiRyb290cyByb290JGkiIHx8CisJCXJldHVybgorCWRvbmUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tIGRvZGVjYXB1cyAkcm9vdHMgJiYKKwlnaXQgdGFnIGRvZGVjYXB1cyAmJgorCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz00IiBkb2RlY2FwdXMgdGV0cmFwdXMgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTgiIGRvZGVjYXB1cyAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MTIiIGRvZGVjYXB1cyAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MTMiICYmCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz00IC0tbWF4LXBhcmVudHM9MTEiIHRldHJhcHVzCisnCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTAtbWVyZ2UtYmFzZS5zaCBiL3QvdDYwMTAtbWVyZ2UtYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mODBiYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxMC1tZXJnZS1iYXNlLnNoCkBAIC0wLDAgKzEsMjMzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J01lcmdlIGJhc2UgYW5kIHBhcmVudCBsaXN0IGNvbXB1dGF0aW9uLgorJworCisuIC4vdGVzdC1saWIuc2gKKworTT0xMTMwMDAwMDAwCitaPSswMDAwCisKK0dJVF9DT01NSVRURVJfRU1BSUw9Z2l0QGNvbW0uaXRlci54egorR0lUX0NPTU1JVFRFUl9OQU1FPSdDIE8gTW1pdGVyJworR0lUX0FVVEhPUl9OQU1FPSdBIFUgVGhvcicKK0dJVF9BVVRIT1JfRU1BSUw9Z2l0QGF1LnRob3IueHoKK2V4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMIEdJVF9DT01NSVRURVJfTkFNRSBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTAorCitkb2l0ICgpIHsKKwlPRkZTRVQ9JDEgJiYKKwlOQU1FPSQyICYmCisJc2hpZnQgMiAmJgorCisJUEFSRU5UUz0gJiYKKwlmb3IgUAorCWRvCisJCVBBUkVOVFM9IiR7UEFSRU5UU30tcCAkUCAiCisJZG9uZSAmJgorCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIkKCgkTSArICRPRkZTRVQpKSAkWiIgJiYKKwlHSVRfQVVUSE9SX0RBVEU9JEdJVF9DT01NSVRURVJfREFURSAmJgorCWV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUgR0lUX0FVVEhPUl9EQVRFICYmCisKKwljb21taXQ9JChlY2hvICROQU1FIHwgZ2l0IGNvbW1pdC10cmVlICRUICRQQVJFTlRTKSAmJgorCisJZWNobyAkY29tbWl0ID4uZ2l0L3JlZnMvdGFncy8kTkFNRSAmJgorCWVjaG8gJGNvbW1pdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCVQ9JChnaXQgbWt0cmVlIDwvZGV2L251bGwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBHIGFuZCBIJyAnCisJIyBFLS0tRC0tLUMtLS1CLS0tQQorCSMgXCItXyAgICAgICAgIFwgICBcCisJIyAgXCAgYC0tLS0tLS0tLUcgICBcCisJIyAgIFwgICAgICAgICAgICAgICAgXAorCSMgICAgRi0tLS0tLS0tLS0tLS0tLS1ICisJRT0kKGRvaXQgNSBFKSAmJgorCUQ9JChkb2l0IDQgRCAkRSkgJiYKKwlGPSQoZG9pdCA2IEYgJEUpICYmCisJQz0kKGRvaXQgMyBDICREKSAmJgorCUI9JChkb2l0IDIgQiAkQykgJiYKKwlBPSQoZG9pdCAxIEEgJEIpICYmCisJRz0kKGRvaXQgNyBHICRCICRFKSAmJgorCUg9JChkb2l0IDggSCAkQSAkRikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtYmFzZSBHIEgnICcKKwlnaXQgbmFtZS1yZXYgJEIgPmV4cGVjdGVkICYmCisKKwlNQj0kKGdpdCBtZXJnZS1iYXNlIEcgSCkgJiYKKwlnaXQgbmFtZS1yZXYgIiRNQiIgPmFjdHVhbC5zaW5nbGUgJiYKKworCU1CPSQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgRyBIKSAmJgorCWdpdCBuYW1lLXJldiAiJE1CIiA+YWN0dWFsLmFsbCAmJgorCisJTUI9JChnaXQgc2hvdy1icmFuY2ggLS1tZXJnZS1iYXNlIEcgSCkgJiYKKwlnaXQgbmFtZS1yZXYgIiRNQiIgPmFjdHVhbC5zYiAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLnNpbmdsZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5hbGwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwuc2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtYmFzZS9zaG93LWJyYW5jaCAtLWluZGVwZW5kZW50JyAnCisJZ2l0IG5hbWUtcmV2ICIkSCIgPmV4cGVjdGVkMSAmJgorCWdpdCBuYW1lLXJldiAiJEgiICIkRyIgPmV4cGVjdGVkMiAmJgorCisJcGFyZW50cz0kKGdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgSCkgJiYKKwlnaXQgbmFtZS1yZXYgJHBhcmVudHMgPmFjdHVhbDEubWIgJiYKKwlwYXJlbnRzPSQoZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCBBIEggRykgJiYKKwlnaXQgbmFtZS1yZXYgJHBhcmVudHMgPmFjdHVhbDIubWIgJiYKKworCXBhcmVudHM9JChnaXQgc2hvdy1icmFuY2ggLS1pbmRlcGVuZGVudCBIKSAmJgorCWdpdCBuYW1lLXJldiAkcGFyZW50cyA+YWN0dWFsMS5zYiAmJgorCXBhcmVudHM9JChnaXQgc2hvdy1icmFuY2ggLS1pbmRlcGVuZGVudCBBIEggRykgJiYKKwlnaXQgbmFtZS1yZXYgJHBhcmVudHMgPmFjdHVhbDIuc2IgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkMSBhY3R1YWwxLm1iICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQyIGFjdHVhbDIubWIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDEgYWN0dWFsMS5zYiAmJgorCXRlc3RfY21wIGV4cGVjdGVkMiBhY3R1YWwyLnNiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3luY2hyb25pemVkIGNsb2NrcycgJworCSMgVGhpcyB0ZXN0IGlzIHRvIGRlbW9uc3RyYXRlIHRoYXQgcmVseWluZyBvbiB0aW1lc3RhbXBzIGluIGEgZGlzdHJpYnV0ZWQKKwkjIFNDTSB0byBwcm92aWRlIGEgX2NvbnNpc3RlbnRfIHBhcnRpYWwgb3JkZXJpbmcgb2YgY29tbWl0cyBsZWFkcyB0bworCSMgaW5zYW5pdHkuCisJIworCSMgICAgICAgICAgICAgICBSZWxhdGl2ZQorCSMgU3RydWN0dXJlICAgICB0aW1lc3RhbXBzCisJIworCSMgICBQTCAgUFIgICAgICAgICs0ICArNAorCSMgIC8gIFwvICBcICAgICAgLyAgXC8gIFwKKwkjIEwyICBDMiAgUjIgICAgKzMgIC0xICArMworCSMgfCAgIHwgICB8ICAgICB8ICAgfCAgIHwKKwkjIEwxICBDMSAgUjEgICAgKzIgIC0yICArMgorCSMgfCAgIHwgICB8ICAgICB8ICAgfCAgIHwKKwkjIEwwICBDMCAgUjAgICAgKzEgIC0zICArMQorCSMgICBcIHwgIC8gICAgICAgIFwgfCAgLworCSMgICAgIFMgICAgICAgICAgICAgMAorCSMKKwkjIFRoZSBsZWZ0IGFuZCByaWdodCBjaGFpbnMgb2YgY29tbWl0cyBjYW4gYmUgb2YgYW55IGxlbmd0aCBhbmQgY29tcGxleGl0eSBhcworCSMgbG9uZyBhcyBhbGwgb2YgdGhlIHRpbWVzdGFtcHMgYXJlIGdyZWF0ZXIgdGhhbiB0aGF0IG9mIFMuCisKKwlTPSQoZG9pdCAgMCBTKSAmJgorCisJQzA9JChkb2l0IC0zIEMwICRTKSAmJgorCUMxPSQoZG9pdCAtMiBDMSAkQzApICYmCisJQzI9JChkb2l0IC0xIEMyICRDMSkgJiYKKworCUwwPSQoZG9pdCAgMSBMMCAkUykgJiYKKwlMMT0kKGRvaXQgIDIgTDEgJEwwKSAmJgorCUwyPSQoZG9pdCAgMyBMMiAkTDEpICYmCisKKwlSMD0kKGRvaXQgIDEgUjAgJFMpICYmCisJUjE9JChkb2l0ICAyIFIxICRSMCkgJiYKKwlSMj0kKGRvaXQgIDMgUjIgJFIxKSAmJgorCisJUEw9JChkb2l0ICA0IFBMICRMMiAkQzIpICYmCisJUFI9JChkb2l0ICA0IFBSICRDMiAkUjIpICYmCisKKwlnaXQgbmFtZS1yZXYgJEMyID5leHBlY3RlZCAmJgorCisJTUI9JChnaXQgbWVyZ2UtYmFzZSBQTCBQUikgJiYKKwlnaXQgbmFtZS1yZXYgIiRNQiIgPmFjdHVhbC5zaW5nbGUgJiYKKworCU1CPSQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgUEwgUFIpICYmCisJZ2l0IG5hbWUtcmV2ICIkTUIiID5hY3R1YWwuYWxsICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwuc2luZ2xlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLmFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWluZGVwZW5kZW50IHdpdGggdW5zeW5jaHJvbml6ZWQgY2xvY2tzJyAnCisJSUI9JChkb2l0IDAgSUIpICYmCisJSTE9JChkb2l0IC0xMCBJMSAkSUIpICYmCisJSTI9JChkb2l0ICAtOSBJMiAkSTEpICYmCisJSTM9JChkb2l0ICAtOCBJMyAkSTIpICYmCisJSTQ9JChkb2l0ICAtNyBJNCAkSTMpICYmCisJSTU9JChkb2l0ICAtNiBJNSAkSTQpICYmCisJSTY9JChkb2l0ICAtNSBJNiAkSTUpICYmCisJSTc9JChkb2l0ICAtNCBJNyAkSTYpICYmCisJSTg9JChkb2l0ICAtMyBJOCAkSTcpICYmCisJSUg9JChkb2l0ICAtMiBJSCAkSTgpICYmCisKKwllY2hvICRJSCA+ZXhwZWN0ZWQgJiYKKwlnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IElCIElIID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtYmFzZSBmb3Igb2N0b3B1cy1zdGVwIChzZXR1cCknICcKKwkjIEFub3RoZXIgc2V0IHRvIGRlbW9uc3RyYXRlIGJhc2UgYmV0d2VlbiBvbmUgY29tbWl0IGFuZCBhIG1lcmdlCisJIyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKwkjCisJIyAqIEMgKE1NQykgKiBCIChNTUIpICogQSAgKE1NQSkKKwkjICogbyAgICAgICAqIG8gICAgICAgKiBvCisJIyAqIG8gICAgICAgKiBvICAgICAgICogbworCSMgKiBvICAgICAgICogbyAgICAgICAqIG8KKwkjICogbyAgICAgICB8IF9fX19fX18vCisJIyB8ICAgICAgICAgfC8KKwkjIHwgICAgICAgICAqIDEgKE1NMSkKKwkjIHwgX19fX19fXy8KKwkjIHwvCisJIyAqIHJvb3QgKE1NUikKKworCXRlc3RfY29tbWl0IE1NUiAmJgorCXRlc3RfY29tbWl0IE1NMSAmJgorCXRlc3RfY29tbWl0IE1NLW8gJiYKKwl0ZXN0X2NvbW1pdCBNTS1wICYmCisJdGVzdF9jb21taXQgTU0tcSAmJgorCXRlc3RfY29tbWl0IE1NQSAmJgorCWdpdCBjaGVja291dCBNTTEgJiYKKwl0ZXN0X2NvbW1pdCBNTS1yICYmCisJdGVzdF9jb21taXQgTU0tcyAmJgorCXRlc3RfY29tbWl0IE1NLXQgJiYKKwl0ZXN0X2NvbW1pdCBNTUIgJiYKKwlnaXQgY2hlY2tvdXQgTU1SICYmCisJdGVzdF9jb21taXQgTU0tdSAmJgorCXRlc3RfY29tbWl0IE1NLXYgJiYKKwl0ZXN0X2NvbW1pdCBNTS13ICYmCisJdGVzdF9jb21taXQgTU0teCAmJgorCXRlc3RfY29tbWl0IE1NQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1iYXNlIEEgQiBDJyAnCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBNTTEgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBNTVIgPmV4cGVjdGVkLnNiICYmCisKKwlnaXQgbWVyZ2UtYmFzZSAtLWFsbCBNTUEgTU1CIE1NQyA+YWN0dWFsICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1hbGwgLS1vY3RvcHVzIE1NQSBNTUIgTU1DID5hY3R1YWwuY29tbW9uICYmCisJZ2l0IHNob3ctYnJhbmNoIC0tbWVyZ2UtYmFzZSBNTUEgTU1CIE1NQyA+YWN0dWFsLnNiICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zYiBhY3R1YWwuY29tbW9uICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc2IgYWN0dWFsLnNiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyaXNzLWNyb3NzIG1lcmdlLWJhc2UgZm9yIG9jdG9wdXMtc3RlcCcgJworCWdpdCByZXNldCAtLWhhcmQgTU1SICYmCisJdGVzdF9jb21taXQgQ0MxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBFICYmCisJdGVzdF9jb21taXQgQ0MyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgQ0MxICYmCisJdGVzdF9jb21taXQgQ0MtbyAmJgorCXRlc3RfY29tbWl0IENDQiAmJgorCWdpdCByZXNldCAtLWhhcmQgQ0MxICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgQ0MyICYmCisJdGVzdF9jb21taXQgQ0NBICYmCisKKwlnaXQgcmV2LXBhcnNlIENDMSBDQzIgPmV4cGVjdGVkICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1hbGwgQ0NCIENDQV5eIENDQV5eMiA+YWN0dWFsICYmCisKKwlzb3J0IGV4cGVjdGVkID5leHBlY3RlZC5zb3J0ZWQgJiYKKwlzb3J0IGFjdHVhbCA+YWN0dWFsLnNvcnRlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnNvcnRlZCBhY3R1YWwuc29ydGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxMS1yZXYtbGlzdC13aXRoLWJhZC1jb21taXQuc2ggYi90L3Q2MDExLXJldi1saXN0LXdpdGgtYmFkLWNvbW1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYmIwNTgxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxMS1yZXYtbGlzdC13aXRoLWJhZC1jb21taXQuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXYtbGlzdCBzaG91bGQgbm90aWNlIGJhZCBjb21taXRzJworCisuIC4vdGVzdC1saWIuc2gKKworIyBOb3RlOgorIyAtIGNvbXByZXNzaW9uIGxldmVsIGlzIHNldCB0byB6ZXJvIHRvIG1ha2UgImNvcnJ1cHRpb25zIiBlYXNpZXIgdG8gcGVyZm9ybQorIyAtIHJlZmxvZyBpcyBkaXNhYmxlZCB0byBhdm9pZCBleHRyYSByZWZlcmVuY2VzIHdoaWNoIHdvdWxkIHR3YXJ0IHRoZSB0ZXN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyBcCisgICAnCisgICBnaXQgaW5pdCAmJgorICAgZ2l0IGNvbmZpZyBjb3JlLmNvbXByZXNzaW9uIDAgJiYKKyAgIGdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIGZhbHNlICYmCisgICBlY2hvICJmb28iID4gZm9vICYmCisgICBnaXQgYWRkIGZvbyAmJgorICAgZ2l0IGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiAmJgorICAgZWNobyAiYmFyIiA+IGJhciAmJgorICAgZ2l0IGFkZCBiYXIgJiYKKyAgIGdpdCBjb21taXQgLW0gInNlY29uZCBjb21taXQiICYmCisgICBlY2hvICJiYXoiID4gYmF6ICYmCisgICBnaXQgYWRkIGJheiAmJgorICAgZ2l0IGNvbW1pdCAtbSAidGhpcmQgY29tbWl0IiAmJgorICAgZWNobyAiZm9vIGFnYWluIiA+PiBmb28gJiYKKyAgIGdpdCBhZGQgZm9vICYmCisgICBnaXQgY29tbWl0IC1tICJmb3VydGggY29tbWl0IiAmJgorICAgZ2l0IHJlcGFjayAtYSAtZiAtZAorICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbnVtYmVyIG9mIHJldmlzaW9ucycgXAorICAgJworICAgcmV2cz0kKGdpdCByZXYtbGlzdCAtLWFsbCB8IHdjIC1sKSAmJgorICAgdGVzdCAkcmV2cyAtZXEgNCAmJgorICAgZmlyc3RfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpCisgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgc2Vjb25kIGNvbW1pdCBvYmplY3QnIFwKKyAgICcKKyAgICIkUEVSTF9QQVRIIiAtaS5iYWsgLXBlICJzL3NlY29uZCBjb21taXQvc29jb25kIGNvbW1pdC8iIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjayAmJgorICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1mdWxsCisgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IHNob3VsZCBmYWlsJyBcCisgICAnCisgICB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1hbGwgPiAvZGV2L251bGwKKyAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlcGFjayBfTVVTVF8gZmFpbCcgXAorICAgJworICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGFjayAtYSAtZiAtZAorICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCBjb21taXQgaXMgc3RpbGwgYXZhaWxhYmxlJyBcCisgICAnCisgICBnaXQgbG9nICRmaXJzdF9jb21taXQKKyAgICcKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDYwMTItcmV2LWxpc3Qtc2ltcGxpZnkuc2ggYi90L3Q2MDEyLXJldi1saXN0LXNpbXBsaWZ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzOWFkOTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDEyLXJldi1saXN0LXNpbXBsaWZ5LnNoCkBAIC0wLDAgKzEsOTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZSBzaW1wbGlmaWNhdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK25vdGUgKCkgeworCWdpdCB0YWcgIiQxIgorfQorCit1bm5vdGUgKCkgeworCWdpdCBuYW1lLXJldiAtLXRhZ3MgLS1zdGRpbiB8IHNlZCAtZSAic3wkX3g0MCAodGFncy9cKFteKV0qXCkpIHxcMSB8ZyIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyAiSGkgdGhlcmUiID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIkluaXRpYWwgZmlsZSIgJiYKKwlub3RlIEEgJiYKKworCWdpdCBicmFuY2ggb3RoZXItYnJhbmNoICYmCisKKwllY2hvICJIZWxsbyIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiTW9kaWZpZWQgZmlsZSIgJiYKKwlub3RlIEIgJiYKKworCWdpdCBjaGVja291dCBvdGhlci1icmFuY2ggJiYKKworCWVjaG8gIkhlbGxvIiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJNb2RpZmllZCB0aGUgZmlsZSBpZGVudGljYWxseSIgJiYKKwlub3RlIEMgJiYKKworCWVjaG8gIlRoaXMgaXMgYSBzdHVwaWQgZXhhbXBsZSIgPmFub3RoZXItZmlsZSAmJgorCWdpdCBhZGQgYW5vdGhlci1maWxlICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIkFkZCBhbm90aGVyIGZpbGUiICYmCisJbm90ZSBEICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1tICJtZXJnZSIgbWFzdGVyICYmCisJbm90ZSBFICYmCisKKwllY2hvICJZZXQgYW5vdGhlciIgPmVsaWYgJiYKKwlnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiSXJyZWxldmFudCBjaGFuZ2UiICYmCisJbm90ZSBGICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyAiWWV0IGFub3RoZXIiID5lbGlmICYmCisJZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIkFub3RoZXIgaXJyZWxldmFudCBjaGFuZ2UiICYmCisJbm90ZSBHICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1tICJtZXJnZSIgb3RoZXItYnJhbmNoICYmCisJbm90ZSBIICYmCisKKwllY2hvICJGaW5hbCBjaGFuZ2UiID5maWxlICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gIkZpbmFsIGNoYW5nZSIgJiYKKwlub3RlIEkKKycKKworRk1UPSd0Zm9ybWF0OiVQIAklSCB8ICVzJworCitjaGVja19yZXN1bHQgKCkgeworCWZvciBjIGluICQxCisJZG8KKwkJZWNobyAiJGMiCisJZG9uZSA+ZXhwZWN0ICYmCisJc2hpZnQgJiYKKwlwYXJhbT0iJCoiICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibG9nICRwYXJhbSIgJworCQlnaXQgbG9nIC0tcHJldHR5PSIkRk1UIiAtLXBhcmVudHMgJHBhcmFtIHwKKwkJdW5ub3RlID5hY3R1YWwgJiYKKwkJc2VkIC1lICJzL14uKglcKFteIF0qXCkgLiovXDEvIiA+Y2hlY2sgPGFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgY2hlY2sgfHwgeworCQkJY2F0IGFjdHVhbAorCQkJZmFsc2UKKwkJfQorCScKK30KKworY2hlY2tfcmVzdWx0ICdJIEggRyBGIEUgRCBDIEIgQScgLS1mdWxsLWhpc3RvcnkKK2NoZWNrX3Jlc3VsdCAnSSBIIEUgQyBCIEEnIC0tZnVsbC1oaXN0b3J5IC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSSBIIEUgQyBCIEEnIC0tZnVsbC1oaXN0b3J5IC0tdG9wby1vcmRlciAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0kgSCBFIEMgQiBBJyAtLWZ1bGwtaGlzdG9yeSAtLWRhdGUtb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdJIEUgQyBCIEEnIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSSBCIEEnIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSSBCIEEnIC0tdG9wby1vcmRlciAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0gnIC0tZmlyc3QtcGFyZW50IC0tIGFub3RoZXItZmlsZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTMtcmV2LWxpc3QtcmV2ZXJzZS1wYXJlbnRzLnNoIGIvdC90NjAxMy1yZXYtbGlzdC1yZXZlcnNlLXBhcmVudHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODkyYTUzNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTMtcmV2LWxpc3QtcmV2ZXJzZS1wYXJlbnRzLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSctLXJldmVyc2UgY29tYmluZXMgd2l0aCAtLXBhcmVudHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK2NvbW1pdCAoKSB7CisJdGVzdF90aWNrICYmCisJZWNobyAkMSA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCAtLXJldmVyc2UgZXhhbXBsZScgJworCWNvbW1pdCBvbmUgJiYKKwlnaXQgdGFnIHJvb3QgJiYKKwljb21taXQgdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwljb21taXQgdGhyZWUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgc2lkZSAmJgorCWNvbW1pdCBmaXZlCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJldmVyc2UgLS1wYXJlbnRzIC0tZnVsbC1oaXN0b3J5IGNvbWJpbmVzIGNvcnJlY3RseScgJworCWdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1mdWxsLWhpc3RvcnkgbWFzdGVyIC0tIGZvbyB8CisJCSIkUEVSTF9QQVRIIiAtZSAicHJpbnQgcmV2ZXJzZSA8PiIgPiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLXJldmVyc2UgLS1wYXJlbnRzIC0tZnVsbC1oaXN0b3J5IG1hc3RlciAtLSBmb28gXAorCQk+IGFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ib3VuZGFyeSBkb2VzIHRvbycgJworCWdpdCByZXYtbGlzdCAtLWJvdW5kYXJ5IC0tcGFyZW50cyAtLWZ1bGwtaGlzdG9yeSBtYXN0ZXIgXnJvb3QgLS0gZm9vIHwKKwkJIiRQRVJMX1BBVEgiIC1lICJwcmludCByZXZlcnNlIDw+IiA+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tYm91bmRhcnkgLS1yZXZlcnNlIC0tcGFyZW50cyAtLWZ1bGwtaGlzdG9yeSBcCisJCW1hc3RlciBecm9vdCAtLSBmb28gPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxNC1yZXYtbGlzdC1hbGwuc2ggYi90L3Q2MDE0LXJldi1saXN0LWFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OTFhYjRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxNC1yZXYtbGlzdC1hbGwuc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy0tYWxsIGluY2x1ZGVzIGRldGFjaGVkIEhFQURzJworCisuIC4vdGVzdC1saWIuc2gKKworCitjb21taXQgKCkgeworCXRlc3RfdGljayAmJgorCWVjaG8gJDEgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJY29tbWl0IG9uZSAmJgorCWNvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwljb21taXQgZGV0YWNoZWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWFsbCBsaXN0cyBkZXRhY2hlZCBIRUFEJyAnCisKKwl0ZXN0IDMgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCB8IHdjIC1sKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayBkb2VzIG5vdCBsb3NlIGRldGFjaGVkIEhFQUQnICcKKworCWdpdCBnYyAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZT1ub3cgJiYKKwlnaXQgc2hvdyBIRUFECisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDE1LXJldi1saXN0LXNob3ctYWxsLXBhcmVudHMuc2ggYi90L3Q2MDE1LXJldi1saXN0LXNob3ctYWxsLXBhcmVudHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGIxNDZmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTUtcmV2LWxpc3Qtc2hvdy1hbGwtcGFyZW50cy5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nLS1zaG93LWFsbCAtLXBhcmVudHMgZG9lcyBub3QgcmV3cml0ZSBUUkVFU0FNRSBjb21taXRzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIC0tc2hvdy1hbGwgLS1wYXJlbnRzIHRlc3QnICcKKwl0ZXN0X2NvbW1pdCBvbmUgZm9vLnR4dCAmJgorCWNvbW1pdDE9YGdpdCByZXYtbGlzdCAtMSBIRUFEYCAmJgorCXRlc3RfY29tbWl0IHR3byBiYXIudHh0ICYmCisJY29tbWl0Mj1gZ2l0IHJldi1saXN0IC0xIEhFQURgICYmCisJdGVzdF9jb21taXQgdGhyZWUgZm9vLnR4dCAmJgorCWNvbW1pdDM9YGdpdCByZXYtbGlzdCAtMSBIRUFEYAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXJlbnRzIHJld3JpdGVzIFRSRUVTQU1FIHBhcmVudHMgY29ycmVjdGx5JyAnCisJZWNobyAkY29tbWl0MyAkY29tbWl0MSA+IGV4cGVjdGVkICYmCisJZWNobyAkY29tbWl0MSA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLXBhcmVudHMgSEVBRCAtLSBmb28udHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhcmVudHMgLS1zaG93LWFsbCBkb2VzIG5vdCByZXdyaXRlcyBUUkVFU0FNRSBwYXJlbnRzJyAnCisJZWNobyAkY29tbWl0MyAkY29tbWl0MiA+IGV4cGVjdGVkICYmCisJZWNobyAkY29tbWl0MiAkY29tbWl0MSA+PiBleHBlY3RlZCAmJgorCWVjaG8gJGNvbW1pdDEgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0tc2hvdy1hbGwgSEVBRCAtLSBmb28udHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTYtcmV2LWxpc3QtZ3JhcGgtc2ltcGxpZnktaGlzdG9yeS5zaCBiL3QvdDYwMTYtcmV2LWxpc3QtZ3JhcGgtc2ltcGxpZnktaGlzdG9yeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNzE4MWQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxNi1yZXYtbGlzdC1ncmFwaC1zaW1wbGlmeS1oaXN0b3J5LnNoCkBAIC0wLDAgKzEsMjY3IEBACisjIS9iaW4vc2gKKworIyBUaGVyZSdzIG1vcmUgdGhhbiBvbmUgImNvcnJlY3QiIHdheSB0byByZXByZXNlbnQgdGhlIGhpc3RvcnkgZ3JhcGhpY2FsbHkuCisjIFRoZXNlIHRlc3RzIGRlcGVuZCBvbiB0aGUgY3VycmVudCBiZWhhdmlvciBvZiB0aGUgZ3JhcGhpbmcgY29kZS4gIElmIHRoZQorIyBncmFwaGluZyBjb2RlIGlzIGV2ZXIgY2hhbmdlZCB0byBkcmF3IHRoZSBvdXRwdXQgZGlmZmVyZW50bHksIHRoZXNlIHRlc3RzCisjIGNhc2VzIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHRvIGtub3cgYWJvdXQgdGhlIG5ldyBsYXlvdXQuCisKK3Rlc3RfZGVzY3JpcHRpb249Jy0tZ3JhcGggYW5kIHNpbXBsaWZpZWQgaGlzdG9yeScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCByZXYtbGlzdCAtLWdyYXBoIHRlc3QnICcKKwkjIDMgY29tbWl0cyBvbiBicmFuY2ggQQorCXRlc3RfY29tbWl0IEExIGZvby50eHQgJiYKKwl0ZXN0X2NvbW1pdCBBMiBiYXIudHh0ICYmCisJdGVzdF9jb21taXQgQTMgYmFyLnR4dCAmJgorCWdpdCBicmFuY2ggLW0gbWFzdGVyIEEgJiYKKworCSMgMiBjb21taXRzIG9uIGJyYW5jaCBCLCBzdGFydGVkIGZyb20gQTEKKwlnaXQgY2hlY2tvdXQgLWIgQiBBMSAmJgorCXRlc3RfY29tbWl0IEIxIGZvby50eHQgJiYKKwl0ZXN0X2NvbW1pdCBCMiBhYmMudHh0ICYmCisKKwkjIDIgY29tbWl0cyBvbiBicmFuY2ggQywgc3RhcnRlZCBmcm9tIEEyCisJZ2l0IGNoZWNrb3V0IC1iIEMgQTIgJiYKKwl0ZXN0X2NvbW1pdCBDMSB4eXoudHh0ICYmCisJdGVzdF9jb21taXQgQzIgeHl6LnR4dCAmJgorCisJIyBPY3RvcHVzIG1lcmdlIEIgYW5kIEMgaW50byBicmFuY2ggQQorCWdpdCBjaGVja291dCBBICYmCisJZ2l0IG1lcmdlIEIgQyAmJgorCWdpdCB0YWcgQTQgJiYKKworCXRlc3RfY29tbWl0IEE1IGJhci50eHQgJiYKKworCSMgTW9yZSBjb21taXRzIG9uIEMsIHRoZW4gbWVyZ2UgQyBpbnRvIEEKKwlnaXQgY2hlY2tvdXQgQyAmJgorCXRlc3RfY29tbWl0IEMzIGZvby50eHQgJiYKKwl0ZXN0X2NvbW1pdCBDNCBiYXIudHh0ICYmCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBDICYmCisJZ2l0IHRhZyBBNiAmJgorCisJdGVzdF9jb21taXQgQTcgYmFyLnR4dCAmJgorCisJIyBTdG9yZSBjb21taXQgbmFtZXMgaW4gdmFyaWFibGVzIGZvciBsYXRlciB1c2UKKwlBMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQTEpICYmCisJQTI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEEyKSAmJgorCUEzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBBMykgJiYKKwlBND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQTQpICYmCisJQTU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEE1KSAmJgorCUE2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBBNikgJiYKKwlBNz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQTcpICYmCisJQjE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEIxKSAmJgorCUIyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBCMikgJiYKKwlDMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQzEpICYmCisJQzI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEMyKSAmJgorCUMzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDMykgJiYKKwlDND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQzQpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tYWxsJyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEE1IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCAgICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgIFxcICAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqLS4gXFwgICAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcIFxcIFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8IHwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICogJEMyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCAqICRDMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogfCAkQjIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqIHwgJEIxIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCB8ICRBMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC98ICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMSIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWFsbCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworIyBNYWtlIHN1cmUgdGhlIGdyYXBoX2lzX2ludGVyZXN0aW5nKCkgY29kZSBzdGlsbCByZWFsaXplcworIyB0aGF0IHVuZGVjb3JhdGVkIG1lcmdlcyBhcmUgaW50ZXJlc3RpbmcsIGV2ZW4gd2l0aCAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uJyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwlnaXQgdGFnIC1kIEE0ICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzMiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBNSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgICAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICBcXCAgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKi0uIFxcICAgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCBcXCBcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCAqICRDMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgKiAkQzEiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqIHwgJEIyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiB8ICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvfCAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEEyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTEiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1hbGwgLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogZ2V0IHJpZCBvZiBkZWNvcmF0aW9ucyBvbiBCJyAnCisJZ2l0IHRhZyAtZCBCMiAmJgorCWdpdCB0YWcgLWQgQjEgJiYKKwlnaXQgYnJhbmNoIC1kIEIKKycKKworIyBHcmFwaCB3aXRoIGJyYW5jaCBCIHNpbXBsaWZpZWQgYXdheQordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24gcHJ1bmUgYnJhbmNoIEInICcKKwlybSAtZiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogICAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICAgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCBcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEExIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbiAtLWFsbCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLWZ1bGwtaGlzdG9yeSAtLSBiYXIudHh0JyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBNSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgICAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcIFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWZ1bGwtaGlzdG9yeSAtLWFsbCAtLSBiYXIudHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tZnVsbC1oaXN0b3J5IC0tc2ltcGxpZnktbWVyZ2VzIC0tIGJhci50eHQnICcKKwlybSAtZiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogICAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEE1IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWZ1bGwtaGlzdG9yeSAtLXNpbXBsaWZ5LW1lcmdlcyAtLWFsbCBcCisJCS0tIGJhci50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggLS0gYmFyLnR4dCcgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEyIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tYWxsIC0tIGJhci50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggLS1zcGFyc2UgLS0gYmFyLnR4dCcgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEExIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tc3BhcnNlIC0tYWxsIC0tIGJhci50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggXkM0JyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQjIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMyIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWFsbCBeQzQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggXkMzJyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEIyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQjEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTMiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1hbGwgXkMzID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisjIEkgZG9uJ3QgdGhpbmsgdGhlIG9yZGVyaW5nIG9mIHRoZSBib3VuZGFyeSBjb21taXRzIGlzIHJlYWxseQorIyB0aGF0IGltcG9ydGFudCwgYnV0IHRoaXMgdGVzdCBkZXBlbmRzIG9uIGl0LiAgSWYgdGhlIG9yZGVyaW5nIGV2ZXIgY2hhbmdlcworIyBpbiB0aGUgY29kZSwgd2UnbGwgbmVlZCB0byB1cGRhdGUgdGhpcyB0ZXN0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLWJvdW5kYXJ5IF5DMycgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICAgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAgXFwgICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiotLiBcXCAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgXFwgXFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogfCB8ICRCMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogfCB8ICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgfCB8ICRBMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJvIHwgfCB8ICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAvIC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJvIHwgfCAkQTEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiIC8gLyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgbyAkQzMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJvICRDMiIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWJvdW5kYXJ5IC0tYWxsIF5DMyA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDE3LXJldi1saXN0LXN0ZGluLnNoIGIvdC90NjAxNy1yZXYtbGlzdC1zdGRpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NjdiMzc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxNy1yZXYtbGlzdC1zdGRpbi5zaApAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdsb2cgZmFtaWx5IGxlYXJucyAtLXN0ZGluJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2sgKCkgeworCWZvciBjbWQgaW4gcmV2LWxpc3QgImxvZyAtLXN0YXQiCisJZG8KKwkJZm9yIGkgaW4gIiRAIgorCQlkbworCQkJcHJpbnRmICIlc1xuIiAkaQorCQlkb25lID5pbnB1dCAmJgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayAkY21kICQqIiAnCisJCQlnaXQgJGNtZCAkKGNhdCBpbnB1dCkgPmV4cGVjdCAmJgorCQkJZ2l0ICRjbWQgLS1zdGRpbiA8aW5wdXQgPmFjdHVhbCAmJgorCQkJc2VkIC1lICJzL14vaW5wdXQgLyIgaW5wdXQgJiYKKwkJCXNlZCAtZSAicy9eL291dHB1dCAvIiBleHBlY3QgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkJJworCWRvbmUKK30KKwordGhlbT0nMSAyIDMgNCA1IDYgNycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJKAorCQlmb3IgaSBpbiAwICR0aGVtCisJCWRvCisJCQlmb3IgaiBpbiAkdGhlbQorCQkJZG8KKwkJCQllY2hvICRpLiRqID5maWxlLSRqICYmCisJCQkJZ2l0IGFkZCBmaWxlLSRqIHx8IGV4aXQKKwkJCWRvbmUgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJZ2l0IGNvbW1pdCAtbSAkaSB8fCBleGl0CisJCWRvbmUgJiYKKwkJZm9yIGkgaW4gJHRoZW0KKwkJZG8KKwkJCWdpdCBjaGVja291dCAtYiBzaWRlLSRpIG1hc3Rlcn4kaSAmJgorCQkJZWNobyB1cGRhdGVkICRpID5maWxlLSRpICYmCisJCQlnaXQgYWRkIGZpbGUtJGkgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJZ2l0IGNvbW1pdCAtbSBzaWRlLSRpIHx8IGV4aXQKKwkJZG9uZQorCSkKKycKKworY2hlY2sgbWFzdGVyCitjaGVjayBzaWRlLTEgXnNpZGUtNAorY2hlY2sgc2lkZS0xIF5zaWRlLTcgLS0KK2NoZWNrIHNpZGUtMSBec2lkZS03IC0tIGZpbGUtMQorY2hlY2sgc2lkZS0xIF5zaWRlLTcgLS0gZmlsZS0yCitjaGVjayBzaWRlLTMgXnNpZGUtNCAtLSBmaWxlLTMKK2NoZWNrIHNpZGUtMyBec2lkZS0yCitjaGVjayBzaWRlLTMgXnNpZGUtMiAtLSBmaWxlLTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IG9ubHkgLS1zdGRpbicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTcKKworCWZpbGUtMQorCWZpbGUtMgorCUVPRgorCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJXm1hc3Rlcl4KKwktLQorCWZpbGUtMgorCUVPRgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyAtLW5hbWUtb25seSAtLXN0ZGluIG1hc3RlciAtLSBmaWxlLTEgXAorCQk8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDE4LXJldi1saXN0LWdsb2Iuc2ggYi90L3Q2MDE4LXJldi1saXN0LWdsb2Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjAwY2ViZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTgtcmV2LWxpc3QtZ2xvYi5zaApAQCAtMCwwICsxLDI2NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jldi1saXN0L3Jldi1wYXJzZSAtLWdsb2InCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21taXQgKCkgeworCXRlc3RfdGljayAmJgorCWVjaG8gJDEgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCitjb21wYXJlICgpIHsKKwkjIFNwbGl0IGFyZ3VtZW50cyBvbiB3aGl0ZXNwYWNlLgorCWdpdCAkMSAkMiA+ZXhwZWN0ZWQgJiYKKwlnaXQgJDEgJDMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJY29tbWl0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBzdWJzcGFjZS9vbmUgbWFzdGVyICYmCisJY29tbWl0IG9uZSAmJgorCWdpdCBjaGVja291dCAtYiBzdWJzcGFjZS90d28gbWFzdGVyICYmCisJY29tbWl0IHR3byAmJgorCWdpdCBjaGVja291dCAtYiBzdWJzcGFjZS14IG1hc3RlciAmJgorCWNvbW1pdCBzdWJzcGFjZS14ICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyL3RocmVlIG1hc3RlciAmJgorCWNvbW1pdCB0aHJlZSAmJgorCWdpdCBjaGVja291dCAtYiBzb21lcmVmIG1hc3RlciAmJgorCWNvbW1pdCBzb21lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWNvbW1pdCBtYXN0ZXIyICYmCisJZ2l0IHRhZyBmb28vYmFyIG1hc3RlciAmJgorCWNvbW1pdCBtYXN0ZXIzICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL2Zvby9iYXogbWFzdGVyICYmCisJY29tbWl0IG1hc3RlcjQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZ2xvYj1yZWZzL2hlYWRzL3N1YnNwYWNlLyonICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPXJlZnMvaGVhZHMvc3Vic3BhY2UvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyonICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZ2xvYj1yZWZzL2hlYWRzL3N1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8nICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPWhlYWRzL3N1YnNwYWNlJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZSIKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZXYtcGFyc2UgYWNjZXB0cyAtLWdsb2IgYXMgZGV0YWNoZWQgb3B0aW9uJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYiBoZWFkcy9zdWJzcGFjZSIKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZXYtcGFyc2UgaXMgbm90IGNvbmZ1c2VkIGJ5IG9wdGlvbi1saWtlIGdsb2InICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJtYXN0ZXIiICItLWdsb2IgLS1zeW1ib2xpYyBtYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tYnJhbmNoZXM9c3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWJyYW5jaGVzPXN1YnNwYWNlLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tYnJhbmNoZXM9c3Vic3BhY2UvJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXM9c3Vic3BhY2UvIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWJyYW5jaGVzPXN1YnNwYWNlJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXM9c3Vic3BhY2UiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qIC0tZ2xvYj1oZWFkcy9vdGhlci8qJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byBvdGhlci90aHJlZSIgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qIC0tZ2xvYj1oZWFkcy9vdGhlci8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9aGVhZHMvc29tZXJlZi8qIG1hc3RlcicgJworCisJY29tcGFyZSByZXYtcGFyc2UgIm1hc3RlciIgIi0tZ2xvYj1oZWFkcy9zb21lcmVmLyogbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9aGVhZHMvKicgJworCisJY29tcGFyZSByZXYtcGFyc2UgIm1hc3RlciBvdGhlci90aHJlZSBzb21lcmVmIHN1YnNwYWNlLXggc3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLXRhZ3M9Zm9vJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAiZm9vL2JhciIgIi0tdGFncz1mb28iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tcmVtb3Rlcz1mb28nICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJmb28vYmF6IiAiLS1yZW1vdGVzPWZvbyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8qJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPXJlZnMvaGVhZHMvc3Vic3BhY2UvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2IgcmVmcy9oZWFkcy9zdWJzcGFjZS8qJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iIHJlZnMvaGVhZHMvc3Vic3BhY2UvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBub3QgY29uZnVzZWQgYnkgb3B0aW9uLWxpa2UgLS1nbG9iIGFyZycgJworCisJY29tcGFyZSByZXYtbGlzdCAibWFzdGVyIiAiLS1nbG9iIC0wIG1hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9aGVhZHMvc3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZ2xvYj1yZWZzL2hlYWRzL3N1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1yZWZzL2hlYWRzL3N1YnNwYWNlLyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9aGVhZHMvc3Vic3BhY2UvJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9aGVhZHMvc3Vic3BhY2UnICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvc3Vic3BhY2UiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1icmFuY2hlcz1zdWJzcGFjZS8qJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1icmFuY2hlcz1zdWJzcGFjZS8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYnJhbmNoZXM9c3Vic3BhY2UvJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1icmFuY2hlcz1zdWJzcGFjZS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1icmFuY2hlcz1zdWJzcGFjZScgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXM9c3Vic3BhY2UiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1icmFuY2hlcycgJworCisJY29tcGFyZSByZXYtbGlzdCAibWFzdGVyIHN1YnNwYWNlLXggc29tZXJlZiBvdGhlci90aHJlZSBzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1icmFuY2hlcyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9aGVhZHMvc29tZXJlZi8qIG1hc3RlcicgJworCisJY29tcGFyZSByZXYtbGlzdCAibWFzdGVyIiAiLS1nbG9iPWhlYWRzL3NvbWVyZWYvKiBtYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyogLS1nbG9iPWhlYWRzL290aGVyLyonICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28gb3RoZXIvdGhyZWUiICItLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiAtLWdsb2I9aGVhZHMvb3RoZXIvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9aGVhZHMvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAibWFzdGVyIG90aGVyL3RocmVlIHNvbWVyZWYgc3Vic3BhY2UteCBzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPWhlYWRzLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS10YWdzPWZvbycgJworCisJY29tcGFyZSByZXYtbGlzdCAiZm9vL2JhciIgIi0tdGFncz1mb28iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS10YWdzJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJmb28vYmFyIiAiLS10YWdzIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tcmVtb3Rlcz1mb28nICcKKworCWNvbXBhcmUgcmV2LWxpc3QgImZvby9iYXoiICItLXJlbW90ZXM9Zm9vIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIGFjY2VwdHMgLS1nbG9iLy0tdGFncy8tLXJlbW90ZXMnICcKKworCWNvbXBhcmUgc2hvcnRsb2cgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iIC0tYnJhbmNoZXM9c3Vic3BhY2UgJiYKKwljb21wYXJlIHNob3J0bG9nIFwKKwkgICJtYXN0ZXIgc3Vic3BhY2UteCBzb21lcmVmIG90aGVyL3RocmVlIHN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iIFwKKwkgIC0tYnJhbmNoZXMgJiYKKwljb21wYXJlIHNob3J0bG9nIG1hc3RlciAiLS1nbG9iPWhlYWRzL3NvbWVyZWYvKiBtYXN0ZXIiICYmCisJY29tcGFyZSBzaG9ydGxvZyAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byBvdGhlci90aHJlZSIgXAorCSAgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qIC0tZ2xvYj1oZWFkcy9vdGhlci8qIiAmJgorCWNvbXBhcmUgc2hvcnRsb2cgXAorCSAgIm1hc3RlciBvdGhlci90aHJlZSBzb21lcmVmIHN1YnNwYWNlLXggc3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgXAorCSAgIi0tZ2xvYj1oZWFkcy8qIiAmJgorCWNvbXBhcmUgc2hvcnRsb2cgZm9vL2JhciAtLXRhZ3M9Zm9vICYmCisJY29tcGFyZSBzaG9ydGxvZyBmb28vYmFyIC0tdGFncyAmJgorCWNvbXBhcmUgc2hvcnRsb2cgZm9vL2JheiAtLXJlbW90ZXM9Zm9vCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc2hvcnRsb2cgYWNjZXB0cyAtLWdsb2IgYXMgZGV0YWNoZWQgb3B0aW9uJyAnCisKKwljb21wYXJlIHNob3J0bG9nIFwKKwkgICJtYXN0ZXIgb3RoZXIvdGhyZWUgc29tZXJlZiBzdWJzcGFjZS14IHN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iIFwKKwkgICItLWdsb2IgaGVhZHMvKiIKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdzaG9ydGxvZyAtLWdsb2IgaXMgbm90IGNvbmZ1c2VkIGJ5IG9wdGlvbi1saWtlIGFyZ3VtZW50JyAnCisKKwljb21wYXJlIHNob3J0bG9nIG1hc3RlciAiLS1nbG9iIC1lIG1hc3RlciIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTktcmV2LWxpc3QtYW5jZXN0cnktcGF0aC5zaCBiL3QvdDYwMTktcmV2LWxpc3QtYW5jZXN0cnktcGF0aC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOWI0Y2IwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxOS1yZXYtbGlzdC1hbmNlc3RyeS1wYXRoLnNoCkBAIC0wLDAgKzEsMTExIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nLS1hbmNlc3RyeS1wYXRoJworCisjICAgICAgICAgIEQtLS1FLS0tLS0tLUYKKyMgICAgICAgICAvICAgICBcICAgICAgIFwKKyMgICAgQi0tLUMtLS1HLS0tSC0tLUktLS1KCisjICAgLyAgICAgICAgICAgICAgICAgICAgIFwKKyMgIEEtLS0tLS0tSy0tLS0tLS0tLS0tLS0tLUwtLU0KKyMKKyMgIEQuLk0gICAgICAgICAgICAgICAgID09IEUgRiBHIEggSSBKIEsgTCBNCisjICAtLWFuY2VzdHJ5LXBhdGggRC4uTSA9PSBFIEYgSCBJIEogTCBNCisjCisjICBELi5NIC0tIE0udCAgICAgICAgICAgICAgICAgPT0gTQorIyAgLS1hbmNlc3RyeS1wYXRoIEQuLk0gLS0gTS50ID09IE0KKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfbWVyZ2UgKCkgeworCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIC1tICIkMiIgIiQxIiAmJgorCWdpdCB0YWcgIiQyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCXRlc3RfY29tbWl0IEMgJiYKKwl0ZXN0X2NvbW1pdCBEICYmCisJdGVzdF9jb21taXQgRSAmJgorCXRlc3RfY29tbWl0IEYgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEMgJiYKKwl0ZXN0X2NvbW1pdCBHICYmCisJdGVzdF9tZXJnZSBFIEggJiYKKwl0ZXN0X2NvbW1pdCBJICYmCisJdGVzdF9tZXJnZSBGIEogJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEEgJiYKKwl0ZXN0X2NvbW1pdCBLICYmCisJdGVzdF9tZXJnZSBKIEwgJiYKKwl0ZXN0X2NvbW1pdCBNCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IEQuLk0nICcKKwlmb3IgYyBpbiBFIEYgRyBIIEkgSiBLIEwgTTsgZG8gZWNobyAkYzsgZG9uZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tZm9ybWF0PSVzIEQuLk0gfAorCXNlZCAtZSAiL15jb21taXQgL2QiIHwKKwlzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYW5jZXN0cnktcGF0aCBELi5NJyAnCisJZm9yIGMgaW4gRSBGIEggSSBKIEwgTTsgZG8gZWNobyAkYzsgZG9uZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tYW5jZXN0cnktcGF0aCAtLWZvcm1hdD0lcyBELi5NIHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiB8CisJc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBELi5NIC0tIE0udCcgJworCWVjaG8gTSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tZm9ybWF0PSVzIEQuLk0gLS0gTS50IHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGNoIEQuLk0gLS0gTS50JyAnCisJZWNobyBNID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIC0tZm9ybWF0PSVzIEQuLk0gLS0gTS50IHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjICAgYi0tLWJjCisjICAvIFwgLworIyBhICAgWAorIyAgXCAvIFwKKyMgICBjLS0tY2IKKyMKKyMgQWxsIHJlZm5hbWVzIHByZWZpeGVkIHdpdGggJ3gnIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHRoZSB0YWdzCisjIGdlbmVyYXRlZCBieSB0ZXN0X2NvbW1pdCBvbiBjYXNlLWluc2Vuc2l0aXZlIHN5c3RlbXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjcmlzcy1jcm9zcycgJworCW1rZGlyIGNyaXNzLWNyb3NzICYmCisJKGNkIGNyaXNzLWNyb3NzICYmCisJIGdpdCBpbml0ICYmCisJIHRlc3RfY29tbWl0IEEgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHhiIG1hc3RlciAmJgorCSB0ZXN0X2NvbW1pdCBCICYmCisJIGdpdCBjaGVja291dCAtYiB4YyBtYXN0ZXIgJiYKKwkgdGVzdF9jb21taXQgQyAmJgorCSBnaXQgY2hlY2tvdXQgLWIgeGJjIHhiIC0tICYmCisJIGdpdCBtZXJnZSB4YyAmJgorCSBnaXQgY2hlY2tvdXQgLWIgeGNiIHhjIC0tICYmCisJIGdpdCBtZXJnZSB4YiAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyKQorJworCisjIG5vIGNvbW1pdHMgaW4gYmMgZGVzY2VuZCBmcm9tIGNiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmlzcy1jcm9zczogcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIGNiLi5iYycgJworCShjZCBjcmlzcy1jcm9zcyAmJgorCSBnaXQgcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIHhjYi4ueGJjID4gYWN0dWFsICYmCisJIHRlc3QgLXogIiQoY2F0IGFjdHVhbCkiKQorJworCisjIG5vIGNvbW1pdHMgaW4gcmVwb3NpdG9yeSBkZXNjZW5kIGZyb20gY2IKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyaXNzLWNyb3NzOiByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1hbGwgXmNiJyAnCisJKGNkIGNyaXNzLWNyb3NzICYmCisJIGdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1hbGwgXnhjYiA+IGFjdHVhbCAmJgorCSB0ZXN0IC16ICIkKGNhdCBhY3R1YWwpIikKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDIwLW1lcmdlLWRmLnNoIGIvdC90NjAyMC1tZXJnZS1kZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yN2MzZDczCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAyMC1tZXJnZS1kZi5zaApAQCAtMCwwICsxLDExMCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBGcmVkcmlrIEt1aXZpbmVuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgbWVyZ2Ugd2l0aCBkaXJlY3RvcnkvZmlsZSBjb25mbGljdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSByZXBvc2l0b3J5JyAnCisJZWNobyBIZWxsbyA+aW5pdCAmJgorCWdpdCBhZGQgaW5pdCAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBCICYmCisJbWtkaXIgZGlyICYmCisJZWNobyBmb28gPmRpci9mb28gJiYKKwlnaXQgYWRkIGRpci9mb28gJiYKKwlnaXQgY29tbWl0IC1tICJGaWxlOiBkaXIvZm9vIiAmJgorCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwllY2hvIGZpbGUgZGlyID5kaXIgJiYKKwlnaXQgYWRkIGRpciAmJgorCWdpdCBjb21taXQgLW0gIkZpbGU6IGRpciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTWVyZ2Ugd2l0aCBkL2YgY29uZmxpY3RzJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZSAibWVyZ2UgbXNnIiBCIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGL0QgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXJtIC5naXQvaW5kZXggJiYKKworCW1rZGlyIGJlZm9yZSAmJgorCWVjaG8gRklMRSA+YmVmb3JlL29uZSAmJgorCWVjaG8gRklMRSA+YWZ0ZXIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisKKwlybSAtZiBhZnRlciAmJgorCWdpdCBtdiBiZWZvcmUgYWZ0ZXIgJiYKKwlnaXQgY29tbWl0IC1tIG1vdmUgJiYKKworCWdpdCBjaGVja291dCAtYiBwYXJhIEhFQUReICYmCisJZWNobyBDT01QTEVURUxZIEFOT1RIRVIgRklMRSA+YW5vdGhlciAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gcGFyYSAmJgorCisJZ2l0IG1lcmdlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtb2RpZnkvZGVsZXRlICsgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbW9kaWZ5ICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlwcmludGYgImFcbmJcbmNcbmRcbmVcbmZcbmdcbmhcbiIgPmxldHRlcnMgJiYKKwlnaXQgYWRkIGxldHRlcnMgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCSMgVGhyb3cgaW4gbGV0dGVycy50eHQgZm9yIHNvcnRpbmcgb3JkZXIgZnVuCisJIyAoImxldHRlcnMudHh0IiBzb3J0cyBiZXR3ZWVuICJsZXR0ZXJzIiBhbmQgImxldHRlcnMvZmlsZSIpCisJZWNobyBpID4+bGV0dGVycyAmJgorCWVjaG8gInZlcnNpb24gMiIgPmxldHRlcnMudHh0ICYmCisJZ2l0IGFkZCBsZXR0ZXJzIGxldHRlcnMudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSBtb2RpZmllZCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGRlbGV0ZSBIRUFEXiAmJgorCWdpdCBybSBsZXR0ZXJzICYmCisJbWtkaXIgbGV0dGVycyAmJgorCT5sZXR0ZXJzL2ZpbGUgJiYKKwllY2hvICJ2ZXJzaW9uIDEiID5sZXR0ZXJzLnR4dCAmJgorCWdpdCBhZGQgbGV0dGVycyBsZXR0ZXJzLnR4dCAmJgorCWdpdCBjb21taXQgLW0gZGVsZXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkvZGVsZXRlICsgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgZGVsZXRlXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbW9kaWZ5ICYmCisKKwl0ZXN0IDUgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCA0IC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgLWYgbGV0dGVycy9maWxlICYmCisJdGVzdCAtZiBsZXR0ZXJzLnR4dCAmJgorCXRlc3QgLWYgbGV0dGVyc35tb2RpZnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZ5L2RlbGV0ZSArIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0OyBvdGhlciB3YXknICcKKwkjIFllcywgd2UgcmVhbGx5IG5lZWQgdGhlIGRvdWJsZSByZXNldCBzaW5jZSAibGV0dGVycyIgYXBwZWFycyBhcworCSMgYm90aCBhIGZpbGUgYW5kIGEgZGlyZWN0b3J5LgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mICYmCisJZ2l0IGNoZWNrb3V0IG1vZGlmeV4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZGVsZXRlICYmCisKKwl0ZXN0IDUgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCA0IC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgLWYgbGV0dGVycy9maWxlICYmCisJdGVzdCAtZiBsZXR0ZXJzLnR4dCAmJgorCXRlc3QgLWYgbGV0dGVyc35IRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyMS1tZXJnZS1jcmlzcy1jcm9zcy5zaCBiL3QvdDYwMjEtbWVyZ2UtY3Jpc3MtY3Jvc3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzMxYjliMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjEtbWVyZ2UtY3Jpc3MtY3Jvc3Muc2gKQEAgLTAsMCArMSw5NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBGcmVkcmlrIEt1aXZpbmVuCisjCisKKyMgU2VlIGh0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9Z2l0Jm09MTExNDYzMzU4NTAwMzYyJnc9MiBmb3IgYQorIyBuaWNlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBpcyBhYm91dC4KKworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNyaXNzLWNyb3NzIG1lcmdlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgcmVwb3NpdG9yeScgXAorJ2VjaG8gIjEKKzIKKzMKKzQKKzUKKzYKKzcKKzgKKzkiID4gZmlsZSAmJgorZ2l0IGFkZCBmaWxlICYmCitnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgZmlsZSAmJgorZ2l0IGJyYW5jaCBBICYmCitnaXQgYnJhbmNoIEIgJiYKK2dpdCBjaGVja291dCBBICYmCitlY2hvICIxCisyCiszCis0Cis1Cis2Cis3Cis4IGNoYW5nZWQgaW4gQjgsIGJyYW5jaCBBCis5IiA+IGZpbGUgJiYKK2dpdCBjb21taXQgLW0gIkI4IiBmaWxlICYmCitnaXQgY2hlY2tvdXQgQiAmJgorZWNobyAiMQorMgorMyBjaGFuZ2VkIGluIEMzLCBicmFuY2ggQgorNAorNQorNgorNworOAorOQorIiA+IGZpbGUgJiYKK2dpdCBjb21taXQgLW0gIkMzIiBmaWxlICYmCitnaXQgYnJhbmNoIEMzICYmCitnaXQgbWVyZ2UgInByZSBFMyBtZXJnZSIgQiBBICYmCitlY2hvICIxCisyCiszIGNoYW5nZWQgaW4gRTMsIGJyYW5jaCBCLiBOZXcgZmlsZSBzaXplCis0Cis1Cis2Cis3Cis4IGNoYW5nZWQgaW4gQjgsIGJyYW5jaCBBCis5CisiID4gZmlsZSAmJgorZ2l0IGNvbW1pdCAtbSAiRTMiIGZpbGUgJiYKK2dpdCBjaGVja291dCBBICYmCitnaXQgbWVyZ2UgInByZSBEOCBtZXJnZSIgQSBDMyAmJgorZWNobyAiMQorMgorMyBjaGFuZ2VkIGluIEMzLCBicmFuY2ggQgorNAorNQorNgorNworOCBjaGFuZ2VkIGluIEQ4LCBicmFuY2ggQS4gTmV3IGZpbGUgc2l6ZSAyCis5IiA+IGZpbGUgJiYKK2dpdCBjb21taXQgLW0gRDggZmlsZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3Jpc3MtY3Jvc3MgbWVyZ2UnICdnaXQgbWVyZ2UgImZpbmFsIG1lcmdlIiBBIEInCisKK2NhdCA+IGZpbGUtZXhwZWN0IDw8RU9GCisxCisyCiszIGNoYW5nZWQgaW4gRTMsIGJyYW5jaCBCLiBOZXcgZmlsZSBzaXplCis0Cis1Cis2Cis3Cis4IGNoYW5nZWQgaW4gRDgsIGJyYW5jaCBBLiBOZXcgZmlsZSBzaXplIDIKKzkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmlzcy1jcm9zcyBtZXJnZSByZXN1bHQnICdjbXAgZmlsZSBmaWxlLWV4cGVjdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3Jpc3MtY3Jvc3MgbWVyZ2UgZmFpbHMgKC1zIHJlc29sdmUpJyBcCisnZ2l0IHJlc2V0IC0taGFyZCBBXiAmJgordGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgLW0gImZpbmFsIG1lcmdlIiBCJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjItbWVyZ2UtcmVuYW1lLnNoIGIvdC90NjAyMi1tZXJnZS1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzY4MGY3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjItbWVyZ2UtcmVuYW1lLnNoCkBAIC0wLDAgKzEsOTAzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nTWVyZ2UtcmVjdXJzaXZlIG1lcmdpbmcgcmVuYW1lcycKKy4gLi90ZXN0LWxpYi5zaAorCittb2RpZnkgKCkgeworCXNlZCAtZSAiJDEiIDwiJDIiID4iJDIueCIgJiYKKwltdiAiJDIueCIgIiQyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwIFwKKycKK2NhdCA+QSA8PFxFT0YgJiYKK2EgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitiIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorYyBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKK2QgZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkCitlIGVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZQorZiBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKK2cgZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnCitoIGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAoraSBpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWkKK2ogampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqCitrIGtra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2traworbCBsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGwKK20gbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tCituIG5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubgorbyBvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28KK0VPRgorCitjYXQgPk0gPDxcRU9GICYmCitBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorQiBCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkIKK0MgQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDCitEIERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAorRSBFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUUKK0YgRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCitHIEdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRworSCBISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgKK0kgSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJCitKIEpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSgorSyBLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0sKK0wgTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCitNIE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQorTiBOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4KK08gT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PCitFT0YKKworZ2l0IGFkZCBBIE0gJiYKK2dpdCBjb21taXQgLW0gImluaXRpYWwgaGFzIEEgYW5kIE0iICYmCitnaXQgYnJhbmNoIHdoaXRlICYmCitnaXQgYnJhbmNoIHJlZCAmJgorZ2l0IGJyYW5jaCBibHVlICYmCitnaXQgYnJhbmNoIHllbGxvdyAmJgorZ2l0IGJyYW5jaCBjaGFuZ2UgJiYKK2dpdCBicmFuY2ggY2hhbmdlK3JlbmFtZSAmJgorCitzZWQgLWUgIi9eZyAvcy8uKi9nIDogbWFzdGVyIGNoYW5nZXMgYSBsaW5lLyIgPEEgPkErICYmCittdiBBKyBBICYmCitnaXQgY29tbWl0IC1hIC1tICJtYXN0ZXIgdXBkYXRlcyBBIiAmJgorCitnaXQgY2hlY2tvdXQgeWVsbG93ICYmCitybSAtZiBNICYmCitnaXQgY29tbWl0IC1hIC1tICJ5ZWxsb3cgcmVtb3ZlcyBNIiAmJgorCitnaXQgY2hlY2tvdXQgd2hpdGUgJiYKK3NlZCAtZSAiL15nIC9zLy4qL2cgOiB3aGl0ZSBjaGFuZ2VzIGEgbGluZS8iIDxBID5CICYmCitzZWQgLWUgIi9eRyAvcy8uKi9HIDogY29sb3JlZCBicmFuY2ggY2hhbmdlcyBhIGxpbmUvIiA8TSA+TiAmJgorcm0gLWYgQSBNICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQiBNIE4gJiYKK2dpdCBjb21taXQgLW0gIndoaXRlIHJlbmFtZXMgQS0+QiwgTS0+TiIgJiYKKworZ2l0IGNoZWNrb3V0IHJlZCAmJgorc2VkIC1lICIvXmcgL3MvLiovZyA6IHJlZCBjaGFuZ2VzIGEgbGluZS8iIDxBID5CICYmCitzZWQgLWUgIi9eRyAvcy8uKi9HIDogY29sb3JlZCBicmFuY2ggY2hhbmdlcyBhIGxpbmUvIiA8TSA+TiAmJgorcm0gLWYgQSBNICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQiBNIE4gJiYKK2dpdCBjb21taXQgLW0gInJlZCByZW5hbWVzIEEtPkIsIE0tPk4iICYmCisKK2dpdCBjaGVja291dCBibHVlICYmCitzZWQgLWUgIi9eZyAvcy8uKi9nIDogYmx1ZSBjaGFuZ2VzIGEgbGluZS8iIDxBID5DICYmCitzZWQgLWUgIi9eRyAvcy8uKi9HIDogY29sb3JlZCBicmFuY2ggY2hhbmdlcyBhIGxpbmUvIiA8TSA+TiAmJgorcm0gLWYgQSBNICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQyBNIE4gJiYKK2dpdCBjb21taXQgLW0gImJsdWUgcmVuYW1lcyBBLT5DLCBNLT5OIiAmJgorCitnaXQgY2hlY2tvdXQgY2hhbmdlICYmCitzZWQgLWUgIi9eZyAvcy8uKi9nIDogY2hhbmdlZCBsaW5lLyIgPEEgPkErICYmCittdiBBKyBBICYmCitnaXQgY29tbWl0IC1xIC1hIC1tICJjaGFuZ2VkIiAmJgorCitnaXQgY2hlY2tvdXQgY2hhbmdlK3JlbmFtZSAmJgorc2VkIC1lICIvXmcgL3MvLiovZyA6IGNoYW5nZWQgbGluZS8iIDxBID5CICYmCitybSBBICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEIgJiYKK2dpdCBjb21taXQgLXEgLWEgLW0gImNoYW5nZWQgYW5kIHJlbmFtZWQiICYmCisKK2dpdCBjaGVja291dCBtYXN0ZXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcmVuYW1pbmcgYnJhbmNoIGludG8gdW5yZW5hbWluZyBvbmUnIFwKKycKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHB1bGwgLiB3aGl0ZSAmJgorCWdpdCBscy1maWxlcyAtcyAmJgorCWdpdCBscy1maWxlcyAtdSBCID5iLnN0YWdlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYi5zdGFnZXMgJiYKKwlnaXQgbHMtZmlsZXMgLXMgTiA+bi5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG4uc3RhZ2VzICYmCisJc2VkIC1uZSAiL15nL3sKKwlwCisJcQorCX0iIEIgfCBncmVwIG1hc3RlciAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHdoaXRlIE4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZW5hbWluZyBicmFuY2ggaW50byBhbm90aGVyIHJlbmFtaW5nIG9uZScgXAorJworCXJtIC1mIEIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHJlZCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcHVsbCAuIHdoaXRlICYmCisJZ2l0IGxzLWZpbGVzIC11IEIgPmIuc3RhZ2VzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBiLnN0YWdlcyAmJgorCWdpdCBscy1maWxlcyAtcyBOID5uLnN0YWdlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgbi5zdGFnZXMgJiYKKwlzZWQgLW5lICIvXmcveworCXAKKwlxCisJfSIgQiB8IGdyZXAgcmVkICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgd2hpdGUgTgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHVucmVuYW1pbmcgYnJhbmNoIGludG8gcmVuYW1pbmcgb25lJyBcCisnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzaG93LWJyYW5jaCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcHVsbCAuIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtdSBCID5iLnN0YWdlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYi5zdGFnZXMgJiYKKwlnaXQgbHMtZmlsZXMgLXMgTiA+bi5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG4uc3RhZ2VzICYmCisJc2VkIC1uZSAiL15nL3sKKwlwCisJcQorCX0iIEIgfCBncmVwIHJlZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHdoaXRlIE4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCBjb25mbGljdGluZyByZW5hbWVzJyBcCisnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzaG93LWJyYW5jaCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcHVsbCAuIGJsdWUgJiYKKwlnaXQgbHMtZmlsZXMgLXUgQSA+YS5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGEuc3RhZ2VzICYmCisJZ2l0IGxzLWZpbGVzIC11IEIgPmIuc3RhZ2VzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBiLnN0YWdlcyAmJgorCWdpdCBscy1maWxlcyAtdSBDID5jLnN0YWdlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYy5zdGFnZXMgJiYKKwlnaXQgbHMtZmlsZXMgLXMgTiA+bi5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG4uc3RhZ2VzICYmCisJc2VkIC1uZSAiL15nL3sKKwlwCisJcQorCX0iIEIgfCBncmVwIHJlZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHdoaXRlIE4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJmZXJlbmNlIHdpdGggdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzaG93LWJyYW5jaCAmJgorCWVjaG8gPkEgdGhpcyBmaWxlIHNob3VsZCBub3QgbWF0dGVyICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwdWxsIC4gd2hpdGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyZmVyZW5jZSB3aXRoIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgd2hpdGUgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwlybSAtZiBBICYmCisJZWNobyA+QSB0aGlzIGZpbGUgc2hvdWxkIG5vdCBtYXR0ZXIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHB1bGwgLiByZWQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyZmVyZW5jZSB3aXRoIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBBIE0gJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHRhZyAtZiBhbmNob3IgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwlnaXQgcHVsbCAuIHllbGxvdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIE0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGVkIHdvcmtpbmcgdHJlZSBmaWxlIHNob3VsZCBwcmV2ZW50IHRoZSBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBBIE0gJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHRhZyAtZiBhbmNob3IgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwllY2hvID4+TSBvbmUgbGluZSBhZGRpdGlvbiAmJgorCWNhdCBNID5NLnNhdmVkICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IHB1bGwgLiB5ZWxsb3cgJiYKKwl0ZXN0X2NtcCBNIE0uc2F2ZWQgJiYKKwlybSAtZiBNLnNhdmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZWQgd29ya2luZyB0cmVlIGZpbGUgc2hvdWxkIHByZXZlbnQgdGhlIG1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIEEgTSAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgdGFnIC1mIGFuY2hvciAmJgorCWdpdCBzaG93LWJyYW5jaCAmJgorCWVjaG8gPj5NIG9uZSBsaW5lIGFkZGl0aW9uICYmCisJY2F0IE0gPk0uc2F2ZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IE0gJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgcHVsbCAuIHllbGxvdyAmJgorCXRlc3RfY21wIE0gTS5zYXZlZCAmJgorCXJtIC1mIE0uc2F2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJmZXJlbmNlIHdpdGggdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIEEgTSAmJgorCWdpdCBjaGVja291dCAtZiB5ZWxsb3cgJiYKKwlnaXQgdGFnIC1mIGFuY2hvciAmJgorCWdpdCBzaG93LWJyYW5jaCAmJgorCWVjaG8gPk0gdGhpcyBmaWxlIHNob3VsZCBub3QgbWF0dGVyICYmCisJZ2l0IHB1bGwgLiBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBNICYmCisJISB7CisJCWdpdCBscy1maWxlcyAtcyB8CisJCWdyZXAgTQorCX0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvZiBpZGVudGljYWwgY2hhbmdlcyBpbiBhIHJlbmFtZWQgZmlsZScgJworCXJtIC1mIEEgTSBOICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjaGFuZ2UrcmVuYW1lICYmCisJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSBjaGFuZ2UgfCB0ZXN0X2kxOG5ncmVwICJeU2tpcHBlZCBCIiAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgY2hlY2tvdXQgY2hhbmdlICYmCisJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSBjaGFuZ2UrcmVuYW1lIHwgdGVzdF9pMThuZ3JlcCAiXlNraXBwZWQgQiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHJlbmFtZSArIGQvZiBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGRpci1pbi13YXkgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCW1rZGlyIHN1YiAmJgorCW1rZGlyIGRpciAmJgorCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuMTBcbiIgPnN1Yi9maWxlICYmCisJZWNobyBmb28gPmRpci9maWxlLWluLXRoZS13YXkgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbW9uIGNvbW1taXQiICYmCisKKwllY2hvIDExID4+c3ViL2ZpbGUgJiYKKwllY2hvIG1vcmUgPj5kaXIvZmlsZS1pbi10aGUtd2F5ICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1pdCB0byBtZXJnZSwgd2l0aCBkaXIgaW4gdGhlIHdheSIgJiYKKworCWdpdCBjaGVja291dCAtYiBkaXItbm90LWluLXdheSAmJgorCWdpdCByZXNldCAtLXNvZnQgSEVBRF4gJiYKKwlnaXQgcm0gLXJmIGRpciAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1pdCB0byBtZXJnZSwgd2l0aCBkaXIgcmVtb3ZlZCIgLS0gZGlyIHN1Yi9maWxlICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lZC1maWxlLWhhcy1uby1jb25mbGljdHMgZGlyLWluLXdheX4xICYmCisJZ2l0IHJtIC1yZiBkaXIgJiYKKwlnaXQgcm0gc3ViL2ZpbGUgJiYKKwlwcmludGYgIjFcbjJcbjNcbjRcbjU1NTVcbjZcbjdcbjhcbjlcbjEwXG4iID5kaXIgJiYKKwlnaXQgYWRkIGRpciAmJgorCWdpdCBjb21taXQgLW0gIkluZGVwZW5kZW50IGNoYW5nZSIgJiYKKworCWdpdCBjaGVja291dCAtYiByZW5hbWVkLWZpbGUtaGFzLWNvbmZsaWN0cyBkaXItaW4td2F5fjEgJiYKKwlnaXQgcm0gLXJmIGRpciAmJgorCWdpdCBtdiBzdWIvZmlsZSBkaXIgJiYKKwllY2hvIDEyID4+ZGlyICYmCisJZ2l0IGFkZCBkaXIgJiYKKwlnaXQgY29tbWl0IC1tICJDb25mbGljdGluZyBjaGFuZ2UiCisnCisKK3ByaW50ZiAiMVxuMlxuM1xuNFxuNTU1NVxuNlxuN1xuOFxuOVxuMTBcbjExXG4iID5leHBlY3RlZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW5hbWUrRC9GIGNvbmZsaWN0OyByZW5hbWVkIGZpbGUgbWVyZ2VzICsgZGlyIG5vdCBpbiB3YXknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1xIHJlbmFtZWQtZmlsZS1oYXMtbm8tY29uZmxpY3RzXjAgJiYKKwlnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgZGlyLW5vdC1pbi13YXkgJiYKKwlnaXQgZGlmZiAtLXF1aWV0ICYmCisJdGVzdCAtZiBkaXIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVuYW1lK0QvRiBjb25mbGljdDsgcmVuYW1lZCBmaWxlIG1lcmdlcyBidXQgZGlyIGluIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgZGlyfiogJiYKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lZC1maWxlLWhhcy1uby1jb25mbGljdHNeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBkaXItaW4td2F5ID5vdXRwdXQgJiYKKworCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChtb2RpZnkvZGVsZXRlKTogZGlyL2ZpbGUtaW4tdGhlLXdheSIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiQXV0by1tZXJnaW5nIGRpciIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiQWRkaW5nIGFzIGRpcn5IRUFEIGluc3RlYWQiIG91dHB1dCAmJgorCisJdGVzdCAzIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkiICYmCisJdGVzdCAyIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgZGlyL2ZpbGUtaW4tdGhlLXdheSB8IHdjIC1sKSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0ICYmCisKKwl0ZXN0IC1mIGRpci9maWxlLWluLXRoZS13YXkgJiYKKwl0ZXN0IC1mIGRpcn5IRUFEICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlyfkhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2FtZSBhcyBwcmV2aW91cywgYnV0IG1lcmdlZCBvdGhlciB3YXknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLXJmIGRpcn4qICYmCisJZ2l0IGNoZWNrb3V0IC1xIGRpci1pbi13YXleMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSByZW5hbWVkLWZpbGUtaGFzLW5vLWNvbmZsaWN0cyA+b3V0cHV0IDI+ZXJyb3JzICYmCisKKwkhIGdyZXAgImVycm9yOiByZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0IiBlcnJvcnMgJiYKKwl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAobW9kaWZ5L2RlbGV0ZSk6IGRpci9maWxlLWluLXRoZS13YXkiIG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIkF1dG8tbWVyZ2luZyBkaXIiIG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIkFkZGluZyBhcyBkaXJ+cmVuYW1lZC1maWxlLWhhcy1uby1jb25mbGljdHMgaW5zdGVhZCIgb3V0cHV0ICYmCisKKwl0ZXN0IDMgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDIgLWVxICIkKGdpdCBscy1maWxlcyAtdSBkaXIvZmlsZS1pbi10aGUtd2F5IHwgd2MgLWwpIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgJiYKKworCXRlc3QgLWYgZGlyL2ZpbGUtaW4tdGhlLXdheSAmJgorCXRlc3QgLWYgZGlyfnJlbmFtZWQtZmlsZS1oYXMtbm8tY29uZmxpY3RzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlyfnJlbmFtZWQtZmlsZS1oYXMtbm8tY29uZmxpY3RzCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxCisyCiszCis0Cis1Cis2Cis3Cis4Cis5CisxMAorPDw8PDw8PCBIRUFEOmRpcgorMTIKKz09PT09PT0KKzExCis+Pj4+Pj4+IGRpci1ub3QtaW4td2F5OnN1Yi9maWxlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVuYW1lK0QvRiBjb25mbGljdDsgcmVuYW1lZCBmaWxlIGNhbm5vdCBtZXJnZSwgZGlyIG5vdCBpbiB3YXknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLXJmIGRpcn4qICYmCisJZ2l0IGNoZWNrb3V0IC1xIHJlbmFtZWQtZmlsZS1oYXMtY29uZmxpY3RzXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgZGlyLW5vdC1pbi13YXkgJiYKKworCXRlc3QgMyAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpIiAmJgorCXRlc3QgMyAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IGRpciB8IHdjIC1sKSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0ICYmCisKKwl0ZXN0IC1mIGRpciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW5hbWUrRC9GIGNvbmZsaWN0OyByZW5hbWVkIGZpbGUgY2Fubm90IG1lcmdlIGFuZCBkaXIgaW4gdGhlIHdheScgJworCW1vZGlmeSBzL2Rpci1ub3QtaW4td2F5L2Rpci1pbi13YXkvIGV4cGVjdGVkICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLXJmIGRpcn4qICYmCisJZ2l0IGNoZWNrb3V0IC1xIHJlbmFtZWQtZmlsZS1oYXMtY29uZmxpY3RzXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgZGlyLWluLXdheSAmJgorCisJdGVzdCA1IC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkiICYmCisJdGVzdCAzIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgZGlyIHwgZ3JlcCAtdiBmaWxlLWluLXRoZS13YXkgfCB3YyAtbCkiICYmCisJdGVzdCAyIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgZGlyL2ZpbGUtaW4tdGhlLXdheSB8IHdjIC1sKSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0ICYmCisKKwl0ZXN0IC1mIGRpci9maWxlLWluLXRoZS13YXkgJiYKKwl0ZXN0IC1mIGRpcn5IRUFEICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlyfkhFQUQKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEKKzIKKzMKKzQKKzUKKzYKKzcKKzgKKzkKKzEwCis8PDw8PDw8IEhFQUQ6c3ViL2ZpbGUKKzExCis9PT09PT09CisxMgorPj4+Pj4+PiByZW5hbWVkLWZpbGUtaGFzLWNvbmZsaWN0czpkaXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTYW1lIGFzIHByZXZpb3VzLCBidXQgbWVyZ2VkIG90aGVyIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgZGlyfiogJiYKKwlnaXQgY2hlY2tvdXQgLXEgZGlyLWluLXdheV4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHJlbmFtZWQtZmlsZS1oYXMtY29uZmxpY3RzICYmCisKKwl0ZXN0IDUgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDMgLWVxICIkKGdpdCBscy1maWxlcyAtdSBkaXIgfCBncmVwIC12IGZpbGUtaW4tdGhlLXdheSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDIgLWVxICIkKGdpdCBscy1maWxlcyAtdSBkaXIvZmlsZS1pbi10aGUtd2F5IHwgd2MgLWwpIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgJiYKKworCXRlc3QgLWYgZGlyL2ZpbGUtaW4tdGhlLXdheSAmJgorCXRlc3QgLWYgZGlyfnJlbmFtZWQtZmlsZS1oYXMtY29uZmxpY3RzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlyfnJlbmFtZWQtZmlsZS1oYXMtY29uZmxpY3RzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJvdGggcmVuYW1lIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW52b2x2ZWQgaW4gRC9GIGNvbmZsaWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiByZW5hbWUtZGVzdCAmJgorCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCisJbWtkaXIgb25lICYmCisJZWNobyBzdHVmZiA+b25lL2ZpbGUgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbW9uIGNvbW1taXQiICYmCisKKwlnaXQgbXYgb25lL2ZpbGUgZGVzdGRpciAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZWQgdG8gZGVzdGRpciIgJiYKKworCWdpdCBjaGVja291dCAtYiBzb3VyY2UtY29uZmxpY3QgSEVBRH4xICYmCisJZ2l0IHJtIC1yZiBvbmUgJiYKKwlta2RpciBkZXN0ZGlyICYmCisJdG91Y2ggb25lIGRlc3RkaXIvZm9vICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkNvbmZsaWN0cyBpbiB0aGUgd2F5IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib3RoIHJlbmFtZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGludm9sdmVkIGluIEQvRiBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgZGlyfiogJiYKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lLWRlc3ReMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBzb3VyY2UtY29uZmxpY3QgJiYKKworCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCisJdGVzdCAtZiBkZXN0ZGlyL2ZvbyAmJgorCXRlc3QgLWYgb25lICYmCisJdGVzdCAtZiBkZXN0ZGlyfkhFQUQgJiYKKwl0ZXN0ICJzdHVmZiIgPSAiJChjYXQgZGVzdGRpcn5IRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcGFpciByZW5hbWUgdG8gcGFyZW50IG9mIG90aGVyIChEL0YgY29uZmxpY3RzKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gcmVuYW1lLXR3byAmJgorCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCisJbWtkaXIgb25lICYmCisJbWtkaXIgdHdvICYmCisJZWNobyBzdHVmZiA+b25lL2ZpbGUgJiYKKwllY2hvIG90aGVyID50d28vZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb21tb24gY29tbW1pdCIgJiYKKworCWdpdCBybSAtcmYgb25lICYmCisJZ2l0IG12IHR3by9maWxlIG9uZSAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZSB0d28vZmlsZSAtPiBvbmUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lLW9uZSBIRUFEfjEgJiYKKwlnaXQgcm0gLXJmIHR3byAmJgorCWdpdCBtdiBvbmUvZmlsZSB0d28gJiYKKwlybSAtciBvbmUgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWUgb25lL2ZpbGUgLT4gdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWlyIHJlbmFtZSB0byBwYXJlbnQgb2Ygb3RoZXIgKEQvRiBjb25mbGljdHMpIHcvIHVudHJhY2tlZCBkaXInICcKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lLW9uZV4wICYmCisJbWtkaXIgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHJlbmFtZS10d28gJiYKKworCXRlc3QgMiAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IG9uZSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSB0d28gfCB3YyAtbCkiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0ICYmCisKKwl0ZXN0IDQgLWVxICQoZmluZCAuIHwgZ3JlcCAtdiAuZ2l0IHwgd2MgLWwpICYmCisKKwl0ZXN0IC1kIG9uZSAmJgorCXRlc3QgLWYgb25lfnJlbmFtZS10d28gJiYKKwl0ZXN0IC1mIHR3byAmJgorCXRlc3QgIm90aGVyIiA9ICQoY2F0IG9uZX5yZW5hbWUtdHdvKSAmJgorCXRlc3QgInN0dWZmIiA9ICQoY2F0IHR3bykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFpciByZW5hbWUgdG8gcGFyZW50IG9mIG90aGVyIChEL0YgY29uZmxpY3RzKSB3LyBjbGVhbiBzdGFydCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgcmVuYW1lLXR3byAmJgorCisJdGVzdCAyIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkiICYmCisJdGVzdCAxIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgb25lIHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHR3byB8IHdjIC1sKSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKworCXRlc3QgMyAtZXEgJChmaW5kIC4gfCBncmVwIC12IC5naXQgfCB3YyAtbCkgJiYKKworCXRlc3QgLWYgb25lICYmCisJdGVzdCAtZiB0d28gJiYKKwl0ZXN0ICJvdGhlciIgPSAkKGNhdCBvbmUpICYmCisJdGVzdCAic3R1ZmYiID0gJChjYXQgdHdvKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUgb2Ygb25lIGZpbGUgdG8gdHdvLCB3aXRoIGRpcmVjdG9yaWVzIGluIHRoZSB3YXknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGZpcnN0LXJlbmFtZSAmJgorCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCisJZWNobyBzdHVmZiA+b3JpZ2luYWwgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbW9uIGNvbW1taXQiICYmCisKKwlta2RpciB0d28gJiYKKwk+dHdvL2ZpbGUgJiYKKwlnaXQgYWRkIHR3by9maWxlICYmCisJZ2l0IG12IG9yaWdpbmFsIG9uZSAmJgorCWdpdCBjb21taXQgLW0gIlB1dCB0d28vZmlsZSBpbiB0aGUgd2F5LCByZW5hbWUgdG8gb25lIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNlY29uZC1yZW5hbWUgSEVBRH4xICYmCisJbWtkaXIgb25lICYmCisJPm9uZS9maWxlICYmCisJZ2l0IGFkZCBvbmUvZmlsZSAmJgorCWdpdCBtdiBvcmlnaW5hbCB0d28gJiYKKwlnaXQgY29tbWl0IC1tICJQdXQgb25lL2ZpbGUgaW4gdGhlIHdheSwgcmVuYW1lIHRvIHR3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaGFuZGxpbmcgb2YgZGlmZmVyZW50bHkgcmVuYW1lZCBmaWxlIHdpdGggRC9GIGNvbmZsaWN0cycgJworCWdpdCBjaGVja291dCAtcSBmaXJzdC1yZW5hbWVeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBzZWNvbmQtcmVuYW1lICYmCisKKwl0ZXN0IDUgLWVxICIkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSIgJiYKKwl0ZXN0IDMgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSBvbmUgfCB3YyAtbCkiICYmCisJdGVzdCAxIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgdHdvIHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IG9yaWdpbmFsIHwgd2MgLWwpIiAmJgorCXRlc3QgMiAtZXEgIiQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpIiAmJgorCisJdGVzdCAtZiBvbmUvZmlsZSAmJgorCXRlc3QgLWYgdHdvL2ZpbGUgJiYKKwl0ZXN0IC1mIG9uZX5IRUFEICYmCisJdGVzdCAtZiB0d29+c2Vjb25kLXJlbmFtZSAmJgorCSEgdGVzdCAtZiBvcmlnaW5hbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUgb25lIGZpbGUgdG8gdHdvOyBkaXJlY3RvcmllcyBtb3Zpbmcgb3V0IG9mIHRoZSB3YXknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGZpcnN0LXJlbmFtZS1yZWRvICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwllY2hvIHN0dWZmID5vcmlnaW5hbCAmJgorCW1rZGlyIG9uZSB0d28gJiYKKwl0b3VjaCBvbmUvZmlsZSB0d28vZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb21tb24gY29tbW1pdCIgJiYKKworCWdpdCBybSAtcmYgb25lICYmCisJZ2l0IG12IG9yaWdpbmFsIG9uZSAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZSB0byBvbmUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kLXJlbmFtZS1yZWRvIEhFQUR+MSAmJgorCWdpdCBybSAtcmYgdHdvICYmCisJZ2l0IG12IG9yaWdpbmFsIHR3byAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZSB0byB0d28iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGhhbmRsaW5nIG9mIGRpZmZlcmVudGx5IHJlbmFtZWQgZmlsZSB3aXRoIEQvRiBjb25mbGljdHMnICcKKwlnaXQgY2hlY2tvdXQgLXEgZmlyc3QtcmVuYW1lLXJlZG9eMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBzZWNvbmQtcmVuYW1lLXJlZG8gJiYKKworCXRlc3QgMyAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IG9uZSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSB0d28gfCB3YyAtbCkiICYmCisJdGVzdCAxIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgb3JpZ2luYWwgfCB3YyAtbCkiICYmCisJdGVzdCAwIC1lcSAiJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkiICYmCisKKwl0ZXN0IC1mIG9uZSAmJgorCXRlc3QgLWYgdHdvICYmCisJISB0ZXN0IC1mIG9yaWdpbmFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGF2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgbm9ybWFsIHJlbmFtZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gYXZvaWQtdW5uZWNlc3NhcnktdXBkYXRlLTEgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuMTBcbiIgPm9yaWdpbmFsICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1vbiBjb21tbWl0IiAmJgorCisJZ2l0IG12IG9yaWdpbmFsIHJlbmFtZSAmJgorCWVjaG8gMTEgPj5yZW5hbWUgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGNvbW1pdCAtbSAiUmVuYW1lZCBhbmQgbW9kaWZpZWQiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbWVyZ2UtYnJhbmNoLTEgSEVBRH4xICYmCisJZWNobyAicmFuZG9tIGNvbnRlbnQiID5yYW5kb20tZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJSYW5kb20sIHVucmVsYXRlZCBjaGFuZ2VzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGUsIG5vcm1hbCByZW5hbWUnICcKKwlnaXQgY2hlY2tvdXQgLXEgYXZvaWQtdW5uZWNlc3NhcnktdXBkYXRlLTFeMCAmJgorCXRlc3QtY2htdGltZSA9MTAwMDAwMDAwMCByZW5hbWUgJiYKKwl0ZXN0LWNobXRpbWUgLXYgKzAgcmVuYW1lID5leHBlY3QgJiYKKwlnaXQgbWVyZ2UgbWVyZ2UtYnJhbmNoLTEgJiYKKwl0ZXN0LWNobXRpbWUgLXYgKzAgcmVuYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICMgInJlbmFtZSIgc2hvdWxkIGhhdmUgc3RheWVkIGludGFjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0byB0ZXN0IGF2b2lkaW5nIHVubmVjZXNzYXJ5IHVwZGF0ZSwgd2l0aCBEL0YgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGF2b2lkLXVubmVjZXNzYXJ5LXVwZGF0ZS0yICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlta2RpciBkZiAmJgorCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuMTBcbiIgPmRmL2ZpbGUgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbW9uIGNvbW1taXQiICYmCisKKwlnaXQgbXYgZGYvZmlsZSB0ZW1wICYmCisJcm0gLXJmIGRmICYmCisJZ2l0IG12IHRlbXAgZGYgJiYKKwllY2hvIDExID4+ZGYgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGNvbW1pdCAtbSAiUmVuYW1lZCBhbmQgbW9kaWZpZWQiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbWVyZ2UtYnJhbmNoLTIgSEVBRH4xICYmCisJPnVucmVsYXRlZC1jaGFuZ2UgJiYKKwlnaXQgYWRkIHVucmVsYXRlZC1jaGFuZ2UgJiYKKwlnaXQgY29tbWl0IC1tICJPbmx5IHVucmVsYXRlZCBjaGFuZ2VzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGUsIHdpdGggRC9GIGNvbmZsaWN0JyAnCisJZ2l0IGNoZWNrb3V0IC1xIGF2b2lkLXVubmVjZXNzYXJ5LXVwZGF0ZS0yXjAgJiYKKwl0ZXN0LWNobXRpbWUgPTEwMDAwMDAwMDAgZGYgJiYKKwl0ZXN0LWNobXRpbWUgLXYgKzAgZGYgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSBtZXJnZS1icmFuY2gtMiAmJgorCXRlc3QtY2htdGltZSAtdiArMCBkZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAjICJkZiIgc2hvdWxkIGhhdmUgc3RheWVkIGludGFjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGUsIGRpci0+KGZpbGUsbm90aGluZyknICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwk+aXJyZWxldmFudCAmJgorCW1rZGlyIGRmICYmCisJPmRmL2ZpbGUgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbUEgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlCisJZ2l0IHJtIC1yZiBkZiAmJgorCWdpdCBjb21taXQgLW1CICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJtIC1yZiBkZiAmJgorCWVjaG8gYmxhID5kZiAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgYSBuZXdmaWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGUsIGRpci0+KGZpbGUsbm90aGluZyknICcKKwlnaXQgY2hlY2tvdXQgLXEgbWFzdGVyXjAgJiYKKwl0ZXN0LWNobXRpbWUgPTEwMDAwMDAwMDAgZGYgJiYKKwl0ZXN0LWNobXRpbWUgLXYgKzAgZGYgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSBzaWRlICYmCisJdGVzdC1jaG10aW1lIC12ICswIGRmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICMgImRmIiBzaG91bGQgaGF2ZSBzdGF5ZWQgaW50YWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGF2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgbW9kaWZ5L2RlbGV0ZScgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCT5pcnJlbGV2YW50ICYmCisJPmZpbGUgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbUEgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlCisJZ2l0IHJtIC1mIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJEZWxldGUgZmlsZSIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIGJsYSA+ZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJNb2RpZnkgZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgdW5uZWNlc3NhcnkgdXBkYXRlLCBtb2RpZnkvZGVsZXRlJyAnCisJZ2l0IGNoZWNrb3V0IC1xIG1hc3Rlcl4wICYmCisJdGVzdC1jaG10aW1lID0xMDAwMDAwMDAwIGZpbGUgJiYKKwl0ZXN0LWNobXRpbWUgLXYgKzAgZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNpZGUgJiYKKwl0ZXN0LWNobXRpbWUgLXYgKzAgZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAjICJmaWxlIiBzaG91bGQgaGF2ZSBzdGF5ZWQgaW50YWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGF2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgcmVuYW1lL2FkZC1kZXN0JyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG4iID5maWxlICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW1BICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZQorCWNwIGZpbGUgbmV3ZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgZmlsZSBjb3B5IiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtdiBmaWxlIG5ld2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWUgZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgdW5uZWNlc3NhcnkgdXBkYXRlLCByZW5hbWUvYWRkLWRlc3QnICcKKwlnaXQgY2hlY2tvdXQgLXEgbWFzdGVyXjAgJiYKKwl0ZXN0LWNobXRpbWUgPTEwMDAwMDAwMDAgbmV3ZmlsZSAmJgorCXRlc3QtY2htdGltZSAtdiArMCBuZXdmaWxlID5leHBlY3QgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAmJgorCXRlc3QtY2htdGltZSAtdiArMCBuZXdmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICMgImZpbGUiIHNob3VsZCBoYXZlIHN0YXllZCBpbnRhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbWVyZ2Ugb2YgcmVuYW1lICsgc21hbGwgY2hhbmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiByZW5hbWUtcGx1cy1zbWFsbC1jaGFuZ2UgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCWVjaG8gT1JJR0lOQUwgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCWdpdCBjaGVja291dCAtYiByZW5hbWVfYnJhbmNoICYmCisJZ2l0IG12IGZpbGUgcmVuYW1lZF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBSZW5hbWUgJiYKKwlnaXQgY2hlY2tvdXQgcmVuYW1lLXBsdXMtc21hbGwtY2hhbmdlICYmCisJZWNobyBORVctVkVSU0lPTiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gUmVmb3JtYXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgcmVuYW1lICsgc21hbGwgY2hhbmdlJyAnCisJZ2l0IG1lcmdlIHJlbmFtZV9icmFuY2ggJiYKKworCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRDpyZW5hbWVkX2ZpbGUpID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MTpmaWxlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgdXNlIG9mIGV4dGVuZGVkIG1lcmdlIG1hcmtlcnMnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbiIgPm9yaWdpbmFsX2ZpbGUgJiYKKwlnaXQgYWRkIG9yaWdpbmFsX2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZSAmJgorCWVjaG8gOSA+Pm9yaWdpbmFsX2ZpbGUgJiYKKwlnaXQgYWRkIG9yaWdpbmFsX2ZpbGUgJiYKKwlnaXQgbXYgb3JpZ2luYWxfZmlsZSByZW5hbWVkX2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tQiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gOC41ID4+b3JpZ2luYWxfZmlsZSAmJgorCWdpdCBhZGQgb3JpZ2luYWxfZmlsZSAmJgorCWdpdCBjb21taXQgLW1DCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxCisyCiszCis0Cis1Cis2Cis3Cis4Cis8PDw8PDw8IEhFQUQ6cmVuYW1lZF9maWxlCis5Cis9PT09PT09Cis4LjUKKz4+Pj4+Pj4gbWFzdGVyXjA6b3JpZ2luYWxfZmlsZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG1hc3RlciBpbnRvIHJlbmFtZSBoYXMgY29ycmVjdCBleHRlbmRlZCBtYXJrZXJzJyAnCisJZ2l0IGNoZWNrb3V0IHJlbmFtZV4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBtYXN0ZXJeMCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlbmFtZWRfZmlsZQorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMQorMgorMworNAorNQorNgorNworOAorPDw8PDw8PCBIRUFEOm9yaWdpbmFsX2ZpbGUKKzguNQorPT09PT09PQorOQorPj4+Pj4+PiByZW5hbWVeMDpyZW5hbWVkX2ZpbGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSByZW5hbWUgaW50byBtYXN0ZXIgaGFzIGNvcnJlY3QgZXh0ZW5kZWQgbWFya2VycycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHJlbmFtZV4wICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVuYW1lZF9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNwdXJpb3VzICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCIgbWVzc2FnZScgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCT4gaXJyZWxldmFudF9maWxlICYmCisJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG4iID5vcmlnaW5hbF9maWxlICYmCisJZ2l0IGFkZCBpcnJlbGV2YW50X2ZpbGUgb3JpZ2luYWxfZmlsZSAmJgorCWdpdCBjb21taXQgLW1BICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lICYmCisJZ2l0IG12IG9yaWdpbmFsX2ZpbGUgcmVuYW1lZF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbUIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcm0gb3JpZ2luYWxfZmlsZSAmJgorCWdpdCBjb21taXQgLW1DCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHNwdXJpb3VzICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCIgbWVzc2FnZScgJworCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSByZW5hbWVeMCAyPmVycm9ycy50eHQgJiYKKwkhIGdyZXAgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUiIGVycm9ycy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGZvbGxvdyByZW5hbWVzIGZvciBlbXB0eSBmaWxlcycgJworCWdpdCBjaGVja291dCAtZiAtYiBlbXB0eS1iYXNlICYmCisJPmVtcHR5MSAmJgorCWdpdCBhZGQgZW1wdHkxICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZWNobyBjb250ZW50ID5lbXB0eTEgJiYKKwlnaXQgYWRkIGVtcHR5MSAmJgorCWdpdCBjb21taXQgLW0gZmlsbCAmJgorCWdpdCBjaGVja291dCAtYiBlbXB0eS10b3BpYyBIRUFEXiAmJgorCWdpdCBtdiBlbXB0eTEgZW1wdHkyICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZW1wdHktYmFzZSAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZW1wdHkyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyMy1tZXJnZS1maWxlLnNoIGIvdC90NjAyMy1tZXJnZS1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQzMmYwODYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDIzLW1lcmdlLWZpbGUuc2gKQEAgLTAsMCArMSwyNjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdSQ1MgbWVyZ2UgcmVwbGFjZW1lbnQ6IG1lcmdlLWZpbGUnCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID4gb3JpZy50eHQgPDwgRU9GCitEb21pbnVzIHJlZ2l0IG1lLAorZXQgbmloaWwgbWloaSBkZWVyaXQuCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK3Byb3B0ZXIgbm9tZW4gc3V1bS4KK0VPRgorCitjYXQgPiBuZXcxLnR4dCA8PCBFT0YKK0RvbWludXMgcmVnaXQgbWUsCitldCBuaWhpbCBtaWhpIGRlZXJpdC4KK0luIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworYW5pbWFtIG1lYW0gY29udmVydGl0LAorZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorcHJvcHRlciBub21lbiBzdXVtLgorTmFtIGV0IHNpIGFtYnVsYXZlcm8gaW4gbWVkaW8gdW1icmFlIG1vcnRpcywKK25vbiB0aW1lYm8gbWFsYSwgcXVvbmlhbSB0dSBtZWN1bSBlczoKK3ZpcmdhIHR1YSBldCBiYWN1bHVzIHR1dXMgaXBzYSBtZSBjb25zb2xhdGEgc3VudC4KK0VPRgorCitjYXQgPiBuZXcyLnR4dCA8PCBFT0YKK0RvbWludXMgcmVnaXQgbWUsIGV0IG5paGlsIG1paGkgZGVlcml0LgorSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CithbmltYW0gbWVhbSBjb252ZXJ0aXQsCitkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCitwcm9wdGVyIG5vbWVuIHN1dW0uCitFT0YKKworY2F0ID4gbmV3My50eHQgPDwgRU9GCitET01JTlVTIHJlZ2l0IG1lLAorZXQgbmloaWwgbWloaSBkZWVyaXQuCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK3Byb3B0ZXIgbm9tZW4gc3V1bS4KK0VPRgorCitjYXQgPiBuZXc0LnR4dCA8PCBFT0YKK0RvbWludXMgcmVnaXQgbWUsIGV0IG5paGlsIG1paGkgZGVlcml0LgorSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CithbmltYW0gbWVhbSBjb252ZXJ0aXQsCitkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCitFT0YKK3ByaW50ZiAicHJvcHRlciBub21lbiBzdXVtLiIgPj4gbmV3NC50eHQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugd2l0aCBubyBjaGFuZ2VzJyAnCisJY3Agb3JpZy50eHQgdGVzdC50eHQgJiYKKwlnaXQgbWVyZ2UtZmlsZSB0ZXN0LnR4dCBvcmlnLnR4dCBvcmlnLnR4dCAmJgorCXRlc3RfY21wIHRlc3QudHh0IG9yaWcudHh0CisnCisKK2NwIG5ldzEudHh0IHRlc3QudHh0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtZXJnZSB3aXRob3V0IGNvbmZsaWN0IiBcCisJImdpdCBtZXJnZS1maWxlIHRlc3QudHh0IG9yaWcudHh0IG5ldzIudHh0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JrcyBpbiBzdWJkaXJlY3RvcnknICcKKwlta2RpciBkaXIgJiYKKwljcCBuZXcxLnR4dCBkaXIvYS50eHQgJiYKKwljcCBvcmlnLnR4dCBkaXIvby50eHQgJiYKKwljcCBuZXcyLnR4dCBkaXIvYi50eHQgJiYKKwkoIGNkIGRpciAmJiBnaXQgbWVyZ2UtZmlsZSBhLnR4dCBvLnR4dCBiLnR4dCApCisnCisKK2NwIG5ldzEudHh0IHRlc3QudHh0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtZXJnZSB3aXRob3V0IGNvbmZsaWN0ICgtLXF1aWV0KSIgXAorCSJnaXQgbWVyZ2UtZmlsZSAtLXF1aWV0IHRlc3QudHh0IG9yaWcudHh0IG5ldzIudHh0IgorCitjcCBuZXcxLnR4dCB0ZXN0Mi50eHQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHdpdGhvdXQgY29uZmxpY3QgKG1pc3NpbmcgTEYgYXQgRU9GKSIgXAorCSJnaXQgbWVyZ2UtZmlsZSB0ZXN0Mi50eHQgb3JpZy50eHQgbmV3Mi50eHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHJlc3VsdCBhZGRlZCBtaXNzaW5nIExGIiBcCisJInRlc3RfY21wIHRlc3QudHh0IHRlc3QyLnR4dCIKKworY3AgdGVzdC50eHQgYmFja3VwLnR4dAordGVzdF9leHBlY3Rfc3VjY2VzcyAibWVyZ2Ugd2l0aCBjb25mbGljdHMiIFwKKwkidGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgdGVzdC50eHQgb3JpZy50eHQgbmV3My50eHQiCisKK2NhdCA+IGV4cGVjdC50eHQgPDwgRU9GCis8PDw8PDw8IHRlc3QudHh0CitEb21pbnVzIHJlZ2l0IG1lLCBldCBuaWhpbCBtaWhpIGRlZXJpdC4KKz09PT09PT0KK0RPTUlOVVMgcmVnaXQgbWUsCitldCBuaWhpbCBtaWhpIGRlZXJpdC4KKz4+Pj4+Pj4gbmV3My50eHQKK0luIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworYW5pbWFtIG1lYW0gY29udmVydGl0LAorZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorcHJvcHRlciBub21lbiBzdXVtLgorTmFtIGV0IHNpIGFtYnVsYXZlcm8gaW4gbWVkaW8gdW1icmFlIG1vcnRpcywKK25vbiB0aW1lYm8gbWFsYSwgcXVvbmlhbSB0dSBtZWN1bSBlczoKK3ZpcmdhIHR1YSBldCBiYWN1bHVzIHR1dXMgaXBzYSBtZSBjb25zb2xhdGEgc3VudC4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJleHBlY3RlZCBjb25mbGljdCBtYXJrZXJzIiAidGVzdF9jbXAgdGVzdC50eHQgZXhwZWN0LnR4dCIKKworY3AgYmFja3VwLnR4dCB0ZXN0LnR4dAordGVzdF9leHBlY3Rfc3VjY2VzcyAibWVyZ2Ugd2l0aCBjb25mbGljdHMsIHVzaW5nIC1MIiBcCisJInRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC1MIDEgLUwgMiB0ZXN0LnR4dCBvcmlnLnR4dCBuZXczLnR4dCIKKworY2F0ID4gZXhwZWN0LnR4dCA8PCBFT0YKKzw8PDw8PDwgMQorRG9taW51cyByZWdpdCBtZSwgZXQgbmloaWwgbWloaSBkZWVyaXQuCis9PT09PT09CitET01JTlVTIHJlZ2l0IG1lLAorZXQgbmloaWwgbWloaSBkZWVyaXQuCis+Pj4+Pj4+IG5ldzMudHh0CitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK3Byb3B0ZXIgbm9tZW4gc3V1bS4KK05hbSBldCBzaSBhbWJ1bGF2ZXJvIGluIG1lZGlvIHVtYnJhZSBtb3J0aXMsCitub24gdGltZWJvIG1hbGEsIHF1b25pYW0gdHUgbWVjdW0gZXM6Cit2aXJnYSB0dWEgZXQgYmFjdWx1cyB0dXVzIGlwc2EgbWUgY29uc29sYXRhIHN1bnQuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZXhwZWN0ZWQgY29uZmxpY3QgbWFya2Vycywgd2l0aCAtTCIgXAorCSJ0ZXN0X2NtcCB0ZXN0LnR4dCBleHBlY3QudHh0IgorCitzZWQgInMvIHR1IC8gVFUgLyIgPCBuZXcxLnR4dCA+IG5ldzUudHh0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb25mbGljdCBpbiByZW1vdmVkIHRhaWwiIFwKKwkidGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLXAgb3JpZy50eHQgbmV3MS50eHQgbmV3NS50eHQgPiBvdXQiCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK0RvbWludXMgcmVnaXQgbWUsCitldCBuaWhpbCBtaWhpIGRlZXJpdC4KK0luIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworYW5pbWFtIG1lYW0gY29udmVydGl0LAorZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorcHJvcHRlciBub21lbiBzdXVtLgorPDw8PDw8PCBvcmlnLnR4dAorPT09PT09PQorTmFtIGV0IHNpIGFtYnVsYXZlcm8gaW4gbWVkaW8gdW1icmFlIG1vcnRpcywKK25vbiB0aW1lYm8gbWFsYSwgcXVvbmlhbSBUVSBtZWN1bSBlczoKK3ZpcmdhIHR1YSBldCBiYWN1bHVzIHR1dXMgaXBzYSBtZSBjb25zb2xhdGEgc3VudC4KKz4+Pj4+Pj4gbmV3NS50eHQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJleHBlY3RlZCBjb25mbGljdCBtYXJrZXJzIiAidGVzdF9jbXAgZXhwZWN0IG91dCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmluYXJ5IGZpbGVzIGNhbm5vdCBiZSBtZXJnZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSAtcCBcCisJCW9yaWcudHh0ICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nIG5ldzEudHh0IDI+IG1lcmdlLmVyciAmJgorCWdyZXAgIkNhbm5vdCBtZXJnZSBiaW5hcnkgZmlsZXMiIG1lcmdlLmVycgorJworCitzZWQgLWUgInMvZGVlcml0LlwkL2RlZXJpdDsvIiAtZSAicy9tZTtcJC9tZS4vIiA8IG5ldzUudHh0ID4gbmV3Ni50eHQKK3NlZCAtZSAicy9kZWVyaXQuXCQvZGVlcml0LC8iIC1lICJzL21lO1wkL21lLC8iIDwgbmV3NS50eHQgPiBuZXc3LnR4dAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNRVJHRV9aRUFMT1VTIHNpbXBsaWZpZXMgbm9uLWNvbmZsaWN0cycgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLXAgbmV3Ni50eHQgbmV3NS50eHQgbmV3Ny50eHQgPiBvdXRwdXQgJiYKKwl0ZXN0IDEgPSAkKGdyZXAgPT09PT09PSA8IG91dHB1dCB8IHdjIC1sKQorCisnCisKK3NlZCAtZSAncy9kZWVyaXQuLyYlJSUlLycgLWUgInMvbG9jYXZpdCwvbG9jYXZpdDsvIjwgbmV3Ni50eHQgfCB0ciAnJScgJ1wwMTInID4gbmV3OC50eHQKK3NlZCAtZSAncy9kZWVyaXQuLyYlJSUlLycgLWUgInMvbG9jYXZpdCwvbG9jYXZpdCAtLS8iIDwgbmV3Ny50eHQgfCB0ciAnJScgJ1wwMTInID4gbmV3OS50eHQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnWkVBTE9VU19BTE5VTScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLXAgXAorCQluZXc4LnR4dCBuZXc1LnR4dCBuZXc5LnR4dCA+IG1lcmdlLm91dCAmJgorCXRlc3QgMSA9ICQoZ3JlcCA9PT09PT09IDwgbWVyZ2Uub3V0IHwgd2MgLWwpCisKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitEb21pbnVzIHJlZ2l0IG1lLAorPDw8PDw8PCBuZXc4LnR4dAorZXQgbmloaWwgbWloaSBkZWVyaXQ7CisKKworCisKK0luIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdDsKK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lLgorfHx8fHx8fCBuZXc1LnR4dAorZXQgbmloaWwgbWloaSBkZWVyaXQuCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKKz09PT09PT0KK2V0IG5paGlsIG1paGkgZGVlcml0LAorCisKKworCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQgLS0KK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lLAorPj4+Pj4+PiBuZXc5LnR4dAorYW5pbWFtIG1lYW0gY29udmVydGl0LAorZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorcHJvcHRlciBub21lbiBzdXVtLgorTmFtIGV0IHNpIGFtYnVsYXZlcm8gaW4gbWVkaW8gdW1icmFlIG1vcnRpcywKK25vbiB0aW1lYm8gbWFsYSwgcXVvbmlhbSBUVSBtZWN1bSBlczoKK3ZpcmdhIHR1YSBldCBiYWN1bHVzIHR1dXMgaXBzYSBtZSBjb25zb2xhdGEgc3VudC4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZGlmZjMgLW0iIHN0eWxlIG91dHB1dCAoMSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSAtcCAtLWRpZmYzIFwKKwkJbmV3OC50eHQgbmV3NS50eHQgbmV3OS50eHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImRpZmYzIC1tIiBzdHlsZSBvdXRwdXQgKDIpJyAnCisJZ2l0IGNvbmZpZyBtZXJnZS5jb25mbGljdHN0eWxlIGRpZmYzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLXAgXAorCQluZXc4LnR4dCBuZXc1LnR4dCBuZXc5LnR4dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0RvbWludXMgcmVnaXQgbWUsCis8PDw8PDw8PDw8IG5ldzgudHh0CitldCBuaWhpbCBtaWhpIGRlZXJpdDsKKworCisKKworSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0Oworc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWUuCit8fHx8fHx8fHx8IG5ldzUudHh0CitldCBuaWhpbCBtaWhpIGRlZXJpdC4KK0luIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworPT09PT09PT09PQorZXQgbmloaWwgbWloaSBkZWVyaXQsCisKKworCisKK0luIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCAtLQorc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWUsCis+Pj4+Pj4+Pj4+IG5ldzkudHh0CithbmltYW0gbWVhbSBjb252ZXJ0aXQsCitkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCitwcm9wdGVyIG5vbWVuIHN1dW0uCitOYW0gZXQgc2kgYW1idWxhdmVybyBpbiBtZWRpbyB1bWJyYWUgbW9ydGlzLAorbm9uIHRpbWVibyBtYWxhLCBxdW9uaWFtIFRVIG1lY3VtIGVzOgordmlyZ2EgdHVhIGV0IGJhY3VsdXMgdHV1cyBpcHNhIG1lIGNvbnNvbGF0YSBzdW50LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hcmtlciBzaXplJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLXAgLS1tYXJrZXItc2l6ZT0xMCBcCisJCW5ldzgudHh0IG5ldzUudHh0IG5ldzkudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2ggYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NTVkMzBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2gKQEAgLTAsMCArMSwxMjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG1lcmdlIHdpdGhvdXQgY29tbW9uIGFuY2VzdG9ycycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoaXMgc2NlbmFyaW8gaXMgYmFzZWQgb24gYSByZWFsLXdvcmxkIHJlcG9zaXRvcnkgb2YgU2hhd24gUGVhcmNlLgorCisjIDEgLSBBIC0gRCAtIEYKKyMgICBcICAgWCAgIC8KKyMgICAgIEIgICBYCisjICAgICAgIFggICBcCisjIDIgLSBDIC0gRSAtIEcKKworR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjI4OjAwICswMTAwIgorZXhwb3J0IEdJVF9DT01NSVRURVJfREFURQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCB0ZXN0cyIgJworZWNobyAxID4gYTEgJiYKK2dpdCBhZGQgYTEgJiYKK0dJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMCIgZ2l0IGNvbW1pdCAtbSAxIGExICYmCisKK2dpdCBjaGVja291dCAtYiBBIG1hc3RlciAmJgorZWNobyBBID4gYTEgJiYKK0dJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMSIgZ2l0IGNvbW1pdCAtbSBBIGExICYmCisKK2dpdCBjaGVja291dCAtYiBCIG1hc3RlciAmJgorZWNobyBCID4gYTEgJiYKK0dJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMiIgZ2l0IGNvbW1pdCAtbSBCIGExICYmCisKK2dpdCBjaGVja291dCAtYiBEIEEgJiYKK2dpdCByZXYtcGFyc2UgQiA+IC5naXQvTUVSR0VfSEVBRCAmJgorZWNobyBEID4gYTEgJiYKK2dpdCB1cGRhdGUtaW5kZXggYTEgJiYKK0dJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMyIgZ2l0IGNvbW1pdCAtbSBEICYmCisKK2dpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL290aGVyICYmCitlY2hvIDIgPiBhMSAmJgorR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjA0IiBnaXQgY29tbWl0IC1tIDIgYTEgJiYKKworZ2l0IGNoZWNrb3V0IC1iIEMgJiYKK2VjaG8gQyA+IGExICYmCitHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDUiIGdpdCBjb21taXQgLW0gQyBhMSAmJgorCitnaXQgY2hlY2tvdXQgLWIgRSBDICYmCitnaXQgcmV2LXBhcnNlIEIgPiAuZ2l0L01FUkdFX0hFQUQgJiYKK2VjaG8gRSA+IGExICYmCitnaXQgdXBkYXRlLWluZGV4IGExICYmCitHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDYiIGdpdCBjb21taXQgLW0gRSAmJgorCitnaXQgY2hlY2tvdXQgLWIgRyBFICYmCitnaXQgcmV2LXBhcnNlIEEgPiAuZ2l0L01FUkdFX0hFQUQgJiYKK2VjaG8gRyA+IGExICYmCitnaXQgdXBkYXRlLWluZGV4IGExICYmCitHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDciIGdpdCBjb21taXQgLW0gRyAmJgorCitnaXQgY2hlY2tvdXQgLWIgRiBEICYmCitnaXQgcmV2LXBhcnNlIEMgPiAuZ2l0L01FUkdFX0hFQUQgJiYKK2VjaG8gRiA+IGExICYmCitnaXQgdXBkYXRlLWluZGV4IGExICYmCitHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDgiIGdpdCBjb21taXQgLW0gRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21iaW5lZCBtZXJnZSBjb25mbGljdHMiICIKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLW0gZmluYWwgRworIgorCitjYXQgPiBleHBlY3QgPDwgRU9GCis8PDw8PDw8IEhFQUQKK0YKKz09PT09PT0KK0cKKz4+Pj4+Pj4gRworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlc3VsdCBjb250YWlucyBhIGNvbmZsaWN0IiAidGVzdF9jbXAgZXhwZWN0IGExIgorCitnaXQgbHMtZmlsZXMgLS1zdGFnZSA+IG91dAorY2F0ID4gZXhwZWN0IDw8IEVPRgorMTAwNjQ0IDQzOWNjNDZkZTc3M2Q4YTgzYzc3Nzk5YjdjYzkxOTFjMTI4YmZjZmYgMQlhMQorMTAwNjQ0IGNmODQ0NDNlNDllMWIzNjZmYWM5Mzg3MTFkZGY0YmUyZDRkMWQ5ZTkgMglhMQorMTAwNjQ0IGZkNzkyMzUyOTg1NWQwYjI3NDc5NWFlMzM0OWM1ZTA0MzgzMzM5NzkgMwlhMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInZpcnR1YWwgdHJlZXMgd2VyZSBwcm9jZXNzZWQiICJ0ZXN0X2NtcCBleHBlY3Qgb3V0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgdG8gbWVyZ2UgYmluYXJ5IGZpbGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXByaW50ZiAiXDAiID4gYmluYXJ5LWZpbGUgJiYKKwlnaXQgYWRkIGJpbmFyeS1maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiaW5hcnkgJiYKKwlnaXQgY2hlY2tvdXQgRyAmJgorCXByaW50ZiAiXDBcMCIgPiBiaW5hcnktZmlsZSAmJgorCWdpdCBhZGQgYmluYXJ5LWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJpbmFyeTIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRiA+IG1lcmdlLm91dCAyPiBtZXJnZS5lcnIgJiYKKwlncmVwICJDYW5ub3QgbWVyZ2UgYmluYXJ5IGZpbGVzOiBiaW5hcnktZmlsZSAoSEVBRCB2cy4gRikiIG1lcmdlLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXJrIHJlbmFtZS9kZWxldGUgYXMgdW5tZXJnZWQnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGVsZXRlICYmCisJZ2l0IHJtIGExICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBkZWxldGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lIEhFQUReICYmCisJZ2l0IG12IGExIGEyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZGVsZXRlICYmCisJdGVzdCAxID0gJChnaXQgbHMtZmlsZXMgLS11bm1lcmdlZCB8IHdjIC1sKSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOjI6YTIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDozOmEyICYmCisJZ2l0IGNoZWNrb3V0IC1mIGRlbGV0ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSByZW5hbWUgJiYKKwl0ZXN0IDEgPSAkKGdpdCBscy1maWxlcyAtLXVubWVyZ2VkIHwgd2MgLWwpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6MjphMiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOjM6YTIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjUtbWVyZ2Utc3ltbGlua3Muc2ggYi90L3Q2MDI1LW1lcmdlLXN5bWxpbmtzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQzM2M0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDI1LW1lcmdlLXN5bWxpbmtzLnNoCkBAIC0wLDAgKzEsNjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgU2l4dAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnaW5nIHN5bWxpbmtzIG9uIGZpbGVzeXN0ZW0gdy9vIHN5bWxpbmsgc3VwcG9ydC4KKworVGhpcyB0ZXN0cyB0aGF0IGdpdCBtZXJnZS1yZWN1cnNpdmUgd3JpdGVzIG1lcmdlIHJlc3VsdHMgYXMgcGxhaW4gZmlsZXMKK2lmIGNvcmUuc3ltbGlua3MgaXMgZmFsc2UuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnc2V0dXAnICcKK2dpdCBjb25maWcgY29yZS5zeW1saW5rcyBmYWxzZSAmJgorPiBmaWxlICYmCitnaXQgYWRkIGZpbGUgJiYKK2dpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorZ2l0IGJyYW5jaCBiLXN5bWxpbmsgJiYKK2dpdCBicmFuY2ggYi1maWxlICYmCitsPSQocHJpbnRmIGZpbGUgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyAtLXN0ZGluKSAmJgorZWNobyAiMTIwMDAwICRsCXN5bWxpbmsiIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKK2dpdCBjb21taXQgLW0gbWFzdGVyICYmCitnaXQgY2hlY2tvdXQgYi1zeW1saW5rICYmCitsPSQocHJpbnRmIGZpbGUtZGlmZmVyZW50IHwgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgLS1zdGRpbikgJiYKK2VjaG8gIjEyMDAwMCAkbAlzeW1saW5rIiB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCitnaXQgY29tbWl0IC1tIGItc3ltbGluayAmJgorZ2l0IGNoZWNrb3V0IGItZmlsZSAmJgorZWNobyBwbGFpbi1maWxlID4gc3ltbGluayAmJgorZ2l0IGFkZCBzeW1saW5rICYmCitnaXQgY29tbWl0IC1tIGItZmlsZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnbWVyZ2UgbWFzdGVyIGludG8gYi1zeW1saW5rLCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgc3ltYm9saWMgbGluaycgJworZ2l0IGNoZWNrb3V0IGItc3ltbGluayAmJgordGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisndGhlIG1lcmdlIHJlc3VsdCBtdXN0IGJlIGEgZmlsZScgJwordGVzdCAtZiBzeW1saW5rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydtZXJnZSBtYXN0ZXIgaW50byBiLWZpbGUsIHdoaWNoIGhhcyBhIGZpbGUgaW5zdGVhZCBvZiBhIHN5bWJvbGljIGxpbmsnICcKK2dpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGItZmlsZSAmJgordGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisndGhlIG1lcmdlIHJlc3VsdCBtdXN0IGJlIGEgZmlsZScgJwordGVzdCAtZiBzeW1saW5rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydtZXJnZSBiLWZpbGUsIHdoaWNoIGhhcyBhIGZpbGUgaW5zdGVhZCBvZiBhIHN5bWJvbGljIGxpbmssIGludG8gbWFzdGVyJyAnCitnaXQgcmVzZXQgLS1oYXJkICYmCitnaXQgY2hlY2tvdXQgbWFzdGVyICYmCit0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYi1maWxlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyd0aGUgbWVyZ2UgcmVzdWx0IG11c3QgYmUgYSBmaWxlJyAnCit0ZXN0IC1mIHN5bWxpbmsnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyNi1tZXJnZS1hdHRyLnNoIGIvdC90NjAyNi1tZXJnZS1hdHRyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlNDM5OTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDI2LW1lcmdlLWF0dHIuc2gKQEAgLTAsMCArMSwxNzkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVyIHBhdGggbWVyZ2UgY29udHJvbGxlZCBieSBtZXJnZSBhdHRyaWJ1dGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZvciBmIGluIHRleHQgYmluYXJ5IHVuaW9uCisJZG8KKwkJZWNobyBJbml0aWFsID4kZiAmJiBnaXQgYWRkICRmIHx8IGJyZWFrCisJZG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZm9yIGYgaW4gdGV4dCBiaW5hcnkgdW5pb24KKwlkbworCQllY2hvIE1hc3RlciA+PiRmICYmIGdpdCBhZGQgJGYgfHwgYnJlYWsKKwlkb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBNYXN0ZXIgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJZm9yIGYgaW4gdGV4dCBiaW5hcnkgdW5pb24KKwlkbworCQllY2hvIFNpZGUgPj4kZiAmJiBnaXQgYWRkICRmIHx8IGJyZWFrCisJZG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gU2lkZSAmJgorCisJZ2l0IHRhZyBhbmNob3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBtZXJnZSAnCisKKwl7CisJCWVjaG8gImJpbmFyeSAtbWVyZ2UiCisJCWVjaG8gInVuaW9uIG1lcmdlPXVuaW9uIgorCX0gPi5naXRhdHRyaWJ1dGVzICYmCisKKwlpZiBnaXQgbWVyZ2UgbWFzdGVyCisJdGhlbgorCQllY2hvIEdhYWgsIHNob3VsZCBoYXZlIGNvbmZsaWN0ZWQKKwkJZmFsc2UKKwllbHNlCisJCWVjaG8gT2ssIGNvbmZsaWN0ZWQuCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbWVyZ2UgcmVzdWx0IGluIGluZGV4JyAnCisKKwlnaXQgbHMtZmlsZXMgLXUgfCBncmVwIGJpbmFyeSAmJgorCWdpdCBscy1maWxlcyAtdSB8IGdyZXAgdGV4dCAmJgorCSEgKGdpdCBscy1maWxlcyAtdSB8IGdyZXAgdW5pb24pCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbWVyZ2UgcmVzdWx0IGluIHdvcmtpbmcgdHJlZScgJworCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQ6YmluYXJ5ID5iaW5hcnktb3JpZyAmJgorCWdyZXAgIjw8PDw8PDwiIHRleHQgJiYKKwljbXAgYmluYXJ5LW9yaWcgYmluYXJ5ICYmCisJISBncmVwICI8PDw8PDw8IiB1bmlvbiAmJgorCWdyZXAgTWFzdGVyIHVuaW9uICYmCisJZ3JlcCBTaWRlIHVuaW9uCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV0cnkgdGhlIG1lcmdlIHdpdGggbG9uZ2VyIGNvbnRleHQnICcKKwllY2hvIHRleHQgY29uZmxpY3QtbWFya2VyLXNpemU9MzIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjaGVja291dCAtbSB0ZXh0ICYmCisJc2VkIC1uZSAiL15cKFs8PT5dXClcMVwxXDEqL3sKKwkJcy8gLiokLy8KKwkJcAorCX0iID5hY3R1YWwgdGV4dCAmJgorCWdyZXAgIj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IiBhY3R1YWwgJiYKKwlncmVwICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgYWN0dWFsICYmCisJZ3JlcCAiPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwiIGFjdHVhbAorJworCitjYXQgPi4vY3VzdG9tLW1lcmdlIDw8XEVPRgorIyEvYmluL3NoCisKK29yaWc9IiQxIiBvdXJzPSIkMiIgdGhlaXJzPSIkMyIgZXhpdD0iJDQiCisoCisJZWNobyAib3JpZyBpcyAkb3JpZyIKKwllY2hvICJvdXJzIGlzICRvdXJzIgorCWVjaG8gInRoZWlycyBpcyAkdGhlaXJzIgorCWVjaG8gIj09PSBvcmlnID09PSIKKwljYXQgIiRvcmlnIgorCWVjaG8gIj09PSBvdXJzID09PSIKKwljYXQgIiRvdXJzIgorCWVjaG8gIj09PSB0aGVpcnMgPT09IgorCWNhdCAiJHRoZWlycyIKKykgPiIkb3VycysiCitjYXQgIiRvdXJzKyIgPiIkb3VycyIKK3JtIC1mICIkb3VycysiCitleGl0ICIkZXhpdCIKK0VPRgorY2htb2QgK3ggLi9jdXN0b20tbWVyZ2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIG1lcmdlIGJhY2tlbmQnICcKKworCWVjaG8gIiogbWVyZ2U9dW5pb24iID4uZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gInRleHQgbWVyZ2U9Y3VzdG9tIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvciAmJgorCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBcCisJbWVyZ2UuY3VzdG9tLmRyaXZlciAiLi9jdXN0b20tbWVyZ2UgJU8gJUEgJUIgMCIgJiYKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgXAorCW1lcmdlLmN1c3RvbS5uYW1lICJjdXN0b20gbWVyZ2UgZHJpdmVyIGZvciB0ZXN0aW5nIiAmJgorCisJZ2l0IG1lcmdlIG1hc3RlciAmJgorCisJY21wIGJpbmFyeSB1bmlvbiAmJgorCXNlZCAtZSAxLDNkIHRleHQgPmNoZWNrLTEgJiYKKwlvPSQoZ2l0IHVucGFjay1maWxlIG1hc3Rlcl46dGV4dCkgJiYKKwlhPSQoZ2l0IHVucGFjay1maWxlIHNpZGVeOnRleHQpICYmCisJYj0kKGdpdCB1bnBhY2stZmlsZSBtYXN0ZXI6dGV4dCkgJiYKKwlzaCAtYyAiLi9jdXN0b20tbWVyZ2UgJG8gJGEgJGIgMCIgJiYKKwlzZWQgLWUgMSwzZCAkYSA+Y2hlY2stMiAmJgorCWNtcCBjaGVjay0xIGNoZWNrLTIgJiYKKwlybSAtZiAkbyAkYSAkYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdXN0b20gbWVyZ2UgYmFja2VuZCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCBhbmNob3IgJiYKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgXAorCW1lcmdlLmN1c3RvbS5kcml2ZXIgIi4vY3VzdG9tLW1lcmdlICVPICVBICVCIDEiICYmCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIFwKKwltZXJnZS5jdXN0b20ubmFtZSAiY3VzdG9tIG1lcmdlIGRyaXZlciBmb3IgdGVzdGluZyIgJiYKKworCWlmIGdpdCBtZXJnZSBtYXN0ZXIKKwl0aGVuCisJCWVjaG8gIkVoPyBzaG91bGQgaGF2ZSBjb25mbGljdGVkIgorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiT2ssIGNvbmZsaWN0ZWQiCisJZmkgJiYKKworCWNtcCBiaW5hcnkgdW5pb24gJiYKKwlzZWQgLWUgMSwzZCB0ZXh0ID5jaGVjay0xICYmCisJbz0kKGdpdCB1bnBhY2stZmlsZSBtYXN0ZXJeOnRleHQpICYmCisJYT0kKGdpdCB1bnBhY2stZmlsZSBhbmNob3I6dGV4dCkgJiYKKwliPSQoZ2l0IHVucGFjay1maWxlIG1hc3Rlcjp0ZXh0KSAmJgorCXNoIC1jICIuL2N1c3RvbS1tZXJnZSAkbyAkYSAkYiAwIiAmJgorCXNlZCAtZSAxLDNkICRhID5jaGVjay0yICYmCisJY21wIGNoZWNrLTEgY2hlY2stMiAmJgorCXJtIC1mICRvICRhICRiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwLXRvLWRhdGUgbWVyZ2Ugd2l0aG91dCBjb21tb24gYW5jZXN0b3InICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8xICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvMiAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJY2QgcmVwbzEgJiYKKwkJPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0gaW5pdGlhbAorCSkgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCWNkIHJlcG8yICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBpbml0aWFsCisJKSAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJY2QgcmVwbzEgJiYKKwkJZ2l0IHB1bGwgLi4vcmVwbzIgbWFzdGVyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjctbWVyZ2UtYmluYXJ5LnNoIGIvdC90NjAyNy1tZXJnZS1iaW5hcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDc3MzU0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjctbWVyZ2UtYmluYXJ5LnNoCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhc2sgbWVyZ2UtcmVjdXJzaXZlIHRvIG1lcmdlIGJpbmFyeSBmaWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nID5tICYmCisJZ2l0IGFkZCBtICYmCisJZ2l0IGxzLWZpbGVzIC1zIHwgc2VkIC1lICJzLyAwCS8gMQkvIiA+RTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIiAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZWNobyBmcm90eiA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWVjaG8gbml0Zm9sID4+bSAmJgorCWdpdCBhZGQgYSBtICYmCisJZ2l0IGxzLWZpbGVzIC1zIGEgPkUwICYmCisJZ2l0IGxzLWZpbGVzIC1zIG0gfCBzZWQgLWUgInMvIDAJLyAzCS8iID5FMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIm1hc3RlciBhZGRzIHNvbWUiICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWVjaG8gcmV6cm92ID4+bSAmJgorCWdpdCBhZGQgbSAmJgorCWdpdCBscy1maWxlcyAtcyBtIHwgc2VkIC1lICJzLyAwCS8gMgkvIiA+RTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzaWRlIG1vZGlmaWVzIiAmJgorCisJZ2l0IHRhZyBhbmNob3IgJiYKKworCWNhdCBFMCBFMSBFMiBFMyA+ZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcmVzb2x2ZSAnCisKKwlybSAtZiBhKiBtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgYW5jaG9yICYmCisKKwlpZiBnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBtYXN0ZXIKKwl0aGVuCisJCWVjaG8gT29wcywgc2hvdWxkIG5vdCBoYXZlIHN1Y2NlZWRlZAorCQlmYWxzZQorCWVsc2UKKwkJZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50CisJCXRlc3RfY21wIGN1cnJlbnQgZXhwZWN0CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyByZWN1cnNpdmUgJworCisJcm0gLWYgYSogbSogJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvciAmJgorCisJaWYgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBtYXN0ZXIKKwl0aGVuCisJCWVjaG8gT29wcywgc2hvdWxkIG5vdCBoYXZlIHN1Y2NlZWRlZAorCQlmYWxzZQorCWVsc2UKKwkJZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50CisJCXRlc3RfY21wIGN1cnJlbnQgZXhwZWN0CisJZmkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDI4LW1lcmdlLXVwLXRvLWRhdGUuc2ggYi90L3Q2MDI4LW1lcmdlLXVwLXRvLWRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzUxOGU5YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjgtbWVyZ2UtdXAtdG8tZGF0ZS5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UgZmFzdC1mb3J3YXJkIGFuZCB1cCB0byBkYXRlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGMwICYmCisKKwllY2hvIHNlY29uZCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZ2l0IHRhZyBjMSAmJgorCWdpdCBicmFuY2ggdGVzdCAmJgorCWVjaG8gdGhpcmQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkICYmCisJZ2l0IHRhZyBjMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtcyByZWN1cnNpdmUgdXAtdG8tZGF0ZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgYzAgJiYKKwlleHBlY3Q9JChnaXQgcmV2LXBhcnNlIGMxKSAmJgorCWN1cnJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdCAiJGV4cGVjdCIgPSAiJGN1cnJlbnQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLXMgcmVjdXJzaXZlIGZhc3QtZm9yd2FyZCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgYzEgJiYKKwlleHBlY3Q9JChnaXQgcmV2LXBhcnNlIGMxKSAmJgorCWN1cnJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdCAiJGV4cGVjdCIgPSAiJGN1cnJlbnQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLXMgb3VycyB1cC10by1kYXRlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgYzAgJiYKKwlleHBlY3Q9JChnaXQgcmV2LXBhcnNlIGMxKSAmJgorCWN1cnJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdCAiJGV4cGVjdCIgPSAiJGN1cnJlbnQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLXMgb3VycyBmYXN0LWZvcndhcmQnICcKKworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBjMSAmJgorCWV4cGVjdD0kKGdpdCByZXYtcGFyc2UgYzBee3RyZWV9KSAmJgorCWN1cnJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCXRlc3QgIiRleHBlY3QiID0gIiRjdXJyZW50IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC1zIHN1YnRyZWUgdXAtdG8tZGF0ZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtcyBzdWJ0cmVlIGMwICYmCisJZXhwZWN0PSQoZ2l0IHJldi1wYXJzZSBjMSkgJiYKKwljdXJyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgIiRleHBlY3QiID0gIiRjdXJyZW50IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZhc3QtZm9yd2FyZCBvY3RvcHVzJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIGMxIGMyCisJZXhwZWN0PSQoZ2l0IHJldi1wYXJzZSBjMikgJiYKKwljdXJyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgIiRleHBlY3QiID0gIiRjdXJyZW50IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjktbWVyZ2Utc3VidHJlZS5zaCBiL3QvdDYwMjktbWVyZ2Utc3VidHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43M2ZjMjQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAyOS1tZXJnZS1zdWJ0cmVlLnNoCkBAIC0wLDAgKzEsMTI0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3VidHJlZSBtZXJnZSBzdHJhdGVneScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJcz0iMSAyIDMgNCA1IDYgNyA4IiAmJgorCWZvciBpIGluICRzOyBkbyBlY2hvICRpOyBkb25lID5oZWxsbyAmJgorCWdpdCBhZGQgaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gPj5oZWxsbyB3b3JsZCAmJgorCWdpdCBhZGQgaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlmb3IgaSBpbiBtdW5kbyAkczsgZG8gZWNobyAkaTsgZG9uZSA+aGVsbG8gJiYKKwlnaXQgYWRkIGhlbGxvICYmCisJZ2l0IGNvbW1pdCAtbSBtYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJ0cmVlIGF2YWlsYWJsZSBhbmQgd29ya3MgbGlrZSByZWN1cnNpdmUnICcKKworCWdpdCBtZXJnZSAtcyBzdWJ0cmVlIHNpZGUgJiYKKwlmb3IgaSBpbiBtdW5kbyAkcyB3b3JsZDsgZG8gZWNobyAkaTsgZG9uZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlbGxvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBnaXQtZ3VpICYmCisJY2QgZ2l0LWd1aSAmJgorCWdpdCBpbml0ICYmCisJZWNobyBnaXQtZ3VpID4gZ2l0LWd1aS5zaCAmJgorCW8xPSQoZ2l0IGhhc2gtb2JqZWN0IGdpdC1ndWkuc2gpICYmCisJZ2l0IGFkZCBnaXQtZ3VpLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBnaXQtZ3VpIiAmJgorCWNkIC4uICYmCisJbWtkaXIgZ2l0ICYmCisJY2QgZ2l0ICYmCisJZ2l0IGluaXQgJiYKKwllY2hvIGdpdCA+Z2l0LmMgJiYKKwlvMj0kKGdpdCBoYXNoLW9iamVjdCBnaXQuYykgJiYKKwlnaXQgYWRkIGdpdC5jICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBnaXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgbWVyZ2UnICcKKwlnaXQgcmVtb3RlIGFkZCAtZiBndWkgLi4vZ2l0LWd1aSAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIC0tbm8tY29tbWl0IGd1aS9tYXN0ZXIgJiYKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PWdpdC1ndWkvIC11IGd1aS9tYXN0ZXIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSBnaXQtZ3VpIGFzIG91ciBzdWJkaXJlY3RvcnkiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHdvcmsgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIKKwkJZWNobyAiMTAwNjQ0ICRvMiAwCWdpdC5jIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHVwZGF0ZScgJworCWNkIC4uL2dpdC1ndWkgJiYKKwllY2hvIGdpdC1ndWkyID4gZ2l0LWd1aS5zaCAmJgorCW8zPSQoZ2l0IGhhc2gtb2JqZWN0IGdpdC1ndWkuc2gpICYmCisJZ2l0IGFkZCBnaXQtZ3VpLnNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlcjIgJiYKKwlnaXQgY29tbWl0IC1tICJ1cGRhdGUgZ2l0LWd1aSIgJiYKKwljZCAuLi9naXQgJiYKKwlnaXQgcHVsbCAtcyBzdWJ0cmVlIGd1aSBtYXN0ZXIyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzMgMAlnaXQtZ3VpL2dpdC1ndWkuc2giCisJCWVjaG8gIjEwMDY0NCAkbzIgMAlnaXQuYyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsIGFtYmlndW91cyBzdWJ0cmVlJyAnCisJY2QgLi4vZ2l0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyMiAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIC0tbm8tY29tbWl0IGd1aS9tYXN0ZXIgJiYKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PWdpdC1ndWkyLyAtdSBndWkvbWFzdGVyICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgZ2l0LWd1aTIgYXMgb3VyIHN1YmRpcmVjdG9yeSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgd29yazIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWdpdC1ndWkyL2dpdC1ndWkuc2giCisJCWVjaG8gIjEwMDY0NCAkbzIgMAlnaXQuYyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB1c2luZyBleHBsaWNpdCcgJworCWNkIC4uL2dpdCAmJgorCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyMiAmJgorCWdpdCBwdWxsIC1Yc3VidHJlZT1naXQtZ3VpIGd1aSBtYXN0ZXIyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzMgMAlnaXQtZ3VpL2dpdC1ndWkuc2giCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlnaXQtZ3VpMi9naXQtZ3VpLnNoIgorCQllY2hvICIxMDA2NDQgJG8yIDAJZ2l0LmMiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UyIHVzaW5nIGV4cGxpY2l0JyAnCisJY2QgLi4vZ2l0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIyICYmCisJZ2l0IHB1bGwgLVhzdWJ0cmVlPWdpdC1ndWkyIGd1aSBtYXN0ZXIyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlnaXQtZ3VpL2dpdC1ndWkuc2giCisJCWVjaG8gIjEwMDY0NCAkbzMgMAlnaXQtZ3VpMi9naXQtZ3VpLnNoIgorCQllY2hvICIxMDA2NDQgJG8yIDAJZ2l0LmMiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2ggYi90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzJlMjhlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaApAQCAtMCwwICsxLDc0NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBDaHJpc3RpYW4gQ291ZGVyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBnaXQgYmlzZWN0IGZ1bmN0aW9uYWxpdHknCisKK2V4ZWMgPC9kZXYvbnVsbAorCisuIC4vdGVzdC1saWIuc2gKKworYWRkX2xpbmVfaW50b19maWxlKCkKK3sKKyAgICBfbGluZT0kMQorICAgIF9maWxlPSQyCisKKyAgICBpZiBbIC1mICIkX2ZpbGUiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJF9saW5lIiA+PiAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQWRkIDwkX2xpbmU+IGludG8gPCRfZmlsZT4uIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJF9saW5lIiA+ICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICAgICAgZ2l0IGFkZCAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQ3JlYXRlIGZpbGUgPCRfZmlsZT4gd2l0aCA8JF9saW5lPiBpbnNpZGUuIgorICAgIGZpCisKKyAgICB0ZXN0X3RpY2sKKyAgICBnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRNU0ciICRfZmlsZQorfQorCitIQVNIMT0KK0hBU0gyPQorSEFTSDM9CitIQVNIND0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG8gd2l0aCAxIGZpbGUgKGhlbGxvKSBhbmQgNCBjb21taXRzJyAnCisgICAgIGFkZF9saW5lX2ludG9fZmlsZSAiMTogSGVsbG8gV29ybGQiIGhlbGxvICYmCisgICAgIEhBU0gxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBhZGRfbGluZV9pbnRvX2ZpbGUgIjI6IEEgbmV3IGRheSBmb3IgZ2l0IiBoZWxsbyAmJgorICAgICBIQVNIMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgYWRkX2xpbmVfaW50b19maWxlICIzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdCIgaGVsbG8gJiYKKyAgICAgSEFTSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGFkZF9saW5lX2ludG9fZmlsZSAiNDogQ2lhbyBmb3Igbm93IiBoZWxsbyAmJgorICAgICBIQVNIND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0cyB3aXRoIG9ubHkgb25lIGJhZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisJZ2l0IGJpc2VjdCBuZXh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBkb2VzIG5vdCBzdGFydCB3aXRoIG9ubHkgb25lIGdvb2QnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgfHwgcmV0dXJuIDEKKworCWlmIGdpdCBiaXNlY3QgbmV4dAorCXRoZW4KKwkJZWNobyBPb3BzLCBzaG91bGQgaGF2ZSBmYWlsZWQuCisJCWZhbHNlCisJZWxzZQorCQk6CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0IHdpdGggb25lIGJhZCBhbmQgZ29vZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgYmFkICRIQVNINCAmJgorCWdpdCBiaXNlY3QgbmV4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZmFpbHMgaWYgZ2l2ZW4gYW55IGp1bmsgaW5zdGVhZCBvZiByZXZzJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgZm9vICRIQVNIMSAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSBiYXIgLS0gJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvYmlzZWN0LyoiKSIgJiYKKwl0ZXN0IC16ICIkKGxzIC5naXQvQklTRUNUXyogMj4vZGV2L251bGwpIiAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGdvb2QgZm9vICRIQVNIMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBiYWQgZnJvdHogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCAkSEFTSDMgJEhBU0g0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBza2lwIGJhciAkSEFTSDMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHNraXAgJEhBU0gxIGZvbyAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9iaXNlY3QvKiIpIiAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0OiBiYWNrIGluIHRoZSBtYXN0ZXIgYnJhbmNoJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWVjaG8gIiogbWFzdGVyIiA+IGJyYW5jaC5leHBlY3QgJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWNtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0OiBiYWNrIGluIGFub3RoZXIgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDMgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZWNobyAiICBtYXN0ZXIiID4gYnJhbmNoLmV4cGVjdCAmJgorCWVjaG8gIiogb3RoZXIiID4+IGJyYW5jaC5leHBlY3QgJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWNtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0IHdoZW4gbm90IGJpc2VjdGluZycgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWNtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0IHJlbW92ZXMgcGFja2VkIHJlZnMnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwlnaXQgYmlzZWN0IG5leHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2Jpc2VjdC8qIikiICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2hlYWRzL2Jpc2VjdCIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVzZXQgcmVtb3ZlcyBiaXNlY3Qgc3RhdGUgYWZ0ZXIgLS1uby1jaGVja291dCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IC0tbm8tY2hlY2tvdXQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBiYWQgJEhBU0gzICYmCisJZ2l0IGJpc2VjdCBuZXh0ICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9iaXNlY3QvKiIpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9oZWFkcy9iaXNlY3QiKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgIkJJU0VDVF9IRUFEIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydDogYmFjayBpbiBnb29kIGJyYW5jaCcgJworCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgY3JlYXRlZCBpZiBqdW5rIHJldicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCBmb28gLS0gJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWdyZXAgIiogb3RoZXIiIGJyYW5jaC5vdXRwdXQgPiAvZGV2L251bGwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1lIC5naXQvQklTRUNUX1NUQVJUCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydDogZXhpc3RpbmcgIi5naXQvQklTRUNUX1NUQVJUIiBub3QgbW9kaWZpZWQgaWYganVuayByZXYnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgLS0gJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwljcCAuZ2l0L0JJU0VDVF9TVEFSVCBzYXZlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0IGZvbyAtLSAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiKiAobm8gYnJhbmNoKSIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCXRlc3RfY21wIHNhdmVkIC5naXQvQklTRUNUX1NUQVJUCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgaWYgbWlzdGFrZW4gcmV2JyAnCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDEgJEhBU0g0IC0tICYmCisJZ2l0IGJyYW5jaCA+IGJyYW5jaC5vdXRwdXQgJiYKKwlncmVwICIqIG90aGVyIiBicmFuY2gub3V0cHV0ID4gL2Rldi9udWxsICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZSAuZ2l0L0JJU0VDVF9TVEFSVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgaWYgY2hlY2tvdXQgZXJyb3InICcKKwllY2hvICJ0ZW1wIHN0dWZmIiA+IGhlbGxvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJyYW5jaCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWUgLmdpdC9CSVNFQ1RfU1RBUlQgJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvYmlzZWN0LyoiKSIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCBoZWxsbworJworCisjICRIQVNIMSBpcyBnb29kLCAkSEFTSDQgaXMgYmFkLCB3ZSBza2lwICRIQVNIMworIyBidXQgJEhBU0gyIGlzIGJhZCwKKyMgc28gd2Ugc2hvdWxkIGZpbmQgJEhBU0gyIGFzIHRoZSBmaXJzdCBiYWQgY29tbWl0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcDogc3VjY2Vzc2Z1bGwgcmVzdWx0JyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgorCWdpdCBiaXNlY3Qgc2tpcCAmJgorCWdpdCBiaXNlY3QgYmFkID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDIgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCisjICRIQVNIMSBpcyBnb29kLCAkSEFTSDQgaXMgYmFkLCB3ZSBza2lwICRIQVNIMyBhbmQgJEhBU0gyCisjIHNvIHdlIHNob3VsZCBub3QgYmUgYWJsZSB0byB0ZWxsIHRoZSBmaXJzdCBiYWQgY29tbWl0CisjIGFtb25nICRIQVNIMiwgJEhBU0gzIGFuZCAkSEFTSDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBza2lwOiBjYW5ub3QgdGVsbCBiZXR3ZWVuIDMgY29tbWl0cycgJworCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgorCWdpdCBiaXNlY3Qgc2tpcCB8fCByZXR1cm4gMQorCisJaWYgZ2l0IGJpc2VjdCBza2lwID4gbXlfYmlzZWN0X2xvZy50eHQKKwl0aGVuCisJCWVjaG8gT29wcywgc2hvdWxkIGhhdmUgZmFpbGVkLgorCQlmYWxzZQorCWVsc2UKKwkJdGVzdCAkPyAtZXEgMiAmJgorCQlncmVwICJmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZiIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJISBncmVwICRIQVNIMSBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQlncmVwICRIQVNIMiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQlncmVwICRIQVNIMyBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQlncmVwICRIQVNINCBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQlnaXQgYmlzZWN0IHJlc2V0CisJZmkKKycKKworIyAkSEFTSDEgaXMgZ29vZCwgJEhBU0g0IGlzIGJhZCwgd2Ugc2tpcCAkSEFTSDMKKyMgYnV0ICRIQVNIMiBpcyBnb29kLAorIyBzbyB3ZSBzaG91bGQgbm90IGJlIGFibGUgdG8gdGVsbCB0aGUgZmlyc3QgYmFkIGNvbW1pdAorIyBhbW9uZyAkSEFTSDMgYW5kICRIQVNINAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXA6IGNhbm5vdCB0ZWxsIGJldHdlZW4gMiBjb21taXRzJyAnCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwIHx8IHJldHVybiAxCisKKwlpZiBnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dAorCXRoZW4KKwkJZWNobyBPb3BzLCBzaG91bGQgaGF2ZSBmYWlsZWQuCisJCWZhbHNlCisJZWxzZQorCQl0ZXN0ICQ/IC1lcSAyICYmCisJCWdyZXAgImZpcnN0IGJhZCBjb21taXQgY291bGQgYmUgYW55IG9mIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQkhIGdyZXAgJEhBU0gxIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJCSEgZ3JlcCAkSEFTSDIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJZ3JlcCAkSEFTSDMgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJZ2l0IGJpc2VjdCByZXNldAorCWZpCisnCisKKyMgJEhBU0gxIGlzIGdvb2QsICRIQVNINCBpcyBib3RoIHNraXBwZWQgYW5kIGJhZCwgd2Ugc2tpcCAkSEFTSDMKKyMgYW5kICRIQVNIMiBpcyBnb29kLAorIyBzbyB3ZSBzaG91bGQgbm90IGJlIGFibGUgdG8gdGVsbCB0aGUgZmlyc3QgYmFkIGNvbW1pdAorIyBhbW9uZyAkSEFTSDMgYW5kICRIQVNINAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXA6IHdpdGggY29tbWl0IGJvdGggYmFkIGFuZCBza2lwcGVkJyAnCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3Qgc2tpcCAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCWdpdCBiaXNlY3Qgc2tpcCAmJgorCWlmIGdpdCBiaXNlY3QgZ29vZCA+IG15X2Jpc2VjdF9sb2cudHh0CisJdGhlbgorCQllY2hvIE9vcHMsIHNob3VsZCBoYXZlIGZhaWxlZC4KKwkJZmFsc2UKKwllbHNlCisJCXRlc3QgJD8gLWVxIDIgJiYKKwkJZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJCSEgZ3JlcCAkSEFTSDEgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJISBncmVwICRIQVNIMiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQlncmVwICRIQVNIMyBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQlncmVwICRIQVNINCBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQlnaXQgYmlzZWN0IHJlc2V0CisJZmkKKycKKworIyBXZSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZmluZCB0aGUgY29tbWl0IHRoYXQKKyMgaW50cm9kdWNlZCAiQW5vdGhlciIgaW50byBoZWxsby4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICciZ2l0IGJpc2VjdCBydW4iIHNpbXBsZSBjYXNlJyBcCisgICAgJ2VjaG8gIiMiXCEiL2Jpbi9zaCIgPiB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBlY2hvICJncmVwIEFub3RoZXIgaGVsbG8gPiAvZGV2L251bGwiID4+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGVjaG8gInRlc3QgXCQ/IC1uZSAwIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBjaG1vZCAreCB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBnaXQgYmlzZWN0IHN0YXJ0ICYmCisgICAgIGdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKyAgICAgZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisgICAgIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorICAgICBncmVwICIkSEFTSDMgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisgICAgIGdpdCBiaXNlY3QgcmVzZXQnCisKKyMgV2Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IGZpbmQgdGhlIGNvbW1pdCB0aGF0CisjIGludHJvZHVjZWQgIkNpYW8iIGludG8gaGVsbG8uCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnImdpdCBiaXNlY3QgcnVuIiB3aXRoIG1vcmUgY29tcGxleCAiZ2l0IGJpc2VjdCBzdGFydCInIFwKKyAgICAnZWNobyAiIyJcISIvYmluL3NoIiA+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGVjaG8gImdyZXAgQ2lhbyBoZWxsbyA+IC9kZXYvbnVsbCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKyAgICAgZWNobyAidGVzdCBcJD8gLW5lIDAiID4+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGNobW9kICt4IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgorICAgICBnaXQgYmlzZWN0IHJ1biAuL3Rlc3Rfc2NyaXB0LnNoID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKyAgICAgZ3JlcCAiJEhBU0g0IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgorICAgICBnaXQgYmlzZWN0IHJlc2V0JworCisjICRIQVNIMSBpcyBnb29kLCAkSEFTSDUgaXMgYmFkLCB3ZSBza2lwICRIQVNIMworIyBidXQgJEhBU0g0IGlzIGdvb2QsCisjIHNvIHdlIHNob3VsZCBmaW5kICRIQVNINSBhcyB0aGUgZmlyc3QgYmFkIGNvbW1pdAorSEFTSDU9Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcDogYWRkIGxpbmUgYW5kIHRoZW4gYSBuZXcgdGVzdCcgJworCWFkZF9saW5lX2ludG9fZmlsZSAiNTogQW5vdGhlciBuZXcgbGluZS4iIGhlbGxvICYmCisJSEFTSDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDUgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDUgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCBsb2cgPiBsb2dfdG9fcmVwbGF5LnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXAgYW5kIGJpc2VjdCByZXBsYXknICcKKwlnaXQgYmlzZWN0IHJlcGxheSBsb2dfdG9fcmVwbGF5LnR4dCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0g1IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKworSEFTSDY9Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcnVuICYgc2tpcDogY2Fubm90IHRlbGwgYmV0d2VlbiAyJyAnCisJYWRkX2xpbmVfaW50b19maWxlICI2OiBZZXQgYSBsaW5lLiIgaGVsbG8gJiYKKwlIQVNINj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwllY2hvICIjIlwhIi9iaW4vc2giID4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJzZWQgLW5lIFxcXCRwIGhlbGxvIHwgZ3JlcCBDaWFvID4gL2Rldi9udWxsICYmIGV4aXQgMTI1IiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gImdyZXAgbGluZSBoZWxsbyA+IC9kZXYvbnVsbCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJ0ZXN0IFwkPyAtbmUgMCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwljaG1vZCAreCB0ZXN0X3NjcmlwdC5zaCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g2ICRIQVNIMSAmJgorCWlmIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dAorCXRoZW4KKwkJZWNobyBPb3BzLCBzaG91bGQgaGF2ZSBmYWlsZWQuCisJCWZhbHNlCisJZWxzZQorCQl0ZXN0ICQ/IC1lcSAyICYmCisJCWdyZXAgImZpcnN0IGJhZCBjb21taXQgY291bGQgYmUgYW55IG9mIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQkhIGdyZXAgJEhBU0gzIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJCSEgZ3JlcCAkSEFTSDYgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJZ3JlcCAkSEFTSDUgbXlfYmlzZWN0X2xvZy50eHQKKwlmaQorJworCitIQVNINz0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBydW4gJiBza2lwOiBmaW5kIGZpcnN0IGJhZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjc6IFNob3VsZCBiZSB0aGUgbGFzdCBsaW5lLiIgaGVsbG8gJiYKKwlIQVNINz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwllY2hvICIjIlwhIi9iaW4vc2giID4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJzZWQgLW5lIFxcXCRwIGhlbGxvIHwgZ3JlcCBDaWFvID4gL2Rldi9udWxsICYmIGV4aXQgMTI1IiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gInNlZCAtbmUgXFxcJHAgaGVsbG8gfCBncmVwIGRheSA+IC9kZXYvbnVsbCAmJiBleGl0IDEyNSIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJncmVwIFlldCBoZWxsbyA+IC9kZXYvbnVsbCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJ0ZXN0IFwkPyAtbmUgMCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwljaG1vZCAreCB0ZXN0X3NjcmlwdC5zaCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNINiBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXAgb25seSBvbmUgcmFuZ2UnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDcgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICRIQVNIMS4uJEhBU0g1ICYmCisJdGVzdCAiJEhBU0g2IiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBiYWQgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgImZpcnN0IGJhZCBjb21taXQgY291bGQgYmUgYW55IG9mIiBteV9iaXNlY3RfbG9nLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcCBtYW55IHJhbmdlcycgJworCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorCXRlc3QgIiRIQVNINCIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorCWdpdCBiaXNlY3Qgc2tpcCAkSEFTSDIgJEhBU0gyLi4gLi4kSEFTSDUgJiYKKwl0ZXN0ICIkSEFTSDYiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiIG15X2Jpc2VjdF9sb2cudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydGluZyB3aXRoIGEgZGV0YWNoZWQgSEVBRCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXiAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCXRlc3QgJEhFQUQgPSAkKGNhdCAuZ2l0L0JJU0VDVF9TVEFSVCkgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZXJyb3JzIG91dCBpZiBiYWQgYW5kIGdvb2QgYXJlIG1pc3Rha2VuJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0gyICRIQVNINCAyPiByZXZfbGlzdF9lcnJvciAmJgorCWdyZXAgIm1pc3Rha2UgZ29vZCBhbmQgYmFkIiByZXZfbGlzdF9lcnJvciAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGRvZXMgbm90IGNyZWF0ZSBhICJiaXNlY3QiIGJyYW5jaCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKKwlnaXQgYnJhbmNoIGJpc2VjdCAmJgorCXJldl9oYXNoND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcmV2X2hhc2g0IiA9ICIkSEFTSDQiICYmCisJZ2l0IGJyYW5jaCAtRCBiaXNlY3QgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwlnaXQgYnJhbmNoIGJpc2VjdCAmJgorCXJldl9oYXNoNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcmV2X2hhc2g2IiA9ICIkSEFTSDYiICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDcgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXJldl9oYXNoNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYmlzZWN0KSAmJgorCXRlc3QgIiRyZXZfaGFzaDYiID0gIiRIQVNINiIgJiYKKwlnaXQgYnJhbmNoIC1EIGJpc2VjdAorJworCisjIFRoaXMgY3JlYXRlcyBhICJzaWRlIiBicmFuY2ggdG8gdGVzdCAic2libGluZ3MiIGNhc2VzLgorIworIyBIMS1IMi1IMy1INC1INS1INi1INyAgPC0tb3RoZXIKKyMgICAgICAgICAgICBcCisjICAgICAgICAgICAgIFM1LVM2LVM3ICA8LS1zaWRlCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlIGJyYW5jaCBjcmVhdGlvbicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAkSEFTSDQgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjUoc2lkZSk6IGZpcnN0IGxpbmUgb24gYSBzaWRlIGJyYW5jaCIgaGVsbG8yICYmCisJU0lERV9IQVNINT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjYoc2lkZSk6IHNlY29uZCBsaW5lIG9uIGEgc2lkZSBicmFuY2giIGhlbGxvMiAmJgorCVNJREVfSEFTSDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICI3KHNpZGUpOiB0aGlyZCBsaW5lIG9uIGEgc2lkZSBicmFuY2giIGhlbGxvMiAmJgorCVNJREVfSEFTSDc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvb2QgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkSEFTSDciICIkU0lERV9IQVNINyIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDYgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwcGVkIG1lcmdlIGJhc2Ugd2hlbiBnb29kIGFuZCBiYWQgYXJlIHNpYmxpbmdzJyAnCisJZ2l0IGJpc2VjdCBzdGFydCAiJFNJREVfSEFTSDciICIkSEFTSDciID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgJEhBU0g0IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCBza2lwID4gbXlfYmlzZWN0X2xvZy50eHQgMj4mMSAmJgorCWdyZXAgIndhcm5pbmciIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkU0lERV9IQVNINiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFkIG1lcmdlIGJhc2Ugd2hlbiBnb29kIGFuZCBiYWQgYXJlIHNpYmxpbmdzJyAnCisJZ2l0IGJpc2VjdCBzdGFydCAiJEhBU0g3IiBIRUFEID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgJEhBU0g0IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBiYWQgPiBteV9iaXNlY3RfbG9nLnR4dCAyPiYxICYmCisJZ3JlcCAibWVyZ2UgYmFzZSAkSEFTSDQgaXMgYmFkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgImZpeGVkIGJldHdlZW4gJEhBU0g0IGFuZCBcWyRTSURFX0hBU0g3XF0iIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCisjIFRoaXMgY3JlYXRlcyBhIGZldyBtb3JlIGNvbW1pdHMgKEEgYW5kIEIpIHRvIHRlc3QgInNpYmxpbmdzIiBjYXNlcworIyB3aGVuIGEgZ29vZCBhbmQgYSBiYWQgcmV2IGhhdmUgbWFueSBtZXJnZSBiYXNlcy4KKyMKKyMgV2Ugc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZzoKKyMKKyMgSDEtSDItSDMtSDQtSDUtSDYtSDcKKyMgICAgICAgICAgICBcICBcICAgICBcCisjICAgICAgICAgICAgIFM1LUEgICAgIFwKKyMgICAgICAgICAgICAgIFwgICAgICAgIFwKKyMgICAgICAgICAgICAgICBTNi1TNy0tLS1CCisjCisjIEFuZCB0aGVyZSBBIGFuZCBCIGhhdmUgMiBtZXJnZSBiYXNlcyAoUzUgYW5kIEg1KSB0aGF0IHNob3VsZCBiZQorIyByZXBvcnRlZCBieSAiZ2l0IG1lcmdlLWJhc2UgLS1hbGwgQSBCIi4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hbnkgbWVyZ2UgYmFzZXMgY3JlYXRpb24nICcKKwlnaXQgY2hlY2tvdXQgIiRTSURFX0hBU0g1IiAmJgorCWdpdCBtZXJnZSAtbSAibWVyZ2UgSEFTSDUgYW5kIFNJREVfSEFTSDUiICIkSEFTSDUiICYmCisJQV9IQVNIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IG1lcmdlIC1tICJtZXJnZSBIQVNINyBhbmQgU0lERV9IQVNINyIgIiRIQVNINyIgJiYKKwlCX0hBU0g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1hbGwgIiRBX0hBU0giICIkQl9IQVNIIiA+IG1lcmdlX2Jhc2VzLnR4dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgbWVyZ2VfYmFzZXMudHh0ICYmCisJZ3JlcCAiJEhBU0g1IiBtZXJnZV9iYXNlcy50eHQgJiYKKwlncmVwICIkU0lERV9IQVNINSIgbWVyZ2VfYmFzZXMudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvb2QgbWVyZ2UgYmFzZXMgd2hlbiBnb29kIGFuZCBiYWQgYXJlIHNpYmxpbmdzJyAnCisJZ2l0IGJpc2VjdCBzdGFydCAiJEJfSEFTSCIgIiRBX0hBU0giID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgZ29vZCA+IG15X2Jpc2VjdF9sb2cyLnR4dCAmJgorCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cyLnR4dCAmJgorCXsKKwkJeworCQkJZ3JlcCAiJFNJREVfSEFTSDUiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJCQlncmVwICIkSEFTSDUiIG15X2Jpc2VjdF9sb2cyLnR4dAorCQl9IHx8IHsKKwkJCWdyZXAgIiRTSURFX0hBU0g1IiBteV9iaXNlY3RfbG9nMi50eHQgJiYKKwkJCWdyZXAgIiRIQVNINSIgbXlfYmlzZWN0X2xvZy50eHQKKwkJfQorCX0gJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGltaXplZCBtZXJnZSBiYXNlIGNoZWNrcycgJworCWdpdCBiaXNlY3Qgc3RhcnQgIiRIQVNINyIgIiRTSURFX0hBU0g3IiA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZzIudHh0ICYmCisJdGVzdCAtZiAiLmdpdC9CSVNFQ1RfQU5DRVNUT1JTX09LIiAmJgorCXRlc3QgIiRIQVNINiIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2czLnR4dCAmJgorCWdpdCBiaXNlY3QgZ29vZCAiJEFfSEFTSCIgPiBteV9iaXNlY3RfbG9nNC50eHQgJiYKKwlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nNC50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siCisnCisKKyMgVGhpcyBjcmVhdGVzIGFub3RoZXIgc2lkZSBicmFuY2ggY2FsbGVkICJwYXJhbGxlbCIgd2l0aCBzb21lIGZpbGVzCisjIGluIHNvbWUgZGlyZWN0b3JpZXMsIHRvIHRlc3QgYmlzZWN0aW5nIHdpdGggcGF0aHMuCisjCisjIFdlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmc6CisjCisjICAgIFAxLVAyLVAzLVA0LVA1LVA2LVA3CisjICAgLyAgICAgICAgLyAgICAgICAgLworIyBIMS1IMi1IMy1INC1INS1INi1INworIyAgICAgICAgICAgIFwgIFwgICAgIFwKKyMgICAgICAgICAgICAgUzUtQSAgICAgXAorIyAgICAgICAgICAgICAgXCAgICAgICAgXAorIyAgICAgICAgICAgICAgIFM2LVM3LS0tLUIKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJwYXJhbGxlbCIgc2lkZSBicmFuY2ggY3JlYXRpb24nICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHBhcmFsbGVsICRIQVNIMSAmJgorCW1rZGlyIGRpcjEgZGlyMiAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiMShwYXJhKTogbGluZSAxIG9uIHBhcmFsbGVsIGJyYW5jaCIgZGlyMS9maWxlMSAmJgorCVBBUkFfSEFTSDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICIyKHBhcmEpOiBsaW5lIDIgb24gcGFyYWxsZWwgYnJhbmNoIiBkaXIyL2ZpbGUyICYmCisJUEFSQV9IQVNIMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjMocGFyYSk6IGxpbmUgMyBvbiBwYXJhbGxlbCBicmFuY2giIGRpcjIvZmlsZTMgJiYKKwlQQVJBX0hBU0gzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBtZXJnZSAtbSAibWVyZ2UgSEFTSDQgYW5kIFBBUkFfSEFTSDMiICIkSEFTSDQiICYmCisJUEFSQV9IQVNIND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjUocGFyYSk6IGFkZCBsaW5lIG9uIHBhcmFsbGVsIGJyYW5jaCIgZGlyMS9maWxlMSAmJgorCVBBUkFfSEFTSDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICI2KHBhcmEpOiBhZGQgbGluZSBvbiBwYXJhbGxlbCBicmFuY2giIGRpcjIvZmlsZTIgJiYKKwlQQVJBX0hBU0g2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBtZXJnZSAtbSAibWVyZ2UgSEFTSDcgYW5kIFBBUkFfSEFTSDYiICIkSEFTSDciICYmCisJUEFSQV9IQVNINz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdHJpY3RpbmcgYmlzZWN0aW9uIG9uIG9uZSBkaXInICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBIRUFEICRIQVNIMSAtLSBkaXIxICYmCisJcGFyYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmExIiA9ICIkUEFSQV9IQVNIMSIgJiYKKwlnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJFBBUkFfSEFTSDEgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RyaWN0aW5nIGJpc2VjdGlvbiBvbiBvbmUgZGlyIGFuZCBhIGZpbGUnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBIRUFEICRIQVNIMSAtLSBkaXIxIGhlbGxvICYmCisJcGFyYTQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmE0IiA9ICIkUEFSQV9IQVNINCIgJiYKKwlnaXQgYmlzZWN0IGJhZCAmJgorCWhhc2gzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRoYXNoMyIgPSAiJEhBU0gzIiAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCWhhc2g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRoYXNoNCIgPSAiJEhBU0g0IiAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCXBhcmExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRwYXJhMSIgPSAiJFBBUkFfSEFTSDEiICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkUEFSQV9IQVNINCBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcHBpbmcgYXdheSBmcm9tIHNraXBwZWQgY29tbWl0JyAnCisJZ2l0IGJpc2VjdCBzdGFydCAkUEFSQV9IQVNINyAkSEFTSDEgJiYKKwlwYXJhND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcGFyYTQiID0gIiRQQVJBX0hBU0g0IiAmJgorICAgICAgICBnaXQgYmlzZWN0IHNraXAgJiYKKwloYXNoNz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkaGFzaDciID0gIiRIQVNINyIgJiYKKyAgICAgICAgZ2l0IGJpc2VjdCBza2lwICYmCisJcGFyYTM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmEzIiA9ICIkUEFSQV9IQVNIMyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Jpbmcgb3V0IHdoZW4gdXNpbmcgYmFkIHBhdGggcGFyYW1ldGVycycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJFBBUkFfSEFTSDcgJEhBU0gxIC0tIGZvb2JhciAyPiBlcnJvci50eHQgJiYKKwlncmVwICJiYWQgcGF0aCBwYXJhbWV0ZXJzIiBlcnJvci50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBiaXNlY3Rpb24gb24gYmFyZSByZXBvIC0gLS1uby1jaGVja291dCBzcGVjaWZpZWQnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZS5ub2NoZWNrb3V0ICYmCisJKAorCQljZCBiYXJlLm5vY2hlY2tvdXQgJiYKKwkJZ2l0IGJpc2VjdCBzdGFydCAtLW5vLWNoZWNrb3V0ICYmCisJCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwkJZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisJCWdpdCBiaXNlY3QgcnVuIGV2YWwgXAorCQkJInRlc3QgXCQoZ2l0IHJldi1saXN0IEJJU0VDVF9IRUFEIF4kSEFTSDIgLS1tYXgtY291bnQ9MSB8IHdjIC1sKSA9IDAiIFwKKwkJCT4uLi9ub2NoZWNrb3V0LmxvZyAmJgorCQlnaXQgYmlzZWN0IHJlc2V0CisJKSAmJgorCWdyZXAgIiRIQVNIMyBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbm9jaGVja291dC5sb2cKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGJpc2VjdGlvbiBvbiBiYXJlIHJlcG8gLSAtLW5vLWNoZWNrb3V0IGRlZmF1bHRlZCcgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmRlZmF1bHRlZCAmJgorCSgKKwkJY2QgYmFyZS5kZWZhdWx0ZWQgJiYKKwkJZ2l0IGJpc2VjdCBzdGFydCAmJgorCQlnaXQgYmlzZWN0IGdvb2QgJEhBU0gxICYmCisJCWdpdCBiaXNlY3QgYmFkICRIQVNINCAmJgorCQlnaXQgYmlzZWN0IHJ1biBldmFsIFwKKwkJCSJ0ZXN0IFwkKGdpdCByZXYtbGlzdCBCSVNFQ1RfSEVBRCBeJEhBU0gyIC0tbWF4LWNvdW50PTEgfCB3YyAtbCkgPSAwIiBcCisJCQk+Li4vZGVmYXVsdGVkLmxvZyAmJgorCQlnaXQgYmlzZWN0IHJlc2V0CisJKSAmJgorCWdyZXAgIiRIQVNIMyBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgZGVmYXVsdGVkLmxvZworJworCisjCisjIFRoaXMgY3JlYXRlcyBhIGJyb2tlbiBicmFuY2ggd2hpY2ggY2Fubm90IGJlIGNoZWNrZWQgb3V0IGJlY2F1c2UKKyMgdGhlIHRyZWUgY3JlYXRlZCBoYXMgYmVlbiBkZWxldGVkLgorIworIyBIMS1IMi1IMy1INC1INS1INi1INyAgPC0tb3RoZXIKKyMgICAgICAgICAgICBcCisjICAgICAgICAgICAgIFM1LVM2Jy1TNyctUzgnLVM5ICA8LS1icm9rZW4KKyMKKyMgQ29tbWl0cyBtYXJrZWQgd2l0aCAnIGhhdmUgYSBtaXNzaW5nIHRyZWUuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicm9rZW4gYnJhbmNoIGNyZWF0aW9uJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBjaGVja291dCAtYiBicm9rZW4gJEhBU0g0ICYmCisJZ2l0IHRhZyBCUk9LRU5fSEFTSDQgJEhBU0g0ICYmCisJYWRkX2xpbmVfaW50b19maWxlICI1KGJyb2tlbik6IGZpcnN0IGxpbmUgb24gYSBicm9rZW4gYnJhbmNoIiBoZWxsbzIgJiYKKwlnaXQgdGFnIEJST0tFTl9IQVNINSAmJgorCW1rZGlyIG1pc3NpbmcgJiYKKwk6PiBtaXNzaW5nL01JU1NJTkcgJiYKKwlnaXQgYWRkIG1pc3NpbmcvTUlTU0lORyAmJgorCWdpdCBjb21taXQgLW0gIjYoYnJva2VuKTogQWRkZWQgZmlsZSB0aGF0IHdpbGwgYmUgZGVsZXRlZCIKKwlnaXQgdGFnIEJST0tFTl9IQVNINiAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNyhicm9rZW4pOiBzZWNvbmQgbGluZSBvbiBhIGJyb2tlbiBicmFuY2giIGhlbGxvMiAmJgorCWdpdCB0YWcgQlJPS0VOX0hBU0g3ICYmCisJYWRkX2xpbmVfaW50b19maWxlICI4KGJyb2tlbik6IHRoaXJkIGxpbmUgb24gYSBicm9rZW4gYnJhbmNoIiBoZWxsbzIgJiYKKwlnaXQgdGFnIEJST0tFTl9IQVNIOCAmJgorCWdpdCBybSBtaXNzaW5nL01JU1NJTkcgJiYKKwlnaXQgY29tbWl0IC1tICI5KGJyb2tlbik6IFJlbW92ZSBtaXNzaW5nIGZpbGUiCisJZ2l0IHRhZyBCUk9LRU5fSEFTSDkgJiYKKwlybSAuZ2l0L29iamVjdHMvMzkvZjdlNjFhNzI0MTg3YWI3NjdkMmUwODQ0MmQ5YjZiOWRhYjU4N2QKKycKKworZWNobyAiIiA+IGV4cGVjdGVkLm9rCitjYXQgPiBleHBlY3RlZC5taXNzaW5nLXRyZWUuZGVmYXVsdCA8PEVPRgorZmF0YWw6IHVuYWJsZSB0byByZWFkIHRyZWUgMzlmN2U2MWE3MjQxODdhYjc2N2QyZTA4NDQyZDliNmI5ZGFiNTg3ZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBmYWlscyBpZiB0cmVlIGlzIGJyb2tlbiBvbiBzdGFydCBjb21taXQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCBCUk9LRU5fSEFTSDcgQlJPS0VOX0hBU0g0IDI+ZXJyb3IudHh0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQubWlzc2luZy10cmVlLmRlZmF1bHQgZXJyb3IudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBmYWlscyBpZiB0cmVlIGlzIGJyb2tlbiBvbiB0cmlhbCBjb21taXQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCBCUk9LRU5fSEFTSDkgQlJPS0VOX0hBU0g0IDI+ZXJyb3IudHh0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBicm9rZW4gJiYKKwlnaXQgY2hlY2tvdXQgYnJva2VuICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQubWlzc2luZy10cmVlLmRlZmF1bHQgZXJyb3IudHh0CisnCisKK2NoZWNrX3NhbWUoKQoreworCWVjaG8gIkNoZWNraW5nICQxIGlzIHRoZSBzYW1lIGFzICQyIiAmJgorCWdpdCByZXYtcGFyc2UgIiQxIiA+IGV4cGVjdGVkLnNhbWUgJiYKKwlnaXQgcmV2LXBhcnNlICIkMiIgPiBleHBlY3RlZC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zYW1lIGV4cGVjdGVkLmFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Q6IC0tbm8tY2hlY2tvdXQgLSBzdGFydCBjb21taXQgYmFkJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgQlJPS0VOX0hBU0g3IEJST0tFTl9IQVNINCAtLW5vLWNoZWNrb3V0ICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgQklTRUNUX0hFQUQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdDogLS1uby1jaGVja291dCAtIHRyaWFsIGNvbW1pdCBiYWQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBicm9rZW4gQlJPS0VOX0hBU0g0IC0tbm8tY2hlY2tvdXQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINiBCSVNFQ1RfSEVBRCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0OiAtLW5vLWNoZWNrb3V0IC0gdGFyZ2V0IGJlZm9yZSBicmVha2FnZScgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IGJyb2tlbiBCUk9LRU5fSEFTSDQgLS1uby1jaGVja291dCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g2IEJJU0VDVF9IRUFEICYmCisJZ2l0IGJpc2VjdCBiYWQgQklTRUNUX0hFQUQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINSBCSVNFQ1RfSEVBRCAmJgorCWdpdCBiaXNlY3QgYmFkIEJJU0VDVF9IRUFEICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDUgYmlzZWN0L2JhZCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0OiAtLW5vLWNoZWNrb3V0IC0gdGFyZ2V0IGluIGJyZWFrYWdlJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgYnJva2VuIEJST0tFTl9IQVNINCAtLW5vLWNoZWNrb3V0ICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgQklTRUNUX0hFQUQgJiYKKwlnaXQgYmlzZWN0IGJhZCBCSVNFQ1RfSEVBRCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g1IEJJU0VDVF9IRUFEICYmCisJZ2l0IGJpc2VjdCBnb29kIEJJU0VDVF9IRUFEICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgYmlzZWN0L2JhZCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0OiAtLW5vLWNoZWNrb3V0IC0gdGFyZ2V0IGFmdGVyIGJyZWFrYWdlJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgYnJva2VuIEJST0tFTl9IQVNINCAtLW5vLWNoZWNrb3V0ICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgQklTRUNUX0hFQUQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgQklTRUNUX0hFQUQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNIOCBCSVNFQ1RfSEVBRCAmJgorCWdpdCBiaXNlY3QgZ29vZCBCSVNFQ1RfSEVBRCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g5IGJpc2VjdC9iYWQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdDogZGVtb25zdHJhdGUgaWRlbnRpZmljYXRpb24gb2YgZGFtYWdlIGJvdW5kYXJ5JyAiCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBjaGVja291dCBicm9rZW4gJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IGJyb2tlbiBtYXN0ZXIgLS1uby1jaGVja291dCAmJgorCWdpdCBiaXNlY3QgcnVuIFwiXCRTSEVMTF9QQVRIXCIgLWMgJworCQlHT09EPVwkKGdpdCBmb3ItZWFjaC1yZWYgXCItLWZvcm1hdD0lKG9iamVjdG5hbWUpXCIgcmVmcy9iaXNlY3QvZ29vZC0qKSAmJgorCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEJJU0VDVF9IRUFEIC0tbm90IFwkR09PRCA+dG1wLlwkXCQgJiYKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCA+L2Rldi9udWxsIDwgdG1wLlwkXCQKKwkJcmM9XCQ/CisJCXJtIC1mIHRtcC5cJFwkCisJCXRlc3QgXCRyYyA9IDAnICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgYmlzZWN0L2JhZCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDMxLW1lcmdlLXJlY3Vyc2l2ZS5zaCBiL3QvdDYwMzEtbWVyZ2UtcmVjdXJzaXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFjZDY0OWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDMxLW1lcmdlLXJlY3Vyc2l2ZS5zaApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UtcmVjdXJzaXZlOiBoYW5kbGUgZmlsZSBtb2RlJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1wcmVyZXEtRklMRU1PREUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kZSBjaGFuZ2UgaW4gb25lIGJyYW5jaDoga2VlcCBjaGFuZ2VkIHZlcnNpb24nICcKKwk6ID5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYTEgbWFzdGVyICYmCisJOiA+ZHVtbXkgJiYKKwlnaXQgYWRkIGR1bW15ICYmCisJZ2l0IGNvbW1pdCAtbSBhICYmCisJZ2l0IGNoZWNrb3V0IC1iIGIxIG1hc3RlciAmJgorCXRlc3RfY2htb2QgK3ggZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIGIxICYmCisJZ2l0IGNoZWNrb3V0IGExICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBtYXN0ZXIgLS0gYTEgYjEgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZmlsZTEgfCBncmVwIF4xMDA3NTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAndmVyaWZ5IGV4ZWN1dGFibGUgYml0IG9uIGZpbGUnICcKKwl0ZXN0IC14IGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGUgY2hhbmdlIGluIGJvdGggYnJhbmNoZXM6IGV4cGVjdCBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWdpdCBjaGVja291dCAtYiBhMiBtYXN0ZXIgJiYKKwk6ID5maWxlMiAmJgorCUg9JChnaXQgaGFzaC1vYmplY3QgZmlsZTIpICYmCisJdGVzdF9jaG1vZCAreCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gYTIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYjIgbWFzdGVyICYmCisJOiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSBiMiAmJgorCWdpdCBjaGVja291dCBhMiAmJgorCSgKKwkJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBtYXN0ZXIgLS0gYTIgYjIKKwkJdGVzdCAkPyA9IDEKKwkpICYmCisJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDc1NSAkSCAyCWZpbGUyIgorCQllY2hvICIxMDA2NDQgJEggMwlmaWxlMiIKKwkpID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1zIGZpbGUyIHwgZ3JlcCBeMTAwNzU1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ3ZlcmlmeSBleGVjdXRhYmxlIGJpdCBvbiBmaWxlJyAnCisJdGVzdCAteCBmaWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnaW5nIHdpdGggdHJpcGxlIHJlbmFtZSBhY3Jvc3MgRC9GIGNvbmZsaWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1haW4gJiYKKwlnaXQgcm0gLXJmIC4gJiYKKworCWVjaG8gImp1c3QgYSBmaWxlIiA+c3ViMSAmJgorCW1rZGlyIC1wIHN1YjIgJiYKKwllY2hvIGNvbnRlbnQxID5zdWIyL2ZpbGUxICYmCisJZWNobyBjb250ZW50MiA+c3ViMi9maWxlMiAmJgorCWVjaG8gY29udGVudDMgPnN1YjIvZmlsZTMgJiYKKwlta2RpciBzaW1wbGUgJiYKKwllY2hvIGJhc2UgPnNpbXBsZS9iYXIgJiYKKwlnaXQgYWRkIC1BICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgJiYKKwllY2hvIG1vcmUgPj5zaW1wbGUvYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBjaGFuZ2VzaW1wbGVmaWxlICYmCisKKwlnaXQgY2hlY2tvdXQgbWFpbiAmJgorCWdpdCBybSBzdWIxICYmCisJZ2l0IG12IHN1YjIgc3ViMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gY2hhbmdlZmlsZXRvZGlyICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2Ugb3RoZXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDMyLW1lcmdlLWxhcmdlLXJlbmFtZS5zaCBiL3QvdDYwMzItbWVyZ2UtbGFyZ2UtcmVuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1YmVlY2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDMyLW1lcmdlLWxhcmdlLXJlbmFtZS5zaApAQCAtMCwwICsxLDEwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdpbmcgd2l0aCBsYXJnZSByZW5hbWUgbWF0cml4JworLiAuL3Rlc3QtbGliLnNoCisKK2NvdW50KCkgeworCWk9MQorCXdoaWxlIHRlc3QgJGkgLWxlICQxOyBkbworCQllY2hvICRpCisJCWk9JCgoJGkgKyAxKSkKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIChpbml0aWFsKScgJworCXRvdWNoIGZpbGUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwKKycKKworbWFrZV90ZXh0KCkgeworCWVjaG8gJDE6ICQyCisJZm9yIGkgaW4gYGNvdW50IDIwYDsgZG8KKwkJZWNobyAkMTogJGkKKwlkb25lCisJZWNobyAkMTogJDMKK30KKwordGVzdF9yZW5hbWUoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lICgkMSwgJDIpIiAnCisJbj0nJDEnCisJZXhwZWN0PSckMicKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCB0ZXN0JG4gfHwgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWZvciBpIGluICQoY291bnQgJG4pOyBkbworCQltYWtlX3RleHQgJGkgaW5pdGlhbCBpbml0aWFsID4kaQorCWRvbmUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGFkZD0kbiAmJgorCWZvciBpIGluICQoY291bnQgJG4pOyBkbworCQltYWtlX3RleHQgJGkgY2hhbmdlZCBpbml0aWFsID4kaQorCWRvbmUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGNoYW5nZT0kbiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JG4gSEVBRF4gJiYKKwlmb3IgaSBpbiAkKGNvdW50ICRuKTsgZG8KKwkJZ2l0IHJtICRpCisJCW1ha2VfdGV4dCAkaSBpbml0aWFsIGNoYW5nZWQgPiRpLm1vdmVkCisJZG9uZSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gY2hhbmdlK3JlbmFtZT0kbiAmJgorCWNhc2UgIiRleHBlY3QiIGluCisJCW9rKSBnaXQgbWVyZ2UgbWFzdGVyIDs7CisJCSAqKSB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyIDs7CisJZXNhYworCScKK30KKwordGVzdF9yZW5hbWUgNSBvaworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgZGlmZi5yZW5hbWVsaW1pdCB0byA0JyAnCisJZ2l0IGNvbmZpZyBkaWZmLnJlbmFtZWxpbWl0IDQKKycKK3Rlc3RfcmVuYW1lIDQgb2sKK3Rlc3RfcmVuYW1lIDUgZmFpbAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgbWVyZ2UucmVuYW1lbGltaXQgdG8gNScgJworCWdpdCBjb25maWcgbWVyZ2UucmVuYW1lbGltaXQgNQorJwordGVzdF9yZW5hbWUgNSBvawordGVzdF9yZW5hbWUgNiBmYWlsCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxhcmdlIHNpbXBsZSByZW5hbWUnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgbWVyZ2UucmVuYW1lbGltaXQgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi5yZW5hbWVsaW1pdCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZm9yIGkgaW4gJChjb3VudCAyMDApOyBkbworCQltYWtlX3RleHQgZm9vIGJhciBiYXogPiRpCisJZG9uZSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gY3JlYXRlLWZpbGVzICYmCisKKwlnaXQgYnJhbmNoIHNpbXBsZS1jaGFuZ2UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2ltcGxlLXJlbmFtZSAmJgorCisJbWtkaXIgYnVpbHRpbiAmJgorCWdpdCBtdiBbMC05XSogYnVpbHRpbi8gJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZWQgJiYKKworCWdpdCBjaGVja291dCBzaW1wbGUtY2hhbmdlICYmCisJPnVucmVsYXRlZC1jaGFuZ2UgJiYKKwlnaXQgYWRkIHVucmVsYXRlZC1jaGFuZ2UgJiYKKwlnaXQgY29tbWl0IC1tIHVucmVsYXRlZC1jaGFuZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzc2l2ZSBzaW1wbGUgcmVuYW1lIGRvZXMgbm90IHNwYW0gYWRkZWQgZmlsZXMnICcKKwlzYW5lX3Vuc2V0IEdJVF9NRVJHRV9WRVJCT1NJVFkgJiYKKwlnaXQgbWVyZ2UgLS1uby1zdGF0IHNpbXBsZS1yZW5hbWUgfCBncmVwIC12IFJlbW92aW5nID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgLWx0IDUgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzMy1tZXJnZS1jcmxmLnNoIGIvdC90NjAzMy1tZXJnZS1jcmxmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4ZDY1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDMzLW1lcmdlLWNybGYuc2gKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlIGNvbmZsaWN0IGluIGNybGYgcmVwbworCisJCWItLS1NCisJICAgICAgIC8gICAvCisJaW5pdGlhbC0tLWEKKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwllY2hvIGZvbyB8IGFwcGVuZF9jciA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwiICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZWNobyBsaW5lIGZyb20gYSB8IGFwcGVuZF9jciA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsaW5lIGZyb20gYSIgZmlsZSAmJgorCWdpdCB0YWcgYSAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZWNobyBsaW5lIGZyb20gYiB8IGFwcGVuZF9jciA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsaW5lIGZyb20gYiIgZmlsZSAmJgorCWdpdCB0YWcgYiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgIm91cnMiIGlzIENSTEYnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAtcyBvdXJzICYmCisJY2F0IGZpbGUgfCByZW1vdmVfY3IgfCBhcHBlbmRfY3IgPmZpbGUudGVtcCAmJgorCXRlc3RfY21wIGZpbGUgZmlsZS50ZW1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHRoYXQgY29uZmxpY3QgZmlsZSBpcyBDUkxGJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNpZGUgJiYKKwljYXQgZmlsZSB8IHJlbW92ZV9jciB8IGFwcGVuZF9jciA+ZmlsZS50ZW1wICYmCisJdGVzdF9jbXAgZmlsZSBmaWxlLnRlbXAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDM0LW1lcmdlLXJlbmFtZS1ub2NydWZ0LnNoIGIvdC90NjAzNC1tZXJnZS1yZW5hbWUtbm9jcnVmdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NWJlOTVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzNC1tZXJnZS1yZW5hbWUtbm9jcnVmdC5zaApAQCAtMCwwICsxLDEzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J01lcmdlLXJlY3Vyc2l2ZSBtZXJnaW5nIHJlbmFtZXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCBcCisnCitjYXQgPkEgPDxcRU9GICYmCithIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorYiBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKK2MgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCitkIGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZAorZSBlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUKK2YgZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCitnIGdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZworaCBoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGgKK2kgaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpCitqIGpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqagorayBra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2sKK2wgbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsCittIG1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbQorbiBubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm4KK28gb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vCitFT0YKKworY2F0ID5NIDw8XEVPRiAmJgorQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKK0IgQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCCitDIENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQworRCBEREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQKK0UgRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFCitGIEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgorRyBHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cKK0ggSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhICitJIElJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSQorSiBKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkoKK0sgS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLCitMIExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAorTSBNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0KK04gTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCitPIE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTworRU9GCisKK2dpdCBhZGQgQSBNICYmCitnaXQgY29tbWl0IC1tICJpbml0aWFsIGhhcyBBIGFuZCBNIiAmJgorZ2l0IGJyYW5jaCB3aGl0ZSAmJgorZ2l0IGJyYW5jaCByZWQgJiYKK2dpdCBicmFuY2ggYmx1ZSAmJgorCitnaXQgY2hlY2tvdXQgd2hpdGUgJiYKK3NlZCAtZSAiL15nIC9zLy4qL2cgOiB3aGl0ZSBjaGFuZ2VzIGEgbGluZS8iIDxBID5CICYmCitzZWQgLWUgIi9eRyAvcy8uKi9HIDogY29sb3JlZCBicmFuY2ggY2hhbmdlcyBhIGxpbmUvIiA8TSA+TiAmJgorcm0gLWYgQSBNICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQiBNIE4gJiYKK2dpdCBjb21taXQgLW0gIndoaXRlIHJlbmFtZXMgQS0+QiwgTS0+TiIgJiYKKworZ2l0IGNoZWNrb3V0IHJlZCAmJgorZWNobyBjcmVhdGVkIGJ5IHJlZCA+UiAmJgorZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBSICYmCitnaXQgY29tbWl0IC1tICJyZWQgY3JlYXRlcyBSIiAmJgorCitnaXQgY2hlY2tvdXQgYmx1ZSAmJgorc2VkIC1lICIvXm8gL3MvLiovZyA6IGJsdWUgY2hhbmdlcyBhIGxpbmUvIiA8QSA+QiAmJgorcm0gLWYgQSAmJgorbXYgQiBBICYmCitnaXQgdXBkYXRlLWluZGV4IEEgJiYKK2dpdCBjb21taXQgLW0gImJsdWUgbW9kaWZ5IEEiICYmCisKK2dpdCBjaGVja291dCBtYXN0ZXInCisKKyMgVGhpcyB0ZXN0IGJyb2tlIGluIDY1YWM2ZTljM2Y0NzgwN2NiNjAzYWYwN2E2YTllMWE0M2JjMTE5YWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHdoaXRlIGludG8gcmVkIChBLT5CLE0tPk4pJyBcCisnCisJZ2l0IGNoZWNrb3V0IC1iIHJlZC13aGl0ZSByZWQgJiYKKwlnaXQgbWVyZ2Ugd2hpdGUgJiYKKwlnaXQgd3JpdGUtdHJlZSA+L2Rldi9udWxsIHx8IHsKKwkJZWNobyAiQkFEOiBtZXJnZSBkaWQgbm90IGNvbXBsZXRlIgorCQlyZXR1cm4gMQorCX0KKworCXRlc3QgLWYgQiB8fCB7CisJCWVjaG8gIkJBRDogQiBkb2VzIG5vdCBleGlzdCBpbiB3b3JraW5nIGRpcmVjdG9yeSIKKwkJcmV0dXJuIDEKKwl9CisJdGVzdCAtZiBOIHx8IHsKKwkJZWNobyAiQkFEOiBOIGRvZXMgbm90IGV4aXN0IGluIHdvcmtpbmcgZGlyZWN0b3J5IgorCQlyZXR1cm4gMQorCX0KKwl0ZXN0IC1mIFIgfHwgeworCQllY2hvICJCQUQ6IFIgZG9lcyBub3QgZXhpc3QgaW4gd29ya2luZyBkaXJlY3RvcnkiCisJCXJldHVybiAxCisJfQorCisJdGVzdCAtZiBBICYmIHsKKwkJZWNobyAiQkFEOiBBIHN0aWxsIGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKKwkJcmV0dXJuIDEKKwl9CisJdGVzdCAtZiBNICYmIHsKKwkJZWNobyAiQkFEOiBNIHN0aWxsIGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKKwkJcmV0dXJuIDEKKwl9CisJcmV0dXJuIDAKKycKKworIyBUaGlzIHRlc3QgYnJva2UgaW4gODM3MTIzNGVjYWFmNmUxNGZlM2YyMDgyYTg1NWVmZjFiYmQ3OWFlOQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYmx1ZSBpbnRvIHdoaXRlIChBLT5CLCBtb2QgQSwgQSB1bnRyYWNrZWQpJyBcCisnCisJZ2l0IGNoZWNrb3V0IC1iIHdoaXRlLWJsdWUgd2hpdGUgJiYKKwllY2hvIGRpcnR5ID5BICYmCisJZ2l0IG1lcmdlIGJsdWUgJiYKKwlnaXQgd3JpdGUtdHJlZSA+L2Rldi9udWxsIHx8IHsKKwkJZWNobyAiQkFEOiBtZXJnZSBkaWQgbm90IGNvbXBsZXRlIgorCQlyZXR1cm4gMQorCX0KKworCXRlc3QgLWYgQSB8fCB7CisJCWVjaG8gIkJBRDogQSBkb2VzIG5vdCBleGlzdCBpbiB3b3JraW5nIGRpcmVjdG9yeSIKKwkJcmV0dXJuIDEKKwl9CisJdGVzdCBgY2F0IEFgID0gZGlydHkgfHwgeworCQllY2hvICJCQUQ6IEEgY29udGVudCBpcyB3cm9uZyIKKwkJcmV0dXJuIDEKKwl9CisJdGVzdCAtZiBCIHx8IHsKKwkJZWNobyAiQkFEOiBCIGRvZXMgbm90IGV4aXN0IGluIHdvcmtpbmcgZGlyZWN0b3J5IgorCQlyZXR1cm4gMQorCX0KKwl0ZXN0IC1mIE4gfHwgeworCQllY2hvICJCQUQ6IE4gZG9lcyBub3QgZXhpc3QgaW4gd29ya2luZyBkaXJlY3RvcnkiCisJCXJldHVybiAxCisJfQorCXRlc3QgLWYgTSAmJiB7CisJCWVjaG8gIkJBRDogTSBzdGlsbCBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCisJCXJldHVybiAxCisJfQorCXJldHVybiAwCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzNS1tZXJnZS1kaXItdG8tc3ltbGluay5zaCBiL3QvdDYwMzUtbWVyZ2UtZGlyLXRvLXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU5OWFlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzUtbWVyZ2UtZGlyLXRvLXN5bWxpbmsuc2gKQEAgLTAsMCArMSwxNTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnaW5nIHdoZW4gYSBkaXJlY3Rvcnkgd2FzIHJlcGxhY2VkIHdpdGggYSBzeW1saW5rJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NyZWF0ZSBhIGNvbW1pdCB3aGVyZSBkaXIgYS9iIGNoYW5nZWQgdG8gc3ltbGluaycgJworCW1rZGlyIC1wIGEvYi9jIGEvYi0yL2MgJiYKKwk+IGEvYi9jL2QgJiYKKwk+IGEvYi0yL2MvZCAmJgorCT4gYS94ICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCB0YWcgc3RhcnQgJiYKKwlybSAtcmYgYS9iICYmCisJbG4gLXMgYi0yIGEvYiAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJkaXIgdG8gc3ltbGluayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY2hlY2tvdXQgZG9lcyBub3QgY2xvYmJlciB1bnRyYWNrZWQgc3ltbGluaycgJworCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBybSAtLWNhY2hlZCBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJ1bnRyYWNrZWQgc3ltbGluayByZW1haW5zIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBzdGFydF4wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2EvYi0yL2MvZCBpcyBrZXB0IHdoZW4gY2xvYmJlcmluZyBzeW1saW5rIGInICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgcm0gLS1jYWNoZWQgYS9iICYmCisJZ2l0IGNvbW1pdCAtbSAidW50cmFja2VkIHN5bWxpbmsgcmVtYWlucyIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgc3RhcnReMCAmJgorCXRlc3QgLWYgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NoZWNrb3V0IHNob3VsZCBub3QgaGF2ZSBkZWxldGVkIGEvYi0yL2MvZCcgJworCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCSBnaXQgY2hlY2tvdXQgc3RhcnReMCAmJgorCSB0ZXN0IC1mIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzZXR1cCBmb3IgbWVyZ2UgdGVzdCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0IC1mIGEvYi0yL2MvZCAmJgorCWVjaG8geCA+IGEveCAmJgorCWdpdCBhZGQgYS94ICYmCisJZ2l0IGNvbW1pdCAtbSB4ICYmCisJZ2l0IHRhZyBiYXNlbGluZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdIYW5kbGUgRC9GIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlc29sdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCisJZ2l0IG1lcmdlIC1zIHJlc29sdmUgbWFzdGVyICYmCisJdGVzdCAtaCBhL2IgJiYKKwl0ZXN0IC1mIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdIYW5kbGUgRC9GIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIG1hc3RlciAmJgorCXRlc3QgLWggYS9iICYmCisJdGVzdCAtZiBhL2ItMi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnSGFuZGxlIEYvRCBjb25mbGljdCwgZG8gbm90IGxvc2UgYS9iLTIvYy9kIGluIG1lcmdlIChyZXNvbHZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBiYXNlbGluZV4wICYmCisJdGVzdCAtaCBhL2IgJiYKKwl0ZXN0IC1mIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdIYW5kbGUgRi9EIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBiYXNlbGluZV4wICYmCisJdGVzdCAtaCBhL2IgJiYKKwl0ZXN0IC1mIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFNZTUxJTktTICdkbyBub3QgbG9zZSB1bnRyYWNrZWQgaW4gbWVyZ2UgKHJlc29sdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCisJPmEvYi9jL2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBtYXN0ZXIgJiYKKwl0ZXN0IC1mIGEvYi9jL2UgJiYKKwl0ZXN0IC1mIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkbyBub3QgbG9zZSB1bnRyYWNrZWQgaW4gbWVyZ2UgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwk+YS9iL2MvZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgbWFzdGVyICYmCisJdGVzdCAtZiBhL2IvYy9lICYmCisJdGVzdCAtZiBhL2ItMi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZG8gbm90IGxvc2UgbW9kaWZpY2F0aW9ucyBpbiBtZXJnZSAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwllY2hvIG1vcmUgY29udGVudCA+PmEvYi9jL2QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZG8gbm90IGxvc2UgbW9kaWZpY2F0aW9ucyBpbiBtZXJnZSAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWVjaG8gbW9yZSBjb250ZW50ID4+YS9iL2MvZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3NldHVwIGEgbWVyZ2Ugd2hlcmUgZGlyIGEvYi0yIGNoYW5nZWQgdG8gc3ltbGluaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc3RhcnReMCAmJgorCXJtIC1yZiBhL2ItMiAmJgorCWxuIC1zIGIgYS9iLTIgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiZGlyIGEvYi0yIHRvIHN5bWxpbmsiICYmCisJZ2l0IHRhZyB0ZXN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdtZXJnZSBzaG91bGQgbm90IGhhdmUgRC9GIGNvbmZsaWN0cyAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVzb2x2ZSB0ZXN0MiAmJgorCXRlc3QgLWggYS9iLTIgJiYKKwl0ZXN0IC1mIGEvYi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnbWVyZ2Ugc2hvdWxkIG5vdCBoYXZlIEQvRiBjb25mbGljdHMgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHRlc3QyICYmCisJdGVzdCAtaCBhL2ItMiAmJgorCXRlc3QgLWYgYS9iL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdtZXJnZSBzaG91bGQgbm90IGhhdmUgRi9EIGNvbmZsaWN0cyAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZm9vIHRlc3QyICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBiYXNlbGluZV4wICYmCisJdGVzdCAtaCBhL2ItMiAmJgorCXRlc3QgLWYgYS9iL2MvZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzYtcmVjdXJzaXZlLWNvcm5lci1jYXNlcy5zaCBiL3QvdDYwMzYtcmVjdXJzaXZlLWNvcm5lci1jYXNlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZmVlN2QxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzNi1yZWN1cnNpdmUtY29ybmVyLWNhc2VzLnNoCkBAIC0wLDAgKzEsNzc2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVjdXJzaXZlIG1lcmdlIGNvcm5lciBjYXNlcyBpbnZvbHZpbmcgY3Jpc3MtY3Jvc3MgbWVyZ2VzJworCisuIC4vdGVzdC1saWIuc2gKKworZ2V0X2NsZWFuX2NoZWNrb3V0ICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJZ2l0IGNoZWNrb3V0ICIkMSIKK30KKworIworIyAgTDEgIEwyCisjICAgby0tLW8KKyMgIC8gXCAvIFwKKyMgbyAgIFggICA/CisjICBcIC8gXCAvCisjICAgby0tLW8KKyMgIFIxICBSMgorIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXNpYyBjcmlzcy1jcm9zcyArIHJlbmFtZSB3aXRoIG5vIG1vZGlmaWNhdGlvbnMnICcKKwl0ZW49IjAgMSAyIDMgNCA1IDYgNyA4IDkiICYmCisJZm9yIGkgaW4gJHRlbgorCWRvCisJCWVjaG8gbGluZSAkaSBpbiBhIHNhbXBsZSBmaWxlCisJZG9uZSA+b25lICYmCisJZm9yIGkgaW4gJHRlbgorCWRvCisJCWVjaG8gbGluZSAkaSBpbiBhbm90aGVyIHNhbXBsZSBmaWxlCisJZG9uZSA+dHdvICYmCisJZ2l0IGFkZCBvbmUgdHdvICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBMMSAmJgorCWdpdCBjaGVja291dCAtYiBSMSAmJgorCWdpdCBtdiBvbmUgdGhyZWUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBSMSAmJgorCisJZ2l0IGNoZWNrb3V0IEwxICYmCisJZ2l0IG12IHR3byB0aHJlZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEwxICYmCisKKwlnaXQgY2hlY2tvdXQgTDFeMCAmJgorCXRlc3RfdGljayAmJiBnaXQgbWVyZ2UgLXMgb3VycyBSMSAmJgorCWdpdCB0YWcgTDIgJiYKKworCWdpdCBjaGVja291dCBSMV4wICYmCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtcyBvdXJzIEwxICYmCisJZ2l0IHRhZyBSMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBzaW1wbGUgcmVuYW1lK2NyaXNzLWNyb3NzIHdpdGggbm8gbW9kaWZpY2F0aW9ucycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgTDJeMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBSMl4wICYmCisKKwl0ZXN0IDIgPSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMiA9ICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAyID0gJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoyOnRocmVlKSA9ICQoZ2l0IHJldi1wYXJzZSBMMjp0aHJlZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6Mzp0aHJlZSkgPSAkKGdpdCByZXYtcGFyc2UgUjI6dGhyZWUpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBMMjp0aHJlZSkgPSAkKGdpdCBoYXNoLW9iamVjdCB0aHJlZX5IRUFEKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIFIyOnRocmVlKSA9ICQoZ2l0IGhhc2gtb2JqZWN0IHRocmVlflIyXjApCisnCisKKyMKKyMgU2FtZSBhcyBiZWZvcmUsIGJ1dCBtb2RpZnkgTDEgc2xpZ2h0bHk6CisjCisjICBMMW0gTDIKKyMgICBvLS0tbworIyAgLyBcIC8gXAorIyBvICAgWCAgID8KKyMgIFwgLyBcIC8KKyMgICBvLS0tbworIyAgUjEgIFIyCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNyaXNzLWNyb3NzICsgcmVuYW1lIG1lcmdlcyB3aXRoIGJhc2ljIG1vZGlmaWNhdGlvbicgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCXRlbj0iMCAxIDIgMyA0IDUgNiA3IDggOSIKKwlmb3IgaSBpbiAkdGVuCisJZG8KKwkJZWNobyBsaW5lICRpIGluIGEgc2FtcGxlIGZpbGUKKwlkb25lID5vbmUgJiYKKwlmb3IgaSBpbiAkdGVuCisJZG8KKwkJZWNobyBsaW5lICRpIGluIGFub3RoZXIgc2FtcGxlIGZpbGUKKwlkb25lID50d28gJiYKKwlnaXQgYWRkIG9uZSB0d28gJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIEwxICYmCisJZ2l0IGNoZWNrb3V0IC1iIFIxICYmCisJZ2l0IG12IG9uZSB0aHJlZSAmJgorCWVjaG8gbW9yZSA+PnR3byAmJgorCWdpdCBhZGQgdHdvICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gUjEgJiYKKworCWdpdCBjaGVja291dCBMMSAmJgorCWdpdCBtdiB0d28gdGhyZWUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBMMSAmJgorCisJZ2l0IGNoZWNrb3V0IEwxXjAgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1zIG91cnMgUjEgJiYKKwlnaXQgdGFnIEwyICYmCisKKwlnaXQgY2hlY2tvdXQgUjFeMCAmJgorCXRlc3RfdGljayAmJiBnaXQgbWVyZ2UgLXMgb3VycyBMMSAmJgorCWdpdCB0YWcgUjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgY3Jpc3MtY3Jvc3MgKyByZW5hbWUgbWVyZ2VzIHdpdGggYmFzaWMgbW9kaWZpY2F0aW9uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBMMl4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIFIyXjAgJiYKKworCXRlc3QgMiA9ICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAyID0gJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgPSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6dGhyZWUpID0gJChnaXQgcmV2LXBhcnNlIEwyOnRocmVlKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDozOnRocmVlKSA9ICQoZ2l0IHJldi1wYXJzZSBSMjp0aHJlZSkgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEwyOnRocmVlKSA9ICQoZ2l0IGhhc2gtb2JqZWN0IHRocmVlfkhFQUQpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgUjI6dGhyZWUpID0gJChnaXQgaGFzaC1vYmplY3QgdGhyZWV+UjJeMCkKKycKKworIworIyBGb3IgdGhlIG5leHQgdGVzdCwgd2Ugc3RhcnQgd2l0aCB0aHJlZSBjb21taXRzIGluIHR3byBsaW5lcyBvZiBkZXZlbG9wbWVudAorIyB3aGljaCBzZXR1cCBhIHJlbmFtZS9hZGQgY29uZmxpY3Q6CisjICAgQ29tbWl0IEE6IEZpbGUgJ2EnIGV4aXN0cworIyAgIENvbW1pdCBCOiBSZW5hbWUgJ2EnIC0+ICduZXdfYScKKyMgICBDb21taXQgQzogTW9kaWZ5ICdhJywgY3JlYXRlIGRpZmZlcmVudCAnbmV3X2EnCisjIExhdGVyLCB0d28gZGlmZmVyZW50IHBlb3BsZSBtZXJnZSBhbmQgcmVzb2x2ZSBkaWZmZXJlbnRseToKKyMgICBDb21taXQgRDogTWVyZ2UgQiAmIEMsIGlnbm9yaW5nIHNlcGFyYXRlbHkgY3JlYXRlZCAnbmV3X2EnCisjICAgQ29tbWl0IEU6IE1lcmdlIEIgJiBDIG1ha2luZyB1c2Ugb2Ygc29tZSBwaWVjZSBvZiBzZWNvbmRhcnkgJ25ld19hJworIyBGaW5hbGx5LCBzb21lb25lIGdvZXMgdG8gbWVyZ2UgRCAmIEUuICBEb2VzIGdpdCBkZXRlY3QgdGhlIGNvbmZsaWN0PworIworIyAgICAgIEIgICBECisjICAgICAgby0tLW8KKyMgICAgIC8gXCAvIFwKKyMgIEEgbyAgIFggICA/IEYKKyMgICAgIFwgLyBcIC8KKyMgICAgICBvLS0tbworIyAgICAgIEMgICBFCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpZmZlcmVudGx5IGhhbmRsZWQgbWVyZ2VzIG9mIHJlbmFtZS9hZGQgY29uZmxpY3QnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjBcbjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbjlcbiIgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBBICYmCisKKwlnaXQgYnJhbmNoIEIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgQyAmJgorCWVjaG8gMTAgPj5hICYmCisJZWNobyAib3RoZXIgY29udGVudCIgPj5uZXdfYSAmJgorCWdpdCBhZGQgYSBuZXdfYSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEMgJiYKKworCWdpdCBjaGVja291dCBCICYmCisJZ2l0IG12IGEgbmV3X2EgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBCICYmCisKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEMgJiYKKwlnaXQgY2xlYW4gLWYgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBEICYmCisJZ2l0IHRhZyBEICYmCisKKwlnaXQgY2hlY2tvdXQgQ14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEIgJiYKKwlybSBuZXdfYX5IRUFEIG5ld19hICYmCisJcHJpbnRmICJJbmNvcnJlY3RseSBtZXJnZWQgY29udGVudCIgPj5uZXdfYSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBFICYmCisJZ2l0IHRhZyBFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkZXRlY3RzIGRpZmZlcmVudGx5IGhhbmRsZWQgbWVyZ2VzIGNvbmZsaWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBEXjAgJiYKKworCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRV4wICYmIHsKKwkJZWNobyAiQkFEOiBzaG91bGQgaGF2ZSBjb25mbGljdGVkIgorCQl0ZXN0ICJJbmNvcnJlY3RseSBtZXJnZWQgY29udGVudCIgPSAiJChjYXQgbmV3X2EpIiAmJgorCQkJZWNobyAiQkFEOiBTaWxlbnRseSBhY2NlcHRlZCB3cm9uZyBjb250ZW50IgorCQlyZXR1cm4gMQorCX0KKworCXRlc3QgMyA9ICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAzID0gJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgPSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6bmV3X2EpID0gJChnaXQgcmV2LXBhcnNlIEQ6bmV3X2EpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjM6bmV3X2EpID0gJChnaXQgcmV2LXBhcnNlIEU6bmV3X2EpICYmCisKKwlnaXQgY2F0LWZpbGUgLXAgQjpuZXdfYSA+Pm1lcmdlZCAmJgorCWdpdCBjYXQtZmlsZSAtcCBDOm5ld19hID4+bWVyZ2UtbWUgJiYKKwk+ZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSBcCisJCS1MICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIiIFwKKwkJLUwgIiIgXAorCQktTCAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxIiBcCisJCW1lcmdlZCBlbXB0eSBtZXJnZS1tZSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoxOm5ld19hKSA9ICQoZ2l0IGhhc2gtb2JqZWN0IG1lcmdlZCkKKycKKworIworIyBjcmlzcy1jcm9zcyArIG1vZGlmeS9kZWxldGU6CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKyMgICBDb21taXQgQTogZmlsZSB3aXRoIGNvbnRlbnRzICdBXG4nCisjICAgQ29tbWl0IEI6IGZpbGUgd2l0aCBjb250ZW50cyAnQlxuJworIyAgIENvbW1pdCBDOiBmaWxlIG5vdCBwcmVzZW50CisjICAgQ29tbWl0IEQ6IGZpbGUgd2l0aCBjb250ZW50cyAnQlxuJworIyAgIENvbW1pdCBFOiBmaWxlIG5vdCBwcmVzZW50CisjCisjIE1lcmdpbmcgY29tbWl0cyBEICYgRSBzaG91bGQgcmVzdWx0IGluIG1vZGlmeS9kZWxldGUgY29uZmxpY3QuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNyaXNzLWNyb3NzICsgbW9kaWZ5L2RlbGV0ZSByZXNvbHZlZCBkaWZmZXJlbnRseScgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCWVjaG8gQSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCisJZ2l0IGJyYW5jaCBCICYmCisJZ2l0IGNoZWNrb3V0IC1iIEMgJiYKKwlnaXQgcm0gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQyAmJgorCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwllY2hvIEIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCWdpdCBjaGVja291dCBCXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQyAmJgorCWVjaG8gQiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gRCAmJgorCWdpdCB0YWcgRCAmJgorCisJZ2l0IGNoZWNrb3V0IENeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBCICYmCisJZ2l0IHJtIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEUgJiYKKwlnaXQgdGFnIEUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRldGVjdHMgY29uZmxpY3QgbWVyZ2luZyBjcmlzcy1jcm9zcyttb2RpZnkvZGVsZXRlJyAnCisJZ2l0IGNoZWNrb3V0IEReMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFXjAgJiYKKworCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MTpmaWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXI6ZmlsZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MjpmaWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBCOmZpbGUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkZXRlY3RzIGNvbmZsaWN0IG1lcmdpbmcgY3Jpc3MtY3Jvc3MrbW9kaWZ5L2RlbGV0ZSwgcmV2ZXJzZSBkaXJlY3Rpb24nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEVeMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBEXjAgJiYKKworCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MTpmaWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXI6ZmlsZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MzpmaWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBCOmZpbGUpCisnCisKKyMKKyMgY3Jpc3MtY3Jvc3MgKyBtb2RpZnkvbW9kaWZ5IHdpdGggdmVyeSBjb250cml2ZWQgZmlsZSBjb250ZW50czoKKyMKKyMgICAgICBCICAgRAorIyAgICAgIG8tLS1vCisjICAgICAvIFwgLyBcCisjICBBIG8gICBYICAgPyBGCisjICAgICBcIC8gXCAvCisjICAgICAgby0tLW8KKyMgICAgICBDICAgRQorIworIyAgIENvbW1pdCBBOiBmaWxlIHdpdGggY29udGVudHMgJ0FcbicKKyMgICBDb21taXQgQjogZmlsZSB3aXRoIGNvbnRlbnRzICdCXG4nCisjICAgQ29tbWl0IEM6IGZpbGUgd2l0aCBjb250ZW50cyAnQ1xuJworIyAgIENvbW1pdCBEOiBmaWxlIHdpdGggY29udGVudHMgJ0RcbicKKyMgICBDb21taXQgRTogZmlsZSB3aXRoIGNvbnRlbnRzOgorIyAgICAgIDw8PDw8PDwgVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxCisjICAgICAgQworIyAgICAgID09PT09PT0KKyMgICAgICBCCisjICAgICAgPj4+Pj4+PiBUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIKKyMKKyMgTm93LCB3aGVuIHdlIG1lcmdlIGNvbW1pdHMgRCAmIEUsIGRvZXMgZ2l0IGRldGVjdCB0aGUgY29uZmxpY3Q/CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpZmZlcmVudGx5IGhhbmRsZWQgbWVyZ2VzIG9mIGNvbnRlbnQgY29uZmxpY3QnICcKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwllY2hvIEEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKworCWdpdCBicmFuY2ggQiAmJgorCWdpdCBjaGVja291dCAtYiBDICYmCisJZWNobyBDID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwlnaXQgY2hlY2tvdXQgQiAmJgorCWVjaG8gQiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBDICYmCisJZWNobyBEID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBEICYmCisJZ2l0IHRhZyBEICYmCisKKwlnaXQgY2hlY2tvdXQgQ14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEIgJiYKKwljYXQgPDxFT0YgPmZpbGUgJiYKKzw8PDw8PDwgVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxCitDCis9PT09PT09CitCCis+Pj4+Pj4+IFRlbXBvcmFyeSBtZXJnZSBicmFuY2ggMgorRU9GCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBFICYmCisJZ2l0IHRhZyBFCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdCBkZXRlY3RzIGNvbmZsaWN0IHcvIGNyaXNzLWNyb3NzK2NvbnRyaXZlZCByZXNvbHV0aW9uJyAnCisJZ2l0IGNoZWNrb3V0IEReMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFXjAgJiYKKworCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6ZmlsZSkgPSAkKGdpdCByZXYtcGFyc2UgRDpmaWxlKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDozOmZpbGUpID0gJChnaXQgcmV2LXBhcnNlIEU6ZmlsZSkKKycKKworIworIyBjcmlzcy1jcm9zcyArIGQvZiBjb25mbGljdCB2aWEgYWRkL2FkZDoKKyMgICBDb21taXQgQTogTmVpdGhlciBmaWxlICdhJyBub3IgZGlyZWN0b3J5ICdhLycgZXhpc3QuCisjICAgQ29tbWl0IEI6IEludHJvZHVjZSAnYScKKyMgICBDb21taXQgQzogSW50cm9kdWNlICdhL2ZpbGUnCisjICAgQ29tbWl0IEQ6IE1lcmdlIEIgJiBDLCBrZWVwaW5nICdhJyBhbmQgZGVsZXRpbmcgJ2EvJworIworIyBUd28gZGlmZmVyZW50IGxhdGVyIGNhc2VzOgorIyAgIENvbW1pdCBFMTogTWVyZ2UgQiAmIEMsIGRlbGV0aW5nICdhJyBidXQga2VlcGluZyAnYS9maWxlJworIyAgIENvbW1pdCBFMjogTWVyZ2UgQiAmIEMsIGRlbGV0aW5nICdhJyBidXQga2VlcGluZyBhIHNsaWdodGx5IG1vZGlmaWVkICdhL2ZpbGUnCisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUxIG9yIEUyCisjCisjIE1lcmdpbmcgRCAmIEUxIHJlcXVpcmVzIHdlIGZpcnN0IGNyZWF0ZSBhIHZpcnR1YWwgbWVyZ2UgYmFzZSBYIGZyb20KKyMgbWVyZ2luZyBBICYgQiBpbiBtZW1vcnkuICBOb3csIGlmIFggY291bGQga2VlcCBib3RoICdhJyBhbmQgJ2EvZmlsZScgaW4KKyMgdGhlIGluZGV4LCB0aGVuIHRoZSBtZXJnZSBvZiBEICYgRTEgY291bGQgYmUgcmVzb2x2ZWQgY2xlYW5seSB3aXRoIGJvdGgKKyMgJ2EnIGFuZCAnYS9maWxlJyByZW1vdmVkLiAgU2luY2UgZ2l0IGRvZXMgbm90IGN1cnJlbnRseSBhbGxvdyBjcmVhdGluZworIyBzdWNoIGEgdHJlZSwgdGhlIGJlc3Qgd2UgY2FuIGRvIGlzIGhhdmUgWCBjb250YWluIGJvdGggJ2F+PHVuaXF1ZT4nIGFuZAorIyAnYS9maWxlJyByZXN1bHRpbmcgaW4gdGhlIG1lcmdlIG9mIEQgYW5kIEUxIGhhdmluZyBhIHJlbmFtZS9kZWxldGUKKyMgY29uZmxpY3QgZm9yICdhJy4gIChBbHRob3VnaCB0aGlzIG1lcmdlIGFwcGVhcnMgdG8gYmUgdW5zb2x2YWJsZSB3aXRoIGdpdAorIyBjdXJyZW50bHksIGdpdCBjb3VsZCBkbyBhIGxvdCBiZXR0ZXIgdGhhbiBpdCBjdXJyZW50bHkgZG9lcyB3aXRoIHRoZXNlCisjIGQvZiBjb25mbGljdHMsIHdoaWNoIGlzIHRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdC4pCisjCisjIE1lcmdlIG9mIEQgJiBFMiBoYXMgc2ltaWxhciBpc3N1ZXMgZm9yIHBhdGggJ2EnLCBidXQgc2hvdWxkIGFsd2F5cyByZXN1bHQKKyMgaW4gYSBtb2RpZnkvZGVsZXRlIGNvbmZsaWN0IGZvciBwYXRoICdhL2ZpbGUnLgorIworIyBXZSBydW4gZWFjaCBtZXJnZSBpbiBib3RoIGRpcmVjdGlvbnMsIHRvIGNoZWNrIGZvciBkaXJlY3Rpb25hbCBpc3N1ZXMKKyMgd2l0aCBEL0YgY29uZmxpY3QgaGFuZGxpbmcuCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpZmZlcmVudGx5IGhhbmRsZWQgbWVyZ2VzIG9mIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0JyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJPmlnbm9yZS1tZSAmJgorCWdpdCBhZGQgaWdub3JlLW1lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwlnaXQgYnJhbmNoIEIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgQyAmJgorCW1rZGlyIGEgJiYKKwllY2hvIDEwID5hL2ZpbGUgJiYKKwlnaXQgYWRkIGEvZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQyAmJgorCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwllY2hvIDUgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCWdpdCBjaGVja291dCBCXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQyAmJgorCWdpdCBjbGVhbiAtZiAmJgorCXJtIC1yZiBhLyAmJgorCWVjaG8gNSA+YSAmJgorCWdpdCBhZGQgYSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gRCAmJgorCWdpdCB0YWcgRCAmJgorCisJZ2l0IGNoZWNrb3V0IENeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBCICYmCisJZ2l0IGNsZWFuIC1mICYmCisJZ2l0IHJtIC0tY2FjaGVkIGEgJiYKKwllY2hvIDEwID5hL2ZpbGUgJiYKKwlnaXQgYWRkIGEvZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gRTEgJiYKKwlnaXQgdGFnIEUxICYmCisKKwlnaXQgY2hlY2tvdXQgQ14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEIgJiYKKwlnaXQgY2xlYW4gLWYgJiYKKwlnaXQgcm0gLS1jYWNoZWQgYSAmJgorCXByaW50ZiAiMTBcbjExXG4iID5hL2ZpbGUgJiYKKwlnaXQgYWRkIGEvZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gRTIgJiYKKwlnaXQgdGFnIEUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG9mIEQgJiBFMSBmYWlscyBidXQgaGFzIGFwcHJvcHJpYXRlIGNvbnRlbnRzJyAnCisJZ2V0X2NsZWFuX2NoZWNrb3V0IEReMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFMV4wICYmCisKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAxIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIDowOmlnbm9yZS1tZSkgPSAkKGdpdCByZXYtcGFyc2UgQTppZ25vcmUtbWUpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6YSkgPSAkKGdpdCByZXYtcGFyc2UgQjphKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvZiBFMSAmIEQgZmFpbHMgYnV0IGhhcyBhcHByb3ByaWF0ZSBjb250ZW50cycgJworCWdldF9jbGVhbl9jaGVja291dCBFMV4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEReMCAmJgorCisJdGVzdCAyIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MDppZ25vcmUtbWUpID0gJChnaXQgcmV2LXBhcnNlIEE6aWdub3JlLW1lKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDozOmEpID0gJChnaXQgcmV2LXBhcnNlIEI6YSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2YgRCAmIEUyIGZhaWxzIGJ1dCBoYXMgYXBwcm9wcmlhdGUgY29udGVudHMnICcKKwlnZXRfY2xlYW5fY2hlY2tvdXQgRF4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEUyXjAgJiYKKworCXRlc3QgNCAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAxIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6YSkgPSAkKGdpdCByZXYtcGFyc2UgQjphKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDozOmEvZmlsZSkgPSAkKGdpdCByZXYtcGFyc2UgRTI6YS9maWxlKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoxOmEvZmlsZSkgPSAkKGdpdCByZXYtcGFyc2UgQzphL2ZpbGUpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjA6aWdub3JlLW1lKSA9ICQoZ2l0IHJldi1wYXJzZSBBOmlnbm9yZS1tZSkgJiYKKworCXRlc3QgLWYgYX5IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG9mIEUyICYgRCBmYWlscyBidXQgaGFzIGFwcHJvcHJpYXRlIGNvbnRlbnRzJyAnCisJZ2V0X2NsZWFuX2NoZWNrb3V0IEUyXjAgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRF4wICYmCisKKwl0ZXN0IDQgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAzIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIDozOmEpID0gJChnaXQgcmV2LXBhcnNlIEI6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MjphL2ZpbGUpID0gJChnaXQgcmV2LXBhcnNlIEUyOmEvZmlsZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MTphL2ZpbGUpID0gJChnaXQgcmV2LXBhcnNlIEM6YS9maWxlKQorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDowOmlnbm9yZS1tZSkgPSAkKGdpdCByZXYtcGFyc2UgQTppZ25vcmUtbWUpICYmCisKKwl0ZXN0IC1mIGF+RF4wCisnCisKKyMKKyMgY3Jpc3MtY3Jvc3Mgd2l0aCByZW5hbWUvcmVuYW1lKDF0bzIpL21vZGlmeSBmb2xsb3dlZCBieQorIyByZW5hbWUvcmVuYW1lKDJ0bzEpL21vZGlmeToKKyMKKyMgICAgICBCICAgRAorIyAgICAgIG8tLS1vCisjICAgICAvIFwgLyBcCisjICBBIG8gICBYICAgPyBGCisjICAgICBcIC8gXCAvCisjICAgICAgby0tLW8KKyMgICAgICBDICAgRQorIworIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQorIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YiwgbW9kaWZ5aW5nIGJ5IGFkZGluZyBhIGxpbmUKKyMgICBDb21taXQgQzogcmVuYW1lIGEtPmMKKyMgICBDb21taXQgRDogbWVyZ2UgQiZDLCByZXNvbHZpbmcgY29uZmxpY3QgYnkga2VlcGluZyBjb250ZW50cyBpbiBuZXduYW1lCisjICAgQ29tbWl0IEU6IG1lcmdlIEImQywgcmVzb2x2aW5nIGNvbmZsaWN0IHNpbWlsYXIgdG8gRCBidXQgYWRkaW5nIGFub3RoZXIgbGluZQorIworIyBUaGVyZSBpcyBhIGNvbmZsaWN0IG1lcmdpbmcgQiAmIEMsIGJ1dCBvbmUgb2YgZmlsZW5hbWUgbm90IG9mIGZpbGUKKyMgY29udGVudC4gIFdob2V2ZXIgY3JlYXRlZCBEIGFuZCBFIGNob3NlIHNwZWNpZmljIHJlc29sdXRpb25zIGZvciB0aGF0CisjIGNvbmZsaWN0IHJlc29sdXRpb24uICBOb3csIHNpbmNlOiAoMSkgdGhlcmUgaXMgbm8gY29udGVudCBjb25mbGljdAorIyBtZXJnaW5nIEIgJiBDLCAoMikgRCBkb2VzIG5vdCBtb2RpZnkgdGhhdCBtZXJnZWQgY29udGVudCBmdXJ0aGVyLCBhbmQgKDMpCisjIGJvdGggRCAmIEUgcmVzb2x2ZSB0aGUgbmFtZSBjb25mbGljdCBpbiB0aGUgc2FtZSB3YXksIHRoZSBtb2RpZmljYXRpb24gdG8KKyMgbmV3bmFtZSBpbiBFIHNob3VsZCBub3QgY2F1c2UgYW55IGNvbmZsaWN0cyB3aGVuIGl0IGlzIG1lcmdlZCB3aXRoIEQuCisjIChOb3RlIHRoYXQgdGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IGhhdmluZyB0aGUgdmlydHVhbCBtZXJnZSBiYXNlIGhhdmUKKyMgdGhlIG1lcmdlZCBjb250ZW50cyBvZiBiIGFuZCBjIHN0b3JlZCBpbiBhIGZpbGUgbmFtZWQgYSwgd2hpY2ggc2VlbXMgbGlrZQorIyB0aGUgbW9zdCBsb2dpY2FsIGNob2ljZSBhbnl3YXkuKQorIworIyBDb21tZW50IGZyb20gSnVuaW86IEkgZG8gbm90IG5lY2Vzc2FyaWx5IGFncmVlIHdpdGggdGhlIGNob2ljZSAiYSIsIGJ1dAorIyBpdCBmZWVscyBzb3VuZCB0byBzYXkgIkIgYW5kIEMgZG8gbm90IGFncmVlIHdoYXQgdGhlIGZpbmFsIHBhdGhuYW1lCisjIHNob3VsZCBiZSwgYnV0IHdlIGtub3cgdGhpcyBjb250ZW50IHdhcyBkZXJpdmVkIGZyb20gdGhlIGNvbW1vbiBBOmEgc28gd2UKKyMgdXNlIG9uZSBwYXRoIHdob3NlIG5hbWUgaXMgYXJiaXRyYXJ5IGluIHRoZSB2aXJ0dWFsIG1lcmdlIGJhc2UgWCBiZXR3ZWVuCisjIEQgYW5kIEUiIGFuZCB0aGVuIGZ1cnRoZXIgbGV0IHRoZSByZW5hbWUgZGV0ZWN0aW9uIHRvIG5vdGljZSB0aGF0IHRoYXQKKyMgYXJiaXRyYXJ5IHBhdGggZ2V0cyByZW5hbWVkIGJldHdlZW4gWC1EIHRvICJuZXduYW1lIiBhbmQgWC1FIGFsc28gdG8KKyMgIm5ld25hbWUiIHRvIHJlc29sdmUgaXQgYXMgYm90aCBzaWRlcyByZW5hbWluZyBpdCB0byB0aGUgc2FtZSBuZXcKKyMgbmFtZS4gSXQgaXMgYWtpbiB0byB3aGF0IHdlIGRvIGF0IHRoZSBjb250ZW50IGxldmVsLCBpLmUuICJCIGFuZCBDIGRvIG5vdAorIyBhZ3JlZSB3aGF0IHRoZSBmaW5hbCBjb250ZW50cyBzaG91bGQgYmUsIHNvIHdlIGxlYXZlIHRoZSBjb25mbGljdCBtYXJrZXIKKyMgYnV0IHRoYXQgbWF5IGNhbmNlbCBvdXQgYXQgdGhlIGZpbmFsIG1lcmdlIHN0YWdlIi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lL3JlbmFtZSgxdG8yKS9tb2RpZnkgZm9sbG93ZWQgYnkgd2hhdCBsb29rcyBsaWtlIHJlbmFtZS9yZW5hbWUoMnRvMSkvbW9kaWZ5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuIiA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCWdpdCB0YWcgQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCWdpdCBtdiBhIGIgJiYKKwllY2hvIDcgPj5iICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCWdpdCBtdiBhIGMgJiYKKwlnaXQgY29tbWl0IC1tIEMgJiYKKworCWdpdCBjaGVja291dCAtcSBCXjAgJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgLXMgb3VycyBDXjAgJiYKKwlnaXQgbXYgYiBuZXduYW1lICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgY29tbWl0IENeMCBpbnRvIEhFQUQiICYmCisJZ2l0IHRhZyBEICYmCisKKwlnaXQgY2hlY2tvdXQgLXEgQ14wICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC1zIG91cnMgQl4wICYmCisJZ2l0IG12IGMgbmV3bmFtZSAmJgorCXByaW50ZiAiN1xuOFxuIiA+Pm5ld25hbWUgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgY29tbWl0IEJeMCBpbnRvIEhFQUQiICYmCisJZ2l0IHRhZyBFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsZSByZW5hbWUvcmVuYW1lKDF0bzIpL21vZGlmeSBmb2xsb3dlZCBieSB3aGF0IGxvb2tzIGxpa2UgcmVuYW1lL3JlbmFtZSgydG8xKS9tb2RpZnknICcKKwlnaXQgY2hlY2tvdXQgRF4wICYmCisKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEVeMCAmJgorCisJdGVzdCAxIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOm5ld25hbWUpID0gJChnaXQgcmV2LXBhcnNlIEU6bmV3bmFtZSkKKycKKworIworIyBjcmlzcy1jcm9zcyB3aXRoIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLXNvdXJjZSArIHJlc29sdmFibGUgbW9kaWZ5L21vZGlmeToKKyMKKyMgICAgICBCICAgRAorIyAgICAgIG8tLS1vCisjICAgICAvIFwgLyBcCisjICBBIG8gICBYICAgPyBGCisjICAgICBcIC8gXCAvCisjICAgICAgby0tLW8KKyMgICAgICBDICAgRQorIworIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQorIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YgorIyAgIENvbW1pdCBDOiByZW5hbWUgYS0+YywgYWRkIGRpZmZlcmVudCBhCisjICAgQ29tbWl0IEQ6IG1lcmdlIEImQywga2VlcGluZyBiJmMgYW5kIChuZXcpIGEgbW9kaWZpZWQgYXQgYmVnaW5uaW5nCisjICAgQ29tbWl0IEU6IG1lcmdlIEImQywga2VlcGluZyBiJmMgYW5kIChuZXcpIGEgbW9kaWZpZWQgYXQgZW5kCisjCisjIE1lcmdpbmcgY29tbWl0cyBEICYgRSBzaG91bGQgcmVzdWx0IGluIG5vIGNvbmZsaWN0OyBkb2luZyBzbyBjb3JyZWN0bHkKKyMgcmVxdWlyZXMgZ2V0dGluZyB0aGUgdmlydHVhbCBtZXJnZSBiYXNlIChmcm9tIG1lcmdpbmcgQiZDKSByaWdodCwgaGFuZGxpbmcKKyMgcmVuYW1pbmcgY2FyZWZ1bGx5IChib3RoIGluIHRoZSB2aXJ0dWFsIG1lcmdlIGJhc2UgYW5kIGxhdGVyKSwgYW5kIGdldHRpbmcKKyMgY29udGVudCBtZXJnZSBoYW5kbGVkLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjcmlzcy1jcm9zcyArIHJlbmFtZS9yZW5hbWUvYWRkICsgbW9kaWZ5L21vZGlmeScgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCXByaW50ZiAibG90c1xub2ZcbndvcmRzXG5hbmRcbmNvbnRlbnRcbiIgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKwlnaXQgdGFnIEEgJiYKKworCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwlnaXQgbXYgYSBiICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGEgYyAmJgorCXByaW50ZiAiMlxuM1xuNFxuNVxuNlxuN1xuIiA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gQyAmJgorCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzIENeMCAmJgorCWdpdCBjaGVja291dCBDIC0tIGEgYyAmJgorCW12IGEgb2xkX2EgJiYKKwllY2hvIDEgPmEgJiYKKwljYXQgb2xkX2EgPj5hICYmCisJcm0gb2xkX2EgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgY29tbWl0IENeMCBpbnRvIEhFQUQiICYmCisJZ2l0IHRhZyBEICYmCisKKwlnaXQgY2hlY2tvdXQgQ14wICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC1zIG91cnMgQl4wICYmCisJZ2l0IGNoZWNrb3V0IEIgLS0gYiAmJgorCWVjaG8gOCA+PmEgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgY29tbWl0IEJeMCBpbnRvIEhFQUQiICYmCisJZ2l0IHRhZyBFCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RldGVjdCByZW5hbWUvcmVuYW1lL2FkZC1zb3VyY2UgZm9yIHZpcnR1YWwgbWVyZ2UtYmFzZScgJworCWdpdCBjaGVja291dCBEXjAgJiYKKworCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRV4wICYmCisKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6YikgPSAkKGdpdCByZXYtcGFyc2UgQTphKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6YykgPSAkKGdpdCByZXYtcGFyc2UgQTphKSAmJgorCXRlc3QgIiQoY2F0IGEpIiA9ICIkKHByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuIikiCisnCisKKyMKKyMgY3Jpc3MtY3Jvc3Mgd2l0aCByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZC1kZXN0ICsgc2ltcGxlIG1vZGlmeToKKyMKKyMgICAgICBCICAgRAorIyAgICAgIG8tLS1vCisjICAgICAvIFwgLyBcCisjICBBIG8gICBYICAgPyBGCisjICAgICBcIC8gXCAvCisjICAgICAgby0tLW8KKyMgICAgICBDICAgRQorIworIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQorIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YiwgYWRkIGMKKyMgICBDb21taXQgQzogcmVuYW1lIGEtPmMKKyMgICBDb21taXQgRDogbWVyZ2UgQiZDLCBrZWVwaW5nIEE6YSBhbmQgQjpjCisjICAgQ29tbWl0IEU6IG1lcmdlIEImQywga2VlcGluZyBBOmEgYW5kIHNsaWdodGx5IG1vZGlmaWVkIGMgZnJvbSBCCisjCisjIE1lcmdpbmcgY29tbWl0cyBEICYgRSBzaG91bGQgcmVzdWx0IGluIG5vIGNvbmZsaWN0LiAgVGhlIHZpcnR1YWwgbWVyZ2UKKyMgYmFzZSBvZiBCICYgQyBuZWVkcyB0byBub3QgZGVsZXRlIEI6YyBmb3IgdGhhdCB0byB3b3JrLCB0aG91Z2guLi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY3Jpc3MtY3Jvc3MrcmVuYW1lL3JlbmFtZS9hZGQtZGVzdCArIHNpbXBsZSBtb2RpZnknICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwk+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCWdpdCB0YWcgQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCWdpdCBtdiBhIGIgJiYKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbiIgPmMgJiYKKwlnaXQgYWRkIGMgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwlnaXQgbXYgYSBjICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC1zIG91cnMgQ14wICYmCisJZ2l0IG12IGIgYSAmJgorCWdpdCBjb21taXQgLW0gIkQgaXMgbGlrZSBCIGJ1dCByZW5hbWVzIGIgYmFjayB0byBhIiAmJgorCWdpdCB0YWcgRCAmJgorCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzIENeMCAmJgorCWdpdCBtdiBiIGEgJiYKKwllY2hvIDggPj5jICYmCisJZ2l0IGFkZCBjICYmCisJZ2l0IGNvbW1pdCAtbSAiRSBsaWtlIEQgYnV0IGhhcyBtb2QgaW4gYyIgJiYKKwlnaXQgdGFnIEUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmlydHVhbCBtZXJnZSBiYXNlIGhhbmRsZXMgcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQtZGVzdCcgJworCWdpdCBjaGVja291dCBEXjAgJiYKKworCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRV4wICYmCisKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6YSkgPSAkKGdpdCByZXYtcGFyc2UgQTphKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6YykgPSAkKGdpdCByZXYtcGFyc2UgRTpjKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzctbWVyZ2Utb3Vycy10aGVpcnMuc2ggYi90L3Q2MDM3LW1lcmdlLW91cnMtdGhlaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4ODllY2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDM3LW1lcmdlLW91cnMtdGhlaXJzLnNoCkBAIC0wLDAgKzEsNzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdNZXJnZS1yZWN1cnNpdmUgb3VycyBhbmQgdGhlaXJzIHZhcmlhbnRzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5CisJZG8KKwkJZWNobyAiJGkiCisJZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWNwIGZpbGUgZWxpZiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJc2VkIC1lICJzLzEvb25lLyIgLWUgInMvOS9uaW5lLyIgPmZpbGUgPGVsaWYgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG91cnMgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisKKwlzZWQgLWUgInMvOS9udWV2ZS8iID5maWxlIDxlbGlmICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0aGVpcnMgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXJeMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiByZWN1cnNpdmUgLSBzaG91bGQgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgc2lkZSAmJgorCWdyZXAgbmluZSBmaWxlICYmCisJZ3JlcCBudWV2ZSBmaWxlICYmCisJISBncmVwIDkgZmlsZSAmJgorCWdyZXAgb25lIGZpbGUgJiYKKwkhIGdyZXAgMSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSBmYXZvdXJpbmcgdGhlaXJzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIC1YdGhlaXJzIHNpZGUgJiYKKwkhIGdyZXAgbmluZSBmaWxlICYmCisJZ3JlcCBudWV2ZSBmaWxlICYmCisJISBncmVwIDkgZmlsZSAmJgorCWdyZXAgb25lIGZpbGUgJiYKKwkhIGdyZXAgMSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSBmYXZvdXJpbmcgb3VycycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSAtWCBvdXJzIHNpZGUgJiYKKwlncmVwIG5pbmUgZmlsZSAmJgorCSEgZ3JlcCBudWV2ZSBmaWxlICYmCisJISBncmVwIDkgZmlsZSAmJgorCWdyZXAgb25lIGZpbGUgJiYKKwkhIGdyZXAgMSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JpbmFyeSBmaWxlIHdpdGggLVhvdXJzLy1YdGhlaXJzJyAnCisJZWNobyBmaWxlIGJpbmFyeSA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSAtWCB0aGVpcnMgc2lkZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNpZGUgSEVBRCAtLSBmaWxlICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLVggb3VycyBzaWRlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyIEhFQUQgLS0gZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHBhc3NlcyAtWCB0byB1bmRlcmx5aW5nIG1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYgZ2l0IHB1bGwgLXMgcmVjdXJzaXZlIC1Yb3VycyAuIHNpZGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJiBnaXQgcHVsbCAtcyByZWN1cnNpdmUgLVggb3VycyAuIHNpZGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJiBnaXQgcHVsbCAtcyByZWN1cnNpdmUgLVh0aGVpcnMgLiBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYgZ2l0IHB1bGwgLXMgcmVjdXJzaXZlIC1YIHRoZWlycyAuIHNpZGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJiB0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtcyByZWN1cnNpdmUgLVggYm9yayAuIHNpZGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDM4LW1lcmdlLXRleHQtYXV0by5zaCBiL3QvdDYwMzgtbWVyZ2UtdGV4dC1hdXRvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ5YzJkMzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDM4LW1lcmdlLXRleHQtYXV0by5zaApAQCAtMCwwICsxLDE5MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0NSTEYgbWVyZ2UgY29uZmxpY3QgYWNyb3NzIHRleHQ9YXV0byBjaGFuZ2UKKworKiBbbWFzdGVyXSByZW1vdmUgLmdpdGF0dHJpYnV0ZXMKKyAhIFtzaWRlXSBhZGQgbGluZSBmcm9tIGIKKy0tCisgKyBbc2lkZV0gYWRkIGxpbmUgZnJvbSBiCisqICBbbWFzdGVyXSByZW1vdmUgLmdpdGF0dHJpYnV0ZXMKKyogIFttYXN0ZXJeXSBhZGQgbGluZSBmcm9tIGEKKyogIFttYXN0ZXJ+Ml0gbm9ybWFsaXplIGZpbGUKKyorIFtzaWRlXl0gSW5pdGlhbAorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9oYXZlX3ByZXJlcSBTRURfU1RSSVBTX0NSICYmIFNFRF9PUFRJT05TPS1iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCisJZWNobyBmaXJzdCBsaW5lIHwgYXBwZW5kX2NyID5maWxlICYmCisJZWNobyBmaXJzdCBsaW5lID5jb250cm9sX2ZpbGUgJiYKKwllY2hvIG9ubHkgbGluZSA+aW5lcnRfZmlsZSAmJgorCisJZ2l0IGFkZCBmaWxlIGNvbnRyb2xfZmlsZSBpbmVydF9maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCWVjaG8gIiogdGV4dD1hdXRvIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwl0b3VjaCBmaWxlICYmCisJZ2l0IGFkZCAuZ2l0YXR0cmlidXRlcyBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibm9ybWFsaXplIGZpbGUiICYmCisKKwllY2hvIHNhbWUgbGluZSB8IGFwcGVuZF9jciA+PmZpbGUgJiYKKwllY2hvIHNhbWUgbGluZSA+PmNvbnRyb2xfZmlsZSAmJgorCWdpdCBhZGQgZmlsZSBjb250cm9sX2ZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSBmcm9tIGEiICYmCisJZ2l0IHRhZyBhICYmCisKKwlnaXQgcm0gLmdpdGF0dHJpYnV0ZXMgJiYKKwlybSBmaWxlICYmCisJZ2l0IGNoZWNrb3V0IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgLmdpdGF0dHJpYnV0ZXMiICYmCisJZ2l0IHRhZyBjICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWVjaG8gc2FtZSBsaW5lIHwgYXBwZW5kX2NyID4+ZmlsZSAmJgorCWVjaG8gc2FtZSBsaW5lID4+Y29udHJvbF9maWxlICYmCisJZ2l0IGFkZCBmaWxlIGNvbnRyb2xfZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsaW5lIGZyb20gYiIgJiYKKwlnaXQgdGFnIGIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZ1enpfY29uZmxpY3QoKSBoZWxwZXInICcKKwlmdXp6X2NvbmZsaWN0KCkgeworCQlzZWQgJFNFRF9PUFRJT05TIC1lICJzL15cKFs8Pj1dLi4uLi4uXCkgLiovXDEvIiAiJEAiCisJfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZXJnZSBhZnRlciBzZXR0aW5nIHRleHQ9YXV0bycgJworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCWZpcnN0IGxpbmUKKwlzYW1lIGxpbmUKKwlFT0YKKworCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgdHJ1ZSAmJgorCWdpdCBybSAtZnIgLiAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBhICYmCisJZ2l0IG1lcmdlIGIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01lcmdlIGFkZGl0aW9uIG9mIHRleHQ9YXV0bycgJworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCWZpcnN0IGxpbmUKKwlzYW1lIGxpbmUKKwlFT0YKKworCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgdHJ1ZSAmJgorCWdpdCBybSAtZnIgLiAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiICYmCisJZ2l0IG1lcmdlIGEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RldGVjdCBDUkxGL0xGIGNvbmZsaWN0IGFmdGVyIHNldHRpbmcgdGV4dD1hdXRvJyAnCisJcV90b19jciA8PC1cRU9GID5leHBlY3RlZCAmJgorCTw8PDw8PDwKKwlmaXJzdCBsaW5lCisJc2FtZSBsaW5lCisJPT09PT09PQorCWZpcnN0IGxpbmVRCisJc2FtZSBsaW5lUQorCT4+Pj4+Pj4KKwlFT0YKKworCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgZmFsc2UgJiYKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZXNldCAtLWhhcmQgYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBiICYmCisJZnV6el9jb25mbGljdCBmaWxlID5maWxlLmZ1enp5ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZS5mdXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEZXRlY3QgTEYvQ1JMRiBjb25mbGljdCBmcm9tIGFkZGl0aW9uIG9mIHRleHQ9YXV0bycgJworCXFfdG9fY3IgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwk8PDw8PDw8CisJZmlyc3QgbGluZVEKKwlzYW1lIGxpbmVRCisJPT09PT09PQorCWZpcnN0IGxpbmUKKwlzYW1lIGxpbmUKKwk+Pj4+Pj4+CisJRU9GCisKKwlnaXQgY29uZmlnIG1lcmdlLnJlbm9ybWFsaXplIGZhbHNlICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYSAmJgorCWZ1enpfY29uZmxpY3QgZmlsZSA+ZmlsZS5mdXp6eSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUuZnV6enkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2hlY2tvdXQgLW0gYWZ0ZXIgc2V0dGluZyB0ZXh0PWF1dG8nICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlmaXJzdCBsaW5lCisJc2FtZSBsaW5lCisJRU9GCisKKwlnaXQgY29uZmlnIG1lcmdlLnJlbm9ybWFsaXplIHRydWUgJiYKKwlnaXQgcm0gLWZyIC4gJiYKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBjaGVja291dCBhIC0tIC4gJiYKKwlnaXQgY2hlY2tvdXQgLW0gYiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2hlY2tvdXQgLW0gYWRkaXRpb24gb2YgdGV4dD1hdXRvJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZmlyc3QgbGluZQorCXNhbWUgbGluZQorCUVPRgorCisJZ2l0IGNvbmZpZyBtZXJnZS5yZW5vcm1hbGl6ZSB0cnVlICYmCisJZ2l0IHJtIC1mciAuICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgZmlsZSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBjaGVja291dCBiIC0tIC4gJiYKKwlnaXQgY2hlY2tvdXQgLW0gYSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2hlcnJ5LXBpY2sgcGF0Y2ggZnJvbSBhZnRlciB0ZXh0PWF1dG8gd2FzIGFkZGVkJyAnCisJYXBwZW5kX2NyIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZmlyc3QgbGluZQorCXNhbWUgbGluZQorCUVPRgorCisJZ2l0IGNvbmZpZyBtZXJnZS5yZW5vcm1hbGl6ZSB0cnVlICYmCisJZ2l0IHJtIC1mciAuICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGEgPmVyciAyPiYxICYmCisJZ3JlcCAiW05uXW90aGluZyBhZGRlZCIgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUZXN0IGRlbGV0ZS9ub3JtYWxpemUgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgLWYgc2lkZSAmJgorCWdpdCBybSAtZnIgLiAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IHJtIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgZmlsZSIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBhXiAmJgorCWdpdCBtZXJnZSBzaWRlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjA0MC10cmFja2luZy1pbmZvLnNoIGIvdC90NjA0MC10cmFja2luZy1pbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjMmI1MTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDQwLXRyYWNraW5nLWluZm8uc2gKQEAgLTAsMCArMSwxNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZW1vdGUgdHJhY2tpbmcgc3RhdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCithZHZhbmNlICgpIHsKKwllY2hvICIkMSIgPiIkMSIgJiYKKwlnaXQgYWRkICIkMSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gYSBiIGM7CisJZG8KKwkJYWR2YW5jZSAkaSB8fCBicmVhaworCWRvbmUgJiYKKwlnaXQgY2xvbmUgLiB0ZXN0ICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCAtYiBiMSBvcmlnaW4gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCQlhZHZhbmNlIGQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGIyIG9yaWdpbiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIGIxICYmCisJCWdpdCBjaGVja291dCAtYiBiMyBvcmlnaW4gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYjQgb3JpZ2luICYmCisJCWFkdmFuY2UgZSAmJgorCQlhZHZhbmNlIGYKKwkpICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvbGxvd2VyIC0tdHJhY2sgbWFzdGVyICYmCisJYWR2YW5jZSBnCisnCisKK3NjcmlwdD0ncy9eLi5cKGIuXClbCSAwLTlhLWZdKlxbXChbXl1dKlwpXF0uKi9cMSBcMi9wJworY2F0ID5leHBlY3QgPDxcRU9GCitiMSBhaGVhZCAxLCBiZWhpbmQgMQorYjIgYWhlYWQgMSwgYmVoaW5kIDEKK2IzIGJlaGluZCAxCitiNCBhaGVhZCAyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC12JyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBicmFuY2ggLXYKKwkpIHwKKwlzZWQgLW4gLWUgIiRzY3JpcHQiID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2IxIG9yaWdpbi9tYXN0ZXI6IGFoZWFkIDEsIGJlaGluZCAxCitiMiBvcmlnaW4vbWFzdGVyOiBhaGVhZCAxLCBiZWhpbmQgMQorYjMgb3JpZ2luL21hc3RlcjogYmVoaW5kIDEKK2I0IG9yaWdpbi9tYXN0ZXI6IGFoZWFkIDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLXZ2JyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBicmFuY2ggLXZ2CisJKSB8CisJc2VkIC1uIC1lICIkc2NyaXB0IiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQnICcKKwkoCisJCWNkIHRlc3QgJiYgZ2l0IGNoZWNrb3V0IGIxCisJKSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiaGF2ZSAxIGFuZCAxIGRpZmZlcmVudCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggbG9jYWwgdHJhY2tlZCBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IGZvbGxvd2VyID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJpcyBhaGVhZCBvZiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cycgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgY2hlY2tvdXQgYjEgPi9kZXYvbnVsbCAmJgorCQkjIHJlcG9ydHMgbm90aGluZyB0byBjb21taXQKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWRyeS1ydW4KKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXZlIDEgYW5kIDEgZGlmZmVyZW50IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB0byB0cmFjayBsaWdodHdlaWdodCB0YWdzJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCB0YWcgbGlnaHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdHJhY2sgbGlnaHR0cmFjayBsaWdodCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAhICJzZXQgdXAgdG8gdHJhY2siIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBsaWdodHRyYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgdG8gdHJhY2sgYW5ub3RhdGVkIHRhZ3MnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyAtbSBoZWF2eSBoZWF2eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS10cmFjayBoZWF2eXRyYWNrIGhlYXZ5ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgInNldCB1cCB0byB0cmFjayIgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGhlYXZ5dHJhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdHJhY2tpbmcgd2l0aCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gb24gZXhpc3RpbmcgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBmcm9tLW1hc3RlciBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3Rlci5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gZnJvbS1tYXN0ZXIgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZnJvbS1tYXN0ZXIubWVyZ2UgPiBhY3R1YWwgJiYKKwlncmVwIC1xICJecmVmcy9oZWFkcy9tYXN0ZXIkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0gZG9lcyBub3QgY2hhbmdlIGJyYW5jaCcgJworCWdpdCBicmFuY2ggZnJvbS1tYXN0ZXIyIG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYnJhbmNoLmZyb20tbWFzdGVyMi5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCByZXYtbGlzdCBmcm9tLW1hc3RlcjIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2Zyb20tbWFzdGVyMiBmcm9tLW1hc3RlcjJeICYmCisJZ2l0IHJldi1wYXJzZSBmcm9tLW1hc3RlcjIgPmV4cGVjdDIgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIGZyb20tbWFzdGVyMiBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3Rlci5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgZnJvbS1tYXN0ZXIyID5hY3R1YWwyICYmCisJZ3JlcCAtcSAiXnJlZnMvaGVhZHMvbWFzdGVyJCIgYWN0dWFsICYmCisJY21wIGV4cGVjdDIgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbSBAey0xfScgJworCWdpdCBjaGVja291dCBmcm9tLW1hc3RlciAmJgorCWdpdCBjaGVja291dCBmcm9tLW1hc3RlcjIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3RlcjIubWVyZ2UgPiBleHBlY3QyICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSBAey0xfSBmb2xsb3dlciAmJgorCWdpdCBjb25maWcgYnJhbmNoLmZyb20tbWFzdGVyLm1lcmdlID4gYWN0dWFsICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZnJvbS1tYXN0ZXIyLm1lcmdlID4gYWN0dWFsMiAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gZnJvbS1tYXN0ZXIgZm9sbG93ZXIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3Rlci5tZXJnZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdDIgYWN0dWFsMiAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDQyLW1lcmdlLXJlbmFtZS1jb3JuZXItY2FzZXMuc2ggYi90L3Q2MDQyLW1lcmdlLXJlbmFtZS1jb3JuZXItY2FzZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDExNTUwZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwNDItbWVyZ2UtcmVuYW1lLWNvcm5lci1jYXNlcy5zaApAQCAtMCwwICsxLDU3OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249InJlY3Vyc2l2ZSBtZXJnZSBjb3JuZXIgY2FzZXMgdy8gcmVuYW1lcyBidXQgbm90IGNyaXNzLWNyb3NzZXMiCisjIHQ2MDM2IGhhcyBjb3JuZXIgY2FzZXMgdGhhdCBpbnZvbHZlIGJvdGggY3Jpc3MtY3Jvc3MgbWVyZ2VzIGFuZCByZW5hbWVzCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUvZGVsZXRlICsgdW50cmFja2VkIGZpbGUnICcKKwllY2hvICJBIHByZXR0eSBpbnNjcmlwdGlvbiIgPnJpbmcgJiYKKwlnaXQgYWRkIHJpbmcgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGJlZ2lubmluZyAmJgorCisJZ2l0IGJyYW5jaCBwZW9wbGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lLXRoZS1yaW5nICYmCisJZ2l0IG12IHJpbmcgb25lLXJpbmctdG8tcnVsZS10aGVtLWFsbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZnVsbG5hbWUgJiYKKworCWdpdCBjaGVja291dCBwZW9wbGUgJiYKKwlnaXQgcm0gcmluZyAmJgorCWVjaG8gZ29sbHVtID5vd25lciAmJgorCWdpdCBhZGQgb3duZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRyYWNrLXBlb3BsZS1pbnN0ZWFkLW9mLW9iamVjdHMgJiYKKwllY2hvICJNeXl5IFBSRUNJT1VTU1MiID5yaW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIkRvZXMgZ2l0IHByZXNlcnZlIEdvbGx1bSdzIHByZWNpb3VzIGFydGlmYWN0PyIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgcmVuYW1lLXRoZS1yaW5nICYmCisKKwkjIE1ha2Ugc3VyZSBnaXQgZGlkIG5vdCBkZWxldGUgYW4gdW50cmFja2VkIGZpbGUKKwl0ZXN0IC1mIHJpbmcKKycKKworIyBUZXN0Y2FzZSBzZXR1cCBmb3IgcmVuYW1lL21vZGlmeS9hZGQtc291cmNlOgorIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQorIyAgIENvbW1pdCBCOiBtb2RpZnkgYSBzbGlnaHRseQorIyAgIENvbW1pdCBDOiByZW5hbWUgYS0+YiwgYWRkIGNvbXBsZXRlbHkgZGlmZmVyZW50IGEKKyMKKyMgV2Ugc2hvdWxkIGJlIGFibGUgdG8gbWVyZ2UgQiAmIEMgY2xlYW5seQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUvbW9kaWZ5L2FkZC1zb3VyY2UgY29uZmxpY3QnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbiIgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKwlnaXQgdGFnIEEgJiYKKworCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwllY2hvIDggPj5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGEgYiAmJgorCWVjaG8gc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50ID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBDCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3JlbmFtZS9tb2RpZnkvYWRkLXNvdXJjZSBjb25mbGljdCByZXNvbHZhYmxlJyAnCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBDXjAgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEI6YSkgPSAkKGdpdCByZXYtcGFyc2UgYikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBDOmEpID0gJChnaXQgcmV2LXBhcnNlIGEpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlc29sdmFibGUgY29uZmxpY3QgbWlzc2VkIGlmIHJlbmFtZSBtaXNzZWQnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbiIgPmEgJiYKKwllY2hvIGZvbyA+YiAmJgorCWdpdCBhZGQgYSBiICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZ2l0IG12IGEgYyAmJgorCWVjaG8gIkNvbXBsZXRlbHkgZGlmZmVyZW50IGNvbnRlbnQiID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZWNobyA2ID4+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gQworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb25mbGljdCBjYXVzZWQgaWYgcmVuYW1lIG5vdCBkZXRlY3RlZCcgJworCWdpdCBjaGVja291dCAtcSBDXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJdGVzdCAzIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0X2xpbmVfY291bnQgPSA2IGMgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmEpID0gJChnaXQgcmV2LXBhcnNlIEI6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmIpID0gJChnaXQgcmV2LXBhcnNlIEE6YikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29uZmxpY3QgcmVzb2x2ZWQgd3JvbmcgaWYgcmVuYW1lIG1pc3NlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2xlYW4gLWYgJiYKKworCWdpdCBjaGVja291dCAtYiBEIEEgJiYKKwllY2hvIDcgPj5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IG12IGEgYyAmJgorCWVjaG8gIkNvbXBsZXRlbHkgZGlmZmVyZW50IGNvbnRlbnQiID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBEICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgRSBBICYmCisJZ2l0IHJtIGEgJiYKKwllY2hvICJDb21wbGV0ZWx5IGRpZmZlcmVudCBjb250ZW50IiA+PmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEUKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbWlzc2VkIGNvbmZsaWN0IGlmIHJlbmFtZSBub3QgZGV0ZWN0ZWQnICcKKwlnaXQgY2hlY2tvdXQgLXEgRV4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBEXjAKKycKKworIyBUZXN0cyBmb3IgdW5kZXRlY3RlZCByZW5hbWUvYWRkLXNvdXJjZSBjYXVzaW5nIGEgZmlsZSB0byBlcnJvbmVvdXNseSBiZQorIyBkZWxldGVkIChhbmQgZm9yIG1pc2hhbmRsZWQgcmVuYW1lL3JlbmFtZSgxdG8xKSBjYXVzaW5nIHRoZSBzYW1lIGlzc3VlKS4KKyMKKyMgVGhpcyB0ZXN0IHVzZXMgYSByZW5hbWUvcmVuYW1lKDF0bzEpK2FkZC1zb3VyY2UgY29uZmxpY3QgKDF0bzEgbWVhbnMgdGhlCisjIHNhbWUgZmlsZSBpcyByZW5hbWVkIG9uIGJvdGggc2lkZXMgdG8gdGhlIHNhbWUgdGhpbmc7IGl0IHNob3VsZCB0cmlnZ2VyCisjIHRoZSAxdG8yIGxvZ2ljLCB3aGljaCBpdCB3b3VsZCBkbyBpZiB0aGUgYWRkLXNvdXJjZSBkaWRuJ3QgY2F1c2UgaXNzdWVzCisjIGZvciBnaXQncyByZW5hbWUgZGV0ZWN0aW9uKToKKyMgICBDb21taXQgQTogbmV3IGZpbGU6IGEKKyMgICBDb21taXQgQjogcmVuYW1lIGEtPmIKKyMgICBDb21taXQgQzogcmVuYW1lIGEtPmIsIGFkZCB1bnJlbGF0ZWQgYQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB1bmRldGVjdGVkIHJlbmFtZS9hZGQtc291cmNlIGNhdXNlcyBkYXRhIGxvc3MnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbiIgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKwlnaXQgdGFnIEEgJiYKKworCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwlnaXQgbXYgYSBiICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGEgYiAmJgorCWVjaG8gZm9vYmFyID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBDCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RldGVjdCByZW5hbWUvYWRkLXNvdXJjZSBhbmQgcHJlc2VydmUgYWxsIGRhdGEnICcKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIENeMCAmJgorCisJdGVzdCAyIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0IC1mIGEgJiYKKwl0ZXN0IC1mIGIgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6YikgPSAkKGdpdCByZXYtcGFyc2UgQTphKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6YSkgPSAkKGdpdCByZXYtcGFyc2UgQzphKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdkZXRlY3QgcmVuYW1lL2FkZC1zb3VyY2UgYW5kIHByZXNlcnZlIGFsbCBkYXRhLCBtZXJnZSBvdGhlciB3YXknICcKKwlnaXQgY2hlY2tvdXQgQ14wICYmCisKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJdGVzdCAyIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0IC1mIGEgJiYKKwl0ZXN0IC1mIGIgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6YikgPSAkKGdpdCByZXYtcGFyc2UgQTphKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6YSkgPSAkKGdpdCByZXYtcGFyc2UgQzphKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb250ZW50IG1lcmdlICsgcmVuYW1lL2RpcmVjdG9yeSBjb25mbGljdCcgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuIiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCB0YWcgYmFzZSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHJpZ2h0ICYmCisJZWNobyA3ID4+ZmlsZSAmJgorCW1rZGlyIG5ld2ZpbGUgJiYKKwllY2hvIGp1bmsgPm5ld2ZpbGUvcmVhbGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgbmV3ZmlsZS9yZWFsZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcmlnaHQgJiYKKworCWdpdCBjaGVja291dCAtYiBsZWZ0LWNvbmZsaWN0IGJhc2UgJiYKKwllY2hvIDggPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IG12IGZpbGUgbmV3ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbGVmdCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxlZnQtY2xlYW4gYmFzZSAmJgorCWVjaG8gMCA+bmV3ZmlsZSAmJgorCWNhdCBmaWxlID4+bmV3ZmlsZSAmJgorCWdpdCBhZGQgbmV3ZmlsZSAmJgorCWdpdCBybSBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBsZWZ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZS9kaXJlY3RvcnkgY29uZmxpY3QgKyBjbGVhbiBjb250ZW50IG1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCWdpdCBjaGVja291dCBsZWZ0LWNsZWFuXjAgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgcmlnaHReMCAmJgorCisJdGVzdCAyIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDEgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwllY2hvIDAgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSAtcCBiYXNlOmZpbGUgPj5leHBlY3QgJiYKKwllY2hvIDcgPj5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbmV3ZmlsZX5IRUFEICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MjpuZXdmaWxlKSA9ICQoZ2l0IGhhc2gtb2JqZWN0IGV4cGVjdCkgJiYKKworCXRlc3QgLWYgbmV3ZmlsZS9yZWFsZmlsZSAmJgorCXRlc3QgLWYgbmV3ZmlsZX5IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZS9kaXJlY3RvcnkgY29uZmxpY3QgKyBjb250ZW50IG1lcmdlIGNvbmZsaWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCWdpdCBjaGVja291dCBsZWZ0LWNvbmZsaWN0XjAgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgcmlnaHReMCAmJgorCisJdGVzdCA0IC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDEgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwlnaXQgY2F0LWZpbGUgLXAgbGVmdC1jb25mbGljdDpuZXdmaWxlID5sZWZ0ICYmCisJZ2l0IGNhdC1maWxlIC1wIGJhc2U6ZmlsZSAgICA+YmFzZSAmJgorCWdpdCBjYXQtZmlsZSAtcCByaWdodDpmaWxlICAgPnJpZ2h0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgXAorCQktTCAiSEVBRDpuZXdmaWxlIiBcCisJCS1MICIiIFwKKwkJLUwgInJpZ2h0XjA6ZmlsZSIgXAorCQlsZWZ0IGJhc2UgcmlnaHQgJiYKKwl0ZXN0X2NtcCBsZWZ0IG5ld2ZpbGV+SEVBRCAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjE6bmV3ZmlsZSkgPSAkKGdpdCByZXYtcGFyc2UgYmFzZTpmaWxlKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoyOm5ld2ZpbGUpID0gJChnaXQgcmV2LXBhcnNlIGxlZnQtY29uZmxpY3Q6bmV3ZmlsZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MzpuZXdmaWxlKSA9ICQoZ2l0IHJldi1wYXJzZSByaWdodDpmaWxlKSAmJgorCisJdGVzdCAtZiBuZXdmaWxlL3JlYWxmaWxlICYmCisJdGVzdCAtZiBuZXdmaWxlfkhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29udGVudCBtZXJnZSArIHJlbmFtZS9kaXJlY3RvcnkgY29uZmxpY3Qgdy8gZGlzYXBwZWFyaW5nIGRpcicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlta2RpciBzdWIgJiYKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbiIgPnN1Yi9maWxlICYmCisJZ2l0IGFkZCBzdWIvZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCB0YWcgYmFzZSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHJpZ2h0ICYmCisJZWNobyA3ID4+c3ViL2ZpbGUgJiYKKwlnaXQgYWRkIHN1Yi9maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByaWdodCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxlZnQgYmFzZSAmJgorCWVjaG8gMCA+bmV3ZmlsZSAmJgorCWNhdCBzdWIvZmlsZSA+Pm5ld2ZpbGUgJiYKKwlnaXQgcm0gc3ViL2ZpbGUgJiYKKwltdiBuZXdmaWxlIHN1YiAmJgorCWdpdCBhZGQgc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBsZWZ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FwcGVhcmluZyBkaXIgaW4gcmVuYW1lL2RpcmVjdG9yeSBjb25mbGljdCBoYW5kbGVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCisJZ2l0IGNoZWNrb3V0IGxlZnReMCAmJgorCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSByaWdodF4wICYmCisKKwl0ZXN0IDEgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCWVjaG8gMCA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC1wIGJhc2U6c3ViL2ZpbGUgPj5leHBlY3QgJiYKKwllY2hvIDcgPj5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3ViICYmCisKKwl0ZXN0IC1mIHN1YgorJworCisjIFRlc3QgZm9yIGFsbCBraW5kcyBvZiB0aGluZ3MgdGhhdCBjYW4gZ28gd3Jvbmcgd2l0aCByZW5hbWUvcmVuYW1lICgydG8xKToKKyMgICBDb21taXQgQTogbmV3IGZpbGVzOiBhICYgYgorIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YywgbW9kaWZ5IGIKKyMgICBDb21taXQgQzogcmVuYW1lIGItPmMsIG1vZGlmeSBhCisjCisjIE1lcmdpbmcgb2YgQiAmIEMgc2hvdWxkIE5PVCBiZSBjbGVhbi4gIFF1ZXN0aW9uczoKKyMgICAqIEJvdGggYSAmIGIgc2hvdWxkIGJlIHJlbW92ZWQgYnkgdGhlIG1lcmdlOyBhcmUgdGhleT8KKyMgICAqIFRoZSB0d28gYydzIHNob3VsZCBjb250YWluIG1vZGlmaWNhdGlvbnMgdG8gYSAmIGI7IGRvIHRoZXk/CisjICAgKiBUaGUgaW5kZXggc2hvdWxkIGNvbnRhaW4gdHdvIGZpbGVzLCBib3RoIGZvciBjOyBkb2VzIGl0PworIyAgICogVGhlIHdvcmtpbmcgY29weSBzaG91bGQgaGF2ZSB0d28gZmlsZXMsIGJvdGggb2YgZm9ybSBjfjx1bmlxdWU+OyBkb2VzIGl0PworIyAgICogTm90aGluZyBlbHNlIHNob3VsZCBiZSBwcmVzZW50LiAgSXMgYW55dGhpbmc/CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZS9yZW5hbWUgKDJ0bzEpICsgbW9kaWZ5L21vZGlmeScgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuIiA+YSAmJgorCXByaW50ZiAiNVxuNFxuM1xuMlxuMVxuIiA+YiAmJgorCWdpdCBhZGQgYSBiICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZ2l0IG12IGEgYyAmJgorCWVjaG8gMCA+PmIgJiYKKwlnaXQgYWRkIGIgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwlnaXQgbXYgYiBjICYmCisJZWNobyA2ID4+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGUgcmVuYW1lL3JlbmFtZSAoMnRvMSkgY29uZmxpY3QgY29ycmVjdGx5JyAnCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBDXjAgPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKSIgb3V0ICYmCisKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAyIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXUgYyB8IHdjIC1sKSAmJgorCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgISAtZiBhICYmCisJdGVzdCAhIC1mIGIgJiYKKwl0ZXN0IC1mIGN+SEVBRCAmJgorCXRlc3QgLWYgY35DXjAgJiYKKworCXRlc3QgJChnaXQgaGFzaC1vYmplY3QgY35IRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBDOmEpICYmCisJdGVzdCAkKGdpdCBoYXNoLW9iamVjdCBjfkNeMCkgPSAkKGdpdCByZXYtcGFyc2UgQjpiKQorJworCisjIFRlc3RjYXNlIHNldHVwIGZvciBzaW1wbGUgcmVuYW1lL3JlbmFtZSAoMXRvMikgY29uZmxpY3Q6CisjICAgQ29tbWl0IEE6IG5ldyBmaWxlOiBhCisjICAgQ29tbWl0IEI6IHJlbmFtZSBhLT5iCisjICAgQ29tbWl0IEM6IHJlbmFtZSBhLT5jCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzaW1wbGUgcmVuYW1lL3JlbmFtZSAoMXRvMikgY29uZmxpY3QnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwllY2hvIHN0dWZmID5hICYmCisJZ2l0IGFkZCBhICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZ2l0IG12IGEgYiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCWdpdCBtdiBhIGMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgaGFzIGNvcnJlY3Qgd29ya2luZyB0cmVlIGNvbnRlbnRzJyAnCisJZ2l0IGNoZWNrb3V0IENeMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjE6YSkgPSAkKGdpdCByZXYtcGFyc2UgQTphKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDozOmIpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MjpjKSA9ICQoZ2l0IHJldi1wYXJzZSBBOmEpICYmCisKKwl0ZXN0ICEgLWYgYSAmJgorCXRlc3QgJChnaXQgaGFzaC1vYmplY3QgYikgPSAkKGdpdCByZXYtcGFyc2UgQTphKSAmJgorCXRlc3QgJChnaXQgaGFzaC1vYmplY3QgYykgPSAkKGdpdCByZXYtcGFyc2UgQTphKQorJworCisjIFRlc3RjYXNlIHNldHVwIGZvciByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZC1zb3VyY2UgY29uZmxpY3Q6CisjICAgQ29tbWl0IEE6IG5ldyBmaWxlOiBhCisjICAgQ29tbWl0IEI6IHJlbmFtZSBhLT5iCisjICAgQ29tbWl0IEM6IHJlbmFtZSBhLT5jLCBhZGQgY29tcGxldGVseSBkaWZmZXJlbnQgYQorIworIyBNZXJnaW5nIG9mIEIgJiBDIHNob3VsZCBOT1QgYmUgY2xlYW47IHRoZXJlJ3MgYSByZW5hbWUvcmVuYW1lIGNvbmZsaWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLXNvdXJjZSBjb25mbGljdCcgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuIiA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCWdpdCB0YWcgQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCWdpdCBtdiBhIGIgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwlnaXQgbXYgYSBjICYmCisJZWNobyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEMKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZGV0ZWN0IGNvbmZsaWN0IHdpdGggcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQtc291cmNlIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBDXjAgJiYKKworCXRlc3QgNCAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAzOmEpID0gJChnaXQgcmV2LXBhcnNlIEM6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAxOmEpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAyOmIpID0gJChnaXQgcmV2LXBhcnNlIEI6YikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAzOmMpID0gJChnaXQgcmV2LXBhcnNlIEM6YykgJiYKKworCXRlc3QgLWYgYSAmJgorCXRlc3QgLWYgYiAmJgorCXRlc3QgLWYgYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZC1zb3VyY2UgcmVzb2x2YWJsZSBjb25mbGljdCcgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCT5hICYmCisJZ2l0IGFkZCBhICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZ2l0IHRhZyBBICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZ2l0IG12IGEgYiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGEgYiAmJgorCWVjaG8gaW1wb3J0YW50LWluZm8gPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZW5hbWUvcmVuYW1lL2FkZC1zb3VyY2Ugc3RpbGwgdHJhY2tzIG5ldyBhIGZpbGUnICcKKwlnaXQgY2hlY2tvdXQgQ14wICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmEpID0gJChnaXQgcmV2LXBhcnNlIEM6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmIpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQtZGVzdCBjb25mbGljdCcgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCWVjaG8gc3R1ZmYgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwlnaXQgdGFnIEEgJiYKKworCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwlnaXQgbXYgYSBiICYmCisJZWNobyBwcmVjaW91cy1kYXRhID5jICYmCisJZ2l0IGFkZCBjICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKworCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwlnaXQgbXYgYSBjICYmCisJZWNobyBpbXBvcnRhbnQtaW5mbyA+YiAmJgorCWdpdCBhZGQgYiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZS9yZW5hbWUvYWRkLWRlc3QgbWVyZ2Ugc3RpbGwga25vd3MgYWJvdXQgY29uZmxpY3RpbmcgZmlsZSB2ZXJzaW9ucycgJworCWdpdCBjaGVja291dCBDXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJdGVzdCA1IC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXUgYiB8IHdjIC1sKSAmJgorCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXUgYyB8IHdjIC1sKSAmJgorCXRlc3QgNCAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoxOmEpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MjpiKSA9ICQoZ2l0IHJldi1wYXJzZSBDOmIpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjM6YikgPSAkKGdpdCByZXYtcGFyc2UgQjpiKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoyOmMpID0gJChnaXQgcmV2LXBhcnNlIEM6YykgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MzpjKSA9ICQoZ2l0IHJldi1wYXJzZSBCOmMpICYmCisKKwl0ZXN0ICQoZ2l0IGhhc2gtb2JqZWN0IGN+SEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgQzpjKSAmJgorCXRlc3QgJChnaXQgaGFzaC1vYmplY3QgY35CXF4wKSA9ICQoZ2l0IHJldi1wYXJzZSBCOmMpICYmCisJdGVzdCAkKGdpdCBoYXNoLW9iamVjdCBifkhFQUQpID0gJChnaXQgcmV2LXBhcnNlIEM6YikgJiYKKwl0ZXN0ICQoZ2l0IGhhc2gtb2JqZWN0IGJ+QlxeMCkgPSAkKGdpdCByZXYtcGFyc2UgQjpiKSAmJgorCisJdGVzdCAhIC1mIGIgJiYKKwl0ZXN0ICEgLWYgYworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNTAtcmVwbGFjZS5zaCBiL3QvdDYwNTAtcmVwbGFjZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Yzg3ZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjA1MC1yZXBsYWNlLnNoCkBAIC0wLDAgKzEsMjU1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IENocmlzdGlhbiBDb3VkZXIKKyMKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIHJlcGxhY2UgcmVmcyBmdW5jdGlvbmFsaXR5JworCitleGVjIDwvZGV2L251bGwKKworLiAuL3Rlc3QtbGliLnNoCisKK2FkZF9hbmRfY29tbWl0X2ZpbGUoKQoreworICAgIF9maWxlPSIkMSIKKyAgICBfbXNnPSIkMiIKKworICAgIGdpdCBhZGQgJF9maWxlIHx8IHJldHVybiAkPworICAgIHRlc3RfdGljayB8fCByZXR1cm4gJD8KKyAgICBnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRfZmlsZTogJF9tc2ciCit9CisKK0hBU0gxPQorSEFTSDI9CitIQVNIMz0KK0hBU0g0PQorSEFTSDU9CitIQVNINj0KK0hBU0g3PQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYnVnZ3kgYnJhbmNoJyAnCisgICAgIGVjaG8gImxpbmUgMSIgPj4gaGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAyIiA+PiBoZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDMiID4+IGhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgNCIgPj4gaGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiNCBsaW5lcyIgJiYKKyAgICAgSEFTSDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGVjaG8gImxpbmUgQlVHIiA+PiBoZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDYiID4+IGhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgNyIgPj4gaGVsbG8gJiYKKyAgICAgZWNobyAibGluZSA4IiA+PiBoZWxsbyAmJgorICAgICBhZGRfYW5kX2NvbW1pdF9maWxlIGhlbGxvICI0IG1vcmUgbGluZXMgd2l0aCBhIEJVRyIgJiYKKyAgICAgSEFTSDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGVjaG8gImxpbmUgOSIgPj4gaGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAxMCIgPj4gaGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiMiBtb3JlIGxpbmVzIiAmJgorICAgICBIQVNIMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZWNobyAibGluZSAxMSIgPj4gaGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiMSBtb3JlIGxpbmUiICYmCisgICAgIEhBU0g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBzZWQgLWUgInMvQlVHLzUvIiBoZWxsbyA+IGhlbGxvLm5ldyAmJgorICAgICBtdiBoZWxsby5uZXcgaGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiQlVHIGZpeGVkIiAmJgorICAgICBIQVNINT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZWNobyAibGluZSAxMiIgPj4gaGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAxMyIgPj4gaGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiMiBtb3JlIGxpbmVzIiAmJgorICAgICBIQVNINj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZWNobyAibGluZSAxNCIgPj4gaGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAxNSIgPj4gaGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAxNiIgPj4gaGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiYWdhaW4gMyBtb3JlIGxpbmVzIiAmJgorICAgICBIQVNINz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSB0aGUgYXV0aG9yJyAnCisgICAgIGdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0gyIHwgZ3JlcCAiYXV0aG9yIEEgVSBUaG9yIiAmJgorICAgICBSPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBzZWQgLWUgInMvQSBVL08vIiB8IGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLS1zdGRpbiAtdykgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkUiB8IGdyZXAgImF1dGhvciBPIFRob3IiICYmCisgICAgIGdpdCB1cGRhdGUtcmVmIHJlZnMvcmVwbGFjZS8kSEFTSDIgJFIgJiYKKyAgICAgZ2l0IHNob3cgSEVBRH41IHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJPIFRob3IiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1uby1yZXBsYWNlLW9iamVjdHMgb3B0aW9uJyAnCisgICAgIGdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0gyIHwgZ3JlcCAiYXV0aG9yIE8gVGhvciIgJiYKKyAgICAgZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBncmVwICJhdXRob3IgQSBVIFRob3IiICYmCisgICAgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIk8gVGhvciIgJiYKKyAgICAgZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIHNob3cgJEhBU0gyIHwgZ3JlcCAiQSBVIFRob3IiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgR0lUX05PX1JFUExBQ0VfT0JKRUNUUyBlbnYgdmFyaWFibGUnICcKKyAgICAgR0lUX05PX1JFUExBQ0VfT0JKRUNUUz0xIGdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0gyIHwgZ3JlcCAiYXV0aG9yIEEgVSBUaG9yIiAmJgorICAgICBHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTPTEgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiQSBVIFRob3IiCisnCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRIQVNIMgordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDw+IDAgKzAwMDAKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyByZXBsYWNlZCBjb21taXQnICcKKyAgICAgZ2l0IG1rdGFnIDx0YWcuc2lnID4uZ2l0L3JlZnMvdGFncy9teXRhZyAyPm1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBmc2NrIiB3b3JrcycgJworICAgICBnaXQgZnNjayBtYXN0ZXIgPiBmc2NrX21hc3Rlci5vdXQgJiYKKyAgICAgZ3JlcCAiZGFuZ2xpbmcgY29tbWl0ICRSIiBmc2NrX21hc3Rlci5vdXQgJiYKKyAgICAgZ3JlcCAiZGFuZ2xpbmcgdGFnICQoY2F0IC5naXQvcmVmcy90YWdzL215dGFnKSIgZnNja19tYXN0ZXIub3V0ICYmCisgICAgIHRlc3QgLXogIiQoZ2l0IGZzY2spIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2ssIGNsb25lIGFuZCBmZXRjaCB3b3JrJyAnCisgICAgIGdpdCByZXBhY2sgLWEgLWQgJiYKKyAgICAgZ2l0IGNsb25lIC0tbm8taGFyZGxpbmtzIC4gY2xvbmVfZGlyICYmCisgICAgICgKKwkgIGNkIGNsb25lX2RpciAmJgorCSAgZ2l0IHNob3cgSEVBRH41IHwgZ3JlcCAiQSBVIFRob3IiICYmCisJICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJBIFUgVGhvciIgJiYKKwkgIGdpdCBjYXQtZmlsZSBjb21taXQgJFIgJiYKKwkgIGdpdCByZXBhY2sgLWEgLWQgJiYKKwkgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBjb21taXQgJFIgJiYKKwkgIGdpdCBmZXRjaCAuLi8gInJlZnMvcmVwbGFjZS8qOnJlZnMvcmVwbGFjZS8qIiAmJgorCSAgZ2l0IHNob3cgSEVBRH41IHwgZ3JlcCAiTyBUaG9yIiAmJgorCSAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiTyBUaG9yIiAmJgorCSAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkUgorICAgICApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgcmVwbGFjZSIgbGlzdGluZyBhbmQgZGVsZXRpbmcnICcKKyAgICAgdGVzdCAiJEhBU0gyIiA9ICIkKGdpdCByZXBsYWNlIC1sKSIgJiYKKyAgICAgdGVzdCAiJEhBU0gyIiA9ICIkKGdpdCByZXBsYWNlKSIgJiYKKyAgICAgYWE9JHtIQVNIMiU/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P30gJiYKKyAgICAgdGVzdCAiJEhBU0gyIiA9ICIkKGdpdCByZXBsYWNlIC1sICIkYWEqIikiICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC1kICRSICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC1kICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC1sIC1kICRIQVNIMiAmJgorICAgICBnaXQgcmVwbGFjZSAtZCAkSEFTSDIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiQSBVIFRob3IiICYmCisgICAgIHRlc3QgLXogIiQoZ2l0IHJlcGxhY2UgLWwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHJlcGxhY2UiIHJlcGxhY2luZycgJworICAgICBnaXQgcmVwbGFjZSAkSEFTSDIgJFIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAkSEFTSDIgJFIgJiYKKyAgICAgZ2l0IHJlcGxhY2UgLWYgJEhBU0gyICRSICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC1mICYmCisgICAgIHRlc3QgIiRIQVNIMiIgPSAiJChnaXQgcmVwbGFjZSkiCisnCisKKyMgVGhpcyBjcmVhdGVzIGEgc2lkZSBicmFuY2ggd2hlcmUgdGhlIGJ1ZyBpbiBIMgorIyBkb2VzIG5vdCBhcHBlYXIgYmVjYXVzZSBQMiBpcyBjcmVhdGVkIGJ5IGFwcGx5aW5nCisjIEgyIGFuZCBzcXVhc2hpbmcgSDUgaW50byBpdC4KKyMgUDMsIFA0IGFuZCBQNiBhcmUgY3JlYXRlZCBieSBjaGVycnktcGlja2luZyBIMywgSDQKKyMgYW5kIEg2IHJlc3BlY3RpdmVseS4KKyMKKyMgQXQgdGhpcyBwb2ludCwgd2Ugc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgUDItLVAzLS1QNC0tUDYKKyMgICAvCisjIEgxLUgyLUgzLUg0LUg1LUg2LUg3CisjCisjIFRoZW4gd2UgcmVwbGFjZSBINiB3aXRoIFA2LgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBhcmFsbGVsIGJyYW5jaCB3aXRob3V0IHRoZSBidWcnICcKKyAgICAgZ2l0IHJlcGxhY2UgLWQgJEhBU0gyICYmCisgICAgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIkEgVSBUaG9yIiAmJgorICAgICBnaXQgY2hlY2tvdXQgJEhBU0gxICYmCisgICAgIGdpdCBjaGVycnktcGljayAkSEFTSDIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0g1IHwgZ2l0IGFwcGx5ICYmCisgICAgIGdpdCBjb21taXQgLS1hbWVuZCAtbSAiaGVsbG86IDQgbW9yZSBsaW5lcyBXSVRIT1VUIHRoZSBidWciIGhlbGxvICYmCisgICAgIFBBUkEyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBnaXQgY2hlcnJ5LXBpY2sgJEhBU0gzICYmCisgICAgIFBBUkEzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBnaXQgY2hlcnJ5LXBpY2sgJEhBU0g0ICYmCisgICAgIFBBUkE0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBnaXQgY2hlcnJ5LXBpY2sgJEhBU0g2ICYmCisgICAgIFBBUkE2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBnaXQgcmVwbGFjZSAkSEFTSDYgJFBBUkE2ICYmCisgICAgIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKyAgICAgY3VyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICB0ZXN0ICIkY3VyIiA9ICIkSEFTSDciICYmCisgICAgIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgJFBBUkEyICYmCisgICAgIGdpdCByZW1vdGUgYWRkIGNsb25lZCAuL2Nsb25lX2RpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIGNsb25lZCByZXBvJyAnCisgICAgIGdpdCBwdXNoIGNsb25lZCAkSEFTSDZeOnJlZnMvaGVhZHMvcGFyYWxsZWwgJiYKKyAgICAgKAorCSAgY2QgY2xvbmVfZGlyICYmCisJICBnaXQgY2hlY2tvdXQgcGFyYWxsZWwgJiYKKwkgIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgJFBBUkEyCisgICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBicmFuY2ggd2l0aCByZXBsYWNlbWVudCcgJworICAgICBnaXQgY2F0LWZpbGUgY29tbWl0ICRQQVJBMyB8IGdyZXAgImF1dGhvciBBIFUgVGhvciIgJiYKKyAgICAgUz0kKGdpdCBjYXQtZmlsZSBjb21taXQgJFBBUkEzIHwgc2VkIC1lICJzL0EgVS9PLyIgfCBnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC0tc3RkaW4gLXcpICYmCisgICAgIGdpdCBjYXQtZmlsZSBjb21taXQgJFMgfCBncmVwICJhdXRob3IgTyBUaG9yIiAmJgorICAgICBnaXQgcmVwbGFjZSAkUEFSQTMgJFMgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0g2fjIgfCBncmVwICJPIFRob3IiICYmCisgICAgIGdpdCBzaG93ICRQQVJBMyB8IGdyZXAgIk8gVGhvciIgJiYKKyAgICAgZ2l0IHB1c2ggY2xvbmVkICRIQVNINl46cmVmcy9oZWFkcy9wYXJhbGxlbDIgJiYKKyAgICAgKAorCSAgY2QgY2xvbmVfZGlyICYmCisJICBnaXQgY2hlY2tvdXQgcGFyYWxsZWwyICYmCisJICBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICRQQVJBMyAmJgorCSAgZ2l0IHNob3cgJFBBUkEzIHwgZ3JlcCAiQSBVIFRob3IiCisgICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggYnJhbmNoIHdpdGggcmVwbGFjZW1lbnQnICcKKyAgICAgZ2l0IGJyYW5jaCB0b2ZldGNoICRIQVNINiAmJgorICAgICAoCisJICBjZCBjbG9uZV9kaXIgJiYKKwkgIGdpdCBmZXRjaCBvcmlnaW4gcmVmcy9oZWFkcy90b2ZldGNoOnJlZnMvaGVhZHMvcGFyYWxsZWwzICYmCisJICBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcGFyYWxsZWwzID4gb3V0cHV0LnR4dCAmJgorCSAgISBncmVwICRQQVJBMyBvdXRwdXQudHh0ICYmCisJICBnaXQgc2hvdyAkUEFSQTMgPiBwYXJhMy50eHQgJiYKKwkgIGdyZXAgIkEgVSBUaG9yIiBwYXJhMy50eHQgJiYKKwkgIGdpdCBmZXRjaCBvcmlnaW4gInJlZnMvcmVwbGFjZS8qOnJlZnMvcmVwbGFjZS8qIiAmJgorCSAgZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHBhcmFsbGVsMyA+IG91dHB1dC50eHQgJiYKKwkgIGdyZXAgJFBBUkEzIG91dHB1dC50eHQgJiYKKwkgIGdpdCBzaG93ICRQQVJBMyA+IHBhcmEzLnR4dCAmJgorCSAgZ3JlcCAiTyBUaG9yIiBwYXJhMy50eHQKKyAgICAgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgYW5kIHJlcGxhY2VtZW50cycgJworICAgICBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKKyAgICAgdGVzdCAiJFBBUkEzIiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisgICAgIGdpdCBiaXNlY3QgcmVzZXQgJiYKKyAgICAgR0lUX05PX1JFUExBQ0VfT0JKRUNUUz0xIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorICAgICB0ZXN0ICIkSEFTSDQiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKyAgICAgZ2l0IGJpc2VjdCByZXNldCAmJgorICAgICBnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKKyAgICAgdGVzdCAiJEhBU0g0IiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisgICAgIGdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayBhbmQgcmVwbGFjZW1lbnRzJyAnCisJZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIHJldi1saXN0IC0tb2JqZWN0cyBIRUFEIHwKKwlnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgcGFjay1vYmplY3RzIHRlc3QtICYmCisJZ2l0IGluZGV4LXBhY2sgdGVzdC0qLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IGp1c3QgY29tbWl0cycgJworCWVjaG8gcmVwbGFjZWQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlSRVBMQUNFRD0kKGdpdCByZXYtcGFyc2UgOmZpbGUpICYmCisJbXYgZmlsZSBmaWxlLnJlcGxhY2VkICYmCisKKwllY2hvIG9yaWdpbmFsID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJT1JJR0lOQUw9JChnaXQgcmV2LXBhcnNlIDpmaWxlKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVwbGFjZS8kT1JJR0lOQUwgJFJFUExBQ0VEICYmCisJbXYgZmlsZSBmaWxlLm9yaWdpbmFsICYmCisKKwlnaXQgY2hlY2tvdXQgZmlsZSAmJgorCXRlc3RfY21wIGZpbGUucmVwbGFjZWQgZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNjAtbWVyZ2UtaW5kZXguc2ggYi90L3Q2MDYwLW1lcmdlLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlYmFkYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDYwLW1lcmdlLWluZGV4LnNoCkBAIC0wLDAgKzEsMTAwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgZ2l0IG1lcmdlLWluZGV4IC8gZ2l0LW1lcmdlLW9uZS1maWxlIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpdmVyZ2luZyBicmFuY2hlcycgJworCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwOyBkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCB0YWcgYmFzZSAmJgorCXNlZCBzLzIvdHdvLyA8ZmlsZSA+dG1wICYmCisJbXYgdG1wIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCB0YWcgdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIEhFQUReICYmCisJc2VkIHMvMTAvdGVuLyA8ZmlsZSA+dG1wICYmCisJbXYgdG1wIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRlbiAmJgorCWdpdCB0YWcgdGVuCisnCisKK2NhdCA+ZXhwZWN0LW1lcmdlZCA8PCdFT0YnCisxCit0d28KKzMKKzQKKzUKKzYKKzcKKzgKKzkKK3RlbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSBkb2VzIG5vdCByZXNvbHZlIGNvbnRlbnQgbWVyZ2UnICcKKwlnaXQgcmVhZC10cmVlIC1pIC1tIGJhc2UgdGVuIHR3byAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1VID51bm1lcmdlZCAmJgorCXRlc3RfY21wIGV4cGVjdCB1bm1lcmdlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIHJlc29sdmVzJyAnCisJZ2l0IG1lcmdlLWluZGV4IGdpdC1tZXJnZS1vbmUtZmlsZSAtYSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9VSA+dW5tZXJnZWQgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVubWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0LW1lcmdlZCBmaWxlICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOmZpbGUgPmZpbGUtaW5kZXggJiYKKwl0ZXN0X2NtcCBleHBlY3QtbWVyZ2VkIGZpbGUtaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFyZSBtZXJnZScgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdCAmJgorCShjZCBiYXJlLmdpdCAmJgorCSBHSVRfSU5ERVhfRklMRT0kUFdEL21lcmdlLmluZGV4ICYmCisJIGV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCSBnaXQgcmVhZC10cmVlIC1pIC1tIGJhc2UgdGVuIHR3bworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Utb25lLWZpbGUgZmFpbHMgd2l0aG91dCBhIHdvcmsgdHJlZScgJworCShjZCBiYXJlLmdpdCAmJgorCSBHSVRfSU5ERVhfRklMRT0kUFdEL21lcmdlLmluZGV4ICYmCisJIGV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIC1hCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1vbmUtZmlsZSByZXNwZWN0cyBHSVRfV09SS19UUkVFJyAnCisJKGNkIGJhcmUuZ2l0ICYmCisJIG1rZGlyIHdvcmsgJiYKKwkgR0lUX1dPUktfVFJFRT0kUFdEL3dvcmsgJiYKKwkgZXhwb3J0IEdJVF9XT1JLX1RSRUUgJiYKKwkgR0lUX0lOREVYX0ZJTEU9JFBXRC9tZXJnZS5pbmRleCAmJgorCSBleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkgZ2l0IG1lcmdlLWluZGV4IGdpdC1tZXJnZS1vbmUtZmlsZSAtYSAmJgorCSBnaXQgY2F0LWZpbGUgYmxvYiA6ZmlsZSA+d29yay9maWxlLWluZGV4CisJKSAmJgorCXRlc3RfY21wIGV4cGVjdC1tZXJnZWQgYmFyZS5naXQvd29yay9maWxlICYmCisJdGVzdF9jbXAgZXhwZWN0LW1lcmdlZCBiYXJlLmdpdC93b3JrL2ZpbGUtaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Utb25lLWZpbGUgcmVzcGVjdHMgY29yZS53b3JrdHJlZScgJworCW1rZGlyIHN1YmRpciAmJgorCWdpdCBjbG9uZSAuIHN1YmRpci9jaGlsZCAmJgorCShjZCBzdWJkaXIgJiYKKwkgR0lUX0RJUj0kUFdEL2NoaWxkLy5naXQgJiYKKwkgZXhwb3J0IEdJVF9ESVIgJiYKKwkgZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlICIkUFdEL2NoaWxkIiAmJgorCSBnaXQgcmVhZC10cmVlIC1pIC1tIGJhc2UgdGVuIHR3byAmJgorCSBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIC1hICYmCisJIGdpdCBjYXQtZmlsZSBibG9iIDpmaWxlID5maWxlLWluZGV4CisJKSAmJgorCXRlc3RfY21wIGV4cGVjdC1tZXJnZWQgc3ViZGlyL2NoaWxkL2ZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbWVyZ2VkIHN1YmRpci9maWxlLWluZGV4CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjEwMS1yZXYtcGFyc2UtcGFyZW50cy5zaCBiL3QvdDYxMDEtcmV2LXBhcnNlLXBhcmVudHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTY3M2MyNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMDEtcmV2LXBhcnNlLXBhcmVudHMuc2gKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKb2hhbm5lcyBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHJldi1wYXJzZSB3aXRoIGRpZmZlcmVudCBwYXJlbnQgb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10NjAwMC5zaCAjIHQ2eHh4IHNwZWNpZmljIGZ1bmN0aW9ucworCitkYXRlID5wYXRoMAorZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMAorc2F2ZV90YWcgdHJlZSBnaXQgd3JpdGUtdHJlZQoraGlkZV9lcnJvciBzYXZlX3RhZyBzdGFydCB1bmlxdWVfY29tbWl0ICJzdGFydCIgdHJlZQorc2F2ZV90YWcgc2Vjb25kIHVuaXF1ZV9jb21taXQgInNlY29uZCIgdHJlZSAtcCBzdGFydAoraGlkZV9lcnJvciBzYXZlX3RhZyBzdGFydDIgdW5pcXVlX2NvbW1pdCAic3RhcnQyIiB0cmVlCitzYXZlX3RhZyB0d29fcGFyZW50cyB1bmlxdWVfY29tbWl0ICJuZXh0IiB0cmVlIC1wIHNlY29uZCAtcCBzdGFydDIKK3NhdmVfdGFnIGZpbmFsIHVuaXF1ZV9jb21taXQgImZpbmFsIiB0cmVlIC1wIHR3b19wYXJlbnRzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IGlzIHZhbGlkJyAnZ2l0IHJldi1wYXJzZSBzdGFydCB8IGdyZXAgIl5bMC05YS1mXVx7NDBcfSQiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnReMCcgInRlc3QgJChjYXQgLmdpdC9yZWZzL3RhZ3Mvc3RhcnQpID0gJChnaXQgcmV2LXBhcnNlIHN0YXJ0XjApIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnReMSBub3QgdmFsaWQnICJpZiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHN0YXJ0XjE7IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmkiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWNvbmReMSA9IHNlY29uZF4nICJ0ZXN0ICQoZ2l0IHJldi1wYXJzZSBzZWNvbmReMSkgPSAkKGdpdCByZXYtcGFyc2Ugc2Vjb25kXikiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5hbF4xXjFeMScgInRlc3QgJChnaXQgcmV2LXBhcnNlIHN0YXJ0KSA9ICQoZ2l0IHJldi1wYXJzZSBmaW5hbF4xXjFeMSkiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5hbF4xXjFeMSA9IGZpbmFsXl5eJyAidGVzdCAkKGdpdCByZXYtcGFyc2UgZmluYWxeMV4xXjEpID0gJChnaXQgcmV2LXBhcnNlIGZpbmFsXl5eKSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeMicgInRlc3QgJChnaXQgcmV2LXBhcnNlIHN0YXJ0MikgPSAkKGdpdCByZXYtcGFyc2UgZmluYWxeMV4yKSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeMiAhPSBmaW5hbF4xXjEnICJ0ZXN0ICQoZ2l0IHJldi1wYXJzZSBmaW5hbF4xXjIpICE9ICQoZ2l0IHJldi1wYXJzZSBmaW5hbF4xXjEpIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWxeMV4zIG5vdCB2YWxpZCcgImlmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZmluYWxeMV4zOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS12ZXJpZnkgc3RhcnQyXjEnICd0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHN0YXJ0Ml4xJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS12ZXJpZnkgc3RhcnQyXjAnICdnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHN0YXJ0Ml4wJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWxeMV5AID0gZmluYWxeMV4xIGZpbmFsXjFeMicgInRlc3QgXCIkKGdpdCByZXYtcGFyc2UgZmluYWxeMV5AKVwiID0gXCIkKGdpdCByZXYtcGFyc2UgZmluYWxeMV4xIGZpbmFsXjFeMilcIiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeISA9IGZpbmFsXjEgXmZpbmFsXjFeMSBeZmluYWxeMV4yJyAidGVzdCBcIiQoZ2l0IHJldi1wYXJzZSBmaW5hbF4xXlwhKVwiID0gXCIkKGdpdCByZXYtcGFyc2UgZmluYWxeMSBeZmluYWxeMV4xIF5maW5hbF4xXjIpXCIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayBmb3IgbmV4dCB0ZXN0JyAnZ2l0IHJlcGFjayAtYSAtZCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IFNIQS0xIHdvcmtzJyAnCisJc3RhcnQ9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc3RhcnRgICYmCisJZWNobyAkc3RhcnQgJiYKKwlhYmJydj1gZWNobyAkc3RhcnQgfCBzZWQgcy8uXCQvL2AgJiYKKwllY2hvICRhYmJydiAmJgorCWFiYnJ2PWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRhYmJydmAgJiYKKwllY2hvICRhYmJydiAmJgorCXRlc3QgJHN0YXJ0ID0gJGFiYnJ2JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMTAtcmV2LWxpc3Qtc3BhcnNlLnNoIGIvdC90NjExMC1yZXYtbGlzdC1zcGFyc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjU2YWM3ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMTAtcmV2LWxpc3Qtc3BhcnNlLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdvcGVyYXRpb25zIHRoYXQgY3VsbCBoaXN0b3JpZXMgaW4gdW51c3VhbCB3YXlzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJdGVzdF9jb21taXQgQyAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisJdGVzdF9jb21taXQgRCAmJgorCXRlc3RfY29tbWl0IEUgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZmlyc3QtcGFyZW50IC0tYm91bmRhcnknICcKKwlnaXQgcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1ib3VuZGFyeSBIRUFEXi4uCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjEyMC1kZXNjcmliZS5zaCBiL3QvdDYxMjAtZGVzY3JpYmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjY3YWE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMjAtZGVzY3JpYmUuc2gKQEAgLTAsMCArMSwxNzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRlc2NyaWJlCisKKyAgICAgICAgICAgICAgICAgICAgICAgQgorICAgICAgICAuLS0tLS0tLS0tLS0tLS1vLS0tLW8tLS0tby0tLS14CisgICAgICAgLyAgICAgICAgICAgICAgICAgICAvICAgIC8KKyBvLS0tLW8tLS0tby0tLS1vLS0tLW8tLS0tLiAgICAvCisgICAgICAgXCAgICAgICAgQSAgICBjICAgICAgICAvCisgICAgICAgIC4tLS0tLS0tLS0tLS1vLS0tby0tLW8KKyAgICAgICAgICAgICAgICAgICBELFIgICBlCisnCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfZGVzY3JpYmUgKCkgeworCWV4cGVjdD0iJDEiCisJc2hpZnQKKwlSPSQoZ2l0IGRlc2NyaWJlICIkQCIgMj5lcnIuYWN0dWFsKQorCVM9JD8KKwljYXQgZXJyLmFjdHVhbCA+JjMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXNjcmliZSAkKiIgJworCXRlc3QgJFMgPSAwICYmCisJY2FzZSAiJFIiIGluCisJJGV4cGVjdCkJZWNobyBoYXBweSA7OworCSopCWVjaG8gIk9vcHMgLSAkUiBpcyBub3QgJGV4cGVjdCI7CisJCWZhbHNlIDs7CisJZXNhYworCScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIG9uZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJb25lPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJZ2l0IGRlc2NyaWJlIC0tYWx3YXlzIEhFQUQgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gdHdvID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCXR3bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gdGhyZWUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gdGhpcmQgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gQSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBBICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSBBIEEgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gYyA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBjICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyBjICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICR0d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEIgPnNpZGUgJiYgZ2l0IGFkZCBzaWRlICYmIGdpdCBjb21taXQgLW0gQiAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gQiBCICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gTWVyZ2VkIGMgJiYKKwltZXJnZWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICR0d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEQgPmFub3RoZXIgJiYgZ2l0IGFkZCBhbm90aGVyICYmIGdpdCBjb21taXQgLW0gRCAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gRCBEICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSBSIFIgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gREQgPmFub3RoZXIgJiYgZ2l0IGNvbW1pdCAtYSAtbSBhbm90aGVyICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIGUgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gREREID5hbm90aGVyICYmIGdpdCBjb21taXQgLWEgLW0gInlldCBhbm90aGVyIiAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tIE1lcmdlZCAkbWVyZ2VkICYmCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIFggPmZpbGUgJiYgZWNobyBYID5zaWRlICYmIGdpdCBhZGQgZmlsZSBzaWRlICYmCisJZ2l0IGNvbW1pdCAtbSB4CisKKycKKworY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUQKK2NoZWNrX2Rlc2NyaWJlIEEtKiBIRUFEXgorY2hlY2tfZGVzY3JpYmUgUi0qIEhFQUReXgorY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUReXjIKK2NoZWNrX2Rlc2NyaWJlIEIgSEVBRF5eMl4KK2NoZWNrX2Rlc2NyaWJlIFItKiBIRUFEXl5eCisKK2NoZWNrX2Rlc2NyaWJlIGMtKiAtLXRhZ3MgSEVBRAorY2hlY2tfZGVzY3JpYmUgYy0qIC0tdGFncyBIRUFEXgorY2hlY2tfZGVzY3JpYmUgZS0qIC0tdGFncyBIRUFEXl4KK2NoZWNrX2Rlc2NyaWJlIGMtKiAtLXRhZ3MgSEVBRF5eMgorY2hlY2tfZGVzY3JpYmUgQiAtLXRhZ3MgSEVBRF5eMl4KK2NoZWNrX2Rlc2NyaWJlIGUgLS10YWdzIEhFQUReXl4KKworY2hlY2tfZGVzY3JpYmUgaGVhZHMvbWFzdGVyIC0tYWxsIEhFQUQKK2NoZWNrX2Rlc2NyaWJlIHRhZ3MvYy0qIC0tYWxsIEhFQUReCitjaGVja19kZXNjcmliZSB0YWdzL2UgLS1hbGwgSEVBRF5eXgorCitjaGVja19kZXNjcmliZSBCLTAtKiAtLWxvbmcgSEVBRF5eMl4KK2NoZWNrX2Rlc2NyaWJlIEEtMy0qIC0tbG9uZyBIRUFEXl4yCisKKzogPmVyci5leHBlY3QKK2NoZWNrX2Rlc2NyaWJlIEEgLS1hbGwgQV4wCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB3YXJuaW5nIHdhcyBkaXNwbGF5ZWQgZm9yIEEnICcKKwl0ZXN0X2NtcCBlcnIuZXhwZWN0IGVyci5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHRhZyBBIHRvIFEgbG9jYWxseScgJworCW12IC5naXQvcmVmcy90YWdzL0EgLmdpdC9yZWZzL3RhZ3MvUQorJworY2F0IC0gPmVyci5leHBlY3QgPDxFT0YKK3dhcm5pbmc6IHRhZyAnQScgaXMgcmVhbGx5ICdRJyBoZXJlCitFT0YKK2NoZWNrX2Rlc2NyaWJlIEEtKiBIRUFECit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3YXJuaW5nIHdhcyBkaXNwbGF5ZWQgZm9yIFEnICcKKwl0ZXN0X2kxOG5jbXAgZXJyLmV4cGVjdCBlcnIuYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgdGFnIFEgYmFjayB0byBBJyAnCisJbXYgLmdpdC9yZWZzL3RhZ3MvUSAuZ2l0L3JlZnMvdGFncy9BCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgdGFnIHJlZnMnICdnaXQgcGFjay1yZWZzJworY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUQKKworY2hlY2tfZGVzY3JpYmUgIkEtKlswLTlhLWZdIiAtLWRpcnR5CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC11cCBkaXJ0eSB3b3JrIHRyZWUnICcKKwllY2hvID4+ZmlsZQorJworCitjaGVja19kZXNjcmliZSAiQS0qWzAtOWEtZl0tZGlydHkiIC0tZGlydHkKKworY2hlY2tfZGVzY3JpYmUgIkEtKlswLTlhLWZdLm1vZCIgLS1kaXJ0eT0ubW9kCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIC0tZGlydHkgSEVBRCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkZXNjcmliZSAtLWRpcnR5IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LXVwIG1hdGNoaW5nIHBhdHRlcm4gdGVzdHMnICcKKwlnaXQgdGFnIC1hIC1tIHRlc3QtYW5ub3RhdGVkIHRlc3QtYW5ub3RhdGVkICYmCisJZWNobyA+PmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJvbmUgbW9yZSIgJiYKKwlnaXQgdGFnIHRlc3QxLWxpZ2h0d2VpZ2h0ICYmCisJZWNobyA+PmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ5ZXQgYW5vdGhlciIgJiYKKwlnaXQgdGFnIHRlc3QyLWxpZ2h0d2VpZ2h0ICYmCisJZWNobyA+PmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJldmVuIG1vcmUiCisKKycKKworY2hlY2tfZGVzY3JpYmUgInRlc3QtYW5ub3RhdGVkLSoiIC0tbWF0Y2g9InRlc3QtKiIKKworY2hlY2tfZGVzY3JpYmUgInRlc3QxLWxpZ2h0d2VpZ2h0LSoiIC0tdGFncyAtLW1hdGNoPSJ0ZXN0MS0qIgorCitjaGVja19kZXNjcmliZSAidGVzdDItbGlnaHR3ZWlnaHQtKiIgLS10YWdzIC0tbWF0Y2g9InRlc3QyLSoiCisKK2NoZWNrX2Rlc2NyaWJlICJ0ZXN0Mi1saWdodHdlaWdodC0qIiAtLWxvbmcgLS10YWdzIC0tbWF0Y2g9InRlc3QyLSoiIEhFQUReCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjIwMC1mbXQtbWVyZ2UtbXNnLnNoIGIvdC90NjIwMC1mbXQtbWVyZ2UtbXNnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5MmMyYTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2gKQEAgLTAsMCArMSw0NzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYsIEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZtdC1tZXJnZS1tc2cgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gb25lID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwiICYmCisKKwlnaXQgY2xvbmUgLiByZW1vdGUgJiYKKworCWVjaG8gdW5vID5vbmUgJiYKKwllY2hvIGRvcyA+dHdvICYmCisJZ2l0IGFkZCB0d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJTZWNvbmQiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbGVmdCAmJgorCisJZWNobyAiYzEiID5vbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJDb21tb24gIzEiICYmCisKKwllY2hvICJjMiIgPm9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkNvbW1vbiAjMiIgJiYKKworCWdpdCBicmFuY2ggcmlnaHQgJiYKKworCWVjaG8gImwzIiA+dHdvICYmCisJdGVzdF90aWNrICYmCisJR0lUX0NPTU1JVFRFUl9OQU1FPSJBbm90aGVyIENvbW1pdHRlciIgXAorCUdJVF9BVVRIT1JfTkFNRT0iQW5vdGhlciBBdXRob3IiIGdpdCBjb21taXQgLWEgLW0gIkxlZnQgIzMiICYmCisKKwllY2hvICJsNCIgPnR3byAmJgorCXRlc3RfdGljayAmJgorCUdJVF9DT01NSVRURVJfTkFNRT0iQW5vdGhlciBDb21taXR0ZXIiIFwKKwlHSVRfQVVUSE9SX05BTUU9IkFub3RoZXIgQXV0aG9yIiBnaXQgY29tbWl0IC1hIC1tICJMZWZ0ICM0IiAmJgorCisJZWNobyAibDUiID50d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQ09NTUlUVEVSX05BTUU9IkFub3RoZXIgQ29tbWl0dGVyIiBcCisJR0lUX0FVVEhPUl9OQU1FPSJBbm90aGVyIEF1dGhvciIgZ2l0IGNvbW1pdCAtYSAtbSAiTGVmdCAjNSIgJiYKKwlnaXQgdGFnIHRhZy1sNSAmJgorCisJZ2l0IGNoZWNrb3V0IHJpZ2h0ICYmCisKKwllY2hvICJyMyIgPnRocmVlICYmCisJZ2l0IGFkZCB0aHJlZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIlJpZ2h0ICMzIiAmJgorCWdpdCB0YWcgdGFnLXIzICYmCisKKwllY2hvICJyNCIgPnRocmVlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiUmlnaHQgIzQiICYmCisKKwllY2hvICJyNSIgPnRocmVlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiUmlnaHQgIzUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbG9uZyAmJgorCWk9MCAmJgorCXdoaWxlIHRlc3QgJGkgLWx0IDMwCisJZG8KKwkJdGVzdF9jb21taXQgJGkgb25lICYmCisJCWk9JCgoJGkrMSkpCisJZG9uZSAmJgorCisJZ2l0IHNob3ctYnJhbmNoICYmCisKKwlhcG9zPSInXCcnIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXNzYWdlIGZvciBtZXJnaW5nIGxvY2FsIGJyYW5jaCcgJworCWVjaG8gIk1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30iID5leHBlY3RlZCAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBmZXRjaCAuIGxlZnQgJiYKKworCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXNzYWdlIGZvciBtZXJnaW5nIGV4dGVybmFsIGJyYW5jaCcgJworCWVjaG8gIk1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30gb2YgJChwd2QpIiA+ZXhwZWN0ZWQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgZmV0Y2ggIiQocHdkKSIgbGVmdCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ttZXJnZV0gc3VtbWFyeS9sb2cgY29uZmlndXJhdGlvbicgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfQorCisJIyBCeSBBbm90aGVyIEF1dGhvciAoMykgYW5kIEEgVSBUaG9yICgyKQorCSMgVmlhIEFub3RoZXIgQ29tbWl0dGVyCisJKiBsZWZ0OgorCSAgTGVmdCAjNQorCSAgTGVmdCAjNAorCSAgTGVmdCAjMworCSAgQ29tbW9uICMyCisJICBDb21tb24gIzEKKwlFT0YKKworCWdpdCBjb25maWcgbWVyZ2UubG9nIHRydWUgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5zdW1tYXJ5ICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsMSAmJgorCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2UubG9nICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5zdW1tYXJ5IHRydWUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwyICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogY2xlYXIgW21lcmdlXSBjb25maWd1cmF0aW9uJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2UubG9nICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2Uuc3VtbWFyeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBGRVRDSF9IRUFEJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIGxlZnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UubG9nPTMgbGltaXRzIHNob3J0bG9nIGxlbmd0aCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfQorCisJIyBCeSBBbm90aGVyIEF1dGhvciAoMykgYW5kIEEgVSBUaG9yICgyKQorCSMgVmlhIEFub3RoZXIgQ29tbWl0dGVyCisJKiBsZWZ0OiAoNSBjb21taXRzKQorCSAgTGVmdCAjNQorCSAgTGVmdCAjNAorCSAgTGVmdCAjMworCSAgLi4uCisJRU9GCisKKwlnaXQgLWMgbWVyZ2UubG9nPTMgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UubG9nPTUgc2hvd3MgYWxsIDUgY29tbWl0cycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfQorCisJIyBCeSBBbm90aGVyIEF1dGhvciAoMykgYW5kIEEgVSBUaG9yICgyKQorCSMgVmlhIEFub3RoZXIgQ29tbWl0dGVyCisJKiBsZWZ0OgorCSAgTGVmdCAjNQorCSAgTGVmdCAjNAorCSAgTGVmdCAjMworCSAgQ29tbW9uICMyCisJICBDb21tb24gIzEKKwlFT0YKKworCWdpdCAtYyBtZXJnZS5sb2c9NSBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS5sb2c9MCBkaXNhYmxlcyBzaG9ydGxvZycgJworCWVjaG8gIk1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30iID5leHBlY3RlZAorCWdpdCAtYyBtZXJnZS5sb2c9MCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxvZz0zIGxpbWl0cyBzaG9ydGxvZyBsZW5ndGgnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCU1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30KKworCSMgQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwkjIFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDogKDUgY29tbWl0cykKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIC4uLgorCUVPRgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgLS1sb2c9MyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1sb2c9NSBzaG93cyBhbGwgNSBjb21taXRzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgLS1sb2c9NSA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1sb2cgZGlzYWJsZXMgc2hvcnRsb2cnICcKKwllY2hvICJNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtLW5vLWxvZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1sb2c9MCBkaXNhYmxlcyBzaG9ydGxvZycgJworCWVjaG8gIk1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30iID5leHBlY3RlZCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC0tbm8tbG9nIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmbXQtbWVyZ2UtbXNnIC1tJyAnCisJZWNobyAiU3luYyB3aXRoIGxlZnQiID5leHBlY3RlZCAmJgorCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCVN5bmMgd2l0aCBsZWZ0CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqICR7YXBvc31sZWZ0JHthcG9zfSBvZiAkKHB3ZCk6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBtZXJnZS5sb2cgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IG1lcmdlLnN1bW1hcnkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGZldGNoICIkKHB3ZCkiIGxlZnQgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtbSAiU3luYyB3aXRoIGxlZnQiIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC0tbG9nIC1tICJTeW5jIHdpdGggbGVmdCIgXAorCQkJCQk8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwubG9nICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5sb2cgdHJ1ZSAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC1tICJTeW5jIHdpdGggbGVmdCIgXAorCQkJCQk8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwubG9nLWNvbmZpZyAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC0tbm8tbG9nIC1tICJTeW5jIHdpdGggbGVmdCIgXAorCQkJCQk8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwubm9sb2cgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmxvZyBhY3R1YWwubG9nICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQubG9nIGFjdHVhbC5sb2ctY29uZmlnICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLm5vbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBleHBlY3RlZCBzaG9ydGxvZyBmb3IgdHdvIGJyYW5jaGVzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YKKwlNZXJnZSBicmFuY2hlcyAke2Fwb3N9bGVmdCR7YXBvc30gYW5kICR7YXBvc31yaWdodCR7YXBvc30KKworCSMgQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwkjIFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDoKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisKKwkqIHJpZ2h0OgorCSAgUmlnaHQgIzUKKwkgIFJpZ2h0ICM0CisJICBSaWdodCAjMworCSAgQ29tbW9uICMyCisJICBDb21tb24gIzEKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgZm9yIHR3byBicmFuY2hlcycgJworCWdpdCBjb25maWcgbWVyZ2UubG9nIHRydWUgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5zdW1tYXJ5ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwxICYmCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5sb2cgJiYKKwlnaXQgY29uZmlnIG1lcmdlLnN1bW1hcnkgdHJ1ZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsMiAmJgorCisJZ2l0IGNvbmZpZyBtZXJnZS5sb2cgeWVzICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2Uuc3VtbWFyeSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsMyAmJgorCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2UubG9nICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsNCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgLUYnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5sb2cgJiYKKwlnaXQgY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtRiAuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgLUYgaW4gc3ViZGlyZWN0b3J5JyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2UubG9nICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJbWtkaXIgc3ViICYmCisJY3AgLmdpdC9GRVRDSF9IRUFEIHN1Yi9GRVRDSF9IRUFEICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGZtdC1tZXJnZS1tc2cgLUYgRkVUQ0hfSEVBRCA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgd2l0aCBub3RoaW5nIHRvIG1lcmdlJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2UubG9nICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCisJPmVtcHR5ICYmCisKKwkoCisJCWNkIHJlbW90ZSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdW5yZWxhdGVkICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luICYmCisJCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPi4uL2FjdHVhbAorCSkgJiYKKworCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgdGFnJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSB0YWcgJHthcG9zfXRhZy1yMyR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5sb2cgJiYKKwlnaXQgY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gdGFnIHRhZy1yMyAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0d28gdGFncycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJTWVyZ2UgdGFncyAke2Fwb3N9dGFnLXIzJHthcG9zfSBhbmQgJHthcG9zfXRhZy1sNSR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIHRhZyAke2Fwb3N9dGFnLWw1JHthcG9zfToKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5sb2cgJiYKKwlnaXQgY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gdGFnIHRhZy1yMyB0YWcgdGFnLWw1ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRhZyBhbmQgYnJhbmNoJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9LCB0YWcgJHthcG9zfXRhZy1yMyR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2UubG9nICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIHRhZyB0YWctcjMgbGVmdCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyBsb3RzIG9mIGNvbW1pdHMnICcKKwl7CisJCWNhdCA8PC1FT0YgJiYKKwkJTWVyZ2UgYnJhbmNoICR7YXBvc31sb25nJHthcG9zfQorCisJCSogbG9uZzogKDM1IGNvbW1pdHMpCisJCUVPRgorCisJCWk9MjkgJiYKKwkJd2hpbGUgdGVzdCAkaSAtZ3QgOQorCQlkbworCQkJZWNobyAiICAkaSIgJiYKKwkJCWk9JCgoJGktMSkpCisJCWRvbmUgJiYKKwkJZWNobyAiICAuLi4iCisJfSA+ZXhwZWN0ZWQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsb25nICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MzAwLWZvci1lYWNoLXJlZi5zaCBiL3QvdDYzMDAtZm9yLWVhY2gtcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1MmY1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MzAwLWZvci1lYWNoLXJlZi5zaApAQCAtMCwwICsxLDQ2OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBBbmR5IFBhcmtpbnMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZm9yLWVhY2gtcmVmIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnLnNoCisKKyMgTW9uIEp1bCAzIDE1OjE4OjQzIDIwMDYgKzAwMDAKK2RhdGVzdGFtcD0xMTUxOTM5OTIzCitzZXRkYXRlX2FuZF9pbmNyZW1lbnQgKCkgeworICAgIEdJVF9DT01NSVRURVJfREFURT0iJGRhdGVzdGFtcCArMDIwMCIKKyAgICBkYXRlc3RhbXA9JChleHByICIkZGF0ZXN0YW1wIiArIDEpCisgICAgR0lUX0FVVEhPUl9EQVRFPSIkZGF0ZXN0YW1wICswMjAwIgorICAgIGRhdGVzdGFtcD0kKGV4cHIgIiRkYXRlc3RhbXAiICsgMSkKKyAgICBleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFIEdJVF9BVVRIT1JfREFURQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgc2FtcGxlIGNvbW1pdCB3aXRoIGtub3duIHRpbWVzdGFtcCcgJworCXNldGRhdGVfYW5kX2luY3JlbWVudCAmJgorCWVjaG8gIlVzaW5nICRkYXRlc3RhbXAiID4gb25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCXNldGRhdGVfYW5kX2luY3JlbWVudCAmJgorCWdpdCB0YWcgLWEgLW0gIlRhZ2dpbmcgYXQgJGRhdGVzdGFtcCIgdGVzdHRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgdXBzdHJlYW0gY29uZmlnJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgbWFzdGVyICYmCisJZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIG5vd2hlcmUgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIG9yaWdpbiAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL21hc3RlcgorJworCit0ZXN0X2F0b20oKSB7CisJY2FzZSAiJDEiIGluCisJCWhlYWQpIHJlZj1yZWZzL2hlYWRzL21hc3RlciA7OworCQkgdGFnKSByZWY9cmVmcy90YWdzL3Rlc3R0YWcgOzsKKwkJICAgKikgcmVmPSQxIDs7CisJZXNhYworCXByaW50ZiAnJXNcbicgIiQzIiA+ZXhwZWN0ZWQKKwl0ZXN0X2V4cGVjdF8kezQ6LXN1Y2Nlc3N9ICRQUkVSRVEgImJhc2ljIGF0b206ICQxICQyIiAiCisJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUoJDIpJyAkcmVmID5hY3R1YWwgJiYKKwkJc2FuaXRpemVfcGdwIDxhY3R1YWwgPmFjdHVhbC5jbGVhbiAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwuY2xlYW4KKwkiCit9CisKK3Rlc3RfYXRvbSBoZWFkIHJlZm5hbWUgcmVmcy9oZWFkcy9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHVwc3RyZWFtIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCit0ZXN0X2F0b20gaGVhZCBvYmplY3R0eXBlIGNvbW1pdAordGVzdF9hdG9tIGhlYWQgb2JqZWN0c2l6ZSAxNzEKK3Rlc3RfYXRvbSBoZWFkIG9iamVjdG5hbWUgNjdhMzZmMTA3MjI4NDZlODkxZmJhZGExYmE0OGVkMDM1ZGU3NTU4MQordGVzdF9hdG9tIGhlYWQgdHJlZSAwZTUxYzAwZmNiOTNkZmZjNzU1NTQ2ZjI3NTkzZDUxMWUxYmRiNDZmCit0ZXN0X2F0b20gaGVhZCBwYXJlbnQgJycKK3Rlc3RfYXRvbSBoZWFkIG51bXBhcmVudCAwCit0ZXN0X2F0b20gaGVhZCBvYmplY3QgJycKK3Rlc3RfYXRvbSBoZWFkIHR5cGUgJycKK3Rlc3RfYXRvbSBoZWFkIGF1dGhvciAnQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTE1MTkzOTkyNCArMDIwMCcKK3Rlc3RfYXRvbSBoZWFkIGF1dGhvcm5hbWUgJ0EgVSBUaG9yJwordGVzdF9hdG9tIGhlYWQgYXV0aG9yZW1haWwgJzxhdXRob3JAZXhhbXBsZS5jb20+JwordGVzdF9hdG9tIGhlYWQgYXV0aG9yZGF0ZSAnTW9uIEp1bCAzIDE3OjE4OjQ0IDIwMDYgKzAyMDAnCit0ZXN0X2F0b20gaGVhZCBjb21taXR0ZXIgJ0MgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTE1MTkzOTkyMyArMDIwMCcKK3Rlc3RfYXRvbSBoZWFkIGNvbW1pdHRlcm5hbWUgJ0MgTyBNaXR0ZXInCit0ZXN0X2F0b20gaGVhZCBjb21taXR0ZXJlbWFpbCAnPGNvbW1pdHRlckBleGFtcGxlLmNvbT4nCit0ZXN0X2F0b20gaGVhZCBjb21taXR0ZXJkYXRlICdNb24gSnVsIDMgMTc6MTg6NDMgMjAwNiArMDIwMCcKK3Rlc3RfYXRvbSBoZWFkIHRhZyAnJwordGVzdF9hdG9tIGhlYWQgdGFnZ2VyICcnCit0ZXN0X2F0b20gaGVhZCB0YWdnZXJuYW1lICcnCit0ZXN0X2F0b20gaGVhZCB0YWdnZXJlbWFpbCAnJwordGVzdF9hdG9tIGhlYWQgdGFnZ2VyZGF0ZSAnJwordGVzdF9hdG9tIGhlYWQgY3JlYXRvciAnQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTUxOTM5OTIzICswMjAwJwordGVzdF9hdG9tIGhlYWQgY3JlYXRvcmRhdGUgJ01vbiBKdWwgMyAxNzoxODo0MyAyMDA2ICswMjAwJwordGVzdF9hdG9tIGhlYWQgc3ViamVjdCAnSW5pdGlhbCcKK3Rlc3RfYXRvbSBoZWFkIGNvbnRlbnRzOnN1YmplY3QgJ0luaXRpYWwnCit0ZXN0X2F0b20gaGVhZCBib2R5ICcnCit0ZXN0X2F0b20gaGVhZCBjb250ZW50czpib2R5ICcnCit0ZXN0X2F0b20gaGVhZCBjb250ZW50czpzaWduYXR1cmUgJycKK3Rlc3RfYXRvbSBoZWFkIGNvbnRlbnRzICdJbml0aWFsCisnCisKK3Rlc3RfYXRvbSB0YWcgcmVmbmFtZSByZWZzL3RhZ3MvdGVzdHRhZwordGVzdF9hdG9tIHRhZyB1cHN0cmVhbSAnJwordGVzdF9hdG9tIHRhZyBvYmplY3R0eXBlIHRhZwordGVzdF9hdG9tIHRhZyBvYmplY3RzaXplIDE1NAordGVzdF9hdG9tIHRhZyBvYmplY3RuYW1lIDk4YjQ2YjFkMzZlNWIwNzkwOWRlMWIzODg2MjI0ZTNlODFlODczMjIKK3Rlc3RfYXRvbSB0YWcgdHJlZSAnJwordGVzdF9hdG9tIHRhZyBwYXJlbnQgJycKK3Rlc3RfYXRvbSB0YWcgbnVtcGFyZW50ICcnCit0ZXN0X2F0b20gdGFnIG9iamVjdCAnNjdhMzZmMTA3MjI4NDZlODkxZmJhZGExYmE0OGVkMDM1ZGU3NTU4MScKK3Rlc3RfYXRvbSB0YWcgdHlwZSAnY29tbWl0JwordGVzdF9hdG9tIHRhZyBhdXRob3IgJycKK3Rlc3RfYXRvbSB0YWcgYXV0aG9ybmFtZSAnJwordGVzdF9hdG9tIHRhZyBhdXRob3JlbWFpbCAnJwordGVzdF9hdG9tIHRhZyBhdXRob3JkYXRlICcnCit0ZXN0X2F0b20gdGFnIGNvbW1pdHRlciAnJwordGVzdF9hdG9tIHRhZyBjb21taXR0ZXJuYW1lICcnCit0ZXN0X2F0b20gdGFnIGNvbW1pdHRlcmVtYWlsICcnCit0ZXN0X2F0b20gdGFnIGNvbW1pdHRlcmRhdGUgJycKK3Rlc3RfYXRvbSB0YWcgdGFnICd0ZXN0dGFnJwordGVzdF9hdG9tIHRhZyB0YWdnZXIgJ0MgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTE1MTkzOTkyNSArMDIwMCcKK3Rlc3RfYXRvbSB0YWcgdGFnZ2VybmFtZSAnQyBPIE1pdHRlcicKK3Rlc3RfYXRvbSB0YWcgdGFnZ2VyZW1haWwgJzxjb21taXR0ZXJAZXhhbXBsZS5jb20+JwordGVzdF9hdG9tIHRhZyB0YWdnZXJkYXRlICdNb24gSnVsIDMgMTc6MTg6NDUgMjAwNiArMDIwMCcKK3Rlc3RfYXRvbSB0YWcgY3JlYXRvciAnQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTUxOTM5OTI1ICswMjAwJwordGVzdF9hdG9tIHRhZyBjcmVhdG9yZGF0ZSAnTW9uIEp1bCAzIDE3OjE4OjQ1IDIwMDYgKzAyMDAnCit0ZXN0X2F0b20gdGFnIHN1YmplY3QgJ1RhZ2dpbmcgYXQgMTE1MTkzOTkyNycKK3Rlc3RfYXRvbSB0YWcgY29udGVudHM6c3ViamVjdCAnVGFnZ2luZyBhdCAxMTUxOTM5OTI3JwordGVzdF9hdG9tIHRhZyBib2R5ICcnCit0ZXN0X2F0b20gdGFnIGNvbnRlbnRzOmJvZHkgJycKK3Rlc3RfYXRvbSB0YWcgY29udGVudHM6c2lnbmF0dXJlICcnCit0ZXN0X2F0b20gdGFnIGNvbnRlbnRzICdUYWdnaW5nIGF0IDExNTE5Mzk5MjcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgaW52YWxpZCBhdG9tcyBuYW1lcyBhcmUgZXJyb3JzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShJTlZBTElEKSIgcmVmcy9oZWFkcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgc3BlY2lmaWVycyBhcmUgaWdub3JlZCBpbiBuYW1pbmcgZGF0ZSBhdG9tcycgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZSkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6ZGVmYXVsdCkgJShhdXRob3JkYXRlKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZSkgJShhdXRob3JkYXRlOmRlZmF1bHQpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlOmRlZmF1bHQpICUoYXV0aG9yZGF0ZTpkZWZhdWx0KSIgcmVmcy9oZWFkcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayB2YWxpZCBmb3JtYXQgc3BlY2lmaWVycyBmb3IgZGF0ZSBmaWVsZHMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6ZGVmYXVsdCkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6cmVsYXRpdmUpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlOnNob3J0KSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpsb2NhbCkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6aXNvODYwMSkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6cmZjMjgyMikiIHJlZnMvaGVhZHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgaW52YWxpZCBmb3JtYXQgc3BlY2lmaWVycyBhcmUgZXJyb3JzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlOklOVkFMSUQpIiByZWZzL2hlYWRzCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCisncmVmcy9oZWFkcy9tYXN0ZXInICdNb24gSnVsIDMgMTc6MTg6NDMgMjAwNiArMDIwMCcgJ01vbiBKdWwgMyAxNzoxODo0NCAyMDA2ICswMjAwJworJ3JlZnMvdGFncy90ZXN0dGFnJyAnTW9uIEp1bCAzIDE3OjE4OjQ1IDIwMDYgKzAyMDAnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgdW5mb3JtYXR0ZWQgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJKGdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKGNvbW1pdHRlcmRhdGUpICUoYXV0aG9yZGF0ZSkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJSh0YWdnZXJkYXRlKSIgcmVmcy90YWdzKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAiZGVmYXVsdCIgZm9ybWF0dGVkIGRhdGUgZmllbGRzIG91dHB1dCcgJworCWY9ZGVmYXVsdCAmJgorCShnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJShjb21taXR0ZXJkYXRlOiRmKSAlKGF1dGhvcmRhdGU6JGYpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUodGFnZ2VyZGF0ZTokZikiIHJlZnMvdGFncykgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIERvbid0IGtub3cgaG93IHRvIGRvIHJlbGF0aXZlIGNoZWNrIGJlY2F1c2UgSSBjYW4ndCBrbm93IHdoZW4gdGhpcyBzY3JpcHQKKyMgaXMgZ29pbmcgdG8gYmUgcnVuIGFuZCBjYW4ndCBmYWtlIHRoZSBjdXJyZW50IHRpbWUgdG8gZ2l0LCBhbmQgaGVuY2UgY2FuJ3QKKyMgcHJvdmlkZSBleHBlY3RlZCBvdXRwdXQuICBJbnN0ZWFkLCBJJ2xsIGp1c3QgbWFrZSBzdXJlIHRoYXQgInJlbGF0aXZlIgorIyBkb2Vzbid0IGV4aXQgaW4gZXJyb3IKKyMKKyNjYXQgPmV4cGVjdGVkIDw8XEVPRgorIworI0VPRgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJyZWxhdGl2ZSIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJZj1yZWxhdGl2ZSAmJgorCShnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJShjb21taXR0ZXJkYXRlOiRmKSAlKGF1dGhvcmRhdGU6JGYpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUodGFnZ2VyZGF0ZTokZikiIHJlZnMvdGFncykgPmFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorJ3JlZnMvaGVhZHMvbWFzdGVyJyAnMjAwNi0wNy0wMycgJzIwMDYtMDctMDMnCisncmVmcy90YWdzL3Rlc3R0YWcnICcyMDA2LTA3LTAzJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAic2hvcnQiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCWY9c2hvcnQgJiYKKwkoZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUoY29tbWl0dGVyZGF0ZTokZikgJShhdXRob3JkYXRlOiRmKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKHRhZ2dlcmRhdGU6JGYpIiByZWZzL3RhZ3MpID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKydyZWZzL2hlYWRzL21hc3RlcicgJ01vbiBKdWwgMyAxNToxODo0MyAyMDA2JyAnTW9uIEp1bCAzIDE1OjE4OjQ0IDIwMDYnCisncmVmcy90YWdzL3Rlc3R0YWcnICdNb24gSnVsIDMgMTU6MTg6NDUgMjAwNicKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgImxvY2FsIiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwlmPWxvY2FsICYmCisJKGdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKGNvbW1pdHRlcmRhdGU6JGYpICUoYXV0aG9yZGF0ZTokZikiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJSh0YWdnZXJkYXRlOiRmKSIgcmVmcy90YWdzKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCisncmVmcy9oZWFkcy9tYXN0ZXInICcyMDA2LTA3LTAzIDE3OjE4OjQzICswMjAwJyAnMjAwNi0wNy0wMyAxNzoxODo0NCArMDIwMCcKKydyZWZzL3RhZ3MvdGVzdHRhZycgJzIwMDYtMDctMDMgMTc6MTg6NDUgKzAyMDAnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJpc284NjAxIiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwlmPWlzbzg2MDEgJiYKKwkoZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUoY29tbWl0dGVyZGF0ZTokZikgJShhdXRob3JkYXRlOiRmKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKHRhZ2dlcmRhdGU6JGYpIiByZWZzL3RhZ3MpID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKydyZWZzL2hlYWRzL21hc3RlcicgJ01vbiwgMyBKdWwgMjAwNiAxNzoxODo0MyArMDIwMCcgJ01vbiwgMyBKdWwgMjAwNiAxNzoxODo0NCArMDIwMCcKKydyZWZzL3RhZ3MvdGVzdHRhZycgJ01vbiwgMyBKdWwgMjAwNiAxNzoxODo0NSArMDIwMCcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgInJmYzI4MjIiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCWY9cmZjMjgyMiAmJgorCShnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJShjb21taXR0ZXJkYXRlOiRmKSAlKGF1dGhvcmRhdGU6JGYpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUodGFnZ2VyZGF0ZTokZikiIHJlZnMvdGFncykgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorcmVmcy9oZWFkcy9tYXN0ZXIKK3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCityZWZzL3RhZ3MvdGVzdHRhZworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBhc2NlbmRpbmcgc29ydCcgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIC0tc29ydD1yZWZuYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorcmVmcy90YWdzL3Rlc3R0YWcKK3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCityZWZzL2hlYWRzL21hc3RlcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBkZXNjZW5kaW5nIHNvcnQnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiAtLXNvcnQ9LXJlZm5hbWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorJ3JlZnMvaGVhZHMvbWFzdGVyJworJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJworJ3JlZnMvdGFncy90ZXN0dGFnJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1b3Rpbmcgc3R5bGU6IHNoZWxsJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1b3Rpbmcgc3R5bGU6IHBlcmwnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tcGVybCAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdW90aW5nIHN0eWxlOiBweXRob24nICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tcHl0aG9uIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCisicmVmcy9oZWFkcy9tYXN0ZXIiCisicmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiCisicmVmcy90YWdzL3Rlc3R0YWciCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVvdGluZyBzdHlsZTogdGNsJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLXRjbCAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitmb3IgaSBpbiAiLS1wZXJsIC0tc2hlbGwiICItcyAtLXB5dGhvbiIgIi0tcHl0aG9uIC0tdGNsIiAiLS10Y2wgLS1wZXJsIjsgZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJtb3JlIHRoYW4gb25lIHF1b3Rpbmcgc3R5bGU6ICRpIiAiCisJCWdpdCBmb3ItZWFjaC1yZWYgJGkgMj4mMSB8IChyZWFkIGxpbmUgJiYKKwkJY2FzZSBcJGxpbmUgaW4KKwkJXCJlcnJvcjogbW9yZSB0aGFuIG9uZSBxdW90aW5nIHN0eWxlXCIqKSA6IGhhcHB5OzsKKwkJKikgZmFsc2UKKwkJZXNhYykKKwkiCitkb25lCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCittYXN0ZXIKK3Rlc3R0YWcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBzaG9ydCByZWZuYW1lIGZvcm1hdCcgJworCShnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6c2hvcnQpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOnNob3J0KSIgcmVmcy90YWdzKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK29yaWdpbi9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBzaG9ydCB1cHN0cmVhbSBmb3JtYXQnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHVwc3RyZWFtOnNob3J0KSIgcmVmcy9oZWFkcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKzY3YTM2ZjEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBzaG9ydCBvYmplY3RuYW1lIGZvcm1hdCcgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUob2JqZWN0bmFtZTpzaG9ydCkiIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3IgaW52YWxpZCByZWZuYW1lIGZvcm1hdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZTpJTlZBTElEKSIKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK2hlYWRzL21hc3RlcgordGFncy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBhbWJpZ3VvdXMgaGVhZCBhbmQgdGFnIHJlZnMgKHN0cmljdCknICcKKwlnaXQgY29uZmlnIC0tYm9vbCBjb3JlLndhcm5hbWJpZ3VvdXNyZWZzIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3dGFnICYmCisJZWNobyAiVXNpbmcgJGRhdGVzdGFtcCIgPiBvbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWdpdCBjb21taXQgLW0gIkJyYW5jaCIgJiYKKwlzZXRkYXRlX2FuZF9pbmNyZW1lbnQgJiYKKwlnaXQgdGFnIC1tICJUYWdnaW5nIGF0ICRkYXRlc3RhbXAiIG1hc3RlciAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQgIiUocmVmbmFtZTpzaG9ydCkiIHJlZnMvaGVhZHMvbWFzdGVyIHJlZnMvdGFncy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgoraGVhZHMvbWFzdGVyCittYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBhbWJpZ3VvdXMgaGVhZCBhbmQgdGFnIHJlZnMgKGxvb3NlKScgJworCWdpdCBjb25maWcgLS1ib29sIGNvcmUud2FybmFtYmlndW91c3JlZnMgZmFsc2UgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0ICIlKHJlZm5hbWU6c2hvcnQpIiByZWZzL2hlYWRzL21hc3RlciByZWZzL3RhZ3MvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK2hlYWRzL2FtYmlndW91cworYW1iaWd1b3VzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgYW1iaWd1b3VzIGhlYWQgYW5kIHRhZyByZWZzIElJIChsb29zZSknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyBhbWJpZ3VvdXMgdGVzdHRhZ14wICYmCisJZ2l0IGJyYW5jaCBhbWJpZ3VvdXMgdGVzdHRhZ14wICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdCAiJShyZWZuYW1lOnNob3J0KSIgcmVmcy9oZWFkcy9hbWJpZ3VvdXMgcmVmcy90YWdzL2FtYmlndW91cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FuIHVudXN1YWwgdGFnIHdpdGggYW4gaW5jb21wbGV0ZSBsaW5lJyAnCisKKwlnaXQgdGFnIC1tICJib2dvIiBib2dvICYmCisJYm9nbz0kKGdpdCBjYXQtZmlsZSB0YWcgYm9nbykgJiYKKwlib2dvPSQocHJpbnRmICIlcyIgIiRib2dvIiB8IGdpdCBta3RhZykgJiYKKwlnaXQgdGFnIC1mIGJvZ28gIiRib2dvIiAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQgIiUoYm9keSkiIHJlZnMvdGFncy9ib2dvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHRhZyB3aXRoIHN1YmplY3QgYW5kIGJvZHkgY29udGVudCcgJworCWNhdCA+Pm1zZyA8PC1cRU9GICYmCisJCXRoZSBzdWJqZWN0IGxpbmUKKworCQlmaXJzdCBib2R5IGxpbmUKKwkJc2Vjb25kIGJvZHkgbGluZQorCUVPRgorCWdpdCB0YWcgLUYgbXNnIHN1YmplY3QtYm9keQorJwordGVzdF9hdG9tIHJlZnMvdGFncy9zdWJqZWN0LWJvZHkgc3ViamVjdCAndGhlIHN1YmplY3QgbGluZScKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc3ViamVjdC1ib2R5IGJvZHkgJ2ZpcnN0IGJvZHkgbGluZQorc2Vjb25kIGJvZHkgbGluZQorJwordGVzdF9hdG9tIHJlZnMvdGFncy9zdWJqZWN0LWJvZHkgY29udGVudHMgJ3RoZSBzdWJqZWN0IGxpbmUKKworZmlyc3QgYm9keSBsaW5lCitzZWNvbmQgYm9keSBsaW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSB0YWcgd2l0aCBtdWx0aWxpbmUgc3ViamVjdCcgJworCWNhdCA+bXNnIDw8LVxFT0YgJiYKKwkJZmlyc3Qgc3ViamVjdCBsaW5lCisJCXNlY29uZCBzdWJqZWN0IGxpbmUKKworCQlmaXJzdCBib2R5IGxpbmUKKwkJc2Vjb25kIGJvZHkgbGluZQorCUVPRgorCWdpdCB0YWcgLUYgbXNnIG11bHRpbGluZQorJwordGVzdF9hdG9tIHJlZnMvdGFncy9tdWx0aWxpbmUgc3ViamVjdCAnZmlyc3Qgc3ViamVjdCBsaW5lIHNlY29uZCBzdWJqZWN0IGxpbmUnCit0ZXN0X2F0b20gcmVmcy90YWdzL211bHRpbGluZSBjb250ZW50czpzdWJqZWN0ICdmaXJzdCBzdWJqZWN0IGxpbmUgc2Vjb25kIHN1YmplY3QgbGluZScKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvbXVsdGlsaW5lIGJvZHkgJ2ZpcnN0IGJvZHkgbGluZQorc2Vjb25kIGJvZHkgbGluZQorJwordGVzdF9hdG9tIHJlZnMvdGFncy9tdWx0aWxpbmUgY29udGVudHM6Ym9keSAnZmlyc3QgYm9keSBsaW5lCitzZWNvbmQgYm9keSBsaW5lCisnCit0ZXN0X2F0b20gcmVmcy90YWdzL211bHRpbGluZSBjb250ZW50czpzaWduYXR1cmUgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvbXVsdGlsaW5lIGNvbnRlbnRzICdmaXJzdCBzdWJqZWN0IGxpbmUKK3NlY29uZCBzdWJqZWN0IGxpbmUKKworZmlyc3QgYm9keSBsaW5lCitzZWNvbmQgYm9keSBsaW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdjcmVhdGUgc2lnbmVkIHRhZ3MnICcKKwlnaXQgdGFnIC1zIC1tICIiIHNpZ25lZC1lbXB0eSAmJgorCWdpdCB0YWcgLXMgLW0gInN1YmplY3QgbGluZSIgc2lnbmVkLXNob3J0ICYmCisJY2F0ID5tc2cgPDwtXEVPRiAmJgorCXN1YmplY3QgbGluZQorCisJYm9keSBjb250ZW50cworCUVPRgorCWdpdCB0YWcgLXMgLUYgbXNnIHNpZ25lZC1sb25nCisnCisKK3NpZz0nLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KKy0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQorJworCitQUkVSRVE9R1BHCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1lbXB0eSBzdWJqZWN0ICcnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1lbXB0eSBjb250ZW50czpzdWJqZWN0ICcnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1lbXB0eSBib2R5ICIkc2lnIgordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtZW1wdHkgY29udGVudHM6Ym9keSAnJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtZW1wdHkgY29udGVudHM6c2lnbmF0dXJlICIkc2lnIgordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtZW1wdHkgY29udGVudHMgIiRzaWciCisKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLXNob3J0IHN1YmplY3QgJ3N1YmplY3QgbGluZScKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLXNob3J0IGNvbnRlbnRzOnN1YmplY3QgJ3N1YmplY3QgbGluZScKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLXNob3J0IGJvZHkgIiRzaWciCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1zaG9ydCBjb250ZW50czpib2R5ICcnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1zaG9ydCBjb250ZW50czpzaWduYXR1cmUgIiRzaWciCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1zaG9ydCBjb250ZW50cyAic3ViamVjdCBsaW5lCiskc2lnIgorCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1sb25nIHN1YmplY3QgJ3N1YmplY3QgbGluZScKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWxvbmcgY29udGVudHM6c3ViamVjdCAnc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtbG9uZyBib2R5ICJib2R5IGNvbnRlbnRzCiskc2lnIgordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtbG9uZyBjb250ZW50czpib2R5ICdib2R5IGNvbnRlbnRzCisnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1sb25nIGNvbnRlbnRzOnNpZ25hdHVyZSAiJHNpZyIKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWxvbmcgY29udGVudHMgInN1YmplY3QgbGluZQorCitib2R5IGNvbnRlbnRzCiskc2lnIgorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorNDA4ZmU3NmQwMmE3ODVhMDA2YzJlOWM2NjliN2JlNTU4OWVkZTk2ZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiByZWZzL3RhZ3MvbWFzdGVyCis5MGI1ZWJlZGU0ODk5ZWRhNjQ4OTNiYzJhNGM4ZjFkNmZiNmRmYzQwIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9ib2dvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IHNvcnQgd2l0aCBtdWx0aXBsZSBrZXlzJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKSAlKHRhZ2dlcmVtYWlsKSAlKHJlZm5hbWUpIiAtLXNvcnQ9b2JqZWN0bmFtZSAtLXNvcnQ9dGFnZ2VyZW1haWwgXAorCQlyZWZzL3RhZ3MvYm9nbyByZWZzL3RhZ3MvbWFzdGVyID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDY1MDAtZ2Muc2ggYi90L3Q2NTAwLWdjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxYTYzNjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2NTAwLWdjLnNoCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyBnaXQgZ2MgdGVzdHMKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIGVtcHR5IHJlcG9zaXRvcnknICcKKwlnaXQgZ2MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLS1nb2JibGVkZWdvb2snICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgZ2MgLS1ub25zZW5zZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlOiBnaXQgZ2MiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyAtaCB3aXRoIGludmFsaWQgY29uZmlndXJhdGlvbicgJworCW1rZGlyIGJyb2tlbiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIltnY10gcHJ1bmVleHBpcmUgPSBDT1JSVVBUIiA+Pi5naXQvY29uZmlnICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBnYyAtaCA+dXNhZ2UgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZSIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwMS1tdi5zaCBiL3QvdDcwMDEtbXYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTg0NWIxNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMDEtbXYuc2gKQEAgLTAsMCArMSwyNTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbXYgaW4gc3ViZGlycycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgXAorICAgICdta2RpciBwYXRoMCBwYXRoMSAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HIHBhdGgwL0NPUFlJTkcgJiYKKyAgICAgZ2l0IGFkZCBwYXRoMC9DT1BZSU5HICYmCisgICAgIGdpdCBjb21taXQgLW0gYWRkIC1hJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbW92aW5nIHRoZSBmaWxlIG91dCBvZiBzdWJkaXJlY3RvcnknIFwKKyAgICAnY2QgcGF0aDAgJiYgZ2l0IG12IENPUFlJTkcgLi4vcGF0aDEvQ09QWUlORycKKworIyBpbiBwYXRoMCBjdXJyZW50bHkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb21taXRpbmcgdGhlIGNoYW5nZScgXAorICAgICdjZCAuLiAmJiBnaXQgY29tbWl0IC1tIG1vdmUtb3V0IC1hJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgdGhlIGNvbW1pdCcgXAorICAgICdnaXQgZGlmZi10cmVlIC1yIC1NIC0tbmFtZS1zdGF0dXMgIEhFQUReIEhFQUQgfCBcCisgICAgZ3JlcCAiXlIxMDAuLipwYXRoMC9DT1BZSU5HLi4qcGF0aDEvQ09QWUlORyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtb3ZpbmcgdGhlIGZpbGUgYmFjayBpbnRvIHN1YmRpcmVjdG9yeScgXAorICAgICdjZCBwYXRoMCAmJiBnaXQgbXYgLi4vcGF0aDEvQ09QWUlORyBDT1BZSU5HJworCisjIGluIHBhdGgwIGN1cnJlbnRseQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbW1pdGluZyB0aGUgY2hhbmdlJyBcCisgICAgJ2NkIC4uICYmIGdpdCBjb21taXQgLW0gbW92ZS1pbiAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIHRoZSBjb21taXQnIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAtciAtTSAtLW5hbWUtc3RhdHVzICBIRUFEXiBIRUFEIHwgXAorICAgIGdyZXAgIl5SMTAwLi4qcGF0aDEvQ09QWUlORy4uKnBhdGgwL0NPUFlJTkciJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgLWsgb24gbm9uLWV4aXN0aW5nIGZpbGUnIFwKKyAgICAnZ2l0IG12IC1rIGlkb250ZXhpc3QgcGF0aDAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyAtayBvbiB1bnRyYWNrZWQgZmlsZScgXAorICAgICd0b3VjaCB1bnRyYWNrZWQxICYmCisgICAgIGdpdCBtdiAtayB1bnRyYWNrZWQxIHBhdGgwICYmCisgICAgIHRlc3QgLWYgdW50cmFja2VkMSAmJgorICAgICB0ZXN0ICEgLWYgcGF0aDAvdW50cmFja2VkMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIC1rIG9uIG11bHRpcGxlIHVudHJhY2tlZCBmaWxlcycgXAorICAgICd0b3VjaCB1bnRyYWNrZWQyICYmCisgICAgIGdpdCBtdiAtayB1bnRyYWNrZWQxIHVudHJhY2tlZDIgcGF0aDAgJiYKKyAgICAgdGVzdCAtZiB1bnRyYWNrZWQxICYmCisgICAgIHRlc3QgLWYgdW50cmFja2VkMiAmJgorICAgICB0ZXN0ICEgLWYgcGF0aDAvdW50cmFja2VkMSAmJgorICAgICB0ZXN0ICEgLWYgcGF0aDAvdW50cmFja2VkMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIC1mIG9uIHVudHJhY2tlZCBmaWxlIHdpdGggZXhpc3RpbmcgdGFyZ2V0JyBcCisgICAgJ3RvdWNoIHBhdGgwL3VudHJhY2tlZDEgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG12IC1mIHVudHJhY2tlZDEgcGF0aDAgJiYKKyAgICAgdGVzdCAhIC1mIC5naXQvaW5kZXgubG9jayAmJgorICAgICB0ZXN0IC1mIHVudHJhY2tlZDEgJiYKKyAgICAgdGVzdCAtZiBwYXRoMC91bnRyYWNrZWQxJworCisjIGNsZWFuIHVwIHRoZSBtZXNzIGluIGNhc2UgYmFkIHRoaW5ncyBoYXBwZW4KK3JtIC1mIGlkb250ZXhpc3QgdW50cmFja2VkMSB1bnRyYWNrZWQyIFwKKyAgICAgcGF0aDAvaWRvbnRleGlzdCBwYXRoMC91bnRyYWNrZWQxIHBhdGgwL3VudHJhY2tlZDIgXAorICAgICAuZ2l0L2luZGV4LmxvY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FkZGluZyBhbm90aGVyIGZpbGUnIFwKKyAgICAnY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vUkVBRE1FIHBhdGgwL1JFQURNRSAmJgorICAgICBnaXQgYWRkIHBhdGgwL1JFQURNRSAmJgorICAgICBnaXQgY29tbWl0IC1tIGFkZDIgLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtb3Zpbmcgd2hvbGUgc3ViZGlyZWN0b3J5JyBcCisgICAgJ2dpdCBtdiBwYXRoMCBwYXRoMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbW1pdGluZyB0aGUgY2hhbmdlJyBcCisgICAgJ2dpdCBjb21taXQgLW0gZGlyLW1vdmUgLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyB0aGUgY29tbWl0JyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgLXIgLU0gLS1uYW1lLXN0YXR1cyAgSEVBRF4gSEVBRCB8IFwKKyAgICAgZ3JlcCAiXlIxMDAuLipwYXRoMC9DT1BZSU5HLi4qcGF0aDIvQ09QWUlORyIgJiYKKyAgICAgZ2l0IGRpZmYtdHJlZSAtciAtTSAtLW5hbWUtc3RhdHVzICBIRUFEXiBIRUFEIHwgXAorICAgICBncmVwICJeUjEwMC4uKnBhdGgwL1JFQURNRS4uKnBhdGgyL1JFQURNRSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzdWNjZWVkIHdoZW4gc291cmNlIGlzIGEgcHJlZml4IG9mIGRlc3RpbmF0aW9uJyBcCisgICAgJ2dpdCBtdiBwYXRoMi9DT1BZSU5HIHBhdGgyL0NPUFlJTkctcmVuYW1lZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ21vdmluZyB3aG9sZSBzdWJkaXJlY3RvcnkgaW50byBzdWJkaXJlY3RvcnknIFwKKyAgICAnZ2l0IG12IHBhdGgyIHBhdGgxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29tbWl0aW5nIHRoZSBjaGFuZ2UnIFwKKyAgICAnZ2l0IGNvbW1pdCAtbSBkaXItbW92ZSAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIHRoZSBjb21taXQnIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAtciAtTSAtLW5hbWUtc3RhdHVzICBIRUFEXiBIRUFEIHwgXAorICAgICBncmVwICJeUjEwMC4uKnBhdGgyL0NPUFlJTkcuLipwYXRoMS9wYXRoMi9DT1BZSU5HIiAmJgorICAgICBnaXQgZGlmZi10cmVlIC1yIC1NIC0tbmFtZS1zdGF0dXMgIEhFQUReIEhFQUQgfCBcCisgICAgIGdyZXAgIl5SMTAwLi4qcGF0aDIvUkVBRE1FLi4qcGF0aDEvcGF0aDIvUkVBRE1FIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RvIG5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGV4aXN0aW5nIGRpcmVjdG9yeScgXAorICAgICdta2RpciBwYXRoMCAmJiBta2RpciBwYXRoMC9wYXRoMiAmJiB0ZXN0X211c3RfZmFpbCBnaXQgbXYgcGF0aDIgcGF0aDAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtb3ZlIGludG8gIi4iJyBcCisgICAgJ2dpdCBtdiBwYXRoMS9wYXRoMi8gLicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiTWljaGFlbCBDYXNzYXIncyB0ZXN0IGNhc2UiICcKKwlybSAtZnIgLmdpdCBwYXBlcnMgcGFydEEgJiYKKwlnaXQgaW5pdCAmJgorCW1rZGlyIC1wIHBhcGVycy91bnNvcnRlZCBwYXBlcnMvYWxsLXBhcGVycyBwYXJ0QSAmJgorCWVjaG8gYSA+IHBhcGVycy91bnNvcnRlZC9UaGVzaXMucGRmICYmCisJZWNobyBiID4gcGFydEEvb3V0bGluZS50eHQgJiYKKwllY2hvIGMgPiBwYXBlcnMvdW5zb3J0ZWQvX2Fub3RoZXIgJiYKKwlnaXQgYWRkIHBhcGVycyBwYXJ0QSAmJgorCVQxPWBnaXQgd3JpdGUtdHJlZWAgJiYKKworCWdpdCBtdiBwYXBlcnMvdW5zb3J0ZWQvVGhlc2lzLnBkZiBwYXBlcnMvYWxsLXBhcGVycy9tb28tYmxhaC5wZGYgJiYKKworCVQ9YGdpdCB3cml0ZS10cmVlYCAmJgorCWdpdCBscy10cmVlIC1yICRUIHwgZ3JlcCBwYXJ0QS9vdXRsaW5lLnR4dCB8fCB7CisJCWdpdCBscy10cmVlIC1yICRUCisJCShleGl0IDEpCisJfQorJworCitybSAtZnIgcGFwZXJzIHBhcnRBIHBhdGg/CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlNlcmdleSBWbGFzb3YncyB0ZXN0IGNhc2UiICcKKwlybSAtZnIgLmdpdCAmJgorCWdpdCBpbml0ICYmCisJbWtkaXIgYWIgJiYKKwlkYXRlID5hYi5jICYmCisJZGF0ZSA+YWIvZCAmJgorCWdpdCBhZGQgYWIuYyBhYiAmJgorCWdpdCBjb21taXQgLW0gJ2luaXRpYWwnICYmCisJZ2l0IG12IGFiIGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgcGF0aG5hbWUnICcoCisKKwlybSAtZnIgbWluZSAmJgorCW1rZGlyIG1pbmUgJiYKKwljZCBtaW5lICYmCisJdGVzdF9jcmVhdGVfcmVwbyBvbmUgJiYKKwljZCBvbmUgJiYKKwlta2RpciBzdWIgJiYKKwk+c3ViL2ZpbGUgJiYKKwlnaXQgYWRkIHN1Yi9maWxlICYmCisKKwlnaXQgbXYgc3ViICIkKHB3ZCkvaW4iICYmCisJISB0ZXN0IC1kIHN1YiAmJgorCXRlc3QgLWQgaW4gJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGluL2ZpbGUKKworCispJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvbHV0ZSBwYXRobmFtZSBvdXRzaWRlIHNob3VsZCBmYWlsJyAnKAorCisJcm0gLWZyIG1pbmUgJiYKKwlta2RpciBtaW5lICYmCisJY2QgbWluZSAmJgorCW91dD0kKHB3ZCkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIG9uZSAmJgorCWNkIG9uZSAmJgorCW1rZGlyIHN1YiAmJgorCT5zdWIvZmlsZSAmJgorCWdpdCBhZGQgc3ViL2ZpbGUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtdiBzdWIgIiRvdXQvb3V0IiAmJgorCXRlc3QgLWQgc3ViICYmCisJISB0ZXN0IC1kIC4uL2luICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzdWIvZmlsZQorCispJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbXYgdG8gbW92ZSBtdWx0aXBsZSBzb3VyY2VzIGludG8gYSBkaXJlY3RvcnknICcKKwlybSAtZnIgLmdpdCAmJiBnaXQgaW5pdCAmJgorCW1rZGlyIGRpciBvdGhlciAmJgorCT5kaXIvYS50eHQgJiYKKwk+ZGlyL2IudHh0ICYmCisJZ2l0IGFkZCBkaXIvPy50eHQgJiYKKwlnaXQgbXYgZGlyL2EudHh0IGRpci9iLnR4dCBvdGhlciAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJeyBlY2hvIG90aGVyL2EudHh0OyBlY2hvIG90aGVyL2IudHh0OyB9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtdiBzaG91bGQgbm90IGNoYW5nZSBzaGExIG9mIG1vdmVkIGNhY2hlIGVudHJ5JyAnCisKKwlybSAtZnIgLmdpdCAmJgorCWdpdCBpbml0ICYmCisJZWNobyAxID5kaXJ0eSAmJgorCWdpdCBhZGQgZGlydHkgJiYKKwllbnRyeT0iJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBkaXJ0eSB8IGN1dCAtZiAxKSIgJiYKKwlnaXQgbXYgZGlydHkgZGlydHkyICYmCisJWyAiJGVudHJ5IiA9ICIkKGdpdCBscy1maWxlcyAtLXN0YWdlIGRpcnR5MiB8IGN1dCAtZiAxKSIgXSAmJgorCWVjaG8gMiA+ZGlydHkyICYmCisJZ2l0IG12IGRpcnR5MiBkaXJ0eSAmJgorCVsgIiRlbnRyeSIgPSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBkaXJ0eSB8IGN1dCAtZiAxKSIgXQorCisnCisKK3JtIC1mIGRpcnR5IGRpcnR5MgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdnaXQgbXYgc2hvdWxkIG92ZXJ3cml0ZSBzeW1saW5rIHRvIGEgZmlsZScgJworCisJcm0gLWZyIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCWVjaG8gMSA+bW92ZWQgJiYKKwlsbiAtcyBtb3ZlZCBzeW1saW5rICYmCisJZ2l0IGFkZCBtb3ZlZCBzeW1saW5rICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG12IG1vdmVkIHN5bWxpbmsgJiYKKwlnaXQgbXYgLWYgbW92ZWQgc3ltbGluayAmJgorCSEgdGVzdCAtZSBtb3ZlZCAmJgorCXRlc3QgLWYgc3ltbGluayAmJgorCXRlc3QgIiQoY2F0IHN5bWxpbmspIiA9IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKworJworCitybSAtZiBtb3ZlZCBzeW1saW5rCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2dpdCBtdiBzaG91bGQgb3ZlcndyaXRlIGZpbGUgd2l0aCBhIHN5bWxpbmsnICcKKworCXJtIC1mciAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKwllY2hvIDEgPm1vdmVkICYmCisJbG4gLXMgbW92ZWQgc3ltbGluayAmJgorCWdpdCBhZGQgbW92ZWQgc3ltbGluayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtdiBzeW1saW5rIG1vdmVkICYmCisJZ2l0IG12IC1mIHN5bWxpbmsgbW92ZWQgJiYKKwkhIHRlc3QgLWUgc3ltbGluayAmJgorCXRlc3QgLWggbW92ZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKworJworCitybSAtZiBtb3ZlZCBzeW1saW5rCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwMy1maWx0ZXItYnJhbmNoLnNoIGIvdC90NzAwMy1maWx0ZXItYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRkMTNlMTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDAzLWZpbHRlci1icmFuY2guc2gKQEAgLTAsMCArMSwzNzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgZmlsdGVyLWJyYW5jaCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IEEgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IkAwICswMDAwIiBHSVRfQVVUSE9SX0RBVEU9IkAwICswMDAwIiAmJgorCXRlc3RfY29tbWl0IC0tbm90aWNrIEIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoIEIgJiYKKwl0ZXN0X2NvbW1pdCBEICYmCisJbWtkaXIgZGlyICYmCisJdGVzdF9jb21taXQgZGlyL0QgJiYKKwl0ZXN0X2NvbW1pdCBFICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IEMgJiYKKwlnaXQgY2hlY2tvdXQgYnJhbmNoICYmCisJZ2l0IG1lcmdlIEMgJiYKKwlnaXQgdGFnIEYgJiYKKwl0ZXN0X2NvbW1pdCBHICYmCisJdGVzdF9jb21taXQgSAorJworIyAqIChIRUFELCBicmFuY2gpIEgKKyMgKiBHCisjICogICBNZXJnZSBjb21taXQgJ0MnIGludG8gYnJhbmNoCisjIHxcCisjIHwgKiAobWFzdGVyKSBDCisjICogfCBFCisjICogfCBkaXIvRAorIyAqIHwgRAorIyB8LworIyAqIEIKKyMgKiBBCisKKworSD0kKGdpdCByZXYtcGFyc2UgSCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSBpZGVudGljYWxseScgJworCWdpdCBmaWx0ZXItYnJhbmNoIGJyYW5jaAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdWx0IGlzIHJlYWxseSBpZGVudGljYWwnICcKKwl0ZXN0ICRIID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGUgYmFyZSByZXBvc2l0b3J5IGlkZW50aWNhbGx5JyAnCisJKGdpdCBjb25maWcgY29yZS5iYXJlIHRydWUgJiYgY2QgLmdpdCAmJgorCSBnaXQgZmlsdGVyLWJyYW5jaCBicmFuY2ggPiBmaWx0ZXItb3V0cHV0IDI+JjEgJiYKKwkhIGZncmVwIGZhdGFsIGZpbHRlci1vdXRwdXQpCisnCitnaXQgY29uZmlnIGNvcmUuYmFyZSBmYWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdWx0IGlzIHJlYWxseSBpZGVudGljYWwnICcKKwl0ZXN0ICRIID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCisKK1RSQVNIRElSPSQocHdkKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCBHSVRfRElSIHdoaWxlIHVzaW5nIC1kJyAnCisJbWtkaXIgZHJlcG8gJiYKKwkoIGNkIGRyZXBvICYmCisJZ2l0IGluaXQgJiYKKwl0ZXN0X2NvbW1pdCBkcmVwbyAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1kICIkVFJBU0hESVIvZGZvbyIgXAorCQktLWluZGV4LWZpbHRlciAiY3AgXCIkVFJBU0hESVJcIi9kZm9vL2JhY2t1cC1yZWZzIFwiJFRSQVNIRElSXCIiIFwKKwkpICYmCisJZ3JlcCBkcmVwbyAiJFRSQVNIRElSL2JhY2t1cC1yZWZzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGYWlsIGlmIGNvbW1pdCBmaWx0ZXIgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLWNvbW1pdC1maWx0ZXIgImV4aXQgMSIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlLCByZW5hbWluZyBhIHNwZWNpZmljIGZpbGUnICcKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRyZWUtZmlsdGVyICJtdiBELnQgZG9oIHx8IDoiIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aGF0IHRoZSBmaWxlIHdhcyByZW5hbWVkJyAnCisJdGVzdCBEID0gIiQoZ2l0IHNob3cgSEVBRDpkb2ggLS0pIiAmJgorCSEgdGVzdCAtZiBELnQgJiYKKwl0ZXN0IC1mIGRvaCAmJgorCXRlc3QgRCA9ICIkKGNhdCBkb2gpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlLCByZW5hbWluZyBhIHNwZWNpZmljIGRpcmVjdG9yeScgJworCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdHJlZS1maWx0ZXIgIm12IGRpciBkaXJvaCB8fCA6IiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGhhdCB0aGUgZGlyZWN0b3J5IHdhcyByZW5hbWVkJyAnCisJdGVzdCBkaXIvRCA9ICIkKGdpdCBzaG93IEhFQUQ6ZGlyb2gvRC50IC0tKSIgJiYKKwkhIHRlc3QgLWQgZGlyICYmCisJdGVzdCAtZCBkaXJvaCAmJgorCSEgdGVzdCAtZCBkaXJvaC9kaXIgJiYKKwl0ZXN0IC1mIGRpcm9oL0QudCAmJgorCXRlc3QgZGlyL0QgPSAiJChjYXQgZGlyb2gvRC50KSIKKycKKworZ2l0IHRhZyBvbGREIEhFQUR+NAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSBvbmUgYnJhbmNoLCBrZWVwaW5nIGEgc2lkZSBicmFuY2gnICcKKwlnaXQgYnJhbmNoIG1vZEQgb2xkRCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdHJlZS1maWx0ZXIgIm12IEIudCBib2ggfHwgOiIgRC4ubW9kRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tb24gYW5jZXN0b3IgaXMgc3RpbGwgY29tbW9uICh1bmNoYW5nZWQpJyAnCisJdGVzdCAiJChnaXQgbWVyZ2UtYmFzZSBtb2REIEQpIiA9ICIkKGdpdCByZXYtcGFyc2UgQikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlciBzdWJkaXJlY3Rvcnkgb25seScgJworCW1rZGlyIHN1YmRpciAmJgorCXRvdWNoIHN1YmRpci9uZXcgJiYKKwlnaXQgYWRkIHN1YmRpci9uZXcgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzdWJkaXIiICYmCisJZWNobyBIID4gQS50ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibm90IHN1YmRpciIgQS50ICYmCisJZWNobyBBID4gc3ViZGlyL25ldyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFnYWluIHN1YmRpciIgc3ViZGlyL25ldyAmJgorCWdpdCBybSBBLnQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZ2FpbiBub3Qgc3ViZGlyIiAmJgorCWdpdCBicmFuY2ggc3ViICYmCisJZ2l0IGJyYW5jaCBzdWItZWFybGllciBIRUFEfjIgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXN1YmRpcmVjdG9yeS1maWx0ZXIgc3ViZGlyIFwKKwkJcmVmcy9oZWFkcy9zdWIgcmVmcy9oZWFkcy9zdWItZWFybGllcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXJlY3RvcnkgZmlsdGVyIHJlc3VsdCBsb29rcyBva2F5JyAnCisJdGVzdCAyID0gJChnaXQgcmV2LWxpc3Qgc3ViIHwgd2MgLWwpICYmCisJZ2l0IHNob3cgc3ViOm5ldyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93IHN1YjpzdWJkaXIgJiYKKwlnaXQgc2hvdyBzdWItZWFybGllcjpuZXcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyBzdWItZWFybGllcjpzdWJkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9yZSBzZXR1cCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvIEEgPiBzdWJkaXIvbmV3ICYmCisJZ2l0IGFkZCBzdWJkaXIvbmV3ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViZGlyIG9uIG1hc3RlciIgc3ViZGlyL25ldyAmJgorCWdpdCBybSBBLnQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZ2FpbiBzdWJkaXIgb24gbWFzdGVyIiAmJgorCWdpdCBtZXJnZSBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIGluZGV4LWZpbHRlciB0byBtb3ZlIGludG8gYSBzdWJkaXJlY3RvcnknICcKKwlnaXQgYnJhbmNoIGRpcmVjdG9yeW1vdmVkICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1pbmRleC1maWx0ZXIgXAorCQkgImdpdCBscy1maWxlcyAtcyB8IHNlZCBcInMtCS0mbmV3c3ViZGlyLy1cIiB8CisJICAgICAgICAgIEdJVF9JTkRFWF9GSUxFPVwkR0lUX0lOREVYX0ZJTEUubmV3IFwKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJCSAgbXYgXCJcJEdJVF9JTkRFWF9GSUxFLm5ld1wiIFwiXCRHSVRfSU5ERVhfRklMRVwiIiBkaXJlY3Rvcnltb3ZlZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgZGlyZWN0b3J5bW92ZWQ6bmV3c3ViZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3BzIHdoZW4gbXNnIGZpbHRlciBmYWlscycgJworCW9sZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLW1zZy1maWx0ZXIgZmFsc2UgSEVBRCAmJgorCXRlc3QgJG9sZCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXJtIC1yZiAuZ2l0LXJld3JpdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9yIGluZm9ybWF0aW9uIGlzIHByZXNlcnZlZCcgJworCTogPiBpICYmCisJZ2l0IGFkZCBpICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPSJCIFYgVWlwcyIgZ2l0IGNvbW1pdCAtbSBidnVpcHMgJiYKKwlnaXQgYnJhbmNoIHByZXNlcnZlZC1hdXRob3IgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLW1zZy1maWx0ZXIgImNhdDsgXAorCQkJdGVzdCBcJEdJVF9DT01NSVQgIT0gJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgfHwgXAorCQkJZWNobyBIYWxsbyIgXAorCQlwcmVzZXJ2ZWQtYXV0aG9yICYmCisJdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hdXRob3I9IkIgViBVaXBzIiBwcmVzZXJ2ZWQtYXV0aG9yIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbW92ZSBhIGNlcnRhaW4gYXV0aG9yJ3MgY29tbWl0cyIgJworCWVjaG8gaSA+IGkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGkgaSAmJgorCWdpdCBicmFuY2ggcmVtb3ZlZC1hdXRob3IgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLWNvbW1pdC1maWx0ZXIgIlwKKwkJaWYgWyBcIlwkR0lUX0FVVEhPUl9OQU1FXCIgPSBcIkIgViBVaXBzXCIgXTtcCisJCXRoZW5cCisJCQlza2lwX2NvbW1pdCBcIlwkQFwiOworCQllbHNlXAorCQkJZ2l0IGNvbW1pdC10cmVlIFwiXCRAXCI7XAorCQlmaSIgcmVtb3ZlZC1hdXRob3IgJiYKKwljbnQxPSQoZ2l0IHJldi1saXN0IG1hc3RlciB8IHdjIC1sKSAmJgorCWNudDI9JChnaXQgcmV2LWxpc3QgcmVtb3ZlZC1hdXRob3IgfCB3YyAtbCkgJiYKKwl0ZXN0ICRjbnQxIC1lcSAkKCgkY250MiArIDEpKSAmJgorCXRlc3QgMCA9ICQoZ2l0IHJldi1saXN0IC0tYXV0aG9yPSJCIFYgVWlwcyIgcmVtb3ZlZC1hdXRob3IgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZiBvbiBpbnZhbGlkIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmlsdGVyLWJyYW5jaCAtZiBtYXN0ZXIgeHktcHJvYmxlbSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmaWx0ZXItYnJhbmNoIC1mIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJtYXAiIHdvcmtzIGluIGNvbW1pdCBmaWx0ZXInICcKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLWNvbW1pdC1maWx0ZXIgIlwKKwkJcGFyZW50PVwkKGdpdCByZXYtcGFyc2UgXCRHSVRfQ09NTUlUXikgJiYKKwkJbWFwcGVkPVwkKG1hcCBcJHBhcmVudCkgJiYKKwkJYWN0dWFsPVwkKGVjaG8gXCJcJEBcIiB8IHNlZCBcInMvXi4qLXAgLy9cIikgJiYKKwkJdGVzdCBcJG1hcHBlZCA9IFwkYWN0dWFsICYmCisJCWdpdCBjb21taXQtdHJlZSBcIlwkQFwiOyIgbWFzdGVyfjIuLm1hc3RlciAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05hbWUgbmVlZGluZyBxdW90ZXMnICcKKworCWdpdCBjaGVja291dCAtYiByZXJlcmUgQSAmJgorCW1rZGlyIGZvbyAmJgorCW5hbWU9IuOCjOOCjOOCjCIgJiYKKwk+Zm9vLyRuYW1lICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJBZGRpbmcgYSBmaWxlIiAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC0tdHJlZS1maWx0ZXIgInJtIC1mciBmb28iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAiZm9vLyRuYW1lIiAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlcmVyZSkgIT0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEEpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3ViZGlyZWN0b3J5IGZpbHRlciB3aXRoIGRpc2FwcGVhcmluZyB0cmVlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlta2RpciBmb28gJiYKKwl0b3VjaCBmb28vYmFyICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJBZGRpbmcgZm9vIiAmJgorCisJZ2l0IHJtIC1yIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlJlbW92aW5nIGZvbyIgJiYKKworCW1rZGlyIGZvbyAmJgorCXRvdWNoIGZvby9iYXIgJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlJlLWFkZGluZyBmb28iICYmCisKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXN1YmRpcmVjdG9yeS1maWx0ZXIgZm9vICYmCisJdGVzdCAkKGdpdCByZXYtbGlzdCBtYXN0ZXIgfCB3YyAtbCkgPSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RhZyBuYW1lIGZpbHRlcmluZyByZXRhaW5zIHRhZyBtZXNzYWdlJyAnCisJZ2l0IHRhZyAtbSBhdGFnIFQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFQgPiBleHBlY3QgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRhZy1uYW1lLWZpbHRlciBjYXQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2ZhdXhfZ3BnX3RhZz0nb2JqZWN0IFhYWFhYWAordHlwZSBjb21taXQKK3RhZyBTCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjAyNjMzOSAtMDUwMAorCitUaGlzIGlzIGEgZmF1eCBncGcgc2lnbmVkIHRhZy4KKy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCitWZXJzaW9uOiBGYXV4R1BHIHYwLjAuMCAoRkFVWC9MaW51eCkKKworZ2RzZm9ld2h4dS82bDA2ZjFreHl4aEtkWmtyY2JhaU9NdGtKVUE5SVRBYzFtbGFtaDBvb2FzeGtIMVh3TWJZUQorYWNtd1hhV0VUMjBIMEdlQUdQKzd2b3c9Cis9YWdwTworLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUYWcgbmFtZSBmaWx0ZXJpbmcgc3RyaXBzIGdwZyBzaWduYXR1cmUnICcKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXNoYTF0PSQoZWNobyAiJGZhdXhfZ3BnX3RhZyIgfCBzZWQgLWUgcy9YWFhYWFgvJHNoYTEvIHwgZ2l0IG1rdGFnKSAmJgorCWdpdCB1cGRhdGUtcmVmICJyZWZzL3RhZ3MvUyIgIiRzaGExdCIgJiYKKwllY2hvICIkZmF1eF9ncGdfdGFnIiB8IHNlZCAtZSBzL1hYWFhYWC8kc2hhMS8gfCBoZWFkIC1uIDYgPiBleHBlY3QgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRhZy1uYW1lLWZpbHRlciBjYXQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFMgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RhZyBuYW1lIGZpbHRlcmluZyBhbGxvd3Mgc2xhc2hlcyBpbiB0YWcgbmFtZXMnICcKKwlnaXQgdGFnIC1tIHRhZy13aXRoLXNsYXNoIFgvMSAmJgorCWdpdCBjYXQtZmlsZSB0YWcgWC8xIHwgc2VkIC1lIHMsWC8xLFgvMiwgPiBleHBlY3QgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRhZy1uYW1lLWZpbHRlciAiZWNobyBYLzIiICYmCisJZ2l0IGNhdC1maWxlIHRhZyBYLzIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1BydW5lIGVtcHR5IGNvbW1pdHMnICcKKwlnaXQgcmV2LWxpc3QgSEVBRCA+IGV4cGVjdCAmJgorCXRlc3RfY29tbWl0IHRvX3JlbW92ZSAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0taW5kZXgtZmlsdGVyICJnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIHRvX3JlbW92ZS50IiAtLXBydW5lLWVtcHR5IEhFQUQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZW1hcC10by1hbmNlc3RvciB3aXRoIGZpbGVuYW1lIGZpbHRlcnMnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBICYmCisJdGVzdF9jb21taXQgYWRkLWZvbyBmb28gMSAmJgorCWdpdCBicmFuY2ggbW92ZWQtZm9vICYmCisJdGVzdF9jb21taXQgYWRkLWJhciBiYXIgYSAmJgorCWdpdCBicmFuY2ggaW52YXJpYW50ICYmCisJb3JpZ19pbnZhcmlhbnQ9JChnaXQgcmV2LXBhcnNlIGludmFyaWFudCkgJiYKKwlnaXQgYnJhbmNoIG1vdmVkLWJhciAmJgorCXRlc3RfY29tbWl0IGNoYW5nZS1mb28gZm9vIDIgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXJlbWFwLXRvLWFuY2VzdG9yIFwKKwkJbW92ZWQtZm9vIG1vdmVkLWJhciBBLi5tYXN0ZXIgXAorCQktLSAtLSBmb28gJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtb3ZlZC1mb28pID0gJChnaXQgcmV2LXBhcnNlIG1vdmVkLWJhcikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtb3ZlZC1mb28pID0gJChnaXQgcmV2LXBhcnNlIG1hc3Rlcl4pICYmCisJdGVzdCAkb3JpZ19pbnZhcmlhbnQgPSAkKGdpdCByZXYtcGFyc2UgaW52YXJpYW50KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvbWF0aWMgcmVtYXBwaW5nIHRvIGFuY2VzdG9yIHdpdGggZmlsZW5hbWUgZmlsdGVycycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEEgJiYKKwl0ZXN0X2NvbW1pdCBhZGQtZm9vMiBmb28gMSAmJgorCWdpdCBicmFuY2ggbW92ZWQtZm9vMiAmJgorCXRlc3RfY29tbWl0IGFkZC1iYXIyIGJhciBhICYmCisJZ2l0IGJyYW5jaCBpbnZhcmlhbnQyICYmCisJb3JpZ19pbnZhcmlhbnQ9JChnaXQgcmV2LXBhcnNlIGludmFyaWFudDIpICYmCisJZ2l0IGJyYW5jaCBtb3ZlZC1iYXIyICYmCisJdGVzdF9jb21taXQgY2hhbmdlLWZvbzIgZm9vIDIgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiBcCisJCW1vdmVkLWZvbzIgbW92ZWQtYmFyMiBBLi5tYXN0ZXIgXAorCQktLSAtLSBmb28gJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtb3ZlZC1mb28yKSA9ICQoZ2l0IHJldi1wYXJzZSBtb3ZlZC1iYXIyKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1vdmVkLWZvbzIpID0gJChnaXQgcmV2LXBhcnNlIG1hc3Rlcl4pICYmCisJdGVzdCAkb3JpZ19pbnZhcmlhbnQgPSAkKGdpdCByZXYtcGFyc2UgaW52YXJpYW50MikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VibW9kdWxlJyAnCisJcm0gLWZyID8qIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCXRlc3RfY29tbWl0IGZpbGUgJiYKKwlta2RpciBzdWJtb2QgJiYKKwlzdWJtb2R1cmw9IiRQV0Qvc3VibW9kIiAmJgorCSggY2Qgc3VibW9kICYmCisJICBnaXQgaW5pdCAmJgorCSAgdGVzdF9jb21taXQgZmlsZS1pbi1zdWJtb2QgKSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsIiAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIHN1Ym1vZHVsZSIgJiYKKwl0ZXN0X2NvbW1pdCBhZGQtZmlsZSAmJgorCSggY2Qgc3VibW9kICYmIHRlc3RfY29tbWl0IGFkZC1pbi1zdWJtb2R1bGUgKSAmJgorCWdpdCBhZGQgc3VibW9kICYmCisJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlZCBzdWJtb2R1bGUiICYmCisJZ2l0IGJyYW5jaCBvcmlnaW5hbCBIRUFECisnCisKK29yaWdfaGVhZD1gZ2l0IHNob3ctcmVmIC0taGFzaCAtLWhlYWQgSEVBRGAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSBzdWJtb2R1bGUgd2l0aCBhbm90aGVyIGNvbnRlbnQnICcKKwlnaXQgZmlsdGVyLWJyYW5jaCAtLXRyZWUtZmlsdGVyICJ0ZXN0IC1kIHN1Ym1vZCAmJiB7CisJCQkJCSBybSAtcmYgc3VibW9kICYmCisJCQkJCSBnaXQgcm0gLXJmIC0tcXVpZXQgc3VibW9kICYmCisJCQkJCSBta2RpciBzdWJtb2QgJiYKKwkJCQkJIDogPiBzdWJtb2QvZmlsZQorCQkJCQkgfSB8fCA6IiBIRUFEICYmCisJdGVzdCAkb3JpZ19oZWFkICE9IGBnaXQgc2hvdy1yZWYgLS1oYXNoIC0taGVhZCBIRUFEYAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlIHN1Ym1vZHVsZSByZXZpc2lvbicgJworCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luYWwgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRyZWUtZmlsdGVyIFwKKwkgICAgImlmIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggLS0gc3VibW9kID4gL2Rldi9udWxsIDI+JjEKKwkgICAgIHRoZW4gZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSBzdWJtb2QKKwkgICAgIGZpIiBIRUFEICYmCisJdGVzdCAkb3JpZ19oZWFkICE9IGBnaXQgc2hvdy1yZWYgLS1oYXNoIC0taGVhZCBIRUFEYAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDQtdGFnLnNoIGIvdC90NzAwNC10YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTE4OTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMDQtdGFnLnNoCkBAIC0wLDAgKzEsMTM2OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBDYXJsb3MgUmljYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdGFnCisKK1Rlc3RzIGZvciBvcGVyYXRpb25zIHdpdGggdGFncy4nCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnLnNoCisKKyMgY3JlYXRpbmcgYW5kIGxpc3RpbmcgbGlnaHR3ZWlnaHQgdGFnczoKKwordGFnX2V4aXN0cyAoKSB7CisJZ2l0IHNob3ctcmVmIC0tcXVpZXQgLS12ZXJpZnkgcmVmcy90YWdzLyIkMSIKK30KKworIyB0b2RvOiBnaXQgdGFnIC1sIG5vdyByZXR1cm5zIGFsd2F5cyB6ZXJvLCB3aGVuIGZpeGVkLCBjaGFuZ2UgdGhpcyB0ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIGFsbCB0YWdzIGluIGFuIGVtcHR5IHRyZWUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1sICYmCisJZ2l0IHRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIGFsbCB0YWdzIGluIGFuIGVtcHR5IHRyZWUgc2hvdWxkIG91dHB1dCBub3RoaW5nJyAnCisJdGVzdCBgZ2l0IHRhZyAtbCB8IHdjIC1sYCAtZXEgMCAmJgorCXRlc3QgYGdpdCB0YWcgfCB3YyAtbGAgLWVxIDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va2luZyBmb3IgYSB0YWcgaW4gYW4gZW1wdHkgdHJlZSBzaG91bGQgZmFpbCcgXAorCSchICh0YWdfZXhpc3RzIG15dGFnKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgYSB0YWcgaW4gYW4gZW1wdHkgdHJlZSBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgbXlub3RhZyAmJgorCSEgdGFnX2V4aXN0cyBteW5vdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIGEgdGFnIGZvciBIRUFEIGluIGFuIGVtcHR5IHRyZWUgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIG15dGFnaGVhZCBIRUFEICYmCisJISB0YWdfZXhpc3RzIG15dGFnaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhIHRhZyBmb3IgYW4gdW5rbm93biByZXZpc2lvbiBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgbXl0YWdub3JldiBhYWFhYWFhYWFhYSAmJgorCSEgdGFnX2V4aXN0cyBteXRhZ25vcmV2CisnCisKKyMgY29tbWl0IHVzZWQgaW4gdGhlIHRlc3RzLCB0ZXN0X3RpY2sgaXMgYWxzbyBjYWxsZWQgaGVyZSB0byBmcmVlemUgdGhlIGRhdGU6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhIHRhZyB1c2luZyBkZWZhdWx0IEhFQUQgc2hvdWxkIHN1Y2NlZWQnICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIGZvbyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tIEZvbyAmJgorCWdpdCB0YWcgbXl0YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyBhbGwgdGFncyBpZiBvbmUgZXhpc3RzIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtbCAmJgorCWdpdCB0YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyBhbGwgdGFncyBpZiBvbmUgZXhpc3RzIHNob3VsZCBvdXRwdXQgdGhhdCB0YWcnICcKKwl0ZXN0IGBnaXQgdGFnIC1sYCA9IG15dGFnICYmCisJdGVzdCBgZ2l0IHRhZ2AgPSBteXRhZworJworCisjIHBhdHRlcm4gbWF0Y2hpbmc6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgYSB0YWcgdXNpbmcgYSBtYXRjaGluZyBwYXR0ZXJuIHNob3VsZCBzdWNjZWVkJyBcCisJJ2dpdCB0YWcgLWwgbXl0YWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIGEgdGFnIHVzaW5nIGEgbWF0Y2hpbmcgcGF0dGVybiBzaG91bGQgb3V0cHV0IHRoYXQgdGFnJyBcCisJJ3Rlc3QgYGdpdCB0YWcgLWwgbXl0YWdgID0gbXl0YWcnCisKKyMgdG9kbzogZ2l0IHRhZyAtbCBub3cgcmV0dXJucyBhbHdheXMgemVybywgd2hlbiBmaXhlZCwgY2hhbmdlIHRoaXMgdGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGFncyB1c2luZyBhIG5vbi1tYXRjaGluZyBwYXR0ZXJuIHNob3VsZCBzdWNlZWQnIFwKKwknZ2l0IHRhZyAtbCB4eHgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRhZ3MgdXNpbmcgYSBub24tbWF0Y2hpbmcgcGF0dGVybiBzaG91bGQgb3V0cHV0IG5vdGhpbmcnIFwKKwkndGVzdCBgZ2l0IHRhZyAtbCB4eHggfCB3YyAtbGAgLWVxIDAnCisKKyMgc3BlY2lhbCBjYXNlcyBmb3IgY3JlYXRpbmcgdGFnczoKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBjcmVhdGUgYSB0YWcgd2l0aCB0aGUgbmFtZSBvZiBvbmUgZXhpc3Rpbmcgc2hvdWxkIGZhaWwnIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyBteXRhZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBjcmVhdGUgYSB0YWcgd2l0aCBhIG5vbi12YWxpZCBuYW1lIHNob3VsZCBmYWlsJyAnCisJdGVzdCBgZ2l0IHRhZyAtbCB8IHdjIC1sYCAtZXEgMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgIiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC5vdGhlcnRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgIm90aGVyIHRhZyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnICJvdGhlcnRhZ14iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAib3RoZXJ+dGFnIiAmJgorCXRlc3QgYGdpdCB0YWcgLWwgfCB3YyAtbGAgLWVxIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgYSB0YWcgdXNpbmcgSEVBRCBkaXJlY3RseSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgbXloZWFkIEhFQUQgJiYKKwl0YWdfZXhpc3RzIG15aGVhZAorJworCisjIGRlbGV0aW5nIHRhZ3M6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyeWluZyB0byBkZWxldGUgYW4gdW5rbm93biB0YWcgc2hvdWxkIGZhaWwnICcKKwkhIHRhZ19leGlzdHMgdW5rbm93bi10YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1kIHVua25vd24tdGFnCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitteWhlYWQKK215dGFnCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0cnlpbmcgdG8gZGVsZXRlIHRhZ3Mgd2l0aG91dCBwYXJhbXMgc2hvdWxkIHN1Y2NlZWQgYW5kIGRvIG5vdGhpbmcnICcKKwlnaXQgdGFnIC1sID4gYWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1kICYmCisJZ2l0IHRhZyAtbCA+IGFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdkZWxldGluZyB0d28gZXhpc3RpbmcgdGFncyBpbiBvbmUgY29tbWFuZCBzaG91bGQgc3VjY2VlZCcgJworCXRhZ19leGlzdHMgbXl0YWcgJiYKKwl0YWdfZXhpc3RzIG15aGVhZCAmJgorCWdpdCB0YWcgLWQgbXl0YWcgbXloZWFkICYmCisJISB0YWdfZXhpc3RzIG15dGFnICYmCisJISB0YWdfZXhpc3RzIG15aGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYSB0YWcgd2l0aCB0aGUgbmFtZSBvZiBhbm90aGVyIGRlbGV0ZWQgb25lIHNob3VsZCBzdWNjZWVkJyAnCisJISB0YWdfZXhpc3RzIG15dGFnICYmCisJZ2l0IHRhZyBteXRhZyAmJgorCXRhZ19leGlzdHMgbXl0YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBkZWxldGUgdHdvIHRhZ3MsIGV4aXN0aW5nIGFuZCBub3QsIHNob3VsZCBmYWlsIGluIHRoZSAybmQnICcKKwl0YWdfZXhpc3RzIG15dGFnICYmCisJISB0YWdfZXhpc3RzIG15aGVhZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLWQgbXl0YWcgYW5vdGhlcnRhZyAmJgorCSEgdGFnX2V4aXN0cyBteXRhZyAmJgorCSEgdGFnX2V4aXN0cyBteWhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJ5aW5nIHRvIGRlbGV0ZSBhbiBhbHJlYWR5IGRlbGV0ZWQgdGFnIHNob3VsZCBmYWlsJyBcCisJJ3Rlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLWQgbXl0YWcnCisKKyMgbGlzdGluZyB2YXJpb3VzIHRhZ3Mgd2l0aCBwYXR0ZXJuIG1hdGNoaW5nOgorCitjYXQgPmV4cGVjdCA8PEVPRgorYTEKK2FhMQorY2JhCit0MjEwCit0MjExCit2MC4yLjEKK3YxLjAKK3YxLjAuMQordjEuMS4zCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgYWxsIHRhZ3Mgc2hvdWxkIHByaW50IHRoZW0gb3JkZXJlZCcgJworCWdpdCB0YWcgdjEuMC4xICYmCisJZ2l0IHRhZyB0MjExICYmCisJZ2l0IHRhZyBhYTEgJiYKKwlnaXQgdGFnIHYwLjIuMSAmJgorCWdpdCB0YWcgdjEuMS4zICYmCisJZ2l0IHRhZyBjYmEgJiYKKwlnaXQgdGFnIGExICYmCisJZ2l0IHRhZyB2MS4wICYmCisJZ2l0IHRhZyB0MjEwICYmCisJZ2l0IHRhZyAtbCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorYTEKK2FhMQorY2JhCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRhZ3Mgd2l0aCBzdWJzdHJpbmcgYXMgcGF0dGVybiBtdXN0IHByaW50IHRob3NlIG1hdGNoaW5nJyAnCisJcm0gKmEqICYmCisJZ2l0IHRhZyAtbCAiKmEqIiA+IGN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorJworCitjYXQgPmV4cGVjdCA8PEVPRgordjAuMi4xCit2MS4wLjEKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGFncyB3aXRoIGEgc3VmZml4IGFzIHBhdHRlcm4gbXVzdCBwcmludCB0aG9zZSBtYXRjaGluZycgJworCWdpdCB0YWcgLWwgIiouMSIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCit0MjEwCit0MjExCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRhZ3Mgd2l0aCBhIHByZWZpeCBhcyBwYXR0ZXJuIG11c3QgcHJpbnQgdGhvc2UgbWF0Y2hpbmcnICcKKwlnaXQgdGFnIC1sICJ0MjEqIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2ExCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRhZ3MgdXNpbmcgYSBuYW1lIGFzIHBhdHRlcm4gbXVzdCBwcmludCB0aGF0IG9uZSBtYXRjaGluZycgJworCWdpdCB0YWcgLWwgYTEgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCit2MS4wCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRhZ3MgdXNpbmcgYSBuYW1lIGFzIHBhdHRlcm4gbXVzdCBwcmludCB0aGF0IG9uZSBtYXRjaGluZycgJworCWdpdCB0YWcgLWwgdjEuMCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK3YxLjAuMQordjEuMS4zCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRhZ3Mgd2l0aCA/IGluIHRoZSBwYXR0ZXJuIHNob3VsZCBwcmludCB0aG9zZSBtYXRjaGluZycgJworCWdpdCB0YWcgLWwgInYxLj8uPyIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKz5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRhZ3MgdXNpbmcgdi4qIHNob3VsZCBwcmludCBub3RoaW5nIGJlY2F1c2Ugbm9uZSBoYXZlIHYuJyAnCisJZ2l0IHRhZyAtbCAidi4qIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK3YwLjIuMQordjEuMAordjEuMC4xCit2MS4xLjMKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGFncyB1c2luZyB2KiBzaG91bGQgcHJpbnQgb25seSB0aG9zZSBoYXZpbmcgdicgJworCWdpdCB0YWcgLWwgInYqIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIC1sIGNhbiBhY2NlcHQgbXVsdGlwbGUgcGF0dGVybnMnICcKKwlnaXQgdGFnIC1sICJ2MSoiICJ2MCoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgdGFncyBpbiBjb2x1bW4nICcKKwlDT0xVTU5TPTQwIGdpdCB0YWcgLWwgLS1jb2x1bW49cm93ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorYTEgICAgICBhYTEgICAgIGNiYSAgICAgdDIxMCAgICB0MjExCit2MC4yLjEgIHYxLjAgICAgdjEuMC4xICB2MS4xLjMKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIHRhZ3MgaW4gY29sdW1uIHdpdGggY29sdW1uLionICcKKwlnaXQgY29uZmlnIGNvbHVtbi50YWcgcm93ICYmCisJZ2l0IGNvbmZpZyBjb2x1bW4udWkgZGVuc2UgJiYKKwlDT0xVTU5TPTQwIGdpdCB0YWcgLWwgPmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb2x1bW4udWkgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sdW1uLnRhZyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCithMSAgICAgIGFhMSAgIGNiYSAgICAgdDIxMCAgICB0MjExCit2MC4yLjEgIHYxLjAgIHYxLjAuMSAgdjEuMS4zCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyB0YWcgd2l0aCAtbiAtLWNvbHVtbiBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLS1jb2x1bW4gLW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyB0YWdzIC1uIGluIGNvbHVtbiB3aXRoIGNvbHVtbi51aSBpZ25vcmVkJyAnCisJZ2l0IGNvbmZpZyBjb2x1bW4udWkgInJvdyBkZW5zZSIgJiYKKwlDT0xVTU5TPTQwIGdpdCB0YWcgLWwgLW4gPmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb2x1bW4udWkgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorYTEgICAgICAgICAgICAgIEZvbworYWExICAgICAgICAgICAgIEZvbworY2JhICAgICAgICAgICAgIEZvbwordDIxMCAgICAgICAgICAgIEZvbwordDIxMSAgICAgICAgICAgIEZvbwordjAuMi4xICAgICAgICAgIEZvbwordjEuMCAgICAgICAgICAgIEZvbwordjEuMC4xICAgICAgICAgIEZvbwordjEuMS4zICAgICAgICAgIEZvbworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKyMgY3JlYXRpbmcgYW5kIHZlcmlmeWluZyBsaWdodHdlaWdodCB0YWdzOgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknYSBub24tYW5ub3RhdGVkIHRhZyBjcmVhdGVkIHdpdGhvdXQgcGFyYW1ldGVycyBzaG91bGQgcG9pbnQgdG8gSEVBRCcgJworCWdpdCB0YWcgbm9uLWFubm90YXRlZC10YWcgJiYKKwl0ZXN0ICQoZ2l0IGNhdC1maWxlIC10IG5vbi1hbm5vdGF0ZWQtdGFnKSA9IGNvbW1pdCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIG5vbi1hbm5vdGF0ZWQtdGFnKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cnlpbmcgdG8gdmVyaWZ5IGFuIHVua25vd24gdGFnIHNob3VsZCBmYWlsJyBcCisJJ3Rlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgdW5rbm93bi10YWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0cnlpbmcgdG8gdmVyaWZ5IGEgbm9uLWFubm90YXRlZCBhbmQgbm9uLXNpZ25lZCB0YWcgc2hvdWxkIGZhaWwnIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBub24tYW5ub3RhdGVkLXRhZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byB2ZXJpZnkgbWFueSBub24tYW5ub3RhdGVkIG9yIHVua25vd24gdGFncywgc2hvdWxkIGZhaWwnIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiB1bmtub3duLXRhZzEgbm9uLWFubm90YXRlZC10YWcgdW5rbm93bi10YWcyJworCisjIGNyZWF0aW5nIGFubm90YXRlZCB0YWdzOgorCitnZXRfdGFnX21zZyAoKSB7CisJZ2l0IGNhdC1maWxlIHRhZyAiJDEiIHwgc2VkIC1lICIvQkVHSU4gUEdQL3EiCit9CisKKyMgcnVuIHRlc3RfdGljayBiZWZvcmUgY29tbWl0dGluZyBhbHdheXMgZ2l2ZXMgdGhlIHRpbWUgaW4gdGhhdCB0aW1lem9uZQorZ2V0X3RhZ19oZWFkZXIgKCkgeworY2F0IDw8RU9GCitvYmplY3QgJDIKK3R5cGUgJDMKK3RhZyAkMQordGFnZ2VyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gJDQgLTA3MDAKKworRU9GCit9CisKK2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkKK3RpbWU9JHRlc3RfdGljaworCitnZXRfdGFnX2hlYWRlciBhbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gIkEgbWVzc2FnZSIgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhbiBhbm5vdGF0ZWQgdGFnIHdpdGggLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLW0gIkEgbWVzc2FnZSIgYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5tc2dmaWxlIDw8RU9GCitBbm90aGVyIG1lc3NhZ2UKK2luIGEgZmlsZS4KK0VPRgorZ2V0X3RhZ19oZWFkZXIgZmlsZS1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2NhdCBtc2dmaWxlID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYW4gYW5ub3RhdGVkIHRhZyB3aXRoIC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtRiBtc2dmaWxlIGZpbGUtYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmlucHV0bXNnIDw8RU9GCitBIG1lc3NhZ2UgZnJvbSB0aGUKK3N0YW5kYXJkIGlucHV0CitFT0YKK2dldF90YWdfaGVhZGVyIHN0ZGluLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorY2F0IGlucHV0bXNnID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhbiBhbm5vdGF0ZWQgdGFnIHdpdGggLUYgLSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLUYgLSBzdGRpbi1hbm5vdGF0ZWQtdGFnIDxpbnB1dG1zZyAmJgorCWdldF90YWdfbXNnIHN0ZGluLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBjcmVhdGUgYSB0YWcgd2l0aCBhIG5vbi1leGlzdGluZyAtRiBmaWxlIHNob3VsZCBmYWlsJyAnCisJISB0ZXN0IC1mIG5vbmV4aXN0aW5nZmlsZSAmJgorCSEgdGFnX2V4aXN0cyBub3RhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLUYgbm9uZXhpc3RpbmdmaWxlIG5vdGFnICYmCisJISB0YWdfZXhpc3RzIG5vdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0cnlpbmcgdG8gY3JlYXRlIHRhZ3MgZ2l2aW5nIGJvdGggLW0gb3IgLUYgb3B0aW9ucyBzaG91bGQgZmFpbCcgJworCWVjaG8gIm1lc3NhZ2UgZmlsZSAxIiA+bXNnZmlsZTEgJiYKKwllY2hvICJtZXNzYWdlIGZpbGUgMiIgPm1zZ2ZpbGUyICYmCisJISB0YWdfZXhpc3RzIG1zZ3RhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLW0gIm1lc3NhZ2UgMSIgLUYgbXNnZmlsZTEgbXNndGFnICYmCisJISB0YWdfZXhpc3RzIG1zZ3RhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLUYgbXNnZmlsZTEgLW0gIm1lc3NhZ2UgMSIgbXNndGFnICYmCisJISB0YWdfZXhpc3RzIG1zZ3RhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLW0gIm1lc3NhZ2UgMSIgLUYgbXNnZmlsZTEgXAorCQktbSAibWVzc2FnZSAyIiBtc2d0YWcgJiYKKwkhIHRhZ19leGlzdHMgbXNndGFnCisnCisKKyMgYmxhbmsgYW5kIGVtcHR5IG1lc3NhZ2VzOgorCitnZXRfdGFnX2hlYWRlciBlbXB0eS1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB3aXRoIGFuIGVtcHR5IC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1tICIiIGVtcHR5LWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBlbXB0eS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKz5lbXB0eWZpbGUKK2dldF90YWdfaGVhZGVyIGVtcHR5ZmlsZS1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB3aXRoIGFuIGVtcHR5IC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtRiBlbXB0eWZpbGUgZW1wdHlmaWxlLWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBlbXB0eWZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitwcmludGYgJ1xuXG4gIFxuXHRcbkxlYWRpbmcgYmxhbmsgbGluZXNcbicgPmJsYW5rc2ZpbGUKK3ByaW50ZiAnXG5cdCBcdCAgXG5SZXBlYXRlZCBibGFuayBsaW5lc1xuJyA+PmJsYW5rc2ZpbGUKK3ByaW50ZiAnXG5cblxuVHJhaWxpbmcgc3BhY2VzICAgICAgXHQgIFxuJyA+PmJsYW5rc2ZpbGUKK3ByaW50ZiAnXG5UcmFpbGluZyBibGFuayBsaW5lc1xuXG5cdCBcblxuJyA+PmJsYW5rc2ZpbGUKK2dldF90YWdfaGVhZGVyIGJsYW5rcy1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2NhdCA+PmV4cGVjdCA8PEVPRgorTGVhZGluZyBibGFuayBsaW5lcworCitSZXBlYXRlZCBibGFuayBsaW5lcworCitUcmFpbGluZyBzcGFjZXMKKworVHJhaWxpbmcgYmxhbmsgbGluZXMKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2V4dHJhIGJsYW5rcyBpbiB0aGUgbWVzc2FnZSBmb3IgYW4gYW5ub3RhdGVkIHRhZyBzaG91bGQgYmUgcmVtb3ZlZCcgJworCWdpdCB0YWcgLUYgYmxhbmtzZmlsZSBibGFua3MtYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGJsYW5rcy1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dldF90YWdfaGVhZGVyIGJsYW5rLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGEgdGFnIHdpdGggYmxhbmsgLW0gbWVzc2FnZSB3aXRoIHNwYWNlcyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLW0gIiAgICAgIiBibGFuay1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgYmxhbmstYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitlY2hvICcgICAgICcgPmJsYW5rZmlsZQorZWNobyAnJyAgICAgID4+YmxhbmtmaWxlCitlY2hvICcgICcgICAgPj5ibGFua2ZpbGUKK2dldF90YWdfaGVhZGVyIGJsYW5rZmlsZS1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB3aXRoIGJsYW5rIC1GIG1lc3NhZ2VmaWxlIHdpdGggc3BhY2VzIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtRiBibGFua2ZpbGUgYmxhbmtmaWxlLWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBibGFua2ZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitwcmludGYgJyAgICAgICcgPmJsYW5rbm9ubGZpbGUKK2dldF90YWdfaGVhZGVyIGJsYW5rbm9ubGZpbGUtYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYSB0YWcgd2l0aCAtRiBmaWxlIG9mIHNwYWNlcyBhbmQgbm8gbmV3bGluZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLUYgYmxhbmtub25sZmlsZSBibGFua25vbmxmaWxlLWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBibGFua25vbmxmaWxlLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBtZXNzYWdlcyB3aXRoIGNvbW1lbnRlZCBsaW5lczoKKworY2F0ID5jb21tZW50c2ZpbGUgPDxFT0YKKyMgQSBjb21tZW50CisKKyMjIyMjIyMjIyMjIworVGhlIG1lc3NhZ2UuCisjIyMjIyMjIyMjIyMKK09uZSBsaW5lLgorCisKKyMgY29tbWVudGVkIGxpbmVzCisjIGNvbW1lbnRlZCBsaW5lcworCitBbm90aGVyIGxpbmUuCisjIGNvbW1lbnRzCisKK0xhc3QgbGluZS4KK0VPRgorZ2V0X3RhZ19oZWFkZXIgY29tbWVudHMtYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitjYXQgPj5leHBlY3QgPDxFT0YKK1RoZSBtZXNzYWdlLgorT25lIGxpbmUuCisKK0Fub3RoZXIgbGluZS4KKworTGFzdCBsaW5lLgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYSB0YWcgdXNpbmcgYSAtRiBtZXNzYWdlZmlsZSB3aXRoICNjb21tZW50cyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLUYgY29tbWVudHNmaWxlIGNvbW1lbnRzLWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBjb21tZW50cy1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dldF90YWdfaGVhZGVyIGNvbW1lbnQtYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYSB0YWcgd2l0aCBhICNjb21tZW50IGluIHRoZSAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtbSAiI2NvbW1lbnQiIGNvbW1lbnQtYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGNvbW1lbnQtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitlY2hvICcjY29tbWVudCcgPmNvbW1lbnRmaWxlCitlY2hvICcnICAgICAgICAgPj5jb21tZW50ZmlsZQorZWNobyAnIyMjIycgICAgID4+Y29tbWVudGZpbGUKK2dldF90YWdfaGVhZGVyIGNvbW1lbnRmaWxlLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGEgdGFnIHdpdGggI2NvbW1lbnRzIGluIHRoZSAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLUYgY29tbWVudGZpbGUgY29tbWVudGZpbGUtYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGNvbW1lbnRmaWxlLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworcHJpbnRmICcjY29tbWVudCcgPmNvbW1lbnRub25sZmlsZQorZ2V0X3RhZ19oZWFkZXIgY29tbWVudG5vbmxmaWxlLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGEgdGFnIHdpdGggYSBmaWxlIG9mICNjb21tZW50IGFuZCBubyBuZXdsaW5lIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtRiBjb21tZW50bm9ubGZpbGUgY29tbWVudG5vbmxmaWxlLWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBjb21tZW50bm9ubGZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIGxpc3RpbmcgbWVzc2FnZXMgZm9yIGFubm90YXRlZCBub24tc2lnbmVkIHRhZ3M6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRoZSBvbmUtbGluZSBtZXNzYWdlIG9mIGEgbm9uLXNpZ25lZCB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1tICJBIG1zZyIgdGFnLW9uZS1saW5lICYmCisKKwllY2hvICJ0YWctb25lLWxpbmUiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1sIHwgZ3JlcCAiXnRhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCB8IGdyZXAgIl50YWctb25lLWxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJ0YWctb25lLWxpbmUgICAgQSBtc2ciID5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMSAtbCB8IGdyZXAgIl50YWctb25lLWxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbiAtbCB8IGdyZXAgIl50YWctb25lLWxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjEgLWwgdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjIgLWwgdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjk5OSAtbCB0YWctb25lLWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGhlIHplcm8tbGluZXMgbWVzc2FnZSBvZiBhIG5vbi1zaWduZWQgdGFnIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtbSAiIiB0YWctemVyby1saW5lcyAmJgorCisJZWNobyAidGFnLXplcm8tbGluZXMiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1sIHwgZ3JlcCAiXnRhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHwgZ3JlcCAiXnRhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHRhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJ0YWctemVyby1saW5lcyAgIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjEgLWwgfCBncmVwICJedGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbiAtbCB8IGdyZXAgIl50YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMSAtbCB0YWctemVyby1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4yIC1sIHRhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjk5OSAtbCB0YWctemVyby1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitlY2hvICd0YWcgbGluZSBvbmUnID5hbm5vdGFnbXNnCitlY2hvICd0YWcgbGluZSB0d28nID4+YW5ub3RhZ21zZworZWNobyAndGFnIGxpbmUgdGhyZWUnID4+YW5ub3RhZ21zZwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgbWFueSBtZXNzYWdlIGxpbmVzIG9mIGEgbm9uLXNpZ25lZCB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1GIGFubm90YWdtc2cgdGFnLWxpbmVzICYmCisKKwllY2hvICJ0YWctbGluZXMiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1sIHwgZ3JlcCAiXnRhZy1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCB8IGdyZXAgIl50YWctbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJ0YWctbGluZXMgICAgICAgdGFnIGxpbmUgb25lIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjEgLWwgfCBncmVwICJedGFnLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4gLWwgfCBncmVwICJedGFnLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4xIC1sIHRhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAiICAgIHRhZyBsaW5lIHR3byIgPj5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMiAtbCB8IGdyZXAgIl4gKnRhZy5saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4yIC1sIHRhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAiICAgIHRhZyBsaW5lIHRocmVlIiA+PmV4cGVjdCAmJgorCWdpdCB0YWcgLW4zIC1sIHwgZ3JlcCAiXiAqdGFnLmxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjMgLWwgdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjQgLWwgfCBncmVwICJeICp0YWcubGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uNCAtbCB0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uOTkgLWwgfCBncmVwICJeICp0YWcubGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uOTkgLWwgdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fubm90YXRpb25zIGZvciBibG9icyBhcmUgZW1wdHknICcKKwlibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gPDwtXEVPRgorCUJsb2IgcGFyYWdyYXBoIDEuCisKKwlCbG9iIHBhcmFncmFwaCAyLgorCUVPRgorCSkgJiYKKwlnaXQgdGFnIHRhZy1ibG9iICRibG9iICYmCisJZWNobyAidGFnLWJsb2IgICAgICAgICIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLW4xIC1sIHRhZy1ibG9iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgdHJ5aW5nIHRvIHZlcmlmeSBhbm5vdGF0ZWQgbm9uLXNpZ25lZCB0YWdzOgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ3RyeWluZyB0byB2ZXJpZnkgYW4gYW5ub3RhdGVkIG5vbi1zaWduZWQgdGFnIHNob3VsZCBmYWlsJyAnCisJdGFnX2V4aXN0cyBhbm5vdGF0ZWQtdGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBhbm5vdGF0ZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwkndHJ5aW5nIHRvIHZlcmlmeSBhIGZpbGUtYW5ub3RhdGVkIG5vbi1zaWduZWQgdGFnIHNob3VsZCBmYWlsJyAnCisJdGFnX2V4aXN0cyBmaWxlLWFubm90YXRlZC10YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IGZpbGUtYW5ub3RhdGVkLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ3RyeWluZyB0byB2ZXJpZnkgdHdvIGFubm90YXRlZCBub24tc2lnbmVkIHRhZ3Mgc2hvdWxkIGZhaWwnICcKKwl0YWdfZXhpc3RzIGFubm90YXRlZC10YWcgZmlsZS1hbm5vdGF0ZWQtdGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBhbm5vdGF0ZWQtdGFnIGZpbGUtYW5ub3RhdGVkLXRhZworJworCisjIGNyZWF0aW5nIGFuZCB2ZXJpZnlpbmcgc2lnbmVkIHRhZ3M6CisKK2dldF90YWdfaGVhZGVyIHNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAnQSBzaWduZWQgdGFnIG1lc3NhZ2UnID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtbSAiQSBzaWduZWQgdGFnIG1lc3NhZ2UiIHNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBzaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dldF90YWdfaGVhZGVyIHUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICdBbm90aGVyIG1lc3NhZ2UnID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaWduIHdpdGggYSBnaXZlbiBrZXkgaWQnICcKKworCWdpdCB0YWcgLXUgY29tbWl0dGVyQGV4YW1wbGUuY29tIC1tICJBbm90aGVyIG1lc3NhZ2UiIHUtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIHUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaWduIHdpdGggYW4gdW5rbm93biBpZCAoMSknICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXUgYXV0aG9yQGV4YW1wbGUuY29tIFwKKwkJLW0gIkFub3RoZXIgbWVzc2FnZSIgby1zaWduZWQtdGFnCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3NpZ24gd2l0aCBhbiB1bmtub3duIGlkICgyKScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdSBERUFEQkVFRiAtbSAiQW5vdGhlciBtZXNzYWdlIiBvLXNpZ25lZC10YWcKKworJworCitjYXQgPmZha2VlZGl0b3IgPDwnRU9GJworIyEvYmluL3NoCit0ZXN0IC1uICIkMSIgJiYgZXhlYyA+IiQxIgorZWNobyBBIHNpZ25lZCB0YWcgbWVzc2FnZQorZWNobyBmcm9tIGEgZmFrZSBlZGl0b3IuCitFT0YKK2NobW9kICt4IGZha2VlZGl0b3IKKworZ2V0X3RhZ19oZWFkZXIgaW1wbGllZC1zaWduICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKKy4vZmFrZWVkaXRvciA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnLXUgaW1wbGllcyBzaWduZWQgdGFnJyAnCisJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHRhZyAtdSBDRERFNDMwRCBpbXBsaWVkLXNpZ24gJiYKKwlnZXRfdGFnX21zZyBpbXBsaWVkLXNpZ24gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5zaWdtc2dmaWxlIDw8RU9GCitBbm90aGVyIHNpZ25lZCB0YWcKK21lc3NhZ2UgaW4gYSBmaWxlLgorRU9GCitnZXRfdGFnX2hlYWRlciBmaWxlLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorY2F0IHNpZ21zZ2ZpbGUgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLUYgc2lnbXNnZmlsZSBmaWxlLXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBmaWxlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5zaWdpbnB1dG1zZyA8PEVPRgorQSBzaWduZWQgdGFnIG1lc3NhZ2UgZnJvbQordGhlIHN0YW5kYXJkIGlucHV0CitFT0YKK2dldF90YWdfaGVhZGVyIHN0ZGluLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorY2F0IHNpZ2lucHV0bXNnID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAtRiAtIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtRiAtIHN0ZGluLXNpZ25lZC10YWcgPHNpZ2lucHV0bXNnICYmCisJZ2V0X3RhZ19tc2cgc3RkaW4tc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitnZXRfdGFnX2hlYWRlciBpbXBsaWVkLWFubm90YXRlICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKKy4vZmFrZWVkaXRvciA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnLXMgaW1wbGllcyBhbm5vdGF0ZWQgdGFnJyAnCisJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHRhZyAtcyBpbXBsaWVkLWFubm90YXRlICYmCisJZ2V0X3RhZ19tc2cgaW1wbGllZC1hbm5vdGF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ3RyeWluZyB0byBjcmVhdGUgYSBzaWduZWQgdGFnIHdpdGggbm9uLWV4aXN0aW5nIC1GIGZpbGUgc2hvdWxkIGZhaWwnICcKKwkhIHRlc3QgLWYgbm9uZXhpc3RpbmdmaWxlICYmCisJISB0YWdfZXhpc3RzIG5vc2lndGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtcyAtRiBub25leGlzdGluZ2ZpbGUgbm9zaWd0YWcgJiYKKwkhIHRhZ19leGlzdHMgbm9zaWd0YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeWluZyBhIHNpZ25lZCB0YWcgc2hvdWxkIHN1Y2NlZWQnIFwKKwknZ2l0IHRhZyAtdiBzaWduZWQtdGFnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5aW5nIHR3byBzaWduZWQgdGFncyBpbiBvbmUgY29tbWFuZCBzaG91bGQgc3VjY2VlZCcgXAorCSdnaXQgdGFnIC12IHNpZ25lZC10YWcgZmlsZS1zaWduZWQtdGFnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ3ZlcmlmeWluZyBtYW55IHNpZ25lZCBhbmQgbm9uLXNpZ25lZCB0YWdzIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBzaWduZWQtdGFnIGFubm90YXRlZC10YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IGZpbGUtYW5ub3RhdGVkLXRhZyBmaWxlLXNpZ25lZC10YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IGFubm90YXRlZC10YWcgXAorCQlmaWxlLXNpZ25lZC10YWcgZmlsZS1hbm5vdGF0ZWQtdGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBzaWduZWQtdGFnIGFubm90YXRlZC10YWcgZmlsZS1zaWduZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnlpbmcgYSBmb3JnZWQgdGFnIHNob3VsZCBmYWlsJyAnCisJZm9yZ2VkPSQoZ2l0IGNhdC1maWxlIHRhZyBzaWduZWQtdGFnIHwKKwkJc2VkIC1lICJzL3NpZ25lZC10YWcvZm9yZ2VkLXRhZy8iIHwKKwkJZ2l0IG1rdGFnKSAmJgorCWdpdCB0YWcgZm9yZ2VkLXRhZyAkZm9yZ2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBmb3JnZWQtdGFnCisnCisKKyMgYmxhbmsgYW5kIGVtcHR5IG1lc3NhZ2VzIGZvciBzaWduZWQgdGFnczoKKworZ2V0X3RhZ19oZWFkZXIgZW1wdHktc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYW4gZW1wdHkgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLW0gIiIgZW1wdHktc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGVtcHR5LXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC12IGVtcHR5LXNpZ25lZC10YWcKKycKKworPnNpZ2VtcHR5ZmlsZQorZ2V0X3RhZ19oZWFkZXIgZW1wdHlmaWxlLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGFuIGVtcHR5IC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtRiBzaWdlbXB0eWZpbGUgZW1wdHlmaWxlLXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBlbXB0eWZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgZW1wdHlmaWxlLXNpZ25lZC10YWcKKycKKworcHJpbnRmICdcblxuICBcblx0XG5MZWFkaW5nIGJsYW5rIGxpbmVzXG4nID4gc2lnYmxhbmtzZmlsZQorcHJpbnRmICdcblx0IFx0ICBcblJlcGVhdGVkIGJsYW5rIGxpbmVzXG4nID4+c2lnYmxhbmtzZmlsZQorcHJpbnRmICdcblxuXG5UcmFpbGluZyBzcGFjZXMgICAgICBcdCAgXG4nID4+c2lnYmxhbmtzZmlsZQorcHJpbnRmICdcblRyYWlsaW5nIGJsYW5rIGxpbmVzXG5cblx0IFxuXG4nID4+c2lnYmxhbmtzZmlsZQorZ2V0X3RhZ19oZWFkZXIgYmxhbmtzLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorY2F0ID4+ZXhwZWN0IDw8RU9GCitMZWFkaW5nIGJsYW5rIGxpbmVzCisKK1JlcGVhdGVkIGJsYW5rIGxpbmVzCisKK1RyYWlsaW5nIHNwYWNlcworCitUcmFpbGluZyBibGFuayBsaW5lcworRU9GCitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknZXh0cmEgYmxhbmtzIGluIHRoZSBtZXNzYWdlIGZvciBhIHNpZ25lZCB0YWcgc2hvdWxkIGJlIHJlbW92ZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ2JsYW5rc2ZpbGUgYmxhbmtzLXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBibGFua3Mtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgYmxhbmtzLXNpZ25lZC10YWcKKycKKworZ2V0X3RhZ19oZWFkZXIgYmxhbmstc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYSBibGFuayAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtbSAiICAgICAiIGJsYW5rLXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBibGFuay1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBibGFuay1zaWduZWQtdGFnCisnCisKK2VjaG8gJyAgICAgJyA+c2lnYmxhbmtmaWxlCitlY2hvICcnICAgICAgPj5zaWdibGFua2ZpbGUKK2VjaG8gJyAgJyAgICA+PnNpZ2JsYW5rZmlsZQorZ2V0X3RhZ19oZWFkZXIgYmxhbmtmaWxlLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGJsYW5rIC1GIGZpbGUgd2l0aCBzcGFjZXMgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ2JsYW5rZmlsZSBibGFua2ZpbGUtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGJsYW5rZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBibGFua2ZpbGUtc2lnbmVkLXRhZworJworCitwcmludGYgJyAgICAgICcgPnNpZ2JsYW5rbm9ubGZpbGUKK2dldF90YWdfaGVhZGVyIGJsYW5rbm9ubGZpbGUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggc3BhY2VzIGFuZCBubyBuZXdsaW5lIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtRiBzaWdibGFua25vbmxmaWxlIGJsYW5rbm9ubGZpbGUtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGJsYW5rbm9ubGZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgc2lnbmVkLXRhZworJworCisjIG1lc3NhZ2VzIHdpdGggY29tbWVudGVkIGxpbmVzIGZvciBzaWduZWQgdGFnczoKKworY2F0ID5zaWdjb21tZW50c2ZpbGUgPDxFT0YKKyMgQSBjb21tZW50CisKKyMjIyMjIyMjIyMjIworVGhlIG1lc3NhZ2UuCisjIyMjIyMjIyMjIyMKK09uZSBsaW5lLgorCisKKyMgY29tbWVudGVkIGxpbmVzCisjIGNvbW1lbnRlZCBsaW5lcworCitBbm90aGVyIGxpbmUuCisjIGNvbW1lbnRzCisKK0xhc3QgbGluZS4KK0VPRgorZ2V0X3RhZ19oZWFkZXIgY29tbWVudHMtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitjYXQgPj5leHBlY3QgPDxFT0YKK1RoZSBtZXNzYWdlLgorT25lIGxpbmUuCisKK0Fub3RoZXIgbGluZS4KKworTGFzdCBsaW5lLgorRU9GCitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYSAtRiBmaWxlIHdpdGggI2NvbW1lbnRzIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtRiBzaWdjb21tZW50c2ZpbGUgY29tbWVudHMtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGNvbW1lbnRzLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC12IGNvbW1lbnRzLXNpZ25lZC10YWcKKycKKworZ2V0X3RhZ19oZWFkZXIgY29tbWVudC1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAjY29tbWVudGVkIC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1tICIjY29tbWVudCIgY29tbWVudC1zaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgY29tbWVudC1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBjb21tZW50LXNpZ25lZC10YWcKKycKKworZWNobyAnI2NvbW1lbnQnID5zaWdjb21tZW50ZmlsZQorZWNobyAnJyAgICAgICAgID4+c2lnY29tbWVudGZpbGUKK2VjaG8gJyMjIyMnICAgICA+PnNpZ2NvbW1lbnRmaWxlCitnZXRfdGFnX2hlYWRlciBjb21tZW50ZmlsZS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAjY29tbWVudGVkIC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtRiBzaWdjb21tZW50ZmlsZSBjb21tZW50ZmlsZS1zaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgY29tbWVudGZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgY29tbWVudGZpbGUtc2lnbmVkLXRhZworJworCitwcmludGYgJyNjb21tZW50JyA+c2lnY29tbWVudG5vbmxmaWxlCitnZXRfdGFnX2hlYWRlciBjb21tZW50bm9ubGZpbGUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYSAjY29tbWVudCBhbmQgbm8gbmV3bGluZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLUYgc2lnY29tbWVudG5vbmxmaWxlIGNvbW1lbnRub25sZmlsZS1zaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgY29tbWVudG5vbmxmaWxlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC12IGNvbW1lbnRub25sZmlsZS1zaWduZWQtdGFnCisnCisKKyMgbGlzdGluZyBtZXNzYWdlcyBmb3Igc2lnbmVkIHRhZ3M6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknbGlzdGluZyB0aGUgb25lLWxpbmUgbWVzc2FnZSBvZiBhIHNpZ25lZCB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1tICJBIG1lc3NhZ2UgbGluZSBzaWduZWQiIHN0YWctb25lLWxpbmUgJiYKKworCWVjaG8gInN0YWctb25lLWxpbmUiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1sIHwgZ3JlcCAiXnN0YWctb25lLWxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgfCBncmVwICJec3RhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCBzdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJzdGFnLW9uZS1saW5lICAgQSBtZXNzYWdlIGxpbmUgc2lnbmVkIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjEgLWwgfCBncmVwICJec3RhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uIC1sIHwgZ3JlcCAiXnN0YWctb25lLWxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjEgLWwgc3RhZy1vbmUtbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4yIC1sIHN0YWctb25lLWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uOTk5IC1sIHN0YWctb25lLWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdsaXN0aW5nIHRoZSB6ZXJvLWxpbmVzIG1lc3NhZ2Ugb2YgYSBzaWduZWQgdGFnIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtbSAiIiBzdGFnLXplcm8tbGluZXMgJiYKKworCWVjaG8gInN0YWctemVyby1saW5lcyIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWwgfCBncmVwICJec3RhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHwgZ3JlcCAiXnN0YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCBzdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gInN0YWctemVyby1saW5lcyAiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMSAtbCB8IGdyZXAgIl5zdGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbiAtbCB8IGdyZXAgIl5zdGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjEgLWwgc3RhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjIgLWwgc3RhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjk5OSAtbCBzdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZWNobyAnc3RhZyBsaW5lIG9uZScgPnNpZ3RhZ21zZworZWNobyAnc3RhZyBsaW5lIHR3bycgPj5zaWd0YWdtc2cKK2VjaG8gJ3N0YWcgbGluZSB0aHJlZScgPj5zaWd0YWdtc2cKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknbGlzdGluZyBtYW55IG1lc3NhZ2UgbGluZXMgb2YgYSBzaWduZWQgdGFnIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtRiBzaWd0YWdtc2cgc3RhZy1saW5lcyAmJgorCisJZWNobyAic3RhZy1saW5lcyIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWwgfCBncmVwICJec3RhZy1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCB8IGdyZXAgIl5zdGFnLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHN0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gInN0YWctbGluZXMgICAgICBzdGFnIGxpbmUgb25lIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjEgLWwgfCBncmVwICJec3RhZy1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uIC1sIHwgZ3JlcCAiXnN0YWctbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjEgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAiICAgIHN0YWcgbGluZSB0d28iID4+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjIgLWwgfCBncmVwICJeICpzdGFnLmxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjIgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAiICAgIHN0YWcgbGluZSB0aHJlZSIgPj5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMyAtbCB8IGdyZXAgIl4gKnN0YWcubGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMyAtbCBzdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjQgLWwgfCBncmVwICJeICpzdGFnLmxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjQgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW45OSAtbCB8IGdyZXAgIl4gKnN0YWcubGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uOTkgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIHRhZ3MgcG9pbnRpbmcgdG8gb2JqZWN0cyBkaWZmZXJlbnQgZnJvbSBjb21taXRzOgorCit0cmVlPSQoZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSkKK2Jsb2I9JChnaXQgcmV2LXBhcnNlIEhFQUQ6Zm9vKQordGFnPSQoZ2l0IHJldi1wYXJzZSBzaWduZWQtdGFnIDI+L2Rldi9udWxsKQorCitnZXRfdGFnX2hlYWRlciB0cmVlLXNpZ25lZC10YWcgJHRyZWUgdHJlZSAkdGltZSA+ZXhwZWN0CitlY2hvICJBIG1lc3NhZ2UgZm9yIGEgdHJlZSIgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgcG9pbnRpbmcgdG8gYSB0cmVlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtbSAiQSBtZXNzYWdlIGZvciBhIHRyZWUiIHRyZWUtc2lnbmVkLXRhZyBIRUFEXnt0cmVlfSAmJgorCWdldF90YWdfbXNnIHRyZWUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitnZXRfdGFnX2hlYWRlciBibG9iLXNpZ25lZC10YWcgJGJsb2IgYmxvYiAkdGltZSA+ZXhwZWN0CitlY2hvICJBIG1lc3NhZ2UgZm9yIGEgYmxvYiIgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgcG9pbnRpbmcgdG8gYSBibG9iIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtbSAiQSBtZXNzYWdlIGZvciBhIGJsb2IiIGJsb2Itc2lnbmVkLXRhZyBIRUFEOmZvbyAmJgorCWdldF90YWdfbXNnIGJsb2Itc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitnZXRfdGFnX2hlYWRlciB0YWctc2lnbmVkLXRhZyAkdGFnIHRhZyAkdGltZSA+ZXhwZWN0CitlY2hvICJBIG1lc3NhZ2UgZm9yIGFub3RoZXIgdGFnIiA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyBwb2ludGluZyB0byBhbm90aGVyIHRhZyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLW0gIkEgbWVzc2FnZSBmb3IgYW5vdGhlciB0YWciIHRhZy1zaWduZWQtdGFnIHNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyB0YWctc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIHVzYWdlIHdpdGggcmZjMTk5MSBzaWduYXR1cmVzCitlY2hvICJyZmMxOTkxIiA+IGdwZ2hvbWUvZ3BnLmNvbmYKK2dldF90YWdfaGVhZGVyIHJmYzE5OTEtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICJSRkMxOTkxIHNpZ25lZCB0YWciID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBNRVNTQUdFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIHJmYzE5OTEnICcKKwlnaXQgdGFnIC1zIC1tICJSRkMxOTkxIHNpZ25lZCB0YWciIHJmYzE5OTEtc2lnbmVkLXRhZyAkY29tbWl0ICYmCisJZ2V0X3RhZ19tc2cgcmZjMTk5MS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZmFrZWVkaXRvciA8PCdFT0YnCisjIS9iaW4vc2gKK2NwICIkMSIgYWN0dWFsCitFT0YKK2NobW9kICt4IGZha2VlZGl0b3IKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdyZWVkaXRpbmcgYSBzaWduZWQgdGFnIGJvZHkgb21pdHMgc2lnbmF0dXJlJyAnCisJZWNobyAiUkZDMTk5MSBzaWduZWQgdGFnIiA+ZXhwZWN0ICYmCisJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHRhZyAtZiAtcyByZmMxOTkxLXNpZ25lZC10YWcgJGNvbW1pdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSd2ZXJpZnlpbmcgcmZjMTk5MSBzaWduYXR1cmUnICcKKwlnaXQgdGFnIC12IHJmYzE5OTEtc2lnbmVkLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2xpc3QgdGFnIHdpdGggcmZjMTk5MSBzaWduYXR1cmUnICcKKwllY2hvICJyZmMxOTkxLXNpZ25lZC10YWcgUkZDMTk5MSBzaWduZWQgdGFnIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCAtbjEgcmZjMTk5MS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbCAtbjIgcmZjMTk5MS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbCAtbjk5OSByZmMxOTkxLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworcm0gLWYgZ3BnaG9tZS9ncGcuY29uZgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ3ZlcmlmeWluZyByZmMxOTkxIHNpZ25hdHVyZSB3aXRob3V0IC0tcmZjMTk5MScgJworCWdpdCB0YWcgLXYgcmZjMTk5MS1zaWduZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknbGlzdCB0YWcgd2l0aCByZmMxOTkxIHNpZ25hdHVyZSB3aXRob3V0IC0tcmZjMTk5MScgJworCWVjaG8gInJmYzE5OTEtc2lnbmVkLXRhZyBSRkMxOTkxIHNpZ25lZCB0YWciID5leHBlY3QgJiYKKwlnaXQgdGFnIC1sIC1uMSByZmMxOTkxLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1sIC1uMiByZmMxOTkxLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1sIC1uOTk5IHJmYzE5OTEtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ3JlZWRpdGluZyBhIHNpZ25lZCB0YWcgYm9keSBvbWl0cyBzaWduYXR1cmUnICcKKwllY2hvICJSRkMxOTkxIHNpZ25lZCB0YWciID5leHBlY3QgJiYKKwlHSVRfRURJVE9SPS4vZmFrZWVkaXRvciBnaXQgdGFnIC1mIC1zIHJmYzE5OTEtc2lnbmVkLXRhZyAkY29tbWl0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIHRyeSB0byBzaWduIHdpdGggYmFkIHVzZXIuc2lnbmluZ2tleQorZ2l0IGNvbmZpZyB1c2VyLnNpZ25pbmdrZXkgQm9iVGhlTW91c2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknZ2l0IHRhZyAtcyBmYWlscyBpZiBncGcgaXMgbWlzY29uZmlndXJlZCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1zIC1tIHRhaWwgdGFnLWdwZy1mYWlsdXJlJworZ2l0IGNvbmZpZyAtLXVuc2V0IHVzZXIuc2lnbmluZ2tleQorCisjIHRyeSB0byB2ZXJpZnkgd2l0aG91dCBncGc6CisKK3JtIC1yZiBncGdob21lCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ3ZlcmlmeSBzaWduZWQgdGFnIGZhaWxzIHdoZW4gcHVibGljIGtleSBpcyBub3QgcHJlc2VudCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IHNpZ25lZC10YWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdnaXQgdGFnIC1hIGZhaWxzIGlmIHRhZyBhbm5vdGF0aW9uIGlzIGVtcHR5JyAnCisJISAoR0lUX0VESVRPUj1jYXQgZ2l0IHRhZyAtYSBpbml0aWFsLWNvbW1lbnQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdtZXNzYWdlIGluIGVkaXRvciBoYXMgaW5pdGlhbCBjb21tZW50JyAnCisJISAoR0lUX0VESVRPUj1jYXQgZ2l0IHRhZyAtYSBpbml0aWFsLWNvbW1lbnQgPiBhY3R1YWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2UgaW4gZWRpdG9yIGhhcyBpbml0aWFsIGNvbW1lbnQ6IGZpcnN0IGxpbmUnICcKKwkjIGNoZWNrIHRoZSBmaXJzdCBsaW5lIC0tLSBzaG91bGQgYmUgZW1wdHkKKwllY2hvID5maXJzdC5leHBlY3QgJiYKKwlzZWQgLWUgMXEgPGFjdHVhbCA+Zmlyc3QuYWN0dWFsICYmCisJdGVzdF9pMThuY21wIGZpcnN0LmV4cGVjdCBmaXJzdC5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ21lc3NhZ2UgaW4gZWRpdG9yIGhhcyBpbml0aWFsIGNvbW1lbnQ6IHJlbWFpbmRlcicgJworCSMgcmVtb3ZlIGNvbW1lbnRlZCBsaW5lcyBmcm9tIHRoZSByZW1haW5kZXIgLS0gc2hvdWxkIGJlIGVtcHR5CisJPnJlc3QuZXhwZWN0CisJc2VkIC1lIDFkIC1lICcvXiMvZCcgPGFjdHVhbCA+cmVzdC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCByZXN0LmV4cGVjdCByZXN0LmFjdHVhbAorJworCitnZXRfdGFnX2hlYWRlciByZXVzZSAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICJBbiBhbm5vdGF0aW9uIHRvIGJlIHJldXNlZCIgPj4gZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknb3ZlcndyaXRpbmcgYW4gYW5ub3RlZCB0YWcgc2hvdWxkIHVzZSBpdHMgcHJldmlvdXMgYm9keScgJworCWdpdCB0YWcgLWEgLW0gIkFuIGFubm90YXRpb24gdG8gYmUgcmV1c2VkIiByZXVzZSAmJgorCUdJVF9FRElUT1I9dHJ1ZSBnaXQgdGFnIC1mIC1hIHJldXNlICYmCisJZ2V0X3RhZ19tc2cgcmV1c2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZW5hbWUgZm9yIHRoZSBtZXNzYWdlIGlzIHJlbGF0aXZlIHRvIGN3ZCcgJworCW1rZGlyIHN1YmRpciAmJgorCWVjaG8gIlRhZyBtZXNzYWdlIGluIHRvcCBkaXJlY3RvcnkiID5tc2dmaWxlLTUgJiYKKwllY2hvICJUYWcgbWVzc2FnZSBpbiBzdWIgZGlyZWN0b3J5IiA+c3ViZGlyL21zZ2ZpbGUtNSAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCB0YWcgLWEgLUYgbXNnZmlsZS01IHRhZy1mcm9tLXN1YmRpcgorCSkgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIHRhZy1mcm9tLXN1YmRpciB8IGdyZXAgImluIHN1YiBkaXJlY3RvcnkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGVuYW1lIGZvciB0aGUgbWVzc2FnZSBpcyByZWxhdGl2ZSB0byBjd2QnICcKKwllY2hvICJUYWcgbWVzc2FnZSBpbiBzdWIgZGlyZWN0b3J5IiA+c3ViZGlyL21zZ2ZpbGUtNiAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCB0YWcgLWEgLUYgbXNnZmlsZS02IHRhZy1mcm9tLXN1YmRpci0yCisJKSAmJgorCWdpdCBjYXQtZmlsZSB0YWcgdGFnLWZyb20tc3ViZGlyLTIgfCBncmVwICJpbiBzdWIgZGlyZWN0b3J5IgorJworCisjIGNyZWF0ZSBhIGZldyBtb3JlIGNvbW1pdHMgdG8gdGVzdCAtLWNvbnRhaW5zCisKK2hhc2gxPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBzZWNvbmQgY29tbWl0IGFuZCB0YWcnICcKKwllY2hvIGZvby0yLjAgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwlnaXQgdGFnIHYyLjAKKycKKworaGFzaDI9JChnaXQgcmV2LXBhcnNlIEhFQUQpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIHRoaXJkIGNvbW1pdCB3aXRob3V0IHRhZycgJworCWVjaG8gZm9vLWRldiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkCisnCisKK2hhc2gzPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCisjIHNpbXBsZSBsaW5lYXIgY2hlY2tzIG9mIC0tY29udGludWUKKworY2F0ID4gZXhwZWN0ZWQgPDxFT0YKK3YwLjIuMQordjEuMAordjEuMC4xCit2MS4xLjMKK3YyLjAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IGZpcnN0IGNvbW1pdCBpcyBpbiBhbGwgdGFncyAoaGFzaCknICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgJGhhc2gxIHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworIyBvdGhlciB3YXlzIG9mIHNwZWNpZnlpbmcgdGhlIGNvbW1pdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBmaXJzdCBjb21taXQgaXMgaW4gYWxsIHRhZ3MgKHRhZyknICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgdjEuMCB2KiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgZmlyc3QgY29tbWl0IGlzIGluIGFsbCB0YWdzIChyZWxhdGl2ZSknICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgSEVBRH4yIHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY2F0ID4gZXhwZWN0ZWQgPDxFT0YKK3YyLjAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IHNlY29uZCBjb21taXQgb25seSBoYXMgb25lIHRhZycgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyAkaGFzaDIgdiogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCisKK2NhdCA+IGV4cGVjdGVkIDw8RU9GCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCB0aGlyZCBjb21taXQgaGFzIG5vIHRhZ3MnICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgJGhhc2gzIHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworIyBob3cgYWJvdXQgYSBzaW1wbGUgbWVyZ2U/CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIHNpbXBsZSBicmFuY2gnICcKKwlnaXQgYnJhbmNoIHN0YWJsZSB2Mi4wICYmCisgICAgICAgIGdpdCBjaGVja291dCBzdGFibGUgJiYKKwllY2hvIGZvby0zLjAgPiBmb28gJiYKKwlnaXQgY29tbWl0IGZvbyAtbSBmb3VydGggJiYKKwlnaXQgdGFnIHYzLjAKKycKKworaGFzaDQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpCisKK2NhdCA+IGV4cGVjdGVkIDw8RU9GCit2My4wCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBicmFuY2ggaGVhZCBvbmx5IGhhcyBvbmUgdGFnJyAiCisJZ2l0IHRhZyAtbCAtLWNvbnRhaW5zICRoYXNoNCB2KiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdpbmcgb3JpZ2luYWwgYnJhbmNoIGludG8gdGhpcyBicmFuY2gnICcKKwlnaXQgbWVyZ2UgLS1zdHJhdGVneT1vdXJzIG1hc3RlciAmJgorICAgICAgICBnaXQgdGFnIHY0LjAKKycKKworY2F0ID4gZXhwZWN0ZWQgPDxFT0YKK3Y0LjAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IG9yaWdpbmFsIGJyYW5jaCBoZWFkIGhhcyBvbmUgdGFnIG5vdycgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyAkaGFzaDMgdiogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCitjYXQgPiBleHBlY3RlZCA8PEVPRgordjAuMi4xCit2MS4wCit2MS4wLjEKK3YxLjEuMwordjIuMAordjMuMAordjQuMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgaW5pdGlhbCBjb21taXQgaXMgaW4gYWxsIHRhZ3MnICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgJGhhc2gxIHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworIyBtaXhpbmcgbW9kZXMgYW5kIG9wdGlvbnM6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peGluZyBpbmNvbXBhdGlibGVzIG1vZGVzIGFuZCBvcHRpb25zIGlzIGZvcmJpZGRlbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLWEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1sIC12ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbiAxMDAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1sIC1tIG1zZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLWwgLUYgc29tZSBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiAtcworJworCisjIGNoZWNrIHBvaW50cy1hdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBvaW50cy1hdCBjYW5ub3QgYmUgdXNlZCBpbiBub24tbGlzdCBtb2RlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLXBvaW50cy1hdD12NC4wIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBvaW50cy1hdCBmaW5kcyBsaWdodHdlaWdodCB0YWdzJyAnCisJZWNobyB2NC4wID5leHBlY3QgJiYKKwlnaXQgdGFnIC0tcG9pbnRzLWF0IHY0LjAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wb2ludHMtYXQgZmluZHMgYW5ub3RhdGVkIHRhZ3Mgb2YgY29tbWl0cycgJworCWdpdCB0YWcgLW0gInY0LjAsIGFubm90YXRlZCIgYW5ub3RhdGVkLXY0LjAgdjQuMCAmJgorCWVjaG8gYW5ub3RhdGVkLXY0LjAgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWwgLS1wb2ludHMtYXQgdjQuMCAiYW5ub3RhdGVkKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wb2ludHMtYXQgZmluZHMgYW5ub3RhdGVkIHRhZ3Mgb2YgdGFncycgJworCWdpdCB0YWcgLW0gImRlc2NyaWJpbmcgdGhlIHY0LjAgdGFnIG9iamVjdCIgXAorCQlhbm5vdGF0ZWQtYWdhaW4tdjQuMCBhbm5vdGF0ZWQtdjQuMCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlhbm5vdGF0ZWQtYWdhaW4tdjQuMAorCWFubm90YXRlZC12NC4wCisJRU9GCisJZ2l0IHRhZyAtLXBvaW50cy1hdD1hbm5vdGF0ZWQtdjQuMCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSAtLXBvaW50cy1hdCBhcmUgT1ItZWQgdG9nZXRoZXInICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJdjIuMAorCXYzLjAKKwlFT0YKKwlnaXQgdGFnIC0tcG9pbnRzLWF0PXYyLjAgLS1wb2ludHMtYXQ9djMuMCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDUtZWRpdG9yLnNoIGIvdC90NzAwNS1lZGl0b3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWI1MzBiNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMDUtZWRpdG9yLnNoCkBAIC0wLDAgKzEsMTM3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nR0lUX0VESVRPUiwgY29yZS5lZGl0b3IsIGFuZCBzdHVmZicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Vuc2V0IEVESVRPUiBWSVNVQUwgR0lUX0VESVRPUgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlcm1pbmUgZGVmYXVsdCBlZGl0b3InICcKKworCXZpPSQoVEVSTT12dDEwMCBnaXQgdmFyIEdJVF9FRElUT1IpICYmCisJdGVzdCAtbiAiJHZpIgorCisnCisKK2lmICEgZXhwciAiJHZpIiA6ICdbYS16XSokJyA+L2Rldi9udWxsCit0aGVuCisJdmk9CitmaQorCitmb3IgaSBpbiBHSVRfRURJVE9SIGNvcmVfZWRpdG9yIEVESVRPUiBWSVNVQUwgJHZpCitkbworCWNhdCA+ZS0kaS5zaCA8PC1FT0YKKwkjISRTSEVMTF9QQVRICisJZWNobyAiRWRpdGVkIGJ5ICRpIiA+IlwkMSIKKwlFT0YKKwljaG1vZCAreCBlLSRpLnNoCitkb25lCisKK2lmICEgdGVzdCAteiAiJHZpIgordGhlbgorCW12IGUtJHZpLnNoICR2aQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwltc2c9IkhhbmQtZWRpdGVkIiAmJgorCXRlc3RfY29tbWl0ICIkbXNnIiAmJgorCWVjaG8gIiRtc2ciID5leHBlY3QgJiYKKwlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3QKKworJworCitURVJNPWR1bWIKK2V4cG9ydCBURVJNCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkdW1iIHNob3VsZCBlcnJvciBvdXQgd2hlbiBmYWxsaW5nIGJhY2sgb24gdmknICcKKworCWlmIGdpdCBjb21taXQgLS1hbWVuZAorCXRoZW4KKwkJZWNobyAiT29wcz8iCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHVtYiBzaG91bGQgcHJlZmVyIEVESVRPUiB0byBWSVNVQUwnICcKKworCUVESVRPUj0uL2UtRURJVE9SLnNoICYmCisJVklTVUFMPS4vZS1WSVNVQUwuc2ggJiYKKwlleHBvcnQgRURJVE9SIFZJU1VBTCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAmJgorCXRlc3QgIiQoZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXMpIiA9ICJFZGl0ZWQgYnkgRURJVE9SIgorCisnCisKK1RFUk09dnQxMDAKK2V4cG9ydCBURVJNCitmb3IgaSBpbiAkdmkgRURJVE9SIFZJU1VBTCBjb3JlX2VkaXRvciBHSVRfRURJVE9SCitkbworCWVjaG8gIkVkaXRlZCBieSAkaSIgPmV4cGVjdAorCXVuc2V0IEVESVRPUiBWSVNVQUwgR0lUX0VESVRPUgorCWdpdCBjb25maWcgLS11bnNldC1hbGwgY29yZS5lZGl0b3IKKwljYXNlICIkaSIgaW4KKwljb3JlX2VkaXRvcikKKwkJZ2l0IGNvbmZpZyBjb3JlLmVkaXRvciAuL2UtY29yZV9lZGl0b3Iuc2gKKwkJOzsKKwlbQS1aXSopCisJCWV2YWwgIiRpPS4vZS0kaS5zaCIKKwkJZXhwb3J0ICRpCisJCTs7CisJZXNhYworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlVzaW5nICRpIiAnCisJCWdpdCAtLWV4ZWMtcGF0aD0uIGNvbW1pdCAtLWFtZW5kICYmCisJCWdpdCBzaG93IC1zIC0tcHJldHR5PW9uZWxpbmUgfAorCQlzZWQgLWUgInMvXlswLTlhLWZdKiAvLyIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0CisJJworZG9uZQorCit1bnNldCBFRElUT1IgVklTVUFMIEdJVF9FRElUT1IKK2dpdCBjb25maWcgLS11bnNldC1hbGwgY29yZS5lZGl0b3IKK2ZvciBpIGluICR2aSBFRElUT1IgVklTVUFMIGNvcmVfZWRpdG9yIEdJVF9FRElUT1IKK2RvCisJZWNobyAiRWRpdGVkIGJ5ICRpIiA+ZXhwZWN0CisJY2FzZSAiJGkiIGluCisJY29yZV9lZGl0b3IpCisJCWdpdCBjb25maWcgY29yZS5lZGl0b3IgLi9lLWNvcmVfZWRpdG9yLnNoCisJCTs7CisJW0EtWl0qKQorCQlldmFsICIkaT0uL2UtJGkuc2giCisJCWV4cG9ydCAkaQorCQk7OworCWVzYWMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJVc2luZyAkaSAob3ZlcnJpZGUpIiAnCisJCWdpdCAtLWV4ZWMtcGF0aD0uIGNvbW1pdCAtLWFtZW5kICYmCisJCWdpdCBzaG93IC1zIC0tcHJldHR5PW9uZWxpbmUgfAorCQlzZWQgLWUgInMvXlswLTlhLWZdKiAvLyIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0CisJJworZG9uZQorCitpZiBlY2hvICdlY2hvIHNwYWNlID4gIiQxIicgPiAiZSBzcGFjZS5zaCIKK3RoZW4KKwkjIEZTIHN1cHBvcnRzIHNwYWNlcyBpbiBmaWxlbmFtZXMKKwl0ZXN0X3NldF9wcmVyZXEgU1BBQ0VTX0lOX0ZJTEVOQU1FUworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTUEFDRVNfSU5fRklMRU5BTUVTICdlZGl0b3Igd2l0aCBhIHNwYWNlJyAnCisKKwljaG1vZCBhK3ggImUgc3BhY2Uuc2giICYmCisJR0lUX0VESVRPUj0iLi9lXCBzcGFjZS5zaCIgZ2l0IGNvbW1pdCAtLWFtZW5kICYmCisJdGVzdCBzcGFjZSA9ICIkKGdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolcykiCisKKycKKwordW5zZXQgR0lUX0VESVRPUgordGVzdF9leHBlY3Rfc3VjY2VzcyBTUEFDRVNfSU5fRklMRU5BTUVTICdjb3JlLmVkaXRvciB3aXRoIGEgc3BhY2UnICcKKworCWdpdCBjb25maWcgY29yZS5lZGl0b3IgXCIuL2VcIHNwYWNlLnNoXCIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwl0ZXN0IHNwYWNlID0gIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzKSIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDYtcGFnZXIuc2ggYi90L3Q3MDA2LXBhZ2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmMjU5MDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDA2LXBhZ2VyLnNoCkBAIC0wLDAgKzEsNDUwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBhdXRvbWF0aWMgdXNlIG9mIGEgcGFnZXIuJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXBhZ2VyLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXNhbmVfdW5zZXQgR0lUX1BBR0VSIEdJVF9QQUdFUl9JTl9VU0UgJiYKKwl0ZXN0X3VuY29uZmlnIGNvcmUucGFnZXIgJiYKKworCVBBR0VSPSJjYXQgPnBhZ2luYXRlZC5vdXQiICYmCisJZXhwb3J0IFBBR0VSICYmCisKKwl0ZXN0X2NvbW1pdCBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdzb21lIGNvbW1hbmRzIHVzZSBhIHBhZ2VyJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAmJgorCXRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFRUWSAncGFnZXIgcnVucyBmcm9tIHN1YmRpcicgJworCWVjaG8gc3ViZGlyL3BhZ2luYXRlZC5vdXQgPmV4cGVjdGVkICYmCisJbWtkaXIgLXAgc3ViZGlyICYmCisJcm0gLWYgcGFnaW5hdGVkLm91dCBzdWJkaXIvcGFnaW5hdGVkLm91dCAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfdGVybWluYWwgZ2l0IGxvZworCSkgJiYKKwl7CisJCWxzIHBhZ2luYXRlZC5vdXQgc3ViZGlyL3BhZ2luYXRlZC5vdXQgfHwKKwkJOgorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc29tZSBjb21tYW5kcyBkbyBub3QgdXNlIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgcmV2LWxpc3QgSEVBRCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHBhZ2VyIHdoZW4gc3Rkb3V0IGlzIGEgcGlwZScgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwlnaXQgbG9nIHwgY2F0ICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gcGFnZXIgd2hlbiBzdGRvdXQgaXMgYSByZWd1bGFyIGZpbGUnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJZ2l0IGxvZyA+ZmlsZSAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgLS1wYWdpbmF0ZSByZXYtbGlzdCB1c2VzIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1wYWdpbmF0ZSByZXYtbGlzdCBIRUFEICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHBhZ2VyIGV2ZW4gd2l0aCAtLXBhZ2luYXRlIHdoZW4gc3Rkb3V0IGlzIGEgcGlwZScgJworCXJtIC1mIGZpbGUgcGFnaW5hdGVkLm91dCAmJgorCWdpdCAtLXBhZ2luYXRlIGxvZyB8IGNhdCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdubyBwYWdlciB3aXRoIC0tbm8tcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1uby1wYWdlciBsb2cgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29uZmlndXJhdGlvbiBjYW4gZGlzYWJsZSBwYWdlcicgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3VuY29uZmlnIHBhZ2VyLmdyZXAgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBncmVwIGluaXRpYWwgJiYKKwl0ZXN0IC1lIHBhZ2luYXRlZC5vdXQgJiYKKworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5ncmVwIGZhbHNlICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgZ3JlcCBpbml0aWFsICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBjb25maWcgdXNlcyBhIHBhZ2VyIGlmIGNvbmZpZ3VyZWQgdG8nICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF9jb25maWcgcGFnZXIuY29uZmlnIHRydWUgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBjb25maWcgLS1saXN0ICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb25maWd1cmF0aW9uIGNhbiBlbmFibGUgcGFnZXIgKGZyb20gc3ViZGlyKScgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwlta2RpciAtcCBzdWJkaXIgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5idW5kbGUgdHJ1ZSAmJgorCisJZ2l0IGJ1bmRsZSBjcmVhdGUgdGVzdC5idW5kbGUgLS1hbGwgJiYKKwlybSAtZiBwYWdpbmF0ZWQub3V0IHN1YmRpci9wYWdpbmF0ZWQub3V0ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJdGVzdF90ZXJtaW5hbCBnaXQgYnVuZGxlIHVuYnVuZGxlIC4uL3Rlc3QuYnVuZGxlCisJKSAmJgorCXsKKwkJdGVzdCAtZSBwYWdpbmF0ZWQub3V0IHx8CisJCXRlc3QgLWUgc3ViZGlyL3BhZ2luYXRlZC5vdXQKKwl9CisnCisKKyMgQSBjb2xvcmVkIGNvbW1pdCBsb2cgd2lsbCBiZWdpbiB3aXRoIGFuIGFwcHJvcHJpYXRlIEFOU0kgZXNjYXBlCisjIGZvciB0aGUgZmlyc3QgY29sb3I7IHRoZSB0ZXh0ICJjb21taXQiIGNvbWVzIGxhdGVyLgorY29sb3JmdWwoKSB7CisJcmVhZCBmaXJzdGxpbmUgPCQxCisJISBleHByICIkZmlyc3RsaW5lIiA6ICJbYS16QS1aXSIgPi9kZXYvbnVsbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0cyBjYW4gZGV0ZWN0IGNvbG9yJyAnCisJcm0gLWYgY29sb3JmdWwubG9nIGNvbG9ybGVzcy5sb2cgJiYKKwlnaXQgbG9nIC0tbm8tY29sb3IgPmNvbG9ybGVzcy5sb2cgJiYKKwlnaXQgbG9nIC0tY29sb3IgPmNvbG9yZnVsLmxvZyAmJgorCSEgY29sb3JmdWwgY29sb3JsZXNzLmxvZyAmJgorCWNvbG9yZnVsIGNvbG9yZnVsLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb2xvciB3aGVuIHN0ZG91dCBpcyBhIHJlZ3VsYXIgZmlsZScgJworCXJtIC1mIGNvbG9ybGVzcy5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhdXRvICYmCisJZ2l0IGxvZyA+Y29sb3JsZXNzLmxvZyAmJgorCSEgY29sb3JmdWwgY29sb3JsZXNzLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29sb3Igd2hlbiB3cml0aW5nIHRvIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF9jb25maWcgY29sb3IudWkgYXV0byAmJgorCSgKKwkJVEVSTT12dDEwMCAmJgorCQlleHBvcnQgVEVSTSAmJgorCQl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cKKwkpICYmCisJY29sb3JmdWwgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29sb3JzIGFyZSBzdXBwcmVzc2VkIGJ5IGNvbG9yLnBhZ2VyJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLnVpIGF1dG8gJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5wYWdlciBmYWxzZSAmJgorCSgKKwkJVEVSTT12dDEwMCAmJgorCQlleHBvcnQgVEVSTSAmJgorCQl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cKKwkpICYmCisJISBjb2xvcmZ1bCBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbG9yIHdoZW4gd3JpdGluZyB0byBhIGZpbGUgaW50ZW5kZWQgZm9yIGEgcGFnZXInICcKKwlybSAtZiBjb2xvcmZ1bC5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhdXRvICYmCisJKAorCQlURVJNPXZ0MTAwICYmCisJCUdJVF9QQUdFUl9JTl9VU0U9dHJ1ZSAmJgorCQlleHBvcnQgVEVSTSBHSVRfUEFHRVJfSU5fVVNFICYmCisJCWdpdCBsb2cgPmNvbG9yZnVsLmxvZworCSkgJiYKKwljb2xvcmZ1bCBjb2xvcmZ1bC5sb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvbG9ycyBhcmUgc2VudCB0byBwYWdlciBmb3IgZXh0ZXJuYWwgY29tbWFuZHMnICcKKwl0ZXN0X2NvbmZpZyBhbGlhcy5leHRlcm5hbGxvZyAiIWdpdCBsb2ciICYmCisJdGVzdF9jb25maWcgY29sb3IudWkgYXV0byAmJgorCSgKKwkJVEVSTT12dDEwMCAmJgorCQlleHBvcnQgVEVSTSAmJgorCQl0ZXN0X3Rlcm1pbmFsIGdpdCAtcCBleHRlcm5hbGxvZworCSkgJiYKKwljb2xvcmZ1bCBwYWdpbmF0ZWQub3V0CisnCisKKyMgVXNlIHRoaXMgaGVscGVyIHRvIG1ha2UgaXQgZWFzeSBmb3IgdGhlIGNhbGxlciBvZiB5b3VyCisjIHRlcm1pbmFsLXVzaW5nIGZ1bmN0aW9uIHRvIHNwZWNpZnkgd2hldGhlciBpdCBzaG91bGQgZmFpbC4KKyMgSWYgeW91IHdyaXRlCisjCisjCXlvdXJfdGVzdCgpIHsKKyMJCXBhcnNlX2FyZ3MgIiRAIgorIworIwkJJHRlc3RfZXhwZWN0YXRpb24gIiRjbWQgLSBiZWhhdmVzIHdlbGwiICIKKyMJCQkuLi4KKyMJCQkkZnVsbF9jb21tYW5kICYmCisjCQkJLi4uCisjCQkiCisjCX0KKyMKKyMgdGhlbiB5b3VyIHRlc3QgY2FuIGJlIHVzZWQgbGlrZSB0aGlzOgorIworIwl5b3VyX3Rlc3QgZXhwZWN0XyhzdWNjZXNzfGZhaWx1cmUpIFt0ZXN0X211c3RfZmFpbF0gJ2dpdCBmb28nCisjCitwYXJzZV9hcmdzKCkgeworCXRlc3RfZXhwZWN0YXRpb249InRlc3RfJDEiCisJc2hpZnQKKwlpZiB0ZXN0ICIkMSIgPSB0ZXN0X211c3RfZmFpbAorCXRoZW4KKwkJZnVsbF9jb21tYW5kPSJ0ZXN0X211c3RfZmFpbCB0ZXN0X3Rlcm1pbmFsICIKKwkJc2hpZnQKKwllbHNlCisJCWZ1bGxfY29tbWFuZD0idGVzdF90ZXJtaW5hbCAiCisJZmkKKwljbWQ9JDEKKwlmdWxsX2NvbW1hbmQ9IiRmdWxsX2NvbW1hbmQgJDEiCit9CisKK3Rlc3RfZGVmYXVsdF9wYWdlcigpIHsKKwlwYXJzZV9hcmdzICIkQCIKKworCSR0ZXN0X2V4cGVjdGF0aW9uIFNJTVBMRVBBR0VSLFRUWSAiJGNtZCAtIGRlZmF1bHQgcGFnZXIgaXMgdXNlZCBieSBkZWZhdWx0IiAiCisJCXNhbmVfdW5zZXQgUEFHRVIgR0lUX1BBR0VSICYmCisJCXRlc3RfdW5jb25maWcgY29yZS5wYWdlciAmJgorCQlybSAtZiBkZWZhdWx0X3BhZ2VyX3VzZWQgJiYKKwkJY2F0ID5cJGxlc3MgPDwtXEVPRiAmJgorCQkjIS9iaW4vc2gKKwkJd2MgPmRlZmF1bHRfcGFnZXJfdXNlZAorCQlFT0YKKwkJY2htb2QgK3ggXCRsZXNzICYmCisJCSgKKwkJCVBBVEg9LjpcJFBBVEggJiYKKwkJCWV4cG9ydCBQQVRIICYmCisJCQkkZnVsbF9jb21tYW5kCisJCSkgJiYKKwkJdGVzdCAtZSBkZWZhdWx0X3BhZ2VyX3VzZWQKKwkiCit9CisKK3Rlc3RfUEFHRVJfb3ZlcnJpZGVzKCkgeworCXBhcnNlX2FyZ3MgIiRAIgorCisJJHRlc3RfZXhwZWN0YXRpb24gVFRZICIkY21kIC0gUEFHRVIgb3ZlcnJpZGVzIGRlZmF1bHQgcGFnZXIiICIKKwkJc2FuZV91bnNldCBHSVRfUEFHRVIgJiYKKwkJdGVzdF91bmNvbmZpZyBjb3JlLnBhZ2VyICYmCisJCXJtIC1mIFBBR0VSX3VzZWQgJiYKKwkJUEFHRVI9J3djID5QQUdFUl91c2VkJyAmJgorCQlleHBvcnQgUEFHRVIgJiYKKwkJJGZ1bGxfY29tbWFuZCAmJgorCQl0ZXN0IC1lIFBBR0VSX3VzZWQKKwkiCit9CisKK3Rlc3RfY29yZV9wYWdlcl9vdmVycmlkZXMoKSB7CisJaWZfbG9jYWxfY29uZmlnPQorCXVzZWRfaWZfd2FudGVkPSdvdmVycmlkZXMgUEFHRVInCisJdGVzdF9jb3JlX3BhZ2VyICIkQCIKK30KKwordGVzdF9sb2NhbF9jb25maWdfaWdub3JlZCgpIHsKKwlpZl9sb2NhbF9jb25maWc9JyEgJworCXVzZWRfaWZfd2FudGVkPSdpcyBub3QgdXNlZCcKKwl0ZXN0X2NvcmVfcGFnZXIgIiRAIgorfQorCit0ZXN0X2NvcmVfcGFnZXIoKSB7CisJcGFyc2VfYXJncyAiJEAiCisKKwkkdGVzdF9leHBlY3RhdGlvbiBUVFkgIiRjbWQgLSByZXBvc2l0b3J5LWxvY2FsIGNvcmUucGFnZXIgc2V0dGluZyAkdXNlZF9pZl93YW50ZWQiICIKKwkJc2FuZV91bnNldCBHSVRfUEFHRVIgJiYKKwkJcm0gLWYgY29yZS5wYWdlcl91c2VkICYmCisJCVBBR0VSPXdjICYmCisJCWV4cG9ydCBQQUdFUiAmJgorCQl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyICd3YyA+Y29yZS5wYWdlcl91c2VkJyAmJgorCQkkZnVsbF9jb21tYW5kICYmCisJCSR7aWZfbG9jYWxfY29uZmlnfXRlc3QgLWUgY29yZS5wYWdlcl91c2VkCisJIgorfQorCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyKCkgeworCWlmX2xvY2FsX2NvbmZpZz0KKwl1c2VkX2lmX3dhbnRlZD0nb3ZlcnJpZGVzIFBBR0VSJworCXRlc3RfcGFnZXJfc3ViZGlyX2hlbHBlciAiJEAiCit9CisKK3Rlc3Rfbm9fbG9jYWxfY29uZmlnX3N1YmRpcigpIHsKKwlpZl9sb2NhbF9jb25maWc9JyEgJworCXVzZWRfaWZfd2FudGVkPSdpcyBub3QgdXNlZCcKKwl0ZXN0X3BhZ2VyX3N1YmRpcl9oZWxwZXIgIiRAIgorfQorCit0ZXN0X3BhZ2VyX3N1YmRpcl9oZWxwZXIoKSB7CisJcGFyc2VfYXJncyAiJEAiCisKKwkkdGVzdF9leHBlY3RhdGlvbiBUVFkgIiRjbWQgLSBjb3JlLnBhZ2VyICR1c2VkX2lmX3dhbnRlZCBmcm9tIHN1YmRpcmVjdG9yeSIgIgorCQlzYW5lX3Vuc2V0IEdJVF9QQUdFUiAmJgorCQlybSAtZiBjb3JlLnBhZ2VyX3VzZWQgJiYKKwkJcm0gLWZyIHN1YiAmJgorCQlQQUdFUj13YyAmJgorCQlzdGFtcG5hbWU9XCQocHdkKS9jb3JlLnBhZ2VyX3VzZWQgJiYKKwkJZXhwb3J0IFBBR0VSIHN0YW1wbmFtZSAmJgorCQl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyICd3YyA+XCJcJHN0YW1wbmFtZVwiJyAmJgorCQlta2RpciBzdWIgJiYKKwkJKAorCQkJY2Qgc3ViICYmCisJCQkkZnVsbF9jb21tYW5kCisJCSkgJiYKKwkJJHtpZl9sb2NhbF9jb25maWd9dGVzdCAtZSBjb3JlLnBhZ2VyX3VzZWQKKwkiCit9CisKK3Rlc3RfR0lUX1BBR0VSX292ZXJyaWRlcygpIHsKKwlwYXJzZV9hcmdzICIkQCIKKworCSR0ZXN0X2V4cGVjdGF0aW9uIFRUWSAiJGNtZCAtIEdJVF9QQUdFUiBvdmVycmlkZXMgY29yZS5wYWdlciIgIgorCQlybSAtZiBHSVRfUEFHRVJfdXNlZCAmJgorCQl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyIHdjICYmCisJCUdJVF9QQUdFUj0nd2MgPkdJVF9QQUdFUl91c2VkJyAmJgorCQlleHBvcnQgR0lUX1BBR0VSICYmCisJCSRmdWxsX2NvbW1hbmQgJiYKKwkJdGVzdCAtZSBHSVRfUEFHRVJfdXNlZAorCSIKK30KKwordGVzdF9kb2VzbnRfcGFnaW5hdGUoKSB7CisJcGFyc2VfYXJncyAiJEAiCisKKwkkdGVzdF9leHBlY3RhdGlvbiBUVFkgIm5vIHBhZ2VyIGZvciAnJGNtZCciICIKKwkJcm0gLWYgR0lUX1BBR0VSX3VzZWQgJiYKKwkJR0lUX1BBR0VSPSd3YyA+R0lUX1BBR0VSX3VzZWQnICYmCisJCWV4cG9ydCBHSVRfUEFHRVIgJiYKKwkJJGZ1bGxfY29tbWFuZCAmJgorCQkhIHRlc3QgLWUgR0lUX1BBR0VSX3VzZWQKKwkiCit9CisKK3Rlc3RfcGFnZXJfY2hvaWNlcygpIHsKKwl0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X1BBR0VSX292ZXJyaWRlcyAgICAgIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X2NvcmVfcGFnZXJfb3ZlcnJpZGVzIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X0dJVF9QQUdFUl9vdmVycmlkZXMgIGV4cGVjdF9zdWNjZXNzICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHNvbWUgYWxpYXNlcycgJworCWdpdCBjb25maWcgYWxpYXMuYWxpYXNlZGxvZyBsb2cgJiYKKwlnaXQgY29uZmlnIGFsaWFzLnRydWUgIiF0cnVlIgorJworCit0ZXN0X3BhZ2VyX2Nob2ljZXMgICAgICAgICAgICAgICAgICAgICAgICdnaXQgbG9nJwordGVzdF9wYWdlcl9jaG9pY2VzICAgICAgICAgICAgICAgICAgICAgICAnZ2l0IC1wIGxvZycKK3Rlc3RfcGFnZXJfY2hvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgJ2dpdCBhbGlhc2VkbG9nJworCit0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgLXAgYWxpYXNlZGxvZycKK3Rlc3RfUEFHRVJfb3ZlcnJpZGVzICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBhbGlhc2VkbG9nJwordGVzdF9jb3JlX3BhZ2VyX292ZXJyaWRlcyBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIGFsaWFzZWRsb2cnCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9mYWlsdXJlICdnaXQgLXAgYWxpYXNlZGxvZycKK3Rlc3RfR0lUX1BBR0VSX292ZXJyaWRlcyAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBhbGlhc2VkbG9nJworCit0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgLXAgdHJ1ZScKK3Rlc3RfUEFHRVJfb3ZlcnJpZGVzICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCB0cnVlJwordGVzdF9jb3JlX3BhZ2VyX292ZXJyaWRlcyBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIHRydWUnCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9mYWlsdXJlICdnaXQgLXAgdHJ1ZScKK3Rlc3RfR0lUX1BBR0VSX292ZXJyaWRlcyAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCB0cnVlJworCit0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAgcmVxdWVzdC1wdWxsJwordGVzdF9QQUdFUl9vdmVycmlkZXMgICAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wIHJlcXVlc3QtcHVsbCcKK3Rlc3RfY29yZV9wYWdlcl9vdmVycmlkZXMgZXhwZWN0X3N1Y2Nlc3MgdGVzdF9tdXN0X2ZhaWwgJ2dpdCAtcCByZXF1ZXN0LXB1bGwnCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9mYWlsdXJlIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAgcmVxdWVzdC1wdWxsJwordGVzdF9HSVRfUEFHRVJfb3ZlcnJpZGVzICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wIHJlcXVlc3QtcHVsbCcKKwordGVzdF9kZWZhdWx0X3BhZ2VyICAgICAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wJwordGVzdF9QQUdFUl9vdmVycmlkZXMgICAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wJwordGVzdF9sb2NhbF9jb25maWdfaWdub3JlZCBleHBlY3RfZmFpbHVyZSB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wJwordGVzdF9ub19sb2NhbF9jb25maWdfc3ViZGlyIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAnCit0ZXN0X0dJVF9QQUdFUl9vdmVycmlkZXMgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAnCisKK3Rlc3RfZG9lc250X3BhZ2luYXRlICAgICAgZXhwZWN0X2ZhaWx1cmUgdGVzdF9tdXN0X2ZhaWwgJ2dpdCAtcCBub25zZW5zZScKKwordGVzdF9wYWdlcl9jaG9pY2VzICAgICAgICAgICAgICAgICAgICAgICAnZ2l0IHNob3J0bG9nJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNvbmZpZ3VyZSBzaG9ydGxvZyBub3QgdG8gcGFnaW5hdGUnICcKKwlnaXQgY29uZmlnIHBhZ2VyLnNob3J0bG9nIGZhbHNlCisnCit0ZXN0X2RvZXNudF9wYWdpbmF0ZSAgICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgc2hvcnRsb2cnCit0ZXN0X25vX2xvY2FsX2NvbmZpZ19zdWJkaXIgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG9ydGxvZycKK3Rlc3RfZGVmYXVsdF9wYWdlciAgICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBzaG9ydGxvZycKK3Rlc3RfY29yZV9wYWdlcl9zdWJkaXIgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBzaG9ydGxvZycKKwordGVzdF9jb3JlX3BhZ2VyX3N1YmRpciAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCBcCisJCQkJCSAnZ2l0IC1wIGFwcGx5IDwvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb21tYW5kLXNwZWNpZmljIHBhZ2VyJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X3VuY29uZmlnIGNvcmUucGFnZXIgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5sb2cgInNlZCBzL14vZm9vOi8gPmFjdHVhbCIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb21tYW5kLXNwZWNpZmljIHBhZ2VyIG92ZXJyaWRlcyBjb3JlLnBhZ2VyJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyICJleGl0IDEiCisJdGVzdF9jb25maWcgcGFnZXIubG9nICJzZWQgcy9eL2ZvbzovID5hY3R1YWwiICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgbG9nIC0tZm9ybWF0PSVzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29tbWFuZC1zcGVjaWZpYyBwYWdlciBvdmVycmlkZGVuIGJ5IGVudmlyb25tZW50JyAnCisJR0lUX1BBR0VSPSJzZWQgcy9eL2ZvbzovID5hY3R1YWwiICYmIGV4cG9ydCBHSVRfUEFHRVIgJiYKKwk+YWN0dWFsICYmCisJZWNobyAiZm9vOmluaXRpYWwiID5leHBlY3QgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5sb2cgImV4aXQgMSIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4dGVybmFsIGNvbW1hbmQnICcKKwljYXQgPmdpdC1leHRlcm5hbCA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJZ2l0ICIkQCIKKwlFT0YKKwljaG1vZCAreCBnaXQtZXh0ZXJuYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvbW1hbmQtc3BlY2lmaWMgcGFnZXIgd29ya3MgZm9yIGV4dGVybmFsIGNvbW1hbmRzJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5leHRlcm5hbCAic2VkIHMvXi9mb286LyA+YWN0dWFsIiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC0tZXhlYy1wYXRoPSJgcHdkYCIgZXh0ZXJuYWwgbG9nIC0tZm9ybWF0PSVzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc3ViLWNvbW1hbmRzIG9mIGV4dGVybmFscyB1c2UgdGhlaXIgb3duIHBhZ2VyJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5sb2cgInNlZCBzL14vZm9vOi8gPmFjdHVhbCIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtLWV4ZWMtcGF0aD0uIGV4dGVybmFsIGxvZyAtLWZvcm1hdD0lcyAtMSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2V4dGVybmFsIGNvbW1hbmQgcGFnZXJzIG92ZXJyaWRlIHN1Yi1jb21tYW5kcycgJworCXNhbmVfdW5zZXQgUEFHRVIgR0lUX1BBR0VSICYmCisJPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5leHRlcm5hbCBmYWxzZSAmJgorCXRlc3RfY29uZmlnIHBhZ2VyLmxvZyAic2VkIHMvXi9sb2c6LyA+YWN0dWFsIiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC0tZXhlYy1wYXRoPS4gZXh0ZXJuYWwgbG9nIC0tZm9ybWF0PSVzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDctc2hvdy5zaCBiL3QvdDcwMDctc2hvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNDFmYTAwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzAwNy1zaG93LnNoCkBAIC0wLDAgKzEsMTIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHNob3cnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGhlbGxvIHdvcmxkID5mb28gJiYKKwlIPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGZvbykgJiYKKwlnaXQgdGFnIC1hIGZvby10YWcgLW0gIlRhZ3MgJEgiICRIICYmCisJSEg9JChleHByICIkSCIgOiAiXCguLlwpIikgJiYKKwlIMzg9JChleHByICIkSCIgOiAiLi5cKC4qXCkiKSAmJgorCXJtIC1mIC5naXQvb2JqZWN0cy8kSEgvJEgzOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGEgdGFnIHRoYXQgcG9pbnQgYXQgYSBtaXNzaW5nIG9iamVjdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtLW5vLXBhZ2VyIHNob3cgZm9vLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYSBiaXQgb2YgaGlzdG9yeScgJworCXRlc3RfY29tbWl0IG1haW4xICYmCisJdGVzdF9jb21taXQgbWFpbjIgJiYKKwl0ZXN0X2NvbW1pdCBtYWluMyAmJgorCWdpdCB0YWcgLW0gImFubm90YXRlZCB0YWciIGFubm90YXRlZCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReXiAmJgorCXRlc3RfY29tbWl0IHNpZGUyICYmCisJdGVzdF9jb21taXQgc2lkZTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB0d28gY29tbWl0cycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjIpCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMykKKwlFT0YKKwlnaXQgc2hvdyBtYWluMiBtYWluMyA+YWN0dWFsICYmCisJZ3JlcCBeY29tbWl0IGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGEgcmFuZ2Ugd2Fsa3MgKGxpbmVhciknICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4zKQorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjIpCisJRU9GCisJZ2l0IHNob3cgbWFpbjEuLm1haW4zID5hY3R1YWwgJiYKKwlncmVwIF5jb21taXQgYWN0dWFsID5hY3R1YWwuZmlsdGVyZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZpbHRlcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgYSByYW5nZSB3YWxrcyAoWSBzaGFwZSwgXiBmaXJzdCknICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4zKQorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjIpCisJRU9GCisJZ2l0IHNob3cgXnNpZGUzIG1haW4zID5hY3R1YWwgJiYKKwlncmVwIF5jb21taXQgYWN0dWFsID5hY3R1YWwuZmlsdGVyZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZpbHRlcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgYSByYW5nZSB3YWxrcyAoWSBzaGFwZSwgXiBsYXN0KScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjMpCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMikKKwlFT0YKKwlnaXQgc2hvdyBtYWluMyBec2lkZTMgPmFjdHVhbCAmJgorCWdyZXAgXmNvbW1pdCBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB3aXRoIC1OIHdhbGtzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMykKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4yKQorCUVPRgorCWdpdCBzaG93IC0yIG1haW4zID5hY3R1YWwgJiYKKwlncmVwIF5jb21taXQgYWN0dWFsID5hY3R1YWwuZmlsdGVyZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZpbHRlcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgYW5ub3RhdGVkIHRhZycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXRhZyBhbm5vdGF0ZWQKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIGFubm90YXRlZF57Y29tbWl0fSkKKwlFT0YKKwlnaXQgc2hvdyBhbm5vdGF0ZWQgPmFjdHVhbCAmJgorCWdyZXAgLUUgIl4oY29tbWl0fHRhZykiIGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGFubm90YXRlZCB0YWcgcGx1cyBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwl0YWcgYW5ub3RhdGVkCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBhbm5vdGF0ZWRee2NvbW1pdH0pCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBzaWRlMykKKwlFT0YKKwlnaXQgc2hvdyBhbm5vdGF0ZWQgc2lkZTMgPmFjdHVhbCAmJgorCWdyZXAgLUUgIl4oY29tbWl0fHRhZykiIGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIHJhbmdlJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMykKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4yKQorCUVPRgorCWdpdCBzaG93IF5zaWRlMyBhbm5vdGF0ZWQgPmFjdHVhbCAmJgorCWdyZXAgLUUgIl4oY29tbWl0fHRhZykiIGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctcyBzdXBwcmVzc2VzIGRpZmYnICcKKwllY2hvIG1haW4zID5leHBlY3QgJiYKKwlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyBtYWluMyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXF1aWV0IHN1cHByZXNzZXMgZGlmZicgJworCWVjaG8gbWFpbjMgPmV4cGVjdCAmJgorCWdpdCBzaG93IC0tcXVpZXQgLS1mb3JtYXQ9JXMgbWFpbjMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDA4LWdyZXAtYmluYXJ5LnNoIGIvdC90NzAwOC1ncmVwLWJpbmFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZDY0MTBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzAwOC1ncmVwLWJpbmFyeS5zaApAQCAtMCwwICsxLDEyNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBncmVwIGluIGJpbmFyeSBmaWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAiCisJZWNobyAnYmluYXJ5UWZpbGUnIHwgcV90b19udWwgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tLgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCBpbmEgYScgJworCWVjaG8gQmluYXJ5IGZpbGUgYSBtYXRjaGVzID5leHBlY3QgJiYKKwlnaXQgZ3JlcCBpbmEgYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtYWggaW5hIGEnICcKKwlnaXQgZ3JlcCAtYWggaW5hIGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGEgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1JIGluYSBhJyAnCisJOiA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLUkgaW5hIGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgLWMgaW5hIGEnICcKKwllY2hvIGE6MSA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgLWMgaW5hIGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgLWwgaW5hIGEnICcKKwllY2hvIGEgPmV4cGVjdCAmJgorCWdpdCBncmVwIC1sIGluYSBhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1MIGJhciBhJyAnCisJZWNobyBhID5leHBlY3QgJiYKKwlnaXQgZ3JlcCAtTCBiYXIgYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtcSBpbmEgYScgJworCTogPmV4cGVjdCAmJgorCWdpdCBncmVwIC1xIGluYSBhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1GIGlsZSBhJyAnCisJZ2l0IGdyZXAgLUYgaWxlIGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgLUZpIGlMRSBhJyAnCisJZ2l0IGdyZXAgLUZpIGlMRSBhCisnCisKKyMgVGhpcyB0ZXN0IGFjdHVhbGx5IHBhc3NlcyBvbiBwbGF0Zm9ybXMgd2hlcmUgcmVnZXhlYygpIHN1cHBvcnRzIHRoZQorIyBmbGFnIFJFR19TVEFSVEVORC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIGlsZSBhJyAnCisJZ2l0IGdyZXAgaWxlIGEKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0IGdyZXAgLmZpIGEnICcKKwlnaXQgZ3JlcCAuZmkgYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtRiB5PE5VTD5mIGEnICIKKwlwcmludGYgJ3lRZicgfCBxX3RvX251bCA+ZiAmJgorCWdpdCBncmVwIC1mIGYgLUYgYQorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtRiB5PE5VTD54IGEnICIKKwlwcmludGYgJ3lReCcgfCBxX3RvX251bCA+ZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC1mIGYgLUYgYQorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtRmkgWTxOVUw+ZiBhJyAiCisJcHJpbnRmICdZUWYnIHwgcV90b19udWwgPmYgJiYKKwlnaXQgZ3JlcCAtZiBmIC1GaSBhCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1GaSBZPE5VTD54IGEnICIKKwlwcmludGYgJ1lReCcgfCBxX3RvX251bCA+ZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC1mIGYgLUZpIGEKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgeTxOVUw+ZiBhJyAiCisJcHJpbnRmICd5UWYnIHwgcV90b19udWwgPmYgJiYKKwlnaXQgZ3JlcCAtZiBmIGEKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgeTxOVUw+eCBhJyAiCisJcHJpbnRmICd5UXgnIHwgcV90b19udWwgPmYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtZiBmIGEKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCByZXNwZWN0cyBiaW5hcnkgZGlmZiBhdHRyaWJ1dGUnICcKKwllY2hvIHRleHQgPnQgJiYKKwlnaXQgYWRkIHQgJiYKKwllY2hvIHQ6dGV4dCA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgdGV4dCB0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAidCAtZGlmZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiQmluYXJ5IGZpbGUgdCBtYXRjaGVzIiA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgdGV4dCB0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgcmVzcGVjdHMgbm90LWJpbmFyeSBkaWZmIGF0dHJpYnV0ZScgJworCWVjaG8gYmluUWFyeSB8IHFfdG9fbnVsID5iICYmCisJZ2l0IGFkZCBiICYmCisJZWNobyAiQmluYXJ5IGZpbGUgYiBtYXRjaGVzIiA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgYmluIGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICJiIGRpZmYiID4uZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gImI6YmluUWFyeSIgPmV4cGVjdCAmJgorCWdpdCBncmVwIGJpbiBiIHwgbnVsX3RvX3EgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDEwLXNldHVwLnNoIGIvdC90NzAxMC1zZXR1cC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMzM1YTlhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzAxMC1zZXR1cC5zaApAQCAtMCwwICsxLDE2MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NldHVwIHRha2luZyBhbmQgc2FuaXRpemluZyBmdW5ueSBwYXRocycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJbWtkaXIgLXAgYS9iL2MgYS9lICYmCisJRD0kKHB3ZCkgJiYKKwk+YS9iL2MvZCAmJgorCT5hL2UvZgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgKGFic29sdXRlKScgJworCisJZ2l0IGFkZCAiJEQvYS9iL2MvZCIgJiYKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwllY2hvIGEvYi9jL2QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIChmdW5ueSByZWxhdGl2ZSknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwkoCisJCWNkIGEvYiAmJgorCQlnaXQgYWRkICIuLi9lLy4vZiIKKwkpICYmCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmCisJZWNobyBhL2UvZiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcm0gKGFic29sdXRlKScgJworCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBybSAtZiAtLWNhY2hlZCAiJEQvYS9iL2MvZCIgJiYKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwllY2hvIGEvZS9mID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBybSAoZnVubnkgcmVsYXRpdmUpJyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhICYmCisJKAorCQljZCBhL2IgJiYKKwkJZ2l0IHJtIC1mIC0tY2FjaGVkICIuLi9lLy4vZiIKKwkpICYmCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmCisJZWNobyBhL2IvYy9kID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAoYWJzb2x1dGUpJyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGxzLWZpbGVzICIkRC9hL2UvLi4vYiIgPmN1cnJlbnQgJiYKKwllY2hvIGEvYi9jL2QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIChyZWxhdGl2ZSAjMSknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwkoCisJCWNkIGEvYiAmJgorCQlnaXQgbHMtZmlsZXMgIi4uL2IvYyIKKwkpICA+Y3VycmVudCAmJgorCWVjaG8gYy9kID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAocmVsYXRpdmUgIzIpJyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhICYmCisJKAorCQljZCBhL2IgJiYKKwkJZ2l0IGxzLWZpbGVzIC0tZnVsbC1uYW1lICIuLi9lL2YiCisJKSAgPmN1cnJlbnQgJiYKKwllY2hvIGEvZS9mID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAocmVsYXRpdmUgIzMpJyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhICYmCisJKAorCQljZCBhL2IgJiYKKwkJZ2l0IGxzLWZpbGVzICIuLi9lL2YiCisJKSAgPmN1cnJlbnQgJiYKKwllY2hvIC4uL2UvZiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgdXNpbmcgYWJzb2x1dGUgcGF0aCBuYW1lcycgJworCWdpdCBjb21taXQgLW0gImZvbyIgJiYKKwllY2hvIGFhID4+YS9iL2MvZCAmJgorCWdpdCBjb21taXQgLW0gImFhIiAiJChwd2QpL2EvYi9jL2QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyB1c2luZyBhYnNvbHV0ZSBwYXRoIG5hbWVzJyAnCisJZWNobyBiYiA+PmEvYi9jL2QgJiYKKwlnaXQgY29tbWl0IC1tICJiYiIgIiQocHdkKS9hL2IvYy9kIiAmJgorCisJZ2l0IGxvZyBhL2IvYy9kID5mMS50eHQgJiYKKwlnaXQgbG9nICIkKHB3ZCkvYS9iL2MvZCIgPmYyLnR4dCAmJgorCXRlc3RfY21wIGYxLnR4dCBmMi50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgdXNpbmcgYWJzb2x1dGUgcGF0aCBuYW1lcycgJworCWdpdCBibGFtZSBhL2IvYy9kID5mMS50eHQgJiYKKwlnaXQgYmxhbWUgIiQocHdkKS9hL2IvYy9kIiA+ZjIudHh0ICYmCisJdGVzdF9jbXAgZjEudHh0IGYyLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkZWVwZXIgd29yayB0cmVlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyB0ZXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGEgZGlyZWN0b3J5IG91dHNpZGUgdGhlIHdvcmsgdHJlZScgJygKKwljZCB0ZXN0ZXIgJiYKKwlkMT0iJChjZCAuLiA7IHB3ZCkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAiJGQxIgorKScKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBmaWxlIG91dHNpZGUgdGhlIHdvcmsgdHJlZSwgbmFzdHkgY2FzZSAxJyAnKAorCWNkIHRlc3RlciAmJgorCWY9IiQocHdkKXgiICYmCisJZWNobyAiJGYiICYmCisJdG91Y2ggIiRmIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRmIgorKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGEgZmlsZSBvdXRzaWRlIHRoZSB3b3JrIHRyZWUsIG5hc3R5IGNhc2UgMicgJygKKwljZCB0ZXN0ZXIgJiYKKwlmPSIkKHB3ZCB8IHNlZCAicy8uJC8vIil4IiAmJgorCWVjaG8gIiRmIiAmJgorCXRvdWNoICIkZiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkICIkZiIKKyknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAxMS1za2lwLXdvcmt0cmVlLXJlYWRpbmcuc2ggYi90L3Q3MDExLXNraXAtd29ya3RyZWUtcmVhZGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZjNiNTRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzAxMS1za2lwLXdvcmt0cmVlLXJlYWRpbmcuc2gKQEAgLTAsMCArMSwxNjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdza2lwLXdvcmt0cmVlIGJpdCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5leHBlY3QuZnVsbCA8PEVPRgorSCAxCitIIDIKK0ggaW5pdC50CitIIHN1Yi8xCitIIHN1Yi8yCitFT0YKKworY2F0ID5leHBlY3Quc2tpcCA8PEVPRgorUyAxCitIIDIKK0ggaW5pdC50CitTIHN1Yi8xCitIIHN1Yi8yCitFT0YKKworTlVMTF9TSEExPWU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKKworc2V0dXBfYWJzZW50KCkgeworCXRlc3QgLWYgMSAmJiBybSAxCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJE5VTExfU0hBMSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMQorfQorCit0ZXN0X2Fic2VudCgpIHsKKwllY2hvICIxMDA2NDQgJE5VTExfU0hBMSAwCTEiID4gZXhwZWN0ZWQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJdGVzdCAhIC1mIDEKK30KKworc2V0dXBfZGlydHkoKSB7CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAxICYmCisJZWNobyBkaXJ0eSA+IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkTlVMTF9TSEExIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxCit9CisKK3Rlc3RfZGlydHkoKSB7CisJZWNobyAiMTAwNjQ0ICROVUxMX1NIQTEgMAkxIiA+IGV4cGVjdGVkICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCWVjaG8gZGlydHkgPiBleHBlY3RlZAorCXRlc3RfY21wIGV4cGVjdGVkIDEKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0ICYmCisJbWtkaXIgc3ViICYmCisJdG91Y2ggLi8xIC4vMiBzdWIvMSBzdWIvMiAmJgorCWdpdCBhZGQgMSAyIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMSBzdWIvMSAmJgorCWdpdCBscy1maWxlcyAtdCA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdC5za2lwIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXgnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IDEgJiYKKwl0ZXN0X2Fic2VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXgnICcKKwlzZXR1cF9kaXJ0eSAmJgorCWdpdCB1cGRhdGUtaW5kZXggMSAmJgorCXRlc3RfZGlydHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tcmVtb3ZlJyAnCisJc2V0dXBfYWJzZW50ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAxICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgMSkiICYmCisJdGVzdCAhIC1mIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tcmVtb3ZlJyAnCisJc2V0dXBfZGlydHkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAxKSIgJiYKKwllY2hvIGRpcnR5ID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tZGVsZXRlJyAnCisJc2V0dXBfYWJzZW50ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLWRlbGV0ZScgJworCXNldHVwX2RpcnR5ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLW1vZGlmaWVkJyAnCisJc2V0dXBfYWJzZW50ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLW0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLW1vZGlmaWVkJyAnCisJc2V0dXBfZGlydHkgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtbSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgd2l0aCBza2lwLXdvcmt0cmVlIGZpbGUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZSAxICYmCisJZWNobyB0ZXN0ID4gMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEgJiYKKwlybSAxICYmCisJdGVzdCAiJChnaXQgZ3JlcCAtLW5vLWV4dC1ncmVwIHRlc3QpIiA9ICIxOnRlc3QiCisnCisKK2VjaG8gIjowMDAwMDAgMTAwNjQ0ICRfejQwICROVUxMX1NIQTEgQQkxIiA+IGV4cGVjdGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IGRvZXMgbm90IGV4YW1pbmUgc2tpcC13b3JrdHJlZSBhYnNlbnQgZW50cmllcycgJworCXNldHVwX2Fic2VudCAmJgorCWdpdCBkaWZmLWluZGV4IEhFQUQgLS0gMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IGRvZXMgbm90IGV4YW1pbmUgc2tpcC13b3JrdHJlZSBkaXJ0eSBlbnRyaWVzJyAnCisJc2V0dXBfZGlydHkgJiYKKwlnaXQgZGlmZi1pbmRleCBIRUFEIC0tIDEgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcyBkb2VzIG5vdCBleGFtaW5lIHNraXAtd29ya3RyZWUgYWJzZW50IGVudHJpZXMnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWZpbGVzIC0tIG9uZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgZG9lcyBub3QgZXhhbWluZSBza2lwLXdvcmt0cmVlIGRpcnR5IGVudHJpZXMnICcKKwlzZXR1cF9kaXJ0eSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYtZmlsZXMgLS0gb25lKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LXJtIHN1Y2NlZWRzIG9uIHNraXAtd29ya3RyZWUgYWJzZW50IGVudHJpZXMnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgcm0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgb24gc2tpcC13b3JrdHJlZSBhYnNlbnQgZW50cmllcycgJworCWdpdCByZXNldCAmJgorCXNldHVwX2Fic2VudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gbnVsbCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBvbiBza2lwLXdvcmt0cmVlIGRpcnR5IGVudHJpZXMnICcKKwlnaXQgcmVzZXQgJiYKKwlzZXR1cF9kaXJ0eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gbnVsbCAxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2ggYi90L3Q3MDEyLXNraXAtd29ya3RyZWUtd3JpdGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45Y2VhYTQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2gKQEAgLTAsMCArMSwxNDYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHdvcmt0cmVlIHdyaXRpbmcgb3BlcmF0aW9ucyB3aGVuIHNraXAtd29ya3RyZWUgaXMgdXNlZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdCAmJgorCWVjaG8gbW9kaWZpZWQgPj4gaW5pdC50ICYmCisJdG91Y2ggYWRkZWQgJiYKKwlnaXQgYWRkIGluaXQudCBhZGRlZCAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGFuZCBhZGRlZCIgJiYKKwlnaXQgdGFnIHRvcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgdXBkYXRlcyB3b3JrdHJlZSwgYWJzZW50IGNhc2UnICcKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgaW5pdC50ICYmCisJcm0gaW5pdC50ICYmCisJZ2l0IHJlYWQtdHJlZSAtbSAtdSBIRUFEXiAmJgorCWVjaG8gaW5pdCA+IGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgaW5pdC50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB1cGRhdGVzIHdvcmt0cmVlLCBkaXJ0eSBjYXNlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIGluaXQudCAmJgorCWVjaG8gZGlydHkgPj4gaW5pdC50ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtbSAtdSBIRUFEXiAmJgorCWdyZXAgLXEgZGlydHkgaW5pdC50ICYmCisJdGVzdCAiJChnaXQgbHMtZmlsZXMgLXQgaW5pdC50KSIgPSAiUyBpbml0LnQiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXNraXAtd29ya3RyZWUgaW5pdC50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSByZW1vdmVzIHdvcmt0cmVlLCBhYnNlbnQgY2FzZScgJworCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSBhZGRlZCAmJgorCXJtIGFkZGVkICYmCisJZ2l0IHJlYWQtdHJlZSAtbSAtdSBIRUFEXiAmJgorCXRlc3QgISAtZiBhZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgcmVtb3ZlcyB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSBhZGRlZCAmJgorCWVjaG8gZGlydHkgPj4gYWRkZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlIC1tIC11IEhFQUReICYmCisJZ3JlcCAtcSBkaXJ0eSBhZGRlZCAmJgorCXRlc3QgIiQoZ2l0IGxzLWZpbGVzIC10IGFkZGVkKSIgPSAiUyBhZGRlZCIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZSBhZGRlZAorJworCitOVUxMX1NIQTE9ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQorCitzZXR1cF9hYnNlbnQoKSB7CisJdGVzdCAtZiAxICYmIHJtIDEKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkTlVMTF9TSEExIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxCit9CisKK3Rlc3RfYWJzZW50KCkgeworCWVjaG8gIjEwMDY0NCAkTlVMTF9TSEExIDAJMSIgPiBleHBlY3RlZCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIDEgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgMQorfQorCitzZXR1cF9kaXJ0eSgpIHsKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIDEgJiYKKwllY2hvIGRpcnR5ID4gMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0ICROVUxMX1NIQTEgMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEKK30KKwordGVzdF9kaXJ0eSgpIHsKKwllY2hvICIxMDA2NDQgJE5VTExfU0hBMSAwCTEiID4gZXhwZWN0ZWQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJZWNobyBkaXJ0eSA+IGV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgMQorfQorCitjYXQgPmV4cGVjdGVkIDw8RU9GCitTIDEKK0ggMgorSCBpbml0LnQKK1Mgc3ViLzEKK0ggc3ViLzIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCBzZXR1cCcgJworCWdpdCBjaGVja291dCAtZiBpbml0ICYmCisJbWtkaXIgc3ViICYmCisJdG91Y2ggLi8xIC4vMiBzdWIvMSBzdWIvMiAmJgorCWdpdCBhZGQgMSAyIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMSBzdWIvMSAmJgorCWdpdCBscy1maWxlcyAtdCA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtYWRkIGlnbm9yZXMgd29ya3RyZWUgY29udGVudCcgJworCXNldHVwX2Fic2VudCAmJgorCWdpdCBhZGQgMSAmJgorCXRlc3RfYWJzZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1hZGQgaWdub3JlcyB3b3JrdHJlZSBjb250ZW50JyAnCisJc2V0dXBfZGlydHkgJiYKKwlnaXQgYWRkIDEgJiYKKwl0ZXN0X2RpcnR5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1ybSBmYWlscyBpZiB3b3JrdHJlZSBpcyBkaXJ0eScgJworCXNldHVwX2RpcnR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIDEgJiYKKwl0ZXN0X2RpcnR5CisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK1dvdWxkIHJlbW92ZSBleHBlY3RlZAorV291bGQgcmVtb3ZlIHJlc3VsdAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtY2xlYW4sIGFic2VudCBjYXNlJyAnCisJc2V0dXBfYWJzZW50ICYmCisJZ2l0IGNsZWFuIC1uID4gcmVzdWx0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtY2xlYW4sIGRpcnR5IGNhc2UnICcKKwlzZXR1cF9kaXJ0eSAmJgorCWdpdCBjbGVhbiAtbiA+IHJlc3VsdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCByZXN1bHQKKycKKworI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LWFwcGx5IGFkZHMgZmlsZScgZmFsc2UKKyNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1hcHBseSB1cGRhdGVzIGZpbGUnIGZhbHNlCisjVE9ETyB0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtYXBwbHkgcmVtb3ZlcyBmaWxlJyBmYWxzZQorI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LW12IHRvIHNraXAtd29ya3RyZWUnIGZhbHNlCisjVE9ETyB0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtbXYgZnJvbSBza2lwLXdvcmt0cmVlJyBmYWxzZQorI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LWNoZWNrb3V0JyBmYWxzZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwNjAtd3RzdGF0dXMuc2ggYi90L3Q3MDYwLXd0c3RhdHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY0ZjM4YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDYwLXd0c3RhdHVzLnNoCkBAIC0wLDAgKzEsMjE3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgd29yayB0cmVlIHN0YXR1cyByZXBvcnRpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiBvbmVzaWRlIGFkZGVkICYmCisJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCXRlc3RfY29tbWl0IEMgb25lc2lkZSBjcmVhdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0EvQSBjb25mbGljdCcgJworCWdpdCBjaGVja291dCBCXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXBvcnQgcGF0aCB3aXRoIGNvbmZsaWN0JyAnCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyA+YWN0dWFsICYmCisJZWNobyAiVQlvbmVzaWRlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXBvcnQgbmV3IHBhdGggd2l0aCBjb25mbGljdCcgJworCWdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgSEVBRF4gPmFjdHVhbCAmJgorCWVjaG8gIlUJb25lc2lkZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyMgT24gYnJhbmNoIHNpZGUKKyMgWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCisjICAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IGNvbW1pdCIpCisjCisjIFVubWVyZ2VkIHBhdGhzOgorIyAgICh1c2UgImdpdCBhZGQvcm0gPGZpbGU+Li4uIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pCisjCisjCWRlbGV0ZWQgYnkgdXM6ICAgICAgZm9vCisjCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ00vRCBjb25mbGljdCBkb2VzIG5vdCBzZWdmYXVsdCcgJworCW1rZGlyIG1kY29uZmxpY3QgJiYKKwkoCisJCWNkIG1kY29uZmxpY3QgJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCBmb28gIiIgJiYKKwkJdGVzdF9jb21taXQgbW9kaWZ5IGZvbyBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwkJZ2l0IHJtIGZvbyAmJgorCQlnaXQgY29tbWl0IC1tIGRlbGV0ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1kcnktcnVuID4uLi9hY3R1YWwgJiYKKwkJdGVzdF9pMThuY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwgJiYKKwkJZ2l0IHN0YXR1cyA+Li4vYWN0dWFsICYmCisJCXRlc3RfaTE4bmNtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgJiB1bm1lcmdlZCBzZXR1cCcgJworCWdpdCBybSAtZiAtciAuICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkvUkVBRE1FIiA+T05FICYmCisJZ2l0IGFkZCBPTkUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJPbmUgY29tbWl0IHdpdGggT05FIiAmJgorCisJZWNobyBNb2RpZmllZCA+VFdPICYmCisJY2F0IE9ORSA+PlRXTyAmJgorCWNhdCBPTkUgPj5USFJFRSAmJgorCWdpdCBhZGQgVFdPIFRIUkVFICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgOk9ORSkgJiYKKwlnaXQgcm0gLS1jYWNoZWQgT05FICYmCisJKAorCQllY2hvICIxMDA2NDQgJHNoYTEgMQlPTkUiICYmCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAyCU9ORSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRzaGExIDMJT05FIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWVjaG8gRnVydGhlciA+PlRIUkVFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSAmIHVubWVyZ2VkIHN0YXR1cycgJworCWdpdCBzdGF0dXMgLXN1bm8gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCVVVIE9ORQorCUFNIFRIUkVFCisJQSAgVFdPCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBzaG93cyAyIGFkZGVkICsgMSB1bm1lcmdlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJVQlPTkUKKwlBCVRIUkVFCisJQQlUV08KKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtTSBzaG93cyAyIGFkZGVkICsgMSB1bm1lcmdlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJVQlPTkUKKwlBCVRIUkVFCisJQQlUV08KKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtQyBzaG93cyAyIGNvcGllcyArIDEgdW5tZXJnZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVUJT05FCisJQwlPTkUJVEhSRUUKKwlDCU9ORQlUV08KKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtQyAtLW5hbWUtc3RhdHVzIEhFQUQgfAorCXNlZCAicy9eQ1swLTldKi9DL2ciID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgd2l0aCBhZGQgYW5kIHJtIGFkdmljZSAoZGVsZXRlZCBieSB0aGVtKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgaW5pdCBtYWluLnR4dCBpbml0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNlY29uZF9icmFuY2ggJiYKKwlnaXQgcm0gbWFpbi50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJtYWluLnR4dCBkZWxldGVkIG9uIHNlY29uZF9icmFuY2giICYmCisJdGVzdF9jb21taXQgc2Vjb25kIGNvbmZsaWN0LnR4dCBzZWNvbmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgb25fc2Vjb25kIG1haW4udHh0IG9uX3NlY29uZCAmJgorCXRlc3RfY29tbWl0IG1hc3RlciBjb25mbGljdC50eHQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNlY29uZF9icmFuY2ggJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkjIE9uIGJyYW5jaCBtYXN0ZXIKKwkjIFlvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLgorCSMgICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuICJnaXQgY29tbWl0IikKKwkjCisJIyBVbm1lcmdlZCBwYXRoczoKKwkjICAgKHVzZSAiZ2l0IGFkZC9ybSA8ZmlsZT4uLi4iIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikKKwkjCisJIwlib3RoIGFkZGVkOiAgICAgICAgIGNvbmZsaWN0LnR4dAorCSMJZGVsZXRlZCBieSB0aGVtOiAgICBtYWluLnR4dAorCSMKKwlubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorCUVPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZvciBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0ICYmCisJdGVzdF9jb21taXQgb25lIG1haW4udHh0IG9uZSAmJgorCWdpdCBicmFuY2ggY29uZmxpY3Rfc2Vjb25kICYmCisJZ2l0IG12IG1haW4udHh0IHN1Yl9tYXN0ZXIudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAibWFpbi50eHQgcmVuYW1lZCBpbiBzdWJfbWFzdGVyLnR4dCIgJiYKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3Rfc2Vjb25kICYmCisJZ2l0IG12IG1haW4udHh0IHN1Yl9zZWNvbmQudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAibWFpbi50eHQgcmVuYW1lZCBpbiBzdWJfc2Vjb25kLnR4dCIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgd2l0aCBhZGQgYW5kIHJtIGFkdmljZSAoYm90aCBkZWxldGVkKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgT24gYnJhbmNoIGNvbmZsaWN0X3NlY29uZAorCSMgWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCisJIyAgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorCSMKKwkjIFVubWVyZ2VkIHBhdGhzOgorCSMgICAodXNlICJnaXQgYWRkL3JtIDxmaWxlPi4uLiIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKQorCSMKKwkjCWJvdGggZGVsZXRlZDogICAgICAgbWFpbi50eHQKKwkjCWFkZGVkIGJ5IHRoZW06ICAgICAgc3ViX21hc3Rlci50eHQKKwkjCWFkZGVkIGJ5IHVzOiAgICAgICAgc3ViX3NlY29uZC50eHQKKwkjCisJbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKKwlFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gY29uZmxpY3RzIHdpdGggb25seSBybSBhZHZpY2UgKGJvdGggZGVsZXRlZCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbmZsaWN0X3NlY29uZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdCAmJgorCWdpdCBhZGQgc3ViX21hc3Rlci50eHQgJiYKKwlnaXQgYWRkIHN1Yl9zZWNvbmQudHh0ICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJIyBPbiBicmFuY2ggY29uZmxpY3Rfc2Vjb25kCisJIyBZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4KKwkjICAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IGNvbW1pdCIpCisJIworCSMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisJIworCSMJbmV3IGZpbGU6ICAgc3ViX21hc3Rlci50eHQKKwkjCisJIyBVbm1lcmdlZCBwYXRoczoKKwkjICAgKHVzZSAiZ2l0IHJtIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCSMKKwkjCWJvdGggZGVsZXRlZDogICAgICAgbWFpbi50eHQKKwkjCisJIyBVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKKwlFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMDEtcmVzZXQuc2ggYi90L3Q3MTAxLXJlc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2ZTE2M2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTAxLXJlc2V0LnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgU2hhd24gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXNldCBzaG91bGQgY3VsbCBlbXB0eSBzdWJkaXJzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGluZyBpbml0aWFsIGZpbGVzJyBcCisgICAgJ21rZGlyIHBhdGgwICYmCisgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgcGF0aDAvQ09QWUlORyAmJgorICAgICBnaXQgYWRkIHBhdGgwL0NPUFlJTkcgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSBhZGQgLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGluZyBzZWNvbmQgZmlsZXMnIFwKKyAgICAnbWtkaXIgcGF0aDEgJiYKKyAgICAgbWtkaXIgcGF0aDEvcGF0aDIgJiYKKyAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMS9wYXRoMi9DT1BZSU5HICYmCisgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgcGF0aDEvQ09QWUlORyAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HIENPUFlJTkcgJiYKKyAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMC9DT1BZSU5HLVRPTyAmJgorICAgICBnaXQgYWRkIHBhdGgxL3BhdGgyL0NPUFlJTkcgJiYKKyAgICAgZ2l0IGFkZCBwYXRoMS9DT1BZSU5HICYmCisgICAgIGdpdCBhZGQgQ09QWUlORyAmJgorICAgICBnaXQgYWRkIHBhdGgwL0NPUFlJTkctVE9PICYmCisgICAgIGdpdCBjb21taXQgLW0gY2hhbmdlIC1hJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVzZXR0aW5nIHRyZWUgSEVBRF4nIFwKKyAgICAnZ2l0IHJlc2V0IC0taGFyZCBIRUFEXicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIGluaXRpYWwgZmlsZXMgZXhpc3QgYWZ0ZXIgcmV3aW5kJyBcCisgICAgJ3Rlc3QgLWQgcGF0aDAgJiYKKyAgICAgdGVzdCAtZiBwYXRoMC9DT1BZSU5HJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgbGFjayBvZiBwYXRoMS9wYXRoMi9DT1BZSU5HJyBcCisgICAgJyEgdGVzdCAtZiBwYXRoMS9wYXRoMi9DT1BZSU5HJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgbGFjayBvZiBwYXRoMS9DT1BZSU5HJyBcCisgICAgJyEgdGVzdCAtZiBwYXRoMS9DT1BZSU5HJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgbGFjayBvZiBDT1BZSU5HJyBcCisgICAgJyEgdGVzdCAtZiBDT1BZSU5HJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgY2hlY2tpbmcgbGFjayBvZiBwYXRoMS9DT1BZSU5HLVRPTycgXAorICAgICchIHRlc3QgLWYgcGF0aDAvQ09QWUlORy1UT08nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBsYWNrIG9mIHBhdGgxL3BhdGgyJyBcCisgICAgJyEgdGVzdCAtZCBwYXRoMS9wYXRoMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIGxhY2sgb2YgcGF0aDEnIFwKKyAgICAnISB0ZXN0IC1kIHBhdGgxJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMDItcmVzZXQuc2ggYi90L3Q3MTAyLXJlc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwOTZkYzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTAyLXJlc2V0LnNoCkBAIC0wLDAgKzEsNDk0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IENhcmxvcyBSaWNhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXNldAorCitEb2N1bWVudGVkIHRlc3RzIGZvciBnaXQgcmVzZXQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBpbml0aWFsIGZpbGVzIGFuZCBjb21taXRzJyAnCisJdGVzdF90aWNrICYmCisJZWNobyAiMXN0IGZpbGUiID5maXJzdCAmJgorCWdpdCBhZGQgZmlyc3QgJiYKKwlnaXQgY29tbWl0IC1tICJjcmVhdGUgMXN0IGZpbGUiICYmCisKKwllY2hvICIybmQgZmlsZSIgPnNlY29uZCAmJgorCWdpdCBhZGQgc2Vjb25kICYmCisJZ2l0IGNvbW1pdCAtbSAiY3JlYXRlIDJuZCBmaWxlIiAmJgorCisJZWNobyAiMm5kIGxpbmUgMXN0IGZpbGUiID4+Zmlyc3QgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJtb2RpZnkgMXN0IGZpbGUiICYmCisKKwlnaXQgcm0gZmlyc3QgJiYKKwlnaXQgbXYgc2Vjb25kIHNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJyZW1vdmUgMXN0IGFuZCByZW5hbWUgMm5kIiAmJgorCisJZWNobyAiMXN0IGxpbmUgMm5kIGZpbGUiID5zZWNvbmRmaWxlICYmCisJZWNobyAiMm5kIGxpbmUgMm5kIGZpbGUiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gIm1vZGlmeSAybmQgZmlsZSIKKycKKyMgZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lICMgdG8gc2VlIHRob3NlIFNIQTEgaW52b2x2ZWQKKworY2hlY2tfY2hhbmdlcyAoKSB7CisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkMSIgJiYKKwlnaXQgZGlmZiB8IHRlc3RfY21wIC5kaWZmX2V4cGVjdCAtICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgfCB0ZXN0X2NtcCAuY2FjaGVkX2V4cGVjdCAtICYmCisJZm9yIEZJTEUgaW4gKgorCWRvCisJCWVjaG8gJEZJTEUnOicKKwkJY2F0ICRGSUxFIHx8IHJldHVybgorCWRvbmUgfCB0ZXN0X2NtcCAuY2F0X2V4cGVjdCAtCit9CisKKz4uZGlmZl9leHBlY3QKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyBhIG5vbiBleGlzdGluZyByZXZpc2lvbiBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCBhYWFhYWEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1taXhlZCBhYWFhYWEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0IGFhYWFhYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgYWFhYWFhICYmCisJY2hlY2tfY2hhbmdlcyAzZWMzOTY1MWU3ZjQ0ZWE1MzFhNWRlMThhOWZhNzkxYzBmZDM3MGZjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tc29mdCB3aXRoIHVubWVyZ2VkIGluZGV4IHNob3VsZCBmYWlsJyAnCisJdG91Y2ggLmdpdC9NRVJHRV9IRUFEICYmCisJZWNobyAiMTAwNjQ0IDQ0YzViNTg4NDU1MGMxNzc1ODczN2VkY2NlZDQ2MzQ0N2I5MWQ0MmIgMQl1biIgfAorCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgSEVBRCAmJgorCXJtIC5naXQvTUVSR0VfSEVBRCAmJgorCWdpdCBybSAtLWNhY2hlZCAtLSB1bgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l2aW5nIHBhdGhzIHdpdGggb3B0aW9ucyBkaWZmZXJlbnQgdGhhbiAtLW1peGVkIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCAtLSBmaXJzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgLS0gZmlyc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReIC0tIGZpcnN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAtLSBmaXJzdCAmJgorCWNoZWNrX2NoYW5nZXMgM2VjMzk2NTFlN2Y0NGVhNTMxYTVkZTE4YTlmYTc5MWMwZmQzNzBmYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZpbmcgdW5yZWNvZ25pemVkIG9wdGlvbnMgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1vdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLW1peGVkIC0tb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1taXhlZCAtbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgLS1vdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgLW8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1oYXJkIC0tb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1oYXJkIC1vICYmCisJY2hlY2tfY2hhbmdlcyAzZWMzOTY1MWU3ZjQ0ZWE1MzFhNWRlMThhOWZhNzkxYzBmZDM3MGZjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0cnlpbmcgdG8gZG8gcmVzZXQgLS1zb2Z0IHdpdGggcGVuZGluZyBtZXJnZSBzaG91bGQgZmFpbCcgJworCWdpdCBicmFuY2ggYnJhbmNoMSAmJgorCWdpdCBicmFuY2ggYnJhbmNoMiAmJgorCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwllY2hvICIzcmQgbGluZSBpbiBicmFuY2gxIiA+PnNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMSIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gyICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoMiIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIGluIGJyYW5jaDIiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgJiYKKworCXByaW50ZiAiMXN0IGxpbmUgMm5kIGZpbGVcbjJuZCBsaW5lIDJuZCBmaWxlXG4zcmQgbGluZSIgPnNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0aGUgY2hhbmdlIGluIGJyYW5jaDIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBicmFuY2gxIGJyYW5jaDIgJiYKKwljaGVja19jaGFuZ2VzIDNlYzM5NjUxZTdmNDRlYTUzMWE1ZGUxOGE5ZmE3OTFjMGZkMzcwZmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBkbyByZXNldCAtLXNvZnQgd2l0aCBwZW5kaW5nIGNoZWNrb3V0IG1lcmdlIHNob3VsZCBmYWlsJyAnCisJZ2l0IGJyYW5jaCBicmFuY2gzICYmCisJZ2l0IGJyYW5jaCBicmFuY2g0ICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMyAmJgorCWVjaG8gIjNyZCBsaW5lIGluIGJyYW5jaDMiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImxpbmUgaW4gYnJhbmNoMyIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2g0ICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoNCIgPj5zZWNvbmRmaWxlICYmCisKKwlnaXQgY2hlY2tvdXQgLW0gYnJhbmNoMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgJiYKKworCXByaW50ZiAiMXN0IGxpbmUgMm5kIGZpbGVcbjJuZCBsaW5lIDJuZCBmaWxlXG4zcmQgbGluZSIgPnNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0aGUgbGluZSBpbiBicmFuY2gzIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgYnJhbmNoMyBicmFuY2g0ICYmCisJY2hlY2tfY2hhbmdlcyAzZWMzOTY1MWU3ZjQ0ZWE1MzFhNWRlMThhOWZhNzkxYzBmZDM3MGZjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdyZXNldHRpbmcgdG8gSEVBRCB3aXRoIG5vIGNoYW5nZXMgc2hvdWxkIHN1Y2NlZWQgYW5kIGRvIG5vdGhpbmcnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWNoZWNrX2NoYW5nZXMgM2VjMzk2NTFlN2Y0NGVhNTMxYTVkZTE4YTlmYTc5MWMwZmQzNzBmYyAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCQljaGVja19jaGFuZ2VzIDNlYzM5NjUxZTdmNDRlYTUzMWE1ZGUxOGE5ZmE3OTFjMGZkMzcwZmMgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0ICYmCisJCWNoZWNrX2NoYW5nZXMgM2VjMzk2NTFlN2Y0NGVhNTMxYTVkZTE4YTlmYTc5MWMwZmQzNzBmYyAmJgorCWdpdCByZXNldCAtLXNvZnQgSEVBRCAmJgorCQljaGVja19jaGFuZ2VzIDNlYzM5NjUxZTdmNDRlYTUzMWE1ZGUxOGE5ZmE3OTFjMGZkMzcwZmMgJiYKKwlnaXQgcmVzZXQgLS1taXhlZCAmJgorCQljaGVja19jaGFuZ2VzIDNlYzM5NjUxZTdmNDRlYTUzMWE1ZGUxOGE5ZmE3OTFjMGZkMzcwZmMgJiYKKwlnaXQgcmVzZXQgLS1taXhlZCBIRUFEICYmCisJCWNoZWNrX2NoYW5nZXMgM2VjMzk2NTFlN2Y0NGVhNTMxYTVkZTE4YTlmYTc5MWMwZmQzNzBmYyAmJgorCWdpdCByZXNldCAmJgorCQljaGVja19jaGFuZ2VzIDNlYzM5NjUxZTdmNDRlYTUzMWE1ZGUxOGE5ZmE3OTFjMGZkMzcwZmMgJiYKKwlnaXQgcmVzZXQgSEVBRCAmJgorCQljaGVja19jaGFuZ2VzIDNlYzM5NjUxZTdmNDRlYTUzMWE1ZGUxOGE5ZmE3OTFjMGZkMzcwZmMKKycKKworPi5kaWZmX2V4cGVjdAorY2F0ID4uY2FjaGVkX2V4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL3NlY29uZGZpbGUgYi9zZWNvbmRmaWxlCitpbmRleCAxYmJiYTc5Li40NGM1YjU4IDEwMDY0NAorLS0tIGEvc2Vjb25kZmlsZQorKysrIGIvc2Vjb25kZmlsZQorQEAgLTEgKzEsMiBAQAorLTJuZCBmaWxlCisrMXN0IGxpbmUgMm5kIGZpbGUKKysybmQgbGluZSAybmQgZmlsZQorRU9GCitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc29mdCByZXNldCBvbmx5IHNob3VsZCBzaG93IGNoYW5nZXMgaW4gZGlmZiAtLWNhY2hlZCcgJworCWdpdCByZXNldCAtLXNvZnQgSEVBRF4gJiYKKwljaGVja19jaGFuZ2VzIGQxYTRiYzNhYmNlNDgyOTYyOGFlMmRjYjBkNjBlZjNkMWE3OGIxYzQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgT1JJR19IRUFEKSIgPSBcCisJCQkzZWMzOTY1MWU3ZjQ0ZWE1MzFhNWRlMThhOWZhNzkxYzBmZDM3MGZjCisnCisKKz4uZGlmZl9leHBlY3QKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorM3JkIGxpbmUgMm5kIGZpbGUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoYW5naW5nIGZpbGVzIGFuZCByZWRvIHRoZSBsYXN0IGNvbW1pdCBzaG91bGQgc3VjY2VlZCcgJworCWVjaG8gIjNyZCBsaW5lIDJuZCBmaWxlIiA+PnNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1DIE9SSUdfSEVBRCAmJgorCWNoZWNrX2NoYW5nZXMgM2QzYjdiZTAxMWE1OGNhMGMxNzlhZTQ1ZDk0ZTZjODNjMGIwY2QwZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBPUklHX0hFQUQpIiA9IFwKKwkJCTNlYzM5NjUxZTdmNDRlYTUzMWE1ZGUxOGE5ZmE3OTFjMGZkMzcwZmMKKycKKworPi5kaWZmX2V4cGVjdAorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitmaXJzdDoKKzFzdCBmaWxlCisybmQgbGluZSAxc3QgZmlsZQorc2Vjb25kOgorMm5kIGZpbGUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy0taGFyZCByZXNldCBzaG91bGQgY2hhbmdlIHRoZSBmaWxlcyBhbmQgdW5kbyBjb21taXRzIHBlcm1hbmVudGx5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgJiYKKwljaGVja19jaGFuZ2VzIGRkYWVmZTAwZjFkYTE2ODY0NTkxYzYxZmRjN2FkYjVkN2NkNmI3NGUgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgT1JJR19IRUFEKSIgPSBcCisJCQkzZDNiN2JlMDExYTU4Y2EwYzE3OWFlNDVkOTRlNmM4M2MwYjBjZDBkCisnCisKKz4uZGlmZl9leHBlY3QKK2NhdCA+LmNhY2hlZF9leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9maXJzdCBiL2ZpcnN0CitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDgyMDZjMjIuLjAwMDAwMDAKKy0tLSBhL2ZpcnN0CisrKysgL2Rldi9udWxsCitAQCAtMSwyICswLDAgQEAKKy0xc3QgZmlsZQorLTJuZCBsaW5lIDFzdCBmaWxlCitkaWZmIC0tZ2l0IGEvc2Vjb25kIGIvc2Vjb25kCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDFiYmJhNzkuLjAwMDAwMDAKKy0tLSBhL3NlY29uZAorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLTJuZCBmaWxlCitkaWZmIC0tZ2l0IGEvc2Vjb25kZmlsZSBiL3NlY29uZGZpbGUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40NGM1YjU4CistLS0gL2Rldi9udWxsCisrKysgYi9zZWNvbmRmaWxlCitAQCAtMCwwICsxLDIgQEAKKysxc3QgbGluZSAybmQgZmlsZQorKzJuZCBsaW5lIDJuZCBmaWxlCitFT0YKK2NhdCA+LmNhdF9leHBlY3QgPDxFT0YKK3NlY29uZGZpbGU6Cisxc3QgbGluZSAybmQgZmlsZQorMm5kIGxpbmUgMm5kIGZpbGUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3JlZG9pbmcgY2hhbmdlcyBhZGRpbmcgdGhlbSB3aXRob3V0IGNvbW1pdCB0aGVtIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHJtIGZpcnN0ICYmCisJZ2l0IG12IHNlY29uZCBzZWNvbmRmaWxlICYmCisKKwllY2hvICIxc3QgbGluZSAybmQgZmlsZSIgPnNlY29uZGZpbGUgJiYKKwllY2hvICIybmQgbGluZSAybmQgZmlsZSIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJY2hlY2tfY2hhbmdlcyBkZGFlZmUwMGYxZGExNjg2NDU5MWM2MWZkYzdhZGI1ZDdjZDZiNzRlCisnCisKK2NhdCA+LmRpZmZfZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvZmlyc3QgYi9maXJzdAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA4MjA2YzIyLi4wMDAwMDAwCistLS0gYS9maXJzdAorKysrIC9kZXYvbnVsbAorQEAgLTEsMiArMCwwIEBACistMXN0IGZpbGUKKy0ybmQgbGluZSAxc3QgZmlsZQorZGlmZiAtLWdpdCBhL3NlY29uZCBiL3NlY29uZAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAxYmJiYTc5Li4wMDAwMDAwCistLS0gYS9zZWNvbmQKKysrKyAvZGV2L251bGwKK0BAIC0xICswLDAgQEAKKy0ybmQgZmlsZQorRU9GCis+LmNhY2hlZF9leHBlY3QKK2NhdCA+LmNhdF9leHBlY3QgPDxFT0YKK3NlY29uZGZpbGU6Cisxc3QgbGluZSAybmQgZmlsZQorMm5kIGxpbmUgMm5kIGZpbGUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1taXhlZCByZXNldCB0byBIRUFEIHNob3VsZCB1bmFkZCB0aGUgZmlsZXMnICcKKwlnaXQgcmVzZXQgJiYKKwljaGVja19jaGFuZ2VzIGRkYWVmZTAwZjFkYTE2ODY0NTkxYzYxZmRjN2FkYjVkN2NkNmI3NGUgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgT1JJR19IRUFEKSIgPSBcCisJCQlkZGFlZmUwMGYxZGExNjg2NDU5MWM2MWZkYzdhZGI1ZDdjZDZiNzRlCisnCisKKz4uZGlmZl9leHBlY3QKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRvaW5nIHRoZSBsYXN0IHR3byBjb21taXRzIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBkZGFlZmUwMGYxZGExNjg2NDU5MWM2MWZkYzdhZGI1ZDdjZDZiNzRlICYmCisKKwlnaXQgcm0gZmlyc3QgJiYKKwlnaXQgbXYgc2Vjb25kIHNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJyZW1vdmUgMXN0IGFuZCByZW5hbWUgMm5kIiAmJgorCisJZWNobyAiMXN0IGxpbmUgMm5kIGZpbGUiID5zZWNvbmRmaWxlICYmCisJZWNobyAiMm5kIGxpbmUgMm5kIGZpbGUiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gIm1vZGlmeSAybmQgZmlsZSIgJiYKKwljaGVja19jaGFuZ2VzIDNlYzM5NjUxZTdmNDRlYTUzMWE1ZGUxOGE5ZmE3OTFjMGZkMzcwZmMKKycKKworPi5kaWZmX2V4cGVjdAorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCiszcmQgbGluZSBpbiBicmFuY2gyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taGFyZCByZXNldCB0byBIRUFEIHNob3VsZCBjbGVhciBhIGZhaWxlZCBtZXJnZScgJworCWdpdCBicmFuY2ggYnJhbmNoMSAmJgorCWdpdCBicmFuY2ggYnJhbmNoMiAmJgorCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwllY2hvICIzcmQgbGluZSBpbiBicmFuY2gxIiA+PnNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMSIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gyICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoMiIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIGluIGJyYW5jaDIiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIGJyYW5jaDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2hlY2tfY2hhbmdlcyA3N2FiYjMzNzA3M2ZiNDM2OWE3YWQ2OWZmNmY1ZWMwZTRkNmI1NGJiCisnCisKKz4uZGlmZl9leHBlY3QKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLS1oYXJkIHJlc2V0IHRvIE9SSUdfSEVBRCBzaG91bGQgY2xlYXIgYSBmYXN0LWZvcndhcmQgbWVyZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJY2hlY2tfY2hhbmdlcyAzZWMzOTY1MWU3ZjQ0ZWE1MzFhNWRlMThhOWZhNzkxYzBmZDM3MGZjICYmCisKKwlnaXQgcHVsbCAuIGJyYW5jaDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIE9SSUdfSEVBRCAmJgorCWNoZWNrX2NoYW5nZXMgM2VjMzk2NTFlN2Y0NGVhNTMxYTVkZTE4YTlmYTc5MWMwZmQzNzBmYyAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgYnJhbmNoMSBicmFuY2gyICYmCisJY2hlY2tfY2hhbmdlcyAzZWMzOTY1MWU3ZjQ0ZWE1MzFhNWRlMThhOWZhNzkxYzBmZDM3MGZjCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCitpbmRleCBkMDA0OTFmLi43ZWQ2ZmY4IDEwMDY0NAorLS0tIGEvZmlsZTEKKysrKyBiL2ZpbGUxCitAQCAtMSArMSBAQAorLTEKKys1CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwY2ZiZjA4Li4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLTIKK0VPRgorY2F0ID4gY2FjaGVkX2V4cGVjdCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlNCBiL2ZpbGU0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjg2MjZjNAorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTQKK0BAIC0wLDAgKzEgQEAKKys0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1taXhlZCA8cGF0aHM+JyAnCisJZWNobyAxID4gZmlsZTEgJiYKKwllY2hvIDIgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZpbGVzICYmCisJZ2l0IHJtIGZpbGUyICYmCisJZWNobyAzID4gZmlsZTMgJiYKKwllY2hvIDQgPiBmaWxlNCAmJgorCWVjaG8gNSA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSBmaWxlMyBmaWxlNCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCBIRUFEIC0tIGZpbGUxIGZpbGUyIGZpbGUzICYmCisJZ2l0IGRpZmYgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgY2FjaGVkX2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJlc2V0dGluZyB0aGUgaW5kZXggYXQgZ2l2ZSBwYXRocycgJworCisJbWtkaXIgc3ViICYmCisJPnN1Yi9maWxlMSAmJgorCT5zdWIvZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHN1Yi9maWxlMSBzdWIvZmlsZTIgJiYKKwlUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IEhFQUQgc3ViL2ZpbGUyICYmCisJVT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWVjaG8gIiRUIiAmJgorCWVjaG8gIiRVIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tZXhpdC1jb2RlICIkVCIgJiYKKwl0ZXN0ICIkVCIgIT0gIiRVIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0dGluZyBhbiB1bm1vZGlmaWVkIHBhdGggaXMgYSBuby1vcCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcmVzZXQgLS0gZmlsZTEgJiYKKwlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoKK00JZmlsZTIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1peGVkIHJlZnJlc2hlcyB0aGUgaW5kZXgnICcKKwllY2hvIDEyMyA+PiBmaWxlMiAmJgorCWdpdCByZXNldCAtLW1peGVkIEhFQUQgPiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldHRpbmcgc3BlY2lmaWMgcGF0aCB0aGF0IGlzIHVubWVyZ2VkJyAnCisJZ2l0IHJtIC0tY2FjaGVkIGZpbGUyICYmCisJRjE9JChnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZTEpICYmCisJRjI9JChnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZTIpICYmCisJRjM9JChnaXQgcmV2LXBhcnNlIEhFQUQ6c2Vjb25kZmlsZSkgJiYKKwl7CisJCWVjaG8gIjEwMDY0NCAkRjEgMQlmaWxlMiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRGMiAyCWZpbGUyIiAmJgorCQllY2hvICIxMDA2NDQgJEYzIDMJZmlsZTIiCisJfSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJZ2l0IGxzLWZpbGVzIC11ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IEhFQUQgZmlsZTIgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICgxKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IHNlY29uZGZpbGUgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5KSIgJiYKKwl0ZXN0IC1mIHNlY29uZGZpbGUgJiYKKwl0ZXN0ICEgLXMgc2Vjb25kZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICgyKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJcm0gLWYgc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCBzZWNvbmRmaWxlICYmCisJdGVzdCAtbiAiJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSAtLSBzZWNvbmRmaWxlKSIgJiYKKwl0ZXN0ICEgLWYgc2Vjb25kZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICgzKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJcm0gLWYgc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCBIRUFEIHNlY29uZGZpbGUgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5KSIgJiYKKwl0ZXN0ICEgLWYgc2Vjb25kZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICg0KScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJcm0gLWYgc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLSBzZWNvbmRmaWxlICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSkiICYmCisJdGVzdCAhIC1mIHNlY29uZGZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTAzLXJlc2V0LWJhcmUuc2ggYi90L3Q3MTAzLXJlc2V0LWJhcmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWVlZjkzYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMDMtcmVzZXQtYmFyZS5zaApAQCAtMCwwICsxLDY5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0IGluIGEgYmFyZSByZXBvc2l0b3J5JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5vbi1iYXJlJyAnCisJZWNobyBvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gdHdvID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImhhcmQiIHJlc2V0IHJlcXVpcmVzIGEgd29ya3RyZWUnICcKKwkoY2QgLmdpdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1oYXJkKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibWVyZ2UiIHJlc2V0IHJlcXVpcmVzIGEgd29ya3RyZWUnICcKKwkoY2QgLmdpdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1tZXJnZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImtlZXAiIHJlc2V0IHJlcXVpcmVzIGEgd29ya3RyZWUnICcKKwkoY2QgLmdpdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1rZWVwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibWl4ZWQiIHJlc2V0IGlzIG9rJyAnCisJKGNkIC5naXQgJiYgZ2l0IHJlc2V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic29mdCIgcmVzZXQgaXMgb2snICcKKwkoY2QgLmdpdCAmJiBnaXQgcmVzZXQgLS1zb2Z0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXJkIHJlc2V0IHdvcmtzIHdpdGggR0lUX1dPUktfVFJFRScgJworCW1rZGlyIHdvcmt0cmVlICYmCisJR0lUX1dPUktfVFJFRT0kUFdEL3dvcmt0cmVlIEdJVF9ESVI9JFBXRC8uZ2l0IGdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X2NtcCBmaWxlIHdvcmt0cmVlL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFyZScgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdCAmJgorCWNkIGJhcmUuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJoYXJkIiByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBiYXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibWVyZ2UiIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGJhcmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1tZXJnZSBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcia2VlcCIgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYmFyZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIm1peGVkIiByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBiYXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWl4ZWQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInNvZnQiIHJlc2V0IGlzIGFsbG93ZWQgaW4gYmFyZScgJworCWdpdCByZXNldCAtLXNvZnQgSEVBRF4gJiYKKwl0ZXN0ICJgZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiVzIHwgaGVhZCAtbiAxYCIgPSAib25lIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMDQtcmVzZXQuc2ggYi90L3Q3MTA0LXJlc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxMzZlZTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTA0LXJlc2V0LnNoCkBAIC0wLDAgKzEsNDYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXNldCAtLWhhcmQgdW5tZXJnZWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCW1rZGlyIGJlZm9yZSBsYXRlciAmJgorCT5iZWZvcmUvMSAmJgorCT5iZWZvcmUvMiAmJgorCT5oZWxsbyAmJgorCT5sYXRlci8zICYmCisJZ2l0IGFkZCBiZWZvcmUgaGVsbG8gbGF0ZXIgJiYKKwlnaXQgY29tbWl0IC1tIHdvcmxkICYmCisKKwlIPSQoZ2l0IHJldi1wYXJzZSA6aGVsbG8pICYmCisJZ2l0IHJtIC0tY2FjaGVkIGhlbGxvICYmCisJZWNobyAiMTAwNjQ0ICRIIDIJaGVsbG8iIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKworCXJtIC1mIGhlbGxvICYmCisJbWtkaXIgLXAgaGVsbG8gJiYKKwk+aGVsbG8vd29ybGQgJiYKKwl0ZXN0ICIkKGdpdCBscy1maWxlcyAtbykiID0gaGVsbG8vd29ybGQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgc2hvdWxkIHJlc3RvcmUgdW5tZXJnZWQgb25lcycgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYmVmb3JlLzEgYmVmb3JlLzIgaGVsbG8gbGF0ZXIvMyAmJgorCXRlc3QgLWYgaGVsbG8KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgZGlkIG5vdCBjb3JydXB0IGluZGV4IG5vciBjYWNoZWQtdHJlZScgJworCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGJlZm9yZSBoZWxsbyBsYXRlciAmJgorCVU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0ICIkVCIgPSAiJFUiCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTA1LXJlc2V0LXBhdGNoLnNoIGIvdC90NzEwNS1yZXNldC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NWZhYjIwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzEwNS1yZXNldC1wYXRjaC5zaApAQCAtMCwwICsxLDY5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0IC0tcGF0Y2gnCisuIC4vbGliLXBhdGNoLW1vZGUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCcgJworCW1rZGlyIGRpciAmJgorCWVjaG8gcGFyZW50ID4gZGlyL2ZvbyAmJgorCWVjaG8gZHVtbXkgPiBiYXIgJiYKKwlnaXQgYWRkIGRpciAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBkaXIvZm9vIGhlYWQgJiYKKwlzZXRfYW5kX3NhdmVfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNhdmVfaGVhZAorJworCisjIG5vdGU6IGJhciBzb3J0cyBiZWZvcmUgZm9vLCBzbyB0aGUgZmlyc3QgJ24nIGlzIGFsd2F5cyB0byBza2lwICdiYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2F5aW5nICJuIiBkb2VzIG5vdGhpbmcnICcKKwlzZXRfYW5kX3NhdmVfc3RhdGUgZGlyL2ZvbyB3b3JrIHdvcmsgJiYKKwkoZWNobyBuOyBlY2hvIG4pIHwgZ2l0IHJlc2V0IC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wJyAnCisJKGVjaG8gbjsgZWNobyB5KSB8IGdpdCByZXNldCAtcCAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgSEVBRF4nICcKKwkoZWNobyBuOyBlY2hvIHkpIHwgZ2l0IHJlc2V0IC1wIEhFQUReICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBwYXJlbnQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKKyMgVGhlIGlkZWEgaW4gdGhlIHJlc3QgaXMgdGhhdCBiYXIgc29ydHMgZmlyc3QsIHNvIHdlIGFsd2F5cyBzYXkgJ3knCisjIGZpcnN0IGFuZCBpZiB0aGUgcGF0aCBsaW1pdGVyIGZhaWxzIGl0J2xsIGFwcGx5IHRvIGJhciBpbnN0ZWFkIG9mCisjIGRpci9mb28uICBUaGVyZSdzIGFsd2F5cyBhbiBleHRyYSAnbicgdG8gcmVqZWN0IGVkaXRzIHRvIGRpci9mb28gaW4KKyMgdGhlIGZhaWx1cmUgY2FzZSAoYW5kIHRodXMgZ2V0IG91dCBvZiB0aGUgbG9vcCkuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wIGRpcicgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgd29yayAmJgorCShlY2hvIHk7IGVjaG8gbikgfCBnaXQgcmVzZXQgLXAgZGlyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXNldCAtcCAtLSBmb28gKGluc2lkZSBkaXIpJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayB3b3JrICYmCisJKGVjaG8geTsgZWNobyBuKSB8IChjZCBkaXIgJiYgZ2l0IHJlc2V0IC1wIC0tIGZvbykgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wIEhFQUReIC0tIGRpcicgJworCShlY2hvIHk7IGVjaG8gbikgfCBnaXQgcmVzZXQgLXAgSEVBRF4gLS0gZGlyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBwYXJlbnQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnbm9uZSBvZiB0aGlzIG1vdmVkIEhFQUQnICcKKwl2ZXJpZnlfc2F2ZWRfaGVhZAorJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzExMC1yZXNldC1tZXJnZS5zaCBiL3QvdDcxMTAtcmVzZXQtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTgyYTA3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMTAtcmVzZXQtbWVyZ2Uuc2gKQEAgLTAsMCArMSwyOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgQ2hyaXN0aWFuIENvdWRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBmb3IgImdpdCByZXNldCIgd2l0aCAiLS1tZXJnZSIgYW5kICItLWtlZXAiIG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKyAgICBmb3IgaSBpbiAxIDIgMzsgZG8gZWNobyBsaW5lICRpOyBkb25lID5maWxlMSAmJgorICAgIGNhdCBmaWxlMSA+ZmlsZTIgJiYKKyAgICBnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisgICAgdGVzdF90aWNrICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisgICAgZ2l0IHRhZyBpbml0aWFsICYmCisgICAgZWNobyBsaW5lIDQgPj5maWxlMSAmJgorICAgIGNhdCBmaWxlMSA+ZmlsZTIgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1tICJhZGQgbGluZSA0IHRvIGZpbGUxIiBmaWxlMSAmJgorICAgIGdpdCB0YWcgc2Vjb25kCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBDICAgICAgIEMgICAgIEMgICAgRCAgICAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECisjIGZpbGUyOiAgICAgQyAgICAgICBEICAgICBEICAgIEQgICAgIC0tbWVyZ2UgIEMgICAgICAgRCAgICAgRAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBpcyBvayB3aXRoIGNoYW5nZXMgaW4gZmlsZSBpdCBkb2VzIG5vdCB0b3VjaCcgJworICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUReICYmCisgICAgISBncmVwIDQgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBpcyBvayB3aGVuIHN3aXRjaGluZyBiYWNrJyAnCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2Ugc2Vjb25kICYmCisgICAgZ3JlcCA0IGZpbGUxICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEMgICAgICAgQyAgICAgQyAgICBEICAgICAtLWtlZXAgICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEQgICAgIEQgICAgRCAgICAgLS1rZWVwICAgQyAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAgaXMgb2sgd2l0aCBjaGFuZ2VzIGluIGZpbGUgaXQgZG9lcyBub3QgdG91Y2gnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgorICAgIGNhdCBmaWxlMSA+ZmlsZTIgJiYKKyAgICBnaXQgcmVzZXQgLS1rZWVwIEhFQUReICYmCisgICAgISBncmVwIDQgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1rZWVwIGlzIG9rIHdoZW4gc3dpdGNoaW5nIGJhY2snICcKKyAgICBnaXQgcmVzZXQgLS1rZWVwIHNlY29uZCAmJgorICAgIGdyZXAgNCBmaWxlMSAmJgorICAgIGdyZXAgNCBmaWxlMiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBCICAgICAgIEIgICAgIEMgICAgRCAgICAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECisjIGZpbGUyOiAgICAgQyAgICAgICBEICAgICBEICAgIEQgICAgIC0tbWVyZ2UgIEMgICAgICAgRCAgICAgRAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBkaXNjYXJkcyBjaGFuZ2VzIGFkZGVkIHRvIGluZGV4ICgxKScgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgY2F0IGZpbGUxID5maWxlMiAmJgorICAgIGVjaG8gImxpbmUgNSIgPj4gZmlsZTEgJiYKKyAgICBnaXQgYWRkIGZpbGUxICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4gJiYKKyAgICAhIGdyZXAgNCBmaWxlMSAmJgorICAgICEgZ3JlcCA1IGZpbGUxICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgaW5pdGlhbCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tbWVyZ2UgaXMgb2sgYWdhaW4gd2hlbiBzd2l0Y2hpbmcgYmFjayAoMSknICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKyAgICBlY2hvICJsaW5lIDUiID4+IGZpbGUyICYmCisgICAgZ2l0IGFkZCBmaWxlMiAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIHNlY29uZCAmJgorICAgICEgZ3JlcCA0IGZpbGUyICYmCisgICAgISBncmVwIDUgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTEgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgQiAgICAgICBCICAgICBDICAgIEQgICAgIC0ta2VlcCAgIChkaXNhbGxvd2VkKQordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1rZWVwIGZhaWxzIHdpdGggY2hhbmdlcyBpbiBpbmRleCBpbiBmaWxlcyBpdCB0b3VjaGVzJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBlY2hvICJsaW5lIDUiID4+IGZpbGUxICYmCisgICAgZ2l0IGFkZCBmaWxlMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4KKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEMgICAgICAgQyAgICAgQyAgICBEICAgICAtLW1lcmdlICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEMgICAgIEQgICAgRCAgICAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGRpc2NhcmRzIGNoYW5nZXMgYWRkZWQgdG8gaW5kZXggKDIpJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBlY2hvICJsaW5lIDQiID4+IGZpbGUyICYmCisgICAgZ2l0IGFkZCBmaWxlMiAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUReICYmCisgICAgISBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBpcyBvayBhZ2FpbiB3aGVuIHN3aXRjaGluZyBiYWNrICgyKScgJworICAgIGdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIHNlY29uZCAmJgorICAgICEgZ3JlcCA0IGZpbGUyICYmCisgICAgZ3JlcCA0IGZpbGUxICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEMgICAgICAgQyAgICAgQyAgICBEICAgICAtLWtlZXAgICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEMgICAgIEQgICAgRCAgICAgLS1rZWVwICAgQyAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAga2VlcHMgY2hhbmdlcyBpdCBkb2VzIG5vdCB0b3VjaCcgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZWNobyAibGluZSA0IiA+PiBmaWxlMiAmJgorICAgIGdpdCBhZGQgZmlsZTIgJiYKKyAgICBnaXQgcmVzZXQgLS1rZWVwIEhFQUReICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgaW5pdGlhbCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0ta2VlcCBrZWVwcyBjaGFuZ2VzIHdoZW4gc3dpdGNoaW5nIGJhY2snICcKKyAgICBnaXQgcmVzZXQgLS1rZWVwIHNlY29uZCAmJgorICAgIGdyZXAgNCBmaWxlMiAmJgorICAgIGdyZXAgNCBmaWxlMSAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBBICAgICAgIEIgICAgIEIgICAgQyAgICAgLS1tZXJnZSAgKGRpc2FsbG93ZWQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGZhaWxzIHdpdGggY2hhbmdlcyBpbiBmaWxlIGl0IHRvdWNoZXMnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgorICAgIGVjaG8gImxpbmUgNSIgPj4gZmlsZTEgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1tICJhZGQgbGluZSA1IiBmaWxlMSAmJgorICAgIHNlZCAtZSAicy9saW5lIDEvY2hhbmdlZCBsaW5lIDEvIiA8ZmlsZTEgPmZpbGUzICYmCisgICAgbXYgZmlsZTMgZmlsZTEgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1tZXJnZSBIRUFEXiAyPmVyci5sb2cgJiYKKyAgICBncmVwIGZpbGUxIGVyci5sb2cgfCBncmVwICJub3QgdXB0b2RhdGUiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBBICAgICAgIEIgICAgIEIgICAgQyAgICAgLS1rZWVwICAgKGRpc2FsbG93ZWQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAgZmFpbHMgd2l0aCBjaGFuZ2VzIGluIGZpbGUgaXQgdG91Y2hlcycgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZWNobyAibGluZSA1IiA+PiBmaWxlMSAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLW0gImFkZCBsaW5lIDUiIGZpbGUxICYmCisgICAgc2VkIC1lICJzL2xpbmUgMS9jaGFuZ2VkIGxpbmUgMS8iIDxmaWxlMSA+ZmlsZTMgJiYKKyAgICBtdiBmaWxlMyBmaWxlMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4gMj5lcnIubG9nICYmCisgICAgZ3JlcCBmaWxlMSBlcnIubG9nIHwgZ3JlcCAibm90IHVwdG9kYXRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAzIGRpZmZlcmVudCBicmFuY2hlcycgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gxICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gyICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gzICYmCisgICAgZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKyAgICBlY2hvICJsaW5lIDUgaW4gYnJhbmNoMSIgPj4gZmlsZTEgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMSIgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorICAgIGVjaG8gImxpbmUgNSBpbiBicmFuY2gyIiA+PiBmaWxlMSAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBpbiBicmFuY2gyIiAmJgorICAgIGdpdCB0YWcgdGhpcmQgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMyAmJgorICAgIGVjaG8gYSBuZXcgZmlsZSA+ZmlsZTMgJiYKKyAgICBybSAtZiBmaWxlMSAmJgorICAgIGdpdCBhZGQgZmlsZTMgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMyIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBDICAgICAtLW1lcmdlICBDICAgICAgIEMgICAgIEMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLW1lcmdlIEhFQUReIiBpcyBvayB3aXRoIHBlbmRpbmcgbWVyZ2UnICcKKyAgICBnaXQgY2hlY2tvdXQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUReICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBDICAgICAtLWtlZXAgICAoZGlzYWxsb3dlZCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLWtlZXAgSEVBRF4iIGZhaWxzIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4gMj5lcnIubG9nICYmCisgICAgdGVzdF9pMThuZ3JlcCAibWlkZGxlIG9mIGEgbWVyZ2UiIGVyci5sb2cKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBCICAgICAtLW1lcmdlICBCICAgICAgIEIgICAgIEIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLW1lcmdlIEhFQUQiIGlzIG9rIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUQgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSB0aGlyZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZikiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBYICAgICAgIFUgICAgIEIgICAgQiAgICAgLS1rZWVwICAgKGRpc2FsbG93ZWQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcicmVzZXQgLS1rZWVwIEhFQUQiIGZhaWxzIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRCAyPmVyci5sb2cgJiYKKyAgICB0ZXN0X2kxOG5ncmVwICJtaWRkbGUgb2YgYSBtZXJnZSIgZXJyLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1lcmdlIGlzIG9rIHdpdGggYWRkZWQvZGVsZXRlZCBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICBybSAtZiBmaWxlMiAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gzICYmCisgICAgISB0ZXN0IC1mIGZpbGUyICYmCisgICAgdGVzdCAtZiBmaWxlMyAmJgorICAgIGdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbGUzICYmCisgICAgZ2l0IGRpZmYgLS1leGl0LWNvZGUgYnJhbmNoMyBmaWxlMyAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUQgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTMgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTIgJiYKKyAgICBnaXQgZGlmZiAtLWV4aXQtY29kZSAtLWNhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWtlZXAgZmFpbHMgd2l0aCBhZGRlZC9kZWxldGVkIG1lcmdlJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCB0aGlyZCAmJgorICAgIHJtIC1mIGZpbGUyICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaDMgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTIgJiYKKyAgICB0ZXN0IC1mIGZpbGUzICYmCisgICAgZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmlsZTMgJiYKKyAgICBnaXQgZGlmZiAtLWV4aXQtY29kZSBicmFuY2gzIGZpbGUzICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0ta2VlcCBIRUFEIDI+ZXJyLmxvZyAmJgorICAgIHRlc3RfaTE4bmdyZXAgIm1pZGRsZSBvZiBhIG1lcmdlIiBlcnIubG9nCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzExMS1yZXNldC10YWJsZS5zaCBiL3QvdDcxMTEtcmVzZXQtdGFibGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2U0MjFhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMTEtcmVzZXQtdGFibGUuc2gKQEAgLTAsMCArMSwxMjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQ2hyaXN0aWFuIENvdWRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyB0byBjaGVjayB0aGF0ICJyZXNldCIgb3B0aW9ucyBmb2xsb3cgYSBrbm93biB0YWJsZScKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgaW5pdGlhbCBjb21taXRzJyAnCisgICAgdGVzdF9jb21taXQgRSBmaWxlMSAmJgorICAgIHRlc3RfY29tbWl0IEQgZmlsZTEgJiYKKyAgICB0ZXN0X2NvbW1pdCBDIGZpbGUxCisnCisKK3doaWxlIHJlYWQgVzEgSTEgSDEgVCBvcHQgVzIgSTIgSDIKK2RvCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2s6ICRXMSAkSTEgJEgxICRUIC0tJG9wdCAkVzIgJEkyICRIMiIgJworCWdpdCByZXNldCAtLWhhcmQgQyAmJgorCWlmIHRlc3QgIiRJMSIgIT0gIiRIMSIKKwl0aGVuCisJICAgIGVjaG8gIiRJMSIgPmZpbGUxICYmCisJICAgIGdpdCBhZGQgZmlsZTEKKwlmaSAmJgorCWlmIHRlc3QgIiRXMSIgIT0gIiRJMSIKKwl0aGVuCisJICAgIGVjaG8gIiRXMSIgPmZpbGUxCisJZmkgJiYKKwlpZiB0ZXN0ICIkVzIiICE9ICJYWFhYWCIKKwl0aGVuCisJICAgIGdpdCByZXNldCAtLSRvcHQgJFQgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkVzIiICYmCisJICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtLSBmaWxlMSAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRJMiIgJiYKKwkgICAgZ2l0IGNoZWNrb3V0IC1mIEhFQUQgLS0gZmlsZTEgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkSDIiCisJZWxzZQorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS0kb3B0ICRUCisJZmkKKyAgICAnCitkb25lIDw8XEVPRgorQSBCIEMgRCBzb2Z0ICAgQSBCIEQKK0EgQiBDIEQgbWl4ZWQgIEEgRCBECitBIEIgQyBEIGhhcmQgICBEIEQgRAorQSBCIEMgRCBtZXJnZSAgWFhYWFgKK0EgQiBDIEQga2VlcCAgIFhYWFhYCitBIEIgQyBDIHNvZnQgICBBIEIgQworQSBCIEMgQyBtaXhlZCAgQSBDIEMKK0EgQiBDIEMgaGFyZCAgIEMgQyBDCitBIEIgQyBDIG1lcmdlICBYWFhYWAorQSBCIEMgQyBrZWVwICAgQSBDIEMKK0IgQiBDIEQgc29mdCAgIEIgQiBECitCIEIgQyBEIG1peGVkICBCIEQgRAorQiBCIEMgRCBoYXJkICAgRCBEIEQKK0IgQiBDIEQgbWVyZ2UgIEQgRCBECitCIEIgQyBEIGtlZXAgICBYWFhYWAorQiBCIEMgQyBzb2Z0ICAgQiBCIEMKK0IgQiBDIEMgbWl4ZWQgIEIgQyBDCitCIEIgQyBDIGhhcmQgICBDIEMgQworQiBCIEMgQyBtZXJnZSAgQyBDIEMKK0IgQiBDIEMga2VlcCAgIEIgQyBDCitCIEMgQyBEIHNvZnQgICBCIEMgRAorQiBDIEMgRCBtaXhlZCAgQiBEIEQKK0IgQyBDIEQgaGFyZCAgIEQgRCBECitCIEMgQyBEIG1lcmdlICBYWFhYWAorQiBDIEMgRCBrZWVwICAgWFhYWFgKK0IgQyBDIEMgc29mdCAgIEIgQyBDCitCIEMgQyBDIG1peGVkICBCIEMgQworQiBDIEMgQyBoYXJkICAgQyBDIEMKK0IgQyBDIEMgbWVyZ2UgIEIgQyBDCitCIEMgQyBDIGtlZXAgICBCIEMgQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgdXAgYnJhbmNoZXMgdG8gdGVzdCB3aXRoIHVubWVyZ2VkIGVudHJpZXMnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIEMgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDEgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorICAgIHRlc3RfY29tbWl0IEIxIGZpbGUxICYmCisgICAgZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKKyAgICB0ZXN0X2NvbW1pdCBCIGZpbGUxCisnCisKK3doaWxlIHJlYWQgVzEgSTEgSDEgVCBvcHQgVzIgSTIgSDIKK2RvCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2s6ICRXMSAkSTEgJEgxICRUIC0tJG9wdCAkVzIgJEkyICRIMiIgJworCWdpdCByZXNldCAtLWhhcmQgQiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gxICYmCisJY2F0IGZpbGUxID5YX2ZpbGUxICYmCisJaWYgdGVzdCAiJFcyIiAhPSAiWFhYWFgiCisJdGhlbgorCSAgICBnaXQgcmVzZXQgLS0kb3B0ICRUICYmCisJICAgIGlmIHRlc3QgIiRXMiIgPSAiWCIKKwkgICAgdGhlbgorCQl0ZXN0X2NtcCBmaWxlMSBYX2ZpbGUxCisJICAgIGVsc2UKKwkJdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkVzIiCisJICAgIGZpICYmCisJICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtLSBmaWxlMSAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRJMiIgJiYKKwkgICAgZ2l0IGNoZWNrb3V0IC1mIEhFQUQgLS0gZmlsZTEgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkSDIiCisJZWxzZQorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS0kb3B0ICRUCisJZmkKKyAgICAnCitkb25lIDw8XEVPRgorWCBVIEIgQyBzb2Z0ICAgWFhYWFgKK1ggVSBCIEMgbWl4ZWQgIFggQyBDCitYIFUgQiBDIGhhcmQgICBDIEMgQworWCBVIEIgQyBtZXJnZSAgQyBDIEMKK1ggVSBCIEMga2VlcCAgIFhYWFhYCitYIFUgQiBCIHNvZnQgICBYWFhYWAorWCBVIEIgQiBtaXhlZCAgWCBCIEIKK1ggVSBCIEIgaGFyZCAgIEIgQiBCCitYIFUgQiBCIG1lcmdlICBCIEIgQgorWCBVIEIgQiBrZWVwICAgWFhYWFgKK0VPRgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcyMDEtY28uc2ggYi90L3Q3MjAxLWNvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJlOTY3MmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MjAxLWNvLnNoCkBAIC0wLDAgKzEsNjczIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dCB0ZXN0cy4KKworQ3JlYXRlcyBtYXN0ZXIsIGZvcmtzIHJlbmFtZXIgYW5kIHNpZGUgYnJhbmNoZXMgZnJvbSBpdC4KK1Rlc3Qgc3dpdGNoaW5nIGFjcm9zcyB0aGVtLgorCisgICEgW21hc3Rlcl0gSW5pdGlhbCBBIG9uZSwgQSB0d28KKyAgICogW3JlbmFtZXJdIFJlbmFtZXIgUiBvbmUtPnVubywgTSB0d28KKyAgICAhIFtzaWRlXSBTaWRlIE0gb25lLCBEIHR3bywgQSB0aHJlZQorICAgICAhIFtzaW1wbGVdIFNpbXBsZSBEIG9uZSwgTSB0d28KKyAgLS0tLQorICAgICArIFtzaW1wbGVdIFNpbXBsZSBEIG9uZSwgTSB0d28KKyAgICArICBbc2lkZV0gU2lkZSBNIG9uZSwgRCB0d28sIEEgdGhyZWUKKyAgICogICBbcmVuYW1lcl0gUmVuYW1lciBSIG9uZS0+dW5vLCBNIHR3bworICArKisrIFttYXN0ZXJdIEluaXRpYWwgQSBvbmUsIEEgdHdvCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfdGljaworCitmaWxsICgpIHsKKwlmb3IgaQorCWRvCisJCWVjaG8gIiRpIgorCWRvbmUKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZpbGwgeCB5IHogPiBzYW1lICYmCisJZmlsbCAxIDIgMyA0IDUgNiA3IDggPm9uZSAmJgorCWZpbGwgYSBiIGMgZCBlID50d28gJiYKKwlnaXQgYWRkIHNhbWUgb25lIHR3byAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgQSBvbmUsIEEgdHdvIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZXIgJiYKKwlybSAtZiBvbmUgJiYKKwlmaWxsIDEgMyA0IDUgNiA3IDggPnVubyAmJgorCWdpdCBhZGQgdW5vICYmCisJZmlsbCBhIGIgYyBkIGUgZiA+dHdvICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiUmVuYW1lciBSIG9uZS0+dW5vLCBNIHR3byIgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlIG1hc3RlciAmJgorCWZpbGwgMSAyIDMgNCA1IDYgNyA+b25lICYmCisJZmlsbCBBIEIgQyBEIEUgPnRocmVlICYmCisJcm0gLWYgdHdvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBvbmUgdHdvIHRocmVlICYmCisJZ2l0IGNvbW1pdCAtbSAiU2lkZSBNIG9uZSwgRCB0d28sIEEgdGhyZWUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2ltcGxlIG1hc3RlciAmJgorCXJtIC1mIG9uZSAmJgorCWZpbGwgYSBjIGUgPiB0d28gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJTaW1wbGUgRCBvbmUsIE0gdHdvIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCBmcm9tIG5vbi1leGlzdGluZyBicmFuY2giICcKKworCWdpdCBjaGVja291dCAtYiBkZWxldGUtbWUgbWFzdGVyICYmCisJcm0gLmdpdC9yZWZzL2hlYWRzL2RlbGV0ZS1tZSAmJgorCXRlc3QgcmVmcy9oZWFkcy9kZWxldGUtbWUgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbWFzdGVyID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgd2l0aCBkaXJ0eSB0cmVlIHdpdGhvdXQgLW0iICcKKworCWZpbGwgMCAxIDIgMyA0IDUgNiA3IDggPm9uZSAmJgorCWlmIGdpdCBjaGVja291dCBzaWRlCisJdGhlbgorCQllY2hvIE5vdCBoYXBweQorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiaGFwcHkgLSBmYWlsZWQgY29ycmVjdGx5IgorCWZpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgd2l0aCB1bnJlbGF0ZWQgZGlydHkgdHJlZSB3aXRob3V0IC1tIiAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZmlsbCAwIDEgMiAzIDQgNSA2IDcgOCA+c2FtZSAmJgorCWNwIHNhbWUga2VwdAorCWdpdCBjaGVja291dCBzaWRlID5tZXNzYWdlcyAmJgorCXRlc3RfY21wIHNhbWUga2VwdAorCShjYXQgPiBtZXNzYWdlcy5leHBlY3QgPDxFT0YKK00Jc2FtZQorRU9GCispICYmCisJdG91Y2ggbWVzc2FnZXMuZXhwZWN0ICYmCisJdGVzdF9jbXAgbWVzc2FnZXMuZXhwZWN0IG1lc3NhZ2VzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IC1tIHdpdGggZGlydHkgdHJlZSIgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCBjbGVhbiAtZiAmJgorCisJZmlsbCAwIDEgMiAzIDQgNSA2IDcgOCA+b25lICYmCisJZ2l0IGNoZWNrb3V0IC1tIHNpZGUgPiBtZXNzYWdlcyAmJgorCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJyZWZzL2hlYWRzL3NpZGUiICYmCisKKwkoY2F0ID5leHBlY3QubWVzc2FnZXMgPDxFT0YKK00Jb25lCitFT0YKKykgJiYKKwl0ZXN0X2NtcCBleHBlY3QubWVzc2FnZXMgbWVzc2FnZXMgJiYKKworCWZpbGwgIk0Jb25lIiAiQQl0aHJlZSIgIkQJdHdvIiA+ZXhwZWN0Lm1hc3RlciAmJgorCWdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgbWFzdGVyID5jdXJyZW50Lm1hc3RlciAmJgorCXRlc3RfY21wIGV4cGVjdC5tYXN0ZXIgY3VycmVudC5tYXN0ZXIgJiYKKworCWZpbGwgIk0Jb25lIiA+ZXhwZWN0LnNpZGUgJiYKKwlnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIHNpZGUgPmN1cnJlbnQuc2lkZSAmJgorCXRlc3RfY21wIGV4cGVjdC5zaWRlIGN1cnJlbnQuc2lkZSAmJgorCisJOiA+ZXhwZWN0LmluZGV4ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmN1cnJlbnQuaW5kZXggJiYKKwl0ZXN0X2NtcCBleHBlY3QuaW5kZXggY3VycmVudC5pbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCAtbSB3aXRoIGRpcnR5IHRyZWUsIHJlbmFtZWQiICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IGNsZWFuIC1mICYmCisKKwlmaWxsIDEgMiAzIDQgNSA3IDggPm9uZSAmJgorCWlmIGdpdCBjaGVja291dCByZW5hbWVyCisJdGhlbgorCQllY2hvIE5vdCBoYXBweQorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiaGFwcHkgLSBmYWlsZWQgY29ycmVjdGx5IgorCWZpICYmCisKKwlnaXQgY2hlY2tvdXQgLW0gcmVuYW1lciAmJgorCWZpbGwgMSAzIDQgNSA3IDggPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB1bm8gJiYKKwkhIHRlc3QgLWYgb25lICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmN1cnJlbnQgJiYKKwkhIHRlc3QgLXMgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1tIHdpdGggbWVyZ2UgY29uZmxpY3QnICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IGNsZWFuIC1mICYmCisKKwlmaWxsIDEgVCAzIDQgNSA2IFMgOCA+b25lICYmCisJaWYgZ2l0IGNoZWNrb3V0IHJlbmFtZXIKKwl0aGVuCisJCWVjaG8gTm90IGhhcHB5CisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSAtIGZhaWxlZCBjb3JyZWN0bHkiCisJZmkgJiYKKworCWdpdCBjaGVja291dCAtbSByZW5hbWVyICYmCisKKwlnaXQgZGlmZiBtYXN0ZXI6b25lIDozOnVubyB8CisJc2VkIC1lICIxLC9eQEAvZCIgLWUgIi9eIC9kIiAtZSAicy9eLS9kLyIgLWUgInMvXisvYS8iID5jdXJyZW50ICYmCisJZmlsbCBkMiBhVCBkNyBhUyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgY3VycmVudCBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCB0d28gPmN1cnJlbnQgJiYKKwkhIHRlc3QgLXMgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQgb2YgbWVyZ2UgY29uZmxpY3QgZnJvbSBjaGVja291dCAtbScgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJiBnaXQgY2xlYW4gLWYgJiYKKworCWZpbGwgYiBkID4gdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1tIHNpbXBsZSAmJgorCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmCisJZmlsbCBzYW1lIHR3byB0d28gdHdvID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBjdXJyZW50IGV4cGVjdCAmJgorCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJPDw8PDw8PCBzaW1wbGUKKwlhCisJYworCWUKKwk9PT09PT09CisJYgorCWQKKwk+Pj4+Pj4+IGxvY2FsCisJRU9GCisJdGVzdF9jbXAgdHdvIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLW1lcmdlIC0tY29uZmxpY3Q9ZGlmZjMgPGJyYW5jaD4nICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2xlYW4gLWYgJiYKKworCWZpbGwgYiBkID4gdHdvICYmCisJZ2l0IGNoZWNrb3V0IC0tbWVyZ2UgLS1jb25mbGljdD1kaWZmMyBzaW1wbGUgJiYKKworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCTw8PDw8PDwgc2ltcGxlCisJYQorCWMKKwllCisJfHx8fHx8fCBtYXN0ZXIKKwlhCisJYgorCWMKKwlkCisJZQorCT09PT09PT0KKwliCisJZAorCT4+Pj4+Pj4gbG9jYWwKKwlFT0YKKwl0ZXN0X2NtcCB0d28gZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEICh3aXRoIGFkdmljZSBkZWNsaW5lZCknICcKKworCWdpdCBjb25maWcgYWR2aWNlLmRldGFjaGVkSGVhZCBmYWxzZSAmJgorCWdpdCBjaGVja291dCAtZiByZW5hbWVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCByZW5hbWVyXiAyPm1lc3NhZ2VzICYmCisJdGVzdF9pMThuZ3JlcCAiSEVBRCBpcyBub3cgYXQgNzMyOTM4OCIgbWVzc2FnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG1lc3NhZ2VzICYmCisJSD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlNPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgInokSCIgPSAieiRNIiAmJgorCWlmIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCWVjaG8gIk9PUFMsIEhFQUQgaXMgc3RpbGwgc3ltYm9saWM/Pz8iCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdG8gZGV0YWNoIEhFQUQnICcKKwlnaXQgY29uZmlnIGFkdmljZS5kZXRhY2hlZEhlYWQgdHJ1ZSAmJgorCWdpdCBjaGVja291dCAtZiByZW5hbWVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCByZW5hbWVyXiAyPm1lc3NhZ2VzICYmCisJdGVzdF9pMThuZ3JlcCAiSEVBRCBpcyBub3cgYXQgNzMyOTM4OCIgbWVzc2FnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgLWd0IDEgbWVzc2FnZXMgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJaWYgZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyAiT09QUywgSEVBRCBpcyBzdGlsbCBzeW1ib2xpYz8/PyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB0byBkZXRhY2ggSEVBRCB3aXRoIGJyYW5jaG5hbWVeJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCByZW5hbWVyXiAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICJ6JEgiID0gInokTSIgJiYKKwlpZiBnaXQgc3ltYm9saWMtcmVmIEhFQUQgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvICJPT1BTLCBIRUFEIGlzIHN0aWxsIHN5bWJvbGljPz8/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEIHdpdGggOi9tZXNzYWdlJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCAiOi9Jbml0aWFsIiAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICJ6JEgiID0gInokTSIgJiYKKwlpZiBnaXQgc3ltYm9saWMtcmVmIEhFQUQgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvICJPT1BTLCBIRUFEIGlzIHN0aWxsIHN5bWJvbGljPz8/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEIHdpdGggSEVBRF4wJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJaWYgZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyAiT09QUywgSEVBRCBpcyBzdGlsbCBzeW1ib2xpYz8/PyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGFtYmlndW91cyB0YWcvYnJhbmNoIG5hbWVzJyAnCisKKwlnaXQgdGFnIGJvdGggc2lkZSAmJgorCWdpdCBicmFuY2ggYm90aCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IGJvdGggJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCkgJiYKKwl0ZXN0ICJ6JG5hbWUiID0genJlZnMvaGVhZHMvYm90aAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggYW1iaWd1b3VzIHRhZy9icmFuY2ggbmFtZXMnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgdGFnIGZyb3R6IHNpZGUgJiYKKwlnaXQgYnJhbmNoIGZyb3R6IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgY2hlY2tvdXQgdGFncy9mcm90eiAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJUz0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUpICYmCisJdGVzdCAieiRIIiA9ICJ6JFMiICYmCisJaWYgbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCkKKwl0aGVuCisJCWVjaG8gIkJhZCAtLSBzaG91bGQgaGF2ZSBkZXRhY2hlZCIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBicmFuY2hlcyB3aGlsZSBpbiBzdWJkaXJlY3RvcnknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlta2RpciBzdWJzICYmCisJKAorCQljZCBzdWJzICYmCisJCWdpdCBjaGVja291dCBzaWRlCisJKSAmJgorCSEgdGVzdCAtZiBzdWJzL29uZSAmJgorCXJtIC1mciBzdWJzCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc3BlY2lmaWMgcGF0aCB3aGlsZSBpbiBzdWJkaXJlY3RvcnknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCW1rZGlyIHN1YnMgJiYKKwk+c3Vicy9iZXJvICYmCisJZ2l0IGFkZCBzdWJzL2Jlcm8gJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3Vicy9iZXJvIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCW1rZGlyIC1wIHN1YnMgJiYKKwkoCisJCWNkIHN1YnMgJiYKKwkJZ2l0IGNoZWNrb3V0IHNpZGUgLS0gYmVybworCSkgJiYKKwl0ZXN0IC1mIHN1YnMvYmVybworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja291dCB3Ly0tdHJhY2sgc2V0cyB1cCB0cmFja2luZycgJworICAgIGdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGZhbHNlICYmCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorICAgIGdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRyYWNrMSAmJgorICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gudHJhY2sxLnJlbW90ZSkiICYmCisgICAgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC50cmFjazEubWVyZ2UpIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrb3V0IHcvYXV0b3NldHVwbWVyZ2U9YWx3YXlzIHNldHMgdXAgdHJhY2tpbmcnICcKKyAgICBnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBhbHdheXMgJiYKKyAgICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRyYWNrMiAmJgorICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gudHJhY2syLnJlbW90ZSkiICYmCisgICAgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC50cmFjazIubWVyZ2UpIgorICAgIGdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGZhbHNlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3Ly0tdHJhY2sgZnJvbSBub24tYnJhbmNoIEhFQUQgZmFpbHMnICcKKyAgICBnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS10cmFjayAtYiB0cmFjayAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdHJhY2sgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgJiYKKyAgICB0ZXN0ICJ6JChnaXQgcmV2LXBhcnNlIG1hc3Rlcl4wKSIgPSAieiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdy8tLXRyYWNrIGZyb20gdGFnIGZhaWxzJyAnCisgICAgZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLWIgdHJhY2sgZnJvdHogJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRyYWNrICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEICYmCisgICAgdGVzdCAieiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeMCkiID0gInokKGdpdCByZXYtcGFyc2UgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGFjaCBhIHN5bWJvbGljIGxpbmsgSEVBRCcgJworICAgIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKyAgICBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLnByZWZlcnN5bWxpbmtyZWZzIHllcyAmJgorICAgIGdpdCBjaGVja291dCBzaWRlICYmCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorICAgIGl0PSQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSAmJgorICAgIHRlc3QgInokaXQiID0genJlZnMvaGVhZHMvbWFzdGVyICYmCisgICAgaGVyZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisgICAgZ2l0IGNoZWNrb3V0IHNpZGVeICYmCisgICAgdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikiID0gInokaGVyZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrb3V0IHdpdGggLS10cmFjayBmYWtlcyBhIHNlbnNpYmxlIC1iIDxuYW1lPicgJworICAgIGdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4va29hbGEvYmVhciByZW5hbWVyICYmCisKKyAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4va29hbGEvYmVhciAmJgorICAgIHRlc3QgInJlZnMvaGVhZHMva29hbGEvYmVhciIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlbmFtZXIpIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiBnaXQgYnJhbmNoIC1EIGtvYWxhL2JlYXIgJiYKKworICAgIGdpdCBjaGVja291dCAtLXRyYWNrIHJlZnMvcmVtb3Rlcy9vcmlnaW4va29hbGEvYmVhciAmJgorICAgIHRlc3QgInJlZnMvaGVhZHMva29hbGEvYmVhciIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlbmFtZXIpIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiBnaXQgYnJhbmNoIC1EIGtvYWxhL2JlYXIgJiYKKworICAgIGdpdCBjaGVja291dCAtLXRyYWNrIHJlbW90ZXMvb3JpZ2luL2tvYWxhL2JlYXIgJiYKKyAgICB0ZXN0ICJyZWZzL2hlYWRzL2tvYWxhL2JlYXIiID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSByZW5hbWVyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrb3V0IHdpdGggLS10cmFjaywgYnV0IHdpdGhvdXQgLWIsIGZhaWxzIHdpdGggdG9vIHNob3J0IHRyYWNrZWQgbmFtZScgJworICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXRyYWNrIHJlbmFtZXInCisKK3NldHVwX2NvbmZsaWN0aW5nX2luZGV4ICgpIHsKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJTz0kKGVjaG8gb3JpZ2luYWwgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlBPSQoZWNobyBvdXJzaWRlIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJQj0kKGVjaG8gdGhlaXJzaWRlIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJKAorCQllY2hvICIxMDA2NDQgJEEgMAlmaWxkIiAmJgorCQllY2hvICIxMDA2NDQgJE8gMQlmaWxlIiAmJgorCQllY2hvICIxMDA2NDQgJEEgMglmaWxlIiAmJgorCQllY2hvICIxMDA2NDQgJEIgMwlmaWxlIiAmJgorCQllY2hvICIxMDA2NDQgJEEgMAlmaWxmIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhbiB1bm1lcmdlZCBwYXRoIHNob3VsZCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3RpbmdfaW5kZXggJiYKKwllY2hvICJub25lIG9mIHRoZSBhYm92ZSIgPnNhbXBsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGQgJiYKKwljYXQgc2FtcGxlID5maWxlICYmCisJY2F0IHNhbXBsZSA+ZmlsZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBmaWxkIGZpbGUgZmlsZiAmJgorCXRlc3RfY21wIHNhbXBsZSBmaWxkICYmCisJdGVzdF9jbXAgc2FtcGxlIGZpbGYgJiYKKwl0ZXN0X2NtcCBzYW1wbGUgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGFuIHVubWVyZ2VkIHBhdGggY2FuIGJlIGlnbm9yZWQnICcKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlsZCBmaWxlIGZpbGYgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxmICYmCisJdGVzdF9jbXAgc2FtcGxlIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdW5tZXJnZWQgc3RhZ2UnICcKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLS1vdXJzIC4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxmICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwlnaXQgY2hlY2tvdXQgLS10aGVpcnMgZmlsZSAmJgorCXRlc3QgenRoZWlyc2lkZSA9ICJ6JChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggLS1tZXJnZScgJworCXNldHVwX2NvbmZsaWN0aW5nX2luZGV4ICYmCisJZWNobyAibm9uZSBvZiB0aGUgYWJvdmUiID5zYW1wbGUgJiYKKwllY2hvIG91cnNpZGUgPmV4cGVjdCAmJgorCWNhdCBzYW1wbGUgPmZpbGQgJiYKKwljYXQgc2FtcGxlID5maWxlICYmCisJY2F0IHNhbXBsZSA+ZmlsZiAmJgorCWdpdCBjaGVja291dCAtbSAtLSBmaWxkIGZpbGUgZmlsZiAmJgorCSgKKwkJZWNobyAiPDw8PDw8PCBvdXJzIgorCQllY2hvIG91cnNpZGUKKwkJZWNobyAiPT09PT09PSIKKwkJZWNobyB0aGVpcnNpZGUKKwkJZWNobyAiPj4+Pj4+PiB0aGVpcnMiCisJKSA+bWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZiAmJgorCXRlc3RfY21wIG1lcmdlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggLS1tZXJnZSwgaW4gZGlmZjMgLW0gc3R5bGUnICcKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLW0gLS0gZmlsZCBmaWxlIGZpbGYgJiYKKwkoCisJCWVjaG8gIjw8PDw8PDwgb3VycyIKKwkJZWNobyBvdXJzaWRlCisJCWVjaG8gInx8fHx8fHwgYmFzZSIKKwkJZWNobyBvcmlnaW5hbAorCQllY2hvICI9PT09PT09IgorCQllY2hvIHRoZWlyc2lkZQorCQllY2hvICI+Pj4+Pj4+IHRoZWlycyIKKwkpID5tZXJnZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxmICYmCisJdGVzdF9jbXAgbWVyZ2VkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1jb25mbGljdD1tZXJnZSwgb3ZlcnJpZGluZyBjb25maWcnICcKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLS1jb25mbGljdD1tZXJnZSAtLSBmaWxkIGZpbGUgZmlsZiAmJgorCSgKKwkJZWNobyAiPDw8PDw8PCBvdXJzIgorCQllY2hvIG91cnNpZGUKKwkJZWNobyAiPT09PT09PSIKKwkJZWNobyB0aGVpcnNpZGUKKwkJZWNobyAiPj4+Pj4+PiB0aGVpcnMiCisJKSA+bWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZiAmJgorCXRlc3RfY21wIG1lcmdlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tY29uZmxpY3Q9ZGlmZjMnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgbWVyZ2UuY29uZmxpY3RzdHlsZQorCXNldHVwX2NvbmZsaWN0aW5nX2luZGV4ICYmCisJZWNobyAibm9uZSBvZiB0aGUgYWJvdmUiID5zYW1wbGUgJiYKKwllY2hvIG91cnNpZGUgPmV4cGVjdCAmJgorCWNhdCBzYW1wbGUgPmZpbGQgJiYKKwljYXQgc2FtcGxlID5maWxlICYmCisJY2F0IHNhbXBsZSA+ZmlsZiAmJgorCWdpdCBjaGVja291dCAtLWNvbmZsaWN0PWRpZmYzIC0tIGZpbGQgZmlsZSBmaWxmICYmCisJKAorCQllY2hvICI8PDw8PDw8IG91cnMiCisJCWVjaG8gb3Vyc2lkZQorCQllY2hvICJ8fHx8fHx8IGJhc2UiCisJCWVjaG8gb3JpZ2luYWwKKwkJZWNobyAiPT09PT09PSIKKwkJZWNobyB0aGVpcnNpZGUKKwkJZWNobyAiPj4+Pj4+PiB0aGVpcnMiCisJKSA+bWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZiAmJgorCXRlc3RfY21wIG1lcmdlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxpbmcgY2hlY2tvdXQgLWIgc2hvdWxkIG5vdCBicmVhayB3b3JraW5nIHRyZWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtYiByZW5hbWVyIHNpZGVeICYmCisJdGVzdCAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1leGl0LWNvZGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggb3V0IG9mIG5vbi1icmFuY2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWVjaG8gbW9kaWZpZWQgPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCByZW5hbWVyIDI+ZXJyb3IubG9nICYmCisJISBncmVwICJeUHJldmlvdXMgSEVBRCIgZXJyb3IubG9nCisnCisKKygKKyBlY2hvICIjISRTSEVMTF9QQVRIIgorIGNhdCA8PFxFT0YKK089JDEgQT0kMiBCPSQzCitjYXQgIiRBIiA+LnRtcAorZXhlYyA+IiRBIgorZWNobyAnPDw8PDw8PCBmaWxmcmUtdGhlaXJzJworY2F0ICIkQiIKK2VjaG8gJ3x8fHx8fHwgZmlsZnJlLWNvbW1vbicKK2NhdCAiJE8iCitlY2hvICc9PT09PT09JworY2F0ICIudG1wIgorZWNobyAnPj4+Pj4+PiBmaWxmcmUtb3VycycKK3JtIC1mIC50bXAKK2V4aXQgMQorRU9GCispID5maWxmcmUuc2gKK2NobW9kICt4IGZpbGZyZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdXN0b20gbWVyZ2UgZHJpdmVyIHdpdGggY2hlY2tvdXQgLW0nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlnaXQgY29uZmlnIG1lcmdlLmZpbGZyZS5kcml2ZXIgIi4vZmlsZnJlLnNoICVPICVBICVCIiAmJgorCWdpdCBjb25maWcgbWVyZ2UuZmlsZnJlLm5hbWUgIkZlZWwtZnJlZSBtZXJnZSBkcml2ZXIiICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5maWxmcmUucmVjdXJzaXZlIGJpbmFyeSAmJgorCWVjaG8gImFybSBtZXJnZT1maWxmcmUiID4uZ2l0YXR0cmlidXRlcyAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxlZnQgJiYKKwllY2hvIG5ldXRyYWwgPmFybSAmJgorCWdpdCBhZGQgYXJtIC5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBuZXV0cmFsICYmCisJZ2l0IGJyYW5jaCByaWdodCAmJgorCisJZWNobyBsZWZ0ID5hcm0gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGxlZnQgJiYKKwlnaXQgY2hlY2tvdXQgcmlnaHQgJiYKKworCWVjaG8gcmlnaHQgPmFybSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gcmlnaHQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBsZWZ0ICYmCisJKAorCQlmb3IgdCBpbiBmaWxmcmUtY29tbW9uIGxlZnQgcmlnaHQKKwkJZG8KKwkJCWdyZXAgJHQgYXJtIHx8IGV4aXQgMQorCQlkb25lCisJCWV4aXQgMAorCSkgJiYKKworCW12IGFybSBleHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgLW0gYXJtICYmCisJdGVzdF9jbXAgZXhwZWN0IGFybQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDczMDAtY2xlYW4uc2ggYi90L3Q3MzAwLWNsZWFuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjZmI1NGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MzAwLWNsZWFuLnNoCkBAIC0wLDAgKzEsNDgwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IE1pY2hhZWwgU3BhbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNsZWFuIGJhc2ljIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworZ2l0IGNvbmZpZyBjbGVhbi5yZXF1aXJlRm9yY2Ugbm8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCW1rZGlyIC1wIHNyYyAmJgorCXRvdWNoIHNyYy9wYXJ0MS5jIE1ha2VmaWxlICYmCisJZWNobyBidWlsZCA+LmdpdGlnbm9yZSAmJgorCWVjaG8gXCoubyA+Pi5naXRpZ25vcmUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIHNldHVwICYmCisJdG91Y2ggc3JjL3BhcnQyLmMgUkVBRE1FICYmCisJZ2l0IGFkZCAuCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHdpdGggc2tpcC13b3JrdHJlZSAuZ2l0aWdub3JlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgLmdpdGlnbm9yZSAmJgorCXJtIC5naXRpZ25vcmUgJiYKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZSAuZ2l0aWdub3JlICYmCisJZ2l0IGNoZWNrb3V0IC5naXRpZ25vcmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gc3JjLycgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gc3JjLyAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHNyYy8gc3JjLycgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gc3JjLyBzcmMvICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gd2l0aCBwcmVmaXgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3Mgc3JjL3Rlc3QgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvIHNyYy90ZXN0LzEuYyAmJgorCShjZCBzcmMvICYmIGdpdCBjbGVhbikgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy90ZXN0LzEuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2dpdCBjbGVhbiB3aXRoIHJlbGF0aXZlIHByZWZpeCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl3b3VsZF9jbGVhbj0kKAorCQljZCBkb2NzICYmCisJCWdpdCBjbGVhbiAtbiAuLi9zcmMgfAorCQlzZWQgLW4gLWUgInN8XldvdWxkIHJlbW92ZSB8fHAiCisJKSAmJgorCXRlc3QgIiR3b3VsZF9jbGVhbiIgPSAuLi9zcmMvcGFydDMuYyB8fCB7CisJCWVjaG8gIk9PcHMgPCR3b3VsZF9jbGVhbj4iCisJCWZhbHNlCisJfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnZ2l0IGNsZWFuIHdpdGggYWJzb2x1dGUgcGF0aCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl3b3VsZF9jbGVhbj0kKAorCQljZCBkb2NzICYmCisJCWdpdCBjbGVhbiAtbiAiJChwd2QpLy4uL3NyYyIgfAorCQlzZWQgLW4gLWUgInN8XldvdWxkIHJlbW92ZSB8fHAiCisJKSAmJgorCXRlc3QgIiR3b3VsZF9jbGVhbiIgPSAuLi9zcmMvcGFydDMuYyB8fCB7CisJCWVjaG8gIk9PcHMgPCR3b3VsZF9jbGVhbj4iCisJCWZhbHNlCisJfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gd2l0aCBvdXQgb2Ygd29yayB0cmVlIHJlbGF0aXZlIHBhdGgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKAorCQljZCBkb2NzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjbGVhbiAtbiAuLi8uLgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHdpdGggb3V0IG9mIHdvcmsgdHJlZSBhYnNvbHV0ZSBwYXRoJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWRkPSQoY2QgLi4gJiYgcHdkKSAmJgorCSgKKwkJY2QgZG9jcyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2xlYW4gLW4gJGRkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgd2l0aCBwcmVmaXggYW5kIHBhdGgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3Mgc3JjL2ZlYXR1cmUgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvZmVhdHVyZS9maWxlLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShjZCBzcmMvICYmIGdpdCBjbGVhbiAtZCBmZWF0dXJlLykgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9mZWF0dXJlL2ZpbGUuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZ2l0IGNsZWFuIHN5bWJvbGljIGxpbmsnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJbG4gLXMgZG9jcy9tYW51YWwudHh0IHNyYy9wYXJ0NC5jICYmCisJZ2l0IGNsZWFuICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiB3aXRoIHdpbGRjYXJkJyAnCisKKwl0b3VjaCBhLmNsZWFuIGIuY2xlYW4gb3RoZXIuYyAmJgorCWdpdCBjbGVhbiAiKi5jbGVhbiIgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLmNsZWFuICYmCisJdGVzdCAhIC1mIGIuY2xlYW4gJiYKKwl0ZXN0IC1mIG90aGVyLmMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLW4nICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1uICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAtZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1kIGRvY3MgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgc3JjLyBleGFtcGxlcy8nICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgZXhhbXBsZXMgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvIGV4YW1wbGVzLzEuYyAmJgorCWdpdCBjbGVhbiAtZCBzcmMvIGV4YW1wbGVzLyAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBleGFtcGxlcy8xLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAteCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLXggJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgLXgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1kIC14ICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWQgZG9jcyAmJgorCXRlc3QgISAtZiBvYmoubyAmJgorCXRlc3QgISAtZCBidWlsZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtWCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLVggJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZCAtWCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLWQgLVggJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgb2JqLm8gJiYKKwl0ZXN0ICEgLWQgYnVpbGQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZScgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNsZWFuLnJlcXVpcmVGb3JjZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbGVhbgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuLnJlcXVpcmVGb3JjZScgJworCisJZ2l0IGNvbmZpZyBjbGVhbi5yZXF1aXJlRm9yY2UgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbGVhbgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuLnJlcXVpcmVGb3JjZSBhbmQgLW4nICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1uICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4ucmVxdWlyZUZvcmNlIGFuZCAtZicgJworCisJZ2l0IGNsZWFuIC1mICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2NvcmUuZXhjbHVkZXNmaWxlJyAnCisKKwllY2hvIGV4Y2x1ZGVzID5leGNsdWRlcyAmJgorCWVjaG8gaW5jbHVkZWQgPmluY2x1ZGVkICYmCisJZ2l0IGNvbmZpZyBjb3JlLmV4Y2x1ZGVzZmlsZSBleGNsdWRlcyAmJgorCW91dHB1dD0kKGdpdCBjbGVhbiAtbiBleGNsdWRlcyBpbmNsdWRlZCAyPiYxKSAmJgorCWV4cHIgIiRvdXRwdXQiIDogIi4qaW5jbHVkZWQiID4vZGV2L251bGwgJiYKKwkhIGV4cHIgIiRvdXRwdXQiIDogIi4qZXhjbHVkZXMiID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNBTklUWSAncmVtb3ZhbCBmYWlsdXJlJyAnCisKKwlta2RpciBmb28gJiYKKwl0b3VjaCBmb28vYmFyICYmCisJKGV4ZWMgPGZvby9iYXIgJiYKKwkgY2htb2QgMCBmb28gJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsZWFuIC1mIC1kICYmCisJIGNobW9kIDc1NSBmb28pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBnaXQgd29yayB0cmVlJyAnCisJcm0gLWZyIGZvbyBiYXIgYmF6ICYmCisJbWtkaXIgLXAgZm9vIGJhciBiYXovYm9vICYmCisJKAorCQljZCBmb28gJiYKKwkJZ2l0IGluaXQgJiYKKwkJPmhlbGxvLndvcmxkCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1hIC1tIG5lc3RlZAorCSkgJiYKKwkoCisJCWNkIGJhciAmJgorCQk+Z29vZGJ5ZS5wZW9wbGUKKwkpICYmCisJKAorCQljZCBiYXovYm9vICYmCisJCWdpdCBpbml0ICYmCisJCT5kZWVwZXIud29ybGQKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLWEgLW0gZGVlcGx5Lm5lc3RlZAorCSkgJiYKKwlnaXQgY2xlYW4gLWYgLWQgJiYKKwl0ZXN0IC1mIGZvby8uZ2l0L2luZGV4ICYmCisJdGVzdCAtZiBmb28vaGVsbG8ud29ybGQgJiYKKwl0ZXN0IC1mIGJhei9ib28vLmdpdC9pbmRleCAmJgorCXRlc3QgLWYgYmF6L2Jvby9kZWVwZXIud29ybGQgJiYKKwkhIHRlc3QgLWQgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlIHJlbW92YWwgb2YgbmVzdGVkIGdpdCB3b3JrIHRyZWUnICcKKwlybSAtZnIgZm9vIGJhciBiYXogJiYKKwlta2RpciAtcCBmb28gYmFyIGJhei9ib28gJiYKKwkoCisJCWNkIGZvbyAmJgorCQlnaXQgaW5pdCAmJgorCQk+aGVsbG8ud29ybGQKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLWEgLW0gbmVzdGVkCisJKSAmJgorCSgKKwkJY2QgYmFyICYmCisJCT5nb29kYnllLnBlb3BsZQorCSkgJiYKKwkoCisJCWNkIGJhei9ib28gJiYKKwkJZ2l0IGluaXQgJiYKKwkJPmRlZXBlci53b3JsZAorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBkZWVwbHkubmVzdGVkCisJKSAmJgorCWdpdCBjbGVhbiAtZiAtZiAtZCAmJgorCSEgdGVzdCAtZCBmb28gJiYKKwkhIHRlc3QgLWQgYmFyICYmCisJISB0ZXN0IC1kIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWUnICcKKwlybSAtZnIgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJdG91Y2gga25vd24gMSAyIDMgJiYKKwkJZ2l0IGFkZCBrbm93biAmJgorCQlnaXQgY2xlYW4gLWYgLWUgMSAtZSAyICYmCisJCXRlc3QgLWUgMSAmJgorCQl0ZXN0IC1lIDIgJiYKKwkJISAodGVzdCAtZSAzKSAmJgorCQl0ZXN0IC1lIGtub3duCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNBTklUWSAnZ2l0IGNsZWFuIC1kIHdpdGggYW4gdW5yZWFkYWJsZSBlbXB0eSBkaXJlY3RvcnknICcKKwlta2RpciBmb28gJiYKKwljaG1vZCBhPSBmb28gJiYKKwlnaXQgY2xlYW4gLWRmeCBmb28gJiYKKwkhIHRlc3QgLWQgZm9vCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2ggYi90L3Q3NDAwLXN1Ym1vZHVsZS1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Mzk3MDM3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKQEAgLTAsMCArMSw2ODQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTGFycyBIamVtbGkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nQmFzaWMgcG9yY2VsYWluIHN1cHBvcnQgZm9yIHN1Ym1vZHVsZXMKKworVGhpcyB0ZXN0IHRyaWVzIHRvIHZlcmlmeSBiYXNpYyBzYW5pdHkgb2YgdGhlIGluaXQsIHVwZGF0ZSBhbmQgc3RhdHVzCitzdWJjb21tYW5kcyBvZiBnaXQgc3VibW9kdWxlLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSBpbml0aWFsIGNvbW1pdCcgJworCT50ICYmCisJZ2l0IGFkZCB0ICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJZ2l0IGJyYW5jaCBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gcmVwb3NpdG9yeSBpbiBpbml0IHN1YmRpcmVjdG9yeScgJworCW1rZGlyIGluaXQgJiYKKwkoCisJCWNkIGluaXQgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBhID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgY29tbWl0IDEiICYmCisJCWdpdCB0YWcgLWEgLW0gInJldi0xIiByZXYtMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSBjb21taXQgd2l0aCBnaXRsaW5rJyAnCisJZWNobyBhID5hICYmCisJZWNobyB6ID56ICYmCisJZ2l0IGFkZCBhIGluaXQgeiAmJgorCWdpdCBjb21taXQgLW0gInN1cGVyIGNvbW1pdCAxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIGhpZGUgaW5pdCBzdWJkaXJlY3RvcnknICcKKwltdiBpbml0IC5zdWJyZXBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gcmVwb3NpdG9yeSB0byBhZGQgc3VibW9kdWxlcyB0bycgJworCWdpdCBpbml0IGFkZHRlc3QgJiYKKwlnaXQgaW5pdCBhZGR0ZXN0LWlnbm9yZQorJworCisjIFRoZSAnc3VibW9kdWxlIGFkZCcgdGVzdHMgbmVlZCBzb21lIHJlcG9zaXRvcnkgdG8gYWRkIGFzIGEgc3VibW9kdWxlLgorIyBUaGUgdHJhc2ggZGlyZWN0b3J5IGlzIGEgZ29vZCBvbmUgYXMgYW55LiBXZSBuZWVkIHRvIGNhbm9uaWNhbGl6ZQorIyB0aGUgbmFtZSwgdGhvdWdoLCBhcyBzb21lIHRlc3RzIGNvbXBhcmUgaXQgdG8gdGhlIGFic29sdXRlIHBhdGggZ2l0CisjIGdlbmVyYXRlcywgd2hpY2ggd2lsbCBleHBhbmQgc3ltYm9saWMgbGlua3MuCitzdWJtb2R1cmw9JChwd2QgLVApCisKK2xpc3RicmFuY2hlcygpIHsKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWUpJyAncmVmcy9oZWFkcy8qJworfQorCitpbnNwZWN0KCkgeworCWRpcj0kMSAmJgorCWRvdGRvdD0iJHsyOi0uLn0iICYmCisKKwkoCisJCWNkICIkZGlyIiAmJgorCQlsaXN0YnJhbmNoZXMgPiIkZG90ZG90L2hlYWRzIiAmJgorCQl7IGdpdCBzeW1ib2xpYy1yZWYgSEVBRCB8fCA6OyB9ID4iJGRvdGRvdC9oZWFkIiAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPiIkZG90ZG90L2hlYWQtc2hhMSIgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUgJiYKKwkJZ2l0IGNsZWFuIC1uIC1kIC14ID4iJGRvdGRvdC91bnRyYWNrZWQiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkJyAnCisJZWNobyAicmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKwk+ZW1wdHkgJiYKKworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAtcSAiJHN1Ym1vZHVybCIgc3VibW9kID5hY3R1YWwgJiYKKwkJdGVzdCAhIC1zIGFjdHVhbCAmJgorCQllY2hvICJnaXRkaXI6IC4uLy5naXQvbW9kdWxlcy9zdWJtb2QiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC8uZ2l0ICYmCisJCSgKKwkJCWNkIHN1Ym1vZCAmJgorCQkJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlID5hY3R1YWwgJiYKKwkJCWVjaG8gIi4uLy4uLy4uL3N1Ym1vZCIgPmV4cGVjdCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQkJcm0gLWYgYWN0dWFsIGV4cGVjdAorCQkpICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3N1Ym1vZCAuLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9jbXAgZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgdG8gLmdpdGlnbm9yZWQgcGF0aCBmYWlscycgJworCSgKKwkJY2QgYWRkdGVzdC1pZ25vcmUgJiYKKwkJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCQlUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOgorCQlzdWJtb2QKKwkJVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuCisJCUVPRgorCQkjIERvZXMgbm90IHVzZSB0ZXN0X2NvbW1pdCBkdWUgdG8gdGhlIGlnbm9yZQorCQllY2hvICIqIiA+IC5naXRpZ25vcmUgJiYKKwkJZ2l0IGFkZCAtLWZvcmNlIC5naXRpZ25vcmUgJiYKKwkJZ2l0IGNvbW1pdCAtbSJJZ25vcmUgZXZlcnl0aGluZyIgJiYKKwkJISBnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgc3VibW9kID5hY3R1YWwgMj4mMSAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCB0byAuZ2l0aWdub3JlZCBwYXRoIHdpdGggLS1mb3JjZScgJworCSgKKwkJY2QgYWRkdGVzdC1pZ25vcmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLS1mb3JjZSAiJHN1Ym1vZHVybCIgc3VibW9kCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIC0tYnJhbmNoJyAnCisJZWNobyAicmVmcy9oZWFkcy9pbml0aWFsIiA+ZXhwZWN0LWhlYWQgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0LWhlYWRzICYmCisJcmVmcy9oZWFkcy9pbml0aWFsCisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlFT0YKKwk+ZW1wdHkgJiYKKworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAtYiBpbml0aWFsICIkc3VibW9kdXJsIiBzdWJtb2QtYnJhbmNoICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3N1Ym1vZC1icmFuY2ggLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QtaGVhZHMgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QtaGVhZCBoZWFkICYmCisJdGVzdF9jbXAgZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgd2l0aCAuLyBpbiBwYXRoJyAnCisJZWNobyAicmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKwk+ZW1wdHkgJiYKKworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgLi8uL2RvdHN1Ym1vZC8uL2Zyb3R6Ly4vICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L2RvdHN1Ym1vZC9mcm90eiAuLi8uLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9jbXAgZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgd2l0aCAvLyBpbiBwYXRoJyAnCisJZWNobyAicmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKwk+ZW1wdHkgJiYKKworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgc2xhc2hzbGFzaHN1Ym1vZC8vL2Zyb3R6Ly8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0CisJKSAmJgorCisJcm0gLWYgaGVhZHMgaGVhZCB1bnRyYWNrZWQgJiYKKwlpbnNwZWN0IGFkZHRlc3Qvc2xhc2hzbGFzaHN1Ym1vZC9mcm90eiAuLi8uLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9jbXAgZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgd2l0aCAvLi4gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisJPmVtcHR5ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIGRvdGRvdHN1Ym1vZC8uLi9yZWFsc3VibW9kL2Zyb3R6Ly4uICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3JlYWxzdWJtb2QgLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZCAmJgorCXRlc3RfY21wIGVtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHdpdGggLi8sIC8uLiBhbmQgLy8gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisJPmVtcHR5ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIGRvdC9kb3RzbGFzaHN1Ym1vZC8uLy4uLy4uLy8vL3JlYWxzdWJtb2QyL2EvYi9jL2QvLi4vLi4vLi4vLi4vZnJvdHovLy4uICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3JlYWxzdWJtb2QyIC4uLy4uICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWRzICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWQgJiYKKwl0ZXN0X2NtcCBlbXB0eSB1bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSBhZGQgYW4gZXhhbXBsZSBlbnRyeSB0byAuZ2l0bW9kdWxlcycgJworCUdJVF9DT05GSUc9LmdpdG1vZHVsZXMgXAorCWdpdCBjb25maWcgc3VibW9kdWxlLmV4YW1wbGUudXJsIGdpdDovL2V4YW1wbGUuY29tL2luaXQuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgZmFpbCBmb3IgdW5tYXBwZWQgcGF0aHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHN0YXR1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIG1hcCBwYXRoIGluIC5naXRtb2R1bGVzJyAnCisJY2F0IDw8XEVPRiA+ZXhwZWN0ICYmCitbc3VibW9kdWxlICJleGFtcGxlIl0KKwl1cmwgPSBnaXQ6Ly9leGFtcGxlLmNvbS9pbml0LmdpdAorCXBhdGggPSBpbml0CitFT0YKKworCUdJVF9DT05GSUc9LmdpdG1vZHVsZXMgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS5wYXRoIGluaXQgJiYKKworCXRlc3RfY21wIGV4cGVjdCAuZ2l0bW9kdWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIG9ubHkgcHJpbnQgb25lIGxpbmUnICcKKwlnaXQgc3VibW9kdWxlIHN0YXR1cyA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGxpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gZmV0Y2ggY29tbWl0IG5hbWUgZnJvbSBzdWJtb2R1bGUnICcKKwlyZXYxPSQoY2QgLnN1YnJlcG8gJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXByaW50ZiAicmV2MTogJXNcbiIgIiRyZXYxIiAmJgorCXRlc3QgLW4gIiRyZXYxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIGluaXRpYWxseSBiZSAibWlzc2luZyInICcKKwlnaXQgc3VibW9kdWxlIHN0YXR1cyA+bGluZXMgJiYKKwlncmVwICJeLSRyZXYxIiBsaW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHNob3VsZCByZWdpc3RlciBzdWJtb2R1bGUgdXJsIGluIC5naXQvY29uZmlnJyAnCisJZWNobyBnaXQ6Ly9leGFtcGxlLmNvbS9pbml0LmdpdCA+ZXhwZWN0ICYmCisKKwlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLnVybCA+dXJsICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgLi8uc3VicmVwbyAmJgorCisJdGVzdF9jbXAgZXhwZWN0IHVybAorJworCit0ZXN0X2ZhaWx1cmVfd2l0aF91bmtub3duX3N1Ym1vZHVsZSAoKSB7CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSAkMSBuby1zdWNoLXN1Ym1vZHVsZSAyPm91dHB1dC5lcnIgJiYKKwlncmVwICJeZXJyb3I6IC4qbm8tc3VjaC1zdWJtb2R1bGUiIG91dHB1dC5lcnIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBzaG91bGQgZmFpbCB3aXRoIHVua25vd24gc3VibW9kdWxlJyAnCisJdGVzdF9mYWlsdXJlX3dpdGhfdW5rbm93bl9zdWJtb2R1bGUgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgc2hvdWxkIGZhaWwgd2l0aCB1bmtub3duIHN1Ym1vZHVsZScgJworCXRlc3RfZmFpbHVyZV93aXRoX3Vua25vd25fc3VibW9kdWxlIHVwZGF0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIGZhaWwgd2l0aCB1bmtub3duIHN1Ym1vZHVsZScgJworCXRlc3RfZmFpbHVyZV93aXRoX3Vua25vd25fc3VibW9kdWxlIHN0YXR1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW5jIHNob3VsZCBmYWlsIHdpdGggdW5rbm93biBzdWJtb2R1bGUnICcKKwl0ZXN0X2ZhaWx1cmVfd2l0aF91bmtub3duX3N1Ym1vZHVsZSBzeW5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzaG91bGQgZmFpbCB3aGVuIHBhdGggaXMgdXNlZCBieSBhIGZpbGUnICcKKwllY2hvIGhlbGxvID5leHBlY3QgJiYKKworCWVjaG8gImhlbGxvIiA+aW5pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgc2hvdWxkIGZhaWwgd2hlbiBwYXRoIGlzIHVzZWQgYnkgYSBub25lbXB0eSBkaXJlY3RvcnknICcKKwllY2hvIGhlbGxvID5leHBlY3QgJiYKKworCXJtIC1mciBpbml0ICYmCisJbWtkaXIgaW5pdCAmJgorCWVjaG8gImhlbGxvIiA+aW5pdC9hICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGluaXQvYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgc2hvdWxkIHdvcmsgd2hlbiBwYXRoIGlzIGFuIGVtcHR5IGRpcicgJworCXJtIC1mciBpbml0ICYmCisJcm0gLWYgaGVhZC1zaGExICYmCisJZWNobyAiJHJldjEiID5leHBlY3QgJiYKKworCW1rZGlyIGluaXQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtcSA+dXBkYXRlLm91dCAmJgorCXRlc3QgISAtcyB1cGRhdGUub3V0ICYmCisKKwlpbnNwZWN0IGluaXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZC1zaGExCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgYmUgInVwLXRvLWRhdGUiIGFmdGVyIHVwZGF0ZScgJworCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5saXN0ICYmCisJZ3JlcCAiXiAkcmV2MSIgbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIGJlICJtb2RpZmllZCIgYWZ0ZXIgc3VibW9kdWxlIGNvbW1pdCcgJworCSgKKwkJY2QgaW5pdCAmJgorCQllY2hvIGIgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSBjb21taXQgMiIKKwkpICYmCisKKwlyZXYyPSQoY2QgaW5pdCAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdCAtbiAiJHJldjIiICYmCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpc3QgJiYKKworCWdyZXAgIl4rJHJldjIiIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIC0tY2FjaGVkIHNoYTEgc2hvdWxkIGJlIHJldjEnICcKKwlnaXQgc3VibW9kdWxlIC0tY2FjaGVkIHN0YXR1cyA+bGlzdCAmJgorCWdyZXAgIl4rJHJldjEiIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgc2hvdWxkIHJlcG9ydCB0aGUgU0hBMSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSBjb21taXQnICcKKwlnaXQgZGlmZiA+ZGlmZiAmJgorCWdyZXAgIl4rU3VicHJvamVjdCBjb21taXQgJHJldjIiIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHNob3VsZCBjaGVja291dCByZXYxJyAnCisJcm0gLWYgaGVhZC1zaGExICYmCisJZWNobyAiJHJldjEiID5leHBlY3QgJiYKKworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIGluaXQgJiYKKwlpbnNwZWN0IGluaXQgJiYKKworCXRlc3RfY21wIGV4cGVjdCBoZWFkLXNoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3VsZCBiZSAidXAtdG8tZGF0ZSIgYWZ0ZXIgdXBkYXRlJyAnCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpc3QgJiYKKwlncmVwICJeICRyZXYxIiBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHN1cGVycHJvamVjdCB3aXRoIHN1YnByb2plY3QgYWxyZWFkeSBwcmVzZW50JyAnCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHN1Ym1vZHVsZSBkaWZmJyAnCisJPmVtcHR5ICYmCisKKwlnaXQgYnJhbmNoIHNlY29uZCAmJgorCSgKKwkJY2QgaW5pdCAmJgorCQllY2hvIHMgPnMgJiYKKwkJZ2l0IGFkZCBzICYmCisJCWdpdCBjb21taXQgLW0gImNoYW5nZSBzdWJwcm9qZWN0IgorCSkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGluaXQgJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2UgaW5pdCIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5QLmRpZmYgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJZ2l0IGFwcGx5IC0taW5kZXggUC5kaWZmICYmCisKKwlnaXQgZGlmZiAtLWNhY2hlZCBtYXN0ZXIgPnN0YWdlZCAmJgorCXRlc3RfY21wIGVtcHR5IHN0YWdlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgLS1pbml0JyAnCisJbXYgaW5pdCBpbml0MiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLmV4YW1wbGUudXJsICIkKHB3ZCkvaW5pdDIiICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5leGFtcGxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgJiYKKworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIGluaXQgPiB1cGRhdGUub3V0ICYmCisJY2F0IHVwZGF0ZS5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3QgaW5pdGlhbGl6ZWQiIHVwZGF0ZS5vdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIGluaXQvLmdpdCAmJgorCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IGluaXQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIGluaXQvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgYWRkIGZpbGVzIGZyb20gYSBzdWJtb2R1bGUnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGluaXQvYQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyYWNlZnVsbHkgYWRkIHN1Ym1vZHVsZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2gnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgc3VicHJvamVjdCIgaW5pdCAmJgorCShjZCBpbml0ICYmCisJIGVjaG8gYiA+IGEpICYmCisJZ2l0IGFkZCBpbml0LyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkIGluaXQgJiYKKwljb21taXQ9JChjZCBpbml0ICYmCisJIGdpdCBjb21taXQgLW0gdXBkYXRlIGEgPi9kZXYvbnVsbCAmJgorCSBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGFkZCBpbml0LyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkIGluaXQgJiYKKwl0ZXN0ICRjb21taXQgPSAkKGdpdCBscy1maWxlcyAtLXN0YWdlIHwKKwkJc2VkIC1uICJzL14xNjAwMDAgXChbXiBdKlwpLiovXDEvcCIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgZ3JhY2VmdWxseSBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoJyAnCisKKwl0ZXN0ICJpbml0IiA9ICIkKGdpdCBscy1maWxlcyBpbml0LykiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92aW5nIHRvIGEgY29tbWl0IHdpdGhvdXQgc3VibW9kdWxlIGRvZXMgbm90IGxlYXZlIGVtcHR5IGRpcicgJworCXJtIC1yZiBpbml0ICYmCisJbWtkaXIgaW5pdCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCXRlc3QgISAtZCBpbml0ICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgPGludmFsaWQtc3ViY29tbWFuZD4gZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIG5vLXN1Y2gtc3ViY29tbWFuZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3VibW9kdWxlcyB3aXRob3V0IHNwZWNpZnlpbmcgYW4gZXhwbGljaXQgcGF0aCcgJworCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyByID5yICYmCisJCWdpdCBhZGQgciAmJgorCQlnaXQgY29tbWl0IC1tICJyZXBvIGNvbW1pdCAxIgorCSkgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIHJlcG8vIGJhcmUuZ2l0ICYmCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsL3JlcG8iICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnJlcG8ucGF0aCByZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsL2JhcmUuZ2l0IiAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5iYXJlLnBhdGggYmFyZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHNob3VsZCBmYWlsIHdoZW4gcGF0aCBpcyB1c2VkIGJ5IGEgZmlsZScgJworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQl0b3VjaCBmaWxlICYmCisJCXRlc3RfbXVzdF9mYWlsCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsL3JlcG8iIGZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzaG91bGQgZmFpbCB3aGVuIHBhdGggaXMgdXNlZCBieSBhbiBleGlzdGluZyBkaXJlY3RvcnknICcKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJbWtkaXIgZW1wdHktZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsL3JlcG8iIGVtcHR5LWRpcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIHN1cGVycHJvamVjdCBhcyB1cHN0cmVhbSB3aGVuIHBhdGggaXMgcmVsYXRpdmUgYW5kIG5vIHVybCBpcyBzZXQgdGhlcmUnICcKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vcmVwbyByZWxhdGl2ZSAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnJlbGF0aXZlLnVybCkiID0gLi4vcmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgcmVsYXRpdmUgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5yZWxhdGl2ZS51cmwpIiA9ICIkc3VibW9kdXJsL3JlcG8iCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZm9yIHJlbGF0aXZlIHBhdGggdGVzdHMnICcKKwlta2RpciByZWx0ZXN0ICYmCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWdpdCBpbml0ICYmCisJCW1rZGlyIHN1YiAmJgorCQkoCisJCQljZCBzdWIgJiYKKwkJCWdpdCBpbml0ICYmCisJCQl0ZXN0X2NvbW1pdCBmb28KKwkJKSAmJgorCQlnaXQgYWRkIHN1YiAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aCBzdWIgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCAuLi9zdWJyZXBvICYmCisJCWNwIC5naXQvY29uZmlnIHByaXN0aW5lLS5naXQtY29uZmlnICYmCisJCWNwIC5naXRtb2R1bGVzIHByaXN0aW5lLS5naXRtb2R1bGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggVVJMIC0gc3NoOi8vaG9zdG5hbWUvcmVwbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIHNzaDovL2hvc3RuYW1lL3JlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gc3NoOi8vaG9zdG5hbWUvc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHBvcnQtcXVhbGlmaWVkIFVSTCAtIHNzaDovL2hvc3RuYW1lOjIyL3JlcG8nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCBzc2g6Ly9ob3N0bmFtZToyMi9yZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IHNzaDovL2hvc3RuYW1lOjIyL3N1YnJlcG8KKwkpCisnCisKKyMgQWJvdXQgdGhlIGNob2ljZSBvZiB0aGUgcGF0aCBpbiB0aGUgbmV4dCB0ZXN0OgorIyAtIGRvdWJsZS1zbGFzaCBzaWRlLXN0ZXBzIHBhdGggbWFuZ2xpbmcgaXNzdWVzIG9uIFdpbmRvd3MKKyMgLSBpdCBpcyBzdGlsbCBhbiBhYnNvbHV0ZSBsb2NhbCBwYXRoCisjIC0gdGhlcmUgY2Fubm90IGJlIGEgc2VydmVyIHdpdGggYSBibGFuayBpbiBpdHMgbmFtZSBqdXN0IGluIGNhc2UgdGhlCisjICAgcGF0aCBpcyB1c2VkIGVycm9uZW91c2x5IHRvIGFjY2VzcyBhIC8vc2VydmVyL3NoYXJlIHN0eWxlIHBhdGgKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gcGF0aCB3b3JrcyB3aXRoIGxvY2FsIHBhdGggLSAvL3NvbWV3aGVyZSBlbHNlL3JlcG8nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAiLy9zb21ld2hlcmUgZWxzZS9yZXBvIiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSAiLy9zb21ld2hlcmUgZWxzZS9zdWJyZXBvIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIGZpbGUgVVJMIC0gZmlsZTovLy90bXAvcmVwbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIGZpbGU6Ly8vdG1wL3JlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gZmlsZTovLy90bXAvc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIGhlbHBlciBVUkwtIGhlbHBlcjo6Ly9ob3N0bmFtZS9yZXBvJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgaGVscGVyOjovL2hvc3RuYW1lL3JlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gaGVscGVyOjovL2hvc3RuYW1lL3N1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCBzY3Atc3R5bGUgVVJMIC0gdXNlckBob3N0OnJlcG8nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCB1c2VyQGhvc3Q6cmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSB1c2VyQGhvc3Q6c3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHNjcC1zdHlsZSBVUkwgLSB1c2VyQGhvc3Q6cGF0aC90by9yZXBvJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgdXNlckBob3N0OnBhdGgvdG8vcmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSB1c2VyQGhvc3Q6cGF0aC90by9zdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggcmVsYXRpdmUgbG9jYWwgcGF0aCAtIGZvbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIGZvbyAmJgorCQkjIGFjdHVhbDogZmFpbHMgd2l0aCBhbiBlcnJvcgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBzdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggcmVsYXRpdmUgbG9jYWwgcGF0aCAtIGZvby9iYXInICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCBmb28vYmFyICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IGZvby9zdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggcmVsYXRpdmUgbG9jYWwgcGF0aCAtIC4vZm9vJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgLi9mb28gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHJlbGF0aXZlIGxvY2FsIHBhdGggLSAuL2Zvby9iYXInICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAuL2Zvby9iYXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gZm9vL3N1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCByZWxhdGl2ZSBsb2NhbCBwYXRoIC0gLi4vZm9vJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgLi4vZm9vICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IC4uL3N1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCByZWxhdGl2ZSBsb2NhbCBwYXRoIC0gLi4vZm9vL2JhcicgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4uL2Zvby9iYXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gLi4vZm9vL3N1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL2Jhci9hL2IvYyB3b3JrcyB3aXRoIHJlbGF0aXZlIGxvY2FsIHBhdGggLSAuLi9mb28vYmFyLmdpdCcgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlta2RpciAtcCBhL2IvYyAmJgorCQkoY2QgYS9iL2M7IGdpdCBpbml0KSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4uL2Zvby9iYXIuZ2l0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL2Jhci9hL2IvYyAuL2EvYi9jICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLmEvYi9jLnVybCkiID0gLi4vZm9vL2Jhci9hL2IvYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92aW5nIHRoZSBzdXBlcnByb2plY3QgZG9lcyBub3QgYnJlYWsgc3VibW9kdWxlcycgJworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+ZXhwZWN0CisJKQorCW12IGFkZHRlc3QgYWRkdGVzdDIgJiYKKwkoCisJCWNkIGFkZHRlc3QyICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoIGIvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMGI0MjllCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaApAQCAtMCwwICsxLDI1MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBQaW5nIFlpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdTdW1tYXJ5IHN1cHBvcnQgZm9yIHN1Ym1vZHVsZXMKKworVGhpcyB0ZXN0IHRyaWVzIHRvIHZlcmlmeSB0aGUgc2FuaXR5IG9mIHN1bW1hcnkgc3ViY29tbWFuZCBvZiBnaXQgc3VibW9kdWxlLgorJworCisuIC4vdGVzdC1saWIuc2gKKworYWRkX2ZpbGUgKCkgeworCXNtPSQxCisJc2hpZnQKKwlvd2Q9JChwd2QpCisJY2QgIiRzbSIKKwlmb3IgbmFtZTsgZG8KKwkJZWNobyAiJG5hbWUiID4gIiRuYW1lIiAmJgorCQlnaXQgYWRkICIkbmFtZSIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCAkbmFtZSIKKwlkb25lID4vZGV2L251bGwKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgfCBjdXQgLWMxLTcKKwljZCAiJG93ZCIKK30KK2NvbW1pdF9maWxlICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0ICIkQCIgLW0gIkNvbW1pdCAkKiIgPi9kZXYvbnVsbAorfQorCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMSAmJgorYWRkX2ZpbGUgLiBmb28gPi9kZXYvbnVsbAorCitoZWFkMT0kKGFkZF9maWxlIHNtMSBmb28xIGZvbzIpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGVkIHN1Ym1vZHVsZScgIgorCWdpdCBhZGQgc20xICYmCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgMDAwMDAwMC4uLiRoZWFkMSAoMik6CisgID4gQWRkIGZvbzIKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NvbW1pdF9maWxlIHNtMSAmJgoraGVhZDI9JChhZGRfZmlsZSBzbTEgZm9vMykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGZvcndhcmQpJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQxLi4uJGhlYWQyICgxKToKKyAgPiBBZGQgZm9vMworCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGZvcndhcmQpLCAtLWZpbGVzJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZmlsZXMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDEuLi4kaGVhZDIgKDEpOgorICA+IEFkZCBmb28zCisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCitjb21taXRfZmlsZSBzbTEgJiYKK2hlYWQzPSQoCisJY2Qgc20xICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgPi9kZXYvbnVsbCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCB8IGN1dCAtYzEtNworKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoYmFja3dhcmQpJyAiCisgICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKyAgICBjYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQyLi4uJGhlYWQzICgyKToKKyAgPCBBZGQgZm9vMworICA8IEFkZCBmb28yCisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCitoZWFkND0kKGFkZF9maWxlIHNtMSBmb280IGZvbzUpICYmCitoZWFkNF9mdWxsPSQoR0lUX0RJUj1zbTEvLmdpdCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoYmFja3dhcmQgYW5kIGZvcndhcmQpJyAiCisgICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKyAgICBjYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQyLi4uJGhlYWQ0ICg0KToKKyAgPiBBZGQgZm9vNQorICA+IEFkZCBmb280CisgIDwgQWRkIGZvbzMKKyAgPCBBZGQgZm9vMgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdW1tYXJ5LWxpbWl0JyAiCisgICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC1uIDMgPmFjdHVhbCAmJgorICAgIGNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDIuLi4kaGVhZDQgKDQpOgorICA+IEFkZCBmb281CisgID4gQWRkIGZvbzQKKyAgPCBBZGQgZm9vMworCitFT0YKKyAgICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY29tbWl0X2ZpbGUgc20xICYmCittdiBzbTEgc20xLWJhayAmJgorZWNobyBzbTEgPnNtMSAmJgoraGVhZDU9JChnaXQgaGFzaC1vYmplY3Qgc20xIHwgY3V0IC1jMS03KSAmJgorZ2l0IGFkZCBzbTEgJiYKK3JtIC1mIHNtMSAmJgorbXYgc20xLWJhayBzbTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiksIC0tY2FjaGVkJyAiCisgICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tY2FjaGVkID5hY3R1YWwgJiYKKyAgICBjYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQ0KHN1Ym1vZHVsZSktPiRoZWFkNShibG9iKSAoMyk6CisgIDwgQWRkIGZvbzUKKworRU9GCisJdGVzdF9pMThuY21wIGFjdHVhbCBleHBlY3RlZAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoc3VibW9kdWxlLT5ibG9iKSwgLS1maWxlcycgIgorICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWZpbGVzID5hY3R1YWwgJiYKKyAgICBjYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQ1KGJsb2IpLT4kaGVhZDQoc3VibW9kdWxlKSAoMyk6CisgID4gQWRkIGZvbzUKKworRU9GCisgICAgdGVzdF9pMThuY21wIGFjdHVhbCBleHBlY3RlZAorIgorCitybSAtcmYgc20xICYmCitnaXQgY2hlY2tvdXQtaW5kZXggc20xCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoc3VibW9kdWxlLT5ibG9iKScgIgorICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisgICAgY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNChzdWJtb2R1bGUpLT4kaGVhZDUoYmxvYik6CisKK0VPRgorICAgIHRlc3RfaTE4bmNtcCBhY3R1YWwgZXhwZWN0ZWQKKyIKKworcm0gLWYgc20xICYmCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMSAmJgoraGVhZDY9JChhZGRfZmlsZSBzbTEgZm9vNiBmb283KQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uZXhpc3RlbnQgY29tbWl0JyAiCisgICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKyAgICBjYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQ0Li4uJGhlYWQ2OgorICBXYXJuOiBzbTEgZG9lc24ndCBjb250YWluIGNvbW1pdCAkaGVhZDRfZnVsbAorCitFT0YKKyAgICB0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdGVkCisiCisKK2NvbW1pdF9maWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoYmxvYi0+c3VibW9kdWxlKScgIgorICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisgICAgY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNShibG9iKS0+JGhlYWQ2KHN1Ym1vZHVsZSkgKDIpOgorICA+IEFkZCBmb283CisKK0VPRgorICAgIHRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY29tbWl0X2ZpbGUgc20xICYmCitybSAtcmYgc20xCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVkIHN1Ym1vZHVsZScgIgorICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisgICAgY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNi4uLjAwMDAwMDA6CisKK0VPRgorICAgIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMiAmJgoraGVhZDc9JChhZGRfZmlsZSBzbTIgZm9vOCBmb285KSAmJgorZ2l0IGFkZCBzbTIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgc3VibW9kdWxlcycgIgorICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisgICAgY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNi4uLjAwMDAwMDA6CisKKyogc20yIDAwMDAwMDAuLi4kaGVhZDcgKDIpOgorICA+IEFkZCBmb285CisKK0VPRgorICAgIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRoIGZpbHRlcicgIgorICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSBzbTIgPmFjdHVhbCAmJgorICAgIGNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMiAwMDAwMDAwLi4uJGhlYWQ3ICgyKToKKyAgPiBBZGQgZm9vOQorCitFT0YKKyAgICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY29tbWl0X2ZpbGUgc20yCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZlbiBjb21taXQnICIKKyAgICBnaXQgc3VibW9kdWxlIHN1bW1hcnkgSEVBRF4gPmFjdHVhbCAmJgorICAgIGNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDYuLi4wMDAwMDAwOgorCisqIHNtMiAwMDAwMDAwLi4uJGhlYWQ3ICgyKToKKyAgPiBBZGQgZm9vOQorCitFT0YKKyAgICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mb3Itc3RhdHVzJyAiCisgICAgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZm9yLXN0YXR1cyBIRUFEXiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGFjdHVhbCAtIDw8RU9GCisjIFN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMKKyMgKiBzbTEgJGhlYWQ2Li4uMDAwMDAwMDoKKyMKKyMgKiBzbTIgMDAwMDAwMC4uLiRoZWFkNyAoMik6CisjICAgPiBBZGQgZm9vOQorIworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgd2hlbiB1c2luZyAtLWZpbGVzIHRvZ2V0aGVyIHdpdGggLS1jYWNoZWQnICIKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1maWxlcyAtLWNhY2hlZAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG91bGQgbm90IGZhaWwgaW4gYW4gZW1wdHkgcmVwbycgIgorICAgIGdpdCBpbml0IHh5enp5ICYmCisgICAgY2QgeHl6enkgJiYKKyAgICBnaXQgc3VibW9kdWxlIHN1bW1hcnkgPm91dHB1dCAyPiYxICYmCisgICAgdGVzdF9jbXAgb3V0cHV0IC9kZXYvbnVsbAorIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDItc3VibW9kdWxlLXJlYmFzZS5zaCBiL3QvdDc0MDItc3VibW9kdWxlLXJlYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOTE5YzhkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwMi1zdWJtb2R1bGUtcmViYXNlLnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlYmFzaW5nIGFuZCBzdGFzaGluZyB3aXRoIGRpcnR5IHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gZmlsZSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgY2xvbmUgLiBzdWJtb2R1bGUgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc3VibW9kdWxlICYmCisJZWNobyBzZWNvbmQgbGluZSA+PiBmaWxlICYmCisJKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcHVsbCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZpbGUtYW5kLXN1Ym1vZHVsZSAtYQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIGEgZGlydHkgc3VibW9kdWxlJyAnCisKKwkoY2Qgc3VibW9kdWxlICYmCisJIGVjaG8gM3JkIGxpbmUgPj4gZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSBmb3JrIC1hKSAmJgorCWVjaG8gdW5yZWxhdGVkID4+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdW5yZWxhdGVkIGZpbGUyICYmCisJZWNobyBvdGhlciBsaW5lID4+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVwZGF0ZSBmaWxlICYmCisJQ1VSUkVOVD0kKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJRVhQRUNURUQ9JChnaXQgcmV2LXBhcnNlIEhFQUR+MjpzdWJtb2R1bGUpICYmCisJR0lUX1RSQUNFPTEgZ2l0IHJlYmFzZSAtLW9udG8gSEVBRH4yIEhFQUReICYmCisJU1RPUkVEPSQoZ2l0IHJldi1wYXJzZSBIRUFEOnN1Ym1vZHVsZSkgJiYKKwl0ZXN0ICRFWFBFQ1RFRCA9ICRTVE9SRUQgJiYKKwl0ZXN0ICRDVVJSRU5UID0gJChjZCBzdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorCisnCisKK2NhdCA+IGZha2UtZWRpdG9yLnNoIDw8IFxFT0YKKyMhL2Jpbi9zaAorZWNobyAkRURJVE9SX1RFWFQKK0VPRgorY2htb2QgYSt4IGZha2UtZWRpdG9yLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyYWN0aXZlIHJlYmFzZSB3aXRoIGEgZGlydHkgc3VibW9kdWxlJyAnCisKKwl0ZXN0IHN1Ym1vZHVsZSA9ICQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkpICYmCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlHSVRfRURJVE9SPSJcIiQocHdkKS9mYWtlLWVkaXRvci5zaFwiIiBFRElUT1JfVEVYVD0icGljayAkSEVBRCIgXAorCQlnaXQgcmViYXNlIC1pIEhFQUReICYmCisJdGVzdCBzdWJtb2R1bGUgPSAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5KQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIGRpcnR5IGZpbGUgYW5kIHN1Ym1vZHVsZSBmYWlscycgJworCisJZWNobyB5ZXQgYW5vdGhlciBsaW5lID4+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG5leHQgZmlsZSAmJgorCWVjaG8gcmV3cml0ZSA+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJld3JpdGUgZmlsZSAmJgorCWVjaG8gZGlydHkgPiBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW9udG8gSEVBRH4yIEhFQUReCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggd2l0aCBhIGRpcnR5IHN1Ym1vZHVsZScgJworCisJZWNobyBuZXcgPiBmaWxlICYmCisJQ1VSUkVOVD0kKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdCBuZXcgIT0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IHN1Ym1vZHVsZSA9ICQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkpICYmCisJdGVzdCAkQ1VSUkVOVCA9ICQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IG5ldyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAkQ1VSUkVOVCA9ICQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDMtc3VibW9kdWxlLXN5bmMuc2ggYi90L3Q3NDAzLXN1Ym1vZHVsZS1zeW5jLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUyNGQ1YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDAzLXN1Ym1vZHVsZS1zeW5jLnNoCkBAIC0wLDAgKzEsMTc3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IERhdmlkIEFndWlsYXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN1Ym1vZHVsZSBzeW5jCisKK1RoZXNlIHRlc3RzIGV4ZXJjaXNlIHRoZSAiZ2l0IHN1Ym1vZHVsZSBzeW5jIiBzdWJjb21tYW5kLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBmaWxlID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdXBzdHJlYW0gJiYKKwlnaXQgY2xvbmUgLiBzdXBlciAmJgorCWdpdCBjbG9uZSBzdXBlciBzdWJtb2R1bGUgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1Ym1vZHVsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIgorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VwZXItY2xvbmUgJiYKKwkoY2Qgc3VwZXItY2xvbmUgJiYgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0KSAmJgorCWdpdCBjbG9uZSBzdXBlciBlbXB0eS1jbG9uZSAmJgorCShjZCBlbXB0eS1jbG9uZSAmJiBnaXQgc3VibW9kdWxlIGluaXQpICYmCisJZ2l0IGNsb25lIHN1cGVyIHRvcC1vbmx5LWNsb25lICYmCisJZ2l0IGNsb25lIHN1cGVyIHJlbGF0aXZlLWNsb25lICYmCisJKGNkIHJlbGF0aXZlLWNsb25lICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIHN1Ym1vZHVsZScgJworCShjZCBzdWJtb2R1bGUgJiYKKwkgZWNobyBzZWNvbmQgbGluZSA+PiBmaWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2Ugc3VibW9kdWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIHN1Ym1vZHVsZSB1cmwnICcKKwkoY2Qgc3VwZXIgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZ2l0IHB1bGwKKwkpICYmCisJbXYgc3VibW9kdWxlIG1vdmVkLXN1Ym1vZHVsZSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsIC4uL21vdmVkLXN1Ym1vZHVsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSBtb3ZlZC1zdWJtb2R1bGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIHNob3VsZCB1cGRhdGUgc3VibW9kdWxlIFVSTHMnICcKKwkoY2Qgc3VwZXItY2xvbmUgJiYKKwkgZ2l0IHB1bGwgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBzeW5jCisJKSAmJgorCXRlc3QgLWQgIiQoY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCisJIGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKKwkpIiAmJgorCShjZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgcHVsbAorCSkgJiYKKwkoY2Qgc3VwZXItY2xvbmUgJiYKKwkgdGVzdCAtZCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIHNob3VsZCB1cGRhdGUga25vd24gc3VibW9kdWxlIFVSTHMnICcKKwkoY2QgZW1wdHktY2xvbmUgJiYKKwkgZ2l0IHB1bGwgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJIHRlc3QgLWQgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBzaG91bGQgbm90IHZpdmlmeSB1bmludGVyZXN0aW5nIHN1Ym1vZHVsZScgJworCShjZCB0b3Atb25seS1jbG9uZSAmJgorCSBnaXQgcHVsbCAmJgorCSBnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkgdGVzdCAteiAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBzeW5jIHN1Ym1vZHVsZSAmJgorCSB0ZXN0IC16ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIGZvbycgJworCShjZCByZWxhdGl2ZS1jbG9uZSAmJgorCSBnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIGZvbyAmJgorCSBnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkoY2Qgc3VibW9kdWxlICYmCisJICNhY3R1YWwgZmFpbHMgd2l0aDogImNhbm5vdCBzdHJpcCBvZmYgdXJsIGZvbworCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi9zdWJtb2R1bGUiCisJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIGZvby9iYXInICcKKwkoY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkgZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiBmb28vYmFyICYmCisJIGdpdCBzdWJtb2R1bGUgc3luYyAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkgI2FjdHVhbCBmb28vc3VibW9kdWxlCisJIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL2Zvby9zdWJtb2R1bGUiCisJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIC4vZm9vJyAnCisJKGNkIHJlbGF0aXZlLWNsb25lICYmCisJIGdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gLi9mb28gJiYKKwkgZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJKGNkIHN1Ym1vZHVsZSAmJgorCSAjYWN0dWFsIC4vc3VibW9kdWxlCisJIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL3N1Ym1vZHVsZSIKKwkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBoYW5kbGVzIG9yaWdpbiBVUkwgb2YgdGhlIGZvcm0gLi9mb28vYmFyJyAnCisJKGNkIHJlbGF0aXZlLWNsb25lICYmCisJIGdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gLi9mb28vYmFyICYmCisJIGdpdCBzdWJtb2R1bGUgc3luYyAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkgI2FjdHVhbCAuL2Zvby9zdWJtb2R1bGUKKwkgdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vZm9vL3N1Ym1vZHVsZSIKKwkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBoYW5kbGVzIG9yaWdpbiBVUkwgb2YgdGhlIGZvcm0gLi4vZm9vJyAnCisJKGNkIHJlbGF0aXZlLWNsb25lICYmCisJIGdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gLi4vZm9vICYmCisJIGdpdCBzdWJtb2R1bGUgc3luYyAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkgI2FjdHVhbCAuLi9zdWJtb2R1bGUKKwkgdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vLi4vc3VibW9kdWxlIgorCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSAuLi9mb28vYmFyJyAnCisJKGNkIHJlbGF0aXZlLWNsb25lICYmCisJIGdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gLi4vZm9vL2JhciAmJgorCSBnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkoY2Qgc3VibW9kdWxlICYmCisJICNhY3R1YWwgLi4vZm9vL3N1Ym1vZHVsZQorCSB0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi8uLi9mb28vc3VibW9kdWxlIgorCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSAuLi9mb28vYmFyIHdpdGggZGVlcGx5IG5lc3RlZCBzdWJtb2R1bGUnICcKKwkoY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkgZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuLi9mb28vYmFyICYmCisJIG1rZGlyIC1wIGEvYi9jICYmCisJICggY2QgYS9iL2MgJiYKKwkgICBnaXQgaW5pdCAmJgorCSAgIDo+IC5naXRpZ25vcmUgJiYKKwkgICBnaXQgYWRkIC5naXRpZ25vcmUgJiYKKwkgICB0ZXN0X3RpY2sgJiYKKwkgICBnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgKSAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9iYXIvYS9iL2MgLi9hL2IvYyAmJgorCSBnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkoY2QgYS9iL2MgJiYKKwkgI2FjdHVhbCAuLi9mb28vYmFyL2EvYi9jCisJIHRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uLy4uLy4uLy4uL2Zvby9iYXIvYS9iL2MiCisJKQorCSkKKycKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDUtc3VibW9kdWxlLW1lcmdlLnNoIGIvdC90NzQwNS1zdWJtb2R1bGUtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQ1YjQyYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDUtc3VibW9kdWxlLW1lcmdlLnNoCkBAIC0wLDAgKzEsMjgyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2luZyB3aXRoIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjCisjIGhpc3RvcnkKKyMKKyMgICAgICAgIGEgLS0tIGMKKyMgICAgICAvICAgXCAvCisjIHJvb3QgICAgICBYCisjICAgICAgXCAgIC8gXAorIyAgICAgICAgYiAtLS0gZAorIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCW1rZGlyIHN1YiAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZWNobyBvcmlnaW5hbCA+IGZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tIHN1Yi1yb290KSAmJgorCWdpdCBhZGQgc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByb290ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYSBtYXN0ZXIgJiYKKwkoY2Qgc3ViICYmCisJIGVjaG8gQSA+IGZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tIHN1Yi1hKSAmJgorCWdpdCBhZGQgc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBhICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYiBtYXN0ZXIgJiYKKwkoY2Qgc3ViICYmCisJIGVjaG8gQiA+IGZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tIHN1Yi1iKSAmJgorCWdpdCBhZGQgc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYyBhICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgYiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGQgYiAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIGEKKycKKworIyBIaXN0b3J5IHNldHVwCisjCisjICAgICAgICAgICAgIGIKKyMgICAgICAgICAgIC8gICBcCisjICBpbml0IC0tIGEgICAgIGQKKyMgICAgXCAgICAgIFwgICAvCisjICAgICBnICAgICAgIGMKKyMKKyMgYSBpbiB0aGUgbWFpbiByZXBvc2l0b3J5IHJlY29yZHMgdG8gc3ViLWEgaW4gdGhlIHN1Ym1vZHVsZSBhbmQKKyMgYW5hbG9nb3VzIGIgYW5kIGMuIGQgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgZm91bmQgYnkgbWVyZ2luZyBjIGludG8KKyMgYiBpbiB0aGUgbWFpbiByZXBvc2l0b3J5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIG1lcmdlIHNlYXJjaCcgJworCW1rZGlyIG1lcmdlLXNlYXJjaCAmJgorCShjZCBtZXJnZS1zZWFyY2ggJiYKKwlnaXQgaW5pdCAmJgorCW1rZGlyIHN1YiAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZWNobyAiZmlsZS1hIiA+IGZpbGUtYSAmJgorCSBnaXQgYWRkIGZpbGUtYSAmJgorCSBnaXQgY29tbWl0IC1tICJzdWItYSIgJiYKKwkgZ2l0IGJyYW5jaCBzdWItYSkgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdCAmJgorCWdpdCBicmFuY2ggaW5pdCAmJgorCWdpdCBhZGQgc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAiYSIgJiYKKwlnaXQgYnJhbmNoIGEgJiYKKworCWdpdCBjaGVja291dCAtYiBiICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgLWIgc3ViLWIgJiYKKwkgZWNobyAiZmlsZS1iIiA+IGZpbGUtYiAmJgorCSBnaXQgYWRkIGZpbGUtYiAmJgorCSBnaXQgY29tbWl0IC1tICJzdWItYiIpICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYiIgJiYKKworCWdpdCBjaGVja291dCAtYiBjIGEgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCAtYiBzdWItYyBzdWItYSAmJgorCSBlY2hvICJmaWxlLWMiID4gZmlsZS1jICYmCisJIGdpdCBhZGQgZmlsZS1jICYmCisJIGdpdCBjb21taXQgLW0gInN1Yi1jIikgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJjIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGQgYSAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHN1Yi1kIHN1Yi1iICYmCisJIGdpdCBtZXJnZSBzdWItYykgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJkIiAmJgorCWdpdCBicmFuY2ggdGVzdCBiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgZyBpbml0ICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgLWIgc3ViLWcgc3ViLWMpICYmCisJZ2l0IGFkZCBzdWIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJnIikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugd2l0aCBvbmUgc2lkZSBhcyBhIGZhc3QtZm9yd2FyZCBvZiB0aGUgb3RoZXInICcKKwkoY2QgbWVyZ2Utc2VhcmNoICYmCisJIGdpdCBjaGVja291dCAtYiB0ZXN0LWZvcndhcmQgYiAmJgorCSBnaXQgbWVyZ2UgZCAmJgorCSBnaXQgbHMtdHJlZSB0ZXN0LWZvcndhcmQgc3ViIHwgY3V0IC1mMSB8IGN1dCAtZjMgLWQiICIgPiBhY3R1YWwgJiYKKwkgKGNkIHN1YiAmJgorCSAgZ2l0IHJldi1wYXJzZSBzdWItZCA+IC4uL2V4cGVjdCkgJiYKKwkgdGVzdF9jbXAgYWN0dWFsIGV4cGVjdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyBzaG91bGQgY29uZmxpY3QgZm9yIG5vbiBmYXN0LWZvcndhcmQnICcKKwkoY2QgbWVyZ2Utc2VhcmNoICYmCisJIGdpdCBjaGVja291dCAtYiB0ZXN0LW5vbmZvcndhcmQgYiAmJgorCSAoY2Qgc3ViICYmCisJICBnaXQgcmV2LXBhcnNlIHN1Yi1kID4gLi4vZXhwZWN0KSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYyAyPiBhY3R1YWwgICYmCisJIGdyZXAgJChjYXQgZXhwZWN0KSBhY3R1YWwgPiAvZGV2L251bGwgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyBzaG91bGQgZmFpbCBmb3IgYW1iaWd1b3VzIGNvbW1vbiBwYXJlbnQnICcKKwkoY2QgbWVyZ2Utc2VhcmNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QtYW1iaWd1b3VzIGIgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCAtYiBhbWJpZ3VvdXMgc3ViLWIgJiYKKwkgZ2l0IG1lcmdlIHN1Yi1jICYmCisJIGdpdCByZXYtcGFyc2Ugc3ViLWQgPiAuLi9leHBlY3QxICYmCisJIGdpdCByZXYtcGFyc2UgYW1iaWd1b3VzID4gLi4vZXhwZWN0MikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYyAyPiBhY3R1YWwgJiYKKwlncmVwICQoY2F0IGV4cGVjdDEpIGFjdHVhbCA+IC9kZXYvbnVsbCAmJgorCWdyZXAgJChjYXQgZXhwZWN0MikgYWN0dWFsID4gL2Rldi9udWxsICYmCisJZ2l0IHJlc2V0IC0taGFyZCkKKycKKworIyBpbiBhIHNpdHVhdGlvbiBsaWtlIHRoaXMKKyMKKyMgc3VibW9kdWxlIHRyZWU6CisjCisjICAgIHN1Yi1hIC0tLSBzdWItYiAtLS0gc3ViLWQKKyMKKyMgbWFpbiB0cmVlOgorIworIyAgICBlIChzdWItYSkKKyMgICAvCisjICBiYiAoc3ViLWIpCisjICAgXAorIyAgICBmIChzdWItZCkKKyMKKyMgQSBtZXJnZSBiZXR3ZWVuIGUgYW5kIGYgc2hvdWxkIGZhaWwgYmVjYXVzZSBvbmUgb2YgdGhlIHN1Ym1vZHVsZQorIyBjb21taXRzIChzdWItYSkgZG9lcyBub3QgZGVzY2VuZCBmcm9tIHRoZSBzdWJtb2R1bGUgbWVyZ2UtYmFzZSAoc3ViLWIpLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyBzaG91bGQgZmFpbCBmb3IgY2hhbmdlcyB0aGF0IGFyZSBiYWNrd2FyZHMnICcKKwkoY2QgbWVyZ2Utc2VhcmNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJiIGEgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCBzdWItYikgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJiYiIgJiYKKworCWdpdCBjaGVja291dCAtYiBlIGJiICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgc3ViLWEpICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZSIgJiYKKworCWdpdCBjaGVja291dCAtYiBmIGJiICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgc3ViLWQpICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZiIgJiYKKworCWdpdCBjaGVja291dCAtYiB0ZXN0LWJhY2t3YXJkIGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZikKKycKKworCisjIENoZWNrIHRoYXQgdGhlIGNvbmZsaWN0aW5nIHN1Ym1vZHVsZSBpcyBkZXRlY3RlZCB3aGVuIGl0IGlzCisjIGluIHRoZSBjb21tb24gYW5jZXN0b3IuIHN0YXR1cyBzaG91bGQgYmUgJ1UwMC4uLjAwIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgc2hvdWxkIGRpc3BsYXkgdGhlIG1lcmdlIGNvbmZsaWN0IHByb3Blcmx5IHdpdGggbWVyZ2UgYmFzZScgJworICAgICAgIChjZCBtZXJnZS1zZWFyY2ggJiYKKyAgICAgICBjYXQgPi5naXRtb2R1bGVzIDw8RU9GICYmCitbc3VibW9kdWxlICJzdWIiXQorICAgICAgIHBhdGggPSBzdWIKKyAgICAgICB1cmwgPSAkVFJBU0hfRElSRUNUT1JZL3N1YgorRU9GCisgICAgICAgY2F0ID5leHBlY3QgPDxFT0YgJiYKK1UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHN1YgorRU9GCisgICAgICAgZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPiBhY3R1YWwgJiYKKyAgICAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJlc2V0IC0taGFyZCkKKycKKworIyBDaGVjayB0aGF0IHRoZSBjb25mbGljdGluZyBzdWJtb2R1bGUgaXMgZGV0ZWN0ZWQgd2hlbiBpdCBpcworIyBub3QgaW4gdGhlIGNvbW1vbiBhbmNlc3Rvci4gc3RhdHVzIHNob3VsZCBiZSAnVTAwLi4uMDAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3VibW9kdWxlIHN0YXR1cyBzaG91bGQgZGlzcGxheSB0aGUgbWVyZ2UgY29uZmxpY3QgcHJvcGVybHkgd2l0aG91dCBtZXJnZS1iYXNlJyAnCisgICAgICAgKGNkIG1lcmdlLXNlYXJjaCAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0LW5vLW1lcmdlLWJhc2UgZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBiICYmCisgICAgICAgY2F0ID4uZ2l0bW9kdWxlcyA8PEVPRiAmJgorW3N1Ym1vZHVsZSAic3ViIl0KKyAgICAgICBwYXRoID0gc3ViCisgICAgICAgdXJsID0gJFRSQVNIX0RJUkVDVE9SWS9zdWIKK0VPRgorICAgICAgIGNhdCA+ZXhwZWN0IDw8RU9GICYmCitVMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBzdWIKK0VPRgorICAgICAgIGdpdCBzdWJtb2R1bGUgc3RhdHVzID4gYWN0dWFsICYmCisgICAgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorICAgICAgIGdpdCByZXNldCAtLWhhcmQpCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyB3aXRoIGEgbW9kaWZ5L21vZGlmeSBjb25mbGljdCBiZXR3ZWVuIG1lcmdlIGJhc2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QyIGMgJiYKKwlnaXQgbWVyZ2UgZAorJworCisjIGNhbm9uaWNhbCBjcmlzcy1jcm9zcyBoaXN0b3J5IGluIHRvcCBhbmQgc3VibW9kdWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgcmVjdXJzaXZlIG1lcmdlIHdpdGggc3VibW9kdWxlJyAnCisJbWtkaXIgbWVyZ2UtcmVjdXJzaXZlICYmCisJKGNkIG1lcmdlLXJlY3Vyc2l2ZSAmJgorCSBnaXQgaW5pdCAmJgorCSBta2RpciBzdWIgJiYKKwkgKGNkIHN1YiAmJgorCSAgZ2l0IGluaXQgJiYKKwkgIHRlc3RfY29tbWl0IGEgJiYKKwkgIGdpdCBjaGVja291dCAtYiBzdWItYiBtYXN0ZXIgJiYKKwkgIHRlc3RfY29tbWl0IGIgJiYKKwkgIGdpdCBjaGVja291dCAtYiBzdWItYyBtYXN0ZXIgJiYKKwkgIHRlc3RfY29tbWl0IGMgJiYKKwkgIGdpdCBjaGVja291dCAtYiBzdWItYmMgc3ViLWIgJiYKKwkgIGdpdCBtZXJnZSBzdWItYyAmJgorCSAgZ2l0IGNoZWNrb3V0IC1iIHN1Yi1jYiBzdWItYyAmJgorCSAgZ2l0IG1lcmdlIHN1Yi1iICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyKSAmJgorCSBnaXQgYWRkIHN1YiAmJgorCSBnaXQgY29tbWl0IC1tIGEgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHRvcC1iIG1hc3RlciAmJgorCSAoY2Qgc3ViICYmIGdpdCBjaGVja291dCBzdWItYikgJiYKKwkgZ2l0IGFkZCBzdWIgJiYKKwkgZ2l0IGNvbW1pdCAtbSBiICYmCisJIGdpdCBjaGVja291dCAtYiB0b3AtYyBtYXN0ZXIgJiYKKwkgKGNkIHN1YiAmJiBnaXQgY2hlY2tvdXQgc3ViLWMpICYmCisJIGdpdCBhZGQgc3ViICYmCisJIGdpdCBjb21taXQgLW0gYyAmJgorCSBnaXQgY2hlY2tvdXQgLWIgdG9wLWJjIHRvcC1iICYmCisJIGdpdCBtZXJnZSAtcyBvdXJzIC0tbm8tY29tbWl0IHRvcC1jICYmCisJIChjZCBzdWIgJiYgZ2l0IGNoZWNrb3V0IHN1Yi1iYykgJiYKKwkgZ2l0IGFkZCBzdWIgJiYKKwkgZ2l0IGNvbW1pdCAtbSBiYyAmJgorCSBnaXQgY2hlY2tvdXQgLWIgdG9wLWNiIHRvcC1jICYmCisJIGdpdCBtZXJnZSAtcyBvdXJzIC0tbm8tY29tbWl0IHRvcC1iICYmCisJIChjZCBzdWIgJiYgZ2l0IGNoZWNrb3V0IHN1Yi1jYikgJiYKKwkgZ2l0IGFkZCBzdWIgJiYKKwkgZ2l0IGNvbW1pdCAtbSBjYikKKycKKworIyBtZXJnZSBzaG91bGQgbGVhdmUgc3VibW9kdWxlIHVubWVyZ2VkIGluIGluZGV4Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUgbWVyZ2Ugd2l0aCBzdWJtb2R1bGUnICcKKwkoY2QgbWVyZ2UtcmVjdXJzaXZlICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0b3AtYmMgJiYKKwkgZWNobyAiMTYwMDAwICQoZ2l0IHJldi1wYXJzZSB0b3AtY2I6c3ViKSAyCXN1YiIgPiBleHBlY3QyICYmCisJIGVjaG8gIjE2MDAwMCAkKGdpdCByZXYtcGFyc2UgdG9wLWJjOnN1YikgMwlzdWIiID4gZXhwZWN0MyAmJgorCSBnaXQgbHMtZmlsZXMgLXUgPiBhY3R1YWwgJiYKKwkgZ3JlcCAiJChjYXQgZXhwZWN0MikiIGFjdHVhbCA+IC9kZXYvbnVsbCAmJgorCSBncmVwICIkKGNhdCBleHBlY3QzKSIgYWN0dWFsID4gL2Rldi9udWxsKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaCBiL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNTQyNjUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwNi1zdWJtb2R1bGUtdXBkYXRlLnNoCkBAIC0wLDAgKzEsNjY0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFJlZCBIYXQsIEluYy4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB1cGRhdGluZyBzdWJtb2R1bGVzCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0ICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgZGV0YWNoZXMgdGhlIEhFQUQgb2YgdGhlCitzdWJtb2R1bGUgYW5kICJnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZS8tLW1lcmdlIiBkb2VzIG5vdCBkZXRhY2ggdGhlIEhFQUQuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK2NvbXBhcmVfaGVhZCgpCit7CisgICAgc2hhX21hc3Rlcj1gZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgbWFzdGVyYAorICAgIHNoYV9oZWFkPWBnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEYAorCisgICAgdGVzdCAiJHNoYV9tYXN0ZXIiID0gIiRzaGFfaGVhZCIKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHN1Ym1vZHVsZSB0cmVlJyAnCisJZWNobyBmaWxlID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdXBzdHJlYW0gJiYKKwlnaXQgY2xvbmUgLiBzdXBlciAmJgorCWdpdCBjbG9uZSBzdXBlciBzdWJtb2R1bGUgJiYKKwlnaXQgY2xvbmUgc3VwZXIgcmViYXNpbmcgJiYKKwlnaXQgY2xvbmUgc3VwZXIgbWVyZ2luZyAmJgorCWdpdCBjbG9uZSBzdXBlciBub25lICYmCisJKGNkIHN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWJtb2R1bGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0IHN1Ym1vZHVsZQorCSkgJiYKKwkoY2Qgc3VibW9kdWxlICYmCisJZWNobyAibGluZTIiID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1pdCAyIgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IHB1bGwgLS1yZWJhc2Ugb3JpZ2luCisJICkgJiYKKwkgZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIHVwZGF0ZSIKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3JlYmFzaW5nIHJlYmFzaW5nICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tICJyZWJhc2luZyIKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL21lcmdpbmcgbWVyZ2luZyAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSAicmViYXNpbmciCisJKQorCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9ub25lIG5vbmUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gIm5vbmUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGRldGFjaGluZyB0aGUgSEVBRCAnICcKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJICEgY29tcGFyZV9oZWFkCisJKQorJworCithcG9zPSInIjsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgZG9lcyBub3QgZmV0Y2ggYWxyZWFkeSBwcmVzZW50IGNvbW1pdHMnICcKKwkoY2Qgc3VibW9kdWxlICYmCisJICBlY2hvIGxpbmUzID4+IGZpbGUgJiYKKwkgIGdpdCBhZGQgZmlsZSAmJgorCSAgdGVzdF90aWNrICYmCisJICBnaXQgY29tbWl0IC1tICJ1cHN0cmVhbSBsaW5lMyIKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkgIGVjaG8gIlN1Ym1vZHVsZSBwYXRoICR7YXBvc31zdWJtb2R1bGUkYXBvczogY2hlY2tlZCBvdXQgJGFwb3MkaGVhZCRhcG9zIiA+IC4uLy4uL2V4cGVjdGVkICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgIGdpdCBzdWJtb2R1bGUgdXBkYXRlID4gLi4vYWN0dWFsIDI+IC4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgc2hvdWxkIGZhaWwgZHVlIHRvIGxvY2FsIGNoYW5nZXMnICcKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCisJIGVjaG8gImxvY2FsIGNoYW5nZSIgPiBmaWxlCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUKKwkpCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIHNob3VsZCB0aHJvdyBhd2F5IGNoYW5nZXMgd2l0aCAtLWZvcmNlICcgJworCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWZvcmNlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgISBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1mb3JjZSBmb3JjaWJseSBjaGVja3Mgb3V0IHN1Ym1vZHVsZXMnICcKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgcm0gLWYgZmlsZQorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tZm9yY2Ugc3VibW9kdWxlICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIHRlc3QgIiQoZ2l0IHN0YXR1cyAtcyBmaWxlKSIgPSAiIgorCSApCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlIHN0YXlpbmcgb24gbWFzdGVyJyAnCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1tZXJnZSBzdGF5aW5nIG9uIG1hc3RlcicgJworCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gcmViYXNlIGluIC5naXQvY29uZmlnJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgcmViYXNlCisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNoZWNrb3V0IGluIC5naXQvY29uZmlnIGJ1dCAtLXJlYmFzZSBnaXZlbicgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIGNoZWNrb3V0CisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIG1lcmdlIGluIC5naXQvY29uZmlnJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgbWVyZ2UKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY2hlY2tvdXQgaW4gLmdpdC9jb25maWcgYnV0IC0tbWVyZ2UgZ2l2ZW4nICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBjaGVja291dAorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1tZXJnZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNoZWNrb3V0IGluIC5naXQvY29uZmlnJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgY2hlY2tvdXQKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGluaXQgcGlja3MgdXAgcmViYXNlJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnJlYmFzaW5nLnVwZGF0ZSByZWJhc2UgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0IHJlYmFzaW5nICYmCisJIHRlc3QgInJlYmFzZSIgPSAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5yZWJhc2luZy51cGRhdGUpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGluaXQgcGlja3MgdXAgbWVyZ2UnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUubWVyZ2luZy51cGRhdGUgbWVyZ2UgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0IG1lcmdpbmcgJiYKKwkgdGVzdCAibWVyZ2UiID0gIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUubWVyZ2luZy51cGRhdGUpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlICAtIGlnbm9yZXMgLS1tZXJnZSAgZm9yIG5ldyBzdWJtb2R1bGVzJyAnCisJKGNkIHN1cGVyICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5leHBlY3QgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2UgLSBpZ25vcmVzIC0tcmViYXNlIGZvciBuZXcgc3VibW9kdWxlcycgJworCShjZCBzdXBlciAmJgorCSBybSAtcmYgc3VibW9kdWxlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+ZXhwZWN0ICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2Ugc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBpZ25vcmVzIHVwZGF0ZT1tZXJnZSBjb25maWcgZm9yIG5ldyBzdWJtb2R1bGVzJyAnCisJKGNkIHN1cGVyICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5leHBlY3QgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZSAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIG1lcmdlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+YWN0dWFsICYmCisJIGdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGlnbm9yZXMgdXBkYXRlPXJlYmFzZSBjb25maWcgZm9yIG5ldyBzdWJtb2R1bGVzJyAnCisJKGNkIHN1cGVyICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5leHBlY3QgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZSAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIHJlYmFzZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN0YXR1cyAtcyBzdWJtb2R1bGUgPmFjdHVhbCAmJgorCSBnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGluaXQgcGlja3MgdXAgdXBkYXRlPW5vbmUnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUubm9uZS51cGRhdGUgbm9uZSAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgbm9uZSAmJgorCSB0ZXN0ICJub25lIiA9ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLm5vbmUudXBkYXRlKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSB1cGRhdGU9bm9uZSBpbiAuZ2l0L2NvbmZpZycgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIG5vbmUgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IGRpZmYgLS1yYXcgfCBncmVwICIJc3VibW9kdWxlIiAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSBnaXQgZGlmZiAtLXJhdyB8IGdyZXAgIglzdWJtb2R1bGUiICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSB1cGRhdGU9bm9uZSBpbiAuZ2l0L2NvbmZpZyBidXQgLS1jaGVja291dCBnaXZlbicgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIG5vbmUgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IGRpZmYgLS1yYXcgfCBncmVwICIJc3VibW9kdWxlIiAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWNoZWNrb3V0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcmF3IFx8IGdyZXAgIglzdWJtb2R1bGUiICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIHRlc3RfbXVzdF9mYWlsIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgc2tpcHMgc3VibW9kdWxlIHdpdGggdXBkYXRlPW5vbmUnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCSBnaXQgY29tbWl0IC1tICIuZ2l0bW9kdWxlcyIKKwkpICYmCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lZCAmJgorCShjZCBjbG9uZWQgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJIHRlc3QgLWUgc3VibW9kdWxlLy5naXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZSBub25lLy5naXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgY29udGludWVzIGFmdGVyIGNoZWNrb3V0IGVycm9yJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3VibW9kdWxlMiAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkgZ2l0IGNvbW1pdCAtYW0gIm5ld19zdWJtb2R1bGUiICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi4uL2V4cGVjdAorCSApICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VibW9kdWxlIiBmaWxlCisJICkgJiYKKwkgKGNkIHN1Ym1vZHVsZTIgJiYKKwkgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VibW9kdWxlMiIgZmlsZQorCSApICYmCisJIGdpdCBhZGQgc3VibW9kdWxlICYmCisJIGdpdCBhZGQgc3VibW9kdWxlMiAmJgorCSBnaXQgY29tbWl0IC1tICJ0d29fbmV3X3N1Ym1vZHVsZV9jb21taXRzIiAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBlY2hvICIiID4gZmlsZQorCSApICYmCisJIGdpdCBjaGVja291dCBIRUFEXiAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBjb250aW51ZXMgYWZ0ZXIgcmVjdXJzaXZlIGNoZWNrb3V0IGVycm9yJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWJzdWJtb2R1bGUgJiYKKwkgIGdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCSAgZ2l0IGNvbW1pdCAtbSAibmV3X3N1YnN1Ym1vZHVsZSIKKwkgKSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCSBnaXQgY29tbWl0IC1tICJ1cGRhdGVfc3VibW9kdWxlIiAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICAoY2Qgc3Vic3VibW9kdWxlICYmCisJICAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJzdWJtb2R1bGUiIGZpbGUKKwkgICkgJiYKKwkgIGdpdCBhZGQgc3Vic3VibW9kdWxlICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZV9hZ2FpbiIgZmlsZSAmJgorCSAgKGNkIHN1YnN1Ym1vZHVsZSAmJgorCSAgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3Vic3VibW9kdWxlX2FnYWluIiBmaWxlCisJICApICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZV9hZ2Fpbl9hZ2FpbiIgZmlsZQorCSApICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi4uL2V4cGVjdCAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGUyX2FnYWluIiBmaWxlCisJICkgJiYKKwkgZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGFkZCBzdWJtb2R1bGUyICYmCisJIGdpdCBjb21taXQgLW0gIm5ld19jb21taXRzIiAmJgorCSBnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJICAoY2Qgc3Vic3VibW9kdWxlICYmCisJICAgZWNobyAiIiA+IGZpbGUKKwkgICkKKwkgKSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGV4aXQgaW1tZWRpYXRlbHkgaW4gY2FzZSBvZiBtZXJnZSBjb25mbGljdCcgJworCShjZCBzdXBlciAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICAoY2Qgc3Vic3VibW9kdWxlICYmCisJICAgZ2l0IHJlc2V0IC0taGFyZCBIRUFECisJICApCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGVfMiIgZmlsZQorCSApICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZTJfMiIgZmlsZQorCSApICYmCisJIGdpdCBhZGQgc3VibW9kdWxlICYmCisJIGdpdCBhZGQgc3VibW9kdWxlMiAmJgorCSBnaXQgY29tbWl0IC1tICJ0d29fbmV3X3N1Ym1vZHVsZV9jb21taXRzIiAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJICB0ZXN0X2NvbW1pdCAiY29uZmxpY3QiIGZpbGUgJiYKKwkgIGVjaG8gImNvbmZsaWN0IiA+IGZpbGUKKwkgKSAmJgorCSBnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwkgKGNkIHN1Ym1vZHVsZTIgJiYKKwkgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+Li4vZXhwZWN0CisJICkgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBtZXJnZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVjdXJzaXZlIHJlYmFzZSBlcnJvcicgJworCShjZCBzdXBlciAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlCisJICkgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGVfMyIgZmlsZQorCSApICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZTJfMyIgZmlsZQorCSApICYmCisJIGdpdCBhZGQgc3VibW9kdWxlICYmCisJIGdpdCBhZGQgc3VibW9kdWxlMiAmJgorCSBnaXQgY29tbWl0IC1tICJ0d29fbmV3X3N1Ym1vZHVsZV9jb21taXRzIiAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJICB0ZXN0X2NvbW1pdCAiY29uZmxpY3QyIiBmaWxlICYmCisJICBlY2hvICJjb25mbGljdCIgPiBmaWxlCisJICkgJiYKKwkgZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi4uL2V4cGVjdAorCSApICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgcmViYXNlICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi4uL2FjdHVhbAorCSApICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBkaWZmZXJlbnQgc3VibW9kdWxlcyB0byB0aGUgc2FtZSBwYXRoJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzMSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGFkZCAuLi9tZXJnaW5nIHMxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHBsYWNlcyBnaXQtZGlyIGluIHN1cGVycHJvamVjdHMgZ2l0LWRpcicgJworCShjZCBzdXBlciAmJgorCSBta2RpciBkZWVwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIGRlZXBlci9zdWJtb2R1bGUgJiYKKwkgKGNkIGRlZXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi9leHBlY3RlZAorCSApICYmCisJIChjZCAuZ2l0L21vZHVsZXMvZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IGxvZyA+IC4uLy4uLy4uLy4uL2FjdHVhbAorCSApICYmCisJIHRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBwbGFjZXMgZ2l0LWRpciBpbiBzdXBlcnByb2plY3RzIGdpdC1kaXInICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3VibW9kdWxlIgorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VwZXIyICYmCisJKGNkIHN1cGVyMiAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSAoY2QgZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IGxvZyA+IC4uLy4uL2V4cGVjdGVkCisJICkgJiYKKwkgKGNkIC5naXQvbW9kdWxlcy9kZWVwZXIvc3VibW9kdWxlICYmCisJICBnaXQgbG9nID4gLi4vLi4vLi4vLi4vYWN0dWFsCisJICkgJiYKKwkgdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHBsYWNlcyBnaXQtZGlyIGluIHN1cGVycHJvamVjdHMgZ2l0LWRpciByZWN1cnNpdmUnICcKKwkoY2Qgc3VwZXIyICYmCisJIChjZCBkZWVwZXIvc3VibW9kdWxlICYmCisJICBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3Vic3VibW9kdWxlICYmCisJICAoY2Qgc3Vic3VibW9kdWxlICYmCisJICAgZ2l0IGxvZyA+IC4uLy4uLy4uL2V4cGVjdGVkCisJICApICYmCisJICBnaXQgY29tbWl0IC1tICJhZGRlZCBzdWJzdWJtb2R1bGUiICYmCisJICBnaXQgcHVzaAorCSApICYmCisJIChjZCAuZ2l0L21vZHVsZXMvZGVlcGVyL3N1Ym1vZHVsZS9tb2R1bGVzL3N1YnN1Ym1vZHVsZSAmJgorCSAgZ2l0IGxvZyA+IC4uLy4uLy4uLy4uLy4uL2FjdHVhbAorCSApICYmCisJIGdpdCBhZGQgZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSBnaXQgY29tbWl0IC1tICJ1cGRhdGUgc3VibW9kdWxlIiAmJgorCSBnaXQgcHVzaCAmJgorCSB0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgcGxhY2VzIGdpdC1kaXIgaW4gc3VwZXJwcm9qZWN0cyBnaXQtZGlyIHJlY3Vyc2l2ZScgJworCW1rZGlyIHN1cGVyX3VwZGF0ZV9yICYmCisJKGNkIHN1cGVyX3VwZGF0ZV9yICYmCisJIGdpdCBpbml0IC0tYmFyZQorCSkgJiYKKwlta2RpciBzdWJzdXBlcl91cGRhdGVfciAmJgorCShjZCBzdWJzdXBlcl91cGRhdGVfciAmJgorCSBnaXQgaW5pdCAtLWJhcmUKKwkpICYmCisJbWtkaXIgc3Vic3Vic3VwZXJfdXBkYXRlX3IgJiYKKwkoY2Qgc3Vic3Vic3VwZXJfdXBkYXRlX3IgJiYKKwkgZ2l0IGluaXQgLS1iYXJlCisJKSAmJgorCWdpdCBjbG9uZSBzdWJzdWJzdXBlcl91cGRhdGVfciBzdWJzdWJzdXBlcl91cGRhdGVfcjIgJiYKKwkoY2Qgc3Vic3Vic3VwZXJfdXBkYXRlX3IyICYmCisJIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3Vic3Vic3VwZXIiIGZpbGUgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorCSkgJiYKKwlnaXQgY2xvbmUgc3Vic3VwZXJfdXBkYXRlX3Igc3Vic3VwZXJfdXBkYXRlX3IyICYmCisJKGNkIHN1YnN1cGVyX3VwZGF0ZV9yMiAmJgorCSB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1YnN1cGVyIiBmaWxlICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1YnN1YnN1cGVyX3VwZGF0ZV9yIHN1YnN1Ym1vZHVsZSAmJgorCSBnaXQgY29tbWl0IC1hbSAic3Vic3VibW9kdWxlIiAmJgorCSBnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCisJKSAmJgorCWdpdCBjbG9uZSBzdXBlcl91cGRhdGVfciBzdXBlcl91cGRhdGVfcjIgJiYKKwkoY2Qgc3VwZXJfdXBkYXRlX3IyICYmCisJIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VwZXIiIGZpbGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3Vic3VwZXJfdXBkYXRlX3Igc3VibW9kdWxlICYmCisJIGdpdCBjb21taXQgLWFtICJzdWJtb2R1bGUiICYmCisJIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJcm0gLXJmIHN1cGVyX3VwZGF0ZV9yMiAmJgorCWdpdCBjbG9uZSBzdXBlcl91cGRhdGVfciBzdXBlcl91cGRhdGVfcjIgJiYKKwkoY2Qgc3VwZXJfdXBkYXRlX3IyICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCSAoY2Qgc3VibW9kdWxlL3N1YnN1Ym1vZHVsZSAmJgorCSAgZ2l0IGxvZyA+IC4uLy4uL2V4cGVjdGVkCisJICkgJiYKKwkgKGNkIC5naXQvbW9kdWxlcy9zdWJtb2R1bGUvbW9kdWxlcy9zdWJzdWJtb2R1bGUKKwkgIGdpdCBsb2cgPiAuLi8uLi8uLi8uLi8uLi9hY3R1YWwKKwkgKQorCSB0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgcHJvcGVybHkgcmUtY3JlYXRlcyBkZWVwZXIgbGV2ZWwgc3VibW9kdWxlcycgJworCShjZCBzdXBlciAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCSBybSAtcmYgZGVlcGVyLyAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgZGVlcGVyL3N1Ym1vZHVsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBwcm9wZXJseSByZXZpdmVzIGEgbW92ZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb21taXQgLWFtICJwcmUgbW92ZSIgJiYKKwkgZ2l0IHN0YXR1cyA+ZXhwZWN0JiYKKwkgSD0kKGNkIHN1Ym1vZHVsZTI7IGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkgZ2l0IHJtIC0tY2FjaGVkIHN1Ym1vZHVsZTIgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZTIgJiYKKwkgbWtkaXIgLXAgIm1vdmVkL3N1YiBtb2R1bGUiICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICRIICJtb3ZlZC9zdWIgbW9kdWxlIiAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUyLnBhdGggIm1vdmVkL3N1YiBtb2R1bGUiCisJIGdpdCBjb21taXQgLWFtICJwb3N0IG1vdmUiICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJIGdpdCBzdGF0dXMgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzdWJtb2R1bGUgdXBkYXRlIGNhbiBoYW5kbGUgc3ltYm9saWMgbGlua3MgaW4gcHdkJyAnCisJbWtkaXIgLXAgbGlua2VkL2RpciAmJgorCWxuIC1zIGxpbmtlZC9kaXIgbGlua3RvICYmCisJKAorCQljZCBsaW5rdG8gJiYKKwkJZ2l0IGNsb25lICIkVFJBU0hfRElSRUNUT1JZIi9zdXBlcl91cGRhdGVfcjIgc3VwZXIgJiYKKwkJKAorCQkJY2Qgc3VwZXIgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZQorCQkpCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDctc3VibW9kdWxlLWZvcmVhY2guc2ggYi90L3Q3NDA3LXN1Ym1vZHVsZS1mb3JlYWNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjliNjlmZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDA3LXN1Ym1vZHVsZS1mb3JlYWNoLnNoCkBAIC0wLDAgKzEsMzE2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEpvaGFuIEhlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCAiZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIgorCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCAiZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIiBjb3JyZWN0bHkgdmlzaXRzIGFsbCBzdWJtb2R1bGVzCit0aGF0IGFyZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgc3VibW9kdWxlIHRyZWUnICcKKwllY2hvIGZpbGUgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB1cHN0cmVhbSAmJgorCWdpdCBjbG9uZSAuIHN1cGVyICYmCisJZ2l0IGNsb25lIHN1cGVyIHN1Ym1vZHVsZSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1YjEgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1YjIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1YjMgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbmFtZS1zZWN0aW9uIFwKKwkJCXN1Ym1vZHVsZS5zdWIxIHN1Ym1vZHVsZS5mb28xICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1yZW5hbWUtc2VjdGlvbiBcCisJCQlzdWJtb2R1bGUuc3ViMiBzdWJtb2R1bGUuZm9vMiAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tcmVuYW1lLXNlY3Rpb24gXAorCQkJc3VibW9kdWxlLnN1YjMgc3VibW9kdWxlLmZvbzMgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlcyIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0IHN1YjEgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0IHN1YjIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0IHN1YjMKKwkpICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZWNobyBkaWZmZXJlbnQgPiBmaWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZGlmZmVyZW50IgorCSkgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCSgKKwkJCWNkIHN1YjMgJiYKKwkJCWdpdCBwdWxsCisJCSkgJiYKKwkJZ2l0IGFkZCBzdWIzICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJ1cGRhdGUgc3ViMyIKKwkpCisnCisKK3N1YjFzaGExPSQoY2Qgc3VwZXIvc3ViMSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzdWIzc2hhMT0kKGNkIHN1cGVyL3N1YjMgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorCitwd2Q9JChwd2QpCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorRW50ZXJpbmcgJ3N1YjEnCiskcHdkL2Nsb25lLWZvbzEtc3ViMS0kc3ViMXNoYTEKK0VudGVyaW5nICdzdWIzJworJHB3ZC9jbG9uZS1mb28zLXN1YjMtJHN1YjNzaGExCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBiYXNpYyAic3VibW9kdWxlIGZvcmVhY2giIHVzYWdlJyAnCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lICYmCisJKAorCQljZCBjbG9uZSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS0gc3ViMSBzdWIzICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAiZWNobyBcJHRvcGxldmVsLVwkbmFtZS1cJHBhdGgtXCRzaGExIiA+IC4uL2FjdHVhbCAmJgorCQlnaXQgY29uZmlnIGZvby5iYXIgemFyICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAiZ2l0IGNvbmZpZyAtLWZpbGUgXCJcJHRvcGxldmVsLy5naXQvY29uZmlnXCIgZm9vLmJhciIKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbmVzdGVkIHN1Ym1vZHVsZXMnICcKKwlnaXQgY2xvbmUgc3VibW9kdWxlIG5lc3RlZDEgJiYKKwlnaXQgY2xvbmUgc3VibW9kdWxlIG5lc3RlZDIgJiYKKwlnaXQgY2xvbmUgc3VibW9kdWxlIG5lc3RlZDMgJiYKKwkoCisJCWNkIG5lc3RlZDMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1Ym1vZHVsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgc3VibW9kdWxlCisJKSAmJgorCSgKKwkJY2QgbmVzdGVkMiAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9uZXN0ZWQzIG5lc3RlZDMgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIm5lc3RlZDMiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBuZXN0ZWQzCisJKSAmJgorCSgKKwkJY2QgbmVzdGVkMSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9uZXN0ZWQyIG5lc3RlZDIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIm5lc3RlZDIiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBuZXN0ZWQyCisJKSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vbmVzdGVkMSBuZXN0ZWQxICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJuZXN0ZWQxIiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgbmVzdGVkMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlICJzdWJtb2R1bGUgZm9yZWFjaCIgdG8gY2hlY2tvdXQgMm5kIGxldmVsIHN1Ym1vZHVsZScgJworCWdpdCBjbG9uZSBzdXBlciBjbG9uZTIgJiYKKwkoCisJCWNkIGNsb25lMiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjEvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjIvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjMvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvLmdpdCAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIxLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvLmdpdCAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggImdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDEvbmVzdGVkMi8uZ2l0CisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvLmdpdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlICJmb3JlYWNoIC0tcmVjdXJzaXZlIiB0byBjaGVja291dCBhbGwgc3VibW9kdWxlcycgJworCSgKKwkJY2QgY2xvbmUyICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUvLmdpdAorCSkKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitFbnRlcmluZyAnbmVzdGVkMScKK0VudGVyaW5nICduZXN0ZWQxL25lc3RlZDInCitFbnRlcmluZyAnbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMnCitFbnRlcmluZyAnbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlJworRW50ZXJpbmcgJ3N1YjEnCitFbnRlcmluZyAnc3ViMicKK0VudGVyaW5nICdzdWIzJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgbWVzc2FnZXMgZnJvbSAiZm9yZWFjaCAtLXJlY3Vyc2l2ZSInICcKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgInRydWUiID4gLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorbmVzdGVkMS1uZXN0ZWQxCituZXN0ZWQyLW5lc3RlZDIKK25lc3RlZDMtbmVzdGVkMworc3VibW9kdWxlLXN1Ym1vZHVsZQorZm9vMS1zdWIxCitmb28yLXN1YjIKK2ZvbzMtc3ViMworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgImZvcmVhY2ggLS1xdWlldCAtLXJlY3Vyc2l2ZSInICcKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLXEgLS1yZWN1cnNpdmUgImVjaG8gXCRuYW1lLVwkcGF0aCIgPiAuLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgInVwZGF0ZSAtLXJlY3Vyc2l2ZSIgdG8gY2hlY2tvdXQgYWxsIHN1Ym1vZHVsZXMnICcKKwlnaXQgY2xvbmUgc3VwZXIgY2xvbmUzICYmCisJKAorCQljZCBjbG9uZTMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIxLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIyLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIzLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlLy5naXQKKwkpCisnCisKK25lc3RlZDFzaGExPSQoY2QgY2xvbmUzL25lc3RlZDEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorbmVzdGVkMnNoYTE9JChjZCBjbG9uZTMvbmVzdGVkMS9uZXN0ZWQyICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK25lc3RlZDNzaGExPSQoY2QgY2xvbmUzL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1Ym1vZHVsZXNoYTE9JChjZCBjbG9uZTMvbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjFzaGExPSQoY2QgY2xvbmUzL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc3ViMnNoYTE9JChjZCBjbG9uZTMvc3ViMiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzdWIzc2hhMT0kKGNkIGNsb25lMy9zdWIzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjFzaGExX3Nob3J0PSQoY2QgY2xvbmUzL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpCitzdWIyc2hhMV9zaG9ydD0kKGNkIGNsb25lMy9zdWIyICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorCitjYXQgPiBleHBlY3QgPDxFT0YKKyAkbmVzdGVkMXNoYTEgbmVzdGVkMSAoaGVhZHMvbWFzdGVyKQorICRuZXN0ZWQyc2hhMSBuZXN0ZWQxL25lc3RlZDIgKGhlYWRzL21hc3RlcikKKyAkbmVzdGVkM3NoYTEgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMgKGhlYWRzL21hc3RlcikKKyAkc3VibW9kdWxlc2hhMSBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUgKGhlYWRzL21hc3RlcikKKyAkc3ViMXNoYTEgc3ViMSAoJHN1YjFzaGExX3Nob3J0KQorICRzdWIyc2hhMSBzdWIyICgkc3ViMnNoYTFfc2hvcnQpCisgJHN1YjNzaGExIHN1YjMgKGhlYWRzL21hc3RlcikKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0ICJzdGF0dXMgLS1yZWN1cnNpdmUiJyAnCisJKAorCQljZCBjbG9uZTMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgLS1yZWN1cnNpdmUgPiAuLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitzZWQgLWUgIi9uZXN0ZWQxIC9zLy4qLyskbmVzdGVkMXNoYTEgbmVzdGVkMSAoZmlsZTJ+MSkvOy9zdWJbMS0zXS9kIiA8IGV4cGVjdCA+IGV4cGVjdDIKK212IC1mIGV4cGVjdDIgZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vuc3VyZSAic3RhdHVzIC0tY2FjaGVkIC0tcmVjdXJzaXZlIiBwcmVzZXJ2ZXMgdGhlIC0tY2FjaGVkIGZsYWcnICcKKwkoCisJCWNkIGNsb25lMyAmJgorCQkoCisJCQljZCBuZXN0ZWQxICYmCisJCQl0ZXN0X2NvbW1pdCBmaWxlMgorCQkpICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzIC0tY2FjaGVkIC0tcmVjdXJzaXZlIC0tIG5lc3RlZDEgPiAuLi9hY3R1YWwKKwkpICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBNSU5HVworCXRoZW4KKwkJZG9zMnVuaXggYWN0dWFsCisJZmkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAiZ2l0IGNsb25lIC0tcmVjdXJzaXZlIiB0byBjaGVja291dCBhbGwgc3VibW9kdWxlcycgJworCWdpdCBjbG9uZSAtLXJlY3Vyc2l2ZSBzdXBlciBjbG9uZTQgJiYKKwkoCisJCWNkIGNsb25lNCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIC5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIxLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUvLmdpdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAidXBkYXRlIC0tcmVjdXJzaXZlIiB3aXRoIGEgZmxhZyB3aXRoIHNwYWNlcycgJworCWdpdCBjbG9uZSBzdXBlciAiY29tbW9uIG9iamVjdHMiICYmCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lNSAmJgorCSgKKwkJY2QgY2xvbmU1ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgZCBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlIC0tcmVmZXJlbmNlPSIkKGRpcm5hbWUgIiRQV0QiKS9jb21tb24gb2JqZWN0cyIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzLy5naXQgJiYKKwkJdGVzdCAtZiAuZ2l0L21vZHVsZXMvbmVzdGVkMS9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0IC1mIC5naXQvbW9kdWxlcy9uZXN0ZWQxL21vZHVsZXMvbmVzdGVkMi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0IC1mIC5naXQvbW9kdWxlcy9uZXN0ZWQxL21vZHVsZXMvbmVzdGVkMi9tb2R1bGVzL25lc3RlZDMvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAidXBkYXRlIC0tcmVjdXJzaXZlIG5lc3RlZDEiIHRvIGNoZWNrb3V0IGFsbCBzdWJtb2R1bGVzIHJvb3RlZCBpbiBuZXN0ZWQxJyAnCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lNiAmJgorCSgKKwkJY2QgY2xvbmU2ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAtLSBuZXN0ZWQxICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlLy5naXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgcGFzc2VkIHRvIGZvcmVhY2ggcmV0YWlucyBub3Rpb24gb2Ygc3RkaW4nICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCBlY2hvIHN1Y2Nlc3MgPi4uL2V4cGVjdGVkICYmCisJCXllcyB8IGdpdCBzdWJtb2R1bGUgZm9yZWFjaCAicmVhZCB5ICYmIHRlc3QgXCJ4XCR5XCIgPSB4eSAmJiBlY2hvIHN1Y2Nlc3MiID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgcGFzc2VkIHRvIGZvcmVhY2ggLS1yZWN1cnNpdmUgcmV0YWlucyBub3Rpb24gb2Ygc3RkaW4nICcKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgZWNobyBzdWNjZXNzID4uLi9leHBlY3RlZCAmJgorCQl5ZXMgfCBnaXQgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgInJlYWQgeSAmJiB0ZXN0IFwieFwkeVwiID0geHkgJiYgZWNobyBzdWNjZXNzIiA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDgtc3VibW9kdWxlLXJlZmVyZW5jZS5zaCBiL3QvdDc0MDgtc3VibW9kdWxlLXJlZmVyZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzcwYjJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwOC1zdWJtb2R1bGUtcmVmZXJlbmNlLnNoCkBAIC0wLDAgKzEsODEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDksIFJlZCBIYXQgSW5jLCBBdXRob3I6IE1pY2hhZWwgUy4gVHNpcmtpbiAobXN0QHJlZGhhdC5jb20pCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2xvbmUgLS1yZWZlcmVuY2UnCisuIC4vdGVzdC1saWIuc2gKKworYmFzZV9kaXI9YHB3ZGAKKworVT0kYmFzZV9kaXIvVVBMT0FEX0xPRworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgZmlyc3QgcmVwb3NpdG9yeScgXAorJ3Rlc3RfY3JlYXRlX3JlcG8gQSAmJiBjZCBBICYmCitlY2hvIGZpcnN0ID4gZmlsZTEgJiYKK2dpdCBhZGQgZmlsZTEgJiYKK2dpdCBjb21taXQgLW0gQS1pbml0aWFsJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc2Vjb25kIHJlcG9zaXRvcnknIFwKKydnaXQgY2xvbmUgQSBCICYmIGNkIEIgJiYKK2VjaG8gc2Vjb25kID4gZmlsZTIgJiYKK2dpdCBhZGQgZmlsZTIgJiYKK2dpdCBjb21taXQgLW0gQi1hZGRpdGlvbiAmJgorZ2l0IHJlcGFjayAtYSAtZCAmJgorZ2l0IHBydW5lJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc3VwZXJwcm9qZWN0JyBcCisndGVzdF9jcmVhdGVfcmVwbyBzdXBlciAmJiBjZCBzdXBlciAmJgorZWNobyBmaWxlID4gZmlsZSAmJgorZ2l0IGFkZCBmaWxlICYmCitnaXQgY29tbWl0IC1tIEItc3VwZXItaW5pdGlhbCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCAtLXJlZmVyZW5jZScgXAorJ2NkIHN1cGVyICYmIGdpdCBzdWJtb2R1bGUgYWRkIC0tcmVmZXJlbmNlIC4uL0IgImZpbGU6Ly8kYmFzZV9kaXIvQSIgc3ViICYmCitnaXQgY29tbWl0IC1tIEItc3VwZXItYWRkZWQnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FmdGVyIGFkZDogZXhpc3RlbmNlIG9mIGluZm8vYWx0ZXJuYXRlcycgXAorJ3Rlc3RfbGluZV9jb3VudCA9IDEgc3VwZXIvLmdpdC9tb2R1bGVzL3N1Yi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcycKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWZlcmVuY2UgZ2V0cyB1c2VkIHdpdGggYWRkJyBcCisnY2Qgc3VwZXIvc3ViICYmCitlY2hvICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiA+IGV4cGVjdGVkICYmCitnaXQgY291bnQtb2JqZWN0cyA+IGN1cnJlbnQgJiYKK2RpZmYgZXhwZWN0ZWQgY3VycmVudCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBzdXBlcnByb2plY3QnIFwKKydnaXQgY2xvbmUgc3VwZXIgc3VwZXItY2xvbmUnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSB3aXRoIHJlZmVyZW5jZScgXAorJ2NkIHN1cGVyLWNsb25lICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlZmVyZW5jZSAuLi9CJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZnRlciB1cGRhdGU6IGV4aXN0ZW5jZSBvZiBpbmZvL2FsdGVybmF0ZXMnIFwKKyd0ZXN0X2xpbmVfY291bnQgPSAxIHN1cGVyLWNsb25lLy5naXQvbW9kdWxlcy9zdWIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgcmVmZXJlbmNlIGdldHMgdXNlZCB3aXRoIHVwZGF0ZScgXAorJ2NkIHN1cGVyLWNsb25lL3N1YiAmJgorZWNobyAiMCBvYmplY3RzLCAwIGtpbG9ieXRlcyIgPiBleHBlY3RlZCAmJgorZ2l0IGNvdW50LW9iamVjdHMgPiBjdXJyZW50ICYmCitkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwOS1zdWJtb2R1bGUtZGV0YWNoZWQtd29ya3RyZWUuc2ggYi90L3Q3NDA5LXN1Ym1vZHVsZS1kZXRhY2hlZC13b3JrdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZmVjMTNkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwOS1zdWJtb2R1bGUtZGV0YWNoZWQtd29ya3RyZWUuc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBEYW5pZWwgR3Jhw7FhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgc3VibW9kdWxlcyBvbiBkZXRhY2hlZCB3b3JraW5nIHRyZWUKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgImdpdCBzdWJtb2R1bGUiIGluaXRpYWxpemF0aW9uLCB1cGRhdGUgYW5kIGFkZGl0aW9uIHdvcmtzCitvbiBkZXRhaGNlZCB3b3JraW5nIHRyZWVzCisnCisKK1RFU1RfTk9fQ1JFQVRFX1JFUE89MQorLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBvbiBkZXRhY2hlZCB3b3JraW5nIHRyZWUnICcKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlICYmCisJdGVzdF9jcmVhdGVfcmVwbyBidW5kbGUxICYmCisJKAorCQljZCBidW5kbGUxICYmCisJCXRlc3RfY29tbWl0ICJzaG9vdCIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9leHBlY3QKKwkpICYmCisJbWtkaXIgaG9tZSAmJgorCSgKKwkJY2QgaG9tZSAmJgorCQlleHBvcnQgR0lUX1dPUktfVFJFRT0iJChwd2QpIiBHSVRfRElSPSIkKHB3ZCkvLmRvdGZpbGVzIiAmJgorCQlnaXQgY2xvbmUgLS1iYXJlIC4uL3JlbW90ZSAuZG90ZmlsZXMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vYnVuZGxlMSAudmltL2J1bmRsZS9zb2dvb2QgJiYKKwkJdGVzdF9jb21taXQgInNvZ29vZCIgJiYKKwkJKAorCQkJdW5zZXQgR0lUX1dPUktfVFJFRSBHSVRfRElSICYmCisJCQljZCAudmltL2J1bmRsZS9zb2dvb2QgJiYKKwkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+YWN0dWFsICYmCisJCQl0ZXN0X2NtcCAuLi8uLi8uLi8uLi9leHBlY3QgYWN0dWFsCisJCSkgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorCSkgJiYKKwlta2RpciBob21lMiAmJgorCSgKKwkJY2QgaG9tZTIgJiYKKwkJZ2l0IGNsb25lIC0tYmFyZSAuLi9yZW1vdGUgLmRvdGZpbGVzICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFPSIkKHB3ZCkiIEdJVF9ESVI9IiQocHdkKS8uZG90ZmlsZXMiICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJCSgKKwkJCXVuc2V0IEdJVF9XT1JLX1RSRUUgR0lUX0RJUiAmJgorCQkJY2QgLnZpbS9idW5kbGUvc29nb29kICYmCisJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgLi4vLi4vLi4vLi4vZXhwZWN0IGFjdHVhbAorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgb24gZGV0YWNoZWQgd29ya2luZyBwb2ludGVkIGJ5IGNvcmUud29ya3RyZWUnICcKKwlta2RpciBob21lMyAmJgorCSgKKwkJY2QgaG9tZTMgJiYKKwkJZXhwb3J0IEdJVF9ESVI9IiQocHdkKS8uZG90ZmlsZXMiICYmCisJCWdpdCBjbG9uZSAtLWJhcmUgLi4vcmVtb3RlICIkR0lUX0RJUiIgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmJhcmUgZmFsc2UgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlIC4uICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vYnVuZGxlMSAudmltL2J1bmRsZS9kdXBlICYmCisJCXRlc3RfY29tbWl0ICJkdXBlIiAmJgorCQlnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCisJKSAmJgorCSgKKwkJY2QgaG9tZSAmJgorCQlleHBvcnQgR0lUX0RJUj0iJChwd2QpLy5kb3RmaWxlcyIgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmJhcmUgZmFsc2UgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlIC4uICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCQl0ZXN0IC1mIC52aW0vYnVuZGxlL2R1cGUvc2hvb3QudAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAwLWNvbW1pdC5zaCBiL3QvdDc1MDAtY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFjOTA4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAwLWNvbW1pdC5zaApAQCAtMCwwICsxLDMyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBTdGV2ZW4gR3JpbW0KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNvbW1pdAorCitUZXN0cyBmb3Igc2VsZWN0ZWQgY29tbWl0IG9wdGlvbnMuJworCisuIC4vdGVzdC1saWIuc2gKKworY29tbWl0X21zZ19pcyAoKSB7CisJZXhwZWN0PWNvbW1pdF9tc2dfaXMuZXhwZWN0CisJYWN0dWFsPWNvbW1pdF9tc2dfaXMuYWN0dWFsCisKKwlwcmludGYgIiVzIiAiJChnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyViIC0xKSIgPiRleHBlY3QgJiYKKwlwcmludGYgIiVzIiAiJDEiID4kYWN0dWFsICYmCisJdGVzdF9pMThuY21wICRleHBlY3QgJGFjdHVhbAorfQorCisjIEEgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiBjb21taXQgaXMgd29ya2luZyBhdCBhbGwuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhIGJhc2ljIGNvbW1pdCBpbiBhbiBlbXB0eSB0cmVlIHNob3VsZCBzdWNjZWVkJyAnCisJZWNobyBjb250ZW50ID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uZXhpc3RlbnQgdGVtcGxhdGUgZmlsZSBzaG91bGQgcmV0dXJuIGVycm9yJyAnCisJZWNobyBjaGFuZ2VzID4+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJKAorCQlHSVRfRURJVE9SPSJlY2hvIGhlbGxvID5cIlwkMVwiIiAmJgorCQlleHBvcnQgR0lUX0VESVRPUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tdGVtcGxhdGUgIiRQV0QiL25vdGV4aXN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGVudCB0ZW1wbGF0ZSBmaWxlIGluIGNvbmZpZyBzaG91bGQgcmV0dXJuIGVycm9yJyAnCisJZ2l0IGNvbmZpZyBjb21taXQudGVtcGxhdGUgIiRQV0QiL25vdGV4aXN0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgY29tbWl0LnRlbXBsYXRlIiAmJgorCSgKKwkJR0lUX0VESVRPUj0iZWNobyBoZWxsbyA+XCJcJDFcIiIgJiYKKwkJZXhwb3J0IEdJVF9FRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdAorCSkKKycKKworIyBGcm9tIG5vdyBvbiB3ZSdsbCB1c2UgYSB0ZW1wbGF0ZSBmaWxlIHRoYXQgZXhpc3RzLgorVEVNUExBVEU9IiRQV0QiL3RlbXBsYXRlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuZWRpdGVkIHRlbXBsYXRlIHNob3VsZCBub3QgY29tbWl0JyAnCisJZWNobyAidGVtcGxhdGUgbGluZSIgPiAiJFRFTVBMQVRFIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmVkaXRlZCB0ZW1wbGF0ZSB3aXRoIGNvbW1lbnRzIHNob3VsZCBub3QgY29tbWl0JyAnCisJZWNobyAiIyBjb21tZW50IGluIHRlbXBsYXRlIiA+PiAiJFRFTVBMQVRFIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhIFNpZ25lZC1vZmYtYnkgbGluZSBieSBpdHNlbGYgc2hvdWxkIG5vdCBjb21taXQnICcKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtc2lnbmVkLW9mZiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tdGVtcGxhdGUgIiRURU1QTEFURSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGluZyBjb21tZW50cyB0byBhIHRlbXBsYXRlIHNob3VsZCBub3QgY29tbWl0JyAnCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbW1lbnRzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaW5nIHJlYWwgY29udGVudCB0byBhIHRlbXBsYXRlIHNob3VsZCBjb21taXQnICcKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtY29udGVudCAmJgorCQlnaXQgY29tbWl0IC0tdGVtcGxhdGUgIiRURU1QTEFURSIKKwkpICYmCisJY29tbWl0X21zZ19pcyAidGVtcGxhdGUgbGluZWNvbW1pdCBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctdCBvcHRpb24gc2hvdWxkIGJlIHNob3J0IGZvciAtLXRlbXBsYXRlJyAnCisJZWNobyAic2hvcnQgdGVtcGxhdGUiID4gIiRURU1QTEFURSIgJiYKKwllY2hvICJuZXcgY29udGVudCIgPj4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtY29udGVudCAmJgorCQlnaXQgY29tbWl0IC10ICIkVEVNUExBVEUiCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgInNob3J0IHRlbXBsYXRlY29tbWl0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZy1zcGVjaWZpZWQgdGVtcGxhdGUgc2hvdWxkIGNvbW1pdCcgJworCWVjaG8gIm5ldyB0ZW1wbGF0ZSIgPiAiJFRFTVBMQVRFIiAmJgorCWdpdCBjb25maWcgY29tbWl0LnRlbXBsYXRlICIkVEVNUExBVEUiICYmCisJZWNobyAibW9yZSBjb250ZW50IiA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50ICYmCisJCWdpdCBjb21taXQKKwkpICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbW1pdC50ZW1wbGF0ZSAmJgorCWNvbW1pdF9tc2dfaXMgIm5ldyB0ZW1wbGF0ZWNvbW1pdCBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCBjb21taXQgbWVzc2FnZSBzaG91bGQgb3ZlcnJpZGUgdGVtcGxhdGUnICcKKwllY2hvICJzdGlsbCBtb3JlIGNvbnRlbnQiID4+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJR0lUX0VESVRPUj0iJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtY29udGVudCBnaXQgY29tbWl0IC0tdGVtcGxhdGUgIiRURU1QTEFURSIgXAorCQktbSAiY29tbWFuZCBsaW5lIG1zZyIgJiYKKwljb21taXRfbXNnX2lzICJjb21tYW5kIGxpbmUgbXNnIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIGZpbGUgc2hvdWxkIG92ZXJyaWRlIHRlbXBsYXRlJyAnCisJZWNobyAiY29udGVudCBnYWxvcmUiID4+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZWNobyAic3RhbmRhcmQgaW5wdXQgbXNnIiB8CisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQgJiYKKwkJZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiIC0tZmlsZSAtCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgInN0YW5kYXJkIGlucHV0IG1zZyIKKycKKworY2F0ID4iJFRFTVBMQVRFIiA8PFxFT0YKKworCisjIyMgdGVtcGxhdGUKKworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIHRlbXBsYXRlIHdpdGggd2hpdGVzcGFjZSBpc3N1ZScgJworCWVjaG8gImNvbnRlbnQgZ2Fsb3JlIiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJR0lUX0VESVRPUj0iJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtd2hpdGVzcGFjZWQtY29udGVudCBnaXQgY29tbWl0IFwKKwkJLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIiAmJgorCWNvbW1pdF9tc2dfaXMgImNvbW1pdCBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBhbHRlcm5hdGUgR0lUX0lOREVYX0ZJTEUgKDEpJyAnCisKKwljcCAuZ2l0L2luZGV4IHNhdmVkLWluZGV4ICYmCisJKAorCQllY2hvIHNvbWUgbmV3IGNvbnRlbnQgPmZpbGUgJiYKKwkgICAgICAgIEdJVF9JTkRFWF9GSUxFPS5naXQvYW5vdGhlcl9pbmRleCAmJgorCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gImNvbW1pdCB1c2luZyBhbm90aGVyIGluZGV4IiAmJgorCQlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFEICYmCisJCWdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlCisJKSAmJgorCWNtcCAuZ2l0L2luZGV4IHNhdmVkLWluZGV4ID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBhbHRlcm5hdGUgR0lUX0lOREVYX0ZJTEUgKDIpJyAnCisKKwljcCAuZ2l0L2luZGV4IHNhdmVkLWluZGV4ICYmCisJKAorCQlybSAtZiAuZ2l0L25vLXN1Y2gtaW5kZXggJiYKKwkJR0lUX0lOREVYX0ZJTEU9LmdpdC9uby1zdWNoLWluZGV4ICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQlnaXQgY29tbWl0IC1tICJjb21taXQgdXNpbmcgbm9uZXhpc3RlbnQgaW5kZXgiICYmCisJCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzKSIgJiYKKwkJdGVzdCAteiAiJChnaXQgbHMtdHJlZSBIRUFEKSIKKworCSkgJiYKKwljbXAgLmdpdC9pbmRleCBzYXZlZC1pbmRleCA+L2Rldi9udWxsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK3pvcnQKKworU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2lnbm9mZicgJworCWVjaG8gInlldCBhbm90aGVyIGNvbnRlbnQgKm5hcmYqIiA+PiBmb28gJiYKKwllY2hvICJ6b3J0IiB8IGdpdCBjb21taXQgLXMgLUYgLSBmb28gJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgIjEsL15cJC9kIiA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgZnJvbSBmaWxlICgxKScgJworCW1rZGlyIHN1YmRpciAmJgorCWVjaG8gIkxvZyBpbiB0b3AgZGlyZWN0b3J5IiA+bG9nICYmCisJZWNobyAiTG9nIGluIHN1YiBkaXJlY3RvcnkiID5zdWJkaXIvbG9nICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIGxvZworCSkgJiYKKwljb21taXRfbXNnX2lzICJMb2cgaW4gc3ViIGRpcmVjdG9yeSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgZnJvbSBmaWxlICgyKScgJworCXJtIC1mIGxvZyAmJgorCWVjaG8gIkxvZyBpbiBzdWIgZGlyZWN0b3J5IiA+c3ViZGlyL2xvZyAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiBsb2cKKwkpICYmCisJY29tbWl0X21zZ19pcyAiTG9nIGluIHN1YiBkaXJlY3RvcnkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIGZyb20gc3RkaW4nICcKKwkoCisJCWNkIHN1YmRpciAmJgorCQllY2hvICJMb2cgd2l0aCBmb28gd29yZCIgfCBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgLQorCSkgJiYKKwljb21taXRfbXNnX2lzICJMb2cgd2l0aCBmb28gd29yZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC1GIG92ZXJyaWRlcyAtdCcgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCWVjaG8gIi1GIGxvZyIgPiBmLmxvZyAmJgorCQllY2hvICItdCB0ZW1wbGF0ZSIgPiB0LnRlbXBsYXRlICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiBmLmxvZyAtdCB0LnRlbXBsYXRlCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgIi1GIGxvZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ29tbWl0IHdpdGhvdXQgbWVzc2FnZSBpcyBhbGxvd2VkIHdpdGggLS1hbGxvdy1lbXB0eS1tZXNzYWdlJyAnCisJZWNobyAibW9yZSBjb250ZW50IiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJPmVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgPGVtcHR5ICYmCisJY29tbWl0X21zZ19pcyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDb21taXQgd2l0aG91dCBtZXNzYWdlIGlzIG5vLW5vIHdpdGhvdXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlJyAnCisJZWNobyAibW9yZSBjb250ZW50IiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJPmVtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCA8ZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ29tbWl0IGEgbWVzc2FnZSB3aXRoIC0tYWxsb3ctZW1wdHktbWVzc2FnZScgJworCWVjaG8gImV2ZW4gbW9yZSBjb250ZW50IiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0iaGVsbG8gdGhlcmUiICYmCisJY29tbWl0X21zZ19pcyAiaGVsbG8gdGhlcmUiCisnCisKK2NvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgKCkgeworCWVjaG8gImZpcnN0IGNvbnRlbnQgbGluZSIgPj5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWNhdCA+bG9nIDw8RU9GICYmCit0YXJnZXQgbWVzc2FnZSBzdWJqZWN0IGxpbmUKKwordGFyZ2V0IG1lc3NhZ2UgYm9keSBsaW5lIDEKK3RhcmdldCBtZXNzYWdlIGJvZHkgbGluZSAyCitFT0YKKwlnaXQgY29tbWl0IC1GIGxvZyAmJgorCWVjaG8gInNlY29uZCBjb250ZW50IGxpbmUiID4+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJpbnRlcm1lZGlhdGUgY29tbWl0IiAmJgorCWVjaG8gInRoaXJkIGNvbnRlbnQgbGluZSIgPj5mb28gJiYKKwlnaXQgYWRkIGZvbworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1maXh1cCBwcm92aWRlcyBjb3JyZWN0IG9uZS1saW5lIGNvbW1pdCBtZXNzYWdlJyAnCisJY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAmJgorCWdpdCBjb21taXQgLS1maXh1cCBIRUFEfjEgJiYKKwljb21taXRfbXNnX2lzICJmaXh1cCEgdGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCAtRicgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwllY2hvICJsb2cgbWVzc2FnZSBmcm9tIGZpbGUiID5tc2dmaWxlICYmCisJZ2l0IGNvbW1pdCAtLXNxdWFzaCBIRUFEfjEgLUYgbXNnZmlsZSAgJiYKKwljb21taXRfbXNnX2lzICJzcXVhc2ghIHRhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZWxvZyBtZXNzYWdlIGZyb20gZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggLW0nICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJZ2l0IGNvbW1pdCAtLXNxdWFzaCBIRUFEfjEgLW0gImZvbyBiYXJcbmJheiIgJiYKKwljb21taXRfbXNnX2lzICJzcXVhc2ghIHRhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZWZvbyBiYXJcbmJheiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggLUMnICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJZ2l0IGNvbW1pdCAtLXNxdWFzaCBIRUFEfjEgLUMgSEVBRCAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgdGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5laW50ZXJtZWRpYXRlIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggLWMnICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2VkaXQtY29udGVudCAmJgorCWdpdCBjb21taXQgLS1zcXVhc2ggSEVBRH4xIC1jIEhFQUQgJiYKKwljb21taXRfbXNnX2lzICJzcXVhc2ghIHRhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZWVkaXRlZCBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLXNxdWFzaCB3b3JrcyB3aXRoIC1DIGZvciBzYW1lIGNvbW1pdCcgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUQgLUMgSEVBRCAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgaW50ZXJtZWRpYXRlIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggLWMgZm9yIHNhbWUgY29tbWl0JyAnCisJY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAmJgorCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9lZGl0LWNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUQgLWMgSEVBRCAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgZWRpdGVkIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggZWRpdG9yJyAnCisJY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAmJgorCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtY29udGVudCAmJgorCWdpdCBjb21taXQgLS1zcXVhc2ggSEVBRH4xICYmCisJY29tbWl0X21zZ19pcyAic3F1YXNoISB0YXJnZXQgbWVzc2FnZSBzdWJqZWN0IGxpbmVjb21taXQgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBtZXNzYWdlIG9wdGlvbnMgd2hlbiB1c2luZyAtLWZpeHVwJyAnCisJZWNobyBjaGFuZ2VzID4+Zm9vICYmCisJZWNobyAibWVzc2FnZSIgPmxvZyAmJgorCWdpdCBhZGQgZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUR+MSAtLXNxdWFzaCBIRUFEfjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZml4dXAgSEVBRH4xIC1DIEhFQUR+MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1maXh1cCBIRUFEfjEgLWMgSEVBRH4yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUR+MSAtbSAiY21kbGluZSBtZXNzYWdlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1maXh1cCBIRUFEfjEgLUYgbG9nCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwMC9hZGQtY29tbWVudHMgYi90L3Q3NTAwL2FkZC1jb21tZW50cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNzJlNjVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMC9hZGQtY29tbWVudHMKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKK2VjaG8gIiMgdGhpcyBpcyBhIG5ldyBjb21tZW50IiA+PiAiJDEiCitlY2hvICIjIGFuZCBzbyBpcyB0aGlzIiA+PiAiJDEiCitleGl0IDAKZGlmZiAtLWdpdCBhL3QvdDc1MDAvYWRkLWNvbnRlbnQgYi90L3Q3NTAwL2FkZC1jb250ZW50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmYTNkODYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAwL2FkZC1jb250ZW50CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCitlY2hvICJjb21taXQgbWVzc2FnZSIgPj4gIiQxIgorZXhpdCAwCmRpZmYgLS1naXQgYS90L3Q3NTAwL2FkZC1zaWduZWQtb2ZmIGIvdC90NzUwMC9hZGQtc2lnbmVkLW9mZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMWQ4NTZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMC9hZGQtc2lnbmVkLW9mZgpAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorZWNobyAiU2lnbmVkLW9mZi1ieTogZm9vIDxiYXJAZnJvdHo+IiA+PiAiJDEiCitleGl0IDAKZGlmZiAtLWdpdCBhL3QvdDc1MDAvYWRkLXdoaXRlc3BhY2VkLWNvbnRlbnQgYi90L3Q3NTAwL2FkZC13aGl0ZXNwYWNlZC1jb250ZW50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjZjA3YzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAwL2FkZC13aGl0ZXNwYWNlZC1jb250ZW50CkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCitzZWQgLWUgJ3MvfCQvLycgPj4iJDEiIDw8XEVPRgorCisgfAorY29tbWl0IG1lc3NhZ2UgIAkgfAorCitFT0YKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdC90NzUwMC9lZGl0LWNvbnRlbnQgYi90L3Q3NTAwL2VkaXQtY29udGVudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOGRiOWZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMC9lZGl0LWNvbnRlbnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKK3NlZCAtZSAicy9pbnRlcm1lZGlhdGUvZWRpdGVkL2ciIDwiJDEiID4iJDEtIgorbXYgIiQxLSIgIiQxIgorZXhpdCAwCmRpZmYgLS1naXQgYS90L3Q3NTAxLWNvbW1pdC5zaCBiL3QvdDc1MDEtY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5NWU3NDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAxLWNvbW1pdC5zaApAQCAtMCwwICsxLDUyNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBLcmlzdGlhbiBIw7hnc2JlcmcgPGtyaEByZWRoYXQuY29tPgorIworCisjIEZJWE1FOiBUZXN0IHRoZSB2YXJpb3VzIGluZGV4IHVzYWdlcywgLWkgYW5kIC1vLCB0ZXN0IHJlZmxvZywKKyMgc2lnbm9mZgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY29tbWl0JworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvZGlmZi1saWIuc2giCisKK2F1dGhvcj0nVGhlIFJlYWwgQXV0aG9yIDxzb21lZ3V5QGhpcy5lbWFpbC5vcmc+JworCit0ZXN0X3RpY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBzdGF0dXMnICcKKwllY2hvIGJvbmdvIGJvbmdvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiSW5pdGlhbCBjb21taXQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIGluaXRpYWwgYW1lbmQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tYW1lbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGluaXRpYWwgY29tbWl0JyAnCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1tIGFuZCAtRiBkbyBub3QgbWl4JyAnCisJZ2l0IGNoZWNrb3V0IEhFQUQgZmlsZSAmJiBlY2hvID4+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGZvbyAtbSBiYXIgLUYgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctbSBhbmQgLUMgZG8gbm90IG1peCcgJworCWdpdCBjaGVja291dCBIRUFEIGZpbGUgJiYgZWNobyA+PmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtQyBIRUFEIC1tIGlsbGVnYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHMgYW5kIC1hIGRvIG5vdCBtaXgnICcKKwllY2hvIEtpbmcgb2YgdGhlIGJvbmdvID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBmb28gLWEgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NhbiB1c2UgcGF0aHMgd2l0aCAtLWludGVyYWN0aXZlJyAnCisJZWNobyBib25nLW8tYm9uZyA+ZmlsZSAmJgorCSMgMjogdXBkYXRlLCAxOnN0IHBhdGgsIHRoYXQgaXMgYWxsLCA3OiBxdWl0CisJKCBlY2hvIDI7IGVjaG8gMTsgZWNobzsgZWNobyA3ICkgfAorCWdpdCBjb21taXQgLW0gZm9vIC0taW50ZXJhY3RpdmUgZmlsZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgaW52YWxpZCBjb21taXQgd2l0aCAtQycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLUMgYm9ndXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90aGluZyB0byBjb21taXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IG5vbi1pbml0aWFsIGNvbW1pdCcgJworCWVjaG8gYm9uZ28gYm9uZ28gYm9uZ28gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG5leHQgLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgZnJvbSBub24tZXhpc3RpbmcgZmlsZScgJworCWVjaG8gbW9yZSBib25nbzogYm9uZ28gYm9uZ28gYm9uZ28gYm9uZ28gPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1GIGdhaCAtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBjb21taXQgbWVzc2FnZScgJworCSMgRW1wdHkgZXhjZXB0IHN0cmF5IHRhYnMgYW5kIHNwYWNlcyBvbiBhIGZldyBsaW5lcy4KKwlzZWQgLWUgInMvQC8vZyIgPm1zZyA8PC1cRU9GICYmCisJCUAJCUAKKwkJQEAKKwkJQCAgQAorCQlAU2lnbmVkLW9mZi1ieTogaHVsYUAKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1GIG1zZyAtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZW1wbGF0ZSAiZW1wdHluZXNzIiBjaGVjayBkb2VzIG5vdCBraWNrIGluIHdpdGggLUYnICcKKwlnaXQgY2hlY2tvdXQgSEVBRCBmaWxlICYmIGVjaG8gPj5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLXQgZmlsZSAtRiBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RlbXBsYXRlICJlbXB0eW5lc3MiIGNoZWNrJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUQgZmlsZSAmJiBlY2hvID4+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC10IGZpbGUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJkaWQgbm90IGVkaXQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogY29tbWl0IG1lc3NhZ2UgZnJvbSBmaWxlJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUQgZmlsZSAmJiBlY2hvID4+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYKKwllY2hvIHRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlLCBjb21pbmcgZnJvbSBhIGZpbGUgPm1zZyAmJgorCWdpdCBjb21taXQgLUYgbXNnIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIGNvbW1pdCcgJworCWNhdCA+ZWRpdG9yIDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwlzZWQgLWUgInMvYSBmaWxlL2FuIGFtZW5kIGNvbW1pdC9nIiA8ICIkMSIgPiAiJDEtIgorCW12ICIkMS0iICIkMSIKKwlFT0YKKwljaG1vZCA3NTUgZWRpdG9yICYmCisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLS1hbWVuZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCAtLW9ubHkgaWdub3JlcyBzdGFnZWQgY29udGVudHMnICcKKwljcCBmaWxlIGZpbGUuZXhwZWN0ICYmCisJZWNobyBjaGFuZ2VkID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLWVkaXQgLS1hbWVuZCAtLW9ubHkgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOmZpbGUgPmZpbGUuYWN0dWFsICYmCisJdGVzdF9jbXAgZmlsZS5leHBlY3QgZmlsZS5hY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZWRpdG9yJyAnCisJY2F0ID5lZGl0b3IgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCXNlZCAtZSAicy91bmFtZW5kZWQvYW1lbmRlZC9nIiA8IiQxIiA+IiQxLSIKKwltdiAiJDEtIiAiJDEiCisJRU9GCisJY2htb2QgNzU1IGVkaXRvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCB3aXRob3V0IGxhdW5jaGluZyBlZGl0b3InICcKKwllY2hvIHVuYW1lbmRlZCA+ZXhwZWN0ICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJ1bmFtZW5kZWQiICYmCisJZWNobyBuZWVkcyBtb3JlIGJvbmdvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLS1uby1lZGl0IC0tYW1lbmQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEIC0tIGZpbGUgJiYKKwlnaXQgZGlmZi10cmVlIC1zIC0tZm9ybWF0PSVzIEhFQUQgPm1zZyAmJgorCXRlc3RfY21wIGV4cGVjdCBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbWVuZCAtLWVkaXQnICcKKwllY2hvIGFtZW5kZWQgPmV4cGVjdCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAidW5hbWVuZGVkIiAmJgorCWVjaG8gYm9uZ28gYWdhaW4gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtLWVkaXQgLS1hbWVuZCAmJgorCWdpdCBkaWZmLXRyZWUgLXMgLS1mb3JtYXQ9JXMgSEVBRCA+bXNnICYmCisJdGVzdF9jbXAgZXhwZWN0IG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFtZW5kIC0tZWRpdCBvZiBlbXB0eSBtZXNzYWdlJyAnCisJY2F0ID5yZXBsYWNlIDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwllY2hvICJhbWVuZGVkIiA+IiQxIgorCUVPRgorCWNobW9kIDc1NSByZXBsYWNlICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtbSAiIiAmJgorCWVjaG8gbW9yZSBib25nbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUVESVRPUj0uL3JlcGxhY2UgZ2l0IGNvbW1pdCAtLWVkaXQgLS1hbWVuZCAmJgorCWdpdCBkaWZmLXRyZWUgLXMgLS1mb3JtYXQ9JXMgSEVBRCA+bXNnICYmCisJLi9yZXBsYWNlIGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLW0gLS1lZGl0JyAnCisJZWNobyBhbWVuZGVkID5leHBlY3QgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYnVmZmVyICYmCisJZWNobyBib25nbyBib25nbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUVESVRPUj0uL2VkaXRvciBnaXQgY29tbWl0IC1tIHVuYW1lbmRlZCAtLWVkaXQgJiYKKwlnaXQgZGlmZi10cmVlIC1zICAtLWZvcm1hdD0lcyBIRUFEID5tc2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1tIGFuZCAtRiBkbyBub3QgbWl4JyAnCisJZWNobyBlbm91Z2ggd2l0aCB0aGUgYm9uZ29zID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtRiBtc2cgLW0gYW1lbmRpbmcgLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBtZXNzYWdlIGZyb20gb3RoZXIgY29tbWl0JyAnCisJZ2l0IGNvbW1pdCAtQyBIRUFEXiAuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXRpbmcgbWVzc2FnZSBmcm9tIG90aGVyIGNvbW1pdCcgJworCWNhdCA+ZWRpdG9yIDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwlzZWQgLWUgInMvYW1lbmQvb2xkZXIvZyIgIDwgIiQxIiA+ICIkMS0iCisJbXYgIiQxLSIgIiQxIgorCUVPRgorCWNobW9kIDc1NSBlZGl0b3IgJiYKKwllY2hvIGh1bGEgaHVsYSA+ZmlsZSAmJgorCUVESVRPUj0uL2VkaXRvciBnaXQgY29tbWl0IC1jIEhFQUReIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2UgZnJvbSBzdGRpbicgJworCWVjaG8gc2lsbHkgbmV3IGNvbnRlbnRzID5maWxlICYmCisJZWNobyBjb21taXQgbWVzc2FnZSBmcm9tIHN0ZGluIHwKKwlnaXQgY29tbWl0IC1GIC0gLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGluZyBhdXRob3IgZnJvbSBjb21tYW5kIGxpbmUnICcKKwllY2hvIGdhayA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYXV0aG9yIFwKKwkJLS1hdXRob3IgIlJ1YmJlciBEdWNrIDxyZHVja0Bjb252b3kub3JnPiIgLWEgPm91dHB1dCAyPiYxICYmCisJZ3JlcCBSdWJiZXIuRHVjayBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbnRlcmFjdGl2ZSBhZGQnICcKKwllY2hvIDcgfAorCWdpdCBjb21taXQgLS1pbnRlcmFjdGl2ZSB8CisJZ3JlcCAiV2hhdCBub3ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAiY29tbWl0IC0taW50ZXJhY3RpdmUgZG9lc24ndCBjaGFuZ2UgaW5kZXggaWYgZWRpdG9yIGFib3J0cyIgJworCWVjaG8gem9vID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1leGl0LWNvZGUgPmRpZmYxICYmCisJKGVjaG8gdSA7IGVjaG8gIioiIDsgZWNobyBxKSB8CisJKAorCQlFRElUT1I9OiAmJgorCQlleHBvcnQgRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1pbnRlcmFjdGl2ZQorCSkgJiYKKwlnaXQgZGlmZiA+ZGlmZjIgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZGlmZjEgZGlmZjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdG9yIG5vdCBpbnZva2VkIGlmIC1GIGlzIGdpdmVuJyAnCisJY2F0ID5lZGl0b3IgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCXNlZCAtZSBzL2dvb2QvYmFkL2cgPCIkMSIgPiIkMS0iCisJbXYgIiQxLSIgIiQxIgorCUVPRgorCWNobW9kIDc1NSBlZGl0b3IgJiYKKworCWVjaG8gQSBnb29kIGNvbW1pdCBtZXNzYWdlLiA+bXNnICYmCisJZWNobyBtb28gPmZpbGUgJiYKKworCUVESVRPUj0uL2VkaXRvciBnaXQgY29tbWl0IC1hIC1GIG1zZyAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolcyA+c3ViamVjdCAmJgorCWdyZXAgLXEgZ29vZCBzdWJqZWN0ICYmCisKKwllY2hvIHF1YWNrID5maWxlICYmCisJZWNobyBBbm90aGVyIGdvb2QgbWVzc2FnZS4gfAorCUVESVRPUj0uL2VkaXRvciBnaXQgY29tbWl0IC1hIC1GIC0gJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JXMgPnN1YmplY3QgJiYKKwlncmVwIC1xIGdvb2Qgc3ViamVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNvbW1pdCB0aGF0IGludm9sdmVzIHJlbW92YWwgKDEpJyAnCisKKwlnaXQgcm0gLS1jYWNoZWQgZmlsZSAmJgorCW12IGZpbGUgZWxpZiAmJgorCWdpdCBhZGQgZWxpZiAmJgorCWdpdCBjb21taXQgLW0gIlBhcnRpYWw6IGFkZCBlbGlmIiBlbGlmICYmCisJZ2l0IGRpZmYtdHJlZSAtLW5hbWUtc3RhdHVzIEhFQUReIEhFQUQgPmN1cnJlbnQgJiYKKwllY2hvICJBCWVsaWYiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNvbW1pdCB0aGF0IGludm9sdmVzIHJlbW92YWwgKDIpJyAnCisKKwlnaXQgY29tbWl0IC1tICJQYXJ0aWFsOiByZW1vdmUgZmlsZSIgZmlsZSAmJgorCWdpdCBkaWZmLXRyZWUgLS1uYW1lLXN0YXR1cyBIRUFEXiBIRUFEID5jdXJyZW50ICYmCisJZWNobyAiRAlmaWxlIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjb21taXQgdGhhdCBpbnZvbHZlcyByZW1vdmFsICgzKScgJworCisJZ2l0IHJtIC0tY2FjaGVkIGVsaWYgJiYKKwllY2hvIGVsaWYgPmVsaWYgJiYKKwlnaXQgY29tbWl0IC1tICJQYXJ0aWFsOiBtb2RpZnkgZWxpZiIgZWxpZiAmJgorCWdpdCBkaWZmLXRyZWUgLS1uYW1lLXN0YXR1cyBIRUFEXiBIRUFEID5jdXJyZW50ICYmCisJZWNobyAiTQllbGlmIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgY29tbWl0IHRvIGZpeCBhdXRob3InICcKKworCW9sZHRpY2s9JEdJVF9BVVRIT1JfREFURSAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8CisJc2VkIC1lICJzL2F1dGhvci4qL2F1dGhvciAkYXV0aG9yICRvbGR0aWNrLyIgXAorCQktZSAicy9eXChjb21taXR0ZXIuKj4gXCkuKiQvXDEkR0lUX0NPTU1JVFRFUl9EQVRFLyIgPiBcCisJCWV4cGVjdGVkICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYXV0aG9yPSIkYXV0aG9yIiAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID4gY3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCBjb21taXQgdG8gZml4IGRhdGUnICcKKworCXRlc3RfdGljayAmJgorCW5ld3RpY2s9JEdJVF9BVVRIT1JfREFURSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8CisJc2VkIC1lICJzL2F1dGhvci4qL2F1dGhvciAkYXV0aG9yICRuZXd0aWNrLyIgXAorCQktZSAicy9eXChjb21taXR0ZXIuKj4gXCkuKiQvXDEkR0lUX0NPTU1JVFRFUl9EQVRFLyIgPiBcCisJCWV4cGVjdGVkICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tZGF0ZT0iJG5ld3RpY2siICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPiBjdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjb21wbGFpbnMgYWJvdXQgYm9ndXMgZGF0ZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1hbWVuZCAtLWRhdGU9MTAuMTEuMjAxMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWduIG9mZiAoMSknICcKKworCWVjaG8gMSA+cG9zaXRpdmUgJiYKKwlnaXQgYWRkIHBvc2l0aXZlICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAidGhhbmsgeW91IiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gdGhhbmsgeW91CisJCWVjaG8KKwkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwKKwkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbiBvZmYgKDIpJyAnCisKKwllY2hvIDIgPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWV4aXN0aW5nPSJTaWduZWQtb2ZmLWJ5OiBXYXRjaCBUaGlzIDx3YXRjaHRoaXNAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBjb21taXQgLXMgLW0gInRoYW5rIHlvdQorCiskZXhpc3RpbmciICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPmFjdHVhbCAmJgorCSgKKwkJZWNobyB0aGFuayB5b3UKKwkJZWNobworCQllY2hvICRleGlzdGluZworCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfAorCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmIGdhcCcgJworCisJZWNobyAzID5wb3NpdGl2ZSAmJgorCWdpdCBhZGQgcG9zaXRpdmUgJiYKKwlhbHQ9IkFsdC1SRkMtODIyLUhlYWRlcjogVmFsdWUiICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAid2VsY29tZQorCiskYWx0IiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID4gYWN0dWFsICYmCisJKAorCQllY2hvIHdlbGNvbWUKKwkJZWNobworCQllY2hvICRhbHQKKwkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwKKwkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmYgZ2FwIDInICcKKworCWVjaG8gNCA+cG9zaXRpdmUgJiYKKwlnaXQgYWRkIHBvc2l0aXZlICYmCisJYWx0PSJmaXhlZDogMzQiICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAid2VsY29tZQorCitXZSBoYXZlIG5vdworJGFsdCIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+IGFjdHVhbCAmJgorCSgKKwkJZWNobyB3ZWxjb21lCisJCWVjaG8KKwkJZWNobyBXZSBoYXZlIG5vdworCQllY2hvICRhbHQKKwkJZWNobworCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfAorCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgLW0nICcKKworCT5uZWdhdGl2ZSAmJgorCWdpdCBhZGQgbmVnYXRpdmUgJiYKKwlnaXQgY29tbWl0IC1tICJvbmUiIC1tICJ0d28iIC1tICJ0aHJlZSIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJKAorCQllY2hvIG9uZQorCQllY2hvCisJCWVjaG8gdHdvCisJCWVjaG8KKwkJZWNobyB0aHJlZQorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgY29tbWl0IHRvIGZpeCBhdXRob3InICcKKworCW9sZHRpY2s9JEdJVF9BVVRIT1JfREFURSAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8CisJc2VkIC1lICJzL2F1dGhvci4qL2F1dGhvciAkYXV0aG9yICRvbGR0aWNrLyIgXAorCQktZSAicy9eXChjb21taXR0ZXIuKj4gXCkuKiQvXDEkR0lUX0NPTU1JVFRFUl9EQVRFLyIgPiBcCisJCWV4cGVjdGVkICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYXV0aG9yPSIkYXV0aG9yIiAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID4gY3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0IDxmaWxlPiB3aXRoIGRpcnR5IGluZGV4JyAnCisJZWNobyB0YWNvY2F0ID4gZWxpZiAmJgorCWVjaG8gdGVobHVseiA+IGNoeiAmJgorCWdpdCBhZGQgY2h6ICYmCisJZ2l0IGNvbW1pdCBlbGlmIC1tICJ0YWNvY2F0IGlzIGEgcGFsaW5kcm9tZSIgJiYKKwlnaXQgc2hvdyAtLXN0YXQgfCBncmVwIGVsaWYgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCB8IGdyZXAgY2h6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgdHJlZSAoc2luZ2xlIHBhcmVudCknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGVtcHR5CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSB0cmVlIChzaW5nbGUgcGFyZW50KSAtLWFsbG93LWVtcHR5JyAnCisKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImZvcmNlZCBlbXB0eSIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIGZvcmNlZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgdHJlZSAobWVyZ2UgYW5kIGFtZW5kIG1lcmdlKScgJworCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwllY2hvIHplcm8gPnplcm8gJiYKKwlnaXQgYWRkIHplcm8gJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgemVybyIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgbWVyZ2UgLXMgb3VycyBzaWRlIC1tICJlbXB0eSBvayIgJiYKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwk6ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJlbXB0eSByZWFsbHkgb2siICYmCisJZ2l0IGRpZmYgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJOiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCB1c2luZyB0aGUgbWVzc2FnZSBmcm9tIGFub3RoZXIgY29tbWl0JyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJvbGQgY29tbWl0IiAmJgorCW9sZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIm5ldyBjb21taXQiICYmCisJbmV3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWFtZW5kIC1DICIkb2xkIiAmJgorCWdpdCBzaG93IC0tcHJldHR5PSJmb3JtYXQ6JWFkICVzIiAiJG9sZCIgPmV4cGVjdGVkICYmCisJZ2l0IHNob3cgLS1wcmV0dHk9ImZvcm1hdDolYWQgJXMiIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIHVzaW5nIHRoZSBtZXNzYWdlIGZyb20gYSBjb21taXQgbmFtZWQgd2l0aCB0YWcnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIm9sZCBjb21taXQiICYmCisJb2xkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCB0YWcgLWEgLW0gInRhZyBvbiBvbGQiIHRhZ2dlZC1vbGQgSEVBRCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAibmV3IGNvbW1pdCIgJiYKKwluZXc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYW1lbmQgLUMgdGFnZ2VkLW9sZCAmJgorCWdpdCBzaG93IC0tcHJldHR5PSJmb3JtYXQ6JWFkICVzIiAiJG9sZCIgPmV4cGVjdGVkICYmCisJZ2l0IHNob3cgLS1wcmV0dHk9ImZvcm1hdDolYWQgJXMiIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIGNhbiBjb3B5IG5vdGVzJyAnCisKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGUuYW1lbmQgdHJ1ZSAmJgorCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCXRlc3RfY29tbWl0IGZvbyAmJgorCWdpdCBub3RlcyBhZGQgLW0iYSBub3RlIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSJuZXcgZm9vIiAmJgorCXRlc3QgIiQoZ2l0IG5vdGVzIHNob3cpIiA9ICJhIG5vdGUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGEgZmlsZSB3aG9zZSBuYW1lIGlzIGEgZGFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUKKwlkbworCQllY2hvICRpCisJZG9uZSA+Li8tICYmCisJZ2l0IGFkZCAuLy0gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZGFzaCIgPm91dHB1dCA8L2Rldi9udWxsICYmCisJdGVzdF9pMThuZ3JlcCAiIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucyIgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwMi1jb21taXQuc2ggYi90L3Q3NTAyLWNvbW1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZWIxODdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMi1jb21taXQuc2gKQEAgLTAsMCArMSw0NjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY29tbWl0IHBvcmNlbGFpbi1pc2gnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIEFyZ3VtZW50czogWzxwcmVmaXhdIFs8Y29tbWl0IG1lc3NhZ2U+XSBbPGNvbW1pdCBvcHRpb25zPl0KK2NoZWNrX3N1bW1hcnlfb25lbGluZSgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0ICR7MysiJDMifSAtbSAiJDIiIHwgaGVhZCAtMSA+IGFjdCAmJgorCisJIyBicmFuY2ggbmFtZQorCVNVTU1BUllfUFJFRklYPSIkKGdpdCBuYW1lLXJldiAtLW5hbWUtb25seSBIRUFEKSIgJiYKKworCSMgYXBwZW5kIHRoZSAic3BlY2lhbCIgcHJlZml4LCBsaWtlICJyb290LWNvbW1pdCIsICJkZXRhY2hlZCBIRUFEIgorCWlmIHRlc3QgLW4gIiQxIgorCXRoZW4KKwkJU1VNTUFSWV9QUkVGSVg9IiRTVU1NQVJZX1BSRUZJWCAoJDEpIgorCWZpCisKKwkjIGFiYnJldiBTSEEtMQorCVNVTU1BUllfUE9TVEZJWD0iJChnaXQgbG9nIC0xIC0tcHJldHR5PSdmb3JtYXQ6JWgnKSIKKwllY2hvICJbJFNVTU1BUllfUFJFRklYICRTVU1NQVJZX1BPU1RGSVhdICQyIiA+ZXhwICYmCisKKwl0ZXN0X2kxOG5jbXAgZXhwIGFjdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRwdXQgc3VtbWFyeSBmb3JtYXQnICcKKworCWVjaG8gbmV3ID5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwljaGVja19zdW1tYXJ5X29uZWxpbmUgInJvb3QtY29tbWl0IiAiaW5pdGlhbCIgJiYKKworCWVjaG8gY2hhbmdlID4+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHB1dCBzdW1tYXJ5IGZvcm1hdDogcm9vdC1jb21taXQnICcKKwljaGVja19zdW1tYXJ5X29uZWxpbmUgIiIgImEgY2hhbmdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRwdXQgc3VtbWFyeSBmb3JtYXQgZm9yIGNvbW1pdCB3aXRoIGFuIGVtcHR5IGRpZmYnICcKKworCWNoZWNrX3N1bW1hcnlfb25lbGluZSAiIiAiZW1wdHkiICItLWFsbG93LWVtcHR5IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRwdXQgc3VtbWFyeSBmb3JtYXQgZm9yIG1lcmdlcycgJworCisJZ2l0IGNoZWNrb3V0IC1iIHJlY3Vyc2l2ZS1iYXNlICYmCisJdGVzdF9jb21taXQgYmFzZSBmaWxlMSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHJlY3Vyc2l2ZS1hIHJlY3Vyc2l2ZS1iYXNlICYmCisJdGVzdF9jb21taXQgY29tbWl0LWEgZmlsZTEgJiYKKworCWdpdCBjaGVja291dCAtYiByZWN1cnNpdmUtYiByZWN1cnNpdmUtYmFzZSAmJgorCXRlc3RfY29tbWl0IGNvbW1pdC1iIGZpbGUxICYmCisKKwkjIGNvbmZsaWN0CisJZ2l0IGNoZWNrb3V0IHJlY3Vyc2l2ZS1hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHJlY3Vyc2l2ZS1iICYmCisJIyByZXNvbHZlIHRoZSBjb25mbGljdAorCWVjaG8gY29tbWl0LWEgPiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwljaGVja19zdW1tYXJ5X29uZWxpbmUgIiIgIk1lcmdlIgorJworCitvdXRwdXRfdGVzdHNfY2xlYW51cCgpIHsKKwkjIHRoaXMgaXMgbmVlZGVkIGZvciAiZG8gbm90IGZpcmUgZWRpdG9yIGluIHRoZSBwcmVzZW5jZSBvZiBjb25mbGljdHMiCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJIyB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlICJwYXJ0aWFsIHJlbW92YWwiIHRlc3QgdG8gcGFzcworCWdpdCBybSBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gImNsZWFudXAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSBiYXNpY3MnICcKKworCW91dHB1dF90ZXN0c19jbGVhbnVwICYmCisKKwllY2hvIGRvaW5nIHBhcnRpYWwgPiJjb21taXQgaXMiICYmCisJbWtkaXIgbm90ICYmCisJZWNobyB2ZXJ5IG11Y2ggZW5jb3VyYWdlZCBidXQgd2Ugc2hvdWxkID5ub3QvZm9yYmlkICYmCisJZ2l0IGFkZCAiY29tbWl0IGlzIiBub3QgJiYKKwllY2hvIHVwZGF0ZSBhZGRlZCAiY29tbWl0IGlzIiBmaWxlID4iY29tbWl0IGlzIiAmJgorCWVjaG8gYWxzbyB1cGRhdGUgYW5vdGhlciA+bm90L2ZvcmJpZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gImluaXRpYWwgd2l0aCAtYSIgJiYKKworCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6ImNvbW1pdCBpcyIgPmN1cnJlbnQuMSAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6bm90L2ZvcmJpZCA+Y3VycmVudC4yICYmCisKKwljbXAgY3VycmVudC4xICJjb21taXQgaXMiICYmCisJY21wIGN1cnJlbnQuMiBub3QvZm9yYmlkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCcgJworCisJZWNobyBhbm90aGVyID4iY29tbWl0IGlzIiAmJgorCWVjaG8gYW5vdGhlciA+bm90L2ZvcmJpZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhcnRpYWwgY29tbWl0IHRvIGhhbmRsZSBhIGZpbGUiICJjb21taXQgaXMiICYmCisKKwljaGFuZ2VkPSQoZ2l0IGRpZmYtdHJlZSAtLW5hbWUtb25seSBIRUFEXiBIRUFEKSAmJgorCXRlc3QgIiRjaGFuZ2VkIiA9ICJjb21taXQgaXMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBtb2RpZmljYXRpb24gaW4gYSBzdWJkaXJlY3RvcnknICcKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhcnRpYWwgY29tbWl0IHRvIHN1YmRpcmVjdG9yeSIgbm90ICYmCisKKwljaGFuZ2VkPSQoZ2l0IGRpZmYtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEXiBIRUFEKSAmJgorCXRlc3QgIiRjaGFuZ2VkIiA9ICJub3QvZm9yYmlkIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgcmVtb3ZhbCcgJworCisJZ2l0IHJtIG5vdC9mb3JiaWQgJiYKKwlnaXQgY29tbWl0IC1tICJwYXJ0aWFsIGNvbW1pdCB0byByZW1vdmUgbm90L2ZvcmJpZCIgbm90ICYmCisKKwljaGFuZ2VkPSQoZ2l0IGRpZmYtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEXiBIRUFEKSAmJgorCXRlc3QgIiRjaGFuZ2VkIiA9ICJub3QvZm9yYmlkIiAmJgorCXJlbWFpbj0kKGdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5IEhFQUQpICYmCisJdGVzdCAiJHJlbWFpbiIgPSAiY29tbWl0IGlzIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ24gb2ZmJyAnCisKKwk+cG9zaXRpdmUgJiYKKwlnaXQgYWRkIHBvc2l0aXZlICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAidGhhbmsgeW91IiAmJgorCWFjdHVhbD0kKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgInMvU2lnbmVkLW9mZi1ieTogLy9wIikgJiYKKwlleHBlY3RlZD0kKGdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8IHNlZCAtZSAicy8+LiovPi8iKSAmJgorCXRlc3QgInokYWN0dWFsIiA9ICJ6JGV4cGVjdGVkIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIC1tJyAnCisKKwk+bmVnYXRpdmUgJiYKKwlnaXQgYWRkIG5lZ2F0aXZlICYmCisJZ2l0IGNvbW1pdCAtbSAib25lIiAtbSAidHdvIiAtbSAidGhyZWUiICYmCisJYWN0dWFsPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIpICYmCisJZXhwZWN0ZWQ9JChlY2hvIG9uZTsgZWNobzsgZWNobyB0d287IGVjaG87IGVjaG8gdGhyZWUpICYmCisJdGVzdCAieiRhY3R1YWwiID0gInokZXhwZWN0ZWQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyYm9zZScgJworCisJZWNobyBtaW51cyA+bmVnYXRpdmUgJiYKKwlnaXQgYWRkIG5lZ2F0aXZlICYmCisJZ2l0IHN0YXR1cyAtdiB8IHNlZCAtbmUgIi9eZGlmZiAtLWdpdCAvcCIgPmFjdHVhbCAmJgorCWVjaG8gImRpZmYgLS1naXQgYS9uZWdhdGl2ZSBiL25lZ2F0aXZlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2UgcmVzcGVjdHMgZGlmZiBjb25maWcnICcKKworCWdpdCBjb25maWcgY29sb3IuZGlmZiBhbHdheXMgJiYKKwlnaXQgc3RhdHVzIC12ID5hY3R1YWwgJiYKKwlncmVwICJcWzFtZGlmZiAtLWdpdCIgYWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbG9yLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHZlcmJhdGltLC10KScgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJeyBlY2hvO2VjaG8gIiMgdGV4dCI7ZWNobzsgfSA+ZXhwZWN0ICYmCisJZ2l0IGNvbW1pdCAtLWNsZWFudXA9dmVyYmF0aW0gLXQgZXhwZWN0IC1hICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgfHNlZCAtZSAiMSwvXlwkL2QiIHxoZWFkIC1uIDMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAodmVyYmF0aW0sLUYpJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwlnaXQgY29tbWl0IC0tY2xlYW51cD12ZXJiYXRpbSAtRiBleHBlY3QgLWEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8c2VkIC1lICIxLC9eXCQvZCI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzICh2ZXJiYXRpbSwtbSknICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCWdpdCBjb21taXQgLS1jbGVhbnVwPXZlcmJhdGltIC1tICIkKGNhdCBleHBlY3QpIiAtYSAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEIHxzZWQgLWUgIjEsL15cJC9kIj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHdoaXRlc3BhY2UsLUYpJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwl7IGVjaG87ZWNobyAiIyB0ZXh0IjtlY2hvOyB9ID50ZXh0ICYmCisJZWNobyAiIyB0ZXh0IiA+ZXhwZWN0ICYmCisJZ2l0IGNvbW1pdCAtLWNsZWFudXA9d2hpdGVzcGFjZSAtRiB0ZXh0IC1hICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgfHNlZCAtZSAiMSwvXlwkL2QiPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAoc3RyaXAsLUYpJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwl7IGVjaG87ZWNobyAiIyB0ZXh0IjtlY2hvIHNhbXBsZTtlY2hvOyB9ID50ZXh0ICYmCisJZWNobyBzYW1wbGUgPmV4cGVjdCAmJgorCWdpdCBjb21taXQgLS1jbGVhbnVwPXN0cmlwIC1GIHRleHQgLWEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8c2VkIC1lICIxLC9eXCQvZCI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzIChzdHJpcCwtRiwtZSknICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCXsgZWNobztlY2hvIHNhbXBsZTtlY2hvOyB9ID50ZXh0ICYmCisJZ2l0IGNvbW1pdCAtZSAtRiB0ZXh0IC1hICYmCisJaGVhZCAtbiA0IC5naXQvQ09NTUlUX0VESVRNU0cgPmFjdHVhbAorJworCitlY2hvICJzYW1wbGUKKworIyBQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nCisjIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuIiA+ZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzIChzdHJpcCwtRiwtZSk6IG91dHB1dCcgJworCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2Ugc2hvd3MgYXV0aG9yIHdoZW4gaXQgaXMgbm90IGVxdWFsIHRvIGNvbW1pdHRlcicgJworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCWdpdCBjb21taXQgLWUgLW0gInNhbXBsZSIgLWEgJiYKKwl0ZXN0X2kxOG5ncmVwIFwKKwkgICJeIyBBdXRob3I6ICpBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPlwkIiBcCisJICAuZ2l0L0NPTU1JVF9FRElUTVNHCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGF1dG8taWRlbnQgcHJlcmVxdWlzaXRlJyAnCisJaWYgKHNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCSAgICBzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfTkFNRSAmJgorCSAgICBnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQpOyB0aGVuCisJCXRlc3Rfc2V0X3ByZXJlcSBBVVRPSURFTlQKKwllbHNlCisJCXRlc3Rfc2V0X3ByZXJlcSBOT0FVVE9JREVOVAorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQVVUT0lERU5UICdtZXNzYWdlIHNob3dzIGNvbW1pdHRlciB3aGVuIGl0IGlzIGF1dG9tYXRpYycgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwkJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX05BTUUgJiYKKwkJZ2l0IGNvbW1pdCAtZSAtbSAic2FtcGxlIiAtYQorCSkgJiYKKwkjIHRoZSBpZGVudCBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHN5c3RlbSwgc28gd2UgY2Fubm90CisJIyBjaGVjayB0aGUgYWN0dWFsIHZhbHVlLCBvbmx5IHRoYXQgaXQgaXMgdGhlcmUKKwl0ZXN0X2kxOG5ncmVwICJeIyBDb21taXR0ZXI6ICIgLmdpdC9DT01NSVRfRURJVE1TRworJworCit3cml0ZV9zY3JpcHQgLmdpdC9GQUtFX0VESVRPUiA8PEVPRgorZWNobyBlZGl0b3Igc3RhcnRlZCA+ICIkKHB3ZCkvLmdpdC9yZXN1bHQiCitleGl0IDAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE5PQVVUT0lERU5UICdkbyBub3QgZmlyZSBlZGl0b3Igd2hlbiBjb21taXR0ZXIgaXMgYm9ndXMnICcKKwk+LmdpdC9yZXN1bHQKKwk+ZXhwZWN0ICYmCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwkoCisJCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfTkFNRSAmJgorCQlHSVRfRURJVE9SPSJcIiQocHdkKS8uZ2l0L0ZBS0VfRURJVE9SXCIiICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLWUgLW0gc2FtcGxlIC1hCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L3Jlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgZmlyZSBlZGl0b3IgaW4gdGhlIHByZXNlbmNlIG9mIGNvbmZsaWN0cycgJworCisJZ2l0IGNsZWFuIC1mICYmCisJZWNobyBmID5nICYmCisJZ2l0IGFkZCBnICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGciICYmCisJZ2l0IGJyYW5jaCBzZWNvbmQgJiYKKwllY2hvIG1hc3RlciA+ZyAmJgorCWVjaG8gZyA+aCAmJgorCWdpdCBhZGQgZyBoICYmCisJZ2l0IGNvbW1pdCAtbSAibW9kaWZ5IGcgYW5kIGFkZCBoIiAmJgorCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwllY2hvIHNlY29uZCA+ZyAmJgorCWdpdCBhZGQgZyAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJIyBNdXN0IGZhaWwgZHVlIHRvIGNvbmZsaWN0CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC1uIG1hc3RlciAmJgorCWVjaG8gImVkaXRvciBub3Qgc3RhcnRlZCIgPi5naXQvcmVzdWx0ICYmCisJKAorCQlHSVRfRURJVE9SPSJcIiQocHdkKS8uZ2l0L0ZBS0VfRURJVE9SXCIiICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQKKwkpICYmCisJdGVzdCAiJChjYXQgLmdpdC9yZXN1bHQpIiA9ICJlZGl0b3Igbm90IHN0YXJ0ZWQiCisnCisKK3dyaXRlX3NjcmlwdCAuZ2l0L0ZBS0VfRURJVE9SIDw8RU9GCisjIGtpbGwgLVRFUk0gY29tbWFuZCBhZGRlZCBiZWxvdy4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEVYRUNLRUVQU1BJRCAnYSBTSUdURVJNIHNob3VsZCBicmVhayBsb2NrcycgJworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCSEgIiRTSEVMTF9QQVRIIiAtYyAnXCcnCisJICBlY2hvIGtpbGwgLVRFUk0gJCQgPj4gLmdpdC9GQUtFX0VESVRPUgorCSAgR0lUX0VESVRPUj0uZ2l0L0ZBS0VfRURJVE9SCisJICBleHBvcnQgR0lUX0VESVRPUgorCSAgZXhlYyBnaXQgY29tbWl0IC1hJ1wnJyAmJgorCXRlc3QgISAtZiAuZ2l0L2luZGV4LmxvY2sKKycKKworcm0gLWYgLmdpdC9NRVJHRV9NU0cgLmdpdC9DT01NSVRfRURJVE1TRworZ2l0IHJlc2V0IC1xIC0taGFyZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIYW5kIGNvbW1pdHRpbmcgb2YgYSByZWR1bmRhbnQgbWVyZ2UgcmVtb3ZlcyBkdXBzJyAnCisKKwlnaXQgcmV2LXBhcnNlIHNlY29uZCBtYXN0ZXIgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzZWNvbmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciBnICYmCisJRURJVE9SPTogZ2l0IGNvbW1pdCAtYSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbiAtZSAicy9ecGFyZW50IC8vcCIgLWUgIi9eJC9xIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Egc2luZ2xlLWxpbmVyIHN1YmplY3Qgd2l0aCBhIHRva2VuIHBsdXMgY29sb24gaXMgbm90IGEgZm9vdGVyJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAiaGVsbG86IGtpdHR5IiAtLWFsbG93LWVtcHR5ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eJC9kIiA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwKKworJworCit3cml0ZV9zY3JpcHQgLmdpdC9GQUtFX0VESVRPUiA8PFxFT0YKK212ICIkMSIgIiQxLm9yaWciCisoCisJZWNobyBtZXNzYWdlCisJY2F0ICIkMS5vcmlnIgorKSA+IiQxIgorRU9GCisKK2VjaG8gJyMjIEN1c3RvbSB0ZW1wbGF0ZScgPnRlbXBsYXRlCisKK2NsZWFyX2NvbmZpZyAoKSB7CisJKAorCQlnaXQgY29uZmlnIC0tdW5zZXQtYWxsICIkMSIKKwkJY2FzZSAkPyBpbgorCQkwfDUpCWV4aXQgMCA7OworCQkqKQlleGl0IDEgOzsKKwkJZXNhYworCSkKK30KKwordHJ5X2NvbW1pdCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gPj5uZWdhdGl2ZSAmJgorCUdJVF9FRElUT1I9LmdpdC9GQUtFX0VESVRPUiBnaXQgY29tbWl0IC1hICQqICR1c2VfdGVtcGxhdGUgJiYKKwljYXNlICIkdXNlX3RlbXBsYXRlIiBpbgorCScnKQorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIyBDdXN0b20gdGVtcGxhdGUiIC5naXQvQ09NTUlUX0VESVRNU0cgOzsKKwkqKQorCQl0ZXN0X2kxOG5ncmVwICJeIyMgQ3VzdG9tIHRlbXBsYXRlIiAuZ2l0L0NPTU1JVF9FRElUTVNHIDs7CisJZXNhYworfQorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibyAoKSB7CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zdGF0dXMnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJdHJ5X2NvbW1pdCAtLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1uby1zdGF0dXMnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJdHJ5X2NvbW1pdCAtLW5vLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoIGNvbW1pdC5zdGF0dXMgPSB5ZXMnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJZ2l0IGNvbmZpZyBjb21taXQuc3RhdHVzIHllcyAmJgorCQl0cnlfY29tbWl0ICIiICYmCisJCXRlc3RfaTE4bmdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoIGNvbW1pdC5zdGF0dXMgPSBubycgJworCQljbGVhcl9jb25maWcgY29tbWl0LnN0YXR1cyAmJgorCQlnaXQgY29uZmlnIGNvbW1pdC5zdGF0dXMgbm8gJiYKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLXN0YXR1cyB3aXRoIGNvbW1pdC5zdGF0dXMgPSB5ZXMnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJZ2l0IGNvbmZpZyBjb21taXQuc3RhdHVzIHllcyAmJgorCQl0cnlfY29tbWl0IC0tc3RhdHVzICYmCisJCXRlc3RfaTE4bmdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLW5vLXN0YXR1cyB3aXRoIGNvbW1pdC5zdGF0dXMgPSB5ZXMnICcKKwkJY2xlYXJfY29uZmlnIGNvbW1pdC5zdGF0dXMgJiYKKwkJZ2l0IGNvbmZpZyBjb21taXQuc3RhdHVzIHllcyAmJgorCQl0cnlfY29tbWl0IC0tbm8tc3RhdHVzICYmCisJCXRlc3RfaTE4bmdyZXAgISAiXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAuZ2l0L0NPTU1JVF9FRElUTVNHCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3RhdHVzIHdpdGggY29tbWl0LnN0YXR1cyA9IG5vJyAnCisJCWNsZWFyX2NvbmZpZyBjb21taXQuc3RhdHVzICYmCisJCWdpdCBjb25maWcgY29tbWl0LnN0YXR1cyBubyAmJgorCQl0cnlfY29tbWl0IC0tc3RhdHVzICYmCisJCXRlc3RfaTE4bmdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLW5vLXN0YXR1cyB3aXRoIGNvbW1pdC5zdGF0dXMgPSBubycgJworCQljbGVhcl9jb25maWcgY29tbWl0LnN0YXR1cyAmJgorCQlnaXQgY29uZmlnIGNvbW1pdC5zdGF0dXMgbm8gJiYKKwkJdHJ5X2NvbW1pdCAtLW5vLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworfQorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibworCit1c2VfdGVtcGxhdGU9Ii10IHRlbXBsYXRlIgorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDMtcHJlLWNvbW1pdC1ob29rLnNoIGIvdC90NzUwMy1wcmUtY29tbWl0LWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTg0ODg5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDMtcHJlLWNvbW1pdC1ob29rLnNoCkBAIC0wLDAgKzEsMTM5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHJlLWNvbW1pdCBob29rJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBubyBob29rJyAnCisKKwllY2hvICJmb28iID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggbm8gaG9vaycgJworCisJZWNobyAiYmFyIiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJiYXIiCisKKycKKworIyBub3cgaW5zdGFsbCBob29rIHRoYXQgYWx3YXlzIHN1Y2NlZWRzCitIT09LRElSPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9ob29rcyIKK0hPT0s9IiRIT09LRElSL3ByZS1jb21taXQiCitta2RpciAtcCAiJEhPT0tESVIiCitjYXQgPiAiJEhPT0siIDw8RU9GCisjIS9iaW4vc2gKK2V4aXQgMAorRU9GCitjaG1vZCAreCAiJEhPT0siCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggc3VjY2VlZGluZyBob29rJyAnCisKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibW9yZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIHN1Y2NlZWRpbmcgaG9vaycgJworCisJZWNobyAiZXZlbiBtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAiZXZlbiBtb3JlIgorCisnCisKKyMgbm93IGEgaG9vayB0aGF0IGZhaWxzCitjYXQgPiAiJEhPT0siIDw8RU9GCisjIS9iaW4vc2gKK2V4aXQgMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rJyAnCisKKwllY2hvICJhbm90aGVyIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSAiYW5vdGhlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIGZhaWxpbmcgaG9vaycgJworCisJZWNobyAic3R1ZmYiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJzdHVmZiIKKworJworCitjaG1vZCAteCAiJEhPT0siCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCisKKwllY2hvICJjb250ZW50IiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiY29udGVudCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnLS1uby12ZXJpZnkgd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCisKKwllY2hvICJtb3JlIGNvbnRlbnQiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJtb3JlIGNvbnRlbnQiCisKKycKK2NobW9kICt4ICIkSE9PSyIKKworIyBhIGhvb2sgdGhhdCBjaGVja3MgJEdJVF9QUkVGSVggYW5kIHN1Y2NlZWRzIGluc2lkZSB0aGUKKyMgc3VjY2Vzcy8gc3ViZGlyZWN0b3J5IG9ubHkKK2NhdCA+ICIkSE9PSyIgPDxFT0YKKyMhL2Jpbi9zaAordGVzdCBcJEdJVF9QUkVGSVggPSBzdWNjZXNzLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayByZXF1aXJpbmcgR0lUX1BSRUZJWCcgJworCisJZWNobyAibW9yZSBjb250ZW50IiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJbWtkaXIgc3VjY2VzcyAmJgorCSgKKwkJY2Qgc3VjY2VzcyAmJgorCQlnaXQgY29tbWl0IC1tICJob29rIHJlcXVpcmVzIEdJVF9QUkVGSVggPSBzdWNjZXNzLyIKKwkpICYmCisJcm1kaXIgc3VjY2VzcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGZhaWxpbmcgaG9vayByZXF1aXJpbmcgR0lUX1BSRUZJWCcgJworCisJZWNobyAibW9yZSBjb250ZW50IiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJbWtkaXIgZmFpbCAmJgorCSgKKwkJY2QgZmFpbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tICJob29rIG11c3QgZmFpbCIKKwkpICYmCisJcm1kaXIgZmFpbCAmJgorCWdpdCBjaGVja291dCAtLSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoZSBhdXRob3IgaW4gaG9vaycgJworCXdyaXRlX3NjcmlwdCAiJEhPT0siIDw8LVxFT0YgJiYKKwl0ZXN0ICIkR0lUX0FVVEhPUl9OQU1FIiA9ICJOZXcgQXV0aG9yIiAmJgorCXRlc3QgIiRHSVRfQVVUSE9SX0VNQUlMIiA9ICJuZXdhdXRob3JAZXhhbXBsZS5jb20iCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJieSBhLnUudGhvciIgJiYKKwkoCisJCUdJVF9BVVRIT1JfTkFNRT0iTmV3IEF1dGhvciIgJiYKKwkJR0lUX0FVVEhPUl9FTUFJTD0ibmV3YXV0aG9yQGV4YW1wbGUuY29tIiAmJgorCQlleHBvcnQgR0lUX0FVVEhPUl9OQU1FIEdJVF9BVVRIT1JfRU1BSUwgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJieSBuZXcuYXV0aG9yIHZpYSBlbnYiICYmCisJCWdpdCBzaG93IC1zCisJKSAmJgorCWdpdCBjb21taXQgLS1hdXRob3I9Ik5ldyBBdXRob3IgPG5ld2F1dGhvckBleGFtcGxlLmNvbT4iIFwKKwkJLS1hbGxvdy1lbXB0eSAtbSAiYnkgbmV3LmF1dGhvciB2aWEgY29tbWFuZCBsaW5lIiAmJgorCWdpdCBzaG93IC1zCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwNC1jb21taXQtbXNnLWhvb2suc2ggYi90L3Q3NTA0LWNvbW1pdC1tc2ctaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZjUzZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwNC1jb21taXQtbXNnLWhvb2suc2gKQEAgLTAsMCArMSwyMjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb21taXQtbXNnIGhvb2snCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vIGhvb2snICcKKworCWVjaG8gImZvbyIgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QiCisKKycKKworIyBzZXQgdXAgZmFrZSBlZGl0b3IgZm9yIGludGVyYWN0aXZlIGVkaXRpbmcKK2NhdCA+IGZha2UtZWRpdG9yIDw8J0VPRicKKyMhL2Jpbi9zaAorY3AgRkFLRV9NU0cgIiQxIgorZXhpdCAwCitFT0YKK2NobW9kICt4IGZha2UtZWRpdG9yCisKKyMjIE5vdCB1c2luZyB0ZXN0X3NldF9lZGl0b3IgaGVyZSBzbyB3ZSBjYW4gZWFzaWx5IGVuc3VyZSB0aGUgZWRpdG9yIHZhcmlhYmxlCisjIyBpcyBvbmx5IHNldCBmb3IgdGhlIGVkaXRvciB0ZXN0cworRkFLRV9FRElUT1I9IiQocHdkKS9mYWtlLWVkaXRvciIKK2V4cG9ydCBGQUtFX0VESVRPUgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gIm1vcmUgZm9vIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAibW9yZSBmb28iID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggbm8gaG9vaycgJworCisJZWNobyAiYmFyIiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJiYXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBubyBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJtb3JlIGJhciIgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAibW9yZSBiYXIiID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQorCisnCisKKyMgbm93IGluc3RhbGwgaG9vayB0aGF0IGFsd2F5cyBzdWNjZWVkcworSE9PS0RJUj0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaG9va3MiCitIT09LPSIkSE9PS0RJUi9jb21taXQtbXNnIgorbWtkaXIgLXAgIiRIT09LRElSIgorY2F0ID4gIiRIT09LIiA8PEVPRgorIyEvYmluL3NoCitleGl0IDAKK0VPRgorY2htb2QgK3ggIiRIT09LIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIHN1Y2NlZWRpbmcgaG9vaycgJworCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIm1vcmUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBzdWNjZWVkaW5nIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gIm1vcmUgbW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gIm1vcmUgbW9yZSIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBzdWNjZWVkaW5nIGhvb2snICcKKworCWVjaG8gImV2ZW4gbW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gImV2ZW4gbW9yZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIHN1Y2NlZWRpbmcgaG9vayAoZWRpdG9yKScgJworCisJZWNobyAiZXZlbiBtb3JlIG1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJldmVuIG1vcmUgbW9yZSIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5CisKKycKKworIyBub3cgYSBob29rIHRoYXQgZmFpbHMKK2NhdCA+ICIkSE9PSyIgPDxFT0YKKyMhL2Jpbi9zaAorZXhpdCAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGhvb2snICcKKworCWVjaG8gImFub3RoZXIiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tICJhbm90aGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJtb3JlIGFub3RoZXIiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJtb3JlIGFub3RoZXIiID4gRkFLRV9NU0cgJiYKKwkhIChHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIGZhaWxpbmcgaG9vaycgJworCisJZWNobyAic3R1ZmYiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJzdHVmZiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIGZhaWxpbmcgaG9vayAoZWRpdG9yKScgJworCisJZWNobyAibW9yZSBzdHVmZiIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gIm1vcmUgc3R1ZmYiID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQorCisnCisKK2NobW9kIC14ICIkSE9PSyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2snICcKKworCWVjaG8gImNvbnRlbnQiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJjb250ZW50IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gImNvbnRlbnQgYWdhaW4iID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJjb250ZW50IGFnYWluIiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLW0gImNvbnRlbnQgYWdhaW4iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJy0tbm8tdmVyaWZ5IHdpdGggbm9uLWV4ZWN1dGFibGUgaG9vaycgJworCisJZWNobyAibW9yZSBjb250ZW50IiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAibW9yZSBjb250ZW50IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICctLW5vLXZlcmlmeSB3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gImV2ZW4gbW9yZSBjb250ZW50IiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAiZXZlbiBtb3JlIGNvbnRlbnQiID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQorCisnCisKKyMgbm93IGEgaG9vayB0aGF0IGVkaXRzIHRoZSBjb21taXQgbWVzc2FnZQorY2F0ID4gIiRIT09LIiA8PCdFT0YnCisjIS9iaW4vc2gKK2VjaG8gIm5ldyBtZXNzYWdlIiA+ICIkMSIKK2V4aXQgMAorRU9GCitjaG1vZCAreCAiJEhPT0siCisKK2NvbW1pdF9tc2dfaXMgKCkgeworCXRlc3QgImBnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyViIC0xYCIgPSAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvb2sgZWRpdHMgY29tbWl0IG1lc3NhZ2UnICcKKworCWVjaG8gImFkZGl0aW9uYWwiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRpdGlvbmFsIiAmJgorCWNvbW1pdF9tc2dfaXMgIm5ldyBtZXNzYWdlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvb2sgZWRpdHMgY29tbWl0IG1lc3NhZ2UgKGVkaXRvciknICcKKworCWVjaG8gImFkZGl0aW9uYWwgY29udGVudCIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gImFkZGl0aW9uYWwgY29udGVudCIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0ICYmCisJY29tbWl0X21zZ19pcyAibmV3IG1lc3NhZ2UiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiaG9vayBkb2Vzbid0IGVkaXQgY29tbWl0IG1lc3NhZ2UiICcKKworCWVjaG8gInBsdXMiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJwbHVzIiAmJgorCWNvbW1pdF9tc2dfaXMgInBsdXMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiaG9vayBkb2Vzbid0IGVkaXQgY29tbWl0IG1lc3NhZ2UgKGVkaXRvcikiICcKKworCWVjaG8gIm1vcmUgcGx1cyIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gIm1vcmUgcGx1cyIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5ICYmCisJY29tbWl0X21zZ19pcyAibW9yZSBwbHVzIgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwNS1wcmVwYXJlLWNvbW1pdC1tc2ctaG9vay5zaCBiL3QvdDc1MDUtcHJlcGFyZS1jb21taXQtbXNnLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWI0YjY5NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDUtcHJlcGFyZS1jb21taXQtbXNnLWhvb2suc2gKQEAgLTAsMCArMSwxNzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwcmVwYXJlLWNvbW1pdC1tc2cgaG9vaycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm8gaG9vaycgJworCisJZWNobyAiZm9vIiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCIKKworJworCisjIHNldCB1cCBmYWtlIGVkaXRvciBmb3IgaW50ZXJhY3RpdmUgZWRpdGluZworY2F0ID4gZmFrZS1lZGl0b3IgPDwnRU9GJworIyEvYmluL3NoCitleGl0IDAKK0VPRgorY2htb2QgK3ggZmFrZS1lZGl0b3IKKworIyMgTm90IHVzaW5nIHRlc3Rfc2V0X2VkaXRvciBoZXJlIHNvIHdlIGNhbiBlYXNpbHkgZW5zdXJlIHRoZSBlZGl0b3IgdmFyaWFibGUKKyMjIGlzIG9ubHkgc2V0IGZvciB0aGUgZWRpdG9yIHRlc3RzCitGQUtFX0VESVRPUj0iJChwd2QpL2Zha2UtZWRpdG9yIgorZXhwb3J0IEZBS0VfRURJVE9SCisKKyMgbm93IGluc3RhbGwgaG9vayB0aGF0IGFsd2F5cyBzdWNjZWVkcyBhbmQgYWRkcyBhIG1lc3NhZ2UKK0hPT0tESVI9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2hvb2tzIgorSE9PSz0iJEhPT0tESVIvcHJlcGFyZS1jb21taXQtbXNnIgorbWtkaXIgLXAgIiRIT09LRElSIgorZWNobyAiIyEkU0hFTExfUEFUSCIgPiAiJEhPT0siCitjYXQgPj4gIiRIT09LIiA8PCdFT0YnCisKK2lmIHRlc3QgIiQyIiA9IGNvbW1pdDsgdGhlbgorICBzb3VyY2U9JChnaXQgcmV2LXBhcnNlICIkMyIpCitlbHNlCisgIHNvdXJjZT0kezItZGVmYXVsdH0KK2ZpCitpZiB0ZXN0ICIkR0lUX0VESVRPUiIgPSA6OyB0aGVuCisgIHNlZCAtZSAiMXMvLiovJHNvdXJjZSAobm8gZWRpdG9yKS8iICIkMSIgPiBtc2cudG1wCitlbHNlCisgIHNlZCAtZSAiMXMvLiovJHNvdXJjZS8iICIkMSIgPiBtc2cudG1wCitmaQorbXYgbXNnLnRtcCAiJDEiCitleGl0IDAKK0VPRgorY2htb2QgK3ggIiRIT09LIgorCitlY2hvIGR1bW15IHRlbXBsYXRlID4gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL3RlbXBsYXRlIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC1tKScgJworCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIm1vcmUiICYmCisJdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzYCIgPSAibWVzc2FnZSAobm8gZWRpdG9yKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC1tIGVkaXRvciknICcKKworCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtZSAtbSAibW9yZSBtb3JlIiAmJgorCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gbWVzc2FnZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLXQpJyAnCisKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtdCAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvdGVtcGxhdGUiICYmCisJdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzYCIgPSB0ZW1wbGF0ZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLUYpJyAnCisKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJKGVjaG8gbW9yZSB8IGdpdCBjb21taXQgLUYgLSkgJiYKKwl0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXNgIiA9ICJtZXNzYWdlIChubyBlZGl0b3IpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLUYgZWRpdG9yKScgJworCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCShlY2hvIG1vcmUgbW9yZSB8IEdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC1lIC1GIC0pICYmCisJdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzYCIgPSBtZXNzYWdlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rICgtQyknICcKKworCWhlYWQ9YGdpdCByZXYtcGFyc2UgSEVBRGAgJiYKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtQyAkaGVhZCAmJgorCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gIiRoZWFkIChubyBlZGl0b3IpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoZWRpdG9yKScgJworCisJZWNobyAibW9yZSBtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgJiYKKwl0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXNgIiA9IGRlZmF1bHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC0tYW1lbmQpJyAnCisKKwloZWFkPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwl0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXNgIiA9ICIkaGVhZCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC1jKScgJworCisJaGVhZD1gZ2l0IHJldi1wYXJzZSBIRUFEYCAmJgorCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtYyAkaGVhZCAmJgorCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gIiRoZWFkIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAobWVyZ2UpJyAnCisKKwloZWFkPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIEhFQURAezF9ICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCWdpdCBtZXJnZSBvdGhlciAmJgorCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gbWVyZ2UKKycKKworY2F0ID4gIiRIT09LIiA8PCdFT0YnCisjIS9iaW4vc2gKK2V4aXQgMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rJyAnCisKKwloZWFkPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCSEgR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLWMgJGhlYWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGZhaWxpbmcgaG9vayAoLS1uby12ZXJpZnkpJyAnCisKKwloZWFkPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCSEgR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1uby12ZXJpZnkgLWMgJGhlYWQKKworJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwNi1zdGF0dXMtc3VibW9kdWxlLnNoIGIvdC90NzUwNi1zdGF0dXMtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzMWIzNGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTA2LXN0YXR1cy1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwyNzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3RhdHVzIGZvciBzdWJtb2R1bGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2NyZWF0ZV9yZXBvX3dpdGhfY29tbWl0ICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkMSIgJiYKKwkoCisJCWNkICIkMSIgJiYKKwkJOiA+YmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIiBBZGQgYmFyIiAmJgorCQk6ID5mb28gJiYKKwkJZ2l0IGFkZCBmb28gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiIEFkZCBmb28iCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY3JlYXRlX3JlcG9fd2l0aF9jb21taXQgc3ViICYmCisJZWNobyBvdXRwdXQgPiAuZ2l0aWdub3JlICYmCisJZ2l0IGFkZCBzdWIgLmdpdGlnbm9yZSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBzdWJtb2R1bGUgc3ViIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgY2xlYW4nICcKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3RoaW5nIHRvIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWRyeS1ydW4gLWEgY2xlYW4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1biAtYSA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibm90aGluZyB0byBjb21taXQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBtb2RpZmllZCBmaWxlIGluIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCkgJiYKKwllY2hvICJjaGFuZ2VkIiA+c3ViL2ZvbyAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobW9kaWZpZWQgY29udGVudCkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBtb2RpZmllZCBmaWxlIGluIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCkgJiYKKwllY2hvICJjaGFuZ2VkIiA+c3ViL2ZvbyAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBmaWxlIGluIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibW9kaWZpZWQ6ICAgc3ViIChtb2RpZmllZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNvbnRlbnQiID5zdWIvbmV3LWZpbGUgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKHVudHJhY2tlZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtdW5vIHdpdGggdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlJyAnCisJZ2l0IHN0YXR1cyAtdW5vID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJebm90aGluZyB0byBjb21taXQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgYW5kIHVudHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobW9kaWZpZWQgY29udGVudCwgdW50cmFja2VkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgYW5kIHVudHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBtb2RpZmllZCBmaWxlIGluIG1vZGlmaWVkIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCkgJiYKKwlybSBzdWIvbmV3LWZpbGUgJiYKKwkoY2Qgc3ViICYmIGVjaG8gIm5leHQgY2hhbmdlIiA+Zm9vICYmIGdpdCBjb21taXQgLW0gIm5leHQgY2hhbmdlIiBmb28pICYmCisJZWNobyAiY2hhbmdlZCIgPnN1Yi9mb28gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKG5ldyBjb21taXRzLCBtb2RpZmllZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1vZGlmaWVkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNoYW5nZWQiID5zdWIvZm9vICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKG5ldyBjb21taXRzLCBtb2RpZmllZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggdW50cmFja2VkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNvbnRlbnQiID5zdWIvbmV3LWZpbGUgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKG5ldyBjb21taXRzLCB1bnRyYWNrZWQgY29udGVudCkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgYW5kIHVudHJhY2tlZCBmaWxlIGluIG1vZGlmaWVkIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobmV3IGNvbW1pdHMsIG1vZGlmaWVkIGNvbnRlbnQsIHVudHJhY2tlZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGFuZCB1bnRyYWNrZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWVjaG8gImNvbnRlbnQiID5zdWIvbmV3LWZpbGUgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLmdpdCBmaWxlIGZvciBzdWInICcKKwkoY2Qgc3ViICYmCisJIHJtIC1mIG5ldy1maWxlCisJIFJFQUw9IiQocHdkKS8uLi8ucmVhbCIgJiYKKwkgbXYgLmdpdCAiJFJFQUwiCisJIGVjaG8gImdpdGRpcjogJFJFQUwiID4uZ2l0KSAmJgorCSBlY2hvIC5yZWFsID4+LmdpdGlnbm9yZSAmJgorCSBnaXQgY29tbWl0IC1tICJhZGRlZCAucmVhbCB0byAuZ2l0aWdub3JlIiAuZ2l0aWdub3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlIHdpdGggLmdpdCBmaWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKG5ldyBjb21taXRzLCBtb2RpZmllZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHN1Ym1vZHVsZSBjb250ZW50cycgJworCXJtIC1yZiBzdWIvKiBzdWIvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgY2xlYW4gKGVtcHR5IHN1Ym1vZHVsZSBkaXIpJyAnCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibm90aGluZyB0byBjb21taXQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLWEgY2xlYW4gKGVtcHR5IHN1Ym1vZHVsZSBkaXIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWRyeS1ydW4gLWEgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdGhpbmcgdG8gY29tbWl0IiBvdXRwdXQKKycKKworY2F0ID5zdGF0dXNfZXhwZWN0IDw8XEVPRgorQUEgLmdpdG1vZHVsZXMKK0EgIHN1YjEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBtZXJnZSBjb25mbGljdCBpbiAuZ2l0bW9kdWxlcycgJworCWdpdCBjbG9uZSAuIHN1cGVyICYmCisJdGVzdF9jcmVhdGVfcmVwb193aXRoX2NvbW1pdCBzdWIxICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9jcmVhdGVfcmVwb193aXRoX2NvbW1pdCBzdWIyICYmCisJKAorCQljZCBzdXBlciAmJgorCQlwcmV2PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYWRkX3N1YjEgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3ViMSAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3ViMSIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGFkZF9zdWIyICRwcmV2ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1YjIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHN1YjIiICYmCisJCWdpdCBjaGVja291dCAtYiBtZXJnZV9jb25mbGljdF9naXRtb2R1bGVzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBhZGRfc3ViMSAmJgorCQlnaXQgc3RhdHVzIC1zID4uLi9zdGF0dXNfYWN0dWFsIDI+JjEKKwkpICYmCisJdGVzdF9jbXAgc3RhdHVzX2FjdHVhbCBzdGF0dXNfZXhwZWN0CisnCisKK3NoYTFfbWVyZ2Vfc3ViMT0kKGNkIHN1YjEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc2hhMV9tZXJnZV9zdWIyPSQoY2Qgc3ViMiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzaG9ydF9zaGExX21lcmdlX3N1YjE9JChjZCBzdWIxICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorc2hvcnRfc2hhMV9tZXJnZV9zdWIyPSQoY2Qgc3ViMiAmJiBnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkKK2NhdCA+ZGlmZl9leHBlY3QgPDxcRU9GCitkaWZmIC0tY2MgLmdpdG1vZHVsZXMKK2luZGV4IGJhZGFhNGMsNDRmOTk5YS4uMDAwMDAwMAorLS0tIGEvLmdpdG1vZHVsZXMKKysrKyBiLy5naXRtb2R1bGVzCitAQEAgLTEsMyAtMSwzICsxLDkgQEBACisrKzw8PDw8PDwgSEVBRAorICtbc3VibW9kdWxlICJzdWIyIl0KKyArCXBhdGggPSBzdWIyCisgKwl1cmwgPSAuLi9zdWIyCisrKz09PT09PT0KKysgW3N1Ym1vZHVsZSAic3ViMSJdCisrIAlwYXRoID0gc3ViMQorKyAJdXJsID0gLi4vc3ViMQorKys+Pj4+Pj4+IGFkZF9zdWIxCitFT0YKKworY2F0ID5kaWZmX3N1Ym1vZHVsZV9leHBlY3QgPDxcRU9GCitkaWZmIC0tY2MgLmdpdG1vZHVsZXMKK2luZGV4IGJhZGFhNGMsNDRmOTk5YS4uMDAwMDAwMAorLS0tIGEvLmdpdG1vZHVsZXMKKysrKyBiLy5naXRtb2R1bGVzCitAQEAgLTEsMyAtMSwzICsxLDkgQEBACisrKzw8PDw8PDwgSEVBRAorICtbc3VibW9kdWxlICJzdWIyIl0KKyArCXBhdGggPSBzdWIyCisgKwl1cmwgPSAuLi9zdWIyCisrKz09PT09PT0KKysgW3N1Ym1vZHVsZSAic3ViMSJdCisrIAlwYXRoID0gc3ViMQorKyAJdXJsID0gLi4vc3ViMQorKys+Pj4+Pj4+IGFkZF9zdWIxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiB3aXRoIG1lcmdlIGNvbmZsaWN0IGluIC5naXRtb2R1bGVzJyAnCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgZGlmZiA+Li4vZGlmZl9hY3R1YWwgMj4mMQorCSkgJiYKKwl0ZXN0X2NtcCBkaWZmX2FjdHVhbCBkaWZmX2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tc3VibW9kdWxlIHdpdGggbWVyZ2UgY29uZmxpY3QgaW4gLmdpdG1vZHVsZXMnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBkaWZmIC0tc3VibW9kdWxlID4uLi9kaWZmX3N1Ym1vZHVsZV9hY3R1YWwgMj4mMQorCSkgJiYKKwl0ZXN0X2NtcCBkaWZmX3N1Ym1vZHVsZV9hY3R1YWwgZGlmZl9zdWJtb2R1bGVfZXhwZWN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwNy1jb21taXQtdmVyYm9zZS5zaCBiL3QvdDc1MDctY29tbWl0LXZlcmJvc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGE1YmQzYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDctY29tbWl0LXZlcmJvc2Uuc2gKQEAgLTAsMCArMSw3MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3ZlcmJvc2UgY29tbWl0IHRlbXBsYXRlJworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+Y2hlY2stZm9yLWRpZmYgPDxFT0YKKyMhJFNIRUxMX1BBVEgKK2V4ZWMgZ3JlcCAnXmRpZmYgLS1naXQnICJcJDEiCitFT0YKK2NobW9kICt4IGNoZWNrLWZvci1kaWZmCit0ZXN0X3NldF9lZGl0b3IgIiRQV0QvY2hlY2stZm9yLWRpZmYiCisKK2NhdCA+bWVzc2FnZSA8PCdFT0YnCitzdWJqZWN0CisKK2JvZHkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLUYgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsIGNvbW1pdCBzaG93cyB2ZXJib3NlIGRpZmYnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLXYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kIGNvbW1pdCcgJworCWVjaG8gY29udGVudCBtb2RpZmllZCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLUYgbWVzc2FnZQorJworCitjaGVja19tZXNzYWdlKCkgeworCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzJW4lbiViID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCAiJDEiIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIGRpZmYgaXMgc3RyaXBwZWQgb3V0JyAnCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC12ICYmCisJY2hlY2tfbWVzc2FnZSBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2UgZGlmZiBpcyBzdHJpcHBlZCBvdXQgKG1uZW1vbmljcHJlZml4KScgJworCWdpdCBjb25maWcgZGlmZi5tbmVtb25pY3ByZWZpeCB0cnVlICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC12ICYmCisJY2hlY2tfbWVzc2FnZSBtZXNzYWdlCisnCisKK2NhdCA+ZGlmZiA8PCdFT0YnCitUaGlzIGlzIGFuIGV4YW1wbGUgY29tbWl0IG1lc3NhZ2UgdGhhdCBjb250YWlucyBhIGRpZmYuCisKK2RpZmYgLS1naXQgYy9maWxlIGkvZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmY5NWMxMWQKKy0tLSAvZGV2L251bGwKKysrKyBpL2ZpbGUKK0BAIC0wLDAgKzEgQEAKKyt0aGlzIGlzIHNvbWUgY29udGVudAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgaW4gbWVzc2FnZSBpcyByZXRhaW5lZCB3aXRob3V0IC12JyAnCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1GIGRpZmYgJiYKKwljaGVja19tZXNzYWdlIGRpZmYKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZGlmZiBpbiBtZXNzYWdlIGlzIHJldGFpbmVkIHdpdGggLXYnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLUYgZGlmZiAtdiAmJgorCWNoZWNrX21lc3NhZ2UgZGlmZgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDgtc3RhdHVzLnNoIGIvdC90NzUwOC1zdGF0dXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTMxM2VmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDgtc3RhdHVzLnNoCkBAIC0wLDAgKzEsMTMwMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdGF0dXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLWggaW4gYnJva2VuIHJlcG9zaXRvcnknICcKKwlta2RpciBicm9rZW4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBicm9rZW4iICYmCisJKAorCQljZCBicm9rZW4gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAiW3N0YXR1c10gc2hvd3VudHJhY2tlZGZpbGVzID0gQ09SUlVQVCIgPj4uZ2l0L2NvbmZpZyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgc3RhdHVzIC1oID51c2FnZSAyPiYxCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlIiBicm9rZW4vdXNhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC1oIGluIGJyb2tlbiByZXBvc2l0b3J5JyAnCisJbWtkaXIgYnJva2VuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgYnJva2VuIiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIltzdGF0dXNdIHNob3d1bnRyYWNrZWRmaWxlcyA9IENPUlJVUFQiID4+LmdpdC9jb25maWcgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGNvbW1pdCAtaCA+dXNhZ2UgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZSIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJOiA+dHJhY2tlZCAmJgorCTogPm1vZGlmaWVkICYmCisJbWtkaXIgZGlyMSAmJgorCTogPmRpcjEvdHJhY2tlZCAmJgorCTogPmRpcjEvbW9kaWZpZWQgJiYKKwlta2RpciBkaXIyICYmCisJOiA+ZGlyMS90cmFja2VkICYmCisJOiA+ZGlyMS9tb2RpZmllZCAmJgorCWdpdCBhZGQgLiAmJgorCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwk6ID51bnRyYWNrZWQgJiYKKwk6ID5kaXIxL3VudHJhY2tlZCAmJgorCTogPmRpcjIvdW50cmFja2VkICYmCisJZWNobyAxID5kaXIxL21vZGlmaWVkICYmCisJZWNobyAyID5kaXIyL21vZGlmaWVkICYmCisJZWNobyAzID5kaXIyL2FkZGVkICYmCisJZ2l0IGFkZCBkaXIyL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAoMSknICcKKwl0ZXN0X2kxOG5ncmVwICJ1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+XC5cLlwuXCIgdG8gdW5zdGFnZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLWNvbHVtbicgJworCUNPTFVNTlM9NTAgZ2l0IHN0YXR1cyAtLWNvbHVtbj0iY29sdW1uIGRlbnNlIiA+b3V0cHV0ICYmCisJY2F0ID5leHBlY3QgPDxcRU9GICYmCisjIE9uIGJyYW5jaCBtYXN0ZXIKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIworIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCisjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMgICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisjCisjCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKyMKKyMgVW50cmFja2VkIGZpbGVzOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjCisjCWRpcjEvdW50cmFja2VkIGRpcjIvdW50cmFja2VkIHVudHJhY2tlZAorIwlkaXIyL21vZGlmaWVkICBvdXRwdXQKK0VPRgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIyBPbiBicmFuY2ggbWFzdGVyCisjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIyAgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyMKKyMJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorIworIyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjICAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorIworIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisjCisjIFVudHJhY2tlZCBmaWxlczoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIworIwlkaXIxL3VudHJhY2tlZAorIwlkaXIyL21vZGlmaWVkCisjCWRpcjIvdW50cmFja2VkCisjCWV4cGVjdAorIwlvdXRwdXQKKyMJdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzICgyKScgJworCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIyBPbiBicmFuY2ggbWFzdGVyCisjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCisjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisjCisjIFVudHJhY2tlZCBmaWxlczoKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwlleHBlY3QKKyMJb3V0cHV0CisjCXVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAoYWR2aWNlLnN0YXR1c0hpbnRzIGZhbHNlKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNvbmZpZyAtLXVuc2V0IGFkdmljZS5zdGF0dXNIaW50cyIgJiYKKwlnaXQgY29uZmlnIGFkdmljZS5zdGF0dXNIaW50cyBmYWxzZSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IGV4cGVjdAorPz8gb3V0cHV0Cis/PyB1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMnICcKKworCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBnaXRpZ25vcmUnICcKKwl7CisJCWVjaG8gIi5naXRpZ25vcmUiICYmCisJCWVjaG8gImV4cGVjdCIgJiYKKwkJZWNobyAib3V0cHV0IiAmJgorCQllY2hvICJ1bnRyYWNrZWQiCisJfSA+LmdpdGlnbm9yZSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBNIGRpcjEvbW9kaWZpZWQKKwlBICBkaXIyL2FkZGVkCisJPz8gZGlyMi9tb2RpZmllZAorCUVPRgorCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBkaXIxL21vZGlmaWVkCisJQSAgZGlyMi9hZGRlZAorCT8/IGRpcjIvbW9kaWZpZWQKKwkhISAuZ2l0aWdub3JlCisJISEgZGlyMS91bnRyYWNrZWQKKwkhISBkaXIyL3VudHJhY2tlZAorCSEhIGV4cGVjdAorCSEhIG91dHB1dAorCSEhIHVudHJhY2tlZAorCUVPRgorCWdpdCBzdGF0dXMgLXMgLS1pZ25vcmVkID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIyBPbiBicmFuY2ggbWFzdGVyCisJIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKwkjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCSMKKwkjCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKwkjCisJIyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKwkjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCSMgICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJIworCSMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCSMKKwkjIFVudHJhY2tlZCBmaWxlczoKKwkjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwkjCisJIwlkaXIyL21vZGlmaWVkCisJIyBJZ25vcmVkIGZpbGVzOgorCSMgICAodXNlICJnaXQgYWRkIC1mIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCSMKKwkjCS5naXRpZ25vcmUKKwkjCWRpcjEvdW50cmFja2VkCisJIwlkaXIyL3VudHJhY2tlZAorCSMJZXhwZWN0CisJIwlvdXRwdXQKKwkjCXVudHJhY2tlZAorCUVPRgorCWdpdCBzdGF0dXMgLS1pZ25vcmVkID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBnaXRpZ25vcmUgKG5vdGhpbmcgdW50cmFja2VkKScgJworCXsKKwkJZWNobyAiLmdpdGlnbm9yZSIgJiYKKwkJZWNobyAiZXhwZWN0IiAmJgorCQllY2hvICJkaXIyL21vZGlmaWVkIiAmJgorCQllY2hvICJvdXRwdXQiICYmCisJCWVjaG8gInVudHJhY2tlZCIKKwl9ID4uZ2l0aWdub3JlICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZGlyMS9tb2RpZmllZAorCUEgIGRpcjIvYWRkZWQKKwlFT0YKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZGlyMS9tb2RpZmllZAorCUEgIGRpcjIvYWRkZWQKKwkhISAuZ2l0aWdub3JlCisJISEgZGlyMS91bnRyYWNrZWQKKwkhISBkaXIyL21vZGlmaWVkCisJISEgZGlyMi91bnRyYWNrZWQKKwkhISBleHBlY3QKKwkhISBvdXRwdXQKKwkhISB1bnRyYWNrZWQKKwlFT0YKKwlnaXQgc3RhdHVzIC1zIC0taWdub3JlZCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSMgT24gYnJhbmNoIG1hc3RlcgorCSMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisJIyAgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwkjCisJIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisJIworCSMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisJIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwkjICAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCSMKKwkjCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKwkjCisJIyBJZ25vcmVkIGZpbGVzOgorCSMgICAodXNlICJnaXQgYWRkIC1mIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCSMKKwkjCS5naXRpZ25vcmUKKwkjCWRpcjEvdW50cmFja2VkCisJIwlkaXIyL21vZGlmaWVkCisJIwlkaXIyL3VudHJhY2tlZAorCSMJZXhwZWN0CisJIwlvdXRwdXQKKwkjCXVudHJhY2tlZAorCUVPRgorCWdpdCBzdGF0dXMgLS1pZ25vcmVkID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitybSAtZiAuZ2l0aWdub3JlCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIyMgbWFzdGVyCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IGV4cGVjdAorPz8gb3V0cHV0Cis/PyB1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLWInICcKKworCWdpdCBzdGF0dXMgLXMgLWIgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLXogLWInICcKKwl0ciAiXFxuIiBRIDxleHBlY3QgPmV4cGVjdC5xICYmCisJbXYgZXhwZWN0LnEgZXhwZWN0ICYmCisJZ2l0IHN0YXR1cyAtcyAteiAtYiA+b3V0cHV0ICYmCisJbnVsX3RvX3EgPG91dHB1dCA+b3V0cHV0LnEgJiYKKwltdiBvdXRwdXQucSBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpcjMnICcKKwlta2RpciBkaXIzICYmCisJOiA+ZGlyMy91bnRyYWNrZWQxICYmCisJOiA+ZGlyMy91bnRyYWNrZWQyCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisjIE9uIGJyYW5jaCBtYXN0ZXIKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIworIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCisjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMgICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisjCisjCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKyMKKyMgVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtdW5vJyAnCisJZ2l0IHN0YXR1cyAtdW5vID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgKHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMgbm8pJyAnCisJZ2l0IGNvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIG5vCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyIgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIyBPbiBicmFuY2ggbWFzdGVyCisjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCisjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisjCisjIFVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkCitFT0YKK2dpdCBjb25maWcgYWR2aWNlLnN0YXR1c0hpbnRzIGZhbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXVubyAoYWR2aWNlLnN0YXR1c0hpbnRzIGZhbHNlKScgJworCWdpdCBzdGF0dXMgLXVubyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKK2dpdCBjb25maWcgLS11bnNldCBhZHZpY2Uuc3RhdHVzSGludHMKKworY2F0ID5leHBlY3QgPDwgRU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAtdW5vJyAnCisJZ2l0IHN0YXR1cyAtcyAtdW5vID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAoc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcyBubyknICcKKwlnaXQgY29uZmlnIHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMgbm8KKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisjIE9uIGJyYW5jaCBtYXN0ZXIKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIworIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCisjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMgICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisjCisjCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKyMKKyMgVW50cmFja2VkIGZpbGVzOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjCisjCWRpcjEvdW50cmFja2VkCisjCWRpcjIvbW9kaWZpZWQKKyMJZGlyMi91bnRyYWNrZWQKKyMJZGlyMy8KKyMJZXhwZWN0CisjCW91dHB1dAorIwl1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC11bm9ybWFsJyAnCisJZ2l0IHN0YXR1cyAtdW5vcm1hbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIChzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIG5vcm1hbCknICcKKwlnaXQgY29uZmlnIHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMgbm9ybWFsCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyIgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyBkaXIzLworPz8gZXhwZWN0Cis/PyBvdXRwdXQKKz8/IHVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLXVub3JtYWwnICcKKwlnaXQgc3RhdHVzIC1zIC11bm9ybWFsID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAoc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcyBub3JtYWwpJyAnCisJZ2l0IGNvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIG5vcm1hbAorCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCisjCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKyMKKyMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwlkaXIzL3VudHJhY2tlZDEKKyMJZGlyMy91bnRyYWNrZWQyCisjCWV4cGVjdAorIwlvdXRwdXQKKyMJdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtdWFsbCcgJworCWdpdCBzdGF0dXMgLXVhbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAoc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcyBhbGwpJyAnCisJZ2l0IGNvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIGFsbAorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNvbmZpZyAtLXVuc2V0IHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMiICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVhcmRvd24gZGlyMycgJworCXJtIC1yZiBkaXIzCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IGV4cGVjdAorPz8gb3V0cHV0Cis/PyB1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIC11YWxsJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMKKwlnaXQgc3RhdHVzIC1zIC11YWxsID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgKHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMgYWxsKScgJworCWdpdCBjb25maWcgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyBhbGwKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwlybSAtcmYgZGlyMyAmJgorCWdpdCBjb25maWcgLS11bnNldCBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCisjCW5ldyBmaWxlOiAgIC4uL2RpcjIvYWRkZWQKKyMKKyMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMKKyMJbW9kaWZpZWQ6ICAgbW9kaWZpZWQKKyMKKyMgVW50cmFja2VkIGZpbGVzOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjCisjCXVudHJhY2tlZAorIwkuLi9kaXIyL21vZGlmaWVkCisjCS4uL2RpcjIvdW50cmFja2VkCisjCS4uL2V4cGVjdAorIwkuLi9vdXRwdXQKKyMJLi4vdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggcmVsYXRpdmUgcGF0aHMnICcKKwkoY2QgZGlyMSAmJiBnaXQgc3RhdHVzKSA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisgTSBtb2RpZmllZAorQSAgLi4vZGlyMi9hZGRlZAorPz8gdW50cmFja2VkCis/PyAuLi9kaXIyL21vZGlmaWVkCis/PyAuLi9kaXIyL3VudHJhY2tlZAorPz8gLi4vZXhwZWN0Cis/PyAuLi9vdXRwdXQKKz8/IC4uL3VudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgd2l0aCByZWxhdGl2ZSBwYXRocycgJworCisJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cyAtcykgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gZXhwZWN0Cis/PyBvdXRwdXQKKz8/IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLXBvcmNlbGFpbiBpZ25vcmVzIHJlbGF0aXZlIHBhdGhzIHNldHRpbmcnICcKKworCShjZCBkaXIxICYmIGdpdCBzdGF0dXMgLS1wb3JjZWxhaW4pID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdW5pcXVlIGNvbG9ycycgJworCisJZ2l0IGNvbmZpZyBzdGF0dXMuY29sb3IudW50cmFja2VkIGJsdWUgJiYKKwlnaXQgY29uZmlnIHN0YXR1cy5jb2xvci5icmFuY2ggZ3JlZW4KKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMgT24gYnJhbmNoIDxHUkVFTj5tYXN0ZXI8UkVTRVQ+CisjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIyAgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyMKKyMJPEdSRUVOPm5ldyBmaWxlOiAgIGRpcjIvYWRkZWQ8UkVTRVQ+CisjCisjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMgICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisjCisjCTxSRUQ+bW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZDxSRVNFVD4KKyMKKyMgVW50cmFja2VkIGZpbGVzOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjCisjCTxCTFVFPmRpcjEvdW50cmFja2VkPFJFU0VUPgorIwk8QkxVRT5kaXIyL21vZGlmaWVkPFJFU0VUPgorIwk8QkxVRT5kaXIyL3VudHJhY2tlZDxSRVNFVD4KKyMJPEJMVUU+ZXhwZWN0PFJFU0VUPgorIwk8QkxVRT5vdXRwdXQ8UkVTRVQ+CisjCTxCTFVFPnVudHJhY2tlZDxSRVNFVD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBjb2xvci51aScgJworCWdpdCBjb25maWcgY29sb3IudWkgYWx3YXlzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgY29sb3IudWkiICYmCisJZ2l0IHN0YXR1cyB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBjb2xvci5zdGF0dXMnICcKKwlnaXQgY29uZmlnIGNvbG9yLnN0YXR1cyBhbHdheXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS11bnNldCBjb2xvci5zdGF0dXMiICYmCisJZ2l0IHN0YXR1cyB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyA8UkVEPk08UkVTRVQ+IGRpcjEvbW9kaWZpZWQKKzxHUkVFTj5BPFJFU0VUPiAgZGlyMi9hZGRlZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjEvdW50cmFja2VkCis8QkxVRT4/PzxSRVNFVD4gZGlyMi9tb2RpZmllZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjIvdW50cmFja2VkCis8QkxVRT4/PzxSRVNFVD4gZXhwZWN0Cis8QkxVRT4/PzxSRVNFVD4gb3V0cHV0Cis8QkxVRT4/PzxSRVNFVD4gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHdpdGggY29sb3IudWknICcKKworCWdpdCBjb25maWcgY29sb3IudWkgYWx3YXlzICYmCisJZ2l0IHN0YXR1cyAtcyB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHdpdGggY29sb3Iuc3RhdHVzJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sb3IudWkgJiYKKwlnaXQgY29uZmlnIGNvbG9yLnN0YXR1cyBhbHdheXMgJiYKKwlnaXQgc3RhdHVzIC1zIHwgdGVzdF9kZWNvZGVfY29sb3IgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMjIDxHUkVFTj5tYXN0ZXI8UkVTRVQ+CisgPFJFRD5NPFJFU0VUPiBkaXIxL21vZGlmaWVkCis8R1JFRU4+QTxSRVNFVD4gIGRpcjIvYWRkZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIxL3VudHJhY2tlZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjIvbW9kaWZpZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIyL3VudHJhY2tlZAorPEJMVUU+Pz88UkVTRVQ+IGV4cGVjdAorPEJMVUU+Pz88UkVTRVQ+IG91dHB1dAorPEJMVUU+Pz88UkVTRVQ+IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAtYiB3aXRoIGNvbG9yLnN0YXR1cycgJworCisJZ2l0IHN0YXR1cyAtcyAtYiB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IGV4cGVjdAorPz8gb3V0cHV0Cis/PyB1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1wb3JjZWxhaW4gaWdub3JlcyBjb2xvci51aScgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbG9yLnN0YXR1cyAmJgorCWdpdCBjb25maWcgY29sb3IudWkgYWx3YXlzICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC0tcG9yY2VsYWluIGlnbm9yZXMgY29sb3Iuc3RhdHVzJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sb3IudWkgJiYKKwlnaXQgY29uZmlnIGNvbG9yLnN0YXR1cyBhbHdheXMgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgdGVzdF9kZWNvZGVfY29sb3IgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCisjIHJlY292ZXIgdW5jb25kaXRpb25hbGx5IGZyb20gY29sb3IgdGVzdHMKK2dpdCBjb25maWcgLS11bnNldCBjb2xvci5zdGF0dXMKK2dpdCBjb25maWcgLS11bnNldCBjb2xvci51aQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1wb3JjZWxhaW4gcmVzcGVjdHMgLWInICcKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLWIgPm91dHB1dCAmJgorCXsKKwkJZWNobyAiIyMgbWFzdGVyIiAmJgorCQljYXQgZXhwZWN0CisJfSA+dG1wICYmCisJbXYgdG1wIGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCisjCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKyMKKyMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwlleHBlY3QKKyMJb3V0cHV0CisjCXVudHJhY2tlZAorRU9GCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGhvdXQgcmVsYXRpdmUgcGF0aHMnICcKKworCWdpdCBjb25maWcgc3RhdHVzLnJlbGF0aXZlUGF0aHMgZmFsc2UgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS11bnNldCBzdGF0dXMucmVsYXRpdmVQYXRocyIgJiYKKwkoY2QgZGlyMSAmJiBnaXQgc3RhdHVzKSA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gZXhwZWN0Cis/PyBvdXRwdXQKKz8/IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyB3aXRob3V0IHJlbGF0aXZlIHBhdGhzJyAnCisKKwlnaXQgY29uZmlnIHN0YXR1cy5yZWxhdGl2ZVBhdGhzIGZhbHNlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgc3RhdHVzLnJlbGF0aXZlUGF0aHMiICYmCisJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cyAtcykgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPDxFT0YgPmV4cGVjdAorIyBPbiBicmFuY2ggbWFzdGVyCisjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIyAgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi8KKyMJZXhwZWN0CisjCW91dHB1dAorIwl1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJ5LXJ1biBvZiBwYXJ0aWFsIGNvbW1pdCBleGNsdWRpbmcgbmV3IGZpbGUgaW4gaW5kZXgnICcKKwlnaXQgY29tbWl0IC0tZHJ5LXJ1biBkaXIxL21vZGlmaWVkID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE0JZGlyMS9tb2RpZmllZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgcmVmcmVzaGVzIHRoZSBpbmRleCcgJworCXRvdWNoIGRpcjIvYWRkZWQgJiYKKwlnaXQgc3RhdHVzICYmCisJZ2l0IGRpZmYtZmlsZXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3RhdHVzIHN1Ym1vZHVsZSBzdW1tYXJ5JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzbSAmJiAoCisJCWNkIHNtICYmCisJCT5mb28gJiYKKwkJZ2l0IGFkZCBmb28gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIGZvbyIKKwkpICYmCisJZ2l0IGFkZCBzbQorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIyBPbiBicmFuY2ggbWFzdGVyCisjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIyAgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyMKKyMJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorIwluZXcgZmlsZTogICBzbQorIworIyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjICAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorIworIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisjCisjIFVudHJhY2tlZCBmaWxlczoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIworIwlkaXIxL3VudHJhY2tlZAorIwlkaXIyL21vZGlmaWVkCisjCWRpcjIvdW50cmFja2VkCisjCWV4cGVjdAorIwlvdXRwdXQKKyMJdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0JyAnCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworIyB3ZSBleHBlY3QgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHRlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1hbGwgZG9lcyBub3Qgc2hvdyBzdWJtb2R1bGUnICcKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKK0EgIHNtCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IGV4cGVjdAorPz8gb3V0cHV0Cis/PyB1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHN1Ym1vZHVsZSBzdW1tYXJ5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQnICcKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKKyMgd2UgZXhwZWN0IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyB0ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLS11bnRyYWNrZWQtZmlsZXM9YWxsIGRvZXMgbm90IHNob3cgc3VibW9kdWxlJyAnCisJZ2l0IHN0YXR1cyAtcyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworaGVhZD0kKGNkIHNtICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydD03IC0tdmVyaWZ5IEhFQUQpCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisjIE9uIGJyYW5jaCBtYXN0ZXIKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIworIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCW5ldyBmaWxlOiAgIHNtCisjCisjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMgICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisjCisjCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKyMKKyMgU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIworIyAqIHNtIDAwMDAwMDAuLi4kaGVhZCAoMSk6CisjICAgPiBBZGQgZm9vCisjCisjIFVudHJhY2tlZCBmaWxlczoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIworIwlkaXIxL3VudHJhY2tlZAorIwlkaXIyL21vZGlmaWVkCisjCWRpcjIvdW50cmFja2VkCisjCWV4cGVjdAorIwlvdXRwdXQKKyMJdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeScgJworCWdpdCBjb25maWcgc3RhdHVzLnN1Ym1vZHVsZXN1bW1hcnkgMTAgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorQSAgc20KKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gZXhwZWN0Cis/PyBvdXRwdXQKKz8/IHVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgc3VibW9kdWxlIHN1bW1hcnknICcKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisjIE9uIGJyYW5jaCBtYXN0ZXIKKyMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwlleHBlY3QKKyMJb3V0cHV0CisjCXVudHJhY2tlZAorbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHN1Ym1vZHVsZSBzdW1tYXJ5IChjbGVhbiBzdWJtb2R1bGUpOiBjb21taXQnICcKKwlnaXQgY29tbWl0IC1tICJjb21taXQgc3VibW9kdWxlIiAmJgorCWdpdCBjb25maWcgc3RhdHVzLnN1Ym1vZHVsZXN1bW1hcnkgMTAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1biA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyBleHBlY3QKKz8/IG91dHB1dAorPz8gdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyBzdWJtb2R1bGUgc3VtbWFyeSAoY2xlYW4gc3VibW9kdWxlKScgJworCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC16IGltcGxpZXMgcG9yY2VsYWluJyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiB8CisJIiRQRVJMX1BBVEgiIC1wZSAicy9cMDEyL1wwMDAvZyIgPmV4cGVjdCAmJgorCWdpdCBzdGF0dXMgLXogPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRF4xIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyMKKyMJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorIwluZXcgZmlsZTogICBzbQorIworIyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjICAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorIworIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisjCisjIFN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMKKyMgKiBzbSAwMDAwMDAwLi4uJGhlYWQgKDEpOgorIyAgID4gQWRkIGZvbworIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwlleHBlY3QKKyMJb3V0cHV0CisjCXVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1kcnktcnVuIHN1Ym1vZHVsZSBzdW1tYXJ5ICgtLWFtZW5kKScgJworCWdpdCBjb25maWcgc3RhdHVzLnN1Ym1vZHVsZXN1bW1hcnkgMTAgJiYKKwlnaXQgY29tbWl0IC0tZHJ5LXJ1biAtLWFtZW5kID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ3N0YXR1cyBzdWNjZWVkcyBpbiBhIHJlYWQtb25seSByZXBvc2l0b3J5JyAnCisJKAorCQljaG1vZCBhLXcgLmdpdCAmJgorCQkjIG1ha2UgZGlyMS90cmFja2VkIHN0YXQtZGlydHkKKwkJPmRpcjEvdHJhY2tlZDEgJiYgbXYgLWYgZGlyMS90cmFja2VkMSBkaXIxL3RyYWNrZWQgJiYKKwkJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJCSEgZ3JlcCBkaXIxL3RyYWNrZWQgb3V0cHV0ICYmCisJCSMgbWFrZSBzdXJlICJzdGF0dXMiIHN1Y2NlZWRlZCB3aXRob3V0IHdyaXRpbmcgaW5kZXggb3V0CisJCWdpdCBkaWZmLWZpbGVzIHwgZ3JlcCBkaXIxL3RyYWNrZWQKKwkpCisJc3RhdHVzPSQ/CisJY2htb2QgNzc1IC5naXQKKwkoZXhpdCAkc3RhdHVzKQorJworCisoY2Qgc20gJiYgZWNobyA+IGJhciAmJiBnaXQgYWRkIGJhciAmJiBnaXQgY29tbWl0IC1xIC1tICdBZGQgYmFyJykgJiYgZ2l0IGFkZCBzbQorbmV3X2hlYWQ9JChjZCBzbSAmJiBnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9NyAtLXZlcmlmeSBIRUFEKQordG91Y2ggLmdpdG1vZHVsZXMKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIyBPbiBicmFuY2ggbWFzdGVyCisjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIyAgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyMKKyMJbW9kaWZpZWQ6ICAgc20KKyMKKyMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjCisjICogc20gJGhlYWQuLi4kbmV3X2hlYWQgKDEpOgorIyAgID4gQWRkIGJhcgorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJLmdpdG1vZHVsZXMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwlleHBlY3QKKyMJb3V0cHV0CisjCXVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIHVudHJhY2tlZCBjb250ZW50JyAnCisJZWNobyBtb2RpZmllZCAgc20vdW50cmFja2VkICYmCisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdG1vZHVsZXMgaWdub3JlPXVudHJhY2tlZCBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCB1bnRyYWNrZWQgY29udGVudCcgJworCWdpdCBjb25maWcgZGlmZi5pZ25vcmVTdWJtb2R1bGVzIGRpcnR5ICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSB1bnRyYWNrZWQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi5pZ25vcmVTdWJtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXQvY29uZmlnIGlnbm9yZT11bnRyYWNrZWQgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggdW50cmFja2VkIGNvbnRlbnQnICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgdW50cmFja2VkICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCB1bnRyYWNrZWQgY29udGVudCcgJworCWdpdCBzdGF0dXMgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdG1vZHVsZXMgaWdub3JlPWRpcnR5IHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIHVudHJhY2tlZCBjb250ZW50JyAnCisJZ2l0IGNvbmZpZyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgZGlydHkgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi5pZ25vcmVTdWJtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXQvY29uZmlnIGlnbm9yZT1kaXJ0eSBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCB1bnRyYWNrZWQgY29udGVudCcgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIG1vZGlmaWVkIGNvbnRlbnQnICcKKwllY2hvIG1vZGlmaWVkID5zbS9mb28gJiYKKwlnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRtb2R1bGVzIGlnbm9yZT1kaXJ0eSBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCBtb2RpZmllZCBjb250ZW50JyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdC9jb25maWcgaWdub3JlPWRpcnR5IHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIG1vZGlmaWVkIGNvbnRlbnQnICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIyBPbiBicmFuY2ggbWFzdGVyCisjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIyAgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyMKKyMJbW9kaWZpZWQ6ICAgc20KKyMKKyMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMgICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpCisjCisjCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKyMJbW9kaWZpZWQ6ICAgc20gKG1vZGlmaWVkIGNvbnRlbnQpCisjCisjIFN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMKKyMgKiBzbSAkaGVhZC4uLiRuZXdfaGVhZCAoMSk6CisjICAgPiBBZGQgYmFyCisjCisjIFVudHJhY2tlZCBmaWxlczoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIworIwkuZ2l0bW9kdWxlcworIwlkaXIxL3VudHJhY2tlZAorIwlkaXIyL21vZGlmaWVkCisjCWRpcjIvdW50cmFja2VkCisjCWV4cGVjdAorIwlvdXRwdXQKKyMJdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgZG9lc24ndCBzdXBwcmVzcyBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgY29udGVudCIgJworCWdpdCBzdGF0dXMgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgPiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIuZ2l0bW9kdWxlcyBpZ25vcmU9dW50cmFja2VkIGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlcyB3aXRoIG1vZGlmaWVkIGNvbnRlbnQiICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSB1bnRyYWNrZWQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLmdpdC9jb25maWcgaWdub3JlPXVudHJhY2tlZCBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZXMgd2l0aCBtb2RpZmllZCBjb250ZW50IiAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCitoZWFkMj0kKGNkIHNtICYmIGdpdCBjb21taXQgLXEgLW0gIjJuZCBjb21taXQiIGZvbyAmJiBnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9NyAtLXZlcmlmeSBIRUFEKQorCitjYXQgPiBleHBlY3QgPDwgRU9GCisjIE9uIGJyYW5jaCBtYXN0ZXIKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIworIwltb2RpZmllZDogICBzbQorIworIyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjICAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorIworIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisjCW1vZGlmaWVkOiAgIHNtIChuZXcgY29tbWl0cykKKyMKKyMgU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIworIyAqIHNtICRoZWFkLi4uJG5ld19oZWFkICgxKToKKyMgICA+IEFkZCBiYXIKKyMKKyMgU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoKKyMKKyMgKiBzbSAkbmV3X2hlYWQuLi4kaGVhZDIgKDEpOgorIyAgID4gMm5kIGNvbW1pdAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJLmdpdG1vZHVsZXMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwlleHBlY3QKKyMJb3V0cHV0CisjCXVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlIHN1bW1hcnkiICcKKwlnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkID4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLmdpdG1vZHVsZXMgaWdub3JlPXVudHJhY2tlZCBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgdW50cmFja2VkICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi5naXQvY29uZmlnIGlnbm9yZT11bnRyYWNrZWQgZG9lc24ndCBzdXBwcmVzcyBzdWJtb2R1bGUgc3VtbWFyeSIgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSB1bnRyYWNrZWQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi5naXRtb2R1bGVzIGlnbm9yZT1kaXJ0eSBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLmdpdC9jb25maWcgaWdub3JlPWRpcnR5IGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlIHN1bW1hcnkiICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIyBPbiBicmFuY2ggbWFzdGVyCisjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMgICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisjCisjCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKyMKKyMgVW50cmFja2VkIGZpbGVzOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjCisjCS5naXRtb2R1bGVzCisjCWRpcjEvdW50cmFja2VkCisjCWRpcjIvbW9kaWZpZWQKKyMJZGlyMi91bnRyYWNrZWQKKyMJZXhwZWN0CisjCW91dHB1dAorIwl1bnRyYWNrZWQKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1pZ25vcmUtc3VibW9kdWxlcz1hbGwgc3VwcHJlc3NlcyBzdWJtb2R1bGUgc3VtbWFyeSIgJworCWdpdCBzdGF0dXMgLS1pZ25vcmUtc3VibW9kdWxlcz1hbGwgPiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICcuZ2l0bW9kdWxlcyBpZ25vcmU9YWxsIHN1cHByZXNzZXMgc3VibW9kdWxlIHN1bW1hcnknICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBhbGwgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnLmdpdC9jb25maWcgaWdub3JlPWFsbCBzdXBwcmVzc2VzIHN1Ym1vZHVsZSBzdW1tYXJ5JyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGFsbCAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDktY29tbWl0LnNoIGIvdC90NzUwOS1jb21taXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjYxZmQzYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDktY29tbWl0LnNoCkBAIC0wLDAgKzEsMTg5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWNrIE1hdHRvcworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY29tbWl0IC0tcmVzZXQtYXV0aG9yJworCisuIC4vdGVzdC1saWIuc2gKKworYXV0aG9yX2hlYWRlciAoKSB7CisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDEiIHwKKwlzZWQgLW4gLWUgJy9eJC9xJyAtZSAnL15hdXRob3IgL3AnCit9CisKK21lc3NhZ2VfYm9keSAoKSB7CisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDEiIHwKKwlzZWQgLWUgJzEsL14kL2QnCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1DIG9wdGlvbiBjb3BpZXMgYXV0aG9yc2hpcCBhbmQgbWVzc2FnZScgJworCWVjaG8gIkluaXRpYWwiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgQ29tbWl0IiAtLWF1dGhvciBGcmlnYXRlXCBcPGZseWluZ0BvdmVyLndvcmxkXD4gJiYKKwlnaXQgdGFnIEluaXRpYWwgJiYKKwllY2hvICJUZXN0IDEiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtQyBJbml0aWFsICYmCisJYXV0aG9yX2hlYWRlciBJbml0aWFsID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCW1lc3NhZ2VfYm9keSBJbml0aWFsID5leHBlY3QgJiYKKwltZXNzYWdlX2JvZHkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctQyBvcHRpb24gY29waWVzIG9ubHkgdGhlIG1lc3NhZ2Ugd2l0aCAtLXJlc2V0LWF1dGhvcicgJworCWVjaG8gIlRlc3QgMiIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1DIEluaXRpYWwgLS1yZXNldC1hdXRob3IgJiYKKwllY2hvICJhdXRob3IgJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+ICRHSVRfQVVUSE9SX0RBVEUiID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCW1lc3NhZ2VfYm9keSBJbml0aWFsID5leHBlY3QgJiYKKwltZXNzYWdlX2JvZHkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctYyBvcHRpb24gY29waWVzIGF1dGhvcnNoaXAgYW5kIG1lc3NhZ2UnICcKKwllY2hvICJUZXN0IDMiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJRURJVE9SPTogVklTVUFMPTogZ2l0IGNvbW1pdCAtYSAtYyBJbml0aWFsICYmCisJYXV0aG9yX2hlYWRlciBJbml0aWFsID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLWMgb3B0aW9uIGNvcGllcyBvbmx5IHRoZSBtZXNzYWdlIHdpdGggLS1yZXNldC1hdXRob3InICcKKwllY2hvICJUZXN0IDQiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJRURJVE9SPTogVklTVUFMPTogZ2l0IGNvbW1pdCAtYSAtYyBJbml0aWFsIC0tcmVzZXQtYXV0aG9yICYmCisJZWNobyAiYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAkR0lUX0FVVEhPUl9EQVRFIiA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwltZXNzYWdlX2JvZHkgSW5pdGlhbCA+ZXhwZWN0ICYmCisJbWVzc2FnZV9ib2R5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbWVuZCBvcHRpb24gY29waWVzIGF1dGhvcnNoaXAnICcKKwlnaXQgY2hlY2tvdXQgSW5pdGlhbCAmJgorCWVjaG8gIlRlc3QgNSIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC0tYW1lbmQgLW0gImFtZW5kIHRlc3QiICYmCisJYXV0aG9yX2hlYWRlciBJbml0aWFsID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbCAmJgorCisJZWNobyAiYW1lbmQgdGVzdCIgPmV4cGVjdCAmJgorCW1lc3NhZ2VfYm9keSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3NoYTFfZmlsZSgpIHsKKwllY2hvICIkKiIgfCBzZWQgInMjLi4jLmdpdC9vYmplY3RzLyYvIyIKK30KK3JlbW92ZV9vYmplY3QoKSB7CisJcm0gLWYgJChzaGExX2ZpbGUgIiQqIikKK30KK25vX3JlZmxvZygpIHsKKwljcCAuZ2l0L2NvbmZpZyAuZ2l0L2NvbmZpZy5zYXZlZCAmJgorCWVjaG8gIltjb3JlXSBsb2dhbGxyZWZ1cGRhdGVzID0gZmFsc2UiID4+LmdpdC9jb25maWcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IC1mIC5naXQvY29uZmlnLnNhdmVkIC5naXQvY29uZmlnIiAmJgorCisJaWYgdGVzdCAtZSAuZ2l0L2xvZ3MKKwl0aGVuCisJCW12IC5naXQvbG9ncyAuICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgbG9ncyAuZ2l0LyIKKwlmaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFtZW5kIG9wdGlvbiB3aXRoIGVtcHR5IGF1dGhvcicgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSW5pdGlhbCA+dG1wICYmCisJc2VkICJzL2F1dGhvciBbXjxdKiA8L2F1dGhvciAgPC8iIHRtcCA+ZW1wdHktYXV0aG9yICYmCisJbm9fcmVmbG9nICYmCisJc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyBlbXB0eS1hdXRob3IpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRzaGEiICYmCisJZ2l0IGNoZWNrb3V0ICRzaGEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBJbml0aWFsIiAmJgorCWVjaG8gIkVtcHR5IGF1dGhvciB0ZXN0IiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLWEgLW0gImVtcHR5IGF1dGhvciIgLS1hbWVuZCAyPmVyciAmJgorCWdyZXAgImVtcHR5IGlkZW50IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbWVuZCBvcHRpb24gd2l0aCBtaXNzaW5nIGF1dGhvcicgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSW5pdGlhbCA+dG1wICYmCisJc2VkICJzL2F1dGhvciBbXjxdKiA8L2F1dGhvciA8LyIgdG1wID5tYWxmb3JtZWQgJiYKKwlub19yZWZsb2cgJiYKKwlzaGE9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IG1hbGZvcm1lZCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKKwlnaXQgY2hlY2tvdXQgJHNoYSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IEluaXRpYWwiICYmCisJZWNobyAiTWlzc2luZyBhdXRob3IgdGVzdCIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1hIC1tICJtYWxmb3JtZWQgYXV0aG9yIiAtLWFtZW5kIDI+ZXJyICYmCisJZ3JlcCAiZW1wdHkgaWRlbnQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlc2V0LWF1dGhvciBtYWtlcyB0aGUgY29tbWl0IG91cnMgZXZlbiB3aXRoIC0tYW1lbmQgb3B0aW9uJyAnCisJZ2l0IGNoZWNrb3V0IEluaXRpYWwgJiYKKwllY2hvICJUZXN0IDYiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtLXJlc2V0LWF1dGhvciAtbSAiQ2hhbmdlZCBhZ2FpbiIgLS1hbWVuZCAmJgorCWVjaG8gImF1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gJEdJVF9BVVRIT1JfREFURSIgPmV4cGVjdCAmJgorCWF1dGhvcl9oZWFkZXIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAiQ2hhbmdlZCBhZ2FpbiIgPmV4cGVjdCAmJgorCW1lc3NhZ2VfYm9keSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJyAnCisJZ2l0IGNoZWNrb3V0IEluaXRpYWwgJiYKKwllY2hvICJUZXN0IDciID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtYSAtLXJlc2V0LWF1dGhvciAtLWF1dGhvcj0iWHl6enkgPGZyb3R6QG5pdGZvbC54ej4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVzZXQtYXV0aG9yIHNob3VsZCBiZSByZWplY3RlZCB3aXRob3V0IC1jLy1DLy0tYW1lbmQnICcKKwlnaXQgY2hlY2tvdXQgSW5pdGlhbCAmJgorCWVjaG8gIlRlc3QgNyIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1hIC0tcmVzZXQtYXV0aG9yIC1tIGRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHJlc3BlY3RzIENIRVJSWV9QSUNLX0hFQUQgYW5kIE1FUkdFX01TRycgJworCWVjaG8gImNoZXJyeS1waWNrIDFhIiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWFtICJjaGVycnktcGljayAxIiAtLWF1dGhvcj0iQ2hlcnJ5IDxjaGVycnlAcGljay5lcj4iICYmCisJZ2l0IHRhZyBjaGVycnktcGljay1oZWFkICYmCisJZ2l0IHJldi1wYXJzZSBjaGVycnktcGljay1oZWFkID4uZ2l0L0NIRVJSWV9QSUNLX0hFQUQgJiYKKwllY2hvICJUaGlzIGlzIGEgTUVSR0VfTVNHIiA+LmdpdC9NRVJHRV9NU0cgJiYKKwllY2hvICJjaGVycnktcGljayAxYiIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hICYmCisJYXV0aG9yX2hlYWRlciBjaGVycnktcGljay1oZWFkID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gIlRoaXMgaXMgYSBNRVJHRV9NU0ciID5leHBlY3QgJiYKKwltZXNzYWdlX2JvZHkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlc2V0LWF1dGhvciB3aXRoIENIRVJSWV9QSUNLX0hFQUQnICcKKwlnaXQgcmV2LXBhcnNlIGNoZXJyeS1waWNrLWhlYWQgPi5naXQvQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCWVjaG8gImNoZXJyeS1waWNrIDIiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYW0gImNoZXJyeS1waWNrIDIiIC0tcmVzZXQtYXV0aG9yICYmCisJZWNobyAiYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAkR0lUX0FVVEhPUl9EQVRFIiA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxMC1zaWduZWQtY29tbWl0LnNoIGIvdC90NzUxMC1zaWduZWQtY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFkM2M1NmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTEwLXNpZ25lZC1jb21taXQuc2gKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NpZ25lZCBjb21taXQgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ3BnLnNoIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnY3JlYXRlIHNpZ25lZCBjb21taXRzJyAnCisJZWNobyAxID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1TIC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCWVjaG8gMiA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtUyAtbSBzZWNvbmQgJiYKKwlnaXQgdGFnIHNlY29uZCAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIDMgPmVsaWYgJiYgZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gInRoaXJkIG9uIHNpZGUiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtUyBzaWRlICYmCisJZ2l0IHRhZyBtZXJnZSAmJgorCisJZWNobyA0ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJmb3VydGggdW5zaWduZWQiICYmCisJZ2l0IHRhZyBmb3VydGgtdW5zaWduZWQgJiYKKworCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC0tYW1lbmQgLVMgLW0gImZvdXJ0aCBzaWduZWQiICYmCisJZ2l0IHRhZyBmb3VydGgtc2lnbmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaG93IHNpZ25hdHVyZXMnICcKKwkoCisJCWZvciBjb21taXQgaW4gaW5pdGlhbCBzZWNvbmQgbWVyZ2UgbWFzdGVyCisJCWRvCisJCQlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICRjb21taXQgPmFjdHVhbCAmJgorCQkJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsIHx8IGV4aXQgMQorCQkJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCB8fCBleGl0IDEKKwkJCWVjaG8gJGNvbW1pdCBPSworCQlkb25lCisJKSAmJgorCSgKKwkJZm9yIGNvbW1pdCBpbiBtZXJnZV4yIGZvdXJ0aC11bnNpZ25lZAorCQlkbworCQkJZ2l0IHNob3cgLS1wcmV0dHk9c2hvcnQgLS1zaG93LXNpZ25hdHVyZSAkY29tbWl0ID5hY3R1YWwgJiYKKwkJCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJiBleGl0IDEKKwkJCSEgZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgfHwgZXhpdCAxCisJCQllY2hvICRjb21taXQgT0sKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2RldGVjdCBmdWRnZWQgc2lnbmF0dXJlJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBtYXN0ZXIgPnJhdyAmJgorCisJc2VkIC1lICJzL2ZvdXJ0aCBzaWduZWQvNHRoIGZvcmdlZC8iIHJhdyA+Zm9yZ2VkMSAmJgorCWdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgZm9yZ2VkMSA+Zm9yZ2VkMS5jb21taXQgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICQoY2F0IGZvcmdlZDEuY29tbWl0KSA+YWN0dWFsMSAmJgorCWdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsMSAmJgorCSEgZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnZGV0ZWN0IGZ1ZGdlZCBzaWduYXR1cmUgd2l0aCBOVUwnICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IG1hc3RlciA+cmF3ICYmCisJY2F0IHJhdyA+Zm9yZ2VkMiAmJgorCWVjaG8gUXdpayB8IHRyICJRIiAiXDAwMCIgPj5mb3JnZWQyICYmCisJZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCBmb3JnZWQyID5mb3JnZWQyLmNvbW1pdCAmJgorCWdpdCBzaG93IC0tcHJldHR5PXNob3J0IC0tc2hvdy1zaWduYXR1cmUgJChjYXQgZm9yZ2VkMi5jb21taXQpID5hY3R1YWwyICYmCisJZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwyICYmCisJISBncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdhbWVuZGluZyBhbHJlYWR5IHNpZ25lZCBjb21taXQnICcKKwlnaXQgY2hlY2tvdXQgZm91cnRoLXNpZ25lZF4wICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1TIC0tbm8tZWRpdCAmJgorCWdpdCBzaG93IC1zIC0tc2hvdy1zaWduYXR1cmUgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTEtc3RhdHVzLWluZGV4LnNoIGIvdC90NzUxMS1zdGF0dXMtaW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjVmZGMwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTEtc3RhdHVzLWluZGV4LnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3RhdHVzIHdpdGggY2VydGFpbiBmaWxlIG5hbWUgbGVuZ3RocycKKworLiAuL3Rlc3QtbGliLnNoCisKK2ZpbGVzPSIwIDEgMiAzIDQgNSA2IDcgOCA5IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiIKKworY2hlY2soKSB7CisJbGVuPSQxCisJcHJlZml4PSQyCisKKwlmb3IgaSBpbiAkZmlsZXMKKwlkbworCQk6ID4kcHJlZml4JGkKKwlkb25lCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzdGF0dXMsIGZpbGVuYW1lIGxlbmd0aCAkbGVuIiAiCisJCWdpdCBhZGQgJHByZWZpeCogJiYKKwkJZ2l0IHN0YXR1cworCSIKKwlybSAkcHJlZml4KiAuZ2l0L2luZGV4Cit9CisKK2NoZWNrICAxCitjaGVjayAgMiBwCitjaGVjayAgMyBweAorY2hlY2sgIDQgcHJlCitjaGVjayAgNSBwcmVmCitjaGVjayAgNiBwcmVmaQorY2hlY2sgIDcgcHJlZml4CitjaGVjayAgOCBwcmVmaXgtCitjaGVjayAgOSBwcmVmaXgtcAorY2hlY2sgMTAgcHJlZml4LXByCitjaGVjayAxMSBwcmVmaXgtcHJlCitjaGVjayAxMiBwcmVmaXgtcHJlZgorY2hlY2sgMTMgcHJlZml4LXByZWZpCitjaGVjayAxNCBwcmVmaXgtcHJlZml4CitjaGVjayAxNSBwcmVmaXgtcHJlZml4LQorY2hlY2sgMTYgcHJlZml4LXByZWZpeC1wCitjaGVjayAxNyBwcmVmaXgtcHJlZml4LXByCitjaGVjayAxOCBwcmVmaXgtcHJlZml4LXByZQorY2hlY2sgMTkgcHJlZml4LXByZWZpeC1wcmVmCitjaGVjayAyMCBwcmVmaXgtcHJlZml4LXByZWZpCitjaGVjayAyMSBwcmVmaXgtcHJlZml4LXByZWZpeAorY2hlY2sgMjIgcHJlZml4LXByZWZpeC1wcmVmaXgtCitjaGVjayAyMyBwcmVmaXgtcHJlZml4LXByZWZpeC1wCitjaGVjayAyNCBwcmVmaXgtcHJlZml4LXByZWZpeC1wcgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTItc3RhdHVzLWhlbHAuc2ggYi90L3Q3NTEyLXN0YXR1cy1oZWxwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzZjZlYjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTEyLXN0YXR1cy1oZWxwLnNoCkBAIC0wLDAgKzEsNjQ5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIFZhbGVudGluIER1cGVycmF5LCBMdWNpZW4gS29uZywgRnJhbmNrIEpvbmFzLAorIwkJICAgICBUaG9tYXMgTmd1eSwgS2hvaSBOZ3V5ZW4KKyMJCSAgICAgR3Jlbm9ibGUgSU5QIEVuc2ltYWcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0YXR1cyBhZHZpY2VzJworCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZvciBjb25mbGljdHMnICcKKwl0ZXN0X2NvbW1pdCBpbml0IG1haW4udHh0IGluaXQgJiYKKwlnaXQgYnJhbmNoIGNvbmZsaWN0cyAmJgorCXRlc3RfY29tbWl0IG9uX21hc3RlciBtYWluLnR4dCBvbl9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3RzICYmCisJdGVzdF9jb21taXQgb25fY29uZmxpY3RzIG1haW4udHh0IG9uX2NvbmZsaWN0cworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIGNvbmZsaWN0cyB1bnJlc29sdmVkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgT24gYnJhbmNoIGNvbmZsaWN0cworCSMgWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCisJIyAgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorCSMKKwkjIFVubWVyZ2VkIHBhdGhzOgorCSMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCSMKKwkjCWJvdGggbW9kaWZpZWQ6ICAgICAgbWFpbi50eHQKKwkjCisJbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKKwlFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gY29uZmxpY3RzIHJlc29sdmVkIGJlZm9yZSBjb21taXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbmZsaWN0cyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwllY2hvIG9uZSA+bWFpbi50eHQgJiYKKwlnaXQgYWRkIG1haW4udHh0ICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJIyBPbiBicmFuY2ggY29uZmxpY3RzCisJIyBBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuCisJIyAgICh1c2UgImdpdCBjb21taXQiIHRvIGNvbmNsdWRlIG1lcmdlKQorCSMKKwkjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCSMKKwkjCW1vZGlmaWVkOiAgIG1haW4udHh0CisJIworCSMgVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCisJRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIHJlYmFzZSBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiByZWJhc2VfY29uZmxpY3RzICYmCisJdGVzdF9jb21taXQgb25lX3JlYmFzZSBtYWluLnR4dCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d29fcmViYXNlIG1haW4udHh0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlX3JlYmFzZSBtYWluLnR4dCB0aHJlZQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIHJlYmFzZSBpbiBwcm9ncmVzcyBiZWZvcmUgcmVzb2x2aW5nIGNvbmZsaWN0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgSEVBRF4gLS1vbnRvIEhFQUReXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLgorCSMgWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuCisJIyAgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKKwkjICAgKHVzZSAiZ2l0IHJlYmFzZSAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKwkjICAgKHVzZSAiZ2l0IHJlYmFzZSAtLWFib3J0IiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkKKwkjCisJIyBVbm1lcmdlZCBwYXRoczoKKwkjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCSMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCSMKKwkjCWJvdGggbW9kaWZpZWQ6ICAgICAgbWFpbi50eHQKKwkjCisJbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKKwlFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gcmViYXNlIGluIHByb2dyZXNzIGJlZm9yZSByZWJhc2UgLS1jb250aW51ZScgJworCWdpdCByZXNldCAtLWhhcmQgcmViYXNlX2NvbmZsaWN0cyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgSEVBRF4gLS1vbnRvIEhFQUReXiAmJgorCWVjaG8gdGhyZWUgPm1haW4udHh0ICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLgorCSMgWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuCisJIyAgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCisJIworCSMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisJIyAgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwkjCisJIwltb2RpZmllZDogICBtYWluLnR4dAorCSMKKwkjIFVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorCUVPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZvciByZWJhc2VfaV9jb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiByZWJhc2VfaV9jb25mbGljdHMgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfdW5tZXJnZSBtYWluLnR4dCBvbmVfdW5tZXJnZSAmJgorCWdpdCBicmFuY2ggcmViYXNlX2lfY29uZmxpY3RzX3NlY29uZCAmJgorCXRlc3RfY29tbWl0IG9uZV9tYXN0ZXIgbWFpbi50eHQgb25lX21hc3RlciAmJgorCWdpdCBjaGVja291dCByZWJhc2VfaV9jb25mbGljdHNfc2Vjb25kICYmCisJdGVzdF9jb21taXQgb25lX3NlY29uZCBtYWluLnR4dCBvbmVfc2Vjb25kCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGR1cmluZyByZWJhc2UgLWkgd2hlbiBjb25mbGljdHMgdW5yZXNvbHZlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgcmViYXNlX2lfY29uZmxpY3RzICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJIyBOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guCisJIyBZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4KKwkjICAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorCSMgICAodXNlICJnaXQgcmViYXNlIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorCSMgICAodXNlICJnaXQgcmViYXNlIC0tYWJvcnQiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKQorCSMKKwkjIFVubWVyZ2VkIHBhdGhzOgorCSMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBtYXJrIHJlc29sdXRpb24pCisJIworCSMJYm90aCBtb2RpZmllZDogICAgICBtYWluLnR4dAorCSMKKwlubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorCUVPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZHVyaW5nIHJlYmFzZSAtaSBhZnRlciByZXNvbHZpbmcgY29uZmxpY3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCByZWJhc2VfaV9jb25mbGljdHNfc2Vjb25kICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSByZWJhc2VfaV9jb25mbGljdHMgJiYKKwlnaXQgYWRkIG1haW4udHh0ICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJIyBOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guCisJIyBZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4KKwkjICAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKKwkjCisJIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKwkjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCSMKKwkjCW1vZGlmaWVkOiAgIG1haW4udHh0CisJIworCSMgVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCisJRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIHJlYmFzaW5nIC1pIGluIGVkaXQgbW9kZScgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZV9pX2VkaXQgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfcmViYXNlX2kgbWFpbi50eHQgb25lICYmCisJdGVzdF9jb21taXQgdHdvX3JlYmFzZV9pIG1haW4udHh0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlX3JlYmFzZV9pIG1haW4udHh0IHRocmVlICYmCisJRkFLRV9MSU5FUz0iMSBlZGl0IDIiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLgorCSMgWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuCisJIyAgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorCSMgICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisJIworCW5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCisJRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIHNwbGl0dGluZyBhIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNwbGl0X2NvbW1pdCAmJgorCXRlc3RfY29tbWl0IG9uZV9zcGxpdCBtYWluLnR4dCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d29fc3BsaXQgbWFpbi50eHQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWVfc3BsaXQgbWFpbi50eHQgdGhyZWUgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyX3NwbGl0IG1haW4udHh0IGZvdXIgJiYKKwlGQUtFX0xJTkVTPSIxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkjIE5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4KKwkjIFlvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuCisJIyAgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKKwkjCisJIyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKwkjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCSMgICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJIworCSMJbW9kaWZpZWQ6ICAgbWFpbi50eHQKKwkjCisJbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKKwlFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGFmdGVyIGVkaXRpbmcgdGhlIGxhc3QgY29tbWl0IHdpdGggLS1hbWVuZCBkdXJpbmcgYSByZWJhc2UgLWknICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBhbWVuZF9sYXN0ICYmCisJdGVzdF9jb21taXQgb25lX2FtZW5kIG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19hbWVuZCBtYWluLnR4dCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9hbWVuZCBtYWluLnR4dCB0aHJlZSAmJgorCXRlc3RfY29tbWl0IGZvdXJfYW1lbmQgbWFpbi50eHQgZm91ciAmJgorCUZBS0VfTElORVM9IjEgMiBlZGl0IDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZm9vIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLgorCSMgWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuCisJIyAgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorCSMgICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisJIworCW5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCisJRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIHNldmVyYWwgZWRpdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBzZXZlcmFsX2VkaXRzICYmCisJdGVzdF9jb21taXQgb25lX2VkaXRzIG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19lZGl0cyBtYWluLnR4dCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9lZGl0cyBtYWluLnR4dCB0aHJlZSAmJgorCXRlc3RfY29tbWl0IGZvdXJfZWRpdHMgbWFpbi50eHQgZm91cgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKGNvbnRpbnVlIGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0JyAnCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkjIE5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4KKwkjIFlvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLgorCSMgICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKwkjICAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCSMKKwlub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorCUVPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChjb250aW51ZSBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCBhbmQgc3BsaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLgorCSMgWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4KKwkjICAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorCSMKKwkjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorCSMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwkjCisJIwltb2RpZmllZDogICBtYWluLnR4dAorCSMKKwlubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorCUVPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChjb250aW51ZSBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCBhbmQgYW1lbmQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZm9vIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLgorCSMgWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuCisJIyAgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorCSMgICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisJIworCW5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCisJRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKGFtZW5kIGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImEiICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJIyBOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guCisJIyBZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4KKwkjICAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisJIyAgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKwkjCisJbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKKwlFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoYW1lbmQgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQgYW5kIHNwbGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImIiICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJIyBOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guCisJIyBZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLgorCSMgICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCisJIworCSMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisJIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwkjICAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCSMKKwkjCW1vZGlmaWVkOiAgIG1haW4udHh0CisJIworCW5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCisJRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKGFtZW5kIGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0IGFuZCBhbWVuZCcgJworCWdpdCByZXNldCAtLWhhcmQgc2V2ZXJhbF9lZGl0cyAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJjIiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZCIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkjIE5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4KKwkjIFlvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLgorCSMgICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKwkjICAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCSMKKwlub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorCUVPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChzcGxpdCBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCcgJworCWdpdCByZXNldCAtLWhhcmQgc2V2ZXJhbF9lZGl0cyAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWdpdCBjb21taXQgLW0gImUiICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJIyBOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guCisJIyBZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4KKwkjICAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisJIyAgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKwkjCisJbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKKwlFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoc3BsaXQgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQgYW5kIHNwbGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwlnaXQgYWRkIG1haW4udHh0ICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJmIiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLgorCSMgWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4KKwkjICAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorCSMKKwkjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorCSMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwkjCisJIwltb2RpZmllZDogICBtYWluLnR4dAorCSMKKwlubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorCUVPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChzcGxpdCBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCBhbmQgYW1lbmQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWdpdCBhZGQgbWFpbi50eHQgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImciICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJoIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLgorCSMgWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuCisJIyAgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorCSMgICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisJIworCW5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCisJRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgYW1fc2Vzc2lvbicgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFtX3Nlc3Npb24gJiYKKwl0ZXN0X2NvbW1pdCBvbmVfYW0gb25lLnR4dCAib25lIiAmJgorCXRlc3RfY29tbWl0IHR3b19hbSB0d28udHh0ICJ0d28iICYmCisJdGVzdF9jb21taXQgdGhyZWVfYW0gdGhyZWUudHh0ICJ0aHJlZSIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaW4gYW4gYW0gc2Vzc2lvbjogZmlsZSBhbHJlYWR5IGV4aXN0cycgJworCWdpdCBjaGVja291dCAtYiBhbV9hbHJlYWR5X2V4aXN0cyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gTWFpbGRpci8qICYmIGdpdCBhbSAtLWFib3J0IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLW9NYWlsZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIE1haWxkaXIvKi5wYXRjaCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgT24gYnJhbmNoIGFtX2FscmVhZHlfZXhpc3RzCisJIyBZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4KKwkjICAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuICJnaXQgYW0gLS1yZXNvbHZlZCIpCisJIyAgICh1c2UgImdpdCBhbSAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKwkjICAgKHVzZSAiZ2l0IGFtIC0tYWJvcnQiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkKKwkjCisJbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKKwlFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGluIGFuIGFtIHNlc3Npb246IGZpbGUgZG9lcyBub3QgZXhpc3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGFtX3Nlc3Npb24gJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW1fbm90X2V4aXN0cyAmJgorCWdpdCBybSB0aHJlZS50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJkZWxldGUgdGhyZWUudHh0IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gTWFpbGRpci8qICYmIGdpdCBhbSAtLWFib3J0IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLW9NYWlsZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIE1haWxkaXIvKi5wYXRjaCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgT24gYnJhbmNoIGFtX25vdF9leGlzdHMKKwkjIFlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLgorCSMgICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gImdpdCBhbSAtLXJlc29sdmVkIikKKwkjICAgKHVzZSAiZ2l0IGFtIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorCSMgICAodXNlICJnaXQgYW0gLS1hYm9ydCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKQorCSMKKwlub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorCUVPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaW4gYW4gYW0gc2Vzc2lvbjogZW1wdHkgcGF0Y2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGFtX3Nlc3Npb24gJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW1fZW1wdHkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIE1haWxkaXIvKiAmJiBnaXQgYW0gLS1hYm9ydCIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0zIC1vTWFpbGRpciAmJgorCWdpdCBybSBvbmUudHh0IHR3by50eHQgdGhyZWUudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIGFsbCBhbV9lbXB0eSIgJiYKKwllY2hvIGVycm9yID5NYWlsZGlyLzAwMDItdHdvX2FtLnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIE1haWxkaXIvKi5wYXRjaCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgT24gYnJhbmNoIGFtX2VtcHR5CisJIyBZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4KKwkjIFRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LgorCSMgICAodXNlICJnaXQgYW0gLS1za2lwIiB0byBza2lwIHRoaXMgcGF0Y2gpCisJIyAgICh1c2UgImdpdCBhbSAtLWFib3J0IiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpCisJIworCW5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCisJRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIGJpc2VjdGluZycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJpc2VjdCAmJgorCXRlc3RfY29tbWl0IG9uZV9iaXNlY3QgbWFpbi50eHQgb25lICYmCisJdGVzdF9jb21taXQgdHdvX2Jpc2VjdCBtYWluLnR4dCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9iaXNlY3QgbWFpbi50eHQgdGhyZWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBiaXNlY3QgcmVzZXQiICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJZ2l0IGJpc2VjdCBnb29kIG9uZV9iaXNlY3QgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkjIE5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4KKwkjIFlvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4KKwkjICAgKHVzZSAiZ2l0IGJpc2VjdCByZXNldCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkKKwkjCisJbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKKwlFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gcmViYXNlIGNvbmZsaWN0cyB3aXRoIHN0YXR1c2hpbnRzIGRpc2FibGVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc3RhdHVzaGludHNfZGlzYWJsZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS1sb2NhbCBhZHZpY2Uuc3RhdHVzaGludHMgdHJ1ZSIgJiYKKwlnaXQgY29uZmlnIC0tbG9jYWwgYWR2aWNlLnN0YXR1c2hpbnRzIGZhbHNlICYmCisJdGVzdF9jb21taXQgb25lX3N0YXR1c2hpbnRzIG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19zdGF0dXNoaW50cyBtYWluLnR4dCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9zdGF0dXNoaW50cyBtYWluLnR4dCB0aHJlZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgSEVBRF4gLS1vbnRvIEhFQUReXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLgorCSMgWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuCisJIworCSMgVW5tZXJnZWQgcGF0aHM6CisJIwlib3RoIG1vZGlmaWVkOiAgICAgIG1haW4udHh0CisJIworCW5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0CisJRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIGNoZXJyeS1waWNrIGNvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNoZXJyeV9icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBvbmVfY2hlcnJ5IG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19jaGVycmllcyBtYWluLnR4dCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgY2hlcnJ5X2JyYW5jaF9zZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmRfY2hlcnJ5IG1haW4udHh0IHNlY29uZCAmJgorCWdpdCBjaGVja291dCBjaGVycnlfYnJhbmNoICYmCisJdGVzdF9jb21taXQgdGhyZWVfY2hlcnJpZXMgbWFpbi50eHQgdGhyZWUKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjaGVycnktcGlja2luZyBiZWZvcmUgcmVzb2x2aW5nIGNvbmZsaWN0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGNoZXJyeV9icmFuY2hfc2Vjb25kICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJIyBPbiBicmFuY2ggY2hlcnJ5X2JyYW5jaAorCSMgWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcuCisJIyAgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorCSMKKwkjIFVubWVyZ2VkIHBhdGhzOgorCSMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCSMKKwkjCWJvdGggbW9kaWZpZWQ6ICAgICAgbWFpbi50eHQKKwkjCisJbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKKwlFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gY2hlcnJ5LXBpY2tpbmcgYWZ0ZXIgcmVzb2x2aW5nIGNvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgY2hlcnJ5X2JyYW5jaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGNoZXJyeV9icmFuY2hfc2Vjb25kICYmCisJZWNobyBlbmQgPm1haW4udHh0ICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSMgT24gYnJhbmNoIGNoZXJyeV9icmFuY2gKKwkjIFlvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nLgorCSMgICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuICJnaXQgY29tbWl0IikKKwkjCisJIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKwkjCisJIwltb2RpZmllZDogICBtYWluLnR4dAorCSMKKwkjIFVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorCUVPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDAtbWVyZ2Uuc2ggYi90L3Q3NjAwLW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlMTk1OTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjAwLW1lcmdlLnNoCkBAIC0wLDAgKzEsNjk4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IExhcnMgSGplbWxpCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZQorCitUZXN0aW5nIGJhc2ljIG1lcmdlIG9wZXJhdGlvbnMvb3B0aW9uIHBhcnNpbmcuCisKKyEgW2MwXSBjb21taXQgMAorICEgW2MxXSBjb21taXQgMQorICAhIFtjMl0gY29tbWl0IDIKKyAgICEgW2MzXSBjb21taXQgMworICAgICEgW2M0XSBjNAorICAgICAhIFtjNV0gYzUKKyAgICAgICEgW2M2XSBjNgorICAgICAgICogW21hc3Rlcl0gTWVyZ2UgY29tbWl0ICdjMScKKy0tLS0tLS0tCisgICAgICAgLSBbbWFzdGVyXSBNZXJnZSBjb21taXQgJ2MxJworICsgICAgICogW2MxXSBjb21taXQgMQorICAgICAgKyAgW2M2XSBjNgorICAgICArICAgW2M1XSBjNQorICAgICsrICAgW2M0XSBjNAorICAgKysrKyAgW2MzXSBjb21taXQgMworICArICAgICAgW2MyXSBjb21taXQgMgorKysrKysrKyogW2MwXSBjb21taXQgMAorJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy5zaAorCitwcmludGYgJyVzXG4nIDEgMiAzIDQgNSA2IDcgOCA5ID5maWxlCitwcmludGYgJyVzXG4nICcxIFgnIDIgMyA0IDUgNiA3IDggOSA+ZmlsZS4xCitwcmludGYgJyVzXG4nIDEgMiAzIDQgJzUgWCcgNiA3IDggOSA+ZmlsZS41CitwcmludGYgJyVzXG4nIDEgMiAzIDQgNSA2IDcgOCAnOSBYJyA+ZmlsZS45CitwcmludGYgJyVzXG4nICcxIFgnIDIgMyA0IDUgNiA3IDggOSA+cmVzdWx0LjEKK3ByaW50ZiAnJXNcbicgJzEgWCcgMiAzIDQgJzUgWCcgNiA3IDggOSA+cmVzdWx0LjEtNQorcHJpbnRmICclc1xuJyAnMSBYJyAyIDMgNCAnNSBYJyA2IDcgOCAnOSBYJyA+cmVzdWx0LjEtNS05Cis+ZW1wdHkKKworY3JlYXRlX21lcmdlX21zZ3MgKCkgeworCWVjaG8gIk1lcmdlIHRhZyAnYzInIiA+bXNnLjEtNSAmJgorCWVjaG8gIk1lcmdlIHRhZ3MgJ2MyJyBhbmQgJ2MzJyIgPm1zZy4xLTUtOSAmJgorCXsKKwkJZWNobyAiU3F1YXNoZWQgY29tbWl0IG9mIHRoZSBmb2xsb3dpbmc6IiAmJgorCQllY2hvICYmCisJCWdpdCBsb2cgLS1uby1tZXJnZXMgXkhFQUQgYzEKKwl9ID5zcXVhc2guMSAmJgorCXsKKwkJZWNobyAiU3F1YXNoZWQgY29tbWl0IG9mIHRoZSBmb2xsb3dpbmc6IiAmJgorCQllY2hvICYmCisJCWdpdCBsb2cgLS1uby1tZXJnZXMgXkhFQUQgYzIKKwl9ID5zcXVhc2guMS01ICYmCisJeworCQllY2hvICJTcXVhc2hlZCBjb21taXQgb2YgdGhlIGZvbGxvd2luZzoiICYmCisJCWVjaG8gJiYKKwkJZ2l0IGxvZyAtLW5vLW1lcmdlcyBeSEVBRCBjMiBjMworCX0gPnNxdWFzaC4xLTUtOSAmJgorCWVjaG8gPm1zZy5ub2xvZyAmJgorCXsKKwkJZWNobyAiKiB0YWcgJ2MzJzoiICYmCisJCWVjaG8gIiAgY29tbWl0IDMiICYmCisJCWVjaG8KKwl9ID5tc2cubG9nCit9CisKK3ZlcmlmeV9tZXJnZSAoKSB7CisJdGVzdF9jbXAgIiQyIiAiJDEiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCWlmIHRlc3QgLW4gIiQzIgorCXRoZW4KKwkJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzIEhFQUQgPm1zZy5hY3QgJiYKKwkJdGVzdF9jbXAgIiQzIiBtc2cuYWN0CisJZmkKK30KKwordmVyaWZ5X2hlYWQgKCkgeworCWVjaG8gIiQxIiA+aGVhZC5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+aGVhZC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBoZWFkLmV4cGVjdGVkIGhlYWQuYWN0dWFsCit9CisKK3ZlcmlmeV9wYXJlbnRzICgpIHsKKwlwcmludGYgJyVzXG4nICIkQCIgPnBhcmVudHMuZXhwZWN0ZWQgJiYKKwk+cGFyZW50cy5hY3R1YWwgJiYKKwlpPTEgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAkIworCWRvCisJCWdpdCByZXYtcGFyc2UgSEVBRF4kaSA+PnBhcmVudHMuYWN0dWFsICYmCisJCWk9JChleHByICRpICsgMSkgfHwKKwkJcmV0dXJuIDEKKwlkb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiSEVBRF4kaSIgJiYKKwl0ZXN0X2NtcCBwYXJlbnRzLmV4cGVjdGVkIHBhcmVudHMuYWN0dWFsCit9CisKK3ZlcmlmeV9tZXJnZWhlYWRzICgpIHsKKwlwcmludGYgJyVzXG4nICIkQCIgPm1lcmdlaGVhZC5leHBlY3RlZCAmJgorCXdoaWxlIHJlYWQgc2hhMSByZXN0CisJZG8KKwkJZ2l0IHJldi1wYXJzZSAkc2hhMQorCWRvbmUgPC5naXQvTUVSR0VfSEVBRCA+bWVyZ2VoZWFkLmFjdHVhbCAmJgorCXRlc3RfY21wIG1lcmdlaGVhZC5leHBlY3RlZCBtZXJnZWhlYWQuYWN0dWFsCit9CisKK3ZlcmlmeV9ub19tZXJnZWhlYWQgKCkgeworCSEgdGVzdCAtZSAuZ2l0L01FUkdFX0hFQUQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgMCIgJiYKKwlnaXQgdGFnIGMwICYmCisJYzA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY3AgZmlsZS4xIGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgMSIgJiYKKwlnaXQgdGFnIGMxICYmCisJYzE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAiJGMwIiAmJgorCWNwIGZpbGUuNSBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IDIiICYmCisJZ2l0IHRhZyBjMiAmJgorCWMyPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZXNldCAtLWhhcmQgIiRjMCIgJiYKKwljcCBmaWxlLjkgZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCAzIiAmJgorCWdpdCB0YWcgYzMgJiYKKwljMz0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlnaXQgcmVzZXQgLS1oYXJkICIkYzAiICYmCisJY3JlYXRlX21lcmdlX21zZ3MKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG9wdGlvbiBwYXJzaW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0kIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tc3VjaCBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyBmb29iYXIgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXM9Zm9vYmFyIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC1oIHdpdGggaW52YWxpZCBpbmRleCcgJworCW1rZGlyIGJyb2tlbiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCT4uZ2l0L2luZGV4ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBtZXJnZSAtaCAyPnVzYWdlCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlOiBnaXQgbWVyZ2UiIGJyb2tlbi91c2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3Qgbm9uLXN0cmF0ZWd5IHdpdGggYSBnaXQtbWVyZ2UtZm9vIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgaW5kZXggYzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMScgJworCWVjaG8gIk9CSklEIEhFQURAezB9OiBtZXJnZSBjMTogRmFzdC1mb3J3YXJkIiA+cmVmbG9nLmV4cGVjdGVkICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfaGVhZCAiJGMxIiAmJgorCisJZ2l0IHJlZmxvZyAtMSA+cmVmbG9nLmFjdHVhbCAmJgorCXNlZCAicy8kX3gwNVswLTlhLWZdKi9PQkpJRC9nIiByZWZsb2cuYWN0dWFsID5yZWZsb2cuZnV6enkgJiYKKwl0ZXN0X2NtcCByZWZsb2cuZXhwZWN0ZWQgcmVmbG9nLmZ1enp5CisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSB3aXRoIC0tZmYtb25seScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1mZi1vbmx5IGMxICYmCisJZ2l0IG1lcmdlIC0tZmYtb25seSBIRUFEIGMwIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfaGVhZCAiJGMxIgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZyb20gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBraWQgJiYKKworCWVjaG8gIk9CSklEIEhFQURAezB9OiBpbml0aWFsIHB1bGwiID5yZWZsb2cuZXhwZWN0ZWQgJiYKKworCWdpdCBjaGVja291dCAtLW9ycGhhbiBraWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJZ2l0IHJtIC1mciAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tZmYtb25seSBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgIiRjMSIgJiYKKworCWdpdCByZWZsb2cgLTEgPnJlZmxvZy5hY3R1YWwgJiYKKwlzZWQgInMvJF94MDVbMC05YS1mXVswLTlhLWZdL09CSklEL2ciIHJlZmxvZy5hY3R1YWwgPnJlZmxvZy5mdXp6eSAmJgorCXRlc3RfY21wIHJlZmxvZy5leHBlY3RlZCByZWZsb2cuZnV6enkKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBjMiAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgbXNnLjEtNSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMSAkYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIGFuZCBjMycgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgYzIgYzMgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01LTkgbXNnLjEtNS05ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMiAkYzMKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXMgd2l0aCAtLWZmLW9ubHknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSBjMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWZmLW9ubHkgYzMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IGMyIGMzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSBjMyAmJgorCXZlcmlmeV9oZWFkICRjMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXMgd2l0aCBtZXJnZS5mZj1vbmx5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfdGljayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNvbmZpZyAtLXVuc2V0IG1lcmdlLmZmIiAmJgorCWdpdCBjb25maWcgbWVyZ2UuZmYgb25seSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMiBjMyAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgYzMgJiYKKwl2ZXJpZnlfaGVhZCAkYzMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSAobm8tY29tbWl0KScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgYzEgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9oZWFkICRjMQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKG5vLWNvbW1pdCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGMyICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSAmJgorCXZlcmlmeV9oZWFkICRjMSAmJgorCXZlcmlmeV9tZXJnZWhlYWRzICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgYW5kIGMzIChuby1jb21taXQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjMiBjMyAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUtOSAmJgorCXZlcmlmeV9oZWFkICRjMSAmJgorCXZlcmlmeV9tZXJnZWhlYWRzICRjMiAkYzMKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIChzcXVhc2gpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLXNxdWFzaCBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgJGMwICYmCisJdmVyaWZ5X25vX21lcmdlaGVhZCAmJgorCXRlc3RfY21wIHNxdWFzaC4xIC5naXQvU1FVQVNIX01TRworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEgKHNxdWFzaCwgZmYtb25seSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIC0tc3F1YXNoIC0tZmYtb25seSBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgJGMwICYmCisJdmVyaWZ5X25vX21lcmdlaGVhZCAmJgorCXRlc3RfY21wIHNxdWFzaC4xIC5naXQvU1FVQVNIX01TRworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKHNxdWFzaCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIC0tc3F1YXNoIGMyICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSAmJgorCXZlcmlmeV9oZWFkICRjMSAmJgorCXZlcmlmeV9ub19tZXJnZWhlYWQgJiYKKwl0ZXN0X2NtcCBzcXVhc2guMS01IC5naXQvU1FVQVNIX01TRworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3VjY2VzZnVsIG1lcmdlIG9mIGMxIHdpdGggYzIgKHNxdWFzaCwgZmYtb25seSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3F1YXNoIC0tZmYtb25seSBjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgYW5kIGMzIChzcXVhc2gpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtLXNxdWFzaCBjMiBjMyAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUtOSAmJgorCXZlcmlmeV9oZWFkICRjMSAmJgorCXZlcmlmeV9ub19tZXJnZWhlYWQgJiYKKwl0ZXN0X2NtcCBzcXVhc2guMS01LTkgLmdpdC9TUVVBU0hfTVNHCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAobm8tY29tbWl0IGluIGNvbmZpZyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1uby1jb21taXQiICYmCisJZ2l0IG1lcmdlIGMyICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSAmJgorCXZlcmlmeV9oZWFkICRjMSAmJgorCXZlcmlmeV9tZXJnZWhlYWRzICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKGxvZyBpbiBjb25maWcpJyAnCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiIiAmJgorCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLS1sb2cgYzIgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT10Zm9ybWF0OiVzJW4lYiA+ZXhwZWN0ICYmCisKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zIC0tbG9nICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMlbiViID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAobG9nIGluIGNvbmZpZyBnZXRzIG92ZXJyaWRkZW4pJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gYnJhbmNoLm1hc3RlciIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBtZXJnZSIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIGJyYW5jaC5tYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIG1lcmdlICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIGMyICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9dGZvcm1hdDolcyVuJWIgPmV4cGVjdCAmJgorCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1uby1sb2ciICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5sb2cgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgYzIgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT10Zm9ybWF0OiVzJW4lYiA+YWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKHNxdWFzaCBpbiBjb25maWcpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tc3F1YXNoIiAmJgorCWdpdCBtZXJnZSBjMiAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgJiYKKwl2ZXJpZnlfaGVhZCAkYzEgJiYKKwl2ZXJpZnlfbm9fbWVyZ2VoZWFkICYmCisJdGVzdF9jbXAgc3F1YXNoLjEtNSAuZ2l0L1NRVUFTSF9NU0cKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBjb25maWcgb3B0aW9uIC1uIHdpdGggLS1zdW1tYXJ5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi1uIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLXN1bW1hcnkgYzIgPmRpZmZzdGF0LnR4dCAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgbXNnLjEtNSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMSAkYzIgJiYKKwlpZiAhIGdyZXAgIl4gZmlsZSB8ICAqMiArLSQiIGRpZmZzdGF0LnR4dAorCXRoZW4KKwkJZWNobyAiW09PUFNdIGRpZmZzdGF0IHdhcyBub3QgZ2VuZXJhdGVkIHdpdGggLS1zdW1tYXJ5IgorCQlmYWxzZQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRlIGNvbmZpZyBvcHRpb24gLW4gd2l0aCAtLXN0YXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLW4iICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tc3RhdCBjMiA+ZGlmZnN0YXQudHh0ICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSBtc2cuMS01ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMiAmJgorCWlmICEgZ3JlcCAiXiBmaWxlIHwgICoyICstJCIgZGlmZnN0YXQudHh0CisJdGhlbgorCQllY2hvICJbT09QU10gZGlmZnN0YXQgd2FzIG5vdCBnZW5lcmF0ZWQgd2l0aCAtLXN0YXQiCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBjb25maWcgb3B0aW9uIC0tc3RhdCcgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLXN0YXQiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1uIGMyID5kaWZmc3RhdC50eHQgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICYmCisJaWYgZ3JlcCAiXiBmaWxlIHwgICoyICstJCIgZGlmZnN0YXQudHh0CisJdGhlbgorCQllY2hvICJbT09QU10gZGlmZnN0YXQgd2FzIGdlbmVyYXRlZCIKKwkJZmFsc2UKKwlmaQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKG92ZXJyaWRlIC0tbm8tY29tbWl0KScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLW5vLWNvbW1pdCIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1jb21taXQgYzIgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAob3ZlcnJpZGUgLS1zcXVhc2gpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tc3F1YXNoIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLW5vLXNxdWFzaCBjMiAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgbXNnLjEtNSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMSAkYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIChuby1mZiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSAobWVyZ2UuZmY9ZmFsc2UpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBjb25maWcgbWVyZ2UuZmYgZmFsc2UgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgYzEgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gbWVyZ2UgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMCAkYzEKKycKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZSBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyB3aXRoIG1lcmdlLmZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgLS1mZiAmJgorCWdpdCBjb25maWcgbWVyZ2UuZmYgZmFsc2UgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgYzEgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gImJyYW5jaC5tYXN0ZXIiICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uICJtZXJnZSIgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9wYXJlbnRzICIkYzAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvbGVyYXRlIHVua25vd24gdmFsdWVzIGZvciBtZXJnZS5mZicgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgY29uZmlnIG1lcmdlLmZmIHNvbWV0aGluZy1uZXcgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgYzEgMj5tZXNzYWdlICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uICJtZXJnZSIgJiYKKwl2ZXJpZnlfaGVhZCAiJGMxIiAmJgorCXRlc3RfY21wIGVtcHR5IG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluaW5nIC0tc3F1YXNoIGFuZCAtLW5vLWZmIGlzIHJlZnVzZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3F1YXNoIC0tbm8tZmYgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1mZiAtLXNxdWFzaCBjMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5pbmcgLS1mZi1vbmx5IGFuZCAtLW5vLWZmIGlzIHJlZnVzZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IC0tbm8tZmYgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1mZiAtLWZmLW9ubHkgYzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSAoZmYgb3ZlcnJpZGVzIG5vLWZmKScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLW5vLWZmIiAmJgorCWdpdCBtZXJnZSAtLWZmIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfaGVhZCAkYzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgbG9nIG1lc3NhZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIC0tbm8tbG9nIGMyICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiViIEhFQUQgPm1zZy5hY3QgJiYKKwl0ZXN0X2NtcCBtc2cubm9sb2cgbXNnLmFjdCAmJgorCisJZ2l0IG1lcmdlIC0tbG9nIGMzICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiViIEhFQUQgPm1zZy5hY3QgJiYKKwl0ZXN0X2NtcCBtc2cubG9nIG1zZy5hY3QgJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgY29uZmlnIG1lcmdlLmxvZyB5ZXMgJiYKKwlnaXQgbWVyZ2UgYzMgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWIgSEVBRCA+bXNnLmFjdCAmJgorCXRlc3RfY21wIG1zZy5sb2cgbXNnLmFjdAorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzAsIGMyLCBjMCwgYW5kIGMxJyAnCisgICAgICAgZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorICAgICAgIGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIiIgJiYKKyAgICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgICBnaXQgbWVyZ2UgYzAgYzIgYzAgYzEgJiYKKyAgICAgICB2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisgICAgICAgdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzAsIGMyLCBjMCwgYW5kIGMxJyAnCisgICAgICAgZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorICAgICAgIGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIiIgJiYKKyAgICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgICBnaXQgbWVyZ2UgYzAgYzIgYzAgYzEgJiYKKyAgICAgICB2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisgICAgICAgdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzEgYW5kIGMyJyAnCisgICAgICAgZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorICAgICAgIGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIiIgJiYKKyAgICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgICBnaXQgbWVyZ2UgYzEgYzIgJiYKKyAgICAgICB2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisgICAgICAgdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZhc3QtZm9yd2FyZCBpbiBhIGRpcnR5IHRyZWUnICcKKyAgICAgICBnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisgICAgICAgbXYgZmlsZSBmaWxlMSAmJgorICAgICAgIGNhdCBmaWxlMSA+ZmlsZSAmJgorICAgICAgIHJtIC1mIGZpbGUxICYmCisgICAgICAgZ2l0IG1lcmdlIGMyCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4taW5kZXggbWVyZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgLXMgcmVzb2x2ZSBjMSA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiV29uZGVyZnVsLiIgb3V0ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMwICRjMQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnJlc2ggdGhlIGluZGV4IGJlZm9yZSBtZXJnaW5nJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWNwIGZpbGUgZmlsZS5uICYmIG12IC1mIGZpbGUubiBmaWxlICYmCisJZ2l0IG1lcmdlIGMzCisnCisKK2NhdCA+ZXhwZWN0ZWQuYnJhbmNoIDw8XEVPRgorTWVyZ2UgYnJhbmNoICdjNS1icmFuY2gnIChlYXJseSBwYXJ0KQorRU9GCitjYXQgPmV4cGVjdGVkLnRhZyA8PFxFT0YKK01lcmdlIGNvbW1pdCAnYzV+MScKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBlYXJseSBwYXJ0IG9mIGMyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMyAmJgorCWVjaG8gYzQgPmM0LmMgJiYKKwlnaXQgYWRkIGM0LmMgJiYKKwlnaXQgY29tbWl0IC1tIGM0ICYmCisJZ2l0IHRhZyBjNCAmJgorCWVjaG8gYzUgPmM1LmMgJiYKKwlnaXQgYWRkIGM1LmMgJiYKKwlnaXQgY29tbWl0IC1tIGM1ICYmCisJZ2l0IHRhZyBjNSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzMgJiYKKwllY2hvIGM2ID5jNi5jICYmCisJZ2l0IGFkZCBjNi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjNiAmJgorCWdpdCB0YWcgYzYgJiYKKwlnaXQgYnJhbmNoIC1mIGM1LWJyYW5jaCBjNSAmJgorCWdpdCBtZXJnZSBjNS1icmFuY2h+MSAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolcyBIRUFEID5hY3R1YWwuYnJhbmNoICYmCisJZ2l0IHJlc2V0IC0ta2VlcCBIRUFEXiAmJgorCWdpdCBtZXJnZSBjNX4xICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzIEhFQUQgPmFjdHVhbC50YWcgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5icmFuY2ggYWN0dWFsLmJyYW5jaCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnRhZyBhY3R1YWwudGFnCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1uby1mZiAtLW5vLWNvbW1pdCAmJiBjb21taXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgLS1uby1jb21taXQgYzEgJiYKKwlFRElUT1I9OiBnaXQgY29tbWl0ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMwICRjMQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kaW5nIG5vLWZmIG1lcmdlIGNvbW1pdCcgJworCUVESVRPUj06IGdpdCBjb21taXQgLS1hbWVuZCAmJgorCXZlcmlmeV9wYXJlbnRzICRjMCAkYzEKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCitjYXQgPmVkaXRvciA8PFxFT0YKKyMhL2Jpbi9zaAorIyBBZGQgYSBuZXcgbWVzc2FnZSBzdHJpbmcgdGhhdCB3YXMgbm90IGluIHRoZSB0ZW1wbGF0ZQorKAorCWVjaG8gIk1lcmdlIHdvcmsgZG9uZSBvbiB0aGUgc2lkZSBicmFuY2ggYzEiCisJZWNobworCWNhdCA8IiQxIgorKSA+IiQxLnRtcCIgJiYgbXYgIiQxLnRtcCIgIiQxIgorIyBzdHJpcCBjb21tZW50cyBhbmQgYmxhbmsgbGluZXMgZnJvbSBlbmQgb2YgbWVzc2FnZQorc2VkIC1lICcvXiMvZCcgPCAiJDEiIHwgc2VkIC1lIDphIC1lICcvXlxuKiQveyRkO047YmEnIC1lICd9JyA+IGV4cGVjdGVkCitFT0YKK2NobW9kIDc1NSBlZGl0b3IKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1uby1mZiAtLWVkaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJRURJVE9SPS4vZWRpdG9yIGdpdCBtZXJnZSAtLW5vLWZmIC0tZWRpdCBjMSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMCAkYzEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJhdyAmJgorCWdyZXAgIndvcmsgZG9uZSBvbiB0aGUgc2lkZSBicmFuY2giIHJhdyAmJgorCXNlZCAiMSwvXiQvZCIgPmFjdHVhbCByYXcgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIC0tZmYtb25seSB0YWcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJBIG5ld2VyIGNvbW1pdCIgJiYKKwlnaXQgdGFnIC1zIC1tICJBIG5ld2VyIGNvbW1pdCIgc2lnbmVkICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCisJZ2l0IG1lcmdlIC0tZmYtb25seSBzaWduZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHNpZ25lZF4wID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIC0tbm8tZWRpdCB0YWcgc2hvdWxkIHNraXAgZWRpdG9yJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiQSBuZXdlciBjb21taXQiICYmCisJZ2l0IHRhZyAtZiAtcyAtbSAiQSBuZXdlciBjb21taXQiIHNpZ25lZCAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKworCUVESVRPUj1mYWxzZSBnaXQgbWVyZ2UgLS1uby1lZGl0IHNpZ25lZCAmJgorCWdpdCByZXYtcGFyc2Ugc2lnbmVkXjAgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwMS1tZXJnZS1wdWxsLWNvbmZpZy5zaCBiL3QvdDc2MDEtbWVyZ2UtcHVsbC1jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjQ0YjI5MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDEtbWVyZ2UtcHVsbC1jb25maWcuc2gKQEAgLTAsMCArMSwxNTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2UKKworVGVzdGluZyBwdWxsLiogY29uZmlndXJhdGlvbiBwYXJzaW5nLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjMCA+YzAuYyAmJgorCWdpdCBhZGQgYzAuYyAmJgorCWdpdCBjb21taXQgLW0gYzAgJiYKKwlnaXQgdGFnIGMwICYmCisJZWNobyBjMSA+YzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCWdpdCBjb21taXQgLW0gYzEgJiYKKwlnaXQgdGFnIGMxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gYzIgPmMyLmMgJiYKKwlnaXQgYWRkIGMyLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMyICYmCisJZ2l0IHRhZyBjMiAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGMzID5jMy5jICYmCisJZ2l0IGFkZCBjMy5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMyAmJgorCWdpdCB0YWcgYzMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMicgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwl0ZXN0ICEgLWYgYzIuYyAmJgorCXRlc3QgISAtZiBjMy5jICYmCisJZ2l0IG1lcmdlIGMyICYmCisJdGVzdCAtZiBjMS5jICYmCisJdGVzdCAtZiBjMi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKG91cnMgaW4gcHVsbC50d29oZWFkKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgY29uZmlnIHB1bGwudHdvaGVhZCBvdXJzICYmCisJZ2l0IG1lcmdlIGMyICYmCisJdGVzdCAtZiBjMS5jICYmCisJISB0ZXN0IC1mIGMyLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiBhbmQgYzMgKHJlY3Vyc2l2ZSBpbiBwdWxsLm9jdG9wdXMpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBjb25maWcgcHVsbC5vY3RvcHVzICJyZWN1cnNpdmUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMyIGMzICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIGFuZCBjMyAocmVjdXJzaXZlIGFuZCBvY3RvcHVzIGluIHB1bGwub2N0b3B1cyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IGNvbmZpZyBwdWxsLm9jdG9wdXMgInJlY3Vyc2l2ZSBvY3RvcHVzIiAmJgorCWdpdCBtZXJnZSBjMiBjMyAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiICE9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMyKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMzKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMykiICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwl0ZXN0IC1mIGMyLmMgJiYKKwl0ZXN0IC1mIGMzLmMKKycKKworY29uZmxpY3RfY291bnQoKQoreworCXsKKwkJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkKKwkJZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQKKwl9IHwgd2MgLWwKK30KKworIyBjNCAtIGM1CisjICAgIFwgYzYKKyMKKyMgVGhlcmUgYXJlIHR3byBjb25mbGljdHMgaGVyZToKKyMKKyMgMSkgQmVjYXVzZSBmb28uYyBpcyByZW5hbWVkIHRvIGJhci5jLCByZWN1cnNpdmUgd2lsbCBoYW5kbGUgdGhpcywKKyMgcmVzb2x2ZSB3b24ndC4KKyMKKyMgMikgT25lIGluIGNvbmZsaWN0LmMgYW5kIHRoYXQgd2lsbCBhbHdheXMgZmFpbC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29uZmxpY3RlZCBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIEEgPmNvbmZsaWN0LmMgJiYKKwlnaXQgYWRkIGNvbmZsaWN0LmMgJiYKKwllY2hvIGNvbnRlbnRzID5mb28uYyAmJgorCWdpdCBhZGQgZm9vLmMgJiYKKwlnaXQgY29tbWl0IC1tIGM0ICYmCisJZ2l0IHRhZyBjNCAmJgorCWVjaG8gQiA+Y29uZmxpY3QuYyAmJgorCWdpdCBhZGQgY29uZmxpY3QuYyAmJgorCWdpdCBtdiBmb28uYyBiYXIuYyAmJgorCWdpdCBjb21taXQgLW0gYzUgJiYKKwlnaXQgdGFnIGM1ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNCAmJgorCWVjaG8gQyA+Y29uZmxpY3QuYyAmJgorCWdpdCBhZGQgY29uZmxpY3QuYyAmJgorCWVjaG8gc2Vjb25kbGluZSA+PiBmb28uYyAmJgorCWdpdCBhZGQgZm9vLmMgJiYKKwlnaXQgY29tbWl0IC1tIGM2ICYmCisJZ2l0IHRhZyBjNgorJworCisjIEZpcnN0IGRvIHRoZSBtZXJnZSB3aXRoIHJlc29sdmUgYW5kIHJlY3Vyc2l2ZSB0aGVuIHZlcmlmeSB0aGF0CisjIHJlY3VzaXZlIGlzIGNob29zZW4uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHBpY2tzIHVwIHRoZSBiZXN0IHJlc3VsdCcgJworCWdpdCBjb25maWcgLS11bnNldC1hbGwgcHVsbC50d29oZWFkICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZXNvbHZlIGM2ICYmCisJcmVzb2x2ZV9jb3VudD0kKGNvbmZsaWN0X2NvdW50KSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIGM2ICYmCisJcmVjdXJzaXZlX2NvdW50PSQoY29uZmxpY3RfY291bnQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLXMgcmVzb2x2ZSBjNiAmJgorCWF1dG9fY291bnQ9JChjb25mbGljdF9jb3VudCkgJiYKKwl0ZXN0ICRhdXRvX2NvdW50ID0gJHJlY3Vyc2l2ZV9jb3VudCAmJgorCXRlc3QgJGF1dG9fY291bnQgIT0gJHJlc29sdmVfY291bnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgcGlja3MgdXAgdGhlIGJlc3QgcmVzdWx0IChmcm9tIGNvbmZpZyknICcKKwlnaXQgY29uZmlnIHB1bGwudHdvaGVhZCAicmVjdXJzaXZlIHJlc29sdmUiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZXNvbHZlIGM2ICYmCisJcmVzb2x2ZV9jb3VudD0kKGNvbmZsaWN0X2NvdW50KSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIGM2ICYmCisJcmVjdXJzaXZlX2NvdW50PSQoY29uZmxpY3RfY291bnQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjNiAmJgorCWF1dG9fY291bnQ9JChjb25mbGljdF9jb3VudCkgJiYKKwl0ZXN0ICRhdXRvX2NvdW50ID0gJHJlY3Vyc2l2ZV9jb3VudCAmJgorCXRlc3QgJGF1dG9fY291bnQgIT0gJHJlc29sdmVfY291bnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZXJyb3JzIG91dCBvbiBpbnZhbGlkIHN0cmF0ZWd5JyAnCisJZ2l0IGNvbmZpZyBwdWxsLnR3b2hlYWQgImZvb2JhciIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGM2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGVycm9ycyBvdXQgb24gaW52YWxpZCBzdHJhdGVneScgJworCWdpdCBjb25maWcgLS11bnNldC1hbGwgcHVsbC50d29oZWFkICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyAicmVzb2x2ZSByZWN1cnNpdmUiIGM2CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwMi1tZXJnZS1vY3RvcHVzLW1hbnkuc2ggYi90L3Q3NjAyLW1lcmdlLW9jdG9wdXMtbWFueS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NTVmMDlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwMi1tZXJnZS1vY3RvcHVzLW1hbnkuc2gKQEAgLTAsMCArMSwxMDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2UKKworVGVzdGluZyBvY3RvcHVzIG1lcmdlIHdpdGggbW9yZSB0aGFuIDI1IHJlZnMuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGMwID4gYzAuYyAmJgorCWdpdCBhZGQgYzAuYyAmJgorCWdpdCBjb21taXQgLW0gYzAgJiYKKwlnaXQgdGFnIGMwICYmCisJaT0xICYmCisJd2hpbGUgdGVzdCAkaSAtbGUgMzAKKwlkbworCQlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJCWVjaG8gYyRpID4gYyRpLmMgJiYKKwkJZ2l0IGFkZCBjJGkuYyAmJgorCQlnaXQgY29tbWl0IC1tIGMkaSAmJgorCQlnaXQgdGFnIGMkaSAmJgorCQlpPWBleHByICRpICsgMWAgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIsIGMzLCBjNCwgLi4uIGMyOScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlpPTIgJiYKKwlyZWZzPSIiICYmCisJd2hpbGUgdGVzdCAkaSAtbGUgMzAKKwlkbworCQlyZWZzPSIkcmVmcyBjJGkiCisJCWk9YGV4cHIgJGkgKyAxYAorCWRvbmUgJiYKKwlnaXQgbWVyZ2UgJHJlZnMgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiAhPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCWk9MSAmJgorCXdoaWxlIHRlc3QgJGkgLWxlIDMwCisJZG8KKwkJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMkaSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXiRpKSIgJiYKKwkJaT1gZXhwciAkaSArIDFgIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlICYmCisJaT0xICYmCisJd2hpbGUgdGVzdCAkaSAtbGUgMzAKKwlkbworCQl0ZXN0IC1mIGMkaS5jICYmCisJCWk9YGV4cHIgJGkgKyAxYCB8fCByZXR1cm4gMQorCWRvbmUKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK1RyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCBjMgorVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoIGMzCitUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggYzQKK01lcmdlIG1hZGUgYnkgdGhlICdvY3RvcHVzJyBzdHJhdGVneS4KKyBjMi5jIHwgMSArCisgYzMuYyB8IDEgKworIGM0LmMgfCAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjMi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGMzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzQuYworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG91dHB1dCB1c2VzIHByZXR0eSBuYW1lcycgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgYzIgYzMgYzQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK01lcmdlIG1hZGUgYnkgdGhlICdyZWN1cnNpdmUnIHN0cmF0ZWd5LgorIGM1LmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzUuYworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHJlZHVjZXMgaXJyZWxldmFudCByZW1vdGUgaGVhZHMnICcKKwlHSVRfTUVSR0VfVkVSQk9TSVRZPTAgZ2l0IG1lcmdlIGM0IGM1ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitGYXN0LWZvcndhcmRpbmcgdG86IGMxCitUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggYzIKK01lcmdlIG1hZGUgYnkgdGhlICdvY3RvcHVzJyBzdHJhdGVneS4KKyBjMS5jIHwgMSArCisgYzIuYyB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGMxLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzIuYworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZhc3QtZm9yd2FyZCBvdXRwdXQgdXNlcyBwcmV0dHkgbmFtZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIGMxIGMyID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwMy1tZXJnZS1yZWR1Y2UtaGVhZHMuc2ggYi90L3Q3NjAzLW1lcmdlLXJlZHVjZS1oZWFkcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODk0ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwMy1tZXJnZS1yZWR1Y2UtaGVhZHMuc2gKQEAgLTAsMCArMSwxNjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2UKKworVGVzdGluZyBvY3RvcHVzIG1lcmdlIHdoZW4gcmVkdWNpbmcgcGFyZW50cyB0byBpbmRlcGVuZGVudCBicmFuY2hlcy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIDAgLSAxCisjICAgXCAyCisjICAgXCAzCisjICAgXCA0IC0gNQorIworIyBTbyAxLCAyLCAzIGFuZCA1IHNob3VsZCBiZSBrZXB0LCA0IHNob3VsZCBiZSBhdm9pZGVkLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYzAgPiBjMC5jICYmCisJZ2l0IGFkZCBjMC5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMCAmJgorCWdpdCB0YWcgYzAgJiYKKwllY2hvIGMxID4gYzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCWdpdCBjb21taXQgLW0gYzEgJiYKKwlnaXQgdGFnIGMxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gYzIgPiBjMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMiAmJgorCWdpdCB0YWcgYzIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMyA+IGMzLmMgJiYKKwlnaXQgYWRkIGMzLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMzICYmCisJZ2l0IHRhZyBjMyAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGM0ID4gYzQuYyAmJgorCWdpdCBhZGQgYzQuYyAmJgorCWdpdCBjb21taXQgLW0gYzQgJiYKKwlnaXQgdGFnIGM0ICYmCisJZWNobyBjNSA+IGM1LmMgJiYKKwlnaXQgYWRkIGM1LmMgJiYKKwlnaXQgY29tbWl0IC1tIGM1ICYmCisJZ2l0IHRhZyBjNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyLCBjMywgYzQsIGM1JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiBjMyBjNCBjNSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiICE9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMyKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMzKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMykiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGM1KSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReNCkiICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwl0ZXN0IC1mIGMyLmMgJiYKKwl0ZXN0IC1mIGMzLmMgJiYKKwl0ZXN0IC1mIGM0LmMgJiYKKwl0ZXN0IC1mIGM1LmMgJiYKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtcyA+YWN0dWFsICYmCisJISBncmVwIGMxIGFjdHVhbCAmJgorCWdyZXAgYzIgYWN0dWFsICYmCisJZ3JlcCBjMyBhY3R1YWwgJiYKKwkhIGdyZXAgYzQgYWN0dWFsICYmCisJZ3JlcCBjNSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCBjMiwgYzMsIGM0LCBjNSBpbnRvIGMxJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBwdWxsIC4gYzIgYzMgYzQgYzUgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiAhPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMykiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjMpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjNSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjQpIiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlICYmCisJdGVzdCAtZiBjMC5jICYmCisJdGVzdCAtZiBjMS5jICYmCisJdGVzdCAtZiBjMi5jICYmCisJdGVzdCAtZiBjMy5jICYmCisJdGVzdCAtZiBjNC5jICYmCisJdGVzdCAtZiBjNS5jICYmCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLXMgPmFjdHVhbCAmJgorCSEgZ3JlcCBjMSBhY3R1YWwgJiYKKwlncmVwIGMyIGFjdHVhbCAmJgorCWdyZXAgYzMgYWN0dWFsICYmCisJISBncmVwIGM0IGFjdHVhbCAmJgorCWdyZXAgYzUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZm9yIGkgaW4gQSBCIEMgRCBFCisJZG8KKwkJZWNobyAkaSA+ICRpLmMgJiYKKwkJZ2l0IGFkZCAkaS5jICYmCisJCWdpdCBjb21taXQgLW0gJGkgJiYKKwkJZ2l0IHRhZyAkaQorCWRvbmUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEEgJiYKKwlmb3IgaSBpbiBGIEcgSCBJCisJZG8KKwkJZWNobyAkaSA+ICRpLmMgJiYKKwkJZ2l0IGFkZCAkaS5jICYmCisJCWdpdCBjb21taXQgLW0gJGkgJiYKKwkJZ2l0IHRhZyAkaQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgRSBhbmQgSScgJworCWdpdCByZXNldCAtLWhhcmQgQSAmJgorCWdpdCBtZXJnZSBFIEkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1lcmdlIHJlc3VsdCcgJworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReMSkgPSAkKGdpdCByZXYtcGFyc2UgRSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpID0gJChnaXQgcmV2LXBhcnNlIEkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEUgJiYKKwllY2hvIGZvbyA+IGZpbGUuYyAmJgorCWdpdCBhZGQgZmlsZS5jICYmCisJZ2l0IGNvbW1pdCAtbSBFMiAmJgorCWdpdCB0YWcgRTIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEkgJiYKKwllY2hvIGJhciA+ZmlsZS5jICYmCisJZ2l0IGFkZCBmaWxlLmMgJiYKKwlnaXQgY29tbWl0IC1tIEkyICYmCisJZ2l0IHRhZyBJMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBFMiBhbmQgSTIsIGNhdXNpbmcgYSBjb25mbGljdCBhbmQgcmVzb2x2ZSBpdCcgJworCWdpdCByZXNldCAtLWhhcmQgQSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBFMiBJMiAmJgorCWVjaG8gYmF6ID4gZmlsZS5jICYmCisJZ2l0IGFkZCBmaWxlLmMgJiYKKwlnaXQgY29tbWl0IC1tICJyZXNvbHZlIGNvbmZsaWN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgcmVzdWx0JyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSA9ICQoZ2l0IHJldi1wYXJzZSBFMikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpID0gJChnaXQgcmV2LXBhcnNlIEkyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmQgdG8gcmVkdW5kYW50IHJlZnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIGM0IGM1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSByZXN1bHQnICcKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBjNSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgdXAtdG8tZGF0ZSByZWR1bmRhbnQgcmVmcycgJworCWdpdCByZXNldCAtLWhhcmQgYzUgJiYKKwlnaXQgbWVyZ2UgYzAgYzQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1lcmdlIHJlc3VsdCcgJworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIGM1KQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDQtbWVyZ2UtY3VzdG9tLW1lc3NhZ2Uuc2ggYi90L3Q3NjA0LW1lcmdlLWN1c3RvbS1tZXNzYWdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5NjE5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjA0LW1lcmdlLWN1c3RvbS1tZXNzYWdlLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2UKKworVGVzdGluZyBtZXJnZSB3aGVuIHVzaW5nIGEgY3VzdG9tIG1lc3NhZ2UgZm9yIHRoZSBtZXJnZSBjb21taXQuJworCisuIC4vdGVzdC1saWIuc2gKKworY3JlYXRlX21lcmdlX21zZ3MoKSB7CisJZWNobyA+ZXhwLnN1YmplY3QgImN1c3RvbSBtZXNzYWdlIgorCisJY3AgZXhwLnN1YmplY3QgZXhwLmxvZyAmJgorCWVjaG8gPj5leHAubG9nICIiICYmCisJZWNobyA+PmV4cC5sb2cgIiogdGFnICdjMic6IiAmJgorCWVjaG8gPj5leHAubG9nICIgIGMyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYzAgPiBjMC5jICYmCisJZ2l0IGFkZCBjMC5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMCAmJgorCWdpdCB0YWcgYzAgJiYKKwllY2hvIGMxID4gYzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCWdpdCBjb21taXQgLW0gYzEgJiYKKwlnaXQgdGFnIGMxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gYzIgPiBjMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMiAmJgorCWdpdCB0YWcgYzIgJiYKKwljcmVhdGVfbWVyZ2VfbXNncworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMyIHdpdGggYSBjdXN0b20gbWVzc2FnZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLW0gIiQoY2F0IGV4cC5zdWJqZWN0KSIgYzIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL14kL2QiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHAuc3ViamVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1sb2cgYXBwZW5kcyB0byBjdXN0b20gbWVzc2FnZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLS1sb2cgLW0gIiQoY2F0IGV4cC5zdWJqZWN0KSIgYzIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL14kL2QiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHAubG9nIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDUtbWVyZ2UtcmVzb2x2ZS5zaCBiL3QvdDc2MDUtbWVyZ2UtcmVzb2x2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wY2I5ZDExCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwNS1tZXJnZS1yZXNvbHZlLnNoCkBAIC0wLDAgKzEsNDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2UKKworVGVzdGluZyB0aGUgcmVzb2x2ZSBzdHJhdGVneS4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYzAgPiBjMC5jICYmCisJZ2l0IGFkZCBjMC5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMCAmJgorCWdpdCB0YWcgYzAgJiYKKwllY2hvIGMxID4gYzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCWdpdCBjb21taXQgLW0gYzEgJiYKKwlnaXQgdGFnIGMxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gYzIgPiBjMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMiAmJgorCWdpdCB0YWcgYzIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMyA+IGMyLmMgJiYKKwlnaXQgYWRkIGMyLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMzICYmCisJZ2l0IHRhZyBjMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB0byBjMicgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBjMiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiICE9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMyKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwl0ZXN0IC1mIGMyLmMgJiYKKwl0ZXN0IDMgPSAkKGdpdCBscy10cmVlIC1yIEhFQUQgfCB3YyAtbCkgJiYKKwl0ZXN0IDMgPSAkKGdpdCBscy1maWxlcyB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMiB0byBjMyAoZmFpbHMpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZXNvbHZlIGMzCisnCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDYtbWVyZ2UtY3VzdG9tLnNoIGIvdC90NzYwNi1tZXJnZS1jdXN0b20uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGU4YzRkNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDYtbWVyZ2UtY3VzdG9tLnNoCkBAIC0wLDAgKzEsOTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJnaXQgbWVyZ2UKKworVGVzdGluZyBhIGN1c3RvbSBzdHJhdGVneS4KKworKiAgIChIRUFELCBtYXN0ZXIpIE1lcmdlIGNvbW1pdCAnYzMnCit8XAorfCAqICh0YWc6IGMzKSBjMworKiB8ICh0YWc6IGMxKSBjMQorfC8KK3wgKiB0YWc6IGMyKSBjMgorfC8KKyogKHRhZzogYzApIGMwCisiCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgY3VzdG9tIHN0cmF0ZWd5JyAnCisJY2F0ID5naXQtbWVyZ2UtdGhlaXJzIDw8LUVPRiAmJgorCSMhJFNIRUxMX1BBVEgKKwlldmFsIGdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBcXFwkXCQjCisJRU9GCisKKwljaG1vZCAreCBnaXQtbWVyZ2UtdGhlaXJzICYmCisJUEFUSD0uOiRQQVRIICYmCisJZXhwb3J0IFBBVEgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBjMCBjMC5jICYmCisJdGVzdF9jb21taXQgYzEgYzEuYyAmJgorCWdpdCByZXNldCAtLWtlZXAgYzAgJiYKKwllY2hvIGMxYzEgPmMxLmMgJiYKKwlnaXQgYWRkIGMxLmMgJiYKKwl0ZXN0X2NvbW1pdCBjMiBjMi5jICYmCisJZ2l0IHJlc2V0IC0ta2VlcCBjMCAmJgorCXRlc3RfY29tbWl0IGMzIGMzLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzIgd2l0aCBhIGN1c3RvbSBzdHJhdGVneScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKworCWdpdCByZXYtcGFyc2UgYzEgPmhlYWQub2xkICYmCisJZ2l0IHJldi1wYXJzZSBjMiA+c2Vjb25kLXBhcmVudC5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgYzJee3RyZWV9ID50cmVlLmV4cGVjdGVkICYmCisJZ2l0IG1lcmdlIC1zIHRoZWlycyBjMiAmJgorCisJZ2l0IHJldi1wYXJzZSBIRUFEID5oZWFkLm5ldyAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xID5maXJzdC1wYXJlbnQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMiA+c2Vjb25kLXBhcmVudCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0gPnRyZWUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYzIgSEVBRCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMyICYmCisKKwkhIHRlc3RfY21wIGhlYWQub2xkIGhlYWQubmV3ICYmCisJdGVzdF9jbXAgaGVhZC5vbGQgZmlyc3QtcGFyZW50ICYmCisJdGVzdF9jbXAgc2Vjb25kLXBhcmVudC5leHBlY3RlZCBzZWNvbmQtcGFyZW50ICYmCisJdGVzdF9jbXAgdHJlZS5leHBlY3RlZCB0cmVlICYmCisJdGVzdCAtZiBjMC5jICYmCisJZ3JlcCBjMWMxIGMxLmMgJiYKKwl0ZXN0IC1mIGMyLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJpdmlhbCBtZXJnZSB3aXRoIGN1c3RvbSBzdHJhdGVneScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKworCWdpdCByZXYtcGFyc2UgYzEgPmhlYWQub2xkICYmCisJZ2l0IHJldi1wYXJzZSBjMyA+c2Vjb25kLXBhcmVudC5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgYzNee3RyZWV9ID50cmVlLmV4cGVjdGVkICYmCisJZ2l0IG1lcmdlIC1zIHRoZWlycyBjMyAmJgorCisJZ2l0IHJldi1wYXJzZSBIRUFEID5oZWFkLm5ldyAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xID5maXJzdC1wYXJlbnQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMiA+c2Vjb25kLXBhcmVudCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0gPnRyZWUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYzMgSEVBRCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMzICYmCisKKwkhIHRlc3RfY21wIGhlYWQub2xkIGhlYWQubmV3ICYmCisJdGVzdF9jbXAgaGVhZC5vbGQgZmlyc3QtcGFyZW50ICYmCisJdGVzdF9jbXAgc2Vjb25kLXBhcmVudC5leHBlY3RlZCBzZWNvbmQtcGFyZW50ICYmCisJdGVzdF9jbXAgdHJlZS5leHBlY3RlZCB0cmVlICYmCisJdGVzdCAtZiBjMC5jICYmCisJISB0ZXN0IC1lIGMxLmMgJiYKKwl0ZXN0IC1mIGMzLmMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjA3LW1lcmdlLW92ZXJ3cml0ZS5zaCBiL3QvdDc2MDctbWVyZ2Utb3ZlcndyaXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1NDdlYjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjA3LW1lcmdlLW92ZXJ3cml0ZS5zaApAQCAtMCwwICsxLDE5MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1tZXJnZQorCitEbyBub3Qgb3ZlcndyaXRlIGNoYW5nZXMuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBjMCBjMC5jICYmCisJdGVzdF9jb21taXQgYzEgYzEuYyAmJgorCXRlc3RfY29tbWl0IGMxYSBjMS5jICJjMSBhIiAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbW1pdCBjMiBjMi5jICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCW1rZGlyIHN1YiAmJgorCWVjaG8gInN1Yi9mIiA+IHN1Yi9mICYmCisJbWtkaXIgc3ViMiAmJgorCWVjaG8gInN1YjIvZiIgPiBzdWIyL2YgJiYKKwlnaXQgYWRkIHN1Yi9mIHN1YjIvZiAmJgorCWdpdCBjb21taXQgLW0gc3ViICYmCisJZ2l0IHRhZyBzdWIgJiYKKwllY2hvICJWRVJZIElNUE9SVEFOVCBDSEFOR0VTIiA+IGltcG9ydGFudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBvdmVyd3JpdGUgdW50cmFja2VkIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJY3AgaW1wb3J0YW50IGMyLmMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgYzIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG92ZXJ3cml0ZSB0cmFja2VkIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJY3AgaW1wb3J0YW50IGMyLmMgJiYKKwlnaXQgYWRkIGMyLmMgJiYKKwlnaXQgY29tbWl0IC1tIGltcG9ydGFudCAmJgorCWdpdCBjaGVja291dCBjMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBvdmVyd3JpdGUgbmV3IGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJY3AgaW1wb3J0YW50IGMyLmMgJiYKKwlnaXQgYWRkIGMyLmMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgYzIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBvdmVyd3JpdGUgc3RhZ2VkIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJY3AgaW1wb3J0YW50IGMyLmMgJiYKKwlnaXQgYWRkIGMyLmMgJiYKKwlybSBjMi5jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJZ2l0IGNoZWNrb3V0IGMyLmMgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgYzIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBvdmVyd3JpdGUgcmVtb3ZlZCBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBybSBjMS5jICYmCisJZ2l0IGNvbW1pdCAtbSAicm0gYzEuYyIgJiYKKwljcCBpbXBvcnRhbnQgYzEuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMWEgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgYzEuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBvdmVyd3JpdGUgcmUtYWRkZWQgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgcm0gYzEuYyAmJgorCWdpdCBjb21taXQgLW0gInJtIGMxLmMiICYmCisJY3AgaW1wb3J0YW50IGMxLmMgJiYKKwlnaXQgYWRkIGMxLmMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzFhICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IGMxLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHJlbW92ZWQgZmlsZSB3aXRoIHN0YWdlZCBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBybSBjMS5jICYmCisJZ2l0IGNvbW1pdCAtbSAicm0gYzEuYyIgJiYKKwljcCBpbXBvcnRhbnQgYzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCXJtIGMxLmMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzFhICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJZ2l0IGNoZWNrb3V0IGMxLmMgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgYzEuYworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd3aWxsIG5vdCBvdmVyd3JpdGUgdW5zdGFnZWQgY2hhbmdlcyBpbiByZW5hbWVkIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG12IGMxLmMgb3RoZXIuYyAmJgorCWdpdCBjb21taXQgLW0gcmVuYW1lICYmCisJY3AgaW1wb3J0YW50IG90aGVyLmMgJiYKKwlnaXQgbWVyZ2UgYzFhICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IG90aGVyLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBzdWJ0cmVlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXJtIC1yZiBzdWIgJiYKKwlta2RpciAtcCBzdWIvZiAmJgorCWNwIGltcG9ydGFudCBzdWIvZi9pbXBvcnRhbnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc3ViICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IHN1Yi9mL2ltcG9ydGFudAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Vycm9yOiBUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6CisJc3ViCisJc3ViMgorUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBjYW4gbWVyZ2UuCitBYm9ydGluZworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZSBpbiBsZWFkaW5nIHBhdGgnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJcm0gLXJmIHN1YiAmJgorCWNwIGltcG9ydGFudCBzdWIgJiYKKwljcCBpbXBvcnRhbnQgc3ViMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzdWIgMj5vdXQgJiYKKwl0ZXN0X2NtcCBvdXQgZXhwZWN0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IHN1YiAmJgorCXRlc3RfY21wIGltcG9ydGFudCBzdWIyICYmCisJcm0gLWYgc3ViIHN1YjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBzeW1saW5rIGluIGxlYWRpbmcgcGF0aCcgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlybSAtcmYgc3ViICYmCisJbWtkaXIgc3ViMiAmJgorCWxuIC1zIHN1YjIgc3ViICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHN1YiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd3aWxsIG5vdCBiZSBjb25mdXNlZCBieSBzeW1saW5rIGluIGxlYWRpbmcgcGF0aCcgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlybSAtcmYgc3ViICYmCisJbG4gLXMgc3ViMiBzdWIgJiYKKwlnaXQgYWRkIHN1YiAmJgorCWdpdCBjb21taXQgLW0gbG4gJiYKKwlnaXQgY2hlY2tvdXQgc3ViCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZXJyb3I6IFVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAnYzAuYycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UuCitmYXRhbDogcmVhZC10cmVlIGZhaWxlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZSBvbiB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBybSAtZnIgLiAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBuZXcgJiYKKwljcCBpbXBvcnRhbnQgYzAuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMCAyPm91dCAmJgorCXRlc3RfaTE4bmNtcCBvdXQgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZSBvbiB1bmJvcm4gYnJhbmNoIC5naXQvTUVSR0VfSEVBRCBzYW5pdHkgZXRjLicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gYzAuYyIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgYzAuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgbWVyZ2UgbGVhdmVzIHVuYm9ybiBicmFuY2ggaW4gdGhlIHdvbWInICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHVuYm9ybiBicmFuY2ggYW5kIGNvbnRlbnQnICcKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy91bmJvcm4gJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZWNobyBmb28gPiB0cmFja2VkLWZpbGUgJiYKKwlnaXQgYWRkIHRyYWNrZWQtZmlsZSAmJgorCWVjaG8gYmFyID4gdW50cmFja2VkLWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3QgY2xvYmJlciBXVC9pbmRleCB3aGVuIG1lcmdpbmcgaW50byB1bmJvcm4nICcKKwlnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ3JlcCBmb28gdHJhY2tlZC1maWxlICYmCisJZ2l0IHNob3cgOnRyYWNrZWQtZmlsZSA+ZXhwZWN0ICYmCisJZ3JlcCBmb28gZXhwZWN0ICYmCisJZ3JlcCBiYXIgdW50cmFja2VkLWZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjA4LW1lcmdlLW1lc3NhZ2VzLnNoIGIvdC90NzYwOC1tZXJnZS1tZXNzYWdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTdlMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwOC1tZXJnZS1tZXNzYWdlcy5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBhdXRvLWdlbmVyYXRlZCBtZXJnZSBtZXNzYWdlcycKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19vbmVsaW5lKCkgeworCWVjaG8gIiQxIiB8IHNlZCAicy9RLycvZyIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBsb2NhbCBicmFuY2gnICcKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItMSAmJgorCWdpdCBjaGVja291dCAtYiBsb2NhbC1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBicmFuY2gtMSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItMiAmJgorCWdpdCBtZXJnZSBsb2NhbC1icmFuY2ggJiYKKwljaGVja19vbmVsaW5lICJNZXJnZSBicmFuY2ggUWxvY2FsLWJyYW5jaFEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG9jdG9wdXMgYnJhbmNoZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgb2N0b3B1cy1hIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG9jdG9wdXMtMSAmJgorCWdpdCBjaGVja291dCAtYiBvY3RvcHVzLWIgbWFzdGVyICYmCisJdGVzdF9jb21taXQgb2N0b3B1cy0yICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBvY3RvcHVzLWEgb2N0b3B1cy1iICYmCisJY2hlY2tfb25lbGluZSAiTWVyZ2UgYnJhbmNoZXMgUW9jdG9wdXMtYVEgYW5kIFFvY3RvcHVzLWJRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB0YWcnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGFnLWJyYW5jaCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCB0YWctMSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItMyAmJgorCWdpdCBtZXJnZSB0YWctMSAmJgorCWNoZWNrX29uZWxpbmUgIk1lcmdlIHRhZyBRdGFnLTFRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXMgdGFnJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGFtYmlndW91cyBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBhbWJpZ3VvdXMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyLTQgJiYKKwlnaXQgbWVyZ2UgYW1iaWd1b3VzICYmCisJY2hlY2tfb25lbGluZSAiTWVyZ2UgdGFnIFFhbWJpZ3VvdXNRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUtdHJhY2tpbmcgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHJlbW90ZSBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCByZW1vdGUtMSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIHJlbW90ZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItNSAmJgorCWdpdCBtZXJnZSBvcmlnaW4vbWFzdGVyICYmCisJY2hlY2tfb25lbGluZSAiTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBRb3JpZ2luL21hc3RlclEiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwOS1tZXJnZS1jby1lcnJvci1tc2dzLnNoIGIvdC90NzYwOS1tZXJnZS1jby1lcnJvci1tc2dzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBlNGE2ODIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjA5LW1lcmdlLWNvLWVycm9yLW1zZ3Muc2gKQEAgLTAsMCArMSwxMzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1bnBhY2stdHJlZXMgZXJyb3IgbWVzc2FnZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBvbmUgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBGaXJzdCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCWVjaG8gdHdvID50d28gJiYKKwllY2hvIHRocmVlID50aHJlZSAmJgorCWVjaG8gZm91ciA+Zm91ciAmJgorCWVjaG8gZml2ZSA+Zml2ZSAmJgorCWdpdCBhZGQgdHdvIHRocmVlIGZvdXIgZml2ZSAmJgorCWdpdCBjb21taXQgLW0gU2Vjb25kICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBvdGhlciA+dHdvICYmCisJZWNobyBvdGhlciA+dGhyZWUgJiYKKwllY2hvIG90aGVyID5mb3VyICYmCisJZWNobyBvdGhlciA+Zml2ZQorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Vycm9yOiBUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6CisJZml2ZQorCWZvdXIKKwl0aHJlZQorCXR3bworUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBjYW4gbWVyZ2UuCitBYm9ydGluZworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBmaWxlcyBvdmVyd3JpdHRlbiBieSBtZXJnZSAoZmFzdCBhbmQgbm9uLWZhc3QgZm9yd2FyZCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoIDI+b3V0ICYmCisJdGVzdF9jbXAgb3V0IGV4cGVjdCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCSgKKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0wICYmCisJCWV4cG9ydCBHSVRfTUVSR0VfVkVSQk9TSVRZICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2ggMj5vdXQyCisJKSAmJgorCXRlc3RfY21wIG91dDIgZXhwZWN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Vycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToKKwlmb3VyCisJdGhyZWUKKwl0d28KK1BsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgY2FuIG1lcmdlLgorZXJyb3I6IFRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToKKwlmaXZlCitQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IGNhbiBtZXJnZS4KK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGZpbGVzIG9yIGxvY2FsIGNoYW5nZXMgb3Zld3JpdHRlbiBieSBtZXJnZScgJworCWdpdCBhZGQgdHdvICYmCisJZ2l0IGFkZCB0aHJlZSAmJgorCWdpdCBhZGQgZm91ciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2ggMj5vdXQgJiYKKwl0ZXN0X2NtcCBvdXQgZXhwZWN0CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OgorCXJlcC9vbmUKKwlyZXAvdHdvCitQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IGNhbiBzd2l0Y2ggYnJhbmNoZXMuCitBYm9ydGluZworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm5vdCBzd2l0Y2ggYnJhbmNoZXMgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzJyAnCisJZ2l0IGFkZCBmaXZlICYmCisJbWtkaXIgcmVwICYmCisJZWNobyBvbmUgPnJlcC9vbmUgJiYKKwllY2hvIHR3byA+cmVwL3R3byAmJgorCWdpdCBhZGQgcmVwL29uZSByZXAvdHdvICYmCisJZ2l0IGNvbW1pdCAtbSBGb3VydGggJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyB1bm8gPnJlcC9vbmUgJiYKKwllY2hvIGRvcyA+cmVwL3R3byAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBicmFuY2ggMj5vdXQgJiYKKwl0ZXN0X2NtcCBvdXQgZXhwZWN0CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OgorCXJlcC9vbmUKKwlyZXAvdHdvCitQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IGNhbiBzd2l0Y2ggYnJhbmNoZXMuCitBYm9ydGluZworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCB1cHRvZGF0ZSBmaWxlIHBvcmNlbGFpbiBjaGVja291dCBlcnJvcicgJworCWdpdCBhZGQgcmVwL29uZSByZXAvdHdvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGJyYW5jaCAyPm91dCAmJgorCXRlc3RfY21wIG91dCBleHBlY3QKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitlcnJvcjogVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiBpdDoKKwlyZXAKKwlyZXAyCisKK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90X3VwdG9kYXRlX2RpciBwb3JjZWxhaW4gY2hlY2tvdXQgZXJyb3InICcKKwlnaXQgaW5pdCB1cHRvZGF0ZSAmJgorCWNkIHVwdG9kYXRlICYmCisJbWtkaXIgcmVwICYmCisJbWtkaXIgcmVwMiAmJgorCXRvdWNoIHJlcC9mb28gJiYKKwl0b3VjaCByZXAyL2ZvbyAmJgorCWdpdCBhZGQgcmVwL2ZvbyByZXAyL2ZvbyAmJgorCWdpdCBjb21taXQgLW0gaW5pdCAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2ggJiYKKwlnaXQgcm0gcmVwIC1yICYmCisJZ2l0IHJtIHJlcDIgLXIgJiYKKwk+cmVwICYmCisJPnJlcDIgJiYKKwlnaXQgYWRkIHJlcCByZXAyJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCB0ZXN0IGFzIGEgZmlsZSIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJPnJlcC91bnRyYWNrZWQtZmlsZSAmJgorCT5yZXAyL3VudHJhY2tlZC1maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGJyYW5jaCAyPm91dCAmJgorCXRlc3RfY21wIG91dCAuLi9leHBlY3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjEwLW1lcmdldG9vbC5zaCBiL3QvdDc2MTAtbWVyZ2V0b29sLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJjMzg3MzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjEwLW1lcmdldG9vbC5zaApAQCAtMCwwICsxLDUyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDaGFybGVzIEJhaWxleQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2V0b29sCisKK1Rlc3RpbmcgYmFzaWMgbWVyZ2UgdG9vbCBpbnZvY2F0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworIyBBbGwgdGhlIG1lcmdldG9vbCB0ZXN0IHdvcmsgYnkgY2hlY2tpbmcgb3V0IGEgdGVtcG9yYXJ5IGJyYW5jaCBiYXNlZAorIyBvZmYgJ2JyYW5jaDEnIGFuZCB0aGVuIG1lcmdpbmcgaW4gbWFzdGVyIGFuZCBjaGVja2luZyB0aGUgcmVzdWx0cyBvZgorIyBydW5uaW5nIG1lcmdldG9vbAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworICAgIGdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorICAgIGVjaG8gbWFzdGVyID5maWxlMSAmJgorICAgIGVjaG8gbWFzdGVyIHNwYWNlZCA+InNwYWNlZCBuYW1lIiAmJgorICAgIGVjaG8gbWFzdGVyIGZpbGUxMSA+ZmlsZTExICYmCisgICAgZWNobyBtYXN0ZXIgZmlsZTEyID5maWxlMTIgJiYKKyAgICBlY2hvIG1hc3RlciBmaWxlMTMgPmZpbGUxMyAmJgorICAgIGVjaG8gbWFzdGVyIGZpbGUxNCA+ZmlsZTE0ICYmCisgICAgbWtkaXIgc3ViZGlyICYmCisgICAgZWNobyBtYXN0ZXIgc3ViID5zdWJkaXIvZmlsZTMgJiYKKyAgICB0ZXN0X2NyZWF0ZV9yZXBvIHN1Ym1vZCAmJgorICAgICgKKwljZCBzdWJtb2QgJiYKKwk6ID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBmb28iCisgICAgKSAmJgorICAgIGdpdCBzdWJtb2R1bGUgYWRkIGdpdDovL2V4YW1wbGUuY29tL3N1Ym1vZCBzdWJtb2QgJiYKKyAgICBnaXQgYWRkIGZpbGUxICJzcGFjZWQgbmFtZSIgZmlsZTFbMS00XSBzdWJkaXIvZmlsZTMgLmdpdG1vZHVsZXMgc3VibW9kICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiYWRkIGluaXRpYWwgdmVyc2lvbnMiICYmCisKKyAgICBnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMSBtYXN0ZXIgJiYKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorICAgIGVjaG8gYnJhbmNoMSBjaGFuZ2UgPmZpbGUxICYmCisgICAgZWNobyBicmFuY2gxIG5ld2ZpbGUgPmZpbGUyICYmCisgICAgZWNobyBicmFuY2gxIHNwYWNlZCA+InNwYWNlZCBuYW1lIiAmJgorICAgIGVjaG8gYnJhbmNoMSBib3RoIGFkZGVkID5ib3RoICYmCisgICAgZWNobyBicmFuY2gxIGNoYW5nZSBmaWxlMTEgPmZpbGUxMSAmJgorICAgIGVjaG8gYnJhbmNoMSBjaGFuZ2UgZmlsZTEzID5maWxlMTMgJiYKKyAgICBlY2hvIGJyYW5jaDEgc3ViID5zdWJkaXIvZmlsZTMgJiYKKyAgICAoCisJY2Qgc3VibW9kICYmCisJZWNobyBicmFuY2gxIHN1Ym1vZHVsZSA+YmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgYmFyIG9uIGJyYW5jaDEiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHN1Ym1vZC1icmFuY2gxCisgICAgKSAmJgorICAgIGdpdCBhZGQgZmlsZTEgInNwYWNlZCBuYW1lIiBmaWxlMTEgZmlsZTEzIGZpbGUyIHN1YmRpci9maWxlMyBzdWJtb2QgJiYKKyAgICBnaXQgYWRkIGJvdGggJiYKKyAgICBnaXQgcm0gZmlsZTEyICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSBjaGFuZ2VzIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IC1iIHN0YXNoMSBtYXN0ZXIgJiYKKyAgICBlY2hvIHN0YXNoMSBjaGFuZ2UgZmlsZTExID5maWxlMTEgJiYKKyAgICBnaXQgYWRkIGZpbGUxMSAmJgorICAgIGdpdCBjb21taXQgLW0gInN0YXNoMSBjaGFuZ2VzIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IC1iIHN0YXNoMiBtYXN0ZXIgJiYKKyAgICBlY2hvIHN0YXNoMiBjaGFuZ2UgZmlsZTExID5maWxlMTEgJiYKKyAgICBnaXQgYWRkIGZpbGUxMSAmJgorICAgIGdpdCBjb21taXQgLW0gInN0YXNoMiBjaGFuZ2VzIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgZWNobyBtYXN0ZXIgdXBkYXRlZCA+ZmlsZTEgJiYKKyAgICBlY2hvIG1hc3RlciBuZXcgPmZpbGUyICYmCisgICAgZWNobyBtYXN0ZXIgdXBkYXRlZCBzcGFjZWQgPiJzcGFjZWQgbmFtZSIgJiYKKyAgICBlY2hvIG1hc3RlciBib3RoIGFkZGVkID5ib3RoICYmCisgICAgZWNobyBtYXN0ZXIgdXBkYXRlZCBmaWxlMTIgPmZpbGUxMiAmJgorICAgIGVjaG8gbWFzdGVyIHVwZGF0ZWQgZmlsZTE0ID5maWxlMTQgJiYKKyAgICBlY2hvIG1hc3RlciBuZXcgc3ViID5zdWJkaXIvZmlsZTMgJiYKKyAgICAoCisJY2Qgc3VibW9kICYmCisJZWNobyBtYXN0ZXIgc3VibW9kdWxlID5iYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBiYXIgb24gbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBzdWJtb2QtbWFzdGVyCisgICAgKSAmJgorICAgIGdpdCBhZGQgZmlsZTEgInNwYWNlZCBuYW1lIiBmaWxlMTIgZmlsZTE0IGZpbGUyIHN1YmRpci9maWxlMyBzdWJtb2QgJiYKKyAgICBnaXQgYWRkIGJvdGggJiYKKyAgICBnaXQgcm0gZmlsZTExICYmCisgICAgZ2l0IGNvbW1pdCAtbSAibWFzdGVyIHVwZGF0ZXMiICYmCisKKyAgICBnaXQgY29uZmlnIG1lcmdlLnRvb2wgbXl0b29sICYmCisgICAgZ2l0IGNvbmZpZyBtZXJnZXRvb2wubXl0b29sLmNtZCAiY2F0IFwiXCRSRU1PVEVcIiA+XCJcJE1FUkdFRFwiIiAmJgorICAgIGdpdCBjb25maWcgbWVyZ2V0b29sLm15dG9vbC50cnVzdEV4aXRDb2RlIHRydWUgJiYKKyAgICBnaXQgY29uZmlnIG1lcmdldG9vbC5teWJhc2UuY21kICJjYXQgXCJcJEJBU0VcIiA+XCJcJE1FUkdFRFwiIiAmJgorICAgIGdpdCBjb25maWcgbWVyZ2V0b29sLm15YmFzZS50cnVzdEV4aXRDb2RlIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIG1lcmdldG9vbCcgJworICAgIGdpdCBjaGVja291dCAtYiB0ZXN0MSBicmFuY2gxICYmCisgICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyID4vZGV2L251bGwgMj4mMSAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUxICkgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTIgInNwYWNlZCBuYW1lIiA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvZmlsZTMgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEyID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIm1hc3RlciB1cGRhdGVkIiAmJgorICAgIHRlc3QgIiQoY2F0IGZpbGUyKSIgPSAibWFzdGVyIG5ldyIgJiYKKyAgICB0ZXN0ICIkKGNhdCBzdWJkaXIvZmlsZTMpIiA9ICJtYXN0ZXIgbmV3IHN1YiIgJiYKKyAgICB0ZXN0ICIkKGNhdCBzdWJtb2QvYmFyKSIgPSAiYnJhbmNoMSBzdWJtb2R1bGUiICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIGNybGYnICcKKyAgICBnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorICAgIGdpdCBjaGVja291dCAtYiB0ZXN0MiBicmFuY2gxICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgInNwYWNlZCBuYW1lIiA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIHN1YmRpci9maWxlMyA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgIHRlc3QgIiQocHJpbnRmIHggfCBjYXQgZmlsZTEgLSkiID0gIiQocHJpbnRmICJtYXN0ZXIgdXBkYXRlZFxyXG54IikiICYmCisgICAgdGVzdCAiJChwcmludGYgeCB8IGNhdCBmaWxlMiAtKSIgPSAiJChwcmludGYgIm1hc3RlciBuZXdcclxueCIpIiAmJgorICAgIHRlc3QgIiQocHJpbnRmIHggfCBjYXQgc3ViZGlyL2ZpbGUzIC0pIiA9ICIkKHByaW50ZiAibWFzdGVyIG5ldyBzdWJcclxueCIpIiAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCAtIGF1dG9jcmxmIiAmJgorICAgIGdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorICAgIGdpdCByZXNldCAtLWhhcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIGluIHN1YmRpcicgJworICAgIGdpdCBjaGVja291dCAtYiB0ZXN0MyBicmFuY2gxICYmCisgICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKyAgICAoCisJY2Qgc3ViZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciA+L2Rldi9udWxsIDI+JjEgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTMgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwl0ZXN0ICIkKGNhdCBmaWxlMykiID0gIm1hc3RlciBuZXcgc3ViIgorICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIG9uIGZpbGUgaW4gcGFyZW50IGRpcicgJworICAgICgKKwljZCBzdWJkaXIgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLi4vZmlsZTEgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLi4vZmlsZTIgLi4vc3BhY2VkXCBuYW1lID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC4uL2JvdGggPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIC4uL2ZpbGUxMSA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLi4vZmlsZTEyID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCAuLi9zdWJtb2QgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwl0ZXN0ICIkKGNhdCAuLi9maWxlMSkiID0gIm1hc3RlciB1cGRhdGVkIiAmJgorCXRlc3QgIiQoY2F0IC4uL2ZpbGUyKSIgPSAibWFzdGVyIG5ldyIgJiYKKwl0ZXN0ICIkKGNhdCAuLi9zdWJtb2QvYmFyKSIgPSAiYnJhbmNoMSBzdWJtb2R1bGUiICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCAtIHN1YmRpciIKKyAgICApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBza2lwcyBhdXRvcmVzb2x2ZWQnICcKKyAgICBnaXQgY2hlY2tvdXQgLWIgdGVzdDQgYnJhbmNoMSAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorICAgIHRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKyAgICAoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEyID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICBvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisgICAgdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorICAgIGdpdCByZXNldCAtLWhhcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIG1lcmdlcyBhbGwgZnJvbSBzdWJkaXInICcKKyAgICAoCisJY2Qgc3ViZGlyICYmCisJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCBmYWxzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwkoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIC4uL3N1Ym1vZCApICYmCisJKCB5ZXMgImQiICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgKSAmJgorCXRlc3QgIiQoY2F0IC4uL2ZpbGUxKSIgPSAibWFzdGVyIHVwZGF0ZWQiICYmCisJdGVzdCAiJChjYXQgLi4vZmlsZTIpIiA9ICJtYXN0ZXIgbmV3IiAmJgorCXRlc3QgIiQoY2F0IGZpbGUzKSIgPSAibWFzdGVyIG5ldyBzdWIiICYmCisJKCBjZCAuLiAmJiBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiApICYmCisJdGVzdCAiJChjYXQgLi4vc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMiByZXNvbHZlZCBieSBtZXJnZXRvb2wgZnJvbSBzdWJkaXIiCisgICAgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgc2tpcHMgcmVzb2x2ZWQgcGF0aHMgd2hlbiByZXJlcmUgaXMgYWN0aXZlJyAnCisgICAgZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisgICAgcm0gLXJmIC5naXQvcnItY2FjaGUgJiYKKyAgICBnaXQgY2hlY2tvdXQgLWIgdGVzdDUgYnJhbmNoMQorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICAoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0IHN1Ym1vZCA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICJkIiAiZCIgfCBnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0ID4vZGV2L251bGwgMj4mMSApICYmCisgICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKyAgICBvdXRwdXQ9IiQoeWVzICJuIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorICAgIHRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKyAgICBnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0ZWQgc3Rhc2ggc2V0cyB1cCByZXJlcmUnICAnCisgICAgZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisgICAgZ2l0IGNoZWNrb3V0IHN0YXNoMSAmJgorICAgIGVjaG8gIkNvbmZsaWN0aW5nIHN0YXNoIGNvbnRlbnQiID5maWxlMTEgJiYKKyAgICBnaXQgc3Rhc2ggJiYKKworICAgIGdpdCBjaGVja291dCAtLWRldGFjaCBzdGFzaDIgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYXBwbHkgJiYKKworICAgIHRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKyAgICBjb25mbGljdHM9IiQoZ2l0IHJlcmVyZSByZW1haW5pbmcpIiAmJgorICAgIHRlc3QgIiRjb25mbGljdHMiID0gImZpbGUxMSIgJiYKKyAgICBvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisgICAgdGVzdCAiJG91dHB1dCIgIT0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKworICAgIGdpdCBjb21taXQgLWFtICJzYXZlIHRoZSBzdGFzaCByZXNvbHV0aW9uIiAmJgorCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzdGFzaDIgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYXBwbHkgJiYKKworICAgIHRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKyAgICBjb25mbGljdHM9IiQoZ2l0IHJlcmVyZSByZW1haW5pbmcpIiAmJgorICAgIHRlc3QgLXogIiRjb25mbGljdHMiICYmCisgICAgb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorICAgIHRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIHRha2VzIHBhcnRpYWwgcGF0aCcgJworICAgIGdpdCByZXNldCAtLWhhcmQKKyAgICBnaXQgY29uZmlnIHJlcmVyZS5lbmFibGVkIGZhbHNlICYmCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3QxMiBicmFuY2gxICYmCisgICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisKKyAgICAjc2hvdWxkbnQgbmVlZCB0aGVzZSBsaW5lcworICAgICMoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICMoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMiA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICMoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICMoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKworICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIgKSAmJgorCisgICAgdGVzdCAiJChjYXQgc3ViZGlyL2ZpbGUzKSIgPSAibWFzdGVyIG5ldyBzdWIiICYmCisgICAgZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVkIHZzIG1vZGlmaWVkIHN1Ym1vZHVsZScgJworICAgIGdpdCBjaGVja291dCAtYiB0ZXN0NiBicmFuY2gxICYmCisgICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKyAgICBtdiBzdWJtb2Qgc3VibW9kLW1vdmVkYXNpZGUgJiYKKyAgICBnaXQgcm0gc3VibW9kICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiU3VibW9kdWxlIGRlbGV0ZWQgZnJvbSBicmFuY2giICYmCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3Q2LmEgdGVzdDYgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisgICAgdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisgICAgcm1kaXIgc3VibW9kICYmIG12IHN1Ym1vZC1tb3ZlZGFzaWRlIHN1Ym1vZCAmJgorICAgIHRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJicmFuY2gxIHN1Ym1vZHVsZSIgJiYKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorICAgIHRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJtYXN0ZXIgc3VibW9kdWxlIiAmJgorICAgIG91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKyAgICB0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkga2VlcGluZyBtb2R1bGUiICYmCisKKyAgICBtdiBzdWJtb2Qgc3VibW9kLW1vdmVkYXNpZGUgJiYKKyAgICBnaXQgY2hlY2tvdXQgLWIgdGVzdDYuYiB0ZXN0NiAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorICAgIHRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorICAgIHRlc3QgISAtZSBzdWJtb2QgJiYKKyAgICBvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisgICAgdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorICAgIGdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGRlbGV0aW5nIG1vZHVsZSIgJiYKKworICAgIG12IHN1Ym1vZC1tb3ZlZGFzaWRlIHN1Ym1vZCAmJgorICAgIGdpdCBjaGVja291dCAtYiB0ZXN0Ni5jIG1hc3RlciAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3Q2ICYmCisgICAgdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisgICAgdGVzdCAhIC1lIHN1Ym1vZCAmJgorICAgIHRlc3QgLWQgc3VibW9kLm9yaWcgJiYKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorICAgIG91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKyAgICB0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkgZGVsZXRpbmcgbW9kdWxlIiAmJgorICAgIG12IHN1Ym1vZC5vcmlnIHN1Ym1vZCAmJgorCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3Q2LmQgbWFzdGVyICYmCisgICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdDYgJiYKKyAgICB0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisgICAgKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKyAgICB0ZXN0ICIkKGNhdCBzdWJtb2QvYmFyKSIgPSAibWFzdGVyIHN1Ym1vZHVsZSIgJiYKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorICAgIHRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJtYXN0ZXIgc3VibW9kdWxlIiAmJgorICAgIG91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKyAgICB0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkga2VlcGluZyBtb2R1bGUiICYmCisgICAgZ2l0IHJlc2V0IC0taGFyZCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgdnMgbW9kaWZpZWQgc3VibW9kdWxlJyAnCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3Q3IGJyYW5jaDEgJiYKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorICAgIG12IHN1Ym1vZCBzdWJtb2QtbW92ZWRhc2lkZSAmJgorICAgIGdpdCBybSBzdWJtb2QgJiYKKyAgICBlY2hvIG5vdCBhIHN1Ym1vZHVsZSA+c3VibW9kICYmCisgICAgZ2l0IGFkZCBzdWJtb2QgJiYKKyAgICBnaXQgY29tbWl0IC1tICJTdWJtb2R1bGUgcGF0aCBiZWNvbWVzIGZpbGUiICYmCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3Q3LmEgYnJhbmNoMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKyAgICB0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisgICAgKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKyAgICBybWRpciBzdWJtb2QgJiYgbXYgc3VibW9kLW1vdmVkYXNpZGUgc3VibW9kICYmCisgICAgdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gImJyYW5jaDEgc3VibW9kdWxlIiAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisgICAgb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorICAgIHRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKyAgICBnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBrZWVwaW5nIG1vZHVsZSIgJiYKKworICAgIG12IHN1Ym1vZCBzdWJtb2QtbW92ZWRhc2lkZSAmJgorICAgIGdpdCBjaGVja291dCAtYiB0ZXN0Ny5iIHRlc3Q3ICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorICAgIHRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKyAgICAoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdCAiJChjYXQgc3VibW9kKSIgPSAibm90IGEgc3VibW9kdWxlIiAmJgorICAgIG91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKyAgICB0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkga2VlcGluZyBmaWxlIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3Q3LmMgbWFzdGVyICYmCisgICAgcm1kaXIgc3VibW9kICYmIG12IHN1Ym1vZC1tb3ZlZGFzaWRlIHN1Ym1vZCAmJgorICAgIHRlc3QgISAtZSBzdWJtb2Qub3JpZyAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3Q3ICYmCisgICAgdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKyAgICAoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisgICAgdGVzdCAtZCBzdWJtb2Qub3JpZyAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdCAiJChjYXQgc3VibW9kKSIgPSAibm90IGEgc3VibW9kdWxlIiAmJgorICAgIG91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKyAgICB0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkga2VlcGluZyBmaWxlIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3Q3LmQgbWFzdGVyICYmCisgICAgcm1kaXIgc3VibW9kICYmIG12IHN1Ym1vZC5vcmlnIHN1Ym1vZCAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3Q3ICYmCisgICAgdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorICAgICggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzID4vZGV2L251bGwgMj4mMSApICYmCisgICAgKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGg+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiA+L2Rldi9udWxsIDI+JjEgKSAmJgorICAgICggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKyAgICB0ZXN0ICIkKGNhdCBzdWJtb2QvYmFyKSIgPSAibWFzdGVyIHN1Ym1vZHVsZSIgJiYKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorICAgIHRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJtYXN0ZXIgc3VibW9kdWxlIiAmJgorICAgIG91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKyAgICB0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkga2VlcGluZyBtb2R1bGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbiBzdWJkaXJlY3RvcnknICcKKyAgICBnaXQgY2hlY2tvdXQgLWIgdGVzdDEwIGJyYW5jaDEgJiYKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorICAgICgKKwljZCBzdWJkaXIgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN1YmRpcl9tb2R1bGUgJiYKKwkoCisJICAgIGNkIHN1YmRpcl9tb2R1bGUgJiYKKwkgICAgOiA+ZmlsZTE1ICYmCisJICAgIGdpdCBhZGQgZmlsZTE1ICYmCisJICAgIGdpdCBjb21taXQgLW0gImFkZCBpbml0aWFsIHZlcnNpb25zIgorCSkKKyAgICApICYmCisgICAgZ2l0IHN1Ym1vZHVsZSBhZGQgZ2l0Oi8vZXhhbXBsZS5jb20vc3Vic3VibW9kdWxlIHN1YmRpci9zdWJkaXJfbW9kdWxlICYmCisgICAgZ2l0IGFkZCBzdWJkaXIvc3ViZGlyX21vZHVsZSAmJgorICAgIGdpdCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUgaW4gc3ViZGlyZWN0b3J5IiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3QxMC5hIHRlc3QxMCAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgKAorCWNkIHN1YmRpci9zdWJkaXJfbW9kdWxlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHN1cGVyMTAuYSAmJgorCWVjaG8gdGVzdDEwLmEgPmZpbGUxNSAmJgorCWdpdCBhZGQgZmlsZTE1ICYmCisJZ2l0IGNvbW1pdCAtbSAib24gYnJhbmNoIDEwLmEiCisgICAgKSAmJgorICAgIGdpdCBhZGQgc3ViZGlyL3N1YmRpcl9tb2R1bGUgJiYKKyAgICBnaXQgY29tbWl0IC1tICJjaGFuZ2Ugc3VibW9kdWxlIGluIHN1YmRpcmVjdG9yeSBvbiB0ZXN0MTAuYSIgJiYKKworICAgIGdpdCBjaGVja291dCAtYiB0ZXN0MTAuYiB0ZXN0MTAgJiYKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorICAgICgKKwljZCBzdWJkaXIvc3ViZGlyX21vZHVsZSAmJgorCWdpdCBjaGVja291dCAtYiBzdXBlcjEwLmIgJiYKKwllY2hvIHRlc3QxMC5iID5maWxlMTUgJiYKKwlnaXQgYWRkIGZpbGUxNSAmJgorCWdpdCBjb21taXQgLW0gIm9uIGJyYW5jaCAxMC5iIgorICAgICkgJiYKKyAgICBnaXQgYWRkIHN1YmRpci9zdWJkaXJfbW9kdWxlICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiY2hhbmdlIHN1Ym1vZHVsZSBpbiBzdWJkaXJlY3Rvcnkgb24gdGVzdDEwLmIiICYmCisKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdDEwLmEgPi9kZXYvbnVsbCAyPiYxICYmCisgICAgKAorCWNkIHN1YmRpciAmJgorCSggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3ViZGlyX21vZHVsZSApCisgICAgKSAmJgorICAgIHRlc3QgIiQoY2F0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSkiID0gInRlc3QxMC5iIiAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdCAiJChjYXQgc3ViZGlyL3N1YmRpcl9tb2R1bGUvZmlsZTE1KSIgPSAidGVzdDEwLmIiICYmCisgICAgZ2l0IHJlc2V0IC0taGFyZCAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdDEwLmEgPi9kZXYvbnVsbCAyPiYxICYmCisgICAgKCB5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvc3ViZGlyX21vZHVsZSApICYmCisgICAgdGVzdCAiJChjYXQgc3ViZGlyL3N1YmRpcl9tb2R1bGUvZmlsZTE1KSIgPSAidGVzdDEwLmIiICYmCisgICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKyAgICB0ZXN0ICIkKGNhdCBzdWJkaXIvc3ViZGlyX21vZHVsZS9maWxlMTUpIiA9ICJ0ZXN0MTAuYSIgJiYKKyAgICBnaXQgY29tbWl0IC1tICJicmFuY2gxIHJlc29sdmVkIHdpdGggbWVyZ2V0b29sIiAmJgorICAgIHJtIC1yZiBzdWJkaXIvc3ViZGlyX21vZHVsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3RvcnkgdnMgbW9kaWZpZWQgc3VibW9kdWxlJyAnCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRlc3QxMSBicmFuY2gxICYmCisgICAgbXYgc3VibW9kIHN1Ym1vZC1tb3ZlZGFzaWRlICYmCisgICAgZ2l0IHJtIHN1Ym1vZCAmJgorICAgIG1rZGlyIHN1Ym1vZCAmJgorICAgIGVjaG8gbm90IGEgc3VibW9kdWxlID5zdWJtb2QvZmlsZTE2ICYmCisgICAgZ2l0IGFkZCBzdWJtb2QvZmlsZTE2ICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiU3VibW9kdWxlIHBhdGggYmVjb21lcyBkaXJlY3RvcnkiICYmCisKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisgICAgdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorICAgICggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKyAgICB0ZXN0ICIkKGNhdCBzdWJtb2QvZmlsZTE2KSIgPSAibm90IGEgc3VibW9kdWxlIiAmJgorICAgIHJtIC1yZiBzdWJtb2Qub3JpZyAmJgorCisgICAgZ2l0IHJlc2V0IC0taGFyZCA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisgICAgdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorICAgIHRlc3QgISAtZSBzdWJtb2Qub3JpZyAmJgorICAgICggeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKyAgICB0ZXN0IC1kIHN1Ym1vZC5vcmlnICYmCisgICAgdGVzdCAiJChjYXQgc3VibW9kLm9yaWcvZmlsZTE2KSIgPSAibm90IGEgc3VibW9kdWxlIiAmJgorICAgIHJtIC1yIHN1Ym1vZC5vcmlnICYmCisgICAgbXYgc3VibW9kLW1vdmVkYXNpZGUvLmdpdCBzdWJtb2QgJiYKKyAgICAoIGNkIHN1Ym1vZCAmJiBnaXQgY2xlYW4gLWYgJiYgZ2l0IHJlc2V0IC0taGFyZCApICYmCisgICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKyAgICB0ZXN0ICIkKGNhdCBzdWJtb2QvYmFyKSIgPSAibWFzdGVyIHN1Ym1vZHVsZSIgJiYKKyAgICBnaXQgcmVzZXQgLS1oYXJkID4vZGV2L251bGwgMj4mMSAmJiBybSAtcmYgc3VibW9kLW1vdmVkYXNpZGUgJiYKKworICAgIGdpdCBjaGVja291dCAtYiB0ZXN0MTEuYyBtYXN0ZXIgJiYKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0MTEgJiYKKyAgICB0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisgICAgKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisKKyAgICBnaXQgcmVzZXQgLS1oYXJkID4vZGV2L251bGwgMj4mMSAmJgorICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3QxMSAmJgorICAgIHRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKyAgICB0ZXN0ICEgLWUgc3VibW9kLm9yaWcgJiYKKyAgICAoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisgICAgdGVzdCAiJChjYXQgc3VibW9kL2ZpbGUxNikiID0gIm5vdCBhIHN1Ym1vZHVsZSIgJiYKKworICAgIGdpdCByZXNldCAtLWhhcmQgbWFzdGVyID4vZGV2L251bGwgMj4mMSAmJgorICAgICggY2Qgc3VibW9kICYmIGdpdCBjbGVhbiAtZiAmJiBnaXQgcmVzZXQgLS1oYXJkICkgJiYKKyAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHdpdGggbm8gYmFzZScgJworICAgIGdpdCBjaGVja291dCAtYiB0ZXN0MTMgYnJhbmNoMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKyAgICBnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0IC0tdG9vbCBteWJhc2UgLS0gYm90aCAmJgorICAgID5leHBlY3RlZCAmJgorICAgIHRlc3RfY21wIGJvdGggZXhwZWN0ZWQgJiYKKyAgICBnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciA+L2Rldi9udWxsIDI+JjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIGNvbW1hbmRzIG92ZXJyaWRlIGJ1aWx0LWlucycgJworICAgIGdpdCBjaGVja291dCAtYiB0ZXN0MTQgYnJhbmNoMSAmJgorICAgIGdpdCBjb25maWcgbWVyZ2V0b29sLmRlZmF1bHRzLmNtZCAiY2F0IFwiXCRSRU1PVEVcIiA+XCJcJE1FUkdFRFwiIiAmJgorICAgIGdpdCBjb25maWcgbWVyZ2V0b29sLmRlZmF1bHRzLnRydXN0RXhpdENvZGUgdHJ1ZSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKyAgICBnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0IC0tdG9vbCBkZWZhdWx0cyAtLSBib3RoICYmCisgICAgZWNobyBtYXN0ZXIgYm90aCBhZGRlZCA+ZXhwZWN0ZWQgJiYKKyAgICB0ZXN0X2NtcCBib3RoIGV4cGVjdGVkICYmCisgICAgZ2l0IGNvbmZpZyAtLXVuc2V0IG1lcmdldG9vbC5kZWZhdWx0cy5jbWQgJiYKKyAgICBnaXQgY29uZmlnIC0tdW5zZXQgbWVyZ2V0b29sLmRlZmF1bHRzLnRydXN0RXhpdENvZGUgJiYKKyAgICBnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciA+L2Rldi9udWxsIDI+JjEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjExLW1lcmdlLWFib3J0LnNoIGIvdC90NzYxMS1tZXJnZS1hYm9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YjQ3OThlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYxMS1tZXJnZS1hYm9ydC5zaApAQCAtMCwwICsxLDMxOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgYWJvcnRpbmcgaW4tcHJvZ3Jlc3MgbWVyZ2VzCisKK1NldCB1cCByZXBvIHdpdGggY29uZmxpY3RpbmcgYW5kIG5vbi1jb25mbGljdGluZyBicmFuY2hlczoKKworVGhlcmUgYXJlIHRocmVlIGZpbGVzIGZvby9iYXIvYmF6LCBhbmQgdGhlIGZvbGxvd2luZyBncmFwaCBpbGx1c3RyYXRlcyB0aGUKK2NvbnRlbnQgb2YgdGhlc2UgZmlsZXMgaW4gZWFjaCBjb21taXQ6CisKKyMgZm9vL2Jhci9iYXogLS0tIGZvby9iYXIvYmF6eiAgICAgPC0tIG1hc3RlcgorIyAgICAgICAgICAgICBcCisjICAgICAgICAgICAgICAtLS0gZm9vL2JhcmYvYmF6ZiAgIDwtLSBjb25mbGljdF9icmFuY2gKKyMgICAgICAgICAgICAgICBcCisjICAgICAgICAgICAgICAgIC0tLSBmb28vYmFydC9iYXogIDwtLSBjbGVhbl9icmFuY2gKKworTmV4dCwgdGVzdCBnaXQgbWVyZ2UgLS1hYm9ydCB3aXRoIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorLSBiZWZvcmUvYWZ0ZXIgc3VjY2Vzc2Z1bCBtZXJnZSAoc2hvdWxkIGZhaWwgd2hlbiBub3QgaW4gbWVyZ2UgY29udGV4dCkKKy0gd2l0aC93aXRob3V0IGNvbmZsaWN0cworLSBjbGVhbi9kaXJ0eSBpbmRleCBiZWZvcmUgbWVyZ2UKKy0gY2xlYW4vZGlydHkgd29ya3RyZWUgYmVmb3JlIG1lcmdlCistIGRpcnR5IGluZGV4IGJlZm9yZSBtZXJnZSBtYXRjaGVzIGNvbnRlbnRzIG9uIHJlbW90ZSBicmFuY2gKKy0gY2hhbmdlZC91bmNoYW5nZWQgd29ya3RyZWUgYWZ0ZXIgbWVyZ2UKKy0gY2hhbmdlZC91bmNoYW5nZWQgaW5kZXggYWZ0ZXIgbWVyZ2UKKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCSMgQ3JlYXRlIHRoZSBhYm92ZSByZXBvCisJZWNobyBmb28gPiBmb28gJiYKKwllY2hvIGJhciA+IGJhciAmJgorCWVjaG8gYmF6ID4gYmF6ICYmCisJZ2l0IGFkZCBmb28gYmFyIGJheiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gYmF6eiA+IGJheiAmJgorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3RfYnJhbmNoIEhFQUReICYmCisJZWNobyBiYXJmID4gYmFyICYmCisJZWNobyBiYXpmID4gYmF6ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY29uZmxpY3QiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNsZWFuX2JyYW5jaCBIRUFEXiAmJgorCWVjaG8gYmFydCA+IGJhciAmJgorCWdpdCBjb21taXQgLWEgLW0gImNsZWFuIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKworcHJlX21lcmdlX2hlYWQ9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aG91dCBNRVJHRV9IRUFEICh1bnN0YXJ0ZWQgbWVyZ2UpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tYWJvcnQgMj5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwIE1FUkdFX0hFQUQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHdpdGhvdXQgTUVSR0VfSEVBRCAodW5zdGFydGVkIG1lcmdlKTogLmdpdC9NRVJHRV9IRUFEIHNhbml0eScgJworCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aG91dCBNRVJHRV9IRUFEIChjb21wbGV0ZWQgbWVyZ2UpJyAnCisJZ2l0IG1lcmdlIGNsZWFuX2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIE1lcmdlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQKKwlwb3N0X21lcmdlX2hlYWQ9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1hYm9ydCAyPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgTUVSR0VfSEVBRCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aG91dCBNRVJHRV9IRUFEIChjb21wbGV0ZWQgbWVyZ2UpOiAuZ2l0L01FUkdFX0hFQUQgc2FuaXR5JyAnCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwb3N0X21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRm9yZ2V0IHByZXZpb3VzIG1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAiJHByZV9tZXJnZV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBYm9ydCBhZnRlciAtLW5vLWNvbW1pdCcgJworCSMgUmVkbyBtZXJnZSwgYnV0IHN0b3AgYmVmb3JlIGNyZWF0aW5nIG1lcmdlIGNvbW1pdAorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjbGVhbl9icmFuY2ggJiYKKwl0ZXN0IC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCSMgQWJvcnQgbm9uLWNvbmZsaWN0aW5nIG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZikiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLXN0YWdlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Fib3J0IGFmdGVyIGNvbmZsaWN0cycgJworCSMgQ3JlYXRlIGNvbmZsaWN0aW5nIG1lcmdlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJIyBBYm9ydCBjb25mbGljdGluZyBtZXJnZQorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbGVhbiBtZXJnZSB3aXRoIGRpcnR5IGluZGV4IGZhaWxzJyAnCisJZWNobyB4eXp6eSA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBkaWZmIC0tc3RhZ2VkID4gZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNsZWFuX2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmKSIgJiYKKwlnaXQgZGlmZiAtLXN0YWdlZCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ29uZmxpY3RpbmcgbWVyZ2Ugd2l0aCBkaXJ0eSBpbmRleCBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdF9icmFuY2ggJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZikiICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Jlc2V0IGluZGV4IChidXQgcHJlc2VydmUgd29ya3RyZWUgY2hhbmdlcyknICcKKwlnaXQgcmVzZXQgIiRwcmVfbWVyZ2VfaGVhZCIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWJvcnQgY2xlYW4gbWVyZ2Ugd2l0aCBub24tY29uZmxpY3RpbmcgZGlydHkgd29ya3RyZWUnICcKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgY2xlYW5fYnJhbmNoICYmCisJdGVzdCAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIEFib3J0IG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLXN0YWdlZCkiICYmCisJZ2l0IGRpZmYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Fib3J0IGNvbmZsaWN0aW5nIG1lcmdlIHdpdGggbm9uLWNvbmZsaWN0aW5nIGRpcnR5IHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJIyBBYm9ydCBtZXJnZQorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXNldCB3b3JrdHJlZSBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAiJHByZV9tZXJnZV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGYWlsIGNsZWFuIG1lcmdlIHdpdGggY29uZmxpY3RpbmcgZGlydHkgd29ya3RyZWUnICcKKwllY2hvIHh5enp5ID4+IGJhciAmJgorCWdpdCBkaWZmID4gZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGNsZWFuX2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRmFpbCBjb25mbGljdGluZyBtZXJnZSB3aXRoIGNvbmZsaWN0aW5nIGRpcnR5IHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVzZXQgd29ya3RyZWUgY2hhbmdlcycgJworCWdpdCByZXNldCAtLWhhcmQgIiRwcmVfbWVyZ2VfaGVhZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRmFpbCBjbGVhbiBtZXJnZSB3aXRoIG1hdGNoaW5nIGRpcnR5IHdvcmt0cmVlJyAnCisJZWNobyBiYXJ0ID4gYmFyICYmCisJZ2l0IGRpZmYgPiBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgY2xlYW5fYnJhbmNoICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBYm9ydCBjbGVhbiBtZXJnZSB3aXRoIG1hdGNoaW5nIGRpcnR5IGluZGV4JyAnCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgZGlmZiAtLXN0YWdlZCA+IGV4cGVjdCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjbGVhbl9icmFuY2ggJiYKKwl0ZXN0IC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCSMjIyBXaGVuIGFib3J0aW5nIHRoZSBtZXJnZSwgZ2l0IHdpbGwgZGlzY2FyZCBhbGwgc3RhZ2VkIGNoYW5nZXMsCisJIyMjIGluY2x1ZGluZyB0aG9zZSB0aGF0IHdlcmUgc3RhZ2VkIHByZS1tZXJnZS4gSW4gb3RoZXIgd29yZHMsCisJIyMjIC0tYWJvcnQgd2lsbCBMT1NFIGFueSBzdGFnZWQgY2hhbmdlcyAodGhlIHN0YWdlZCBjaGFuZ2VzIHRoYXQKKwkjIyMgYXJlIGxvc3QgbXVzdCBtYXRjaCB0aGUgbWVyZ2UgcmVzdWx0LCBvciB0aGUgbWVyZ2Ugd291bGQgbm90CisJIyMjIGhhdmUgYmVlbiBhbGxvd2VkIHRvIHN0YXJ0KS4gQ2hhbmdlIGV4cGVjdGF0aW9ucyBhY2NvcmRpbmdseToKKwlybSBleHBlY3QgJiYKKwl0b3VjaCBleHBlY3QgJiYKKwkjIEFib3J0IG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdCAteiAiJChnaXQgZGlmZikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Jlc2V0IHdvcmt0cmVlIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICIkcHJlX21lcmdlX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0ZhaWwgY29uZmxpY3RpbmcgbWVyZ2Ugd2l0aCBtYXRjaGluZyBkaXJ0eSB3b3JrdHJlZScgJworCWVjaG8gYmFyZiA+IGJhciAmJgorCWdpdCBkaWZmID4gZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWJvcnQgY29uZmxpY3RpbmcgbWVyZ2Ugd2l0aCBtYXRjaGluZyBkaXJ0eSBpbmRleCcgJworCWdpdCBhZGQgYmFyICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3RfYnJhbmNoICYmCisJdGVzdCAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIyMgV2hlbiBhYm9ydGluZyB0aGUgbWVyZ2UsIGdpdCB3aWxsIGRpc2NhcmQgYWxsIHN0YWdlZCBjaGFuZ2VzLAorCSMjIyBpbmNsdWRpbmcgdGhvc2UgdGhhdCB3ZXJlIHN0YWdlZCBwcmUtbWVyZ2UuIEluIG90aGVyIHdvcmRzLAorCSMjIyAtLWFib3J0IHdpbGwgTE9TRSBhbnkgc3RhZ2VkIGNoYW5nZXMgKHRoZSBzdGFnZWQgY2hhbmdlcyB0aGF0CisJIyMjIGFyZSBsb3N0IG11c3QgbWF0Y2ggdGhlIG1lcmdlIHJlc3VsdCwgb3IgdGhlIG1lcmdlIHdvdWxkIG5vdAorCSMjIyBoYXZlIGJlZW4gYWxsb3dlZCB0byBzdGFydCkuIENoYW5nZSBleHBlY3RhdGlvbnMgYWNjb3JkaW5nbHk6CisJcm0gZXhwZWN0ICYmCisJdG91Y2ggZXhwZWN0ICYmCisJIyBBYm9ydCBtZXJnZQorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCWdpdCBkaWZmIC0tc3RhZ2VkID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXNldCB3b3JrdHJlZSBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAiJHByZV9tZXJnZV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBYm9ydCBtZXJnZSB3aXRoIHByZS0gYW5kIHBvc3QtbWVyZ2Ugd29ya3RyZWUgY2hhbmdlcycgJworCSMgUHJlLW1lcmdlIHdvcmt0cmVlIGNoYW5nZXMKKwllY2hvIHh5enp5ID4gZm9vICYmCisJZWNobyBiYXJmID4gYmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgZGlmZiA+IGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tc3RhZ2VkID4gZXhwZWN0LXN0YWdlZCAmJgorCSMgUGVyZm9ybSBtZXJnZQorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdF9icmFuY2ggJiYKKwl0ZXN0IC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCSMgUG9zdC1tZXJnZSB3b3JrdHJlZSBjaGFuZ2VzCisJZWNobyB5enh4eiA+IGZvbyAmJgorCWVjaG8gYmxlY2ggPiBiYXogJiYKKwkjIyMgV2hlbiBhYm9ydGluZyB0aGUgbWVyZ2UsIGdpdCB3aWxsIGRpc2NhcmQgc3RhZ2VkIGNoYW5nZXMgKGJhcikKKwkjIyMgYW5kIHVubWVyZ2VkIGNoYW5nZXMgKGJheikuIE90aGVyIGNoYW5nZXMgdGhhdCBhcmUgbmVpdGhlcgorCSMjIyBzdGFnZWQgbm9yIG1hcmtlZCBhcyB1bm1lcmdlZCAoZm9vKSwgd2lsbCBiZSBwcmVzZXJ2ZWQuIEZvcgorCSMjIyB0aGVzZSBjaGFuZ2VkLCBnaXQgY2Fubm90IHRlbGwgcHJlLW1lcmdlIGNoYW5nZXMgYXBhcnQgZnJvbQorCSMjIyBwb3N0LW1lcmdlIGNoYW5nZXMsIHNvIHRoZSBwb3N0LW1lcmdlIGNoYW5nZXMgd2lsbCBiZQorCSMjIyBwcmVzZXJ2ZWQuIENoYW5nZSBleHBlY3RhdGlvbnMgYWNjb3JkaW5nbHk6CisJZ2l0IGRpZmYgLS0gZm9vID4gZXhwZWN0ICYmCisJcm0gZXhwZWN0LXN0YWdlZCAmJgorCXRvdWNoIGV4cGVjdC1zdGFnZWQgJiYKKwkjIEFib3J0IG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJZ2l0IGRpZmYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBhY3R1YWwtc3RhZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0LXN0YWdlZCBhY3R1YWwtc3RhZ2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Jlc2V0IHdvcmt0cmVlIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICIkcHJlX21lcmdlX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Fib3J0IG1lcmdlIHdpdGggcHJlLSBhbmQgcG9zdC1tZXJnZSBpbmRleCBjaGFuZ2VzJyAnCisJIyBQcmUtbWVyZ2Ugd29ya3RyZWUgY2hhbmdlcworCWVjaG8geHl6enkgPiBmb28gJiYKKwllY2hvIGJhcmYgPiBiYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBkaWZmID4gZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBleHBlY3Qtc3RhZ2VkICYmCisJIyBQZXJmb3JtIG1lcmdlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJIyBQb3N0LW1lcmdlIHdvcmt0cmVlIGNoYW5nZXMKKwllY2hvIHl6eHh6ID4gZm9vICYmCisJZWNobyBibGVjaCA+IGJheiAmJgorCWdpdCBhZGQgZm9vIGJhciAmJgorCSMjIyBXaGVuIGFib3J0aW5nIHRoZSBtZXJnZSwgZ2l0IHdpbGwgZGlzY2FyZCBhbGwgc3RhZ2VkIGNoYW5nZXMKKwkjIyMgKGZvbywgYmFyIGFuZCBiYXopLCBhbmQgbm8gY2hhbmdlcyB3aWxsIGJlIHByZXNlcnZlZC4gV2hldGhlcgorCSMjIyB0aGUgY2hhbmdlcyB3ZXJlIHN0YWdlZCBwcmUtIG9yIHBvc3QtbWVyZ2UgZG9lcyBub3QgbWF0dGVyCisJIyMjIChleGNlcHQgZm9yIG5vdCBwcmV2ZW50aW5nIHN0YXJ0aW5nIHRoZSBtZXJnZSkuCisJIyMjIENoYW5nZSBleHBlY3RhdGlvbnMgYWNjb3JkaW5nbHk6CisJcm0gZXhwZWN0IGV4cGVjdC1zdGFnZWQgJiYKKwl0b3VjaCBleHBlY3QgJiYKKwl0b3VjaCBleHBlY3Qtc3RhZ2VkICYmCisJIyBBYm9ydCBtZXJnZQorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tc3RhZ2VkID4gYWN0dWFsLXN0YWdlZCAmJgorCXRlc3RfY21wIGV4cGVjdC1zdGFnZWQgYWN0dWFsLXN0YWdlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc3MDAtcmVwYWNrLnNoIGIvdC90NzcwMC1yZXBhY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDk1NGI4NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc3MDAtcmVwYWNrLnNoCkBAIC0wLDAgKzEsMTY4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlcGFjayB3b3JrcyBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvYmplY3RzIGluIHBhY2tzIG1hcmtlZCAua2VlcCBhcmUgbm90IHJlcGFja2VkJyAnCisJZWNobyBjb250ZW50MSA+IGZpbGUxICYmCisJZWNobyBjb250ZW50MiA+IGZpbGUyICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsX2NvbW1pdCAmJgorCSMgQ3JlYXRlIHR3byBwYWNrcworCSMgVGhlIGZpcnN0IHBhY2sgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgb2JqZWN0cyBleGNlcHQgb25lCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCB8IGdyZXAgLXYgZmlsZTIgfAorCQlnaXQgcGFjay1vYmplY3RzIHBhY2sgPiAvZGV2L251bGwgJiYKKwkjIFRoZSBzZWNvbmQgcGFjayB3aWxsIGNvbnRhaW4gdGhlIGV4Y2x1ZGVkIG9iamVjdAorCXBhY2tzaGExPSQoZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCB8IGdyZXAgZmlsZTIgfAorCQlnaXQgcGFjay1vYmplY3RzIHBhY2spICYmCisJdG91Y2ggLXIgcGFjay0kcGFja3NoYTEucGFjayBwYWNrLSRwYWNrc2hhMS5rZWVwICYmCisJb2Jqc2hhMT0kKGdpdCB2ZXJpZnktcGFjayAtdiBwYWNrLSRwYWNrc2hhMS5pZHggfCBoZWFkIC1uIDEgfAorCQlzZWQgLWUgInMvXlwoWzAtOWEtZl1cezQwXH1cKS4qL1wxLyIpICYmCisJbXYgcGFjay0qIC5naXQvb2JqZWN0cy9wYWNrLyAmJgorCWdpdCByZXBhY2sgLUEgLWQgLWwgJiYKKwlnaXQgcHJ1bmUtcGFja2VkICYmCisJZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5pZHg7IGRvCisJCWlkeD0kKGJhc2VuYW1lICRwKQorCQl0ZXN0ICJwYWNrLSRwYWNrc2hhMS5pZHgiID0gIiRpZHgiICYmIGNvbnRpbnVlCisJCWlmIGdpdCB2ZXJpZnktcGFjayAtdiAkcCB8IGVncmVwICJeJG9ianNoYTEiOyB0aGVuCisJCQlmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PTEKKwkJCWVjaG8gIkRVUExJQ0FURSBPQkpFQ1QgRk9VTkQiCisJCQlicmVhaworCQlmaQorCWRvbmUgJiYKKwl0ZXN0IC16ICIkZm91bmRfZHVwbGljYXRlX29iamVjdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9vc2Ugb2JqZWN0cyBpbiBhbHRlcm5hdGUgT0RCIGFyZSBub3QgcmVwYWNrZWQnICcKKwlta2RpciBhbHRfb2JqZWN0cyAmJgorCWVjaG8gYHB3ZGAvYWx0X29iamVjdHMgPiAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZWNobyBjb250ZW50MyA+IGZpbGUzICYmCisJb2Jqc2hhMT0kKEdJVF9PQkpFQ1RfRElSRUNUT1JZPWFsdF9vYmplY3RzIGdpdCBoYXNoLW9iamVjdCAtdyBmaWxlMykgJiYKKwlnaXQgYWRkIGZpbGUzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBjb21taXRfZmlsZTMgJiYKKwlnaXQgcmVwYWNrIC1hIC1kIC1sICYmCisJZ2l0IHBydW5lLXBhY2tlZCAmJgorCWZvciBwIGluIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4OyBkbworCQlpZiBnaXQgdmVyaWZ5LXBhY2sgLXYgJHAgfCBlZ3JlcCAiXiRvYmpzaGExIjsgdGhlbgorCQkJZm91bmRfZHVwbGljYXRlX29iamVjdD0xCisJCQllY2hvICJEVVBMSUNBVEUgT0JKRUNUIEZPVU5EIgorCQkJYnJlYWsKKwkJZmkKKwlkb25lICYmCisJdGVzdCAteiAiJGZvdW5kX2R1cGxpY2F0ZV9vYmplY3QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tlZCBvYnMgaW4gYWx0IE9EQiBhcmUgcmVwYWNrZWQgZXZlbiB3aGVuIGxvY2FsIHJlcG8gaXMgcGFja2xlc3MnICcKKwlta2RpciBhbHRfb2JqZWN0cy9wYWNrICYmCisJbXYgLmdpdC9vYmplY3RzL3BhY2svKiBhbHRfb2JqZWN0cy9wYWNrICYmCisJZ2l0IHJlcGFjayAtYSAmJgorCW15aWR4PSQobHMgLTEgLmdpdC9vYmplY3RzL3BhY2svKi5pZHgpICYmCisJdGVzdCAtZiAiJG15aWR4IiAmJgorCWZvciBwIGluIGFsdF9vYmplY3RzL3BhY2svKi5pZHg7IGRvCisJCWdpdCB2ZXJpZnktcGFjayAtdiAkcCB8IHNlZCAtbiAtZSAiL15bMC05YS1mXVx7NDBcfS9wIgorCWRvbmUgfCB3aGlsZSByZWFkIHNoYTEgcmVzdDsgZG8KKwkJaWYgISAoIGdpdCB2ZXJpZnktcGFjayAtdiAkbXlpZHggfCBncmVwICJeJHNoYTEiICk7IHRoZW4KKwkJCWVjaG8gIk1pc3Npbmcgb2JqZWN0IGluIGxvY2FsIHBhY2s6ICRzaGExIgorCQkJcmV0dXJuIDEKKwkJZmkKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tlZCBvYnMgaW4gYWx0IE9EQiBhcmUgcmVwYWNrZWQgd2hlbiBsb2NhbCByZXBvIGhhcyBwYWNrcycgJworCXJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKwllY2hvIG5ld19jb250ZW50ID4+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbW9yZV9jb250ZW50ICYmCisJZ2l0IHJlcGFjayAmJgorCWdpdCByZXBhY2sgLWEgLWQgJiYKKwlteWlkeD0kKGxzIC0xIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4KSAmJgorCXRlc3QgLWYgIiRteWlkeCIgJiYKKwlmb3IgcCBpbiBhbHRfb2JqZWN0cy9wYWNrLyouaWR4OyBkbworCQlnaXQgdmVyaWZ5LXBhY2sgLXYgJHAgfCBzZWQgLW4gLWUgIi9eWzAtOWEtZl1cezQwXH0vcCIKKwlkb25lIHwgd2hpbGUgcmVhZCBzaGExIHJlc3Q7IGRvCisJCWlmICEgKCBnaXQgdmVyaWZ5LXBhY2sgLXYgJG15aWR4IHwgZ3JlcCAiXiRzaGExIiApOyB0aGVuCisJCQllY2hvICJNaXNzaW5nIG9iamVjdCBpbiBsb2NhbCBwYWNrOiAkc2hhMSIKKwkJCXJldHVybiAxCisJCWZpCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgb2JzIGluIGFsdGVybmF0ZSBPREIga2VwdCBwYWNrIGFyZSByZXBhY2tlZCcgJworCSMgc3dhcCB0aGUgLmtlZXAgc28gdGhlIGNvbW1pdCBvYmplY3QgaXMgaW4gdGhlIHBhY2sgd2l0aCAua2VlcAorCWZvciBwIGluIGFsdF9vYmplY3RzL3BhY2svKi5wYWNrCisJZG8KKwkJYmFzZV9uYW1lPSQoYmFzZW5hbWUgJHAgLnBhY2spICYmCisJCWlmIHRlc3QgLWYgYWx0X29iamVjdHMvcGFjay8kYmFzZV9uYW1lLmtlZXAKKwkJdGhlbgorCQkJcm0gYWx0X29iamVjdHMvcGFjay8kYmFzZV9uYW1lLmtlZXAKKwkJZWxzZQorCQkJdG91Y2ggYWx0X29iamVjdHMvcGFjay8kYmFzZV9uYW1lLmtlZXAKKwkJZmkKKwlkb25lICYmCisJZ2l0IHJlcGFjayAtYSAtZCAmJgorCW15aWR4PSQobHMgLTEgLmdpdC9vYmplY3RzL3BhY2svKi5pZHgpICYmCisJdGVzdCAtZiAiJG15aWR4IiAmJgorCWZvciBwIGluIGFsdF9vYmplY3RzL3BhY2svKi5pZHg7IGRvCisJCWdpdCB2ZXJpZnktcGFjayAtdiAkcCB8IHNlZCAtbiAtZSAiL15bMC05YS1mXVx7NDBcfS9wIgorCWRvbmUgfCB3aGlsZSByZWFkIHNoYTEgcmVzdDsgZG8KKwkJaWYgISAoIGdpdCB2ZXJpZnktcGFjayAtdiAkbXlpZHggfCBncmVwICJeJHNoYTEiICk7IHRoZW4KKwkJCWVjaG8gIk1pc3Npbmcgb2JqZWN0IGluIGxvY2FsIHBhY2s6ICRzaGExIgorCQkJcmV0dXJuIDEKKwkJZmkKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tlZCB1bnJlYWNoYWJsZSBvYnMgaW4gYWx0ZXJuYXRlIE9EQiBhcmUgbm90IGxvb3NlbmVkJyAnCisJcm0gLWYgYWx0X29iamVjdHMvcGFjay8qLmtlZXAgJiYKKwltdiAuZ2l0L29iamVjdHMvcGFjay8qIGFsdF9vYmplY3RzL3BhY2svICYmCisJY3NoYTE9JChnaXQgcmV2LXBhcnNlIEhFQURee2NvbW1pdH0pICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPSR0ZXN0X3RpY2sgLS1leHBpcmUtdW5yZWFjaGFibGU9JHRlc3RfdGljayAtLWFsbCAmJgorCSMgVGhlIHBhY2stb2JqZWN0cyBjYWxsIG9uIHRoZSBuZXh0IGxpbmUgaXMgZXF1aXZhbGVudCB0bworCSMgZ2l0IHJlcGFjayAtQSAtZCB3aXRob3V0IHRoZSBjYWxsIHRvIHBydW5lLXBhY2tlZAorCWdpdCBwYWNrLW9iamVjdHMgLS1ob25vci1wYWNrLWtlZXAgLS1ub24tZW1wdHkgLS1hbGwgLS1yZWZsb2cgXAorCSAgICAtLXVucGFjay11bnJlYWNoYWJsZSA8L2Rldi9udWxsIHBhY2sgJiYKKwlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisJbXYgcGFjay0qIC5naXQvb2JqZWN0cy9wYWNrLyAmJgorCXRlc3QgMCA9ICQoZ2l0IHZlcmlmeS1wYWNrIC12IC0tIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4IHwKKwkJZWdyZXAgIl4kY3NoYTEgIiB8IHNvcnQgfCB1bmlxIHwgd2MgLWwpICYmCisJZWNobyA+IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAkY3NoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgcGFja2VkIHVucmVhY2hhYmxlIG9icyB0aGF0IGV4aXN0IGluIGFsdGVybmF0ZSBPREIgYXJlIG5vdCBsb29zZW5lZCcgJworCWVjaG8gYHB3ZGAvYWx0X29iamVjdHMgPiAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZWNobyAiJGNzaGExIiB8IGdpdCBwYWNrLW9iamVjdHMgLS1ub24tZW1wdHkgLS1hbGwgLS1yZWZsb2cgcGFjayAmJgorCXJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKwltdiBwYWNrLSogLmdpdC9vYmplY3RzL3BhY2svICYmCisJIyBUaGUgcGFjay1vYmplY3RzIGNhbGwgb24gdGhlIG5leHQgbGluZSBpcyBlcXVpdmFsZW50IHRvCisJIyBnaXQgcmVwYWNrIC1BIC1kIHdpdGhvdXQgdGhlIGNhbGwgdG8gcHJ1bmUtcGFja2VkCisJZ2l0IHBhY2stb2JqZWN0cyAtLWhvbm9yLXBhY2sta2VlcCAtLW5vbi1lbXB0eSAtLWFsbCAtLXJlZmxvZyBcCisJICAgIC0tdW5wYWNrLXVucmVhY2hhYmxlIDwvZGV2L251bGwgcGFjayAmJgorCXJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKwltdiBwYWNrLSogLmdpdC9vYmplY3RzL3BhY2svICYmCisJdGVzdCAwID0gJChnaXQgdmVyaWZ5LXBhY2sgLXYgLS0gLmdpdC9vYmplY3RzL3BhY2svKi5pZHggfAorCQllZ3JlcCAiXiRjc2hhMSAiIHwgc29ydCB8IHVuaXEgfCB3YyAtbCkgJiYKKwllY2hvID4gLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93ICRjc2hhMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvYmplY3RzIG1hZGUgdW5yZWFjaGFibGUgYnkgZ3JhZnRzIG9ubHkgYXJlIGtlcHQnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImNvbW1pdCA0IiAmJgorCUgwPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCUgxPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwlIMj0kKGdpdCByZXYtcGFyc2UgSEVBRF5eKSAmJgorCWVjaG8gIiRIMCAkSDIiID4gLmdpdC9pbmZvL2dyYWZ0cyAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPSR0ZXN0X3RpY2sgLS1leHBpcmUtdW5yZWFjaGFibGU9JHRlc3RfdGljayAtLWFsbCAmJgorCWdpdCByZXBhY2sgLWEgLWQgJiYKKwlnaXQgY2F0LWZpbGUgLXQgJEgxCisJJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90NzcwMS1yZXBhY2stdW5wYWNrLXVucmVhY2hhYmxlLnNoIGIvdC90NzcwMS1yZXBhY2stdW5wYWNrLXVucmVhY2hhYmxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI4ZDRjZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NzAxLXJlcGFjay11bnBhY2stdW5yZWFjaGFibGUuc2gKQEAgLTAsMCArMSwxMTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVwYWNrIHdvcmtzIGNvcnJlY3RseScKKworLiAuL3Rlc3QtbGliLnNoCisKK2ZzaGExPQorY3NoYTE9Cit0c2hhMT0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUEgd2l0aCAtZCBvcHRpb24gbGVhdmVzIHVucmVhY2hhYmxlIG9iamVjdHMgdW5wYWNrZWQnICcKKwllY2hvIGNvbnRlbnQgPiBmaWxlMSAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbF9jb21taXQgJiYKKwkjIGNyZWF0ZSBhIHRyYW5zaWVudCBicmFuY2ggd2l0aCB1bmlxdWUgY29udGVudAorCWdpdCBjaGVja291dCAtYiB0cmFuc2llbnRfYnJhbmNoICYmCisJZWNobyBtb3JlIGNvbnRlbnQgPj4gZmlsZTEgJiYKKwkjIHJlY29yZCB0aGUgb2JqZWN0cyBjcmVhdGVkIGluIHRoZSBkYXRhYmFzZSBmb3IgZmlsZSwgY29tbWl0LCB0cmVlCisJZnNoYTE9JChnaXQgaGFzaC1vYmplY3QgZmlsZTEpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtb3JlX2NvbnRlbnQgJiYKKwljc2hhMT0kKGdpdCByZXYtcGFyc2UgSEVBRF57Y29tbWl0fSkgJiYKKwl0c2hhMT0kKGdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0pICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gZXZlbiBtb3JlIGNvbnRlbnQgPj4gZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGV2ZW5fbW9yZV9jb250ZW50ICYmCisJIyBkZWxldGUgdGhlIHRyYW5zaWVudCBicmFuY2gKKwlnaXQgYnJhbmNoIC1EIHRyYW5zaWVudF9icmFuY2ggJiYKKwkjIHBhY2sgdGhlIHJlcG8KKwlnaXQgcmVwYWNrIC1BIC1kIC1sICYmCisJIyB2ZXJpZnkgb2JqZWN0cyBhcmUgcGFja2VkIGluIHJlcG9zaXRvcnkKKwl0ZXN0IDMgPSAkKGdpdCB2ZXJpZnktcGFjayAtdiAtLSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCB8CisJCSAgIGVncmVwICJeKCRmc2hhMXwkY3NoYTF8JHRzaGExKSAiIHwKKwkJICAgc29ydCB8IHVuaXEgfCB3YyAtbCkgJiYKKwlnaXQgc2hvdyAkZnNoYTEgJiYKKwlnaXQgc2hvdyAkY3NoYTEgJiYKKwlnaXQgc2hvdyAkdHNoYTEgJiYKKwkjIG5vdyBleHBpcmUgdGhlIHJlZmxvZywgd2hpbGUga2VlcGluZyByZWFjaGFibGUgb25lcyBidXQgZXhwaXJpbmcKKwkjIHVucmVhY2hhYmxlcyBpbW1lZGlhdGVseQorCXRlc3RfdGljayAmJgorCXNvbWV0aW1lYWdvPSQoKCAkdGVzdF90aWNrIC0gMTAwMDAgKSkgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT0kc29tZXRpbWVhZ28gLS1leHBpcmUtdW5yZWFjaGFibGU9JHRlc3RfdGljayAtLWFsbCAmJgorCSMgYW5kIHJlcGFjaworCWdpdCByZXBhY2sgLUEgLWQgLWwgJiYKKwkjIHZlcmlmeSBvYmplY3RzIGFyZSByZXRhaW5lZCB1bnBhY2tlZAorCXRlc3QgMCA9ICQoZ2l0IHZlcmlmeS1wYWNrIC12IC0tIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4IHwKKwkJICAgZWdyZXAgIl4oJGZzaGExfCRjc2hhMXwkdHNoYTEpICIgfAorCQkgICBzb3J0IHwgdW5pcSB8IHdjIC1sKSAmJgorCWdpdCBzaG93ICRmc2hhMSAmJgorCWdpdCBzaG93ICRjc2hhMSAmJgorCWdpdCBzaG93ICR0c2hhMQorJworCitjb21wYXJlX210aW1lcyAoKQoreworCXJlYWQgdHJlZiByZXN0ICYmCisJd2hpbGUgcmVhZCB0IHJlc3Q7IGRvCisJCXRlc3QgIiR0cmVmIiA9ICIkdCIgfHwgYnJlYWsKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1BIHdpdGhvdXQgLWQgb3B0aW9uIGxlYXZlcyB1bnJlYWNoYWJsZSBvYmplY3RzIHBhY2tlZCcgJworCWZzaGExcGF0aD0kKGVjaG8gIiRmc2hhMSIgfCBzZWQgLWUgInN8XCguLlwpfFwxL3wiKSAmJgorCWZzaGExcGF0aD0iLmdpdC9vYmplY3RzLyRmc2hhMXBhdGgiICYmCisJY3NoYTFwYXRoPSQoZWNobyAiJGNzaGExIiB8IHNlZCAtZSAic3xcKC4uXCl8XDEvfCIpICYmCisJY3NoYTFwYXRoPSIuZ2l0L29iamVjdHMvJGNzaGExcGF0aCIgJiYKKwl0c2hhMXBhdGg9JChlY2hvICIkdHNoYTEiIHwgc2VkIC1lICJzfFwoLi5cKXxcMS98IikgJiYKKwl0c2hhMXBhdGg9Ii5naXQvb2JqZWN0cy8kdHNoYTFwYXRoIiAmJgorCWdpdCBicmFuY2ggdHJhbnNpZW50X2JyYW5jaCAkY3NoYTEgJiYKKwlnaXQgcmVwYWNrIC1hIC1kIC1sICYmCisJdGVzdCAhIC1mICIkZnNoYTFwYXRoIiAmJgorCXRlc3QgISAtZiAiJGNzaGExcGF0aCIgJiYKKwl0ZXN0ICEgLWYgIiR0c2hhMXBhdGgiICYmCisJdGVzdCAxID0gJChscyAtMSAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucGFjayB8IHdjIC1sKSAmJgorCXBhY2tmaWxlPSQobHMgLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnBhY2spICYmCisJZ2l0IGJyYW5jaCAtRCB0cmFuc2llbnRfYnJhbmNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlcGFjayAtQSAtbCAmJgorCXRlc3QgISAtZiAiJGZzaGExcGF0aCIgJiYKKwl0ZXN0ICEgLWYgIiRjc2hhMXBhdGgiICYmCisJdGVzdCAhIC1mICIkdHNoYTFwYXRoIiAmJgorCWdpdCBzaG93ICRmc2hhMSAmJgorCWdpdCBzaG93ICRjc2hhMSAmJgorCWdpdCBzaG93ICR0c2hhMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhY2tlZCBvYmplY3RzIHJlY2VpdmUgdGltZXN0YW1wIG9mIHBhY2sgZmlsZScgJworCXRtcHBhY2s9Ii5naXQvb2JqZWN0cy9wYWNrL3RtcF9wYWNrIiAmJgorCWxuICIkcGFja2ZpbGUiICIkdG1wcGFjayIgJiYKKwlnaXQgcmVwYWNrIC1BIC1sIC1kICYmCisJdGVzdC1jaG10aW1lIC12ICswICIkdG1wcGFjayIgIiRmc2hhMXBhdGgiICIkY3NoYTFwYXRoIiAiJHRzaGExcGF0aCIgXAorCQk+IG10aW1lcyAmJgorCWNvbXBhcmVfbXRpbWVzIDwgbXRpbWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBib3RoZXIgbG9vc2VuaW5nIG9sZCBvYmplY3RzJyAnCisJb2JqMT0kKGVjaG8gb25lIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJb2JqMj0kKGVjaG8gdHdvIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJcGFjazE9JChlY2hvICRvYmoxIHwgZ2l0IHBhY2stb2JqZWN0cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrKSAmJgorCXBhY2syPSQoZWNobyAkb2JqMiB8IGdpdCBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjaykgJiYKKwlnaXQgcHJ1bmUtcGFja2VkICYmCisJZ2l0IGNhdC1maWxlIC1wICRvYmoxICYmCisJZ2l0IGNhdC1maWxlIC1wICRvYmoyICYmCisJdGVzdC1jaG10aW1lID0tODY0MDAgLmdpdC9vYmplY3RzL3BhY2svcGFjay0kcGFjazIucGFjayAmJgorCWdpdCByZXBhY2sgLUEgLWQgLS11bnBhY2stdW5yZWFjaGFibGU9MS5ob3VyLmFnbyAmJgorCWdpdCBjYXQtZmlsZSAtcCAkb2JqMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtcCAkb2JqMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc4MDAtZGlmZnRvb2wuc2ggYi90L3Q3ODAwLWRpZmZ0b29sLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmViMWQzZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3ODAwLWRpZmZ0b29sLnNoCkBAIC0wLDAgKzEsMzg4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIERhdmlkIEFndWlsYXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWRpZmZ0b29sCisKK1Rlc3RpbmcgYmFzaWMgZGlmZiB0b29sIGludm9jYXRpb24KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3JlbW92ZV9jb25maWdfdmFycygpCit7CisJIyBVbnNldCBhbGwgY29uZmlnIHZhcmlhYmxlcyB1c2VkIGJ5IGdpdC1kaWZmdG9vbAorCWdpdCBjb25maWcgLS11bnNldCBkaWZmLnRvb2wKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi5ndWl0b29sCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmZ0b29sLnRlc3QtdG9vbC5jbWQKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZnRvb2wucHJvbXB0CisJZ2l0IGNvbmZpZyAtLXVuc2V0IG1lcmdlLnRvb2wKKwlnaXQgY29uZmlnIC0tdW5zZXQgbWVyZ2V0b29sLnRlc3QtdG9vbC5jbWQKKwlnaXQgY29uZmlnIC0tdW5zZXQgbWVyZ2V0b29sLnByb21wdAorCXJldHVybiAwCit9CisKK3Jlc3RvcmVfdGVzdF9kZWZhdWx0cygpCit7CisJIyBSZXN0b3JlcyB0aGUgdGVzdCBkZWZhdWx0cyB1c2VkIGJ5IHNldmVyYWwgdGVzdHMKKwlyZW1vdmVfY29uZmlnX3ZhcnMKKwl1bnNldCBHSVRfRElGRl9UT09MCisJdW5zZXQgR0lUX0RJRkZUT09MX1BST01QVAorCXVuc2V0IEdJVF9ESUZGVE9PTF9OT19QUk9NUFQKKwlnaXQgY29uZmlnIGRpZmYudG9vbCB0ZXN0LXRvb2wgJiYKKwlnaXQgY29uZmlnIGRpZmZ0b29sLnRlc3QtdG9vbC5jbWQgJ2NhdCAkTE9DQUwnCisJZ2l0IGNvbmZpZyBkaWZmdG9vbC5ib2d1cy10b29sLmNtZCBmYWxzZQorfQorCitwcm9tcHRfZ2l2ZW4oKQoreworCXByb21wdD0iJDEiCisJdGVzdCAiJHByb21wdCIgPSAiTGF1bmNoICd0ZXN0LXRvb2wnIFtZL25dOiBicmFuY2giCit9CisKK3N0ZGluX2NvbnRhaW5zKCkKK3sKKwlncmVwID4vZGV2L251bGwgIiQxIgorfQorCitzdGRpbl9kb2Vzbm90X2NvbnRhaW4oKQoreworCSEgc3RkaW5fY29udGFpbnMgIiQxIgorfQorCisjIENyZWF0ZSBhIGZpbGUgb24gbWFzdGVyIGFuZCBjaGFuZ2UgaXQgb24gYnJhbmNoCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwJyAnCisJZWNobyBtYXN0ZXIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBmaWxlIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCBtYXN0ZXIgJiYKKwllY2hvIGJyYW5jaCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImJyYW5jaCBjaGFuZ2VkIGZpbGUiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCisjIENvbmZpZ3VyZSBhIGN1c3RvbSBkaWZmdG9vbC48dG9vbD4uY21kIGFuZCB1c2UgaXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY3VzdG9tIGNvbW1hbmRzJyAnCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzICYmCisJZ2l0IGNvbmZpZyBkaWZmdG9vbC50ZXN0LXRvb2wuY21kICJjYXQgXCRSRU1PVEUiICYmCisKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAibWFzdGVyIiAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzICYmCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gImJyYW5jaCIKKycKKworIyBFbnN1cmVzIHRoYXQgYSBjdXN0b20gZGlmZnRvb2wuPHRvb2w+LmNtZCBvdmVycmlkZXMgYnVpbHQtaW5zCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2N1c3RvbSBjb21tYW5kcyBvdmVycmlkZSBidWlsdC1pbnMnICcKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMgJiYKKwlnaXQgY29uZmlnIGRpZmZ0b29sLmRlZmF1bHRzLmNtZCAiY2F0IFwkUkVNT1RFIiAmJgorCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLXRvb2wgZGVmYXVsdHMgLS1uby1wcm9tcHQgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9ICJtYXN0ZXIiICYmCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZnRvb2wuZGVmYXVsdHMuY21kCisnCisKKyMgRW5zdXJlcyB0aGF0IGdpdC1kaWZmdG9vbCBpZ25vcmVzIGJvZ3VzIC0tdG9vbCB2YWx1ZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgaWdub3JlcyBiYWQgLS10b29sIHZhbHVlcycgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS10b29sPWJhZC10b29sIGJyYW5jaCkKKwl0ZXN0ICIkPyIgPSAxICYmCisJdGVzdCAiJGRpZmYiID0gIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCBmb3J3YXJkcyBhcmd1bWVudHMgdG8gZGlmZicgJworCT5mb3ItZGlmZiAmJgorCWdpdCBhZGQgZm9yLWRpZmYgJiYKKwllY2hvIGNoYW5nZXM+Zm9yLWRpZmYgJiYKKwlnaXQgYWRkIGZvci1kaWZmICYmCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLWNhY2hlZCAtLW5vLXByb21wdCAtLSBmb3ItZGlmZikgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiIiAmJgorCWdpdCByZXNldCAtLSBmb3ItZGlmZiAmJgorCXJtIGZvci1kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgaG9ub3JzIC0tZ3VpJyAnCisJZ2l0IGNvbmZpZyBtZXJnZS50b29sIGJvZ3VzLXRvb2wgJiYKKwlnaXQgY29uZmlnIGRpZmYudG9vbCBib2d1cy10b29sICYmCisJZ2l0IGNvbmZpZyBkaWZmLmd1aXRvb2wgdGVzdC10b29sICYmCisKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tZ3VpIGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiYnJhbmNoIiAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgLS1ndWkgbGFzdCBzZXR0aW5nIHdpbnMnICcKKwlnaXQgY29uZmlnIGRpZmYuZ3VpdG9vbCBib2d1cy10b29sICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tZ3VpIC0tbm8tZ3VpICYmCisKKwlnaXQgY29uZmlnIG1lcmdlLnRvb2wgYm9ndXMtdG9vbCAmJgorCWdpdCBjb25maWcgZGlmZi50b29sIGJvZ3VzLXRvb2wgJiYKKwlnaXQgY29uZmlnIGRpZmYuZ3VpdG9vbCB0ZXN0LXRvb2wgJiYKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tbm8tZ3VpIC0tZ3VpIGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiYnJhbmNoIiAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgLS1ndWkgd29ya3Mgd2l0aG91dCBjb25maWd1cmVkIGRpZmYuZ3VpdG9vbCcgJworCWdpdCBjb25maWcgZGlmZi50b29sIHRlc3QtdG9vbCAmJgorCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLWd1aSBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gImJyYW5jaCIgJiYKKworCXJlc3RvcmVfdGVzdF9kZWZhdWx0cworJworCisjIFNwZWNpZnkgdGhlIGRpZmYgdG9vbCB1c2luZyAkR0lUX0RJRkZfVE9PTAordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdHSVRfRElGRl9UT09MIHZhcmlhYmxlJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBkaWZmLnRvb2wgJiYKKwlHSVRfRElGRl9UT09MPXRlc3QtdG9vbCAmJgorCWV4cG9ydCBHSVRfRElGRl9UT09MICYmCisKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiYnJhbmNoIiAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzCisnCisKKyMgVGVzdCB0aGUgJEdJVF8qX1RPT0wgdmFyaWFibGVzIGFuZCBlbnN1cmUKKyMgdGhhdCAkR0lUX0RJRkZfVE9PTCBhbHdheXMgd2lucyB1bmxlc3MgLS10b29sIGlzIHNwZWNpZmllZAordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdHSVRfRElGRl9UT09MIG92ZXJyaWRlcycgJworCWdpdCBjb25maWcgZGlmZi50b29sIGJvZ3VzLXRvb2wgJiYKKwlnaXQgY29uZmlnIG1lcmdlLnRvb2wgYm9ndXMtdG9vbCAmJgorCisJR0lUX0RJRkZfVE9PTD10ZXN0LXRvb2wgJiYKKwlleHBvcnQgR0lUX0RJRkZfVE9PTCAmJgorCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gImJyYW5jaCIgJiYKKworCUdJVF9ESUZGX1RPT0w9Ym9ndXMtdG9vbCAmJgorCWV4cG9ydCBHSVRfRElGRl9UT09MICYmCisKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tdG9vbD10ZXN0LXRvb2wgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9ICJicmFuY2giICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMKKycKKworIyBUZXN0IHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIC0tbm8tcHJvbXB0IHRvIGRpZmZ0b29sCisjIHdoZW4gJEdJVF9ESUZGVE9PTF9OT19QUk9NUFQgaXMgdHJ1ZQordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdHSVRfRElGRlRPT0xfTk9fUFJPTVBUIHZhcmlhYmxlJyAnCisJR0lUX0RJRkZUT09MX05PX1BST01QVD10cnVlICYmCisJZXhwb3J0IEdJVF9ESUZGVE9PTF9OT19QUk9NUFQgJiYKKworCWRpZmY9JChnaXQgZGlmZnRvb2wgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9ICJicmFuY2giICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMKKycKKworIyBnaXQtZGlmZnRvb2wgc3VwcG9ydHMgdGhlIGRpZmZ0b29sLnByb21wdCB2YXJpYWJsZS4KKyMgVGVzdCB0aGF0IEdJVF9ESUZGVE9PTF9QUk9NUFQgY2FuIG92ZXJyaWRlIGRpZmZ0b29sLnByb21wdCA9IGZhbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ0dJVF9ESUZGVE9PTF9QUk9NUFQgdmFyaWFibGUnICcKKwlnaXQgY29uZmlnIGRpZmZ0b29sLnByb21wdCBmYWxzZSAmJgorCUdJVF9ESUZGVE9PTF9QUk9NUFQ9dHJ1ZSAmJgorCWV4cG9ydCBHSVRfRElGRlRPT0xfUFJPTVBUICYmCisKKwlwcm9tcHQ9JChlY2hvIHwgZ2l0IGRpZmZ0b29sIGJyYW5jaCB8IHRhaWwgLTEpICYmCisJcHJvbXB0X2dpdmVuICIkcHJvbXB0IiAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzCisnCisKKyMgVGVzdCB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcGFzcyAtLW5vLXByb21wdCB3aGVuIGRpZmZ0b29sLnByb21wdCBpcyBmYWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbC5wcm9tcHQgY29uZmlnIHZhcmlhYmxlIGlzIGZhbHNlJyAnCisJZ2l0IGNvbmZpZyBkaWZmdG9vbC5wcm9tcHQgZmFsc2UgJiYKKworCWRpZmY9JChnaXQgZGlmZnRvb2wgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9ICJicmFuY2giICYmCisKKwlyZXN0b3JlX3Rlc3RfZGVmYXVsdHMKKycKKworIyBUZXN0IHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIC0tbm8tcHJvbXB0IHdoZW4gbWVyZ2V0b29sLnByb21wdCBpcyBmYWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCBtZXJnZS5wcm9tcHQgPSBmYWxzZScgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgZGlmZnRvb2wucHJvbXB0ICYmCisJZ2l0IGNvbmZpZyBtZXJnZXRvb2wucHJvbXB0IGZhbHNlICYmCisKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiYnJhbmNoIiAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzCisnCisKKyMgVGVzdCB0aGF0IHRoZSAteSBmbGFnIGNhbiBvdmVycmlkZSBkaWZmdG9vbC5wcm9tcHQgPSB0cnVlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sLnByb21wdCBjYW4gb3ZlcnJpZGRlbiB3aXRoIC15JyAnCisJZ2l0IGNvbmZpZyBkaWZmdG9vbC5wcm9tcHQgdHJ1ZSAmJgorCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAteSBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gImJyYW5jaCIgJiYKKworCXJlc3RvcmVfdGVzdF9kZWZhdWx0cworJworCisjIFRlc3QgdGhhdCB0aGUgLS1wcm9tcHQgZmxhZyBjYW4gb3ZlcnJpZGUgZGlmZnRvb2wucHJvbXB0ID0gZmFsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wucHJvbXB0IGNhbiBvdmVycmlkZGVuIHdpdGggLS1wcm9tcHQnICcKKwlnaXQgY29uZmlnIGRpZmZ0b29sLnByb21wdCBmYWxzZSAmJgorCisJcHJvbXB0PSQoZWNobyB8IGdpdCBkaWZmdG9vbCAtLXByb21wdCBicmFuY2ggfCB0YWlsIC0xKSAmJgorCXByb21wdF9naXZlbiAiJHByb21wdCIgJiYKKworCXJlc3RvcmVfdGVzdF9kZWZhdWx0cworJworCisjIFRlc3QgdGhhdCB0aGUgbGFzdCBmbGFnIHBhc3NlZCBvbiB0aGUgY29tbWFuZC1saW5lIHdpbnMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgbGFzdCBmbGFnIHdpbnMnICcKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tcHJvbXB0IC0tbm8tcHJvbXB0IGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiYnJhbmNoIiAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzICYmCisKKwlwcm9tcHQ9JChlY2hvIHwgZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tcHJvbXB0IGJyYW5jaCB8IHRhaWwgLTEpICYmCisJcHJvbXB0X2dpdmVuICIkcHJvbXB0IiAmJgorCisJcmVzdG9yZV90ZXN0X2RlZmF1bHRzCisnCisKKyMgZ2l0LWRpZmZ0b29sIGZhbGxzIGJhY2sgdG8gZ2l0LW1lcmdldG9vbCBjb25maWcgdmFyaWFibGVzCisjIHNvIHRlc3QgdGhhdCBiZWhhdmlvciBoZXJlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sICsgbWVyZ2V0b29sIGNvbmZpZyB2YXJpYWJsZXMnICcKKwlyZW1vdmVfY29uZmlnX3ZhcnMgJiYKKwlnaXQgY29uZmlnIG1lcmdlLnRvb2wgdGVzdC10b29sICYmCisJZ2l0IGNvbmZpZyBtZXJnZXRvb2wudGVzdC10b29sLmNtZCAiY2F0IFwkTE9DQUwiICYmCisKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSAiYnJhbmNoIiAmJgorCisJIyBzZXQgbWVyZ2UudG9vbCB0byBzb21ldGhpbmcgYm9ndXMsIGRpZmYudG9vbCB0byB0ZXN0LXRvb2wKKwlnaXQgY29uZmlnIG1lcmdlLnRvb2wgYm9ndXMtdG9vbCAmJgorCWdpdCBjb25maWcgZGlmZi50b29sIHRlc3QtdG9vbCAmJgorCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2gpICYmCisJdGVzdCAiJGRpZmYiID0gImJyYW5jaCIgJiYKKworCXJlc3RvcmVfdGVzdF9kZWZhdWx0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sLjx0b29sPi5wYXRoJyAnCisJZ2l0IGNvbmZpZyBkaWZmdG9vbC50a2RpZmYucGF0aCBlY2hvICYmCisJZGlmZj0kKGdpdCBkaWZmdG9vbCAtLXRvb2w9dGtkaWZmIC0tbm8tcHJvbXB0IGJyYW5jaCkgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZnRvb2wudGtkaWZmLnBhdGggJiYKKwlsaW5lcz0kKGVjaG8gIiRkaWZmIiB8IGdyZXAgZmlsZSB8IHdjIC1sKSAmJgorCXRlc3QgIiRsaW5lcyIgLWVxIDEgJiYKKworCXJlc3RvcmVfdGVzdF9kZWZhdWx0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIC0tZXh0Y21kPWNhdCcgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1leHRjbWQ9Y2F0IGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSBicmFuY2giJExGIm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIC0tZXh0Y21kIGNhdCcgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1leHRjbWQgY2F0IGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSBicmFuY2giJExGIm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIC14IGNhdCcgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLXggY2F0IGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSBicmFuY2giJExGIm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIC0tZXh0Y21kIGVjaG8gYXJnMScgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1leHRjbWQgc2hcIC1jXCBcImVjaG9cIFwkMVwiIGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgLS1leHRjbWQgY2F0IGFyZzEnICcKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tZXh0Y21kIHNoXCAtY1wgXCJjYXRcIFwkMVwiIGJyYW5jaCkgJiYKKwl0ZXN0ICIkZGlmZiIgPSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCAtLWV4dGNtZCBjYXQgYXJnMicgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1leHRjbWQgc2hcIC1jXCBcImNhdFwgXCQyXCIgYnJhbmNoKSAmJgorCXRlc3QgIiRkaWZmIiA9IGJyYW5jaAorJworCisjIENyZWF0ZSBhIHNlY29uZCBmaWxlIG9uIG1hc3RlciBhbmQgYSBkaWZmZXJlbnQgdmVyc2lvbiBvbiBicmFuY2gKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgd2l0aCAyIGZpbGVzIGRpZmZlcmVudCcgJworCWVjaG8gbTIgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIGZpbGUyIiAmJgorCisJZ2l0IGNoZWNrb3V0IGJyYW5jaCAmJgorCWVjaG8gYnIyID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJicmFuY2ggY2hhbmdlZCBmaWxlMiIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2F5IG5vIHRvIHRoZSBmaXJzdCBmaWxlJyAnCisJZGlmZj0kKCAoZWNobyBuOyBlY2hvKSB8IGdpdCBkaWZmdG9vbCAteCBjYXQgYnJhbmNoICkgJiYKKworCWVjaG8gIiRkaWZmIiB8IHN0ZGluX2NvbnRhaW5zIG0yICYmCisJZWNobyAiJGRpZmYiIHwgc3RkaW5fY29udGFpbnMgYnIyICYmCisJZWNobyAiJGRpZmYiIHwgc3RkaW5fZG9lc25vdF9jb250YWluIG1hc3RlciAmJgorCWVjaG8gIiRkaWZmIiB8IHN0ZGluX2RvZXNub3RfY29udGFpbiBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzYXkgbm8gdG8gdGhlIHNlY29uZCBmaWxlJyAnCisJZGlmZj0kKCAoZWNobzsgZWNobyBuKSB8IGdpdCBkaWZmdG9vbCAteCBjYXQgYnJhbmNoICkgJiYKKworCWVjaG8gIiRkaWZmIiB8IHN0ZGluX2NvbnRhaW5zIG1hc3RlciAmJgorCWVjaG8gIiRkaWZmIiB8IHN0ZGluX2NvbnRhaW5zIGJyYW5jaCAmJgorCWVjaG8gIiRkaWZmIiB8IHN0ZGluX2RvZXNub3RfY29udGFpbiBtMiAmJgorCWVjaG8gIiRkaWZmIiB8IHN0ZGluX2RvZXNub3RfY29udGFpbiBicjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCAtLXRvb2wtaGVscCcgJworCXRvb2xfaGVscD0kKGdpdCBkaWZmdG9vbCAtLXRvb2wtaGVscCkgJiYKKwllY2hvICIkdG9vbF9oZWxwIiB8IHN0ZGluX2NvbnRhaW5zIHRvb2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCBjaGFuZ2UgaW4gc3ViZGlyZWN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCW1rZGlyIHN1YiAmJgorCWVjaG8gbWFzdGVyID5zdWIvc3ViICYmCisJZ2l0IGFkZCBzdWIvc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3ViL3N1YiIgJiYKKwllY2hvIHRlc3QgPj5maWxlICYmCisJZWNobyB0ZXN0ID4+c3ViL3N1YiAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGJvdGgiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgLWQnICcKKwlkaWZmPSQoZ2l0IGRpZmZ0b29sIC1kIC0tZXh0Y21kIGxzIGJyYW5jaCkgJiYKKwllY2hvICIkZGlmZiIgfCBzdGRpbl9jb250YWlucyBzdWIgJiYKKwllY2hvICIkZGlmZiIgfCBzdGRpbl9jb250YWlucyBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgLS1kaXItZGlmZicgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAtLWV4dGNtZCBscyBicmFuY2gpICYmCisJZWNobyAiJGRpZmYiIHwgc3RkaW5fY29udGFpbnMgc3ViICYmCisJZWNobyAiJGRpZmYiIHwgc3RkaW5fY29udGFpbnMgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgaWdub3JlcyAtLXByb21wdCcgJworCWRpZmY9JChnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAtLXByb21wdCAtLWV4dGNtZCBscyBicmFuY2gpICYmCisJZWNobyAiJGRpZmYiIHwgc3RkaW5fY29udGFpbnMgc3ViICYmCisJZWNobyAiJGRpZmYiIHwgc3RkaW5fY29udGFpbnMgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgZnJvbSBzdWJkaXJlY3RvcnknICcKKwkoCisJCWNkIHN1YiAmJgorCQlkaWZmPSQoZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYgLS1leHRjbWQgbHMgYnJhbmNoKSAmJgorCQllY2hvICIkZGlmZiIgfCBzdGRpbl9jb250YWlucyBzdWIgJiYKKwkJZWNobyAiJGRpZmYiIHwgc3RkaW5fY29udGFpbnMgZmlsZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3ODEwLWdyZXAuc2ggYi90L3Q3ODEwLWdyZXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjY5ODAwMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc4MTAtZ3JlcC5zaApAQCAtMCwwICsxLDExOTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGdyZXAgdmFyaW91cy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+aGVsbG8uYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOworCXJldHVybiAwOworCS8qIGNoYXIgPz8gKi8KK30KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl7CisJCWVjaG8gZm9vIG1tYXAgYmFyCisJCWVjaG8gZm9vX21tYXAgYmFyCisJCWVjaG8gZm9vX21tYXAgYmFyIG1tYXAKKwkJZWNobyBmb28gbW1hcCBiYXJfbW1hcAorCQllY2hvIGZvb19tbWFwIGJhciBtbWFwIGJhegorCX0gPmZpbGUgJiYKKwl7CisJCWVjaG8gSGVsbG8gd29ybGQKKwkJZWNobyBIZUxMbyB3b3JsZAorCQllY2hvIEhlbGxvX3dvcmxkCisJCWVjaG8gSGVMTG9fd29ybGQKKwl9ID5oZWxsb193b3JsZCAmJgorCXsKKwkJZWNobyAiYStiKmMiCisJCWVjaG8gImErYmMiCisJCWVjaG8gImFiYyIKKwl9ID5hYiAmJgorCWVjaG8gdnZ2ID52ICYmCisJZWNobyB3dyB3ID53ICYmCisJZWNobyB4IHggeHggeCA+eCAmJgorCWVjaG8geSB5eSA+eSAmJgorCWVjaG8genp6ID4geiAmJgorCW1rZGlyIHQgJiYKKwllY2hvIHRlc3QgPnQvdCAmJgorCWVjaG8gdnZ2ID50L3YgJiYKKwlta2RpciB0L2EgJiYKKwllY2hvIHZ2diA+dC9hL3YgJiYKKwl7CisJCWVjaG8gImxpbmUgd2l0aG91dCBsZWFkaW5nIHNwYWNlMSIKKwkJZWNobyAiIGxpbmUgd2l0aCBsZWFkaW5nIHNwYWNlMSIKKwkJZWNobyAiIGxpbmUgd2l0aCBsZWFkaW5nIHNwYWNlMiIKKwkJZWNobyAiIGxpbmUgd2l0aCBsZWFkaW5nIHNwYWNlMyIKKwkJZWNobyAibGluZSB3aXRob3V0IGxlYWRpbmcgc3BhY2UyIgorCX0gPnNwYWNlICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgc2hvdWxkIG5vdCBzZWdmYXVsdCB3aXRoIGEgYmFkIGlucHV0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgIigiCisnCisKK2ZvciBIIGluIEhFQUQgJycKK2RvCisJY2FzZSAiJEgiIGluCisJSEVBRCkJSEM9J0hFQUQ6JyBMPSdIRUFEJyA7OworCScnKQlIQz0gTD0naW4gd29ya2luZyB0cmVlJyA7OworCWVzYWMKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6MTpmb28gbW1hcCBiYXIKKwkJCWVjaG8gJHtIQ31maWxlOjM6Zm9vX21tYXAgYmFyIG1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjQ6Zm9vIG1tYXAgYmFyX21tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjU6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLmxpbmVudW1iZXI9ZmFsc2UgZ3JlcCAtbiAtdyAtZSBtbWFwICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCIgJworCQl7CisJCQllY2hvICR7SEN9ZmlsZToxOmZvbyBtbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGU6Mzpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NDpmb28gbW1hcCBiYXJfbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IC1jIGdyZXAubGluZW51bWJlcj10cnVlIGdyZXAgLXcgLWUgbW1hcCAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6Zm9vIG1tYXAgYmFyCisJCQllY2hvICR7SEN9ZmlsZTpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6Zm9vIG1tYXAgYmFyX21tYXAKKwkJCWVjaG8gJHtIQ31maWxlOmZvb19tbWFwIGJhciBtbWFwIGJhegorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5saW5lbnVtYmVyPXRydWUgZ3JlcCAtLW5vLWxpbmUtbnVtYmVyIC13IC1lIG1tYXAgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh3KSIgJworCQk6ID5leHBlY3RlZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtbiAtdyAtZSAiXnciID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCAoeCkiICcKKwkJeworCQkJZWNobyAke0hDfXg6MTp4IHggeHggeAorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtbiAtdyAtZSAieCB4eCogeCIgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh5LTEpIiAnCisJCXsKKwkJCWVjaG8gJHtIQ315OjE6eSB5eQorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtbiAtdyAtZSAiXnkiICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCAoeS0yKSIgJworCQk6ID5leHBlY3RlZCAmJgorCQlpZiBnaXQgZ3JlcCAtbiAtdyAtZSAiXnkgeSIgJEggPmFjdHVhbAorCQl0aGVuCisJCQllY2hvIHNob3VsZCBub3QgaGF2ZSBtYXRjaGVkCisJCQljYXQgYWN0dWFsCisJCQlmYWxzZQorCQllbHNlCisJCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkJZmkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh6KSIgJworCQk6ID5leHBlY3RlZCAmJgorCQlpZiBnaXQgZ3JlcCAtbiAtdyAtZSAiXnoiICRIID5hY3R1YWwKKwkJdGhlbgorCQkJZWNobyBzaG91bGQgbm90IGhhdmUgbWF0Y2hlZAorCQkJY2F0IGFjdHVhbAorCQkJZmFsc2UKKwkJZWxzZQorCQkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJCWZpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCAodC0xKSIgJworCQllY2hvICIke0hDfXQvdDoxOnRlc3QiID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtbiAtZSB0ZXN0ICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCAodC0yKSIgJworCQllY2hvICIke0hDfXQ6MTp0ZXN0IiA+ZXhwZWN0ZWQgJiYKKwkJKAorCQkJY2QgdCAmJgorCQkJZ2l0IGdyZXAgLW4gLWUgdGVzdCAkSAorCQkpID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCAodC0zKSIgJworCQllY2hvICIke0hDfXQvdDoxOnRlc3QiID5leHBlY3RlZCAmJgorCQkoCisJCQljZCB0ICYmCisJCQlnaXQgZ3JlcCAtLWZ1bGwtbmFtZSAtbiAtZSB0ZXN0ICRICisJCSkgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC1jICRMIChubyAvZGV2L251bGwpIiAnCisJCSEgZ2l0IGdyZXAgLWMgdGVzdCAkSCB8IGdyZXAgL2Rldi9udWxsCisgICAgICAgICcKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1tYXgtZGVwdGggLTEgJEwiICcKKwkJeworCQkJZWNobyAke0hDfXQvYS92OjE6dnZ2CisJCQllY2hvICR7SEN9dC92OjE6dnZ2CisJCQllY2hvICR7SEN9djoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAtMSAtbiAtZSB2dnYgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDAgJEwiICcKKwkJeworCQkJZWNobyAke0hDfXY6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggMCAtbiAtZSB2dnYgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDAgLS0gJyonICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L2EvdjoxOnZ2dgorCQkJZWNobyAke0hDfXQvdjoxOnZ2dgorCQkJZWNobyAke0hDfXY6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggMCAtbiAtZSB2dnYgJEggLS0gIioiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAxICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L3Y6MTp2dnYKKwkJCWVjaG8gJHtIQ312OjE6dnZ2CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tbWF4LWRlcHRoIDEgLW4gLWUgdnZ2ICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAwIC0tIHQgJEwiICcKKwkJeworCQkJZWNobyAke0hDfXQvdjoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAwIC1uIC1lIHZ2diAkSCAtLSB0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAwIC0tIC4gdCAkTCIgJworCQl7CisJCQllY2hvICR7SEN9dC92OjE6dnZ2CisJCQllY2hvICR7SEN9djoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAwIC1uIC1lIHZ2diAkSCAtLSAuIHQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDAgLS0gdCAuICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L3Y6MTp2dnYKKwkJCWVjaG8gJHtIQ312OjE6dnZ2CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tbWF4LWRlcHRoIDAgLW4gLWUgdnZ2ICRIIC0tIHQgLiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD1mYWxzZSIgJworCQllY2hvICJhYjphK2JjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IC1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9ZmFsc2UgZ3JlcCAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCB3aXRoIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSIgJworCQllY2hvICJhYjphYmMiID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIGdyZXAgImErYipjIiBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm50eXBlPWJhc2ljIiAnCisJCWVjaG8gImFiOmErYmMiID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJudHlwZT1iYXNpYyBncmVwICJhK2IqYyIgYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCIgJworCQllY2hvICJhYjphYmMiID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBncmVwICJhK2IqYyIgYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJudHlwZT1maXhlZCIgJworCQllY2hvICJhYjphK2IqYyIgPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIGdyZXAgImErYipjIiBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAiZ3JlcCAkTCB3aXRoIGdyZXAucGF0dGVybnR5cGU9cGVybCIgJworCQllY2hvICJhYjphK2IqYyIgPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLnBhdHRlcm50eXBlPXBlcmwgZ3JlcCAiYVx4ezJifWJceHsyYX1jIiBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm5UeXBlPWRlZmF1bHQgYW5kIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSIgJworCQllY2hvICJhYjphYmMiID5leHBlY3RlZCAmJgorCQlnaXQgXAorCQkJLWMgZ3JlcC5wYXR0ZXJuVHlwZT1kZWZhdWx0IFwKKwkJCS1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBcCisJCQlncmVwICJhK2IqYyIgYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIGFuZCBncmVwLnBhdHRlcm5UeXBlPWRlZmF1bHQiICcKKwkJZWNobyAiYWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IFwKKwkJCS1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBcCisJCQktYyBncmVwLnBhdHRlcm5UeXBlPWRlZmF1bHQgXAorCQkJZ3JlcCAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAkTCB3aXRoIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQgYW5kIGdyZXAuZXh0ZW5kZWRSZWdleHA9ZmFsc2UnICcKKwkJZWNobyAiYWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IFwKKwkJCS1jIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQgXAorCQkJLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD1mYWxzZSBcCisJCQlncmVwICJhK2IqYyIgYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyBhbmQgZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlJyAnCisJCWVjaG8gImFiOmErYmMiID5leHBlY3RlZCAmJgorCQlnaXQgXAorCQkJLWMgZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyBcCisJCQktYyBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUgXAorCQkJZ3JlcCAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAkTCB3aXRoIGdyZXAuZXh0ZW5kZWRSZWdleHA9ZmFsc2UgYW5kIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQnICcKKwkJZWNobyAiYWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IFwKKwkJCS1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9ZmFsc2UgXAorCQkJLWMgZ3JlcC5wYXR0ZXJuVHlwZT1leHRlbmRlZCBcCisJCQlncmVwICJhK2IqYyIgYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwICRMIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIGFuZCBncmVwLnBhdHRlcm5UeXBlPWJhc2ljJyAnCisJCWVjaG8gImFiOmErYmMiID5leHBlY3RlZCAmJgorCQlnaXQgXAorCQkJLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIFwKKwkJCS1jIGdyZXAucGF0dGVyblR5cGU9YmFzaWMgXAorCQkJZ3JlcCAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworZG9uZQorCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWwgLUMnICcKKwlnaXQgZ3JlcCAtbCAtQzEgZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTo1CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWwgLUMnICcKKwlnaXQgZ3JlcCAtYyAtQzEgZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtTCAtQycgJworCWdpdCBscy1maWxlcyA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtTCAtQzEgbm9uZXhpc3RlbnRfc3RyaW5nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTpmb28gbW1hcCBiYXJfbW1hcAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWUgQSAtLWFuZCAtZSBCJyAnCisJZ2l0IGdyZXAgLWUgImZvbyBtbWFwIiAtLWFuZCAtZSBiYXJfbW1hcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2ZpbGU6Zm9vX21tYXAgYmFyIG1tYXAKK2ZpbGU6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CitFT0YKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwICggLWUgQSAtLW9yIC1lIEIgKSAtLWFuZCAtZSBCJyAnCisJZ2l0IGdyZXAgXCggLWUgZm9vXyAtLW9yIC1lIGJheiBcKSBcCisJCS0tYW5kIC1lICIgbW1hcCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlOmZvbyBtbWFwIGJhcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWUgQSAtLWFuZCAtLW5vdCAtZSBCJyAnCisJZ2l0IGdyZXAgLWUgImZvbyBtbWFwIiAtLWFuZCAtLW5vdCAtZSBiYXJfbW1hcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgc2hvdWxkIGlnbm9yZSBHUkVQX09QVElPTlMnICcKKwlHUkVQX09QVElPTlM9LXYgZ2l0IGdyZXAgIiBtbWFwIGJhclwkIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWYsIG5vbi1leGlzdGVudCBmaWxlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLWYgcGF0dGVybnMKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTpmb28gbW1hcCBiYXIKK2ZpbGU6Zm9vX21tYXAgYmFyCitmaWxlOmZvb19tbWFwIGJhciBtbWFwCitmaWxlOmZvbyBtbWFwIGJhcl9tbWFwCitmaWxlOmZvb19tbWFwIGJhciBtbWFwIGJhegorRU9GCisKK2NhdCA+cGF0dGVybiA8PEVPRgorbW1hcAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWYsIG9uZSBwYXR0ZXJuJyAnCisJZ2l0IGdyZXAgLWYgcGF0dGVybiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2ZpbGU6Zm9vIG1tYXAgYmFyCitmaWxlOmZvb19tbWFwIGJhcgorZmlsZTpmb29fbW1hcCBiYXIgbW1hcAorZmlsZTpmb28gbW1hcCBiYXJfbW1hcAorZmlsZTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKK3QvYS92OnZ2dgordC92OnZ2dgordjp2dnYKK0VPRgorCitjYXQgPnBhdHRlcm5zIDw8RU9GCittbWFwCit2dnYKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1mLCBtdWx0aXBsZSBwYXR0ZXJucycgJworCWdpdCBncmVwIC1mIHBhdHRlcm5zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCwgbXVsdGlwbGUgcGF0dGVybnMnICcKKwlnaXQgZ3JlcCAiJChjYXQgcGF0dGVybnMpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2ZpbGU6Zm9vIG1tYXAgYmFyCitmaWxlOmZvb19tbWFwIGJhcgorZmlsZTpmb29fbW1hcCBiYXIgbW1hcAorZmlsZTpmb28gbW1hcCBiYXJfbW1hcAorZmlsZTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKK3QvYS92OnZ2dgordC92OnZ2dgordjp2dnYKK0VPRgorCitjYXQgPnBhdHRlcm5zIDw8RU9GCisKK21tYXAKKwordnZ2CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1mLCBpZ25vcmUgZW1wdHkgbGluZXMnICcKKwlnaXQgZ3JlcCAtZiBwYXR0ZXJucyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWYsIGlnbm9yZSBlbXB0eSBsaW5lcywgcmVhZCBwYXR0ZXJucyBmcm9tIHN0ZGluJyAnCisJZ2l0IGdyZXAgLWYgLSA8cGF0dGVybnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCit5OnkgeXkKKy0tCit6Onp6egorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLXEsIHNpbGVudGx5IHJlcG9ydCBtYXRjaGVzJyAnCisJPmVtcHR5ICYmCisJZ2l0IGdyZXAgLXEgbW1hcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLXEgcWZ3ZnEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1DMSBodW5rIG1hcmsgYmV0d2VlbiBmaWxlcycgJworCWdpdCBncmVwIC1DMSAiXlt5el0iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgc2V0dXAnICcKKwllY2hvIGEgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPSJXaXRoICogQXN0ZXJpc2siIFwKKwlHSVRfQVVUSE9SX0VNQUlMPSJ4eXp6eUBmcm90ei5jb20iIFwKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQiICYmCisKKwllY2hvIGEgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidGhpcmQiICYmCisKKwllY2hvIGEgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPSJOaWdodCBGYWxsIiBcCisJR0lUX0FVVEhPUl9FTUFJTD0ibml0Zm9sQGZyb2JvenouY29tIiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAiZm91cnRoIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCAoMSknICcKKwlnaXQgbG9nIC0tYXV0aG9yPWF1dGhvciAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gdGhpcmQgJiYgZWNobyBpbml0aWFsCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCAoMiknICcKKwlnaXQgbG9nIC0tYXV0aG9yPSIgKiAiIC1GIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCXsKKwkJZWNobyBzZWNvbmQKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICgzKScgJworCWdpdCBsb2cgLS1hdXRob3I9Il5BIFUiIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCXsKKwkJZWNobyB0aGlyZCAmJiBlY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICg0KScgJworCWdpdCBsb2cgLS1hdXRob3I9ImZyb3R6XC5jb20+JCIgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJeworCQllY2hvIHNlY29uZAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDUpJyAnCisJZ2l0IGxvZyAtLWF1dGhvcj1UaG9yIC1GIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCXsKKwkJZWNobyB0aGlyZCAmJiBlY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICg2KScgJworCWdpdCBsb2cgLS1hdXRob3I9LTA3MDAgIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICg3KScgJworCWdpdCBsb2cgLWcgLS1ncmVwLXJlZmxvZz0iY29tbWl0OiB0aGlyZCIgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJZWNobyB0aGlyZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCAoOCknICcKKwlnaXQgbG9nIC1nIC0tZ3JlcC1yZWZsb2c9ImNvbW1pdDogdGhpcmQiIC0tZ3JlcC1yZWZsb2c9ImNvbW1pdDogc2Vjb25kIiAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gdGhpcmQgJiYgZWNobyBzZWNvbmQKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICg5KScgJworCWdpdCBsb2cgLWcgLS1ncmVwLXJlZmxvZz0iY29tbWl0OiB0aGlyZCIgLS1hdXRob3I9IlRob3IiIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCWVjaG8gdGhpcmQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDkpJyAnCisJZ2l0IGxvZyAtZyAtLWdyZXAtcmVmbG9nPSJjb21taXQ6IHRoaXJkIiAtLWF1dGhvcj0ibm9uLWV4aXN0YW50IiAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwk6ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyZXAtcmVmbG9nIGNhbiBvbmx5IGJlIHVzZWQgdW5kZXIgLWcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0tZ3JlcC1yZWZsb2c9ImNvbW1pdDogdGhpcmQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyB3aXRoIG11bHRpcGxlIC0tZ3JlcCB1c2VzIHVuaW9uJyAnCisJZ2l0IGxvZyAtLWdyZXA9aSAtLWdyZXA9ciAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCQllY2hvIGZvdXJ0aCAmJiBlY2hvIHRoaXJkICYmIGVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tYWxsLW1hdGNoIHdpdGggbXVsdGlwbGUgLS1ncmVwIHVzZXMgaW50ZXJzZWN0aW9uJyAnCisJZ2l0IGxvZyAtLWFsbC1tYXRjaCAtLWdyZXA9aSAtLWdyZXA9ciAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCQllY2hvIHRoaXJkCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgd2l0aCBtdWx0aXBsZSAtLWF1dGhvciB1c2VzIHVuaW9uJyAnCisJZ2l0IGxvZyAtLWF1dGhvcj0iVGhvciIgLS1hdXRob3I9IkFzdGVyIiAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCSAgICBlY2hvIHRoaXJkICYmIGVjaG8gc2Vjb25kICYmIGVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tYWxsLW1hdGNoIHdpdGggbXVsdGlwbGUgLS1hdXRob3Igc3RpbGwgdXNlcyB1bmlvbicgJworCWdpdCBsb2cgLS1hbGwtbWF0Y2ggLS1hdXRob3I9IlRob3IiIC0tYXV0aG9yPSJBc3RlciIgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXsKKwkgICAgZWNobyB0aGlyZCAmJiBlY2hvIHNlY29uZCAmJiBlY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyZXAgLS1hdXRob3IgdXNlcyBpbnRlcnNlY3Rpb24nICcKKwkjIGdyZXAgbWF0Y2hlcyBvbmx5IHRoaXJkIGFuZCBmb3VydGgKKwkjIGF1dGhvciBtYXRjaGVzIG9ubHkgaW5pdGlhbCBhbmQgdGhpcmQKKwlnaXQgbG9nIC0tYXV0aG9yPSJBIFUgVGhvciIgLS1ncmVwPXIgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXsKKwkJZWNobyB0aGlyZAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JlcCAtLWdyZXAgLS1hdXRob3IgdGFrZXMgdW5pb24gb2YgZ3JlcHMgYW5kIGludGVyc2VjdHMgd2l0aCBhdXRob3InICcKKwkjIGdyZXAgbWF0Y2hlcyBpbml0aWFsIGFuZCBzZWNvbmQgYnV0IG5vdCB0aGlyZAorCSMgYXV0aG9yIG1hdGNoZXMgb25seSBpbml0aWFsIGFuZCB0aGlyZAorCWdpdCBsb2cgLS1hdXRob3I9IkEgVSBUaG9yIiAtLWdyZXA9cyAtLWdyZXA9bCAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCQllY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLS1hbGwtbWF0Y2ggLWdyZXAgLS1hdXRob3IgLS1hdXRob3Igc3RpbGwgdGFrZXMgdW5pb24gb2YgYXV0aG9ycyBhbmQgaW50ZXJzZWN0cyB3aXRoIGdyZXAnICcKKwkjIGdyZXAgbWF0Y2hlcyBvbmx5IGluaXRpYWwgYW5kIHRoaXJkCisJIyBhdXRob3IgbWF0Y2hlcyBhbGwgYnV0IHNlY29uZAorCWdpdCBsb2cgLS1hbGwtbWF0Y2ggLS1hdXRob3I9IlRob3IiIC0tYXV0aG9yPSJOaWdodCIgLS1ncmVwPWkgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXsKKwkgICAgZWNobyB0aGlyZCAmJiBlY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyZXAgLS1hdXRob3IgLS1hdXRob3IgdGFrZXMgdW5pb24gb2YgYXV0aG9ycyBhbmQgaW50ZXJzZWN0cyB3aXRoIGdyZXAnICcKKwkjIGdyZXAgbWF0Y2hlcyBvbmx5IGluaXRpYWwgYW5kIHRoaXJkCisJIyBhdXRob3IgbWF0Y2hlcyBhbGwgYnV0IHNlY29uZAorCWdpdCBsb2cgLS1hdXRob3I9IlRob3IiIC0tYXV0aG9yPSJOaWdodCIgLS1ncmVwPWkgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXsKKwkgICAgZWNobyB0aGlyZCAmJiBlY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWFsbC1tYXRjaCAtLWdyZXAgLS1ncmVwIC0tYXV0aG9yIHRha2VzIGludGVyc2VjdGlvbicgJworCSMgZ3JlcCBtYXRjaGVzIG9ubHkgdGhpcmQKKwkjIGF1dGhvciBtYXRjaGVzIG9ubHkgaW5pdGlhbCBhbmQgdGhpcmQKKwlnaXQgbG9nIC0tYWxsLW1hdGNoIC0tYXV0aG9yPSJBIFUgVGhvciIgLS1ncmVwPWkgLS1ncmVwPXIgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXsKKwkJZWNobyB0aGlyZAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tYXV0aG9yIGRvZXMgbm90IHNlYXJjaCBpbiB0aW1lc3RhbXAnICcKKwk6ID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tYXV0aG9yPSIkR0lUX0FVVEhPUl9EQVRFIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1jb21taXR0ZXIgZG9lcyBub3Qgc2VhcmNoIGluIHRpbWVzdGFtcCcgJworCTogPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1jb21taXR0ZXI9IiRHSVRfQ09NTUlUVEVSX0RBVEUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgd2l0aCBDRV9WQUxJRCBmaWxlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFzc3VtZS11bmNoYW5nZWQgdC90ICYmCisJcm0gdC90ICYmCisJdGVzdCAiJChnaXQgZ3JlcCB0ZXN0KSIgPSAidC90OnRlc3QiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWFzc3VtZS11bmNoYW5nZWQgdC90ICYmCisJZ2l0IGNoZWNrb3V0IHQvdAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jPSNpbmNsdWRlIDxzdGRpby5oPgoraGVsbG8uYzoJcmV0dXJuIDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtcCB3aXRoIHVzZXJkaWZmJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbS5mdW5jbmFtZSAiXiMiICYmCisJZWNobyAiaGVsbG8uYyBkaWZmPWN1c3RvbSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGdyZXAgLXAgcmV0dXJuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYz1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jOglyZXR1cm4gMDsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1wJyAnCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgZ3JlcCAtcCByZXR1cm4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jLSNpbmNsdWRlIDxzdGRpby5oPgoraGVsbG8uYz1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jLXsKK2hlbGxvLmMtCXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKK2hlbGxvLmM6CXJldHVybiAwOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLXAgLUI1JyAnCisJZ2l0IGdyZXAgLXAgLUI1IHJldHVybiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmM9aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraGVsbG8uYy17CitoZWxsby5jLQlwcmludGYoIkhlbGxvIHdvcmxkLlxuIik7CitoZWxsby5jOglyZXR1cm4gMDsKK2hlbGxvLmMtCS8qIGNoYXIgPz8gKi8KK2hlbGxvLmMtfQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLVcnICcKKwlnaXQgZ3JlcCAtVyByZXR1cm4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jPQlwcmludGYoIkhlbGxvIHdvcmxkLlxuIik7CitoZWxsby5jOglyZXR1cm4gMDsKK2hlbGxvLmMtCS8qIGNoYXIgPz8gKi8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1XIHdpdGggdXNlcmRpZmYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXRhdHRyaWJ1dGVzIiAmJgorCWdpdCBjb25maWcgZGlmZi5jdXN0b20ueGZ1bmNuYW1lICIocHJpbnRmLip8fSkkIiAmJgorCWVjaG8gImhlbGxvLmMgZGlmZj1jdXN0b20iID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBncmVwIC1XIHJldHVybiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgZnJvbSBhIHN1YmRpcmVjdG9yeSB0byBzZWFyY2ggd2lkZXIgYXJlYSAoMSknICcKKwlta2RpciAtcCBzICYmCisJKAorCQljZCBzICYmIGdpdCBncmVwICJ4IHggeCIgLi4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgZnJvbSBhIHN1YmRpcmVjdG9yeSB0byBzZWFyY2ggd2lkZXIgYXJlYSAoMiknICcKKwlta2RpciAtcCBzICYmCisJKAorCQljZCBzIHx8IGV4aXQgMQorCQkoIGdpdCBncmVwIHh4eXl6eiAuLiA+b3V0IDsgZWNobyAkPyA+c3RhdHVzICkKKwkJISB0ZXN0IC1zIG91dCAmJgorCQl0ZXN0IDEgPSAkKGNhdCBzdGF0dXMpCisJKQorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jOmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1GaScgJworCWdpdCBncmVwIC1GaSAiQ0hBUiAqIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHNpZGUgb2YgZ2l0IHJlcG9zaXRvcnknICcKKwlybSAtZnIgbm9uICYmCisJbWtkaXIgLXAgbm9uL2dpdC9zdWIgJiYKKwllY2hvIGhlbGxvID5ub24vZ2l0L2ZpbGUxICYmCisJZWNobyB3b3JsZCA+bm9uL2dpdC9zdWIvZmlsZTIgJiYKKwl7CisJCWVjaG8gZmlsZTE6aGVsbG8gJiYKKwkJZWNobyBzdWIvZmlsZTI6d29ybGQKKwl9ID5ub24vZXhwZWN0LmZ1bGwgJiYKKwllY2hvIGZpbGUyOndvcmxkID5ub24vZXhwZWN0LnN1YiAmJgorCSgKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiQocHdkKS9ub24vZ2l0IiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2Qgbm9uL2dpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCBvICYmCisJCWdpdCBncmVwIC0tbm8taW5kZXggbyA+Li4vYWN0dWFsLmZ1bGwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0LmZ1bGwgLi4vYWN0dWFsLmZ1bGwKKwkJY2Qgc3ViICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIG8gJiYKKwkJZ2l0IGdyZXAgLS1uby1pbmRleCBvID4uLi8uLi9hY3R1YWwuc3ViICYmCisJCXRlc3RfY21wIC4uLy4uL2V4cGVjdC5zdWIgLi4vLi4vYWN0dWFsLnN1YgorCSkgJiYKKworCWVjaG8gIi4qbyoiID5ub24vZ2l0Ly5naXRpZ25vcmUgJiYKKwkoCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkKHB3ZCkvbm9uL2dpdCIgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisJCWNkIG5vbi9naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgbyAmJgorCQlnaXQgZ3JlcCAtLW5vLWluZGV4IC0tZXhjbHVkZS1zdGFuZGFyZCBvID4uLi9hY3R1YWwuZnVsbCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3QuZnVsbCAuLi9hY3R1YWwuZnVsbCAmJgorCisJCXsKKwkJCWVjaG8gIi5naXRpZ25vcmU6LipvKiIKKwkJCWNhdCAuLi9leHBlY3QuZnVsbAorCQl9ID4uLi9leHBlY3Qud2l0aC5pZ25vcmVkICYmCisJCWdpdCBncmVwIC0tbm8taW5kZXggLS1uby1leGNsdWRlIG8gPi4uL2FjdHVhbC5mdWxsICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdC53aXRoLmlnbm9yZWQgLi4vYWN0dWFsLmZ1bGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luc2lkZSBnaXQgcmVwb3NpdG9yeSBidXQgd2l0aCAtLW5vLWluZGV4JyAnCisJcm0gLWZyIGlzICYmCisJbWtkaXIgLXAgaXMvZ2l0L3N1YiAmJgorCWVjaG8gaGVsbG8gPmlzL2dpdC9maWxlMSAmJgorCWVjaG8gd29ybGQgPmlzL2dpdC9zdWIvZmlsZTIgJiYKKwllY2hvICIuKm8qIiA+aXMvZ2l0Ly5naXRpZ25vcmUgJiYKKwl7CisJCWVjaG8gZmlsZTE6aGVsbG8gJiYKKwkJZWNobyBzdWIvZmlsZTI6d29ybGQKKwl9ID5pcy9leHBlY3QudW5pZ25vcmVkICYmCisJeworCQllY2hvICIuZ2l0aWdub3JlOi4qbyoiICYmCisJCWNhdCBpcy9leHBlY3QudW5pZ25vcmVkCisJfSA+aXMvZXhwZWN0LmZ1bGwgJiYKKwk6ID5pcy9leHBlY3QuZW1wdHkgJiYKKwllY2hvIGZpbGUyOndvcmxkID5pcy9leHBlY3Quc3ViICYmCisJKAorCQljZCBpcy9naXQgJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgbyA+Li4vYWN0dWFsLmZ1bGwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0LmVtcHR5IC4uL2FjdHVhbC5mdWxsICYmCisKKwkJZ2l0IGdyZXAgLS11bnRyYWNrZWQgbyA+Li4vYWN0dWFsLnVuaWdub3JlZCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3QudW5pZ25vcmVkIC4uL2FjdHVhbC51bmlnbm9yZWQgJiYKKworCQlnaXQgZ3JlcCAtLW5vLWluZGV4IG8gPi4uL2FjdHVhbC5mdWxsICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdC5mdWxsIC4uL2FjdHVhbC5mdWxsICYmCisKKwkJZ2l0IGdyZXAgLS1uby1pbmRleCAtLWV4Y2x1ZGUtc3RhbmRhcmQgbyA+Li4vYWN0dWFsLnVuaWdub3JlZCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3QudW5pZ25vcmVkIC4uL2FjdHVhbC51bmlnbm9yZWQgJiYKKworCQljZCBzdWIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgbyA+Li4vLi4vYWN0dWFsLnN1YiAmJgorCQl0ZXN0X2NtcCAuLi8uLi9leHBlY3QuZW1wdHkgLi4vLi4vYWN0dWFsLnN1YiAmJgorCisJCWdpdCBncmVwIC0tbm8taW5kZXggbyA+Li4vLi4vYWN0dWFsLnN1YiAmJgorCQl0ZXN0X2NtcCAuLi8uLi9leHBlY3Quc3ViIC4uLy4uL2FjdHVhbC5zdWIgJiYKKworCQlnaXQgZ3JlcCAtLXVudHJhY2tlZCBvID4uLi8uLi9hY3R1YWwuc3ViICYmCisJCXRlc3RfY21wIC4uLy4uL2V4cGVjdC5zdWIgLi4vLi4vYWN0dWFsLnN1YgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZG91YmxlLWRhc2ggdGVzdHMnICcKK2NhdCA+ZG91YmxlLWRhc2ggPDxFT0YgJiYKKy0tCistPgorb3RoZXIKK0VPRgorZ2l0IGFkZCBkb3VibGUtZGFzaAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitkb3VibGUtZGFzaDotPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tIHBhdHRlcm4nICcKKwlnaXQgZ3JlcCAtLSAiLT4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS0gcGF0dGVybiAtLSBwYXRoc3BlYycgJworCWdpdCBncmVwIC0tICItPiIgLS0gZG91YmxlLWRhc2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZSBwYXR0ZXJuIC0tIHBhdGgnICcKKwlnaXQgZ3JlcCAtZSAiLT4iIC0tIGRvdWJsZS1kYXNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZG91YmxlLWRhc2g6LS0KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZSAtLSAtLSBwYXRoJyAnCisJZ2l0IGdyZXAgLWUgLS0gLS0gZG91YmxlLWRhc2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jOmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2hlbGxvLmM6CXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExJQlBDUkUgJ2dyZXAgLS1wZXJsLXJlZ2V4cCBwYXR0ZXJuJyAnCisJZ2l0IGdyZXAgLS1wZXJsLXJlZ2V4cCAiXHB7UHN9Lio/XHB7UGV9IiBoZWxsby5jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMSUJQQ1JFICdncmVwIC1QIHBhdHRlcm4nICcKKwlnaXQgZ3JlcCAtUCAiXHB7UHN9Lio/XHB7UGV9IiBoZWxsby5jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBwYXR0ZXJuIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlJyAnCisJPmVtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGdyZXAuZXh0ZW5kZWRyZWdleHA9dHJ1ZSBcCisJCWdyZXAgIlxwe1BzfS4qP1xwe1BlfSIgaGVsbG8uYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAnZ3JlcCAtUCBwYXR0ZXJuIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlJyAnCisJZ2l0IC1jIGdyZXAuZXh0ZW5kZWRyZWdleHA9dHJ1ZSBcCisJCWdyZXAgLVAgIlxwe1BzfS4qP1xwe1BlfSIgaGVsbG8uYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAnZ3JlcCAtUCAtdiBwYXR0ZXJuJyAnCisJeworCQllY2hvICJhYjphK2IqYyIKKwkJZWNobyAiYWI6YStiYyIKKwl9ID5leHBlY3RlZCAmJgorCWdpdCBncmVwIC1QIC12ICJhYmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMSUJQQ1JFICdncmVwIC1QIC1pIHBhdHRlcm4nICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWhlbGxvLmM6CXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKKwlFT0YKKwlnaXQgZ3JlcCAtUCAtaSAiUFJJTlRGXChbXlxkXStcKSIgaGVsbG8uYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAnZ3JlcCAtUCAtdyBwYXR0ZXJuJyAnCisJeworCQllY2hvICJoZWxsb193b3JsZDpIZWxsbyB3b3JsZCIKKwkJZWNobyAiaGVsbG9fd29ybGQ6SGVMTG8gd29ybGQiCisJfSA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtUCAtdyAiSGUoKD9pKWxsKW8iIGhlbGxvX3dvcmxkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtRyBpbnZhbGlkcGF0dGVybiBwcm9wZXJseSBkaWVzICcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC1HICJhWyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBpbnZhbGlkcGF0dGVybiBwcm9wZXJseSBkaWVzIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIGdyZXAgImFbIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1FIGludmFsaWRwYXR0ZXJuIHByb3Blcmx5IGRpZXMgJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLUUgImFbIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGludmFsaWRwYXR0ZXJuIHByb3Blcmx5IGRpZXMgd2l0aCBncmVwLnBhdHRlcm5UeXBlPWV4dGVuZGVkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGdyZXAucGF0dGVybnR5cGU9ZXh0ZW5kZWQgZ3JlcCAiYVsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAnZ3JlcCAtUCBpbnZhbGlkcGF0dGVybiBwcm9wZXJseSBkaWVzICcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC1QICJhWyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMSUJQQ1JFICdncmVwIGludmFsaWRwYXR0ZXJuIHByb3Blcmx5IGRpZXMgd2l0aCBncmVwLnBhdHRlcm5UeXBlPXBlcmwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZ3JlcC5wYXR0ZXJudHlwZT1wZXJsIGdyZXAgImFbIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1HIC1FIC1GIHBhdHRlcm4nICcKKwllY2hvICJhYjphK2IqYyIgPmV4cGVjdGVkICYmCisJZ2l0IGdyZXAgLUcgLUUgLUYgImErYipjIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9YmFzaWMsID1leHRlbmRlZCwgPWZpeGVkJyAnCisJZWNobyAiYWI6YStiKmMiID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9YmFzaWMgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWV4dGVuZGVkIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1maXhlZCBcCisJCWdyZXAgImErYipjIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUUgLUYgLUcgcGF0dGVybicgJworCWVjaG8gImFiOmErYmMiID5leHBlY3RlZCAmJgorCWdpdCBncmVwIC1FIC1GIC1HICJhK2IqYyIgYWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHBhdHRlcm4gd2l0aCBncmVwLnBhdHRlcm5UeXBlPWV4dGVuZGVkLCA9Zml4ZWQsID1iYXNpYycgJworCWVjaG8gImFiOmErYmMiID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9ZXh0ZW5kZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1iYXNpYyBcCisJCWdyZXAgImErYipjIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUYgLUcgLUUgcGF0dGVybicgJworCWVjaG8gImFiOmFiYyIgPmV4cGVjdGVkICYmCisJZ2l0IGdyZXAgLUYgLUcgLUUgImErYipjIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9Zml4ZWQsID1iYXNpYywgPWV4dGVuZGVkJyAnCisJZWNobyAiYWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1iYXNpYyBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9ZXh0ZW5kZWQgXAorCQlncmVwICJhK2IqYyIgYWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1HIC1GIC1QIC1FIHBhdHRlcm4nICcKKwk+ZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtRyAtRiAtUCAtRSAiYVx4ezJifWJceHsyYX1jIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9Zml4ZWQsID1iYXNpYywgPXBlcmwsID1leHRlbmRlZCcgJworCT5lbXB0eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1wZXJsIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBcCisJCWdyZXAgImFceHsyYn1iXHh7MmF9YyIgYWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExJQlBDUkUgJ2dyZXAgLUcgLUYgLUUgLVAgcGF0dGVybicgJworCWVjaG8gImFiOmErYipjIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtRyAtRiAtRSAtUCAiYVx4ezJifWJceHsyYX1jIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAnZ3JlcCBwYXR0ZXJuIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCwgPWJhc2ljLCA9ZXh0ZW5kZWQsID1wZXJsJyAnCisJZWNobyAiYWI6YStiKmMiID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9cGVybCBcCisJCWdyZXAgImFceHsyYn1iXHh7MmF9YyIgYWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExJQlBDUkUgJ2dyZXAgLVAgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9Zml4ZWQnICcKKwllY2hvICJhYjphK2IqYyIgPmV4cGVjdGVkICYmCisJZ2l0IFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1maXhlZCBcCisJCWdyZXAgLVAgImFceHsyYn1iXHh7MmF9YyIgYWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1GIHBhdHRlcm4gd2l0aCBncmVwLnBhdHRlcm5UeXBlPWJhc2ljJyAnCisJZWNobyAiYWI6YStiKmMiID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9YmFzaWMgXAorCQlncmVwIC1GICIqYyIgYWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1HIHBhdHRlcm4gd2l0aCBncmVwLnBhdHRlcm5UeXBlPWZpeGVkJyAnCisJeworCQllY2hvICJhYjphK2IqYyIKKwkJZWNobyAiYWI6YStiYyIKKwl9ID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQlncmVwIC1HICJhK2IiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtRSBwYXR0ZXJuIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCcgJworCXsKKwkJZWNobyAiYWI6YStiKmMiCisJCWVjaG8gImFiOmErYmMiCisJCWVjaG8gImFiOmFiYyIKKwl9ID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQlncmVwIC1FICJhKyIgYWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2NvbmZpZygpIHsKKwlnaXQgY29uZmlnICIkMSIgIiQyIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNvbmZpZyAtLXVuc2V0ICQxIgorfQorCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jPFJFRD46PFJFU0VUPmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2hlbGxvLmM8UkVEPi08UkVTRVQ+eworPFJFRD4tLTxSRVNFVD4KK2hlbGxvLmM8UkVEPjo8UkVTRVQ+CS8qIGNoYXIgPz8gKi8KK2hlbGxvLmM8UkVEPi08UkVTRVQ+fQorPFJFRD4tLTxSRVNFVD4KK2hlbGxvX3dvcmxkPFJFRD46PFJFU0VUPkhlbGxvX3dvcmxkCitoZWxsb193b3JsZDxSRUQ+LTxSRVNFVD5IZUxMb193b3JsZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1jb2xvciwgc2VwYXJhdG9yJyAnCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5jb250ZXh0CQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZpbGVuYW1lCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZ1bmN0aW9uCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmxpbmVudW1iZXIJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5tYXRjaAkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5zZWxlY3RlZAkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5zZXBhcmF0b3IJcmVkICYmCisKKwlnaXQgZ3JlcCAtLWNvbG9yPWFsd2F5cyAtQTEgLWUgY2hhciAtZSBsb193IGhlbGxvLmMgaGVsbG9fd29ybGQgfAorCXRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYzppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jOgkvKiBjaGFyID8/ICovCisKK2hlbGxvX3dvcmxkOkhlbGxvX3dvcmxkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLWJyZWFrJyAnCisJZ2l0IGdyZXAgLS1icmVhayAtZSBjaGFyIC1lIGxvX3cgaGVsbG8uYyBoZWxsb193b3JsZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmM6aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraGVsbG8uYy17CistLQoraGVsbG8uYzoJLyogY2hhciA/PyAqLworaGVsbG8uYy19CisKK2hlbGxvX3dvcmxkOkhlbGxvX3dvcmxkCitoZWxsb193b3JsZC1IZUxMb193b3JsZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1icmVhayB3aXRoIGNvbnRleHQnICcKKwlnaXQgZ3JlcCAtLWJyZWFrIC1BMSAtZSBjaGFyIC1lIGxvX3cgaGVsbG8uYyBoZWxsb193b3JsZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmMKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKKwkvKiBjaGFyID8/ICovCitoZWxsb193b3JsZAorSGVsbG9fd29ybGQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0taGVhZGluZycgJworCWdpdCBncmVwIC0taGVhZGluZyAtZSBjaGFyIC1lIGxvX3cgaGVsbG8uYyBoZWxsb193b3JsZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKzxCT0xEO0dSRUVOPmhlbGxvLmM8UkVTRVQ+CisyOmludCBtYWluKGludCBhcmdjLCBjb25zdCA8QkxBQ0s7QllFTExPVz5jaGFyPFJFU0VUPiAqKmFyZ3YpCis2OgkvKiA8QkxBQ0s7QllFTExPVz5jaGFyPFJFU0VUPiA/PyAqLworCis8Qk9MRDtHUkVFTj5oZWxsb193b3JsZDxSRVNFVD4KKzM6SGVsPEJMQUNLO0JZRUxMT1c+bG9fdzxSRVNFVD5vcmxkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWltaWMgYWNrLWdyZXAgLS1ncm91cCcgJworCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuY29udGV4dAkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5maWxlbmFtZQkJImJvbGQgZ3JlZW4iICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5mdW5jdGlvbgkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5saW5lbnVtYmVyCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubWF0Y2gJCSJibGFjayB5ZWxsb3ciICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5zZWxlY3RlZAkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5zZXBhcmF0b3IJbm9ybWFsICYmCisKKwlnaXQgZ3JlcCAtLWJyZWFrIC0taGVhZGluZyAtbiAtLWNvbG9yIFwKKwkJLWUgY2hhciAtZSBsb193IGhlbGxvLmMgaGVsbG9fd29ybGQgfAorCXRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorc3BhY2U6IGxpbmUgd2l0aCBsZWFkaW5nIHNwYWNlMQorc3BhY2U6IGxpbmUgd2l0aCBsZWFkaW5nIHNwYWNlMgorc3BhY2U6IGxpbmUgd2l0aCBsZWFkaW5nIHNwYWNlMworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAnZ3JlcCAtRSAiXiAiJyAnCisJZ2l0IGdyZXAgLUUgIl4gIiBzcGFjZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAnZ3JlcCAtUCAiXiAiJyAnCisJZ2l0IGdyZXAgLVAgIl4gIiBzcGFjZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzgxMS1ncmVwLW9wZW4uc2ggYi90L3Q3ODExLWdyZXAtb3Blbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hODk1Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzgxMS1ncmVwLW9wZW4uc2gKQEAgLTAsMCArMSwxNjggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgZ3JlcCAtLW9wZW4tZmlsZXMtaW4tcGFnZXIKKycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1wYWdlci5zaAordW5zZXQgUEFHRVIgR0lUX1BBR0VSCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCBncmVwLmggIgorZW51bSBncmVwX3BhdF90b2tlbiB7CisJR1JFUF9QQVRURVJOLAorCUdSRVBfUEFUVEVSTl9IRUFELAorCUdSRVBfUEFUVEVSTl9CT0RZLAorCUdSRVBfQU5ELAorCUdSRVBfT1BFTl9QQVJFTiwKKwlHUkVQX0NMT1NFX1BBUkVOLAorCUdSRVBfTk9ULAorCUdSRVBfT1IsCit9OyIgJiYKKworCXRlc3RfY29tbWl0IGFkZC11c2VyIHJldmlzaW9uLmMgIgorCX0KKwlpZiAoc2Vlbl9kYXNoZGFzaCkKKwkJcmVhZF9wYXRoc3BlY19mcm9tX3N0ZGluKHJldnMsICZzYiwgcHJ1bmUpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9ncmVwKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcHRuLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHdoYXQpCit7CisJYXBwZW5kX2dyZXBfcGF0dGVybigmcmV2cy0+Z3JlcF9maWx0ZXIsIHB0biwgXCJjb21tYW5kIGxpbmVcIiwgMCwgd2hhdCk7CisiICYmCisKKwlta2RpciBzdWJkaXIgJiYKKwl0ZXN0X2NvbW1pdCBzdWJkaXIgc3ViZGlyL2dyZXAuYyAiZW51bSBncmVwX3BhdF90b2tlbiIgJiYKKworCXRlc3RfY29tbWl0IHVuaW50ZXJlc3RpbmcgdW5yZWxhdGVkICJoZWxsbywgd29ybGQiICYmCisKKwllY2hvIEdSRVBfUEFUVEVSTiA+dW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0lNUExFUEFHRVIgJ2dpdCBncmVwIC1PJyAnCisJY2F0ID4kbGVzcyA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJcHJpbnRmICIlc1xuIiAiJEAiID5wYWdlci1hcmdzCisJRU9GCisJY2htb2QgK3ggJGxlc3MgJiYKKwljYXQgPmV4cGVjdC5sZXNzIDw8LVxFT0YgJiYKKwkrLypHUkVQX1BBVFRFUk4KKwlncmVwLmgKKwlFT0YKKwllY2hvIGdyZXAuaCA+ZXhwZWN0Lm5vdGxlc3MgJiYKKwk+ZW1wdHkgJiYKKworCVBBVEg9LjokUEFUSCBnaXQgZ3JlcCAtTyBHUkVQX1BBVFRFUk4gPm91dCAmJgorCXsKKwkJdGVzdF9jbXAgZXhwZWN0Lmxlc3MgcGFnZXItYXJncyB8fAorCQl0ZXN0X2NtcCBleHBlY3Qubm90bGVzcyBwYWdlci1hcmdzCisJfSAmJgorCXRlc3RfY21wIGVtcHR5IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtTyAtLWNhY2hlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC0tY2FjaGVkIC1PIEdSRVBfUEFUVEVSTiA+b3V0IDI+bXNnICYmCisJdGVzdF9pMThuZ3JlcCBvcGVuLWZpbGVzLWluLXBhZ2VyIG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtTyAtLW5vLWluZGV4JyAnCisJcm0gLWYgZXhwZWN0Lmxlc3MgcGFnZXItYXJncyBvdXQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZ3JlcC5oCisJdW50cmFja2VkCisJRU9GCisJPmVtcHR5ICYmCisKKwkoCisJCUdJVF9QQUdFUj0nXCcncHJpbnRmICIlc1xuIiA+cGFnZXItYXJncydcJycgJiYKKwkJZXhwb3J0IEdJVF9QQUdFUiAmJgorCQlnaXQgZ3JlcCAtLW5vLWluZGV4IC1PIEdSRVBfUEFUVEVSTiA+b3V0CisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBwYWdlci1hcmdzICYmCisJdGVzdF9jbXAgZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBmYWtlICJsZXNzIicgJworCWNhdCA+bGVzcyA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJcHJpbnRmICIlc1xuIiAiJEAiID5hY3R1YWwKKwlFT0YKKwljaG1vZCAreCBsZXNzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1PIGp1bXBzIHRvIGxpbmUgaW4gbGVzcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkrLypHUkVQX1BBVFRFUk4KKwlncmVwLmgKKwlFT0YKKwk+ZW1wdHkgJiYKKworCUdJVF9QQUdFUj0uL2xlc3MgZ2l0IGdyZXAgLU8gR1JFUF9QQVRURVJOID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgb3V0ICYmCisKKwlnaXQgZ3JlcCAtTy4vbGVzcyBHUkVQX1BBVFRFUk4gPm91dDIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgb3V0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBmaWxlJyAnCisJcm0gLWYgYWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSsvKmVudW0gZ3JlcF9wYXRfdG9rZW4KKwlncmVwLmgKKwlyZXZpc2lvbi5jCisJc3ViZGlyL2dyZXAuYworCXVucmVsYXRlZAorCUVPRgorCT5lbXB0eSAmJgorCisJZWNobyAiZW51bSBncmVwX3BhdF90b2tlbiIgPnVucmVsYXRlZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IEhFQUQgdW5yZWxhdGVkIiAmJgorCUdJVF9QQUdFUj0uL2xlc3MgZ2l0IGdyZXAgLUYgLU8gImVudW0gZ3JlcF9wYXRfdG9rZW4iID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgb3V0CisnCisKK3Rlc3RfY29uZmlnKCkgeworCWdpdCBjb25maWcgIiQxIiAiJDIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcGVzIHdpdGggY29sb3Igc2V0dGluZ3MnICcKKwlybSAtZiBhY3R1YWwgJiYKKwllY2hvIGdyZXAuaCA+ZXhwZWN0ICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcCBhbHdheXMgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZpbGVuYW1lIHllbGxvdyAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VwYXJhdG9yIGdyZWVuICYmCisJZ2l0IGdyZXAgLU8nXCcncHJpbnRmICIlc1xuIiA+YWN0dWFsJ1wnJyBHUkVQX0FORCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuIGZyb20gc3ViZGlyJyAnCisJcm0gLWYgYWN0dWFsICYmCisJZWNobyBncmVwLmMgPmV4cGVjdCAmJgorCT5lbXB0eSAmJgorCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZXhwb3J0IEdJVF9QQUdFUiAmJgorCQlHSVRfUEFHRVI9J1wnJ3ByaW50ZiAiJXNcbiIgPi4uL2FyZ3MnXCcnICYmCisJCWdpdCBncmVwIC1PICJlbnVtIGdyZXBfcGF0X3Rva2VuIiA+Li4vb3V0ICYmCisJCWdpdCBncmVwIC1PInB3ZCA+Li4vZGlyOyA6IiAiZW51bSBncmVwX3BhdF90b2tlbiIgPi4uL291dDIKKwkpICYmCisJY2FzZSAkKGNhdCBkaXIpIGluCisJKnN1YmRpcikKKwkJOiBnb29kCisJCTs7CisJKikKKwkJZmFsc2UKKwkJOzsKKwllc2FjICYmCisJdGVzdF9jbXAgZXhwZWN0IGFyZ3MgJiYKKwl0ZXN0X2NtcCBlbXB0eSBvdXQgJiYKKwl0ZXN0X2NtcCBlbXB0eSBvdXQyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwMS1hbm5vdGF0ZS5zaCBiL3QvdDgwMDEtYW5ub3RhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDE5NjJmMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDEtYW5ub3RhdGUuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhbm5vdGF0ZScKKy4gLi90ZXN0LWxpYi5zaAorCitQUk9HPSdnaXQgYW5ub3RhdGUnCisuICIkVEVTVF9ESVJFQ1RPUlkiL2Fubm90YXRlLXRlc3RzLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Fubm90YXRpbmcgYW4gb2xkIHJldmlzaW9uIHdvcmtzJyAnCisJZ2l0IGFubm90YXRlIGZpbGUgbWFzdGVyID5yZXN1bHQgJiYKKwlhd2sgInsgcHJpbnQgXCQzOyB9IiA8cmVzdWx0ID5hdXRob3JzICYmCisJdGVzdCAyID0gJChncmVwIEEgPGF1dGhvcnMgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgPSAkKGdyZXAgQiA8YXV0aG9ycyB8IHdjIC1sKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDItYmxhbWUuc2ggYi90L3Q4MDAyLWJsYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyODk2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q4MDAyLWJsYW1lLnNoCkBAIC0wLDAgKzEsMTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYmxhbWUnCisuIC4vdGVzdC1saWIuc2gKKworUFJPRz0nZ2l0IGJsYW1lIC1jJworLiAiJFRFU1RfRElSRUNUT1JZIi9hbm5vdGF0ZS10ZXN0cy5zaAorCitQUk9HPSdnaXQgYmxhbWUgLWMgLWUnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCbGFtZSAtLXNob3ctZW1haWwgd29ya3MnICcKKyAgICBjaGVja19jb3VudCAiPEFAdGVzdC5naXQ+IiAxICI8QkB0ZXN0LmdpdD4iIDEgIjxCMUB0ZXN0LmdpdD4iIDEgIjxCMkB0ZXN0LmdpdD4iIDEgIjxhdXRob3JAZXhhbXBsZS5jb20+IiAxICI8Q0B0ZXN0LmdpdD4iIDEgIjxEQHRlc3QuZ2l0PiIgMSAiPEUgYXQgdGVzdCBkb3QgZ2l0PiIgMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDMtYmxhbWUtY29ybmVyLWNhc2VzLnNoIGIvdC90ODAwMy1ibGFtZS1jb3JuZXItY2FzZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjMwMTQzYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDMtYmxhbWUtY29ybmVyLWNhc2VzLnNoCkBAIC0wLDAgKzEsMTg4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGJsYW1lIGNvcm5lciBjYXNlcycKKy4gLi90ZXN0LWxpYi5zaAorCitwaWNrX2ZjPSdzL15bMC05YS1mXl0qICpcKFteIF0qXCkgKihcKFteIF0qXCkgLiovXDEtXDIvJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gQSBBIEEgQSBBID5vbmUgJiYKKwllY2hvIEIgQiBCIEIgQiA+dHdvICYmCisJZWNobyBDIEMgQyBDIEMgPnRyZXMgJiYKKwllY2hvIEFCQyA+bW91c2UgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5uaW5lX2xpbmVzICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgYQorCWRvCisJCWVjaG8gJGkKKwlkb25lID50ZW5fbGluZXMgJiYKKwlnaXQgYWRkIG9uZSB0d28gdHJlcyBtb3VzZSBuaW5lX2xpbmVzIHRlbl9saW5lcyAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT1Jbml0aWFsIGdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCisJY2F0IG9uZSA+dW5vICYmCisJbXYgdHdvIGRvcyAmJgorCWNhdCBvbmUgPj50cmVzICYmCisJZWNobyBERUYgPj5tb3VzZQorCWdpdCBhZGQgdW5vIGRvcyB0cmVzIG1vdXNlICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPVNlY29uZCBnaXQgY29tbWl0IC1hIC1tIFNlY29uZCAmJgorCisJZWNobyBHSElKSyA+Pm1vdXNlICYmCisJZ2l0IGFkZCBtb3VzZSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT1UaGlyZCBnaXQgY29tbWl0IC1tIFRoaXJkICYmCisKKwljYXQgbW91c2UgPmNvdyAmJgorCWdpdCBhZGQgY293ICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPUZvdXJ0aCBnaXQgY29tbWl0IC1tIEZvdXJ0aCAmJgorCisJeworCQllY2hvIEFCQworCQllY2hvIERFRgorCQllY2hvIFhYWFgKKwkJZWNobyBHSElKSworCX0gPmNvdyAmJgorCWdpdCBhZGQgY293ICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPUZpZnRoIGdpdCBjb21taXQgLW0gRmlmdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyYWlnaHQgY29weSB3aXRob3V0IC1DJyAnCisKKwlnaXQgYmxhbWUgdW5vIHwgZ3JlcCBTZWNvbmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJhaWdodCBtb3ZlIHdpdGhvdXQgLUMnICcKKworCWdpdCBibGFtZSBkb3MgfCBncmVwIEluaXRpYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJhaWdodCBjb3B5IHdpdGggLUMnICcKKworCWdpdCBibGFtZSAtQzEgdW5vIHwgZ3JlcCBTZWNvbmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJhaWdodCBtb3ZlIHdpdGggLUMnICcKKworCWdpdCBibGFtZSAtQzEgZG9zIHwgZ3JlcCBJbml0aWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyYWlnaHQgY29weSB3aXRoIC1DIC1DJyAnCisKKwlnaXQgYmxhbWUgLUMgLUMxIHVubyB8IGdyZXAgSW5pdGlhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmFpZ2h0IG1vdmUgd2l0aCAtQyAtQycgJworCisJZ2l0IGJsYW1lIC1DIC1DMSBkb3MgfCBncmVwIEluaXRpYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBlbmQgd2l0aG91dCAtQycgJworCisJZ2l0IGJsYW1lIC1MMiB0cmVzIHwgZ3JlcCBTZWNvbmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBlbmQgd2l0aCAtQycgJworCisJZ2l0IGJsYW1lIC1MMiAtQzEgdHJlcyB8IGdyZXAgU2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwZW5kIHdpdGggLUMgLUMnICcKKworCWdpdCBibGFtZSAtTDIgLUMgLUMxIHRyZXMgfCBncmVwIFNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB3aXRoIC1DIC1DIC1DJyAnCisKKwlnaXQgYmxhbWUgLUwyIC1DIC1DIC1DMSB0cmVzIHwgZ3JlcCBJbml0aWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgd2hvbGVzYWxlIGNvcHknICcKKworCWdpdCBibGFtZSAtZiAtQyAtQzEgSEVBRF4gLS0gY293IHwgc2VkIC1lICIkcGlja19mYyIgPmN1cnJlbnQgJiYKKwl7CisJCWVjaG8gbW91c2UtSW5pdGlhbAorCQllY2hvIG1vdXNlLVNlY29uZAorCQllY2hvIG1vdXNlLVRoaXJkCisJfSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgd2hvbGVzYWxlIGNvcHkgYW5kIG1vcmUnICcKKworCWdpdCBibGFtZSAtZiAtQyAtQzEgSEVBRCAtLSBjb3cgfCBzZWQgLWUgIiRwaWNrX2ZjIiA+Y3VycmVudCAmJgorCXsKKwkJZWNobyBtb3VzZS1Jbml0aWFsCisJCWVjaG8gbW91c2UtU2Vjb25kCisJCWVjaG8gY293LUZpZnRoCisJCWVjaG8gbW91c2UtVGhpcmQKKwl9ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBwYXRoIHRoYXQgdXNlZCB0byBiZSBhIGRpcmVjdG9yeScgJworCW1rZGlyIHBhdGggJiYKKwllY2hvIEEgQSBBIEEgQSA+cGF0aC9maWxlICYmCisJZWNobyBCIEIgQiBCIEIgPnBhdGgvZWxpZiAmJgorCWdpdCBhZGQgcGF0aCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhdGggd2FzIGEgZGlyZWN0b3J5IiAmJgorCXJtIC1mciBwYXRoICYmCisJZWNobyBBIEEgQSBBIEEgPnBhdGggJiYKKwlnaXQgYWRkIHBhdGggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJwYXRoIGlzIGEgcmVndWxhciBmaWxlIiAmJgorCWdpdCBibGFtZSBIRUFEXi4uIC0tIHBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgdG8gYSBjb21taXQgd2l0aCBubyBhdXRob3IgbmFtZScgJworICBUUkVFPWBnaXQgcmV2LXBhcnNlIEhFQUQ6YAorICBjYXQgPmJhZGNvbW1pdCA8PEVPRgordHJlZSAkVFJFRQorYXV0aG9yIDxub25hbWU+IDEyMzQ1Njc4OTAgKzAwMDAKK2NvbW1pdHRlciBEYXZpZCBSZWlzcyA8ZHJlaXNzQGZhY2Vib29rLmNvbT4gMTIzNDU2Nzg5MCArMDAwMAorCitzb21lIG1lc3NhZ2UKK0VPRgorICBDT01NSVQ9YGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgYmFkY29tbWl0YAorICBnaXQgLS1uby1wYWdlciBibGFtZSAkQ09NTUlUIC0tIHVubyA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIHdpdGggaW52YWxpZCBzdGFydCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBibGFtZSAtTDUgdHJlcyAyPmVycm9ycyAmJgorCWdyZXAgImhhcyBvbmx5IDIgbGluZXMiIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCB3aXRoIGludmFsaWQgZW5kJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJsYW1lIC1MMSw1IHRyZXMgMj5lcnJvcnMgJiYKKwlncmVwICJoYXMgb25seSAyIGxpbmVzIiBlcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZW50IG9mIGxpbmUgbnVtYmVycywgbmluZSBsaW5lcycgJworCWdpdCBibGFtZSBuaW5lX2xpbmVzID5hY3R1YWwgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiICAiIGFjdHVhbCkgPSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGVudCBvZiBsaW5lIG51bWJlcnMsIHRlbiBsaW5lcycgJworCWdpdCBibGFtZSB0ZW5fbGluZXMgPmFjdHVhbCAmJgorCXRlc3QgJChncmVwIC1jICIgICIgYWN0dWFsKSA9IDkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDA0LWJsYW1lLXdpdGgtY29uZmxpY3RzLnNoIGIvdC90ODAwNC1ibGFtZS13aXRoLWNvbmZsaWN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YzM1M2FiCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNC1ibGFtZS13aXRoLWNvbmZsaWN0cy5zaApAQCAtMCwwICsxLDczIEBACisjIS9iaW4vc2gKKworIyBCYXNlZCBvbiBhIHRlc3QgY2FzZSBzdWJtaXR0ZWQgYnkgQmrDtnJuIFN0ZWluYnJpbmsuCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBibGFtZSBvbiBjb25mbGljdGVkIGZpbGVzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZpcnN0IGNhc2UnICcKKwkjIENyZWF0ZSB0aGUgb2xkIGZpbGUKKwllY2hvICJPbGQgbGluZSIgPiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJPbGQgTGluZSA8b2xAbG9jYWxob3N0PiIgLW0gZmlsZTEuYSAmJgorCisJIyBCcmFuY2gKKwlnaXQgY2hlY2tvdXQgLWIgZm9vICYmCisKKwkjIERvIGFuIHVnbHkgbW92ZSBhbmQgY2hhbmdlCisJZ2l0IHJtIGZpbGUxICYmCisJZWNobyAiTmV3IGxpbmUgLi4uIiAgPiBmaWxlMiAmJgorCWVjaG8gIi4uLiBhbmQgbW9yZSIgPj4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAiVSBHbHkgPHVnQGxvY2FsaG9zdD4iIC1tIHVnbHkgJiYKKworCSMgQmFjayB0byBtYXN0ZXIgYW5kIGNoYW5nZSBzb21ldGhpbmcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyAiCisKK2JsYSIgPj4gZmlsZTEgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJPbGQgTGluZSA8b2xAbG9jYWxob3N0PiIgLWEgLW0gZmlsZTEuYiAmJgorCisJIyBCYWNrIHRvIGZvbyBhbmQgbWVyZ2UgbWFzdGVyCisJZ2l0IGNoZWNrb3V0IGZvbyAmJgorCWlmIGdpdCBtZXJnZSBtYXN0ZXI7IHRoZW4KKwkJZWNobyBuZWVkZWQgY29uZmxpY3QgaGVyZQorCQlleGl0IDEKKwllbHNlCisJCWVjaG8gbWVyZ2UgZmFpbGVkIC0gcmVzb2x2aW5nIGF1dG9tYXRpY2FsbHkKKwlmaSAmJgorCWVjaG8gIk5ldyBsaW5lIC4uLgorLi4uIGFuZCBtb3JlCisKK2JsYQorRXZlbiBtb3JlIiA+IGZpbGUyICYmCisJZ2l0IHJtIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAiTSBSZXN1bHQgPG1yQGxvY2FsaG9zdD4iIC1hIC1tIG1lcmdlZCAmJgorCisJIyBCYWNrIHRvIG1hc3RlciBhbmQgY2hhbmdlIGZpbGUxIGFnYWluCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXNlZCBzL2JsYS9mb28vIDxmaWxlMSA+WCAmJgorCXJtIGZpbGUxICYmCisJbXYgWCBmaWxlMSAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIk5vIEJsYSA8bmJAbG9jYWxob3N0PiIgLWEgLW0gcmVwbGFjZSAmJgorCisJIyBUcnkgdG8gbWVyZ2UgaW50byBmb28gYWdhaW4KKwlnaXQgY2hlY2tvdXQgZm9vICYmCisJaWYgZ2l0IG1lcmdlIG1hc3RlcjsgdGhlbgorCQllY2hvIG5lZWRlZCBjb25mbGljdCBoZXJlCisJCWV4aXQgMQorCWVsc2UKKwkJZWNobyBtZXJnZSBmYWlsZWQgLSB0ZXN0IGlzIHNldHVwCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2JsYW1lIHJ1bnMgb24gdW5jb25mbGljdGVkIGZpbGUgd2hpbGUgb3RoZXIgZmlsZSBoYXMgY29uZmxpY3RzJyAnCisJZ2l0IGJsYW1lIGZpbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGRvZXMgbm90IGNyYXNoIHdpdGggY29uZmxpY3RlZCBmaWxlIGluIHN0YWdlcyAxLDMnICcKKwlnaXQgYmxhbWUgZmlsZTEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDA1LWJsYW1lLWkxOG4uc2ggYi90L3Q4MDA1LWJsYW1lLWkxOG4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2IzOTA1NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDUtYmxhbWUtaTE4bi5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGJsYW1lIGVuY29kaW5nIGNvbnZlcnNpb24nCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi90ODAwNS91dGY4LnR4dAorLiAiJFRFU1RfRElSRUNUT1JZIi90ODAwNS9ldWMtamFwYW4udHh0CisuICIkVEVTVF9ESVJFQ1RPUlkiL3Q4MDA1L3NqaXMudHh0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRoZSByZXBvc2l0b3J5JyAnCisJIyBDcmVhdGUgdGhlIGZpbGUKKwllY2hvICJVVEYtOCBMSU5FIiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICIkVVRGOF9OQU1FIDx1dGY4QGxvY2FsaG9zdD4iIC1tICIkVVRGOF9NU0ciICYmCisKKwllY2hvICJFVUMtSkFQQU4gTElORSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBldWNKUCAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIiRFVUNfSkFQQU5fTkFNRSA8ZXVjLWphcGFuQGxvY2FsaG9zdD4iIC1tICIkRVVDX0pBUEFOX01TRyIgJiYKKworCWVjaG8gIlNKSVMgTElORSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBTSklTICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAiJFNKSVNfTkFNRSA8c2ppc0Bsb2NhbGhvc3Q+IiAtbSAiJFNKSVNfTVNHIgorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCithdXRob3IgJFNKSVNfTkFNRQorc3VtbWFyeSAkU0pJU19NU0cKK2F1dGhvciAkU0pJU19OQU1FCitzdW1tYXJ5ICRTSklTX01TRworYXV0aG9yICRTSklTX05BTUUKK3N1bW1hcnkgJFNKSVNfTVNHCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2JsYW1lIHJlc3BlY3RzIGkxOG4uY29tbWl0ZW5jb2RpbmcnICcKKwlnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCBmaWxlIHwgXAorCQllZ3JlcCAiXihhdXRob3J8c3VtbWFyeSkgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCithdXRob3IgJEVVQ19KQVBBTl9OQU1FCitzdW1tYXJ5ICRFVUNfSkFQQU5fTVNHCithdXRob3IgJEVVQ19KQVBBTl9OQU1FCitzdW1tYXJ5ICRFVUNfSkFQQU5fTVNHCithdXRob3IgJEVVQ19KQVBBTl9OQU1FCitzdW1tYXJ5ICRFVUNfSkFQQU5fTVNHCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2JsYW1lIHJlc3BlY3RzIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcnICcKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgZXVjSlAgJiYKKwlnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCBmaWxlIHwgXAorCQllZ3JlcCAiXihhdXRob3J8c3VtbWFyeSkgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCithdXRob3IgJFVURjhfTkFNRQorc3VtbWFyeSAkVVRGOF9NU0cKK2F1dGhvciAkVVRGOF9OQU1FCitzdW1tYXJ5ICRVVEY4X01TRworYXV0aG9yICRVVEY4X05BTUUKK3N1bW1hcnkgJFVURjhfTVNHCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2JsYW1lIHJlc3BlY3RzIC0tZW5jb2Rpbmc9VVRGLTgnICcKKwlnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCAtLWVuY29kaW5nPVVURi04IGZpbGUgfCBcCisJCWVncmVwICJeKGF1dGhvcnxzdW1tYXJ5KSAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2F1dGhvciAkU0pJU19OQU1FCitzdW1tYXJ5ICRTSklTX01TRworYXV0aG9yICRFVUNfSkFQQU5fTkFNRQorc3VtbWFyeSAkRVVDX0pBUEFOX01TRworYXV0aG9yICRVVEY4X05BTUUKK3N1bW1hcnkgJFVURjhfTVNHCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2JsYW1lIHJlc3BlY3RzIC0tZW5jb2Rpbmc9bm9uZScgJworCWdpdCBibGFtZSAtLWluY3JlbWVudGFsIC0tZW5jb2Rpbmc9bm9uZSBmaWxlIHwgXAorCQllZ3JlcCAiXihhdXRob3J8c3VtbWFyeSkgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDUvZXVjLWphcGFuLnR4dCBiL3QvdDgwMDUvZXVjLWphcGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODhmMDQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNS9ldWMtamFwYW4udHh0CkBAIC0wLDAgKzEsMiBAQAorRVVDX0pBUEFOX05BTUU9IruzxcQgwsDPuiIKK0VVQ19KQVBBTl9NU0c9IqXWpeyhvKXgpM6lxqW5pcikx6S5oaMiCmRpZmYgLS1naXQgYS90L3Q4MDA1L3NqaXMudHh0IGIvdC90ODAwNS9zamlzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmRlZmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNS9zamlzLnR4dApAQCAtMCwwICsxLDIgQEAKK1NKSVNfTkFNRT0ijlKTYyCRvphZIgorU0pJU19NU0c9IoN1g4yBW4OAgsyDZYNYg2eCxYK3gUIiCmRpZmYgLS1naXQgYS90L3Q4MDA1L3V0ZjgudHh0IGIvdC90ODAwNS91dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDAwZGJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNS91dGY4LnR4dApAQCAtMCwwICsxLDIgQEAKK1VURjhfTkFNRT0i5bGx55SwIOWkqumDjiIKK1VURjhfTVNHPSLjg5bjg6zjg7zjg6Djga7jg4bjgrnjg4jjgafjgZnjgIIiCmRpZmYgLS1naXQgYS90L3Q4MDA2LWJsYW1lLXRleHRjb252LnNoIGIvdC90ODAwNi1ibGFtZS10ZXh0Y29udi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZjZjYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNi1ibGFtZS10ZXh0Y29udi5zaApAQCAtMCwwICsxLDE2MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBibGFtZSB0ZXh0Y29udiBzdXBwb3J0JworLiAuL3Rlc3QtbGliLnNoCisKK2ZpbmRfYmxhbWUoKSB7CisJc2VkIC1lICdzL15bXihdKi8vJworfQorCitjYXQgPmhlbHBlciA8PCdFT0YnCisjIS9iaW4vc2gKK2dyZXAgLXEgJ15iaW46ICcgIiQxIiB8fCB7IGVjaG8gIkU6ICQxIGlzIG5vdCBcImJpbmFyeVwiIGZpbGUiIDE+JjI7IGV4aXQgMTsgfQorIiRQRVJMX1BBVEgiIC1wIC1lICdzL15iaW46IC9jb252ZXJ0ZWQ6IC8nICIkMSIKK0VPRgorY2htb2QgK3ggaGVscGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwICcgJworCWVjaG8gImJpbjogdGVzdCBudW1iZXIgMCIgPnplcm8uYmluICYmCisJZWNobyAiYmluOiB0ZXN0IDEiID5vbmUuYmluICYmCisJZWNobyAiYmluOiB0ZXN0IG51bWJlciAyIiA+dHdvLmJpbiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwkJbG4gLXMgb25lLmJpbiBzeW1saW5rLmJpbgorCWZpICYmCisJZ2l0IGFkZCAuICYmCisJR0lUX0FVVEhPUl9OQU1FPU51bWJlcjEgZ2l0IGNvbW1pdCAtYSAtbSBGaXJzdCAtLWRhdGU9IjIwMTAtMDEtMDEgMTg6MDA6MDAiICYmCisJZWNobyAiYmluOiB0ZXN0IDEgdmVyc2lvbiAyIiA+b25lLmJpbiAmJgorCWVjaG8gImJpbjogdGVzdCBudW1iZXIgMiB2ZXJzaW9uIDIiID4+dHdvLmJpbiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwkJcm0gc3ltbGluay5iaW4gJiYKKwkJbG4gLXMgdHdvLmJpbiBzeW1saW5rLmJpbgorCWZpICYmCisJR0lUX0FVVEhPUl9OQU1FPU51bWJlcjIgZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQgLS1kYXRlPSIyMDEwLTAxLTAxIDIwOjAwOjAwIgorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCisoTnVtYmVyMiAyMDEwLTAxLTAxIDIwOjAwOjAwICswMDAwIDEpIGJpbjogdGVzdCAxIHZlcnNpb24gMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbHRlciBzcGVjaWZpZWQnICcKKwlnaXQgYmxhbWUgb25lLmJpbiA+YmxhbWUgJiYKKwlmaW5kX2JsYW1lIE51bWJlcjIgPGJsYW1lID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGV4dGNvbnYgZmlsdGVycycgJworCWVjaG8gIiouYmluIGRpZmY9dGVzdCIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiemVyby5iaW4gZW9sPWNybGYiID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGRpZmYudGVzdC50ZXh0Y29udiAuL2hlbHBlciAmJgorCWdpdCBjb25maWcgZGlmZi50ZXN0LmNhY2hldGV4dGNvbnYgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgd2l0aCAtLW5vLXRleHRjb252JyAnCisJZ2l0IGJsYW1lIC0tbm8tdGV4dGNvbnYgb25lLmJpbiA+YmxhbWUgJiYKKwlmaW5kX2JsYW1lIDxibGFtZT4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKyhOdW1iZXIyIDIwMTAtMDEtMDEgMjA6MDA6MDAgKzAwMDAgMSkgY29udmVydGVkOiB0ZXN0IDEgdmVyc2lvbiAyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgYmxhbWUgb24gbGFzdCBjb21taXQnICcKKwlnaXQgYmxhbWUgb25lLmJpbiA+YmxhbWUgJiYKKwlmaW5kX2JsYW1lICA8YmxhbWUgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCisoTnVtYmVyMSAyMDEwLTAxLTAxIDE4OjAwOjAwICswMDAwIDEpIGNvbnZlcnRlZDogdGVzdCBudW1iZXIgMgorKE51bWJlcjIgMjAxMC0wMS0wMSAyMDowMDowMCArMDAwMCAyKSBjb252ZXJ0ZWQ6IHRlc3QgbnVtYmVyIDIgdmVyc2lvbiAyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLS10ZXh0Y29udiBnb2luZyB0aHJvdWdoIHJldmlzaW9ucycgJworCWdpdCBibGFtZSAtLXRleHRjb252IHR3by5iaW4gPmJsYW1lICYmCisJZmluZF9ibGFtZSA8YmxhbWUgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtLXRleHRjb252IHdpdGggbG9jYWwgY2hhbmdlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IHplcm8uYmluIiAmJgorCXByaW50ZiAiYmluOiB1cGRhdGVkIG51bWJlciAwXDAxNSIgPnplcm8uYmluICYmCisJZ2l0IGJsYW1lIC0tdGV4dGNvbnYgemVyby5iaW4gPmJsYW1lICYmCisJZXhwZWN0PSIoTm90IENvbW1pdHRlZCBZZXQgLi4uLi0uLi0uLiAuLjouLjouLiArMDAwMCAxKSIgJiYKKwlleHBlY3Q9IiRleHBlY3QgY29udmVydGVkOiB1cGRhdGVkIG51bWJlciAwIiAmJgorCWV4cHIgIiQoZmluZF9ibGFtZSA8YmxhbWUpIiA6ICJeJGV4cGVjdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgK2NhY2hldGV4dGNvbnYnICcKKwlnaXQgY29uZmlnIGRpZmYudGVzdC5jYWNoZXRleHRjb252IHRydWUKKycKKworY2F0ID5leHBlY3RlZF9vbmUgPDxFT0YKKyhOdW1iZXIyIDIwMTAtMDEtMDEgMjA6MDA6MDAgKzAwMDAgMSkgY29udmVydGVkOiB0ZXN0IDEgdmVyc2lvbiAyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLS10ZXh0Y29udiB3b3JrcyB3aXRoIHRleHRjb252Y2FjaGUnICcKKwlnaXQgYmxhbWUgLS10ZXh0Y29udiB0d28uYmluID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQgJiYKKwlnaXQgYmxhbWUgLS10ZXh0Y29udiBvbmUuYmluID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgIDxibGFtZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfb25lIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtY2FjaGV0ZXh0Y29udicgJworCWdpdCBjb25maWcgZGlmZi50ZXN0LmNhY2hldGV4dGNvbnYgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBhIG5ldyBjb21taXQnICcKKwllY2hvICJiaW46IHRlc3QgbnVtYmVyIDIgdmVyc2lvbiAzIiA+PnR3by5iaW4gJiYKKwlHSVRfQVVUSE9SX05BTUU9TnVtYmVyMyBnaXQgY29tbWl0IC1hIC1tIFRoaXJkIC0tZGF0ZT0iMjAxMC0wMS0wMSAyMjowMDowMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZnJvbSBwcmV2aW91cyByZXZpc2lvbicgJworCWdpdCBibGFtZSBIRUFEXiB0d28uYmluID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorKE51bWJlcjIgMjAxMC0wMS0wMSAyMDowMDowMCArMDAwMCAxKSB0d28uYmluCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYmxhbWUgd2l0aCAtLW5vLXRleHRjb252IChvbiBzeW1saW5rKScgJworCWdpdCBibGFtZSAtLW5vLXRleHRjb252IHN5bWxpbmsuYmluID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYmxhbWUgLS10ZXh0Y29udiAob24gc3ltbGluayknICcKKwlnaXQgYmxhbWUgLS10ZXh0Y29udiBzeW1saW5rLmJpbiA+YmxhbWUgJiYKKwlmaW5kX2JsYW1lIDxibGFtZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKKyMgY3AgdHdvLmJpbiB0aHJlZS5iaW4gIGFuZCBtYWtlIHNtYWxsIHR3ZWFrCisjICh0aGlzIHdpbGwgZGlyZWN0IGJsYW1lIC1DIC1DIHRocmVlLmJpbiB0byBjb25zaWRlciB0d28uYmluIGFuZCBzeW1saW5rLmJpbikKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ21ha2UgYW5vdGhlciBuZXcgY29tbWl0JyAnCisJY2F0ID50aHJlZS5iaW4gPDxcRU9GICYmCitiaW46IHRlc3QgbnVtYmVyIDIKK2JpbjogdGVzdCBudW1iZXIgMiB2ZXJzaW9uIDIKK2JpbjogdGVzdCBudW1iZXIgMiB2ZXJzaW9uIDMKK2JpbjogdGVzdCBudW1iZXIgMworRU9GCisJZ2l0IGFkZCB0aHJlZS5iaW4gJiYKKwlHSVRfQVVUSE9SX05BTUU9TnVtYmVyNCBnaXQgY29tbWl0IC1hIC1tIEZvdXJ0aCAtLWRhdGU9IjIwMTAtMDEtMDEgMjM6MDA6MDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2JsYW1lIG9uIGxhc3QgY29tbWl0ICgtQyAtQywgc3ltbGluayknICcKKwlnaXQgYmxhbWUgLUMgLUMgdGhyZWUuYmluID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lID5yZXN1bHQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorKE51bWJlcjEgMjAxMC0wMS0wMSAxODowMDowMCArMDAwMCAxKSBjb252ZXJ0ZWQ6IHRlc3QgbnVtYmVyIDIKKyhOdW1iZXIyIDIwMTAtMDEtMDEgMjA6MDA6MDAgKzAwMDAgMikgY29udmVydGVkOiB0ZXN0IG51bWJlciAyIHZlcnNpb24gMgorKE51bWJlcjMgMjAxMC0wMS0wMSAyMjowMDowMCArMDAwMCAzKSBjb252ZXJ0ZWQ6IHRlc3QgbnVtYmVyIDIgdmVyc2lvbiAzCisoTnVtYmVyNCAyMDEwLTAxLTAxIDIzOjAwOjAwICswMDAwIDQpIGNvbnZlcnRlZDogdGVzdCBudW1iZXIgMworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwNy1jYXQtZmlsZS10ZXh0Y29udi5zaCBiL3QvdDgwMDctY2F0LWZpbGUtdGV4dGNvbnYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzhhMDA4NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDctY2F0LWZpbGUtdGV4dGNvbnYuc2gKQEAgLTAsMCArMSw5OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjYXQtZmlsZSB0ZXh0Y29udiBzdXBwb3J0JworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+aGVscGVyIDw8J0VPRicKKyMhL2Jpbi9zaAorZ3JlcCAtcSAnXmJpbjogJyAiJDEiIHx8IHsgZWNobyAiRTogJDEgaXMgbm90IFwiYmluYXJ5XCIgZmlsZSIgMT4mMjsgZXhpdCAxOyB9CitzZWQgJ3MvXmJpbjogL2NvbnZlcnRlZDogLycgIiQxIgorRU9GCitjaG1vZCAreCBoZWxwZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgJyAnCisJZWNobyAiYmluOiB0ZXN0IiA+b25lLmJpbiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwkJbG4gLXMgb25lLmJpbiBzeW1saW5rLmJpbgorCWZpICYmCisJZ2l0IGFkZCAuICYmCisJR0lUX0FVVEhPUl9OQU1FPU51bWJlcjEgZ2l0IGNvbW1pdCAtYSAtbSBGaXJzdCAtLWRhdGU9IjIwMTAtMDEtMDEgMTg6MDA6MDAiICYmCisJZWNobyAiYmluOiB0ZXN0IHZlcnNpb24gMiIgPm9uZS5iaW4gJiYKKwlHSVRfQVVUSE9SX05BTUU9TnVtYmVyMiBnaXQgY29tbWl0IC1hIC1tIFNlY29uZCAtLWRhdGU9IjIwMTAtMDEtMDEgMjA6MDA6MDAiCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2ZhdGFsOiBnaXQgY2F0LWZpbGUgLS10ZXh0Y29udjogdW5hYmxlIHRvIHJ1biB0ZXh0Y29udiBvbiA6b25lLmJpbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbHRlciBzcGVjaWZpZWQnICcKKwlnaXQgY2F0LWZpbGUgLS10ZXh0Y29udiA6b25lLmJpbiAyPnJlc3VsdAorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXh0Y29udiBmaWx0ZXJzJyAnCisJZWNobyAiKi5iaW4gZGlmZj10ZXN0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGRpZmYudGVzdC50ZXh0Y29udiAuL2hlbHBlciAmJgorCWdpdCBjb25maWcgZGlmZi50ZXN0LmNhY2hldGV4dGNvbnYgZmFsc2UKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorYmluOiB0ZXN0IHZlcnNpb24gMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdC1maWxlIHdpdGhvdXQgLS10ZXh0Y29udicgJworCWdpdCBjYXQtZmlsZSBibG9iIDpvbmUuYmluID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorYmluOiB0ZXN0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgd2l0aG91dCAtLXRleHRjb252IG9uIHByZXZpb3VzIGNvbW1pdCcgJworCWdpdCBjYXQtZmlsZSAtcCBIRUFEXjpvbmUuYmluID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorY29udmVydGVkOiB0ZXN0IHZlcnNpb24gMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdC1maWxlIC0tdGV4dGNvbnYgb24gbGFzdCBjb21taXQnICcKKwlnaXQgY2F0LWZpbGUgLS10ZXh0Y29udiA6b25lLmJpbiA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2NvbnZlcnRlZDogdGVzdAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdC1maWxlIC0tdGV4dGNvbnYgb24gcHJldmlvdXMgY29tbWl0JyAnCisJZ2l0IGNhdC1maWxlIC0tdGV4dGNvbnYgSEVBRF46b25lLmJpbiA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NhdC1maWxlIHdpdGhvdXQgLS10ZXh0Y29udiAoc3ltbGluayknICcKKwlnaXQgY2F0LWZpbGUgYmxvYiA6c3ltbGluay5iaW4gPnJlc3VsdCAmJgorCXByaW50ZiAiJXMiICJvbmUuYmluIiA+ZXhwZWN0ZWQKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjYXQtZmlsZSAtLXRleHRjb252IG9uIGluZGV4IChzeW1saW5rKScgJworCSEgZ2l0IGNhdC1maWxlIC0tdGV4dGNvbnYgOnN5bWxpbmsuYmluIDI+cmVzdWx0ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK2ZhdGFsOiBnaXQgY2F0LWZpbGUgLS10ZXh0Y29udjogdW5hYmxlIHRvIHJ1biB0ZXh0Y29udiBvbiA6c3ltbGluay5iaW4KK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjYXQtZmlsZSAtLXRleHRjb252IG9uIEhFQUQgKHN5bWxpbmspJyAnCisJISBnaXQgY2F0LWZpbGUgLS10ZXh0Y29udiBIRUFEOnN5bWxpbmsuYmluIDI+cmVzdWx0ICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorZmF0YWw6IGdpdCBjYXQtZmlsZSAtLXRleHRjb252OiB1bmFibGUgdG8gcnVuIHRleHRjb252IG9uIEhFQUQ6c3ltbGluay5iaW4KK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDgtYmxhbWUtZm9ybWF0cy5zaCBiL3QvdDgwMDgtYmxhbWUtZm9ybWF0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTVmOGIzCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwOC1ibGFtZS1mb3JtYXRzLnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdibGFtZSBvdXRwdXQgaW4gdmFyaW91cyBmb3JtYXRzIG9uIGEgc2ltcGxlIGNhc2UnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gYiA+PmZpbGUgJiYKKwllY2hvIGMgPj5maWxlICYmCisJZWNobyBkID4+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK15iYWY1ZTBiIChBIFUgVGhvciAyMDA1LTA0LTA3IDE1OjEzOjEzIC0wNzAwIDEpIGEKKzg4MjUzNzlkIChBIFUgVGhvciAyMDA1LTA0LTA3IDE1OjE0OjEzIC0wNzAwIDIpIGIKKzg4MjUzNzlkIChBIFUgVGhvciAyMDA1LTA0LTA3IDE1OjE0OjEzIC0wNzAwIDMpIGMKKzg4MjUzNzlkIChBIFUgVGhvciAyMDA1LTA0LTA3IDE1OjE0OjEzIC0wNzAwIDQpIGQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9ybWFsIGJsYW1lIG91dHB1dCcgJworCWdpdCBibGFtZSBmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK0lEMT1iYWY1ZTBiMzg2OWUwYjJiMmJlYjM5NWEzNzIwYzdiNTFlYWM5NGZjCitDT01NSVQxPSdhdXRob3IgQSBVIFRob3IKK2F1dGhvci1tYWlsIDxhdXRob3JAZXhhbXBsZS5jb20+CithdXRob3ItdGltZSAxMTEyOTExOTkzCithdXRob3ItdHogLTA3MDAKK2NvbW1pdHRlciBDIE8gTWl0dGVyCitjb21taXR0ZXItbWFpbCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorY29tbWl0dGVyLXRpbWUgMTExMjkxMTk5MworY29tbWl0dGVyLXR6IC0wNzAwCitzdW1tYXJ5IG9uZQorYm91bmRhcnkKK2ZpbGVuYW1lIGZpbGUnCitJRDI9ODgyNTM3OWRmYjhhMTI2N2I1OGU4ZTViY2Y2OWVlYzgzOGY2ODVlYworQ09NTUlUMj0nYXV0aG9yIEEgVSBUaG9yCithdXRob3ItbWFpbCA8YXV0aG9yQGV4YW1wbGUuY29tPgorYXV0aG9yLXRpbWUgMTExMjkxMjA1MworYXV0aG9yLXR6IC0wNzAwCitjb21taXR0ZXIgQyBPIE1pdHRlcgorY29tbWl0dGVyLW1haWwgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK2NvbW1pdHRlci10aW1lIDExMTI5MTIwNTMKK2NvbW1pdHRlci10eiAtMDcwMAorc3VtbWFyeSB0d28KK3ByZXZpb3VzIGJhZjVlMGIzODY5ZTBiMmIyYmViMzk1YTM3MjBjN2I1MWVhYzk0ZmMgZmlsZQorZmlsZW5hbWUgZmlsZScKKworY2F0ID5leHBlY3QgPDxFT0YKKyRJRDEgMSAxIDEKKyRDT01NSVQxCisJYQorJElEMiAyIDIgMworJENPTU1JVDIKKwliCiskSUQyIDMgMworCWMKKyRJRDIgNCA0CisJZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtLXBvcmNlbGFpbiBvdXRwdXQnICcKKwlnaXQgYmxhbWUgLS1wb3JjZWxhaW4gZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorJElEMSAxIDEgMQorJENPTU1JVDEKKwlhCiskSUQyIDIgMiAzCiskQ09NTUlUMgorCWIKKyRJRDIgMyAzCiskQ09NTUlUMgorCWMKKyRJRDIgNCA0CiskQ09NTUlUMgorCWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBvdXRwdXQnICcKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTAwMS1zZW5kLWVtYWlsLnNoIGIvdC90OTAwMS1zZW5kLWVtYWlsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzNTEyMjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDAxLXNlbmQtZW1haWwuc2gKQEAgLTAsMCArMSwxMjEzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHNlbmQtZW1haWwnCisuIC4vdGVzdC1saWIuc2gKKworIyBNYXkgYmUgYWx0ZXJlZCBsYXRlciBpbiB0aGUgdGVzdAorUFJFUkVRPSJQRVJMIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgXAorICAgICdwcmVwYXJlIHJlZmVyZW5jZSB0cmVlJyBcCisgICAgJ2VjaG8gIjFBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSIgPmZpbGUgJiYKKyAgICAgZWNobyAibGF6eSBkb2ciID4+ZmlsZSAmJgorICAgICBnaXQgYWRkIGZpbGUgJiYKKyAgICAgR0lUX0FVVEhPUl9OQU1FPSJBIiBnaXQgY29tbWl0IC1hIC1tICJJbml0aWFsLiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSBcCisgICAgJ1NldHVwIGhlbHBlciB0b29sJyBcCisgICAgJyhlY2hvICIjISRTSEVMTF9QQVRIIgorICAgICAgZWNobyBzaGlmdAorICAgICAgZWNobyBvdXRwdXQ9MQorICAgICAgZWNobyAid2hpbGUgdGVzdCAtZiBjb21tYW5kbGluZVwkb3V0cHV0OyBkbyBvdXRwdXQ9XCQoKFwkb3V0cHV0KzEpKTsgZG9uZSIKKyAgICAgIGVjaG8gZm9yIGEKKyAgICAgIGVjaG8gZG8KKyAgICAgIGVjaG8gIiAgZWNobyBcIiFcJGEhXCIiCisgICAgICBlY2hvICJkb25lID5jb21tYW5kbGluZVwkb3V0cHV0IgorICAgICAgdGVzdF9oYXZlX3ByZXJlcSBNSU5HVyAmJiBlY2hvICJkb3MydW5peCBjb21tYW5kbGluZVwkb3V0cHV0IgorICAgICAgZWNobyAiY2F0ID4gbXNndHh0XCRvdXRwdXQiCisgICAgICApID5mYWtlLnNlbmRtYWlsICYmCisgICAgIGNobW9kICt4IC4vZmFrZS5zZW5kbWFpbCAmJgorICAgICBnaXQgYWRkIGZha2Uuc2VuZG1haWwgJiYKKyAgICAgR0lUX0FVVEhPUl9OQU1FPSJBIiBnaXQgY29tbWl0IC1hIC1tICJTZWNvbmQuIicKKworY2xlYW5fZmFrZV9zZW5kbWFpbCgpIHsKKwlybSAtZiBjb21tYW5kbGluZSogbXNndHh0KgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ0V4dHJhY3QgcGF0Y2hlcycgJworICAgIHBhdGNoZXM9YGdpdCBmb3JtYXQtcGF0Y2ggLXMgLS1jYz0iT25lIDxvbmVAZXhhbXBsZS5jb20+IiAtLWNjPXR3b0BleGFtcGxlLmNvbSAtbiBIRUFEXjFgCisnCisKKyMgVGVzdCBubyBjb25maXJtIGVhcmx5IHRvIGVuc3VyZSByZW1haW5pbmcgdGVzdHMgd2lsbCBub3QgaGFuZwordGVzdF9ub19jb25maXJtICgpIHsKKwlybSAtZiBub19jb25maXJtX29rYXkKKwllY2hvIG4gfCBcCisJCUdJVF9TRU5EX0VNQUlMX05PVFRZPTEgXAorCQlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkQCBcCisJCSRwYXRjaGVzID4gc3Rkb3V0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdyZXAgIlNlbmQgdGhpcyBlbWFpbCIgc3Rkb3V0ICYmCisJCT4gbm9fY29uZmlybV9va2F5Cit9CisKKyMgRXhpdCBpbW1lZGlhdGVseSB0byBwcmV2ZW50IGhhbmcgaWYgYSBuby1jb25maXJtIHRlc3QgZmFpbHMKK2NoZWNrX25vX2NvbmZpcm0gKCkgeworCWlmICEgdGVzdCAtZiBub19jb25maXJtX29rYXkKKwl0aGVuCisJCXNheSAnY29uZmlybSB0ZXN0IGZhaWxlZDsgc2tpcHBpbmcgcmVtYWluaW5nIHRlc3RzIHRvIHByZXZlbnQgaGFuZ2luZycKKwkJUFJFUkVRPSIkUFJFUkVRLENIRUNLX05PX0NPTkZJUk0iCisJZmkKKwlyZXR1cm4gMAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ05vIGNvbmZpcm0gd2l0aCAtLXN1cHByZXNzLWNjJyAnCisJdGVzdF9ub19jb25maXJtIC0tc3VwcHJlc3MtY2M9c29iICYmCisJY2hlY2tfbm9fY29uZmlybQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnTm8gY29uZmlybSB3aXRoIC0tY29uZmlybT1uZXZlcicgJworCXRlc3Rfbm9fY29uZmlybSAtLWNvbmZpcm09bmV2ZXIgJiYKKwljaGVja19ub19jb25maXJtCisnCisKKyMgbGVhdmUgc2VuZGVtYWlsLmNvbmZpcm0gc2V0IHRvIG5ldmVyIGFmdGVyIHRoaXMgc28gdGhhdCBub25lIG9mIHRoZQorIyByZW1haW5pbmcgdGVzdHMgcHJvbXB0IHVuaW50ZW50aW9uYWxseS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnTm8gY29uZmlybSB3aXRoIHNlbmRlbWFpbC5jb25maXJtPW5ldmVyJyAnCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSBuZXZlciAmJgorCXRlc3Rfbm9fY29uZmlybSAtLWNvbXBvc2UgLS1zdWJqZWN0PWZvbyAmJgorCWNoZWNrX25vX2NvbmZpcm0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdTZW5kIHBhdGNoZXMnICcKKyAgICAgZ2l0IHNlbmQtZW1haWwgLS1zdXBwcmVzcy1jYz1zb2IgLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiAtLXRvPW5vYm9keUBleGFtcGxlLmNvbSAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgJHBhdGNoZXMgMj5lcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCishbm9ib2R5QGV4YW1wbGUuY29tIQorIWF1dGhvckBleGFtcGxlLmNvbSEKKyFvbmVAZXhhbXBsZS5jb20hCishdHdvQGV4YW1wbGUuY29tIQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSBcCisgICAgJ1ZlcmlmeSBjb21tYW5kbGluZScgXAorICAgICd0ZXN0X2NtcCBleHBlY3RlZCBjb21tYW5kbGluZTEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnU2VuZCBwYXRjaGVzIHdpdGggLS1lbnZlbG9wZS1zZW5kZXInICcKKyAgICBjbGVhbl9mYWtlX3NlbmRtYWlsICYmCisgICAgIGdpdCBzZW5kLWVtYWlsIC0tZW52ZWxvcGUtc2VuZGVyPSJQYXRjaCBDb250cmlidXRlciA8cGF0Y2hAZXhhbXBsZS5jb20+IiAtLXN1cHByZXNzLWNjPXNvYiAtLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIC0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiAkcGF0Y2hlcyAyPmVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworY2F0ID5leHBlY3RlZCA8PFxFT0YKKyFwYXRjaEBleGFtcGxlLmNvbSEKKyEtaSEKKyFub2JvZHlAZXhhbXBsZS5jb20hCishYXV0aG9yQGV4YW1wbGUuY29tIQorIW9uZUBleGFtcGxlLmNvbSEKKyF0d29AZXhhbXBsZS5jb20hCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRIFwKKyAgICAnVmVyaWZ5IGNvbW1hbmRsaW5lJyBcCisgICAgJ3Rlc3RfY21wIGV4cGVjdGVkIGNvbW1hbmRsaW5lMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdTZW5kIHBhdGNoZXMgd2l0aCAtLWVudmVsb3BlLXNlbmRlcj1hdXRvJyAnCisgICAgY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorICAgICBnaXQgc2VuZC1lbWFpbCAtLWVudmVsb3BlLXNlbmRlcj1hdXRvIC0tc3VwcHJlc3MtY2M9c29iIC0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiICRwYXRjaGVzIDI+ZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorIW5vYm9keUBleGFtcGxlLmNvbSEKKyEtaSEKKyFub2JvZHlAZXhhbXBsZS5jb20hCishYXV0aG9yQGV4YW1wbGUuY29tIQorIW9uZUBleGFtcGxlLmNvbSEKKyF0d29AZXhhbXBsZS5jb20hCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRIFwKKyAgICAnVmVyaWZ5IGNvbW1hbmRsaW5lJyBcCisgICAgJ3Rlc3RfY21wIGV4cGVjdGVkIGNvbW1hbmRsaW5lMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNjQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YmNjQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IGNjQGV4YW1wbGUuY29tLAorCUEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCitJbi1SZXBseS1UbzogPHVuaXF1ZS1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPgorUmVmZXJlbmNlczogPHVuaXF1ZS1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPgorCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdTaG93IGFsbCBoZWFkZXJzJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLXN1cHByZXNzLWNjPXNvYiBcCisJCS0tZnJvbT0iRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz10b0BleGFtcGxlLmNvbSBcCisJCS0tY2M9Y2NAZXhhbXBsZS5jb20gXAorCQktLWJjYz1iY2NAZXhhbXBsZS5jb20gXAorCQktLWluLXJlcGx5LXRvPSI8dW5pcXVlLW1lc3NhZ2UtaWRAZXhhbXBsZS5jb20+IiBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyB8CisJc2VkCS1lICJzL15cKERhdGU6XCkuKi9cMSBEQVRFLVNUUklORy8iIFwKKwkJLWUgInMvXlwoTWVzc2FnZS1JZDpcKS4qL1wxIE1FU1NBR0UtSUQtU1RSSU5HLyIgXAorCQktZSAicy9eXChYLU1haWxlcjpcKS4qL1wxIFgtTUFJTEVSLVNUUklORy8iIFwKKwkJPmFjdHVhbC1zaG93LWFsbC1oZWFkZXJzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyBhY3R1YWwtc2hvdy1hbGwtaGVhZGVycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ1Byb21wdGluZyB3b3JrcycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwkoZWNobyAiRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iCisJIGVjaG8gInRvQGV4YW1wbGUuY29tIgorCSBlY2hvICIiCisJKSB8IEdJVF9TRU5EX0VNQUlMX05PVFRZPTEgZ2l0IHNlbmQtZW1haWwgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyBcCisJCTI+ZXJyb3JzICYmCisJCWdyZXAgIl5Gcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPlwkIiBtc2d0eHQxICYmCisJCWdyZXAgIl5UbzogdG9AZXhhbXBsZS5jb21cJCIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3RvY21kIHdvcmtzJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWNwICRwYXRjaGVzIHRvY21kLnBhdGNoICYmCisJZWNobyB0b2NtZC0tdG9jbWRAZXhhbXBsZS5jb20gPj50b2NtZC5wYXRjaCAmJgorCXsKKwkgIGVjaG8gIiMhJFNIRUxMX1BBVEgiCisJICBlY2hvIHNlZCAtbiAtZSBzL150b2NtZC0tLy9wIFwiXCQxXCIKKwl9ID4gdG9jbWQtc2VkICYmCisJY2htb2QgK3ggdG9jbWQtc2VkICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10by1jbWQ9Li90b2NtZC1zZWQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQl0b2NtZC5wYXRjaCBcCisJCSYmCisJZ3JlcCAiXlRvOiB0b2NtZEBleGFtcGxlLmNvbSIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2NjY21kIHdvcmtzJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWNwICRwYXRjaGVzIGNjY21kLnBhdGNoICYmCisJZWNobyAiY2NjbWQtLSAgY2NjbWRAZXhhbXBsZS5jb20iID4+Y2NjbWQucGF0Y2ggJiYKKwl7CisJICBlY2hvICIjISRTSEVMTF9QQVRIIgorCSAgZWNobyBzZWQgLW4gLWUgcy9eY2NjbWQtLS8vcCBcIlwkMVwiCisJfSA+IGNjY21kLXNlZCAmJgorCWNobW9kICt4IGNjY21kLXNlZCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1jYy1jbWQ9Li9jY2NtZC1zZWQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQljY2NtZC5wYXRjaCBcCisJCSYmCisJZ3JlcCAiXgljY2NtZEBleGFtcGxlLmNvbSIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3JlamVjdCBsb25nIGxpbmVzJyAnCisJejg9enp6enp6enogJiYKKwl6NjQ9JHo4JHo4JHo4JHo4JHo4JHo4JHo4JHo4ICYmCisJejUxMj0kejY0JHo2NCR6NjQkejY0JHo2NCR6NjQkejY0JHo2NCAmJgorCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwljcCAkcGF0Y2hlcyBsb25nbGluZS5wYXRjaCAmJgorCWVjaG8gJHo1MTIkejUxMiA+PmxvbmdsaW5lLnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyBsb25nbGluZS5wYXRjaCBcCisJCTI+ZXJyb3JzICYmCisJZ3JlcCBsb25nbGluZS5wYXRjaCBlcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdubyBwYXRjaCB3YXMgc2VudCcgJworCSEgdGVzdCAtZSBjb21tYW5kbGluZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdBdXRob3IgRnJvbTogaW4gbWVzc2FnZSBib2R5JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJiYKKwlzZWQgIjEsL15cJC9kIiA8IG1zZ3R4dDEgPiBtc2dib2R5MSAmJgorCWdyZXAgIkZyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4iIG1zZ2JvZHkxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnQXV0aG9yIEZyb206IG5vdCBpbiBtZXNzYWdlIGJvZHknICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkEgPGF1dGhvckBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyAmJgorCXNlZCAiMSwvXlwkL2QiIDwgbXNndHh0MSA+IG1zZ2JvZHkxICYmCisJISBncmVwICJGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IiBtc2dib2R5MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2FsbG93IGxvbmcgbGluZXMgd2l0aCAtLW5vLXZhbGlkYXRlJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQktLW5vdmFsaWRhdGUgXAorCQkkcGF0Y2hlcyBsb25nbGluZS5wYXRjaCBcCisJCTI+ZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnSW52YWxpZCBJbi1SZXBseS1UbycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0taW4tcmVwbHktdG89IiAiIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgXAorCQkyPmVycm9ycyAmJgorCSEgZ3JlcCAiXkluLVJlcGx5LVRvOiA8ICo+IiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnVmFsaWQgSW4tUmVwbHktVG8gd2hlbiBwcm9tcHRpbmcnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJKGVjaG8gIkZyb20gRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iCisJIGVjaG8gIlRvIEV4YW1wbGUgPHRvQGV4YW1wbGUuY29tPiIKKwkgZWNobyAiIgorCSkgfCBlbnYgR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSBnaXQgc2VuZC1lbWFpbCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzIDI+ZXJyb3JzICYmCisJISBncmVwICJeSW4tUmVwbHktVG86IDwgKj4iIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdJbi1SZXBseS1UbyB3aXRob3V0IC0tY2hhaW4tcmVwbHktdG8nICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyAiPHVuaXF1ZS1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1ub2NoYWluLXJlcGx5LXRvIFwKKwkJLS1pbi1yZXBseS10bz0iJChjYXQgZXhwZWN0KSIgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyAkcGF0Y2hlcyBcCisJCTI+ZXJyb3JzICYmCisJIyBUaGUgZmlyc3QgbWVzc2FnZSBpcyBhIHJlcGx5IHRvIC0taW4tcmVwbHktdG8KKwlzZWQgLW4gLWUgInMvXkluLVJlcGx5LVRvOiAqXCguKlwpL1wxL3AiIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkjIFNlY29uZCBhbmQgc3Vic2VxdWVudCBtZXNzYWdlcyBhcmUgcmVwbGllcyB0byB0aGUgZmlyc3Qgb25lCisJc2VkIC1uIC1lICJzL15NZXNzYWdlLUlkOiAqXCguKlwpL1wxL3AiIG1zZ3R4dDEgPmV4cGVjdCAmJgorCXNlZCAtbiAtZSAicy9eSW4tUmVwbHktVG86ICpcKC4qXCkvXDEvcCIgbXNndHh0MiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXNlZCAtbiAtZSAicy9eSW4tUmVwbHktVG86ICpcKC4qXCkvXDEvcCIgbXNndHh0MyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ0luLVJlcGx5LVRvIHdpdGggLS1jaGFpbi1yZXBseS10bycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwllY2hvICI8dW5pcXVlLW1lc3NhZ2UtaWRAZXhhbXBsZS5jb20+IiA+ZXhwZWN0ICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLWNoYWluLXJlcGx5LXRvIFwKKwkJLS1pbi1yZXBseS10bz0iJChjYXQgZXhwZWN0KSIgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyAkcGF0Y2hlcyBcCisJCTI+ZXJyb3JzICYmCisJc2VkIC1uIC1lICJzL15Jbi1SZXBseS1UbzogKlwoLipcKS9cMS9wIiBtc2d0eHQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJc2VkIC1uIC1lICJzL15NZXNzYWdlLUlkOiAqXCguKlwpL1wxL3AiIG1zZ3R4dDEgPmV4cGVjdCAmJgorCXNlZCAtbiAtZSAicy9eSW4tUmVwbHktVG86ICpcKC4qXCkvXDEvcCIgbXNndHh0MiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXNlZCAtbiAtZSAicy9eTWVzc2FnZS1JZDogKlwoLipcKS9cMS9wIiBtc2d0eHQyID5leHBlY3QgJiYKKwlzZWQgLW4gLWUgInMvXkluLVJlcGx5LVRvOiAqXCguKlwpL1wxL3AiIG1zZ3R4dDMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBmYWtlIGVkaXRvcicgJworCShlY2hvICIjISRTSEVMTF9QQVRIIiAmJgorCSBlY2hvICJlY2hvIGZha2UgZWRpdCA+PlwiXCQxXCIiCisJKSA+ZmFrZS1lZGl0b3IgJiYKKwljaG1vZCAreCBmYWtlLWVkaXRvcgorJworCit0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLWNvbXBvc2Ugd29ya3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tY29tcG9zZSAtLXN1YmplY3QgZm9vIFwKKwktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkkcGF0Y2hlcyBcCisJMj5lcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdmaXJzdCBtZXNzYWdlIGlzIGNvbXBvc2UgdGV4dCcgJworCWdyZXAgIl5mYWtlIGVkaXQiIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZWNvbmQgbWVzc2FnZSBpcyBwYXRjaCcgJworCWdyZXAgIlN1YmplY3Q6LipTZWNvbmQiIG1zZ3R4dDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3Mtc29iIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8Y2NAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxvbmVAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0d29AZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogY2NAZXhhbXBsZS5jb20sCisJQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisiCisKK3Rlc3Rfc3VwcHJlc3Npb24gKCkgeworCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1zdXBwcmVzcy1jYz0kMSAkezIrIi0tc3VwcHJlc3MtY2M9JDIifSBcCisJCS0tZnJvbT0iRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz10b0BleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyB8CisJc2VkCS1lICJzL15cKERhdGU6XCkuKi9cMSBEQVRFLVNUUklORy8iIFwKKwkJLWUgInMvXlwoTWVzc2FnZS1JZDpcKS4qL1wxIE1FU1NBR0UtSUQtU1RSSU5HLyIgXAorCQktZSAicy9eXChYLU1haWxlcjpcKS4qL1wxIFgtTUFJTEVSLVNUUklORy8iIFwKKwkJPmFjdHVhbC1zdXBwcmVzcy0kMSR7MisiLSQyIn0gJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zdXBwcmVzcy0kMSR7MisiLSQyIn0gYWN0dWFsLXN1cHByZXNzLSQxJHsyKyItJDIifQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5jYyBzZXQnICcKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jYyBjY0BleGFtcGxlLmNvbSAmJgorCXRlc3Rfc3VwcHJlc3Npb24gc29iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAiCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLXNvYiA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LAorCU9uZSA8b25lQGV4YW1wbGUuY29tPiwKKwl0d29AZXhhbXBsZS5jb20KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuY2MgdW5zZXQnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNjICYmCisJdGVzdF9zdXBwcmVzc2lvbiBzb2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtY2NjbWQgPDxcRU9GCiswMDAxLVNlY29uZC5wYXRjaAorKG1ib3gpIEFkZGluZyBjYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4nCisobWJveCkgQWRkaW5nIGNjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisobWJveCkgQWRkaW5nIGNjOiB0d29AZXhhbXBsZS5jb20gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisoYm9keSkgQWRkaW5nIGNjOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPicKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LAorCU9uZSA8b25lQGV4YW1wbGUuY29tPiwKKwl0d29AZXhhbXBsZS5jb20sCisJQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCisKK1Jlc3VsdDogT0sKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5jY2NtZCcgJworCWVjaG8gZWNobyBjYy1jbWRAZXhhbXBsZS5jb20gPiBjY2NtZCAmJgorCWNobW9kICt4IGNjY21kICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY2NjbWQgLi9jY2NtZCAmJgorCXRlc3Rfc3VwcHJlc3Npb24gY2NjbWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtYWxsIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLXN1cHByZXNzLWNjPWFsbCcgJworCXRlc3Rfc3VwcHJlc3Npb24gYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAiCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLWJvZHkgPDxcRU9GCiswMDAxLVNlY29uZC5wYXRjaAorKG1ib3gpIEFkZGluZyBjYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4nCisobWJveCkgQWRkaW5nIGNjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisobWJveCkgQWRkaW5nIGNjOiB0d29AZXhhbXBsZS5jb20gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisoY2MtY21kKSBBZGRpbmcgY2M6IGNjLWNtZEBleGFtcGxlLmNvbSBmcm9tOiAnLi9jY2NtZCcKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNjLWNtZEBleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LAorCU9uZSA8b25lQGV4YW1wbGUuY29tPiwKKwl0d29AZXhhbXBsZS5jb20sCisJY2MtY21kQGV4YW1wbGUuY29tCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1zdXBwcmVzcy1jYz1ib2R5JyAnCisJdGVzdF9zdXBwcmVzc2lvbiBib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAiCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLWJvZHktY2NjbWQgPDxcRU9GCiswMDAxLVNlY29uZC5wYXRjaAorKG1ib3gpIEFkZGluZyBjYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4nCisobWJveCkgQWRkaW5nIGNjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisobWJveCkgQWRkaW5nIGNjOiB0d29AZXhhbXBsZS5jb20gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCitEcnktT0suIExvZyBzYXlzOgorU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQorTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxvbmVAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0d29AZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1zdXBwcmVzcy1jYz1ib2R5IC0tc3VwcHJlc3MtY2M9Y2NjbWQnICcKKwl0ZXN0X3N1cHByZXNzaW9uIGJvZHkgY2NjbWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3Mtc29iIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCisKK1Jlc3VsdDogT0sKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tc3VwcHJlc3MtY2M9c29iJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBzZW5kZW1haWwuY2NjbWQgJiYKKwl0ZXN0X3N1cHByZXNzaW9uIHNvYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgIgorY2F0ID5leHBlY3RlZC1zdXBwcmVzcy1ib2R5Y2MgPDxcRU9GCiswMDAxLVNlY29uZC5wYXRjaAorKG1ib3gpIEFkZGluZyBjYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4nCisobWJveCkgQWRkaW5nIGNjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisobWJveCkgQWRkaW5nIGNjOiB0d29AZXhhbXBsZS5jb20gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisoYm9keSkgQWRkaW5nIGNjOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPicKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LAorCU9uZSA8b25lQGV4YW1wbGUuY29tPiwKKwl0d29AZXhhbXBsZS5jb20sCisJQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCisKK1Jlc3VsdDogT0sKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tc3VwcHJlc3MtY2M9Ym9keWNjJyAnCisJdGVzdF9zdXBwcmVzc2lvbiBib2R5Y2MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtY2MgPDxcRU9GCiswMDAxLVNlY29uZC5wYXRjaAorKG1ib3gpIEFkZGluZyBjYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4nCisoYm9keSkgQWRkaW5nIGNjOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPicKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LAorCUMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLXN1cHByZXNzLWNjPWNjJyAnCisJdGVzdF9zdXBwcmVzc2lvbiBjYworJworCit0ZXN0X2NvbmZpcm0gKCkgeworCWVjaG8geSB8IFwKKwkJR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSBcCisJCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJEAgJHBhdGNoZXMgPiBzdGRvdXQgJiYKKwlncmVwICJTZW5kIHRoaXMgZW1haWwiIHN0ZG91dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29uZmlybT1hbHdheXMnICcKKwl0ZXN0X2NvbmZpcm0gLS1jb25maXJtPWFsd2F5cyAtLXN1cHByZXNzLWNjPWFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29uZmlybT1hdXRvJyAnCisJdGVzdF9jb25maXJtIC0tY29uZmlybT1hdXRvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb25maXJtPWNjJyAnCisJdGVzdF9jb25maXJtIC0tY29uZmlybT1jYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29uZmlybT1jb21wb3NlJyAnCisJdGVzdF9jb25maXJtIC0tY29uZmlybT1jb21wb3NlIC0tY29tcG9zZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2NvbmZpcm0gYnkgZGVmYXVsdCAoZHVlIHRvIGNjKScgJworCUNPTkZJUk09JChnaXQgY29uZmlnIC0tZ2V0IHNlbmRlbWFpbC5jb25maXJtKSAmJgorCWdpdCBjb25maWcgLS11bnNldCBzZW5kZW1haWwuY29uZmlybSAmJgorCXRlc3RfY29uZmlybQorCXJldD0iJD8iCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSAke0NPTkZJUk06LW5ldmVyfQorCXRlc3QgJHJldCA9ICIwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2NvbmZpcm0gYnkgZGVmYXVsdCAoZHVlIHRvIC0tY29tcG9zZSknICcKKwlDT05GSVJNPSQoZ2l0IGNvbmZpZyAtLWdldCBzZW5kZW1haWwuY29uZmlybSkgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNvbmZpcm0gJiYKKwl0ZXN0X2NvbmZpcm0gLS1zdXBwcmVzcy1jYz1hbGwgLS1jb21wb3NlCisJcmV0PSIkPyIKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jb25maXJtICR7Q09ORklSTTotbmV2ZXJ9CisJdGVzdCAkcmV0ID0gIjAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY29uZmlybSBkZXRlY3RzIEVPRiAoaW5mb3JtIGFzc3VtZXMgeSknICcKKwlDT05GSVJNPSQoZ2l0IGNvbmZpZyAtLWdldCBzZW5kZW1haWwuY29uZmlybSkgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNvbmZpcm0gJiYKKwlybSAtZnIgb3V0ZGlyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMiAtbyBvdXRkaXIgJiYKKwlHSVRfU0VORF9FTUFJTF9OT1RUWT0xIFwKKwkJZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJb3V0ZGlyLyoucGF0Y2ggPCAvZGV2L251bGwKKwlyZXQ9IiQ/IgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gJHtDT05GSVJNOi1uZXZlcn0KKwl0ZXN0ICRyZXQgPSAiMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdjb25maXJtIGRldGVjdHMgRU9GIChhdXRvIGNhdXNlcyBmYWlsdXJlKScgJworCUNPTkZJUk09JChnaXQgY29uZmlnIC0tZ2V0IHNlbmRlbWFpbC5jb25maXJtKSAmJgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gYXV0byAmJgorCUdJVF9TRU5EX0VNQUlMX05PVFRZPTEgJiYKKwlleHBvcnQgR0lUX1NFTkRfRU1BSUxfTk9UVFkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJJHBhdGNoZXMgPCAvZGV2L251bGwKKwlyZXQ9IiQ/IgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gJHtDT05GSVJNOi1uZXZlcn0KKwl0ZXN0ICRyZXQgPSAiMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdjb25maXJtIGRvZXNudCBsb29wIGZvcmV2ZXInICcKKwlDT05GSVJNPSQoZ2l0IGNvbmZpZyAtLWdldCBzZW5kZW1haWwuY29uZmlybSkgJiYKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jb25maXJtIGF1dG8gJiYKKwlHSVRfU0VORF9FTUFJTF9OT1RUWT0xICYmCisJZXhwb3J0IEdJVF9TRU5EX0VNQUlMX05PVFRZICYmCisJCXllcyAiYm9ndXMiIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJJHBhdGNoZXMKKwlyZXQ9IiQ/IgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gJHtDT05GSVJNOi1uZXZlcn0KKwl0ZXN0ICRyZXQgPSAiMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICd1dGY4IENjIGlzIHJmYzIwNDcgZW5jb2RlZCcgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlybSAtZnIgb3V0ZGlyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtbyBvdXRkaXIgLS1jYz0iw6DDqcOsw7bDuiA8dXRmOEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCW91dGRpci8qLnBhdGNoICYmCisJZ3JlcCAiXgkiIG1zZ3R4dDEgfAorCWdyZXAgIj0/VVRGLTg/cT89QzM9QTA9QzM9QTk9QzM9QUM9QzM9QjY9QzM9QkE/PSA8dXRmOEBleGFtcGxlLmNvbT4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb21wb3NlIGFkZHMgTUlNRSBmb3IgdXRmOCBib2R5JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCShlY2hvICIjISRTSEVMTF9QQVRIIiAmJgorCSBlY2hvICJlY2hvIHV0ZjggYm9keTogw6DDqcOsw7bDuiA+PlwiXCQxXCIiCisJKSA+ZmFrZS1lZGl0b3ItdXRmOCAmJgorCWNobW9kICt4IGZha2UtZWRpdG9yLXV0ZjggJiYKKwkgIEdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yLXV0ZjhcIiIgXAorCSAgZ2l0IHNlbmQtZW1haWwgXAorCSAgLS1jb21wb3NlIC0tc3ViamVjdCBmb28gXAorCSAgLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJICAtLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJICAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCSAgJHBhdGNoZXMgJiYKKwlncmVwICJedXRmOCBib2R5IiBtc2d0eHQxICYmCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29tcG9zZSByZXNwZWN0cyB1c2VyIG1pbWUgdHlwZScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwkoZWNobyAiIyEkU0hFTExfUEFUSCIgJiYKKwkgZWNobyAiKGVjaG8gTUlNRS1WZXJzaW9uOiAxLjAiCisJIGVjaG8gIiBlY2hvIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxcOyBjaGFyc2V0PWlzby04ODU5LTEiCisJIGVjaG8gIiBlY2hvIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQiCisJIGVjaG8gIiBlY2hvIFN1YmplY3Q6IGZvbyIKKwkgZWNobyAiIGVjaG8gIgorCSBlY2hvICIgZWNobyB1dGY4IGJvZHk6IMOgw6nDrMO2w7opID5cIlwkMVwiIgorCSkgPmZha2UtZWRpdG9yLXV0ZjgtbWltZSAmJgorCWNobW9kICt4IGZha2UtZWRpdG9yLXV0ZjgtbWltZSAmJgorCSAgR0lUX0VESVRPUj0iXCIkKHB3ZCkvZmFrZS1lZGl0b3ItdXRmOC1taW1lXCIiIFwKKwkgIGdpdCBzZW5kLWVtYWlsIFwKKwkgIC0tY29tcG9zZSAtLXN1YmplY3QgZm9vIFwKKwkgIC0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCSAgLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCSAgLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkgICRwYXRjaGVzICYmCisJZ3JlcCAiXnV0ZjggYm9keSIgbXNndHh0MSAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMSIgbXNndHh0MSAmJgorCSEgZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29tcG9zZSBhZGRzIE1JTUUgZm9yIHV0Zjggc3ViamVjdCcgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwkgIEdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yXCIiIFwKKwkgIGdpdCBzZW5kLWVtYWlsIFwKKwkgIC0tY29tcG9zZSAtLXN1YmplY3QgdXRmOC1zw7xiasOrY3QgXAorCSAgLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJICAtLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJICAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCSAgJHBhdGNoZXMgJiYKKwlncmVwICJeZmFrZSBlZGl0IiBtc2d0eHQxICYmCisJZ3JlcCAiXlN1YmplY3Q6ID0/VVRGLTg/cT91dGY4LXM9QzM9QkNiaj1DMz1BQmN0Pz0iIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICd1dGY4IGF1dGhvciBpcyBjb3JyZWN0bHkgcGFzc2VkIG9uJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXRlc3RfY29tbWl0IHdlaXJkX2F1dGhvciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3IgIkbDvMOxbsO9IE7Dom3DqSA8b2RkXz89bWFpbEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+ZnVubnlfbmFtZS5wYXRjaCAmJgorCWdpdCBzZW5kLWVtYWlsIC0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCSAgLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCSAgLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkgIGZ1bm55X25hbWUucGF0Y2ggJiYKKwlncmVwICJeRnJvbTogRsO8w7Fuw70gTsOibcOpIDxvZGRfPz1tYWlsQGV4YW1wbGUuY29tPiIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2RldGVjdHMgYW1iaWd1b3VzIHJlZmVyZW5jZS9maWxlIGNvbmZsaWN0JyAnCisJZWNobyBtYXN0ZXIgPiBtYXN0ZXIgJiYKKwlnaXQgYWRkIG1hc3RlciAmJgorCWdpdCBjb21taXQgLW0iYWRkIG1hc3RlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1lbWFpbCAtLWRyeS1ydW4gbWFzdGVyIDI+ZXJyb3JzICYmCisJZ3JlcCBkaXNhbWJpZ3VhdGUgZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnZmVlZCB0d28gZmlsZXMnICcKKwlybSAtZnIgb3V0ZGlyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMiAtbyBvdXRkaXIgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJLS1kcnktcnVuIFwKKwktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJb3V0ZGlyLzAwMD8tKi5wYXRjaCAyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiXlN1YmplY3Q6ICIgb3V0ID5zdWJqZWN0cyAmJgorCXRlc3QgInokKHNlZCAtbiAtZSAxcCBzdWJqZWN0cykiID0gInpTdWJqZWN0OiBbUEFUQ0ggMS8yXSBTZWNvbmQuIiAmJgorCXRlc3QgInokKHNlZCAtbiAtZSAycCBzdWJqZWN0cykiID0gInpTdWJqZWN0OiBbUEFUQ0ggMi8yXSBhZGQgbWFzdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2luLXJlcGx5LXRvIGJ1dCBubyB0aHJlYWRpbmcnICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0taW4tcmVwbHktdG89Ijxpbi1yZXBseS1pZEBleGFtcGxlLmNvbT4iIFwKKwkJLS1ub3RocmVhZCBcCisJCSRwYXRjaGVzIHwKKwlncmVwICJJbi1SZXBseS1UbzogPGluLXJlcGx5LWlkQGV4YW1wbGUuY29tPiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdubyBpbi1yZXBseS10byBhbmQgbm8gdGhyZWFkaW5nJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLW5vdGhyZWFkIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCSEgZ3JlcCAiSW4tUmVwbHktVG86ICIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAndGhyZWFkaW5nIGJ1dCBubyBjaGFpbi1yZXBseS10bycgJworCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS10aHJlYWQgXAorCQktLW5vY2hhaW4tcmVwbHktdG8gXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiSW4tUmVwbHktVG86ICIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnd2FybmluZyB3aXRoIGFuIGltcGxpY2l0IC0tY2hhaW4tcmVwbHktdG8nICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJLS1kcnktcnVuIFwKKwktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJb3V0ZGlyLzAwMD8tKi5wYXRjaCAyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAibm8tY2hhaW4tcmVwbHktdG8iIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ25vIHdhcm5pbmcgd2l0aCBhbiBleHBsaWNpdCAtLWNoYWluLXJlcGx5LXRvJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tZHJ5LXJ1biBcCisJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCS0tY2hhaW4tcmVwbHktdG8gXAorCW91dGRpci8wMDA/LSoucGF0Y2ggMj5lcnJvcnMgPm91dCAmJgorCSEgZ3JlcCAibm8tY2hhaW4tcmVwbHktdG8iIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ25vIHdhcm5pbmcgd2l0aCBhbiBleHBsaWNpdCAtLW5vLWNoYWluLXJlcGx5LXRvJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tZHJ5LXJ1biBcCisJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCS0tbm9jaGFpbi1yZXBseS10byBcCisJb3V0ZGlyLzAwMD8tKi5wYXRjaCAyPmVycm9ycyA+b3V0ICYmCisJISBncmVwICJuby1jaGFpbi1yZXBseS10byIgZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnbm8gd2FybmluZyB3aXRoIHNlbmRlbWFpbC5jaGFpbnJlcGx5dG8gPSBmYWxzZScgJworCWdpdCBjb25maWcgc2VuZGVtYWlsLmNoYWlucmVwbHl0byBmYWxzZSAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwktLWRyeS1ydW4gXAorCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwlvdXRkaXIvMDAwPy0qLnBhdGNoIDI+ZXJyb3JzID5vdXQgJiYKKwkhIGdyZXAgIm5vLWNoYWluLXJlcGx5LXRvIiBlcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdubyB3YXJuaW5nIHdpdGggc2VuZGVtYWlsLmNoYWlucmVwbHl0byA9IHRydWUnICcKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jaGFpbnJlcGx5dG8gdHJ1ZSAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwktLWRyeS1ydW4gXAorCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwlvdXRkaXIvMDAwPy0qLnBhdGNoIDI+ZXJyb3JzID5vdXQgJiYKKwkhIGdyZXAgIm5vLWNoYWluLXJlcGx5LXRvIiBlcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwudG8gd29ya3MnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLnRvICJTb21lYm9keSA8c29tZWJvZHlAZXguY29tPiIgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiVG86IFNvbWVib2R5IDxzb21lYm9keUBleC5jb20+IiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLW5vLXRvIG92ZXJyaWRlcyBzZW5kZW1haWwudG8nICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLW5vLXRvIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiVG86IG5vYm9keUBleGFtcGxlLmNvbSIgc3Rkb3V0ICYmCisJISBncmVwICJUbzogU29tZWJvZHkgPHNvbWVib2R5QGV4LmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5jYyB3b3JrcycgJworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZW5kZW1haWwuY2MgIlNvbWVib2R5IDxzb21lYm9keUBleC5jb20+IiAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCWdyZXAgIkNjOiBTb21lYm9keSA8c29tZWJvZHlAZXguY29tPiIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1uby1jYyBvdmVycmlkZXMgc2VuZGVtYWlsLmNjJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS1uby1jYyBcCisJCS0tY2M9Ym9kaWVzQGV4YW1wbGUuY29tIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiQ2M6IGJvZGllc0BleGFtcGxlLmNvbSIgc3Rkb3V0ICYmCisJISBncmVwICJDYzogU29tZWJvZHkgPHNvbWVib2R5QGV4LmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5iY2Mgd29ya3MnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLmJjYyAiT3RoZXIgPG90aGVyQGV4LmNvbT4iICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyIHJlbGF5LmV4YW1wbGUuY29tIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCWdyZXAgIlJDUFQgVE86PG90aGVyQGV4LmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tbm8tYmNjIG92ZXJyaWRlcyBzZW5kZW1haWwuYmNjJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS1uby1iY2MgXAorCQktLWJjYz1ib2RpZXNAZXhhbXBsZS5jb20gXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiUkNQVCBUTzo8Ym9kaWVzQGV4YW1wbGUuY29tPiIgc3Rkb3V0ICYmCisJISBncmVwICJSQ1BUIFRPOjxvdGhlckBleC5jb20+IiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdwYXRjaGVzIFRvIGhlYWRlcnMgYXJlIHVzZWQgYnkgZGVmYXVsdCcgJworCXBhdGNoPWBnaXQgZm9ybWF0LXBhdGNoIC0xIC0tdG89ImJvZGllc0BleGFtcGxlLmNvbSJgICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAkcGF0Y2giICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS1zbXRwLXNlcnZlciByZWxheS5leGFtcGxlLmNvbSBcCisJCSRwYXRjaCA+c3Rkb3V0ICYmCisJZ3JlcCAiUkNQVCBUTzo8Ym9kaWVzQGV4YW1wbGUuY29tPiIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAncGF0Y2hlcyBUbyBoZWFkZXJzIGFyZSBhcHBlbmRlZCB0bycgJworCXBhdGNoPWBnaXQgZm9ybWF0LXBhdGNoIC0xIC0tdG89ImJvZGllc0BleGFtcGxlLmNvbSJgICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAkcGF0Y2giICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyIHJlbGF5LmV4YW1wbGUuY29tIFwKKwkJJHBhdGNoID5zdGRvdXQgJiYKKwlncmVwICJSQ1BUIFRPOjxib2RpZXNAZXhhbXBsZS5jb20+IiBzdGRvdXQgJiYKKwlncmVwICJSQ1BUIFRPOjxub2JvZHlAZXhhbXBsZS5jb20+IiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdUbyBoZWFkZXJzIGZyb20gZmlsZXMgcmVzZXQgZWFjaCBwYXRjaCcgJworCXBhdGNoMT1gZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXRvPSJib2RpZXNAZXhhbXBsZS5jb20iYCAmJgorCXBhdGNoMj1gZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXRvPSJvdGhlckBleGFtcGxlLmNvbSIgSEVBRH5gICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAkcGF0Y2gxICYmIHJtICRwYXRjaDIiICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz0ibm9ib2R5QGV4YW1wbGUuY29tIiBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2gxICRwYXRjaDIgPnN0ZG91dCAmJgorCXRlc3QgJChncmVwIC1jICJSQ1BUIFRPOjxib2RpZXNAZXhhbXBsZS5jb20+IiBzdGRvdXQpID0gMSAmJgorCXRlc3QgJChncmVwIC1jICJSQ1BUIFRPOjxub2JvZHlAZXhhbXBsZS5jb20+IiBzdGRvdXQpID0gMiAmJgorCXRlc3QgJChncmVwIC1jICJSQ1BUIFRPOjxvdGhlckBleGFtcGxlLmNvbT4iIHN0ZG91dCkgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCitjYXQgPmVtYWlsLXVzaW5nLThiaXQgPDxFT0YKK0Zyb20gZmU2ZWNjNjZlY2UzNzE5OGZlNWRiOTFmYTJmYzQxZDlmNGZlNWNjNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK01lc3NhZ2UtSWQ6IDxib2d1cy1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPgorRnJvbTogYXV0aG9yQGV4YW1wbGUuY29tCitEYXRlOiBTYXQsIDEyIEp1biAyMDEwIDE1OjUzOjU4ICswMjAwCitTdWJqZWN0OiBzdWJqZWN0IGdvZXMgaGVyZQorCitEaWVzZXIgZGV1dHNjaGUgVGV4dCBlbnRow6RsdCBlaW5lbiBVbWxhdXQhCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKK2NhdCA+Y29udGVudC10eXBlLWRlY2wgPDxFT0YKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2Fza3MgYWJvdXQgYW5kIGZpeGVzIDhiaXQgZW5jb2RpbmdzJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWVjaG8gfAorCWdpdCBzZW5kLWVtYWlsIC0tZnJvbT1hdXRob3JAZXhhbXBsZS5jb20gLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJCWVtYWlsLXVzaW5nLThiaXQgPnN0ZG91dCAmJgorCWdyZXAgImRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyIgc3Rkb3V0ICYmCisJZ3JlcCBlbWFpbC11c2luZy04Yml0IHN0ZG91dCAmJgorCWdyZXAgIldoaWNoIDhiaXQgZW5jb2RpbmciIHN0ZG91dCAmJgorCWVncmVwICJDb250ZW50fE1JTUUiIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBjb250ZW50LXR5cGUtZGVjbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC44Yml0RW5jb2Rpbmcgd29ya3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuYXNzdW1lOGJpdEVuY29kaW5nIFVURi04ICYmCisJZWNobyBib2d1cyB8CisJZ2l0IHNlbmQtZW1haWwgLS1mcm9tPWF1dGhvckBleGFtcGxlLmNvbSAtLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJZW1haWwtdXNpbmctOGJpdCA+c3Rkb3V0ICYmCisJZWdyZXAgIkNvbnRlbnR8TUlNRSIgbXNndHh0MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGNvbnRlbnQtdHlwZS1kZWNsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS04Yml0LWVuY29kaW5nIG92ZXJyaWRlcyBzZW5kZW1haWwuOGJpdEVuY29kaW5nJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmFzc3VtZThiaXRFbmNvZGluZyAiYm9ndXMgdG9vIiAmJgorCWVjaG8gYm9ndXMgfAorCWdpdCBzZW5kLWVtYWlsIC0tZnJvbT1hdXRob3JAZXhhbXBsZS5jb20gLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJCS0tOGJpdC1lbmNvZGluZz1VVEYtOCBcCisJCQllbWFpbC11c2luZy04Yml0ID5zdGRvdXQgJiYKKwllZ3JlcCAiQ29udGVudHxNSU1FIiBtc2d0eHQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgY29udGVudC10eXBlLWRlY2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKK2NhdCA+ZW1haWwtdXNpbmctOGJpdCA8PEVPRgorRnJvbSBmZTZlY2M2NmVjZTM3MTk4ZmU1ZGI5MWZhMmZjNDFkOWY0ZmU1Y2M0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorTWVzc2FnZS1JZDogPGJvZ3VzLW1lc3NhZ2UtaWRAZXhhbXBsZS5jb20+CitGcm9tOiBhdXRob3JAZXhhbXBsZS5jb20KK0RhdGU6IFNhdCwgMTIgSnVuIDIwMTAgMTU6NTM6NTggKzAyMDAKK1N1YmplY3Q6IERpZXNlciBCZXRyZWZmIGVudGjDpGx0IGF1Y2ggZWluZW4gVW1sYXV0IQorCitOb3RoaW5nIHRvIHNlZSBoZXJlLgorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCitjYXQgPmV4cGVjdGVkIDw8RU9GCitTdWJqZWN0OiA9P1VURi04P3E/RGllc2VyPTIwQmV0cmVmZj0yMGVudGg9QzM9QTRsdD0yMGF1Y2g9MjBlaW5lbj0yMFVtbGF1dCE/PQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS04Yml0LWVuY29kaW5nIGFsc28gdHJlYXRzIHN1YmplY3QnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyBib2d1cyB8CisJZ2l0IHNlbmQtZW1haWwgLS1mcm9tPWF1dGhvckBleGFtcGxlLmNvbSAtLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJLS04Yml0LWVuY29kaW5nPVVURi04IFwKKwkJCWVtYWlsLXVzaW5nLThiaXQgPnN0ZG91dCAmJgorCWdyZXAgIlN1YmplY3QiIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIE5vdGUgdGhhdCB0aGUgcGF0Y2hlcyBpbiB0aGlzIHRlc3QgYXJlIGRlbGliZXJhdGVseSBvdXQgb2Ygb3JkZXI7IHdlCisjIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdvcmtzIGV2ZW4gaWYgdGhlIGNvdmVyLWxldHRlciBpcyBub3QgaW4gdGhlCisjIGZpcnN0IG1haWwuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3JlZnVzaW5nIHRvIHNlbmQgY292ZXIgbGV0dGVyIHRlbXBsYXRlJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXJtIC1mciBvdXRkaXIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0yIC1vIG91dGRpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLWVtYWlsIFwKKwkgIC0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCSAgLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCSAgLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkgIG91dGRpci8wMDAyLSoucGF0Y2ggXAorCSAgb3V0ZGlyLzAwMDAtKi5wYXRjaCBcCisJICBvdXRkaXIvMDAwMS0qLnBhdGNoIFwKKwkgIDI+ZXJyb3JzID5vdXQgJiYKKwlncmVwICJTVUJKRUNUIEhFUkUiIGVycm9ycyAmJgorCXRlc3QgLXogIiQobHMgbXNndHh0KikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1mb3JjZSBzZW5kcyBjb3ZlciBsZXR0ZXIgdGVtcGxhdGUgYW55d2F5JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXJtIC1mciBvdXRkaXIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0yIC1vIG91dGRpciAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkgIC0tZm9yY2UgXAorCSAgLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJICAtLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJICAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCSAgb3V0ZGlyLzAwMDItKi5wYXRjaCBcCisJICBvdXRkaXIvMDAwMC0qLnBhdGNoIFwKKwkgIG91dGRpci8wMDAxLSoucGF0Y2ggXAorCSAgMj5lcnJvcnMgPm91dCAmJgorCSEgZ3JlcCAiU1VCSkVDVCBIRVJFIiBlcnJvcnMgJiYKKwl0ZXN0IC1uICIkKGxzIG1zZ3R4dCopIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlPW1haWxyYycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwllY2hvICJhbGlhcyBzYmQgIHNvbWVib2R5QGV4YW1wbGUub3JnIiA+Lm1haWxyYyAmJgorCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZW5kZW1haWwuYWxpYXNlc2ZpbGUgIiQocHdkKS8ubWFpbHJjIiAmJgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGUgbWFpbHJjICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCSAgLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJICAtLXRvPXNiZCBcCisJICAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCSAgb3V0ZGlyLzAwMDEtKi5wYXRjaCBcCisJICAyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiXiFzb21lYm9keUBleGFtcGxlXC5vcmchJCIgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmFsaWFzZmlsZT1+Ly5tYWlscmMnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyAiYWxpYXMgc2JkICBzb21lb25lQGV4YW1wbGUub3JnIiA+fi8ubWFpbHJjICYmCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIHNlbmRlbWFpbC5hbGlhc2VzZmlsZSAifi8ubWFpbHJjIiAmJgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGUgbWFpbHJjICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCSAgLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJICAtLXRvPXNiZCBcCisJICAtLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCSAgb3V0ZGlyLzAwMDEtKi5wYXRjaCBcCisJICAyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiXiFzb21lb25lQGV4YW1wbGVcLm9yZyEkIiBjb21tYW5kbGluZTEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDAyLWNvbHVtbi5zaCBiL3QvdDkwMDItY29sdW1uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5OTgzNTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDAyLWNvbHVtbi5zaApAQCAtMCwwICsxLDE4MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjb2x1bW4nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPmxpc3RhIDw8XEVPRgorb25lCit0d28KK3RocmVlCitmb3VyCitmaXZlCitzaXgKK3NldmVuCitlaWdodAorbmluZQordGVuCitlbGV2ZW4KK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXZlcicgJworCWdpdCBjb2x1bW4gLS1pbmRlbnQ9WiAtLW1vZGU9bmV2ZXIgPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBsaXN0YSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWx3YXlzJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK1pvbmUKK1p0d28KK1p0aHJlZQorWmZvdXIKK1pmaXZlCitac2l4Citac2V2ZW4KK1plaWdodAorWm5pbmUKK1p0ZW4KK1plbGV2ZW4KK0VPRgorCWdpdCBjb2x1bW4gLS1pbmRlbnQ9WiAtLW1vZGU9cGxhaW4gPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnODAgY29sdW1ucycgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitvbmUgICAgdHdvICAgIHRocmVlICBmb3VyICAgZml2ZSAgIHNpeCAgICBzZXZlbiAgZWlnaHQgIG5pbmUgICB0ZW4gICAgZWxldmVuCitFT0YKKwlDT0xVTU5TPTgwIGdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbiA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorb25lCit0d28KK3RocmVlCitmb3VyCitmaXZlCitzaXgKK3NldmVuCitlaWdodAorbmluZQordGVuCitlbGV2ZW4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENPTFVNTlNfQ0FOX0JFXzEgJ0NPTFVNTlMgPSAxJyAnCisJQ09MVU1OUz0xIGdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbiA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWR0aCA9IDEnICcKKwlnaXQgY29sdW1uIC0tbW9kZT1jb2x1bW4gLS13aWR0aD0xIDxsaXN0YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK0NPTFVNTlM9MjAKK2V4cG9ydCBDT0xVTU5TCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIwIGNvbHVtbnMnICcKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorb25lICAgIHNldmVuCit0d28gICAgZWlnaHQKK3RocmVlICBuaW5lCitmb3VyICAgdGVuCitmaXZlICAgZWxldmVuCitzaXgKK0VPRgorCWdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbiA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyMCBjb2x1bW5zLCBub2RlbnNlJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK29uZSAgICBzZXZlbgordHdvICAgIGVpZ2h0Cit0aHJlZSAgbmluZQorZm91ciAgIHRlbgorZml2ZSAgIGVsZXZlbgorc2l4CitFT0YKKwlnaXQgY29sdW1uIC0tbW9kZT1jb2x1bW4sbm9kZW5zZSA8IGxpc3RhID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIwIGNvbHVtbnMsIGRlbnNlJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK29uZSAgIGZpdmUgIG5pbmUKK3R3byAgIHNpeCAgIHRlbgordGhyZWUgc2V2ZW4gZWxldmVuCitmb3VyICBlaWdodAorRU9GCisJZ2l0IGNvbHVtbiAtLW1vZGU9Y29sdW1uLGRlbnNlIDwgbGlzdGEgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMjAgY29sdW1ucywgcGFkZGluZyAyJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK29uZSAgICAgc2V2ZW4KK3R3byAgICAgZWlnaHQKK3RocmVlICAgbmluZQorZm91ciAgICB0ZW4KK2ZpdmUgICAgZWxldmVuCitzaXgKK0VPRgorCWdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbiAtLXBhZGRpbmcgMiA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyMCBjb2x1bW5zLCBpbmRlbnRlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgIG9uZSAgICBzZXZlbgorICB0d28gICAgZWlnaHQKKyAgdGhyZWUgIG5pbmUKKyAgZm91ciAgIHRlbgorICBmaXZlICAgZWxldmVuCisgIHNpeAorRU9GCisJZ2l0IGNvbHVtbiAtLW1vZGU9Y29sdW1uIC0taW5kZW50PSIgICIgPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMjAgY29sdW1ucywgcm93IGZpcnN0JyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK29uZSAgICB0d28KK3RocmVlICBmb3VyCitmaXZlICAgc2l4CitzZXZlbiAgZWlnaHQKK25pbmUgICB0ZW4KK2VsZXZlbgorRU9GCisJZ2l0IGNvbHVtbiAtLW1vZGU9cm93IDxsaXN0YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIwIGNvbHVtbnMsIHJvdyBmaXJzdCwgbm9kZW5zZScgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitvbmUgICAgdHdvCit0aHJlZSAgZm91cgorZml2ZSAgIHNpeAorc2V2ZW4gIGVpZ2h0CituaW5lICAgdGVuCitlbGV2ZW4KK0VPRgorCWdpdCBjb2x1bW4gLS1tb2RlPXJvdyxub2RlbnNlIDxsaXN0YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIwIGNvbHVtbnMsIHJvdyBmaXJzdCwgZGVuc2UnICcKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorb25lICAgdHdvICAgIHRocmVlCitmb3VyICBmaXZlICAgc2l4CitzZXZlbiBlaWdodCAgbmluZQordGVuICAgZWxldmVuCitFT0YKKwlnaXQgY29sdW1uIC0tbW9kZT1yb3csZGVuc2UgPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDEwLXN2bi1mZS5zaCBiL3QvdDkwMTAtc3ZuLWZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3ZWVkMjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDEwLXN2bi1mZS5zaApAQCAtMCwwICsxLDExMTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBzdm4gZHVtcGZpbGUgaW1wb3J0ZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCityZWluaXRfZ2l0ICgpIHsKKwlpZiAhIHRlc3RfZGVjbGFyZWRfcHJlcmVxIFBJUEUKKwl0aGVuCisJCWVjaG8gPiY0ICJyZWluaXRfZ2l0OiBuZWVkIHRvIGRlY2xhcmUgUElQRSBwcmVyZXF1aXNpdGUiCisJCXJldHVybiAxMjcKKwlmaQorCXJtIC1mciAuZ2l0ICYmCisJcm0gLWYgc3RyZWFtIGJhY2tmbG93ICYmCisJZ2l0IGluaXQgJiYKKwlta2ZpZm8gc3RyZWFtIGJhY2tmbG93Cit9CisKK3RyeV9kdW1wICgpIHsKKwlpbnB1dD0kMSAmJgorCW1heWJlX2ZhaWxfc3ZuZmU9JHsyOit0ZXN0XyQyfSAmJgorCW1heWJlX2ZhaWxfZmk9JHszOit0ZXN0XyQzfSAmJgorCisJeworCQkkbWF5YmVfZmFpbF9zdm5mZSB0ZXN0LXN2bi1mZSAiJGlucHV0IiA+c3RyZWFtIDM8YmFja2Zsb3cgJgorCX0gJiYKKwkkbWF5YmVfZmFpbF9maSBnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD0zIDxzdHJlYW0gMz5iYWNrZmxvdyAmJgorCXdhaXQgJCEKK30KKworcHJvcGVydGllcyAoKSB7CisJd2hpbGUgdGVzdCAiJCMiIC1uZSAwCisJZG8KKwkJcHJvcGVydHk9IiQxIiAmJgorCQl2YWx1ZT0iJDIiICYmCisJCXByaW50ZiAiJXNcbiIgIksgJHsjcHJvcGVydHl9IiAmJgorCQlwcmludGYgIiVzXG4iICIkcHJvcGVydHkiICYmCisJCXByaW50ZiAiJXNcbiIgIlYgJHsjdmFsdWV9IiAmJgorCQlwcmludGYgIiVzXG4iICIkdmFsdWUiICYmCisJCXNoaWZ0IDIgfHwKKwkJcmV0dXJuIDEKKwlkb25lCit9CisKK3RleHRfbm9fcHJvcHMgKCkgeworCXRleHQ9IiQxCisiICYmCisJcHJpbnRmICIlc1xuIiAiUHJvcC1jb250ZW50LWxlbmd0aDogMTAiICYmCisJcHJpbnRmICIlc1xuIiAiVGV4dC1jb250ZW50LWxlbmd0aDogJHsjdGV4dH0iICYmCisJcHJpbnRmICIlc1xuIiAiQ29udGVudC1sZW5ndGg6ICQoKCR7I3RleHR9ICsgMTApKSIgJiYKKwlwcmludGYgIiVzXG4iICIiICJQUk9QUy1FTkQiICYmCisJcHJpbnRmICIlc1xuIiAiJHRleHQiCit9CisKKz5lbXB0eQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogaGF2ZSBwaXBlcz8nICcKKwlybSAtZiBmcm9iICYmCisJaWYgbWtmaWZvIGZyb2IKKwl0aGVuCisJCXRlc3Rfc2V0X3ByZXJlcSBQSVBFCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdlbXB0eSBkdW1wJyAnCisJcmVpbml0X2dpdCAmJgorCWVjaG8gIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyIiA+aW5wdXQgJiYKKwl0cnlfZHVtcCBpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ3Y0IGR1bXBzIG5vdCBzdXBwb3J0ZWQnICcKKwlyZWluaXRfZ2l0ICYmCisJZWNobyAiU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDQiID52NC5kdW1wICYmCisJdHJ5X2R1bXAgdjQuZHVtcCBtdXN0X2ZhaWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQSVBFICdlbXB0eSByZXZpc2lvbicgJworCXJlaW5pdF9naXQgJiYKKwlwcmludGYgInJldiA8bm9ib2R5LCBub2JvZHlAbG9jYWw+OiAlc1xuIiAiIiAiIiA+ZXhwZWN0ICYmCisJY2F0ID5lbXB0eXJldi5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMAorCUNvbnRlbnQtbGVuZ3RoOiAwCisKKwlSZXZpc2lvbi1udW1iZXI6IDIKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAwCisJQ29udGVudC1sZW5ndGg6IDAKKworCUVPRgorCXRyeV9kdW1wIGVtcHR5cmV2LmR1bXAgJiYKKwlnaXQgbG9nIC1wIC0tZm9ybWF0PSJyZXYgPCVhbiwgJWFlPjogJXMiIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdlbXB0eSBwcm9wZXJ0aWVzJyAnCisJcmVpbml0X2dpdCAmJgorCXByaW50ZiAicmV2IDxub2JvZHksIG5vYm9keUBsb2NhbD46ICVzXG4iICIiICIiID5leHBlY3QgJiYKKwljYXQgPmVtcHR5cHJvcC5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCUVPRgorCXRyeV9kdW1wIGVtcHR5cHJvcC5kdW1wICYmCisJZ2l0IGxvZyAtcCAtLWZvcm1hdD0icmV2IDwlYW4sICVhZT46ICVzIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnYXV0aG9yIG5hbWUgYW5kIGNvbW1pdCBtZXNzYWdlJyAnCisJcmVpbml0X2dpdCAmJgorCWVjaG8gIjxhdXRob3JAZXhhbXBsZS5jb20sIGF1dGhvckBleGFtcGxlLmNvbUBsb2NhbD4iID5leHBlY3QuYXV0aG9yICYmCisJY2F0ID5tZXNzYWdlIDw8LVxFT0YgJiYKKwlBIGNvbmNpc2Ugc3VtbWFyeSBvZiB0aGUgY2hhbmdlCisKKwlBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjaGFuZ2UsIHdoeSBpdCBpcyBuZWVkZWQsIHdoYXQKKwl3YXMgYnJva2VuIGFuZCB3aHkgYXBwbHlpbmcgdGhpcyBpcyB0aGUgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uLgorCisJKiBmaWxlLmMKKwkgICAgRGV0YWlscyBwZXJ0YWluaW5nIHRvIGFuIGluZGl2aWR1YWwgZmlsZS4KKwlFT0YKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmxvZyAiJChjYXQgbWVzc2FnZSkiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cHJvcHMgJiYKKwl7CisJCWVjaG8gIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzIiAmJgorCQllY2hvICYmCisJCWVjaG8gIlJldmlzaW9uLW51bWJlcjogMSIgJiYKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzCisJfSA+bG9nLmR1bXAgJiYKKwl0cnlfZHVtcCBsb2cuZHVtcCAmJgorCWdpdCBsb2cgLXAgLS1mb3JtYXQ9IiVCIiBIRUFEID5hY3R1YWwubG9nICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iPCVhbiwgJWFlPiIgPmFjdHVhbC5hdXRob3IgJiYKKwl0ZXN0X2NtcCBtZXNzYWdlIGFjdHVhbC5sb2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYXV0aG9yIGFjdHVhbC5hdXRob3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICd1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkJyAnCisJcmVpbml0X2dpdCAmJgorCWVjaG8gYXV0aG9yID5leHBlY3QgJiYKKwljYXQgPmV4dHJhcHJvcC5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogNTYKKwlDb250ZW50LWxlbmd0aDogNTYKKworCUsgOAorCW5vbnNlbnNlCisJViAxCisJeQorCUsgMTAKKwlzdm46YXV0aG9yCisJViA2CisJYXV0aG9yCisJUFJPUFMtRU5ECisJRU9GCisJdHJ5X2R1bXAgZXh0cmFwcm9wLmR1bXAgJiYKKwlnaXQgbG9nIC1wIC0tZm9ybWF0PSVhbiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUElQRSAndGltZXN0YW1wIGFuZCBlbXB0eSBmaWxlJyAnCisJZWNobyBhdXRob3JAZXhhbXBsZS5jb20gPmV4cGVjdC5hdXRob3IgJiYKKwllY2hvIDE5OTktMDEtMDEgPmV4cGVjdC5kYXRlICYmCisJZWNobyBmaWxlID5leHBlY3QuZmlsZXMgJiYKKwlyZWluaXRfZ2l0ICYmCisJeworCQlwcm9wZXJ0aWVzIFwKKwkJCXN2bjphdXRob3IgYXV0aG9yQGV4YW1wbGUuY29tIFwKKwkJCXN2bjpkYXRlICIxOTk5LTAxLTAxVDAwOjAxOjAwMi4wMDAwMDBaIiBcCisJCQlzdm46bG9nICJhZGQgZW1wdHkgZmlsZSIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9ID5wcm9wcyAmJgorCXsKKwkJY2F0IDw8LUVPRiAmJgorCQlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJCVJldmlzaW9uLW51bWJlcjogMQorCQlFT0YKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzICYmCisJCWNhdCA8PC1cRU9GCisKKwkJTm9kZS1wYXRoOiBlbXB0eS1maWxlCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCUNvbnRlbnQtbGVuZ3RoOiAwCisKKwkJRU9GCisJfSA+ZW1wdHlmaWxlLmR1bXAgJiYKKwl0cnlfZHVtcCBlbXB0eWZpbGUuZHVtcCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JWFuIEhFQUQgPmFjdHVhbC5hdXRob3IgJiYKKwlnaXQgbG9nIC0tZGF0ZT1zaG9ydCAtLWZvcm1hdD0lYWQgSEVBRCA+YWN0dWFsLmRhdGUgJiYKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEID5hY3R1YWwuZmlsZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYXV0aG9yIGFjdHVhbC5hdXRob3IgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGF0ZSBhY3R1YWwuZGF0ZSAmJgorCXRlc3RfY21wIGV4cGVjdC5maWxlcyBhY3R1YWwuZmlsZXMgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCBlbXB0eS1maWxlICYmCisJdGVzdF9jbXAgZW1wdHkgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ2RpcmVjdG9yeSB3aXRoIGZpbGVzJyAnCisJcmVpbml0X2dpdCAmJgorCXByaW50ZiAiJXNcbiIgZGlyZWN0b3J5L2ZpbGUxIGRpcmVjdG9yeS9maWxlMiA+ZXhwZWN0LmZpbGVzICYmCisJZWNobyBoaSA+aGkgJiYKKwllY2hvIGhlbGxvID5oZWxsbyAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGF1dGhvckBleGFtcGxlLmNvbSBcCisJCQlzdm46ZGF0ZSAiMTk5OS0wMi0wMVQwMDowMTowMDIuMDAwMDAwWiIgXAorCQkJc3ZuOmxvZyAiYWRkIGRpcmVjdG9yeSB3aXRoIHNvbWUgZmlsZXMgaW4gaXQiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cHJvcHMgJiYKKwl7CisJCWNhdCA8PC1FT0YgJiYKKwkJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCQlSZXZpc2lvbi1udW1iZXI6IDEKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcyAmJgorCQljYXQgPDwtXEVPRiAmJgorCisJCU5vZGUtcGF0aDogZGlyZWN0b3J5CisJCU5vZGUta2luZDogZGlyCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJQ29udGVudC1sZW5ndGg6IDEwCisKKwkJUFJPUFMtRU5ECisKKwkJTm9kZS1wYXRoOiBkaXJlY3RvcnkvZmlsZTEKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJRU9GCisJCXRleHRfbm9fcHJvcHMgaGVsbG8gJiYKKwkJY2F0IDw8LVxFT0YgJiYKKwkJTm9kZS1wYXRoOiBkaXJlY3RvcnkvZmlsZTIKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJRU9GCisJCXRleHRfbm9fcHJvcHMgaGkKKwl9ID5kaXJlY3RvcnkuZHVtcCAmJgorCXRyeV9kdW1wIGRpcmVjdG9yeS5kdW1wICYmCisKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEID5hY3R1YWwuZmlsZXMgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCBkaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZmlsZXMgYWN0dWFsLmZpbGVzICYmCisJdGVzdF9jbXAgaGVsbG8gZGlyZWN0b3J5L2ZpbGUxICYmCisJdGVzdF9jbXAgaGkgZGlyZWN0b3J5L2ZpbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnYnJhbmNoIG5hbWUgd2l0aCBiYWNrc2xhc2gnICcKKwlyZWluaXRfZ2l0ICYmCisJc29ydCA8PC1cRU9GID5leHBlY3QuYnJhbmNoLWZpbGVzICYmCisJdHJ1bmsvZmlsZTEKKwl0cnVuay9maWxlMgorCSJicmFuY2hlcy9VcGRhdGVGT1B0bzA5NFxcL2ZpbGUxIgorCSJicmFuY2hlcy9VcGRhdGVGT1B0bzA5NFxcL2ZpbGUyIgorCUVPRgorCisJZWNobyBoaSA+aGkgJiYKKwllY2hvIGhlbGxvID5oZWxsbyAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGF1dGhvckBleGFtcGxlLmNvbSBcCisJCQlzdm46ZGF0ZSAiMTk5OS0wMi0wMlQwMDowMTowMi4wMDAwMDBaIiBcCisJCQlzdm46bG9nICJhZGQgZGlyZWN0b3J5IHdpdGggc29tZSBmaWxlcyBpbiBpdCIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9ID5wcm9wcy5zZXR1cCAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGJyYW5jaGVyQGV4YW1wbGUuY29tIFwKKwkJCXN2bjpkYXRlICIyMDA3LTEyLTA2VDIxOjM4OjM0LjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgIlVwZGF0aW5nIGZvcCB0byAuOTQgYW5kIGFkanVzdCBmby1zdHlsZXNoZWV0cyIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9ID5wcm9wcy5icmFuY2ggJiYKKwl7CisJCWNhdCA8PC1FT0YgJiYKKwkJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCQlSZXZpc2lvbi1udW1iZXI6IDEKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMuc2V0dXApICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzLnNldHVwKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcy5zZXR1cCAmJgorCQljYXQgPDwtXEVPRiAmJgorCisJCU5vZGUtcGF0aDogdHJ1bmsKKwkJTm9kZS1raW5kOiBkaXIKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlDb250ZW50LWxlbmd0aDogMTAKKworCQlQUk9QUy1FTkQKKworCQlOb2RlLXBhdGg6IGJyYW5jaGVzCisJCU5vZGUta2luZDogZGlyCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJQ29udGVudC1sZW5ndGg6IDEwCisKKwkJUFJPUFMtRU5ECisKKwkJTm9kZS1wYXRoOiB0cnVuay9maWxlMQorCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlFT0YKKwkJdGV4dF9ub19wcm9wcyBoZWxsbyAmJgorCQljYXQgPDwtXEVPRiAmJgorCQlOb2RlLXBhdGg6IHRydW5rL2ZpbGUyCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCUVPRgorCQl0ZXh0X25vX3Byb3BzIGhpICYmCisJCWNhdCA8PC1cRU9GICYmCisKKwkJUmV2aXNpb24tbnVtYmVyOiAyCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzLmJyYW5jaCkgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMuYnJhbmNoKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcy5icmFuY2ggJiYKKwkJY2F0IDw8LVxFT0YKKworCQlOb2RlLXBhdGg6IGJyYW5jaGVzL1VwZGF0ZUZPUHRvMDk0XAorCQlOb2RlLWtpbmQ6IGRpcgorCQlOb2RlLWFjdGlvbjogYWRkCisJCU5vZGUtY29weWZyb20tcmV2OiAxCisJCU5vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCQlOb2RlLWtpbmQ6IGRpcgorCQlOb2RlLWFjdGlvbjogYWRkCisJCVByb3AtY29udGVudC1sZW5ndGg6IDM0CisJCUNvbnRlbnQtbGVuZ3RoOiAzNAorCisJCUsgMTMKKwkJc3ZuOm1lcmdlaW5mbworCQlWIDAKKworCQlQUk9QUy1FTkQKKwkJRU9GCisJfSA+YnJhbmNoLmR1bXAgJiYKKwl0cnlfZHVtcCBicmFuY2guZHVtcCAmJgorCisJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgSEVBRCB8CisJc29ydCA+YWN0dWFsLmJyYW5jaC1maWxlcyAmJgorCXRlc3RfY21wIGV4cGVjdC5icmFuY2gtZmlsZXMgYWN0dWFsLmJyYW5jaC1maWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ25vZGUgd2l0aG91dCBhY3Rpb24nICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5pbmFjdGlvbi5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBkaXJlY3RvcnkKKwlOb2RlLWtpbmQ6IGRpcgorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKwlFT0YKKwl0cnlfZHVtcCBpbmFjdGlvbi5kdW1wIG11c3RfZmFpbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ2FjdGlvbjogYWRkIG5vZGUgd2l0aG91dCB0ZXh0JyAnCisJcmVpbml0X2dpdCAmJgorCWNhdCA+dGV4dGxlc3MuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogdGV4dGxlc3MKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogYWRkCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCUVPRgorCXRyeV9kdW1wIHRleHRsZXNzLmR1bXAgbXVzdF9mYWlsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUElQRSAnY2hhbmdlIGZpbGUgbW9kZSBidXQga2VlcCBvbGQgY29udGVudCcgJworCXJlaW5pdF9naXQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTIwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBUCWdyZWV0aW5nCisJT0JKSUQKKwk6MTAwNjQ0IDEyMDAwMCBPQkpJRCBPQkpJRCBUCWdyZWV0aW5nCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWdyZWV0aW5nCisJRU9GCisJZWNobyAibGluayBoZWxsbyIgPmV4cGVjdC5ibG9iICYmCisJZWNobyBoZWxsbyA+aGVsbG8gJiYKKwljYXQgPmZpbGVtb2RlLmR1bXAgPDwtXEVPRiAmJgorCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwlSZXZpc2lvbi1udW1iZXI6IDEKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IGdyZWV0aW5nCisJTm9kZS1raW5kOiBmaWxlCisJTm9kZS1hY3Rpb246IGFkZAorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJVGV4dC1jb250ZW50LWxlbmd0aDogMTEKKwlDb250ZW50LWxlbmd0aDogMjEKKworCVBST1BTLUVORAorCWxpbmsgaGVsbG8KKworCVJldmlzaW9uLW51bWJlcjogMgorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1jb250ZW50LWxlbmd0aDogMzMKKwlDb250ZW50LWxlbmd0aDogMzMKKworCUsgMTEKKwlzdm46c3BlY2lhbAorCVYgMQorCSoKKwlQUk9QUy1FTkQKKworCVJldmlzaW9uLW51bWJlcjogMworCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCUVPRgorCXRyeV9kdW1wIGZpbGVtb2RlLmR1bXAgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kX3g0MC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUQ6Z3JlZXRpbmcgPmFjdHVhbC5ibG9iICYmCisJZ2l0IHNob3cgSEVBRF46Z3JlZXRpbmcgPmFjdHVhbC50YXJnZXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmJsb2IgYWN0dWFsLmJsb2IgJiYKKwl0ZXN0X2NtcCBoZWxsbyBhY3R1YWwudGFyZ2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnTlVMIGluIHByb3BlcnR5IHZhbHVlJyAnCisJcmVpbml0X2dpdCAmJgorCWVjaG8gImNvbW1pdCBtZXNzYWdlIiA+ZXhwZWN0Lm1lc3NhZ2UgJiYKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJdW5pbXBvcnRhbnQgInNvbWV0aGluZyB3aXRoIGEgTlVMIChRKSIgXAorCQkJc3ZuOmxvZyAiY29tbWl0IG1lc3NhZ2UiJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9IHwKKwlxX3RvX251bCA+cHJvcHMgJiYKKwl7CisJCWNhdCA8PC1cRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcHJvcHMKKwl9ID5udWxwcm9wLmR1bXAgJiYKKwl0cnlfZHVtcCBudWxwcm9wLmR1bXAgJiYKKwlnaXQgZGlmZi10cmVlIC0tYWx3YXlzIC1zIC0tZm9ybWF0PSVzIEhFQUQgPmFjdHVhbC5tZXNzYWdlICYmCisJdGVzdF9jbXAgZXhwZWN0Lm1lc3NhZ2UgYWN0dWFsLm1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdOVUwgaW4gbG9nIG1lc3NhZ2UsIGZpbGUgY29udGVudCwgYW5kIHByb3BlcnR5IG5hbWUnICcKKwkjIENhdmVhdDogc3ZuYWRtaW4gMS42LjE2IChyMTA3MzUyOSkgdHJ1bmNhdGVzIGF0IFwwIGluIHRoZQorCSMgc3ZuOnNwZWNpYWxRbm90cmVhbGx5IGV4YW1wbGUuCisJcmVpbml0X2dpdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZ3JlZXRpbmcKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZ3JlZXRpbmcKKwlFT0YKKwlwcmludGYgIlxuJXNcbiIgInNvbWV0aGluZyB3aXRoIGFuIEFTQ0lJIE5VTCAoUSkiID5leHBlY3QubWVzc2FnZSAmJgorCXByaW50ZiAiJXNcbiIgImhlbFFvIiA+ZXhwZWN0LmhlbGxvMSAmJgorCXByaW50ZiAiJXNcbiIgImxpbmsgaGVsbG8iID5leHBlY3QuaGVsbG8yICYmCisJeworCQlwcm9wZXJ0aWVzIHN2bjpsb2cgInNvbWV0aGluZyB3aXRoIGFuIEFTQ0lJIE5VTCAoUSkiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSB8CisJcV90b19udWwgPnByb3BzICYmCisJeworCQlxX3RvX251bCA8PC1cRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJVGV4dC1jb250ZW50LWxlbmd0aDogNgorCQlDb250ZW50LWxlbmd0aDogMTYKKworCQlQUk9QUy1FTkQKKwkJaGVsUW8KKworCQlSZXZpc2lvbi1udW1iZXI6IDIKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcyAmJgorCQlxX3RvX251bCA8PC1cRU9GCisKKwkJTm9kZS1wYXRoOiBncmVldGluZworCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGNoYW5nZQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiA0MworCQlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMQorCQlDb250ZW50LWxlbmd0aDogNTQKKworCQlLIDIxCisJCXN2bjpzcGVjaWFsUW5vdHJlYWxseQorCQlWIDEKKwkJKgorCQlQUk9QUy1FTkQKKwkJbGluayBoZWxsbworCQlFT0YKKwl9ID44Yml0Y2xlYW4uZHVtcCAmJgorCXRyeV9kdW1wIDhiaXRjbGVhbi5kdW1wICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJF94NDAvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwl7CisJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IG51bF90b19xICYmCisJCWVjaG8KKwl9IHwKKwlzZWQgLW5lICIvXlwkLyxcJCBwIiA+YWN0dWFsLm1lc3NhZ2UgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpncmVldGluZyB8IG51bF90b19xID5hY3R1YWwuaGVsbG8xICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDpncmVldGluZyB8IG51bF90b19xID5hY3R1YWwuaGVsbG8yICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tZXNzYWdlIGFjdHVhbC5tZXNzYWdlICYmCisJdGVzdF9jbXAgZXhwZWN0LmhlbGxvMSBhY3R1YWwuaGVsbG8xICYmCisJdGVzdF9jbXAgZXhwZWN0LmhlbGxvMiBhY3R1YWwuaGVsbG8yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnY2hhbmdlIGZpbGUgbW9kZSBhbmQgcmVpdGVyYXRlIGNvbnRlbnQnICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEyMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgVAlncmVldGluZworCU9CSklECisJOjEwMDY0NCAxMjAwMDAgT0JKSUQgT0JKSUQgVAlncmVldGluZworCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlncmVldGluZworCUVPRgorCWVjaG8gImxpbmsgaGVsbG8iID5leHBlY3QuYmxvYiAmJgorCWVjaG8gaGVsbG8gPmhlbGxvICYmCisJY2F0ID5maWxlbW9kZTIuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogYWRkCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMQorCUNvbnRlbnQtbGVuZ3RoOiAyMQorCisJUFJPUFMtRU5ECisJbGluayBoZWxsbworCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworCVRleHQtY29udGVudC1sZW5ndGg6IDExCisJQ29udGVudC1sZW5ndGg6IDQ0CisKKwlLIDExCisJc3ZuOnNwZWNpYWwKKwlWIDEKKwkqCisJUFJPUFMtRU5ECisJbGluayBoZWxsbworCisJUmV2aXNpb24tbnVtYmVyOiAzCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCVRleHQtY29udGVudC1sZW5ndGg6IDExCisJQ29udGVudC1sZW5ndGg6IDIxCisKKwlQUk9QUy1FTkQKKwlsaW5rIGhlbGxvCisJRU9GCisJdHJ5X2R1bXAgZmlsZW1vZGUyLmR1bXAgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kX3g0MC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUQ6Z3JlZXRpbmcgPmFjdHVhbC5ibG9iICYmCisJZ2l0IHNob3cgSEVBRF46Z3JlZXRpbmcgPmFjdHVhbC50YXJnZXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmJsb2IgYWN0dWFsLmJsb2IgJiYKKwl0ZXN0X2NtcCBoZWxsbyBhY3R1YWwudGFyZ2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnZGVsdGFzIHN1cHBvcnRlZCcgJworCXJlaW5pdF9naXQgJiYKKwl7CisJCSMgKG9sZCkgaCArIChpbmxpbmUpIGVsbG8gKyAob2xkKSBcbgorCQlwcmludGYgIlNWTlElYiViJXMiICJRXDAwM1wwMDZcMDA1XDAwNCIgIlwwMDFRXDAyMDRcMDAxXDAwMiIgImVsbG8iIHwKKwkJcV90b19udWwKKwl9ID5kZWx0YSAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGF1dGhvckBleGFtcGxlLmNvbSBcCisJCQlzdm46ZGF0ZSAiMTk5OS0wMS0wNVQwMDowMTowMDIuMDAwMDAwWiIgXAorCQkJc3ZuOmxvZyAiYWRkIGdyZWV0aW5nIiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzICYmCisJeworCQlwcm9wZXJ0aWVzIFwKKwkJCXN2bjphdXRob3IgYXV0aG9yQGV4YW1wbGUuY29tIFwKKwkJCXN2bjpkYXRlICIxOTk5LTAxLTA2VDAwOjAxOjAwMi4wMDAwMDBaIiBcCisJCQlzdm46bG9nICJjaGFuZ2UgaXQiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cHJvcHMyICYmCisJeworCQllY2hvIFNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzICYmCisJCWVjaG8gJiYKKwkJZWNobyBSZXZpc2lvbi1udW1iZXI6IDEgJiYKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzICYmCisJCWNhdCA8PC1cRU9GICYmCisKKwkJTm9kZS1wYXRoOiBoZWxsbworCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAzCisJCUNvbnRlbnQtbGVuZ3RoOiAxMworCisJCVBST1BTLUVORAorCQloaQorCisJCUVPRgorCQllY2hvIFJldmlzaW9uLW51bWJlcjogMiAmJgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzMikgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMyKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wczIgJiYKKwkJY2F0IDw8LVxFT0YgJiYKKworCQlOb2RlLXBhdGg6IGhlbGxvCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogY2hhbmdlCisJCVRleHQtZGVsdGE6IHRydWUKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJRU9GCisJCWVjaG8gVGV4dC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8ZGVsdGEpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQoKDEwICsgJCh3YyAtYyA8ZGVsdGEpKSkgJiYKKwkJZWNobyAmJgorCQllY2hvIFBST1BTLUVORCAmJgorCQljYXQgZGVsdGEKKwl9ID5kZWx0YS5kdW1wICYmCisJdHJ5X2R1bXAgZGVsdGEuZHVtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ3Byb3BlcnR5IGRlbHRhcyBzdXBwb3J0ZWQnICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEwMDc1NSAxMDA2NDQgT0JKSUQgT0JKSUQgTQlzY3JpcHQuc2gKKwlFT0YKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmRhdGUgIjE5OTktMDMtMDZUMDA6MDE6MDAyLjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgIm1ha2UgYW4gZXhlY3V0YWJsZSwgb3IgY2htb2QgLXggaXQiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cmV2cHJvcHMgJiYKKwl7CisJCWVjaG8gU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMgJiYKKwkJZWNobyAmJgorCQllY2hvIFJldmlzaW9uLW51bWJlcjogMSAmJgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHJldnByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxyZXZwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcmV2cHJvcHMgJiYKKwkJZWNobyAmJgorCQljYXQgPDwtXEVPRiAmJgorCQlOb2RlLXBhdGg6IHNjcmlwdC5zaAorCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCisJCVByb3AtY29udGVudC1sZW5ndGg6IDM5CisJCUNvbnRlbnQtbGVuZ3RoOiAzOQorCisJCUsgMTQKKwkJc3ZuOmV4ZWN1dGFibGUKKwkJViA0CisJCXRydWUKKwkJUFJPUFMtRU5ECisKKwkJRU9GCisJCWVjaG8gUmV2aXNpb24tbnVtYmVyOiAyICYmCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cmV2cHJvcHMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHJldnByb3BzKSAmJgorCQllY2hvICYmCisJCWNhdCByZXZwcm9wcyAmJgorCQllY2hvICYmCisJCWNhdCA8PC1cRU9GCisJCU5vZGUtcGF0aDogc2NyaXB0LnNoCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogY2hhbmdlCisJCVByb3AtZGVsdGE6IHRydWUKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMzAKKwkJQ29udGVudC1sZW5ndGg6IDMwCisKKwkJRCAxNAorCQlzdm46ZXhlY3V0YWJsZQorCQlQUk9QUy1FTkQKKwkJRU9GCisJfSA+cHJvcGRlbHRhLmR1bXAgJiYKKwl0cnlfZHVtcCBwcm9wZGVsdGEuZHVtcCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tc3RkaW4gfAorCQlzZWQgInMvJF94NDAvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAncHJvcGVydGllcyBvbiAvJyAnCisJcmVpbml0X2dpdCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlPQkpJRAorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlncmVldGluZworCUVPRgorCXNlZCAtZSAicy9YJC8vIiA8PC1cRU9GID5jaGFuZ2Vyb290LmR1bXAgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBhZGQKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBYCisJTm9kZS1raW5kOiBkaXIKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1kZWx0YTogdHJ1ZQorCVByb3AtY29udGVudC1sZW5ndGg6IDQzCisJQ29udGVudC1sZW5ndGg6IDQzCisKKwlLIDEwCisJc3ZuOmlnbm9yZQorCVYgMTEKKwlidWlsZC1hcmVhCisKKwlQUk9QUy1FTkQKKwlFT0YKKwl0cnlfZHVtcCBjaGFuZ2Vyb290LmR1bXAgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1hbHdheXMgLS1zdGRpbiB8CisJCXNlZCAicy8kX3g0MC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdkZWx0YXMgZm9yIHR5cGVjaGFuZ2UnICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEyMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgVAl0ZXN0LWZpbGUKKwlPQkpJRAorCToxMDA3NTUgMTIwMDAwIE9CSklEIE9CSklEIFQJdGVzdC1maWxlCisJT0JKSUQKKwk6MDAwMDAwIDEwMDc1NSBPQkpJRCBPQkpJRCBBCXRlc3QtZmlsZQorCUVPRgorCWNhdCA+ZGVsZXRlcHJvcC5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiB0ZXN0LWZpbGUKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogYWRkCisJUHJvcC1kZWx0YTogdHJ1ZQorCVByb3AtY29udGVudC1sZW5ndGg6IDM1CisJVGV4dC1jb250ZW50LWxlbmd0aDogMTcKKwlDb250ZW50LWxlbmd0aDogNTIKKworCUsgMTQKKwlzdm46ZXhlY3V0YWJsZQorCVYgMAorCisJUFJPUFMtRU5ECisJbGluayB0ZXN0aW5nIDEyMworCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiB0ZXN0LWZpbGUKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1kZWx0YTogdHJ1ZQorCVByb3AtY29udGVudC1sZW5ndGg6IDUzCisJVGV4dC1jb250ZW50LWxlbmd0aDogMTcKKwlDb250ZW50LWxlbmd0aDogNzAKKworCUsgMTEKKwlzdm46c3BlY2lhbAorCVYgMQorCSoKKwlEIDE0CisJc3ZuOmV4ZWN1dGFibGUKKwlQUk9QUy1FTkQKKwlsaW5rIHRlc3RpbmcgMjMxCisKKwlSZXZpc2lvbi1udW1iZXI6IDMKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IHRlc3QtZmlsZQorCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWRlbHRhOiB0cnVlCisJUHJvcC1jb250ZW50LWxlbmd0aDogMjcKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxNworCUNvbnRlbnQtbGVuZ3RoOiA0NAorCisJRCAxMQorCXN2bjpzcGVjaWFsCisJUFJPUFMtRU5ECisJbGluayB0ZXN0aW5nIDMyMQorCUVPRgorCXRyeV9kdW1wIGRlbGV0ZXByb3AuZHVtcCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRfeDQwL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ2RlbHRhcyBuZWVkIG5vdCBjb25zdW1lIHRoZSB3aG9sZSBwcmVpbWFnZScgJworCXJlaW5pdF9naXQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTIwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBUCXBvc3RpbWFnZQorCU9CSklECisJOjEwMDY0NCAxMjAwMDAgT0JKSUQgT0JKSUQgVAlwb3N0aW1hZ2UKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJcG9zdGltYWdlCisJRU9GCisJZWNobyAiZmlyc3QgcHJlaW1hZ2UiID5leHBlY3QuMSAmJgorCXByaW50ZiB0YXJnZXQgPmV4cGVjdC4yICYmCisJcHJpbnRmIGxuayA+ZXhwZWN0LjMgJiYKKwl7CisJCXByaW50ZiAiU1ZOUSViJWIlYiIgIlFRXDAxN1wwMDFcMDE3IiAiXDAyMTciICJmaXJzdCBwcmVpbWFnZVxuIiB8CisJCXFfdG9fbnVsCisJfSA+ZGVsdGEuMSAmJgorCXsKKwkJcHJvcGVydGllcyBzdm46c3BlY2lhbCAiKiIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9ID5zeW1saW5rLnByb3BzICYmCisJeworCQlwcmludGYgIlNWTlElYiViJWIiICJRXDAwMlwwMTNcMDA0XDAxMiIgIlwwMjAxXDAwMVwwMDFcMDIxMSIgImxuayB0YXJnZXQiIHwKKwkJcV90b19udWwKKwl9ID5kZWx0YS4yICYmCisJeworCQlwcmludGYgIlNWTlElYiViIiAiUVwwMDRcMDAzXDAwNFEiICJcMDAxUVwwMDJcMDAyIiB8CisJCXFfdG9fbnVsCisJfSA+ZGVsdGEuMyAmJgorCXsKKwkJY2F0IDw8LVxFT0YgJiYKKwkJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCQlSZXZpc2lvbi1udW1iZXI6IDEKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJQ29udGVudC1sZW5ndGg6IDEwCisKKwkJUFJPUFMtRU5ECisKKwkJTm9kZS1wYXRoOiBwb3N0aW1hZ2UKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJVGV4dC1kZWx0YTogdHJ1ZQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlFT0YKKwkJZWNobyBUZXh0LWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxkZWx0YS4xKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKCgxMCArICQod2MgLWMgPGRlbHRhLjEpKSkgJiYKKwkJZWNobyAmJgorCQllY2hvIFBST1BTLUVORCAmJgorCQljYXQgZGVsdGEuMSAmJgorCQljYXQgPDwtXEVPRiAmJgorCisJCVJldmlzaW9uLW51bWJlcjogMgorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlDb250ZW50LWxlbmd0aDogMTAKKworCQlQUk9QUy1FTkQKKworCQlOb2RlLXBhdGg6IHBvc3RpbWFnZQorCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGNoYW5nZQorCQlUZXh0LWRlbHRhOiB0cnVlCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHN5bWxpbmsucHJvcHMpICYmCisJCWVjaG8gVGV4dC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8ZGVsdGEuMikgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCgoJCh3YyAtYyA8c3ltbGluay5wcm9wcykgKyAkKHdjIC1jIDxkZWx0YS4yKSkpICYmCisJCWVjaG8gJiYKKwkJY2F0IHN5bWxpbmsucHJvcHMgJiYKKwkJY2F0IGRlbHRhLjIgJiYKKwkJY2F0IDw8LVxFT0YgJiYKKworCQlSZXZpc2lvbi1udW1iZXI6IDMKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJQ29udGVudC1sZW5ndGg6IDEwCisKKwkJUFJPUFMtRU5ECisKKwkJTm9kZS1wYXRoOiBwb3N0aW1hZ2UKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwkJVGV4dC1kZWx0YTogdHJ1ZQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlFT0YKKwkJZWNobyBUZXh0LWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxkZWx0YS4zKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKCgxMCArICQod2MgLWMgPGRlbHRhLjMpKSkgJiYKKwkJZWNobyAmJgorCQllY2hvIFBST1BTLUVORCAmJgorCQljYXQgZGVsdGEuMyAmJgorCQllY2hvCisJfSA+ZGVsdGFwYXJ0aWFsLmR1bXAgJiYKKwl0cnlfZHVtcCBkZWx0YXBhcnRpYWwuZHVtcCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRfeDQwL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUQ6cG9zdGltYWdlID5hY3R1YWwuMyAmJgorCWdpdCBzaG93IEhFQUReOnBvc3RpbWFnZSA+YWN0dWFsLjIgJiYKKwlnaXQgc2hvdyBIRUFEXl46cG9zdGltYWdlID5hY3R1YWwuMSAmJgorCXRlc3RfY21wIGV4cGVjdC4xIGFjdHVhbC4xICYmCisJdGVzdF9jbXAgZXhwZWN0LjIgYWN0dWFsLjIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuMyBhY3R1YWwuMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ25vIGhhbmcgZm9yIGRlbHRhIHRyeWluZyB0byByZWFkIHBhc3QgZW5kIG9mIHByZWltYWdlJyAnCisJcmVpbml0X2dpdCAmJgorCXsKKwkJIyBDT1BZIDEKKwkJcHJpbnRmICJTVk5RJWIlYiIgIlFcMDAxXDAwMVwwMDJRIiAiXDAwMVEiIHwKKwkJcV90b19udWwKKwl9ID5ncmVlZHkuZGVsdGEgJiYKKwl7CisJCWNhdCA8PC1cRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogYm9vdHN0cmFwCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCVRleHQtZGVsdGE6IHRydWUKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJRU9GCisJCWVjaG8gVGV4dC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8Z3JlZWR5LmRlbHRhKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKCgxMCArICQod2MgLWMgPGdyZWVkeS5kZWx0YSkpKSAmJgorCQllY2hvICYmCisJCWVjaG8gUFJPUFMtRU5EICYmCisJCWNhdCBncmVlZHkuZGVsdGEgJiYKKwkJZWNobworCX0gPmdyZWVkeWRlbHRhLmR1bXAgJiYKKwl0cnlfZHVtcCBncmVlZHlkZWx0YS5kdW1wIG11c3RfZmFpbCBtaWdodF9mYWlsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBzdm4gcmVwbycgJworCXN2bmNvbmY9JFBXRC9zdm5jb25mICYmCisJbWtkaXIgLXAgIiRzdm5jb25mIiAmJgorCisJaWYKKwkJc3ZuYWRtaW4gLWggPi9kZXYvbnVsbCAyPiYxICYmCisJCXN2bmFkbWluIGNyZWF0ZSBzaW1wbGUtc3ZuICYmCisJCXN2bmFkbWluIGxvYWQgc2ltcGxlLXN2biA8IiRURVNUX0RJUkVDVE9SWS90OTEzNS9zdm4uZHVtcCIgJiYKKwkJc3ZuIGV4cG9ydCAtLWNvbmZpZy1kaXIgIiRzdm5jb25mIiAiZmlsZTovLyRQV0Qvc2ltcGxlLXN2biIgc2ltcGxlLXN2bmNvCisJdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgU1ZOUkVQTworCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1ZOUkVQTyxQSVBFICd0OTEzNS9zdm4uZHVtcCcgJworCW1rZGlyIC1wIHNpbXBsZS1naXQgJiYKKwkoCisJCWNkIHNpbXBsZS1naXQgJiYKKwkJcmVpbml0X2dpdCAmJgorCQl0cnlfZHVtcCAiJFRFU1RfRElSRUNUT1JZL3Q5MTM1L3N2bi5kdW1wIgorCSkgJiYKKwkoCisJCWNkIHNpbXBsZS1zdm5jbyAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGZldGNoIC4uL3NpbXBsZS1naXQgbWFzdGVyICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEZFVENIX0hFQUQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTAxMS1zdm4tZGEuc2ggYi90L3Q5MDExLXN2bi1kYS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMzhkMTZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTAxMS1zdm4tZGEuc2gKQEAgLTAsMCArMSwyNDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHBhcnNpbmcgb2Ygc3ZuZGlmZjAgZmlsZXMKKworVXNpbmcgdGhlICJ0ZXN0LXN2bi1mZSAtZCIgaGVscGVyLCBjaGVjayB0aGF0IHN2bi1mZSBjb3JyZWN0bHkKK2ludGVycHJldHMgZGVsdGFzIHVzaW5nIHZhcmlvdXMgZmFjaWxpdGllcyAoc29tZSBmcm9tIHRoZSBzcGVjLAorc29tZSBvbmx5IGxlYXJuZWQgZnJvbSBwcmFjdGljZSkuCisnCisuIC4vdGVzdC1saWIuc2gKKworPmVtcHR5CitwcmludGYgZm9vID5wcmVpbWFnZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgZW1wdHkgZGVsdGEnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBlbXB0eSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbHRhIGNhbiBlbXB0eSBmaWxlJyAnCisJcHJpbnRmICJTVk5RIiB8IHFfdG9fbnVsID5jbGVhci5kZWx0YSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLmRlbHRhIDQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3Qgc3ZuZGlmZjInICcKKwlwcmludGYgIlNWTlwwMDIiID5iYWQuZmlsZXR5cGUgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBiYWQuZmlsZXR5cGUgNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmUtd2luZG93IGVtcHR5IGRlbHRhJyAnCisJcHJpbnRmICJTVk5RJXMiICJRUVFRUSIgfCBxX3RvX251bCA+Y2xlYXIub25ld2luZG93ICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIub25ld2luZG93IDkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgaW5jb21wbGV0ZSB3aW5kb3cgaGVhZGVyJyAnCisJcHJpbnRmICJTVk5RJXMiICJRUVFRUSIgfCBxX3RvX251bCA+Y2xlYXIub25ld2luZG93ICYmCisJcHJpbnRmICJTVk5RJXMiICJRUSIgfCBxX3RvX251bCA+Y2xlYXIucGFydGlhbHdpbmRvdyAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLm9uZXdpbmRvdyA2ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIucGFydGlhbHdpbmRvdyA2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCBkZWNsYXJlZCBkZWx0YSBsb25nZXIgdGhhbiBhY3R1YWwgZGVsdGEnICcKKwlwcmludGYgIlNWTlElcyIgIlFRUVFRIiB8IHFfdG9fbnVsID5jbGVhci5vbmV3aW5kb3cgJiYKKwlwcmludGYgIlNWTlElcyIgIlFRIiB8IHFfdG9fbnVsID5jbGVhci5wYXJ0aWFsd2luZG93ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIub25ld2luZG93IDE0ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIucGFydGlhbHdpbmRvdyA5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3by13aW5kb3cgZW1wdHkgZGVsdGEnICcKKwlwcmludGYgIlNWTlElcyVzIiAiUVFRUVEiICJRUVFRUSIgfCBxX3RvX251bCA+Y2xlYXIudHdvd2luZG93ICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIudHdvd2luZG93IDE0ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci50d293aW5kb3cgMTMgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9pc3kgemVyb2VzJyAnCisJcHJpbnRmICJTVk5RJXMiIFwKKwkJIlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUVFRUVEiIHwKKwkJdHIgUiAiXDIwMCIgfAorCQlxX3RvX251bCA+Y2xlYXIubm9pc3kgJiYKKwlsZW49JCh3YyAtYyA8Y2xlYXIubm9pc3kpICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIubm9pc3kgJGxlbiAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgdmFyaWFibGUtbGVuZ3RoIGludCBpbiBtYWdpYycgJworCXByaW50ZiAiU1ZOUlEiIHwgdHIgUiAiXDIwMCIgfCBxX3RvX251bCA+Y2xlYXIuYmFkbWFnaWMgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5iYWRtYWdpYyA1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCB0cnVuY2F0ZWQgaW50ZWdlcicgJworCXByaW50ZiAiU1ZOUSVzJXMiICJRUVFRUSIgIlFRUVFSUlEiIHwKKwkJdHIgUiAiXDIwMCIgfAorCQlxX3RvX251bCA+Y2xlYXIuZnVsbGludCAmJgorCXByaW50ZiAiU1ZOUSVzJXMiICJRUVFRUSIgIlFRUVFSUiIgfAorCQl0ciBSVCAiXDIwMSIgfAorCQlxX3RvX251bCA+Y2xlYXIucGFydGlhbGludCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLmZ1bGxpbnQgMTUgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5mdWxsaW50IDE2ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIucGFydGlhbGludCAxNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25lbXB0eSAoYnV0IHVudXNlZCkgcHJlaW1hZ2UgdmlldycgJworCXByaW50ZiAiU1ZOUSViIiAiUVwwMDNRUVEiIHwgcV90b19udWwgPmNsZWFyLnJlYWRwcmVpbWFnZSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLnJlYWRwcmVpbWFnZSA5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlaW1hZ2UgdmlldzogcmlnaHQgZW5kcG9pbnQgY2Fubm90IGJhY2t0cmFjaycgJworCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwM1FRUSIgIlFcMDAyUVFRIiB8CisJCXFfdG9fbnVsID5jbGVhci5iYWNrdHJhY2sgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5iYWNrdHJhY2sgMTQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlaW1hZ2UgdmlldzogbGVmdCBlbmRwb2ludCBjYW4gYWR2YW5jZScgJworCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwM1FRUSIgIlwwMDFcMDAyUVFRIiB8CisJCXFfdG9fbnVsID5jbGVhci5wcmVzaHJpbmsgJiYKKwlwcmludGYgIlNWTlElYiViIiAiUVwwMDNRUVEiICJcMDAxXDAwMVFRUSIgfAorCQlxX3RvX251bCA+Y2xlYXIuc2hyaW5rYmFja3RyYWNrICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIucHJlc2hyaW5rIDE0ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5zaHJpbmtiYWNrdHJhY2sgMTQgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlaW1hZ2Ugdmlldzogb2Zmc2V0cyBjb21wYXJlZCBieSB2YWx1ZScgJworCXByaW50ZiAiU1ZOUSViJWIiICJcMDAxXDAwMVFRUSIgIlwwMjAwUVwwMDNRUVEiIHwKKwkJcV90b19udWwgPmNsZWFyLm5vaXN5YmFja3RyYWNrICYmCisJcHJpbnRmICJTVk5RJWIlYiIgIlwwMDFcMDAxUVFRIiAiXDAyMDBcMDAxXDAwMlFRUSIgfAorCQlxX3RvX251bCA+Y2xlYXIubm9pc3lhZHZhbmNlICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIubm9pc3liYWNrdHJhY2sgMTUgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5ub2lzeWFkdmFuY2UgMTUgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlaW1hZ2UgdmlldzogcmVqZWN0IHRydW5jYXRlZCBwcmVpbWFnZScgJworCXByaW50ZiAiU1ZOUSViIiAiXDAxMFFRUVEiIHwgcV90b19udWwgPmNsZWFyLmxhdGVlbXB0eXJlYWQgJiYKKwlwcmludGYgIlNWTlElYiIgIlwwMTBcMDAxUVFRIiB8IHFfdG9fbnVsID5jbGVhci5sYXRlbm9uZW1wdHlyZWFkICYmCisJcHJpbnRmICJTVk5RJWIiICJcMDAxXDAxMFFRUSIgfCBxX3RvX251bCA+Y2xlYXIubG9uZ3JlYWQgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5sYXRlZW1wdHlyZWFkIDkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5sYXRlbm9uZW1wdHlyZWFkIDkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5sb25ncmVhZCA5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmJpZCB1bmNvbnN1bWVkIGlubGluZSBkYXRhJyAnCisJcHJpbnRmICJTVk5RJWIlcyViJXMiICJRUVFRXDAwMyIgImJhciIgIlFRUVFcMDAxIiAieCIgfAorCQlxX3RvX251bCA+aW5saW5lLmNsZWFyICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgaW5saW5lLmNsZWFyIDE4ID5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IHRydW5jYXRlZCBpbmxpbmUgZGF0YScgJworCXByaW50ZiAiU1ZOUSViJXMiICJRUVFRXDAwMyIgImIiIHwgcV90b19udWwgPmlubGluZS50cnVuYyAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGlubGluZS50cnVuYyAxMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgdHJ1bmNhdGVkIGlubGluZSBkYXRhIChhZnRlciBpbnN0cnVjdGlvbiBzZWN0aW9uKScgJworCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAwMVwwMDFcMDAzIiAiXDAyMDEiICJiIiB8IHFfdG9fbnVsID5pbnNuLnRydW5jICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgaW5zbi50cnVuYyAxMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5ZnJvbV9kYXRhJyAnCisJZWNobyBoaSA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiViIiAiUVFcMDAzXDAwMVwwMDMiICJcMDIwMyIgImhpXG4iIHwgcV90b19udWwgPmNvcHlkYXQgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5ZGF0IDEzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGNvcHlmcm9tX2RhdGEnICcKKwllY2hvIGhpID5leHBlY3QgJiYKKwlwcmludGYgIlNWTlElYiViJWIlYiViIiAiUVFcMDAzXDAwMlwwMDMiICJcMDIwMVwwMjAyIiAiaGlcbiIgXAorCQkiUVFRXDAwMlEiICJcMDIwMFEiIHwgcV90b19udWwgPmNvcHkubXVsdGkgJiYKKwlsZW49JCh3YyAtYyA8Y29weS5tdWx0aSkgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5Lm11bHRpICRsZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb21wbGV0ZSBtdWx0aXBsZSBpbnNuJyAnCisJcHJpbnRmICJTVk5RJWIlYiViIiAiUVFcMDAzXDAwMlwwMDMiICJcMDIwM1wwMjAwIiAiaGlcbiIgfAorCQlxX3RvX251bCA+Y29weS5wYXJ0aWFsICYmCisJbGVuPSQod2MgLWMgPGNvcHkucGFydGlhbCkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5LnBhcnRpYWwgJGxlbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXRjaCBhdHRlbXB0IHRvIGNvcHkgbWlzc2luZyBkYXRhJyAnCisJcHJpbnRmICJTVk5RJWIlYiVzJWIlcyIgIlFRXDAwMlwwMDJcMDAxIiAiXDAyMDFcMDIwMSIgIlgiIFwKKwkJCSJRUVFRXDAwMiIgIllaIiB8CisJCXFfdG9fbnVsID5jb3B5LmluY29tcGxldGUgJiYKKwlsZW49JCh3YyAtYyA8Y29weS5pbmNvbXBsZXRlKSAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHkuaW5jb21wbGV0ZSAkbGVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHlmcm9tIHRhcmdldCB0byByZXBlYXQgZGF0YScgJworCXByaW50ZiBmb29mb28gPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAwNlwwMDRcMDAzIiAiXDAyMDNcMDEwMFwwMDNRIiAiZm9vIiB8CisJCXFfdG9fbnVsID5jb3B5dGFyZ2V0LnJlcGVhdCAmJgorCWxlbj0kKHdjIC1jIDxjb3B5dGFyZ2V0LnJlcGVhdCkgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5dGFyZ2V0LnJlcGVhdCAkbGVuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHlmcm9tIHRhcmdldCBvdXQgb2Ygb3JkZXInICcKKwlwcmludGYgZm9vb29mID5leHBlY3QgJiYKKwlwcmludGYgIlNWTlElYiViJXMiIFwKKwkJIlFRXDAwNlwwMDdcMDAzIiAiXDAyMDNcMDEwMVwwMDJcMDEwMVwwMDFcMDEwMVEiICJmb28iIHwKKwkJcV90b19udWwgPmNvcHl0YXJnZXQucmV2ZXJzZSAmJgorCWxlbj0kKHdjIC1jIDxjb3B5dGFyZ2V0LnJldmVyc2UpICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5yZXZlcnNlICRsZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0Y2ggY29weWZyb20gZnV0dXJlJyAnCisJcHJpbnRmICJTVk5RJWIlYiVzIiAiUVFcMDA0XDAwNFwwMDMiICJcMDIwMlwwMTAxXDAwMlwwMjAxIiAiWFlaIiB8CisJCXFfdG9fbnVsID5jb3B5dGFyZ2V0LmluZnV0dXJlICYmCisJbGVuPSQod2MgLWMgPGNvcHl0YXJnZXQuaW5mdXR1cmUpICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5pbmZ1dHVyZSAkbGVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgdG8gc3VzdGFpbicgJworCXByaW50ZiBYWVhZWFlYWVhZWFogPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAxNFwwMDRcMDAzIiAiXDAyMDJcMDExMVFcMDIwMSIgIlhZWiIgfAorCQlxX3RvX251bCA+Y29weXRhcmdldC5zdXN0YWluICYmCisJbGVuPSQod2MgLWMgPGNvcHl0YXJnZXQuc3VzdGFpbikgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5dGFyZ2V0LnN1c3RhaW4gJGxlbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXRjaCBjb3B5IHRoYXQgb3ZlcmZsb3dzJyAnCisJcHJpbnRmICJTVk5RJWIlYiVzIiAiUVFcMDAzXDAwM1wwMDEiICJcMDIwMVwwMTc3USIgWCB8CisJCXFfdG9fbnVsID5jb3B5dGFyZ2V0Lm92ZXJmbG93ICYmCisJbGVuPSQod2MgLWMgPGNvcHl0YXJnZXQub3ZlcmZsb3cpICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5vdmVyZmxvdyAkbGVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHlmcm9tIHNvdXJjZScgJworCXByaW50ZiBmb28gPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwM1wwMDNcMDAyUSIgIlwwMDNRIiB8IHFfdG9fbnVsID5jb3B5c291cmNlLmFsbCAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHlzb3VyY2UuYWxsIDExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgYmFja3dhcmRzJyAnCisJcHJpbnRmIG9vZiA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiIgIlFcMDAzXDAwM1wwMDZRIiAiXDAwMVwwMDJcMDAxXDAwMVwwMDFRIiB8CisJCXFfdG9fbnVsID5jb3B5c291cmNlLnJldiAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHlzb3VyY2UucmV2IDE1ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29mZnNldHMgYXJlIHJlbGF0aXZlIHRvIHdpbmRvdycgJworCXByaW50ZiBmbyA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiViJWIiICJRXDAwM1wwMDFcMDAyUSIgIlwwMDFRIiBcCisJCSJcMDAyXDAwMVwwMDFcMDAyUSIgIlwwMDFRIiB8CisJCXFfdG9fbnVsID5jb3B5c291cmNlLnR3byAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHlzb3VyY2UudHdvIDE4ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4YW1wbGUgZnJvbSBub3Rlcy9zdm5kaWZmJyAnCisJcHJpbnRmIGFhYWFjY2NjZGRkZGRkZGQgPmV4cGVjdCAmJgorCXByaW50ZiBhYWFhYmJiYmNjY2MgPnNvdXJjZSAmJgorCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFcMDE0XDAyMFwwMDdcMDAxIiBcCisJCSJcMDA0UVwwMDRcMDEwXDAyMDFcMDEwN1wwMTAiIGQgfAorCQlxX3RvX251bCA+ZGVsdGEuZXhhbXBsZSAmJgorCWxlbj0kKHdjIC1jIDxkZWx0YS5leGFtcGxlKSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHNvdXJjZSBkZWx0YS5leGFtcGxlICRsZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2ggYi90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzQ5Yjc1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaApAQCAtMCwwICsxLDMxMCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBiYXNpYyB0ZXN0cycKK0dJVF9TVk5fTENfQUxMPSR7TENfQUxMOi0kTEFOR30KKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3NheSAnZGVmaW5lIE5PX1NWTl9URVNUUyB0byBza2lwIGdpdCBzdm4gdGVzdHMnCisKK2Nhc2UgIiRHSVRfU1ZOX0xDX0FMTCIgaW4KKyouVVRGLTgpCisJdGVzdF9zZXRfcHJlcmVxIFVURjgKKwk7OworKikKKwlzYXkgIiMgVVRGLTggbG9jYWxlIG5vdCBzZXQsIHNvbWUgdGVzdHMgc2tpcHBlZCAoJEdJVF9TVk5fTENfQUxMKSIKKwk7OworZXNhYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJZWNobyBmb28gPmZvbyAmJgorCQlsbiAtcyBmb28gZm9vLmxpbmsKKwkJbWtkaXIgLXAgZGlyL2EvYi9jL2QvZSAmJgorCQllY2hvICJkZWVwIGRpciIgPmRpci9hL2IvYy9kL2UvZmlsZSAmJgorCQlta2RpciBiYXIgJiYKKwkJZWNobyAienp6IiA+YmFyL3p6eiAmJgorCQllY2hvICIjIS9iaW4vc2giID5leGVjLnNoICYmCisJCWNobW9kICt4IGV4ZWMuc2ggJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKKwkpICYmCisJcm0gLXJmIGltcG9ydCAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnaW1wb3J0IGFuIFNWTiByZXZpc2lvbiBpbnRvIGdpdCcgXAorICAgICdnaXQgc3ZuIGZldGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCBmcm9tIHN2biIgJ3N2biBjbyAiJHN2bnJlcG8iICIkU1ZOX1RSRUUiJworCituYW1lPSd0cnkgYSBkZWVwIC0tcm1kaXIgd2l0aCBhIGNvbW1pdCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoICR7cmVtb3Rlc19naXRfc3ZufSAmJgorCW12IGRpci9hL2IvYy9kL2UvZmlsZSBkaXIvZmlsZSAmJgorCWNwIGRpci9maWxlIGZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGRpci9hL2IvYy9kL2UvZmlsZSBkaXIvZmlsZSBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaCAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC1kICIkU1ZOX1RSRUUiL2RpciAmJiB0ZXN0ICEgLWQgIiRTVk5fVFJFRSIvZGlyL2EnCisKKworbmFtZT0nZGV0ZWN0IG5vZGUgY2hhbmdlIGZyb20gZmlsZSB0byBkaXJlY3RvcnkgIzEnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgorCW1rZGlyIGRpci9uZXdfZmlsZSAmJgorCW12IGRpci9maWxlIGRpci9uZXdfZmlsZS9maWxlICYmCisJbXYgZGlyL25ld19maWxlIGRpci9maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBkaXIvZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZGlyL2ZpbGUvZmlsZSAmJgorCWdpdCBjb21taXQgLW0gJyRuYW1lJyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCSR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2gKKyIKKworCituYW1lPSdkZXRlY3Qgbm9kZSBjaGFuZ2UgZnJvbSBkaXJlY3RvcnkgdG8gZmlsZSAjMScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJcm0gLXJmIGRpciAiJEdJVF9ESVIiL2luZGV4ICYmCisJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoMiAke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwltdiBiYXIvenp6IHp6eiAmJgorCXJtIC1yZiBiYXIgJiYKKwltdiB6enogYmFyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAtLSBiYXIvenp6ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLSBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAorCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoMgorJworCisKK25hbWU9J2RldGVjdCBub2RlIGNoYW5nZSBmcm9tIGZpbGUgdG8gZGlyZWN0b3J5ICMyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlybSAtZiAiJEdJVF9ESVIiL2luZGV4ICYmCisJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoMyAke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwlybSBiYXIvenp6ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBiYXIvenp6ICYmCisJbWtkaXIgYmFyL3p6eiAmJgorCWVjaG8geXl5ID4gYmFyL3p6ei95eXkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJhci96enoveXl5ICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDMgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAtZCAiJFNWTl9UUkVFIi9iYXIvenp6ICYmCisJdGVzdCAtZSAiJFNWTl9UUkVFIi9iYXIvenp6L3l5eQorJworCituYW1lPSdkZXRlY3Qgbm9kZSBjaGFuZ2UgZnJvbSBkaXJlY3RvcnkgdG8gZmlsZSAjMicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJcm0gLWYgIiRHSVRfRElSIi9pbmRleCAmJgorCWdpdCBjaGVja291dCAtZiAtYiBteWJyYW5jaDQgJHtyZW1vdGVzX2dpdF9zdm59ICYmCisJcm0gLXJmIGRpciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS0gZGlyL2ZpbGUgJiYKKwl0b3VjaCBkaXIgJiYKKwllY2hvIGFzZGYgPiBkaXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIGRpciAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCSR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2g0CisnCisKKworbmFtZT0ncmVtb3ZlIGV4ZWN1dGFibGUgYml0IGZyb20gYSBmaWxlJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlybSAtZiAiJEdJVF9ESVIiL2luZGV4ICYmCisJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoNSAke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwljaG1vZCAteCBleGVjLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDUgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAhIC14ICIkU1ZOX1RSRUUiL2V4ZWMuc2gnCisKKworbmFtZT0nYWRkIGV4ZWN1dGFibGUgYml0IGJhY2sgZmlsZScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJY2htb2QgK3ggZXhlYy5zaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggZXhlYy5zaCAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgorCWdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCSR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2g1ICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLXggIiRTVk5fVFJFRSIvZXhlYy5zaCcKKworCituYW1lPSdleGVjdXRhYmxlIGZpbGUgYmVjb21lcyBhIHN5bWxpbmsgdG8gZmlsZScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJcm0gZXhlYy5zaCAmJgorCWxuIC1zIGZpbGUgZXhlYy5zaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggZXhlYy5zaCAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgorCWdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCSR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2g1ICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLWggIiRTVk5fVFJFRSIvZXhlYy5zaCcKKworbmFtZT0nbmV3IHN5bWxpbmsgaXMgYWRkZWQgdG8gYSBmaWxlIHRoYXQgd2FzIGFsc28ganVzdCBtYWRlIGV4ZWN1dGFibGUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJY2htb2QgK3ggZmlsZSAmJgorCWxuIC1zIGZpbGUgZXhlYy0yLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlIGV4ZWMtMi5zaCAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgorCWdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCSR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2g1ICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLXggIiRTVk5fVFJFRSIvZmlsZSAmJgorCXRlc3QgLWggIiRTVk5fVFJFRSIvZXhlYy0yLnNoJworCituYW1lPSdtb2RpZnkgYSBzeW1saW5rIHRvIGJlY29tZSBhIGZpbGUnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJworCWVjaG8gZ2l0IGhlbHAgPmhlbHAgJiYKKwlybSBleGVjLTIuc2ggJiYKKwljcCBoZWxwIGV4ZWMtMi5zaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggZXhlYy0yLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDUgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAtZiAiJFNWTl9UUkVFIi9leGVjLTIuc2ggJiYKKwl0ZXN0ICEgLWggIiRTVk5fVFJFRSIvZXhlYy0yLnNoICYmCisJdGVzdF9jbXAgaGVscCAiJFNWTl9UUkVFIi9leGVjLTIuc2gnCisKK25hbWU9ImNvbW1pdCB3aXRoIFVURi04IG1lc3NhZ2U6IGxvY2FsZTogJEdJVF9TVk5fTENfQUxMIgorTENfQUxMPSIkR0lUX1NWTl9MQ19BTEwiCitleHBvcnQgTENfQUxMCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFVURjggIiRuYW1lIiAiCisJZWNobyAnIyBoZWxsbycgPj4gZXhlYy0yLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLTIuc2ggJiYKKwlnaXQgY29tbWl0IC1tICfDqcOv4oiPJyAmJgorCWdpdCBzdm4gc2V0LXRyZWUgSEVBRCIKK3Vuc2V0IExDX0FMTAorCituYW1lPSd0ZXN0IGZldGNoIGZ1bmN0aW9uYWxpdHkgKHN2biA9PiBnaXQpIHdpdGggYWx0ZXJuYXRlIEdJVF9TVk5fSUQnCitHSVRfU1ZOX0lEPWFsdAorZXhwb3J0IEdJVF9TVk5fSUQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiBcCisgICAgJ2dpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmIGdpdCBzdm4gZmV0Y2ggJiYKKyAgICAgZ2l0IHJldi1saXN0IC0tcHJldHR5PXJhdyAke3JlbW90ZXNfZ2l0X3N2bn0gfCBncmVwIF50cmVlIHwgdW5pcSA+IGEgJiYKKyAgICAgZ2l0IHJldi1saXN0IC0tcHJldHR5PXJhdyByZW1vdGVzL2FsdCB8IGdyZXAgXnRyZWUgfCB1bmlxID4gYiAmJgorICAgICB0ZXN0X2NtcCBhIGInCisKK25hbWU9J2NoZWNrIGltcG9ydGVkIHRyZWUgY2hlY2tzdW1zIGV4cGVjdGVkIHRyZWUgY2hlY2tzdW1zJworcm0gLWYgZXhwZWN0ZWQKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgVVRGOAordGhlbgorCWVjaG8gdHJlZSBkYzY4YjE0YjczM2U0ZWM4NWIwNGFiNmY3MTIzNDBlZGM1ZGM5MzZlID4gZXhwZWN0ZWQKK2ZpCitjYXQgPj4gZXhwZWN0ZWQgPDxcRU9GCit0cmVlIGMzMzIyODkwZGNmNzQ5MDFmMzJkMjE2ZjA1YzUwNDRmNjcwY2U2MzIKK3RyZWUgZDNjY2Q1MDM1ZmVhZmQxN2IwMzBjNTczMmU3ODA4Y2M0OTEyMjg1MwordHJlZSBkMDNlMTYzMDM2M2Q0ODgxZTY4OTI5ZDUzMjc0NmIyMGIwOTg2YjgzCit0cmVlIDE0OWQ2M2NkNTg3ODE1NWM4NDZlOGM1NWQ3ZDg0ODdkZTI4M2Y4OWUKK3RyZWUgMzEyYjc2ZTRmNjRjZTE0ODkzYWVhYzg1OTFlYjM5NjBiMDY1ZTI0NwordHJlZSAxNDlkNjNjZDU4NzgxNTVjODQ2ZThjNTVkN2Q4NDg3ZGUyODNmODllCit0cmVlIGQ2NjcyNzBhMWY3YjEwOWY1ZWIzYWFlYTIxZWRlMTRiNTZiZmRkNmUKK3RyZWUgOGY1MWY3NGNmMDE2M2FmYzlhZDY4YTRiMTUzNzI4OGM0NTU4YjVhNAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAidGVzdF9jbXAgYSBleHBlY3RlZCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpdCBpZiByZW1vdGUgcmVmcyBhcmUgYW1iaWdpb3VzJyAiCisgICAgICAgIGdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyOnJlZnMvJHtyZW1vdGVzX2dpdF9zdm59ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBtaWdyYXRlCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXQgaWYgaW5pdC1pbmcgYSB3b3VsZCBjbG9iYmVyIGEgVVJMJyAnCisgICAgICAgIHN2bmFkbWluIGNyZWF0ZSAiJHtQV0R9L3N2bnJlcG8yIiAmJgorICAgICAgICBzdm4gbWtkaXIgLW0gIm1rZGlyIGJhciIgIiR7c3ZucmVwb30yL2JhciIgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5iYXI6cmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0kIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5pdCAiJHtzdm5yZXBvfTIvYmFyIgorICAgICAgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAnaW5pdCBhbGxvd3MgdXMgdG8gY29ubmVjdCB0byBhbm90aGVyIGRpcmVjdG9yeSBpbiB0aGUgc2FtZSByZXBvJyAnCisgICAgICAgIGdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBiYXIgIiRzdm5yZXBvL2JhciIgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXmJhcjpyZWZzL3JlbW90ZXMvYmFyJCIgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjpyZWZzLyR7cmVtb3Rlc19naXRfc3ZufSQiCisgICAgICAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCAkcmV2IGRvZXMgbm90IGNsb2JiZXIgY3VycmVudCBicmFuY2gnICcKKwlnaXQgc3ZuIGZldGNoIC1pIGJhciAmJgorCWdpdCBjaGVja291dCAtYiBteS1iYXIgcmVmcy9yZW1vdGVzL2JhciAmJgorCWVjaG8gMSA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlIDEiICYmCisJZWNobyAyID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2UgMiIgJiYKKwlvbGRfaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3ZuIGRjb21taXQgLWkgYmFyIEhFQUReICYmCisJdGVzdCAkb2xkX2hlYWQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbXktYmFyID0gJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpICYmCisJZ2l0IGxvZyByZWZzL3JlbW90ZXMvYmFyIHwgZ3JlcCAiY2hhbmdlIDEiICYmCisJISBnaXQgbG9nIHJlZnMvcmVtb3Rlcy9iYXIgfCBncmVwICJjaGFuZ2UgMiIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBteS1iYXIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FibGUgdG8gZGNvbW1pdCB0byBhIHN1YmRpcmVjdG9yeScgIgorCWdpdCBzdm4gZmV0Y2ggLWkgYmFyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG15LWJhciByZWZzL3JlbW90ZXMvYmFyICYmCisJZWNobyBhYmMgPiBkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBkICYmCisJZ2l0IGNvbW1pdCAtbSAnL2Jhci9kIHNob3VsZCBiZSBpbiB0aGUgbG9nJyAmJgorCWdpdCBzdm4gZGNvbW1pdCAtaSBiYXIgJiYKKwl0ZXN0IC16IFwiXGBnaXQgZGlmZiByZWZzL2hlYWRzL215LWJhciByZWZzL3JlbW90ZXMvYmFyXGBcIiAmJgorCW1rZGlyIG5ld2RpciAmJgorCWVjaG8gbmV3ID4gbmV3ZGlyL2RpciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbmV3ZGlyL2RpciAmJgorCWdpdCBjb21taXQgLW0gJ2FkZCBhIG5ldyBkaXJlY3RvcnknICYmCisJZ2l0IHN2biBkY29tbWl0IC1pIGJhciAmJgorCXRlc3QgLXogXCJcYGdpdCBkaWZmIHJlZnMvaGVhZHMvbXktYmFyIHJlZnMvcmVtb3Rlcy9iYXJcYFwiICYmCisJZWNobyBmb28gPj4gbmV3ZGlyL2RpciAmJgorCWdpdCB1cGRhdGUtaW5kZXggbmV3ZGlyL2RpciAmJgorCWdpdCBjb21taXQgLW0gJ21vZGlmeSBhIGZpbGUgaW4gbmV3IGRpcmVjdG9yeScgJiYKKwlnaXQgc3ZuIGRjb21taXQgLWkgYmFyICYmCisJdGVzdCAteiBcIlxgZ2l0IGRpZmYgcmVmcy9oZWFkcy9teS1iYXIgcmVmcy9yZW1vdGVzL2JhclxgXCIKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgc2hvdWxkIG5vdCBmYWlsIHdpdGggYSB0b3VjaGVkIGZpbGUnICcKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLWZvbzIiIGZvbzIgJiYKKwl0ZXN0LWNobXRpbWUgPS02MCBmb28gJiYKKwlnaXQgc3ZuIGRjb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHNob3VsZCBub3QgZmFpbCB3aXRoIGEgdG91Y2hlZCBmaWxlJyAnCisJdGVzdC1jaG10aW1lID0tNjAgZm9vICYmCisJZ2l0IHN2biByZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJsZSB0byBzZXQtdHJlZSB0byBhIHN1YmRpcmVjdG9yeScgIgorCWVjaG8gY2JhID4gZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggZCAmJgorCWdpdCBjb21taXQgLW0gJ3VwZGF0ZSAvYmFyL2QnICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtaSBiYXIgSEVBRCAmJgorCXRlc3QgLXogXCJcYGdpdCBkaWZmIHJlZnMvaGVhZHMvbXktYmFyIHJlZnMvcmVtb3Rlcy9iYXJcYFwiCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtc3ZuIHdvcmtzIGluIGEgYmFyZSByZXBvc2l0b3J5JyAnCisJbWtkaXIgYmFyZS1yZXBvICYmCisJKCBjZCBiYXJlLXJlcG8gJiYKKwlnaXQgaW5pdCAtLWJhcmUgJiYKKwlHSVRfRElSPS4gZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICkgJiYKKwlybSAtcmYgYmFyZS1yZXBvCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDEtZ2l0LXN2bi1wcm9wcy5zaCBiL3QvdDkxMDEtZ2l0LXN2bi1wcm9wcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ODY5ZjUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoCkBAIC0wLDAgKzEsMjI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHByb3BlcnR5IHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK21rZGlyIGltcG9ydAorCithX2NybGY9CithX2xmPQorYV9jcj0KK2FfbmVfY3JsZj0KK2FfbmVfbGY9CithX25lX2NyPQorYV9lbXB0eT0KK2FfZW1wdHlfbGY9CithX2VtcHR5X2NyPQorYV9lbXB0eV9jcmxmPQorCitjZCBpbXBvcnQKKwljYXQgPj4ga3cuYyA8PFxFT0YKKy8qIFNvbWVib2R5IHByZW1hdHVyZWx5IHB1dCBhIGtleXdvcmQgaW50byB0aGlzIGZpbGUgKi8KKy8qICRJZCQgKi8KK0VPRgorCisJcHJpbnRmICJIZWxsb1xyXG5Xb3JsZFxyXG4iID4gY3JsZgorCWFfY3JsZj1gZ2l0IGhhc2gtb2JqZWN0IC13IGNybGZgCisJcHJpbnRmICJIZWxsb1xyV29ybGRcciIgPiBjcgorCWFfY3I9YGdpdCBoYXNoLW9iamVjdCAtdyBjcmAKKwlwcmludGYgIkhlbGxvXG5Xb3JsZFxuIiA+IGxmCisJYV9sZj1gZ2l0IGhhc2gtb2JqZWN0IC13IGxmYAorCisJcHJpbnRmICJIZWxsb1xyXG5Xb3JsZCIgPiBuZV9jcmxmCisJYV9uZV9jcmxmPWBnaXQgaGFzaC1vYmplY3QgLXcgbmVfY3JsZmAKKwlwcmludGYgIkhlbGxvXG5Xb3JsZCIgPiBuZV9sZgorCWFfbmVfbGY9YGdpdCBoYXNoLW9iamVjdCAtdyBuZV9sZmAKKwlwcmludGYgIkhlbGxvXHJXb3JsZCIgPiBuZV9jcgorCWFfbmVfY3I9YGdpdCBoYXNoLW9iamVjdCAtdyBuZV9jcmAKKworCXRvdWNoIGVtcHR5CisJYV9lbXB0eT1gZ2l0IGhhc2gtb2JqZWN0IC13IGVtcHR5YAorCXByaW50ZiAiXG4iID4gZW1wdHlfbGYKKwlhX2VtcHR5X2xmPWBnaXQgaGFzaC1vYmplY3QgLXcgZW1wdHlfbGZgCisJcHJpbnRmICJcciIgPiBlbXB0eV9jcgorCWFfZW1wdHlfY3I9YGdpdCBoYXNoLW9iamVjdCAtdyBlbXB0eV9jcmAKKwlwcmludGYgIlxyXG4iID4gZW1wdHlfY3JsZgorCWFfZW1wdHlfY3JsZj1gZ2l0IGhhc2gtb2JqZWN0IC13IGVtcHR5X2NybGZgCisKKwlzdm5fY21kIGltcG9ydCAtLW5vLWF1dG8tcHJvcHMgLW0gJ2ltcG9ydCBmb3IgZ2l0IHN2bicgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKK2NkIC4uCisKK3JtIC1yZiBpbXBvcnQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdvcmtpbmcgY29weSBmcm9tIHN2bicgJ3N2biBjbyAiJHN2bnJlcG8iIHRlc3Rfd2MnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzb21lIGNvbW1pdHMgdG8gc3ZuJyAnCisJKAorCQljZCB0ZXN0X3djICYmCisJCWVjaG8gR3JlZXRpbmdzID4+IGt3LmMgJiYKKwkJcG9rZSBrdy5jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJOb3QgeWV0IGFuIElkIiAmJgorCQllY2hvIEhlbGxvIHdvcmxkID4+IGt3LmMgJiYKKwkJcG9rZSBrdy5jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJNb2RpZmllZCBmaWxlLCBidXQgc3RpbGwgbm90IHlldCBhbiBJZCIgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjprZXl3b3JkcyBJZCBrdy5jICYmCisJCXBva2Uga3cuYyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiUHJvcHNldCBJZCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgZ2l0IHN2bicgJ2dpdCBzdm4gaW5pdCAiJHN2bnJlcG8iJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcmV2aXNpb25zIGZyb20gc3ZuJyAnZ2l0IHN2biBmZXRjaCcKKworbmFtZT0ndGVzdCBzdm46a2V5d29yZHMgaWdub3JpbmcnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgXAorCSdnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2ggJHtyZW1vdGVzX2dpdF9zdm59ICYmCisJZWNobyBIaSBhZ2FpbiA+PiBrdy5jICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidGVzdCBrZXl3b3JkcyBpZ25vcmluZyIgJiYKKwlnaXQgc3ZuIHNldC10cmVlICR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2ggJiYKKwlnaXQgcHVsbCAuICR7cmVtb3Rlc19naXRfc3ZufScKKworZXhwZWN0PScvKiAkSWQkICovJworZ290PSJgc2VkIC1uZSAycCBrdy5jYCIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhdyAkSWQkIGZvdW5kIGluIGt3LmMnICJ0ZXN0ICckZXhwZWN0JyA9ICckZ290JyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicHJvcHNldCBDUiBvbiBjcmxmIGZpbGVzIiAnCisJKAorCQljZCB0ZXN0X3djICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIGVtcHR5ICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIGNybGYgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1IgbmVfY3JsZiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAicHJvcHNldCBDUiBvbiBjcmxmIGZpbGVzIgorCSApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGFuZCBwdWxsIGxhdGVzdCBmcm9tIHN2biBhbmQgY2hlY2tvdXQgYSBuZXcgd2MnIFwKKwknZ2l0IHN2biBmZXRjaCAmJgorCSBnaXQgcHVsbCAuICR7cmVtb3Rlc19naXRfc3ZufSAmJgorCSBzdm5fY21kIGNvICIkc3ZucmVwbyIgbmV3X3djJworCitmb3IgaSBpbiBjcmxmIG5lX2NybGYgbGYgbmVfbGYgY3IgbmVfY3IgZW1wdHlfY3IgZW1wdHlfbGYgZW1wdHkgZW1wdHlfY3JsZgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJDb21wYXJpbmcgJGkiICJjbXAgJGkgbmV3X3djLyRpIgorZG9uZQorCisKK2NkIHRlc3Rfd2MKKwlwcmludGYgJyRJZCRcckhlbGxvXHJXb3JsZFxyJyA+IGNyCisJcHJpbnRmICckSWQkXHJIZWxsb1xyV29ybGQnID4gbmVfY3IKKwlhX2NyPWBwcmludGYgJyRJZCRcclxuSGVsbG9cclxuV29ybGRcclxuJyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluYAorCWFfbmVfY3I9YHByaW50ZiAnJElkJFxyXG5IZWxsb1xyXG5Xb3JsZCcgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbmAKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXQgQ1JMRiBvbiBjciBmaWxlcycgXAorCSdzdm5fY21kIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUkxGIGNyICYmCisJIHN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSTEYgbmVfY3IgJiYKKwkgc3ZuX2NtZCBwcm9wc2V0IHN2bjprZXl3b3JkcyBJZCBjciAmJgorCSBzdm5fY21kIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIG5lX2NyICYmCisJIHN2bl9jbWQgY29tbWl0IC1tICJwcm9wc2V0IENSTEYgb24gY3IgZmlsZXMiJworY2QgLi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGFuZCBwdWxsIGxhdGVzdCBmcm9tIHN2bicgXAorCSdnaXQgc3ZuIGZldGNoICYmIGdpdCBwdWxsIC4gJHtyZW1vdGVzX2dpdF9zdm59JworCitiX2NyPSJgZ2l0IGhhc2gtb2JqZWN0IGNyYCIKK2JfbmVfY3I9ImBnaXQgaGFzaC1vYmplY3QgbmVfY3JgIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDUkxGICsgJElkJCcgInRlc3QgJyRhX2NyJyA9ICckYl9jciciCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDUkxGICsgJElkJCAobm8gbmV3bGluZSknICJ0ZXN0ICckYV9uZV9jcicgPSAnJGJfbmVfY3InIgorCitjYXQgPiBzaG93LWlnbm9yZS5leHBlY3QgPDxcRU9GCisKKyMgLworL25vLXN1Y2gtZmlsZSoKKworIyAvZGVlcGx5LworL2RlZXBseS9uby1zdWNoLWZpbGUqCisKKyMgL2RlZXBseS9uZXN0ZWQvCisvZGVlcGx5L25lc3RlZC9uby1zdWNoLWZpbGUqCisKKyMgL2RlZXBseS9uZXN0ZWQvZGlyZWN0b3J5LworL2RlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L25vLXN1Y2gtZmlsZSoKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNob3ctaWdub3JlJyAiCisJKAorCQljZCB0ZXN0X3djICYmCisJCW1rZGlyIC1wIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5ICYmCisJCXRvdWNoIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5Ly5rZWVwICYmCisJCXN2bl9jbWQgYWRkIGRlZXBseSAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgcHJvcHNldCAtUiBzdm46aWdub3JlICcKK25vLXN1Y2gtZmlsZSoKKycgLgorCQlzdm5fY21kIGNvbW1pdCAtbSAncHJvcHNldCBzdm46aWdub3JlJworCSkgJiYKKwlnaXQgc3ZuIHNob3ctaWdub3JlID4gc2hvdy1pZ25vcmUuZ290ICYmCisJY21wIHNob3ctaWdub3JlLmV4cGVjdCBzaG93LWlnbm9yZS5nb3QKKyIKKworY2F0ID5jcmVhdGUtaWdub3JlLmV4cGVjdCA8PFxFT0YKKy9uby1zdWNoLWZpbGUqCitFT0YKKworY2F0ID5jcmVhdGUtaWdub3JlLWluZGV4LmV4cGVjdCA8PFxFT0YKKzEwMDY0NCA4YzUyZTVkZmNkMGE4YjZiNmJjZmU2YjQxYjg5YmNiZjQ5MzcxOGE1IDAJLmdpdGlnbm9yZQorMTAwNjQ0IDhjNTJlNWRmY2QwYThiNmI2YmNmZTZiNDFiODliY2JmNDkzNzE4YTUgMAlkZWVwbHkvLmdpdGlnbm9yZQorMTAwNjQ0IDhjNTJlNWRmY2QwYThiNmI2YmNmZTZiNDFiODliY2JmNDkzNzE4YTUgMAlkZWVwbHkvbmVzdGVkLy5naXRpZ25vcmUKKzEwMDY0NCA4YzUyZTVkZmNkMGE4YjZiNmJjZmU2YjQxYjg5YmNiZjQ5MzcxOGE1IDAJZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvLmdpdGlnbm9yZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY3JlYXRlLWlnbm9yZScgIgorCWdpdCBzdm4gZmV0Y2ggJiYgZ2l0IHB1bGwgLiAke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwlnaXQgc3ZuIGNyZWF0ZS1pZ25vcmUgJiYKKwljbXAgLi8uZ2l0aWdub3JlIGNyZWF0ZS1pZ25vcmUuZXhwZWN0ICYmCisJY21wIC4vZGVlcGx5Ly5naXRpZ25vcmUgY3JlYXRlLWlnbm9yZS5leHBlY3QgJiYKKwljbXAgLi9kZWVwbHkvbmVzdGVkLy5naXRpZ25vcmUgY3JlYXRlLWlnbm9yZS5leHBlY3QgJiYKKwljbXAgLi9kZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS8uZ2l0aWdub3JlIGNyZWF0ZS1pZ25vcmUuZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1zIHwgZ3JlcCBnaXRpZ25vcmUgfCBjbXAgLSBjcmVhdGUtaWdub3JlLWluZGV4LmV4cGVjdAorCSIKKworY2F0ID5wcm9wLmV4cGVjdCA8PFxFT0YKKworbm8tc3VjaC1maWxlKgorCitFT0YKK2NhdCA+cHJvcDIuZXhwZWN0IDw8XEVPRgorOAorRU9GCisKKyMgVGhpcyB0ZXN0IGNhbiBiZSBpbXByb3ZlZDogc2luY2UgYWxsIHRoZSBzdm46aWdub3JlIGNvbnRhaW4gdGhlIHNhbWUKKyMgcGF0dGVybiwgaXQgY2FuIHBhc3MgZXZlbiB0aG91Z2ggdGhlIHByb3BnZXQgZGlkIG5vdCBleGVjdXRlIG9uIHRoZQorIyByaWdodCBkaXJlY3RvcnkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHByb3BnZXQnICIKKwlnaXQgc3ZuIHByb3BnZXQgc3ZuOmlnbm9yZSAuIHwgY21wIC0gcHJvcC5leHBlY3QgJiYKKwljZCBkZWVwbHkgJiYKKwlnaXQgc3ZuIHByb3BnZXQgc3ZuOmlnbm9yZSAuIHwgY21wIC0gLi4vcHJvcC5leHBlY3QgJiYKKwlnaXQgc3ZuIHByb3BnZXQgc3ZuOmVudHJ5OmNvbW1pdHRlZC1yZXYgbmVzdGVkL2RpcmVjdG9yeS8ua2VlcCBcCisJICB8IGNtcCAtIC4uL3Byb3AyLmV4cGVjdCAmJgorCWdpdCBzdm4gcHJvcGdldCBzdm46aWdub3JlIC4uIHwgY21wIC0gLi4vcHJvcC5leHBlY3QgJiYKKwlnaXQgc3ZuIHByb3BnZXQgc3ZuOmlnbm9yZSBuZXN0ZWQvIHwgY21wIC0gLi4vcHJvcC5leHBlY3QgJiYKKwlnaXQgc3ZuIHByb3BnZXQgc3ZuOmlnbm9yZSAuL25lc3RlZCB8IGNtcCAtIC4uL3Byb3AuZXhwZWN0ICYmCisJZ2l0IHN2biBwcm9wZ2V0IHN2bjppZ25vcmUgLi4vLi9kZWVwbHkvbmVzdGVkIHwgY21wIC0gLi4vcHJvcC5leHBlY3QKKwkiCisKK2NhdCA+cHJvcC5leHBlY3QgPDxcRU9GCitQcm9wZXJ0aWVzIG9uICcuJzoKKyAgc3ZuOmVudHJ5OmNvbW1pdHRlZC1kYXRlCisgIHN2bjplbnRyeTpjb21taXR0ZWQtcmV2CisgIHN2bjplbnRyeTpsYXN0LWF1dGhvcgorICBzdm46ZW50cnk6dXVpZAorICBzdm46aWdub3JlCitFT0YKK2NhdCA+cHJvcDIuZXhwZWN0IDw8XEVPRgorUHJvcGVydGllcyBvbiAnbmVzdGVkL2RpcmVjdG9yeS8ua2VlcCc6CisgIHN2bjplbnRyeTpjb21taXR0ZWQtZGF0ZQorICBzdm46ZW50cnk6Y29tbWl0dGVkLXJldgorICBzdm46ZW50cnk6bGFzdC1hdXRob3IKKyAgc3ZuOmVudHJ5OnV1aWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHByb3BsaXN0JyAiCisJZ2l0IHN2biBwcm9wbGlzdCAuIHwgY21wIC0gcHJvcC5leHBlY3QgJiYKKwlnaXQgc3ZuIHByb3BsaXN0IG5lc3RlZC9kaXJlY3RvcnkvLmtlZXAgfCBjbXAgLSBwcm9wMi5leHBlY3QKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2ggYi90L3Q5MTAyLWdpdC1zdm4tZGVlcC1ybWRpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYjcwZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHJtZGlyJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCW1rZGlyIC1wIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xICYmCisJCW1rZGlyIC1wIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yICYmCisJCWVjaG8gZm9vID5kZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMS9maWxlICYmCisJCWVjaG8gZm9vID5kZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMi9hbm90aGVyICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIC4gIiRzdm5yZXBvIgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pcnJvciB2aWEgZ2l0IHN2bicgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCBjaGVja291dCAtZiAtYiB0ZXN0LXJtZGlyICR7cmVtb3Rlc19naXRfc3ZufQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVHJ5IGEgY29tbWl0IG9uIHJtZGlyJyAnCisJZ2l0IHJtIC1mIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yL2Fub3RoZXIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJyZW1vdmUgYW5vdGhlciIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC0tcm1kaXIgSEVBRCAmJgorCXN2bl9jbWQgbHMgLVIgIiRzdm5yZXBvIiB8IGdyZXAgXmRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xCisJJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwMy1naXQtc3ZuLXRyYWNrZWQtZGlyZWN0b3J5LXJlbW92ZWQuc2ggYi90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDEzMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwMy1naXQtc3ZuLXRyYWNrZWQtZGlyZWN0b3J5LXJlbW92ZWQuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biB0cmFja2luZyByZW1vdmVkIHRvcC1sZXZlbCBwYXRoJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgaGlzdG9yeSBmb3IgdHJhY2tpbmcnICcKKwlta2RpciBpbXBvcnQgJiYKKwlta2RpciBpbXBvcnQvdHJ1bmsgJiYKKwllY2hvIGhlbGxvID4+IGltcG9ydC90cnVuay9SRUFETUUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSBpbml0aWFsIGltcG9ydCAiJHN2bnJlcG8iICYmCisJcm0gLXJmIGltcG9ydCAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayB0cnVuayAmJgorCWVjaG8gYnllIGJ5ZSA+PiB0cnVuay9SRUFETUUgJiYKKwlzdm5fY21kIHJtIC1tICJnb25lIiAiJHN2bnJlcG8iL3RydW5rICYmCisJcm0gLXJmIHRydW5rICYmCisJbWtkaXIgdHJ1bmsgJiYKKwllY2hvICJuZXciID4gdHJ1bmsvRk9MTE9XTUUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAibmV3IHRydW5rIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlcG8gd2l0aCBnaXQnICcKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIgeCAmJgorCXRlc3QgLWYgeC9GT0xMT1dNRSAmJgorCXRlc3QgISAtZiB4L1JFQURNRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgcjIgc3RpbGwgaGFzIG9sZCBmaWxlJyAiCisJY2QgeCAmJgorCQl0ZXN0IC1uIFwiXCQoZ2l0IHN2biBmaW5kLXJldiByMSlcIiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIFwkKGdpdCBzdm4gZmluZC1yZXYgcjEpICYmCisJCXRlc3QgLWYgUkVBRE1FICYmCisJCXRlc3QgISAtZiBGT0xMT1dNRSAmJgorCQl0ZXN0IHhcJChnaXQgc3ZuIGZpbmQtcmV2IHIyKSA9IHgKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaCBiL3QvdDkxMDQtZ2l0LXN2bi1mb2xsb3ctcGFyZW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEzYjE3OWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaApAQCAtMCwwICsxLDIyMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBmZXRjaGluZycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCWNkIGltcG9ydCAmJgorCQlta2RpciAtcCB0cnVuayAmJgorCQllY2hvIGhlbGxvID50cnVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIgorCSkgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgd2MgJiYKKwkoCisJCWNkIHdjICYmCisJCWVjaG8gd29ybGQgPj50cnVuay9yZWFkbWUgJiYKKwkJcG9rZSB0cnVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFub3RoZXIgY29tbWl0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbXYgdHJ1bmsgdGh1bmsgJiYKKwkJZWNobyBnb29kYnllID4+dGh1bmsvcmVhZG1lICYmCisJCXBva2UgdGh1bmsvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJieWUgbm93IgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIGEgbW92ZWQgZGlyZWN0b3J5JyAnCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIHRodW5rICIkc3ZucmVwbyIvdGh1bmsgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIHRodW5rICYmCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3RodW5rQDJgIiBcCisgICAgICAgICAgID0gImBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy90aHVua34xYCIgJiYKKyAgICAgICAgdGVzdCAiYGdpdCBjYXQtZmlsZSBibG9iIHJlZnMvcmVtb3Rlcy90aHVuazpyZWFkbWUgfFwKKyAgICAgICAgICAgICAgICAgc2VkIC1uIC1lICIzcCJgIiA9IGdvb2RieWUgJiYKKwl0ZXN0IC16ICJgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisJICAgICAgICAgIl50cnVuazpyZWZzL3JlbW90ZXMvdGh1bmtAMiQiYCIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIGZyb20gb25lIHN2bi1yZW1vdGUnICcKKyAgICAgICAgZ2l0IGNvbmZpZyBzdm4tcmVtb3RlLnN2bi51cmwgIiRzdm5yZXBvIiAmJgorICAgICAgICBnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKyAgICAgICAgICB0cnVuazpyZWZzL3JlbW90ZXMvc3ZuL3RydW5rICYmCisgICAgICAgIGdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorICAgICAgICAgIHRodW5rOnJlZnMvcmVtb3Rlcy9zdm4vdGh1bmsgJiYKKyAgICAgICAgZ2l0IHN2biBmZXRjaCAtaSBzdm4vdGh1bmsgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvc3ZuL3RydW5rYCIgXAorICAgICAgICAgICA9ICJgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvc3ZuL3RodW5rfjFgIiAmJgorICAgICAgICB0ZXN0ICJgZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL3N2bi90aHVuazpyZWFkbWUgfFwKKyAgICAgICAgICAgICAgICAgc2VkIC1uIC1lICIzcCJgIiA9IGdvb2RieWUKKyAgICAgICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgZGVsZXRlZCBwYXJlbnQnICcKKyAgICAgICAgKHN2bl9jbWQgY3AgLW0gInJlc3VycmVjdGluZyB0cnVuayBhcyBqdW5rIiBcCisgICAgICAgICAgICAgICAiJHN2bnJlcG8iL3RydW5rQDIgIiRzdm5yZXBvIi9qdW5rIHx8CisgICAgICAgICBzdm4gY3AgLW0gInJlc3VycmVjdGluZyB0cnVuayBhcyBqdW5rIiBcCisgICAgICAgICAgICAgICAtcjIgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2p1bmspICYmCisgICAgICAgIGdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorICAgICAgICAgIGp1bms6cmVmcy9yZW1vdGVzL3N2bi9qdW5rICYmCisgICAgICAgIGdpdCBzdm4gZmV0Y2ggLWkgc3ZuL3RodW5rICYmCisgICAgICAgIGdpdCBzdm4gZmV0Y2ggLWkgc3ZuL2p1bmsgJiYKKyAgICAgICAgdGVzdCAteiAiYGdpdCBkaWZmIHN2bi9qdW5rIHN2bi90cnVua2AiICYmCisgICAgICAgIHRlc3QgImBnaXQgbWVyZ2UtYmFzZSBzdm4vanVuayBzdm4vdHJ1bmtgIiBcCisgICAgICAgICAgID0gImBnaXQgcmV2LXBhcnNlIHN2bi90cnVua2AiCisgICAgICAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGxhcmdlciBwYXJlbnQnICcKKyAgICAgICAgbWtkaXIgLXAgaW1wb3J0L3RydW5rL3RodW5rL2J1bXAvdGh1ZCAmJgorICAgICAgICBlY2hvIGhpID4gaW1wb3J0L3RydW5rL3RodW5rL2J1bXAvdGh1ZC9maWxlICYmCisgICAgICAgIHN2biBpbXBvcnQgLW0gImltcG9ydCBhIGxhcmdlciBwYXJlbnQiIGltcG9ydCAiJHN2bnJlcG8iL2xhcmdlci1wYXJlbnQgJiYKKyAgICAgICAgc3ZuIGNwIC1tICJoaSIgIiRzdm5yZXBvIi9sYXJnZXItcGFyZW50ICIkc3ZucmVwbyIvYW5vdGhlci1sYXJnZXIgJiYKKyAgICAgICAgZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGxhcmdlciBcCisgICAgICAgICAgIiRzdm5yZXBvIi9hbm90aGVyLWxhcmdlci90cnVuay90aHVuay9idW1wL3RodWQgJiYKKyAgICAgICAgZ2l0IHN2biBmZXRjaCAtaSBsYXJnZXIgJiYKKyAgICAgICAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvbGFyZ2VyICYmCisgICAgICAgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgXAorICAgICAgICAgICByZWZzL3JlbW90ZXMvbGFyZ2VyLXBhcmVudC90cnVuay90aHVuay9idW1wL3RodWQgJiYKKyAgICAgICAgdGVzdCAiYGdpdCBtZXJnZS1iYXNlIFwKKyAgICAgICAgICAgICAgICAgcmVmcy9yZW1vdGVzL2xhcmdlci1wYXJlbnQvdHJ1bmsvdGh1bmsvYnVtcC90aHVkIFwKKyAgICAgICAgICAgICAgICAgcmVmcy9yZW1vdGVzL2xhcmdlcmAiID0gXAorICAgICAgICAgICAgICJgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvbGFyZ2VyYCIKKyAgICAgICAgdHJ1ZQorICAgICAgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBoaWdoZXItbGV2ZWwgcGFyZW50JyAnCisJc3ZuIG1rZGlyIC1tICJmb2xsb3cgaGlnaGVyLWxldmVsIHBhcmVudCIgIiRzdm5yZXBvIi9ibG9iICYmCisJc3ZuIGNvICIkc3ZucmVwbyIvYmxvYiBibG9iICYmCisJKAorCQljZCBibG9iICYmCisJCWVjaG8gaGkgPiBoaSAmJgorCQlzdm4gYWRkIGhpICYmCisJCXN2biBjb21taXQgLW0gImhpaGkiCisJKSAmJgorCXN2biBta2RpciAtbSAibmV3IGdsb2IgYXQgdG9wIGxldmVsIiAiJHN2bnJlcG8iL2dsb2IgJiYKKwlzdm4gbXYgLW0gIm1vdmUgYmxvYiBkb3duIGEgbGV2ZWwiICIkc3ZucmVwbyIvYmxvYiAiJHN2bnJlcG8iL2dsb2IvYmxvYiAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBibG9iICIkc3ZucmVwbyIvZ2xvYi9ibG9iICYmCisgICAgICAgIGdpdCBzdm4gZmV0Y2ggLWkgYmxvYgorICAgICAgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBkZWxldGVkIGRpcmVjdG9yeScgJworCXN2bl9jbWQgbXYgLW0gImJ5ZSEiICIkc3ZucmVwbyIvZ2xvYi9ibG9iL2hpICIkc3ZucmVwbyIvZ2xvYi9ibG9iL2J5ZSAmJgorCXN2bl9jbWQgcm0gLW0gInJlbW92ZSBnbG9iIiAiJHN2bnJlcG8iL2dsb2IgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgZ2xvYiAiJHN2bnJlcG8iL2dsb2IgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIGdsb2IgJiYKKwl0ZXN0ICJgZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL2dsb2I6YmxvYi9ieWVgIiA9IGhpICYmCisJdGVzdCAiYGdpdCBscy10cmVlIHJlZnMvcmVtb3Rlcy9nbG9iIHwgd2MgLWwgYCIgLWVxIDEKKwknCisKKyMgcmVmOiByOTI3MCBvZiB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5OiAoaHR0cDovL3N2bi5jb2xsYWIubmV0L3JlcG9zL3N2bikKKyMgaW4gdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdy1wYXJlbnQgYXZvaWRzIGRlbGV0aW5nIHJlbGV2YW50IGluZm8nICcKKwlta2RpciAtcCBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvdCAmJgorCWZvciBpIGluIGEgYiBjIDsgZG8gXAorCSAgZWNobyAkaSA+IGltcG9ydC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC8kaS5wbSAmJgorCSAgZWNobyBfJGkgPiBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvdC8kaS50OyBcCisJZG9uZSAmJgorCSAgZWNobyAiYmFkIGRlbGV0ZSB0ZXN0IiA+IFwKKwkgICBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvdC9sYXJnZXItcGFyZW50ICYmCisJICBlY2hvICJiYWQgZGVsZXRlIHRlc3QgMiIgPiBcCisJICAgaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL2Fub3RoZXItbGFyZ2VyICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJc3ZuIGltcG9ydCAtbSAicjkyNzAgdGVzdCIgLiAiJHN2bnJlcG8iL3I5MjcwCisJKSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybCByOTI3MCAmJgorCSgKKwkJY2QgcjkyNzAgJiYKKwkJc3ZuIG1rZGlyIG5hdGl2ZSAmJgorCQlzdm4gbXYgdCBuYXRpdmUvdCAmJgorCQlmb3IgaSBpbiBhIGIgYworCQlkbworCQkJc3ZuIG12ICRpLnBtIG5hdGl2ZS8kaS5wbQorCQlkb25lICYmCisJCWVjaG8geiA+Pm5hdGl2ZS90L2MudCAmJgorCQlwb2tlIG5hdGl2ZS90L2MudCAmJgorCQlzdm4gY29tbWl0IC1tICJyZW9yZyB0ZXN0IgorCSkgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgcjkyNzAtdCBcCisJICAiJHN2bnJlcG8iL3I5MjcwL3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL25hdGl2ZS90ICYmCisJZ2l0IHN2biBmZXRjaCAtaSByOTI3MC10ICYmCisJdGVzdCBgZ2l0IHJldi1saXN0IHI5MjcwLXQgfCB3YyAtbGAgLWVxIDIgJiYKKwl0ZXN0ICJgZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcjkyNzAtdH4xYCIgPSBcCisJICAgICAiYGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLXRgIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidHJhY2sgaW5pdGlhbCBjaGFuZ2UgaWYgaXQgd2FzIG9ubHkgbWFkZSB0byBwYXJlbnQiICcKKwlzdm5fY21kIGNwIC1tICJ3aGVlZSEiICIkc3ZucmVwbyIvcjkyNzAvdHJ1bmsgIiRzdm5yZXBvIi9yOTI3MC9kcnVuayAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSByOTI3MC1kIFwKKwkgICIkc3ZucmVwbyIvcjkyNzAvZHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvbmF0aXZlL3QgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIHI5MjcwLWQgJiYKKwl0ZXN0IGBnaXQgcmV2LWxpc3QgcjkyNzAtZCB8IHdjIC1sYCAtZXEgMyAmJgorCXRlc3QgImBnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC10YCIgPSBcCisJICAgICAiYGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLWRgIiAmJgorCXRlc3QgImBnaXQgcmV2LXBhcnNlIHI5MjcwLXRgIiA9IFwKKwkgICAgICJgZ2l0IHJldi1wYXJzZSByOTI3MC1kfjFgIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9sbG93LXBhcmVudCBpcyBhdG9taWMiICcKKwkoCisJCWNkIHdjICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBta2RpciBzdHVuayAmJgorCQllY2hvICJ0cnVuayBzdHVuayIgPiBzdHVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBhZGQgc3R1bmsvcmVhZG1lICYmCisJCXN2bl9jbWQgY2kgLW0gInRydW5rIHN0dW5rIiAmJgorCQllY2hvICJzdHVuayBsaWtlIGp1bmsiID4+IHN0dW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGNpIC1tICJyZWFsbHkgc3R1bmsiICYmCisJCWVjaG8gInN0aW5rIHN0YW5rIHN0dW5rIiA+PiBzdHVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiZXZlbiB0aGUgZ3JpbmNoIGFncmVlcyIKKwkpICYmCisJc3ZuX2NtZCBjb3B5IC1tICJzdHVuayBmbHVua2VkIiAiJHN2bnJlcG8iL3N0dW5rICIkc3ZucmVwbyIvZmx1bmsgJiYKKwl7IHN2biBjcCAtbSAiZWFybHkgc3R1bmsgZmx1bmtlZCB0b28iIFwKKwkJIiRzdm5yZXBvIi9zdHVua0AxNyAiJHN2bnJlcG8iL2ZsdW5rZWQgfHwKKwlzdm5fY21kIGNwIC1tICJlYXJseSBzdHVuayBmbHVua2VkIHRvbyIgXAorCQktcjE3ICIkc3ZucmVwbyIvc3R1bmsgIiRzdm5yZXBvIi9mbHVua2VkOyB9ICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIHN0dW5rICIkc3ZucmVwbyIvc3R1bmsgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIHN0dW5rICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL2ZsdW5rQDE4IHJlZnMvcmVtb3Rlcy9zdHVua34yICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9yZW1vdGVzL3N0dW5rICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIHN0dW5rICYmCisJbWtkaXIgLXAgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL2ZsdW5rQDE4ICYmCisJcmV2X21hcD0kKGNkICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9zdHVuayAmJiBscyAucmV2X21hcCopICYmCisJZGQgaWY9IiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL3N0dW5rLyRyZXZfbWFwIFwKKwkgICBvZj0iJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvZmx1bmtAMTgvJHJldl9tYXAgYnM9MjQgY291bnQ9MSAmJgorCXJtIC1yZiAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvc3R1bmsgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgZmx1bmsgIiRzdm5yZXBvIi9mbHVuayAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgZmx1bmsgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgc3R1bmsgIiRzdm5yZXBvIi9zdHVuayAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgc3R1bmsgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgZmx1bmtlZCAiJHN2bnJlcG8iL2ZsdW5rZWQgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIGZsdW5rZWQgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvZmx1bmtAMThgIiBcCisJICAgPSAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N0dW5rYCIgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvZmx1bmt+MWAiIFwKKwkgICA9ICJgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvc3R1bmtgIiAmJgorCXRlc3QgImBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9mbHVua2VkfjFgIiBcCisJICAgPSAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N0dW5rfjFgIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidHJhY2sgbXVsdGktcGFyZW50IHBhdGhzIiAnCisJc3ZuX2NtZCBjcCAtbSAicmVzdXJyZWN0IC9nbG9iIiAiJHN2bnJlcG8iL3I5MjcwICIkc3ZucmVwbyIvZ2xvYiAmJgorCWdpdCBzdm4gbXVsdGktZmV0Y2ggJiYKKwl0ZXN0IGBnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9nbG9iIHwgXAorCSAgICAgICBncmVwICJecGFyZW50ICIgfCB3YyAtbGAgLWVxIDIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm11bHRpLWZldGNoIGNvbnRpbnVlcyB0byB3b3JrIiAiCisJZ2l0IHN2biBtdWx0aS1mZXRjaAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAibXVsdGktZmV0Y2ggd29ya3Mgb2ZmIGEgJ2NsZWFuJyByZXBvc2l0b3J5IiAnCisJcm0gLXIgIiRHSVRfRElSL3N2biIgIiRHSVRfRElSL3JlZnMvcmVtb3RlcyIgIiRHSVRfRElSL2xvZ3MiICYmCisJbWtkaXIgIiRHSVRfRElSL3N2biIgJiYKKwlnaXQgc3ZuIG11bHRpLWZldGNoCisJJworCit0ZXN0X2RlYnVnICdnaXRrIC0tYWxsICYnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoIGIvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkMGFmZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTA1LWdpdC1zdm4tY29tbWl0LWRpZmYuc2gKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gY29tbWl0LWRpZmYnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJZWNobyBoZWxsbyA+cmVhZG1lICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIKKwkpICYmCisJZWNobyBoZWxsbyA+IHJlYWRtZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmVhZG1lICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiaW5pdGlhbCIgJiYKKwllY2hvIHdvcmxkID4+IHJlYWRtZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImFub3RoZXIiCisJJworCitoZWFkPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReMGAKK3ByZXY9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF4xYAorCisjIHRoZSBpbnRlcm5hbHMgb2YgdGhlIGNvbW1pdC1kaWZmIGNvbW1hbmQgYXJlIHRoZSBzYW1lIGFzIHRoZSByZWd1bGFyCisjIGNvbW1pdCwgc28gb25seSBhIGJhc2ljIHRlc3Qgb2YgZnVuY3Rpb25hbGl0eSBpcyBuZWVkZWQgc2luY2Ugd2UndmUKKyMgYWxyZWFkeSB0ZXN0ZWQgY29tbWl0IGV4dGVuc2l2ZWx5IGVsc2V3aGVyZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRoZSBjb21taXQtZGlmZiBjb21tYW5kJyAnCisJdGVzdCAtbiAiJHByZXYiICYmIHRlc3QgLW4gIiRoZWFkIiAmJgorCWdpdCBzdm4gY29tbWl0LWRpZmYgLXIxICIkcHJldiIgIiRoZWFkIiAiJHN2bnJlcG8iICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHdjICYmCisJY21wIHJlYWRtZSB3Yy9yZWFkbWUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdC1kaWZmIHRvIGEgc3ViLWRpcmVjdG9yeSAod2l0aCBnaXQgc3ZuIGNvbmZpZyknICcKKwlzdm5fY21kIGltcG9ydCAtbSAic3ViLWRpcmVjdG9yeSIgaW1wb3J0ICIkc3ZucmVwbyIvc3ViZGlyICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsICIkc3ZucmVwbyIvc3ViZGlyICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCBzdm4gY29tbWl0LWRpZmYgLXIzICIkcHJldiIgIiRoZWFkIiAmJgorCXN2bl9jbWQgY2F0ICIkc3ZucmVwbyIvc3ViZGlyL3JlYWRtZSA+IHJlYWRtZS4yICYmCisJY21wIHJlYWRtZSByZWFkbWUuMgorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaCBiL3QvdDkxMDYtZ2l0LXN2bi1jb21taXQtZGlmZi1jbG9iYmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2ZDdhYzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaApAQCAtMCwwICsxLDEwNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gY29tbWl0LWRpZmYgY2xvYmJlcicKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCWNkIGltcG9ydCAmJgorCQllY2hvIGluaXRpYWwgPmZpbGUgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIgorCSkgJiYKKwllY2hvIGluaXRpYWwgPiBmaWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiaW5pdGlhbCIKKwknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgY2hhbmdlIGZyb20gc3ZuIHNpZGUnICcKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKKwkoCisJCWNkIHQuc3ZuICYmCisJCWVjaG8gc2Vjb25kIGxpbmUgZnJvbSBzdm4gPj5maWxlICYmCisJCXBva2UgZmlsZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAic2Vjb25kIGxpbmUgZnJvbSBzdm4iCisJKSAmJgorCXJtIC1yZiB0LnN2bgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNvbmZsaWN0aW5nIGNoYW5nZSBmcm9tIGdpdCcgJworCWVjaG8gc2Vjb25kIGxpbmUgZnJvbSBnaXQgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCBsaW5lIGZyb20gZ2l0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gY29tbWl0LWRpZmYgLXIxIEhFQUR+MSBIRUFEICIkc3ZucmVwbyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNvbXBsZW1lbnRpbmcgY2hhbmdlIGZyb20gZ2l0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKKwllY2hvIHNlY29uZCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgbGluZSBmcm9tIHN2biIgJiYKKwllY2hvIHRoaXJkIGxpbmUgZnJvbSBnaXQgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInRoaXJkIGxpbmUgZnJvbSBnaXQiICYmCisJZ2l0IHN2biBjb21taXQtZGlmZiAtcjIgSEVBRH4xIEhFQUQgIiRzdm5yZXBvIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBmYWlscyB0byBjb21taXQgYmVjYXVzZSBvZiBjb25mbGljdCcgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKKwkoCisJCWNkIHQuc3ZuICYmCisJCWVjaG8gZm91cnRoIGxpbmUgZnJvbSBzdm4gPj5maWxlICYmCisJCXBva2UgZmlsZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiZm91cnRoIGxpbmUgZnJvbSBzdm4iCisJKSAmJgorCXJtIC1yZiB0LnN2biAmJgorCWVjaG8gImZvdXJ0aCBsaW5lIGZyb20gZ2l0IiA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZm91cnRoIGxpbmUgZnJvbSBnaXQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGRvZXMgdGhlIHN2biBlcXVpdmFsZW50IG9mIGFuIGluZGV4IG1lcmdlJyAiCisJZ2l0IHJlc2V0IC0taGFyZCByZWZzLyR7cmVtb3Rlc19naXRfc3ZufSAmJgorCWVjaG8gJ2luZGV4IG1lcmdlJyA+IGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLWEgLW0gJ2luZGV4IG1lcmdlJyAmJgorCWVjaG8gJ21vcmUgY2hhbmdlcycgPj4gZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAnbW9yZSBjaGFuZ2VzJyAmJgorCWdpdCBzdm4gZGNvbW1pdAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGFub3RoZXIgY2hhbmdlIGZyb20gc3ZuIHNpZGUnICcKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKKwkoCisJCWNkIHQuc3ZuICYmCisJCWVjaG8gdGhpcmQgbGluZSBmcm9tIHN2biA+PmZpbGUgJiYKKwkJcG9rZSBmaWxlICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0aGlyZCBsaW5lIGZyb20gc3ZuIgorCSkgJiYKKwlybSAtcmYgdC5zdm4KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGRjb21taXQgZnJvbSBnaXQgc3ZuIHdpbGwgbm90IGNsb2JiZXIgc3ZuJyAiCisJZ2l0IHJlc2V0IC0taGFyZCByZWZzLyR7cmVtb3Rlc19naXRfc3ZufSAmJgorCWVjaG8gbmV3IGZpbGUgPj4gbmV3LWZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG5ldy1maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAnbmV3IGZpbGUnICYmCisJZWNobyBjbG9iYmVyID4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gJ2Nsb2JiZXInICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0CisJIgorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoYXQgcmViYXNlIHJlYWxseSBmYWlsZWQnICcKKwl0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdmUsIGNvbnRpbnVlIHRoZSByZWJhc2UgYW5kIGRjb21taXQnICIKKwllY2hvIGNsb2JiZXIgYW5kIEkgcmVhbGx5IG1lYW4gaXQgPiBmaWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmaWxlICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IHN2biBkY29tbWl0CisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoIGIvdC90OTEwNy1naXQtc3ZuLW1pZ3JhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWU3MzAxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoCkBAIC0wLDAgKzEsMTI1IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEVyaWMgV29uZwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtZXRhZGF0YSBtaWdyYXRpb25zIGZyb20gcHJldmlvdXMgdmVyc2lvbnMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2xkLWxvb2tpbmcgbWV0YWRhdGEnICcKKwljcCAiJEdJVF9ESVIiL2NvbmZpZyAiJEdJVF9ESVIiL2NvbmZpZy1vbGQtZ2l0LXN2biAmJgorCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCWZvciBpIGluIHRydW5rIGJyYW5jaGVzL2EgYnJhbmNoZXMvYiB0YWdzLzAuMSB0YWdzLzAuMiB0YWdzLzAuMworCQlkbworCQkJbWtkaXIgLXAgJGkgJiYKKwkJCWVjaG8gaGVsbG8gPj4kaS9SRUFETUUgfHwKKwkJCWV4aXQgMQorCQlkb25lICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tIHRlc3QgLiAiJHN2bnJlcG8iCisJKSAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCXJtIC1yZiAiJEdJVF9ESVIiL3N2biAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvZ2l0LXN2bi1IRUFEIHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59ICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9zdm4tSEVBRCByZWZzLyR7cmVtb3Rlc19naXRfc3ZufSAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59IHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59CisJJworCitoZWFkPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvZ2l0LXN2bi1IRUFEXjBgCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtc3ZuLUhFQUQgaXMgYSByZWFsIEhFQUQnICJ0ZXN0IC1uICckaGVhZCciCisKK3N2bnJlcG9fZXNjYXBlZD1gZWNobyAkc3ZucmVwbyB8IHNlZCAncy8gLyUyMC8nYAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIG9sZC1zdHlsZSAodjApIGdpdCBzdm4gbGF5b3V0JyAnCisJbWtkaXIgLXAgIiRHSVRfRElSIi9naXQtc3ZuL2luZm8gIiRHSVRfRElSIi9zdm4vaW5mbyAmJgorCWVjaG8gIiRzdm5yZXBvIiA+ICIkR0lUX0RJUiIvZ2l0LXN2bi9pbmZvL3VybCAmJgorCWVjaG8gIiRzdm5yZXBvIiA+ICIkR0lUX0RJUiIvc3ZuL2luZm8vdXJsICYmCisJZ2l0IHN2biBtaWdyYXRlICYmCisJISB0ZXN0IC1kICIkR0lUX0RJUiIvZ2l0LXN2biAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn1eMCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N2bl4wICYmCisJdGVzdCAiJChnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLnVybCkiID0gIiRzdm5yZXBvX2VzY2FwZWQiICYmCisJdGVzdCBgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaGAgPSBcCisgICAgICAgICAgICAgIjpyZWZzLyR7cmVtb3Rlc19naXRfc3ZufSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgYSBtdWx0aS1yZXBvc2l0b3J5IHJlcG8nICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAtVCB0cnVuayAtdCB0YWdzIC1iIGJyYW5jaGVzICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggPiBmZXRjaC5vdXQgJiYKKwlncmVwICJedHJ1bms6cmVmcy9yZW1vdGVzL3RydW5rJCIgZmV0Y2gub3V0ICYmCisJdGVzdCAtbiAiYGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICJeYnJhbmNoZXMvXCo6cmVmcy9yZW1vdGVzL1wqJCJgIiAmJgorCXRlc3QgLW4gImBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLnRhZ3MgXAorCSAgICAgICAgICAgICJedGFncy9cKjpyZWZzL3JlbW90ZXMvdGFncy9cKiQiYCIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICJeYnJhbmNoZXMvXCo6cmVmcy9yZW1vdGVzL1wqJCIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4udGFncyBcCisJICAgICAgICAgICAgICAgICAgICAgICAgIl50YWdzL1wqOnJlZnMvcmVtb3Rlcy90YWdzL1wqJCIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoICJicmFuY2hlcy9hOnJlZnMvcmVtb3Rlcy9hIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggImJyYW5jaGVzL2I6cmVmcy9yZW1vdGVzL2IiICYmCisJZm9yIGkgaW4gdGFncy8wLjEgdGFncy8wLjIgdGFncy8wLjM7IGRvCisJCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorCQkgICAgICAgICAgICAgICAgICRpOnJlZnMvcmVtb3Rlcy8kaSB8fCBleGl0IDE7IGRvbmUgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLnN2bi5mZXRjaCA+IGZldGNoLm91dCAmJgorCWdyZXAgIl50cnVuazpyZWZzL3JlbW90ZXMvdHJ1bmskIiBmZXRjaC5vdXQgJiYKKwlncmVwICJeYnJhbmNoZXMvYTpyZWZzL3JlbW90ZXMvYSQiIGZldGNoLm91dCAmJgorCWdyZXAgIl5icmFuY2hlcy9iOnJlZnMvcmVtb3Rlcy9iJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMTpyZWZzL3JlbW90ZXMvdGFncy8wXC4xJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMjpyZWZzL3JlbW90ZXMvdGFncy8wXC4yJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMzpyZWZzL3JlbW90ZXMvdGFncy8wXC4zJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXjpyZWZzLyR7cmVtb3Rlc19naXRfc3ZufSIgZmV0Y2gub3V0CisJJworCisjIHJlZnMgc2hvdWxkIGFsbCBiZSBkaWZmZXJlbnQsIGJ1dCB0aGUgdHJlZXMgc2hvdWxkIGFsbCBiZSB0aGUgc2FtZToKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLWZldGNoIHdvcmtzIG9uIHBhcnRpYWwgdXJscyArIHBhdGhzJyAiCisJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgorCWZvciBpIGluIHRydW5rIGEgYiB0YWdzLzAuMSB0YWdzLzAuMiB0YWdzLzAuMzsgZG8KKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvXCRpXjAgPj4gcmVmcy5vdXQgfHwgZXhpdCAxOworCSAgICBkb25lICYmCisJdGVzdCAteiBcIlxgc29ydCA8IHJlZnMub3V0IHwgdW5pcSAtZFxgXCIgJiYKKwlmb3IgaSBpbiB0cnVuayBhIGIgdGFncy8wLjEgdGFncy8wLjIgdGFncy8wLjM7IGRvCisJICBmb3IgaiBpbiB0cnVuayBhIGIgdGFncy8wLjEgdGFncy8wLjIgdGFncy8wLjM7IGRvCisJCWlmIHRlc3QgXCRqICE9IFwkaTsgdGhlbiBjb250aW51ZTsgZmkKKwkgICAgdGVzdCAteiBcIlxgZ2l0IGRpZmYgcmVmcy9yZW1vdGVzL1wkaSBcCisJICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnMvcmVtb3Rlcy9cJGpcYFwiIHx8ZXhpdCAxOyBkb25lOyBkb25lCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaWdyYXRlIC0tbWluaW1pemUgb24gb2xkIGluaXRlZCBsYXlvdXQnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLmZldGNoICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBzdm4tcmVtb3RlLnN2bi51cmwgJiYKKwlybSAtcmYgIiRHSVRfRElSIi9zdm4gJiYKKwlmb3IgaSBpbiBgY2F0IGZldGNoLm91dGA7IGRvCisJCXBhdGg9YGV4cHIgJGkgOiAiXChbXjpdKlwpOi4qJCJgCisJCXJlZj1gZXhwciAkaSA6ICJbXjpdKjpcKHJlZnMvcmVtb3Rlcy8uKlwpJCJgCisJCWlmIHRlc3QgLXogIiRyZWYiOyB0aGVuIGNvbnRpbnVlOyBmaQorCQlpZiB0ZXN0IC1uICIkcGF0aCI7IHRoZW4gcGF0aD0iLyRwYXRoIjsgZmkKKwkJKCBta2RpciAtcCAiJEdJVF9ESVIiL3N2bi8kcmVmL2luZm8vICYmCisJCWVjaG8gIiRzdm5yZXBvIiRwYXRoID4gIiRHSVRfRElSIi9zdm4vJHJlZi9pbmZvL3VybCApIHx8IGV4aXQgMTsKKwlkb25lICYmCisJZ2l0IHN2biBtaWdyYXRlIC0tbWluaW1pemUgJiYKKwl0ZXN0IC16ICJgZ2l0IGNvbmZpZyAtbCB8IGdyZXAgIl5zdm4tcmVtb3RlXC5naXQtc3ZuXC4iYCIgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLnN2bi5mZXRjaCA+IGZldGNoLm91dCAmJgorCWdyZXAgIl50cnVuazpyZWZzL3JlbW90ZXMvdHJ1bmskIiBmZXRjaC5vdXQgJiYKKwlncmVwICJeYnJhbmNoZXMvYTpyZWZzL3JlbW90ZXMvYSQiIGZldGNoLm91dCAmJgorCWdyZXAgIl5icmFuY2hlcy9iOnJlZnMvcmVtb3Rlcy9iJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMTpyZWZzL3JlbW90ZXMvdGFncy8wXC4xJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMjpyZWZzL3JlbW90ZXMvdGFncy8wXC4yJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMzpyZWZzL3JlbW90ZXMvdGFncy8wXC4zJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXjpyZWZzLyR7cmVtb3Rlc19naXRfc3ZufSIgZmV0Y2gub3V0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICAiLnJldl9kYiBhdXRvLWNvbnZlcnRlZCB0byAucmV2X21hcC5VVUlEIiAnCisJZ2l0IHN2biBmZXRjaCAtaSB0cnVuayAmJgorCXRlc3QgLXogIiQobHMgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL3RydW5rLy5yZXZfZGIuKiAyPi9kZXYvbnVsbCkiICYmCisJZXhwZWN0PSIkKGxzICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy90cnVuay8ucmV2X21hcC4qKSIgJiYKKwl0ZXN0IC1uICIkZXhwZWN0IiAmJgorCXJldl9kYj0iJChlY2hvICRleHBlY3QgfCBzZWQgLWUgInMsX21hcCxfZGIsIikiICYmCisJY29udmVydF90b19yZXZfZGIgIiRleHBlY3QiICIkcmV2X2RiIiAmJgorCXJtIC1mICIkZXhwZWN0IiAmJgorCXRlc3QgLWYgIiRyZXZfZGIiICYmCisJZ2l0IHN2biBmZXRjaCAtaSB0cnVuayAmJgorCXRlc3QgLXogIiQobHMgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL3RydW5rLy5yZXZfZGIuKiAyPi9kZXYvbnVsbCkiICYmCisJdGVzdCAhIC1lICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy90cnVuay8ucmV2X2RiICYmCisJdGVzdCAtZiAiJGV4cGVjdCIKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2ggYi90L3Q5MTA4LWdpdC1zdm4tZ2xvYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNzMyZDMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2gKQEAgLTAsMCArMSwxMTEgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGdsb2JiaW5nIHJlZnNwZWNzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2NhdCA+IGV4cGVjdC5lbmQgPDxFT0YKK3RoZSBlbmQKK2hpCitzdGFydCBhIG5ldyBicmFuY2gKK2luaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJlZnNwZWMgZ2xvYmJpbmcnICcKKwlta2RpciAtcCB0cnVuay9zcmMvYSB0cnVuay9zcmMvYiB0cnVuay9kb2MgJiYKKwllY2hvICJoZWxsbyB3b3JsZCIgPiB0cnVuay9zcmMvYS9yZWFkbWUgJiYKKwllY2hvICJnb29kYnllIHdvcmxkIiA+IHRydW5rL3NyYy9iL3JlYWRtZSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRtcCAmJgorCSgKKwkJY2QgdG1wICYmCisJCW1rZGlyIGJyYW5jaGVzIHRhZ3MgJiYKKwkJc3ZuX2NtZCBhZGQgYnJhbmNoZXMgdGFncyAmJgorCQlzdm5fY21kIGNwIHRydW5rIGJyYW5jaGVzL3N0YXJ0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJzdGFydCBhIG5ldyBicmFuY2giICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyAiaGkiID4+IGJyYW5jaGVzL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgorCQllY2hvICJoZXkiID4+IGJyYW5jaGVzL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiaGkiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBjcCBicmFuY2hlcy9zdGFydCB0YWdzL2VuZCAmJgorCQllY2hvICJieWUiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQllY2hvICJheWUiID4+IHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidGhlIGVuZCIgJiYKKwkJZWNobyAiYnllYnllIiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm5vdGhpbmcgdG8gc2VlIGhlcmUiCisJKSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4udXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkgICAgICAgICAgICAgICAgICJ0cnVuay9zcmMvYTpyZWZzL3JlbW90ZXMvdHJ1bmsiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyBcCisJICAgICAgICAgICAgICAgICAiYnJhbmNoZXMvKi9zcmMvYTpyZWZzL3JlbW90ZXMvYnJhbmNoZXMvKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnRhZ3NcCisJICAgICAgICAgICAgICAgICAidGFncy8qL3NyYy9hOnJlZnMvcmVtb3Rlcy90YWdzLyoiICYmCisJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdGFncy9lbmQgfCBcCisJICAgIHNlZCAtZSAicy9eLlx7NDFcfS8vIiA+IG91dHB1dC5lbmQgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZW5kIG91dHB1dC5lbmQgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy9lbmR+MWAiID0gXAorCQkiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JyYW5jaGVzL3N0YXJ0YCIgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvc3RhcnR+MmAiID0gXAorCQkiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RydW5rYCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL2VuZEAzCisJJworCitlY2hvIHRyeSB0byB0cnkgPiBleHBlY3QudHdvCitlY2hvIG5vdGhpbmcgdG8gc2VlIGhlcmUgPj4gZXhwZWN0LnR3bworY2F0IGV4cGVjdC5lbmQgPj4gZXhwZWN0LnR3bworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGxlZnQtaGFuZC1zaWRlIG9ubHkgZ2xvYmJpbmcnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by5mZXRjaCB0cnVuazpyZWZzL3JlbW90ZXMvdHdvL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by5icmFuY2hlcyBcCisJICAgICAgICAgICAgICAgICAiYnJhbmNoZXMvKjpyZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by50YWdzIFwKKwkgICAgICAgICAgICAgICAgICJ0YWdzLyo6cmVmcy9yZW1vdGVzL3R3by90YWdzLyoiICYmCisJKAorCQljZCB0bXAgJiYKKwkJZWNobyAidHJ5IHRyeSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgorCSkgJiYKKwlnaXQgc3ZuIGZldGNoIHR3byAmJgorCXRlc3QgYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kIHwgd2MgLWxgIC1lcSA2ICYmCisJdGVzdCBgZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvc3RhcnQgfCB3YyAtbGAgLWVxIDMgJiYKKwl0ZXN0IGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvc3RhcnR+MmAgPSBcCisJICAgICBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL3RydW5rYCAmJgorCXRlc3QgYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZH4zYCA9IFwKKwkgICAgIGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvc3RhcnRgICYmCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmQgfCBcCisJICAgIHNlZCAtZSAicy9eLlx7NDFcfS8vIiA+IG91dHB1dC50d28gJiYKKwl0ZXN0X2NtcCBleHBlY3QudHdvIG91dHB1dC50d28KKwknCisKK2VjaG8gIk9ubHkgb25lIHNldCBvZiB3aWxkY2FyZCBkaXJlY3RvcmllcyIgXAorICAgICAiKGUuZy4gJyonIG9yICcqLyovKicpIGlzIHN1cHBvcnRlZDogJ2JyYW5jaGVzLyovdC8qJyIgPiBleHBlY3QudGhyZWUKK2VjaG8gIiIgPj4gZXhwZWN0LnRocmVlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGlzYWxsb3cgbXVsdGktZ2xvYnMnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUudXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUuZmV0Y2ggXAorCSAgICAgICAgICAgICAgICAgdHJ1bms6cmVmcy9yZW1vdGVzL3RocmVlL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAgICAgICJicmFuY2hlcy8qL3QvKjpyZWZzL3JlbW90ZXMvdGhyZWUvYnJhbmNoZXMvKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUudGFncyBcCisJICAgICAgICAgICAgICAgICAidGFncy8qLyo6cmVmcy9yZW1vdGVzL3RocmVlL3RhZ3MvKiIgJiYKKwkoCisJCWNkIHRtcCAmJgorCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZmV0Y2ggdGhyZWUgMj4gc3RkZXJyLnRocmVlICYmCisJdGVzdF9jbXAgZXhwZWN0LnRocmVlIHN0ZGVyci50aHJlZQorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTA5LWdpdC1zdm4tbXVsdGktZ2xvYi5zaCBiL3QvdDkxMDktZ2l0LXN2bi1tdWx0aS1nbG9iLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMzMThmOWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTA5LWdpdC1zdm4tbXVsdGktZ2xvYi5zaApAQCAtMCwwICsxLDE2MCBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZ2xvYmJpbmcgcmVmc3BlY3MnCisuIC4vbGliLWdpdC1zdm4uc2gKKworY2F0ID4gZXhwZWN0LmVuZCA8PEVPRgordGhlIGVuZAoraGkKK3N0YXJ0IGEgbmV3IGJyYW5jaAoraW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcmVmc3BlYyBnbG9iYmluZycgJworCW1rZGlyIC1wIHRydW5rL3NyYy9hIHRydW5rL3NyYy9iIHRydW5rL2RvYyAmJgorCWVjaG8gImhlbGxvIHdvcmxkIiA+IHRydW5rL3NyYy9hL3JlYWRtZSAmJgorCWVjaG8gImdvb2RieWUgd29ybGQiID4gdHJ1bmsvc3JjL2IvcmVhZG1lICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdG1wICYmCisJKAorCQljZCB0bXAgJiYKKwkJbWtkaXIgYnJhbmNoZXMgYnJhbmNoZXMvdjEgdGFncyAmJgorCQlzdm5fY21kIGFkZCBicmFuY2hlcyB0YWdzICYmCisJCXN2bl9jbWQgY3AgdHJ1bmsgYnJhbmNoZXMvdjEvc3RhcnQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInN0YXJ0IGEgbmV3IGJyYW5jaCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvICJoaSIgPj4gYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImhleSIgPj4gYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2EvcmVhZG1lICYmCisJCXBva2UgYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2EvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJoaSIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGNwIGJyYW5jaGVzL3YxL3N0YXJ0IHRhZ3MvZW5kICYmCisJCWVjaG8gImJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImF5ZSIgPj4gdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCisJCXBva2UgdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0aGUgZW5kIiAmJgorCQllY2hvICJieWVieWUiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibm90aGluZyB0byBzZWUgaGVyZSIKKwkpICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorCSAgICAgICAgICAgICAgICAgInRydW5rL3NyYy9hOnJlZnMvcmVtb3Rlcy90cnVuayIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAgICAgICJicmFuY2hlcy8qLyovc3JjL2E6cmVmcy9yZW1vdGVzL2JyYW5jaGVzLyovKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnRhZ3NcCisJICAgICAgICAgICAgICAgICAidGFncy8qL3NyYy9hOnJlZnMvcmVtb3Rlcy90YWdzLyoiICYmCisJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdGFncy9lbmQgfCBcCisJICAgIHNlZCAtZSAicy9eLlx7NDFcfS8vIiA+IG91dHB1dC5lbmQgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZW5kIG91dHB1dC5lbmQgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy9lbmR+MWAiID0gXAorCQkiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JyYW5jaGVzL3YxL3N0YXJ0YCIgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvdjEvc3RhcnR+MmAiID0gXAorCQkiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RydW5rYCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL2VuZEAzCisJJworCitlY2hvIHRyeSB0byB0cnkgPiBleHBlY3QudHdvCitlY2hvIG5vdGhpbmcgdG8gc2VlIGhlcmUgPj4gZXhwZWN0LnR3bworY2F0IGV4cGVjdC5lbmQgPj4gZXhwZWN0LnR3bworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGxlZnQtaGFuZC1zaWRlIG9ubHkgZ2xvYmJpbmcnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by5mZXRjaCB0cnVuazpyZWZzL3JlbW90ZXMvdHdvL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by5icmFuY2hlcyBcCisJICAgICAgICAgICAgICAgICAiYnJhbmNoZXMvKi8qOnJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvKi8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28udGFncyBcCisJICAgICAgICAgICAgICAgICAidGFncy8qOnJlZnMvcmVtb3Rlcy90d28vdGFncy8qIiAmJgorCSgKKwkJY2QgdG1wICYmCisJCWVjaG8gInRyeSB0cnkiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkpICYmCisJZ2l0IHN2biBmZXRjaCB0d28gJiYKKwl0ZXN0IGBnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZCB8IHdjIC1sYCAtZXEgNiAmJgorCXRlc3QgYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3YxL3N0YXJ0IHwgd2MgLWxgIC1lcSAzICYmCisJdGVzdCBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3YxL3N0YXJ0fjJgID0gXAorCSAgICAgYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by90cnVua2AgJiYKKwl0ZXN0IGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmR+M2AgPSBcCisJICAgICBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3YxL3N0YXJ0YCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kIHwgXAorCSAgICBzZWQgLWUgInMvXi5cezQxXH0vLyIgPiBvdXRwdXQudHdvICYmCisJdGVzdF9jbXAgZXhwZWN0LnR3byBvdXRwdXQudHdvCisJJworY2F0ID4gZXhwZWN0LmZvdXIgPDxFT0YKK2FkaW9zCithZGRpbmcgbW9yZQorQ2hhbmdlZCAyIGluIHYyL3N0YXJ0CitBbm90aGVyIHZlcnNpb25lZCBicmFuY2gKK2luaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFub3RoZXIgYnJhbmNoJyAnCisJKAorCQljZCB0bXAgJiYKKwkJbWtkaXIgYnJhbmNoZXMvdjIgJiYKKwkJc3ZuX2NtZCBhZGQgYnJhbmNoZXMvdjIgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy92Mi9zdGFydCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQW5vdGhlciB2ZXJzaW9uZWQgYnJhbmNoIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gImhlbGxvIiA+PiBicmFuY2hlcy92Mi9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy92Mi9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiaG93ZHkiID4+IGJyYW5jaGVzL3YyL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL3YyL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQ2hhbmdlZCAyIGluIHYyL3N0YXJ0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvdjIvc3RhcnQgdGFncy9uZXh0ICYmCisJCWVjaG8gImJ5ZSIgPj4gdGFncy9uZXh0L3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiYXllIiA+PiB0YWdzL25leHQvc3JjL2EvcmVhZG1lICYmCisJCXBva2UgdGFncy9uZXh0L3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYWRkaW5nIG1vcmUiICYmCisJCWVjaG8gImJ5ZWJ5ZSIgPj4gdGFncy9uZXh0L3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFkaW9zIgorCSkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuZm91ci51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLmZldGNoIHRydW5rOnJlZnMvcmVtb3Rlcy9mb3VyL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIuYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyovKjpyZWZzL3JlbW90ZXMvZm91ci9icmFuY2hlcy8qLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIudGFncyBcCisJICAgICAgICAgICAgICAgICAidGFncy8qOnJlZnMvcmVtb3Rlcy9mb3VyL3RhZ3MvKiIgJiYKKwlnaXQgc3ZuIGZldGNoIGZvdXIgJiYKKwl0ZXN0IGBnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL2ZvdXIvdGFncy9uZXh0IHwgd2MgLWxgIC1lcSA1ICYmCisJdGVzdCBgZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy9mb3VyL2JyYW5jaGVzL3YyL3N0YXJ0IHwgd2MgLWxgIC1lcSAzICYmCisJdGVzdCBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZm91ci9icmFuY2hlcy92Mi9zdGFydH4yYCA9IFwKKwkgICAgIGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9mb3VyL3RydW5rYCAmJgorCXRlc3QgYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2ZvdXIvdGFncy9uZXh0fjJgID0gXAorCSAgICAgYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2ZvdXIvYnJhbmNoZXMvdjIvc3RhcnRgICYmCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHJlZnMvcmVtb3Rlcy9mb3VyL3RhZ3MvbmV4dCB8IFwKKwkgICAgc2VkIC1lICJzL14uXHs0MVx9Ly8iID4gb3V0cHV0LmZvdXIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZm91ciBvdXRwdXQuZm91cgorCScKKworZWNobyAiT25seSBvbmUgc2V0IG9mIHdpbGRjYXJkIGRpcmVjdG9yaWVzIiBcCisgICAgICIoZS5nLiAnKicgb3IgJyovKi8qJykgaXMgc3VwcG9ydGVkOiAnYnJhbmNoZXMvKi90LyonIiA+IGV4cGVjdC50aHJlZQorZWNobyAiIiA+PiBleHBlY3QudGhyZWUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkaXNhbGxvdyBtdWx0aXBsZSBnbG9icycgJworCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50aHJlZS51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50aHJlZS5mZXRjaCBcCisJICAgICAgICAgICAgICAgICB0cnVuazpyZWZzL3JlbW90ZXMvdGhyZWUvdHJ1bmsgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUuYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyovdC8qOnJlZnMvcmVtb3Rlcy90aHJlZS9icmFuY2hlcy8qLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLnRhZ3MgXAorCSAgICAgICAgICAgICAgICAgInRhZ3MvKjpyZWZzL3JlbW90ZXMvdGhyZWUvdGFncy8qIiAmJgorCSgKKwkJY2QgdG1wICYmCisJCWVjaG8gInRyeSB0cnkiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBmZXRjaCB0aHJlZSAyPiBzdGRlcnIudGhyZWUgJiYKKwl0ZXN0X2NtcCBleHBlY3QudGhyZWUgc3RkZXJyLnRocmVlCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTAtZ2l0LXN2bi11c2Utc3ZtLXByb3BzLnNoIGIvdC90OTExMC1naXQtc3ZuLXVzZS1zdm0tcHJvcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTA2ZTRjNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTAtZ2l0LXN2bi11c2Utc3ZtLXByb3BzLnNoCkBAIC0wLDAgKzEsNjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gdXNlU3ZtUHJvcHMgdGVzdCcKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZtIHJlcG8nICcKKwlzdm5hZG1pbiBsb2FkIC1xICIkcmF3c3ZucmVwbyIgPCAiJFRFU1RfRElSRUNUT1JZIi90OTExMC9zdm0uZHVtcCAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcnIgLWkgYmFyICIkc3ZucmVwbyIvbWlycm9yL2FyciAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcmdoIC1pIGRpciAiJHN2bnJlcG8iL21pcnJvci9hcmdoICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyZ2ggLWkgZSBcCisJICAiJHN2bnJlcG8iL21pcnJvci9hcmdoL2EvYi9jL2QvZSAmJgorCWdpdCBjb25maWcgc3ZuLnVzZVN2bVByb3BzIHRydWUgJiYKKwlnaXQgc3ZuIGZldGNoIC0tYWxsCisJJworCit1dWlkPTE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OQorCitiYXJfdXJsPWh0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwby9iYXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXRhZGF0YSBmb3IgL2JhcicgIgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2JhciB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGJhcl91cmxAMTIgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn4xIHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkYmFyX3VybEAxMSAkdXVpZCQnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjIgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRiYXJfdXJsQDEwICR1dWlkJCcgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXJ+MyB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGJhcl91cmxAOSAkdXVpZCQnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjQgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRiYXJfdXJsQDYgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn41IHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkYmFyX3VybEAxICR1dWlkJCcKKwkiCisKK2VfdXJsPWh0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwby9kaXIvYS9iL2MvZC9lCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWV0YWRhdGEgZm9yIC9kaXIvYS9iL2MvZC9lJyAiCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZSB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGVfdXJsQDEgJHV1aWQkJworCSIKKworZGlyX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vZGlyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWV0YWRhdGEgZm9yIC9kaXInICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9kaXIgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRkaXJfdXJsQDIgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Rpcn4xIHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkZGlyX3VybEAxICR1dWlkJCcKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgY29tbWl0IGJhc2VkIG9uIFNWTiByZXZpc2lvbiBudW1iZXInICIKKyAgICAgICAgZ2l0IHN2biBmaW5kLXJldiByMTIgfAorCSAgICBncmVwIGBnaXQgcmV2LXBhcnNlIEhFQURgCisgICAgICAgICIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgcmViYXNlJyAiCisJZ2l0IHN2biByZWJhc2UKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExMC9zdm0uZHVtcCBiL3QvdDkxMTAvc3ZtLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3OTljMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTAvc3ZtLmR1bXAKQEAgLTAsMCArMSw1MTEgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IGRlNTk3M2M2LTU0NWQtNDFkYS1hZGVkLWMyNjVmOTAzOWU3NAorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNjo1NDo1OS43OTMxMDRaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyMDAKK0NvbnRlbnQtbGVuZ3RoOiAyMDAKKworSyA3Citzdm46bG9nCitWIDQwCitTVk06IGluaXRpYWxpemluZyBtaXJyb3IgZm9yIC9taXJyb3IvYXJyCitLIDEwCitzdm46YXV0aG9yCitWIDMKK3N2bQorSyAxMQorc3ZtOmhlYWRyZXYKK1YgMzkKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OTowCisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDY6NTU6MDAuMTIxNjQ3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNDQKK0NvbnRlbnQtbGVuZ3RoOiA0NAorCitLIDEwCitzdm06bWlycm9yCitWIDEyCisvbWlycm9yL2FycgorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvcgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgMTAKK3N2bTpzb3VyY2UKK1YgMjkKK2h0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwbyEvYmFyCitLIDgKK3N2bTp1dWlkCitWIDM2CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTgyCitDb250ZW50LWxlbmd0aDogMTgyCisKK0sgNworc3ZuOmxvZworViAxOAoraW1wb3J0IGZvciBnaXQtc3ZuCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MQorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjUyLjEwODg0N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcnIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyAxMAorc3ZtOnNvdXJjZQorViAyOQoraHR0cDovL21heW9uYWlzZS9zdm5yZXBvIS9iYXIKK0sgOAorc3ZtOnV1aWQKK1YgMzYKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OQorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyL3p6egorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogMzNiMDJiYzE1Y2U5NTU3ZDJkZDg0ODRkNThmOTVhYzQKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK3p6egorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMjMwCitDb250ZW50LWxlbmd0aDogMjMwCisKK0sgNworc3ZuOmxvZworViA2NgorbmV3IHN5bWxpbmsgaXMgYWRkZWQgdG8gYSBmaWxlIHRoYXQgd2FzIGFsc28ganVzdCBtYWRlIGV4ZWN1dGFibGUKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDExCitzdm06aGVhZHJldgorViAzOQorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowMS42ODY4OTFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyL3p6egorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNgorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogMzNiMDJiYzE1Y2U5NTU3ZDJkZDg0ODRkNThmOTVhYzQKK0NvbnRlbnQtbGVuZ3RoOiA0MAorCitLIDE0Citzdm46ZXhlY3V0YWJsZQorViAxCisqCitQUk9QUy1FTkQKK3p6egorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTkyCitDb250ZW50LWxlbmd0aDogMTkyCisKK0sgNworc3ZuOmxvZworViAyOAorL2Jhci9kIHNob3VsZCBiZSBpbiB0aGUgbG9nCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgMzkKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OTo5CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDcuNjg2NTUyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWlycm9yL2Fyci9kCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiAwYmVlODliMDdhMjQ4ZTI3YzgzZmMzZDU5NTEyMTNjMQorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorYWJjCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxODUKK0NvbnRlbnQtbGVuZ3RoOiAxODUKKworSyA3Citzdm46bG9nCitWIDIwCithZGQgYSBuZXcgZGlyZWN0b3J5CisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgNDAKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OToxMAorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA4LjQwNTk1M1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcnIvbmV3ZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcnIvbmV3ZGlyL2RpcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogOWNkNTk5YTM1MjM4OThlNmExMmUxM2VjNzg3ZGE1MGEKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK25ldworCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTk2CitDb250ZW50LWxlbmd0aDogMTk2CisKK0sgNworc3ZuOmxvZworViAzMQorbW9kaWZ5IGEgZmlsZSBpbiBuZXcgZGlyZWN0b3J5CisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgNDAKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OToxMQorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA5LjEyNjY0NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcnIvbmV3ZGlyL2RpcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiBhOTUwZTIwMzMyMzU4ZTUyM2E1ZTlkNTcxZTQ3ZmE2NAorQ29udGVudC1sZW5ndGg6IDgKKworbmV3Citmb28KKworCitSZXZpc2lvbi1udW1iZXI6IDcKK1Byb3AtY29udGVudC1sZW5ndGg6IDE3OQorQ29udGVudC1sZW5ndGg6IDE3OQorCitLIDcKK3N2bjpsb2cKK1YgMTQKK3VwZGF0ZSAvYmFyL2QKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDExCitzdm06aGVhZHJldgorViA0MAorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjEyCisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDkuODQ2MjIxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWlycm9yL2Fyci9kCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDdhYmI3OGRlN2YyNzU2Y2E4YjUxMWNiYzg3OWZkNWU3CitDb250ZW50LWxlbmd0aDogNAorCitjYmEKKworCitSZXZpc2lvbi1udW1iZXI6IDgKK1Byb3AtY29udGVudC1sZW5ndGg6IDIwMQorQ29udGVudC1sZW5ndGg6IDIwMQorCitLIDcKK3N2bjpsb2cKK1YgNDEKK1NWTTogaW5pdGlhbGl6aW5nIG1pcnJvciBmb3IgL21pcnJvci9hcmdoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK3N2bQorSyAxMQorc3ZtOmhlYWRyZXYKK1YgMzkKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OTowCisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDY6NTY6MDMuNzAzNjc3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNTcKK0NvbnRlbnQtbGVuZ3RoOiA1NworCitLIDEwCitzdm06bWlycm9yCitWIDI1CisvbWlycm9yL2FyZ2gKKy9taXJyb3IvYXJyCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyAxMAorc3ZtOnNvdXJjZQorViAyOQoraHR0cDovL21heW9uYWlzZS9zdm5yZXBvIS9kaXIKK0sgOAorc3ZtOnV1aWQKK1YgMzYKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OQorUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiA5CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxODIKK0NvbnRlbnQtbGVuZ3RoOiAxODIKKworSyA3Citzdm46bG9nCitWIDE4CitpbXBvcnQgZm9yIGdpdC1zdm4KK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgMzkKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OToxCisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTA6NTIuMTA4ODQ3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyAxMAorc3ZtOnNvdXJjZQorViAyOQoraHR0cDovL21heW9uYWlzZS9zdm5yZXBvIS9kaXIKK0sgOAorc3ZtOnV1aWQKK1YgMzYKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OQorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9hCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoL2EvYgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9hL2IvYworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9hL2IvYy9kCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoL2EvYi9jL2QvZQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9hL2IvYy9kL2UvZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogOQorVGV4dC1jb250ZW50LW1kNTogM2ZkNDZmZTQ2ZmNkY2YwNjJjODAyY2E2MGRjODI2ZDUKK0NvbnRlbnQtbGVuZ3RoOiAxOQorCitQUk9QUy1FTkQKK2RlZXAgZGlyCisKKworUmV2aXNpb24tbnVtYmVyOiAxMAorUHJvcC1jb250ZW50LWxlbmd0aDogMTk3CitDb250ZW50LWxlbmd0aDogMTk3CisKK0sgNworc3ZuOmxvZworViAzMwordHJ5IGEgZGVlcCAtLXJtZGlyIHdpdGggYSBjb21taXQKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDExCitzdm06aGVhZHJldgorViAzOQorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjIKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMDo1NC44NDcwMTVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9maWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA5CitOb2RlLWNvcHlmcm9tLXBhdGg6IG1pcnJvci9hcmdoL2EvYi9jL2QvZS9maWxlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA5CitUZXh0LWNvbnRlbnQtbWQ1OiAzZmQ0NmZlNDZmY2RjZjA2MmM4MDJjYTYwZGM4MjZkNQorQ29udGVudC1sZW5ndGg6IDkKKworZGVlcCBkaXIKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoL2EKK05vZGUtYWN0aW9uOiBkZWxldGUKKworCmRpZmYgLS1naXQgYS90L3Q5MTExLWdpdC1zdm4tdXNlLXN2bnN5bmMtcHJvcHMuc2ggYi90L3Q5MTExLWdpdC1zdm4tdXNlLXN2bnN5bmMtcHJvcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmQwODFjMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTEtZ2l0LXN2bi11c2Utc3Zuc3luYy1wcm9wcy5zaApAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHVzZVN2bnN5bmNQcm9wcyB0ZXN0JworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm5zeW5jIHJlcG8nICcKKwlzdm5hZG1pbiBsb2FkIC1xICIkcmF3c3ZucmVwbyIgPCAiJFRFU1RfRElSRUNUT1JZIi90OTExMS9zdm5zeW5jLmR1bXAgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJyIC1pIGJhciAiJHN2bnJlcG8iL2JhciAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcmdoIC1pIGRpciAiJHN2bnJlcG8iL2RpciAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcmdoIC1pIGUgIiRzdm5yZXBvIi9kaXIvYS9iL2MvZC9lICYmCisJZ2l0IGNvbmZpZyBzdm4udXNlU3Zuc3luY1Byb3BzIHRydWUgJiYKKwlnaXQgc3ZuIGZldGNoIC0tYWxsCisJJworCit1dWlkPTE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OQorCitiYXJfdXJsPWh0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwby9iYXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXRhZGF0YSBmb3IgL2JhcicgIgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2JhciB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGJhcl91cmxAMTIgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn4xIHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkYmFyX3VybEAxMSAkdXVpZCQnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjIgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRiYXJfdXJsQDEwICR1dWlkJCcgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXJ+MyB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGJhcl91cmxAOSAkdXVpZCQnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjQgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRiYXJfdXJsQDYgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn41IHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkYmFyX3VybEAxICR1dWlkJCcKKwkiCisKK2VfdXJsPWh0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwby9kaXIvYS9iL2MvZC9lCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWV0YWRhdGEgZm9yIC9kaXIvYS9iL2MvZC9lJyAiCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZSB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGVfdXJsQDEgJHV1aWQkJworCSIKKworZGlyX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vZGlyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWV0YWRhdGEgZm9yIC9kaXInICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9kaXIgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRkaXJfdXJsQDIgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Rpcn4xIHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkZGlyX3VybEAxICR1dWlkJCcKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExMS9zdm5zeW5jLmR1bXAgYi90L3Q5MTExL3N2bnN5bmMuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTlmYTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTExMS9zdm5zeW5jLmR1bXAKQEAgLTAsMCArMSw1NjAgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IGI0YmZlMzVlLWYyNTYtNDA5Ni04NzRjLTA4YzU2MzllY2FkNworCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDI0MAorQ29udGVudC1sZW5ndGg6IDI0MAorCitLIDE4Citzdm46c3luYy1mcm9tLXV1aWQKK1YgMzYKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OQorSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDI0Citzdm46c3luYy1sYXN0LW1lcmdlZC1yZXYKK1YgMgorMTIKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTA6NTIuMDE3NTUyWgorSyAxNworc3ZuOnN5bmMtZnJvbS11cmwKK1YgMjQKK2h0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwbworUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIwCitDb250ZW50LWxlbmd0aDogMTIwCisKK0sgNworc3ZuOmxvZworViAxOAoraW1wb3J0IGZvciBnaXQtc3ZuCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTA6NTIuMTA4ODQ3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJhci96enoKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDMzYjAyYmMxNWNlOTU1N2QyZGQ4NDg0ZDU4Zjk1YWM0CitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECit6enoKKworCitOb2RlLXBhdGg6IGRpcgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBkaXIvYQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBkaXIvYS9iCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGRpci9hL2IvYworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBkaXIvYS9iL2MvZAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBkaXIvYS9iL2MvZC9lCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGRpci9hL2IvYy9kL2UvZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogOQorVGV4dC1jb250ZW50LW1kNTogM2ZkNDZmZTQ2ZmNkY2YwNjJjODAyY2E2MGRjODI2ZDUKK0NvbnRlbnQtbGVuZ3RoOiAxOQorCitQUk9QUy1FTkQKK2RlZXAgZGlyCisKKworTm9kZS1wYXRoOiBleGVjLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDM1CitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogM2UyYjMxYzcyMTgxYjg3MTQ5ZmY5OTVlNzIwMmMwZTMKK0NvbnRlbnQtbGVuZ3RoOiA0NQorCitLIDE0Citzdm46ZXhlY3V0YWJsZQorViAwCisKK1BST1BTLUVORAorIyEvYmluL3NoCisKKworTm9kZS1wYXRoOiBmb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGQzYjA3Mzg0ZDExM2VkZWM0OWVhYTYyMzhhZDVmZjAwCitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECitmb28KKworCitOb2RlLXBhdGg6IGZvby5saW5rCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDMzCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiAxMDQzMTQ2ZTQ5ZWYwMmNhYjEyZWVmODY1Y2IzNGZmMworQ29udGVudC1sZW5ndGg6IDQxCisKK0sgMTEKK3N2bjpzcGVjaWFsCitWIDEKKyoKK1BST1BTLUVORAorbGluayBmb28KKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzUKK0NvbnRlbnQtbGVuZ3RoOiAxMzUKKworSyA3Citzdm46bG9nCitWIDMzCit0cnkgYSBkZWVwIC0tcm1kaXIgd2l0aCBhIGNvbW1pdAorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTA6NTQuODQ3MDE1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZGlyL2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogZGlyL2EvYi9jL2QvZS9maWxlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA5CitUZXh0LWNvbnRlbnQtbWQ1OiAzZmQ0NmZlNDZmY2RjZjA2MmM4MDJjYTYwZGM4MjZkNQorQ29udGVudC1sZW5ndGg6IDkKKworZGVlcCBkaXIKKworCitOb2RlLXBhdGg6IGRpci9hCitOb2RlLWFjdGlvbjogZGVsZXRlCisKKworTm9kZS1wYXRoOiBmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IGRpci9hL2IvYy9kL2UvZmlsZQorVGV4dC1jb250ZW50LWxlbmd0aDogOQorVGV4dC1jb250ZW50LW1kNTogM2ZkNDZmZTQ2ZmNkY2YwNjJjODAyY2E2MGRjODI2ZDUKK0NvbnRlbnQtbGVuZ3RoOiA5CisKK2RlZXAgZGlyCisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzYKK0NvbnRlbnQtbGVuZ3RoOiAxMzYKKworSyA3Citzdm46bG9nCitWIDM0CityZW1vdmUgZXhlY3V0YWJsZSBiaXQgZnJvbSBhIGZpbGUKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjU4LjIzMjY5MVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGV4ZWMuc2gKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbWQ1OiAzZTJiMzFjNzIxODFiODcxNDlmZjk5NWU3MjAyYzBlMworQ29udGVudC1sZW5ndGg6IDIwCisKK1BST1BTLUVORAorIyEvYmluL3NoCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzEKK0NvbnRlbnQtbGVuZ3RoOiAxMzEKKworSyA3Citzdm46bG9nCitWIDI5CithZGQgZXhlY3V0YWJsZSBiaXQgYmFjayBmaWxlCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMDo1OS42NjY1NjBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBleGVjLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDM2CitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogM2UyYjMxYzcyMTgxYjg3MTQ5ZmY5OTVlNzIwMmMwZTMKK0NvbnRlbnQtbGVuZ3RoOiA0NgorCitLIDE0Citzdm46ZXhlY3V0YWJsZQorViAxCisqCitQUk9QUy1FTkQKKyMhL2Jpbi9zaAorCisKK1JldmlzaW9uLW51bWJlcjogNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTU0CitDb250ZW50LWxlbmd0aDogMTU0CisKK0sgNworc3ZuOmxvZworViA1MgorZXhlY3V0YWJsZSBmaWxlIGJlY29tZXMgYSBzeW1saW5rIHRvIGJhci96enogKGZpbGUpCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowMC42NzY0OTVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBleGVjLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDMzCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMgorVGV4dC1jb250ZW50LW1kNTogZjEzODY5MzM3MTY2NWNjMTE3NzQyNTA4NzYxZDY4NGQKK0NvbnRlbnQtbGVuZ3RoOiA0NQorCitLIDExCitzdm46c3BlY2lhbAorViAxCisqCitQUk9QUy1FTkQKK2xpbmsgYmFyL3p6egorCitSZXZpc2lvbi1udW1iZXI6IDYKK1Byb3AtY29udGVudC1sZW5ndGg6IDE2OAorQ29udGVudC1sZW5ndGg6IDE2OAorCitLIDcKK3N2bjpsb2cKK1YgNjYKK25ldyBzeW1saW5rIGlzIGFkZGVkIHRvIGEgZmlsZSB0aGF0IHdhcyBhbHNvIGp1c3QgbWFkZSBleGVjdXRhYmxlCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowMS42ODY4OTFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIvenp6CitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDM2CitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiAzM2IwMmJjMTVjZTk1NTdkMmRkODQ4NGQ1OGY5NWFjNAorQ29udGVudC1sZW5ndGg6IDQwCisKK0sgMTQKK3N2bjpleGVjdXRhYmxlCitWIDEKKyoKK1BST1BTLUVORAorenp6CisKKworTm9kZS1wYXRoOiBleGVjLTIuc2gKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDUKK05vZGUtY29weWZyb20tcGF0aDogZXhlYy5zaAorVGV4dC1jb250ZW50LWxlbmd0aDogMTIKK1RleHQtY29udGVudC1tZDU6IGYxMzg2OTMzNzE2NjVjYzExNzc0MjUwODc2MWQ2ODRkCitDb250ZW50LWxlbmd0aDogMTIKKworbGluayBiYXIvenp6CisKK1JldmlzaW9uLW51bWJlcjogNworUHJvcC1jb250ZW50LWxlbmd0aDogMTM2CitDb250ZW50LWxlbmd0aDogMTM2CisKK0sgNworc3ZuOmxvZworViAzNAorbW9kaWZ5IGEgc3ltbGluayB0byBiZWNvbWUgYSBmaWxlCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowMi42NzcwMzVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBleGVjLTIuc2gKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDhlOTJlZmY5ZTkxMTg4NmNlZGUyN2Q0MjBmODljNzM1CitDb250ZW50LWxlbmd0aDogMTkKKworUFJPUFMtRU5ECitnaXQgaGVscAorCisKK1JldmlzaW9uLW51bWJlcjogOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTA5CitDb250ZW50LWxlbmd0aDogMTA5CisKK0sgNworc3ZuOmxvZworViA4CivDqcOv4oiPCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowMy42NzY4NjJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBleGVjLTIuc2gKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTcKK1RleHQtY29udGVudC1tZDU6IDQ5ODgxOTU0MDYzY2YyNmNhNDhjMjEyMzk2YTk1N2NhCitDb250ZW50LWxlbmd0aDogMTcKKworZ2l0IGhlbHAKKyMgaGVsbG8KKworCitSZXZpc2lvbi1udW1iZXI6IDkKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMAorQ29udGVudC1sZW5ndGg6IDEzMAorCitLIDcKK3N2bjpsb2cKK1YgMjgKKy9iYXIvZCBzaG91bGQgYmUgaW4gdGhlIGxvZworCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDcuNjg2NTUyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyL2QKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDBiZWU4OWIwN2EyNDhlMjdjODNmYzNkNTk1MTIxM2MxCitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECithYmMKKworCitSZXZpc2lvbi1udW1iZXI6IDEwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjIKK0NvbnRlbnQtbGVuZ3RoOiAxMjIKKworSyA3Citzdm46bG9nCitWIDIwCithZGQgYSBuZXcgZGlyZWN0b3J5CisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowOC40MDU5NTNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIvbmV3ZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJhci9uZXdkaXIvZGlyCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiA5Y2Q1OTlhMzUyMzg5OGU2YTEyZTEzZWM3ODdkYTUwYQorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorbmV3CisKKworUmV2aXNpb24tbnVtYmVyOiAxMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTMzCitDb250ZW50LWxlbmd0aDogMTMzCisKK0sgNworc3ZuOmxvZworViAzMQorbW9kaWZ5IGEgZmlsZSBpbiBuZXcgZGlyZWN0b3J5CisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowOS4xMjY2NDVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIvbmV3ZGlyL2RpcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiBhOTUwZTIwMzMyMzU4ZTUyM2E1ZTlkNTcxZTQ3ZmE2NAorQ29udGVudC1sZW5ndGg6IDgKKworbmV3Citmb28KKworCitSZXZpc2lvbi1udW1iZXI6IDEyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyA3Citzdm46bG9nCitWIDE0Cit1cGRhdGUgL2Jhci9kCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowOS44NDYyMjFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIvZAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiA3YWJiNzhkZTdmMjc1NmNhOGI1MTFjYmM4NzlmZDVlNworQ29udGVudC1sZW5ndGg6IDQKKworY2JhCmRpZmYgLS1naXQgYS90L3Q5MTEyLWdpdC1zdm4tbWQ1bGVzcy1maWxlLnNoIGIvdC90OTExMi1naXQtc3ZuLW1kNWxlc3MtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNjFkNjcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTExMi1naXQtc3ZuLW1kNWxlc3MtZmlsZS5zaApAQCAtMCwwICsxLDQ3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB0aGF0IGdpdCBoYW5kbGVzIGFuIHN2biByZXBvc2l0b3J5IHdpdGggbWlzc2luZyBtZDVzdW1zJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworIyBMb2FkaW5nIGEgbm9kZSBmcm9tIGEgc3ZuIGR1bXBmaWxlIHdpdGhvdXQgYSBUZXh0LUNvbnRlbnQtTGVuZ3RoCisjIGZpZWxkIGNhdXNlcyBzdm4gdG8gbmVnbGVjdCB0byBzdG9yZSBvciByZXBvcnQgYW4gbWQ1c3VtLiAgKGl0IHdpbGwKKyMgY2FsY3VsYXRlIG9uZSBpZiB5b3UgaGFkIHB1dCBUZXh0LUNvbnRlbnQtTGVuZ3RoOiAwKS4gIFRoaXMgc2hvd2VkCisjIHVwIGluIGEgcmVwb3NpdG9yeSBjcmV0ZWQgd2l0aCBjdnMyc3ZuLgorCitjYXQgPiBkdW1wZmlsZS5zdm4gPDxFT0YKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAxCisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogOTgKK0NvbnRlbnQtbGVuZ3RoOiA5OAorCitLIDcKK3N2bjpsb2cKK1YgMAorCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3Rlc3QKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDUtMDZUMTI6Mzc6MDEuMTUzMzM5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWQ1bGVzcy1maWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biBkdW1wZmlsZScgJ3N2bmFkbWluIGxvYWQgIiRyYXdzdm5yZXBvIiA8IGR1bXBmaWxlLnN2bicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCByZXZpc2lvbnMgZnJvbSBzdm4nICdnaXQgc3ZuIGZldGNoJwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTEzLWdpdC1zdm4tZGNvbW1pdC1uZXctZmlsZS5zaCBiL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4NDc5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTEzLWdpdC1zdm4tZGNvbW1pdC1uZXctZmlsZS5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCisjIERvbid0IHJ1biB0aGlzIHRlc3QgYnkgZGVmYXVsdCB1bmxlc3MgdGhlIHVzZXIgcmVhbGx5IHdhbnRzIGl0CisjIEkgZG9uJ3QgbGlrZSB0aGUgaWRlYSBvZiB0YWtpbmcgYSBwb3J0IGFuZCBwb3NzaWJseSBsZWF2aW5nIGEKKyMgZGFlbW9uIHJ1bm5pbmcgb24gYSB1c2VycyBzeXN0ZW0gaWYgdGhlIHRlc3QgZmFpbHMuCisjIE5vdCBhbGwgZ2l0IHVzZXJzIHdpbGwgbmVlZCB0byBpbnRlcmFjdCB3aXRoIFNWTi4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IG5ldyBmaWxlcyBvdmVyIHN2bjovLyB0ZXN0JworCisuIC4vbGliLWdpdC1zdm4uc2gKKworcmVxdWlyZV9zdm5zZXJ2ZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCB0cmFja2luZyBhbiBlbXB0eSByZXBvJyAnCisJc3ZuX2NtZCBta2RpciAtbSAiZW1wdHkgZGlyIiAiJHN2bnJlcG8iL2VtcHR5LWRpciAmJgorCWVjaG8gIltnZW5lcmFsXSIgPiAiJHJhd3N2bnJlcG8iL2NvbmYvc3Zuc2VydmUuY29uZiAmJgorCWVjaG8gYW5vbi1hY2Nlc3MgPSB3cml0ZSA+PiAiJHJhd3N2bnJlcG8iL2NvbmYvc3Zuc2VydmUuY29uZiAmJgorCXN0YXJ0X3N2bnNlcnZlICYmCisJZ2l0IHN2biBpbml0IHN2bjovLzEyNy4wLjAuMTokU1ZOU0VSVkVfUE9SVCAmJgorCWdpdCBzdm4gZmV0Y2gKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmaWxlcyBpbiBuZXcgZGlyZWN0b3J5IHdpdGggZGNvbW1pdCcgIgorCW1rZGlyIGdpdC1uZXctZGlyICYmCisJZWNobyBoZWxsbyA+IGdpdC1uZXctZGlyL3dvcmxkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBnaXQtbmV3LWRpci93b3JsZCAmJgorCWdpdCBjb21taXQgLW0gaGVsbG8gJiYKKwlzdGFydF9zdm5zZXJ2ZSAmJgorCWdpdCBzdm4gZGNvbW1pdAorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaCBiL3QvdDkxMTQtZ2l0LXN2bi1kY29tbWl0LW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwNzc4NTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaApAQCAtMCwwICsxLDk1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIyBCYXNlZCBvbiBhIHNjcmlwdCBieSBKb2FraW0gVGplcm5sdW5kIDxqb2FraW0udGplcm5sdW5kQHRyYW5zbW9kZS5zZT4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IGhhbmRsZXMgbWVyZ2VzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworYmlnX3RleHRfYmxvY2sgKCkgeworY2F0IDw8IEVPRgorIworIyAoQykgQ29weXJpZ2h0IDIwMDAgLSAyMDA1CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCVNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKK0VPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm4gcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBteXN2bndvcmsgJiYKKwlta2RpciAtcCBteXN2bndvcmsvdHJ1bmsgJiYKKwkoCisJCWNkIG15c3Zud29yayAmJgorCQliaWdfdGV4dF9ibG9jayA+PnRydW5rL1JFQURNRSAmJgorCQlzdm5fY21kIGFkZCB0cnVuayAmJgorCQlzdm5fY21kIGNpIC1tICJmaXJzdCBjb21taXQiIHRydW5rCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZ2l0IG1pcnJvciBhbmQgbWVyZ2UnICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAtdCB0YWdzIC1UIHRydW5rIC1iIGJyYW5jaGVzICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCBjaGVja291dCAtLXRyYWNrIC1iIHN2biByZW1vdGVzL3RydW5rICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlICYmCisJZWNobyBuZXcgZmlsZSA+IG5ld19maWxlICYmCisJZ2l0IGFkZCBuZXdfZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gIk5ldyBmaWxlIiAmJgorCWVjaG8gaGVsbG8gPj4gUkVBRE1FICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiaGVsbG8iICYmCisJZWNobyBhZGQgc29tZSBzdHVmZiA+PiBuZXdfZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImFkZCBzb21lIHN0dWZmIiAmJgorCWdpdCBjaGVja291dCBzdm4gJiYKKwltdiAtZiBSRUFETUUgdG1wICYmCisJZWNobyBmcmllbmQgPiBSRUFETUUgJiYKKwljYXQgdG1wID4+IFJFQURNRSAmJgorCWdpdCBjb21taXQgLWEgLW0gImZyaWVuZCIgJiYKKwlnaXQgcHVsbCAuIG1lcmdlCisJJworCit0ZXN0X2RlYnVnICdnaXRrIC0tYWxsICYgc2xlZXAgMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHByZS1tZXJnZSBhbmNlc3RyeScgIgorCXRlc3QgeFxgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3N2bl4yXGAgPSBcCisJICAgICB4XGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWVyZ2VcYCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9oZWFkcy9zdm5eIHwgZ3JlcCAnXmZyaWVuZCQnCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGRjb21taXQgbWVyZ2VzJyAiCisJZ2l0IHN2biBkY29tbWl0CisJIgorCit0ZXN0X2RlYnVnICdnaXRrIC0tYWxsICYgc2xlZXAgMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHBvc3QtbWVyZ2UgYW5jZXN0cnknICIKKwl0ZXN0IHhcYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zdm5cYCA9IFwKKwkgICAgIHhcYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3RydW5rIFxgICYmCisJdGVzdCB4XGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvc3ZuXjJcYCA9IFwKKwkgICAgIHhcYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tZXJnZVxgICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL2hlYWRzL3N2bl4gfCBncmVwICdeZnJpZW5kJCcKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSBjb21taXQgbWVzc2FnZScgIgorCWdpdCByZXYtbGlzdCAtLXByZXR0eT1yYXcgLTEgcmVmcy9oZWFkcy9zdm4gfCBcCisJICBncmVwIFwiICAgIE1lcmdlIGJyYW5jaCAnbWVyZ2UnIGludG8gc3ZuXCIKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExNS1naXQtc3ZuLWRjb21taXQtZnVua3ktcmVuYW1lcy5zaCBiL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmE0OGU0MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2gKQEAgLTAsMCArMSw4OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKKworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGRjb21taXQgY2FuIGNvbW1pdCByZW5hbWVzIG9mIGZpbGVzIHdpdGggdWdseSBuYW1lcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgcmVwb3NpdG9yeSB3aXRoIHN0cmFuZ2UgbmFtZXMnICcKKwlzdm5hZG1pbiBsb2FkIC1xICIkcmF3c3ZucmVwbyIgPCAiJFRFU1RfRElSRUNUT1JZIi90OTExNS9mdW5reS1uYW1lcy5kdW1wICYmCisJc3RhcnRfaHR0cGQgZ3RrKworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggcmVwb3NpdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgZ2l0LXN2bgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZpbGUgaW4gZXhpc3RpbmcgdWdseSBhbmQgZW1wdHkgZGlyJyAnCisJbWtkaXIgLXAgIiN7YmFkX2RpcmVjdG9yeV9uYW1lfSIgJiYKKwllY2hvIGhpID4gIiN7YmFkX2RpcmVjdG9yeV9uYW1lfS8gZm9vIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiN7YmFkX2RpcmVjdG9yeV9uYW1lfS8gZm9vIiAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBmaWxlIGluIHVnbHkgcGFyZW50IiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHVnbHkgZmlsZScgJworCWdpdCBtdiAiI3tiYWRfZGlyZWN0b3J5X25hbWV9LyBmb28iICJmaWxlIG5hbWUgd2l0aCBmZWNlcyIgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUgdWdseSBmaWxlIiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHByZXR0eSBmaWxlJyAnCisJZWNobyA6eCA+IHByZXR0eSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcHJldHR5ICYmCisJZ2l0IGNvbW1pdCAtbSAicHJldHR5IDp4IiAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCW1rZGlyIC1wIHJlZ3VsYXJfZGlyX25hbWUgJiYKKwlnaXQgbXYgcHJldHR5IHJlZ3VsYXJfZGlyX25hbWUvcHJldHR5ICYmCisJZ2l0IGNvbW1pdCAtbSAibW92ZWQgcHJldHR5IGZpbGUiICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgcHJldHR5IGZpbGUgaW50byB1Z2x5IG9uZScgJworCWdpdCBtdiByZWd1bGFyX2Rpcl9uYW1lL3ByZXR0eSAiI3tiYWRfZGlyZWN0b3J5X25hbWV9LyBib29ib28iICYmCisJZ2l0IGNvbW1pdCAtbSBib29ib28gJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhIGZpbGUgd2l0aCBwbHVzIHNpZ25zJyAnCisJZWNobyAuLiA+ICtfKyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgK18rICYmCisJZ2l0IGNvbW1pdCAtbSBwbHVzICYmCisJbWtkaXIgZ3RrKyAmJgorCWdpdCBtdiArXysgZ3RrKy9fK18gJiYKKwlnaXQgY29tbWl0IC1tIHBsdXNfZGlyICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0aGUgcmVwb3NpdG9yeSB0byB0ZXN0IHJlYmFzZScgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB0ZXN0LXJlYmFzZSAmJgorCSgKKwkJY2QgdGVzdC1yZWJhc2UgJiYKKwkJZWNobyB0ZXN0LXJlYmFzZSA+dGVzdC1yZWJhc2UgJiYKKwkJZ2l0IGFkZCB0ZXN0LXJlYmFzZSAmJgorCQlnaXQgY29tbWl0IC1tIHRlc3QtcmViYXNlCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBhIGNvbW1pdCB0byB0ZXN0IHJlYmFzZScgJworCQllY2hvIHRlc3QtcmViYXNlLW1haW4gPiB0ZXN0LXJlYmFzZS1tYWluICYmCisJCWdpdCBhZGQgdGVzdC1yZWJhc2UtbWFpbiAmJgorCQlnaXQgY29tbWl0IC1tIHRlc3QtcmViYXNlLW1haW4gJiYKKwkJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIHJlYmFzZSB3b3JrcyBpbnNpZGUgYSBmcmVzaC1jbG9uZWQgcmVwb3NpdG9yeScgJworCWNkIHRlc3QtcmViYXNlICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXRlc3QgLWUgdGVzdC1yZWJhc2UtbWFpbiAmJgorCQl0ZXN0IC1lIHRlc3QtcmViYXNlCisJJworCitzdG9wX2h0dHBkCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExNS9mdW5reS1uYW1lcy5kdW1wIGIvdC90OTExNS9mdW5reS1uYW1lcy5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDIyZjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE1L2Z1bmt5LW5hbWVzLmR1bXAKQEAgLTAsMCArMSwxMDMgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDgxOWM0NGZlLTJiY2MtNDA2Ni04OGU0LTk4NWUyYmMwYjQxOAorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wNy0xMlQwNzo1NDoyNi4wNjI5MTRaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNTIKK0NvbnRlbnQtbGVuZ3RoOiAxNTIKKworSyA3Citzdm46bG9nCitWIDQ0Cit3aGF0IHdpbGwgdGhvc2Ugd2Fja3kgcGVvcGxlIHRoaW5rIG9mIG5leHQ/CisKK0sgMTAKK3N2bjphdXRob3IKK1YgMTIKK25vcm1hbHBlcnNvbgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wNy0xMlQwODowMDowNS4wMTE1NzNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiAgbGVhZGluZyBzcGFjZQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiAgbGVhZGluZyBzcGFjZSBmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA1CitUZXh0LWNvbnRlbnQtbWQ1OiBlNGZhMjBjNjc1NDJjZGMyMTI3MWUwOGQzMjkzOTdhYgorQ29udGVudC1sZW5ndGg6IDE1CisKK1BST1BTLUVORAordWdseQorCisKK05vZGUtcGF0aDogI3tiYWRfZGlyZWN0b3J5X25hbWV9CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6ICN7Y29vbF9uYW1lfQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMTgKK1RleHQtY29udGVudC1tZDU6IDg3ZGFjNDBjYTMzN2RmYTNkY2M4OTExMzg4YzNkZGRhCitDb250ZW50LWxlbmd0aDogMjgKKworUFJPUFMtRU5ECitzdHJhbmdlIG5hbWUgaGVyZQorCisKK05vZGUtcGF0aDogZGlyIG5hbWUgd2l0aCBzcGFjZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZmlsZSBuYW1lIHdpdGggc3BhY2VzCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA3CitUZXh0LWNvbnRlbnQtbWQ1OiBjMWYxMGNmZDY0MDYxODQ4NGEyYTQ3NWMxMTQxMGZkMworQ29udGVudC1sZW5ndGg6IDE3CisKK1BST1BTLUVORAorc3BhY2VzCisKKworTm9kZS1wYXRoOiByZWd1bGFyX2Rpcl9uYW1lCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKZGlmZiAtLWdpdCBhL3QvdDkxMTYtZ2l0LXN2bi1sb2cuc2ggYi90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmNGMwNTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoCkBAIC0wLDAgKzEsMTQ1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGxvZyB0ZXN0cycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IGFuZCBpbXBvcnQnICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCWNkIGltcG9ydCAmJgorCQlmb3IgaSBpbiB0cnVuayBicmFuY2hlcy9hIGJyYW5jaGVzL2IgdGFncy8wLjEgdGFncy8wLjIgdGFncy8wLjMKKwkJZG8KKwkJCW1rZGlyIC1wICRpICYmCisJCQllY2hvIGhlbGxvID4+JGkvUkVBRE1FIHx8CisJCQlleGl0IDEKKwkJZG9uZSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSB0ZXN0IC4gIiRzdm5yZXBvIgorCSkgJiYKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAtVCB0cnVuayAtYiBicmFuY2hlcyAtdCB0YWdzICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgdHJ1bmsgJiYKKwllY2hvIGJ5ZSA+PiBSRUFETUUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGJ5ZSAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCWdpdCByZXNldCAtLWhhcmQgYSAmJgorCWVjaG8gd2h5ID4+IEZFRURNRSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgRkVFRE1FICYmCisJZ2l0IGNvbW1pdCAtbSBmZWVkbWUgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRydW5rICYmCisJZWNobyBheWUgPj4gUkVBRE1FICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBheWUgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGIgJiYKKwllY2hvIHNweSA+PiBSRUFETUUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNweSAmJgorCWVjaG8gdHJ5ID4+IFJFQURNRSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHJ5ICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gbG9nJyAiCisJZ2l0IHJlc2V0IC0taGFyZCBhICYmCisJZ2l0IHN2biBsb2cgLXIyIHRydW5rIHwgZ3JlcCBecjIgJiYKKwlnaXQgc3ZuIGxvZyAtcjQgdHJ1bmsgfCBncmVwIF5yNCAmJgorCWdpdCBzdm4gbG9nIC1yMyB8IGdyZXAgXnIzCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gbG9nIGFnYWluc3QgYSBmcm9tIHRydW5rJyAiCisJZ2l0IHJlc2V0IC0taGFyZCB0cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yMyBhIHwgZ3JlcCBecjMKKwkiCisKK3ByaW50ZiAncjEgXG5yMiBcbnI0IFxuJyA+IGV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlJyAiCisJZ2l0IHJlc2V0IC0taGFyZCB0cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDE6NCB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0IC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggLS1zaG93LWNvbW1pdCcgIgorCWdpdCByZXNldCAtLWhhcmQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtLXNob3ctY29tbWl0IC1yIDE6NCB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0IC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggLS1zaG93LWNvbW1pdCAoc2hhMSknICIKKwlnaXQgc3ZuIGZpbmQtcmV2IHIxID5leHBlY3RlZC1yYW5nZS1yMS1yMi1yNC1zaGExICYmCisJZ2l0IHN2biBmaW5kLXJldiByMiA+PmV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0LXNoYTEgJiYKKwlnaXQgc3ZuIGZpbmQtcmV2IHI0ID4+ZXhwZWN0ZWQtcmFuZ2UtcjEtcjItcjQtc2hhMSAmJgorCWdpdCByZXNldCAtLWhhcmQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtLXNob3ctY29tbWl0IC1yIDE6NCB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMiA+b3V0ICYmCisJZ2l0IHJldi1wYXJzZSBcJChjYXQgb3V0KSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjEtcjItcjQtc2hhMSBhY3R1YWwKKwkiCisKK3ByaW50ZiAncjQgXG5yMiBcbnIxIFxuJyA+IGV4cGVjdGVkLXJhbmdlLXI0LXIyLXIxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVzY2VuZGluZyByZXZpc2lvbiByYW5nZScgIgorCWdpdCByZXNldCAtLWhhcmQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciA0OjEgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yNC1yMi1yMSAtCisJIgorCitwcmludGYgJ3IxIFxucjIgXG4nID4gZXhwZWN0ZWQtcmFuZ2UtcjEtcjIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSByZXZpc2lvbicgIgorCWdpdCByZXNldCAtLWhhcmQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciAxOjMgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yMS1yMiAtCisJIgorCitwcmludGYgJ3IyIFxucjEgXG4nID4gZXhwZWN0ZWQtcmFuZ2UtcjItcjEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkZXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgcmV2aXNpb24nICIKKwlnaXQgcmVzZXQgLS1oYXJkIHRydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgMzoxIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjItcjEgLQorCSIKKworcHJpbnRmICdyMiBcbicgPiBleHBlY3RlZC1yYW5nZS1yMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIHVwcGVyIGJvdW5kYXJ5IHJldmlzaW9uIGFuZCAxIGNvbW1pdCcgIgorCWdpdCByZXNldCAtLWhhcmQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciAyOjMgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yMiAtCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRlc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSB1cHBlciBib3VuZGFyeSByZXZpc2lvbiBhbmQgMSBjb21taXQnICIKKwlnaXQgcmVzZXQgLS1oYXJkIHRydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgMzoyIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjIgLQorCSIKKworcHJpbnRmICdyNCBcbicgPiBleHBlY3RlZC1yYW5nZS1yNAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIGxvd2VyIGJvdW5kYXJ5IHJldmlzaW9uIGFuZCAxIGNvbW1pdCcgIgorCWdpdCByZXNldCAtLWhhcmQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciAzOjQgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yNCAtCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRlc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSBsb3dlciBib3VuZGFyeSByZXZpc2lvbiBhbmQgMSBjb21taXQnICIKKwlnaXQgcmVzZXQgLS1oYXJkIHRydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgNDozIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjQgLQorCSIKKworcHJpbnRmIC0tICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbicgPiBleHBlY3RlZC1zZXBhcmF0b3IKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSBib3VuZGFyeSByZXZpc2lvbnMgYW5kIG5vIGNvbW1pdHMnICIKKwlnaXQgcmVzZXQgLS1oYXJkIHRydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgNTo2IHwgdGVzdF9jbXAgZXhwZWN0ZWQtc2VwYXJhdG9yIC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIGJvdW5kYXJ5IHJldmlzaW9ucyBhbmQgbm8gY29tbWl0cycgIgorCWdpdCByZXNldCAtLWhhcmQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciA2OjUgfCB0ZXN0X2NtcCBleHBlY3RlZC1zZXBhcmF0b3IgLQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSBib3VuZGFyeSByZXZpc2lvbnMgYW5kIDEgY29tbWl0JyAiCisJZ2l0IHJlc2V0IC0taGFyZCB0cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDM6NSB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXI0IC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIGJvdW5kYXJ5IHJldmlzaW9ucyBhbmQgMSBjb21taXQnICIKKwlnaXQgcmVzZXQgLS1oYXJkIHRydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgNTozIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjQgLQorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaCBiL3QvdDkxMTctZ2l0LXN2bi1pbml0LWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3ZWY5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGluaXQvY2xvbmUgdGVzdHMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCisjIHNldHVwLCBydW4gaW5zaWRlIHRtcCBzbyB3ZSBkb24ndCBoYXZlIGFueSBjb25mbGljdHMgd2l0aCAkc3ZucmVwbworc2V0IC1lCitybSAtciAuZ2l0Citta2RpciB0bXAKK2NkIHRtcAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCisJbWtkaXIgcHJvamVjdCBwcm9qZWN0L3RydW5rIHByb2plY3QvYnJhbmNoZXMgcHJvamVjdC90YWdzICYmCisJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8iL3Byb2plY3QgJiYKKwlybSAtcmYgcHJvamVjdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgY2xvbmUnICcKKwl0ZXN0ICEgLWQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvcHJvamVjdC90cnVuayAmJgorCXRlc3QgLWQgdHJ1bmsvLmdpdC9zdm4gJiYKKwl0ZXN0IC1lIHRydW5rL2ZvbyAmJgorCXJtIC1yZiB0cnVuaworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gdGFyZ2V0IGRpcmVjdG9yeScgJworCXRlc3QgISAtZCB0YXJnZXQgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvcHJvamVjdC90cnVuayB0YXJnZXQgJiYKKwl0ZXN0IC1kIHRhcmdldC8uZ2l0L3N2biAmJgorCXRlc3QgLWUgdGFyZ2V0L2ZvbyAmJgorCXJtIC1yZiB0YXJnZXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggLS1zdGRsYXlvdXQnICcKKwl0ZXN0ICEgLWQgcHJvamVjdCAmJgorCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIi9wcm9qZWN0ICYmCisJdGVzdCAtZCBwcm9qZWN0Ly5naXQvc3ZuICYmCisJdGVzdCAtZSBwcm9qZWN0L2ZvbyAmJgorCXJtIC1yZiBwcm9qZWN0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byB0YXJnZXQgZGlyZWN0b3J5IHdpdGggLS1zdGRsYXlvdXQnICcKKwl0ZXN0ICEgLWQgdGFyZ2V0ICYmCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iL3Byb2plY3QgdGFyZ2V0ICYmCisJdGVzdCAtZCB0YXJnZXQvLmdpdC9zdm4gJiYKKwl0ZXN0IC1lIHRhcmdldC9mb28gJiYKKwlybSAtcmYgdGFyZ2V0CisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2ggYi90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1ZjkzYjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoCkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZnVua3kgYnJhbmNoIG5hbWVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKKyMgQWJvLVVlYmVybmFobWUgKEJ1ZyAjOTk0KQorc2NhcnlfdXJpPSdBYm8tVWViZXJuYWhtZSUyMCUyOEJ1ZyUyMCUyMzk5NCUyOScKK3NjYXJ5X3JlZj0nQWJvLVVlYmVybmFobWUlMjAoQnVnJTIwIzk5NCknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKKwllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJc3ZuX2NtZCBjcCAtbSAiZnVuIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCSAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiAmJgorCXN2bl9jbWQgY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgXAorCSAgICAgICAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9tb3JlIGZ1biBwbHVnaW4hIiAmJgorCXN2bl9jbWQgY3AgLW0gInNjYXJ5IiAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiBcCisJICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy8kc2NhcnlfdXJpIiAmJgorCXN2bl9jbWQgY3AgLW0gImxlYWRpbmcgZG90IiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCQkJIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvLmxlYWRpbmdfZG90IiAmJgorCXN2bl9jbWQgY3AgLW0gInRyYWlsaW5nIGRvdCIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKKwkJCSIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL3RyYWlsaW5nX2RvdC4iICYmCisJc3ZuX2NtZCBjcCAtbSAidHJhaWxpbmcgLmxvY2siICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJCQkiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy90cmFpbGluZ19kb3Rsb2NrLmxvY2siICYmCisJc3ZuX2NtZCBjcCAtbSAicmVmbG9nIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCQkJIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvbm90LWFAezB9cmVmbG9nQCIgJiYKKwlzdGFydF9odHRwZAorCScKKworIyBTVk4gMS43IHdpbGwgdHJ1bmNhdGUgIm5vdC1hJTQwezBdIiB0byBqdXN0ICJub3QtYSIuCisjIExvb2sgYXQgd2hhdCBTVk4gd291bmQgdXAgbmFtaW5nIHRoZSBicmFuY2ggYW5kIHVzZSB0aGF0LgorIyBCZSBzdXJlIHRvIGVzY2FwZSB0aGUgQCBpZiBpdCBzaG93cyB1cC4KK25vbl9yZWZsb2c9YHN2bl9jbWQgbHMgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMiIHwgZ3JlcCBub3QtYSB8IHNlZCAncy9cLy8vJyB8IHNlZCAncy9ALyU0MC8nYAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIHdpdGggZnVua3kgYnJhbmNoIG5hbWVzJyAnCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8vcHIgamVjdCIgcHJvamVjdCAmJgorCSgKKwkJY2QgcHJvamVjdCAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvZnVuJTIwcGx1Z2luIiAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvbW9yZSUyMGZ1biUyMHBsdWdpbiEiICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy8kc2NhcnlfcmVmIiAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvJTJFbGVhZGluZ19kb3QiICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy90cmFpbGluZ19kb3QlMkUiICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy90cmFpbGluZ19kb3Rsb2NrJTJFbG9jayIgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzLyRub25fcmVmbG9nIgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGNvbW1pdCB0byBmdW5reSBicmFuY2gnICIKKwkoCisJCWNkIHByb2plY3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAncmVmcy9yZW1vdGVzL21vcmUlMjBmdW4lMjBwbHVnaW4hJyAmJgorCQllY2hvIGhlbGxvID4+IGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICdoZWxsbycgLS0gZm9vICYmCisJCWdpdCBzdm4gZGNvbW1pdAorCSkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGNvbW1pdCB0byBzY2FyeSBicmFuY2gnICcKKwkoCisJCWNkIHByb2plY3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAicmVmcy9yZW1vdGVzLyRzY2FyeV9yZWYiICYmCisJCWVjaG8gdXJscyBhcmUgc2NhcnkgPj4gZm9vICYmCisJCWdpdCBjb21taXQgLW0gImVlcCIgLS0gZm9vICYmCisJCWdpdCBzdm4gZGNvbW1pdAorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGNvbW1pdCB0byB0cmFpbGluZ19kb3Rsb2NrIGJyYW5jaCcgJworCSgKKwkJY2QgcHJvamVjdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICJyZWZzL3JlbW90ZXMvdHJhaWxpbmdfZG90bG9jayUyRWxvY2siICYmCisJCWVjaG8gd2hvIG5hbWVzIGJyYW5jaGVzIGxpa2UgdGhpcyBhbnl3YXk/ID4+IGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICJiYXIiIC0tIGZvbyAmJgorCQlnaXQgc3ZuIGRjb21taXQKKwkpCisJJworCitzdG9wX2h0dHBkCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExOS1naXQtc3ZuLWluZm8uc2ggYi90L3Q5MTE5LWdpdC1zdm4taW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjE5Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTExOS1naXQtc3ZuLWluZm8uc2gKQEAgLTAsMCArMSwzNjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRGF2aWQgRC4gS2lsemVyCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gaW5mbycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKKyMgVGVzdGVkIHdpdGg6IHN2biwgdmVyc2lvbiAxLjQuNCAocjI1MTg4KQorIyBUZXN0ZWQgd2l0aDogc3ZuLCB2ZXJzaW9uIDEuNi5bMTIzNDU2ODldCit2PWBzdm5fY21kIC0tdmVyc2lvbiB8IHNlZCAtbiAtZSAncy9ec3ZuLCB2ZXJzaW9uIFwoMVwuWzAtOV0qXC5bMC05XSpcKS4qJC9cMS9wJ2AKK2Nhc2UgJHYgaW4KKzEuWzQ1Nl0uKikKKwk7OworKikKKwlza2lwX2FsbD0ic2tpcHBpbmcgc3ZuLWluZm8gdGVzdCAoU1ZOIHZlcnNpb246ICR2IG5vdCBzdXBwb3J0ZWQpIgorCXRlc3RfZG9uZQorCTs7Citlc2FjCisKKyMgT24gdGhlICJUZXh0IExhc3QgVXBkYXRlZCIgbGluZSwgImdpdCBzdm4gaW5mbyIgZG9lcyBub3QgcmV0dXJuIHRoZQorIyBzYW1lIHZhbHVlIGFzICJzdm4gaW5mbyIgKGkuZS4gdGhlIGNvbW1pdCB0aW1lc3RhbXAgdGhhdCB0b3VjaGVkIHRoZQorIyBwYXRoIG1vc3QgcmVjZW50bHkpOyBkbyBub3QgZXhwZWN0IHRoYXQgZmllbGQgdG8gbWF0Y2guCit0ZXN0X2NtcF9pbmZvICgpIHsKKwlzZWQgLWUgJy9eVGV4dCBMYXN0IFVwZGF0ZWQ6L2QnICIkMSIgPnRtcC5leHBlY3QKKwlzZWQgLWUgJy9eVGV4dCBMYXN0IFVwZGF0ZWQ6L2QnICIkMiIgPnRtcC5hY3R1YWwKKwl0ZXN0X2NtcCB0bXAuZXhwZWN0IHRtcC5hY3R1YWwgJiYKKwlybSAtZiB0bXAuZXhwZWN0IHRtcC5hY3R1YWwKK30KKworcXVvdGVkX3N2bnJlcG89IiQoZWNobyAkc3ZucmVwbyB8IHNlZCAncy8gLyUyMC8nKSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeSBhbmQgaW1wb3J0JyAnCisJbWtkaXIgaW5mbyAmJgorCSgKKwkJY2QgaW5mbyAmJgorCQllY2hvIEZJUlNUID5BICYmCisJCWVjaG8gb25lID5maWxlICYmCisJCWxuIC1zIGZpbGUgc3ltbGluay1maWxlICYmCisJCW1rZGlyIGRpcmVjdG9yeSAmJgorCQl0b3VjaCBkaXJlY3RvcnkvLnBsYWNlaG9sZGVyICYmCisJCWxuIC1zIGRpcmVjdG9yeSBzeW1saW5rLWRpcmVjdG9yeSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iCisJKSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzdm53YyAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJZWNobyBmb28gPmZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImNoYW5nZSBvdXRzaWRlIGRpcmVjdG9yeSIgJiYKKwkJc3ZuX2NtZCB1cGRhdGUKKwkpICYmCisJbWtkaXIgZ2l0d2MgJiYKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJCWdpdCBzdm4gZmV0Y2gKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvJyAiCisJKGNkIHN2bndjOyBzdm4gaW5mbykgPiBleHBlY3RlZC5pbmZvICYmCisJKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8pID4gYWN0dWFsLmluZm8gJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8gYWN0dWFsLmluZm8KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwnICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwpIiA9ICIkcXVvdGVkX3N2bnJlcG8iCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC4nICIKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIC4pID4gZXhwZWN0ZWQuaW5mby1kb3QgJiYKKwkoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAuKSA+IGFjdHVhbC5pbmZvLWRvdCAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1kb3QgYWN0dWFsLmluZm8tZG90CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIC4nICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgLikiID0gIiRxdW90ZWRfc3ZucmVwbyIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZmlsZScgIgorCShjZCBzdm53Yzsgc3ZuIGluZm8gZmlsZSkgPiBleHBlY3RlZC5pbmZvLWZpbGUgJiYKKwkoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyBmaWxlKSA+IGFjdHVhbC5pbmZvLWZpbGUgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tZmlsZSBhY3R1YWwuaW5mby1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGZpbGUnICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgZmlsZSkiID0gIiRxdW90ZWRfc3ZucmVwby9maWxlIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBkaXJlY3RvcnknICIKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIGRpcmVjdG9yeSkgPiBleHBlY3RlZC5pbmZvLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIGRpcmVjdG9yeSkgPiBhY3R1YWwuaW5mby1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tZGlyZWN0b3J5IGFjdHVhbC5pbmZvLWRpcmVjdG9yeQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBpbnNpZGUgZGlyZWN0b3J5JyAiCisJKGNkIHN2bndjL2RpcmVjdG9yeTsgc3ZuIGluZm8pID4gZXhwZWN0ZWQuaW5mby1pbnNpZGUtZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjL2RpcmVjdG9yeTsgZ2l0IHN2biBpbmZvKSA+IGFjdHVhbC5pbmZvLWluc2lkZS1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8taW5zaWRlLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1pbnNpZGUtZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGRpcmVjdG9yeScgJworCXRlc3QgIiQoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAtLXVybCBkaXJlY3RvcnkpIiA9ICIkcXVvdGVkX3N2bnJlcG8vZGlyZWN0b3J5IgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBzeW1saW5rLWZpbGUnICIKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIHN5bWxpbmstZmlsZSkgPiBleHBlY3RlZC5pbmZvLXN5bWxpbmstZmlsZSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIHN5bWxpbmstZmlsZSkgPiBhY3R1YWwuaW5mby1zeW1saW5rLWZpbGUgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tc3ltbGluay1maWxlIGFjdHVhbC5pbmZvLXN5bWxpbmstZmlsZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBzeW1saW5rLWZpbGUnICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgc3ltbGluay1maWxlKSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL3N5bWxpbmstZmlsZSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gc3ltbGluay1kaXJlY3RvcnknICIKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIHN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gZXhwZWN0ZWQuaW5mby1zeW1saW5rLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIHN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gYWN0dWFsLmluZm8tc3ltbGluay1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tc3ltbGluay1kaXJlY3RvcnkgYWN0dWFsLmluZm8tc3ltbGluay1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgc3ltbGluay1kaXJlY3RvcnknICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgc3ltbGluay1kaXJlY3RvcnkpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vc3ltbGluay1kaXJlY3RvcnkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGFkZGVkLWZpbGUnICIKKwllY2hvIHR3byA+IGdpdHdjL2FkZGVkLWZpbGUgJiYKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBhZGQgYWRkZWQtZmlsZQorCSkgJiYKKwljcCBnaXR3Yy9hZGRlZC1maWxlIHN2bndjL2FkZGVkLWZpbGUgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCXN2bl9jbWQgYWRkIGFkZGVkLWZpbGUgPiAvZGV2L251bGwKKwkpICYmCisJKGNkIHN2bndjOyBzdm4gaW5mbyBhZGRlZC1maWxlKSA+IGV4cGVjdGVkLmluZm8tYWRkZWQtZmlsZSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIGFkZGVkLWZpbGUpID4gYWN0dWFsLmluZm8tYWRkZWQtZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1hZGRlZC1maWxlIGFjdHVhbC5pbmZvLWFkZGVkLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgYWRkZWQtZmlsZScgJworCXRlc3QgIiQoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAtLXVybCBhZGRlZC1maWxlKSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL2FkZGVkLWZpbGUiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGFkZGVkLWRpcmVjdG9yeScgIgorCW1rZGlyIGdpdHdjL2FkZGVkLWRpcmVjdG9yeSBzdm53Yy9hZGRlZC1kaXJlY3RvcnkgJiYKKwl0b3VjaCBnaXR3Yy9hZGRlZC1kaXJlY3RvcnkvLnBsYWNlaG9sZGVyICYmCisJKAorCQljZCBzdm53YyAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1kaXJlY3RvcnkgPiAvZGV2L251bGwKKwkpICYmCisJKAorCQljZCBnaXR3YyAmJgorCQlnaXQgYWRkIGFkZGVkLWRpcmVjdG9yeQorCSkgJiYKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIGFkZGVkLWRpcmVjdG9yeSkgXAorCQk+IGV4cGVjdGVkLmluZm8tYWRkZWQtZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gYWRkZWQtZGlyZWN0b3J5KSBcCisJCT4gYWN0dWFsLmluZm8tYWRkZWQtZGlyZWN0b3J5ICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWFkZGVkLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1hZGRlZC1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgYWRkZWQtZGlyZWN0b3J5JyAnCisJdGVzdCAiJChjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIC0tdXJsIGFkZGVkLWRpcmVjdG9yeSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9hZGRlZC1kaXJlY3RvcnkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGFkZGVkLXN5bWxpbmstZmlsZScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJbG4gLXMgYWRkZWQtZmlsZSBhZGRlZC1zeW1saW5rLWZpbGUgJiYKKwkJZ2l0IGFkZCBhZGRlZC1zeW1saW5rLWZpbGUKKwkpICYmCisJKAorCQljZCBzdm53YyAmJgorCQlsbiAtcyBhZGRlZC1maWxlIGFkZGVkLXN5bWxpbmstZmlsZSAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1zeW1saW5rLWZpbGUgPiAvZGV2L251bGwKKwkpICYmCisJKGNkIHN2bndjOyBzdm4gaW5mbyBhZGRlZC1zeW1saW5rLWZpbGUpIFwKKwkJPiBleHBlY3RlZC5pbmZvLWFkZGVkLXN5bWxpbmstZmlsZSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZmlsZSkgXAorCQk+IGFjdHVhbC5pbmZvLWFkZGVkLXN5bWxpbmstZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1hZGRlZC1zeW1saW5rLWZpbGUgXAorCQlhY3R1YWwuaW5mby1hZGRlZC1zeW1saW5rLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgYWRkZWQtc3ltbGluay1maWxlJyAnCisJdGVzdCAiJChjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIC0tdXJsIGFkZGVkLXN5bWxpbmstZmlsZSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9hZGRlZC1zeW1saW5rLWZpbGUiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5JyAiCisJKAorCQljZCBnaXR3YyAmJgorCQlsbiAtcyBhZGRlZC1kaXJlY3RvcnkgYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwkJZ2l0IGFkZCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeQorCSkgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCWxuIC1zIGFkZGVkLWRpcmVjdG9yeSBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gZXhwZWN0ZWQuaW5mby1hZGRlZC1zeW1saW5rLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gYWN0dWFsLmluZm8tYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgXAorCQlhY3R1YWwuaW5mby1hZGRlZC1zeW1saW5rLWRpcmVjdG9yeQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeScgJworCXRlc3QgIiQoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAtLXVybCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9hZGRlZC1zeW1saW5rLWRpcmVjdG9yeSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZGVsZXRlZC1maWxlJyAiCisJKAorCQljZCBnaXR3YyAmJgorCQlnaXQgcm0gLWYgZmlsZSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBmaWxlID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53Yzsgc3ZuIGluZm8gZmlsZSkgPmV4cGVjdGVkLmluZm8tZGVsZXRlZC1maWxlICYmCisJKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gZmlsZSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1kZWxldGVkLWZpbGUgYWN0dWFsLmluZm8tZGVsZXRlZC1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGZpbGUgKGRlbGV0ZWQpJyAnCisJdGVzdCAiJChjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIC0tdXJsIGZpbGUpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vZmlsZSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZGVsZXRlZC1kaXJlY3RvcnknICIKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBybSAtciAtZiBkaXJlY3RvcnkgPiAvZGV2L251bGwKKwkpICYmCisJKAorCQljZCBzdm53YyAmJgorCQlzdm5fY21kIHJtIC0tZm9yY2UgZGlyZWN0b3J5ID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53Yzsgc3ZuIGluZm8gZGlyZWN0b3J5KSA+ZXhwZWN0ZWQuaW5mby1kZWxldGVkLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIGRpcmVjdG9yeSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtZGlyZWN0b3J5ICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWRlbGV0ZWQtZGlyZWN0b3J5IGFjdHVhbC5pbmZvLWRlbGV0ZWQtZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGRpcmVjdG9yeSAoZGVsZXRlZCknICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgZGlyZWN0b3J5KSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL2RpcmVjdG9yeSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZGVsZXRlZC1zeW1saW5rLWZpbGUnICIKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBybSAtZiBzeW1saW5rLWZpbGUgPiAvZGV2L251bGwKKwkpICYmCisJKAorCQljZCBzdm53YyAmJgorCQlzdm5fY21kIHJtIC0tZm9yY2Ugc3ltbGluay1maWxlID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53Yzsgc3ZuIGluZm8gc3ltbGluay1maWxlKSA+ZXhwZWN0ZWQuaW5mby1kZWxldGVkLXN5bWxpbmstZmlsZSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIHN5bWxpbmstZmlsZSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtc3ltbGluay1maWxlICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWRlbGV0ZWQtc3ltbGluay1maWxlIGFjdHVhbC5pbmZvLWRlbGV0ZWQtc3ltbGluay1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHN5bWxpbmstZmlsZSAoZGVsZXRlZCknICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgc3ltbGluay1maWxlKSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL3N5bWxpbmstZmlsZSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZGVsZXRlZC1zeW1saW5rLWRpcmVjdG9yeScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJZ2l0IHJtIC1mIHN5bWxpbmstZGlyZWN0b3J5ID4gL2Rldi9udWxsCisJKSAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJc3ZuX2NtZCBybSAtLWZvcmNlIHN5bWxpbmstZGlyZWN0b3J5ID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53Yzsgc3ZuIGluZm8gc3ltbGluay1kaXJlY3RvcnkpID5leHBlY3RlZC5pbmZvLWRlbGV0ZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwkoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyBzeW1saW5rLWRpcmVjdG9yeSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tZGVsZXRlZC1zeW1saW5rLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1kZWxldGVkLXN5bWxpbmstZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHN5bWxpbmstZGlyZWN0b3J5IChkZWxldGVkKScgJworCXRlc3QgIiQoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAtLXVybCBzeW1saW5rLWRpcmVjdG9yeSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9zeW1saW5rLWRpcmVjdG9yeSIKKwknCisKKyMgTk9URTogZ2l0IGRvZXMgbm90IGhhdmUgdGhlIGNvbmNlcHQgb2YgcmVwbGFjZWQgb2JqZWN0cywKKyMgc28gd2UgY2FuJ3QgdGVzdCBmb3IgZmlsZXMgaW4gdGhhdCBzdGF0ZS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyB1bmtub3duLWZpbGUnICIKKwllY2hvIHR3byA+IGdpdHdjL3Vua25vd24tZmlsZSAmJgorCShjZCBnaXR3YzsgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIHVua25vd24tZmlsZSkgXAorCQkgMj4gYWN0dWFsLmluZm8tdW5rbm93bi1maWxlICYmCisJZ3JlcCB1bmtub3duLWZpbGUgYWN0dWFsLmluZm8tdW5rbm93bi1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHVua25vd24tZmlsZScgJworCWVjaG8gdHdvID4gZ2l0d2MvdW5rbm93bi1maWxlICYmCisJKGNkIGdpdHdjOyB0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGluZm8gLS11cmwgdW5rbm93bi1maWxlKSBcCisJCSAyPiBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1maWxlICYmCisJZ3JlcCB1bmtub3duLWZpbGUgYWN0dWFsLmluZm8tdXJsLXVua25vd24tZmlsZQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyB1bmtub3duLWRpcmVjdG9yeScgIgorCW1rZGlyIGdpdHdjL3Vua25vd24tZGlyZWN0b3J5IHN2bndjL3Vua25vd24tZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjOyB0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGluZm8gdW5rbm93bi1kaXJlY3RvcnkpIFwKKwkJIDI+IGFjdHVhbC5pbmZvLXVua25vd24tZGlyZWN0b3J5ICYmCisJZ3JlcCB1bmtub3duLWRpcmVjdG9yeSBhY3R1YWwuaW5mby11bmtub3duLWRpcmVjdG9yeQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCB1bmtub3duLWRpcmVjdG9yeScgJworCShjZCBnaXR3YzsgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIC0tdXJsIHVua25vd24tZGlyZWN0b3J5KSBcCisJCSAyPiBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1kaXJlY3RvcnkgJiYKKwlncmVwIHVua25vd24tZGlyZWN0b3J5IGFjdHVhbC5pbmZvLXVybC11bmtub3duLWRpcmVjdG9yeQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyB1bmtub3duLXN5bWxpbmstZmlsZScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJbG4gLXMgdW5rbm93bi1maWxlIHVua25vd24tc3ltbGluay1maWxlCisJKSAmJgorCShjZCBnaXR3YzsgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIHVua25vd24tc3ltbGluay1maWxlKSBcCisJCSAyPiBhY3R1YWwuaW5mby11bmtub3duLXN5bWxpbmstZmlsZSAmJgorCWdyZXAgdW5rbm93bi1zeW1saW5rLWZpbGUgYWN0dWFsLmluZm8tdW5rbm93bi1zeW1saW5rLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgdW5rbm93bi1zeW1saW5rLWZpbGUnICcKKwkoY2QgZ2l0d2M7IHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5mbyAtLXVybCB1bmtub3duLXN5bWxpbmstZmlsZSkgXAorCQkgMj4gYWN0dWFsLmluZm8tdXJsLXVua25vd24tc3ltbGluay1maWxlICYmCisJZ3JlcCB1bmtub3duLXN5bWxpbmstZmlsZSBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1zeW1saW5rLWZpbGUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJbG4gLXMgdW5rbm93bi1kaXJlY3RvcnkgdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeQorCSkgJiYKKwkoY2QgZ2l0d2M7IHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5mbyB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5KSBcCisJCSAyPiBhY3R1YWwuaW5mby11bmtub3duLXN5bWxpbmstZGlyZWN0b3J5ICYmCisJZ3JlcCB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5IGFjdHVhbC5pbmZvLXVua25vd24tc3ltbGluay1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeScgJworCShjZCBnaXR3YzsgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIC0tdXJsIHVua25vd24tc3ltbGluay1kaXJlY3RvcnkpIFwKKwkJIDI+IGFjdHVhbC5pbmZvLXVybC11bmtub3duLXN5bWxpbmstZGlyZWN0b3J5ICYmCisJZ3JlcCB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5IGFjdHVhbC5pbmZvLXVybC11bmtub3duLXN5bWxpbmstZGlyZWN0b3J5CisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaCBiL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZDkyYzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoCkBAIC0wLDAgKzEsNzkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggS2V2aW4gQmFsbGFyZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNsb25lIHdpdGggcGVyY2VudCBlc2NhcGVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKKwllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgorCXN2bl9jbWQgY3AgLW0gImJyYW5jaCIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKKwkgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2IiICYmCisJc3ZuX2NtZCBjcCAtbSAidGFnIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCSAgIiRzdm5yZXBvL3ByIGplY3QvdGFncy92MSIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCXN0YXJ0X2h0dHBkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgd2l0aCBwZXJjZW50IGVzY2FwZXMnICcKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwby9wciUyMGplY3QiIGNsb25lICYmCisJKAorCQljZCBjbG9uZSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59CisJKQorJworCisjIFNWTiB3b3JrcyBlaXRoZXIgd2F5LCBzbyBzaG91bGQgd2UuLi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ZuIGNoZWNrb3V0IHdpdGggcGVyY2VudCBlc2NhcGVzJyAnCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8vcHIlMjBqZWN0IiBzdm4ucGVyY2VudCAmJgorCXN2bl9jbWQgY2hlY2tvdXQgIiRzdm5yZXBvL3ByJTIwamVjdC90cnVuayIgc3ZuLnBlcmNlbnQudHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ZuIGNoZWNrb3V0IHdpdGggc3BhY2UnICcKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwby9wciBqZWN0IiBzdm4uc3BhY2UgJiYKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBzdm4uc3BhY2UudHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB0cnVuayB3aXRoIHBlcmNlbnQgZXNjYXBlcyBhbmQgbWluaW1pemUtdXJsJyAnCisJZ2l0IHN2biBjbG9uZSAtLW1pbmltaXplLXVybCAiJHN2bnJlcG8vcHIlMjBqZWN0L3RydW5rIiBtaW5pbWl6ZSAmJgorCSgKKwkJY2QgbWluaW1pemUgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzLyR7cmVtb3Rlc19naXRfc3ZufQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB0cnVuayB3aXRoIHBlcmNlbnQgZXNjYXBlcycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvL3ByJTIwamVjdC90cnVuayIgdHJ1bmsgJiYKKwkoCisJCWNkIHRydW5rICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgLS1zdGRsYXlvdXQgd2l0aCBwZXJjZW50IGVzY2FwZXMnICcKKwlnaXQgc3ZuIGNsb25lIC0tc3RkbGF5b3V0ICIkc3ZucmVwby9wciUyMGplY3QiIHBlcmNlbnQgJiYKKwkoCisJCWNkIHBlcmNlbnQgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHJ1bmteMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9iXjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy92MV4wCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIC1zIHdpdGggdW5lc2NhcGVkIHNwYWNlJyAnCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8vcHIgamVjdCIgc3BhY2UgJiYKKwkoCisJCWNkIHNwYWNlICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RydW5rXjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYl4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvdjFeMAorCSkKKycKKworc3RvcF9odHRwZAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjEtZ2l0LXN2bi1mZXRjaC1yZW5hbWVkLWRpci5zaCBiL3QvdDkxMjEtZ2l0LXN2bi1mZXRjaC1yZW5hbWVkLWRpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMDBjYWQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMS1naXQtc3ZuLWZldGNoLXJlbmFtZWQtZGlyLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggU2FudGhvc2ggS3VtYXIgTWFuaQorCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gY2FuIGZldGNoIHJlbmFtZWQgZGlyZWN0b3JpZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHJlcG9zaXRvcnkgd2l0aCByZW5hbWVkIGRpcmVjdG9yeScgJworCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8ICIkVEVTVF9ESVJFQ1RPUlkiL3Q5MTIxL3JlbmFtZWQtZGlyLmR1bXAKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIHJlcG9zaXRvcnknICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvL25ld25hbWUiICYmCisJZ2l0IHN2biBmZXRjaAorCScKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDkxMjEvcmVuYW1lZC1kaXIuZHVtcCBiL3QvdDkxMjEvcmVuYW1lZC1kaXIuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjkxMjdiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMS9yZW5hbWVkLWRpci5kdW1wCkBAIC0wLDAgKzEsOTAgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDA2YjliM2FkLWY1NDYtNGZiZS04MzI4LWZjYjRlNmVmNWMzZgorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wNC0wMlQwOToxMTo1OS43Nzg1NTdaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE0Citpbml0aWFsIGltcG9ydAorSyAxMAorc3ZuOmF1dGhvcgorViA4CitzYW50aG9zaAorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wNC0wMlQwOToxMzowMy4xNzA4NjNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBuYW1lCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG5hbWUvYS50eHQKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogNzEKK1RleHQtY29udGVudC1sZW5ndGg6IDYKK1RleHQtY29udGVudC1tZDU6IGIxOTQ2YWM5MjQ5MmQyMzQ3YzYyMzViNGQyNjExMTg0CitDb250ZW50LWxlbmd0aDogNzcKKworSyAxMworc3ZuOm1pbWUtdHlwZQorViAxMAordGV4dC9wbGFpbgorSyAxMworc3ZuOmVvbC1zdHlsZQorViAyCitMRgorUFJPUFMtRU5ECitoZWxsbworCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTA5CitDb250ZW50LWxlbmd0aDogMTA5CisKK0sgNworc3ZuOmxvZworViA3CityZW5hbWVkCitLIDEwCitzdm46YXV0aG9yCitWIDgKK3NhbnRob3NoCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA0LTAyVDA5OjE0OjIyLjk1MjE4NloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG5ld25hbWUKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBuYW1lCisKKworTm9kZS1wYXRoOiBuYW1lCitOb2RlLWFjdGlvbjogZGVsZXRlCisKKwpkaWZmIC0tZ2l0IGEvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaCBiL3QvdDkxMjItZ2l0LXN2bi1hdXRob3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzAwMTNiNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjItZ2l0LXN2bi1hdXRob3Iuc2gKQEAgLTAsMCArMSw4NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gYXV0aG9yc2hpcCcKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm4gcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY2hlY2tvdXQgIiRzdm5yZXBvIiB3b3JrLnN2biAmJgorCSgKKwkJY2Qgd29yay5zdm4gJiYKKwkJZWNobyA+ZmlsZQorCQlzdm5fY21kIGFkZCBmaWxlCisJCXN2bl9jbWQgY29tbWl0IC1tICJmaXJzdCBjb21taXQiIGZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyYWN0IHdpdGggaXQgdmlhIGdpdCBzdm4nICcKKwlta2RpciB3b3JrLmdpdCAmJgorCSgKKwkJY2Qgd29yay5naXQgJiYKKwkJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIKKwkJZ2l0IHN2biBmZXRjaCAmJgorCisJCWVjaG8gbW9kaWZpY2F0aW9uID5maWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCisJCXRlc3RfdGljayAmJgorCQlnaXQgc3ZuIGRjb21taXQgJiYKKworCQllY2hvICJmdXJ0aGVyIG1vZGlmaWNhdGlvbiIgPmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gdGhpcmQgJiYKKworCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IHN2biAtLWFkZC1hdXRob3ItZnJvbSBkY29tbWl0ICYmCisKKwkJZWNobyAieWV0IGZ1cnRoZXIgbW9kaWZpY2F0aW9uIiA+ZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBmb3VydGggJiYKKworCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IHN2biAtLWFkZC1hdXRob3ItZnJvbSAtLXVzZS1sb2ctYXV0aG9yIGRjb21taXQgJiYKKworCQlnaXQgbG9nICYmCisKKwkJZ2l0IHNob3cgLXMgSEVBRF5eID4uLi9hY3R1YWwuMiAmJgorCQlnaXQgc2hvdyAtcyBIRUFEXiAgPi4uL2FjdHVhbC4zICYmCisJCWdpdCBzaG93IC1zIEhFQUQgICA+Li4vYWN0dWFsLjQKKworCSkgJiYKKworCSMgTWFrZSBzdXJlIHRoYXQgLS1hZGQtYXV0aG9yLWZyb20gd2l0aG91dCAtLXVzZS1sb2ctYXV0aG9yCisJIyBkaWQgbm90IGFmZmVjdCB0aGUgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbgorCW15c2VsZj0kKGdyZXAgIl5BdXRob3I6ICIgYWN0dWFsLjIpICYmCisJdW5hZmZlY3RlZD0kKGdyZXAgIl5BdXRob3I6ICIgYWN0dWFsLjMpICYmCisJdGVzdCAieiRteXNlbGYiID0gInokdW5hZmZlY3RlZCIgJiYKKworCSMgTWFrZSBzdXJlIGxhY2sgb2YgLS1hZGQtYXV0aG9yLWZyb20gZGlkIG5vdCBhZGQgY3J1ZnQKKwkhIGdyZXAgIl4gICAgRnJvbTogQSBVIFRob3IgIiBhY3R1YWwuMiAmJgorCisJIyBNYWtlIHN1cmUgLS1hZGQtYXV0aG9yLWZyb20gYWRkZWQgY3J1ZnQKKwlncmVwICJeICAgIEZyb206IEEgVSBUaG9yICIgYWN0dWFsLjMgJiYKKwlncmVwICJeICAgIEZyb206IEEgVSBUaG9yICIgYWN0dWFsLjQgJiYKKworCSMgTWFrZSBzdXJlIC0tYWRkLWF1dGhvci1mcm9tIHdpdGggLS11c2UtbG9nLWF1dGhvciBhZmZlY3RlZAorCSMgdGhlIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24KKwlncmVwICJeQXV0aG9yOiBBIFUgVGhvciAiIGFjdHVhbC40ICYmCisKKwkjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gY29tbWl0IG1lc3NhZ2VzIHdpdGggZXhjZXNzIGJsYW5rIGxpbmVzCisJdGVzdCAkKGdyZXAgIl4gIiBhY3R1YWwuMiB8IHdjIC1sKSA9IDMgJiYKKwl0ZXN0ICQoZ3JlcCAiXiAiIGFjdHVhbC4zIHwgd2MgLWwpID0gNSAmJgorCXRlc3QgJChncmVwICJeICIgYWN0dWFsLjQgfCB3YyAtbCkgPSA1ICYmCisKKwkjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3ZuIGNvbW1pdCBtZXNzYWdlcyB3aXRoIGV4Y2VzcyBibGFuayBsaW5lcworCSgKKwkJY2Qgd29yay5zdm4gJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQkKKwkJdGVzdCAkKHN2bl9jbWQgbG9nIC1yMjoyIHwgd2MgLWwpID0gNSAmJgorCQl0ZXN0ICQoc3ZuX2NtZCBsb2cgLXI0OjQgfCB3YyAtbCkgPSA3CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2ggYi90L3Q5MTIzLWdpdC1zdm4tcmVidWlsZC13aXRoLXJld3JpdGVyb290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkODE4NDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTIzLWdpdC1zdm4tcmVidWlsZC13aXRoLXJld3JpdGVyb290LnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggSmFuIEtyw7xnZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biByZXNwZWN0cyByZXdyaXRlUm9vdCBkdXJpbmcgcmVidWlsZCcKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK21rZGlyIGltcG9ydAorKGNkIGltcG9ydAorCXRvdWNoIGZvbworCXN2bl9jbWQgaW1wb3J0IC1tICdpbXBvcnQgZm9yIGdpdCBzdm4nIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCispCitybSAtcmYgaW1wb3J0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQsIGZldGNoIGFuZCBjaGVja291dCByZXBvc2l0b3J5JyAnCisJZ2l0IHN2biBpbml0IC0tcmV3cml0ZS1yb290PWh0dHA6Ly9pbnZhbGlkLmludmFsaWQvICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIG15YnJhbmNoICR7cmVtb3Rlc19naXRfc3ZufQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJldl9tYXAnICcKKwlybSAiJEdJVF9TVk5fRElSIi8ucmV2X21hcC4qCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJ1aWxkIHJldl9tYXAnICcKKwlnaXQgc3ZuIHJlYmFzZSA+L2Rldi9udWxsCisJJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90OTEyNC1naXQtc3ZuLWRjb21taXQtYXV0by1wcm9wcy5zaCBiL3QvdDkxMjQtZ2l0LXN2bi1kY29tbWl0LWF1dG8tcHJvcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWE4NDFlMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjQtZ2l0LXN2bi1kY29tbWl0LWF1dG8tcHJvcHMuc2gKQEAgLTAsMCArMSwxMDEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQnJhZCBLaW5nCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZGNvbW1pdCBob25vcnMgYXV0by1wcm9wcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2dlbmVyYXRlX2F1dG9fcHJvcHMoKSB7CitjYXQgPDwgRU9GCitbbWlzY2VsbGFueV0KK2VuYWJsZS1hdXRvLXByb3BzPSQxCitbYXV0by1wcm9wc10KKyouc2ggID0gc3ZuOm1pbWUtdHlwZT1hcHBsaWNhdGlvbi94LXNoZWxsc2NyaXB0OyBzdm46ZW9sLXN0eWxlPUxGCisqLnR4dCA9IHN2bjptaW1lLXR5cGU9dGV4dC9wbGFpbjsgc3ZuOmVvbC1zdHlsZSA9IG5hdGl2ZQorRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgZ2l0IHN2bicgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCWVjaG8gZm9vID5mb28gJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgLiAiJHN2bnJlcG8iCisJKSAmJgorCXJtIC1yZiBpbXBvcnQgJiYKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIGF1dG8tcHJvcHMgY29uZmlnJyAnCisJbWtkaXIgdXNlciAmJgorCWdlbmVyYXRlX2F1dG9fcHJvcHMgeWVzID51c2VyL2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZmlsZXMgbWF0Y2hpbmcgYXV0by1wcm9wcycgJworCWVjaG8gIiMhJFNIRUxMX1BBVEgiID5leGVjMS5zaCAmJgorCWNobW9kICt4IGV4ZWMxLnNoICYmCisJZWNobyAiaGVsbG8iID5oZWxsby50eHQgJiYKKwllY2hvIGJhciA+YmFyICYmCisJZ2l0IGFkZCBleGVjMS5zaCBoZWxsby50eHQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlsZXMgZm9yIGVuYWJsZWQgYXV0by1wcm9wcyIgJiYKKwlnaXQgc3ZuIGRjb21taXQgLS1jb25maWctZGlyPXVzZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYWJsZSBhdXRvLXByb3BzIGNvbmZpZycgJworCWdlbmVyYXRlX2F1dG9fcHJvcHMgbm8gPnVzZXIvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBmaWxlcyBtYXRjaGluZyBkaXNhYmxlZCBhdXRvLXByb3BzJyAnCisJZWNobyAiIyRTSEVMTF9QQVRIIiA+ZXhlYzIuc2ggJiYKKwljaG1vZCAreCBleGVjMi5zaCAmJgorCWVjaG8gIndvcmxkIiA+d29ybGQudHh0ICYmCisJZWNobyB6b3QgPnpvdCAmJgorCWdpdCBhZGQgZXhlYzIuc2ggd29ybGQudHh0IHpvdCAmJgorCWdpdCBjb21taXQgLW0gImZpbGVzIGZvciBkaXNhYmxlZCBhdXRvLXByb3BzIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtLWNvbmZpZy1kaXI9dXNlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZXN1bHRpbmcgc3ZuIHJlcG9zaXRvcnknICcKKygKKwlta2RpciB3b3JrICYmCisJY2Qgd29yayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiAmJgorCWNkIHN2bnJlcG8gJiYKKworCSMgQ2hlY2sgcHJvcGVydGllcyBmcm9tIGZpcnN0IGNvbW1pdC4KKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOmV4ZWN1dGFibGUgZXhlYzEuc2gpIiA9ICJ4KiIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBleGVjMS5zaCkiID0gXAorCSAgICAgInhhcHBsaWNhdGlvbi94LXNoZWxsc2NyaXB0IiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIGhlbGxvLnR4dCkiID0gInh0ZXh0L3BsYWluIiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZW9sLXN0eWxlIGhlbGxvLnR4dCkiID0gInhuYXRpdmUiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgYmFyKSIgPSAieCIgJiYKKworCSMgQ2hlY2sgcHJvcGVydGllcyBmcm9tIHNlY29uZCBjb21taXQuCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjpleGVjdXRhYmxlIGV4ZWMyLnNoKSIgPSAieCoiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgZXhlYzIuc2gpIiA9ICJ4IiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIHdvcmxkLnR4dCkiID0gIngiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgd29ybGQudHh0KSIgPSAieCIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSB6b3QpIiA9ICJ4IgorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZW5hbWVkIGZpbGUnICcKKwl0ZXN0IC1kIHVzZXIgJiYKKwlnZW5lcmF0ZV9hdXRvX3Byb3BzIHllcyA+IHVzZXIvY29uZmlnICYmCisJZ2l0IG12IGZvbyBmb28uc2ggJiYKKwlnaXQgY29tbWl0IC1tICJmb28gPT4gZm9vLnNoIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtLWNvbmZpZy1kaXI9dXNlciAmJgorCSgKKwkJY2Qgd29yay9zdm5yZXBvICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJdGVzdCAhIC1lIGZvbyAmJgorCQl0ZXN0IC1lIGZvby5zaCAmJgorCQl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBmb28uc2gpIiA9IFwKKwkJICAgICAieGFwcGxpY2F0aW9uL3gtc2hlbGxzY3JpcHQiICYmCisJCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZW9sLXN0eWxlIGZvby5zaCkiID0gInhMRiIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyNS1naXQtc3ZuLW11bHRpLWdsb2ItYnJhbmNoLW5hbWVzLnNoIGIvdC90OTEyNS1naXQtc3ZuLW11bHRpLWdsb2ItYnJhbmNoLW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA5NmFiZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTI1LWdpdC1zdm4tbXVsdGktZ2xvYi1icmFuY2gtbmFtZXMuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwOCBNYXJjdXMgR3JpZXAKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtdWx0aS1nbG9iIGJyYW5jaCBuYW1lcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCisJbWtkaXIgcHJvamVjdCBwcm9qZWN0L3RydW5rIHByb2plY3QvYnJhbmNoZXMgXAorCQkJcHJvamVjdC9icmFuY2hlcy92MTQuMSBwcm9qZWN0L3RhZ3MgJiYKKwllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wcm9qZWN0IiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJc3ZuX2NtZCBjcCAtbSAiZnVuIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCSAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHJvamVjdC9icmFuY2hlcy92MTQuMS9iZXRhIiAmJgorCXN2bl9jbWQgY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvYmV0YSIgXAorCSAgICAgICAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHJvamVjdC9icmFuY2hlcy92MTQuMS9nb2xkIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB3aXRoIG11bHRpLWdsb2IgaW4gYnJhbmNoIG5hbWVzJyAnCisJZ2l0IHN2biBjbG9uZSAtVCB0cnVuayAtYiBicmFuY2hlcy8qLyogLXQgdGFncyBcCisJICAgICAgICAgICAgICAiJHN2bnJlcG8vcHJvamVjdCIgcHJvamVjdCAmJgorCShjZCBwcm9qZWN0ICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy92MTQuMS9iZXRhIiAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvdjE0LjEvZ29sZCIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRjb21taXQgdG8gbXVsdGktZ2xvYmJlZCBicmFuY2gnICIKKwkoY2QgcHJvamVjdCAmJgorCWdpdCByZXNldCAtLWhhcmQgJ3JlZnMvcmVtb3Rlcy92MTQuMS9nb2xkJyAmJgorCWVjaG8gaGVsbG8gPj4gZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAnaGVsbG8nIC0tIGZvbyAmJgorCWdpdCBzdm4gZGNvbW1pdAorCSkKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyNi1naXQtc3ZuLWZvbGxvdy1kZWxldGVkLXJlYWRkZWQtZGlyZWN0b3J5LnNoIGIvdC90OTEyNi1naXQtc3ZuLWZvbGxvdy1kZWxldGVkLXJlYWRkZWQtZGlyZWN0b3J5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkZWM2NDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTI2LWdpdC1zdm4tZm9sbG93LWRlbGV0ZWQtcmVhZGRlZC1kaXJlY3Rvcnkuc2gKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBBbGVjIEJlcnJ5bWFuCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZmV0Y2ggcmVwb3NpdG9yeSB3aXRoIGRlbGV0ZWQgYW5kIHJlYWRkZWQgZGlyZWN0b3J5JworCisuIC4vbGliLWdpdC1zdm4uc2gKKworIyBEb24ndCBydW4gdGhpcyBieSBkZWZhdWx0OyBpdCBvcGVucyB1cCBhIHBvcnQuCityZXF1aXJlX3N2bnNlcnZlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgcmVwb3NpdG9yeScgJworICAgIHN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8ICIkVEVTVF9ESVJFQ1RPUlkiL3Q5MTI2L2ZvbGxvdy1kZWxldGVkLXJlYWRkZWQuZHVtcAorICAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcmVwb3NpdG9yeScgJworICAgIHN0YXJ0X3N2bnNlcnZlICYmCisgICAgZ2l0IHN2biBpbml0IHN2bjovLzEyNy4wLjAuMTokU1ZOU0VSVkVfUE9SVCAmJgorICAgIGdpdCBzdm4gZmV0Y2gKKyAgICAnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyNi9mb2xsb3ctZGVsZXRlZC1yZWFkZGVkLmR1bXAgYi90L3Q5MTI2L2ZvbGxvdy1kZWxldGVkLXJlYWRkZWQuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWRhNWQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyNi9mb2xsb3ctZGVsZXRlZC1yZWFkZGVkLmR1bXAKQEAgLTAsMCArMSwyMDEgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDE4MDdkYzZmLWM2OTMtNGNkYS05NzEwLTAwZTFiZThjMWYyMQorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoxMy4wMDY3NDhaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDEyCitDcmVhdGUgdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorYWxlYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoxMy4yMzk2ODlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTkKK0NvbnRlbnQtbGVuZ3RoOiAxMTkKKworSyA3Citzdm46bG9nCitWIDIwCitDcmVhdGUgdHJ1bmsvcHJvamVjdAorSyAxMAorc3ZuOmF1dGhvcgorViA0CithbGVjCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA5LTE0VDE5OjUzOjEzLjU0ODg2MFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3Byb2plY3QKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTExCitDb250ZW50LWxlbmd0aDogMTExCisKK0sgNworc3ZuOmxvZworViAxMgorYWRkIG5ldyBmaWxlCitLIDEwCitzdm46YXV0aG9yCitWIDQKK2FsZWMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MTUuNDMzNjMwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvcHJvamVjdC9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGQzYjA3Mzg0ZDExM2VkZWM0OWVhYTYyMzhhZDVmZjAwCitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECitmb28KKworCitSZXZpc2lvbi1udW1iZXI6IDQKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTcKK2NoYW5nZSBmb28gdG8gYmFyCitLIDEwCitzdm46YXV0aG9yCitWIDQKK2FsZWMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MTcuMzM5ODg0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvcHJvamVjdC9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogYzE1N2E3OTAzMWUxYzQwZjg1OTMxODI5YmM1ZmM1NTIKK0NvbnRlbnQtbGVuZ3RoOiA0CisKK2JhcgorCisKK1JldmlzaW9uLW51bWJlcjogNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE0CitDb250ZW50LWxlbmd0aDogMTE0CisKK0sgNworc3ZuOmxvZworViAxNQorZG9uJ3QgbGlrZSB0aGF0CitLIDEwCitzdm46YXV0aG9yCitWIDQKK2FsZWMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MTkuMzM1MDAxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvcHJvamVjdAorTm9kZS1hY3Rpb246IGRlbGV0ZQorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViAxMQorcmVzZXQgdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorYWxlYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoxOS44NDU4OTdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9wcm9qZWN0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDQKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsvcHJvamVjdAorCisKK1JldmlzaW9uLW51bWJlcjogNworUHJvcC1jb250ZW50LWxlbmd0aDogMTEzCitDb250ZW50LWxlbmd0aDogMTEzCisKK0sgNworc3ZuOmxvZworViAxNAorY2hhbmdlIHRvIHF1dXgKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorYWxlYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoyMS4zNjc5NDdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9wcm9qZWN0L2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA1CitUZXh0LWNvbnRlbnQtbWQ1OiBkM2IwN2EzODJlYzAxMGMwMTg4OTI1MGZjZTY2ZmIxMworQ29udGVudC1sZW5ndGg6IDUKKworcXV1eAorCisKZGlmZiAtLWdpdCBhL3QvdDkxMjctZ2l0LXN2bi1wYXJ0aWFsLXJlYnVpbGQuc2ggYi90L3Q5MTI3LWdpdC1zdm4tcGFydGlhbC1yZWJ1aWxkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlNDc4OWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTI3LWdpdC1zdm4tcGFydGlhbC1yZWJ1aWxkLnNoCkBAIC0wLDAgKzEsNTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRGVza2luIE1pbGxlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHBhcnRpYWwtcmVidWlsZCB0ZXN0cycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHN2bnJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCShjZCBpbXBvcnQgJiYKKwkJbWtkaXIgdHJ1bmsgYnJhbmNoZXMgdGFncyAmJgorCQkoY2QgdHJ1bmsgJiYKKwkJZWNobyBmb28gPiBmb28KKwkJKSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQtc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbCAmJgorCQlzdm5fY21kIGNvcHkgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgXAorCQkJLW0gImNyZWF0ZWQgYnJhbmNoIGEiCisJCSkgJiYKKwkJcm0gLXJmIGltcG9ydCAmJgorCQlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgdHJ1bmsgJiYKKwkJKGNkIHRydW5rICYmCisJCWVjaG8gYmFyID4+IGZvbyAmJgorCQlzdm5fY21kIGNpIC1tICJ1cGRhdGVkIHRydW5rIgorCQkpICYmCisJCXN2bl9jbWQgY28gIiRzdm5yZXBvIi9icmFuY2hlcy9hIGEgJiYKKwkJKGNkIGEgJiYKKwkJZWNobyBiYXogPj4gYSAmJgorCQlzdm5fY21kIGFkZCBhICYmCisJCXN2bl9jbWQgY2kgLW0gInVwZGF0ZWQgYSIKKwkJKSAmJgorCQlnaXQgc3ZuIGluaXQgLS1zdGRsYXlvdXQgIiRzdm5yZXBvIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGFuIGVhcmx5IFNWTiByZXZpc2lvbiBpbnRvIGdpdCcgJworCWdpdCBzdm4gZmV0Y2ggLXIxOjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBmdWxsIGdpdCBtaXJyb3Igb2YgU1ZOJyAnCisJbWtkaXIgbWlycm9yICYmCisJKAorCQkoY2QgbWlycm9yICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBzdm4gaW5pdCAtLXN0ZGxheW91dCAiJHN2bnJlcG8iICYmCisJCWdpdCBzdm4gZmV0Y2gKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSBnaXQgbWlycm9yIGFuZCBwYXJ0aWFsLXJlYnVpbGQnICcKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4udXJsICJmaWxlOi8vJFBXRC9taXJyb3IvLmdpdCIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4uZmV0Y2ggcmVmcy9yZW1vdGVzLyo6cmVmcy9yZW1vdGVzLyogJiYKKwlnaXQgZmV0Y2ggb3JpZ2luICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjgtZ2l0LXN2bi1jbWQtYnJhbmNoLnNoIGIvdC90OTEyOC1naXQtc3ZuLWNtZC1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGIwMzRhNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjgtZ2l0LXN2bi1jbWQtYnJhbmNoLnNoCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRGVza2luIE1pbGxlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHBhcnRpYWwtcmVidWlsZCB0ZXN0cycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHN2bnJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCShjZCBpbXBvcnQgJiYKKwkJbWtkaXIgdHJ1bmsgYnJhbmNoZXMgdGFncyAmJgorCQkoY2QgdHJ1bmsgJiYKKwkJZWNobyBmb28gPiBmb28KKwkJKSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQtc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAorCQkpICYmCisJCXJtIC1yZiBpbXBvcnQgJiYKKwkJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCisJCShjZCB0cnVuayAmJgorCQllY2hvIGJhciA+PiBmb28gJiYKKwkJc3ZuX2NtZCBjaSAtbSAidXBkYXRlZCB0cnVuayIKKwkJKSAmJgorCQlybSAtcmYgdHJ1bmsKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBpbnRvIGdpdCcgJworCWdpdCBzdm4gaW5pdCAtLXN0ZGxheW91dCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCBjaGVja291dCByZW1vdGVzL3RydW5rCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gYnJhbmNoIHRlc3RzJyAnCisJZ2l0IHN2biBicmFuY2ggYSAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUQ6KSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9hOikgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtbSAiY3JlYXRlZCBicmFuY2ggYiBibGFoIiBiICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL2I6KSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gIm5vIGJyYW5jaG5hbWUiICYmCisJZ2l0IHN2biBicmFuY2ggLW4gYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBicmFuY2ggYSAmJgorCWdpdCBzdm4gYnJhbmNoIC10IHRhZzEgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvdGFncy90YWcxOikgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtLXRhZyB0YWcyICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL3RhZ3MvdGFnMjopICYmCisJZ2l0IHN2biB0YWcgdGFnMyAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy90YWdzL3RhZzM6KSAmJgorCWdpdCBzdm4gdGFnIC1tICJjcmVhdGVkIHRhZzQgZm9vIiB0YWc0ICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL3RhZ3MvdGFnNDopICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biB0YWcgLW0gIm5vIHRhZ25hbWUiICYmCisJZ2l0IHN2biB0YWcgLW4gdGFnNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVtb3Rlcy90YWdzL3RhZzUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIHRhZyB0YWcxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCB1c2VzIGNvcnJlY3Qgc3ZuLXJlbW90ZScgJworCShzdm5fY21kIGNvICIkc3ZucmVwbyIgc3ZuICYmCisJY2Qgc3ZuICYmCisJbWtkaXIgbWlycm9yICYmCisJc3ZuX2NtZCBhZGQgbWlycm9yICYmCisJc3ZuX2NtZCBjb3B5IHRydW5rIG1pcnJvci8gJiYKKwlzdm5fY21kIGNvcHkgdGFncyBtaXJyb3IvICYmCisJc3ZuX2NtZCBjb3B5IGJyYW5jaGVzIG1pcnJvci8gJiYKKwlzdm5fY21kIGNpIC1tICJtYWRlIG1pcnJvciIgKSAmJgorCXJtIC1yZiBzdm4gJiYKKwlnaXQgc3ZuIGluaXQgLXMgLVIgbWlycm9yIC0tcHJlZml4PW1pcnJvci8gIiRzdm5yZXBvIi9taXJyb3IgJiYKKwlnaXQgc3ZuIGZldGNoIC1SIG1pcnJvciAmJgorCWdpdCBjaGVja291dCBtaXJyb3IvdHJ1bmsgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEOikgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtbSAiYnJhbmNoIGluIG1pcnJvciIgZCAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9taXJyb3IvZDopICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZW1vdGVzL2QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaCBiL3QvdDkxMjktZ2l0LXN2bi1pMThuLWNvbW1pdGVuY29kaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlhNDBmMWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBFcmljIFdvbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBob25vcnMgaTE4bi5jb21taXRFbmNvZGluZyBpbiBjb25maWcnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitjb21wYXJlX2dpdF9oZWFkX3dpdGggKCkgeworCW5yPWB3YyAtbCA8ICIkMSJgCisJYT03CisJYj0kKCgkYSArICRuciAtIDEpKQorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgIiRhLCR7Yn1wIiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGN1cnJlbnQgIiQxIgorfQorCithX3V0ZjhfbG9jYWxlPSQobG9jYWxlIC1hIHwgc2VkIC1uICcvXC5bdVVdW3RUXVtmRl0tKjgkL3sKKwlwCisJcQorfScpCisKK2lmIHRlc3QgLW4gIiRhX3V0ZjhfbG9jYWxlIgordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBVVEY4CitlbHNlCisJc2F5ICIjIFVURi04IGxvY2FsZSBub3QgYXZhaWxhYmxlLCBzb21lIHRlc3RzIGFyZSBza2lwcGVkIgorZmkKKworY29tcGFyZV9zdm5faGVhZF93aXRoICgpIHsKKwkjIGV4dHJhY3QganVzdCB0aGUgbG9nIG1lc3NhZ2UgYW5kIHN0cmlwIG91dCBjb21taXR0ZXIgaW5mby4KKwkjIGRvbid0IHVzZSAtLWxpbWl0IGhlcmUgc2luY2Ugc3ZuIDEuMS54IGRvZXNuJ3QgaGF2ZSBpdCwKKwlMQ19BTEw9IiRhX3V0ZjhfbG9jYWxlIiBzdm4gbG9nIGBnaXQgc3ZuIGluZm8gLS11cmxgIHwgIiRQRVJMX1BBVEgiIC13IC1lICcKKwkJdXNlIGJ5dGVzOworCQkkLyA9ICgiLSJ4NzIpIC4gIlxuIjsKKwkJbXkgQHggPSA8U1RESU4+OworCQlAeCA9IHNwbGl0KC9cbi8sICR4WzFdKTsKKwkJc3BsaWNlKEB4LCAwLCAyKTsKKwkJJHhbLTFdID0gIiI7CisJCXByaW50IGpvaW4oIlxuIiwgQHgpOworCScgPiBjdXJyZW50ICYmCisJdGVzdF9jbXAgY3VycmVudCAiJDEiCit9CisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzZXR1cCIgJworCQlta2RpciAkSCAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiJEggdGVzdCIgJEggIiRzdm5yZXBvIi8kSCAmJgorCQlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvJEggJEgKKwknCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBjb21taXQgb24gZ2l0IHNpZGUiICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgorCQllY2hvICRIID5GICYmCisJCWdpdCBhZGQgRiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dCAmJgorCQlFPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSAicy9eZW5jb2RpbmcgLy9wIikgJiYKKwkJdGVzdCAieiRFIiA9ICJ6JEgiCisJCWNvbXBhcmVfZ2l0X2hlYWRfd2l0aCAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8kSC50eHQKKwkpCisJJworZG9uZQorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggZGNvbW1pdCB0byBzdm4iICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBzdm4gZGNvbW1pdCAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIGdpdC1zdm4taWQ6ICYmCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCQl0ZXN0ICJ6JEUiID0gInokSCIgJiYKKwkJY29tcGFyZV9naXRfaGVhZF93aXRoICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dAorCSkKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVVRGOCAnSVNPLTg4NTktMSBzaG91bGQgbWF0Y2ggVVRGLTggaW4gc3ZuJyAnCisJKAorCQljZCBJU084ODU5LTEgJiYKKwkJY29tcGFyZV9zdm5faGVhZF93aXRoICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0CisJKQorJworCitmb3IgSCBpbiBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFVURjggIiRIIHNob3VsZCBtYXRjaCBVVEYtOCBpbiBzdm4iICcKKwkJKAorCQkJY2QgJEggJiYKKwkJCWNvbXBhcmVfc3ZuX2hlYWRfd2l0aCAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8yLVVURi04LnR4dAorCQkpCisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzAtZ2l0LXN2bi1hdXRob3JzLWZpbGUuc2ggYi90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMzNDQzY2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoCkBAIC0wLDAgKzEsMTE0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGF1dGhvcnMgZmlsZSB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2NhdCA+IHN2bi1hdXRob3JzIDw8RU9GCithYSA9IEFBQUFBQUEgQUFBQUFBQSA8YWFAZXhhbXBsZS5jb20+CitiYiA9IEJCQkJCQkIgQkJCQkJCQiA8YmJAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCWZvciBpIGluIGFhIGJiIGNjIGRkCisJZG8KKwkJc3ZuX2NtZCBta2RpciAtbSAkaSAtLXVzZXJuYW1lICRpICIkc3ZucmVwbyIvJGkKKwlkb25lCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBpbXBvcnQgd2l0aCBpbmNvbXBsZXRlIGF1dGhvcnMgZmlsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gY2xvbmUgLS1hdXRob3JzLWZpbGU9c3ZuLWF1dGhvcnMgIiRzdm5yZXBvIiB4CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnRlZCAyIHJldmlzaW9ucyBzdWNjZXNzZnVsbHknICcKKwkoCisJCWNkIHgKKwkJdGVzdCAiYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IHdjIC1sYCIgLWVxIDIgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IFwKKwkJICBncmVwICJeYXV0aG9yIEJCQkJCQkIgQkJCQkJCQiA8YmJAZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MSB8IFwKKwkJICBncmVwICJeYXV0aG9yIEFBQUFBQUEgQUFBQUFBQSA8YWFAZXhhbXBsZVwuY29tPiAiCisJKQorCScKKworY2F0ID4+IHN2bi1hdXRob3JzIDw8RU9GCitjYyA9IENDQ0NDQ0MgQ0NDQ0NDQyA8Y2NAZXhhbXBsZS5jb20+CitkZCA9IEREREREREQgRERERERERCA8ZGRAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29udGludWVzIHRvIGltcG9ydCBvbmNlIGF1dGhvcnMgaGF2ZSBiZWVuIGFkZGVkJyAnCisJKAorCQljZCB4CisJCWdpdCBzdm4gZmV0Y2ggLS1hdXRob3JzLWZpbGU9Li4vc3ZuLWF1dGhvcnMgJiYKKwkJdGVzdCAiYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IHdjIC1sYCIgLWVxIDQgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IFwKKwkJICBncmVwICJeYXV0aG9yIEREREREREQgRERERERERCA8ZGRAZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MSB8IFwKKwkJICBncmVwICJeYXV0aG9yIENDQ0NDQ0MgQ0NDQ0NDQyA8Y2NAZXhhbXBsZVwuY29tPiAiCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1maWxlIGFnYWluc3QgZ2xvYnMnICcKKwlzdm5fY21kIG1rZGlyIC1tIGdsb2JzIC0tdXNlcm5hbWUgYWEgXAorCSAgIiRzdm5yZXBvIi9hYS90cnVuayAiJHN2bnJlcG8iL2FhL2JyYW5jaGVzICIkc3ZucmVwbyIvYWEvdGFncyAmJgorCWdpdCBzdm4gY2xvbmUgLS1hdXRob3JzLWZpbGU9c3ZuLWF1dGhvcnMgLXMgIiRzdm5yZXBvIi9hYSBhYS13b3JrICYmCisJZm9yIGkgaW4gYmIgZWUgY2MKKwlkbworCQlicmFuY2g9ImFhL2JyYW5jaGVzLyRpIgorCQlzdm5fY21kIG1rZGlyIC1tICIkYnJhbmNoIiAtLXVzZXJuYW1lICRpICIkc3ZucmVwby8kYnJhbmNoIgorCWRvbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZhaWxzIG9uIGVlJyAnCisJKCBjZCBhYS13b3JrICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZmV0Y2ggLS1hdXRob3JzLWZpbGU9Li4vc3ZuLWF1dGhvcnMgKQorCScKKwordG1wX2NvbmZpZ19nZXQgKCkgeworCUdJVF9DT05GSUc9LmdpdC9zdm4vLm1ldGFkYXRhIGdpdCBjb25maWcgLS1nZXQgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsdXJlIGhhcHBlbmVkIHdpdGhvdXQgbmVnYXRpdmUgc2lkZSBlZmZlY3RzJyAnCisJKAorCQljZCBhYS13b3JrICYmCisJCXRlc3QgNiAtZXEgImB0bXBfY29uZmlnX2dldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXZgIiAmJgorCQl0ZXN0IDYgLWVxICJgdG1wX2NvbmZpZ19nZXQgc3ZuLXJlbW90ZS5zdm4udGFncy1tYXhSZXZgIgorCSkKKwknCisKK2NhdCA+PiBzdm4tYXV0aG9ycyA8PEVPRgorZWUgPSBFRUVFRUVFIEVFRUVFRUUgPGVlQGV4YW1wbGUuY29tPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNvbnRpbnVlcyBhZnRlciBhdXRob3JzLWZpbGUgaXMgZml4ZWQnICcKKwkoCisJCWNkIGFhLXdvcmsgJiYKKwkJZ2l0IHN2biBmZXRjaCAtLWF1dGhvcnMtZmlsZT0uLi9zdm4tYXV0aG9ycyAmJgorCQl0ZXN0IDggLWVxICJgdG1wX2NvbmZpZ19nZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMtbWF4UmV2YCIgJiYKKwkJdGVzdCA4IC1lcSAiYHRtcF9jb25maWdfZ2V0IHN2bi1yZW1vdGUuc3ZuLnRhZ3MtbWF4UmV2YCIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmcmVzaCBjbG9uZSB3aXRoIHN2bi5hdXRob3JzLWZpbGUgaW4gY29uZmlnJyAnCisJKAorCQlybSAtciAiJEdJVF9ESVIiICYmCisJCXRlc3QgeCA9IHgiJChnaXQgY29uZmlnIHN2bi5hdXRob3JzZmlsZSkiICYmCisJCXRlc3RfY29uZmlnPSIkSE9NRSIvLmdpdGNvbmZpZyAmJgorCQlzYW5lX3Vuc2V0IEdJVF9ESVIgJiYKKwkJc2FuZV91bnNldCBHSVRfQ09ORklHICYmCisJCWdpdCBjb25maWcgLS1nbG9iYWwgXAorCQkgIHN2bi5hdXRob3JzZmlsZSAiJEhPTUUiL3N2bi1hdXRob3JzICYmCisJCXRlc3QgeCIkSE9NRSIvc3ZuLWF1dGhvcnMgPSB4IiQoZ2l0IGNvbmZpZyBzdm4uYXV0aG9yc2ZpbGUpIiAmJgorCQlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgZ2l0Y29uZmlnLmNsb25lICYmCisJCWNkIGdpdGNvbmZpZy5jbG9uZSAmJgorCQlucl9leD0kKGdpdCBsb2cgfCBncmVwICJeQXV0aG9yOi4qZXhhbXBsZS5jb20iIHwgd2MgLWwpICYmCisJCW5yX3Jldj0kKGdpdCByZXYtbGlzdCBIRUFEIHwgd2MgLWwpICYmCisJCXRlc3QgJG5yX3JldiAtZXEgJG5yX2V4CisJKQorJworCit0ZXN0X2RlYnVnICdHSVRfRElSPWdpdGNvbmZpZy5jbG9uZS8uZ2l0IGdpdCBsb2cnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzMS1naXQtc3ZuLWVtcHR5LXN5bWxpbmsuc2ggYi90L3Q5MTMxLWdpdC1zdm4tZW1wdHktc3ltbGluay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNzYyMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzMS1naXQtc3ZuLWVtcHR5LXN5bWxpbmsuc2gKQEAgLTAsMCArMSwxMTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHRoYXQgZ2l0IGhhbmRsZXMgYW4gc3ZuIHJlcG9zaXRvcnkgd2l0aCBlbXB0eSBzeW1saW5rcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biBkdW1wZmlsZScgJworCXN2bmFkbWluIGxvYWQgIiRyYXdzdm5yZXBvIiA8PEVPRgorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogNjA3ODBmOWEtN2RmNS00M2I0LTgzYWItNjBlMmMwNjczZWY3CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTExLTI2VDA3OjE3OjI3LjU5MDU3N1oKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgNAordGVzdAorSyAxMAorc3ZuOmF1dGhvcgorViAxMgorbm9ybWFscGVyc29uCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTExLTI2VDA3OjE4OjAzLjUxMTgzNloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK0NvbnRlbnQtbGVuZ3RoOiAzMworCitLIDExCitzdm46c3BlY2lhbAorViAxCisqCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDEzCitiYXIgPT4gZG9pbmsKKworSyAxMAorc3ZuOmF1dGhvcgorViAxMgorbm9ybWFscGVyc29uCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTExLTI3VDAzOjU1OjMxLjYwMTY3MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogOTJjYTRmZTdhOTcyMWY4NzdmNzY1YzI1MmRjZDY2YzkKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitsaW5rIGRvaW5rCisKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyBnaXQgc3ZuJyAnZ2l0IHN2biBjbG9uZSAtcjEgIiRzdm5yZXBvIiB4JwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIGJyb2tlbiBzeW1saW5rIHdvcmthcm91bmQnIFwKKyAgJyhjZCB4ICYmIGdpdCBjb25maWcgc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kIHRydWUpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImJhciIgaXMgYW4gZW1wdHkgZmlsZScgJ3Rlc3QgLWYgeC9iYXIgJiYgISB0ZXN0IC1zIHgvYmFyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0ICJiYXIiID0+IHN5bWxpbmsgZml4IGZyb20gc3ZuJyBcCisJCScoY2QgeCAmJiBnaXQgc3ZuIHJlYmFzZSknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICciYmFyIiBiZWNvbWVzIGEgc3ltbGluaycgJ3Rlc3QgLWggeC9iYXInCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXIxICIkc3ZucmVwbyIgeScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FibGUgYnJva2VuIHN5bWxpbmsgd29ya2Fyb3VuZCcgXAorICAnKGNkIHkgJiYgZ2l0IGNvbmZpZyBzdm4uYnJva2VuU3ltbGlua1dvcmthcm91bmQgZmFsc2UpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImJhciIgaXMgYW4gZW1wdHkgZmlsZScgJ3Rlc3QgLWYgeS9iYXIgJiYgISB0ZXN0IC1zIHkvYmFyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0ICJiYXIiID0+IHN5bWxpbmsgZml4IGZyb20gc3ZuJyBcCisJCScoY2QgeSAmJiBnaXQgc3ZuIHJlYmFzZSknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYmFyIiBkb2VzIG5vdCBiZWNvbWUgYSBzeW1saW5rJyAnISB0ZXN0IC1MIHkvYmFyJworCisjIHN2bi5icm9rZW5TeW1saW5rV29ya2Fyb3VuZCBpcyB1bnNldAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXIxICIkc3ZucmVwbyIgeicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJiYXIiIGlzIGFuIGVtcHR5IGZpbGUnICd0ZXN0IC1mIHovYmFyICYmICEgdGVzdCAtcyB6L2JhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgXAorCQknKGNkIHogJiYgZ2l0IHN2biByZWJhc2UpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImJhciIgZG9lcyBub3QgYmVjb21lIGEgc3ltbGluaycgJyEgdGVzdCAtTCB6L2JhcicKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzItZ2l0LXN2bi1icm9rZW4tc3ltbGluay5zaCBiL3QvdDkxMzItZ2l0LXN2bi1icm9rZW4tc3ltbGluay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YzRjOTBiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzMi1naXQtc3ZuLWJyb2tlbi1zeW1saW5rLnNoCkBAIC0wLDAgKzEsMTAyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB0aGF0IGdpdCBoYW5kbGVzIGFuIHN2biByZXBvc2l0b3J5IHdpdGggZW1wdHkgc3ltbGlua3MnCisKKy4gLi9saWItZ2l0LXN2bi5zaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICcKKwlzdm5hZG1pbiBsb2FkICIkcmF3c3ZucmVwbyIgPDxFT0YKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDYwNzgwZjlhLTdkZjUtNDNiNC04M2FiLTYwZTJjMDY3M2VmNworCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yNlQwNzoxNzoyNy41OTA1NzdaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDQKK3Rlc3QKK0sgMTAKK3N2bjphdXRob3IKK1YgMTIKK25vcm1hbHBlcnNvbgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yNlQwNzoxODowMy41MTE4MzZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMzMKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDkxMmVjODAzYjJjZTQ5ZTRhNTQxMDY4ZDQ5NWFiNTcwCitDb250ZW50LWxlbmd0aDogMzcKKworSyAxMQorc3ZuOnNwZWNpYWwKK1YgMQorKgorUFJPUFMtRU5ECithc2RmCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxMworYmFyID0+IGRvaW5rCisKK0sgMTAKK3N2bjphdXRob3IKK1YgMTIKK25vcm1hbHBlcnNvbgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yN1QwMzo1NTozMS42MDE2NzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDkyY2E0ZmU3YTk3MjFmODc3Zjc2NWMyNTJkY2Q2NmM5CitDb250ZW50LWxlbmd0aDogMTAKKworbGluayBkb2luaworCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXIxICIkc3ZucmVwbyIgeCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnImJhciIgaXMgYSBzeW1saW5rIHRoYXQgcG9pbnRzIHRvICJhc2RmIicgJworCXRlc3QgLUwgeC9iYXIgJiYKKwkoY2QgeCAmJiB0ZXN0IHhhc2RmID0geCJgZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDpiYXJgIikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0ICJiYXIiID0+IHN5bWxpbmsgZml4IGZyb20gc3ZuJyAnCisJKGNkIHggJiYgZ2l0IHN2biByZWJhc2UpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJyJiYXIiIHJlbWFpbnMgYSBwcm9wZXIgc3ltbGluaycgJworCXRlc3QgLUwgeC9iYXIgJiYKKwkoY2QgeCAmJiB0ZXN0IHhkb2luayA9IHgiYGdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6YmFyYCIpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzMy1naXQtc3ZuLW5lc3RlZC1naXQtcmVwby5zaCBiL3QvdDkxMzMtZ2l0LXN2bi1uZXN0ZWQtZ2l0LXJlcG8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjNjMzBlNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzMtZ2l0LXN2bi1uZXN0ZWQtZ2l0LXJlcG8uc2gKQEAgLTAsMCArMSwxMDEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcHJvcGVydHkgdGVzdHMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbyB3aXRoIGEgZ2l0IHJlcG8gaW5zaWRlIGl0JyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHMgJiYKKwkoCisJCWNkIHMgJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdCAtZiAuZ2l0L0hFQUQgJiYKKwkJPiAuZ2l0L2EgJiYKKwkJZWNobyBhID4gYSAmJgorCQlzdm5fY21kIGFkZCAuZ2l0IGEgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImNyZWF0ZSBhIG5lc3RlZCBnaXQgcmVwbyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvIGhpID4+IC5naXQvYSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibW9kaWZ5IC5naXQvYSIgJiYKKwkJc3ZuX2NtZCB1cAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYW4gU1ZOIHJlcG8gY29udGFpbmluZyBhIGdpdCByZXBvJyAnCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIGcgJiYKKwllY2hvIGEgPiBleHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZy9hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIC5naXQnICcKKwkoCisJCWNkIHMgJiYKKwkJZWNobyBiID4+IGEgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIC5naXQiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2YgLmdpdCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCWVjaG8gYSA+IGV4cGVjdCAmJgorCQllY2hvIGIgPj4gZXhwZWN0ICYmCisJCXRlc3RfY21wIGEgZXhwZWN0ICYmCisJCXJtIGV4cGVjdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiAuZ2l0JyAnCisJKAorCQljZCBzICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSBpbnNpZGUgYW4gU1ZOIHJlcG8iICYmCisJCWdpdCBsb2cgJiYKKwkJc3ZuX2NtZCBhZGQgLS1mb3JjZSAuZ2l0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIC5naXQiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiAuZ2l0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8nICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJZWNobyBhID4gZXhwZWN0ICYmCisJCWVjaG8gYiA+PiBleHBlY3QgJiYKKwkJdGVzdF9jbXAgYSBleHBlY3QgJiYKKwkJcm0gZXhwZWN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiAuZ2l0JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gYyA+PiBhICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSBpbnNpZGUgYW4gU1ZOIHJlcG8iICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiAuZ2l0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIC5naXQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyBhZ2FpbicgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQllY2hvIGEgPiBleHBlY3QgJiYKKwkJZWNobyBiID4+IGV4cGVjdCAmJgorCQllY2hvIGMgPj4gZXhwZWN0ICYmCisJCXRlc3RfY21wIGEgZXhwZWN0ICYmCisJCXJtIGV4cGVjdAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTM0LWdpdC1zdm4taWdub3JlLXBhdGhzLnNoIGIvdC90OTEzNC1naXQtc3ZuLWlnbm9yZS1wYXRocy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOWZmMTBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzNC1naXQtc3ZuLWlnbm9yZS1wYXRocy5zaApAQCAtMCwwICsxLDE0NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBWaXRhbHkgU2h1a2VsYQorIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcHJvcGVydHkgdGVzdHMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdCByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHMgJiYKKwkoCisJCWNkIHMgJiYKKwkJbWtkaXIgcXFxIHd3dyAmJgorCQllY2hvIHRlc3RfcXFxID4gcXFxL3Rlc3RfcXFxLnR4dCAmJgorCQllY2hvIHRlc3Rfd3d3ID4gd3d3L3Rlc3Rfd3d3LnR4dCAmJgorCQlzdm5fY21kIGFkZCBxcXEgJiYKKwkJc3ZuX2NtZCBhZGQgd3d3ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgc29tZSBmaWxlcyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvIGhpID4+IHd3dy90ZXN0X3d3dy50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSB3d3cvdGVzdF93d3cudHh0IiAmJgorCQlzdm5fY21kIHVwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBhbiBTVk4gcmVwb3NpdG9yeSB3aXRoIGlnbm9yZWQgd3d3IGRpcmVjdG9yeScgJworCWdpdCBzdm4gY2xvbmUgLS1pZ25vcmUtcGF0aHM9Il53d3ciICIkc3ZucmVwbyIgZyAmJgorCWVjaG8gdGVzdF9xcXEgPiBleHBlY3QgJiYKKwlmb3IgaSBpbiBnLyovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4cGVjdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCtmZXRjaCBhbiBTVk4gcmVwb3NpdG9yeSB3aXRoIGlnbm9yZWQgd3d3IGRpcmVjdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIGMgJiYKKwkoIGNkIGMgJiYgZ2l0IHN2biBmZXRjaCAtLWlnbm9yZS1wYXRocz0iXnd3dyIgKSAmJgorCXJtIGV4cGVjdDIgJiYKKwllY2hvIHRlc3RfcXFxID4gZXhwZWN0ICYmCisJZm9yIGkgaW4gYy8qLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCXRlc3RfY21wIGV4cGVjdCBleHBlY3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBpZ25vcmUtcGF0aHMgY29uZmlnIHNhdmVkIGJ5IGNsb25lJyAnCisJKAorCSAgICBjZCBnICYmCisJICAgIGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uaWdub3JlLXBhdGhzIHwgZmdyZXAgInd3dyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dycgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIGIgPj4gcXFxL3Rlc3RfcXFxLnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2Ygd3d3IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIChjb25maWcgaWdub3JlKScgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAob3B0aW9uIGlnbm9yZSknICcKKwkoCisJCWNkIGMgJiYKKwkJZ2l0IHN2biByZWJhc2UgLS1pZ25vcmUtcGF0aHM9Il53d3ciICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgaWdub3JlZCB3d3cnICcKKwkoCisJCWNkIHMgJiYKKwkJZWNobyB6YXEgPj4gd3d3L3Rlc3Rfd3d3LnR4dAorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiB3d3cvdGVzdF93d3cudHh0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2Ygd3d3L3Rlc3Rfd3d3LnR4dCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIChjb25maWcgaWdub3JlKScgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAob3B0aW9uIGlnbm9yZSknICcKKwkoCisJCWNkIGMgJiYKKwkJZ2l0IHN2biByZWJhc2UgLS1pZ25vcmUtcGF0aHM9Il53d3ciICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gY3ZmID4+IHd3dy90ZXN0X3d3dy50eHQKKwkJZWNobyB5Z2cgPj4gcXFxL3Rlc3RfcXFxLnR4dAorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3ciICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3ciCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyBhZ2FpbiAoY29uZmlnIGlnbm9yZSknICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxueWdnXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyBhZ2FpbiAob3B0aW9uIGlnbm9yZSknICcKKwkoCisJCWNkIGMgJiYKKwkJZ2l0IHN2biByZWJhc2UgLS1pZ25vcmUtcGF0aHM9Il53d3ciICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbnlnZ1xuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTM1LWdpdC1zdm4tbW92ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2ggYi90L3Q5MTM1LWdpdC1zdm4tbW92ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTI4MGU1ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzUtZ2l0LXN2bi1tb3ZlZC1icmFuY2gtZW1wdHktZmlsZS5zaApAQCAtMCwwICsxLDIxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBtb3ZlZCBzdm4gYnJhbmNoIHdpdGggbWlzc2luZyBlbXB0eSBmaWxlcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biBkdW1wZmlsZScgICcKKwlzdm5hZG1pbiBsb2FkICIkcmF3c3ZucmVwbyIgPCAiJHtURVNUX0RJUkVDVE9SWX0vdDkxMzUvc3ZuLmR1bXAiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyBnaXQgc3ZuJyAnZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iIHgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGhhdCBiMSBleGlzdHMgYW5kIGlzIGVtcHR5JyAnCisJKAorCQljZCB4ICYmCisJCWdpdCByZXNldCAtLWhhcmQgYnJhbmNoLWMgJiYKKwkJdGVzdCAtZiBiMSAmJgorCQkhIHRlc3QgLXMgYjEKKwkpCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzUvc3ZuLmR1bXAgYi90L3Q5MTM1L3N2bi5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MWMwY2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM1L3N2bi5kdW1wCkBAIC0wLDAgKzEsMTkyIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiAxZjgwZTkxOS1lOWUzLTRkODAtYTNhZS1kOWYyMTA5NWUyN2IKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MTYuNDI0MDI3WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIzCitDb250ZW50LWxlbmd0aDogMTIzCisKK0sgNworc3ZuOmxvZworViAyMAoraW5pdCBzdGFuZGFyZCBsYXlvdXQKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MTcuMTk1MDcyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxOAorYnJhbmNoLWIgb2ZmIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjE5LjE2MDA5NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1iCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKK1Byb3AtY29udGVudC1sZW5ndGg6IDM0CitDb250ZW50LWxlbmd0aDogMzQKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTIwCitDb250ZW50LWxlbmd0aDogMTIwCisKK0sgNworc3ZuOmxvZworViAxNworYWRkIGVtcHR5IGZpbGUgYjEKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MjAuMTk0NTY4WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnJhbmNoLWIvYjEKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDgKK2JyYW5jaC1jCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjIxLjE2OTEwMFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1jCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDMKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyNgorQ29udGVudC1sZW5ndGg6IDEyNgorCitLIDcKK3N2bjpsb2cKK1YgMjMKK29vcHMsIHdyb25nIGJyYW5jaHBvaW50CitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjIxLjI1MzU1N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1jCitOb2RlLWFjdGlvbjogZGVsZXRlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjcKK0NvbnRlbnQtbGVuZ3RoOiAxMjcKKworSyA3Citzdm46bG9nCitWIDI0CiticmFuY2gtYyBvZmYgb2YgYnJhbmNoLWIKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MjEuMzE0NjU5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnJhbmNoLWMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogNQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9icmFuY2gtYgorUHJvcC1jb250ZW50LWxlbmd0aDogMzQKK0NvbnRlbnQtbGVuZ3RoOiAzNAorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDAKKworUFJPUFMtRU5ECisKKwpkaWZmIC0tZ2l0IGEvdC90OTEzNi1naXQtc3ZuLXJlY3JlYXRlZC1icmFuY2gtZW1wdHktZmlsZS5zaCBiL3QvdDkxMzYtZ2l0LXN2bi1yZWNyZWF0ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzMzZDE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzYtZ2l0LXN2bi1yZWNyZWF0ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2gKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgcmVjcmVhdGVkIHN2biBicmFuY2ggd2l0aCBlbXB0eSBmaWxlcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biBkdW1wZmlsZScgICcKKwlzdm5hZG1pbiBsb2FkICIkcmF3c3ZucmVwbyIgPCAiJHtURVNUX0RJUkVDVE9SWX0vdDkxMzYvc3ZuLmR1bXAiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyBnaXQgc3ZuJyAnZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iIHgnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzNi9zdm4uZHVtcCBiL3QvdDkxMzYvc3ZuLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxY2UwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzYvc3ZuLmR1bXAKQEAgLTAsMCArMSwxOTIgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IGVlY2FlMDIxLThmMTYtNDhkYS05NjlkLTc5YmViOGFlNmVhNQorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1Ni4yOTI4OTBaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDYKK0NvbnRlbnQtbGVuZ3RoOiAxMDYKKworSyA3Citzdm46bG9nCitWIDQKK2luaXQKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTcuMTkyMzg0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdGFncworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9maWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTA1CitDb250ZW50LWxlbmd0aDogMTA1CisKK0sgNworc3ZuOmxvZworViAzCisxLjAKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTguMTI0NzI0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdGFncy8xLjAKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTExCitDb250ZW50LWxlbmd0aDogMTExCisKK0sgNworc3ZuOmxvZworViA5CisxLjAuMS1iYWQKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTguMTUxNzI3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdGFncy8xLjAuMQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRhZ3MvMS4wCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDkKK1dyb25nIHRhZworSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1OC4xNjc0MjdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0YWdzLzEuMC4xCitOb2RlLWFjdGlvbjogZGVsZXRlCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTMKK0NvbnRlbnQtbGVuZ3RoOiAxMTMKKworSyA3Citzdm46bG9nCitWIDEwCisxLjAtYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU4LjE4NDQ5OFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzLzEuMAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA0CitOb2RlLWNvcHlmcm9tLXBhdGg6IHRhZ3MvMS4wCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTMKK0NvbnRlbnQtbGVuZ3RoOiAxMTMKKworSyA3Citzdm46bG9nCitWIDEwCisxLjAuMS1nb29kCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU4LjIwMDY5NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRhZ3MvMS4wLjEKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogNQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy8xLjAKKworCmRpZmYgLS1naXQgYS90L3Q5MTM3LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaCBiL3QvdDkxMzctZ2l0LXN2bi1kY29tbWl0LWNsb2JiZXItc2VyaWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxN2FhMzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM3LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaApAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IGNsb2JiZXIgc2VyaWVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCShjZCBpbXBvcnQgJiYKKwlhd2sgIkJFR0lOIHsgZm9yIChpID0gMTsgaSA8IDY0OyBpKyspIHsgcHJpbnQgaSB9IH0iID4gZmlsZQorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIKKwkpICYmCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJdGVzdCAtZSBmaWxlCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcoc3VwcG9zZWRseSkgbm9uLWNvbmZsaWN0aW5nIGNoYW5nZSBmcm9tIFNWTicgJworCXRlc3QgeCJgc2VkIC1uIC1lIDU4cCA8IGZpbGVgIiA9IHg1OCAmJgorCXRlc3QgeCJgc2VkIC1uIC1lIDYxcCA8IGZpbGVgIiA9IHg2MSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0bXAgJiYKKwkoY2QgdG1wICYmCisJCSIkUEVSTF9QQVRIIiAtaS5iYWsgLXAgLWUgInMvXjU4JC81NTg4LyIgZmlsZSAmJgorCQkiJFBFUkxfUEFUSCIgLWkuYmFrIC1wIC1lICJzL142MSQvNjYxMS8iIGZpbGUgJiYKKwkJcG9rZSBmaWxlICYmCisJCXRlc3QgeCJgc2VkIC1uIC1lIDU4cCA8IGZpbGVgIiA9IHg1NTg4ICYmCisJCXRlc3QgeCJgc2VkIC1uIC1lIDYxcCA8IGZpbGVgIiA9IHg2NjExICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICI1OCA9PiA1NTg4LCA2MSA9PiA2NjExIgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NvbWUgdW5yZWxhdGVkIGNoYW5nZXMgdG8gZ2l0JyAiCisJZWNobyBoaSA+IGxpZmUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGxpZmUgJiYKKwlnaXQgY29tbWl0IC1tIGhpLWxpZmUgJiYKKwllY2hvIGJ5ZSA+PiBsaWZlICYmCisJZ2l0IGNvbW1pdCAtbSBieWUtbGlmZSBsaWZlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2UgZmlsZSBidXQgaW4gdW5yZWxhdGVkIGFyZWEnICIKKwl0ZXN0IHhcIlxgc2VkIC1uIC1lIDRwIDwgZmlsZVxgXCIgPSB4NCAmJgorCXRlc3QgeFwiXGBzZWQgLW4gLWUgN3AgPCBmaWxlXGBcIiA9IHg3ICYmCisJIiRQRVJMX1BBVEgiIC1pLmJhayAtcCAtZSAncy9eNFwkLzQ0NDQvJyBmaWxlICYmCisJIiRQRVJMX1BBVEgiIC1pLmJhayAtcCAtZSAncy9eN1wkLzc3NzcvJyBmaWxlICYmCisJdGVzdCB4XCJcYHNlZCAtbiAtZSA0cCA8IGZpbGVcYFwiID0geDQ0NDQgJiYKKwl0ZXN0IHhcIlxgc2VkIC1uIC1lIDdwIDwgZmlsZVxgXCIgPSB4Nzc3NyAmJgorCWdpdCBjb21taXQgLW0gJzQgPT4gNDQ0NCwgNyA9PiA3Nzc3JyBmaWxlICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJc3ZuX2NtZCB1cCB0bXAgJiYKKwljZCB0bXAgJiYKKwkJdGVzdCB4XCJcYHNlZCAtbiAtZSA0cCA8IGZpbGVcYFwiID0geDQ0NDQgJiYKKwkJdGVzdCB4XCJcYHNlZCAtbiAtZSA3cCA8IGZpbGVcYFwiID0geDc3NzcgJiYKKwkJdGVzdCB4XCJcYHNlZCAtbiAtZSA1OHAgPCBmaWxlXGBcIiA9IHg1NTg4ICYmCisJCXRlc3QgeFwiXGBzZWQgLW4gLWUgNjFwIDwgZmlsZVxgXCIgPSB4NjYxMQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0ZW1wdCB0byBkY29tbWl0IHdpdGggYSBkaXJ0eSBpbmRleCcgJworCWVjaG8gZm9vID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzgtZ2l0LXN2bi1hdXRob3JzLXByb2cuc2ggYi90L3Q5MTM4LWdpdC1zdm4tYXV0aG9ycy1wcm9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzY2M1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM4LWdpdC1zdm4tYXV0aG9ycy1wcm9nLnNoCkBAIC0wLDAgKzEsODMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nLCBNYXJrIExvZGF0bworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGF1dGhvcnMgcHJvZyB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2NhdCA+IHN2bi1hdXRob3JzLXByb2cgPDwnRU9GJworIyEvdXNyL2Jpbi9wZXJsCiskXyA9IHNoaWZ0OworaWYgKHMvLXN1YiQvLykgIHsKKwlwcmludCAiJF8gPCRfXEBzdWIuZXhhbXBsZS5jb20+XG4iOworfQorZWxzZSB7CisJcHJpbnQgIiRfIDwkX1xAZXhhbXBsZS5jb20+XG4iOworfQorRU9GCitjaG1vZCAreCBzdm4tYXV0aG9ycy1wcm9nCisKK2NhdCA+IHN2bi1hdXRob3JzIDw8J0VPRicKK2ZmID0gRkZGRkZGRiBGRkZGRkZGIDxmRmZAb3RoZXIuZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCWZvciBpIGluIGFhIGJiIGNjLXN1YiBkZC1zdWIgZWUtZm9vIGZmCisJZG8KKwkJc3ZuIG1rZGlyIC1tICRpIC0tdXNlcm5hbWUgJGkgIiRzdm5yZXBvIi8kaQorCWRvbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBhdXRob3JzIHdpdGggcHJvZyBhbmQgZmlsZScgJworCWdpdCBzdm4gY2xvbmUgLS1hdXRob3JzLXByb2c9Li9zdm4tYXV0aG9ycy1wcm9nIFwKKwkgICAgLS1hdXRob3JzLWZpbGU9c3ZuLWF1dGhvcnMgIiRzdm5yZXBvIiB4CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnRlZCA2IHJldmlzaW9ucyBzdWNjZXNzZnVsbHknICcKKwkoCisJCWNkIHgKKwkJdGVzdCAiYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IHdjIC1sYCIgLWVxIDYKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3JzLXByb2cgcmFuIGNvcnJlY3RseScgJworCSgKKwkJY2QgeAorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjEgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBlZS1mb28gPGVlLWZvb0BleGFtcGxlXC5jb20+ICIgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn4yIHwgXAorCQkgIGdyZXAgIl5hdXRob3IgZGQgPGRkQHN1YlwuZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MyB8IFwKKwkJICBncmVwICJeYXV0aG9yIGNjIDxjY0BzdWJcLmV4YW1wbGVcLmNvbT4gIiAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjQgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBiYiA8YmJAZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+NSB8IFwKKwkJICBncmVwICJeYXV0aG9yIGFhIDxhYUBleGFtcGxlXC5jb20+ICIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3JzLWZpbGUgb3ZlcnJvZGUgYXV0aG9ycy1wcm9nJyAnCisJKAorCQljZCB4CisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm4gfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBGRkZGRkZGIEZGRkZGRkYgPGZGZkBvdGhlclwuZXhhbXBsZVwuY29tPiAiCisJKQorCScKKworZ2l0IC0tZ2l0LWRpcj14Ly5naXQgY29uZmlnIC0tdW5zZXQgc3ZuLmF1dGhvcnNmaWxlCitnaXQgLS1naXQtZGlyPXgvLmdpdCBjb25maWcgLS11bnNldCBzdm4uYXV0aG9yc3Byb2cKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1wcm9nIGhhbmRsZWQgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHVzZXJuYW1lJyAnCisJc3ZuIG1rZGlyIC1tIGJhZCAtLXVzZXJuYW1lICJ4eXo7IHRvdWNoIGV2aWwiICIkc3ZucmVwbyIvYmFkICYmCisJKAorCQljZCB4ICYmCisJCWdpdCBzdm4gLS1hdXRob3JzLXByb2c9Li4vc3ZuLWF1dGhvcnMtcHJvZyBmZXRjaCAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZuIHwKKwkJZ3JlcCAiXmF1dGhvciB4eXo7IHRvdWNoIGV2aWwgPHh5ejsgdG91Y2ggZXZpbEBleGFtcGxlXC5jb20+ICIgJiYKKwkJISB0ZXN0IC1mIGV2aWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzOS1naXQtc3ZuLW5vbi11dGY4LWNvbW1pdGVuY29kaW5nLnNoIGIvdC90OTEzOS1naXQtc3ZuLW5vbi11dGY4LWNvbW1pdGVuY29kaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyZDgwYjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM5LWdpdC1zdm4tbm9uLXV0ZjgtY29tbWl0ZW5jb2Rpbmcuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biByZWZ1c2VzIHRvIGRjb21taXQgbm9uLVVURjggbWVzc2FnZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCisjIElTTy0yMDIyLUpQIGNhbiBwYXNzIGZvciB2YWxpZCBVVEYtOCwgc28gc2tpcHBpbmcgdGhhdCBpbiB0aGlzIHRlc3QKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCisJCW1rZGlyICRIICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICIkSCB0ZXN0IiAkSCAiJHN2bnJlcG8iLyRIICYmCisJCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi8kSCAkSAorCScKK2RvbmUKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIGNvbW1pdCBvbiBnaXQgc2lkZSIgJworCSgKKwkJY2QgJEggJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRIICYmCisJCWdpdCBjaGVja291dCAtYiB0IHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCisJCWVjaG8gJEggPkYgJiYKKwkJZ2l0IGFkZCBGICYmCisJCWdpdCBjb21taXQgLWEgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJEgudHh0ICYmCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCQl0ZXN0ICJ6JEUiID0gInokSCIKKwkpCisJJworZG9uZQorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggZGNvbW1pdCB0byBzdm4iICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdAorCSkKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0MC1naXQtc3ZuLXJlc2V0LnNoIGIvdC90OTE0MC1naXQtc3ZuLXJlc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4NTU5MDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQwLWdpdC1zdm4tcmVzZXQuc2gKQEAgLTAsMCArMSw2NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBCZW4gSmFja3NvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHJlc2V0JworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCW1rZGlyIHZpcyAmJgorCQllY2hvIGFsd2F5cyB2aXNpYmxlID4gdmlzL3Zpcy50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgdmlzICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgdmlzaWJsZSBmaWxlcyIgJiYKKwkJbWtkaXIgaGlkICYmCisJCWVjaG8gaW5pdGlhbGx5IGhpZGRlbiA+IGhpZC9oaWQudHh0ICYmCisJCXN2bl9jbWQgYWRkIGhpZCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIGluaXRpYWxseSBoaWRkZW4gZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBtb2QgPj4gdmlzL3Zpcy50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSB2aXMiICYmCisJCXN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIFNWTiByZXBvc2l0b3J5IHdpdGggaGlkZGVuIGRpcmVjdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIGcgJiYKKwkoIGNkIGcgJiYgZ2l0IHN2biBmZXRjaCAtLWlnbm9yZS1wYXRocz0iXmhpZCIgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgaGlkZGVuIGZpbGUgaW4gU1ZOIHJlcG8nICcKKwkoIGNkIHMgJiYKKwkgIGVjaG8gbW9kIGhpZGRlbiA+PiBoaWQvaGlkLnR4dCAmJgorCSAgc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSBoaWQiICYmCisJICBzdm5fY21kIHVwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmYWlscyBvbiBtb2RpZmllZCBoaWRkZW4gZmlsZScgJworCSggY2QgZyAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdCAmJgorCSAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBmZXRjaCAyPiAuLi9lcnJvcnMgJiYKKwkgIGdpdCBzdm4gZmluZC1yZXYgcmVmcy9yZW1vdGVzL2dpdC1zdm4gPiAuLi9leHBlY3QyICkgJiYKKwlmZ3JlcCAibm90IGZvdW5kIGluIGNvbW1pdCIgZXJyb3JzICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4cGVjdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdW53aW5kcyBiYWNrIHRvIHIxJyAnCisJKCBjZCBnICYmCisJICBnaXQgc3ZuIHJlc2V0IC1yMSAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdDIgKSAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4cGVjdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmZXRjaCBzdWNjZWVkcyBub3QgaWdub3JpbmcgYW55IGZpbGVzJyAnCisJKCBjZCBnICYmCisJICBnaXQgc3ZuIGZldGNoICYmCisJICBnaXQgc3ZuIHJlYmFzZSAmJgorCSAgZmdyZXAgIm1vZCBoaWRkZW4iIGhpZC9oaWQudHh0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDEtZ2l0LXN2bi1tdWx0aXBsZS1icmFuY2hlcy5zaCBiL3QvdDkxNDEtZ2l0LXN2bi1tdWx0aXBsZS1icmFuY2hlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zY2QwNjcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0MS1naXQtc3ZuLW11bHRpcGxlLWJyYW5jaGVzLnNoCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IE1hcmMgQnJhbmNoYXVkCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbXVsdGlwbGUgYnJhbmNoIGFuZCB0YWcgcGF0aHMgaW4gdGhlIHN2biByZXBvJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlta2Rpcglwcm9qZWN0IFwKKwkJcHJvamVjdC90cnVuayBcCisJCXByb2plY3QvYl9vbmUgXAorCQlwcm9qZWN0L2JfdHdvIFwKKwkJcHJvamVjdC90YWdzX0EgXAorCQlwcm9qZWN0L3RhZ3NfQiAmJgorCWVjaG8gMSA+IHByb2plY3QvdHJ1bmsvYS5maWxlICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wcm9qZWN0IiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDEiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJICIkc3ZucmVwby9wcm9qZWN0L2Jfb25lL2ZpcnN0IiAmJgorCXN2bl9jbWQgY3AgLW0gIlRhZyAxIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19BLzEuMCIgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwby9wcm9qZWN0IiBzdm5fcHJvamVjdCAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJZWNobyAyID4gdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSAxIiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDIiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJCSAiJHN2bnJlcG8vcHJvamVjdC9iX29uZS9zZWNvbmQiICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyAyIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQS8yLjAiICYmCisJCWVjaG8gMyA+IHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgMiIgdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIkJyYW5jaCAzIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCQkgIiRzdm5yZXBvL3Byb2plY3QvYl90d28vMSIgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDMiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19BLzMuMCIgJiYKKwkJZWNobyA0ID4gdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSAzIiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDQiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJCSAiJHN2bnJlcG8vcHJvamVjdC9iX3R3by8yIiAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgNCIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0EvNC4wIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gNSA+IGJfb25lL2ZpcnN0L2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgNCIgYl9vbmUvZmlyc3QvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA1IiAiJHN2bnJlcG8vcHJvamVjdC9iX29uZS9maXJzdCIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQi92NSIgJiYKKwkJZWNobyA2ID4gYl9vbmUvc2Vjb25kL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgNSIgYl9vbmUvc2Vjb25kL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgNiIgIiRzdm5yZXBvL3Byb2plY3QvYl9vbmUvc2Vjb25kIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19CL3Y2IiAmJgorCQllY2hvIDcgPiBiX3R3by8xL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgNiIgYl90d28vMS9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDciICIkc3ZucmVwby9wcm9qZWN0L2JfdHdvLzEiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0IvdjciICYmCisJCWVjaG8gOCA+IGJfdHdvLzIvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA3IiBiX3R3by8yL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgOCIgIiRzdm5yZXBvL3Byb2plY3QvYl90d28vMiIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQi92OCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG11bHRpcGxlIGJyYW5jaCBhbmQgdGFnIHBhdGhzJyAnCisJZ2l0IHN2biBjbG9uZSAtVCB0cnVuayBcCisJCSAgICAgIC1iIGJfb25lLyogLS1icmFuY2hlcyBiX3R3by8qIFwKKwkJICAgICAgLXQgdGFnc19BLyogLS10YWdzIHRhZ3NfQiBcCisJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0IiBnaXRfcHJvamVjdCAmJgorCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZmlyc3QgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvc2Vjb25kICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzLzEgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvMiAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzLzEuMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzLzIuMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzLzMuMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzLzQuMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL3Y1ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvdjYgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy92NyAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL3Y4CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNdWx0aXBsZSBicmFuY2ggb3IgdGFnIHBhdGhzIHJlcXVpcmUgLWQnICcKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gYnJhbmNoIC1tICJObyBuZXcgYnJhbmNoIiBOb3BlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gdGFnIC1tICJObyBuZXcgdGFnIiBUYWdsZXNzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL05vcGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy9UYWdsZXNzCisJKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1kIGJfb25lL05vcGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZCBiX3R3by9Ob3BlICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWQgdGFnc19BL1RhZ2xlc3MgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZCB0YWdzX0IvVGFnbGVzcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5ldyBicmFuY2hlcyBhbmQgdGFncycgJworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHN2biBicmFuY2ggLW0gIk5ldyBicmFuY2ggMSIgLWQgYl9vbmUgTmV3MSApICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmIHRlc3QgLWUgYl9vbmUvTmV3MS9hLmZpbGUgKSAmJgorCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgc3ZuIGJyYW5jaCAtbSAiTmV3IGJyYW5jaCAyIiAtZCBiX3R3byBOZXcyICkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYgdGVzdCAtZSBiX3R3by9OZXcyL2EuZmlsZSApICYmCisKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCBzdm4gYnJhbmNoIC10IC1tICJOZXcgdGFnIDEiIC1kIHRhZ3NfQSBUYWcxICkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYgdGVzdCAtZSB0YWdzX0EvVGFnMS9hLmZpbGUgKSAmJgorCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgc3ZuIHRhZyAtbSAiTmV3IHRhZyAyIiAtZCB0YWdzX0IgVGFnMiApICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmIHRlc3QgLWUgdGFnc19CL1RhZzIvYS5maWxlICkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQyLWdpdC1zdm4tc2hhbGxvdy1jbG9uZS5zaCBiL3QvdDkxNDItZ2l0LXN2bi1zaGFsbG93LWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyMWVlNWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQyLWdpdC1zdm4tc2hhbGxvdy1jbG9uZS5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHNoYWxsb3cgY2xvbmUnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdCByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBta2RpciAtbSAiY3JlYXRlIHN0YW5kYXJkIGxheW91dCIgXAorCSAgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzICIkc3ZucmVwbyIvdGFncyAmJgorCXN2bl9jbWQgY3AgLW0gImJyYW5jaCBvZmYgdHJ1bmsiIFwKKwkgICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcy9hICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgJiYKKwkoCisJCWNkIGEgJiYKKwkJPiBmb28gJiYKKwkJc3ZuX2NtZCBhZGQgZm9vICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJhZGQgZm9vIgorCSkgJiYKKwlzdGFydF9odHRwZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0cnVuayB3aXRoICItciBIRUFEIicgJworCWdpdCBzdm4gY2xvbmUgLXIgSEVBRCAiJHN2bnJlcG8vdHJ1bmsiIGcgJiYKKwkoIGNkIGcgJiYgZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIC0tdmVyaWZ5IEhFQUQgKQorJworCitzdG9wX2h0dHBkCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0My1naXQtc3ZuLWdjLnNoIGIvdC90OTE0My1naXQtc3ZuLWdjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ1OTRlMWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQzLWdpdC1zdm4tZ2Muc2gKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBSb2JlcnQgQWxsYW4gWmVoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZ2MgYmFzaWMgdGVzdHMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaXJlY3RvcmllcyBhbmQgdGVzdCByZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJbWtkaXIgdG1wICYmCisJZWNobyAiU2FtcGxlIHRleHQgZm9yIFN1YnZlcnNpb24gcmVwb3NpdG9yeS4iID4gaW1wb3J0L3Rlc3QudHh0ICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgaW1wb3J0ICIkc3ZucmVwbyIgPiAvZGV2L251bGwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdvcmtpbmcgY29weSBmcm9tIHN2bicgXAorCSdzdm5fY21kIGNvICIkc3ZucmVwbyIgdGVzdF93YycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHNvbWUgcHJvcGVydGllcyB0byBjcmVhdGUgYW4gdW5oYW5kbGVkLmxvZyBmaWxlJyAnCisJKAorCQljZCB0ZXN0X3djICYmCisJCXN2bl9jbWQgcHJvcHNldCBmb28gYmFyIHRlc3QudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJwcm9wZXJ0eSBzZXQiCisJKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0dXAgcmVwbycgJ2dpdCBzdm4gaW5pdCAiJHN2bnJlcG8iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGZXRjaCByZXBvJyAnZ2l0IHN2biBmZXRjaCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBiYWNrdXAgY29weSBvZiB1bmhhbmRsZWQubG9nJyAnCisJIGNwIC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL3VuaGFuZGxlZC5sb2cgdG1wCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbGVmdG92ZXIgaW5kZXgnICc+IC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL2luZGV4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjIHJ1bnMnICdnaXQgc3ZuIGdjJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGluZGV4IHJlbW92ZWQnICchIHRlc3QgLWYgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vaW5kZXgnCisKK2lmIHRlc3QgLXIgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vdW5oYW5kbGVkLmxvZy5negordGhlbgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gZ2MgcHJvZHVjZXMgYSB2YWxpZCBnemlwIGZpbGUnICcKKwkJIGd1bnppcCAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi91bmhhbmRsZWQubG9nLmd6CisJCScKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gZ2MgZG9lcyBub3QgY2hhbmdlIHVuaGFuZGxlZC5sb2cgZmlsZXMnICcKKwkgdGVzdF9jbXAgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vdW5oYW5kbGVkLmxvZyB0bXAvdW5oYW5kbGVkLmxvZworCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQ0LWdpdC1zdm4tb2xkLXJldl9tYXAuc2ggYi90L3Q5MTQ0LWdpdC1zdm4tb2xkLXJldl9tYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzYwMGEzNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDQtZ2l0LXN2bi1vbGQtcmV2X21hcC5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIG9sZCByZXZfbWFwIHByZXNlcnZkJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeSB3aXRoIG9sZCBsYXlvdXQnICcKKwlta2RpciBpICYmCisJKGNkIGkgJiYgPiBhKSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tLSBpICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwl0ZXN0IC1kIC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuLyAmJgorCSEgdGVzdCAtZSAuZ2l0L3N2bi9naXQtc3ZuLyAmJgorCW12IC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuIC5naXQvc3ZuLyAmJgorCXJtIC1yIC5naXQvc3ZuL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2xkIGxheW91dCBjb250aW51ZXMgdG8gd29yaycgJworCXN2bl9jbWQgaW1wb3J0IC1tLSBpICIkc3ZucmVwby9iIiAmJgorCWdpdCBzdm4gcmViYXNlICYmCisJZWNobyBhID4+IGIvYSAmJgorCWdpdCBhZGQgYi9hICYmCisJZ2l0IGNvbW1pdCAtbS0gLWEgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwkhIHRlc3QgLWQgLmdpdC9zdm4vcmVmcy8gJiYKKwl0ZXN0IC1lIC5naXQvc3ZuL2dpdC1zdm4vCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0NS1naXQtc3ZuLW1hc3Rlci1icmFuY2guc2ggYi90L3Q5MTQ1LWdpdC1zdm4tbWFzdGVyLWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNjg1MmQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0NS1naXQtc3ZuLW1hc3Rlci1icmFuY2guc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKyMKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gaW5pdGlhbCBtYXN0ZXIgYnJhbmNoIGlzICJ0cnVuayIgaWYgcG9zc2libGUnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdCByZXBvc2l0b3J5JyAnCisJbWtkaXIgaSAmJgorCT4gaS9hICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gdHJ1bmsgaSAiJHN2bnJlcG8vdHJ1bmsiICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gYi9hIGkgIiRzdm5yZXBvL2JyYW5jaGVzL2EiICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gYi9iIGkgIiRzdm5yZXBvL2JyYW5jaGVzL2IiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gY2xvbmUgLS1zdGRsYXlvdXQgc2V0cyB1cCB0cnVuayBhcyBtYXN0ZXInICcKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIgZyAmJgorCSgKKwkJY2QgZyAmJgorCQl0ZXN0IHhgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvdHJ1bmteMGAgPSBcCisJCSAgICAgeGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyXjBgCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDYtZ2l0LXN2bi1lbXB0eS1kaXJzLnNoIGIvdC90OTE0Ni1naXQtc3ZuLWVtcHR5LWRpcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmQzMTMwZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDYtZ2l0LXN2bi1lbXB0eS1kaXJzLnNoCkBAIC0wLDAgKzEsMTU5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNyZWF0ZXMgZW1wdHkgZGlyZWN0b3JpZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwlkbworCQlzdm5fY21kIG1rZGlyIC1tICJta2RpciAkaSIgIiRzdm5yZXBvIi8iJGkiCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZScgJ2dpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiBjbG9uZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yaWVzIGV4aXN0JyAnCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwkJZG8KKwkJCWlmICEgdGVzdCAtZCAiJGkiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9uIGF1dG9ta2RpcnMgc2V0IHRvIGZhbHNlJyAnCisJKAorCQlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiBjbG9uZWQtbm8tbWtkaXJzICYmCisJCWNkIGNsb25lZC1uby1ta2RpcnMgJiYKKwkJZ2l0IGNvbmZpZyBzdm4tcmVtb3RlLnN2bi5hdXRvbWtkaXJzIGZhbHNlICYmCisJCWdpdCBzdm4gZmV0Y2ggJiYKKwkJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwkJZG8KKwkJCWlmIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBleGlzdHMiCisJCQkJZXhpdCAxCisJCQlmaQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3JlIGVtcHRpbmVzcycgJworCXN2bl9jbWQgbWtkaXIgLW0gImJhbmcgYmFuZyIgICIkc3ZucmVwbyIvIiEgISIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biByZWJhc2UgY3JlYXRlcyBlbXB0eSBkaXJlY3RvcnknICcKKwkoIGNkIGNsb25lZCAmJiBnaXQgc3ZuIHJlYmFzZSApICYmCisJdGVzdCAtZCBjbG9uZWQvIiEgISIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBta2RpcnMgcmVjcmVhdGVzIGVtcHR5IGRpcmVjdG9yaWVzJyAnCisJKAorCQljZCBjbG9uZWQgJiYKKwkJcm0gLXIgKiAmJgorCQlnaXQgc3ZuIG1rZGlycyAmJgorCQlmb3IgaSBpbiBhIGIgYyBkIGQvZSBkL2UvZiAid2VpcmQgZmlsZSBuYW1lIiAiISAhIgorCQlkbworCQkJaWYgISB0ZXN0IC1kICIkaSIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiJGkgZG9lcyBub3QgZXhpc3QiCisJCQkJZXhpdCAxCisJCQlmaQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIG1rZGlycyAtciB3b3JrcycgJworCSgKKwkJY2QgY2xvbmVkICYmCisJCXJtIC1yICogJiYKKwkJZ2l0IHN2biBta2RpcnMgLXI3ICYmCisJCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJCWRvCisJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKworCQlpZiB0ZXN0IC1kICIhICEiCisJCXRoZW4KKwkJCWVjaG8gPiYyICIkaSBzaG91bGQgbm90IGV4aXN0IgorCQkJZXhpdCAxCisJCWZpCisKKwkJZ2l0IHN2biBta2RpcnMgLXI4ICYmCisJCWlmICEgdGVzdCAtZCAiISAhIgorCQl0aGVuCisJCQllY2hvID4mMiAiJGkgbm90IGV4aXN0IgorCQkJZXhpdCAxCisJCWZpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHRydW5rJyAnCisJZm9yIGkgaW4gdHJ1bmsgdHJ1bmsvYSB0cnVuay8id2VpcmQgZmlsZSBuYW1lIgorCWRvCisJCXN2bl9jbWQgbWtkaXIgLW0gIm1rZGlyICRpIiAiJHN2bnJlcG8iLyIkaSIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRydW5rJyAnZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iIHRydW5rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3RvcmllcyBpbiB0cnVuayBleGlzdCcgJworCSgKKwkJY2QgdHJ1bmsgJiYKKwkJZm9yIGkgaW4gYSAid2VpcmQgZmlsZSBuYW1lIgorCQlkbworCQkJaWYgISB0ZXN0IC1kICIkaSIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiJGkgZG9lcyBub3QgZXhpc3QiCisJCQkJZXhpdCAxCisJCQlmaQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IGZyb20gc3ZuJyAnCisJc3ZuX2NtZCBybSAtbSAicmVtb3ZlIGQiICIkc3ZucmVwbyIvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmVkIHRvcC1sZXZlbCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QnICcKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgcmVtb3ZlZCAmJgorCXRlc3QgISAtZSByZW1vdmVkL2QKKworJwordW5oYW5kbGVkPS5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL3VuaGFuZGxlZC5sb2cKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gZ2MtZWQgZmlsZXMgd29yaycgJworCSgKKwkJY2QgcmVtb3ZlZCAmJgorCQlnaXQgc3ZuIGdjICYmCisJCTogQ29tcHJlc3M6OlpsaWIgbWF5IG5vdCBiZSBhdmFpbGFibGUgJiYKKwkJaWYgdGVzdCAtZiAiJHVuaGFuZGxlZCIuZ3oKKwkJdGhlbgorCQkJc3ZuX2NtZCBta2RpciAtbSBneiAiJHN2bnJlcG8iL2d6ICYmCisJCQlnaXQgcmVzZXQgLS1oYXJkICQoZ2l0IHJldi1saXN0IEhFQUQgfCB0YWlsIC0xKSAmJgorCQkJZ2l0IHN2biByZWJhc2UgJiYKKwkJCXRlc3QgLWYgIiR1bmhhbmRsZWQiLmd6ICYmCisJCQl0ZXN0IC1mICIkdW5oYW5kbGVkIiAmJgorCQkJZm9yIGkgaW4gYSBiIGMgIndlaXJkIGZpbGUgbmFtZSIgZ3ogIiEgISIKKwkJCWRvCisJCQkJaWYgISB0ZXN0IC1kICIkaSIKKwkJCQl0aGVuCisJCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIKKwkJCQkJZXhpdCAxCisJCQkJZmkKKwkJCWRvbmUKKwkJZmkKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1MC1zdmstbWVyZ2V0aWNrZXRzLnNoIGIvdC90OTE1MC1zdmstbWVyZ2V0aWNrZXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI0YzI0MjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUwLXN2ay1tZXJnZXRpY2tldHMuc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBTYW0gVmlsYWluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gc3ZrIG1lcmdlIHRpY2tldHMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2ayBkZXBvdCcgIgorCXN2bmFkbWluIGxvYWQgLXEgJyRyYXdzdm5yZXBvJyBcCisJICA8ICckVEVTVF9ESVJFQ1RPUlkvdDkxNTAvc3ZrLW1lcmdlLmR1bXAnICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIHN2a21lcmdlIFwKKwkgIC0tcmV3cml0ZS1yb290PWh0dHA6Ly9zdm4uZXhhbXBsZS5vcmcgXAorCSAgLVQgdHJ1bmsgLWIgYnJhbmNoZXMgJyRzdm5yZXBvJyAmJgorCWdpdCBzdm4gZmV0Y2ggLS1hbGwKKwkiCisKK3V1aWQ9YjQ4Mjg5YjItOWMwOC00ZDcyLWFmMzctMDM1OGE0MGI5YzE1CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N2ayBtZXJnZXMgd2VyZSByZXByZXNlbnRlZCBjb21pbmcgaW4nICIKKwlbIGBnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIHBhcmVudCB8IHdjIC1sYCAtZXEgMiBdCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTAvbWFrZS1zdmstZHVtcCBiL3QvdDkxNTAvbWFrZS1zdmstZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjQyZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MC9tYWtlLXN2ay1kdW1wCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorIworIyB0aGlzIHNjcmlwdCBzZXRzIHVwIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGZvciBNYWtlZmlsZSBpbiB0aGUKKyMgZmlyc3QgZXZlciBnaXQgbWVyZ2UsIGFzIGlmIGl0IHdlcmUgZG9uZSB3aXRoIHN2ay4KKyMKKworc2V0IC1lCisKK3N2ayBkZXBvdG1hcCBmb28gfi8uc3ZrL2Zvbworc3ZrIGNvIC9mb28vIGZvbworY2QgZm9vCitta2RpciB0cnVuaworbWtkaXIgYnJhbmNoZXMKK3N2ayBhZGQgdHJ1bmsgYnJhbmNoZXMKK3N2ayBjb21taXQgLW0gIlNldHVwIHRydW5rIGFuZCBicmFuY2hlcyIKK2NkIHRydW5rCisKK2dpdCBjYXQtZmlsZSBibG9iIDY2ODM0NjNlOk1ha2VmaWxlID4gTWFrZWZpbGUKK3N2ayBhZGQgTWFrZWZpbGUgCisKK3N2ayBjb21taXQgLW0gImFuY2VzdG9yIgorY2QgLi4KK3N2ayBjcCB0cnVuayBicmFuY2hlcy9sZWZ0CisKK3N2ayBjb21taXQgLW0gIm1ha2UgbGVmdCBicmFuY2giCitjZCBicmFuY2hlcy9sZWZ0LworCitnaXQgY2F0LWZpbGUgYmxvYiA1ODczYjY3ZTpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdmsgY29tbWl0IC1tICJsZWZ0IHVwZGF0ZSAxIgorCitjZCAuLi8uLi90cnVuaworZ2l0IGNhdC1maWxlIGJsb2IgNzUxMThiMTM6TWFrZWZpbGUgPiBNYWtlZmlsZQorc3ZrIGNvbW1pdCAtbSAidHJ1bmsgdXBkYXRlIgorCitjZCAuLi9icmFuY2hlcy9sZWZ0CitnaXQgY2F0LWZpbGUgYmxvYiBiNTAzOWRiNjpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdmsgY29tbWl0IC1tICJsZWZ0IHVwZGF0ZSAyIgorCitjZCAuLi8uLi90cnVuaworc3ZrIHNtIC9mb28vYnJhbmNoZXMvbGVmdAorIyBpbiB0aGVvcnkgd2UgY291bGQgZGVsZXRlIHRoZSAibGVmdCIgYnJhbmNoIGhlcmUsIGJ1dCBpdCdzIG5vdAorIyByZXF1aXJlZCBzbyBkb24ndCBkbyBpdCwgaW4gY2FzZSBwZW9wbGUgc3RhcnQgZ2V0dGluZyBpZGVhcyA7KQorc3ZrIGNvbW1pdCAtbSAibWVyZ2UgYnJhbmNoICdsZWZ0JyBpbnRvICd0cnVuayciCisKK2dpdCBjYXQtZmlsZSBibG9iIGI1MWFkNDMxOk1ha2VmaWxlID4gTWFrZWZpbGUKKworc3ZrIGRpZmYgTWFrZWZpbGUgJiYgZWNobyAiSGV5ISAgTm8gZGlmZmVyZW5jZXMsIG1hZ2ljIgorCitjZCAuLi8uLgorCitzdm5hZG1pbiBkdW1wIH4vLnN2ay9mb28gPiBzdmstbWVyZ2UuZHVtcAorCitzdmsgY28gLWQgZm9vCitybSAtcmYgZm9vCitzdmsgZGVwb3RtYXAgLWQgL2Zvby8KK3JtIC1yZiB+Ly5zdmsvZm9vCisKZGlmZiAtLWdpdCBhL3QvdDkxNTAvc3ZrLW1lcmdlLmR1bXAgYi90L3Q5MTUwL3N2ay1tZXJnZS5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjcwZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUwL3N2ay1tZXJnZS5kdW1wCkBAIC0wLDAgKzEsNjE2IEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBiNDgyODliMi05YzA4LTRkNzItYWYzNy0wMzU4YTQwYjljMTUKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDMuNzIyOTY5WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIzCitDb250ZW50LWxlbmd0aDogMTIzCisKK0sgNworc3ZuOmxvZworViAyNAorU2V0dXAgdHJ1bmsgYW5kIGJyYW5jaGVzCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDQuOTI3NTMzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTA2CitDb250ZW50LWxlbmd0aDogMTA2CisKK0sgNworc3ZuOmxvZworViA4CithbmNlc3RvcgorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA1LjgzNTU4NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDAxCitUZXh0LWNvbnRlbnQtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorQ29udGVudC1sZW5ndGg6IDI0MTEKKworUFJPUFMtRU5ECisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTUKK0NvbnRlbnQtbGVuZ3RoOiAxMTUKKworSyA3Citzdm46bG9nCitWIDE2CittYWtlIGxlZnQgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDYuNzE5NzM3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTIKK0NvbnRlbnQtbGVuZ3RoOiAxMTIKKworSyA3Citzdm46bG9nCitWIDEzCitsZWZ0IHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDcuMTY3NjY2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDY1CitUZXh0LWNvbnRlbnQtbWQ1OiAxNmUzOGQ5NzUzYjA2MTczMTY1MDU2MWNlMDFiMTE5NQorQ29udGVudC1sZW5ndGg6IDI0NjUKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgMTIKK3RydW5rIHVwZGF0ZQorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA3LjYxOTYzM1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI1MjEKK1RleHQtY29udGVudC1tZDU6IDA2Njg0MThhNjIxMzMzZjRhYThiNjYzMmNkNjNlMmEwCitDb250ZW50LWxlbmd0aDogMjUyMQorCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTIKK0NvbnRlbnQtbGVuZ3RoOiAxMTIKKworSyA3Citzdm46bG9nCitWIDEzCitsZWZ0IHVwZGF0ZSAyCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDguMDY3NTU0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTkzCitUZXh0LWNvbnRlbnQtbWQ1OiA1Y2NmZjY4OWZiMjkwZTAwYjg1ZmUxOGVlNTBjNTRiYQorQ29udGVudC1sZW5ndGg6IDI1OTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogNworUHJvcC1jb250ZW50LWxlbmd0aDogMTMxCitDb250ZW50LWxlbmd0aDogMTMxCisKK0sgNworc3ZuOmxvZworViAzMgorbWVyZ2UgYnJhbmNoICdsZWZ0JyBpbnRvICd0cnVuaycKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorc2FtdgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0xMC0xOVQyMzo0NDowOC45NzE4MDFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDgzCitDb250ZW50LWxlbmd0aDogODMKKworSyA5Citzdms6bWVyZ2UKK1YgNTMKK2I0ODI4OWIyLTljMDgtNGQ3Mi1hZjM3LTAzNThhNDBiOWMxNTovYnJhbmNoZXMvbGVmdDo2CitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI3MTMKK1RleHQtY29udGVudC1tZDU6IDBhZmJlMzRmMjQ0Y2Q2NjJiMWY5N2Q3MDhjNjg3ZjkwCitDb250ZW50LWxlbmd0aDogMjcxMworCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKwpkaWZmIC0tZ2l0IGEvdC90OTE1MS1zdm4tbWVyZ2VpbmZvLnNoIGIvdC90OTE1MS1zdm4tbWVyZ2VpbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRmNmMwNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUxLXN2bi1tZXJnZWluZm8uc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBTYW0gVmlsYWluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gc3ZuIG1lcmdlaW5mbyBwcm9wZXJ0aWVzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcCcgIgorCXN2bmFkbWluIGxvYWQgLXEgJyRyYXdzdm5yZXBvJyBcCisJICA8ICckVEVTVF9ESVJFQ1RPUlkvdDkxNTEvc3ZuLW1lcmdlaW5mby5kdW1wJyAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBzdm5tZXJnZSBcCisJICAtLXJld3JpdGUtcm9vdD1odHRwOi8vc3ZuLmV4YW1wbGUub3JnIFwKKwkgIC1UIHRydW5rIC1iIGJyYW5jaGVzICckc3ZucmVwbycgJiYKKwlnaXQgc3ZuIGZldGNoIC0tYWxsCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgc3ZuIG1lcmdlcyBiZWNhbWUgZ2l0IG1lcmdlIGNvbW1pdHMnICcKKwl1bm1hcmtlZD0kKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1hbGwgLS1ncmVwPU1lcmdlIHwKKwkJZ3JlcCAtdiAiIC4qICIgfCBjdXQgLWYxIC1kIiAiKSAmJgorCVsgLXogIiR1bm1hcmtlZCIgXQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2tzIGRpZCBub3QgYmVjb21lIGdpdCBtZXJnZSBjb21taXRzJyAnCisJYmFkX2NoZXJyaWVzPSQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLWFsbCAtLWdyZXA9Q2hlcnJ5IHwKKwkJZ3JlcCAiIC4qICIgfCBjdXQgLWYxIC1kIiAiKSAmJgorCVsgLXogIiRiYWRfY2hlcnJpZXMiIF0KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N2biBub24tbWVyZ2UgbWVyZ2UgY29tbWl0cyBkaWQgbm90IGJlY29tZSBnaXQgbWVyZ2UgY29tbWl0cycgJworCWJhZF9ub25fbWVyZ2VzPSQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLWFsbCAtLWdyZXA9bm9uLW1lcmdlIHwKKwkJZ3JlcCAiIC4qICIgfCBjdXQgLWYxIC1kIiAiKSAmJgorCVsgLXogIiRiYWRfbm9uX21lcmdlcyIgXQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1hZGUgdG8gbWVyZ2VkIGJyYW5jaCBpcyByZWFjaGFibGUgZnJvbSB0aGUgbWVyZ2UnICcKKwliZWZvcmVfY29tbWl0PSQoZ2l0IHJldi1saXN0IC0tYWxsIC0tZ3JlcD0idHJ1bmsgY29tbWl0IGJlZm9yZSBtZXJnaW5nIHRydW5rIHRvIGIyIikgJiYKKwltZXJnZV9jb21taXQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ncmVwPSJNZXJnZSB0cnVuayB0byBiMiIpICYmCisJbm90X3JlYWNoYWJsZT0kKGdpdCByZXYtbGlzdCAtMSAkYmVmb3JlX2NvbW1pdCAtLW5vdCAkbWVyZ2VfY29tbWl0KSAmJgorCVsgLXogIiRub3RfcmVhY2hhYmxlIiBdCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnaW5nIHR3byBicmFuY2hlcyBpbiBvbmUgY29tbWl0IGlzIGRldGVjdGVkIGNvcnJlY3RseScgJworCWYxX2NvbW1pdD0kKGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Im1ha2UgZjEgYnJhbmNoIGZyb20gdHJ1bmsiKSAmJgorCWYyX2NvbW1pdD0kKGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Im1ha2UgZjIgYnJhbmNoIGZyb20gdHJ1bmsiKSAmJgorCW1lcmdlX2NvbW1pdD0kKGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Ik1lcmdlIGYxIGFuZCBmMiB0byB0cnVuayIpICYmCisJbm90X3JlYWNoYWJsZT0kKGdpdCByZXYtbGlzdCAtMSAkZjFfY29tbWl0ICRmMl9jb21taXQgLS1ub3QgJG1lcmdlX2NvbW1pdCkgJiYKKwlbIC16ICIkbm90X3JlYWNoYWJsZSIgXQorCScKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZXZlcnl0aGluZyBnb3QgbWVyZ2VkIGluIHRoZSBlbmQnICcKKwl1bm1lcmdlZD0kKGdpdCByZXYtbGlzdCAtLWFsbCAtLW5vdCBtYXN0ZXIpICYmCisJWyAteiAiJHVubWVyZ2VkIiBdCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTEvLmdpdGlnbm9yZSBiL3QvdDkxNTEvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdjMzdkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorZm9vCitmb28uc3ZuCmRpZmYgLS1naXQgYS90L3Q5MTUxL21ha2Utc3ZubWVyZ2UtZHVtcCBiL3QvdDkxNTEvbWFrZS1zdm5tZXJnZS1kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZTEzOGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUxL21ha2Utc3ZubWVyZ2UtZHVtcApAQCAtMCwwICsxLDMwNSBAQAorIyEvYmluL3NoCisjCisjIHRoaXMgc2NyaXB0IHNldHMgdXAgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgZm9yIE1ha2VmaWxlIGluIHRoZQorIyBmaXJzdCBldmVyIGdpdCBtZXJnZSwgYXMgaWYgaXQgd2VyZSBkb25lIHdpdGggc3ZubWVyZ2UgKFNWTiAxLjUrKQorIworCitybSAtcmYgZm9vLnN2biBmb28KK3NldCAtZQorCitta2RpciBmb28uc3ZuCitzdm5hZG1pbiBjcmVhdGUgZm9vLnN2bgorc3ZuIGNvIGZpbGU6Ly9gcHdkYC9mb28uc3ZuIGZvbworCitjb21taXQoKSB7CisgICAgaT0kKCggJDEgKyAxICkpCisgICAgc2hpZnQ7CisgICAgc3ZuIGNvbW1pdCAtbSAiKHIkaSkgJCoiID4vZGV2L251bGwgfHwgZXhpdCAxCisgICAgZWNobyAkaQorfQorCitzYXkoKSB7CisgICAgZWNobyAiG1sxbSAqICQqG1swbSIKK30KKworaT0wCitjZCBmb28KK21rZGlyIHRydW5rCitta2RpciBicmFuY2hlcworbWtkaXIgdGFncworc3ZuIGFkZCB0cnVuayBicmFuY2hlcyB0YWdzCitpPSQoY29tbWl0ICRpICJTZXR1cCB0cnVuaywgYnJhbmNoZXMsIGFuZCB0YWdzIikKKworZ2l0IGNhdC1maWxlIGJsb2IgNjY4MzQ2M2U6TWFrZWZpbGUgPiB0cnVuay9NYWtlZmlsZQorc3ZuIGFkZCB0cnVuay9NYWtlZmlsZSAKKworc2F5ICJDb21taXR0aW5nIEFOQ0VTVE9SIgoraT0kKGNvbW1pdCAkaSAiYW5jZXN0b3IiKQorc3ZuIGNwIHRydW5rIGJyYW5jaGVzL2xlZnQKKworc2F5ICJDb21taXR0aW5nIEJSQU5DSCBQT0lOVCIKK2k9JChjb21taXQgJGkgIm1ha2UgbGVmdCBicmFuY2giKQorc3ZuIGNwIHRydW5rIGJyYW5jaGVzL3JpZ2h0CisKK3NheSAiQ29tbWl0dGluZyBvdGhlciBCUkFOQ0ggUE9JTlQiCitpPSQoY29tbWl0ICRpICJtYWtlIHJpZ2h0IGJyYW5jaCIpCisKK3NheSAiQ29tbWl0dGluZyBMRUZUIFVQREFURSIKK2dpdCBjYXQtZmlsZSBibG9iIDU4NzNiNjdlOk1ha2VmaWxlID4gYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQoraT0kKGNvbW1pdCAkaSAibGVmdCB1cGRhdGUgMSIpCisKK2dpdCBjYXQtZmlsZSBibG9iIDc1MTE4YjEzOk1ha2VmaWxlID4gYnJhbmNoZXMvcmlnaHQvTWFrZWZpbGUKK3NheSAiQ29tbWl0dGluZyBSSUdIVCBVUERBVEUiCitwcmVfcmlnaHRfdXBkYXRlXzE9JGkKK2k9JChjb21taXQgJGkgInJpZ2h0IHVwZGF0ZSAxIikKKworc2F5ICJNYWtpbmcgbW9yZSBjb21taXRzIG9uIExFRlQiCitnaXQgY2F0LWZpbGUgYmxvYiBmZjVlYmUzOTpNYWtlZmlsZSA+IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK2k9JChjb21taXQgJGkgImxlZnQgdXBkYXRlIDIiKQorZ2l0IGNhdC1maWxlIGJsb2IgYjUwMzlkYjY6TWFrZWZpbGUgPiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSAzIikKKworc2F5ICJNYWtpbmcgYSBMRUZUIFNVQi1CUkFOQ0giCitzdm4gY3AgYnJhbmNoZXMvbGVmdCBicmFuY2hlcy9sZWZ0LXN1Ygorc3ViX2xlZnRfbWFrZT0kaQoraT0kKGNvbW1pdCAkaSAibWFrZSBsZWZ0IHN1Yi1icmFuY2giKQorCitzYXkgIk1ha2luZyBhIGNvbW1pdCBvbiBMRUZUIFNVQi1CUkFOQ0giCitlY2hvICJjcnVuY2giID4gYnJhbmNoZXMvbGVmdC1zdWIvUkVBRE1FCitzdm4gYWRkIGJyYW5jaGVzL2xlZnQtc3ViL1JFQURNRQoraT0kKGNvbW1pdCAkaSAibGVmdCBzdWItYnJhbmNoIHVwZGF0ZSAxIikKKworc2F5ICJNZXJnaW5nIExFRlQgdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2xlZnQgLS1hY2NlcHQgcG9zdHBvbmUKK2dpdCBjYXQtZmlsZSBibG9iIGI1MDM5ZGI2Ok1ha2VmaWxlID4gTWFrZWZpbGUKK3N2biByZXNvbHZlZCBNYWtlZmlsZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgbGVmdCB0byB0cnVuayAxIikKK2NkIC4uCisKK3NheSAiTWFraW5nIG1vcmUgY29tbWl0cyBvbiBMRUZUIGFuZCBSSUdIVCIKK2VjaG8gInRvdWNoZSIgPiBicmFuY2hlcy9sZWZ0L3psb25rCitzdm4gYWRkIGJyYW5jaGVzL2xlZnQvemxvbmsKK2k9JChjb21taXQgJGkgImxlZnQgdXBkYXRlIDQiKQorZWNobyAidGh3YWNrZSIgPiBicmFuY2hlcy9yaWdodC9iYW5nCitzdm4gYWRkIGJyYW5jaGVzL3JpZ2h0L2JhbmcKK2k9JChjb21taXQgJGkgInJpZ2h0IHVwZGF0ZSAyIikKKworc2F5ICJTcXVhc2ggbWVyZ2Ugb2YgUklHSFQgdGlwIDIgY29tbWl0cyBvbnRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAtciRwcmVfcmlnaHRfdXBkYXRlXzE6JGkgLi4vYnJhbmNoZXMvcmlnaHQKK2k9JChjb21taXQgJGkgIkNoZXJyeS1waWNrIHJpZ2h0IDIgY29tbWl0cyB0byB0cnVuayIpCitjZCAuLgorCitzYXkgIk1lcmdpbmcgUklHSFQgdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL3JpZ2h0IC0tYWNjZXB0IHBvc3Rwb25lCitnaXQgY2F0LWZpbGUgYmxvYiBiNTFhZDQzMTpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdm4gcmVzb2x2ZWQgTWFrZWZpbGUKK2k9JChjb21taXQgJGkgIk1lcmdlIHJpZ2h0IHRvIHRydW5rIDEiKQorY2QgLi4KKworc2F5ICJNYWtpbmcgbW9yZSBjb21taXRzIG9uIFJJR0hUIGFuZCBUUlVOSyIKK2VjaG8gIndoYW1tIiA+IGJyYW5jaGVzL3JpZ2h0L3Vya2trCitzdm4gYWRkIGJyYW5jaGVzL3JpZ2h0L3Vya2trCitpPSQoY29tbWl0ICRpICJyaWdodCB1cGRhdGUgMyIpCitlY2hvICJwb3ciID4gdHJ1bmsvdnJvbmsKK3N2biBhZGQgdHJ1bmsvdnJvbmsKK2k9JChjb21taXQgJGkgInRydW5rIHVwZGF0ZSAxIikKKworc2F5ICJNZXJnaW5nIFJJR0hUIHRvIExFRlQgU1VCLUJSQU5DSCIKK3N2biB1cGRhdGUKK2NkIGJyYW5jaGVzL2xlZnQtc3ViCitzdm4gbWVyZ2UgLi4vcmlnaHQgLS1hY2NlcHQgcG9zdHBvbmUKK2dpdCBjYXQtZmlsZSBibG9iIGI1MWFkNDMxOk1ha2VmaWxlID4gTWFrZWZpbGUKK3N2biByZXNvbHZlZCBNYWtlZmlsZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgcmlnaHQgdG8gbGVmdCBzdWItYnJhbmNoIikKK2NkIC4uLy4uCisKK3NheSAiTWFraW5nIG1vcmUgY29tbWl0cyBvbiBMRUZUIFNVQi1CUkFOQ0ggYW5kIExFRlQiCitlY2hvICJ6b3dpZSIgPiBicmFuY2hlcy9sZWZ0LXN1Yi93aGFtX2V0aAorc3ZuIGFkZCBicmFuY2hlcy9sZWZ0LXN1Yi93aGFtX2V0aAorcHJlX3N1Yl9sZWZ0X3VwZGF0ZV8yPSRpCitpPSQoY29tbWl0ICRpICJsZWZ0IHN1Yi1icmFuY2ggdXBkYXRlIDIiKQorc3ViX2xlZnRfdXBkYXRlXzI9JGkKK2VjaG8gImVlZV95b3ciID4gYnJhbmNoZXMvbGVmdC9nbHVycHAKK3N2biBhZGQgYnJhbmNoZXMvbGVmdC9nbHVycHAKK2k9JChjb21taXQgJGkgImxlZnQgdXBkYXRlIDUiKQorCitzYXkgIkNoZXJyeSBwaWNrIExFRlQgU1VCLUJSQU5DSCBjb21taXQgdG8gTEVGVCIKK3N2biB1cGRhdGUKK2NkIGJyYW5jaGVzL2xlZnQKK3N2biBtZXJnZSAtciRwcmVfc3ViX2xlZnRfdXBkYXRlXzI6JHN1Yl9sZWZ0X3VwZGF0ZV8yIC4uL2xlZnQtc3ViCitpPSQoY29tbWl0ICRpICJDaGVycnktcGljayBsZWZ0IHN1Yi1icmFuY2ggY29tbWl0IHRvIGxlZnQiKQorY2QgLi4vLi4KKworc2F5ICJNZXJnaW5nIExFRlQgU1VCLUJSQU5DSCBiYWNrIHRvIExFRlQiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0CisjIGl0J3Mgb25seSBhIG1lcmdlIGJlY2F1c2UgdGhlIHByZXZpb3VzIG1lcmdlIGNoZXJyeS1waWNrZWQgdGhlIHRvcCBjb21taXQKK3N2biBtZXJnZSAtciRzdWJfbGVmdF9tYWtlOiRzdWJfbGVmdF91cGRhdGVfMiAuLi9sZWZ0LXN1YiAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgbGVmdCBzdWItYnJhbmNoIHRvIGxlZnQiKQorY2QgLi4vLi4KKworc2F5ICJNZXJnaW5nIEVWRVJZVEhJTkcgdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2xlZnQgLS1hY2NlcHQgcG9zdHBvbmUKK3N2biByZXNvbHZlZCBiYW5nCitpPSQoY29tbWl0ICRpICJNZXJnZSBsZWZ0IHRvIHRydW5rIDIiKQorIyB0aGlzIG1lcmdlLCBzdm4gaGFwcGlseSB1cGRhdGVzIHRoZSBtZXJnZWluZm8sIGJ1dCB0aGVyZSBpcyBhY3R1YWxseQorIyBub3RoaW5nIHRvIG1lcmdlLiAgZ2l0LXN2biB3aWxsIG5vdCBtYWtlIGEgbWVhbmluZ2xlc3MgbWVyZ2UgY29tbWl0Lgorc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL3JpZ2h0IC0tYWNjZXB0IHBvc3Rwb25lCitpPSQoY29tbWl0ICRpICJub24tbWVyZ2UgcmlnaHQgdG8gdHJ1bmsgMiIpCitjZCAuLgorCitzYXkgIkJyYW5jaGluZyBiMSBmcm9tIHRydW5rIgorc3ZuIHVwZGF0ZQorc3ZuIGNwIHRydW5rIGJyYW5jaGVzL2IxCitpPSQoY29tbWl0ICRpICJtYWtlIGIxIGJyYW5jaCBmcm9tIHRydW5rIikKKworc2F5ICJCcmFuY2hpbmcgYjIgZnJvbSB0cnVuayIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuayBicmFuY2hlcy9iMgoraT0kKGNvbW1pdCAkaSAibWFrZSBiMiBicmFuY2ggZnJvbSB0cnVuayIpCisKK3NheSAiTWFrZSBhIGNvbW1pdCB0byBiMiIKK3N2biB1cGRhdGUKK2NkIGJyYW5jaGVzL2IyCitlY2hvICJiMiIgPiBiMmZpbGUKK3N2biBhZGQgYjJmaWxlCitpPSQoY29tbWl0ICRpICJiMiB1cGRhdGUgMSIpCitjZCAuLi8uLgorCitzYXkgIk1ha2UgYSBjb21taXQgdG8gYjEiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9iMQorZWNobyAiYjEiID4gYjFmaWxlCitzdm4gYWRkIGIxZmlsZQoraT0kKGNvbW1pdCAkaSAiYjEgdXBkYXRlIDEiKQorY2QgLi4vLi4KKworc2F5ICJNZXJnZSBiMSB0byB0cnVuayIKK3N2biB1cGRhdGUKK2NkIHRydW5rCitzdm4gbWVyZ2UgLi4vYnJhbmNoZXMvYjEvIC0tYWNjZXB0IHBvc3Rwb25lCitpPSQoY29tbWl0ICRpICJNZXJnZSBiMSB0byB0cnVuayIpCitjZCAuLgorCitzYXkgIk1ha2UgYSBjb21taXQgdG8gdHJ1bmsgYmVmb3JlIG1lcmdpbmcgdHJ1bmsgdG8gYjIiCitzdm4gdXBkYXRlCitjZCB0cnVuaworZWNobyAidHJ1bmsiID4gdHJ1bmtmaWxlCitzdm4gYWRkIHRydW5rZmlsZQoraT0kKGNvbW1pdCAkaSAidHJ1bmsgY29tbWl0IGJlZm9yZSBtZXJnaW5nIHRydW5rIHRvIGIyIikKK2NkIC4uCisKK3NheSAiTWVyZ2UgdHJ1bmsgdG8gYjIiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9iMgorc3ZuIG1lcmdlIC4uLy4uL3RydW5rLyAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgdHJ1bmsgdG8gYjIiKQorY2QgLi4vLi4KKworc2F5ICJNZXJnZSBiMiB0byB0cnVuayIKK3N2biB1cGRhdGUKK2NkIHRydW5rCitzdm4gbWVyZ2UgLi4vYnJhbmNoZXMvYjIvIC0tYWNjZXB0IHBvc3Rwb25lCitzdm4gcmVzb2x2ZWQgYjFmaWxlCitzdm4gcmVzb2x2ZWQgdHJ1bmtmaWxlCitpPSQoY29tbWl0ICRpICJNZXJnZSBiMiB0byB0cnVuayIpCitjZCAuLgorCitzYXkgIkNyZWF0aW5nIGYxIGZyb20gdHJ1bmsgd2l0aCBhIG5ldyBmaWxlIgorc3ZuIHVwZGF0ZQorc3ZuIGNwIHRydW5rIGJyYW5jaGVzL2YxCitjZCBicmFuY2hlcy9mMQorZWNobyAiZjEiID4gZjFmaWxlCitzdm4gYWRkIGYxZmlsZQorY2QgLi4vLi4KK2k9JChjb21taXQgJGkgIm1ha2UgZjEgYnJhbmNoIGZyb20gdHJ1bmsgd2l0aCBhIG5ldyBmaWxlIikKKworc2F5ICJDcmVhdGluZyBmMiBmcm9tIHRydW5rIHdpdGggYSBuZXcgZmlsZSIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuayBicmFuY2hlcy9mMgorY2QgYnJhbmNoZXMvZjIKK2VjaG8gImYyIiA+IGYyZmlsZQorc3ZuIGFkZCBmMmZpbGUKK2NkIC4uLy4uCitpPSQoY29tbWl0ICRpICJtYWtlIGYyIGJyYW5jaCBmcm9tIHRydW5rIHdpdGggYSBuZXcgZmlsZSIpCisKK3NheSAiTWVyZ2UgZjEgYW5kIGYyIHRvIHRydW5rIGluIG9uZSBnbyIKK3N2biB1cGRhdGUKK2NkIHRydW5rCitzdm4gbWVyZ2UgLi4vYnJhbmNoZXMvZjEvIC0tYWNjZXB0IHBvc3Rwb25lCitzdm4gbWVyZ2UgLi4vYnJhbmNoZXMvZjIvIC0tYWNjZXB0IHBvc3Rwb25lCitpPSQoY29tbWl0ICRpICJNZXJnZSBmMSBhbmQgZjIgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJBZGRpbmcgc3ViZGlyZWN0b3J5IHRvIExFRlQiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0Citta2RpciBzdWJkaXIKK2VjaG8gIlllZWhhdyIgPiBzdWJkaXIvY293Ym95Citzdm4gYWRkIHN1YmRpcgoraT0kKGNvbW1pdCAkaSAiYWRkIHN1YmRpcmVjdG9yeSB0byBsZWZ0IGJyYW5jaCIpCitjZCAuLi8uLi8KKworc2F5ICJNZXJnaW5nIExFRlQgdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2xlZnQgLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIm1lcmdlIGxlZnQgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJNYWtlIFBBUlRJQUwgYnJhbmNoIgorc3ZuIHVwZGF0ZQorc3ZuIGNwIHRydW5rL3N1YmRpciBicmFuY2hlcy9wYXJ0aWFsCitpPSQoY29tbWl0ICRpICJtYWtlIHBhcnRpYWwgYnJhbmNoIikKKworc2F5ICJNYWtlIGEgY29tbWl0IHRvIFBBUlRJQUwiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9wYXJ0aWFsCitlY2hvICJyYWNlY2FyIiA+IHBhbGluZHJvbWVzCitzdm4gYWRkIHBhbGluZHJvbWVzCitpPSQoY29tbWl0ICRpICJwYXJ0aWFsIHVwZGF0ZSIpCitjZCAuLi8uLi8KKworc2F5ICJNZXJnZSBQQVJUSUFMIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsvc3ViZGlyCitzdm4gbWVyZ2UgLi4vLi4vYnJhbmNoZXMvcGFydGlhbCAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAibWVyZ2UgcGFydGlhbCB0byB0cnVuayIpCitjZCAuLi8uLi8KKworc2F5ICJUYWdnaW5nIHRydW5rIgorc3ZuIHVwZGF0ZQorc3ZuIGNwIHRydW5rIHRhZ3MvdjEuMAoraT0kKGNvbW1pdCAkaSAidGFnZ2luZyB2MS4wIikKKworc2F5ICJCcmFuY2hpbmcgQlVHRklYIGZyb20gdjEuMCIKK3N2biB1cGRhdGUKK3N2biBjcCB0YWdzL3YxLjAgYnJhbmNoZXMvYnVnZml4CitpPSQoY29tbWl0ICRpICJtYWtlIGJ1Z2ZpeCBicmFuY2ggZnJvbSB0YWciKQorCitzYXkgIk1ha2UgYSBjb21taXQgdG8gQlVHRklYIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvYnVnZml4LworZWNobyAia2F5YWsiID4+IHN1YmRpci9wYWxpbmRyb21lcworaT0kKGNvbW1pdCAkaSAiY29tbWl0IHRvIGJ1Z2ZpeCIpCitjZCAuLi8uLi8KKworc2F5ICJNZXJnZSBCVUdGSVggdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2J1Z2ZpeC8gLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIk1lcmdlIEJVR0ZJWCB0byBUUlVOSyIpCitjZCAuLgorCitjZCAuLgorc3ZuYWRtaW4gZHVtcCBmb28uc3ZuID4gc3ZuLW1lcmdlaW5mby5kdW1wCisKK3JtIC1yZiBmb28gZm9vLnN2bgpkaWZmIC0tZ2l0IGEvdC90OTE1MS9zdm4tbWVyZ2VpbmZvLmR1bXAgYi90L3Q5MTUxL3N2bi1tZXJnZWluZm8uZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2NhZmNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MS9zdm4tbWVyZ2VpbmZvLmR1bXAKQEAgLTAsMCArMSwyMzg4IEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBkNjE5MTUzMC0yNjkzLTRhOGUtOThlNy1iMTk0ZDRjM2VkZDgKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDIuODMyNDA2WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTM0CitDb250ZW50LWxlbmd0aDogMTM0CisKK0sgNworc3ZuOmxvZworViAzNgorKHIxKSBTZXR1cCB0cnVuaywgYnJhbmNoZXMsIGFuZCB0YWdzCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowMy4wNTUxNzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0YWdzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgMTMKKyhyMikgYW5jZXN0b3IKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjA0LjA2NDUwNloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDAxCitUZXh0LWNvbnRlbnQtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorVGV4dC1jb250ZW50LXNoYTE6IDEwMzIwNWNlMzMxZjdkNjQwODZkYmE0OTc1NzQ3MzRmNzg0Mzk1OTAKK0NvbnRlbnQtbGVuZ3RoOiAyNDExCisKK1BST1BTLUVORAorIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTE5CitDb250ZW50LWxlbmd0aDogMTE5CisKK0sgNworc3ZuOmxvZworViAyMQorKHIzKSBtYWtlIGxlZnQgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowNi4wNDAzODlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsvTWFrZWZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAxMDMyMDVjZTMzMWY3ZDY0MDg2ZGJhNDk3NTc0NzM0Zjc4NDM5NTkwCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjAKK0NvbnRlbnQtbGVuZ3RoOiAxMjAKKworSyA3Citzdm46bG9nCitWIDIyCisocjQpIG1ha2UgcmlnaHQgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowOC4wNDA5MDVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuay9NYWtlZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IGJmZDhmZjc3OGQxNDkyZGM2NzU4NTY3MzczMTc2YTg5CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDEwMzIwNWNlMzMxZjdkNjQwODZkYmE0OTc1NzQ3MzRmNzg0Mzk1OTAKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTgKKyhyNSkgbGVmdCB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDkuMDQ5MTY5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDY1CitUZXh0LWNvbnRlbnQtbWQ1OiAxNmUzOGQ5NzUzYjA2MTczMTY1MDU2MWNlMDFiMTE5NQorVGV4dC1jb250ZW50LXNoYTE6IDM2ZGE0Yjg0ZWE5YjY0MjE4YWI0ODE3MWRmYzVjNDhhZTAyNWYzOGIKK0NvbnRlbnQtbGVuZ3RoOiAyNDY1CisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE5CisocjYpIHJpZ2h0IHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxMC4wNDkzNTBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTIxCitUZXh0LWNvbnRlbnQtbWQ1OiAwNjY4NDE4YTYyMTMzM2Y0YWE4YjY2MzJjZDYzZTJhMAorVGV4dC1jb250ZW50LXNoYTE6IDRmMjlhZmQwMzhlNTJmNDVhY2I1ZWY4YzQxYWNmYzcwMDYyYTc0MWEKK0NvbnRlbnQtbGVuZ3RoOiAyNTIxCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UgbWVyZ2UtY2FjaGUKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1jYWNoZTogbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtY2FjaGUgbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDcKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTgKKyhyNykgbGVmdCB1cGRhdGUgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTEuMDQ5MjA5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTI5CitUZXh0LWNvbnRlbnQtbWQ1OiBmNmIxOTdjYzNmMmU4OWE4M2U1NDVkNGJiMDAzZGU3MworVGV4dC1jb250ZW50LXNoYTE6IDJmNjU2Njc3Y2ZlYzBiY2VlYzg1ZTUzMDM2ZmZiNjNlMjUxMjZmOGUKK0NvbnRlbnQtbGVuZ3RoOiAyNTI5CisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgNworc3ZuOmxvZworViAxOAorKHI4KSBsZWZ0IHVwZGF0ZSAzCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxMi4wNDkyMzRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI1OTMKK1RleHQtY29udGVudC1tZDU6IDVjY2ZmNjg5ZmIyOTBlMDBiODVmZTE4ZWU1MGM1NGJhCitUZXh0LWNvbnRlbnQtc2hhMTogYTEzZGU4ZTIzZjE0ODNlZmNhM2U1N2IyYjY0YjBhZTZmNzQwY2UxMAorQ29udGVudC1sZW5ndGg6IDI1OTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIzCitDb250ZW50LWxlbmd0aDogMTIzCisKK0sgNworc3ZuOmxvZworViAyNQorKHI5KSBtYWtlIGxlZnQgc3ViLWJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTQuMDQwODk0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0CisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogZGVsZXRlCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDgKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDVjY2ZmNjg5ZmIyOTBlMDBiODVmZTE4ZWU1MGM1NGJhCitUZXh0LWNvcHktc291cmNlLXNoYTE6IGExM2RlOGUyM2YxNDgzZWZjYTNlNTdiMmI2NGIwYWU2Zjc0MGNlMTAKKworCisKKworUmV2aXNpb24tbnVtYmVyOiAxMAorUHJvcC1jb250ZW50LWxlbmd0aDogMTI4CitDb250ZW50LWxlbmd0aDogMTI4CisKK0sgNworc3ZuOmxvZworViAzMAorKHIxMCkgbGVmdCBzdWItYnJhbmNoIHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxNS4wNDk5MzVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9SRUFETUUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDcKK1RleHQtY29udGVudC1tZDU6IGZkYmNmYjZiZTlhZmUxMTIxODYyMTQzZjIyNmI1MWNmCitUZXh0LWNvbnRlbnQtc2hhMTogMWQxZjVlYTRjZWI1ODQzMzdmZmU1OWI4OTgwZDkyZTNiNzhkZmVmNAorQ29udGVudC1sZW5ndGg6IDE3CisKK1BST1BTLUVORAorY3J1bmNoCisKKworUmV2aXNpb24tbnVtYmVyOiAxMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTI1CitDb250ZW50LWxlbmd0aDogMTI1CisKK0sgNworc3ZuOmxvZworViAyNworKHIxMSkgTWVyZ2UgbGVmdCB0byB0cnVuayAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxOC4wNTY1OTRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU0CitDb250ZW50LWxlbmd0aDogNTQKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAxOQorL2JyYW5jaGVzL2xlZnQ6Mi0xMAorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTkzCitUZXh0LWNvbnRlbnQtbWQ1OiA1Y2NmZjY4OWZiMjkwZTAwYjg1ZmUxOGVlNTBjNTRiYQorVGV4dC1jb250ZW50LXNoYTE6IGExM2RlOGUyM2YxNDgzZWZjYTNlNTdiMmI2NGIwYWU2Zjc0MGNlMTAKK0NvbnRlbnQtbGVuZ3RoOiAyNTkzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDEyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE5CisocjEyKSBsZWZ0IHVwZGF0ZSA0CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxOS4wNDk2MjBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L3psb25rCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA3CitUZXh0LWNvbnRlbnQtbWQ1OiA4YjlkOGM3YzJhYWE2MTY3ZTdkMzQwN2E3NzNiYmJiYQorVGV4dC1jb250ZW50LXNoYTE6IDk3MTY1MjdlYmQ3MGE3NWMyNzYyNWNhY2JlYjJkODk3YzZlODYxNzgKK0NvbnRlbnQtbGVuZ3RoOiAxNworCitQUk9QUy1FTkQKK3RvdWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogMTMKK1Byb3AtY29udGVudC1sZW5ndGg6IDExOAorQ29udGVudC1sZW5ndGg6IDExOAorCitLIDcKK3N2bjpsb2cKK1YgMjAKKyhyMTMpIHJpZ2h0IHVwZGF0ZSAyCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoyMC4wNDk2NTlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodC9iYW5nCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiAzNGMyOGYxZDJkYzZhOWFkZWNjYzQyNjViZjc1MTZjYgorVGV4dC1jb250ZW50LXNoYTE6IDBiYzViYjM0NWMwZTcxZDI4Zjc4NGYxMmUwYmQyZDM4NGMyODMwNjIKK0NvbnRlbnQtbGVuZ3RoOiAxOAorCitQUk9QUy1FTkQKK3Rod2Fja2UKKworCitSZXZpc2lvbi1udW1iZXI6IDE0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNDAKK0NvbnRlbnQtbGVuZ3RoOiAxNDAKKworSyA3Citzdm46bG9nCitWIDQyCisocjE0KSBDaGVycnktcGljayByaWdodCAyIGNvbW1pdHMgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjIzLjA0MTk5MVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNzUKK0NvbnRlbnQtbGVuZ3RoOiA3NQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDQwCisvYnJhbmNoZXMvbGVmdDoyLTEwCisvYnJhbmNoZXMvcmlnaHQ6Ni0xMworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNzEzCitUZXh0LWNvbnRlbnQtbWQ1OiAwYWZiZTM0ZjI0NGNkNjYyYjFmOTdkNzA4YzY4N2Y5MAorVGV4dC1jb250ZW50LXNoYTE6IDQ2ZDkzNzdkNzgzZTY3YTliNTgxZGExMTAzNTJlNzk5NTE3YzhhMTQKK0NvbnRlbnQtbGVuZ3RoOiAyNzEzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UgbWVyZ2UtY2FjaGUKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCittZXJnZS1jYWNoZTogbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtY2FjaGUgbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitOb2RlLXBhdGg6IHRydW5rL2JhbmcKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEzCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL3JpZ2h0L2JhbmcKK1RleHQtY29weS1zb3VyY2UtbWQ1OiAzNGMyOGYxZDJkYzZhOWFkZWNjYzQyNjViZjc1MTZjYgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAwYmM1YmIzNDVjMGU3MWQyOGY3ODRmMTJlMGJkMmQzODRjMjgzMDYyCisKKworUmV2aXNpb24tbnVtYmVyOiAxNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTI2CitDb250ZW50LWxlbmd0aDogMTI2CisKK0sgNworc3ZuOmxvZworViAyOAorKHIxNSkgTWVyZ2UgcmlnaHQgdG8gdHJ1bmsgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjYuMDU0NDU2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA3NQorQ29udGVudC1sZW5ndGg6IDc1CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNDAKKy9icmFuY2hlcy9sZWZ0OjItMTAKKy9icmFuY2hlcy9yaWdodDoyLTE0CitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDE2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTgKK0NvbnRlbnQtbGVuZ3RoOiAxMTgKKworSyA3Citzdm46bG9nCitWIDIwCisocjE2KSByaWdodCB1cGRhdGUgMworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjcuMDQ5OTU1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQvdXJra2sKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDYKK1RleHQtY29udGVudC1tZDU6IDU4ODljODM5MmUxNjI1MWIwYzgwOTI3NjA3YTAzMDM2CitUZXh0LWNvbnRlbnQtc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorQ29udGVudC1sZW5ndGg6IDE2CisKK1BST1BTLUVORAord2hhbW0KKworCitSZXZpc2lvbi1udW1iZXI6IDE3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTgKK0NvbnRlbnQtbGVuZ3RoOiAxMTgKKworSyA3Citzdm46bG9nCitWIDIwCisocjE3KSB0cnVuayB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjguMDQ5NjE1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvdnJvbmsKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGIyZjgwZmEwMmE3ZjEzNjRiOWMyOWQzZGE0NGJmOWY5CitUZXh0LWNvbnRlbnQtc2hhMTogZTk5NGQ5ODBjMGYyZDdhM2Y3NjEzOGJmOTZkNTdmMzZmOTYzMzgyOAorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorcG93CisKKworUmV2aXNpb24tbnVtYmVyOiAxOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTM0CitDb250ZW50LWxlbmd0aDogMTM0CisKK0sgNworc3ZuOmxvZworViAzNgorKHIxOCkgTWVyZ2UgcmlnaHQgdG8gbGVmdCBzdWItYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozMS4wNjE0NjBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1YgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU1CitDb250ZW50LWxlbmd0aDogNTUKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAyMAorL2JyYW5jaGVzL3JpZ2h0OjItMTcKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjcxMworVGV4dC1jb250ZW50LW1kNTogMGFmYmUzNGYyNDRjZDY2MmIxZjk3ZDcwOGM2ODdmOTAKK1RleHQtY29udGVudC1zaGExOiA0NmQ5Mzc3ZDc4M2U2N2E5YjU4MWRhMTEwMzUyZTc5OTUxN2M4YTE0CitDb250ZW50LWxlbmd0aDogMjcxMworCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9iYW5nCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxNworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9yaWdodC9iYW5nCitUZXh0LWNvcHktc291cmNlLW1kNTogMzRjMjhmMWQyZGM2YTlhZGVjY2M0MjY1YmY3NTE2Y2IKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMGJjNWJiMzQ1YzBlNzFkMjhmNzg0ZjEyZTBiZDJkMzg0YzI4MzA2MgorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvdXJra2sKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE3CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL3JpZ2h0L3Vya2trCitUZXh0LWNvcHktc291cmNlLW1kNTogNTg4OWM4MzkyZTE2MjUxYjBjODA5Mjc2MDdhMDMwMzYKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorCisKK1JldmlzaW9uLW51bWJlcjogMTkKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyOAorQ29udGVudC1sZW5ndGg6IDEyOAorCitLIDcKK3N2bjpsb2cKK1YgMzAKKyhyMTkpIGxlZnQgc3ViLWJyYW5jaCB1cGRhdGUgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MzIuMDQ5MjQ0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDYKK1RleHQtY29udGVudC1tZDU6IDc1N2JjZDU4MTg1NzJlZjNmOTU4MDA1MjYxN2MxYzhiCitUZXh0LWNvbnRlbnQtc2hhMTogYjE2NTAxOWIwMDVjMTk5MjM3YmE4MjJjNDQwNGU3NzFlOTNiNjU0YQorQ29udGVudC1sZW5ndGg6IDE2CisKK1BST1BTLUVORAorem93aWUKKworCitSZXZpc2lvbi1udW1iZXI6IDIwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE5CisocjIwKSBsZWZ0IHVwZGF0ZSA1CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozMy4wNDkzMzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L2dsdXJwcAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogMTRhMTY5ZjYyOGUwYmI1OWRmOWMyMTYwNjQ5ZDBhMzAKK1RleHQtY29udGVudC1zaGExOiBlZjdkOTI5ZTUyMTc3NzY3ZWNmY2QyODk0MWY2YjdmMDRiNDEzMWUzCitDb250ZW50LWxlbmd0aDogMTgKKworUFJPUFMtRU5ECitlZWVfeW93CisKKworUmV2aXNpb24tbnVtYmVyOiAyMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTQ2CitDb250ZW50LWxlbmd0aDogMTQ2CisKK0sgNworc3ZuOmxvZworViA0OAorKHIyMSkgQ2hlcnJ5LXBpY2sgbGVmdCBzdWItYnJhbmNoIGNvbW1pdCB0byBsZWZ0CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozNi4wNDE4MzlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDIxCisvYnJhbmNoZXMvbGVmdC1zdWI6MTkKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC93aGFtX2V0aAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMTkKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA3NTdiY2Q1ODE4NTcyZWYzZjk1ODAwNTI2MTdjMWM4YgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBiMTY1MDE5YjAwNWMxOTkyMzdiYTgyMmM0NDA0ZTc3MWU5M2I2NTRhCisKKworUmV2aXNpb24tbnVtYmVyOiAyMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTMzCitDb250ZW50LWxlbmd0aDogMTMzCisKK0sgNworc3ZuOmxvZworViAzNQorKHIyMikgTWVyZ2UgbGVmdCBzdWItYnJhbmNoIHRvIGxlZnQKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjM5LjA0NTAxNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA3OQorQ29udGVudC1sZW5ndGg6IDc5CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNDQKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0xNworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI3MTMKK1RleHQtY29udGVudC1tZDU6IDBhZmJlMzRmMjQ0Y2Q2NjJiMWY5N2Q3MDhjNjg3ZjkwCitUZXh0LWNvbnRlbnQtc2hhMTogNDZkOTM3N2Q3ODNlNjdhOWI1ODFkYTExMDM1MmU3OTk1MTdjOGExNAorQ29udGVudC1sZW5ndGg6IDI3MTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZSBtZXJnZS1jYWNoZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK21lcmdlLWNhY2hlOiBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1jYWNoZSBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9SRUFETUUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL1JFQURNRQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IGZkYmNmYjZiZTlhZmUxMTIxODYyMTQzZjIyNmI1MWNmCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDFkMWY1ZWE0Y2ViNTg0MzM3ZmZlNTliODk4MGQ5MmUzYjc4ZGZlZjQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvYmFuZworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMTgKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvYmFuZworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDM0YzI4ZjFkMmRjNmE5YWRlY2NjNDI2NWJmNzUxNmNiCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDBiYzViYjM0NWMwZTcxZDI4Zjc4NGYxMmUwYmQyZDM4NGMyODMwNjIKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvdXJra2sKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL3Vya2trCitUZXh0LWNvcHktc291cmNlLW1kNTogNTg4OWM4MzkyZTE2MjUxYjBjODA5Mjc2MDdhMDMwMzYKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorCisKK1JldmlzaW9uLW51bWJlcjogMjMKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyNQorQ29udGVudC1sZW5ndGg6IDEyNQorCitLIDcKK3N2bjpsb2cKK1YgMjcKKyhyMjMpIE1lcmdlIGxlZnQgdG8gdHJ1bmsgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6NDIuMDUyNzk4WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA5OQorQ29udGVudC1sZW5ndGg6IDk5CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNjQKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0xNworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9SRUFETUUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIyCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvUkVBRE1FCitUZXh0LWNvcHktc291cmNlLW1kNTogZmRiY2ZiNmJlOWFmZTExMjE4NjIxNDNmMjI2YjUxY2YKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMWQxZjVlYTRjZWI1ODQzMzdmZmU1OWI4OTgwZDkyZTNiNzhkZmVmNAorCisKK05vZGUtcGF0aDogdHJ1bmsvZ2x1cnBwCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0L2dsdXJwcAorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDE0YTE2OWY2MjhlMGJiNTlkZjljMjE2MDY0OWQwYTMwCitUZXh0LWNvcHktc291cmNlLXNoYTE6IGVmN2Q5MjllNTIxNzc3NjdlY2ZjZDI4OTQxZjZiN2YwNGI0MTMxZTMKKworCitOb2RlLXBhdGg6IHRydW5rL3Vya2trCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0L3Vya2trCitUZXh0LWNvcHktc291cmNlLW1kNTogNTg4OWM4MzkyZTE2MjUxYjBjODA5Mjc2MDdhMDMwMzYKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorCisKK05vZGUtcGF0aDogdHJ1bmsvd2hhbV9ldGgKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIyCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvd2hhbV9ldGgKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA3NTdiY2Q1ODE4NTcyZWYzZjk1ODAwNTI2MTdjMWM4YgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBiMTY1MDE5YjAwNWMxOTkyMzdiYTgyMmM0NDA0ZTc3MWU5M2I2NTRhCisKKworTm9kZS1wYXRoOiB0cnVuay96bG9uaworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjIKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC96bG9uaworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDhiOWQ4YzdjMmFhYTYxNjdlN2QzNDA3YTc3M2JiYmJhCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDk3MTY1MjdlYmQ3MGE3NWMyNzYyNWNhY2JlYjJkODk3YzZlODYxNzgKKworCitSZXZpc2lvbi1udW1iZXI6IDI0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzAKK0NvbnRlbnQtbGVuZ3RoOiAxMzAKKworSyA3Citzdm46bG9nCitWIDMyCisocjI0KSBub24tbWVyZ2UgcmlnaHQgdG8gdHJ1bmsgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6NDQuMDM4NDM0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA5OQorQ29udGVudC1sZW5ndGg6IDk5CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNjQKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTI5CitDb250ZW50LWxlbmd0aDogMTI5CisKK0sgNworc3ZuOmxvZworViAzMQorKHIyNSkgbWFrZSBiMSBicmFuY2ggZnJvbSB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTg6NTYuMDg0NTg5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjEKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjQKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDI2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjkKK0NvbnRlbnQtbGVuZ3RoOiAxMjkKKworSyA3Citzdm46bG9nCitWIDMxCisocjI2KSBtYWtlIGIyIGJyYW5jaCBmcm9tIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxODo1OS4wNzY5NDBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9iMgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyNQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogMjcKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNQorQ29udGVudC1sZW5ndGg6IDExNQorCitLIDcKK3N2bjpsb2cKK1YgMTcKKyhyMjcpIGIyIHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTowMS4wOTU3NjJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9iMi9iMmZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDMKK1RleHQtY29udGVudC1tZDU6IDVlZGJkZDU3Y2JhNjIxZWIzYzZlNjAxYmY1NjNiNGRjCitUZXh0LWNvbnRlbnQtc2hhMTogOWQ0YjM4MDQ5Nzc2YmQwYTIwNzRkNjdjYWQyM2Y4ZWFlZDM1YTNiMworQ29udGVudC1sZW5ndGg6IDEzCisKK1BST1BTLUVORAorYjIKKworCitSZXZpc2lvbi1udW1iZXI6IDI4CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTUKK0NvbnRlbnQtbGVuZ3RoOiAxMTUKKworSyA3Citzdm46bG9nCitWIDE3CisocjI4KSBiMSB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MDMuMDk3NDY1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjEvYjFmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAzCitUZXh0LWNvbnRlbnQtbWQ1OiAwODc3OGRmZDlhYzRmNjAzMjMxODk2YWJhN2FhZDUyMworVGV4dC1jb250ZW50LXNoYTE6IGI1NTE3NzFhYTRhZDViMTQxMjNmYzNiZDk4ZDg5ZGIyYmMwZWRkNGYKK0NvbnRlbnQtbGVuZ3RoOiAxMworCitQUk9QUy1FTkQKK2IxCisKKworUmV2aXNpb24tbnVtYmVyOiAyOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAyMworKHIyOSkgTWVyZ2UgYjEgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjA2LjA3MzE3NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE4CitDb250ZW50LWxlbmd0aDogMTE4CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgODMKKy9icmFuY2hlcy9iMToyNS0yOAorL2JyYW5jaGVzL2xlZnQ6Mi0yMgorL2JyYW5jaGVzL2xlZnQtc3ViOjQtMTkKKy9icmFuY2hlcy9yaWdodDoyLTIyCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL2IxZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjgKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvYjEvYjFmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogMDg3NzhkZmQ5YWM0ZjYwMzIzMTg5NmFiYTdhYWQ1MjMKK1RleHQtY29weS1zb3VyY2Utc2hhMTogYjU1MTc3MWFhNGFkNWIxNDEyM2ZjM2JkOThkODlkYjJiYzBlZGQ0ZgorCisKK1JldmlzaW9uLW51bWJlcjogMzAKK1Byb3AtY29udGVudC1sZW5ndGg6IDE0MworQ29udGVudC1sZW5ndGg6IDE0MworCitLIDcKK3N2bjpsb2cKK1YgNDUKKyhyMzApIHRydW5rIGNvbW1pdCBiZWZvcmUgbWVyZ2luZyB0cnVuayB0byBiMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MDguMDk2MzUzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvdHJ1bmtmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA2CitUZXh0LWNvbnRlbnQtbWQ1OiBlZGY0NWZlNWM5OGM1MzY3NzMzYjM5YmJiMmJiMjBkOQorVGV4dC1jb250ZW50LXNoYTE6IDczNjFkMTY4NWU1Yzg2ZGZjNTIzNjIwY2ZhZjU5OGYxOTZmODYyMzkKK0NvbnRlbnQtbGVuZ3RoOiAxNgorCitQUk9QUy1FTkQKK3RydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiAzMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAyMworKHIzMSkgTWVyZ2UgdHJ1bmsgdG8gYjIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjExLjA4MTU0MVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2IyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTMxCitDb250ZW50LWxlbmd0aDogMTMxCisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgOTYKKy9icmFuY2hlcy9iMToyNS0yOAorL2JyYW5jaGVzL2xlZnQ6Mi0yMgorL2JyYW5jaGVzL2xlZnQtc3ViOjQtMTkKKy9icmFuY2hlcy9yaWdodDoyLTIyCisvdHJ1bms6MjYtMzAKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjIvYjFmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzMAorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuay9iMWZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiAwODc3OGRmZDlhYzRmNjAzMjMxODk2YWJhN2FhZDUyMworVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBiNTUxNzcxYWE0YWQ1YjE0MTIzZmMzYmQ5OGQ4OWRiMmJjMGVkZDRmCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9iMi90cnVua2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDMwCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rL3RydW5rZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IGVkZjQ1ZmU1Yzk4YzUzNjc3MzNiMzliYmIyYmIyMGQ5CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDczNjFkMTY4NWU1Yzg2ZGZjNTIzNjIwY2ZhZjU5OGYxOTZmODYyMzkKKworCitSZXZpc2lvbi1udW1iZXI6IDMyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDIzCisocjMyKSBNZXJnZSBiMiB0byB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MTQuMTE3OTM5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzgKK0NvbnRlbnQtbGVuZ3RoOiAxMzgKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAxMDIKKy9icmFuY2hlcy9iMToyNS0yOAorL2JyYW5jaGVzL2IyOjI2LTMxCisvYnJhbmNoZXMvbGVmdDoyLTIyCisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMjIKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvYjJmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9iMi9iMmZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA1ZWRiZGQ1N2NiYTYyMWViM2M2ZTYwMWJmNTYzYjRkYworVGV4dC1jb3B5LXNvdXJjZS1zaGExOiA5ZDRiMzgwNDk3NzZiZDBhMjA3NGQ2N2NhZDIzZjhlYWVkMzVhM2IzCisKKworUmV2aXNpb24tbnVtYmVyOiAzMworUHJvcC1jb250ZW50LWxlbmd0aDogMTQ1CitDb250ZW50LWxlbmd0aDogMTQ1CisKK0sgNworc3ZuOmxvZworViA0NworKHIzMykgbWFrZSBmMSBicmFuY2ggZnJvbSB0cnVuayB3aXRoIGEgbmV3IGZpbGUKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjE3LjEwNTgzMloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2YxCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDMyCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9mMS9mMWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDMKK1RleHQtY29udGVudC1tZDU6IDJiMWFiYzZiNmM1YzAwMTg4NTFmOWY4ZTY0NzU1NjNiCitUZXh0LWNvbnRlbnQtc2hhMTogYWVjZTZkZmJhNTg4OTAwZTAwZDk1NjAxZDIyYjQ0MDhkNDk1ODBhZgorQ29udGVudC1sZW5ndGg6IDEzCisKK1BST1BTLUVORAorZjEKKworCitSZXZpc2lvbi1udW1iZXI6IDM0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNDUKK0NvbnRlbnQtbGVuZ3RoOiAxNDUKKworSyA3Citzdm46bG9nCitWIDQ3CisocjM0KSBtYWtlIGYyIGJyYW5jaCBmcm9tIHRydW5rIHdpdGggYSBuZXcgZmlsZQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MjAuMTEwMDU3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvZjIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzMKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2YyL2YyZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMworVGV4dC1jb250ZW50LW1kNTogNTc1YzU2MzhkNjAyNzE0NTdlNTRhYjdkMDczMDk1MDIKK1RleHQtY29udGVudC1zaGExOiAxYzQ5YTQ0MGMzNTJmMzQ3M2VmYTk1MTIyNTUwMzNiOTRkYzdkZWYwCitDb250ZW50LWxlbmd0aDogMTMKKworUFJPUFMtRU5ECitmMgorCisKK1JldmlzaW9uLW51bWJlcjogMzUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyOAorQ29udGVudC1sZW5ndGg6IDEyOAorCitLIDcKK3N2bjpsb2cKK1YgMzAKKyhyMzUpIE1lcmdlIGYxIGFuZCBmMiB0byB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MjQuMDgxNDkwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNzMKK0NvbnRlbnQtbGVuZ3RoOiAxNzMKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAxMzcKKy9icmFuY2hlcy9iMToyNS0yOAorL2JyYW5jaGVzL2IyOjI2LTMxCisvYnJhbmNoZXMvZjE6MzMtMzQKKy9icmFuY2hlcy9mMjozNAorL2JyYW5jaGVzL2xlZnQ6Mi0yMgorL2JyYW5jaGVzL2xlZnQtc3ViOjQtMTkKKy9icmFuY2hlcy9yaWdodDoyLTIyCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL2YxZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzQKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvZjEvZjFmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogMmIxYWJjNmI2YzVjMDAxODg1MWY5ZjhlNjQ3NTU2M2IKK1RleHQtY29weS1zb3VyY2Utc2hhMTogYWVjZTZkZmJhNTg4OTAwZTAwZDk1NjAxZDIyYjQ0MDhkNDk1ODBhZgorCisKK05vZGUtcGF0aDogdHJ1bmsvZjJmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzNAorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9mMi9mMmZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA1NzVjNTYzOGQ2MDI3MTQ1N2U1NGFiN2QwNzMwOTUwMgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAxYzQ5YTQ0MGMzNTJmMzQ3M2VmYTk1MTIyNTUwMzNiOTRkYzdkZWYwCisKKworUmV2aXNpb24tbnVtYmVyOiAzNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTM1CitDb250ZW50LWxlbmd0aDogMTM1CisKK0sgNworc3ZuOmxvZworViAzNworKHIzNikgYWRkIHN1YmRpcmVjdG9yeSB0byBsZWZ0IGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MjYuMTEzNTE2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9zdWJkaXIvY293Ym95CitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA3CitUZXh0LWNvbnRlbnQtbWQ1OiBmMWQ2NTMwMjc4YWQ0MDllNjhjYzY3NTQ3NmFkOTk1ZgorVGV4dC1jb250ZW50LXNoYTE6IDczMmQ5ZTNlNWMzOTFmZmQ3NjdhOThiNDVkZGNjODQ4ZGU3NzhjZWEKK0NvbnRlbnQtbGVuZ3RoOiAxNworCitQUk9QUy1FTkQKK1llZWhhdworCisKK1JldmlzaW9uLW51bWJlcjogMzcKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMworQ29udGVudC1sZW5ndGg6IDEyMworCitLIDcKK3N2bjpsb2cKK1YgMjUKKyhyMzcpIG1lcmdlIGxlZnQgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjI5LjA3MzY5OVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTczCitDb250ZW50LWxlbmd0aDogMTczCisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMTM3CisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9iMjoyNi0zMQorL2JyYW5jaGVzL2YxOjMzLTM0CisvYnJhbmNoZXMvZjI6MzQKKy9icmFuY2hlcy9sZWZ0OjItMzYKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzYKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC9zdWJkaXIKKworCitSZXZpc2lvbi1udW1iZXI6IDM4CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjMKK0NvbnRlbnQtbGVuZ3RoOiAxMjMKKworSyA3Citzdm46bG9nCitWIDI1CisocjM4KSBtYWtlIHBhcnRpYWwgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTozMi4wNzIyNDNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9wYXJ0aWFsCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDM3CitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rL3N1YmRpcgorCisKK1JldmlzaW9uLW51bWJlcjogMzkKK1Byb3AtY29udGVudC1sZW5ndGg6IDExOAorQ29udGVudC1sZW5ndGg6IDExOAorCitLIDcKK3N2bjpsb2cKK1YgMjAKKyhyMzkpIHBhcnRpYWwgdXBkYXRlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTozNC4wOTc5NjFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9wYXJ0aWFsL3BhbGluZHJvbWVzCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiA1ZDFjMjAyNGZiNWVmYzRlZWY4MTI4NTZkZjFiMDgwYworVGV4dC1jb250ZW50LXNoYTE6IDVmODUwOWRkZDE0YzkxYTUyODY0ZGQxNDQ3MzQ0ZTcwNmY5YmJjNjkKK0NvbnRlbnQtbGVuZ3RoOiAxOAorCitQUk9QUy1FTkQKK3JhY2VjYXIKKworCitSZXZpc2lvbi1udW1iZXI6IDQwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjYKK0NvbnRlbnQtbGVuZ3RoOiAxMjYKKworSyA3Citzdm46bG9nCitWIDI4CisocjQwKSBtZXJnZSBwYXJ0aWFsIHRvIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTozNy4wODAyMTFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyNDYKK0NvbnRlbnQtbGVuZ3RoOiAyNDYKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAyMTAKKy9icmFuY2hlcy9iMS9zdWJkaXI6MjUtMjgKKy9icmFuY2hlcy9iMi9zdWJkaXI6MjYtMzEKKy9icmFuY2hlcy9mMS9zdWJkaXI6MzMtMzQKKy9icmFuY2hlcy9mMi9zdWJkaXI6MzQKKy9icmFuY2hlcy9sZWZ0L3N1YmRpcjoyLTM2CisvYnJhbmNoZXMvbGVmdC1zdWIvc3ViZGlyOjQtMTkKKy9icmFuY2hlcy9wYXJ0aWFsOjM4LTM5CisvYnJhbmNoZXMvcmlnaHQvc3ViZGlyOjItMjIKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyL3BhbGluZHJvbWVzCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzOQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9wYXJ0aWFsL3BhbGluZHJvbWVzCitUZXh0LWNvcHktc291cmNlLW1kNTogNWQxYzIwMjRmYjVlZmM0ZWVmODEyODU2ZGYxYjA4MGMKK1RleHQtY29weS1zb3VyY2Utc2hhMTogNWY4NTA5ZGRkMTRjOTFhNTI4NjRkZDE0NDczNDRlNzA2ZjliYmM2OQorCisKK1JldmlzaW9uLW51bWJlcjogNDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTgKKyhyNDEpIHRhZ2dpbmcgdjEuMAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6NDAuMDgzNDYwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdGFncy92MS4wCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDQwCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA0MgorUHJvcC1jb250ZW50LWxlbmd0aDogMTMxCitDb250ZW50LWxlbmd0aDogMTMxCisKK0sgNworc3ZuOmxvZworViAzMworKHI0MikgbWFrZSBidWdmaXggYnJhbmNoIGZyb20gdGFnCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTo0My4xMTgwNzVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9idWdmaXgKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogNDEKK05vZGUtY29weWZyb20tcGF0aDogdGFncy92MS4wCisKKworUmV2aXNpb24tbnVtYmVyOiA0MworUHJvcC1jb250ZW50LWxlbmd0aDogMTIwCitDb250ZW50LWxlbmd0aDogMTIwCisKK0sgNworc3ZuOmxvZworViAyMgorKHI0MykgY29tbWl0IHRvIGJ1Z2ZpeAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6NDUuMDc5NTM2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnVnZml4L3N1YmRpci9wYWxpbmRyb21lcworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxNAorVGV4dC1jb250ZW50LW1kNTogM2IxMmQ5ODU3OGEzZjQzMjBiYTk3ZTY2ZGE1NGZlNWYKK1RleHQtY29udGVudC1zaGExOiA2NzI5MzFjOWU4YWMyYzQwODIwOWVmYWIyZjAxNTYzOGI2ZDY0MDQyCitDb250ZW50LWxlbmd0aDogMTQKKworcmFjZWNhcgora2F5YWsKKworCitSZXZpc2lvbi1udW1iZXI6IDQ0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjUKK0NvbnRlbnQtbGVuZ3RoOiAxMjUKKworSyA3Citzdm46bG9nCitWIDI3CisocjQ0KSBNZXJnZSBCVUdGSVggdG8gVFJVTksKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjQ4LjA3ODkxNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMjEwCitDb250ZW50LWxlbmd0aDogMjEwCisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMTc0CisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9iMjoyNi0zMQorL2JyYW5jaGVzL2J1Z2ZpeDo0Mi00MworL2JyYW5jaGVzL2YxOjMzLTM0CisvYnJhbmNoZXMvZjI6MzQKKy9icmFuY2hlcy9sZWZ0OjItMzYKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorL3RhZ3MvdjEuMDo0MQorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyOTcKK0NvbnRlbnQtbGVuZ3RoOiAyOTcKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAyNjEKKy9icmFuY2hlcy9iMS9zdWJkaXI6MjUtMjgKKy9icmFuY2hlcy9iMi9zdWJkaXI6MjYtMzEKKy9icmFuY2hlcy9idWdmaXgvc3ViZGlyOjQyLTQzCisvYnJhbmNoZXMvZjEvc3ViZGlyOjMzLTM0CisvYnJhbmNoZXMvZjIvc3ViZGlyOjM0CisvYnJhbmNoZXMvbGVmdC9zdWJkaXI6Mi0zNgorL2JyYW5jaGVzL2xlZnQtc3ViL3N1YmRpcjo0LTE5CisvYnJhbmNoZXMvcGFydGlhbDozOC0zOQorL2JyYW5jaGVzL3JpZ2h0L3N1YmRpcjoyLTIyCisvdGFncy92MS4wL3N1YmRpcjo0MQorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIvcGFsaW5kcm9tZXMKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTQKK1RleHQtY29udGVudC1tZDU6IDNiMTJkOTg1NzhhM2Y0MzIwYmE5N2U2NmRhNTRmZTVmCitUZXh0LWNvbnRlbnQtc2hhMTogNjcyOTMxYzllOGFjMmM0MDgyMDllZmFiMmYwMTU2MzhiNmQ2NDA0MgorQ29udGVudC1sZW5ndGg6IDE0CisKK3JhY2VjYXIKK2theWFrCisKKwpkaWZmIC0tZ2l0IGEvdC90OTE1Mi1zdm4tZW1wdHktZGlycy1hZnRlci1nYy5zaCBiL3QvdDkxNTItc3ZuLWVtcHR5LWRpcnMtYWZ0ZXItZ2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzAxZTc3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTItc3ZuLWVtcHR5LWRpcnMtYWZ0ZXItZ2Muc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBSb2JlcnQgWmVoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gY3JlYXRlcyBlbXB0eSBkaXJlY3RvcmllcywgY2FsbHMgZ2l0IGdjLCBtYWtlcyBzdXJlIHRoZXkgYXJlIHN0aWxsIGVtcHR5JworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJZG8KKwkJc3ZuX2NtZCBta2RpciAtbSAibWtkaXIgJGkiICIkc3ZucmVwbyIvIiRpIgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUnICdnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgY2xvbmVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjIHJ1bnMnICcKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgc3ZuIGdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIG1rZGlycyByZWNyZWF0ZXMgZW1wdHkgZGlyZWN0b3JpZXMgYWZ0ZXIgZ2l0IHN2biBnYycgJworCSgKKwkJY2QgY2xvbmVkICYmCisJCXJtIC1yICogJiYKKwkJZ2l0IHN2biBta2RpcnMgJiYKKwkJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwkJZG8KKwkJCWlmICEgdGVzdCAtZCAiJGkiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZG9uZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUzLWdpdC1zdm4tcmV3cml0ZS11dWlkLnNoIGIvdC90OTE1My1naXQtc3ZuLXJld3JpdGUtdXVpZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGEyY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1My1naXQtc3ZuLXJld3JpdGUtdXVpZC5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpheSBTb2ZmaWFuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gLS1yZXdyaXRlLXV1aWQgdGVzdCcKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3V1aWQ9NmNjOGFkYTQtNTkzMi00YjRhLTgyNDItMzUzNGVkOGEzMjMyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIHJlcG8nICIKKwlzdm5hZG1pbiBsb2FkIC1xICckcmF3c3ZucmVwbycgPCAnJFRFU1RfRElSRUNUT1JZL3Q5MTUzL3N2bi5kdW1wJyAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtLXJld3JpdGUtdXVpZD0nJHV1aWQnICckc3ZucmVwbycgJiYKKwlnaXQgc3ZuIGZldGNoCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdXVpZCcgIgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MCB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogLipAMiAkdXVpZCQnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZ2l0LXN2bn4xIHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAuKkAxICR1dWlkJCcKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1My9zdm4uZHVtcCBiL3QvdDkxNTMvc3ZuLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkZmU3MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTMvc3ZuLmR1bXAKQEAgLTAsMCArMSw3NSBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogYjQ4ODU2MjYtYzk0Zi00YTZjLWIxNzktMDBjMDMwZmM2OGU4CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA2OjQxOjAzLjkwODU3NloKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwOQorQ29udGVudC1sZW5ndGg6IDEwOQorCitLIDcKK3N2bjpsb2cKK1YgMTEKK2luaXRpYWwgZm9vCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNjo0MTo0OC4zNTM3NzZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBmb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGQzYjA3Mzg0ZDExM2VkZWM0OWVhYTYyMzhhZDVmZjAwCitUZXh0LWNvbnRlbnQtc2hhMTogZjFkMmQyZjkyNGU5ODZhYzg2ZmRmN2IzNmM5NGJjZGYzMmJlZWMxNQorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorZm9vCisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDEyCitub3cgd2l0aCBiYXIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA2OjQyOjE0LjIxNDY0MFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiBmNDdjNzU2MTQwODdhOGRkOTM4YmE0YWNmZjI1MjQ5NAorVGV4dC1jb250ZW50LXNoYTE6IDRlNDhlMmM5YTNkMmNhOGE3MDhjYjBjYzU0NTcwMDU0NGVmYjUwMjEKK0NvbnRlbnQtbGVuZ3RoOiA4CisKK2ZvbworYmFyCisKKwpkaWZmIC0tZ2l0IGEvdC90OTE1NC1naXQtc3ZuLWZhbmN5LWdsb2Iuc2ggYi90L3Q5MTU0LWdpdC1zdm4tZmFuY3ktZ2xvYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzgwZTBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1NC1naXQtc3ZuLWZhbmN5LWdsb2Iuc2gKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBKYXkgU29mZmlhbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGZhbmN5IGdsb2IgdGVzdCcKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIHJlcG8nICIKKwlzdm5hZG1pbiBsb2FkIC1xICckcmF3c3ZucmVwbycgPCAnJFRFU1RfRElSRUNUT1JZL3Q5MTU0L3N2bi5kdW1wJyAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtVCB0cnVuayAnJHN2bnJlcG8nICYmCisJZ2l0IHN2biBmZXRjaAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlZCBicmFuY2gnICIKKwlnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzICdicmFuY2hlcy97cmVkfTpyZWZzL3JlbW90ZXMvKicgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvcmVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZ3JlZW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ibHVlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZ3JlIGJyYW5jaCcgIgorCUdJVF9DT05GSUc9LmdpdC9zdm4vLm1ldGFkYXRhIGdpdCBjb25maWcgLS11bnNldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXYgJiYKKwlnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzICdicmFuY2hlcy97cmVkLGdyZX06cmVmcy9yZW1vdGVzLyonICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3JlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2dyZWVuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYmx1ZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGdyZWVuIGJyYW5jaCcgIgorCUdJVF9DT05GSUc9LmdpdC9zdm4vLm1ldGFkYXRhIGdpdCBjb25maWcgLS11bnNldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXYgJiYKKwlnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzICdicmFuY2hlcy97cmVkLGdyZWVufTpyZWZzL3JlbW90ZXMvKicgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvcmVkICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZ3JlZW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ibHVlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYWxsIGJyYW5jaGVzJyAiCisJR0lUX0NPTkZJRz0uZ2l0L3N2bi8ubWV0YWRhdGEgZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzLW1heFJldiAmJgorCWdpdCBjb25maWcgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgJ2JyYW5jaGVzLyo6cmVmcy9yZW1vdGVzLyonICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3JlZCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2dyZWVuICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYmx1ZQorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTU0L3N2bi5kdW1wIGIvdC90OTE1NC9zdm4uZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGZhYmI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1NC9zdm4uZHVtcApAQCAtMCwwICsxLDIyMiBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogYTE4MDkzYTAtNWYwYi00NGUwLThkODgtODkxMWFjNzA3OGRiCisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQwOjI1LjY2MDA1M1oKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwNAorQ29udGVudC1sZW5ndGg6IDEwNAorCitLIDcKK3N2bjpsb2cKK1YgNworaW5pdGlhbAorSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDc6NDE6MzMuNjM2MzY1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiBkM2IwNzM4NGQxMTNlZGVjNDllYWE2MjM4YWQ1ZmYwMAorVGV4dC1jb250ZW50LXNoYTE6IGYxZDJkMmY5MjRlOTg2YWM4NmZkZjdiMzZjOTRiY2RmMzJiZWVjMTUKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK2ZvbworCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViAxMgorYWRkIGJyYW5jaGVzCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0MjozNy4yOTA2OTRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9ibHVlCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2dyZWVuCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL3JlZAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDgKK0NvbnRlbnQtbGVuZ3RoOiAxMDgKKworSyA3Citzdm46bG9nCitWIDEwCityZWQgY2hhbmdlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0MzowMi4yMDg5MThaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yZWQvZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDgKK1RleHQtY29udGVudC1tZDU6IDY0YzNjOGNmN2QwMjMzYWI3NjI3NjIzYTY4ODg4YmQxCitUZXh0LWNvbnRlbnQtc2hhMTogOTVhMDQ5MjAyNzg3NmFkZmQzODkxZWM3MWVlMzdiNzllZTQ0ZDY0MAorQ29udGVudC1sZW5ndGg6IDgKKworZm9vCityZWQKKworCitSZXZpc2lvbi1udW1iZXI6IDQKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgMTIKK2dyZWVuIGNoYW5nZQorSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDc6NDM6MTUuNzQ2NTg2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvZ3JlZW4vZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbWQ1OiAwMjA5YjY0NTA4OTFhYmMwMzNkNWVhYWE5ZDNhODAyMworVGV4dC1jb250ZW50LXNoYTE6IDg3ZmMzYmVmOWZhZWVjNDhjMGNkNjFkZmM5ODUxZGIzNzdmZGNjZjcKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitmb28KK2dyZWVuCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDkKK0NvbnRlbnQtbGVuZ3RoOiAxMDkKKworSyA3Citzdm46bG9nCitWIDExCitibHVlIGNoYW5nZQorSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDc6NDM6MjkuMzY0ODExWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYmx1ZS9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogOQorVGV4dC1jb250ZW50LW1kNTogOWZiZTRjMTNkMGJhZTg2Mzg2YWU1MjA5YjJlNmIyNzUKK1RleHQtY29udGVudC1zaGExOiBjYzQ1NzUwODM0NTlhMTZmOWFhZWY3OTZjNGEyNDU2ZDY0NjkxYmEwCitDb250ZW50LWxlbmd0aDogOQorCitmb28KK2JsdWUKKworCitSZXZpc2lvbi1udW1iZXI6IDYKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgMTIKK3RydW5rIGNoYW5nZQorSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDc6NDQ6MDEuMzEzMTMwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbWQ1OiAxYzRkYjk3N2Q3YTU3YzNiYWU1ODJhYWI4Nzk0ODUxNgorVGV4dC1jb250ZW50LXNoYTE6IDQ2OWMwOGRmNDQ5ZTcwMmNmMmExZmU3NDYyNDRhOWVmM2Y4MzdmYWQKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitmb28KK3RydW5rCisKKwpkaWZmIC0tZ2l0IGEvdC90OTE1NS1naXQtc3ZuLWZldGNoLWRlbGV0ZWQtdGFnLnNoIGIvdC90OTE1NS1naXQtc3ZuLWZldGNoLWRlbGV0ZWQtdGFnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE0ODZhOTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTU1LWdpdC1zdm4tZmV0Y2gtZGVsZXRlZC10YWcuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZmV0Y2ggZGVsZXRlZCB0YWcnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm4gcmVwbycgJworCW1rZGlyIC1wIGltcG9ydC90cnVuay9zdWJkaXIgJiYKKwlta2RpciAtcCBpbXBvcnQvYnJhbmNoZXMgJiYKKwlta2RpciAtcCBpbXBvcnQvdGFncyAmJgorCWVjaG8gImJhc2UiID5pbXBvcnQvdHJ1bmsvc3ViZGlyL2ZpbGUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiBpbXBvcnQgIiRzdm5yZXBvIiAmJgorCXJtIC1yZiBpbXBvcnQgJiYKKworCXN2bl9jbWQgbWtkaXIgLW0gImNyZWF0ZSBteWJyYW5jaCBkaXJlY3RvcnkiICIkc3ZucmVwby9icmFuY2hlcy9teWJyYW5jaCIgJiYKKwlzdm5fY21kIGNwIC1tICJjcmVhdGUgYnJhbmNoIG15YnJhbmNoIiAiJHN2bnJlcG8vdHJ1bmsiICIkc3ZucmVwby9icmFuY2hlcy9teWJyYW5jaC90cnVuayIgJiYKKworCXN2bl9jbWQgY28gIiRzdm5yZXBvL3RydW5rIiBzdm5fcHJvamVjdCAmJgorCShjZCBzdm5fcHJvamVjdCAmJgorCQllY2hvICJ0cnVuayBjaGFuZ2UiID4+c3ViZGlyL2ZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAidHJ1bmsgY2hhbmdlIiBzdWJkaXIvZmlsZSAmJgorCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwby9icmFuY2hlcy9teWJyYW5jaC90cnVuayIgJiYKKwkJZWNobyAiYnJhbmNoIGNoYW5nZSIgPj5zdWJkaXIvZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJicmFuY2ggY2hhbmdlIiBzdWJkaXIvZmlsZQorCSkgJiYKKworCXN2bl9jbWQgY3AgLW0gImNyZWF0ZSBteXRhZyBhdHRlbXB0IDEiIC1yNSAiJHN2bnJlcG8vdHJ1bmsvc3ViZGlyIiAiJHN2bnJlcG8vdGFncy9teXRhZyIgJiYKKwlzdm5fY21kIHJtIC1tICJkZWxldGUgbXl0YWcgYXR0ZW1wdCAxIiAiJHN2bnJlcG8vdGFncy9teXRhZyIgJiYKKwlzdm5fY21kIGNwIC1tICJjcmVhdGUgbXl0YWcgYXR0ZW1wdCAyIiAtcjUgIiRzdm5yZXBvL2JyYW5jaGVzL215YnJhbmNoL3RydW5rL3N1YmRpciIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGRlbGV0ZWQgdGFncyBmcm9tIHNhbWUgcmV2aXNpb24gd2l0aCBjaGVja3N1bSBlcnJvcicgJworCWdpdCBzdm4gaW5pdCAtLXN0ZGxheW91dCAiJHN2bnJlcG8iIGdpdF9wcm9qZWN0ICYmCisJY2QgZ2l0X3Byb2plY3QgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBteWJyYW5jaDp0cnVuay9zdWJkaXIvZmlsZSB0YWdzL215dGFnOmZpbGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXI6c3ViZGlyL2ZpbGUgdGFncy9teXRhZ146ZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTYtZ2l0LXN2bi1mZXRjaC1kZWxldGVkLXRhZy0yLnNoIGIvdC90OTE1Ni1naXQtc3ZuLWZldGNoLWRlbGV0ZWQtdGFnLTIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWNlN2UyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTYtZ2l0LXN2bi1mZXRjaC1kZWxldGVkLXRhZy0yLnNoCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGZldGNoIGRlbGV0ZWQgdGFnIDInCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm4gcmVwbycgJworCW1rZGlyIC1wIGltcG9ydC9icmFuY2hlcyAmJgorCW1rZGlyIC1wIGltcG9ydC90YWdzICYmCisJbWtkaXIgLXAgaW1wb3J0L3RydW5rL3N1YmRpcjEgJiYKKwlta2RpciAtcCBpbXBvcnQvdHJ1bmsvc3ViZGlyMiAmJgorCW1rZGlyIC1wIGltcG9ydC90cnVuay9zdWJkaXIzICYmCisJZWNobyAiZmlsZTEiID5pbXBvcnQvdHJ1bmsvc3ViZGlyMS9maWxlICYmCisJZWNobyAiZmlsZTIiID5pbXBvcnQvdHJ1bmsvc3ViZGlyMi9maWxlICYmCisJZWNobyAiZmlsZTMiID5pbXBvcnQvdHJ1bmsvc3ViZGlyMy9maWxlICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgaW1wb3J0ICIkc3ZucmVwbyIgJiYKKwlybSAtcmYgaW1wb3J0ICYmCisKKwlzdm5fY21kIGNvICIkc3ZucmVwby90cnVuayIgc3ZuX3Byb2plY3QgJiYKKwkoY2Qgc3ZuX3Byb2plY3QgJiYKKwkJZWNobyAiY2hhbmdlMSIgPj5zdWJkaXIxL2ZpbGUgJiYKKwkJZWNobyAiY2hhbmdlMiIgPj5zdWJkaXIyL2ZpbGUgJiYKKwkJZWNobyAiY2hhbmdlMyIgPj5zdWJkaXIzL2ZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiY2hhbmdlIiAuCisJKSAmJgorCisJc3ZuX2NtZCBjcCAtbSAiY3JlYXRlIG15dGFnIDEiIC1yMiAiJHN2bnJlcG8vdHJ1bmsvc3ViZGlyMSIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciICYmCisJc3ZuX2NtZCBybSAtbSAiZGVsZXRlIG15dGFnIDEiICIkc3ZucmVwby90YWdzL215dGFnIiAmJgorCXN2bl9jbWQgY3AgLW0gImNyZWF0ZSBteXRhZyAyIiAtcjIgIiRzdm5yZXBvL3RydW5rL3N1YmRpcjIiICIkc3ZucmVwby90YWdzL215dGFnIiAmJgorCXN2bl9jbWQgcm0gLW0gImRlbGV0ZSBteXRhZyAyIiAiJHN2bnJlcG8vdGFncy9teXRhZyIgJiYKKwlzdm5fY21kIGNwIC1tICJjcmVhdGUgbXl0YWcgMyIgLXIyICIkc3ZucmVwby90cnVuay9zdWJkaXIzIiAiJHN2bnJlcG8vdGFncy9teXRhZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZGVsZXRlZCB0YWdzIGZyb20gc2FtZSByZXZpc2lvbiB3aXRoIG5vIGNoZWNrc3VtIGVycm9yJyAnCisJZ2l0IHN2biBpbml0IC0tc3RkbGF5b3V0ICIkc3ZucmVwbyIgZ2l0X3Byb2plY3QgJiYKKwljZCBnaXRfcHJvamVjdCAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKworCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlcjpzdWJkaXIzL2ZpbGUgdGFncy9teXRhZzpmaWxlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyOnN1YmRpcjIvZmlsZSB0YWdzL215dGFnXjpmaWxlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyOnN1YmRpcjEvZmlsZSB0YWdzL215dGFnXl46ZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTctZ2l0LXN2bi1mZXRjaC1tZXJnZS5zaCBiL3QvdDkxNTctZ2l0LXN2bi1mZXRjaC1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OTFkMmFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1Ny1naXQtc3ZuLWZldGNoLW1lcmdlLnNoCkBAIC0wLDAgKzEsNTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgU3RldmVuIFdhbHRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIG1lcmdlIGRldGVjdGlvbicKKy4gLi9saWItZ2l0LXN2bi5zaAorCitzdm5fdmVyPSIkKHN2biAtLXZlcnNpb24gLS1xdWlldCkiCitjYXNlICRzdm5fdmVyIGluCiswLiogfCAxLlswLTRdLiopCisJc2tpcF9hbGw9InNraXBwaW5nIGdpdC1zdm4gdGVzdCAtIFNWTiB0b28gb2xkICgkc3ZuX3ZlcikiCisJdGVzdF9kb25lCisJOzsKK2VzYWMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzb3VyY2Ugc3ZuIHJlcG8nICcKKwlzdm5fY21kIG1rZGlyIC1tIHggIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL2JyYW5jaGVzICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rICIkU1ZOX1RSRUUiICYmCisJKAorCQljZCAiJFNWTl9UUkVFIiAmJgorCQl0b3VjaCBmb28gJiYKKwkJc3ZuIGFkZCBmb28gJiYKKwkJc3ZuIGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJCXN2biBjcCAtbSBicmFuY2ggIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJdG91Y2ggYmFyICYmCisJCXN2biBhZGQgYmFyICYmCisJCXN2biBjb21taXQgLW0geCAmJgorCQlzdm4gY3AgLW0gYnJhbmNoICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXN2biBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXRvdWNoIGJheiAmJgorCQlzdm4gYWRkIGJheiAmJgorCQlzdm4gY29tbWl0IC1tIHggJiYKKwkJc3ZuIHN3aXRjaCAiJHN2bnJlcG8iL3RydW5rICYmCisJCXN2biBtZXJnZSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJc3ZuIGNvbW1pdCAtbSAibWVyZ2UiICYmCisJCXN2biBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXN2biBjb21taXQgLW0geCAmJgorCQlzdm4gc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm4gbWVyZ2UgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXN2biBjb21taXQgLW0gIm1lcmdlIGJyYW5jaDEiICYmCisJCXN2biBzd2l0Y2ggIiRzdm5yZXBvIi90cnVuayAmJgorCQlzdm4gbWVyZ2UgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXN2biByZXNvbHZlZCBiYXogJiYKKwkJc3ZuIGNvbW1pdCAtbSAibWVyZ2UgYnJhbmNoMiIKKwkpICYmCisJcm0gLXJmICIkU1ZOX1RSRUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHN2biByZXBvJyAnCisJZ2l0IHN2biBpbml0IC1zICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSBjb21taXQnICdnaXQgcmV2LXBhcnNlIEhFQUReMicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTU4LWdpdC1zdm4tbWVyZ2VpbmZvLnNoIGIvdC90OTE1OC1naXQtc3ZuLW1lcmdlaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Yzk1MzllCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1OC1naXQtc3ZuLW1lcmdlaW5mby5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFN0ZXZlbiBXYWx0ZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtZXJnZWluZm8gcHJvcGFnYXRpb24nCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitzYXkgJ2RlZmluZSBOT19TVk5fVEVTVFMgdG8gc2tpcCBnaXQgc3ZuIHRlc3RzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHNvdXJjZSBzdm4gcmVwbycgJworCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rICIkU1ZOX1RSRUUiICYmCisJKAorCQljZCAiJFNWTl9UUkVFIiAmJgorCQl0b3VjaCBmb28gJiYKKwkJc3ZuX2NtZCBhZGQgZm9vICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIKKwkpICYmCisJcm0gLXJmICIkU1ZOX1RSRUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHN2biByZXBvJyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlnaXQgc3ZuIGZldGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBzdm46bWVyZ2VpbmZvJyAnCisJdG91Y2ggYmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICJiYXIiICYmCisJZ2l0IHN2biBkY29tbWl0IC0tbWVyZ2VpbmZvPSIvYnJhbmNoZXMvZm9vOjEtMTAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzdm46bWVyZ2VpbmZvJyAnCisJbWVyZ2VpbmZvPSQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptZXJnZWluZm8gIiRzdm5yZXBvIi90cnVuaykKKwl0ZXN0ICIkbWVyZ2VpbmZvIiA9ICIvYnJhbmNoZXMvZm9vOjEtMTAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBzdm46bWVyZ2VpbmZvIG11bHRpbGluZScgJworCXRvdWNoIGJheiAmJgorCWdpdCBhZGQgYmF6ICYmCisJZ2l0IGNvbW1pdCAtbSAiYmF6IiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtLW1lcmdlaW5mbz0iL2JyYW5jaGVzL2JhcjoxLTEwIC9icmFuY2hlcy9vdGhlcjozLTUsOCwxMC0xMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHN2bjptZXJnZWluZm8gbXVsdGlsaW5lJyAnCisJbWVyZ2VpbmZvPSQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptZXJnZWluZm8gIiRzdm5yZXBvIi90cnVuaykKKwl0ZXN0ICIkbWVyZ2VpbmZvIiA9ICIvYnJhbmNoZXMvYmFyOjEtMTAKKy9icmFuY2hlcy9vdGhlcjozLTUsOCwxMC0xMSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTU5LWdpdC1zdm4tbm8tcGFyZW50LW1lcmdlaW5mby5zaCBiL3QvdDkxNTktZ2l0LXN2bi1uby1wYXJlbnQtbWVyZ2VpbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY5ZTQ4MTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTU5LWdpdC1zdm4tbm8tcGFyZW50LW1lcmdlaW5mby5zaApAQCAtMCwwICsxLDQxIEBACisjIS9iaW4vc2gKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gaGFuZGxpbmcgb2Ygcm9vdCBjb21taXRzIGluIG1lcmdlIHJhbmdlcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCitzdm5fdmVyPSIkKHN2biAtLXZlcnNpb24gLS1xdWlldCkiCitjYXNlICRzdm5fdmVyIGluCiswLiogfCAxLlswLTRdLiopCisJc2tpcF9hbGw9InNraXBwaW5nIGdpdC1zdm4gdGVzdCAtIFNWTiB0b28gb2xkICgkc3ZuX3ZlcikiCisJdGVzdF9kb25lCisJOzsKK2VzYWMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBoYW5kbGluZyBvZiByb290IGNvbW1pdHMgaW4gbWVyZ2UgcmFuZ2VzJyAnCisJbWtkaXIgLXAgaW5pdC90cnVuayBpbml0L2JyYW5jaGVzIGluaXQvdGFncyAmJgorCWVjaG8gInIxIiA+IGluaXQvdHJ1bmsvZmlsZS50eHQgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCBpbXBvcnQiIGluaXQgIiRzdm5yZXBvIiAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0bXAgJiYKKwkoCisJCWNkIHRtcCAmJgorCQllY2hvICJyMiIgPiB0cnVuay9maWxlLnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiTW9kaWZ5IGZpbGUudHh0IG9uIHRydW5rIiAmJgorCQlzdm5fY21kIGNwIHRydW5rQDEgYnJhbmNoZXMvYSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQ3JlYXRlIGJyYW5jaCBhIGZyb20gdHJ1bmsgcjEiICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46bWVyZ2VpbmZvIC90cnVuazoxLTIgYnJhbmNoZXMvYSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiRmFrZSBtZXJnZSBvZiB0cnVuayByMiBpbnRvIGJyYW5jaCBhIiAmJgorCQlta2RpciBicmFuY2hlcy9iICYmCisJCWVjaG8gInI1IiA+IGJyYW5jaGVzL2IvZmlsZTIudHh0ICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzL2IgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkNyZWF0ZSBicmFuY2ggYiBmcm9tIHRoaW4gYWlyIiAmJgorCQllY2hvICJyNiIgPiBicmFuY2hlcy9iL2ZpbGUyLnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiTW9kaWZ5IGZpbGUyLnR4dCBvbiBicmFuY2ggYiIgJiYKKwkJc3ZuX2NtZCBjcCBicmFuY2hlcy9iQDUgYnJhbmNoZXMvYyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQ3JlYXRlIGJyYW5jaCBjIGZyb20gYnJhbmNoIGIgcjUiICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46bWVyZ2VpbmZvIC9icmFuY2hlcy9iOjUtNiBicmFuY2hlcy9jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJGYWtlIG1lcmdlIG9mIGJyYW5jaCBiIHI2IGludG8gYnJhbmNoIGMiCisJKSAmJgorCWdpdCBzdm4gaW5pdCAtcyAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTYwLWdpdC1zdm4tcHJlc2VydmUtZW1wdHktZGlycy5zaCBiL3QvdDkxNjAtZ2l0LXN2bi1wcmVzZXJ2ZS1lbXB0eS1kaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI0YTQ0MzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTYwLWdpdC1zdm4tcHJlc2VydmUtZW1wdHktZGlycy5zaApAQCAtMCwwICsxLDE1MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMSBSYXkgQ2hlbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHRlc3QgKG9wdGlvbiAtLXByZXNlcnZlLWVtcHR5LWRpcnMpCisKK1RoaXMgdGVzdCB1c2VzIGdpdCB0byBjbG9uZSBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSB0aGF0IGNvbnRhaW5zIGVtcHR5CitkaXJlY3RvcmllcywgYW5kIGNoZWNrcyB0aGF0IGNvcnJlc3BvbmRpbmcgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQgaW4gdGhlCitsb2NhbCBHaXQgcmVwb3NpdG9yeSB3aXRoIHBsYWNlaG9sZGVyIGZpbGVzLicKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3NheSAnZGVmaW5lIE5PX1NWTl9URVNUUyB0byBza2lwIGdpdCBzdm4gdGVzdHMnCitHSVRfUkVQTz1naXQtc3ZuLXJlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzb3VyY2Ugc3ZuIHJlcG8gY29udGFpbmluZyBlbXB0eSBkaXJzJyAnCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkU1ZOX1RSRUUiICYmCisJCW1rZGlyIC1wIDEgMiAzL2EgMy9iIDQgNSA2ICYmCisJCWVjaG8gIkZpcnN0IG5vbi1lbXB0eSBmaWxlIiAgPiAyL2ZpbGUxLnR4dCAmJgorCQllY2hvICJTZWNvbmQgbm9uLWVtcHR5IGZpbGUiID4gMi9maWxlMi50eHQgJiYKKwkJZWNobyAiVGhpcmQgbm9uLWVtcHR5IGZpbGUiICA+IDMvYS9maWxlMS50eHQgJiYKKwkJZWNobyAiRm91cnRoIG5vbi1lbXB0eSBmaWxlIiA+IDMvYi9maWxlMS50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgMSAyIDMgNCA1IDYgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCisJCW1rZGlyIDQvYSAmJgorCQlzdm5fY21kIGFkZCA0L2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm5lc3RlZCBlbXB0eSBkaXJlY3RvcnkiICYmCisJCW1rZGlyIDQvYS9iICYmCisJCXN2bl9jbWQgYWRkIDQvYS9iICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJkZWVwbHkgbmVzdGVkIGVtcHR5IGRpcmVjdG9yeSIgJiYKKwkJbWtkaXIgNC9hL2IvYyAmJgorCQlzdm5fY21kIGFkZCA0L2EvYi9jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJyZWFsbHkgZGVlcGx5IG5lc3RlZCBlbXB0eSBkaXJlY3RvcnkiICYmCisJCWVjaG8gIktpbGwgdGhlIHBsYWNlaG9sZGVyIGZpbGUiID4gNC9hL2IvYy9mb28gJiYKKwkJc3ZuX2NtZCBhZGQgNC9hL2IvYy9mb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlJlZ3VsYXIgZmlsZSB0byByZW1vdmUgcGxhY2Vob2xkZXIiICYmCisKKwkJc3ZuX2NtZCBkZWwgMi9maWxlMi50eHQgJiYKKwkJc3ZuX2NtZCBkZWwgMy9iICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJkZWxldGUgbm9uLWxhc3QgZW50cnkgaW4gZGlyZWN0b3J5IiAmJgorCisJCXN2bl9jbWQgZGVsIDIvZmlsZTEudHh0ICYmCisJCXN2bl9jbWQgZGVsIDMvYSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiZGVsZXRlIGxhc3QgZW50cnkgaW4gZGlyZWN0b3J5IiAmJgorCisJCWVjaG8gIkNvbmZsaWN0IGZpbGUiID4gNS8ucGxhY2Vob2xkZXIgJiYKKwkJbWtkaXIgNi8ucGxhY2Vob2xkZXIgJiYKKwkJc3ZuX2NtZCBhZGQgNS8ucGxhY2Vob2xkZXIgNi8ucGxhY2Vob2xkZXIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlBsYWNlaG9sZGVyIE5hbWVzcGFjZSBjb25mbGljdCIKKwkpICYmCisJcm0gLXJmICIkU1ZOX1RSRUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHN2biByZXBvIHdpdGggLS1wcmVzZXJ2ZS1lbXB0eS1kaXJzJyAnCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iL3RydW5rIC0tcHJlc2VydmUtZW1wdHktZGlycyAiJEdJVF9SRVBPIgorJworCisjICIkR0lUX1JFUE8iLzEgc2hvdWxkIG9ubHkgY29udGFpbiB0aGUgcGxhY2Vob2xkZXIgZmlsZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpcmVjdG9yeSBlbXB0eSBmcm9tIGluY2VwdGlvbicgJworCXRlc3QgLWYgIiRHSVRfUkVQTyIvMS8uZ2l0aWdub3JlICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIvMSAtdHlwZSBmIHwgd2MgLWwpID0gIjEiCisnCisKKyMgIiRHSVRfUkVQTyIvMiBhbmQgIiRHSVRfUkVQTyIvMyBzaG91bGQgb25seSBjb250YWluIHRoZSBwbGFjZWhvbGRlciBmaWxlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0b3J5IGVtcHR5IGZyb20gc3Vic2VxdWVudCBzdm4gY29tbWl0JyAnCisJdGVzdCAtZiAiJEdJVF9SRVBPIi8yLy5naXRpZ25vcmUgJiYKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi8yIC10eXBlIGYgfCB3YyAtbCkgPSAiMSIgJiYKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzMvLmdpdGlnbm9yZSAmJgorCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzMgLXR5cGUgZiB8IHdjIC1sKSA9ICIxIgorJworCisjIE5vIHBsYWNlaG9sZGVyIGZpbGVzIHNob3VsZCBleGlzdCBpbiAiJEdJVF9SRVBPIi80LCBldmVuIHRob3VnaCBvbmUgd2FzCisjIGdlbmVyYXRlZCBmb3IgZXZlcnkgc3ViLWRpcmVjdG9yeSBhdCBzb21lIHBvaW50IGluIHRoZSByZXBvJ3MgaGlzdG9yeS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBlbnRyeSB0byBwcmV2aW91c2x5IGVtcHR5IGRpcmVjdG9yeScgJworCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzQgLXR5cGUgZiB8IHdjIC1sKSA9ICIxIiAmJgorCXRlc3QgLWYgIiRHSVRfUkVQTyIvNC9hL2IvYy9mb28KKycKKworIyBUaGUgSEVBRH4yIGNvbW1pdCBzaG91bGQgbm90IGhhdmUgaW50cm9kdWNlZCAuZ2l0aWdub3JlIHBsYWNlaG9sZGVyIGZpbGVzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIG5vbi1sYXN0IGVudHJ5IGZyb20gZGlyZWN0b3J5JyAnCisJKAorCQljZCAiJEdJVF9SRVBPIiAmJgorCQlnaXQgY2hlY2tvdXQgSEVBRH4yCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWYgIiRHSVRfUkVQTyIvMi8uZ2l0aWdub3JlICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZiAiJEdJVF9SRVBPIi8zLy5naXRpZ25vcmUKKycKKworIyBBZnRlciByZS1jbG9uaW5nIHRoZSByZXBvc2l0b3J5IHdpdGggLS1wbGFjZWhvbGRlci1maWxlIHNwZWNpZmllZCwgdGhlcmUKKyMgc2hvdWxkIGJlIDUgZmlsZXMgbmFtZWQgIi5wbGFjZWhvbGRlciIgaW4gdGhlIGxvY2FsIEdpdCByZXBvLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc3ZuIHJlcG8gd2l0aCAtLXBsYWNlaG9sZGVyLWZpbGUgc3BlY2lmaWVkJyAnCisJcm0gLXJmICIkR0lUX1JFUE8iICYmCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iL3RydW5rIC0tcHJlc2VydmUtZW1wdHktZGlycyBcCisJCS0tcGxhY2Vob2xkZXItZmlsZT0ucGxhY2Vob2xkZXIgIiRHSVRfUkVQTyIgJiYKKwlmaW5kICIkR0lUX1JFUE8iIC10eXBlIGYgLW5hbWUgIi5wbGFjZWhvbGRlciIgJiYKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIiAtdHlwZSBmIC1uYW1lICIucGxhY2Vob2xkZXIiIHwgd2MgLWwpID0gIjUiCisnCisKKyMgIiRHSVRfUkVQTyIvNS8ucGxhY2Vob2xkZXIgc2hvdWxkIGJlIGEgZmlsZSwgYW5kIG5vbi1lbXB0eS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWNlaG9sZGVyIG5hbWVzcGFjZSBjb25mbGljdCB3aXRoIGZpbGUnICcKKwl0ZXN0IC1zICIkR0lUX1JFUE8iLzUvLnBsYWNlaG9sZGVyCisnCisKKyMgIiRHSVRfUkVQTyIvNi8ucGxhY2Vob2xkZXIgc2hvdWxkIGJlIGEgZGlyZWN0b3J5LCBhbmQgdGhlICIkR0lUX1JFUE8iLzYgdHJlZQorIyBzaG91bGQgb25seSBjb250YWluIG9uZSBmaWxlOiB0aGUgcGxhY2Vob2xkZXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFjZWhvbGRlciBuYW1lc3BhY2UgY29uZmxpY3Qgd2l0aCBkaXJlY3RvcnknICcKKwl0ZXN0IC1kICIkR0lUX1JFUE8iLzYvLnBsYWNlaG9sZGVyICYmCisJdGVzdCAtZiAiJEdJVF9SRVBPIi82Ly5wbGFjZWhvbGRlci8ucGxhY2Vob2xkZXIgJiYKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi82IC10eXBlIGYgfCB3YyAtbCkgPSAiMSIKKycKKworIyBQcmVwYXJlIGEgc2Vjb25kIHNldCBvZiBzdm4gY29tbWl0cyB0byB0ZXN0IHBlcnNpc3RlbmNlIGR1cmluZyByZWJhc2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWNvbmQgc2V0IG9mIHN2biBjb21taXRzIGFuZCByZWJhc2UnICcKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkU1ZOX1RSRUUiICYmCisJCW1rZGlyIC1wIDcgJiYKKwkJZWNobyAiVGhpcyBzaG91bGQgcmVtb3ZlIHBsYWNlaG9sZGVyIiA+IDEvZmlsZTEudHh0ICYmCisJCWVjaG8gIlRoaXMgc2hvdWxkIG5vdCByZW1vdmUgcGxhY2Vob2xkZXIiID4gNS9maWxlMS50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgNyAxL2ZpbGUxLnR4dCA1L2ZpbGUxLnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAic3Vic2VxdWVudCBzdm4gY29tbWl0IGZvciBwZXJzaXN0ZW5jZSB0ZXN0cyIKKwkpICYmCisJcm0gLXJmICIkU1ZOX1RSRUUiICYmCisJKAorCQljZCAiJEdJVF9SRVBPIiAmJgorCQlnaXQgc3ZuIHJlYmFzZQorCSkKKycKKworIyBDaGVjayB0aGF0IC0tcHJlc2VydmUtZW1wdHktZGlycyBhbmQgLS1wbGFjZWhvbGRlci1maWxlIGZsYWcgc3RhdGUKKyMgc3RheXMgcGVyc2lzdGVudCBvdmVyIG11bHRpcGxlIGludm9jYXRpb25zLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmxhZyBwZXJzaXN0ZW5jZSBkdXJpbmcgc3Vic3FldWVudCByZWJhc2UnICcKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzcvLnBsYWNlaG9sZGVyICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIvNyAtdHlwZSBmIHwgd2MgLWwpID0gIjEiCisnCisKKyMgQ2hlY2sgdGhhdCBwbGFjZWhvbGRlciBmaWxlcyBhcmUgcHJvcGVybHkgcmVtb3ZlZCB3aGVuIHVubmVjZXNzYXJ5LAorIyBldmVuIGFjcm9zcyBtdWx0aXBsZSBpbnZvY2F0aW9ucy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWNlaG9sZGVyIGxpc3QgcGVyc2lzdGVuY2UgZHVyaW5nIHN1YnNxZXVlbnQgcmViYXNlJyAnCisJdGVzdCAtZiAiJEdJVF9SRVBPIi8xL2ZpbGUxLnR4dCAmJgorCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzEgLXR5cGUgZiB8IHdjIC1sKSA9ICIxIiAmJgorCisJdGVzdCAtZiAiJEdJVF9SRVBPIi81L2ZpbGUxLnR4dCAmJgorCXRlc3QgLWYgIiRHSVRfUkVQTyIvNS8ucGxhY2Vob2xkZXIgJiYKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi81IC10eXBlIGYgfCB3YyAtbCkgPSAiMiIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTYxLWdpdC1zdm4tbWVyZ2VpbmZvLXB1c2guc2ggYi90L3Q5MTYxLWdpdC1zdm4tbWVyZ2VpbmZvLXB1c2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmVmMGMwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjEtZ2l0LXN2bi1tZXJnZWluZm8tcHVzaC5zaApAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL3NoCisjCisjIFBvcnRpb25zIGNvcHlyaWdodCAoYykgMjAwNywgMjAwOSBTYW0gVmlsYWluCisjIFBvcnRpb25zIGNvcHlyaWdodCAoYykgMjAxMSBCcnlhbiBKYWNvYnMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXN2biBzdm4gbWVyZ2VpbmZvIHByb3BhZ2F0aW9uJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcCcgIgorCXN2bmFkbWluIGxvYWQgLXEgJyRyYXdzdm5yZXBvJyBcCisJICA8ICckVEVTVF9ESVJFQ1RPUlkvdDkxNjEvYnJhbmNoZXMuZHVtcCcgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgc3ZubWVyZ2UgXAorCSAgLVQgdHJ1bmsgLWIgYnJhbmNoZXMgJyRzdm5yZXBvJyAmJgorCWdpdCBzdm4gZmV0Y2ggLS1hbGwKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb3BhZ2F0ZSBtZXJnZSBpbmZvcm1hdGlvbicgJworCWdpdCBjb25maWcgc3ZuLnB1c2htZXJnZWluZm8geWVzICYmCisJZ2l0IGNoZWNrb3V0IHN2bmIxICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgc3ZuYjIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHN2bjptZXJnZWluZm8nICcKKwltZXJnZWluZm89JChzdm5fY21kIHByb3BnZXQgc3ZuOm1lcmdlaW5mbyAiJHN2bnJlcG8iL2JyYW5jaGVzL3N2bmIxKQorCXRlc3QgIiRtZXJnZWluZm8iID0gIi9icmFuY2hlcy9zdm5iMjozLDgiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBhbm90aGVyIGJyYW5jaCcgJworCWdpdCBtZXJnZSAtLW5vLWZmIHN2bmIzICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBwcmltYXJ5IHBhcmVudCBtZXJnZWluZm8gcmVzcGVjdGVkJyAnCisJbWVyZ2VpbmZvPSQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptZXJnZWluZm8gIiRzdm5yZXBvIi9icmFuY2hlcy9zdm5iMSkKKwl0ZXN0ICIkbWVyZ2VpbmZvIiA9ICIvYnJhbmNoZXMvc3ZuYjI6Myw4CisvYnJhbmNoZXMvc3ZuYjM6NCw5IgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZXhpc3RpbmcgbWVyZ2UnICcKKwlnaXQgbWVyZ2UgLS1uby1mZiBzdm5iNCAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2sgYm90aCBwYXJlbnRzJyBtZXJnZWluZm8gcmVzcGVjdGVkIiAnCisJbWVyZ2VpbmZvPSQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptZXJnZWluZm8gIiRzdm5yZXBvIi9icmFuY2hlcy9zdm5iMSkKKwl0ZXN0ICIkbWVyZ2VpbmZvIiA9ICIvYnJhbmNoZXMvc3ZuYjI6Myw4CisvYnJhbmNoZXMvc3ZuYjM6NCw5CisvYnJhbmNoZXMvc3ZuYjQ6NS02LDEwLTEyCisvYnJhbmNoZXMvc3ZuYjU6NiwxMSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgZnVydGhlciBjb21taXRzIHRvIGJyYW5jaCcgJworCWdpdCBjaGVja291dCBzdm5iMiAmJgorCXRvdWNoIG5ld2IyZmlsZSAmJgorCWdpdCBhZGQgbmV3YjJmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibGF0ZXIgYjIgY29tbWl0IiAmJgorCXRvdWNoIG5ld2IyZmlsZS0yICYmCisJZ2l0IGFkZCBuZXdiMmZpbGUtMiAmJgorCWdpdCBjb21taXQgLW0gImxhdGVyIGIyIGNvbW1pdCAyIiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kIGZvcndhcmQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgc3ZuYjEgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBzdm5iMiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbmV3IG1lcmdlaW5mbyBhZGRlZCcgJworCW1lcmdlaW5mbz0kKHN2bl9jbWQgcHJvcGdldCBzdm46bWVyZ2VpbmZvICIkc3ZucmVwbyIvYnJhbmNoZXMvc3ZuYjEpCisJdGVzdCAiJG1lcmdlaW5mbyIgPSAiL2JyYW5jaGVzL3N2bmIyOjMsOCwxNi0xNworL2JyYW5jaGVzL3N2bmIzOjQsOQorL2JyYW5jaGVzL3N2bmI0OjUtNiwxMC0xMgorL2JyYW5jaGVzL3N2bmI1OjYsMTEiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWludGVncmF0aW9uIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IHN2bmI0ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgc3ZuYjEgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHJlaW50ZWdyYXRpb24gbWVyZ2VpbmZvJyAnCisJbWVyZ2VpbmZvPSQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptZXJnZWluZm8gIiRzdm5yZXBvIi9icmFuY2hlcy9zdm5iNCkKKwl0ZXN0ICIkbWVyZ2VpbmZvIiA9ICIvYnJhbmNoZXMvc3ZuYjE6Mi00LDctOSwxMy0xOAorL2JyYW5jaGVzL3N2bmIyOjMsOCwxNi0xNworL2JyYW5jaGVzL3N2bmIzOjQsOQorL2JyYW5jaGVzL3N2bmI0OjUtNiwxMC0xMgorL2JyYW5jaGVzL3N2bmI1OjYsMTEiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGEgbWVyZ2UgYXQgdGhlIHRvcCBvZiBhIHN0YWNrJyAnCisJZ2l0IGNoZWNrb3V0IHN2bmIxICYmCisJdG91Y2ggYW5vdGhlcmZpbGUgJiYKKwlnaXQgYWRkIGFub3RoZXJmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYSBjb21taXQiICYmCisJZ2l0IG1lcmdlIHN2bmI0ICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjEvYnJhbmNoZXMuZHVtcCBiL3QvdDkxNjEvYnJhbmNoZXMuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjFjM2U3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2MS9icmFuY2hlcy5kdW1wCkBAIC0wLDAgKzEsMzc0IEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiAxZWYwODU1My1mMmQxLTQ1ZGYtYjM4Yy0xOWFmNmI3YzkyNmQKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDg6MDIuOTQxMzg0WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE0CitDb250ZW50LWxlbmd0aDogMTE0CisKK0sgNworc3ZuOmxvZworViAxMgorQmFzZSBjb21taXQKKworSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjA4OjI3LjIwNTA2MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTkKK0NyZWF0ZSBicmFuY2ggc3ZuYjEKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjowOTo0My42MjgxMzdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDE5CitDcmVhdGUgYnJhbmNoIHN2bmIyCitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDk6NDYuMzM5OTMwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxOQorQ3JlYXRlIGJyYW5jaCBzdm5iMworSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjA5OjQ5LjM5NDUxNVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmIzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTkKK0NyZWF0ZSBicmFuY2ggc3ZuYjQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjowOTo1NC4xMTQ2MDdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iNAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDE5CitDcmVhdGUgYnJhbmNoIHN2bmI1CitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDk6NTguNjAyNjIzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjUKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNworUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA5CitiMSBjb21taXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMDoyMC4yOTIzNjlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMS9iMWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA5CitiMiBjb21taXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMDozOC40MjkxOTlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMi9iMmZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA5CitiMyBjb21taXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMDo1Mi44NDMwMjNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMy9iM2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMTAKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgOQorYjQgY29tbWl0CitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MTE6MTcuNDg5ODcwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjQvYjRmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorVGV4dC1jb250ZW50LXNoYTE6IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDExCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDkKK2I1IGNvbW1pdAorSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjExOjMyLjI3NzQwNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI1L2I1ZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK1RleHQtY29udGVudC1zaGExOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5CitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAxMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTkyCitDb250ZW50LWxlbmd0aDogMTkyCisKK0sgNworc3ZuOmxvZworViA5MAorTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnc3ZuYjUnIGludG8gSEVBRAorCisqIHN2bmI1OgorICBiNSBjb21taXQKKyAgQ3JlYXRlIGJyYW5jaCBzdm5iNQorSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjExOjU0LjI3NDcyMloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDIxCisvYnJhbmNoZXMvc3ZuYjU6NiwxMQorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI0L2I1ZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK1RleHQtY29udGVudC1zaGExOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5CitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKwpkaWZmIC0tZ2l0IGEvdC90OTE2Mi1naXQtc3ZuLWRjb21taXQtaW50ZXJhY3RpdmUuc2ggYi90L3Q5MTYyLWdpdC1zdm4tZGNvbW1pdC1pbnRlcmFjdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzhkOWZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2Mi1naXQtc3ZuLWRjb21taXQtaW50ZXJhY3RpdmUuc2gKQEAgLTAsMCArMSw2NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMSBGcsOpZMOpcmljIEhlaXR6bWFubgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGRjb21taXQgLS1pbnRlcmFjdGl2ZSBzZXJpZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJc3ZuX2NtZCBta2RpciAtbSJta2RpciB0ZXN0LWludGVyYWN0aXZlIiAiJHN2bnJlcG8vdGVzdC1pbnRlcmFjdGl2ZSIgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwby90ZXN0LWludGVyYWN0aXZlIiB0ZXN0LWludGVyYWN0aXZlICYmCisJY2QgdGVzdC1pbnRlcmFjdGl2ZSAmJgorCXRvdWNoIGZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tImZvbzogZmlyc3QgY29tbWl0IiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5zd2VyczogeSBbXG5dIHllcycgJworCSgKKwkJZWNobyAiY2hhbmdlICMxIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzEiICYmCisJCWVjaG8gImNoYW5nZSAjMiIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMyIiAmJgorCQllY2hvICJjaGFuZ2UgIzMiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMyIgJiYKKwkJKCBlY2hvICJ5CisKK3kiIHwgR0lUX1NWTl9OT1RUWT0xIGdpdCBzdm4gZGNvbW1pdCAtLWludGVyYWN0aXZlICkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9naXQtc3ZuKQorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fuc3dlcnM6IHllcyB5ZXMgbm8nICcKKwkoCisJCWVjaG8gImNoYW5nZSAjMSIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMxIiAmJgorCQllY2hvICJjaGFuZ2UgIzIiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMiIgJiYKKwkJZWNobyAiY2hhbmdlICMzIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzMiICYmCisJCSggZWNobyAieWVzCit5ZXMKK25vIiB8IEdJVF9TVk5fTk9UVFk9MSBnaXQgc3ZuIGRjb21taXQgLS1pbnRlcmFjdGl2ZSApICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXl4pID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvZ2l0LXN2bikgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCByZW1vdGVzL2dpdC1zdm4KKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbnN3ZXJzOiB5ZXMgcXVpdCcgJworCSgKKwkJZWNobyAiY2hhbmdlICMxIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzEiICYmCisJCWVjaG8gImNoYW5nZSAjMiIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMyIiAmJgorCQllY2hvICJjaGFuZ2UgIzMiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMyIgJiYKKwkJKCBlY2hvICJ5ZXMKK3F1aXQiIHwgR0lUX1NWTl9OT1RUWT0xIGdpdCBzdm4gZGNvbW1pdCAtLWludGVyYWN0aXZlICkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF5eXikgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9naXQtc3ZuKSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHJlbW90ZXMvZ2l0LXN2bgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fuc3dlcnM6IGFsbCcgJworCSgKKwkJZWNobyAiY2hhbmdlICMxIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzEiICYmCisJCWVjaG8gImNoYW5nZSAjMiIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMyIiAmJgorCQllY2hvICJjaGFuZ2UgIzMiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMyIgJiYKKwkJKCBlY2hvICJhbGwiIHwgR0lUX1NWTl9OT1RUWT0xIGdpdCBzdm4gZGNvbW1pdCAtLWludGVyYWN0aXZlICkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9naXQtc3ZuKSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHJlbW90ZXMvZ2l0LXN2bgorCSkKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2My1naXQtc3ZuLXJlc2V0LWNsZWFycy1jYWNoZXMuc2ggYi90L3Q5MTYzLWdpdC1zdm4tcmVzZXQtY2xlYXJzLWNhY2hlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDRjNjYyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2My1naXQtc3ZuLXJlc2V0LWNsZWFycy1jYWNoZXMuc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBQZXRlciBCYXVtYW5uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcmVzZXQgY2xlYXJzIG1lbW9pemVkIGNhY2hlcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCitzdm5fdmVyPSIkKHN2biAtLXZlcnNpb24gLS1xdWlldCkiCitjYXNlICRzdm5fdmVyIGluCiswLiogfCAxLlswLTRdLiopCisJc2tpcF9hbGw9InNraXBwaW5nIGdpdC1zdm4gdGVzdCAtIFNWTiB0b28gb2xkICgkc3ZuX3ZlcikiCisJdGVzdF9kb25lCisJOzsKK2VzYWMKKworIyAuLi4gYSAgLSAgYiAtIG0gICA8LSB0cnVuaworIyAgICAgIFwgICAgICAgLworIyAgICAgICAuLi4gYyAgICAgICA8LSBicmFuY2gxCisjCisjIFNWTiBDb21taXRzIG5vdCBpbnRlcmVzdGluZyBmb3IgdGhpcyB0ZXN0IGFyZSBhYmJyZXZpYXRlZCB3aXRoICIuLi4iCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHNvdXJjZSBzdm4gcmVwbycgJworCXN2bl9jbWQgbWtkaXIgLW0gImNyZWF0ZSB0cnVuayIgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgbWtkaXIgLW0gImNyZWF0ZSBicmFuY2hlcyIgIiRzdm5yZXBvL2JyYW5jaGVzIiAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRTVk5fVFJFRSIgJiYKKwkJdG91Y2ggZm9vICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYSIgJiYKKwkJc3ZuX2NtZCBjcCAtbSBicmFuY2ggIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXRvdWNoIGJhciAmJgorCQlzdm5fY21kIGFkZCBiYXIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYiAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL3RydW5rICYmCisJCXRvdWNoIGJheiAmJgorCQlzdm5fY21kIGFkZCBiYXogJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYyAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbWVyZ2UgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJtIgorCSkgJiYKKwlybSAtcmYgIiRTVk5fVFJFRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdG8gbWVyZ2UtYmFzZSAoYSknICcKKwlnaXQgc3ZuIGluaXQgLXMgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggLS1yZXZpc2lvbiBCQVNFOjMKKycKKworIyBnaXQgc3ZuIHJlYmFzZSBsb29zZXMgdGhlIG1lcmdlIGNvbW1pdAorIworIyAuLi4gYSAgLSAgYiAtIG0gIDwtIHRydW5rCisjICAgICAgXAorIyAgICAgICAuLi4gYworIwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGxvb3NlcyBTVk4gbWVyZ2UgKG0pJyAnCisJZ2l0IHN2biByZWJhc2UgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJdGVzdCAxID0gJChnaXQgY2F0LWZpbGUgLXAgbWFzdGVyfGdyZXAgcGFyZW50fHdjIC1sKQorJworCisjIGdpdCBzdm4gZmV0Y2ggY3JlYXRlcyBjb3JyZWN0IGhpc3Rvcnkgd2l0aCBtZXJnZSBjb21taXQKKyMKKyMgLi4uIGEgIC0gIGIgLSBtICA8LSB0cnVuaworIyAgICAgIFwgICAgICAgLworIyAgICAgICAuLi4gYyAgICAgIDwtIGJyYW5jaDEKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IGFuZCBmZXRjaCBnZXRzIHRoZSBTVk4gbWVyZ2UgKG0pIGNvcnJlY3RseScgJworCWdpdCBzdm4gcmVzZXQgLXIgMyAmJgorCWdpdCByZXNldCAtLWhhcmQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJdGVzdCAyID0gJChnaXQgY2F0LWZpbGUgLXAgdHJ1bmt8Z3JlcCBwYXJlbnR8d2MgLWwpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2NC1naXQtc3ZuLWRjb21taXQtY29uY3VycmVudC5zaCBiL3QvdDkxNjQtZ2l0LXN2bi1kY29tbWl0LWNvbmN1cnJlbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDg0NjRkNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjQtZ2l0LXN2bi1kY29tbWl0LWNvbmN1cnJlbnQuc2gKQEAgLTAsMCArMSwyMTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgUm9iZXJ0IEx1YmVyZGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nY29uY3VycmVudCBnaXQgc3ZuIGRjb21taXQnCisuIC4vbGliLWdpdC1zdm4uc2gKKworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8iIHdvcmsuc3ZuICYmCisJKAorCQljZCB3b3JrLnN2biAmJgorCQllY2hvID5maWxlICYmIGVjaG8gPiBhdXRvX3VwZGF0ZWRfZmlsZQorCQlzdm5fY21kIGFkZCBmaWxlIGF1dG9fdXBkYXRlZF9maWxlICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIKKwkpICYmCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8iIHdvcmstYXV0by1jb21taXRzLnN2bgorJworTj0wCituZXh0X04oKQoreworCU49JCgoICROICsgMSApKQorfQorCisjIFNldHVwIFNWTiByZXBvc2l0b3J5IGhvb2tzIHRvIGVtdWxhdGUgU1ZOIGZhaWx1cmVzIG9yIGNvbmN1cnJlbnQgY29tbWl0cworIyBUaGUgZnVuY3Rpb24gYWRkcworIyBlaXRoZXIgcHJlLWNvbW1pdCAgaG9vaywgd2hpY2ggY2F1c2VzIFNWTiBjb21taXQgZ2l2ZW4gaW4gc2Vjb25kIGFyZ3VtZW50CisjICAgICAgICAgICAgICAgICAgICB0byBmYWlsCisjIG9yICAgICBwb3N0LWNvbW1pdCBob29rLCB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbW1pdCAoYSBuZXcgbGluZSBhZGRlZCB0bworIyAgICAgICAgICAgICAgICAgICAgYXV0b191cGRhdGVkX2ZpbGUpIGFmdGVyIGdpdmVuIFNWTiBjb21taXQKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IGNvbnRhaW5zIGEgdHlwZSBvZiB0aGUgaG9vaworIyBUaGUgc2Vjb25kIGFyZ3VtZW50IGNvbnRhaW5zIGEgbnVtYmVyIChub3QgU1ZOIHJldmlzaW9uKSBvZiBjb21taXQKKyMgdGhlIGhvb2sgc2hvdWxkIGJlIGFwcGxpZWQgZm9yIChlYWNoIHRpbWUgdGhlIGhvb2sgaXMgcnVuLCB0aGUgZ2l2ZW4KKyMgbnVtYmVyIGlzIGRlY3JlYXNlZCBieSBvbmUgdW50aWwgaXQgZ2V0cyAwLCBpbiB3aGljaCBjYXNlIHRoZSBob29rCisjIHdpbGwgZXhlY3V0ZSBpdHMgcmVhbCBhY3Rpb24pCitzZXR1cF9ob29rKCkKK3sKKwlob29rX3R5cGU9IiQxIiAgIyAicHJlLWNvbW1pdCIgb3IgInBvc3QtY29tbWl0IgorCXNraXBfcmV2cz0iJDIiCisJWyAiJGhvb2tfdHlwZSIgPSAicHJlLWNvbW1pdCIgXSB8fAorCQlbICIkaG9va190eXBlIiA9ICJwb3N0LWNvbW1pdCIgXSB8fAorCQl7IGVjaG8gIkVSUk9SOiBpbnZhbGlkIGFyZ3VtZW50ICgkaG9va190eXBlKSIgXAorCQkJInBhc3NlZCB0byBzZXR1cF9ob29rIiA+JjIgOyByZXR1cm4gMTsgfQorCWVjaG8gImNudD0kc2tpcF9yZXZzIiA+ICIkaG9va190eXBlLWNvdW50ZXIiCisJcm0gLWYgIiRyYXdzdm5yZXBvL2hvb2tzLyIqLWNvbW1pdCAjIGRyb3AgcHJldmlvdXMgaG9va3MKKwlob29rPSIkcmF3c3ZucmVwby9ob29rcy8kaG9va190eXBlIgorCWNhdCA+ICIkaG9vayIgPDwtICdFT0YxJworCQkjIS9iaW4vc2gKKwkJc2V0IC1lCisJCWNkICIkMS8uLiIgICMgIiQxIiBpcyByZXBvc2l0b3J5IGxvY2F0aW9uCisJCWV4ZWMgPj4gc3ZuLWhvb2subG9nIDI+JjEKKwkJaG9vaz0iJChiYXNlbmFtZSAiJDAiKSIKKwkJZWNobyAiKioqIEV4ZWN1dGluZyAkaG9vayAkQCIKKwkJc2V0IC14CisJCS4gLi8kaG9vay1jb3VudGVyCisJCWNudD0iJCgoJGNudCAtIDEpKSIKKwkJZWNobyAiY250PSRjbnQiID4gLi8kaG9vay1jb3VudGVyCisJCVsgIiRjbnQiID0gIjAiIF0gfHwgZXhpdCAwCitFT0YxCisJaWYgWyAiJGhvb2tfdHlwZSIgPSAicHJlLWNvbW1pdCIgXTsgdGhlbgorCQllY2hvICJlY2hvICdjb21taXQgZGlzYWxsb3dlZCcgPiYyOyBleGl0IDEiID4+IiRob29rIgorCWVsc2UKKwkJZWNobyAiUEFUSD1cIiRQQVRIXCI7IGV4cG9ydCBQQVRIIiA+PiIkaG9vayIKKwkJZWNobyAic3ZuY29uZj1cIiRzdm5jb25mXCIiID4+IiRob29rIgorCQljYXQgPj4iJGhvb2siIDw8LSAnRU9GMicKKwkJCWNkIHdvcmstYXV0by1jb21taXRzLnN2bgorCQkJc3ZuIHVwIC0tY29uZmlnLWRpciAiJHN2bmNvbmYiCisJCQllY2hvICIkJCIgPj4gYXV0b191cGRhdGVkX2ZpbGUKKwkJCXN2biBjb21taXQgLS1jb25maWctZGlyICIkc3ZuY29uZiIgXAorCQkJCS1tICJhdXRvLWNvbW1pdHRpbmcgY29uY3VycmVudCBjaGFuZ2UiCisJCQlleGl0IDAKK0VPRjIKKwlmaQorCWNobW9kIDc1NSAiJGhvb2siCit9CisKK2NoZWNrX2NvbnRlbnRzKCkKK3sKKwlnaXRkaXI9IiQxIgorCShjZCAuLi93b3JrLnN2biAmJiBzdm5fY21kIHVwKSAmJgorCXRlc3RfY21wIGZpbGUgLi4vd29yay5zdm4vZmlsZSAmJgorCXRlc3RfY21wIGF1dG9fdXBkYXRlZF9maWxlIC4uL3dvcmsuc3ZuL2F1dG9fdXBkYXRlZF9maWxlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIHBvc3QtY29tbWl0IGhvb2sgY3JlYXRlcyBhIGNvbmN1cnJlbnQgY29tbWl0JyAnCisJc2V0dXBfaG9vayBwb3N0LWNvbW1pdCAxICYmCisJKAorCQljZCB3b3JrLnN2biAmJgorCQljcCBhdXRvX3VwZGF0ZWRfZmlsZSBhdV9maWxlX3NhdmVkICYmCisJCWVjaG8gMSA+PiBmaWxlICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjaGFuZ2luZyBmaWxlIiAmJgorCQlzdm5fY21kIHVwICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3RfY21wIGF1dG9fdXBkYXRlZF9maWxlIGF1X2ZpbGVfc2F2ZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIHByZS1jb21taXQgaG9vayBmYWlscycgJworCXNldHVwX2hvb2sgcHJlLWNvbW1pdCAyICYmCisJKAorCQljZCB3b3JrLnN2biAmJgorCQllY2hvIDIgPj4gZmlsZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY2hhbmdpbmcgZmlsZSBvbmNlIGFnYWluIiAmJgorCQllY2hvIDMgPj4gZmlsZSAmJgorCQl0ZXN0X211c3RfZmFpbCBzdm5fY21kIGNvbW1pdCAtbSAidGhpcyBjb21taXQgc2hvdWxkIGZhaWwiICYmCisJCXN2bl9jbWQgcmV2ZXJ0IGZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgZXJyb3IgaGFuZGxpbmcnICcKKwlzZXR1cF9ob29rIHByZS1jb21taXQgMiAmJgorCW5leHRfTiAmJiBnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgd29yayROLmdpdCAmJgorCSgKKwkJY2Qgd29yayROLmdpdCAmJgorCQllY2hvIDEgPj4gZmlsZSAmJiBnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4xIiAmJgorCQllY2hvIDIgPj4gZmlsZSAmJiBnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4yIiAmJgorCQllY2hvIDMgPj4gZmlsZSAmJiBnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4zIiAmJgorCQkjIHNob3VsZCBmYWlsIHRvIGRjb21taXQgMm5kIGFuZCAzcmQgY2hhbmdlCisJCSMgYnV0IHN0aWxsIHNob3VsZCBsZWF2ZSB0aGUgcmVwb3NpdG9yeSBpbiByZWFzb25hYmxlIHN0YXRlCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdCAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCQlnaXQgc2hvdyBIRUFEfjIgICB8IGdyZXAgLXEgZ2l0LXN2bi1pZCAmJgorCQkhIGdpdCBzaG93IEhFQUR+MSB8IGdyZXAgLXEgZ2l0LXN2bi1pZCAmJgorCQkhIGdpdCBzaG93IEhFQUQgICB8IGdyZXAgLXEgZ2l0LXN2bi1pZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBjb25jdXJyZW50IGNoYW5nZSBpbiBub24tY2hhbmdlZCBmaWxlJyAnCisJc2V0dXBfaG9vayBwb3N0LWNvbW1pdCAyICYmCisJbmV4dF9OICYmIGdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB3b3JrJE4uZ2l0ICYmCisJKAorCQljZCB3b3JrJE4uZ2l0ICYmCisJCWVjaG8gMSA+PiBmaWxlICYmIGdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjEiICYmCisJCWVjaG8gMiA+PiBmaWxlICYmIGdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjIiICYmCisJCWVjaG8gMyA+PiBmaWxlICYmIGdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjMiICYmCisJCSMgc2hvdWxkIHJlYmFzZSBhbmQgbGVhdmUgdGhlIHJlcG9zaXRvcnkgaW4gcmVhc29uYWJsZSBzdGF0ZQorCQlnaXQgc3ZuIGRjb21taXQgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwkJY2hlY2tfY29udGVudHMgJiYKKwkJZ2l0IHNob3cgSEVBRH4zIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCWdpdCBzaG93IEhFQUR+MiB8IGdyZXAgLXEgZ2l0LXN2bi1pZCAmJgorCQlnaXQgc2hvdyBIRUFEfjEgfCBncmVwIC1xIGF1dG8tY29tbWl0dGluZyAmJgorCQlnaXQgc2hvdyBIRUFEICAgfCBncmVwIC1xIGdpdC1zdm4taWQKKwkpCisnCisKKyMgQW4gdXRpbGl0eSBmdW5jdGlvbiB1c2VkIGluIHRoZSBmb2xsb3dpbmcgdGVzdAorZGVsZXRlX2ZpcnN0X2xpbmUoKQoreworCWZpbGU9IiQxIiAmJgorCXNlZCAxZCA8ICIkZmlsZSIgPiAiJHtmaWxlfS50bXAiICYmCisJcm0gIiRmaWxlIiAmJgorCW12ICIke2ZpbGV9LnRtcCIgIiRmaWxlIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGNvbmN1cnJlbnQgbm9uLWNvbmZsaWN0aW5nIGNoYW5nZScgJworCXNldHVwX2hvb2sgcG9zdC1jb21taXQgMiAmJgorCW5leHRfTiAmJiBnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgd29yayROLmdpdCAmJgorCSgKKwkJY2Qgd29yayROLmdpdCAmJgorCQljYXQgZmlsZSA+PiBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMSIgJiYKKwkJZGVsZXRlX2ZpcnN0X2xpbmUgYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjIiICYmCisJCWRlbGV0ZV9maXJzdF9saW5lIGF1dG9fdXBkYXRlZF9maWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4zIiAmJgorCQkjIHNob3VsZCByZWJhc2UgYW5kIGxlYXZlIHRoZSByZXBvc2l0b3J5IGluIHJlYXNvbmFibGUgc3RhdGUKKwkJZ2l0IHN2biBkY29tbWl0ICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJCWNoZWNrX2NvbnRlbnRzICYmCisJCWdpdCBzaG93IEhFQUR+MyB8IGdyZXAgLXEgZ2l0LXN2bi1pZCAmJgorCQlnaXQgc2hvdyBIRUFEfjIgfCBncmVwIC1xIGdpdC1zdm4taWQgJiYKKwkJZ2l0IHNob3cgSEVBRH4xIHwgZ3JlcCAtcSBhdXRvLWNvbW1pdHRpbmcgJiYKKwkJZ2l0IHNob3cgSEVBRCAgIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IC0tbm8tcmViYXNlIGNvbmN1cnJlbnQgbm9uLWNvbmZsaWN0aW5nIGNoYW5nZScgJworCXNldHVwX2hvb2sgcG9zdC1jb21taXQgMiAmJgorCW5leHRfTiAmJiBnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgd29yayROLmdpdCAmJgorCSgKKwkJY2Qgd29yayROLmdpdCAmJgorCQljYXQgZmlsZSA+PiBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMSIgJiYKKwkJZGVsZXRlX2ZpcnN0X2xpbmUgYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjIiICYmCisJCWRlbGV0ZV9maXJzdF9saW5lIGF1dG9fdXBkYXRlZF9maWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4zIiAmJgorCQkjIHNob3VsZCBmYWlsIGFzIHJlYmFzZSBpcyBuZWVkZWQKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0IC0tbm8tcmViYXNlICYmCisJCSMgYnV0IHNob3VsZCBsZWF2ZSBIRUFEIHVuY2hhbmdlZAorCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCQkhIGdpdCBzaG93IEhFQUR+MiB8IGdyZXAgLXEgZ2l0LXN2bi1pZCAmJgorCQkhIGdpdCBzaG93IEhFQUR+MSB8IGdyZXAgLXEgZ2l0LXN2bi1pZCAmJgorCQkhIGdpdCBzaG93IEhFQUQgICB8IGdyZXAgLXEgZ2l0LXN2bi1pZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBmYWlscyBvbiBjb25jdXJyZW50IGNvbmZsaWN0aW5nIGNoYW5nZScgJworCXNldHVwX2hvb2sgcG9zdC1jb21taXQgMSAmJgorCW5leHRfTiAmJiBnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgd29yayROLmdpdCAmJgorCSgKKwkJY2Qgd29yayROLmdpdCAmJgorCQllY2hvIGEgPj4gZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMSIgJiYKKwkJZWNobyBiID4+IGF1dG9fdXBkYXRlZF9maWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4yIiAmJgorCQllY2hvIGMgPj4gYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjMiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdCAmJiAjIHJlYmFzZSBzaG91bGQgZmFpbAorCQl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTY1LWdpdC1zdm4tZmV0Y2gtbWVyZ2UtYnJhbmNoLW9mLWJyYW5jaC5zaCBiL3QvdDkxNjUtZ2l0LXN2bi1mZXRjaC1tZXJnZS1icmFuY2gtb2YtYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEzYWU3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTY1LWdpdC1zdm4tZmV0Y2gtbWVyZ2UtYnJhbmNoLW9mLWJyYW5jaC5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIFN0ZXZlbiBXYWx0ZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtZXJnZSBkZXRlY3Rpb24nCisuIC4vbGliLWdpdC1zdm4uc2gKKworc3ZuX3Zlcj0iJChzdm4gLS12ZXJzaW9uIC0tcXVpZXQpIgorY2FzZSAkc3ZuX3ZlciBpbgorMC4qIHwgMS5bMC00XS4qKQorCXNraXBfYWxsPSJza2lwcGluZyBnaXQtc3ZuIHRlc3QgLSBTVk4gdG9vIG9sZCAoJHN2bl92ZXIpIgorCXRlc3RfZG9uZQorCTs7Citlc2FjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc291cmNlIHN2biByZXBvJyAnCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIG1rZGlyIC1tIHggIiRzdm5yZXBvIi9icmFuY2hlcyAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRTVk5fVFJFRSIgJiYKKwkJdG91Y2ggZm9vICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJCXN2bl9jbWQgY3AgLW0gYnJhbmNoICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQl0b3VjaCBiYXIgJiYKKwkJc3ZuX2NtZCBhZGQgYmFyICYmCisJCXN2bl9jbWQgY29tbWl0IC1tIGJyYW5jaDEgJiYKKwkJc3ZuX2NtZCBjcCAtbSBicmFuY2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJdG91Y2ggYmF6ICYmCisJCXN2bl9jbWQgYWRkIGJheiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSBicmFuY2gyICYmCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwkJdG91Y2ggYmFyMiAmJgorCQlzdm5fY21kIGFkZCBiYXIyICYmCisJCXN2bl9jbWQgY29tbWl0IC1tIHRydW5rICYmCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm5fY21kIG1lcmdlICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1lcmdlIHRydW5rIgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL3RydW5rICYmCisJCXN2bl9jbWQgbWVyZ2UgLS1yZWludGVncmF0ZSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1lcmdlIGJyYW5jaDIiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbycgJworCWdpdCBzdm4gaW5pdCAtcyAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgY29tbWl0JyAneD0kKGdpdCByZXYtcGFyc2UgSEVBRF4yKSAmJgorCXk9JChnaXQgcmV2LXBhcnNlIGJyYW5jaDIpICYmCisJdGVzdCAieCR4IiA9ICJ4JHkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2Ni1naXQtc3ZuLWZldGNoLW1lcmdlLWJyYW5jaC1vZi1icmFuY2gyLnNoIGIvdC90OTE2Ni1naXQtc3ZuLWZldGNoLW1lcmdlLWJyYW5jaC1vZi1icmFuY2gyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmMGVjMGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTY2LWdpdC1zdm4tZmV0Y2gtbWVyZ2UtYnJhbmNoLW9mLWJyYW5jaDIuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBTdGV2ZW4gV2FsdGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbWVyZ2UgZGV0ZWN0aW9uJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3N2bl92ZXI9IiQoc3ZuIC0tdmVyc2lvbiAtLXF1aWV0KSIKK2Nhc2UgJHN2bl92ZXIgaW4KKzAuKiB8IDEuWzAtNF0uKikKKwlza2lwX2FsbD0ic2tpcHBpbmcgZ2l0LXN2biB0ZXN0IC0gU1ZOIHRvbyBvbGQgKCRzdm5fdmVyKSIKKwl0ZXN0X2RvbmUKKwk7OworZXNhYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHNvdXJjZSBzdm4gcmVwbycgJworCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvYnJhbmNoZXMgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkU1ZOX1RSRUUiICYmCisJCXRvdWNoIGZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCQlzdm5fY21kIGNwIC1tIGJyYW5jaCAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJdG91Y2ggYmFyICYmCisJCXN2bl9jbWQgYWRkIGJhciAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSBicmFuY2gxICYmCisJCXN2bl9jbWQgY3AgLW0gYnJhbmNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXRvdWNoIGJheiAmJgorCQlzdm5fY21kIGFkZCBiYXogJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYnJhbmNoMiAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL3RydW5rICYmCisJCXN2bl9jbWQgbWVyZ2UgLS1yZWludGVncmF0ZSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1lcmdlIGJyYW5jaDIiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbycgJworCWdpdCBzdm4gaW5pdCAtcyAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgY29tbWl0JyAneD0kKGdpdCByZXYtcGFyc2UgSEVBRF4yKSAmJgorCXk9JChnaXQgcmV2LXBhcnNlIGJyYW5jaDIpICYmCisJdGVzdCAieCR4IiA9ICJ4JHkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoIGIvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1OWJlOWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MjAwLWdpdC1jdnNleHBvcnRjb21taXQuc2gKQEAgLTAsMCArMSwzMzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIFJvYmluIFJvc2VuYmVyZworIwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBleHBvcnQgb2YgY29tbWl0cyB0byBDVlMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcHJlcmVxLUZJTEVNT0RFLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBjdnNleHBvcnRjb21taXQgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK2N2cyA+L2Rldi9udWxsIDI+JjEKK2lmIHRlc3QgJD8gLW5lIDEKK3RoZW4KKyAgICBza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IGN2c2V4cG9ydGNvbW1pdCB0ZXN0cywgY3ZzIG5vdCBmb3VuZCcKKyAgICB0ZXN0X2RvbmUKK2ZpCisKK0NWU1JPT1Q9JFBXRC9jdnNyb290CitDVlNXT1JLPSRQV0QvY3Zzd29yaworR0lUX0RJUj0kUFdELy5naXQKK2V4cG9ydCBDVlNST09UIENWU1dPUksgR0lUX0RJUgorCitybSAtcmYgIiRDVlNST09UIiAiJENWU1dPUksiCitta2RpciAiJENWU1JPT1QiICYmCitjdnMgaW5pdCAmJgorY3ZzIC1RIGNvIC1kICIkQ1ZTV09SSyIgLiAmJgorZWNobyA+ZW1wdHkgJiYKK2dpdCBhZGQgZW1wdHkgJiYKK2dpdCBjb21taXQgLXEgLWEgLW0gIkluaXRpYWwiIDI+L2Rldi9udWxsIHx8CitleGl0IDEKKworY2hlY2tfZW50cmllcyAoKSB7CisJIyAkMSA9PSBkaXJlY3RvcnksICQyID09IGV4cGVjdGVkCisJZ3JlcCAnXi8nICIkMS9DVlMvRW50cmllcyIgfCBzb3J0IHwgY3V0IC1kLyAtZjIsMyw1ID5hY3R1YWwKKwlpZiB0ZXN0IC16ICIkMiIKKwl0aGVuCisJCT5leHBlY3RlZAorCWVsc2UKKwkJcHJpbnRmICclc1xuJyAiJDIiIHwgdHIgJ3wnICdcMDEyJyA+ZXhwZWN0ZWQKKwlmaQorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnTmV3IGZpbGUnIFwKKyAgICAnbWtkaXIgQSBCIEMgRCBFIEYgJiYKKyAgICAgZWNobyBoZWxsbzEgPkEvbmV3ZmlsZTEudHh0ICYmCisgICAgIGVjaG8gaGVsbG8yID5CL25ld2ZpbGUyLnR4dCAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBDL25ld2ZpbGUzLnBuZyAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBEL25ld2ZpbGU0LnBuZyAmJgorICAgICBnaXQgYWRkIEEvbmV3ZmlsZTEudHh0ICYmCisgICAgIGdpdCBhZGQgQi9uZXdmaWxlMi50eHQgJiYKKyAgICAgZ2l0IGFkZCBDL25ld2ZpbGUzLnBuZyAmJgorICAgICBnaXQgYWRkIEQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gIlRlc3Q6IE5ldyBmaWxlIiAmJgorICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgIChjZCAiJENWU1dPUksiICYmCisgICAgIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkICYmCisgICAgIGNoZWNrX2VudHJpZXMgQSAibmV3ZmlsZTEudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgQiAibmV3ZmlsZTIudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgQyAibmV3ZmlsZTMucG5nLzEuMS8ta2IiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRCAibmV3ZmlsZTQucG5nLzEuMS8ta2IiICYmCisgICAgIHRlc3RfY21wIEEvbmV3ZmlsZTEudHh0IC4uL0EvbmV3ZmlsZTEudHh0ICYmCisgICAgIHRlc3RfY21wIEIvbmV3ZmlsZTIudHh0IC4uL0IvbmV3ZmlsZTIudHh0ICYmCisgICAgIHRlc3RfY21wIEMvbmV3ZmlsZTMucG5nIC4uL0MvbmV3ZmlsZTMucG5nICYmCisgICAgIHRlc3RfY21wIEQvbmV3ZmlsZTQucG5nIC4uL0QvbmV3ZmlsZTQucG5nCisgICAgICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdSZW1vdmUgdHdvIGZpbGVzLCBhZGQgdHdvIGFuZCB1cGRhdGUgdHdvJyBcCisgICAgJ2VjaG8gSGVsbG8xID4+QS9uZXdmaWxlMS50eHQgJiYKKyAgICAgcm0gLWYgQi9uZXdmaWxlMi50eHQgJiYKKyAgICAgcm0gLWYgQy9uZXdmaWxlMy5wbmcgJiYKKyAgICAgZWNobyBIZWxsbzUgID5FL25ld2ZpbGU1LnR4dCAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0yLnBuZyBEL25ld2ZpbGU0LnBuZyAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBGL25ld2ZpbGU2LnBuZyAmJgorICAgICBnaXQgYWRkIEUvbmV3ZmlsZTUudHh0ICYmCisgICAgIGdpdCBhZGQgRi9uZXdmaWxlNi5wbmcgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiVGVzdDogUmVtb3ZlLCBhZGQgYW5kIHVwZGF0ZSIgJiYKKyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZCAmJgorICAgICBjaGVja19lbnRyaWVzIEEgIm5ld2ZpbGUxLnR4dC8xLjIvIiAmJgorICAgICBjaGVja19lbnRyaWVzIEIgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBDICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRCAibmV3ZmlsZTQucG5nLzEuMi8ta2IiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRSAibmV3ZmlsZTUudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgRiAibmV3ZmlsZTYucG5nLzEuMS8ta2IiICYmCisgICAgIHRlc3RfY21wIEEvbmV3ZmlsZTEudHh0IC4uL0EvbmV3ZmlsZTEudHh0ICYmCisgICAgIHRlc3RfY21wIEQvbmV3ZmlsZTQucG5nIC4uL0QvbmV3ZmlsZTQucG5nICYmCisgICAgIHRlc3RfY21wIEUvbmV3ZmlsZTUudHh0IC4uL0UvbmV3ZmlsZTUudHh0ICYmCisgICAgIHRlc3RfY21wIEYvbmV3ZmlsZTYucG5nIC4uL0YvbmV3ZmlsZTYucG5nCisgICAgICknCisKKyMgU2hvdWxkIGZhaWwgKGJ1dCBvbmx5IG9uIHRoZSBnaXQgY3ZzZXhwb3J0Y29tbWl0IHN0YWdlKQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0ZhaWwgdG8gY2hhbmdlIGJpbmFyeSBtb3JlIHRoYW4gb25lIGdlbmVyYXRpb24gb2xkJyBcCisgICAgJ2NhdCBGL25ld2ZpbGU2LnBuZyA+PkQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gImdlbmVyYXRpaW9uIDEiICYmCisgICAgIGNhdCBGL25ld2ZpbGU2LnBuZyA+PkQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gImdlbmVyYXRpb24gMiIgJiYKKyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZAorICAgICApJworCisjdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisjICAgICdGYWlsIHRvIHJlbW92ZSBiaW5hcnkgZmlsZSBtb3JlIHRoYW4gb25lIGdlbmVyYXRpb24gb2xkJyBcCisjICAgICdnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisjICAgICBjYXQgRi9uZXdmaWxlNi5wbmcgPj5EL25ld2ZpbGU0LnBuZyAmJgorIyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiZ2VuZXJhdGlvbiAyIChhZ2FpbikiICYmCisjICAgICBybSAtZiBEL25ld2ZpbGU0LnBuZyAmJgorIyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiZ2VuZXJhdGlvbiAzIiAmJgorIyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorIyAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyMgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkCisjICAgICApJworCisjIFdlIHJldXNlIHRoZSBzdGF0ZSBmcm9tIHR3byB0ZXN0cyBiYWNrIGhlcmUKKworIyBUaGlzIHRlc3QgaXMgaGVyZSBiZWNhdXNlIGEgcGF0Y2ggZm9yIG9ubHkgYmluYXJ5IGZpbGVzIHdpbGwKKyMgZmFpbCB3aXRoIGdudSBwYXRjaCwgc28gY3ZzZXhwb3J0Y29tbWl0IG11c3QgaGFuZGxlIHRoYXQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUmVtb3ZlIG9ubHkgYmluYXJ5IGZpbGVzJyBcCisgICAgJ2dpdCByZXNldCAtLWhhcmQgSEVBRF5eICYmCisgICAgIHJtIC1mIEQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gInRlc3Q6IHJlbW92ZSBvbmx5IGEgYmluYXJ5IGZpbGUiICYmCisgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgY2hlY2tfZW50cmllcyBBICJuZXdmaWxlMS50eHQvMS4yLyIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBCICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgQyAiIiAmJgorICAgICBjaGVja19lbnRyaWVzIEQgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBFICJuZXdmaWxlNS50eHQvMS4xLyIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBGICJuZXdmaWxlNi5wbmcvMS4xLy1rYiIgJiYKKyAgICAgdGVzdF9jbXAgQS9uZXdmaWxlMS50eHQgLi4vQS9uZXdmaWxlMS50eHQgJiYKKyAgICAgdGVzdF9jbXAgRS9uZXdmaWxlNS50eHQgLi4vRS9uZXdmaWxlNS50eHQgJiYKKyAgICAgdGVzdF9jbXAgRi9uZXdmaWxlNi5wbmcgLi4vRi9uZXdmaWxlNi5wbmcKKyAgICAgKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1JlbW92ZSBvbmx5IGEgdGV4dCBmaWxlJyBcCisgICAgJ3JtIC1mIEEvbmV3ZmlsZTEudHh0ICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gInRlc3Q6IHJlbW92ZSBvbmx5IGEgYmluYXJ5IGZpbGUiICYmCisgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgY2hlY2tfZW50cmllcyBBICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgQiAiIiAmJgorICAgICBjaGVja19lbnRyaWVzIEMgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBEICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRSAibmV3ZmlsZTUudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgRiAibmV3ZmlsZTYucG5nLzEuMS8ta2IiICYmCisgICAgIHRlc3RfY21wIEUvbmV3ZmlsZTUudHh0IC4uL0UvbmV3ZmlsZTUudHh0ICYmCisgICAgIHRlc3RfY21wIEYvbmV3ZmlsZTYucG5nIC4uL0YvbmV3ZmlsZTYucG5nCisgICAgICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAnTmV3IGZpbGUgd2l0aCBzcGFjZXMgaW4gZmlsZSBuYW1lJyBcCisgICAgICdta2RpciAiRyBnIiAmJgorICAgICAgZWNobyBvayB0aGVuID4iRyBnL3dpdGggc3BhY2VzLnR4dCIgJiYKKyAgICAgIGdpdCBhZGQgIkcgZy93aXRoIHNwYWNlcy50eHQiICYmIFwKKyAgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nICJHIGcvd2l0aCBzcGFjZXMucG5nIiAmJiBcCisgICAgICBnaXQgYWRkICJHIGcvd2l0aCBzcGFjZXMucG5nIiAmJgorICAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiV2l0aCBzcGFjZXMiICYmCisgICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgIGNoZWNrX2VudHJpZXMgIkcgZyIgIndpdGggc3BhY2VzLnBuZy8xLjEvLWtifHdpdGggc3BhY2VzLnR4dC8xLjEvIgorICAgICAgKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICdVcGRhdGUgZmlsZSB3aXRoIHNwYWNlcyBpbiBmaWxlIG5hbWUnIFwKKyAgICAgJ2VjaG8gT2sgdGhlbiA+PiJHIGcvd2l0aCBzcGFjZXMudHh0IiAmJgorICAgICAgY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nID4+IkcgZy93aXRoIHNwYWNlcy5wbmciICYmIFwKKyAgICAgIGdpdCBhZGQgIkcgZy93aXRoIHNwYWNlcy5wbmciICYmCisgICAgICBnaXQgY29tbWl0IC1hIC1tICJVcGRhdGUgd2l0aCBzcGFjZXMiICYmCisgICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQKKyAgICAgIGNoZWNrX2VudHJpZXMgIkcgZyIgIndpdGggc3BhY2VzLnBuZy8xLjIvLWtifHdpdGggc3BhY2VzLnR4dC8xLjIvIgorICAgICAgKScKKworIyBTb21lIGZpbGVzeXN0ZW1zIG1hbmdsZSBwYXRobmFtZXMgd2l0aCBVVEYtOCBjaGFyYWN0ZXJzIC0tCisjIGNoZWNrIGFuZCBza2lwCitpZiBwPSLDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2IiAmJgorCW1rZGlyIC1wICJ0c3QvJHAiICYmCisJZGF0ZSA+InRzdC8kcC9kYXkiICYmCisJZm91bmQ9JChmaW5kIHRzdCAtdHlwZSBmIC1wcmludCkgJiYKKwl0ZXN0ICJ6JGZvdW5kIiA9ICJ6dHN0LyRwL2RheSIgJiYKKwlybSAtZnIgdHN0Cit0aGVuCisKKyMgVGhpcyB0ZXN0IGNvbnRhaW5zIFVURi04IGNoYXJhY3RlcnMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAnRmlsZSB3aXRoIG5vbi1hc2NpaSBmaWxlIG5hbWUnIFwKKyAgICAgJ21rZGlyIC1wIMOFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovw6Uvw6Qvw7YgJiYKKyAgICAgIGVjaG8gRm9vID7DhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2L2fDpXJkZXRzw6Vnw6VyZGV0LnR4dCAmJgorICAgICAgZ2l0IGFkZCDDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2L2fDpXJkZXRzw6Vnw6VyZGV0LnR4dCAmJgorICAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1iaW5hcnktMS5wbmcgw4UvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/DpS/DpC/Dti9nw6VyZGV0c8OlZ8OlcmRldC5wbmcgJiYKKyAgICAgIGdpdCBhZGQgw4UvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/DpS/DpC/Dti9nw6VyZGV0c8OlZ8OlcmRldC5wbmcgJiYKKyAgICAgIGdpdCBjb21taXQgLWEgLW0gIkfDpXIgZGV0IHPDpSBnw6VyIGRldCIgJiYgXAorICAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgIGdpdCBjdnNleHBvcnRjb21taXQgLXYgLWMgJGlkICYmCisgICAgICBjaGVja19lbnRyaWVzIFwKKyAgICAgICLDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2IiBcCisgICAgICAiZ8OlcmRldHPDpWfDpXJkZXQucG5nLzEuMS8ta2J8Z8OlcmRldHPDpWfDpXJkZXQudHh0LzEuMS8iCisgICAgICApJworCitmaQorCitybSAtZnIgdHN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAnTWlzbWF0Y2hpbmcgcGF0Y2ggc2hvdWxkIGZhaWwnIFwKKyAgICAgJ2RhdGUgPj4iRS9uZXdmaWxlNS50eHQiICYmCisgICAgICBnaXQgYWRkICJFL25ld2ZpbGU1LnR4dCIgJiYKKyAgICAgIGdpdCBjb21taXQgLWEgLW0gIlVwZGF0ZSBvbmUiICYmCisgICAgICBkYXRlID4+IkUvbmV3ZmlsZTUudHh0IiAmJgorICAgICAgZ2l0IGFkZCAiRS9uZXdmaWxlNS50eHQiICYmCisgICAgICBnaXQgY29tbWl0IC1hIC1tICJVcGRhdGUgdHdvIiAmJgorICAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkCisgICAgICApJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFIFwKKyAgICAgJ1JldGFpbiBleGVjdXRlIGJpdCcgXAorICAgICAnbWtkaXIgRyAmJgorICAgICAgZWNobyBleGVjdXRlb24gPkcvb24gJiYKKyAgICAgIGNobW9kICt4IEcvb24gJiYKKyAgICAgIGVjaG8gZXhlY3V0ZW9mZiA+Ry9vZmYgJiYKKyAgICAgIGdpdCBhZGQgRy9vbiAmJgorICAgICAgZ2l0IGFkZCBHL29mZiAmJgorICAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiRXhlY3V0ZSB0ZXN0IiAmJgorICAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgIGdpdCBjdnNleHBvcnRjb21taXQgLWMgSEVBRAorICAgICAgdGVzdCAteCBHL29uICYmCisgICAgICAhIHRlc3QgLXggRy9vZmYKKyAgICAgICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy13IG9wdGlvbiBzaG91bGQgd29yayB3aXRoIHJlbGF0aXZlIEdJVF9ESVInICcKKyAgICAgIG1rZGlyIFcgJiYKKyAgICAgIGVjaG8gZm9vYmFyID5XL2ZpbGUxLnR4dCAmJgorICAgICAgZWNobyBiYXp6bGUgPlcvZmlsZTIudHh0ICYmCisgICAgICBnaXQgYWRkIFcvZmlsZTEudHh0ICYmCisgICAgICBnaXQgYWRkIFcvZmlsZTIudHh0ICYmCisgICAgICBnaXQgY29tbWl0IC1tICJNb3JlIHVwZGF0ZXMiICYmCisgICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgICAoY2QgIiRHSVRfRElSIiAmJgorICAgICAgR0lUX0RJUj0uIGdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyAkaWQgJiYKKyAgICAgIGNoZWNrX2VudHJpZXMgIiRDVlNXT1JLL1ciICJmaWxlMS50eHQvMS4xL3xmaWxlMi50eHQvMS4xLyIgJiYKKyAgICAgIHRlc3RfY21wICIkQ1ZTV09SSy9XL2ZpbGUxLnR4dCIgLi4vVy9maWxlMS50eHQgJiYKKyAgICAgIHRlc3RfY21wICIkQ1ZTV09SSy9XL2ZpbGUyLnR4dCIgLi4vVy9maWxlMi50eHQKKyAgICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZmlsZXMgYmVmb3JlIGRpcmVjdG9yaWVzJyAnCisKKwllY2hvIE5vdGVzID4gcmVsZWFzZS1ub3RlcyAmJgorCWdpdCBhZGQgcmVsZWFzZS1ub3RlcyAmJgorCWdpdCBjb21taXQgLW0gIkFkZCByZWxlYXNlIG5vdGVzIiByZWxlYXNlLW5vdGVzICYmCisJaWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAiJENWU1dPUksiIC1jICRpZCAmJgorCisJZWNobyBuZXcgPiBEUyAmJgorCWVjaG8gbmV3ID4gRS9EUyAmJgorCWVjaG8gbW9kaWZpZWQgPiByZWxlYXNlLW5vdGVzICYmCisJZ2l0IGFkZCBEUyBFL0RTIHJlbGVhc2Utbm90ZXMgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgdHdvIGZpbGVzIHdpdGggdGhlIHNhbWUgYmFzZW5hbWUiICYmCisJaWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAiJENWU1dPUksiIC1jICRpZCAmJgorCWNoZWNrX2VudHJpZXMgIiRDVlNXT1JLL0UiICJEUy8xLjEvfG5ld2ZpbGU1LnR4dC8xLjEvIiAmJgorCWNoZWNrX2VudHJpZXMgIiRDVlNXT1JLIiAiRFMvMS4xL3xyZWxlYXNlLW5vdGVzLzEuMi8iICYmCisJdGVzdF9jbXAgIiRDVlNXT1JLL0RTIiBEUyAmJgorCXRlc3RfY21wICIkQ1ZTV09SSy9FL0RTIiBFL0RTICYmCisJdGVzdF9jbXAgIiRDVlNXT1JLL3JlbGVhc2Utbm90ZXMiIHJlbGVhc2Utbm90ZXMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1jb21taXQgYSByZW1vdmVkIGZpbGVuYW1lIHdoaWNoIHJlbWFpbnMgaW4gQ1ZTIGF0dGljJyAnCisKKyAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICBlY2hvID5hdHRpY19ncmVtbGluICYmCisgICAgIGN2cyAtUSBhZGQgYXR0aWNfZ3JlbWxpbiAmJgorICAgICBjdnMgLVEgY2kgLW0gImFkZGVkIGF0dGljX2dyZW1saW4iICYmCisgICAgIHJtIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIHJtIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIGNpIC1tICJyZW1vdmVkIGF0dGljX2dyZW1saW4iKSAmJgorCisgICAgZWNobyA+IGF0dGljX2dyZW1saW4gJiYKKyAgICBnaXQgYWRkIGF0dGljX2dyZW1saW4gJiYKKyAgICBnaXQgY29tbWl0IC1tICJBZGRlZCBhdHRpY19ncmVtbGluIiAmJgorCWdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyBIRUFEICYmCisgICAgKGNkICIkQ1ZTV09SSyI7IGN2cyAtUSB1cGRhdGUgLWQpICYmCisgICAgdGVzdCAtZiAiJENWU1dPUksvYXR0aWNfZ3JlbWxpbiIKKycKKworIyB0aGUgc3RhdGUgb2YgdGhlIENWUyBzYW5kYm94IG1heSBiZSBpbmRldGVybWluYXRlIGZvciAnIHNwYWNlJworIyBhZnRlciB0aGlzIHRlc3Qgb24gc29tZSBwbGF0Zm9ybXMgLyB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgQ1ZTCisjIGNvbnNpZGVyIGFkZGluZyBuZXcgdGVzdHMgYWJvdmUgdGhpcyBwb2ludAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGEgZmlsZSB3aXRoIGxlYWRpbmcgc3BhY2VzIGluIHRoZSBuYW1lJyAnCisKKwllY2hvIHNwYWNlID4gIiBzcGFjZSIgJiYKKwlnaXQgYWRkICIgc3BhY2UiICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIGEgZmlsZSB3aXRoIGEgbGVhZGluZyBzcGFjZSIgJiYKKwlpZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY3ZzZXhwb3J0Y29tbWl0IC13ICIkQ1ZTV09SSyIgLWMgJGlkICYmCisJY2hlY2tfZW50cmllcyAiJENWU1dPUksiICIgc3BhY2UvMS4xL3xEUy8xLjEvfGF0dGljX2dyZW1saW4vMS4zL3xyZWxlYXNlLW5vdGVzLzEuMi8iICYmCisJdGVzdF9jbXAgIiRDVlNXT1JLLyBzcGFjZSIgIiBzcGFjZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgdGhlIHNhbWUgY2hlY2tvdXQgZm9yIEdpdCBhbmQgQ1ZTJyAnCisKKwkobWtkaXIgc2hhcmVkICYmCisJIGNkIHNoYXJlZCAmJgorCSBzYW5lX3Vuc2V0IEdJVF9ESVIgJiYKKwkgY3ZzIGNvIC4gJiYKKwkgZ2l0IGluaXQgJiYKKwkgZ2l0IGFkZCAiIHNwYWNlIiAmJgorCSBnaXQgY29tbWl0IC1tICJmYWtlIGluaXRpYWwgY29tbWl0IiAmJgorCSBlY2hvIEhlbGxvID4+ICIgc3BhY2UiICYmCisJIGdpdCBjb21taXQgLW0gIkFub3RoZXIgY2hhbmdlIiAiIHNwYWNlIiAmJgorCSBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1XIC1wIC11IC1jIEhFQUQgJiYKKwkgZ3JlcCBIZWxsbyAiIHNwYWNlIiAmJgorCSBnaXQgZGlmZi1maWxlcykKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2ggYi90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmY2YyNjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCkBAIC0wLDAgKzEsMjk0NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBTaGF3biBQZWFyY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgZmFzdC1pbXBvcnQgdXRpbGl0eScKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKKworIyBQcmludCAkMSBieXRlcyBmcm9tIHN0ZGluIHRvIHN0ZG91dC4KKyMKKyMgVGhpcyBjb3VsZCBiZSB3cml0dGVuIGFzICJoZWFkIC1jICQxIiwgYnV0IElSSVggImhlYWQiIGRvZXMgbm90CisjIHN1cHBvcnQgdGhlIC1jIG9wdGlvbi4KK2hlYWRfYyAoKSB7CisJIiRQRVJMX1BBVEgiIC1lICcKKwkJbXkgJGxlbiA9ICRBUkdWWzFdOworCQl3aGlsZSAoJGxlbiA+IDApIHsKKwkJCW15ICRzOworCQkJbXkgJG5yZWFkID0gc3lzcmVhZChTVERJTiwgJHMsICRsZW4pOworCQkJZGllICJjYW5ub3QgcmVhZDogJCEiIHVubGVzcyBkZWZpbmVkKCRucmVhZCk7CisJCQlwcmludCAkczsKKwkJCSRsZW4gLT0gJG5yZWFkOworCQl9CisJJyAtICIkMSIKK30KKwordmVyaWZ5X3BhY2tzICgpIHsKKwlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2sKKwlkbworCQlnaXQgdmVyaWZ5LXBhY2sgIiRAIiAiJHAiIHx8IHJldHVybgorCWRvbmUKK30KKworZmlsZTJfZGF0YT0nZmlsZTIKK3NlY29uZCBsaW5lIG9mIEVPRicKKworZmlsZTNfZGF0YT0nRU9GCitpbiAzcmQgZmlsZQorIEVORCcKKworZmlsZTRfZGF0YT1hYmNkCitmaWxlNF9sZW49NAorCitmaWxlNV9kYXRhPSdhbiBpbmxpbmUgZmlsZS4KKyAgd2Ugc2hvdWxkIHNlZSBpdCBsYXRlci4nCisKK2ZpbGU2X2RhdGE9JyMhL2Jpbi9zaAorZWNobyAiJEAiJworCis+ZW1wdHkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGhhdmUgcGlwZXM/JyAnCisJcm0gLWYgZnJvYiAmJgorCWlmIG1rZmlmbyBmcm9iCisJdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgUElQRQorCWZpCisnCisKKyMjIworIyMjIHNlcmllcyBBCisjIyMKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHN0cmVhbSBzdWNjZWVkcycgJworCWdpdCBmYXN0LWltcG9ydCA8L2Rldi9udWxsCisnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2Jsb2IKK21hcmsgOjIKK2RhdGEgPDxFT0YKKyRmaWxlMl9kYXRhCitFT0YKKworYmxvYgorbWFyayA6MworZGF0YSA8PEVORAorJGZpbGUzX2RhdGEKK0VORAorCitibG9iCittYXJrIDo0CitkYXRhICRmaWxlNF9sZW4KKyRmaWxlNF9kYXRhCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAoraW5pdGlhbAorQ09NTUlUCisKK00gNjQ0IDoyIGZpbGUyCitNIDY0NCA6MyBmaWxlMworTSA3NTUgOjQgZmlsZTQKKwordGFnIHNlcmllcy1BCitmcm9tIDo1CitkYXRhIDw8RU9GCitBbiBhbm5vdGF0ZWQgdGFnIHdpdGhvdXQgYSB0YWdnZXIKK0VPRgorCit0YWcgc2VyaWVzLUEtYmxvYgorZnJvbSA6MworZGF0YSA8PEVPRgorQW4gYW5ub3RhdGVkIHRhZyB0aGF0IGFubm90YXRlcyBhIGJsb2IuCitFT0YKKworSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnQTogY3JlYXRlIHBhY2sgZnJvbSBzdGRpbicgXAorICAgICdnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9bWFya3Mub3V0IDxpbnB1dCAmJgorCSBnaXQgd2hhdGNoYW5nZWQgbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCitjYXQgPmV4cGVjdCA8PEVPRgorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworaW5pdGlhbAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IG1hc3RlciB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QgPDxFT0YKKzEwMDY0NCBibG9iIGZpbGUyCisxMDA2NDQgYmxvYiBmaWxlMworMTAwNzU1IGJsb2IgZmlsZTQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0E6IHZlcmlmeSB0cmVlJyBcCisJJ2dpdCBjYXQtZmlsZSAtcCBtYXN0ZXJee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRmaWxlMl9kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IGZpbGUyJyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpmaWxlMiA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRmaWxlM19kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IGZpbGUzJyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpmaWxlMyA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK3ByaW50ZiAiJGZpbGU0X2RhdGEiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdBOiB2ZXJpZnkgZmlsZTQnIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGU0ID5hY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QgPDxFT0YKK29iamVjdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpCit0eXBlIGNvbW1pdAordGFnIHNlcmllcy1BCisKK0FuIGFubm90YXRlZCB0YWcgd2l0aG91dCBhIHRhZ2dlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgdGFnL3Nlcmllcy1BJyAnCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitvYmplY3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyOmZpbGUzKQordHlwZSBibG9iCit0YWcgc2VyaWVzLUEtYmxvYgorCitBbiBhbm5vdGF0ZWQgdGFnIHRoYXQgYW5ub3RhdGVzIGEgYmxvYi4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IHRhZy9zZXJpZXMtQS1ibG9iJyAnCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BLWJsb2IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzoyIGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlMmAKKzozIGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlM2AKKzo0IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlNGAKKzo1IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3Rlcl4wYAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IG1hcmtzIG91dHB1dCcgXAorCSd0ZXN0X2NtcCBleHBlY3QgbWFya3Mub3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IG1hcmtzIGltcG9ydCcgXAorCSdnaXQgZmFzdC1pbXBvcnQgXAorCQktLWltcG9ydC1tYXJrcz1tYXJrcy5vdXQgXAorCQktLWV4cG9ydC1tYXJrcz1tYXJrcy5uZXcgXAorCQk8L2Rldi9udWxsICYmCisJdGVzdF9jbXAgZXhwZWN0IG1hcmtzLm5ldycKKwordGVzdF90aWNrCituZXdfYmxvYj0kKGVjaG8gdGVzdGluZyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKQorY2F0ID5pbnB1dCA8PElOUFVUX0VORAordGFnIHNlcmllcy1BLWJsb2ItMgorZnJvbSAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXI6ZmlsZTMpCitkYXRhIDw8RU9GCitUYWcgYmxvYiBieSBzaGExLgorRU9GCisKK2Jsb2IKK21hcmsgOjYKK2RhdGEgPDxFT0YKK3Rlc3RpbmcKK0VPRgorCitjb21taXQgcmVmcy9oZWFkcy9uZXdfYmxvYgorY29tbWl0dGVyICA8PiAwICswMDAwCitkYXRhIDAKK00gNjQ0IDo2IG5ld19ibG9iCisjcHJldGVuZCB3ZSBnb3Qgc2hhMSBmcm9tIGZhc3QtaW1wb3J0CitscyAibmV3X2Jsb2IiCisKK3RhZyBzZXJpZXMtQS1ibG9iLTMKK2Zyb20gJG5ld19ibG9iCitkYXRhIDw8RU9GCitUYWcgbmV3X2Jsb2IuCitFT0YKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVPRgorb2JqZWN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcjpmaWxlMykKK3R5cGUgYmxvYgordGFnIHNlcmllcy1BLWJsb2ItMgorCitUYWcgYmxvYiBieSBzaGExLgorb2JqZWN0ICRuZXdfYmxvYgordHlwZSBibG9iCit0YWcgc2VyaWVzLUEtYmxvYi0zCisKK1RhZyBuZXdfYmxvYi4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdGFnIGJsb2IgYnkgc2hhMScgXAorCSdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BLWJsb2ItMiA+YWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BLWJsb2ItMyA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvdmVyaWZ5LS1pbXBvcnQtbWFya3MKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorcmVjcmVhdGUgZnJvbSA6NQorQ09NTUlUCisKK2Zyb20gOjUKK00gNzU1IDoyIGNvcHktb2YtZmlsZTIKKworSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IG1hcmtzIGltcG9ydCBkb2VzIG5vdCBjcmFzaCcgXAorCSdnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3Mub3V0IDxpbnB1dCAmJgorCSBnaXQgd2hhdGNoYW5nZWQgdmVyaWZ5LS1pbXBvcnQtbWFya3MnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHZlcmlmeSBwYWNrJyAnCisJdmVyaWZ5X3BhY2tzCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCis6MDAwMDAwIDEwMDc1NSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQQljb3B5LW9mLWZpbGUyCitFT0YKK2dpdCBkaWZmLXRyZWUgLU0gLXIgbWFzdGVyIHZlcmlmeS0taW1wb3J0LW1hcmtzID5hY3R1YWwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdBOiB2ZXJpZnkgZGlmZicgXAorCSdjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwgJiYKKwkgdGVzdCBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXI6ZmlsZTJgIFwKKwkgICAgPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB2ZXJpZnktLWltcG9ydC1tYXJrczpjb3B5LW9mLWZpbGUyYCcKKwordGVzdF90aWNrCittdD0kKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDwgL2Rldi9udWxsKQorOiA+aW5wdXQuYmxvYgorOiA+bWFya3MuZXhwCis6ID50cmVlLmV4cAorCitjYXQgPmlucHV0LmNvbW1pdCA8PEVPRgorY29tbWl0IHJlZnMvaGVhZHMvdmVyaWZ5LS1kdW1wLW1hcmtzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3Rlc3QgdGhlIHNwYXJzZSBhcnJheSBkdW1waW5nIHJvdXRpbmVzIHdpdGggZXhwb25lbnRpYWxseSBncm93aW5nIG1hcmtzCitDT01NSVQKK0VPRgorCitpPTAKK2w9NAorbT02CituPTcKK3doaWxlIHRlc3QgIiRpIiAtbHQgMjc7IGRvCisgICAgY2F0ID4+aW5wdXQuYmxvYiA8PEVPRgorYmxvYgorbWFyayA6JGwKK2RhdGEgMAorYmxvYgorbWFyayA6JG0KK2RhdGEgMAorYmxvYgorbWFyayA6JG4KK2RhdGEgMAorRU9GCisgICAgZWNobyAiTSAxMDA2NDQgOiRsIGwkaSIgPj5pbnB1dC5jb21taXQKKyAgICBlY2hvICJNIDEwMDY0NCA6JG0gbSRpIiA+PmlucHV0LmNvbW1pdAorICAgIGVjaG8gIk0gMTAwNjQ0IDokbiBuJGkiID4+aW5wdXQuY29tbWl0CisKKyAgICBlY2hvICI6JGwgJG10IiA+Pm1hcmtzLmV4cAorICAgIGVjaG8gIjokbSAkbXQiID4+bWFya3MuZXhwCisgICAgZWNobyAiOiRuICRtdCIgPj5tYXJrcy5leHAKKworICAgIHByaW50ZiAiMTAwNjQ0IGJsb2IgJG10XHRsJGlcbiIgPj50cmVlLmV4cAorICAgIHByaW50ZiAiMTAwNjQ0IGJsb2IgJG10XHRtJGlcbiIgPj50cmVlLmV4cAorICAgIHByaW50ZiAiMTAwNjQ0IGJsb2IgJG10XHRuJGlcbiIgPj50cmVlLmV4cAorCisgICAgbD0kKCgkbCArICRsKSkKKyAgICBtPSQoKCRtICsgJG0pKQorICAgIG49JCgoJGwgKyAkbikpCisKKyAgICBpPSQoKDEgKyAkaSkpCitkb25lCisKK3NvcnQgdHJlZS5leHAgPiB0cmVlLmV4cF9zCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IGV4cG9ydCBtYXJrcyB3aXRoIGxhcmdlIHZhbHVlcycgJworCWNhdCBpbnB1dC5ibG9iIGlucHV0LmNvbW1pdCB8IGdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcy5sYXJnZSAmJgorCWdpdCBscy10cmVlIHJlZnMvaGVhZHMvdmVyaWZ5LS1kdW1wLW1hcmtzID50cmVlLm91dCAmJgorCXRlc3RfY21wIHRyZWUuZXhwX3MgdHJlZS5vdXQgJiYKKwl0ZXN0X2NtcCBtYXJrcy5leHAgbWFya3MubGFyZ2UnCisKKyMjIworIyMjIHNlcmllcyBCCisjIyMKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9icmFuY2gKK21hcmsgOjEKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29ycnVwdAorQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9tYXN0ZXIKK00gNzU1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgemVybzEKKworSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgYmxvYiBzaGExJyAnCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworcm0gLWYgLmdpdC9vYmplY3RzL3BhY2tfKiAuZ2l0L29iamVjdHMvaW5kZXhfKgorCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgLmJhZGJyYW5jaG5hbWUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29ycnVwdAorQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9tYXN0ZXIKKworSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgYnJhbmNoIG5hbWUgIi5iYWRicmFuY2huYW1lIicgJworICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKK3JtIC1mIC5naXQvb2JqZWN0cy9wYWNrXyogLmdpdC9vYmplY3RzL2luZGV4XyoKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IGJhZFticmFuY2hdbmFtZQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb3JydXB0CitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL21hc3RlcgorCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0I6IGZhaWwgb24gaW52YWxpZCBicmFuY2ggbmFtZSAiYmFkW2JyYW5jaF1uYW1lIicgJworICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKK3JtIC1mIC5naXQvb2JqZWN0cy9wYWNrXyogLmdpdC9vYmplY3RzL2luZGV4XyoKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IFRFTVBfVEFHCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3RhZyBiYXNlCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL21hc3RlcgorCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdCOiBhY2NlcHQgYnJhbmNoIG5hbWUgIlRFTVBfVEFHIicgXAorICAgICdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIHRlc3QgLWYgLmdpdC9URU1QX1RBRyAmJgorCSB0ZXN0IGBnaXQgcmV2LXBhcnNlIG1hc3RlcmAgPSBgZ2l0IHJldi1wYXJzZSBURU1QX1RBR15gJworcm0gLWYgLmdpdC9URU1QX1RBRworCitnaXQgZ2MgMj4vZGV2L251bGwgPi9kZXYvbnVsbAorZ2l0IHBydW5lIDI+L2Rldi9udWxsID4vZGV2L251bGwKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvZW1wdHktY29tbWl0dGVyLTEKK2NvbW1pdHRlciAgPD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZW1wdHkgY29tbWl0CitDT01NSVQKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogYWNjZXB0IGVtcHR5IGNvbW1pdHRlcicgJworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlvdXQ9JChnaXQgZnNjaykgJiYKKwllY2hvICIkb3V0IiAmJgorCXRlc3QgLXogIiRvdXQiCisnCitnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2VtcHR5LWNvbW1pdHRlci0xIHx8IHRydWUKKworZ2l0IGdjIDI+L2Rldi9udWxsID4vZGV2L251bGwKK2dpdCBwcnVuZSAyPi9kZXYvbnVsbCA+L2Rldi9udWxsCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL2VtcHR5LWNvbW1pdHRlci0yCitjb21taXR0ZXIgPGFAYi5jb20+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2VtcHR5IGNvbW1pdAorQ09NTUlUCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0I6IGFjY2VwdCBhbmQgZml4dXAgY29tbWl0dGVyIHdpdGggbm8gbmFtZScgJworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlvdXQ9JChnaXQgZnNjaykgJiYKKwllY2hvICIkb3V0IiAmJgorCXRlc3QgLXogIiRvdXQiCisnCitnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2VtcHR5LWNvbW1pdHRlci0yIHx8IHRydWUKKworZ2l0IGdjIDI+L2Rldi9udWxsID4vZGV2L251bGwKK2dpdCBwcnVuZSAyPi9kZXYvbnVsbCA+L2Rldi9udWxsCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyCitjb21taXR0ZXIgTmFtZSBlbWFpbD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZW1wdHkgY29tbWl0CitDT01NSVQKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogZmFpbCBvbiBpbnZhbGlkIGNvbW1pdHRlciAoMSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCitnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyIHx8IHRydWUKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIKK2NvbW1pdHRlciBOYW1lIDxlPG1haWw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2VtcHR5IGNvbW1pdAorQ09NTUlUCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0I6IGZhaWwgb24gaW52YWxpZCBjb21taXR0ZXIgKDIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9pbnZhbGlkLWNvbW1pdHRlciB8fCB0cnVlCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyCitjb21taXR0ZXIgTmFtZSA8ZW1haWw+PiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitlbXB0eSBjb21taXQKK0NPTU1JVAorSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgY29tbWl0dGVyICgzKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKK2dpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIgfHwgdHJ1ZQorCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9pbnZhbGlkLWNvbW1pdHRlcgorY29tbWl0dGVyIE5hbWUgPGVtYWlsICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2VtcHR5IGNvbW1pdAorQ09NTUlUCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0I6IGZhaWwgb24gaW52YWxpZCBjb21taXR0ZXIgKDQpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9pbnZhbGlkLWNvbW1pdHRlciB8fCB0cnVlCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyCitjb21taXR0ZXIgTmFtZTxlbWFpbD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZW1wdHkgY29tbWl0CitDT01NSVQKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogZmFpbCBvbiBpbnZhbGlkIGNvbW1pdHRlciAoNSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCitnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyIHx8IHRydWUKKworIyMjCisjIyMgc2VyaWVzIEMKKyMjIworCituZXdmPWBlY2hvIGhpIG5ld2YgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbmAKK29sZGY9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyOmZpbGUyYAordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9icmFuY2gKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorc2Vjb25kCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL21hc3RlcgorTSA2NDQgJG9sZGYgZmlsZTIvb2xkZgorTSA3NTUgJG5ld2YgZmlsZTIvbmV3ZgorRCBmaWxlMworCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdDOiBpbmNyZW1lbnRhbCBpbXBvcnQgY3JlYXRlIHBhY2sgZnJvbSBzdGRpbicgXAorICAgICdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCB3aGF0Y2hhbmdlZCBicmFuY2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0M6IHZlcmlmeSBwYWNrJyAnCisJdmVyaWZ5X3BhY2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdDOiB2YWxpZGF0ZSByZXVzZSBleGlzdGluZyBibG9iJyBcCisJJ3Rlc3QgJG5ld2YgPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2g6ZmlsZTIvbmV3ZmAgJiYKKwkgdGVzdCAkb2xkZiA9IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaDpmaWxlMi9vbGRmYCcKKworY2F0ID5leHBlY3QgPDxFT0YKK3BhcmVudCBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJeMGAKK2F1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKK3NlY29uZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQzogdmVyaWZ5IGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IGJyYW5jaCB8IHNlZCAxZCA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCis6MDAwMDAwIDEwMDc1NSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQQlmaWxlMi9uZXdmCis6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgUjEwMAlmaWxlMglmaWxlMi9vbGRmCis6MTAwNjQ0IDAwMDAwMCAwZDkyZTlmMzM3NGFlMjk0N2MyM2FhNDc3Y2JjNjhjZTU5ODEzNWYxIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlmaWxlMworRU9GCitnaXQgZGlmZi10cmVlIC1NIC1yIG1hc3RlciBicmFuY2ggPmFjdHVhbAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0M6IHZhbGlkYXRlIHJlbmFtZSByZXN1bHQnIFwKKwknY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsJworCisjIyMKKyMjIyBzZXJpZXMgRAorIyMjCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvYnJhbmNoCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3RoaXJkCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCitNIDY0NCBpbmxpbmUgbmV3ZGlyL2ludGVyZXN0aW5nCitkYXRhIDw8RU9GCiskZmlsZTVfZGF0YQorRU9GCisKK00gNzU1IGlubGluZSBuZXdkaXIvZXhlYy5zaAorZGF0YSA8PEVPRgorJGZpbGU2X2RhdGEKK0VPRgorCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdEOiBpbmxpbmUgZGF0YSBpbiBjb21taXQnIFwKKyAgICAnZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgd2hhdGNoYW5nZWQgYnJhbmNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEOiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCitjYXQgPmV4cGVjdCA8PEVPRgorOjAwMDAwMCAxMDA3NTUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAzNWE1OTAyNmEzM2JlYWMxNTY5YjFjN2Y2NmYzMDkwY2U5YzA5YWZjIEEJbmV3ZGlyL2V4ZWMuc2gKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDQ2ZDAzNzFlOTIyMDEwNzkxN2RiMGQwZTAzMDYyOGRlOGExZGU5YiBBCW5ld2Rpci9pbnRlcmVzdGluZworRU9GCitnaXQgZGlmZi10cmVlIC1NIC1yIGJyYW5jaF4gYnJhbmNoID5hY3R1YWwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdEOiB2YWxpZGF0ZSBuZXcgZmlsZXMgYWRkZWQnIFwKKwknY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsJworCitlY2hvICIkZmlsZTVfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0Q6IHZlcmlmeSBmaWxlNScgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiBicmFuY2g6bmV3ZGlyL2ludGVyZXN0aW5nID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworZWNobyAiJGZpbGU2X2RhdGEiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdEOiB2ZXJpZnkgZmlsZTYnIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgYnJhbmNoOm5ld2Rpci9leGVjLnNoID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworIyMjCisjIyMgc2VyaWVzIEUKKyMjIworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9icmFuY2gKK2F1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gVHVlIEZlYiA2IDExOjIyOjE4IDIwMDcgLTA1MDAKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gVHVlIEZlYiA2IDEyOjM1OjAyIDIwMDcgLTA1MDAKK2RhdGEgPDxDT01NSVQKK1JGQyAyODIyIHR5cGUgZGF0ZQorQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0U6IHJmYzI4MjIgZGF0ZSwgLS1kYXRlLWZvcm1hdD1yYXcnICcKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1kYXRlLWZvcm1hdD1yYXcgPGlucHV0CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnRTogcmZjMjgyMiBkYXRlLCAtLWRhdGUtZm9ybWF0PXJmYzI4MjInIFwKKyAgICAnZ2l0IGZhc3QtaW1wb3J0IC0tZGF0ZS1mb3JtYXQ9cmZjMjgyMiA8aW5wdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0U6IHZlcmlmeSBwYWNrJyAnCisJdmVyaWZ5X3BhY2tzCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCithdXRob3IgJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+IDExNzA3Nzg5MzggLTA1MDAKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTE3MDc4MzMwMiAtMDUwMAorCitSRkMgMjgyMiB0eXBlIGRhdGUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0U6IHZlcmlmeSBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGNvbW1pdCBicmFuY2ggfCBzZWQgMSwyZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworIyMjCisjIyMgc2VyaWVzIEYKKyMjIworCitvbGRfYnJhbmNoPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaF4wYAordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9icmFuY2gKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbG9zaW5nIHRoaW5ncyBhbHJlYWR5PworQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9icmFuY2h+MQorCityZXNldCByZWZzL2hlYWRzL290aGVyCitmcm9tIHJlZnMvaGVhZHMvYnJhbmNoCisKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0Y6IG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlIHNraXBzJyBcCisgICAgJ2lmIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKwkgdGhlbgorCQllY2hvIEJBRCBnZmkgZGlkIG5vdCBmYWlsCisJCXJldHVybiAxCisJIGVsc2UKKwkJaWYgdGVzdCAkb2xkX2JyYW5jaCA9IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaF4wYAorCQl0aGVuCisJCQk6IGJyYW5jaCB1bmFmZmVjdGVkIGFuZCBmYWlsdXJlIHJldHVybmVkCisJCQlyZXR1cm4gMAorCQllbHNlCisJCQllY2hvIEJBRCBnZmkgY2hhbmdlZCBicmFuY2ggJG9sZF9icmFuY2gKKwkJCXJldHVybiAxCisJCWZpCisJIGZpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGOiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCitjYXQgPmV4cGVjdCA8PEVPRgordHJlZSBgZ2l0IHJldi1wYXJzZSBicmFuY2h+MV57dHJlZX1gCitwYXJlbnQgYGdpdCByZXYtcGFyc2UgYnJhbmNofjFgCithdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCitsb3NpbmcgdGhpbmdzIGFscmVhZHk/CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdGOiB2ZXJpZnkgb3RoZXIgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBjb21taXQgb3RoZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKKyMjIworIyMjIHNlcmllcyBHCisjIyMKKworb2xkX2JyYW5jaD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2heMGAKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvYnJhbmNoCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2xvc2luZyB0aGluZ3MgYWxyZWFkeT8KK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvYnJhbmNofjEKKworSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnRzogbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGUgZm9yY2VkJyBcCisgICAgJ2dpdCBmYXN0LWltcG9ydCAtLWZvcmNlIDxpbnB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRzogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0c6IGJyYW5jaCBjaGFuZ2VkLCBidXQgbG9nZ2VkJyBcCisJJ3Rlc3QgJG9sZF9icmFuY2ggIT0gYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJhbmNoXjBgICYmCisJIHRlc3QgJG9sZF9icmFuY2ggPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2hAezF9YCcKKworIyMjCisjIyMgc2VyaWVzIEgKKyMjIworCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL0gKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAordGhpcmQKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKK00gNjQ0IGlubGluZSBpLXdpbGwtZGllCitkYXRhIDw8RU9GCit0aGlzIGZpbGUgd2lsbCBuZXZlciBleGlzdC4KK0VPRgorCitkZWxldGVhbGwKK00gNjQ0IGlubGluZSBoL2UvbC9sbworZGF0YSA8PEVPRgorJGZpbGU1X2RhdGEKK0VPRgorCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdIOiBkZWxldGFsbCwgYWRkIDEnIFwKKyAgICAnZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgd2hhdGNoYW5nZWQgSCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSDogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzoxMDA3NTUgMDAwMDAwIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGUyL25ld2YKKzoxMDA2NDQgMDAwMDAwIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGUyL29sZGYKKzoxMDA3NTUgMDAwMDAwIDg1ZGY1MDc4NWQ2MmQzYjA1YWIwM2Q5Y2JmN2U0YTBiNDk0NDk3MzAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGU0Cis6MTAwNjQ0IDEwMDY0NCBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgUjEwMAluZXdkaXIvaW50ZXJlc3RpbmcJaC9lL2wvbG8KKzoxMDA3NTUgMDAwMDAwIGU3NGI3ZDQ2NWU1Mjc0NmJlMmI0YmFlOTgzNjcwNzExZTZlNjY2NTcgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECW5ld2Rpci9leGVjLnNoCitFT0YKK2dpdCBkaWZmLXRyZWUgLU0gLXIgSF4gSCA+YWN0dWFsCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknSDogdmFsaWRhdGUgb2xkIGZpbGVzIHJlbW92ZWQsIG5ldyBmaWxlcyBhZGRlZCcgXAorCSdjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRmaWxlNV9kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknSDogdmVyaWZ5IGZpbGUnIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgSDpoL2UvbC9sbyA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKKyMjIworIyMjIHNlcmllcyBJCisjIyMKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvZXhwb3J0LWJvdW5kYXJ5Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3dlIGhhdmUgYSBib3JkZXIuICBpdHMgb25seSA0MCBjaGFyYWN0ZXJzIHdpZGUuCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaAorCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdJOiBleHBvcnQtcGFjay1lZGdlcycgXAorICAgICdnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtcGFjay1lZGdlcz1lZGdlcy5saXN0IDxpbnB1dCcKKworY2F0ID5leHBlY3QgPDxFT0YKKy5naXQvb2JqZWN0cy9wYWNrL3BhY2stLnBhY2s6IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGV4cG9ydC1ib3VuZGFyeWAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0k6IHZlcmlmeSBlZGdlIGxpc3QnIFwKKwknc2VkIC1lIHMvcGFjay0uKnBhY2svcGFjay0ucGFjay8gZWRnZXMubGlzdCA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKKyMjIworIyMjIHNlcmllcyBKCisjIyMKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvSgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjcmVhdGUgSgorQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9icmFuY2gKKworcmVzZXQgcmVmcy9oZWFkcy9KCisKK2NvbW1pdCByZWZzL2hlYWRzL0oKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAoraW5pdGlhbGl6ZSBKCitDT01NSVQKKworSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnSjogcmVzZXQgZXhpc3RpbmcgYnJhbmNoIGNyZWF0ZXMgZW1wdHkgY29tbWl0JyBcCisgICAgJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknSjogYnJhbmNoIGhhcyAxIGNvbW1pdCwgZW1wdHkgdHJlZScgXAorCSd0ZXN0IDEgPSBgZ2l0IHJldi1saXN0IEogfCB3YyAtbGAgJiYKKwkgdGVzdCAwID0gYGdpdCBscy10cmVlIEogfCB3YyAtbGAnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK3Jlc2V0IHJlZnMvaGVhZHMvSjIKKwordGFnIHdyb25nX3RhZworZnJvbSByZWZzL2hlYWRzL0oyCitkYXRhIDw8RU9GCitUYWcgYnJhbmNoIHRoYXQgd2FzIHJlc2V0LgorRU9GCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdKOiB0YWcgbXVzdCBmYWlsIG9uIGVtcHR5IGJyYW5jaCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0JworIyMjCisjIyMgc2VyaWVzIEsKKyMjIworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9LCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NyZWF0ZSBLCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaAorCitjb21taXQgcmVmcy9oZWFkcy9LCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3JlZG8gSworQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9icmFuY2heMQorCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdLOiByZWluaXQgYnJhbmNoIHdpdGggZnJvbScgXAorICAgICdnaXQgZmFzdC1pbXBvcnQgPGlucHV0JwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0s6IHZlcmlmeSBLXjEgPSBicmFuY2heMScgXAorICAgICd0ZXN0IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaF4xYCBcCisJCT0gYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgS14xYCcKKworIyMjCisjIyMgc2VyaWVzIEwKKyMjIworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitibG9iCittYXJrIDoxCitkYXRhIDw8RU9GCitzb21lIGRhdGEKK0VPRgorCitibG9iCittYXJrIDoyCitkYXRhIDw8RU9GCitvdGhlciBkYXRhCitFT0YKKworY29tbWl0IHJlZnMvaGVhZHMvTAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjcmVhdGUgTAorQ09NTUlUCisKK00gNjQ0IDoxIGIuCitNIDY0NCA6MSBiL290aGVyCitNIDY0NCA6MSBiYQorCitjb21taXQgcmVmcy9oZWFkcy9MCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3VwZGF0ZSBMCitDT01NSVQKKworTSA2NDQgOjIgYi4KK00gNjQ0IDoyIGIvb3RoZXIKK00gNjQ0IDoyIGJhCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECis6MTAwNjQ0IDEwMDY0NCA0MjY4NjMyLi4uIDU1ZDNhNTIuLi4gTQliLgorOjA0MDAwMCAwNDAwMDAgMGFlNWNhYy4uLiA0NDNjNzY4Li4uIE0JYgorOjEwMDY0NCAxMDA2NDQgNDI2ODYzMi4uLiA1NWQzYTUyLi4uIE0JYmEKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0w6IHZlcmlmeSBpbnRlcm5hbCB0cmVlIHNvcnRpbmcnIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgZGlmZi10cmVlIC0tYWJicmV2IC0tcmF3IExeIEwgPm91dHB1dCAmJgorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0JworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitibG9iCittYXJrIDoxCitkYXRhIDw8RU9GCit0aGUgZGF0YQorRU9GCisKK2NvbW1pdCByZWZzL2hlYWRzL0wyCitjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyNDczIC0wNzAwCitkYXRhIDw8Q09NTUlUCitpbml0IEwyCitDT01NSVQKK00gNjQ0IDoxIGEvYi9jCitNIDY0NCA6MSBhL2IvZAorTSA2NDQgOjEgYS9lL2YKKworY29tbWl0IHJlZnMvaGVhZHMvTDIKK2NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTI0NzMgLTA3MDAKK2RhdGEgPDxDT01NSVQKK3VwZGF0ZSBMMgorQ09NTUlUCitDIGEgZworQyBhL2UgZy9iCitNIDY0NCA6MSBnL2IvaAorSU5QVVRfRU5ECisKK2NhdCA8PEVPRiA+ZXhwZWN0CitnL2IvZgorZy9iL2gKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnTDogbmVzdGVkIHRyZWUgY29weSBkb2VzIG5vdCBjb3JydXB0IGRlbHRhcycgXAorCSdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGxzLXRyZWUgTDIgZy9iLyA+dG1wICYmCisJY2F0IHRtcCB8IGN1dCAtZiAyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGZzY2sgYGdpdCByZXYtcGFyc2UgTDJgJworCitnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL0wyCisKKyMjIworIyMjIHNlcmllcyBNCisjIyMKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9NMQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaWxlIHJlbmFtZQorQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9icmFuY2heMAorUiBmaWxlMi9uZXdmIGZpbGUyL24uZS53LmYKKworSU5QVVRfRU5ECisKK2NhdCA+ZXhwZWN0IDw8RU9GCis6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgUjEwMAlmaWxlMi9uZXdmCWZpbGUyL24uZS53LmYKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ006IHJlbmFtZSBmaWxlIGluIHNhbWUgc3ViZGlyZWN0b3J5JyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgZ2l0IGRpZmYtdHJlZSAtTSAtciBNMV4gTTEgPmFjdHVhbCAmJgorCSBjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL00yCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2ZpbGUgcmVuYW1lCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCitSIGZpbGUyL25ld2YgaS9hbS9uZXcvdG8veW91CisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVPRgorOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIFIxMDAJZmlsZTIvbmV3ZglpL2FtL25ldy90by95b3UKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ006IHJlbmFtZSBmaWxlIHRvIG5ldyBzdWJkaXJlY3RvcnknIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgZGlmZi10cmVlIC1NIC1yIE0yXiBNMiA+YWN0dWFsICYmCisJIGNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvTTMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZmlsZSByZW5hbWUKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvTTJeMAorUiBpIG90aGVyL3N1YgorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFT0YKKzoxMDA3NTUgMTAwNzU1IGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBSMTAwCWkvYW0vbmV3L3RvL3lvdQlvdGhlci9zdWIvYW0vbmV3L3RvL3lvdQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTTogcmVuYW1lIHN1YmRpcmVjdG9yeSB0byBuZXcgc3ViZGlyZWN0b3J5JyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgZ2l0IGRpZmYtdHJlZSAtTSAtciBNM14gTTMgPmFjdHVhbCAmJgorCSBjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwnCisKKyMjIworIyMjIHNlcmllcyBOCisjIyMKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9OMQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaWxlIGNvcHkKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKK0MgZmlsZTIvbmV3ZiBmaWxlMi9uLmUudy5mCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVPRgorOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIEMxMDAJZmlsZTIvbmV3ZglmaWxlMi9uLmUudy5mCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdOOiBjb3B5IGZpbGUgaW4gc2FtZSBzdWJkaXJlY3RvcnknIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgZGlmZi10cmVlIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC1yIE4xXiBOMSA+YWN0dWFsICYmCisJIGNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvTjIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY2xlYW4gZGlyZWN0b3J5IGNvcHkKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKK0MgZmlsZTIgZmlsZTMKKworY29tbWl0IHJlZnMvaGVhZHMvTjIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbW9kaWZ5IGRpcmVjdG9yeSBjb3B5CitDT01NSVQKKworTSA2NDQgaW5saW5lIGZpbGUzL2ZpbGU1CitkYXRhIDw8RU9GCiskZmlsZTVfZGF0YQorRU9GCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgZmNmNzc4Y2RhMTgxZWFhMWNiYzllOWNlM2EyZTE1ZWU5ZjlmZTc5MSBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIEMxMDAJbmV3ZGlyL2ludGVyZXN0aW5nCWZpbGUzL2ZpbGU1Cis6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQzEwMAlmaWxlMi9uZXdmCWZpbGUzL25ld2YKKzoxMDA2NDQgMTAwNjQ0IDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSBDMTAwCWZpbGUyL29sZGYJZmlsZTMvb2xkZgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTjogY29weSB0aGVuIG1vZGlmeSBzdWJkaXJlY3RvcnknIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgZGlmZi10cmVlIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC1yIE4yXl4gTjIgPmFjdHVhbCAmJgorCSBjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL04zCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2RpcnR5IGRpcmVjdG9yeSBjb3B5CitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCitNIDY0NCBpbmxpbmUgZmlsZTIvZmlsZTUKK2RhdGEgPDxFT0YKKyRmaWxlNV9kYXRhCitFT0YKKworQyBmaWxlMiBmaWxlMworRCBmaWxlMi9maWxlNQorCitJTlBVVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IGNvcHkgZGlydHkgc3ViZGlyZWN0b3J5JyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgdGVzdCBgZ2l0IHJldi1wYXJzZSBOMl57dHJlZX1gID0gYGdpdCByZXYtcGFyc2UgTjNee3RyZWV9YCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IGNvcHkgZGlyZWN0b3J5IGJ5IGlkJyBcCisJJ2NhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQzEwMAlmaWxlMi9uZXdmCWZpbGUzL25ld2YKKwk6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQzEwMAlmaWxlMi9vbGRmCWZpbGUzL29sZGYKKwlFT0YKKwkgc3ViZGlyPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2JyYW5jaF4wOmZpbGUyKSAmJgorCSBjYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL040CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgYnkgdHJlZSBoYXNoCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDA0MDAwMCAkc3ViZGlyIGZpbGUzCisJSU5QVVRfRU5ECisJIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtciBONF4gTjQgPmFjdHVhbCAmJgorCSBjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnTjogcmVhZCBhbmQgY29weSBkaXJlY3RvcnknICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GCisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIEMxMDAJZmlsZTIvbmV3ZglmaWxlMy9uZXdmCisJOjEwMDY0NCAxMDA2NDQgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIEMxMDAJZmlsZTIvb2xkZglmaWxlMy9vbGRmCisJRU9GCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ONCAmJgorCXJtIC1mIGJhY2tmbG93ICYmCisJbWtmaWZvIGJhY2tmbG93ICYmCisJKAorCQlleGVjIDxiYWNrZmxvdyAmJgorCQljYXQgPDwtRU9GICYmCisJCWNvbW1pdCByZWZzL2hlYWRzL040CisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCWNvcHkgYnkgdHJlZSBoYXNoLCBwYXJ0IDIKKwkJQ09NTUlUCisKKwkJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJCWxzICJmaWxlMiIKKwkJRU9GCisJCXJlYWQgbW9kZSB0eXBlIHRyZWUgZmlsZW5hbWUgJiYKKwkJZWNobyAiTSAwNDAwMDAgJHRyZWUgZmlsZTMiCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmJhY2tmbG93ICYmCisJZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtciBONF4gTjQgPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ046IGVtcHR5IGRpcmVjdG9yeSByZWFkcyBhcyBtaXNzaW5nJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCU9CSk5BTUUKKwk6MDAwMDAwIDEwMDY0NCBPQkpOQU1FIE9CSk5BTUUgQQl1bnJlbGF0ZWQKKwlFT0YKKwllY2hvICJtaXNzaW5nIHNyYyIgPmV4cGVjdC5yZXNwb25zZSAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvcmVhZC1lbXB0eSAmJgorCXJtIC1mIGJhY2tmbG93ICYmCisJbWtmaWZvIGJhY2tmbG93ICYmCisJKAorCQlleGVjIDxiYWNrZmxvdyAmJgorCQljYXQgPDwtRU9GICYmCisJCWNvbW1pdCByZWZzL2hlYWRzL3JlYWQtZW1wdHkKKwkJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJCWRhdGEgPDxDT01NSVQKKwkJcmVhZCAiZW1wdHkiIChtaXNzaW5nKSBkaXJlY3RvcnkKKwkJQ09NTUlUCisKKwkJTSAxMDA2NDQgaW5saW5lIHNyYy9ncmVldGluZworCQlkYXRhIDw8QkxPQgorCQloZWxsbworCQlCTE9CCisJCUMgc3JjL2dyZWV0aW5nIGRzdDEvbm9uLWdyZWV0aW5nCisJCUMgc3JjL2dyZWV0aW5nIHVucmVsYXRlZAorCQkjIGxlYXZlIGJlaGluZCAiZW1wdHkiIHNyYyBkaXJlY3RvcnkKKwkJRCBzcmMvZ3JlZXRpbmcKKwkJbHMgInNyYyIKKwkJRU9GCisJCXJlYWQgLXIgbGluZSAmJgorCQlwcmludGYgIiVzXG4iICIkbGluZSIgPnJlc3BvbnNlICYmCisJCWNhdCA8PC1cRU9GCisJCUQgZHN0MQorCQlEIGRzdDIKKwkJRU9GCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmJhY2tmbG93ICYmCisJdGVzdF9jbXAgZXhwZWN0LnJlc3BvbnNlIHJlc3BvbnNlICYmCisJZ2l0IHJldi1saXN0IHJlYWQtZW1wdHkgfAorCWdpdCBkaWZmLXRyZWUgLXIgLS1yb290IC0tc3RkaW4gfAorCXNlZCAicy8kX3g0MC9PQkpOQU1FL2ciID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdOOiBjb3B5IHJvb3QgZGlyZWN0b3J5IGJ5IHRyZWUgaGFzaCcgXAorCSdjYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJOjEwMDc1NSAwMDAwMDAgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZmlsZTMvbmV3ZgorCToxMDA2NDQgMDAwMDAwIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGUzL29sZGYKKwlFT0YKKwkgcm9vdD0kKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9icmFuY2heMF57dHJlZX0pICYmCisJIGNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjYKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29weSByb290IGRpcmVjdG9yeSBieSB0cmVlIGhhc2gKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCU0gMDQwMDAwICRyb290ICIiCisJSU5QVVRfRU5ECisJIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtciBONCBONiA+YWN0dWFsICYmCisJIGNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IGRlbGV0ZSBkaXJlY3RvcnkgYnkgY29weWluZycgXAorCSdjYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTAwNjQ0IDAwMDAwMCBPQkpJRCBPQkpJRCBECWZvby9iYXIvcXV4CisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWZvby9iYXIvYmF6CisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlmb28vYmFyL3F1eAorCUVPRgorCSBlbXB0eV90cmVlPSQoZ2l0IG1rdHJlZSA8L2Rldi9udWxsKSAmJgorCSBjYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL04tZGVsZXRlCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbGxlY3QgZGF0YSB0byBiZSBkZWxldGVkCisJQ09NTUlUCisKKwlkZWxldGVhbGwKKwlNIDEwMDY0NCBpbmxpbmUgZm9vL2Jhci9iYXoKKwlkYXRhIDw8REFUQV9FTkQKKwloZWxsbworCURBVEFfRU5ECisJQyAiZm9vL2Jhci9iYXoiICJmb28vYmFyL3F1eCIKKwlDICJmb28vYmFyL2JheiIgImZvby9iYXIvcXV1eC8xIgorCUMgImZvby9iYXIvYmF6IiAiZm9vL2Jhci9xdXV1eCIKKwlNIDA0MDAwMCAkZW1wdHlfdHJlZSBmb28vYmFyL3F1dXgKKwlNIDA0MDAwMCAkZW1wdHlfdHJlZSBmb28vYmFyL3F1dXV4CisKKwljb21taXQgcmVmcy9oZWFkcy9OLWRlbGV0ZQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlkZWxldGUgc3ViZGlyZWN0b3J5CisJQ09NTUlUCisKKwlNIDA0MDAwMCAkZW1wdHlfdHJlZSBmb28vYmFyL3F1eAorCUlOUFVUX0VORAorCSBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCByZXYtbGlzdCBOLWRlbGV0ZSB8CisJCWdpdCBkaWZmLXRyZWUgLXIgLS1zdGRpbiAtLXJvb3QgLS1hbHdheXMgfAorCQlzZWQgLWUgInMvJF94NDAvT0JKSUQvZyIgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTjogbW9kaWZ5IGNvcGllZCB0cmVlJyBcCisJJ2NhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk6MTAwNjQ0IDEwMDY0NCBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgQzEwMAluZXdkaXIvaW50ZXJlc3RpbmcJZmlsZTMvZmlsZTUKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQzEwMAlmaWxlMi9uZXdmCWZpbGUzL25ld2YKKwk6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQzEwMAlmaWxlMi9vbGRmCWZpbGUzL29sZGYKKwlFT0YKKwkgc3ViZGlyPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2JyYW5jaF4wOmZpbGUyKSAmJgorCSBjYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL041CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgYnkgdHJlZSBoYXNoCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDA0MDAwMCAkc3ViZGlyIGZpbGUzCisKKwljb21taXQgcmVmcy9oZWFkcy9ONQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwltb2RpZnkgZGlyZWN0b3J5IGNvcHkKKwlDT01NSVQKKworCU0gNjQ0IGlubGluZSBmaWxlMy9maWxlNQorCWRhdGEgPDxFT0YKKwkkZmlsZTVfZGF0YQorCUVPRgorCUlOUFVUX0VORAorCSBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjVeXiBONSA+YWN0dWFsICYmCisJIGNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IHJlamVjdCBmb28vIHN5bnRheCcgXAorCSdzdWJkaXI9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvYnJhbmNoXjA6ZmlsZTIpICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8PC1JTlBVVF9FTkQKKwljb21taXQgcmVmcy9oZWFkcy9ONUIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29weSB3aXRoIGludmFsaWQgc3ludGF4CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDA0MDAwMCAkc3ViZGlyIGZpbGUzLworCUlOUFVUX0VORCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IHJlamVjdCBmb28vIHN5bnRheCBpbiBjb3B5IHNvdXJjZScgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5ECisJY29tbWl0IHJlZnMvaGVhZHMvTjVDCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgd2l0aCBpbnZhbGlkIHN5bnRheAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJQyBmaWxlMi8gZmlsZTMKKwlJTlBVVF9FTkQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdOOiByZWplY3QgZm9vLyBzeW50YXggaW4gcmVuYW1lIHNvdXJjZScgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5ECisJY29tbWl0IHJlZnMvaGVhZHMvTjVECisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXJlbmFtZSB3aXRoIGludmFsaWQgc3ludGF4CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlSIGZpbGUyLyBmaWxlMworCUlOUFVUX0VORCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IHJlamVjdCBmb28vIHN5bnRheCBpbiBscyBhcmd1bWVudCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5ECisJY29tbWl0IHJlZnMvaGVhZHMvTjVFCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgd2l0aCBpbnZhbGlkIHN5bnRheAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJbHMgImZpbGUyLyIKKwlJTlBVVF9FTkQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdOOiBjb3B5IHRvIHJvb3QgYnkgaWQgYW5kIG1vZGlmeScgXAorCSdlY2hvICJoZWxsbywgd29ybGQiID5leHBlY3QuZm9vICYmCisJIGVjaG8gaGVsbG8gPmV4cGVjdC5iYXIgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0IDw8LVNFVFVQX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL043CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWhlbGxvLCB0cmVlCisJQ09NTUlUCisKKwlkZWxldGVhbGwKKwlNIDY0NCBpbmxpbmUgZm9vL2JhcgorCWRhdGEgPDxFT0YKKwloZWxsbworCUVPRgorCVNFVFVQX0VORAorCisJIHRyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IE43OikgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL044CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgdG8gcm9vdCBieSBpZCBhbmQgbW9kaWZ5CisJQ09NTUlUCisKKwlNIDA0MDAwMCAkdHJlZSAiIgorCU0gNjQ0IGlubGluZSBmb28vZm9vCisJZGF0YSA8PEVPRgorCWhlbGxvLCB3b3JsZAorCUVPRgorCUlOUFVUX0VORAorCSBnaXQgc2hvdyBOODpmb28vZm9vID5hY3R1YWwuZm9vICYmCisJIGdpdCBzaG93IE44OmZvby9iYXIgPmFjdHVhbC5iYXIgJiYKKwkgdGVzdF9jbXAgZXhwZWN0LmZvbyBhY3R1YWwuZm9vICYmCisJIHRlc3RfY21wIGV4cGVjdC5iYXIgYWN0dWFsLmJhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IGV4dHJhY3Qgc3VidHJlZScgXAorCSdicmFuY2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYnJhbmNoXnt0cmVlfSkgJiYKKwkgY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9OOQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlleHRyYWN0IHN1YnRyZWUgYnJhbmNoOm5ld2RpcgorCUNPTU1JVAorCisJTSAwNDAwMDAgJGJyYW5jaCAiIgorCUMgIm5ld2RpciIgIiIKKwlJTlBVVF9FTkQKKwkgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgZGlmZiAtLWV4aXQtY29kZSBicmFuY2g6bmV3ZGlyIE45JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTjogbW9kaWZ5IHN1YnRyZWUsIGV4dHJhY3QgaXQsIGFuZCBtb2RpZnkgYWdhaW4nIFwKKwknZWNobyBoZWxsbyA+ZXhwZWN0LmJheiAmJgorCSBlY2hvIGhlbGxvLCB3b3JsZCA+ZXhwZWN0LnF1eCAmJgorCSBnaXQgZmFzdC1pbXBvcnQgPDwtU0VUVVBfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjEwCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWhlbGxvLCB0cmVlCisJQ09NTUlUCisKKwlkZWxldGVhbGwKKwlNIDY0NCBpbmxpbmUgZm9vL2Jhci9iYXoKKwlkYXRhIDw8RU9GCisJaGVsbG8KKwlFT0YKKwlTRVRVUF9FTkQKKworCSB0cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBOMTA6KSAmJgorCSBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjExCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgdG8gcm9vdCBieSBpZCBhbmQgbW9kaWZ5CisJQ09NTUlUCisKKwlNIDA0MDAwMCAkdHJlZSAiIgorCU0gMTAwNjQ0IGlubGluZSBmb28vYmFyL3F1eAorCWRhdGEgPDxFT0YKKwloZWxsbywgd29ybGQKKwlFT0YKKwlSICJmb28iICIiCisJQyAiYmFyL3F1eCIgImJhci9xdXV4IgorCUlOUFVUX0VORAorCSBnaXQgc2hvdyBOMTE6YmFyL2JheiA+YWN0dWFsLmJheiAmJgorCSBnaXQgc2hvdyBOMTE6YmFyL3F1eCA+YWN0dWFsLnF1eCAmJgorCSBnaXQgc2hvdyBOMTE6YmFyL3F1dXggPmFjdHVhbC5xdXV4ICYmCisJIHRlc3RfY21wIGV4cGVjdC5iYXogYWN0dWFsLmJheiAmJgorCSB0ZXN0X2NtcCBleHBlY3QucXV4IGFjdHVhbC5xdXggJiYKKwkgdGVzdF9jbXAgZXhwZWN0LnF1eCBhY3R1YWwucXV1eCcKKworIyMjCisjIyMgc2VyaWVzIE8KKyMjIworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECisjd2Ugd2lsbAorY29tbWl0IHJlZnMvaGVhZHMvTzEKKyMgLS0gaWdub3JlIGFsbCBvZiB0aGlzIHRleHQKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorIyAkR0lUX0NPTU1JVFRFUl9OQU1FIGhhcyBpbnNlcnRlZCBoZXJlIGZvciBoaXMgYmVuZWZpdC4KK2RhdGEgPDxDT01NSVQKK2RpcnR5IGRpcmVjdG9yeSBjb3B5CitDT01NSVQKKworIyBkb24ndCBmb3JnZXQgdGhlIGltcG9ydCBibGFuayBsaW5lIQorIworIyB5ZXMsIHdlIHN0YXJ0ZWQgZnJvbSBvdXIgdXN1YWwgYmFzZSBvZiBicmFuY2heMC4KKyMgaSBsaWtlIGJyYW5jaF4wLgorZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisjIGFuZCB3ZSBuZWVkIHRvIHJldXNlIGZpbGUyL2ZpbGU1IGZyb20gTjMgYWJvdmUuCitNIDY0NCBpbmxpbmUgZmlsZTIvZmlsZTUKKyMgb3RoZXJ3aXNlIHRoZSB0cmVlIHdpbGwgYmUgZGlmZmVyZW50CitkYXRhIDw8RU9GCiskZmlsZTVfZGF0YQorRU9GCisKKyMgZG9uJ3QgZm9yZ2V0IHRvIGNvcHkgZmlsZTIgdG8gZmlsZTMKK0MgZmlsZTIgZmlsZTMKKyMKKyMgb3IgdG8gZGVsZXRlIGZpbGU1IGZyb20gZmlsZTIuCitEIGZpbGUyL2ZpbGU1CisjIGFyZSB3ZSBkb25lIHlldD8KKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdPOiBjb21tZW50cyBhcmUgYWxsIHNraXBwZWQnIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSB0ZXN0IGBnaXQgcmV2LXBhcnNlIE4zYCA9IGBnaXQgcmV2LXBhcnNlIE8xYCcKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvTzIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZGlydHkgZGlyZWN0b3J5IGNvcHkKK0NPTU1JVAorZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCitNIDY0NCBpbmxpbmUgZmlsZTIvZmlsZTUKK2RhdGEgPDxFT0YKKyRmaWxlNV9kYXRhCitFT0YKK0MgZmlsZTIgZmlsZTMKK0QgZmlsZTIvZmlsZTUKKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdPOiBibGFuayBsaW5lcyBub3QgbmVjZXNzYXJ5IGFmdGVyIGRhdGEgY29tbWFuZHMnIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSB0ZXN0IGBnaXQgcmV2LXBhcnNlIE4zYCA9IGBnaXQgcmV2LXBhcnNlIE8yYCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ086IHJlcGFjayBiZWZvcmUgbmV4dCB0ZXN0JyBcCisJJ2dpdCByZXBhY2sgLWEgLWQnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL08zCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3pzdHJpbmcKK0NPTU1JVAorY29tbWl0IHJlZnMvaGVhZHMvTzMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorem9mCitDT01NSVQKK2NoZWNrcG9pbnQKK2NvbW1pdCByZWZzL2hlYWRzL08zCittYXJrIDo1Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3plbXB0eQorQ09NTUlUCitjaGVja3BvaW50Citjb21taXQgcmVmcy9oZWFkcy9PMworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit6Y29tbWl0cworQ09NTUlUCityZXNldCByZWZzL3RhZ3MvTzMtMm5kCitmcm9tIDo1CityZXNldCByZWZzL3RhZ3MvTzMtM3JkCitmcm9tIDo1CitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxJTlBVVF9FTkQKK3N0cmluZworb2YKK2VtcHR5Citjb21taXRzCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdPOiBibGFuayBsaW5lcyBub3QgbmVjZXNzYXJ5IGFmdGVyIG90aGVyIGNvbW1hbmRzJyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgdGVzdCA4ID0gYGZpbmQgLmdpdC9vYmplY3RzL3BhY2sgLXR5cGUgZiB8IHdjIC1sYCAmJgorCSB0ZXN0IGBnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9PMy0ybmRgID0gYGdpdCByZXYtcGFyc2UgTzNeYCAmJgorCSBnaXQgbG9nIC0tcmV2ZXJzZSAtLXByZXR0eT1vbmVsaW5lIE8zIHwgc2VkIHMvXi4qei8vID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvTzQKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorenN0cmluZworQ09NTUlUCitjb21taXQgcmVmcy9oZWFkcy9PNAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit6b2YKK0NPTU1JVAorcHJvZ3Jlc3MgVHdvIGNvbW1pdHMgZG93biwgMiB0byBnbyEKK2NvbW1pdCByZWZzL2hlYWRzL080Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3plbXB0eQorQ09NTUlUCitwcm9ncmVzcyBUaHJlZSBjb21taXRzIGRvd24sIDEgdG8gZ28hCitjb21taXQgcmVmcy9oZWFkcy9PNAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit6Y29tbWl0cworQ09NTUlUCitwcm9ncmVzcyBJJ20gZG9uZSEKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ086IHByb2dyZXNzIG91dHB1dHMgYXMgcmVxdWVzdGVkIGJ5IGlucHV0JyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgPmFjdHVhbCAmJgorCSBncmVwICJwcm9ncmVzcyAiIDxpbnB1dCA+ZXhwZWN0ICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKKyMjIworIyMjIHNlcmllcyBQIChnaXRsaW5rcykKKyMjIworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitibG9iCittYXJrIDoxCitkYXRhIDEwCit0ZXN0IGZpbGUKKworcmVzZXQgcmVmcy9oZWFkcy9zdWIKK2NvbW1pdCByZWZzL2hlYWRzL3N1YgorbWFyayA6MgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDEyCitzdWJfaW5pdGlhbAorTSAxMDA2NDQgOjEgZmlsZQorCitibG9iCittYXJrIDozCitkYXRhIDw8REFUQUVORAorW3N1Ym1vZHVsZSAic3ViIl0KKwlwYXRoID0gc3ViCisJdXJsID0gImBwd2RgL3N1YiIKK0RBVEFFTkQKKworY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMQorbWFyayA6NAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDgKK2luaXRpYWwKK2Zyb20gcmVmcy9oZWFkcy9tYXN0ZXIKK00gMTAwNjQ0IDozIC5naXRtb2R1bGVzCitNIDE2MDAwMCA6MiBzdWIKKworYmxvYgorbWFyayA6NQorZGF0YSAyMAordGVzdCBmaWxlCittb3JlIGRhdGEKKworY29tbWl0IHJlZnMvaGVhZHMvc3ViCittYXJrIDo2Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgMTEKK3N1Yl9zZWNvbmQKK2Zyb20gOjIKK00gMTAwNjQ0IDo1IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMQorbWFyayA6NworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDcKK3NlY29uZAorZnJvbSA6NAorTSAxNjAwMDAgOjYgc3ViCisKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUDogc3VwZXJwcm9qZWN0ICYgc3VibW9kdWxlIG1peCcgXAorCSdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCBjaGVja291dCBzdWJ1c2UxICYmCisJIHJtIC1yZiBzdWIgJiYgbWtkaXIgc3ViICYmIChjZCBzdWIgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZ2l0IGZldGNoIC0tdXBkYXRlLWhlYWQtb2sgLi4gcmVmcy9oZWFkcy9zdWI6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlcikgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlJworCitTVUJMQVNUPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWIpCitTVUJQUkVWPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWJeKQorCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitibG9iCittYXJrIDoxCitkYXRhIDw8REFUQUVORAorW3N1Ym1vZHVsZSAic3ViIl0KKwlwYXRoID0gc3ViCisJdXJsID0gImBwd2RgL3N1YiIKK0RBVEFFTkQKKworY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMgorbWFyayA6MgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDgKK2luaXRpYWwKK2Zyb20gcmVmcy9oZWFkcy9tYXN0ZXIKK00gMTAwNjQ0IDoxIC5naXRtb2R1bGVzCitNIDE2MDAwMCAkU1VCUFJFViBzdWIKKworY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMgorbWFyayA6MworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDcKK3NlY29uZAorZnJvbSA6MgorTSAxNjAwMDAgJFNVQkxBU1Qgc3ViCisKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUDogdmVyYmF0aW0gU0hBIGdpdGxpbmtzJyBcCisJJ2dpdCBicmFuY2ggLUQgc3ViICYmCisJIGdpdCBnYyAmJiBnaXQgcHJ1bmUgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSB0ZXN0ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWJ1c2UyKSA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWJ1c2UxKScKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9zdWJ1c2UzCittYXJrIDoxCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvcnJ1cHQKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvc3VidXNlMgorTSAxNjAwMDAgaW5saW5lIHN1YgorZGF0YSA8PERBVEEKKyRTVUJQUkVWCitEQVRBCisKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQOiBmYWlsIG9uIGlubGluZSBnaXRsaW5rJyAnCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCcKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitibG9iCittYXJrIDoxCitkYXRhIDw8REFUQQorJFNVQlBSRVYKK0RBVEEKKworY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMworbWFyayA6MgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb3JydXB0CitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL3N1YnVzZTIKK00gMTYwMDAwIDoxIHN1YgorCitJTlBVVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUDogZmFpbCBvbiBibG9iIG1hcmsgaW4gZ2l0bGluaycgJworICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQnCisKKyMjIworIyMjIHNlcmllcyBRIChub3RlcykKKyMjIworCitub3RlMV9kYXRhPSJUaGUgZmlyc3Qgbm90ZSBmb3IgdGhlIGZpcnN0IGNvbW1pdCIKK25vdGUyX2RhdGE9IlRoZSBmaXJzdCBub3RlIGZvciB0aGUgc2Vjb25kIGNvbW1pdCIKK25vdGUzX2RhdGE9IlRoZSBmaXJzdCBub3RlIGZvciB0aGUgdGhpcmQgY29tbWl0Igorbm90ZTFiX2RhdGE9IlRoZSBzZWNvbmQgbm90ZSBmb3IgdGhlIGZpcnN0IGNvbW1pdCIKK25vdGUxY19kYXRhPSJUaGUgdGhpcmQgbm90ZSBmb3IgdGhlIGZpcnN0IGNvbW1pdCIKK25vdGUyYl9kYXRhPSJUaGUgc2Vjb25kIG5vdGUgZm9yIHRoZSBzZWNvbmQgY29tbWl0IgorCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2Jsb2IKK21hcmsgOjIKK2RhdGEgPDxFT0YKKyRmaWxlMl9kYXRhCitFT0YKKworY29tbWl0IHJlZnMvaGVhZHMvbm90ZXMtdGVzdAorbWFyayA6MworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaXJzdCAoOjMpCitDT01NSVQKKworTSA2NDQgOjIgZmlsZTIKKworYmxvYgorbWFyayA6NAorZGF0YSAkZmlsZTRfbGVuCiskZmlsZTRfZGF0YQorY29tbWl0IHJlZnMvaGVhZHMvbm90ZXMtdGVzdAorbWFyayA6NQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitzZWNvbmQgKDo1KQorQ09NTUlUCisKK00gNjQ0IDo0IGZpbGU0CisKK2NvbW1pdCByZWZzL2hlYWRzL25vdGVzLXRlc3QKK21hcmsgOjYKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAordGhpcmQgKDo2KQorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlNQorZGF0YSA8PEVPRgorJGZpbGU1X2RhdGEKK0VPRgorCitNIDc1NSBpbmxpbmUgZmlsZTYKK2RhdGEgPDxFT0YKKyRmaWxlNl9kYXRhCitFT0YKKworYmxvYgorbWFyayA6NworZGF0YSA8PEVPRgorJG5vdGUxX2RhdGEKK0VPRgorCitibG9iCittYXJrIDo4CitkYXRhIDw8RU9GCiskbm90ZTJfZGF0YQorRU9GCisKK2NvbW1pdCByZWZzL25vdGVzL2Zvb2JhcgorbWFyayA6OQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyAoOjkpCitDT01NSVQKKworTiA6NyA6MworTiA6OCA6NQorTiBpbmxpbmUgOjYKK2RhdGEgPDxFT0YKKyRub3RlM19kYXRhCitFT0YKKworY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyCittYXJrIDoxMAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyAoOjEwKQorQ09NTUlUCisKK04gaW5saW5lIDozCitkYXRhIDw8RU9GCiskbm90ZTFiX2RhdGEKK0VPRgorCitjb21taXQgcmVmcy9ub3Rlcy9mb29iYXIyCittYXJrIDoxMQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyAoOjExKQorQ09NTUlUCisKK04gaW5saW5lIDozCitkYXRhIDw8RU9GCiskbm90ZTFjX2RhdGEKK0VPRgorCitjb21taXQgcmVmcy9ub3Rlcy9mb29iYXIKK21hcmsgOjEyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzICg6MTIpCitDT01NSVQKKworZGVsZXRlYWxsCitOIGlubGluZSA6NQorZGF0YSA8PEVPRgorJG5vdGUyYl9kYXRhCitFT0YKKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiBjb21taXQgbm90ZXMnIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgd2hhdGNoYW5nZWQgbm90ZXMtdGVzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKworY29tbWl0MT0kKGdpdCByZXYtcGFyc2Ugbm90ZXMtdGVzdH4yKQorY29tbWl0Mj0kKGdpdCByZXYtcGFyc2Ugbm90ZXMtdGVzdF4pCitjb21taXQzPSQoZ2l0IHJldi1wYXJzZSBub3Rlcy10ZXN0KQorCitjYXQgPmV4cGVjdCA8PEVPRgorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworZmlyc3QgKDozKQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IGZpcnN0IGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IG5vdGVzLXRlc3R+MiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QgPDxFT0YKK3BhcmVudCAkY29tbWl0MQorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworc2Vjb25kICg6NSkKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBzZWNvbmQgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBjb21taXQgbm90ZXMtdGVzdF4gfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitwYXJlbnQgJGNvbW1pdDIKK2F1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKK3RoaXJkICg6NikKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSB0aGlyZCBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGNvbW1pdCBub3Rlcy10ZXN0IHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitjYXQgPmV4cGVjdCA8PEVPRgorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworbm90ZXMgKDo5KQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IGZpcnN0IG5vdGVzIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyfjIgfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0LnVuc29ydGVkIDw8RU9GCisxMDA2NDQgYmxvYiAkY29tbWl0MQorMTAwNjQ0IGJsb2IgJGNvbW1pdDIKKzEwMDY0NCBibG9iICRjb21taXQzCitFT0YKK2NhdCBleHBlY3QudW5zb3J0ZWQgfCBzb3J0ID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgZmlyc3Qgbm90ZXMgdHJlZScgXAorCSdnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9mb29iYXJ+Ml57dHJlZX0gfCBzZWQgInMvIFswLTlhLWZdKgkvIC8iID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworZWNobyAiJG5vdGUxX2RhdGEiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgZmlyc3Qgbm90ZSBmb3IgZmlyc3QgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyfjI6JGNvbW1pdDEgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkbm90ZTJfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciBzZWNvbmQgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyfjI6JGNvbW1pdDIgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkbm90ZTNfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciB0aGlyZCBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9ub3Rlcy9mb29iYXJ+MjokY29tbWl0MyA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitwYXJlbnQgYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9mb29iYXJ+MmAKK2F1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKK25vdGVzICg6MTApCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgc2Vjb25kIG5vdGVzIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyXiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QudW5zb3J0ZWQgPDxFT0YKKzEwMDY0NCBibG9iICRjb21taXQxCisxMDA2NDQgYmxvYiAkY29tbWl0MgorMTAwNjQ0IGJsb2IgJGNvbW1pdDMKK0VPRgorY2F0IGV4cGVjdC51bnNvcnRlZCB8IHNvcnQgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBzZWNvbmQgbm90ZXMgdHJlZScgXAorCSdnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9mb29iYXJeXnt0cmVlfSB8IHNlZCAicy8gWzAtOWEtZl0qCS8gLyIgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkbm90ZTFiX2RhdGEiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgc2Vjb25kIG5vdGUgZm9yIGZpcnN0IGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2Jhcl46JGNvbW1pdDEgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkbm90ZTJfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciBzZWNvbmQgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyXjokY29tbWl0MiA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRub3RlM19kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IGZpcnN0IG5vdGUgZm9yIHRoaXJkIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2Jhcl46JGNvbW1pdDMgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitjYXQgPmV4cGVjdCA8PEVPRgorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworbm90ZXMgKDoxMSkKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSB0aGlyZCBub3RlcyBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL25vdGVzL2Zvb2JhcjIgfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0LnVuc29ydGVkIDw8RU9GCisxMDA2NDQgYmxvYiAkY29tbWl0MQorRU9GCitjYXQgZXhwZWN0LnVuc29ydGVkIHwgc29ydCA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IHRoaXJkIG5vdGVzIHRyZWUnIFwKKwknZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvZm9vYmFyMl57dHJlZX0gfCBzZWQgInMvIFswLTlhLWZdKgkvIC8iID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworZWNobyAiJG5vdGUxY19kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IHRoaXJkIG5vdGUgZm9yIGZpcnN0IGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2JhcjI6JGNvbW1pdDEgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitjYXQgPmV4cGVjdCA8PEVPRgorcGFyZW50IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvZm9vYmFyXmAKK2F1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKK25vdGVzICg6MTIpCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgZm91cnRoIG5vdGVzIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyIHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitjYXQgPmV4cGVjdC51bnNvcnRlZCA8PEVPRgorMTAwNjQ0IGJsb2IgJGNvbW1pdDIKK0VPRgorY2F0IGV4cGVjdC51bnNvcnRlZCB8IHNvcnQgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmb3VydGggbm90ZXMgdHJlZScgXAorCSdnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9mb29iYXJee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRub3RlMmJfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBzZWNvbmQgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2JhcjokY29tbWl0MiA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+aW5wdXQgPDxFT0YKK3Jlc2V0IHJlZnMvaGVhZHMvUTAKKworY29tbWl0IHJlZnMvaGVhZHMvbm90ZS1RMAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitOb3RlIGZvciBhbiBlbXB0eSBicmFuY2guCitDT01NSVQKKworTiBpbmxpbmUgcmVmcy9oZWFkcy9RMAorZGF0YSA8PE5PVEUKK3NvbWUgbm90ZQorTk9URQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogZGVueSBub3RlIG9uIGVtcHR5IGJyYW5jaCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0JworIyMjCisjIyMgc2VyaWVzIFIgKGZlYXR1cmUgYW5kIG9wdGlvbikKKyMjIworCitjYXQgPmlucHV0IDw8RU9GCitmZWF0dXJlIG5vLXN1Y2gtZmVhdHVyZS1leGlzdHMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBhYm9ydCBvbiB1bnN1cHBvcnRlZCBmZWF0dXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCitjYXQgPmlucHV0IDw8RU9GCitmZWF0dXJlIGRhdGUtZm9ybWF0PW5vdworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHN1cHBvcnRlZCBmZWF0dXJlIGlzIGFjY2VwdGVkJyAnCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCitjYXQgPmlucHV0IDw8IEVPRgorYmxvYgorZGF0YSAzCitoaQorZmVhdHVyZSBkYXRlLWZvcm1hdD1ub3cKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBhYm9ydCBvbiByZWNlaXZpbmcgZmVhdHVyZSBhZnRlciBkYXRhIGNvbW1hbmQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK2NhdCA+aW5wdXQgPDwgRU9GCitmZWF0dXJlIGltcG9ydC1tYXJrcz1naXQubWFya3MKK2ZlYXR1cmUgaW1wb3J0LW1hcmtzPWdpdDIubWFya3MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBvbmx5IG9uZSBpbXBvcnQtbWFya3MgZmVhdHVyZSBhbGxvd2VkIHBlciBzdHJlYW0nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK2NhdCA+aW5wdXQgPDwgRU9GCitmZWF0dXJlIGV4cG9ydC1tYXJrcz1naXQubWFya3MKK2Jsb2IKK21hcmsgOjEKK2RhdGEgMworaGkKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdSOiBleHBvcnQtbWFya3MgZmVhdHVyZSByZXN1bHRzIGluIGEgbWFya3MgZmlsZSBiZWluZyBjcmVhdGVkJyBcCisgICAgJ2NhdCBpbnB1dCB8IGdpdCBmYXN0LWltcG9ydCAmJgorICAgIGdyZXAgOjEgZ2l0Lm1hcmtzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUjogZXhwb3J0LW1hcmtzIG9wdGlvbnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgY29tbWFuZGxpbmUgb3B0aW9ucycgXAorICAgICdjYXQgaW5wdXQgfCBnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9b3RoZXIubWFya3MgJiYKKyAgICBncmVwIDoxIG90aGVyLm1hcmtzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBjYXRjaCB0eXBvIGluIG1hcmtzIGZpbGUgbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1ub25leGlzdGVudC5tYXJrcyA8L2Rldi9udWxsICYmCisJZWNobyAiZmVhdHVyZSBpbXBvcnQtbWFya3M9bm9uZXhpc3RlbnQubWFya3MiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogaW1wb3J0IGFuZCBvdXRwdXQgbWFya3MgY2FuIGJlIHRoZSBzYW1lIGZpbGUnICcKKwlybSAtZiBpby5tYXJrcyAmJgorCWJsb2I9JChlY2hvIGhpIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEgJGJsb2IKKwk6MiAkYmxvYgorCUVPRgorCWdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDMKKwloaQorCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPWlvLm1hcmtzIC0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIDw8LVxFT0YgJiYKKwlibG9iCisJbWFyayA6MgorCWRhdGEgMworCWhpCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgaW8ubWFya3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogLS1pbXBvcnQtbWFya3M9Zm9vIC0tb3V0cHV0LW1hcmtzPWZvbyB0byBjcmVhdGUgZm9vIGZhaWxzJyAnCisJcm0gLWYgaW8ubWFya3MgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9aW8ubWFya3MgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRgorCWJsb2IKKwltYXJrIDoxCisJZGF0YSAzCisJaGkKKworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMnICcKKwlybSAtZiBpby5tYXJrcyAmJgorCWJsb2I9JChlY2hvIGhpIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJZWNobyAiOjEgJGJsb2IiID5leHBlY3QgJiYKKwlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzPWlvLm1hcmtzIC0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIDw8LVxFT0YgJiYKKwlibG9iCisJbWFyayA6MQorCWRhdGEgMworCWhpCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgaW8ubWFya3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzJyAnCisJcm0gLWYgaW8ubWFya3MgJiYKKwk+ZXhwZWN0ICYmCisKKwlnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRiAmJgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1ub3RfaW8ubWFya3MKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgaW8ubWFya3MgJiYKKworCWJsb2I9JChlY2hvIGhpIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisKKwllY2hvICI6MSAkYmxvYiIgPmlvLm1hcmtzICYmCisJZWNobyAiOjEgJGJsb2IiID5leHBlY3QgJiYKKwllY2hvICI6MiAkYmxvYiIgPj5leHBlY3QgJiYKKworCWdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GICYmCisJZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPWlvLm1hcmtzCisJYmxvYgorCW1hcmsgOjIKKwlkYXRhIDMKKwloaQorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGlvLm1hcmtzICYmCisKKwllY2hvICI6MyAkYmxvYiIgPj5leHBlY3QgJiYKKworCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1pby5tYXJrcyBcCisJCQktLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GICYmCisJZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPW5vdF9pby5tYXJrcworCWJsb2IKKwltYXJrIDozCisJZGF0YSAzCisJaGkKKworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBpby5tYXJrcyAmJgorCisJPmV4cGVjdCAmJgorCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1ub3RfaW8ubWFya3MgXAorCQkJLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1pby5tYXJrcworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBpby5tYXJrcworJworCitjYXQgPmlucHV0IDw8IEVPRgorZmVhdHVyZSBpbXBvcnQtbWFya3M9bWFya3Mub3V0CitmZWF0dXJlIGV4cG9ydC1tYXJrcz1tYXJrcy5uZXcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUjogaW1wb3J0IHRvIG91dHB1dCBtYXJrcyB3b3JrcyB3aXRob3V0IGFueSBjb250ZW50JyBcCisgICAgJ2NhdCBpbnB1dCB8IGdpdCBmYXN0LWltcG9ydCAmJgorICAgIHRlc3RfY21wIG1hcmtzLm91dCBtYXJrcy5uZXcnCisKK2NhdCA+aW5wdXQgPDxFT0YKK2ZlYXR1cmUgaW1wb3J0LW1hcmtzPW5vbmV4aXN0ZW50Lm1hcmtzCitmZWF0dXJlIGV4cG9ydC1tYXJrcz1tYXJrcy5uZXcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUjogaW1wb3J0IG1hcmtzIHByZWZlcnMgY29tbWFuZGxpbmUgbWFya3MgZmlsZSBvdmVyIHRoZSBzdHJlYW0nIFwKKyAgICAnY2F0IGlucHV0IHwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzLm91dCAmJgorICAgIHRlc3RfY21wIG1hcmtzLm91dCBtYXJrcy5uZXcnCisKKworY2F0ID5pbnB1dCA8PEVPRgorZmVhdHVyZSBpbXBvcnQtbWFya3M9bm9uZXhpc3RlbnQubWFya3MKK2ZlYXR1cmUgZXhwb3J0LW1hcmtzPWNvbWJpbmVkLm1hcmtzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogbXVsdGlwbGUgLS1pbXBvcnQtbWFya3M9IHNob3VsZCBiZSBob25vdXJlZCcgJworICAgIGhlYWQgLW4yIG1hcmtzLm91dCA+IG9uZS5tYXJrcyAmJgorICAgIHRhaWwgLW4gKzMgbWFya3Mub3V0ID4gdHdvLm1hcmtzICYmCisgICAgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW9uZS5tYXJrcyAtLWltcG9ydC1tYXJrcz10d28ubWFya3MgPGlucHV0ICYmCisgICAgdGVzdF9jbXAgbWFya3Mub3V0IGNvbWJpbmVkLm1hcmtzCisnCisKK2NhdCA+aW5wdXQgPDxFT0YKK2ZlYXR1cmUgcmVsYXRpdmUtbWFya3MKK2ZlYXR1cmUgaW1wb3J0LW1hcmtzPXJlbGF0aXZlLmluCitmZWF0dXJlIGV4cG9ydC1tYXJrcz1yZWxhdGl2ZS5vdXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBmZWF0dXJlIHJlbGF0aXZlLW1hcmtzIHNob3VsZCBiZSBob25vdXJlZCcgJworICAgIG1rZGlyIC1wIC5naXQvaW5mby9mYXN0LWltcG9ydC8gJiYKKyAgICBjcCBtYXJrcy5uZXcgLmdpdC9pbmZvL2Zhc3QtaW1wb3J0L3JlbGF0aXZlLmluICYmCisgICAgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorICAgIHRlc3RfY21wIG1hcmtzLm5ldyAuZ2l0L2luZm8vZmFzdC1pbXBvcnQvcmVsYXRpdmUub3V0CisnCisKK2NhdCA+aW5wdXQgPDxFT0YKK2ZlYXR1cmUgcmVsYXRpdmUtbWFya3MKK2ZlYXR1cmUgaW1wb3J0LW1hcmtzPXJlbGF0aXZlLmluCitmZWF0dXJlIG5vLXJlbGF0aXZlLW1hcmtzCitmZWF0dXJlIGV4cG9ydC1tYXJrcz1ub24tcmVsYXRpdmUub3V0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZmVhdHVyZSBuby1yZWxhdGl2ZS1tYXJrcyBzaG91bGQgYmUgaG9ub3VyZWQnICcKKyAgICBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisgICAgdGVzdF9jbXAgbWFya3MubmV3IG5vbi1yZWxhdGl2ZS5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZmVhdHVyZSBscyBzdXBwb3J0ZWQnICcKKwllY2hvICJmZWF0dXJlIGxzIiB8CisJZ2l0IGZhc3QtaW1wb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGZlYXR1cmUgY2F0LWJsb2Igc3VwcG9ydGVkJyAnCisJZWNobyAiZmVhdHVyZSBjYXQtYmxvYiIgfAorCWdpdCBmYXN0LWltcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBjYXQtYmxvYi1mZCBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPS0xIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOT1RfTUlOR1cgJ1I6IHByaW50IG9sZCBibG9iJyAnCisJYmxvYj0kKGVjaG8gInllcyBpdCBjYW4iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJHtibG9ifSBibG9iIDExCisJeWVzIGl0IGNhbgorCisJRU9GCisJZWNobyAiY2F0LWJsb2IgJGJsb2IiIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD02IDY+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE5PVF9NSU5HVyAnUjogaW4tc3RyZWFtIGNhdC1ibG9iLWZkIG5vdCByZXNwZWN0ZWQnICcKKwllY2hvIGhlbGxvID5ncmVldGluZyAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgZ3JlZXRpbmcpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJHtibG9ifSBibG9iIDYKKwloZWxsbworCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmFjdHVhbC4zID5hY3R1YWwuMSA8PC1FT0YgJiYKKwljYXQtYmxvYiAkYmxvYgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuMyAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbC4xICYmCisJZ2l0IGZhc3QtaW1wb3J0IDM+YWN0dWFsLjMgPmFjdHVhbC4xIDw8LUVPRiAmJgorCW9wdGlvbiBjYXQtYmxvYi1mZD0zCisJY2F0LWJsb2IgJGJsb2IKKwlFT0YKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwuMyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE5PVF9NSU5HVyAnUjogcHJpbnQgbmV3IGJsb2InICcKKwlibG9iPSQoZWNobyAieWVwIHllcCB5ZXAiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJHtibG9ifSBibG9iIDEyCisJeWVwIHllcCB5ZXAKKworCUVPRgorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTYgNj5hY3R1YWwgPDwtXEVPRiAmJgorCWJsb2IKKwltYXJrIDoxCisJZGF0YSA8PEJMT0JfRU5ECisJeWVwIHllcCB5ZXAKKwlCTE9CX0VORAorCWNhdC1ibG9iIDoxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE5PVF9NSU5HVyAnUjogcHJpbnQgbmV3IGJsb2IgYnkgc2hhMScgJworCWJsb2I9JChlY2hvICJhIG5ldyBibG9iIG5hbWVkIGJ5IHNoYTEiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJHtibG9ifSBibG9iIDI1CisJYSBuZXcgYmxvYiBuYW1lZCBieSBzaGExCisKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD02IDY+YWN0dWFsIDw8LUVPRiAmJgorCWJsb2IKKwlkYXRhIDw8QkxPQl9FTkQKKwlhIG5ldyBibG9iIG5hbWVkIGJ5IHNoYTEKKwlCTE9CX0VORAorCWNhdC1ibG9iICRibG9iCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogYmlnIGZpbGUnICcKKwkoCisJCWVjaG8gInRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2ciID5iaWcgJiYKKwkJZm9yIGkgaW4gMSAyIDMKKwkJZG8KKwkJCWNhdCBiaWcgYmlnIGJpZyBiaWcgPmJpZ2dlciAmJgorCQkJY2F0IGJpZ2dlciBiaWdnZXIgYmlnZ2VyIGJpZ2dlciA+YmlnIHx8CisJCQlleGl0CisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHByaW50IHR3byBibG9icyB0byBzdGRvdXQnICcKKwlibG9iMT0kKGdpdCBoYXNoLW9iamVjdCBiaWcpICYmCisJYmxvYjFfbGVuPSQod2MgLWMgPGJpZykgJiYKKwlibG9iMj0kKGVjaG8gaGVsbG8gfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwl7CisJCWVjaG8gJHtibG9iMX0gYmxvYiAkYmxvYjFfbGVuICYmCisJCWNhdCBiaWcgJiYKKwkJY2F0IDw8LUVPRgorCisJCSR7YmxvYjJ9IGJsb2IgNgorCQloZWxsbworCisJCUVPRgorCX0gPmV4cGVjdCAmJgorCXsKKwkJY2F0IDw8LVxFTkRfUEFSVDEgJiYKKwkJCWJsb2IKKwkJCW1hcmsgOjEKKwkJCWRhdGEgPDxkYXRhX2VuZAorCQlFTkRfUEFSVDEKKwkJY2F0IGJpZyAmJgorCQljYXQgPDwtXEVPRgorCQkJZGF0YV9lbmQKKwkJCWJsb2IKKwkJCW1hcmsgOjIKKwkJCWRhdGEgPDxkYXRhX2VuZAorCQkJaGVsbG8KKwkJCWRhdGFfZW5kCisJCQljYXQtYmxvYiA6MQorCQkJY2F0LWJsb2IgOjIKKwkJRU9GCisJfSB8CisJZ2l0IGZhc3QtaW1wb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnUjogY29weSB1c2luZyBjYXQtZmlsZScgJworCWV4cGVjdF9pZD0kKGdpdCBoYXNoLW9iamVjdCBiaWcpICYmCisJZXhwZWN0X2xlbj0kKHdjIC1jIDxiaWcpICYmCisJZWNobyAkZXhwZWN0X2lkIGJsb2IgJGV4cGVjdF9sZW4gPmV4cGVjdC5yZXNwb25zZSAmJgorCisJcm0gLWYgYmxvYnMgJiYKKwljYXQgPmZyb250ZW5kIDw8LVxGUk9OVEVORF9FTkQgJiYKKwkjIS9iaW4vc2gKKwlGUk9OVEVORF9FTkQKKworCW1rZmlmbyBibG9icyAmJgorCSgKKwkJZXhwb3J0IEdJVF9DT01NSVRURVJfTkFNRSBHSVRfQ09NTUlUVEVSX0VNQUlMIEdJVF9DT01NSVRURVJfREFURSAmJgorCQljYXQgPDwtXEVPRiAmJgorCQlmZWF0dXJlIGNhdC1ibG9iCisJCWJsb2IKKwkJbWFyayA6MQorCQlkYXRhIDw8QkxPQgorCQlFT0YKKwkJY2F0IGJpZyAmJgorCQljYXQgPDwtXEVPRiAmJgorCQlCTE9CCisJCWNhdC1ibG9iIDoxCisJCUVPRgorCisJCXJlYWQgYmxvYl9pZCB0eXBlIHNpemUgPCYzICYmCisJCWVjaG8gIiRibG9iX2lkICR0eXBlICRzaXplIiA+cmVzcG9uc2UgJiYKKwkJaGVhZF9jICRzaXplID5ibG9iIDwmMyAmJgorCQlyZWFkIG5ld2xpbmUgPCYzICYmCisKKwkJY2F0IDw8LUVPRiAmJgorCQljb21taXQgcmVmcy9oZWFkcy9jb3BpZWQKKwkJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJCWRhdGEgPDxDT01NSVQKKwkJY29weSBiaWcgZmlsZSBhcyBmaWxlMworCQlDT01NSVQKKwkJTSA2NDQgaW5saW5lIGZpbGUzCisJCWRhdGEgPDxCTE9CCisJCUVPRgorCQljYXQgYmxvYiAmJgorCQllY2hvIEJMT0IKKwkpIDM8YmxvYnMgfAorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTMgMz5ibG9icyAmJgorCWdpdCBzaG93IGNvcGllZDpmaWxlMyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnJlc3BvbnNlIHJlc3BvbnNlICYmCisJdGVzdF9jbXAgYmlnIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ1I6IHByaW50IGJsb2IgbWlkLWNvbW1pdCcgJworCXJtIC1mIGJsb2JzICYmCisJZWNobyAiQSBibG9iIGZyb20gX2JlZm9yZV8gdGhlIGNvbW1pdC4iID5leHBlY3QgJiYKKwlta2ZpZm8gYmxvYnMgJiYKKwkoCisJCWV4ZWMgMzxibG9icyAmJgorCQljYXQgPDwtRU9GICYmCisJCWZlYXR1cmUgY2F0LWJsb2IKKwkJYmxvYgorCQltYXJrIDoxCisJCWRhdGEgPDxCTE9CCisJCUEgYmxvYiBmcm9tIF9iZWZvcmVfIHRoZSBjb21taXQuCisJCUJMT0IKKwkJY29tbWl0IHJlZnMvaGVhZHMvdGVtcG9yYXJ5CisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCUVtcHR5IGNvbW1pdAorCQlDT01NSVQKKwkJY2F0LWJsb2IgOjEKKwkJRU9GCisKKwkJcmVhZCBibG9iX2lkIHR5cGUgc2l6ZSA8JjMgJiYKKwkJaGVhZF9jICRzaXplID5hY3R1YWwgPCYzICYmCisJCXJlYWQgbmV3bGluZSA8JjMgJiYKKworCQllY2hvCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmJsb2JzICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ1I6IHByaW50IHN0YWdlZCBibG9iIHdpdGhpbiBjb21taXQnICcKKwlybSAtZiBibG9icyAmJgorCWVjaG8gIkEgYmxvYiBmcm9tIF93aXRoaW5fIHRoZSBjb21taXQuIiA+ZXhwZWN0ICYmCisJbWtmaWZvIGJsb2JzICYmCisJKAorCQlleGVjIDM8YmxvYnMgJiYKKwkJY2F0IDw8LUVPRiAmJgorCQlmZWF0dXJlIGNhdC1ibG9iCisJCWNvbW1pdCByZWZzL2hlYWRzL3dpdGhpbgorCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZGF0YSA8PENPTU1JVAorCQlFbXB0eSBjb21taXQKKwkJQ09NTUlUCisJCU0gNjQ0IGlubGluZSB3aXRoaW4KKwkJZGF0YSA8PEJMT0IKKwkJQSBibG9iIGZyb20gX3dpdGhpbl8gdGhlIGNvbW1pdC4KKwkJQkxPQgorCQlFT0YKKworCQl0b19nZXQ9JCgKKwkJCWVjaG8gIkEgYmxvYiBmcm9tIF93aXRoaW5fIHRoZSBjb21taXQuIiB8CisJCQlnaXQgaGFzaC1vYmplY3QgLS1zdGRpbgorCQkpICYmCisJCWVjaG8gImNhdC1ibG9iICR0b19nZXQiICYmCisKKwkJcmVhZCBibG9iX2lkIHR5cGUgc2l6ZSA8JjMgJiYKKwkJaGVhZF9jICRzaXplID5hY3R1YWwgPCYzICYmCisJCXJlYWQgbmV3bGluZSA8JjMgJiYKKworCQllY2hvIGRlbGV0ZWFsbAorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTMgMz5ibG9icyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5pbnB1dCA8PCBFT0YKK29wdGlvbiBnaXQgcXVpZXQKK2Jsb2IKK2RhdGEgMworaGkKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHF1aWV0IG9wdGlvbiByZXN1bHRzIGluIG5vIHN0YXRzIGJlaW5nIG91dHB1dCcgJworICAgIGNhdCBpbnB1dCB8IGdpdCBmYXN0LWltcG9ydCAyPiBvdXRwdXQgJiYKKyAgICB0ZXN0X2NtcCBlbXB0eSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZmVhdHVyZSBkb25lIG1lYW5zIHRlcm1pbmF0aW5nICJkb25lIiBpcyBtYW5kYXRvcnknICcKKwllY2hvIGZlYXR1cmUgZG9uZSB8IHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWRvbmUgPC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiB0ZXJtaW5hdGluZyAiZG9uZSIgd2l0aCB0cmFpbGluZyBnaWJiZXJpc2ggaXMgb2snICcKKwlnaXQgZmFzdC1pbXBvcnQgPDwtXEVPRiAmJgorCWZlYXR1cmUgZG9uZQorCWRvbmUKKwl0cmFpbGluZyBnaWJiZXJpc2gKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgPDwtXEVPRgorCWRvbmUKKwltb3JlIHRyYWlsaW5nIGdpYmJlcmlzaAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiB0ZXJtaW5hdGluZyAiZG9uZSIgd2l0aGluIGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJaGVsbG8uYworCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJaGVsbG8yLmMKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgPDwtRU9GICYmCisJY29tbWl0IHJlZnMvaGVhZHMvZG9uZS1lbmRzCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PEVPVAorCUNvbW1pdCB0ZXJtaW5hdGVkIGJ5ICJkb25lIiBjb21tYW5kCisJRU9UCisJTSAxMDA2NDQgaW5saW5lIGhlbGxvLmMKKwlkYXRhIDw8RU9UCisJSGVsbG8sIHdvcmxkLgorCUVPVAorCUMgaGVsbG8uYyBoZWxsbzIuYworCWRvbmUKKwlFT0YKKwlnaXQgcmV2LWxpc3QgZG9uZS1lbmRzIHwKKwlnaXQgZGlmZi10cmVlIC1yIC0tc3RkaW4gLS1yb290IC0tYWx3YXlzIHwKKwlzZWQgLWUgInMvJF94NDAvT0JKSUQvZyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5pbnB1dCA8PEVPRgorb3B0aW9uIGdpdCBub24tZXhpc3Rpbmctb3B0aW9uCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZGllIG9uIHVua25vd24gb3B0aW9uJyAnCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiB1bmtub3duIGNvbW1hbmRsaW5lIG9wdGlvbnMgYXJlIHJlamVjdGVkJyAnXAorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLW5vbi1leGlzdGluZy1vcHRpb24gPCAvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZGllIG9uIGludmFsaWQgb3B0aW9uIGFyZ3VtZW50JyAnCisJZWNobyAib3B0aW9uIGdpdCBhY3RpdmUtYnJhbmNoZXM9LTUiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgJiYKKwllY2hvICJvcHRpb24gZ2l0IGRlcHRoPSIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWRlcHRoPSI1IGVsZXBoYW50cyIgPC9kZXYvbnVsbAorJworCitjYXQgPmlucHV0IDw8RU9GCitvcHRpb24gbm9uLWV4aXN0aW5nLXZjcyBub24tZXhpc3Rpbmctb3B0aW9uCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogaWdub3JlIG5vbi1naXQgb3B0aW9ucycgJworICAgIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKworIyMKKyMjIFI6IHZlcnkgbGFyZ2UgYmxvYnMKKyMjCitibG9ic2l6ZT0kKCgyKjEwMjQqMTAyNCArIDUzKSkKK3Rlc3QtZ2VucmFuZG9tIGJhciAkYmxvYnNpemUgPmV4cGVjdAorY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvYmlnLWZpbGUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorUiAtIGJpZyBmaWxlCitDT01NSVQKKworTSA2NDQgaW5saW5lIGJpZzEKK2RhdGEgJGJsb2JzaXplCitJTlBVVF9FTkQKK2NhdCBleHBlY3QgPj5pbnB1dAorY2F0ID4+aW5wdXQgPDxJTlBVVF9FTkQKK00gNjQ0IGlubGluZSBiaWcyCitkYXRhICRibG9ic2l6ZQorSU5QVVRfRU5ECitjYXQgZXhwZWN0ID4+aW5wdXQKK2VjaG8gPj5pbnB1dAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUjogYmxvYiBiaWdnZXIgdGhhbiB0aHJlc2hvbGQnIFwKKwkndGVzdF9jcmVhdGVfcmVwbyBSICYmCisJIGdpdCAtLWdpdC1kaXI9Ui8uZ2l0IGZhc3QtaW1wb3J0IC0tYmlnLWZpbGUtdGhyZXNob2xkPTEgPGlucHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiB2ZXJpZnkgY3JlYXRlZCBwYWNrJyAnCisJKAorCQljZCBSICYmCisJCXZlcmlmeV9wYWNrcyAtdiA+IC4uL3ZlcmlmeQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1I6IHZlcmlmeSB3cml0dGVuIG9iamVjdHMnIFwKKwknZ2l0IC0tZ2l0LWRpcj1SLy5naXQgY2F0LWZpbGUgYmxvYiBiaWctZmlsZTpiaWcxID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCSBhPSQoZ2l0IC0tZ2l0LWRpcj1SLy5naXQgcmV2LXBhcnNlIGJpZy1maWxlOmJpZzEpICYmCisJIGI9JChnaXQgLS1naXQtZGlyPVIvLmdpdCByZXYtcGFyc2UgYmlnLWZpbGU6YmlnMikgJiYKKwkgdGVzdCAkYSA9ICRiJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1I6IGJsb2IgYXBwZWFycyBvbmx5IG9uY2UnIFwKKwknbj0kKGdyZXAgJGEgdmVyaWZ5IHwgd2MgLWwpICYmCisJIHRlc3QgMSA9ICRuJworCisjIyMKKyMjIyBzZXJpZXMgUworIyMjCisjCisjIE1ha2Ugc3VyZSBtaXNzaW5nIHNwYWNlcyBhbmQgRU9McyBhZnRlciBtYXJrIHJlZmVyZW5jZXMKKyMgY2F1c2UgZXJyb3JzLgorIworIyBTZXR1cDoKKyMKKyMgICAxLS0yLS00CisjICAgIFwgICAvCisjICAgICAtMy0KKyMKKyMgICBjb21taXQgbWFya3M6ICAzMDEsIDMwMiwgMzAzLCAzMDQKKyMgICBibG9iIG1hcmtzOiAgICAgICAgICAgICAgNDAzLCA0MDQsIHJlc3AuCisjICAgbm90ZSBtYXJrOiAgICAgICAgICAyMDIKKyMKKyMgVGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiBhIHNwYWNlIGlzIG1pc3Npbmcgbm90IGF0IHRoZQorIyBlbmQgb2YgdGhlIGxpbmUgaXM6CisjCisjICAgTWlzc2luZyBzcGFjZSBhZnRlciAuLgorIworIyBvciB3aGVuIGV4dHJhIGNoYXJhY3RlcnMgY29tZSBhZnRlciB0aGUgbWFyayBhdCB0aGUgZW5kCisjIG9mIHRoZSBsaW5lOgorIworIyAgIEdhcmJhZ2UgYWZ0ZXIgLi4KKyMKKyMgb3Igd2hlbiB0aGUgZGF0YXJlZiBpcyBuZWl0aGVyICJpbmxpbmUgIiBvciBhIGtub3duIFNIQTEsCisjCisjICAgSW52YWxpZCBkYXRhcmVmIC4uCisjCit0ZXN0X3RpY2sKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvUworbWFyayA6MzAxCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdCAxCitDT01NSVQKK00gMTAwNjQ0IGlubGluZSBoZWxsby5jCitkYXRhIDw8QkxPQgorYmxvYiAxCitCTE9CCisKK2NvbW1pdCByZWZzL2hlYWRzL1MKK21hcmsgOjMwMgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgMgorQ09NTUlUCitmcm9tIDozMDEKK00gMTAwNjQ0IGlubGluZSBoZWxsby5jCitkYXRhIDw8QkxPQgorYmxvYiAyCitCTE9CCisKK2Jsb2IKK21hcmsgOjQwMworZGF0YSA8PEJMT0IKK2Jsb2IgMworQkxPQgorCitibG9iCittYXJrIDoyMDIKK2RhdGEgPDxCTE9CCitub3RlIDIKK0JMT0IKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBpbml0aWFsaXplIGZvciBTIHRlc3RzJyAnCisJZ2l0IGZhc3QtaW1wb3J0IC0tZXhwb3J0LW1hcmtzPW1hcmtzIDxpbnB1dAorJworCisjCisjIGZpbGVtb2RpZnksIHRocmVlIGRhdGFyZWZzCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBmaWxlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljb21taXQgcmVmcy9oZWFkcy9TCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCBOCisJQ09NTUlUCisJTSAxMDA2NDQgOjQwM3ggaGVsbG8uYworCUVPRgorCWNhdCBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciBtYXJrIiBlcnIKKycKKworIyBpbmxpbmUgaXMgbWlzc3BlbGxlZDsgZmFzdC1pbXBvcnQgdGhpbmtzIGl0IGlzIHNvbWUgdW5rbm93biBkYXRhcmVmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBmaWxlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBpbmxpbmUgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IE4KKwlDT01NSVQKKwlNIDEwMDY0NCBpbmxpbmVYIGhlbGxvLmMKKwlkYXRhIDw8QkxPQgorCWlubGluZQorCUJMT0IKKwlFT0YKKwljYXQgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibnZhbGlkIGRhdGFyZWYiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBmaWxlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBzaGExIG11c3QgZmFpbCcgJworCXNoYTE9JChncmVwIDo0MDMgbWFya3MgfCBjdXQgLWRcICAtZjIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IE4KKwlDT01NSVQKKwlNIDEwMDY0NCAke3NoYTF9eCBoZWxsby5jCisJRU9GCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgInNwYWNlIGFmdGVyIFNIQTEiIGVycgorJworCisjCisjIG5vdGVtb2RpZnksIHRocmVlIHdheXMgdG8gc2F5IGRhdGFyZWYKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IG5vdGVtb2RpZnkgd2l0aCBnYXJhYmdlIGFmdGVyIG1hcmsgZGF0YXJlZiBtdXN0IGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJY29tbWl0IHJlZnMvaGVhZHMvUworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgUyBub3RlIGRhdGFyZWYgbWFya3JlZgorCUNPTU1JVAorCU4gOjIwMnggOjMwMgorCUVPRgorCWNhdCBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciBtYXJrIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbm90ZW1vZGlmeSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgaW5saW5lIGRhdGFyZWYgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IFMgbm90ZSBkYXRhcmVmIGlubGluZQorCUNPTU1JVAorCU4gaW5saW5lWCA6MzAyCisJZGF0YSA8PEJMT0IKKwlub3RlIGJsb2IKKwlCTE9CCisJRU9GCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgIm52YWxpZCBkYXRhcmVmIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbm90ZW1vZGlmeSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgc2hhMSBkYXRhcmVmIG11c3QgZmFpbCcgJworCXNoYTE9JChncmVwIDoyMDIgbWFya3MgfCBjdXQgLWRcICAtZjIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IFMgbm90ZSBkYXRhcmVmIHNoYTEKKwlDT01NSVQKKwlOICR7c2hhMX14IDozMDIKKwlFT0YKKwljYXQgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAic3BhY2UgYWZ0ZXIgU0hBMSIgZXJyCisnCisKKyMKKyMgbm90ZW1vZGlmeSwgbWFyayBpbiBjb21taXR0aXNoCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBub3RlbW9kaWZ5IHdpdGggZ2FyYmFyZ2UgYWZ0ZXIgbWFyayBjb21taXR0aXNoIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljb21taXQgcmVmcy9oZWFkcy9Tbm90ZXMKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IFMgbm90ZSBjb21taXR0aXNoCisJQ09NTUlUCisJTiA6MjAyIDozMDJ4CisJRU9GCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImFmdGVyIG1hcmsiIGVycgorJworCisjCisjIGZyb20KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IGZyb20gd2l0aCBnYXJiYWdlIGFmdGVyIG1hcmsgbXVzdCBmYWlsJyAnCisJIyBubyAmJgorCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyAtLWV4cG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIKKwljb21taXQgcmVmcy9oZWFkcy9TMgorCW1hcmsgOjMwMworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgMworCUNPTU1JVAorCWZyb20gOjMwMXgKKwlNIDEwMDY0NCA6NDAzIGhlbGxvLmMKKwlFT0YKKworCXJldD0kPyAmJgorCWVjaG8gcmV0dXJuZWQgJHJldCAmJgorCXRlc3QgJHJldCAtbmUgMCAmJiAjIGZhaWxlZCwgYnV0IGl0IGNyZWF0ZWQgdGhlIGNvbW1pdAorCisJIyBnbyBjcmVhdGUgdGhlIGNvbW1pdCwgbmVlZCBpdCBmb3IgbWVyZ2UgdGVzdAorCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyAtLWV4cG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgJiYKKwljb21taXQgcmVmcy9oZWFkcy9TMgorCW1hcmsgOjMwMworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgMworCUNPTU1JVAorCWZyb20gOjMwMQorCU0gMTAwNjQ0IDo0MDMgaGVsbG8uYworCUVPRgorCisJIyBub3cgZXZhbHVhdGUgdGhlIGVycm9yCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImFmdGVyIG1hcmsiIGVycgorJworCisKKyMKKyMgbWVyZ2UKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IG1lcmdlIHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljb21taXQgcmVmcy9oZWFkcy9TCisJbWFyayA6MzA0CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCW1lcmdlIDQKKwlDT01NSVQKKwlmcm9tIDozMDIKKwltZXJnZSA6MzAzeAorCU0gMTAwNjQ0IDo0MDMgaGVsbG8uYworCUVPRgorCWNhdCBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJhZnRlciBtYXJrIiBlcnIKKycKKworIworIyB0YWcsIGZyb20gbWFya3JlZgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogdGFnIHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwl0YWcgcmVmcy90YWdzL1N0YWcKKwlmcm9tIDozMDJ4CisJdGFnZ2VyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PFRBRworCXRhZyBTCisJVEFHCisJRU9GCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImFmdGVyIG1hcmsiIGVycgorJworCisjCisjIGNhdC1ibG9iIG1hcmtyZWYKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IGNhdC1ibG9iIHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljYXQtYmxvYiA6NDAzeAorCUVPRgorCWNhdCBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJhZnRlciBtYXJrIiBlcnIKKycKKworIworIyBscyBtYXJrcmVmCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBscyB3aXRoIGdhcmJhZ2UgYWZ0ZXIgbWFyayBtdXN0IGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJbHMgOjMwMnggaGVsbG8uYworCUVPRgorCWNhdCBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciBtYXJrIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbHMgd2l0aCBnYXJiYWdlIGFmdGVyIHNoYTEgbXVzdCBmYWlsJyAnCisJc2hhMT0kKGdyZXAgOjMwMiBtYXJrcyB8IGN1dCAtZFwgIC1mMikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJbHMgJHtzaGExfXggaGVsbG8uYworCUVPRgorCWNhdCBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciB0cmVlLWlzaCIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTMwMS1mYXN0LWltcG9ydC1ub3Rlcy5zaCBiL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODNhY2Y2OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2gKQEAgLTAsMCArMSw2ODIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSm9oYW4gSGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCBmYXN0LWltcG9ydCBvZiBub3RlcyBvYmplY3RzJworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZmlyc3QgY29tbWl0CitDT01NSVQKKworTSA2NDQgaW5saW5lIGZvbworZGF0YSA8PEVPRgorZmlsZSBmb28gaW4gZmlyc3QgY29tbWl0CitFT0YKKworTSA3NTUgaW5saW5lIGJhcgorZGF0YSA8PEVPRgorZmlsZSBiYXIgaW4gZmlyc3QgY29tbWl0CitFT0YKKworTSA2NDQgaW5saW5lIGJhei94eXp6eQorZGF0YSA8PEVPRgorZmlsZSBiYXoveHl6enkgaW4gZmlyc3QgY29tbWl0CitFT0YKKworY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3NlY29uZCBjb21taXQKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZm9vCitkYXRhIDw8RU9GCitmaWxlIGZvbyBpbiBzZWNvbmQgY29tbWl0CitFT0YKKworTSA3NTUgaW5saW5lIGJhei94eXp6eQorZGF0YSA8PEVPRgorZmlsZSBiYXoveHl6enkgaW4gc2Vjb25kIGNvbW1pdAorRU9GCisKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit0aGlyZCBjb21taXQKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZm9vCitkYXRhIDw8RU9GCitmaWxlIGZvbyBpbiB0aGlyZCBjb21taXQKK0VPRgorCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZm91cnRoIGNvbW1pdAorQ09NTUlUCisKK00gNzU1IGlubGluZSBiYXIKK2RhdGEgPDxFT0YKK2ZpbGUgYmFyIGluIGZvdXJ0aCBjb21taXQKK0VPRgorCitJTlBVVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1hc3RlciBicmFuY2gnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgd2hhdGNoYW5nZWQgbWFzdGVyCisnCisKK2NvbW1pdDQ9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKQorY29tbWl0Mz0kKGdpdCByZXYtcGFyc2UgIiRjb21taXQ0XiIpCitjb21taXQyPSQoZ2l0IHJldi1wYXJzZSAiJGNvbW1pdDR+MiIpCitjb21taXQxPSQoZ2l0IHJldi1wYXJzZSAiJGNvbW1pdDR+MyIpCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaXJzdCBub3RlcyBjb21taXQKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK2ZpcnN0IG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRU9GCisKK00gNzU1IGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgorZmlyc3Qgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorRU9GCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBjb21taXQKKyAgICBmaXJzdCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG5vdGVzIHdpdGggc2ltcGxlIE0gY29tbWFuZCcgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitmZWF0dXJlIG5vdGVzCitjb21taXQgcmVmcy9ub3Rlcy90ZXN0Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3NlY29uZCBub3RlcyBjb21taXQKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvdGVzdF4wCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgorZmlyc3Qgbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDQKK2RhdGEgPDxFT0YKK2ZpcnN0IG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgZm91cnRoIGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBmaXJzdCBub3RlIGZvciB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgY29tbWl0CisgICAgZmlyc3Qgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbm90ZXMgd2l0aCBzaW1wbGUgTiBjb21tYW5kJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL3Rlc3QgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL3Rlc3QKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAordGhpcmQgbm90ZXMgY29tbWl0CitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL3Rlc3ReMAorTiBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK3NlY29uZCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgorc2Vjb25kIG5vdGUgZm9yIHNlY29uZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgorc2Vjb25kIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQ0CitkYXRhIDw8RU9GCitzZWNvbmQgbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorRU9GCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgc2Vjb25kIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgbm90ZSBmb3IgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIHNlY29uZCBub3RlIGZvciBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CisgICAgc2Vjb25kIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZXhpc3Rpbmcgbm90ZXMgd2l0aCBOIGNvbW1hbmQnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmb3VydGggbm90ZXMgY29tbWl0CitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL3Rlc3ReMAorTSA2NDQgaW5saW5lICQoZWNobyAiJGNvbW1pdDMiIHwgc2VkICJzfF4uLnwmL3wiKQorZGF0YSA8PEVPRgorcHJlZml4IG9mIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK00gNjQ0IGlubGluZSAkKGVjaG8gIiRjb21taXQ0IiB8IHNlZCAic3xeLi58Ji98IikKK2RhdGEgPDxFT0YKK3ByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0CitFT0YKKworTSA2NDQgaW5saW5lICQoZWNobyAiJGNvbW1pdDQiIHwgc2VkICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCIpCitkYXRhIDw8RU9GCitwcmUtcHJlZml4IG9mIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDIKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIHNlY29uZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDQKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCisKK0lOUFVUX0VORAorCit3aGl0ZXNwYWNlPSIgICAgIgorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgcHJlLXByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0Ciskd2hpdGVzcGFjZQorICAgIHByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0Ciskd2hpdGVzcGFjZQorICAgIHRoaXJkIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBwcmVmaXggb2Ygbm90ZSBmb3IgdGhpcmQgY29tbWl0Ciskd2hpdGVzcGFjZQorICAgIHRoaXJkIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBjb21taXQKKyAgICB0aGlyZCBub3RlIGZvciBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CisgICAgdGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBjb25jYXRlbnRhdGlvbiBub3RlcyB3aXRoIE0gY29tbWFuZCcgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy90ZXN0Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2ZpZnRoIG5vdGVzIGNvbW1pdAorQ09NTUlUCisKK2Zyb20gcmVmcy9ub3Rlcy90ZXN0XjAKK2RlbGV0ZWFsbAorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgZm91cnRoIGNvbW1pdAorICAgIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBjb21taXQKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgZGVsZXRlYWxsIGFsc28gcmVtb3ZlcyBub3RlcycgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy90ZXN0Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3NpeHRoIG5vdGVzIGNvbW1pdAorQ09NTUlUCisKK2Zyb20gcmVmcy9ub3Rlcy90ZXN0XjAKK00gNjQ0IGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFT0YKKworTSA2NDQgaW5saW5lICRjb21taXQzCitkYXRhIDw8RU9GCit0aGlyZCBub3RlIGZvciB0aGlyZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgorZm91cnRoIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQzCitkYXRhIDw8RU9GCitmb3VydGggbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworSU5QVVRfRU5ECisKK2NhdCA+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBmb3VydGggbm90ZSBmb3IgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IGNvbW1pdAorICAgIGZvdXJ0aCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbGF0ZXIgTiBjb21tYW5kcyBvdmVycmlkZSBlYXJsaWVyIE0gY29tbWFuZHMnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKKyMgV3JpdGUgZmFzdC1pbXBvcnQgY29tbWFuZHMgdG8gY3JlYXRlIHRoZSBnaXZlbiBudW1iZXIgb2YgY29tbWl0cworZmFzdF9pbXBvcnRfY29tbWl0cyAoKSB7CisJbXlfcmVmPSQxCisJbXlfbnVtX2NvbW1pdHM9JDIKKwlteV9hcHBlbmRfdG9fZmlsZT0kMworCW15X2k9MAorCXdoaWxlIHRlc3QgJG15X2kgLWx0ICRteV9udW1fY29tbWl0cworCWRvCisJCW15X2k9JCgoJG15X2kgKyAxKSkKKwkJdGVzdF90aWNrCisJCWNhdCA+PiIkbXlfYXBwZW5kX3RvX2ZpbGUiIDw8SU5QVVRfRU5ECitjb21taXQgJG15X3JlZgorbWFyayA6JG15X2kKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0ICMkbXlfaQorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlCitkYXRhIDw8RU9GCitmaWxlIGNvbnRlbnRzIGluIGNvbW1pdCAjJG15X2kKK0VPRgorCitJTlBVVF9FTkQKKwlkb25lCit9CisKKyMgV3JpdGUgZmFzdC1pbXBvcnQgY29tbWFuZHMgdG8gY3JlYXRlIHRoZSBnaXZlbiBudW1iZXIgb2Ygbm90ZXMgYW5ub3RhdGluZworIyB0aGUgY29tbWl0cyBjcmVhdGVkIGJ5IGZhc3RfaW1wb3J0X2NvbW1pdHMoKQorZmFzdF9pbXBvcnRfbm90ZXMgKCkgeworCW15X25vdGVzX3JlZj0kMQorCW15X251bV9jb21taXRzPSQyCisJbXlfYXBwZW5kX3RvX2ZpbGU9JDMKKwlteV9ub3RlX2FwcGVuZD0kNAorCXRlc3RfdGljaworCWNhdCA+PiIkbXlfYXBwZW5kX3RvX2ZpbGUiIDw8SU5QVVRfRU5ECitjb21taXQgJG15X25vdGVzX3JlZgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXR0aW5nICRteV9udW1fY29tbWl0cyBub3RlcworQ09NTUlUCisKK0lOUFVUX0VORAorCisJbXlfaT0wCisJd2hpbGUgdGVzdCAkbXlfaSAtbHQgJG15X251bV9jb21taXRzCisJZG8KKwkJbXlfaT0kKCgkbXlfaSArIDEpKQorCQljYXQgPj4iJG15X2FwcGVuZF90b19maWxlIiA8PElOUFVUX0VORAorTiBpbmxpbmUgOiRteV9pCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIyRteV9pJG15X25vdGVfYXBwZW5kCitFT0YKKworSU5QVVRfRU5ECisJZG9uZQorfQorCisKK3JtIGlucHV0IGV4cGVjdAorbnVtX2NvbW1pdHM9NDAwCisjIENyZWF0ZSBsb3RzIG9mIGNvbW1pdHMKK2Zhc3RfaW1wb3J0X2NvbW1pdHMgInJlZnMvaGVhZHMvbWFueV9jb21taXRzIiAkbnVtX2NvbW1pdHMgaW5wdXQKKyMgQ3JlYXRlIG9uZSBub3RlIHBlciBhYm92ZSBjb21taXQKK2Zhc3RfaW1wb3J0X25vdGVzICJyZWZzL25vdGVzL21hbnlfbm90ZXMiICRudW1fY29tbWl0cyBpbnB1dAorIyBBZGQgYSBjb3VwbGUgb2Ygbm9uLW5vdGVzIGFzIHdlbGwKK3Rlc3RfdGljaworY2F0ID4+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL21hbnlfbm90ZXMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0dGluZyBzb21lIG5vbi1ub3RlcyB0byB0aGUgbm90ZXMgdHJlZQorQ09NTUlUCisKK00gNzU1IGlubGluZSBmb29iYXIvbm9uLW5vdGUudHh0CitkYXRhIDw8RU9GCitUaGlzIGlzIG5vdCBhIG5vdGUsIGJ1dCByYXRoZXIgYSByZWd1bGFyIGZpbGUgcmVzaWRpbmcgaW4gYSBub3RlcyB0cmVlCitFT0YKKworTSA2NDQgaW5saW5lIGRlYWRiZWVmCitkYXRhIDw8RU9GCitOb24tbm90ZSBmaWxlCitFT0YKKworTSA2NDQgaW5saW5lIGRlL2FkYmVlZgorZGF0YSA8PEVPRgorQW5vdGhlciBub24tbm90ZSBmaWxlCitFT0YKKworSU5QVVRfRU5ECisjIEZpbmFsbHkgY3JlYXRlIHRoZSBleHBlY3RlZCBvdXRwdXQgZnJvbSBhbGwgdGhlc2Ugbm90ZXMgYW5kIGNvbW1pdHMKK2k9JG51bV9jb21taXRzCit3aGlsZSB0ZXN0ICRpIC1ndCAwCitkbworCWNhdCA+PmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBjb21taXQgIyRpCisgICAgbm90ZSBmb3IgY29tbWl0ICMkaQorRVhQRUNUX0VORAorCWk9JCgoJGkgLSAxKSkKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGxvdHMgb2YgY29tbWl0cyBhbmQgbm90ZXMnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvbWFueV9ub3RlcyBnaXQgbG9nIHJlZnMvaGVhZHMvbWFueV9jb21taXRzIHwKKwkgICAgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IGxvdHMgb2Ygbm90ZXMgdHJpZ2dlciBhIGZhbm91dCBzY2hlbWUnICcKKworCSMgTm9uZSBvZiB0aGUgZW50cmllcyBpbiB0aGUgdG9wLWxldmVsIG5vdGVzIHRyZWUgc2hvdWxkIGJlIGEgZnVsbCBTSEExCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcmVmcy9ub3Rlcy9tYW55X25vdGVzIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQlpZiB0ZXN0ICQoZXhwciBsZW5ndGggIiRwYXRoIikgLWdlIDQwCisJCXRoZW4KKwkJCXJldHVybiAxCisJCWZpCisJZG9uZQorCisnCisKK2NhdCA+PmV4cGVjdF9ub24tbm90ZTEgPDwgRU9GCitUaGlzIGlzIG5vdCBhIG5vdGUsIGJ1dCByYXRoZXIgYSByZWd1bGFyIGZpbGUgcmVzaWRpbmcgaW4gYSBub3RlcyB0cmVlCitFT0YKKworY2F0ID4+ZXhwZWN0X25vbi1ub3RlMiA8PCBFT0YKK05vbi1ub3RlIGZpbGUKK0VPRgorCitjYXQgPj5leHBlY3Rfbm9uLW5vdGUzIDw8IEVPRgorQW5vdGhlciBub24tbm90ZSBmaWxlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbm9uLW5vdGVzIGFyZSB1bnRvdWNoZWQgYnkgYSBmYW5vdXQgY2hhbmdlJyAnCisKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmZvb2Jhci9ub24tbm90ZS50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUxIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6ZGVhZGJlZWYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUyIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6ZGUvYWRiZWVmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMyBhY3R1YWwKKworJworCisjIENoYW5nZSB0aGUgbm90ZXMgZm9yIHRoZSB0aHJlZSB0b3AgY29tbWl0cwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9tYW55X25vdGVzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NoYW5naW5nIG5vdGVzIGZvciB0aGUgdG9wIHRocmVlIGNvbW1pdHMKK0NPTU1JVAorZnJvbSByZWZzL25vdGVzL21hbnlfbm90ZXNeMAorSU5QVVRfRU5ECisKK3JtIGV4cGVjdAoraT0kbnVtX2NvbW1pdHMKK2o9MAord2hpbGUgdGVzdCAkaiAtbHQgMworZG8KKwljYXQgPj5pbnB1dCA8PElOUFVUX0VORAorTiBpbmxpbmUgcmVmcy9oZWFkcy9tYW55X2NvbW1pdHN+JGoKK2RhdGEgPDxFT0YKK2NoYW5nZWQgbm90ZSBmb3IgY29tbWl0ICMkaQorRU9GCitJTlBVVF9FTkQKKwljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgY29tbWl0ICMkaQorICAgIGNoYW5nZWQgbm90ZSBmb3IgY29tbWl0ICMkaQorRVhQRUNUX0VORAorCWk9JCgoJGkgLSAxKSkKKwlqPSQoKCRqICsgMSkpCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBhIGZldyBleGlzdGluZyBub3RlcycgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9tYW55X25vdGVzIGdpdCBsb2cgLW4zIHJlZnMvaGVhZHMvbWFueV9jb21taXRzIHwKKwkgICAgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IGNoYW5naW5nIG5vdGVzIHJlc3BlY3QgZXhpc3RpbmcgZmFub3V0JyAnCisKKwkjIE5vbmUgb2YgdGhlIGVudHJpZXMgaW4gdGhlIHRvcC1sZXZlbCBub3RlcyB0cmVlIHNob3VsZCBiZSBhIGZ1bGwgU0hBMQorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHJlZnMvbm90ZXMvbWFueV9ub3RlcyB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJaWYgdGVzdCAkKGV4cHIgbGVuZ3RoICIkcGF0aCIpIC1nZSA0MAorCQl0aGVuCisJCQlyZXR1cm4gMQorCQlmaQorCWRvbmUKKworJworCityZW1haW5pbmdfbm90ZXM9MTAKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvbWFueV9ub3RlcworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCityZW1vdmluZyBhbGwgbm90ZXMgYnV0ICRyZW1haW5pbmdfbm90ZXMKK0NPTU1JVAorZnJvbSByZWZzL25vdGVzL21hbnlfbm90ZXNeMAorSU5QVVRfRU5ECisKK2k9JCgoJG51bV9jb21taXRzIC0gJHJlbWFpbmluZ19ub3RlcykpCitmb3Igc2hhMSBpbiAkKGdpdCByZXYtbGlzdCAtbiAkaSByZWZzL2hlYWRzL21hbnlfY29tbWl0cykKK2RvCisJY2F0ID4+aW5wdXQgPDxJTlBVVF9FTkQKK04gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAkc2hhMQorSU5QVVRfRU5ECitkb25lCisKK2k9JG51bV9jb21taXRzCitybSBleHBlY3QKK3doaWxlIHRlc3QgJGkgLWd0IDAKK2RvCisJY2F0ID4+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGNvbW1pdCAjJGkKK0VYUEVDVF9FTkQKKwlpZiB0ZXN0ICRpIC1sZSAkcmVtYWluaW5nX25vdGVzCisJdGhlbgorCQljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgbm90ZSBmb3IgY29tbWl0ICMkaQorRVhQRUNUX0VORAorCWZpCisJaT0kKCgkaSAtIDEpKQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgbG90cyBvZiBub3RlcycgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9tYW55X25vdGVzIGdpdCBsb2cgcmVmcy9oZWFkcy9tYW55X2NvbW1pdHMgfAorCSAgICBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgcmVtb3Zpbmcgbm90ZXMgdHJpZ2dlciBmYW5vdXQgY29uc29saWRhdGlvbicgJworCisJIyBBbGwgZW50cmllcyBpbiB0aGUgdG9wLWxldmVsIG5vdGVzIHRyZWUgc2hvdWxkIGJlIGEgZnVsbCBTSEExCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgLXIgcmVmcy9ub3Rlcy9tYW55X25vdGVzIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQkjIEV4cGxpY2l0bHkgaWdub3JlIHRoZSBub24tbm90ZSBwYXRocworCQl0ZXN0ICIkcGF0aCIgPSAiZm9vYmFyL25vbi1ub3RlLnR4dCIgJiYgY29udGludWUKKwkJdGVzdCAiJHBhdGgiID0gImRlYWRiZWVmIiAmJiBjb250aW51ZQorCQl0ZXN0ICIkcGF0aCIgPSAiZGUvYWRiZWVmIiAmJiBjb250aW51ZQorCisJCWlmIHRlc3QgJChleHByIGxlbmd0aCAiJHBhdGgiKSAtbmUgNDAKKwkJdGhlbgorCQkJcmV0dXJuIDEKKwkJZmkKKwlkb25lCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbm9uLW5vdGVzIGFyZSB1bnRvdWNoZWQgYnkgYSBmYW5vdXQgY2hhbmdlJyAnCisKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmZvb2Jhci9ub24tbm90ZS50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUxIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6ZGVhZGJlZWYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUyIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6ZGUvYWRiZWVmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMyBhY3R1YWwKKworJworCisKK3JtIGlucHV0IGV4cGVjdAorbnVtX25vdGVzX3JlZnM9MTAKK251bV9jb21taXRzPTE2Citzb21lX2NvbW1pdHM9OAorIyBDcmVhdGUgY29tbWl0cworZmFzdF9pbXBvcnRfY29tbWl0cyAicmVmcy9oZWFkcy9tb3JlX2NvbW1pdHMiICRudW1fY29tbWl0cyBpbnB1dAorIyBDcmVhdGUgb25lIG5vdGUgcGVyIGFib3ZlIGNvbW1pdCBwZXIgbm90ZXMgcmVmCitpPTAKK3doaWxlIHRlc3QgJGkgLWx0ICRudW1fbm90ZXNfcmVmcworZG8KKwlpPSQoKCRpICsgMSkpCisJZmFzdF9pbXBvcnRfbm90ZXMgInJlZnMvbm90ZXMvbW9yZV9ub3Rlc18kaSIgJG51bV9jb21taXRzIGlucHV0Citkb25lCisjIFRyaWdnZXIgYnJhbmNoIHJlbG9hZGluZyBpbiBnaXQtZmFzdC1pbXBvcnQgYnkgcmVwZWF0aW5nIHRoZSBub3RlIGNyZWF0aW9uCitpPTAKK3doaWxlIHRlc3QgJGkgLWx0ICRudW1fbm90ZXNfcmVmcworZG8KKwlpPSQoKCRpICsgMSkpCisJZmFzdF9pbXBvcnRfbm90ZXMgInJlZnMvbm90ZXMvbW9yZV9ub3Rlc18kaSIgJHNvbWVfY29tbWl0cyBpbnB1dCAiICgyKSIKK2RvbmUKKyMgRmluYWxseSBjcmVhdGUgdGhlIGV4cGVjdGVkIG91dHB1dCBmcm9tIHRoZSBub3RlcyBpbiByZWZzL25vdGVzL21vcmVfbm90ZXNfMQoraT0kbnVtX2NvbW1pdHMKK3doaWxlIHRlc3QgJGkgLWd0IDAKK2RvCisJbm90ZV9kYXRhPSJub3RlIGZvciBjb21taXQgIyRpIgorCWlmIHRlc3QgJGkgLWxlICRzb21lX2NvbW1pdHMKKwl0aGVuCisJCW5vdGVfZGF0YT0iJG5vdGVfZGF0YSAoMikiCisJZmkKKwljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgY29tbWl0ICMkaQorICAgICRub3RlX2RhdGEKK0VYUEVDVF9FTkQKKwlpPSQoKCRpIC0gMSkpCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImFkZCBub3RlcyB0byAkbnVtX2NvbW1pdHMgY29tbWl0cyBpbiBlYWNoIG9mICRudW1fbm90ZXNfcmVmcyByZWZzIiAnCisKKwlnaXQgZmFzdC1pbXBvcnQgLS1hY3RpdmUtYnJhbmNoZXM9NSA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvbW9yZV9ub3Rlc18xIGdpdCBsb2cgcmVmcy9oZWFkcy9tb3JlX2NvbW1pdHMgfAorCSAgICBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MzUwLWZhc3QtZXhwb3J0LnNoIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZTgyMWY5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaApAQCAtMCwwICsxLDQ0MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBmYXN0LWV4cG9ydCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJZWNobyBicmVhayBpdCA+IGZpbGUwICYmCisJZ2l0IGFkZCBmaWxlMCAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gV29obGF1ZiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIGRpZSBMdWZ0ID4gZmlsZSAmJgorCWVjaG8gZ2VodCBmcmlzY2ggPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZSBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZWNobyB1bmQgPiBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIHJlaW4gJiYKKwlnaXQgY2hlY2tvdXQgLWIgd2VyIEhFQUReICYmCisJZWNobyBsYW5nZSA+IGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzaXR6dCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gdmFsZW50aW4gbXVzcyAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIG1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IHwgZmFzdC1pbXBvcnQnICcKKworCU1BU1RFUj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCVJFSU49JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlaW4pICYmCisJV0VSPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB3ZXIpICYmCisJTVVTUz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbXVzcykgJiYKKwlta2RpciBuZXcgJiYKKwlnaXQgLS1naXQtZGlyPW5ldy8uZ2l0IGluaXQgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1hbGwgfAorCShjZCBuZXcgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJIHRlc3QgJE1BU1RFUiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwkgdGVzdCAkUkVJTiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3RhZ3MvcmVpbikgJiYKKwkgdGVzdCAkV0VSID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvd2VyKSAmJgorCSB0ZXN0ICRNVVNTID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvdGFncy9tdXNzKSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCBtYXN0ZXJ+Mi4ubWFzdGVyJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgbWFzdGVyfjIuLm1hc3RlciB8CisJCXNlZCAicy9tYXN0ZXIvcGFydGlhbC8iIHwKKwkJKGNkIG5ldyAmJgorCQkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJCSB0ZXN0ICRNQVNURVIgIT0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcGFydGlhbCkgJiYKKwkJIGdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlciBwYXJ0aWFsICYmCisJCSBnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXJeIHBhcnRpYWxeICYmCisJCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHBhcnRpYWx+MikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpc28tODg1OS0xJyAnCisKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJIyB1c2UgYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZSBpbiBJU08tODg1OS0xIHRvIG1hdGNoIGl0LgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gcm9zdGVuID5maWxlICYmCisJZ2l0IGNvbW1pdCAtcyAtbSBkZW4gZmlsZSAmJgorCWdpdCBmYXN0LWV4cG9ydCB3ZXJeLi53ZXIgfAorCQlzZWQgInMvd2VyL2kxOG4vIiB8CisJCShjZCBuZXcgJiYKKwkJIGdpdCBmYXN0LWltcG9ydCAmJgorCQkgZ2l0IGNhdC1maWxlIGNvbW1pdCBpMThuIHwgZ3JlcCAiw4HDqcOtIMOzw7oiKQorCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQvZXhwb3J0LW1hcmtzJyAnCisKKwlnaXQgY2hlY2tvdXQgLWIgbWFya3MgbWFzdGVyICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tZXhwb3J0LW1hcmtzPXRtcC1tYXJrcyBIRUFEICYmCisJdGVzdCAtcyB0bXAtbWFya3MgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIHRtcC1tYXJrcyAmJgorCXRlc3QgJCgKKwkJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPXRtcC1tYXJrc1wKKwkJLS1leHBvcnQtbWFya3M9dG1wLW1hcmtzIEhFQUQgfAorCQlncmVwIF5jb21taXQgfAorCQl3YyAtbCkgXAorCS1lcSAwICYmCisJZWNobyBjaGFuZ2UgPiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibGFzdCBjb21taXQiIGZpbGUgJiYKKwl0ZXN0ICQoCisJCWdpdCBmYXN0LWV4cG9ydCAtLWltcG9ydC1tYXJrcz10bXAtbWFya3MgXAorCQktLWV4cG9ydC1tYXJrcz10bXAtbWFya3MgSEVBRCB8CisJCWdyZXAgXmNvbW1pdFwgIHwKKwkJd2MgLWwpIFwKKwktZXEgMSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgdG1wLW1hcmtzCisKKycKKworY2F0ID4gc2lnbmVkLXRhZy1pbXBvcnQgPDwgRU9GCit0YWcgc2lnbi15b3VyLW5hbWUKK2Zyb20gJChnaXQgcmV2LXBhcnNlIEhFQUQpCit0YWdnZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTExOTkzIC0wNzAwCitkYXRhIDIxMAorQSBtZXNzYWdlIGZvciBhIHNpZ24KKy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCitWZXJzaW9uOiBHbnVQRyB2MS40LjUgKEdOVS9MaW51eCkKKworZmFrZWRzaWduYXR1cmVmYWtlZHNpZ25hdHVyZWZha2Vkc2lnbmF0dXJlZmFrZWRzaWduYXR1cmZha2Vkc2lnbgorYXR1cmVmYWtlZHNpZ25hdHVyZWZha2U9Cis9LzU5dgorLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZha2VkIHNpZ25lZCB0YWcnICcKKworCWNhdCBzaWduZWQtdGFnLWltcG9ydCB8IGdpdCBmYXN0LWltcG9ydAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25lZC10YWdzPWFib3J0JyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz1hYm9ydCBzaWduLXlvdXItbmFtZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25lZC10YWdzPXZlcmJhdGltJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz12ZXJiYXRpbSBzaWduLXlvdXItbmFtZSA+IG91dHB1dCAmJgorCWdyZXAgUEdQIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25lZC10YWdzPXN0cmlwJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz1zdHJpcCBzaWduLXlvdXItbmFtZSA+IG91dHB1dCAmJgorCSEgZ3JlcCBQR1Agb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VibW9kdWxlJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJbWtkaXIgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGluaXQgICYmCisJCWVjaG8gdGVzdCBmaWxlID4gZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBzdWJfaW5pdGlhbAorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAiYHB3ZGAvc3ViIiBzdWIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCWNkIHN1YiAmJgorCQllY2hvIG1vcmUgZGF0YSA+PiBmaWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIHN1Yl9zZWNvbmQKKwkpICYmCisJZ2l0IGFkZCBzdWIgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBmYXN0LWV4cG9ydCB8IGZhc3QtaW1wb3J0JyAnCisKKwlTVUJFTlQxPSQoZ2l0IGxzLXRyZWUgbWFzdGVyXiBzdWIpICYmCisJU1VCRU5UMj0kKGdpdCBscy10cmVlIG1hc3RlciBzdWIpICYmCisJcm0gLXJmIG5ldyAmJgorCW1rZGlyIG5ldyAmJgorCWdpdCAtLWdpdC1kaXI9bmV3Ly5naXQgaW5pdCAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXNpZ25lZC10YWdzPXN0cmlwIC0tYWxsIHwKKwkoY2QgbmV3ICYmCisJIGdpdCBmYXN0LWltcG9ydCAmJgorCSB0ZXN0ICIkU1VCRU5UMSIgPSAiJChnaXQgbHMtdHJlZSByZWZzL2hlYWRzL21hc3Rlcl4gc3ViKSIgJiYKKwkgdGVzdCAiJFNVQkVOVDIiID0gIiQoZ2l0IGxzLXRyZWUgcmVmcy9oZWFkcy9tYXN0ZXIgc3ViKSIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkgY21wIHN1Yi9maWxlIC4uL3N1Yi9maWxlKQorCisnCisKK0dJVF9BVVRIT1JfTkFNRT0nQSBVIFRob3InOyBleHBvcnQgR0lUX0FVVEhPUl9OQU1FCitHSVRfQ09NTUlUVEVSX05BTUU9J0MgTyBNaXR0ZXInOyBleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvcGllcycgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29weSByZWluICYmCisJZ2l0IG12IGZpbGUgZmlsZTMgJiYKKwlnaXQgY29tbWl0IC1tIG1vdmUxICYmCisJdGVzdF90aWNrICYmCisJY3AgZmlsZTIgZmlsZTQgJiYKKwlnaXQgYWRkIGZpbGU0ICYmCisJZ2l0IG12IGZpbGUyIGZpbGU1ICYmCisJZ2l0IGNvbW1pdCAtbSBjb3B5MSAmJgorCXRlc3RfdGljayAmJgorCWNwIGZpbGUzIGZpbGU2ICYmCisJZ2l0IGFkZCBmaWxlNiAmJgorCWdpdCBjb21taXQgLW0gY29weTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIG1vcmUgdGV4dCA+PiBmaWxlNiAmJgorCWVjaG8gZXZlbiBtb3JlIHRleHQgPj4gZmlsZTYgJiYKKwlnaXQgYWRkIGZpbGU2ICYmCisJZ2l0IGNvbW1pdCAtbSBtb2RpZnkgJiYKKwl0ZXN0X3RpY2sgJiYKKwljcCBmaWxlNiBmaWxlNyAmJgorCWVjaG8gdGVzdCA+PiBmaWxlNyAmJgorCWdpdCBhZGQgZmlsZTcgJiYKKwlnaXQgY29tbWl0IC1tIGNvcHlfbW9kaWZ5CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1leHBvcnQgLUMgLUMgfCBmYXN0LWltcG9ydCcgJworCisJRU5UUlk9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGNvcHkpICYmCisJcm0gLXJmIG5ldyAmJgorCW1rZGlyIG5ldyAmJgorCWdpdCAtLWdpdC1kaXI9bmV3Ly5naXQgaW5pdCAmJgorCWdpdCBmYXN0LWV4cG9ydCAtQyAtQyAtLXNpZ25lZC10YWdzPXN0cmlwIC0tYWxsID4gb3V0cHV0ICYmCisJZ3JlcCAiXkMgZmlsZTYgZmlsZTdcJCIgb3V0cHV0ICYmCisJY2F0IG91dHB1dCB8CisJKGNkIG5ldyAmJgorCSBnaXQgZmFzdC1pbXBvcnQgJiYKKwkgdGVzdCAkRU5UUlkgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9jb3B5KSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCB8IGZhc3QtaW1wb3J0IHdoZW4gbWFzdGVyIGlzIHRhZ2dlZCcgJworCisJZ2l0IHRhZyAtbSBtc2cgbGFzdCAmJgorCWdpdCBmYXN0LWV4cG9ydCAtQyAtQyAtLXNpZ25lZC10YWdzPXN0cmlwIC0tYWxsID4gb3V0cHV0ICYmCisJdGVzdCAkKGdyZXAgLWMgIl50YWcgIiBvdXRwdXQpID0gMworCisnCisKK2NhdCA+IHRhZy1jb250ZW50IDw8IEVPRgorb2JqZWN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQordHlwZSBjb21taXQKK3RhZyByb3N0ZW4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3BlIHdpdGggdGFnZ2VyLWxlc3MgdGFncycgJworCisJVEFHPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRhZyAtdyB0YWctY29udGVudCkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3RhZ3Mvc29ubmVuc2NoZWluICRUQUcgJiYKKwlnaXQgZmFzdC1leHBvcnQgLUMgLUMgLS1zaWduZWQtdGFncz1zdHJpcCAtLWFsbCA+IG91dHB1dCAmJgorCXRlc3QgJChncmVwIC1jICJedGFnICIgb3V0cHV0KSA9IDQgJiYKKwkhIGdyZXAgIlVuc3BlY2lmaWVkIFRhZ2dlciIgb3V0cHV0ICYmCisJZ2l0IGZhc3QtZXhwb3J0IC1DIC1DIC0tc2lnbmVkLXRhZ3M9c3RyaXAgLS1hbGwgXAorCQktLWZha2UtbWlzc2luZy10YWdnZXIgPiBvdXRwdXQgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiXnRhZyAiIG91dHB1dCkgPSA0ICYmCisJZ3JlcCAiVW5zcGVjaWZpZWQgVGFnZ2VyIiBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgbGltaXRpbmcgZXhwb3J0cyBieSBQQVRIJyAnCisJbWtkaXIgbGltaXQtYnktcGF0aHMgJiYKKwkoCisJCWNkIGxpbWl0LWJ5LXBhdGhzICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gaGkgPiB0aGVyZSAmJgorCQlnaXQgYWRkIHRoZXJlICYmCisJCWdpdCBjb21taXQgLW0gIkZpcnN0IGZpbGUiICYmCisJCWVjaG8gZm9vID4gYmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIlNlY29uZCBmaWxlIiAmJgorCQlnaXQgdGFnIC1hIC1tIG1zZyBteXRhZyAmJgorCQllY2hvIG1vcmVmb28gPj4gYmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIkNoYW5nZSB0byBzZWNvbmQgZmlsZSIKKwkpCisnCisKK2NhdCA+IGxpbWl0LWJ5LXBhdGhzL2V4cGVjdGVkIDw8IEVPRgorYmxvYgorbWFyayA6MQorZGF0YSAzCitoaQorCityZXNldCByZWZzL3RhZ3MvbXl0YWcKK2NvbW1pdCByZWZzL3RhZ3MvbXl0YWcKK21hcmsgOjIKK2F1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitkYXRhIDExCitGaXJzdCBmaWxlCitNIDEwMDY0NCA6MSB0aGVyZQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcHBpbmcgdGFnIG9mIGZpbHRlcmVkIG91dCBvYmplY3QnICcKKygKKwljZCBsaW1pdC1ieS1wYXRocyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXRhZy1vZi1maWx0ZXJlZC1vYmplY3Q9ZHJvcCBteXRhZyAtLSB0aGVyZSA+IG91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCBleHBlY3RlZAorKQorJworCitjYXQgPj4gbGltaXQtYnktcGF0aHMvZXhwZWN0ZWQgPDwgRU9GCit0YWcgbXl0YWcKK2Zyb20gOjIKK3RhZ2dlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2RhdGEgNAorbXNnCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRpbmcgdGFnIG9mIGZpbHRlcmVkIG91dCBvYmplY3QnICcKKygKKwljZCBsaW1pdC1ieS1wYXRocyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXRhZy1vZi1maWx0ZXJlZC1vYmplY3Q9cmV3cml0ZSBteXRhZyAtLSB0aGVyZSA+IG91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCBleHBlY3RlZAorKQorJworCitjYXQgPiBsaW1pdC1ieS1wYXRocy9leHBlY3RlZCA8PCBFT0YKK2Jsb2IKK21hcmsgOjEKK2RhdGEgNAorZm9vCisKK2Jsb2IKK21hcmsgOjIKK2RhdGEgMworaGkKKworcmVzZXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorbWFyayA6MworYXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2RhdGEgMTIKK1NlY29uZCBmaWxlCitNIDEwMDY0NCA6MSBiYXIKK00gMTAwNjQ0IDoyIHRoZXJlCisKK0VPRgorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdubyBleGFjdC1yZWYgcmV2aXNpb25zIGluY2x1ZGVkJyAnCisJKAorCQljZCBsaW1pdC1ieS1wYXRocyAmJgorCQlnaXQgZmFzdC1leHBvcnQgbWFzdGVyfjIuLm1hc3Rlcn4xID4gb3V0cHV0ICYmCisJCXRlc3RfY21wIG91dHB1dCBleHBlY3RlZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aCBsaW1pdGluZyB3aXRoIGltcG9ydC1tYXJrcyBkb2VzIG5vdCBsb3NlIHVubW9kaWZpZWQgZmlsZXMnICAgICAgICAnCisJZ2l0IGNoZWNrb3V0IC1iIHNpbXBsZSBtYXJrc34yICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tZXhwb3J0LW1hcmtzPW1hcmtzIHNpbXBsZSAtLSBmaWxlID4gL2Rldi9udWxsICYmCisJZWNobyBtb3JlIGNvbnRlbnQgPj4gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW1uZXh0IGZpbGUgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3Mgc2ltcGxlIC0tIGZpbGUgZmlsZTAgfCBncmVwIGZpbGUwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1bGwtdHJlZSByZS1zaG93cyB1bm1vZGlmaWVkIGZpbGVzJyAgICAgICAgJworCWdpdCBjaGVja291dCAtZiBzaW1wbGUgJiYKKwl0ZXN0ICQoZ2l0IGZhc3QtZXhwb3J0IC0tZnVsbC10cmVlIHNpbXBsZSB8IGdyZXAgLWMgZmlsZTApIC1lcSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC11cCBhIGZldyBtb3JlIHRhZ3MgZm9yIHRhZyBleHBvcnQgdGVzdHMnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJSEVBRF9UUkVFPWBnaXQgc2hvdyAtcyAtLXByZXR0eT1yYXcgSEVBRCB8IGdyZXAgdHJlZSB8IHNlZCAicy90cmVlIC8vImAgJiYKKwlnaXQgdGFnICAgIHRyZWVfdGFnICAgICAgICAtbSAidGFnZ2luZyBhIHRyZWUiICRIRUFEX1RSRUUgJiYKKwlnaXQgdGFnIC1hIHRyZWVfdGFnLW9iaiAgICAtbSAidGFnZ2luZyBhIHRyZWUiICRIRUFEX1RSRUUgJiYKKwlnaXQgdGFnICAgIHRhZy1vYmpfdGFnICAgICAtbSAidGFnZ2luZyBhIHRhZyIgdHJlZV90YWctb2JqICYmCisJZ2l0IHRhZyAtYSB0YWctb2JqX3RhZy1vYmogLW0gInRhZ2dpbmcgYSB0YWciIHRyZWVfdGFnLW9iagorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX3RhZycgICAgICAgICcKKwlta2RpciByZXN1bHQgJiYKKwkoY2QgcmVzdWx0ICYmIGdpdCBpbml0KSAmJgorCWdpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZyA+IGZlLXN0cmVhbSAmJgorCShjZCByZXN1bHQgJiYgZ2l0IGZhc3QtaW1wb3J0IDwgLi4vZmUtc3RyZWFtKQorJworCisjIE5FRURTV09SSzogbm90IGp1c3QgY2hlY2sgcmV0dXJuIHN0YXR1cywgYnV0IHZhbGlkYXRlIHRoZSBvdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfdGFnLW9iaicgICAgJ2dpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZy1vYmonCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZycgICAgICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWcnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZy1vYmonICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWctb2JqJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaXJlY3RvcnkgYmVjb21lcyBzeW1saW5rJyAgICAgICAgJworCWdpdCBpbml0IGRpcnRvc3ltbGluayAmJgorCWdpdCBpbml0IHJlc3VsdCAmJgorCSgKKwkJY2QgZGlydG9zeW1saW5rICYmCisJCW1rZGlyIGZvbyAmJgorCQlta2RpciBiYXIgJiYKKwkJZWNobyBoZWxsbyA+IGZvby93b3JsZCAmJgorCQllY2hvIGhlbGxvID4gYmFyL3dvcmxkICYmCisJCWdpdCBhZGQgZm9vL3dvcmxkIGJhci93b3JsZCAmJgorCQlnaXQgY29tbWl0IC1xIC1tb25lICYmCisJCWdpdCBybSAtciBmb28gJiYKKwkJbG4gLXMgYmFyIGZvbyAmJgorCQlnaXQgYWRkIGZvbyAmJgorCQlnaXQgY29tbWl0IC1xIC1tdHdvCisJKSAmJgorCSgKKwkJY2QgZGlydG9zeW1saW5rICYmCisJCWdpdCBmYXN0LWV4cG9ydCBtYXN0ZXIgLS0gZm9vIHwKKwkJKGNkIC4uL3Jlc3VsdCAmJiBnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCkKKwkpICYmCisJKGNkIHJlc3VsdCAmJiBnaXQgc2hvdyBtYXN0ZXI6Zm9vKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCBxdW90ZXMgcGF0aG5hbWVzJyAnCisJZ2l0IGluaXQgY3JhenktcGF0aHMgJiYKKwkoY2QgY3JhenktcGF0aHMgJiYKKwkgYmxvYj1gZWNobyBmb28gfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbmAgJiYKKwkgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBcCisJCS0tY2FjaGVpbmZvIDEwMDY0NCAkYmxvYiAiJChwcmludGYgInBhdGggd2l0aFxcbm5ld2xpbmUiKSIgXAorCQktLWNhY2hlaW5mbyAxMDA2NDQgJGJsb2IgInBhdGggd2l0aCBcInF1b3RlXCIiIFwKKwkJLS1jYWNoZWluZm8gMTAwNjQ0ICRibG9iICJwYXRoIHdpdGggXFxiYWNrc2xhc2giIFwKKwkJLS1jYWNoZWluZm8gMTAwNjQ0ICRibG9iICJwYXRoIHdpdGggc3BhY2UiICYmCisJIGdpdCBjb21taXQgLW0gYWRkaXRpb24gJiYKKwkgZ2l0IGxzLWZpbGVzIC16IC1zIHwgIiRQRVJMX1BBVEgiIC0wcGUgInN7XFx0fXskJnN1YmRpci99IiA+aW5kZXggJiYKKwkgZ2l0IHJlYWQtdHJlZSAtLWVtcHR5ICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLXogLS1pbmRleC1pbmZvIDxpbmRleCAmJgorCSBnaXQgY29tbWl0IC1tIHJlbmFtZSAmJgorCSBnaXQgcmVhZC10cmVlIC0tZW1wdHkgJiYKKwkgZ2l0IGNvbW1pdCAtbSBkZWxldGlvbiAmJgorCSBnaXQgZmFzdC1leHBvcnQgLU0gSEVBRCA+ZXhwb3J0Lm91dCAmJgorCSBnaXQgcmV2LWxpc3QgSEVBRCA+ZXhwZWN0ICYmCisJIGdpdCBpbml0IHJlc3VsdCAmJgorCSBjZCByZXN1bHQgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0IDwuLi9leHBvcnQub3V0ICYmCisJIGdpdCByZXYtbGlzdCBIRUFEID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NDAwLWdpdC1jdnNzZXJ2ZXItc2VydmVyLnNoIGIvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MDY2MjNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaApAQCAtMCwwICsxLDUyMCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBGcmFuayBMaWNodGVuaGVsZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtY3Zzc2VydmVyIGFjY2VzcworCit0ZXN0cyByZWFkIGFjY2VzcyB0byBhIGdpdCByZXBvc2l0b3J5IHdpdGggdGhlCitjdnMgQ0xJIGNsaWVudCB2aWEgZ2l0LWN2c3NlcnZlciBzZXJ2ZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQgY3Zzc2VydmVyIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorY3ZzID4vZGV2L251bGwgMj4mMQoraWYgdGVzdCAkPyAtbmUgMQordGhlbgorICAgIHNraXBfYWxsPSdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBjdnMgbm90IGZvdW5kJworICAgIHRlc3RfZG9uZQorZmkKKyIkUEVSTF9QQVRIIiAtZSAndXNlIERCSTsgdXNlIERCRDo6U1FMaXRlJyA+L2Rldi9udWxsIDI+JjEgfHwgeworICAgIHNraXBfYWxsPSdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBQZXJsIFNRTGl0ZSBpbnRlcmZhY2UgdW5hdmFpbGFibGUnCisgICAgdGVzdF9kb25lCit9CisKK3Vuc2V0IEdJVF9ESVIgR0lUX0NPTkZJRworV09SS0RJUj0kKHB3ZCkKK1NFUlZFUkRJUj0kKHB3ZCkvZ2l0Y3ZzLmdpdAorZ2l0X2NvbmZpZz0iJFNFUlZFUkRJUi9jb25maWciCitDVlNST09UPSI6Zm9yazokU0VSVkVSRElSIgorQ1ZTV09SSz0iJChwd2QpL2N2c3dvcmsiCitDVlNfU0VSVkVSPWdpdC1jdnNzZXJ2ZXIKK2V4cG9ydCBDVlNST09UIENWU19TRVJWRVIKKworcm0gLXJmICIkQ1ZTV09SSyIgIiRTRVJWRVJESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworICBlY2hvID5lbXB0eSAmJgorICBnaXQgYWRkIGVtcHR5ICYmCisgIGdpdCBjb21taXQgLXEgLW0gIkZpcnN0IENvbW1pdCIgJiYKKyAgbWtkaXIgc2Vjb25kcm9vdCAmJgorICAoIGNkIHNlY29uZHJvb3QgJiYKKyAgZ2l0IGluaXQgJiYKKyAgdG91Y2ggc2Vjb25kcm9vdGZpbGUgJiYKKyAgZ2l0IGFkZCBzZWNvbmRyb290ZmlsZSAmJgorICBnaXQgY29tbWl0IC1tICJzZWNvbmQgcm9vdCIpICYmCisgIGdpdCBwdWxsIHNlY29uZHJvb3QgbWFzdGVyICYmCisgIGdpdCBjbG9uZSAtcSAtLWJhcmUgIiRXT1JLRElSLy5naXQiICIkU0VSVkVSRElSIiA+L2Rldi9udWxsIDI+JjEgJiYKKyAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSAmJgorICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5sb2dmaWxlICIkU0VSVkVSRElSL2dpdGN2cy5sb2ciICYmCisgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmF1dGhkYiAiJFNFUlZFUkRJUi9hdXRoLmRiIiAmJgorICBlY2hvIGN2c3VzZXI6Y3ZHVkVhck1MbmhsQSA+ICIkU0VSVkVSRElSL2F1dGguZGIiCisnCisKKyMgbm90ZSB0aGF0IGN2cyBkb2Vzbid0IGFjY2VwdCBhYnNvbHV0ZSBwYXRobmFtZXMKKyMgYXMgYXJndW1lbnQgdG8gY28gLWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGNoZWNrb3V0JyBcCisgICdHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyICYmCisgICB0ZXN0ICIkKGVjaG8gJChncmVwIC12IF5EIGN2c3dvcmsvQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1IHwgaGVhZCAtbiAxKSkiID0gImVtcHR5LzEuMS8iICYmCisgICB0ZXN0ICIkKGVjaG8gJChncmVwIC12IF5EIGN2c3dvcmsvQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1IHwgc2VkIC1uZSBcJHApKSIgPSAic2Vjb25kcm9vdGZpbGUvMS4xLyInCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUFNFUlZFUiBBVVRIRU5USUNBVElPTgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjYXQgPnJlcXVlc3QtYW5vbnltb3VzICA8PEVPRgorQkVHSU4gQVVUSCBSRVFVRVNUCiskU0VSVkVSRElSCithbm9ueW1vdXMKKworRU5EIEFVVEggUkVRVUVTVAorRU9GCisKK2NhdCA+cmVxdWVzdC1naXQgIDw8RU9GCitCRUdJTiBBVVRIIFJFUVVFU1QKKyRTRVJWRVJESVIKK2dpdAorCitFTkQgQVVUSCBSRVFVRVNUCitFT0YKKworY2F0ID5sb2dpbi1hbm9ueW1vdXMgPDxFT0YKK0JFR0lOIFZFUklGSUNBVElPTiBSRVFVRVNUCiskU0VSVkVSRElSCithbm9ueW1vdXMKKworRU5EIFZFUklGSUNBVElPTiBSRVFVRVNUCitFT0YKKworY2F0ID5sb2dpbi1naXQgPDxFT0YKK0JFR0lOIFZFUklGSUNBVElPTiBSRVFVRVNUCiskU0VSVkVSRElSCitnaXQKKworRU5EIFZFUklGSUNBVElPTiBSRVFVRVNUCitFT0YKKworY2F0ID5sb2dpbi1naXQtb2sgPDxFT0YKK0JFR0lOIFZFUklGSUNBVElPTiBSRVFVRVNUCiskU0VSVkVSRElSCitjdnN1c2VyCitBaDxaOnlaWjMwIGUKK0VORCBWRVJJRklDQVRJT04gUkVRVUVTVAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BzZXJ2ZXIgYXV0aGVudGljYXRpb24nIFwKKyAgJ2NhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciA+bG9nIDI+JjEgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwc2VydmVyIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgKG5vbi1hbm9ueW1vdXMgdXNlciknIFwKKyAgJ2lmIGNhdCByZXF1ZXN0LWdpdCB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciA+bG9nIDI+JjEKKyAgIHRoZW4KKyAgICAgICBmYWxzZQorICAgZWxzZQorICAgICAgIHRydWUKKyAgIGZpICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBIQVRFIFlPVVwkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHNlcnZlciBhdXRoZW50aWNhdGlvbiBzdWNjZXNzIChub24tYW5vbnltb3VzIHVzZXIgd2l0aCBwYXNzd29yZCknIFwKKyAgJ2NhdCBsb2dpbi1naXQtb2sgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgPmxvZyAyPiYxICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHNlcnZlciBhdXRoZW50aWNhdGlvbiAobG9naW4pJyBcCisgICdjYXQgbG9naW4tYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BzZXJ2ZXIgYXV0aGVudGljYXRpb24gZmFpbHVyZSAobG9naW4vbm9uLWFub255bW91cyB1c2VyKScgXAorICAnaWYgY2F0IGxvZ2luLWdpdCB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciA+bG9nIDI+JjEKKyAgIHRoZW4KKyAgICAgICBmYWxzZQorICAgZWxzZQorICAgICAgIHRydWUKKyAgIGZpICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBIQVRFIFlPVVwkIicKKworCisjIG1pc3VzZSBwc2VydmVyIGF1dGhlbnRpY2F0aW9uIGZvciB0ZXN0aW5nIG9mIHJlcV9Sb290CisKK2NhdCA+cmVxdWVzdC1yZWxhdGl2ZSAgPDxFT0YKK0JFR0lOIEFVVEggUkVRVUVTVAorZ2l0Y3ZzLmdpdAorYW5vbnltb3VzCisKK0VORCBBVVRIIFJFUVVFU1QKK0VPRgorCitjYXQgPnJlcXVlc3QtY29uZmxpY3QgIDw8RU9GCitCRUdJTiBBVVRIIFJFUVVFU1QKKyRTRVJWRVJESVIKK2Fub255bW91cworCitFTkQgQVVUSCBSRVFVRVNUCitSb290ICRXT1JLRElSCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgZmFpbHVyZSAocmVsYXRpdmUgcGF0aG5hbWUpJyBcCisgICdpZiBjYXQgcmVxdWVzdC1yZWxhdGl2ZSB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciA+bG9nIDI+JjEKKyAgIHRoZW4KKyAgICAgICBlY2hvIHVuZXhwZWN0ZWQgc3VjY2VzcworICAgICAgIGZhbHNlCisgICBlbHNlCisgICAgICAgdHJ1ZQorICAgZmkgJiYKKyAgIHRhaWwgbG9nIHwgZ3JlcCAiXmVycm9yIDEgUm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGhuYW1lJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKGNvbmZsaWN0aW5nIHJvb3RzKScgXAorICAnY2F0IHJlcXVlc3QtY29uZmxpY3QgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgPmxvZyAyPiYxICYmCisgICB0YWlsIGxvZyB8IGdyZXAgIl5lcnJvciAxIENvbmZsaWN0aW5nIHJvb3RzIHNwZWNpZmllZCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAoc3RyaWN0IHBhdGhzKScgXAorICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciAtLXN0cmljdC1wYXRocyBwc2VydmVyICIkU0VSVkVSRElSIiA+bG9nIDI+JjEgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChzdHJpY3QtcGF0aHMpJyAnCisgICAgISBjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfAorICAgIGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgcHNlcnZlciAiJFdPUktESVIiID5sb2cgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAody9vIHN0cmljdC1wYXRocyknIFwKKyAgJ2NhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciAiJFdPUktESVIvIiA+bG9nIDI+JjEgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlICh3L28gc3RyaWN0LXBhdGhzKScgJworICAgICEgY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwKKyAgICBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgIiRXT1JLRElSL2dpdGN2cyIgPmxvZyAyPiYxCisnCisKK2NhdCA+cmVxdWVzdC1iYXNlICA8PEVPRgorQkVHSU4gQVVUSCBSRVFVRVNUCisvZ2l0Y3ZzLmdpdAorYW5vbnltb3VzCisKK0VORCBBVVRIIFJFUVVFU1QKK1Jvb3QgL2dpdGN2cy5naXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAoYmFzZS1wYXRoKScgXAorICAnY2F0IHJlcXVlc3QtYmFzZSB8IGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggIiRXT1JLRElSLyIgcHNlcnZlciAiJFNFUlZFUkRJUiIgPmxvZyAyPiYxICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgZmFpbHVyZSAoYmFzZS1wYXRoKScgJworICAgICEgY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwKKyAgICBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIC0tYmFzZS1wYXRoICIkV09SS0RJUiIgcHNlcnZlciAiJFNFUlZFUkRJUiIgPmxvZyAyPiYxCisnCisKK0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIGZhbHNlIHx8IGV4aXQgMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAoZXhwb3J0LWFsbCknIFwKKyAgJ2NhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgLS1leHBvcnQtYWxsIHBzZXJ2ZXIgIiRXT1JLRElSIiA+bG9nIDI+JjEgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChleHBvcnQtYWxsIHcvbyB3aGl0ZWxpc3QpJyBcCisgICchIChjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIC0tZXhwb3J0LWFsbCBwc2VydmVyID5sb2cgMj4mMSB8fCBmYWxzZSknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChldmVyeXRoaW5nIHRvZ2V0aGVyKScgXAorICAnY2F0IHJlcXVlc3QtYmFzZSB8IGdpdC1jdnNzZXJ2ZXIgLS1leHBvcnQtYWxsIC0tc3RyaWN0LXBhdGhzIC0tYmFzZS1wYXRoICIkV09SS0RJUi8iIHBzZXJ2ZXIgIiRTRVJWRVJESVIiID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIHRydWUgfHwgZXhpdCAxCisKKyMtLS0tLS0tLS0tLS0tLQorIyBDT05GSUcgVEVTVFMKKyMtLS0tLS0tLS0tLS0tLQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRjdnMuZW5hYmxlZCA9IGZhbHNlJyBcCisgICdHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCBmYWxzZSAmJgorICAgaWYgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrMiBtYXN0ZXIgPmN2cy5sb2cgMj4mMQorICAgdGhlbgorICAgICBlY2hvIHVuZXhwZWN0ZWQgY3ZzIHN1Y2Nlc3MKKyAgICAgZmFsc2UKKyAgIGVsc2UKKyAgICAgdHJ1ZQorICAgZmkgJiYKKyAgIGdyZXAgIkdJVENWUyBlbXVsYXRpb24gZGlzYWJsZWQiIGN2cy5sb2cgJiYKKyAgIHRlc3QgISAtZCBjdnN3b3JrMicKKworcm0gLWZyIGN2c3dvcmsyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRjdnMuZXh0LmVuYWJsZWQgPSB0cnVlJyBcCisgICdHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZXh0LmVuYWJsZWQgdHJ1ZSAmJgorICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgZmFsc2UgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgIHRlc3RfY21wIGN2c3dvcmsgY3Zzd29yazInCisKK3JtIC1mciBjdnN3b3JrMgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0Y3ZzLmV4dC5lbmFibGVkID0gZmFsc2UnIFwKKyAgJ0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5leHQuZW5hYmxlZCBmYWxzZSAmJgorICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSAmJgorICAgaWYgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrMiBtYXN0ZXIgPmN2cy5sb2cgMj4mMQorICAgdGhlbgorICAgICBlY2hvIHVuZXhwZWN0ZWQgY3ZzIHN1Y2Nlc3MKKyAgICAgZmFsc2UKKyAgIGVsc2UKKyAgICAgdHJ1ZQorICAgZmkgJiYKKyAgIGdyZXAgIkdJVENWUyBlbXVsYXRpb24gZGlzYWJsZWQiIGN2cy5sb2cgJiYKKyAgIHRlc3QgISAtZCBjdnN3b3JrMicKKworcm0gLWZyIGN2c3dvcmsyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRjdnMuZGJuYW1lJyBcCisgICdHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZXh0LmVuYWJsZWQgdHJ1ZSAmJgorICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMuZGJuYW1lICVHZ2l0Y3ZzLiVhLiVtLnNxbGl0ZSAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrMiBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgdGVzdF9jbXAgY3Zzd29yayBjdnN3b3JrMiAmJgorICAgdGVzdCAtZiAiJFNFUlZFUkRJUi9naXRjdnMuZXh0Lm1hc3Rlci5zcWxpdGUiICYmCisgICBjbXAgIiRTRVJWRVJESVIvZ2l0Y3ZzLm1hc3Rlci5zcWxpdGUiICIkU0VSVkVSRElSL2dpdGN2cy5leHQubWFzdGVyLnNxbGl0ZSInCisKK3JtIC1mciBjdnN3b3JrMgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0Y3ZzLmV4dC5kYm5hbWUnIFwKKyAgJ0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5leHQuZW5hYmxlZCB0cnVlICYmCisgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5leHQuZGJuYW1lICVHZ2l0Y3ZzMS4lYS4lbS5zcWxpdGUgJiYKKyAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmRibmFtZSAlR2dpdGN2czIuJWEuJW0uc3FsaXRlICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsyIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICB0ZXN0X2NtcCBjdnN3b3JrIGN2c3dvcmsyICYmCisgICB0ZXN0IC1mICIkU0VSVkVSRElSL2dpdGN2czEuZXh0Lm1hc3Rlci5zcWxpdGUiICYmCisgICB0ZXN0ICEgLWYgIiRTRVJWRVJESVIvZ2l0Y3ZzMi5leHQubWFzdGVyLnNxbGl0ZSIgJiYKKyAgIGNtcCAiJFNFUlZFUkRJUi9naXRjdnMubWFzdGVyLnNxbGl0ZSIgIiRTRVJWRVJESVIvZ2l0Y3ZzMS5leHQubWFzdGVyLnNxbGl0ZSInCisKKworIy0tLS0tLS0tLS0tLQorIyBDVlMgVVBEQVRFCisjLS0tLS0tLS0tLS0tCisKK3JtIC1mciAiJFNFUlZFUkRJUiIKK2NkICIkV09SS0RJUiIgJiYKK2dpdCBjbG9uZSAtcSAtLWJhcmUgIiRXT1JLRElSLy5naXQiICIkU0VSVkVSRElSIiA+L2Rldi9udWxsIDI+JjEgJiYKK0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIHRydWUgJiYKK0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmxvZ2ZpbGUgIiRTRVJWRVJESVIvZ2l0Y3ZzLmxvZyIgfHwKK2V4aXQgMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChjcmVhdGUgbmV3IGZpbGUpJyBcCisgICdlY2hvIHRlc3RmaWxlMSA+dGVzdGZpbGUxICYmCisgICBnaXQgYWRkIHRlc3RmaWxlMSAmJgorICAgZ2l0IGNvbW1pdCAtcSAtbSAiQWRkIHRlc3RmaWxlMSIgJiYKKyAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgIHRlc3QgIiQoZWNobyAkKGdyZXAgdGVzdGZpbGUxIENWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSkpIiA9ICJ0ZXN0ZmlsZTEvMS4xLyIgJiYKKyAgIHRlc3RfY21wIHRlc3RmaWxlMSAuLi90ZXN0ZmlsZTEnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKHVwZGF0ZSBleGlzdGluZyBmaWxlKScgXAorICAnZWNobyBsaW5lIDIgPj50ZXN0ZmlsZTEgJiYKKyAgIGdpdCBhZGQgdGVzdGZpbGUxICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJBcHBlbmQgdG8gdGVzdGZpbGUxIiAmJgorICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICBjZCBjdnN3b3JrICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgdGVzdCAiJChlY2hvICQoZ3JlcCB0ZXN0ZmlsZTEgQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1KSkiID0gInRlc3RmaWxlMS8xLjIvIiAmJgorICAgdGVzdF9jbXAgdGVzdGZpbGUxIC4uL3Rlc3RmaWxlMScKKworY2QgIiRXT1JLRElSIgorI1RPRE86IGN2c3NlcnZlciBkb2Vzbid0IHN1cHBvcnQgdXBkYXRlIHcvbyAtZAordGVzdF9leHBlY3RfZmFpbHVyZSAiY3ZzIHVwZGF0ZSB3L28gLWQgZG9lc24ndCBjcmVhdGUgc3ViZGlyIChUT0RPKSIgJworICAgbWtkaXIgdGVzdCAmJgorICAgZWNobyA+dGVzdC9lbXB0eSAmJgorICAgZ2l0IGFkZCB0ZXN0ICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJTaW5nbGUgU3ViZGlyZWN0b3J5IiAmJgorICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICBjZCBjdnN3b3JrICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgdGVzdCAhIC1kIHRlc3QKKycKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAoc3ViZGlyZWN0b3JpZXMpJyBcCisgICcoZm9yIGRpciBpbiBBIEEvQiBBL0IvQyBBL0QgRTsgZG8KKyAgICAgIG1rZGlyICRkaXIgJiYKKyAgICAgIGVjaG8gInRlc3QgZmlsZSBpbiAkZGlyIiA+IiRkaXIvZmlsZV9pbl8kKGVjaG8gJGRpcnxzZWQgLWUgInMjLyMgI2ciKSIgICYmCisgICAgICBnaXQgYWRkICRkaXI7CisgICBkb25lKSAmJgorICAgZ2l0IGNvbW1pdCAtcSAtbSAiZGVlcCBzdWIgZGlyZWN0b3J5IHN0cnVjdHVyZSIgJiYKKyAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgLWQgJiYKKyAgIChmb3IgZGlyIGluIEEgQS9CIEEvQi9DIEEvRCBFOyBkbworICAgICAgZmlsZW5hbWU9ImZpbGVfaW5fJChlY2hvICRkaXJ8c2VkIC1lICJzIy8jICNnIikiICYmCisgICAgICBpZiB0ZXN0ICIkKGVjaG8gJChncmVwIC12IF5EICRkaXIvQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1KSkiID0gIiRmaWxlbmFtZS8xLjEvIiAmJgorCXRlc3RfY21wICIkZGlyLyRmaWxlbmFtZSIgIi4uLyRkaXIvJGZpbGVuYW1lIjsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGVjaG8gPmZhaWx1cmUKKyAgICAgIGZpCisgICAgZG9uZSkgJiYKKyAgIHRlc3QgISAtZiBmYWlsdXJlJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChkZWxldGUgZmlsZSknIFwKKyAgJ2dpdCBybSB0ZXN0ZmlsZTEgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIlJlbW92ZSB0ZXN0ZmlsZTEiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0IC16ICIkKGdyZXAgdGVzdGZpbGUxIENWUy9FbnRyaWVzKSIgJiYKKyAgIHRlc3QgISAtZiB0ZXN0ZmlsZTEnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKHJlLWFkZCBkZWxldGVkIGZpbGUpJyBcCisgICdlY2hvIHJlYWRkZWQgdGVzdGZpbGUgPnRlc3RmaWxlMSAmJgorICAgZ2l0IGFkZCB0ZXN0ZmlsZTEgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIlJlLUFkZCB0ZXN0ZmlsZTEiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0ICIkKGVjaG8gJChncmVwIHRlc3RmaWxlMSBDVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUpKSIgPSAidGVzdGZpbGUxLzEuNC8iICYmCisgICB0ZXN0X2NtcCB0ZXN0ZmlsZTEgLi4vdGVzdGZpbGUxJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChtZXJnZSknIFwKKyAgJ2VjaG8gTGluZSAwID5leHBlY3RlZCAmJgorICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNworICAgZG8KKyAgICAgZWNobyBMaW5lICRpID4+bWVyZ2UKKyAgICAgZWNobyBMaW5lICRpID4+ZXhwZWN0ZWQKKyAgIGRvbmUgJiYKKyAgIGVjaG8gTGluZSA4ID4+ZXhwZWN0ZWQgJiYKKyAgIGdpdCBhZGQgbWVyZ2UgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIk1lcmdlIHRlc3QgKHByZS1tZXJnZSkiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0ICIkKGVjaG8gJChncmVwIG1lcmdlIENWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSkpIiA9ICJtZXJnZS8xLjEvIiAmJgorICAgdGVzdF9jbXAgbWVyZ2UgLi4vbWVyZ2UgJiYKKyAgICggZWNobyBMaW5lIDA7IGNhdCBtZXJnZSApID5tZXJnZS50bXAgJiYKKyAgIG12IG1lcmdlLnRtcCBtZXJnZSAmJgorICAgY2QgIiRXT1JLRElSIiAmJgorICAgZWNobyBMaW5lIDggPj5tZXJnZSAmJgorICAgZ2l0IGFkZCBtZXJnZSAmJgorICAgZ2l0IGNvbW1pdCAtcSAtbSAiTWVyZ2UgdGVzdCAobWVyZ2UpIiAmJgorICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICBjZCBjdnN3b3JrICYmCisgICBzbGVlcCAxICYmIHRvdWNoIG1lcmdlICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgdGVzdF9jbXAgbWVyZ2UgLi4vZXhwZWN0ZWQnCisKK2NkICIkV09SS0RJUiIKKworY2F0ID5leHBlY3RlZC5DIDw8RU9GCis8PDw8PDw8IG1lcmdlLm1pbmUKK0xpbmUgMAorPT09PT09PQorTElORSAwCis+Pj4+Pj4+IG1lcmdlLjMKK0VPRgorCitmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDgKK2RvCisgIGVjaG8gTGluZSAkaSA+PmV4cGVjdGVkLkMKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAoY29uZmxpY3QgbWVyZ2UpJyBcCisgICcoIGVjaG8gTElORSAwOyBjYXQgbWVyZ2UgKSA+bWVyZ2UudG1wICYmCisgICBtdiBtZXJnZS50bXAgbWVyZ2UgJiYKKyAgIGdpdCBhZGQgbWVyZ2UgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIk1lcmdlIHRlc3QgKGNvbmZsaWN0KSIgJiYKKyAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgIHRlc3RfY21wIG1lcmdlIC4uL2V4cGVjdGVkLkMnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKC1DKScgXAorICAnY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgLUMgJiYKKyAgIHRlc3RfY21wIG1lcmdlIC4uL21lcmdlJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChtZXJnZSBuby1vcCknIFwKKyAgICdlY2hvIExpbmUgOSA+Pm1lcmdlICYmCisgICAgY3AgbWVyZ2UgY3Zzd29yay9tZXJnZSAmJgorICAgIGdpdCBhZGQgbWVyZ2UgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJNZXJnZSB0ZXN0IChuby1vcCkiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICAgY2QgY3Zzd29yayAmJgorICAgIHNsZWVwIDEgJiYgdG91Y2ggbWVyZ2UgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgIHRlc3RfY21wIG1lcmdlIC4uL21lcmdlJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlICgtcCknICcKKyAgICB0b3VjaCByZWFsbHktZW1wdHkgJiYKKyAgICBlY2hvIExpbmUgMSA+IG5vLWxmICYmCisgICAgcHJpbnRmICJMaW5lIDIiID4+IG5vLWxmICYmCisgICAgZ2l0IGFkZCByZWFsbHktZW1wdHkgbm8tbGYgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJVcGRhdGUgLXAgdGVzdCIgJiYKKyAgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgICBjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyB1cGRhdGUgJiYKKyAgICBybSAtZiBmYWlsdXJlcyAmJgorICAgIGZvciBpIGluIG1lcmdlIG5vLWxmIGVtcHR5IHJlYWxseS1lbXB0eTsgZG8KKyAgICAgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyB1cGRhdGUgLXAgIiRpIiA+JGkub3V0CisJdGVzdF9jbXAgJGkub3V0IC4uLyRpID4+ZmFpbHVyZXMgMj4mMQorICAgIGRvbmUgJiYKKyAgICB0ZXN0IC16ICIkKGNhdCBmYWlsdXJlcykiCisnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKG1vZHVsZSBsaXN0IHN1cHBvcnRzIHBhY2tlZCByZWZzKScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1uIHVwIC1kIDI+IG91dCAmJgorICAgIGdyZXAgImN2cyB1cGRhdGU6IE5ldyBkaXJlY3RvcnkgXGBtYXN0ZXInXCcnIiA8IG91dAorJworCisjLS0tLS0tLS0tLS0tCisjIENWUyBTVEFUVVMKKyMtLS0tLS0tLS0tLS0KKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHN0YXR1cycgJworICAgIG1rZGlyIHN0YXR1cy5kaXIgJiYKKyAgICBlY2hvIExpbmUgPiBzdGF0dXMuZGlyL3N0YXR1cy5maWxlICYmCisgICAgZWNobyBMaW5lID4gc3RhdHVzLmZpbGUgJiYKKyAgICBnaXQgYWRkIHN0YXR1cy5kaXIgc3RhdHVzLmZpbGUgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJTdGF0dXMgdGVzdCIgJiYKKyAgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgICBjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyB1cGRhdGUgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIHN0YXR1cyB8IGdyZXAgIl5GaWxlOiBzdGF0dXMuZmlsZSIgPi4uL291dCAmJgorICAgIHRlc3RfbGluZV9jb3VudCA9IDIgLi4vb3V0CisnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBzdGF0dXMgKG5vbnJlY3Vyc2l2ZSknICcKKyAgICBjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyBzdGF0dXMgLWwgfCBncmVwICJeRmlsZTogc3RhdHVzLmZpbGUiID4uLi9vdXQgJiYKKyAgICB0ZXN0X2xpbmVfY291bnQgPSAxIC4uL291dAorJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgc3RhdHVzIChubyBzdWJkaXJzIGluIGhlYWRlciknICcKKyAgICBjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyBzdGF0dXMgfCBncmVwIF5GaWxlOiA+Li4vb3V0ICYmCisgICAgISBncmVwIC8gPC4uL291dAorJworCisjLS0tLS0tLS0tLS0tCisjIENWUyBDSEVDS09VVAorIy0tLS0tLS0tLS0tLQorCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gLWMgKHNob3dzIG1vZHVsZSBkYXRhYmFzZSknICcKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIGNvIC1jID4gb3V0ICYmCisgICAgZ3JlcCAiXm1hc3RlclsJIF1bIAldKm1hc3RlciQiIDxvdXQgJiYKKyAgICAhIGdyZXAgLXYgIl5tYXN0ZXJbCSBdWyAJXSptYXN0ZXIkIiA8b3V0CisnCisKKyMtLS0tLS0tLS0tLS0KKyMgQ1ZTIEFOTk9UQVRFCisjLS0tLS0tLS0tLS0tCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBhbm5vdGF0ZScgJworICAgIGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIGFubm90YXRlIG1lcmdlID4uLi9vdXQgJiYKKyAgICBzZWQgLWUgInMvIC4qLy8iIC4uL291dCA+Li4vYWN0dWFsICYmCisgICAgZm9yIGkgaW4gMyAxIDEgMSAxIDEgMSAxIDIgNDsgZG8gZWNobyAxLiRpOyBkb25lID4uLi9leHBlY3QgJiYKKyAgICB0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTQwMS1naXQtY3Zzc2VydmVyLWNybGYuc2ggYi90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjZkNmZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTQwMS1naXQtY3Zzc2VydmVyLWNybGYuc2gKQEAgLTAsMCArMSwzMzMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggTWF0dGhldyBPZ2lsdmllCisjIFBhcnRzIGFkYXB0ZWQgZnJvbSBvdGhlciB0ZXN0cy4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWN2c3NlcnZlciAta2IgbW9kZXMKKwordGVzdHMgLWtiIG1vZGUgZm9yIGJpbmFyeSBmaWxlcyB3aGVuIGFjY2Vzc2luZyBhIGdpdAorcmVwb3NpdG9yeSB1c2luZyBjdnMgQ0xJIGNsaWVudCB2aWEgZ2l0LWN2c3NlcnZlciBzZXJ2ZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCittYXJrZWRfYXMgKCkgeworICAgIGZvdW5kRW50cnk9IiQoZ3JlcCAiXi8kMi8iICIkMS9DVlMvRW50cmllcyIpIgorICAgIGlmIFsgeCIkZm91bmRFbnRyeSIgPSB4IiIgXSA7IHRoZW4KKyAgICAgICBlY2hvICJOT1QgRk9VTkQ6ICQxICQyIDEgJDMiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCisgICAgICAgcmV0dXJuIDEKKyAgICBmaQorICAgIHRlc3QgeCIkKGdyZXAgIl4vJDIvIiAiJDEvQ1ZTL0VudHJpZXMiIHwgY3V0IC1kLyAtZjUpIiA9IHgiJDMiCisgICAgc3RhdD0kPworICAgIGVjaG8gIiQxICQyICRzdGF0ICckMyciID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCisgICAgcmV0dXJuICRzdGF0Cit9CisKK25vdF9wcmVzZW50KCkgeworICAgIGZvdW5kRW50cnk9IiQoZ3JlcCAiXi8kMi8iICIkMS9DVlMvRW50cmllcyIpIgorICAgIGlmIFsgLXIgIiQxLyQyIiBdIDsgdGhlbgorICAgICAgICBlY2hvICJFcnJvcjogRmlsZSBzdGlsbCBleGlzdHM6ICQxICQyIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgICAgICByZXR1cm4gMTsKKyAgICBmaQorICAgIGlmIFsgeCIkZm91bmRFbnRyeSIgIT0geCIiIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBzaG91bGQgbm90IGhhdmUgZm91bmQ6ICQxICQyIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkNvcnJlY3RseSBub3QgZm91bmQ6ICQxICQyIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgICAgICByZXR1cm4gMDsKKyAgICBmaQorfQorCitjdnMgPi9kZXYvbnVsbCAyPiYxCitpZiB0ZXN0ICQ/IC1uZSAxCit0aGVuCisgICAgc2tpcF9hbGw9J3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIGN2cyBub3QgZm91bmQnCisgICAgdGVzdF9kb25lCitmaQoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkwKK3RoZW4KKyAgICBza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworICAgIHRlc3RfZG9uZQorZmkKKyIkUEVSTF9QQVRIIiAtZSAndXNlIERCSTsgdXNlIERCRDo6U1FMaXRlJyA+L2Rldi9udWxsIDI+JjEgfHwgeworICAgIHNraXBfYWxsPSdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBQZXJsIFNRTGl0ZSBpbnRlcmZhY2UgdW5hdmFpbGFibGUnCisgICAgdGVzdF9kb25lCit9CisKK3Vuc2V0IEdJVF9ESVIgR0lUX0NPTkZJRworV09SS0RJUj0kKHB3ZCkKK1NFUlZFUkRJUj0kKHB3ZCkvZ2l0Y3ZzLmdpdAorZ2l0X2NvbmZpZz0iJFNFUlZFUkRJUi9jb25maWciCitDVlNST09UPSI6Zm9yazokU0VSVkVSRElSIgorQ1ZTV09SSz0iJChwd2QpL2N2c3dvcmsiCitDVlNfU0VSVkVSPWdpdC1jdnNzZXJ2ZXIKK2V4cG9ydCBDVlNST09UIENWU19TRVJWRVIKKworcm0gLXJmICIkQ1ZTV09SSyIgIiRTRVJWRVJESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworICAgIGVjaG8gIlNpbXBsZSB0ZXh0IGZpbGUiID50ZXh0ZmlsZS5jICYmCisgICAgZWNobyAiRmlsZSB3aXRoIGVtYmVkZGVkIE5VTDogUSA8LSB0aGVyZSIgfCBxX3RvX251bCA+IGJpbmZpbGUuYmluICYmCisgICAgbWtkaXIgc3ViZGlyICYmCisgICAgZWNobyAiQW5vdGhlciB0ZXh0IGZpbGUiID4gc3ViZGlyL2ZpbGUuaCAmJgorICAgIGVjaG8gIkFub3RoZXIgYmluYXJ5OiBRICh0aGlzIHRpbWUgQ1IpIiB8IHFfdG9fY3IgPiBzdWJkaXIvd2l0aENyLmJpbiAmJgorICAgIGVjaG8gIk1peGVkIHVwIE5VTCwgYnV0IG1hcmtlZCB0ZXh0OiBRIDwtIHRoZXJlIiB8IHFfdG9fbnVsID4gbWl4ZWRVcC5jICYmCisgICAgZWNobyAiVW5zcGVjaWZpZWQiID4gc3ViZGlyL3Vuc3BlY2lmaWVkLm90aGVyICYmCisgICAgZWNobyAiLyouYmluIC1jcmxmIiA+IC5naXRhdHRyaWJ1dGVzICYmCisgICAgZWNobyAiLyouYyBjcmxmIiA+PiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGVjaG8gInN1YmRpci8qLmJpbiAtY3JsZiIgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICBlY2hvICJzdWJkaXIvKi5jIGNybGYiID4+IC5naXRhdHRyaWJ1dGVzICYmCisgICAgZWNobyAic3ViZGlyL2ZpbGUuaCBjcmxmIiA+PiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgdGV4dGZpbGUuYyBiaW5maWxlLmJpbiBtaXhlZFVwLmMgc3ViZGlyLyogJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJGaXJzdCBDb21taXQiICYmCisgICAgZ2l0IGNsb25lIC1xIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgorICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIHRydWUgJiYKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5sb2dmaWxlICIkU0VSVkVSRElSL2dpdGN2cy5sb2ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAoZGVmYXVsdCBjcmxmKScgJworICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIHRlc3QgeCIkKGdyZXAgJy8taycgY3Zzd29yay9DVlMvRW50cmllcyBjdnN3b3JrL3N1YmRpci9DVlMvRW50cmllcykiID0geCIiCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKGFsbGJpbmFyeSknICcKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuYWxsYmluYXJ5IHRydWUgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAta2IKKycKKworcm0gLXJmIGN2c3dvcmsgY3ZzLmxvZwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvICh1c2UgYXR0cmlidXRlcy9hbGxiaW5hcnkpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLnVzZWNybGZhdHRyIHRydWUgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbWl4ZWRVcC5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAta2IKKycKKworcm0gLXJmIGN2c3dvcmsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAodXNlIGF0dHJpYnV0ZXMpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmFsbGJpbmFyeSBmYWxzZSAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaW5nIGZpbGVzJyAnCisgICAgKGNkIGN2c3dvcmsgJiYKKyAgICAoY2Qgc3ViZGlyICYmCisgICAgZWNobyAibW9yZSB0ZXh0IiA+IHNyYy5jICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc3JjLmMgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyAuIHNyYy5jICIiICYmCisgICAgZWNobyAicHN1ZWRvLWJpbmFyeSIgPiB0ZW1wLmJpbgorICAgICkgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGFkZCBzdWJkaXIvdGVtcC5iaW4gPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBzdWJkaXIgdGVtcC5iaW4gIi1rYiIgJiYKKyAgICBjZCBzdWJkaXIgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNpIC1tICJhZGRpbmcgZmlsZXMiID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgLiB0ZW1wLmJpbiAiLWtiIiAmJgorICAgIG1hcmtlZF9hcyAuIHNyYy5jICIiCisgICAgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZycgJworICAgIGdpdCBwdWxsIGdpdGN2cy5naXQgJiYKKyAgICBlY2hvICdoaScgPiBzdWJkaXIvbmV3ZmlsZS5iaW4gJiYKKyAgICBlY2hvICdqdW5rJyA+IHN1YmRpci9maWxlLmggJiYKKyAgICBlY2hvICdoaScgPiBzdWJkaXIvbmV3ZmlsZS5jICYmCisgICAgZWNobyAnaGVsbG8nID4+IGJpbmZpbGUuYmluICYmCisgICAgZ2l0IGFkZCBzdWJkaXIvbmV3ZmlsZS5iaW4gc3ViZGlyL2ZpbGUuaCBzdWJkaXIvbmV3ZmlsZS5jIGJpbmZpbGUuYmluICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiQWRkIGFuZCBjaGFuZ2Ugc29tZSBmaWxlcyIgJiYKKyAgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgICAoY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlCisgICAgKSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYyAiIiAmJgorICAgIGVjaG8gIkZpbGUgd2l0aCBlbWJlZGRlZCBOVUw6IFEgPC0gdGhlcmUiIHwgcV90b19udWwgPiB0bXBFeHBlY3QxICYmCisgICAgZWNobyAiaGVsbG8iID4+IHRtcEV4cGVjdDEgJiYKKyAgICBjbXAgY3Zzd29yay9iaW5maWxlLmJpbiB0bXBFeHBlY3QxCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKHVzZSBhdHRyaWJ1dGVzL2d1ZXNzKScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmFsbGJpbmFyeSBndWVzcyAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtdWx0aS1saW5lIGZpbGVzJyAnCisgICAgKCBlY2hvICJsaW5lIDEiICYmCisgICAgICBlY2hvICJsaW5lIDIiICYmCisgICAgICBlY2hvICJsaW5lIDMiICYmCisgICAgICBlY2hvICJsaW5lIDQgd2l0aCBOVUw6IFEgPC0iICkgfCBxX3RvX251bCA+IG11bHRpbGluZS5jICYmCisgICAgZ2l0IGFkZCBtdWx0aWxpbmUuYyAmJgorICAgICggZWNobyAibGluZSAxIiAmJgorICAgICAgZWNobyAibGluZSAyIiAmJgorICAgICAgZWNobyAibGluZSAzIiAmJgorICAgICAgZWNobyAibGluZSA0IiApIHwgcV90b19udWwgPiBtdWx0aWxpbmVUeHQuYyAmJgorICAgIGdpdCBhZGQgbXVsdGlsaW5lVHh0LmMgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJtdWx0aWxpbmUgZmlsZXMiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKGd1ZXNzKScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy51c2VjcmxmYXR0ciBmYWxzZSAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyBhbm90aGVyIGNvcHkgKGd1ZXNzKScgJworICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbWl4ZWRVcC5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB0ZXh0IChndWVzcyknICcKKyAgICAoY2QgY3Zzd29yayAmJgorICAgIGVjaG8gInNpbXBsZVRleHQiID4gc2ltcGxlVGV4dC5jICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc2ltcGxlVGV4dC5jCisgICAgKSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHNpbXBsZVRleHQuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYmluIChndWVzcyknICcKKyAgICAoY2QgY3Zzd29yayAmJgorICAgIGVjaG8gInNpbXBsZUJpbjogTlVMOiBRIDwtIHRoZXJlIiB8IHFfdG9fbnVsID4gc2ltcGxlQmluLmJpbiAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgYWRkIHNpbXBsZUJpbi5iaW4KKyAgICApICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgc2ltcGxlQmluLmJpbiAta2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGZpbGVzIChndWVzcyknICcKKyAgICAoY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgcm0gLWYgc3ViZGlyL2ZpbGUuaCAmJgorICAgIChjZCBzdWJkaXIgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHJtIC1mIHdpdGhDci5iaW4KKyAgICApKSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNpIChndWVzcyknICcKKyAgICAoY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY2kgLW0gImFkZC9ybSBmaWxlcyIgPmN2cy5sb2cgMj4mMQorICAgICkgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yay9zdWJkaXIgZmlsZS5oICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYmluICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHNpbXBsZUJpbi5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgc2ltcGxlVGV4dC5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzdWJkaXIgb2Ygb3RoZXIgY29weSAoZ3Vlc3MpJyAnCisgICAgKGNkIGN2c3dvcmsyL3N1YmRpciAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlCisgICAgKSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyL3N1YmRpciB3aXRoQ3IuYmluICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIvc3ViZGlyIGZpbGUuaCAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYmluICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmMgIiIgJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMiBzaW1wbGVCaW4uYmluICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIgc2ltcGxlVGV4dC5jCisnCisKK2VjaG8gInN0YXJ0aW5nIHVwZGF0ZS9tZXJnZSIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS9tZXJnZSBmdWxsIG90aGVyIGNvcHkgKGd1ZXNzKScgJworICAgIGdpdCBwdWxsIGdpdGN2cy5naXQgbWFzdGVyICYmCisgICAgc2VkICJzLzMvcmVwbGFjZWRfMy8iIDwgbXVsdGlsaW5lVHh0LmMgPiBtbC50ZW1wICYmCisgICAgbXYgbWwudGVtcCBtdWx0aWxpbmVUeHQuYyAmJgorICAgIGdpdCBhZGQgbXVsdGlsaW5lVHh0LmMgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJtb2RpZnkgbXVsdGlsaW5lIGZpbGUiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICAgKGNkIGN2c3dvcmsyICYmCisgICAgc2VkICJzLzEvcmVwbGFjZWRfMS8iIDwgbXVsdGlsaW5lVHh0LmMgPiBtbC50ZW1wICYmCisgICAgbXYgbWwudGVtcCBtdWx0aWxpbmVUeHQuYyAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgdXBkYXRlID4gY3ZzLmxvZyAyPiYxCisgICAgKSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyL3N1YmRpciB3aXRoQ3IuYmluICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIvc3ViZGlyIGZpbGUuaCAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYmluICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgc2ltcGxlQmluLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgc2ltcGxlVGV4dC5jICIiICYmCisgICAgZWNobyAibGluZSByZXBsYWNlZF8xIiA+IHRtcEV4cGVjdDIgJiYKKyAgICBlY2hvICJsaW5lIDIiID4+IHRtcEV4cGVjdDIgJiYKKyAgICBlY2hvICJsaW5lIHJlcGxhY2VkXzMiID4+IHRtcEV4cGVjdDIgJiYKKyAgICBlY2hvICJsaW5lIDQiIHwgcV90b19udWwgPj4gdG1wRXhwZWN0MiAmJgorICAgIGNtcCBjdnN3b3JrMi9tdWx0aWxpbmVUeHQuYyB0bXBFeHBlY3QyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2ggYi90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MGJiNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKQEAgLTAsMCArMSw3OTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSmFrdWIgTmFyZWJza2kKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0d2ViIGFzIHN0YW5kYWxvbmUgc2NyaXB0IChiYXNpYyB0ZXN0cykuCisKK1RoaXMgdGVzdCBydW5zIGdpdHdlYiAoZ2l0IHdlYiBpbnRlcmZhY2UpIGFzIENHSSBzY3JpcHQgZnJvbQorY29tbWFuZGxpbmUsIGFuZCBjaGVja3MgdGhhdCBpdCB3b3VsZCBub3Qgd3JpdGUgYW55IGVycm9ycworb3Igd2FybmluZ3MgdG8gbG9nLicKKworCisuIC4vZ2l0d2ViLWxpYi5zaAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbm8gY29tbWl0cyAoZW1wdHksIGp1c3QgaW5pdGlhbGl6ZWQgcmVwb3NpdG9yeSkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IHByb2plY3RzX2xpc3QgKGltcGxpY2l0KScgXAorCSdnaXR3ZWJfcnVuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogcHJvamVjdHNfaW5kZXgnIFwKKwknZ2l0d2ViX3J1biAiYT1wcm9qZWN0X2luZGV4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IC5naXQgc3VtbWFyeSAoaW1wbGljaXQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdubyBjb21taXRzOiAuZ2l0IGNvbW1pdCAoaW1wbGljaXQgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IC5naXQgY29tbWl0ZGlmZiAoaW1wbGljaXQgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdubyBjb21taXRzOiAuZ2l0IHRyZWUgKGltcGxpY2l0IEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRyZWUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogLmdpdCBoZWFkcycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1oZWFkcyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdubyBjb21taXRzOiAuZ2l0IHRhZ3MnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dGFncyInCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGluaXRpYWwgY29tbWl0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdNYWtlIGluaXRpYWwgY29tbWl0JyBcCisJJ2VjaG8gIk5vdCBhbiBlbXB0eSBmaWxlLiIgPiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJJbml0aWFsIGNvbW1pdC4iICYmCisJIGdpdCBicmFuY2ggYicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3Byb2plY3RzX2xpc3QgKGltcGxpY2l0KScgXAorCSdnaXR3ZWJfcnVuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncHJvamVjdHNfaW5kZXgnIFwKKwknZ2l0d2ViX3J1biAiYT1wcm9qZWN0X2luZGV4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgc3VtbWFyeSAoaW1wbGljaXQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGNvbW1pdCAoaW1wbGljaXQgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgY29tbWl0ZGlmZiAoaW1wbGljaXQgSEVBRCwgcm9vdCBjb21taXQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXRkaWZmX3BsYWluIChpbXBsaWNpdCBIRUFELCByb290IGNvbW1pdCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZl9wbGFpbiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGNvbW1pdCAoSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0O2g9SEVBRCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IHRyZWUgKGltcGxpY2l0IEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRyZWUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBibG9iIChmaWxlKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1ibG9iO2Y9ZmlsZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGJsb2JfcGxhaW4gKGZpbGUpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWJsb2JfcGxhaW47Zj1maWxlIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIG5vbmV4aXN0ZW50IG9iamVjdHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgY29tbWl0IChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdDtoPW5vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGNvbW1pdGRpZmYgKG5vbi1leGlzdGVudCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtoPW5vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGNvbW1pdGRpZmYgKG5vbi1leGlzdGVudCB2cyBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPW5vbi1leGlzdGVudDtoPUhFQUQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCB0cmVlICgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlO2g9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IHRhZyAoMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dGFnO2g9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGJsb2IgKG5vbi1leGlzdGVudCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9YmxvYjtmPW5vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGJsb2JfcGxhaW4gKG5vbi1leGlzdGVudCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9YmxvYl9wbGFpbjtmPW5vbi1leGlzdGVudCInCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbW1pdGRpZmYgdGVzdGluZyAoaW1wbGljaXQsIG9uZSBpbXBsaWNpdCB0cmVlLWlzaCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IHJvb3QnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiBmaWxlIGFkZGVkJyBcCisJJ2VjaG8gIk5ldyBmaWxlIiA+IG5ld19maWxlICYmCisJIGdpdCBhZGQgbmV3X2ZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiRmlsZSBhZGRlZC4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogbW9kZSBjaGFuZ2UnIFwKKwkndGVzdF9jaG1vZCAreCBuZXdfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJNb2RlIGNoYW5nZWQuIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IGZpbGUgcmVuYW1lZCcgXAorCSdnaXQgbXYgbmV3X2ZpbGUgcmVuYW1lZF9maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgcmVuYW1lZC4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKKwknY29tbWl0ZGlmZigwKTogZmlsZSB0byBzeW1saW5rJyBcCisJJ3JtIHJlbmFtZWRfZmlsZSAmJgorCSBsbiAtcyBmaWxlIHJlbmFtZWRfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIHRvIHN5bWxpbmsuIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IGZpbGUgZGVsZXRlZCcgXAorCSdnaXQgcm0gcmVuYW1lZF9maWxlICYmCisJIHJtIC1mIHJlbmFtZWRfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIHJlbW92ZWQuIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IGZpbGUgY29waWVkIC8gbmV3IGZpbGUnIFwKKwknY3AgZmlsZSBmaWxlMiAmJgorCSBnaXQgYWRkIGZpbGUyICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgY29waWVkLiIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiBtb2RlIGNoYW5nZSBhbmQgbW9kaWZpZWQnIFwKKwknZWNobyAiTmV3IGxpbmUiID4+IGZpbGUyICYmCisJIHRlc3RfY2htb2QgK3ggZmlsZTIgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiTW9kZSBjaGFuZ2UgYW5kIG1vZGlmaWNhdGlvbi4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogcmVuYW1lZCBhbmQgbW9kaWZpZWQnIFwKKwknY2F0ID5maWxlMjw8RU9GICYmCitEb21pbnVzIHJlZ2l0IG1lLAorZXQgbmloaWwgbWloaSBkZWVyaXQuCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK3Byb3B0ZXIgbm9tZW4gc3V1bS4KK0VPRgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIGFkZGVkLiIgJiYKKwkgZ2l0IG12IGZpbGUyIGZpbGUzICYmCisJIGVjaG8gIlByb3B0ZXIgbm9tZW4gc3V1bS4iID4+IGZpbGUzICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgcmVuYW1lIGFuZCBtb2RpZmljYXRpb24uIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IHJlbmFtZWQsIG1vZGUgY2hhbmdlIGFuZCBtb2RpZmllZCcgXAorCSdnaXQgbXYgZmlsZTMgZmlsZTIgJiYKKwkgZWNobyAiUHJvcHRlciBub21lbiBzdXVtLiIgPj4gZmlsZTIgJiYKKwkgdGVzdF9jaG1vZCAreCBmaWxlMiAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIHJlbmFtZSwgbW9kZSBjaGFuZ2UgYW5kIG1vZGlmaWNhdGlvbi4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29tbWl0ZGlmZiB0ZXN0aW5nICh0YWtlbiBmcm9tIHQ0MTE0LWFwcGx5LXR5cGVjaGFuZ2Uuc2gpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3NldHVwIHR5cGVjaGFuZ2UgY29tbWl0cycgJworCWVjaG8gImhlbGxvIHdvcmxkIiA+IGZvbyAmJgorCWVjaG8gImhpIHBsYW5ldCIgPiBiYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIGluaXRpYWwgJiYKKwlybSAtZiBmb28gJiYKKwlsbiAtcyBiYXIgZm9vICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJmb28gc3ltbGlua2VkIHRvIGJhciIgJiYKKwlnaXQgYnJhbmNoIGZvby1zeW1saW5rZWQtdG8tYmFyICYmCisJcm0gLWYgZm9vICYmCisJZWNobyAiaG93IGZhciBpcyB0aGUgc3VuPyIgPiBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZvbyAmJgorCWdpdCBjb21taXQgLW0gImZvbyBiYWNrIHRvIGZpbGUiICYmCisJZ2l0IGJyYW5jaCBmb28tYmFjay10by1maWxlICYmCisJcm0gLWYgZm9vICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBmb28gJiYKKwlta2RpciBmb28gJiYKKwllY2hvICJpZiBvbmx5IEkga25ldyIgPiBmb28vYmF6ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmb28vYmF6ICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vIGJlY29tZXMgYSBkaXJlY3RvcnkiICYmCisJZ2l0IGJyYW5jaCAiZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkiICYmCisJZWNobyAiaGVsbG8gd29ybGQiID4gZm9vL2JheiAmJgorCWdpdCB1cGRhdGUtaW5kZXggZm9vL2JheiAmJgorCWdpdCBjb21taXQgLW0gImZvby9iYXogaXMgdGhlIG9yaWdpbmFsIGZvbyIgJiYKKwlnaXQgYnJhbmNoIGZvby1iYXotcmVuYW1lZC1mcm9tLWZvbworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IGZpbGUgcmVuYW1lZCBmcm9tIGZvbyB0byBmb28vYmF6JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9aW5pdGlhbDtoPWZvby1iYXotcmVuYW1lZC1mcm9tLWZvbyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBmaWxlIHJlbmFtZWQgZnJvbSBmb28vYmF6IHRvIGZvbycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPWZvby1iYXotcmVuYW1lZC1mcm9tLWZvbztoPWluaXRpYWwiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigyKTogZGlyZWN0b3J5IGJlY29tZXMgZmlsZScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPWZvby1iZWNvbWVzLWEtZGlyZWN0b3J5O2g9aW5pdGlhbCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBmaWxlIGJlY29tZXMgZGlyZWN0b3J5JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9aW5pdGlhbDtoPWZvby1iZWNvbWVzLWEtZGlyZWN0b3J5IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IGZpbGUgYmVjb21lcyBzeW1saW5rJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9aW5pdGlhbDtoPWZvby1zeW1saW5rZWQtdG8tYmFyIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IHN5bWxpbmsgYmVjb21lcyBmaWxlJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9Zm9vLXN5bWxpbmtlZC10by1iYXI7aD1mb28tYmFjay10by1maWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IHN5bWxpbmsgYmVjb21lcyBkaXJlY3RvcnknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtocD1mb28tc3ltbGlua2VkLXRvLWJhcjtoPWZvby1iZWNvbWVzLWEtZGlyZWN0b3J5IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IGRpcmVjdG9yeSBiZWNvbWVzIHN5bWxpbmsnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtocD1mb28tYmVjb21lcy1hLWRpcmVjdG9yeTtoPWZvby1zeW1saW5rZWQtdG8tYmFyIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbW1pdGRpZmYgdGVzdGluZyAoaW5jb21wbGV0ZSBsaW5lcykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgaW5jb21wbGV0ZSBsaW5lcycgJworCWNhdCA+ZmlsZTw8LVxFT0YgJiYKKwlEb21pbnVzIHJlZ2l0IG1lLAorCWV0IG5paGlsIG1paGkgZGVlcml0LgorCUluIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKKwlzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKKwlhbmltYW0gbWVhbSBjb252ZXJ0aXQsCisJZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorCXByb3B0ZXIgbm9tZW4gc3V1bS4KKwlDSEFOR0VfTUUKKwlFT0YKKwlnaXQgY29tbWl0IC1hIC1tICJQcmVwYXJpbmcgZm9yIGluY29tcGxldGUgbGluZXMiICYmCisJZWNobyAiaW5jb21wbGV0ZSIgfCB0ciAtZCAiXFwwMTIiID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gIkFkZCBpbmNvbXBsZXRlIGxpbmUiICYmCisJZ2l0IHRhZyBpbmNvbXBsZXRlX2xpbmVzX2FkZCAmJgorCXNlZCAtZSBzL0NIQU5HRV9NRS9jaGFuZ2VfbWUvIDxmaWxlID5maWxlKyAmJgorCW12IC1mIGZpbGUrIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJJbmNvbXBsZXRlIGNvbnRleHQgbGluZSIgJiYKKwlnaXQgdGFnIGluY29tcGxldGVfbGluZXNfY3R4ICYmCisJZWNobyAiRG9taW51cyByZWdpdCBtZSwiID5maWxlICYmCisJZWNobyAiaW5jb21wbGV0ZSBsaW5lIiB8IHRyIC1kICJcXDAxMiIgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIGluY29tcGxldGUgbGluZSIgJiYKKwlnaXQgdGFnIGluY29tcGxldGVfbGluZXNfY2hnCisJZWNobyAiRG9taW51cyByZWdpdCBtZSwiID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiUmVtb3ZlIGluY29tcGxldGUgbGluZSIgJiYKKwlnaXQgdGFnIGluY29tcGxldGVfbGluZXNfcmVtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdGRpZmYoMSk6IGFkZGl0aW9uIG9mIGluY29tcGxldGUgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2FkZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0ZGlmZigxKTogaW5jb21wbGV0ZSBsaW5lIGFzIGNvbnRleHQgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2N0eCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0ZGlmZigxKTogY2hhbmdlIGluY29tcGxldGUgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2NoZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0ZGlmZigxKTogcmVtb3ZhbCBvZiBpbmNvbXBsZXRlIGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19yZW0iCisnCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb21taXQsIGNvbW1pdGRpZmY6IG1lcmdlLCBsYXJnZQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0NyZWF0ZSBhIG1lcmdlJyBcCisJJ2dpdCBjaGVja291dCBiICYmCisJIGVjaG8gIkJyYW5jaCIgPj4gYiAmJgorCSBnaXQgYWRkIGIgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiT24gYnJhbmNoIiAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBwdWxsIC4gYiAmJgorCSBnaXQgdGFnIG1lcmdlX2NvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdCgwKTogbWVyZ2UgY29tbWl0JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiBtZXJnZSBjb21taXQnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdQcmVwYXJlIGxhcmdlIGNvbW1pdCcgXAorCSdnaXQgY2hlY2tvdXQgYiAmJgorCSBlY2hvICJUbyBiZSBjaGFuZ2VkIiA+IDAxLWNoYW5nZSAmJgorCSBlY2hvICJUbyBiZSByZW5hbWVkIiA+IDAyLXB1cmUtcmVuYW1lLWZyb20gJiYKKwkgZWNobyAiVG8gYmUgZGVsZXRlZCIgPiAwMy1kZWxldGUgJiYKKwkgZWNobyAiVG8gYmUgcmVuYW1lZCBhbmQgY2hhbmdlZCIgPiAwNC1yZW5hbWUtZnJvbSAmJgorCSBlY2hvICJUbyBoYXZlIG1vZGUgY2hhbmdlZCIgPiAwNS1tb2RlLWNoYW5nZSAmJgorCSBlY2hvICJGaWxlIHRvIHN5bWxpbmsiID4gMDYtZmlsZS1vci1zeW1saW5rICYmCisJIGVjaG8gIlRvIGJlIGNoYW5nZWQgYW5kIGhhdmUgbW9kZSBjaGFuZ2VkIiA+IDA3LWNoYW5nZS1tb2RlLWNoYW5nZQkmJgorCSBnaXQgYWRkIDAqICYmCisJIGdpdCBjb21taXQgLWEgLW0gIlByZXBhcmUgbGFyZ2UgY29tbWl0IiAmJgorCSBlY2hvICJDaGFuZ2VkIiA+IDAxLWNoYW5nZSAmJgorCSBnaXQgbXYgMDItcHVyZS1yZW5hbWUtZnJvbSAwMi1wdXJlLXJlbmFtZS10byAmJgorCSBnaXQgcm0gMDMtZGVsZXRlICYmIHJtIC1mIDAzLWRlbGV0ZSAmJgorCSBlY2hvICJBIG5ldyBmaWxlIiA+IDAzLW5ldyAmJgorCSBnaXQgYWRkIDAzLW5ldyAmJgorCSBnaXQgbXYgMDQtcmVuYW1lLWZyb20gMDQtcmVuYW1lLXRvICYmCisJIGVjaG8gIkNoYW5nZWQiID4+IDA0LXJlbmFtZS10byAmJgorCSB0ZXN0X2NobW9kICt4IDA1LW1vZGUtY2hhbmdlICYmCisJIHJtIC1mIDA2LWZpbGUtb3Itc3ltbGluayAmJgorCSBpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTOyB0aGVuCisJCWxuIC1zIDAxLWNoYW5nZSAwNi1maWxlLW9yLXN5bWxpbmsKKwkgZWxzZQorCQlwcmludGYgJXMgMDEtY2hhbmdlID4gMDYtZmlsZS1vci1zeW1saW5rCisJIGZpICYmCisJIGVjaG8gIkNoYW5nZWQgYW5kIGhhdmUgbW9kZSBjaGFuZ2VkIiA+IDA3LWNoYW5nZS1tb2RlLWNoYW5nZQkmJgorCSB0ZXN0X2NobW9kICt4IDA3LWNoYW5nZS1tb2RlLWNoYW5nZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJMYXJnZSBjb21taXQiICYmCisJIGdpdCBjaGVja291dCBtYXN0ZXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXQoMSk6IGxhcmdlIGNvbW1pdCcgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQ7aD1iIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMSk6IGxhcmdlIGNvbW1pdCcgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9YiInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzaWRlLWJ5LXNpZGUgZGlmZgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlLWJ5LXNpZGU6IGFkZGl0aW9uIG9mIGluY29tcGxldGUgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2FkZDtkcz1zaWRlYnlzaWRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlLWJ5LXNpZGU6IGluY29tcGxldGUgbGluZSBhcyBjb250ZXh0IGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19jdHg7ZHM9c2lkZWJ5c2lkZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZS1ieS1zaWRlOiBjaGFuZ2VkIGluY29tcGxldGUgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2NoZztkcz1zaWRlYnlzaWRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlLWJ5LXNpZGU6IHJlbW92YWwgb2YgaW5jb21wbGV0ZSBsaW5lJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtoPWluY29tcGxldGVfbGluZXNfcmVtO2RzPXNpZGVieXNpZGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGUtYnktc2lkZTogbWVyZ2UgY29tbWl0JyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtoPW1lcmdlX2NvbW1pdDtkcz1zaWRlYnlzaWRlIgorJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgdGFncyB0ZXN0aW5nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0YWdzOiBsaXN0IG9mIGRpZmZlcmVudCB0eXBlcyBvZiB0YWdzJyBcCisJJ2dpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZ2l0IHRhZyAtYSAtbSAiVGFnIGNvbW1pdCBvYmplY3QiIHRhZy1jb21taXQgSEVBRCAmJgorCSBnaXQgdGFnIC1hIC1tICIiIHRhZy1jb21taXQtbm9tZXNzYWdlIEhFQUQgJiYKKwkgZ2l0IHRhZyAtYSAtbSAiVGFnIHRhZyBvYmplY3QiIHRhZy10YWcgdGFnLWNvbW1pdCAmJgorCSBnaXQgdGFnIC1hIC1tICJUYWcgdHJlZSBvYmplY3QiIHRhZy10cmVlIEhFQURee3RyZWV9ICYmCisJIGdpdCB0YWcgLWEgLW0gIlRhZyBibG9iIG9iamVjdCIgdGFnLWJsb2IgSEVBRDpmaWxlICYmCisJIGdpdCB0YWcgbGlnaHR3ZWlnaHQvdGFnLWNvbW1pdCBIRUFEICYmCisJIGdpdCB0YWcgbGlnaHR3ZWlnaHQvdGFnLXRhZyB0YWctY29tbWl0ICYmCisJIGdpdCB0YWcgbGlnaHR3ZWlnaHQvdGFnLXRyZWUgSEVBRF57dHJlZX0gJiYKKwkgZ2l0IHRhZyBsaWdodHdlaWdodC90YWctYmxvYiBIRUFEOmZpbGUgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9dGFncyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0YWc6IFRhZyB0byBjb21taXQgb2JqZWN0JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRhZztoPXRhZy1jb21taXQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndGFnOiBvbiBsaWdodHdlaWdodCB0YWcgKGludmFsaWQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRhZztoPWxpZ2h0d2VpZ2h0L3RhZy1jb21taXQiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbG9ncworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbG9nczogbG9nIChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1sb2ciJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbG9nczogc2hvcnRsb2cgKGltcGxpY2l0IEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXNob3J0bG9nIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xvZ3M6IGhpc3RvcnkgKGltcGxpY2l0IEhFQUQsIGZpbGUpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWhpc3Rvcnk7Zj1maWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xvZ3M6IGhpc3RvcnkgKGltcGxpY2l0IEhFQUQsIG5vbi1leGlzdGVudCBmaWxlKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1oaXN0b3J5O2Y9bm9uLWV4aXN0ZW50IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xvZ3M6IGhpc3RvcnkgKGltcGxpY2l0IEhFQUQsIGRlbGV0ZWQgZmlsZSknIFwKKwknZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBlY2hvICJ0byBiZSBkZWxldGVkIiA+IGRlbGV0ZWRfZmlsZSAmJgorCSBnaXQgYWRkIGRlbGV0ZWRfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1tICJBZGQgZmlsZSB0byBiZSBkZWxldGVkIiAmJgorCSBnaXQgcm0gZGVsZXRlZF9maWxlICYmCisJIGdpdCBjb21taXQgLW0gIkRlbGV0ZSBmaWxlIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1oaXN0b3J5O2Y9ZGVsZXRlZF9maWxlIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHBhdGhfaW5mbyBsaW5rcwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdCcgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L2IiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0L2JyYW5jaDpmaWxlJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L21hc3RlcjpmaWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2g6ZGlyLycgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9tYXN0ZXI6Zm9vLyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoIChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L25vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoOmZpbGVuYW1lIChub24tZXhpc3RlbnQgYnJhbmNoKScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9ub24tZXhpc3RlbnQ6bm9uLWV4aXN0ZW50IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2g6ZmlsZSAobm9uLWV4aXN0ZW50KScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9tYXN0ZXI6bm9uLWV4aXN0ZW50IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2g6ZGlyLyAobm9uLWV4aXN0ZW50KScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9tYXN0ZXI6bm9uLWV4aXN0ZW50LyInCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2g6L2ZpbGUnIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvbWFzdGVyOi9maWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC86L2ZpbGUgKGltcGxpY2l0IEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0LzovZmlsZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvOi8gKGltcGxpY2l0IEhFQUQsIHRvcCB0cmVlKScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC86LyInCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZlZWQgZ2VuZXJhdGlvbgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZmVlZHM6IE9QTUwnIFwKKwknZ2l0d2ViX3J1biAiYT1vcG1sIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2ZlZWQ6IFJTUycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1yc3MiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZmVlZDogQXRvbScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1hdG9tIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGVuY29kaW5nL2RlY29kaW5nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdlbmNvZGUoY29tbWl0KTogdXRmOCcgXAorCScuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCisJIHRlc3Rfd2hlbl9maW5pc2hlZCAiR0lUX0FVVEhPUl9OQU1FPVwiQSBVIFRob3JcIiIgJiYKKwkgdGVzdF93aGVuX2ZpbmlzaGVkICJHSVRfQ09NTUlUVEVSX05BTUU9XCJDIE8gTWl0dGVyXCIiICYmCisJIGVjaG8gIlVURi04IiA+PiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSBnaXQgY29tbWl0IC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0ICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdlbmNvZGUoY29tbWl0KTogaXNvLTg4NTktMScgXAorCScuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKKwkgdGVzdF93aGVuX2ZpbmlzaGVkICJHSVRfQVVUSE9SX05BTUU9XCJBIFUgVGhvclwiIiAmJgorCSB0ZXN0X3doZW5fZmluaXNoZWQgIkdJVF9DT01NSVRURVJfTkFNRT1cIkMgTyBNaXR0ZXJcIiIgJiYKKwkgZWNobyAiSVNPLTg4NTktMSIgPj4gZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwkgdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgaTE4bi5jb21taXRlbmNvZGluZyIgJiYKKwkgZ2l0IGNvbW1pdCAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC9JU084ODU5LTEudHh0ICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdlbmNvZGUobG9nKTogdXRmLTggYW5kIGlzby04ODU5LTEnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9bG9nIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGV4dHJhIG9wdGlvbnMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ29wdDogbG9nIC0tbm8tbWVyZ2VzJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWxvZztvcHQ9LS1uby1tZXJnZXMiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknb3B0OiBhdG9tIC0tbm8tbWVyZ2VzJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWxvZztvcHQ9LS1uby1tZXJnZXMiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknb3B0OiAiZmlsZSIgaGlzdG9yeSAtLW5vLW1lcmdlcycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1oaXN0b3J5O2Y9ZmlsZTtvcHQ9LS1uby1tZXJnZXMiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknb3B0OiBsb2cgLS1uby1zdWNoLW9wdGlvbiAoaW52YWxpZCBvcHRpb24pJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWxvZztvcHQ9LS1uby1zdWNoLW9wdGlvbiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdvcHQ6IHRyZWUgLS1uby1tZXJnZXMgKGludmFsaWQgb3B0aW9uIGZvciBhY3Rpb24pJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRyZWU7b3B0PS0tbm8tbWVyZ2VzIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3RpbmcgY29uZmlnX3RvX211bHRpIC8gY2xvbmV1cmwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICAgJ1VSTDogbm8gcHJvamVjdCBVUkxzLCBubyBiYXNlIFVSTCcgXAorICAgICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICAgJ1VSTDogcHJvamVjdCBVUkxzIHZpYSBnaXR3ZWIudXJsJyBcCisgICAgICAgJ2dpdCBjb25maWcgLS1hZGQgZ2l0d2ViLnVybCBnaXQ6Ly9leGFtcGxlLmNvbS9naXQvdHJhc2guZ2l0ICYmCisgICAgICAgIGdpdCBjb25maWcgLS1hZGQgZ2l0d2ViLnVybCBodHRwOi8vZXhhbXBsZS5jb20vZ2l0L3RyYXNoLmdpdCAmJgorICAgICAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKworY2F0ID4uZ2l0L2Nsb25ldXJsIDw8XEVPRgorZ2l0Oi8vZXhhbXBsZS5jb20vZ2l0L3RyYXNoLmdpdAoraHR0cDovL2V4YW1wbGUuY29tL2dpdC90cmFzaC5naXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgICAnVVJMOiBwcm9qZWN0IFVSTHMgdmlhIGNsb25ldXJsIGZpbGUnIFwKKyAgICAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c3VtbWFyeSInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBnaXR3ZWIgY29uZmlnIGFuZCByZXBvIGNvbmZpZworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCisKKyMgdHVybiBvbiBvdmVycmlkZSBmb3IgZWFjaCBvdmVycmlkYWJsZSBmZWF0dXJlCitmb3JlYWNoIG15ICRrZXkgKGtleXMgJWZlYXR1cmUpIHsKKwlpZiAoJGZlYXR1cmV7JGtleX17J3N1Yid9KSB7CisJCSRmZWF0dXJleyRrZXl9eydvdmVycmlkZSd9ID0gMTsKKwl9Cit9CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbmZpZyBvdmVycmlkZTogcHJvamVjdHMgbGlzdCAoaW1wbGljaXQpJyBcCisJJ2dpdHdlYl9ydW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgbm90IG92ZXJyaWRkZW4gaW4gcmVwbyBjb25maWcnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgZGlzYWJsZWQgaW4gcmVwbyBjb25maWcnIFwKKwknZ2l0IGNvbmZpZyBnaXR3ZWIuYmxhbWUgbm8gJiYKKwkgZ2l0IGNvbmZpZyBnaXR3ZWIuc25hcHNob3Qgbm9uZSAmJgorCSBnaXQgY29uZmlnIGdpdHdlYi5hdmF0YXIgZ3JhdmF0YXIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgZW5hYmxlZCBpbiByZXBvIGNvbmZpZyAoMSknIFwKKwknZ2l0IGNvbmZpZyBnaXR3ZWIuYmxhbWUgeWVzICYmCisJIGdpdCBjb25maWcgZ2l0d2ViLnNuYXBzaG90ICJ6aXAsdGd6LCB0YnoyIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKKworY2F0ID4uZ2l0L2NvbmZpZyA8PFxFT0YKKyMgdGVzdGluZyBub3ZhbCBhbmQgYWx0ZXJuYXRlIHNlcGFyYXRvcgorW2dpdHdlYl0KKwlibGFtZQorCXNuYXBzaG90ID0gemlwIHRnegorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29uZmlnIG92ZXJyaWRlOiB0cmVlIHZpZXcsIGZlYXR1cmVzIGVuYWJsZWQgaW4gcmVwbyBjb25maWcgKDIpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRyZWUiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2VhcmNoaW5nCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKworIyBlbmFibGUgc2VhcmNoCiskZmVhdHVyZXsnc2VhcmNoJ317J2RlZmF1bHQnfSA9IFsxXTsKKyRmZWF0dXJleydncmVwJ317J2RlZmF1bHQnfSA9IFsxXTsKKyRmZWF0dXJleydwaWNrYXhlJ317J2RlZmF1bHQnfSA9IFsxXTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VhcmNoOiBwcmVwYXJhdGlvbicgXAorCSdlY2hvICIxc3QgTUFUQ0giID4+ZmlsZSAmJgorCSBlY2hvICIybmQgTUFUQ0giID4+ZmlsZSAmJgorCSBlY2hvICJNQVRDSCIgPj5iYXIgJiYKKwkgZ2l0IGFkZCBmaWxlIGJhciAmJgorCSBnaXQgY29tbWl0IC1tICJBZGRlZCBNQVRDSCB3b3JkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3NlYXJjaDogY29tbWl0IGF1dGhvcicgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zZWFyY2g7aD1IRUFEO3N0PWF1dGhvcjtzPUErVStUaG9yIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3NlYXJjaDogY29tbWl0IG1lc3NhZ2UnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9c2VhcmNoO2g9SEVBRDtzdD1jb21taXRyO3M9TUFUQ0giJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VhcmNoOiBncmVwJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXNlYXJjaDtoPUhFQUQ7c3Q9Z3JlcDtzPU1BVENIIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3NlYXJjaDogcGlja2F4ZScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zZWFyY2g7aD1IRUFEO3N0PXBpY2theGU7cz1NQVRDSCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdzZWFyY2g6IHByb2plY3RzJyBcCisJJ2dpdHdlYl9ydW4gImE9cHJvamVjdF9saXN0O3M9LmdpdCInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBub24tQVNDSUkgaW4gUkVBRE1FLmh0bWwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1JFQURNRS5odG1sIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgKHV0Zi04KScgXAorCSdlY2hvICI8Yj5VVEYtOCBleGFtcGxlOjwvYj48YnIgLz4iID4gLmdpdC9SRUFETUUuaHRtbCAmJgorCSBjYXQgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQgPj4gLmdpdC9SRUFETUUuaHRtbCAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHN5bnRheCBoaWdobGlnaHRpbmcKKworCitoaWdobGlnaHQgLS12ZXJzaW9uID4vZGV2L251bGwgMj4mMQoraWYgWyAkPyAtZXEgMTI3IF07IHRoZW4KKwlzYXkgIlNraXBwaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgdGVzdCwgYmVjYXVzZSAnaGlnaGxpZ2h0JyB3YXMgbm90IGZvdW5kIgorZWxzZQorCXRlc3Rfc2V0X3ByZXJlcSBISUdITElHSFQKKwljYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDwtXEVPRgorCW91ciAkaGlnaGxpZ2h0X2JpbiA9ICJoaWdobGlnaHQiOworCSRmZWF0dXJleydoaWdobGlnaHQnfXsnb3ZlcnJpZGUnfSA9IDE7CisJRU9GCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhJR0hMSUdIVCBcCisJJ3N5bnRheCBoaWdobGlnaHRpbmcgKG5vIGhpZ2hsaWdodCwgdW5rbm93biBzeW50YXgpJyBcCisJJ2dpdCBjb25maWcgZ2l0d2ViLmhpZ2hsaWdodCB5ZXMgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9YmxvYjtmPWZpbGUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhJR0hMSUdIVCBcCisJJ3N5bnRheCBoaWdobGlnaHRpbmcgKGhpZ2hsaWdodGVkLCBzaGVsbCBzY3JpcHQpJyBcCisJJ2dpdCBjb25maWcgZ2l0d2ViLmhpZ2hsaWdodCB5ZXMgJiYKKwkgZWNobyAiIyEvdXNyL2Jpbi9zaCIgPiB0ZXN0LnNoICYmCisJIGdpdCBhZGQgdGVzdC5zaCAmJgorCSBnaXQgY29tbWl0IC1tICJBZGQgdGVzdC5zaCIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9YmxvYjtmPXRlc3Quc2giJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZm9ya3Mgb2YgcHJvamVjdHMKKworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRiAmJgorJGZlYXR1cmV7J2ZvcmtzJ317J2RlZmF1bHQnfSA9IFsxXTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZm9ya3M6IHByZXBhcmUnIFwKKwknZ2l0IGluaXQgLS1iYXJlIGZvby5naXQgJiYKKwkgZ2l0IC0tZ2l0LWRpcj1mb28uZ2l0IC0td29yay10cmVlPS4gYWRkIGZpbGUgJiYKKwkgZ2l0IC0tZ2l0LWRpcj1mb28uZ2l0IC0td29yay10cmVlPS4gY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwkgZWNobyAiZm9vIiA+IGZvby5naXQvZGVzY3JpcHRpb24gJiYKKwkgbWtkaXIgLXAgZm9vICYmCisJIChjZCBmb28gJiYKKwkgIGdpdCBjbG9uZSAtLXNoYXJlZCAtLWJhcmUgLi4vZm9vLmdpdCBmb28tZm9ya2VkLmdpdCAmJgorCSAgZWNobyAiZm9yayBvZiBmb28iID4gZm9vLWZvcmtlZC5naXQvZGVzY3JpcHRpb24pJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZm9ya3M6IHByb2plY3RzIGxpc3QnIFwKKwknZ2l0d2ViX3J1bicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2ZvcmtzOiBmb3JrcyBhY3Rpb24nIFwKKwknZ2l0d2ViX3J1biAicD1mb28uZ2l0O2E9Zm9ya3MiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29udGVudCB0YWdzICh0YWcgY2xvdWQpCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PC1cRU9GICYmCisjIHdlIGRvbid0IHRlc3QgX3NldHRpbmdfIGNvbnRlbnQgdGFncywgc28gYW55IHRydWUgdmFsdWUgaXMgZ29vZAorJGZlYXR1cmV7J2N0YWdzJ317J2RlZmF1bHQnfSA9IFsnY3RhZ3Nfc2NyaXB0LmNnaSddOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjdGFnczogdGFnIGNsb3VkIGluIHByb2plY3RzIGxpc3QnIFwKKwknbWtkaXIgLmdpdC9jdGFncyAmJgorCSBlY2hvICIyIiA+IC5naXQvY3RhZ3MvZm9vICYmCisJIGVjaG8gIjEiID4gLmdpdC9jdGFncy9iYXIgJiYKKwlnaXR3ZWJfcnVuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3RhZ3M6IHNlYXJjaCBwcm9qZWN0cyBieSBleGlzdGluZyB0YWcnIFwKKwknZ2l0d2ViX3J1biAiYnlfdGFnPWZvbyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjdGFnczogc2VhcmNoIHByb2plY3RzIGJ5IG5vbiBleGlzdGVudCB0YWcnIFwKKwknZ2l0d2ViX3J1biAiYnlfdGFnPW5vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjdGFnczogbWFsZm9ybWVkIHRhZyB3ZWlnaHRzJyBcCisJJ21rZGlyIC1wIC5naXQvY3RhZ3MgJiYKKwkgZWNobyAibm90LWEtbnVtYmVyIiA+IC5naXQvY3RhZ3MvbmFuICYmCisJIGVjaG8gIm5vdC1hLW51bWJlci0yIiA+IC5naXQvY3RhZ3MvbmFuMiAmJgorCSBlY2hvICIwLjEiID4uZ2l0L2N0YWdzL2Zsb2F0aW5nLXBvaW50ICYmCisJIGdpdHdlYl9ydW4nCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjYXRlZ29yaWVzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjYXRlZ29yaWVzOiBwcm9qZWN0cyBsaXN0LCBvbmx5IGRlZmF1bHQgY2F0ZWdvcnknIFwKKwknZWNobyAiXCRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXMgPSAxOyIgPj5naXR3ZWJfY29uZmlnLnBlcmwgJiYKKwkgZ2l0d2ViX3J1bicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHVuYm9ybiBicmFuY2hlcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndW5ib3JuIEhFQUQ6ICJzdW1tYXJ5IiBwYWdlICh3aXRoICJoZWFkcyIgc3VidmlldyknIFwKKwknZ2l0IGNoZWNrb3V0IG9ycGhhbl9icmFuY2ggfHwgZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG9ycGhhbl9icmFuY2ggJiYKKwkgdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NTAxLWdpdHdlYi1zdGFuZGFsb25lLWh0dHAtc3RhdHVzLnNoIGIvdC90OTUwMS1naXR3ZWItc3RhbmRhbG9uZS1odHRwLXN0YXR1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjg2OTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTUwMS1naXR3ZWItc3RhbmRhbG9uZS1odHRwLXN0YXR1cy5zaApAQCAtMCwwICsxLDIxMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBNYXJrIFJhZGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0d2ViIGFzIHN0YW5kYWxvbmUgc2NyaXB0IChodHRwIHN0YXR1cyB0ZXN0cykuCisKK1RoaXMgdGVzdCBydW5zIGdpdHdlYiAoZ2l0IHdlYiBpbnRlcmZhY2UpIGFzIGEgQ0dJIHNjcmlwdCBmcm9tIHRoZQorY29tbWFuZGxpbmUsIGFuZCBjaGVja3MgdGhhdCBpdCByZXR1cm5zIHRoZSBleHBlY3RlZCBIVFRQIHN0YXR1cworY29kZSBhbmQgbWVzc2FnZS4nCisKKworLiAuL2dpdHdlYi1saWIuc2gKKworIworIyBHaXR3ZWIgb25seSBwcm92aWRlcyB0aGUgZnVuY3Rpb25hbGl0eSB0ZXN0ZWQgYnkgdGhlICdtb2RpZmljYXRpb24gdGltZXMnCisjIHRlc3RzIGlmIGl0IGNhbiBhY2Nlc3MgYSBkYXRlIHBhcnNlciBmcm9tIG9uZSBvZiB0aGVzZSBtb2R1bGVzOgorIworcGVybCAtTUhUVFA6OkRhdGUgLWUgMCA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdF9zZXRfcHJlcmVxIERBVEVfUEFSU0VSCitwZXJsIC1NVGltZTo6UGFyc2VEYXRlIC1lIDAgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3Rfc2V0X3ByZXJlcSBEQVRFX1BBUlNFUgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc25hcHNob3Qgc2V0dGluZ3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICIKKwl0ZXN0X2NvbW1pdCAnU25hcHNob3RUZXN0cycgJ2kgY2FuIGhhcyBzbmFwc2hvdCcKKyIKKworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCiskZmVhdHVyZXsnc25hcHNob3QnfXsnb3ZlcnJpZGUnfSA9IDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogdGd6IG9ubHkgZGVmYXVsdCBmb3JtYXQgZW5hYmxlZCcgXAorICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dGd6IiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRiejIiICYmCisgICAgZ3JlcCAiNDAzIC0gVW5zdXBwb3J0ZWQgc25hcHNob3QgZm9ybWF0IiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXR4eiIgJiYKKyAgICBncmVwICI0MDMgLSBTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9emlwIiAmJgorICAgIGdyZXAgIjQwMyAtIFVuc3VwcG9ydGVkIHNuYXBzaG90IGZvcm1hdCIgZ2l0d2ViLm91dHB1dCcKKworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCiskZmVhdHVyZXsnc25hcHNob3QnfXsnZGVmYXVsdCd9ID0gWyd0Z3onLCd0YnoyJywndHh6JywnemlwJ107CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogYWxsIGVuYWJsZWQgaW4gZGVmYXVsdCwgdXNlIGRlZmF1bHQgZGlzYWJsZWQgdmFsdWUnIFwKKyAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRneiIgJiYKKyAgICBncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLm91dHB1dCAmJgorICAgIGdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj10YnoyIiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXR4eiIgJiYKKyAgICBncmVwICI0MDMgLSBTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9emlwIiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0JworCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKyRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd6aXAnfXsnZGlzYWJsZWQnfSA9IDE7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogemlwIGV4cGxpY2l0bHkgZGlzYWJsZWQnIFwKKyAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXppcCIgJiYKKyAgICBncmVwICI0MDMgLSBTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiIGdpdHdlYi5vdXRwdXQnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLm91dHB1dCcKKworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCiska25vd25fc25hcHNob3RfZm9ybWF0c3sndGd6J317J2Rpc2FibGVkJ30gPSAwOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzbmFwc2hvdHM6IHRneiBleHBsaWNpdGx5IGVuYWJsZWQnIFwKKyAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRneiIgJiYKKyAgICBncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLm91dHB1dCcKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc25hcHNob3QgaGFzaCBpZHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBnb29kIHRyZWUtaXNoIGlkJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1tYXN0ZXI7c2Y9dGd6IiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90czogYmFkIHRyZWUtaXNoIGlkJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1mcml6enVtRnJhenp1bTtzZj10Z3oiICYmCisJZ3JlcCAiNDA0IC0gT2JqZWN0IGRvZXMgbm90IGV4aXN0IiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLm91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBiYWQgdHJlZS1pc2ggaWQgKHRhZ2dlZCBvYmplY3QpJyAnCisJZWNobyBvYmplY3QgPiB0YWctb2JqZWN0ICYmCisJZ2l0IGFkZCB0YWctb2JqZWN0ICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIk9iamVjdCB0byBiZSB0YWdnZWQiICYmCisJZ2l0IHRhZyB0YWdnZWQtb2JqZWN0IGBnaXQgaGFzaC1vYmplY3QgdGFnLW9iamVjdGAgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPXRhZ2dlZC1vYmplY3Q7c2Y9dGd6IiAmJgorCWdyZXAgIjQwMCAtIE9iamVjdCBpcyBub3QgYSB0cmVlLWlzaCIgZ2l0d2ViLm91dHB1dAorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90czogZ29vZCBvYmplY3QgaWQnICcKKwlJRD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYCAmJgorCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9JElEO3NmPXRneiIgJiYKKwlncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLm91dHB1dAorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdHM6IGJhZCBvYmplY3QgaWQnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPWFiY2RlZjAxMjM0O3NmPXRneiIgJiYKKwlncmVwICI0MDQgLSBPYmplY3QgZG9lcyBub3QgZXhpc3QiIGdpdHdlYi5vdXRwdXQKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIub3V0cHV0JworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbW9kaWZpY2F0aW9uIHRpbWVzIChMYXN0LU1vZGlmaWVkIGFuZCBJZi1Nb2RpZmllZC1TaW5jZSkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBEQVRFX1BBUlNFUiAnbW9kaWZpY2F0aW9uOiBmZWVkIGxhc3QtbW9kaWZpZWQnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1hdG9tO2g9bWFzdGVyIiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIuaGVhZGVycyAmJgorCWdyZXAgIkxhc3QtbW9kaWZpZWQ6IFRodSwgNyBBcHIgMjAwNSAyMjoxNDoxMyArMDAwMCIgZ2l0d2ViLmhlYWRlcnMKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBEQVRFX1BBUlNFUiAnbW9kaWZpY2F0aW9uOiBmZWVkIGlmLW1vZGlmaWVkLXNpbmNlIChtb2RpZmllZCknICcKKwlleHBvcnQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRT0iV2VkLCA2IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAidW5zZXQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSIgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1hdG9tO2g9bWFzdGVyIiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IGZlZWQgaWYtbW9kaWZpZWQtc2luY2UgKHVubW9kaWZpZWQpJyAnCisJZXhwb3J0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0U9IlRodSwgNyBBcHIgMjAwNSAyMjoxNDoxMyArMDAwMCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInVuc2V0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UiICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9YXRvbTtoPW1hc3RlciIgJiYKKwlncmVwICJTdGF0dXM6IDMwNCBOb3QgTW9kaWZpZWQiIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgREFURV9QQVJTRVIgJ21vZGlmaWNhdGlvbjogc25hcHNob3QgbGFzdC1tb2RpZmllZCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9bWFzdGVyO3NmPXRneiIgJiYKKwlncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLmhlYWRlcnMgJiYKKwlncmVwICJMYXN0LW1vZGlmaWVkOiBUaHUsIDcgQXByIDIwMDUgMjI6MTQ6MTMgKzAwMDAiIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgREFURV9QQVJTRVIgJ21vZGlmaWNhdGlvbjogc25hcHNob3QgaWYtbW9kaWZpZWQtc2luY2UgKG1vZGlmaWVkKScgJworCWV4cG9ydCBIVFRQX0lGX01PRElGSUVEX1NJTkNFPSJXZWQsIDYgQXByIDIwMDUgMjI6MTQ6MTMgKzAwMDAiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ1bnNldCBIVFRQX0lGX01PRElGSUVEX1NJTkNFIiAmJgorCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9bWFzdGVyO3NmPXRneiIgJiYKKwlncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLmhlYWRlcnMKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBEQVRFX1BBUlNFUiAnbW9kaWZpY2F0aW9uOiBzbmFwc2hvdCBpZi1tb2RpZmllZC1zaW5jZSAodW5tb2RpZmllZCknICcKKwlleHBvcnQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRT0iVGh1LCA3IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAidW5zZXQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSIgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10Z3oiICYmCisJZ3JlcCAiU3RhdHVzOiAzMDQgTm90IE1vZGlmaWVkIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IHRyZWUgc25hcHNob3QnICcKKwlJRD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXnt0cmVlfWAgJiYKKwlleHBvcnQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRT0iV2VkLCA2IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAidW5zZXQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSIgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPSRJRDtzZj10Z3oiICYmCisJZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5oZWFkZXJzICYmCisJISBncmVwIC1pICJsYXN0LW1vZGlmaWVkIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbG9hZCBjaGVja2luZworCisjIGFsd2F5cyBoaXQgdGhlIGxvYWQgbGltaXQKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKK291ciAkbWF4bG9hZCA9IC0xOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgY2hlY2tpbmc6IGxvYWQgdG9vIGhpZ2ggKGRlZmF1bHQgYWN0aW9uKScgJworCWdpdHdlYl9ydW4gInA9LmdpdCIgJiYKKwlncmVwICJTdGF0dXM6IDUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlIiBnaXR3ZWIuaGVhZGVycyAmJgorCWdyZXAgIjUwMyAtIFRoZSBsb2FkIGF2ZXJhZ2Ugb24gdGhlIHNlcnZlciBpcyB0b28gaGlnaCIgZ2l0d2ViLmJvZHkKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKworIyB0dXJuIG9mZiBsb2FkIGNoZWNraW5nCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCitvdXIgJG1heGxvYWQgPSB1bmRlZjsKK0VPRgorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbnZhbGlkIGFyZ3VtZW50cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIGFyZ3VtZW50czogaW52YWxpZCByZWdleHAgKGluIHByb2plY3Qgc2VhcmNoKScgJworCWdpdHdlYl9ydW4gImE9cHJvamVjdF9saXN0O3M9KlwuZ2l0O3NyPTEiICYmCisJZ3JlcCAiU3RhdHVzOiA0MDAiIGdpdHdlYi5oZWFkZXJzICYmCisJZ3JlcCAiNDAwIC0gSW52YWxpZC4qcmVnZXhwIiBnaXR3ZWIuYm9keQorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk1MDItZ2l0d2ViLXN0YW5kYWxvbmUtcGFyc2Utb3V0cHV0LnNoIGIvdC90OTUwMi1naXR3ZWItc3RhbmRhbG9uZS1wYXJzZS1vdXRwdXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzMxZTY0YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk1MDItZ2l0d2ViLXN0YW5kYWxvbmUtcGFyc2Utb3V0cHV0LnNoCkBAIC0wLDAgKzEsMTg5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IE1hcmsgUmFkYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXR3ZWIgYXMgc3RhbmRhbG9uZSBzY3JpcHQgKHBhcnNpbmcgc2NyaXB0IG91dHB1dCkuCisKK1RoaXMgdGVzdCBydW5zIGdpdHdlYiAoZ2l0IHdlYiBpbnRlcmZhY2UpIGFzIGEgQ0dJIHNjcmlwdCBmcm9tIHRoZQorY29tbWFuZGxpbmUsIGFuZCBjaGVja3MgdGhhdCBpdCBwcm9kdWNlcyB0aGUgY29ycmVjdCBvdXRwdXQsIGVpdGhlcgoraW4gdGhlIEhUVFAgaGVhZGVyIG9yIHRoZSBhY3R1YWwgc2NyaXB0IG91dHB1dC4nCisKKworLiAuL2dpdHdlYi1saWIuc2gKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHNuYXBzaG90IGZpbGUgbmFtZSBhbmQgcHJlZml4CisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKworJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7J3Rhcid9ID0geworCSdkaXNwbGF5JyA9PiAndGFyJywKKwkndHlwZScgPT4gJ2FwcGxpY2F0aW9uL3gtdGFyJywKKwknc3VmZml4JyA9PiAnLnRhcicsCisJJ2Zvcm1hdCcgPT4gJ3RhcicsCit9OworCiskZmVhdHVyZXsnc25hcHNob3QnfXsnZGVmYXVsdCd9ID0gWyd0YXInXTsKK0VPRgorCisjIENhbGwgY2hlY2tfc25hcHNob3Qgd2l0aCB0aGUgYXJndW1lbnRzICI8YmFzZW5hbWU+IFs8cHJlZml4Pl0iCisjCisjIFRoaXMgd2lsbCBjaGVjayB0aGF0IGdpdHdlYiBIVFRQIGhlYWRlciBjb250YWlucyBwcm9wb3NlZCBmaWxlbmFtZQorIyBhcyA8YmFzZW5hbWU+IHdpdGggJy50YXInIHN1ZmZpeCBhZGRlZCwgYW5kIHRoYXQgZ2VuZXJhdGVkIHRhcmZpbGUKKyMgKGdpdHdlYiBtZXNzYWdlIGJvZHkpIGhhcyA8cHJlZml4PiBhcyBwcmVmaXggZm9yIGFsIGZpbGVzIGluIHRhcmZpbGUKKyMKKyMgPHByZWZpeD4gZGVmYXVsdCB0byA8YmFzZW5hbWU+CitjaGVja19zbmFwc2hvdCAoKSB7CisJYmFzZW5hbWU9JDEKKwlwcmVmaXg9JHsyOi0iJDEifQorCWVjaG8gImJhc2VuYW1lPSRiYXNlbmFtZSIKKwlncmVwICJmaWxlbmFtZT0uKiRiYXNlbmFtZS50YXIiIGdpdHdlYi5oZWFkZXJzID4vZGV2L251bGwgMj4mMSAmJgorCSIkVEFSIiB0ZiBnaXR3ZWIuYm9keSA+ZmlsZV9saXN0ICYmCisJISBncmVwIC12ICJeJHByZWZpeC8iIGZpbGVfbGlzdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBmaXJzdCBmb28gJiYKKwlnaXQgYnJhbmNoIHh4L3Rlc3QgJiYKKwlGVUxMX0lEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCVNIT1JUX0lEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0PTcgSEVBRCkKKycKK3Rlc3RfZGVidWcgJworCWVjaG8gIkZVTExfSUQgID0gJEZVTExfSUQiCisJZWNobyAiU0hPUlRfSUQgPSAkU0hPUlRfSUQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBmdWxsIHNoYTEnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPSRGVUxMX0lEO3NmPXRhciIgJiYKKwljaGVja19zbmFwc2hvdCAiLmdpdC0kU0hPUlRfSUQiCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMgJiYgY2F0IGZpbGVfbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3Q6IHNob3J0ZW5lZCBzaGExJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD0kU0hPUlRfSUQ7c2Y9dGFyIiAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LSRTSE9SVF9JRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogYWxtb3N0IGZ1bGwgc2hhMScgJworCUlEPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTMwIEhFQUQpICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD0kSUQ7c2Y9dGFyIiAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LSRTSE9SVF9JRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogSEVBRCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj10YXIiICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtSEVBRC0kU0hPUlRfSUQiCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMgJiYgY2F0IGZpbGVfbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3Q6IHNob3J0IGJyYW5jaCBuYW1lIChtYXN0ZXIpJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1tYXN0ZXI7c2Y9dGFyIiAmJgorCUlEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0PTcgbWFzdGVyKSAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LW1hc3Rlci0kSUQiCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMgJiYgY2F0IGZpbGVfbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3Q6IHNob3J0IHRhZyBuYW1lIChmaXJzdCknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPWZpcnN0O3NmPXRhciIgJiYKKwlJRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydD03IGZpcnN0KSAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LWZpcnN0LSRJRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogZnVsbCBicmFuY2ggbmFtZSAocmVmcy9oZWFkcy9tYXN0ZXIpJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1yZWZzL2hlYWRzL21hc3RlcjtzZj10YXIiICYmCisJSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQ9NyBtYXN0ZXIpICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtbWFzdGVyLSRJRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogZnVsbCB0YWcgbmFtZSAocmVmcy90YWdzL2ZpcnN0KScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9cmVmcy90YWdzL2ZpcnN0O3NmPXRhciIgJiYKKwljaGVja19zbmFwc2hvdCAiLmdpdC1maXJzdCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogaGllcmFyY2hpY2FsIGJyYW5jaCBuYW1lICh4eC90ZXN0KScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9eHgvdGVzdDtzZj10YXIiICYmCisJISBncmVwICJmaWxlbmFtZT0uKi8iIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmb3JrcyBvZiBwcm9qZWN0cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3Jrczogc2V0dXAnICcKKwlnaXQgaW5pdCAtLWJhcmUgZm9vLmdpdCAmJgorCWVjaG8gZmlsZSA+IGZpbGUgJiYKKwlnaXQgLS1naXQtZGlyPWZvby5naXQgLS13b3JrLXRyZWU9LiBhZGQgZmlsZSAmJgorCWdpdCAtLWdpdC1kaXI9Zm9vLmdpdCAtLXdvcmstdHJlZT0uIGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJZWNobyAiZm9vIiA+IGZvby5naXQvZGVzY3JpcHRpb24gJiYKKwlnaXQgY2xvbmUgLS1iYXJlIGZvby5naXQgZm9vLmJhci5naXQgJiYKKwllY2hvICJmb28uYmFyIiA+IGZvby5iYXIuZ2l0L2Rlc2NyaXB0aW9uICYmCisJZ2l0IGNsb25lIC0tYmFyZSBmb28uZ2l0IGZvb19iYXouZ2l0ICYmCisJZWNobyAiZm9vX2JheiIgPiBmb29fYmF6LmdpdC9kZXNjcmlwdGlvbiAmJgorCXJtIC1mciAgIGZvbyAmJgorCW1rZGlyIC1wIGZvbyAmJgorCSgKKwkJY2QgZm9vICYmCisJCWdpdCBjbG9uZSAtLXNoYXJlZCAtLWJhcmUgLi4vZm9vLmdpdCBmb28tZm9ya2VkLmdpdCAmJgorCQllY2hvICJmb3JrIG9mIGZvbyIgPiBmb28tZm9ya2VkLmdpdC9kZXNjcmlwdGlvbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ya3M6IG5vdCBza2lwcGVkIHVubGVzcyAiZm9ya3MiIGZlYXR1cmUgZW5hYmxlZCcgJworCWdpdHdlYl9ydW4gImE9cHJvamVjdF9saXN0IiAmJgorCWdyZXAgLXEgIj5cXC5naXQ8IiAgICAgICAgICAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb1xcLmdpdDwiICAgICAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vX2JhelxcLmdpdDwiICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb29cXC5iYXJcXC5naXQ8IiAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb19iYXpcXC5naXQ8IiAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vL2Zvby1mb3JrZWRcXC5naXQ8IiBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb3JrIG9mIC4qPCIgICAgICAgICAgIGdpdHdlYi5ib2R5CisnCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YgJiYKKyRmZWF0dXJleydmb3Jrcyd9eydkZWZhdWx0J30gPSBbMV07CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ya3M6IGZvcmtzIHNraXBwZWQgaWYgImZvcmtzIiBmZWF0dXJlIGVuYWJsZWQnICcKKwlnaXR3ZWJfcnVuICJhPXByb2plY3RfbGlzdCIgJiYKKwlncmVwIC1xICI+XFwuZ2l0PCIgICAgICAgICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb29cXC5naXQ8IiAgICAgICAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb19iYXpcXC5naXQ8IiAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vXFwuYmFyXFwuZ2l0PCIgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb29fYmF6XFwuZ2l0PCIgICAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtdiAiPmZvby9mb28tZm9ya2VkXFwuZ2l0PCIgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC12ICI+Zm9yayBvZiAuKjwiICAgICAgICAgICBnaXR3ZWIuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JrczogImZvcmtzIiBhY3Rpb24gZm9yIGZvcmtlZCByZXBvc2l0b3J5JyAnCisJZ2l0d2ViX3J1biAicD1mb28uZ2l0O2E9Zm9ya3MiICYmCisJZ3JlcCAtcSAiPmZvby9mb28tZm9ya2VkXFwuZ2l0PCIgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9yayBvZiBmb288IiAgICAgICAgICBnaXR3ZWIuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JrczogY2FuIGFjY2VzcyBmb3JrZWQgcmVwb3NpdG9yeScgJworCWdpdHdlYl9ydW4gInA9Zm9vL2Zvby1mb3JrZWQuZ2l0O2E9c3VtbWFyeSIgJiYKKwlncmVwIC1xICIyMDAgT0siICAgICAgICBnaXR3ZWIuaGVhZGVycyAmJgorCWdyZXAgLXEgIj5mb3JrIG9mIGZvbzwiIGdpdHdlYi5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmtzOiBwcm9qZWN0X2luZGV4IGxpc3RzIGFsbCBwcm9qZWN0cyAoaW5jbC4gZm9ya3MpJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GCisJLmdpdAorCWZvby5iYXIuZ2l0CisJZm9vLmdpdAorCWZvby9mb28tZm9ya2VkLmdpdAorCWZvb19iYXouZ2l0CisJRU9GCisJZ2l0d2ViX3J1biAiYT1wcm9qZWN0X2luZGV4IiAmJgorCXNlZCAtZSAicy8gLiovLyIgPGdpdHdlYi5ib2R5IHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAwLWN2c2ltcG9ydC5zaCBiL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjMzg0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAwLWN2c2ltcG9ydC5zaApAQCAtMCwwICsxLDE1OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgYmFzaWMgdGVzdHMnCisuIC4vbGliLWN2cy5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwIGN2c3Jvb3QgZW52aXJvbm1lbnQnICcKKwlDVlNST09UPSQocHdkKS9jdnNyb290ICYmCisJZXhwb3J0IENWU1JPT1QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCBjdnNyb290JyAnJENWUyBpbml0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwIGEgY3ZzIG1vZHVsZScgJworCisJbWtkaXIgIiRDVlNST09UL21vZHVsZSIgJiYKKwkkQ1ZTIGNvIC1kIG1vZHVsZS1jdnMgbW9kdWxlICYmCisJKGNkIG1vZHVsZS1jdnMgJiYKKwljYXQgPDxFT0YgPm9fZm9ydHVuYSAmJgorTyBGb3J0dW5hCit2ZWx1dCBsdW5hCitzdGF0dSB2YXJpYWJpbGlzLAorCitzZW1wZXIgY3Jlc2NpcworYXV0IGRlY3Jlc2NpczsKK3ZpdGEgZGV0ZXN0YWJpbGlzCisKK251bmMgb2JkdXJhdAorZXQgdHVuYyBjdXJhdAorbHVkbyBtZW50aXMgYWNpZW0sCisKK2VnZXN0YXRlbSwKK3BvdGVzdGF0ZW0KK2Rpc3NvbHZpdCB1dCBnbGFjaWVtLgorRU9GCisJJENWUyBhZGQgb19mb3J0dW5hICYmCisJY2F0IDw8RU9GID5tZXNzYWdlICYmCithZGQgIk8gRm9ydHVuYSIgbHlyaWNzCisKK1RoZXNlIHB1YmxpYyBkb21haW4gbHlyaWNzIG1ha2UgYW4gZXhjZWxsZW50IHNhbXBsZSB0ZXh0LgorRU9GCisJJENWUyBjb21taXQgLUYgbWVzc2FnZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbXBvcnQgYSB0cml2aWFsIG1vZHVsZScgJworCisJZ2l0IGN2c2ltcG9ydCAtYSAtUiAteiAwIC1DIG1vZHVsZS1naXQgbW9kdWxlICYmCisJdGVzdF9jbXAgbW9kdWxlLWN2cy9vX2ZvcnR1bmEgbW9kdWxlLWdpdC9vX2ZvcnR1bmEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3BhY2sgcmVmcycgJyhjZCBtb2R1bGUtZ2l0ICYmIGdpdCBnYyknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnaW5pdGlhbCBpbXBvcnQgaGFzIGNvcnJlY3QgLmdpdC9jdnMtcmV2aXNpb25zJyAnCisKKwkoY2QgbW9kdWxlLWdpdCAmJgorCSBnaXQgbG9nIC0tZm9ybWF0PSJvX2ZvcnR1bmEgMS4xICVIIiAtMSkgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG1vZHVsZS1naXQvLmdpdC9jdnMtcmV2aXNpb25zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndXBkYXRlIGN2cyBtb2R1bGUnICcKKwkoY2QgbW9kdWxlLWN2cyAmJgorCWNhdCA8PEVPRiA+b19mb3J0dW5hICYmCitPIEZvcnR1bmUsCitsaWtlIHRoZSBtb29uCit5b3UgYXJlIGNoYW5nZWFibGUsCisKK2V2ZXIgd2F4aW5nCithbmQgd2FuaW5nOworaGF0ZWZ1bCBsaWZlCisKK2ZpcnN0IG9wcHJlc3NlcworYW5kIHRoZW4gc29vdGhlcworYXMgZmFuY3kgdGFrZXMgaXQ7CisKK3BvdmVydHkKK2FuZCBwb3dlcgoraXQgbWVsdHMgdGhlbSBsaWtlIGljZS4KK0VPRgorCWNhdCA8PEVPRiA+bWVzc2FnZSAmJgordHJhbnNsYXRlIHRvIEVuZ2xpc2gKKworTXkgTGF0aW4gaXMgdGVycmlibGUuCitFT0YKKwkkQ1ZTIGNvbW1pdCAtRiBtZXNzYWdlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3VwZGF0ZSBnaXQgbW9kdWxlJyAnCisKKwkoY2QgbW9kdWxlLWdpdCAmJgorCWdpdCBjb25maWcgY3ZzaW1wb3J0LnRyYWNrUmV2aXNpb25zIHRydWUgJiYKKwlnaXQgY3ZzaW1wb3J0IC1hIC16IDAgbW9kdWxlICYmCisJZ2l0IG1lcmdlIG9yaWdpbgorCSkgJiYKKwl0ZXN0X2NtcCBtb2R1bGUtY3ZzL29fZm9ydHVuYSBtb2R1bGUtZ2l0L29fZm9ydHVuYQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndXBkYXRlIGhhcyBjb3JyZWN0IC5naXQvY3ZzLXJldmlzaW9ucycgJworCisJKGNkIG1vZHVsZS1naXQgJiYKKwkgZ2l0IGxvZyAtLWZvcm1hdD0ib19mb3J0dW5hIDEuMSAlSCIgLTEgSEVBRF4gJiYKKwkgZ2l0IGxvZyAtLWZvcm1hdD0ib19mb3J0dW5hIDEuMiAlSCIgLTEgSEVBRCkgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG1vZHVsZS1naXQvLmdpdC9jdnMtcmV2aXNpb25zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndXBkYXRlIGN2cyBtb2R1bGUnICcKKworCShjZCBtb2R1bGUtY3ZzICYmCisJCWVjaG8gMSA+dGljayAmJgorCQkkQ1ZTIGFkZCB0aWNrICYmCisJCSRDVlMgY29tbWl0IC1tIDEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY3ZzaW1wb3J0Lm1vZHVsZSBjb25maWcgd29ya3MnICcKKworCShjZCBtb2R1bGUtZ2l0ICYmCisJCWdpdCBjb25maWcgY3ZzaW1wb3J0Lm1vZHVsZSBtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyBjdnNpbXBvcnQudHJhY2tSZXZpc2lvbnMgdHJ1ZSAmJgorCQlnaXQgY3ZzaW1wb3J0IC1hIC16MCAmJgorCQlnaXQgbWVyZ2Ugb3JpZ2luCisJKSAmJgorCXRlc3RfY21wIG1vZHVsZS1jdnMvdGljayBtb2R1bGUtZ2l0L3RpY2sKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NlY29uZCB1cGRhdGUgaGFzIGNvcnJlY3QgLmdpdC9jdnMtcmV2aXNpb25zJyAnCisKKwkoY2QgbW9kdWxlLWdpdCAmJgorCSBnaXQgbG9nIC0tZm9ybWF0PSJvX2ZvcnR1bmEgMS4xICVIIiAtMSBIRUFEXl4gJiYKKwkgZ2l0IGxvZyAtLWZvcm1hdD0ib19mb3J0dW5hIDEuMiAlSCIgLTEgSEVBRF4KKwkgZ2l0IGxvZyAtLWZvcm1hdD0idGljayAxLjEgJUgiIC0xIEhFQUQpID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBtb2R1bGUtZ2l0Ly5naXQvY3ZzLXJldmlzaW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2ltcG9ydCBmcm9tIGEgQ1ZTIHdvcmtpbmcgdHJlZScgJworCisJJENWUyBjbyAtZCBpbXBvcnQtZnJvbS13dCBtb2R1bGUgJiYKKwkoY2QgaW1wb3J0LWZyb20td3QgJiYKKwkJZ2l0IGNvbmZpZyBjdnNpbXBvcnQudHJhY2tSZXZpc2lvbnMgZmFsc2UgJiYKKwkJZ2l0IGN2c2ltcG9ydCAtYSAtejAgJiYKKwkJZWNobyAxID5leHBlY3QgJiYKKwkJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMlbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGFjdHVhbCBleHBlY3QKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdubyAuZ2l0L2N2cy1yZXZpc2lvbnMgY3JlYXRlZCBieSBkZWZhdWx0JyAnCisKKwkhIHRlc3QgLWUgaW1wb3J0LWZyb20td3QvLmdpdC9jdnMtcmV2aXNpb25zCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd0ZXN0IGVudGlyZSBIRUFEJyAndGVzdF9jbXBfYnJhbmNoX3RyZWUgbWFzdGVyJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk2MDEtY3ZzaW1wb3J0LXZlbmRvci1icmFuY2guc2ggYi90L3Q5NjAxLWN2c2ltcG9ydC12ZW5kb3ItYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyN2QzOWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxLWN2c2ltcG9ydC12ZW5kb3ItYnJhbmNoLnNoCkBAIC0wLDAgKzEsODUgQEAKKyMhL2Jpbi9zaAorCisjIERlc2NyaXB0aW9uIG9mIHRoZSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeToKKyMKKyMgICAgaW1wb3J0ZWQtb25jZS50eHQ6CisjCisjICAgICAgIEltcG9ydGVkIG9uY2UuICAxLjEgYW5kIDEuMS4xLjEgc2hvdWxkIGJlIGlkZW50aWNhbC4KKyMKKyMgICAgaW1wb3J0ZWQtdHdpY2UudHh0OgorIworIyAgICAgICBJbXBvcnRlZCB0d2ljZS4gIEhFQUQgc2hvdWxkIHJlZmxlY3QgdGhlIGNvbnRlbnRzIG9mIHRoZQorIyAgICAgICBzZWNvbmQgaW1wb3J0IChpLmUuLCBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzIGFzIDEuMS4xLjIpLgorIworIyAgICBpbXBvcnRlZC1tb2RpZmllZC50eHQ6CisjCisjICAgICAgIEltcG9ydGVkLCB0aGVuIG1vZGlmaWVkIG9uIEhFQUQuICBIRUFEIHNob3VsZCByZWZsZWN0IHRoZQorIyAgICAgICBtb2RpZmljYXRpb24uCisjCisjICAgIGltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dDoKKyMKKyMgICAgICAgSW1wb3J0ZWQsIHRoZW4gbW9kaWZpZWQgb24gSEVBRCwgdGhlbiBpbXBvcnRlZCBhZ2Fpbi4KKyMKKyMgICAgYWRkZWQtaW1wb3J0ZWQudHh0LHY6CisjCisjICAgICAgIEFkZGVkIHdpdGggJ2N2cyBhZGQnIHRvIGNyZWF0ZSAxLjEsIHRoZW4gaW1wb3J0ZWQgd2l0aAorIyAgICAgICBjb21wbGV0ZWx5IGRpZmZlcmVudCBjb250ZW50cyB0byBjcmVhdGUgMS4xLjEuMSwgdGhlcmVmb3JlIHRoZQorIyAgICAgICB2ZW5kb3IgYnJhbmNoIHdhcyBuZXZlciB0aGUgZGVmYXVsdCBicmFuY2guCisjCisjICAgIGltcG9ydGVkLWFub255bW91c2x5LnR4dDoKKyMKKyMgICAgICAgTGlrZSBpbXBvcnRlZC10d2ljZS50eHQsIGJ1dCB3aXRoIGEgdmVuZG9yIGJyYW5jaCB3aG9zZSBicmFuY2gKKyMgICAgICAgdGFnIGhhcyBiZWVuIHJlbW92ZWQuCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgaGFuZGxpbmcgb2YgdmVuZG9yIGJyYW5jaGVzJworLiAuL2xpYi1jdnMuc2gKKworc2V0dXBfY3ZzX3Rlc3RfcmVwb3NpdG9yeSB0OTYwMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2ltcG9ydCBhIG1vZHVsZSB3aXRoIGEgdmVuZG9yIGJyYW5jaCcgJworCisJZ2l0IGN2c2ltcG9ydCAtQyBtb2R1bGUtZ2l0IG1vZHVsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY2hlY2sgSEVBRCBvdXQgb2YgY3ZzIHJlcG9zaXRvcnknICd0ZXN0X2N2c19jbyBtYXN0ZXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY2hlY2sgbWFzdGVyIG91dCBvZiBnaXQgcmVwb3NpdG9yeScgJ3Rlc3RfZ2l0X2NvIG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjaGVjayBhIGZpbGUgdGhhdCB3YXMgaW1wb3J0ZWQgb25jZScgJworCisJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgbWFzdGVyIGltcG9ydGVkLW9uY2UudHh0CisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICdjaGVjayBhIGZpbGUgdGhhdCB3YXMgaW1wb3J0ZWQgdHdpY2UnICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBpbXBvcnRlZC10d2ljZS50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIGEgZmlsZSB0aGF0IHdhcyBpbXBvcnRlZCB0aGVuIG1vZGlmaWVkIG9uIEhFQUQnICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBpbXBvcnRlZC1tb2RpZmllZC50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIGEgZmlsZSB0aGF0IHdhcyBpbXBvcnRlZCwgbW9kaWZpZWQsIHRoZW4gaW1wb3J0ZWQgYWdhaW4nICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIGEgZmlsZSB0aGF0IHdhcyBhZGRlZCB0byBIRUFEIHRoZW4gaW1wb3J0ZWQnICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBhZGRlZC1pbXBvcnRlZC50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2EgdmVuZG9yIGJyYW5jaCB3aG9zZSB0YWcgaGFzIGJlZW4gcmVtb3ZlZCcgJworCisJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgbWFzdGVyIGltcG9ydGVkLWFub255bW91c2x5LnR4dAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290Ly5naXRhdHRyaWJ1dGVzIGIvdC90OTYwMS9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKiAtd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZSBiL3QvdDk2MDEvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiOWIzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitoaXN0b3J5Cit2YWwtdGFncwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9hZGRlZC1pbXBvcnRlZC50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvYWRkZWQtaW1wb3J0ZWQudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4MzA3MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvYWRkZWQtaW1wb3J0ZWQudHh0LHYKQEAgLTAsMCArMSw0NCBAQAoraGVhZAkxLjE7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy00OjEuMS4xLjEKKwl2YnJhbmNoQToxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTU7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTY7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjEKK2xvZworQEFkZCBhIGZpbGUgdG8gdGhlIHdvcmtpbmcgY29weS4KK0AKK3RleHQKK0BBZGRpbmcgdGhpcyBmaWxlLCBiZWZvcmUgaW1wb3J0aW5nIGl0IHdpdGggZGlmZmVyZW50IGNvbnRlbnRzLgorQAorCisKKzEuMS4xLjEKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctNCkuCitACit0ZXh0CitAZDEgMQorYTEgMQorVGhpcyBpcyB2dGFnLTQgKG9uIHZicmFuY2hBKSBvZiBhZGRlZC10aGVuLWltcG9ydGVkLnR4dC4KK0AKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1hbm9ueW1vdXNseS50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtYW5vbnltb3VzbHkudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlMWIwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtYW5vbnltb3VzbHkudHh0LHYKQEAgLTAsMCArMSw0MiBAQAoraGVhZAkxLjE7CiticmFuY2gJMS4xLjE7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy0xOjEuMS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAVGhpcyBpcyB2dGFnLTEgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC1hbm9ueW1vdXNseS50eHQuCitACisKKworMS4xLjEuMQorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0xKS4KK0AKK3RleHQKK0BACisKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4MzBhZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0LHYKQEAgLTAsMCArMSw3NiBAQAoraGVhZAkxLjI7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy0yOjEuMS4xLjIKKwl2dGFnLTE6MS4xLjEuMQorCXZicmFuY2hBOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xNDsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjEuMS4yOworCisxLjEuMS4yCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQEZpcnN0IHJlZ3VsYXIgY29tbWl0LCB0byBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQsIG9uIEhFQUQuCitACit0ZXh0CitAVGhpcyBpcyBhIG1vZGlmaWNhdGlvbiBvZiBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQgb24gSEVBRC4KK0l0IHNob3VsZCBzdXBlcnNlZGUgdGhlIHZlcnNpb24gZnJvbSB0aGUgdmVuZG9yIGJyYW5jaC4KK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkMSAyCithMiAxCitUaGlzIGlzIHZ0YWctMSAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dC4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTEpLgorQAordGV4dAorQEAKKworCisxLjEuMS4yCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTIpLgorQAordGV4dAorQGQxIDEKK2ExIDEKK1RoaXMgaXMgdnRhZy0yIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0LgorQAorCisKZGlmZiAtLWdpdCBhL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQudHh0LHYgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW1vZGlmaWVkLnR4dCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiY2ZlNDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW1vZGlmaWVkLnR4dCx2CkBAIC0wLDAgKzEsNTkgQEAKK2hlYWQJMS4yOworYWNjZXNzOworc3ltYm9scworCXZ0YWctMToxLjEuMS4xCisJdmJyYW5jaEE6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMgorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjE0OwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitAQ29tbWl0IG9uIEhFQUQuCitACit0ZXh0CitAVGhpcyBpcyBhIG1vZGlmaWNhdGlvbiBvZiBpbXBvcnRlZC1tb2RpZmllZC50eHQgb24gSEVBRC4KK0l0IHNob3VsZCBzdXBlcnNlZGUgdGhlIHZlcnNpb24gZnJvbSB0aGUgdmVuZG9yIGJyYW5jaC4KK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkMSAyCithMiAxCitUaGlzIGlzIHZ0YWctMSAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLW1vZGlmaWVkLnR4dC4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTEpLgorQAordGV4dAorQEAKKworCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW9uY2UudHh0LHYgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW9uY2UudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkZDgyYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtb25jZS50eHQsdgpAQCAtMCwwICsxLDQzIEBACitoZWFkCTEuMTsKK2JyYW5jaAkxLjEuMTsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTE6MS4xLjEuMQorCXZicmFuY2hBOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQFRoaXMgaXMgdnRhZy0xIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtb25jZS50eHQuCitACisKKworMS4xLjEuMQorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0xKS4KK0AKK3RleHQKK0BACisKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC10d2ljZS50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtdHdpY2UudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmM2YxYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtdHdpY2UudHh0LHYKQEAgLTAsMCArMSw2MCBAQAoraGVhZAkxLjE7CiticmFuY2gJMS4xLjE7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy0yOjEuMS4xLjIKKwl2dGFnLTE6MS4xLjEuMQorCXZicmFuY2hBOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMS4xLjI7CisKKzEuMS4xLjIKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQFRoaXMgaXMgdnRhZy0xIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtdHdpY2UudHh0LgorQAorCisKKzEuMS4xLjEKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMSkuCitACit0ZXh0CitAQAorCisKKzEuMS4xLjIKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMikuCitACit0ZXh0CitAZDEgMQorYTEgMQorVGhpcyBpcyB2dGFnLTIgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC10d2ljZS50eHQuCitACisKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMi1jdnNpbXBvcnQtYnJhbmNoZXMtdGFncy5zaCBiL3QvdDk2MDItY3ZzaW1wb3J0LWJyYW5jaGVzLXRhZ3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTFkYjMyMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDItY3ZzaW1wb3J0LWJyYW5jaGVzLXRhZ3Muc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisKKyMgQSBkZXNjcmlwdGlvbiBvZiB0aGUgcmVwb3NpdG9yeSB1c2VkIGZvciB0aGlzIHRlc3QgY2FuIGJlIGZvdW5kIGluCisjIHQ5NjAyL1JFQURNRS4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGN2c2ltcG9ydCBoYW5kbGluZyBvZiBicmFuY2hlcyBhbmQgdGFncycKKy4gLi9saWItY3ZzLnNoCisKK3NldHVwX2N2c190ZXN0X3JlcG9zaXRvcnkgdDk2MDIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbXBvcnQgbW9kdWxlJyAnCisKKwlnaXQgY3ZzaW1wb3J0IC1DIG1vZHVsZS1naXQgbW9kdWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd0ZXN0IGJyYW5jaCBtYXN0ZXInICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIG1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndGVzdCBicmFuY2ggdmVuZG9yYnJhbmNoJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSB2ZW5kb3JicmFuY2gKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ3Rlc3QgYnJhbmNoIEJfRlJPTV9JTklUSUFMUycgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgQl9GUk9NX0lOSVRJQUxTCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICd0ZXN0IGJyYW5jaCBCX0ZST01fSU5JVElBTFNfQlVUX09ORScgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkUKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ3Rlc3QgYnJhbmNoIEJfTUlYRUQnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIEJfTUlYRUQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3Rlc3QgYnJhbmNoIEJfU1BMSVQnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIEJfU1BMSVQKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ3Rlc3QgdGFnIHZlbmRvcnRhZycgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgdmVuZG9ydGFnCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd0ZXN0IHRhZyBUX0FMTF9JTklUSUFMX0ZJTEVTJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSBUX0FMTF9JTklUSUFMX0ZJTEVTCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICd0ZXN0IHRhZyBUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkUnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIFRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORQorCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUEVSTCAndGVzdCB0YWcgVF9NSVhFRCcgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgVF9NSVhFRAorCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAyL1JFQURNRSBiL3QvdDk2MDIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMzFlMGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL1JFQURNRQpAQCAtMCwwICsxLDYyIEBACitUaGlzIHJlcG9zaXRvcnkgaXMgZm9yIHRlc3RpbmcgdGhlIGFiaWxpdHkgdG8gZ3JvdXAgcmV2aXNpb25zCitjb3JyZWN0bHkgYWxvbmcgdGFncyBhbmQgYnJhbmNoZXMuICBIZXJlIGlzIGl0cyBoaXN0b3J5OgorCisgIDEuICBUaGUgaW5pdGlhbCBpbXBvcnQgKHJldmlzaW9uIDEuMSBvZiBldmVyeWJvZHkpIGNyZWF0ZWQgYQorICAgICAgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aXRoIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcgaW4gZWFjaCBkaXI6CisKKyAgICAgICAgICAgIC4vCisgICAgICAgICAgICAgIGRlZmF1bHQKKyAgICAgICAgICAgICAgc3ViMS9kZWZhdWx0CisgICAgICAgICAgICAgICAgICAgc3Vic3ViQS9kZWZhdWx0CisgICAgICAgICAgICAgICAgICAgc3Vic3ViQi9kZWZhdWx0CisgICAgICAgICAgICAgIHN1YjIvZGVmYXVsdAorICAgICAgICAgICAgICAgICAgIHN1YnN1YkEvZGVmYXVsdAorICAgICAgICAgICAgICBzdWIzL2RlZmF1bHQKKworICAyLiAgVGhlbiB0YWdnZWQgZXZlcnlvbmUgd2l0aCBUX0FMTF9JTklUSUFMX0ZJTEVTLgorCisgIDMuICBUaGVuIHRhZ2dlZCBldmVyeW9uZSBleGNlcHQgc3ViMS9zdWJzdWJCL2RlZmF1bHQgd2l0aAorICAgICAgVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FLgorCisgIDQuICBUaGVuIGNyZWF0ZWQgYnJhbmNoIEJfRlJPTV9JTklUSUFMUyBvbiBldmVyeW9uZS4KKworICA1LiAgVGhlbiBjcmVhdGVkIGJyYW5jaCBCX0ZST01fSU5JVElBTFNfQlVUX09ORSBvbiBldmVyeW9uZSBleGNlcHQKKyAgICAgIC9zdWIxL3N1YnN1YkIvZGVmYXVsdC4KKworICA2LiAgVGhlbiBjb21taXR0ZWQgbW9kaWZpY2F0aW9ucyB0byB0d28gZmlsZXM6IHN1YjMvZGVmYXVsdCwgYW5kCisgICAgICBzdWIxL3N1YnN1YkEvZGVmYXVsdC4KKworICA3LiAgVGhlbiBjb21taXR0ZWQgYSBtb2RpZmljYXRpb24gdG8gYWxsIDcgZmlsZXMuCisKKyAgOC4gIFRoZW4gYmFja2RhdGVkIHN1YjMvZGVmYXVsdCB0byByZXZpc2lvbiAxLjIsIGFuZAorICAgICAgc3ViMi9zdWJzdWJBL2RlZmF1bHQgdG8gcmV2aXNpb24gMS4xLCBhbmQgdGFnZ2VkIHdpdGggVF9NSVhFRC4KKworICA5LiAgU2FtZSBhcyA4LCBidXQgdGFnZ2VkIHdpdGggLWIgdG8gY3JlYXRlIGJyYW5jaCBCX01JWEVELgorCisgIDEwLiBTd2l0Y2hlZCB0aGUgd29ya2luZyBjb3B5IHRvIEJfTUlYRUQsIGFuZCBhZGRlZAorICAgICAgc3ViMi9icmFuY2hfQl9NSVhFRF9vbmx5LiAgKFRoYXQncyB3aHkgdGhlIFJDUyBmaWxlIGlzIGluCisgICAgICBzdWIyL0F0dGljLyAtLSBpdCBuZXZlciBleGlzdGVkIG9uIHRydW5rLikKKworICAxMS4gSW4gb25lIGNvbW1pdCwgbW9kaWZpZWQgZGVmYXVsdCwgc3ViMS9kZWZhdWx0LCBhbmQKKyAgICAgIHN1YjIvc3Vic3ViQS9kZWZhdWx0LCBvbiBicmFuY2ggQl9NSVhFRC4KKworICAxMi4gRGlkICJjdnMgdXAgLUEiIG9uIHN1YjIvZGVmYXVsdCwgdGhlbiBpbiBvbmUgY29tbWl0LCBtYWRlIGEKKyAgICAgIGNoYW5nZSB0byBzdWIyL2RlZmF1bHQgYW5kIHN1YjIvYnJhbmNoX0JfTUlYRURfb25seS4gIFNvIHRoaXMKKyAgICAgIGNvbW1pdCBzaG91bGQgYmUgc3ByZWFkIGJldHdlZW4gdGhlIGJyYW5jaCBhbmQgdGhlIHRydW5rLgorCisgIDEzLiBEbyAiY3ZzIHVwIC1BIiB0byBnZXQgZXZlcnlvbmUgYmFjayB0byB0cnVuaywgdGhlbiBtYWtlIGEgbmV3CisgICAgICBicmFuY2ggQl9TUExJVCBvbiBldmVyeW9uZSBleGNlcHQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsdi4KKworICAxNC4gU3dpdGNoIHRvIGJyYW5jaCBCX1NQTElUIChzZWUgc3ViMS9zdWJzdWJCL2RlZmF1bHQgZGlzYXBwZWFyKQorICAgICAgYW5kIGNvbW1pdCBhIGNoYW5nZSB0aGF0IGFmZmVjdHMgZXZlcnlvbmUgZXhjZXB0IHN1YjMvZGVmYXVsdC4KKworICAxNS4gQW4gaG91ciBvciBzbyBsYXRlciwgImN2cyB1cCAtQSIgdG8gZ2V0IHN1YjEvc3Vic3ViQi9kZWZhdWx0CisgICAgICBiYWNrLCB0aGVuIGNvbW1pdCBhIGNoYW5nZSBvbiB0aGF0IGZpbGUsIG9uIHRydW5rLiAgKEl0J3MKKyAgICAgIGltcG9ydGFudCB0aGF0IHRoaXMgY2hhbmdlIGhhcHBlbmVkIGFmdGVyIHRoZSBwcmV2aW91cyBjb21taXRzCisgICAgICBvbiBCX1NQTElULikKKworICAxNi4gQnJhbmNoIHN1YjEvc3Vic3ViQi9kZWZhdWx0IHRvIEJfU1BMSVQsIHRoZW4gImN2cyB1cCAtciBCX1NQTElUIgorICAgICAgdG8gc3dpdGNoIHRoZSB3aG9sZSB3b3JraW5nIGNvcHkgdG8gdGhlIGJyYW5jaC4KKworICAxNy4gQ29tbWl0IGEgY2hhbmdlIG9uIEJfU1BMSVQsIHRvIHN1YjEvc3Vic3ViQi9kZWZhdWx0IGFuZAorICAgICAgc3ViMy9kZWZhdWx0LgpkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290Ly5naXRhdHRyaWJ1dGVzIGIvdC90OTYwMi9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKiAtd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZSBiL3QvdDk2MDIvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiOWIzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitoaXN0b3J5Cit2YWwtdGFncwpkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjY4MzgyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDIgQEAKK2hlYWQJMS4yOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4yLjAuNAorCUJfTUlYRUQ6MS4yLjAuMgorCVRfTUlYRUQ6MS4yCisJQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkU6MS4xLjEuMS4wLjQKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkU6MS4xLjEuMQorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4yLjIuMQorCTEuMi40LjE7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjIuMQorZGF0ZQkyMDAzLjA1LjIzLjAwLjMxLjM2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjQuMQorZGF0ZQkyMDAzLjA2LjAzLjAzLjIwLjMxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAVGhpcyBpcyB0aGUgZmlsZSBgZGVmYXVsdCcgaW4gdGhlIHRvcCBsZXZlbCBvZiB0aGUgcHJvamVjdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KK0AKKworCisxLjIuNC4xCitsb2cKK0BGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCisKK1RoaXMgY2hhbmdlIGV4Y2x1ZGVzIHN1YjMvZGVmYXVsdCwgYmVjYXVzZSBpdCB3YXMgbm90IHBhcnQgb2YgdGhpcworY29tbWl0LCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIHdoaWNoIGlzIG5vdCBldmVuIG9uIHRoZSBicmFuY2ggeWV0LgorQAordGV4dAorQGE1IDIKKworRmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorQAorCisKKzEuMi4yLjEKK2xvZworQE1vZGlmeSB0aHJlZSBmaWxlcywgb24gYnJhbmNoIEJfTUlYRUQuCitACit0ZXh0CitAYTUgMgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIG9uIGJyYW5jaCBCX01JWEVEIG9ubHkgKGFmZmVjdGluZyAzIGZpbGVzKS4KK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmZGNjZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDIgQEAKK2hlYWQJMS4yOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4yLjAuNAorCUJfTUlYRUQ6MS4yLjAuMgorCVRfTUlYRUQ6MS4yCisJQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkU6MS4xLjEuMS4wLjQKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkU6MS4xLjEuMQorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4yLjIuMQorCTEuMi40LjE7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjIuMQorZGF0ZQkyMDAzLjA1LjIzLjAwLjMxLjM2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjQuMQorZGF0ZQkyMDAzLjA2LjAzLjAzLjIwLjMxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAVGhpcyBpcyBzdWIxL2RlZmF1bHQuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCitACisKKworMS4yLjQuMQorbG9nCitARmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorCitUaGlzIGNoYW5nZSBleGNsdWRlcyBzdWIzL2RlZmF1bHQsIGJlY2F1c2UgaXQgd2FzIG5vdCBwYXJ0IG9mIHRoaXMKK2NvbW1pdCwgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCB3aGljaCBpcyBub3QgZXZlbiBvbiB0aGUgYnJhbmNoIHlldC4KK0AKK3RleHQKK0BhNSAyCisKK0ZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KK0AKKworCisxLjIuMi4xCitsb2cKK0BNb2RpZnkgdGhyZWUgZmlsZXMsIG9uIGJyYW5jaCBCX01JWEVELgorQAordGV4dAorQGE1IDIKKworVGhpcyBsaW5lIHdhcyBhZGRlZCBvbiBicmFuY2ggQl9NSVhFRCBvbmx5IChhZmZlY3RpbmcgMyBmaWxlcykuCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJBL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJBL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzJiN2IyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL3N1YnN1YkEvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAxIEBACitoZWFkCTEuMzsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMy4wLjQKKwlCX01JWEVEOjEuMy4wLjIKKwlUX01JWEVEOjEuMworCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4zCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMy40LjE7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTUuMjY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjMuNC4xCitkYXRlCTIwMDMuMDYuMDMuMDMuMjAuMzE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4zCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BUaGlzIGlzIHN1YjEvc3Vic3ViQS9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGJ5IHRoZSBmaXJzdCBjb21taXQgKGFmZmVjdGluZyB0d28gZmlsZXMpLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorQAorCisKKzEuMy40LjEKK2xvZworQEZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KKworVGhpcyBjaGFuZ2UgZXhjbHVkZXMgc3ViMy9kZWZhdWx0LCBiZWNhdXNlIGl0IHdhcyBub3QgcGFydCBvZiB0aGlzCitjb21taXQsIGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgd2hpY2ggaXMgbm90IGV2ZW4gb24gdGhlIGJyYW5jaCB5ZXQuCitACit0ZXh0CitAYTcgMgorCitGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCitACisKKworMS4yCitsb2cKK0BGaXJzdCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIHR3byBmaWxlcy4KK0AKK3RleHQKK0BkNiAyCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJCL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJCL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTZlZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL3N1YnN1YkIvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTA3IEBACitoZWFkCTEuMzsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMy4wLjIKKwlCX01JWEVEOjEuMi4wLjIKKwlUX01JWEVEOjEuMgorCUJfRlJPTV9JTklUSUFMUzoxLjEuMS4xLjAuMgorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjMKK2RhdGUJMjAwMy4wNi4wMy4wNC4yOS4xNDsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4zLjIuMTsKK25leHQJMS4yOworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMy4yLjEKK2RhdGUJMjAwMy4wNi4wMy4wNC4zMy4xMzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjMKK2xvZworQEEgdHJ1bmsgY2hhbmdlIHRvIHN1YjEvc3Vic3ViQi9kZWZhdWx0LiAgVGhpcyB3YXMgY29tbWl0dGVkIGFib3V0IGFuCitob3VyIGFmdGVyIGFuIGVhcmxpZXIgY2hhbmdlIHRoYXQgYWZmZWN0ZWQgbW9zdCBmaWxlcyBvbiBicmFuY2gKK0JfU1BMSVQuICBUaGlzIGZpbGUgaXMgbm90IG9uIHRoYXQgYnJhbmNoIHlldCwgYnV0IGFmdGVyIHRoaXMgY29tbWl0LAord2UnbGwgYnJhbmNoIHRvIEJfU1BMSVQsIGFsYmVpdCByb290ZWQgaW4gYSByZXZpc2lvbiB0aGF0IGRpZG4ndCBleGlzdAorYXQgdGhlIHRpbWUgdGhlIHJlc3Qgb2YgQl9TUExJVCB3YXMgY3JlYXRlZC4KK0AKK3RleHQKK0BUaGlzIGlzIHN1YjEvc3Vic3ViQi9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorCitUaGlzIGJpdCB3YXMgY29tbWl0dGVkIG9uIHRydW5rIGFib3V0IGFuIGhvdXIgYWZ0ZXIgYW4gZWFybGllciBjaGFuZ2UKK3RvIGV2ZXJ5b25lIGVsc2Ugb24gYnJhbmNoIEJfU1BMSVQuICBBZnRlcndhcmRzLCB3ZSdsbCBmaW5hbGx5IGJyYW5jaAordGhpcyBmaWxlIHRvIEJfU1BMSVQsIGJ1dCByb290ZWQgaW4gYSByZXZpc2lvbiB0aGF0IGRpZG4ndCBleGlzdCBhdAordGhlIHRpbWUgdGhlIHJlc3Qgb2YgQl9TUExJVCB3YXMgY3JlYXRlZC4KK0AKKworCisxLjMuMi4xCitsb2cKK0BUaGlzIGNoYW5nZSBhZmZlY3RzIHN1YjMvZGVmYXVsdCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIG9uIGJyYW5jaAorQl9TUExJVC4gIE5vdGUgdGhhdCB0aGUgbGF0dGVyIGZpbGUgZGlkIG5vdCBldmVuIGV4aXN0IG9uIHRoaXMgYnJhbmNoCit1bnRpbCBhZnRlciBzb21lIG90aGVyIGZpbGVzIGhhZCBoYWQgcmV2aXNpb25zIGNvbW1pdHRlZCBvbiBCX1NQTElULgorQAordGV4dAorQGExMCA0CisKK1RoaXMgY2hhbmdlIGFmZmVjdHMgc3ViMy9kZWZhdWx0IGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgb24gYnJhbmNoCitCX1NQTElULiAgTm90ZSB0aGF0IHRoZSBsYXR0ZXIgZmlsZSBkaWQgbm90IGV2ZW4gZXhpc3Qgb24gdGhpcyBicmFuY2gKK3VudGlsIGFmdGVyIHNvbWUgb3RoZXIgZmlsZXMgaGFkIGhhZCByZXZpc2lvbnMgY29tbWl0dGVkIG9uIEJfU1BMSVQuCitACisKKworMS4yCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BkNiA1CitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9BdHRpYy9icmFuY2hfQl9NSVhFRF9vbmx5LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvQXR0aWMvYnJhbmNoX0JfTUlYRURfb25seSx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0Yzk3ODkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvQXR0aWMvYnJhbmNoX0JfTUlYRURfb25seSx2CkBAIC0wLDAgKzEsNTkgQEAKK2hlYWQJMS4xOworYWNjZXNzOworc3ltYm9scworCUJfTUlYRUQ6MS4xLjAuMjsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4xCitkYXRlCTIwMDMuMDUuMjMuMDAuMjUuMjY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBkZWFkOworYnJhbmNoZXMKKwkxLjEuMi4xOworbmV4dAk7CisKKzEuMS4yLjEKK2RhdGUJMjAwMy4wNS4yMy4wMC4yNS4yNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjEuMi4yOworCisxLjEuMi4yCitkYXRlCTIwMDMuMDUuMjMuMDAuNDguNTE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4xCitsb2cKK0BmaWxlIGJyYW5jaF9CX01JWEVEX29ubHkgd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQl9NSVhFRC4KK0AKK3RleHQKK0BACisKKworMS4xLjIuMQorbG9nCitAQWRkIGEgZmlsZSBvbiBicmFuY2ggQl9NSVhFRC4KK0AKK3RleHQKK0BhMCAxCitUaGlzIGZpbGUgd2FzIGFkZGVkIG9uIGJyYW5jaCBCX01JWEVELiAgSXQgbmV2ZXIgZXhpc3RlZCBvbiB0cnVuay4KK0AKKworCisxLjEuMi4yCitsb2cKK0BBIHNpbmdsZSBjb21taXQgYWZmZWN0aW5nIG9uZSBmaWxlIG9uIGJyYW5jaCBCX01JWEVEIGFuZCBvbmUgb24gdHJ1bmsuCitACit0ZXh0CitAYTEgMworCitUaGUgc2FtZSBjb21taXQgYWRkZWQgdGhlc2UgdHdvIGxpbmVzIGhlcmUgb24gYnJhbmNoIEJfTUlYRUQsIGFuZCB0d28KK3NpbWlsYXIgbGluZXMgdG8gLi9kZWZhdWx0IG9uIHRydW5rLgorQAorCisKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGY3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAyIEBACitoZWFkCTEuMzsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMy4wLjIKKwlCX01JWEVEOjEuMi4wLjIKKwlUX01JWEVEOjEuMgorCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4zCitkYXRlCTIwMDMuMDUuMjMuMDAuNDguNTE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMy4yLjE7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjMuMi4xCitkYXRlCTIwMDMuMDYuMDMuMDMuMjAuMzE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4zCitsb2cKK0BBIHNpbmdsZSBjb21taXQgYWZmZWN0aW5nIG9uZSBmaWxlIG9uIGJyYW5jaCBCX01JWEVEIGFuZCBvbmUgb24gdHJ1bmsuCitACit0ZXh0CitAVGhpcyBpcyBzdWIyL2RlZmF1bHQuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCisKK1RoZSBzYW1lIGNvbW1pdCBhZGRlZCB0aGVzZSB0d28gbGluZXMgaGVyZSBvbiB0cnVuaywgYW5kIHR3byBzaW1pbGFyCitsaW5lcyB0byAuL2JyYW5jaF9CX01JWEVEX29ubHkgb24gYnJhbmNoIEJfTUlYRUQuCitACisKKworMS4zLjIuMQorbG9nCitARmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorCitUaGlzIGNoYW5nZSBleGNsdWRlcyBzdWIzL2RlZmF1bHQsIGJlY2F1c2UgaXQgd2FzIG5vdCBwYXJ0IG9mIHRoaXMKK2NvbW1pdCwgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCB3aGljaCBpcyBub3QgZXZlbiBvbiB0aGUgYnJhbmNoIHlldC4KK0AKK3RleHQKK0BhOCAyCisKK0ZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KK0AKKworCisxLjIKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQGQ2IDMKK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL3N1YnN1YkEvZGVmYXVsdCx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL3N1YnN1YkEvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzI0MmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvc3Vic3ViQS9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDIgQEAKK2hlYWQJMS4yOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4yLjAuMgorCUJfTUlYRUQ6MS4xLjAuMgorCVRfTUlYRUQ6MS4xCisJQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkU6MS4xLjEuMS4wLjQKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkU6MS4xLjEuMQorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4yLjIuMTsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMQorCTEuMS4yLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4xLjIuMQorZGF0ZQkyMDAzLjA1LjIzLjAwLjMxLjM2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjIuMQorZGF0ZQkyMDAzLjA2LjAzLjAzLjIwLjMxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAVGhpcyBpcyBzdWIyL3N1YnN1YjIvZGVmYXVsdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KK0AKKworCisxLjIuMi4xCitsb2cKK0BGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCisKK1RoaXMgY2hhbmdlIGV4Y2x1ZGVzIHN1YjMvZGVmYXVsdCwgYmVjYXVzZSBpdCB3YXMgbm90IHBhcnQgb2YgdGhpcworY29tbWl0LCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIHdoaWNoIGlzIG5vdCBldmVuIG9uIHRoZSBicmFuY2ggeWV0LgorQAordGV4dAorQGE1IDIKKworRmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMi4xCitsb2cKK0BNb2RpZnkgdGhyZWUgZmlsZXMsIG9uIGJyYW5jaCBCX01JWEVELgorQAordGV4dAorQGEzIDIKKworVGhpcyBsaW5lIHdhcyBhZGRlZCBvbiBicmFuY2ggQl9NSVhFRCBvbmx5IChhZmZlY3RpbmcgMyBmaWxlcykuCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIzL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMy9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlNDU2NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMy9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDIgQEAKK2hlYWQJMS4zOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4zLjAuMgorCUJfTUlYRUQ6MS4yLjAuMgorCVRfTUlYRUQ6MS4yCisJQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkU6MS4xLjEuMS4wLjQKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkU6MS4xLjEuMQorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjMKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4zLjIuMTsKK25leHQJMS4yOworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNS4yNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMy4yLjEKK2RhdGUJMjAwMy4wNi4wMy4wNC4zMy4xMzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjMKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQFRoaXMgaXMgc3ViMy9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGJ5IHRoZSBmaXJzdCBjb21taXQgKGFmZmVjdGluZyB0d28gZmlsZXMpLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorQAorCisKKzEuMy4yLjEKK2xvZworQFRoaXMgY2hhbmdlIGFmZmVjdHMgc3ViMy9kZWZhdWx0IGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgb24gYnJhbmNoCitCX1NQTElULiAgTm90ZSB0aGF0IHRoZSBsYXR0ZXIgZmlsZSBkaWQgbm90IGV2ZW4gZXhpc3Qgb24gdGhpcyBicmFuY2gKK3VudGlsIGFmdGVyIHNvbWUgb3RoZXIgZmlsZXMgaGFkIGhhZCByZXZpc2lvbnMgY29tbWl0dGVkIG9uIEJfU1BMSVQuCitACit0ZXh0CitAYTcgNAorCitUaGlzIGNoYW5nZSBhZmZlY3RzIHN1YjMvZGVmYXVsdCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIG9uIGJyYW5jaAorQl9TUExJVC4gIE5vdGUgdGhhdCB0aGUgbGF0dGVyIGZpbGUgZGlkIG5vdCBldmVuIGV4aXN0IG9uIHRoaXMgYnJhbmNoCit1bnRpbCBhZnRlciBzb21lIG90aGVyIGZpbGVzIGhhZCBoYWQgcmV2aXNpb25zIGNvbW1pdHRlZCBvbiBCX1NQTElULgorQAorCisKKzEuMgorbG9nCitARmlyc3QgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyB0d28gZmlsZXMuCitACit0ZXh0CitAZDYgMgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAzLWN2c2ltcG9ydC1wYXRjaHNldHMuc2ggYi90L3Q5NjAzLWN2c2ltcG9ydC1wYXRjaHNldHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTIwMzRjOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDMtY3ZzaW1wb3J0LXBhdGNoc2V0cy5zaApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKworIyBTdHJ1Y3R1cmUgb2YgdGhlIHRlc3QgY3ZzIHJlcG9zaXRvcnkKKyMKKyMgTWVzc2FnZSAgIEZpbGU6Q29udGVudCAgICAgICAgIENvbW1pdCBUaW1lCisjIFJldiAxICAgICBhOiAxLjEgICAgICAgICAgICAgICAyMDA5LTAyLTIxIDE5OjExOjQzICswMTAwCisjIFJldiAyICAgICBhOiAxLjIgICAgYjogMS4xICAgICAyMDA5LTAyLTIxIDE5OjExOjE0ICswMTAwCisjIFJldiAzICAgICAgICAgICAgICAgYjogMS4yICAgICAyMDA5LTAyLTIxIDE5OjExOjQzICswMTAwCisjCisjIEFzIHlvdSBjYW4gc2VlIHRoZSBjb21taXQgb2YgUmV2IDMgaGFzIHRoZSBzYW1lIHRpbWUgYXMKKyMgUmV2IDEgdGhpcyBsZWFkcyB0byBhIGJyb2tlbiBpbXBvcnQgYmVjYXVzZSBvZiBhIGN2c3BzCisjIGJ1Zy4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGN2c2ltcG9ydCB0ZXN0aW5nIGZvciBjb3JyZWN0IHBhdGNoc2V0IGVzdGltYXRpb24nCisuIC4vbGliLWN2cy5zaAorCitzZXR1cF9jdnNfdGVzdF9yZXBvc2l0b3J5IHQ5NjAzCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2ltcG9ydCB3aXRoIGNyaXNzIGNyb3NzIHRpbWVzIG9uIHJldmlzaW9ucycgJworCisgICAgZ2l0IGN2c2ltcG9ydCAtcCIteCIgLUMgbW9kdWxlLWdpdCBtb2R1bGUgJiYKKyAgICAoY2QgbW9kdWxlLWdpdCAmJgorICAgICAgICBnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyA+IC4uL2FjdHVhbC1tYXN0ZXIgJiYKKyAgICAgICAgZ2l0IGxvZyBBfjIuLkEgLS1wcmV0dHk9ImZvcm1hdDolcyAlYWQiIC0tID4gLi4vYWN0dWFsLUEgJiYKKyAgICAgICAgZWNobyAiIiA+PiAuLi9hY3R1YWwtbWFzdGVyICYmCisJZWNobyAiIiA+PiAuLi9hY3R1YWwtQQorICAgICkgJiYKKyAgICBlY2hvICJSZXYgNAorUmV2IDMKK1JldiAyCitSZXYgMSIgPiBleHBlY3QtbWFzdGVyICYmCisgICAgdGVzdF9jbXAgYWN0dWFsLW1hc3RlciBleHBlY3QtbWFzdGVyICYmCisKKyAgICBlY2hvICJSZXYgNSBCcmFuY2ggQSBXZWQgTWFyIDExIDE5OjA5OjEwIDIwMDkgKzAwMDAKK1JldiA0IEJyYW5jaCBBIFdlZCBNYXIgMTEgMTk6MDM6NTIgMjAwOSArMDAwMCIgPiBleHBlY3QtQSAmJgorICAgIHRlc3RfY21wIGFjdHVhbC1BIGV4cGVjdC1BCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTYwMy9jdnNyb290Ly5naXRhdHRyaWJ1dGVzIGIvdC90OTYwMy9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAzL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKiAtd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEvdC90OTYwMy9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZSBiL3QvdDk2MDMvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiOWIzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDMvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitoaXN0b3J5Cit2YWwtdGFncwpkaWZmIC0tZ2l0IGEvdC90OTYwMy9jdnNyb290L21vZHVsZS9hLHYgYi90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2EsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYThmZDVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMy9jdnNyb290L21vZHVsZS9hLHYKQEAgLTAsMCArMSw3NCBAQAoraGVhZAkxLjI7CithY2Nlc3M7CitzeW1ib2xzCisJQToxLjIuMC4yOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwOS4wMi4yMS4xOC4xMS4xNDsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjIuMi4xOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDA5LjAyLjIxLjE4LjExLjQzOwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjIuMi4xCitkYXRlCTIwMDkuMDMuMTEuMTkuMDMuNTI7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjIuMi4yOworCisxLjIuMi4yCitkYXRlCTIwMDkuMDMuMTEuMTkuMDkuMTA7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQFJldiAyCitACit0ZXh0CitAMS4yCitACisKKworMS4yLjIuMQorbG9nCitAUmV2IDQgQnJhbmNoIEEKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjIuMi4xCitACisKKworMS4yLjIuMgorbG9nCitAUmV2IDUgQnJhbmNoIEEKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjIuMi4yCitACisKKworMS4xCitsb2cKK0BSZXYgMQorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMQorQApkaWZmIC0tZ2l0IGEvdC90OTYwMy9jdnNyb290L21vZHVsZS9iLHYgYi90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2IsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjY4ODU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMy9jdnNyb290L21vZHVsZS9iLHYKQEAgLTAsMCArMSw5MCBAQAoraGVhZAkxLjM7CithY2Nlc3M7CitzeW1ib2xzCisJQToxLjIuMC4yOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjMKK2RhdGUJMjAwOS4wMy4xMS4xOS4wNS4wODsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDkuMDIuMjEuMTguMTEuNDM7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4yLjIuMTsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwOS4wMi4yMS4xOC4xMS4xNDsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjIuMQorZGF0ZQkyMDA5LjAzLjExLjE5LjAzLjUyOwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4yLjIuMjsKKworMS4yLjIuMgorZGF0ZQkyMDA5LjAzLjExLjE5LjA5LjEwOwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4zCitsb2cKK0BSZXYgNAorQAordGV4dAorQDEuMworQAorCisKKzEuMgorbG9nCitAUmV2IDMKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjIKK0AKKworCisxLjIuMi4xCitsb2cKK0BSZXYgNCBCcmFuY2ggQQorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMi4yLjEKK0AKKworCisxLjIuMi4yCitsb2cKK0BSZXYgNSBCcmFuY2ggQQorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMgorQAorCisKKzEuMQorbG9nCitAUmV2IDIKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjEKK0AKZGlmZiAtLWdpdCBhL3QvdDk3MDAtcGVybC1naXQuc2ggYi90L3Q5NzAwLXBlcmwtZ2l0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQzNWQ4OTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NzAwLXBlcmwtZ2l0LnNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggTGVhIFdpZW1hbm4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVybCBpbnRlcmZhY2UgKEdpdC5wbSknCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgcGVybCBpbnRlcmZhY2UgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKKyIkUEVSTF9QQVRIIiAtTVRlc3Q6Ok1vcmUgLWUgMCAyPi9kZXYvbnVsbCB8fCB7CisJc2tpcF9hbGw9IlBlcmwgVGVzdDo6TW9yZSB1bmF2YWlsYWJsZSwgc2tpcHBpbmcgdGVzdCIKKwl0ZXN0X2RvbmUKK30KKworIyBzZXQgdXAgdGVzdCByZXBvc2l0b3J5CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZXQgdXAgdGVzdCByZXBvc2l0b3J5JyBcCisgICAgJ2VjaG8gInRlc3QgZmlsZSAxIiA+IGZpbGUxICYmCisgICAgIGVjaG8gInRlc3QgZmlsZSAyIiA+IGZpbGUyICYmCisgICAgIG1rZGlyIGRpcmVjdG9yeTEgJiYKKyAgICAgZWNobyAiaW4gZGlyZWN0b3J5MSIgPj4gZGlyZWN0b3J5MS9maWxlICYmCisgICAgIG1rZGlyIGRpcmVjdG9yeTIgJiYKKyAgICAgZWNobyAiaW4gZGlyZWN0b3J5MiIgPj4gZGlyZWN0b3J5Mi9maWxlICYmCisgICAgIGdpdCBhZGQgLiAmJgorICAgICBnaXQgY29tbWl0IC1tICJmaXJzdCBjb21taXQiICYmCisKKyAgICAgZWNobyAibmV3IGZpbGUgaW4gc3ViZGlyIDIiID4gZGlyZWN0b3J5Mi9maWxlMiAmJgorICAgICBnaXQgYWRkIC4gJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiY29tbWl0IGluIGRpcmVjdG9yeTIiICYmCisKKyAgICAgZWNobyAiY2hhbmdlZCBmaWxlIDEiID4gZmlsZTEgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAic2Vjb25kIGNvbW1pdCIgJiYKKworICAgICBnaXQgY29uZmlnIC0tYWRkIGNvbG9yLnRlc3Quc2xvdDEgZ3JlZW4gJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LnN0cmluZyB2YWx1ZSAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QuZHVwc3RyaW5nIHZhbHVlMSAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QuZHVwc3RyaW5nIHZhbHVlMiAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QuYm9vbHRydWUgdHJ1ZSAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QuYm9vbGZhbHNlIG5vICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5ib29sb3RoZXIgb3RoZXIgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LmludCAyayAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QucGF0aCAifi9mb28iICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5wYXRoZXhwYW5kZWQgIiRIT01FL2ZvbyIgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LnBhdGhtdWx0aSBmb28gJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LnBhdGhtdWx0aSBiYXIKKyAgICAgJworCisjIFRoZSBleHRlcm5hbCB0ZXN0IHdpbGwgb3V0cHV0cyBpdHMgb3duIHBsYW4KK3Rlc3RfZXh0ZXJuYWxfaGFzX3RhcD0xCisKK3Rlc3RfZXh0ZXJuYWxfd2l0aG91dF9zdGRlcnIgXAorICAgICdQZXJsIEFQSScgXAorICAgICIkUEVSTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZIi90OTcwMC90ZXN0LnBsCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTcwMC90ZXN0LnBsIGIvdC90OTcwMC90ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiOWI0ODQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NzAwL3Rlc3QucGwKQEAgLTAsMCArMSwxMzMgQEAKKyMhL3Vzci9iaW4vcGVybAordXNlIGxpYiAoc3BsaXQoLzovLCAkRU5We0dJVFBFUkxMSUJ9KSk7CisKK3VzZSA1LjAwODsKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7CisKK3VzZSBUZXN0OjpNb3JlIHF3KG5vX3BsYW4pOworCitCRUdJTiB7CisJIyB0OTcwMC1wZXJsLWdpdC5zaCBraWNrcyBvZmYgb3VyIHRlc3RpbmcsIHNvIHdlIGhhdmUgdG8gZ28gZnJvbQorCSMgdGhlcmUuCisJVGVzdDo6TW9yZS0+YnVpbGRlci0+Y3VycmVudF90ZXN0KDEpOworCVRlc3Q6Ok1vcmUtPmJ1aWxkZXItPm5vX2VuZGluZygxKTsKK30KKwordXNlIEN3ZDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKworQkVHSU4geyB1c2Vfb2soJ0dpdCcpIH0KKworIyBzZXQgdXAKK291ciAkYWJzX3JlcG9fZGlyID0gY3dkKCk7CitvayhvdXIgJHIgPSBHaXQtPnJlcG9zaXRvcnkoRGlyZWN0b3J5ID0+ICIuIiksICJvcGVuIHJlcG9zaXRvcnkiKTsKKworIyBjb25maWcKK2lzKCRyLT5jb25maWcoInRlc3Quc3RyaW5nIiksICJ2YWx1ZSIsICJjb25maWcgc2NhbGFyOiBzdHJpbmciKTsKK2lzX2RlZXBseShbJHItPmNvbmZpZygidGVzdC5kdXBzdHJpbmciKV0sIFsidmFsdWUxIiwgInZhbHVlMiJdLAorCSAgImNvbmZpZyBhcnJheTogc3RyaW5nIik7Citpcygkci0+Y29uZmlnKCJ0ZXN0Lm5vbmV4aXN0ZW50IiksIHVuZGVmLCAiY29uZmlnIHNjYWxhcjogbm9uZXhpc3RlbnQiKTsKK2lzX2RlZXBseShbJHItPmNvbmZpZygidGVzdC5ub25leGlzdGVudCIpXSwgW10sICJjb25maWcgYXJyYXk6IG5vbmV4aXN0ZW50Iik7Citpcygkci0+Y29uZmlnX2ludCgidGVzdC5pbnQiKSwgMjA0OCwgImNvbmZpZ19pbnQ6IGludGVnZXIiKTsKK2lzKCRyLT5jb25maWdfaW50KCJ0ZXN0Lm5vbmV4aXN0ZW50IiksIHVuZGVmLCAiY29uZmlnX2ludDogbm9uZXhpc3RlbnQiKTsKK29rKCRyLT5jb25maWdfYm9vbCgidGVzdC5ib29sdHJ1ZSIpLCAiY29uZmlnX2Jvb2w6IHRydWUiKTsKK29rKCEkci0+Y29uZmlnX2Jvb2woInRlc3QuYm9vbGZhbHNlIiksICJjb25maWdfYm9vbDogZmFsc2UiKTsKK2lzKCRyLT5jb25maWdfcGF0aCgidGVzdC5wYXRoIiksICRyLT5jb25maWcoInRlc3QucGF0aGV4cGFuZGVkIiksCisgICAiY29uZmlnX3BhdGg6IH4vZm9vIGV4cGFuc2lvbiIpOworaXNfZGVlcGx5KFskci0+Y29uZmlnX3BhdGgoInRlc3QucGF0aG11bHRpIildLCBbImZvbyIsICJiYXIiXSwKKyAgICJjb25maWdfcGF0aDogbXVsdGlwbGUgdmFsdWVzIik7CitvdXIgJGFuc2lfZ3JlZW4gPSAiXHgxYlszMm0iOworaXMoJHItPmdldF9jb2xvcigiY29sb3IudGVzdC5zbG90MSIsICJyZWQiKSwgJGFuc2lfZ3JlZW4sICJnZXRfY29sb3IiKTsKKyMgQ2Fubm90IHRlc3QgJHItPmdldF9jb2xvcmJvb2woImNvbG9yLmZvbyIpKSBiZWNhdXNlIHdlIGRvIG5vdAorIyBjb250cm9sIHdoZXRoZXIgb3VyIFNURE9VVCBpcyBhIHRlcm1pbmFsLgorCisjIEZhaWx1cmUgY2FzZXMgZm9yIGNvbmZpZzoKKyMgU2F2ZSBhbmQgcmVzdG9yZSBTVERFUlI7IHdlIHdpbGwgcHJvYmFibHkgZXh0cmFjdCB0aGlzIGludG8gYQorIyAiZGllc19vayIgbWV0aG9kIGFuZCBwb3NzaWJseSBtb3ZlIHRoZSBTVERFUlIgaGFuZGxpbmcgdG8gR2l0LnBtLgorb3BlbiBvdXIgJHRtcHN0ZGVyciwgIj4mU1RERVJSIiBvciBkaWUgImNhbm5vdCBzYXZlIFNUREVSUiI7IGNsb3NlIFNUREVSUjsKK2V2YWwgeyAkci0+Y29uZmlnKCJ0ZXN0LmR1cHN0cmluZyIpIH07CitvaygkQCwgImNvbmZpZzogZHVwbGljYXRlIGVudHJ5IGluIHNjYWxhciBjb250ZXh0IGZhaWxzIik7CitldmFsIHsgJHItPmNvbmZpZ19ib29sKCJ0ZXN0LmJvb2xvdGhlciIpIH07CitvaygkQCwgImNvbmZpZ19ib29sOiBub24tYm9vbGVhbiB2YWx1ZXMgZmFpbCIpOworb3BlbiBTVERFUlIsICI+JiIsICR0bXBzdGRlcnIgb3IgZGllICJjYW5ub3QgcmVzdG9yZSBTVERFUlIiOworCisjIGlkZW50CitsaWtlKCRyLT5pZGVudCgiYVV0aG9yIiksIHFyL15BIFUgVGhvciA8YXV0aG9yXEBleGFtcGxlLmNvbT4gWzAtOV0rIFwrMDAwMCQvLAorICAgICAiaWRlbnQgc2NhbGFyOiBhdXRob3IgKHR5cGUpIik7CitsaWtlKCRyLT5pZGVudCgiY09tbWl0dGVyIiksIHFyL15DIE8gTWl0dGVyIDxjb21taXR0ZXJcQGV4YW1wbGUuY29tPiBbMC05XSsgXCswMDAwJC8sCisgICAgICJpZGVudCBzY2FsYXI6IGNvbW1pdHRlciAodHlwZSkiKTsKK2lzKCRyLT5pZGVudCgiaW52YWxpZCIpLCAiaW52YWxpZCIsICJpZGVudCBzY2FsYXI6IGludmFsaWQgaWRlbnQgc3RyaW5nIChubyBwYXJzaW5nKSIpOworbXkgKCRuYW1lLCAkZW1haWwsICR0aW1lX3R6KSA9ICRyLT5pZGVudCgnYXV0aG9yJyk7Citpc19kZWVwbHkoWyRuYW1lLCAkZW1haWxdLCBbIkEgVSBUaG9yIiwgImF1dGhvclxAZXhhbXBsZS5jb20iXSwKKwkgImlkZW50IGFycmF5OiBhdXRob3IiKTsKK2xpa2UoJHRpbWVfdHosIHFyL1swLTldKyBcKzAwMDAvLCAiaWRlbnQgYXJyYXk6IGF1dGhvciIpOworaXNfZGVlcGx5KFskci0+aWRlbnQoIk5hbWUgPGVtYWlsPiAxMjMgKzAwMDAiKV0sIFsiTmFtZSIsICJlbWFpbCIsICIxMjMgKzAwMDAiXSwKKwkgICJpZGVudCBhcnJheTogaWRlbnQgc3RyaW5nIik7Citpc19kZWVwbHkoWyRyLT5pZGVudCgiaW52YWxpZCIpXSwgW10sICJpZGVudCBhcnJheTogaW52YWxpZCBpZGVudCBzdHJpbmciKTsKKworIyBpZGVudF9wZXJzb24KK2lzKCRyLT5pZGVudF9wZXJzb24oImFVdGhvciIpLCAiQSBVIFRob3IgPGF1dGhvclxAZXhhbXBsZS5jb20+IiwKKyAgICJpZGVudF9wZXJzb246IGF1dGhvciAodHlwZSkiKTsKK2lzKCRyLT5pZGVudF9wZXJzb24oIk5hbWUgPGVtYWlsPiAxMjMgKzAwMDAiKSwgIk5hbWUgPGVtYWlsPiIsCisgICAiaWRlbnRfcGVyc29uOiBpZGVudCBzdHJpbmciKTsKK2lzKCRyLT5pZGVudF9wZXJzb24oIk5hbWUiLCAiZW1haWwiLCAiMTIzICswMDAwIiksICJOYW1lIDxlbWFpbD4iLAorICAgImlkZW50X3BlcnNvbjogYXJyYXkiKTsKKworIyBvYmplY3RzIGFuZCBoYXNoZXMKK29rKG91ciAkZmlsZTFoYXNoID0gJHItPmNvbW1hbmRfb25lbGluZSgncmV2LXBhcnNlJywgIkhFQUQ6ZmlsZTEiKSwgIihnZXQgZmlsZSBoYXNoKSIpOworbXkgJHRtcGZpbGUgPSAiZmlsZS50bXAiOworb3BlbiBURU1QRklMRSwgIis+JHRtcGZpbGUiIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkdG1wZmlsZTogJCEiOworaXMoJHItPmNhdF9ibG9iKCRmaWxlMWhhc2gsIFwqVEVNUEZJTEUpLCAxNSwgImNhdF9ibG9iOiBzaXplIik7CitvdXIgJGJsb2Jjb250ZW50czsKK3sgbG9jYWwgJC87IHNlZWsgVEVNUEZJTEUsIDAsIDA7ICRibG9iY29udGVudHMgPSA8VEVNUEZJTEU+OyB9CitpcygkYmxvYmNvbnRlbnRzLCAiY2hhbmdlZCBmaWxlIDFcbiIsICJjYXRfYmxvYjogZGF0YSIpOworY2xvc2UgVEVNUEZJTEUgb3IgZGllICJGYWlsZWQgd3JpdGluZyB0byAkdG1wZmlsZTogJCEiOworaXMoR2l0OjpoYXNoX29iamVjdCgiYmxvYiIsICR0bXBmaWxlKSwgJGZpbGUxaGFzaCwgImhhc2hfb2JqZWN0OiByb3VuZHRyaXAiKTsKK29wZW4gVEVNUEZJTEUsICI+JHRtcGZpbGUiIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkdG1wZmlsZTogJCEiOworcHJpbnQgVEVNUEZJTEUgbXkgJHRlc3RfdGV4dCA9ICJ0ZXN0IGJsb2IsIHRvIGJlIGluc2VydGVkXG4iOworY2xvc2UgVEVNUEZJTEUgb3IgZGllICJGYWlsZWQgd3JpdGluZyB0byAkdG1wZmlsZTogJCEiOworbGlrZShvdXIgJG5ld2hhc2ggPSAkci0+aGFzaF9hbmRfaW5zZXJ0X29iamVjdCgkdG1wZmlsZSksIHFyL1swLTlhLWZBLUZdezQwfS8sCisgICAgICJoYXNoX2FuZF9pbnNlcnRfb2JqZWN0OiByZXR1cm5zIGhhc2giKTsKK29wZW4gVEVNUEZJTEUsICIrPiR0bXBmaWxlIiBvciBkaWUgIkNhbid0IG9wZW4gJHRtcGZpbGU6ICQhIjsKK2lzKCRyLT5jYXRfYmxvYigkbmV3aGFzaCwgXCpURU1QRklMRSksIGxlbmd0aCAkdGVzdF90ZXh0LCAiY2F0X2Jsb2I6IHJvdW5kdHJpcCBzaXplIik7Cit7IGxvY2FsICQvOyBzZWVrIFRFTVBGSUxFLCAwLCAwOyAkYmxvYmNvbnRlbnRzID0gPFRFTVBGSUxFPjsgfQoraXMoJGJsb2Jjb250ZW50cywgJHRlc3RfdGV4dCwgImNhdF9ibG9iOiByb3VuZHRyaXAgZGF0YSIpOworY2xvc2UgVEVNUEZJTEU7Cit1bmxpbmsgJHRtcGZpbGU7CisKKyMgcGF0aHMKK2lzKCRyLT5yZXBvX3BhdGgsICRhYnNfcmVwb19kaXIgLiAiLy5naXQiLCAicmVwb19wYXRoIik7Citpcygkci0+d2NfcGF0aCwgJGFic19yZXBvX2RpciAuICIvIiwgIndjX3BhdGgiKTsKK2lzKCRyLT53Y19zdWJkaXIsICIiLCAid2Nfc3ViZGlyIGluaXRpYWwiKTsKKyRyLT53Y19jaGRpcigiZGlyZWN0b3J5MSIpOworaXMoJHItPndjX3N1YmRpciwgImRpcmVjdG9yeTEiLCAid2Nfc3ViZGlyIGFmdGVyIHdjX2NoZGlyIik7Citpcygkci0+Y29uZmlnKCJ0ZXN0LnN0cmluZyIpLCAidmFsdWUiLCAiY29uZmlnIGFmdGVyIHdjX2NoZGlyIik7CisKKyMgT2JqZWN0IGdlbmVyYXRpb24gaW4gc3ViIGRpcmVjdG9yeQorY2hkaXIoImRpcmVjdG9yeTIiKTsKK215ICRyMiA9IEdpdC0+cmVwb3NpdG9yeSgpOworaXMoJHIyLT5yZXBvX3BhdGgsICRhYnNfcmVwb19kaXIgLiAiLy5naXQiLCAicmVwb19wYXRoICgyKSIpOworaXMoJHIyLT53Y19wYXRoLCAkYWJzX3JlcG9fZGlyIC4gIi8iLCAid2NfcGF0aCAoMikiKTsKK2lzKCRyMi0+d2Nfc3ViZGlyLCAiZGlyZWN0b3J5Mi8iLCAid2Nfc3ViZGlyIGluaXRpYWwgKDIpIik7CisKKyMgY29tbWFuZHMgaW4gc3ViIGRpcmVjdG9yeQorbXkgJGxhc3RfY29tbWl0ID0gJHIyLT5jb21tYW5kX29uZWxpbmUocXcocmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKTsKK2xpa2UoJGxhc3RfY29tbWl0LCBxci9eWzAtOWEtZkEtRl17NDB9JC8sICdyZXYtcGFyc2UgcmV0dXJuZWQgaGFzaCcpOworbXkgJGRpcl9jb21taXQgPSAkcjItPmNvbW1hbmRfb25lbGluZSgnbG9nJywgJy1uMScsICctLXByZXR0eT1mb3JtYXQ6JUgnLCAnLicpOworaXNudCgkbGFzdF9jb21taXQsICRkaXJfY29tbWl0LCAnbG9nIC4gZG9lcyBub3Qgc2hvdyBsYXN0IGNvbW1pdCcpOworCisjIGNvbW1hbmRzIG91dHNpZGUgd29ya2luZyB0cmVlCitjaGRpcigkYWJzX3JlcG9fZGlyIC4gJy8uLicpOworbXkgJHIzID0gR2l0LT5yZXBvc2l0b3J5KERpcmVjdG9yeSA9PiAkYWJzX3JlcG9fZGlyKTsKK215ICR0bXBmaWxlMyA9ICIkYWJzX3JlcG9fZGlyL2ZpbGUzLnRtcCI7CitvcGVuIFRFTVBGSUxFMywgIis+JHRtcGZpbGUzIiBvciBkaWUgIkNhbid0IG9wZW4gJHRtcGZpbGUzOiAkISI7CitpcygkcjMtPmNhdF9ibG9iKCRmaWxlMWhhc2gsIFwqVEVNUEZJTEUzKSwgMTUsICJjYXRfYmxvYihvdXRzaWRlKTogc2l6ZSIpOworY2xvc2UgVEVNUEZJTEUzOwordW5saW5rICR0bXBmaWxlMzsKK2NoZGlyKCRhYnNfcmVwb19kaXIpOworCitwcmludGYgIjEuLiVkXG4iLCBUZXN0OjpNb3JlLT5idWlsZGVyLT5jdXJyZW50X3Rlc3Q7CisKK215ICRpc19wYXNzaW5nID0gZXZhbCB7IFRlc3Q6Ok1vcmUtPmlzX3Bhc3NpbmcgfTsKK2V4aXQoJGlzX3Bhc3NpbmcgPyAwIDogMSkgdW5sZXNzICRAID1+IC9DYW4ndCBsb2NhdGUgb2JqZWN0IG1ldGhvZC87CmRpZmYgLS1naXQgYS90L3Q5ODAwLWdpdC1wNC1iYXNpYy5zaCBiL3QvdDk4MDAtZ2l0LXA0LWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3YWQ3MTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODAwLWdpdC1wNC1iYXNpYy5zaApAQCAtMCwwICsxLDE3OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCB0ZXN0cycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBwNCBmaWxlcycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGUxIiAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlwNCBhZGQgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlMiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGdpdCBwNCBjbG9uZScgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IGNsb25lIEBhbGwnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgc3luYyB1bmluaXRpYWxpemVkIHJlcG8nICcKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBzeW5jIDI+ZXJycyAmJgorCQl0ZXN0X2kxOG5ncmVwICJQZXJoYXBzIHlvdSBuZXZlciBkaWQiIGVycnMKKwkpCisnCisKKyMKKyMgQ3JlYXRlIGEgZ2l0IHJlcG8gYnkgaGFuZC4gIEFkZCBhIGNvbW1pdCBzbyB0aGF0IEhFQUQgaXMgdmFsaWQuCisjIFRlc3QgaW1wb3J0cyBhIG5ldyBwNCByZXBvc2l0b3J5IGludG8gYSBuZXcgZ2l0IGJyYW5jaC4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBzeW5jIG5ldyBicmFuY2gnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0IGhlYWQgJiYKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9cmVmcy9yZW1vdGVzL3A0L2RlcG90IC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHA0L2RlcG90ID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0d28gZGlycycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIHN1YjEgc3ViMiAmJgorCQllY2hvIHN1YjEvZjEgPnN1YjEvZjEgJiYKKwkJZWNobyBzdWIyL2YyID5zdWIyL2YyICYmCisJCXA0IGFkZCBzdWIxL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAic3ViMS9mMSIgJiYKKwkJcDQgYWRkIHN1YjIvZjIgJiYKKwkJcDQgc3VibWl0IC1kICJzdWIyL2YyIgorCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L3N1YjEgLy9kZXBvdC9zdWIyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxzLWZpbGVzID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHA0L21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdHdvIGRpcnMsIEBhbGwnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIHN1YjEvZjMgPnN1YjEvZjMgJiYKKwkJcDQgYWRkIHN1YjEvZjMgJiYKKwkJcDQgc3VibWl0IC1kICJzdWIxL2YzIgorCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L3N1YjFAYWxsIC8vZGVwb3Qvc3ViMkBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbHMtZmlsZXMgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0d28gZGlycywgQGFsbCwgY29uZmxpY3RpbmcgZmlsZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIHN1YjIvZjMgPnN1YjIvZjMgJiYKKwkJcDQgYWRkIHN1YjIvZjMgJiYKKwkJcDQgc3VibWl0IC1kICJzdWIyL2YzIgorCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L3N1YjFAYWxsIC8vZGVwb3Qvc3ViMkBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbHMtZmlsZXMgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IGxpbmVzICYmCisJCWVjaG8gc3ViMi9mMyA+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgZjMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXQgd2hlbiBwNCBmYWlscyB0byBwcm9kdWNlIG1hcnNoYWxlZCBvdXRwdXQnICcKKwlta2RpciBiYWRwNGRpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gYmFkcDRkaXIvcDQgJiYgcm1kaXIgYmFkcDRkaXIiICYmCisJY2F0ID5iYWRwNGRpci9wNCA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisJZXhpdCAxCisJRU9GCisJY2htb2QgNzU1IGJhZHA0ZGlyL3A0ICYmCisJKAorCQlQQVRIPSIkVFJBU0hfRElSRUNUT1JZL2JhZHA0ZGlyOiRQQVRIIiAmJgorCQlleHBvcnQgUEFUSCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCA+ZXJycyAyPiYxCisJKSAmJgorCWNhdCBlcnJzICYmCisJISB0ZXN0X2kxOG5ncmVwIFRyYWNlYmFjayBlcnJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGJhcmUnICcKKwlybSAtcmYgIiRnaXQiICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1iYXJlIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0ICEgLWQgLmdpdCAmJgorCQliYXJlPWBnaXQgY29uZmlnIC0tZ2V0IGNvcmUuYmFyZWAgJiYKKwkJdGVzdCAiJGJhcmUiID0gdHJ1ZQorCSkKKycKKworIyBTbGVlcCBhIGJpdCBzbyB0aGF0IHRoZSB0b3AtbW9zdCBwNCBjaGFuZ2UgZGlkIG5vdCBoYXBwZW4gIm5vdyIuICBUaGVuCisjIGltcG9ydCB0aGUgcmVwbyBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIGluaXRpYWwgaW1wb3J0IGhhcyB0aGUgc2FtZSB0aW1lCisjIGFzIHRoZSB0b3AtbW9zdCBjaGFuZ2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsIGltcG9ydCB0aW1lIGZyb20gdG9wIGNoYW5nZSB0aW1lJyAnCisJcDRjaGFuZ2U9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBtYXJzaGFsX2R1bXAgY2hhbmdlKSAmJgorCXA0dGltZT0kKHA0IC1HIGNoYW5nZXMgLW0gMSAvL2RlcG90Ly4uLiB8IG1hcnNoYWxfZHVtcCB0aW1lKSAmJgorCXNsZWVwIDMgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0dGltZT0kKGdpdCBzaG93IC1zIC0tcmF3IC0tcHJldHR5PWZvcm1hdDolYXQgSEVBRCkgJiYKKwkJZWNobyAkcDR0aW1lICRnaXR0aW1lICYmCisJCXRlc3QgJHA0dGltZSA9ICRnaXR0aW1lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwMS1naXQtcDQtYnJhbmNoLnNoIGIvdC90OTgwMS1naXQtcDQtYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk3MzA4MjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODAxLWdpdC1wNC1icmFuY2guc2gKQEAgLTAsMCArMSw0OTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgdGVzdHMgZm9yIHA0IGJyYW5jaGVzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIworIyAxOiAvL2RlcG90L21haW4vZjEKKyMgMjogLy9kZXBvdC9tYWluL2YyCisjIDM6IGludGVncmF0ZSAvL2RlcG90L21haW4vLi4uIC0+IC8vZGVwb3QvYnJhbmNoMS8uLi4KKyMgNDogLy9kZXBvdC9tYWluL2Y0CisjIDU6IC8vZGVwb3QvYnJhbmNoMS9mNQorIyAuOiBuYW1lZCBicmFuY2ggYnJhbmNoMgorIyA2OiBpbnRlZ3JhdGUgLWIgYnJhbmNoMgorIyA3OiAvL2RlcG90L2JyYW5jaDIvZjcKKyMgODogLy9kZXBvdC9tYWluL2Y4CisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBwNCBicmFuY2hlcycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIC1wIG1haW4gJiYKKworCQllY2hvIGYxID5tYWluL2YxICYmCisJCXA0IGFkZCBtYWluL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMSIgJiYKKworCQllY2hvIGYyID5tYWluL2YyICYmCisJCXA0IGFkZCBtYWluL2YyICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMiIgJiYKKworCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9tYWluLy4uLiAvL2RlcG90L2JyYW5jaDEvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiaW50ZWdyYXRlIG1haW4gdG8gYnJhbmNoMSIgJiYKKworCQllY2hvIGY0ID5tYWluL2Y0ICYmCisJCXA0IGFkZCBtYWluL2Y0ICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mNCIgJiYKKworCQllY2hvIGY1ID5icmFuY2gxL2Y1ICYmCisJCXA0IGFkZCBicmFuY2gxL2Y1ICYmCisJCXA0IHN1Ym1pdCAtZCAiYnJhbmNoMS9mNSIgJiYKKworCQlwNCBicmFuY2ggLWkgPDwtRU9GICYmCisJCUJyYW5jaDogYnJhbmNoMgorCQlWaWV3OiAvL2RlcG90L21haW4vLi4uIC8vZGVwb3QvYnJhbmNoMi8uLi4KKwkJRU9GCisKKwkJcDQgaW50ZWdyYXRlIC1iIGJyYW5jaDIgJiYKKwkJcDQgc3VibWl0IC1kICJpbnRlZ3JhdGUgbWFpbiB0byBicmFuY2gyIiAmJgorCisJCWVjaG8gZjcgPmJyYW5jaDIvZjcgJiYKKwkJcDQgYWRkIGJyYW5jaDIvZjcgJiYKKwkJcDQgc3VibWl0IC1kICJicmFuY2gyL2Y3IiAmJgorCisJCWVjaG8gZjggPm1haW4vZjggJiYKKwkJcDQgYWRkIG1haW4vZjggJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2Y4IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IG1haW4sIG5vIGJyYW5jaCBkZXRlY3Rpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L21haW5AYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgLS1ncmFwaCAtLWRlY29yYXRlIC0tYWxsICYmCisJCWdpdCByZXYtbGlzdCBtYXN0ZXIgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBicmFuY2gxLCBubyBicmFuY2ggZGV0ZWN0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9icmFuY2gxQGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLWFsbCAmJgorCQlnaXQgcmV2LWxpc3QgbWFzdGVyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIHdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgYnJhbmNoMiwgbm8gYnJhbmNoIGRldGVjdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvYnJhbmNoMkBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSAtLWdyYXBoIC0tZGVjb3JhdGUgLS1hbGwgJiYKKwkJZ2l0IHJldi1saXN0IG1hc3RlciA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGRlcG90LCBubyBicmFuY2ggZGV0ZWN0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSAtLWdyYXBoIC0tZGVjb3JhdGUgLS1hbGwgJiYKKwkJZ2l0IHJldi1saXN0IG1hc3RlciA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gOCB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGRlcG90LCBicmFuY2ggZGV0ZWN0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCisJCWdpdCBsb2cgLS1vbmVsaW5lIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLWFsbCAmJgorCisJCSMgNCBtYWluIGNvbW1pdHMKKwkJZ2l0IHJldi1saXN0IG1hc3RlciA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCB3YyAmJgorCisJCSMgMyBtYWluLCAxIGludGVncmF0ZSwgMSBvbiBicmFuY2gyCisJCWdpdCByZXYtbGlzdCBwNC9kZXBvdC9icmFuY2gyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IHdjICYmCisKKwkJIyBubyBicmFuY2gxLCBzaW5jZSBubyBwNCBicmFuY2ggY3JlYXRlZCBmb3IgaXQKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHA0L2RlcG90L2JyYW5jaDEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBkZXBvdCwgYnJhbmNoIGRldGVjdGlvbiwgYnJhbmNoTGlzdCBicmFuY2ggZGVmaW5pdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaDEgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgLS1ncmFwaCAtLWRlY29yYXRlIC0tYWxsICYmCisKKwkJIyA0IG1haW4gY29tbWl0cworCQlnaXQgcmV2LWxpc3QgbWFzdGVyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IHdjICYmCisKKwkJIyAzIG1haW4sIDEgaW50ZWdyYXRlLCAxIG9uIGJyYW5jaDIKKwkJZ2l0IHJldi1saXN0IHA0L2RlcG90L2JyYW5jaDIgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgd2MgJiYKKworCQkjIDIgbWFpbiwgMSBpbnRlZ3JhdGUsIDEgb24gYnJhbmNoMQorCQlnaXQgcmV2LWxpc3QgcDQvZGVwb3QvYnJhbmNoMSA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdGFydCBwNGQnICcKKwlraWxsX3A0ZCAmJgorCXN0YXJ0X3A0ZAorJworCisjCisjIDE6IC8vZGVwb3QvYnJhbmNoMS9maWxlMQorIyAgICAvL2RlcG90L2JyYW5jaDEvZmlsZTIKKyMgMjogaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS8uLi4gLT4gLy9kZXBvdC9icmFuY2gyLy4uLgorIyAzOiAvL2RlcG90L2JyYW5jaDEvZmlsZTMKKyMgNDogLy9kZXBvdC9icmFuY2gxL2ZpbGUyIChlZGl0KQorIyA1OiBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxLy4uLiAtPiAvL2RlcG90L2JyYW5jaDMvLi4uCisjCisjIyBDcmVhdGUgYSBzaW1wbGUgYnJhbmNoIHN0cnVjdHVyZSBpbiBQNCBkZXBvdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzaW1wbGUgcDQgYnJhbmNoZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciBicmFuY2gxICYmCisJCWNkIGJyYW5jaDEgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJZWNobyBmaWxlMiA+ZmlsZTIgJiYKKwkJcDQgYWRkIGZpbGUxIGZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAiQ3JlYXRlIGJyYW5jaDEiICYmCisJCXA0IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvLi4uIC8vZGVwb3QvYnJhbmNoMi8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJJbnRlZ3JhdGUgYnJhbmNoMiBmcm9tIGJyYW5jaDEiICYmCisJCWVjaG8gZmlsZTMgPmZpbGUzICYmCisJCXA0IGFkZCBmaWxlMyAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBmaWxlMyBpbiBicmFuY2gxIiAmJgorCQlwNCBvcGVuIGZpbGUyICYmCisJCWVjaG8gdXBkYXRlID4+ZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGUgZmlsZTIgaW4gYnJhbmNoMSIgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS8uLi4gLy9kZXBvdC9icmFuY2gzLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgIkludGVncmF0ZSBicmFuY2gzIGZyb20gYnJhbmNoMSIKKwkpCisnCisKKyMgQ29uZmlndXJlIGJyYW5jaGVzIHRocm91Z2ggZ2l0LWNvbmZpZyBhbmQgY2xvbmUgdGhlbS4KKyMgQWxsIGZpbGVzIGFyZSB0ZXN0ZWQgdG8gbWFrZSBzdXJlIGJyYW5jaGVzIHdlcmUgY2xvbmVkIGNvcnJlY3RseS4KKyMgRmluYWxseSwgbWFrZSBhbiB1cGRhdGUgdG8gYnJhbmNoMSBvbiBQNCBzaWRlIHRvIGNoZWNrIGlmIGl0IGlzIGltcG9ydGVkCisjIGNvcnJlY3RseSBieSBnaXQgcDQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgY2xvbmUgc2ltcGxlIGJyYW5jaGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMyAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQl0ZXN0IC1mIGZpbGUxICYmCisJCXRlc3QgLWYgZmlsZTIgJiYKKwkJdGVzdCAtZiBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDIgJiYKKwkJdGVzdCAtZiBmaWxlMSAmJgorCQl0ZXN0IC1mIGZpbGUyICYmCisJCXRlc3QgISAtZiBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMyAmJgorCQl0ZXN0IC1mIGZpbGUxICYmCisJCXRlc3QgLWYgZmlsZTIgJiYKKwkJdGVzdCAtZiBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQljZCAiJGNsaSIgJiYKKwkJY2QgYnJhbmNoMSAmJgorCQlwNCBlZGl0IGZpbGUyICYmCisJCWVjaG8gZmlsZTJfID4+ZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGUgZmlsZTIgaW4gYnJhbmNoMSIgJiYKKwkJY2QgIiRnaXQiICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQlnaXQgcDQgcmViYXNlICYmCisJCWdyZXAgZmlsZTJfIGZpbGUyCisJKQorJworCisjIENyZWF0ZSBhIGNvbXBsZXggYnJhbmNoIHN0cnVjdHVyZSBpbiBQNCBkZXBvdCB0byBjaGVjayBpZiB0aGV5IGFyZSBjb3JyZWN0bHkKKyMgY2xvbmVkLiBUaGUgYnJhbmNoZXMgYXJlIGNyZWF0ZWQgZnJvbSBvbGRlciBjaGFuZ2VsaXN0cyB0byBjaGVjayBpZiBnaXQgcDQgaXMKKyMgYWJsZSB0byBjb3JyZWN0bHkgZGV0ZWN0IHRoZW0uCisjIFRoZSBmaW5hbCBleHBlY3RlZCBzdHJ1Y3R1cmUgaXM6CisjIGBicmFuY2gxCisjIHwgYC0gZmlsZTEKKyMgfCBgLSBmaWxlMiAodXBkYXRlZCkKKyMgfCBgLSBmaWxlMworIyBgYnJhbmNoMgorIyB8IGAtIGZpbGUxCisjIHwgYC0gZmlsZTIKKyMgYGJyYW5jaDMKKyMgfCBgLSBmaWxlMQorIyB8IGAtIGZpbGUyICh1cGRhdGVkKQorIyB8IGAtIGZpbGUzCisjIGBicmFuY2g0CisjIHwgYC0gZmlsZTEKKyMgfCBgLSBmaWxlMgorIyBgYnJhbmNoNQorIyAgIGAtIGZpbGUxCisjICAgYC0gZmlsZTIKKyMgICBgLSBmaWxlMwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IGFkZCBjb21wbGV4IGJyYW5jaGVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2hhbmdlbGlzdD0kKHA0IGNoYW5nZXMgLW0xIC8vZGVwb3QvLi4uIHwgY3V0IC1kIiAiIC1mMikgJiYKKwkJY2hhbmdlbGlzdD0kKCgkY2hhbmdlbGlzdCAtIDUpKSAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxLy4uLkAkY2hhbmdlbGlzdCAvL2RlcG90L2JyYW5jaDQvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiSW50ZWdyYXRlIGJyYW5jaDQgZnJvbSBicmFuY2gxQCR7Y2hhbmdlbGlzdH0iICYmCisJCWNoYW5nZWxpc3Q9JCgoJGNoYW5nZWxpc3QgKyAyKSkgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS8uLi5AJGNoYW5nZWxpc3QgLy9kZXBvdC9icmFuY2g1Ly4uLiAmJgorCQlwNCBzdWJtaXQgLWQgIkludGVncmF0ZSBicmFuY2g1IGZyb20gYnJhbmNoMUAke2NoYW5nZWxpc3R9IgorCSkKKycKKworIyBDb25maWd1cmUgYnJhbmNoZXMgdGhyb3VnaCBnaXQtY29uZmlnIGFuZCBjbG9uZSB0aGVtLiBnaXQgcDQgd2lsbCBvbmx5IGJlIGFibGUKKyMgdG8gY2xvbmUgdGhlIG9yaWdpbmFsIHN0cnVjdHVyZSBpZiBpdCBpcyBhYmxlIHRvIGRldGVjdCB0aGUgb3JpZ2luIGNoYW5nZWxpc3QKKyMgb2YgZWFjaCBicmFuY2guCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgY2xvbmUgY29tcGxleCBicmFuY2hlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDMgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDQgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvZ2l0LXA0LXRtcAorCSkKKycKKworIyBNb3ZlIGJyYW5jaDMvZmlsZTMgdG8gYnJhbmNoNC9maWxlMyBpbiBhIHNpbmdsZSBjaGFuZ2VsaXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgc3VibWl0IHRvIHR3byBicmFuY2hlcyBpbiBhIHNpbmdsZSBjaGFuZ2VsaXN0JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMy9maWxlMyAvL2RlcG90L2JyYW5jaDQvZmlsZTMgJiYKKwkJcDQgZGVsZXRlIC8vZGVwb3QvYnJhbmNoMy9maWxlMyAmJgorCQlwNCBzdWJtaXQgLWQgIk1vdmUgYnJhbmNoMy9maWxlMyB0byBicmFuY2g0L2ZpbGUzIgorCSkKKycKKworIyBDb25maXJtIHRoYXQgY2hhbmdlcyB0byB0d28gYnJhbmNoZXMgZG9uZSBpbiBhIHNpbmdsZSBjaGFuZ2VsaXN0CisjIGFyZSBjb3JyZWN0bHkgaW1wb3J0ZWQgYnkgZ2l0IHA0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgc3luYyBjaGFuZ2VzIHRvIHR3byBicmFuY2hlcyBpbiB0aGUgc2FtZSBjaGFuZ2VsaXN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMyAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoNCAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoNSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g1ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9naXQtcDQtdG1wCisJKQorJworCisjIENyZWF0ZSBhIGJyYW5jaCBieSBpbnRlZ3JhdGluZyBhIHNpbmdsZSBmaWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgZmlsZSBzdWJzZXQgYnJhbmNoJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS9maWxlMSAvL2RlcG90L2JyYW5jaDYvZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJJbnRlZ3JhdGUgZmlsZTEgYWxvbmUgZnJvbSBicmFuY2gxIHRvIGJyYW5jaDYiCisJKQorJworCisjIENoZWNrIGlmIGdpdCBwNCBjcmVhdGVzIGEgbmV3IGJyYW5jaCBjb250YWluaW5nIGEgc2luZ2xlIGZpbGUsCisjIGluc3RlYWQgb2Yga2VlcGluZyB0aGUgb2xkIGZpbGVzIGZyb20gdGhlIG9yaWdpbmFsIGJyYW5jaAordGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0IHA0IGNsb25lIGZpbGUgc3Vic2V0IGJyYW5jaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDMgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDQgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDUgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDYgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMworCSkKKycKKworIyBGcm9tIGEgcmVwb3J0IGluIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4OTM2ODgKKyMgd2hlcmUgLS11c2UtY2xpZW50LXNwZWMgY2F1c2VkIGJyYW5jaCBwcmVmaXhlcyBub3QgdG8gYmUgcmVtb3ZlZDsKKyMgZXZlcnkgZmlsZSBpbiBnaXQgYXBwZWFyZWQgaW50byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgYnJhbmNoIG5hbWUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UtY2xpZW50LXNwZWMgZGV0ZWN0LWJyYW5jaGVzIHNldHVwJyAnCisJcm0gLXJmICIkY2xpIiAmJgorCW1rZGlyICIkY2xpIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCWNsaWVudF92aWV3ICIvL2RlcG90L3VzZWNzLy4uLiAvL2NsaWVudC8uLi4iICYmCisJCW1rZGlyIGIxICYmCisJCWVjaG8gYjEvYjEtZmlsZTEgPmIxL2IxLWZpbGUxICYmCisJCXA0IGFkZCBiMS9iMS1maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImIxL2IxLWZpbGUxIiAmJgorCisJCXA0IGludGVncmF0ZSAvL2RlcG90L3VzZWNzL2IxLy4uLiAvL2RlcG90L3VzZWNzL2IyLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgImIxIC0+IGIyIiAmJgorCQlwNCBicmFuY2ggLWkgPDwtRU9GICYmCisJCUJyYW5jaDogYjIKKwkJVmlldzogLy9kZXBvdC91c2Vjcy9iMS8uLi4gLy9kZXBvdC91c2Vjcy9iMi8uLi4KKwkJRU9GCisKKwkJZWNobyBiMi9iMi1maWxlMiA+YjIvYjItZmlsZTIgJiYKKwkJcDQgYWRkIGIyL2IyLWZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAiYjIvYjItZmlsZTIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UtY2xpZW50LXNwZWMgZGV0ZWN0LWJyYW5jaGVzIGZpbGVzIGluIHRvcC1sZXZlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1kZXRlY3QtYnJhbmNoZXMgLS11c2UtY2xpZW50LXNwZWMgLy9kZXBvdC91c2Vjc0BhbGwgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBwNC91c2Vjcy9iMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiMS1maWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMi1maWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMiAmJgorCisJCWdpdCBjaGVja291dCAtYiBiMiBwNC91c2Vjcy9iMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiMS1maWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiMi1maWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlLWNsaWVudC1zcGVjIGRldGVjdC1icmFuY2hlcyBza2lwcyBicmFuY2hlcyBzZXR1cCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvdXNlY3MvYjEvLi4uIC8vZGVwb3QvdXNlY3MvYjMvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiYjEgLT4gYjMiICYmCisJCXA0IGJyYW5jaCAtaSA8PC1FT0YgJiYKKwkJQnJhbmNoOiBiMworCQlWaWV3OiAvL2RlcG90L3VzZWNzL2IxLy4uLiAvL2RlcG90L3VzZWNzL2IzLy4uLgorCQlFT0YKKworCQllY2hvIGIzL2IzLWZpbGUzID5iMy9iMy1maWxlMyAmJgorCQlwNCBhZGQgYjMvYjMtZmlsZTMgJiYKKwkJcDQgc3VibWl0IC1kICJiMy9iMy1maWxlMyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZS1jbGllbnQtc3BlYyBkZXRlY3QtYnJhbmNoZXMgc2tpcHMgYnJhbmNoZXMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC91c2Vjcy8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiLS8vZGVwb3QvdXNlY3MvYjMvLi4uIC8vY2xpZW50L2IzLy4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tZGV0ZWN0LWJyYW5jaGVzIC0tdXNlLWNsaWVudC1zcGVjIC8vZGVwb3QvdXNlY3NAYWxsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3A0L3VzZWNzL2IzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwMi1naXQtcDQtZmlsZXR5cGUuc2ggYi90L3Q5ODAyLWdpdC1wNC1maWxldHlwZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTkyNGRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwMi1naXQtcDQtZmlsZXR5cGUuc2gKQEAgLTAsMCArMSwxMzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgZmlsZXR5cGUgdGVzdHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1dGYtMTYgZmlsZSBjcmVhdGUnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCSMgcDQgc2F2ZXMgdGhpcyB2ZXJiYXRpbQorCQlwcmludGYgInRocmVlXG5saW5lXG50ZXh0XG4iID5mLWFzY2lpICYmCisJCXA0IGFkZCAtdCB0ZXh0IGYtYXNjaWkgJiYKKworCQkjIHA0IGFkZHMgXDM3N1wzNzYgaGVhZGVyCisJCWNwIGYtYXNjaWkgZi1hc2NpaS1hcy11dGYxNiAmJgorCQlwNCBhZGQgLXQgdXRmMTYgZi1hc2NpaS1hcy11dGYxNiAmJgorCisJCSMgcDQgc2F2ZXMgdGhpcyBleGFjdGx5IGFzIGljb252IHByb2R1Y2VkIGl0CisJCXByaW50ZiAidGhyZWVcbmxpbmVcbnRleHRcbiIgfCBpY29udiAtZiBhc2NpaSAtdCB1dGYtMTYgPmYtdXRmMTYgJiYKKwkJcDQgYWRkIC10IHV0ZjE2IGYtdXRmMTYgJiYKKworCQkjIHRoaXMgYWxzbyBpcyB1bmNoYW5nZWQKKwkJY3AgZi11dGYxNiBmLXV0ZjE2LWFzLXRleHQgJiYKKwkJcDQgYWRkIC10IHRleHQgZi11dGYxNi1hcy10ZXh0ICYmCisKKwkJcDQgc3VibWl0IC1kICJmIGZpbGVzIiAmJgorCisJCSMgZm9yY2UgdXBkYXRlIG9mIGNsaWVudCBmaWxlcworCQlwNCBzeW5jIC1mCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1dGYtMTYgZmlsZSB0ZXN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCisJCXRlc3RfY21wICIkY2xpL2YtYXNjaWkiIGYtYXNjaWkgJiYKKwkJdGVzdF9jbXAgIiRjbGkvZi1hc2NpaS1hcy11dGYxNiIgZi1hc2NpaS1hcy11dGYxNiAmJgorCQl0ZXN0X2NtcCAiJGNsaS9mLXV0ZjE2IiBmLXV0ZjE2ICYmCisJCXRlc3RfY21wICIkY2xpL2YtdXRmMTYtYXMtdGV4dCIgZi11dGYxNi1hcy10ZXh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXl3b3JkIGZpbGUgY3JlYXRlJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKworCQlwcmludGYgImlkXG5cJElkXCRcblwkQXV0aG9yXCRcbnRleHRcbiIgPmstdGV4dC1rICYmCisJCXA0IGFkZCAtdCB0ZXh0K2sgay10ZXh0LWsgJiYKKworCQljcCBrLXRleHQtayBrLXRleHQta28gJiYKKwkJcDQgYWRkIC10IHRleHQra28gay10ZXh0LWtvICYmCisKKwkJY2F0IGstdGV4dC1rIHwgaWNvbnYgLWYgYXNjaWkgLXQgdXRmLTE2ID5rLXV0ZjE2LWsgJiYKKwkJcDQgYWRkIC10IHV0ZjE2K2sgay11dGYxNi1rICYmCisKKwkJY3Agay11dGYxNi1rIGstdXRmMTYta28gJiYKKwkJcDQgYWRkIC10IHV0ZjE2K2tvIGstdXRmMTYta28gJiYKKworCQlwNCBzdWJtaXQgLWQgImsgZmlsZXMiICYmCisJCXA0IHN5bmMgLWYKKwkpCisnCisKK2J1aWxkX3NtdXNoKCkgeworCWNhdCA+a19zbXVzaC5weSA8PC1cRU9GICYmCisJaW1wb3J0IHJlLCBzeXMKKwlzeXMuc3Rkb3V0LndyaXRlKHJlLnN1YihyJyg/aSlcJChJZHxIZWFkZXJ8QXV0aG9yfERhdGV8RGF0ZVRpbWV8Q2hhbmdlfEZpbGV8UmV2aXNpb24pOlteJF0qXCQnLCByJyRcMSQnLCBzeXMuc3RkaW4ucmVhZCgpKSkKKwlFT0YKKwljYXQgPmtvX3NtdXNoLnB5IDw8LVxFT0YKKwlpbXBvcnQgcmUsIHN5cworCXN5cy5zdGRvdXQud3JpdGUocmUuc3ViKHInKD9pKVwkKElkfEhlYWRlcik6W14kXSpcJCcsIHInJFwxJCcsIHN5cy5zdGRpbi5yZWFkKCkpKQorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXl3b3JkIGZpbGUgdGVzdCcgJworCWJ1aWxkX3NtdXNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mIGtfc211c2gucHkga29fc211c2gucHkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisKKwkJIyB0ZXh0LCBlbnN1cmUgdW5leHBhbmRlZAorCQkiJFBZVEhPTl9QQVRIIiAiJFRSQVNIX0RJUkVDVE9SWS9rX3NtdXNoLnB5IiA8IiRjbGkvay10ZXh0LWsiID5jbGktay10ZXh0LWstc211c2ggJiYKKwkJdGVzdF9jbXAgY2xpLWstdGV4dC1rLXNtdXNoIGstdGV4dC1rICYmCisJCSIkUFlUSE9OX1BBVEgiICIkVFJBU0hfRElSRUNUT1JZL2tvX3NtdXNoLnB5IiA8IiRjbGkvay10ZXh0LWtvIiA+Y2xpLWstdGV4dC1rby1zbXVzaCAmJgorCQl0ZXN0X2NtcCBjbGktay10ZXh0LWtvLXNtdXNoIGstdGV4dC1rbyAmJgorCisJCSMgdXRmMTYsIGV2ZW4gdGhvdWdoIHA0IGV4cGFuZHMga2V5d29yZHMsIGdpdCBwNCBkb2VzIG5vdAorCQkjIHRyeSB0byB1bmRvIHRoYXQKKwkJdGVzdF9jbXAgIiRjbGkvay11dGYxNi1rIiBrLXV0ZjE2LWsgJiYKKwkJdGVzdF9jbXAgIiRjbGkvay11dGYxNi1rbyIgay11dGYxNi1rbworCSkKKycKKworYnVpbGRfZ2VuZG91YmxlKCkgeworCWNhdCA+Z2VuZG91YmxlLnB5IDw8LVxFT0YKKwlpbXBvcnQgc3lzCisJaW1wb3J0IHN0cnVjdAorCWltcG9ydCBhcnJheQorCisJcyA9IGFycmF5LmFycmF5KCJjIiwgJ1wwJyAqIDI2KQorCXN0cnVjdC5wYWNrX2ludG8oIj5MIiwgcywgIDAsIDB4MDAwNTE2MDcpICAjIEFwcGxlRG91YmxlCisJc3RydWN0LnBhY2tfaW50bygiPkwiLCBzLCAgNCwgMHgwMDAyMDAwMCkgICMgdmVyc2lvbiAyCisJcy50b2ZpbGUoc3lzLnN0ZG91dCkKKwlFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlIGFwcGxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mIGdlbmRvdWJsZS5weSAmJgorCWJ1aWxkX2dlbmRvdWJsZSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3QtZ2VucmFuZG9tIGFwcGxlIDEwMjQgPmRvdWJsZS5wbmcgJiYKKwkJIiRQWVRIT05fUEFUSCIgIiRUUkFTSF9ESVJFQ1RPUlkvZ2VuZG91YmxlLnB5IiA+JWRvdWJsZS5wbmcgJiYKKwkJcDQgYWRkIC10IGFwcGxlIGRvdWJsZS5wbmcgJiYKKwkJcDQgc3VibWl0IC1kIGFwcGxlZG91YmxlCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdCAhIC1mIGRvdWJsZS5wbmcKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODAzLWdpdC1wNC1zaGVsbC1tZXRhY2hhcnMuc2ggYi90L3Q5ODAzLWdpdC1wNC1zaGVsbC1tZXRhY2hhcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmJhY2ZmMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MDMtZ2l0LXA0LXNoZWxsLW1ldGFjaGFycy5zaApAQCAtMCwwICsxLDExMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCB0cmFuc3BhcmVuY3kgdG8gc2hlbGwgbWV0YWNoYXJzIGluIGZpbGVuYW1lcycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlMSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoZWxsIG1ldGFjaGFycyBpbiBmaWxlbmFtZXMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXRDaGVjayB0cnVlICYmCisJCWVjaG8gZjEgPmZvb1wkYmFyICYmCisJCWdpdCBhZGQgZm9vXCRiYXIgJiYKKwkJZWNobyBmMiA+ImZpbGUgd2l0aCBzcGFjZXMiICYmCisJCWdpdCBhZGQgImZpbGUgd2l0aCBzcGFjZXMiICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBmaWxlcyIgJiYKKwkJUDRFRElUT1I9dG91Y2ggZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jIC4uLiAmJgorCQl0ZXN0IC1lICJmaWxlIHdpdGggc3BhY2VzIiAmJgorCQl0ZXN0IC1lICJmb29cJGJhciIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW5nIHdpdGggc2hlbGwgbWV0YWNoYXJzJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2sgdHJ1ZSAmJgorCQlnaXQgcm0gZm9vXCRiYXIgJiYKKwkJZ2l0IHJtIGZpbGVcIHdpdGhcIHNwYWNlcyAmJgorCQlnaXQgY29tbWl0IC1tICJyZW1vdmUgZmlsZXMiICYmCisJCVA0RURJVE9SPXRvdWNoIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAuLi4gJiYKKwkJdGVzdCAhIC1lICJmaWxlIHdpdGggc3BhY2VzIiAmJgorCQl0ZXN0ICEgLWUgZm9vXCRiYXIKKwkpCisnCisKKyMgQ3JlYXRlIGEgYnJhbmNoIHdpdGggYSBzaGVsbCBtZXRhY2hhciBpbiBpdHMgbmFtZQorIworIyAxLiAvL2RlcG90L21haW4KKyMgMi4gLy9kZXBvdC9icmFuY2gkMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggd2l0aCBzaGVsbCBjaGFyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCW1rZGlyIC1wIG1haW4gJiYKKworCQllY2hvIGYxID5tYWluL2YxICYmCisJCXA0IGFkZCBtYWluL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMSIgJiYKKworCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9tYWluLy4uLiAvL2RlcG90L2JyYW5jaFwkMy8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJpbnRlZ3JhdGUgbWFpbiB0byBicmFuY2hcJDMiICYmCisKKwkJZWNobyBmMSA+YnJhbmNoXCQzL3NoZWxsX2NoYXJfYnJhbmNoX2ZpbGUgJiYKKwkJcDQgYWRkIGJyYW5jaFwkMy9zaGVsbF9jaGFyX2JyYW5jaF9maWxlICYmCisJCXA0IHN1Ym1pdCAtZCAiYnJhbmNoXCQzL3NoZWxsX2NoYXJfYnJhbmNoX2ZpbGUiICYmCisKKwkJcDQgYnJhbmNoIC1pIDw8LUVPRiAmJgorCQlCcmFuY2g6IGJyYW5jaFwkMworCQlWaWV3OiAvL2RlcG90L21haW4vLi4uIC8vZGVwb3QvYnJhbmNoXCQzLy4uLgorCQlFT0YKKworCQlwNCBlZGl0IG1haW4vZjEgJiYKKwkJZWNobyAiYSBjaGFuZ2UiID4+IG1haW4vZjEgJiYKKwkJcDQgc3VibWl0IC1kICJhIGNoYW5nZSIgbWFpbi9mMSAmJgorCisJCXA0IGludGVncmF0ZSAtYiBicmFuY2hcJDMgJiYKKwkJcDQgcmVzb2x2ZSAtYW0gYnJhbmNoXCQzLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgImludGVncmF0ZSBtYWluIHRvIGJyYW5jaFwkMyIgJiYKKworCQljZCAiJGdpdCIgJiYKKworCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IG1haW46YnJhbmNoXCQzICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCQlnaXQgbG9nIC0tYWxsIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLXN0YXQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2hcJDMgJiYKKwkJdGVzdCAtZiBzaGVsbF9jaGFyX2JyYW5jaF9maWxlICYmCisJCXRlc3QgLWYgZjEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODA0LWdpdC1wNC1sYWJlbC5zaCBiL3QvdDk4MDQtZ2l0LXA0LWxhYmVsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzMGY4MGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODA0LWdpdC1wNC1sYWJlbC5zaApAQCAtMCwwICsxLDExNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBsYWJlbCB0ZXN0cycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKKyMgQmFzaWMgcDQgbGFiZWwgdGVzdHMuCisjCisjIE5vdGU6IGNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBsYWJlbCBwZXIgY29tbWl0IC0gb3RoZXJzCisjIGFyZSBzaWxlbnRseSBkaXNjYXJkZWQuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBwNCBsYWJlbHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBtYWluICYmCisKKwkJZWNobyBmMSA+bWFpbi9mMSAmJgorCQlwNCBhZGQgbWFpbi9mMSAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZjEiICYmCisKKwkJZWNobyBmMiA+bWFpbi9mMiAmJgorCQlwNCBhZGQgbWFpbi9mMiAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZjIiICYmCisKKwkJZWNobyBmMyA+bWFpbi9maWxlX3dpdGhfXCRtZXRhY2hhciAmJgorCQlwNCBhZGQgbWFpbi9maWxlX3dpdGhfXCRtZXRhY2hhciAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGUgd2l0aCBtZXRhY2hhciIgJiYKKworCQlwNCB0YWcgLWwgdGFnX2YxX29ubHkgbWFpbi9mMSAmJgorCQlwNCB0YWcgLWwgdGFnX3dpdGhcJF9zaGVsbF9jaGFyIG1haW4vLi4uICYmCisKKwkJZWNobyBmNCA+bWFpbi9mNCAmJgorCQlwNCBhZGQgbWFpbi9mNCAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZjQiICYmCisKKwkJcDQgbGFiZWwgLWkgPDwtRU9GICYmCisJCUxhYmVsOiBsb25nX2xhYmVsCisJCURlc2NyaXB0aW9uOgorCQkgICBBIExhYmVsIGZpcnN0IGxpbmUKKwkJICAgQSBMYWJlbCBzZWNvbmQgbGluZQorCQlWaWV3OgkvL2RlcG90Ly4uLgorCQlFT0YKKworCQlwNCB0YWcgLWwgbG9uZ19sYWJlbCAuLi4gJiYKKworCQlwNCBsYWJlbHMgLi4uICYmCisKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1kZXRlY3QtbGFiZWxzIC8vZGVwb3RAYWxsICYmCisJCWNkICIkZ2l0IiAmJgorCisJCWdpdCB0YWcgJiYKKwkJZ2l0IHRhZyA+dGFnbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIHRhZ2xpc3QgJiYKKworCQljZCBtYWluICYmCisJCWdpdCBjaGVja291dCB0YWdfdGFnX2YxX29ubHkgJiYKKwkJISB0ZXN0IC1mIGYyICYmCisJCWdpdCBjaGVja291dCB0YWdfdGFnX3dpdGhcJF9zaGVsbF9jaGFyICYmCisJCXRlc3QgLWYgZjEgJiYgdGVzdCAtZiBmMiAmJiB0ZXN0IC1mIGZpbGVfd2l0aF9cJG1ldGFjaGFyICYmCisKKwkJZ2l0IHNob3cgdGFnX2xvbmdfbGFiZWwgfCBncmVwIC1xICJBIExhYmVsIHNlY29uZCBsaW5lIgorCSkKKycKKworIyBUZXN0IHNvbWUgbGFiZWwgY29ybmVyIGNhc2VzOgorIworIyAtIHR3byB0YWdzIG9uIHRoZSBzYW1lIGZpbGU7IGJvdGggc2hvdWxkIGJlIGF2YWlsYWJsZQorIyAtIGEgdGFnIHRoYXQgaXMgb25seSBvbiBvbmUgZmlsZTsgdGhpcyBraW5kIG9mIHRhZworIyAgIGNhbm5vdCBiZSBpbXBvcnRlZCAoYXQgbGVhc3Qgbm90IGVhc2lseSkuCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3R3byBsYWJlbHMgb24gdGhlIHNhbWUgY2hhbmdlbGlzdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIC1wIG1haW4gJiYKKworCQlwNCBlZGl0IG1haW4vZjEgbWFpbi9mMiAmJgorCQllY2hvICJoZWxsbyB3b3JsZCIgPm1haW4vZjEgJiYKKwkJZWNobyAibm90IGluIHRoZSB0YWciID5tYWluL2YyICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mWzEyXTogdGVzdGluZyB0d28gbGFiZWxzIiAmJgorCisJCXA0IHRhZyAtbCB0YWdfZjFfMSBtYWluLy4uLiAmJgorCQlwNCB0YWcgLWwgdGFnX2YxXzIgbWFpbi8uLi4gJiYKKworCQlwNCBsYWJlbHMgLi4uICYmCisKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1kZXRlY3QtbGFiZWxzIC8vZGVwb3RAYWxsICYmCisJCWNkICIkZ2l0IiAmJgorCisJCWdpdCB0YWcgfCBncmVwIHRhZ19mMSAmJgorCQlnaXQgdGFnIHwgZ3JlcCAtcSB0YWdfZjFfMSAmJgorCQlnaXQgdGFnIHwgZ3JlcCAtcSB0YWdfZjFfMiAmJgorCisJCWNkIG1haW4gJiYKKworCQlnaXQgY2hlY2tvdXQgdGFnX3RhZ19mMV8xICYmCisJCWxzICYmCisJCXRlc3QgLWYgZjEgJiYKKworCQlnaXQgY2hlY2tvdXQgdGFnX3RhZ19mMV8yICYmCisJCWxzICYmCisJCXRlc3QgLWYgZjEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODA1LWdpdC1wNC1za2lwLXN1Ym1pdC1lZGl0LnNoIGIvdC90OTgwNS1naXQtcDQtc2tpcC1zdWJtaXQtZWRpdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjJjYzc5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwNS1naXQtcDQtc2tpcC1zdWJtaXQtZWRpdC5zaApAQCAtMCwwICsxLDEwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBza2lwU3VibWl0RWRpdCBjb25maWcgdmFyaWFibGVzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIgorCSkKKycKKworIyB0aGlzIHdvcmtzIGJlY2F1c2UgRURJVE9SIGlzIHNldCB0byA6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb25maWcsIHVuZWRpdGVkLCBzYXkgeWVzJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZSA+PmZpbGUxICYmCisJCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSAyIiAmJgorCQllY2hvIHkgfCBnaXQgcDQgc3VibWl0ICYmCisJCXA0IGNoYW5nZXMgLy9kZXBvdC8uLi4gPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNvbmZpZywgdW5lZGl0ZWQsIHNheSBubycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGxpbmUgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgMyAobm90IHJlYWxseSkiICYmCisJCXByaW50ZiAiYmFkIHJlc3BvbnNlXG5uXG4iIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgY2hhbmdlcyAvL2RlcG90Ly4uLiA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcFN1Ym1pdEVkaXQnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIHdpbGwgZmFpbCBpZiBlZGl0b3IgaXMgZXZlbiBpbnZva2VkCisJCWdpdCBjb25maWcgY29yZS5lZGl0b3IgL2Jpbi9mYWxzZSAmJgorCQllY2hvIGxpbmUgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgMyIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBjaGFuZ2VzIC8vZGVwb3QvLi4uID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIHdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwU3VibWl0RWRpdENoZWNrJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2sgdHJ1ZSAmJgorCQllY2hvIGxpbmUgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgNCIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBjaGFuZ2VzIC8vZGVwb3QvLi4uID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IHdjCisJKQorJworCisjIGNoZWNrIHRoZSBub3JtYWwgY2FzZSwgd2hlcmUgdGhlIHRlbXBsYXRlIHJlYWxseSBpcyBlZGl0ZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNvbmZpZywgZWRpdGVkJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gZWQuc2giICYmCisJY2F0ID5lZC5zaCA8PC1FT0YgJiYKKwkJIyEkU0hFTExfUEFUSAorCQlzbGVlcCAxCisJCXRvdWNoICJcJDEiCisJCWV4aXQgMAorCUVPRgorCWNobW9kIDc1NSBlZC5zaCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZSA+PmZpbGUxICYmCisJCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSA1IiAmJgorCQlQNEVESVRPUj0iIiBFRElUT1I9IlwiJFRSQVNIX0RJUkVDVE9SWS9lZC5zaFwiIiBnaXQgcDQgc3VibWl0ICYmCisJCXA0IGNoYW5nZXMgLy9kZXBvdC8uLi4gPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODA2LWdpdC1wNC1vcHRpb25zLnNoIGIvdC90OTgwNi1naXQtcDQtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYTQwY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwNi1naXQtcDQtb3B0aW9ucy5zaApAQCAtMCwwICsxLDE2NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBvcHRpb25zJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIiAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlwNCBhZGQgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgMiIgJiYKKwkJZWNobyBmaWxlMyA+ZmlsZTMgJiYKKwkJcDQgYWRkIGZpbGUzICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDMiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBubyAtLWdpdC1kaXInICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLS1naXQtZGlyPXh4IC8vZGVwb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1icmFuY2gnICcKKwlnaXQgcDQgY2xvbmUgLS1icmFuY2g9cmVmcy9yZW1vdGVzL3A0L3NiIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBscy1maWxlcyA+ZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBmaWxlcyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvcmVtb3Rlcy9wNC9zYgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1jaGFuZ2VzZmlsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gY2YiICYmCisJcHJpbnRmICIxXG4zXG4iID5jZiAmJgorCWdpdCBwNCBjbG9uZSAtLWNoYW5nZXNmaWxlPSIkVFJBU0hfRElSRUNUT1JZL2NmIiAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSBwNC9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tY2hhbmdlc2ZpbGUsIEBhbGwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIGNmIiAmJgorCXByaW50ZiAiMVxuM1xuIiA+Y2YgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLS1jaGFuZ2VzZmlsZT0iJFRSQVNIX0RJUkVDVE9SWS9jZiIgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbAorJworCisjIGltcG9ydHMgYm90aCBtYXN0ZXIgYW5kIHA0L21hc3RlciBpbiByZWZzL2hlYWRzCisjIHJlcXVpcmVzIC0taW1wb3J0LWxvY2FsIG9uIHN5bmMgdG8gZmluZCBwNCByZWZzL2hlYWRzCisjIGRvZXMgbm90IHVwZGF0ZSBtYXN0ZXIgb24gc3luYywganVzdCBwNC9tYXN0ZXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lL3N5bmMgLS1pbXBvcnQtbG9jYWwnICcKKwlnaXQgcDQgY2xvbmUgLS1pbXBvcnQtbG9jYWwgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QDEsMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHJlZnMvaGVhZHMvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHJlZnMvaGVhZHMvcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBzeW5jICYmCisKKwkJZ2l0IHA0IHN5bmMgLS1pbXBvcnQtbG9jYWwgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcmVmcy9oZWFkcy9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcmVmcy9oZWFkcy9wNC9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tbWF4LWNoYW5nZXMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLW1heC1jaGFuZ2VzIDIgLy9kZXBvdEBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSByZWZzL2hlYWRzL21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1rZWVwLXBhdGgnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBzdWIvZGlyICYmCisJCWVjaG8gZjQgPnN1Yi9kaXIvZjQgJiYKKwkJcDQgYWRkIHN1Yi9kaXIvZjQgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgNCIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1rZWVwLXBhdGggLy9kZXBvdC9zdWIvZGlyQGFsbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGY0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHN1Yi9kaXIvZjQKKwkpICYmCisJY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L3N1Yi9kaXJAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZjQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3ViL2Rpci9mNAorCSkKKycKKworIyBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyBtdXN0IHN0aWxsIHNwZWNpZnkgYSBkZXBvdCBwYXRoCisjIGlmIGdpdmVuLCBpdCBzaG91bGQgcmVhcnJhbmdlIGZpbGVzIGFjY29yZGluZyB0byBjbGllbnQgc3BlYworIyB3aGVuIGl0IGhhcyB2aWV3IGxpbmVzIHRoYXQgbWF0Y2ggdGhlIGRlcG90IHBhdGgKKyMgWFhYOiBzaG91bGQgY2xvbmUvc3luYyBqdXN0IHVzZSB0aGUgY2xpZW50IHNwZWMgZXhhY3RseSwgcmF0aGVyCisjIHRoYW4gbmVlZGluZyBkZXBvdCBwYXRocz8KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tdXNlLWNsaWVudC1zcGVjJyAnCisJKAorCQkjIGJpZyB1c2FnZSBtZXNzYWdlCisJCWV4ZWMgPi9kZXYvbnVsbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLXVzZS1jbGllbnQtc3BlYworCSkgJiYKKwljbGkyPSQodGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAiJFRSQVNIX0RJUkVDVE9SWS9jbGkyIikgJiYKKwlta2RpciAtcCAiJGNsaTIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybWRpciBcIiRjbGkyXCIiICYmCisJKAorCQljZCAiJGNsaTIiICYmCisJCXA0IGNsaWVudCAtaSA8PC1FT0YKKwkJQ2xpZW50OiBjbGllbnQyCisJCURlc2NyaXB0aW9uOiBjbGllbnQyCisJCVJvb3Q6ICRjbGkyCisJCVZpZXc6IC8vZGVwb3Qvc3ViLy4uLiAvL2NsaWVudDIvYnVzLy4uLgorCQlFT0YKKwkpICYmCisJUDRDTElFTlQ9Y2xpZW50MiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0tdXNlLWNsaWVudC1zcGVjIC8vZGVwb3QvLi4uICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYnVzL2Rpci9mNCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMQorCSkgJiYKKwljbGVhbnVwX2dpdCAmJgorCisJIyBzYW1lIHRoaW5nIGFnYWluLCB0aGlzIHRpbWUgd2l0aCB2YXJpYWJsZSBpbnN0ZWFkIG9mIG9wdGlvbgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgcDQgc3luYyAvL2RlcG90Ly4uLiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIHA0L21hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBidXMvZGlyL2Y0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwNy1naXQtcDQtc3VibWl0LnNoIGIvdC90OTgwNy1naXQtcDQtc3VibWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhZTA0OGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODA3LWdpdC1wNC1zdWJtaXQuc2gKQEAgLTAsMCArMSw0MDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgc3VibWl0JworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IHdpdGggbm8gY2xpZW50IGRpcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlnaXQgYWRkIGZpbGUyICYmCisJCWdpdCBjb21taXQgLW0gImdpdCBjb21taXQgMiIgJiYKKwkJcm0gLXJmICIkY2xpIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIKKwkpCisnCisKKyMgbWFrZSB0d28gY29tbWl0cywgYnV0IHRlbGwgaXQgdG8gYXBwbHkgb25seSBmcm9tIEhFQUReCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgLS1vcmlnaW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jb21taXQgImZpbGUzIiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLW9yaWdpbj1IRUFEXgorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiZmlsZTMudCIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgImZpbGU0LnQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgLS1kcnktcnVuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0ICJkcnktcnVuMSIgJiYKKwkJdGVzdF9jb21taXQgImRyeS1ydW4yIiAmJgorCQlnaXQgcDQgc3VibWl0IC0tZHJ5LXJ1biA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIldvdWxkIGFwcGx5IiBvdXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgImRyeS1ydW4xLnQiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICJkcnktcnVuMi50IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IC0tZHJ5LXJ1biAtLWV4cG9ydC1sYWJlbHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkcnktcnVuMSA+ZHJ5LXJ1bjEgJiYKKwkJZ2l0IGFkZCBkcnktcnVuMSAmJgorCQlnaXQgY29tbWl0IC1tICJkcnktcnVuMSIgZHJ5LXJ1bjEgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCWVjaG8gZHJ5LXJ1bjIgPmRyeS1ydW4yICYmCisJCWdpdCBhZGQgZHJ5LXJ1bjIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZHJ5LXJ1bjIiIGRyeS1ydW4yICYmCisJCWdpdCB0YWcgLW0gImRyeS1ydW4tdGFnMSIgZHJ5LXJ1bi10YWcxIEhFQUReICYmCisJCWdpdCBwNCBzdWJtaXQgLS1kcnktcnVuIC0tZXhwb3J0LWxhYmVscyA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIldvdWxkIGNyZWF0ZSBwNCBsYWJlbCIgb3V0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlICJkcnktcnVuMSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgImRyeS1ydW4yIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IHdpdGggYWxsb3dTdWJtaXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jb21taXQgImZpbGU1IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmFsbG93U3VibWl0ICJub2JyYW5jaCIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN1Ym1pdCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hbGxvd1N1Ym1pdCAibm9icmFuY2gsbWFzdGVyIiAmJgorCQlnaXQgcDQgc3VibWl0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgd2l0aCBtYXN0ZXIgYnJhbmNoIG5hbWUgZnJvbSBhcmd2JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlNiIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3VibWl0IG5vYnJhbmNoICYmCisJCWdpdCBicmFuY2ggb3RoZXJicmFuY2ggJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTciICYmCisJCWdpdCBwNCBzdWJtaXQgb3RoZXJicmFuY2gKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgImZpbGU2LnQiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICJmaWxlNy50IgorCSkKKycKKworIworIyBCYXNpYyBzdWJtaXQgdGVzdHMsIHRoZSBmaXZlIGhhbmRsZWQgY2FzZXMKKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IG1vZGlmeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWVjaG8gbGluZSA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBmaWxlMSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgZmlsZTEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCBhZGQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQllY2hvIGZpbGUxMyA+ZmlsZTEzICYmCisJCWdpdCBhZGQgZmlsZTEzICYmCisJCWdpdCBjb21taXQgLW0gZmlsZTEzICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgZGVsZXRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHJtIGZpbGU0LnQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIGZpbGU0LnQiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTQudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IGNvcHknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXNIYXJkZXIgdHJ1ZSAmJgorCQljcCBmaWxlNS50IGZpbGU1LnRhICYmCisJCWdpdCBhZGQgZmlsZTUudGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29weSB0byBmaWxlNS50YSIgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlNS50YSAmJgorCQl0ZXN0ICEgLXcgZmlsZTUudGEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCByZW5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IG12IGZpbGU2LnQgZmlsZTYudGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIGZpbGU2LnQgdG8gZmlsZTYudGEiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTYudCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlNi50YSAmJgorCQl0ZXN0ICEgLXcgZmlsZTYudGEKKwkpCisnCisKKyMKKyMgQ29udmVydGluZyBnaXQgY29tbWl0IG1lc3NhZ2UgdG8gcDQgY2hhbmdlIGRlc2NyaXB0aW9uLCBpbmNsdWRpbmcKKyMgcGFyc2luZyBvdXQgdGhlIG9wdGlvbmFsIEpvYnM6IGxpbmUuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgb25lLWxpbmUgZGVzY3JpcHRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkZXNjMiA+ZGVzYzIgJiYKKwkJZ2l0IGFkZCBkZXNjMiAmJgorCQljYXQgPm1zZyA8PC1FT0YgJiYKKwkJT25lLWxpbmUgZGVzY3JpcHRpb24gbGluZSBmb3IgZGVzYzIuCisJCUVPRgorCQlnaXQgY29tbWl0IC1GIC0gPG1zZyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJY2hhbmdlPSQocDQgLUcgY2hhbmdlcyAtbSAxIC8vZGVwb3QvLi4uIHwgXAorCQkJIG1hcnNoYWxfZHVtcCBjaGFuZ2UpICYmCisJCSMgbWFyc2hhbF9kdW1wIGFsd2F5cyBhZGRzIGEgbmV3bGluZQorCQlwNCAtRyBkZXNjcmliZSAkY2hhbmdlIHwgbWFyc2hhbF9kdW1wIGRlc2MgfCBzZWQgXCRkID5wbXNnICYmCisJCXRlc3RfY21wIG1zZyBwbXNnCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmlwdGlvbiB3aXRoIG9kZCBmb3JtYXR0aW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gZGVzYzMgPmRlc2MzICYmCisJCWdpdCBhZGQgZGVzYzMgJiYKKwkJKAorCQkJcHJpbnRmICJzdWJqZWN0IGxpbmVcblxuXHRFeHRyYSB0YWJcbmxpbmUuXG5cbiIgJiYKKwkJCXByaW50ZiAiRGVzY3JpcHRpb246XG5cdEJvZ3VzIGRlc2NyaXB0aW9uIG1hcmtlclxuXG4iICYmCisJCQkjIGdpdCBjb21taXQgZWF0cyB0cmFpbGluZyBuZXdsaW5lczsgb25seSB1c2Ugb25lCisJCQlwcmludGYgIkZpbGVzOlxuXHRCb2d1cyBkZXNjcyBtYXJrZXJcbiIKKwkJKSA+bXNnICYmCisJCWdpdCBjb21taXQgLUYgLSA8bXNnICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQljaGFuZ2U9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBcCisJCQkgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwkJIyBtYXJzaGFsX2R1bXAgYWx3YXlzIGFkZHMgYSBuZXdsaW5lCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgfCBtYXJzaGFsX2R1bXAgZGVzYyB8IHNlZCBcJGQgPnBtc2cgJiYKKwkJdGVzdF9jbXAgbXNnIHBtc2cKKwkpCisnCisKK21ha2Vfam9iKCkgeworCW5hbWU9IiQxIiAmJgorCXRhYj0iJChwcmludGYgXFx0KSIgJiYKKwlwNCBqb2IgLW8gfCBcCisJc2VkIC1lICIvXkpvYjovcy8uKi9Kb2I6ICRuYW1lLyIgXAorCSAgICAtZSAiL15EZXNjcmlwdGlvbi97IG47IHMvLiovJHRhYiBqb2IgdGV4dC87IH0iIHwgXAorCXA0IGpvYiAtaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmlwdGlvbiB3aXRoIEpvYnMgc2VjdGlvbiBhdCBlbmQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkZXNjNCA+ZGVzYzQgJiYKKwkJZ2l0IGFkZCBkZXNjNCAmJgorCQllY2hvIDYwNjA4NDIgPmpvYm5hbWUgJiYKKwkJKAorCQkJcHJpbnRmICJzdWJqZWN0IGxpbmVcblxuXHRFeHRyYSB0YWJcbmxpbmUuXG5cbiIgJiYKKwkJCXByaW50ZiAiRmlsZXM6XG5cdEJvZ3VzIGZpbGVzIG1hcmtlclxuIiAmJgorCQkJcHJpbnRmICJKdW5rOiAzMTY0MTc1XG4iICYmCisJCQlwcmludGYgIkpvYnM6ICQoY2F0IGpvYm5hbWUpXG4iCisJCSkgPm1zZyAmJgorCQlnaXQgY29tbWl0IC1GIC0gPG1zZyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgYnVpbGQgYSBqb2IKKwkJbWFrZV9qb2IgJChjYXQgam9ibmFtZSkgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQljaGFuZ2U9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBcCisJCQkgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwkJIyBtYXJzaGFsX2R1bXAgYWx3YXlzIGFkZHMgYSBuZXdsaW5lCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgfCBtYXJzaGFsX2R1bXAgZGVzYyB8IHNlZCBcJGQgPnBtc2cgJiYKKwkJIyBtYWtlIHN1cmUgSm9icyBsaW5lIGFuZCBhbGwgZm9sbG93aW5nIGlzIGdvbmUKKwkJc2VkICIvXkpvYnM6LyxcJGQiIG1zZyA+am1zZyAmJgorCQl0ZXN0X2NtcCBqbXNnIHBtc2cgJiYKKwkJIyBtYWtlIHN1cmUgcDQga25vd3MgYWJvdXQgam9iCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgfCBtYXJzaGFsX2R1bXAgam9iMCA+am9iMCAmJgorCQl0ZXN0X2NtcCBqb2JuYW1lIGpvYjAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaXB0aW9uIHdpdGggSm9icyBhbmQgdmFsdWVzIG9uIHNlcGFyYXRlIGxpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gZGVzYzUgPmRlc2M1ICYmCisJCWdpdCBhZGQgZGVzYzUgJiYKKwkJZWNobyBQUk9KLTYwNjA4NDIgPmpvYm5hbWUxICYmCisJCWVjaG8gUFJPSi02MDYwODQ3ID5qb2JuYW1lMiAmJgorCQkoCisJCQlwcmludGYgInN1YmplY3QgbGluZVxuXG5cdEV4dHJhIHRhYlxubGluZS5cblxuIiAmJgorCQkJcHJpbnRmICJGaWxlczpcblx0Qm9ndXMgZmlsZXMgbWFya2VyXG4iICYmCisJCQlwcmludGYgIkp1bms6IDMxNjQxNzVcbiIgJiYKKwkJCXByaW50ZiAiSm9iczpcbiIgJiYKKwkJCXByaW50ZiAiXHQkKGNhdCBqb2JuYW1lMSlcbiIgJiYKKwkJCXByaW50ZiAiXHQkKGNhdCBqb2JuYW1lMilcbiIKKwkJKSA+bXNnICYmCisJCWdpdCBjb21taXQgLUYgLSA8bXNnICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyBidWlsZCB0d28gam9icworCQltYWtlX2pvYiAkKGNhdCBqb2JuYW1lMSkgJiYKKwkJbWFrZV9qb2IgJChjYXQgam9ibmFtZTIpICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJY2hhbmdlPSQocDQgLUcgY2hhbmdlcyAtbSAxIC8vZGVwb3QvLi4uIHwgXAorCQkJIG1hcnNoYWxfZHVtcCBjaGFuZ2UpICYmCisJCSMgbWFyc2hhbF9kdW1wIGFsd2F5cyBhZGRzIGEgbmV3bGluZQorCQlwNCAtRyBkZXNjcmliZSAkY2hhbmdlIHwgbWFyc2hhbF9kdW1wIGRlc2MgfCBzZWQgXCRkID5wbXNnICYmCisJCSMgbWFrZSBzdXJlIEpvYnMgbGluZSBhbmQgYWxsIGZvbGxvd2luZyBpcyBnb25lCisJCXNlZCAiL15Kb2JzOi8sXCRkIiBtc2cgPmptc2cgJiYKKwkJdGVzdF9jbXAgam1zZyBwbXNnICYmCisJCSMgbWFrZSBzdXJlIHA0IGtub3dzIGFib3V0IHRoZSB0d28gam9icworCQlwNCAtRyBkZXNjcmliZSAkY2hhbmdlID5jaGFuZ2UgJiYKKwkJKAorCQkJbWFyc2hhbF9kdW1wIGpvYjAgPGNoYW5nZSAmJgorCQkJbWFyc2hhbF9kdW1wIGpvYjEgPGNoYW5nZQorCQkpIHwgc29ydCA+am9icyAmJgorCQljYXQgam9ibmFtZTEgam9ibmFtZTIgfCBzb3J0ID5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBqb2JzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmlwdGlvbiB3aXRoIEpvYnMgc2VjdGlvbiBhbmQgYm9ndXMgZm9sbG93aW5nIHRleHQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkZXNjNiA+ZGVzYzYgJiYKKwkJZ2l0IGFkZCBkZXNjNiAmJgorCQllY2hvIDYwNjA4NDMgPmpvYm5hbWUgJiYKKwkJKAorCQkJcHJpbnRmICJzdWJqZWN0IGxpbmVcblxuXHRFeHRyYSB0YWJcbmxpbmUuXG5cbiIgJiYKKwkJCXByaW50ZiAiRmlsZXM6XG5cdEJvZ3VzIGZpbGVzIG1hcmtlclxuIiAmJgorCQkJcHJpbnRmICJKdW5rOiAzMTY0MTc1XG4iICYmCisJCQlwcmludGYgIkpvYnM6ICQoY2F0IGpvYm5hbWUpXG4iICYmCisJCQlwcmludGYgIk1vcmVKdW5rOiAzNzExXG4iCisJCSkgPm1zZyAmJgorCQlnaXQgY29tbWl0IC1GIC0gPG1zZyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgYnVpbGQgYSBqb2IKKwkJbWFrZV9qb2IgJChjYXQgam9ibmFtZSkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN1Ym1pdCAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJVbmtub3duIGZpZWxkIG5hbWUiIGVycgorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCByZXZlcnQgZGVzYzYgJiYKKwkJcm0gZGVzYzYKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCAtLXByZXBhcmUtcDQtb25seScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIHByZXAtb25seS1hZGQgPnByZXAtb25seS1hZGQgJiYKKwkJZ2l0IGFkZCBwcmVwLW9ubHktYWRkICYmCisJCWdpdCBjb21taXQgLW0gInByZXAgb25seSBhZGQiICYmCisJCWdpdCBwNCBzdWJtaXQgLS1wcmVwYXJlLXA0LW9ubHkgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJwcmVwYXJlZCBmb3Igc3VibWlzc2lvbiIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIm11c3QgYmUgZGVsZXRlZCIgb3V0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHByZXAtb25seS1hZGQgJiYKKwkJcDQgZnN0YXQgLVQgYWN0aW9uIHByZXAtb25seS1hZGQgfCBncmVwIC13IGFkZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDgtZ2l0LXA0LWNoZGlyLnNoIGIvdC90OTgwOC1naXQtcDQtY2hkaXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGM5MmU2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MDgtZ2l0LXA0LWNoZGlyLnNoCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgcmVsYXRpdmUgY2hkaXInCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDEiCisJKQorJworCisjIFA0IHJlYWRzIGZyb20gUDRDT05GSUcgZmlsZSB0byBmaW5kIGl0cyBzZXJ2ZXIgcGFyYW1zLCBpZiB0aGUKKyMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQNENPTkZJRyBhbmQgYWJzb2x1dGUgZGlyIGNsb25lJyAnCisJcHJpbnRmICJQNFBPUlQ9JFA0UE9SVFxuUDRDTElFTlQ9JFA0Q0xJRU5UXG4iID5wNGNvbmZpZyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gcDRjb25maWciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQlQNENPTkZJRz1wNGNvbmZpZyAmJiBleHBvcnQgUDRDT05GSUcgJiYKKwkJc2FuZV91bnNldCBQNFBPUlQgUDRDTElFTlQgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdmVyYm9zZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QKKwkpCisnCisKKyMgc2FtZSB0aGluZywgYnV0IHdpdGggcmVsYXRpdmUgZGlyZWN0b3J5IG5hbWUsIG5vdGUgbWlzc2luZyAkIG9uIC0tZGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnUDRDT05GSUcgYW5kIHJlbGF0aXZlIGRpciBjbG9uZScgJworCXByaW50ZiAiUDRQT1JUPSRQNFBPUlRcblA0Q0xJRU5UPSRQNENMSUVOVFxuIiA+cDRjb25maWcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHA0Y29uZmlnIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJUDRDT05GSUc9cDRjb25maWcgJiYgZXhwb3J0IFA0Q09ORklHICYmCisJCXNhbmVfdW5zZXQgUDRQT1JUIFA0Q0xJRU5UICYmCisJCWdpdCBwNCBjbG9uZSAtLXZlcmJvc2UgLS1kZXN0PSJnaXQiIC8vZGVwb3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODA5LWdpdC1wNC1jbGllbnQtdmlldy5zaCBiL3QvdDk4MDktZ2l0LXA0LWNsaWVudC12aWV3LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4MWJlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODA5LWdpdC1wNC1jbGllbnQtdmlldy5zaApAQCAtMCwwICsxLDgzNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBjbGllbnQgdmlldycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKKyMKKyMgVmVyaWZ5IHRoZXNlIGZpbGVzIGV4aXN0LCBleGFjdGx5LiAgQ2FsbGVyIGNyZWF0ZXMKKyMgYSBsaXN0IG9mIGZpbGVzIGluIGZpbGUgImZpbGVzIi4KKyMKK2NoZWNrX2ZpbGVzX2V4aXN0KCkgeworCW9rPTAgJiYKKwludW09JCMgJiYKKwlmb3IgYXJnIDsgZG8KKwkJdGVzdF9wYXRoX2lzX2ZpbGUgIiRhcmciICYmCisJCW9rPSQoKCRvayArIDEpKQorCWRvbmUgJiYKKwl0ZXN0ICRvayAtZXEgJG51bSAmJgorCXRlc3RfbGluZV9jb3VudCA9ICRudW0gZmlsZXMKK30KKworIworIyBTeW5jIHVwIHRoZSBwNCBjbGllbnQsIG1ha2Ugc3VyZSB0aGUgZ2l2ZW4gZmlsZXMgKGFuZCBvbmx5CisjIHRob3NlKSBleGlzdC4KKyMKK2NsaWVudF92ZXJpZnkoKSB7CisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQlmaW5kIC4gLXR5cGUgZiAhIC1uYW1lIGZpbGVzID5maWxlcyAmJgorCQljaGVja19maWxlc19leGlzdCAiJEAiCisJKQorfQorCisjCisjIE1ha2Ugc3VyZSB0aGUgbmFtZWQgZmlsZXMsIGV4YWN0bHksIGV4aXN0LgorIworZ2l0X3ZlcmlmeSgpIHsKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbHMtZmlsZXMgPmZpbGVzICYmCisJCWNoZWNrX2ZpbGVzX2V4aXN0ICIkQCIKKwkpCit9CisKKyMgLy9kZXBvdAorIyAgIC0gZGlyMQorIyAgICAgLSBmaWxlMTEKKyMgICAgIC0gZmlsZTEyCisjICAgLSBkaXIyCisjICAgICAtIGZpbGUyMQorIyAgICAgLSBmaWxlMjIKK2luaXRfZGVwb3QoKSB7CisJZm9yIGQgaW4gMSAyIDsgZG8KKwkJbWtkaXIgLXAgZGlyJGQgJiYKKwkJZm9yIGYgaW4gMSAyIDsgZG8KKwkJCWVjaG8gZGlyJGQvZmlsZSRkJGYgPmRpciRkL2ZpbGUkZCRmICYmCisJCQlwNCBhZGQgZGlyJGQvZmlsZSRkJGYgJiYKKwkJCXA0IHN1Ym1pdCAtZCAiZGlyJGQvZmlsZSRkJGYiCisJCWRvbmUKKwlkb25lICYmCisJZmluZCAuIC10eXBlIGYgISAtbmFtZSBmaWxlcyA+ZmlsZXMgJiYKKwljaGVja19maWxlc19leGlzdCBkaXIxL2ZpbGUxMSBkaXIxL2ZpbGUxMiBcCisJCQkgIGRpcjIvZmlsZTIxIGRpcjIvZmlsZTIyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlpbml0X2RlcG90CisJKQorJworCisjIGRvdWJsZSAlIGZvciBwcmludGYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3VwcG9ydGVkIHZpZXcgd2lsZGNhcmQgJSVuJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvJSUlJTEvc3ViLy4uLiAvL2NsaWVudC9zdWIvJSUlJTEvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zdXBwb3J0ZWQgdmlldyB3aWxkY2FyZCAqJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvKi9iYXIvLi4uIC8vY2xpZW50LyovYmFyLy4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIC4uLiBvbmx5IHN1cHBvcnRlZCBhdCBlbmQgb2Ygc3BlYyAxJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uL2ZpbGUxMSAvL2NsaWVudC8uLi4vZmlsZTExIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgLi4uIG9ubHkgc3VwcG9ydGVkIGF0IGVuZCBvZiBzcGVjIDInICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4vYS8uLi4gLy9jbGllbnQvLi4uL2EvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgbWFwJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvY2xpMS8uLi4iICYmCisJZmlsZXM9ImNsaTEvZmlsZTExIGNsaTEvZmlsZTEyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsaWVudCB2aWV3IHdpdGggbm8gbWFwcGluZ3MnICcKKwljbGllbnRfdmlldyAmJgorCWNsaWVudF92ZXJpZnkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgZmlsZSBtYXAnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxL2ZpbGUxMSAvL2NsaWVudC9maWxlMTEiICYmCisJZmlsZXM9ImZpbGUxMSIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXRlciBtYXBwaW5nIHRha2VzIHByZWNlZGVuY2UgKGVudGlyZSByZXBvKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2NsaTEvLi4uIiBcCisJCSAgICAiLy9kZXBvdC8uLi4gLy9jbGllbnQvY2xpMi8uLi4iICYmCisJZmlsZXM9ImNsaTIvZGlyMS9maWxlMTEgY2xpMi9kaXIxL2ZpbGUxMgorCSAgICAgICBjbGkyL2RpcjIvZmlsZTIxIGNsaTIvZGlyMi9maWxlMjIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGF0ZXIgbWFwcGluZyB0YWtlcyBwcmVjZWRlbmNlIChwYXJ0aWFsIHJlcG8pJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUyMSBmaWxlMjIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKworIyBSZWFkaW5nIHRoZSB2aWV3IGJhY2t3YXJkcywKKyMgICBkaXIyIGdvZXMgdG8gY2xpMTIKKyMgICBkaXIxIGNhbm5vdCBnbyB0byBjbGkxMiBzaW5jZSBpdCB3YXMgZmlsbGVkIGJ5IGRpcjIKKyMgICBkaXIxIGFsc28gZG9lcyBub3QgZ28gdG8gY2xpMywgc2luY2UgdGhlIHNlY29uZCBydWxlCisjICAgICBub3RpY2VkIHRoYXQgaXQgbWF0Y2hlZCwgYnV0IHdhcyBhbHJlYWR5IGZpbGxlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVwb3QgcGF0aCBtYXRjaGluZyByZWplY3RlZCBjbGllbnQgcGF0aCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2NsaTMvLi4uIiBcCisJCSAgICAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9jbGkxMi8uLi4iIFwKKwkJICAgICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50L2NsaTEyLy4uLiIgJiYKKwlmaWxlcz0iY2xpMTIvZmlsZTIxIGNsaTEyL2ZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCisjIHNpbmNlIGJvdGggaGF2ZSB0aGUgc2FtZSAvL2NsaWVudC8uLi4sIHRoZSBleGNsdXNpb24KKyMgcnVsZSBrZWVwcyBldmVyeXRoaW5nIG91dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjbHVzaW9uIHdpbGRjYXJkLCBjbGllbnQgcmhzIHNhbWUgKG9kZCknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiLS8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWNsaWVudF92ZXJpZnkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNsdXNpb24gd2lsZGNhcmQsIGNsaWVudCByaHMgZGlmZmVyZW50IChub3JtYWwpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIi0vL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50L2RpcjIvLi4uIiAmJgorCWZpbGVzPSJkaXIxL2ZpbGUxMSBkaXIxL2ZpbGUxMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNsdXNpb24gc2luZ2xlIGZpbGUnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiLS8vZGVwb3QvZGlyMi9maWxlMjIgLy9jbGllbnQvZmlsZTIyIiAmJgorCWZpbGVzPSJkaXIxL2ZpbGUxMSBkaXIxL2ZpbGUxMiBkaXIyL2ZpbGUyMSIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHdpbGRjYXJkJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvY2xpLy4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50L2NsaS8uLi5cbiIgJiYKKwlmaWxlcz0iY2xpL2ZpbGUxMSBjbGkvZmlsZTEyIGNsaS9maWxlMjEgY2xpL2ZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHNpbmdsZSBmaWxlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvY2xpLy4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvZmlsZTIxIC8vY2xpZW50L2NsaS9maWxlMjEiICYmCisJZmlsZXM9ImNsaS9maWxlMTEgY2xpL2ZpbGUxMiBjbGkvZmlsZTIxIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2x1c2lvbiB3aXRoIGxhdGVyIGluY2x1c2lvbicgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgXAorCQkgICAgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvZGlyMmluY2wvLi4uIiAmJgorCWZpbGVzPSJkaXIxL2ZpbGUxMSBkaXIxL2ZpbGUxMiBkaXIyaW5jbC9maWxlMjEgZGlyMmluY2wvZmlsZTIyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcyBvbiByaHMgb25seScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIFwiLy9jbGllbnQvY2RpciAxLy4uLlwiIiAmJgorCWNsaWVudF92ZXJpZnkgImNkaXIgMS9maWxlMTEiICJjZGlyIDEvZmlsZTEyIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICJjZGlyIDEvZmlsZTExIiAiY2RpciAxL2ZpbGUxMiIKKycKKworIworIyBTdWJtaXQgdGVzdHMKKyMKKworIyBjbG9uZSBzZXRzIHZhcmlhYmxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyBzZXRzIHVzZUNsaWVudFNwZWMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIC0tYm9vbCBnaXQtcDQudXNlQ2xpZW50U3BlYyA+YWN0dWFsICYmCisJCWVjaG8gdHJ1ZSA+dHJ1ZSAmJgorCQl0ZXN0X2NtcCBhY3R1YWwgdHJ1ZQorCSkKKycKKworIyBjbG9uZSBqdXN0IGEgc3ViZGlyIG9mIHRoZSBjbGllbnQgc3BlYwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZGlyMS9maWxlMTEgZGlyMS9maWxlMTIgZGlyMi9maWxlMjEgZGlyMi9maWxlMjIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwlnaXRfdmVyaWZ5IGRpcjEvZmlsZTExIGRpcjEvZmlsZTEyCisnCisKKyMKKyMgc3VibWl0IGJhY2ssIHNlZSB3aGF0IGhhcHBlbnM6ICBmaXZlIGNhc2VzCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgY2xvbmUsIHN1Ym1pdCBtb2RpZnknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZWNobyBsaW5lID4+ZGlyMS9maWxlMTIgJiYKKwkJZ2l0IGFkZCBkaXIxL2ZpbGUxMiAmJgorCQlnaXQgY29tbWl0IC1tIGRpcjEvZmlsZTEyICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyMS9maWxlMTIgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBkaXIxL2ZpbGUxMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lLCBzdWJtaXQgYWRkJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWVjaG8gZmlsZTEzID5kaXIxL2ZpbGUxMyAmJgorCQlnaXQgYWRkIGRpcjEvZmlsZTEzICYmCisJCWdpdCBjb21taXQgLW0gZGlyMS9maWxlMTMgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2ZpbGUxMworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lLCBzdWJtaXQgZGVsZXRlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBybSBkaXIxL2ZpbGUxMiAmJgorCQlnaXQgY29tbWl0IC1tICJkZWxldGUgZGlyMS9maWxlMTIiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlyMS9maWxlMTIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBjbG9uZSwgc3VibWl0IGNvcHknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzIHRydWUgJiYKKwkJY3AgZGlyMS9maWxlMTEgZGlyMS9maWxlMTFhICYmCisJCWdpdCBhZGQgZGlyMS9maWxlMTFhICYmCisJCWdpdCBjb21taXQgLW0gImNvcHkgdG8gZGlyMS9maWxlMTFhIiAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZmlsZTExYSAmJgorCQl0ZXN0ICEgLXcgZGlyMS9maWxlMTFhCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgY2xvbmUsIHN1Ym1pdCByZW5hbWUnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyB0cnVlICYmCisJCWdpdCBtdiBkaXIxL2ZpbGUxMyBkaXIxL2ZpbGUxM2EgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIGRpcjEvZmlsZTEzIHRvIGRpcjEvZmlsZTEzYSIgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkaXIxL2ZpbGUxMyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2ZpbGUxM2EgJiYKKwkJdGVzdCAhIC13IGRpcjEvZmlsZTEzYQorCSkKKycKKworIyBzZWUgdDk4MDAgZm9yIHRoZSBub24tY2xpZW50LXNwZWMgY2FzZSwgYW5kIHRoZSByZXN0IG9mIHRoZSB3aWxkY2FyZCB0ZXN0cwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgZmlsZXMgc3VibWl0IGJhY2sgdG8gcDQsIGNsaWVudC1zcGVjIGNhc2UnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gZ2l0LXdpbGQtaGFzaCA+ZGlyMS9naXQtd2lsZCNoYXNoICYmCisJCWVjaG8gZ2l0LXdpbGQtc3RhciA+ZGlyMS9naXQtd2lsZFwqc3RhciAmJgorCQllY2hvIGdpdC13aWxkLWF0ID5kaXIxL2dpdC13aWxkQGF0ICYmCisJCWVjaG8gZ2l0LXdpbGQtcGVyY2VudCA+ZGlyMS9naXQtd2lsZCVwZXJjZW50ICYmCisJCWdpdCBhZGQgZGlyMS9naXQtd2lsZCogJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHNvbWUgd2lsZGNhcmQgZmlsZW5hbWVzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2dpdC13aWxkI2hhc2ggJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyMS9naXQtd2lsZFwqc3RhciAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2dpdC13aWxkQGF0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZ2l0LXdpbGQlcGVyY2VudAorCSkgJiYKKwkoCisJCSMgZGVsZXRlIHRoZXNlIGNhcmVmdWxseSwgY2Fubm90IGp1c3QgZG8gInA0IGRlbGV0ZSIKKwkJIyBvbiBmaWxlcyB3aXRoIHdpbGRjYXJkczsgYnV0IGdpdC1wNCBrbm93cyBob3cKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBybSBkaXIxL2dpdC13aWxkKiAmJgorCQlnaXQgY29tbWl0IC1tICJjbGVhbiB1cCB0aGUgd2lsZGNhcmRzIiAmJgorCQlnaXQgcDQgc3VibWl0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWluaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlybSBmaWxlcyAmJgorCQlwNCBkZWxldGUgKi8qICYmCisJCXA0IHN1Ym1pdCAtZCAiZGVsZXRlIGFsbCBmaWxlcyIgJiYKKwkJaW5pdF9kZXBvdAorCSkKKycKKworIworIyBXaGF0IGhhcHBlbnMgd2hlbiB0d28gZmlsZXMgb2YgdGhlIHNhbWUgbmFtZSBhcmUgb3ZlcmxheWVkIHRvZ2V0aGVyPworIyBUaGUgbGFzdC1saXN0ZWQgZmlsZSBzaG91bGQgdGFrZSBwcmVmZXJlbmNlLgorIworIyAvL2RlcG90CisjICAgLSBkaXIxCisjICAgICAtIGZpbGUxMQorIyAgICAgLSBmaWxlMTIKKyMgICAgIC0gZmlsZWNvbGxpZGUKKyMgICAtIGRpcjIKKyMgICAgIC0gZmlsZTIxCisjICAgICAtIGZpbGUyMgorIyAgICAgLSBmaWxlY29sbGlkZQorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBjb2xsaXNpb24gc2V0dXAnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIxL2ZpbGVjb2xsaWRlID5kaXIxL2ZpbGVjb2xsaWRlICYmCisJCXA0IGFkZCBkaXIxL2ZpbGVjb2xsaWRlICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIxL2ZpbGVjb2xsaWRlICYmCisJCWVjaG8gZGlyMi9maWxlY29sbGlkZSA+ZGlyMi9maWxlY29sbGlkZSAmJgorCQlwNCBhZGQgZGlyMi9maWxlY29sbGlkZSAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMi9maWxlY29sbGlkZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBjb2xsaXNpb24gMSB0byAyJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgZmlsZWNvbGxpZGUiICYmCisJZWNobyBkaXIyL2ZpbGVjb2xsaWRlID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvZmlsZWNvbGxpZGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRnaXQiL2ZpbGVjb2xsaWRlCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ292ZXJsYXkgY29sbGlzaW9uIDIgdG8gMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGZpbGVjb2xsaWRlIiAmJgorCWVjaG8gZGlyMS9maWxlY29sbGlkZSA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2ZpbGVjb2xsaWRlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9maWxlY29sbGlkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IGNvbGxpc2lvbiBkZWxldGUgMicgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQlwNCBkZWxldGUgZGlyMi9maWxlY29sbGlkZSAmJgorCQlwNCBzdWJtaXQgLWQgInJlbW92ZSBkaXIyL2ZpbGVjb2xsaWRlIgorCSkKKycKKworIyBubyBmaWxlY29sbGlkZSwgZ290IGRlbGV0ZWQgd2l0aCBkaXIyCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdvdmVybGF5IGNvbGxpc2lvbiAxIHRvIDIsIGJ1dCAyIGRlbGV0ZWQnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IGNvbGxpc2lvbiB1cGRhdGUgMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2RpcjEvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJcDQgb3BlbiBkaXIxL2ZpbGVjb2xsaWRlICYmCisJCWVjaG8gZGlyMS9maWxlY29sbGlkZSB1cGRhdGUgPmRpcjEvZmlsZWNvbGxpZGUgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGUgZGlyMS9maWxlY29sbGlkZSIKKwkpCisnCisKKyMgc3RpbGwgbm8gZmlsZWNvbGxpZGUsIGRpcjIgc3RpbGwgd2lucyB3aXRoIHRoZSBkZWxldGlvbiBldmVuIHRob3VnaCB0aGUKKyMgY2hhbmdlIHRvIGRpcjEgaXMgbW9yZSByZWNlbnQKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ292ZXJsYXkgY29sbGlzaW9uIDEgdG8gMiwgYnV0IDIgZGVsZXRlZCwgdGhlbiAxIHVwZGF0ZWQnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IGNvbGxpc2lvbiBkZWxldGUgZmlsZWNvbGxpZGVzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXA0IGRlbGV0ZSBkaXIxL2ZpbGVjb2xsaWRlIGRpcjIvZmlsZWNvbGxpZGUgJiYKKwkJcDQgc3VibWl0IC1kICJyZW1vdmUgZmlsZWNvbGxpZGVzIgorCSkKKycKKworIworIyBPdmVybGF5cyBhcyBwYXJ0IG9mIHN5bmMsIHJhdGhlciB0aGFuIGluaXRpYWwgY2hlY2tvdXQ6CisjICAgMS4gIGFkZCBhIGZpbGUgaW4gZGlyMQorIyAgIDIuICBzeW5jIHRvIGluY2x1ZGUgaXQKKyMgICAzLiAgYWRkIHNhbWUgZmlsZSBpbiBkaXIyCisjICAgNC4gIHN5bmMsIG1ha2Ugc3VyZSBjb250ZW50IHN3aXRjaGVzIGFzIGRpcjIgaGFzIHByaW9yaXR5CisjICAgNS4gIGFkZCBhbm90aGVyIGZpbGUgaW4gZGlyMQorIyAgIDYuICBzeW5jCisjICAgNy4gIGFkZC9kZWxldGUgc2FtZSBmaWxlIGluIGRpcjIKKyMgICA4LiAgc3luYywgbWFrZSBzdXJlIGl0IGRpc2FwcGVhcnMsIGFnYWluIGRpcjIgd2lucworIyAgIDkuICBjbGVhbnVwCisjCisjIC8vZGVwb3QKKyMgICAtIGRpcjEKKyMgICAgIC0gZmlsZTExCisjICAgICAtIGZpbGUxMgorIyAgICAgLSBjb2xBCisjICAgICAtIGNvbEIKKyMgICAtIGRpcjIKKyMgICAgIC0gZmlsZTIxCisjICAgICAtIGZpbGUyMgorIyAgICAgLSBjb2xBCisjICAgICAtIGNvbEIKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogYWRkIGNvbEEgaW4gZGlyMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2RpcjEvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIxL2NvbEEgPmRpcjEvY29sQSAmJgorCQlwNCBhZGQgZGlyMS9jb2xBICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIxL2NvbEEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogaW5pdGlhbCBnaXQgY2hlY2tvdXQnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIiAmJgorCWVjaG8gZGlyMS9jb2xBID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQSAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGdpdCIvY29sQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGFkZCBjb2xBIGluIGRpcjInICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMi9jb2xBID5kaXIyL2NvbEEgJiYKKwkJcDQgYWRkIGRpcjIvY29sQSAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMi9jb2xBCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGNvbEEgY29udGVudCBzd2l0Y2gnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIiAmJgorCWVjaG8gZGlyMi9jb2xBID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tdXNlLWNsaWVudC1zcGVjICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyCisJKSAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9jb2xBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogYWRkIGNvbEIgaW4gZGlyMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2RpcjEvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIxL2NvbEIgPmRpcjEvY29sQiAmJgorCQlwNCBhZGQgZGlyMS9jb2xCICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIxL2NvbEIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogY29sQiBhcHBlYXJzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgY29sQSBjb2xCIiAmJgorCWVjaG8gZGlyMS9jb2xCID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tdXNlLWNsaWVudC1zcGVjICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyCisJKSAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9jb2xCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogYWRkL2RlbGV0ZSBjb2xCIGluIGRpcjInICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMi9jb2xCID5kaXIyL2NvbEIgJiYKKwkJcDQgYWRkIGRpcjIvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMi9jb2xCICYmCisJCXA0IGRlbGV0ZSBkaXIyL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kICJkZWxldGUgZGlyMi9jb2xCIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBjb2xCIGRpc2FwcGVhcnMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS11c2UtY2xpZW50LXNwZWMgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBwNC9tYXN0ZXIKKwkpICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBjbGVhbnVwJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXA0IGRlbGV0ZSBkaXIxL2NvbEEgZGlyMi9jb2xBIGRpcjEvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgInJlbW92ZSBvdmVybGF5IHN5bmMgZmlsZXMiCisJKQorJworCisjCisjIE92ZXJsYXkgdGVzdHMgYWdhaW4sIGJ1dCBzd2FwcGVkIHNvIGRpcjEgaGFzIHByaW9yaXR5LgorIyAgIDEuICBhZGQgYSBmaWxlIGluIGRpcjEKKyMgICAyLiAgc3luYyB0byBpbmNsdWRlIGl0CisjICAgMy4gIGFkZCBzYW1lIGZpbGUgaW4gZGlyMgorIyAgIDQuICBzeW5jLCBtYWtlIHN1cmUgY29udGVudCBkb2VzIG5vdCBzd2l0Y2gKKyMgICA1LiAgYWRkIGFub3RoZXIgZmlsZSBpbiBkaXIxCisjICAgNi4gIHN5bmMKKyMgICA3LiAgYWRkL2RlbGV0ZSBzYW1lIGZpbGUgaW4gZGlyMgorIyAgIDguICBzeW5jLCBtYWtlIHN1cmUgaXQgaXMgc3RpbGwgdGhlcmUKKyMgICA5LiAgY2xlYW51cAorIworIyAvL2RlcG90CisjICAgLSBkaXIxCisjICAgICAtIGZpbGUxMQorIyAgICAgLSBmaWxlMTIKKyMgICAgIC0gY29sQQorIyAgICAgLSBjb2xCCisjICAgLSBkaXIyCisjICAgICAtIGZpbGUyMQorIyAgICAgLSBmaWxlMjIKKyMgICAgIC0gY29sQQorIyAgICAgLSBjb2xCCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmMgc3dhcDogYWRkIGNvbEEgaW4gZGlyMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2RpcjEvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIxL2NvbEEgPmRpcjEvY29sQSAmJgorCQlwNCBhZGQgZGlyMS9jb2xBICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIxL2NvbEEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBpbml0aWFsIGdpdCBjaGVja291dCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGNvbEEiICYmCisJZWNobyBkaXIxL2NvbEEgPmFjdHVhbCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9jb2xBICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9jb2xBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBhZGQgY29sQSBpbiBkaXIyJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvZGlyMi8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjIvY29sQSA+ZGlyMi9jb2xBICYmCisJCXA0IGFkZCBkaXIyL2NvbEEgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjIvY29sQQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnb3ZlcmxheSBzeW5jIHN3YXA6IGNvbEEgbm8gY29udGVudCBzd2l0Y2gnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIiAmJgorCWVjaG8gZGlyMS9jb2xBID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tdXNlLWNsaWVudC1zcGVjICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyCisJKSAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9jb2xBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBhZGQgY29sQiBpbiBkaXIxJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvZGlyMS8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjEvY29sQiA+ZGlyMS9jb2xCICYmCisJCXA0IGFkZCBkaXIxL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjEvY29sQgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jIHN3YXA6IGNvbEIgYXBwZWFycycgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGNvbEEgY29sQiIgJiYKKwllY2hvIGRpcjEvY29sQiA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2NvbEIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLXVzZS1jbGllbnQtc3BlYyAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IHA0L21hc3RlcgorCSkgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGdpdCIvY29sQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmMgc3dhcDogYWRkL2RlbGV0ZSBjb2xCIGluIGRpcjInICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMi9jb2xCID5kaXIyL2NvbEIgJiYKKwkJcDQgYWRkIGRpcjIvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMi9jb2xCICYmCisJCXA0IGRlbGV0ZSBkaXIyL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kICJkZWxldGUgZGlyMi9jb2xCIgorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnb3ZlcmxheSBzeW5jIHN3YXA6IGNvbEIgbm8gY2hhbmdlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgY29sQSBjb2xCIiAmJgorCWVjaG8gZGlyMS9jb2xCID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tdXNlLWNsaWVudC1zcGVjICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyCisJKSAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9jb2xCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBjbGVhbnVwJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXA0IGRlbGV0ZSBkaXIxL2NvbEEgZGlyMi9jb2xBIGRpcjEvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgInJlbW92ZSBvdmVybGF5IHN5bmMgZmlsZXMiCisJKQorJworCisjCisjIFJlbmFtZSBkaXJlY3RvcmllcyB0byB0ZXN0IHF1b3RpbmcgaW4gZGVwb3Qtc2lkZSBtYXBwaW5ncworIyAvL2RlcG90CisjICAgIC0gImRpciAxIgorIyAgICAgICAtIGZpbGUxMQorIyAgICAgICAtIGZpbGUxMgorIyAgICAtICJkaXIgMiIKKyMgICAgICAgLSBmaWxlMjEKKyMgICAgICAgLSBmaWxlMjIKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBmaWxlcyB0byBpbnRyb2R1Y2Ugc3BhY2VzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwljbGllbnRfdmVyaWZ5IGRpcjEvZmlsZTExIGRpcjEvZmlsZTEyIFwKKwkJICAgICAgZGlyMi9maWxlMjEgZGlyMi9maWxlMjIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBvcGVuIGRpcjEvLi4uICYmCisJCXA0IG1vdmUgZGlyMS8uLi4gImRpciAxIi8uLi4gJiYKKwkJcDQgb3BlbiBkaXIyLy4uLiAmJgorCQlwNCBtb3ZlIGRpcjIvLi4uICJkaXIgMiIvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAicmVuYW1lIHdpdGggc3BhY2VzIgorCSkgJiYKKwljbGllbnRfdmVyaWZ5ICJkaXIgMS9maWxlMTEiICJkaXIgMS9maWxlMTIiIFwKKwkJICAgICAgImRpciAyL2ZpbGUyMSIgImRpciAyL2ZpbGUyMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzIG9uIGxocyBvbmx5JyAnCisJY2xpZW50X3ZpZXcgIlwiLy9kZXBvdC9kaXIgMS8uLi5cIiAvL2NsaWVudC9jZGlyMS8uLi4iICYmCisJZmlsZXM9ImNkaXIxL2ZpbGUxMSBjZGlyMS9maWxlMTIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzIG9uIGJvdGggc2lkZXMnICcKKwljbGllbnRfdmlldyAiXCIvL2RlcG90L2RpciAxLy4uLlwiIFwiLy9jbGllbnQvY2RpciAxLy4uLlwiIiAmJgorCWNsaWVudF92ZXJpZnkgImNkaXIgMS9maWxlMTEiICJjZGlyIDEvZmlsZTEyIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICJjZGlyIDEvZmlsZTExIiAiY2RpciAxL2ZpbGUxMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTAtZ2l0LXA0LXJjcy5zaCBiL3QvdDk4MTAtZ2l0LXA0LXJjcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZTMwYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgxMC1naXQtcDQtcmNzLnNoCkBAIC0wLDAgKzEsMzQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHJjcyBrZXl3b3JkcycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKKyMKKyMgTWFrZSBvbmUgZmlsZSB3aXRoIGtleXdvcmQgbGluZXMgYXQgdGhlIHRvcCwgYW5kCisjIGVub3VnaCBwbGFpbiB0ZXh0IHRvIGJlIGFibGUgdG8gdGVzdCBtb2RpZmljYXRpb25zCisjIGZhciBhd2F5IGZyb20gdGhlIGtleXdvcmRzLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWNhdCA8PC1cRU9GID5maWxlayAmJgorCQkkSWQkCisJCS8qICRSZXZpc2lvbiQgKi8KKwkJIyAkQ2hhbmdlJAorCQlsaW5lNAorCQlsaW5lNQorCQlsaW5lNgorCQlsaW5lNworCQlsaW5lOAorCQlFT0YKKwkJY3AgZmlsZWsgZmlsZWtvICYmCisJCXNlZCAtaSAicy9SZXZpc2lvbi9SZXZpc2lvbjogZG8gbm90IHNjcnViIG1lLyIgZmlsZWtvCisJCWNwIGZpbGVrbyBmaWxlX3RleHQgJiYKKwkJc2VkIC1pICJzL0lkL0lkOiBkbyBub3Qgc2NydWIgbWUvIiBmaWxlX3RleHQKKwkJcDQgYWRkIC10IHRleHQrayBmaWxlayAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGVrIiAmJgorCQlwNCBhZGQgLXQgdGV4dCtrbyBmaWxla28gJiYKKwkJcDQgc3VibWl0IC1kICJmaWxla28iICYmCisJCXA0IGFkZCAtdCB0ZXh0IGZpbGVfdGV4dCAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGVfdGV4dCIKKwkpCisnCisKKyMKKyMgR2VuZXJhdGUgdGhlc2UgaW4gYSBmdW5jdGlvbiB0byBtYWtlIGl0IGVhc3kgdG8gdXNlIHNpbmdsZSBxdW90ZSBtYXJrcy4KKyMKK3dyaXRlX3NjcnViX3NjcmlwdHMgKCkgeworCWNhdCA+IiRUUkFTSF9ESVJFQ1RPUlkvc2NydWJfay5weSIgPDwtXEVPRiAmJgorCWltcG9ydCByZSwgc3lzCisJc3lzLnN0ZG91dC53cml0ZShyZS5zdWIocicoP2kpXCQoSWR8SGVhZGVyfEF1dGhvcnxEYXRlfERhdGVUaW1lfENoYW5nZXxGaWxlfFJldmlzaW9uKTpbXiRdKlwkJywgcickXDEkJywgc3lzLnN0ZGluLnJlYWQoKSkpCisJRU9GCisJY2F0ID4iJFRSQVNIX0RJUkVDVE9SWS9zY3J1Yl9rby5weSIgPDwtXEVPRgorCWltcG9ydCByZSwgc3lzCisJc3lzLnN0ZG91dC53cml0ZShyZS5zdWIocicoP2kpXCQoSWR8SGVhZGVyKTpbXiRdKlwkJywgcickXDEkJywgc3lzLnN0ZGluLnJlYWQoKSkpCisJRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NjcnViIHNjcmlwdHMnICcKKwl3cml0ZV9zY3J1Yl9zY3JpcHRzCisnCisKKyMKKyMgQ29tcGFyZSAkY2xpL2ZpbGUgdG8gaXRzIHNjcnViYmVkIHZlcnNpb24sIHNob3VsZCBiZSBkaWZmZXJlbnQuCisjIENvbXBhcmUgc2NydWJiZWQgJGNsaS9maWxlIHRvICRnaXQvZmlsZSwgc2hvdWxkIGJlIHNhbWUuCisjCitzY3J1Yl9rX2NoZWNrICgpIHsKKwlmaWxlPSIkMSIgJiYKKwlzY3J1Yj0iJFRSQVNIX0RJUkVDVE9SWS8kZmlsZSIgJiYKKwkiJFBZVEhPTl9QQVRIIiAiJFRSQVNIX0RJUkVDVE9SWS9zY3J1Yl9rLnB5IiA8IiRnaXQvJGZpbGUiID4iJHNjcnViIiAmJgorCSEgdGVzdF9jbXAgIiRjbGkvJGZpbGUiICIkc2NydWIiICYmCisJdGVzdF9jbXAgIiRnaXQvJGZpbGUiICIkc2NydWIiICYmCisJcm0gIiRzY3J1YiIKK30KK3NjcnViX2tvX2NoZWNrICgpIHsKKwlmaWxlPSIkMSIgJiYKKwlzY3J1Yj0iJFRSQVNIX0RJUkVDVE9SWS8kZmlsZSIgJiYKKwkiJFBZVEhPTl9QQVRIIiAiJFRSQVNIX0RJUkVDVE9SWS9zY3J1Yl9rby5weSIgPCIkZ2l0LyRmaWxlIiA+IiRzY3J1YiIgJiYKKwkhIHRlc3RfY21wICIkY2xpLyRmaWxlIiAiJHNjcnViIiAmJgorCXRlc3RfY21wICIkZ2l0LyRmaWxlIiAiJHNjcnViIiAmJgorCXJtICIkc2NydWIiCit9CisKKyMKKyMgTW9kaWZ5IGZhciBhd2F5IGZyb20ga2V5d29yZHMuICBJZiBubyBSQ1MgbGluZXMgc2hvdyB1cAorIyBpbiB0aGUgZGlmZiwgdGhlcmUgaXMgbm8gY29uZmxpY3QuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IGZhciBhd2F5IGZyb20gUkNTIGxpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJc2VkIC1pICJzL15saW5lNy9saW5lNyBlZGl0LyIgZmlsZWsgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZmlsZWsgbGluZTcgZWRpdCIgZmlsZWsgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlzY3J1Yl9rX2NoZWNrIGZpbGVrCisJKQorJworCisjCisjIE1vZGlmeSBuZWFyIHRoZSBrZXl3b3Jkcy4gIFRoaXMgd2lsbCByZXF1aXJlIFJDUyBzY3J1YmJpbmcuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IG5lYXIgUkNTIGxpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlzZWQgLWkgInMvXmxpbmU0L2xpbmU0IGVkaXQvIiBmaWxlayAmJgorCQlnaXQgY29tbWl0IC1tICJmaWxlayBsaW5lNCBlZGl0IiBmaWxlayAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXNjcnViX2tfY2hlY2sgZmlsZWsKKwkpCisnCisKKyMKKyMgTW9kaWZ5IHRoZSBrZXl3b3JkcyB0aGVtc2VsdmVzLiAgVGhpcyBhbHNvIHdpbGwgcmVxdWlyZSBSQ1Mgc2NydWJiaW5nLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBrZXl3b3JkIGxpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlzZWQgLWkgIi9SZXZpc2lvbi9kIiBmaWxlayAmJgorCQlnaXQgY29tbWl0IC1tICJmaWxlayByZW1vdmUgUmV2aXNpb24gbGluZSIgZmlsZWsgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlzY3J1Yl9rX2NoZWNrIGZpbGVrCisJKQorJworCisjCisjIFNjcnViYmluZyB0ZXh0K2tvIGZpbGVzIHNob3VsZCBub3QgYWx0ZXIgYWxsIGtleXdvcmRzLCBqdXN0IElkLCBIZWFkZXIuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzY3J1YiBrbyBmaWxlcyBkaWZmZXJlbnRseScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwIHRydWUgJiYKKwkJc2VkIC1pICJzL15saW5lNC9saW5lNCBlZGl0LyIgZmlsZWtvICYmCisJCWdpdCBjb21taXQgLW0gImZpbGVrbyBsaW5lNCBlZGl0IiBmaWxla28gJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlzY3J1Yl9rb19jaGVjayBmaWxla28gJiYKKwkJISBzY3J1Yl9rX2NoZWNrIGZpbGVrbworCSkKKycKKworIyBoYWNrOyBnaXQgcDQgc3VibWl0IHNob3VsZCBkbyBpdCBvbiBpdHMgb3duCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGFmdGVyIGZhaWx1cmUnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCByZXZlcnQgLi4uCisJKQorJworCisjCisjIERvIG5vdCBzY3J1YiBhbnl0aGluZyBidXQgK2sgb3IgK2tvIGZpbGVzLiAgU25lYWsgYSBjaGFuZ2UgaW50bworIyB0aGUgY2xpIGZpbGUgc28gdGhhdCBzdWJtaXQgd2lsbCBnZXQgYSBjb25mbGljdC4gIE1ha2Ugc3VyZSB0aGF0CisjIHNjcnViYmluZyBkb2Vzbid0IG1ha2UgYSBtZXNzIG9mIHRoaW5ncy4KKyMKKyMgVGhpcyBtaWdodCBoYXBwZW4gb25seSBpZiB0aGUgZ2l0IHJlcG8gaXMgYmVoaW5kIHRoZSBwNCByZXBvIGF0CisjIHN1Ym1pdCB0aW1lLCBhbmQgdGhlcmUgaXMgYSBjb25mbGljdC4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBzY3J1YiBwbGFpbiB0ZXh0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlzZWQgLWkgInMvXmxpbmU0L2xpbmU0IGVkaXQvIiBmaWxlX3RleHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZmlsZV90ZXh0IGxpbmU0IGVkaXQiIGZpbGVfdGV4dCAmJgorCQkoCisJCQljZCAiJGNsaSIgJiYKKwkJCXA0IG9wZW4gZmlsZV90ZXh0ICYmCisJCQlzZWQgLWkgInMvXmxpbmU1L2xpbmU1IHA0IGVkaXQvIiBmaWxlX3RleHQgJiYKKwkJCXA0IHN1Ym1pdCAtZCAiZmlsZTUgcDQgZWRpdCIKKwkJKSAmJgorCQllY2hvIHMgfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCAmJgorCQkoCisJCQkjIG1ha2Ugc3VyZSB0aGUgZmlsZSBpcyBub3QgbGVmdCBvcGVuCisJCQljZCAiJGNsaSIgJiYKKwkJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIGZpbGVfdGV4dAorCQkpCisJKQorJworCisjIGhhY2s7IGdpdCBwNCBzdWJtaXQgc2hvdWxkIGRvIGl0IG9uIGl0cyBvd24KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWZ0ZXIgZmFpbHVyZSAyJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgcmV2ZXJ0IC4uLgorCSkKKycKKworY3JlYXRlX2t3X2ZpbGUgKCkgeworCWNhdCA8PFxFT0YgPiIkMSIKKy8qIEEgZmlsZQorCUlkOiAkSWQkCisJUmV2aXNpb246ICRSZXZpc2lvbiQKKwlGaWxlOiAkRmlsZSQKKyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KSB7CisJcmV0dXJuIDA7Cit9CitFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGt3ZmlsZScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGUgMSIgJiYKKwkJY3JlYXRlX2t3X2ZpbGUga3dmaWxlMS5jICYmCisJCXA0IGFkZCBrd2ZpbGUxLmMgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgcmN3IGt3IGZpbGUiIGt3ZmlsZTEuYworCSkKKycKKworcDRfYXBwZW5kX3RvX2ZpbGUgKCkgeworCWY9IiQxIiAmJgorCXA0IGVkaXQgLXQga3RleHQgIiRmIiAmJgorCWVjaG8gIi8qICQoZGF0ZSkgKi8iID4+IiRmIiAmJgorCXA0IHN1Ym1pdCAtZCAiYXBwZW5kaW5nIGEgbGluZSBpbiBwNCIKK30KKworIyBDcmVhdGUgc29tZSBmaWxlcyB3aXRoIFJDUyBrZXl3b3Jkcy4gSWYgdGhleSBnZXQgbW9kaWZpZWQKKyMgZWxzZXdoZXJlIHRoZW4gdGhlIHZlcnNpb24gbnVtYmVyIGdldHMgYnVtcGVkIHdoaWNoIHRoZW4KKyMgcmVzdWx0cyBpbiBhIG1lcmdlIGNvbmZsaWN0IGlmIHdlIHRvdWNoIHRoZSBSQ1Mga3cgbGluZXMsCisjIGV2ZW4gdGhvdWdoIHRoZSBjaGFuZ2UgaXRzZWxmIHdvdWxkIG90aGVyd2lzZSBhcHBseSBjbGVhbmx5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29wZSB3aXRoIHJjcyBrZXl3b3JkIGV4cGFuc2lvbiBkYW1hZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCShjZCAiJGNsaSIgJiYgcDRfYXBwZW5kX3RvX2ZpbGUga3dmaWxlMS5jKSAmJgorCQlvbGRfbGluZXM9JCh3YyAtbCA8a3dmaWxlMS5jKSAmJgorCQkiJFBFUkxfUEFUSCIgLW4gLWkgLWUgInByaW50IHVubGVzcyBtL1JldmlzaW9uOi8iIGt3ZmlsZTEuYyAmJgorCQluZXdfbGluZXM9JCh3YyAtbCA8a3dmaWxlMS5jKSAmJgorCQl0ZXN0ICRuZXdfbGluZXMgPSAkKCgkb2xkX2xpbmVzIC0gMSkpICYmCisKKwkJZ2l0IGFkZCBrd2ZpbGUxLmMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiWmFwIGFuIFJDUyBrdyBsaW5lIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCWdpdCBwNCByZWJhc2UgJiYKKwkJZ2l0IGRpZmYgcDQvbWFzdGVyICYmCisJCWdpdCBwNCBjb21taXQgJiYKKwkJZWNobyAidHJ5IG1vZGlmeWluZyBpbiBib3RoIiAmJgorCQljZCAiJGNsaSIgJiYKKwkJcDQgZWRpdCBrd2ZpbGUxLmMgJiYKKwkJZWNobyAibGluZSBmcm9tIHA0IiA+Pmt3ZmlsZTEuYyAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBhIGxpbmUgaW4gcDQiIGt3ZmlsZTEuYyAmJgorCQljZCAiJGdpdCIgJiYKKwkJZWNobyAibGluZSBmcm9tIGdpdCBhdCB0aGUgdG9wIiB8IGNhdCAtIGt3ZmlsZTEuYyA+a3dmaWxlMS5jLm5ldyAmJgorCQltdiBrd2ZpbGUxLmMubmV3IGt3ZmlsZTEuYyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgbGluZSBpbiBnaXQgYXQgdGhlIHRvcCIga3dmaWxlMS5jICYmCisJCWdpdCBwNCByZWJhc2UgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29wZSB3aXRoIHJjcyBrZXl3b3JkIGZpbGUgZGVsZXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvICJcJFJldmlzaW9uXCQiID5rd2RlbGZpbGUuYyAmJgorCQlwNCBhZGQgLXQga3RleHQga3dkZWxmaWxlLmMgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSB0byBiZSBkZWxldGVkIiAmJgorCQljYXQga3dkZWxmaWxlLmMgJiYKKwkJZ3JlcCAxIGt3ZGVsZmlsZS5jCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlncmVwIFJldmlzaW9uIGt3ZGVsZmlsZS5jICYmCisJCWdpdCBybSAtZiBrd2RlbGZpbGUuYyAmJgorCQlnaXQgY29tbWl0IC1tICJEZWxldGUgYSBmaWxlIGNvbnRhaW5pbmcgUkNTIGtleXdvcmRzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCSEgdGVzdCAtZiBrd2RlbGZpbGUuYworCSkKKycKKworIyBJZiB5b3UgYWRkIGtleXdvcmRzIGluIGdpdCBvZiB0aGUgZm9ybSAkSGVhZGVyJCB0aGVuIGV2ZXJ5dGhpbmcgc2hvdWxkCisjIHdvcmsgZmluZSB3aXRob3V0IGFueSBzcGVjaWFsIGhhbmRsaW5nLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWRkIGtleXdvcmRzIGluIGdpdCB3aGljaCBtYXRjaCB0aGUgZGVmYXVsdCBwNCB2YWx1ZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyAiTmV3S1c6IFwkUmV2aXNpb25cJCIgPj5rd2ZpbGUxLmMgJiYKKwkJZ2l0IGFkZCBrd2ZpbGUxLmMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkaW5nIFJDUyBrZXl3b3JkcyBpbiBnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJdGVzdCAtZiBrd2ZpbGUxLmMgJiYKKwkJZ3JlcCAiTmV3S1cuKlJldmlzaW9uLipbMC05XSIga3dmaWxlMS5jCisKKwkpCisnCisKKyMgSWYgeW91IGFkZCBrZXl3b3JkcyBpbiBnaXQgb2YgdGhlIGZvcm0gJEhlYWRlcjojMSQgdGhlbiB0aGluZ3Mgd2lsbCBmYWlsCisjIHVubGVzcyBnaXQtcDQgdGFrZXMgc3RlcHMgdG8gc2NydWIgdGhlICpnaXQqIGNvbW1pdC4KKyMKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ0FkZCBrZXl3b3JkcyBpbiBnaXQgd2hpY2ggZG8gbm90IG1hdGNoIHRoZSBkZWZhdWx0IHA0IHZhbHVlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvICJOZXdLVzI6IFwkUmV2aXNpb246MVwkIiA+Pmt3ZmlsZTEuYyAmJgorCQlnaXQgYWRkIGt3ZmlsZTEuYyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGRpbmcgUkNTIGtleXdvcmRzIGluIGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQlncmVwICJOZXdLVzIuKlJldmlzaW9uLipbMC05XSIga3dmaWxlMS5jCisKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODExLWdpdC1wNC1sYWJlbC1pbXBvcnQuc2ggYi90L3Q5ODExLWdpdC1wNC1sYWJlbC1pbXBvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDk1MjM4ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTEtZ2l0LXA0LWxhYmVsLWltcG9ydC5zaApAQCAtMCwwICsxLDIyMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBsYWJlbCB0ZXN0cycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKKyMgQmFzaWMgcDQgbGFiZWwgaW1wb3J0IHRlc3RzLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgcDQgbGFiZWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgbWFpbiAmJgorCisJCWVjaG8gZjEgPm1haW4vZjEgJiYKKwkJcDQgYWRkIG1haW4vZjEgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2YxIiAmJgorCisJCWVjaG8gZjIgPm1haW4vZjIgJiYKKwkJcDQgYWRkIG1haW4vZjIgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2YyIiAmJgorCisJCWVjaG8gZjMgPm1haW4vZmlsZV93aXRoX1wkbWV0YWNoYXIgJiYKKwkJcDQgYWRkIG1haW4vZmlsZV93aXRoX1wkbWV0YWNoYXIgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlIHdpdGggbWV0YWNoYXIiICYmCisKKwkJcDQgdGFnIC1sIFRBR19GMV9PTkxZIG1haW4vZjEgJiYKKwkJcDQgdGFnIC1sIFRBR19XSVRIXCRfU0hFTExfQ0hBUiBtYWluLy4uLiAmJgorCQlwNCB0YWcgLWwgdGhpc190YWdfd2lsbF9iZVwgc2tpcHBlZCBtYWluLy4uLiAmJgorCisJCWVjaG8gZjQgPm1haW4vZjQgJiYKKwkJcDQgYWRkIG1haW4vZjQgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2Y0IiAmJgorCisJCXA0IGxhYmVsIC1pIDw8LUVPRiAmJgorCQlMYWJlbDogVEFHX0xPTkdfTEFCRUwKKwkJRGVzY3JpcHRpb246CisJCSAgIEEgTGFiZWwgZmlyc3QgbGluZQorCQkgICBBIExhYmVsIHNlY29uZCBsaW5lCisJCVZpZXc6CS8vZGVwb3QvLi4uCisJCUVPRgorCisJCXA0IHRhZyAtbCBUQUdfTE9OR19MQUJFTCAuLi4gJiYKKworCQlwNCBsYWJlbHMgLi4uICYmCisKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhYmVsSW1wb3J0UmVnZXhwICIuKlRBRy4qIiAmJgorCQlnaXQgcDQgc3luYyAtLWltcG9ydC1sYWJlbHMgLS12ZXJib3NlICYmCisKKwkJZ2l0IHRhZyAmJgorCQlnaXQgdGFnID50YWdsaXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgdGFnbGlzdCAmJgorCisJCWNkIG1haW4gJiYKKwkJZ2l0IGNoZWNrb3V0IFRBR19GMV9PTkxZICYmCisJCSEgdGVzdCAtZiBmMiAmJgorCQlnaXQgY2hlY2tvdXQgVEFHX1dJVEhcJF9TSEVMTF9DSEFSICYmCisJCXRlc3QgLWYgZjEgJiYgdGVzdCAtZiBmMiAmJiB0ZXN0IC1mIGZpbGVfd2l0aF9cJG1ldGFjaGFyICYmCisKKwkJZ2l0IHNob3cgVEFHX0xPTkdfTEFCRUwgfCBncmVwIC1xICJBIExhYmVsIHNlY29uZCBsaW5lIgorCSkKKycKKyMgVGVzdCBzb21lIGxhYmVsIGNvcm5lciBjYXNlczoKKyMKKyMgLSB0d28gdGFncyBvbiB0aGUgc2FtZSBmaWxlOyBib3RoIHNob3VsZCBiZSBhdmFpbGFibGUKKyMgLSBhIHRhZyB0aGF0IGlzIG9ubHkgb24gb25lIGZpbGU7IHRoaXMga2luZCBvZiB0YWcKKyMgICBjYW5ub3QgYmUgaW1wb3J0ZWQgKGF0IGxlYXN0IG5vdCBlYXNpbHkpLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28gbGFiZWxzIG9uIHRoZSBzYW1lIGNoYW5nZWxpc3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBtYWluICYmCisKKwkJcDQgZWRpdCBtYWluL2YxIG1haW4vZjIgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5tYWluL2YxICYmCisJCWVjaG8gIm5vdCBpbiB0aGUgdGFnIiA+bWFpbi9mMiAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZlsxMl06IHRlc3RpbmcgdHdvIGxhYmVscyIgJiYKKworCQlwNCB0YWcgLWwgVEFHX0YxXzEgbWFpbi8uLi4gJiYKKwkJcDQgdGFnIC1sIFRBR19GMV8yIG1haW4vLi4uICYmCisKKwkJcDQgbGFiZWxzIC4uLiAmJgorCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLWltcG9ydC1sYWJlbHMgJiYKKworCQlnaXQgdGFnIHwgZ3JlcCBUQUdfRjEgJiYKKwkJZ2l0IHRhZyB8IGdyZXAgLXEgVEFHX0YxXzEgJiYKKwkJZ2l0IHRhZyB8IGdyZXAgLXEgVEFHX0YxXzIgJiYKKworCQljZCBtYWluICYmCisKKwkJZ2l0IGNoZWNrb3V0IFRBR19GMV8xICYmCisJCWxzICYmCisJCXRlc3QgLWYgZjEgJiYKKworCQlnaXQgY2hlY2tvdXQgVEFHX0YxXzIgJiYKKwkJbHMgJiYKKwkJdGVzdCAtZiBmMQorCSkKKycKKworIyBFeHBvcnQgc29tZSBnaXQgdGFncyB0byBwNAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwb3J0IGdpdCB0YWdzIHRvIHA0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgdGFnIC1tICJBIHRhZyBjcmVhdGVkIGluIGdpdDp4eXp6eSIgR0lUX1RBR18xICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+bWFpbi9mMTAgJiYKKwkJZ2l0IGFkZCBtYWluL2YxMCAmJgorCQlnaXQgY29tbWl0IC1tICJBZGRpbmcgZmlsZSBmb3IgZXhwb3J0IHRlc3QiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlnaXQgdGFnIC1tICJBbm90aGVyIGdpdCB0YWciIEdJVF9UQUdfMiAmJgorCQlnaXQgdGFnIExJR0hUV0VJR0hUX1RBRyAmJgorCQlnaXQgcDQgcmViYXNlIC0taW1wb3J0LWxhYmVscyAtLXZlcmJvc2UgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWV4cG9ydC1sYWJlbHMgLS12ZXJib3NlCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgLi4uICYmCisJCXA0IGxhYmVscyAuLi4gfCBncmVwIEdJVF9UQUdfMSAmJgorCQlwNCBsYWJlbHMgLi4uIHwgZ3JlcCBHSVRfVEFHXzIgJiYKKwkJcDQgbGFiZWxzIC4uLiB8IGdyZXAgTElHSFRXRUlHSFRfVEFHICYmCisJCXA0IGxhYmVsIC1vIEdJVF9UQUdfMSB8IGdyZXAgInRhZyBjcmVhdGVkIGluIGdpdDp4eXp6eSIgJiYKKwkJcDQgc3luYyAuLi5AR0lUX1RBR18xICYmCisJCSEgdGVzdCAtZiBtYWluL2YxMAorCQlwNCBzeW5jIC4uLkBHSVRfVEFHXzIgJiYKKwkJdGVzdCAtZiBtYWluL2YxMAorCSkKKycKKworIyBFeHBvcnQgYSB0YWcgZnJvbSBnaXQgd2hlcmUgYW4gYWZmZWN0ZWQgZmlsZSBpcyBkZWxldGVkIGxhdGVyIG9uCisjIE5lZWQgdG8gY3JlYXRlIGdpdCB0YWdzIGFmdGVyIHJlYmFzZSwgc2luY2Ugb25seSB0aGVuIGNhbiB0aGUKKyMgZ2l0IGNvbW1pdHMgYmUgbWFwcGVkIHRvIHA0IGNoYW5nZWxpc3RzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwb3J0IGdpdCB0YWdzIHRvIHA0IHdpdGggZGVsZXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0taW1wb3J0LWxhYmVscyAmJgorCQllY2hvICJkZWxldGVkIGZpbGUiID5tYWluL2RlbGV0ZWRfZmlsZSAmJgorCQlnaXQgYWRkIG1haW4vZGVsZXRlZF9maWxlICYmCisJCWdpdCBjb21taXQgLW0gImNyZWF0ZSBkZWxldGVkIGZpbGUiICYmCisJCWdpdCBybSBtYWluL2RlbGV0ZWRfZmlsZSAmJgorCQllY2hvICJuZXcgZmlsZSIgPm1haW4vZjExICYmCisJCWdpdCBhZGQgbWFpbi9mMTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIHRoZSBkZWxldGVkIGZpbGUiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlnaXQgcDQgcmViYXNlIC0taW1wb3J0LWxhYmVscyAtLXZlcmJvc2UgJiYKKwkJZ2l0IHRhZyAtbSAidGFnIG9uIGRlbGV0ZWQgZmlsZSIgR0lUX1RBR19PTl9ERUxFVEVEIEhFQUR+MSAmJgorCQlnaXQgdGFnIC1tICJ0YWcgYWZ0ZXIgZGVsZXRpb24iIEdJVF9UQUdfQUZURVJfREVMRVRJT04gSEVBRCAmJgorCQlnaXQgcDQgc3VibWl0IC0tZXhwb3J0LWxhYmVscyAtLXZlcmJvc2UKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAuLi4gJiYKKwkJcDQgc3luYyAuLi5AR0lUX1RBR19PTl9ERUxFVEVEICYmCisJCXRlc3QgLWYgbWFpbi9kZWxldGVkX2ZpbGUgJiYKKwkJcDQgc3luYyAuLi5AR0lUX1RBR19BRlRFUl9ERUxFVElPTiAmJgorCQkhIHRlc3QgLWYgbWFpbi9kZWxldGVkX2ZpbGUgJiYKKwkJZWNobyAiY2hlY2tpbmcgbGFiZWwgY29udGVudHMiICYmCisJCXA0IGxhYmVsIC1vIEdJVF9UQUdfT05fREVMRVRFRCB8IGdyZXAgInRhZyBvbiBkZWxldGVkIGZpbGUiCisJKQorJworCisjIENyZWF0ZSBhIHRhZyBpbiBnaXQgdGhhdCBjYW5ub3QgYmUgZXhwb3J0ZWQgdG8gcDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyB0aGF0IGNhbm5vdCBiZSBleHBvcnRlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGFfYnJhbmNoICYmCisJCWVjaG8gImhlbGxvIiA+bWFpbi9mMTIgJiYKKwkJZ2l0IGFkZCBtYWluL2YxMiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGRpbmcgZjEyIiAmJgorCQlnaXQgdGFnIC1tICJ0YWcgb24gYV9icmFuY2giIEdJVF9UQUdfT05fQV9CUkFOQ0ggJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcDQgc3VibWl0IC0tZXhwb3J0LWxhYmVscworCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jIC4uLiAmJgorCQkhKHA0IGxhYmVscyB8IGdyZXAgR0lUX1RBR19PTl9BX0JSQU5DSCkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBnaXQgY29uZmlnIHRvIGVuYWJsZSBpbXBvcnQvZXhwb3J0IG9mIHRhZ3MnICcKKwlnaXQgcDQgY2xvbmUgLS12ZXJib3NlIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5leHBvcnRMYWJlbHMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5pbXBvcnRMYWJlbHMgdHJ1ZSAmJgorCQlnaXQgdGFnIENGR19BX0dJVF9UQUcgJiYKKwkJZ2l0IHA0IHJlYmFzZSAtLXZlcmJvc2UgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXZlcmJvc2UgJiYKKwkJZ2l0IHRhZyAmJgorCQlnaXQgdGFnIHwgZ3JlcCBUQUdfRjFfMQorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBsYWJlbHMgJiYKKwkJcDQgbGFiZWxzIHwgZ3JlcCBDRkdfQV9HSVRfVEFHCisJKQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODEyLWdpdC1wNC13aWxkY2FyZHMuc2ggYi90L3Q5ODEyLWdpdC1wNC13aWxkY2FyZHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQzZDQxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTItZ2l0LXA0LXdpbGRjYXJkcy5zaApAQCAtMCwwICsxLDE0NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCB3aWxkY2FyZHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcDQgZmlsZXMgd2l0aCB3aWxkY2FyZHMgaW4gdGhlIG5hbWVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcHJpbnRmICJmaWxlMlxuaGFzXG5zb21lXG5yYW5kb21cbnRleHRcbiIgPmZpbGUyICYmCisJCXA0IGFkZCBmaWxlMiAmJgorCQllY2hvIGZpbGUtd2lsZC1oYXNoID5maWxlLXdpbGQjaGFzaCAmJgorCQllY2hvIGZpbGUtd2lsZC1zdGFyID5maWxlLXdpbGRcKnN0YXIgJiYKKwkJZWNobyBmaWxlLXdpbGQtYXQgPmZpbGUtd2lsZEBhdCAmJgorCQllY2hvIGZpbGUtd2lsZC1wZXJjZW50ID5maWxlLXdpbGQlcGVyY2VudCAmJgorCQlwNCBhZGQgLWYgZmlsZS13aWxkKiAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGUgd2lsZGNhcmRzIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgZmlsZXMgZ2l0IHA0IGNsb25lJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3QgLWYgZmlsZS13aWxkI2hhc2ggJiYKKwkJdGVzdCAtZiBmaWxlLXdpbGRcKnN0YXIgJiYKKwkJdGVzdCAtZiBmaWxlLXdpbGRAYXQgJiYKKwkJdGVzdCAtZiBmaWxlLXdpbGQlcGVyY2VudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgZmlsZXMgc3VibWl0IGJhY2sgdG8gcDQsIGFkZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGdpdC13aWxkLWhhc2ggPmdpdC13aWxkI2hhc2ggJiYKKwkJZWNobyBnaXQtd2lsZC1zdGFyID5naXQtd2lsZFwqc3RhciAmJgorCQllY2hvIGdpdC13aWxkLWF0ID5naXQtd2lsZEBhdCAmJgorCQllY2hvIGdpdC13aWxkLXBlcmNlbnQgPmdpdC13aWxkJXBlcmNlbnQgJiYKKwkJZ2l0IGFkZCBnaXQtd2lsZCogJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHNvbWUgd2lsZGNhcmQgZmlsZW5hbWVzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZ2l0LXdpbGQjaGFzaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBnaXQtd2lsZFwqc3RhciAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBnaXQtd2lsZEBhdCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBnaXQtd2lsZCVwZXJjZW50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCBmaWxlcyBzdWJtaXQgYmFjayB0byBwNCwgbW9kaWZ5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbmV3LWxpbmUgPj5naXQtd2lsZCNoYXNoICYmCisJCWVjaG8gbmV3LWxpbmUgPj5naXQtd2lsZFwqc3RhciAmJgorCQllY2hvIG5ldy1saW5lID4+Z2l0LXdpbGRAYXQgJiYKKwkJZWNobyBuZXctbGluZSA+PmdpdC13aWxkJXBlcmNlbnQgJiYKKwkJZ2l0IGFkZCBnaXQtd2lsZCogJiYKKwkJZ2l0IGNvbW1pdCAtbSAibW9kaWZ5IHRoZSB3aWxkY2FyZCBmaWxlcyIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgZ2l0LXdpbGQjaGFzaCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGdpdC13aWxkXCpzdGFyICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgZ2l0LXdpbGRAYXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBnaXQtd2lsZCVwZXJjZW50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCBmaWxlcyBzdWJtaXQgYmFjayB0byBwNCwgY29weScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQljcCBmaWxlMiBnaXQtd2lsZC1jcCNoYXNoICYmCisJCWdpdCBhZGQgZ2l0LXdpbGQtY3AjaGFzaCAmJgorCQljcCBnaXQtd2lsZFwqc3RhciBmaWxlLXdpbGQtMyAmJgorCQlnaXQgYWRkIGZpbGUtd2lsZC0zICYmCisJCWdpdCBjb21taXQgLW0gIndpbGRjYXJkIGNvcGllcyIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzSGFyZGVyIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGdpdC13aWxkLWNwI2hhc2ggJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZS13aWxkLTMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHN1Ym1pdCBiYWNrIHRvIHA0LCByZW5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IG12IGdpdC13aWxkQGF0IGZpbGUtd2lsZC00ICYmCisJCWdpdCBtdiBmaWxlLXdpbGQtMyBnaXQtd2lsZC1jcCVwZXJjZW50ICYmCisJCWdpdCBjb21taXQgLW0gIndpbGRjYXJkIHJlbmFtZXMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZ2l0LXdpbGRAYXQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZ2l0LXdpbGQtY3AlcGVyY2VudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgZmlsZXMgc3VibWl0IGJhY2sgdG8gcDQsIGRlbGV0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcm0gZ2l0LXdpbGQqICYmCisJCWdpdCBjb21taXQgLW0gImRlbGV0ZSB0aGUgd2lsZGNhcmQgZmlsZXMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBnaXQtd2lsZCNoYXNoICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkXCpzdGFyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkQGF0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkJXBlcmNlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODEzLWdpdC1wNC1wcmVzZXJ2ZS11c2Vycy5zaCBiL3QvdDk4MTMtZ2l0LXA0LXByZXNlcnZlLXVzZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyZTg1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODEzLWdpdC1wNC1wcmVzZXJ2ZS11c2Vycy5zaApAQCAtMCwwICsxLDE1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBwcmVzZXJ2ZSB1c2VycycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmaWxlcycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGNsaWVudCAtbyB8IHNlZCAiL0xpbmVFbmQvcy86LiovOnVuaXgvIiB8IHA0IGNsaWVudCAtaSAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlwNCBhZGQgZmlsZTEgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgZmlsZXMiCisJKQorJworCitwNF9hZGRfdXNlcigpIHsKKwluYW1lPSQxIGZ1bGxuYW1lPSQyICYmCisJcDQgdXNlciAtZiAtaSA8PC1FT0YgJiYKKwlVc2VyOiAkbmFtZQorCUVtYWlsOiAkbmFtZUBsb2NhbGhvc3QKKwlGdWxsTmFtZTogJGZ1bGxuYW1lCisJRU9GCisJcDQgcGFzc3dkIC1QIHNlY3JldCAkbmFtZQorfQorCitwNF9ncmFudF9hZG1pbigpIHsKKwluYW1lPSQxICYmCisJeworCQlwNCBwcm90ZWN0IC1vICYmCisJCWVjaG8gIiAgICBhZG1pbiB1c2VyICRuYW1lICogLy9kZXBvdC8uLi4iCisJfSB8IHA0IHByb3RlY3QgLWkKK30KKworcDRfY2hlY2tfY29tbWl0X2F1dGhvcigpIHsKKwlmaWxlPSQxIHVzZXI9JDIgJiYKKwlwNCBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8kZmlsZSB8IGdyZXAgLXEgJHVzZXIKK30KKworbWFrZV9jaGFuZ2VfYnlfdXNlcigpIHsKKwlmaWxlPSQxIG5hbWU9JDIgZW1haWw9JDMgJiYKKwllY2hvICJ1c2VybmFtZTogYSBjaGFuZ2UgYnkgJG5hbWUiID4+IiRmaWxlIiAmJgorCWdpdCBhZGQgIiRmaWxlIiAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIiRuYW1lIDwkZW1haWw+IiAtbSAiYSBjaGFuZ2UgYnkgJG5hbWUiCit9CisKKyMgVGVzdCB1c2VybmFtZSBzdXBwb3J0LCBzdWJtaXR0aW5nIGFzIHVzZXIgJ2FsaWNlJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgdXNlcnMnICcKKwlwNF9hZGRfdXNlciBhbGljZSBBbGljZSAmJgorCXA0X2FkZF91c2VyIGJvYiBCb2IgJiYKKwlwNF9ncmFudF9hZG1pbiBhbGljZSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvICJ1c2VybmFtZTogYSBjaGFuZ2UgYnkgYWxpY2UiID4+ZmlsZTEgJiYKKwkJZWNobyAidXNlcm5hbWU6IGEgY2hhbmdlIGJ5IGJvYiIgPj5maWxlMiAmJgorCQlnaXQgY29tbWl0IC0tYXV0aG9yICJBbGljZSA8YWxpY2VAbG9jYWxob3N0PiIgLW0gImEgY2hhbmdlIGJ5IGFsaWNlIiBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC0tYXV0aG9yICJCb2IgPGJvYkBsb2NhbGhvc3Q+IiAtbSAiYSBjaGFuZ2UgYnkgYm9iIiBmaWxlMiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJUDRFRElUT1I9dG91Y2ggUDRVU0VSPWFsaWNlIFA0UEFTU1dEPXNlY3JldCBnaXQgcDQgY29tbWl0IC0tcHJlc2VydmUtdXNlciAmJgorCQlwNF9jaGVja19jb21taXRfYXV0aG9yIGZpbGUxIGFsaWNlICYmCisJCXA0X2NoZWNrX2NvbW1pdF9hdXRob3IgZmlsZTIgYm9iCisJKQorJworCisjIFRlc3QgdXNlcm5hbWUgc3VwcG9ydCwgc3VibWl0dGluZyBhcyBib2IsIHdobyBsYWNrcyBhZG1pbiByaWdodHMuIFNob3VsZAorIyBub3Qgc3VibWl0IGNoYW5nZSB0byBwNCAoZ2l0IGRpZmYgc2hvdWxkIHNob3cgZGVsdGFzKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSB0byBwcmVzZXJ2ZSB1c2VycyB3aXRob3V0IHBlcm1zJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2sgdHJ1ZSAmJgorCQllY2hvICJ1c2VybmFtZS1ub3Blcm1zOiBhIGNoYW5nZSBieSBhbGljZSIgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC0tYXV0aG9yICJBbGljZSA8YWxpY2VAbG9jYWxob3N0PiIgLW0gInBlcm1zOiBhIGNoYW5nZSBieSBhbGljZSIgZmlsZTEgJiYKKwkJUDRFRElUT1I9dG91Y2ggUDRVU0VSPWJvYiBQNFBBU1NXRD1zZWNyZXQgJiYKKwkJZXhwb3J0IFA0RURJVE9SIFA0VVNFUiBQNFBBU1NXRCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY29tbWl0IC0tcHJlc2VydmUtdXNlciAmJgorCQkhIGdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQuLnA0L21hc3RlcgorCSkKKycKKworIyBXaGF0IGhhcHBlbnMgd2l0aCB1bmtub3duIGF1dGhvcj8gV2l0aG91dCBhbGxvd01pc3NpbmdQNFVzZXJzIGl0IHNob3VsZCBmYWlsLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgdXNlciB3aGVyZSBhdXRob3IgaXMgdW5rbm93biB0byBwNCcgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZWNobyAidXNlcm5hbWUtYm9iOiBhIGNoYW5nZSBieSBib2IiID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtLWF1dGhvciAiQm9iIDxib2JAbG9jYWxob3N0PiIgLW0gInByZXNlcnZlOiBhIGNoYW5nZSBieSBib2IiIGZpbGUxICYmCisJCWVjaG8gInVzZXJuYW1lLXVua25vd246IGEgY2hhbmdlIGJ5IGNoYXJsaWUiID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtLWF1dGhvciAiQ2hhcmxpZSA8Y2hhcmxpZUBsb2NhbGhvc3Q+IiAtbSAicHJlc2VydmU6IGEgY2hhbmdlIGJ5IGNoYXJsaWUiIGZpbGUxICYmCisJCVA0RURJVE9SPXRvdWNoIFA0VVNFUj1hbGljZSBQNFBBU1NXRD1zZWNyZXQgJiYKKwkJZXhwb3J0IFA0RURJVE9SIFA0VVNFUiBQNFBBU1NXRCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY29tbWl0IC0tcHJlc2VydmUtdXNlciAmJgorCQkhIGdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQuLnA0L21hc3RlciAmJgorCisJCWVjaG8gIiQwOiByZXBlYXQgd2l0aCBhbGxvd01pc3NpbmdQNFVzZXJzIGVuYWJsZWQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmFsbG93TWlzc2luZ1A0VXNlcnMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5wcmVzZXJ2ZVVzZXIgdHJ1ZSAmJgorCQlnaXQgcDQgY29tbWl0ICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQuLnA0L21hc3RlciAmJgorCQlwNF9jaGVja19jb21taXRfYXV0aG9yIGZpbGUxIGFsaWNlCisJKQorJworCisjIElmIHdlJ3JlICpub3QqIHVzaW5nIC0tcHJlc2VydmUtdXNlciwgZ2l0LXA0IHNob3VsZCB3YXJuIGlmIHdlJ3JlIHN1Ym1pdHRpbmcKKyMgY2hhbmdlcyB0aGF0IGFyZSBub3QgYWxsIG91cnMuCisjIFRlc3Q6IHVzZXIgaW4gcDQgYW5kIHVzZXIgdW5rbm93biB0byBwNC4KKyMgVGVzdDogd2FybmluZyBkaXNhYmxlZCBhbmQgdXNlciBpcyB0aGUgc2FtZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBwcmVzZXJ2aW5nIHVzZXIgd2l0aCBtaXhlZCBhdXRob3JzaGlwJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2sgdHJ1ZSAmJgorCQlwNF9hZGRfdXNlciBkZXJlayBEZXJlayAmJgorCisJCW1ha2VfY2hhbmdlX2J5X3VzZXIgdXNlcm5hbWVmaWxlMyBEZXJlayBkZXJla0Bsb2NhbGhvc3QgJiYKKwkJUDRFRElUT1I9Y2F0IFA0VVNFUj1hbGljZSBQNFBBU1NXRD1zZWNyZXQgJiYKKwkJZXhwb3J0IFA0RURJVE9SIFA0VVNFUiBQNFBBU1NXRCAmJgorCQlnaXQgcDQgY29tbWl0IHxcCisJCWdyZXAgImdpdCBhdXRob3IgZGVyZWtAbG9jYWxob3N0IGRvZXMgbm90IG1hdGNoIiAmJgorCisJCW1ha2VfY2hhbmdlX2J5X3VzZXIgdXNlcm5hbWVmaWxlMyBDaGFybGllIGNoYXJsaWVAbG9jYWxob3N0ICYmCisJCWdpdCBwNCBjb21taXQgfFwKKwkJZ3JlcCAiZ2l0IGF1dGhvciBjaGFybGllQGxvY2FsaG9zdCBkb2VzIG5vdCBtYXRjaCIgJiYKKworCQltYWtlX2NoYW5nZV9ieV91c2VyIHVzZXJuYW1lZmlsZTMgYWxpY2UgYWxpY2VAbG9jYWxob3N0ICYmCisJCWdpdCBwNCBjb21taXQgfFwKKwkJdGVzdF9tdXN0X2ZhaWwgZ3JlcCAiZ2l0IGF1dGhvci4qZG9lcyBub3QgbWF0Y2giICYmCisKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFVzZXJOYW1lQ2hlY2sgdHJ1ZSAmJgorCQltYWtlX2NoYW5nZV9ieV91c2VyIHVzZXJuYW1lZmlsZTMgQ2hhcmxpZSBjaGFybGllQGxvY2FsaG9zdCAmJgorCQlnaXQgcDQgY29tbWl0IHxcCisJCXRlc3RfbXVzdF9mYWlsIGdyZXAgImdpdCBhdXRob3IuKmRvZXMgbm90IG1hdGNoIiAmJgorCisJCXA0X2NoZWNrX2NvbW1pdF9hdXRob3IgdXNlcm5hbWVmaWxlMyBhbGljZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTQtZ2l0LXA0LXJlbmFtZS5zaCBiL3QvdDk4MTQtZ2l0LXA0LXJlbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYmYxMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgxNC1naXQtcDQtcmVuYW1lLnNoCkBAIC0wLDAgKzEsMjA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHJlbmFtZScKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKKyMgV2UgcmVseSBvbiB0aGlzIGJlaGF2aW9yIHRvIGRldGVjdCBmb3IgcDQgbW92ZSBhdmFpbGFiaWxpdHkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwNCBoZWxwIHVua25vd24gcmV0dXJucyAxJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJKAorCQkJcDQgaGVscCBjbGllbnQgPmVycnMgMj4mMQorCQkJZWNobyAkPyA+cmV0dmFsCisJCSkKKwkJZWNobyAwID5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCByZXR2YWwgJiYKKwkJcm0gcmV0dmFsICYmCisJCSgKKwkJCXA0IGhlbHAgbm9zdWNoY29tbWFuZCA+ZXJycyAyPiYxCisJCQllY2hvICQ/ID5yZXR2YWwKKwkJKQorCQllY2hvIDEgPmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIHJldHZhbCAmJgorCQlybSByZXR2YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmaWxlcycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGNsaWVudCAtbyB8IHNlZCAiL0xpbmVFbmQvcy86LiovOnVuaXgvIiB8IHA0IGNsaWVudCAtaSAmJgorCQljYXQgPmZpbGUxIDw8LUVPRiAmJgorCQlBIGxhcmdlIGJsb2NrIG9mIHRleHQKKwkJaW4gZmlsZTEgdGhhdCB3aWxsIGdlbmVyYXRlCisJCWVub3VnaCBjb250ZXh0IHNvIHRoYXQgcmVuYW1lCisJCWFuZCBjb3B5IGRldGVjdGlvbiB3aWxsIGZpbmQKKwkJc29tZXRoaW5nIGludGVyZXN0aW5nIHRvIGRvLgorCQlFT0YKKwkJY2F0ID5maWxlMiA8PC1FT0YgJiYKKwkJLyoKKwkJICogVGhpcyBibG9iIGxvb2tzIGEgYml0CisJCSAqIGRpZmZlcmVudC4KKwkJICovCisJCWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKwkJeworCQkJY2hhciB0ZXh0WzIwMF07CisKKwkJCXN0cmNweSh0ZXh0LCAiY29weS9yZW5hbWUgdGhpcyIpOworCQkJcHJpbnRmKCJ0ZXh0IGlzICVzXG4iLCB0ZXh0KTsKKwkJCXJldHVybiAwOworCQl9CisJCUVPRgorCQlwNCBhZGQgZmlsZTEgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgZmlsZXMiCisJKQorJworCisjIFJlbmFtZSBhIGZpbGUgYW5kIGNvbmZpcm0gdGhhdCByZW5hbWUgaXMgbm90IGRldGVjdGVkIGluIFA0LgorIyBSZW5hbWUgdGhlIG5ldyBmaWxlIGFnYWluIHdpdGggZGV0ZWN0UmVuYW1lcyBvcHRpb24gZW5hYmxlZCBhbmQgY29uZmlybSB0aGF0CisjIHRoaXMgaXMgZGV0ZWN0ZWQgaW4gUDQuCisjIFJlbmFtZSB0aGUgbmV3IGZpbGUgYWdhaW4gYWRkaW5nIGFuIGV4dHJhIGxpbmUsIGNvbmZpZ3VyZSBhIGJpZyB0aHJlc2hvbGQgaW4KKyMgZGV0ZWN0UmVuYW1lcyBhbmQgY29uZmlybSB0aGF0IHJlbmFtZSBpcyBub3QgZGV0ZWN0ZWQgaW4gUDQuCisjIFJlcGVhdCwgdGhpcyB0aW1lIHdpdGggYSBzbWFsbGVyIHRocmVzaG9sZCBhbmQgY29uZmlybSB0aGF0IHRoZSByZW5hbWUgaXMKKyMgZGV0ZWN0ZWQgaW4gUDQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgcmVuYW1lcycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCisJCWdpdCBtdiBmaWxlMSBmaWxlNCAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJSZW5hbWUgZmlsZTEgdG8gZmlsZTQiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlNCA+ZmlsZWxvZyAmJgorCQkhIGdyZXAgIiBmcm9tIC8vZGVwb3QiIGZpbGVsb2cgJiYKKworCQlnaXQgbXYgZmlsZTQgZmlsZTUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiUmVuYW1lIGZpbGU0IHRvIGZpbGU1IiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGU1ID5maWxlbG9nICYmCisJCWdyZXAgIiBmcm9tIC8vZGVwb3QvZmlsZTQiIGZpbGVsb2cgJiYKKworCQlnaXQgbXYgZmlsZTUgZmlsZTYgJiYKKwkJZWNobyB1cGRhdGUgPj5maWxlNiAmJgorCQlnaXQgYWRkIGZpbGU2ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIlJlbmFtZSBmaWxlNSB0byBmaWxlNiB3aXRoIGNoYW5nZXMiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCAmJgorCQlsZXZlbD0kKGdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCB8IHNlZCAxZCB8IGN1dCAtZjEgfCBjdXQgLWQiICIgLWY1IHwgc2VkICJzL1IwKi8vIikgJiYKKwkJdGVzdCAtbiAiJGxldmVsIiAmJiB0ZXN0ICIkbGV2ZWwiIC1ndCAwICYmIHRlc3QgIiRsZXZlbCIgLWx0IDk4ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgJCgoJGxldmVsICsgMikpICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGU2ID5maWxlbG9nICYmCisJCSEgZ3JlcCAiIGZyb20gLy9kZXBvdCIgZmlsZWxvZyAmJgorCisJCWdpdCBtdiBmaWxlNiBmaWxlNyAmJgorCQllY2hvIHVwZGF0ZSA+PmZpbGU3ICYmCisJCWdpdCBhZGQgZmlsZTcgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiUmVuYW1lIGZpbGU2IHRvIGZpbGU3IHdpdGggY2hhbmdlcyIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtTSBIRUFEICYmCisJCWxldmVsPSQoZ2l0IGRpZmYtdHJlZSAtciAtTSBIRUFEIHwgc2VkIDFkIHwgY3V0IC1mMSB8IGN1dCAtZCIgIiAtZjUgfCBzZWQgInMvUjAqLy8iKSAmJgorCQl0ZXN0IC1uICIkbGV2ZWwiICYmIHRlc3QgIiRsZXZlbCIgLWd0IDIgJiYgdGVzdCAiJGxldmVsIiAtbHQgMTAwICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgJCgoJGxldmVsIC0gMikpICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGU3ID5maWxlbG9nICYmCisJCWdyZXAgIiBmcm9tIC8vZGVwb3QvZmlsZTYiIGZpbGVsb2cKKwkpCisnCisKKyMgQ29weSBhIGZpbGUgYW5kIGNvbmZpcm0gdGhhdCBjb3B5IGlzIG5vdCBkZXRlY3RlZCBpbiBQNC4KKyMgQ29weSBhIGZpbGUgd2l0aCBkZXRlY3RDb3BpZXMgb3B0aW9uIGVuYWJsZWQgYW5kIGNvbmZpcm0gdGhhdCBjb3B5IGlzIG5vdAorIyBkZXRlY3RlZCBpbiBQNC4KKyMgTW9kaWZ5IGFuZCBjb3B5IGEgZmlsZSB3aXRoIGRldGVjdENvcGllcyBvcHRpb24gZW5hYmxlZCBhbmQgY29uZmlybSB0aGF0IGNvcHkKKyMgaXMgZGV0ZWN0ZWQgaW4gUDQuCisjIENvcHkgYSBmaWxlIHdpdGggZGV0ZWN0Q29waWVzIGFuZCBkZXRlY3RDb3BpZXNIYXJkZXIgb3B0aW9ucyBlbmFibGVkIGFuZAorIyBjb25maXJtIHRoYXQgY29weSBpcyBkZXRlY3RlZCBpbiBQNC4KKyMgTW9kaWZ5IGFuZCBjb3B5IGEgZmlsZSwgY29uZmlndXJlIGEgYmlnZ2VyIHRocmVzaG9sZCBpbiBkZXRlY3RDb3BpZXMgYW5kCisjIGNvbmZpcm0gdGhhdCBjb3B5IGlzIG5vdCBkZXRlY3RlZCBpbiBQNC4KKyMgTW9kaWZ5IGFuZCBjb3B5IGEgZmlsZSwgY29uZmlndXJlIGEgc21hbGxlciB0aHJlc2hvbGQgaW4gZGV0ZWN0Q29waWVzIGFuZAorIyBjb25maXJtIHRoYXQgY29weSBpcyBkZXRlY3RlZCBpbiBQNC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBjb3BpZXMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKworCQljcCBmaWxlMiBmaWxlOCAmJgorCQlnaXQgYWRkIGZpbGU4ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNvcHkgZmlsZTIgdG8gZmlsZTgiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgSEVBRCAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlOCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTggfCB0ZXN0X211c3RfZmFpbCBncmVwIC1xICJicmFuY2ggZnJvbSIgJiYKKworCQljcCBmaWxlMiBmaWxlOSAmJgorCQlnaXQgYWRkIGZpbGU5ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNvcHkgZmlsZTIgdG8gZmlsZTkiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgSEVBRCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlOSAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTkgfCB0ZXN0X211c3RfZmFpbCBncmVwIC1xICJicmFuY2ggZnJvbSIgJiYKKworCQllY2hvICJmaWxlMiIgPj5maWxlMiAmJgorCQljcCBmaWxlMiBmaWxlMTAgJiYKKwkJZ2l0IGFkZCBmaWxlMiBmaWxlMTAgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IGFuZCBjb3B5IGZpbGUyIHRvIGZpbGUxMCIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtQyBIRUFEICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTEwIHwgZ3JlcCAtcSAiYnJhbmNoIGZyb20gLy9kZXBvdC9maWxlIiAmJgorCisJCWNwIGZpbGUyIGZpbGUxMSAmJgorCQlnaXQgYWRkIGZpbGUxMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDb3B5IGZpbGUyIHRvIGZpbGUxMSIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEICYmCisJCXNyYz0kKGdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCB8IHNlZCAxZCB8IGN1dCAtZjIpICYmCisJCXRlc3QgIiRzcmMiID0gZmlsZTEwICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlciB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMSAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTExIHwgZ3JlcCAtcSAiYnJhbmNoIGZyb20gLy9kZXBvdC9maWxlIiAmJgorCisJCWNwIGZpbGUyIGZpbGUxMiAmJgorCQllY2hvICJzb21lIHRleHQiID4+ZmlsZTEyICYmCisJCWdpdCBhZGQgZmlsZTEyICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNvcHkgZmlsZTIgdG8gZmlsZTEyIHdpdGggY2hhbmdlcyIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEICYmCisJCWxldmVsPSQoZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEIHwgc2VkIDFkIHwgY3V0IC1mMSB8IGN1dCAtZCIgIiAtZjUgfCBzZWQgInMvQzAqLy8iKSAmJgorCQl0ZXN0IC1uICIkbGV2ZWwiICYmIHRlc3QgIiRsZXZlbCIgLWd0IDAgJiYgdGVzdCAiJGxldmVsIiAtbHQgOTggJiYKKwkJc3JjPSQoZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEIHwgc2VkIDFkIHwgY3V0IC1mMikgJiYKKwkJdGVzdCAiJHNyYyIgPSBmaWxlMTAgLW8gIiRzcmMiID0gZmlsZTExICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyAkKCgkbGV2ZWwgKyAyKSkgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTEyICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlMTIgfCB0ZXN0X211c3RfZmFpbCBncmVwIC1xICJicmFuY2ggZnJvbSIgJiYKKworCQljcCBmaWxlMiBmaWxlMTMgJiYKKwkJZWNobyAiZGlmZmVyZW50IHRleHQiID4+ZmlsZTEzICYmCisJCWdpdCBhZGQgZmlsZTEzICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNvcHkgZmlsZTIgdG8gZmlsZTEzIHdpdGggY2hhbmdlcyIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEICYmCisJCWxldmVsPSQoZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEIHwgc2VkIDFkIHwgY3V0IC1mMSB8IGN1dCAtZCIgIiAtZjUgfCBzZWQgInMvQzAqLy8iKSAmJgorCQl0ZXN0IC1uICIkbGV2ZWwiICYmIHRlc3QgIiRsZXZlbCIgLWd0IDIgJiYgdGVzdCAiJGxldmVsIiAtbHQgMTAwICYmCisJCXNyYz0kKGdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCB8IHNlZCAxZCB8IGN1dCAtZjIpICYmCisJCXRlc3QgIiRzcmMiID0gZmlsZTEwIC1vICIkc3JjIiA9IGZpbGUxMSAtbyAiJHNyYyIgPSBmaWxlMTIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzICQoKCRsZXZlbCAtIDIpKSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlMTMgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMyB8IGdyZXAgLXEgImJyYW5jaCBmcm9tIC8vZGVwb3QvZmlsZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODE1LWdpdC1wNC1zdWJtaXQtZmFpbC5zaCBiL3QvdDk4MTUtZ2l0LXA0LXN1Ym1pdC1mYWlsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyYjdiM2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODE1LWdpdC1wNC1zdWJtaXQtZmFpbC5zaApAQCAtMCwwICsxLDQyOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBzdWJtaXQgZmFpbHVyZSBoYW5kbGluZycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp1bml4LyIgfCBwNCBjbGllbnQgLWkgJiYKKwkJZWNobyBsaW5lMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTEgaW4gZmlsZTEiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBvbiBvbmUgY29tbWl0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyBsaW5lMiA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTIgaW4gZmlsZTEiCisJKSAmJgorCSgKKwkJIyBub3cgdGhpcyBjb21taXQgc2hvdWxkIGNhdXNlIGEgY29uZmxpY3QKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZWNobyBsaW5lMyA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTMgaW4gZmlsZTEgd2lsbCBjb25mbGljdCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJObyBjb21taXRzIGFwcGxpZWQiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3Qgb24gc2Vjb25kIG9mIHR3byBjb21taXRzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyBsaW5lMyA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTMgaW4gZmlsZTEiCisJKSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyB0aGlzIGNvbW1pdCBpcyBva2F5CisJCXRlc3RfY29tbWl0ICJmaXJzdF9jb21taXRfb2theSIgJiYKKwkJIyBub3cgdGhpcyBzdWJtaXQgc2hvdWxkIGNhdXNlIGEgY29uZmxpY3QKKwkJZWNobyBsaW5lNCA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTQgaW4gZmlsZTEgd2lsbCBjb25mbGljdCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIG9ubHkgdGhlIGNvbW1pdHMiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3Qgb24gZmlyc3Qgb2YgdHdvIGNvbW1pdHMsIHNraXAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBmaWxlMSAmJgorCQllY2hvIGxpbmU0ID4+ZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJsaW5lNCBpbiBmaWxlMSIKKwkpICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIHRoaXMgc3VibWl0IHNob3VsZCBjYXVzZSBhIGNvbmZsaWN0CisJCWVjaG8gbGluZTUgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImxpbmU1IGluIGZpbGUxIHdpbGwgY29uZmxpY3QiICYmCisJCSMgYnV0IHRoaXMgY29tbWl0IGlzIG9rYXkKKwkJdGVzdF9jb21taXQgIm9rYXlfY29tbWl0X2FmdGVyX3NraXAiICYmCisJCWVjaG8gcyB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0ID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQXBwbGllZCBvbmx5IHRoZSBjb21taXRzIiBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0IG9uIGZpcnN0IG9mIHR3byBjb21taXRzLCBxdWl0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyBsaW5lNyA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTcgaW4gZmlsZTEiCisJKSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyB0aGlzIHN1Ym1pdCBzaG91bGQgY2F1c2UgYSBjb25mbGljdAorCQllY2hvIGxpbmU4ID4+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJsaW5lOCBpbiBmaWxlMSB3aWxsIGNvbmZsaWN0IiAmJgorCQkjIGJ1dCB0aGlzIGNvbW1pdCBpcyBva2F5CisJCXRlc3RfY29tbWl0ICJva2F5X2NvbW1pdF9hZnRlcl9xdWl0IiAmJgorCQllY2hvIHEgfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIk5vIGNvbW1pdHMgYXBwbGllZCIgb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBjbGkgYW5kIGNvbmZpZyBvcHRpb25zJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzdWJtaXQgLS1jb25mbGljdD1hc2sgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWNvbmZsaWN0PXNraXAgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWNvbmZsaWN0PXF1aXQgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBwNCBzdWJtaXQgLS1jb25mbGljdD1mb28gJiYKKwkJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBwNCBzdWJtaXQgLS1jb25mbGljdCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5jb25mbGljdCBmb28gJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IGdpdC1wNC5jb25mbGljdCAmJgorCQlnaXQgcDQgc3VibWl0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBvbiBmaXJzdCBvZiB0d28gY29tbWl0cywgLS1jb25mbGljdD1za2lwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyBsaW5lOSA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTkgaW4gZmlsZTEiCisJKSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyB0aGlzIHN1Ym1pdCBzaG91bGQgY2F1c2UgYSBjb25mbGljdAorCQllY2hvIGxpbmUxMCA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTEwIGluIGZpbGUxIHdpbGwgY29uZmxpY3QiICYmCisJCSMgYnV0IHRoaXMgY29tbWl0IGlzIG9rYXkKKwkJdGVzdF9jb21taXQgIm9rYXlfY29tbWl0X2FmdGVyX2F1dG9fc2tpcCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgLS1jb25mbGljdD1za2lwID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQXBwbGllZCBvbmx5IHRoZSBjb21taXRzIiBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0IG9uIGZpcnN0IG9mIHR3byBjb21taXRzLCAtLWNvbmZsaWN0PXF1aXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBmaWxlMSAmJgorCQllY2hvIGxpbmUxMSA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTExIGluIGZpbGUxIgorCSkgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgdGhpcyBzdWJtaXQgc2hvdWxkIGNhdXNlIGEgY29uZmxpY3QKKwkJZWNobyBsaW5lMTIgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImxpbmUxMiBpbiBmaWxlMSB3aWxsIGNvbmZsaWN0IiAmJgorCQkjIGJ1dCB0aGlzIGNvbW1pdCBpcyBva2F5CisJCXRlc3RfY29tbWl0ICJva2F5X2NvbW1pdF9hZnRlcl9hdXRvX3F1aXQiICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0IC0tY29uZmxpY3Q9cXVpdCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIk5vIGNvbW1pdHMgYXBwbGllZCIgb3V0CisJKQorJworCisjCisjIENsZWFudXAgYWZ0ZXIgc3VibWl0IGZhaWwsIGFsbCBjYXNlcy4gIFNvbWUgbW9kaWZpY2F0aW9ucyBoYXBwZW4KKyMgYmVmb3JlIHRyeWluZyB0byBhcHBseSB0aGUgcGF0Y2guICBNYWtlIHN1cmUgdGhlc2UgYXJlIHVud291bmQKKyMgcHJvcGVybHkuICBQdXQgZWFjaCBvbmUgaW4gYSBkaWZmIGFsb25nIHdpdGggc29tZXRoaW5nIHRoYXQgd2lsbAorIyBvYnZpb3VzbHkgY29uZmxpY3QuICBNYWtlIHN1cmUgaXQgaXMgYmFjayB0byBub3JtYWwgYWZ0ZXIuCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgZWRpdCBwNCBwb3B1bGF0ZScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gdGV4dCBmaWxlID50ZXh0ICYmCisJCXA0IGFkZCB0ZXh0ICYmCisJCWVjaG8gdGV4dCt4IGZpbGUgPnRleHQreCAmJgorCQljaG1vZCA3NTUgdGV4dCt4ICYmCisJCXA0IGFkZCB0ZXh0K3ggJiYKKwkJcDQgc3VibWl0IC1kICJwb3B1bGF0ZSBwNCIKKwkpCisnCisKK3NldHVwX2NvbmZsaWN0KCkgeworCSMgY2xvbmUgYmVmb3JlIG1vZGlmeWluZyBmaWxlMSB0byBmb3JjZSBpdCB0byBjb25mbGljdAorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkjIHRpY2tzIG91dHNpZGUgc3Vic2hlbGxzCisJdGVzdF90aWNrICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBmaWxlMSAmJgorCQllY2hvICR0ZXN0X3RpY2sgPj5maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgIiR0ZXN0X3RpY2sgaW4gZmlsZTEiCisJKSAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyBlYXN5IGNvbmZsaWN0CisJCWVjaG8gJHRlc3RfdGljayA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEKKwkJIyBjYWxsZXIgd2lsbCBhZGQgbW9yZSBhbmQgc3VibWl0CisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGVkaXQgYWZ0ZXIgc3VibWl0IGZhaWwnICcKKwlzZXR1cF9jb25mbGljdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gYW5vdGhlciBsaW5lID4+dGV4dCAmJgorCQlnaXQgYWRkIHRleHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29uZmxpY3QiICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCSMgbWFrZSBzdXJlIGl0IGlzIG5vdCBvcGVuCisJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWRkIGFmdGVyIHN1Ym1pdCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIG5ldyBmaWxlID50ZXh0bmV3ICYmCisJCWdpdCBhZGQgdGV4dG5ldyAmJgorCQlnaXQgY29tbWl0IC1tICJjb25mbGljdCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJIyBtYWtlIHN1cmUgaXQgaXMgbm90IHRoZXJlCisJCSMgYW5kIHRoYXQgcDQgdGhpbmtzIGl0IGlzIG5vdCBhZGRlZAorCQkjICAgUDQgcmV0dXJucyAwIGJvdGggZm9yICJub3QgdGhlcmUgYnV0IGFkZGVkIiBhbmQKKwkJIyAgICJub3QgdGhlcmUiLCBzbyBncmVwLgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXh0bmV3ICYmCisJCXA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0bmV3IDI+JjEgfCBncmVwICJubyBzdWNoIGZpbGUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGRlbGV0ZSBhZnRlciBzdWJtaXQgZmFpbCcgJworCXNldHVwX2NvbmZsaWN0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJtIHRleHQreCAmJgorCQlnaXQgY29tbWl0IC1tICJjb25mbGljdCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJIyBtYWtlIHN1cmUgaXQgaXMgdGhlcmUKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgdGV4dCt4ICYmCisJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQreAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb3B5IGFmdGVyIHN1Ym1pdCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQljcCB0ZXh0IHRleHQyICYmCisJCWdpdCBhZGQgdGV4dDIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29uZmxpY3QiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlciB0cnVlICYmCisJCSMgbWFrZSBzdXJlIHNldHVwIGlzIG9rYXkKKwkJZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEIHwgZ3JlcCB0ZXh0MiB8IGdyZXAgQzEwMCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXh0MiAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dDIgMj4mMSB8IGdyZXAgIm5vIHN1Y2ggZmlsZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgcmVuYW1lIGFmdGVyIHN1Ym1pdCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbXYgdGV4dCB0ZXh0MiAmJgorCQlnaXQgY29tbWl0IC1tICJjb25mbGljdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyB0cnVlICYmCisJCSMgbWFrZSBzdXJlIHNldHVwIGlzIG9rYXkKKwkJZ2l0IGRpZmYtdHJlZSAtciAtTSBIRUFEIHwgZ3JlcCB0ZXh0MiB8IGdyZXAgUjEwMCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXh0MiAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dDIgMj4mMSB8IGdyZXAgIm5vIHN1Y2ggZmlsZSIKKwkpCisnCisKKyMKKyMgQ2xlYW51cCBhZnRlciBkZWNpZGluZyBub3QgdG8gc3VibWl0IGR1cmluZyBlZGl0VGVtcGxhdGUuICBUaGlzCisjIGludm9sdmVzIHVud2luZGluZyBtb3JlIHdvcmssIGJlY2F1c2UgZmlsZXMgaGF2ZSBiZWVuIGFkZGVkLCBkZWxldGVkCisjIGFuZCBjaG1vZC1lZCBub3cuICBTYW1lIGFwcHJvYWNoIGFzIGFib3ZlLgorIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGVkaXQgYWZ0ZXIgc3VibWl0IGNhbmNlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGxpbmUgPj50ZXh0ICYmCisJCWdpdCBhZGQgdGV4dCAmJgorCQlnaXQgY29tbWl0IC1tIHRleHQgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQkhIHA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0ICYmCisJCXRlc3RfY21wICIkZ2l0Ii90ZXh0IHRleHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWRkIGFmdGVyIHN1Ym1pdCBjYW5jZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBsaW5lID50ZXh0bmV3ICYmCisJCWdpdCBhZGQgdGV4dG5ldyAmJgorCQlnaXQgY29tbWl0IC1tIHRleHRuZXcgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGV4dG5ldyAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dG5ldyAyPiYxIHwgZ3JlcCAibm8gc3VjaCBmaWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBkZWxldGUgYWZ0ZXIgc3VibWl0IGNhbmNlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcm0gdGV4dCAmJgorCQlnaXQgY29tbWl0IC1tICJybSB0ZXh0IiAmJgorCQllY2hvIG4gfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXh0ICYmCisJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29weSBhZnRlciBzdWJtaXQgY2FuY2VsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWNwIHRleHQgdGV4dDIgJiYKKwkJZ2l0IGFkZCB0ZXh0MiAmJgorCQlnaXQgY29tbWl0IC1tIHRleHQyICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlciB0cnVlICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCB8IGdyZXAgdGV4dDIgfCBncmVwIEMxMDAgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGV4dDIgJiYKKwkJcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQyIDI+JjEgfCBncmVwICJubyBzdWNoIGZpbGUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIHJlbmFtZSBhZnRlciBzdWJtaXQgY2FuY2VsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBtdiB0ZXh0IHRleHQyICYmCisJCWdpdCBjb21taXQgLW0gdGV4dDIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyB0cnVlICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCB8IGdyZXAgdGV4dDIgfCBncmVwIFIxMDAgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGV4dDIgJiYKKwkJcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQyIDI+JjEgfCBncmVwICJubyBzdWNoIGZpbGUiCisJCXRlc3RfcGF0aF9pc19maWxlIHRleHQgJiYKKwkJISBwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjaG1vZCBhZnRlciBzdWJtaXQgY2FuY2VsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWNobW9kIHUreCB0ZXh0ICYmCisJCWNobW9kIHUteCB0ZXh0K3ggJiYKKwkJZ2l0IGFkZCB0ZXh0IHRleHQreCAmJgorCQlnaXQgY29tbWl0IC1tICJjaG1vZCB0ZXh0cyIgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgdGV4dCAmJgorCQkhIHA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0ICYmCisJCXN0YXQgLS1mb3JtYXQ9JUEgdGV4dCB8IGVncmVwIF4tci0tICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHRleHQreCAmJgorCQkhIHA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0K3ggJiYKKwkJc3RhdCAtLWZvcm1hdD0lQSB0ZXh0K3ggfCBlZ3JlcCBeLXIteAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk5MDEtZ2l0LXdlYi0tYnJvd3NlLnNoIGIvdC90OTkwMS1naXQtd2ViLS1icm93c2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjBhNmJhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk5MDEtZ2l0LXdlYi0tYnJvd3NlLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgd2ViLS1icm93c2UgYmFzaWMgdGVzdHMKKworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGdpdCB3ZWItLWJyb3dzZSBjYW4gaGFuZGxlIHZhcmlvdXMgdmFsaWQgVVJMcy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3dlYl9icm93c2UgKCkgeworCSMgYnJvd3Nlcj0kMSB1cmw9JDIKKwlnaXQgd2ViLS1icm93c2UgLS1icm93c2VyPSIkMSIgIiQyIiA+YWN0dWFsICYmCisJdHIgLWQgJ1wwMTUnIDxhY3R1YWwgPnRleHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdGV4dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknVVJMIHdpdGggYW4gYW1wZXJzYW5kIGluIGl0JyAnCisJZWNobyBodHRwOi8vZXhhbXBsZS5jb20vZm9vXCZiYXIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgYnJvd3Nlci5jdXN0b20uY21kIGVjaG8gJiYKKwl0ZXN0X3dlYl9icm93c2UgY3VzdG9tIGh0dHA6Ly9leGFtcGxlLmNvbS9mb29cJmJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknVVJMIHdpdGggYSBzZW1pLWNvbG9uIGluIGl0JyAnCisJZWNobyBodHRwOi8vZXhhbXBsZS5jb20vZm9vXDtiYXIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgYnJvd3Nlci5jdXN0b20uY21kIGVjaG8gJiYKKwl0ZXN0X3dlYl9icm93c2UgY3VzdG9tIGh0dHA6Ly9leGFtcGxlLmNvbS9mb29cO2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknVVJMIHdpdGggYSBoYXNoIGluIGl0JyAnCisJZWNobyBodHRwOi8vZXhhbXBsZS5jb20vZm9vI2JhciA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicm93c2VyLmN1c3RvbS5jbWQgZWNobyAmJgorCXRlc3Rfd2ViX2Jyb3dzZSBjdXN0b20gaHR0cDovL2V4YW1wbGUuY29tL2ZvbyNiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2Jyb3dzZXIgcGF0aHMgYXJlIHByb3Blcmx5IHF1b3RlZCcgJworCWVjaG8gZmFrZTogaHR0cDovL2V4YW1wbGUuY29tL2ZvbyA+ZXhwZWN0ICYmCisJY2F0ID4iZmFrZSBicm93c2VyIiA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJZWNobyBmYWtlOiAiJEAiCisJRU9GCisJY2htb2QgK3ggImZha2UgYnJvd3NlciIgJiYKKwlnaXQgY29uZmlnIGJyb3dzZXIudzNtLnBhdGggImBwd2RgL2Zha2UgYnJvd3NlciIgJiYKKwl0ZXN0X3dlYl9icm93c2UgdzNtIGh0dHA6Ly9leGFtcGxlLmNvbS9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2Jyb3dzZXIgY29tbWFuZCBhbGxvd3MgYXJiaXRyYXJ5IHNoZWxsIGNvZGUnICcKKwllY2hvICJhcmc6IGh0dHA6Ly9leGFtcGxlLmNvbS9mb28iID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGJyb3dzZXIuY3VzdG9tLmNtZCAiCisJCWYoKSB7CisJCQlmb3IgaSBpbiBcIlwkQFwiOyBkbworCQkJCWVjaG8gYXJnOiBcJGkKKwkJCWRvbmUKKwkJfQorCQlmIiAmJgorCXRlc3Rfd2ViX2Jyb3dzZSBjdXN0b20gaHR0cDovL2V4YW1wbGUuY29tL2ZvbworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk5MDItY29tcGxldGlvbi5zaCBiL3QvdDk5MDItY29tcGxldGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYmQwZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTkwMi1jb21wbGV0aW9uLnNoCkBAIC0wLDAgKzEsMjkxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIEZlbGlwZSBDb250cmVyYXMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBiYXNoIGNvbXBsZXRpb24nCisKKy4gLi9saWItYmFzaC5zaAorCitjb21wbGV0ZSAoKQoreworCSMgZG8gbm90aGluZworCXJldHVybiAwCit9CisKKy4gIiRHSVRfQlVJTERfRElSL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIgorCisjIFdlIGRvbid0IG5lZWQgdGhpcyBmdW5jdGlvbiB0byBhY3R1YWxseSBqb2luIHdvcmRzIG9yIGRvIGFueXRoaW5nIHNwZWNpYWwuCisjIEFsc28sIGl0J3MgY2xlYW5lciB0byBhdm9pZCB0b3VjaGluZyBiYXNoJ3MgaW50ZXJuYWwgY29tcGxldGlvbiB2YXJpYWJsZXMuCisjIFNvIGxldCdzIG92ZXJyaWRlIGl0IHdpdGggYSBtaW5pbWFsIHZlcnNpb24gZm9yIHRlc3RpbmcgcHVycG9zZXMuCitfZ2V0X2NvbXBfd29yZHNfYnlfcmVmICgpCit7CisJd2hpbGUgWyAkIyAtZ3QgMCBdOyBkbworCQljYXNlICIkMSIgaW4KKwkJY3VyKQorCQkJY3VyPSR7X3dvcmRzW19jd29yZF19CisJCQk7OworCQlwcmV2KQorCQkJcHJldj0ke193b3Jkc1tfY3dvcmQtMV19CisJCQk7OworCQl3b3JkcykKKwkJCXdvcmRzPSgiJHtfd29yZHNbQF19IikKKwkJCTs7CisJCWN3b3JkKQorCQkJY3dvcmQ9JF9jd29yZAorCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKK30KKworcHJpbnRfY29tcCAoKQoreworCWxvY2FsIElGUz0kJ1xuJworCWVjaG8gIiR7Q09NUFJFUExZWypdfSIgPiBvdXQKK30KKworcnVuX2NvbXBsZXRpb24gKCkKK3sKKwlsb2NhbCAtYSBDT01QUkVQTFkgX3dvcmRzCisJbG9jYWwgX2N3b3JkCisJX3dvcmRzPSggJDEgKQorCSgoIF9jd29yZCA9ICR7I193b3Jkc1tAXX0gLSAxICkpCisJX19naXRfd3JhcF9fZ2l0X21haW4gJiYgcHJpbnRfY29tcAorfQorCit0ZXN0X2NvbXBsZXRpb24gKCkKK3sKKwl0ZXN0ICQjIC1ndCAxICYmIGVjaG8gIiQyIiA+IGV4cGVjdGVkCisJcnVuX2NvbXBsZXRpb24gIiRAIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorfQorCisjIExpa2UgdGVzdF9jb21wbGV0aW9uLCBidXQgcmVhZHMgZXhwZWN0YXRpb24gZnJvbSBzdGRpbiwKKyMgd2hpY2ggaXMgY29udmVuaWVudCB3aGVuIGl0IGlzIG11bHRpbGluZS4gV2UgYWxzbyBwcm9jZXNzICJfIiBpbnRvCisjIHNwYWNlcyB0byBtYWtlIHRlc3QgdmVjdG9ycyBtb3JlIHJlYWRhYmxlLgordGVzdF9jb21wbGV0aW9uX2xvbmcgKCkKK3sKKwl0ciBfICIgIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NvbXBsZXRpb24gIiQxIgorfQorCituZXdsaW5lPSQnXG4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcCAtIHRyYWlsaW5nIHNwYWNlIC0gb3B0aW9ucycgJworCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCS0tcmV1c2UtbWVzc2FnZT1aCisJLS1yZWVkaXQtbWVzc2FnZT1aCisJLS1yZXNldC1hdXRob3IgWgorCUVPRgorCSgKKwkJbG9jYWwgLWEgQ09NUFJFUExZICYmCisJCWN1cj0iLS1yZSIgJiYKKwkJX19naXRjb21wICItLWRyeS1ydW4gLS1yZXVzZS1tZXNzYWdlPSAtLXJlZWRpdC1tZXNzYWdlPQorCQkJCS0tcmVzZXQtYXV0aG9yIiAmJgorCQlJRlM9IiRuZXdsaW5lIiAmJgorCQllY2hvICIke0NPTVBSRVBMWVsqXX0iID4gb3V0CisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXAgLSB0cmFpbGluZyBzcGFjZSAtIGNvbmZpZyBrZXlzJyAnCisJc2VkIC1lICJzL1okLy8iID5leHBlY3RlZCA8PC1cRU9GICYmCisJYnJhbmNoLloKKwlicmFuY2guYXV0b3NldHVwbWVyZ2UgWgorCWJyYW5jaC5hdXRvc2V0dXByZWJhc2UgWgorCWJyb3dzZXIuWgorCUVPRgorCSgKKwkJbG9jYWwgLWEgQ09NUFJFUExZICYmCisJCWN1cj0iYnIiICYmCisJCV9fZ2l0Y29tcCAiYnJhbmNoLiBicmFuY2guYXV0b3NldHVwbWVyZ2UKKwkJCQlicmFuY2guYXV0b3NldHVwcmViYXNlIGJyb3dzZXIuIiAmJgorCQlJRlM9IiRuZXdsaW5lIiAmJgorCQllY2hvICIke0NPTVBSRVBMWVsqXX0iID4gb3V0CisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXAgLSBvcHRpb24gcGFyYW1ldGVyJyAnCisJc2VkIC1lICJzL1okLy8iID5leHBlY3RlZCA8PC1cRU9GICYmCisJcmVjdXJzaXZlIFoKKwlyZXNvbHZlIFoKKwlFT0YKKwkoCisJCWxvY2FsIC1hIENPTVBSRVBMWSAmJgorCQljdXI9Ii0tc3RyYXRlZ3k9cmUiICYmCisJCV9fZ2l0Y29tcCAib2N0b3B1cyBvdXJzIHJlY3Vyc2l2ZSByZXNvbHZlIHN1YnRyZWUKKwkJCSIgIiIgInJlIiAmJgorCQlJRlM9IiRuZXdsaW5lIiAmJgorCQllY2hvICIke0NPTVBSRVBMWVsqXX0iID4gb3V0CisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXAgLSBwcmVmaXgnICcKKwlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlicmFuY2gubWFpbnQubWVyZ2UgWgorCWJyYW5jaC5tYWludC5tZXJnZW9wdGlvbnMgWgorCUVPRgorCSgKKwkJbG9jYWwgLWEgQ09NUFJFUExZICYmCisJCWN1cj0iYnJhbmNoLm1lIiAmJgorCQlfX2dpdGNvbXAgInJlbW90ZSBtZXJnZSBtZXJnZW9wdGlvbnMgcmViYXNlCisJCQkiICJicmFuY2gubWFpbnQuIiAibWUiICYmCisJCUlGUz0iJG5ld2xpbmUiICYmCisJCWVjaG8gIiR7Q09NUFJFUExZWypdfSIgPiBvdXQKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcCAtIHN1ZmZpeCcgJworCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWJyYW5jaC5tYXN0ZXIuWgorCWJyYW5jaC5tYWludC5aCisJRU9GCisJKAorCQlsb2NhbCAtYSBDT01QUkVQTFkgJiYKKwkJY3VyPSJicmFuY2gubWUiICYmCisJCV9fZ2l0Y29tcCAibWFzdGVyIG1haW50IG5leHQgcHUKKwkJCSIgImJyYW5jaC4iICJtYSIgIi4iICYmCisJCUlGUz0iJG5ld2xpbmUiICYmCisJCWVjaG8gIiR7Q09NUFJFUExZWypdfSIgPiBvdXQKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljJyAnCisJcnVuX2NvbXBsZXRpb24gImdpdCBcIlwiIiAmJgorCSMgYnVpbHQtaW4KKwlncmVwIC1xICJeYWRkIFwkIiBvdXQgJiYKKwkjIHNjcmlwdAorCWdyZXAgLXEgIl5maWx0ZXItYnJhbmNoIFwkIiBvdXQgJiYKKwkjIHBsdW1iaW5nCisJISBncmVwIC1xICJebHMtZmlsZXMgXCQiIG91dCAmJgorCisJcnVuX2NvbXBsZXRpb24gImdpdCBmIiAmJgorCSEgZ3JlcCAtcSAtdiAiXmYiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb3VibGUgZGFzaCAiZ2l0IiBpdHNlbGYnICcKKwlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwktLXBhZ2luYXRlIFoKKwktLW5vLXBhZ2VyIFoKKwktLWdpdC1kaXI9CisJLS1iYXJlIFoKKwktLXZlcnNpb24gWgorCS0tZXhlYy1wYXRoIFoKKwktLWV4ZWMtcGF0aD0KKwktLWh0bWwtcGF0aCBaCisJLS1pbmZvLXBhdGggWgorCS0td29yay10cmVlPQorCS0tbmFtZXNwYWNlPQorCS0tbm8tcmVwbGFjZS1vYmplY3RzIFoKKwktLWhlbHAgWgorCUVPRgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb3VibGUgZGFzaCAiZ2l0IGNoZWNrb3V0IicgJworCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCS0tcXVpZXQgWgorCS0tb3VycyBaCisJLS10aGVpcnMgWgorCS0tdHJhY2sgWgorCS0tbm8tdHJhY2sgWgorCS0tbWVyZ2UgWgorCS0tY29uZmxpY3Q9CisJLS1vcnBoYW4gWgorCS0tcGF0Y2ggWgorCUVPRgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNoZWNrb3V0IC0tIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZW5lcmFsIG9wdGlvbnMnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLXZlciIgIi0tdmVyc2lvbiAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1oZWwiICItLWhlbHAgIiAmJgorCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCS0tZXhlYy1wYXRoIFoKKwktLWV4ZWMtcGF0aD0KKwlFT0YKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWV4ZSIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWh0bSIgIi0taHRtbC1wYXRoICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLXBhZyIgIi0tcGFnaW5hdGUgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tbm8tcCIgIi0tbm8tcGFnZXIgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tZ2l0IiAiLS1naXQtZGlyPSIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLXdvciIgIi0td29yay10cmVlPSIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLW5hbSIgIi0tbmFtZXNwYWNlPSIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWJhciIgIi0tYmFyZSAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1pbmYiICItLWluZm8tcGF0aCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1uby1yIiAiLS1uby1yZXBsYWNlLW9iamVjdHMgIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZW5lcmFsIG9wdGlvbnMgcGx1cyBjb21tYW5kJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS12ZXJzaW9uIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tcGFnaW5hdGUgY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1naXQtZGlyPWZvbyBjaGVjayIgImNoZWNrb3V0ICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWJhcmUgY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1oZWxwIGRlcyIgImRlc2NyaWJlICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWV4ZWMtcGF0aD1mb28gY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1odG1sLXBhdGggY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1uby1wYWdlciBjaGVjayIgImNoZWNrb3V0ICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLXdvcmstdHJlZT1mb28gY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1uYW1lc3BhY2U9Zm9vIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tcGFnaW5hdGUgY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1pbmZvLXBhdGggY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgY2hlY2siICJjaGVja291dCAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciByZWYgY29tcGxldGlvbicgJworCWVjaG8gY29udGVudCA+ZmlsZTEgJiYKKwllY2hvIG1vcmUgPmZpbGUyICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwlnaXQgYnJhbmNoIG15YnJhbmNoICYmCisJZ2l0IHRhZyBteXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBjb21wbGV0ZXMgcmVmIG5hbWVzJyAnCisJdGVzdF9jb21wbGV0aW9uX2xvbmcgImdpdCBjaGVja291dCBtIiA8PC1cRU9GCisJbWFzdGVyXworCW15YnJhbmNoXworCW15dGFnXworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGNvbXBsZXRlcyBhbGwgcmVmcycgJworCXRlc3RfY29tcGxldGlvbl9sb25nICJnaXQgc2hvdyBtIiA8PC1cRU9GCisJbWFzdGVyXworCW15YnJhbmNoXworCW15dGFnXworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc8cmVmPjogY29tcGxldGVzIHBhdGhzJyAnCisJdGVzdF9jb21wbGV0aW9uX2xvbmcgImdpdCBzaG93IG15dGFnOmYiIDw8LVxFT0YKKwlmaWxlMV8KKwlmaWxlMl8KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxldGUgdHJlZSBmaWxlbmFtZSB3aXRoIHNwYWNlcycgJworCWVjaG8gY29udGVudCA+Im5hbWUgd2l0aCBzcGFjZXMiICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBzcGFjZXMgJiYKKwl0ZXN0X2NvbXBsZXRpb25fbG9uZyAiZ2l0IHNob3cgSEVBRDpuYW0iIDw8LVxFT0YKKwluYW1lIHdpdGggc3BhY2VzXworCUVPRgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb21wbGV0ZSB0cmVlIGZpbGVuYW1lIHdpdGggbWV0YWNoYXJhY3RlcnMnICcKKwllY2hvIGNvbnRlbnQgPiJuYW1lIHdpdGggXCR7bWV0YX0iICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBtZXRhICYmCisJdGVzdF9jb21wbGV0aW9uX2xvbmcgImdpdCBzaG93IEhFQUQ6bmFtIiA8PC1cRU9GCisJbmFtZSB3aXRoICR7bWV0YX1fCisJbmFtZSB3aXRoIHNwYWNlc18KKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5OTAzLWJhc2gtcHJvbXB0LnNoIGIvdC90OTkwMy1iYXNoLXByb21wdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMTdjMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTkwMy1iYXNoLXByb21wdC5zaApAQCAtMCwwICsxLDQ1NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBTWkVERVIgR8OhYm9yCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0LXNwZWNpZmljIGJhc2ggcHJvbXB0IGZ1bmN0aW9ucycKKworLiAuL2xpYi1iYXNoLnNoCisKKy4gIiRHSVRfQlVJTERfRElSL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoIgorCithY3R1YWw9IiRUUkFTSF9ESVJFQ1RPUlkvYWN0dWFsIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgcHJvbXB0IHRlc3RzJyAnCisJbWtkaXIgLXAgc3ViZGlyL3N1YnN1YmRpciAmJgorCWdpdCBpbml0IG90aGVycmVwbyAmJgorCWVjaG8gMSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIC1hIC1tIG1zZzEgdDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYjEgJiYKKwllY2hvIDIgPiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGIxIiBmaWxlICYmCisJZWNobyAzID4gZmlsZSAmJgorCWdpdCBjb21taXQgLW0gInRoaXJkIGIxIiBmaWxlICYmCisJZ2l0IHRhZyAtYSAtbSBtc2cyIHQyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGIyIG1hc3RlciAmJgorCWVjaG8gMCA+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJzZWNvbmQgYjIiIGZpbGUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciAtIGZyb20gY29tbWFuZCBsaW5lICh0aHJvdWdoICRfX2dpdF9kaXIpJyAnCisJZWNobyAiJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgPiBleHBlY3RlZCAmJgorCSgKKwkJX19naXRfZGlyPSIkVFJBU0hfRElSRUNUT1JZL290aGVycmVwby8uZ2l0IiAmJgorCQlfX2dpdGRpciA+ICIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIC0gcmVwbyBhcyBhcmd1bWVudCcgJworCWVjaG8gIm90aGVycmVwby8uZ2l0IiA+IGV4cGVjdGVkICYmCisJX19naXRkaXIgIm90aGVycmVwbyIgPiAiJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIC0gcmVtb3RlIGFzIGFyZ3VtZW50JyAnCisJZWNobyAicmVtb3RlIiA+IGV4cGVjdGVkICYmCisJX19naXRkaXIgInJlbW90ZSIgPiAiJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIC0gLmdpdCBkaXJlY3RvcnkgaW4gY3dkJyAnCisJZWNobyAiLmdpdCIgPiBleHBlY3RlZCAmJgorCV9fZ2l0ZGlyID4gIiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciAtIC5naXQgZGlyZWN0b3J5IGluIHBhcmVudCcgJworCWVjaG8gIiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgPiBleHBlY3RlZCAmJgorCSgKKwkJY2Qgc3ViZGlyL3N1YnN1YmRpciAmJgorCQlfX2dpdGRpciA+ICIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIC0gY3dkIGlzIGEgLmdpdCBkaXJlY3RvcnknICcKKwllY2hvICIuIiA+IGV4cGVjdGVkICYmCisJKAorCQljZCAuZ2l0ICYmCisJCV9fZ2l0ZGlyID4gIiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgLSBwYXJlbnQgaXMgYSAuZ2l0IGRpcmVjdG9yeScgJworCWVjaG8gIiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgPiBleHBlY3RlZCAmJgorCSgKKwkJY2QgLmdpdC9yZWZzL2hlYWRzICYmCisJCV9fZ2l0ZGlyID4gIiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgLSAkR0lUX0RJUiBzZXQgd2hpbGUgLmdpdCBkaXJlY3RvcnkgaW4gY3dkJyAnCisJZWNobyAiJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgPiBleHBlY3RlZCAmJgorCSgKKwkJR0lUX0RJUj0iJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgJiYKKwkJZXhwb3J0IEdJVF9ESVIgJiYKKwkJX19naXRkaXIgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciAtICRHSVRfRElSIHNldCB3aGlsZSAuZ2l0IGRpcmVjdG9yeSBpbiBwYXJlbnQnICcKKwllY2hvICIkVFJBU0hfRElSRUNUT1JZL290aGVycmVwby8uZ2l0IiA+IGV4cGVjdGVkICYmCisJKAorCQlHSVRfRElSPSIkVFJBU0hfRElSRUNUT1JZL290aGVycmVwby8uZ2l0IiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQljZCBzdWJkaXIgJiYKKwkJX19naXRkaXIgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciAtIG5vbi1leGlzdGluZyAkR0lUX0RJUicgJworCSgKKwkJR0lUX0RJUj0iJFRSQVNIX0RJUkVDVE9SWS9ub24tZXhpc3RpbmciICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCXRlc3RfbXVzdF9mYWlsIF9fZ2l0ZGlyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgLSBnaXRmaWxlIGluIGN3ZCcgJworCWVjaG8gIiRUUkFTSF9ESVJFQ1RPUlkvb3RoZXJyZXBvLy5naXQiID4gZXhwZWN0ZWQgJiYKKwllY2hvICJnaXRkaXI6ICRUUkFTSF9ESVJFQ1RPUlkvb3RoZXJyZXBvLy5naXQiID4gc3ViZGlyLy5naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHN1YmRpci8uZ2l0IiAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCV9fZ2l0ZGlyID4gIiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgLSBnaXRmaWxlIGluIHBhcmVudCcgJworCWVjaG8gIiRUUkFTSF9ESVJFQ1RPUlkvb3RoZXJyZXBvLy5naXQiID4gZXhwZWN0ZWQgJiYKKwllY2hvICJnaXRkaXI6ICRUUkFTSF9ESVJFQ1RPUlkvb3RoZXJyZXBvLy5naXQiID4gc3ViZGlyLy5naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHN1YmRpci8uZ2l0IiAmJgorCSgKKwkJY2Qgc3ViZGlyL3N1YnN1YmRpciAmJgorCQlfX2dpdGRpciA+ICIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZ2l0ZGlyIC0gcmVzdWx0aW5nIHBhdGggYXZvaWRzIHN5bWxpbmtzJyAnCisJZWNobyAiJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgPiBleHBlY3RlZCAmJgorCW1rZGlyIG90aGVycmVwby9kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBvdGhlcnJlcG8vZGlyIiAmJgorCWxuIC1zIG90aGVycmVwby9kaXIgbGluayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbGluayIgJiYKKwkoCisJCWNkIGxpbmsgJiYKKwkJX19naXRkaXIgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciAtIG5vdCBhIGdpdCByZXBvc2l0b3J5JyAnCisJKAorCQljZCBzdWJkaXIvc3Vic3ViZGlyICYmCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfRElSRUNUT1JZIiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgX19naXRkaXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJyYW5jaCBuYW1lJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID4gZXhwZWN0ZWQgJiYKKwlfX2dpdF9wczEgPiAiJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGV0YWNoZWQgaGVhZCcgJworCXByaW50ZiAiICgoJXMuLi4pKSIgJChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIgYjFeKSA+IGV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IGIxXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlfX2dpdF9wczEgPiAiJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGVzY3JpYmUgZGV0YWNoZWQgaGVhZCAtIGNvbnRhaW5zJyAnCisJcHJpbnRmICIgKCh0Mn4xKSkiID4gZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgYjFeICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCSgKKwkJR0lUX1BTMV9ERVNDUklCRV9TVFlMRT1jb250YWlucyAmJgorCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRlc2NyaWJlIGRldGFjaGVkIGhlYWQgLSBicmFuY2gnICcKKwlwcmludGYgIiAoKGIxfjEpKSIgPiBleHBlY3RlZCAmJgorCWdpdCBjaGVja291dCBiMV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJKAorCQlHSVRfUFMxX0RFU0NSSUJFX1NUWUxFPWJyYW5jaCAmJgorCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRlc2NyaWJlIGRldGFjaGVkIGhlYWQgLSBkZXNjcmliZScgJworCXByaW50ZiAiICgodDEtMS1nJXMpKSIgJChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIgYjFeKSA+IGV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IGIxXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwkoCisJCUdJVF9QUzFfREVTQ1JJQkVfU1RZTEU9ZGVzY3JpYmUgJiYKKwkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkZXNjcmliZSBkZXRhY2hlZCBoZWFkIC0gZGVmYXVsdCcgJworCXByaW50ZiAiICgodDIpKSIgPiBleHBlY3RlZCAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCBiMSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlfX2dpdF9wczEgPiAiJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICIgKEdJVF9ESVIhKSIgPiBleHBlY3RlZCAmJgorCSgKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRlZXAgaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICIgKEdJVF9ESVIhKSIgPiBleHBlY3RlZCAmJgorCSgKKwkJY2QgLmdpdC9yZWZzL2hlYWRzICYmCisJCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaW5zaWRlIGJhcmUgcmVwb3NpdG9yeScgJworCXByaW50ZiAiIChCQVJFOm1hc3RlcikiID4gZXhwZWN0ZWQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgYmFyZS5naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBiYXJlLmdpdCIgJiYKKwkoCisJCWNkIGJhcmUuZ2l0ICYmCisJCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaW50ZXJhY3RpdmUgcmViYXNlJyAnCisJcHJpbnRmICIgKGIxfFJFQkFTRS1pKSIgPiBleHBlY3RlZAorCWVjaG8gIiMhJFNIRUxMX1BBVEgiID5mYWtlX2VkaXRvci5zaCAmJgorCWNhdCA+PmZha2VfZWRpdG9yLnNoIDw8XEVPRiAmJgorZWNobyAiZWRpdCAkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoIikiID4gIiQxIgorRU9GCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBmYWtlX2VkaXRvci5zaCIgJiYKKwljaG1vZCBhK3ggZmFrZV9lZGl0b3Iuc2ggJiYKKwl0ZXN0X3NldF9lZGl0b3IgIiRUUkFTSF9ESVJFQ1RPUlkvZmFrZV9lZGl0b3Iuc2giICYmCisJZ2l0IGNoZWNrb3V0IGIxICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIKKwlfX2dpdF9wczEgPiAiJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gcmViYXNlIG1lcmdlJyAnCisJcHJpbnRmICIgKGIyfFJFQkFTRS1tKSIgPiBleHBlY3RlZCAmJgorCWdpdCBjaGVja291dCBiMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tbWVyZ2UgYjEgYjIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlfX2dpdF9wczEgPiAiJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gcmViYXNlJyAnCisJcHJpbnRmICIgKCh0Mil8UkVCQVNFKSIgPiBleHBlY3RlZCAmJgorCWdpdCBjaGVja291dCBiMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIGIxIGIyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJX19naXRfcHMxID4gIiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIG1lcmdlJyAnCisJcHJpbnRmICIgKGIxfE1FUkdJTkcpIiA+IGV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IGIxICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBiMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlfX2dpdF9wczEgPiAiJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gY2hlcnJ5LXBpY2snICcKKwlwcmludGYgIiAobWFzdGVyfENIRVJSWS1QSUNLSU5HKSIgPiBleHBlY3RlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiMSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlfX2dpdF9wczEgPiAiJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmlzZWN0JyAnCisJcHJpbnRmICIgKG1hc3RlcnxCSVNFQ1RJTkcpIiA+IGV4cGVjdGVkICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJpc2VjdCByZXNldCIgJiYKKwlfX2dpdF9wczEgPiAiJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGNsZWFuJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID4gZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBkaXJ0eSB3b3JrdHJlZScgJworCXByaW50ZiAiIChtYXN0ZXIgKikiID4gZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPiBmaWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGRpcnR5IGluZGV4JyAnCisJcHJpbnRmICIgKG1hc3RlciArKSIgPiBleHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+IGZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGFkZCAtdSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGRpcnR5IGluZGV4IGFuZCB3b3JrdHJlZScgJworCXByaW50ZiAiIChtYXN0ZXIgKispIiA+IGV4cGVjdGVkICYmCisJZWNobyAiZGlydHkgaW5kZXgiID4gZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgYWRkIC11ICYmCisJZWNobyAiZGlydHkgd29ya3RyZWUiID4gZmlsZSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGJlZm9yZSByb290IGNvbW1pdCcgJworCXByaW50ZiAiIChtYXN0ZXIgIykiID4gZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQljZCBvdGhlcnJlcG8gJiYKKwkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gZGlzYWJsZWQgYnkgY29uZmlnJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID4gZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPiBmaWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCXRlc3RfY29uZmlnIGJhc2guc2hvd0RpcnR5U3RhdGUgZmFsc2UgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBub3Qgc2hvd24gaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICIgKEdJVF9ESVIhKSIgPiBleHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+IGZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHN0YXNoIHN0YXR1cyBpbmRpY2F0b3IgLSBubyBzdGFzaCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+IGV4cGVjdGVkICYmCisJKAorCQlHSVRfUFMxX1NIT1dTVEFTSFNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4gIiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBzdGFzaCBzdGF0dXMgaW5kaWNhdG9yIC0gc3Rhc2gnICcKKwlwcmludGYgIiAobWFzdGVyICQpIiA+IGV4cGVjdGVkICYmCisJZWNobyAyID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgc3Rhc2ggZHJvcCIgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1NUQVNIU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHN0YXNoIHN0YXR1cyBpbmRpY2F0b3IgLSBub3Qgc2hvd24gaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICIgKEdJVF9ESVIhKSIgPiBleHBlY3RlZCAmJgorCWVjaG8gMiA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN0YXNoIGRyb3AiICYmCisJKAorCQlHSVRfUFMxX1NIT1dTVEFTSFNUQVRFPXkgJiYKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gbm8gdW50cmFja2VkIGZpbGVzJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID4gZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJY2Qgb3RoZXJyZXBvICYmCisJCV9fZ2l0X3BzMSA+ICIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSB1bnRyYWNrZWQgZmlsZXMnICcKKwlwcmludGYgIiAobWFzdGVyICUlKSIgPiBleHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gbm90IHNob3duIGluc2lkZSAuZ2l0IGRpcmVjdG9yeScgJworCXByaW50ZiAiIChHSVRfRElSISkiID4gZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgPiAiJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGZvcm1hdCBzdHJpbmcgc3RhcnRpbmcgd2l0aCBkYXNoJyAnCisJcHJpbnRmIC0tICItbWFzdGVyIiA+IGV4cGVjdGVkICYmCisJX19naXRfcHMxICItJXMiID4gIiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ZXN0LWJpbmFyeS0xLnBuZyBiL3QvdGVzdC1iaW5hcnktMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxODFkMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdGVzdC1iaW5hcnktMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90ZXN0LWJpbmFyeS0yLnBuZyBiL3QvdGVzdC1iaW5hcnktMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyMmNjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdGVzdC1iaW5hcnktMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90ZXN0LWxpYi1mdW5jdGlvbnMuc2ggYi90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg5YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90ZXN0LWxpYi1mdW5jdGlvbnMuc2gKQEAgLTAsMCArMSw2NDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvIC4KKworIyBUaGUgc2VtYW50aWNzIG9mIHRoZSBlZGl0b3IgdmFyaWFibGVzIGFyZSB0aGF0IG9mIGludm9raW5nCisjIHNoIC1jICIkRURJVE9SIFwiJEBcIiIgZmlsZXMgLi4uCisjCisjIElmIG91ciB0cmFzaCBkaXJlY3RvcnkgY29udGFpbnMgc2hlbGwgbWV0YWNoYXJhY3RlcnMsIHRoZXkgd2lsbCBiZQorIyBpbnRlcnByZXRlZCBpZiB3ZSBqdXN0IHNldCAkRURJVE9SIGRpcmVjdGx5LCBzbyBkbyBhIGxpdHRsZSBkYW5jZSB3aXRoCisjIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byB3b3JrIGFyb3VuZCB0aGlzLgorIworIyBJbiBwYXJ0aWN1bGFyLCBxdW90aW5nIGlzbid0IGVub3VnaCwgYXMgdGhlIHBhdGggbWF5IGNvbnRhaW4gdGhlIHNhbWUgcXVvdGUKKyMgdGhhdCB3ZSdyZSB1c2luZy4KK3Rlc3Rfc2V0X2VkaXRvciAoKSB7CisJRkFLRV9FRElUT1I9IiQxIgorCWV4cG9ydCBGQUtFX0VESVRPUgorCUVESVRPUj0nIiRGQUtFX0VESVRPUiInCisJZXhwb3J0IEVESVRPUgorfQorCit0ZXN0X2RlY29kZV9jb2xvciAoKSB7CisJYXdrICcKKwkJZnVuY3Rpb24gbmFtZShuKSB7CisJCQlpZiAobiA9PSAwKSByZXR1cm4gIlJFU0VUIjsKKwkJCWlmIChuID09IDEpIHJldHVybiAiQk9MRCI7CisJCQlpZiAobiA9PSAzMCkgcmV0dXJuICJCTEFDSyI7CisJCQlpZiAobiA9PSAzMSkgcmV0dXJuICJSRUQiOworCQkJaWYgKG4gPT0gMzIpIHJldHVybiAiR1JFRU4iOworCQkJaWYgKG4gPT0gMzMpIHJldHVybiAiWUVMTE9XIjsKKwkJCWlmIChuID09IDM0KSByZXR1cm4gIkJMVUUiOworCQkJaWYgKG4gPT0gMzUpIHJldHVybiAiTUFHRU5UQSI7CisJCQlpZiAobiA9PSAzNikgcmV0dXJuICJDWUFOIjsKKwkJCWlmIChuID09IDM3KSByZXR1cm4gIldISVRFIjsKKwkJCWlmIChuID09IDQwKSByZXR1cm4gIkJMQUNLIjsKKwkJCWlmIChuID09IDQxKSByZXR1cm4gIkJSRUQiOworCQkJaWYgKG4gPT0gNDIpIHJldHVybiAiQkdSRUVOIjsKKwkJCWlmIChuID09IDQzKSByZXR1cm4gIkJZRUxMT1ciOworCQkJaWYgKG4gPT0gNDQpIHJldHVybiAiQkJMVUUiOworCQkJaWYgKG4gPT0gNDUpIHJldHVybiAiQk1BR0VOVEEiOworCQkJaWYgKG4gPT0gNDYpIHJldHVybiAiQkNZQU4iOworCQkJaWYgKG4gPT0gNDcpIHJldHVybiAiQldISVRFIjsKKwkJfQorCQl7CisJCQl3aGlsZSAobWF0Y2goJDAsIC9cMDMzXFtbMC05O10qbS8pICE9IDApIHsKKwkJCQlwcmludGYgIiVzPCIsIHN1YnN0cigkMCwgMSwgUlNUQVJULTEpOworCQkJCWNvZGVzID0gc3Vic3RyKCQwLCBSU1RBUlQrMiwgUkxFTkdUSC0zKTsKKwkJCQlpZiAobGVuZ3RoKGNvZGVzKSA9PSAwKQorCQkJCQlwcmludGYgIiVzIiwgbmFtZSgwKQorCQkJCWVsc2UgeworCQkJCQluID0gc3BsaXQoY29kZXMsIGFyeSwgIjsiKTsKKwkJCQkJc2VwID0gIiI7CisJCQkJCWZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CisJCQkJCQlwcmludGYgIiVzJXMiLCBzZXAsIG5hbWUoYXJ5W2ldKTsKKwkJCQkJCXNlcCA9ICI7IgorCQkJCQl9CisJCQkJfQorCQkJCXByaW50ZiAiPiI7CisJCQkJJDAgPSBzdWJzdHIoJDAsIFJTVEFSVCArIFJMRU5HVEgsIGxlbmd0aCgkMCkgLSBSU1RBUlQgLSBSTEVOR1RIICsgMSk7CisJCQl9CisJCQlwcmludAorCQl9CisJJworfQorCitudWxfdG9fcSAoKSB7CisJIiRQRVJMX1BBVEgiIC1wZSAneS9cMDAwL1EvJworfQorCitxX3RvX251bCAoKSB7CisJIiRQRVJMX1BBVEgiIC1wZSAneS9RL1wwMDAvJworfQorCitxX3RvX2NyICgpIHsKKwl0ciBRICdcMDE1JworfQorCitxX3RvX3RhYiAoKSB7CisJdHIgUSAnXDAxMScKK30KKworYXBwZW5kX2NyICgpIHsKKwlzZWQgLWUgJ3MvJC9RLycgfCB0ciBRICdcMDE1JworfQorCityZW1vdmVfY3IgKCkgeworCXRyICdcMDE1JyBRIHwgc2VkIC1lICdzL1EkLy8nCit9CisKKyMgSW4gc29tZSBib3VybmUgc2hlbGwgaW1wbGVtZW50YXRpb25zLCB0aGUgInVuc2V0IiBidWlsdGluIHJldHVybnMKKyMgbm9uemVybyBzdGF0dXMgd2hlbiBhIHZhcmlhYmxlIHRvIGJlIHVuc2V0IHdhcyBub3Qgc2V0IGluIHRoZSBmaXJzdAorIyBwbGFjZS4KKyMKKyMgVXNlIHNhbmVfdW5zZXQgd2hlbiB0aGF0IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBhbiBlcnJvci4KKworc2FuZV91bnNldCAoKSB7CisJdW5zZXQgIiRAIgorCXJldHVybiAwCit9CisKK3Rlc3RfdGljayAoKSB7CisJaWYgdGVzdCAteiAiJHt0ZXN0X3RpY2src2V0fSIKKwl0aGVuCisJCXRlc3RfdGljaz0xMTEyOTExOTkzCisJZWxzZQorCQl0ZXN0X3RpY2s9JCgoJHRlc3RfdGljayArIDYwKSkKKwlmaQorCUdJVF9DT01NSVRURVJfREFURT0iJHRlc3RfdGljayAtMDcwMCIKKwlHSVRfQVVUSE9SX0RBVEU9IiR0ZXN0X3RpY2sgLTA3MDAiCisJZXhwb3J0IEdJVF9DT01NSVRURVJfREFURSBHSVRfQVVUSE9SX0RBVEUKK30KKworIyBTdG9wIGV4ZWN1dGlvbiBhbmQgc3RhcnQgYSBzaGVsbC4gVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0ZXN0cyBhbmQKKyMgb25seSBtYWtlcyBzZW5zZSB0b2dldGhlciB3aXRoICItdiIuCisjCisjIEJlIHN1cmUgdG8gcmVtb3ZlIGFsbCBpbnZvY2F0aW9ucyBvZiB0aGlzIGNvbW1hbmQgYmVmb3JlIHN1Ym1pdHRpbmcuCisKK3Rlc3RfcGF1c2UgKCkgeworCWlmIHRlc3QgIiR2ZXJib3NlIiA9IHQ7IHRoZW4KKwkJIiRTSEVMTF9QQVRIIiA8JjYgPiYzIDI+JjQKKwllbHNlCisJCWVycm9yID4mNSAidGVzdF9wYXVzZSByZXF1aXJlcyAtLXZlcmJvc2UiCisJZmkKK30KKworIyBDYWxsIHRlc3RfY29tbWl0IHdpdGggdGhlIGFyZ3VtZW50cyAiPG1lc3NhZ2U+IFs8ZmlsZT4gWzxjb250ZW50cz5dXSIKKyMKKyMgVGhpcyB3aWxsIGNvbW1pdCBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gY29udGVudHMgYW5kIHRoZSBnaXZlbiBjb21taXQKKyMgbWVzc2FnZS4gIEl0IHdpbGwgYWxzbyBhZGQgYSB0YWcgd2l0aCA8bWVzc2FnZT4gYXMgbmFtZS4KKyMKKyMgQm90aCA8ZmlsZT4gYW5kIDxjb250ZW50cz4gZGVmYXVsdCB0byA8bWVzc2FnZT4uCisKK3Rlc3RfY29tbWl0ICgpIHsKKwlub3RpY2s9ICYmCisJc2lnbm9mZj0gJiYKKwl3aGlsZSB0ZXN0ICQjICE9IDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLS1ub3RpY2spCisJCQlub3RpY2s9eWVzCisJCQk7OworCQktLXNpZ25vZmYpCisJCQlzaWdub2ZmPSIkMSIKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUgJiYKKwlmaWxlPSR7MjotIiQxLnQifSAmJgorCWVjaG8gIiR7My0kMX0iID4gIiRmaWxlIiAmJgorCWdpdCBhZGQgIiRmaWxlIiAmJgorCWlmIHRlc3QgLXogIiRub3RpY2siCisJdGhlbgorCQl0ZXN0X3RpY2sKKwlmaSAmJgorCWdpdCBjb21taXQgJHNpZ25vZmYgLW0gIiQxIiAmJgorCWdpdCB0YWcgIiQxIgorfQorCisjIENhbGwgdGVzdF9tZXJnZSB3aXRoIHRoZSBhcmd1bWVudHMgIjxtZXNzYWdlPiA8Y29tbWl0PiIsIHdoZXJlIDxjb21taXQ+CisjIGNhbiBiZSBhIHRhZyBwb2ludGluZyB0byB0aGUgY29tbWl0LXRvLW1lcmdlLgorCit0ZXN0X21lcmdlICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gIiQxIiAiJDIiICYmCisJZ2l0IHRhZyAiJDEiCit9CisKKyMgVGhpcyBmdW5jdGlvbiBoZWxwcyBzeXN0ZW1zIHdoZXJlIGNvcmUuZmlsZW1vZGU9ZmFsc2UgaXMgc2V0LgorIyBVc2UgaXQgaW5zdGVhZCBvZiBwbGFpbiAnY2htb2QgK3gnIHRvIHNldCBvciB1bnNldCB0aGUgZXhlY3V0YWJsZSBiaXQKKyMgb2YgYSBmaWxlIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgYWRkIGl0IHRvIHRoZSBpbmRleC4KKwordGVzdF9jaG1vZCAoKSB7CisJY2htb2QgIiRAIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIi0tY2htb2Q9JEAiCit9CisKKyMgVW5zZXQgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBidXQgZG9uJ3QgZmFpbCBpZiBpdCBkb2Vzbid0IGV4aXN0LgordGVzdF91bmNvbmZpZyAoKSB7CisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCAiJEAiCisJY29uZmlnX3N0YXR1cz0kPworCWNhc2UgIiRjb25maWdfc3RhdHVzIiBpbgorCTUpICMgb2ssIG5vdGhpbmcgdG8gdW5zZXQKKwkJY29uZmlnX3N0YXR1cz0wCisJCTs7CisJZXNhYworCXJldHVybiAkY29uZmlnX3N0YXR1cworfQorCisjIFNldCBnaXQgY29uZmlnLCBhdXRvbWF0aWNhbGx5IHVuc2V0dGluZyBpdCBhZnRlciB0aGUgdGVzdCBpcyBvdmVyLgordGVzdF9jb25maWcgKCkgeworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF91bmNvbmZpZyAnJDEnIiAmJgorCWdpdCBjb25maWcgIiRAIgorfQorCit0ZXN0X2NvbmZpZ19nbG9iYWwgKCkgeworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF91bmNvbmZpZyAtLWdsb2JhbCAnJDEnIiAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgIiRAIgorfQorCit3cml0ZV9zY3JpcHQgKCkgeworCXsKKwkJZWNobyAiIyEkezItIiRTSEVMTF9QQVRIIn0iICYmCisJCWNhdAorCX0gPiIkMSIgJiYKKwljaG1vZCAreCAiJDEiCit9CisKKyMgVXNlIHRlc3Rfc2V0X3ByZXJlcSB0byB0ZWxsIHRoYXQgYSBwYXJ0aWN1bGFyIHByZXJlcXVpc2l0ZSBpcyBhdmFpbGFibGUuCisjIFRoZSBwcmVyZXF1aXNpdGUgY2FuIGxhdGVyIGJlIGNoZWNrZWQgZm9yIGluIHR3byB3YXlzOgorIworIyAtIEV4cGxpY2l0bHkgdXNpbmcgdGVzdF9oYXZlX3ByZXJlcS4KKyMKKyMgLSBJbXBsaWNpdGx5IGJ5IHNwZWNpZnlpbmcgdGhlIHByZXJlcXVpc2l0ZSB0YWcgaW4gdGhlIGNhbGxzIHRvCisjICAgdGVzdF9leHBlY3Rfe3N1Y2Nlc3MsZmFpbHVyZSxjb2RlfS4KKyMKKyMgVGhlIHNpbmdsZSBwYXJhbWV0ZXIgaXMgdGhlIHByZXJlcXVpc2l0ZSB0YWcgKGEgc2ltcGxlIHdvcmQsIGluIGFsbAorIyBjYXBpdGFsIGxldHRlcnMgYnkgY29udmVudGlvbikuCisKK3Rlc3Rfc2V0X3ByZXJlcSAoKSB7CisJc2F0aXNmaWVkX3ByZXJlcT0iJHNhdGlzZmllZF9wcmVyZXEkMSAiCit9CitzYXRpc2ZpZWRfcHJlcmVxPSIgIgorbGF6aWx5X3Rlc3RhYmxlX3ByZXJlcT0gbGF6aWx5X3Rlc3RlZF9wcmVyZXE9CisKKyMgVXNhZ2U6IHRlc3RfbGF6eV9wcmVyZXEgUFJFUkVRICdzY3JpcHQnCit0ZXN0X2xhenlfcHJlcmVxICgpIHsKKwlsYXppbHlfdGVzdGFibGVfcHJlcmVxPSIkbGF6aWx5X3Rlc3RhYmxlX3ByZXJlcSQxICIKKwlldmFsIHRlc3RfcHJlcmVxX2xhemlseV8kMT1cJDIKK30KKwordGVzdF9ydW5fbGF6eV9wcmVyZXFfICgpIHsKKwlzY3JpcHQ9JworbWtkaXIgLXAgIiRUUkFTSF9ESVJFQ1RPUlkvcHJlcmVxLXRlc3QtZGlyIiAmJgorKAorCWNkICIkVFJBU0hfRElSRUNUT1JZL3ByZXJlcS10ZXN0LWRpciIgJiYnIiQyIicKKyknCisJc2F5ID4mMyAiY2hlY2tpbmcgcHJlcmVxdWlzaXRlOiAkMSIKKwlzYXkgPiYzICIkc2NyaXB0IgorCXRlc3RfZXZhbF8gIiRzY3JpcHQiCisJZXZhbF9yZXQ9JD8KKwlybSAtcmYgIiRUUkFTSF9ESVJFQ1RPUlkvcHJlcmVxLXRlc3QtZGlyIgorCWlmIHRlc3QgIiRldmFsX3JldCIgPSAwOyB0aGVuCisJCXNheSA+JjMgInByZXJlcXVpc2l0ZSAkMSBvayIKKwllbHNlCisJCXNheSA+JjMgInByZXJlcXVpc2l0ZSAkMSBub3Qgc2F0aXNmaWVkIgorCWZpCisJcmV0dXJuICRldmFsX3JldAorfQorCit0ZXN0X2hhdmVfcHJlcmVxICgpIHsKKwkjIHByZXJlcXVpc2l0ZXMgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoICcsJworCXNhdmVfSUZTPSRJRlMKKwlJRlM9LAorCXNldCAtLSAkKgorCUlGUz0kc2F2ZV9JRlMKKworCXRvdGFsX3ByZXJlcT0wCisJb2tfcHJlcmVxPTAKKwltaXNzaW5nX3ByZXJlcT0KKworCWZvciBwcmVyZXF1aXNpdGUKKwlkbworCQljYXNlICIgJGxhemlseV90ZXN0ZWRfcHJlcmVxICIgaW4KKwkJKiIgJHByZXJlcXVpc2l0ZSAiKikKKwkJCTs7CisJCSopCisJCQljYXNlICIgJGxhemlseV90ZXN0YWJsZV9wcmVyZXEgIiBpbgorCQkJKiIgJHByZXJlcXVpc2l0ZSAiKikKKwkJCQlldmFsICJzY3JpcHQ9XCR0ZXN0X3ByZXJlcV9sYXppbHlfJHByZXJlcXVpc2l0ZSIgJiYKKwkJCQlpZiB0ZXN0X3J1bl9sYXp5X3ByZXJlcV8gIiRwcmVyZXF1aXNpdGUiICIkc2NyaXB0IgorCQkJCXRoZW4KKwkJCQkJdGVzdF9zZXRfcHJlcmVxICRwcmVyZXF1aXNpdGUKKwkJCQlmaQorCQkJCWxhemlseV90ZXN0ZWRfcHJlcmVxPSIkbGF6aWx5X3Rlc3RlZF9wcmVyZXEkcHJlcmVxdWlzaXRlICIKKwkJCWVzYWMKKwkJCTs7CisJCWVzYWMKKworCQl0b3RhbF9wcmVyZXE9JCgoJHRvdGFsX3ByZXJlcSArIDEpKQorCQljYXNlICIkc2F0aXNmaWVkX3ByZXJlcSIgaW4KKwkJKiIgJHByZXJlcXVpc2l0ZSAiKikKKwkJCW9rX3ByZXJlcT0kKCgkb2tfcHJlcmVxICsgMSkpCisJCQk7OworCQkqKQorCQkJIyBLZWVwIGEgbGlzdCBvZiBtaXNzaW5nIHByZXJlcXVpc2l0ZXMKKwkJCWlmIHRlc3QgLXogIiRtaXNzaW5nX3ByZXJlcSIKKwkJCXRoZW4KKwkJCQltaXNzaW5nX3ByZXJlcT0kcHJlcmVxdWlzaXRlCisJCQllbHNlCisJCQkJbWlzc2luZ19wcmVyZXE9IiRwcmVyZXF1aXNpdGUsJG1pc3NpbmdfcHJlcmVxIgorCQkJZmkKKwkJZXNhYworCWRvbmUKKworCXRlc3QgJHRvdGFsX3ByZXJlcSA9ICRva19wcmVyZXEKK30KKwordGVzdF9kZWNsYXJlZF9wcmVyZXEgKCkgeworCWNhc2UgIiwkdGVzdF9wcmVyZXEsIiBpbgorCSosJDEsKikKKwkJcmV0dXJuIDAKKwkJOzsKKwllc2FjCisJcmV0dXJuIDEKK30KKwordGVzdF9leHBlY3RfZmFpbHVyZSAoKSB7CisJdGVzdCAiJCMiID0gMyAmJiB7IHRlc3RfcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCB0ZXN0X3ByZXJlcT0KKwl0ZXN0ICIkIyIgPSAyIHx8CisJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAyIG9yIDMgcGFyYW1ldGVycyB0byB0ZXN0LWV4cGVjdC1mYWlsdXJlIgorCWV4cG9ydCB0ZXN0X3ByZXJlcQorCWlmICEgdGVzdF9za2lwICIkQCIKKwl0aGVuCisJCXNheSA+JjMgImNoZWNraW5nIGtub3duIGJyZWFrYWdlOiAkMiIKKwkJaWYgdGVzdF9ydW5fICIkMiIgZXhwZWN0aW5nX2ZhaWx1cmUKKwkJdGhlbgorCQkJdGVzdF9rbm93bl9icm9rZW5fb2tfICIkMSIKKwkJZWxzZQorCQkJdGVzdF9rbm93bl9icm9rZW5fZmFpbHVyZV8gIiQxIgorCQlmaQorCWZpCisJZWNobyA+JjMgIiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAoKSB7CisJdGVzdCAiJCMiID0gMyAmJiB7IHRlc3RfcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCB0ZXN0X3ByZXJlcT0KKwl0ZXN0ICIkIyIgPSAyIHx8CisJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAyIG9yIDMgcGFyYW1ldGVycyB0byB0ZXN0LWV4cGVjdC1zdWNjZXNzIgorCWV4cG9ydCB0ZXN0X3ByZXJlcQorCWlmICEgdGVzdF9za2lwICIkQCIKKwl0aGVuCisJCXNheSA+JjMgImV4cGVjdGluZyBzdWNjZXNzOiAkMiIKKwkJaWYgdGVzdF9ydW5fICIkMiIKKwkJdGhlbgorCQkJdGVzdF9va18gIiQxIgorCQllbHNlCisJCQl0ZXN0X2ZhaWx1cmVfICIkQCIKKwkJZmkKKwlmaQorCWVjaG8gPiYzICIiCit9CisKKyMgdGVzdF9leHRlcm5hbCBydW5zIGV4dGVybmFsIHRlc3Qgc2NyaXB0cyB0aGF0IHByb3ZpZGUgY29udGludW91cworIyB0ZXN0IG91dHB1dCBhYm91dCB0aGVpciBwcm9ncmVzcywgYW5kIHN1Y2NlZWRzL2ZhaWxzIG9uCisjIHplcm8vbm9uLXplcm8gZXhpdCBjb2RlLiAgSXQgb3V0cHV0cyB0aGUgdGVzdCBvdXRwdXQgb24gc3Rkb3V0IGV2ZW4KKyMgaW4gbm9uLXZlcmJvc2UgbW9kZSwgYW5kIGFubm91bmNlcyB0aGUgZXh0ZXJuYWwgc2NyaXB0IHdpdGggIiMgcnVuCisjIDxuPjogLi4uIiBiZWZvcmUgcnVubmluZyBpdC4gIFdoZW4gcHJvdmlkaW5nIHJlbGF0aXZlIHBhdGhzLCBrZWVwIGluCisjIG1pbmQgdGhhdCBhbGwgc2NyaXB0cyBydW4gaW4gInRyYXNoIGRpcmVjdG9yeSIuCisjIFVzYWdlOiB0ZXN0X2V4dGVybmFsIGRlc2NyaXB0aW9uIGNvbW1hbmQgYXJndW1lbnRzLi4uCisjIEV4YW1wbGU6IHRlc3RfZXh0ZXJuYWwgJ1BlcmwgQVBJJyBwZXJsIC4uL3BhdGgvdG8vdGVzdC5wbAordGVzdF9leHRlcm5hbCAoKSB7CisJdGVzdCAiJCMiID0gNCAmJiB7IHRlc3RfcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCB0ZXN0X3ByZXJlcT0KKwl0ZXN0ICIkIyIgPSAzIHx8CisJZXJyb3IgPiY1ICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiBub3QgMyBvciA0IHBhcmFtZXRlcnMgdG8gdGVzdF9leHRlcm5hbCIKKwlkZXNjcj0iJDEiCisJc2hpZnQKKwlleHBvcnQgdGVzdF9wcmVyZXEKKwlpZiAhIHRlc3Rfc2tpcCAiJGRlc2NyIiAiJEAiCisJdGhlbgorCQkjIEFubm91bmNlIHRoZSBzY3JpcHQgdG8gcmVkdWNlIGNvbmZ1c2lvbiBhYm91dCB0aGUKKwkJIyB0ZXN0IG91dHB1dCB0aGF0IGZvbGxvd3MuCisJCXNheV9jb2xvciAiIiAiIyBydW4gJHRlc3RfY291bnQ6ICRkZXNjciAoJCopIgorCQkjIEV4cG9ydCBURVNUX0RJUkVDVE9SWSwgVFJBU0hfRElSRUNUT1JZIGFuZCBHSVRfVEVTVF9MT05HCisJCSMgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBpbiBzY3JpcHQKKwkJZXhwb3J0IFRFU1RfRElSRUNUT1JZIFRSQVNIX0RJUkVDVE9SWSBHSVRfVEVTVF9MT05HCisJCSMgUnVuIGNvbW1hbmQ7IHJlZGlyZWN0IGl0cyBzdGRlcnIgdG8gJjQgYXMgaW4KKwkJIyB0ZXN0X3J1bl8sIGJ1dCBrZWVwIGl0cyBzdGRvdXQgb24gb3VyIHN0ZG91dCBldmVuIGluCisJCSMgbm9uLXZlcmJvc2UgbW9kZS4KKwkJIiRAIiAyPiY0CisJCWlmIFsgIiQ/IiA9IDAgXQorCQl0aGVuCisJCQlpZiB0ZXN0ICR0ZXN0X2V4dGVybmFsX2hhc190YXAgLWVxIDA7IHRoZW4KKwkJCQl0ZXN0X29rXyAiJGRlc2NyIgorCQkJZWxzZQorCQkJCXNheV9jb2xvciAiIiAiIyB0ZXN0X2V4dGVybmFsIHRlc3QgJGRlc2NyIHdhcyBvayIKKwkJCQl0ZXN0X3N1Y2Nlc3M9JCgoJHRlc3Rfc3VjY2VzcyArIDEpKQorCQkJZmkKKwkJZWxzZQorCQkJaWYgdGVzdCAkdGVzdF9leHRlcm5hbF9oYXNfdGFwIC1lcSAwOyB0aGVuCisJCQkJdGVzdF9mYWlsdXJlXyAiJGRlc2NyIiAiJEAiCisJCQllbHNlCisJCQkJc2F5X2NvbG9yIGVycm9yICIjIHRlc3RfZXh0ZXJuYWwgdGVzdCAkZGVzY3IgZmFpbGVkOiAkQCIKKwkJCQl0ZXN0X2ZhaWx1cmU9JCgoJHRlc3RfZmFpbHVyZSArIDEpKQorCQkJZmkKKwkJZmkKKwlmaQorfQorCisjIExpa2UgdGVzdF9leHRlcm5hbCwgYnV0IGluIGFkZGl0aW9uIHRlc3RzIHRoYXQgdGhlIGNvbW1hbmQgZ2VuZXJhdGVkCisjIG5vIG91dHB1dCBvbiBzdGRlcnIuCit0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyICgpIHsKKwkjIFRoZSB0ZW1wb3JhcnkgZmlsZSBoYXMgbm8gKGFuZCBtdXN0IGhhdmUgbm8pIHNlY3VyaXR5CisJIyBpbXBsaWNhdGlvbnMuCisJdG1wPSR7VE1QRElSOi0vdG1wfQorCXN0ZGVycj0iJHRtcC9naXQtZXh0ZXJuYWwtc3RkZXJyLiQkLnRtcCIKKwl0ZXN0X2V4dGVybmFsICIkQCIgND4gIiRzdGRlcnIiCisJWyAtZiAiJHN0ZGVyciIgXSB8fCBlcnJvciAiSW50ZXJuYWwgZXJyb3I6ICRzdGRlcnIgZGlzYXBwZWFyZWQuIgorCWRlc2NyPSJubyBzdGRlcnI6ICQxIgorCXNoaWZ0CisJc2F5ID4mMyAiIyBleHBlY3Rpbmcgbm8gc3RkZXJyIGZyb20gcHJldmlvdXMgY29tbWFuZCIKKwlpZiBbICEgLXMgIiRzdGRlcnIiIF07IHRoZW4KKwkJcm0gIiRzdGRlcnIiCisKKwkJaWYgdGVzdCAkdGVzdF9leHRlcm5hbF9oYXNfdGFwIC1lcSAwOyB0aGVuCisJCQl0ZXN0X29rXyAiJGRlc2NyIgorCQllbHNlCisJCQlzYXlfY29sb3IgIiIgIiMgdGVzdF9leHRlcm5hbF93aXRob3V0X3N0ZGVyciB0ZXN0ICRkZXNjciB3YXMgb2siCisJCQl0ZXN0X3N1Y2Nlc3M9JCgoJHRlc3Rfc3VjY2VzcyArIDEpKQorCQlmaQorCWVsc2UKKwkJaWYgWyAiJHZlcmJvc2UiID0gdCBdOyB0aGVuCisJCQlvdXRwdXQ9YGVjaG87IGVjaG8gIiMgU3RkZXJyIGlzOiI7IGNhdCAiJHN0ZGVyciJgCisJCWVsc2UKKwkJCW91dHB1dD0KKwkJZmkKKwkJIyBybSBmaXJzdCBpbiBjYXNlIHRlc3RfZmFpbHVyZSBleGl0cy4KKwkJcm0gIiRzdGRlcnIiCisJCWlmIHRlc3QgJHRlc3RfZXh0ZXJuYWxfaGFzX3RhcCAtZXEgMDsgdGhlbgorCQkJdGVzdF9mYWlsdXJlXyAiJGRlc2NyIiAiJEAiICIkb3V0cHV0IgorCQllbHNlCisJCQlzYXlfY29sb3IgZXJyb3IgIiMgdGVzdF9leHRlcm5hbF93aXRob3V0X3N0ZGVyciB0ZXN0ICRkZXNjciBmYWlsZWQ6ICRAOiAkb3V0cHV0IgorCQkJdGVzdF9mYWlsdXJlPSQoKCR0ZXN0X2ZhaWx1cmUgKyAxKSkKKwkJZmkKKwlmaQorfQorCisjIGRlYnVnZ2luZy1mcmllbmRseSBhbHRlcm5hdGl2ZXMgdG8gInRlc3QgWy1mfC1kfC1lXSIKKyMgVGhlIGNvbW1hbmRzIHRlc3QgdGhlIGV4aXN0ZW5jZSBvciBub24tZXhpc3RlbmNlIG9mICQxLiAkMiBjYW4gYmUKKyMgZ2l2ZW4gdG8gcHJvdmlkZSBhIG1vcmUgcHJlY2lzZSBkaWFnbm9zaXMuCit0ZXN0X3BhdGhfaXNfZmlsZSAoKSB7CisJaWYgISBbIC1mICIkMSIgXQorCXRoZW4KKwkJZWNobyAiRmlsZSAkMSBkb2Vzbid0IGV4aXN0LiAkKiIKKwkJZmFsc2UKKwlmaQorfQorCit0ZXN0X3BhdGhfaXNfZGlyICgpIHsKKwlpZiAhIFsgLWQgIiQxIiBdCisJdGhlbgorCQllY2hvICJEaXJlY3RvcnkgJDEgZG9lc24ndCBleGlzdC4gJCoiCisJCWZhbHNlCisJZmkKK30KKwordGVzdF9wYXRoX2lzX21pc3NpbmcgKCkgeworCWlmIFsgLWUgIiQxIiBdCisJdGhlbgorCQllY2hvICJQYXRoIGV4aXN0czoiCisJCWxzIC1sZCAiJDEiCisJCWlmIFsgJCMgLWdlIDEgXTsgdGhlbgorCQkJZWNobyAiJCoiCisJCWZpCisJCWZhbHNlCisJZmkKK30KKworIyB0ZXN0X2xpbmVfY291bnQgY2hlY2tzIHRoYXQgYSBmaWxlIGhhcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGl0CisjIG91Z2h0IHRvLiBGb3IgZXhhbXBsZToKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZHVjZSBleGFjdGx5IG9uZSBsaW5lIG9mIG91dHB1dCcgJworIwkJZG8gc29tZXRoaW5nID5vdXRwdXQgJiYKKyMJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0cHV0CisjCScKKyMKKyMgaXMgbGlrZSAidGVzdCAkKHdjIC1sIDxvdXRwdXQpID0gMSIgZXhjZXB0IHRoYXQgaXQgcGFzc2VzIHRoZQorIyBvdXRwdXQgdGhyb3VnaCB3aGVuIHRoZSBudW1iZXIgb2YgbGluZXMgaXMgd3JvbmcuCisKK3Rlc3RfbGluZV9jb3VudCAoKSB7CisJaWYgdGVzdCAkIyAhPSAzCisJdGhlbgorCQllcnJvciAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogbm90IDMgcGFyYW1ldGVycyB0byB0ZXN0X2xpbmVfY291bnQiCisJZWxpZiAhIHRlc3QgJCh3YyAtbCA8IiQzIikgIiQxIiAiJDIiCisJdGhlbgorCQllY2hvICJ0ZXN0X2xpbmVfY291bnQ6IGxpbmUgY291bnQgZm9yICQzICEkMSAkMiIKKwkJY2F0ICIkMyIKKwkJcmV0dXJuIDEKKwlmaQorfQorCisjIFRoaXMgaXMgbm90IGFtb25nIHRvcC1sZXZlbCAodGVzdF9leHBlY3Rfc3VjY2VzcyB8IHRlc3RfZXhwZWN0X2ZhaWx1cmUpCisjIGJ1dCBpcyBhIHByZWZpeCB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSB0ZXN0IHNjcmlwdCwgbGlrZToKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxhaW4gYW5kIGRpZScgJworIyAgICAgICAgICAgZG8gc29tZXRoaW5nICYmCisjICAgICAgICAgICBkbyBzb21ldGhpbmcgZWxzZSAmJgorIwkgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC4uL291dGVyc3BhY2UKKyMJJworIworIyBXcml0aW5nIHRoaXMgYXMgIiEgZ2l0IGNoZWNrb3V0IC4uL291dGVyc3BhY2UiIGlzIHdyb25nLCBiZWNhdXNlCisjIHRoZSBmYWlsdXJlIGNvdWxkIGJlIGR1ZSB0byBhIHNlZ3YuICBXZSB3YW50IGEgY29udHJvbGxlZCBmYWlsdXJlLgorCit0ZXN0X211c3RfZmFpbCAoKSB7CisJIiRAIgorCWV4aXRfY29kZT0kPworCWlmIHRlc3QgJGV4aXRfY29kZSA9IDA7IHRoZW4KKwkJZWNobyA+JjIgInRlc3RfbXVzdF9mYWlsOiBjb21tYW5kIHN1Y2NlZWRlZDogJCoiCisJCXJldHVybiAxCisJZWxpZiB0ZXN0ICRleGl0X2NvZGUgLWd0IDEyOSAtYSAkZXhpdF9jb2RlIC1sZSAxOTI7IHRoZW4KKwkJZWNobyA+JjIgInRlc3RfbXVzdF9mYWlsOiBkaWVkIGJ5IHNpZ25hbDogJCoiCisJCXJldHVybiAxCisJZWxpZiB0ZXN0ICRleGl0X2NvZGUgPSAxMjc7IHRoZW4KKwkJZWNobyA+JjIgInRlc3RfbXVzdF9mYWlsOiBjb21tYW5kIG5vdCBmb3VuZDogJCoiCisJCXJldHVybiAxCisJZmkKKwlyZXR1cm4gMAorfQorCisjIFNpbWlsYXIgdG8gdGVzdF9tdXN0X2ZhaWwsIGJ1dCB0b2xlcmF0ZXMgc3VjY2VzcywgdG9vLiAgVGhpcyBpcworIyBtZWFudCB0byBiZSB1c2VkIGluIGNvbnRleHRzIGxpa2U6CisjCisjCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NvbWUgY29tbWFuZCB3b3JrcyB3aXRob3V0IGNvbmZpZ3VyYXRpb24nICcKKyMJCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgYWxsLmNvbmZpZ3VyYXRpb24gJiYKKyMJCWRvIHNvbWV0aGluZworIwknCisjCisjIFdyaXRpbmcgImdpdCBjb25maWcgLS11bnNldCBhbGwuY29uZmlndXJhdGlvbiB8fCA6IiB3b3VsZCBiZSB3cm9uZywKKyMgYmVjYXVzZSB3ZSB3YW50IHRvIG5vdGljZSBpZiBpdCBmYWlscyBkdWUgdG8gc2Vndi4KKwordGVzdF9taWdodF9mYWlsICgpIHsKKwkiJEAiCisJZXhpdF9jb2RlPSQ/CisJaWYgdGVzdCAkZXhpdF9jb2RlIC1ndCAxMjkgLWEgJGV4aXRfY29kZSAtbGUgMTkyOyB0aGVuCisJCWVjaG8gPiYyICJ0ZXN0X21pZ2h0X2ZhaWw6IGRpZWQgYnkgc2lnbmFsOiAkKiIKKwkJcmV0dXJuIDEKKwllbGlmIHRlc3QgJGV4aXRfY29kZSA9IDEyNzsgdGhlbgorCQllY2hvID4mMiAidGVzdF9taWdodF9mYWlsOiBjb21tYW5kIG5vdCBmb3VuZDogJCoiCisJCXJldHVybiAxCisJZmkKKwlyZXR1cm4gMAorfQorCisjIFNpbWlsYXIgdG8gdGVzdF9tdXN0X2ZhaWwgYW5kIHRlc3RfbWlnaHRfZmFpbCwgYnV0IGNoZWNrIHRoYXQgYQorIyBnaXZlbiBjb21tYW5kIGV4aXRlZCB3aXRoIGEgZ2l2ZW4gZXhpdCBjb2RlLiBNZWFudCB0byBiZSB1c2VkIGFzOgorIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZXJnZSB3aXRoIGQvZiBjb25mbGljdHMnICcKKyMJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbWVyZ2UgIm1lcmdlIG1zZyIgQiBtYXN0ZXIKKyMJJworCit0ZXN0X2V4cGVjdF9jb2RlICgpIHsKKwl3YW50X2NvZGU9JDEKKwlzaGlmdAorCSIkQCIKKwlleGl0X2NvZGU9JD8KKwlpZiB0ZXN0ICRleGl0X2NvZGUgPSAkd2FudF9jb2RlCisJdGhlbgorCQlyZXR1cm4gMAorCWZpCisKKwllY2hvID4mMiAidGVzdF9leHBlY3RfY29kZTogY29tbWFuZCBleGl0ZWQgd2l0aCAkZXhpdF9jb2RlLCB3ZSB3YW50ZWQgJHdhbnRfY29kZSAkKiIKKwlyZXR1cm4gMQorfQorCisjIHRlc3RfY21wIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGNvbXBhcmUgYWN0dWFsIGFuZCBleHBlY3RlZCBvdXRwdXQuCisjIFlvdSBjYW4gdXNlIGl0IGxpa2U6CisjCisjCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbyB3b3JrcycgJworIwkJZWNobyBleHBlY3RlZCA+ZXhwZWN0ZWQgJiYKKyMJCWZvbyA+YWN0dWFsICYmCisjCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyMJJworIworIyBUaGlzIGNvdWxkIGJlIHdyaXR0ZW4gYXMgZWl0aGVyICJjbXAiIG9yICJkaWZmIC11IiwgYnV0OgorIyAtIGNtcCdzIG91dHB1dCBpcyBub3QgbmVhcmx5IGFzIGVhc3kgdG8gcmVhZCBhcyBkaWZmIC11CisjIC0gbm90IGFsbCBkaWZmIHZlcnNpb25zIHVuZGVyc3RhbmQgIi11IgorCit0ZXN0X2NtcCgpIHsKKwkkR0lUX1RFU1RfQ01QICIkQCIKK30KKworIyBQcmludCBhIHNlcXVlbmNlIG9mIG51bWJlcnMgb3IgbGV0dGVycyBpbiBpbmNyZWFzaW5nIG9yZGVyLiAgVGhpcyBpcworIyBzaW1pbGFyIHRvIEdOVSBzZXEoMSksIGJ1dCB0aGUgbGF0dGVyIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUKKyMgZXZlcnl3aGVyZSAoYW5kIGRvZXMgbm90IGRvIGxldHRlcnMpLiAgSXQgbWF5IGJlIHVzZWQgbGlrZToKKyMKKyMJZm9yIGkgaW4gYHRlc3Rfc2VxIDEwMGA7IGRvCisjCQlmb3IgaiBpbiBgdGVzdF9zZXEgMTAgMjBgOyBkbworIwkJCWZvciBrIGluIGB0ZXN0X3NlcSBhIHpgOyBkbworIwkJCQllY2hvICRpLSRqLSRrCisjCQkJZG9uZQorIwkJZG9uZQorIwlkb25lCisKK3Rlc3Rfc2VxICgpIHsKKwljYXNlICQjIGluCisJMSkJc2V0IDEgIiRAIiA7OworCTIpCTs7CisJKikJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAxIG9yIDIgcGFyYW1ldGVycyB0byB0ZXN0X3NlcSIgOzsKKwllc2FjCisJIiRQRVJMX1BBVEgiIC1sZSAncHJpbnQgZm9yICRBUkdWWzBdLi4kQVJHVlsxXScgLS0gIiRAIgorfQorCisjIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2NoZWR1bGUgc29tZSBjb21tYW5kcyB0byBiZSBydW4KKyMgdW5jb25kaXRpb25hbGx5IGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QgdG8gcmVzdG9yZSBzYW5pdHk6CisjCisjCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY29yZS5jYXBzbG9jaycgJworIwkJZ2l0IGNvbmZpZyBjb3JlLmNhcHNsb2NrIHRydWUgJiYKKyMJCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUuY2Fwc2xvY2siICYmCisjCQloZWxsbyB3b3JsZAorIwknCisjCisjIFRoYXQgd291bGQgYmUgcm91Z2hseSBlcXVpdmFsZW50IHRvCisjCisjCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY29yZS5jYXBzbG9jaycgJworIwkJZ2l0IGNvbmZpZyBjb3JlLmNhcHNsb2NrIHRydWUgJiYKKyMJCWhlbGxvIHdvcmxkCisjCQlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5jYXBzbG9jaworIwknCisjCisjIGV4Y2VwdCB0aGF0IHRoZSBncmVldGluZyBhbmQgY29uZmlnIC0tdW5zZXQgbXVzdCBib3RoIHN1Y2NlZWQgZm9yCisjIHRoZSB0ZXN0IHRvIHBhc3MuCisjCisjIE5vdGUgdGhhdCB1bmRlciAtLWltbWVkaWF0ZSBtb2RlLCBubyBjbGVhbi11cCBpcyBkb25lIHRvIGhlbHAgZGlhZ25vc2UKKyMgd2hhdCB3ZW50IHdyb25nLgorCit0ZXN0X3doZW5fZmluaXNoZWQgKCkgeworCXRlc3RfY2xlYW51cD0ieyAkKgorCQl9ICYmIChleGl0IFwiXCRldmFsX3JldFwiKTsgZXZhbF9yZXQ9XCQ/OyAkdGVzdF9jbGVhbnVwIgorfQorCisjIE1vc3QgdGVzdHMgY2FuIHVzZSB0aGUgY3JlYXRlZCByZXBvc2l0b3J5LCBidXQgc29tZSBtYXkgbmVlZCB0byBjcmVhdGUgbW9yZS4KKyMgVXNhZ2U6IHRlc3RfY3JlYXRlX3JlcG8gPGRpcmVjdG9yeT4KK3Rlc3RfY3JlYXRlX3JlcG8gKCkgeworCXRlc3QgIiQjIiA9IDEgfHwKKwllcnJvciAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogbm90IDEgcGFyYW1ldGVyIHRvIHRlc3QtY3JlYXRlLXJlcG8iCisJcmVwbz0iJDEiCisJbWtkaXIgLXAgIiRyZXBvIgorCSgKKwkJY2QgIiRyZXBvIiB8fCBlcnJvciAiQ2Fubm90IHNldHVwIHRlc3QgZW52aXJvbm1lbnQiCisJCSIkR0lUX0VYRUNfUEFUSC9naXQtaW5pdCIgIi0tdGVtcGxhdGU9JEdJVF9CVUlMRF9ESVIvdGVtcGxhdGVzL2JsdC8iID4mMyAyPiY0IHx8CisJCWVycm9yICJjYW5ub3QgcnVuIGdpdCBpbml0IC0tIGhhdmUgeW91IGJ1aWx0IHRoaW5ncyB5ZXQ/IgorCQltdiAuZ2l0L2hvb2tzIC5naXQvaG9va3MtZGlzYWJsZWQKKwkpIHx8IGV4aXQKK30KZGlmZiAtLWdpdCBhL3QvdGVzdC1saWIuc2ggYi90L3Rlc3QtbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNDI4MmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Rlc3QtbGliLnNoCkBAIC0wLDAgKzEsNzQzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAuCisKKyMgS2VlcCB0aGUgb3JpZ2luYWwgVEVSTSBmb3Igc2F5X2NvbG9yCitPUklHSU5BTF9URVJNPSRURVJNCisKKyMgVGVzdCB0aGUgYmluYXJpZXMgd2UgaGF2ZSBqdXN0IGJ1aWx0LiAgVGhlIHRlc3RzIGFyZSBrZXB0IGluCisjIHQvIHN1YmRpcmVjdG9yeSBhbmQgYXJlIHJ1biBpbiAndHJhc2ggZGlyZWN0b3J5JyBzdWJkaXJlY3RvcnkuCitpZiB0ZXN0IC16ICIkVEVTVF9ESVJFQ1RPUlkiCit0aGVuCisJIyBXZSBhbGxvdyB0ZXN0cyB0byBvdmVycmlkZSB0aGlzLCBpbiBjYXNlIHRoZXkgd2FudCB0byBydW4gdGVzdHMKKwkjIG91dHNpZGUgb2YgdC8sIGUuZy4gZm9yIHJ1bm5pbmcgdGVzdHMgb24gdGhlIHRlc3QgbGlicmFyeQorCSMgaXRzZWxmLgorCVRFU1RfRElSRUNUT1JZPSQocHdkKQorZmkKK2lmIHRlc3QgLXogIiRURVNUX09VVFBVVF9ESVJFQ1RPUlkiCit0aGVuCisJIyBTaW1pbGFybHksIG92ZXJyaWRlIHRoaXMgdG8gc3RvcmUgdGhlIHRlc3QtcmVzdWx0cyBzdWJkaXIKKwkjIGVsc2V3aGVyZQorCVRFU1RfT1VUUFVUX0RJUkVDVE9SWT0kVEVTVF9ESVJFQ1RPUlkKK2ZpCitHSVRfQlVJTERfRElSPSIkVEVTVF9ESVJFQ1RPUlkiLy4uCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSXQgYXBwZWFycyB0aGF0IHBlb3BsZSB0cnkgdG8gcnVuIHRlc3RzIHdpdGhvdXQgYnVpbGRpbmcuLi4KKyIkR0lUX0JVSUxEX0RJUi9naXQiID4vZGV2L251bGwKK2lmIHRlc3QgJD8gIT0gMQordGhlbgorCWVjaG8gPiYyICdlcnJvcjogeW91IGRvIG5vdCBzZWVtIHRvIGhhdmUgYnVpbHQgZ2l0IHlldC4nCisJZXhpdCAxCitmaQorCisuICIkR0lUX0JVSUxEX0RJUiIvR0lULUJVSUxELU9QVElPTlMKK2V4cG9ydCBQRVJMX1BBVEggU0hFTExfUEFUSAorCisjIGlmIC0tdGVlIHdhcyBwYXNzZWQsIHdyaXRlIHRoZSBvdXRwdXQgbm90IG9ubHkgdG8gdGhlIHRlcm1pbmFsLCBidXQKKyMgYWRkaXRpb25hbGx5IHRvIHRoZSBmaWxlIHRlc3QtcmVzdWx0cy8kQkFTRU5BTUUub3V0LCB0b28uCitjYXNlICIkR0lUX1RFU1RfVEVFX1NUQVJURUQsICQqICIgaW4KK2RvbmUsKikKKwkjIGRvIG5vdCByZWRpcmVjdCBhZ2FpbgorCTs7CisqJyAtLXRlZSAnKnwqJyAtLXZhJyopCisJbWtkaXIgLXAgdGVzdC1yZXN1bHRzCisJQkFTRT10ZXN0LXJlc3VsdHMvJChiYXNlbmFtZSAiJDAiIC5zaCkKKwkoR0lUX1RFU1RfVEVFX1NUQVJURUQ9ZG9uZSAke1NIRUxMX1BBVEh9ICIkMCIgIiRAIiAyPiYxOworCSBlY2hvICQ/ID4gJEJBU0UuZXhpdCkgfCB0ZWUgJEJBU0Uub3V0CisJdGVzdCAiJChjYXQgJEJBU0UuZXhpdCkiID0gMAorCWV4aXQKKwk7OworZXNhYworCisjIEZvciByZXBlYXRhYmlsaXR5LCByZXNldCB0aGUgZW52aXJvbm1lbnQgdG8ga25vd24gdmFsdWUuCitMQU5HPUMKK0xDX0FMTD1DCitQQUdFUj1jYXQKK1RaPVVUQworVEVSTT1kdW1iCitleHBvcnQgTEFORyBMQ19BTEwgUEFHRVIgVEVSTSBUWgorRURJVE9SPToKKyMgQSBjYWxsIHRvICJ1bnNldCIgd2l0aCBubyBhcmd1bWVudHMgY2F1c2VzIGF0IGxlYXN0IFNvbGFyaXMgMTAKKyMgL3Vzci94cGc0L2Jpbi9zaCBhbmQgL2Jpbi9rc2ggdG8gYmFpbCBvdXQuICBTbyBrZWVwIHRoZSB1bnNldHMKKyMgZGVyaXZpbmcgZnJvbSB0aGUgY29tbWFuZCBzdWJzdGl0dXRpb24gY2x1c3RlcmVkIHdpdGggdGhlIG90aGVyCisjIG9uZXMuCit1bnNldCBWSVNVQUwgRU1BSUwgTEFOR1VBR0UgQ09MVU1OUyAkKCIkUEVSTF9QQVRIIiAtZSAnCisJbXkgQGVudiA9IGtleXMgJUVOVjsKKwlteSAkb2sgPSBqb2luKCJ8IiwgcXcoCisJCVRSQUNFCisJCURFQlVHCisJCVVTRV9MT09LVVAKKwkJVEVTVAorCQkuKl9URVNUCisJCVBST1ZFCisJCVZBTEdSSU5ECisJCVBFUkZfQUdHUkVHQVRJTkdfTEFURVIKKwkpKTsKKwlteSBAdmFycyA9IGdyZXAoL15HSVRfLyAmJiAhL15HSVRfKCRvaykvbywgQGVudik7CisJcHJpbnQgam9pbigiXG4iLCBAdmFycyk7CisnKQordW5zZXQgWERHX0NPTkZJR19IT01FCitHSVRfQVVUSE9SX0VNQUlMPWF1dGhvckBleGFtcGxlLmNvbQorR0lUX0FVVEhPUl9OQU1FPSdBIFUgVGhvcicKK0dJVF9DT01NSVRURVJfRU1BSUw9Y29tbWl0dGVyQGV4YW1wbGUuY29tCitHSVRfQ09NTUlUVEVSX05BTUU9J0MgTyBNaXR0ZXInCitHSVRfTUVSR0VfVkVSQk9TSVRZPTUKK0dJVF9NRVJHRV9BVVRPRURJVD1ubworZXhwb3J0IEdJVF9NRVJHRV9WRVJCT1NJVFkgR0lUX01FUkdFX0FVVE9FRElUCitleHBvcnQgR0lUX0FVVEhPUl9FTUFJTCBHSVRfQVVUSE9SX05BTUUKK2V4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMIEdJVF9DT01NSVRURVJfTkFNRQorZXhwb3J0IEVESVRPUgorCisjIEFkZCBsaWJjIE1BTExPQyBhbmQgTUFMTE9DX1BFUlRVUkIgdGVzdAorIyBvbmx5IGlmIHdlIGFyZSBub3QgZXhlY3V0aW5nIHRoZSB0ZXN0IHdpdGggdmFsZ3JpbmQKK2lmIGV4cHIgIiAkR0lUX1RFU1RfT1BUUyAiIDogIi4qIC0tdmFsZ3JpbmQgIiA+L2Rldi9udWxsIHx8CisgICB0ZXN0IC1uICIkVEVTVF9OT19NQUxMT0NfQ0hFQ0siCit0aGVuCisJc2V0dXBfbWFsbG9jX2NoZWNrICgpIHsKKwkJOiBub3RoaW5nCisJfQorCXRlYXJkb3duX21hbGxvY19jaGVjayAoKSB7CisJCTogbm90aGluZworCX0KK2Vsc2UKKwlzZXR1cF9tYWxsb2NfY2hlY2sgKCkgeworCQlNQUxMT0NfQ0hFQ0tfPTMJTUFMTE9DX1BFUlRVUkJfPTE2NQorCQlleHBvcnQgTUFMTE9DX0NIRUNLXyBNQUxMT0NfUEVSVFVSQl8KKwl9CisJdGVhcmRvd25fbWFsbG9jX2NoZWNrICgpIHsKKwkJdW5zZXQgTUFMTE9DX0NIRUNLXyBNQUxMT0NfUEVSVFVSQl8KKwl9CitmaQorCisjIFByb3RlY3Qgb3Vyc2VsdmVzIGZyb20gY29tbW9uIG1pc2NvbmZpZ3VyYXRpb24gdG8gZXhwb3J0CisjIENEUEFUSCBpbnRvIHRoZSBlbnZpcm9ubWVudAordW5zZXQgQ0RQQVRICisKK3Vuc2V0IEdSRVBfT1BUSU9OUworCitjYXNlICQoZWNobyAkR0lUX1RSQUNFIHx0ciAiW0EtWl0iICJbYS16XSIpIGluCisxfDJ8dHJ1ZSkKKwllY2hvICIqIHdhcm5pbmc6IFNvbWUgdGVzdHMgd2lsbCBub3Qgd29yayBpZiBHSVRfVFJBQ0UiIFwKKwkJImlzIHNldCBhcyB0byB0cmFjZSBvbiBTVERFUlIgISAqIgorCWVjaG8gIiogd2FybmluZzogUGxlYXNlIHNldCBHSVRfVFJBQ0UgdG8gc29tZXRoaW5nIiBcCisJCSJvdGhlciB0aGFuIDEsIDIgb3IgdHJ1ZSAhICoiCisJOzsKK2VzYWMKKworIyBDb252ZW5pZW5jZQorIworIyBBIHJlZ2V4cCB0byBtYXRjaCA1IGFuZCA0MCBoZXhkaWdpdHMKK194MDU9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCitfeDQwPSIkX3gwNSRfeDA1JF94MDUkX3gwNSRfeDA1JF94MDUkX3gwNSRfeDA1IgorCisjIFplcm8gU0hBLTEKK196NDA9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCisjIExpbmUgZmVlZAorTEY9JworJworCitleHBvcnQgX3gwNSBfeDQwIF96NDAgTEYKKworIyBFYWNoIHRlc3Qgc2hvdWxkIHN0YXJ0IHdpdGggc29tZXRoaW5nIGxpa2UgdGhpcywgYWZ0ZXIgY29weXJpZ2h0IG5vdGljZXM6CisjCisjIHRlc3RfZGVzY3JpcHRpb249J0Rlc2NyaXB0aW9uIG9mIHRoaXMgdGVzdC4uLgorIyBUaGlzIHRlc3QgY2hlY2tzIGlmIGNvbW1hbmQgeHl6enkgZG9lcyB0aGUgcmlnaHQgdGhpbmcuLi4KKyMgJworIyAuIC4vdGVzdC1saWIuc2gKK1sgIngkT1JJR0lOQUxfVEVSTSIgIT0gInhkdW1iIiBdICYmICgKKwkJVEVSTT0kT1JJR0lOQUxfVEVSTSAmJgorCQlleHBvcnQgVEVSTSAmJgorCQlbIC10IDEgXSAmJgorCQl0cHV0IGJvbGQgPi9kZXYvbnVsbCAyPiYxICYmCisJCXRwdXQgc2V0YWYgMSA+L2Rldi9udWxsIDI+JjEgJiYKKwkJdHB1dCBzZ3IwID4vZGV2L251bGwgMj4mMQorCSkgJiYKKwljb2xvcj10CisKK3doaWxlIHRlc3QgIiQjIiAtbmUgMAorZG8KKwljYXNlICIkMSIgaW4KKwktZHwtLWR8LS1kZXwtLWRlYnwtLWRlYnV8LS1kZWJ1ZykKKwkJZGVidWc9dDsgc2hpZnQgOzsKKwktaXwtLWl8LS1pbXwtLWltbXwtLWltbWV8LS1pbW1lZHwtLWltbWVkaXwtLWltbWVkaWF8LS1pbW1lZGlhdHwtLWltbWVkaWF0ZSkKKwkJaW1tZWRpYXRlPXQ7IHNoaWZ0IDs7CisJLWx8LS1sfC0tbG98LS1sb258LS1sb25nfC0tbG9uZy18LS1sb25nLXR8LS1sb25nLXRlfC0tbG9uZy10ZXN8LS1sb25nLXRlc3R8LS1sb25nLXRlc3RzKQorCQlHSVRfVEVTVF9MT05HPXQ7IGV4cG9ydCBHSVRfVEVTVF9MT05HOyBzaGlmdCA7OworCS1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKwkJaGVscD10OyBzaGlmdCA7OworCS12fC0tdnwtLXZlfC0tdmVyfC0tdmVyYnwtLXZlcmJvfC0tdmVyYm9zfC0tdmVyYm9zZSkKKwkJdmVyYm9zZT10OyBzaGlmdCA7OworCS1xfC0tcXwtLXF1fC0tcXVpfC0tcXVpZXwtLXF1aWV0KQorCQkjIElnbm9yZSAtLXF1aWV0IHVuZGVyIGEgVEFQOjpIYXJuZXNzLiBTYXlpbmcgaG93IG1hbnkgdGVzdHMKKwkJIyBwYXNzZWQgd2l0aG91dCB0aGUgb2svbm90IG9rIGRldGFpbHMgaXMgYWx3YXlzIGFuIGVycm9yLgorCQl0ZXN0IC16ICIkSEFSTkVTU19BQ1RJVkUiICYmIHF1aWV0PXQ7IHNoaWZ0IDs7CisJLS13aXRoLWRhc2hlcykKKwkJd2l0aF9kYXNoZXM9dDsgc2hpZnQgOzsKKwktLW5vLWNvbG9yKQorCQljb2xvcj07IHNoaWZ0IDs7CisJLS12YXwtLXZhbHwtLXZhbGd8LS12YWxncnwtLXZhbGdyaXwtLXZhbGdyaW58LS12YWxncmluZCkKKwkJdmFsZ3JpbmQ9dDsgdmVyYm9zZT10OyBzaGlmdCA7OworCS0tdGVlKQorCQlzaGlmdCA7OyAjIHdhcyBoYW5kbGVkIGFscmVhZHkKKwktLXJvb3Q9KikKKwkJcm9vdD0kKGV4cHIgInokMSIgOiAneltePV0qPVwoLipcKScpCisJCXNoaWZ0IDs7CisJKikKKwkJZWNobyAiZXJyb3I6IHVua25vd24gdGVzdCBvcHRpb24gJyQxJyIgPiYyOyBleGl0IDEgOzsKKwllc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjb2xvciIKK3RoZW4KKwlzYXlfY29sb3IgKCkgeworCQkoCisJCVRFUk09JE9SSUdJTkFMX1RFUk0KKwkJZXhwb3J0IFRFUk0KKwkJY2FzZSAiJDEiIGluCisJCWVycm9yKQorCQkJdHB1dCBib2xkOyB0cHV0IHNldGFmIDE7OyAjIGJvbGQgcmVkCisJCXNraXApCisJCQl0cHV0IGJvbGQ7IHRwdXQgc2V0YWYgMjs7ICMgYm9sZCBncmVlbgorCQlwYXNzKQorCQkJdHB1dCBzZXRhZiAyOzsgICAgICAgICAgICAjIGdyZWVuCisJCWluZm8pCisJCQl0cHV0IHNldGFmIDM7OyAgICAgICAgICAgICMgYnJvd24KKwkJKikKKwkJCXRlc3QgLW4gIiRxdWlldCIgJiYgcmV0dXJuOzsKKwkJZXNhYworCQlzaGlmdAorCQlwcmludGYgIiVzIiAiJCoiCisJCXRwdXQgc2dyMAorCQllY2hvCisJCSkKKwl9CitlbHNlCisJc2F5X2NvbG9yKCkgeworCQl0ZXN0IC16ICIkMSIgJiYgdGVzdCAtbiAiJHF1aWV0IiAmJiByZXR1cm4KKwkJc2hpZnQKKwkJZWNobyAiJCoiCisJfQorZmkKKworZXJyb3IgKCkgeworCXNheV9jb2xvciBlcnJvciAiZXJyb3I6ICQqIgorCUdJVF9FWElUX09LPXQKKwlleGl0IDEKK30KKworc2F5ICgpIHsKKwlzYXlfY29sb3IgaW5mbyAiJCoiCit9CisKK3Rlc3QgIiR7dGVzdF9kZXNjcmlwdGlvbn0iICE9ICIiIHx8CitlcnJvciAiVGVzdCBzY3JpcHQgZGlkIG5vdCBzZXQgdGVzdF9kZXNjcmlwdGlvbi4iCisKK2lmIHRlc3QgIiRoZWxwIiA9ICJ0IgordGhlbgorCWVjaG8gIiR0ZXN0X2Rlc2NyaXB0aW9uIgorCWV4aXQgMAorZmkKKworZXhlYyA1PiYxCitleGVjIDY8JjAKK2lmIHRlc3QgIiR2ZXJib3NlIiA9ICJ0IgordGhlbgorCWV4ZWMgND4mMiAzPiYxCitlbHNlCisJZXhlYyA0Pi9kZXYvbnVsbCAzPi9kZXYvbnVsbAorZmkKKwordGVzdF9mYWlsdXJlPTAKK3Rlc3RfY291bnQ9MAordGVzdF9maXhlZD0wCit0ZXN0X2Jyb2tlbj0wCit0ZXN0X3N1Y2Nlc3M9MAorCit0ZXN0X2V4dGVybmFsX2hhc190YXA9MAorCitkaWUgKCkgeworCWNvZGU9JD8KKwlpZiB0ZXN0IC1uICIkR0lUX0VYSVRfT0siCisJdGhlbgorCQlleGl0ICRjb2RlCisJZWxzZQorCQllY2hvID4mNSAiRkFUQUw6IFVuZXhwZWN0ZWQgZXhpdCB3aXRoIGNvZGUgJGNvZGUiCisJCWV4aXQgMQorCWZpCit9CisKK0dJVF9FWElUX09LPQordHJhcCAnZGllJyBFWElUCisKKyMgVGhlIHVzZXItZmFjaW5nIGZ1bmN0aW9ucyBhcmUgbG9hZGVkIGZyb20gYSBzZXBhcmF0ZSBmaWxlIHNvIHRoYXQKKyMgdGVzdF9wZXJmIHN1YnNoZWxscyBjYW4gaGF2ZSB0aGVtIHRvbworLiAiJFRFU1RfRElSRUNUT1JZL3Rlc3QtbGliLWZ1bmN0aW9ucy5zaCIKKworIyBZb3UgYXJlIG5vdCBleHBlY3RlZCB0byBjYWxsIHRlc3Rfb2tfIGFuZCB0ZXN0X2ZhaWx1cmVfIGRpcmVjdGx5LCB1c2UKKyMgdGhlIHRleHRfZXhwZWN0XyogZnVuY3Rpb25zIGluc3RlYWQuCisKK3Rlc3Rfb2tfICgpIHsKKwl0ZXN0X3N1Y2Nlc3M9JCgoJHRlc3Rfc3VjY2VzcyArIDEpKQorCXNheV9jb2xvciAiIiAib2sgJHRlc3RfY291bnQgLSAkQCIKK30KKwordGVzdF9mYWlsdXJlXyAoKSB7CisJdGVzdF9mYWlsdXJlPSQoKCR0ZXN0X2ZhaWx1cmUgKyAxKSkKKwlzYXlfY29sb3IgZXJyb3IgIm5vdCBvayAtICR0ZXN0X2NvdW50ICQxIgorCXNoaWZ0CisJZWNobyAiJEAiIHwgc2VkIC1lICdzL14vIwkvJworCXRlc3QgIiRpbW1lZGlhdGUiID0gIiIgfHwgeyBHSVRfRVhJVF9PSz10OyBleGl0IDE7IH0KK30KKwordGVzdF9rbm93bl9icm9rZW5fb2tfICgpIHsKKwl0ZXN0X2ZpeGVkPSQoKCR0ZXN0X2ZpeGVkKzEpKQorCXNheV9jb2xvciAiIiAib2sgJHRlc3RfY291bnQgLSAkQCAjIFRPRE8ga25vd24gYnJlYWthZ2UiCit9CisKK3Rlc3Rfa25vd25fYnJva2VuX2ZhaWx1cmVfICgpIHsKKwl0ZXN0X2Jyb2tlbj0kKCgkdGVzdF9icm9rZW4rMSkpCisJc2F5X2NvbG9yIHNraXAgIm5vdCBvayAkdGVzdF9jb3VudCAtICRAICMgVE9ETyBrbm93biBicmVha2FnZSIKK30KKwordGVzdF9kZWJ1ZyAoKSB7CisJdGVzdCAiJGRlYnVnIiA9ICIiIHx8IGV2YWwgIiQxIgorfQorCit0ZXN0X2V2YWxfICgpIHsKKwkjIFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBiZWNhdXNlIHNvbWUgdGVzdHMgdXNlCisJIyAicmV0dXJuIiB0byBlbmQgYSB0ZXN0X2V4cGVjdF9zdWNjZXNzIGJsb2NrIGVhcmx5LgorCWV2YWwgPC9kZXYvbnVsbCA+JjMgMj4mNCAiJCoiCit9CisKK3Rlc3RfcnVuXyAoKSB7CisJdGVzdF9jbGVhbnVwPToKKwlleHBlY3RpbmdfZmFpbHVyZT0kMgorCXRlc3RfZXZhbF8gIiQxIgorCWV2YWxfcmV0PSQ/CisKKwlpZiB0ZXN0IC16ICIkaW1tZWRpYXRlIiB8fCB0ZXN0ICRldmFsX3JldCA9IDAgfHwgdGVzdCAtbiAiJGV4cGVjdGluZ19mYWlsdXJlIgorCXRoZW4KKwkJc2V0dXBfbWFsbG9jX2NoZWNrCisJCXRlc3RfZXZhbF8gIiR0ZXN0X2NsZWFudXAiCisJCXRlYXJkb3duX21hbGxvY19jaGVjaworCWZpCisJaWYgdGVzdCAiJHZlcmJvc2UiID0gInQiICYmIHRlc3QgLW4gIiRIQVJORVNTX0FDVElWRSIKKwl0aGVuCisJCWVjaG8gIiIKKwlmaQorCXJldHVybiAiJGV2YWxfcmV0IgorfQorCit0ZXN0X3NraXAgKCkgeworCXRlc3RfY291bnQ9JCgoJHRlc3RfY291bnQrMSkpCisJdG9fc2tpcD0KKwlmb3Igc2twIGluICRHSVRfU0tJUF9URVNUUworCWRvCisJCWNhc2UgJHRoaXNfdGVzdC4kdGVzdF9jb3VudCBpbgorCQkkc2twKQorCQkJdG9fc2tpcD10CisJCQlicmVhaworCQllc2FjCisJZG9uZQorCWlmIHRlc3QgLXogIiR0b19za2lwIiAmJiB0ZXN0IC1uICIkdGVzdF9wcmVyZXEiICYmCisJICAgISB0ZXN0X2hhdmVfcHJlcmVxICIkdGVzdF9wcmVyZXEiCisJdGhlbgorCQl0b19za2lwPXQKKwlmaQorCWNhc2UgIiR0b19za2lwIiBpbgorCXQpCisJCW9mX3ByZXJlcT0KKwkJaWYgdGVzdCAiJG1pc3NpbmdfcHJlcmVxIiAhPSAiJHRlc3RfcHJlcmVxIgorCQl0aGVuCisJCQlvZl9wcmVyZXE9IiBvZiAkdGVzdF9wcmVyZXEiCisJCWZpCisKKwkJc2F5X2NvbG9yIHNraXAgPiYzICJza2lwcGluZyB0ZXN0OiAkQCIKKwkJc2F5X2NvbG9yIHNraXAgIm9rICR0ZXN0X2NvdW50ICMgc2tpcCAkMSAobWlzc2luZyAkbWlzc2luZ19wcmVyZXEke29mX3ByZXJlcX0pIgorCQk6IHRydWUKKwkJOzsKKwkqKQorCQlmYWxzZQorCQk7OworCWVzYWMKK30KKworIyBzdHViOyBwZXJmLWxpYiBvdmVycmlkZXMgaXQKK3Rlc3RfYXRfZW5kX2hvb2tfICgpIHsKKwk6Cit9CisKK3Rlc3RfZG9uZSAoKSB7CisJR0lUX0VYSVRfT0s9dAorCisJaWYgdGVzdCAteiAiJEhBUk5FU1NfQUNUSVZFIgorCXRoZW4KKwkJdGVzdF9yZXN1bHRzX2Rpcj0iJFRFU1RfT1VUUFVUX0RJUkVDVE9SWS90ZXN0LXJlc3VsdHMiCisJCW1rZGlyIC1wICIkdGVzdF9yZXN1bHRzX2RpciIKKwkJdGVzdF9yZXN1bHRzX3BhdGg9IiR0ZXN0X3Jlc3VsdHNfZGlyLyR7MCUuc2h9LSQkLmNvdW50cyIKKworCQljYXQgPj4iJHRlc3RfcmVzdWx0c19wYXRoIiA8PC1FT0YKKwkJdG90YWwgJHRlc3RfY291bnQKKwkJc3VjY2VzcyAkdGVzdF9zdWNjZXNzCisJCWZpeGVkICR0ZXN0X2ZpeGVkCisJCWJyb2tlbiAkdGVzdF9icm9rZW4KKwkJZmFpbGVkICR0ZXN0X2ZhaWx1cmUKKworCQlFT0YKKwlmaQorCisJaWYgdGVzdCAiJHRlc3RfZml4ZWQiICE9IDAKKwl0aGVuCisJCXNheV9jb2xvciBwYXNzICIjIGZpeGVkICR0ZXN0X2ZpeGVkIGtub3duIGJyZWFrYWdlKHMpIgorCWZpCisJaWYgdGVzdCAiJHRlc3RfYnJva2VuIiAhPSAwCisJdGhlbgorCQlzYXlfY29sb3IgZXJyb3IgIiMgc3RpbGwgaGF2ZSAkdGVzdF9icm9rZW4ga25vd24gYnJlYWthZ2UocykiCisJCW1zZz0icmVtYWluaW5nICQoKCR0ZXN0X2NvdW50LSR0ZXN0X2Jyb2tlbikpIHRlc3QocykiCisJZWxzZQorCQltc2c9IiR0ZXN0X2NvdW50IHRlc3QocykiCisJZmkKKwljYXNlICIkdGVzdF9mYWlsdXJlIiBpbgorCTApCisJCSMgTWF5YmUgcHJpbnQgU0tJUCBtZXNzYWdlCisJCWlmIHRlc3QgLW4gIiRza2lwX2FsbCIgJiYgdGVzdCAkdGVzdF9jb3VudCAtZ3QgMAorCQl0aGVuCisJCQllcnJvciAiQ2FuJ3QgdXNlIHNraXBfYWxsIGFmdGVyIHJ1bm5pbmcgc29tZSB0ZXN0cyIKKwkJZmkKKwkJWyAteiAiJHNraXBfYWxsIiBdIHx8IHNraXBfYWxsPSIgIyBTS0lQICRza2lwX2FsbCIKKworCQlpZiB0ZXN0ICR0ZXN0X2V4dGVybmFsX2hhc190YXAgLWVxIDAKKwkJdGhlbgorCQkJaWYgdGVzdCAkdGVzdF9jb3VudCAtZ3QgMAorCQkJdGhlbgorCQkJCXNheV9jb2xvciBwYXNzICIjIHBhc3NlZCBhbGwgJG1zZyIKKwkJCWZpCisJCQlzYXkgIjEuLiR0ZXN0X2NvdW50JHNraXBfYWxsIgorCQlmaQorCisJCXRlc3QgLWQgIiRyZW1vdmVfdHJhc2giICYmCisJCWNkICIkKGRpcm5hbWUgIiRyZW1vdmVfdHJhc2giKSIgJiYKKwkJcm0gLXJmICIkKGJhc2VuYW1lICIkcmVtb3ZlX3RyYXNoIikiCisKKwkJdGVzdF9hdF9lbmRfaG9va18KKworCQlleGl0IDAgOzsKKworCSopCisJCWlmIHRlc3QgJHRlc3RfZXh0ZXJuYWxfaGFzX3RhcCAtZXEgMAorCQl0aGVuCisJCQlzYXlfY29sb3IgZXJyb3IgIiMgZmFpbGVkICR0ZXN0X2ZhaWx1cmUgYW1vbmcgJG1zZyIKKwkJCXNheSAiMS4uJHRlc3RfY291bnQiCisJCWZpCisKKwkJZXhpdCAxIDs7CisKKwllc2FjCit9CisKK2lmIHRlc3QgLW4gIiR2YWxncmluZCIKK3RoZW4KKwltYWtlX3N5bWxpbmsgKCkgeworCQl0ZXN0IC1oICIkMiIgJiYKKwkJdGVzdCAiJDEiID0gIiQocmVhZGxpbmsgIiQyIikiIHx8IHsKKwkJCSMgYmUgc3VwZXIgcGFyYW5vaWQKKwkJCWlmIG1rZGlyICIkMiIubG9jaworCQkJdGhlbgorCQkJCXJtIC1mICIkMiIgJiYKKwkJCQlsbiAtcyAiJDEiICIkMiIgJiYKKwkJCQlybSAtciAiJDIiLmxvY2sKKwkJCWVsc2UKKwkJCQl3aGlsZSB0ZXN0IC1kICIkMiIubG9jaworCQkJCWRvCisJCQkJCXNheSAiV2FpdGluZyBmb3IgbG9jayBvbiAkMi4iCisJCQkJCXNsZWVwIDEKKwkJCQlkb25lCisJCQlmaQorCQl9CisJfQorCisJbWFrZV92YWxncmluZF9zeW1saW5rICgpIHsKKwkJIyBoYW5kbGUgb25seSBleGVjdXRhYmxlcywgdW5sZXNzIHRoZXkgYXJlIHNoZWxsIGxpYnJhcmllcyB0aGF0CisJCSMgbmVlZCB0byBiZSBpbiB0aGUgZXhlYy1wYXRoLiAgV2Ugd2lsbCBqdXN0IHVzZSAiIyEiIGFzIGEKKwkJIyBndWVzcyBmb3IgYSBzaGVsbC1zY3JpcHQsIHNpbmNlIHdlIGhhdmUgbm8gaWRlYSB3aGF0IHRoZSB1c2VyCisJCSMgbWF5IGhhdmUgY29uZmlndXJlZCBhcyB0aGUgc2hlbGwgcGF0aC4KKwkJdGVzdCAteCAiJDEiIHx8CisJCXRlc3QgIiMhIiA9ICIkKGhlYWQgLWMgMiA8IiQxIikiIHx8CisJCXJldHVybjsKKworCQliYXNlPSQoYmFzZW5hbWUgIiQxIikKKwkJc3ltbGlua190YXJnZXQ9JEdJVF9CVUlMRF9ESVIvJGJhc2UKKwkJIyBkbyBub3Qgb3ZlcnJpZGUgc2NyaXB0cworCQlpZiB0ZXN0IC14ICIkc3ltbGlua190YXJnZXQiICYmCisJCSAgICB0ZXN0ICEgLWQgIiRzeW1saW5rX3RhcmdldCIgJiYKKwkJICAgIHRlc3QgIiMhIiAhPSAiJChoZWFkIC1jIDIgPCAiJHN5bWxpbmtfdGFyZ2V0IikiCisJCXRoZW4KKwkJCXN5bWxpbmtfdGFyZ2V0PS4uL3ZhbGdyaW5kLnNoCisJCWZpCisJCWNhc2UgIiRiYXNlIiBpbgorCQkqLnNofCoucGVybCkKKwkJCXN5bWxpbmtfdGFyZ2V0PS4uL3VucHJvY2Vzc2VkLXNjcmlwdAorCQllc2FjCisJCSMgY3JlYXRlIHRoZSBsaW5rLCBvciByZXBsYWNlIGl0IGlmIGl0IGlzIG91dCBvZiBkYXRlCisJCW1ha2Vfc3ltbGluayAiJHN5bWxpbmtfdGFyZ2V0IiAiJEdJVF9WQUxHUklORC9iaW4vJGJhc2UiIHx8IGV4aXQKKwl9CisKKwkjIG92ZXJyaWRlIGFsbCBnaXQgZXhlY3V0YWJsZXMgaW4gVEVTVF9ESVJFQ1RPUlkvLi4KKwlHSVRfVkFMR1JJTkQ9JFRFU1RfRElSRUNUT1JZL3ZhbGdyaW5kCisJbWtkaXIgLXAgIiRHSVRfVkFMR1JJTkQiL2JpbgorCWZvciBmaWxlIGluICRHSVRfQlVJTERfRElSL2dpdCogJEdJVF9CVUlMRF9ESVIvdGVzdC0qCisJZG8KKwkJbWFrZV92YWxncmluZF9zeW1saW5rICRmaWxlCisJZG9uZQorCSMgc3BlY2lhbC1jYXNlIHRoZSBtZXJnZXRvb2xzIGxvYWRhYmxlcworCW1ha2Vfc3ltbGluayAiJEdJVF9CVUlMRF9ESVIiL21lcmdldG9vbHMgIiRHSVRfVkFMR1JJTkQvYmluL21lcmdldG9vbHMiCisJT0xESUZTPSRJRlMKKwlJRlM9OgorCWZvciBwYXRoIGluICRQQVRICisJZG8KKwkJbHMgIiRwYXRoIi9naXQtKiAyPiAvZGV2L251bGwgfAorCQl3aGlsZSByZWFkIGZpbGUKKwkJZG8KKwkJCW1ha2VfdmFsZ3JpbmRfc3ltbGluayAiJGZpbGUiCisJCWRvbmUKKwlkb25lCisJSUZTPSRPTERJRlMKKwlQQVRIPSRHSVRfVkFMR1JJTkQvYmluOiRQQVRICisJR0lUX0VYRUNfUEFUSD0kR0lUX1ZBTEdSSU5EL2JpbgorCWV4cG9ydCBHSVRfVkFMR1JJTkQKK2VsaWYgdGVzdCAtbiAiJEdJVF9URVNUX0lOU1RBTExFRCIKK3RoZW4KKwlHSVRfRVhFQ19QQVRIPSQoJEdJVF9URVNUX0lOU1RBTExFRC9naXQgLS1leGVjLXBhdGgpICB8fAorCWVycm9yICJDYW5ub3QgcnVuIGdpdCBmcm9tICRHSVRfVEVTVF9JTlNUQUxMRUQuIgorCVBBVEg9JEdJVF9URVNUX0lOU1RBTExFRDokR0lUX0JVSUxEX0RJUjokUEFUSAorCUdJVF9FWEVDX1BBVEg9JHtHSVRfVEVTVF9FWEVDX1BBVEg6LSRHSVRfRVhFQ19QQVRIfQorZWxzZSAjIG5vcm1hbCBjYXNlLCB1c2UgLi4vYmluLXdyYXBwZXJzIG9ubHkgdW5sZXNzICR3aXRoX2Rhc2hlczoKKwlnaXRfYmluX2Rpcj0iJEdJVF9CVUlMRF9ESVIvYmluLXdyYXBwZXJzIgorCWlmICEgdGVzdCAteCAiJGdpdF9iaW5fZGlyL2dpdCIKKwl0aGVuCisJCWlmIHRlc3QgLXogIiR3aXRoX2Rhc2hlcyIKKwkJdGhlbgorCQkJc2F5ICIkZ2l0X2Jpbl9kaXIvZ2l0IGlzIG5vdCBleGVjdXRhYmxlOyB1c2luZyBHSVRfRVhFQ19QQVRIIgorCQlmaQorCQl3aXRoX2Rhc2hlcz10CisJZmkKKwlQQVRIPSIkZ2l0X2Jpbl9kaXI6JFBBVEgiCisJR0lUX0VYRUNfUEFUSD0kR0lUX0JVSUxEX0RJUgorCWlmIHRlc3QgLW4gIiR3aXRoX2Rhc2hlcyIKKwl0aGVuCisJCVBBVEg9IiRHSVRfQlVJTERfRElSOiRQQVRIIgorCWZpCitmaQorR0lUX1RFTVBMQVRFX0RJUj0iJEdJVF9CVUlMRF9ESVIiL3RlbXBsYXRlcy9ibHQKK3Vuc2V0IEdJVF9DT05GSUcKK0dJVF9DT05GSUdfTk9TWVNURU09MQorR0lUX0FUVFJfTk9TWVNURU09MQorZXhwb3J0IFBBVEggR0lUX0VYRUNfUEFUSCBHSVRfVEVNUExBVEVfRElSIEdJVF9DT05GSUdfTk9TWVNURU0gR0lUX0FUVFJfTk9TWVNURU0KKworaWYgdGVzdCAteiAiJEdJVF9URVNUX0NNUCIKK3RoZW4KKwlpZiB0ZXN0IC1uICIkR0lUX1RFU1RfQ01QX1VTRV9DT1BJRURfQ09OVEVYVCIKKwl0aGVuCisJCUdJVF9URVNUX0NNUD0iJERJRkYgLWMiCisJZWxzZQorCQlHSVRfVEVTVF9DTVA9IiRESUZGIC11IgorCWZpCitmaQorCitHSVRQRVJMTElCPSIkR0lUX0JVSUxEX0RJUiIvcGVybC9ibGliL2xpYjoiJEdJVF9CVUlMRF9ESVIiL3BlcmwvYmxpYi9hcmNoL2F1dG8vR2l0CitleHBvcnQgR0lUUEVSTExJQgordGVzdCAtZCAiJEdJVF9CVUlMRF9ESVIiL3RlbXBsYXRlcy9ibHQgfHwgeworCWVycm9yICJZb3UgaGF2ZW4ndCBidWlsdCB0aGluZ3MgeWV0LCBoYXZlIHlvdT8iCit9CisKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9JTlNUQUxMRUQiICYmIHRlc3QgLXogIiROT19QWVRIT04iCit0aGVuCisJR0lUUFlUSE9OTElCPSIkR0lUX0JVSUxEX0RJUi9naXRfcmVtb3RlX2hlbHBlcnMvYnVpbGQvbGliIgorCWV4cG9ydCBHSVRQWVRIT05MSUIKKwl0ZXN0IC1kICIkR0lUX0JVSUxEX0RJUiIvZ2l0X3JlbW90ZV9oZWxwZXJzL2J1aWxkIHx8IHsKKwkJZXJyb3IgIllvdSBoYXZlbid0IGJ1aWx0IGdpdF9yZW1vdGVfaGVscGVycyB5ZXQsIGhhdmUgeW91PyIKKwl9CitmaQorCitpZiAhIHRlc3QgLXggIiRHSVRfQlVJTERfRElSIi90ZXN0LWNobXRpbWUKK3RoZW4KKwllY2hvID4mMiAnWW91IG5lZWQgdG8gYnVpbGQgdGVzdC1jaG10aW1lOicKKwllY2hvID4mMiAnUnVuICJtYWtlIHRlc3QtY2htdGltZSIgaW4gdGhlIHNvdXJjZSAodG9wbGV2ZWwpIGRpcmVjdG9yeScKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCByZXBvc2l0b3J5Cit0ZXN0PSJ0cmFzaCBkaXJlY3RvcnkuJChiYXNlbmFtZSAiJDAiIC5zaCkiCit0ZXN0IC1uICIkcm9vdCIgJiYgdGVzdD0iJHJvb3QvJHRlc3QiCitjYXNlICIkdGVzdCIgaW4KKy8qKSBUUkFTSF9ESVJFQ1RPUlk9IiR0ZXN0IiA7OworICopIFRSQVNIX0RJUkVDVE9SWT0iJFRFU1RfT1VUUFVUX0RJUkVDVE9SWS8kdGVzdCIgOzsKK2VzYWMKK3Rlc3QgISAteiAiJGRlYnVnIiB8fCByZW1vdmVfdHJhc2g9JFRSQVNIX0RJUkVDVE9SWQorcm0gLWZyICIkdGVzdCIgfHwgeworCUdJVF9FWElUX09LPXQKKwllY2hvID4mNSAiRkFUQUw6IENhbm5vdCBwcmVwYXJlIHRlc3QgYXJlYSIKKwlleGl0IDEKK30KKworSE9NRT0iJFRSQVNIX0RJUkVDVE9SWSIKK2V4cG9ydCBIT01FCisKK2lmIHRlc3QgLXogIiRURVNUX05PX0NSRUFURV9SRVBPIgordGhlbgorCXRlc3RfY3JlYXRlX3JlcG8gIiR0ZXN0IgorZWxzZQorCW1rZGlyIC1wICIkdGVzdCIKK2ZpCisjIFVzZSAtUCB0byByZXNvbHZlIHN5bWxpbmtzIGluIG91ciB3b3JraW5nIGRpcmVjdG9yeSBzbyB0aGF0IHRoZSBjd2QKKyMgaW4gc3VicHJvY2Vzc2VzIGxpa2UgZ2l0IGVxdWFscyBvdXIgJFBXRCAoZm9yIHBhdGhuYW1lIGNvbXBhcmlzb25zKS4KK2NkIC1QICIkdGVzdCIgfHwgZXhpdCAxCisKK3RoaXNfdGVzdD0kezAjIyovfQordGhpc190ZXN0PSR7dGhpc190ZXN0JSUtKn0KK2ZvciBza3AgaW4gJEdJVF9TS0lQX1RFU1RTCitkbworCWNhc2UgIiR0aGlzX3Rlc3QiIGluCisJJHNrcCkKKwkJc2F5X2NvbG9yIHNraXAgPiYzICJza2lwcGluZyB0ZXN0ICR0aGlzX3Rlc3QgYWx0b2dldGhlciIKKwkJc2tpcF9hbGw9InNraXAgYWxsIHRlc3RzIGluICR0aGlzX3Rlc3QiCisJCXRlc3RfZG9uZQorCWVzYWMKK2RvbmUKKworIyBQcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSAneWVzJyB1dGlsaXR5Cit5ZXMgKCkgeworCWlmIHRlc3QgJCMgPSAwCisJdGhlbgorCQl5PXkKKwllbHNlCisJCXk9IiQqIgorCWZpCisKKwl3aGlsZSBlY2hvICIkeSIKKwlkbworCQk6CisJZG9uZQorfQorCisjIEZpeCBzb21lIGNvbW1hbmRzIG9uIFdpbmRvd3MKK2Nhc2UgJCh1bmFtZSAtcykgaW4KKypNSU5HVyopCisJIyBXaW5kb3dzIGhhcyBpdHMgb3duIChpbmNvbXBhdGlibGUpIHNvcnQgYW5kIGZpbmQKKwlzb3J0ICgpIHsKKwkJL3Vzci9iaW4vc29ydCAiJEAiCisJfQorCWZpbmQgKCkgeworCQkvdXNyL2Jpbi9maW5kICIkQCIKKwl9CisJc3VtICgpIHsKKwkJbWQ1c3VtICIkQCIKKwl9CisJIyBnaXQgc2VlcyBXaW5kb3dzLXN0eWxlIHB3ZAorCXB3ZCAoKSB7CisJCWJ1aWx0aW4gcHdkIC1XCisJfQorCSMgbm8gUE9TSVggcGVybWlzc2lvbnMKKwkjIGJhY2tzbGFzaGVzIGluIHBhdGhzcGVjIGFyZSBjb252ZXJ0ZWQgdG8gJy8nCisJIyBleGVjIGRvZXMgbm90IGluaGVyaXQgdGhlIFBJRAorCXRlc3Rfc2V0X3ByZXJlcSBNSU5HVworCXRlc3Rfc2V0X3ByZXJlcSBTRURfU1RSSVBTX0NSCisJOzsKKypDWUdXSU4qKQorCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWFBFUk0KKwl0ZXN0X3NldF9wcmVyZXEgRVhFQ0tFRVBTUElECisJdGVzdF9zZXRfcHJlcmVxIE5PVF9NSU5HVworCXRlc3Rfc2V0X3ByZXJlcSBTRURfU1RSSVBTX0NSCisJOzsKKyopCisJdGVzdF9zZXRfcHJlcmVxIFBPU0lYUEVSTQorCXRlc3Rfc2V0X3ByZXJlcSBCU0xBU0hQU1BFQworCXRlc3Rfc2V0X3ByZXJlcSBFWEVDS0VFUFNQSUQKKwl0ZXN0X3NldF9wcmVyZXEgTk9UX01JTkdXCisJOzsKK2VzYWMKKworKCBDT0xVTU5TPTEgJiYgdGVzdCAkQ09MVU1OUyA9IDEgKSAmJiB0ZXN0X3NldF9wcmVyZXEgQ09MVU1OU19DQU5fQkVfMQordGVzdCAteiAiJE5PX1BFUkwiICYmIHRlc3Rfc2V0X3ByZXJlcSBQRVJMCit0ZXN0IC16ICIkTk9fUFlUSE9OIiAmJiB0ZXN0X3NldF9wcmVyZXEgUFlUSE9OCit0ZXN0IC1uICIkVVNFX0xJQlBDUkUiICYmIHRlc3Rfc2V0X3ByZXJlcSBMSUJQQ1JFCit0ZXN0IC16ICIkTk9fR0VUVEVYVCIgJiYgdGVzdF9zZXRfcHJlcmVxIEdFVFRFWFQKKworIyBDYW4gd2UgcmVseSBvbiBnaXQncyBvdXRwdXQgaW4gdGhlIEMgbG9jYWxlPworaWYgdGVzdCAtbiAiJEdFVFRFWFRfUE9JU09OIgordGhlbgorCUdJVF9HRVRURVhUX1BPSVNPTj1ZZXNQbGVhc2UKKwlleHBvcnQgR0lUX0dFVFRFWFRfUE9JU09OCisJdGVzdF9zZXRfcHJlcmVxIEdFVFRFWFRfUE9JU09OCitlbHNlCisJdGVzdF9zZXRfcHJlcmVxIENfTE9DQUxFX09VVFBVVAorZmkKKworIyBVc2UgdGhpcyBpbnN0ZWFkIG9mIHRlc3RfY21wIHRvIGNvbXBhcmUgZmlsZXMgdGhhdCBjb250YWluIGV4cGVjdGVkIGFuZAorIyBhY3R1YWwgb3V0cHV0IGZyb20gZ2l0IGNvbW1hbmRzIHRoYXQgY2FuIGJlIHRyYW5zbGF0ZWQuICBXaGVuIHJ1bm5pbmcKKyMgdW5kZXIgR0VUVEVYVF9QT0lTT04gdGhpcyBwcmV0ZW5kcyB0aGF0IHRoZSBjb21tYW5kIHByb2R1Y2VkIGV4cGVjdGVkCisjIHJlc3VsdHMuCit0ZXN0X2kxOG5jbXAgKCkgeworCXRlc3QgLW4gIiRHRVRURVhUX1BPSVNPTiIgfHwgdGVzdF9jbXAgIiRAIgorfQorCisjIFVzZSB0aGlzIGluc3RlYWQgb2YgImdyZXAgZXhwZWN0ZWQtc3RyaW5nIGFjdHVhbCIgdG8gc2VlIGlmIHRoZQorIyBvdXRwdXQgZnJvbSBhIGdpdCBjb21tYW5kIHRoYXQgY2FuIGJlIHRyYW5zbGF0ZWQgZWl0aGVyIGNvbnRhaW5zIGFuCisjIGV4cGVjdGVkIHN0cmluZywgb3IgZG9lcyBub3QgY29udGFpbiBhbiB1bndhbnRlZCBvbmUuICBXaGVuIHJ1bm5pbmcKKyMgdW5kZXIgR0VUVEVYVF9QT0lTT04gdGhpcyBwcmV0ZW5kcyB0aGF0IHRoZSBjb21tYW5kIHByb2R1Y2VkIGV4cGVjdGVkCisjIHJlc3VsdHMuCit0ZXN0X2kxOG5ncmVwICgpIHsKKwlpZiB0ZXN0IC1uICIkR0VUVEVYVF9QT0lTT04iCisJdGhlbgorCSAgICA6ICMgcHJldGVuZCBzdWNjZXNzCisJZWxpZiB0ZXN0ICJ4ISIgPSAieCQxIgorCXRoZW4KKwkJc2hpZnQKKwkJISBncmVwICIkQCIKKwllbHNlCisJCWdyZXAgIiRAIgorCWZpCit9CisKK3Rlc3RfbGF6eV9wcmVyZXEgU1lNTElOS1MgJworCSMgdGVzdCB3aGV0aGVyIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHN5bWJvbGljIGxpbmtzCisJbG4gLXMgeCB5ICYmIHRlc3QgLWggeQorJworCit0ZXN0X2xhenlfcHJlcmVxIENBU0VfSU5TRU5TSVRJVkVfRlMgJworCWVjaG8gZ29vZCA+Q2FtZWxDYXNlICYmCisJZWNobyBiYWQgPmNhbWVsY2FzZSAmJgorCXRlc3QgIiQoY2F0IENhbWVsQ2FzZSkiICE9IGdvb2QKKycKKwordGVzdF9sYXp5X3ByZXJlcSBVVEY4X05GRF9UT19ORkMgJworCSMgY2hlY2sgd2hldGhlciBGUyBjb252ZXJ0cyBuZmQgdW5pY29kZSB0byBuZmMKKwlhdW1sPSQocHJpbnRmICJcMzAzXDI0NCIpCisJYXVtbGNkaWFyPSQocHJpbnRmICJcMTQxXDMxNFwyMTAiKQorCT4iJGF1bWwiICYmCisJY2FzZSAiJChlY2hvICopIiBpbgorCSIkYXVtbGNkaWFyIikKKwkJdHJ1ZSA7OworCSopCisJCWZhbHNlIDs7CisJZXNhYworJworCisjIFdoZW4gdGhlIHRlc3RzIGFyZSBydW4gYXMgcm9vdCwgcGVybWlzc2lvbiB0ZXN0cyB3aWxsIHJlcG9ydCB0aGF0CisjIHRoaW5ncyBhcmUgd3JpdGFibGUgd2hlbiB0aGV5IHNob3VsZG4ndCBiZS4KK3Rlc3QgLXcgLyB8fCB0ZXN0X3NldF9wcmVyZXEgU0FOSVRZCmRpZmYgLS1naXQgYS90L3Rlc3QtdGVybWluYWwucGVybCBiL3QvdGVzdC10ZXJtaW5hbC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwMTcyYWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Rlc3QtdGVybWluYWwucGVybApAQCAtMCwwICsxLDgwIEBACisjIS91c3IvYmluL3BlcmwKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSU86OlB0eTsKK3VzZSBGaWxlOjpDb3B5OworCisjIFJ1biBAJGFyZ3YgaW4gdGhlIGJhY2tncm91bmQgd2l0aCBzdGRpbyByZWRpcmVjdGVkIHRvICRvdXQgYW5kICRlcnIuCitzdWIgc3RhcnRfY2hpbGQgeworCW15ICgkYXJndiwgJG91dCwgJGVycikgPSBAXzsKKwlteSAkcGlkID0gZm9yazsKKwlpZiAobm90IGRlZmluZWQgJHBpZCkgeworCQlkaWUgImZvcmsgZmFpbGVkOiAkISIKKwl9IGVsc2lmICgkcGlkID09IDApIHsKKwkJb3BlbiBTVERPVVQsICI+JiIsICRvdXQ7CisJCW9wZW4gU1RERVJSLCAiPiYiLCAkZXJyOworCQljbG9zZSAkb3V0OworCQlleGVjKEAkYXJndikgb3IgZGllICJjYW5ub3QgZXhlYyAnJGFyZ3YtPlswXSc6ICQhIgorCX0KKwlyZXR1cm4gJHBpZDsKK30KKworIyBXYWl0IGZvciAkcGlkIHRvIGZpbmlzaC4KK3N1YiBmaW5pc2hfY2hpbGQgeworCSMgU2ltcGxpZmllZCBmcm9tIHdhaXRfb3Jfd2hpbmUoKSBpbiBydW4tY29tbWFuZC5jLgorCW15ICgkcGlkKSA9IEBfOworCisJbXkgJHdhaXRpbmcgPSB3YWl0cGlkKCRwaWQsIDApOworCWlmICgkd2FpdGluZyA8IDApIHsKKwkJZGllICJ3YWl0cGlkIGZhaWxlZDogJCEiOworCX0gZWxzaWYgKCQ/ICYgMTI3KSB7CisJCW15ICRjb2RlID0gJD8gJiAxMjc7CisJCXdhcm4gImRpZWQgb2Ygc2lnbmFsICRjb2RlIjsKKwkJcmV0dXJuICRjb2RlIC0gMTI4OworCX0gZWxzZSB7CisJCXJldHVybiAkPyA+PiA4OworCX0KK30KKworc3ViIHhzZW5kZmlsZSB7CisJbXkgKCRvdXQsICRpbikgPSBAXzsKKworCSMgTm90ZTogdGhlIHJlYWwgc2VuZGZpbGUoKSBjYW5ub3QgcmVhZCBmcm9tIGEgdGVybWluYWwuCisKKwkjIEl0IGlzIHVuc3BlY2lmaWVkIGJ5IFBPU0lYIHdoZXRoZXIgcmVhZHMKKwkjIGZyb20gYSBkaXNjb25uZWN0ZWQgdGVybWluYWwgd2lsbCByZXR1cm4KKwkjIEVJTyAoYXMgaW4gQUlYIDQueCwgSVJJWCwgYW5kIExpbnV4KSBvcgorCSMgZW5kLW9mLWZpbGUuICBFaXRoZXIgaXMgZmluZS4KKwljb3B5KCRpbiwgJG91dCwgNDA5Nikgb3IgJCF7RUlPfSBvciBkaWUgImNhbm5vdCBjb3B5IGZyb20gY2hpbGQ6ICQhIjsKK30KKworc3ViIGNvcHlfc3RkaW8geworCW15ICgkb3V0LCAkZXJyKSA9IEBfOworCW15ICRwaWQgPSBmb3JrOworCWRlZmluZWQgJHBpZCBvciBkaWUgImZvcmsgZmFpbGVkOiAkISI7CisJaWYgKCEkcGlkKSB7CisJCWNsb3NlKCRvdXQpOworCQl4c2VuZGZpbGUoXCpTVERFUlIsICRlcnIpOworCQlleGl0IDA7CisJfQorCWNsb3NlKCRlcnIpOworCXhzZW5kZmlsZShcKlNURE9VVCwgJG91dCk7CisJZmluaXNoX2NoaWxkKCRwaWQpID09IDAKKwkJb3IgZXhpdCAxOworfQorCitpZiAoJCNBUkdWIDwgMSkgeworCWRpZSAidXNhZ2U6IHRlc3QtdGVybWluYWwgcHJvZ3JhbSBhcmdzIjsKK30KK215ICRtYXN0ZXJfb3V0ID0gbmV3IElPOjpQdHk7CitteSAkbWFzdGVyX2VyciA9IG5ldyBJTzo6UHR5OworJG1hc3Rlcl9vdXQtPnNldF9yYXcoKTsKKyRtYXN0ZXJfZXJyLT5zZXRfcmF3KCk7CiskbWFzdGVyX291dC0+c2xhdmUtPnNldF9yYXcoKTsKKyRtYXN0ZXJfZXJyLT5zbGF2ZS0+c2V0X3JhdygpOworbXkgJHBpZCA9IHN0YXJ0X2NoaWxkKFxAQVJHViwgJG1hc3Rlcl9vdXQtPnNsYXZlLCAkbWFzdGVyX2Vyci0+c2xhdmUpOworY2xvc2UgJG1hc3Rlcl9vdXQtPnNsYXZlOworY2xvc2UgJG1hc3Rlcl9lcnItPnNsYXZlOworY29weV9zdGRpbygkbWFzdGVyX291dCwgJG1hc3Rlcl9lcnIpOworZXhpdChmaW5pc2hfY2hpbGQoJHBpZCkpOwpkaWZmIC0tZ2l0IGEvdC92YWxncmluZC8uZ2l0aWdub3JlIGIvdC92YWxncmluZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YWU2NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisvYmluLworL3RlbXBsYXRlcwpkaWZmIC0tZ2l0IGEvdC92YWxncmluZC9hbmFseXplLnNoIGIvdC92YWxncmluZC9hbmFseXplLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ4MTA1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kL2FuYWx5emUuc2gKQEAgLTAsMCArMSwxMjMgQEAKKyMhL2Jpbi9zaAorCitvdXRfcHJlZml4PSQoZGlybmFtZSAiJDAiKS8uLi90ZXN0LXJlc3VsdHMvdmFsZ3JpbmQub3V0CitvdXRwdXQ9Citjb3VudD0wCit0b3RhbF9jb3VudD0wCittaXNzaW5nX21lc3NhZ2U9CituZXdfbGluZT0nCisnCisKKyMgc3RhcnQgb3V0cHV0dGluZyB0aGUgY3VycmVudCB2YWxncmluZCBlcnJvciBpbiAkb3V0X3ByZWZpeC4rKyRjb3VudCwKKyMgYW5kIHRoZSB0ZXN0IGNhc2Ugd2hpY2ggZmFpbGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIC5tZXNzYWdlIGZpbGUKK3N0YXJ0X291dHB1dCAoKSB7CisJdGVzdCAteiAiJG91dHB1dCIgfHwgcmV0dXJuCisKKwkjIHByb2dyZXNzCisJdG90YWxfY291bnQ9JCgoJHRvdGFsX2NvdW50KzEpKQorCXRlc3QgLXQgMiAmJiBwcmludGYgIlxyRm91bmQgJWQgZXJyb3JzIiAkdG90YWxfY291bnQgPiYyCisKKwljb3VudD0kKCgkY291bnQrMSkpCisJb3V0cHV0PSRvdXRfcHJlZml4LiRjb3VudAorCTogPiAkb3V0cHV0CisKKwllY2hvICIqKiogJDEgKioqIiA+ICRvdXRwdXQubWVzc2FnZQorfQorCitmaW5pc2hfb3V0cHV0ICgpIHsKKwl0ZXN0ICEgLXogIiRvdXRwdXQiIHx8IHJldHVybgorCW91dHB1dD0KKworCSMgaWYgYSB0ZXN0IGNhc2UgaGFzIG1vcmUgdGhhbiBvbmUgdmFsZ3JpbmQgZXJyb3IsIHdlIG5lZWQgdG8KKwkjIGNvcHkgdGhlIGxhc3QgLm1lc3NhZ2UgZmlsZSB0byB0aGUgcHJldmlvdXMgZXJyb3JzCisJdGVzdCAteiAiJG1pc3NpbmdfbWVzc2FnZSIgfHwgeworCQl3aGlsZSB0ZXN0ICRtaXNzaW5nX21lc3NhZ2UgLWx0ICRjb3VudAorCQlkbworCQkJY3AgJG91dF9wcmVmaXguJGNvdW50Lm1lc3NhZ2UgXAorCQkJCSRvdXRfcHJlZml4LiRtaXNzaW5nX21lc3NhZ2UubWVzc2FnZQorCQkJbWlzc2luZ19tZXNzYWdlPSQoKCRtaXNzaW5nX21lc3NhZ2UrMSkpCisJCWRvbmUKKwkJbWlzc2luZ19tZXNzYWdlPQorCX0KK30KKworIyBncm91cCB0aGUgdmFsZ3JpbmQgZXJyb3JzIGJ5IGJhY2t0cmFjZQorb3V0cHV0X2FsbCAoKSB7CisJbGFzdF9saW5lPQorCWo9MAorCWk9MQorCXdoaWxlIHRlc3QgJGkgLWxlICRjb3VudAorCWRvCisJCSMgb3V0cHV0IDxudW1iZXI+IDxiYWNrdHJhY2UtaW4tb25lLWxpbmU+CisJCWVjaG8gIiRpICQodHIgJ1xuJyAnICcgPCAkb3V0X3ByZWZpeC4kaSkiCisJCWk9JCgoJGkrMSkpCisJZG9uZSB8CisJc29ydCAtdCAnICcgLWsgMiB8ICMgb3JkZXIgYnkgPGJhY2t0cmFjZS1pbi1vbmUtbGluZT4KKwl3aGlsZSByZWFkIG51bWJlciBsaW5lCisJZG8KKwkJIyBmaW5kIGR1cGxpY2F0ZXMsIGRvIG5vdCBvdXRwdXQgYmFja3RyYWNlIHR3aWNlCisJCWlmIHRlc3QgIiRsaW5lIiAhPSAiJGxhc3RfbGluZSIKKwkJdGhlbgorCQkJbGFzdF9saW5lPSRsaW5lCisJCQlqPSQoKCRqKzEpKQorCQkJcHJpbnRmICJcblZhbGdyaW5kIGVycm9yICRqOlxuXG4iCisJCQljYXQgJG91dF9wcmVmaXguJG51bWJlcgorCQkJcHJpbnRmICJcbmZvdW5kIGluOlxuIgorCQlmaQorCQkjIHByaW50IHRoZSB0ZXN0IGNhc2Ugd2hlcmUgdGhpcyBjYW1lIGZyb20KKwkJcHJpbnRmICJcbiIKKwkJY2F0ICRvdXRfcHJlZml4LiRudW1iZXIubWVzc2FnZQorCWRvbmUKK30KKworaGFuZGxlX29uZSAoKSB7CisJT0xESUZTPSRJRlMKKwlJRlM9IiRuZXdfbGluZSIKKwl3aGlsZSByZWFkIGxpbmUKKwlkbworCQljYXNlICIkbGluZSIgaW4KKwkJIyBiYWNrdHJhY2UsIHBvc3NpYmx5IGEgbmV3IG9uZQorCQk9PVswLTldKikKKworCQkJIyBEb2VzIHRoZSBjdXJyZW50IHZhbGdyaW5kIGVycm9yIGhhdmUgYSBtZXNzYWdlIHlldD8KKwkJCWNhc2UgIiRvdXRwdXQiIGluCisJCQkqLm1lc3NhZ2UpCisJCQkJdGVzdCAteiAiJG1pc3NpbmdfbWVzc2FnZSIgJiYKKwkJCQltaXNzaW5nX21lc3NhZ2U9JGNvdW50CisJCQkJb3V0cHV0PQorCQkJZXNhYworCisJCQlzdGFydF9vdXRwdXQgJChiYXNlbmFtZSAkMSkKKwkJCWVjaG8gIiRsaW5lIiB8CisJCQlzZWQgJ3MvPT1bMC05XSo9PS89PXZhbGdyaW5kPT0vJyA+PiAkb3V0cHV0CisJCQk7OworCQkjIGVuZCBvZiBiYWNrdHJhY2UKKwkJJ30nKQorCQkJdGVzdCAteiAiJG91dHB1dCIgfHwgeworCQkJCWVjaG8gIiRsaW5lIiA+PiAkb3V0cHV0CisJCQkJdGVzdCAkb3V0cHV0ID0gJHtvdXRwdXQlLm1lc3NhZ2V9ICYmCisJCQkJb3V0cHV0PSRvdXRwdXQubWVzc2FnZQorCQkJfQorCQkJOzsKKwkJIyBlbmQgb2YgdGVzdCBjYXNlCisJCScnKQorCQkJZmluaXNoX291dHB1dAorCQkJOzsKKwkJIyBub3JtYWwgbGluZTsgaWYgJG91dHB1dCBpcyBzZXQsIHByaW50IHRoZSBsaW5lCisJCSopCisJCQl0ZXN0IC16ICIkb3V0cHV0IiB8fCBlY2hvICIkbGluZSIgPj4gJG91dHB1dAorCQkJOzsKKwkJZXNhYworCWRvbmUgPCAkMQorCUlGUz0kT0xESUZTCisKKwkjIGp1c3QgdG8gYmUgc2FmZQorCWZpbmlzaF9vdXRwdXQKK30KKworZm9yIHRlc3Rfc2NyaXB0IGluICIkKGRpcm5hbWUgIiQwIikiLy4uL3Rlc3QtcmVzdWx0cy8qLm91dAorZG8KKwloYW5kbGVfb25lICR0ZXN0X3NjcmlwdAorZG9uZQorCitvdXRwdXRfYWxsCmRpZmYgLS1naXQgYS90L3ZhbGdyaW5kL2RlZmF1bHQuc3VwcCBiL3QvdmFsZ3JpbmQvZGVmYXVsdC5zdXBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjcyNGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kL2RlZmF1bHQuc3VwcApAQCAtMCwwICsxLDUxIEBACit7CisJaWdub3JlLXpsaWItZXJyb3JzLWNvbmQKKwlNZW1jaGVjazpDb25kCisJb2JqOipsaWJ6LnNvKgorfQorCit7CisJaWdub3JlLXpsaWItZXJyb3JzLXZhbHVlOAorCU1lbWNoZWNrOlZhbHVlOAorCW9iajoqbGliei5zbyoKK30KKworeworCWlnbm9yZS16bGliLWVycm9ycy12YWx1ZTQKKwlNZW1jaGVjazpWYWx1ZTQKKwlvYmo6KmxpYnouc28qCit9CisKK3sKKwlpZ25vcmUtbGRzby1jb25kCisJTWVtY2hlY2s6Q29uZAorCW9iajoqbGQtKi5zbworfQorCit7CisJaWdub3JlLWxkc28tYWRkcjgKKwlNZW1jaGVjazpBZGRyOAorCW9iajoqbGQtKi5zbworfQorCit7CisJaWdub3JlLWxkc28tYWRkcjQKKwlNZW1jaGVjazpBZGRyNAorCW9iajoqbGQtKi5zbworfQorCit7CisJd3JpdGluZy1kYXRhLWZyb20temxpYi10cmlnZ2Vycy1ldmVuLW1vcmUtZXJyb3JzCisJTWVtY2hlY2s6UGFyYW0KKwl3cml0ZShidWYpCisJb2JqOi9saWIvbGQtKi5zbworCWZ1bjp3cml0ZV9pbl9mdWxsCisJZnVuOndyaXRlX2J1ZmZlcgorCWZ1bjp3cml0ZV9sb29zZV9vYmplY3QKK30KKworeworCWlnbm9yZS1zc2Utc3RybGVuLWludmFsaWQtcmVhZC1zaXplCisJTWVtY2hlY2s6QWRkcjQKKwlmdW46Y29weV9yZWYKK30KZGlmZiAtLWdpdCBhL3QvdmFsZ3JpbmQvdmFsZ3JpbmQuc2ggYi90L3ZhbGdyaW5kL3ZhbGdyaW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4MmI0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kL3ZhbGdyaW5kLnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorCitiYXNlPSQoYmFzZW5hbWUgIiQwIikKKworVFJBQ0tfT1JJR0lOUz0KKworVkFMR1JJTkRfVkVSU0lPTj0kKHZhbGdyaW5kIC0tdmVyc2lvbikKK1ZBTEdSSU5EX01BSk9SPSQoZXhwciAiJFZBTEdSSU5EX1ZFUlNJT04iIDogJ1teMC05XSpcKFswLTldKlwpJykKK1ZBTEdSSU5EX01JTk9SPSQoZXhwciAiJFZBTEdSSU5EX1ZFUlNJT04iIDogJ1teMC05XSpbMC05XSpcLlwoWzAtOV0qXCknKQordGVzdCAzIC1ndCAiJFZBTEdSSU5EX01BSk9SIiB8fAordGVzdCAzIC1lcSAiJFZBTEdSSU5EX01BSk9SIiAtYSA0IC1ndCAiJFZBTEdSSU5EX01JTk9SIiB8fAorVFJBQ0tfT1JJR0lOUz0tLXRyYWNrLW9yaWdpbnM9eWVzCisKK2V4ZWMgdmFsZ3JpbmQgLXEgLS1lcnJvci1leGl0Y29kZT0xMjYgXAorCS0tbGVhay1jaGVjaz1ubyBcCisJLS1zdXBwcmVzc2lvbnM9IiRHSVRfVkFMR1JJTkQvZGVmYXVsdC5zdXBwIiBcCisJLS1nZW4tc3VwcHJlc3Npb25zPWFsbCBcCisJJFRSQUNLX09SSUdJTlMgXAorCS0tbG9nLWZkPTQgXAorCS0taW5wdXQtZmQ9NCBcCisJJEdJVF9WQUxHUklORF9PUFRJT05TIFwKKwkiJEdJVF9WQUxHUklORCIvLi4vLi4vIiRiYXNlIiAiJEAiCmRpZmYgLS1naXQgYS90YWcuYyBiL3RhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZDI3MmIKLS0tIC9kZXYvbnVsbAorKysgYi90YWcuYwpAQCAtMCwwICsxLDE2OSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKworI2RlZmluZSBQR1BfU0lHTkFUVVJFICItLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLSIKKyNkZWZpbmUgUEdQX01FU1NBR0UgIi0tLS0tQkVHSU4gUEdQIE1FU1NBR0UtLS0tLSIKKworY29uc3QgY2hhciAqdGFnX3R5cGUgPSAidGFnIjsKKworc3RydWN0IG9iamVjdCAqZGVyZWZfdGFnKHN0cnVjdCBvYmplY3QgKm8sIGNvbnN0IGNoYXIgKndhcm4sIGludCB3YXJubGVuKQoreworCXdoaWxlIChvICYmIG8tPnR5cGUgPT0gT0JKX1RBRykKKwkJaWYgKCgoc3RydWN0IHRhZyAqKW8pLT50YWdnZWQpCisJCQlvID0gcGFyc2Vfb2JqZWN0KCgoc3RydWN0IHRhZyAqKW8pLT50YWdnZWQtPnNoYTEpOworCQllbHNlCisJCQlvID0gTlVMTDsKKwlpZiAoIW8gJiYgd2FybikgeworCQlpZiAoIXdhcm5sZW4pCisJCQl3YXJubGVuID0gc3RybGVuKHdhcm4pOworCQllcnJvcigibWlzc2luZyBvYmplY3QgcmVmZXJlbmNlZCBieSAnJS4qcyciLCB3YXJubGVuLCB3YXJuKTsKKwl9CisJcmV0dXJuIG87Cit9CisKK3N0cnVjdCBvYmplY3QgKmRlcmVmX3RhZ19ub3ZlcmlmeShzdHJ1Y3Qgb2JqZWN0ICpvKQoreworCXdoaWxlIChvICYmIG8tPnR5cGUgPT0gT0JKX1RBRykgeworCQlvID0gcGFyc2Vfb2JqZWN0KG8tPnNoYTEpOworCQlpZiAobyAmJiBvLT50eXBlID09IE9CSl9UQUcgJiYgKChzdHJ1Y3QgdGFnICopbyktPnRhZ2dlZCkKKwkJCW8gPSAoKHN0cnVjdCB0YWcgKilvKS0+dGFnZ2VkOworCQllbHNlCisJCQlvID0gTlVMTDsKKwl9CisJcmV0dXJuIG87Cit9CisKK3N0cnVjdCB0YWcgKmxvb2t1cF90YWcoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlyZXR1cm4gY3JlYXRlX29iamVjdChzaGExLCBPQkpfVEFHLCBhbGxvY190YWdfbm9kZSgpKTsKKwlpZiAoIW9iai0+dHlwZSkKKwkJb2JqLT50eXBlID0gT0JKX1RBRzsKKwlpZiAob2JqLT50eXBlICE9IE9CSl9UQUcpIHsKKwkJZXJyb3IoIk9iamVjdCAlcyBpcyBhICVzLCBub3QgYSB0YWciLAorCQkgICAgICBzaGExX3RvX2hleChzaGExKSwgdHlwZW5hbWUob2JqLT50eXBlKSk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gKHN0cnVjdCB0YWcgKikgb2JqOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYXJzZV90YWdfZGF0ZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKnRhaWwpCit7CisJY29uc3QgY2hhciAqZGF0ZXB0cjsKKworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnPicpCisJCS8qIG5hZGEgKi87CisJaWYgKGJ1ZiA+PSB0YWlsKQorCQlyZXR1cm4gMDsKKwlkYXRlcHRyID0gYnVmOworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnXG4nKQorCQkvKiBuYWRhICovOworCWlmIChidWYgPj0gdGFpbCkKKwkJcmV0dXJuIDA7CisJLyogZGF0ZXB0ciA8IGJ1ZiAmJiBidWZbLTFdID09ICdcbicsIHNvIHN0cnRvdWwgd2lsbCBzdG9wIGF0IGJ1Zi0xICovCisJcmV0dXJuIHN0cnRvdWwoZGF0ZXB0ciwgTlVMTCwgMTApOworfQorCitpbnQgcGFyc2VfdGFnX2J1ZmZlcihzdHJ1Y3QgdGFnICppdGVtLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIHR5cGVbMjBdOworCWNvbnN0IGNoYXIgKmJ1ZnB0ciA9IGRhdGE7CisJY29uc3QgY2hhciAqdGFpbCA9IGJ1ZnB0ciArIHNpemU7CisJY29uc3QgY2hhciAqbmw7CisKKwlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKKwkJcmV0dXJuIDA7CisJaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CisKKwlpZiAoc2l6ZSA8IDY0KQorCQlyZXR1cm4gLTE7CisJaWYgKG1lbWNtcCgib2JqZWN0ICIsIGJ1ZnB0ciwgNykgfHwgZ2V0X3NoYTFfaGV4KGJ1ZnB0ciArIDcsIHNoYTEpIHx8IGJ1ZnB0cls0N10gIT0gJ1xuJykKKwkJcmV0dXJuIC0xOworCWJ1ZnB0ciArPSA0ODsgLyogIm9iamVjdCAiICsgc2hhMSArICJcbiIgKi8KKworCWlmIChwcmVmaXhjbXAoYnVmcHRyLCAidHlwZSAiKSkKKwkJcmV0dXJuIC0xOworCWJ1ZnB0ciArPSA1OworCW5sID0gbWVtY2hyKGJ1ZnB0ciwgJ1xuJywgdGFpbCAtIGJ1ZnB0cik7CisJaWYgKCFubCB8fCBzaXplb2YodHlwZSkgPD0gKG5sIC0gYnVmcHRyKSkKKwkJcmV0dXJuIC0xOworCXN0cm5jcHkodHlwZSwgYnVmcHRyLCBubCAtIGJ1ZnB0cik7CisJdHlwZVtubCAtIGJ1ZnB0cl0gPSAnXDAnOworCWJ1ZnB0ciA9IG5sICsgMTsKKworCWlmICghc3RyY21wKHR5cGUsIGJsb2JfdHlwZSkpIHsKKwkJaXRlbS0+dGFnZ2VkID0gJmxvb2t1cF9ibG9iKHNoYTEpLT5vYmplY3Q7CisJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsIHRyZWVfdHlwZSkpIHsKKwkJaXRlbS0+dGFnZ2VkID0gJmxvb2t1cF90cmVlKHNoYTEpLT5vYmplY3Q7CisJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsIGNvbW1pdF90eXBlKSkgeworCQlpdGVtLT50YWdnZWQgPSAmbG9va3VwX2NvbW1pdChzaGExKS0+b2JqZWN0OworCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCB0YWdfdHlwZSkpIHsKKwkJaXRlbS0+dGFnZ2VkID0gJmxvb2t1cF90YWcoc2hhMSktPm9iamVjdDsKKwl9IGVsc2UgeworCQllcnJvcigiVW5rbm93biB0eXBlICVzIiwgdHlwZSk7CisJCWl0ZW0tPnRhZ2dlZCA9IE5VTEw7CisJfQorCisJaWYgKGJ1ZnB0ciArIDQgPCB0YWlsICYmICFwcmVmaXhjbXAoYnVmcHRyLCAidGFnICIpKQorCQk7IAkJLyogZ29vZCAqLworCWVsc2UKKwkJcmV0dXJuIC0xOworCWJ1ZnB0ciArPSA0OworCW5sID0gbWVtY2hyKGJ1ZnB0ciwgJ1xuJywgdGFpbCAtIGJ1ZnB0cik7CisJaWYgKCFubCkKKwkJcmV0dXJuIC0xOworCWl0ZW0tPnRhZyA9IHhtZW1kdXB6KGJ1ZnB0ciwgbmwgLSBidWZwdHIpOworCWJ1ZnB0ciA9IG5sICsgMTsKKworCWlmIChidWZwdHIgKyA3IDwgdGFpbCAmJiAhcHJlZml4Y21wKGJ1ZnB0ciwgInRhZ2dlciAiKSkKKwkJaXRlbS0+ZGF0ZSA9IHBhcnNlX3RhZ19kYXRlKGJ1ZnB0ciwgdGFpbCk7CisJZWxzZQorCQlpdGVtLT5kYXRlID0gMDsKKworCXJldHVybiAwOworfQorCitpbnQgcGFyc2VfdGFnKHN0cnVjdCB0YWcgKml0ZW0pCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCByZXQ7CisKKwlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKKwkJcmV0dXJuIDA7CisJZGF0YSA9IHJlYWRfc2hhMV9maWxlKGl0ZW0tPm9iamVjdC5zaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgcmVhZCAlcyIsCisJCQkgICAgIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CisJaWYgKHR5cGUgIT0gT0JKX1RBRykgeworCQlmcmVlKGRhdGEpOworCQlyZXR1cm4gZXJyb3IoIk9iamVjdCAlcyBub3QgYSB0YWciLAorCQkJICAgICBzaGExX3RvX2hleChpdGVtLT5vYmplY3Quc2hhMSkpOworCX0KKwlyZXQgPSBwYXJzZV90YWdfYnVmZmVyKGl0ZW0sIGRhdGEsIHNpemUpOworCWZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIExvb2sgYXQgYSBzaWduZWQgdGFnIG9iamVjdCwgYW5kIHJldHVybiB0aGUgb2Zmc2V0IHdoZXJlCisgKiB0aGUgZW1iZWRkZWQgZGV0YWNoZWQgc2lnbmF0dXJlIGJlZ2lucywgb3IgdGhlIGVuZCBvZiB0aGUKKyAqIGRhdGEgd2hlbiB0aGVyZSBpcyBubyBzdWNoIHNpZ25hdHVyZS4KKyAqLworc2l6ZV90IHBhcnNlX3NpZ25hdHVyZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwljaGFyICplb2w7CisJc2l6ZV90IGxlbiA9IDA7CisJd2hpbGUgKGxlbiA8IHNpemUgJiYgcHJlZml4Y21wKGJ1ZiArIGxlbiwgUEdQX1NJR05BVFVSRSkgJiYKKwkJCXByZWZpeGNtcChidWYgKyBsZW4sIFBHUF9NRVNTQUdFKSkgeworCQllb2wgPSBtZW1jaHIoYnVmICsgbGVuLCAnXG4nLCBzaXplIC0gbGVuKTsKKwkJbGVuICs9IGVvbCA/IGVvbCAtIChidWYgKyBsZW4pICsgMSA6IHNpemUgLSBsZW47CisJfQorCXJldHVybiBsZW47Cit9CmRpZmYgLS1naXQgYS90YWcuaCBiL3RhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOGExZTQKLS0tIC9kZXYvbnVsbAorKysgYi90YWcuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIFRBR19ICisjZGVmaW5lIFRBR19ICisKKyNpbmNsdWRlICJvYmplY3QuaCIKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnRhZ190eXBlOworCitzdHJ1Y3QgdGFnIHsKKwlzdHJ1Y3Qgb2JqZWN0IG9iamVjdDsKKwlzdHJ1Y3Qgb2JqZWN0ICp0YWdnZWQ7CisJY2hhciAqdGFnOworCXVuc2lnbmVkIGxvbmcgZGF0ZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgdGFnICpsb29rdXBfdGFnKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBwYXJzZV90YWdfYnVmZmVyKHN0cnVjdCB0YWcgKml0ZW0sIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gaW50IHBhcnNlX3RhZyhzdHJ1Y3QgdGFnICppdGVtKTsKK2V4dGVybiBzdHJ1Y3Qgb2JqZWN0ICpkZXJlZl90YWcoc3RydWN0IG9iamVjdCAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gc3RydWN0IG9iamVjdCAqZGVyZWZfdGFnX25vdmVyaWZ5KHN0cnVjdCBvYmplY3QgKik7CitleHRlcm4gc2l6ZV90IHBhcnNlX3NpZ25hdHVyZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKyNlbmRpZiAvKiBUQUdfSCAqLwpkaWZmIC0tZ2l0IGEvdGFyLmggYi90YXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDY3NzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyLmgKQEAgLTAsMCArMSwyNSBAQAorI2RlZmluZSBUWVBFRkxBR19BVVRPCQknXDAnCisjZGVmaW5lIFRZUEVGTEFHX1JFRwkJJzAnCisjZGVmaW5lIFRZUEVGTEFHX0xOSwkJJzInCisjZGVmaW5lIFRZUEVGTEFHX0RJUgkJJzUnCisjZGVmaW5lIFRZUEVGTEFHX0dMT0JBTF9IRUFERVIJJ2cnCisjZGVmaW5lIFRZUEVGTEFHX0VYVF9IRUFERVIJJ3gnCisKK3N0cnVjdCB1c3Rhcl9oZWFkZXIgeworCWNoYXIgbmFtZVsxMDBdOwkJLyogICAwICovCisJY2hhciBtb2RlWzhdOwkJLyogMTAwICovCisJY2hhciB1aWRbOF07CQkvKiAxMDggKi8KKwljaGFyIGdpZFs4XTsJCS8qIDExNiAqLworCWNoYXIgc2l6ZVsxMl07CQkvKiAxMjQgKi8KKwljaGFyIG10aW1lWzEyXTsJCS8qIDEzNiAqLworCWNoYXIgY2hrc3VtWzhdOwkJLyogMTQ4ICovCisJY2hhciB0eXBlZmxhZ1sxXTsJLyogMTU2ICovCisJY2hhciBsaW5rbmFtZVsxMDBdOwkvKiAxNTcgKi8KKwljaGFyIG1hZ2ljWzZdOwkJLyogMjU3ICovCisJY2hhciB2ZXJzaW9uWzJdOwkvKiAyNjMgKi8KKwljaGFyIHVuYW1lWzMyXTsJCS8qIDI2NSAqLworCWNoYXIgZ25hbWVbMzJdOwkJLyogMjk3ICovCisJY2hhciBkZXZtYWpvcls4XTsJLyogMzI5ICovCisJY2hhciBkZXZtaW5vcls4XTsJLyogMzM3ICovCisJY2hhciBwcmVmaXhbMTU1XTsJLyogMzQ1ICovCit9OwpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzLy5naXRpZ25vcmUgYi90ZW1wbGF0ZXMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU5ZWNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitibHQKK2JvaWxlcnBsYXRlcy5tYWRlCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvTWFrZWZpbGUgYi90ZW1wbGF0ZXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyYTcxYQotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDY2IEBACisjIG1ha2UgYW5kIGluc3RhbGwgc2FtcGxlIHRlbXBsYXRlcworCitpZm5kZWYgVgorCVFVSUVUID0gQAorZW5kaWYKKworSU5TVEFMTCA/PSBpbnN0YWxsCitUQVIgPz0gdGFyCitSTSA/PSBybSAtZgorcHJlZml4ID89ICQoSE9NRSkKK3RlbXBsYXRlX2luc3RkaXIgPz0gJChwcmVmaXgpL3NoYXJlL2dpdC1jb3JlL3RlbXBsYXRlcworIyBERVNURElSPQorCitpZm5kZWYgU0hFTExfUEFUSAorCVNIRUxMX1BBVEggPSAvYmluL3NoCitlbmRpZgoraWZuZGVmIFBFUkxfUEFUSAorCVBFUkxfUEFUSCA9IHBlcmwKK2VuZGlmCisKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQorUEVSTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQRVJMX1BBVEgpKQorCisjIFNoZWxsIHF1b3RlIChkbyBub3QgdXNlICQoY2FsbCkgdG8gYWNjb21tb2RhdGUgYW5jaWVudCBzZXR1cHMpOworREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCit0ZW1wbGF0ZV9pbnN0ZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJCh0ZW1wbGF0ZV9pbnN0ZGlyKSkKKworYWxsOiBib2lsZXJwbGF0ZXMubWFkZSBjdXN0b20KKworIyBQdXQgdGVtcGxhdGVzIHRoYXQgY2FuIGJlIGNvcGllZCBzdHJhaWdodCBmcm9tIHRoZSBzb3VyY2UKKyMgaW4gYSBmaWxlIGRpcmVjLS10b3J5LS1maWxlIGluIHRoZSBzb3VyY2UuICBUaGV5IHdpbGwgYmUKKyMganVzdCBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgorCiticHNyYyA9ICQoZmlsdGVyLW91dCAlfiwkKHdpbGRjYXJkICotLSopKQorYm9pbGVycGxhdGVzLm1hZGUgOiAkKGJwc3JjKQorCSQoUVVJRVQpdW1hc2sgMDIyICYmIGxzICotLSogMj4vZGV2L251bGwgfCBcCisJd2hpbGUgcmVhZCBib2lsZXJwbGF0ZTsgXAorCWRvIFwKKwkJY2FzZSAiJCRib2lsZXJwbGF0ZSIgaW4gKn4pIGNvbnRpbnVlIDs7IGVzYWMgJiYgXAorCQlkc3Q9YGVjaG8gIiQkYm9pbGVycGxhdGUiIHwgc2VkIC1lICdzfF50aGlzfC58O3N8LS18L3xnJ2AgJiYgXAorCQlkaXI9YGV4cHIgIiQkZHN0IiA6ICdcKC4qXCkvJ2AgJiYgXAorCQlta2RpciAtcCBibHQvJCRkaXIgJiYgXAorCQljYXNlICIkJGJvaWxlcnBsYXRlIiBpbiBcCisJCSotLSkgY29udGludWU7OyBcCisJCWVzYWMgJiYgXAorCQlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorCQkgICAgLWUgJ3N8QFNIRUxMX1BBVEhAfCQoU0hFTExfUEFUSF9TUSl8JyBcCisJCSAgICAtZSAnc3xAUEVSTF9QQVRIQHwkKFBFUkxfUEFUSF9TUSl8ZycgJCRib2lsZXJwbGF0ZSA+IFwKKwkJCWJsdC8kJGRzdCAmJiBcCisJCWlmIHRlc3QgLXggIiQkYm9pbGVycGxhdGUiOyB0aGVuIHJ4PXJ4OyBlbHNlIHJ4PXI7IGZpICYmIFwKKwkJY2htb2QgYSskJHJ4ICJibHQvJCRkc3QiIHx8IGV4aXQ7IFwKKwlkb25lICYmIFwKKwlkYXRlID4kQAorCisjIElmIHlvdSBuZWVkIGJ1aWxkLXRhaWxvcmVkIHRlbXBsYXRlcywgYnVpbGQgdGhlbSBpbnRvIGJsdC8KKyMgZGlyZWN0b3J5IHlvdXJzZWxmIGhlcmUuCitjdXN0b206CisJJChRVUlFVCk6IG5vIGN1c3RvbSB0ZW1wbGF0ZXMgeWV0CisKK2NsZWFuOgorCSQoUk0pIC1yIGJsdCBib2lsZXJwbGF0ZXMubWFkZQorCitpbnN0YWxsOiBhbGwKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQodGVtcGxhdGVfaW5zdGRpcl9TUSknCisJKGNkIGJsdCAmJiAkKFRBUikgY2YgLSAuKSB8IFwKKwkoY2QgJyQoREVTVERJUl9TUSkkKHRlbXBsYXRlX2luc3RkaXJfU1EpJyAmJiB1bWFzayAwMjIgJiYgJChUQVIpIHhvZiAtKQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2JyYW5jaGVzLS0gYi90ZW1wbGF0ZXMvYnJhbmNoZXMtLQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWU4ODcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2JyYW5jaGVzLS0KQEAgLTAsMCArMSBAQAorOiB0aGlzIGlzIGp1c3QgdG8gZW5zdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1hcHBseXBhdGNoLW1zZy5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLWFwcGx5cGF0Y2gtbXNnLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YjJhMmZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1hcHBseXBhdGNoLW1zZy5zYW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gY2hlY2sgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSB0YWtlbiBieQorIyBhcHBseXBhdGNoIGZyb20gYW4gZS1tYWlsIG1lc3NhZ2UuCisjCisjIFRoZSBob29rIHNob3VsZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIGFmdGVyIGlzc3VpbmcgYW4KKyMgYXBwcm9wcmlhdGUgbWVzc2FnZSBpZiBpdCB3YW50cyB0byBzdG9wIHRoZSBjb21taXQuICBUaGUgaG9vayBpcworIyBhbGxvd2VkIHRvIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIGZpbGUuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gImFwcGx5cGF0Y2gtbXNnIi4KKworLiBnaXQtc2gtc2V0dXAKK3Rlc3QgLXggIiRHSVRfRElSL2hvb2tzL2NvbW1pdC1tc2ciICYmCisJZXhlYyAiJEdJVF9ESVIvaG9va3MvY29tbWl0LW1zZyIgJHsxKyIkQCJ9Cis6CmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLWNvbW1pdC1tc2cuc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS1jb21taXQtbXNnLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNThkMTE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1jb21taXQtbXNnLnNhbXBsZQpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBjaGVjayB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLgorIyBDYWxsZWQgYnkgImdpdCBjb21taXQiIHdpdGggb25lIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgZmlsZQorIyB0aGF0IGhhcyB0aGUgY29tbWl0IG1lc3NhZ2UuICBUaGUgaG9vayBzaG91bGQgZXhpdCB3aXRoIG5vbi16ZXJvCisjIHN0YXR1cyBhZnRlciBpc3N1aW5nIGFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UgaWYgaXQgd2FudHMgdG8gc3RvcCB0aGUKKyMgY29tbWl0LiAgVGhlIGhvb2sgaXMgYWxsb3dlZCB0byBlZGl0IHRoZSBjb21taXQgbWVzc2FnZSBmaWxlLgorIworIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJjb21taXQtbXNnIi4KKworIyBVbmNvbW1lbnQgdGhlIGJlbG93IHRvIGFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgbWVzc2FnZS4KKyMgRG9pbmcgdGhpcyBpbiBhIGhvb2sgaXMgYSBiYWQgaWRlYSBpbiBnZW5lcmFsLCBidXQgdGhlIHByZXBhcmUtY29tbWl0LW1zZworIyBob29rIGlzIG1vcmUgc3VpdGVkIHRvIGl0LgorIworIyBTT0I9JChnaXQgdmFyIEdJVF9BVVRIT1JfSURFTlQgfCBzZWQgLW4gJ3MvXlwoLio+XCkuKiQvU2lnbmVkLW9mZi1ieTogXDEvcCcpCisjIGdyZXAgLXFzICJeJFNPQiIgIiQxIiB8fCBlY2hvICIkU09CIiA+PiAiJDEiCisKKyMgVGhpcyBleGFtcGxlIGNhdGNoZXMgZHVwbGljYXRlIFNpZ25lZC1vZmYtYnkgbGluZXMuCisKK3Rlc3QgIiIgPSAiJChncmVwICdeU2lnbmVkLW9mZi1ieTogJyAiJDEiIHwKKwkgc29ydCB8IHVuaXEgLWMgfCBzZWQgLWUgJy9eWyAJXSoxWyAJXS9kJykiIHx8IHsKKwllY2hvID4mMiBEdXBsaWNhdGUgU2lnbmVkLW9mZi1ieSBsaW5lcy4KKwlleGl0IDEKK30KZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tcG9zdC11cGRhdGUuc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS1wb3N0LXVwZGF0ZS5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWMxN2VjMQotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tcG9zdC11cGRhdGUuc2FtcGxlCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gcHJlcGFyZSBhIHBhY2tlZCByZXBvc2l0b3J5IGZvciB1c2Ugb3ZlcgorIyBkdW1iIHRyYW5zcG9ydHMuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gInBvc3QtdXBkYXRlIi4KKworZXhlYyBnaXQgdXBkYXRlLXNlcnZlci1pbmZvCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXByZS1hcHBseXBhdGNoLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLWFwcGx5cGF0Y2guc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxZjE4N2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXByZS1hcHBseXBhdGNoLnNhbXBsZQpAQCAtMCwwICsxLDE0IEBACisjIS9iaW4vc2gKKyMKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byB2ZXJpZnkgd2hhdCBpcyBhYm91dCB0byBiZSBjb21taXR0ZWQKKyMgYnkgYXBwbHlwYXRjaCBmcm9tIGFuIGUtbWFpbCBtZXNzYWdlLgorIworIyBUaGUgaG9vayBzaG91bGQgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBhZnRlciBpc3N1aW5nIGFuCisjIGFwcHJvcHJpYXRlIG1lc3NhZ2UgaWYgaXQgd2FudHMgdG8gc3RvcCB0aGUgY29tbWl0LgorIworIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJwcmUtYXBwbHlwYXRjaCIuCisKKy4gZ2l0LXNoLXNldHVwCit0ZXN0IC14ICIkR0lUX0RJUi9ob29rcy9wcmUtY29tbWl0IiAmJgorCWV4ZWMgIiRHSVRfRElSL2hvb2tzL3ByZS1jb21taXQiICR7MSsiJEAifQorOgpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtY29tbWl0LnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMThjNDgyOQotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC5zYW1wbGUKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gdmVyaWZ5IHdoYXQgaXMgYWJvdXQgdG8gYmUgY29tbWl0dGVkLgorIyBDYWxsZWQgYnkgImdpdCBjb21taXQiIHdpdGggbm8gYXJndW1lbnRzLiAgVGhlIGhvb2sgc2hvdWxkCisjIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMgYWZ0ZXIgaXNzdWluZyBhbiBhcHByb3ByaWF0ZSBtZXNzYWdlIGlmCisjIGl0IHdhbnRzIHRvIHN0b3AgdGhlIGNvbW1pdC4KKyMKKyMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAicHJlLWNvbW1pdCIuCisKK2lmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwlhZ2FpbnN0PUhFQUQKK2Vsc2UKKwkjIEluaXRpYWwgY29tbWl0OiBkaWZmIGFnYWluc3QgYW4gZW1wdHkgdHJlZSBvYmplY3QKKwlhZ2FpbnN0PTRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKK2ZpCisKKyMgSWYgeW91IHdhbnQgdG8gYWxsb3cgbm9uLWFzY2lpIGZpbGVuYW1lcyBzZXQgdGhpcyB2YXJpYWJsZSB0byB0cnVlLgorYWxsb3dub25hc2NpaT0kKGdpdCBjb25maWcgaG9va3MuYWxsb3dub25hc2NpaSkKKworIyBSZWRpcmVjdCBvdXRwdXQgdG8gc3RkZXJyLgorZXhlYyAxPiYyCisKKyMgQ3Jvc3MgcGxhdGZvcm0gcHJvamVjdHMgdGVuZCB0byBhdm9pZCBub24tYXNjaWkgZmlsZW5hbWVzOyBwcmV2ZW50CisjIHRoZW0gZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgcmVwb3NpdG9yeS4gV2UgZXhwbG9pdCB0aGUgZmFjdCB0aGF0IHRoZQorIyBwcmludGFibGUgcmFuZ2Ugc3RhcnRzIGF0IHRoZSBzcGFjZSBjaGFyYWN0ZXIgYW5kIGVuZHMgd2l0aCB0aWxkZS4KK2lmIFsgIiRhbGxvd25vbmFzY2lpIiAhPSAidHJ1ZSIgXSAmJgorCSMgTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYnJhY2tldHMgYXJvdW5kIGEgdHIgcmFuZ2UgaXMgb2sgaGVyZSwgKGl0J3MKKwkjIGV2ZW4gcmVxdWlyZWQsIGZvciBwb3J0YWJpbGl0eSB0byBTb2xhcmlzIDEwJ3MgL3Vzci9iaW4vdHIpLCBzaW5jZQorCSMgdGhlIHNxdWFyZSBicmFja2V0IGJ5dGVzIGhhcHBlbiB0byBmYWxsIGluIHRoZSBkZXNpZ25hdGVkIHJhbmdlLgorCXRlc3QgJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSAtLWRpZmYtZmlsdGVyPUEgLXogJGFnYWluc3QgfAorCSAgTENfQUxMPUMgdHIgLWQgJ1sgLX5dXDAnIHwgd2MgLWMpICE9IDAKK3RoZW4KKwllY2hvICJFcnJvcjogQXR0ZW1wdCB0byBhZGQgYSBub24tYXNjaWkgZmlsZSBuYW1lLiIKKwllY2hvCisJZWNobyAiVGhpcyBjYW4gY2F1c2UgcHJvYmxlbXMgaWYgeW91IHdhbnQgdG8gd29yayIKKwllY2hvICJ3aXRoIHBlb3BsZSBvbiBvdGhlciBwbGF0Zm9ybXMuIgorCWVjaG8KKwllY2hvICJUbyBiZSBwb3J0YWJsZSBpdCBpcyBhZHZpc2FibGUgdG8gcmVuYW1lIHRoZSBmaWxlIC4uLiIKKwllY2hvCisJZWNobyAiSWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIHlvdSBjYW4gZGlzYWJsZSB0aGlzIgorCWVjaG8gImNoZWNrIHVzaW5nOiIKKwllY2hvCisJZWNobyAiICBnaXQgY29uZmlnIGhvb2tzLmFsbG93bm9uYXNjaWkgdHJ1ZSIKKwllY2hvCisJZXhpdCAxCitmaQorCisjIElmIHRoZXJlIGFyZSB3aGl0ZXNwYWNlIGVycm9ycywgcHJpbnQgdGhlIG9mZmVuZGluZyBmaWxlIG5hbWVzIGFuZCBmYWlsLgorZXhlYyBnaXQgZGlmZi1pbmRleCAtLWNoZWNrIC0tY2FjaGVkICRhZ2FpbnN0IC0tCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXByZS1yZWJhc2Uuc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmUtcmViYXNlLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNTNmMTExCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmUtcmViYXNlLnNhbXBsZQpAQCAtMCwwICsxLDE2OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBKdW5pbyBDIEhhbWFubworIworIyBUaGUgInByZS1yZWJhc2UiIGhvb2sgaXMgcnVuIGp1c3QgYmVmb3JlICJnaXQgcmViYXNlIiBzdGFydHMgZG9pbmcKKyMgaXRzIGpvYiwgYW5kIGNhbiBwcmV2ZW50IHRoZSBjb21tYW5kIGZyb20gcnVubmluZyBieSBleGl0aW5nIHdpdGgKKyMgbm9uLXplcm8gc3RhdHVzLgorIworIyBUaGUgaG9vayBpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisjCisjICQxIC0tIHRoZSB1cHN0cmVhbSB0aGUgc2VyaWVzIHdhcyBmb3JrZWQgZnJvbS4KKyMgJDIgLS0gdGhlIGJyYW5jaCBiZWluZyByZWJhc2VkIChvciBlbXB0eSB3aGVuIHJlYmFzaW5nIHRoZSBjdXJyZW50IGJyYW5jaCkuCisjCisjIFRoaXMgc2FtcGxlIHNob3dzIGhvdyB0byBwcmV2ZW50IHRvcGljIGJyYW5jaGVzIHRoYXQgYXJlIGFscmVhZHkKKyMgbWVyZ2VkIHRvICduZXh0JyBicmFuY2ggZnJvbSBnZXR0aW5nIHJlYmFzZWQsIGJlY2F1c2UgYWxsb3dpbmcgaXQKKyMgd291bGQgcmVzdWx0IGluIHJlYmFzaW5nIGFscmVhZHkgcHVibGlzaGVkIGhpc3RvcnkuCisKK3B1Ymxpc2g9bmV4dAorYmFzZWJyYW5jaD0iJDEiCitpZiB0ZXN0ICIkIyIgPSAyCit0aGVuCisJdG9waWM9InJlZnMvaGVhZHMvJDIiCitlbHNlCisJdG9waWM9YGdpdCBzeW1ib2xpYy1yZWYgSEVBRGAgfHwKKwlleGl0IDAgOyMgd2UgZG8gbm90IGludGVycnVwdCByZWJhc2luZyBkZXRhY2hlZCBIRUFECitmaQorCitjYXNlICIkdG9waWMiIGluCityZWZzL2hlYWRzLz8/LyopCisJOzsKKyopCisJZXhpdCAwIDsjIHdlIGRvIG5vdCBpbnRlcnJ1cHQgb3RoZXJzLgorCTs7Citlc2FjCisKKyMgTm93IHdlIGFyZSBkZWFsaW5nIHdpdGggYSB0b3BpYyBicmFuY2ggYmVpbmcgcmViYXNlZAorIyBvbiB0b3Agb2YgbWFzdGVyLiAgSXMgaXQgT0sgdG8gcmViYXNlIGl0PworCisjIERvZXMgdGhlIHRvcGljIHJlYWxseSBleGlzdD8KK2dpdCBzaG93LXJlZiAtcSAiJHRvcGljIiB8fCB7CisJZWNobyA+JjIgIk5vIHN1Y2ggYnJhbmNoICR0b3BpYyIKKwlleGl0IDEKK30KKworIyBJcyB0b3BpYyBmdWxseSBtZXJnZWQgdG8gbWFzdGVyPworbm90X2luX21hc3Rlcj1gZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgXm1hc3RlciAiJHRvcGljImAKK2lmIHRlc3QgLXogIiRub3RfaW5fbWFzdGVyIgordGhlbgorCWVjaG8gPiYyICIkdG9waWMgaXMgZnVsbHkgbWVyZ2VkIHRvIG1hc3RlcjsgYmV0dGVyIHJlbW92ZSBpdC4iCisJZXhpdCAxIDsjIHdlIGNvdWxkIGFsbG93IGl0LCBidXQgdGhlcmUgaXMgbm8gcG9pbnQuCitmaQorCisjIElzIHRvcGljIGV2ZXIgbWVyZ2VkIHRvIG5leHQ/ICBJZiBzbyB5b3Ugc2hvdWxkIG5vdCBiZSByZWJhc2luZyBpdC4KK29ubHlfbmV4dF8xPWBnaXQgcmV2LWxpc3QgXm1hc3RlciAiXiR0b3BpYyIgJHtwdWJsaXNofSB8IHNvcnRgCitvbmx5X25leHRfMj1gZ2l0IHJldi1saXN0IF5tYXN0ZXIgICAgICAgICAgICR7cHVibGlzaH0gfCBzb3J0YAoraWYgdGVzdCAiJG9ubHlfbmV4dF8xIiA9ICIkb25seV9uZXh0XzIiCit0aGVuCisJbm90X2luX3RvcGljPWBnaXQgcmV2LWxpc3QgIl4kdG9waWMiIG1hc3RlcmAKKwlpZiB0ZXN0IC16ICIkbm90X2luX3RvcGljIgorCXRoZW4KKwkJZWNobyA+JjIgIiR0b3BpYyBpcyBhbHJlYWR5IHVwLXRvLWRhdGUgd2l0aCBtYXN0ZXIiCisJCWV4aXQgMSA7IyB3ZSBjb3VsZCBhbGxvdyBpdCwgYnV0IHRoZXJlIGlzIG5vIHBvaW50LgorCWVsc2UKKwkJZXhpdCAwCisJZmkKK2Vsc2UKKwlub3RfaW5fbmV4dD1gZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgXiR7cHVibGlzaH0gIiR0b3BpYyJgCisJQFBFUkxfUEFUSEAgLWUgJworCQlteSAkdG9waWMgPSAkQVJHVlswXTsKKwkJbXkgJG1zZyA9ICIqICR0b3BpYyBoYXMgY29tbWl0cyBhbHJlYWR5IG1lcmdlZCB0byBwdWJsaWMgYnJhbmNoOlxuIjsKKwkJbXkgKCVub3RfaW5fbmV4dCkgPSBtYXAgeworCQkJL14oWzAtOWEtZl0rKSAvOworCQkJKCQxID0+IDEpOworCQl9IHNwbGl0KC9cbi8sICRBUkdWWzFdKTsKKwkJZm9yIG15ICRlbGVtIChtYXAgeworCQkJCS9eKFswLTlhLWZdKykgKC4qKSQvOworCQkJCVskMSA9PiAkMl07CisJCQl9IHNwbGl0KC9cbi8sICRBUkdWWzJdKSkgeworCQkJaWYgKCFleGlzdHMgJG5vdF9pbl9uZXh0eyRlbGVtLT5bMF19KSB7CisJCQkJaWYgKCRtc2cpIHsKKwkJCQkJcHJpbnQgU1RERVJSICRtc2c7CisJCQkJCXVuZGVmICRtc2c7CisJCQkJfQorCQkJCXByaW50IFNUREVSUiAiICRlbGVtLT5bMV1cbiI7CisJCQl9CisJCX0KKwknICIkdG9waWMiICIkbm90X2luX25leHQiICIkbm90X2luX21hc3RlciIKKwlleGl0IDEKK2ZpCisKK2V4aXQgMAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1RoaXMgc2FtcGxlIGhvb2sgc2FmZWd1YXJkcyB0b3BpYyBicmFuY2hlcyB0aGF0IGhhdmUgYmVlbgorcHVibGlzaGVkIGZyb20gYmVpbmcgcmV3b3VuZC4KKworVGhlIHdvcmtmbG93IGFzc3VtZWQgaGVyZSBpczoKKworICogT25jZSBhIHRvcGljIGJyYW5jaCBmb3JrcyBmcm9tICJtYXN0ZXIiLCAibWFzdGVyIiBpcyBuZXZlcgorICAgbWVyZ2VkIGludG8gaXQgYWdhaW4gKGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5KS4KKworICogT25jZSBhIHRvcGljIGJyYW5jaCBpcyBmdWxseSBjb29rZWQgYW5kIG1lcmdlZCBpbnRvICJtYXN0ZXIiLAorICAgaXQgaXMgZGVsZXRlZC4gIElmIHlvdSBuZWVkIHRvIGJ1aWxkIG9uIHRvcCBvZiBpdCB0byBjb3JyZWN0CisgICBlYXJsaWVyIG1pc3Rha2VzLCBhIG5ldyB0b3BpYyBicmFuY2ggaXMgY3JlYXRlZCBieSBmb3JraW5nIGF0CisgICB0aGUgdGlwIG9mIHRoZSAibWFzdGVyIi4gIFRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0CisgICBpdCBtYWtlcyBpdCBlYXNpZXIgdG8ga2VlcCB5b3VyIGhpc3Rvcnkgc2ltcGxlLgorCisgKiBXaGVuZXZlciB5b3UgbmVlZCB0byB0ZXN0IG9yIHB1Ymxpc2ggeW91ciBjaGFuZ2VzIHRvIHRvcGljCisgICBicmFuY2hlcywgbWVyZ2UgdGhlbSBpbnRvICJuZXh0IiBicmFuY2guCisKK1RoZSBzY3JpcHQsIGJlaW5nIGFuIGV4YW1wbGUsIGhhcmRjb2RlcyB0aGUgcHVibGlzaCBicmFuY2ggbmFtZQordG8gYmUgIm5leHQiLCBidXQgaXQgaXMgdHJpdmlhbCB0byBtYWtlIGl0IGNvbmZpZ3VyYWJsZSB2aWEKKyRHSVRfRElSL2NvbmZpZyBtZWNoYW5pc20uCisKK1dpdGggdGhpcyB3b3JrZmxvdywgeW91IHdvdWxkIHdhbnQgdG8ga25vdzoKKworKDEpIC4uLiBpZiBhIHRvcGljIGJyYW5jaCBoYXMgZXZlciBiZWVuIG1lcmdlZCB0byAibmV4dCIuICBZb3VuZworICAgIHRvcGljIGJyYW5jaGVzIGNhbiBoYXZlIHN0dXBpZCBtaXN0YWtlcyB5b3Ugd291bGQgcmF0aGVyCisgICAgY2xlYW4gdXAgYmVmb3JlIHB1Ymxpc2hpbmcsIGFuZCB0aGluZ3MgdGhhdCBoYXZlIG5vdCBiZWVuCisgICAgbWVyZ2VkIGludG8gb3RoZXIgYnJhbmNoZXMgY2FuIGJlIGVhc2lseSByZWJhc2VkIHdpdGhvdXQKKyAgICBhZmZlY3Rpbmcgb3RoZXIgcGVvcGxlLiAgQnV0IG9uY2UgaXQgaXMgcHVibGlzaGVkLCB5b3Ugd291bGQKKyAgICBub3Qgd2FudCB0byByZXdpbmQgaXQuCisKKygyKSAuLi4gaWYgYSB0b3BpYyBicmFuY2ggaGFzIGJlZW4gZnVsbHkgbWVyZ2VkIHRvICJtYXN0ZXIiLgorICAgIFRoZW4geW91IGNhbiBkZWxldGUgaXQuICBNb3JlIGltcG9ydGFudGx5LCB5b3Ugc2hvdWxkIG5vdAorICAgIGJ1aWxkIG9uIHRvcCBvZiBpdCAtLSBvdGhlciBwZW9wbGUgbWF5IGFscmVhZHkgd2FudCB0bworICAgIGNoYW5nZSB0aGluZ3MgcmVsYXRlZCB0byB0aGUgdG9waWMgYXMgcGF0Y2hlcyBhZ2FpbnN0IHlvdXIKKyAgICAibWFzdGVyIiwgc28gaWYgeW91IG5lZWQgZnVydGhlciBjaGFuZ2VzLCBpdCBpcyBiZXR0ZXIgdG8KKyAgICBmb3JrIHRoZSB0b3BpYyAocGVyaGFwcyB3aXRoIHRoZSBzYW1lIG5hbWUpIGFmcmVzaCBmcm9tIHRoZQorICAgIHRpcCBvZiAibWFzdGVyIi4KKworTGV0J3MgbG9vayBhdCB0aGlzIGV4YW1wbGU6CisKKwkJICAgby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tbyAibmV4dCIKKwkJICAvICAgICAgIC8gICAgICAgICAgIC8gICAgICAgICAgIC8KKwkJIC8gICBhLS0tYS0tLWIgQSAgICAgLyAgICAgICAgICAgLworCQkvICAgLyAgICAgICAgICAgICAgIC8gICAgICAgICAgIC8KKwkgICAgICAgLyAgIC8gICBjLS0tYy0tLWMtLS1jIEIgICAgICAgICAvCisJICAgICAgLyAgIC8gICAvICAgICAgICAgICAgIFwgICAgICAgICAvCisJICAgICAvICAgLyAgIC8gICBiLS0tYiBDICAgICBcICAgICAgIC8KKwkgICAgLyAgIC8gICAvICAgLyAgICAgICAgICAgICBcICAgICAvCisgICAgLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8gIm1hc3RlciIKKworCitBLCBCIGFuZCBDIGFyZSB0b3BpYyBicmFuY2hlcy4KKworICogQSBoYXMgb25lIGZpeCBzaW5jZSBpdCB3YXMgbWVyZ2VkIHVwIHRvICJuZXh0Ii4KKworICogQiBoYXMgZmluaXNoZWQuICBJdCBoYXMgYmVlbiBmdWxseSBtZXJnZWQgdXAgdG8gIm1hc3RlciIgYW5kICJuZXh0IiwKKyAgIGFuZCBpcyByZWFkeSB0byBiZSBkZWxldGVkLgorCisgKiBDIGhhcyBub3QgbWVyZ2VkIHRvICJuZXh0IiBhdCBhbGwuCisKK1dlIHdvdWxkIHdhbnQgdG8gYWxsb3cgQyB0byBiZSByZWJhc2VkLCByZWZ1c2UgQSwgYW5kIGVuY291cmFnZQorQiB0byBiZSBkZWxldGVkLgorCitUbyBjb21wdXRlICgxKToKKworCWdpdCByZXYtbGlzdCBebWFzdGVyIF50b3BpYyBuZXh0CisJZ2l0IHJldi1saXN0IF5tYXN0ZXIgICAgICAgIG5leHQKKworCWlmIHRoZXNlIG1hdGNoLCB0b3BpYyBoYXMgbm90IG1lcmdlZCBpbiBuZXh0IGF0IGFsbC4KKworVG8gY29tcHV0ZSAoMik6CisKKwlnaXQgcmV2LWxpc3QgbWFzdGVyLi50b3BpYworCisJaWYgdGhpcyBpcyBlbXB0eSwgaXQgaXMgZnVsbHkgbWVyZ2VkIHRvICJtYXN0ZXIiLgpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmVwYXJlLWNvbW1pdC1tc2cuc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmVwYXJlLWNvbW1pdC1tc2cuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2YjhmMjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXByZXBhcmUtY29tbWl0LW1zZy5zYW1wbGUKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gcHJlcGFyZSB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLgorIyBDYWxsZWQgYnkgImdpdCBjb21taXQiIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBoYXMgdGhlCisjIGNvbW1pdCBtZXNzYWdlLCBmb2xsb3dlZCBieSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGNvbW1pdAorIyBtZXNzYWdlJ3Mgc291cmNlLiAgVGhlIGhvb2sncyBwdXJwb3NlIGlzIHRvIGVkaXQgdGhlIGNvbW1pdAorIyBtZXNzYWdlIGZpbGUuICBJZiB0aGUgaG9vayBmYWlscyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLAorIyB0aGUgY29tbWl0IGlzIGFib3J0ZWQuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gInByZXBhcmUtY29tbWl0LW1zZyIuCisKKyMgVGhpcyBob29rIGluY2x1ZGVzIHRocmVlIGV4YW1wbGVzLiAgVGhlIGZpcnN0IGNvbW1lbnRzIG91dCB0aGUKKyMgIkNvbmZsaWN0czoiIHBhcnQgb2YgYSBtZXJnZSBjb21taXQuCisjCisjIFRoZSBzZWNvbmQgaW5jbHVkZXMgdGhlIG91dHB1dCBvZiAiZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyAtciIKKyMgaW50byB0aGUgbWVzc2FnZSwganVzdCBiZWZvcmUgdGhlICJnaXQgc3RhdHVzIiBvdXRwdXQuICBJdCBpcworIyBjb21tZW50ZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGNvcGUgd2l0aCAtLWFtZW5kIG9yIHdpdGggc3F1YXNoZWQKKyMgY29tbWl0cy4KKyMKKyMgVGhlIHRoaXJkIGV4YW1wbGUgYWRkcyBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgbWVzc2FnZSwgdGhhdCBjYW4KKyMgc3RpbGwgYmUgZWRpdGVkLiAgVGhpcyBpcyByYXJlbHkgYSBnb29kIGlkZWEuCisKK2Nhc2UgIiQyLCQzIiBpbgorICBtZXJnZSwpCisgICAgQFBFUkxfUEFUSEAgLWkuYmFrIC1uZSAncy9eLyMgLywgcy9eIyAjLyMvIGlmIC9eQ29uZmxpY3RzLyAuLiAvIy87IHByaW50JyAiJDEiIDs7CisKKyMgLHx0ZW1wbGF0ZSwpCisjICAgQFBFUkxfUEFUSEAgLWkuYmFrIC1wZSAnCisjICAgICAgcHJpbnQgIlxuIiAuIGBnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIC1yYAorIwkgaWYgL14jLyAmJiAkZmlyc3QrKyA9PSAwJyAiJDEiIDs7CisKKyAgKikgOzsKK2VzYWMKKworIyBTT0I9JChnaXQgdmFyIEdJVF9BVVRIT1JfSURFTlQgfCBzZWQgLW4gJ3MvXlwoLio+XCkuKiQvU2lnbmVkLW9mZi1ieTogXDEvcCcpCisjIGdyZXAgLXFzICJeJFNPQiIgIiQxIiB8fCBlY2hvICIkU09CIiA+PiAiJDEiCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXVwZGF0ZS5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLXVwZGF0ZS5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzFhYjA0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tdXBkYXRlLnNhbXBsZQpAQCAtMCwwICsxLDEyOCBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gYmxvY2tzIHVuYW5ub3RhdGVkIHRhZ3MgZnJvbSBlbnRlcmluZy4KKyMgQ2FsbGVkIGJ5ICJnaXQgcmVjZWl2ZS1wYWNrIiB3aXRoIGFyZ3VtZW50czogcmVmbmFtZSBzaGExLW9sZCBzaGExLW5ldworIworIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJ1cGRhdGUiLgorIworIyBDb25maWcKKyMgLS0tLS0tCisjIGhvb2tzLmFsbG93dW5hbm5vdGF0ZWQKKyMgICBUaGlzIGJvb2xlYW4gc2V0cyB3aGV0aGVyIHVuYW5ub3RhdGVkIHRhZ3Mgd2lsbCBiZSBhbGxvd2VkIGludG8gdGhlCisjICAgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhleSB3b24ndCBiZS4KKyMgaG9va3MuYWxsb3dkZWxldGV0YWcKKyMgICBUaGlzIGJvb2xlYW4gc2V0cyB3aGV0aGVyIGRlbGV0aW5nIHRhZ3Mgd2lsbCBiZSBhbGxvd2VkIGluIHRoZQorIyAgIHJlcG9zaXRvcnkuICBCeSBkZWZhdWx0IHRoZXkgd29uJ3QgYmUuCisjIGhvb2tzLmFsbG93bW9kaWZ5dGFnCisjICAgVGhpcyBib29sZWFuIHNldHMgd2hldGhlciBhIHRhZyBtYXkgYmUgbW9kaWZpZWQgYWZ0ZXIgY3JlYXRpb24uIEJ5IGRlZmF1bHQKKyMgICBpdCB3b24ndCBiZS4KKyMgaG9va3MuYWxsb3dkZWxldGVicmFuY2gKKyMgICBUaGlzIGJvb2xlYW4gc2V0cyB3aGV0aGVyIGRlbGV0aW5nIGJyYW5jaGVzIHdpbGwgYmUgYWxsb3dlZCBpbiB0aGUKKyMgICByZXBvc2l0b3J5LiAgQnkgZGVmYXVsdCB0aGV5IHdvbid0IGJlLgorIyBob29rcy5kZW55Y3JlYXRlYnJhbmNoCisjICAgVGhpcyBib29sZWFuIHNldHMgd2hldGhlciByZW1vdGVseSBjcmVhdGluZyBicmFuY2hlcyB3aWxsIGJlIGRlbmllZAorIyAgIGluIHRoZSByZXBvc2l0b3J5LiAgQnkgZGVmYXVsdCB0aGlzIGlzIGFsbG93ZWQuCisjCisKKyMgLS0tIENvbW1hbmQgbGluZQorcmVmbmFtZT0iJDEiCitvbGRyZXY9IiQyIgorbmV3cmV2PSIkMyIKKworIyAtLS0gU2FmZXR5IGNoZWNrCitpZiBbIC16ICIkR0lUX0RJUiIgXTsgdGhlbgorCWVjaG8gIkRvbid0IHJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIiA+JjIKKwllY2hvICIgKGlmIHlvdSB3YW50LCB5b3UgY291bGQgc3VwcGx5IEdJVF9ESVIgdGhlbiBydW4iID4mMgorCWVjaG8gIiAgJDAgPHJlZj4gPG9sZHJldj4gPG5ld3Jldj4pIiA+JjIKKwlleGl0IDEKK2ZpCisKK2lmIFsgLXogIiRyZWZuYW1lIiAtbyAteiAiJG9sZHJldiIgLW8gLXogIiRuZXdyZXYiIF07IHRoZW4KKwllY2hvICJVc2FnZTogJDAgPHJlZj4gPG9sZHJldj4gPG5ld3Jldj4iID4mMgorCWV4aXQgMQorZmkKKworIyAtLS0gQ29uZmlnCithbGxvd3VuYW5ub3RhdGVkPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuYWxsb3d1bmFubm90YXRlZCkKK2FsbG93ZGVsZXRlYnJhbmNoPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuYWxsb3dkZWxldGVicmFuY2gpCitkZW55Y3JlYXRlYnJhbmNoPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuZGVueWNyZWF0ZWJyYW5jaCkKK2FsbG93ZGVsZXRldGFnPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuYWxsb3dkZWxldGV0YWcpCithbGxvd21vZGlmeXRhZz0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmFsbG93bW9kaWZ5dGFnKQorCisjIGNoZWNrIGZvciBubyBkZXNjcmlwdGlvbgorcHJvamVjdGRlc2M9JChzZWQgLWUgJzFxJyAiJEdJVF9ESVIvZGVzY3JpcHRpb24iKQorY2FzZSAiJHByb2plY3RkZXNjIiBpbgorIlVubmFtZWQgcmVwb3NpdG9yeSIqIHwgIiIpCisJZWNobyAiKioqIFByb2plY3QgZGVzY3JpcHRpb24gZmlsZSBoYXNuJ3QgYmVlbiBzZXQiID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKKyMgLS0tIENoZWNrIHR5cGVzCisjIGlmICRuZXdyZXYgaXMgMDAwMC4uLjAwMDAsIGl0J3MgYSBjb21taXQgdG8gZGVsZXRlIGEgcmVmLgoremVybz0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKK2lmIFsgIiRuZXdyZXYiID0gIiR6ZXJvIiBdOyB0aGVuCisJbmV3cmV2X3R5cGU9ZGVsZXRlCitlbHNlCisJbmV3cmV2X3R5cGU9JChnaXQgY2F0LWZpbGUgLXQgJG5ld3JldikKK2ZpCisKK2Nhc2UgIiRyZWZuYW1lIiwiJG5ld3Jldl90eXBlIiBpbgorCXJlZnMvdGFncy8qLGNvbW1pdCkKKwkJIyB1bi1hbm5vdGF0ZWQgdGFnCisJCXNob3J0X3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL3RhZ3MvfQorCQlpZiBbICIkYWxsb3d1bmFubm90YXRlZCIgIT0gInRydWUiIF07IHRoZW4KKwkJCWVjaG8gIioqKiBUaGUgdW4tYW5ub3RhdGVkIHRhZywgJHNob3J0X3JlZm5hbWUsIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeSIgPiYyCisJCQllY2hvICIqKiogVXNlICdnaXQgdGFnIFsgLWEgfCAtcyBdJyBmb3IgdGFncyB5b3Ugd2FudCB0byBwcm9wYWdhdGUuIiA+JjIKKwkJCWV4aXQgMQorCQlmaQorCQk7OworCXJlZnMvdGFncy8qLGRlbGV0ZSkKKwkJIyBkZWxldGUgdGFnCisJCWlmIFsgIiRhbGxvd2RlbGV0ZXRhZyIgIT0gInRydWUiIF07IHRoZW4KKwkJCWVjaG8gIioqKiBEZWxldGluZyBhIHRhZyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHJlcG9zaXRvcnkiID4mMgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJcmVmcy90YWdzLyosdGFnKQorCQkjIGFubm90YXRlZCB0YWcKKwkJaWYgWyAiJGFsbG93bW9kaWZ5dGFnIiAhPSAidHJ1ZSIgXSAmJiBnaXQgcmV2LXBhcnNlICRyZWZuYW1lID4gL2Rldi9udWxsIDI+JjEKKwkJdGhlbgorCQkJZWNobyAiKioqIFRhZyAnJHJlZm5hbWUnIGFscmVhZHkgZXhpc3RzLiIgPiYyCisJCQllY2hvICIqKiogTW9kaWZ5aW5nIGEgdGFnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeS4iID4mMgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJcmVmcy9oZWFkcy8qLGNvbW1pdCkKKwkJIyBicmFuY2gKKwkJaWYgWyAiJG9sZHJldiIgPSAiJHplcm8iIC1hICIkZGVueWNyZWF0ZWJyYW5jaCIgPSAidHJ1ZSIgXTsgdGhlbgorCQkJZWNobyAiKioqIENyZWF0aW5nIGEgYnJhbmNoIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeSIgPiYyCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwlyZWZzL2hlYWRzLyosZGVsZXRlKQorCQkjIGRlbGV0ZSBicmFuY2gKKwkJaWYgWyAiJGFsbG93ZGVsZXRlYnJhbmNoIiAhPSAidHJ1ZSIgXTsgdGhlbgorCQkJZWNobyAiKioqIERlbGV0aW5nIGEgYnJhbmNoIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeSIgPiYyCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwlyZWZzL3JlbW90ZXMvKixjb21taXQpCisJCSMgdHJhY2tpbmcgYnJhbmNoCisJCTs7CisJcmVmcy9yZW1vdGVzLyosZGVsZXRlKQorCQkjIGRlbGV0ZSB0cmFja2luZyBicmFuY2gKKwkJaWYgWyAiJGFsbG93ZGVsZXRlYnJhbmNoIiAhPSAidHJ1ZSIgXTsgdGhlbgorCQkJZWNobyAiKioqIERlbGV0aW5nIGEgdHJhY2tpbmcgYnJhbmNoIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeSIgPiYyCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwkqKQorCQkjIEFueXRoaW5nIGVsc2UgKGlzIHRoZXJlIGFueXRoaW5nIGVsc2U/KQorCQllY2hvICIqKiogVXBkYXRlIGhvb2s6IHVua25vd24gdHlwZSBvZiB1cGRhdGUgdG8gcmVmICRyZWZuYW1lIG9mIHR5cGUgJG5ld3Jldl90eXBlIiA+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKKyMgLS0tIEZpbmlzaGVkCitleGl0IDAKZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9pbmZvLS1leGNsdWRlIGIvdGVtcGxhdGVzL2luZm8tLWV4Y2x1ZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxOTZkMQotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9pbmZvLS1leGNsdWRlCkBAIC0wLDAgKzEsNiBAQAorIyBnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlLWZyb209LmdpdC9pbmZvL2V4Y2x1ZGUKKyMgTGluZXMgdGhhdCBzdGFydCB3aXRoICcjJyBhcmUgY29tbWVudHMuCisjIEZvciBhIHByb2plY3QgbW9zdGx5IGluIEMsIHRoZSBmb2xsb3dpbmcgd291bGQgYmUgYSBnb29kIHNldCBvZgorIyBleGNsdWRlIHBhdHRlcm5zICh1bmNvbW1lbnQgdGhlbSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlbSk6CisjICouW29hXQorIyAqfgpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL3RoaXMtLWRlc2NyaXB0aW9uIGIvdGVtcGxhdGVzL3RoaXMtLWRlc2NyaXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OGIyNjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvdGhpcy0tZGVzY3JpcHRpb24KQEAgLTAsMCArMSBAQAorVW5uYW1lZCByZXBvc2l0b3J5OyBlZGl0IHRoaXMgZmlsZSAnZGVzY3JpcHRpb24nIHRvIG5hbWUgdGhlIHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS90ZXN0LWNobXRpbWUuYyBiL3Rlc3QtY2htdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNzEzZDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LWNobXRpbWUuYwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBjYW4gZWl0aGVyIGNoYW5nZSBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgZ2l2ZW4KKyAqIGZpbGUocykgb3IganVzdCBwcmludCBpdC4gVGhlIHByb2dyYW0gZG9lcyBub3QgY2hhbmdlIGF0aW1lIG5vcgorICogY3RpbWUgKHRoZWlyIHZhbHVlcyBhcmUgZXhwbGljaXRseSBwcmVzZXJ2ZWQpLgorICoKKyAqIFRoZSBtdGltZSBjYW4gYmUgY2hhbmdlZCB0byBhbiBhYnNvbHV0ZSB2YWx1ZToKKyAqCisgKgl0ZXN0LWNobXRpbWUgPTxzZWNvbmRzPiBmaWxlLi4uCisgKgorICogUmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSB0aW1lKDMpOgorICoKKyAqCXRlc3QtY2htdGltZSA9KzxzZWNvbmRzPiAob3IgPS08c2Vjb25kcz4pIGZpbGUuLi4KKyAqCisgKiBPciByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBtdGltZSBvZiB0aGUgZmlsZToKKyAqCisgKgl0ZXN0LWNobXRpbWUgPHNlY29uZHM+IGZpbGUuLi4KKyAqCXRlc3QtY2htdGltZSArPHNlY29uZHM+IChvciAtPHNlY29uZHM+KSBmaWxlLi4uCisgKgorICogRXhhbXBsZXM6CisgKgorICogVG8ganVzdCBwcmludCB0aGUgbXRpbWUgdXNlIC0tdmVyYm9zZSBhbmQgc2V0IHRoZSBmaWxlIG10aW1lIG9mZnNldCB0byAwOgorICoKKyAqCXRlc3QtY2htdGltZSAtdiArMCBmaWxlCisgKgorICogVG8gc2V0IHRoZSBtdGltZSB0byBjdXJyZW50IHRpbWU6CisgKgorICoJdGVzdC1jaG10aW1lID0rMCBmaWxlCisgKgorICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSA8dXRpbWUuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2Vfc3RyW10gPSAiLXZ8LS12ZXJib3NlICgrfD18PSt8PS18LSk8c2Vjb25kcz4gPGZpbGU+Li4uIjsKKworc3RhdGljIGludCB0aW1lc3BlY19hcmcoY29uc3QgY2hhciAqYXJnLCBsb25nIGludCAqc2V0X3RpbWUsIGludCAqc2V0X2VxKQoreworCWNoYXIgKnRlc3Q7CisJY29uc3QgY2hhciAqdGltZXNwZWMgPSBhcmc7CisJKnNldF9lcSA9ICgqdGltZXNwZWMgPT0gJz0nKSA/IDEgOiAwOworCWlmICgqc2V0X2VxKSB7CisJCXRpbWVzcGVjKys7CisJCWlmICgqdGltZXNwZWMgPT0gJysnKSB7CisJCQkqc2V0X2VxID0gMjsgLyogcmVsYXRpdmUgImluIHRoZSBmdXR1cmUiICovCisJCQl0aW1lc3BlYysrOworCQl9CisJfQorCSpzZXRfdGltZSA9IHN0cnRvbCh0aW1lc3BlYywgJnRlc3QsIDEwKTsKKwlpZiAoKnRlc3QpIHsKKwkJZnByaW50ZihzdGRlcnIsICJOb3QgYSBiYXNlLTEwIGludGVnZXI6ICVzXG4iLCBhcmcgKyAxKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgoKnNldF9lcSAmJiAqc2V0X3RpbWUgPCAwKSB8fCAqc2V0X2VxID09IDIpIHsKKwkJdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7CisJCSpzZXRfdGltZSArPSBub3c7CisJfQorCXJldHVybiAxOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQoreworCXN0YXRpYyBpbnQgdmVyYm9zZTsKKworCWludCBpID0gMTsKKwkvKiBubyBtdGltZSBjaGFuZ2UgYnkgZGVmYXVsdCAqLworCWludCBzZXRfZXEgPSAwOworCWxvbmcgaW50IHNldF90aW1lID0gMDsKKworCWlmIChhcmdjIDwgMykKKwkJZ290byB1c2FnZTsKKworCWlmIChzdHJjbXAoYXJndltpXSwgIi0tdmVyYm9zZSIpID09IDAgfHwgc3RyY21wKGFyZ3ZbaV0sICItdiIpID09IDApIHsKKwkJdmVyYm9zZSA9IDE7CisJCSsraTsKKwl9CisJaWYgKHRpbWVzcGVjX2FyZyhhcmd2W2ldLCAmc2V0X3RpbWUsICZzZXRfZXEpKQorCQkrK2k7CisJZWxzZQorCQlnb3RvIHVzYWdlOworCisJZm9yICg7IGkgPCBhcmdjOyBpKyspIHsKKwkJc3RydWN0IHN0YXQgc2I7CisJCXN0cnVjdCB1dGltYnVmIHV0YjsKKworCQlpZiAoc3RhdChhcmd2W2ldLCAmc2IpIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc3RhdCAlczogJXNcbiIsCisJCQkgICAgICAgIGFyZ3ZbaV0sIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworI2lmZGVmIFdJTjMyCisJCWlmICghKHNiLnN0X21vZGUgJiBTX0lXVVNSKSAmJgorCQkJCWNobW9kKGFyZ3ZbaV0sIHNiLnN0X21vZGUgfCBTX0lXVVNSKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgbWFrZSB1c2VyLXdyaXRhYmxlICVzOiAlcyIsCisJCQkJYXJndltpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiAtMTsKKwkJfQorI2VuZGlmCisKKwkJdXRiLmFjdGltZSA9IHNiLnN0X2F0aW1lOworCQl1dGIubW9kdGltZSA9IHNldF9lcSA/IHNldF90aW1lIDogc2Iuc3RfbXRpbWUgKyBzZXRfdGltZTsKKworCQlpZiAodmVyYm9zZSkgeworCQkJdWludG1heF90IG10aW1lID0gdXRiLm1vZHRpbWUgPCAwID8gMDogdXRiLm1vZHRpbWU7CisJCQlwcmludGYoIiUiUFJJdU1BWCJcdCVzXG4iLCBtdGltZSwgYXJndltpXSk7CisJCX0KKworCQlpZiAodXRiLm1vZHRpbWUgIT0gc2Iuc3RfbXRpbWUgJiYgdXRpbWUoYXJndltpXSwgJnV0YikgPCAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBtb2RpZnkgdGltZSBvbiAlczogJXNcbiIsCisJCQkgICAgICAgIGFyZ3ZbaV0sIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKwordXNhZ2U6CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgJXNcbiIsIGFyZ3ZbMF0sIHVzYWdlX3N0cik7CisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1jdHlwZS5jIGIvdGVzdC1jdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwN2E4MjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LWN0eXBlLmMKQEAgLTAsMCArMSw0MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBpbnQgcmM7CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9lcnJvcihjb25zdCBjaGFyICpjbGFzcywgaW50IGNoKQoreworCXByaW50ZigiJXMgY2xhc3NpZmllcyBjaGFyICVkICgweCUwMngpIHdyb25nbHlcbiIsIGNsYXNzLCBjaCwgY2gpOworCXJjID0gMTsKK30KKworc3RhdGljIGludCBpc19pbihjb25zdCBjaGFyICpzLCBpbnQgY2gpCit7CisJLyogV2UgY2FuJ3QgZmluZCBOVUwgdXNpbmcgc3RyY2hyLiAgSXQncyBjbGFzc2xlc3MgYW55d2F5LiAqLworCWlmIChjaCA9PSAnXDAnKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gISFzdHJjaHIocywgY2gpOworfQorCisjZGVmaW5lIFRFU1RfQ0xBU1ModCxzKSB7CQkJXAorCWludCBpOwkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewkJXAorCQlpZiAoaXNfaW4ocywgaSkgIT0gdChpKSkJXAorCQkJcmVwb3J0X2Vycm9yKCN0LCBpKTsJXAorCX0JCQkJCVwKK30KKworI2RlZmluZSBESUdJVCAiMDEyMzQ1Njc4OSIKKyNkZWZpbmUgTE9XRVIgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorI2RlZmluZSBVUFBFUiAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlURVNUX0NMQVNTKGlzZGlnaXQsIERJR0lUKTsKKwlURVNUX0NMQVNTKGlzc3BhY2UsICIgXG5cclx0Iik7CisJVEVTVF9DTEFTUyhpc2FscGhhLCBMT1dFUiBVUFBFUik7CisJVEVTVF9DTEFTUyhpc2FsbnVtLCBMT1dFUiBVUFBFUiBESUdJVCk7CisJVEVTVF9DTEFTUyhpc19nbG9iX3NwZWNpYWwsICIqP1tcXCIpOworCVRFU1RfQ0xBU1MoaXNfcmVnZXhfc3BlY2lhbCwgIiQoKSorLj9bXFxee3wiKTsKKwlURVNUX0NMQVNTKGlzX3BhdGhzcGVjX21hZ2ljLCAiIVwiIyUmJywtLzo7PD0+QF9gfiIpOworCisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1kYXRlLmMgYi90ZXN0LWRhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGFmYWFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1kYXRlLmMKQEAgLTAsMCArMSw3MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9tc2cgPSAiXG4iCisiICB0ZXN0LWRhdGUgc2hvdyBbdGltZV90XS4uLlxuIgorIiAgdGVzdC1kYXRlIHBhcnNlIFtkYXRlXS4uLlxuIgorIiAgdGVzdC1kYXRlIGFwcHJveGlkYXRlIFtkYXRlXS4uLlxuIjsKKworc3RhdGljIHZvaWQgc2hvd19kYXRlcyhjaGFyICoqYXJndiwgc3RydWN0IHRpbWV2YWwgKm5vdykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZm9yICg7ICphcmd2OyBhcmd2KyspIHsKKwkJdGltZV90IHQgPSBhdG9pKCphcmd2KTsKKwkJc2hvd19kYXRlX3JlbGF0aXZlKHQsIDAsIG5vdywgJmJ1Zik7CisJCXByaW50ZigiJXMgLT4gJXNcbiIsICphcmd2LCBidWYuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2RhdGVzKGNoYXIgKiphcmd2LCBzdHJ1Y3QgdGltZXZhbCAqbm93KQoreworCWZvciAoOyAqYXJndjsgYXJndisrKSB7CisJCWNoYXIgcmVzdWx0WzEwMF07CisJCXVuc2lnbmVkIGxvbmcgdDsKKwkJaW50IHR6OworCisJCXJlc3VsdFswXSA9IDA7CisJCXBhcnNlX2RhdGUoKmFyZ3YsIHJlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpOworCQlpZiAoc3NjYW5mKHJlc3VsdCwgIiVsdSAlZCIsICZ0LCAmdHopID09IDIpCisJCQlwcmludGYoIiVzIC0+ICVzXG4iLAorCQkJICAgICAgICphcmd2LCBzaG93X2RhdGUodCwgdHosIERBVEVfSVNPODYwMSkpOworCQllbHNlCisJCQlwcmludGYoIiVzIC0+IGJhZFxuIiwgKmFyZ3YpOworCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfYXBwcm94aWRhdGUoY2hhciAqKmFyZ3YsIHN0cnVjdCB0aW1ldmFsICpub3cpCit7CisJZm9yICg7ICphcmd2OyBhcmd2KyspIHsKKwkJdGltZV90IHQ7CisJCXQgPSBhcHByb3hpZGF0ZV9yZWxhdGl2ZSgqYXJndiwgbm93KTsKKwkJcHJpbnRmKCIlcyAtPiAlc1xuIiwgKmFyZ3YsIHNob3dfZGF0ZSh0LCAwLCBEQVRFX0lTTzg2MDEpKTsKKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJY29uc3QgY2hhciAqeDsKKworCXggPSBnZXRlbnYoIlRFU1RfREFURV9OT1ciKTsKKwlpZiAoeCkgeworCQlub3cudHZfc2VjID0gYXRvaSh4KTsKKwkJbm93LnR2X3VzZWMgPSAwOworCX0KKwllbHNlCisJCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKworCWFyZ3YrKzsKKwlpZiAoISphcmd2KQorCQl1c2FnZSh1c2FnZV9tc2cpOworCWlmICghc3RyY21wKCphcmd2LCAic2hvdyIpKQorCQlzaG93X2RhdGVzKGFyZ3YrMSwgJm5vdyk7CisJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgInBhcnNlIikpCisJCXBhcnNlX2RhdGVzKGFyZ3YrMSwgJm5vdyk7CisJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgImFwcHJveGlkYXRlIikpCisJCXBhcnNlX2FwcHJveGlkYXRlKGFyZ3YrMSwgJm5vdyk7CisJZWxzZQorCQl1c2FnZSh1c2FnZV9tc2cpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1kZWx0YS5jIGIvdGVzdC1kZWx0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNDBhM2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LWRlbHRhLmMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIHRlc3QtZGVsdGEuYzogdGVzdCBjb2RlIHRvIGV4ZXJjaXNlIGRpZmYtZGVsdGEuYyBhbmQgcGF0Y2gtZGVsdGEuYworICoKKyAqIChDKSAyMDA1IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciB1c2FnZV9zdHJbXSA9CisJInRlc3QtZGVsdGEgKC1kfC1wKSA8ZnJvbV9maWxlPiA8ZGF0YV9maWxlPiA8b3V0X2ZpbGU+IjsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc3Q7CisJdm9pZCAqZnJvbV9idWYsICpkYXRhX2J1ZiwgKm91dF9idWY7CisJdW5zaWduZWQgbG9uZyBmcm9tX3NpemUsIGRhdGFfc2l6ZSwgb3V0X3NpemU7CisKKwlpZiAoYXJnYyAhPSA1IHx8IChzdHJjbXAoYXJndlsxXSwgIi1kIikgJiYgc3RyY21wKGFyZ3ZbMV0sICItcCIpKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlc1xuIiwgdXNhZ2Vfc3RyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZmQgPSBvcGVuKGFyZ3ZbMl0sIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwIHx8IGZzdGF0KGZkLCAmc3QpKSB7CisJCXBlcnJvcihhcmd2WzJdKTsKKwkJcmV0dXJuIDE7CisJfQorCWZyb21fc2l6ZSA9IHN0LnN0X3NpemU7CisJZnJvbV9idWYgPSBtbWFwKE5VTEwsIGZyb21fc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCWlmIChmcm9tX2J1ZiA9PSBNQVBfRkFJTEVEKSB7CisJCXBlcnJvcihhcmd2WzJdKTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMTsKKwl9CisJY2xvc2UoZmQpOworCisJZmQgPSBvcGVuKGFyZ3ZbM10sIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwIHx8IGZzdGF0KGZkLCAmc3QpKSB7CisJCXBlcnJvcihhcmd2WzNdKTsKKwkJcmV0dXJuIDE7CisJfQorCWRhdGFfc2l6ZSA9IHN0LnN0X3NpemU7CisJZGF0YV9idWYgPSBtbWFwKE5VTEwsIGRhdGFfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCWlmIChkYXRhX2J1ZiA9PSBNQVBfRkFJTEVEKSB7CisJCXBlcnJvcihhcmd2WzNdKTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMTsKKwl9CisJY2xvc2UoZmQpOworCisJaWYgKGFyZ3ZbMV1bMV0gPT0gJ2QnKQorCQlvdXRfYnVmID0gZGlmZl9kZWx0YShmcm9tX2J1ZiwgZnJvbV9zaXplLAorCQkJCSAgICAgZGF0YV9idWYsIGRhdGFfc2l6ZSwKKwkJCQkgICAgICZvdXRfc2l6ZSwgMCk7CisJZWxzZQorCQlvdXRfYnVmID0gcGF0Y2hfZGVsdGEoZnJvbV9idWYsIGZyb21fc2l6ZSwKKwkJCQkgICAgICBkYXRhX2J1ZiwgZGF0YV9zaXplLAorCQkJCSAgICAgICZvdXRfc2l6ZSk7CisJaWYgKCFvdXRfYnVmKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZGVsdGEgb3BlcmF0aW9uIGZhaWxlZCAocmV0dXJuZWQgTlVMTClcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmZCA9IG9wZW4gKGFyZ3ZbNF0sIE9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQywgMDY2Nik7CisJaWYgKGZkIDwgMCB8fCB3cml0ZV9pbl9mdWxsKGZkLCBvdXRfYnVmLCBvdXRfc2l6ZSkgIT0gb3V0X3NpemUpIHsKKwkJcGVycm9yKGFyZ3ZbNF0pOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtZHVtcC1jYWNoZS10cmVlLmMgYi90ZXN0LWR1bXAtY2FjaGUtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZmZkZjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LWR1bXAtY2FjaGUtdHJlZS5jCkBAIC0wLDAgKzEsNjQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisKKworc3RhdGljIHZvaWQgZHVtcF9vbmUoc3RydWN0IGNhY2hlX3RyZWUgKml0LCBjb25zdCBjaGFyICpwZngsIGNvbnN0IGNoYXIgKngpCit7CisJaWYgKGl0LT5lbnRyeV9jb3VudCA8IDApCisJCXByaW50ZigiJS00MHMgJXMlcyAoJWQgc3VidHJlZXMpXG4iLAorCQkgICAgICAgImludmFsaWQiLCB4LCBwZngsIGl0LT5zdWJ0cmVlX25yKTsKKwllbHNlCisJCXByaW50ZigiJXMgJXMlcyAoJWQgZW50cmllcywgJWQgc3VidHJlZXMpXG4iLAorCQkgICAgICAgc2hhMV90b19oZXgoaXQtPnNoYTEpLCB4LCBwZngsCisJCSAgICAgICBpdC0+ZW50cnlfY291bnQsIGl0LT5zdWJ0cmVlX25yKTsKK30KKworc3RhdGljIGludCBkdW1wX2NhY2hlX3RyZWUoc3RydWN0IGNhY2hlX3RyZWUgKml0LAorCQkJICAgc3RydWN0IGNhY2hlX3RyZWUgKnJlZiwKKwkJCSAgIGNvbnN0IGNoYXIgKnBmeCkKK3sKKwlpbnQgaTsKKwlpbnQgZXJycyA9IDA7CisKKwlpZiAoIWl0IHx8ICFyZWYpCisJCS8qIG1pc3NpbmcgaW4gZWl0aGVyICovCisJCXJldHVybiAwOworCisJaWYgKGl0LT5lbnRyeV9jb3VudCA8IDApIHsKKwkJZHVtcF9vbmUoaXQsIHBmeCwgIiIpOworCQlkdW1wX29uZShyZWYsIHBmeCwgIiMocmVmKSAiKTsKKwkJaWYgKGl0LT5zdWJ0cmVlX25yICE9IHJlZi0+c3VidHJlZV9ucikKKwkJCWVycnMgPSAxOworCX0KKwllbHNlIHsKKwkJZHVtcF9vbmUoaXQsIHBmeCwgIiIpOworCQlpZiAoaGFzaGNtcChpdC0+c2hhMSwgcmVmLT5zaGExKSB8fAorCQkgICAgcmVmLT5lbnRyeV9jb3VudCAhPSBpdC0+ZW50cnlfY291bnQgfHwKKwkJICAgIHJlZi0+c3VidHJlZV9uciAhPSBpdC0+c3VidHJlZV9ucikgeworCQkJZHVtcF9vbmUocmVmLCBwZngsICIjKHJlZikgIik7CisJCQllcnJzID0gMTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBpdC0+c3VidHJlZV9ucjsgaSsrKSB7CisJCWNoYXIgcGF0aFtQQVRIX01BWF07CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqZG93biA9IGl0LT5kb3duW2ldOworCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnJkd247CisKKwkJcmR3biA9IGNhY2hlX3RyZWVfc3ViKHJlZiwgZG93bi0+bmFtZSk7CisJCXNwcmludGYocGF0aCwgIiVzJS4qcy8iLCBwZngsIGRvd24tPm5hbWVsZW4sIGRvd24tPm5hbWUpOworCQlpZiAoZHVtcF9jYWNoZV90cmVlKGRvd24tPmNhY2hlX3RyZWUsIHJkd24tPmNhY2hlX3RyZWUsIHBhdGgpKQorCQkJZXJycyA9IDE7CisJfQorCXJldHVybiBlcnJzOworfQorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqYW5vdGhlciA9IGNhY2hlX3RyZWUoKTsKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIik7CisJY2FjaGVfdHJlZV91cGRhdGUoYW5vdGhlciwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIsIFdSSVRFX1RSRUVfRFJZX1JVTik7CisJcmV0dXJuIGR1bXBfY2FjaGVfdHJlZShhY3RpdmVfY2FjaGVfdHJlZSwgYW5vdGhlciwgIiIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1nZW5yYW5kb20uYyBiL3Rlc3QtZ2VucmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjMjhkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtZ2VucmFuZG9tLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIFNpbXBsZSByYW5kb20gZGF0YSBnZW5lcmF0b3IgdXNlZCB0byBjcmVhdGUgcmVwcm9kdWNpYmxlIHRlc3QgZmlsZXMuCisgKiBUaGlzIGlzIGluc3BpcmVkIGZyb20gUE9TSVguMS0yMDAxIGltcGxlbWVudGF0aW9uIGV4YW1wbGUgZm9yIHJhbmQoKS4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBOaWNvbGFzIFBpdHJlLCBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgbG9uZyBjb3VudCwgbmV4dCA9IDA7CisJdW5zaWduZWQgY2hhciAqYzsKKworCWlmIChhcmdjIDwgMiB8fCBhcmdjID4gMykgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyA8c2VlZF9zdHJpbmc+IFs8c2l6ZT5dXG4iLCBhcmd2WzBdKTsKKwkJcmV0dXJuIDE7CisJfQorCisJYyA9ICh1bnNpZ25lZCBjaGFyICopIGFyZ3ZbMV07CisJZG8geworCQluZXh0ID0gbmV4dCAqIDExICsgKmM7CisJfSB3aGlsZSAoKmMrKyk7CisKKwljb3VudCA9IChhcmdjID09IDMpID8gc3RydG91bChhcmd2WzJdLCBOVUxMLCAwKSA6IC0xTDsKKworCXdoaWxlIChjb3VudC0tKSB7CisJCW5leHQgPSBuZXh0ICogMTEwMzUxNTI0NSArIDEyMzQ1OworCQlpZiAocHV0Y2hhcigobmV4dCA+PiAxNikgJiAweGZmKSA9PSBFT0YpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0LWluZGV4LXZlcnNpb24uYyBiL3Rlc3QtaW5kZXgtdmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYWFkOWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LWluZGV4LXZlcnNpb24uYwpAQCAtMCwwICsxLDE0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjYWNoZV9oZWFkZXIgaGRyOworCWludCB2ZXJzaW9uOworCisJbWVtc2V0KCZoZHIsMCxzaXplb2YoaGRyKSk7CisJaWYgKHJlYWQoMCwgJmhkciwgc2l6ZW9mKGhkcikpICE9IHNpemVvZihoZHIpKQorCQlyZXR1cm4gMDsKKwl2ZXJzaW9uID0gbnRvaGwoaGRyLmhkcl92ZXJzaW9uKTsKKwlwcmludGYoIiVkXG4iLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtbGluZS1idWZmZXIuYyBiL3Rlc3QtbGluZS1idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjFkN2JhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1saW5lLWJ1ZmZlci5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiB0ZXN0LWxpbmUtYnVmZmVyLmM6IGNvZGUgdG8gZXhlcmNpc2UgdGhlIHN2biBpbXBvcnRlcidzIGlucHV0IGhlbHBlcgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ2Y3Mtc3ZuL2xpbmVfYnVmZmVyLmgiCisKK3N0YXRpYyB1aW50MzJfdCBzdHJ0b3VpbnQzMihjb25zdCBjaGFyICpzKQoreworCWNoYXIgKmVuZDsKKwl1aW50bWF4X3QgbiA9IHN0cnRvdW1heChzLCAmZW5kLCAxMCk7CisJaWYgKCpzID09ICdcMCcgfHwgKmVuZCAhPSAnXDAnKQorCQlkaWUoImludmFsaWQgY291bnQ6ICVzIiwgcyk7CisJcmV0dXJuICh1aW50MzJfdCkgbjsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NvbW1hbmQoY29uc3QgY2hhciAqY29tbWFuZCwgY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZikKK3sKKwlzd2l0Y2ggKCpjb21tYW5kKSB7CisJY2FzZSAnYic6CisJCWlmICghcHJlZml4Y21wKGNvbW1hbmQsICJiaW5hcnkgIikpIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRjaCgmc2IsICc+Jyk7CisJCQlidWZmZXJfcmVhZF9iaW5hcnkoYnVmLCAmc2IsIHN0cnRvdWludDMyKGFyZykpOworCQkJZndyaXRlKHNiLmJ1ZiwgMSwgc2IubGVuLCBzdGRvdXQpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJCXJldHVybjsKKwkJfQorCWNhc2UgJ2MnOgorCQlpZiAoIXByZWZpeGNtcChjb21tYW5kLCAiY29weSAiKSkgeworCQkJYnVmZmVyX2NvcHlfYnl0ZXMoYnVmLCBzdHJ0b3VpbnQzMihhcmcpKTsKKwkJCXJldHVybjsKKwkJfQorCWNhc2UgJ3MnOgorCQlpZiAoIXByZWZpeGNtcChjb21tYW5kLCAic2tpcCAiKSkgeworCQkJYnVmZmVyX3NraXBfYnl0ZXMoYnVmLCBzdHJ0b3VpbnQzMihhcmcpKTsKKwkJCXJldHVybjsKKwkJfQorCWRlZmF1bHQ6CisJCWRpZSgidW5yZWNvZ25pemVkIGNvbW1hbmQ6ICVzIiwgY29tbWFuZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbGluZShjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgbGluZV9idWZmZXIgKnN0ZGluX2J1ZikKK3sKKwljb25zdCBjaGFyICphcmcgPSBzdHJjaHIobGluZSwgJyAnKTsKKwlpZiAoIWFyZykKKwkJZGllKCJubyBhcmd1bWVudCBpbiBsaW5lOiAlcyIsIGxpbmUpOworCWhhbmRsZV9jb21tYW5kKGxpbmUsIGFyZyArIDEsIHN0ZGluX2J1Zik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IGxpbmVfYnVmZmVyIHN0ZGluX2J1ZiA9IExJTkVfQlVGRkVSX0lOSVQ7CisJc3RydWN0IGxpbmVfYnVmZmVyIGZpbGVfYnVmID0gTElORV9CVUZGRVJfSU5JVDsKKwlzdHJ1Y3QgbGluZV9idWZmZXIgKmlucHV0ID0gJnN0ZGluX2J1ZjsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwljaGFyICpzOworCisJaWYgKGFyZ2MgPT0gMSkKKwkJZmlsZW5hbWUgPSBOVUxMOworCWVsc2UgaWYgKGFyZ2MgPT0gMikKKwkJZmlsZW5hbWUgPSBhcmd2WzFdOworCWVsc2UKKwkJdXNhZ2UoInRlc3QtbGluZS1idWZmZXIgW2ZpbGUgfCAmZmRdIDwgc2NyaXB0Iik7CisKKwlpZiAoYnVmZmVyX2luaXQoJnN0ZGluX2J1ZiwgTlVMTCkpCisJCWRpZV9lcnJubygib3BlbiBlcnJvciIpOworCWlmIChmaWxlbmFtZSkgeworCQlpZiAoKmZpbGVuYW1lID09ICcmJykgeworCQkJaWYgKGJ1ZmZlcl9mZGluaXQoJmZpbGVfYnVmLCBzdHJ0b3VpbnQzMihmaWxlbmFtZSArIDEpKSkKKwkJCQlkaWVfZXJybm8oImVycm9yIG9wZW5pbmcgZmQgJXMiLCBmaWxlbmFtZSArIDEpOworCQl9IGVsc2UgeworCQkJaWYgKGJ1ZmZlcl9pbml0KCZmaWxlX2J1ZiwgZmlsZW5hbWUpKQorCQkJCWRpZV9lcnJubygiZXJyb3Igb3BlbmluZyAlcyIsIGZpbGVuYW1lKTsKKwkJfQorCQlpbnB1dCA9ICZmaWxlX2J1ZjsKKwl9CisKKwl3aGlsZSAoKHMgPSBidWZmZXJfcmVhZF9saW5lKCZzdGRpbl9idWYpKSkKKwkJaGFuZGxlX2xpbmUocywgaW5wdXQpOworCisJaWYgKGZpbGVuYW1lICYmIGJ1ZmZlcl9kZWluaXQoJmZpbGVfYnVmKSkKKwkJZGllKCJlcnJvciByZWFkaW5nIGZyb20gJXMiLCBmaWxlbmFtZSk7CisJaWYgKGJ1ZmZlcl9kZWluaXQoJnN0ZGluX2J1ZikpCisJCWRpZSgiaW5wdXQgZXJyb3IiKTsKKwlpZiAoZmVycm9yKHN0ZG91dCkpCisJCWRpZSgib3V0cHV0IGVycm9yIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0LW1hdGNoLXRyZWVzLmMgYi90ZXN0LW1hdGNoLXRyZWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjNDY4OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtbWF0Y2gtdHJlZXMuYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoreworCXVuc2lnbmVkIGNoYXIgaGFzaDFbMjBdLCBoYXNoMlsyMF0sIHNoaWZ0ZWRbMjBdOworCXN0cnVjdCB0cmVlICpvbmUsICp0d287CisKKwlpZiAoZ2V0X3NoYTEoYXZbMV0sIGhhc2gxKSkKKwkJZGllKCJjYW5ub3QgcGFyc2UgJXMgYXMgYW4gb2JqZWN0IG5hbWUiLCBhdlsxXSk7CisJaWYgKGdldF9zaGExKGF2WzJdLCBoYXNoMikpCisJCWRpZSgiY2Fubm90IHBhcnNlICVzIGFzIGFuIG9iamVjdCBuYW1lIiwgYXZbMl0pOworCW9uZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoaGFzaDEpOworCWlmICghb25lKQorCQlkaWUoIm5vdCBhIHRyZWVpc2ggJXMiLCBhdlsxXSk7CisJdHdvID0gcGFyc2VfdHJlZV9pbmRpcmVjdChoYXNoMik7CisJaWYgKCF0d28pCisJCWRpZSgibm90IGEgdHJlZWlzaCAlcyIsIGF2WzJdKTsKKworCXNoaWZ0X3RyZWUob25lLT5vYmplY3Quc2hhMSwgdHdvLT5vYmplY3Quc2hhMSwgc2hpZnRlZCwgLTEpOworCXByaW50Zigic2hpZnRlZDogJXNcbiIsIHNoYTFfdG9faGV4KHNoaWZ0ZWQpKTsKKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0LW1lcmdlc29ydC5jIGIvdGVzdC1tZXJnZXNvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjM4OGI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1tZXJnZXNvcnQuYwpAQCAtMCwwICsxLDUyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKworc3RydWN0IGxpbmUgeworCWNoYXIgKnRleHQ7CisJc3RydWN0IGxpbmUgKm5leHQ7Cit9OworCitzdGF0aWMgdm9pZCAqZ2V0X25leHQoY29uc3Qgdm9pZCAqYSkKK3sKKwlyZXR1cm4gKChjb25zdCBzdHJ1Y3QgbGluZSAqKWEpLT5uZXh0OworfQorCitzdGF0aWMgdm9pZCBzZXRfbmV4dCh2b2lkICphLCB2b2lkICpiKQoreworCSgoc3RydWN0IGxpbmUgKilhKS0+bmV4dCA9IGI7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9zdHJpbmdzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGxpbmUgKnggPSBhLCAqeSA9IGI7CisJcmV0dXJuIHN0cmNtcCh4LT50ZXh0LCB5LT50ZXh0KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBsaW5lICpsaW5lLCAqcCA9IE5VTEwsICpsaW5lcyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZm9yICg7OykgeworCQlpZiAoc3RyYnVmX2dldHdob2xlbGluZSgmc2IsIHN0ZGluLCAnXG4nKSkKKwkJCWJyZWFrOworCQlsaW5lID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGxpbmUpKTsKKwkJbGluZS0+dGV4dCA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJaWYgKHApIHsKKwkJCWxpbmUtPm5leHQgPSBwLT5uZXh0OworCQkJcC0+bmV4dCA9IGxpbmU7CisJCX0gZWxzZSB7CisJCQlsaW5lLT5uZXh0ID0gTlVMTDsKKwkJCWxpbmVzID0gbGluZTsKKwkJfQorCQlwID0gbGluZTsKKwl9CisKKwlsaW5lcyA9IGxsaXN0X21lcmdlc29ydChsaW5lcywgZ2V0X25leHQsIHNldF9uZXh0LCBjb21wYXJlX3N0cmluZ3MpOworCisJd2hpbGUgKGxpbmVzKSB7CisJCXByaW50ZigiJXMiLCBsaW5lcy0+dGV4dCk7CisJCWxpbmVzID0gbGluZXMtPm5leHQ7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1ta3RlbXAuYyBiL3Rlc3QtbWt0ZW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjNTQyMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtbWt0ZW1wLmMKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIHRlc3QtbWt0ZW1wLmM6IGNvZGUgdG8gZXhlcmNpc2UgdGhlIGNyZWF0aW9uIG9mIHRlbXBvcmFyeSBmaWxlcworICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2UoIkV4cGVjdGVkIDEgcGFyYW1ldGVyIGRlZmluaW5nIHRoZSB0ZW1wb3JhcnkgZmlsZSB0ZW1wbGF0ZSIpOworCisJeG1rc3RlbXAoeHN0cmR1cChhcmd2WzFdKSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtcGFyc2Utb3B0aW9ucy5jIGIvdGVzdC1wYXJzZS1vcHRpb25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5NTEwYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCkBAIC0wLDAgKzEsMTAzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RhdGljIGludCBib29sZWFuID0gMDsKK3N0YXRpYyBpbnQgaW50ZWdlciA9IDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CitzdGF0aWMgaW50IGFiYnJldiA9IDc7CitzdGF0aWMgaW50IHZlcmJvc2UgPSAwLCBkcnlfcnVuID0gMCwgcXVpZXQgPSAwOworc3RhdGljIGNoYXIgKnN0cmluZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqZmlsZSA9IE5VTEw7CitzdGF0aWMgaW50IGFtYmlndW91czsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdDsKKworc3RhdGljIGludCBsZW5ndGhfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlwcmludGYoIkNhbGxiYWNrOiBcIiVzXCIsICVkXG4iLAorCQkoYXJnID8gYXJnIDogIm5vdCBzZXQiKSwgdW5zZXQpOworCWlmICh1bnNldCkKKwkJcmV0dXJuIDE7IC8qIGRvIG5vdCBzdXBwb3J0IHVuc2V0ICovCisKKwkqKGludCAqKW9wdC0+dmFsdWUgPSBzdHJsZW4oYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudW1iZXJfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwkqKGludCAqKW9wdC0+dmFsdWUgPSBzdHJ0b2woYXJnLCBOVUxMLCAxMCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpwcmVmaXggPSAicHJlZml4LyI7CisJY29uc3QgY2hhciAqdXNhZ2VbXSA9IHsKKwkJInRlc3QtcGFyc2Utb3B0aW9ucyA8b3B0aW9ucz4iLAorCQlOVUxMCisJfTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgInllcyIsICZib29sZWFuLCAiZ2V0IGEgYm9vbGVhbiIpLAorCQlPUFRfQk9PTCgnRCcsICJuby1kb3VidCIsICZib29sZWFuLCAiYmVnaW5zIHdpdGggJ25vLSciKSwKKwkJeyBPUFRJT05fU0VUX0lOVCwgJ0InLCAibm8tZmVhciIsICZib29sZWFuLCBOVUxMLAorCQkgICJiZSBicmF2ZSIsIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgMSB9LAorCQlPUFRfQ09VTlRVUCgnYicsICJib29sZWFuIiwgJmJvb2xlYW4sICJpbmNyZW1lbnQgYnkgb25lIiksCisJCU9QVF9CSVQoJzQnLCAib3I0IiwgJmJvb2xlYW4sCisJCQkiYml0d2lzZS1vciBib29sZWFuIHdpdGggLi4uMDEwMCIsIDQpLAorCQlPUFRfTkVHQklUKDAsICJuZWctb3I0IiwgJmJvb2xlYW4sICJzYW1lIGFzIC0tbm8tb3I0IiwgNCksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9JTlRFR0VSKCdpJywgImludGVnZXIiLCAmaW50ZWdlciwgImdldCBhIGludGVnZXIiKSwKKwkJT1BUX0lOVEVHRVIoJ2onLCBOVUxMLCAmaW50ZWdlciwgImdldCBhIGludGVnZXIsIHRvbyIpLAorCQlPUFRfU0VUX0lOVCgwLCAic2V0MjMiLCAmaW50ZWdlciwgInNldCBpbnRlZ2VyIHRvIDIzIiwgMjMpLAorCQlPUFRfREFURSgndCcsIE5VTEwsICZ0aW1lc3RhbXAsICJnZXQgdGltZXN0YW1wIG9mIDx0aW1lPiIpLAorCQlPUFRfQ0FMTEJBQ0soJ0wnLCAibGVuZ3RoIiwgJmludGVnZXIsICJzdHIiLAorCQkJImdldCBsZW5ndGggb2YgPHN0cj4iLCBsZW5ndGhfY2FsbGJhY2spLAorCQlPUFRfRklMRU5BTUUoJ0YnLCAiZmlsZSIsICZmaWxlLCAic2V0IGZpbGUgdG8gPGZpbGU+IiksCisJCU9QVF9HUk9VUCgiU3RyaW5nIG9wdGlvbnMiKSwKKwkJT1BUX1NUUklORygncycsICJzdHJpbmciLCAmc3RyaW5nLCAic3RyaW5nIiwgImdldCBhIHN0cmluZyIpLAorCQlPUFRfU1RSSU5HKDAsICJzdHJpbmcyIiwgJnN0cmluZywgInN0ciIsICJnZXQgYW5vdGhlciBzdHJpbmciKSwKKwkJT1BUX1NUUklORygwLCAic3QiLCAmc3RyaW5nLCAic3QiLCAiZ2V0IGFub3RoZXIgc3RyaW5nIChwZXJ2ZXJ0IG9yZGVyaW5nKSIpLAorCQlPUFRfU1RSSU5HKCdvJywgTlVMTCwgJnN0cmluZywgInN0ciIsICJnZXQgYW5vdGhlciBzdHJpbmciKSwKKwkJT1BUX05PT1BfTk9BUkcoMCwgIm9ic29sZXRlIiksCisJCU9QVF9TRVRfUFRSKDAsICJkZWZhdWx0LXN0cmluZyIsICZzdHJpbmcsCisJCQkic2V0IHN0cmluZyB0byBkZWZhdWx0IiwgKHVuc2lnbmVkIGxvbmcpImRlZmF1bHQiKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJsaXN0IiwgJmxpc3QsICJzdHIiLCAiYWRkIHN0ciB0byBsaXN0IiksCisJCU9QVF9HUk9VUCgiTWFnaWMgYXJndW1lbnRzIiksCisJCU9QVF9BUkdVTUVOVCgicXV1eCIsICJtZWFucyAtLXF1dXgiKSwKKwkJT1BUX05VTUJFUl9DQUxMQkFDSygmaW50ZWdlciwgInNldCBpbnRlZ2VyIHRvIE5VTSIsCisJCQludW1iZXJfY2FsbGJhY2spLAorCQl7IE9QVElPTl9DT1VOVFVQLCAnKycsIE5VTEwsICZib29sZWFuLCBOVUxMLCAic2FtZSBhcyAtYiIsCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PREFTSCB9LAorCQl7IE9QVElPTl9DT1VOVFVQLCAwLCAiYW1iaWd1b3VzIiwgJmFtYmlndW91cywgTlVMTCwKKwkJICAicG9zaXRpdmUgYW1iaWd1aXR5IiwgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIH0sCisJCXsgT1BUSU9OX0NPVU5UVVAsIDAsICJuby1hbWJpZ3VvdXMiLCAmYW1iaWd1b3VzLCBOVUxMLAorCQkgICJuZWdhdGl2ZSBhbWJpZ3VpdHkiLCBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfSwKKwkJT1BUX0dST1VQKCJTdGFuZGFyZCBvcHRpb25zIiksCisJCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsICJiZSB2ZXJib3NlIiksCisJCU9QVF9fRFJZX1JVTigmZHJ5X3J1biwgImRyeSBydW4iKSwKKwkJT1BUX19RVUlFVCgmcXVpZXQsICJiZSBxdWlldCIpLAorCQlPUFRfRU5EKCksCisJfTsKKwlpbnQgaTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgdXNhZ2UsIDApOworCisJcHJpbnRmKCJib29sZWFuOiAlZFxuIiwgYm9vbGVhbik7CisJcHJpbnRmKCJpbnRlZ2VyOiAldVxuIiwgaW50ZWdlcik7CisJcHJpbnRmKCJ0aW1lc3RhbXA6ICVsdVxuIiwgdGltZXN0YW1wKTsKKwlwcmludGYoInN0cmluZzogJXNcbiIsIHN0cmluZyA/IHN0cmluZyA6ICIobm90IHNldCkiKTsKKwlwcmludGYoImFiYnJldjogJWRcbiIsIGFiYnJldik7CisJcHJpbnRmKCJ2ZXJib3NlOiAlZFxuIiwgdmVyYm9zZSk7CisJcHJpbnRmKCJxdWlldDogJXNcbiIsIHF1aWV0ID8gInllcyIgOiAibm8iKTsKKwlwcmludGYoImRyeSBydW46ICVzXG4iLCBkcnlfcnVuID8gInllcyIgOiAibm8iKTsKKwlwcmludGYoImZpbGU6ICVzXG4iLCBmaWxlID8gZmlsZSA6ICIobm90IHNldCkiKTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspCisJCXByaW50ZigibGlzdDogJXNcbiIsIGxpc3QuaXRlbXNbaV0uc3RyaW5nKTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCXByaW50ZigiYXJnICUwMmQ6ICVzXG4iLCBpLCBhcmd2W2ldKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1wYXRoLXV0aWxzLmMgYi90ZXN0LXBhdGgtdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmMyMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1wYXRoLXV0aWxzLmMKQEAgLTAsMCArMSw2MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgIm5vcm1hbGl6ZV9wYXRoX2NvcHkiKSkgeworCQljaGFyICpidWYgPSB4bWFsbG9jKFBBVEhfTUFYICsgMSk7CisJCWludCBydiA9IG5vcm1hbGl6ZV9wYXRoX2NvcHkoYnVmLCBhcmd2WzJdKTsKKwkJaWYgKHJ2KQorCQkJYnVmID0gIisrZmFpbGVkKysiOworCQlwdXRzKGJ1Zik7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID49IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAicmVhbF9wYXRoIikpIHsKKwkJd2hpbGUgKGFyZ2MgPiAyKSB7CisJCQlwdXRzKHJlYWxfcGF0aChhcmd2WzJdKSk7CisJCQlhcmdjLS07CisJCQlhcmd2Kys7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJhYnNvbHV0ZV9wYXRoIikpIHsKKwkJd2hpbGUgKGFyZ2MgPiAyKSB7CisJCQlwdXRzKGFic29sdXRlX3BhdGgoYXJndlsyXSkpOworCQkJYXJnYy0tOworCQkJYXJndisrOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAibG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGgiKSkgeworCQlpbnQgbGVuID0gbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGgoYXJndlsyXSwgYXJndlszXSk7CisJCXByaW50ZigiJWRcbiIsIGxlbik7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID49IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAicHJlZml4X3BhdGgiKSkgeworCQljaGFyICpwcmVmaXggPSBhcmd2WzJdOworCQlpbnQgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOworCQlpbnQgbm9uZ2l0X29rOworCQlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0X29rKTsKKwkJd2hpbGUgKGFyZ2MgPiAzKSB7CisJCQlwdXRzKHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbiwgYXJndlszXSkpOworCQkJYXJnYy0tOworCQkJYXJndisrOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAic3RyaXBfcGF0aF9zdWZmaXgiKSkgeworCQljaGFyICpwcmVmaXggPSBzdHJpcF9wYXRoX3N1ZmZpeChhcmd2WzJdLCBhcmd2WzNdKTsKKwkJcHJpbnRmKCIlc1xuIiwgcHJlZml4ID8gcHJlZml4IDogIihudWxsKSIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmtub3duIGZ1bmN0aW9uIG5hbWU6ICVzXG4iLCBhcmd2WzBdLAorCQlhcmd2WzFdID8gYXJndlsxXSA6ICIodGhlcmUgd2FzIG5vbmUpIik7CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXJlZ2V4LmMgYi90ZXN0LXJlZ2V4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViZmQ1NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtcmVnZXguYwpAQCAtMCwwICsxLDIwIEBACisjaW5jbHVkZSA8Z2l0LWNvbXBhdC11dGlsLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyICpwYXQgPSAiW149e30gXHRdKyI7CisJY2hhciAqc3RyID0gIj17fVxuZnJlZCI7CisJcmVnZXhfdCByOworCXJlZ21hdGNoX3QgbVsxXTsKKworCWlmIChyZWdjb21wKCZyLCBwYXQsIFJFR19FWFRFTkRFRCB8IFJFR19ORVdMSU5FKSkKKwkJZGllKCJmYWlsZWQgcmVnY29tcCgpIGZvciBwYXR0ZXJuICclcyciLCBwYXQpOworCWlmIChyZWdleGVjKCZyLCBzdHIsIDEsIG0sIDApKQorCQlkaWUoIm5vIG1hdGNoIG9mIHBhdHRlcm4gJyVzJyB0byBzdHJpbmcgJyVzJyIsIHBhdCwgc3RyKTsKKworCS8qIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9Mzk1NyAgKi8KKwlpZiAobVswXS5ybV9zbyA9PSAzKSAvKiBtYXRjaGVzICdcbicgd2hlbiBpdCBzaG91bGQgbm90ICovCisJCWRpZSgicmVnZXggYnVnIGNvbmZpcm1lZDogcmUtYnVpbGQgZ2l0IHdpdGggTk9fUkVHRVg9MSIpOworCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtcmV2aXNpb24td2Fsa2luZy5jIGIvdGVzdC1yZXZpc2lvbi13YWxraW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkZTAyYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtcmV2aXNpb24td2Fsa2luZy5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiB0ZXN0LXJldmlzaW9uLXdhbGtpbmcuYzogdGVzdCByZXZpc2lvbiB3YWxraW5nIEFQSS4KKyAqCisgKiAoQykgMjAxMiBIZWlrbyBWb2lndCA8aHZvaWd0QGh2b2lndC5uZXQ+CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKworc3RhdGljIHZvaWQgcHJpbnRfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwljdHguZGF0ZV9tb2RlID0gREFURV9OT1JNQUw7CisJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiAlbSAlcyIsICZzYiwgJmN0eCk7CisJcHJpbnRmKCIlc1xuIiwgc2IuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgaW50IHJ1bl9yZXZpc2lvbl93YWxrKHZvaWQpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJY29uc3QgY2hhciAqYXJndltdID0ge05VTEwsICItLWFsbCIsIE5VTEx9OworCWludCBhcmdjID0gQVJSQVlfU0laRShhcmd2KSAtIDE7CisJaW50IGdvdF9yZXZpc2lvbiA9IDA7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwlzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCk7CisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2KSkKKwkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldikpICE9IE5VTEwpIHsKKwkJcHJpbnRfY29tbWl0KGNvbW1pdCk7CisJCWdvdF9yZXZpc2lvbiA9IDE7CisJfQorCisJcmVzZXRfcmV2aXNpb25fd2FsaygpOworCXJldHVybiBnb3RfcmV2aXNpb247Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoYXJnYyA8IDIpCisJCXJldHVybiAxOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgInJ1bi10d2ljZSIpKSB7CisJCXByaW50ZigiMXN0XG4iKTsKKwkJaWYgKCFydW5fcmV2aXNpb25fd2FsaygpKQorCQkJcmV0dXJuIDE7CisJCXByaW50ZigiMm5kXG4iKTsKKwkJaWYgKCFydW5fcmV2aXNpb25fd2FsaygpKQorCQkJcmV0dXJuIDE7CisKKwkJcmV0dXJuIDA7CisJfQorCisJZnByaW50ZihzdGRlcnIsICJjaGVjayB1c2FnZVxuIik7CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXJ1bi1jb21tYW5kLmMgYi90ZXN0LXJ1bi1jb21tYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5MThlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtcnVuLWNvbW1hbmQuYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogdGVzdC1ydW4tY29tbWFuZC5jOiB0ZXN0IHJ1biBjb21tYW5kIEFQSS4KKyAqCisgKiAoQykgMjAwOSBJbGFyaSBMaXVzdmFhcmEgPGlsYXJpLmxpdXN2YWFyYUBlbGlzYW5ldC5maT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jOworCisJbWVtc2V0KCZwcm9jLCAwLCBzaXplb2YocHJvYykpOworCisJaWYgKGFyZ2MgPCAzKQorCQlyZXR1cm4gMTsKKwlwcm9jLmFyZ3YgPSAoY29uc3QgY2hhciAqKilhcmd2KzI7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAic3RhcnQtY29tbWFuZC1FTk9FTlQiKSkgeworCQlpZiAoc3RhcnRfY29tbWFuZCgmcHJvYykgPCAwICYmIGVycm5vID09IEVOT0VOVCkKKwkJCXJldHVybiAwOworCQlmcHJpbnRmKHN0ZGVyciwgIkZBSUwgJXNcbiIsIGFyZ3ZbMV0pOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCFzdHJjbXAoYXJndlsxXSwgInJ1bi1jb21tYW5kIikpCisJCWV4aXQocnVuX2NvbW1hbmQoJnByb2MpKTsKKworCWZwcmludGYoc3RkZXJyLCAiY2hlY2sgdXNhZ2VcbiIpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1zY3JhcC1jYWNoZS10cmVlLmMgYi90ZXN0LXNjcmFwLWNhY2hlLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzI4MDEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1zY3JhcC1jYWNoZS10cmVlLmMKQEAgLTAsMCArMSwxNyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsKKworaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCit7CisJaW50IGZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDEpOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiKTsKKwlhY3RpdmVfY2FjaGVfdHJlZSA9IE5VTEw7CisJaWYgKHdyaXRlX2NhY2hlKGZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikKKwkgICAgfHwgY29tbWl0X2xvY2tfZmlsZSgmaW5kZXhfbG9jaykpCisJCWRpZSgidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3Qtc2hhMS5jIGIvdGVzdC1zaGExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkYWJhOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qtc2hhMS5jCkBAIC0wLDAgKzEsNDcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlnaXRfU0hBX0NUWCBjdHg7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBidWZzeiA9IDgxOTI7CisJY2hhciAqYnVmZmVyOworCisJaWYgKGFjID09IDIpCisJCWJ1ZnN6ID0gc3RydG91bChhdlsxXSwgTlVMTCwgMTApICogMTAyNCAqIDEwMjQ7CisKKwlpZiAoIWJ1ZnN6KQorCQlidWZzeiA9IDgxOTI7CisKKwl3aGlsZSAoKGJ1ZmZlciA9IG1hbGxvYyhidWZzeikpID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJidWZzeiAldSBpcyB0b28gYmlnLCBoYWx2aW5nLi4uXG4iLCBidWZzeik7CisJCWJ1ZnN6IC89IDI7CisJCWlmIChidWZzeiA8IDEwMjQpCisJCQlkaWUoIk9PUFMiKTsKKwl9CisKKwlnaXRfU0hBMV9Jbml0KCZjdHgpOworCisJd2hpbGUgKDEpIHsKKwkJc3NpemVfdCBzeiwgdGhpc19zejsKKwkJY2hhciAqY3AgPSBidWZmZXI7CisJCXVuc2lnbmVkIHJvb20gPSBidWZzejsKKwkJdGhpc19zeiA9IDA7CisJCXdoaWxlIChyb29tKSB7CisJCQlzeiA9IHhyZWFkKDAsIGNwLCByb29tKTsKKwkJCWlmIChzeiA9PSAwKQorCQkJCWJyZWFrOworCQkJaWYgKHN6IDwgMCkKKwkJCQlkaWVfZXJybm8oInRlc3Qtc2hhMSIpOworCQkJdGhpc19zeiArPSBzejsKKwkJCWNwICs9IHN6OworCQkJcm9vbSAtPSBzejsKKwkJfQorCQlpZiAodGhpc19zeiA9PSAwKQorCQkJYnJlYWs7CisJCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBidWZmZXIsIHRoaXNfc3opOworCX0KKwlnaXRfU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKKwlwdXRzKHNoYTFfdG9faGV4KHNoYTEpKTsKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1zaGExLnNoIGIvdGVzdC1zaGExLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmMGJjNWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LXNoYTEuc2gKQEAgLTAsMCArMSw4MyBAQAorIyEvYmluL3NoCisKK2RkIGlmPS9kZXYvemVybyBicz0xMDQ4NTc2IGNvdW50PTEwMCAyPi9kZXYvbnVsbCB8CisvdXNyL2Jpbi90aW1lIC4vdGVzdC1zaGExID4vZGV2L251bGwKKword2hpbGUgcmVhZCBleHBlY3QgY250IHBmeAorZG8KKwljYXNlICIkZXhwZWN0IiBpbiAnIycqKSBjb250aW51ZSA7OyBlc2FjCisJYWN0dWFsPWAKKwkJeworCQkJdGVzdCAteiAiJHBmeCIgfHwgZWNobyAiJHBmeCIKKwkJCWRkIGlmPS9kZXYvemVybyBicz0xMDQ4NTc2IGNvdW50PSRjbnQgMj4vZGV2L251bGwgfAorCQkJcGVybCAtcGUgJ3kvXDAwMC9nLycKKwkJfSB8IC4vdGVzdC1zaGExICRjbnQKKwlgCisJaWYgdGVzdCAiJGV4cGVjdCIgPSAiJGFjdHVhbCIKKwl0aGVuCisJCWVjaG8gIk9LOiAkZXhwZWN0ICRjbnQgJHBmeCIKKwllbHNlCisJCWVjaG8gPiYyICJPT1BTOiAkY250IgorCQllY2hvID4mMiAiZXhwZWN0OiAkZXhwZWN0IgorCQllY2hvID4mMiAiYWN0dWFsOiAkYWN0dWFsIgorCQlleGl0IDEKKwlmaQorZG9uZSA8PEVPRgorZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOSAwCiszZjc4Njg1MGUzODc1NTBmZGFiODM2ZWQ3ZTZkYzg4MWRlMjMwMDFiIDAgYQorNTI3N2NiYjQ1YTE1OTAyMTM3ZDMzMmQ5N2U4OWNmODEzNjU0NTQ4NSAwIGFiCiswM2NmZDc0MzY2MWYwNzk3NWZhMmYxMjIwYzUxOTRjYmFmZjQ4NDUxIDAgYWJjCiszMzMwYjQzNzM2NDBmOWU0NjA0OTkxZTczYzdlODZiZmQ4ZGEyZGMzIDAgYWJjZAorZWMxMTMxMjM4NmFkNTYxNjc0ZjcyNGI4Y2NhN2NmMTc5NmUyNmQxZCAwIGFiY2RlCitiZGMzN2MwNzRlYzRlZTYwNTBkNjhiYzEzM2M2YjkxMmYzNjQ3NGRmIDAgYWJjZGVmCis2OWJjYTk5YjkyMzg1OWYyZGM0ODZiNTViODdmNDk2ODliNzM1OGM3IDAgYWJjZGVmZworZTQxNGFmNzE2MWM5NTU0MDg5ZjQxMDZkNmYxNzk3ZWYxNGE3MzY2NiAwIGFiY2RlZmdoCiswNzA3ZjI5NzAwNDNmOWY3YzIyMDI5NDgyZGIyNzczM2RlYWVjMDI5IDAgYWJjZGVmZ2hpCithNGRkOGFhNzRhNTYzNjcyOGZlNTI0NTE2MzZlMmUxNzcyNjAzM2FhIDEKKzk5ODZiNDVlMmY0ZDcwODYzNzI1MzNiYjY5NTNhODY1MmZhMzY0NGEgMSBmcm90egorMjNkOGQ0Zjc4OGU4NTI2YjQ4Nzc1NDhhMzI1Nzc1NDNjYmFhZjUxZiAxMAorOGNkMjNmODIyYWI0NGM3ZjQ4MWI4YzkyZDU5MWY2ZDFmY2FkNDMxYyAxMCBmcm90egorZjNiNTYwNGE0ZTYwNDg5OWMxMjMzZWRiM2JmMWNjMGVkZTRkOGMzMiA1MTIKK2IwOTViZDgzN2EzNzE1OTMwNDgxMzZlNDI5ZTlhYzRiNDc2ZTFiYjMgNTEyIGZyb3R6CiswOGZhODFkNjE5MDk0OGRlNWNjY2EzOTY2MzQwY2M0OGMxMGNjZWFjIDEyMDAgeHl6enkKK2UzM2EyOTFmNDJjMzBhMTU5NzMzZGQ5OGI4YjNlNGZmMzQxNThjYTAgNDA5MCA0RworI2EzYmY3ODNiYzIwY2FhOTU4ZjZjYjI0ZGQxNDBhN2IyMTk4NDgzOGQgOTk5OSBuaXRmb2wKK0VPRgorCitleGl0CisKKyMgZ2VuZXJhdGluZyB0ZXN0IHZlY3RvcnMKKyMgaW5wdXRzIGFyZSBudW1iZXIgb2YgbWVnYWJ5dGVzIGZvbGxvd2VkIGJ5IHNvbWUgcmFuZG9tIHN0cmluZyB0byBwcmVmaXguCisKK3doaWxlIHJlYWQgY250IHBmeAorZG8KKwlhY3R1YWw9YAorCQl7CisJCQl0ZXN0IC16ICIkcGZ4IiB8fCBlY2hvICIkcGZ4IgorCQkJZGQgaWY9L2Rldi96ZXJvIGJzPTEwNDg1NzYgY291bnQ9JGNudCAyPi9kZXYvbnVsbCB8CisJCQlwZXJsIC1wZSAneS9cMDAwL2cvJworCQl9IHwgc2hhMXN1bSB8CisJCXNlZCAtZSAncy8gLiovLycKKwlgCisJZWNobyAiJGFjdHVhbCAkY250ICRwZngiCitkb25lIDw8RU9GCiswCiswIGEKKzAgYWIKKzAgYWJjCiswIGFiY2QKKzAgYWJjZGUKKzAgYWJjZGVmCiswIGFiY2RlZmcKKzAgYWJjZGVmZ2gKKzAgYWJjZGVmZ2hpCisxCisxIGZyb3R6CisxMAorMTAgZnJvdHoKKzUxMgorNTEyIGZyb3R6CisxMjAwIHh5enp5Cis0MDkwIDRHCis5OTk5IG5pdGZvbAorRU9GCmRpZmYgLS1naXQgYS90ZXN0LXNpZ2NoYWluLmMgYi90ZXN0LXNpZ2NoYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkYjIzNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qtc2lnY2hhaW4uYwpAQCAtMCwwICsxLDIyIEBACisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjZGVmaW5lIFgoZikgXAorc3RhdGljIHZvaWQgZihpbnQgc2lnKSB7IFwKKwlwdXRzKCNmKTsgXAorCWZmbHVzaChzdGRvdXQpOyBcCisJc2lnY2hhaW5fcG9wKHNpZyk7IFwKKwlyYWlzZShzaWcpOyBcCit9CitYKG9uZSkKK1godHdvKQorWCh0aHJlZSkKKyN1bmRlZiBYCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworCXNpZ2NoYWluX3B1c2goU0lHVEVSTSwgb25lKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1RFUk0sIHR3byk7CisJc2lnY2hhaW5fcHVzaChTSUdURVJNLCB0aHJlZSk7CisJcmFpc2UoU0lHVEVSTSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXN0cmluZy1saXN0LmMgYi90ZXN0LXN0cmluZy1saXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5MzI5NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qtc3RyaW5nLWxpc3QuYwpAQCAtMCwwICsxLDEyMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyoKKyAqIFBhcnNlIGFuIGFyZ3VtZW50IGludG8gYSBzdHJpbmcgbGlzdC4gIGFyZyBzaG91bGQgZWl0aGVyIGJlIGEKKyAqICc6Jy1zZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmdzLCBvciAiLSIgdG8gaW5kaWNhdGUgYW4gZW1wdHkgc3RyaW5nCisgKiBsaXN0IChhcyBvcHBvc2VkIHRvICIiLCB3aGljaCBpbmRpY2F0ZXMgYSBzdHJpbmcgbGlzdCBjb250YWluaW5nIGEKKyAqIHNpbmdsZSBlbXB0eSBzdHJpbmcpLiAgbGlzdC0+c3RyZHVwX3N0cmluZ3MgbXVzdCBiZSBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIHBhcnNlX3N0cmluZ19saXN0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqYXJnKQoreworCWlmICghc3RyY21wKGFyZywgIi0iKSkKKwkJcmV0dXJuOworCisJKHZvaWQpc3RyaW5nX2xpc3Rfc3BsaXQobGlzdCwgYXJnLCAnOicsIC0xKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfbGlzdChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspCisJCXByaW50ZigiWyVkXTogXCIlc1wiXG4iLCBpLCBsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9saXN0X2NvbXBhY3QoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWludCBpOworCWlmICghbGlzdC0+bnIpCisJCXByaW50ZigiLVxuIik7CisJZWxzZSB7CisJCXByaW50ZigiJXMiLCBsaXN0LT5pdGVtc1swXS5zdHJpbmcpOworCQlmb3IgKGkgPSAxOyBpIDwgbGlzdC0+bnI7IGkrKykKKwkJCXByaW50ZigiOiVzIiwgbGlzdC0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJcHJpbnRmKCJcbiIpOworCX0KK30KKworc3RhdGljIGludCBwcmVmaXhfY2Ioc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJY29uc3QgY2hhciAqcHJlZml4ID0gKGNvbnN0IGNoYXIgKiljYl9kYXRhOworCXJldHVybiAhcHJlZml4Y21wKGl0ZW0tPnN0cmluZywgcHJlZml4KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjID09IDUgJiYgIXN0cmNtcChhcmd2WzFdLCAic3BsaXQiKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQlpbnQgaTsKKwkJY29uc3QgY2hhciAqcyA9IGFyZ3ZbMl07CisJCWludCBkZWxpbSA9ICphcmd2WzNdOworCQlpbnQgbWF4c3BsaXQgPSBhdG9pKGFyZ3ZbNF0pOworCisJCWkgPSBzdHJpbmdfbGlzdF9zcGxpdCgmbGlzdCwgcywgZGVsaW0sIG1heHNwbGl0KTsKKwkJcHJpbnRmKCIlZFxuIiwgaSk7CisJCXdyaXRlX2xpc3QoJmxpc3QpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDUgJiYgIXN0cmNtcChhcmd2WzFdLCAic3BsaXRfaW5fcGxhY2UiKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJCWludCBpOworCQljaGFyICpzID0geHN0cmR1cChhcmd2WzJdKTsKKwkJaW50IGRlbGltID0gKmFyZ3ZbM107CisJCWludCBtYXhzcGxpdCA9IGF0b2koYXJndls0XSk7CisKKwkJaSA9IHN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKCZsaXN0LCBzLCBkZWxpbSwgbWF4c3BsaXQpOworCQlwcmludGYoIiVkXG4iLCBpKTsKKwkJd3JpdGVfbGlzdCgmbGlzdCk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwkJZnJlZShzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gNCAmJiAhc3RyY21wKGFyZ3ZbMV0sICJmaWx0ZXIiKSkgeworCQkvKgorCQkgKiBSZXRhaW4gb25seSB0aGUgaXRlbXMgdGhhdCBoYXZlIHRoZSBzcGVjaWZpZWQgcHJlZml4LgorCQkgKiBBcmd1bWVudHM6IGxpc3R8LSBwcmVmaXgKKwkJICovCisJCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCWNvbnN0IGNoYXIgKnByZWZpeCA9IGFyZ3ZbM107CisKKwkJcGFyc2Vfc3RyaW5nX2xpc3QoJmxpc3QsIGFyZ3ZbMl0pOworCQlmaWx0ZXJfc3RyaW5nX2xpc3QoJmxpc3QsIDAsIHByZWZpeF9jYiwgKHZvaWQgKilwcmVmaXgpOworCQl3cml0ZV9saXN0X2NvbXBhY3QoJmxpc3QpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAicmVtb3ZlX2R1cGxpY2F0ZXMiKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJCXBhcnNlX3N0cmluZ19saXN0KCZsaXN0LCBhcmd2WzJdKTsKKwkJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoJmxpc3QsIDApOworCQl3cml0ZV9saXN0X2NvbXBhY3QoJmxpc3QpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAibG9uZ2VzdF9wcmVmaXgiKSkgeworCQkvKiBhcmd1bWVudHM6IDxjb2xvbi1zZXBhcmF0ZWQtcHJlZml4ZXM+fC0gPHN0cmluZz4gKi8KKwkJc3RydWN0IHN0cmluZ19saXN0IHByZWZpeGVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCWludCByZXR2YWw7CisJCWNvbnN0IGNoYXIgKnByZWZpeF9zdHJpbmcgPSBhcmd2WzJdOworCQljb25zdCBjaGFyICpzdHJpbmcgPSBhcmd2WzNdOworCQljb25zdCBjaGFyICptYXRjaDsKKworCQlwYXJzZV9zdHJpbmdfbGlzdCgmcHJlZml4ZXMsIHByZWZpeF9zdHJpbmcpOworCQltYXRjaCA9IHN0cmluZ19saXN0X2xvbmdlc3RfcHJlZml4KCZwcmVmaXhlcywgc3RyaW5nKTsKKwkJaWYgKG1hdGNoKSB7CisJCQlwcmludGYoIiVzXG4iLCBtYXRjaCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWVsc2UKKwkJCXJldHZhbCA9IDE7CisJCXN0cmluZ19saXN0X2NsZWFyKCZwcmVmaXhlcywgMCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZnByaW50ZihzdGRlcnIsICIlczogdW5rbm93biBmdW5jdGlvbiBuYW1lOiAlc1xuIiwgYXJndlswXSwKKwkJYXJndlsxXSA/IGFyZ3ZbMV0gOiAiKHRoZXJlIHdhcyBub25lKSIpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1zdWJwcm9jZXNzLmMgYi90ZXN0LXN1YnByb2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmQ0YzBkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1zdWJwcm9jZXNzLmMKQEAgLTAsMCArMSwyMCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwOworCWludCBub2dpdCA9IDA7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9naXQpOworCWlmIChub2dpdCkKKwkJZGllKCJObyBnaXQgcmVwbyBmb3VuZCIpOworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLXNldHVwLXdvcmstdHJlZSIpKSB7CisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlhcmd2Kys7CisJfQorCW1lbXNldCgmY3AsIDAsIHNpemVvZihjcCkpOworCWNwLmdpdF9jbWQgPSAxOworCWNwLmFyZ3YgPSBhcmd2ICsgMTsKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJmNwKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3Qtc3ZuLWZlLmMgYi90ZXN0LXN2bi1mZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNjMzYTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LXN2bi1mZS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiB0ZXN0LXN2bi1mZTogQ29kZSB0byBleGVyY2lzZSB0aGUgc3ZuIGltcG9ydCBsaWIKKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidmNzLXN2bi9zdm5kdW1wLmgiCisjaW5jbHVkZSAidmNzLXN2bi9zdm5kaWZmLmgiCisjaW5jbHVkZSAidmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5oIgorI2luY2x1ZGUgInZjcy1zdm4vbGluZV9idWZmZXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdGVzdF9zdm5mZV91c2FnZVtdID0KKwkidGVzdC1zdm4tZmUgKDxkdW1wZmlsZT4gfCBbLWRdIDxwcmVpbWFnZT4gPGRlbHRhPiA8bGVuPikiOworCitzdGF0aWMgaW50IGFwcGx5X2RlbHRhKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IGxpbmVfYnVmZmVyIHByZWltYWdlID0gTElORV9CVUZGRVJfSU5JVDsKKwlzdHJ1Y3QgbGluZV9idWZmZXIgZGVsdGEgPSBMSU5FX0JVRkZFUl9JTklUOworCXN0cnVjdCBzbGlkaW5nX3ZpZXcgcHJlaW1hZ2VfdmlldyA9IFNMSURJTkdfVklFV19JTklUKCZwcmVpbWFnZSwgLTEpOworCisJaWYgKGFyZ2MgIT0gNSkKKwkJdXNhZ2UodGVzdF9zdm5mZV91c2FnZSk7CisKKwlpZiAoYnVmZmVyX2luaXQoJnByZWltYWdlLCBhcmd2WzJdKSkKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBwcmVpbWFnZSIpOworCWlmIChidWZmZXJfaW5pdCgmZGVsdGEsIGFyZ3ZbM10pKQorCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuIGRlbHRhIik7CisJaWYgKHN2bmRpZmYwX2FwcGx5KCZkZWx0YSwgKG9mZl90KSBzdHJ0b3VsbChhcmd2WzRdLCBOVUxMLCAwKSwKKwkJCQkJJnByZWltYWdlX3ZpZXcsIHN0ZG91dCkpCisJCXJldHVybiAxOworCWlmIChidWZmZXJfZGVpbml0KCZwcmVpbWFnZSkpCisJCWRpZV9lcnJubygiY2Fubm90IGNsb3NlIHByZWltYWdlIik7CisJaWYgKGJ1ZmZlcl9kZWluaXQoJmRlbHRhKSkKKwkJZGllX2Vycm5vKCJjYW5ub3QgY2xvc2UgZGVsdGEiKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJlaW1hZ2Vfdmlldy5idWYpOworCXJldHVybiAwOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWlmIChhcmdjID09IDIpIHsKKwkJaWYgKHN2bmR1bXBfaW5pdChhcmd2WzFdKSkKKwkJCXJldHVybiAxOworCQlzdm5kdW1wX3JlYWQoTlVMTCk7CisJCXN2bmR1bXBfZGVpbml0KCk7CisJCXN2bmR1bXBfcmVzZXQoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItZCIpKQorCQlyZXR1cm4gYXBwbHlfZGVsdGEoYXJnYywgYXJndik7CisJdXNhZ2UodGVzdF9zdm5mZV91c2FnZSk7Cit9CmRpZmYgLS1naXQgYS90aHJlYWQtdXRpbHMuYyBiL3RocmVhZC11dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNGI3NmEKLS0tIC9kZXYvbnVsbAorKysgYi90aHJlYWQtdXRpbHMuYwpAQCAtMCwwICsxLDYxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKworI2lmIGRlZmluZWQoaHB1eCkgfHwgZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoX2hwdXgpCisjICBpbmNsdWRlIDxzeXMvcHN0YXQuaD4KKyNlbmRpZgorCisvKgorICogQnkgZG9pbmcgdGhpcyBpbiB0d28gc3RlcHMgd2UgY2FuIGF0IGxlYXN0IGdldAorICogdGhlIGZ1bmN0aW9uIHRvIGJlIHNvbWV3aGF0IGNvaGVyZW50LCBldmVuCisgKiB3aXRoIHRoaXMgZGlzZ3VzdGluZyBuZXN0IG9mICNpZmRlZnMuCisgKi8KKyNpZm5kZWYgX1NDX05QUk9DRVNTT1JTX09OTE4KKyMgIGlmZGVmIF9TQ19OUFJPQ19PTkxOCisjICAgIGRlZmluZSBfU0NfTlBST0NFU1NPUlNfT05MTiBfU0NfTlBST0NfT05MTgorIyAgZWxpZiBkZWZpbmVkIF9TQ19DUkFZX05DUFUKKyMgICAgZGVmaW5lIF9TQ19OUFJPQ0VTU09SU19PTkxOIF9TQ19DUkFZX05DUFUKKyMgIGVuZGlmCisjZW5kaWYKKworaW50IG9ubGluZV9jcHVzKHZvaWQpCit7CisjaWZkZWYgX1NDX05QUk9DRVNTT1JTX09OTE4KKwlsb25nIG5jcHVzOworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKwlTWVNURU1fSU5GTyBpbmZvOworCUdldFN5c3RlbUluZm8oJmluZm8pOworCisJaWYgKChpbnQpaW5mby5kd051bWJlck9mUHJvY2Vzc29ycyA+IDApCisJCXJldHVybiAoaW50KWluZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnM7CisjZWxpZiBkZWZpbmVkKGhwdXgpIHx8IGRlZmluZWQoX19ocHV4KSB8fCBkZWZpbmVkKF9ocHV4KQorCXN0cnVjdCBwc3RfZHluYW1pYyBwc2Q7CisKKwlpZiAoIXBzdGF0X2dldGR5bmFtaWMoJnBzZCwgc2l6ZW9mKHBzZCksIChzaXplX3QpMSwgMCkpCisJCXJldHVybiAoaW50KXBzZC5wc2RfcHJvY19jbnQ7CisjZW5kaWYKKworI2lmZGVmIF9TQ19OUFJPQ0VTU09SU19PTkxOCisJaWYgKChuY3B1cyA9IChsb25nKXN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pKSA+IDApCisJCXJldHVybiAoaW50KW5jcHVzOworI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KKworaW50IGluaXRfcmVjdXJzaXZlX211dGV4KHB0aHJlYWRfbXV0ZXhfdCAqbSkKK3sKKwlwdGhyZWFkX211dGV4YXR0cl90IGE7CisJaW50IHJldDsKKworCXJldCA9IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmEpOworCWlmICghcmV0KSB7CisJCXJldCA9IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmEsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBwdGhyZWFkX211dGV4X2luaXQobSwgJmEpOworCQlwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZhKTsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3RocmVhZC11dGlscy5oIGIvdGhyZWFkLXV0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiOThjMwotLS0gL2Rldi9udWxsCisrKyBiL3RocmVhZC11dGlscy5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgVEhSRUFEX0NPTVBBVF9ICisjZGVmaW5lIFRIUkVBRF9DT01QQVRfSAorCisjaWZuZGVmIE5PX1BUSFJFQURTCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCitleHRlcm4gaW50IG9ubGluZV9jcHVzKHZvaWQpOworZXh0ZXJuIGludCBpbml0X3JlY3Vyc2l2ZV9tdXRleChwdGhyZWFkX211dGV4X3QqKTsKKworI2VuZGlmCisjZW5kaWYgLyogVEhSRUFEX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS90cmFjZS5jIGIvdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWMwZTNiCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIE1pY2hhZWwgUi4gRWxraW5zIDxtZUBtdXR0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0IE9zd2FsZCBCdWRkZW5oYWdlbiA8b3NzaUB1c2Vycy5zZi5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWtlIE1jQ29ybWFjaworICogQ29weXJpZ2h0IChDKSAyMDA2IENocmlzdGlhbiBDb3VkZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCisvKiBHZXQgYSB0cmFjZSBmaWxlIGRlc2NyaXB0b3IgZnJvbSAia2V5IiBlbnYgdmFyaWFibGUuICovCitzdGF0aWMgaW50IGdldF90cmFjZV9mZChjb25zdCBjaGFyICprZXksIGludCAqbmVlZF9jbG9zZSkKK3sKKwljaGFyICp0cmFjZSA9IGdldGVudihrZXkpOworCisJaWYgKCF0cmFjZSB8fCAhc3RyY21wKHRyYWNlLCAiIikgfHwKKwkgICAgIXN0cmNtcCh0cmFjZSwgIjAiKSB8fCAhc3RyY2FzZWNtcCh0cmFjZSwgImZhbHNlIikpCisJCXJldHVybiAwOworCWlmICghc3RyY21wKHRyYWNlLCAiMSIpIHx8ICFzdHJjYXNlY21wKHRyYWNlLCAidHJ1ZSIpKQorCQlyZXR1cm4gU1RERVJSX0ZJTEVOTzsKKwlpZiAoc3RybGVuKHRyYWNlKSA9PSAxICYmIGlzZGlnaXQoKnRyYWNlKSkKKwkJcmV0dXJuIGF0b2kodHJhY2UpOworCWlmIChpc19hYnNvbHV0ZV9wYXRoKHRyYWNlKSkgeworCQlpbnQgZmQgPSBvcGVuKHRyYWNlLCBPX1dST05MWSB8IE9fQVBQRU5EIHwgT19DUkVBVCwgMDY2Nik7CisJCWlmIChmZCA9PSAtMSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHRyYWNpbmc6ICVzXG4iCisJCQkJIkRlZmF1bHRpbmcgdG8gdHJhY2luZyBvbiBzdGRlcnIuLi5cbiIsCisJCQkJdHJhY2UsIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gU1RERVJSX0ZJTEVOTzsKKwkJfQorCQkqbmVlZF9jbG9zZSA9IDE7CisJCXJldHVybiBmZDsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgIldoYXQgZG9lcyAnJXMnIGZvciAlcyBtZWFuP1xuIiwgdHJhY2UsIGtleSk7CisJZnByaW50ZihzdGRlcnIsICJJZiB5b3Ugd2FudCB0byB0cmFjZSBpbnRvIGEgZmlsZSwgIgorCQkidGhlbiBwbGVhc2Ugc2V0ICVzIHRvIGFuIGFic29sdXRlIHBhdGhuYW1lICIKKwkJIihzdGFydGluZyB3aXRoIC8pLlxuIiwga2V5KTsKKwlmcHJpbnRmKHN0ZGVyciwgIkRlZmF1bHRpbmcgdG8gdHJhY2luZyBvbiBzdGRlcnIuLi5cbiIpOworCisJcmV0dXJuIFNUREVSUl9GSUxFTk87Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGVycl9tc2dbXSA9ICJDb3VsZCBub3QgdHJhY2UgaW50byBmZCBnaXZlbiBieSAiCisJIkdJVF9UUkFDRSBlbnZpcm9ubWVudCB2YXJpYWJsZSI7CisKK3N0YXRpYyB2b2lkIHRyYWNlX3ZwcmludGYoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghdHJhY2Vfd2FudChrZXkpKQorCQlyZXR1cm47CisKKwlzZXRfdHJ5X3RvX2ZyZWVfcm91dGluZShOVUxMKTsJLyogaXMgbmV2ZXIgcmVzZXQgKi8KKwlzdHJidWZfdmFkZGYoJmJ1ZiwgZm10LCBhcCk7CisJdHJhY2Vfc3RyYnVmKGtleSwgJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNlX3ByaW50Zl9rZXkoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXRyYWNlX3ZwcmludGYoa2V5LCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHRyYWNlX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXRyYWNlX3ZwcmludGYoIkdJVF9UUkFDRSIsIGZtdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgdHJhY2Vfc3RyYnVmKGNvbnN0IGNoYXIgKmtleSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWludCBmZCwgbmVlZF9jbG9zZSA9IDA7CisKKwlmZCA9IGdldF90cmFjZV9mZChrZXksICZuZWVkX2Nsb3NlKTsKKwlpZiAoIWZkKQorCQlyZXR1cm47CisKKwl3cml0ZV9vcl93aGluZV9waXBlKGZkLCBidWYtPmJ1ZiwgYnVmLT5sZW4sIGVycl9tc2cpOworCisJaWYgKG5lZWRfY2xvc2UpCisJCWNsb3NlKGZkKTsKK30KKwordm9pZCB0cmFjZV9hcmd2X3ByaW50Zihjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IGFwOworCWludCBmZCwgbmVlZF9jbG9zZSA9IDA7CisKKwlmZCA9IGdldF90cmFjZV9mZCgiR0lUX1RSQUNFIiwgJm5lZWRfY2xvc2UpOworCWlmICghZmQpCisJCXJldHVybjsKKworCXNldF90cnlfdG9fZnJlZV9yb3V0aW5lKE5VTEwpOwkvKiBpcyBuZXZlciByZXNldCAqLworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmYnVmLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJc3FfcXVvdGVfYXJndigmYnVmLCBhcmd2LCAwKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJd3JpdGVfb3Jfd2hpbmVfcGlwZShmZCwgYnVmLmJ1ZiwgYnVmLmxlbiwgZXJyX21zZyk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAobmVlZF9jbG9zZSkKKwkJY2xvc2UoZmQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcXVvdGVfY3JubChjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBjaGFyIG5ld19wYXRoW1BBVEhfTUFYXTsKKwljb25zdCBjaGFyICpwMiA9IHBhdGg7CisJY2hhciAqcDEgPSBuZXdfcGF0aDsKKworCWlmICghcGF0aCkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAoKnAyKSB7CisJCXN3aXRjaCAoKnAyKSB7CisJCWNhc2UgJ1xcJzogKnAxKysgPSAnXFwnOyAqcDErKyA9ICdcXCc7IGJyZWFrOworCQljYXNlICdcbic6ICpwMSsrID0gJ1xcJzsgKnAxKysgPSAnbic7IGJyZWFrOworCQljYXNlICdccic6ICpwMSsrID0gJ1xcJzsgKnAxKysgPSAncic7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJKnAxKysgPSAqcDI7CisJCX0KKwkJcDIrKzsKKwl9CisJKnAxID0gJ1wwJzsKKwlyZXR1cm4gbmV3X3BhdGg7Cit9CisKKy8qIEZJWE1FOiBtb3ZlIHByZWZpeCB0byBzdGFydHVwX2luZm8gc3RydWN0IGFuZCBnZXQgcmlkIG9mIHRoaXMgYXJnICovCit2b2lkIHRyYWNlX3JlcG9fc2V0dXAoY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0YXRpYyBjb25zdCBjaGFyICprZXkgPSAiR0lUX1RSQUNFX1NFVFVQIjsKKwljb25zdCBjaGFyICpnaXRfd29ya190cmVlOworCWNoYXIgY3dkW1BBVEhfTUFYXTsKKworCWlmICghdHJhY2Vfd2FudChrZXkpKQorCQlyZXR1cm47CisKKwlpZiAoIWdldGN3ZChjd2QsIFBBVEhfTUFYKSkKKwkJZGllKCJVbmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKworCWlmICghKGdpdF93b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpKSkKKwkJZ2l0X3dvcmtfdHJlZSA9ICIobnVsbCkiOworCisJaWYgKCFwcmVmaXgpCisJCXByZWZpeCA9ICIobnVsbCkiOworCisJdHJhY2VfcHJpbnRmX2tleShrZXksICJzZXR1cDogZ2l0X2RpcjogJXNcbiIsIHF1b3RlX2NybmwoZ2V0X2dpdF9kaXIoKSkpOworCXRyYWNlX3ByaW50Zl9rZXkoa2V5LCAic2V0dXA6IHdvcmt0cmVlOiAlc1xuIiwgcXVvdGVfY3JubChnaXRfd29ya190cmVlKSk7CisJdHJhY2VfcHJpbnRmX2tleShrZXksICJzZXR1cDogY3dkOiAlc1xuIiwgcXVvdGVfY3JubChjd2QpKTsKKwl0cmFjZV9wcmludGZfa2V5KGtleSwgInNldHVwOiBwcmVmaXg6ICVzXG4iLCBxdW90ZV9jcm5sKHByZWZpeCkpOworfQorCitpbnQgdHJhY2Vfd2FudChjb25zdCBjaGFyICprZXkpCit7CisJY29uc3QgY2hhciAqdHJhY2UgPSBnZXRlbnYoa2V5KTsKKworCWlmICghdHJhY2UgfHwgIXN0cmNtcCh0cmFjZSwgIiIpIHx8CisJICAgICFzdHJjbXAodHJhY2UsICIwIikgfHwgIXN0cmNhc2VjbXAodHJhY2UsICJmYWxzZSIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC1oZWxwZXIuYyBiL3RyYW5zcG9ydC1oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmUwOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhbnNwb3J0LWhlbHBlci5jCkBAIC0wLDAgKzEsMTIxOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdHJ1Y3QgaGVscGVyX2RhdGEgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKwlGSUxFICpvdXQ7CisJdW5zaWduZWQgZmV0Y2ggOiAxLAorCQlpbXBvcnQgOiAxLAorCQlleHBvcnQgOiAxLAorCQlvcHRpb24gOiAxLAorCQlwdXNoIDogMSwKKwkJY29ubmVjdCA6IDEsCisJCW5vX2Rpc2Nvbm5lY3RfcmVxIDogMTsKKwljaGFyICpleHBvcnRfbWFya3M7CisJY2hhciAqaW1wb3J0X21hcmtzOworCS8qIFRoZXNlIGdvIGZyb20gcmVtb3RlIG5hbWUgKGFzIGluICJsaXN0IikgdG8gcHJpdmF0ZSBuYW1lICovCisJc3RydWN0IHJlZnNwZWMgKnJlZnNwZWNzOworCWludCByZWZzcGVjX25yOworCS8qIFRyYW5zcG9ydCBvcHRpb25zIGZvciBmZXRjaC1wYWNrL3NlbmQtcGFjayAoc2hvdWxkIG9uZSBvZgorCSAqIHRob3NlIGJlIGludm9rZWQpLgorCSAqLworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgdHJhbnNwb3J0X29wdGlvbnM7Cit9OworCitzdGF0aWMgdm9pZCBzZW5kbGluZShzdHJ1Y3QgaGVscGVyX2RhdGEgKmhlbHBlciwgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQoreworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogUmVtb3RlIGhlbHBlcjogLT4gJXMiLCBidWZmZXItPmJ1Zik7CisJaWYgKHdyaXRlX2luX2Z1bGwoaGVscGVyLT5oZWxwZXItPmluLCBidWZmZXItPmJ1ZiwgYnVmZmVyLT5sZW4pCisJCSE9IGJ1ZmZlci0+bGVuKQorCQlkaWVfZXJybm8oIkZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiKTsKK30KKworc3RhdGljIGludCByZWN2bGluZV9maChGSUxFICpoZWxwZXIsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcikKK3sKKwlzdHJidWZfcmVzZXQoYnVmZmVyKTsKKwlpZiAoZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IFJlbW90ZSBoZWxwZXI6IFdhaXRpbmcuLi5cbiIpOworCWlmIChzdHJidWZfZ2V0bGluZShidWZmZXIsIGhlbHBlciwgJ1xuJykgPT0gRU9GKSB7CisJCWlmIChkZWJ1ZykKKwkJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IFJlbW90ZSBoZWxwZXIgcXVpdC5cbiIpOworCQlleGl0KDEyOCk7CisJfQorCisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBSZW1vdGUgaGVscGVyOiA8LSAlc1xuIiwgYnVmZmVyLT5idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlY3ZsaW5lKHN0cnVjdCBoZWxwZXJfZGF0YSAqaGVscGVyLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIpCit7CisJcmV0dXJuIHJlY3ZsaW5lX2ZoKGhlbHBlci0+b3V0LCBidWZmZXIpOworfQorCitzdGF0aWMgdm9pZCB4Y2hnbGluZShzdHJ1Y3QgaGVscGVyX2RhdGEgKmhlbHBlciwgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQoreworCXNlbmRsaW5lKGhlbHBlciwgYnVmZmVyKTsKKwlyZWN2bGluZShoZWxwZXIsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NvbnN0YW50KGludCBmZCwgY29uc3QgY2hhciAqc3RyKQoreworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogUmVtb3RlIGhlbHBlcjogLT4gJXMiLCBzdHIpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzdHIsIHN0cmxlbihzdHIpKSAhPSBzdHJsZW4oc3RyKSkKKwkJZGllX2Vycm5vKCJGdWxsIHdyaXRlIHRvIHJlbW90ZSBoZWxwZXIgZmFpbGVkIik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZW1vdmVfZXh0X2ZvcmNlKGNvbnN0IGNoYXIgKnVybCkKK3sKKwlpZiAodXJsKSB7CisJCWNvbnN0IGNoYXIgKmNvbG9uID0gc3RyY2hyKHVybCwgJzonKTsKKwkJaWYgKGNvbG9uICYmIGNvbG9uWzFdID09ICc6JykKKwkJCXJldHVybiBjb2xvbiArIDI7CisJfQorCXJldHVybiB1cmw7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3Rha2Vfb3ZlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhOworCWRhdGEgPSAoc3RydWN0IGhlbHBlcl9kYXRhICopdHJhbnNwb3J0LT5kYXRhOworCXRyYW5zcG9ydF90YWtlX292ZXIodHJhbnNwb3J0LCBkYXRhLT5oZWxwZXIpOworCWZjbG9zZShkYXRhLT5vdXQpOworCWZyZWUoZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2V0X2hlbHBlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKwljb25zdCBjaGFyICoqcmVmc3BlY3MgPSBOVUxMOworCWludCByZWZzcGVjX25yID0gMDsKKwlpbnQgcmVmc3BlY19hbGxvYyA9IDA7CisJaW50IGR1cGVkOworCWludCBjb2RlOworCWNoYXIgZ2l0X2Rpcl9idWZbc2l6ZW9mKEdJVF9ESVJfRU5WSVJPTk1FTlQpICsgUEFUSF9NQVggKyAxXTsKKwljb25zdCBjaGFyICpoZWxwZXJfZW52W10gPSB7CisJCWdpdF9kaXJfYnVmLAorCQlOVUxMCisJfTsKKworCisJaWYgKGRhdGEtPmhlbHBlcikKKwkJcmV0dXJuIGRhdGEtPmhlbHBlcjsKKworCWhlbHBlciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpoZWxwZXIpKTsKKwloZWxwZXItPmluID0gLTE7CisJaGVscGVyLT5vdXQgPSAtMTsKKwloZWxwZXItPmVyciA9IDA7CisJaGVscGVyLT5hcmd2ID0geGNhbGxvYyg0LCBzaXplb2YoKmhlbHBlci0+YXJndikpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJnaXQtcmVtb3RlLSVzIiwgZGF0YS0+bmFtZSk7CisJaGVscGVyLT5hcmd2WzBdID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwloZWxwZXItPmFyZ3ZbMV0gPSB0cmFuc3BvcnQtPnJlbW90ZS0+bmFtZTsKKwloZWxwZXItPmFyZ3ZbMl0gPSByZW1vdmVfZXh0X2ZvcmNlKHRyYW5zcG9ydC0+dXJsKTsKKwloZWxwZXItPmdpdF9jbWQgPSAwOworCWhlbHBlci0+c2lsZW50X2V4ZWNfZmFpbHVyZSA9IDE7CisKKwlzbnByaW50ZihnaXRfZGlyX2J1Ziwgc2l6ZW9mKGdpdF9kaXJfYnVmKSwgIiVzPSVzIiwgR0lUX0RJUl9FTlZJUk9OTUVOVCwgZ2V0X2dpdF9kaXIoKSk7CisJaGVscGVyLT5lbnYgPSBoZWxwZXJfZW52OworCisJY29kZSA9IHN0YXJ0X2NvbW1hbmQoaGVscGVyKTsKKwlpZiAoY29kZSA8IDAgJiYgZXJybm8gPT0gRU5PRU5UKQorCQlkaWUoIlVuYWJsZSB0byBmaW5kIHJlbW90ZSBoZWxwZXIgZm9yICclcyciLCBkYXRhLT5uYW1lKTsKKwllbHNlIGlmIChjb2RlICE9IDApCisJCWV4aXQoY29kZSk7CisKKwlkYXRhLT5oZWxwZXIgPSBoZWxwZXI7CisJZGF0YS0+bm9fZGlzY29ubmVjdF9yZXEgPSAwOworCisJLyoKKwkgKiBPcGVuIHRoZSBvdXRwdXQgYXMgRklMRSogc28gc3RyYnVmX2dldGxpbmUoKSBjYW4gYmUgdXNlZC4KKwkgKiBEbyB0aGlzIHdpdGggZHVwZWQgZmQgYmVjYXVzZSBmY2xvc2UoKSB3aWxsIGNsb3NlIHRoZSBmZCwKKwkgKiBhbmQgc3R1ZmYgbGlrZSB0YWtpbmcgb3ZlciB3aWxsIHJlcXVpcmUgdGhlIGZkIHRvIHJlbWFpbi4KKwkgKi8KKwlkdXBlZCA9IGR1cChoZWxwZXItPm91dCk7CisJaWYgKGR1cGVkIDwgMCkKKwkJZGllX2Vycm5vKCJDYW4ndCBkdXAgaGVscGVyIG91dHB1dCBmZCIpOworCWRhdGEtPm91dCA9IHhmZG9wZW4oZHVwZWQsICJyIik7CisKKwl3cml0ZV9jb25zdGFudChoZWxwZXItPmluLCAiY2FwYWJpbGl0aWVzXG4iKTsKKworCXdoaWxlICgxKSB7CisJCWNvbnN0IGNoYXIgKmNhcG5hbWU7CisJCWludCBtYW5kYXRvcnkgPSAwOworCQlyZWN2bGluZShkYXRhLCAmYnVmKTsKKworCQlpZiAoISpidWYuYnVmKQorCQkJYnJlYWs7CisKKwkJaWYgKCpidWYuYnVmID09ICcqJykgeworCQkJY2FwbmFtZSA9IGJ1Zi5idWYgKyAxOworCQkJbWFuZGF0b3J5ID0gMTsKKwkJfSBlbHNlCisJCQljYXBuYW1lID0gYnVmLmJ1ZjsKKworCQlpZiAoZGVidWcpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBHb3QgY2FwICVzXG4iLCBjYXBuYW1lKTsKKwkJaWYgKCFzdHJjbXAoY2FwbmFtZSwgImZldGNoIikpCisJCQlkYXRhLT5mZXRjaCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoY2FwbmFtZSwgIm9wdGlvbiIpKQorCQkJZGF0YS0+b3B0aW9uID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAicHVzaCIpKQorCQkJZGF0YS0+cHVzaCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoY2FwbmFtZSwgImltcG9ydCIpKQorCQkJZGF0YS0+aW1wb3J0ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAiZXhwb3J0IikpCisJCQlkYXRhLT5leHBvcnQgPSAxOworCQllbHNlIGlmICghZGF0YS0+cmVmc3BlY3MgJiYgIXByZWZpeGNtcChjYXBuYW1lLCAicmVmc3BlYyAiKSkgeworCQkJQUxMT0NfR1JPVyhyZWZzcGVjcywKKwkJCQkgICByZWZzcGVjX25yICsgMSwKKwkJCQkgICByZWZzcGVjX2FsbG9jKTsKKwkJCXJlZnNwZWNzW3JlZnNwZWNfbnIrK10gPSB4c3RyZHVwKGNhcG5hbWUgKyBzdHJsZW4oInJlZnNwZWMgIikpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY2FwbmFtZSwgImNvbm5lY3QiKSkgeworCQkJZGF0YS0+Y29ubmVjdCA9IDE7CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChjYXBuYW1lLCAiZXhwb3J0LW1hcmtzICIpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGFyZyA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZHN0cigmYXJnLCAiLS1leHBvcnQtbWFya3M9Iik7CisJCQlzdHJidWZfYWRkc3RyKCZhcmcsIGNhcG5hbWUgKyBzdHJsZW4oImV4cG9ydC1tYXJrcyAiKSk7CisJCQlkYXRhLT5leHBvcnRfbWFya3MgPSBzdHJidWZfZGV0YWNoKCZhcmcsIE5VTEwpOworCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoY2FwbmFtZSwgImltcG9ydC1tYXJrcyIpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGFyZyA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZHN0cigmYXJnLCAiLS1pbXBvcnQtbWFya3M9Iik7CisJCQlzdHJidWZfYWRkc3RyKCZhcmcsIGNhcG5hbWUgKyBzdHJsZW4oImltcG9ydC1tYXJrcyAiKSk7CisJCQlkYXRhLT5pbXBvcnRfbWFya3MgPSBzdHJidWZfZGV0YWNoKCZhcmcsIE5VTEwpOworCQl9IGVsc2UgaWYgKG1hbmRhdG9yeSkgeworCQkJZGllKCJVbmtub3duIG1hbmRhdG9yeSBjYXBhYmlsaXR5ICVzLiBUaGlzIHJlbW90ZSAiCisJCQkgICAgImhlbHBlciBwcm9iYWJseSBuZWVkcyBuZXdlciB2ZXJzaW9uIG9mIEdpdC4iLAorCQkJICAgIGNhcG5hbWUpOworCQl9CisJfQorCWlmIChyZWZzcGVjcykgeworCQlpbnQgaTsKKwkJZGF0YS0+cmVmc3BlY19uciA9IHJlZnNwZWNfbnI7CisJCWRhdGEtPnJlZnNwZWNzID0gcGFyc2VfZmV0Y2hfcmVmc3BlYyhyZWZzcGVjX25yLCByZWZzcGVjcyk7CisJCWZvciAoaSA9IDA7IGkgPCByZWZzcGVjX25yOyBpKyspIHsKKwkJCWZyZWUoKGNoYXIgKilyZWZzcGVjc1tpXSk7CisJCX0KKwkJZnJlZShyZWZzcGVjcyk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogQ2FwYWJpbGl0aWVzIGNvbXBsZXRlLlxuIik7CisJcmV0dXJuIGRhdGEtPmhlbHBlcjsKK30KKworc3RhdGljIGludCBkaXNjb25uZWN0X2hlbHBlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWludCByZXMgPSAwOworCisJaWYgKGRhdGEtPmhlbHBlcikgeworCQlpZiAoZGVidWcpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBEaXNjb25uZWN0aW5nLlxuIik7CisJCWlmICghZGF0YS0+bm9fZGlzY29ubmVjdF9yZXEpIHsKKwkJCS8qCisJCQkgKiBJZ25vcmUgd3JpdGUgZXJyb3JzOyB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvLAorCQkJICogc2luY2Ugd2UncmUgYWJvdXQgdG8gY2xvc2UgdGhlIHBpcGUgYW55d2F5LiBBbmQgdGhlCisJCQkgKiBtb3N0IGxpa2VseSBlcnJvciBpcyBFUElQRSBkdWUgdG8gdGhlIGhlbHBlciBkeWluZworCQkJICogdG8gcmVwb3J0IGFuIGVycm9yIGl0c2VsZi4KKwkJCSAqLworCQkJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKwkJCXh3cml0ZShkYXRhLT5oZWxwZXItPmluLCAiXG4iLCAxKTsKKwkJCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKwkJfQorCQljbG9zZShkYXRhLT5oZWxwZXItPmluKTsKKwkJY2xvc2UoZGF0YS0+aGVscGVyLT5vdXQpOworCQlmY2xvc2UoZGF0YS0+b3V0KTsKKwkJcmVzID0gZmluaXNoX2NvbW1hbmQoZGF0YS0+aGVscGVyKTsKKwkJZnJlZSgoY2hhciAqKWRhdGEtPmhlbHBlci0+YXJndlswXSk7CisJCWZyZWUoZGF0YS0+aGVscGVyLT5hcmd2KTsKKwkJZnJlZShkYXRhLT5oZWxwZXIpOworCQlkYXRhLT5oZWxwZXIgPSBOVUxMOworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdW5zdXBwb3J0ZWRfb3B0aW9uc1tdID0geworCVRSQU5TX09QVF9VUExPQURQQUNLLAorCVRSQU5TX09QVF9SRUNFSVZFUEFDSywKKwlUUkFOU19PUFRfVEhJTiwKKwlUUkFOU19PUFRfS0VFUAorCX07CitzdGF0aWMgY29uc3QgY2hhciAqYm9vbGVhbl9vcHRpb25zW10gPSB7CisJVFJBTlNfT1BUX1RISU4sCisJVFJBTlNfT1BUX0tFRVAsCisJVFJBTlNfT1BUX0ZPTExPV1RBR1MKKwl9OworCitzdGF0aWMgaW50IHNldF9oZWxwZXJfb3B0aW9uKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGksIHJldCwgaXNfYm9vbCA9IDA7CisKKwlnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisKKwlpZiAoIWRhdGEtPm9wdGlvbikKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1bnN1cHBvcnRlZF9vcHRpb25zKTsgaSsrKSB7CisJCWlmICghc3RyY21wKG5hbWUsIHVuc3VwcG9ydGVkX29wdGlvbnNbaV0pKQorCQkJcmV0dXJuIDE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYm9vbGVhbl9vcHRpb25zKTsgaSsrKSB7CisJCWlmICghc3RyY21wKG5hbWUsIGJvb2xlYW5fb3B0aW9uc1tpXSkpIHsKKwkJCWlzX2Jvb2wgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzdHJidWZfYWRkZigmYnVmLCAib3B0aW9uICVzICIsIG5hbWUpOworCWlmIChpc19ib29sKQorCQlzdHJidWZfYWRkc3RyKCZidWYsIHZhbHVlID8gInRydWUiIDogImZhbHNlIik7CisJZWxzZQorCQlxdW90ZV9jX3N0eWxlKHZhbHVlLCAmYnVmLCBOVUxMLCAwKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisKKwl4Y2hnbGluZShkYXRhLCAmYnVmKTsKKworCWlmICghc3RyY21wKGJ1Zi5idWYsICJvayIpKQorCQlyZXQgPSAwOworCWVsc2UgaWYgKCFwcmVmaXhjbXAoYnVmLmJ1ZiwgImVycm9yIikpIHsKKwkJcmV0ID0gLTE7CisJfSBlbHNlIGlmICghc3RyY21wKGJ1Zi5idWYsICJ1bnN1cHBvcnRlZCIpKQorCQlyZXQgPSAxOworCWVsc2UgeworCQl3YXJuaW5nKCIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIsIGRhdGEtPm5hbWUsIGJ1Zi5idWYpOworCQlyZXQgPSAxOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzdGFuZGFyZF9vcHRpb25zKHN0cnVjdCB0cmFuc3BvcnQgKnQpCit7CisJY2hhciBidWZbMTZdOworCWludCBuOworCWludCB2ID0gdC0+dmVyYm9zZTsKKworCXNldF9oZWxwZXJfb3B0aW9uKHQsICJwcm9ncmVzcyIsIHQtPnByb2dyZXNzID8gInRydWUiIDogImZhbHNlIik7CisKKwluID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgdiArIDEpOworCWlmIChuID49IHNpemVvZihidWYpKQorCQlkaWUoImltcG9zc2libHkgbGFyZ2UgdmVyYm9zaXR5IHZhbHVlIik7CisJc2V0X2hlbHBlcl9vcHRpb24odCwgInZlcmJvc2l0eSIsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgcmVsZWFzZV9oZWxwZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCWludCByZXMgPSAwOworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlmcmVlX3JlZnNwZWMoZGF0YS0+cmVmc3BlY19uciwgZGF0YS0+cmVmc3BlY3MpOworCWRhdGEtPnJlZnNwZWNzID0gTlVMTDsKKwlyZXMgPSBkaXNjb25uZWN0X2hlbHBlcih0cmFuc3BvcnQpOworCWZyZWUodHJhbnNwb3J0LT5kYXRhKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGZldGNoX3dpdGhfZmV0Y2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJICAgIGludCBucl9oZWFkcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RhbmRhcmRfb3B0aW9ucyh0cmFuc3BvcnQpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHJlZiAqcG9zbiA9IHRvX2ZldGNoW2ldOworCQlpZiAocG9zbi0+c3RhdHVzICYgUkVGX1NUQVRVU19VUFRPREFURSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJmZXRjaCAlcyAlc1xuIiwKKwkJCSAgICBzaGExX3RvX2hleChwb3NuLT5vbGRfc2hhMSksIHBvc24tPm5hbWUpOworCX0KKworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwlzZW5kbGluZShkYXRhLCAmYnVmKTsKKworCXdoaWxlICgxKSB7CisJCXJlY3ZsaW5lKGRhdGEsICZidWYpOworCisJCWlmICghcHJlZml4Y21wKGJ1Zi5idWYsICJsb2NrICIpKSB7CisJCQljb25zdCBjaGFyICpuYW1lID0gYnVmLmJ1ZiArIDU7CisJCQlpZiAodHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlKQorCQkJCXdhcm5pbmcoIiVzIGFsc28gbG9ja2VkICVzIiwgZGF0YS0+bmFtZSwgbmFtZSk7CisJCQllbHNlCisJCQkJdHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlID0geHN0cmR1cChuYW1lKTsKKwkJfQorCQllbHNlIGlmICghYnVmLmxlbikKKwkJCWJyZWFrOworCQllbHNlCisJCQl3YXJuaW5nKCIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIsIGRhdGEtPm5hbWUsIGJ1Zi5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfaW1wb3J0ZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZmFzdGltcG9ydCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqaGVscGVyID0gZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCW1lbXNldChmYXN0aW1wb3J0LCAwLCBzaXplb2YoKmZhc3RpbXBvcnQpKTsKKwlmYXN0aW1wb3J0LT5pbiA9IGhlbHBlci0+b3V0OworCWZhc3RpbXBvcnQtPmFyZ3YgPSB4Y2FsbG9jKDUsIHNpemVvZigqZmFzdGltcG9ydC0+YXJndikpOworCWZhc3RpbXBvcnQtPmFyZ3ZbMF0gPSAiZmFzdC1pbXBvcnQiOworCWZhc3RpbXBvcnQtPmFyZ3ZbMV0gPSAiLS1xdWlldCI7CisKKwlmYXN0aW1wb3J0LT5naXRfY21kID0gMTsKKwlyZXR1cm4gc3RhcnRfY29tbWFuZChmYXN0aW1wb3J0KTsKK30KKworc3RhdGljIGludCBnZXRfZXhwb3J0ZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmZhc3RleHBvcnQsCisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJldmxpc3RfYXJncykKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlciA9IGdldF9oZWxwZXIodHJhbnNwb3J0KTsKKwlpbnQgYXJnYyA9IDAsIGk7CisJbWVtc2V0KGZhc3RleHBvcnQsIDAsIHNpemVvZigqZmFzdGV4cG9ydCkpOworCisJLyogd2UgbmVlZCB0byBkdXBsaWNhdGUgaGVscGVyLT5pbiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIGl0IGFmdGVyCisJICogZmFzdGV4cG9ydCBpcyBkb25lIHdpdGggaXQuICovCisJZmFzdGV4cG9ydC0+b3V0ID0gZHVwKGhlbHBlci0+aW4pOworCWZhc3RleHBvcnQtPmFyZ3YgPSB4Y2FsbG9jKDUgKyByZXZsaXN0X2FyZ3MtPm5yLCBzaXplb2YoKmZhc3RleHBvcnQtPmFyZ3YpKTsKKwlmYXN0ZXhwb3J0LT5hcmd2W2FyZ2MrK10gPSAiZmFzdC1leHBvcnQiOworCWZhc3RleHBvcnQtPmFyZ3ZbYXJnYysrXSA9ICItLXVzZS1kb25lLWZlYXR1cmUiOworCWlmIChkYXRhLT5leHBvcnRfbWFya3MpCisJCWZhc3RleHBvcnQtPmFyZ3ZbYXJnYysrXSA9IGRhdGEtPmV4cG9ydF9tYXJrczsKKwlpZiAoZGF0YS0+aW1wb3J0X21hcmtzKQorCQlmYXN0ZXhwb3J0LT5hcmd2W2FyZ2MrK10gPSBkYXRhLT5pbXBvcnRfbWFya3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV2bGlzdF9hcmdzLT5ucjsgaSsrKQorCQlmYXN0ZXhwb3J0LT5hcmd2W2FyZ2MrK10gPSByZXZsaXN0X2FyZ3MtPml0ZW1zW2ldLnN0cmluZzsKKworCWZhc3RleHBvcnQtPmdpdF9jbWQgPSAxOworCXJldHVybiBzdGFydF9jb21tYW5kKGZhc3RleHBvcnQpOworfQorCitzdGF0aWMgaW50IGZldGNoX3dpdGhfaW1wb3J0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSAgICAgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZmFzdGltcG9ydDsKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJaW50IGk7CisJc3RydWN0IHJlZiAqcG9zbjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCisJaWYgKGdldF9pbXBvcnRlcih0cmFuc3BvcnQsICZmYXN0aW1wb3J0KSkKKwkJZGllKCJDb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9oZWFkczsgaSsrKSB7CisJCXBvc24gPSB0b19mZXRjaFtpXTsKKwkJaWYgKHBvc24tPnN0YXR1cyAmIFJFRl9TVEFUVVNfVVBUT0RBVEUpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfYWRkZigmYnVmLCAiaW1wb3J0ICVzXG4iLCBwb3NuLT5uYW1lKTsKKwkJc2VuZGxpbmUoZGF0YSwgJmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisKKwl3cml0ZV9jb25zdGFudChkYXRhLT5oZWxwZXItPmluLCAiXG4iKTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmZmFzdGltcG9ydCkpCisJCWRpZSgiRXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIpOworCWZyZWUoZmFzdGltcG9ydC5hcmd2KTsKKwlmYXN0aW1wb3J0LmFyZ3YgPSBOVUxMOworCisJLyoKKwkgKiBUaGUgZmFzdC1pbXBvcnQgc3RyZWFtIG9mIGEgcmVtb3RlIGhlbHBlciB0aGF0IGFkdmVydGlzZXMKKwkgKiB0aGUgInJlZnNwZWMiIGNhcGFiaWxpdHkgd3JpdGVzIHRvIHRoZSByZWZzIG5hbWVkIGFmdGVyIHRoZQorCSAqIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgZmlyc3QgcmVmc3BlYyBtYXRjaGluZyBlYWNoIHJlZiB3ZQorCSAqIHdlcmUgZmV0Y2hpbmcuCisJICoKKwkgKiAoSWYgbm8gInJlZnNwZWMiIGNhcGFiaWxpdHkgd2FzIHNwZWNpZmllZCwgZm9yIGhpc3RvcmljYWwKKwkgKiByZWFzb25zIHdlIGRlZmF1bHQgdG8gKjoqLikKKwkgKgorCSAqIFN0b3JlIHRoZSByZXN1bHQgaW4gdG9fZmV0Y2hbaV0ub2xkX3NoYTEuICBDYWxsZXJzIHN1Y2gKKwkgKiBhcyAiZ2l0IGZldGNoIiBjYW4gdXNlIHRoZSB2YWx1ZSB0byB3cml0ZSBmZWVkYmFjayB0byB0aGUKKwkgKiB0ZXJtaW5hbCwgcG9wdWxhdGUgRkVUQ0hfSEVBRCwgYW5kIGRldGVybWluZSB3aGF0IG5ldyB2YWx1ZQorCSAqIHNob3VsZCBiZSB3cml0dGVuIHRvIHBlZXJfcmVmIGlmIHRoZSB1cGRhdGUgaXMgYQorCSAqIGZhc3QtZm9yd2FyZCBvciB0aGlzIGlzIGEgZm9yY2VkIHVwZGF0ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfaGVhZHM7IGkrKykgeworCQljaGFyICpwcml2YXRlOworCQlwb3NuID0gdG9fZmV0Y2hbaV07CisJCWlmIChwb3NuLT5zdGF0dXMgJiBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJY29udGludWU7CisJCWlmIChkYXRhLT5yZWZzcGVjcykKKwkJCXByaXZhdGUgPSBhcHBseV9yZWZzcGVjcyhkYXRhLT5yZWZzcGVjcywgZGF0YS0+cmVmc3BlY19uciwgcG9zbi0+bmFtZSk7CisJCWVsc2UKKwkJCXByaXZhdGUgPSB4c3RyZHVwKHBvc24tPm5hbWUpOworCQlpZiAocHJpdmF0ZSkgeworCQkJcmVhZF9yZWYocHJpdmF0ZSwgcG9zbi0+b2xkX3NoYTEpOworCQkJZnJlZShwcml2YXRlKTsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Rfc2VydmljZShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZXhlYykKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHN0cmJ1ZiBjbWRidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqaGVscGVyOworCWludCByLCBkdXBlZCwgcmV0ID0gMDsKKwlGSUxFICppbnB1dDsKKworCWhlbHBlciA9IGdldF9oZWxwZXIodHJhbnNwb3J0KTsKKworCS8qCisJICogWWVzLCBkdXAgdGhlIHBpcGUgYW5vdGhlciB0aW1lLCBhcyB3ZSBuZWVkIHVuYnVmZmVyZWQgdmVyc2lvbgorCSAqIG9mIGlucHV0IHBpcGUgYXMgRklMRSouIGZjbG9zZSgpIGNsb3NlcyB0aGUgdW5kZXJseWluZyBmZCBhbmQKKwkgKiBzdHJlYW0gYnVmZmVyaW5nIG9ubHkgY2FuIGJlIGNoYW5nZWQgYmVmb3JlIGZpcnN0IEkvTyBvcGVyYXRpb24KKwkgKiBvbiBpdC4KKwkgKi8KKwlkdXBlZCA9IGR1cChoZWxwZXItPm91dCk7CisJaWYgKGR1cGVkIDwgMCkKKwkJZGllX2Vycm5vKCJDYW4ndCBkdXAgaGVscGVyIG91dHB1dCBmZCIpOworCWlucHV0ID0geGZkb3BlbihkdXBlZCwgInIiKTsKKwlzZXR2YnVmKGlucHV0LCBOVUxMLCBfSU9OQkYsIDApOworCisJLyoKKwkgKiBIYW5kbGUgLS11cGxvYWQtcGFjayBhbmQgZnJpZW5kcy4gVGhpcyBpcyBmaXJlIGFuZCBmb3JnZXQuLi4KKwkgKiBqdXN0IHdhcm4gaWYgaXQgZmFpbHMuCisJICovCisJaWYgKHN0cmNtcChuYW1lLCBleGVjKSkgeworCQlyID0gc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAic2VydnBhdGgiLCBleGVjKTsKKwkJaWYgKHIgPiAwKQorCQkJd2FybmluZygiU2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wuIik7CisJCWVsc2UgaWYgKHIgPCAwKQorCQkJd2FybmluZygiSW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoLiIpOworCX0KKworCWlmIChkYXRhLT5jb25uZWN0KQorCQlzdHJidWZfYWRkZigmY21kYnVmLCAiY29ubmVjdCAlc1xuIiwgbmFtZSk7CisJZWxzZQorCQlnb3RvIGV4aXQ7CisKKwlzZW5kbGluZShkYXRhLCAmY21kYnVmKTsKKwlyZWN2bGluZV9maChpbnB1dCwgJmNtZGJ1Zik7CisJaWYgKCFzdHJjbXAoY21kYnVmLmJ1ZiwgIiIpKSB7CisJCWRhdGEtPm5vX2Rpc2Nvbm5lY3RfcmVxID0gMTsKKwkJaWYgKGRlYnVnKQorCQkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogU21hcnQgdHJhbnNwb3J0IGNvbm5lY3Rpb24gIgorCQkJCSJyZWFkeS5cbiIpOworCQlyZXQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChjbWRidWYuYnVmLCAiZmFsbGJhY2siKSkgeworCQlpZiAoZGVidWcpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBGYWxsaW5nIGJhY2sgdG8gZHVtYiAiCisJCQkJInRyYW5zcG9ydC5cbiIpOworCX0gZWxzZQorCQlkaWUoIlVua25vd24gcmVzcG9uc2UgdG8gY29ubmVjdDogJXMiLAorCQkJY21kYnVmLmJ1Zik7CisKK2V4aXQ6CisJZmNsb3NlKGlucHV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkJICAgICBpbnQgZm9yX3B1c2gpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZXhlYzsKKworCW5hbWUgPSBmb3JfcHVzaCA/ICJnaXQtcmVjZWl2ZS1wYWNrIiA6ICJnaXQtdXBsb2FkLXBhY2siOworCWlmIChmb3JfcHVzaCkKKwkJZXhlYyA9IGRhdGEtPnRyYW5zcG9ydF9vcHRpb25zLnJlY2VpdmVwYWNrOworCWVsc2UKKwkJZXhlYyA9IGRhdGEtPnRyYW5zcG9ydF9vcHRpb25zLnVwbG9hZHBhY2s7CisKKwlyZXR1cm4gcHJvY2Vzc19jb25uZWN0X3NlcnZpY2UodHJhbnNwb3J0LCBuYW1lLCBleGVjKTsKK30KKworc3RhdGljIGludCBjb25uZWN0X2hlbHBlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgIGNvbnN0IGNoYXIgKmV4ZWMsIGludCBmZFsyXSkKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisKKwkvKiBHZXRfaGVscGVyIHNvIGNvbm5lY3QgaXMgaW5pdGVkLiAqLworCWdldF9oZWxwZXIodHJhbnNwb3J0KTsKKwlpZiAoIWRhdGEtPmNvbm5lY3QpCisJCWRpZSgiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wuIik7CisKKwlpZiAoIXByb2Nlc3NfY29ubmVjdF9zZXJ2aWNlKHRyYW5zcG9ydCwgbmFtZSwgZXhlYykpCisJCWRpZSgiQ2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzLiIsIG5hbWUpOworCisJZmRbMF0gPSBkYXRhLT5oZWxwZXItPm91dDsKKwlmZFsxXSA9IGRhdGEtPmhlbHBlci0+aW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWludCBpLCBjb3VudDsKKworCWlmIChwcm9jZXNzX2Nvbm5lY3QodHJhbnNwb3J0LCAwKSkgeworCQlkb190YWtlX292ZXIodHJhbnNwb3J0KTsKKwkJcmV0dXJuIHRyYW5zcG9ydC0+ZmV0Y2godHJhbnNwb3J0LCBucl9oZWFkcywgdG9fZmV0Y2gpOworCX0KKworCWNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaGVhZHM7IGkrKykKKwkJaWYgKCEodG9fZmV0Y2hbaV0tPnN0YXR1cyAmIFJFRl9TVEFUVVNfVVBUT0RBVEUpKQorCQkJY291bnQrKzsKKworCWlmICghY291bnQpCisJCXJldHVybiAwOworCisJaWYgKGRhdGEtPmZldGNoKQorCQlyZXR1cm4gZmV0Y2hfd2l0aF9mZXRjaCh0cmFuc3BvcnQsIG5yX2hlYWRzLCB0b19mZXRjaCk7CisKKwlpZiAoZGF0YS0+aW1wb3J0KQorCQlyZXR1cm4gZmV0Y2hfd2l0aF9pbXBvcnQodHJhbnNwb3J0LCBucl9oZWFkcywgdG9fZmV0Y2gpOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBwdXNoX3VwZGF0ZV9yZWZfc3RhdHVzKHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCQkgICBzdHJ1Y3QgcmVmICoqcmVmLAorCQkJCSAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzKQoreworCWNoYXIgKnJlZm5hbWUsICptc2c7CisJaW50IHN0YXR1czsKKworCWlmICghcHJlZml4Y21wKGJ1Zi0+YnVmLCAib2sgIikpIHsKKwkJc3RhdHVzID0gUkVGX1NUQVRVU19PSzsKKwkJcmVmbmFtZSA9IGJ1Zi0+YnVmICsgMzsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAoYnVmLT5idWYsICJlcnJvciAiKSkgeworCQlzdGF0dXMgPSBSRUZfU1RBVFVTX1JFTU9URV9SRUpFQ1Q7CisJCXJlZm5hbWUgPSBidWYtPmJ1ZiArIDY7CisJfSBlbHNlCisJCWRpZSgiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciLCBidWYtPmJ1Zik7CisKKwltc2cgPSBzdHJjaHIocmVmbmFtZSwgJyAnKTsKKwlpZiAobXNnKSB7CisJCXN0cnVjdCBzdHJidWYgbXNnX2J1ZiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICplbmQ7CisKKwkJKm1zZysrID0gJ1wwJzsKKwkJaWYgKCF1bnF1b3RlX2Nfc3R5bGUoJm1zZ19idWYsIG1zZywgJmVuZCkpCisJCQltc2cgPSBzdHJidWZfZGV0YWNoKCZtc2dfYnVmLCBOVUxMKTsKKwkJZWxzZQorCQkJbXNnID0geHN0cmR1cChtc2cpOworCQlzdHJidWZfcmVsZWFzZSgmbXNnX2J1Zik7CisKKwkJaWYgKCFzdHJjbXAobXNnLCAibm8gbWF0Y2giKSkgeworCQkJc3RhdHVzID0gUkVGX1NUQVRVU19OT05FOworCQkJZnJlZShtc2cpOworCQkJbXNnID0gTlVMTDsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG1zZywgInVwIHRvIGRhdGUiKSkgeworCQkJc3RhdHVzID0gUkVGX1NUQVRVU19VUFRPREFURTsKKwkJCWZyZWUobXNnKTsKKwkJCW1zZyA9IE5VTEw7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChtc2csICJub24tZmFzdCBmb3J3YXJkIikpIHsKKwkJCXN0YXR1cyA9IFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOworCQkJZnJlZShtc2cpOworCQkJbXNnID0gTlVMTDsKKwkJfQorCX0KKworCWlmICgqcmVmKQorCQkqcmVmID0gZmluZF9yZWZfYnlfbmFtZSgqcmVmLCByZWZuYW1lKTsKKwlpZiAoISpyZWYpCisJCSpyZWYgPSBmaW5kX3JlZl9ieV9uYW1lKHJlbW90ZV9yZWZzLCByZWZuYW1lKTsKKwlpZiAoISpyZWYpIHsKKwkJd2FybmluZygiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIiwgcmVmbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKCpyZWYpLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19OT05FKSB7CisJCS8qCisJCSAqIEVhcmxpZXIsIHRoZSByZWYgd2FzIG1hcmtlZCBub3QgdG8gYmUgcHVzaGVkLCBzbyBpZ25vcmUgdGhlIHJlZgorCQkgKiBzdGF0dXMgcmVwb3J0ZWQgYnkgdGhlIHJlbW90ZSBoZWxwZXIgaWYgdGhlIGxhdHRlciBpcyAnbm8gbWF0Y2gnLgorCQkgKi8KKwkJaWYgKHN0YXR1cyA9PSBSRUZfU1RBVFVTX05PTkUpCisJCQlyZXR1cm47CisJfQorCisJKCpyZWYpLT5zdGF0dXMgPSBzdGF0dXM7CisJKCpyZWYpLT5yZW1vdGVfc3RhdHVzID0gbXNnOworfQorCitzdGF0aWMgdm9pZCBwdXNoX3VwZGF0ZV9yZWZzX3N0YXR1cyhzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEsCisJCQkJICAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlZiAqcmVmID0gcmVtb3RlX3JlZnM7CisJZm9yICg7OykgeworCQlyZWN2bGluZShkYXRhLCAmYnVmKTsKKwkJaWYgKCFidWYubGVuKQorCQkJYnJlYWs7CisKKwkJcHVzaF91cGRhdGVfcmVmX3N0YXR1cygmYnVmLCAmcmVmLCByZW1vdGVfcmVmcyk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IHB1c2hfcmVmc193aXRoX3B1c2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgaW50IGZsYWdzKQoreworCWludCBmb3JjZV9hbGwgPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPUkNFOworCWludCBtaXJyb3IgPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUjsKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmICpyZWY7CisKKwlnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisJaWYgKCFkYXRhLT5wdXNoKQorCQlyZXR1cm4gMTsKKworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghcmVmLT5wZWVyX3JlZiAmJiAhbWlycm9yKQorCQkJY29udGludWU7CisKKwkJLyogQ2hlY2sgZm9yIHN0YXR1c2VzIHNldCBieSBzZXRfcmVmX3N0YXR1c19mb3JfcHVzaCgpICovCisJCXN3aXRjaCAocmVmLT5zdGF0dXMpIHsKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRDoKKwkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwkJfQorCisJCWlmIChmb3JjZV9hbGwpCisJCQlyZWYtPmZvcmNlID0gMTsKKworCQlzdHJidWZfYWRkc3RyKCZidWYsICJwdXNoICIpOworCQlpZiAoIXJlZi0+ZGVsZXRpb24pIHsKKwkJCWlmIChyZWYtPmZvcmNlKQorCQkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnKycpOworCQkJaWYgKHJlZi0+cGVlcl9yZWYpCisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCByZWYtPnBlZXJfcmVmLT5uYW1lKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfYWRkc3RyKCZidWYsIHNoYTFfdG9faGV4KHJlZi0+bmV3X3NoYTEpKTsKKwkJfQorCQlzdHJidWZfYWRkY2goJmJ1ZiwgJzonKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCByZWYtPm5hbWUpOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJfQorCWlmIChidWYubGVuID09IDApCisJCXJldHVybiAwOworCisJc3RhbmRhcmRfb3B0aW9ucyh0cmFuc3BvcnQpOworCisJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTikgeworCQlpZiAoc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAiZHJ5LXJ1biIsICJ0cnVlIikgIT0gMCkKKwkJCWRpZSgiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgZHJ5LXJ1biIsIGRhdGEtPm5hbWUpOworCX0KKworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwlzZW5kbGluZShkYXRhLCAmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXB1c2hfdXBkYXRlX3JlZnNfc3RhdHVzKGRhdGEsIHJlbW90ZV9yZWZzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXNoX3JlZnNfd2l0aF9leHBvcnQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgaW50IGZsYWdzKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqaGVscGVyLCBleHBvcnRlcjsKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHN0cmluZ19saXN0IHJldmxpc3RfYXJncyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWhlbHBlciA9IGdldF9oZWxwZXIodHJhbnNwb3J0KTsKKworCXdyaXRlX2NvbnN0YW50KGhlbHBlci0+aW4sICJleHBvcnRcbiIpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJY2hhciAqcHJpdmF0ZTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCQlpZiAoIWRhdGEtPnJlZnNwZWNzKQorCQkJY29udGludWU7CisJCXByaXZhdGUgPSBhcHBseV9yZWZzcGVjcyhkYXRhLT5yZWZzcGVjcywgZGF0YS0+cmVmc3BlY19uciwgcmVmLT5uYW1lKTsKKwkJaWYgKHByaXZhdGUgJiYgIWdldF9zaGExKHByaXZhdGUsIHNoYTEpKSB7CisJCQlzdHJidWZfYWRkZigmYnVmLCAiXiVzIiwgcHJpdmF0ZSk7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJldmxpc3RfYXJncywgc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKSk7CisJCX0KKwkJZnJlZShwcml2YXRlKTsKKworCQlpZiAocmVmLT5kZWxldGlvbikgeworCQkJZGllKCJyZW1vdGUtaGVscGVycyBkbyBub3Qgc3VwcG9ydCByZWYgZGVsZXRpb24iKTsKKwkJfQorCisJCWlmIChyZWYtPnBlZXJfcmVmKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZXZsaXN0X2FyZ3MsIHJlZi0+cGVlcl9yZWYtPm5hbWUpOworCisJfQorCisJaWYgKGdldF9leHBvcnRlcih0cmFuc3BvcnQsICZleHBvcnRlciwgJnJldmxpc3RfYXJncykpCisJCWRpZSgiQ291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0Iik7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmV4cG9ydGVyKSkKKwkJZGllKCJFcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0Iik7CisJcHVzaF91cGRhdGVfcmVmc19zdGF0dXMoZGF0YSwgcmVtb3RlX3JlZnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB1c2hfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCXN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCisJaWYgKHByb2Nlc3NfY29ubmVjdCh0cmFuc3BvcnQsIDEpKSB7CisJCWRvX3Rha2Vfb3Zlcih0cmFuc3BvcnQpOworCQlyZXR1cm4gdHJhbnNwb3J0LT5wdXNoX3JlZnModHJhbnNwb3J0LCByZW1vdGVfcmVmcywgZmxhZ3MpOworCX0KKworCWlmICghcmVtb3RlX3JlZnMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisJCQkiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGF0YS0+cHVzaCkKKwkJcmV0dXJuIHB1c2hfcmVmc193aXRoX3B1c2godHJhbnNwb3J0LCByZW1vdGVfcmVmcywgZmxhZ3MpOworCisJaWYgKGRhdGEtPmV4cG9ydCkKKwkJcmV0dXJuIHB1c2hfcmVmc193aXRoX2V4cG9ydCh0cmFuc3BvcnQsIHJlbW90ZV9yZWZzLCBmbGFncyk7CisKKwlyZXR1cm4gLTE7Cit9CisKKworc3RhdGljIGludCBoYXNfYXR0cmlidXRlKGNvbnN0IGNoYXIgKmF0dHJzLCBjb25zdCBjaGFyICphdHRyKSB7CisJaW50IGxlbjsKKwlpZiAoIWF0dHJzKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHN0cmxlbihhdHRyKTsKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKnNwYWNlID0gc3RyY2hybnVsKGF0dHJzLCAnICcpOworCQlpZiAobGVuID09IHNwYWNlIC0gYXR0cnMgJiYgIXN0cm5jbXAoYXR0cnMsIGF0dHIsIGxlbikpCisJCQlyZXR1cm4gMTsKKwkJaWYgKCEqc3BhY2UpCisJCQlyZXR1cm4gMDsKKwkJYXR0cnMgPSBzcGFjZSArIDE7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfbGlzdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmb3JfcHVzaCkKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKwlzdHJ1Y3QgcmVmICpyZXQgPSBOVUxMOworCXN0cnVjdCByZWYgKip0YWlsID0gJnJldDsKKwlzdHJ1Y3QgcmVmICpwb3NuOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwloZWxwZXIgPSBnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisKKwlpZiAocHJvY2Vzc19jb25uZWN0KHRyYW5zcG9ydCwgZm9yX3B1c2gpKSB7CisJCWRvX3Rha2Vfb3Zlcih0cmFuc3BvcnQpOworCQlyZXR1cm4gdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgZm9yX3B1c2gpOworCX0KKworCWlmIChkYXRhLT5wdXNoICYmIGZvcl9wdXNoKQorCQl3cml0ZV9zdHJfaW5fZnVsbChoZWxwZXItPmluLCAibGlzdCBmb3ItcHVzaFxuIik7CisJZWxzZQorCQl3cml0ZV9zdHJfaW5fZnVsbChoZWxwZXItPmluLCAibGlzdFxuIik7CisKKwl3aGlsZSAoMSkgeworCQljaGFyICplb3YsICplb247CisJCXJlY3ZsaW5lKGRhdGEsICZidWYpOworCisJCWlmICghKmJ1Zi5idWYpCisJCQlicmVhazsKKworCQllb3YgPSBzdHJjaHIoYnVmLmJ1ZiwgJyAnKTsKKwkJaWYgKCFlb3YpCisJCQlkaWUoIk1hbGZvcm1lZCByZXNwb25zZSBpbiByZWYgbGlzdDogJXMiLCBidWYuYnVmKTsKKwkJZW9uID0gc3RyY2hyKGVvdiArIDEsICcgJyk7CisJCSplb3YgPSAnXDAnOworCQlpZiAoZW9uKQorCQkJKmVvbiA9ICdcMCc7CisJCSp0YWlsID0gYWxsb2NfcmVmKGVvdiArIDEpOworCQlpZiAoYnVmLmJ1ZlswXSA9PSAnQCcpCisJCQkoKnRhaWwpLT5zeW1yZWYgPSB4c3RyZHVwKGJ1Zi5idWYgKyAxKTsKKwkJZWxzZSBpZiAoYnVmLmJ1ZlswXSAhPSAnPycpCisJCQlnZXRfc2hhMV9oZXgoYnVmLmJ1ZiwgKCp0YWlsKS0+b2xkX3NoYTEpOworCQlpZiAoZW9uKSB7CisJCQlpZiAoaGFzX2F0dHJpYnV0ZShlb24gKyAxLCAidW5jaGFuZ2VkIikpIHsKKwkJCQkoKnRhaWwpLT5zdGF0dXMgfD0gUkVGX1NUQVRVU19VUFRPREFURTsKKwkJCQlyZWFkX3JlZigoKnRhaWwpLT5uYW1lLCAoKnRhaWwpLT5vbGRfc2hhMSk7CisJCQl9CisJCX0KKwkJdGFpbCA9ICYoKCp0YWlsKS0+bmV4dCk7CisJfQorCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogUmVhZCByZWYgbGlzdGluZy5cbiIpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJZm9yIChwb3NuID0gcmV0OyBwb3NuOyBwb3NuID0gcG9zbi0+bmV4dCkKKwkJcmVzb2x2ZV9yZW1vdGVfc3ltcmVmKHBvc24sIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdHJhbnNwb3J0X2hlbHBlcl9pbml0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB4Y2FsbG9jKHNpemVvZigqZGF0YSksIDEpOworCWRhdGEtPm5hbWUgPSBuYW1lOworCisJaWYgKGdldGVudigiR0lUX1RSQU5TUE9SVF9IRUxQRVJfREVCVUciKSkKKwkJZGVidWcgPSAxOworCisJdHJhbnNwb3J0LT5kYXRhID0gZGF0YTsKKwl0cmFuc3BvcnQtPnNldF9vcHRpb24gPSBzZXRfaGVscGVyX29wdGlvbjsKKwl0cmFuc3BvcnQtPmdldF9yZWZzX2xpc3QgPSBnZXRfcmVmc19saXN0OworCXRyYW5zcG9ydC0+ZmV0Y2ggPSBmZXRjaDsKKwl0cmFuc3BvcnQtPnB1c2hfcmVmcyA9IHB1c2hfcmVmczsKKwl0cmFuc3BvcnQtPmRpc2Nvbm5lY3QgPSByZWxlYXNlX2hlbHBlcjsKKwl0cmFuc3BvcnQtPmNvbm5lY3QgPSBjb25uZWN0X2hlbHBlcjsKKwl0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMgPSAmKGRhdGEtPnRyYW5zcG9ydF9vcHRpb25zKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExpbnV4IHBpcGVzIGNhbiBidWZmZXIgNjU1MzYgYnl0ZXMgYXQgb25jZSAoYW5kIG1vc3QgcGxhdGZvcm1zIGNhbgorICogYnVmZmVyIGxlc3MpLCBzbyBhdHRlbXB0IHJlYWRzIGFuZCB3cml0ZXMgd2l0aCB1cCB0byB0aGF0IHNpemUuCisgKi8KKyNkZWZpbmUgQlVGRkVSU0laRSA2NTUzNgorLyogVGhpcyBzaG91bGQgYmUgZW5vdWdoIHRvIGhvbGQgZGVidWdnaW5nIG1lc3NhZ2UuICovCisjZGVmaW5lIFBCVUZGRVJTSVpFIDgxOTIKKworLyogUHJpbnQgYmlkaXJlY3Rpb25hbCB0cmFuc2ZlciBsb29wIGRlYnVnIG1lc3NhZ2UuICovCitzdGF0aWMgdm9pZCB0cmFuc2Zlcl9kZWJ1Zyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJY2hhciBtc2didWZbUEJVRkZFUlNJWkVdOworCXN0YXRpYyBpbnQgZGVidWdfZW5hYmxlZCA9IC0xOworCisJaWYgKGRlYnVnX2VuYWJsZWQgPCAwKQorCQlkZWJ1Z19lbmFibGVkID0gZ2V0ZW52KCJHSVRfVFJBTlNMT09QX0RFQlVHIikgPyAxIDogMDsKKwlpZiAoIWRlYnVnX2VuYWJsZWQpCisJCXJldHVybjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdnNucHJpbnRmKG1zZ2J1ZiwgUEJVRkZFUlNJWkUsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWZwcmludGYoc3RkZXJyLCAiVHJhbnNmZXIgbG9vcCBkZWJ1Z2dpbmc6ICVzXG4iLCBtc2didWYpOworfQorCisvKiBTdHJlYW0gc3RhdGU6IE1vcmUgZGF0YSBtYXkgYmUgY29taW5nIGluIHRoaXMgZGlyZWN0aW9uLiAqLworI2RlZmluZSBTU1RBVEVfVFJBTlNGRVJJTkcgMAorLyoKKyAqIFN0cmVhbSBzdGF0ZTogTm8gbW9yZSBkYXRhIGNvbWluZyBpbiB0aGlzIGRpcmVjdGlvbiwgZmx1c2hpbmcgcmVzdCBvZgorICogZGF0YS4KKyAqLworI2RlZmluZSBTU1RBVEVfRkxVU0hJTkcgMQorLyogU3RyZWFtIHN0YXRlOiBUcmFuc2ZlciBpbiB0aGlzIGRpcmVjdGlvbiBmaW5pc2hlZC4gKi8KKyNkZWZpbmUgU1NUQVRFX0ZJTklTSEVEIDIKKworI2RlZmluZSBTVEFURV9ORUVEU19SRUFESU5HKHN0YXRlKSAoKHN0YXRlKSA8PSBTU1RBVEVfVFJBTlNGRVJJTkcpCisjZGVmaW5lIFNUQVRFX05FRURTX1dSSVRJTkcoc3RhdGUpICgoc3RhdGUpIDw9IFNTVEFURV9GTFVTSElORykKKyNkZWZpbmUgU1RBVEVfTkVFRFNfQ0xPU0lORyhzdGF0ZSkgKChzdGF0ZSkgPT0gU1NUQVRFX0ZMVVNISU5HKQorCisvKiBVbmlkaXJlY3Rpb25hbCB0cmFuc2Zlci4gKi8KK3N0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciB7CisJLyogU291cmNlICovCisJaW50IHNyYzsKKwkvKiBEZXN0aW5hdGlvbiAqLworCWludCBkZXN0OworCS8qIElzIHNvdXJjZSBzb2NrZXQ/ICovCisJaW50IHNyY19pc19zb2NrOworCS8qIElzIGRlc3RpbmF0aW9uIHNvY2tldD8gKi8KKwlpbnQgZGVzdF9pc19zb2NrOworCS8qIFRyYW5zZmVyIHN0YXRlIChUUkFOU0ZFUklORy9GTFVTSElORy9GSU5JU0hFRCkgKi8KKwlpbnQgc3RhdGU7CisJLyogQnVmZmVyLiAqLworCWNoYXIgYnVmW0JVRkZFUlNJWkVdOworCS8qIEJ1ZmZlciB1c2VkLiAqLworCXNpemVfdCBidWZ1c2U7CisJLyogTmFtZSBvZiBzb3VyY2UuICovCisJY29uc3QgY2hhciAqc3JjX25hbWU7CisJLyogTmFtZSBvZiBkZXN0aW5hdGlvbi4gKi8KKwljb25zdCBjaGFyICpkZXN0X25hbWU7Cit9OworCisvKiBDbG9zZXMgdGhlIHRhcmdldCAoZm9yIHdyaXRpbmcpIGlmIHRyYW5zZmVyIGhhcyBmaW5pc2hlZC4gKi8KK3N0YXRpYyB2b2lkIHVkdF9jbG9zZV9pZl9maW5pc2hlZChzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgKnQpCit7CisJaWYgKFNUQVRFX05FRURTX0NMT1NJTkcodC0+c3RhdGUpICYmICF0LT5idWZ1c2UpIHsKKwkJdC0+c3RhdGUgPSBTU1RBVEVfRklOSVNIRUQ7CisJCWlmICh0LT5kZXN0X2lzX3NvY2spCisJCQlzaHV0ZG93bih0LT5kZXN0LCBTSFVUX1dSKTsKKwkJZWxzZQorCQkJY2xvc2UodC0+ZGVzdCk7CisJCXRyYW5zZmVyX2RlYnVnKCJDbG9zZWQgJXMuIiwgdC0+ZGVzdF9uYW1lKTsKKwl9Cit9CisKKy8qCisgKiBUcmllcyB0byByZWFkIHJlYWQgZGF0YSBmcm9tIHNvdXJjZSBpbnRvIGJ1ZmZlci4gSWYgYnVmZmVyIGlzIGZ1bGwsCisgKiBubyBkYXRhIGlzIHJlYWQuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCB1ZHRfZG9fcmVhZChzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgKnQpCit7CisJc3NpemVfdCBieXRlczsKKworCWlmICh0LT5idWZ1c2UgPT0gQlVGRkVSU0laRSkKKwkJcmV0dXJuIDA7CS8qIE5vIHNwYWNlIGZvciBtb3JlLiAqLworCisJdHJhbnNmZXJfZGVidWcoIiVzIGlzIHJlYWRhYmxlIiwgdC0+c3JjX25hbWUpOworCWJ5dGVzID0gcmVhZCh0LT5zcmMsIHQtPmJ1ZiArIHQtPmJ1ZnVzZSwgQlVGRkVSU0laRSAtIHQtPmJ1ZnVzZSk7CisJaWYgKGJ5dGVzIDwgMCAmJiBlcnJubyAhPSBFV09VTERCTE9DSyAmJiBlcnJubyAhPSBFQUdBSU4gJiYKKwkJZXJybm8gIT0gRUlOVFIpIHsKKwkJZXJyb3IoInJlYWQoJXMpIGZhaWxlZDogJXMiLCB0LT5zcmNfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoYnl0ZXMgPT0gMCkgeworCQl0cmFuc2Zlcl9kZWJ1ZygiJXMgRU9GICh3aXRoICVpIGJ5dGVzIGluIGJ1ZmZlcikiLAorCQkJdC0+c3JjX25hbWUsIHQtPmJ1ZnVzZSk7CisJCXQtPnN0YXRlID0gU1NUQVRFX0ZMVVNISU5HOworCX0gZWxzZSBpZiAoYnl0ZXMgPiAwKSB7CisJCXQtPmJ1ZnVzZSArPSBieXRlczsKKwkJdHJhbnNmZXJfZGVidWcoIlJlYWQgJWkgYnl0ZXMgZnJvbSAlcyAoYnVmZmVyIG5vdyBhdCAlaSkiLAorCQkJKGludClieXRlcywgdC0+c3JjX25hbWUsIChpbnQpdC0+YnVmdXNlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFRyaWVzIHRvIHdyaXRlIGRhdGEgZnJvbSBidWZmZXIgaW50byBkZXN0aW5hdGlvbi4gSWYgYnVmZmVyIGlzIGVtcHR5LAorICogbm8gZGF0YSBpcyB3cml0dGVuLiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgdWR0X2RvX3dyaXRlKHN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqdCkKK3sKKwlzc2l6ZV90IGJ5dGVzOworCisJaWYgKHQtPmJ1ZnVzZSA9PSAwKQorCQlyZXR1cm4gMDsJLyogTm90aGluZyB0byB3cml0ZS4gKi8KKworCXRyYW5zZmVyX2RlYnVnKCIlcyBpcyB3cml0YWJsZSIsIHQtPmRlc3RfbmFtZSk7CisJYnl0ZXMgPSB3cml0ZSh0LT5kZXN0LCB0LT5idWYsIHQtPmJ1ZnVzZSk7CisJaWYgKGJ5dGVzIDwgMCAmJiBlcnJubyAhPSBFV09VTERCTE9DSyAmJiBlcnJubyAhPSBFQUdBSU4gJiYKKwkJZXJybm8gIT0gRUlOVFIpIHsKKwkJZXJyb3IoIndyaXRlKCVzKSBmYWlsZWQ6ICVzIiwgdC0+ZGVzdF9uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmIChieXRlcyA+IDApIHsKKwkJdC0+YnVmdXNlIC09IGJ5dGVzOworCQlpZiAodC0+YnVmdXNlKQorCQkJbWVtbW92ZSh0LT5idWYsIHQtPmJ1ZiArIGJ5dGVzLCB0LT5idWZ1c2UpOworCQl0cmFuc2Zlcl9kZWJ1ZygiV3JvdGUgJWkgYnl0ZXMgdG8gJXMgKGJ1ZmZlciBub3cgYXQgJWkpIiwKKwkJCShpbnQpYnl0ZXMsIHQtPmRlc3RfbmFtZSwgKGludCl0LT5idWZ1c2UpOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKiBTdGF0ZSBvZiBiaWRpcmVjdGlvbmFsIHRyYW5zZmVyIGxvb3AuICovCitzdHJ1Y3QgYmlkaXJlY3Rpb25hbF90cmFuc2Zlcl9zdGF0ZSB7CisJLyogRGlyZWN0aW9uIGZyb20gcHJvZ3JhbSB0byBnaXQuICovCisJc3RydWN0IHVuaWRpcmVjdGlvbmFsX3RyYW5zZmVyIHB0ZzsKKwkvKiBEaXJlY3Rpb24gZnJvbSBnaXQgdG8gcHJvZ3JhbS4gKi8KKwlzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgZ3RwOworfTsKKworc3RhdGljIHZvaWQgKnVkdF9jb3B5X3Rhc2tfcm91dGluZSh2b2lkICp1ZHQpCit7CisJc3RydWN0IHVuaWRpcmVjdGlvbmFsX3RyYW5zZmVyICp0ID0gKHN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqKXVkdDsKKwl3aGlsZSAodC0+c3RhdGUgIT0gU1NUQVRFX0ZJTklTSEVEKSB7CisJCWlmIChTVEFURV9ORUVEU19SRUFESU5HKHQtPnN0YXRlKSkKKwkJCWlmICh1ZHRfZG9fcmVhZCh0KSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKFNUQVRFX05FRURTX1dSSVRJTkcodC0+c3RhdGUpKQorCQkJaWYgKHVkdF9kb193cml0ZSh0KSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKFNUQVRFX05FRURTX0NMT1NJTkcodC0+c3RhdGUpKQorCQkJdWR0X2Nsb3NlX2lmX2ZpbmlzaGVkKHQpOworCX0KKwlyZXR1cm4gdWR0OwkvKiBKdXN0IHNvbWUgbm9uLU5VTEwgdmFsdWUuICovCit9CisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKworLyoKKyAqIEpvaW4gdGhyZWFkLCB3aXRoIGFwcG9yaWF0ZSBlcnJvcnMgb24gZmFpbHVyZS4gTmFtZSBpcyBuYW1lIGZvciB0aGUKKyAqIHRocmVhZCAoZm9yIGVycm9yIG1lc3NhZ2VzKS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0bG9vcF9qb2luKHB0aHJlYWRfdCB0aHJlYWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGVycjsKKwl2b2lkICp0cmV0OworCWVyciA9IHB0aHJlYWRfam9pbih0aHJlYWQsICZ0cmV0KTsKKwlpZiAoIXRyZXQpIHsKKwkJZXJyb3IoIiVzIHRocmVhZCBmYWlsZWQiLCBuYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChlcnIpIHsKKwkJZXJyb3IoIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiLCBuYW1lLCBzdHJlcnJvcihlcnIpKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogU3Bhd24gdGhlIHRyYW5zZmVyIHRhc2tzIGFuZCB0aGVuIHdhaXQgZm9yIHRoZW0uIFJldHVybnMgMCBvbiBzdWNjZXNzLAorICogLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0bG9vcF9zcGF3bndhaXRfdGFza3Moc3RydWN0IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfc3RhdGUgKnMpCit7CisJcHRocmVhZF90IGd0cF90aHJlYWQ7CisJcHRocmVhZF90IHB0Z190aHJlYWQ7CisJaW50IGVycjsKKwlpbnQgcmV0ID0gMDsKKwllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmZ3RwX3RocmVhZCwgTlVMTCwgdWR0X2NvcHlfdGFza19yb3V0aW5lLAorCQkmcy0+Z3RwKTsKKwlpZiAoZXJyKQorCQlkaWUoIkNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhOiAlcyIsIHN0cmVycm9yKGVycikpOworCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZwdGdfdGhyZWFkLCBOVUxMLCB1ZHRfY29weV90YXNrX3JvdXRpbmUsCisJCSZzLT5wdGcpOworCWlmIChlcnIpCisJCWRpZSgiQ2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIiwgc3RyZXJyb3IoZXJyKSk7CisKKwlyZXQgfD0gdGxvb3Bfam9pbihndHBfdGhyZWFkLCAiR2l0IHRvIHByb2dyYW0gY29weSIpOworCXJldCB8PSB0bG9vcF9qb2luKHB0Z190aHJlYWQsICJQcm9ncmFtIHRvIGdpdCBjb3B5Iik7CisJcmV0dXJuIHJldDsKK30KKyNlbHNlCisKKy8qIENsb3NlIHRoZSBzb3VyY2UgYW5kIHRhcmdldCAoZm9yIHdyaXRpbmcpIGZvciB0cmFuc2Zlci4gKi8KK3N0YXRpYyB2b2lkIHVkdF9raWxsX3RyYW5zZmVyKHN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqdCkKK3sKKwl0LT5zdGF0ZSA9IFNTVEFURV9GSU5JU0hFRDsKKwkvKgorCSAqIFNvY2tldCByZWFkIGVuZCBsZWZ0IG9wZW4gaXNuJ3QgYSBkaXNhc3RlciBpZiBub2JvZHkKKwkgKiBhdHRlbXB0cyB0byByZWFkIGZyb20gaXQgKG1pbmd3IGNvbXBhdCBoZWFkZXJzIGRvIG5vdAorCSAqIGhhdmUgU0hVVF9SRCkuLi4KKwkgKgorCSAqIFdlIGNhbid0IGZ1bGx5IGNsb3NlIHRoZSBzb2NrZXQgc2luY2Ugb3RoZXJ3aXNlIGd0cAorCSAqIHRhc2sgd291bGQgZmlyc3QgY2xvc2UgdGhlIHNvY2tldCBpdCBzZW5kcyBkYXRhIHRvCisJICogd2hpbGUgY2xvc2luZyB0aGUgcHRnIGZpbGUgZGVzY3JpcHRvcnMuCisJICovCisJaWYgKCF0LT5zcmNfaXNfc29jaykKKwkJY2xvc2UodC0+c3JjKTsKKwlpZiAodC0+ZGVzdF9pc19zb2NrKQorCQlzaHV0ZG93bih0LT5kZXN0LCBTSFVUX1dSKTsKKwllbHNlCisJCWNsb3NlKHQtPmRlc3QpOworfQorCisvKgorICogSm9pbiBwcm9jZXNzLCB3aXRoIGFwcG9yaWF0ZSBlcnJvcnMgb24gZmFpbHVyZS4gTmFtZSBpcyBuYW1lIGZvciB0aGUKKyAqIHByb2Nlc3MgKGZvciBlcnJvciBtZXNzYWdlcykuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgdGxvb3Bfam9pbihwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IHRyZXQ7CisJaWYgKHdhaXRwaWQocGlkLCAmdHJldCwgMCkgPCAwKSB7CisJCWVycm9yKCIlcyBwcm9jZXNzIGZhaWxlZCB0byB3YWl0OiAlcyIsIG5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIVdJRkVYSVRFRCh0cmV0KSB8fCBXRVhJVFNUQVRVUyh0cmV0KSkgeworCQllcnJvcigiJXMgcHJvY2VzcyBmYWlsZWQiLCBuYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogU3Bhd24gdGhlIHRyYW5zZmVyIHRhc2tzIGFuZCB0aGVuIHdhaXQgZm9yIHRoZW0uIFJldHVybnMgMCBvbiBzdWNjZXNzLAorICogLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0bG9vcF9zcGF3bndhaXRfdGFza3Moc3RydWN0IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfc3RhdGUgKnMpCit7CisJcGlkX3QgcGlkMSwgcGlkMjsKKwlpbnQgcmV0ID0gMDsKKworCS8qIEZvcmsgdGhyZWFkICMxOiBnaXQgdG8gcHJvZ3JhbS4gKi8KKwlwaWQxID0gZm9yaygpOworCWlmIChwaWQxIDwgMCkKKwkJZGllX2Vycm5vKCJDYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIpOworCWVsc2UgaWYgKHBpZDEgPT0gMCkgeworCQl1ZHRfa2lsbF90cmFuc2Zlcigmcy0+cHRnKTsKKwkJZXhpdCh1ZHRfY29weV90YXNrX3JvdXRpbmUoJnMtPmd0cCkgPyAwIDogMSk7CisJfQorCisJLyogRm9yayB0aHJlYWQgIzI6IHByb2dyYW0gdG8gZ2l0LiAqLworCXBpZDIgPSBmb3JrKCk7CisJaWYgKHBpZDIgPCAwKQorCQlkaWVfZXJybm8oIkNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhIik7CisJZWxzZSBpZiAocGlkMiA9PSAwKSB7CisJCXVkdF9raWxsX3RyYW5zZmVyKCZzLT5ndHApOworCQlleGl0KHVkdF9jb3B5X3Rhc2tfcm91dGluZSgmcy0+cHRnKSA/IDAgOiAxKTsKKwl9CisKKwkvKgorCSAqIENsb3NlIGJvdGggc3RyZWFtcyBpbiBwYXJlbnQgYXMgdG8gbm90IGludGVyZmVyZSB3aXRoCisJICogZW5kIG9mIGZpbGUgZGV0ZWN0aW9uIGFuZCB3YWl0IGZvciBib3RoIHRhc2tzIHRvIGZpbmlzaC4KKwkgKi8KKwl1ZHRfa2lsbF90cmFuc2Zlcigmcy0+Z3RwKTsKKwl1ZHRfa2lsbF90cmFuc2Zlcigmcy0+cHRnKTsKKwlyZXQgfD0gdGxvb3Bfam9pbihwaWQxLCAiR2l0IHRvIHByb2dyYW0gY29weSIpOworCXJldCB8PSB0bG9vcF9qb2luKHBpZDIsICJQcm9ncmFtIHRvIGdpdCBjb3B5Iik7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisvKgorICogQ29waWVzIGRhdGEgZnJvbSBzdGRpbiB0byBvdXRwdXQgYW5kIGZyb20gaW5wdXQgdG8gc3Rkb3V0IHNpbXVsdGFuZW91c2x5LgorICogQWRkaXRpb25hbGx5IGZpbHRlcmluZyB0aHJvdWdoIGdpdmVuIGZpbHRlci4gSWYgZmlsdGVyIGlzIE5VTEwsIHVzZXMKKyAqIGlkZW50aXR5IGZpbHRlci4KKyAqLworaW50IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfbG9vcChpbnQgaW5wdXQsIGludCBvdXRwdXQpCit7CisJc3RydWN0IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfc3RhdGUgc3RhdGU7CisKKwkvKiBGaWxsIHRoZSBzdGF0ZSBmaWVsZHMuICovCisJc3RhdGUucHRnLnNyYyA9IGlucHV0OworCXN0YXRlLnB0Zy5kZXN0ID0gMTsKKwlzdGF0ZS5wdGcuc3JjX2lzX3NvY2sgPSAoaW5wdXQgPT0gb3V0cHV0KTsKKwlzdGF0ZS5wdGcuZGVzdF9pc19zb2NrID0gMDsKKwlzdGF0ZS5wdGcuc3RhdGUgPSBTU1RBVEVfVFJBTlNGRVJJTkc7CisJc3RhdGUucHRnLmJ1ZnVzZSA9IDA7CisJc3RhdGUucHRnLnNyY19uYW1lID0gInJlbW90ZSBpbnB1dCI7CisJc3RhdGUucHRnLmRlc3RfbmFtZSA9ICJzdGRvdXQiOworCisJc3RhdGUuZ3RwLnNyYyA9IDA7CisJc3RhdGUuZ3RwLmRlc3QgPSBvdXRwdXQ7CisJc3RhdGUuZ3RwLnNyY19pc19zb2NrID0gMDsKKwlzdGF0ZS5ndHAuZGVzdF9pc19zb2NrID0gKGlucHV0ID09IG91dHB1dCk7CisJc3RhdGUuZ3RwLnN0YXRlID0gU1NUQVRFX1RSQU5TRkVSSU5HOworCXN0YXRlLmd0cC5idWZ1c2UgPSAwOworCXN0YXRlLmd0cC5zcmNfbmFtZSA9ICJzdGRpbiI7CisJc3RhdGUuZ3RwLmRlc3RfbmFtZSA9ICJyZW1vdGUgb3V0cHV0IjsKKworCXJldHVybiB0bG9vcF9zcGF3bndhaXRfdGFza3MoJnN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC5jIGIvdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzMmY0MAotLS0gL2Rldi9udWxsCisrKyBiL3RyYW5zcG9ydC5jCkBAIC0wLDAgKzEsMTI5MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgImZldGNoLXBhY2suaCIKKyNpbmNsdWRlICJzZW5kLXBhY2suaCIKKyNpbmNsdWRlICJ3YWxrZXIuaCIKKyNpbmNsdWRlICJidW5kbGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyogcnN5bmMgc3VwcG9ydCAqLworCisvKgorICogV2UgY29weSBwYWNrZWQtcmVmcyBhbmQgcmVmcy8gaW50byBhIHRlbXBvcmFyeSBmaWxlLCB0aGVuIHJlYWQgdGhlCisgKiBsb29zZSByZWZzIHJlY3Vyc2l2ZWx5IChzb3J0aW5nIHdoZW5ldmVyIHBvc3NpYmxlKSwgYW5kIHRoZW4gaW5zZXJ0aW5nCisgKiB0aG9zZSBwYWNrZWQgcmVmcyB0aGF0IGFyZSBub3QgeWV0IGluIHRoZSBsaXN0IChub3QgdmFsaWRhdGluZywgYnV0CisgKiBhc3N1bWluZyB0aGF0IHRoZSBmaWxlIGlzIHNvcnRlZCkuCisgKgorICogQXBwZWFycyByZWZhY3RvcmluZyB0aGlzIGZyb20gcmVmcy5jIGlzIHRvbyBjdW1iZXJzb21lLgorICovCisKK3N0YXRpYyBpbnQgc3RyX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IGNoYXIgKnMxID0gYTsKKwljb25zdCBjaGFyICpzMiA9IGI7CisKKwlyZXR1cm4gc3RyY21wKHMxLCBzMik7Cit9CisKKy8qIHBhdGgtPmJ1ZiArIG5hbWVfb2Zmc2V0IGlzIGV4cGVjdGVkIHRvIHBvaW50IHRvICJyZWZzLyIgKi8KKworc3RhdGljIGludCByZWFkX2xvb3NlX3JlZnMoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgaW50IG5hbWVfb2Zmc2V0LAorCQlzdHJ1Y3QgcmVmICoqdGFpbCkKK3sKKwlESVIgKmRpciA9IG9wZW5kaXIocGF0aC0+YnVmKTsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlzdHJ1Y3QgeworCQljaGFyICoqZW50cmllczsKKwkJaW50IG5yLCBhbGxvYzsKKwl9IGxpc3Q7CisJaW50IGksIHBhdGhsZW47CisKKwlpZiAoIWRpcikKKwkJcmV0dXJuIC0xOworCisJbWVtc2V0ICgmbGlzdCwgMCwgc2l6ZW9mKGxpc3QpKTsKKworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpKSB7CisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGRlLT5kX25hbWUpKQorCQkJY29udGludWU7CisJCUFMTE9DX0dST1cobGlzdC5lbnRyaWVzLCBsaXN0Lm5yICsgMSwgbGlzdC5hbGxvYyk7CisJCWxpc3QuZW50cmllc1tsaXN0Lm5yKytdID0geHN0cmR1cChkZS0+ZF9uYW1lKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKworCS8qIHNvcnQgdGhlIGxpc3QgKi8KKworCXFzb3J0KGxpc3QuZW50cmllcywgbGlzdC5uciwgc2l6ZW9mKGNoYXIgKiksIHN0cl9jbXApOworCisJcGF0aGxlbiA9IHBhdGgtPmxlbjsKKwlzdHJidWZfYWRkY2gocGF0aCwgJy8nKTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyssIHN0cmJ1Zl9zZXRsZW4ocGF0aCwgcGF0aGxlbiArIDEpKSB7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgbGlzdC5lbnRyaWVzW2ldKTsKKwkJaWYgKHJlYWRfbG9vc2VfcmVmcyhwYXRoLCBuYW1lX29mZnNldCwgdGFpbCkpIHsKKwkJCWludCBmZCA9IG9wZW4ocGF0aC0+YnVmLCBPX1JET05MWSk7CisJCQljaGFyIGJ1ZmZlcls0MF07CisJCQlzdHJ1Y3QgcmVmICpuZXh0OworCisJCQlpZiAoZmQgPCAwKQorCQkJCWNvbnRpbnVlOworCQkJbmV4dCA9IGFsbG9jX3JlZihwYXRoLT5idWYgKyBuYW1lX29mZnNldCk7CisJCQlpZiAocmVhZF9pbl9mdWxsKGZkLCBidWZmZXIsIDQwKSAhPSA0MCB8fAorCQkJCQlnZXRfc2hhMV9oZXgoYnVmZmVyLCBuZXh0LT5vbGRfc2hhMSkpIHsKKwkJCQljbG9zZShmZCk7CisJCQkJZnJlZShuZXh0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNsb3NlKGZkKTsKKwkJCSgqdGFpbCktPm5leHQgPSBuZXh0OworCQkJKnRhaWwgPSBuZXh0OworCQl9CisJfQorCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgcGF0aGxlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKQorCQlmcmVlKGxpc3QuZW50cmllc1tpXSk7CisJZnJlZShsaXN0LmVudHJpZXMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGluc2VydCB0aGUgcGFja2VkIHJlZnMgZm9yIHdoaWNoIG5vIGxvb3NlIHJlZnMgd2VyZSBmb3VuZCAqLworCitzdGF0aWMgdm9pZCBpbnNlcnRfcGFja2VkX3JlZnMoY29uc3QgY2hhciAqcGFja2VkX3JlZnMsIHN0cnVjdCByZWYgKipsaXN0KQoreworCUZJTEUgKmYgPSBmb3BlbihwYWNrZWRfcmVmcywgInIiKTsKKwlzdGF0aWMgY2hhciBidWZmZXJbUEFUSF9NQVhdOworCisJaWYgKCFmKQorCQlyZXR1cm47CisKKwlmb3IgKDs7KSB7CisJCWludCBjbXAgPSBjbXAsIGxlbjsKKworCQlpZiAoIWZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGYpKSB7CisJCQlmY2xvc2UoZik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoaGV4dmFsKGJ1ZmZlclswXSkgPiAweGYpCisJCQljb250aW51ZTsKKwkJbGVuID0gc3RybGVuKGJ1ZmZlcik7CisJCWlmIChsZW4gJiYgYnVmZmVyW2xlbiAtIDFdID09ICdcbicpCisJCQlidWZmZXJbLS1sZW5dID0gJ1wwJzsKKwkJaWYgKGxlbiA8IDQxKQorCQkJY29udGludWU7CisJCXdoaWxlICgoKmxpc3QpLT5uZXh0ICYmCisJCQkJKGNtcCA9IHN0cmNtcChidWZmZXIgKyA0MSwKKwkJCQkgICAgICAoKmxpc3QpLT5uZXh0LT5uYW1lKSkgPiAwKQorCQkJbGlzdCA9ICYoKmxpc3QpLT5uZXh0OworCQlpZiAoISgqbGlzdCktPm5leHQgfHwgY21wIDwgMCkgeworCQkJc3RydWN0IHJlZiAqbmV4dCA9IGFsbG9jX3JlZihidWZmZXIgKyA0MSk7CisJCQlidWZmZXJbNDBdID0gJ1wwJzsKKwkJCWlmIChnZXRfc2hhMV9oZXgoYnVmZmVyLCBuZXh0LT5vbGRfc2hhMSkpIHsKKwkJCQl3YXJuaW5nICgiaW52YWxpZCBTSEEtMTogJXMiLCBidWZmZXIpOworCQkJCWZyZWUobmV4dCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQluZXh0LT5uZXh0ID0gKCpsaXN0KS0+bmV4dDsKKwkJCSgqbGlzdCktPm5leHQgPSBuZXh0OworCQkJbGlzdCA9ICYoKmxpc3QpLT5uZXh0OworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfdXBzdHJlYW1zKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcywKKwlpbnQgcHJldGVuZCkKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljb25zdCBjaGFyICpsb2NhbG5hbWU7CisJCWNvbnN0IGNoYXIgKnRtcDsKKwkJY29uc3QgY2hhciAqcmVtb3RlbmFtZTsKKwkJdW5zaWduZWQgY2hhciBzaGFbMjBdOworCQlpbnQgZmxhZyA9IDA7CisJCS8qCisJCSAqIENoZWNrIHN1aXRhYmlsaXR5IGZvciB0cmFja2luZy4gTXVzdCBiZSBzdWNjZXNzZnVsIC8KKwkJICogYWxyZWFkeSB1cC10by1kYXRlIHJlZiBjcmVhdGUvbW9kaWZ5IChub3QgZGVsZXRlKS4KKwkJICovCisJCWlmIChyZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX09LICYmCisJCQlyZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJY29udGludWU7CisJCWlmICghcmVmLT5wZWVyX3JlZikKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfbnVsbF9zaGExKHJlZi0+bmV3X3NoYTEpKQorCQkJY29udGludWU7CisKKwkJLyogRm9sbG93IHN5bWJvbGljIHJlZnMgKG1haW5seSBmb3IgSEVBRCkuICovCisJCWxvY2FsbmFtZSA9IHJlZi0+cGVlcl9yZWYtPm5hbWU7CisJCXJlbW90ZW5hbWUgPSByZWYtPm5hbWU7CisJCXRtcCA9IHJlc29sdmVfcmVmX3Vuc2FmZShsb2NhbG5hbWUsIHNoYSwgMSwgJmZsYWcpOworCQlpZiAodG1wICYmIGZsYWcgJiBSRUZfSVNTWU1SRUYgJiYKKwkJCSFwcmVmaXhjbXAodG1wLCAicmVmcy9oZWFkcy8iKSkKKwkJCWxvY2FsbmFtZSA9IHRtcDsKKworCQkvKiBCb3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBiZSBsb2NhbCBicmFuY2hlcy4gKi8KKwkJaWYgKCFsb2NhbG5hbWUgfHwgcHJlZml4Y21wKGxvY2FsbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCQljb250aW51ZTsKKwkJaWYgKCFyZW1vdGVuYW1lIHx8IHByZWZpeGNtcChyZW1vdGVuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcHJldGVuZCkKKwkJCWluc3RhbGxfYnJhbmNoX2NvbmZpZyhCUkFOQ0hfQ09ORklHX1ZFUkJPU0UsCisJCQkJbG9jYWxuYW1lICsgMTEsIHRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lLAorCQkJCXJlbW90ZW5hbWUpOworCQllbHNlCisJCQlwcmludGYoIldvdWxkIHNldCB1cHN0cmVhbSBvZiAnJXMnIHRvICclcycgb2YgJyVzJ1xuIiwKKwkJCQlsb2NhbG5hbWUgKyAxMSwgcmVtb3RlbmFtZSArIDExLAorCQkJCXRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyc3luY191cmwoY29uc3QgY2hhciAqdXJsKQoreworCXJldHVybiBwcmVmaXhjbXAodXJsLCAicnN5bmM6Ly8iKSA/IHNraXBfcHJlZml4KHVybCwgInJzeW5jOiIpIDogdXJsOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfdmlhX3JzeW5jKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIHRlbXBfZGlyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlZiBkdW1teSA9IHtOVUxMfSwgKnRhaWwgPSAmZHVtbXk7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcnN5bmM7CisJY29uc3QgY2hhciAqYXJnc1s1XTsKKwlpbnQgdGVtcF9kaXJfbGVuOworCisJaWYgKGZvcl9wdXNoKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIGNvcHkgdGhlIHJlZnMgdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KKworCXN0cmJ1Zl9hZGRzdHIoJnRlbXBfZGlyLCBnaXRfcGF0aCgicnN5bmMtcmVmcy1YWFhYWFgiKSk7CisJaWYgKCFta2R0ZW1wKHRlbXBfZGlyLmJ1ZikpCisJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBtYWtlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKKwl0ZW1wX2Rpcl9sZW4gPSB0ZW1wX2Rpci5sZW47CisKKwlzdHJidWZfYWRkc3RyKCZidWYsIHJzeW5jX3VybCh0cmFuc3BvcnQtPnVybCkpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIi9yZWZzIik7CisKKwltZW1zZXQoJnJzeW5jLCAwLCBzaXplb2YocnN5bmMpKTsKKwlyc3luYy5hcmd2ID0gYXJnczsKKwlyc3luYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlhcmdzWzBdID0gInJzeW5jIjsKKwlhcmdzWzFdID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA+IDEpID8gIi1ydiIgOiAiLXIiOworCWFyZ3NbMl0gPSBidWYuYnVmOworCWFyZ3NbM10gPSB0ZW1wX2Rpci5idWY7CisJYXJnc1s0XSA9IE5VTEw7CisKKwlpZiAocnVuX2NvbW1hbmQoJnJzeW5jKSkKKwkJZGllICgiQ291bGQgbm90IHJ1biByc3luYyB0byBnZXQgcmVmcyIpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcnN5bmNfdXJsKHRyYW5zcG9ydC0+dXJsKSk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCAiL3BhY2tlZC1yZWZzIik7CisKKwlhcmdzWzJdID0gYnVmLmJ1ZjsKKworCWlmIChydW5fY29tbWFuZCgmcnN5bmMpKQorCQlkaWUgKCJDb3VsZCBub3QgcnVuIHJzeW5jIHRvIGdldCByZWZzIik7CisKKwkvKiByZWFkIHRoZSBjb3BpZWQgcmVmcyAqLworCisJc3RyYnVmX2FkZHN0cigmdGVtcF9kaXIsICIvcmVmcyIpOworCXJlYWRfbG9vc2VfcmVmcygmdGVtcF9kaXIsIHRlbXBfZGlyX2xlbiArIDEsICZ0YWlsKTsKKwlzdHJidWZfc2V0bGVuKCZ0ZW1wX2RpciwgdGVtcF9kaXJfbGVuKTsKKworCXRhaWwgPSAmZHVtbXk7CisJc3RyYnVmX2FkZHN0cigmdGVtcF9kaXIsICIvcGFja2VkLXJlZnMiKTsKKwlpbnNlcnRfcGFja2VkX3JlZnModGVtcF9kaXIuYnVmLCAmdGFpbCk7CisJc3RyYnVmX3NldGxlbigmdGVtcF9kaXIsIHRlbXBfZGlyX2xlbik7CisKKwlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmdGVtcF9kaXIsIDApKQorCQl3YXJuaW5nICgiRXJyb3IgcmVtb3ZpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlcy4iLAorCQkJCXRlbXBfZGlyLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdGVtcF9kaXIpOworCisJcmV0dXJuIGR1bW15Lm5leHQ7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfb2Jqc192aWFfcnN5bmMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJCWludCBucl9vYmpzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyByc3luYzsKKwljb25zdCBjaGFyICphcmdzWzhdOworCWludCByZXN1bHQ7CisKKwlzdHJidWZfYWRkc3RyKCZidWYsIHJzeW5jX3VybCh0cmFuc3BvcnQtPnVybCkpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIi9vYmplY3RzLyIpOworCisJbWVtc2V0KCZyc3luYywgMCwgc2l6ZW9mKHJzeW5jKSk7CisJcnN5bmMuYXJndiA9IGFyZ3M7CisJcnN5bmMuc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJYXJnc1swXSA9ICJyc3luYyI7CisJYXJnc1sxXSA9ICh0cmFuc3BvcnQtPnZlcmJvc2UgPiAxKSA/ICItcnYiIDogIi1yIjsKKwlhcmdzWzJdID0gIi0taWdub3JlLWV4aXN0aW5nIjsKKwlhcmdzWzNdID0gIi0tZXhjbHVkZSI7CisJYXJnc1s0XSA9ICJpbmZvIjsKKwlhcmdzWzVdID0gYnVmLmJ1ZjsKKwlhcmdzWzZdID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwlhcmdzWzddID0gTlVMTDsKKworCS8qIE5FRURTV09SSzogaGFuZGxlIG9uZSBsZXZlbCBvZiBhbHRlcm5hdGVzICovCisJcmVzdWx0ID0gcnVuX2NvbW1hbmQoJnJzeW5jKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3cml0ZV9vbmVfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCWludCBmbGFncywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSBkYXRhOworCWludCBsZW4gPSBidWYtPmxlbjsKKwlGSUxFICpmOworCisJLyogd2hlbiBjYWxsZWQgdmlhIGZvcl9lYWNoX3JlZigpLCBmbGFncyBpcyBub24temVybyAqLworCWlmIChmbGFncyAmJiBwcmVmaXhjbXAobmFtZSwgInJlZnMvaGVhZHMvIikgJiYKKwkJCXByZWZpeGNtcChuYW1lLCAicmVmcy90YWdzLyIpKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9hZGRzdHIoYnVmLCBuYW1lKTsKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhidWYtPmJ1ZikgfHwKKwkJCSEoZiA9IGZvcGVuKGJ1Zi0+YnVmLCAidyIpKSB8fAorCQkJZnByaW50ZihmLCAiJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKSA8IDAgfHwKKwkJCWZjbG9zZShmKSkKKwkJcmV0dXJuIGVycm9yKCJwcm9ibGVtcyB3cml0aW5nIHRlbXBvcmFyeSBmaWxlICVzIiwgYnVmLT5idWYpOworCXN0cmJ1Zl9zZXRsZW4oYnVmLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX3JlZnNfdG9fdGVtcF9kaXIoc3RydWN0IHN0cmJ1ZiAqdGVtcF9kaXIsCisJCWludCByZWZzcGVjX25yLCBjb25zdCBjaGFyICoqcmVmc3BlYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByZWZzcGVjX25yOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY2hhciAqcmVmOworCisJCWlmIChkd2ltX3JlZihyZWZzcGVjW2ldLCBzdHJsZW4ocmVmc3BlY1tpXSksIHNoYTEsICZyZWYpICE9IDEpCisJCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBnZXQgcmVmICVzIiwgcmVmc3BlY1tpXSk7CisKKwkJaWYgKHdyaXRlX29uZV9yZWYocmVmLCBzaGExLCAwLCB0ZW1wX2RpcikpIHsKKwkJCWZyZWUocmVmKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlmcmVlKHJlZik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJzeW5jX3RyYW5zcG9ydF9wdXNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgdGVtcF9kaXIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmVzdWx0ID0gMCwgaTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyByc3luYzsKKwljb25zdCBjaGFyICphcmdzWzEwXTsKKworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUikKKwkJcmV0dXJuIGVycm9yKCJyc3luYyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBtaXJyb3IgbW9kZSIpOworCisJLyogZmlyc3QgcHVzaCB0aGUgb2JqZWN0cyAqLworCisJc3RyYnVmX2FkZHN0cigmYnVmLCByc3luY191cmwodHJhbnNwb3J0LT51cmwpKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJy8nKTsKKworCW1lbXNldCgmcnN5bmMsIDAsIHNpemVvZihyc3luYykpOworCXJzeW5jLmFyZ3YgPSBhcmdzOworCXJzeW5jLnN0ZG91dF90b19zdGRlcnIgPSAxOworCWkgPSAwOworCWFyZ3NbaSsrXSA9ICJyc3luYyI7CisJYXJnc1tpKytdID0gIi1hIjsKKwlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOKQorCQlhcmdzW2krK10gPSAiLS1kcnktcnVuIjsKKwlpZiAodHJhbnNwb3J0LT52ZXJib3NlID4gMSkKKwkJYXJnc1tpKytdID0gIi12IjsKKwlhcmdzW2krK10gPSAiLS1pZ25vcmUtZXhpc3RpbmciOworCWFyZ3NbaSsrXSA9ICItLWV4Y2x1ZGUiOworCWFyZ3NbaSsrXSA9ICJpbmZvIjsKKwlhcmdzW2krK10gPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOworCWFyZ3NbaSsrXSA9IGJ1Zi5idWY7CisJYXJnc1tpKytdID0gTlVMTDsKKworCWlmIChydW5fY29tbWFuZCgmcnN5bmMpKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBwdXNoIG9iamVjdHMgdG8gJXMiLAorCQkJCXJzeW5jX3VybCh0cmFuc3BvcnQtPnVybCkpOworCisJLyogY29weSB0aGUgcmVmcyB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeTsgdGhleSBjb3VsZCBiZSBwYWNrZWQuICovCisKKwlzdHJidWZfYWRkc3RyKCZ0ZW1wX2RpciwgZ2l0X3BhdGgoInJzeW5jLXJlZnMtWFhYWFhYIikpOworCWlmICghbWtkdGVtcCh0ZW1wX2Rpci5idWYpKQorCQlkaWVfZXJybm8gKCJDb3VsZCBub3QgbWFrZSB0ZW1wb3JhcnkgZGlyZWN0b3J5Iik7CisJc3RyYnVmX2FkZGNoKCZ0ZW1wX2RpciwgJy8nKTsKKworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCkgeworCQlpZiAoZm9yX2VhY2hfcmVmKHdyaXRlX29uZV9yZWYsICZ0ZW1wX2RpcikpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmICh3cml0ZV9yZWZzX3RvX3RlbXBfZGlyKCZ0ZW1wX2RpciwgcmVmc3BlY19uciwgcmVmc3BlYykpCisJCXJldHVybiAtMTsKKworCWkgPSAyOworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4pCisJCWFyZ3NbaSsrXSA9ICItLWRyeS1ydW4iOworCWlmICghKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRk9SQ0UpKQorCQlhcmdzW2krK10gPSAiLS1pZ25vcmUtZXhpc3RpbmciOworCWFyZ3NbaSsrXSA9IHRlbXBfZGlyLmJ1ZjsKKwlhcmdzW2krK10gPSByc3luY191cmwodHJhbnNwb3J0LT51cmwpOworCWFyZ3NbaSsrXSA9IE5VTEw7CisJaWYgKHJ1bl9jb21tYW5kKCZyc3luYykpCisJCXJlc3VsdCA9IGVycm9yKCJDb3VsZCBub3QgcHVzaCB0byAlcyIsCisJCQkJcnN5bmNfdXJsKHRyYW5zcG9ydC0+dXJsKSk7CisKKwlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmdGVtcF9kaXIsIDApKQorCQl3YXJuaW5nICgiQ291bGQgbm90IHJlbW92ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzLiIsCisJCQkJdGVtcF9kaXIuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0ZW1wX2Rpcik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgYnVuZGxlX3RyYW5zcG9ydF9kYXRhIHsKKwlpbnQgZmQ7CisJc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOworfTsKKworc3RhdGljIHN0cnVjdCByZWYgKmdldF9yZWZzX2Zyb21fYnVuZGxlKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBidW5kbGVfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHJlZiAqcmVzdWx0ID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChmb3JfcHVzaCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZGF0YS0+ZmQgPiAwKQorCQljbG9zZShkYXRhLT5mZCk7CisJZGF0YS0+ZmQgPSByZWFkX2J1bmRsZV9oZWFkZXIodHJhbnNwb3J0LT51cmwsICZkYXRhLT5oZWFkZXIpOworCWlmIChkYXRhLT5mZCA8IDApCisJCWRpZSAoIkNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnLiIsIHRyYW5zcG9ydC0+dXJsKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aGVhZGVyLnJlZmVyZW5jZXMubnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2xpc3RfZW50cnkgKmUgPSBkYXRhLT5oZWFkZXIucmVmZXJlbmNlcy5saXN0ICsgaTsKKwkJc3RydWN0IHJlZiAqcmVmID0gYWxsb2NfcmVmKGUtPm5hbWUpOworCQloYXNoY3B5KHJlZi0+b2xkX3NoYTEsIGUtPnNoYTEpOworCQlyZWYtPm5leHQgPSByZXN1bHQ7CisJCXJlc3VsdCA9IHJlZjsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBmZXRjaF9yZWZzX2Zyb21fYnVuZGxlKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSAgICAgICBpbnQgbnJfaGVhZHMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKK3sKKwlzdHJ1Y3QgYnVuZGxlX3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXJldHVybiB1bmJ1bmRsZSgmZGF0YS0+aGVhZGVyLCBkYXRhLT5mZCwKKwkJCXRyYW5zcG9ydC0+cHJvZ3Jlc3MgPyBCVU5ETEVfVkVSQk9TRSA6IDApOworfQorCitzdGF0aWMgaW50IGNsb3NlX2J1bmRsZShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGJ1bmRsZV90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpZiAoZGF0YS0+ZmQgPiAwKQorCQljbG9zZShkYXRhLT5mZCk7CisJZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSB7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfb3B0aW9ucyBvcHRpb25zOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uOworCWludCBmZFsyXTsKKwl1bnNpZ25lZCBnb3RfcmVtb3RlX2hlYWRzIDogMTsKKwlzdHJ1Y3QgZXh0cmFfaGF2ZV9vYmplY3RzIGV4dHJhX2hhdmU7Cit9OworCitzdGF0aWMgaW50IHNldF9naXRfb3B0aW9uKHN0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgKm9wdHMsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKG5hbWUsIFRSQU5TX09QVF9VUExPQURQQUNLKSkgeworCQlvcHRzLT51cGxvYWRwYWNrID0gdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfUkVDRUlWRVBBQ0spKSB7CisJCW9wdHMtPnJlY2VpdmVwYWNrID0gdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfVEhJTikpIHsKKwkJb3B0cy0+dGhpbiA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfRk9MTE9XVEFHUykpIHsKKwkJb3B0cy0+Zm9sbG93dGFncyA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfS0VFUCkpIHsKKwkJb3B0cy0+a2VlcCA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfREVQVEgpKSB7CisJCWlmICghdmFsdWUpCisJCQlvcHRzLT5kZXB0aCA9IDA7CisJCWVsc2UgeworCQkJY2hhciAqZW5kOworCQkJb3B0cy0+ZGVwdGggPSBzdHJ0b2wodmFsdWUsICZlbmQsIDApOworCQkJaWYgKCplbmQpCisJCQkJZGllKCJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciLCB2YWx1ZSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNvbm5lY3Rfc2V0dXAoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgZm9yX3B1c2gsIGludCB2ZXJib3NlKQoreworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisKKwlpZiAoZGF0YS0+Y29ubikKKwkJcmV0dXJuIDA7CisKKwlkYXRhLT5jb25uID0gZ2l0X2Nvbm5lY3QoZGF0YS0+ZmQsIHRyYW5zcG9ydC0+dXJsLAorCQkJCSBmb3JfcHVzaCA/IGRhdGEtPm9wdGlvbnMucmVjZWl2ZXBhY2sgOgorCQkJCSBkYXRhLT5vcHRpb25zLnVwbG9hZHBhY2ssCisJCQkJIHZlcmJvc2UgPyBDT05ORUNUX1ZFUkJPU0UgOiAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfdmlhX2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgZm9yX3B1c2gpCit7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3QgcmVmICpyZWZzOworCisJY29ubmVjdF9zZXR1cCh0cmFuc3BvcnQsIGZvcl9wdXNoLCAwKTsKKwlnZXRfcmVtb3RlX2hlYWRzKGRhdGEtPmZkWzBdLCAmcmVmcywKKwkJCSBmb3JfcHVzaCA/IFJFRl9OT1JNQUwgOiAwLCAmZGF0YS0+ZXh0cmFfaGF2ZSk7CisJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDE7CisKKwlyZXR1cm4gcmVmczsKK30KKworc3RhdGljIGludCBmZXRjaF9yZWZzX3ZpYV9wYWNrKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSAgICAgICBpbnQgbnJfaGVhZHMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKK3sKKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzb3VnaHQgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwljb25zdCBzdHJ1Y3QgcmVmICpyZWZzOworCWNoYXIgKmRlc3QgPSB4c3RyZHVwKHRyYW5zcG9ydC0+dXJsKTsKKwlzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzIGFyZ3M7CisJaW50IGk7CisJc3RydWN0IHJlZiAqcmVmc190bXAgPSBOVUxMOworCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFyZ3MudXBsb2FkcGFjayA9IGRhdGEtPm9wdGlvbnMudXBsb2FkcGFjazsKKwlhcmdzLmtlZXBfcGFjayA9IGRhdGEtPm9wdGlvbnMua2VlcDsKKwlhcmdzLmxvY2tfcGFjayA9IDE7CisJYXJncy51c2VfdGhpbl9wYWNrID0gZGF0YS0+b3B0aW9ucy50aGluOworCWFyZ3MuaW5jbHVkZV90YWcgPSBkYXRhLT5vcHRpb25zLmZvbGxvd3RhZ3M7CisJYXJncy52ZXJib3NlID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA+IDEpOworCWFyZ3MucXVpZXQgPSAodHJhbnNwb3J0LT52ZXJib3NlIDwgMCk7CisJYXJncy5ub19wcm9ncmVzcyA9ICF0cmFuc3BvcnQtPnByb2dyZXNzOworCWFyZ3MuZGVwdGggPSBkYXRhLT5vcHRpb25zLmRlcHRoOworCisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCXN0cmluZ19saXN0X2FwcGVuZCgmc291Z2h0LCB0b19mZXRjaFtpXS0+bmFtZSk7CisKKwlpZiAoIWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMpIHsKKwkJY29ubmVjdF9zZXR1cCh0cmFuc3BvcnQsIDAsIDApOworCQlnZXRfcmVtb3RlX2hlYWRzKGRhdGEtPmZkWzBdLCAmcmVmc190bXAsIDAsIE5VTEwpOworCQlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMTsKKwl9CisKKwlyZWZzID0gZmV0Y2hfcGFjaygmYXJncywgZGF0YS0+ZmQsIGRhdGEtPmNvbm4sCisJCQkgIHJlZnNfdG1wID8gcmVmc190bXAgOiB0cmFuc3BvcnQtPnJlbW90ZV9yZWZzLAorCQkJICBkZXN0LCAmc291Z2h0LCAmdHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlKTsKKwljbG9zZShkYXRhLT5mZFswXSk7CisJY2xvc2UoZGF0YS0+ZmRbMV0pOworCWlmIChmaW5pc2hfY29ubmVjdChkYXRhLT5jb25uKSkKKwkJcmVmcyA9IE5VTEw7CisJZGF0YS0+Y29ubiA9IE5VTEw7CisJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDA7CisKKwlmcmVlX3JlZnMocmVmc190bXApOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJnNvdWdodCwgMCk7CisJZnJlZShkZXN0KTsKKwlyZXR1cm4gKHJlZnMgPyAwIDogLTEpOworfQorCitzdGF0aWMgaW50IHB1c2hfaGFkX2Vycm9ycyhzdHJ1Y3QgcmVmICpyZWYpCit7CisJZm9yICg7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN3aXRjaCAocmVmLT5zdGF0dXMpIHsKKwkJY2FzZSBSRUZfU1RBVFVTX05PTkU6CisJCWNhc2UgUkVGX1NUQVRVU19VUFRPREFURToKKwkJY2FzZSBSRUZfU1RBVFVTX09LOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHRyYW5zcG9ydF9yZWZzX3B1c2hlZChzdHJ1Y3QgcmVmICpyZWYpCit7CisJZm9yICg7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN3aXRjaChyZWYtPnN0YXR1cykgeworCQljYXNlIFJFRl9TVEFUVVNfTk9ORToKKwkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCB0cmFuc3BvcnRfdXBkYXRlX3RyYWNraW5nX3JlZihzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWYgKnJlZiwgaW50IHZlcmJvc2UpCit7CisJc3RydWN0IHJlZnNwZWMgcnM7CisKKwlpZiAocmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19PSyAmJiByZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQlyZXR1cm47CisKKwlycy5zcmMgPSByZWYtPm5hbWU7CisJcnMuZHN0ID0gTlVMTDsKKworCWlmICghcmVtb3RlX2ZpbmRfdHJhY2tpbmcocmVtb3RlLCAmcnMpKSB7CisJCWlmICh2ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJ1cGRhdGluZyBsb2NhbCB0cmFja2luZyByZWYgJyVzJ1xuIiwgcnMuZHN0KTsKKwkJaWYgKHJlZi0+ZGVsZXRpb24pIHsKKwkJCWRlbGV0ZV9yZWYocnMuZHN0LCBOVUxMLCAwKTsKKwkJfSBlbHNlCisJCQl1cGRhdGVfcmVmKCJ1cGRhdGUgYnkgcHVzaCIsIHJzLmRzdCwKKwkJCQkJcmVmLT5uZXdfc2hhMSwgTlVMTCwgMCwgMCk7CisJCWZyZWUocnMuZHN0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3JlZl9zdGF0dXMoY2hhciBmbGFnLCBjb25zdCBjaGFyICpzdW1tYXJ5LCBzdHJ1Y3QgcmVmICp0bywgc3RydWN0IHJlZiAqZnJvbSwgY29uc3QgY2hhciAqbXNnLCBpbnQgcG9yY2VsYWluKQoreworCWlmIChwb3JjZWxhaW4pIHsKKwkJaWYgKGZyb20pCisJCQlmcHJpbnRmKHN0ZG91dCwgIiVjXHQlczolc1x0IiwgZmxhZywgZnJvbS0+bmFtZSwgdG8tPm5hbWUpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZG91dCwgIiVjXHQ6JXNcdCIsIGZsYWcsIHRvLT5uYW1lKTsKKwkJaWYgKG1zZykKKwkJCWZwcmludGYoc3Rkb3V0LCAiJXMgKCVzKVxuIiwgc3VtbWFyeSwgbXNnKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRvdXQsICIlc1xuIiwgc3VtbWFyeSk7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICIgJWMgJS0qcyAiLCBmbGFnLCBUUkFOU1BPUlRfU1VNTUFSWV9XSURUSCwgc3VtbWFyeSk7CisJCWlmIChmcm9tKQorCQkJZnByaW50ZihzdGRlcnIsICIlcyAtPiAlcyIsIHByZXR0aWZ5X3JlZm5hbWUoZnJvbS0+bmFtZSksIHByZXR0aWZ5X3JlZm5hbWUodG8tPm5hbWUpKTsKKwkJZWxzZQorCQkJZnB1dHMocHJldHRpZnlfcmVmbmFtZSh0by0+bmFtZSksIHN0ZGVycik7CisJCWlmIChtc2cpIHsKKwkJCWZwdXRzKCIgKCIsIHN0ZGVycik7CisJCQlmcHV0cyhtc2csIHN0ZGVycik7CisJCQlmcHV0YygnKScsIHN0ZGVycik7CisJCX0KKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzdGF0dXNfYWJicmV2KHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0pCit7CisJcmV0dXJuIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X29rX3JlZl9zdGF0dXMoc3RydWN0IHJlZiAqcmVmLCBpbnQgcG9yY2VsYWluKQoreworCWlmIChyZWYtPmRlbGV0aW9uKQorCQlwcmludF9yZWZfc3RhdHVzKCctJywgIltkZWxldGVkXSIsIHJlZiwgTlVMTCwgTlVMTCwgcG9yY2VsYWluKTsKKwllbHNlIGlmIChpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkpCisJCXByaW50X3JlZl9zdGF0dXMoJyonLAorCQkJKCFwcmVmaXhjbXAocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpID8gIltuZXcgdGFnXSIgOgorCQkJIltuZXcgYnJhbmNoXSIpLAorCQkJcmVmLCByZWYtPnBlZXJfcmVmLCBOVUxMLCBwb3JjZWxhaW4pOworCWVsc2UgeworCQljaGFyIHF1aWNrcmVmWzg0XTsKKwkJY2hhciB0eXBlOworCQljb25zdCBjaGFyICptc2c7CisKKwkJc3RyY3B5KHF1aWNrcmVmLCBzdGF0dXNfYWJicmV2KHJlZi0+b2xkX3NoYTEpKTsKKwkJaWYgKHJlZi0+bm9uZmFzdGZvcndhcmQpIHsKKwkJCXN0cmNhdChxdWlja3JlZiwgIi4uLiIpOworCQkJdHlwZSA9ICcrJzsKKwkJCW1zZyA9ICJmb3JjZWQgdXBkYXRlIjsKKwkJfSBlbHNlIHsKKwkJCXN0cmNhdChxdWlja3JlZiwgIi4uIik7CisJCQl0eXBlID0gJyAnOworCQkJbXNnID0gTlVMTDsKKwkJfQorCQlzdHJjYXQocXVpY2tyZWYsIHN0YXR1c19hYmJyZXYocmVmLT5uZXdfc2hhMSkpOworCisJCXByaW50X3JlZl9zdGF0dXModHlwZSwgcXVpY2tyZWYsIHJlZiwgcmVmLT5wZWVyX3JlZiwgbXNnLCBwb3JjZWxhaW4pOworCX0KK30KKworc3RhdGljIGludCBwcmludF9vbmVfcHVzaF9zdGF0dXMoc3RydWN0IHJlZiAqcmVmLCBjb25zdCBjaGFyICpkZXN0LCBpbnQgY291bnQsIGludCBwb3JjZWxhaW4pCit7CisJaWYgKCFjb3VudCkKKwkJZnByaW50Zihwb3JjZWxhaW4gPyBzdGRvdXQgOiBzdGRlcnIsICJUbyAlc1xuIiwgZGVzdCk7CisKKwlzd2l0Y2gocmVmLT5zdGF0dXMpIHsKKwljYXNlIFJFRl9TVEFUVVNfTk9ORToKKwkJcHJpbnRfcmVmX3N0YXR1cygnWCcsICJbbm8gbWF0Y2hdIiwgcmVmLCBOVUxMLCBOVUxMLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PREVMRVRFOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZWplY3RlZF0iLCByZWYsIE5VTEwsCisJCQkJCQkgInJlbW90ZSBkb2VzIG5vdCBzdXBwb3J0IGRlbGV0aW5nIHJlZnMiLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCXByaW50X3JlZl9zdGF0dXMoJz0nLCAiW3VwIHRvIGRhdGVdIiwgcmVmLAorCQkJCQkJIHJlZi0+cGVlcl9yZWYsIE5VTEwsIHBvcmNlbGFpbik7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ6CisJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlamVjdGVkXSIsIHJlZiwgcmVmLT5wZWVyX3JlZiwKKwkJCQkJCSAibm9uLWZhc3QtZm9yd2FyZCIsIHBvcmNlbGFpbik7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19SRU1PVEVfUkVKRUNUOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZW1vdGUgcmVqZWN0ZWRdIiwgcmVmLAorCQkJCQkJIHJlZi0+ZGVsZXRpb24gPyBOVUxMIDogcmVmLT5wZWVyX3JlZiwKKwkJCQkJCSByZWYtPnJlbW90ZV9zdGF0dXMsIHBvcmNlbGFpbik7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JUOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZW1vdGUgZmFpbHVyZV0iLCByZWYsCisJCQkJCQkgcmVmLT5kZWxldGlvbiA/IE5VTEwgOiByZWYtPnBlZXJfcmVmLAorCQkJCQkJICJyZW1vdGUgZmFpbGVkIHRvIHJlcG9ydCBzdGF0dXMiLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfT0s6CisJCXByaW50X29rX3JlZl9zdGF0dXMocmVmLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCB0cmFuc3BvcnRfcHJpbnRfcHVzaF9zdGF0dXMoY29uc3QgY2hhciAqZGVzdCwgc3RydWN0IHJlZiAqcmVmcywKKwkJCQkgIGludCB2ZXJib3NlLCBpbnQgcG9yY2VsYWluLCBpbnQgKm5vbmZhc3Rmb3J3YXJkKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlpbnQgbiA9IDA7CisJdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworCWNoYXIgKmhlYWQ7CisKKwloZWFkID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCBoZWFkX3NoYTEsIDEsIE5VTEwpOworCisJaWYgKHZlcmJvc2UpIHsKKwkJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJCWlmIChyZWYtPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJCW4gKz0gcHJpbnRfb25lX3B1c2hfc3RhdHVzKHJlZiwgZGVzdCwgbiwgcG9yY2VsYWluKTsKKwl9CisKKwlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQlpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19PSykKKwkJCW4gKz0gcHJpbnRfb25lX3B1c2hfc3RhdHVzKHJlZiwgZGVzdCwgbiwgcG9yY2VsYWluKTsKKworCSpub25mYXN0Zm9yd2FyZCA9IDA7CisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAocmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19OT05FICYmCisJCSAgICByZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX1VQVE9EQVRFICYmCisJCSAgICByZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX09LKQorCQkJbiArPSBwcmludF9vbmVfcHVzaF9zdGF0dXMocmVmLCBkZXN0LCBuLCBwb3JjZWxhaW4pOworCQlpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQgJiYKKwkJICAgICpub25mYXN0Zm9yd2FyZCAhPSBOT05fRkZfSEVBRCkgeworCQkJaWYgKCFzdHJjbXAoaGVhZCwgcmVmLT5uYW1lKSkKKwkJCQkqbm9uZmFzdGZvcndhcmQgPSBOT05fRkZfSEVBRDsKKwkJCWVsc2UKKwkJCQkqbm9uZmFzdGZvcndhcmQgPSBOT05fRkZfT1RIRVI7CisJCX0KKwl9Cit9CisKK3ZvaWQgdHJhbnNwb3J0X3ZlcmlmeV9yZW1vdGVfbmFtZXMoaW50IG5yX2hlYWRzLCBjb25zdCBjaGFyICoqaGVhZHMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaGVhZHM7IGkrKykgeworCQljb25zdCBjaGFyICpsb2NhbCA9IGhlYWRzW2ldOworCQljb25zdCBjaGFyICpyZW1vdGUgPSBzdHJyY2hyKGhlYWRzW2ldLCAnOicpOworCisJCWlmICgqbG9jYWwgPT0gJysnKQorCQkJbG9jYWwrKzsKKworCQkvKiBBIG1hdGNoaW5nIHJlZnNwZWMgaXMgb2theS4gICovCisJCWlmIChyZW1vdGUgPT0gbG9jYWwgJiYgcmVtb3RlWzFdID09ICdcMCcpCisJCQljb250aW51ZTsKKworCQlyZW1vdGUgPSByZW1vdGUgPyAocmVtb3RlICsgMSkgOiBsb2NhbDsKKwkJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlbW90ZSwKKwkJCQlSRUZOQU1FX0FMTE9XX09ORUxFVkVMfFJFRk5BTUVfUkVGU1BFQ19QQVRURVJOKSkKKwkJCWRpZSgicmVtb3RlIHBhcnQgb2YgcmVmc3BlYyBpcyBub3QgYSB2YWxpZCBuYW1lIGluICVzIiwKKwkJCQloZWFkc1tpXSk7CisJfQorfQorCitzdGF0aWMgaW50IGdpdF90cmFuc3BvcnRfcHVzaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgYXJnczsKKwlpbnQgcmV0OworCisJaWYgKCFkYXRhLT5nb3RfcmVtb3RlX2hlYWRzKSB7CisJCXN0cnVjdCByZWYgKnRtcF9yZWZzOworCQljb25uZWN0X3NldHVwKHRyYW5zcG9ydCwgMSwgMCk7CisKKwkJZ2V0X3JlbW90ZV9oZWFkcyhkYXRhLT5mZFswXSwgJnRtcF9yZWZzLCBSRUZfTk9STUFMLCBOVUxMKTsKKwkJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDE7CisJfQorCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFyZ3Muc2VuZF9taXJyb3IgPSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUik7CisJYXJncy5mb3JjZV91cGRhdGUgPSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKKwlhcmdzLnVzZV90aGluX3BhY2sgPSBkYXRhLT5vcHRpb25zLnRoaW47CisJYXJncy52ZXJib3NlID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA+IDApOworCWFyZ3MucXVpZXQgPSAodHJhbnNwb3J0LT52ZXJib3NlIDwgMCk7CisJYXJncy5wcm9ncmVzcyA9IHRyYW5zcG9ydC0+cHJvZ3Jlc3M7CisJYXJncy5kcnlfcnVuID0gISEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOKTsKKwlhcmdzLnBvcmNlbGFpbiA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfUE9SQ0VMQUlOKTsKKworCXJldCA9IHNlbmRfcGFjaygmYXJncywgZGF0YS0+ZmQsIGRhdGEtPmNvbm4sIHJlbW90ZV9yZWZzLAorCQkJJmRhdGEtPmV4dHJhX2hhdmUpOworCisJY2xvc2UoZGF0YS0+ZmRbMV0pOworCWNsb3NlKGRhdGEtPmZkWzBdKTsKKwlyZXQgfD0gZmluaXNoX2Nvbm5lY3QoZGF0YS0+Y29ubik7CisJZGF0YS0+Y29ubiA9IE5VTEw7CisJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNvbm5lY3RfZ2l0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmV4ZWN1dGFibGUsIGludCBmZFsyXSkKK3sKKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWRhdGEtPmNvbm4gPSBnaXRfY29ubmVjdChkYXRhLT5mZCwgdHJhbnNwb3J0LT51cmwsCisJCQkJIGV4ZWN1dGFibGUsIDApOworCWZkWzBdID0gZGF0YS0+ZmRbMF07CisJZmRbMV0gPSBkYXRhLT5mZFsxXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNjb25uZWN0X2dpdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpZiAoZGF0YS0+Y29ubikgeworCQlpZiAoZGF0YS0+Z290X3JlbW90ZV9oZWFkcykKKwkJCXBhY2tldF9mbHVzaChkYXRhLT5mZFsxXSk7CisJCWNsb3NlKGRhdGEtPmZkWzBdKTsKKwkJY2xvc2UoZGF0YS0+ZmRbMV0pOworCQlmaW5pc2hfY29ubmVjdChkYXRhLT5jb25uKTsKKwl9CisKKwlmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCit2b2lkIHRyYW5zcG9ydF90YWtlX292ZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjaGlsZCkKK3sKKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhOworCisJaWYgKCF0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMpCisJCWRpZSgiQnVnIGRldGVjdGVkOiBUYWtpbmcgb3ZlciB0cmFuc3BvcnQgcmVxdWlyZXMgbm9uLU5VTEwgIgorCQkgICAgInNtYXJ0X29wdGlvbnMgZmllbGQuIik7CisKKwlkYXRhID0geGNhbGxvYygxLCBzaXplb2YoKmRhdGEpKTsKKwlkYXRhLT5vcHRpb25zID0gKnRyYW5zcG9ydC0+c21hcnRfb3B0aW9uczsKKwlkYXRhLT5jb25uID0gY2hpbGQ7CisJZGF0YS0+ZmRbMF0gPSBkYXRhLT5jb25uLT5vdXQ7CisJZGF0YS0+ZmRbMV0gPSBkYXRhLT5jb25uLT5pbjsKKwlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMDsKKwl0cmFuc3BvcnQtPmRhdGEgPSBkYXRhOworCisJdHJhbnNwb3J0LT5zZXRfb3B0aW9uID0gTlVMTDsKKwl0cmFuc3BvcnQtPmdldF9yZWZzX2xpc3QgPSBnZXRfcmVmc192aWFfY29ubmVjdDsKKwl0cmFuc3BvcnQtPmZldGNoID0gZmV0Y2hfcmVmc192aWFfcGFjazsKKwl0cmFuc3BvcnQtPnB1c2ggPSBOVUxMOworCXRyYW5zcG9ydC0+cHVzaF9yZWZzID0gZ2l0X3RyYW5zcG9ydF9wdXNoOworCXRyYW5zcG9ydC0+ZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3RfZ2l0OworCXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucyA9ICYoZGF0YS0+b3B0aW9ucyk7Cit9CisKK3N0YXRpYyBpbnQgaXNfbG9jYWwoY29uc3QgY2hhciAqdXJsKQoreworCWNvbnN0IGNoYXIgKmNvbG9uID0gc3RyY2hyKHVybCwgJzonKTsKKwljb25zdCBjaGFyICpzbGFzaCA9IHN0cmNocih1cmwsICcvJyk7CisJcmV0dXJuICFjb2xvbiB8fCAoc2xhc2ggJiYgc2xhc2ggPCBjb2xvbikgfHwKKwkJaGFzX2Rvc19kcml2ZV9wcmVmaXgodXJsKTsKK30KKworc3RhdGljIGludCBpc19maWxlKGNvbnN0IGNoYXIgKnVybCkKK3sKKwlzdHJ1Y3Qgc3RhdCBidWY7CisJaWYgKHN0YXQodXJsLCAmYnVmKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIFNfSVNSRUcoYnVmLnN0X21vZGUpOworfQorCitzdGF0aWMgaW50IGV4dGVybmFsX3NwZWNpZmljYXRpb25fbGVuKGNvbnN0IGNoYXIgKnVybCkKK3sKKwlyZXR1cm4gc3RyY2hyKHVybCwgJzonKSAtIHVybDsKK30KKworc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0X2dldChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwljb25zdCBjaGFyICpoZWxwZXI7CisJc3RydWN0IHRyYW5zcG9ydCAqcmV0ID0geGNhbGxvYygxLCBzaXplb2YoKnJldCkpOworCisJcmV0LT5wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKworCWlmICghcmVtb3RlKQorCQlkaWUoIk5vIHJlbW90ZSBwcm92aWRlZCB0byB0cmFuc3BvcnRfZ2V0KCkiKTsKKworCXJldC0+Z290X3JlbW90ZV9yZWZzID0gMDsKKwlyZXQtPnJlbW90ZSA9IHJlbW90ZTsKKwloZWxwZXIgPSByZW1vdGUtPmZvcmVpZ25fdmNzOworCisJaWYgKCF1cmwgJiYgcmVtb3RlLT51cmwpCisJCXVybCA9IHJlbW90ZS0+dXJsWzBdOworCXJldC0+dXJsID0gdXJsOworCisJLyogbWF5YmUgaXQgaXMgYSBmb3JlaWduIFVSTD8gKi8KKwlpZiAodXJsKSB7CisJCWNvbnN0IGNoYXIgKnAgPSB1cmw7CisKKwkJd2hpbGUgKGlzX3VybHNjaGVtZWNoYXIocCA9PSB1cmwsICpwKSkKKwkJCXArKzsKKwkJaWYgKCFwcmVmaXhjbXAocCwgIjo6IikpCisJCQloZWxwZXIgPSB4c3RybmR1cCh1cmwsIHAgLSB1cmwpOworCX0KKworCWlmIChoZWxwZXIpIHsKKwkJdHJhbnNwb3J0X2hlbHBlcl9pbml0KHJldCwgaGVscGVyKTsKKwl9IGVsc2UgaWYgKCFwcmVmaXhjbXAodXJsLCAicnN5bmM6IikpIHsKKwkJcmV0LT5nZXRfcmVmc19saXN0ID0gZ2V0X3JlZnNfdmlhX3JzeW5jOworCQlyZXQtPmZldGNoID0gZmV0Y2hfb2Jqc192aWFfcnN5bmM7CisJCXJldC0+cHVzaCA9IHJzeW5jX3RyYW5zcG9ydF9wdXNoOworCQlyZXQtPnNtYXJ0X29wdGlvbnMgPSBOVUxMOworCX0gZWxzZSBpZiAoaXNfbG9jYWwodXJsKSAmJiBpc19maWxlKHVybCkgJiYgaXNfYnVuZGxlKHVybCwgMSkpIHsKKwkJc3RydWN0IGJ1bmRsZV90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CisJCXJldC0+ZGF0YSA9IGRhdGE7CisJCXJldC0+Z2V0X3JlZnNfbGlzdCA9IGdldF9yZWZzX2Zyb21fYnVuZGxlOworCQlyZXQtPmZldGNoID0gZmV0Y2hfcmVmc19mcm9tX2J1bmRsZTsKKwkJcmV0LT5kaXNjb25uZWN0ID0gY2xvc2VfYnVuZGxlOworCQlyZXQtPnNtYXJ0X29wdGlvbnMgPSBOVUxMOworCX0gZWxzZSBpZiAoIWlzX3VybCh1cmwpCisJCXx8ICFwcmVmaXhjbXAodXJsLCAiZmlsZTovLyIpCisJCXx8ICFwcmVmaXhjbXAodXJsLCAiZ2l0Oi8vIikKKwkJfHwgIXByZWZpeGNtcCh1cmwsICJzc2g6Ly8iKQorCQl8fCAhcHJlZml4Y21wKHVybCwgImdpdCtzc2g6Ly8iKQorCQl8fCAhcHJlZml4Y21wKHVybCwgInNzaCtnaXQ6Ly8iKSkgeworCQkvKiBUaGVzZSBhcmUgYnVpbHRpbiBzbWFydCB0cmFuc3BvcnRzLiAqLworCQlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0geGNhbGxvYygxLCBzaXplb2YoKmRhdGEpKTsKKwkJcmV0LT5kYXRhID0gZGF0YTsKKwkJcmV0LT5zZXRfb3B0aW9uID0gTlVMTDsKKwkJcmV0LT5nZXRfcmVmc19saXN0ID0gZ2V0X3JlZnNfdmlhX2Nvbm5lY3Q7CisJCXJldC0+ZmV0Y2ggPSBmZXRjaF9yZWZzX3ZpYV9wYWNrOworCQlyZXQtPnB1c2hfcmVmcyA9IGdpdF90cmFuc3BvcnRfcHVzaDsKKwkJcmV0LT5jb25uZWN0ID0gY29ubmVjdF9naXQ7CisJCXJldC0+ZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3RfZ2l0OworCQlyZXQtPnNtYXJ0X29wdGlvbnMgPSAmKGRhdGEtPm9wdGlvbnMpOworCisJCWRhdGEtPmNvbm4gPSBOVUxMOworCQlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMDsKKwl9IGVsc2UgeworCQkvKiBVbmtub3duIHByb3RvY29sIGluIFVSTC4gUGFzcyB0byBleHRlcm5hbCBoYW5kbGVyLiAqLworCQlpbnQgbGVuID0gZXh0ZXJuYWxfc3BlY2lmaWNhdGlvbl9sZW4odXJsKTsKKwkJY2hhciAqaGFuZGxlciA9IHhtYWxsb2MobGVuICsgMSk7CisJCWhhbmRsZXJbbGVuXSA9IDA7CisJCXN0cm5jcHkoaGFuZGxlciwgdXJsLCBsZW4pOworCQl0cmFuc3BvcnRfaGVscGVyX2luaXQocmV0LCBoYW5kbGVyKTsKKwl9CisKKwlpZiAocmV0LT5zbWFydF9vcHRpb25zKSB7CisJCXJldC0+c21hcnRfb3B0aW9ucy0+dGhpbiA9IDE7CisJCXJldC0+c21hcnRfb3B0aW9ucy0+dXBsb2FkcGFjayA9ICJnaXQtdXBsb2FkLXBhY2siOworCQlpZiAocmVtb3RlLT51cGxvYWRwYWNrKQorCQkJcmV0LT5zbWFydF9vcHRpb25zLT51cGxvYWRwYWNrID0gcmVtb3RlLT51cGxvYWRwYWNrOworCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnJlY2VpdmVwYWNrID0gImdpdC1yZWNlaXZlLXBhY2siOworCQlpZiAocmVtb3RlLT5yZWNlaXZlcGFjaykKKwkJCXJldC0+c21hcnRfb3B0aW9ucy0+cmVjZWl2ZXBhY2sgPSByZW1vdGUtPnJlY2VpdmVwYWNrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCB0cmFuc3BvcnRfc2V0X29wdGlvbihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IGdpdF9yZXBvcnRzID0gMSwgcHJvdG9jb2xfcmVwb3J0cyA9IDE7CisKKwlpZiAodHJhbnNwb3J0LT5zbWFydF9vcHRpb25zKQorCQlnaXRfcmVwb3J0cyA9IHNldF9naXRfb3B0aW9uKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucywKKwkJCQkJICAgICBuYW1lLCB2YWx1ZSk7CisKKwlpZiAodHJhbnNwb3J0LT5zZXRfb3B0aW9uKQorCQlwcm90b2NvbF9yZXBvcnRzID0gdHJhbnNwb3J0LT5zZXRfb3B0aW9uKHRyYW5zcG9ydCwgbmFtZSwKKwkJCQkJCQl2YWx1ZSk7CisKKwkvKiBJZiBlaXRoZXIgcmVwb3J0IGlzIDAsIHJlcG9ydCAwIChzdWNjZXNzKS4gKi8KKwlpZiAoIWdpdF9yZXBvcnRzIHx8ICFwcm90b2NvbF9yZXBvcnRzKQorCQlyZXR1cm4gMDsKKwkvKiBJZiBlaXRoZXIgcmVwb3J0cyAtMSAoaW52YWxpZCB2YWx1ZSksIHJlcG9ydCAtMS4gKi8KKwlpZiAoKGdpdF9yZXBvcnRzID09IC0xKSB8fCAocHJvdG9jb2xfcmVwb3J0cyA9PSAtMSkpCisJCXJldHVybiAtMTsKKwkvKiBPdGhlcndpc2UgaWYgYm90aCByZXBvcnQgdW5rbm93biwgcmVwb3J0IHVua25vd24uICovCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgdHJhbnNwb3J0X3NldF92ZXJib3NpdHkoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgdmVyYm9zaXR5LAorCWludCBmb3JjZV9wcm9ncmVzcykKK3sKKwlpZiAodmVyYm9zaXR5ID49IDEpCisJCXRyYW5zcG9ydC0+dmVyYm9zZSA9IHZlcmJvc2l0eSA8PSAzID8gdmVyYm9zaXR5IDogMzsKKwlpZiAodmVyYm9zaXR5IDwgMCkKKwkJdHJhbnNwb3J0LT52ZXJib3NlID0gLTE7CisKKwkvKioKKwkgKiBSdWxlcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJlcG9ydCBwcm9ncmVzcyAocHJvY2Vzc2luZyBhYm9ydHMKKwkgKiB3aGVuIGEgcnVsZSBpcyBzYXRpc2ZpZWQpOgorCSAqCisJICogICAuIFJlcG9ydCBwcm9ncmVzcywgaWYgZm9yY2VfcHJvZ3Jlc3MgaXMgMSAoaWUuIC0tcHJvZ3Jlc3MpLgorCSAqICAgLiBEb24ndCByZXBvcnQgcHJvZ3Jlc3MsIGlmIGZvcmNlX3Byb2dyZXNzIGlzIDAgKGllLiAtLW5vLXByb2dyZXNzKS4KKwkgKiAgIC4gRG9uJ3QgcmVwb3J0IHByb2dyZXNzLCBpZiB2ZXJib3NpdHkgPCAwIChpZS4gLXEvLS1xdWlldCApLgorCSAqICAgLiBSZXBvcnQgcHJvZ3Jlc3MgaWYgaXNhdHR5KDIpIGlzIDEuCisJICoqLworCWlmIChmb3JjZV9wcm9ncmVzcyA+PSAwKQorCQl0cmFuc3BvcnQtPnByb2dyZXNzID0gISFmb3JjZV9wcm9ncmVzczsKKwllbHNlCisJCXRyYW5zcG9ydC0+cHJvZ3Jlc3MgPSB2ZXJib3NpdHkgPj0gMCAmJiBpc2F0dHkoMik7Cit9CisKK3N0YXRpYyB2b2lkIGRpZV93aXRoX3VucHVzaGVkX3N1Ym1vZHVsZXMoc3RydWN0IHN0cmluZ19saXN0ICpuZWVkc19wdXNoaW5nKQoreworCWludCBpOworCisJZnByaW50ZihzdGRlcnIsICJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKwkJCSJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBuZWVkc19wdXNoaW5nLT5ucjsgaSsrKQorCQlwcmludGYoIiAgJXNcbiIsIG5lZWRzX3B1c2hpbmctPml0ZW1zW2ldLnN0cmluZyk7CisJZnByaW50ZihzdGRlcnIsICJcblBsZWFzZSB0cnlcblxuIgorCQkJIglnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcblxuIgorCQkJIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcblxuIgorCQkJIglnaXQgcHVzaFxuXG4iCisJCQkidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuXG4iKTsKKworCXN0cmluZ19saXN0X2NsZWFyKG5lZWRzX3B1c2hpbmcsIDApOworCisJZGllKCJBYm9ydGluZy4iKTsKK30KKworaW50IHRyYW5zcG9ydF9wdXNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJICAgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MsCisJCSAgIGludCAqbm9uZmFzdGZvcndhcmQpCit7CisJKm5vbmZhc3Rmb3J3YXJkID0gMDsKKwl0cmFuc3BvcnRfdmVyaWZ5X3JlbW90ZV9uYW1lcyhyZWZzcGVjX25yLCByZWZzcGVjKTsKKworCWlmICh0cmFuc3BvcnQtPnB1c2gpIHsKKwkJLyogTWF5YmUgRklYTUUuIEJ1dCBubyBpbXBvcnRhbnQgdHJhbnNwb3J0IHVzZXMgdGhpcyBjYXNlLiAqLworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9TRVRfVVBTVFJFQU0pCisJCQlkaWUoIlRoaXMgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgdXNpbmcgLS1zZXQtdXBzdHJlYW0iKTsKKworCQlyZXR1cm4gdHJhbnNwb3J0LT5wdXNoKHRyYW5zcG9ydCwgcmVmc3BlY19uciwgcmVmc3BlYywgZmxhZ3MpOworCX0gZWxzZSBpZiAodHJhbnNwb3J0LT5wdXNoX3JlZnMpIHsKKwkJc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMgPQorCQkJdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgMSk7CisJCXN0cnVjdCByZWYgKmxvY2FsX3JlZnMgPSBnZXRfbG9jYWxfaGVhZHMoKTsKKwkJaW50IG1hdGNoX2ZsYWdzID0gTUFUQ0hfUkVGU19OT05FOworCQlpbnQgdmVyYm9zZSA9ICh0cmFuc3BvcnQtPnZlcmJvc2UgPiAwKTsKKwkJaW50IHF1aWV0ID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA8IDApOworCQlpbnQgcG9yY2VsYWluID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU47CisJCWludCBwcmV0ZW5kID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOOworCQlpbnQgcHVzaF9yZXQsIHJldCwgZXJyOworCisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCkKKwkJCW1hdGNoX2ZsYWdzIHw9IE1BVENIX1JFRlNfQUxMOworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1IpCisJCQltYXRjaF9mbGFncyB8PSBNQVRDSF9SRUZTX01JUlJPUjsKKwkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfUFJVTkUpCisJCQltYXRjaF9mbGFncyB8PSBNQVRDSF9SRUZTX1BSVU5FOworCisJCWlmIChtYXRjaF9wdXNoX3JlZnMobG9jYWxfcmVmcywgJnJlbW90ZV9yZWZzLAorCQkJCSAgICByZWZzcGVjX25yLCByZWZzcGVjLCBtYXRjaF9mbGFncykpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCXNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKHJlbW90ZV9yZWZzLAorCQkJZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1IsCisJCQlmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKKworCQlpZiAoKGZsYWdzICYgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQpICYmICFpc19iYXJlX3JlcG9zaXRvcnkoKSkgeworCQkJc3RydWN0IHJlZiAqcmVmID0gcmVtb3RlX3JlZnM7CisJCQlmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCQkJaWYgKCFpc19udWxsX3NoYTEocmVmLT5uZXdfc2hhMSkgJiYKKwkJCQkgICAgIXB1c2hfdW5wdXNoZWRfc3VibW9kdWxlcyhyZWYtPm5ld19zaGExLAorCQkJCQkgICAgdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWUpKQorCQkJCSAgICBkaWUgKCJGYWlsZWQgdG8gcHVzaCBhbGwgbmVlZGVkIHN1Ym1vZHVsZXMhIik7CisJCX0KKworCQlpZiAoKGZsYWdzICYgKFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EIHwKKwkJCSAgICAgIFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfQ0hFQ0spKSAmJiAhaXNfYmFyZV9yZXBvc2l0b3J5KCkpIHsKKwkJCXN0cnVjdCByZWYgKnJlZiA9IHJlbW90ZV9yZWZzOworCQkJc3RydWN0IHN0cmluZ19saXN0IG5lZWRzX3B1c2hpbmc7CisKKwkJCW1lbXNldCgmbmVlZHNfcHVzaGluZywgMCwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCQkJbmVlZHNfcHVzaGluZy5zdHJkdXBfc3RyaW5ncyA9IDE7CisJCQlmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCQkJaWYgKCFpc19udWxsX3NoYTEocmVmLT5uZXdfc2hhMSkgJiYKKwkJCQkgICAgZmluZF91bnB1c2hlZF9zdWJtb2R1bGVzKHJlZi0+bmV3X3NoYTEsCisJCQkJCSAgICB0cmFuc3BvcnQtPnJlbW90ZS0+bmFtZSwgJm5lZWRzX3B1c2hpbmcpKQorCQkJCQlkaWVfd2l0aF91bnB1c2hlZF9zdWJtb2R1bGVzKCZuZWVkc19wdXNoaW5nKTsKKwkJfQorCisJCXB1c2hfcmV0ID0gdHJhbnNwb3J0LT5wdXNoX3JlZnModHJhbnNwb3J0LCByZW1vdGVfcmVmcywgZmxhZ3MpOworCQllcnIgPSBwdXNoX2hhZF9lcnJvcnMocmVtb3RlX3JlZnMpOworCQlyZXQgPSBwdXNoX3JldCB8IGVycjsKKworCQlpZiAoIXF1aWV0IHx8IGVycikKKwkJCXRyYW5zcG9ydF9wcmludF9wdXNoX3N0YXR1cyh0cmFuc3BvcnQtPnVybCwgcmVtb3RlX3JlZnMsCisJCQkJCXZlcmJvc2UgfCBwb3JjZWxhaW4sIHBvcmNlbGFpbiwKKwkJCQkJbm9uZmFzdGZvcndhcmQpOworCisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX1NFVF9VUFNUUkVBTSkKKwkJCXNldF91cHN0cmVhbXModHJhbnNwb3J0LCByZW1vdGVfcmVmcywgcHJldGVuZCk7CisKKwkJaWYgKCEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOKSkgeworCQkJc3RydWN0IHJlZiAqcmVmOworCQkJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCQkJdHJhbnNwb3J0X3VwZGF0ZV90cmFja2luZ19yZWYodHJhbnNwb3J0LT5yZW1vdGUsIHJlZiwgdmVyYm9zZSk7CisJCX0KKworCQlpZiAocG9yY2VsYWluICYmICFwdXNoX3JldCkKKwkJCXB1dHMoIkRvbmUiKTsKKwkJZWxzZSBpZiAoIXF1aWV0ICYmICFyZXQgJiYgIXRyYW5zcG9ydF9yZWZzX3B1c2hlZChyZW1vdGVfcmVmcykpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkV2ZXJ5dGhpbmcgdXAtdG8tZGF0ZVxuIik7CisKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK2NvbnN0IHN0cnVjdCByZWYgKnRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCWlmICghdHJhbnNwb3J0LT5nb3RfcmVtb3RlX3JlZnMpIHsKKwkJdHJhbnNwb3J0LT5yZW1vdGVfcmVmcyA9IHRyYW5zcG9ydC0+Z2V0X3JlZnNfbGlzdCh0cmFuc3BvcnQsIDApOworCQl0cmFuc3BvcnQtPmdvdF9yZW1vdGVfcmVmcyA9IDE7CisJfQorCisJcmV0dXJuIHRyYW5zcG9ydC0+cmVtb3RlX3JlZnM7Cit9CisKK2ludCB0cmFuc3BvcnRfZmV0Y2hfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlZnMpCit7CisJaW50IHJjOworCWludCBucl9oZWFkcyA9IDAsIG5yX2FsbG9jID0gMCwgbnJfcmVmcyA9IDA7CisJc3RydWN0IHJlZiAqKmhlYWRzID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpybTsKKworCWZvciAocm0gPSByZWZzOyBybTsgcm0gPSBybS0+bmV4dCkgeworCQlucl9yZWZzKys7CisJCWlmIChybS0+cGVlcl9yZWYgJiYKKwkJICAgICFpc19udWxsX3NoYTEocm0tPm9sZF9zaGExKSAmJgorCQkgICAgIWhhc2hjbXAocm0tPnBlZXJfcmVmLT5vbGRfc2hhMSwgcm0tPm9sZF9zaGExKSkKKwkJCWNvbnRpbnVlOworCQlBTExPQ19HUk9XKGhlYWRzLCBucl9oZWFkcyArIDEsIG5yX2FsbG9jKTsKKwkJaGVhZHNbbnJfaGVhZHMrK10gPSBybTsKKwl9CisKKwlpZiAoIW5yX2hlYWRzKSB7CisJCS8qCisJCSAqIFdoZW4gZGVlcGVuaW5nIG9mIGEgc2hhbGxvdyByZXBvc2l0b3J5IGlzIHJlcXVlc3RlZCwKKwkJICogdGhlbiBsb2NhbCBhbmQgcmVtb3RlIHJlZnMgYXJlIGxpa2VseSB0byBzdGlsbCBiZSBlcXVhbC4KKwkJICogSnVzdCBmZWVkIHRoZW0gYWxsIHRvIHRoZSBmZXRjaCBtZXRob2QgaW4gdGhhdCBjYXNlLgorCQkgKiBUaGlzIGNvbmRpdGlvbiBzaG91bGRuJ3QgYmUgbWV0IGluIGEgbm9uLWRlZXBlbmluZyBmZXRjaAorCQkgKiAoc2VlIGJ1aWx0aW4tZmV0Y2guYzpxdWlja2ZldGNoKCkpLgorCQkgKi8KKwkJaGVhZHMgPSB4bWFsbG9jKG5yX3JlZnMgKiBzaXplb2YoKmhlYWRzKSk7CisJCWZvciAocm0gPSByZWZzOyBybTsgcm0gPSBybS0+bmV4dCkKKwkJCWhlYWRzW25yX2hlYWRzKytdID0gcm07CisJfQorCisJcmMgPSB0cmFuc3BvcnQtPmZldGNoKHRyYW5zcG9ydCwgbnJfaGVhZHMsIGhlYWRzKTsKKworCWZyZWUoaGVhZHMpOworCXJldHVybiByYzsKK30KKwordm9pZCB0cmFuc3BvcnRfdW5sb2NrX3BhY2soc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCWlmICh0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUpIHsKKwkJdW5saW5rX29yX3dhcm4odHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlKTsKKwkJZnJlZSh0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUpOworCQl0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUgPSBOVUxMOworCX0KK30KKworaW50IHRyYW5zcG9ydF9jb25uZWN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgY29uc3QgY2hhciAqZXhlYywgaW50IGZkWzJdKQoreworCWlmICh0cmFuc3BvcnQtPmNvbm5lY3QpCisJCXJldHVybiB0cmFuc3BvcnQtPmNvbm5lY3QodHJhbnNwb3J0LCBuYW1lLCBleGVjLCBmZCk7CisJZWxzZQorCQlkaWUoIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIik7Cit9CisKK2ludCB0cmFuc3BvcnRfZGlzY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJaW50IHJldCA9IDA7CisJaWYgKHRyYW5zcG9ydC0+ZGlzY29ubmVjdCkKKwkJcmV0ID0gdHJhbnNwb3J0LT5kaXNjb25uZWN0KHRyYW5zcG9ydCk7CisJZnJlZSh0cmFuc3BvcnQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTdHJpcCB1c2VybmFtZSAoYW5kIHBhc3N3b3JkKSBmcm9tIGEgVVJMIGFuZCByZXR1cm4KKyAqIGl0IGluIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZy4KKyAqLworY2hhciAqdHJhbnNwb3J0X2Fub255bWl6ZV91cmwoY29uc3QgY2hhciAqdXJsKQoreworCWNoYXIgKmFub25fdXJsLCAqc2NoZW1lX3ByZWZpeCwgKmFub25fcGFydDsKKwlzaXplX3QgYW5vbl9sZW4sIHByZWZpeF9sZW4gPSAwOworCisJYW5vbl9wYXJ0ID0gc3RyY2hyKHVybCwgJ0AnKTsKKwlpZiAoaXNfbG9jYWwodXJsKSB8fCAhYW5vbl9wYXJ0KQorCQlnb3RvIGxpdGVyYWxfY29weTsKKworCWFub25fbGVuID0gc3RybGVuKCsrYW5vbl9wYXJ0KTsKKwlzY2hlbWVfcHJlZml4ID0gc3Ryc3RyKHVybCwgIjovLyIpOworCWlmICghc2NoZW1lX3ByZWZpeCkgeworCQlpZiAoIXN0cmNocihhbm9uX3BhcnQsICc6JykpCisJCQkvKiBjYW5ub3QgYmUgIm1lQHRoZXJlOi9wYXRoL25hbWUiICovCisJCQlnb3RvIGxpdGVyYWxfY29weTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpjcDsKKwkJLyogbWFrZSBzdXJlIHNjaGVtZSBpcyByZWFzb25hYmxlICovCisJCWZvciAoY3AgPSB1cmw7IGNwIDwgc2NoZW1lX3ByZWZpeDsgY3ArKykgeworCQkJc3dpdGNoICgqY3ApIHsKKwkJCQkvKiBSRkMgMTczOCAyLjEgKi8KKwkJCWNhc2UgJysnOiBjYXNlICcuJzogY2FzZSAnLSc6CisJCQkJYnJlYWs7IC8qIG9rICovCisJCQlkZWZhdWx0OgorCQkJCWlmIChpc2FsbnVtKCpjcCkpCisJCQkJCWJyZWFrOworCQkJCS8qIGl0IGlzbid0ICovCisJCQkJZ290byBsaXRlcmFsX2NvcHk7CisJCQl9CisJCX0KKwkJLyogQCBwYXN0IHRoZSBmaXJzdCBzbGFzaCBkb2VzIG5vdCBjb3VudCAqLworCQljcCA9IHN0cmNocihzY2hlbWVfcHJlZml4ICsgMywgJy8nKTsKKwkJaWYgKGNwICYmIGNwIDwgYW5vbl9wYXJ0KQorCQkJZ290byBsaXRlcmFsX2NvcHk7CisJCXByZWZpeF9sZW4gPSBzY2hlbWVfcHJlZml4IC0gdXJsICsgMzsKKwl9CisJYW5vbl91cmwgPSB4Y2FsbG9jKDEsIDEgKyBwcmVmaXhfbGVuICsgYW5vbl9sZW4pOworCW1lbWNweShhbm9uX3VybCwgdXJsLCBwcmVmaXhfbGVuKTsKKwltZW1jcHkoYW5vbl91cmwgKyBwcmVmaXhfbGVuLCBhbm9uX3BhcnQsIGFub25fbGVuKTsKKwlyZXR1cm4gYW5vbl91cmw7CitsaXRlcmFsX2NvcHk6CisJcmV0dXJuIHhzdHJkdXAodXJsKTsKK30KKworc3RydWN0IGFsdGVybmF0ZV9yZWZzX2RhdGEgeworCWFsdGVybmF0ZV9yZWZfZm4gKmZuOworCXZvaWQgKmRhdGE7Cit9OworCitzdGF0aWMgaW50IHJlZnNfZnJvbV9hbHRlcm5hdGVfY2Ioc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmUsCisJCQkJICB2b2lkICpkYXRhKQoreworCWNoYXIgKm90aGVyOworCXNpemVfdCBsZW47CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydDsKKwljb25zdCBzdHJ1Y3QgcmVmICpleHRyYTsKKwlzdHJ1Y3QgYWx0ZXJuYXRlX3JlZnNfZGF0YSAqY2IgPSBkYXRhOworCisJZS0+bmFtZVstMV0gPSAnXDAnOworCW90aGVyID0geHN0cmR1cChyZWFsX3BhdGgoZS0+YmFzZSkpOworCWUtPm5hbWVbLTFdID0gJy8nOworCWxlbiA9IHN0cmxlbihvdGhlcik7CisKKwl3aGlsZSAob3RoZXJbbGVuLTFdID09ICcvJykKKwkJb3RoZXJbLS1sZW5dID0gJ1wwJzsKKwlpZiAobGVuIDwgOCB8fCBtZW1jbXAob3RoZXIgKyBsZW4gLSA4LCAiL29iamVjdHMiLCA4KSkKKwkJcmV0dXJuIDA7CisJLyogSXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5IHdpdGggcmVmcz8gKi8KKwltZW1jcHkob3RoZXIgKyBsZW4gLSA4LCAiL3JlZnMiLCA2KTsKKwlpZiAoIWlzX2RpcmVjdG9yeShvdGhlcikpCisJCXJldHVybiAwOworCW90aGVyW2xlbiAtIDhdID0gJ1wwJzsKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KG90aGVyKTsKKwl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgb3RoZXIpOworCWZvciAoZXh0cmEgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCk7CisJICAgICBleHRyYTsKKwkgICAgIGV4dHJhID0gZXh0cmEtPm5leHQpCisJCWNiLT5mbihleHRyYSwgY2ItPmRhdGEpOworCXRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CisJZnJlZShvdGhlcik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZm9yX2VhY2hfYWx0ZXJuYXRlX3JlZihhbHRlcm5hdGVfcmVmX2ZuIGZuLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhbHRlcm5hdGVfcmVmc19kYXRhIGNiOworCWNiLmZuID0gZm47CisJY2IuZGF0YSA9IGRhdGE7CisJZm9yZWFjaF9hbHRfb2RiKHJlZnNfZnJvbV9hbHRlcm5hdGVfY2IsICZjYik7Cit9CmRpZmYgLS1naXQgYS90cmFuc3BvcnQuaCBiL3RyYW5zcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjFjNGEKLS0tIC9kZXYvbnVsbAorKysgYi90cmFuc3BvcnQuaApAQCAtMCwwICsxLDE3OCBAQAorI2lmbmRlZiBUUkFOU1BPUlRfSAorI2RlZmluZSBUUkFOU1BPUlRfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKworc3RydWN0IGdpdF90cmFuc3BvcnRfb3B0aW9ucyB7CisJdW5zaWduZWQgdGhpbiA6IDE7CisJdW5zaWduZWQga2VlcCA6IDE7CisJdW5zaWduZWQgZm9sbG93dGFncyA6IDE7CisJaW50IGRlcHRoOworCWNvbnN0IGNoYXIgKnVwbG9hZHBhY2s7CisJY29uc3QgY2hhciAqcmVjZWl2ZXBhY2s7Cit9OworCitzdHJ1Y3QgdHJhbnNwb3J0IHsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJY29uc3QgY2hhciAqdXJsOworCXZvaWQgKmRhdGE7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnM7CisKKwkvKioKKwkgKiBJbmRpY2F0ZXMgd2hldGhlciB3ZSBhbHJlYWR5IGNhbGxlZCBnZXRfcmVmc19saXN0KCk7IHNldCBieQorCSAqIHRyYW5zcG9ydC5jOjp0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKCkuCisJICovCisJdW5zaWduZWQgZ290X3JlbW90ZV9yZWZzIDogMTsKKworCS8qKgorCSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBwb3NpdGl2ZSBpZiB0aGUgb3B0aW9uIGlzIG5vdAorCSAqIHJlY29nbml6ZWQgb3IgaXMgaW5hcHBsaWNhYmxlLCBhbmQgbmVnYXRpdmUgaWYgdGhlIG9wdGlvbgorCSAqIGlzIGFwcGxpY2FibGUgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLgorCSAqKi8KKwlpbnQgKCpzZXRfb3B0aW9uKShzdHJ1Y3QgdHJhbnNwb3J0ICpjb25uZWN0aW9uLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICBjb25zdCBjaGFyICp2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgcmVtb3RlIHNpZGUncyByZWZzLiBJbiBvcmRlciB0byBhbGxvdworCSAqIHRoZSB0cmFuc3BvcnQgdG8gdHJ5IHRvIHNoYXJlIGNvbm5lY3Rpb25zLCBmb3JfcHVzaCBpcyBhCisJICogaGludCBhcyB0byB3aGV0aGVyIHRoZSB1bHRpbWF0ZSBvcGVyYXRpb24gaXMgYSBwdXNoIG9yIGEgZmV0Y2guCisJICoKKwkgKiBJZiB0aGUgdHJhbnNwb3J0IGlzIGFibGUgdG8gZGV0ZXJtaW5lIHRoZSByZW1vdGUgaGFzaCBmb3IKKwkgKiB0aGUgcmVmIHdpdGhvdXQgYSBodWdlIGFtb3VudCBvZiBlZmZvcnQsIGl0IHNob3VsZCBzdG9yZSBpdAorCSAqIGluIHRoZSByZWYncyBvbGRfc2hhMSBmaWVsZDsgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBhbGwgMC4KKwkgKiovCisJc3RydWN0IHJlZiAqKCpnZXRfcmVmc19saXN0KShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmb3JfcHVzaCk7CisKKwkvKioKKwkgKiBGZXRjaCB0aGUgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIHJlZnMuIE5vdGUgdGhhdCB0aGlzIGdldHMKKwkgKiBhbiBhcnJheSwgYW5kIHNob3VsZCBpZ25vcmUgdGhlIGxpc3Qgc3RydWN0dXJlLgorCSAqCisJICogSWYgdGhlIHRyYW5zcG9ydCBkaWQgbm90IGdldCBoYXNoZXMgZm9yIHJlZnMgaW4KKwkgKiBnZXRfcmVmc19saXN0KCksIGl0IHNob3VsZCBzZXQgdGhlIG9sZF9zaGExIGZpZWxkcyBpbiB0aGUKKwkgKiBwcm92aWRlZCByZWZzIG5vdy4KKwkgKiovCisJaW50ICgqZmV0Y2gpKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IHJlZnNfbnIsIHN0cnVjdCByZWYgKipyZWZzKTsKKworCS8qKgorCSAqIFB1c2ggdGhlIG9iamVjdHMgYW5kIHJlZnMuIFNlbmQgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLCBhbmQKKwkgKiB0aGVuLCBmb3IgYW55IHJlZnMgd2hlcmUgcGVlcl9yZWYgaXMgc2V0IGFuZAorCSAqIHBlZXJfcmVmLT5uZXdfc2hhMSBpcyBkaWZmZXJlbnQgZnJvbSBvbGRfc2hhMSwgdGVsbCB0aGUKKwkgKiByZW1vdGUgc2lkZSB0byB1cGRhdGUgZWFjaCByZWYgaW4gdGhlIGxpc3QgZnJvbSBvbGRfc2hhMSB0bworCSAqIHBlZXJfcmVmLT5uZXdfc2hhMS4KKwkgKgorCSAqIFdoZXJlIHBvc3NpYmxlLCBzZXQgdGhlIHN0YXR1cyBmb3IgZWFjaCByZWYgYXBwcm9wcmlhdGVseS4KKwkgKgorCSAqIFRoZSB0cmFuc3BvcnQgbXVzdCBtb2RpZnkgbmV3X3NoYTEgaW4gdGhlIHJlZiB0byB0aGUgbmV3CisJICogdmFsdWUgaWYgdGhlIHJlbW90ZSBhY2NlcHRlZCB0aGUgY2hhbmdlLiBOb3RlIHRoYXQgdGhpcworCSAqIGNvdWxkIGJlIGEgZGlmZmVyZW50IHZhbHVlIGZyb20gcGVlcl9yZWYtPm5ld19zaGExIGlmIHRoZQorCSAqIHByb2Nlc3MgaW52b2x2ZWQgZ2VuZXJhdGluZyBuZXcgY29tbWl0cy4KKwkgKiovCisJaW50ICgqcHVzaF9yZWZzKShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlZnMsIGludCBmbGFncyk7CisJaW50ICgqcHVzaCkoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbiwgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpOworCWludCAoKmNvbm5lY3QpKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24sIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICpleGVjdXRhYmxlLCBpbnQgZmRbMl0pOworCisJLyoqIGdldF9yZWZzX2xpc3QoKSwgZmV0Y2goKSwgYW5kIHB1c2hfcmVmcygpIGNhbiBrZWVwCisJICogcmVzb3VyY2VzIChzdWNoIGFzIGEgY29ubmVjdGlvbikgcmVzZXJ2ZWQgZm9yIGZ1dGhlcgorCSAqIHVzZS4gZGlzY29ubmVjdCgpIHJlbGVhc2VzIHRoZXNlIHJlc291cmNlcy4KKwkgKiovCisJaW50ICgqZGlzY29ubmVjdCkoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbik7CisJY2hhciAqcGFja19sb2NrZmlsZTsKKwlzaWduZWQgdmVyYm9zZSA6IDM7CisJLyoqCisJICogVHJhbnNwb3J0cyBzaG91bGQgbm90IHNldCB0aGlzIGRpcmVjdGx5LCBhbmQgc2hvdWxkIHVzZSB0aGlzCisJICogdmFsdWUgd2l0aG91dCBoYXZpbmcgdG8gY2hlY2sgaXNhdHR5KDIpLCAtcS8tLXF1aWV0CisJICogKHRyYW5zcG9ydC0+dmVyYm9zZSA8IDApLCBldGMuIC0gY2hlY2tpbmcgaGFzIGFscmVhZHkgYmVlbiBkb25lCisJICogaW4gdHJhbnNwb3J0X3NldF92ZXJib3NpdHkoKS4KKwkgKiovCisJdW5zaWduZWQgcHJvZ3Jlc3MgOiAxOworCS8qCisJICogSWYgdHJhbnNwb3J0IGlzIGF0IGxlYXN0IHBvdGVudGlhbGx5IHNtYXJ0LCB0aGlzIHBvaW50cyB0bworCSAqIGdpdF90cmFuc3BvcnRfb3B0aW9ucyBzdHJ1Y3R1cmUgdG8gdXNlIGluIGNhc2UgdHJhbnNwb3J0CisJICogYWN0dWFsbHkgdHVybnMgb3V0IHRvIGJlIHNtYXJ0LgorCSAqLworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgKnNtYXJ0X29wdGlvbnM7Cit9OworCisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX0FMTCAxCisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX0ZPUkNFIDIKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTiA0CisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX01JUlJPUiA4CisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX1BPUkNFTEFJTiAxNgorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9TRVRfVVBTVFJFQU0gMzIKKyNkZWZpbmUgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19DSEVDSyA2NAorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9QUlVORSAxMjgKKyNkZWZpbmUgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQgMjU2CisKKyNkZWZpbmUgVFJBTlNQT1JUX1NVTU1BUllfV0lEVEggKDIgKiBERUZBVUxUX0FCQlJFViArIDMpCisjZGVmaW5lIFRSQU5TUE9SVF9TVU1NQVJZKHgpIChpbnQpKFRSQU5TUE9SVF9TVU1NQVJZX1dJRFRIICsgc3RybGVuKHgpIC0gZ2V0dGV4dF93aWR0aCh4KSksICh4KQorCisvKiBSZXR1cm5zIGEgdHJhbnNwb3J0IHN1aXRhYmxlIGZvciB0aGUgdXJsICovCitzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnRfZ2V0KHN0cnVjdCByZW1vdGUgKiwgY29uc3QgY2hhciAqKTsKKworLyogVHJhbnNwb3J0IG9wdGlvbnMgd2hpY2ggYXBwbHkgdG8gZ2l0Oi8vIGFuZCBzY3Atc3R5bGUgVVJMcyAqLworCisvKiBUaGUgcHJvZ3JhbSB0byB1c2Ugb24gdGhlIHJlbW90ZSBzaWRlIHRvIHNlbmQgYSBwYWNrICovCisjZGVmaW5lIFRSQU5TX09QVF9VUExPQURQQUNLICJ1cGxvYWRwYWNrIgorCisvKiBUaGUgcHJvZ3JhbSB0byB1c2Ugb24gdGhlIHJlbW90ZSBzaWRlIHRvIHJlY2VpdmUgYSBwYWNrICovCisjZGVmaW5lIFRSQU5TX09QVF9SRUNFSVZFUEFDSyAicmVjZWl2ZXBhY2siCisKKy8qIFRyYW5zZmVyIHRoZSBkYXRhIGFzIGEgdGhpbiBwYWNrIGlmIG5vdCBudWxsICovCisjZGVmaW5lIFRSQU5TX09QVF9USElOICJ0aGluIgorCisvKiBLZWVwIHRoZSBwYWNrIHRoYXQgd2FzIHRyYW5zZmVycmVkIGlmIG5vdCBudWxsICovCisjZGVmaW5lIFRSQU5TX09QVF9LRUVQICJrZWVwIgorCisvKiBMaW1pdCB0aGUgZGVwdGggb2YgdGhlIGZldGNoIGlmIG5vdCBudWxsICovCisjZGVmaW5lIFRSQU5TX09QVF9ERVBUSCAiZGVwdGgiCisKKy8qIEFnZ3Jlc3NpdmVseSBmZXRjaCBhbm5vdGF0ZWQgdGFncyBpZiBwb3NzaWJsZSAqLworI2RlZmluZSBUUkFOU19PUFRfRk9MTE9XVEFHUyAiZm9sbG93dGFncyIKKworLyoqCisgKiBSZXR1cm5zIDAgaWYgdGhlIG9wdGlvbiB3YXMgdXNlZCwgbm9uLXplcm8gb3RoZXJ3aXNlLiBQcmludHMgYQorICogbWVzc2FnZSB0byBzdGRlcnIgaWYgdGhlIG9wdGlvbiBpcyBub3QgdXNlZC4KKyAqKi8KK2ludCB0cmFuc3BvcnRfc2V0X29wdGlvbihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCB0cmFuc3BvcnRfc2V0X3ZlcmJvc2l0eShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCB2ZXJib3NpdHksCisJaW50IGZvcmNlX3Byb2dyZXNzKTsKKworI2RlZmluZSBOT05fRkZfSEVBRCAxCisjZGVmaW5lIE5PTl9GRl9PVEhFUiAyCitpbnQgdHJhbnNwb3J0X3B1c2goc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbiwKKwkJICAgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MsCisJCSAgIGludCAqIG5vbmZhc3Rmb3J3YXJkKTsKKworY29uc3Qgc3RydWN0IHJlZiAqdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpOworCitpbnQgdHJhbnNwb3J0X2ZldGNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZzKTsKK3ZvaWQgdHJhbnNwb3J0X3VubG9ja19wYWNrKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCk7CitpbnQgdHJhbnNwb3J0X2Rpc2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKK2NoYXIgKnRyYW5zcG9ydF9hbm9ueW1pemVfdXJsKGNvbnN0IGNoYXIgKnVybCk7Cit2b2lkIHRyYW5zcG9ydF90YWtlX292ZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjaGlsZCk7CisKK2ludCB0cmFuc3BvcnRfY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIGNvbnN0IGNoYXIgKmV4ZWMsIGludCBmZFsyXSk7CisKKy8qIFRyYW5zcG9ydCBtZXRob2RzIGRlZmluZWQgb3V0c2lkZSB0cmFuc3BvcnQuYyAqLworaW50IHRyYW5zcG9ydF9oZWxwZXJfaW5pdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfbG9vcChpbnQgaW5wdXQsIGludCBvdXRwdXQpOworCisvKiBjb21tb24gbWV0aG9kcyB1c2VkIGJ5IHRyYW5zcG9ydC5jIGFuZCBidWlsdGluLXNlbmQtcGFjay5jICovCit2b2lkIHRyYW5zcG9ydF92ZXJpZnlfcmVtb3RlX25hbWVzKGludCBucl9oZWFkcywgY29uc3QgY2hhciAqKmhlYWRzKTsKKwordm9pZCB0cmFuc3BvcnRfdXBkYXRlX3RyYWNraW5nX3JlZihzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWYgKnJlZiwgaW50IHZlcmJvc2UpOworCitpbnQgdHJhbnNwb3J0X3JlZnNfcHVzaGVkKHN0cnVjdCByZWYgKnJlZik7CisKK3ZvaWQgdHJhbnNwb3J0X3ByaW50X3B1c2hfc3RhdHVzKGNvbnN0IGNoYXIgKmRlc3QsIHN0cnVjdCByZWYgKnJlZnMsCisJCSAgaW50IHZlcmJvc2UsIGludCBwb3JjZWxhaW4sIGludCAqbm9uZmFzdGZvcndhcmQpOworCit0eXBlZGVmIHZvaWQgYWx0ZXJuYXRlX3JlZl9mbihjb25zdCBzdHJ1Y3QgcmVmICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKGFsdGVybmF0ZV9yZWZfZm4sIHZvaWQgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdHJlZS1kaWZmLmMgYi90cmVlLWRpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTAxNTYzCi0tLSAvZGV2L251bGwKKysrIGIvdHJlZS1kaWZmLmMKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciB0cmVlIGRpZmYgZ2VuZXJhdGlvbgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisKK3N0YXRpYyB2b2lkIHNob3dfZW50cnkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICAgICBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlKTsKKworc3RhdGljIGludCBjb21wYXJlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqdDEsIHN0cnVjdCB0cmVlX2Rlc2MgKnQyLAorCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXVuc2lnbmVkIG1vZGUxLCBtb2RlMjsKKwljb25zdCBjaGFyICpwYXRoMSwgKnBhdGgyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsICpzaGEyOworCWludCBjbXAsIHBhdGhsZW4xLCBwYXRobGVuMjsKKwlpbnQgb2xkX2Jhc2VsZW4gPSBiYXNlLT5sZW47CisKKwlzaGExID0gdHJlZV9lbnRyeV9leHRyYWN0KHQxLCAmcGF0aDEsICZtb2RlMSk7CisJc2hhMiA9IHRyZWVfZW50cnlfZXh0cmFjdCh0MiwgJnBhdGgyLCAmbW9kZTIpOworCisJcGF0aGxlbjEgPSB0cmVlX2VudHJ5X2xlbigmdDEtPmVudHJ5KTsKKwlwYXRobGVuMiA9IHRyZWVfZW50cnlfbGVuKCZ0Mi0+ZW50cnkpOworCWNtcCA9IGJhc2VfbmFtZV9jb21wYXJlKHBhdGgxLCBwYXRobGVuMSwgbW9kZTEsIHBhdGgyLCBwYXRobGVuMiwgbW9kZTIpOworCWlmIChjbXAgPCAwKSB7CisJCXNob3dfZW50cnkob3B0LCAiLSIsIHQxLCBiYXNlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoY21wID4gMCkgeworCQlzaG93X2VudHJ5KG9wdCwgIisiLCB0MiwgYmFzZSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIURJRkZfT1BUX1RTVChvcHQsIEZJTkRfQ09QSUVTX0hBUkRFUikgJiYgIWhhc2hjbXAoc2hhMSwgc2hhMikgJiYgbW9kZTEgPT0gbW9kZTIpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB0aGUgZmlsZW1vZGUgaGFzIGNoYW5nZWQgdG8vZnJvbSBhIGRpcmVjdG9yeSBmcm9tL3RvIGEgcmVndWxhcgorCSAqIGZpbGUsIHdlIG5lZWQgdG8gY29uc2lkZXIgaXQgYSByZW1vdmUgYW5kIGFuIGFkZC4KKwkgKi8KKwlpZiAoU19JU0RJUihtb2RlMSkgIT0gU19JU0RJUihtb2RlMikpIHsKKwkJc2hvd19lbnRyeShvcHQsICItIiwgdDEsIGJhc2UpOworCQlzaG93X2VudHJ5KG9wdCwgIisiLCB0MiwgYmFzZSk7CisJCXJldHVybiAwOworCX0KKworCXN0cmJ1Zl9hZGQoYmFzZSwgcGF0aDEsIHBhdGhsZW4xKTsKKwlpZiAoRElGRl9PUFRfVFNUKG9wdCwgUkVDVVJTSVZFKSAmJiBTX0lTRElSKG1vZGUxKSkgeworCQlpZiAoRElGRl9PUFRfVFNUKG9wdCwgVFJFRV9JTl9SRUNVUlNJVkUpKSB7CisJCQlvcHQtPmNoYW5nZShvcHQsIG1vZGUxLCBtb2RlMiwKKwkJCQkgICAgc2hhMSwgc2hhMiwgMSwgMSwgYmFzZS0+YnVmLCAwLCAwKTsKKwkJfQorCQlzdHJidWZfYWRkY2goYmFzZSwgJy8nKTsKKwkJZGlmZl90cmVlX3NoYTEoc2hhMSwgc2hhMiwgYmFzZS0+YnVmLCBvcHQpOworCX0gZWxzZSB7CisJCW9wdC0+Y2hhbmdlKG9wdCwgbW9kZTEsIG1vZGUyLCBzaGExLCBzaGEyLCAxLCAxLCBiYXNlLT5idWYsIDAsIDApOworCX0KKwlzdHJidWZfc2V0bGVuKGJhc2UsIG9sZF9iYXNlbGVuKTsKKwlyZXR1cm4gMDsKK30KKworLyogQSB3aG9sZSBzdWItdHJlZSB3ZW50IGF3YXkgb3IgYXBwZWFyZWQgKi8KK3N0YXRpYyB2b2lkIHNob3dfdHJlZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgICAgc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgc3RydWN0IHN0cmJ1ZiAqYmFzZSkKK3sKKwllbnVtIGludGVyZXN0aW5nIG1hdGNoID0gZW50cnlfbm90X2ludGVyZXN0aW5nOworCWZvciAoOyBkZXNjLT5zaXplOyB1cGRhdGVfdHJlZV9lbnRyeShkZXNjKSkgeworCQlpZiAobWF0Y2ggIT0gYWxsX2VudHJpZXNfaW50ZXJlc3RpbmcpIHsKKwkJCW1hdGNoID0gdHJlZV9lbnRyeV9pbnRlcmVzdGluZygmZGVzYy0+ZW50cnksIGJhc2UsIDAsCisJCQkJCQkgICAgICAgJm9wdC0+cGF0aHNwZWMpOworCQkJaWYgKG1hdGNoID09IGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZykKKwkJCQlicmVhazsKKwkJCWlmIChtYXRjaCA9PSBlbnRyeV9ub3RfaW50ZXJlc3RpbmcpCisJCQkJY29udGludWU7CisJCX0KKwkJc2hvd19lbnRyeShvcHQsIHByZWZpeCwgZGVzYywgYmFzZSk7CisJfQorfQorCisvKiBBIGZpbGUgZW50cnkgd2VudCBhd2F5IG9yIGFwcGVhcmVkICovCitzdGF0aWMgdm9pZCBzaG93X2VudHJ5KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgICAgc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgc3RydWN0IHN0cmJ1ZiAqYmFzZSkKK3sKKwl1bnNpZ25lZCBtb2RlOworCWNvbnN0IGNoYXIgKnBhdGg7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9IHRyZWVfZW50cnlfZXh0cmFjdChkZXNjLCAmcGF0aCwgJm1vZGUpOworCWludCBwYXRobGVuID0gdHJlZV9lbnRyeV9sZW4oJmRlc2MtPmVudHJ5KTsKKwlpbnQgb2xkX2Jhc2VsZW4gPSBiYXNlLT5sZW47CisKKwlzdHJidWZfYWRkKGJhc2UsIHBhdGgsIHBhdGhsZW4pOworCWlmIChESUZGX09QVF9UU1Qob3B0LCBSRUNVUlNJVkUpICYmIFNfSVNESVIobW9kZSkpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQlzdHJ1Y3QgdHJlZV9kZXNjIGlubmVyOworCQl2b2lkICp0cmVlOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisKKwkJdHJlZSA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghdHJlZSB8fCB0eXBlICE9IE9CSl9UUkVFKQorCQkJZGllKCJjb3JydXB0IHRyZWUgc2hhICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJCWlmIChESUZGX09QVF9UU1Qob3B0LCBUUkVFX0lOX1JFQ1VSU0lWRSkpCisJCQlvcHQtPmFkZF9yZW1vdmUob3B0LCAqcHJlZml4LCBtb2RlLCBzaGExLCAxLCBiYXNlLT5idWYsIDApOworCisJCXN0cmJ1Zl9hZGRjaChiYXNlLCAnLycpOworCisJCWluaXRfdHJlZV9kZXNjKCZpbm5lciwgdHJlZSwgc2l6ZSk7CisJCXNob3dfdHJlZShvcHQsIHByZWZpeCwgJmlubmVyLCBiYXNlKTsKKwkJZnJlZSh0cmVlKTsKKwl9IGVsc2UKKwkJb3B0LT5hZGRfcmVtb3ZlKG9wdCwgcHJlZml4WzBdLCBtb2RlLCBzaGExLCAxLCBiYXNlLT5idWYsIDApOworCisJc3RyYnVmX3NldGxlbihiYXNlLCBvbGRfYmFzZWxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHNraXBfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkJICAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwKKwkJCSAgICAgICBlbnVtIGludGVyZXN0aW5nICptYXRjaCkKK3sKKwl3aGlsZSAodC0+c2l6ZSkgeworCQkqbWF0Y2ggPSB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKCZ0LT5lbnRyeSwgYmFzZSwgMCwgJm9wdC0+cGF0aHNwZWMpOworCQlpZiAoKm1hdGNoKSB7CisJCQlpZiAoKm1hdGNoID09IGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZykKKwkJCQl0LT5zaXplID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXVwZGF0ZV90cmVlX2VudHJ5KHQpOworCX0KK30KKworaW50IGRpZmZfdHJlZShzdHJ1Y3QgdHJlZV9kZXNjICp0MSwgc3RydWN0IHRyZWVfZGVzYyAqdDIsCisJICAgICAgY29uc3QgY2hhciAqYmFzZV9zdHIsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJhc2U7CisJaW50IGJhc2VsZW4gPSBzdHJsZW4oYmFzZV9zdHIpOworCWVudW0gaW50ZXJlc3RpbmcgdDFfbWF0Y2ggPSBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisJZW51bSBpbnRlcmVzdGluZyB0Ml9tYXRjaCA9IGVudHJ5X25vdF9pbnRlcmVzdGluZzsKKworCS8qIEVuYWJsZSByZWN1cnNpb24gaW5kZWZpbml0ZWx5ICovCisJb3B0LT5wYXRoc3BlYy5yZWN1cnNpdmUgPSBESUZGX09QVF9UU1Qob3B0LCBSRUNVUlNJVkUpOworCW9wdC0+cGF0aHNwZWMubWF4X2RlcHRoID0gLTE7CisKKwlzdHJidWZfaW5pdCgmYmFzZSwgUEFUSF9NQVgpOworCXN0cmJ1Zl9hZGQoJmJhc2UsIGJhc2Vfc3RyLCBiYXNlbGVuKTsKKworCWZvciAoOzspIHsKKwkJaWYgKGRpZmZfY2FuX3F1aXRfZWFybHkob3B0KSkKKwkJCWJyZWFrOworCQlpZiAob3B0LT5wYXRoc3BlYy5ucikgeworCQkJc2tpcF91bmludGVyZXN0aW5nKHQxLCAmYmFzZSwgb3B0LCAmdDFfbWF0Y2gpOworCQkJc2tpcF91bmludGVyZXN0aW5nKHQyLCAmYmFzZSwgb3B0LCAmdDJfbWF0Y2gpOworCQl9CisJCWlmICghdDEtPnNpemUpIHsKKwkJCWlmICghdDItPnNpemUpCisJCQkJYnJlYWs7CisJCQlzaG93X2VudHJ5KG9wdCwgIisiLCB0MiwgJmJhc2UpOworCQkJdXBkYXRlX3RyZWVfZW50cnkodDIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCF0Mi0+c2l6ZSkgeworCQkJc2hvd19lbnRyeShvcHQsICItIiwgdDEsICZiYXNlKTsKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KHQxKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN3aXRjaCAoY29tcGFyZV90cmVlX2VudHJ5KHQxLCB0MiwgJmJhc2UsIG9wdCkpIHsKKwkJY2FzZSAtMToKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KHQxKTsKKwkJCWNvbnRpbnVlOworCQljYXNlIDA6CisJCQl1cGRhdGVfdHJlZV9lbnRyeSh0MSk7CisJCQkvKiBGYWxsdGhyb3VnaCAqLworCQljYXNlIDE6CisJCQl1cGRhdGVfdHJlZV9lbnRyeSh0Mik7CisJCQljb250aW51ZTsKKwkJfQorCQlkaWUoImdpdCBkaWZmLXRyZWU6IGludGVybmFsIGVycm9yIik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJhc2UpOworCXJldHVybiAwOworfQorCisvKgorICogRG9lcyBpdCBsb29rIGxpa2UgdGhlIHJlc3VsdGluZyBkaWZmIG1pZ2h0IGJlIGR1ZSB0byBhIHJlbmFtZT8KKyAqICAtIHNpbmdsZSBlbnRyeQorICogIC0gbm90IGEgdmFsaWQgcHJldmlvdXMgZmlsZQorICovCitzdGF0aWMgaW5saW5lIGludCBkaWZmX21pZ2h0X2JlX3JlbmFtZSh2b2lkKQoreworCXJldHVybiBkaWZmX3F1ZXVlZF9kaWZmLm5yID09IDEgJiYKKwkJIURJRkZfRklMRV9WQUxJRChkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlWzBdLT5vbmUpOworfQorCitzdGF0aWMgdm9pZCB0cnlfdG9fZm9sbG93X3JlbmFtZXMoc3RydWN0IHRyZWVfZGVzYyAqdDEsIHN0cnVjdCB0cmVlX2Rlc2MgKnQyLCBjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmX29wdHM7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKmNob2ljZTsKKwljb25zdCBjaGFyICpwYXRoc1sxXTsKKwlpbnQgaTsKKworCS8qIFJlbW92ZSB0aGUgZmlsZSBjcmVhdGlvbiBlbnRyeSBmcm9tIHRoZSBkaWZmIHF1ZXVlLCBhbmQgcmVtZW1iZXIgaXQgKi8KKwljaG9pY2UgPSBxLT5xdWV1ZVswXTsKKwlxLT5uciA9IDA7CisKKwlkaWZmX3NldHVwKCZkaWZmX29wdHMpOworCURJRkZfT1BUX1NFVCgmZGlmZl9vcHRzLCBSRUNVUlNJVkUpOworCURJRkZfT1BUX1NFVCgmZGlmZl9vcHRzLCBGSU5EX0NPUElFU19IQVJERVIpOworCWRpZmZfb3B0cy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCWRpZmZfb3B0cy5zaW5nbGVfZm9sbG93ID0gb3B0LT5wYXRoc3BlYy5yYXdbMF07CisJZGlmZl9vcHRzLmJyZWFrX29wdCA9IG9wdC0+YnJlYWtfb3B0OworCWRpZmZfb3B0cy5yZW5hbWVfc2NvcmUgPSBvcHQtPnJlbmFtZV9zY29yZTsKKwlwYXRoc1swXSA9IE5VTEw7CisJZGlmZl90cmVlX3NldHVwX3BhdGhzKHBhdGhzLCAmZGlmZl9vcHRzKTsKKwlkaWZmX3NldHVwX2RvbmUoJmRpZmZfb3B0cyk7CisJZGlmZl90cmVlKHQxLCB0MiwgYmFzZSwgJmRpZmZfb3B0cyk7CisJZGlmZmNvcmVfc3RkKCZkaWZmX29wdHMpOworCWRpZmZfdHJlZV9yZWxlYXNlX3BhdGhzKCZkaWZmX29wdHMpOworCisJLyogR28gdGhyb3VnaCB0aGUgbmV3IHNldCBvZiBmaWxlcGFpcmluZywgYW5kIHNlZSBpZiB3ZSBmaW5kIGEgbW9yZSBpbnRlcmVzdGluZyBvbmUgKi8KKwlvcHQtPmZvdW5kX2ZvbGxvdyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKworCQkvKgorCQkgKiBGb3VuZCBhIHNvdXJjZT8gTm90IG9ubHkgZG8gd2UgdXNlIHRoYXQgZm9yIHRoZSBuZXcKKwkJICogZGlmZl9xdWV1ZWRfZGlmZiwgd2Ugd2lsbCBhbHNvIHVzZSB0aGF0IGFzIHRoZSBwYXRoIGluCisJCSAqIHRoZSBmdXR1cmUhCisJCSAqLworCQlpZiAoKHAtPnN0YXR1cyA9PSAnUicgfHwgcC0+c3RhdHVzID09ICdDJykgJiYKKwkJICAgICFzdHJjbXAocC0+dHdvLT5wYXRoLCBvcHQtPnBhdGhzcGVjLnJhd1swXSkpIHsKKwkJCS8qIFN3aXRjaCB0aGUgZmlsZS1wYWlycyBhcm91bmQgKi8KKwkJCXEtPnF1ZXVlW2ldID0gY2hvaWNlOworCQkJY2hvaWNlID0gcDsKKworCQkJLyogVXBkYXRlIHRoZSBwYXRoIHdlIHVzZSBmcm9tIG5vdyBvbi4uICovCisJCQlkaWZmX3RyZWVfcmVsZWFzZV9wYXRocyhvcHQpOworCQkJb3B0LT5wYXRoc3BlYy5yYXdbMF0gPSB4c3RyZHVwKHAtPm9uZS0+cGF0aCk7CisJCQlkaWZmX3RyZWVfc2V0dXBfcGF0aHMob3B0LT5wYXRoc3BlYy5yYXcsIG9wdCk7CisKKwkJCS8qCisJCQkgKiBUaGUgY2FsbGVyIGV4cGVjdHMgdXMgdG8gcmV0dXJuIGEgc2V0IG9mIHZhbmlsbGEKKwkJCSAqIGZpbGVwYWlycyB0byBsZXQgYSBsYXRlciBjYWxsIHRvIGRpZmZjb3JlX3N0ZCgpCisJCQkgKiBpdCBtYWtlcyB0byBzb3J0IHRoZSByZW5hbWVzIG91dCAoYW1vbmcgb3RoZXIKKwkJCSAqIHRoaW5ncyksIGJ1dCB3ZSBhbHJlYWR5IGhhdmUgZm91bmQgcmVuYW1lcworCQkJICogb3Vyc2VsdmVzOyBzaWduYWwgZGlmZmNvcmVfc3RkKCkgbm90IHRvIG11Y2sgd2l0aAorCQkJICogcmVuYW1lIGluZm9ybWF0aW9uLgorCQkJICovCisJCQlvcHQtPmZvdW5kX2ZvbGxvdyA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogVGhlbiwgZGlzY2FyZCBhbGwgdGhlIG5vbi1yZWxldmFudCBmaWxlIHBhaXJzLi4uCisJICovCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJZGlmZl9mcmVlX2ZpbGVwYWlyKHApOworCX0KKworCS8qCisJICogLi4gYW5kIHJlLWluc3RhdGUgdGhlIG9uZSB3ZSB3YW50ICh3aGljaCBtaWdodCBiZSBlaXRoZXIgdGhlCisJICogb3JpZ2luYWwgb25lLCBvciB0aGUgcmVuYW1lL2NvcHkgd2UgZm91bmQpCisJICovCisJcS0+cXVldWVbMF0gPSBjaG9pY2U7CisJcS0+bnIgPSAxOworfQorCitpbnQgZGlmZl90cmVlX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqb2xkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXcsIGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwl2b2lkICp0cmVlMSwgKnRyZWUyOworCXN0cnVjdCB0cmVlX2Rlc2MgdDEsIHQyOworCXVuc2lnbmVkIGxvbmcgc2l6ZTEsIHNpemUyOworCWludCByZXR2YWw7CisKKwl0cmVlMSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKG9sZCwgdHJlZV90eXBlLCAmc2l6ZTEsIE5VTEwpOworCWlmICghdHJlZTEpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgc291cmNlIHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KG9sZCkpOworCXRyZWUyID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UobmV3LCB0cmVlX3R5cGUsICZzaXplMiwgTlVMTCk7CisJaWYgKCF0cmVlMikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBkZXN0aW5hdGlvbiB0cmVlICglcykiLCBzaGExX3RvX2hleChuZXcpKTsKKwlpbml0X3RyZWVfZGVzYygmdDEsIHRyZWUxLCBzaXplMSk7CisJaW5pdF90cmVlX2Rlc2MoJnQyLCB0cmVlMiwgc2l6ZTIpOworCXJldHZhbCA9IGRpZmZfdHJlZSgmdDEsICZ0MiwgYmFzZSwgb3B0KTsKKwlpZiAoISpiYXNlICYmIERJRkZfT1BUX1RTVChvcHQsIEZPTExPV19SRU5BTUVTKSAmJiBkaWZmX21pZ2h0X2JlX3JlbmFtZSgpKSB7CisJCWluaXRfdHJlZV9kZXNjKCZ0MSwgdHJlZTEsIHNpemUxKTsKKwkJaW5pdF90cmVlX2Rlc2MoJnQyLCB0cmVlMiwgc2l6ZTIpOworCQl0cnlfdG9fZm9sbG93X3JlbmFtZXMoJnQxLCAmdDIsIGJhc2UsIG9wdCk7CisJfQorCWZyZWUodHJlZTEpOworCWZyZWUodHJlZTIpOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBkaWZmX3Jvb3RfdHJlZV9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldywgY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCWludCByZXR2YWw7CisJdm9pZCAqdHJlZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJc3RydWN0IHRyZWVfZGVzYyBlbXB0eSwgcmVhbDsKKworCXRyZWUgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShuZXcsIHRyZWVfdHlwZSwgJnNpemUsIE5VTEwpOworCWlmICghdHJlZSkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCByb290IHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KG5ldykpOworCWluaXRfdHJlZV9kZXNjKCZyZWFsLCB0cmVlLCBzaXplKTsKKworCWluaXRfdHJlZV9kZXNjKCZlbXB0eSwgIiIsIDApOworCXJldHZhbCA9IGRpZmZfdHJlZSgmZW1wdHksICZyZWFsLCBiYXNlLCBvcHQpOworCWZyZWUodHJlZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKwordm9pZCBkaWZmX3RyZWVfcmVsZWFzZV9wYXRocyhzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJZnJlZV9wYXRoc3BlYygmb3B0LT5wYXRoc3BlYyk7Cit9CisKK3ZvaWQgZGlmZl90cmVlX3NldHVwX3BhdGhzKGNvbnN0IGNoYXIgKipwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJaW5pdF9wYXRoc3BlYygmb3B0LT5wYXRoc3BlYywgcCk7Cit9CmRpZmYgLS1naXQgYS90cmVlLXdhbGsuYyBiL3RyZWUtd2Fsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MmM3Y2QKLS0tIC9kZXYvbnVsbAorKysgYi90cmVlLXdhbGsuYwpAQCAtMCwwICsxLDY3MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAidHJlZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X21vZGUoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgKm1vZGVwKQoreworCXVuc2lnbmVkIGNoYXIgYzsKKwl1bnNpZ25lZCBpbnQgbW9kZSA9IDA7CisKKwlpZiAoKnN0ciA9PSAnICcpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKChjID0gKnN0cisrKSAhPSAnICcpIHsKKwkJaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykKKwkJCXJldHVybiBOVUxMOworCQltb2RlID0gKG1vZGUgPDwgMykgKyAoYyAtICcwJyk7CisJfQorCSptb2RlcCA9IG1vZGU7CisJcmV0dXJuIHN0cjsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwl1bnNpZ25lZCBpbnQgbW9kZSwgbGVuOworCisJaWYgKHNpemUgPCAyNCB8fCBidWZbc2l6ZSAtIDIxXSkKKwkJZGllKCJjb3JydXB0IHRyZWUgZmlsZSIpOworCisJcGF0aCA9IGdldF9tb2RlKGJ1ZiwgJm1vZGUpOworCWlmICghcGF0aCB8fCAhKnBhdGgpCisJCWRpZSgiY29ycnVwdCB0cmVlIGZpbGUiKTsKKwlsZW4gPSBzdHJsZW4ocGF0aCkgKyAxOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvciBlbnRyeSAqLworCWRlc2MtPmVudHJ5LnBhdGggPSBwYXRoOworCWRlc2MtPmVudHJ5Lm1vZGUgPSBtb2RlOworCWRlc2MtPmVudHJ5LnNoYTEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKShwYXRoICsgbGVuKTsKK30KKwordm9pZCBpbml0X3RyZWVfZGVzYyhzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlkZXNjLT5idWZmZXIgPSBidWZmZXI7CisJZGVzYy0+c2l6ZSA9IHNpemU7CisJaWYgKHNpemUpCisJCWRlY29kZV90cmVlX2VudHJ5KGRlc2MsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3ZvaWQgKmZpbGxfdHJlZV9kZXNjcmlwdG9yKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gMDsKKwl2b2lkICpidWYgPSBOVUxMOworCisJaWYgKHNoYTEpIHsKKwkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgdHJlZV90eXBlLCAmc2l6ZSwgTlVMTCk7CisJCWlmICghYnVmKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCB0cmVlICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0KKwlpbml0X3RyZWVfZGVzYyhkZXNjLCBidWYsIHNpemUpOworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkIGVudHJ5X2NsZWFyKHN0cnVjdCBuYW1lX2VudHJ5ICphKQoreworCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKK30KKworc3RhdGljIHZvaWQgZW50cnlfZXh0cmFjdChzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3QgbmFtZV9lbnRyeSAqYSkKK3sKKwkqYSA9IHQtPmVudHJ5OworfQorCit2b2lkIHVwZGF0ZV90cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MpCit7CisJY29uc3Qgdm9pZCAqYnVmID0gZGVzYy0+YnVmZmVyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IGRlc2MtPmVudHJ5LnNoYTEgKyAyMDsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBkZXNjLT5zaXplOworCXVuc2lnbmVkIGxvbmcgbGVuID0gZW5kIC0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilidWY7CisKKwlpZiAoc2l6ZSA8IGxlbikKKwkJZGllKCJjb3JydXB0IHRyZWUgZmlsZSIpOworCWJ1ZiA9IGVuZDsKKwlzaXplIC09IGxlbjsKKwlkZXNjLT5idWZmZXIgPSBidWY7CisJZGVzYy0+c2l6ZSA9IHNpemU7CisJaWYgKHNpemUpCisJCWRlY29kZV90cmVlX2VudHJ5KGRlc2MsIGJ1Ziwgc2l6ZSk7Cit9CisKK2ludCB0cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIHN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSkKK3sKKwlpZiAoIWRlc2MtPnNpemUpCisJCXJldHVybiAwOworCisJKmVudHJ5ID0gZGVzYy0+ZW50cnk7CisJdXBkYXRlX3RyZWVfZW50cnkoZGVzYyk7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgc2V0dXBfdHJhdmVyc2VfaW5mbyhzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYmFzZSkKK3sKKwlpbnQgcGF0aGxlbiA9IHN0cmxlbihiYXNlKTsKKwlzdGF0aWMgc3RydWN0IHRyYXZlcnNlX2luZm8gZHVtbXk7CisKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisJaWYgKHBhdGhsZW4gJiYgYmFzZVtwYXRobGVuLTFdID09ICcvJykKKwkJcGF0aGxlbi0tOworCWluZm8tPnBhdGhsZW4gPSBwYXRobGVuID8gcGF0aGxlbiArIDEgOiAwOworCWluZm8tPm5hbWUucGF0aCA9IGJhc2U7CisJaW5mby0+bmFtZS5zaGExID0gKHZvaWQgKikoYmFzZSArIHBhdGhsZW4gKyAxKTsKKwlpZiAocGF0aGxlbikKKwkJaW5mby0+cHJldiA9ICZkdW1teTsKK30KKworY2hhciAqbWFrZV90cmF2ZXJzZV9wYXRoKGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbikKK3sKKwlpbnQgbGVuID0gdHJlZV9lbnRyeV9sZW4obik7CisJaW50IHBhdGhsZW4gPSBpbmZvLT5wYXRobGVuOworCisJcGF0aFtwYXRobGVuICsgbGVuXSA9IDA7CisJZm9yICg7OykgeworCQltZW1jcHkocGF0aCArIHBhdGhsZW4sIG4tPnBhdGgsIGxlbik7CisJCWlmICghcGF0aGxlbikKKwkJCWJyZWFrOworCQlwYXRoWy0tcGF0aGxlbl0gPSAnLyc7CisJCW4gPSAmaW5mby0+bmFtZTsKKwkJbGVuID0gdHJlZV9lbnRyeV9sZW4obik7CisJCWluZm8gPSBpbmZvLT5wcmV2OworCQlwYXRobGVuIC09IGxlbjsKKwl9CisJcmV0dXJuIHBhdGg7Cit9CisKK3N0cnVjdCB0cmVlX2Rlc2Nfc2tpcCB7CisJc3RydWN0IHRyZWVfZGVzY19za2lwICpwcmV2OworCWNvbnN0IHZvaWQgKnB0cjsKK307CisKK3N0cnVjdCB0cmVlX2Rlc2NfeCB7CisJc3RydWN0IHRyZWVfZGVzYyBkOworCXN0cnVjdCB0cmVlX2Rlc2Nfc2tpcCAqc2tpcDsKK307CisKK3N0YXRpYyBpbnQgbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKmEsIGludCBhX2xlbiwKKwkJCWNvbnN0IGNoYXIgKmIsIGludCBiX2xlbikKK3sKKwlpbnQgbGVuID0gKGFfbGVuIDwgYl9sZW4pID8gYV9sZW4gOiBiX2xlbjsKKwlpbnQgY21wID0gbWVtY21wKGEsIGIsIGxlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlyZXR1cm4gKGFfbGVuIC0gYl9sZW4pOworfQorCitzdGF0aWMgaW50IGNoZWNrX2VudHJ5X21hdGNoKGNvbnN0IGNoYXIgKmEsIGludCBhX2xlbiwgY29uc3QgY2hhciAqYiwgaW50IGJfbGVuKQoreworCS8qCisJICogVGhlIGNhbGxlciB3YW50cyB0byBwaWNrICphKiBmcm9tIGEgdHJlZSBvciBub3RoaW5nLgorCSAqIFdlIGFyZSBsb29raW5nIGF0ICpiKiBpbiBhIHRyZWUuCisJICoKKwkgKiAoMCkgSWYgYSBhbmQgYiBhcmUgdGhlIHNhbWUgbmFtZSwgd2UgYXJlIHRyaXZpYWxseSBoYXBweS4KKwkgKgorCSAqIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJpbGl0aWVzIHdoZXJlICphKiBjb3VsZCBiZSBoaWRpbmcKKwkgKiBiZWhpbmQgKmIqLgorCSAqCisJICogKDEpICphKiA9PSAidCIsICAgKmIqID09ICJhYiIgIGkuZS4gKmIqIHNvcnRzIGVhcmxpZXIgdGhhbiAqYSogbm8KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0dGVyIHdoYXQuCisJICogKDIpICphKiA9PSAidCIsICAgKmIqID09ICJ0LTIiIGFuZCAidCIgaXMgYSBzdWJ0cmVlIGluIHRoZSB0cmVlOworCSAqICgzKSAqYSogPT0gInQtMiIsICpiKiA9PSAidCIgICBhbmQgInQtMiIgaXMgYSBibG9iIGluIHRoZSB0cmVlLgorCSAqCisJICogT3RoZXJ3aXNlIHdlIGtub3cgKmEqIHdvbid0IGFwcGVhciBpbiB0aGUgdHJlZSB3aXRob3V0CisJICogc2Nhbm5pbmcgZnVydGhlci4KKwkgKi8KKworCWludCBjbXAgPSBuYW1lX2NvbXBhcmUoYSwgYV9sZW4sIGIsIGJfbGVuKTsKKworCS8qIE1vc3QgY29tbW9uIGNhc2UgZmlyc3QgLS0gcmVhZGluZyBzeW5jJ2QgdHJlZXMgKi8KKwlpZiAoIWNtcCkKKwkJcmV0dXJuIGNtcDsKKworCWlmICgwIDwgY21wKSB7CisJCS8qIGEgY29tZXMgYWZ0ZXIgYjsgaXQgZG9lcyBub3QgbWF0dGVyIGlmIGl0IGlzIGNhc2UgKDMpCisJCWlmIChiX2xlbiA8IGFfbGVuICYmICFtZW1jbXAoYSwgYiwgYl9sZW4pICYmIGFbYl9sZW5dIDwgJy8nKQorCQkJcmV0dXJuIDE7CisJCSovCisJCXJldHVybiAxOyAvKiBrZWVwIGxvb2tpbmcgKi8KKwl9CisKKwkvKiBiIGNvbWVzIGFmdGVyIGE7IGFyZSB3ZSBsb29raW5nIGF0IGNhc2UgKDIpPyAqLworCWlmIChhX2xlbiA8IGJfbGVuICYmICFtZW1jbXAoYSwgYiwgYV9sZW4pICYmIGJbYV9sZW5dIDwgJy8nKQorCQlyZXR1cm4gMTsgLyoga2VlcCBsb29raW5nICovCisKKwlyZXR1cm4gLTE7IC8qIGEgY2Fubm90IGFwcGVhciBpbiB0aGUgdHJlZSAqLworfQorCisvKgorICogRnJvbSB0aGUgZXh0ZW5kZWQgdHJlZV9kZXNjLCBleHRyYWN0IHRoZSBmaXJzdCBuYW1lIGVudHJ5LCB3aGlsZQorICogcGF5aW5nIGF0dGVudGlvbiB0byB0aGUgY2FuZGlkYXRlICJmaXJzdCIgbmFtZS4gIE1vc3QgaW1wb3J0YW50bHksCisgKiB3aGVuIGxvb2tpbmcgZm9yIGFuIGVudHJ5LCBpZiB0aGVyZSBhcmUgZW50cmllcyB0aGF0IHNvcnRzIGVhcmxpZXIKKyAqIGluIHRoZSB0cmVlIG9iamVjdCByZXByZXNlbnRhdGlvbiB0aGFuIHRoYXQgbmFtZSwgc2tpcCB0aGVtIGFuZAorICogcHJvY2VzcyB0aGUgbmFtZWQgZW50cnkgZmlyc3QuICBXZSB3aWxsIHJlbWVtYmVyIHRoYXQgd2UgaGF2ZW4ndAorICogcHJvY2Vzc2VkIHRoZSBmaXJzdCBlbnRyeSB5ZXQsIGFuZCBpbiB0aGUgbGF0ZXIgY2FsbCBza2lwIHRoZQorICogZW50cnkgd2UgcHJvY2Vzc2VkIGVhcmx5IHdoZW4gdXBkYXRlX2V4dGVuZGVkX2VudHJ5KCkgaXMgY2FsbGVkLgorICoKKyAqIEUuZy4gaWYgdGhlIHVuZGVybHlpbmcgdHJlZSBvYmplY3QgaGFzIHRoZXNlIGVudHJpZXM6CisgKgorICogICAgYmxvYiAgICAidC0xIgorICogICAgYmxvYiAgICAidC0yIgorICogICAgdHJlZSAgICAidCIKKyAqICAgIGJsb2IgICAgInQ9MSIKKyAqCisgKiBhbmQgdGhlICJmaXJzdCIgYXNrcyBmb3IgInQiLCByZW1lbWJlciB0aGF0IHdlIHN0aWxsIG5lZWQgdG8KKyAqIHByb2Nlc3MgInQtMSIgYW5kICJ0LTIiIGJ1dCBleHRyYWN0ICJ0Ii4gIEFmdGVyIHByb2Nlc3NpbmcgdGhlCisgKiBlbnRyeSAidCIgZnJvbSB0aGlzIGNhbGwsIHRoZSBjYWxsZXIgd2lsbCBsZXQgdXMga25vdyBieSBjYWxsaW5nCisgKiB1cGRhdGVfZXh0ZW5kZWRfZW50cnkoKSB0aGF0IHdlIGNhbiByZW1lbWJlciAidCIgaGFzIGJlZW4gcHJvY2Vzc2VkCisgKiBhbHJlYWR5LgorICovCisKK3N0YXRpYyB2b2lkIGV4dGVuZGVkX2VudHJ5X2V4dHJhY3Qoc3RydWN0IHRyZWVfZGVzY194ICp0LAorCQkJCSAgIHN0cnVjdCBuYW1lX2VudHJ5ICphLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZpcnN0LAorCQkJCSAgIGludCBmaXJzdF9sZW4pCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwlpbnQgbGVuOworCXN0cnVjdCB0cmVlX2Rlc2MgcHJvYmU7CisJc3RydWN0IHRyZWVfZGVzY19za2lwICpza2lwOworCisJLyoKKwkgKiBFeHRyYWN0IHRoZSBmaXJzdCBlbnRyeSBmcm9tIHRoZSB0cmVlX2Rlc2MsIGJ1dCBza2lwIHRoZQorCSAqIG9uZXMgdGhhdCB3ZSBhbHJlYWR5IHJldHVybmVkIGluIGVhcmxpZXIgcm91bmRzLgorCSAqLworCXdoaWxlICgxKSB7CisJCWlmICghdC0+ZC5zaXplKSB7CisJCQllbnRyeV9jbGVhcihhKTsKKwkJCWJyZWFrOyAvKiBub3QgZm91bmQgKi8KKwkJfQorCQllbnRyeV9leHRyYWN0KCZ0LT5kLCBhKTsKKwkJZm9yIChza2lwID0gdC0+c2tpcDsgc2tpcDsgc2tpcCA9IHNraXAtPnByZXYpCisJCQlpZiAoYS0+cGF0aCA9PSBza2lwLT5wdHIpCisJCQkJYnJlYWs7IC8qIGZvdW5kICovCisJCWlmICghc2tpcCkKKwkJCWJyZWFrOworCQkvKiBXZSBoYXZlIHByb2Nlc3NlZCB0aGlzIGVudHJ5IGFscmVhZHkuICovCisJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0LT5kKTsKKwl9CisKKwlpZiAoIWZpcnN0IHx8ICFhLT5wYXRoKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFRoZSBjYWxsZXIgd2FudHMgImZpcnN0IiBmcm9tIHRoaXMgdHJlZSwgb3Igbm90aGluZy4KKwkgKi8KKwlwYXRoID0gYS0+cGF0aDsKKwlsZW4gPSB0cmVlX2VudHJ5X2xlbihhKTsKKwlzd2l0Y2ggKGNoZWNrX2VudHJ5X21hdGNoKGZpcnN0LCBmaXJzdF9sZW4sIHBhdGgsIGxlbikpIHsKKwljYXNlIC0xOgorCQllbnRyeV9jbGVhcihhKTsKKwljYXNlIDA6CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gbG9vay1haGVhZCAtLSB3ZSBzdXNwZWN0IHRoYXQgYSBzdWJ0cmVlIHdob3NlCisJICogbmFtZSBpcyAiZmlyc3QiIG1heSBiZSBoaWRpbmcgYmVoaW5kIHRoZSBjdXJyZW50IGVudHJ5ICJwYXRoIi4KKwkgKi8KKwlwcm9iZSA9IHQtPmQ7CisJd2hpbGUgKHByb2JlLnNpemUpIHsKKwkJZW50cnlfZXh0cmFjdCgmcHJvYmUsIGEpOworCQlwYXRoID0gYS0+cGF0aDsKKwkJbGVuID0gdHJlZV9lbnRyeV9sZW4oYSk7CisJCXN3aXRjaCAoY2hlY2tfZW50cnlfbWF0Y2goZmlyc3QsIGZpcnN0X2xlbiwgcGF0aCwgbGVuKSkgeworCQljYXNlIC0xOgorCQkJZW50cnlfY2xlYXIoYSk7CisJCWNhc2UgMDoKKwkJCXJldHVybjsKKwkJZGVmYXVsdDoKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KCZwcm9iZSk7CisJCQlicmVhazsKKwkJfQorCQkvKiBrZWVwIGxvb2tpbmcgKi8KKwl9CisJZW50cnlfY2xlYXIoYSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9leHRlbmRlZF9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjX3ggKnQsIHN0cnVjdCBuYW1lX2VudHJ5ICphKQoreworCWlmICh0LT5kLmVudHJ5LnBhdGggPT0gYS0+cGF0aCkgeworCQl1cGRhdGVfdHJlZV9lbnRyeSgmdC0+ZCk7CisJfSBlbHNlIHsKKwkJLyogd2UgaGF2ZSByZXR1cm5lZCB0aGlzIGVudHJ5IGVhcmx5ICovCisJCXN0cnVjdCB0cmVlX2Rlc2Nfc2tpcCAqc2tpcCA9IHhtYWxsb2Moc2l6ZW9mKCpza2lwKSk7CisJCXNraXAtPnB0ciA9IGEtPnBhdGg7CisJCXNraXAtPnByZXYgPSB0LT5za2lwOworCQl0LT5za2lwID0gc2tpcDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZXh0ZW5kZWRfZW50cnkoc3RydWN0IHRyZWVfZGVzY194ICp0KQoreworCXN0cnVjdCB0cmVlX2Rlc2Nfc2tpcCAqcCwgKnM7CisKKwlmb3IgKHMgPSB0LT5za2lwOyBzOyBzID0gcCkgeworCQlwID0gcy0+cHJldjsKKwkJZnJlZShzKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBydW5lX3RyYXZlcnNhbChzdHJ1Y3QgbmFtZV9lbnRyeSAqZSwKKwkJCQkgIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJCQkgIGludCBzdGlsbF9pbnRlcmVzdGluZykKK3sKKwlpZiAoIWluZm8tPnBhdGhzcGVjIHx8IHN0aWxsX2ludGVyZXN0aW5nID09IDIpCisJCXJldHVybiAyOworCWlmIChzdGlsbF9pbnRlcmVzdGluZyA8IDApCisJCXJldHVybiBzdGlsbF9pbnRlcmVzdGluZzsKKwlyZXR1cm4gdHJlZV9lbnRyeV9pbnRlcmVzdGluZyhlLCBiYXNlLCAwLCBpbmZvLT5wYXRoc3BlYyk7Cit9CisKK2ludCB0cmF2ZXJzZV90cmVlcyhpbnQgbiwgc3RydWN0IHRyZWVfZGVzYyAqdCwgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCit7CisJaW50IHJldCA9IDA7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnkgPSB4bWFsbG9jKG4qc2l6ZW9mKCplbnRyeSkpOworCWludCBpOworCXN0cnVjdCB0cmVlX2Rlc2NfeCAqdHggPSB4Y2FsbG9jKG4sIHNpemVvZigqdHgpKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJhc2UgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaW50ZXJlc3RpbmcgPSAxOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJdHhbaV0uZCA9IHRbaV07CisKKwlpZiAoaW5mby0+cHJldikgeworCQlzdHJidWZfZ3JvdygmYmFzZSwgaW5mby0+cGF0aGxlbik7CisJCW1ha2VfdHJhdmVyc2VfcGF0aChiYXNlLmJ1ZiwgaW5mby0+cHJldiwgJmluZm8tPm5hbWUpOworCQliYXNlLmJ1ZltpbmZvLT5wYXRobGVuLTFdID0gJy8nOworCQlzdHJidWZfc2V0bGVuKCZiYXNlLCBpbmZvLT5wYXRobGVuKTsKKwl9CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBsb25nIG1hc2ssIGRpcm1hc2s7CisJCWNvbnN0IGNoYXIgKmZpcnN0ID0gTlVMTDsKKwkJaW50IGZpcnN0X2xlbiA9IDA7CisJCXN0cnVjdCBuYW1lX2VudHJ5ICplID0gTlVMTDsKKwkJaW50IGxlbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQllID0gZW50cnkgKyBpOworCQkJZXh0ZW5kZWRfZW50cnlfZXh0cmFjdCh0eCArIGksIGUsIE5VTEwsIDApOworCQl9CisKKwkJLyoKKwkJICogQSB0cmVlIG1heSBoYXZlICJ0LTIiIGF0IHRoZSBjdXJyZW50IGxvY2F0aW9uIGV2ZW4KKwkJICogdGhvdWdoIGl0IG1heSBoYXZlICJ0IiB0aGF0IGlzIGEgc3VidHJlZSBiZWhpbmQgaXQsCisJCSAqIGFuZCBhbm90aGVyIHRyZWUgbWF5IHJldHVybiAidCIuICBXZSB3YW50IHRvIGdyYWIKKwkJICogYWxsICJ0IiBmcm9tIGFsbCB0cmVlcyB0byBtYXRjaCBpbiBzdWNoIGEgY2FzZS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWUgPSBlbnRyeSArIGk7CisJCQlpZiAoIWUtPnBhdGgpCisJCQkJY29udGludWU7CisJCQlsZW4gPSB0cmVlX2VudHJ5X2xlbihlKTsKKwkJCWlmICghZmlyc3QpIHsKKwkJCQlmaXJzdCA9IGUtPnBhdGg7CisJCQkJZmlyc3RfbGVuID0gbGVuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG5hbWVfY29tcGFyZShlLT5wYXRoLCBsZW4sIGZpcnN0LCBmaXJzdF9sZW4pIDwgMCkgeworCQkJCWZpcnN0ID0gZS0+cGF0aDsKKwkJCQlmaXJzdF9sZW4gPSBsZW47CisJCQl9CisJCX0KKworCQlpZiAoZmlyc3QpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCQllID0gZW50cnkgKyBpOworCQkJCWV4dGVuZGVkX2VudHJ5X2V4dHJhY3QodHggKyBpLCBlLCBmaXJzdCwgZmlyc3RfbGVuKTsKKwkJCQkvKiBDdWxsIHRoZSBvbmVzIHRoYXQgYXJlIG5vdCB0aGUgZWFybGllc3QgKi8KKwkJCQlpZiAoIWUtPnBhdGgpCisJCQkJCWNvbnRpbnVlOworCQkJCWxlbiA9IHRyZWVfZW50cnlfbGVuKGUpOworCQkJCWlmIChuYW1lX2NvbXBhcmUoZS0+cGF0aCwgbGVuLCBmaXJzdCwgZmlyc3RfbGVuKSkKKwkJCQkJZW50cnlfY2xlYXIoZSk7CisJCQl9CisJCX0KKworCQkvKiBOb3cgd2UgaGF2ZSBpbiBlbnRyeVtpXSB0aGUgZWFybGllc3QgbmFtZSBmcm9tIHRoZSB0cmVlcyAqLworCQltYXNrID0gMDsKKwkJZGlybWFzayA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWlmICghZW50cnlbaV0ucGF0aCkKKwkJCQljb250aW51ZTsKKwkJCW1hc2sgfD0gMXVsIDw8IGk7CisJCQlpZiAoU19JU0RJUihlbnRyeVtpXS5tb2RlKSkKKwkJCQlkaXJtYXNrIHw9IDF1bCA8PCBpOworCQkJZSA9ICZlbnRyeVtpXTsKKwkJfQorCQlpZiAoIW1hc2spCisJCQlicmVhazsKKwkJaW50ZXJlc3RpbmcgPSBwcnVuZV90cmF2ZXJzYWwoZSwgaW5mbywgJmJhc2UsIGludGVyZXN0aW5nKTsKKwkJaWYgKGludGVyZXN0aW5nIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoaW50ZXJlc3RpbmcpIHsKKwkJCXJldCA9IGluZm8tPmZuKG4sIG1hc2ssIGRpcm1hc2ssIGVudHJ5LCBpbmZvKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZXJyb3IgPSByZXQ7CisJCQkJaWYgKCFpbmZvLT5zaG93X2FsbF9lcnJvcnMpCisJCQkJCWJyZWFrOworCQkJfQorCQkJbWFzayAmPSByZXQ7CisJCX0KKwkJcmV0ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCWlmIChtYXNrICYgKDF1bCA8PCBpKSkKKwkJCQl1cGRhdGVfZXh0ZW5kZWRfZW50cnkodHggKyBpLCBlbnRyeSArIGkpOworCX0KKwlmcmVlKGVudHJ5KTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlmcmVlX2V4dGVuZGVkX2VudHJ5KHR4ICsgaSk7CisJZnJlZSh0eCk7CisJc3RyYnVmX3JlbGVhc2UoJmJhc2UpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBmaW5kX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqdCwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCAqbW9kZSkKK3sKKwlpbnQgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKwl3aGlsZSAodC0+c2l6ZSkgeworCQljb25zdCBjaGFyICplbnRyeTsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKKwkJaW50IGVudHJ5bGVuLCBjbXA7CisKKwkJc2hhMSA9IHRyZWVfZW50cnlfZXh0cmFjdCh0LCAmZW50cnksIG1vZGUpOworCQllbnRyeWxlbiA9IHRyZWVfZW50cnlfbGVuKCZ0LT5lbnRyeSk7CisJCXVwZGF0ZV90cmVlX2VudHJ5KHQpOworCQlpZiAoZW50cnlsZW4gPiBuYW1lbGVuKQorCQkJY29udGludWU7CisJCWNtcCA9IG1lbWNtcChuYW1lLCBlbnRyeSwgZW50cnlsZW4pOworCQlpZiAoY21wID4gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY21wIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoZW50cnlsZW4gPT0gbmFtZWxlbikgeworCQkJaGFzaGNweShyZXN1bHQsIHNoYTEpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKG5hbWVbZW50cnlsZW5dICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQlpZiAoIVNfSVNESVIoKm1vZGUpKQorCQkJYnJlYWs7CisJCWlmICgrK2VudHJ5bGVuID09IG5hbWVsZW4pIHsKKwkJCWhhc2hjcHkocmVzdWx0LCBzaGExKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiBnZXRfdHJlZV9lbnRyeShzaGExLCBuYW1lICsgZW50cnlsZW4sIHJlc3VsdCwgbW9kZSk7CisJfQorCXJldHVybiAtMTsKK30KKworaW50IGdldF90cmVlX2VudHJ5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRyZWVfc2hhMSwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgKm1vZGUpCit7CisJaW50IHJldHZhbDsKKwl2b2lkICp0cmVlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIHJvb3RbMjBdOworCisJdHJlZSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHRyZWVfc2hhMSwgdHJlZV90eXBlLCAmc2l6ZSwgcm9vdCk7CisJaWYgKCF0cmVlKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobmFtZVswXSA9PSAnXDAnKSB7CisJCWhhc2hjcHkoc2hhMSwgcm9vdCk7CisJCWZyZWUodHJlZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc2l6ZSkgeworCQlyZXR2YWwgPSAtMTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgdHJlZV9kZXNjIHQ7CisJCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLCBzaXplKTsKKwkJcmV0dmFsID0gZmluZF90cmVlX2VudHJ5KCZ0LCBuYW1lLCBzaGExLCBtb2RlKTsKKwl9CisJZnJlZSh0cmVlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG1hdGNoX2VudHJ5KGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSwgaW50IHBhdGhsZW4sCisJCSAgICAgICBjb25zdCBjaGFyICptYXRjaCwgaW50IG1hdGNobGVuLAorCQkgICAgICAgaW50ICpuZXZlcl9pbnRlcmVzdGluZykKK3sKKwlpbnQgbSA9IC0xOyAvKiBzaWduYWxzIHRoYXQgd2UgaGF2ZW4ndCBjYWxsZWQgc3RybmNtcCgpICovCisKKwlpZiAoKm5ldmVyX2ludGVyZXN0aW5nKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgbm90IHNlZW4gYW55IG1hdGNoIHRoYXQgc29ydHMgbGF0ZXIKKwkJICogdGhhbiB0aGUgY3VycmVudCBwYXRoLgorCQkgKi8KKworCQkvKgorCQkgKiBEb2VzIG1hdGNoIHNvcnQgc3RyaWN0bHkgZWFybGllciB0aGFuIHBhdGgKKwkJICogd2l0aCB0aGVpciBjb21tb24gcGFydHM/CisJCSAqLworCQltID0gc3RybmNtcChtYXRjaCwgZW50cnktPnBhdGgsCisJCQkgICAgKG1hdGNobGVuIDwgcGF0aGxlbikgPyBtYXRjaGxlbiA6IHBhdGhsZW4pOworCQlpZiAobSA8IDApCisJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBJZiB3ZSBjb21lIGhlcmUgZXZlbiBvbmNlLCB0aGF0IG1lYW5zIHRoZXJlIGlzIGF0CisJCSAqIGxlYXN0IG9uZSBwYXRoc3BlYyB0aGF0IHdvdWxkIHNvcnQgZXF1YWwgdG8gb3IKKwkJICogbGF0ZXIgdGhhbiB0aGUgcGF0aCB3ZSBhcmUgY3VycmVudGx5IGxvb2tpbmcgYXQuCisJCSAqIEluIG90aGVyIHdvcmRzLCBpZiB3ZSBoYXZlIG5ldmVyIHJlYWNoZWQgdGhpcyBwb2ludAorCQkgKiBhZnRlciBpdGVyYXRpbmcgYWxsIHBhdGhzcGVjcywgaXQgbWVhbnMgYWxsCisJCSAqIHBhdGhzcGVjcyBhcmUgZWl0aGVyIG91dHNpZGUgb2YgYmFzZSwgb3IgaW5zaWRlIHRoZQorCQkgKiBiYXNlIGJ1dCBzb3J0cyBzdHJpY3RseSBlYXJsaWVyIHRoYW4gdGhlIGN1cnJlbnQKKwkJICogb25lLiAgSW4gZWl0aGVyIGNhc2UsIHRoZXkgd2lsbCBuZXZlciBtYXRjaCB0aGUKKwkJICogc3Vic2VxdWVudCBlbnRyaWVzLiAgSW4gc3VjaCBhIGNhc2UsIHdlIGluaXRpYWxpemVkCisJCSAqIHRoZSB2YXJpYWJsZSB0byAtMSBhbmQgdGhhdCBpcyB3aGF0IHdpbGwgYmUKKwkJICogcmV0dXJuZWQsIGFsbG93aW5nIHRoZSBjYWxsZXIgdG8gdGVybWluYXRlIGVhcmx5LgorCQkgKi8KKwkJKm5ldmVyX2ludGVyZXN0aW5nID0gMDsKKwl9CisKKwlpZiAocGF0aGxlbiA+IG1hdGNobGVuKQorCQlyZXR1cm4gMDsKKworCWlmIChtYXRjaGxlbiA+IHBhdGhsZW4pIHsKKwkJaWYgKG1hdGNoW3BhdGhsZW5dICE9ICcvJykKKwkJCXJldHVybiAwOworCQlpZiAoIVNfSVNESVIoZW50cnktPm1vZGUpKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKG0gPT0gLTEpCisJCS8qCisJCSAqIHdlIGNoZWF0ZWQgYW5kIGRpZCBub3QgZG8gc3RybmNtcCgpLCBzbyB3ZSBkbworCQkgKiB0aGF0IGhlcmUuCisJCSAqLworCQltID0gc3RybmNtcChtYXRjaCwgZW50cnktPnBhdGgsIHBhdGhsZW4pOworCisJLyoKKwkgKiBJZiBjb21tb24gcGFydCBtYXRjaGVkIGVhcmxpZXIgdGhlbiBpdCBpcyBhIGhpdCwKKwkgKiBiZWNhdXNlIHdlIHJlamVjdGVkIHRoZSBjYXNlIHdoZXJlIHBhdGggaXMgbm90IGEKKwkgKiBsZWFkaW5nIGRpcmVjdG9yeSBhbmQgaXMgc2hvcnRlciB0aGFuIG1hdGNoLgorCSAqLworCWlmICghbSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXRjaF9kaXJfcHJlZml4KGNvbnN0IGNoYXIgKmJhc2UsCisJCQkgICAgY29uc3QgY2hhciAqbWF0Y2gsIGludCBtYXRjaGxlbikKK3sKKwlpZiAoc3RybmNtcChiYXNlLCBtYXRjaCwgbWF0Y2hsZW4pKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGJhc2UgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgYSBwYXRoIHdoaWNoCisJICogd2FzIHNwZWNpZmllZCwgYWxsIG9mIHRoZW0gYXJlIGludGVyZXN0aW5nLgorCSAqLworCWlmICghbWF0Y2hsZW4gfHwKKwkgICAgYmFzZVttYXRjaGxlbl0gPT0gJy8nIHx8CisJICAgIG1hdGNoW21hdGNobGVuIC0gMV0gPT0gJy8nKQorCQlyZXR1cm4gMTsKKworCS8qIEp1c3QgYSByYW5kb20gcHJlZml4IG1hdGNoICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJcyBhIHRyZWUgZW50cnkgaW50ZXJlc3RpbmcgZ2l2ZW4gdGhlIHBhdGhzcGVjIHdlIGhhdmU/CisgKgorICogUHJlLWNvbmRpdGlvbjogZWl0aGVyIGJhc2VsZW4gPT0gYmFzZV9vZmZzZXQgKGkuZS4gZW1wdHkgcGF0aCkKKyAqIG9yIGJhc2VbYmFzZWxlbi0xXSA9PSAnLycgKGkuZS4gd2l0aCB0cmFpbGluZyBzbGFzaCkuCisgKi8KK2VudW0gaW50ZXJlc3RpbmcgdHJlZV9lbnRyeV9pbnRlcmVzdGluZyhjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnksCisJCQkJCXN0cnVjdCBzdHJidWYgKmJhc2UsIGludCBiYXNlX29mZnNldCwKKwkJCQkJY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykKK3sKKwlpbnQgaTsKKwlpbnQgcGF0aGxlbiwgYmFzZWxlbiA9IGJhc2UtPmxlbiAtIGJhc2Vfb2Zmc2V0OworCWludCBuZXZlcl9pbnRlcmVzdGluZyA9IHBzLT5oYXNfd2lsZGNhcmQgPworCQllbnRyeV9ub3RfaW50ZXJlc3RpbmcgOiBhbGxfZW50cmllc19ub3RfaW50ZXJlc3Rpbmc7CisKKwlpZiAoIXBzLT5ucikgeworCQlpZiAoIXBzLT5yZWN1cnNpdmUgfHwgcHMtPm1heF9kZXB0aCA9PSAtMSkKKwkJCXJldHVybiBhbGxfZW50cmllc19pbnRlcmVzdGluZzsKKwkJcmV0dXJuIHdpdGhpbl9kZXB0aChiYXNlLT5idWYgKyBiYXNlX29mZnNldCwgYmFzZWxlbiwKKwkJCQkgICAgISFTX0lTRElSKGVudHJ5LT5tb2RlKSwKKwkJCQkgICAgcHMtPm1heF9kZXB0aCkgPworCQkJZW50cnlfaW50ZXJlc3RpbmcgOiBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisJfQorCisJcGF0aGxlbiA9IHRyZWVfZW50cnlfbGVuKGVudHJ5KTsKKworCWZvciAoaSA9IHBzLT5uciAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtID0gcHMtPml0ZW1zK2k7CisJCWNvbnN0IGNoYXIgKm1hdGNoID0gaXRlbS0+bWF0Y2g7CisJCWNvbnN0IGNoYXIgKmJhc2Vfc3RyID0gYmFzZS0+YnVmICsgYmFzZV9vZmZzZXQ7CisJCWludCBtYXRjaGxlbiA9IGl0ZW0tPmxlbjsKKworCQlpZiAoYmFzZWxlbiA+PSBtYXRjaGxlbikgeworCQkJLyogSWYgaXQgZG9lc24ndCBtYXRjaCwgbW92ZSBhbG9uZy4uLiAqLworCQkJaWYgKCFtYXRjaF9kaXJfcHJlZml4KGJhc2Vfc3RyLCBtYXRjaCwgbWF0Y2hsZW4pKQorCQkJCWdvdG8gbWF0Y2hfd2lsZGNhcmRzOworCisJCQlpZiAoIXBzLT5yZWN1cnNpdmUgfHwgcHMtPm1heF9kZXB0aCA9PSAtMSkKKwkJCQlyZXR1cm4gYWxsX2VudHJpZXNfaW50ZXJlc3Rpbmc7CisKKwkJCXJldHVybiB3aXRoaW5fZGVwdGgoYmFzZV9zdHIgKyBtYXRjaGxlbiArIDEsCisJCQkJCSAgICBiYXNlbGVuIC0gbWF0Y2hsZW4gLSAxLAorCQkJCQkgICAgISFTX0lTRElSKGVudHJ5LT5tb2RlKSwKKwkJCQkJICAgIHBzLT5tYXhfZGVwdGgpID8KKwkJCQllbnRyeV9pbnRlcmVzdGluZyA6IGVudHJ5X25vdF9pbnRlcmVzdGluZzsKKwkJfQorCisJCS8qIEVpdGhlciB0aGVyZSBtdXN0IGJlIG5vIGJhc2UsIG9yIHRoZSBiYXNlIG11c3QgbWF0Y2guICovCisJCWlmIChiYXNlbGVuID09IDAgfHwgIXN0cm5jbXAoYmFzZV9zdHIsIG1hdGNoLCBiYXNlbGVuKSkgeworCQkJaWYgKG1hdGNoX2VudHJ5KGVudHJ5LCBwYXRobGVuLAorCQkJCQltYXRjaCArIGJhc2VsZW4sIG1hdGNobGVuIC0gYmFzZWxlbiwKKwkJCQkJJm5ldmVyX2ludGVyZXN0aW5nKSkKKwkJCQlyZXR1cm4gZW50cnlfaW50ZXJlc3Rpbmc7CisKKwkJCWlmIChpdGVtLT51c2Vfd2lsZGNhcmQpIHsKKwkJCQlpZiAoIWZubWF0Y2gobWF0Y2ggKyBiYXNlbGVuLCBlbnRyeS0+cGF0aCwgMCkpCisJCQkJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKKworCQkJCS8qCisJCQkJICogTWF0Y2ggYWxsIGRpcmVjdG9yaWVzLiBXZSdsbCB0cnkgdG8KKwkJCQkgKiBtYXRjaCBmaWxlcyBsYXRlciBvbi4KKwkJCQkgKi8KKwkJCQlpZiAocHMtPnJlY3Vyc2l2ZSAmJiBTX0lTRElSKGVudHJ5LT5tb2RlKSkKKwkJCQkJcmV0dXJuIGVudHJ5X2ludGVyZXN0aW5nOworCQkJfQorCisJCQljb250aW51ZTsKKwkJfQorCittYXRjaF93aWxkY2FyZHM6CisJCWlmICghaXRlbS0+dXNlX3dpbGRjYXJkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogQ29uY2F0ZW5hdGUgYmFzZSBhbmQgZW50cnktPnBhdGggaW50byBvbmUgYW5kIGRvCisJCSAqIGZubWF0Y2goKSBvbiBpdC4KKwkJICovCisKKwkJc3RyYnVmX2FkZChiYXNlLCBlbnRyeS0+cGF0aCwgcGF0aGxlbik7CisKKwkJaWYgKCFmbm1hdGNoKG1hdGNoLCBiYXNlLT5idWYgKyBiYXNlX29mZnNldCwgMCkpIHsKKwkJCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgYmFzZV9vZmZzZXQgKyBiYXNlbGVuKTsKKwkJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKKwkJfQorCQlzdHJidWZfc2V0bGVuKGJhc2UsIGJhc2Vfb2Zmc2V0ICsgYmFzZWxlbik7CisKKwkJLyoKKwkJICogTWF0Y2ggYWxsIGRpcmVjdG9yaWVzLiBXZSdsbCB0cnkgdG8gbWF0Y2ggZmlsZXMKKwkJICogbGF0ZXIgb24uCisJCSAqIG1heF9kZXB0aCBpcyBpZ25vcmVkIGJ1dCB3ZSBtYXkgY29uc2lkZXIgc3VwcG9ydCBpdAorCQkgKiBpbiBmdXR1cmUsIHNlZQorCQkgKiBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTYzNzU3L2ZvY3VzPTE2Mzg0MAorCQkgKi8KKwkJaWYgKHBzLT5yZWN1cnNpdmUgJiYgU19JU0RJUihlbnRyeS0+bW9kZSkpCisJCQlyZXR1cm4gZW50cnlfaW50ZXJlc3Rpbmc7CisJfQorCXJldHVybiBuZXZlcl9pbnRlcmVzdGluZzsgLyogTm8gbWF0Y2hlcyAqLworfQpkaWZmIC0tZ2l0IGEvdHJlZS13YWxrLmggYi90cmVlLXdhbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmYwZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJlZS13YWxrLmgKQEAgLTAsMCArMSw3NiBAQAorI2lmbmRlZiBUUkVFX1dBTEtfSAorI2RlZmluZSBUUkVFX1dBTEtfSAorCitzdHJ1Y3QgbmFtZV9lbnRyeSB7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKKwljb25zdCBjaGFyICpwYXRoOworCXVuc2lnbmVkIGludCBtb2RlOworfTsKKworc3RydWN0IHRyZWVfZGVzYyB7CisJY29uc3Qgdm9pZCAqYnVmZmVyOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworc3RhdGljIGlubGluZSBjb25zdCB1bnNpZ25lZCBjaGFyICp0cmVlX2VudHJ5X2V4dHJhY3Qoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqKnBhdGhwLCB1bnNpZ25lZCBpbnQgKm1vZGVwKQoreworCSpwYXRocCA9IGRlc2MtPmVudHJ5LnBhdGg7CisJKm1vZGVwID0gY2Fub25fbW9kZShkZXNjLT5lbnRyeS5tb2RlKTsKKwlyZXR1cm4gZGVzYy0+ZW50cnkuc2hhMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdHJlZV9lbnRyeV9sZW4oY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm5lKQoreworCXJldHVybiAoY29uc3QgY2hhciAqKW5lLT5zaGExIC0gbmUtPnBhdGggLSAxOworfQorCit2b2lkIHVwZGF0ZV90cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKik7Cit2b2lkIGluaXRfdHJlZV9kZXNjKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGRvZXMgYm90aCB0cmVlX2VudHJ5X2V4dHJhY3QoKSBhbmQgdXBkYXRlX3RyZWVfZW50cnkoKQorICogYW5kIHJldHVybnMgdHJ1ZSBmb3Igc3VjY2VzcworICovCitpbnQgdHJlZV9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjICosIHN0cnVjdCBuYW1lX2VudHJ5ICopOworCit2b2lkICpmaWxsX3RyZWVfZGVzY3JpcHRvcihzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworc3RydWN0IHRyYXZlcnNlX2luZm87Cit0eXBlZGVmIGludCAoKnRyYXZlcnNlX2NhbGxiYWNrX3QpKGludCBuLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZGlybWFzaywgc3RydWN0IG5hbWVfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqKTsKK2ludCB0cmF2ZXJzZV90cmVlcyhpbnQgbiwgc3RydWN0IHRyZWVfZGVzYyAqdCwgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pOworCitzdHJ1Y3QgdHJhdmVyc2VfaW5mbyB7CisJc3RydWN0IHRyYXZlcnNlX2luZm8gKnByZXY7CisJc3RydWN0IG5hbWVfZW50cnkgbmFtZTsKKwlpbnQgcGF0aGxlbjsKKwlzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjOworCisJdW5zaWduZWQgbG9uZyBjb25mbGljdHM7CisJdHJhdmVyc2VfY2FsbGJhY2tfdCBmbjsKKwl2b2lkICpkYXRhOworCWludCBzaG93X2FsbF9lcnJvcnM7Cit9OworCitpbnQgZ2V0X3RyZWVfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgKik7CitleHRlcm4gY2hhciAqbWFrZV90cmF2ZXJzZV9wYXRoKGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbik7CitleHRlcm4gdm9pZCBzZXR1cF90cmF2ZXJzZV9pbmZvKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpiYXNlKTsKKworc3RhdGljIGlubGluZSBpbnQgdHJhdmVyc2VfcGF0aF9sZW4oY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpuKQoreworCXJldHVybiBpbmZvLT5wYXRobGVuICsgdHJlZV9lbnRyeV9sZW4obik7Cit9CisKKy8qIGluIGdlbmVyYWwsIHBvc2l0aXZlIG1lYW5zICJraW5kIG9mIGludGVyZXN0aW5nIiAqLworZW51bSBpbnRlcmVzdGluZyB7CisJYWxsX2VudHJpZXNfbm90X2ludGVyZXN0aW5nID0gLTEsIC8qIG5vLCBhbmQgbm8gc3Vic2VxdWVudCBlbnRyaWVzIHdpbGwgYmUgZWl0aGVyICovCisJZW50cnlfbm90X2ludGVyZXN0aW5nID0gMCwKKwllbnRyeV9pbnRlcmVzdGluZyA9IDEsCisJYWxsX2VudHJpZXNfaW50ZXJlc3RpbmcgPSAyIC8qIHllcywgYW5kIGFsbCBzdWJzZXF1ZW50IGVudHJpZXMgd2lsbCBiZSAqLworfTsKKworZXh0ZXJuIGVudW0gaW50ZXJlc3RpbmcgdHJlZV9lbnRyeV9pbnRlcmVzdGluZyhjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqLAorCQkJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqLCBpbnQsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90cmVlLmMgYi90cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmZWQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3RyZWUuYwpAQCAtMCwwICsxLDI0NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisKK2NvbnN0IGNoYXIgKnRyZWVfdHlwZSA9ICJ0cmVlIjsKKworc3RhdGljIGludCByZWFkX29uZV9lbnRyeV9vcHQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCB1bnNpZ25lZCBtb2RlLCBpbnQgc3RhZ2UsIGludCBvcHQpCit7CisJaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJaWYgKFNfSVNESVIobW9kZSkpCisJCXJldHVybiBSRUFEX1RSRUVfUkVDVVJTSVZFOworCisJbGVuID0gc3RybGVuKHBhdGhuYW1lKTsKKwlzaXplID0gY2FjaGVfZW50cnlfc2l6ZShiYXNlbGVuICsgbGVuKTsKKwljZSA9IHhjYWxsb2MoMSwgc2l6ZSk7CisKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncyhzdGFnZSk7CisJY2UtPmNlX25hbWVsZW4gPSBiYXNlbGVuICsgbGVuOworCW1lbWNweShjZS0+bmFtZSwgYmFzZSwgYmFzZWxlbik7CisJbWVtY3B5KGNlLT5uYW1lICsgYmFzZWxlbiwgcGF0aG5hbWUsIGxlbisxKTsKKwloYXNoY3B5KGNlLT5zaGExLCBzaGExKTsKKwlyZXR1cm4gYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHQpOworfQorCitzdGF0aWMgaW50IHJlYWRfb25lX2VudHJ5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBjb25zdCBjaGFyICpwYXRobmFtZSwgdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLCB2b2lkICpjb250ZXh0KQoreworCXJldHVybiByZWFkX29uZV9lbnRyeV9vcHQoc2hhMSwgYmFzZSwgYmFzZWxlbiwgcGF0aG5hbWUsIG1vZGUsIHN0YWdlLAorCQkJCSAgQUREX0NBQ0hFX09LX1RPX0FERHxBRERfQ0FDSEVfU0tJUF9ERkNIRUNLKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB3aGVuIHRoZSBjYWxsZXIga25vd3MgdGhlcmUgaXMgbm8gZXhpc3RpbmcgZW50cmllcyBhdAorICogdGhlIHN0YWdlIHRoYXQgd2lsbCBjb25mbGljdCB3aXRoIHRoZSBlbnRyeSBiZWluZyBhZGRlZC4KKyAqLworc3RhdGljIGludCByZWFkX29uZV9lbnRyeV9xdWljayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwgY29uc3QgY2hhciAqcGF0aG5hbWUsIHVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwgdm9pZCAqY29udGV4dCkKK3sKKwlyZXR1cm4gcmVhZF9vbmVfZW50cnlfb3B0KHNoYTEsIGJhc2UsIGJhc2VsZW4sIHBhdGhuYW1lLCBtb2RlLCBzdGFnZSwKKwkJCQkgIEFERF9DQUNIRV9KVVNUX0FQUEVORCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF90cmVlXzEoc3RydWN0IHRyZWUgKnRyZWUsIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCSAgICAgICBpbnQgc3RhZ2UsIHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCSAgICAgICByZWFkX3RyZWVfZm5fdCBmbiwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgbGVuLCBvbGRsZW4gPSBiYXNlLT5sZW47CisJZW51bSBpbnRlcmVzdGluZyByZXR2YWwgPSBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisKKwlpZiAocGFyc2VfdHJlZSh0cmVlKSkKKwkJcmV0dXJuIC0xOworCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQlpZiAocmV0dmFsICE9IGFsbF9lbnRyaWVzX2ludGVyZXN0aW5nKSB7CisJCQlyZXR2YWwgPSB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKCZlbnRyeSwgYmFzZSwgMCwgcGF0aHNwZWMpOworCQkJaWYgKHJldHZhbCA9PSBhbGxfZW50cmllc19ub3RfaW50ZXJlc3RpbmcpCisJCQkJYnJlYWs7CisJCQlpZiAocmV0dmFsID09IGVudHJ5X25vdF9pbnRlcmVzdGluZykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCXN3aXRjaCAoZm4oZW50cnkuc2hhMSwgYmFzZS0+YnVmLCBiYXNlLT5sZW4sCisJCQkgICBlbnRyeS5wYXRoLCBlbnRyeS5tb2RlLCBzdGFnZSwgY29udGV4dCkpIHsKKwkJY2FzZSAwOgorCQkJY29udGludWU7CisJCWNhc2UgUkVBRF9UUkVFX1JFQ1VSU0lWRToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpCisJCQloYXNoY3B5KHNoYTEsIGVudHJ5LnNoYTEpOworCQllbHNlIGlmIChTX0lTR0lUTElOSyhlbnRyeS5tb2RlKSkgeworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCQljb21taXQgPSBsb29rdXBfY29tbWl0KGVudHJ5LnNoYTEpOworCQkJaWYgKCFjb21taXQpCisJCQkJZGllKCJDb21taXQgJXMgaW4gc3VibW9kdWxlIHBhdGggJXMlcyBub3QgZm91bmQiLAorCQkJCSAgICBzaGExX3RvX2hleChlbnRyeS5zaGExKSwKKwkJCQkgICAgYmFzZS0+YnVmLCBlbnRyeS5wYXRoKTsKKworCQkJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQkJCWRpZSgiSW52YWxpZCBjb21taXQgJXMgaW4gc3VibW9kdWxlIHBhdGggJXMlcyIsCisJCQkJICAgIHNoYTFfdG9faGV4KGVudHJ5LnNoYTEpLAorCQkJCSAgICBiYXNlLT5idWYsIGVudHJ5LnBhdGgpOworCisJCQloYXNoY3B5KHNoYTEsIGNvbW1pdC0+dHJlZS0+b2JqZWN0LnNoYTEpOworCQl9CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJCWxlbiA9IHRyZWVfZW50cnlfbGVuKCZlbnRyeSk7CisJCXN0cmJ1Zl9hZGQoYmFzZSwgZW50cnkucGF0aCwgbGVuKTsKKwkJc3RyYnVmX2FkZGNoKGJhc2UsICcvJyk7CisJCXJldHZhbCA9IHJlYWRfdHJlZV8xKGxvb2t1cF90cmVlKHNoYTEpLAorCQkJCSAgICAgYmFzZSwgc3RhZ2UsIHBhdGhzcGVjLAorCQkJCSAgICAgZm4sIGNvbnRleHQpOworCQlzdHJidWZfc2V0bGVuKGJhc2UsIG9sZGxlbik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcmVhZF90cmVlX3JlY3Vyc2l2ZShzdHJ1Y3QgdHJlZSAqdHJlZSwKKwkJCWNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJaW50IHN0YWdlLCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJcmVhZF90cmVlX2ZuX3QgZm4sIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlzdHJidWZfYWRkKCZzYiwgYmFzZSwgYmFzZWxlbik7CisJcmV0ID0gcmVhZF90cmVlXzEodHJlZSwgJnNiLCBzdGFnZSwgcGF0aHNwZWMsIGZuLCBjb250ZXh0KTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21wX2NhY2hlX25hbWVfY29tcGFyZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTEsICpjZTI7CisKKwljZTEgPSAqKChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiopYV8pOworCWNlMiA9ICooKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqKiliXyk7CisJcmV0dXJuIGNhY2hlX25hbWVfc3RhZ2VfY29tcGFyZShjZTEtPm5hbWUsIGNlMS0+Y2VfbmFtZWxlbiwgY2Vfc3RhZ2UoY2UxKSwKKwkJCQkgIGNlMi0+bmFtZSwgY2UyLT5jZV9uYW1lbGVuLCBjZV9zdGFnZShjZTIpKTsKK30KKworaW50IHJlYWRfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwgaW50IHN0YWdlLCBzdHJ1Y3QgcGF0aHNwZWMgKm1hdGNoKQoreworCXJlYWRfdHJlZV9mbl90IGZuID0gTlVMTDsKKwlpbnQgaSwgZXJyOworCisJLyoKKwkgKiBDdXJyZW50bHkgdGhlIG9ubHkgZXhpc3RpbmcgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIGFsbAorCSAqIGNhbGwgaXQgd2l0aCBzdGFnZT0xIGFuZCBhZnRlciBtYWtpbmcgc3VyZSB0aGVyZSBpcyBub3RoaW5nCisJICogYXQgdGhhdCBzdGFnZTsgd2UgY291bGQgYWx3YXlzIHVzZSByZWFkX29uZV9lbnRyeV9xdWljaygpLgorCSAqCisJICogQnV0IHdoZW4gd2UgZGVjaWRlIHRvIHN0cmFpZ2h0ZW4gb3V0IGdpdC1yZWFkLXRyZWUgbm90IHRvCisJICogdXNlIHVucGFja190cmVlcygpIGluIHNvbWUgY2FzZXMsIHRoaXMgd2lsbCBwcm9iYWJseSBzdGFydAorCSAqIHRvIG1hdHRlci4KKwkgKi8KKworCS8qCisJICogU2VlIGlmIHdlIGhhdmUgY2FjaGUgZW50cnkgYXQgdGhlIHN0YWdlLiAgSWYgc28sCisJICogZG8gaXQgdGhlIG9yaWdpbmFsIHNsb3cgd2F5LCBvdGhlcndpc2UsIGFwcGVuZCBhbmQgdGhlbgorCSAqIHNvcnQgYXQgdGhlIGVuZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyAhZm4gJiYgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWlmIChjZV9zdGFnZShjZSkgPT0gc3RhZ2UpCisJCQlmbiA9IHJlYWRfb25lX2VudHJ5OworCX0KKworCWlmICghZm4pCisJCWZuID0gcmVhZF9vbmVfZW50cnlfcXVpY2s7CisJZXJyID0gcmVhZF90cmVlX3JlY3Vyc2l2ZSh0cmVlLCAiIiwgMCwgc3RhZ2UsIG1hdGNoLCBmbiwgTlVMTCk7CisJaWYgKGZuID09IHJlYWRfb25lX2VudHJ5IHx8IGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qCisJICogU29ydCB0aGUgY2FjaGUgZW50cnkgLS0gd2UgbmVlZCB0byBudWtlIHRoZSBjYWNoZSB0cmVlLCB0aG91Z2guCisJICovCisJY2FjaGVfdHJlZV9mcmVlKCZhY3RpdmVfY2FjaGVfdHJlZSk7CisJcXNvcnQoYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIsIHNpemVvZihhY3RpdmVfY2FjaGVbMF0pLAorCSAgICAgIGNtcF9jYWNoZV9uYW1lX2NvbXBhcmUpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdHJlZSAqbG9va3VwX3RyZWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlyZXR1cm4gY3JlYXRlX29iamVjdChzaGExLCBPQkpfVFJFRSwgYWxsb2NfdHJlZV9ub2RlKCkpOworCWlmICghb2JqLT50eXBlKQorCQlvYmotPnR5cGUgPSBPQkpfVFJFRTsKKwlpZiAob2JqLT50eXBlICE9IE9CSl9UUkVFKSB7CisJCWVycm9yKCJPYmplY3QgJXMgaXMgYSAlcywgbm90IGEgdHJlZSIsCisJCSAgICAgIHNoYTFfdG9faGV4KHNoYTEpLCB0eXBlbmFtZShvYmotPnR5cGUpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiAoc3RydWN0IHRyZWUgKikgb2JqOworfQorCitpbnQgcGFyc2VfdHJlZV9idWZmZXIoc3RydWN0IHRyZWUgKml0ZW0sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmIChpdGVtLT5vYmplY3QucGFyc2VkKQorCQlyZXR1cm4gMDsKKwlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKKwlpdGVtLT5idWZmZXIgPSBidWZmZXI7CisJaXRlbS0+c2l6ZSA9IHNpemU7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX3RyZWUoc3RydWN0IHRyZWUgKml0ZW0pCit7CisJIGVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkgdm9pZCAqYnVmZmVyOworCSB1bnNpZ25lZCBsb25nIHNpemU7CisKKwlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKKwkJcmV0dXJuIDA7CisJYnVmZmVyID0gcmVhZF9zaGExX2ZpbGUoaXRlbS0+b2JqZWN0LnNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHJlYWQgJXMiLAorCQkJICAgICBzaGExX3RvX2hleChpdGVtLT5vYmplY3Quc2hhMSkpOworCWlmICh0eXBlICE9IE9CSl9UUkVFKSB7CisJCWZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIGVycm9yKCJPYmplY3QgJXMgbm90IGEgdHJlZSIsCisJCQkgICAgIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CisJfQorCXJldHVybiBwYXJzZV90cmVlX2J1ZmZlcihpdGVtLCBidWZmZXIsIHNpemUpOworfQorCitzdHJ1Y3QgdHJlZSAqcGFyc2VfdHJlZV9pbmRpcmVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBhcnNlX29iamVjdChzaGExKTsKKwlkbyB7CisJCWlmICghb2JqKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpCisJCQlyZXR1cm4gKHN0cnVjdCB0cmVlICopIG9iajsKKwkJZWxzZSBpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCQlvYmogPSAmKCgoc3RydWN0IGNvbW1pdCAqKSBvYmopLT50cmVlLT5vYmplY3QpOworCQllbHNlIGlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykKKwkJCW9iaiA9ICgoc3RydWN0IHRhZyAqKSBvYmopLT50YWdnZWQ7CisJCWVsc2UKKwkJCXJldHVybiBOVUxMOworCQlpZiAoIW9iai0+cGFyc2VkKQorCQkJcGFyc2Vfb2JqZWN0KG9iai0+c2hhMSk7CisJfSB3aGlsZSAoMSk7Cit9CmRpZmYgLS1naXQgYS90cmVlLmggYi90cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjliY2I1ZQotLS0gL2Rldi9udWxsCisrKyBiL3RyZWUuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIFRSRUVfSAorI2RlZmluZSBUUkVFX0gKKworI2luY2x1ZGUgIm9iamVjdC5oIgorCitleHRlcm4gY29uc3QgY2hhciAqdHJlZV90eXBlOworCitzdHJ1Y3QgdHJlZSB7CisJc3RydWN0IG9iamVjdCBvYmplY3Q7CisJdm9pZCAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKK307CisKK3N0cnVjdCB0cmVlICpsb29rdXBfdHJlZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworaW50IHBhcnNlX3RyZWVfYnVmZmVyKHN0cnVjdCB0cmVlICppdGVtLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKK2ludCBwYXJzZV90cmVlKHN0cnVjdCB0cmVlICp0cmVlKTsKKworLyogUGFyc2VzIGFuZCByZXR1cm5zIHRoZSB0cmVlIGluIHRoZSBnaXZlbiBlbnQsIGNoYXNpbmcgdGFncyBhbmQgY29tbWl0cy4gKi8KK3N0cnVjdCB0cmVlICpwYXJzZV90cmVlX2luZGlyZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCisjZGVmaW5lIFJFQURfVFJFRV9SRUNVUlNJVkUgMQordHlwZWRlZiBpbnQgKCpyZWFkX3RyZWVfZm5fdCkoY29uc3QgdW5zaWduZWQgY2hhciAqLCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIGludCwgdm9pZCAqKTsKKworZXh0ZXJuIGludCByZWFkX3RyZWVfcmVjdXJzaXZlKHN0cnVjdCB0cmVlICp0cmVlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJICAgICAgIGludCBzdGFnZSwgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCSAgICAgICByZWFkX3RyZWVfZm5fdCBmbiwgdm9pZCAqY29udGV4dCk7CisKK2V4dGVybiBpbnQgcmVhZF90cmVlKHN0cnVjdCB0cmVlICp0cmVlLCBpbnQgc3RhZ2UsIHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpOworCisjZW5kaWYgLyogVFJFRV9IICovCmRpZmYgLS1naXQgYS91bmltcGxlbWVudGVkLnNoIGIvdW5pbXBsZW1lbnRlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjUyZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pbXBsZW1lbnRlZC5zaApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorCitlY2hvID4mMiAiZmF0YWw6IGdpdCB3YXMgYnVpbHQgd2l0aG91dCBzdXBwb3J0IGZvciBgYmFzZW5hbWUgJDBgIChAQFJFQVNPTkBAKS4iCitleGl0IDEyOApkaWZmIC0tZ2l0IGEvdW5peC1zb2NrZXQuYyBiL3VuaXgtc29ja2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmMTE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3VuaXgtc29ja2V0LmMKQEAgLTAsMCArMSwxMjIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInVuaXgtc29ja2V0LmgiCisKK3N0YXRpYyBpbnQgdW5peF9zdHJlYW1fc29ja2V0KHZvaWQpCit7CisJaW50IGZkID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgc29ja2V0Iik7CisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgaW50IGNoZGlyX2xlbihjb25zdCBjaGFyICpvcmlnLCBpbnQgbGVuKQoreworCWNoYXIgKnBhdGggPSB4bWVtZHVweihvcmlnLCBsZW4pOworCWludCByID0gY2hkaXIocGF0aCk7CisJZnJlZShwYXRoKTsKKwlyZXR1cm4gcjsKK30KKworc3RydWN0IHVuaXhfc29ja2FkZHJfY29udGV4dCB7CisJY2hhciBvcmlnX2RpcltQQVRIX01BWF07Cit9OworCitzdGF0aWMgdm9pZCB1bml4X3NvY2thZGRyX2NsZWFudXAoc3RydWN0IHVuaXhfc29ja2FkZHJfY29udGV4dCAqY3R4KQoreworCWlmICghY3R4LT5vcmlnX2RpclswXSkKKwkJcmV0dXJuOworCS8qCisJICogSWYgd2UgZmFpbCwgd2UgY2FuJ3QganVzdCByZXR1cm4gYW4gZXJyb3IsIHNpbmNlIHdlIGhhdmUKKwkgKiBtb3ZlZCB0aGUgY3dkIG9mIHRoZSB3aG9sZSBwcm9jZXNzLCB3aGljaCBjb3VsZCBjb25mdXNlIGNhbGxpbmcKKwkgKiBjb2RlLiAgV2UgYXJlIGJldHRlciBvZmYgdG8ganVzdCBkaWUuCisJICovCisJaWYgKGNoZGlyKGN0eC0+b3JpZ19kaXIpIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB3b3JraW5nIGRpcmVjdG9yeSIpOworfQorCitzdGF0aWMgaW50IHVuaXhfc29ja2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdW4gKnNhLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICAgc3RydWN0IHVuaXhfc29ja2FkZHJfY29udGV4dCAqY3R4KQoreworCWludCBzaXplID0gc3RybGVuKHBhdGgpICsgMTsKKworCWN0eC0+b3JpZ19kaXJbMF0gPSAnXDAnOworCWlmIChzaXplID4gc2l6ZW9mKHNhLT5zdW5fcGF0aCkpIHsKKwkJY29uc3QgY2hhciAqc2xhc2ggPSBmaW5kX2xhc3RfZGlyX3NlcChwYXRoKTsKKwkJY29uc3QgY2hhciAqZGlyOworCisJCWlmICghc2xhc2gpIHsKKwkJCWVycm5vID0gRU5BTUVUT09MT05HOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJZGlyID0gcGF0aDsKKwkJcGF0aCA9IHNsYXNoICsgMTsKKwkJc2l6ZSA9IHN0cmxlbihwYXRoKSArIDE7CisJCWlmIChzaXplID4gc2l6ZW9mKHNhLT5zdW5fcGF0aCkpIHsKKwkJCWVycm5vID0gRU5BTUVUT09MT05HOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKCFnZXRjd2QoY3R4LT5vcmlnX2Rpciwgc2l6ZW9mKGN0eC0+b3JpZ19kaXIpKSkgeworCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKGNoZGlyX2xlbihkaXIsIHNsYXNoIC0gZGlyKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJbWVtc2V0KHNhLCAwLCBzaXplb2YoKnNhKSk7CisJc2EtPnN1bl9mYW1pbHkgPSBBRl9VTklYOworCW1lbWNweShzYS0+c3VuX3BhdGgsIHBhdGgsIHNpemUpOworCXJldHVybiAwOworfQorCitpbnQgdW5peF9zdHJlYW1fY29ubmVjdChjb25zdCBjaGFyICpwYXRoKQoreworCWludCBmZCwgc2F2ZWRfZXJybm87CisJc3RydWN0IHNvY2thZGRyX3VuIHNhOworCXN0cnVjdCB1bml4X3NvY2thZGRyX2NvbnRleHQgY3R4OworCisJaWYgKHVuaXhfc29ja2FkZHJfaW5pdCgmc2EsIHBhdGgsICZjdHgpIDwgMCkKKwkJcmV0dXJuIC0xOworCWZkID0gdW5peF9zdHJlYW1fc29ja2V0KCk7CisJaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2EsIHNpemVvZihzYSkpIDwgMCkKKwkJZ290byBmYWlsOworCXVuaXhfc29ja2FkZHJfY2xlYW51cCgmY3R4KTsKKwlyZXR1cm4gZmQ7CisKK2ZhaWw6CisJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwl1bml4X3NvY2thZGRyX2NsZWFudXAoJmN0eCk7CisJY2xvc2UoZmQpOworCWVycm5vID0gc2F2ZWRfZXJybm87CisJcmV0dXJuIC0xOworfQorCitpbnQgdW5peF9zdHJlYW1fbGlzdGVuKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGZkLCBzYXZlZF9lcnJubzsKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4gc2E7CisJc3RydWN0IHVuaXhfc29ja2FkZHJfY29udGV4dCBjdHg7CisKKwlpZiAodW5peF9zb2NrYWRkcl9pbml0KCZzYSwgcGF0aCwgJmN0eCkgPCAwKQorCQlyZXR1cm4gLTE7CisJZmQgPSB1bml4X3N0cmVhbV9zb2NrZXQoKTsKKworCXVubGluayhwYXRoKTsKKwlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzYSwgc2l6ZW9mKHNhKSkgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlpZiAobGlzdGVuKGZkLCA1KSA8IDApCisJCWdvdG8gZmFpbDsKKworCXVuaXhfc29ja2FkZHJfY2xlYW51cCgmY3R4KTsKKwlyZXR1cm4gZmQ7CisKK2ZhaWw6CisJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwl1bml4X3NvY2thZGRyX2NsZWFudXAoJmN0eCk7CisJY2xvc2UoZmQpOworCWVycm5vID0gc2F2ZWRfZXJybm87CisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvdW5peC1zb2NrZXQuaCBiL3VuaXgtc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3MWFlZQotLS0gL2Rldi9udWxsCisrKyBiL3VuaXgtc29ja2V0LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIFVOSVhfU09DS0VUX0gKKyNkZWZpbmUgVU5JWF9TT0NLRVRfSAorCitpbnQgdW5peF9zdHJlYW1fY29ubmVjdChjb25zdCBjaGFyICpwYXRoKTsKK2ludCB1bml4X3N0cmVhbV9saXN0ZW4oY29uc3QgY2hhciAqcGF0aCk7CisKKyNlbmRpZiAvKiBVTklYX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS91bnBhY2stdHJlZXMuYyBiL3VucGFjay10cmVlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOTYzNjYKLS0tIC9kZXYvbnVsbAorKysgYi91bnBhY2stdHJlZXMuYwpAQCAtMCwwICsxLDE4NDcgQEAKKyNkZWZpbmUgTk9fVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImF0dHIuaCIKKworLyoKKyAqIEVycm9yIG1lc3NhZ2VzIGV4cGVjdGVkIGJ5IHNjcmlwdHMgb3V0IG9mIHBsdW1iaW5nIGNvbW1hbmRzIHN1Y2ggYXMKKyAqIHJlYWQtdHJlZS4gIE5vbi1zY3JpcHRlZCBQb3JjZWxhaW4gaXMgbm90IHJlcXVpcmVkIHRvIHVzZSB0aGVzZSBtZXNzYWdlcworICogYW5kIGluIGZhY3QgYXJlIGVuY291cmFnZWQgdG8gcmV3b3JkIHRoZW0gdG8gYmV0dGVyIHN1aXQgdGhlaXIgcGFydGljdWxhcgorICogc2l0dWF0aW9uIGJldHRlci4gIFNlZSBob3cgImdpdCBjaGVja291dCIgYW5kICJnaXQgbWVyZ2UiIHJlcGxhY2VzCisgKiB0aGVtIHVzaW5nIHNldHVwX3VucGFja190cmVlc19wb3JjZWxhaW4oKSwgZm9yIGV4YW1wbGUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp1bnBhY2tfcGx1bWJpbmdfZXJyb3JzW05CX1VOUEFDS19UUkVFU19FUlJPUl9UWVBFU10gPSB7CisJLyogRVJST1JfV09VTERfT1ZFUldSSVRFICovCisJIkVudHJ5ICclcycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UuIENhbm5vdCBtZXJnZS4iLAorCisJLyogRVJST1JfTk9UX1VQVE9EQVRFX0ZJTEUgKi8KKwkiRW50cnkgJyVzJyBub3QgdXB0b2RhdGUuIENhbm5vdCBtZXJnZS4iLAorCisJLyogRVJST1JfTk9UX1VQVE9EQVRFX0RJUiAqLworCSJVcGRhdGluZyAnJXMnIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIGl0IiwKKworCS8qIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX09WRVJXUklUVEVOICovCisJIlVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAnJXMnIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlLiIsCisKKwkvKiBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9SRU1PVkVEICovCisJIlVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAnJXMnIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2UuIiwKKworCS8qIEVSUk9SX0JJTkRfT1ZFUkxBUCAqLworCSJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIsCisKKwkvKiBFUlJPUl9TUEFSU0VfTk9UX1VQVE9EQVRFX0ZJTEUgKi8KKwkiRW50cnkgJyVzJyBub3QgdXB0b2RhdGUuIENhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0LiIsCisKKwkvKiBFUlJPUl9XT1VMRF9MT1NFX09SUEhBTkVEX09WRVJXUklUVEVOICovCisJIldvcmtpbmcgdHJlZSBmaWxlICclcycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgc3BhcnNlIGNoZWNrb3V0IHVwZGF0ZS4iLAorCisJLyogRVJST1JfV09VTERfTE9TRV9PUlBIQU5FRF9SRU1PVkVEICovCisJIldvcmtpbmcgdHJlZSBmaWxlICclcycgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgdXBkYXRlLiIsCit9OworCisjZGVmaW5lIEVSUk9STVNHKG8sdHlwZSkgXAorCSggKChvKSAmJiAobyktPm1zZ3NbKHR5cGUpXSkgXAorCSAgPyAoKG8pLT5tc2dzWyh0eXBlKV0pICAgICAgXAorCSAgOiAodW5wYWNrX3BsdW1iaW5nX2Vycm9yc1sodHlwZSldKSApCisKK3ZvaWQgc2V0dXBfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbihzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdHMsCisJCQkJICBjb25zdCBjaGFyICpjbWQpCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqKm1zZ3MgPSBvcHRzLT5tc2dzOworCWNvbnN0IGNoYXIgKm1zZzsKKwljaGFyICp0bXA7CisJY29uc3QgY2hhciAqY21kMiA9IHN0cmNtcChjbWQsICJjaGVja291dCIpID8gY21kIDogInN3aXRjaCBicmFuY2hlcyI7CisJaWYgKGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlKQorCQltc2cgPSAiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4lJXMiCisJCQkiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBjYW4gJXMuIjsKKwllbHNlCisJCW1zZyA9ICJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiUlcyI7CisJdG1wID0geG1hbGxvYyhzdHJsZW4obXNnKSArIHN0cmxlbihjbWQpICsgc3RybGVuKGNtZDIpIC0gMik7CisJc3ByaW50Zih0bXAsIG1zZywgY21kLCBjbWQyKTsKKwltc2dzW0VSUk9SX1dPVUxEX09WRVJXUklURV0gPSB0bXA7CisJbXNnc1tFUlJPUl9OT1RfVVBUT0RBVEVfRklMRV0gPSB0bXA7CisKKwltc2dzW0VSUk9SX05PVF9VUFRPREFURV9ESVJdID0KKwkJIlVwZGF0aW5nIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gaXQ6XG4lcyI7CisKKwlpZiAoYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UpCisJCW1zZyA9ICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgJXMgYnkgJXM6XG4lJXMiCisJCQkiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBjYW4gJXMuIjsKKwllbHNlCisJCW1zZyA9ICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgJXMgYnkgJXM6XG4lJXMiOworCXRtcCA9IHhtYWxsb2Moc3RybGVuKG1zZykgKyBzdHJsZW4oY21kKSArIHN0cmxlbigicmVtb3ZlZCIpICsgc3RybGVuKGNtZDIpIC0gNCk7CisJc3ByaW50Zih0bXAsIG1zZywgInJlbW92ZWQiLCBjbWQsIGNtZDIpOworCW1zZ3NbRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfUkVNT1ZFRF0gPSB0bXA7CisJdG1wID0geG1hbGxvYyhzdHJsZW4obXNnKSArIHN0cmxlbihjbWQpICsgc3RybGVuKCJvdmVyd3JpdHRlbiIpICsgc3RybGVuKGNtZDIpIC0gNCk7CisJc3ByaW50Zih0bXAsIG1zZywgIm92ZXJ3cml0dGVuIiwgY21kLCBjbWQyKTsKKwltc2dzW0VSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX09WRVJXUklUVEVOXSA9IHRtcDsKKworCS8qCisJICogU3BlY2lhbCBjYXNlOiBFUlJPUl9CSU5EX09WRVJMQVAgcmVmZXJzIHRvIGEgcGFpciBvZiBwYXRocywgd2UKKwkgKiBjYW5ub3QgZWFzaWx5IGRpc3BsYXkgaXQgYXMgYSBsaXN0LgorCSAqLworCW1zZ3NbRVJST1JfQklORF9PVkVSTEFQXSA9ICJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiI7CisKKwltc2dzW0VSUk9SX1NQQVJTRV9OT1RfVVBUT0RBVEVfRklMRV0gPQorCQkiQ2Fubm90IHVwZGF0ZSBzcGFyc2UgY2hlY2tvdXQ6IHRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgbm90IHVwLXRvLWRhdGU6XG4lcyI7CisJbXNnc1tFUlJPUl9XT1VMRF9MT1NFX09SUEhBTkVEX09WRVJXUklUVEVOXSA9CisJCSJUaGUgZm9sbG93aW5nIFdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgdXBkYXRlOlxuJXMiOworCW1zZ3NbRVJST1JfV09VTERfTE9TRV9PUlBIQU5FRF9SRU1PVkVEXSA9CisJCSJUaGUgZm9sbG93aW5nIFdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCB1cGRhdGU6XG4lcyI7CisKKwlvcHRzLT5zaG93X2FsbF9lcnJvcnMgPSAxOworCS8qIHJlamVjdGVkIHBhdGhzIG1heSBub3QgaGF2ZSBhIHN0YXRpYyBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvcHRzLT51bnBhY2tfcmVqZWN0cyk7IGkrKykKKwkJb3B0cy0+dW5wYWNrX3JlamVjdHNbaV0uc3RyZHVwX3N0cmluZ3MgPSAxOworfQorCitzdGF0aWMgdm9pZCBkb19hZGRfZW50cnkoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwljbGVhciB8PSBDRV9IQVNIRUQgfCBDRV9VTkhBU0hFRDsKKworCWlmIChzZXQgJiBDRV9SRU1PVkUpCisJCXNldCB8PSBDRV9XVF9SRU1PVkU7CisKKwljZS0+bmV4dCA9IE5VTEw7CisJY2UtPmNlX2ZsYWdzID0gKGNlLT5jZV9mbGFncyAmIH5jbGVhcikgfCBzZXQ7CisJYWRkX2luZGV4X2VudHJ5KCZvLT5yZXN1bHQsIGNlLAorCQkJQUREX0NBQ0hFX09LX1RPX0FERCB8IEFERF9DQUNIRV9PS19UT19SRVBMQUNFKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2VudHJ5KHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJdW5zaWduZWQgaW50IHNpemUgPSBjZV9zaXplKGNlKTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ldyA9IHhtYWxsb2Moc2l6ZSk7CisKKwltZW1jcHkobmV3LCBjZSwgc2l6ZSk7CisJZG9fYWRkX2VudHJ5KG8sIG5ldywgc2V0LCBjbGVhcik7Cit9CisKKy8qCisgKiBhZGQgZXJyb3IgbWVzc2FnZXMgb24gcGF0aCA8cGF0aD4KKyAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgPGU+IHdpdGggdGhlIG1lc3NhZ2UgPG1zZz4KKyAqIGluZGljYXRpbmcgaWYgaXQgc2hvdWxkIGJlIGRpc3BsYXkgaW4gcG9yY2VsYWluIG9yIG5vdAorICovCitzdGF0aWMgaW50IGFkZF9yZWplY3RlZF9wYXRoKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywKKwkJCSAgICAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZSwKKwkJCSAgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoIW8tPnNob3dfYWxsX2Vycm9ycykKKwkJcmV0dXJuIGVycm9yKEVSUk9STVNHKG8sIGUpLCBwYXRoKTsKKworCS8qCisJICogT3RoZXJ3aXNlLCBpbnNlcnQgaW4gYSBsaXN0IGZvciBmdXR1cmUgZGlzcGxheSBieQorCSAqIGRpc3BsYXlfZXJyb3JfbXNncygpCisJICovCisJc3RyaW5nX2xpc3RfYXBwZW5kKCZvLT51bnBhY2tfcmVqZWN0c1tlXSwgcGF0aCk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogZGlzcGxheSBhbGwgdGhlIGVycm9yIG1lc3NhZ2VzIHN0b3JlZCBpbiBhIG5pY2Ugd2F5CisgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfZXJyb3JfbXNncyhzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IGUsIGk7CisJaW50IHNvbWV0aGluZ19kaXNwbGF5ZWQgPSAwOworCWZvciAoZSA9IDA7IGUgPCBOQl9VTlBBQ0tfVFJFRVNfRVJST1JfVFlQRVM7IGUrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlamVjdHMgPSAmby0+dW5wYWNrX3JlamVjdHNbZV07CisJCWlmIChyZWplY3RzLT5uciA+IDApIHsKKwkJCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCQkJc29tZXRoaW5nX2Rpc3BsYXllZCA9IDE7CisJCQlmb3IgKGkgPSAwOyBpIDwgcmVqZWN0cy0+bnI7IGkrKykKKwkJCQlzdHJidWZfYWRkZigmcGF0aCwgIlx0JXNcbiIsIHJlamVjdHMtPml0ZW1zW2ldLnN0cmluZyk7CisJCQllcnJvcihFUlJPUk1TRyhvLCBlKSwgcGF0aC5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCQl9CisJCXN0cmluZ19saXN0X2NsZWFyKHJlamVjdHMsIDApOworCX0KKwlpZiAoc29tZXRoaW5nX2Rpc3BsYXllZCkKKwkJZnByaW50ZihzdGRlcnIsICJBYm9ydGluZ1xuIik7Cit9CisKKy8qCisgKiBVbmxpbmsgdGhlIGxhc3QgY29tcG9uZW50IGFuZCBzY2hlZHVsZSB0aGUgbGVhZGluZyBkaXJlY3RvcmllcyBmb3IKKyAqIHJlbW92YWwsIHN1Y2ggdGhhdCBlbXB0eSBkaXJlY3RvcmllcyBnZXQgcmVtb3ZlZC4KKyAqLworc3RhdGljIHZvaWQgdW5saW5rX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJaWYgKCFjaGVja19sZWFkaW5nX3BhdGgoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSkKKwkJcmV0dXJuOworCWlmIChyZW1vdmVfb3Jfd2FybihjZS0+Y2VfbW9kZSwgY2UtPm5hbWUpKQorCQlyZXR1cm47CisJc2NoZWR1bGVfZGlyX2Zvcl9yZW1vdmFsKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hlY2tvdXQgc3RhdGU7CitzdGF0aWMgaW50IGNoZWNrX3VwZGF0ZXMoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXVuc2lnbmVkIGNudCA9IDAsIHRvdGFsID0gMDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gJm8tPnJlc3VsdDsKKwlpbnQgaTsKKwlpbnQgZXJycyA9IDA7CisKKwlpZiAoby0+dXBkYXRlICYmIG8tPnZlcmJvc2VfdXBkYXRlKSB7CisJCWZvciAodG90YWwgPSBjbnQgPSAwOyBjbnQgPCBpbmRleC0+Y2FjaGVfbnI7IGNudCsrKSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2NudF07CisJCQlpZiAoY2UtPmNlX2ZsYWdzICYgKENFX1VQREFURSB8IENFX1dUX1JFTU9WRSkpCisJCQkJdG90YWwrKzsKKwkJfQorCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3NfZGVsYXkoIkNoZWNraW5nIG91dCBmaWxlcyIsCisJCQkJCQl0b3RhbCwgNTAsIDEpOworCQljbnQgPSAwOworCX0KKworCWlmIChvLT51cGRhdGUpCisJCWdpdF9hdHRyX3NldF9kaXJlY3Rpb24oR0lUX0FUVFJfQ0hFQ0tPVVQsICZvLT5yZXN1bHQpOworCWZvciAoaSA9IDA7IGkgPCBpbmRleC0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2ldOworCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9XVF9SRU1PVkUpIHsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrY250KTsKKwkJCWlmIChvLT51cGRhdGUgJiYgIW8tPmRyeV9ydW4pCisJCQkJdW5saW5rX2VudHJ5KGNlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCXJlbW92ZV9tYXJrZWRfY2FjaGVfZW50cmllcygmby0+cmVzdWx0KTsKKwlyZW1vdmVfc2NoZWR1bGVkX2RpcnMoKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmRleC0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2ldOworCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpIHsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrY250KTsKKwkJCWNlLT5jZV9mbGFncyAmPSB+Q0VfVVBEQVRFOworCQkJaWYgKG8tPnVwZGF0ZSAmJiAhby0+ZHJ5X3J1bikgeworCQkJCWVycnMgfD0gY2hlY2tvdXRfZW50cnkoY2UsICZzdGF0ZSwgTlVMTCk7CisJCQl9CisJCX0KKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCWlmIChvLT51cGRhdGUpCisJCWdpdF9hdHRyX3NldF9kaXJlY3Rpb24oR0lUX0FUVFJfQ0hFQ0tJTiwgTlVMTCk7CisJcmV0dXJuIGVycnMgIT0gMDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGVfc3BhcnNlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CitzdGF0aWMgaW50IHZlcmlmeV9hYnNlbnRfc3BhcnNlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworCitzdGF0aWMgaW50IGFwcGx5X3NwYXJzZV9jaGVja291dChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IHdhc19za2lwX3dvcmt0cmVlID0gY2Vfc2tpcF93b3JrdHJlZShjZSk7CisKKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfTkVXX1NLSVBfV09SS1RSRUUpCisJCWNlLT5jZV9mbGFncyB8PSBDRV9TS0lQX1dPUktUUkVFOworCWVsc2UKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9TS0lQX1dPUktUUkVFOworCisJLyoKKwkgKiBpZiAoIXdhc19za2lwX3dvcmt0cmVlICYmICFjZV9za2lwX3dvcmt0cmVlKCkpIHsKKwkgKglUaGlzIGlzIHBlcmZlY3RseSBub3JtYWwuIE1vdmUgb247CisJICogfQorCSAqLworCisJLyoKKwkgKiBNZXJnZSBzdHJhdGVnaWVzIG1heSBzZXQgQ0VfVVBEQVRFfENFX1JFTU9WRSBvdXRzaWRlIGNoZWNrb3V0CisJICogYXJlYSBhcyBhIHJlc3VsdCBvZiBjZV9za2lwX3dvcmt0cmVlKCkgc2hvcnRjdXRzIGluCisJICogdmVyaWZ5X2Fic2VudCgpIGFuZCB2ZXJpZnlfdXB0b2RhdGUoKS4KKwkgKiBNYWtlIHN1cmUgdGhleSBkb24ndCBtb2RpZnkgd29ya3RyZWUgaWYgdGhleSBhcmUgYWxyZWFkeQorCSAqIG91dHNpZGUgY2hlY2tvdXQgYXJlYQorCSAqLworCWlmICh3YXNfc2tpcF93b3JrdHJlZSAmJiBjZV9za2lwX3dvcmt0cmVlKGNlKSkgeworCQljZS0+Y2VfZmxhZ3MgJj0gfkNFX1VQREFURTsKKworCQkvKgorCQkgKiBCeSBkZWZhdWx0LCB3aGVuIENFX1JFTU9WRSBpcyBvbiwgQ0VfV1RfUkVNT1ZFIGlzIGFsc28KKwkJICogb24gdG8gZ2V0IHRoYXQgZmlsZSByZW1vdmVkIGZyb20gYm90aCBpbmRleCBhbmQgd29ya3RyZWUuCisJCSAqIElmIHRoYXQgZmlsZSBpcyBhbHJlYWR5IG91dHNpZGUgd29ya3RyZWUgYXJlYSwgZG9uJ3QKKwkJICogYm90aGVyIHJlbW92ZSBpdC4KKwkJICovCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpCisJCQljZS0+Y2VfZmxhZ3MgJj0gfkNFX1dUX1JFTU9WRTsKKwl9CisKKwlpZiAoIXdhc19za2lwX3dvcmt0cmVlICYmIGNlX3NraXBfd29ya3RyZWUoY2UpKSB7CisJCS8qCisJCSAqIElmIENFX1VQREFURSBpcyBzZXQsIHZlcmlmeV91cHRvZGF0ZSgpIG11c3QgYmUgY2FsbGVkIGFscmVhZHkKKwkJICogYWxzbyBzdGF0IGluZm8gbWF5IGhhdmUgbG9zdCBhZnRlciBtZXJnZWRfZW50cnkoKSBzbyBjYWxsaW5nCisJCSAqIHZlcmlmeV91cHRvZGF0ZSgpIGFnYWluIG1heSBmYWlsCisJCSAqLworCQlpZiAoIShjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpICYmIHZlcmlmeV91cHRvZGF0ZV9zcGFyc2UoY2UsIG8pKQorCQkJcmV0dXJuIC0xOworCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfV1RfUkVNT1ZFOworCX0KKwlpZiAod2FzX3NraXBfd29ya3RyZWUgJiYgIWNlX3NraXBfd29ya3RyZWUoY2UpKSB7CisJCWlmICh2ZXJpZnlfYWJzZW50X3NwYXJzZShjZSwgRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfT1ZFUldSSVRURU4sIG8pKQorCQkJcmV0dXJuIC0xOworCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2FsbF91bnBhY2tfZm4oc3RydWN0IGNhY2hlX2VudHJ5ICoqc3JjLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IHJldCA9IG8tPmZuKHNyYywgbyk7CisJaWYgKHJldCA+IDApCisJCXJldCA9IDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbWFya19jZV91c2VkKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwljZS0+Y2VfZmxhZ3MgfD0gQ0VfVU5QQUNLRUQ7CisKKwlpZiAoby0+Y2FjaGVfYm90dG9tIDwgby0+c3JjX2luZGV4LT5jYWNoZV9uciAmJgorCSAgICBvLT5zcmNfaW5kZXgtPmNhY2hlW28tPmNhY2hlX2JvdHRvbV0gPT0gY2UpIHsKKwkJaW50IGJvdHRvbSA9IG8tPmNhY2hlX2JvdHRvbTsKKwkJd2hpbGUgKGJvdHRvbSA8IG8tPnNyY19pbmRleC0+Y2FjaGVfbnIgJiYKKwkJICAgICAgIG8tPnNyY19pbmRleC0+Y2FjaGVbYm90dG9tXS0+Y2VfZmxhZ3MgJiBDRV9VTlBBQ0tFRCkKKwkJCWJvdHRvbSsrOworCQlvLT5jYWNoZV9ib3R0b20gPSBib3R0b207CisJfQorfQorCitzdGF0aWMgdm9pZCBtYXJrX2FsbF9jZV91bnVzZWQoc3RydWN0IGluZGV4X3N0YXRlICppbmRleCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspCisJCWluZGV4LT5jYWNoZVtpXS0+Y2VfZmxhZ3MgJj0gfihDRV9VTlBBQ0tFRCB8IENFX0FEREVEIHwgQ0VfTkVXX1NLSVBfV09SS1RSRUUpOworfQorCitzdGF0aWMgaW50IGxvY2F0ZV9pbl9zcmNfaW5kZXgoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGluZGV4LCBjZS0+bmFtZSwgbGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLTEgLSBwb3M7CisJcmV0dXJuIHBvczsKK30KKworLyoKKyAqIFdlIGNhbGwgdW5wYWNrX2luZGV4X2VudHJ5KCkgd2l0aCBhbiB1bm1lcmdlZCBjYWNoZSBlbnRyeQorICogb25seSBpbiBkaWZmLWluZGV4LCBhbmQgaXQgd2FudHMgYSBzaW5nbGUgY2FsbGJhY2suICBTa2lwCisgKiB0aGUgb3RoZXIgdW5tZXJnZWQgZW50cnkgd2l0aCB0aGUgc2FtZSBuYW1lLgorICovCitzdGF0aWMgdm9pZCBtYXJrX2NlX3VzZWRfc2FtZV9uYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXggPSBvLT5zcmNfaW5kZXg7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCWludCBwb3M7CisKKwlmb3IgKHBvcyA9IGxvY2F0ZV9pbl9zcmNfaW5kZXgoY2UsIG8pOyBwb3MgPCBpbmRleC0+Y2FjaGVfbnI7IHBvcysrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmV4dCA9IGluZGV4LT5jYWNoZVtwb3NdOworCQlpZiAobGVuICE9IGNlX25hbWVsZW4obmV4dCkgfHwKKwkJICAgIG1lbWNtcChjZS0+bmFtZSwgbmV4dC0+bmFtZSwgbGVuKSkKKwkJCWJyZWFrOworCQltYXJrX2NlX3VzZWQobmV4dCwgbyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXh0X2NhY2hlX2VudHJ5KHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwljb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gby0+c3JjX2luZGV4OworCWludCBwb3MgPSBvLT5jYWNoZV9ib3R0b207CisKKwl3aGlsZSAocG9zIDwgaW5kZXgtPmNhY2hlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbcG9zXTsKKwkJaWYgKCEoY2UtPmNlX2ZsYWdzICYgQ0VfVU5QQUNLRUQpKQorCQkJcmV0dXJuIGNlOworCQlwb3MrKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9zYW1lX3VubWVyZ2VkKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGluZGV4LCBjZS0+bmFtZSwgbGVuKTsKKworCWlmICgwIDw9IHBvcykKKwkJZGllKCJwcm9ncmFtbWluZyBlcnJvciBpbiBhIGNhbGxlciBvZiBtYXJrX2NlX3VzZWRfc2FtZV9uYW1lIik7CisJZm9yIChwb3MgPSAtcG9zIC0gMTsgcG9zIDwgaW5kZXgtPmNhY2hlX25yOyBwb3MrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5leHQgPSBpbmRleC0+Y2FjaGVbcG9zXTsKKwkJaWYgKGxlbiAhPSBjZV9uYW1lbGVuKG5leHQpIHx8CisJCSAgICBtZW1jbXAoY2UtPm5hbWUsIG5leHQtPm5hbWUsIGxlbikpCisJCQlicmVhazsKKwkJYWRkX2VudHJ5KG8sIG5leHQsIDAsIDApOworCQltYXJrX2NlX3VzZWQobmV4dCwgbyk7CisJfQorfQorCitzdGF0aWMgaW50IHVucGFja19pbmRleF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjW01BWF9VTlBBQ0tfVFJFRVMgKyAxXSA9IHsgTlVMTCwgfTsKKwlpbnQgcmV0OworCisJc3JjWzBdID0gY2U7CisKKwltYXJrX2NlX3VzZWQoY2UsIG8pOworCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJaWYgKG8tPnNraXBfdW5tZXJnZWQpIHsKKwkJCWFkZF9lbnRyeShvLCBjZSwgMCwgMCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXQgPSBjYWxsX3VucGFja19mbihzcmMsIG8pOworCWlmIChjZV9zdGFnZShjZSkpCisJCW1hcmtfY2VfdXNlZF9zYW1lX25hbWUoY2UsIG8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9jYWNoZV9wb3Moc3RydWN0IHRyYXZlcnNlX2luZm8gKiwgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKik7CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfY2FjaGVfYm90dG9tKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBpbnQgYm90dG9tKQoreworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyA9IGluZm8tPmRhdGE7CisKKwlpZiAoby0+ZGlmZl9pbmRleF9jYWNoZWQpCisJCXJldHVybjsKKwlvLT5jYWNoZV9ib3R0b20gPSBib3R0b207Cit9CisKK3N0YXRpYyBpbnQgc3dpdGNoX2NhY2hlX2JvdHRvbShzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCWludCByZXQsIHBvczsKKworCWlmIChvLT5kaWZmX2luZGV4X2NhY2hlZCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gby0+Y2FjaGVfYm90dG9tOworCXBvcyA9IGZpbmRfY2FjaGVfcG9zKGluZm8tPnByZXYsICZpbmZvLT5uYW1lKTsKKworCWlmIChwb3MgPCAtMSkKKwkJby0+Y2FjaGVfYm90dG9tID0gLTIgLSBwb3M7CisJZWxzZSBpZiAocG9zIDwgMCkKKwkJby0+Y2FjaGVfYm90dG9tID0gby0+c3JjX2luZGV4LT5jYWNoZV9ucjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRyYXZlcnNlX3RyZWVzX3JlY3Vyc2l2ZShpbnQgbiwgdW5zaWduZWQgbG9uZyBkaXJtYXNrLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGRmX2NvbmZsaWN0cywKKwkJCQkgICAgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLAorCQkJCSAgICBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgaSwgcmV0LCBib3R0b207CisJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOworCXZvaWQgKmJ1ZltNQVhfVU5QQUNLX1RSRUVTXTsKKwlzdHJ1Y3QgdHJhdmVyc2VfaW5mbyBuZXdpbmZvOworCXN0cnVjdCBuYW1lX2VudHJ5ICpwOworCisJcCA9IG5hbWVzOworCXdoaWxlICghcC0+bW9kZSkKKwkJcCsrOworCisJbmV3aW5mbyA9ICppbmZvOworCW5ld2luZm8ucHJldiA9IGluZm87CisJbmV3aW5mby5wYXRoc3BlYyA9IGluZm8tPnBhdGhzcGVjOworCW5ld2luZm8ubmFtZSA9ICpwOworCW5ld2luZm8ucGF0aGxlbiArPSB0cmVlX2VudHJ5X2xlbihwKSArIDE7CisJbmV3aW5mby5jb25mbGljdHMgfD0gZGZfY29uZmxpY3RzOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKywgZGlybWFzayA+Pj0gMSkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gTlVMTDsKKwkJaWYgKGRpcm1hc2sgJiAxKQorCQkJc2hhMSA9IG5hbWVzW2ldLnNoYTE7CisJCWJ1ZltpXSA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHQraSwgc2hhMSk7CisJfQorCisJYm90dG9tID0gc3dpdGNoX2NhY2hlX2JvdHRvbSgmbmV3aW5mbyk7CisJcmV0ID0gdHJhdmVyc2VfdHJlZXMobiwgdCwgJm5ld2luZm8pOworCXJlc3RvcmVfY2FjaGVfYm90dG9tKCZuZXdpbmZvLCBib3R0b20pOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJZnJlZShidWZbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENvbXBhcmUgdGhlIHRyYXZlcnNlLXBhdGggdG8gdGhlIGNhY2hlIGVudHJ5IHdpdGhvdXQgYWN0dWFsbHkKKyAqIGhhdmluZyB0byBnZW5lcmF0ZSB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJhdmVyc2UKKyAqIHBhdGguCisgKgorICogTk9URSEgVGhpcyAqb25seSogY29tcGFyZXMgdXAgdG8gdGhlIHNpemUgb2YgdGhlIHRyYXZlcnNlIHBhdGgKKyAqIGl0c2VsZiAtIHRoZSBjYWxsZXIgbmVlZHMgdG8gZG8gdGhlIGZpbmFsIGNoZWNrIGZvciB0aGUgY2FjaGUKKyAqIGVudHJ5IGhhdmluZyBtb3JlIGRhdGEgYXQgdGhlIGVuZCEKKyAqLworc3RhdGljIGludCBkb19jb21wYXJlX2VudHJ5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbikKK3sKKwlpbnQgbGVuLCBwYXRobGVuLCBjZV9sZW47CisJY29uc3QgY2hhciAqY2VfbmFtZTsKKworCWlmIChpbmZvLT5wcmV2KSB7CisJCWludCBjbXAgPSBkb19jb21wYXJlX2VudHJ5KGNlLCBpbmZvLT5wcmV2LCAmaW5mby0+bmFtZSk7CisJCWlmIChjbXApCisJCQlyZXR1cm4gY21wOworCX0KKwlwYXRobGVuID0gaW5mby0+cGF0aGxlbjsKKwljZV9sZW4gPSBjZV9uYW1lbGVuKGNlKTsKKworCS8qIElmIGNlX2xlbiA8IHBhdGhsZW4gdGhlbiB3ZSBtdXN0IGhhdmUgcHJldmlvdXNseSBoaXQgIm5hbWUgPT0gZGlyZWN0b3J5IiBlbnRyeSAqLworCWlmIChjZV9sZW4gPCBwYXRobGVuKQorCQlyZXR1cm4gLTE7CisKKwljZV9sZW4gLT0gcGF0aGxlbjsKKwljZV9uYW1lID0gY2UtPm5hbWUgKyBwYXRobGVuOworCisJbGVuID0gdHJlZV9lbnRyeV9sZW4obik7CisJcmV0dXJuIGRmX25hbWVfY29tcGFyZShjZV9uYW1lLCBjZV9sZW4sIFNfSUZSRUcsIG4tPnBhdGgsIGxlbiwgbi0+bW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm4pCit7CisJaW50IGNtcCA9IGRvX2NvbXBhcmVfZW50cnkoY2UsIGluZm8sIG4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisKKwkvKgorCSAqIEV2ZW4gaWYgdGhlIGJlZ2lubmluZyBjb21wYXJlZCBpZGVudGljYWxseSwgdGhlIGNlIHNob3VsZAorCSAqIGNvbXBhcmUgYXMgYmlnZ2VyIHRoYW4gYSBkaXJlY3RvcnkgbGVhZGluZyB1cCB0byBpdCEKKwkgKi8KKwlyZXR1cm4gY2VfbmFtZWxlbihjZSkgPiB0cmF2ZXJzZV9wYXRoX2xlbihpbmZvLCBuKTsKK30KKworc3RhdGljIGludCBjZV9pbl90cmF2ZXJzZV9wYXRoKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCit7CisJaWYgKCFpbmZvLT5wcmV2KQorCQlyZXR1cm4gMTsKKwlpZiAoZG9fY29tcGFyZV9lbnRyeShjZSwgaW5mby0+cHJldiwgJmluZm8tPm5hbWUpKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIElmIGNlIChibG9iKSBpcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBwYXRoICh3aGljaCBpcyBhIHRyZWUKKwkgKiB3ZSB3aWxsIGJlIGRlc2NlbmRpbmcgaW50byksIGl0IHdvbid0IGJlIGluc2lkZSBpdC4KKwkgKi8KKwlyZXR1cm4gKGluZm8tPnBhdGhsZW4gPCBjZV9uYW1lbGVuKGNlKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNyZWF0ZV9jZV9lbnRyeShjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm4sIGludCBzdGFnZSkKK3sKKwlpbnQgbGVuID0gdHJhdmVyc2VfcGF0aF9sZW4oaW5mbywgbik7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IHhjYWxsb2MoMSwgY2FjaGVfZW50cnlfc2l6ZShsZW4pKTsKKworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobi0+bW9kZSk7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKHN0YWdlKTsKKwljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwloYXNoY3B5KGNlLT5zaGExLCBuLT5zaGExKTsKKwltYWtlX3RyYXZlcnNlX3BhdGgoY2UtPm5hbWUsIGluZm8sIG4pOworCisJcmV0dXJuIGNlOworfQorCitzdGF0aWMgaW50IHVucGFja19ub25kaXJlY3RvcmllcyhpbnQgbiwgdW5zaWduZWQgbG9uZyBtYXNrLAorCQkJCSB1bnNpZ25lZCBsb25nIGRpcm1hc2ssCisJCQkJIHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywKKwkJCQkgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLAorCQkJCSBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCXVuc2lnbmVkIGxvbmcgY29uZmxpY3RzOworCisJLyogRG8gd2UgaGF2ZSAqb25seSogZGlyZWN0b3JpZXM/IE5vdGhpbmcgdG8gZG8gKi8KKwlpZiAobWFzayA9PSBkaXJtYXNrICYmICFzcmNbMF0pCisJCXJldHVybiAwOworCisJY29uZmxpY3RzID0gaW5mby0+Y29uZmxpY3RzOworCWlmIChvLT5tZXJnZSkKKwkJY29uZmxpY3RzID4+PSAxOworCWNvbmZsaWN0cyB8PSBkaXJtYXNrOworCisJLyoKKwkgKiBPaywgd2UndmUgZmlsbGVkIGluIHVwIHRvIGFueSBwb3RlbnRpYWwgaW5kZXggZW50cnkgaW4gc3JjWzBdLAorCSAqIG5vdyBkbyB0aGUgcmVzdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWludCBzdGFnZTsKKwkJdW5zaWduZWQgaW50IGJpdCA9IDF1bCA8PCBpOworCQlpZiAoY29uZmxpY3RzICYgYml0KSB7CisJCQlzcmNbaSArIG8tPm1lcmdlXSA9IG8tPmRmX2NvbmZsaWN0X2VudHJ5OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCEobWFzayAmIGJpdCkpCisJCQljb250aW51ZTsKKwkJaWYgKCFvLT5tZXJnZSkKKwkJCXN0YWdlID0gMDsKKwkJZWxzZSBpZiAoaSArIDEgPCBvLT5oZWFkX2lkeCkKKwkJCXN0YWdlID0gMTsKKwkJZWxzZSBpZiAoaSArIDEgPiBvLT5oZWFkX2lkeCkKKwkJCXN0YWdlID0gMzsKKwkJZWxzZQorCQkJc3RhZ2UgPSAyOworCQlzcmNbaSArIG8tPm1lcmdlXSA9IGNyZWF0ZV9jZV9lbnRyeShpbmZvLCBuYW1lcyArIGksIHN0YWdlKTsKKwl9CisKKwlpZiAoby0+bWVyZ2UpCisJCXJldHVybiBjYWxsX3VucGFja19mbihzcmMsIG8pOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJaWYgKHNyY1tpXSAmJiBzcmNbaV0gIT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCQlkb19hZGRfZW50cnkobywgc3JjW2ldLCAwLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bnBhY2tfZmFpbGVkKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlkaXNjYXJkX2luZGV4KCZvLT5yZXN1bHQpOworCWlmICghby0+Z2VudGx5ICYmICFvLT5leGl0aW5nX2Vhcmx5KSB7CisJCWlmIChtZXNzYWdlKQorCQkJcmV0dXJuIGVycm9yKCIlcyIsIG1lc3NhZ2UpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAtMTsKK30KKworLyogTkVFRFNXT1JLOiBnaXZlIHRoaXMgYSBiZXR0ZXIgbmFtZSBhbmQgc2hhcmUgd2l0aCB0cmVlLXdhbGsuYyAqLworc3RhdGljIGludCBuYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqYSwgaW50IGFfbGVuLAorCQkJY29uc3QgY2hhciAqYiwgaW50IGJfbGVuKQoreworCWludCBsZW4gPSAoYV9sZW4gPCBiX2xlbikgPyBhX2xlbiA6IGJfbGVuOworCWludCBjbXAgPSBtZW1jbXAoYSwgYiwgbGVuKTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCXJldHVybiAoYV9sZW4gLSBiX2xlbik7Cit9CisKKy8qCisgKiBUaGUgdHJlZSB0cmF2ZXJzYWwgaXMgbG9va2luZyBhdCBuYW1lIHAuICBJZiB3ZSBoYXZlIGEgbWF0Y2hpbmcgZW50cnksCisgKiByZXR1cm4gaXQuICBJZiBuYW1lIHAgaXMgYSBkaXJlY3RvcnkgaW4gdGhlIGluZGV4LCBkbyBub3QgcmV0dXJuCisgKiBhbnl0aGluZywgYXMgd2Ugd2lsbCB3YW50IHRvIG1hdGNoIGl0IHdoZW4gdGhlIHRyYXZlcnNhbCBkZXNjZW5kcyBpbnRvCisgKiB0aGUgZGlyZWN0b3J5LgorICovCitzdGF0aWMgaW50IGZpbmRfY2FjaGVfcG9zKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAorCQkJICBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqcCkKK3sKKwlpbnQgcG9zOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyA9IGluZm8tPmRhdGE7CisJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKKwlpbnQgcGZ4bGVuID0gaW5mby0+cGF0aGxlbjsKKwlpbnQgcF9sZW4gPSB0cmVlX2VudHJ5X2xlbihwKTsKKworCWZvciAocG9zID0gby0+Y2FjaGVfYm90dG9tOyBwb3MgPCBpbmRleC0+Y2FjaGVfbnI7IHBvcysrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbcG9zXTsKKwkJY29uc3QgY2hhciAqY2VfbmFtZSwgKmNlX3NsYXNoOworCQlpbnQgY21wLCBjZV9sZW47CisKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VOUEFDS0VEKSB7CisJCQkvKgorCQkJICogY2FjaGVfYm90dG9tIGVudHJ5IGlzIGFscmVhZHkgdW5wYWNrZWQsIHNvCisJCQkgKiB3ZSBjYW4gbmV2ZXIgbWF0Y2ggaXQ7IGRvbid0IGNoZWNrIGl0CisJCQkgKiBhZ2Fpbi4KKwkJCSAqLworCQkJaWYgKHBvcyA9PSBvLT5jYWNoZV9ib3R0b20pCisJCQkJKytvLT5jYWNoZV9ib3R0b207CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWNlX2luX3RyYXZlcnNlX3BhdGgoY2UsIGluZm8pKQorCQkJY29udGludWU7CisJCWNlX25hbWUgPSBjZS0+bmFtZSArIHBmeGxlbjsKKwkJY2Vfc2xhc2ggPSBzdHJjaHIoY2VfbmFtZSwgJy8nKTsKKwkJaWYgKGNlX3NsYXNoKQorCQkJY2VfbGVuID0gY2Vfc2xhc2ggLSBjZV9uYW1lOworCQllbHNlCisJCQljZV9sZW4gPSBjZV9uYW1lbGVuKGNlKSAtIHBmeGxlbjsKKwkJY21wID0gbmFtZV9jb21wYXJlKHAtPnBhdGgsIHBfbGVuLCBjZV9uYW1lLCBjZV9sZW4pOworCQkvKgorCQkgKiBFeGFjdCBtYXRjaDsgaWYgd2UgaGF2ZSBhIGRpcmVjdG9yeSB3ZSBuZWVkIHRvCisJCSAqIGRlbGF5IHJldHVybmluZyBpdC4KKwkJICovCisJCWlmICghY21wKQorCQkJcmV0dXJuIGNlX3NsYXNoID8gLTIgLSBwb3MgOiBwb3M7CisJCWlmICgwIDwgY21wKQorCQkJY29udGludWU7IC8qIGtlZXAgbG9va2luZyAqLworCQkvKgorCQkgKiBjZV9uYW1lIHNvcnRzIGFmdGVyIHAtPnBhdGg7IGNvdWxkIGl0IGJlIHRoYXQgd2UKKwkJICogaGF2ZSBmaWxlcyB1bmRlciBwLT5wYXRoIGRpcmVjdG9yeSBpbiB0aGUgaW5kZXg/CisJCSAqIEUuZy4gIGNlX25hbWUgPT0gInQtaSIsIGFuZCBwLT5wYXRoID09ICJ0Ijsgd2UgbWF5CisJCSAqIGhhdmUgInQvYSIgaW4gdGhlIGluZGV4LgorCQkgKi8KKwkJaWYgKHBfbGVuIDwgY2VfbGVuICYmICFtZW1jbXAoY2VfbmFtZSwgcC0+cGF0aCwgcF9sZW4pICYmCisJCSAgICBjZV9uYW1lW3BfbGVuXSA8ICcvJykKKwkJCWNvbnRpbnVlOyAvKiBrZWVwIGxvb2tpbmcgKi8KKwkJYnJlYWs7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqZmluZF9jYWNoZV9lbnRyeShzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpwKQoreworCWludCBwb3MgPSBmaW5kX2NhY2hlX3BvcyhpbmZvLCBwKTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCisJaWYgKDAgPD0gcG9zKQorCQlyZXR1cm4gby0+c3JjX2luZGV4LT5jYWNoZVtwb3NdOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3BhdGgoc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCit7CisJaWYgKGluZm8tPnByZXYpIHsKKwkJZGVidWdfcGF0aChpbmZvLT5wcmV2KTsKKwkJaWYgKCppbmZvLT5wcmV2LT5uYW1lLnBhdGgpCisJCQlwdXRjaGFyKCcvJyk7CisJfQorCXByaW50ZigiJXMiLCBpbmZvLT5uYW1lLnBhdGgpOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z19uYW1lX2VudHJ5KGludCBpLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbikKK3sKKwlwcmludGYoImVudCMlZCAlMDZvICVzXG4iLCBpLAorCSAgICAgICBuLT5wYXRoID8gbi0+bW9kZSA6IDAsCisJICAgICAgIG4tPnBhdGggPyBuLT5wYXRoIDogIihtaXNzaW5nKSIpOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z191bnBhY2tfY2FsbGJhY2soaW50IG4sCisJCQkJICB1bnNpZ25lZCBsb25nIG1hc2ssCisJCQkJICB1bnNpZ25lZCBsb25nIGRpcm1hc2ssCisJCQkJICBzdHJ1Y3QgbmFtZV9lbnRyeSAqbmFtZXMsCisJCQkJICBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKwlwcmludGYoIiogdW5wYWNrIG1hc2sgJWx1LCBkaXJtYXNrICVsdSwgY250ICVkICIsCisJICAgICAgIG1hc2ssIGRpcm1hc2ssIG4pOworCWRlYnVnX3BhdGgoaW5mbyk7CisJcHV0Y2hhcignXG4nKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlkZWJ1Z19uYW1lX2VudHJ5KGksIG5hbWVzICsgaSk7Cit9CisKK3N0YXRpYyBpbnQgdW5wYWNrX2NhbGxiYWNrKGludCBuLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZGlybWFzaywgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKnNyY1tNQVhfVU5QQUNLX1RSRUVTICsgMV0gPSB7IE5VTEwsIH07CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvID0gaW5mby0+ZGF0YTsKKwljb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqcCA9IG5hbWVzOworCisJLyogRmluZCBmaXJzdCBlbnRyeSB3aXRoIGEgcmVhbCBuYW1lICh3ZSBjb3VsZCB1c2UgIm1hc2siIHRvbykgKi8KKwl3aGlsZSAoIXAtPm1vZGUpCisJCXArKzsKKworCWlmIChvLT5kZWJ1Z191bnBhY2spCisJCWRlYnVnX3VucGFja19jYWxsYmFjayhuLCBtYXNrLCBkaXJtYXNrLCBuYW1lcywgaW5mbyk7CisKKwkvKiBBcmUgd2Ugc3VwcG9zZWQgdG8gbG9vayBhdCB0aGUgaW5kZXggdG9vPyAqLworCWlmIChvLT5tZXJnZSkgeworCQl3aGlsZSAoMSkgeworCQkJaW50IGNtcDsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwkJCWlmIChvLT5kaWZmX2luZGV4X2NhY2hlZCkKKwkJCQljZSA9IG5leHRfY2FjaGVfZW50cnkobyk7CisJCQllbHNlCisJCQkJY2UgPSBmaW5kX2NhY2hlX2VudHJ5KGluZm8sIHApOworCisJCQlpZiAoIWNlKQorCQkJCWJyZWFrOworCQkJY21wID0gY29tcGFyZV9lbnRyeShjZSwgaW5mbywgcCk7CisJCQlpZiAoY21wIDwgMCkgeworCQkJCWlmICh1bnBhY2tfaW5kZXhfZW50cnkoY2UsIG8pIDwgMCkKKwkJCQkJcmV0dXJuIHVucGFja19mYWlsZWQobywgTlVMTCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIWNtcCkgeworCQkJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCQkJLyoKKwkJCQkJICogSWYgd2Ugc2tpcCB1bm1lcmdlZCBpbmRleAorCQkJCQkgKiBlbnRyaWVzLCB3ZSdsbCBza2lwIHRoaXMKKwkJCQkJICogZW50cnkgKmFuZCogdGhlIHRyZWUKKwkJCQkJICogZW50cmllcyBhc3NvY2lhdGVkIHdpdGggaXQhCisJCQkJCSAqLworCQkJCQlpZiAoby0+c2tpcF91bm1lcmdlZCkgeworCQkJCQkJYWRkX3NhbWVfdW5tZXJnZWQoY2UsIG8pOworCQkJCQkJcmV0dXJuIG1hc2s7CisJCQkJCX0KKwkJCQl9CisJCQkJc3JjWzBdID0gY2U7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh1bnBhY2tfbm9uZGlyZWN0b3JpZXMobiwgbWFzaywgZGlybWFzaywgc3JjLCBuYW1lcywgaW5mbykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoby0+bWVyZ2UgJiYgc3JjWzBdKSB7CisJCWlmIChjZV9zdGFnZShzcmNbMF0pKQorCQkJbWFya19jZV91c2VkX3NhbWVfbmFtZShzcmNbMF0sIG8pOworCQllbHNlCisJCQltYXJrX2NlX3VzZWQoc3JjWzBdLCBvKTsKKwl9CisKKwkvKiBOb3cgaGFuZGxlIGFueSBkaXJlY3Rvcmllcy4uICovCisJaWYgKGRpcm1hc2spIHsKKwkJdW5zaWduZWQgbG9uZyBjb25mbGljdHMgPSBtYXNrICYgfmRpcm1hc2s7CisJCWlmIChvLT5tZXJnZSkgeworCQkJY29uZmxpY3RzIDw8PSAxOworCQkJaWYgKHNyY1swXSkKKwkJCQljb25mbGljdHMgfD0gMTsKKwkJfQorCisJCS8qIHNwZWNpYWwgY2FzZTogImRpZmYtaW5kZXggLS1jYWNoZWQiIGxvb2tpbmcgYXQgYSB0cmVlICovCisJCWlmIChvLT5kaWZmX2luZGV4X2NhY2hlZCAmJgorCQkgICAgbiA9PSAxICYmIGRpcm1hc2sgPT0gMSAmJiBTX0lTRElSKG5hbWVzLT5tb2RlKSkgeworCQkJaW50IG1hdGNoZXM7CisJCQltYXRjaGVzID0gY2FjaGVfdHJlZV9tYXRjaGVzX3RyYXZlcnNhbChvLT5zcmNfaW5kZXgtPmNhY2hlX3RyZWUsCisJCQkJCQkJICAgICAgIG5hbWVzLCBpbmZvKTsKKwkJCS8qCisJCQkgKiBFdmVyeXRoaW5nIHVuZGVyIHRoZSBuYW1lIG1hdGNoZXM7IHNraXAgdGhlCisJCQkgKiBlbnRpcmUgaGllcmFyY2h5LiAgZGlmZl9pbmRleF9jYWNoZWQgY29kZXBhdGgKKwkJCSAqIHNwZWNpYWwgY2FzZXMgRC9GIGNvbmZsaWN0cyBpbiBzdWNoIGEgd2F5IHRoYXQKKwkJCSAqIGl0IGRvZXMgbm90IGRvIGFueSBsb29rLWFoZWFkLCBzbyB0aGlzIGlzIHNhZmUuCisJCQkgKi8KKwkJCWlmIChtYXRjaGVzKSB7CisJCQkJby0+Y2FjaGVfYm90dG9tICs9IG1hdGNoZXM7CisJCQkJcmV0dXJuIG1hc2s7CisJCQl9CisJCX0KKworCQlpZiAodHJhdmVyc2VfdHJlZXNfcmVjdXJzaXZlKG4sIGRpcm1hc2ssIGNvbmZsaWN0cywKKwkJCQkJICAgICBuYW1lcywgaW5mbykgPCAwKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gbWFzazsKKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCBjbGVhcl9jZV9mbGFnc18xKHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlLCBpbnQgbnIsCisJCQkgICAgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbiwKKwkJCSAgICBpbnQgc2VsZWN0X21hc2ssIGludCBjbGVhcl9tYXNrLAorCQkJICAgIHN0cnVjdCBleGNsdWRlX2xpc3QgKmVsLCBpbnQgZGVmdmFsKTsKKworLyogV2hvbGUgZGlyZWN0b3J5IG1hdGNoaW5nICovCitzdGF0aWMgaW50IGNsZWFyX2NlX2ZsYWdzX2RpcihzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZSwgaW50IG5yLAorCQkJICAgICAgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbiwKKwkJCSAgICAgIGNoYXIgKmJhc2VuYW1lLAorCQkJICAgICAgaW50IHNlbGVjdF9tYXNrLCBpbnQgY2xlYXJfbWFzaywKKwkJCSAgICAgIHN0cnVjdCBleGNsdWRlX2xpc3QgKmVsLCBpbnQgZGVmdmFsKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlX2VuZDsKKwlpbnQgZHR5cGUgPSBEVF9ESVI7CisJaW50IHJldCA9IGV4Y2x1ZGVkX2Zyb21fbGlzdChwcmVmaXgsIHByZWZpeF9sZW4sIGJhc2VuYW1lLCAmZHR5cGUsIGVsKTsKKworCXByZWZpeFtwcmVmaXhfbGVuKytdID0gJy8nOworCisJLyogSWYgdW5kZWNpZGVkLCB1c2UgbWF0Y2hpbmcgcmVzdWx0IG9mIHBhcmVudCBkaXIgaW4gZGVmdmFsICovCisJaWYgKHJldCA8IDApCisJCXJldCA9IGRlZnZhbDsKKworCWZvciAoY2FjaGVfZW5kID0gY2FjaGU7IGNhY2hlX2VuZCAhPSBjYWNoZSArIG5yOyBjYWNoZV9lbmQrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gKmNhY2hlX2VuZDsKKwkJaWYgKHN0cm5jbXAoY2UtPm5hbWUsIHByZWZpeCwgcHJlZml4X2xlbikpCisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFRPRE86IGNoZWNrIGVsLCBpZiB0aGVyZSBhcmUgbm8gcGF0dGVybnMgdGhhdCBtYXkgY29uZmxpY3QKKwkgKiB3aXRoIHJldCAoaW93LCB3ZSBrbm93IGluIGFkdmFuY2UgdGhlIGluY2wvZXhjbAorCSAqIGRlY2lzaW9uIGZvciB0aGUgZW50aXJlIGRpcmVjdG9yeSksIGNsZWFyIGZsYWcgaGVyZSB3aXRob3V0CisJICogY2FsbGluZyBjbGVhcl9jZV9mbGFnc18xKCkuIFRoYXQgZnVuY3Rpb24gd2lsbCBjYWxsCisJICogdGhlIGV4cGVuc2l2ZSBleGNsdWRlZF9mcm9tX2xpc3QoKSBvbiBldmVyeSBlbnRyeS4KKwkgKi8KKwlyZXR1cm4gY2xlYXJfY2VfZmxhZ3NfMShjYWNoZSwgY2FjaGVfZW5kIC0gY2FjaGUsCisJCQkJcHJlZml4LCBwcmVmaXhfbGVuLAorCQkJCXNlbGVjdF9tYXNrLCBjbGVhcl9tYXNrLAorCQkJCWVsLCByZXQpOworfQorCisvKgorICogVHJhdmVyc2UgdGhlIGluZGV4LCBmaW5kIGV2ZXJ5IGVudHJ5IHRoYXQgbWF0Y2hlcyBhY2NvcmRpbmcgdG8KKyAqIG8tPmVsLiBEbyAiY2VfZmxhZ3MgJj0gfmNsZWFyX21hc2siIG9uIHRob3NlIGVudHJpZXMuIFJldHVybiB0aGUKKyAqIG51bWJlciBvZiB0cmF2ZXJzZWQgZW50cmllcy4KKyAqCisgKiBJZiBzZWxlY3RfbWFzayBpcyBub24temVybywgb25seSBlbnRyaWVzIHdob3NlIGNlX2ZsYWdzIGhhcyBvbiBvZgorICogdGhvc2UgYml0cyBlbmFibGVkIGFyZSB0cmF2ZXJzZWQuCisgKgorICogY2FjaGUJOiBwb2ludGVyIHRvIGFuIGluZGV4IGVudHJ5CisgKiBwcmVmaXhfbGVuCTogYW4gb2Zmc2V0IHRvIGl0cyBwYXRoCisgKgorICogVGhlIGN1cnJlbnQgcGF0aCAoInByZWZpeCIpIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgJy8nIGlzCisgKiAgIGNhY2hlWzBdLT5uYW1lWzAuLihwcmVmaXhfbGVuLTEpXQorICogVG9wIGxldmVsIHBhdGggaGFzIHByZWZpeF9sZW4gemVyby4KKyAqLworc3RhdGljIGludCBjbGVhcl9jZV9mbGFnc18xKHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlLCBpbnQgbnIsCisJCQkgICAgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbiwKKwkJCSAgICBpbnQgc2VsZWN0X21hc2ssIGludCBjbGVhcl9tYXNrLAorCQkJICAgIHN0cnVjdCBleGNsdWRlX2xpc3QgKmVsLCBpbnQgZGVmdmFsKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlX2VuZCA9IGNhY2hlICsgbnI7CisKKwkvKgorCSAqIFByb2Nlc3MgYWxsIGVudHJpZXMgdGhhdCBoYXZlIHRoZSBnaXZlbiBwcmVmaXggYW5kIG1lZXQKKwkgKiBzZWxlY3RfbWFzayBjb25kaXRpb24KKwkgKi8KKwl3aGlsZShjYWNoZSAhPSBjYWNoZV9lbmQpIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9ICpjYWNoZTsKKwkJY29uc3QgY2hhciAqbmFtZSwgKnNsYXNoOworCQlpbnQgbGVuLCBkdHlwZSwgcmV0OworCisJCWlmIChzZWxlY3RfbWFzayAmJiAhKGNlLT5jZV9mbGFncyAmIHNlbGVjdF9tYXNrKSkgeworCQkJY2FjaGUrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHByZWZpeF9sZW4gJiYgc3RybmNtcChjZS0+bmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuKSkKKwkJCWJyZWFrOworCisJCW5hbWUgPSBjZS0+bmFtZSArIHByZWZpeF9sZW47CisJCXNsYXNoID0gc3RyY2hyKG5hbWUsICcvJyk7CisKKwkJLyogSWYgaXQncyBhIGRpcmVjdG9yeSwgdHJ5IHdob2xlIGRpcmVjdG9yeSBtYXRjaCBmaXJzdCAqLworCQlpZiAoc2xhc2gpIHsKKwkJCWludCBwcm9jZXNzZWQ7CisKKwkJCWxlbiA9IHNsYXNoIC0gbmFtZTsKKwkJCW1lbWNweShwcmVmaXggKyBwcmVmaXhfbGVuLCBuYW1lLCBsZW4pOworCisJCQkvKgorCQkJICogdGVybWluYXRlIHRoZSBzdHJpbmcgKG5vIHRyYWlsaW5nIHNsYXNoKSwKKwkJCSAqIGNsZWFyX2NfZl9kaXIgbmVlZHMgaXQKKwkJCSAqLworCQkJcHJlZml4W3ByZWZpeF9sZW4gKyBsZW5dID0gJ1wwJzsKKwkJCXByb2Nlc3NlZCA9IGNsZWFyX2NlX2ZsYWdzX2RpcihjYWNoZSwgY2FjaGVfZW5kIC0gY2FjaGUsCisJCQkJCQkgICAgICAgcHJlZml4LCBwcmVmaXhfbGVuICsgbGVuLAorCQkJCQkJICAgICAgIHByZWZpeCArIHByZWZpeF9sZW4sCisJCQkJCQkgICAgICAgc2VsZWN0X21hc2ssIGNsZWFyX21hc2ssCisJCQkJCQkgICAgICAgZWwsIGRlZnZhbCk7CisKKwkJCS8qIGNsZWFyX2NfZl9kaXIgZWF0cyBhIHdob2xlIGRpciBhbHJlYWR5PyAqLworCQkJaWYgKHByb2Nlc3NlZCkgeworCQkJCWNhY2hlICs9IHByb2Nlc3NlZDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJcHJlZml4W3ByZWZpeF9sZW4gKyBsZW4rK10gPSAnLyc7CisJCQljYWNoZSArPSBjbGVhcl9jZV9mbGFnc18xKGNhY2hlLCBjYWNoZV9lbmQgLSBjYWNoZSwKKwkJCQkJCSAgcHJlZml4LCBwcmVmaXhfbGVuICsgbGVuLAorCQkJCQkJICBzZWxlY3RfbWFzaywgY2xlYXJfbWFzaywgZWwsIGRlZnZhbCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5vbi1kaXJlY3RvcnkgKi8KKwkJZHR5cGUgPSBjZV90b19kdHlwZShjZSk7CisJCXJldCA9IGV4Y2x1ZGVkX2Zyb21fbGlzdChjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIG5hbWUsICZkdHlwZSwgZWwpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldCA9IGRlZnZhbDsKKwkJaWYgKHJldCA+IDApCisJCQljZS0+Y2VfZmxhZ3MgJj0gfmNsZWFyX21hc2s7CisJCWNhY2hlKys7CisJfQorCXJldHVybiBuciAtIChjYWNoZV9lbmQgLSBjYWNoZSk7Cit9CisKK3N0YXRpYyBpbnQgY2xlYXJfY2VfZmxhZ3Moc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUsIGludCBuciwKKwkJCSAgICBpbnQgc2VsZWN0X21hc2ssIGludCBjbGVhcl9tYXNrLAorCQkJICAgIHN0cnVjdCBleGNsdWRlX2xpc3QgKmVsKQoreworCWNoYXIgcHJlZml4W1BBVEhfTUFYXTsKKwlyZXR1cm4gY2xlYXJfY2VfZmxhZ3NfMShjYWNoZSwgbnIsCisJCQkJcHJlZml4LCAwLAorCQkJCXNlbGVjdF9tYXNrLCBjbGVhcl9tYXNrLAorCQkJCWVsLCAwKTsKK30KKworLyoKKyAqIFNldC9DbGVhciBDRV9ORVdfU0tJUF9XT1JLVFJFRSBhY2NvcmRpbmcgdG8gJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXQKKyAqLworc3RhdGljIHZvaWQgbWFya19uZXdfc2tpcF93b3JrdHJlZShzdHJ1Y3QgZXhjbHVkZV9saXN0ICplbCwKKwkJCQkgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKnRoZV9pbmRleCwKKwkJCQkgICBpbnQgc2VsZWN0X2ZsYWcsIGludCBza2lwX3d0X2ZsYWcpCit7CisJaW50IGk7CisKKwkvKgorCSAqIDEuIFByZXRlbmQgdGhlIG5hcnJvd2VzdCB3b3JrdHJlZTogb25seSB1bm1lcmdlZCBlbnRyaWVzCisJICogYXJlIGNoZWNrZWQgb3V0CisJICovCisJZm9yIChpID0gMDsgaSA8IHRoZV9pbmRleC0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gdGhlX2luZGV4LT5jYWNoZVtpXTsKKworCQlpZiAoc2VsZWN0X2ZsYWcgJiYgIShjZS0+Y2VfZmxhZ3MgJiBzZWxlY3RfZmxhZykpCisJCQljb250aW51ZTsKKworCQlpZiAoIWNlX3N0YWdlKGNlKSkKKwkJCWNlLT5jZV9mbGFncyB8PSBza2lwX3d0X2ZsYWc7CisJCWVsc2UKKwkJCWNlLT5jZV9mbGFncyAmPSB+c2tpcF93dF9mbGFnOworCX0KKworCS8qCisJICogMi4gV2lkZW4gd29ya3RyZWUgYWNjb3JkaW5nIHRvIHNwYXJzZS1jaGVja291dCBmaWxlLgorCSAqIE1hdGNoZWQgZW50cmllcyB3aWxsIGhhdmUgc2tpcF93dF9mbGFnIGNsZWFyZWQgKGkuZS4gImluIikKKwkgKi8KKwljbGVhcl9jZV9mbGFncyh0aGVfaW5kZXgtPmNhY2hlLCB0aGVfaW5kZXgtPmNhY2hlX25yLAorCQkgICAgICAgc2VsZWN0X2ZsYWcsIHNraXBfd3RfZmxhZywgZWwpOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9hYnNlbnQoc3RydWN0IGNhY2hlX2VudHJ5ICosIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKik7CisvKgorICogTi13YXkgbWVyZ2UgImxlbiIgdHJlZXMuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSB0byBtYW5pcHVsYXRlIHRoZQorICogcmVzdWx0aW5nIGluZGV4LCAtMiBvbiBmYWlsdXJlIHRvIHJlZmxlY3QgdGhlIGNoYW5nZXMgdG8gdGhlIHdvcmsgdHJlZS4KKyAqCisgKiBDRV9BRERFRCwgQ0VfVU5QQUNLRUQgYW5kIENFX05FV19TS0lQX1dPUktUUkVFIGFyZSB1c2VkIGludGVybmFsbHkKKyAqLworaW50IHVucGFja190cmVlcyh1bnNpZ25lZCBsZW4sIHN0cnVjdCB0cmVlX2Rlc2MgKnQsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpbnQgaSwgcmV0OworCXN0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKmRmYzsKKwlzdHJ1Y3QgZXhjbHVkZV9saXN0IGVsOworCisJaWYgKGxlbiA+IE1BWF9VTlBBQ0tfVFJFRVMpCisJCWRpZSgidW5wYWNrX3RyZWVzIHRha2VzIGF0IG1vc3QgJWQgdHJlZXMiLCBNQVhfVU5QQUNLX1RSRUVTKTsKKwltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKKwlzdGF0ZS5iYXNlX2RpciA9ICIiOworCXN0YXRlLmZvcmNlID0gMTsKKwlzdGF0ZS5xdWlldCA9IDE7CisJc3RhdGUucmVmcmVzaF9jYWNoZSA9IDE7CisKKwltZW1zZXQoJmVsLCAwLCBzaXplb2YoZWwpKTsKKwlpZiAoIWNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0IHx8ICFvLT51cGRhdGUpCisJCW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ID0gMTsKKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0KSB7CisJCWlmIChhZGRfZXhjbHVkZXNfZnJvbV9maWxlX3RvX2xpc3QoZ2l0X3BhdGgoImluZm8vc3BhcnNlLWNoZWNrb3V0IiksICIiLCAwLCBOVUxMLCAmZWwsIDApIDwgMCkKKwkJCW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ID0gMTsKKwkJZWxzZQorCQkJby0+ZWwgPSAmZWw7CisJfQorCisJaWYgKG8tPmRpcikgeworCQlvLT5wYXRoX2V4Y2x1ZGVfY2hlY2sgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcGF0aF9leGNsdWRlX2NoZWNrKSk7CisJCXBhdGhfZXhjbHVkZV9jaGVja19pbml0KG8tPnBhdGhfZXhjbHVkZV9jaGVjaywgby0+ZGlyKTsKKwl9CisJbWVtc2V0KCZvLT5yZXN1bHQsIDAsIHNpemVvZihvLT5yZXN1bHQpKTsKKwlvLT5yZXN1bHQuaW5pdGlhbGl6ZWQgPSAxOworCW8tPnJlc3VsdC50aW1lc3RhbXAuc2VjID0gby0+c3JjX2luZGV4LT50aW1lc3RhbXAuc2VjOworCW8tPnJlc3VsdC50aW1lc3RhbXAubnNlYyA9IG8tPnNyY19pbmRleC0+dGltZXN0YW1wLm5zZWM7CisJby0+cmVzdWx0LnZlcnNpb24gPSBvLT5zcmNfaW5kZXgtPnZlcnNpb247CisJby0+bWVyZ2Vfc2l6ZSA9IGxlbjsKKwltYXJrX2FsbF9jZV91bnVzZWQoby0+c3JjX2luZGV4KTsKKworCS8qCisJICogU3BhcnNlIGNoZWNrb3V0IGxvb3AgIzE6IHNldCBORVdfU0tJUF9XT1JLVFJFRSBvbiBleGlzdGluZyBlbnRyaWVzCisJICovCisJaWYgKCFvLT5za2lwX3NwYXJzZV9jaGVja291dCkKKwkJbWFya19uZXdfc2tpcF93b3JrdHJlZShvLT5lbCwgby0+c3JjX2luZGV4LCAwLCBDRV9ORVdfU0tJUF9XT1JLVFJFRSk7CisKKwlpZiAoIWRmYykKKwkJZGZjID0geGNhbGxvYygxLCBjYWNoZV9lbnRyeV9zaXplKDApKTsKKwlvLT5kZl9jb25mbGljdF9lbnRyeSA9IGRmYzsKKworCWlmIChsZW4pIHsKKwkJY29uc3QgY2hhciAqcHJlZml4ID0gby0+cHJlZml4ID8gby0+cHJlZml4IDogIiI7CisJCXN0cnVjdCB0cmF2ZXJzZV9pbmZvIGluZm87CisKKwkJc2V0dXBfdHJhdmVyc2VfaW5mbygmaW5mbywgcHJlZml4KTsKKwkJaW5mby5mbiA9IHVucGFja19jYWxsYmFjazsKKwkJaW5mby5kYXRhID0gbzsKKwkJaW5mby5zaG93X2FsbF9lcnJvcnMgPSBvLT5zaG93X2FsbF9lcnJvcnM7CisJCWluZm8ucGF0aHNwZWMgPSBvLT5wYXRoc3BlYzsKKworCQlpZiAoby0+cHJlZml4KSB7CisJCQkvKgorCQkJICogVW5wYWNrIGV4aXN0aW5nIGluZGV4IGVudHJpZXMgdGhhdCBzb3J0IGJlZm9yZSB0aGUKKwkJCSAqIHByZWZpeCB0aGUgdHJlZSBpcyBzcGxpY2VkIGludG8uICBOb3RlIHRoYXQgby0+bWVyZ2UKKwkJCSAqIGlzIGFsd2F5cyB0cnVlIGluIHRoaXMgY2FzZS4KKwkJCSAqLworCQkJd2hpbGUgKDEpIHsKKwkJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gbmV4dF9jYWNoZV9lbnRyeShvKTsKKwkJCQlpZiAoIWNlKQorCQkJCQlicmVhazsKKwkJCQlpZiAoY2VfaW5fdHJhdmVyc2VfcGF0aChjZSwgJmluZm8pKQorCQkJCQlicmVhazsKKwkJCQlpZiAodW5wYWNrX2luZGV4X2VudHJ5KGNlLCBvKSA8IDApCisJCQkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKKwkJCX0KKwkJfQorCisJCWlmICh0cmF2ZXJzZV90cmVlcyhsZW4sIHQsICZpbmZvKSA8IDApCisJCQlnb3RvIHJldHVybl9mYWlsZWQ7CisJfQorCisJLyogQW55IGxlZnQtb3ZlciBlbnRyaWVzIGluIHRoZSBpbmRleD8gKi8KKwlpZiAoby0+bWVyZ2UpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBuZXh0X2NhY2hlX2VudHJ5KG8pOworCQkJaWYgKCFjZSkKKwkJCQlicmVhazsKKwkJCWlmICh1bnBhY2tfaW5kZXhfZW50cnkoY2UsIG8pIDwgMCkKKwkJCQlnb3RvIHJldHVybl9mYWlsZWQ7CisJCX0KKwl9CisJbWFya19hbGxfY2VfdW51c2VkKG8tPnNyY19pbmRleCk7CisKKwlpZiAoby0+dHJpdmlhbF9tZXJnZXNfb25seSAmJiBvLT5ub250cml2aWFsX21lcmdlKSB7CisJCXJldCA9IHVucGFja19mYWlsZWQobywgIk1lcmdlIHJlcXVpcmVzIGZpbGUtbGV2ZWwgbWVyZ2luZyIpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCFvLT5za2lwX3NwYXJzZV9jaGVja291dCkgeworCQlpbnQgZW1wdHlfd29ya3RyZWUgPSAxOworCisJCS8qCisJCSAqIFNwYXJzZSBjaGVja291dCBsb29wICMyOiBzZXQgTkVXX1NLSVBfV09SS1RSRUUgb24gZW50cmllcyBub3QgaW4gbG9vcCAjMQorCQkgKiBJZiB0aGUgd2lsbCBoYXZlIE5FV19TS0lQX1dPUktUUkVFLCBhbHNvIHNldCBDRV9TS0lQX1dPUktUUkVFCisJCSAqIHNvIGFwcGx5X3NwYXJzZV9jaGVja291dCgpIHdvbid0IGF0dGVtcHQgdG8gcmVtb3ZlIGl0IGZyb20gd29ya3RyZWUKKwkJICovCisJCW1hcmtfbmV3X3NraXBfd29ya3RyZWUoby0+ZWwsICZvLT5yZXN1bHQsIENFX0FEREVELCBDRV9TS0lQX1dPUktUUkVFIHwgQ0VfTkVXX1NLSVBfV09SS1RSRUUpOworCisJCXJldCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBvLT5yZXN1bHQuY2FjaGVfbnI7IGkrKykgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IG8tPnJlc3VsdC5jYWNoZVtpXTsKKworCQkJLyoKKwkJCSAqIEVudHJpZXMgbWFya2VkIHdpdGggQ0VfQURERUQgaW4gbWVyZ2VkX2VudHJ5KCkgZG8gbm90IGhhdmUKKwkJCSAqIHZlcmlmeV9hYnNlbnQoKSBjaGVjayAodGhlIGNoZWNrIGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVkCisJCQkgKiBiZWNhdXNlIENFX05FV19TS0lQX1dPUktUUkVFIGlzIHNldCB1bmNvbmRpdGlvbmFsbHkpLgorCQkJICoKKwkJCSAqIERvIHRoZSByZWFsIGNoZWNrIG5vdyBiZWNhdXNlIHdlIGhhdmUgaGFkCisJCQkgKiBjb3JyZWN0IENFX05FV19TS0lQX1dPUktUUkVFCisJCQkgKi8KKwkJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9BRERFRCAmJgorCQkJICAgIHZlcmlmeV9hYnNlbnQoY2UsIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX09WRVJXUklUVEVOLCBvKSkgeworCQkJCWlmICghby0+c2hvd19hbGxfZXJyb3JzKQorCQkJCQlnb3RvIHJldHVybl9mYWlsZWQ7CisJCQkJcmV0ID0gLTE7CisJCQl9CisKKwkJCWlmIChhcHBseV9zcGFyc2VfY2hlY2tvdXQoY2UsIG8pKSB7CisJCQkJaWYgKCFvLT5zaG93X2FsbF9lcnJvcnMpCisJCQkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKKwkJCQlyZXQgPSAtMTsKKwkJCX0KKwkJCWlmICghY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCQkJZW1wdHlfd29ya3RyZWUgPSAwOworCisJCX0KKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHJldHVybl9mYWlsZWQ7CisJCS8qCisJCSAqIFNwYXJzZSBjaGVja291dCBpcyBtZWFudCB0byBuYXJyb3cgZG93biBjaGVja291dCBhcmVhCisJCSAqIGJ1dCBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIG5hcnJvdyBkb3duIHRvIGVtcHR5IHdvcmtpbmcKKwkJICogdHJlZS4gVGhpcyBpcyB1c3VhbGx5IGEgbWlzdGFrZSBpbiBzcGFyc2UgY2hlY2tvdXQgcnVsZXMuCisJCSAqIERvIG5vdCBhbGxvdyB1c2VycyB0byBkbyB0aGF0LgorCQkgKi8KKwkJaWYgKG8tPnJlc3VsdC5jYWNoZV9uciAmJiBlbXB0eV93b3JrdHJlZSkgeworCQkJcmV0ID0gdW5wYWNrX2ZhaWxlZChvLCAiU3BhcnNlIGNoZWNrb3V0IGxlYXZlcyBubyBlbnRyeSBvbiB3b3JraW5nIGRpcmVjdG9yeSIpOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJby0+c3JjX2luZGV4ID0gTlVMTDsKKwlyZXQgPSBjaGVja191cGRhdGVzKG8pID8gKC0yKSA6IDA7CisJaWYgKG8tPmRzdF9pbmRleCkKKwkJKm8tPmRzdF9pbmRleCA9IG8tPnJlc3VsdDsKKworZG9uZToKKwlmcmVlX2V4Y2x1ZGVzKCZlbCk7CisJaWYgKG8tPnBhdGhfZXhjbHVkZV9jaGVjaykgeworCQlwYXRoX2V4Y2x1ZGVfY2hlY2tfY2xlYXIoby0+cGF0aF9leGNsdWRlX2NoZWNrKTsKKwkJZnJlZShvLT5wYXRoX2V4Y2x1ZGVfY2hlY2spOworCX0KKwlyZXR1cm4gcmV0OworCityZXR1cm5fZmFpbGVkOgorCWlmIChvLT5zaG93X2FsbF9lcnJvcnMpCisJCWRpc3BsYXlfZXJyb3JfbXNncyhvKTsKKwltYXJrX2FsbF9jZV91bnVzZWQoby0+c3JjX2luZGV4KTsKKwlyZXQgPSB1bnBhY2tfZmFpbGVkKG8sIE5VTEwpOworCWlmIChvLT5leGl0aW5nX2Vhcmx5KQorCQlyZXQgPSAwOworCWdvdG8gZG9uZTsKK30KKworLyogSGVyZSBjb21lIHRoZSBtZXJnZSBmdW5jdGlvbnMgKi8KKworc3RhdGljIGludCByZWplY3RfbWVyZ2Uoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXJldHVybiBhZGRfcmVqZWN0ZWRfcGF0aChvLCBFUlJPUl9XT1VMRF9PVkVSV1JJVEUsIGNlLT5uYW1lKTsKK30KKworc3RhdGljIGludCBzYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqYSwgc3RydWN0IGNhY2hlX2VudHJ5ICpiKQoreworCWlmICghIWEgIT0gISFiKQorCQlyZXR1cm4gMDsKKwlpZiAoIWEgJiYgIWIpCisJCXJldHVybiAxOworCWlmICgoYS0+Y2VfZmxhZ3MgfCBiLT5jZV9mbGFncykgJiBDRV9DT05GTElDVEVEKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYS0+Y2VfbW9kZSA9PSBiLT5jZV9tb2RlICYmCisJICAgICAgICFoYXNoY21wKGEtPnNoYTEsIGItPnNoYTEpOworfQorCisKKy8qCisgKiBXaGVuIGEgQ0UgZ2V0cyB0dXJuZWQgaW50byBhbiB1bm1lcmdlZCBlbnRyeSwgd2UKKyAqIHdhbnQgaXQgdG8gYmUgdXAtdG8tZGF0ZQorICovCitzdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZV8xKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLAorCQkJCSAgIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIGVycm9yX3R5cGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoby0+aW5kZXhfb25seSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIENFX1ZBTElEIGFuZCBDRV9TS0lQX1dPUktUUkVFIGNoZWF0LCB3ZSBiZXR0ZXIgY2hlY2sgYWdhaW4KKwkgKiBpZiB0aGlzIGVudHJ5IGlzIHRydWx5IHVwLXRvLWRhdGUgYmVjYXVzZSB0aGlzIGZpbGUgbWF5IGJlCisJICogb3ZlcndyaXR0ZW4uCisJICovCisJaWYgKChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkgfHwgY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCTsgLyoga2VlcCBjaGVja2luZyAqLworCWVsc2UgaWYgKG8tPnJlc2V0IHx8IGNlX3VwdG9kYXRlKGNlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWxzdGF0KGNlLT5uYW1lLCAmc3QpKSB7CisJCWludCBmbGFncyA9IENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRTsKKwkJdW5zaWduZWQgY2hhbmdlZCA9IGllX21hdGNoX3N0YXQoby0+c3JjX2luZGV4LCBjZSwgJnN0LCBmbGFncyk7CisJCWlmICghY2hhbmdlZCkKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBORUVEU1dPUks6IHRoZSBjdXJyZW50IGRlZmF1bHQgcG9saWN5IGlzIHRvIGFsbG93CisJCSAqIHN1Ym1vZHVsZSB0byBiZSBvdXQgb2Ygc3luYyB3cnQgdGhlIHN1cGVycHJvamVjdAorCQkgKiBpbmRleC4gIFRoaXMgbmVlZHMgdG8gYmUgdGlnaHRlbmVkIGxhdGVyIGZvcgorCQkgKiBzdWJtb2R1bGVzIHRoYXQgYXJlIG1hcmtlZCB0byBiZSBhdXRvbWF0aWNhbGx5CisJCSAqIGNoZWNrZWQgb3V0LgorCQkgKi8KKwkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCXJldHVybiAwOworCQllcnJubyA9IDA7CisJfQorCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCXJldHVybiAwOworCXJldHVybiBvLT5nZW50bHkgPyAtMSA6CisJCWFkZF9yZWplY3RlZF9wYXRoKG8sIGVycm9yX3R5cGUsIGNlLT5uYW1lKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGUoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ICYmIChjZS0+Y2VfZmxhZ3MgJiBDRV9ORVdfU0tJUF9XT1JLVFJFRSkpCisJCXJldHVybiAwOworCXJldHVybiB2ZXJpZnlfdXB0b2RhdGVfMShjZSwgbywgRVJST1JfTk9UX1VQVE9EQVRFX0ZJTEUpOworfQorCitzdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZV9zcGFyc2Uoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlyZXR1cm4gdmVyaWZ5X3VwdG9kYXRlXzEoY2UsIG8sIEVSUk9SX1NQQVJTRV9OT1RfVVBUT0RBVEVfRklMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfY2VfcGF0aChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaWYgKGNlKQorCQljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChvLT5zcmNfaW5kZXgtPmNhY2hlX3RyZWUsIGNlLT5uYW1lKTsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgY2hlY2tpbmcgb3V0IGNlLT5zaGExIGluIHN1YmRpciBjZS0+bmFtZSBpcyBub3QKKyAqIGdvaW5nIHRvIG92ZXJ3cml0ZSBhbnkgd29ya2luZyBmaWxlcy4KKyAqCisgKiBDdXJyZW50bHksIGdpdCBkb2VzIG5vdCBjaGVja291dCBzdWJwcm9qZWN0cyBkdXJpbmcgYSBzdXBlcnByb2plY3QKKyAqIGNoZWNrb3V0LCBzbyBpdCBpcyBub3QgZ29pbmcgdG8gb3ZlcndyaXRlIGFueXRoaW5nLgorICovCitzdGF0aWMgaW50IHZlcmlmeV9jbGVhbl9zdWJtb2R1bGUoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgICAgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJCSAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfY2xlYW5fc3ViZGlyZWN0b3J5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICAgICAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKKwkJCQkgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJLyoKKwkgKiB3ZSBhcmUgYWJvdXQgdG8gZXh0cmFjdCAiY2UtPm5hbWUiOyB3ZSB3b3VsZCBub3Qgd2FudCB0byBsb3NlCisJICogYW55dGhpbmcgaW4gdGhlIGV4aXN0aW5nIGRpcmVjdG9yeSB0aGVyZS4KKwkgKi8KKwlpbnQgbmFtZWxlbjsKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkOworCWNoYXIgKnBhdGhidWY7CisJaW50IGNudCA9IDA7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgJiYKKwkgICAgcmVzb2x2ZV9naXRsaW5rX3JlZihjZS0+bmFtZSwgIkhFQUQiLCBzaGExKSA9PSAwKSB7CisJCS8qIElmIHdlIGFyZSBub3QgZ29pbmcgdG8gdXBkYXRlIHRoZSBzdWJtb2R1bGUsIHRoZW4KKwkJICogd2UgZG9uJ3QgY2FyZS4KKwkJICovCisJCWlmICghaGFzaGNtcChzaGExLCBjZS0+c2hhMSkpCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHZlcmlmeV9jbGVhbl9zdWJtb2R1bGUoY2UsIGVycm9yX3R5cGUsIG8pOworCX0KKworCS8qCisJICogRmlyc3QgbGV0J3MgbWFrZSBzdXJlIHdlIGRvIG5vdCBoYXZlIGEgbG9jYWwgbW9kaWZpY2F0aW9uCisJICogaW4gdGhhdCBkaXJlY3RvcnkuCisJICovCisJbmFtZWxlbiA9IGNlX25hbWVsZW4oY2UpOworCWZvciAoaSA9IGxvY2F0ZV9pbl9zcmNfaW5kZXgoY2UsIG8pOworCSAgICAgaSA8IG8tPnNyY19pbmRleC0+Y2FjaGVfbnI7CisJICAgICBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTIgPSBvLT5zcmNfaW5kZXgtPmNhY2hlW2ldOworCQlpbnQgbGVuID0gY2VfbmFtZWxlbihjZTIpOworCQlpZiAobGVuIDwgbmFtZWxlbiB8fAorCQkgICAgc3RybmNtcChjZS0+bmFtZSwgY2UyLT5uYW1lLCBuYW1lbGVuKSB8fAorCQkgICAgY2UyLT5uYW1lW25hbWVsZW5dICE9ICcvJykKKwkJCWJyZWFrOworCQkvKgorCQkgKiBjZTItPm5hbWUgaXMgYW4gZW50cnkgaW4gdGhlIHN1YmRpcmVjdG9yeSB0byBiZQorCQkgKiByZW1vdmVkLgorCQkgKi8KKwkJaWYgKCFjZV9zdGFnZShjZTIpKSB7CisJCQlpZiAodmVyaWZ5X3VwdG9kYXRlKGNlMiwgbykpCisJCQkJcmV0dXJuIC0xOworCQkJYWRkX2VudHJ5KG8sIGNlMiwgQ0VfUkVNT1ZFLCAwKTsKKwkJCW1hcmtfY2VfdXNlZChjZTIsIG8pOworCQl9CisJCWNudCsrOworCX0KKworCS8qCisJICogVGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdCBsb3NlIGEgbG9jYWxseQorCSAqIHByZXNlbnQgZmlsZSB0aGF0IGlzIG5vdCBpZ25vcmVkLgorCSAqLworCXBhdGhidWYgPSB4bWFsbG9jKG5hbWVsZW4gKyAyKTsKKwltZW1jcHkocGF0aGJ1ZiwgY2UtPm5hbWUsIG5hbWVsZW4pOworCXN0cmNweShwYXRoYnVmK25hbWVsZW4sICIvIik7CisKKwltZW1zZXQoJmQsIDAsIHNpemVvZihkKSk7CisJaWYgKG8tPmRpcikKKwkJZC5leGNsdWRlX3Blcl9kaXIgPSBvLT5kaXItPmV4Y2x1ZGVfcGVyX2RpcjsKKwlpID0gcmVhZF9kaXJlY3RvcnkoJmQsIHBhdGhidWYsIG5hbWVsZW4rMSwgTlVMTCk7CisJaWYgKGkpCisJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6CisJCQlhZGRfcmVqZWN0ZWRfcGF0aChvLCBFUlJPUl9OT1RfVVBUT0RBVEVfRElSLCBjZS0+bmFtZSk7CisJZnJlZShwYXRoYnVmKTsKKwlyZXR1cm4gY250OworfQorCisvKgorICogVGhpcyBnZXRzIGNhbGxlZCB3aGVuIHRoZXJlIHdhcyBubyBpbmRleCBlbnRyeSBmb3IgdGhlIHRyZWUgZW50cnkgJ2RzdCcsCisgKiBidXQgd2UgZm91bmQgYSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCAnbHN0YXQoKScgc2FpZCB3YXMgZmluZSwKKyAqIGFuZCB3ZSdyZSBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbS4KKyAqCisgKiBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGluIHRoZSBpbmRleCB0aGF0IGFsc28KKyAqIG1hdGNoZXMgdGhlIHN0YXQgaW5mb3JtYXRpb24sIGFuZCBhc3N1bWUgaXQncyB0aGF0IG90aGVyIGZpbGUhCisgKi8KK3N0YXRpYyBpbnQgaWNhc2VfZXhpc3RzKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgc3RydWN0IHN0YXQgKnN0KQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjOworCisJc3JjID0gaW5kZXhfbmFtZV9leGlzdHMoby0+c3JjX2luZGV4LCBuYW1lLCBsZW4sIDEpOworCXJldHVybiBzcmMgJiYgIWllX21hdGNoX3N0YXQoby0+c3JjX2luZGV4LCBzcmMsIHN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUpOworfQorCitzdGF0aWMgaW50IGNoZWNrX29rX3RvX3JlbW92ZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgZHR5cGUsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJCQkgICAgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqcmVzdWx0OworCisJLyoKKwkgKiBJdCBtYXkgYmUgdGhhdCB0aGUgJ2xzdGF0KCknIHN1Y2NlZWRlZCBldmVuIHRob3VnaAorCSAqIHRhcmdldCAnY2UnIHdhcyBhYnNlbnQsIGJlY2F1c2UgdGhlcmUgaXMgYW4gb2xkCisJICogZW50cnkgdGhhdCBpcyBkaWZmZXJlbnQgb25seSBpbiBjYXNlLi4KKwkgKgorCSAqIElnbm9yZSB0aGF0IGxzdGF0KCkgaWYgaXQgbWF0Y2hlcy4KKwkgKi8KKwlpZiAoaWdub3JlX2Nhc2UgJiYgaWNhc2VfZXhpc3RzKG8sIG5hbWUsIGxlbiwgc3QpKQorCQlyZXR1cm4gMDsKKworCWlmIChvLT5kaXIgJiYKKwkgICAgcGF0aF9leGNsdWRlZChvLT5wYXRoX2V4Y2x1ZGVfY2hlY2ssIG5hbWUsIC0xLCAmZHR5cGUpKQorCQkvKgorCQkgKiBjZS0+bmFtZSBpcyBleHBsaWNpdGx5IGV4Y2x1ZGVkLCBzbyBpdCBpcyBPayB0bworCQkgKiBvdmVyd3JpdGUgaXQuCisJCSAqLworCQlyZXR1cm4gMDsKKwlpZiAoU19JU0RJUihzdC0+c3RfbW9kZSkpIHsKKwkJLyoKKwkJICogV2UgYXJlIGNoZWNraW5nIG91dCBwYXRoICJmb28iIGFuZAorCQkgKiBmb3VuZCAiZm9vLy4iIGluIHRoZSB3b3JraW5nIHRyZWUuCisJCSAqIFRoaXMgaXMgdHJpY2t5IC0tIGlmIHdlIGhhdmUgbW9kaWZpZWQKKwkJICogZmlsZXMgdGhhdCBhcmUgaW4gImZvby8iIHdlIHdvdWxkIGxvc2UKKwkJICogdGhlbS4KKwkJICovCisJCWlmICh2ZXJpZnlfY2xlYW5fc3ViZGlyZWN0b3J5KGNlLCBlcnJvcl90eXBlLCBvKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogVGhlIHByZXZpb3VzIHJvdW5kIG1heSBhbHJlYWR5IGhhdmUgZGVjaWRlZCB0bworCSAqIGRlbGV0ZSB0aGlzIHBhdGgsIHdoaWNoIGlzIGluIGEgc3ViZGlyZWN0b3J5IHRoYXQKKwkgKiBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGEgYmxvYi4KKwkgKi8KKwlyZXN1bHQgPSBpbmRleF9uYW1lX2V4aXN0cygmby0+cmVzdWx0LCBuYW1lLCBsZW4sIDApOworCWlmIChyZXN1bHQpIHsKKwkJaWYgKHJlc3VsdC0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgorCQlhZGRfcmVqZWN0ZWRfcGF0aChvLCBlcnJvcl90eXBlLCBuYW1lKTsKK30KKworLyoKKyAqIFdlIGRvIG5vdCB3YW50IHRvIHJlbW92ZSBvciBvdmVyd3JpdGUgYSB3b3JraW5nIHRyZWUgZmlsZSB0aGF0CisgKiBpcyBub3QgdHJhY2tlZCwgdW5sZXNzIGl0IGlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudF8xKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIGVycm9yX3R5cGUsCisJCQkJIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKG8tPmluZGV4X29ubHkgfHwgby0+cmVzZXQgfHwgIW8tPnVwZGF0ZSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBjaGVja19sZWFkaW5nX3BhdGgoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAobGVuID4gMCkgeworCQljaGFyIHBhdGhbUEFUSF9NQVggKyAxXTsKKwkJbWVtY3B5KHBhdGgsIGNlLT5uYW1lLCBsZW4pOworCQlwYXRoW2xlbl0gPSAwOworCQlpZiAobHN0YXQocGF0aCwgJnN0KSkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IHN0YXQgJyVzJzogJXMiLCBwYXRoLAorCQkJCQlzdHJlcnJvcihlcnJubykpOworCisJCXJldHVybiBjaGVja19va190b19yZW1vdmUocGF0aCwgbGVuLCBEVF9VTktOT1dOLCBOVUxMLCAmc3QsCisJCQkJZXJyb3JfdHlwZSwgbyk7CisJfSBlbHNlIGlmIChsc3RhdChjZS0+bmFtZSwgJnN0KSkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJcmV0dXJuIGVycm9yKCJjYW5ub3Qgc3RhdCAnJXMnOiAlcyIsIGNlLT5uYW1lLAorCQkJCSAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGNoZWNrX29rX3RvX3JlbW92ZShjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksCisJCQkJCSAgY2VfdG9fZHR5cGUoY2UpLCBjZSwgJnN0LAorCQkJCQkgIGVycm9yX3R5cGUsIG8pOworCX0KK30KKworc3RhdGljIGludCB2ZXJpZnlfYWJzZW50KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKKwkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaWYgKCFvLT5za2lwX3NwYXJzZV9jaGVja291dCAmJiAoY2UtPmNlX2ZsYWdzICYgQ0VfTkVXX1NLSVBfV09SS1RSRUUpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdmVyaWZ5X2Fic2VudF8xKGNlLCBlcnJvcl90eXBlLCBvKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfYWJzZW50X3NwYXJzZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIGVycm9yX3R5cGUsCisJCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIG9ycGhhbmVkX2Vycm9yID0gZXJyb3JfdHlwZTsKKwlpZiAob3JwaGFuZWRfZXJyb3IgPT0gRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfT1ZFUldSSVRURU4pCisJCW9ycGhhbmVkX2Vycm9yID0gRVJST1JfV09VTERfTE9TRV9PUlBIQU5FRF9PVkVSV1JJVFRFTjsKKworCXJldHVybiB2ZXJpZnlfYWJzZW50XzEoY2UsIG9ycGhhbmVkX2Vycm9yLCBvKTsKK30KKworc3RhdGljIGludCBtZXJnZWRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICptZXJnZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpbnQgdXBkYXRlID0gQ0VfVVBEQVRFOworCisJaWYgKCFvbGQpIHsKKwkJLyoKKwkJICogTmV3IGluZGV4IGVudHJpZXMuIEluIHNwYXJzZSBjaGVja291dCwgdGhlIGZvbGxvd2luZworCQkgKiB2ZXJpZnlfYWJzZW50KCkgd2lsbCBiZSBkZWxheWVkIHVudGlsIGFmdGVyCisJCSAqIHRyYXZlcnNlX3RyZWVzKCkgZmluaXNoZXMgaW4gdW5wYWNrX3RyZWVzKCksIHRoZW46CisJCSAqCisJCSAqICAtIENFX05FV19TS0lQX1dPUktUUkVFIHdpbGwgYmUgY29tcHV0ZWQgY29ycmVjdGx5CisJCSAqICAtIHZlcmlmeV9hYnNlbnQoKSBiZSBjYWxsZWQgYWdhaW4sIHRoaXMgdGltZSB3aXRoCisJCSAqICAgIGNvcnJlY3QgQ0VfTkVXX1NLSVBfV09SS1RSRUUKKwkJICoKKwkJICogdmVyaWZ5X2Fic2VudCgpIGNhbGwgaGVyZSBkb2VzIG5vdGhpbmcgaW4gc3BhcnNlCisJCSAqIGNoZWNrb3V0IChpLmUuIG8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ID09IDApCisJCSAqLworCQl1cGRhdGUgfD0gQ0VfQURERUQ7CisJCW1lcmdlLT5jZV9mbGFncyB8PSBDRV9ORVdfU0tJUF9XT1JLVFJFRTsKKworCQlpZiAodmVyaWZ5X2Fic2VudChtZXJnZSwgRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfT1ZFUldSSVRURU4sIG8pKQorCQkJcmV0dXJuIC0xOworCQlpbnZhbGlkYXRlX2NlX3BhdGgobWVyZ2UsIG8pOworCX0gZWxzZSBpZiAoIShvbGQtPmNlX2ZsYWdzICYgQ0VfQ09ORkxJQ1RFRCkpIHsKKwkJLyoKKwkJICogU2VlIGlmIHdlIGNhbiByZS11c2UgdGhlIG9sZCBDRSBkaXJlY3RseT8KKwkJICogVGhhdCB3YXkgd2UgZ2V0IHRoZSB1cHRvZGF0ZSBzdGF0IGluZm8uCisJCSAqCisJCSAqIFRoaXMgYWxzbyByZW1vdmVzIHRoZSBVUERBVEUgZmxhZyBvbiBhIG1hdGNoOyBvdGhlcndpc2UKKwkJICogd2Ugd2lsbCBlbmQgdXAgb3ZlcndyaXRpbmcgbG9jYWwgY2hhbmdlcyBpbiB0aGUgd29yayB0cmVlLgorCQkgKi8KKwkJaWYgKHNhbWUob2xkLCBtZXJnZSkpIHsKKwkJCWNvcHlfY2FjaGVfZW50cnkobWVyZ2UsIG9sZCk7CisJCQl1cGRhdGUgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKHZlcmlmeV91cHRvZGF0ZShvbGQsIG8pKQorCQkJCXJldHVybiAtMTsKKwkJCS8qIE1pZ3JhdGUgb2xkIGZsYWdzIG92ZXIgKi8KKwkJCXVwZGF0ZSB8PSBvbGQtPmNlX2ZsYWdzICYgKENFX1NLSVBfV09SS1RSRUUgfCBDRV9ORVdfU0tJUF9XT1JLVFJFRSk7CisJCQlpbnZhbGlkYXRlX2NlX3BhdGgob2xkLCBvKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFByZXZpb3VzbHkgdW5tZXJnZWQgZW50cnkgbGVmdCBhcyBhbiBleGlzdGVuY2UKKwkJICogbWFya2VyIGJ5IHJlYWRfaW5kZXhfdW5tZXJnZWQoKTsKKwkJICovCisJCWludmFsaWRhdGVfY2VfcGF0aChvbGQsIG8pOworCX0KKworCWFkZF9lbnRyeShvLCBtZXJnZSwgdXBkYXRlLCBDRV9TVEFHRU1BU0spOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRlbGV0ZWRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwkvKiBEaWQgaXQgZXhpc3QgaW4gdGhlIGluZGV4PyAqLworCWlmICghb2xkKSB7CisJCWlmICh2ZXJpZnlfYWJzZW50KGNlLCBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9SRU1PVkVELCBvKSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghKG9sZC0+Y2VfZmxhZ3MgJiBDRV9DT05GTElDVEVEKSAmJiB2ZXJpZnlfdXB0b2RhdGUob2xkLCBvKSkKKwkJcmV0dXJuIC0xOworCWFkZF9lbnRyeShvLCBjZSwgQ0VfUkVNT1ZFLCAwKTsKKwlpbnZhbGlkYXRlX2NlX3BhdGgoY2UsIG8pOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGtlZXBfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWFkZF9lbnRyeShvLCBjZSwgMCwgMCk7CisJcmV0dXJuIDE7Cit9CisKKyNpZiBEQlJUX0RFQlVHCitzdGF0aWMgdm9pZCBzaG93X3N0YWdlX2VudHJ5KEZJTEUgKm8sCisJCQkgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWlmICghY2UpCisJCWZwcmludGYobywgIiVzIChtaXNzaW5nKVxuIiwgbGFiZWwpOworCWVsc2UKKwkJZnByaW50ZihvLCAiJXMlMDZvICVzICVkXHQlc1xuIiwKKwkJCWxhYmVsLAorCQkJY2UtPmNlX21vZGUsCisJCQlzaGExX3RvX2hleChjZS0+c2hhMSksCisJCQljZV9zdGFnZShjZSksCisJCQljZS0+bmFtZSk7Cit9CisjZW5kaWYKKworaW50IHRocmVld2F5X21lcmdlKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnN0YWdlcywgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqaW5kZXg7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpoZWFkOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqcmVtb3RlID0gc3RhZ2VzW28tPmhlYWRfaWR4ICsgMV07CisJaW50IGNvdW50OworCWludCBoZWFkX21hdGNoID0gMDsKKwlpbnQgcmVtb3RlX21hdGNoID0gMDsKKworCWludCBkZl9jb25mbGljdF9oZWFkID0gMDsKKwlpbnQgZGZfY29uZmxpY3RfcmVtb3RlID0gMDsKKworCWludCBhbnlfYW5jX21pc3NpbmcgPSAwOworCWludCBub19hbmNfZXhpc3RzID0gMTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBvLT5oZWFkX2lkeDsgaSsrKSB7CisJCWlmICghc3RhZ2VzW2ldIHx8IHN0YWdlc1tpXSA9PSBvLT5kZl9jb25mbGljdF9lbnRyeSkKKwkJCWFueV9hbmNfbWlzc2luZyA9IDE7CisJCWVsc2UKKwkJCW5vX2FuY19leGlzdHMgPSAwOworCX0KKworCWluZGV4ID0gc3RhZ2VzWzBdOworCWhlYWQgPSBzdGFnZXNbby0+aGVhZF9pZHhdOworCisJaWYgKGhlYWQgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpIHsKKwkJZGZfY29uZmxpY3RfaGVhZCA9IDE7CisJCWhlYWQgPSBOVUxMOworCX0KKworCWlmIChyZW1vdGUgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpIHsKKwkJZGZfY29uZmxpY3RfcmVtb3RlID0gMTsKKwkJcmVtb3RlID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIEZpcnN0LCBpZiB0aGVyZSdzIGEgIzE2IHNpdHVhdGlvbiwgbm90ZSB0aGF0IHRvIHByZXZlbnQgIzEzCisJICogYW5kICMxNC4KKwkgKi8KKwlpZiAoIXNhbWUocmVtb3RlLCBoZWFkKSkgeworCQlmb3IgKGkgPSAxOyBpIDwgby0+aGVhZF9pZHg7IGkrKykgeworCQkJaWYgKHNhbWUoc3RhZ2VzW2ldLCBoZWFkKSkgeworCQkJCWhlYWRfbWF0Y2ggPSBpOworCQkJfQorCQkJaWYgKHNhbWUoc3RhZ2VzW2ldLCByZW1vdGUpKSB7CisJCQkJcmVtb3RlX21hdGNoID0gaTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogV2Ugc3RhcnQgd2l0aCBjYXNlcyB3aGVyZSB0aGUgaW5kZXggaXMgYWxsb3dlZCB0byBtYXRjaAorCSAqIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBoZWFkOiAjMTQoQUxUKSBhbmQgIzJBTFQsIHdoZXJlIGl0CisJICogaXMgcGVybWl0dGVkIHRvIG1hdGNoIHRoZSByZXN1bHQgaW5zdGVhZC4KKwkgKi8KKwkvKiAjMTQsICMxNEFMVCwgIzJBTFQgKi8KKwlpZiAocmVtb3RlICYmICFkZl9jb25mbGljdF9oZWFkICYmIGhlYWRfbWF0Y2ggJiYgIXJlbW90ZV9tYXRjaCkgeworCQlpZiAoaW5kZXggJiYgIXNhbWUoaW5kZXgsIHJlbW90ZSkgJiYgIXNhbWUoaW5kZXgsIGhlYWQpKQorCQkJcmV0dXJuIG8tPmdlbnRseSA/IC0xIDogcmVqZWN0X21lcmdlKGluZGV4LCBvKTsKKwkJcmV0dXJuIG1lcmdlZF9lbnRyeShyZW1vdGUsIGluZGV4LCBvKTsKKwl9CisJLyoKKwkgKiBJZiB3ZSBoYXZlIGFuIGVudHJ5IGluIHRoZSBpbmRleCBjYWNoZSwgdGhlbiB3ZSB3YW50IHRvCisJICogbWFrZSBzdXJlIHRoYXQgaXQgbWF0Y2hlcyBoZWFkLgorCSAqLworCWlmIChpbmRleCAmJiAhc2FtZShpbmRleCwgaGVhZCkpCisJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6IHJlamVjdF9tZXJnZShpbmRleCwgbyk7CisKKwlpZiAoaGVhZCkgeworCQkvKiAjNUFMVCwgIzE1ICovCisJCWlmIChzYW1lKGhlYWQsIHJlbW90ZSkpCisJCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KGhlYWQsIGluZGV4LCBvKTsKKwkJLyogIzEzLCAjM0FMVCAqLworCQlpZiAoIWRmX2NvbmZsaWN0X3JlbW90ZSAmJiByZW1vdGVfbWF0Y2ggJiYgIWhlYWRfbWF0Y2gpCisJCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KGhlYWQsIGluZGV4LCBvKTsKKwl9CisKKwkvKiAjMSAqLworCWlmICghaGVhZCAmJiAhcmVtb3RlICYmIGFueV9hbmNfbWlzc2luZykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFVuZGVyIHRoZSAiYWdncmVzc2l2ZSIgcnVsZSwgd2UgcmVzb2x2ZSBtb3N0bHkgdHJpdmlhbAorCSAqIGNhc2VzIHRoYXQgd2UgaGlzdG9yaWNhbGx5IGhhZCBnaXQtbWVyZ2Utb25lLWZpbGUgcmVzb2x2ZS4KKwkgKi8KKwlpZiAoby0+YWdncmVzc2l2ZSkgeworCQlpbnQgaGVhZF9kZWxldGVkID0gIWhlYWQ7CisJCWludCByZW1vdGVfZGVsZXRlZCA9ICFyZW1vdGU7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBOVUxMOworCisJCWlmIChpbmRleCkKKwkJCWNlID0gaW5kZXg7CisJCWVsc2UgaWYgKGhlYWQpCisJCQljZSA9IGhlYWQ7CisJCWVsc2UgaWYgKHJlbW90ZSkKKwkJCWNlID0gcmVtb3RlOworCQllbHNlIHsKKwkJCWZvciAoaSA9IDE7IGkgPCBvLT5oZWFkX2lkeDsgaSsrKSB7CisJCQkJaWYgKHN0YWdlc1tpXSAmJiBzdGFnZXNbaV0gIT0gby0+ZGZfY29uZmxpY3RfZW50cnkpIHsKKwkJCQkJY2UgPSBzdGFnZXNbaV07CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIERlbGV0ZWQgaW4gYm90aC4KKwkJICogRGVsZXRlZCBpbiBvbmUgYW5kIHVuY2hhbmdlZCBpbiB0aGUgb3RoZXIuCisJCSAqLworCQlpZiAoKGhlYWRfZGVsZXRlZCAmJiByZW1vdGVfZGVsZXRlZCkgfHwKKwkJICAgIChoZWFkX2RlbGV0ZWQgJiYgcmVtb3RlICYmIHJlbW90ZV9tYXRjaCkgfHwKKwkJICAgIChyZW1vdGVfZGVsZXRlZCAmJiBoZWFkICYmIGhlYWRfbWF0Y2gpKSB7CisJCQlpZiAoaW5kZXgpCisJCQkJcmV0dXJuIGRlbGV0ZWRfZW50cnkoaW5kZXgsIGluZGV4LCBvKTsKKwkJCWlmIChjZSAmJiAhaGVhZF9kZWxldGVkKSB7CisJCQkJaWYgKHZlcmlmeV9hYnNlbnQoY2UsIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX1JFTU9WRUQsIG8pKQorCQkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvKgorCQkgKiBBZGRlZCBpbiBib3RoLCBpZGVudGljYWxseS4KKwkJICovCisJCWlmIChub19hbmNfZXhpc3RzICYmIGhlYWQgJiYgcmVtb3RlICYmIHNhbWUoaGVhZCwgcmVtb3RlKSkKKwkJCXJldHVybiBtZXJnZWRfZW50cnkoaGVhZCwgaW5kZXgsIG8pOworCisJfQorCisJLyogQmVsb3cgYXJlICJubyBtZXJnZSIgY2FzZXMsIHdoaWNoIHJlcXVpcmUgdGhhdCB0aGUgaW5kZXggYmUKKwkgKiB1cC10by1kYXRlIHRvIGF2b2lkIHRoZSBmaWxlcyBnZXR0aW5nIG92ZXJ3cml0dGVuIHdpdGgKKwkgKiBjb25mbGljdCByZXNvbHV0aW9uIGZpbGVzLgorCSAqLworCWlmIChpbmRleCkgeworCQlpZiAodmVyaWZ5X3VwdG9kYXRlKGluZGV4LCBvKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlvLT5ub250cml2aWFsX21lcmdlID0gMTsKKworCS8qICMyLCAjMywgIzQsICM2LCAjNywgIzksICMxMCwgIzExLiAqLworCWNvdW50ID0gMDsKKwlpZiAoIWhlYWRfbWF0Y2ggfHwgIXJlbW90ZV9tYXRjaCkgeworCQlmb3IgKGkgPSAxOyBpIDwgby0+aGVhZF9pZHg7IGkrKykgeworCQkJaWYgKHN0YWdlc1tpXSAmJiBzdGFnZXNbaV0gIT0gby0+ZGZfY29uZmxpY3RfZW50cnkpIHsKKwkJCQlrZWVwX2VudHJ5KHN0YWdlc1tpXSwgbyk7CisJCQkJY291bnQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKyNpZiBEQlJUX0RFQlVHCisJZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAicmVhZC10cmVlOiB3YXJuaW5nICMxNiBkZXRlY3RlZFxuIik7CisJCXNob3dfc3RhZ2VfZW50cnkoc3RkZXJyLCAiaGVhZCAgICIsIHN0YWdlc1toZWFkX21hdGNoXSk7CisJCXNob3dfc3RhZ2VfZW50cnkoc3RkZXJyLCAicmVtb3RlICIsIHN0YWdlc1tyZW1vdGVfbWF0Y2hdKTsKKwl9CisjZW5kaWYKKwlpZiAoaGVhZCkgeyBjb3VudCArPSBrZWVwX2VudHJ5KGhlYWQsIG8pOyB9CisJaWYgKHJlbW90ZSkgeyBjb3VudCArPSBrZWVwX2VudHJ5KHJlbW90ZSwgbyk7IH0KKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBUd28td2F5IG1lcmdlLgorICoKKyAqIFRoZSBydWxlIGlzIHRvICJjYXJyeSBmb3J3YXJkIiB3aGF0IGlzIGluIHRoZSBpbmRleCB3aXRob3V0IGxvc2luZworICogaW5mb3JtYXRpb24gYWNyb3NzIGEgImZhc3QtZm9yd2FyZCIsIGZhdm9yaW5nIGEgc3VjY2Vzc2Z1bCBtZXJnZQorICogb3ZlciBhIG1lcmdlIGZhaWx1cmUgd2hlbiBpdCBtYWtlcyBzZW5zZS4gIEZvciBkZXRhaWxzIG9mIHRoZQorICogImNhcnJ5IGZvcndhcmQiIHJ1bGUsIHBsZWFzZSBzZWUgPERvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQ+LgorICoKKyAqLworaW50IHR3b3dheV9tZXJnZShzdHJ1Y3QgY2FjaGVfZW50cnkgKipzcmMsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmN1cnJlbnQgPSBzcmNbMF07CisJc3RydWN0IGNhY2hlX2VudHJ5ICpvbGR0cmVlID0gc3JjWzFdOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmV3dHJlZSA9IHNyY1syXTsKKworCWlmIChvLT5tZXJnZV9zaXplICE9IDIpCisJCXJldHVybiBlcnJvcigiQ2Fubm90IGRvIGEgdHdvd2F5IG1lcmdlIG9mICVkIHRyZWVzIiwKKwkJCSAgICAgby0+bWVyZ2Vfc2l6ZSk7CisKKwlpZiAob2xkdHJlZSA9PSBvLT5kZl9jb25mbGljdF9lbnRyeSkKKwkJb2xkdHJlZSA9IE5VTEw7CisJaWYgKG5ld3RyZWUgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCW5ld3RyZWUgPSBOVUxMOworCisJaWYgKGN1cnJlbnQpIHsKKwkJaWYgKCghb2xkdHJlZSAmJiAhbmV3dHJlZSkgfHwgLyogNCBhbmQgNSAqLworCQkgICAgKCFvbGR0cmVlICYmIG5ld3RyZWUgJiYKKwkJICAgICBzYW1lKGN1cnJlbnQsIG5ld3RyZWUpKSB8fCAvKiA2IGFuZCA3ICovCisJCSAgICAob2xkdHJlZSAmJiBuZXd0cmVlICYmCisJCSAgICAgc2FtZShvbGR0cmVlLCBuZXd0cmVlKSkgfHwgLyogMTQgYW5kIDE1ICovCisJCSAgICAob2xkdHJlZSAmJiBuZXd0cmVlICYmCisJCSAgICAgIXNhbWUob2xkdHJlZSwgbmV3dHJlZSkgJiYgLyogMTggYW5kIDE5ICovCisJCSAgICAgc2FtZShjdXJyZW50LCBuZXd0cmVlKSkpIHsKKwkJCXJldHVybiBrZWVwX2VudHJ5KGN1cnJlbnQsIG8pOworCQl9CisJCWVsc2UgaWYgKG9sZHRyZWUgJiYgIW5ld3RyZWUgJiYgc2FtZShjdXJyZW50LCBvbGR0cmVlKSkgeworCQkJLyogMTAgb3IgMTEgKi8KKwkJCXJldHVybiBkZWxldGVkX2VudHJ5KG9sZHRyZWUsIGN1cnJlbnQsIG8pOworCQl9CisJCWVsc2UgaWYgKG9sZHRyZWUgJiYgbmV3dHJlZSAmJgorCQkJIHNhbWUoY3VycmVudCwgb2xkdHJlZSkgJiYgIXNhbWUoY3VycmVudCwgbmV3dHJlZSkpIHsKKwkJCS8qIDIwIG9yIDIxICovCisJCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KG5ld3RyZWUsIGN1cnJlbnQsIG8pOworCQl9CisJCWVsc2UgeworCQkJLyogYWxsIG90aGVyIGZhaWx1cmVzICovCisJCQlpZiAob2xkdHJlZSkKKwkJCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOiByZWplY3RfbWVyZ2Uob2xkdHJlZSwgbyk7CisJCQlpZiAoY3VycmVudCkKKwkJCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOiByZWplY3RfbWVyZ2UoY3VycmVudCwgbyk7CisJCQlpZiAobmV3dHJlZSkKKwkJCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOiByZWplY3RfbWVyZ2UobmV3dHJlZSwgbyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJZWxzZSBpZiAobmV3dHJlZSkgeworCQlpZiAob2xkdHJlZSAmJiAhby0+aW5pdGlhbF9jaGVja291dCkgeworCQkJLyoKKwkJCSAqIGRlbGV0aW9uIG9mIHRoZSBwYXRoIHdhcyBzdGFnZWQ7CisJCQkgKi8KKwkJCWlmIChzYW1lKG9sZHRyZWUsIG5ld3RyZWUpKQorCQkJCXJldHVybiAxOworCQkJcmV0dXJuIHJlamVjdF9tZXJnZShvbGR0cmVlLCBvKTsKKwkJfQorCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KG5ld3RyZWUsIGN1cnJlbnQsIG8pOworCX0KKwlyZXR1cm4gZGVsZXRlZF9lbnRyeShvbGR0cmVlLCBjdXJyZW50LCBvKTsKK30KKworLyoKKyAqIEJpbmQgbWVyZ2UuCisgKgorICogS2VlcCB0aGUgaW5kZXggZW50cmllcyBhdCBzdGFnZTAsIGNvbGxhcHNlIHN0YWdlMSBidXQgbWFrZSBzdXJlCisgKiBzdGFnZTAgZG9lcyBub3QgaGF2ZSBhbnl0aGluZyB0aGVyZS4KKyAqLworaW50IGJpbmRfbWVyZ2Uoc3RydWN0IGNhY2hlX2VudHJ5ICoqc3JjLAorCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBzcmNbMF07CisJc3RydWN0IGNhY2hlX2VudHJ5ICphID0gc3JjWzFdOworCisJaWYgKG8tPm1lcmdlX3NpemUgIT0gMSkKKwkJcmV0dXJuIGVycm9yKCJDYW5ub3QgZG8gYSBiaW5kIG1lcmdlIG9mICVkIHRyZWVzIiwKKwkJCSAgICAgby0+bWVyZ2Vfc2l6ZSk7CisJaWYgKGEgJiYgb2xkKQorCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgorCQkJZXJyb3IoRVJST1JNU0cobywgRVJST1JfQklORF9PVkVSTEFQKSwgYS0+bmFtZSwgb2xkLT5uYW1lKTsKKwlpZiAoIWEpCisJCXJldHVybiBrZWVwX2VudHJ5KG9sZCwgbyk7CisJZWxzZQorCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KGEsIE5VTEwsIG8pOworfQorCisvKgorICogT25lLXdheSBtZXJnZS4KKyAqCisgKiBUaGUgcnVsZSBpczoKKyAqIC0gdGFrZSB0aGUgc3RhdCBpbmZvcm1hdGlvbiBmcm9tIHN0YWdlMCwgdGFrZSB0aGUgZGF0YSBmcm9tIHN0YWdlMQorICovCitpbnQgb25ld2F5X21lcmdlKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkID0gc3JjWzBdOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqYSA9IHNyY1sxXTsKKworCWlmIChvLT5tZXJnZV9zaXplICE9IDEpCisJCXJldHVybiBlcnJvcigiQ2Fubm90IGRvIGEgb25ld2F5IG1lcmdlIG9mICVkIHRyZWVzIiwKKwkJCSAgICAgby0+bWVyZ2Vfc2l6ZSk7CisKKwlpZiAoIWEgfHwgYSA9PSBvLT5kZl9jb25mbGljdF9lbnRyeSkKKwkJcmV0dXJuIGRlbGV0ZWRfZW50cnkob2xkLCBvbGQsIG8pOworCisJaWYgKG9sZCAmJiBzYW1lKG9sZCwgYSkpIHsKKwkJaW50IHVwZGF0ZSA9IDA7CisJCWlmIChvLT5yZXNldCAmJiAhY2VfdXB0b2RhdGUob2xkKSAmJiAhY2Vfc2tpcF93b3JrdHJlZShvbGQpKSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCWlmIChsc3RhdChvbGQtPm5hbWUsICZzdCkgfHwKKwkJCSAgICBpZV9tYXRjaF9zdGF0KG8tPnNyY19pbmRleCwgb2xkLCAmc3QsIENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRSkpCisJCQkJdXBkYXRlIHw9IENFX1VQREFURTsKKwkJfQorCQlhZGRfZW50cnkobywgb2xkLCB1cGRhdGUsIDApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIG1lcmdlZF9lbnRyeShhLCBvbGQsIG8pOworfQpkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmggYi91bnBhY2stdHJlZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzc0YTlmCi0tLSAvZGV2L251bGwKKysrIGIvdW5wYWNrLXRyZWVzLmgKQEAgLTAsMCArMSw4NiBAQAorI2lmbmRlZiBVTlBBQ0tfVFJFRVNfSAorI2RlZmluZSBVTlBBQ0tfVFJFRVNfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworI2RlZmluZSBNQVhfVU5QQUNLX1RSRUVTIDgKKworc3RydWN0IHVucGFja190cmVlc19vcHRpb25zOworc3RydWN0IGV4Y2x1ZGVfbGlzdDsKKwordHlwZWRlZiBpbnQgKCptZXJnZV9mbl90KShzdHJ1Y3QgY2FjaGVfZW50cnkgKipzcmMsCisJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqb3B0aW9ucyk7CisKK2VudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIHsKKwlFUlJPUl9XT1VMRF9PVkVSV1JJVEUgPSAwLAorCUVSUk9SX05PVF9VUFRPREFURV9GSUxFLAorCUVSUk9SX05PVF9VUFRPREFURV9ESVIsCisJRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfT1ZFUldSSVRURU4sCisJRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfUkVNT1ZFRCwKKwlFUlJPUl9CSU5EX09WRVJMQVAsCisJRVJST1JfU1BBUlNFX05PVF9VUFRPREFURV9GSUxFLAorCUVSUk9SX1dPVUxEX0xPU0VfT1JQSEFORURfT1ZFUldSSVRURU4sCisJRVJST1JfV09VTERfTE9TRV9PUlBIQU5FRF9SRU1PVkVELAorCU5CX1VOUEFDS19UUkVFU19FUlJPUl9UWVBFUworfTsKKworLyoKKyAqIFNldHMgdGhlIGxpc3Qgb2YgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlcyB0byBiZSB1c2VkIGJ5IHRoZQorICogY29tbWFuZCAiY21kIiAoZWl0aGVyIG1lcmdlIG9yIGNoZWNrb3V0KSwgYW5kIHNob3dfYWxsX2Vycm9ycyB0byAxLgorICovCit2b2lkIHNldHVwX3VucGFja190cmVlc19wb3JjZWxhaW4oc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvcHRzLAorCQkJCSAgY29uc3QgY2hhciAqY21kKTsKKworc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIHsKKwl1bnNpZ25lZCBpbnQgcmVzZXQsCisJCSAgICAgbWVyZ2UsCisJCSAgICAgdXBkYXRlLAorCQkgICAgIGluZGV4X29ubHksCisJCSAgICAgbm9udHJpdmlhbF9tZXJnZSwKKwkJICAgICB0cml2aWFsX21lcmdlc19vbmx5LAorCQkgICAgIHZlcmJvc2VfdXBkYXRlLAorCQkgICAgIGFnZ3Jlc3NpdmUsCisJCSAgICAgc2tpcF91bm1lcmdlZCwKKwkJICAgICBpbml0aWFsX2NoZWNrb3V0LAorCQkgICAgIGRpZmZfaW5kZXhfY2FjaGVkLAorCQkgICAgIGRlYnVnX3VucGFjaywKKwkJICAgICBza2lwX3NwYXJzZV9jaGVja291dCwKKwkJICAgICBnZW50bHksCisJCSAgICAgZXhpdGluZ19lYXJseSwKKwkJICAgICBzaG93X2FsbF9lcnJvcnMsCisJCSAgICAgZHJ5X3J1bjsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJaW50IGNhY2hlX2JvdHRvbTsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyOworCXN0cnVjdCBwYXRoX2V4Y2x1ZGVfY2hlY2sgKnBhdGhfZXhjbHVkZV9jaGVjazsKKwlzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjOworCW1lcmdlX2ZuX3QgZm47CisJY29uc3QgY2hhciAqbXNnc1tOQl9VTlBBQ0tfVFJFRVNfRVJST1JfVFlQRVNdOworCS8qCisJICogU3RvcmUgZXJyb3IgbWVzc2FnZXMgaW4gYW4gYXJyYXksIGVhY2ggY2FzZQorCSAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlcnJvciBtZXNzYWdlIHR5cGUKKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdW5wYWNrX3JlamVjdHNbTkJfVU5QQUNLX1RSRUVTX0VSUk9SX1RZUEVTXTsKKworCWludCBoZWFkX2lkeDsKKwlpbnQgbWVyZ2Vfc2l6ZTsKKworCXN0cnVjdCBjYWNoZV9lbnRyeSAqZGZfY29uZmxpY3RfZW50cnk7CisJdm9pZCAqdW5wYWNrX2RhdGE7CisKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmRzdF9pbmRleDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKnNyY19pbmRleDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgcmVzdWx0OworCisJc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWw7IC8qIGZvciBpbnRlcm5hbCB1c2UgKi8KK307CisKK2V4dGVybiBpbnQgdW5wYWNrX3RyZWVzKHVuc2lnbmVkIG4sIHN0cnVjdCB0cmVlX2Rlc2MgKnQsCisJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqb3B0aW9ucyk7CisKK2ludCB0aHJlZXdheV9tZXJnZShzdHJ1Y3QgY2FjaGVfZW50cnkgKipzdGFnZXMsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CitpbnQgdHdvd2F5X21lcmdlKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKK2ludCBiaW5kX21lcmdlKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKK2ludCBvbmV3YXlfbWVyZ2Uoc3RydWN0IGNhY2hlX2VudHJ5ICoqc3JjLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3VwbG9hZC1wYWNrLmMgYi91cGxvYWQtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTBjY2IKLS0tIC9kZXYvbnVsbAorKysgYi91cGxvYWQtcGFjay5jCkBAIC0wLDAgKzEsODQ2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdXBsb2FkX3BhY2tfdXNhZ2VbXSA9ICJnaXQgdXBsb2FkLXBhY2sgWy0tc3RyaWN0XSBbLS10aW1lb3V0PTxuPl0gPGRpcj4iOworCisvKiBiaXRzICMwLi43IGluIHJldmlzaW9uLmgsICM4Li4xMCBpbiBjb21taXQuYyAqLworI2RlZmluZSBUSEVZX0hBVkUJKDF1IDw8IDExKQorI2RlZmluZSBPVVJfUkVGCQkoMXUgPDwgMTIpCisjZGVmaW5lIFdBTlRFRAkJKDF1IDw8IDEzKQorI2RlZmluZSBDT01NT05fS05PV04JKDF1IDw8IDE0KQorI2RlZmluZSBSRUFDSEFCTEUJKDF1IDw8IDE1KQorCisjZGVmaW5lIFNIQUxMT1cJCSgxdSA8PCAxNikKKyNkZWZpbmUgTk9UX1NIQUxMT1cJKDF1IDw8IDE3KQorI2RlZmluZSBDTElFTlRfU0hBTExPVwkoMXUgPDwgMTgpCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9sZGVzdF9oYXZlOworCitzdGF0aWMgaW50IG11bHRpX2FjaywgbnJfb3VyX3JlZnM7CitzdGF0aWMgaW50IG5vX2RvbmU7CitzdGF0aWMgaW50IHVzZV90aGluX3BhY2ssIHVzZV9vZnNfZGVsdGEsIHVzZV9pbmNsdWRlX3RhZzsKK3N0YXRpYyBpbnQgbm9fcHJvZ3Jlc3MsIGRhZW1vbl9tb2RlOworc3RhdGljIGludCBzaGFsbG93X25yOworc3RhdGljIHN0cnVjdCBvYmplY3RfYXJyYXkgaGF2ZV9vYmo7CitzdGF0aWMgc3RydWN0IG9iamVjdF9hcnJheSB3YW50X29iajsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2FycmF5IGV4dHJhX2VkZ2Vfb2JqOworc3RhdGljIHVuc2lnbmVkIGludCB0aW1lb3V0OworLyogMCBmb3Igbm8gc2lkZWJhbmQsCisgKiBvdGhlcndpc2UgbWF4aW11bSBwYWNrZXQgc2l6ZSAodXAgdG8gNjU1MjAgYnl0ZXMpLgorICovCitzdGF0aWMgaW50IHVzZV9zaWRlYmFuZDsKK3N0YXRpYyBpbnQgZGVidWdfZmQ7CitzdGF0aWMgaW50IGFkdmVydGlzZV9yZWZzOworc3RhdGljIGludCBzdGF0ZWxlc3NfcnBjOworCitzdGF0aWMgdm9pZCByZXNldF90aW1lb3V0KHZvaWQpCit7CisJYWxhcm0odGltZW91dCk7Cit9CisKK3N0YXRpYyBpbnQgc3RyaXAoY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlpZiAobGVuICYmIGxpbmVbbGVuLTFdID09ICdcbicpCisJCWxpbmVbLS1sZW5dID0gMDsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBzZW5kX2NsaWVudF9kYXRhKGludCBmZCwgY29uc3QgY2hhciAqZGF0YSwgc3NpemVfdCBzeikKK3sKKwlpZiAodXNlX3NpZGViYW5kKQorCQlyZXR1cm4gc2VuZF9zaWRlYmFuZCgxLCBmZCwgZGF0YSwgc3osIHVzZV9zaWRlYmFuZCk7CisJaWYgKGZkID09IDMpCisJCS8qIGVtZXJnZW5jeSBxdWl0ICovCisJCWZkID0gMjsKKwlpZiAoZmQgPT0gMikgeworCQkvKiBYWFg6IGFyZSB3ZSBoYXBweSB0byBsb3NlIHN0dWZmIGhlcmU/ICovCisJCXh3cml0ZShmZCwgZGF0YSwgc3opOworCQlyZXR1cm4gc3o7CisJfQorCXJldHVybiBzYWZlX3dyaXRlKGZkLCBkYXRhLCBzeik7Cit9CisKK3N0YXRpYyBGSUxFICpwYWNrX3BpcGUgPSBOVUxMOworc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKQoreworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKQorCQlmcHV0YygnLScsIHBhY2tfcGlwZSk7CisJaWYgKGZwdXRzKHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpLCBwYWNrX3BpcGUpIDwgMCkKKwkJZGllKCJicm9rZW4gb3V0cHV0IHBpcGUiKTsKKwlmcHV0YygnXG4nLCBwYWNrX3BpcGUpOworCWZmbHVzaChwYWNrX3BpcGUpOworCWZyZWUoY29tbWl0LT5idWZmZXIpOworCWNvbW1pdC0+YnVmZmVyID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLAorCQkJY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwgY29uc3QgY2hhciAqY29tcG9uZW50LAorCQkJdm9pZCAqY2JfZGF0YSkKK3sKKwlzaG93X29iamVjdF93aXRoX25hbWUocGFja19waXBlLCBvYmosIHBhdGgsIGNvbXBvbmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZWRnZShzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJZnByaW50ZihwYWNrX3BpcGUsICItJXNcbiIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKK30KKworc3RhdGljIGludCBkb19yZXZfbGlzdChpbnQgaW4sIGludCBvdXQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKworCXBhY2tfcGlwZSA9IHhmZG9wZW4ob3V0LCAidyIpOworCWluaXRfcmV2aXNpb25zKCZyZXZzLCBOVUxMKTsKKwlyZXZzLnRhZ19vYmplY3RzID0gMTsKKwlyZXZzLnRyZWVfb2JqZWN0cyA9IDE7CisJcmV2cy5ibG9iX29iamVjdHMgPSAxOworCWlmICh1c2VfdGhpbl9wYWNrKQorCQlyZXZzLmVkZ2VfaGludCA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2FudF9vYmoubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gd2FudF9vYmoub2JqZWN0c1tpXS5pdGVtOworCQkvKiB3aHk/Pz8gKi8KKwkJby0+ZmxhZ3MgJj0gflVOSU5URVJFU1RJTkc7CisJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgbywgTlVMTCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBoYXZlX29iai5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSBoYXZlX29iai5vYmplY3RzW2ldLml0ZW07CisJCW8tPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgbywgTlVMTCk7CisJfQorCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2cywgTlVMTCk7CisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcocmV2cy5jb21taXRzLCAmcmV2cywgc2hvd19lZGdlKTsKKwlpZiAodXNlX3RoaW5fcGFjaykKKwkJZm9yIChpID0gMDsgaSA8IGV4dHJhX2VkZ2Vfb2JqLm5yOyBpKyspCisJCQlmcHJpbnRmKHBhY2tfcGlwZSwgIi0lc1xuIiwgc2hhMV90b19oZXgoCisJCQkJCWV4dHJhX2VkZ2Vfb2JqLm9iamVjdHNbaV0uaXRlbS0+c2hhMSkpOworCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QsIE5VTEwpOworCWZmbHVzaChwYWNrX3BpcGUpOworCWZjbG9zZShwYWNrX3BpcGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfcGFja19maWxlKHZvaWQpCit7CisJc3RydWN0IGFzeW5jIHJldl9saXN0OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHBhY2tfb2JqZWN0czsKKwlpbnQgY3JlYXRlX2Z1bGxfcGFjayA9IChucl9vdXJfcmVmcyA9PSB3YW50X29iai5uciAmJiAhaGF2ZV9vYmoubnIpOworCWNoYXIgZGF0YVs4MTkzXSwgcHJvZ3Jlc3NbMTI4XTsKKwljaGFyIGFib3J0X21zZ1tdID0gImFib3J0aW5nIGR1ZSB0byBwb3NzaWJsZSByZXBvc2l0b3J5ICIKKwkJImNvcnJ1cHRpb24gb24gdGhlIHJlbW90ZSBzaWRlLiI7CisJaW50IGJ1ZmZlcmVkID0gLTE7CisJc3NpemVfdCBzejsKKwljb25zdCBjaGFyICphcmd2WzEwXTsKKwlpbnQgYXJnID0gMDsKKworCWFyZ3ZbYXJnKytdID0gInBhY2stb2JqZWN0cyI7CisJaWYgKCFzaGFsbG93X25yKSB7CisJCWFyZ3ZbYXJnKytdID0gIi0tcmV2cyI7CisJCWlmIChjcmVhdGVfZnVsbF9wYWNrKQorCQkJYXJndlthcmcrK10gPSAiLS1hbGwiOworCQllbHNlIGlmICh1c2VfdGhpbl9wYWNrKQorCQkJYXJndlthcmcrK10gPSAiLS10aGluIjsKKwl9CisKKwlhcmd2W2FyZysrXSA9ICItLXN0ZG91dCI7CisJaWYgKCFub19wcm9ncmVzcykKKwkJYXJndlthcmcrK10gPSAiLS1wcm9ncmVzcyI7CisJaWYgKHVzZV9vZnNfZGVsdGEpCisJCWFyZ3ZbYXJnKytdID0gIi0tZGVsdGEtYmFzZS1vZmZzZXQiOworCWlmICh1c2VfaW5jbHVkZV90YWcpCisJCWFyZ3ZbYXJnKytdID0gIi0taW5jbHVkZS10YWciOworCWFyZ3ZbYXJnKytdID0gTlVMTDsKKworCW1lbXNldCgmcGFja19vYmplY3RzLCAwLCBzaXplb2YocGFja19vYmplY3RzKSk7CisJcGFja19vYmplY3RzLmluID0gLTE7CisJcGFja19vYmplY3RzLm91dCA9IC0xOworCXBhY2tfb2JqZWN0cy5lcnIgPSAtMTsKKwlwYWNrX29iamVjdHMuZ2l0X2NtZCA9IDE7CisJcGFja19vYmplY3RzLmFyZ3YgPSBhcmd2OworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJnBhY2tfb2JqZWN0cykpCisJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiB1bmFibGUgdG8gZm9yayBnaXQtcGFjay1vYmplY3RzIik7CisKKwlpZiAoc2hhbGxvd19ucikgeworCQltZW1zZXQoJnJldl9saXN0LCAwLCBzaXplb2YocmV2X2xpc3QpKTsKKwkJcmV2X2xpc3QucHJvYyA9IGRvX3Jldl9saXN0OworCQlyZXZfbGlzdC5vdXQgPSBwYWNrX29iamVjdHMuaW47CisJCWlmIChzdGFydF9hc3luYygmcmV2X2xpc3QpKQorCQkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IHVuYWJsZSB0byBmb3JrIGdpdC1yZXYtbGlzdCIpOworCX0KKwllbHNlIHsKKwkJRklMRSAqcGlwZV9mZCA9IHhmZG9wZW4ocGFja19vYmplY3RzLmluLCAidyIpOworCQlpZiAoIWNyZWF0ZV9mdWxsX3BhY2spIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IHdhbnRfb2JqLm5yOyBpKyspCisJCQkJZnByaW50ZihwaXBlX2ZkLCAiJXNcbiIsIHNoYTFfdG9faGV4KHdhbnRfb2JqLm9iamVjdHNbaV0uaXRlbS0+c2hhMSkpOworCQkJZnByaW50ZihwaXBlX2ZkLCAiLS1ub3RcbiIpOworCQkJZm9yIChpID0gMDsgaSA8IGhhdmVfb2JqLm5yOyBpKyspCisJCQkJZnByaW50ZihwaXBlX2ZkLCAiJXNcbiIsIHNoYTFfdG9faGV4KGhhdmVfb2JqLm9iamVjdHNbaV0uaXRlbS0+c2hhMSkpOworCQl9CisKKwkJZnByaW50ZihwaXBlX2ZkLCAiXG4iKTsKKwkJZmZsdXNoKHBpcGVfZmQpOworCQlmY2xvc2UocGlwZV9mZCk7CisJfQorCisKKwkvKiBXZSByZWFkIGZyb20gcGFja19vYmplY3RzLmVyciB0byBjYXB0dXJlIHN0ZGVyciBvdXRwdXQgZm9yCisJICogcHJvZ3Jlc3MgYmFyLCBhbmQgcGFja19vYmplY3RzLm91dCB0byBjYXB0dXJlIHRoZSBwYWNrIGRhdGEuCisJICovCisKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgcG9sbGZkIHBmZFsyXTsKKwkJaW50IHBlLCBwdSwgcG9sbHNpemU7CisKKwkJcmVzZXRfdGltZW91dCgpOworCisJCXBvbGxzaXplID0gMDsKKwkJcGUgPSBwdSA9IC0xOworCisJCWlmICgwIDw9IHBhY2tfb2JqZWN0cy5vdXQpIHsKKwkJCXBmZFtwb2xsc2l6ZV0uZmQgPSBwYWNrX29iamVjdHMub3V0OworCQkJcGZkW3BvbGxzaXplXS5ldmVudHMgPSBQT0xMSU47CisJCQlwdSA9IHBvbGxzaXplOworCQkJcG9sbHNpemUrKzsKKwkJfQorCQlpZiAoMCA8PSBwYWNrX29iamVjdHMuZXJyKSB7CisJCQlwZmRbcG9sbHNpemVdLmZkID0gcGFja19vYmplY3RzLmVycjsKKwkJCXBmZFtwb2xsc2l6ZV0uZXZlbnRzID0gUE9MTElOOworCQkJcGUgPSBwb2xsc2l6ZTsKKwkJCXBvbGxzaXplKys7CisJCX0KKworCQlpZiAoIXBvbGxzaXplKQorCQkJYnJlYWs7CisKKwkJaWYgKHBvbGwocGZkLCBwb2xsc2l6ZSwgLTEpIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVJTlRSKSB7CisJCQkJZXJyb3IoInBvbGwgZmFpbGVkLCByZXN1bWluZzogJXMiLAorCQkJCSAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQkJc2xlZXAoMSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoMCA8PSBwZSAmJiAocGZkW3BlXS5yZXZlbnRzICYgKFBPTExJTnxQT0xMSFVQKSkpIHsKKwkJCS8qIFN0YXR1cyByZWFkeTsgd2Ugc2hpcCB0aGF0IGluIHRoZSBzaWRlLWJhbmQKKwkJCSAqIG9yIGR1bXAgdG8gdGhlIHN0YW5kYXJkIGVycm9yLgorCQkJICovCisJCQlzeiA9IHhyZWFkKHBhY2tfb2JqZWN0cy5lcnIsIHByb2dyZXNzLAorCQkJCSAgc2l6ZW9mKHByb2dyZXNzKSk7CisJCQlpZiAoMCA8IHN6KQorCQkJCXNlbmRfY2xpZW50X2RhdGEoMiwgcHJvZ3Jlc3MsIHN6KTsKKwkJCWVsc2UgaWYgKHN6ID09IDApIHsKKwkJCQljbG9zZShwYWNrX29iamVjdHMuZXJyKTsKKwkJCQlwYWNrX29iamVjdHMuZXJyID0gLTE7CisJCQl9CisJCQllbHNlCisJCQkJZ290byBmYWlsOworCQkJLyogZ2l2ZSBwcmlvcml0eSB0byBzdGF0dXMgbWVzc2FnZXMgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgwIDw9IHB1ICYmIChwZmRbcHVdLnJldmVudHMgJiAoUE9MTElOfFBPTExIVVApKSkgeworCQkJLyogRGF0YSByZWFkeTsgd2Uga2VlcCB0aGUgbGFzdCBieXRlIHRvIG91cnNlbHZlcworCQkJICogaW4gY2FzZSB3ZSBkZXRlY3QgYnJva2VuIHJldi1saXN0LCBzbyB0aGF0IHdlCisJCQkgKiBjYW4gbGVhdmUgdGhlIHN0cmVhbSBjb3JydXB0ZWQuICBUaGlzIGlzCisJCQkgKiB1bmZvcnR1bmF0ZSAtLSB1bnBhY2stb2JqZWN0cyB3b3VsZCBoYXBwaWx5CisJCQkgKiBhY2NlcHQgYSB2YWxpZCBwYWNrZGF0YSB3aXRoIHRyYWlsaW5nIGdhcmJhZ2UsCisJCQkgKiBzbyBhcHBlbmRpbmcgZ2FyYmFnZSBhZnRlciB3ZSBwYXNzIGFsbCB0aGUKKwkJCSAqIHBhY2sgZGF0YSBpcyBub3QgZ29vZCBlbm91Z2ggdG8gc2lnbmFsCisJCQkgKiBicmVha2FnZSB0byBkb3duc3RyZWFtLgorCQkJICovCisJCQljaGFyICpjcCA9IGRhdGE7CisJCQlzc2l6ZV90IG91dHN6ID0gMDsKKwkJCWlmICgwIDw9IGJ1ZmZlcmVkKSB7CisJCQkJKmNwKysgPSBidWZmZXJlZDsKKwkJCQlvdXRzeisrOworCQkJfQorCQkJc3ogPSB4cmVhZChwYWNrX29iamVjdHMub3V0LCBjcCwKKwkJCQkgIHNpemVvZihkYXRhKSAtIG91dHN6KTsKKwkJCWlmICgwIDwgc3opCisJCQkJOworCQkJZWxzZSBpZiAoc3ogPT0gMCkgeworCQkJCWNsb3NlKHBhY2tfb2JqZWN0cy5vdXQpOworCQkJCXBhY2tfb2JqZWN0cy5vdXQgPSAtMTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlnb3RvIGZhaWw7CisJCQlzeiArPSBvdXRzejsKKwkJCWlmICgxIDwgc3opIHsKKwkJCQlidWZmZXJlZCA9IGRhdGFbc3otMV0gJiAweEZGOworCQkJCXN6LS07CisJCQl9CisJCQllbHNlCisJCQkJYnVmZmVyZWQgPSAtMTsKKwkJCXN6ID0gc2VuZF9jbGllbnRfZGF0YSgxLCBkYXRhLCBzeik7CisJCQlpZiAoc3ogPCAwKQorCQkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKworCWlmIChmaW5pc2hfY29tbWFuZCgmcGFja19vYmplY3RzKSkgeworCQllcnJvcigiZ2l0IHVwbG9hZC1wYWNrOiBnaXQtcGFjay1vYmplY3RzIGRpZWQgd2l0aCBlcnJvci4iKTsKKwkJZ290byBmYWlsOworCX0KKwlpZiAoc2hhbGxvd19uciAmJiBmaW5pc2hfYXN5bmMoJnJldl9saXN0KSkKKwkJZ290byBmYWlsOwkvKiBlcnJvciB3YXMgYWxyZWFkeSByZXBvcnRlZCAqLworCisJLyogZmx1c2ggdGhlIGRhdGEgKi8KKwlpZiAoMCA8PSBidWZmZXJlZCkgeworCQlkYXRhWzBdID0gYnVmZmVyZWQ7CisJCXN6ID0gc2VuZF9jbGllbnRfZGF0YSgxLCBkYXRhLCAxKTsKKwkJaWYgKHN6IDwgMCkKKwkJCWdvdG8gZmFpbDsKKwkJZnByaW50ZihzdGRlcnIsICJmbHVzaGVkLlxuIik7CisJfQorCWlmICh1c2Vfc2lkZWJhbmQpCisJCXBhY2tldF9mbHVzaCgxKTsKKwlyZXR1cm47CisKKyBmYWlsOgorCXNlbmRfY2xpZW50X2RhdGEoMywgYWJvcnRfbXNnLCBzaXplb2YoYWJvcnRfbXNnKSk7CisJZGllKCJnaXQgdXBsb2FkLXBhY2s6ICVzIiwgYWJvcnRfbXNnKTsKK30KKworc3RhdGljIGludCBnb3Rfc2hhMShjaGFyICpoZXgsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG9iamVjdCAqbzsKKwlpbnQgd2Vfa25ld190aGV5X2hhdmUgPSAwOworCisJaWYgKGdldF9zaGExX2hleChoZXgsIHNoYTEpKQorCQlkaWUoImdpdCB1cGxvYWQtcGFjazogZXhwZWN0ZWQgU0hBMSBvYmplY3QsIGdvdCAnJXMnIiwgaGV4KTsKKwlpZiAoIWhhc19zaGExX2ZpbGUoc2hhMSkpCisJCXJldHVybiAtMTsKKworCW8gPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCWlmICghKG8gJiYgby0+cGFyc2VkKSkKKwkJbyA9IHBhcnNlX29iamVjdChzaGExKTsKKwlpZiAoIW8pCisJCWRpZSgib29wcyAoJXMpIiwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmIChvLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCWlmIChvLT5mbGFncyAmIFRIRVlfSEFWRSkKKwkJCXdlX2tuZXdfdGhleV9oYXZlID0gMTsKKwkJZWxzZQorCQkJby0+ZmxhZ3MgfD0gVEhFWV9IQVZFOworCQlpZiAoIW9sZGVzdF9oYXZlIHx8IChjb21taXQtPmRhdGUgPCBvbGRlc3RfaGF2ZSkpCisJCQlvbGRlc3RfaGF2ZSA9IGNvbW1pdC0+ZGF0ZTsKKwkJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQkgICAgIHBhcmVudHM7CisJCSAgICAgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpCisJCQlwYXJlbnRzLT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gVEhFWV9IQVZFOworCX0KKwlpZiAoIXdlX2tuZXdfdGhleV9oYXZlKSB7CisJCWFkZF9vYmplY3RfYXJyYXkobywgTlVMTCwgJmhhdmVfb2JqKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWNoYWJsZShzdHJ1Y3QgY29tbWl0ICp3YW50KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqd29yayA9IE5VTEw7CisKKwljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZSh3YW50LCAmd29yayk7CisJd2hpbGUgKHdvcmspIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gd29yay0+bmV4dDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gd29yay0+aXRlbTsKKwkJZnJlZSh3b3JrKTsKKwkJd29yayA9IGxpc3Q7CisKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVEhFWV9IQVZFKSB7CisJCQl3YW50LT5vYmplY3QuZmxhZ3MgfD0gQ09NTU9OX0tOT1dOOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFjb21taXQtPm9iamVjdC5wYXJzZWQpCisJCQlwYXJzZV9vYmplY3QoY29tbWl0LT5vYmplY3Quc2hhMSk7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSkKKwkJCWNvbnRpbnVlOworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBSRUFDSEFCTEU7CisJCWlmIChjb21taXQtPmRhdGUgPCBvbGRlc3RfaGF2ZSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGxpc3QgPSBjb21taXQtPnBhcmVudHM7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBsaXN0LT5pdGVtOworCQkJaWYgKCEocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBSRUFDSEFCTEUpKQorCQkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHBhcmVudCwgJndvcmspOworCQl9CisJfQorCXdhbnQtPm9iamVjdC5mbGFncyB8PSBSRUFDSEFCTEU7CisJY2xlYXJfY29tbWl0X21hcmtzKHdhbnQsIFJFQUNIQUJMRSk7CisJZnJlZV9jb21taXRfbGlzdCh3b3JrKTsKKwlyZXR1cm4gKHdhbnQtPm9iamVjdC5mbGFncyAmIENPTU1PTl9LTk9XTik7Cit9CisKK3N0YXRpYyBpbnQgb2tfdG9fZ2l2ZV91cCh2b2lkKQoreworCWludCBpOworCisJaWYgKCFoYXZlX29iai5ucikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2FudF9vYmoubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICp3YW50ID0gd2FudF9vYmoub2JqZWN0c1tpXS5pdGVtOworCisJCWlmICh3YW50LT5mbGFncyAmIENPTU1PTl9LTk9XTikKKwkJCWNvbnRpbnVlOworCQl3YW50ID0gZGVyZWZfdGFnKHdhbnQsICJhIHdhbnQgbGluZSIsIDApOworCQlpZiAoIXdhbnQgfHwgd2FudC0+dHlwZSAhPSBPQkpfQ09NTUlUKSB7CisJCQkvKiBubyB3YXkgdG8gdGVsbCBpZiB0aGlzIGlzIHJlYWNoYWJsZSBieQorCQkJICogbG9va2luZyBhdCB0aGUgYW5jZXN0cnkgY2hhaW4gYWxvbmUsIHNvCisJCQkgKiBsZWF2ZSBhIG5vdGUgdG8gb3Vyc2VsdmVzIG5vdCB0byB3b3JyeSBhYm91dAorCQkJICogdGhpcyBvYmplY3QgYW55bW9yZS4KKwkJCSAqLworCQkJd2FudF9vYmoub2JqZWN0c1tpXS5pdGVtLT5mbGFncyB8PSBDT01NT05fS05PV047CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXJlYWNoYWJsZSgoc3RydWN0IGNvbW1pdCAqKXdhbnQpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdldF9jb21tb25fY29tbWl0cyh2b2lkKQoreworCXN0YXRpYyBjaGFyIGxpbmVbMTAwMF07CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIGxhc3RfaGV4WzQxXTsKKwlpbnQgZ290X2NvbW1vbiA9IDA7CisJaW50IGdvdF9vdGhlciA9IDA7CisJaW50IHNlbnRfcmVhZHkgPSAwOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKworCWZvciAoOzspIHsKKwkJaW50IGxlbiA9IHBhY2tldF9yZWFkX2xpbmUoMCwgbGluZSwgc2l6ZW9mKGxpbmUpKTsKKwkJcmVzZXRfdGltZW91dCgpOworCisJCWlmICghbGVuKSB7CisJCQlpZiAobXVsdGlfYWNrID09IDIgJiYgZ290X2NvbW1vbgorCQkJICAgICYmICFnb3Rfb3RoZXIgJiYgb2tfdG9fZ2l2ZV91cCgpKSB7CisJCQkJc2VudF9yZWFkeSA9IDE7CisJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXMgcmVhZHlcbiIsIGxhc3RfaGV4KTsKKwkJCX0KKwkJCWlmIChoYXZlX29iai5uciA9PSAwIHx8IG11bHRpX2FjaykKKwkJCQlwYWNrZXRfd3JpdGUoMSwgIk5BS1xuIik7CisKKwkJCWlmIChub19kb25lICYmIHNlbnRfcmVhZHkpIHsKKwkJCQlwYWNrZXRfd3JpdGUoMSwgIkFDSyAlc1xuIiwgbGFzdF9oZXgpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJaWYgKHN0YXRlbGVzc19ycGMpCisJCQkJZXhpdCgwKTsKKwkJCWdvdF9jb21tb24gPSAwOworCQkJZ290X290aGVyID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN0cmlwKGxpbmUsIGxlbik7CisJCWlmICghcHJlZml4Y21wKGxpbmUsICJoYXZlICIpKSB7CisJCQlzd2l0Y2ggKGdvdF9zaGExKGxpbmUrNSwgc2hhMSkpIHsKKwkJCWNhc2UgLTE6IC8qIHRoZXkgaGF2ZSB3aGF0IHdlIGRvIG5vdCAqLworCQkJCWdvdF9vdGhlciA9IDE7CisJCQkJaWYgKG11bHRpX2FjayAmJiBva190b19naXZlX3VwKCkpIHsKKwkJCQkJY29uc3QgY2hhciAqaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7CisJCQkJCWlmIChtdWx0aV9hY2sgPT0gMikgeworCQkJCQkJc2VudF9yZWFkeSA9IDE7CisJCQkJCQlwYWNrZXRfd3JpdGUoMSwgIkFDSyAlcyByZWFkeVxuIiwgaGV4KTsKKwkJCQkJfSBlbHNlCisJCQkJCQlwYWNrZXRfd3JpdGUoMSwgIkFDSyAlcyBjb250aW51ZVxuIiwgaGV4KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWdvdF9jb21tb24gPSAxOworCQkJCW1lbWNweShsYXN0X2hleCwgc2hhMV90b19oZXgoc2hhMSksIDQxKTsKKwkJCQlpZiAobXVsdGlfYWNrID09IDIpCisJCQkJCXBhY2tldF93cml0ZSgxLCAiQUNLICVzIGNvbW1vblxuIiwgbGFzdF9oZXgpOworCQkJCWVsc2UgaWYgKG11bHRpX2FjaykKKwkJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXMgY29udGludWVcbiIsIGxhc3RfaGV4KTsKKwkJCQllbHNlIGlmIChoYXZlX29iai5uciA9PSAxKQorCQkJCQlwYWNrZXRfd3JpdGUoMSwgIkFDSyAlc1xuIiwgbGFzdF9oZXgpOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAobGluZSwgImRvbmUiKSkgeworCQkJaWYgKGhhdmVfb2JqLm5yID4gMCkgeworCQkJCWlmIChtdWx0aV9hY2spCisJCQkJCXBhY2tldF93cml0ZSgxLCAiQUNLICVzXG4iLCBsYXN0X2hleCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlwYWNrZXRfd3JpdGUoMSwgIk5BS1xuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IGV4cGVjdGVkIFNIQTEgbGlzdCwgZ290ICclcyciLCBsaW5lKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX25vbl90aXAodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqYXJndltdID0geworCQkicmV2LWxpc3QiLCAiLS1zdGRpbiIsIE5VTEwsCisJfTsKKwlzdGF0aWMgc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kOworCXN0cnVjdCBvYmplY3QgKm87CisJY2hhciBuYW1lYnVmWzQyXTsgLyogXiArIFNIQS0xICsgTEYgKi8KKwlpbnQgaTsKKworCS8qIEluIHRoZSBub3JtYWwgaW4tcHJvY2VzcyBjYXNlIG5vbi10aXAgcmVxdWVzdCBjYW4gbmV2ZXIgaGFwcGVuICovCisJaWYgKCFzdGF0ZWxlc3NfcnBjKQorCQlnb3RvIGVycm9yOworCisJY21kLmFyZ3YgPSBhcmd2OworCWNtZC5naXRfY21kID0gMTsKKwljbWQubm9fc3RkZXJyID0gMTsKKwljbWQuaW4gPSAtMTsKKwljbWQub3V0ID0gLTE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY21kKSkKKwkJZ290byBlcnJvcjsKKworCS8qCisJICogSWYgcmV2LWxpc3QgLS1zdGRpbiBlbmNvdW50ZXJzIGFuIHVua25vd24gY29tbWl0LCBpdAorCSAqIHRlcm1pbmF0ZXMsIHdoaWNoIHdpbGwgY2F1c2UgU0lHUElQRSBpbiB0aGUgd3JpdGUgbG9vcAorCSAqIGJlbG93LgorCSAqLworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisKKwluYW1lYnVmWzBdID0gJ14nOworCW5hbWVidWZbNDFdID0gJ1xuJzsKKwlmb3IgKGkgPSBnZXRfbWF4X29iamVjdF9pbmRleCgpOyAwIDwgaTsgKSB7CisJCW8gPSBnZXRfaW5kZXhlZF9vYmplY3QoLS1pKTsKKwkJaWYgKCFvKQorCQkJY29udGludWU7CisJCWlmICghKG8tPmZsYWdzICYgT1VSX1JFRikpCisJCQljb250aW51ZTsKKwkJbWVtY3B5KG5hbWVidWYgKyAxLCBzaGExX3RvX2hleChvLT5zaGExKSwgNDApOworCQlpZiAod3JpdGVfaW5fZnVsbChjbWQuaW4sIG5hbWVidWYsIDQyKSA8IDApCisJCQlnb3RvIGVycm9yOworCX0KKwluYW1lYnVmWzQwXSA9ICdcbic7CisJZm9yIChpID0gMDsgaSA8IHdhbnRfb2JqLm5yOyBpKyspIHsKKwkJbyA9IHdhbnRfb2JqLm9iamVjdHNbaV0uaXRlbTsKKwkJaWYgKG8tPmZsYWdzICYgT1VSX1JFRikKKwkJCWNvbnRpbnVlOworCQltZW1jcHkobmFtZWJ1Ziwgc2hhMV90b19oZXgoby0+c2hhMSksIDQwKTsKKwkJaWYgKHdyaXRlX2luX2Z1bGwoY21kLmluLCBuYW1lYnVmLCA0MSkgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9CisJY2xvc2UoY21kLmluKTsKKworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCS8qCisJICogVGhlIGNvbW1pdHMgb3V0IG9mIHRoZSByZXYtbGlzdCBhcmUgbm90IGFuY2VzdG9ycyBvZgorCSAqIG91ciByZWYuCisJICovCisJaSA9IHJlYWRfaW5fZnVsbChjbWQub3V0LCBuYW1lYnVmLCAxKTsKKwlpZiAoaSkKKwkJZ290byBlcnJvcjsKKwljbG9zZShjbWQub3V0KTsKKworCS8qCisJICogcmV2LWxpc3QgbWF5IGhhdmUgZGllZCBieSBlbmNvdW50ZXJpbmcgYSBiYWQgY29tbWl0CisJICogaW4gdGhlIGhpc3RvcnksIGluIHdoaWNoIGNhc2Ugd2UgZG8gd2FudCB0byBiYWlsIG91dAorCSAqIGV2ZW4gd2hlbiBpdCBzaG93ZWQgbm8gY29tbWl0LgorCSAqLworCWlmIChmaW5pc2hfY29tbWFuZCgmY21kKSkKKwkJZ290byBlcnJvcjsKKworCS8qIEFsbCB0aGUgbm9uLXRpcCBvbmVzIGFyZSBhbmNlc3RvcnMgb2Ygd2hhdCB3ZSBhZHZlcnRpc2VkICovCisJcmV0dXJuOworCitlcnJvcjoKKwkvKiBQaWNrIG9uZSBvZiB0aGVtICh3ZSBrbm93IHRoZXJlIGF0IGxlYXN0IGlzIG9uZSkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgd2FudF9vYmoubnI7IGkrKykgeworCQlvID0gd2FudF9vYmoub2JqZWN0c1tpXS5pdGVtOworCQlpZiAoIShvLT5mbGFncyAmIE9VUl9SRUYpKQorCQkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IG5vdCBvdXIgcmVmICVzIiwKKwkJCSAgICBzaGExX3RvX2hleChvLT5zaGExKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWNlaXZlX25lZWRzKHZvaWQpCit7CisJc3RydWN0IG9iamVjdF9hcnJheSBzaGFsbG93cyA9IE9CSkVDVF9BUlJBWV9JTklUOworCXN0YXRpYyBjaGFyIGxpbmVbMTAwMF07CisJaW50IGxlbiwgZGVwdGggPSAwOworCWludCBoYXNfbm9uX3RpcCA9IDA7CisKKwlzaGFsbG93X25yID0gMDsKKwlpZiAoZGVidWdfZmQpCisJCXdyaXRlX3N0cl9pbl9mdWxsKGRlYnVnX2ZkLCAiI1NcbiIpOworCWZvciAoOzspIHsKKwkJc3RydWN0IG9iamVjdCAqbzsKKwkJY29uc3QgY2hhciAqZmVhdHVyZXM7CisJCXVuc2lnbmVkIGNoYXIgc2hhMV9idWZbMjBdOworCQlsZW4gPSBwYWNrZXRfcmVhZF9saW5lKDAsIGxpbmUsIHNpemVvZihsaW5lKSk7CisJCXJlc2V0X3RpbWVvdXQoKTsKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKwkJaWYgKGRlYnVnX2ZkKQorCQkJd3JpdGVfaW5fZnVsbChkZWJ1Z19mZCwgbGluZSwgbGVuKTsKKworCQlpZiAoIXByZWZpeGNtcChsaW5lLCAic2hhbGxvdyAiKSkgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKwkJCWlmIChnZXRfc2hhMShsaW5lICsgOCwgc2hhMSkpCisJCQkJZGllKCJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiLCBsaW5lKTsKKwkJCW9iamVjdCA9IHBhcnNlX29iamVjdChzaGExKTsKKwkJCWlmICghb2JqZWN0KQorCQkJCWRpZSgiZGlkIG5vdCBmaW5kIG9iamVjdCBmb3IgJXMiLCBsaW5lKTsKKwkJCW9iamVjdC0+ZmxhZ3MgfD0gQ0xJRU5UX1NIQUxMT1c7CisJCQlhZGRfb2JqZWN0X2FycmF5KG9iamVjdCwgTlVMTCwgJnNoYWxsb3dzKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcHJlZml4Y21wKGxpbmUsICJkZWVwZW4gIikpIHsKKwkJCWNoYXIgKmVuZDsKKwkJCWRlcHRoID0gc3RydG9sKGxpbmUgKyA3LCAmZW5kLCAwKTsKKwkJCWlmIChlbmQgPT0gbGluZSArIDcgfHwgZGVwdGggPD0gMCkKKwkJCQlkaWUoIkludmFsaWQgZGVlcGVuOiAlcyIsIGxpbmUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHByZWZpeGNtcChsaW5lLCAid2FudCAiKSB8fAorCQkgICAgZ2V0X3NoYTFfaGV4KGxpbmUrNSwgc2hhMV9idWYpKQorCQkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IHByb3RvY29sIGVycm9yLCAiCisJCQkgICAgImV4cGVjdGVkIHRvIGdldCBzaGEsIG5vdCAnJXMnIiwgbGluZSk7CisKKwkJZmVhdHVyZXMgPSBsaW5lICsgNDU7CisKKwkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgIm11bHRpX2Fja19kZXRhaWxlZCIpKQorCQkJbXVsdGlfYWNrID0gMjsKKwkJZWxzZSBpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAibXVsdGlfYWNrIikpCisJCQltdWx0aV9hY2sgPSAxOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAibm8tZG9uZSIpKQorCQkJbm9fZG9uZSA9IDE7CisJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZXMsICJ0aGluLXBhY2siKSkKKwkJCXVzZV90aGluX3BhY2sgPSAxOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAib2ZzLWRlbHRhIikpCisJCQl1c2Vfb2ZzX2RlbHRhID0gMTsKKwkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgInNpZGUtYmFuZC02NGsiKSkKKwkJCXVzZV9zaWRlYmFuZCA9IExBUkdFX1BBQ0tFVF9NQVg7CisJCWVsc2UgaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgInNpZGUtYmFuZCIpKQorCQkJdXNlX3NpZGViYW5kID0gREVGQVVMVF9QQUNLRVRfTUFYOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAibm8tcHJvZ3Jlc3MiKSkKKwkJCW5vX3Byb2dyZXNzID0gMTsKKwkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgImluY2x1ZGUtdGFnIikpCisJCQl1c2VfaW5jbHVkZV90YWcgPSAxOworCisJCW8gPSBsb29rdXBfb2JqZWN0KHNoYTFfYnVmKTsKKwkJaWYgKCFvKQorCQkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IG5vdCBvdXIgcmVmICVzIiwKKwkJCSAgICBzaGExX3RvX2hleChzaGExX2J1ZikpOworCQlpZiAoIShvLT5mbGFncyAmIFdBTlRFRCkpIHsKKwkJCW8tPmZsYWdzIHw9IFdBTlRFRDsKKwkJCWlmICghKG8tPmZsYWdzICYgT1VSX1JFRikpCisJCQkJaGFzX25vbl90aXAgPSAxOworCQkJYWRkX29iamVjdF9hcnJheShvLCBOVUxMLCAmd2FudF9vYmopOworCQl9CisJfQorCWlmIChkZWJ1Z19mZCkKKwkJd3JpdGVfc3RyX2luX2Z1bGwoZGVidWdfZmQsICIjRVxuIik7CisKKwkvKgorCSAqIFdlIGhhdmUgc2VudCBhbGwgb3VyIHJlZnMgYWxyZWFkeSwgYW5kIHRoZSBvdGhlciBlbmQKKwkgKiBzaG91bGQgaGF2ZSBjaG9zZW4gb3V0IG9mIHRoZW0uIFdoZW4gd2UgYXJlIG9wZXJhdGluZworCSAqIGluIHRoZSBzdGF0ZWxlc3MgUlBDIG1vZGUsIGhvd2V2ZXIsIHRoZWlyIGNob2ljZSBtYXkKKwkgKiBoYXZlIGJlZW4gYmFzZWQgb24gdGhlIHNldCBvZiBvbGRlciByZWZzIGFkdmVydGlzZWQKKwkgKiBieSBhbm90aGVyIHByb2Nlc3MgdGhhdCBoYW5kbGVkIHRoZSBpbml0aWFsIHJlcXVlc3QuCisJICovCisJaWYgKGhhc19ub25fdGlwKQorCQljaGVja19ub25fdGlwKCk7CisKKwlpZiAoIXVzZV9zaWRlYmFuZCAmJiBkYWVtb25fbW9kZSkKKwkJbm9fcHJvZ3Jlc3MgPSAxOworCisJaWYgKGRlcHRoID09IDAgJiYgc2hhbGxvd3MubnIgPT0gMCkKKwkJcmV0dXJuOworCWlmIChkZXB0aCA+IDApIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQsICpiYWNrdXA7CisJCWludCBpOworCQliYWNrdXAgPSByZXN1bHQgPSBnZXRfc2hhbGxvd19jb21taXRzKCZ3YW50X29iaiwgZGVwdGgsCisJCQlTSEFMTE9XLCBOT1RfU0hBTExPVyk7CisJCXdoaWxlIChyZXN1bHQpIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9ICZyZXN1bHQtPml0ZW0tPm9iamVjdDsKKwkJCWlmICghKG9iamVjdC0+ZmxhZ3MgJiAoQ0xJRU5UX1NIQUxMT1d8Tk9UX1NIQUxMT1cpKSkgeworCQkJCXBhY2tldF93cml0ZSgxLCAic2hhbGxvdyAlcyIsCisJCQkJCQlzaGExX3RvX2hleChvYmplY3QtPnNoYTEpKTsKKwkJCQlyZWdpc3Rlcl9zaGFsbG93KG9iamVjdC0+c2hhMSk7CisJCQkJc2hhbGxvd19ucisrOworCQkJfQorCQkJcmVzdWx0ID0gcmVzdWx0LT5uZXh0OworCQl9CisJCWZyZWVfY29tbWl0X2xpc3QoYmFja3VwKTsKKwkJZm9yIChpID0gMDsgaSA8IHNoYWxsb3dzLm5yOyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHNoYWxsb3dzLm9iamVjdHNbaV0uaXRlbTsKKwkJCWlmIChvYmplY3QtPmZsYWdzICYgTk9UX1NIQUxMT1cpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJCQkJcGFja2V0X3dyaXRlKDEsICJ1bnNoYWxsb3cgJXMiLAorCQkJCQlzaGExX3RvX2hleChvYmplY3QtPnNoYTEpKTsKKwkJCQlvYmplY3QtPmZsYWdzICY9IH5DTElFTlRfU0hBTExPVzsKKwkJCQkvKiBtYWtlIHN1cmUgdGhlIHJlYWwgcGFyZW50cyBhcmUgcGFyc2VkICovCisJCQkJdW5yZWdpc3Rlcl9zaGFsbG93KG9iamVjdC0+c2hhMSk7CisJCQkJb2JqZWN0LT5wYXJzZWQgPSAwOworCQkJCWlmIChwYXJzZV9jb21taXQoKHN0cnVjdCBjb21taXQgKilvYmplY3QpKQorCQkJCQlkaWUoImludmFsaWQgY29tbWl0Iik7CisJCQkJcGFyZW50cyA9ICgoc3RydWN0IGNvbW1pdCAqKW9iamVjdCktPnBhcmVudHM7CisJCQkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCQkJYWRkX29iamVjdF9hcnJheSgmcGFyZW50cy0+aXRlbS0+b2JqZWN0LAorCQkJCQkJCU5VTEwsICZ3YW50X29iaik7CisJCQkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQkJCX0KKwkJCQlhZGRfb2JqZWN0X2FycmF5KG9iamVjdCwgTlVMTCwgJmV4dHJhX2VkZ2Vfb2JqKTsKKwkJCX0KKwkJCS8qIG1ha2Ugc3VyZSBjb21taXQgdHJhdmVyc2FsIGNvbmZvcm1zIHRvIGNsaWVudCAqLworCQkJcmVnaXN0ZXJfc2hhbGxvdyhvYmplY3QtPnNoYTEpOworCQl9CisJCXBhY2tldF9mbHVzaCgxKTsKKwl9IGVsc2UKKwkJaWYgKHNoYWxsb3dzLm5yID4gMCkgeworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2hhbGxvd3MubnI7IGkrKykKKwkJCQlyZWdpc3Rlcl9zaGFsbG93KHNoYWxsb3dzLm9iamVjdHNbaV0uaXRlbS0+c2hhMSk7CisJCX0KKworCXNoYWxsb3dfbnIgKz0gc2hhbGxvd3MubnI7CisJZnJlZShzaGFsbG93cy5vYmplY3RzKTsKK30KKworc3RhdGljIGludCBzZW5kX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY2FwYWJpbGl0aWVzID0gIm11bHRpX2FjayB0aGluLXBhY2sgc2lkZS1iYW5kIgorCQkiIHNpZGUtYmFuZC02NGsgb2ZzLWRlbHRhIHNoYWxsb3cgbm8tcHJvZ3Jlc3MiCisJCSIgaW5jbHVkZS10YWcgbXVsdGlfYWNrX2RldGFpbGVkIjsKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gbG9va3VwX3Vua25vd25fb2JqZWN0KHNoYTEpOworCWNvbnN0IGNoYXIgKnJlZm5hbWVfbm9ucyA9IHN0cmlwX25hbWVzcGFjZShyZWZuYW1lKTsKKworCWlmIChvLT50eXBlID09IE9CSl9OT05FKSB7CisJCW8tPnR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOworCQlpZiAoby0+dHlwZSA8IDApCisJCSAgICBkaWUoImdpdCB1cGxvYWQtcGFjazogY2Fubm90IGZpbmQgb2JqZWN0ICVzOiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisKKwlpZiAoY2FwYWJpbGl0aWVzKQorCQlwYWNrZXRfd3JpdGUoMSwgIiVzICVzJWMlcyVzIGFnZW50PSVzXG4iLAorCQkJICAgICBzaGExX3RvX2hleChzaGExKSwgcmVmbmFtZV9ub25zLAorCQkJICAgICAwLCBjYXBhYmlsaXRpZXMsCisJCQkgICAgIHN0YXRlbGVzc19ycGMgPyAiIG5vLWRvbmUiIDogIiIsCisJCQkgICAgIGdpdF91c2VyX2FnZW50X3Nhbml0aXplZCgpKTsKKwllbHNlCisJCXBhY2tldF93cml0ZSgxLCAiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCByZWZuYW1lX25vbnMpOworCWNhcGFiaWxpdGllcyA9IE5VTEw7CisJaWYgKCEoby0+ZmxhZ3MgJiBPVVJfUkVGKSkgeworCQlvLT5mbGFncyB8PSBPVVJfUkVGOworCQlucl9vdXJfcmVmcysrOworCX0KKwlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBkZXJlZl90YWdfbm92ZXJpZnkobyk7CisJCWlmIChvKQorCQkJcGFja2V0X3dyaXRlKDEsICIlcyAlc157fVxuIiwgc2hhMV90b19oZXgoby0+c2hhMSksIHJlZm5hbWVfbm9ucyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hcmtfb3VyX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWlmICghbykKKwkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IGNhbm5vdCBmaW5kIG9iamVjdCAlczoiLCBzaGExX3RvX2hleChzaGExKSk7CisJaWYgKCEoby0+ZmxhZ3MgJiBPVVJfUkVGKSkgeworCQlvLT5mbGFncyB8PSBPVVJfUkVGOworCQlucl9vdXJfcmVmcysrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBsb2FkX3BhY2sodm9pZCkKK3sKKwlpZiAoYWR2ZXJ0aXNlX3JlZnMgfHwgIXN0YXRlbGVzc19ycGMpIHsKKwkJcmVzZXRfdGltZW91dCgpOworCQloZWFkX3JlZl9uYW1lc3BhY2VkKHNlbmRfcmVmLCBOVUxMKTsKKwkJZm9yX2VhY2hfbmFtZXNwYWNlZF9yZWYoc2VuZF9yZWYsIE5VTEwpOworCQlwYWNrZXRfZmx1c2goMSk7CisJfSBlbHNlIHsKKwkJaGVhZF9yZWZfbmFtZXNwYWNlZChtYXJrX291cl9yZWYsIE5VTEwpOworCQlmb3JfZWFjaF9uYW1lc3BhY2VkX3JlZihtYXJrX291cl9yZWYsIE5VTEwpOworCX0KKwlpZiAoYWR2ZXJ0aXNlX3JlZnMpCisJCXJldHVybjsKKworCXJlY2VpdmVfbmVlZHMoKTsKKwlpZiAod2FudF9vYmoubnIpIHsKKwkJZ2V0X2NvbW1vbl9jb21taXRzKCk7CisJCWNyZWF0ZV9wYWNrX2ZpbGUoKTsKKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyICpkaXI7CisJaW50IGk7CisJaW50IHN0cmljdCA9IDA7CisKKwlnaXRfc2V0dXBfZ2V0dGV4dCgpOworCisJcGFja2V0X3RyYWNlX2lkZW50aXR5KCJ1cGxvYWQtcGFjayIpOworCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisJcmVhZF9yZXBsYWNlX3JlZnMgPSAwOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmIChhcmdbMF0gIT0gJy0nKQorCQkJYnJlYWs7CisJCWlmICghc3RyY21wKGFyZywgIi0tYWR2ZXJ0aXNlLXJlZnMiKSkgeworCQkJYWR2ZXJ0aXNlX3JlZnMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGF0ZWxlc3MtcnBjIikpIHsKKwkJCXN0YXRlbGVzc19ycGMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdHJpY3QiKSkgeworCQkJc3RyaWN0ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcHJlZml4Y21wKGFyZywgIi0tdGltZW91dD0iKSkgeworCQkJdGltZW91dCA9IGF0b2koYXJnKzEwKTsKKwkJCWRhZW1vbl9tb2RlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgIT0gYXJnYy0xKQorCQl1c2FnZSh1cGxvYWRfcGFja191c2FnZSk7CisKKwlzZXR1cF9wYXRoKCk7CisKKwlkaXIgPSBhcmd2W2ldOworCisJaWYgKCFlbnRlcl9yZXBvKGRpciwgc3RyaWN0KSkKKwkJZGllKCInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIGdpdCByZXBvc2l0b3J5IiwgZGlyKTsKKwlpZiAoaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkpCisJCWRpZSgiYXR0ZW1wdCB0byBmZXRjaC9jbG9uZSBmcm9tIGEgc2hhbGxvdyByZXBvc2l0b3J5Iik7CisJaWYgKGdldGVudigiR0lUX0RFQlVHX1NFTkRfUEFDSyIpKQorCQlkZWJ1Z19mZCA9IGF0b2koZ2V0ZW52KCJHSVRfREVCVUdfU0VORF9QQUNLIikpOworCXVwbG9hZF9wYWNrKCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS91cmwuYyBiL3VybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWQ5N2QKLS0tIC9kZXYvbnVsbAorKysgYi91cmwuYwpAQCAtMCwwICsxLDEzMiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidXJsLmgiCisKK2ludCBpc191cmxzY2hlbWVjaGFyKGludCBmaXJzdF9mbGFnLCBpbnQgY2gpCit7CisJLyoKKwkgKiBUaGUgc2V0IG9mIHZhbGlkIFVSTCBzY2hlbWVzLCBhcyBwZXIgU1RENjYgKFJGQzM5ODYpIGlzCisJICogJ1tBLVphLXpdW0EtWmEtejAtOSsuLV0qJy4gQnV0IHVzZSBzaWdodGx5IGxvb3NlciBjaGVjaworCSAqIG9mICdbQS1aYS16MC05XVtBLVphLXowLTkrLi1dKicgYmVjYXVzZSBlYXJsaWVyIHZlcnNpb24KKwkgKiBvZiBjaGVjayB1c2VkICdbQS1aYS16MC05XSsnIHNvIG5vdCB0byBicmVhayBhbnkgcmVtb3RlCisJICogaGVscGVycy4KKwkgKi8KKwlpbnQgYWxwaGFudW1lcmljLCBzcGVjaWFsOworCWFscGhhbnVtZXJpYyA9IGNoID4gMCAmJiBpc2FsbnVtKGNoKTsKKwlzcGVjaWFsID0gY2ggPT0gJysnIHx8IGNoID09ICctJyB8fCBjaCA9PSAnLic7CisJcmV0dXJuIGFscGhhbnVtZXJpYyB8fCAoIWZpcnN0X2ZsYWcgJiYgc3BlY2lhbCk7Cit9CisKK2ludCBpc191cmwoY29uc3QgY2hhciAqdXJsKQoreworCS8qIElzICJzY2hlbWUiIHBhcnQgcmVhc29uYWJsZT8gKi8KKwlpZiAoIXVybCB8fCAhaXNfdXJsc2NoZW1lY2hhcigxLCAqdXJsKyspKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoKnVybCAmJiAqdXJsICE9ICc6JykgeworCQlpZiAoIWlzX3VybHNjaGVtZWNoYXIoMCwgKnVybCsrKSkKKwkJCXJldHVybiAwOworCX0KKwkvKiBXZSd2ZSBzZWVuICJzY2hlbWUiOyB3ZSB3YW50IGNvbG9uLXNsYXNoLXNsYXNoICovCisJcmV0dXJuICh1cmxbMF0gPT0gJzonICYmIHVybFsxXSA9PSAnLycgJiYgdXJsWzJdID09ICcvJyk7Cit9CisKK3N0YXRpYyBpbnQgdXJsX2RlY29kZV9jaGFyKGNvbnN0IGNoYXIgKnEpCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciB2YWwgPSAwOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKnErKzsKKwkJdmFsIDw8PSA0OworCQlpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisJCQl2YWwgKz0gYyAtICcwJzsKKwkJZWxzZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCisJCQl2YWwgKz0gYyAtICdhJyArIDEwOworCQllbHNlIGlmIChjID49ICdBJyAmJiBjIDw9ICdGJykKKwkJCXZhbCArPSBjIC0gJ0EnICsgMTA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGNoYXIgKnVybF9kZWNvZGVfaW50ZXJuYWwoY29uc3QgY2hhciAqKnF1ZXJ5LCBpbnQgbGVuLAorCQkJCSBjb25zdCBjaGFyICpzdG9wX2F0LCBzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkJIGludCBkZWNvZGVfcGx1cykKK3sKKwljb25zdCBjaGFyICpxID0gKnF1ZXJ5OworCisJd2hpbGUgKGxlbikgeworCQl1bnNpZ25lZCBjaGFyIGMgPSAqcTsKKworCQlpZiAoIWMpCisJCQlicmVhazsKKwkJaWYgKHN0b3BfYXQgJiYgc3RyY2hyKHN0b3BfYXQsIGMpKSB7CisJCQlxKys7CisJCQlsZW4tLTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGMgPT0gJyUnKSB7CisJCQlpbnQgdmFsID0gdXJsX2RlY29kZV9jaGFyKHEgKyAxKTsKKwkJCWlmICgwIDw9IHZhbCkgeworCQkJCXN0cmJ1Zl9hZGRjaChvdXQsIHZhbCk7CisJCQkJcSArPSAzOworCQkJCWxlbiAtPSAzOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKGRlY29kZV9wbHVzICYmIGMgPT0gJysnKQorCQkJc3RyYnVmX2FkZGNoKG91dCwgJyAnKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKG91dCwgYyk7CisJCXErKzsKKwkJbGVuLS07CisJfQorCSpxdWVyeSA9IHE7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2gob3V0LCBOVUxMKTsKK30KKworY2hhciAqdXJsX2RlY29kZShjb25zdCBjaGFyICp1cmwpCit7CisJcmV0dXJuIHVybF9kZWNvZGVfbWVtKHVybCwgc3RybGVuKHVybCkpOworfQorCitjaGFyICp1cmxfZGVjb2RlX21lbShjb25zdCBjaGFyICp1cmwsIGludCBsZW4pCit7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpjb2xvbiA9IG1lbWNocih1cmwsICc6JywgbGVuKTsKKworCS8qIFNraXAgcHJvdG9jb2wgcGFydCBpZiBwcmVzZW50ICovCisJaWYgKGNvbG9uICYmIHVybCA8IGNvbG9uKSB7CisJCXN0cmJ1Zl9hZGQoJm91dCwgdXJsLCBjb2xvbiAtIHVybCk7CisJCWxlbiAtPSBjb2xvbiAtIHVybDsKKwkJdXJsID0gY29sb247CisJfQorCXJldHVybiB1cmxfZGVjb2RlX2ludGVybmFsKCZ1cmwsIGxlbiwgTlVMTCwgJm91dCwgMCk7Cit9CisKK2NoYXIgKnVybF9kZWNvZGVfcGFyYW1ldGVyX25hbWUoY29uc3QgY2hhciAqKnF1ZXJ5KQoreworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJcmV0dXJuIHVybF9kZWNvZGVfaW50ZXJuYWwocXVlcnksIC0xLCAiJj0iLCAmb3V0LCAxKTsKK30KKworY2hhciAqdXJsX2RlY29kZV9wYXJhbWV0ZXJfdmFsdWUoY29uc3QgY2hhciAqKnF1ZXJ5KQoreworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJcmV0dXJuIHVybF9kZWNvZGVfaW50ZXJuYWwocXVlcnksIC0xLCAiJiIsICZvdXQsIDEpOworfQorCit2b2lkIGVuZF91cmxfd2l0aF9zbGFzaChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgdXJsKTsKKwlpZiAoYnVmLT5sZW4gJiYgYnVmLT5idWZbYnVmLT5sZW4gLSAxXSAhPSAnLycpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiLyIpOworfQorCit2b2lkIHN0cl9lbmRfdXJsX3dpdGhfc2xhc2goY29uc3QgY2hhciAqdXJsLCBjaGFyICoqZGVzdCkgeworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIHVybCk7CisJZnJlZSgqZGVzdCk7CisJKmRlc3QgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvdXJsLmggYi91cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmRhZjZmCi0tLSAvZGV2L251bGwKKysrIGIvdXJsLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBVUkxfSAorI2RlZmluZSBVUkxfSAorCitleHRlcm4gaW50IGlzX3VybChjb25zdCBjaGFyICp1cmwpOworZXh0ZXJuIGludCBpc191cmxzY2hlbWVjaGFyKGludCBmaXJzdF9mbGFnLCBpbnQgY2gpOworZXh0ZXJuIGNoYXIgKnVybF9kZWNvZGUoY29uc3QgY2hhciAqdXJsKTsKK2V4dGVybiBjaGFyICp1cmxfZGVjb2RlX21lbShjb25zdCBjaGFyICp1cmwsIGludCBsZW4pOworZXh0ZXJuIGNoYXIgKnVybF9kZWNvZGVfcGFyYW1ldGVyX25hbWUoY29uc3QgY2hhciAqKnF1ZXJ5KTsKK2V4dGVybiBjaGFyICp1cmxfZGVjb2RlX3BhcmFtZXRlcl92YWx1ZShjb25zdCBjaGFyICoqcXVlcnkpOworCitleHRlcm4gdm9pZCBlbmRfdXJsX3dpdGhfc2xhc2goc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICp1cmwpOworZXh0ZXJuIHZvaWQgc3RyX2VuZF91cmxfd2l0aF9zbGFzaChjb25zdCBjaGFyICp1cmwsIGNoYXIgKipkZXN0KTsKKworI2VuZGlmIC8qIFVSTF9IICovCmRpZmYgLS1naXQgYS91c2FnZS5jIGIvdXNhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmE2Njc4Ci0tLSAvZGV2L251bGwKKysrIGIvdXNhZ2UuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKK3ZvaWQgdnJlcG9ydGYoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCWNoYXIgbXNnWzQwOTZdOworCXZzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCBlcnIsIHBhcmFtcyk7CisJZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBwcmVmaXgsIG1zZyk7Cit9CisKK3ZvaWQgdndyaXRlZihpbnQgZmQsIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwljaGFyIG1zZ1s0MDk2XTsKKwlpbnQgbGVuID0gdnNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksIGVyciwgcGFyYW1zKTsKKwlpZiAobGVuID4gc2l6ZW9mKG1zZykpCisJCWxlbiA9IHNpemVvZihtc2cpOworCisJd3JpdGVfaW5fZnVsbChmZCwgcHJlZml4LCBzdHJsZW4ocHJlZml4KSk7CisJd3JpdGVfaW5fZnVsbChmZCwgbXNnLCBsZW4pOworCXdyaXRlX2luX2Z1bGwoZmQsICJcbiIsIDEpOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCB1c2FnZV9idWlsdGluKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJdnJlcG9ydGYoInVzYWdlOiAiLCBlcnIsIHBhcmFtcyk7CisJZXhpdCgxMjkpOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfYnVpbHRpbihjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCXZyZXBvcnRmKCJmYXRhbDogIiwgZXJyLCBwYXJhbXMpOworCWV4aXQoMTI4KTsKK30KKworc3RhdGljIHZvaWQgZXJyb3JfYnVpbHRpbihjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCXZyZXBvcnRmKCJlcnJvcjogIiwgZXJyLCBwYXJhbXMpOworfQorCitzdGF0aWMgdm9pZCB3YXJuX2J1aWx0aW4oY29uc3QgY2hhciAqd2FybiwgdmFfbGlzdCBwYXJhbXMpCit7CisJdnJlcG9ydGYoIndhcm5pbmc6ICIsIHdhcm4sIHBhcmFtcyk7Cit9CisKKy8qIElmIHdlIGFyZSBpbiBhIGRsb3BlbigpZWQgLnNvIHdyaXRlIHRvIGEgZ2xvYmFsIHZhcmlhYmxlIHdvdWxkIHNlZ2ZhdWx0CisgKiAodWdoKSwgc28ga2VlcCB0aGluZ3Mgc3RhdGljLiAqLworc3RhdGljIE5PUkVUVVJOX1BUUiB2b2lkICgqdXNhZ2Vfcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykgPSB1c2FnZV9idWlsdGluOworc3RhdGljIE5PUkVUVVJOX1BUUiB2b2lkICgqZGllX3JvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpID0gZGllX2J1aWx0aW47CitzdGF0aWMgdm9pZCAoKmVycm9yX3JvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpID0gZXJyb3JfYnVpbHRpbjsKK3N0YXRpYyB2b2lkICgqd2Fybl9yb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSA9IHdhcm5fYnVpbHRpbjsKKwordm9pZCBzZXRfZGllX3JvdXRpbmUoTk9SRVRVUk5fUFRSIHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSkKK3sKKwlkaWVfcm91dGluZSA9IHJvdXRpbmU7Cit9CisKK3ZvaWQgc2V0X2Vycm9yX3JvdXRpbmUodm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpKQoreworCWVycm9yX3JvdXRpbmUgPSByb3V0aW5lOworfQorCit2b2lkIE5PUkVUVVJOIHVzYWdlZihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwl1c2FnZV9yb3V0aW5lKGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKwordm9pZCBOT1JFVFVSTiB1c2FnZShjb25zdCBjaGFyICplcnIpCit7CisJdXNhZ2VmKCIlcyIsIGVycik7Cit9CisKK3ZvaWQgTk9SRVRVUk4gZGllKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWRpZV9yb3V0aW5lKGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKwordm9pZCBOT1JFVFVSTiBkaWVfZXJybm8oY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJY2hhciBmbXRfd2l0aF9lcnJbMTAyNF07CisJY2hhciBzdHJfZXJyb3JbMjU2XSwgKmVycjsKKwlpbnQgaSwgajsKKworCWVyciA9IHN0cmVycm9yKGVycm5vKTsKKwlmb3IgKGkgPSBqID0gMDsgZXJyW2ldICYmIGogPCBzaXplb2Yoc3RyX2Vycm9yKSAtIDE7ICkgeworCQlpZiAoKHN0cl9lcnJvcltqKytdID0gZXJyW2krK10pICE9ICclJykKKwkJCWNvbnRpbnVlOworCQlpZiAoaiA8IHNpemVvZihzdHJfZXJyb3IpIC0gMSkgeworCQkJc3RyX2Vycm9yW2orK10gPSAnJSc7CisJCX0gZWxzZSB7CisJCQkvKiBObyByb29tIHRvIGRvdWJsZSB0aGUgJyUnLCBzbyB3ZSBvdmVyd3JpdGUgaXQgd2l0aAorCQkJICogJ1wwJyBiZWxvdyAqLworCQkJai0tOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3RyX2Vycm9yW2pdID0gMDsKKwlzbnByaW50ZihmbXRfd2l0aF9lcnIsIHNpemVvZihmbXRfd2l0aF9lcnIpLCAiJXM6ICVzIiwgZm10LCBzdHJfZXJyb3IpOworCisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCWRpZV9yb3V0aW5lKGZtdF93aXRoX2VyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworaW50IGVycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWVycm9yX3JvdXRpbmUoZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCXJldHVybiAtMTsKK30KKwordm9pZCB3YXJuaW5nKGNvbnN0IGNoYXIgKndhcm4sIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCXZhX3N0YXJ0KHBhcmFtcywgd2Fybik7CisJd2Fybl9yb3V0aW5lKHdhcm4sIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CmRpZmYgLS1naXQgYS91c2VyZGlmZi5jIGIvdXNlcmRpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDk1OGVmCi0tLSAvZGV2L251bGwKKysrIGIvdXNlcmRpZmYuYwpAQCAtMCwwICsxLDMwNSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKworc3RhdGljIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlcnM7CitzdGF0aWMgaW50IG5kcml2ZXJzOworc3RhdGljIGludCBkcml2ZXJzX2FsbG9jOworCisjZGVmaW5lIFBBVFRFUk5TKG5hbWUsIHBhdHRlcm4sIHdvcmRfcmVnZXgpCQkJXAorCXsgbmFtZSwgTlVMTCwgLTEsIHsgcGF0dGVybiwgUkVHX0VYVEVOREVEIH0sCQlcCisJICB3b3JkX3JlZ2V4ICJ8W15bOnNwYWNlOl1dfFtceGMwLVx4ZmZdW1x4ODAtXHhiZl0rIiB9CisjZGVmaW5lIElQQVRURVJOKG5hbWUsIHBhdHRlcm4sIHdvcmRfcmVnZXgpCQkJXAorCXsgbmFtZSwgTlVMTCwgLTEsIHsgcGF0dGVybiwgUkVHX0VYVEVOREVEIHwgUkVHX0lDQVNFIH0sIFwKKwkgIHdvcmRfcmVnZXggInxbXls6c3BhY2U6XV18W1x4YzAtXHhmZl1bXHg4MC1ceGJmXSsiIH0KK3N0YXRpYyBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyIGJ1aWx0aW5fZHJpdmVyc1tdID0geworSVBBVFRFUk4oImFkYSIsCisJICIhXiguKlsgXHRdKT8oaXMgbmV3fHJlbmFtZXN8aXMgc2VwYXJhdGUpKFsgXHRdLiopPyRcbiIKKwkgIiFeWyBcdF0qd2l0aFsgXHRdLiokXG4iCisJICJeWyBcdF0qKChwcm9jZWR1cmV8ZnVuY3Rpb24pWyBcdF0rLiopJFxuIgorCSAiXlsgXHRdKigocGFja2FnZXxwcm90ZWN0ZWR8dGFzaylbIFx0XSsuKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpdW2EtekEtWjAtOV9dKiIKKwkgInxbMC05XVstKzAtOSNfLmVFXSIKKwkgInw9PnxcXC5cXC58XFwqXFwqfDo9fC89fD49fDw9fDw8fD4+fDw+IiksCitJUEFUVEVSTigiZm9ydHJhbiIsCisJICIhXihbQypdfFsgXHRdKiEpXG4iCisJICIhXlsgXHRdKk1PRFVMRVsgXHRdK1BST0NFRFVSRVsgXHRdXG4iCisJICJeWyBcdF0qKChFTkRbIFx0XSspPyhQUk9HUkFNfE1PRFVMRXxCTE9DS1sgXHRdK0RBVEEiCisJCSJ8KFteJ1wiIFx0XStbIFx0XSspKihTVUJST1VUSU5FfEZVTkNUSU9OKSlbIFx0XStbQS1aXS4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl1bYS16QS1aMC05X10qIgorCSAifFxcLihbRWVdW1FxXXxbTm5dW0VlXXxbR2ddW1R0RWVdfFtMbF1bVHRFZV18W1R0XVtScl1bVXVdW0VlXXxbRmZdW0FhXVtMbF1bU3NdW0VlXXxbQWFdW05uXVtEZF18W09vXVtScl18W05uXT9bRWVdW1FxXVtWdl18W05uXVtPb11bVHRdKVxcLiIKKwkgLyogbnVtYmVycyBhbmQgZm9ybWF0IHN0YXRlbWVudHMgbGlrZSAyRTE0LjQsIG9yIEVTMTIuNiwgOVguCisJICAqIERvbid0IHdvcnJ5IGFib3V0IGZvcm1hdCBzdGF0ZW1lbnRzIHdpdGhvdXQgbGVhZGluZyBkaWdpdHMgc2luY2UKKwkgICogdGhleSB3b3VsZCBoYXZlIGJlZW4gbWF0Y2hlZCBhYm92ZSBhcyBhIHZhcmlhYmxlIGFueXdheS4gKi8KKwkgInxbLStdP1swLTkuXSsoW0FhSWlEZEVlRmZMbFR0WHhdW1NzXT9bLStdP1swLTkuXSopPyhfW2EtekEtWjAtOV1bYS16QS1aMC05X10qKT8iCisJICJ8Ly98XFwqXFwqfDo6fFsvPD49XT0iKSwKK1BBVFRFUk5TKCJodG1sIiwgIl5bIFx0XSooPFtIaF1bMS02XVsgXHRdLio+LiopJCIsCisJICJbXjw+PSBcdF0rIiksCitQQVRURVJOUygiamF2YSIsCisJICIhXlsgXHRdKihjYXRjaHxkb3xmb3J8aWZ8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x3aGlsZSlcbiIKKwkgIl5bIFx0XSooKFtBLVphLXpfXVtBLVphLXpfMC05XSpbIFx0XSspK1tBLVphLXpfXVtBLVphLXpfMC05XSpbIFx0XSpcXChbXjtdKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK1tmRmxMXT98MFt4WGJCXT9bMC05YS1mQS1GXStbbExdPyIKKwkgInxbLSsqLzw+JSZefD0hXT0iCisJICJ8LS18XFwrXFwrfDw8PT98Pj4+Pz0/fCYmfFxcfFxcfCIpLAorUEFUVEVSTlMoIm1hdGxhYiIsCisJICJeW1s6c3BhY2U6XV0qKChjbGFzc2RlZnxmdW5jdGlvbilbWzpzcGFjZTpdXS4qKSR8XiUlW1s6c3BhY2U6XV0uKiQiLAorCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKnxbLSswLTkuZV0rfFs9fjw+XT18XFwuWyovXFxeJ118XFx8XFx8fCYmIiksCitQQVRURVJOUygib2JqYyIsCisJIC8qIE5lZ2F0ZSBDIHN0YXRlbWVudHMgdGhhdCBjYW4gbG9vayBsaWtlIGZ1bmN0aW9ucyAqLworCSAiIV5bIFx0XSooZG98Zm9yfGlmfGVsc2V8cmV0dXJufHN3aXRjaHx3aGlsZSlcbiIKKwkgLyogT2JqZWN0aXZlLUMgbWV0aG9kcyAqLworCSAiXlsgXHRdKihbLStdWyBcdF0qXFwoWyBcdF0qW0EtWmEtel9dW0EtWmEtel8wLTkqIFx0XSpcXClbIFx0XSpbQS1aYS16X10uKikkXG4iCisJIC8qIEMgZnVuY3Rpb25zICovCisJICJeWyBcdF0qKChbQS1aYS16X11bQS1aYS16XzAtOV0qWyBcdF0rKStbQS1aYS16X11bQS1aYS16XzAtOV0qWyBcdF0qXFwoW147XSopJFxuIgorCSAvKiBPYmplY3RpdmUtQyBjbGFzcy9wcm90b2NvbCBkZWZpbml0aW9ucyAqLworCSAiXihAKGltcGxlbWVudGF0aW9ufGludGVyZmFjZXxwcm90b2NvbClbIFx0XS4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rW2ZGbExdP3wwW3hYYkJdP1swLTlhLWZBLUZdK1tsTF0/IgorCSAifFstKyovPD4lJl58PSFdPXwtLXxcXCtcXCt8PDw9P3w+Pj0/fCYmfFxcfFxcfHw6OnwtPiIpLAorUEFUVEVSTlMoInBhc2NhbCIsCisJICJeKCgoY2xhc3NbIFx0XSspPyhwcm9jZWR1cmV8ZnVuY3Rpb24pfGNvbnN0cnVjdG9yfGRlc3RydWN0b3J8aW50ZXJmYWNlfCIKKwkJImltcGxlbWVudGF0aW9ufGluaXRpYWxpemF0aW9ufGZpbmFsaXphdGlvbilbIFx0XSouKikkIgorCSAiXG4iCisJICJeKC4qPVsgXHRdKihjbGFzc3xyZWNvcmQpLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXSt8MFt4WGJCXT9bMC05YS1mQS1GXSsiCisJICJ8PD58PD18Pj18Oj18XFwuXFwuIiksCitQQVRURVJOUygicGVybCIsCisJICJecGFja2FnZSAuKlxuIgorCSAiXnN1YiBbWzphbG51bTpdXyc6XStbIFx0XSoiCisJCSIoXFwoW14pXSpcXClbIFx0XSopPyIgLyogcHJvdG90eXBlICovCisJCS8qCisJCSAqIEF0dHJpYnV0ZXMuICBBIHJlZ2V4IGNhbid0IGNvdW50IG5lc3RlZCBwYXJlbnRoZXNlcywKKwkJICogc28ganVzdCBzbHVycCB1cCB3aGF0ZXZlciB3ZSBzZWUsIHRha2luZyBjYXJlIG5vdAorCQkgKiB0byBhY2NlcHQgbGluZXMgbGlrZSAic3ViIGZvbzsgIyBkZWZpbmVkIGVsc2V3aGVyZSIuCisJCSAqCisJCSAqIEFuIGF0dHJpYnV0ZSBjb3VsZCBjb250YWluIGEgc2VtaWNvbG9uLCBidXQgYXQgdGhhdAorCQkgKiBwb2ludCBpdCBzZWVtcyByZWFzb25hYmxlIGVub3VnaCB0byBnaXZlIHVwLgorCQkgKi8KKwkJIig6W147I10qKT8iCisJCSIoXFx7WyBcdF0qKT8iIC8qIGJyYWNlIGNhbiBjb21lIGhlcmUgb3Igb24gdGhlIG5leHQgbGluZSAqLworCQkiKCMuKik/JFxuIiAvKiBjb21tZW50ICovCisJICJeKEJFR0lOfEVORHxJTklUfENIRUNLfFVOSVRDSEVDS3xBVVRPTE9BRHxERVNUUk9ZKVsgXHRdKiIKKwkJIihcXHtbIFx0XSopPyIgLyogYnJhY2UgY2FuIGNvbWUgaGVyZSBvciBvbiB0aGUgbmV4dCBsaW5lICovCisJCSIoIy4qKT8kXG4iCisJICJePWhlYWRbMC05XSAuKiIsCS8qIFBPRCAqLworCSAvKiAtLSAqLworCSAiW1s6YWxwaGE6XV8nXVtbOmFsbnVtOl1fJ10qIgorCSAifDBbeGJdP1swLTlhLWZBLUZfXSoiCisJIC8qIHRha2luZyBjYXJlIG5vdCB0byBpbnRlcnByZXQgMy4uNSBhcyAoMy4pKC41KSAqLworCSAifFswLTlhLWZBLUZfXSsoXFwuWzAtOWEtZkEtRl9dKyk/KFtlRV1bLStdP1swLTlfXSspPyIKKwkgInw9PnwtW3J3eG9SV1hPZXpzZmRscFN1Z2tiY3RUQk1BQz5dfH5+fDo6IgorCSAifCYmPXxcXHxcXHw9fC8vPXxcXCpcXCo9IgorCSAifCYmfFxcfFxcfHwvL3xcXCtcXCt8LS18XFwqXFwqfFxcLlxcLlxcLj8iCisJICJ8Wy0rKi8lLl4mPD49IXxdPSIKKwkgInw9fnwhfiIKKwkgInw8PHw8Pnw8PT58Pj4iKSwKK1BBVFRFUk5TKCJwaHAiLAorCSAiXltcdCBdKigoKHB1YmxpY3xwcm90ZWN0ZWR8cHJpdmF0ZXxzdGF0aWMpW1x0IF0rKSpmdW5jdGlvbi4qKSRcbiIKKwkgIl5bXHQgXSooY2xhc3MuKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK3wwW3hYYkJdP1swLTlhLWZBLUZdKyIKKwkgInxbLSsqLzw+JSZefD0hLl09fC0tfFxcK1xcK3w8PD0/fD4+PT98PT09fCYmfFxcfFxcfHw6OnwtPiIpLAorUEFUVEVSTlMoInB5dGhvbiIsICJeWyBcdF0qKChjbGFzc3xkZWYpWyBcdF0uKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK1tqSmxMXT98MFt4WF0/WzAtOWEtZkEtRl0rW2xMXT8iCisJICJ8Wy0rKi88PiUmXnw9IV09fC8vPT98PDw9P3w+Pj0/fFxcKlxcKj0/IiksCisJIC8qIC0tICovCitQQVRURVJOUygicnVieSIsICJeWyBcdF0qKChjbGFzc3xtb2R1bGV8ZGVmKVsgXHRdLiopJCIsCisJIC8qIC0tICovCisJICIoQHxAQHxcXCQpP1thLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK3wwW3hYYkJdP1swLTlhLWZBLUZdK3xcXD8oXFxcXEMtKT8oXFxcXE0tKT8uIgorCSAifC8vPT98Wy0rKi88PiUmXnw9IV09fDw8PT98Pj49P3w9PT18XFwuezEsM318Ojp8WyE9XX4iKSwKK1BBVFRFUk5TKCJiaWJ0ZXgiLCAiKEBbYS16QS1aXXsxLH1bIFx0XSpcXHt7MCwxfVsgXHRdKlteIFx0XCJAJyxcXCN9e34lXSopLiokIiwKKwkgIls9e31cIl18W149e31cIiBcdF0rIiksCitQQVRURVJOUygidGV4IiwgIl4oXFxcXCgoc3ViKSpzZWN0aW9ufGNoYXB0ZXJ8cGFydClcXCp7MCwxfVxcey4qKSQiLAorCSAiXFxcXFthLXpBLVpAXSt8XFxcXC58W2EtekEtWjAtOVx4ODAtXHhmZl0rIiksCitQQVRURVJOUygiY3BwIiwKKwkgLyogSnVtcCB0YXJnZXRzIG9yIGFjY2VzcyBkZWNsYXJhdGlvbnMgKi8KKwkgIiFeWyBcdF0qW0EtWmEtel9dW0EtWmEtel8wLTldKjouKiRcbiIKKwkgLyogQy8rKyBmdW5jdGlvbnMvbWV0aG9kcyBhdCB0b3AgbGV2ZWwgKi8KKwkgIl4oW0EtWmEtel9dW0EtWmEtel8wLTldKihbIFx0Kl0rW0EtWmEtel9dW0EtWmEtel8wLTldKihbIFx0XSo6OlsgXHRdKlteWzpzcGFjZTpdXSspPyl7MSx9WyBcdF0qXFwoW147XSopJFxuIgorCSAvKiBjb21wb3VuZCB0eXBlIGF0IHRvcCBsZXZlbCAqLworCSAiXigoc3RydWN0fGNsYXNzfGVudW0pW147XSopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXStbZkZsTF0/fDBbeFhiQl0/WzAtOWEtZkEtRl0rW2xMXT8iCisJICJ8Wy0rKi88PiUmXnw9IV09fC0tfFxcK1xcK3w8PD0/fD4+PT98JiZ8XFx8XFx8fDo6fC0+IiksCitQQVRURVJOUygiY3NoYXJwIiwKKwkgLyogS2V5d29yZHMgKi8KKwkgIiFeWyBcdF0qKGRvfHdoaWxlfGZvcnxpZnxlbHNlfGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0Y2h8Y2FzZXx0aHJvd3xjYXRjaHx1c2luZylcbiIKKwkgLyogTWV0aG9kcyBhbmQgY29uc3RydWN0b3JzICovCisJICJeWyBcdF0qKCgoc3RhdGljfHB1YmxpY3xpbnRlcm5hbHxwcml2YXRlfHByb3RlY3RlZHxuZXd8dmlydHVhbHxzZWFsZWR8b3ZlcnJpZGV8dW5zYWZlKVsgXHRdKykqW11bPD5ALn5fWzphbG51bTpdXStbIFx0XStbPD5ALl9bOmFsbnVtOl1dK1sgXHRdKlxcKC4qXFwpKVsgXHRdKiRcbiIKKwkgLyogUHJvcGVydGllcyAqLworCSAiXlsgXHRdKigoKHN0YXRpY3xwdWJsaWN8aW50ZXJuYWx8cHJpdmF0ZXxwcm90ZWN0ZWR8bmV3fHZpcnR1YWx8c2VhbGVkfG92ZXJyaWRlfHVuc2FmZSlbIFx0XSspKltdWzw+QC5+X1s6YWxudW06XV0rWyBcdF0rW0AuX1s6YWxudW06XV0rKVsgXHRdKiRcbiIKKwkgLyogVHlwZSBkZWZpbml0aW9ucyAqLworCSAiXlsgXHRdKigoKHN0YXRpY3xwdWJsaWN8aW50ZXJuYWx8cHJpdmF0ZXxwcm90ZWN0ZWR8bmV3fHVuc2FmZXxzZWFsZWR8YWJzdHJhY3R8cGFydGlhbClbIFx0XSspKihjbGFzc3xlbnVtfGludGVyZmFjZXxzdHJ1Y3QpWyBcdF0rLiopJFxuIgorCSAvKiBOYW1lc3BhY2UgKi8KKwkgIl5bIFx0XSoobmFtZXNwYWNlWyBcdF0rLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXStbZkZsTF0/fDBbeFhiQl0/WzAtOWEtZkEtRl0rW2xMXT8iCisJICJ8Wy0rKi88PiUmXnw9IV09fC0tfFxcK1xcK3w8PD0/fD4+PT98JiZ8XFx8XFx8fDo6fC0+IiksCit7ICJkZWZhdWx0IiwgTlVMTCwgLTEsIHsgTlVMTCwgMCB9IH0sCit9OworI3VuZGVmIFBBVFRFUk5TCisjdW5kZWYgSVBBVFRFUk4KKworc3RhdGljIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgZHJpdmVyX3RydWUgPSB7CisJImRpZmY9dHJ1ZSIsCisJTlVMTCwKKwkwLAorCXsgTlVMTCwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzZXJkaWZmX2RyaXZlciBkcml2ZXJfZmFsc2UgPSB7CisJIiFkaWZmIiwKKwlOVUxMLAorCTEsCisJeyBOVUxMLCAwIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9maW5kX2J5X25hbWVsZW4oY29uc3QgY2hhciAqaywgaW50IGxlbikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbmRyaXZlcnM7IGkrKykgeworCQlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcnYgPSBkcml2ZXJzICsgaTsKKwkJaWYgKCFzdHJuY21wKGRydi0+bmFtZSwgaywgbGVuKSAmJiAhZHJ2LT5uYW1lW2xlbl0pCisJCQlyZXR1cm4gZHJ2OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWlsdGluX2RyaXZlcnMpOyBpKyspIHsKKwkJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJ2ID0gYnVpbHRpbl9kcml2ZXJzICsgaTsKKwkJaWYgKCFzdHJuY21wKGRydi0+bmFtZSwgaywgbGVuKSAmJiAhZHJ2LT5uYW1lW2xlbl0pCisJCQlyZXR1cm4gZHJ2OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnBhcnNlX2RyaXZlcihjb25zdCBjaGFyICp2YXIsCisJCWNvbnN0IGNoYXIgKnZhbHVlLCBjb25zdCBjaGFyICp0eXBlKQoreworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRydjsKKwljb25zdCBjaGFyICpkb3Q7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbmFtZWxlbjsKKworCWlmIChwcmVmaXhjbXAodmFyLCAiZGlmZi4iKSkKKwkJcmV0dXJuIE5VTEw7CisJZG90ID0gc3RycmNocih2YXIsICcuJyk7CisJaWYgKGRvdCA9PSB2YXIgKyA0KQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoc3RyY21wKHR5cGUsIGRvdCsxKSkKKwkJcmV0dXJuIE5VTEw7CisKKwluYW1lID0gdmFyICsgNTsKKwluYW1lbGVuID0gZG90IC0gbmFtZTsKKwlkcnYgPSB1c2VyZGlmZl9maW5kX2J5X25hbWVsZW4obmFtZSwgbmFtZWxlbik7CisJaWYgKCFkcnYpIHsKKwkJQUxMT0NfR1JPVyhkcml2ZXJzLCBuZHJpdmVycysxLCBkcml2ZXJzX2FsbG9jKTsKKwkJZHJ2ID0gJmRyaXZlcnNbbmRyaXZlcnMrK107CisJCW1lbXNldChkcnYsIDAsIHNpemVvZigqZHJ2KSk7CisJCWRydi0+bmFtZSA9IHhtZW1kdXB6KG5hbWUsIG5hbWVsZW4pOworCQlkcnYtPmJpbmFyeSA9IC0xOworCX0KKwlyZXR1cm4gZHJ2OworfQorCitzdGF0aWMgaW50IHBhcnNlX2Z1bmNuYW1lKHN0cnVjdCB1c2VyZGlmZl9mdW5jbmFtZSAqZiwgY29uc3QgY2hhciAqaywKKwkJY29uc3QgY2hhciAqdiwgaW50IGNmbGFncykKK3sKKwlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJmYtPnBhdHRlcm4sIGssIHYpIDwgMCkKKwkJcmV0dXJuIC0xOworCWYtPmNmbGFncyA9IGNmbGFnczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV90cmlzdGF0ZShpbnQgKmIsIGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYpCit7CisJaWYgKHYgJiYgIXN0cmNhc2VjbXAodiwgImF1dG8iKSkKKwkJKmIgPSAtMTsKKwllbHNlCisJCSpiID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2Jvb2woaW50ICpiLCBjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2KQoreworCSpiID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCXJldHVybiAwOworfQorCitpbnQgdXNlcmRpZmZfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYpCit7CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJ2OworCisJaWYgKChkcnYgPSBwYXJzZV9kcml2ZXIoaywgdiwgImZ1bmNuYW1lIikpKQorCQlyZXR1cm4gcGFyc2VfZnVuY25hbWUoJmRydi0+ZnVuY25hbWUsIGssIHYsIDApOworCWlmICgoZHJ2ID0gcGFyc2VfZHJpdmVyKGssIHYsICJ4ZnVuY25hbWUiKSkpCisJCXJldHVybiBwYXJzZV9mdW5jbmFtZSgmZHJ2LT5mdW5jbmFtZSwgaywgdiwgUkVHX0VYVEVOREVEKTsKKwlpZiAoKGRydiA9IHBhcnNlX2RyaXZlcihrLCB2LCAiYmluYXJ5IikpKQorCQlyZXR1cm4gcGFyc2VfdHJpc3RhdGUoJmRydi0+YmluYXJ5LCBrLCB2KTsKKwlpZiAoKGRydiA9IHBhcnNlX2RyaXZlcihrLCB2LCAiY29tbWFuZCIpKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZkcnYtPmV4dGVybmFsLCBrLCB2KTsKKwlpZiAoKGRydiA9IHBhcnNlX2RyaXZlcihrLCB2LCAidGV4dGNvbnYiKSkpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZHJ2LT50ZXh0Y29udiwgaywgdik7CisJaWYgKChkcnYgPSBwYXJzZV9kcml2ZXIoaywgdiwgImNhY2hldGV4dGNvbnYiKSkpCisJCXJldHVybiBwYXJzZV9ib29sKCZkcnYtPnRleHRjb252X3dhbnRfY2FjaGUsIGssIHYpOworCWlmICgoZHJ2ID0gcGFyc2VfZHJpdmVyKGssIHYsICJ3b3JkcmVnZXgiKSkpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZHJ2LT53b3JkX3JlZ2V4LCBrLCB2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9maW5kX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkgeworCWludCBsZW4gPSBzdHJsZW4obmFtZSk7CisJcmV0dXJuIHVzZXJkaWZmX2ZpbmRfYnlfbmFtZWxlbihuYW1lLCBsZW4pOworfQorCitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9maW5kX2J5X3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgc3RydWN0IGdpdF9hdHRyICphdHRyOworCXN0cnVjdCBnaXRfYXR0cl9jaGVjayBjaGVjazsKKworCWlmICghYXR0cikKKwkJYXR0ciA9IGdpdF9hdHRyKCJkaWZmIik7CisJY2hlY2suYXR0ciA9IGF0dHI7CisKKwlpZiAoIXBhdGgpCisJCXJldHVybiBOVUxMOworCWlmIChnaXRfY2hlY2tfYXR0cihwYXRoLCAxLCAmY2hlY2spKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChBVFRSX1RSVUUoY2hlY2sudmFsdWUpKQorCQlyZXR1cm4gJmRyaXZlcl90cnVlOworCWlmIChBVFRSX0ZBTFNFKGNoZWNrLnZhbHVlKSkKKwkJcmV0dXJuICZkcml2ZXJfZmFsc2U7CisJaWYgKEFUVFJfVU5TRVQoY2hlY2sudmFsdWUpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gdXNlcmRpZmZfZmluZF9ieV9uYW1lKGNoZWNrLnZhbHVlKTsKK30KKworc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdXNlcmRpZmZfZ2V0X3RleHRjb252KHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlcikKK3sKKwlpZiAoIWRyaXZlci0+dGV4dGNvbnYpCisJCXJldHVybiBOVUxMOworCisJaWYgKGRyaXZlci0+dGV4dGNvbnZfd2FudF9jYWNoZSAmJiAhZHJpdmVyLT50ZXh0Y29udl9jYWNoZSkgeworCQlzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMgPSB4bWFsbG9jKHNpemVvZigqYykpOworCQlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkZigmbmFtZSwgInRleHRjb252LyVzIiwgZHJpdmVyLT5uYW1lKTsKKwkJbm90ZXNfY2FjaGVfaW5pdChjLCBuYW1lLmJ1ZiwgZHJpdmVyLT50ZXh0Y29udik7CisJCWRyaXZlci0+dGV4dGNvbnZfY2FjaGUgPSBjOworCX0KKworCXJldHVybiBkcml2ZXI7Cit9CmRpZmYgLS1naXQgYS91c2VyZGlmZi5oIGIvdXNlcmRpZmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTdlNzhmCi0tLSAvZGV2L251bGwKKysrIGIvdXNlcmRpZmYuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIFVTRVJESUZGX0gKKyNkZWZpbmUgVVNFUkRJRkZfSAorCisjaW5jbHVkZSAibm90ZXMtY2FjaGUuaCIKKworc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lIHsKKwljb25zdCBjaGFyICpwYXR0ZXJuOworCWludCBjZmxhZ3M7Cit9OworCitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmV4dGVybmFsOworCWludCBiaW5hcnk7CisJc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lIGZ1bmNuYW1lOworCWNvbnN0IGNoYXIgKndvcmRfcmVnZXg7CisJY29uc3QgY2hhciAqdGV4dGNvbnY7CisJc3RydWN0IG5vdGVzX2NhY2hlICp0ZXh0Y29udl9jYWNoZTsKKwlpbnQgdGV4dGNvbnZfd2FudF9jYWNoZTsKK307CisKK2ludCB1c2VyZGlmZl9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdik7CitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9maW5kX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9maW5kX2J5X3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CisKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2dldF90ZXh0Y29udihzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXIpOworCisjZW5kaWYgLyogVVNFUkRJRkYgKi8KZGlmZiAtLWdpdCBhL3V0ZjguYyBiL3V0ZjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTQ0ZjE1Ci0tLSAvZGV2L251bGwKKysrIGIvdXRmOC5jCkBAIC0wLDAgKzEsNDkwIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidXRmOC5oIgorCisvKiBUaGlzIGNvZGUgaXMgb3JpZ2luYWxseSBmcm9tIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvICovCisKK3N0cnVjdCBpbnRlcnZhbCB7CisgIGludCBmaXJzdDsKKyAgaW50IGxhc3Q7Cit9OworCisvKiBhdXhpbGlhcnkgZnVuY3Rpb24gZm9yIGJpbmFyeSBzZWFyY2ggaW4gaW50ZXJ2YWwgdGFibGUgKi8KK3N0YXRpYyBpbnQgYmlzZWFyY2godWNzX2NoYXJfdCB1Y3MsIGNvbnN0IHN0cnVjdCBpbnRlcnZhbCAqdGFibGUsIGludCBtYXgpCit7CisJaW50IG1pbiA9IDA7CisJaW50IG1pZDsKKworCWlmICh1Y3MgPCB0YWJsZVswXS5maXJzdCB8fCB1Y3MgPiB0YWJsZVttYXhdLmxhc3QpCisJCXJldHVybiAwOworCXdoaWxlIChtYXggPj0gbWluKSB7CisJCW1pZCA9IChtaW4gKyBtYXgpIC8gMjsKKwkJaWYgKHVjcyA+IHRhYmxlW21pZF0ubGFzdCkKKwkJCW1pbiA9IG1pZCArIDE7CisJCWVsc2UgaWYgKHVjcyA8IHRhYmxlW21pZF0uZmlyc3QpCisJCQltYXggPSBtaWQgLSAxOworCQllbHNlCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGRlZmluZSB0aGUgY29sdW1uIHdpZHRoIG9mIGFuIElTTyAxMDY0NgorICogY2hhcmFjdGVyIGFzIGZvbGxvd3M6CisgKgorICogICAgLSBUaGUgbnVsbCBjaGFyYWN0ZXIgKFUrMDAwMCkgaGFzIGEgY29sdW1uIHdpZHRoIG9mIDAuCisgKgorICogICAgLSBPdGhlciBDMC9DMSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIERFTCB3aWxsIGxlYWQgdG8gYSByZXR1cm4KKyAqICAgICAgdmFsdWUgb2YgLTEuCisgKgorICogICAgLSBOb24tc3BhY2luZyBhbmQgZW5jbG9zaW5nIGNvbWJpbmluZyBjaGFyYWN0ZXJzIChnZW5lcmFsCisgKiAgICAgIGNhdGVnb3J5IGNvZGUgTW4gb3IgTWUgaW4gdGhlIFVuaWNvZGUgZGF0YWJhc2UpIGhhdmUgYQorICogICAgICBjb2x1bW4gd2lkdGggb2YgMC4KKyAqCisgKiAgICAtIFNPRlQgSFlQSEVOIChVKzAwQUQpIGhhcyBhIGNvbHVtbiB3aWR0aCBvZiAxLgorICoKKyAqICAgIC0gT3RoZXIgZm9ybWF0IGNoYXJhY3RlcnMgKGdlbmVyYWwgY2F0ZWdvcnkgY29kZSBDZiBpbiB0aGUgVW5pY29kZQorICogICAgICBkYXRhYmFzZSkgYW5kIFpFUk8gV0lEVEggU1BBQ0UgKFUrMjAwQikgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAwLgorICoKKyAqICAgIC0gSGFuZ3VsIEphbW8gbWVkaWFsIHZvd2VscyBhbmQgZmluYWwgY29uc29uYW50cyAoVSsxMTYwLVUrMTFGRikKKyAqICAgICAgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAwLgorICoKKyAqICAgIC0gU3BhY2luZyBjaGFyYWN0ZXJzIGluIHRoZSBFYXN0IEFzaWFuIFdpZGUgKFcpIG9yIEVhc3QgQXNpYW4KKyAqICAgICAgRnVsbC13aWR0aCAoRikgY2F0ZWdvcnkgYXMgZGVmaW5lZCBpbiBVbmljb2RlIFRlY2huaWNhbAorICogICAgICBSZXBvcnQgIzExIGhhdmUgYSBjb2x1bW4gd2lkdGggb2YgMi4KKyAqCisgKiAgICAtIEFsbCByZW1haW5pbmcgY2hhcmFjdGVycyAoaW5jbHVkaW5nIGFsbCBwcmludGFibGUKKyAqICAgICAgSVNPIDg4NTktMSBhbmQgV0dMNCBjaGFyYWN0ZXJzLCBVbmljb2RlIGNvbnRyb2wgY2hhcmFjdGVycywKKyAqICAgICAgZXRjLikgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAxLgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHVjc19jaGFyX3QgY2hhcmFjdGVycyBhcmUgZW5jb2RlZAorICogaW4gSVNPIDEwNjQ2LgorICovCisKK3N0YXRpYyBpbnQgZ2l0X3djd2lkdGgodWNzX2NoYXJfdCBjaCkKK3sKKwkvKgorCSAqIFNvcnRlZCBsaXN0IG9mIG5vbi1vdmVybGFwcGluZyBpbnRlcnZhbHMgb2Ygbm9uLXNwYWNpbmcgY2hhcmFjdGVycywKKwkgKiBnZW5lcmF0ZWQgYnkKKwkgKiAgICJ1bmlzZXQgK2NhdD1NZSArY2F0PU1uICtjYXQ9Q2YgLTAwQUQgKzExNjAtMTFGRiArMjAwQiBjIi4KKwkgKi8KKwlzdGF0aWMgY29uc3Qgc3RydWN0IGludGVydmFsIGNvbWJpbmluZ1tdID0geworCQl7IDB4MDMwMCwgMHgwMzU3IH0sIHsgMHgwMzVELCAweDAzNkYgfSwgeyAweDA0ODMsIDB4MDQ4NiB9LAorCQl7IDB4MDQ4OCwgMHgwNDg5IH0sIHsgMHgwNTkxLCAweDA1QTEgfSwgeyAweDA1QTMsIDB4MDVCOSB9LAorCQl7IDB4MDVCQiwgMHgwNUJEIH0sIHsgMHgwNUJGLCAweDA1QkYgfSwgeyAweDA1QzEsIDB4MDVDMiB9LAorCQl7IDB4MDVDNCwgMHgwNUM0IH0sIHsgMHgwNjAwLCAweDA2MDMgfSwgeyAweDA2MTAsIDB4MDYxNSB9LAorCQl7IDB4MDY0QiwgMHgwNjU4IH0sIHsgMHgwNjcwLCAweDA2NzAgfSwgeyAweDA2RDYsIDB4MDZFNCB9LAorCQl7IDB4MDZFNywgMHgwNkU4IH0sIHsgMHgwNkVBLCAweDA2RUQgfSwgeyAweDA3MEYsIDB4MDcwRiB9LAorCQl7IDB4MDcxMSwgMHgwNzExIH0sIHsgMHgwNzMwLCAweDA3NEEgfSwgeyAweDA3QTYsIDB4MDdCMCB9LAorCQl7IDB4MDkwMSwgMHgwOTAyIH0sIHsgMHgwOTNDLCAweDA5M0MgfSwgeyAweDA5NDEsIDB4MDk0OCB9LAorCQl7IDB4MDk0RCwgMHgwOTREIH0sIHsgMHgwOTUxLCAweDA5NTQgfSwgeyAweDA5NjIsIDB4MDk2MyB9LAorCQl7IDB4MDk4MSwgMHgwOTgxIH0sIHsgMHgwOUJDLCAweDA5QkMgfSwgeyAweDA5QzEsIDB4MDlDNCB9LAorCQl7IDB4MDlDRCwgMHgwOUNEIH0sIHsgMHgwOUUyLCAweDA5RTMgfSwgeyAweDBBMDEsIDB4MEEwMiB9LAorCQl7IDB4MEEzQywgMHgwQTNDIH0sIHsgMHgwQTQxLCAweDBBNDIgfSwgeyAweDBBNDcsIDB4MEE0OCB9LAorCQl7IDB4MEE0QiwgMHgwQTREIH0sIHsgMHgwQTcwLCAweDBBNzEgfSwgeyAweDBBODEsIDB4MEE4MiB9LAorCQl7IDB4MEFCQywgMHgwQUJDIH0sIHsgMHgwQUMxLCAweDBBQzUgfSwgeyAweDBBQzcsIDB4MEFDOCB9LAorCQl7IDB4MEFDRCwgMHgwQUNEIH0sIHsgMHgwQUUyLCAweDBBRTMgfSwgeyAweDBCMDEsIDB4MEIwMSB9LAorCQl7IDB4MEIzQywgMHgwQjNDIH0sIHsgMHgwQjNGLCAweDBCM0YgfSwgeyAweDBCNDEsIDB4MEI0MyB9LAorCQl7IDB4MEI0RCwgMHgwQjREIH0sIHsgMHgwQjU2LCAweDBCNTYgfSwgeyAweDBCODIsIDB4MEI4MiB9LAorCQl7IDB4MEJDMCwgMHgwQkMwIH0sIHsgMHgwQkNELCAweDBCQ0QgfSwgeyAweDBDM0UsIDB4MEM0MCB9LAorCQl7IDB4MEM0NiwgMHgwQzQ4IH0sIHsgMHgwQzRBLCAweDBDNEQgfSwgeyAweDBDNTUsIDB4MEM1NiB9LAorCQl7IDB4MENCQywgMHgwQ0JDIH0sIHsgMHgwQ0JGLCAweDBDQkYgfSwgeyAweDBDQzYsIDB4MENDNiB9LAorCQl7IDB4MENDQywgMHgwQ0NEIH0sIHsgMHgwRDQxLCAweDBENDMgfSwgeyAweDBENEQsIDB4MEQ0RCB9LAorCQl7IDB4MERDQSwgMHgwRENBIH0sIHsgMHgwREQyLCAweDBERDQgfSwgeyAweDBERDYsIDB4MERENiB9LAorCQl7IDB4MEUzMSwgMHgwRTMxIH0sIHsgMHgwRTM0LCAweDBFM0EgfSwgeyAweDBFNDcsIDB4MEU0RSB9LAorCQl7IDB4MEVCMSwgMHgwRUIxIH0sIHsgMHgwRUI0LCAweDBFQjkgfSwgeyAweDBFQkIsIDB4MEVCQyB9LAorCQl7IDB4MEVDOCwgMHgwRUNEIH0sIHsgMHgwRjE4LCAweDBGMTkgfSwgeyAweDBGMzUsIDB4MEYzNSB9LAorCQl7IDB4MEYzNywgMHgwRjM3IH0sIHsgMHgwRjM5LCAweDBGMzkgfSwgeyAweDBGNzEsIDB4MEY3RSB9LAorCQl7IDB4MEY4MCwgMHgwRjg0IH0sIHsgMHgwRjg2LCAweDBGODcgfSwgeyAweDBGOTAsIDB4MEY5NyB9LAorCQl7IDB4MEY5OSwgMHgwRkJDIH0sIHsgMHgwRkM2LCAweDBGQzYgfSwgeyAweDEwMkQsIDB4MTAzMCB9LAorCQl7IDB4MTAzMiwgMHgxMDMyIH0sIHsgMHgxMDM2LCAweDEwMzcgfSwgeyAweDEwMzksIDB4MTAzOSB9LAorCQl7IDB4MTA1OCwgMHgxMDU5IH0sIHsgMHgxMTYwLCAweDExRkYgfSwgeyAweDE3MTIsIDB4MTcxNCB9LAorCQl7IDB4MTczMiwgMHgxNzM0IH0sIHsgMHgxNzUyLCAweDE3NTMgfSwgeyAweDE3NzIsIDB4MTc3MyB9LAorCQl7IDB4MTdCNCwgMHgxN0I1IH0sIHsgMHgxN0I3LCAweDE3QkQgfSwgeyAweDE3QzYsIDB4MTdDNiB9LAorCQl7IDB4MTdDOSwgMHgxN0QzIH0sIHsgMHgxN0RELCAweDE3REQgfSwgeyAweDE4MEIsIDB4MTgwRCB9LAorCQl7IDB4MThBOSwgMHgxOEE5IH0sIHsgMHgxOTIwLCAweDE5MjIgfSwgeyAweDE5MjcsIDB4MTkyOCB9LAorCQl7IDB4MTkzMiwgMHgxOTMyIH0sIHsgMHgxOTM5LCAweDE5M0IgfSwgeyAweDIwMEIsIDB4MjAwRiB9LAorCQl7IDB4MjAyQSwgMHgyMDJFIH0sIHsgMHgyMDYwLCAweDIwNjMgfSwgeyAweDIwNkEsIDB4MjA2RiB9LAorCQl7IDB4MjBEMCwgMHgyMEVBIH0sIHsgMHgzMDJBLCAweDMwMkYgfSwgeyAweDMwOTksIDB4MzA5QSB9LAorCQl7IDB4RkIxRSwgMHhGQjFFIH0sIHsgMHhGRTAwLCAweEZFMEYgfSwgeyAweEZFMjAsIDB4RkUyMyB9LAorCQl7IDB4RkVGRiwgMHhGRUZGIH0sIHsgMHhGRkY5LCAweEZGRkIgfSwgeyAweDFEMTY3LCAweDFEMTY5IH0sCisJCXsgMHgxRDE3MywgMHgxRDE4MiB9LCB7IDB4MUQxODUsIDB4MUQxOEIgfSwKKwkJeyAweDFEMUFBLCAweDFEMUFEIH0sIHsgMHhFMDAwMSwgMHhFMDAwMSB9LAorCQl7IDB4RTAwMjAsIDB4RTAwN0YgfSwgeyAweEUwMTAwLCAweEUwMUVGIH0KKwl9OworCisJLyogdGVzdCBmb3IgOC1iaXQgY29udHJvbCBjaGFyYWN0ZXJzICovCisJaWYgKGNoID09IDApCisJCXJldHVybiAwOworCWlmIChjaCA8IDMyIHx8IChjaCA+PSAweDdmICYmIGNoIDwgMHhhMCkpCisJCXJldHVybiAtMTsKKworCS8qIGJpbmFyeSBzZWFyY2ggaW4gdGFibGUgb2Ygbm9uLXNwYWNpbmcgY2hhcmFjdGVycyAqLworCWlmIChiaXNlYXJjaChjaCwgY29tYmluaW5nLCBzaXplb2YoY29tYmluaW5nKQorCQkJCS8gc2l6ZW9mKHN0cnVjdCBpbnRlcnZhbCkgLSAxKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHdlIGFycml2ZSBoZXJlLCBjaCBpcyBuZWl0aGVyIGEgY29tYmluaW5nIG5vciBhIEMwL0MxCisJICogY29udHJvbCBjaGFyYWN0ZXIuCisJICovCisKKwlyZXR1cm4gMSArCisJCShjaCA+PSAweDExMDAgJiYKKyAgICAgICAgICAgICAgICAgICAgLyogSGFuZ3VsIEphbW8gaW5pdC4gY29uc29uYW50cyAqLworCQkgKGNoIDw9IDB4MTE1ZiB8fAorCQkgIGNoID09IDB4MjMyOSB8fCBjaCA9PSAweDIzMmEgfHwKKyAgICAgICAgICAgICAgICAgIC8qIENKSyAuLi4gWWkgKi8KKwkJICAoY2ggPj0gMHgyZTgwICYmIGNoIDw9IDB4YTRjZiAmJgorCQkgICBjaCAhPSAweDMwM2YpIHx8CisJCSAgLyogSGFuZ3VsIFN5bGxhYmxlcyAqLworCQkgIChjaCA+PSAweGFjMDAgJiYgY2ggPD0gMHhkN2EzKSB8fAorCQkgIC8qIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgKi8KKwkJICAoY2ggPj0gMHhmOTAwICYmIGNoIDw9IDB4ZmFmZikgfHwKKwkJICAvKiBDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyAqLworCQkgIChjaCA+PSAweGZlMzAgJiYgY2ggPD0gMHhmZTZmKSB8fAorCQkgIC8qIEZ1bGx3aWR0aCBGb3JtcyAqLworCQkgIChjaCA+PSAweGZmMDAgJiYgY2ggPD0gMHhmZjYwKSB8fAorCQkgIChjaCA+PSAweGZmZTAgJiYgY2ggPD0gMHhmZmU2KSB8fAorCQkgIChjaCA+PSAweDIwMDAwICYmIGNoIDw9IDB4MmZmZmQpIHx8CisJCSAgKGNoID49IDB4MzAwMDAgJiYgY2ggPD0gMHgzZmZmZCkpKTsKK30KKworLyoKKyAqIFBpY2sgb25lIHVjcyBjaGFyYWN0ZXIgc3RhcnRpbmcgZnJvbSB0aGUgbG9jYXRpb24gKnN0YXJ0IHBvaW50cyBhdCwKKyAqIGFuZCByZXR1cm4gaXQsIHdoaWxlIHVwZGF0aW5nIHRoZSAqc3RhcnQgcG9pbnRlciB0byBwb2ludCBhdCB0aGUKKyAqIGVuZCBvZiB0aGF0IGNoYXJhY3Rlci4gIFdoZW4gcmVtYWluZGVyX3AgaXMgbm90IE5VTEwsIHRoZSBsb2NhdGlvbgorICogaG9sZHMgdGhlIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgaW4gdGhlIHN0cmluZyB0aGF0IHdlIGFyZSBhbGxvd2VkCisgKiB0byBwaWNrIGZyb20uICBPdGhlcndpc2Ugd2UgYXJlIGFsbG93ZWQgdG8gcGljayB1cCB0byB0aGUgTlVMIHRoYXQKKyAqIHdvdWxkIGV2ZW50dWFsbHkgYXBwZWFyIGluIHRoZSBzdHJpbmcuICAqcmVtYWluZGVyX3AgaXMgYWxzbyByZWR1Y2VkCisgKiBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGhhdmUgY29uc3VtZWQuCisgKgorICogSWYgdGhlIHN0cmluZyB3YXMgbm90IGEgdmFsaWQgVVRGLTgsICpzdGFydCBwb2ludGVyIGlzIHNldCB0byBOVUxMCisgKiBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuCisgKi8KK3N0YXRpYyB1Y3NfY2hhcl90IHBpY2tfb25lX3V0ZjhfY2hhcihjb25zdCBjaGFyICoqc3RhcnQsIHNpemVfdCAqcmVtYWluZGVyX3ApCit7CisJdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyICopKnN0YXJ0OworCXVjc19jaGFyX3QgY2g7CisJc2l6ZV90IHJlbWFpbmRlciwgaW5jcjsKKworCS8qCisJICogQSBjYWxsZXIgdGhhdCBhc3N1bWVzIE5VTCB0ZXJtaW5hdGVkIHRleHQgY2FuIGNob29zZQorCSAqIG5vdCB0byBib3RoZXIgd2l0aCB0aGUgcmVtYWluZGVyIGxlbmd0aC4gIFdlIHdpbGwKKwkgKiBzdG9wIGF0IHRoZSBmaXJzdCBOVUwuCisJICovCisJcmVtYWluZGVyID0gKHJlbWFpbmRlcl9wID8gKnJlbWFpbmRlcl9wIDogOTk5KTsKKworCWlmIChyZW1haW5kZXIgPCAxKSB7CisJCWdvdG8gaW52YWxpZDsKKwl9IGVsc2UgaWYgKCpzIDwgMHg4MCkgeworCQkvKiAweHh4eHh4eCAqLworCQljaCA9ICpzOworCQlpbmNyID0gMTsKKwl9IGVsc2UgaWYgKChzWzBdICYgMHhlMCkgPT0gMHhjMCkgeworCQkvKiAxMTBYWFhYeCAxMHh4eHh4eCAqLworCQlpZiAocmVtYWluZGVyIDwgMiB8fAorCQkgICAgKHNbMV0gJiAweGMwKSAhPSAweDgwIHx8CisJCSAgICAoc1swXSAmIDB4ZmUpID09IDB4YzApCisJCQlnb3RvIGludmFsaWQ7CisJCWNoID0gKChzWzBdICYgMHgxZikgPDwgNikgfCAoc1sxXSAmIDB4M2YpOworCQlpbmNyID0gMjsKKwl9IGVsc2UgaWYgKChzWzBdICYgMHhmMCkgPT0gMHhlMCkgeworCQkvKiAxMTEwWFhYWCAxMFh4eHh4eCAxMHh4eHh4eCAqLworCQlpZiAocmVtYWluZGVyIDwgMyB8fAorCQkgICAgKHNbMV0gJiAweGMwKSAhPSAweDgwIHx8CisJCSAgICAoc1syXSAmIDB4YzApICE9IDB4ODAgfHwKKwkJICAgIC8qIG92ZXJsb25nPyAqLworCQkgICAgKHNbMF0gPT0gMHhlMCAmJiAoc1sxXSAmIDB4ZTApID09IDB4ODApIHx8CisJCSAgICAvKiBzdXJyb2dhdGU/ICovCisJCSAgICAoc1swXSA9PSAweGVkICYmIChzWzFdICYgMHhlMCkgPT0gMHhhMCkgfHwKKwkJICAgIC8qIFUrRkZGRSBvciBVK0ZGRkY/ICovCisJCSAgICAoc1swXSA9PSAweGVmICYmIHNbMV0gPT0gMHhiZiAmJgorCQkgICAgIChzWzJdICYgMHhmZSkgPT0gMHhiZSkpCisJCQlnb3RvIGludmFsaWQ7CisJCWNoID0gKChzWzBdICYgMHgwZikgPDwgMTIpIHwKKwkJCSgoc1sxXSAmIDB4M2YpIDw8IDYpIHwgKHNbMl0gJiAweDNmKTsKKwkJaW5jciA9IDM7CisJfSBlbHNlIGlmICgoc1swXSAmIDB4ZjgpID09IDB4ZjApIHsKKwkJLyogMTExMTBYWFggMTBYWHh4eHggMTB4eHh4eHggMTB4eHh4eHggKi8KKwkJaWYgKHJlbWFpbmRlciA8IDQgfHwKKwkJICAgIChzWzFdICYgMHhjMCkgIT0gMHg4MCB8fAorCQkgICAgKHNbMl0gJiAweGMwKSAhPSAweDgwIHx8CisJCSAgICAoc1szXSAmIDB4YzApICE9IDB4ODAgfHwKKwkJICAgIC8qIG92ZXJsb25nPyAqLworCQkgICAgKHNbMF0gPT0gMHhmMCAmJiAoc1sxXSAmIDB4ZjApID09IDB4ODApIHx8CisJCSAgICAvKiA+IFUrMTBGRkZGPyAqLworCQkgICAgKHNbMF0gPT0gMHhmNCAmJiBzWzFdID4gMHg4ZikgfHwgc1swXSA+IDB4ZjQpCisJCQlnb3RvIGludmFsaWQ7CisJCWNoID0gKChzWzBdICYgMHgwNykgPDwgMTgpIHwgKChzWzFdICYgMHgzZikgPDwgMTIpIHwKKwkJCSgoc1syXSAmIDB4M2YpIDw8IDYpIHwgKHNbM10gJiAweDNmKTsKKwkJaW5jciA9IDQ7CisJfSBlbHNlIHsKK2ludmFsaWQ6CisJCSpzdGFydCA9IE5VTEw7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCArPSBpbmNyOworCWlmIChyZW1haW5kZXJfcCkKKwkJKnJlbWFpbmRlcl9wID0gcmVtYWluZGVyIC0gaW5jcjsKKwlyZXR1cm4gY2g7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9jY3VwaWVkIGJ5IHRoZSBjaGFyYWN0ZXIKKyAqIHBvaW50ZWQgdG8gYnkgdGhlIHZhcmlhYmxlIHN0YXJ0LiBUaGUgcG9pbnRlciBpcyB1cGRhdGVkIHRvIHBvaW50IGF0CisgKiB0aGUgbmV4dCBjaGFyYWN0ZXIuIFdoZW4gcmVtYWluZGVyX3AgaXMgbm90IE5VTEwsIGl0IHBvaW50cyBhdCB0aGUKKyAqIGxvY2F0aW9uIHRoYXQgc3RvcmVzIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGJ5dGVzIHdlIGNhbiB1c2UgdG8gcGljaworICogYSBjaGFyYWN0ZXIgKHNlZSBwaWNrX29uZV91dGY4X2NoYXIoKSBhYm92ZSkuCisgKi8KK2ludCB1dGY4X3dpZHRoKGNvbnN0IGNoYXIgKipzdGFydCwgc2l6ZV90ICpyZW1haW5kZXJfcCkKK3sKKwl1Y3NfY2hhcl90IGNoID0gcGlja19vbmVfdXRmOF9jaGFyKHN0YXJ0LCByZW1haW5kZXJfcCk7CisJaWYgKCEqc3RhcnQpCisJCXJldHVybiAwOworCXJldHVybiBnaXRfd2N3aWR0aChjaCk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyByZXF1aXJlZCBieSBhIG51bGwtdGVybWluYXRlZAorICogc3RyaW5nLCBhc3N1bWluZyB0aGF0IHRoZSBzdHJpbmcgaXMgdXRmOC4gIFJldHVybnMgc3RybGVuKCkgaW5zdGVhZAorICogaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2YWxpZCB1dGY4IHN0cmluZy4KKyAqLworaW50IHV0Zjhfc3Ryd2lkdGgoY29uc3QgY2hhciAqc3RyaW5nKQoreworCWludCB3aWR0aCA9IDA7CisJY29uc3QgY2hhciAqb3JpZyA9IHN0cmluZzsKKworCXdoaWxlICgxKSB7CisJCWlmICghc3RyaW5nKQorCQkJcmV0dXJuIHN0cmxlbihvcmlnKTsKKwkJaWYgKCEqc3RyaW5nKQorCQkJcmV0dXJuIHdpZHRoOworCQl3aWR0aCArPSB1dGY4X3dpZHRoKCZzdHJpbmcsIE5VTEwpOworCX0KK30KKworaW50IGlzX3V0ZjgoY29uc3QgY2hhciAqdGV4dCkKK3sKKwl3aGlsZSAoKnRleHQpIHsKKwkJaWYgKCp0ZXh0ID09ICdcbicgfHwgKnRleHQgPT0gJ1x0JyB8fCAqdGV4dCA9PSAnXHInKSB7CisJCQl0ZXh0Kys7CisJCQljb250aW51ZTsKKwkJfQorCQl1dGY4X3dpZHRoKCZ0ZXh0LCBOVUxMKTsKKwkJaWYgKCF0ZXh0KQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfYWRkY2hhcnMoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBjLCBzaXplX3QgbikKK3sKKwlzdHJidWZfZ3JvdyhzYiwgbik7CisJbWVtc2V0KHNiLT5idWYgKyBzYi0+bGVuLCBjLCBuKTsKKwlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgbik7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl9hZGRfaW5kZW50ZWRfdGV4dChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnRleHQsCisJCQkJICAgICBpbnQgaW5kZW50LCBpbnQgaW5kZW50MikKK3sKKwlpZiAoaW5kZW50IDwgMCkKKwkJaW5kZW50ID0gMDsKKwl3aGlsZSAoKnRleHQpIHsKKwkJY29uc3QgY2hhciAqZW9sID0gc3RyY2hybnVsKHRleHQsICdcbicpOworCQlpZiAoKmVvbCA9PSAnXG4nKQorCQkJZW9sKys7CisJCXN0cmJ1Zl9hZGRjaGFycyhidWYsICcgJywgaW5kZW50KTsKKwkJc3RyYnVmX2FkZChidWYsIHRleHQsIGVvbCAtIHRleHQpOworCQl0ZXh0ID0gZW9sOworCQlpbmRlbnQgPSBpbmRlbnQyOworCX0KK30KKworc3RhdGljIHNpemVfdCBkaXNwbGF5X21vZGVfZXNjX3NlcXVlbmNlX2xlbihjb25zdCBjaGFyICpzKQoreworCWNvbnN0IGNoYXIgKnAgPSBzOworCWlmICgqcCsrICE9ICdcMDMzJykKKwkJcmV0dXJuIDA7CisJaWYgKCpwKysgIT0gJ1snKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoaXNkaWdpdCgqcCkgfHwgKnAgPT0gJzsnKQorCQlwKys7CisJaWYgKCpwKysgIT0gJ20nKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcCAtIHM7Cit9CisKKy8qCisgKiBXcmFwIHRoZSB0ZXh0LCBpZiBuZWNlc3NhcnkuIFRoZSB2YXJpYWJsZSBpbmRlbnQgaXMgdGhlIGluZGVudCBmb3IgdGhlCisgKiBmaXJzdCBsaW5lLCBpbmRlbnQyIGlzIHRoZSBpbmRlbnQgZm9yIGFsbCBvdGhlciBsaW5lcy4KKyAqIElmIGluZGVudCBpcyBuZWdhdGl2ZSwgYXNzdW1lIHRoYXQgYWxyZWFkeSAtaW5kZW50IGNvbHVtbnMgaGF2ZSBiZWVuCisgKiBjb25zdW1lZCAoYW5kIG5vIGV4dHJhIGluZGVudCBpcyBuZWNlc3NhcnkgZm9yIHRoZSBmaXJzdCBsaW5lKS4KKyAqLworaW50IHN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJY29uc3QgY2hhciAqdGV4dCwgaW50IGluZGVudDEsIGludCBpbmRlbnQyLCBpbnQgd2lkdGgpCit7CisJaW50IGluZGVudCwgdywgYXNzdW1lX3V0ZjggPSAxOworCWNvbnN0IGNoYXIgKmJvbCwgKnNwYWNlLCAqc3RhcnQgPSB0ZXh0OworCXNpemVfdCBvcmlnX2xlbiA9IGJ1Zi0+bGVuOworCisJaWYgKHdpZHRoIDw9IDApIHsKKwkJc3RyYnVmX2FkZF9pbmRlbnRlZF90ZXh0KGJ1ZiwgdGV4dCwgaW5kZW50MSwgaW5kZW50Mik7CisJCXJldHVybiAxOworCX0KKworcmV0cnk6CisJYm9sID0gdGV4dDsKKwl3ID0gaW5kZW50ID0gaW5kZW50MTsKKwlzcGFjZSA9IE5VTEw7CisJaWYgKGluZGVudCA8IDApIHsKKwkJdyA9IC1pbmRlbnQ7CisJCXNwYWNlID0gdGV4dDsKKwl9CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgYzsKKwkJc2l6ZV90IHNraXA7CisKKwkJd2hpbGUgKChza2lwID0gZGlzcGxheV9tb2RlX2VzY19zZXF1ZW5jZV9sZW4odGV4dCkpKQorCQkJdGV4dCArPSBza2lwOworCisJCWMgPSAqdGV4dDsKKwkJaWYgKCFjIHx8IGlzc3BhY2UoYykpIHsKKwkJCWlmICh3IDwgd2lkdGggfHwgIXNwYWNlKSB7CisJCQkJY29uc3QgY2hhciAqc3RhcnQgPSBib2w7CisJCQkJaWYgKCFjICYmIHRleHQgPT0gc3RhcnQpCisJCQkJCXJldHVybiB3OworCQkJCWlmIChzcGFjZSkKKwkJCQkJc3RhcnQgPSBzcGFjZTsKKwkJCQllbHNlCisJCQkJCXN0cmJ1Zl9hZGRjaGFycyhidWYsICcgJywgaW5kZW50KTsKKwkJCQlzdHJidWZfYWRkKGJ1Ziwgc3RhcnQsIHRleHQgLSBzdGFydCk7CisJCQkJaWYgKCFjKQorCQkJCQlyZXR1cm4gdzsKKwkJCQlzcGFjZSA9IHRleHQ7CisJCQkJaWYgKGMgPT0gJ1x0JykKKwkJCQkJdyB8PSAweDA3OworCQkJCWVsc2UgaWYgKGMgPT0gJ1xuJykgeworCQkJCQlzcGFjZSsrOworCQkJCQlpZiAoKnNwYWNlID09ICdcbicpIHsKKwkJCQkJCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCQkJCQkJZ290byBuZXdfbGluZTsKKwkJCQkJfQorCQkJCQllbHNlIGlmICghaXNhbG51bSgqc3BhY2UpKQorCQkJCQkJZ290byBuZXdfbGluZTsKKwkJCQkJZWxzZQorCQkJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJyAnKTsKKwkJCQl9CisJCQkJdysrOworCQkJCXRleHQrKzsKKwkJCX0KKwkJCWVsc2UgeworbmV3X2xpbmU6CisJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7CisJCQkJdGV4dCA9IGJvbCA9IHNwYWNlICsgaXNzcGFjZSgqc3BhY2UpOworCQkJCXNwYWNlID0gTlVMTDsKKwkJCQl3ID0gaW5kZW50ID0gaW5kZW50MjsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChhc3N1bWVfdXRmOCkgeworCQkJdyArPSB1dGY4X3dpZHRoKCZ0ZXh0LCBOVUxMKTsKKwkJCWlmICghdGV4dCkgeworCQkJCWFzc3VtZV91dGY4ID0gMDsKKwkJCQl0ZXh0ID0gc3RhcnQ7CisJCQkJc3RyYnVmX3NldGxlbihidWYsIG9yaWdfbGVuKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQorCQl9IGVsc2UgeworCQkJdysrOworCQkJdGV4dCsrOworCQl9CisJfQorfQorCitpbnQgc3RyYnVmX2FkZF93cmFwcGVkX2J5dGVzKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbiwKKwkJCSAgICAgaW50IGluZGVudCwgaW50IGluZGVudDIsIGludCB3aWR0aCkKK3sKKwljaGFyICp0bXAgPSB4c3RybmR1cChkYXRhLCBsZW4pOworCWludCByID0gc3RyYnVmX2FkZF93cmFwcGVkX3RleHQoYnVmLCB0bXAsIGluZGVudCwgaW5kZW50Miwgd2lkdGgpOworCWZyZWUodG1wKTsKKwlyZXR1cm4gcjsKK30KKworaW50IGlzX2VuY29kaW5nX3V0ZjgoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIW5hbWUpCisJCXJldHVybiAxOworCWlmICghc3RyY2FzZWNtcChuYW1lLCAidXRmLTgiKSB8fCAhc3RyY2FzZWNtcChuYW1lLCAidXRmOCIpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdpdmVuIGEgYnVmZmVyIGFuZCBpdHMgZW5jb2RpbmcsIHJldHVybiBpdCByZS1lbmNvZGVkCisgKiB3aXRoIGljb252LiAgSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybnMgTlVMTC4KKyAqLworI2lmbmRlZiBOT19JQ09OVgorI2lmIGRlZmluZWQoT0xEX0lDT05WKSB8fCAoZGVmaW5lZChfX3N1bl9fKSAmJiAhZGVmaW5lZChfWFBHNikpCisJdHlwZWRlZiBjb25zdCBjaGFyICogaWNvbnZfaWJwOworI2Vsc2UKKwl0eXBlZGVmIGNoYXIgKiBpY29udl9pYnA7CisjZW5kaWYKK2NoYXIgKnJlZW5jb2RlX3N0cmluZ19pY29udihjb25zdCBjaGFyICppbiwgc2l6ZV90IGluc3osIGljb252X3QgY29udikKK3sKKwlzaXplX3Qgb3V0c3osIG91dGFsbG9jOworCWNoYXIgKm91dCwgKm91dHBvczsKKwlpY29udl9pYnAgY3A7CisKKwlvdXRzeiA9IGluc3o7CisJb3V0YWxsb2MgPSBvdXRzeiArIDE7IC8qIGZvciB0ZXJtaW5hdGluZyBOVUwgKi8KKwlvdXQgPSB4bWFsbG9jKG91dGFsbG9jKTsKKwlvdXRwb3MgPSBvdXQ7CisJY3AgPSAoaWNvbnZfaWJwKWluOworCisJd2hpbGUgKDEpIHsKKwkJc2l6ZV90IGNudCA9IGljb252KGNvbnYsICZjcCwgJmluc3osICZvdXRwb3MsICZvdXRzeik7CisKKwkJaWYgKGNudCA9PSAtMSkgeworCQkJc2l6ZV90IHNvZmFyOworCQkJaWYgKGVycm5vICE9IEUyQklHKSB7CisJCQkJZnJlZShvdXQpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJLyogaW5zeiBoYXMgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcy4KKwkJCSAqIHNpbmNlIHdlIHN0YXJ0ZWQgb3V0c3ogdGhlIHNhbWUgYXMgaW5zeiwKKwkJCSAqIGl0IGlzIGxpa2VseSB0aGF0IGluc3ogaXMgbm90IGVub3VnaCBmb3IKKwkJCSAqIGNvbnZlcnRpbmcgdGhlIHJlc3QuCisJCQkgKi8KKwkJCXNvZmFyID0gb3V0cG9zIC0gb3V0OworCQkJb3V0YWxsb2MgPSBzb2ZhciArIGluc3ogKiAyICsgMzI7CisJCQlvdXQgPSB4cmVhbGxvYyhvdXQsIG91dGFsbG9jKTsKKwkJCW91dHBvcyA9IG91dCArIHNvZmFyOworCQkJb3V0c3ogPSBvdXRhbGxvYyAtIHNvZmFyIC0gMTsKKwkJfQorCQllbHNlIHsKKwkJCSpvdXRwb3MgPSAnXDAnOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIG91dDsKK30KKworY2hhciAqcmVlbmNvZGVfc3RyaW5nKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpvdXRfZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmluX2VuY29kaW5nKQoreworCWljb252X3QgY29udjsKKwljaGFyICpvdXQ7CisKKwlpZiAoIWluX2VuY29kaW5nKQorCQlyZXR1cm4gTlVMTDsKKwljb252ID0gaWNvbnZfb3BlbihvdXRfZW5jb2RpbmcsIGluX2VuY29kaW5nKTsKKwlpZiAoY29udiA9PSAoaWNvbnZfdCkgLTEpCisJCXJldHVybiBOVUxMOworCW91dCA9IHJlZW5jb2RlX3N0cmluZ19pY29udihpbiwgc3RybGVuKGluKSwgY29udik7CisJaWNvbnZfY2xvc2UoY29udik7CisJcmV0dXJuIG91dDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdXRmOC5oIGIvdXRmOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMGFlNzYKLS0tIC9kZXYvbnVsbAorKysgYi91dGY4LmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBHSVRfVVRGOF9ICisjZGVmaW5lIEdJVF9VVEY4X0gKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdWNzX2NoYXJfdDsgIC8qIGFzc3VtaW5nIDMyYml0IGludCAqLworCitpbnQgdXRmOF93aWR0aChjb25zdCBjaGFyICoqc3RhcnQsIHNpemVfdCAqcmVtYWluZGVyX3ApOworaW50IHV0Zjhfc3Ryd2lkdGgoY29uc3QgY2hhciAqc3RyaW5nKTsKK2ludCBpc191dGY4KGNvbnN0IGNoYXIgKnRleHQpOworaW50IGlzX2VuY29kaW5nX3V0ZjgoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBzdHJidWZfYWRkX3dyYXBwZWRfdGV4dChzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCWNvbnN0IGNoYXIgKnRleHQsIGludCBpbmRlbnQsIGludCBpbmRlbnQyLCBpbnQgd2lkdGgpOworaW50IHN0cmJ1Zl9hZGRfd3JhcHBlZF9ieXRlcyhzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4sCisJCQkgICAgIGludCBpbmRlbnQsIGludCBpbmRlbnQyLCBpbnQgd2lkdGgpOworCisjaWZuZGVmIE5PX0lDT05WCitjaGFyICpyZWVuY29kZV9zdHJpbmdfaWNvbnYoY29uc3QgY2hhciAqaW4sIHNpemVfdCBpbnN6LCBpY29udl90IGNvbnYpOworY2hhciAqcmVlbmNvZGVfc3RyaW5nKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpvdXRfZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmluX2VuY29kaW5nKTsKKyNlbHNlCisjZGVmaW5lIHJlZW5jb2RlX3N0cmluZyhhLGIsYykgTlVMTAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmFyaW50LmMgYi92YXJpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWQ3NzI5Ci0tLSAvZGV2L251bGwKKysrIGIvdmFyaW50LmMKQEAgLTAsMCArMSwyOSBAQAorI2luY2x1ZGUgInZhcmludC5oIgorCit1aW50bWF4X3QgZGVjb2RlX3ZhcmludChjb25zdCB1bnNpZ25lZCBjaGFyICoqYnVmcCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpidWYgPSAqYnVmcDsKKwl1bnNpZ25lZCBjaGFyIGMgPSAqYnVmKys7CisJdWludG1heF90IHZhbCA9IGMgJiAxMjc7CisJd2hpbGUgKGMgJiAxMjgpIHsKKwkJdmFsICs9IDE7CisJCWlmICghdmFsIHx8IE1TQih2YWwsIDcpKQorCQkJcmV0dXJuIDA7IC8qIG92ZXJmbG93ICovCisJCWMgPSAqYnVmKys7CisJCXZhbCA9ICh2YWwgPDwgNykgKyAoYyAmIDEyNyk7CisJfQorCSpidWZwID0gYnVmOworCXJldHVybiB2YWw7Cit9CisKK2ludCBlbmNvZGVfdmFyaW50KHVpbnRtYXhfdCB2YWx1ZSwgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXVuc2lnbmVkIGNoYXIgdmFyaW50WzE2XTsKKwl1bnNpZ25lZCBwb3MgPSBzaXplb2YodmFyaW50KSAtIDE7CisJdmFyaW50W3Bvc10gPSB2YWx1ZSAmIDEyNzsKKwl3aGlsZSAodmFsdWUgPj49IDcpCisJCXZhcmludFstLXBvc10gPSAxMjggfCAoLS12YWx1ZSAmIDEyNyk7CisJaWYgKGJ1ZikKKwkJbWVtY3B5KGJ1ZiwgdmFyaW50ICsgcG9zLCBzaXplb2YodmFyaW50KSAtIHBvcyk7CisJcmV0dXJuIHNpemVvZih2YXJpbnQpIC0gcG9zOworfQpkaWZmIC0tZ2l0IGEvdmFyaW50LmggYi92YXJpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzIxMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdmFyaW50LmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIFZBUklOVF9ICisjZGVmaW5lIFZBUklOVF9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworZXh0ZXJuIGludCBlbmNvZGVfdmFyaW50KHVpbnRtYXhfdCwgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybiB1aW50bWF4X3QgZGVjb2RlX3ZhcmludChjb25zdCB1bnNpZ25lZCBjaGFyICoqKTsKKworI2VuZGlmIC8qIFZBUklOVF9IICovCmRpZmYgLS1naXQgYS92Y3Mtc3ZuL0xJQ0VOU0UgYi92Y3Mtc3ZuL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI5MTg1OAotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vTElDRU5TRQpAQCAtMCwwICsxLDMyIEBACitDb3B5cmlnaHQgKEMpIDIwMTAgRGF2aWQgQmFyciA8ZGF2aWQuYmFyckBjb3JkZWx0YS5jb20+LgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworQ29weXJpZ2h0IChDKSAyMDEwIEpvbmF0aGFuIE5pZWRlciA8anJuaWVkZXJAZ21haWwuY29tPi4KKworQ29weXJpZ2h0IChDKSAyMDA1IFN0ZWZhbiBIZWdueSwgaHlkcm9ncmFmaXggQ29uc3VsdGluZyBHbWJILAorRnJhbmtmdXJ0L01haW4sIEdlcm1hbnkKK2FuZCBvdGhlcnMsIHNlZSBodHRwOi8vc3ZuMmNjLnNhcm92YXIub3JnCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZShzKSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICAgdW5tb2RpZmllZCBvdGhlciB0aGFuIHRoZSBhbGxvd2FibGUgYWRkaXRpb24gb2Ygb25lIG9yIG1vcmUKKyAgIGNvcHlyaWdodCBub3RpY2VzLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZShzKSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIGBgQVMgSVMnJyBBTkQgQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKK0JVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKK09SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCitFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9mYXN0X2V4cG9ydC5jIGIvdmNzLXN2bi9mYXN0X2V4cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMDQ2OTcKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL2Zhc3RfZXhwb3J0LmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiBMaWNlbnNlZCB1bmRlciBhIHR3by1jbGF1c2UgQlNELXN0eWxlIGxpY2Vuc2UuCisgKiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJmYXN0X2V4cG9ydC5oIgorI2luY2x1ZGUgInJlcG9fdHJlZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInN2bmRpZmYuaCIKKyNpbmNsdWRlICJzbGlkaW5nX3dpbmRvdy5oIgorI2luY2x1ZGUgImxpbmVfYnVmZmVyLmgiCisKKyNkZWZpbmUgTUFYX0dJVFNWTl9MSU5FX0xFTiA0MDk2CisKK3N0YXRpYyB1aW50MzJfdCBmaXJzdF9jb21taXRfZG9uZTsKK3N0YXRpYyBzdHJ1Y3QgbGluZV9idWZmZXIgcG9zdGltYWdlID0gTElORV9CVUZGRVJfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgbGluZV9idWZmZXIgcmVwb3J0X2J1ZmZlciA9IExJTkVfQlVGRkVSX0lOSVQ7CisKKy8qIE5FRURTV09SSzogbW92ZSB0byBmYXN0X2V4cG9ydF9pbml0KCkgKi8KK3N0YXRpYyBpbnQgaW5pdF9wb3N0aW1hZ2Uodm9pZCkKK3sKKwlzdGF0aWMgaW50IHBvc3RpbWFnZV9pbml0aWFsaXplZDsKKwlpZiAocG9zdGltYWdlX2luaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKwlwb3N0aW1hZ2VfaW5pdGlhbGl6ZWQgPSAxOworCXJldHVybiBidWZmZXJfdG1wZmlsZV9pbml0KCZwb3N0aW1hZ2UpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2luaXQoaW50IGZkKQoreworCWZpcnN0X2NvbW1pdF9kb25lID0gMDsKKwlpZiAoYnVmZmVyX2ZkaW5pdCgmcmVwb3J0X2J1ZmZlciwgZmQpKQorCQlkaWVfZXJybm8oImNhbm5vdCByZWFkIGZyb20gZmlsZSBkZXNjcmlwdG9yICVkIiwgZmQpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2RlaW5pdCh2b2lkKQoreworCWlmIChidWZmZXJfZGVpbml0KCZyZXBvcnRfYnVmZmVyKSkKKwkJZGllX2Vycm5vKCJlcnJvciBjbG9zaW5nIGZhc3QtaW1wb3J0IGZlZWRiYWNrIHN0cmVhbSIpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2RlbGV0ZShjb25zdCBjaGFyICpwYXRoKQoreworCXB1dGNoYXIoJ0QnKTsKKwlwdXRjaGFyKCcgJyk7CisJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyB2b2lkIGZhc3RfZXhwb3J0X3RydW5jYXRlKGNvbnN0IGNoYXIgKnBhdGgsIHVpbnQzMl90IG1vZGUpCit7CisJZmFzdF9leHBvcnRfbW9kaWZ5KHBhdGgsIG1vZGUsICJpbmxpbmUiKTsKKwlwcmludGYoImRhdGEgMFxuXG4iKTsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9tb2RpZnkoY29uc3QgY2hhciAqcGF0aCwgdWludDMyX3QgbW9kZSwgY29uc3QgY2hhciAqZGF0YXJlZikKK3sKKwkvKiBNb2RlIG11c3QgYmUgMTAwNjQ0LCAxMDA3NTUsIDEyMDAwMCwgb3IgMTYwMDAwLiAqLworCWlmICghZGF0YXJlZikgeworCQlmYXN0X2V4cG9ydF90cnVuY2F0ZShwYXRoLCBtb2RlKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIk0gJTA2IlBSSW8zMiIgJXMgIiwgbW9kZSwgZGF0YXJlZik7CisJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyBjaGFyIGdpdHN2bmxpbmVbTUFYX0dJVFNWTl9MSU5FX0xFTl07Cit2b2lkIGZhc3RfZXhwb3J0X2JlZ2luX2NvbW1pdCh1aW50MzJfdCByZXZpc2lvbiwgY29uc3QgY2hhciAqYXV0aG9yLAorCQkJY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbG9nLAorCQkJY29uc3QgY2hhciAqdXVpZCwgY29uc3QgY2hhciAqdXJsLAorCQkJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXApCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzdHJidWYgZW1wdHkgPSBTVFJCVUZfSU5JVDsKKwlpZiAoIWxvZykKKwkJbG9nID0gJmVtcHR5OworCWlmICgqdXVpZCAmJiAqdXJsKSB7CisJCXNucHJpbnRmKGdpdHN2bmxpbmUsIE1BWF9HSVRTVk5fTElORV9MRU4sCisJCQkJIlxuXG5naXQtc3ZuLWlkOiAlc0AlIlBSSXUzMiIgJXNcbiIsCisJCQkJIHVybCwgcmV2aXNpb24sIHV1aWQpOworCX0gZWxzZSB7CisJCSpnaXRzdm5saW5lID0gJ1wwJzsKKwl9CisJcHJpbnRmKCJjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXJcbiIpOworCXByaW50ZigibWFyayA6JSJQUkl1MzIiXG4iLCByZXZpc2lvbik7CisJcHJpbnRmKCJjb21taXR0ZXIgJXMgPCVzQCVzPiAlbGQgKzAwMDBcbiIsCisJCSAgICphdXRob3IgPyBhdXRob3IgOiAibm9ib2R5IiwKKwkJICAgKmF1dGhvciA/IGF1dGhvciA6ICJub2JvZHkiLAorCQkgICAqdXVpZCA/IHV1aWQgOiAibG9jYWwiLCB0aW1lc3RhbXApOworCXByaW50ZigiZGF0YSAlIlBSSXVNQVgiXG4iLAorCQkodWludG1heF90KSAobG9nLT5sZW4gKyBzdHJsZW4oZ2l0c3ZubGluZSkpKTsKKwlmd3JpdGUobG9nLT5idWYsIGxvZy0+bGVuLCAxLCBzdGRvdXQpOworCXByaW50ZigiJXNcbiIsIGdpdHN2bmxpbmUpOworCWlmICghZmlyc3RfY29tbWl0X2RvbmUpIHsKKwkJaWYgKHJldmlzaW9uID4gMSkKKwkJCXByaW50ZigiZnJvbSA6JSJQUkl1MzIiXG4iLCByZXZpc2lvbiAtIDEpOworCQlmaXJzdF9jb21taXRfZG9uZSA9IDE7CisJfQorfQorCit2b2lkIGZhc3RfZXhwb3J0X2VuZF9jb21taXQodWludDMyX3QgcmV2aXNpb24pCit7CisJcHJpbnRmKCJwcm9ncmVzcyBJbXBvcnRlZCBjb21taXQgJSJQUkl1MzIiLlxuXG4iLCByZXZpc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkIGxzX2Zyb21fcmV2KHVpbnQzMl90IHJldiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwkvKiBscyA6NSBwYXRoL3RvL29sZC9maWxlICovCisJcHJpbnRmKCJscyA6JSJQUkl1MzIiICIsIHJldik7CisJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCXB1dGNoYXIoJ1xuJyk7CisJZmZsdXNoKHN0ZG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGxzX2Zyb21fYWN0aXZlX2NvbW1pdChjb25zdCBjaGFyICpwYXRoKQoreworCS8qIGxzICJwYXRoL3RvL2ZpbGUiICovCisJcHJpbnRmKCJscyBcIiIpOworCXF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgc3Rkb3V0LCAxKTsKKwlwcmludGYoIlwiXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZXNwb25zZV9saW5lKHZvaWQpCit7CisJY29uc3QgY2hhciAqbGluZSA9IGJ1ZmZlcl9yZWFkX2xpbmUoJnJlcG9ydF9idWZmZXIpOworCWlmIChsaW5lKQorCQlyZXR1cm4gbGluZTsKKwlpZiAoYnVmZmVyX2ZlcnJvcigmcmVwb3J0X2J1ZmZlcikpCisJCWRpZV9lcnJubygiZXJyb3IgcmVhZGluZyBmcm9tIGZhc3QtaW1wb3J0Iik7CisJZGllKCJ1bmV4cGVjdGVkIGVuZCBvZiBmYXN0LWltcG9ydCBmZWVkYmFjayIpOworfQorCitzdGF0aWMgdm9pZCBkaWVfc2hvcnRfcmVhZChzdHJ1Y3QgbGluZV9idWZmZXIgKmlucHV0KQoreworCWlmIChidWZmZXJfZmVycm9yKGlucHV0KSkKKwkJZGllX2Vycm5vKCJlcnJvciByZWFkaW5nIGR1bXAgZmlsZSIpOworCWRpZSgiaW52YWxpZCBkdW1wOiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7Cit9CisKK3N0YXRpYyBpbnQgZW5kc193aXRoKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwljb25zdCBzaXplX3Qgc3VmZml4bGVuID0gc3RybGVuKHN1ZmZpeCk7CisJaWYgKGxlbiA8IHN1ZmZpeGxlbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFtZW1jbXAocyArIGxlbiAtIHN1ZmZpeGxlbiwgc3VmZml4LCBzdWZmaXhsZW4pOworfQorCitzdGF0aWMgaW50IHBhcnNlX2NhdF9yZXNwb25zZV9saW5lKGNvbnN0IGNoYXIgKmhlYWRlciwgb2ZmX3QgKmxlbikKK3sKKwlzaXplX3QgaGVhZGVybGVuID0gc3RybGVuKGhlYWRlcik7CisJdWludG1heF90IG47CisJY29uc3QgY2hhciAqdHlwZTsKKwljb25zdCBjaGFyICplbmQ7CisKKwlpZiAoZW5kc193aXRoKGhlYWRlciwgaGVhZGVybGVuLCAiIG1pc3NpbmciKSkKKwkJcmV0dXJuIGVycm9yKCJjYXQtYmxvYiByZXBvcnRzIG1pc3NpbmcgYmxvYjogJXMiLCBoZWFkZXIpOworCXR5cGUgPSBzdHJzdHIoaGVhZGVyLCAiIGJsb2IgIik7CisJaWYgKCF0eXBlKQorCQlyZXR1cm4gZXJyb3IoImNhdC1ibG9iIGhlYWRlciBoYXMgd3Jvbmcgb2JqZWN0IHR5cGU6ICVzIiwgaGVhZGVyKTsKKwluID0gc3RydG91bWF4KHR5cGUgKyBzdHJsZW4oIiBibG9iICIpLCAoY2hhciAqKikgJmVuZCwgMTApOworCWlmIChlbmQgPT0gdHlwZSArIHN0cmxlbigiIGJsb2IgIikpCisJCXJldHVybiBlcnJvcigiY2F0LWJsb2IgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gbGVuZ3RoOiAlcyIsIGhlYWRlcik7CisJaWYgKG1lbWNocih0eXBlICsgc3RybGVuKCIgYmxvYiAiKSwgJy0nLCBlbmQgLSB0eXBlIC0gc3RybGVuKCIgYmxvYiAiKSkpCisJCXJldHVybiBlcnJvcigiY2F0LWJsb2IgaGVhZGVyIGNvbnRhaW5zIG5lZ2F0aXZlIGxlbmd0aDogJXMiLCBoZWFkZXIpOworCWlmIChuID09IFVJTlRNQVhfTUFYIHx8IG4gPiBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKG9mZl90KSkKKwkJcmV0dXJuIGVycm9yKCJibG9iIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90Iik7CisJKmxlbiA9IG47CisJaWYgKCplbmQpCisJCXJldHVybiBlcnJvcigiY2F0LWJsb2IgaGVhZGVyIGNvbnRhaW5zIGdhcmJhZ2UgYWZ0ZXIgbGVuZ3RoOiAlcyIsIGhlYWRlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3ByZWltYWdlX292ZXJmbG93KG9mZl90IGEsIG9mZl90IGIpCit7CisJaWYgKHNpZ25lZF9hZGRfb3ZlcmZsb3dzKGEsIGIpKQorCQlkaWUoImJsb2IgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiKTsKK30KKworc3RhdGljIGxvbmcgYXBwbHlfZGVsdGEob2ZmX3QgbGVuLCBzdHJ1Y3QgbGluZV9idWZmZXIgKmlucHV0LAorCQkJY29uc3QgY2hhciAqb2xkX2RhdGEsIHVpbnQzMl90IG9sZF9tb2RlKQoreworCWxvbmcgcmV0OworCXN0cnVjdCBzbGlkaW5nX3ZpZXcgcHJlaW1hZ2UgPSBTTElESU5HX1ZJRVdfSU5JVCgmcmVwb3J0X2J1ZmZlciwgMCk7CisJRklMRSAqb3V0OworCisJaWYgKGluaXRfcG9zdGltYWdlKCkgfHwgIShvdXQgPSBidWZmZXJfdG1wZmlsZV9yZXdpbmQoJnBvc3RpbWFnZSkpKQorCQlkaWUoImNhbm5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIGZvciBibG9iIHJldHJpZXZhbCIpOworCWlmIChvbGRfZGF0YSkgeworCQljb25zdCBjaGFyICpyZXNwb25zZTsKKwkJcHJpbnRmKCJjYXQtYmxvYiAlc1xuIiwgb2xkX2RhdGEpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmVzcG9uc2UgPSBnZXRfcmVzcG9uc2VfbGluZSgpOworCQlpZiAocGFyc2VfY2F0X3Jlc3BvbnNlX2xpbmUocmVzcG9uc2UsICZwcmVpbWFnZS5tYXhfb2ZmKSkKKwkJCWRpZSgiaW52YWxpZCBjYXQtYmxvYiByZXNwb25zZTogJXMiLCByZXNwb25zZSk7CisJCWNoZWNrX3ByZWltYWdlX292ZXJmbG93KHByZWltYWdlLm1heF9vZmYsIDEpOworCX0KKwlpZiAob2xkX21vZGUgPT0gUkVQT19NT0RFX0xOSykgeworCQlzdHJidWZfYWRkc3RyKCZwcmVpbWFnZS5idWYsICJsaW5rICIpOworCQljaGVja19wcmVpbWFnZV9vdmVyZmxvdyhwcmVpbWFnZS5tYXhfb2ZmLCBzdHJsZW4oImxpbmsgIikpOworCQlwcmVpbWFnZS5tYXhfb2ZmICs9IHN0cmxlbigibGluayAiKTsKKwkJY2hlY2tfcHJlaW1hZ2Vfb3ZlcmZsb3cocHJlaW1hZ2UubWF4X29mZiwgMSk7CisJfQorCWlmIChzdm5kaWZmMF9hcHBseShpbnB1dCwgbGVuLCAmcHJlaW1hZ2UsIG91dCkpCisJCWRpZSgiY2Fubm90IGFwcGx5IGRlbHRhIik7CisJaWYgKG9sZF9kYXRhKSB7CisJCS8qIFJlYWQgdGhlIHJlbWFpbmRlciBvZiBwcmVpbWFnZSBhbmQgdHJhaWxpbmcgbmV3bGluZS4gKi8KKwkJYXNzZXJ0KCFzaWduZWRfYWRkX292ZXJmbG93cyhwcmVpbWFnZS5tYXhfb2ZmLCAxKSk7CisJCXByZWltYWdlLm1heF9vZmYrKzsJLyogcm9vbSBmb3IgbmV3bGluZSAqLworCQlpZiAobW92ZV93aW5kb3coJnByZWltYWdlLCBwcmVpbWFnZS5tYXhfb2ZmIC0gMSwgMSkpCisJCQlkaWUoImNhbm5vdCBzZWVrIHRvIGVuZCBvZiBpbnB1dCIpOworCQlpZiAocHJlaW1hZ2UuYnVmLmJ1ZlswXSAhPSAnXG4nKQorCQkJZGllKCJtaXNzaW5nIG5ld2xpbmUgYWZ0ZXIgY2F0LWJsb2IgcmVzcG9uc2UiKTsKKwl9CisJcmV0ID0gYnVmZmVyX3RtcGZpbGVfcHJlcGFyZV90b19yZWFkKCZwb3N0aW1hZ2UpOworCWlmIChyZXQgPCAwKQorCQlkaWUoImNhbm5vdCByZWFkIHRlbXBvcmFyeSBmaWxlIGZvciBibG9iIHJldHJpZXZhbCIpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmVpbWFnZS5idWYpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfZGF0YSh1aW50MzJfdCBtb2RlLCBvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpCit7CisJYXNzZXJ0KGxlbiA+PSAwKTsKKwlpZiAobW9kZSA9PSBSRVBPX01PREVfTE5LKSB7CisJCS8qIHN2biBzeW1saW5rIGJsb2JzIHN0YXJ0IHdpdGggImxpbmsgIiAqLworCQlpZiAobGVuIDwgNSkKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBzeW1saW5rIHRvbyBzaG9ydCBmb3IgXCJsaW5rXCIgcHJlZml4Iik7CisJCWxlbiAtPSA1OworCQlpZiAoYnVmZmVyX3NraXBfYnl0ZXMoaW5wdXQsIDUpICE9IDUpCisJCQlkaWVfc2hvcnRfcmVhZChpbnB1dCk7CisJfQorCXByaW50ZigiZGF0YSAlIlBSSXVNQVgiXG4iLCAodWludG1heF90KSBsZW4pOworCWlmIChidWZmZXJfY29weV9ieXRlcyhpbnB1dCwgbGVuKSAhPSBsZW4pCisJCWRpZV9zaG9ydF9yZWFkKGlucHV0KTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2xzX3Jlc3BvbnNlKGNvbnN0IGNoYXIgKnJlc3BvbnNlLCB1aW50MzJfdCAqbW9kZSwKKwkJCQkJc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZikKK3sKKwljb25zdCBjaGFyICp0YWI7CisJY29uc3QgY2hhciAqcmVzcG9uc2VfZW5kOworCisJYXNzZXJ0KHJlc3BvbnNlKTsKKwlyZXNwb25zZV9lbmQgPSByZXNwb25zZSArIHN0cmxlbihyZXNwb25zZSk7CisKKwlpZiAoKnJlc3BvbnNlID09ICdtJykgewkvKiBNaXNzaW5nLiAqLworCQllcnJubyA9IEVOT0VOVDsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIE1vZGUuICovCisJaWYgKHJlc3BvbnNlX2VuZCAtIHJlc3BvbnNlIDwgKHNpZ25lZCkgc3RybGVuKCIxMDA2NDQiKSB8fAorCSAgICByZXNwb25zZVtzdHJsZW4oIjEwMDY0NCIpXSAhPSAnICcpCisJCWRpZSgiaW52YWxpZCBscyByZXNwb25zZTogbWlzc2luZyBtb2RlOiAlcyIsIHJlc3BvbnNlKTsKKwkqbW9kZSA9IDA7CisJZm9yICg7ICpyZXNwb25zZSAhPSAnICc7IHJlc3BvbnNlKyspIHsKKwkJY2hhciBjaCA9ICpyZXNwb25zZTsKKwkJaWYgKGNoIDwgJzAnIHx8IGNoID4gJzcnKQorCQkJZGllKCJpbnZhbGlkIGxzIHJlc3BvbnNlOiBtb2RlIGlzIG5vdCBvY3RhbDogJXMiLCByZXNwb25zZSk7CisJCSptb2RlICo9IDg7CisJCSptb2RlICs9IGNoIC0gJzAnOworCX0KKworCS8qICcgYmxvYiAnIG9yICcgdHJlZSAnICovCisJaWYgKHJlc3BvbnNlX2VuZCAtIHJlc3BvbnNlIDwgKHNpZ25lZCkgc3RybGVuKCIgYmxvYiAiKSB8fAorCSAgICAocmVzcG9uc2VbMV0gIT0gJ2InICYmIHJlc3BvbnNlWzFdICE9ICd0JykpCisJCWRpZSgidW5leHBlY3RlZCBscyByZXNwb25zZTogbm90IGEgdHJlZSBvciBibG9iOiAlcyIsIHJlc3BvbnNlKTsKKwlyZXNwb25zZSArPSBzdHJsZW4oIiBibG9iICIpOworCisJLyogRGF0YXJlZi4gKi8KKwl0YWIgPSBtZW1jaHIocmVzcG9uc2UsICdcdCcsIHJlc3BvbnNlX2VuZCAtIHJlc3BvbnNlKTsKKwlpZiAoIXRhYikKKwkJZGllKCJpbnZhbGlkIGxzIHJlc3BvbnNlOiBtaXNzaW5nIHRhYjogJXMiLCByZXNwb25zZSk7CisJc3RyYnVmX2FkZChkYXRhcmVmLCByZXNwb25zZSwgdGFiIC0gcmVzcG9uc2UpOworCXJldHVybiAwOworfQorCitpbnQgZmFzdF9leHBvcnRfbHNfcmV2KHVpbnQzMl90IHJldiwgY29uc3QgY2hhciAqcGF0aCwKKwkJCQl1aW50MzJfdCAqbW9kZSwgc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZikKK3sKKwlsc19mcm9tX3JldihyZXYsIHBhdGgpOworCXJldHVybiBwYXJzZV9sc19yZXNwb25zZShnZXRfcmVzcG9uc2VfbGluZSgpLCBtb2RlLCBkYXRhcmVmKTsKK30KKworaW50IGZhc3RfZXhwb3J0X2xzKGNvbnN0IGNoYXIgKnBhdGgsIHVpbnQzMl90ICptb2RlLCBzdHJ1Y3Qgc3RyYnVmICpkYXRhcmVmKQoreworCWxzX2Zyb21fYWN0aXZlX2NvbW1pdChwYXRoKTsKKwlyZXR1cm4gcGFyc2VfbHNfcmVzcG9uc2UoZ2V0X3Jlc3BvbnNlX2xpbmUoKSwgbW9kZSwgZGF0YXJlZik7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfYmxvYl9kZWx0YSh1aW50MzJfdCBtb2RlLAorCQkJCXVpbnQzMl90IG9sZF9tb2RlLCBjb25zdCBjaGFyICpvbGRfZGF0YSwKKwkJCQlvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpCit7CisJbG9uZyBwb3N0aW1hZ2VfbGVuOworCisJYXNzZXJ0KGxlbiA+PSAwKTsKKwlwb3N0aW1hZ2VfbGVuID0gYXBwbHlfZGVsdGEobGVuLCBpbnB1dCwgb2xkX2RhdGEsIG9sZF9tb2RlKTsKKwlpZiAobW9kZSA9PSBSRVBPX01PREVfTE5LKSB7CisJCWJ1ZmZlcl9za2lwX2J5dGVzKCZwb3N0aW1hZ2UsIHN0cmxlbigibGluayAiKSk7CisJCXBvc3RpbWFnZV9sZW4gLT0gc3RybGVuKCJsaW5rICIpOworCX0KKwlwcmludGYoImRhdGEgJWxkXG4iLCBwb3N0aW1hZ2VfbGVuKTsKKwlidWZmZXJfY29weV9ieXRlcygmcG9zdGltYWdlLCBwb3N0aW1hZ2VfbGVuKTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworfQpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9mYXN0X2V4cG9ydC5oIGIvdmNzLXN2bi9mYXN0X2V4cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjNhY2EKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL2Zhc3RfZXhwb3J0LmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBGQVNUX0VYUE9SVF9IXworI2RlZmluZSBGQVNUX0VYUE9SVF9IXworCitzdHJ1Y3Qgc3RyYnVmOworc3RydWN0IGxpbmVfYnVmZmVyOworCit2b2lkIGZhc3RfZXhwb3J0X2luaXQoaW50IGZkKTsKK3ZvaWQgZmFzdF9leHBvcnRfZGVpbml0KHZvaWQpOworCit2b2lkIGZhc3RfZXhwb3J0X2RlbGV0ZShjb25zdCBjaGFyICpwYXRoKTsKK3ZvaWQgZmFzdF9leHBvcnRfbW9kaWZ5KGNvbnN0IGNoYXIgKnBhdGgsIHVpbnQzMl90IG1vZGUsIGNvbnN0IGNoYXIgKmRhdGFyZWYpOwordm9pZCBmYXN0X2V4cG9ydF9iZWdpbl9jb21taXQodWludDMyX3QgcmV2aXNpb24sIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJCWNvbnN0IHN0cnVjdCBzdHJidWYgKmxvZywgY29uc3QgY2hhciAqdXVpZCwKKwkJCWNvbnN0IGNoYXIgKnVybCwgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXApOwordm9pZCBmYXN0X2V4cG9ydF9lbmRfY29tbWl0KHVpbnQzMl90IHJldmlzaW9uKTsKK3ZvaWQgZmFzdF9leHBvcnRfZGF0YSh1aW50MzJfdCBtb2RlLCBvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpOwordm9pZCBmYXN0X2V4cG9ydF9ibG9iX2RlbHRhKHVpbnQzMl90IG1vZGUsCisJCQl1aW50MzJfdCBvbGRfbW9kZSwgY29uc3QgY2hhciAqb2xkX2RhdGEsCisJCQlvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpOworCisvKiBJZiB0aGVyZSBpcyBubyBzdWNoIGZpbGUgYXQgdGhhdCByZXYsIHJldHVybnMgLTEsIGVycm5vID09IEVOT0VOVC4gKi8KK2ludCBmYXN0X2V4cG9ydF9sc19yZXYodWludDMyX3QgcmV2LCBjb25zdCBjaGFyICpwYXRoLAorCQkJdWludDMyX3QgKm1vZGVfb3V0LCBzdHJ1Y3Qgc3RyYnVmICpkYXRhcmVmX291dCk7CitpbnQgZmFzdF9leHBvcnRfbHMoY29uc3QgY2hhciAqcGF0aCwKKwkJCXVpbnQzMl90ICptb2RlX291dCwgc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZl9vdXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Zjcy1zdm4vbGluZV9idWZmZXIuYyBiL3Zjcy1zdm4vbGluZV9idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2NjMWNlCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9saW5lX2J1ZmZlci5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogTGljZW5zZWQgdW5kZXIgYSB0d28tY2xhdXNlIEJTRC1zdHlsZSBsaWNlbnNlLgorICogU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImxpbmVfYnVmZmVyLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKyNkZWZpbmUgQ09QWV9CVUZGRVJfTEVOIDQwOTYKKworaW50IGJ1ZmZlcl9pbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlidWYtPmluZmlsZSA9IGZpbGVuYW1lID8gZm9wZW4oZmlsZW5hbWUsICJyIikgOiBzdGRpbjsKKwlpZiAoIWJ1Zi0+aW5maWxlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBidWZmZXJfZmRpbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBpbnQgZmQpCit7CisJYnVmLT5pbmZpbGUgPSBmZG9wZW4oZmQsICJyIik7CisJaWYgKCFidWYtPmluZmlsZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitpbnQgYnVmZmVyX3RtcGZpbGVfaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZikKK3sKKwlidWYtPmluZmlsZSA9IHRtcGZpbGUoKTsKKwlpZiAoIWJ1Zi0+aW5maWxlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBidWZmZXJfZGVpbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKQoreworCWludCBlcnI7CisJaWYgKGJ1Zi0+aW5maWxlID09IHN0ZGluKQorCQlyZXR1cm4gZmVycm9yKGJ1Zi0+aW5maWxlKTsKKwllcnIgPSBmZXJyb3IoYnVmLT5pbmZpbGUpOworCWVyciB8PSBmY2xvc2UoYnVmLT5pbmZpbGUpOworCXJldHVybiBlcnI7Cit9CisKK0ZJTEUgKmJ1ZmZlcl90bXBmaWxlX3Jld2luZChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZikKK3sKKwlyZXdpbmQoYnVmLT5pbmZpbGUpOworCXJldHVybiBidWYtPmluZmlsZTsKK30KKworbG9uZyBidWZmZXJfdG1wZmlsZV9wcmVwYXJlX3RvX3JlYWQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJbG9uZyBwb3MgPSBmdGVsbChidWYtPmluZmlsZSk7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiBlcnJvcigiZnRlbGwgZXJyb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwlpZiAoZnNlZWsoYnVmLT5pbmZpbGUsIDAsIFNFRUtfU0VUKSkKKwkJcmV0dXJuIGVycm9yKCJzZWVrIGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIHBvczsKK30KKworaW50IGJ1ZmZlcl9mZXJyb3Ioc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJcmV0dXJuIGZlcnJvcihidWYtPmluZmlsZSk7Cit9CisKK2ludCBidWZmZXJfcmVhZF9jaGFyKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKQoreworCXJldHVybiBmZ2V0YyhidWYtPmluZmlsZSk7Cit9CisKKy8qIFJlYWQgYSBsaW5lIHdpdGhvdXQgdHJhaWxpbmcgbmV3bGluZS4gKi8KK2NoYXIgKmJ1ZmZlcl9yZWFkX2xpbmUoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJY2hhciAqZW5kOworCWlmICghZmdldHMoYnVmLT5saW5lX2J1ZmZlciwgc2l6ZW9mKGJ1Zi0+bGluZV9idWZmZXIpLCBidWYtPmluZmlsZSkpCisJCS8qIEVycm9yIG9yIGRhdGEgZXhoYXVzdGVkLiAqLworCQlyZXR1cm4gTlVMTDsKKwllbmQgPSBidWYtPmxpbmVfYnVmZmVyICsgc3RybGVuKGJ1Zi0+bGluZV9idWZmZXIpOworCWlmIChlbmRbLTFdID09ICdcbicpCisJCWVuZFstMV0gPSAnXDAnOworCWVsc2UgaWYgKGZlb2YoYnVmLT5pbmZpbGUpKQorCQk7IC8qIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUuICBUaGF0J3MgZmluZS4gKi8KKwllbHNlCisJCS8qCisJCSAqIExpbmUgd2FzIHRvbyBsb25nLgorCQkgKiBUaGVyZSBpcyBwcm9iYWJseSBhIHNhbmVyIHdheSB0byBkZWFsIHdpdGggdGhpcywKKwkJICogYnV0IGZvciBub3cgbGV0J3MgcmV0dXJuIGFuIGVycm9yLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGJ1Zi0+bGluZV9idWZmZXI7Cit9CisKK3NpemVfdCBidWZmZXJfcmVhZF9iaW5hcnkoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsCisJCQkJc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBzaXplKQoreworCXJldHVybiBzdHJidWZfZnJlYWQoc2IsIHNpemUsIGJ1Zi0+aW5maWxlKTsKK30KKworb2ZmX3QgYnVmZmVyX2NvcHlfYnl0ZXMoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIG9mZl90IG5ieXRlcykKK3sKKwljaGFyIGJ5dGVfYnVmZmVyW0NPUFlfQlVGRkVSX0xFTl07CisJb2ZmX3QgZG9uZSA9IDA7CisJd2hpbGUgKGRvbmUgPCBuYnl0ZXMgJiYgIWZlb2YoYnVmLT5pbmZpbGUpICYmICFmZXJyb3IoYnVmLT5pbmZpbGUpKSB7CisJCW9mZl90IGxlbiA9IG5ieXRlcyAtIGRvbmU7CisJCXNpemVfdCBpbiA9IGxlbiA8IENPUFlfQlVGRkVSX0xFTiA/IGxlbiA6IENPUFlfQlVGRkVSX0xFTjsKKwkJaW4gPSBmcmVhZChieXRlX2J1ZmZlciwgMSwgaW4sIGJ1Zi0+aW5maWxlKTsKKwkJZG9uZSArPSBpbjsKKwkJZndyaXRlKGJ5dGVfYnVmZmVyLCAxLCBpbiwgc3Rkb3V0KTsKKwkJaWYgKGZlcnJvcihzdGRvdXQpKQorCQkJcmV0dXJuIGRvbmUgKyBidWZmZXJfc2tpcF9ieXRlcyhidWYsIG5ieXRlcyAtIGRvbmUpOworCX0KKwlyZXR1cm4gZG9uZTsKK30KKworb2ZmX3QgYnVmZmVyX3NraXBfYnl0ZXMoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIG9mZl90IG5ieXRlcykKK3sKKwljaGFyIGJ5dGVfYnVmZmVyW0NPUFlfQlVGRkVSX0xFTl07CisJb2ZmX3QgZG9uZSA9IDA7CisJd2hpbGUgKGRvbmUgPCBuYnl0ZXMgJiYgIWZlb2YoYnVmLT5pbmZpbGUpICYmICFmZXJyb3IoYnVmLT5pbmZpbGUpKSB7CisJCW9mZl90IGxlbiA9IG5ieXRlcyAtIGRvbmU7CisJCXNpemVfdCBpbiA9IGxlbiA8IENPUFlfQlVGRkVSX0xFTiA/IGxlbiA6IENPUFlfQlVGRkVSX0xFTjsKKwkJZG9uZSArPSBmcmVhZChieXRlX2J1ZmZlciwgMSwgaW4sIGJ1Zi0+aW5maWxlKTsKKwl9CisJcmV0dXJuIGRvbmU7Cit9CmRpZmYgLS1naXQgYS92Y3Mtc3ZuL2xpbmVfYnVmZmVyLmggYi92Y3Mtc3ZuL2xpbmVfYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyM2I0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vbGluZV9idWZmZXIuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIExJTkVfQlVGRkVSX0hfCisjZGVmaW5lIExJTkVfQlVGRkVSX0hfCisKKyNpbmNsdWRlICJzdHJidWYuaCIKKworI2RlZmluZSBMSU5FX0JVRkZFUl9MRU4gMTAwMDAKKworc3RydWN0IGxpbmVfYnVmZmVyIHsKKwljaGFyIGxpbmVfYnVmZmVyW0xJTkVfQlVGRkVSX0xFTl07CisJRklMRSAqaW5maWxlOworfTsKKyNkZWZpbmUgTElORV9CVUZGRVJfSU5JVCB7ICIiLCBOVUxMIH0KKworaW50IGJ1ZmZlcl9pbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitpbnQgYnVmZmVyX2ZkaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZiwgaW50IGZkKTsKK2ludCBidWZmZXJfZGVpbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKTsKKworaW50IGJ1ZmZlcl90bXBmaWxlX2luaXQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpOworRklMRSAqYnVmZmVyX3RtcGZpbGVfcmV3aW5kKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKTsJLyogcHJlcGFyZSB0byB3cml0ZS4gKi8KK2xvbmcgYnVmZmVyX3RtcGZpbGVfcHJlcGFyZV90b19yZWFkKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKTsKKworaW50IGJ1ZmZlcl9mZXJyb3Ioc3RydWN0IGxpbmVfYnVmZmVyICpidWYpOworY2hhciAqYnVmZmVyX3JlYWRfbGluZShzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Zik7CitpbnQgYnVmZmVyX3JlYWRfY2hhcihzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Zik7CitzaXplX3QgYnVmZmVyX3JlYWRfYmluYXJ5KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IGxlbik7CisvKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkIChub3QgbmVjZXNzYXJpbHkgd3JpdHRlbikuICovCitvZmZfdCBidWZmZXJfY29weV9ieXRlcyhzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Ziwgb2ZmX3QgbGVuKTsKK29mZl90IGJ1ZmZlcl9za2lwX2J5dGVzKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBvZmZfdCBsZW4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Zjcy1zdm4vbGluZV9idWZmZXIudHh0IGIvdmNzLXN2bi9saW5lX2J1ZmZlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxMzllYgotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vbGluZV9idWZmZXIudHh0CkBAIC0wLDAgKzEsNzcgQEAKK2xpbmVfYnVmZmVyIEFQSQorPT09PT09PT09PT09PT09CisKK1RoZSBsaW5lX2J1ZmZlciBsaWJyYXJ5IHByb3ZpZGVzIGEgY29udmVuaWVudCBpbnRlcmZhY2UgZm9yCittb3N0bHktbGluZS1vcmllbnRlZCBpbnB1dC4KKworRWFjaCBsaW5lIGlzIG5vdCBwZXJtaXR0ZWQgdG8gZXhjZWVkIDEwMDAwIGJ5dGVzLiAgVGhlIHByb3ZpZGVkCitmdW5jdGlvbnMgYXJlIG5vdCB0aHJlYWQtc2FmZSBvciBhc3luYy1zaWduYWwtc2FmZSwgYW5kIGxpa2UKK2BmZ2V0cygpYCwgdGhleSBnZW5lcmFsbHkgZG8gbm90IGZ1bmN0aW9uIGNvcnJlY3RseSBpZiBpbnRlcnJ1cHRlZAorYnkgYSBzaWduYWwgd2l0aG91dCBTQV9SRVNUQVJUIHNldC4KKworQ2FsbGluZyBzZXF1ZW5jZQorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY2FsbGluZyBwcm9ncmFtOgorCisgLSBpbml0aWFsaXplcyBhIGBzdHJ1Y3QgbGluZV9idWZmZXJgIHRvIExJTkVfQlVGRkVSX0lOSVQKKyAtIHNwZWNpZmllcyBhIGZpbGUgdG8gcmVhZCB3aXRoIGBidWZmZXJfaW5pdGAKKyAtIHByb2Nlc3NlcyBpbnB1dCB3aXRoIGBidWZmZXJfcmVhZF9saW5lYCwgYGJ1ZmZlcl9za2lwX2J5dGVzYCwKKyAgIGFuZCBgYnVmZmVyX2NvcHlfYnl0ZXNgCisgLSBjbG9zZXMgdGhlIGZpbGUgd2l0aCBgYnVmZmVyX2RlaW5pdGAsIHBlcmhhcHMgdG8gc3RhcnQgb3ZlciBhbmQKKyAgIHJlYWQgYW5vdGhlciBmaWxlLgorCitXaGVuIGZpbmlzaGVkLCB0aGUgY2FsbGVyIGNhbiB1c2UgYGJ1ZmZlcl9yZXNldGAgdG8gZGVhbGxvY2F0ZQorcmVzb3VyY2VzLgorCitVc2luZyB0ZW1wb3JhcnkgZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUZW1wb3JhcnkgZmlsZXMgcHJvdmlkZSBhIHBsYWNlIHRvIHN0b3JlIGRhdGEgdGhhdCBzaG91bGQgbm90IG91dGxpdmUKK3RoZSBjYWxsaW5nIHByb2dyYW0uICBBIHByb2dyYW0KKworIC0gaW5pdGlhbGl6ZXMgYSBgc3RydWN0IGxpbmVfYnVmZmVyYCB0byBMSU5FX0JVRkZFUl9JTklUCisgLSByZXF1ZXN0cyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYGJ1ZmZlcl90bXBmaWxlX2luaXRgCisgLSBhY3F1aXJlcyBhbiBvdXRwdXQgaGFuZGxlIGJ5IGNhbGxpbmcgYGJ1ZmZlcl90bXBmaWxlX3Jld2luZGAKKyAtIHVzZXMgc3RhbmRhcmQgSS9PIGZ1bmN0aW9ucyBsaWtlIGBmcHJpbnRmYCBhbmQgYGZ3cml0ZWAgdG8gZmlsbAorICAgdGhlIHRlbXBvcmFyeSBmaWxlCisgLSBkZWNsYXJlcyB3cml0aW5nIGlzIG92ZXIgd2l0aCBgYnVmZmVyX3RtcGZpbGVfcHJlcGFyZV90b19yZWFkYAorIC0gY2FuIHJlLXJlYWQgd2hhdCB3YXMgd3JpdHRlbiB3aXRoIGBidWZmZXJfcmVhZF9saW5lYCwKKyAgIGBidWZmZXJfY29weV9ieXRlc2AsIGFuZCBzbyBvbgorIC0gY2FuIHJldXNlIHRoZSB0ZW1wb3JhcnkgZmlsZSBieSBjYWxsaW5nIGBidWZmZXJfdG1wZmlsZV9yZXdpbmRgCisgICBhZ2FpbgorIC0gcmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IGZpbGUgd2l0aCBgYnVmZmVyX2RlaW5pdGAsIHBlcmhhcHMgdG8KKyAgIHJldXNlIHRoZSBsaW5lX2J1ZmZlciBmb3Igc29tZSBvdGhlciBmaWxlLgorCitXaGVuIGZpbmlzaGVkLCB0aGUgY2FsbGluZyBwcm9ncmFtIGNhbiB1c2UgYGJ1ZmZlcl9yZXNldGAgdG8gZGVhbGxvY2F0ZQorcmVzb3VyY2VzLgorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCitgYnVmZmVyX2luaXRgLCBgYnVmZmVyX2ZkaW5pdGA6OgorCU9wZW4gdGhlIG5hbWVkIGZpbGUgb3IgZmlsZSBkZXNjcmlwdG9yIGZvciBpbnB1dC4KKwlidWZmZXJfaW5pdChidWYsIE5VTEwpIHByZXBhcmVzIHRvIHJlYWQgZnJvbSBzdGRpbi4KKwlPbiBmYWlsdXJlLCByZXR1cm5zIC0xICh3aXRoIGVycm5vIGluZGljYXRpbmcgdGhlIG5hdHVyZQorCW9mIHRoZSBmYWlsdXJlKS4KKworYGJ1ZmZlcl9kZWluaXRgOjoKKwlTdG9wIHJlYWRpbmcgZnJvbSB0aGUgY3VycmVudCBmaWxlIChjbG9zaW5nIGl0IHVubGVzcworCWl0IHdhcyBzdGRpbikuICBSZXR1cm5zIG5vbnplcm8gaWYgYGZjbG9zZWAgZmFpbHMgb3IKKwl0aGUgZXJyb3IgaW5kaWNhdG9yIHdhcyBzZXQuCisKK2BidWZmZXJfcmVhZF9saW5lYDo6CisJUmVhZCBhIGxpbmUgYW5kIHN0cmlwIG9mZiB0aGUgdHJhaWxpbmcgbmV3bGluZS4KKwlPbiBmYWlsdXJlIG9yIGVuZCBvZiBmaWxlLCByZXR1cm5zIE5VTEwuCisKK2BidWZmZXJfY29weV9ieXRlc2A6OgorCVJlYWQgYGxlbmAgYnl0ZXMgb2YgaW5wdXQgYW5kIGR1bXAgdGhlbSB0byB0aGUgc3RhbmRhcmQgb3V0cHV0CisJc3RyZWFtLiAgUmV0dXJucyBlYXJseSBmb3IgZXJyb3Igb3IgZW5kIG9mIGZpbGUuCisKK2BidWZmZXJfc2tpcF9ieXRlc2A6OgorCURpc2NhcmRzIGBsZW5gIGJ5dGVzIGZyb20gdGhlIGlucHV0IHN0cmVhbSAoc3RvcHBpbmcgZWFybHkKKwlpZiBuZWNlc3NhcnkgYmVjYXVzZSBvZiBhbiBlcnJvciBvciBlb2YpLiAgUmV0dXJuIHZhbHVlIGlzCisJdGhlIG51bWJlciBvZiBieXRlcyBzdWNjZXNzZnVsbHkgcmVhZC4KKworYGJ1ZmZlcl9yZXNldGA6OgorCURlYWxsb2NhdGVzIG5vbi1zdGF0aWMgYnVmZmVycy4KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vcmVwb190cmVlLmMgYi92Y3Mtc3ZuL3JlcG9fdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZDI3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL3JlcG9fdHJlZS5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBMaWNlbnNlZCB1bmRlciBhIHR3by1jbGF1c2UgQlNELXN0eWxlIGxpY2Vuc2UuCisgKiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicmVwb190cmVlLmgiCisjaW5jbHVkZSAiZmFzdF9leHBvcnQuaCIKKworY29uc3QgY2hhciAqcmVwb19yZWFkX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgdWludDMyX3QgKm1vZGVfb3V0KQoreworCWludCBlcnI7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJZXJyID0gZmFzdF9leHBvcnRfbHMocGF0aCwgbW9kZV9vdXQsICZidWYpOworCWlmIChlcnIpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCWRpZV9lcnJubygiQlVHOiB1bmV4cGVjdGVkIGZhc3RfZXhwb3J0X2xzIGVycm9yIik7CisJCS8qIFRyZWF0IG1pc3NpbmcgcGF0aHMgYXMgZGlyZWN0b3JpZXMuICovCisJCSptb2RlX291dCA9IFJFUE9fTU9ERV9ESVI7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gYnVmLmJ1ZjsKK30KKwordm9pZCByZXBvX2NvcHkodWludDMyX3QgcmV2aXNpb24sIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0KQoreworCWludCBlcnI7CisJdWludDMyX3QgbW9kZTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBkYXRhID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJmRhdGEpOworCWVyciA9IGZhc3RfZXhwb3J0X2xzX3JldihyZXZpc2lvbiwgc3JjLCAmbW9kZSwgJmRhdGEpOworCWlmIChlcnIpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCWRpZV9lcnJubygiQlVHOiB1bmV4cGVjdGVkIGZhc3RfZXhwb3J0X2xzX3JldiBlcnJvciIpOworCQlmYXN0X2V4cG9ydF9kZWxldGUoZHN0KTsKKwkJcmV0dXJuOworCX0KKwlmYXN0X2V4cG9ydF9tb2RpZnkoZHN0LCBtb2RlLCBkYXRhLmJ1Zik7Cit9CisKK3ZvaWQgcmVwb19kZWxldGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlmYXN0X2V4cG9ydF9kZWxldGUocGF0aCk7Cit9CmRpZmYgLS1naXQgYS92Y3Mtc3ZuL3JlcG9fdHJlZS5oIGIvdmNzLXN2bi9yZXBvX3RyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODljNmEzCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9yZXBvX3RyZWUuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIFJFUE9fVFJFRV9IXworI2RlZmluZSBSRVBPX1RSRUVfSF8KKworc3RydWN0IHN0cmJ1ZjsKKworI2RlZmluZSBSRVBPX01PREVfRElSIDAwNDAwMDAKKyNkZWZpbmUgUkVQT19NT0RFX0JMQiAwMTAwNjQ0CisjZGVmaW5lIFJFUE9fTU9ERV9FWEUgMDEwMDc1NQorI2RlZmluZSBSRVBPX01PREVfTE5LIDAxMjAwMDAKKwordWludDMyX3QgbmV4dF9ibG9iX21hcmsodm9pZCk7Cit2b2lkIHJlcG9fY29weSh1aW50MzJfdCByZXZpc2lvbiwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QpOwordm9pZCByZXBvX2FkZChjb25zdCBjaGFyICpwYXRoLCB1aW50MzJfdCBtb2RlLCB1aW50MzJfdCBibG9iX21hcmspOworY29uc3QgY2hhciAqcmVwb19yZWFkX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgdWludDMyX3QgKm1vZGVfb3V0KTsKK3ZvaWQgcmVwb19kZWxldGUoY29uc3QgY2hhciAqcGF0aCk7Cit2b2lkIHJlcG9fY29tbWl0KHVpbnQzMl90IHJldmlzaW9uLCBjb25zdCBjaGFyICphdXRob3IsCisJCWNvbnN0IHN0cnVjdCBzdHJidWYgKmxvZywgY29uc3QgY2hhciAqdXVpZCwgY29uc3QgY2hhciAqdXJsLAorCQlsb25nIHVuc2lnbmVkIHRpbWVzdGFtcCk7Cit2b2lkIHJlcG9fZGlmZih1aW50MzJfdCByMSwgdWludDMyX3QgcjIpOwordm9pZCByZXBvX2luaXQodm9pZCk7Cit2b2lkIHJlcG9fcmVzZXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5jIGIvdmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMWQ0OTAKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmMKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIExpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0Qtc3R5bGUgbGljZW5zZS4KKyAqIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzbGlkaW5nX3dpbmRvdy5oIgorI2luY2x1ZGUgImxpbmVfYnVmZmVyLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK3N0YXRpYyBpbnQgaW5wdXRfZXJyb3Ioc3RydWN0IGxpbmVfYnVmZmVyICpmaWxlKQoreworCWlmICghYnVmZmVyX2ZlcnJvcihmaWxlKSkKKwkJcmV0dXJuIGVycm9yKCJkZWx0YSBwcmVpbWFnZSBlbmRzIGVhcmx5Iik7CisJcmV0dXJuIGVycm9yKCJjYW5ub3QgcmVhZCBkZWx0YSBwcmVpbWFnZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworfQorCitzdGF0aWMgaW50IHNraXBfb3Jfd2hpbmUoc3RydWN0IGxpbmVfYnVmZmVyICpmaWxlLCBvZmZfdCBnYXApCit7CisJaWYgKGJ1ZmZlcl9za2lwX2J5dGVzKGZpbGUsIGdhcCkgIT0gZ2FwKQorCQlyZXR1cm4gaW5wdXRfZXJyb3IoZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF90b19maWxsX29yX3doaW5lKHN0cnVjdCBsaW5lX2J1ZmZlciAqZmlsZSwKKwkJCQlzdHJ1Y3Qgc3RyYnVmICpidWYsIHNpemVfdCB3aWR0aCkKK3sKKwlidWZmZXJfcmVhZF9iaW5hcnkoZmlsZSwgYnVmLCB3aWR0aCAtIGJ1Zi0+bGVuKTsKKwlpZiAoYnVmLT5sZW4gIT0gd2lkdGgpCisJCXJldHVybiBpbnB1dF9lcnJvcihmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19vZmZzZXRfb3ZlcmZsb3cob2ZmX3Qgb2Zmc2V0LCB1aW50bWF4X3QgbGVuKQoreworCWlmIChsZW4gPiBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKG9mZl90KSkKKwkJcmV0dXJuIGVycm9yKCJ1bnJlcHJlc2VudGFibGUgbGVuZ3RoIGluIGRlbHRhOiAiCisJCQkJIiUiUFJJdU1BWCIgPiBPRkZfTUFYIiwgbGVuKTsKKwlpZiAoc2lnbmVkX2FkZF9vdmVyZmxvd3Mob2Zmc2V0LCAob2ZmX3QpIGxlbikpCisJCXJldHVybiBlcnJvcigidW5yZXByZXNlbnRhYmxlIG9mZnNldCBpbiBkZWx0YTogIgorCQkJCSIlIlBSSXVNQVgiICsgJSJQUkl1TUFYIiA+IE9GRl9NQVgiLAorCQkJCSh1aW50bWF4X3QpIG9mZnNldCwgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG1vdmVfd2luZG93KHN0cnVjdCBzbGlkaW5nX3ZpZXcgKnZpZXcsIG9mZl90IG9mZiwgc2l6ZV90IHdpZHRoKQoreworCW9mZl90IGZpbGVfb2Zmc2V0OworCWFzc2VydCh2aWV3KTsKKwlhc3NlcnQodmlldy0+d2lkdGggPD0gdmlldy0+YnVmLmxlbik7CisJYXNzZXJ0KCFjaGVja19vZmZzZXRfb3ZlcmZsb3codmlldy0+b2ZmLCB2aWV3LT5idWYubGVuKSk7CisKKwlpZiAoY2hlY2tfb2Zmc2V0X292ZXJmbG93KG9mZiwgd2lkdGgpKQorCQlyZXR1cm4gLTE7CisJaWYgKG9mZiA8IHZpZXctPm9mZiB8fCBvZmYgKyB3aWR0aCA8IHZpZXctPm9mZiArIHZpZXctPndpZHRoKQorCQlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IHdpbmRvdyBzbGlkZXMgbGVmdCIpOworCWlmICh2aWV3LT5tYXhfb2ZmID49IDAgJiYgdmlldy0+bWF4X29mZiA8IG9mZiArIChvZmZfdCkgd2lkdGgpCisJCXJldHVybiBlcnJvcigiZGVsdGEgcHJlaW1hZ2UgZW5kcyBlYXJseSIpOworCisJZmlsZV9vZmZzZXQgPSB2aWV3LT5vZmYgKyB2aWV3LT5idWYubGVuOworCWlmIChvZmYgPCBmaWxlX29mZnNldCkgeworCQkvKiBNb3ZlIHRoZSBvdmVybGFwcGluZyByZWdpb24gaW50byBwbGFjZS4gKi8KKwkJc3RyYnVmX3JlbW92ZSgmdmlldy0+YnVmLCAwLCBvZmYgLSB2aWV3LT5vZmYpOworCX0gZWxzZSB7CisJCS8qIFNlZWsgYWhlYWQgdG8gc2tpcCB0aGUgZ2FwLiAqLworCQlpZiAoc2tpcF9vcl93aGluZSh2aWV3LT5maWxlLCBvZmYgLSBmaWxlX29mZnNldCkpCisJCQlyZXR1cm4gLTE7CisJCXN0cmJ1Zl9zZXRsZW4oJnZpZXctPmJ1ZiwgMCk7CisJfQorCisJaWYgKHZpZXctPmJ1Zi5sZW4gPiB3aWR0aCkKKwkJOyAvKiBBbHJlYWR5IHJlYWQuICovCisJZWxzZSBpZiAocmVhZF90b19maWxsX29yX3doaW5lKHZpZXctPmZpbGUsICZ2aWV3LT5idWYsIHdpZHRoKSkKKwkJcmV0dXJuIC0xOworCisJdmlldy0+b2ZmID0gb2ZmOworCXZpZXctPndpZHRoID0gd2lkdGg7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmggYi92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzYTgyNQotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vc2xpZGluZ193aW5kb3cuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIFNMSURJTkdfV0lORE9XX0hfCisjZGVmaW5lIFNMSURJTkdfV0lORE9XX0hfCisKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IHNsaWRpbmdfdmlldyB7CisJc3RydWN0IGxpbmVfYnVmZmVyICpmaWxlOworCW9mZl90IG9mZjsKKwlzaXplX3Qgd2lkdGg7CisJb2ZmX3QgbWF4X29mZjsJLyogLTEgbWVhbnMgdW5saW1pdGVkICovCisJc3RydWN0IHN0cmJ1ZiBidWY7Cit9OworCisjZGVmaW5lIFNMSURJTkdfVklFV19JTklUKGlucHV0LCBsZW4pCXsgKGlucHV0KSwgMCwgMCwgKGxlbiksIFNUUkJVRl9JTklUIH0KKworZXh0ZXJuIGludCBtb3ZlX3dpbmRvdyhzdHJ1Y3Qgc2xpZGluZ192aWV3ICp2aWV3LCBvZmZfdCBvZmYsIHNpemVfdCB3aWR0aCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9zdm5kaWZmLmMgYi92Y3Mtc3ZuL3N2bmRpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGM5N2M0Ci0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9zdm5kaWZmLmMKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBMaWNlbnNlZCB1bmRlciBhIHR3by1jbGF1c2UgQlNELXN0eWxlIGxpY2Vuc2UuCisgKiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic2xpZGluZ193aW5kb3cuaCIKKyNpbmNsdWRlICJsaW5lX2J1ZmZlci5oIgorI2luY2x1ZGUgInN2bmRpZmYuaCIKKworLyoKKyAqIHN2bmRpZmYwIGFwcGxpZXIKKyAqCisgKiBTZWUgaHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9zdWJ2ZXJzaW9uL3RydW5rL25vdGVzL3N2bmRpZmYuCisgKgorICogc3ZuZGlmZjAgOjo9ICdTVk5cMCcgd2luZG93KgorICogd2luZG93IDo6PSBpbnQgaW50IGludCBpbnQgaW50IGluc3RydWN0aW9ucyBpbmxpbmVfZGF0YTsKKyAqIGluc3RydWN0aW9ucyA6Oj0gaW5zdHJ1Y3Rpb24qOworICogaW5zdHJ1Y3Rpb24gOjo9IHZpZXdfc2VsZWN0b3IgaW50IGludAorICogICB8IGNvcHlmcm9tX2RhdGEgaW50CisgKiAgIHwgcGFja2VkX3ZpZXdfc2VsZWN0b3IgaW50CisgKiAgIHwgcGFja2VkX2NvcHlmcm9tX2RhdGEKKyAqICAgOworICogdmlld19zZWxlY3RvciA6Oj0gY29weWZyb21fc291cmNlCisgKiAgIHwgY29weWZyb21fdGFyZ2V0CisgKiAgIDsKKyAqIGNvcHlmcm9tX3NvdXJjZSA6Oj0gIyBiaW5hcnkgMDAgMDAwMDAwOworICogY29weWZyb21fdGFyZ2V0IDo6PSAjIGJpbmFyeSAwMSAwMDAwMDA7CisgKiBjb3B5ZnJvbV9kYXRhIDo6PSAjIGJpbmFyeSAxMCAwMDAwMDA7CisgKiBwYWNrZWRfdmlld19zZWxlY3RvciA6Oj0gIyB2aWV3X3NlbGVjdG9yIE9SLWVkIHdpdGggNiBiaXQgdmFsdWU7CisgKiBwYWNrZWRfY29weWZyb21fZGF0YSA6Oj0gIyBjb3B5ZnJvbV9kYXRhIE9SLWVkIHdpdGggNiBiaXQgdmFsdWU7CisgKiBpbnQgOjo9IGhpZ2hkaWdpdCogbG93ZGlnaXQ7CisgKiBoaWdoZGlnaXQgOjo9ICMgYmluYXJ5IDEwMDAgMDAwMCBPUi1lZCB3aXRoIDcgYml0IHZhbHVlOworICogbG93ZGlnaXQgOjo9ICMgNyBiaXQgdmFsdWU7CisgKi8KKworI2RlZmluZSBJTlNOX01BU0sJMHhjMAorI2RlZmluZSBJTlNOX0NPUFlGUk9NX1NPVVJDRQkweDAwCisjZGVmaW5lIElOU05fQ09QWUZST01fVEFSR0VUCTB4NDAKKyNkZWZpbmUgSU5TTl9DT1BZRlJPTV9EQVRBCTB4ODAKKyNkZWZpbmUgT1BFUkFORF9NQVNLCTB4M2YKKworI2RlZmluZSBWTElfQ09OVElOVUUJMHg4MAorI2RlZmluZSBWTElfRElHSVRfTUFTSwkweDdmCisjZGVmaW5lIFZMSV9CSVRTX1BFUl9ESUdJVCA3CisKK3N0cnVjdCB3aW5kb3cgeworCXN0cnVjdCBzbGlkaW5nX3ZpZXcgKmluOworCXN0cnVjdCBzdHJidWYgb3V0OworCXN0cnVjdCBzdHJidWYgaW5zdHJ1Y3Rpb25zOworCXN0cnVjdCBzdHJidWYgZGF0YTsKK307CisKKyNkZWZpbmUgV0lORE9XX0lOSVQodykJeyAodyksIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQgfQorCitzdGF0aWMgdm9pZCB3aW5kb3dfcmVsZWFzZShzdHJ1Y3Qgd2luZG93ICpjdHgpCit7CisJc3RyYnVmX3JlbGVhc2UoJmN0eC0+b3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmY3R4LT5pbnN0cnVjdGlvbnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZjdHgtPmRhdGEpOworfQorCitzdGF0aWMgaW50IHdyaXRlX3N0cmJ1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqb3V0KQoreworCWlmIChmd3JpdGUoc2ItPmJ1ZiwgMSwgc2ItPmxlbiwgb3V0KSA9PSBzYi0+bGVuKQkvKiBTdWNjZXNzLiAqLworCQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3IoImNhbm5vdCB3cml0ZSBkZWx0YSBwb3N0aW1hZ2U6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKK30KKworc3RhdGljIGludCBlcnJvcl9zaG9ydF9yZWFkKHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpCit7CisJaWYgKGJ1ZmZlcl9mZXJyb3IoaW5wdXQpKQorCQlyZXR1cm4gZXJyb3IoImVycm9yIHJlYWRpbmcgZGVsdGE6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKK30KKworc3RhdGljIGludCByZWFkX2NodW5rKHN0cnVjdCBsaW5lX2J1ZmZlciAqZGVsdGEsIG9mZl90ICpkZWx0YV9sZW4sCisJCSAgICAgIHN0cnVjdCBzdHJidWYgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlhc3NlcnQoKmRlbHRhX2xlbiA+PSAwKTsKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlpZiAobGVuID4gKHVpbnRtYXhfdCkgKmRlbHRhX2xlbiB8fAorCSAgICBidWZmZXJfcmVhZF9iaW5hcnkoZGVsdGEsIGJ1ZiwgbGVuKSAhPSBsZW4pCisJCXJldHVybiBlcnJvcl9zaG9ydF9yZWFkKGRlbHRhKTsKKwkqZGVsdGFfbGVuIC09IGJ1Zi0+bGVuOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfbWFnaWMoc3RydWN0IGxpbmVfYnVmZmVyICppbiwgb2ZmX3QgKmxlbikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBtYWdpY1tdID0geydTJywgJ1YnLCAnTicsICdcMCd9OworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChyZWFkX2NodW5rKGluLCBsZW4sICZzYiwgc2l6ZW9mKG1hZ2ljKSkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAobWVtY21wKHNiLmJ1ZiwgbWFnaWMsIHNpemVvZihtYWdpYykpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogdW5yZWNvZ25pemVkIGZpbGUgdHlwZSIpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfaW50KHN0cnVjdCBsaW5lX2J1ZmZlciAqaW4sIHVpbnRtYXhfdCAqcmVzdWx0LCBvZmZfdCAqbGVuKQoreworCXVpbnRtYXhfdCBydiA9IDA7CisJb2ZmX3Qgc3o7CisJZm9yIChzeiA9ICpsZW47IHN6OyBzei0tKSB7CisJCWNvbnN0IGludCBjaCA9IGJ1ZmZlcl9yZWFkX2NoYXIoaW4pOworCQlpZiAoY2ggPT0gRU9GKQorCQkJYnJlYWs7CisKKwkJcnYgPDw9IFZMSV9CSVRTX1BFUl9ESUdJVDsKKwkJcnYgKz0gKGNoICYgVkxJX0RJR0lUX01BU0spOworCQlpZiAoY2ggJiBWTElfQ09OVElOVUUpCisJCQljb250aW51ZTsKKworCQkqcmVzdWx0ID0gcnY7CisJCSpsZW4gPSBzeiAtIDE7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZXJyb3Jfc2hvcnRfcmVhZChpbik7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaW50KGNvbnN0IGNoYXIgKipidWYsIHNpemVfdCAqcmVzdWx0LCBjb25zdCBjaGFyICplbmQpCit7CisJc2l6ZV90IHJ2ID0gMDsKKwljb25zdCBjaGFyICpwb3M7CisJZm9yIChwb3MgPSAqYnVmOyBwb3MgIT0gZW5kOyBwb3MrKykgeworCQl1bnNpZ25lZCBjaGFyIGNoID0gKnBvczsKKworCQlydiA8PD0gVkxJX0JJVFNfUEVSX0RJR0lUOworCQlydiArPSAoY2ggJiBWTElfRElHSVRfTUFTSyk7CisJCWlmIChjaCAmIFZMSV9DT05USU5VRSkKKwkJCWNvbnRpbnVlOworCisJCSpyZXN1bHQgPSBydjsKKwkJKmJ1ZiA9IHBvcyArIDE7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IHVuZXhwZWN0ZWQgZW5kIG9mIGluc3RydWN0aW9ucyBzZWN0aW9uIik7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9vZmZzZXQoc3RydWN0IGxpbmVfYnVmZmVyICppbiwgb2ZmX3QgKnJlc3VsdCwgb2ZmX3QgKmxlbikKK3sKKwl1aW50bWF4X3QgdmFsOworCWlmIChyZWFkX2ludChpbiwgJnZhbCwgbGVuKSkKKwkJcmV0dXJuIC0xOworCWlmICh2YWwgPiBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKG9mZl90KSkKKwkJcmV0dXJuIGVycm9yKCJ1bnJlcHJlc2VudGFibGUgb2Zmc2V0IGluIGRlbHRhOiAlIlBSSXVNQVgiIiwgdmFsKTsKKwkqcmVzdWx0ID0gdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfbGVuZ3RoKHN0cnVjdCBsaW5lX2J1ZmZlciAqaW4sIHNpemVfdCAqcmVzdWx0LCBvZmZfdCAqbGVuKQoreworCXVpbnRtYXhfdCB2YWw7CisJaWYgKHJlYWRfaW50KGluLCAmdmFsLCBsZW4pKQorCQlyZXR1cm4gLTE7CisJaWYgKHZhbCA+IFNJWkVfTUFYKQorCQlyZXR1cm4gZXJyb3IoInVucmVwcmVzZW50YWJsZSBsZW5ndGggaW4gZGVsdGE6ICUiUFJJdU1BWCIiLCB2YWwpOworCSpyZXN1bHQgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29weWZyb21fc291cmNlKHN0cnVjdCB3aW5kb3cgKmN0eCwgY29uc3QgY2hhciAqKmluc3RydWN0aW9ucywKKwkJCSAgIHNpemVfdCBuYnl0ZXMsIGNvbnN0IGNoYXIgKmluc25zX2VuZCkKK3sKKwlzaXplX3Qgb2Zmc2V0OworCWlmIChwYXJzZV9pbnQoaW5zdHJ1Y3Rpb25zLCAmb2Zmc2V0LCBpbnNuc19lbmQpKQorCQlyZXR1cm4gLTE7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3Mob2Zmc2V0LCBuYnl0ZXMpIHx8CisJICAgIG9mZnNldCArIG5ieXRlcyA+IGN0eC0+aW4tPndpZHRoKQorCQlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IGNvcGllcyBzb3VyY2UgZGF0YSBvdXRzaWRlIHZpZXciKTsKKwlzdHJidWZfYWRkKCZjdHgtPm91dCwgY3R4LT5pbi0+YnVmLmJ1ZiArIG9mZnNldCwgbmJ5dGVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb3B5ZnJvbV90YXJnZXQoc3RydWN0IHdpbmRvdyAqY3R4LCBjb25zdCBjaGFyICoqaW5zdHJ1Y3Rpb25zLAorCQkJICAgc2l6ZV90IG5ieXRlcywgY29uc3QgY2hhciAqaW5zdHJ1Y3Rpb25zX2VuZCkKK3sKKwlzaXplX3Qgb2Zmc2V0OworCWlmIChwYXJzZV9pbnQoaW5zdHJ1Y3Rpb25zLCAmb2Zmc2V0LCBpbnN0cnVjdGlvbnNfZW5kKSkKKwkJcmV0dXJuIC0xOworCWlmIChvZmZzZXQgPj0gY3R4LT5vdXQubGVuKQorCQlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IGNvcGllcyBmcm9tIHRoZSBmdXR1cmUiKTsKKwlmb3IgKDsgbmJ5dGVzID4gMDsgbmJ5dGVzLS0pCisJCXN0cmJ1Zl9hZGRjaCgmY3R4LT5vdXQsIGN0eC0+b3V0LmJ1ZltvZmZzZXQrK10pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcHlmcm9tX2RhdGEoc3RydWN0IHdpbmRvdyAqY3R4LCBzaXplX3QgKmRhdGFfcG9zLCBzaXplX3QgbmJ5dGVzKQoreworCWNvbnN0IHNpemVfdCBwb3MgPSAqZGF0YV9wb3M7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3MocG9zLCBuYnl0ZXMpIHx8CisJICAgIHBvcyArIG5ieXRlcyA+IGN0eC0+ZGF0YS5sZW4pCisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogY29waWVzIHVuYXZhaWxhYmxlIGlubGluZSBkYXRhIik7CisJc3RyYnVmX2FkZCgmY3R4LT5vdXQsIGN0eC0+ZGF0YS5idWYgKyBwb3MsIG5ieXRlcyk7CisJKmRhdGFfcG9zICs9IG5ieXRlczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9maXJzdF9vcGVyYW5kKGNvbnN0IGNoYXIgKipidWYsIHNpemVfdCAqb3V0LCBjb25zdCBjaGFyICplbmQpCit7CisJc2l6ZV90IHJlc3VsdCA9ICh1bnNpZ25lZCBjaGFyKSAqKCpidWYpKysgJiBPUEVSQU5EX01BU0s7CisJaWYgKHJlc3VsdCkgewkvKiBpbW1lZGlhdGUgb3BlcmFuZCAqLworCQkqb3V0ID0gcmVzdWx0OworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHBhcnNlX2ludChidWYsIG91dCwgZW5kKTsKK30KKworc3RhdGljIGludCBleGVjdXRlX29uZV9pbnN0cnVjdGlvbihzdHJ1Y3Qgd2luZG93ICpjdHgsCisJCQkJY29uc3QgY2hhciAqKmluc3RydWN0aW9ucywgc2l6ZV90ICpkYXRhX3BvcykKK3sKKwl1bnNpZ25lZCBpbnQgaW5zdHJ1Y3Rpb247CisJY29uc3QgY2hhciAqaW5zbnNfZW5kID0gY3R4LT5pbnN0cnVjdGlvbnMuYnVmICsgY3R4LT5pbnN0cnVjdGlvbnMubGVuOworCXNpemVfdCBuYnl0ZXM7CisJYXNzZXJ0KGN0eCk7CisJYXNzZXJ0KGluc3RydWN0aW9ucyAmJiAqaW5zdHJ1Y3Rpb25zKTsKKwlhc3NlcnQoZGF0YV9wb3MpOworCisJaW5zdHJ1Y3Rpb24gPSAodW5zaWduZWQgY2hhcikgKippbnN0cnVjdGlvbnM7CisJaWYgKHBhcnNlX2ZpcnN0X29wZXJhbmQoaW5zdHJ1Y3Rpb25zLCAmbmJ5dGVzLCBpbnNuc19lbmQpKQorCQlyZXR1cm4gLTE7CisJc3dpdGNoIChpbnN0cnVjdGlvbiAmIElOU05fTUFTSykgeworCWNhc2UgSU5TTl9DT1BZRlJPTV9TT1VSQ0U6CisJCXJldHVybiBjb3B5ZnJvbV9zb3VyY2UoY3R4LCBpbnN0cnVjdGlvbnMsIG5ieXRlcywgaW5zbnNfZW5kKTsKKwljYXNlIElOU05fQ09QWUZST01fVEFSR0VUOgorCQlyZXR1cm4gY29weWZyb21fdGFyZ2V0KGN0eCwgaW5zdHJ1Y3Rpb25zLCBuYnl0ZXMsIGluc25zX2VuZCk7CisJY2FzZSBJTlNOX0NPUFlGUk9NX0RBVEE6CisJCXJldHVybiBjb3B5ZnJvbV9kYXRhKGN0eCwgZGF0YV9wb3MsIG5ieXRlcyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGRlbHRhOiB1bnJlY29nbml6ZWQgaW5zdHJ1Y3Rpb24iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfd2luZG93X2luX2NvcmUoc3RydWN0IHdpbmRvdyAqY3R4KQoreworCWNvbnN0IGNoYXIgKmluc3RydWN0aW9uczsKKwlzaXplX3QgZGF0YV9wb3MgPSAwOworCisJLyoKKwkgKiBGaWxsIGN0eC0+b3V0LmJ1ZiB1c2luZyBkYXRhIGZyb20gdGhlIHNvdXJjZSwgdGFyZ2V0LAorCSAqIGFuZCBpbmxpbmUgZGF0YSB2aWV3cy4KKwkgKi8KKwlmb3IgKGluc3RydWN0aW9ucyA9IGN0eC0+aW5zdHJ1Y3Rpb25zLmJ1ZjsKKwkgICAgIGluc3RydWN0aW9ucyAhPSBjdHgtPmluc3RydWN0aW9ucy5idWYgKyBjdHgtPmluc3RydWN0aW9ucy5sZW47CisJICAgICApCisJCWlmIChleGVjdXRlX29uZV9pbnN0cnVjdGlvbihjdHgsICZpbnN0cnVjdGlvbnMsICZkYXRhX3BvcykpCisJCQlyZXR1cm4gLTE7CisJaWYgKGRhdGFfcG9zICE9IGN0eC0+ZGF0YS5sZW4pCisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogZG9lcyBub3QgY29weSBhbGwgaW5saW5lIGRhdGEiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9vbmVfd2luZG93KHN0cnVjdCBsaW5lX2J1ZmZlciAqZGVsdGEsIG9mZl90ICpkZWx0YV9sZW4sCisJCQkgICAgc3RydWN0IHNsaWRpbmdfdmlldyAqcHJlaW1hZ2UsIEZJTEUgKm91dCkKK3sKKwlpbnQgcnYgPSAtMTsKKwlzdHJ1Y3Qgd2luZG93IGN0eCA9IFdJTkRPV19JTklUKHByZWltYWdlKTsKKwlzaXplX3Qgb3V0X2xlbjsKKwlzaXplX3QgaW5zdHJ1Y3Rpb25zX2xlbjsKKwlzaXplX3QgZGF0YV9sZW47CisJYXNzZXJ0KGRlbHRhX2xlbik7CisKKwkvKiAic291cmNlIHZpZXciIG9mZnNldCBhbmQgbGVuZ3RoIGFscmVhZHkgaGFuZGxlZDsgKi8KKwlpZiAocmVhZF9sZW5ndGgoZGVsdGEsICZvdXRfbGVuLCBkZWx0YV9sZW4pIHx8CisJICAgIHJlYWRfbGVuZ3RoKGRlbHRhLCAmaW5zdHJ1Y3Rpb25zX2xlbiwgZGVsdGFfbGVuKSB8fAorCSAgICByZWFkX2xlbmd0aChkZWx0YSwgJmRhdGFfbGVuLCBkZWx0YV9sZW4pIHx8CisJICAgIHJlYWRfY2h1bmsoZGVsdGEsIGRlbHRhX2xlbiwgJmN0eC5pbnN0cnVjdGlvbnMsIGluc3RydWN0aW9uc19sZW4pIHx8CisJICAgIHJlYWRfY2h1bmsoZGVsdGEsIGRlbHRhX2xlbiwgJmN0eC5kYXRhLCBkYXRhX2xlbikpCisJCWdvdG8gZXJyb3Jfb3V0OworCXN0cmJ1Zl9ncm93KCZjdHgub3V0LCBvdXRfbGVuKTsKKwlpZiAoYXBwbHlfd2luZG93X2luX2NvcmUoJmN0eCkpCisJCWdvdG8gZXJyb3Jfb3V0OworCWlmIChjdHgub3V0LmxlbiAhPSBvdXRfbGVuKSB7CisJCXJ2ID0gZXJyb3IoImludmFsaWQgZGVsdGE6IGluY29ycmVjdCBwb3N0aW1hZ2UgbGVuZ3RoIik7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKwlpZiAod3JpdGVfc3RyYnVmKCZjdHgub3V0LCBvdXQpKQorCQlnb3RvIGVycm9yX291dDsKKwlydiA9IDA7CitlcnJvcl9vdXQ6CisJd2luZG93X3JlbGVhc2UoJmN0eCk7CisJcmV0dXJuIHJ2OworfQorCitpbnQgc3ZuZGlmZjBfYXBwbHkoc3RydWN0IGxpbmVfYnVmZmVyICpkZWx0YSwgb2ZmX3QgZGVsdGFfbGVuLAorCQkJc3RydWN0IHNsaWRpbmdfdmlldyAqcHJlaW1hZ2UsIEZJTEUgKnBvc3RpbWFnZSkKK3sKKwlhc3NlcnQoZGVsdGEgJiYgcHJlaW1hZ2UgJiYgcG9zdGltYWdlICYmIGRlbHRhX2xlbiA+PSAwKTsKKworCWlmIChyZWFkX21hZ2ljKGRlbHRhLCAmZGVsdGFfbGVuKSkKKwkJcmV0dXJuIC0xOworCXdoaWxlIChkZWx0YV9sZW4pIHsJLyogRm9yIGVhY2ggd2luZG93OiAqLworCQlvZmZfdCBwcmVfb2ZmID0gLTE7CisJCXNpemVfdCBwcmVfbGVuOworCisJCWlmIChyZWFkX29mZnNldChkZWx0YSwgJnByZV9vZmYsICZkZWx0YV9sZW4pIHx8CisJCSAgICByZWFkX2xlbmd0aChkZWx0YSwgJnByZV9sZW4sICZkZWx0YV9sZW4pIHx8CisJCSAgICBtb3ZlX3dpbmRvdyhwcmVpbWFnZSwgcHJlX29mZiwgcHJlX2xlbikgfHwKKwkJICAgIGFwcGx5X29uZV93aW5kb3coZGVsdGEsICZkZWx0YV9sZW4sIHByZWltYWdlLCBwb3N0aW1hZ2UpKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vc3ZuZGlmZi5oIGIvdmNzLXN2bi9zdm5kaWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlYjQ2NAotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vc3ZuZGlmZi5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgU1ZORElGRl9IXworI2RlZmluZSBTVk5ESUZGX0hfCisKK3N0cnVjdCBsaW5lX2J1ZmZlcjsKK3N0cnVjdCBzbGlkaW5nX3ZpZXc7CisKK2V4dGVybiBpbnQgc3ZuZGlmZjBfYXBwbHkoc3RydWN0IGxpbmVfYnVmZmVyICpkZWx0YSwgb2ZmX3QgZGVsdGFfbGVuLAorCQlzdHJ1Y3Qgc2xpZGluZ192aWV3ICpwcmVpbWFnZSwgRklMRSAqcG9zdGltYWdlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS92Y3Mtc3ZuL3N2bmR1bXAuYyBiL3Zjcy1zdm4vc3ZuZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMTY4YWUKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL3N2bmR1bXAuYwpAQCAtMCwwICsxLDUwOSBAQAorLyoKKyAqIFBhcnNlIGFuZCByZWFycmFuZ2UgYSBzdm5hZG1pbiBkdW1wLgorICogQ3JlYXRlIHRoZSBkdW1wIHdpdGg6CisgKiBzdm5hZG1pbiBkdW1wIC0taW5jcmVtZW50YWwgLXI8c3RhcnRyZXY+OjxlbmRyZXY+IDxyZXBvc2l0b3J5PiA+b3V0ZmlsZQorICoKKyAqIExpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0Qtc3R5bGUgbGljZW5zZS4KKyAqIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlcG9fdHJlZS5oIgorI2luY2x1ZGUgImZhc3RfZXhwb3J0LmgiCisjaW5jbHVkZSAibGluZV9idWZmZXIuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJzdm5kdW1wLmgiCisKKy8qCisgKiBDb21wYXJlIHN0YXJ0IG9mIHN0cmluZyB0byBsaXRlcmFsIG9mIGVxdWFsIGxlbmd0aDsKKyAqIG11c3QgYmUgZ3VhcmRlZCBieSBsZW5ndGggdGVzdC4KKyAqLworI2RlZmluZSBjb25zdGNtcChzLCByZWYpIG1lbWNtcChzLCByZWYsIHNpemVvZihyZWYpIC0gMSkKKworI2RlZmluZSBSRVBPUlRfRklMRU5PIDMKKworI2RlZmluZSBOT0RFQUNUX1JFUExBQ0UgNAorI2RlZmluZSBOT0RFQUNUX0RFTEVURSAzCisjZGVmaW5lIE5PREVBQ1RfQUREIDIKKyNkZWZpbmUgTk9ERUFDVF9DSEFOR0UgMQorI2RlZmluZSBOT0RFQUNUX1VOS05PV04gMAorCisvKiBTdGF0ZXM6ICovCisjZGVmaW5lIERVTVBfQ1RYIDAJLyogZHVtcCBtZXRhZGF0YSAqLworI2RlZmluZSBSRVZfQ1RYICAxCS8qIHJldmlzaW9uIG1ldGFkYXRhICovCisjZGVmaW5lIE5PREVfQ1RYIDIJLyogbm9kZSBtZXRhZGF0YSAqLworI2RlZmluZSBJTlRFUk5PREVfQ1RYIDMJLyogYmV0d2VlbiBub2RlcyAqLworCisjZGVmaW5lIERBVEVfUkZDMjgyMl9MRU4gMzEKKworc3RhdGljIHN0cnVjdCBsaW5lX2J1ZmZlciBpbnB1dCA9IExJTkVfQlVGRkVSX0lOSVQ7CisKK3N0YXRpYyBzdHJ1Y3QgeworCXVpbnQzMl90IGFjdGlvbiwgc3JjUmV2LCB0eXBlOworCW9mZl90IHByb3BfbGVuZ3RoLCB0ZXh0X2xlbmd0aDsKKwlzdHJ1Y3Qgc3RyYnVmIHNyYywgZHN0OworCXVpbnQzMl90IHRleHRfZGVsdGEsIHByb3BfZGVsdGE7Cit9IG5vZGVfY3R4OworCitzdGF0aWMgc3RydWN0IHsKKwl1aW50MzJfdCByZXZpc2lvbjsKKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKKwlzdHJ1Y3Qgc3RyYnVmIGxvZywgYXV0aG9yOworfSByZXZfY3R4OworCitzdGF0aWMgc3RydWN0IHsKKwl1aW50MzJfdCB2ZXJzaW9uOworCXN0cnVjdCBzdHJidWYgdXVpZCwgdXJsOworfSBkdW1wX2N0eDsKKworc3RhdGljIHZvaWQgcmVzZXRfbm9kZV9jdHgoY2hhciAqZm5hbWUpCit7CisJbm9kZV9jdHgudHlwZSA9IDA7CisJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9VTktOT1dOOworCW5vZGVfY3R4LnByb3BfbGVuZ3RoID0gLTE7CisJbm9kZV9jdHgudGV4dF9sZW5ndGggPSAtMTsKKwlzdHJidWZfcmVzZXQoJm5vZGVfY3R4LnNyYyk7CisJbm9kZV9jdHguc3JjUmV2ID0gMDsKKwlzdHJidWZfcmVzZXQoJm5vZGVfY3R4LmRzdCk7CisJaWYgKGZuYW1lKQorCQlzdHJidWZfYWRkc3RyKCZub2RlX2N0eC5kc3QsIGZuYW1lKTsKKwlub2RlX2N0eC50ZXh0X2RlbHRhID0gMDsKKwlub2RlX2N0eC5wcm9wX2RlbHRhID0gMDsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfcmV2X2N0eCh1aW50MzJfdCByZXZpc2lvbikKK3sKKwlyZXZfY3R4LnJldmlzaW9uID0gcmV2aXNpb247CisJcmV2X2N0eC50aW1lc3RhbXAgPSAwOworCXN0cmJ1Zl9yZXNldCgmcmV2X2N0eC5sb2cpOworCXN0cmJ1Zl9yZXNldCgmcmV2X2N0eC5hdXRob3IpOworfQorCitzdGF0aWMgdm9pZCByZXNldF9kdW1wX2N0eChjb25zdCBjaGFyICp1cmwpCit7CisJc3RyYnVmX3Jlc2V0KCZkdW1wX2N0eC51cmwpOworCWlmICh1cmwpCisJCXN0cmJ1Zl9hZGRzdHIoJmR1bXBfY3R4LnVybCwgdXJsKTsKKwlkdW1wX2N0eC52ZXJzaW9uID0gMTsKKwlzdHJidWZfcmVzZXQoJmR1bXBfY3R4LnV1aWQpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcHJvcGVydHkoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqa2V5X2J1ZiwKKwkJCQlzdHJ1Y3Qgc3RyYnVmICp2YWwsCisJCQkJdWludDMyX3QgKnR5cGVfc2V0KQoreworCWNvbnN0IGNoYXIgKmtleSA9IGtleV9idWYtPmJ1ZjsKKwlzaXplX3Qga2V5bGVuID0ga2V5X2J1Zi0+bGVuOworCisJc3dpdGNoIChrZXlsZW4gKyAxKSB7CisJY2FzZSBzaXplb2YoInN2bjpsb2ciKToKKwkJaWYgKGNvbnN0Y21wKGtleSwgInN2bjpsb2ciKSkKKwkJCWJyZWFrOworCQlpZiAoIXZhbCkKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiB1bnNldHMgc3ZuOmxvZyIpOworCQlzdHJidWZfc3dhcCgmcmV2X2N0eC5sb2csIHZhbCk7CisJCWJyZWFrOworCWNhc2Ugc2l6ZW9mKCJzdm46YXV0aG9yIik6CisJCWlmIChjb25zdGNtcChrZXksICJzdm46YXV0aG9yIikpCisJCQlicmVhazsKKwkJaWYgKCF2YWwpCisJCQlzdHJidWZfcmVzZXQoJnJldl9jdHguYXV0aG9yKTsKKwkJZWxzZQorCQkJc3RyYnVmX3N3YXAoJnJldl9jdHguYXV0aG9yLCB2YWwpOworCQlicmVhazsKKwljYXNlIHNpemVvZigic3ZuOmRhdGUiKToKKwkJaWYgKGNvbnN0Y21wKGtleSwgInN2bjpkYXRlIikpCisJCQlicmVhazsKKwkJaWYgKCF2YWwpCisJCQlkaWUoImludmFsaWQgZHVtcDogdW5zZXRzIHN2bjpkYXRlIik7CisJCWlmIChwYXJzZV9kYXRlX2Jhc2ljKHZhbC0+YnVmLCAmcmV2X2N0eC50aW1lc3RhbXAsIE5VTEwpKQorCQkJd2FybmluZygiaW52YWxpZCB0aW1lc3RhbXA6ICVzIiwgdmFsLT5idWYpOworCQlicmVhazsKKwljYXNlIHNpemVvZigic3ZuOmV4ZWN1dGFibGUiKToKKwljYXNlIHNpemVvZigic3ZuOnNwZWNpYWwiKToKKwkJaWYgKGtleWxlbiA9PSBzdHJsZW4oInN2bjpleGVjdXRhYmxlIikgJiYKKwkJICAgIGNvbnN0Y21wKGtleSwgInN2bjpleGVjdXRhYmxlIikpCisJCQlicmVhazsKKwkJaWYgKGtleWxlbiA9PSBzdHJsZW4oInN2bjpzcGVjaWFsIikgJiYKKwkJICAgIGNvbnN0Y21wKGtleSwgInN2bjpzcGVjaWFsIikpCisJCQlicmVhazsKKwkJaWYgKCp0eXBlX3NldCkgeworCQkJaWYgKCF2YWwpCisJCQkJcmV0dXJuOworCQkJZGllKCJpbnZhbGlkIGR1bXA6IHNldHMgdHlwZSB0d2ljZSIpOworCQl9CisJCWlmICghdmFsKSB7CisJCQlub2RlX2N0eC50eXBlID0gUkVQT19NT0RFX0JMQjsKKwkJCXJldHVybjsKKwkJfQorCQkqdHlwZV9zZXQgPSAxOworCQlub2RlX2N0eC50eXBlID0ga2V5bGVuID09IHN0cmxlbigic3ZuOmV4ZWN1dGFibGUiKSA/CisJCQkJUkVQT19NT0RFX0VYRSA6CisJCQkJUkVQT19NT0RFX0xOSzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpZV9zaG9ydF9yZWFkKHZvaWQpCit7CisJaWYgKGJ1ZmZlcl9mZXJyb3IoJmlucHV0KSkKKwkJZGllX2Vycm5vKCJlcnJvciByZWFkaW5nIGR1bXAgZmlsZSIpOworCWRpZSgiaW52YWxpZCBkdW1wOiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcHJvcHModm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB2YWwgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICp0OworCS8qCisJICogTkVFRFNXT1JLOiB0byBzdXBwb3J0IHNpbXBsZSBtb2RlIGNoYW5nZXMgbGlrZQorCSAqCUsgMTEKKwkgKglzdm46c3BlY2lhbAorCSAqCVYgMQorCSAqCSoKKwkgKglEIDE0CisJICoJc3ZuOmV4ZWN1dGFibGUKKwkgKiB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgYSBtb2RlIGhhcyBiZWVuIHNldCBhbmQgcmVzZXQgdG8KKwkgKiBwbGFpbiBmaWxlIG9ubHkgaWYgbm90LiAgV2Ugc2hvdWxkIGJlIGtlZXBpbmcgdHJhY2sgb2YgdGhlCisJICogc3ltbGluayBhbmQgZXhlY3V0YWJsZSBiaXRzIHNlcGFyYXRlbHkgaW5zdGVhZC4KKwkgKi8KKwl1aW50MzJfdCB0eXBlX3NldCA9IDA7CisJd2hpbGUgKCh0ID0gYnVmZmVyX3JlYWRfbGluZSgmaW5wdXQpKSAmJiBzdHJjbXAodCwgIlBST1BTLUVORCIpKSB7CisJCXVpbnQzMl90IGxlbjsKKwkJY29uc3QgY2hhciB0eXBlID0gdFswXTsKKwkJaW50IGNoOworCisJCWlmICghdHlwZSB8fCB0WzFdICE9ICcgJykKKwkJCWRpZSgiaW52YWxpZCBwcm9wZXJ0eSBsaW5lOiAlcyIsIHQpOworCQlsZW4gPSBhdG9pKCZ0WzJdKTsKKwkJc3RyYnVmX3Jlc2V0KCZ2YWwpOworCQlidWZmZXJfcmVhZF9iaW5hcnkoJmlucHV0LCAmdmFsLCBsZW4pOworCQlpZiAodmFsLmxlbiA8IGxlbikKKwkJCWRpZV9zaG9ydF9yZWFkKCk7CisKKwkJLyogRGlzY2FyZCB0cmFpbGluZyBuZXdsaW5lLiAqLworCQljaCA9IGJ1ZmZlcl9yZWFkX2NoYXIoJmlucHV0KTsKKwkJaWYgKGNoID09IEVPRikKKwkJCWRpZV9zaG9ydF9yZWFkKCk7CisJCWlmIChjaCAhPSAnXG4nKQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IGV4cGVjdGVkIG5ld2xpbmUgYWZ0ZXIgJXMiLCB2YWwuYnVmKTsKKworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSAnSyc6CisJCQlzdHJidWZfc3dhcCgma2V5LCAmdmFsKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdEJzoKKwkJCWhhbmRsZV9wcm9wZXJ0eSgmdmFsLCBOVUxMLCAmdHlwZV9zZXQpOworCQkJY29udGludWU7CisJCWNhc2UgJ1YnOgorCQkJaGFuZGxlX3Byb3BlcnR5KCZrZXksICZ2YWwsICZ0eXBlX3NldCk7CisJCQlzdHJidWZfcmVzZXQoJmtleSk7CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWRpZSgiaW52YWxpZCBwcm9wZXJ0eSBsaW5lOiAlcyIsIHQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbm9kZSh2b2lkKQoreworCWNvbnN0IHVpbnQzMl90IHR5cGUgPSBub2RlX2N0eC50eXBlOworCWNvbnN0IGludCBoYXZlX3Byb3BzID0gbm9kZV9jdHgucHJvcF9sZW5ndGggIT0gLTE7CisJY29uc3QgaW50IGhhdmVfdGV4dCA9IG5vZGVfY3R4LnRleHRfbGVuZ3RoICE9IC0xOworCS8qCisJICogT2xkIHRleHQgZm9yIHRoaXMgbm9kZToKKwkgKiAgTlVMTAktIGRpcmVjdG9yeSBvciBidWcKKwkgKiAgZW1wdHlfYmxvYgktIGVtcHR5CisJICogICI8ZGF0YXJlZj4iCS0gZGF0YSByZXRyaWV2YWJsZSBmcm9tIGZhc3QtaW1wb3J0CisJICovCisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGVtcHR5X2Jsb2IgPSAiOjplbXB0eTo6IjsKKwljb25zdCBjaGFyICpvbGRfZGF0YSA9IE5VTEw7CisJdWludDMyX3Qgb2xkX21vZGUgPSBSRVBPX01PREVfQkxCOworCisJaWYgKG5vZGVfY3R4LmFjdGlvbiA9PSBOT0RFQUNUX0RFTEVURSkgeworCQlpZiAoaGF2ZV90ZXh0IHx8IGhhdmVfcHJvcHMgfHwgbm9kZV9jdHguc3JjUmV2KQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IGRlbGV0aW9uIG5vZGUgaGFzICIKKwkJCQkiY29weWZyb20gaW5mbywgdGV4dCwgb3IgcHJvcGVydGllcyIpOworCQlyZXBvX2RlbGV0ZShub2RlX2N0eC5kc3QuYnVmKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobm9kZV9jdHguYWN0aW9uID09IE5PREVBQ1RfUkVQTEFDRSkgeworCQlyZXBvX2RlbGV0ZShub2RlX2N0eC5kc3QuYnVmKTsKKwkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9BREQ7CisJfQorCWlmIChub2RlX2N0eC5zcmNSZXYpIHsKKwkJcmVwb19jb3B5KG5vZGVfY3R4LnNyY1Jldiwgbm9kZV9jdHguc3JjLmJ1Ziwgbm9kZV9jdHguZHN0LmJ1Zik7CisJCWlmIChub2RlX2N0eC5hY3Rpb24gPT0gTk9ERUFDVF9BREQpCisJCQlub2RlX2N0eC5hY3Rpb24gPSBOT0RFQUNUX0NIQU5HRTsKKwl9CisJaWYgKGhhdmVfdGV4dCAmJiB0eXBlID09IFJFUE9fTU9ERV9ESVIpCisJCWRpZSgiaW52YWxpZCBkdW1wOiBkaXJlY3RvcmllcyBjYW5ub3QgaGF2ZSB0ZXh0IGF0dGFjaGVkIik7CisKKwkvKgorCSAqIEZpbmQgb2xkIGNvbnRlbnQgKG9sZF9kYXRhKSBhbmQgZGVjaWRlIG9uIHRoZSBuZXcgbW9kZS4KKwkgKi8KKwlpZiAobm9kZV9jdHguYWN0aW9uID09IE5PREVBQ1RfQ0hBTkdFICYmICEqbm9kZV9jdHguZHN0LmJ1ZikgeworCQlpZiAodHlwZSAhPSBSRVBPX01PREVfRElSKQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IHJvb3Qgb2YgdHJlZSBpcyBub3QgYSByZWd1bGFyIGZpbGUiKTsKKwkJb2xkX2RhdGEgPSBOVUxMOworCX0gZWxzZSBpZiAobm9kZV9jdHguYWN0aW9uID09IE5PREVBQ1RfQ0hBTkdFKSB7CisJCXVpbnQzMl90IG1vZGU7CisJCW9sZF9kYXRhID0gcmVwb19yZWFkX3BhdGgobm9kZV9jdHguZHN0LmJ1ZiwgJm1vZGUpOworCQlpZiAobW9kZSA9PSBSRVBPX01PREVfRElSICYmIHR5cGUgIT0gUkVQT19NT0RFX0RJUikKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBjYW5ub3QgbW9kaWZ5IGEgZGlyZWN0b3J5IGludG8gYSBmaWxlIik7CisJCWlmIChtb2RlICE9IFJFUE9fTU9ERV9ESVIgJiYgdHlwZSA9PSBSRVBPX01PREVfRElSKQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IGNhbm5vdCBtb2RpZnkgYSBmaWxlIGludG8gYSBkaXJlY3RvcnkiKTsKKwkJbm9kZV9jdHgudHlwZSA9IG1vZGU7CisJCW9sZF9tb2RlID0gbW9kZTsKKwl9IGVsc2UgaWYgKG5vZGVfY3R4LmFjdGlvbiA9PSBOT0RFQUNUX0FERCkgeworCQlpZiAodHlwZSA9PSBSRVBPX01PREVfRElSKQorCQkJb2xkX2RhdGEgPSBOVUxMOworCQllbHNlIGlmIChoYXZlX3RleHQpCisJCQlvbGRfZGF0YSA9IGVtcHR5X2Jsb2I7CisJCWVsc2UKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBhZGRzIG5vZGUgd2l0aG91dCB0ZXh0Iik7CisJfSBlbHNlIHsKKwkJZGllKCJpbnZhbGlkIGR1bXA6IE5vZGUtcGF0aCBibG9jayBsYWNrcyBOb2RlLWFjdGlvbiIpOworCX0KKworCS8qCisJICogQWRqdXN0IG1vZGUgdG8gcmVmbGVjdCBwcm9wZXJ0aWVzLgorCSAqLworCWlmIChoYXZlX3Byb3BzKSB7CisJCWlmICghbm9kZV9jdHgucHJvcF9kZWx0YSkKKwkJCW5vZGVfY3R4LnR5cGUgPSB0eXBlOworCQlpZiAobm9kZV9jdHgucHJvcF9sZW5ndGgpCisJCQlyZWFkX3Byb3BzKCk7CisJfQorCisJLyoKKwkgKiBTYXZlIHRoZSByZXN1bHQuCisJICovCisJaWYgKHR5cGUgPT0gUkVQT19NT0RFX0RJUikJLyogZGlyZWN0b3JpZXMgYXJlIG5vdCB0cmFja2VkLiAqLworCQlyZXR1cm47CisJYXNzZXJ0KG9sZF9kYXRhKTsKKwlpZiAob2xkX2RhdGEgPT0gZW1wdHlfYmxvYikKKwkJLyogRm9yIHRoZSBmYXN0X2V4cG9ydF8qIGZ1bmN0aW9ucywgTlVMTCBtZWFucyBlbXB0eS4gKi8KKwkJb2xkX2RhdGEgPSBOVUxMOworCWlmICghaGF2ZV90ZXh0KSB7CisJCWZhc3RfZXhwb3J0X21vZGlmeShub2RlX2N0eC5kc3QuYnVmLCBub2RlX2N0eC50eXBlLCBvbGRfZGF0YSk7CisJCXJldHVybjsKKwl9CisJaWYgKCFub2RlX2N0eC50ZXh0X2RlbHRhKSB7CisJCWZhc3RfZXhwb3J0X21vZGlmeShub2RlX2N0eC5kc3QuYnVmLCBub2RlX2N0eC50eXBlLCAiaW5saW5lIik7CisJCWZhc3RfZXhwb3J0X2RhdGEobm9kZV9jdHgudHlwZSwgbm9kZV9jdHgudGV4dF9sZW5ndGgsICZpbnB1dCk7CisJCXJldHVybjsKKwl9CisJZmFzdF9leHBvcnRfbW9kaWZ5KG5vZGVfY3R4LmRzdC5idWYsIG5vZGVfY3R4LnR5cGUsICJpbmxpbmUiKTsKKwlmYXN0X2V4cG9ydF9ibG9iX2RlbHRhKG5vZGVfY3R4LnR5cGUsIG9sZF9tb2RlLCBvbGRfZGF0YSwKKwkJCQlub2RlX2N0eC50ZXh0X2xlbmd0aCwgJmlucHV0KTsKK30KKworc3RhdGljIHZvaWQgYmVnaW5fcmV2aXNpb24odm9pZCkKK3sKKwlpZiAoIXJldl9jdHgucmV2aXNpb24pCS8qIHJldmlzaW9uIDAgZ2V0cyBubyBnaXQgY29tbWl0LiAqLworCQlyZXR1cm47CisJZmFzdF9leHBvcnRfYmVnaW5fY29tbWl0KHJldl9jdHgucmV2aXNpb24sIHJldl9jdHguYXV0aG9yLmJ1ZiwKKwkJJnJldl9jdHgubG9nLCBkdW1wX2N0eC51dWlkLmJ1ZiwgZHVtcF9jdHgudXJsLmJ1ZiwKKwkJcmV2X2N0eC50aW1lc3RhbXApOworfQorCitzdGF0aWMgdm9pZCBlbmRfcmV2aXNpb24odm9pZCkKK3sKKwlpZiAocmV2X2N0eC5yZXZpc2lvbikKKwkJZmFzdF9leHBvcnRfZW5kX2NvbW1pdChyZXZfY3R4LnJldmlzaW9uKTsKK30KKwordm9pZCBzdm5kdW1wX3JlYWQoY29uc3QgY2hhciAqdXJsKQoreworCWNoYXIgKnZhbDsKKwljaGFyICp0OworCXVpbnQzMl90IGFjdGl2ZV9jdHggPSBEVU1QX0NUWDsKKwl1aW50MzJfdCBsZW47CisKKwlyZXNldF9kdW1wX2N0eCh1cmwpOworCXdoaWxlICgodCA9IGJ1ZmZlcl9yZWFkX2xpbmUoJmlucHV0KSkpIHsKKwkJdmFsID0gc3RyY2hyKHQsICc6Jyk7CisJCWlmICghdmFsKQorCQkJY29udGludWU7CisJCXZhbCsrOworCQlpZiAoKnZhbCAhPSAnICcpCisJCQljb250aW51ZTsKKwkJdmFsKys7CisKKwkJLyogc3RybGVuKGtleSkgKyAxICovCisJCXN3aXRjaCAodmFsIC0gdCAtIDEpIHsKKwkJY2FzZSBzaXplb2YoIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uIik6CisJCQlpZiAoY29uc3RjbXAodCwgIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uIikpCisJCQkJY29udGludWU7CisJCQlkdW1wX2N0eC52ZXJzaW9uID0gYXRvaSh2YWwpOworCQkJaWYgKGR1bXBfY3R4LnZlcnNpb24gPiAzKQorCQkJCWRpZSgiZXhwZWN0ZWQgc3ZuIGR1bXAgZm9ybWF0IHZlcnNpb24gPD0gMywgZm91bmQgJSJQUkl1MzIsCisJCQkJICAgIGR1bXBfY3R4LnZlcnNpb24pOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJVVUlEIik6CisJCQlpZiAoY29uc3RjbXAodCwgIlVVSUQiKSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmJ1Zl9yZXNldCgmZHVtcF9jdHgudXVpZCk7CisJCQlzdHJidWZfYWRkc3RyKCZkdW1wX2N0eC51dWlkLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJSZXZpc2lvbi1udW1iZXIiKToKKwkJCWlmIChjb25zdGNtcCh0LCAiUmV2aXNpb24tbnVtYmVyIikpCisJCQkJY29udGludWU7CisJCQlpZiAoYWN0aXZlX2N0eCA9PSBOT0RFX0NUWCkKKwkJCQloYW5kbGVfbm9kZSgpOworCQkJaWYgKGFjdGl2ZV9jdHggPT0gUkVWX0NUWCkKKwkJCQliZWdpbl9yZXZpc2lvbigpOworCQkJaWYgKGFjdGl2ZV9jdHggIT0gRFVNUF9DVFgpCisJCQkJZW5kX3JldmlzaW9uKCk7CisJCQlhY3RpdmVfY3R4ID0gUkVWX0NUWDsKKwkJCXJlc2V0X3Jldl9jdHgoYXRvaSh2YWwpKTsKKwkJCWJyZWFrOworCQljYXNlIHNpemVvZigiTm9kZS1wYXRoIik6CisJCQlpZiAoY29uc3RjbXAodCwgIk5vZGUtIikpCisJCQkJY29udGludWU7CisJCQlpZiAoIWNvbnN0Y21wKHQgKyBzdHJsZW4oIk5vZGUtIiksICJwYXRoIikpIHsKKwkJCQlpZiAoYWN0aXZlX2N0eCA9PSBOT0RFX0NUWCkKKwkJCQkJaGFuZGxlX25vZGUoKTsKKwkJCQlpZiAoYWN0aXZlX2N0eCA9PSBSRVZfQ1RYKQorCQkJCQliZWdpbl9yZXZpc2lvbigpOworCQkJCWFjdGl2ZV9jdHggPSBOT0RFX0NUWDsKKwkJCQlyZXNldF9ub2RlX2N0eCh2YWwpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNvbnN0Y21wKHQgKyBzdHJsZW4oIk5vZGUtIiksICJraW5kIikpCisJCQkJY29udGludWU7CisJCQlpZiAoIXN0cmNtcCh2YWwsICJkaXIiKSkKKwkJCQlub2RlX2N0eC50eXBlID0gUkVQT19NT0RFX0RJUjsKKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsLCAiZmlsZSIpKQorCQkJCW5vZGVfY3R4LnR5cGUgPSBSRVBPX01PREVfQkxCOworCQkJZWxzZQorCQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBub2RlLWtpbmQ6ICVzXG4iLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJOb2RlLWFjdGlvbiIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJOb2RlLWFjdGlvbiIpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFzdHJjbXAodmFsLCAiZGVsZXRlIikpIHsKKwkJCQlub2RlX2N0eC5hY3Rpb24gPSBOT0RFQUNUX0RFTEVURTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCh2YWwsICJhZGQiKSkgeworCQkJCW5vZGVfY3R4LmFjdGlvbiA9IE5PREVBQ1RfQUREOworCQkJfSBlbHNlIGlmICghc3RyY21wKHZhbCwgImNoYW5nZSIpKSB7CisJCQkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9DSEFOR0U7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAodmFsLCAicmVwbGFjZSIpKSB7CisJCQkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9SRVBMQUNFOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gbm9kZS1hY3Rpb246ICVzXG4iLCB2YWwpOworCQkJCW5vZGVfY3R4LmFjdGlvbiA9IE5PREVBQ1RfVU5LTk9XTjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHNpemVvZigiTm9kZS1jb3B5ZnJvbS1wYXRoIik6CisJCQlpZiAoY29uc3RjbXAodCwgIk5vZGUtY29weWZyb20tcGF0aCIpKQorCQkJCWNvbnRpbnVlOworCQkJc3RyYnVmX3Jlc2V0KCZub2RlX2N0eC5zcmMpOworCQkJc3RyYnVmX2FkZHN0cigmbm9kZV9jdHguc3JjLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJOb2RlLWNvcHlmcm9tLXJldiIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJOb2RlLWNvcHlmcm9tLXJldiIpKQorCQkJCWNvbnRpbnVlOworCQkJbm9kZV9jdHguc3JjUmV2ID0gYXRvaSh2YWwpOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJUZXh0LWNvbnRlbnQtbGVuZ3RoIik6CisJCQlpZiAoY29uc3RjbXAodCwgIlRleHQiKSAmJiBjb25zdGNtcCh0LCAiUHJvcCIpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNvbnN0Y21wKHQgKyA0LCAiLWNvbnRlbnQtbGVuZ3RoIikpCisJCQkJY29udGludWU7CisJCQl7CisJCQkJY2hhciAqZW5kOworCQkJCXVpbnRtYXhfdCBsZW47CisKKwkJCQlsZW4gPSBzdHJ0b3VtYXgodmFsLCAmZW5kLCAxMCk7CisJCQkJaWYgKCFpc2RpZ2l0KCp2YWwpIHx8ICplbmQpCisJCQkJCWRpZSgiaW52YWxpZCBkdW1wOiBub24tbnVtZXJpYyBsZW5ndGggJXMiLCB2YWwpOworCQkJCWlmIChsZW4gPiBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKG9mZl90KSkKKwkJCQkJZGllKCJ1bnJlcHJlc2VudGFibGUgbGVuZ3RoIGluIGR1bXA6ICVzIiwgdmFsKTsKKworCQkJCWlmICgqdCA9PSAnVCcpCisJCQkJCW5vZGVfY3R4LnRleHRfbGVuZ3RoID0gKG9mZl90KSBsZW47CisJCQkJZWxzZQorCQkJCQlub2RlX2N0eC5wcm9wX2xlbmd0aCA9IChvZmZfdCkgbGVuOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIHNpemVvZigiVGV4dC1kZWx0YSIpOgorCQkJaWYgKCFjb25zdGNtcCh0LCAiVGV4dC1kZWx0YSIpKSB7CisJCQkJbm9kZV9jdHgudGV4dF9kZWx0YSA9ICFzdHJjbXAodmFsLCAidHJ1ZSIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNvbnN0Y21wKHQsICJQcm9wLWRlbHRhIikpCisJCQkJY29udGludWU7CisJCQlub2RlX2N0eC5wcm9wX2RlbHRhID0gIXN0cmNtcCh2YWwsICJ0cnVlIik7CisJCQlicmVhazsKKwkJY2FzZSBzaXplb2YoIkNvbnRlbnQtbGVuZ3RoIik6CisJCQlpZiAoY29uc3RjbXAodCwgIkNvbnRlbnQtbGVuZ3RoIikpCisJCQkJY29udGludWU7CisJCQlsZW4gPSBhdG9pKHZhbCk7CisJCQl0ID0gYnVmZmVyX3JlYWRfbGluZSgmaW5wdXQpOworCQkJaWYgKCF0KQorCQkJCWRpZV9zaG9ydF9yZWFkKCk7CisJCQlpZiAoKnQpCisJCQkJZGllKCJpbnZhbGlkIGR1bXA6IGV4cGVjdGVkIGJsYW5rIGxpbmUgYWZ0ZXIgY29udGVudCBsZW5ndGggaGVhZGVyIik7CisJCQlpZiAoYWN0aXZlX2N0eCA9PSBSRVZfQ1RYKSB7CisJCQkJcmVhZF9wcm9wcygpOworCQkJfSBlbHNlIGlmIChhY3RpdmVfY3R4ID09IE5PREVfQ1RYKSB7CisJCQkJaGFuZGxlX25vZGUoKTsKKwkJCQlhY3RpdmVfY3R4ID0gSU5URVJOT0RFX0NUWDsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIGNvbnRlbnQgbGVuZ3RoIGhlYWRlcjogJSJQUkl1MzIiXG4iLCBsZW4pOworCQkJCWlmIChidWZmZXJfc2tpcF9ieXRlcygmaW5wdXQsIGxlbikgIT0gbGVuKQorCQkJCQlkaWVfc2hvcnRfcmVhZCgpOworCQkJfQorCQl9CisJfQorCWlmIChidWZmZXJfZmVycm9yKCZpbnB1dCkpCisJCWRpZV9zaG9ydF9yZWFkKCk7CisJaWYgKGFjdGl2ZV9jdHggPT0gTk9ERV9DVFgpCisJCWhhbmRsZV9ub2RlKCk7CisJaWYgKGFjdGl2ZV9jdHggPT0gUkVWX0NUWCkKKwkJYmVnaW5fcmV2aXNpb24oKTsKKwlpZiAoYWN0aXZlX2N0eCAhPSBEVU1QX0NUWCkKKwkJZW5kX3JldmlzaW9uKCk7Cit9CisKK2ludCBzdm5kdW1wX2luaXQoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJaWYgKGJ1ZmZlcl9pbml0KCZpbnB1dCwgZmlsZW5hbWUpKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBvcGVuICVzOiAlcyIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCWZhc3RfZXhwb3J0X2luaXQoUkVQT1JUX0ZJTEVOTyk7CisJc3RyYnVmX2luaXQoJmR1bXBfY3R4LnV1aWQsIDQwOTYpOworCXN0cmJ1Zl9pbml0KCZkdW1wX2N0eC51cmwsIDQwOTYpOworCXN0cmJ1Zl9pbml0KCZyZXZfY3R4LmxvZywgNDA5Nik7CisJc3RyYnVmX2luaXQoJnJldl9jdHguYXV0aG9yLCA0MDk2KTsKKwlzdHJidWZfaW5pdCgmbm9kZV9jdHguc3JjLCA0MDk2KTsKKwlzdHJidWZfaW5pdCgmbm9kZV9jdHguZHN0LCA0MDk2KTsKKwlyZXNldF9kdW1wX2N0eChOVUxMKTsKKwlyZXNldF9yZXZfY3R4KDApOworCXJlc2V0X25vZGVfY3R4KE5VTEwpOworCXJldHVybiAwOworfQorCit2b2lkIHN2bmR1bXBfZGVpbml0KHZvaWQpCit7CisJZmFzdF9leHBvcnRfZGVpbml0KCk7CisJcmVzZXRfZHVtcF9jdHgoTlVMTCk7CisJcmVzZXRfcmV2X2N0eCgwKTsKKwlyZXNldF9ub2RlX2N0eChOVUxMKTsKKwlzdHJidWZfcmVsZWFzZSgmcmV2X2N0eC5sb2cpOworCXN0cmJ1Zl9yZWxlYXNlKCZub2RlX2N0eC5zcmMpOworCXN0cmJ1Zl9yZWxlYXNlKCZub2RlX2N0eC5kc3QpOworCWlmIChidWZmZXJfZGVpbml0KCZpbnB1dCkpCisJCWZwcmludGYoc3RkZXJyLCAiSW5wdXQgZXJyb3JcbiIpOworCWlmIChmZXJyb3Ioc3Rkb3V0KSkKKwkJZnByaW50ZihzdGRlcnIsICJPdXRwdXQgZXJyb3JcbiIpOworfQorCit2b2lkIHN2bmR1bXBfcmVzZXQodm9pZCkKK3sKKwlzdHJidWZfcmVsZWFzZSgmZHVtcF9jdHgudXVpZCk7CisJc3RyYnVmX3JlbGVhc2UoJmR1bXBfY3R4LnVybCk7CisJc3RyYnVmX3JlbGVhc2UoJnJldl9jdHgubG9nKTsKKwlzdHJidWZfcmVsZWFzZSgmcmV2X2N0eC5hdXRob3IpOworfQpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9zdm5kdW1wLmggYi92Y3Mtc3ZuL3N2bmR1bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjljZWIwCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9zdm5kdW1wLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIFNWTkRVTVBfSF8KKyNkZWZpbmUgU1ZORFVNUF9IXworCitpbnQgc3ZuZHVtcF9pbml0KGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3ZvaWQgc3ZuZHVtcF9yZWFkKGNvbnN0IGNoYXIgKnVybCk7Cit2b2lkIHN2bmR1bXBfZGVpbml0KHZvaWQpOwordm9pZCBzdm5kdW1wX3Jlc2V0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3ZlcnNpb24uYyBiL3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTA2YTgwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyc2lvbi5jCkBAIC0wLDAgKzEsMzggQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK2NvbnN0IGNoYXIgZ2l0X3ZlcnNpb25fc3RyaW5nW10gPSBHSVRfVkVSU0lPTjsKKworY29uc3QgY2hhciAqZ2l0X3VzZXJfYWdlbnQodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqYWdlbnQgPSBOVUxMOworCisJaWYgKCFhZ2VudCkgeworCQlhZ2VudCA9IGdldGVudigiR0lUX1VTRVJfQUdFTlQiKTsKKwkJaWYgKCFhZ2VudCkKKwkJCWFnZW50ID0gR0lUX1VTRVJfQUdFTlQ7CisJfQorCisJcmV0dXJuIGFnZW50OworfQorCitjb25zdCBjaGFyICpnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqYWdlbnQgPSBOVUxMOworCisJaWYgKCFhZ2VudCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgaTsKKworCQlzdHJidWZfYWRkc3RyKCZidWYsIGdpdF91c2VyX2FnZW50KCkpOworCQlzdHJidWZfdHJpbSgmYnVmKTsKKwkJZm9yIChpID0gMDsgaSA8IGJ1Zi5sZW47IGkrKykgeworCQkJaWYgKGJ1Zi5idWZbaV0gPD0gMzIgfHwgYnVmLmJ1ZltpXSA+PSAxMjcpCisJCQkJYnVmLmJ1ZltpXSA9ICcuJzsKKwkJfQorCQlhZ2VudCA9IGJ1Zi5idWY7CisJfQorCisJcmV0dXJuIGFnZW50OworfQpkaWZmIC0tZ2l0IGEvdmVyc2lvbi5oIGIvdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTFhNGYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJzaW9uLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIFZFUlNJT05fSAorI2RlZmluZSBWRVJTSU9OX0gKKworZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X3ZlcnNpb25fc3RyaW5nW107CisKK2NvbnN0IGNoYXIgKmdpdF91c2VyX2FnZW50KHZvaWQpOworY29uc3QgY2hhciAqZ2l0X3VzZXJfYWdlbnRfc2FuaXRpemVkKHZvaWQpOworCisjZW5kaWYgLyogVkVSU0lPTl9IICovCmRpZmYgLS1naXQgYS93YWxrZXIuYyBiL3dhbGtlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzg5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi93YWxrZXIuYwpAQCAtMCwwICsxLDMyMCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAid2Fsa2VyLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGN1cnJlbnRfY29tbWl0X3NoYTFbMjBdOworCit2b2lkIHdhbGtlcl9zYXkoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIgKmhleCkKK3sKKwlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KQorCQlmcHJpbnRmKHN0ZGVyciwgZm10LCBoZXgpOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRfbWlzc2luZyhjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJY2hhciBtaXNzaW5nX2hleFs0MV07CisJc3RyY3B5KG1pc3NpbmdfaGV4LCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBvYnRhaW4gbmVlZGVkICVzICVzXG4iLAorCQlvYmotPnR5cGUgPyB0eXBlbmFtZShvYmotPnR5cGUpOiAib2JqZWN0IiwgbWlzc2luZ19oZXgpOworCWlmICghaXNfbnVsbF9zaGExKGN1cnJlbnRfY29tbWl0X3NoYTEpKQorCQlmcHJpbnRmKHN0ZGVyciwgIndoaWxlIHByb2Nlc3NpbmcgY29tbWl0ICVzLlxuIiwKKwkJCXNoYTFfdG9faGV4KGN1cnJlbnRfY29tbWl0X3NoYTEpKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IG9iamVjdCAqb2JqKTsKKworc3RhdGljIGludCBwcm9jZXNzX3RyZWUoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisKKwlpZiAocGFyc2VfdHJlZSh0cmVlKSkKKwkJcmV0dXJuIC0xOworCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gTlVMTDsKKworCQkvKiBzdWJtb2R1bGUgY29tbWl0cyBhcmUgbm90IHN0b3JlZCBpbiB0aGUgc3VwZXJwcm9qZWN0ICovCisJCWlmIChTX0lTR0lUTElOSyhlbnRyeS5tb2RlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkgeworCQkJc3RydWN0IHRyZWUgKnRyZWUgPSBsb29rdXBfdHJlZShlbnRyeS5zaGExKTsKKwkJCWlmICh0cmVlKQorCQkJCW9iaiA9ICZ0cmVlLT5vYmplY3Q7CisJCX0KKwkJZWxzZSB7CisJCQlzdHJ1Y3QgYmxvYiAqYmxvYiA9IGxvb2t1cF9ibG9iKGVudHJ5LnNoYTEpOworCQkJaWYgKGJsb2IpCisJCQkJb2JqID0gJmJsb2ItPm9iamVjdDsKKwkJfQorCQlpZiAoIW9iaiB8fCBwcm9jZXNzKHdhbGtlciwgb2JqKSkKKwkJCXJldHVybiAtMTsKKwl9CisJZnJlZSh0cmVlLT5idWZmZXIpOworCXRyZWUtPmJ1ZmZlciA9IE5VTEw7CisJdHJlZS0+c2l6ZSA9IDA7CisJdHJlZS0+b2JqZWN0LnBhcnNlZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQ09NUExFVEUJKDFVIDw8IDApCisjZGVmaW5lIFNFRU4JCSgxVSA8PCAxKQorI2RlZmluZSBUT19TQ0FOCQkoMVUgPDwgMikKKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqY29tcGxldGUgPSBOVUxMOworCitzdGF0aWMgaW50IHByb2Nlc3NfY29tbWl0KHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJcmV0dXJuIC0xOworCisJd2hpbGUgKGNvbXBsZXRlICYmIGNvbXBsZXRlLT5pdGVtLT5kYXRlID49IGNvbW1pdC0+ZGF0ZSkgeworCQlwb3BfbW9zdF9yZWNlbnRfY29tbWl0KCZjb21wbGV0ZSwgQ09NUExFVEUpOworCX0KKworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIENPTVBMRVRFKQorCQlyZXR1cm4gMDsKKworCWhhc2hjcHkoY3VycmVudF9jb21taXRfc2hhMSwgY29tbWl0LT5vYmplY3Quc2hhMSk7CisKKwl3YWxrZXJfc2F5KHdhbGtlciwgIndhbGsgJXNcbiIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKworCWlmICh3YWxrZXItPmdldF90cmVlKSB7CisJCWlmIChwcm9jZXNzKHdhbGtlciwgJmNvbW1pdC0+dHJlZS0+b2JqZWN0KSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKCF3YWxrZXItPmdldF9hbGwpCisJCQl3YWxrZXItPmdldF90cmVlID0gMDsKKwl9CisJaWYgKHdhbGtlci0+Z2V0X2hpc3RvcnkpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQlmb3IgKDsgcGFyZW50czsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpIHsKKwkJCWlmIChwcm9jZXNzKHdhbGtlciwgJnBhcmVudHMtPml0ZW0tPm9iamVjdCkpCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfdGFnKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IHRhZyAqdGFnKQoreworCWlmIChwYXJzZV90YWcodGFnKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBwcm9jZXNzKHdhbGtlciwgdGFnLT50YWdnZWQpOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9saXN0ICpwcm9jZXNzX3F1ZXVlID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKipwcm9jZXNzX3F1ZXVlX2VuZCA9ICZwcm9jZXNzX3F1ZXVlOworCitzdGF0aWMgaW50IHByb2Nlc3Nfb2JqZWN0KHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IG9iamVjdCAqb2JqKQoreworCWlmIChvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQlpZiAocHJvY2Vzc19jb21taXQod2Fsa2VyLCAoc3RydWN0IGNvbW1pdCAqKW9iaikpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCWlmIChwcm9jZXNzX3RyZWUod2Fsa2VyLCAoc3RydWN0IHRyZWUgKilvYmopKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgeworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCWlmIChwcm9jZXNzX3RhZyh3YWxrZXIsIChzdHJ1Y3QgdGFnICopb2JqKSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIGRldGVybWluZSByZXF1aXJlbWVudHMgIgorCQkgICAgICJvZiB0eXBlICVzIGZvciAlcyIsCisJCSAgICAgdHlwZW5hbWUob2JqLT50eXBlKSwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2VzcyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlpZiAob2JqLT5mbGFncyAmIFNFRU4pCisJCXJldHVybiAwOworCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKworCWlmIChoYXNfc2hhMV9maWxlKG9iai0+c2hhMSkpIHsKKwkJLyogV2UgYWxyZWFkeSBoYXZlIGl0LCBzbyB3ZSBzaG91bGQgc2NhbiBpdCBub3cuICovCisJCW9iai0+ZmxhZ3MgfD0gVE9fU0NBTjsKKwl9CisJZWxzZSB7CisJCWlmIChvYmotPmZsYWdzICYgQ09NUExFVEUpCisJCQlyZXR1cm4gMDsKKwkJd2Fsa2VyLT5wcmVmZXRjaCh3YWxrZXIsIG9iai0+c2hhMSk7CisJfQorCisJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iaiwgcHJvY2Vzc19xdWV1ZV9lbmQpOworCXByb2Nlc3NfcXVldWVfZW5kID0gJigqcHJvY2Vzc19xdWV1ZV9lbmQpLT5uZXh0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvb3Aoc3RydWN0IHdhbGtlciAqd2Fsa2VyKQoreworCXN0cnVjdCBvYmplY3RfbGlzdCAqZWxlbTsKKworCXdoaWxlIChwcm9jZXNzX3F1ZXVlKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHByb2Nlc3NfcXVldWUtPml0ZW07CisJCWVsZW0gPSBwcm9jZXNzX3F1ZXVlOworCQlwcm9jZXNzX3F1ZXVlID0gZWxlbS0+bmV4dDsKKwkJZnJlZShlbGVtKTsKKwkJaWYgKCFwcm9jZXNzX3F1ZXVlKQorCQkJcHJvY2Vzc19xdWV1ZV9lbmQgPSAmcHJvY2Vzc19xdWV1ZTsKKworCQkvKiBJZiB3ZSBhcmUgbm90IHNjYW5uaW5nIHRoaXMgb2JqZWN0LCB3ZSBwbGFjZWQgaXQgaW4KKwkJICogdGhlIHF1ZXVlIGJlY2F1c2Ugd2UgbmVlZGVkIHRvIGZldGNoIGl0IGZpcnN0LgorCQkgKi8KKwkJaWYgKCEgKG9iai0+ZmxhZ3MgJiBUT19TQ0FOKSkgeworCQkJaWYgKHdhbGtlci0+ZmV0Y2god2Fsa2VyLCBvYmotPnNoYTEpKSB7CisJCQkJcmVwb3J0X21pc3Npbmcob2JqKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJaWYgKCFvYmotPnR5cGUpCisJCQlwYXJzZV9vYmplY3Qob2JqLT5zaGExKTsKKwkJaWYgKHByb2Nlc3Nfb2JqZWN0KHdhbGtlciwgb2JqKSkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW50ZXJwcmV0X3RhcmdldChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNoYXIgKnRhcmdldCwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpZiAoIWdldF9zaGExX2hleCh0YXJnZXQsIHNoYTEpKQorCQlyZXR1cm4gMDsKKwlpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KHRhcmdldCwgMCkpIHsKKwkJc3RydWN0IHJlZiAqcmVmID0gYWxsb2NfcmVmKHRhcmdldCk7CisJCWlmICghd2Fsa2VyLT5mZXRjaF9yZWYod2Fsa2VyLCByZWYpKSB7CisJCQloYXNoY3B5KHNoYTEsIHJlZi0+b2xkX3NoYTEpOworCQkJZnJlZShyZWYpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZnJlZShyZWYpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgbWFya19jb21wbGV0ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CisJaWYgKGNvbW1pdCkgeworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBDT01QTEVURTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUoY29tbWl0LCAmY29tcGxldGUpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHdhbGtlcl90YXJnZXRzX3N0ZGluKGNoYXIgKioqdGFyZ2V0LCBjb25zdCBjaGFyICoqKndyaXRlX3JlZikKK3sKKwlpbnQgdGFyZ2V0cyA9IDAsIHRhcmdldHNfYWxsb2MgPSAwOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJKnRhcmdldCA9IE5VTEw7ICp3cml0ZV9yZWYgPSBOVUxMOworCXdoaWxlICgxKSB7CisJCWNoYXIgKnJmX29uZSA9IE5VTEw7CisJCWNoYXIgKnRnX29uZTsKKworCQlpZiAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sICdcbicpID09IEVPRikKKwkJCWJyZWFrOworCQl0Z19vbmUgPSBidWYuYnVmOworCQlyZl9vbmUgPSBzdHJjaHIodGdfb25lLCAnXHQnKTsKKwkJaWYgKHJmX29uZSkKKwkJCSpyZl9vbmUrKyA9IDA7CisKKwkJaWYgKHRhcmdldHMgPj0gdGFyZ2V0c19hbGxvYykgeworCQkJdGFyZ2V0c19hbGxvYyA9IHRhcmdldHNfYWxsb2MgPyB0YXJnZXRzX2FsbG9jICogMiA6IDY0OworCQkJKnRhcmdldCA9IHhyZWFsbG9jKCp0YXJnZXQsIHRhcmdldHNfYWxsb2MgKiBzaXplb2YoKip0YXJnZXQpKTsKKwkJCSp3cml0ZV9yZWYgPSB4cmVhbGxvYygqd3JpdGVfcmVmLCB0YXJnZXRzX2FsbG9jICogc2l6ZW9mKCoqd3JpdGVfcmVmKSk7CisJCX0KKwkJKCp0YXJnZXQpW3RhcmdldHNdID0geHN0cmR1cCh0Z19vbmUpOworCQkoKndyaXRlX3JlZilbdGFyZ2V0c10gPSByZl9vbmUgPyB4c3RyZHVwKHJmX29uZSkgOiBOVUxMOworCQl0YXJnZXRzKys7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiB0YXJnZXRzOworfQorCit2b2lkIHdhbGtlcl90YXJnZXRzX2ZyZWUoaW50IHRhcmdldHMsIGNoYXIgKip0YXJnZXQsIGNvbnN0IGNoYXIgKip3cml0ZV9yZWYpCit7CisJd2hpbGUgKHRhcmdldHMtLSkgeworCQlmcmVlKHRhcmdldFt0YXJnZXRzXSk7CisJCWlmICh3cml0ZV9yZWYpCisJCQlmcmVlKChjaGFyICopIHdyaXRlX3JlZlt0YXJnZXRzXSk7CisJfQorfQorCitpbnQgd2Fsa2VyX2ZldGNoKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgaW50IHRhcmdldHMsIGNoYXIgKip0YXJnZXQsCisJCSBjb25zdCBjaGFyICoqd3JpdGVfcmVmLCBjb25zdCBjaGFyICp3cml0ZV9yZWZfbG9nX2RldGFpbHMpCit7CisJc3RydWN0IHJlZl9sb2NrICoqbG9jayA9IHhjYWxsb2ModGFyZ2V0cywgc2l6ZW9mKHN0cnVjdCByZWZfbG9jayAqKSk7CisJdW5zaWduZWQgY2hhciAqc2hhMSA9IHhtYWxsb2ModGFyZ2V0cyAqIDIwKTsKKwljaGFyICptc2c7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0czsgaSsrKSB7CisJCWlmICghd3JpdGVfcmVmIHx8ICF3cml0ZV9yZWZbaV0pCisJCQljb250aW51ZTsKKworCQlsb2NrW2ldID0gbG9ja19yZWZfc2hhMSh3cml0ZV9yZWZbaV0sIE5VTEwpOworCQlpZiAoIWxvY2tbaV0pIHsKKwkJCWVycm9yKCJDYW4ndCBsb2NrIHJlZiAlcyIsIHdyaXRlX3JlZltpXSk7CisJCQlnb3RvIHVubG9ja19hbmRfZmFpbDsKKwkJfQorCX0KKworCWlmICghd2Fsa2VyLT5nZXRfcmVjb3ZlcikKKwkJZm9yX2VhY2hfcmVmKG1hcmtfY29tcGxldGUsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IHRhcmdldHM7IGkrKykgeworCQlpZiAoaW50ZXJwcmV0X3RhcmdldCh3YWxrZXIsIHRhcmdldFtpXSwgJnNoYTFbMjAgKiBpXSkpIHsKKwkJCWVycm9yKCJDb3VsZCBub3QgaW50ZXJwcmV0IHJlc3BvbnNlIGZyb20gc2VydmVyICclcycgYXMgc29tZXRoaW5nIHRvIHB1bGwiLCB0YXJnZXRbaV0pOworCQkJZ290byB1bmxvY2tfYW5kX2ZhaWw7CisJCX0KKwkJaWYgKHByb2Nlc3Mod2Fsa2VyLCBsb29rdXBfdW5rbm93bl9vYmplY3QoJnNoYTFbMjAgKiBpXSkpKQorCQkJZ290byB1bmxvY2tfYW5kX2ZhaWw7CisJfQorCisJaWYgKGxvb3Aod2Fsa2VyKSkKKwkJZ290byB1bmxvY2tfYW5kX2ZhaWw7CisKKwlpZiAod3JpdGVfcmVmX2xvZ19kZXRhaWxzKSB7CisJCW1zZyA9IHhtYWxsb2Moc3RybGVuKHdyaXRlX3JlZl9sb2dfZGV0YWlscykgKyAxMik7CisJCXNwcmludGYobXNnLCAiZmV0Y2ggZnJvbSAlcyIsIHdyaXRlX3JlZl9sb2dfZGV0YWlscyk7CisJfSBlbHNlIHsKKwkJbXNnID0gTlVMTDsKKwl9CisJZm9yIChpID0gMDsgaSA8IHRhcmdldHM7IGkrKykgeworCQlpZiAoIXdyaXRlX3JlZiB8fCAhd3JpdGVfcmVmW2ldKQorCQkJY29udGludWU7CisJCXJldCA9IHdyaXRlX3JlZl9zaGExKGxvY2tbaV0sICZzaGExWzIwICogaV0sIG1zZyA/IG1zZyA6ICJmZXRjaCAodW5rbm93bikiKTsKKwkJbG9ja1tpXSA9IE5VTEw7CisJCWlmIChyZXQpCisJCQlnb3RvIHVubG9ja19hbmRfZmFpbDsKKwl9CisJZnJlZShtc2cpOworCisJcmV0dXJuIDA7CisKK3VubG9ja19hbmRfZmFpbDoKKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0czsgaSsrKQorCQlpZiAobG9ja1tpXSkKKwkJCXVubG9ja19yZWYobG9ja1tpXSk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgd2Fsa2VyX2ZyZWUoc3RydWN0IHdhbGtlciAqd2Fsa2VyKQoreworCXdhbGtlci0+Y2xlYW51cCh3YWxrZXIpOworCWZyZWUod2Fsa2VyKTsKK30KZGlmZiAtLWdpdCBhL3dhbGtlci5oIGIvd2Fsa2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlNTc2NQotLS0gL2Rldi9udWxsCisrKyBiL3dhbGtlci5oCkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgV0FMS0VSX0gKKyNkZWZpbmUgV0FMS0VSX0gKKworI2luY2x1ZGUgInJlbW90ZS5oIgorCitzdHJ1Y3Qgd2Fsa2VyIHsKKwl2b2lkICpkYXRhOworCWludCAoKmZldGNoX3JlZikoc3RydWN0IHdhbGtlciAqLCBzdHJ1Y3QgcmVmICpyZWYpOworCXZvaWQgKCpwcmVmZXRjaCkoc3RydWN0IHdhbGtlciAqLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKwlpbnQgKCpmZXRjaCkoc3RydWN0IHdhbGtlciAqLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IHdhbGtlciAqKTsKKwlpbnQgZ2V0X3RyZWU7CisJaW50IGdldF9oaXN0b3J5OworCWludCBnZXRfYWxsOworCWludCBnZXRfdmVyYm9zZWx5OworCWludCBnZXRfcmVjb3ZlcjsKKworCWludCBjb3JydXB0X29iamVjdF9mb3VuZDsKK307CisKKy8qIFJlcG9ydCB3aGF0IHdlIGdvdCB1bmRlciBnZXRfdmVyYm9zZWx5ICovCit2b2lkIHdhbGtlcl9zYXkoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qIExvYWQgcHVsbCB0YXJnZXRzIGZyb20gc3RkaW4gKi8KK2ludCB3YWxrZXJfdGFyZ2V0c19zdGRpbihjaGFyICoqKnRhcmdldCwgY29uc3QgY2hhciAqKip3cml0ZV9yZWYpOworCisvKiBGcmVlIHVwIGxvYWRlZCB0YXJnZXRzICovCit2b2lkIHdhbGtlcl90YXJnZXRzX2ZyZWUoaW50IHRhcmdldHMsIGNoYXIgKip0YXJnZXQsIGNvbnN0IGNoYXIgKip3cml0ZV9yZWYpOworCisvKiBJZiB3cml0ZV9yZWYgaXMgc2V0LCB0aGUgcmVmIGZpbGVuYW1lIHRvIHdyaXRlIHRoZSB0YXJnZXQgdmFsdWUgdG8uICovCisvKiBJZiB3cml0ZV9yZWZfbG9nX2RldGFpbHMgaXMgc2V0LCBhZGRpdGlvbmFsIHRleHQgd2lsbCBhcHBlYXIgaW4gdGhlIHJlZiBsb2cuICovCitpbnQgd2Fsa2VyX2ZldGNoKHN0cnVjdCB3YWxrZXIgKmltcGwsIGludCB0YXJnZXRzLCBjaGFyICoqdGFyZ2V0LAorCQkgY29uc3QgY2hhciAqKndyaXRlX3JlZiwgY29uc3QgY2hhciAqd3JpdGVfcmVmX2xvZ19kZXRhaWxzKTsKKwordm9pZCB3YWxrZXJfZnJlZShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpOworCitzdHJ1Y3Qgd2Fsa2VyICpnZXRfaHR0cF93YWxrZXIoY29uc3QgY2hhciAqdXJsKTsKKworI2VuZGlmIC8qIFdBTEtFUl9IICovCmRpZmYgLS1naXQgYS93cmFwLWZvci1iaW4uc2ggYi93cmFwLWZvci1iaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhOGRkMAotLS0gL2Rldi9udWxsCisrKyBiL3dyYXAtZm9yLWJpbi5zaApAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKworIyB3cmFwLWZvci1iaW4uc2g6IFRlbXBsYXRlIGZvciBnaXQgZXhlY3V0YWJsZSB3cmFwcGVyIHNjcmlwdHMKKyMgdG8gcnVuIHRlc3Qgc3VpdGUgYWdhaW5zdCBzYW5kYm94LCBidXQgd2l0aCBvbmx5IGJpbmRpci1pbnN0YWxsZWQKKyMgZXhlY3V0YWJsZXMgaW4gUEFUSC4gIFRoZSBNYWtlZmlsZSBjb3BpZXMgdGhpcyBpbnRvIHZhcmlvdXMKKyMgZmlsZXMgaW4gYmluLXdyYXBwZXJzLCBzdWJzdGl0dXRpbmcKKyMgQEBCVUlMRF9ESVJAQCBhbmQgQEBQUk9HQEAuCisKK0dJVF9FWEVDX1BBVEg9J0BAQlVJTERfRElSQEAnCitpZiB0ZXN0IC1uICIkTk9fU0VUX0dJVF9URU1QTEFURV9ESVIiCit0aGVuCisJdW5zZXQgR0lUX1RFTVBMQVRFX0RJUgorZWxzZQorCUdJVF9URU1QTEFURV9ESVI9J0BAQlVJTERfRElSQEAvdGVtcGxhdGVzL2JsdCcKKwlleHBvcnQgR0lUX1RFTVBMQVRFX0RJUgorZmkKK0dJVFBFUkxMSUI9J0BAQlVJTERfRElSQEAvcGVybC9ibGliL2xpYicKK0dJVF9URVhURE9NQUlORElSPSdAQEJVSUxEX0RJUkBAL3BvL2J1aWxkL2xvY2FsZScKK1BBVEg9J0BAQlVJTERfRElSQEAvYmluLXdyYXBwZXJzOiciJFBBVEgiCitleHBvcnQgR0lUX0VYRUNfUEFUSCBHSVRQRVJMTElCIFBBVEggR0lUX1RFWFRET01BSU5ESVIKKworZXhlYyAiJHtHSVRfRVhFQ19QQVRIfS9AQFBST0dAQCIgIiRAIgpkaWZmIC0tZ2l0IGEvd3JhcHBlci5jIGIvd3JhcHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NzM5YWEKLS0tIC9kZXYvbnVsbAorKysgYi93cmFwcGVyLmMKQEAgLTAsMCArMSw0MjkgQEAKKy8qCisgKiBWYXJpb3VzIHRyaXZpYWwgaGVscGVyIHdyYXBwZXJzIGFyb3VuZCBzdGFuZGFyZCBmdW5jdGlvbnMKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyB2b2lkIGRvX25vdGhpbmcoc2l6ZV90IHNpemUpCit7Cit9CisKK3N0YXRpYyB2b2lkICgqdHJ5X3RvX2ZyZWVfcm91dGluZSkoc2l6ZV90IHNpemUpID0gZG9fbm90aGluZzsKKworc3RhdGljIHZvaWQgbWVtb3J5X2xpbWl0X2NoZWNrKHNpemVfdCBzaXplKQoreworCXN0YXRpYyBpbnQgbGltaXQgPSAtMTsKKwlpZiAobGltaXQgPT0gLTEpIHsKKwkJY29uc3QgY2hhciAqZW52ID0gZ2V0ZW52KCJHSVRfQUxMT0NfTElNSVQiKTsKKwkJbGltaXQgPSBlbnYgPyBhdG9pKGVudikgKiAxMDI0IDogMDsKKwl9CisJaWYgKGxpbWl0ICYmIHNpemUgPiBsaW1pdCkKKwkJZGllKCJhdHRlbXB0aW5nIHRvIGFsbG9jYXRlICUiUFJJdU1BWCIgb3ZlciBsaW1pdCAlZCIsCisJCSAgICAoaW50bWF4X3Qpc2l6ZSwgbGltaXQpOworfQorCit0cnlfdG9fZnJlZV90IHNldF90cnlfdG9fZnJlZV9yb3V0aW5lKHRyeV90b19mcmVlX3Qgcm91dGluZSkKK3sKKwl0cnlfdG9fZnJlZV90IG9sZCA9IHRyeV90b19mcmVlX3JvdXRpbmU7CisJaWYgKCFyb3V0aW5lKQorCQlyb3V0aW5lID0gZG9fbm90aGluZzsKKwl0cnlfdG9fZnJlZV9yb3V0aW5lID0gcm91dGluZTsKKwlyZXR1cm4gb2xkOworfQorCitjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKwljaGFyICpyZXQgPSBzdHJkdXAoc3RyKTsKKwlpZiAoIXJldCkgeworCQl0cnlfdG9fZnJlZV9yb3V0aW5lKHN0cmxlbihzdHIpICsgMSk7CisJCXJldCA9IHN0cmR1cChzdHIpOworCQlpZiAoIXJldCkKKwkJCWRpZSgiT3V0IG9mIG1lbW9yeSwgc3RyZHVwIGZhaWxlZCIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkICp4bWFsbG9jKHNpemVfdCBzaXplKQoreworCXZvaWQgKnJldDsKKworCW1lbW9yeV9saW1pdF9jaGVjayhzaXplKTsKKwlyZXQgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFyZXQgJiYgIXNpemUpCisJCXJldCA9IG1hbGxvYygxKTsKKwlpZiAoIXJldCkgeworCQl0cnlfdG9fZnJlZV9yb3V0aW5lKHNpemUpOworCQlyZXQgPSBtYWxsb2Moc2l6ZSk7CisJCWlmICghcmV0ICYmICFzaXplKQorCQkJcmV0ID0gbWFsbG9jKDEpOworCQlpZiAoIXJldCkKKwkJCWRpZSgiT3V0IG9mIG1lbW9yeSwgbWFsbG9jIGZhaWxlZCAodHJpZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzKSIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZSk7CisJfQorI2lmZGVmIFhNQUxMT0NfUE9JU09OCisJbWVtc2V0KHJldCwgMHhBNSwgc2l6ZSk7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCit2b2lkICp4bWFsbG9jeihzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICpyZXQ7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3Moc2l6ZSwgMSkpCisJCWRpZSgiRGF0YSB0b28gbGFyZ2UgdG8gZml0IGludG8gdmlydHVhbCBtZW1vcnkgc3BhY2UuIik7CisJcmV0ID0geG1hbGxvYyhzaXplICsgMSk7CisJKChjaGFyKilyZXQpW3NpemVdID0gMDsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogeG1lbWR1cHooKSBhbGxvY2F0ZXMgKGxlbiArIDEpIGJ5dGVzIG9mIG1lbW9yeSwgZHVwbGljYXRlcyAibGVuIiBieXRlcyBvZgorICogImRhdGEiIHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCB6ZXJvIHRlcm1pbmF0ZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnksCisgKiBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLAorICogdGhlIHByb2dyYW0gZGllcy4KKyAqLwordm9pZCAqeG1lbWR1cHooY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gbWVtY3B5KHhtYWxsb2N6KGxlbiksIGRhdGEsIGxlbik7Cit9CisKK2NoYXIgKnhzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbikKK3sKKwljaGFyICpwID0gbWVtY2hyKHN0ciwgJ1wwJywgbGVuKTsKKwlyZXR1cm4geG1lbWR1cHooc3RyLCBwID8gcCAtIHN0ciA6IGxlbik7Cit9CisKK3ZvaWQgKnhyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcmV0OworCisJbWVtb3J5X2xpbWl0X2NoZWNrKHNpemUpOworCXJldCA9IHJlYWxsb2MocHRyLCBzaXplKTsKKwlpZiAoIXJldCAmJiAhc2l6ZSkKKwkJcmV0ID0gcmVhbGxvYyhwdHIsIDEpOworCWlmICghcmV0KSB7CisJCXRyeV90b19mcmVlX3JvdXRpbmUoc2l6ZSk7CisJCXJldCA9IHJlYWxsb2MocHRyLCBzaXplKTsKKwkJaWYgKCFyZXQgJiYgIXNpemUpCisJCQlyZXQgPSByZWFsbG9jKHB0ciwgMSk7CisJCWlmICghcmV0KQorCQkJZGllKCJPdXQgb2YgbWVtb3J5LCByZWFsbG9jIGZhaWxlZCIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkICp4Y2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcmV0OworCisJbWVtb3J5X2xpbWl0X2NoZWNrKHNpemUgKiBubWVtYik7CisJcmV0ID0gY2FsbG9jKG5tZW1iLCBzaXplKTsKKwlpZiAoIXJldCAmJiAoIW5tZW1iIHx8ICFzaXplKSkKKwkJcmV0ID0gY2FsbG9jKDEsIDEpOworCWlmICghcmV0KSB7CisJCXRyeV90b19mcmVlX3JvdXRpbmUobm1lbWIgKiBzaXplKTsKKwkJcmV0ID0gY2FsbG9jKG5tZW1iLCBzaXplKTsKKwkJaWYgKCFyZXQgJiYgKCFubWVtYiB8fCAhc2l6ZSkpCisJCQlyZXQgPSBjYWxsb2MoMSwgMSk7CisJCWlmICghcmV0KQorCQkJZGllKCJPdXQgb2YgbWVtb3J5LCBjYWxsb2MgZmFpbGVkIik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB4cmVhZCgpIGlzIHRoZSBzYW1lIGEgcmVhZCgpLCBidXQgaXQgYXV0b21hdGljYWxseSByZXN0YXJ0cyByZWFkKCkKKyAqIG9wZXJhdGlvbnMgd2l0aCBhIHJlY292ZXJhYmxlIGVycm9yIChFQUdBSU4gYW5kIEVJTlRSKS4geHJlYWQoKQorICogRE9FUyBOT1QgR1VBUkFOVEVFIHRoYXQgImxlbiIgYnl0ZXMgaXMgcmVhZCBldmVuIGlmIHRoZSBkYXRhIGlzIGF2YWlsYWJsZS4KKyAqLworc3NpemVfdCB4cmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzc2l6ZV90IG5yOworCXdoaWxlICgxKSB7CisJCW5yID0gcmVhZChmZCwgYnVmLCBsZW4pOworCQlpZiAoKG5yIDwgMCkgJiYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIG5yOworCX0KK30KKworLyoKKyAqIHh3cml0ZSgpIGlzIHRoZSBzYW1lIGEgd3JpdGUoKSwgYnV0IGl0IGF1dG9tYXRpY2FsbHkgcmVzdGFydHMgd3JpdGUoKQorICogb3BlcmF0aW9ucyB3aXRoIGEgcmVjb3ZlcmFibGUgZXJyb3IgKEVBR0FJTiBhbmQgRUlOVFIpLiB4d3JpdGUoKSBET0VTIE5PVAorICogR1VBUkFOVEVFIHRoYXQgImxlbiIgYnl0ZXMgaXMgd3JpdHRlbiBldmVuIGlmIHRoZSBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bC4KKyAqLworc3NpemVfdCB4d3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3NpemVfdCBucjsKKwl3aGlsZSAoMSkgeworCQluciA9IHdyaXRlKGZkLCBidWYsIGxlbik7CisJCWlmICgobnIgPCAwKSAmJiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gbnI7CisJfQorfQorCitzc2l6ZV90IHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWNoYXIgKnAgPSBidWY7CisJc3NpemVfdCB0b3RhbCA9IDA7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXNzaXplX3QgbG9hZGVkID0geHJlYWQoZmQsIHAsIGNvdW50KTsKKwkJaWYgKGxvYWRlZCA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChsb2FkZWQgPT0gMCkKKwkJCXJldHVybiB0b3RhbDsKKwkJY291bnQgLT0gbG9hZGVkOworCQlwICs9IGxvYWRlZDsKKwkJdG90YWwgKz0gbG9hZGVkOworCX0KKworCXJldHVybiB0b3RhbDsKK30KKworc3NpemVfdCB3cml0ZV9pbl9mdWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJY29uc3QgY2hhciAqcCA9IGJ1ZjsKKwlzc2l6ZV90IHRvdGFsID0gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJc3NpemVfdCB3cml0dGVuID0geHdyaXRlKGZkLCBwLCBjb3VudCk7CisJCWlmICh3cml0dGVuIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKCF3cml0dGVuKSB7CisJCQllcnJubyA9IEVOT1NQQzsKKwkJCXJldHVybiAtMTsKKwkJfQorCQljb3VudCAtPSB3cml0dGVuOworCQlwICs9IHdyaXR0ZW47CisJCXRvdGFsICs9IHdyaXR0ZW47CisJfQorCisJcmV0dXJuIHRvdGFsOworfQorCitpbnQgeGR1cChpbnQgZmQpCit7CisJaW50IHJldCA9IGR1cChmZCk7CisJaWYgKHJldCA8IDApCisJCWRpZV9lcnJubygiZHVwIGZhaWxlZCIpOworCXJldHVybiByZXQ7Cit9CisKK0ZJTEUgKnhmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlKQoreworCUZJTEUgKnN0cmVhbSA9IGZkb3BlbihmZCwgbW9kZSk7CisJaWYgKHN0cmVhbSA9PSBOVUxMKQorCQlkaWVfZXJybm8oIk91dCBvZiBtZW1vcnk/IGZkb3BlbiBmYWlsZWQiKTsKKwlyZXR1cm4gc3RyZWFtOworfQorCitpbnQgeG1rc3RlbXAoY2hhciAqdGVtcGxhdGUpCit7CisJaW50IGZkOworCWNoYXIgb3JpZ3RlbXBsYXRlW1BBVEhfTUFYXTsKKwlzdHJsY3B5KG9yaWd0ZW1wbGF0ZSwgdGVtcGxhdGUsIHNpemVvZihvcmlndGVtcGxhdGUpKTsKKworCWZkID0gbWtzdGVtcCh0ZW1wbGF0ZSk7CisJaWYgKGZkIDwgMCkgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJY29uc3QgY2hhciAqbm9ucmVsYXRpdmVfdGVtcGxhdGU7CisKKwkJaWYgKCF0ZW1wbGF0ZVswXSkKKwkJCXRlbXBsYXRlID0gb3JpZ3RlbXBsYXRlOworCisJCW5vbnJlbGF0aXZlX3RlbXBsYXRlID0gYWJzb2x1dGVfcGF0aCh0ZW1wbGF0ZSk7CisJCWVycm5vID0gc2F2ZWRfZXJybm87CisJCWRpZV9lcnJubygiVW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAnJXMnIiwKKwkJCW5vbnJlbGF0aXZlX3RlbXBsYXRlKTsKKwl9CisJcmV0dXJuIGZkOworfQorCisvKiBnaXRfbWtzdGVtcCgpIC0gY3JlYXRlIHRtcCBmaWxlIGhvbm9yaW5nIFRNUERJUiB2YXJpYWJsZSAqLworaW50IGdpdF9ta3N0ZW1wKGNoYXIgKnBhdGgsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKnRlbXBsYXRlKQoreworCWNvbnN0IGNoYXIgKnRtcDsKKwlzaXplX3QgbjsKKworCXRtcCA9IGdldGVudigiVE1QRElSIik7CisJaWYgKCF0bXApCisJCXRtcCA9ICIvdG1wIjsKKwluID0gc25wcmludGYocGF0aCwgbGVuLCAiJXMvJXMiLCB0bXAsIHRlbXBsYXRlKTsKKwlpZiAobGVuIDw9IG4pIHsKKwkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIG1rc3RlbXAocGF0aCk7Cit9CisKKy8qIGdpdF9ta3N0ZW1wcygpIC0gY3JlYXRlIHRtcCBmaWxlIHdpdGggc3VmZml4IGhvbm9yaW5nIFRNUERJUiB2YXJpYWJsZS4gKi8KK2ludCBnaXRfbWtzdGVtcHMoY2hhciAqcGF0aCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqdGVtcGxhdGUsIGludCBzdWZmaXhfbGVuKQoreworCWNvbnN0IGNoYXIgKnRtcDsKKwlzaXplX3QgbjsKKworCXRtcCA9IGdldGVudigiVE1QRElSIik7CisJaWYgKCF0bXApCisJCXRtcCA9ICIvdG1wIjsKKwluID0gc25wcmludGYocGF0aCwgbGVuLCAiJXMvJXMiLCB0bXAsIHRlbXBsYXRlKTsKKwlpZiAobGVuIDw9IG4pIHsKKwkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIG1rc3RlbXBzKHBhdGgsIHN1ZmZpeF9sZW4pOworfQorCisvKiBBZGFwdGVkIGZyb20gbGliaWJlcnR5J3MgbWtzdGVtcC5jLiAqLworCisjdW5kZWYgVE1QX01BWAorI2RlZmluZSBUTVBfTUFYIDE2Mzg0CisKK2ludCBnaXRfbWtzdGVtcHNfbW9kZShjaGFyICpwYXR0ZXJuLCBpbnQgc3VmZml4X2xlbiwgaW50IG1vZGUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgbGV0dGVyc1tdID0KKwkJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorCQkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisJCSIwMTIzNDU2Nzg5IjsKKwlzdGF0aWMgY29uc3QgaW50IG51bV9sZXR0ZXJzID0gNjI7CisJdWludDY0X3QgdmFsdWU7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJY2hhciAqdGVtcGxhdGU7CisJc2l6ZV90IGxlbjsKKwlpbnQgZmQsIGNvdW50OworCisJbGVuID0gc3RybGVuKHBhdHRlcm4pOworCisJaWYgKGxlbiA8IDYgKyBzdWZmaXhfbGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHN0cm5jbXAoJnBhdHRlcm5bbGVuIC0gNiAtIHN1ZmZpeF9sZW5dLCAiWFhYWFhYIiwgNikpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFJlcGxhY2UgcGF0dGVybidzIFhYWFhYWCBjaGFyYWN0ZXJzIHdpdGggcmFuZG9tbmVzcy4KKwkgKiBUcnkgVE1QX01BWCBkaWZmZXJlbnQgZmlsZW5hbWVzLgorCSAqLworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCXZhbHVlID0gKChzaXplX3QpKHR2LnR2X3VzZWMgPDwgMTYpKSBeIHR2LnR2X3NlYyBeIGdldHBpZCgpOworCXRlbXBsYXRlID0gJnBhdHRlcm5bbGVuIC0gNiAtIHN1ZmZpeF9sZW5dOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IFRNUF9NQVg7ICsrY291bnQpIHsKKwkJdWludDY0X3QgdiA9IHZhbHVlOworCQkvKiBGaWxsIGluIHRoZSByYW5kb20gYml0cy4gKi8KKwkJdGVtcGxhdGVbMF0gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107IHYgLz0gbnVtX2xldHRlcnM7CisJCXRlbXBsYXRlWzFdID0gbGV0dGVyc1t2ICUgbnVtX2xldHRlcnNdOyB2IC89IG51bV9sZXR0ZXJzOworCQl0ZW1wbGF0ZVsyXSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKKwkJdGVtcGxhdGVbM10gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107IHYgLz0gbnVtX2xldHRlcnM7CisJCXRlbXBsYXRlWzRdID0gbGV0dGVyc1t2ICUgbnVtX2xldHRlcnNdOyB2IC89IG51bV9sZXR0ZXJzOworCQl0ZW1wbGF0ZVs1XSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKKworCQlmZCA9IG9wZW4ocGF0dGVybiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiwgbW9kZSk7CisJCWlmIChmZCA+IDApCisJCQlyZXR1cm4gZmQ7CisJCS8qCisJCSAqIEZhdGFsIGVycm9yIChFUEVSTSwgRU5PU1BDIGV0YykuCisJCSAqIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBsb29wLgorCQkgKi8KKwkJaWYgKGVycm5vICE9IEVFWElTVCkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBUaGlzIGlzIGEgcmFuZG9tIHZhbHVlLiAgSXQgaXMgb25seSBuZWNlc3NhcnkgdGhhdAorCQkgKiB0aGUgbmV4dCBUTVBfTUFYIHZhbHVlcyBnZW5lcmF0ZWQgYnkgYWRkaW5nIDc3NzcgdG8KKwkJICogVkFMVUUgYXJlIGRpZmZlcmVudCB3aXRoIChtb2R1bGUgMl4zMikuCisJCSAqLworCQl2YWx1ZSArPSA3Nzc3OworCX0KKwkvKiBXZSByZXR1cm4gdGhlIG51bGwgc3RyaW5nIGlmIHdlIGNhbid0IGZpbmQgYSB1bmlxdWUgZmlsZSBuYW1lLiAgKi8KKwlwYXR0ZXJuWzBdID0gJ1wwJzsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBnaXRfbWtzdGVtcF9tb2RlKGNoYXIgKnBhdHRlcm4sIGludCBtb2RlKQoreworCS8qIG1rc3RlbXAgaXMganVzdCBta3N0ZW1wcyB3aXRoIG5vIHN1ZmZpeCAqLworCXJldHVybiBnaXRfbWtzdGVtcHNfbW9kZShwYXR0ZXJuLCAwLCBtb2RlKTsKK30KKworaW50IGdpdG1rc3RlbXBzKGNoYXIgKnBhdHRlcm4sIGludCBzdWZmaXhfbGVuKQoreworCXJldHVybiBnaXRfbWtzdGVtcHNfbW9kZShwYXR0ZXJuLCBzdWZmaXhfbGVuLCAwNjAwKTsKK30KKworaW50IHhta3N0ZW1wX21vZGUoY2hhciAqdGVtcGxhdGUsIGludCBtb2RlKQoreworCWludCBmZDsKKwljaGFyIG9yaWd0ZW1wbGF0ZVtQQVRIX01BWF07CisJc3RybGNweShvcmlndGVtcGxhdGUsIHRlbXBsYXRlLCBzaXplb2Yob3JpZ3RlbXBsYXRlKSk7CisKKwlmZCA9IGdpdF9ta3N0ZW1wX21vZGUodGVtcGxhdGUsIG1vZGUpOworCWlmIChmZCA8IDApIHsKKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCWNvbnN0IGNoYXIgKm5vbnJlbGF0aXZlX3RlbXBsYXRlOworCisJCWlmICghdGVtcGxhdGVbMF0pCisJCQl0ZW1wbGF0ZSA9IG9yaWd0ZW1wbGF0ZTsKKworCQlub25yZWxhdGl2ZV90ZW1wbGF0ZSA9IGFic29sdXRlX3BhdGgodGVtcGxhdGUpOworCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQlkaWVfZXJybm8oIlVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJyVzJyIsCisJCQlub25yZWxhdGl2ZV90ZW1wbGF0ZSk7CisJfQorCXJldHVybiBmZDsKK30KKworc3RhdGljIGludCB3YXJuX2lmX3VucmVtb3ZhYmxlKGNvbnN0IGNoYXIgKm9wLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgcmMpCit7CisJaWYgKHJjIDwgMCkgeworCQlpbnQgZXJyID0gZXJybm87CisJCWlmIChFTk9FTlQgIT0gZXJyKSB7CisJCQl3YXJuaW5nKCJ1bmFibGUgdG8gJXMgJXM6ICVzIiwKKwkJCQlvcCwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWVycm5vID0gZXJyOworCQl9CisJfQorCXJldHVybiByYzsKK30KKworaW50IHVubGlua19vcl93YXJuKGNvbnN0IGNoYXIgKmZpbGUpCit7CisJcmV0dXJuIHdhcm5faWZfdW5yZW1vdmFibGUoInVubGluayIsIGZpbGUsIHVubGluayhmaWxlKSk7Cit9CisKK2ludCBybWRpcl9vcl93YXJuKGNvbnN0IGNoYXIgKmZpbGUpCit7CisJcmV0dXJuIHdhcm5faWZfdW5yZW1vdmFibGUoInJtZGlyIiwgZmlsZSwgcm1kaXIoZmlsZSkpOworfQorCitpbnQgcmVtb3ZlX29yX3dhcm4odW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJcmV0dXJuIFNfSVNHSVRMSU5LKG1vZGUpID8gcm1kaXJfb3Jfd2FybihmaWxlKSA6IHVubGlua19vcl93YXJuKGZpbGUpOworfQorCit2b2lkIHdhcm5fb25faW5hY2Nlc3NpYmxlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJd2FybmluZyhfKCJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIiksIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK2ludCBhY2Nlc3Nfb3Jfd2Fybihjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSkKK3sKKwlpbnQgcmV0ID0gYWNjZXNzKHBhdGgsIG1vZGUpOworCWlmIChyZXQgJiYgZXJybm8gIT0gRU5PRU5UKQorCQl3YXJuX29uX2luYWNjZXNzaWJsZShwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcGFzc3dkICp4Z2V0cHd1aWRfc2VsZih2b2lkKQoreworCXN0cnVjdCBwYXNzd2QgKnB3OworCisJZXJybm8gPSAwOworCXB3ID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworCWlmICghcHcpCisJCWRpZShfKCJ1bmFibGUgdG8gbG9vayB1cCBjdXJyZW50IHVzZXIgaW4gdGhlIHBhc3N3ZCBmaWxlOiAlcyIpLAorCQkgICAgZXJybm8gPyBzdHJlcnJvcihlcnJubykgOiBfKCJubyBzdWNoIHVzZXIiKSk7CisJcmV0dXJuIHB3OworfQpkaWZmIC0tZ2l0IGEvd3JpdGVfb3JfZGllLmMgYi93cml0ZV9vcl9kaWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDViNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvd3JpdGVfb3JfZGllLmMKQEAgLTAsMCArMSw4NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKKy8qCisgKiBTb21lIGNhc2VzIHVzZSBzdGRpbywgYnV0IHdhbnQgdG8gZmx1c2ggYWZ0ZXIgdGhlIHdyaXRlCisgKiB0byBnZXQgZXJyb3IgaGFuZGxpbmcgKGFuZCB0byBnZXQgYmV0dGVyIGludGVyYWN0aXZlCisgKiBiZWhhdmlvdXIgLSBub3QgYnVmZmVyaW5nIGV4Y2Vzc2l2ZWx5KS4KKyAqCisgKiBPZiBjb3Vyc2UsIGlmIHRoZSBmbHVzaCBoYXBwZW5lZCB3aXRoaW4gdGhlIHdyaXRlIGl0c2VsZiwKKyAqIHdlJ3ZlIGFscmVhZHkgbG9zdCB0aGUgZXJyb3IgY29kZSwgYW5kIGNhbm5vdCByZXBvcnQgaXQgYW55CisgKiBtb3JlLiBTbyB3ZSBqdXN0IGlnbm9yZSB0aGF0IGNhc2UgaW5zdGVhZCAoYW5kIGhvcGUgd2UgZ2V0CisgKiB0aGUgcmlnaHQgZXJyb3IgY29kZSBvbiB0aGUgZmx1c2gpLgorICoKKyAqIElmIHRoZSBmaWxlIGhhbmRsZSBpcyBzdGRvdXQsIGFuZCBzdGRvdXQgaXMgYSBmaWxlLCB0aGVuIHNraXAgdGhlCisgKiBmbHVzaCBlbnRpcmVseSBzaW5jZSBpdCdzIG5vdCBuZWVkZWQuCisgKi8KK3ZvaWQgbWF5YmVfZmx1c2hfb3JfZGllKEZJTEUgKmYsIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJc3RhdGljIGludCBza2lwX3N0ZG91dF9mbHVzaCA9IC0xOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKmNwOworCisJaWYgKGYgPT0gc3Rkb3V0KSB7CisJCWlmIChza2lwX3N0ZG91dF9mbHVzaCA8IDApIHsKKwkJCWNwID0gZ2V0ZW52KCJHSVRfRkxVU0giKTsKKwkJCWlmIChjcCkKKwkJCQlza2lwX3N0ZG91dF9mbHVzaCA9IChhdG9pKGNwKSA9PSAwKTsKKwkJCWVsc2UgaWYgKChmc3RhdChmaWxlbm8oc3Rkb3V0KSwgJnN0KSA9PSAwKSAmJgorCQkJCSBTX0lTUkVHKHN0LnN0X21vZGUpKQorCQkJCXNraXBfc3Rkb3V0X2ZsdXNoID0gMTsKKwkJCWVsc2UKKwkJCQlza2lwX3N0ZG91dF9mbHVzaCA9IDA7CisJCX0KKwkJaWYgKHNraXBfc3Rkb3V0X2ZsdXNoICYmICFmZXJyb3IoZikpCisJCQlyZXR1cm47CisJfQorCWlmIChmZmx1c2goZikpIHsKKwkJLyoKKwkJICogT24gV2luZG93cywgRVBJUEUgaXMgcmV0dXJuZWQgb25seSBieSB0aGUgZmlyc3Qgd3JpdGUoKQorCQkgKiBhZnRlciB0aGUgcmVhZGluZyBlbmQgaGFzIGNsb3NlZCBpdHMgaGFuZGxlOyBzdWJzZXF1ZW50CisJCSAqIHdyaXRlKClzIHJldHVybiBFSU5WQUwuCisJCSAqLworCQlpZiAoZXJybm8gPT0gRVBJUEUgfHwgZXJybm8gPT0gRUlOVkFMKQorCQkJZXhpdCgwKTsKKwkJZGllX2Vycm5vKCJ3cml0ZSBmYWlsdXJlIG9uICclcyciLCBkZXNjKTsKKwl9Cit9CisKK3ZvaWQgZnN5bmNfb3JfZGllKGludCBmZCwgY29uc3QgY2hhciAqbXNnKQoreworCWlmIChmc3luYyhmZCkgPCAwKSB7CisJCWRpZV9lcnJubygiZnN5bmMgZXJyb3Igb24gJyVzJyIsIG1zZyk7CisJfQorfQorCit2b2lkIHdyaXRlX29yX2RpZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYsIGNvdW50KSA8IDApIHsKKwkJaWYgKGVycm5vID09IEVQSVBFKQorCQkJZXhpdCgwKTsKKwkJZGllX2Vycm5vKCJ3cml0ZSBlcnJvciIpOworCX0KK30KKworaW50IHdyaXRlX29yX3doaW5lX3BpcGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqbXNnKQoreworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYsIGNvdW50KSA8IDApIHsKKwkJaWYgKGVycm5vID09IEVQSVBFKQorCQkJZXhpdCgwKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczogd3JpdGUgZXJyb3IgKCVzKVxuIiwKKwkJCW1zZywgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK2ludCB3cml0ZV9vcl93aGluZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICptc2cpCit7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZiwgY291bnQpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB3cml0ZSBlcnJvciAoJXMpXG4iLAorCQkJbXNnLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3dzLmMgYi93cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OThkNzUKLS0tIC9kZXYvbnVsbAorKysgYi93cy5jCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogV2hpdGVzcGFjZSBydWxlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKworc3RhdGljIHN0cnVjdCB3aGl0ZXNwYWNlX3J1bGUgeworCWNvbnN0IGNoYXIgKnJ1bGVfbmFtZTsKKwl1bnNpZ25lZCBydWxlX2JpdHM7CisJdW5zaWduZWQgbG9vc2Vuc19lcnJvcjoxLAorCQlleGNsdWRlX2RlZmF1bHQ6MTsKK30gd2hpdGVzcGFjZV9ydWxlX25hbWVzW10gPSB7CisJeyAidHJhaWxpbmctc3BhY2UiLCBXU19UUkFJTElOR19TUEFDRSwgMCB9LAorCXsgInNwYWNlLWJlZm9yZS10YWIiLCBXU19TUEFDRV9CRUZPUkVfVEFCLCAwIH0sCisJeyAiaW5kZW50LXdpdGgtbm9uLXRhYiIsIFdTX0lOREVOVF9XSVRIX05PTl9UQUIsIDAgfSwKKwl7ICJjci1hdC1lb2wiLCBXU19DUl9BVF9FT0wsIDEgfSwKKwl7ICJibGFuay1hdC1lb2wiLCBXU19CTEFOS19BVF9FT0wsIDAgfSwKKwl7ICJibGFuay1hdC1lb2YiLCBXU19CTEFOS19BVF9FT0YsIDAgfSwKKwl7ICJ0YWItaW4taW5kZW50IiwgV1NfVEFCX0lOX0lOREVOVCwgMCwgMSB9LAorfTsKKwordW5zaWduZWQgcGFyc2Vfd2hpdGVzcGFjZV9ydWxlKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwl1bnNpZ25lZCBydWxlID0gV1NfREVGQVVMVF9SVUxFOworCisJd2hpbGUgKHN0cmluZykgeworCQlpbnQgaTsKKwkJc2l6ZV90IGxlbjsKKwkJY29uc3QgY2hhciAqZXA7CisJCWludCBuZWdhdGVkID0gMDsKKworCQlzdHJpbmcgPSBzdHJpbmcgKyBzdHJzcG4oc3RyaW5nLCAiLCBcdFxuXHIiKTsKKwkJZXAgPSBzdHJjaHIoc3RyaW5nLCAnLCcpOworCQlpZiAoIWVwKQorCQkJbGVuID0gc3RybGVuKHN0cmluZyk7CisJCWVsc2UKKwkJCWxlbiA9IGVwIC0gc3RyaW5nOworCisJCWlmICgqc3RyaW5nID09ICctJykgeworCQkJbmVnYXRlZCA9IDE7CisJCQlzdHJpbmcrKzsKKwkJCWxlbi0tOworCQl9CisJCWlmICghbGVuKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdoaXRlc3BhY2VfcnVsZV9uYW1lcyk7IGkrKykgeworCQkJaWYgKHN0cm5jbXAod2hpdGVzcGFjZV9ydWxlX25hbWVzW2ldLnJ1bGVfbmFtZSwKKwkJCQkgICAgc3RyaW5nLCBsZW4pKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG5lZ2F0ZWQpCisJCQkJcnVsZSAmPSB+d2hpdGVzcGFjZV9ydWxlX25hbWVzW2ldLnJ1bGVfYml0czsKKwkJCWVsc2UKKwkJCQlydWxlIHw9IHdoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5ydWxlX2JpdHM7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc3RybmNtcChzdHJpbmcsICJ0YWJ3aWR0aD0iLCA5KSA9PSAwKSB7CisJCQl1bnNpZ25lZCB0YWJ3aWR0aCA9IGF0b2koc3RyaW5nICsgOSk7CisJCQlpZiAoMCA8IHRhYndpZHRoICYmIHRhYndpZHRoIDwgMDEwMCkgeworCQkJCXJ1bGUgJj0gfldTX1RBQl9XSURUSF9NQVNLOworCQkJCXJ1bGUgfD0gdGFid2lkdGg7CisJCQl9CisJCQllbHNlCisJCQkJd2FybmluZygidGFid2lkdGggJS4qcyBvdXQgb2YgcmFuZ2UiLAorCQkJCQkoaW50KShsZW4gLSA5KSwgc3RyaW5nICsgOSk7CisJCX0KKwkJc3RyaW5nID0gZXA7CisJfQorCisJaWYgKHJ1bGUgJiBXU19UQUJfSU5fSU5ERU5UICYmIHJ1bGUgJiBXU19JTkRFTlRfV0lUSF9OT05fVEFCKQorCQlkaWUoImNhbm5vdCBlbmZvcmNlIGJvdGggdGFiLWluLWluZGVudCBhbmQgaW5kZW50LXdpdGgtbm9uLXRhYiIpOworCXJldHVybiBydWxlOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF93aGl0ZXNwYWNlX2F0dHJfY2hlY2soc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjaykKK3sKKwlzdGF0aWMgc3RydWN0IGdpdF9hdHRyICphdHRyX3doaXRlc3BhY2U7CisKKwlpZiAoIWF0dHJfd2hpdGVzcGFjZSkKKwkJYXR0cl93aGl0ZXNwYWNlID0gZ2l0X2F0dHIoIndoaXRlc3BhY2UiKTsKKwljaGVja1swXS5hdHRyID0gYXR0cl93aGl0ZXNwYWNlOworfQorCit1bnNpZ25lZCB3aGl0ZXNwYWNlX3J1bGUoY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJc3RydWN0IGdpdF9hdHRyX2NoZWNrIGF0dHJfd2hpdGVzcGFjZV9ydWxlOworCisJc2V0dXBfd2hpdGVzcGFjZV9hdHRyX2NoZWNrKCZhdHRyX3doaXRlc3BhY2VfcnVsZSk7CisJaWYgKCFnaXRfY2hlY2tfYXR0cihwYXRobmFtZSwgMSwgJmF0dHJfd2hpdGVzcGFjZV9ydWxlKSkgeworCQljb25zdCBjaGFyICp2YWx1ZTsKKworCQl2YWx1ZSA9IGF0dHJfd2hpdGVzcGFjZV9ydWxlLnZhbHVlOworCQlpZiAoQVRUUl9UUlVFKHZhbHVlKSkgeworCQkJLyogdHJ1ZSAod2hpdGVzcGFjZSkgKi8KKwkJCXVuc2lnbmVkIGFsbF9ydWxlID0gd3NfdGFiX3dpZHRoKHdoaXRlc3BhY2VfcnVsZV9jZmcpOworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3aGl0ZXNwYWNlX3J1bGVfbmFtZXMpOyBpKyspCisJCQkJaWYgKCF3aGl0ZXNwYWNlX3J1bGVfbmFtZXNbaV0ubG9vc2Vuc19lcnJvciAmJgorCQkJCSAgICAhd2hpdGVzcGFjZV9ydWxlX25hbWVzW2ldLmV4Y2x1ZGVfZGVmYXVsdCkKKwkJCQkJYWxsX3J1bGUgfD0gd2hpdGVzcGFjZV9ydWxlX25hbWVzW2ldLnJ1bGVfYml0czsKKwkJCXJldHVybiBhbGxfcnVsZTsKKwkJfSBlbHNlIGlmIChBVFRSX0ZBTFNFKHZhbHVlKSkgeworCQkJLyogZmFsc2UgKC13aGl0ZXNwYWNlKSAqLworCQkJcmV0dXJuIHdzX3RhYl93aWR0aCh3aGl0ZXNwYWNlX3J1bGVfY2ZnKTsKKwkJfSBlbHNlIGlmIChBVFRSX1VOU0VUKHZhbHVlKSkgeworCQkJLyogcmVzZXQgdG8gZGVmYXVsdCAoIXdoaXRlc3BhY2UpICovCisJCQlyZXR1cm4gd2hpdGVzcGFjZV9ydWxlX2NmZzsKKwkJfSBlbHNlIHsKKwkJCS8qIHN0cmluZyAqLworCQkJcmV0dXJuIHBhcnNlX3doaXRlc3BhY2VfcnVsZSh2YWx1ZSk7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gd2hpdGVzcGFjZV9ydWxlX2NmZzsKKwl9Cit9CisKKy8qIFRoZSByZXR1cm5lZCBzdHJpbmcgc2hvdWxkIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICovCitjaGFyICp3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyh1bnNpZ25lZCB3cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWlmICgod3MgJiBXU19UUkFJTElOR19TUEFDRSkgPT0gV1NfVFJBSUxJTkdfU1BBQ0UpCisJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgInRyYWlsaW5nIHdoaXRlc3BhY2UiKTsKKwllbHNlIHsKKwkJaWYgKHdzICYgV1NfQkxBTktfQVRfRU9MKQorCQkJc3RyYnVmX2FkZHN0cigmZXJyLCAidHJhaWxpbmcgd2hpdGVzcGFjZSIpOworCQlpZiAod3MgJiBXU19CTEFOS19BVF9FT0YpIHsKKwkJCWlmIChlcnIubGVuKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgIiwgIik7CisJCQlzdHJidWZfYWRkc3RyKCZlcnIsICJuZXcgYmxhbmsgbGluZSBhdCBFT0YiKTsKKwkJfQorCX0KKwlpZiAod3MgJiBXU19TUEFDRV9CRUZPUkVfVEFCKSB7CisJCWlmIChlcnIubGVuKQorCQkJc3RyYnVmX2FkZHN0cigmZXJyLCAiLCAiKTsKKwkJc3RyYnVmX2FkZHN0cigmZXJyLCAic3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQiKTsKKwl9CisJaWYgKHdzICYgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQikgeworCQlpZiAoZXJyLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgIiwgIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgImluZGVudCB3aXRoIHNwYWNlcyIpOworCX0KKwlpZiAod3MgJiBXU19UQUJfSU5fSU5ERU5UKSB7CisJCWlmIChlcnIubGVuKQorCQkJc3RyYnVmX2FkZHN0cigmZXJyLCAiLCAiKTsKKwkJc3RyYnVmX2FkZHN0cigmZXJyLCAidGFiIGluIGluZGVudCIpOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmZXJyLCBOVUxMKTsKK30KKworLyogSWYgc3RyZWFtIGlzIG5vbi1OVUxMLCBlbWl0cyB0aGUgbGluZSBhZnRlciBjaGVja2luZy4gKi8KK3N0YXRpYyB1bnNpZ25lZCB3c19jaGVja19lbWl0XzEoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSwKKwkJCQlGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnNldCwKKwkJCQljb25zdCBjaGFyICpyZXNldCwgY29uc3QgY2hhciAqd3MpCit7CisJdW5zaWduZWQgcmVzdWx0ID0gMDsKKwlpbnQgd3JpdHRlbiA9IDA7CisJaW50IHRyYWlsaW5nX3doaXRlc3BhY2UgPSAtMTsKKwlpbnQgdHJhaWxpbmdfbmV3bGluZSA9IDA7CisJaW50IHRyYWlsaW5nX2NhcnJpYWdlX3JldHVybiA9IDA7CisJaW50IGk7CisKKwkvKiBMb2dpYyBpcyBzaW1wbGVyIGlmIHdlIHRlbXBvcmFyaWx5IGlnbm9yZSB0aGUgdHJhaWxpbmcgbmV3bGluZS4gKi8KKwlpZiAobGVuID4gMCAmJiBsaW5lW2xlbiAtIDFdID09ICdcbicpIHsKKwkJdHJhaWxpbmdfbmV3bGluZSA9IDE7CisJCWxlbi0tOworCX0KKwlpZiAoKHdzX3J1bGUgJiBXU19DUl9BVF9FT0wpICYmCisJICAgIGxlbiA+IDAgJiYgbGluZVtsZW4gLSAxXSA9PSAnXHInKSB7CisJCXRyYWlsaW5nX2NhcnJpYWdlX3JldHVybiA9IDE7CisJCWxlbi0tOworCX0KKworCS8qIENoZWNrIGZvciB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqLworCWlmICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9MKSB7CisJCWZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCQlpZiAoaXNzcGFjZShsaW5lW2ldKSkgeworCQkJCXRyYWlsaW5nX3doaXRlc3BhY2UgPSBpOworCQkJCXJlc3VsdCB8PSBXU19CTEFOS19BVF9FT0w7CisJCQl9CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodHJhaWxpbmdfd2hpdGVzcGFjZSA9PSAtMSkKKwkJdHJhaWxpbmdfd2hpdGVzcGFjZSA9IGxlbjsKKworCS8qIENoZWNrIGluZGVudGF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IHRyYWlsaW5nX3doaXRlc3BhY2U7IGkrKykgeworCQlpZiAobGluZVtpXSA9PSAnICcpCisJCQljb250aW51ZTsKKwkJaWYgKGxpbmVbaV0gIT0gJ1x0JykKKwkJCWJyZWFrOworCQlpZiAoKHdzX3J1bGUgJiBXU19TUEFDRV9CRUZPUkVfVEFCKSAmJiB3cml0dGVuIDwgaSkgeworCQkJcmVzdWx0IHw9IFdTX1NQQUNFX0JFRk9SRV9UQUI7CisJCQlpZiAoc3RyZWFtKSB7CisJCQkJZnB1dHMod3MsIHN0cmVhbSk7CisJCQkJZndyaXRlKGxpbmUgKyB3cml0dGVuLCBpIC0gd3JpdHRlbiwgMSwgc3RyZWFtKTsKKwkJCQlmcHV0cyhyZXNldCwgc3RyZWFtKTsKKwkJCQlmd3JpdGUobGluZSArIGksIDEsIDEsIHN0cmVhbSk7CisJCQl9CisJCX0gZWxzZSBpZiAod3NfcnVsZSAmIFdTX1RBQl9JTl9JTkRFTlQpIHsKKwkJCXJlc3VsdCB8PSBXU19UQUJfSU5fSU5ERU5UOworCQkJaWYgKHN0cmVhbSkgeworCQkJCWZ3cml0ZShsaW5lICsgd3JpdHRlbiwgaSAtIHdyaXR0ZW4sIDEsIHN0cmVhbSk7CisJCQkJZnB1dHMod3MsIHN0cmVhbSk7CisJCQkJZndyaXRlKGxpbmUgKyBpLCAxLCAxLCBzdHJlYW0pOworCQkJCWZwdXRzKHJlc2V0LCBzdHJlYW0pOworCQkJfQorCQl9IGVsc2UgaWYgKHN0cmVhbSkgeworCQkJZndyaXRlKGxpbmUgKyB3cml0dGVuLCBpIC0gd3JpdHRlbiArIDEsIDEsIHN0cmVhbSk7CisJCX0KKwkJd3JpdHRlbiA9IGkgKyAxOworCX0KKworCS8qIENoZWNrIGZvciBpbmRlbnQgdXNpbmcgbm9uLXRhYi4gKi8KKwlpZiAoKHdzX3J1bGUgJiBXU19JTkRFTlRfV0lUSF9OT05fVEFCKSAmJiBpIC0gd3JpdHRlbiA+PSB3c190YWJfd2lkdGgod3NfcnVsZSkpIHsKKwkJcmVzdWx0IHw9IFdTX0lOREVOVF9XSVRIX05PTl9UQUI7CisJCWlmIChzdHJlYW0pIHsKKwkJCWZwdXRzKHdzLCBzdHJlYW0pOworCQkJZndyaXRlKGxpbmUgKyB3cml0dGVuLCBpIC0gd3JpdHRlbiwgMSwgc3RyZWFtKTsKKwkJCWZwdXRzKHJlc2V0LCBzdHJlYW0pOworCQl9CisJCXdyaXR0ZW4gPSBpOworCX0KKworCWlmIChzdHJlYW0pIHsKKwkJLyoKKwkJICogTm93IHRoZSByZXN0IG9mIHRoZSBsaW5lIHN0YXJ0cyBhdCAid3JpdHRlbiIuCisJCSAqIFRoZSBub24taGlnaGxpZ2h0ZWQgcGFydCBlbmRzIGF0ICJ0cmFpbGluZ193aGl0ZXNwYWNlIi4KKwkJICovCisKKwkJLyogRW1pdCBub24taGlnaGxpZ2h0ZWQgKG1pZGRsZSkgc2VnbWVudC4gKi8KKwkJaWYgKHRyYWlsaW5nX3doaXRlc3BhY2UgLSB3cml0dGVuID4gMCkgeworCQkJZnB1dHMoc2V0LCBzdHJlYW0pOworCQkJZndyaXRlKGxpbmUgKyB3cml0dGVuLAorCQkJICAgIHRyYWlsaW5nX3doaXRlc3BhY2UgLSB3cml0dGVuLCAxLCBzdHJlYW0pOworCQkJZnB1dHMocmVzZXQsIHN0cmVhbSk7CisJCX0KKworCQkvKiBIaWdobGlnaHQgZXJyb3JzIGluIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovCisJCWlmICh0cmFpbGluZ193aGl0ZXNwYWNlICE9IGxlbikgeworCQkJZnB1dHMod3MsIHN0cmVhbSk7CisJCQlmd3JpdGUobGluZSArIHRyYWlsaW5nX3doaXRlc3BhY2UsCisJCQkgICAgbGVuIC0gdHJhaWxpbmdfd2hpdGVzcGFjZSwgMSwgc3RyZWFtKTsKKwkJCWZwdXRzKHJlc2V0LCBzdHJlYW0pOworCQl9CisJCWlmICh0cmFpbGluZ19jYXJyaWFnZV9yZXR1cm4pCisJCQlmcHV0YygnXHInLCBzdHJlYW0pOworCQlpZiAodHJhaWxpbmdfbmV3bGluZSkKKwkJCWZwdXRjKCdcbicsIHN0cmVhbSk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd3NfY2hlY2tfZW1pdChjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlLAorCQkgICBGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnNldCwKKwkJICAgY29uc3QgY2hhciAqcmVzZXQsIGNvbnN0IGNoYXIgKndzKQoreworCSh2b2lkKXdzX2NoZWNrX2VtaXRfMShsaW5lLCBsZW4sIHdzX3J1bGUsIHN0cmVhbSwgc2V0LCByZXNldCwgd3MpOworfQorCit1bnNpZ25lZCB3c19jaGVjayhjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlKQoreworCXJldHVybiB3c19jaGVja19lbWl0XzEobGluZSwgbGVuLCB3c19ydWxlLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworaW50IHdzX2JsYW5rX2xpbmUoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSkKK3sKKwkvKgorCSAqIFdlIF9taWdodF8gd2FudCB0byB0cmVhdCBDUiBkaWZmZXJlbnRseSBmcm9tIG90aGVyCisJICogd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHdoZW4gd3NfcnVsZSBoYXMgV1NfQ1JfQVRfRU9MLCBidXQKKwkgKiBmb3Igbm93IHdlIGp1c3QgdXNlIHRoaXMgc3R1cGlkIGRlZmluaXRpb24uCisJICovCisJd2hpbGUgKGxlbi0tID4gMCkgeworCQlpZiAoIWlzc3BhY2UoKmxpbmUpKQorCQkJcmV0dXJuIDA7CisJCWxpbmUrKzsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qIENvcHkgdGhlIGxpbmUgb250byB0aGUgZW5kIG9mIHRoZSBzdHJidWYgd2hpbGUgZml4aW5nIHdoaXRlc3BhY2VzICovCit2b2lkIHdzX2ZpeF9jb3B5KHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlLCBpbnQgKmVycm9yX2NvdW50KQoreworCS8qCisJICogbGVuIGlzIG51bWJlciBvZiBieXRlcyB0byBiZSBjb3BpZWQgZnJvbSBzcmMsIHN0YXJ0aW5nCisJICogYXQgc3JjLiAgVHlwaWNhbGx5IHNyY1tsZW4tMV0gaXMgJ1xuJywgdW5sZXNzIHRoaXMgaXMKKwkgKiB0aGUgaW5jb21wbGV0ZSBsYXN0IGxpbmUuCisJICovCisJaW50IGk7CisJaW50IGFkZF9ubF90b190YWlsID0gMDsKKwlpbnQgYWRkX2NyX3RvX3RhaWwgPSAwOworCWludCBmaXhlZCA9IDA7CisJaW50IGxhc3RfdGFiX2luX2luZGVudCA9IC0xOworCWludCBsYXN0X3NwYWNlX2luX2luZGVudCA9IC0xOworCWludCBuZWVkX2ZpeF9sZWFkaW5nX3NwYWNlID0gMDsKKworCS8qCisJICogU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZQorCSAqLworCWlmICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9MKSB7CisJCWlmICgwIDwgbGVuICYmIHNyY1tsZW4gLSAxXSA9PSAnXG4nKSB7CisJCQlhZGRfbmxfdG9fdGFpbCA9IDE7CisJCQlsZW4tLTsKKwkJCWlmICgwIDwgbGVuICYmIHNyY1tsZW4gLSAxXSA9PSAnXHInKSB7CisJCQkJYWRkX2NyX3RvX3RhaWwgPSAhISh3c19ydWxlICYgV1NfQ1JfQVRfRU9MKTsKKwkJCQlsZW4tLTsKKwkJCX0KKwkJfQorCQlpZiAoMCA8IGxlbiAmJiBpc3NwYWNlKHNyY1tsZW4gLSAxXSkpIHsKKwkJCXdoaWxlICgwIDwgbGVuICYmIGlzc3BhY2Uoc3JjW2xlbi0xXSkpCisJCQkJbGVuLS07CisJCQlmaXhlZCA9IDE7CisJCX0KKwl9CisKKwkvKgorCSAqIENoZWNrIGxlYWRpbmcgd2hpdGVzcGFjZXMgKGluZGVudCkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJY2hhciBjaCA9IHNyY1tpXTsKKwkJaWYgKGNoID09ICdcdCcpIHsKKwkJCWxhc3RfdGFiX2luX2luZGVudCA9IGk7CisJCQlpZiAoKHdzX3J1bGUgJiBXU19TUEFDRV9CRUZPUkVfVEFCKSAmJgorCQkJICAgIDAgPD0gbGFzdF9zcGFjZV9pbl9pbmRlbnQpCisJCQkgICAgbmVlZF9maXhfbGVhZGluZ19zcGFjZSA9IDE7CisJCX0gZWxzZSBpZiAoY2ggPT0gJyAnKSB7CisJCQlsYXN0X3NwYWNlX2luX2luZGVudCA9IGk7CisJCQlpZiAoKHdzX3J1bGUgJiBXU19JTkRFTlRfV0lUSF9OT05fVEFCKSAmJgorCQkJICAgIHdzX3RhYl93aWR0aCh3c19ydWxlKSA8PSBpIC0gbGFzdF90YWJfaW5faW5kZW50KQorCQkJCW5lZWRfZml4X2xlYWRpbmdfc3BhY2UgPSAxOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKworCWlmIChuZWVkX2ZpeF9sZWFkaW5nX3NwYWNlKSB7CisJCS8qIFByb2Nlc3MgaW5kZW50IG91cnNlbHZlcyAqLworCQlpbnQgY29uc2VjdXRpdmVfc3BhY2VzID0gMDsKKwkJaW50IGxhc3QgPSBsYXN0X3RhYl9pbl9pbmRlbnQgKyAxOworCisJCWlmICh3c19ydWxlICYgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQikgeworCQkJLyogaGF2ZSAibGFzdCIgcG9pbnQgYXQgb25lIHBhc3QgdGhlIGluZGVudCAqLworCQkJaWYgKGxhc3RfdGFiX2luX2luZGVudCA8IGxhc3Rfc3BhY2VfaW5faW5kZW50KQorCQkJCWxhc3QgPSBsYXN0X3NwYWNlX2luX2luZGVudCArIDE7CisJCQllbHNlCisJCQkJbGFzdCA9IGxhc3RfdGFiX2luX2luZGVudCArIDE7CisJCX0KKworCQkvKgorCQkgKiBiZXR3ZWVuIHNyY1swLi5sYXN0LTFdLCBzdHJpcCB0aGUgZnVubnkgc3BhY2VzLAorCQkgKiB1cGRhdGluZyB0aGVtIHRvIHRhYiBhcyBuZWVkZWQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CisJCQljaGFyIGNoID0gc3JjW2ldOworCQkJaWYgKGNoICE9ICcgJykgeworCQkJCWNvbnNlY3V0aXZlX3NwYWNlcyA9IDA7CisJCQkJc3RyYnVmX2FkZGNoKGRzdCwgY2gpOworCQkJfSBlbHNlIHsKKwkJCQljb25zZWN1dGl2ZV9zcGFjZXMrKzsKKwkJCQlpZiAoY29uc2VjdXRpdmVfc3BhY2VzID09IHdzX3RhYl93aWR0aCh3c19ydWxlKSkgeworCQkJCQlzdHJidWZfYWRkY2goZHN0LCAnXHQnKTsKKwkJCQkJY29uc2VjdXRpdmVfc3BhY2VzID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwkJd2hpbGUgKDAgPCBjb25zZWN1dGl2ZV9zcGFjZXMtLSkKKwkJCXN0cmJ1Zl9hZGRjaChkc3QsICcgJyk7CisJCWxlbiAtPSBsYXN0OworCQlzcmMgKz0gbGFzdDsKKwkJZml4ZWQgPSAxOworCX0gZWxzZSBpZiAoKHdzX3J1bGUgJiBXU19UQUJfSU5fSU5ERU5UKSAmJiBsYXN0X3RhYl9pbl9pbmRlbnQgPj0gMCkgeworCQkvKiBFeHBhbmQgdGFicyBpbnRvIHNwYWNlcyAqLworCQlpbnQgc3RhcnQgPSBkc3QtPmxlbjsKKwkJaW50IGxhc3QgPSBsYXN0X3RhYl9pbl9pbmRlbnQgKyAxOworCQlmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CisJCQlpZiAoc3JjW2ldID09ICdcdCcpCisJCQkJZG8geworCQkJCQlzdHJidWZfYWRkY2goZHN0LCAnICcpOworCQkJCX0gd2hpbGUgKChkc3QtPmxlbiAtIHN0YXJ0KSAlIHdzX3RhYl93aWR0aCh3c19ydWxlKSk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZGNoKGRzdCwgc3JjW2ldKTsKKwkJfQorCQlsZW4gLT0gbGFzdDsKKwkJc3JjICs9IGxhc3Q7CisJCWZpeGVkID0gMTsKKwl9CisKKwlzdHJidWZfYWRkKGRzdCwgc3JjLCBsZW4pOworCWlmIChhZGRfY3JfdG9fdGFpbCkKKwkJc3RyYnVmX2FkZGNoKGRzdCwgJ1xyJyk7CisJaWYgKGFkZF9ubF90b190YWlsKQorCQlzdHJidWZfYWRkY2goZHN0LCAnXG4nKTsKKwlpZiAoZml4ZWQgJiYgZXJyb3JfY291bnQpCisJCSgqZXJyb3JfY291bnQpKys7Cit9CmRpZmYgLS1naXQgYS93dC1zdGF0dXMuYyBiL3d0LXN0YXR1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOTY1OGIKLS0tIC9kZXYvbnVsbAorKysgYi93dC1zdGF0dXMuYwpAQCAtMCwwICsxLDEyMzMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RhdGljIGNoYXIgZGVmYXVsdF93dF9zdGF0dXNfY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKKwlHSVRfQ09MT1JfTk9STUFMLCAvKiBXVF9TVEFUVVNfSEVBREVSICovCisJR0lUX0NPTE9SX0dSRUVOLCAgLyogV1RfU1RBVFVTX1VQREFURUQgKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfQ0hBTkdFRCAqLworCUdJVF9DT0xPUl9SRUQsICAgIC8qIFdUX1NUQVRVU19VTlRSQUNLRUQgKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfTk9CUkFOQ0ggKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfVU5NRVJHRUQgKi8KKwlHSVRfQ09MT1JfR1JFRU4sICAvKiBXVF9TVEFUVVNfTE9DQUxfQlJBTkNIICovCisJR0lUX0NPTE9SX1JFRCwgICAgLyogV1RfU1RBVFVTX1JFTU9URV9CUkFOQ0ggKi8KKwlHSVRfQ09MT1JfTklMLCAgICAvKiBXVF9TVEFUVVNfT05CUkFOQ0ggKi8KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb2xvcihpbnQgc2xvdCwgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwljb25zdCBjaGFyICpjID0gIiI7CisJaWYgKHdhbnRfY29sb3Iocy0+dXNlX2NvbG9yKSkKKwkJYyA9IHMtPmNvbG9yX3BhbGV0dGVbc2xvdF07CisJaWYgKHNsb3QgPT0gV1RfU1RBVFVTX09OQlJBTkNIICYmIGNvbG9yX2lzX25pbChjKSkKKwkJYyA9IHMtPmNvbG9yX3BhbGV0dGVbV1RfU1RBVFVTX0hFQURFUl07CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXR1c192cHJpbnRmKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGludCBhdF9ib2wsIGNvbnN0IGNoYXIgKmNvbG9yLAorCQljb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXAsIGNvbnN0IGNoYXIgKnRyYWlsKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmVidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpsaW5lLCAqZW9sOworCisJc3RyYnVmX3ZhZGRmKCZzYiwgZm10LCBhcCk7CisJaWYgKCFzYi5sZW4pIHsKKwkJc3RyYnVmX2FkZGNoKCZzYiwgJyMnKTsKKwkJaWYgKCF0cmFpbCkKKwkJCXN0cmJ1Zl9hZGRjaCgmc2IsICcgJyk7CisJCWNvbG9yX3ByaW50X3N0cmJ1ZihzLT5mcCwgY29sb3IsICZzYik7CisJCWlmICh0cmFpbCkKKwkJCWZwcmludGYocy0+ZnAsICIlcyIsIHRyYWlsKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGxpbmUgPSBzYi5idWY7ICpsaW5lOyBsaW5lID0gZW9sICsgMSkgeworCQllb2wgPSBzdHJjaHIobGluZSwgJ1xuJyk7CisKKwkJc3RyYnVmX3Jlc2V0KCZsaW5lYnVmKTsKKwkJaWYgKGF0X2JvbCkgeworCQkJc3RyYnVmX2FkZGNoKCZsaW5lYnVmLCAnIycpOworCQkJaWYgKCpsaW5lICE9ICdcbicgJiYgKmxpbmUgIT0gJ1x0JykKKwkJCQlzdHJidWZfYWRkY2goJmxpbmVidWYsICcgJyk7CisJCX0KKwkJaWYgKGVvbCkKKwkJCXN0cmJ1Zl9hZGQoJmxpbmVidWYsIGxpbmUsIGVvbCAtIGxpbmUpOworCQllbHNlCisJCQlzdHJidWZfYWRkc3RyKCZsaW5lYnVmLCBsaW5lKTsKKwkJY29sb3JfcHJpbnRfc3RyYnVmKHMtPmZwLCBjb2xvciwgJmxpbmVidWYpOworCQlpZiAoZW9sKQorCQkJZnByaW50ZihzLT5mcCwgIlxuIik7CisJCWVsc2UKKwkJCWJyZWFrOworCQlhdF9ib2wgPSAxOworCX0KKwlpZiAodHJhaWwpCisJCWZwcmludGYocy0+ZnAsICIlcyIsIHRyYWlsKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZWJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKwordm9pZCBzdGF0dXNfcHJpbnRmX2xuKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKmNvbG9yLAorCQkJY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0YXR1c192cHJpbnRmKHMsIDEsIGNvbG9yLCBmbXQsIGFwLCAiXG4iKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHN0YXR1c19wcmludGYoc3RydWN0IHd0X3N0YXR1cyAqcywgY29uc3QgY2hhciAqY29sb3IsCisJCQljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RhdHVzX3ZwcmludGYocywgMSwgY29sb3IsIGZtdCwgYXAsIE5VTEwpOworCXZhX2VuZChhcCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXR1c19wcmludGZfbW9yZShzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25zdCBjaGFyICpjb2xvciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RhdHVzX3ZwcmludGYocywgMCwgY29sb3IsIGZtdCwgYXAsIE5VTEwpOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgd3Rfc3RhdHVzX3ByZXBhcmUoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJbWVtc2V0KHMsIDAsIHNpemVvZigqcykpOworCW1lbWNweShzLT5jb2xvcl9wYWxldHRlLCBkZWZhdWx0X3d0X3N0YXR1c19jb2xvcnMsCisJICAgICAgIHNpemVvZihkZWZhdWx0X3d0X3N0YXR1c19jb2xvcnMpKTsKKwlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9STUFMX1VOVFJBQ0tFRF9GSUxFUzsKKwlzLT51c2VfY29sb3IgPSAtMTsKKwlzLT5yZWxhdGl2ZV9wYXRocyA9IDE7CisJcy0+YnJhbmNoID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCBzaGExLCAwLCBOVUxMKTsKKwlzLT5yZWZlcmVuY2UgPSAiSEVBRCI7CisJcy0+ZnAgPSBzdGRvdXQ7CisJcy0+aW5kZXhfZmlsZSA9IGdldF9pbmRleF9maWxlKCk7CisJcy0+Y2hhbmdlLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzLT51bnRyYWNrZWQuc3RyZHVwX3N0cmluZ3MgPSAxOworCXMtPmlnbm9yZWQuc3RyZHVwX3N0cmluZ3MgPSAxOworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfcHJpbnRfdW5tZXJnZWRfaGVhZGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGk7CisJaW50IGRlbF9tb2RfY29uZmxpY3QgPSAwOworCWludCBib3RoX2RlbGV0ZWQgPSAwOworCWludCBub3RfZGVsZXRlZCA9IDA7CisJY29uc3QgY2hhciAqYyA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpOworCisJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCJVbm1lcmdlZCBwYXRoczoiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+Y2hhbmdlLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ID0gJihzLT5jaGFuZ2UuaXRlbXNbaV0pOworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkID0gaXQtPnV0aWw7CisKKwkJc3dpdGNoIChkLT5zdGFnZW1hc2spIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWJvdGhfZGVsZXRlZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQljYXNlIDU6CisJCQlkZWxfbW9kX2NvbmZsaWN0ID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbm90X2RlbGV0ZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWFkdmljZV9zdGF0dXNfaGludHMpCisJCXJldHVybjsKKwlpZiAocy0+d2hlbmNlICE9IEZST01fQ09NTUlUKQorCQk7CisJZWxzZSBpZiAoIXMtPmlzX2luaXRpYWwpCisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IHJlc2V0ICVzIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIiksIHMtPnJlZmVyZW5jZSk7CisJZWxzZQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpKTsKKworCWlmICghYm90aF9kZWxldGVkKSB7CisJCWlmICghZGVsX21vZF9jb25mbGljdCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIikpOworCQllbHNlCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIpKTsKKwl9IGVsc2UgaWYgKCFkZWxfbW9kX2NvbmZsaWN0ICYmICFub3RfZGVsZXRlZCkgeworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIikpOworCX0gZWxzZSB7CisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIikpOworCX0KKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsICIiKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X2NhY2hlZF9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIpKTsKKwlpZiAoIWFkdmljZV9zdGF0dXNfaGludHMpCisJCXJldHVybjsKKwlpZiAocy0+d2hlbmNlICE9IEZST01fQ09NTUlUKQorCQk7IC8qIE5FRURTV09SSzogdXNlICJnaXQgcmVzZXQgLS11bnJlc29sdmUiPz8/ICovCisJZWxzZSBpZiAoIXMtPmlzX2luaXRpYWwpCisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IHJlc2V0ICVzIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIiksIHMtPnJlZmVyZW5jZSk7CisJZWxzZQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpKTsKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsICIiKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X2RpcnR5X2hlYWRlcihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCQkgaW50IGhhc19kZWxldGVkLAorCQkJCQkgaW50IGhhc19kaXJ0eV9zdWJtb2R1bGVzKQoreworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKKworCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IikpOworCWlmICghYWR2aWNlX3N0YXR1c19oaW50cykKKwkJcmV0dXJuOworCWlmICghaGFzX2RlbGV0ZWQpCisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiKSk7CisJZWxzZQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIikpOworCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiKSk7CisJaWYgKGhhc19kaXJ0eV9zdWJtb2R1bGVzKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIpKTsKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsICIiKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X290aGVyX2hlYWRlcihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCQkgY29uc3QgY2hhciAqd2hhdCwKKwkJCQkJIGNvbnN0IGNoYXIgKmhvdykKK3sKKwljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCAiJXM6Iiwgd2hhdCk7CisJaWYgKCFhZHZpY2Vfc3RhdHVzX2hpbnRzKQorCQlyZXR1cm47CisJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIpLCBob3cpOworCXN0YXR1c19wcmludGZfbG4ocywgYywgIiIpOworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfcHJpbnRfdHJhaWxlcihzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIiKTsKK30KKworI2RlZmluZSBxdW90ZV9wYXRoIHF1b3RlX3BhdGhfcmVsYXRpdmUKKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3VubWVyZ2VkX2RhdGEoc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJICBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQpCit7CisJY29uc3QgY2hhciAqYyA9IGNvbG9yKFdUX1NUQVRVU19VTk1FUkdFRCwgcyk7CisJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqb25lLCAqaG93ID0gXygiYnVnIik7CisKKwlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIC0xLCAmb25lYnVmLCBzLT5wcmVmaXgpOworCXN0YXR1c19wcmludGYocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICJcdCIpOworCXN3aXRjaCAoZC0+c3RhZ2VtYXNrKSB7CisJY2FzZSAxOiBob3cgPSBfKCJib3RoIGRlbGV0ZWQ6Iik7IGJyZWFrOworCWNhc2UgMjogaG93ID0gXygiYWRkZWQgYnkgdXM6Iik7IGJyZWFrOworCWNhc2UgMzogaG93ID0gXygiZGVsZXRlZCBieSB0aGVtOiIpOyBicmVhazsKKwljYXNlIDQ6IGhvdyA9IF8oImFkZGVkIGJ5IHRoZW06Iik7IGJyZWFrOworCWNhc2UgNTogaG93ID0gXygiZGVsZXRlZCBieSB1czoiKTsgYnJlYWs7CisJY2FzZSA2OiBob3cgPSBfKCJib3RoIGFkZGVkOiIpOyBicmVhazsKKwljYXNlIDc6IGhvdyA9IF8oImJvdGggbW9kaWZpZWQ6Iik7IGJyZWFrOworCX0KKwlzdGF0dXNfcHJpbnRmX21vcmUocywgYywgIiUtMjBzJXNcbiIsIGhvdywgb25lKTsKKwlzdHJidWZfcmVsZWFzZSgmb25lYnVmKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X2NoYW5nZV9kYXRhKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJCWludCBjaGFuZ2VfdHlwZSwKKwkJCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0KQoreworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKwljb25zdCBjaGFyICpjID0gY29sb3IoY2hhbmdlX3R5cGUsIHMpOworCWludCBzdGF0dXMgPSBzdGF0dXM7CisJY2hhciAqb25lX25hbWU7CisJY2hhciAqdHdvX25hbWU7CisJY29uc3QgY2hhciAqb25lLCAqdHdvOworCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQsIHR3b2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZXh0cmEgPSBTVFJCVUZfSU5JVDsKKworCW9uZV9uYW1lID0gdHdvX25hbWUgPSBpdC0+c3RyaW5nOworCXN3aXRjaCAoY2hhbmdlX3R5cGUpIHsKKwljYXNlIFdUX1NUQVRVU19VUERBVEVEOgorCQlzdGF0dXMgPSBkLT5pbmRleF9zdGF0dXM7CisJCWlmIChkLT5oZWFkX3BhdGgpCisJCQlvbmVfbmFtZSA9IGQtPmhlYWRfcGF0aDsKKwkJYnJlYWs7CisJY2FzZSBXVF9TVEFUVVNfQ0hBTkdFRDoKKwkJaWYgKGQtPm5ld19zdWJtb2R1bGVfY29tbWl0cyB8fCBkLT5kaXJ0eV9zdWJtb2R1bGUpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmV4dHJhLCAiICgiKTsKKwkJCWlmIChkLT5uZXdfc3VibW9kdWxlX2NvbW1pdHMpCisJCQkJc3RyYnVmX2FkZGYoJmV4dHJhLCBfKCJuZXcgY29tbWl0cywgIikpOworCQkJaWYgKGQtPmRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCkKKwkJCQlzdHJidWZfYWRkZigmZXh0cmEsIF8oIm1vZGlmaWVkIGNvbnRlbnQsICIpKTsKKwkJCWlmIChkLT5kaXJ0eV9zdWJtb2R1bGUgJiBESVJUWV9TVUJNT0RVTEVfVU5UUkFDS0VEKQorCQkJCXN0cmJ1Zl9hZGRmKCZleHRyYSwgXygidW50cmFja2VkIGNvbnRlbnQsICIpKTsKKwkJCXN0cmJ1Zl9zZXRsZW4oJmV4dHJhLCBleHRyYS5sZW4gLSAyKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmZXh0cmEsICcpJyk7CisJCX0KKwkJc3RhdHVzID0gZC0+d29ya3RyZWVfc3RhdHVzOworCQlicmVhazsKKwl9CisKKwlvbmUgPSBxdW90ZV9wYXRoKG9uZV9uYW1lLCAtMSwgJm9uZWJ1Ziwgcy0+cHJlZml4KTsKKwl0d28gPSBxdW90ZV9wYXRoKHR3b19uYW1lLCAtMSwgJnR3b2J1Ziwgcy0+cHJlZml4KTsKKworCXN0YXR1c19wcmludGYocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICJcdCIpOworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBESUZGX1NUQVRVU19BRERFRDoKKwkJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIGMsIF8oIm5ldyBmaWxlOiAgICVzIiksIG9uZSk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TVEFUVVNfQ09QSUVEOgorCQlzdGF0dXNfcHJpbnRmX21vcmUocywgYywgXygiY29waWVkOiAgICAgJXMgLT4gJXMiKSwgb25lLCB0d28pOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6CisJCXN0YXR1c19wcmludGZfbW9yZShzLCBjLCBfKCJkZWxldGVkOiAgICAlcyIpLCBvbmUpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQlzdGF0dXNfcHJpbnRmX21vcmUocywgYywgXygibW9kaWZpZWQ6ICAgJXMiKSwgb25lKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgorCQlzdGF0dXNfcHJpbnRmX21vcmUocywgYywgXygicmVuYW1lZDogICAgJXMgLT4gJXMiKSwgb25lLCB0d28pOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKKwkJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIGMsIF8oInR5cGVjaGFuZ2U6ICVzIiksIG9uZSk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TVEFUVVNfVU5LTk9XTjoKKwkJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIGMsIF8oInVua25vd246ICAgICVzIiksIG9uZSk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TVEFUVVNfVU5NRVJHRUQ6CisJCXN0YXR1c19wcmludGZfbW9yZShzLCBjLCBfKCJ1bm1lcmdlZDogICAlcyIpLCBvbmUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoXygiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiKSwgc3RhdHVzKTsKKwl9CisJaWYgKGV4dHJhLmxlbikgeworCQlzdGF0dXNfcHJpbnRmX21vcmUocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIlcyIsIGV4dHJhLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZleHRyYSk7CisJfQorCXN0YXR1c19wcmludGZfbW9yZShzLCBHSVRfQ09MT1JfTk9STUFMLCAiXG4iKTsKKwlzdHJidWZfcmVsZWFzZSgmb25lYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdHdvYnVmKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlZF9jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkJCQkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzID0gZGF0YTsKKwlpbnQgaTsKKworCWlmICghcS0+bnIpCisJCXJldHVybjsKKwlzLT53b3JrZGlyX2RpcnR5ID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCisJCXAgPSBxLT5xdWV1ZVtpXTsKKwkJaXQgPSBzdHJpbmdfbGlzdF9pbnNlcnQoJnMtPmNoYW5nZSwgcC0+b25lLT5wYXRoKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoIWQpIHsKKwkJCWQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZCkpOworCQkJaXQtPnV0aWwgPSBkOworCQl9CisJCWlmICghZC0+d29ya3RyZWVfc3RhdHVzKQorCQkJZC0+d29ya3RyZWVfc3RhdHVzID0gcC0+c3RhdHVzOworCQlkLT5kaXJ0eV9zdWJtb2R1bGUgPSBwLT50d28tPmRpcnR5X3N1Ym1vZHVsZTsKKwkJaWYgKFNfSVNHSVRMSU5LKHAtPnR3by0+bW9kZSkpCisJCQlkLT5uZXdfc3VibW9kdWxlX2NvbW1pdHMgPSAhIWhhc2hjbXAocC0+b25lLT5zaGExLCBwLT50d28tPnNoYTEpOworCX0KK30KKworc3RhdGljIGludCB1bm1lcmdlZF9tYXNrKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvcywgbWFzazsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKKwlpZiAoMCA8PSBwb3MpCisJCXJldHVybiAwOworCisJbWFzayA9IDA7CisJcG9zID0gLXBvcy0xOworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zKytdOworCQlpZiAoc3RyY21wKGNlLT5uYW1lLCBwYXRoKSB8fCAhY2Vfc3RhZ2UoY2UpKQorCQkJYnJlYWs7CisJCW1hc2sgfD0gKDEgPDwgKGNlX3N0YWdlKGNlKSAtIDEpKTsKKwl9CisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19jb2xsZWN0X3VwZGF0ZWRfY2Ioc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJCQkgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkJIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHd0X3N0YXR1cyAqcyA9IGRhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCisJCXAgPSBxLT5xdWV1ZVtpXTsKKwkJaXQgPSBzdHJpbmdfbGlzdF9pbnNlcnQoJnMtPmNoYW5nZSwgcC0+dHdvLT5wYXRoKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoIWQpIHsKKwkJCWQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZCkpOworCQkJaXQtPnV0aWwgPSBkOworCQl9CisJCWlmICghZC0+aW5kZXhfc3RhdHVzKQorCQkJZC0+aW5kZXhfc3RhdHVzID0gcC0+c3RhdHVzOworCQlzd2l0Y2ggKHAtPnN0YXR1cykgeworCQljYXNlIERJRkZfU1RBVFVTX0NPUElFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgorCQkJZC0+aGVhZF9wYXRoID0geHN0cmR1cChwLT5vbmUtPnBhdGgpOworCQkJYnJlYWs7CisJCWNhc2UgRElGRl9TVEFUVVNfVU5NRVJHRUQ6CisJCQlkLT5zdGFnZW1hc2sgPSB1bm1lcmdlZF9tYXNrKHAtPnR3by0+cGF0aCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc193b3JrdHJlZShzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBESVJUWV9TVUJNT0RVTEVTKTsKKwlpZiAoIXMtPnNob3dfdW50cmFja2VkX2ZpbGVzKQorCQlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBJR05PUkVfVU5UUkFDS0VEX0lOX1NVQk1PRFVMRVMpOworCWlmIChzLT5pZ25vcmVfc3VibW9kdWxlX2FyZykgeworCQlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBPVkVSUklERV9TVUJNT0RVTEVfQ09ORklHKTsKKwkJaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZygmcmV2LmRpZmZvcHQsIHMtPmlnbm9yZV9zdWJtb2R1bGVfYXJnKTsKKwl9CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlZF9jYjsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9IHM7CisJaW5pdF9wYXRoc3BlYygmcmV2LnBydW5lX2RhdGEsIHMtPnBhdGhzcGVjKTsKKwlydW5fZGlmZl9maWxlcygmcmV2LCAwKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc19pbmRleChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQ7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW9wdC5kZWYgPSBzLT5pc19pbml0aWFsID8gRU1QVFlfVFJFRV9TSEExX0hFWCA6IHMtPnJlZmVyZW5jZTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgJm9wdCk7CisKKwlpZiAocy0+aWdub3JlX3N1Ym1vZHVsZV9hcmcpIHsKKwkJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgT1ZFUlJJREVfU1VCTU9EVUxFX0NPTkZJRyk7CisJCWhhbmRsZV9pZ25vcmVfc3VibW9kdWxlc19hcmcoJnJldi5kaWZmb3B0LCBzLT5pZ25vcmVfc3VibW9kdWxlX2FyZyk7CisJfQorCisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSB3dF9zdGF0dXNfY29sbGVjdF91cGRhdGVkX2NiOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gczsKKwlyZXYuZGlmZm9wdC5kZXRlY3RfcmVuYW1lID0gMTsKKwlyZXYuZGlmZm9wdC5yZW5hbWVfbGltaXQgPSAyMDA7CisJcmV2LmRpZmZvcHQuYnJlYWtfb3B0ID0gMDsKKwlpbml0X3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSwgcy0+cGF0aHNwZWMpOworCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX2luaXRpYWwoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJaW50IGk7CisKKwlpbml0X3BhdGhzcGVjKCZwYXRoc3BlYywgcy0+cGF0aHNwZWMpOworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisKKwkJaWYgKCFjZV9wYXRoX21hdGNoKGNlLCAmcGF0aHNwZWMpKQorCQkJY29udGludWU7CisJCWl0ID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZzLT5jaGFuZ2UsIGNlLT5uYW1lKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoIWQpIHsKKwkJCWQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZCkpOworCQkJaXQtPnV0aWwgPSBkOworCQl9CisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCWQtPmluZGV4X3N0YXR1cyA9IERJRkZfU1RBVFVTX1VOTUVSR0VEOworCQkJZC0+c3RhZ2VtYXNrIHw9ICgxIDw8IChjZV9zdGFnZShjZSkgLSAxKSk7CisJCX0KKwkJZWxzZQorCQkJZC0+aW5kZXhfc3RhdHVzID0gRElGRl9TVEFUVVNfQURERUQ7CisJfQorCWZyZWVfcGF0aHNwZWMoJnBhdGhzcGVjKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfdW50cmFja2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGk7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCisJaWYgKCFzLT5zaG93X3VudHJhY2tlZF9maWxlcykKKwkJcmV0dXJuOworCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7CisJaWYgKHMtPnNob3dfdW50cmFja2VkX2ZpbGVzICE9IFNIT1dfQUxMX1VOVFJBQ0tFRF9GSUxFUykKKwkJZGlyLmZsYWdzIHw9CisJCQlESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUyB8IERJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTOworCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOworCisJZmlsbF9kaXJlY3RvcnkoJmRpciwgcy0+cGF0aHNwZWMpOworCWZvciAoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKKwkJaWYgKGNhY2hlX25hbWVfaXNfb3RoZXIoZW50LT5uYW1lLCBlbnQtPmxlbikgJiYKKwkJICAgIG1hdGNoX3BhdGhzcGVjKHMtPnBhdGhzcGVjLCBlbnQtPm5hbWUsIGVudC0+bGVuLCAwLCBOVUxMKSkKKwkJCXN0cmluZ19saXN0X2luc2VydCgmcy0+dW50cmFja2VkLCBlbnQtPm5hbWUpOworCQlmcmVlKGVudCk7CisJfQorCisJaWYgKHMtPnNob3dfaWdub3JlZF9maWxlcykgeworCQlkaXIubnIgPSAwOworCQlkaXIuZmxhZ3MgPSBESVJfU0hPV19JR05PUkVEIHwgRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVM7CisJCWZpbGxfZGlyZWN0b3J5KCZkaXIsIHMtPnBhdGhzcGVjKTsKKwkJZm9yIChpID0gMDsgaSA8IGRpci5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKKwkJCWlmIChjYWNoZV9uYW1lX2lzX290aGVyKGVudC0+bmFtZSwgZW50LT5sZW4pICYmCisJCQkgICAgbWF0Y2hfcGF0aHNwZWMocy0+cGF0aHNwZWMsIGVudC0+bmFtZSwgZW50LT5sZW4sIDAsIE5VTEwpKQorCQkJCXN0cmluZ19saXN0X2luc2VydCgmcy0+aWdub3JlZCwgZW50LT5uYW1lKTsKKwkJCWZyZWUoZW50KTsKKwkJfQorCX0KKworCWZyZWUoZGlyLmVudHJpZXMpOworfQorCit2b2lkIHd0X3N0YXR1c19jb2xsZWN0KHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc193b3JrdHJlZShzKTsKKworCWlmIChzLT5pc19pbml0aWFsKQorCQl3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX2luaXRpYWwocyk7CisJZWxzZQorCQl3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX2luZGV4KHMpOworCXd0X3N0YXR1c19jb2xsZWN0X3VudHJhY2tlZChzKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3VubWVyZ2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IHNob3duX2hlYWRlciA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+Y2hhbmdlLm5yOyBpKyspIHsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCQlpdCA9ICYocy0+Y2hhbmdlLml0ZW1zW2ldKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoIWQtPnN0YWdlbWFzaykKKwkJCWNvbnRpbnVlOworCQlpZiAoIXNob3duX2hlYWRlcikgeworCQkJd3Rfc3RhdHVzX3ByaW50X3VubWVyZ2VkX2hlYWRlcihzKTsKKwkJCXNob3duX2hlYWRlciA9IDE7CisJCX0KKwkJd3Rfc3RhdHVzX3ByaW50X3VubWVyZ2VkX2RhdGEocywgaXQpOworCX0KKwlpZiAoc2hvd25faGVhZGVyKQorCQl3dF9zdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKKworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfcHJpbnRfdXBkYXRlZChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCBzaG93bl9oZWFkZXIgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJaXQgPSAmKHMtPmNoYW5nZS5pdGVtc1tpXSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkLT5pbmRleF9zdGF0dXMgfHwKKwkJICAgIGQtPmluZGV4X3N0YXR1cyA9PSBESUZGX1NUQVRVU19VTk1FUkdFRCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXNob3duX2hlYWRlcikgeworCQkJd3Rfc3RhdHVzX3ByaW50X2NhY2hlZF9oZWFkZXIocyk7CisJCQlzLT5jb21taXRhYmxlID0gMTsKKwkJCXNob3duX2hlYWRlciA9IDE7CisJCX0KKwkJd3Rfc3RhdHVzX3ByaW50X2NoYW5nZV9kYXRhKHMsIFdUX1NUQVRVU19VUERBVEVELCBpdCk7CisJfQorCWlmIChzaG93bl9oZWFkZXIpCisJCXd0X3N0YXR1c19wcmludF90cmFpbGVyKHMpOworfQorCisvKgorICogLTEgOiBoYXMgZGVsZXRlCisgKiAgMCA6IG5vIGNoYW5nZQorICogIDEgOiBzb21lIGNoYW5nZSBidXQgbm8gZGVsZXRlCisgKi8KK3N0YXRpYyBpbnQgd3Rfc3RhdHVzX2NoZWNrX3dvcmt0cmVlX2NoYW5nZXMoc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJICAgICBpbnQgKmRpcnR5X3N1Ym1vZHVsZXMpCit7CisJaW50IGk7CisJaW50IGNoYW5nZXMgPSAwOworCisJKmRpcnR5X3N1Ym1vZHVsZXMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCWQgPSBzLT5jaGFuZ2UuaXRlbXNbaV0udXRpbDsKKwkJaWYgKCFkLT53b3JrdHJlZV9zdGF0dXMgfHwKKwkJICAgIGQtPndvcmt0cmVlX3N0YXR1cyA9PSBESUZGX1NUQVRVU19VTk1FUkdFRCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNoYW5nZXMpCisJCQljaGFuZ2VzID0gMTsKKwkJaWYgKGQtPmRpcnR5X3N1Ym1vZHVsZSkKKwkJCSpkaXJ0eV9zdWJtb2R1bGVzID0gMTsKKwkJaWYgKGQtPndvcmt0cmVlX3N0YXR1cyA9PSBESUZGX1NUQVRVU19ERUxFVEVEKQorCQkJY2hhbmdlcyA9IC0xOworCX0KKwlyZXR1cm4gY2hhbmdlczsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X2NoYW5nZWQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgaSwgZGlydHlfc3VibW9kdWxlczsKKwlpbnQgd29ya3RyZWVfY2hhbmdlcyA9IHd0X3N0YXR1c19jaGVja193b3JrdHJlZV9jaGFuZ2VzKHMsICZkaXJ0eV9zdWJtb2R1bGVzKTsKKworCWlmICghd29ya3RyZWVfY2hhbmdlcykKKwkJcmV0dXJuOworCisJd3Rfc3RhdHVzX3ByaW50X2RpcnR5X2hlYWRlcihzLCB3b3JrdHJlZV9jaGFuZ2VzIDwgMCwgZGlydHlfc3VibW9kdWxlcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+Y2hhbmdlLm5yOyBpKyspIHsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCQlpdCA9ICYocy0+Y2hhbmdlLml0ZW1zW2ldKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoIWQtPndvcmt0cmVlX3N0YXR1cyB8fAorCQkgICAgZC0+d29ya3RyZWVfc3RhdHVzID09IERJRkZfU1RBVFVTX1VOTUVSR0VEKQorCQkJY29udGludWU7CisJCXd0X3N0YXR1c19wcmludF9jaGFuZ2VfZGF0YShzLCBXVF9TVEFUVVNfQ0hBTkdFRCwgaXQpOworCX0KKwl3dF9zdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3N1Ym1vZHVsZV9zdW1tYXJ5KHN0cnVjdCB3dF9zdGF0dXMgKnMsIGludCB1bmNvbW1pdHRlZCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBzbV9zdW1tYXJ5OworCWNoYXIgc3VtbWFyeV9saW1pdFs2NF07CisJY2hhciBpbmRleFtQQVRIX01BWF07CisJY29uc3QgY2hhciAqZW52W10gPSB7IE5VTEwsIE5VTEwgfTsKKwljb25zdCBjaGFyICphcmd2WzhdOworCisJZW52WzBdID0JaW5kZXg7CisJYXJndlswXSA9CSJzdWJtb2R1bGUiOworCWFyZ3ZbMV0gPQkic3VtbWFyeSI7CisJYXJndlsyXSA9CXVuY29tbWl0dGVkID8gIi0tZmlsZXMiIDogIi0tY2FjaGVkIjsKKwlhcmd2WzNdID0JIi0tZm9yLXN0YXR1cyI7CisJYXJndls0XSA9CSItLXN1bW1hcnktbGltaXQiOworCWFyZ3ZbNV0gPQlzdW1tYXJ5X2xpbWl0OworCWFyZ3ZbNl0gPQl1bmNvbW1pdHRlZCA/IE5VTEwgOiAocy0+YW1lbmQgPyAiSEVBRF4iIDogIkhFQUQiKTsKKwlhcmd2WzddID0JTlVMTDsKKworCXNwcmludGYoc3VtbWFyeV9saW1pdCwgIiVkIiwgcy0+c3VibW9kdWxlX3N1bW1hcnkpOworCXNucHJpbnRmKGluZGV4LCBzaXplb2YoaW5kZXgpLCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBzLT5pbmRleF9maWxlKTsKKworCW1lbXNldCgmc21fc3VtbWFyeSwgMCwgc2l6ZW9mKHNtX3N1bW1hcnkpKTsKKwlzbV9zdW1tYXJ5LmFyZ3YgPSBhcmd2OworCXNtX3N1bW1hcnkuZW52ID0gZW52OworCXNtX3N1bW1hcnkuZ2l0X2NtZCA9IDE7CisJc21fc3VtbWFyeS5ub19zdGRpbiA9IDE7CisJZmZsdXNoKHMtPmZwKTsKKwlzbV9zdW1tYXJ5Lm91dCA9IGR1cChmaWxlbm8ocy0+ZnApKTsgICAgLyogcnVuX2NvbW1hbmQgY2xvc2VzIGl0ICovCisJcnVuX2NvbW1hbmQoJnNtX3N1bW1hcnkpOworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfcHJpbnRfb3RoZXIoc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkgIHN0cnVjdCBzdHJpbmdfbGlzdCAqbCwKKwkJCQkgIGNvbnN0IGNoYXIgKndoYXQsCisJCQkJICBjb25zdCBjaGFyICpob3cpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG91dHB1dCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBjb2x1bW5fb3B0aW9ucyBjb3B0czsKKworCWlmICghbC0+bnIpCisJCXJldHVybjsKKworCXd0X3N0YXR1c19wcmludF9vdGhlcl9oZWFkZXIocywgd2hhdCwgaG93KTsKKworCWZvciAoaSA9IDA7IGkgPCBsLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJY29uc3QgY2hhciAqcGF0aDsKKwkJaXQgPSAmKGwtPml0ZW1zW2ldKTsKKwkJcGF0aCA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgc3RybGVuKGl0LT5zdHJpbmcpLAorCQkJCSAgJmJ1Ziwgcy0+cHJlZml4KTsKKwkJaWYgKGNvbHVtbl9hY3RpdmUocy0+Y29sb3B0cykpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmb3V0cHV0LCBwYXRoKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN0YXR1c19wcmludGYocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICJcdCIpOworCQlzdGF0dXNfcHJpbnRmX21vcmUocywgY29sb3IoV1RfU1RBVFVTX1VOVFJBQ0tFRCwgcyksCisJCQkJICAgIiVzXG4iLCBwYXRoKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlpZiAoIWNvbHVtbl9hY3RpdmUocy0+Y29sb3B0cykpCisJCXJldHVybjsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcyNcdCVzIiwKKwkJICAgIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLAorCQkgICAgY29sb3IoV1RfU1RBVFVTX1VOVFJBQ0tFRCwgcykpOworCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCWNvcHRzLnBhZGRpbmcgPSAxOworCWNvcHRzLmluZGVudCA9IGJ1Zi5idWY7CisJaWYgKHdhbnRfY29sb3Iocy0+dXNlX2NvbG9yKSkKKwkJY29wdHMubmwgPSBHSVRfQ09MT1JfUkVTRVQgIlxuIjsKKwlwcmludF9jb2x1bW5zKCZvdXRwdXQsIHMtPmNvbG9wdHMsICZjb3B0cyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJm91dHB1dCwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF92ZXJib3NlKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IG9wdDsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOworCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIEFMTE9XX1RFWFRDT05WKTsKKworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0LmRlZiA9IHMtPmlzX2luaXRpYWwgPyBFTVBUWV9UUkVFX1NIQTFfSEVYIDogcy0+cmVmZXJlbmNlOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCAmb3B0KTsKKworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfUEFUQ0g7CisJcmV2LmRpZmZvcHQuZGV0ZWN0X3JlbmFtZSA9IDE7CisJcmV2LmRpZmZvcHQuZmlsZSA9IHMtPmZwOworCXJldi5kaWZmb3B0LmNsb3NlX2ZpbGUgPSAwOworCS8qCisJICogSWYgd2UncmUgbm90IGdvaW5nIHRvIHN0ZG91dCwgdGhlbiB3ZSBkZWZpbml0ZWx5IGRvbid0CisJICogd2FudCBjb2xvciwgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHRoZSBjb21taXQgbWVzc2FnZQorCSAqIGZpbGUgKGFuZCBldmVuIHRoZSAiYXV0byIgc2V0dGluZyB3b24ndCB3b3JrLCBzaW5jZSBpdAorCSAqIHdpbGwgaGF2ZSBjaGVja2VkIGlzYXR0eSBvbiBzdGRvdXQpLgorCSAqLworCWlmIChzLT5mcCAhPSBzdGRvdXQpCisJCXJldi5kaWZmb3B0LnVzZV9jb2xvciA9IDA7CisJcnVuX2RpZmZfaW5kZXgoJnJldiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF90cmFja2luZyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpjcCwgKmVwOworCXN0cnVjdCBicmFuY2ggKmJyYW5jaDsKKworCWFzc2VydChzLT5icmFuY2ggJiYgIXMtPmlzX2luaXRpYWwpOworCWlmIChwcmVmaXhjbXAocy0+YnJhbmNoLCAicmVmcy9oZWFkcy8iKSkKKwkJcmV0dXJuOworCWJyYW5jaCA9IGJyYW5jaF9nZXQocy0+YnJhbmNoICsgMTEpOworCWlmICghZm9ybWF0X3RyYWNraW5nX2luZm8oYnJhbmNoLCAmc2IpKQorCQlyZXR1cm47CisKKwlmb3IgKGNwID0gc2IuYnVmOyAoZXAgPSBzdHJjaHIoY3AsICdcbicpKSAhPSBOVUxMOyBjcCA9IGVwICsgMSkKKwkJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksCisJCQkJICIjICUuKnMiLCAoaW50KShlcCAtIGNwKSwgY3ApOworCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiIyIpOworfQorCitzdGF0aWMgaW50IGhhc191bm1lcmdlZChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCWQgPSBzLT5jaGFuZ2UuaXRlbXNbaV0udXRpbDsKKwkJaWYgKGQtPnN0YWdlbWFzaykKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19tZXJnZV9pbl9wcm9ncmVzcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlLAorCQkJCWNvbnN0IGNoYXIgKmNvbG9yKQoreworCWlmIChoYXNfdW5tZXJnZWQocykpIHsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwgXygiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIikpOworCQlpZiAoYWR2aWNlX3N0YXR1c19oaW50cykKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIpKTsKKwl9IGVsc2UgeworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIpKTsKKwkJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiKSk7CisJfQorCXd0X3N0YXR1c19wcmludF90cmFpbGVyKHMpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2FtX2luX3Byb2dyZXNzKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUsCisJCQkJY29uc3QgY2hhciAqY29sb3IpCit7CisJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJXygiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIikpOworCWlmIChzdGF0ZS0+YW1fZW1wdHlfcGF0Y2gpCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iKSk7CisJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpIHsKKwkJaWYgKCFzdGF0ZS0+YW1fZW1wdHlfcGF0Y2gpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIikiKSk7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIpKTsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCV8oIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIpKTsKKwl9CisJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyBjaGFyICpyZWFkX2xpbmVfZnJvbV9naXRfcGF0aChjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZwID0gZm9wZW4oZ2l0X3BhdGgoIiVzIiwgZmlsZW5hbWUpLCAiciIpOworCWlmICghZnApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiBOVUxMOworCX0KKwlzdHJidWZfZ2V0bGluZSgmYnVmLCBmcCwgJ1xuJyk7CisJaWYgKCFmY2xvc2UoZnApKSB7CisJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfY29tbWl0X2luX3Byb2dyZXNzKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IHNwbGl0X2luX3Byb2dyZXNzID0gMDsKKwljaGFyICpoZWFkID0gcmVhZF9saW5lX2Zyb21fZ2l0X3BhdGgoIkhFQUQiKTsKKwljaGFyICpvcmlnX2hlYWQgPSByZWFkX2xpbmVfZnJvbV9naXRfcGF0aCgiT1JJR19IRUFEIik7CisJY2hhciAqcmViYXNlX2FtZW5kID0gcmVhZF9saW5lX2Zyb21fZ2l0X3BhdGgoInJlYmFzZS1tZXJnZS9hbWVuZCIpOworCWNoYXIgKnJlYmFzZV9vcmlnX2hlYWQgPSByZWFkX2xpbmVfZnJvbV9naXRfcGF0aCgicmViYXNlLW1lcmdlL29yaWctaGVhZCIpOworCisJaWYgKCFoZWFkIHx8ICFvcmlnX2hlYWQgfHwgIXJlYmFzZV9hbWVuZCB8fCAhcmViYXNlX29yaWdfaGVhZCB8fAorCSAgICAhcy0+YnJhbmNoIHx8IHN0cmNtcChzLT5icmFuY2gsICJIRUFEIikpCisJCXJldHVybiBzcGxpdF9pbl9wcm9ncmVzczsKKworCWlmICghc3RyY21wKHJlYmFzZV9hbWVuZCwgcmViYXNlX29yaWdfaGVhZCkpIHsKKwkJaWYgKHN0cmNtcChoZWFkLCByZWJhc2VfYW1lbmQpKQorCQkJc3BsaXRfaW5fcHJvZ3Jlc3MgPSAxOworCX0gZWxzZSBpZiAoc3RyY21wKG9yaWdfaGVhZCwgcmViYXNlX29yaWdfaGVhZCkpIHsKKwkJc3BsaXRfaW5fcHJvZ3Jlc3MgPSAxOworCX0KKworCWlmICghcy0+YW1lbmQgJiYgIXMtPm5vd2FybiAmJiAhcy0+d29ya2Rpcl9kaXJ0eSkKKwkJc3BsaXRfaW5fcHJvZ3Jlc3MgPSAwOworCisJZnJlZShoZWFkKTsKKwlmcmVlKG9yaWdfaGVhZCk7CisJZnJlZShyZWJhc2VfYW1lbmQpOworCWZyZWUocmViYXNlX29yaWdfaGVhZCk7CisJcmV0dXJuIHNwbGl0X2luX3Byb2dyZXNzOworfQorCitzdGF0aWMgdm9pZCBzaG93X3JlYmFzZV9pbl9wcm9ncmVzcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlLAorCQkJCWNvbnN0IGNoYXIgKmNvbG9yKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGhhc191bm1lcmdlZChzKSkgeworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLCBfKCJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iKSk7CisJCWlmIChhZHZpY2Vfc3RhdHVzX2hpbnRzKSB7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIikpOworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiKSk7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIpKTsKKwkJfQorCX0gZWxzZSBpZiAoc3RhdGUtPnJlYmFzZV9pbl9wcm9ncmVzcyB8fCAhc3RhdChnaXRfcGF0aCgiTUVSR0VfTVNHIiksICZzdCkpIHsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwgXygiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIikpOworCQlpZiAoYWR2aWNlX3N0YXR1c19oaW50cykKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIikpOworCX0gZWxzZSBpZiAoc3BsaXRfY29tbWl0X2luX3Byb2dyZXNzKHMpKSB7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsIF8oIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIikpOworCQlpZiAoYWR2aWNlX3N0YXR1c19oaW50cykKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiKSk7CisJfSBlbHNlIHsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwgXygiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIikpOworCQlpZiAoYWR2aWNlX3N0YXR1c19oaW50cyAmJiAhcy0+YW1lbmQpIHsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIpKTsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiKSk7CisJCX0KKwl9CisJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY2hlcnJ5X3BpY2tfaW5fcHJvZ3Jlc3Moc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUsCisJCQkJCWNvbnN0IGNoYXIgKmNvbG9yKQoreworCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsIF8oIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nLiIpKTsKKwlpZiAoYWR2aWNlX3N0YXR1c19oaW50cykgeworCQlpZiAoaGFzX3VubWVyZ2VkKHMpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIikpOworCQllbHNlCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjb21taXRcIikiKSk7CisJfQorCXd0X3N0YXR1c19wcmludF90cmFpbGVyKHMpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2Jpc2VjdF9pbl9wcm9ncmVzcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlLAorCQkJCWNvbnN0IGNoYXIgKmNvbG9yKQoreworCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsIF8oIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iKSk7CisJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiKSk7CisJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF9zdGF0ZShzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWNvbnN0IGNoYXIgKnN0YXRlX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisJc3RydWN0IHd0X3N0YXR1c19zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCisJaWYgKCFzdGF0KGdpdF9wYXRoKCJNRVJHRV9IRUFEIiksICZzdCkpIHsKKwkJc3RhdGUubWVyZ2VfaW5fcHJvZ3Jlc3MgPSAxOworCX0gZWxzZSBpZiAoIXN0YXQoZ2l0X3BhdGgoInJlYmFzZS1hcHBseSIpLCAmc3QpKSB7CisJCWlmICghc3RhdChnaXRfcGF0aCgicmViYXNlLWFwcGx5L2FwcGx5aW5nIiksICZzdCkpIHsKKwkJCXN0YXRlLmFtX2luX3Byb2dyZXNzID0gMTsKKwkJCWlmICghc3RhdChnaXRfcGF0aCgicmViYXNlLWFwcGx5L3BhdGNoIiksICZzdCkgJiYgIXN0LnN0X3NpemUpCisJCQkJc3RhdGUuYW1fZW1wdHlfcGF0Y2ggPSAxOworCQl9IGVsc2UgeworCQkJc3RhdGUucmViYXNlX2luX3Byb2dyZXNzID0gMTsKKwkJfQorCX0gZWxzZSBpZiAoIXN0YXQoZ2l0X3BhdGgoInJlYmFzZS1tZXJnZSIpLCAmc3QpKSB7CisJCWlmICghc3RhdChnaXRfcGF0aCgicmViYXNlLW1lcmdlL2ludGVyYWN0aXZlIiksICZzdCkpCisJCQlzdGF0ZS5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MgPSAxOworCQllbHNlCisJCQlzdGF0ZS5yZWJhc2VfaW5fcHJvZ3Jlc3MgPSAxOworCX0gZWxzZSBpZiAoIXN0YXQoZ2l0X3BhdGgoIkNIRVJSWV9QSUNLX0hFQUQiKSwgJnN0KSkgeworCQlzdGF0ZS5jaGVycnlfcGlja19pbl9wcm9ncmVzcyA9IDE7CisJfQorCWlmICghc3RhdChnaXRfcGF0aCgiQklTRUNUX0xPRyIpLCAmc3QpKQorCQlzdGF0ZS5iaXNlY3RfaW5fcHJvZ3Jlc3MgPSAxOworCisJaWYgKHN0YXRlLm1lcmdlX2luX3Byb2dyZXNzKQorCQlzaG93X21lcmdlX2luX3Byb2dyZXNzKHMsICZzdGF0ZSwgc3RhdGVfY29sb3IpOworCWVsc2UgaWYgKHN0YXRlLmFtX2luX3Byb2dyZXNzKQorCQlzaG93X2FtX2luX3Byb2dyZXNzKHMsICZzdGF0ZSwgc3RhdGVfY29sb3IpOworCWVsc2UgaWYgKHN0YXRlLnJlYmFzZV9pbl9wcm9ncmVzcyB8fCBzdGF0ZS5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MpCisJCXNob3dfcmViYXNlX2luX3Byb2dyZXNzKHMsICZzdGF0ZSwgc3RhdGVfY29sb3IpOworCWVsc2UgaWYgKHN0YXRlLmNoZXJyeV9waWNrX2luX3Byb2dyZXNzKQorCQlzaG93X2NoZXJyeV9waWNrX2luX3Byb2dyZXNzKHMsICZzdGF0ZSwgc3RhdGVfY29sb3IpOworCWlmIChzdGF0ZS5iaXNlY3RfaW5fcHJvZ3Jlc3MpCisJCXNob3dfYmlzZWN0X2luX3Byb2dyZXNzKHMsICZzdGF0ZSwgc3RhdGVfY29sb3IpOworfQorCit2b2lkIHd0X3N0YXR1c19wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWNvbnN0IGNoYXIgKmJyYW5jaF9jb2xvciA9IGNvbG9yKFdUX1NUQVRVU19PTkJSQU5DSCwgcyk7CisJY29uc3QgY2hhciAqYnJhbmNoX3N0YXR1c19jb2xvciA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpOworCisJaWYgKHMtPmJyYW5jaCkgeworCQljb25zdCBjaGFyICpvbl93aGF0ID0gXygiT24gYnJhbmNoICIpOworCQljb25zdCBjaGFyICpicmFuY2hfbmFtZSA9IHMtPmJyYW5jaDsKKwkJaWYgKCFwcmVmaXhjbXAoYnJhbmNoX25hbWUsICJyZWZzL2hlYWRzLyIpKQorCQkJYnJhbmNoX25hbWUgKz0gMTE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYnJhbmNoX25hbWUsICJIRUFEIikpIHsKKwkJCWJyYW5jaF9uYW1lID0gIiI7CisJCQlicmFuY2hfc3RhdHVzX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX05PQlJBTkNILCBzKTsKKwkJCW9uX3doYXQgPSBfKCJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIik7CisJCX0KKwkJc3RhdHVzX3ByaW50ZihzLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIiIpOworCQlzdGF0dXNfcHJpbnRmX21vcmUocywgYnJhbmNoX3N0YXR1c19jb2xvciwgIiVzIiwgb25fd2hhdCk7CisJCXN0YXR1c19wcmludGZfbW9yZShzLCBicmFuY2hfY29sb3IsICIlc1xuIiwgYnJhbmNoX25hbWUpOworCQlpZiAoIXMtPmlzX2luaXRpYWwpCisJCQl3dF9zdGF0dXNfcHJpbnRfdHJhY2tpbmcocyk7CisJfQorCisJd3Rfc3RhdHVzX3ByaW50X3N0YXRlKHMpOworCWlmIChzLT5pc19pbml0aWFsKSB7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIiKTsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgXygiSW5pdGlhbCBjb21taXQiKSk7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIiKTsKKwl9CisKKwl3dF9zdGF0dXNfcHJpbnRfdXBkYXRlZChzKTsKKwl3dF9zdGF0dXNfcHJpbnRfdW5tZXJnZWQocyk7CisJd3Rfc3RhdHVzX3ByaW50X2NoYW5nZWQocyk7CisJaWYgKHMtPnN1Ym1vZHVsZV9zdW1tYXJ5ICYmCisJICAgICghcy0+aWdub3JlX3N1Ym1vZHVsZV9hcmcgfHwKKwkgICAgIHN0cmNtcChzLT5pZ25vcmVfc3VibW9kdWxlX2FyZywgImFsbCIpKSkgeworCQl3dF9zdGF0dXNfcHJpbnRfc3VibW9kdWxlX3N1bW1hcnkocywgMCk7ICAvKiBzdGFnZWQgKi8KKwkJd3Rfc3RhdHVzX3ByaW50X3N1Ym1vZHVsZV9zdW1tYXJ5KHMsIDEpOyAgLyogdW5zdGFnZWQgKi8KKwl9CisJaWYgKHMtPnNob3dfdW50cmFja2VkX2ZpbGVzKSB7CisJCXd0X3N0YXR1c19wcmludF9vdGhlcihzLCAmcy0+dW50cmFja2VkLCBfKCJVbnRyYWNrZWQgZmlsZXMiKSwgImFkZCIpOworCQlpZiAocy0+c2hvd19pZ25vcmVkX2ZpbGVzKQorCQkJd3Rfc3RhdHVzX3ByaW50X290aGVyKHMsICZzLT5pZ25vcmVkLCBfKCJJZ25vcmVkIGZpbGVzIiksICJhZGQgLWYiKTsKKwl9IGVsc2UgaWYgKHMtPmNvbW1pdGFibGUpCisJCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwgXygiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIpLAorCQkJYWR2aWNlX3N0YXR1c19oaW50cworCQkJPyBfKCIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIikgOiAiIik7CisKKwlpZiAocy0+dmVyYm9zZSkKKwkJd3Rfc3RhdHVzX3ByaW50X3ZlcmJvc2Uocyk7CisJaWYgKCFzLT5jb21taXRhYmxlKSB7CisJCWlmIChzLT5hbWVuZCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwgXygiTm8gY2hhbmdlcyIpKTsKKwkJZWxzZSBpZiAocy0+bm93YXJuKQorCQkJOyAvKiBub3RoaW5nICovCisJCWVsc2UgaWYgKHMtPndvcmtkaXJfZGlydHkpIHsKKwkJCWlmIChhZHZpY2Vfc3RhdHVzX2hpbnRzKQorCQkJCXByaW50ZihfKCJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAiCisJCQkJCSAiKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iKSk7CisJCQllbHNlCisJCQkJcHJpbnRmKF8oIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iKSk7CisJCX0gZWxzZSBpZiAocy0+dW50cmFja2VkLm5yKSB7CisJCQlpZiAoYWR2aWNlX3N0YXR1c19oaW50cykKKwkJCQlwcmludGYoXygibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyAiCisJCQkJCSAicHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIikpOworCQkJZWxzZQorCQkJCXByaW50ZihfKCJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIpKTsKKwkJfSBlbHNlIGlmIChzLT5pc19pbml0aWFsKSB7CisJCQlpZiAoYWR2aWNlX3N0YXR1c19oaW50cykKKwkJCQlwcmludGYoXygibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzICIKKwkJCQkJICJhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIikpOworCQkJZWxzZQorCQkJCXByaW50ZihfKCJub3RoaW5nIHRvIGNvbW1pdFxuIikpOworCQl9IGVsc2UgaWYgKCFzLT5zaG93X3VudHJhY2tlZF9maWxlcykgeworCQkJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpCisJCQkJcHJpbnRmKF8oIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iKSk7CisJCQllbHNlCisJCQkJcHJpbnRmKF8oIm5vdGhpbmcgdG8gY29tbWl0XG4iKSk7CisJCX0gZWxzZQorCQkJcHJpbnRmKF8oIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIGRpcmVjdG9yeSBjbGVhblxuIikpOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfdW5tZXJnZWQoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0LAorCQkJICAgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkID0gaXQtPnV0aWw7CisJY29uc3QgY2hhciAqaG93ID0gIj8/IjsKKworCXN3aXRjaCAoZC0+c3RhZ2VtYXNrKSB7CisJY2FzZSAxOiBob3cgPSAiREQiOyBicmVhazsgLyogYm90aCBkZWxldGVkICovCisJY2FzZSAyOiBob3cgPSAiQVUiOyBicmVhazsgLyogYWRkZWQgYnkgdXMgKi8KKwljYXNlIDM6IGhvdyA9ICJVRCI7IGJyZWFrOyAvKiBkZWxldGVkIGJ5IHRoZW0gKi8KKwljYXNlIDQ6IGhvdyA9ICJVQSI7IGJyZWFrOyAvKiBhZGRlZCBieSB0aGVtICovCisJY2FzZSA1OiBob3cgPSAiRFUiOyBicmVhazsgLyogZGVsZXRlZCBieSB1cyAqLworCWNhc2UgNjogaG93ID0gIkFBIjsgYnJlYWs7IC8qIGJvdGggYWRkZWQgKi8KKwljYXNlIDc6IGhvdyA9ICJVVSI7IGJyZWFrOyAvKiBib3RoIG1vZGlmaWVkICovCisJfQorCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19VTk1FUkdFRCwgcyksICIlcyIsIGhvdyk7CisJaWYgKHMtPm51bGxfdGVybWluYXRpb24pIHsKKwkJZnByaW50ZihzdGRvdXQsICIgJXMlYyIsIGl0LT5zdHJpbmcsIDApOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKm9uZTsKKwkJb25lID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCAtMSwgJm9uZWJ1Ziwgcy0+cHJlZml4KTsKKwkJcHJpbnRmKCIgJXNcbiIsIG9uZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfc3RhdHVzKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCwKKwkJCSBzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKworCWlmIChkLT5pbmRleF9zdGF0dXMpCisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19VUERBVEVELCBzKSwgIiVjIiwgZC0+aW5kZXhfc3RhdHVzKTsKKwllbHNlCisJCXB1dGNoYXIoJyAnKTsKKwlpZiAoZC0+d29ya3RyZWVfc3RhdHVzKQorCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfQ0hBTkdFRCwgcyksICIlYyIsIGQtPndvcmt0cmVlX3N0YXR1cyk7CisJZWxzZQorCQlwdXRjaGFyKCcgJyk7CisJcHV0Y2hhcignICcpOworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKSB7CisJCWZwcmludGYoc3Rkb3V0LCAiJXMlYyIsIGl0LT5zdHJpbmcsIDApOworCQlpZiAoZC0+aGVhZF9wYXRoKQorCQkJZnByaW50ZihzdGRvdXQsICIlcyVjIiwgZC0+aGVhZF9wYXRoLCAwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIG9uZWJ1ZiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpvbmU7CisJCWlmIChkLT5oZWFkX3BhdGgpIHsKKwkJCW9uZSA9IHF1b3RlX3BhdGgoZC0+aGVhZF9wYXRoLCAtMSwgJm9uZWJ1Ziwgcy0+cHJlZml4KTsKKwkJCWlmICgqb25lICE9ICciJyAmJiBzdHJjaHIob25lLCAnICcpICE9IE5VTEwpIHsKKwkJCQlwdXRjaGFyKCciJyk7CisJCQkJc3RyYnVmX2FkZGNoKCZvbmVidWYsICciJyk7CisJCQkJb25lID0gb25lYnVmLmJ1ZjsKKwkJCX0KKwkJCXByaW50ZigiJXMgLT4gIiwgb25lKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworCQl9CisJCW9uZSA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgLTEsICZvbmVidWYsIHMtPnByZWZpeCk7CisJCWlmICgqb25lICE9ICciJyAmJiBzdHJjaHIob25lLCAnICcpICE9IE5VTEwpIHsKKwkJCXB1dGNoYXIoJyInKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmb25lYnVmLCAnIicpOworCQkJb25lID0gb25lYnVmLmJ1ZjsKKwkJfQorCQlwcmludGYoIiVzXG4iLCBvbmUpOworCQlzdHJidWZfcmVsZWFzZSgmb25lYnVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHd0X3Nob3J0c3RhdHVzX290aGVyKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCwKKwkJCQkgc3RydWN0IHd0X3N0YXR1cyAqcywgY29uc3QgY2hhciAqc2lnbikKK3sKKwlpZiAocy0+bnVsbF90ZXJtaW5hdGlvbikgeworCQlmcHJpbnRmKHN0ZG91dCwgIiVzICVzJWMiLCBzaWduLCBpdC0+c3RyaW5nLCAwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIG9uZWJ1ZiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpvbmU7CisJCW9uZSA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgLTEsICZvbmVidWYsIHMtPnByZWZpeCk7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19VTlRSQUNLRUQsIHMpLCAiJXMiLCBzaWduKTsKKwkJcHJpbnRmKCIgJXNcbiIsIG9uZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfcHJpbnRfdHJhY2tpbmcoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2g7CisJY29uc3QgY2hhciAqaGVhZGVyX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisJY29uc3QgY2hhciAqYnJhbmNoX2NvbG9yX2xvY2FsID0gY29sb3IoV1RfU1RBVFVTX0xPQ0FMX0JSQU5DSCwgcyk7CisJY29uc3QgY2hhciAqYnJhbmNoX2NvbG9yX3JlbW90ZSA9IGNvbG9yKFdUX1NUQVRVU19SRU1PVEVfQlJBTkNILCBzKTsKKworCWNvbnN0IGNoYXIgKmJhc2U7CisJY29uc3QgY2hhciAqYnJhbmNoX25hbWU7CisJaW50IG51bV9vdXJzLCBudW1fdGhlaXJzOworCisJY29sb3JfZnByaW50ZihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIjIyAiKTsKKworCWlmICghcy0+YnJhbmNoKQorCQlyZXR1cm47CisJYnJhbmNoX25hbWUgPSBzLT5icmFuY2g7CisKKwlpZiAoIXByZWZpeGNtcChicmFuY2hfbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCWJyYW5jaF9uYW1lICs9IDExOworCWVsc2UgaWYgKCFzdHJjbXAoYnJhbmNoX25hbWUsICJIRUFEIikpIHsKKwkJYnJhbmNoX25hbWUgPSBfKCJIRUFEIChubyBicmFuY2gpIik7CisJCWJyYW5jaF9jb2xvcl9sb2NhbCA9IGNvbG9yKFdUX1NUQVRVU19OT0JSQU5DSCwgcyk7CisJfQorCisJYnJhbmNoID0gYnJhbmNoX2dldChzLT5icmFuY2ggKyAxMSk7CisJaWYgKHMtPmlzX2luaXRpYWwpCisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgXygiSW5pdGlhbCBjb21taXQgb24gIikpOworCWlmICghc3RhdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJm51bV9vdXJzLCAmbnVtX3RoZWlycykpIHsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgYnJhbmNoX2NvbG9yX2xvY2FsLCAiJXMiLCBicmFuY2hfbmFtZSk7CisJCWZwdXRjKHMtPm51bGxfdGVybWluYXRpb24gPyAnXDAnIDogJ1xuJywgcy0+ZnApOworCQlyZXR1cm47CisJfQorCisJYmFzZSA9IGJyYW5jaC0+bWVyZ2VbMF0tPmRzdDsKKwliYXNlID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoYmFzZSwgMCk7CisJY29sb3JfZnByaW50ZihzLT5mcCwgYnJhbmNoX2NvbG9yX2xvY2FsLCAiJXMiLCBicmFuY2hfbmFtZSk7CisJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCAiLi4uIik7CisJY29sb3JfZnByaW50ZihzLT5mcCwgYnJhbmNoX2NvbG9yX3JlbW90ZSwgIiVzIiwgYmFzZSk7CisKKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBoZWFkZXJfY29sb3IsICIgWyIpOworCWlmICghbnVtX291cnMpIHsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCBfKCJiZWhpbmQgIikpOworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBicmFuY2hfY29sb3JfcmVtb3RlLCAiJWQiLCBudW1fdGhlaXJzKTsKKwl9IGVsc2UgaWYgKCFudW1fdGhlaXJzKSB7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgXygiYWhlYWQgIikpOworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBicmFuY2hfY29sb3JfbG9jYWwsICIlZCIsIG51bV9vdXJzKTsKKwl9IGVsc2UgeworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBoZWFkZXJfY29sb3IsIF8oImFoZWFkICIpKTsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgYnJhbmNoX2NvbG9yX2xvY2FsLCAiJWQiLCBudW1fb3Vycyk7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgXygiLCBiZWhpbmQgIikpOworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBicmFuY2hfY29sb3JfcmVtb3RlLCAiJWQiLCBudW1fdGhlaXJzKTsKKwl9CisKKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBoZWFkZXJfY29sb3IsICJdIik7CisJZnB1dGMocy0+bnVsbF90ZXJtaW5hdGlvbiA/ICdcMCcgOiAnXG4nLCBzLT5mcCk7Cit9CisKK3ZvaWQgd3Rfc2hvcnRzdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgaTsKKworCWlmIChzLT5zaG93X2JyYW5jaCkKKwkJd3Rfc2hvcnRzdGF0dXNfcHJpbnRfdHJhY2tpbmcocyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+Y2hhbmdlLm5yOyBpKyspIHsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCisJCWl0ID0gJihzLT5jaGFuZ2UuaXRlbXNbaV0pOworCQlkID0gaXQtPnV0aWw7CisJCWlmIChkLT5zdGFnZW1hc2spCisJCQl3dF9zaG9ydHN0YXR1c191bm1lcmdlZChpdCwgcyk7CisJCWVsc2UKKwkJCXd0X3Nob3J0c3RhdHVzX3N0YXR1cyhpdCwgcyk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBzLT51bnRyYWNrZWQubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisKKwkJaXQgPSAmKHMtPnVudHJhY2tlZC5pdGVtc1tpXSk7CisJCXd0X3Nob3J0c3RhdHVzX290aGVyKGl0LCBzLCAiPz8iKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHMtPmlnbm9yZWQubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisKKwkJaXQgPSAmKHMtPmlnbm9yZWQuaXRlbXNbaV0pOworCQl3dF9zaG9ydHN0YXR1c19vdGhlcihpdCwgcywgIiEhIik7CisJfQorfQorCit2b2lkIHd0X3BvcmNlbGFpbl9wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXMtPnVzZV9jb2xvciA9IDA7CisJcy0+cmVsYXRpdmVfcGF0aHMgPSAwOworCXMtPnByZWZpeCA9IE5VTEw7CisJd3Rfc2hvcnRzdGF0dXNfcHJpbnQocyk7Cit9CmRpZmYgLS1naXQgYS93dC1zdGF0dXMuaCBiL3d0LXN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNmI0MWYKLS0tIC9kZXYvbnVsbAorKysgYi93dC1zdGF0dXMuaApAQCAtMCwwICsxLDk2IEBACisjaWZuZGVmIFNUQVRVU19ICisjZGVmaW5lIFNUQVRVU19ICisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKworZW51bSBjb2xvcl93dF9zdGF0dXMgeworCVdUX1NUQVRVU19IRUFERVIgPSAwLAorCVdUX1NUQVRVU19VUERBVEVELAorCVdUX1NUQVRVU19DSEFOR0VELAorCVdUX1NUQVRVU19VTlRSQUNLRUQsCisJV1RfU1RBVFVTX05PQlJBTkNILAorCVdUX1NUQVRVU19VTk1FUkdFRCwKKwlXVF9TVEFUVVNfTE9DQUxfQlJBTkNILAorCVdUX1NUQVRVU19SRU1PVEVfQlJBTkNILAorCVdUX1NUQVRVU19PTkJSQU5DSCwKKwlXVF9TVEFUVVNfTUFYU0xPVAorfTsKKworZW51bSB1bnRyYWNrZWRfc3RhdHVzX3R5cGUgeworCVNIT1dfTk9fVU5UUkFDS0VEX0ZJTEVTLAorCVNIT1dfTk9STUFMX1VOVFJBQ0tFRF9GSUxFUywKKwlTSE9XX0FMTF9VTlRSQUNLRURfRklMRVMKK307CisKKy8qIGZyb20gd2hlcmUgZG9lcyB0aGlzIGNvbW1pdCBvcmlnaW5hdGUgKi8KK2VudW0gY29tbWl0X3doZW5jZSB7CisJRlJPTV9DT01NSVQsICAgICAvKiBub3JtYWwgKi8KKwlGUk9NX01FUkdFLCAgICAgIC8qIGNvbW1pdCBjYW1lIGZyb20gbWVyZ2UgKi8KKwlGUk9NX0NIRVJSWV9QSUNLIC8qIGNvbW1pdCBjYW1lIGZyb20gY2hlcnJ5LXBpY2sgKi8KK307CisKK3N0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgeworCWludCB3b3JrdHJlZV9zdGF0dXM7CisJaW50IGluZGV4X3N0YXR1czsKKwlpbnQgc3RhZ2VtYXNrOworCWNoYXIgKmhlYWRfcGF0aDsKKwl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgICAgICAgOiAyOworCXVuc2lnbmVkIG5ld19zdWJtb2R1bGVfY29tbWl0cyA6IDE7Cit9OworCitzdHJ1Y3Qgd3Rfc3RhdHVzIHsKKwlpbnQgaXNfaW5pdGlhbDsKKwljaGFyICpicmFuY2g7CisJY29uc3QgY2hhciAqcmVmZXJlbmNlOworCWNvbnN0IGNoYXIgKipwYXRoc3BlYzsKKwlpbnQgdmVyYm9zZTsKKwlpbnQgYW1lbmQ7CisJZW51bSBjb21taXRfd2hlbmNlIHdoZW5jZTsKKwlpbnQgbm93YXJuOworCWludCB1c2VfY29sb3I7CisJaW50IHJlbGF0aXZlX3BhdGhzOworCWludCBzdWJtb2R1bGVfc3VtbWFyeTsKKwlpbnQgc2hvd19pZ25vcmVkX2ZpbGVzOworCWVudW0gdW50cmFja2VkX3N0YXR1c190eXBlIHNob3dfdW50cmFja2VkX2ZpbGVzOworCWNvbnN0IGNoYXIgKmlnbm9yZV9zdWJtb2R1bGVfYXJnOworCWNoYXIgY29sb3JfcGFsZXR0ZVtXVF9TVEFUVVNfTUFYU0xPVF1bQ09MT1JfTUFYTEVOXTsKKwl1bnNpZ25lZCBjb2xvcHRzOworCWludCBudWxsX3Rlcm1pbmF0aW9uOworCWludCBzaG93X2JyYW5jaDsKKworCS8qIFRoZXNlIGFyZSBjb21wdXRlZCBkdXJpbmcgcHJvY2Vzc2luZyBvZiB0aGUgaW5kaXZpZHVhbCBzZWN0aW9ucyAqLworCWludCBjb21taXRhYmxlOworCWludCB3b3JrZGlyX2RpcnR5OworCWNvbnN0IGNoYXIgKmluZGV4X2ZpbGU7CisJRklMRSAqZnA7CisJY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCBzdHJpbmdfbGlzdCBjaGFuZ2U7CisJc3RydWN0IHN0cmluZ19saXN0IHVudHJhY2tlZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaWdub3JlZDsKK307CisKK3N0cnVjdCB3dF9zdGF0dXNfc3RhdGUgeworCWludCBtZXJnZV9pbl9wcm9ncmVzczsKKwlpbnQgYW1faW5fcHJvZ3Jlc3M7CisJaW50IGFtX2VtcHR5X3BhdGNoOworCWludCByZWJhc2VfaW5fcHJvZ3Jlc3M7CisJaW50IHJlYmFzZV9pbnRlcmFjdGl2ZV9pbl9wcm9ncmVzczsKKwlpbnQgY2hlcnJ5X3BpY2tfaW5fcHJvZ3Jlc3M7CisJaW50IGJpc2VjdF9pbl9wcm9ncmVzczsKK307CisKK3ZvaWQgd3Rfc3RhdHVzX3ByZXBhcmUoc3RydWN0IHd0X3N0YXR1cyAqcyk7Cit2b2lkIHd0X3N0YXR1c19wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKTsKK3ZvaWQgd3Rfc3RhdHVzX2NvbGxlY3Qoc3RydWN0IHd0X3N0YXR1cyAqcyk7CisKK3ZvaWQgd3Rfc2hvcnRzdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcyk7Cit2b2lkIHd0X3BvcmNlbGFpbl9wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKTsKKwordm9pZCBzdGF0dXNfcHJpbnRmX2xuKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwk7Cit2b2lkIHN0YXR1c19wcmludGYoc3RydWN0IHd0X3N0YXR1cyAqcywgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCTsKKworI2VuZGlmIC8qIFNUQVRVU19IICovCmRpZmYgLS1naXQgYS94ZGlmZi1pbnRlcmZhY2UuYyBiL3hkaWZmLWludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZmEwNWYKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi1pbnRlcmZhY2UuYwpAQCAtMCwwICsxLDMxOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAieGRpZmYveHR5cGVzLmgiCisjaW5jbHVkZSAieGRpZmYveGRpZmZpLmgiCisjaW5jbHVkZSAieGRpZmYveGVtaXQuaCIKKyNpbmNsdWRlICJ4ZGlmZi94bWFjcm9zLmgiCisKK3N0cnVjdCB4ZGlmZl9lbWl0X3N0YXRlIHsKKwl4ZGlmZl9lbWl0X2NvbnN1bWVfZm4gY29uc3VtZTsKKwl2b2lkICpjb25zdW1lX2NhbGxiYWNrX2RhdGE7CisJc3RydWN0IHN0cmJ1ZiByZW1haW5kZXI7Cit9OworCitzdGF0aWMgaW50IHBhcnNlX251bShjaGFyICoqY3BfcCwgaW50ICpudW1fcCkKK3sKKwljaGFyICpjcCA9ICpjcF9wOworCWludCBudW0gPSAwOworCisJd2hpbGUgKCcwJyA8PSAqY3AgJiYgKmNwIDw9ICc5JykKKwkJbnVtID0gbnVtICogMTAgKyAqY3ArKyAtICcwJzsKKwlpZiAoIShjcCAtICpjcF9wKSkKKwkJcmV0dXJuIC0xOworCSpjcF9wID0gY3A7CisJKm51bV9wID0gbnVtOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2VfaHVua19oZWFkZXIoY2hhciAqbGluZSwgaW50IGxlbiwKKwkJICAgICAgaW50ICpvYiwgaW50ICpvbiwKKwkJICAgICAgaW50ICpuYiwgaW50ICpubikKK3sKKwljaGFyICpjcDsKKwljcCA9IGxpbmUgKyA0OworCWlmIChwYXJzZV9udW0oJmNwLCBvYikpIHsKKwliYWRfbGluZToKKwkJcmV0dXJuIGVycm9yKCJtYWxmb3JtZWQgZGlmZiBvdXRwdXQ6ICVzIiwgbGluZSk7CisJfQorCWlmICgqY3AgPT0gJywnKSB7CisJCWNwKys7CisJCWlmIChwYXJzZV9udW0oJmNwLCBvbikpCisJCQlnb3RvIGJhZF9saW5lOworCX0KKwllbHNlCisJCSpvbiA9IDE7CisJaWYgKCpjcCsrICE9ICcgJyB8fCAqY3ArKyAhPSAnKycpCisJCWdvdG8gYmFkX2xpbmU7CisJaWYgKHBhcnNlX251bSgmY3AsIG5iKSkKKwkJZ290byBiYWRfbGluZTsKKwlpZiAoKmNwID09ICcsJykgeworCQljcCsrOworCQlpZiAocGFyc2VfbnVtKCZjcCwgbm4pKQorCQkJZ290byBiYWRfbGluZTsKKwl9CisJZWxzZQorCQkqbm4gPSAxOworCXJldHVybiAtISFtZW1jbXAoY3AsICIgQEAiLCAzKTsKK30KKworc3RhdGljIHZvaWQgY29uc3VtZV9vbmUodm9pZCAqcHJpdl8sIGNoYXIgKnMsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgeGRpZmZfZW1pdF9zdGF0ZSAqcHJpdiA9IHByaXZfOworCWNoYXIgKmVwOworCXdoaWxlIChzaXplKSB7CisJCXVuc2lnbmVkIGxvbmcgdGhpc19zaXplOworCQllcCA9IG1lbWNocihzLCAnXG4nLCBzaXplKTsKKwkJdGhpc19zaXplID0gKGVwID09IE5VTEwpID8gc2l6ZSA6IChlcCAtIHMgKyAxKTsKKwkJcHJpdi0+Y29uc3VtZShwcml2LT5jb25zdW1lX2NhbGxiYWNrX2RhdGEsIHMsIHRoaXNfc2l6ZSk7CisJCXNpemUgLT0gdGhpc19zaXplOworCQlzICs9IHRoaXNfc2l6ZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgeGRpZmZfb3V0Zih2b2lkICpwcml2XywgbW1idWZmZXJfdCAqbWIsIGludCBuYnVmKQoreworCXN0cnVjdCB4ZGlmZl9lbWl0X3N0YXRlICpwcml2ID0gcHJpdl87CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrKSB7CisJCWlmIChtYltpXS5wdHJbbWJbaV0uc2l6ZS0xXSAhPSAnXG4nKSB7CisJCQkvKiBJbmNvbXBsZXRlIGxpbmUgKi8KKwkJCXN0cmJ1Zl9hZGQoJnByaXYtPnJlbWFpbmRlciwgbWJbaV0ucHRyLCBtYltpXS5zaXplKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogd2UgaGF2ZSBhIGNvbXBsZXRlIGxpbmUgKi8KKwkJaWYgKCFwcml2LT5yZW1haW5kZXIubGVuKSB7CisJCQljb25zdW1lX29uZShwcml2LCBtYltpXS5wdHIsIG1iW2ldLnNpemUpOworCQkJY29udGludWU7CisJCX0KKwkJc3RyYnVmX2FkZCgmcHJpdi0+cmVtYWluZGVyLCBtYltpXS5wdHIsIG1iW2ldLnNpemUpOworCQljb25zdW1lX29uZShwcml2LCBwcml2LT5yZW1haW5kZXIuYnVmLCBwcml2LT5yZW1haW5kZXIubGVuKTsKKwkJc3RyYnVmX3Jlc2V0KCZwcml2LT5yZW1haW5kZXIpOworCX0KKwlpZiAocHJpdi0+cmVtYWluZGVyLmxlbikgeworCQljb25zdW1lX29uZShwcml2LCBwcml2LT5yZW1haW5kZXIuYnVmLCBwcml2LT5yZW1haW5kZXIubGVuKTsKKwkJc3RyYnVmX3Jlc2V0KCZwcml2LT5yZW1haW5kZXIpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRyaW0gZG93biBjb21tb24gc3Vic3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcnMsCisgKiBidXQgbGVhdmUgYXQgbGVhc3QgY3R4IGxpbmVzIGF0IHRoZSBlbmQuCisgKi8KK3N0YXRpYyB2b2lkIHRyaW1fY29tbW9uX3RhaWwobW1maWxlX3QgKmEsIG1tZmlsZV90ICpiLCBsb25nIGN0eCkKK3sKKwljb25zdCBpbnQgYmxrID0gMTAyNDsKKwlsb25nIHRyaW1tZWQgPSAwLCByZWNvdmVyZWQgPSAwOworCWNoYXIgKmFwID0gYS0+cHRyICsgYS0+c2l6ZTsKKwljaGFyICpicCA9IGItPnB0ciArIGItPnNpemU7CisJbG9uZyBzbWFsbGVyID0gKGEtPnNpemUgPCBiLT5zaXplKSA/IGEtPnNpemUgOiBiLT5zaXplOworCisJaWYgKGN0eCkKKwkJcmV0dXJuOworCisJd2hpbGUgKGJsayArIHRyaW1tZWQgPD0gc21hbGxlciAmJiAhbWVtY21wKGFwIC0gYmxrLCBicCAtIGJsaywgYmxrKSkgeworCQl0cmltbWVkICs9IGJsazsKKwkJYXAgLT0gYmxrOworCQlicCAtPSBibGs7CisJfQorCisJd2hpbGUgKHJlY292ZXJlZCA8IHRyaW1tZWQpCisJCWlmIChhcFtyZWNvdmVyZWQrK10gPT0gJ1xuJykKKwkJCWJyZWFrOworCWEtPnNpemUgLT0gdHJpbW1lZCAtIHJlY292ZXJlZDsKKwliLT5zaXplIC09IHRyaW1tZWQgLSByZWNvdmVyZWQ7Cit9CisKK2ludCB4ZGlfZGlmZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZywgeGRlbWl0Y2JfdCAqeGVjYikKK3sKKwltbWZpbGVfdCBhID0gKm1mMTsKKwltbWZpbGVfdCBiID0gKm1mMjsKKworCXRyaW1fY29tbW9uX3RhaWwoJmEsICZiLCB4ZWNmZy0+Y3R4bGVuKTsKKworCXJldHVybiB4ZGxfZGlmZigmYSwgJmIsIHhwcCwgeGVjZmcsIHhlY2IpOworfQorCitpbnQgeGRpX2RpZmZfb3V0ZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLAorCQkgIHhkaWZmX2VtaXRfY29uc3VtZV9mbiBmbiwgdm9pZCAqY29uc3VtZV9jYWxsYmFja19kYXRhLAorCQkgIHhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKQoreworCWludCByZXQ7CisJc3RydWN0IHhkaWZmX2VtaXRfc3RhdGUgc3RhdGU7CisJeGRlbWl0Y2JfdCBlY2I7CisKKwltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKKwlzdGF0ZS5jb25zdW1lID0gZm47CisJc3RhdGUuY29uc3VtZV9jYWxsYmFja19kYXRhID0gY29uc3VtZV9jYWxsYmFja19kYXRhOworCW1lbXNldCgmZWNiLCAwLCBzaXplb2YoZWNiKSk7CisJZWNiLm91dGYgPSB4ZGlmZl9vdXRmOworCWVjYi5wcml2ID0gJnN0YXRlOworCXN0cmJ1Zl9pbml0KCZzdGF0ZS5yZW1haW5kZXIsIDApOworCXJldCA9IHhkaV9kaWZmKG1mMSwgbWYyLCB4cHAsIHhlY2ZnLCAmZWNiKTsKKwlzdHJidWZfcmVsZWFzZSgmc3RhdGUucmVtYWluZGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmVhZF9tbWZpbGUobW1maWxlX3QgKnB0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJRklMRSAqZjsKKwlzaXplX3Qgc3o7CisKKwlpZiAoc3RhdChmaWxlbmFtZSwgJnN0KSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgc3RhdCAlcyIsIGZpbGVuYW1lKTsKKwlpZiAoKGYgPSBmb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IG9wZW4gJXMiLCBmaWxlbmFtZSk7CisJc3ogPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCXB0ci0+cHRyID0geG1hbGxvYyhzeiA/IHN6IDogMSk7CisJaWYgKHN6ICYmIGZyZWFkKHB0ci0+cHRyLCBzeiwgMSwgZikgIT0gMSkgeworCQlmY2xvc2UoZik7CisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHJlYWQgJXMiLCBmaWxlbmFtZSk7CisJfQorCWZjbG9zZShmKTsKKwlwdHItPnNpemUgPSBzejsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZWFkX21tYmxvYihtbWZpbGVfdCAqcHRyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlpZiAoIWhhc2hjbXAoc2hhMSwgbnVsbF9zaGExKSkgeworCQlwdHItPnB0ciA9IHhzdHJkdXAoIiIpOworCQlwdHItPnNpemUgPSAwOworCQlyZXR1cm47CisJfQorCisJcHRyLT5wdHIgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghcHRyLT5wdHIgfHwgdHlwZSAhPSBPQkpfQkxPQikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBibG9iIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlwdHItPnNpemUgPSBzaXplOworfQorCisjZGVmaW5lIEZJUlNUX0ZFV19CWVRFUyA4MDAwCitpbnQgYnVmZmVyX2lzX2JpbmFyeShjb25zdCBjaGFyICpwdHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoRklSU1RfRkVXX0JZVEVTIDwgc2l6ZSkKKwkJc2l6ZSA9IEZJUlNUX0ZFV19CWVRFUzsKKwlyZXR1cm4gISFtZW1jaHIocHRyLCAwLCBzaXplKTsKK30KKworc3RydWN0IGZmX3JlZ3MgeworCWludCBucjsKKwlzdHJ1Y3QgZmZfcmVnIHsKKwkJcmVnZXhfdCByZTsKKwkJaW50IG5lZ2F0ZTsKKwl9ICphcnJheTsKK307CisKK3N0YXRpYyBsb25nIGZmX3JlZ2V4cChjb25zdCBjaGFyICpsaW5lLCBsb25nIGxlbiwKKwkJY2hhciAqYnVmZmVyLCBsb25nIGJ1ZmZlcl9zaXplLCB2b2lkICpwcml2KQoreworCWNoYXIgKmxpbmVfYnVmZmVyOworCXN0cnVjdCBmZl9yZWdzICpyZWdzID0gcHJpdjsKKwlyZWdtYXRjaF90IHBtYXRjaFsyXTsKKwlpbnQgaTsKKwlpbnQgcmVzdWx0ID0gLTE7CisKKwkvKiBFeGNsdWRlIHRlcm1pbmF0aW5nIG5ld2xpbmUgKGFuZCBjcikgZnJvbSBtYXRjaGluZyAqLworCWlmIChsZW4gPiAwICYmIGxpbmVbbGVuLTFdID09ICdcbicpIHsKKwkJaWYgKGxlbiA+IDEgJiYgbGluZVtsZW4tMl0gPT0gJ1xyJykKKwkJCWxlbiAtPSAyOworCQllbHNlCisJCQlsZW4tLTsKKwl9CisKKwlsaW5lX2J1ZmZlciA9IHhzdHJuZHVwKGxpbmUsIGxlbik7IC8qIG1ha2UgTlVMIHRlcm1pbmF0ZWQgKi8KKworCWZvciAoaSA9IDA7IGkgPCByZWdzLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBmZl9yZWcgKnJlZyA9IHJlZ3MtPmFycmF5ICsgaTsKKwkJaWYgKCFyZWdleGVjKCZyZWctPnJlLCBsaW5lX2J1ZmZlciwgMiwgcG1hdGNoLCAwKSkgeworCQkJaWYgKHJlZy0+bmVnYXRlKQorCQkJCWdvdG8gZmFpbDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChyZWdzLT5uciA8PSBpKQorCQlnb3RvIGZhaWw7CisJaSA9IHBtYXRjaFsxXS5ybV9zbyA+PSAwID8gMSA6IDA7CisJbGluZSArPSBwbWF0Y2hbaV0ucm1fc287CisJcmVzdWx0ID0gcG1hdGNoW2ldLnJtX2VvIC0gcG1hdGNoW2ldLnJtX3NvOworCWlmIChyZXN1bHQgPiBidWZmZXJfc2l6ZSkKKwkJcmVzdWx0ID0gYnVmZmVyX3NpemU7CisJd2hpbGUgKHJlc3VsdCA+IDAgJiYgKGlzc3BhY2UobGluZVtyZXN1bHQgLSAxXSkpKQorCQlyZXN1bHQtLTsKKwltZW1jcHkoYnVmZmVyLCBsaW5lLCByZXN1bHQpOworIGZhaWw6CisJZnJlZShsaW5lX2J1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB4ZGlmZl9zZXRfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgY2ZsYWdzKQoreworCWludCBpOworCXN0cnVjdCBmZl9yZWdzICpyZWdzOworCisJeGVjZmctPmZpbmRfZnVuYyA9IGZmX3JlZ2V4cDsKKwlyZWdzID0geGVjZmctPmZpbmRfZnVuY19wcml2ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGZmX3JlZ3MpKTsKKwlmb3IgKGkgPSAwLCByZWdzLT5uciA9IDE7IHZhbHVlW2ldOyBpKyspCisJCWlmICh2YWx1ZVtpXSA9PSAnXG4nKQorCQkJcmVncy0+bnIrKzsKKwlyZWdzLT5hcnJheSA9IHhtYWxsb2MocmVncy0+bnIgKiBzaXplb2Yoc3RydWN0IGZmX3JlZykpOworCWZvciAoaSA9IDA7IGkgPCByZWdzLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBmZl9yZWcgKnJlZyA9IHJlZ3MtPmFycmF5ICsgaTsKKwkJY29uc3QgY2hhciAqZXAgPSBzdHJjaHIodmFsdWUsICdcbicpLCAqZXhwcmVzc2lvbjsKKwkJY2hhciAqYnVmZmVyID0gTlVMTDsKKworCQlyZWctPm5lZ2F0ZSA9ICgqdmFsdWUgPT0gJyEnKTsKKwkJaWYgKHJlZy0+bmVnYXRlICYmIGkgPT0gcmVncy0+bnIgLSAxKQorCQkJZGllKCJMYXN0IGV4cHJlc3Npb24gbXVzdCBub3QgYmUgbmVnYXRlZDogJXMiLCB2YWx1ZSk7CisJCWlmICgqdmFsdWUgPT0gJyEnKQorCQkJdmFsdWUrKzsKKwkJaWYgKGVwKQorCQkJZXhwcmVzc2lvbiA9IGJ1ZmZlciA9IHhzdHJuZHVwKHZhbHVlLCBlcCAtIHZhbHVlKTsKKwkJZWxzZQorCQkJZXhwcmVzc2lvbiA9IHZhbHVlOworCQlpZiAocmVnY29tcCgmcmVnLT5yZSwgZXhwcmVzc2lvbiwgY2ZsYWdzKSkKKwkJCWRpZSgiSW52YWxpZCByZWdleHAgdG8gbG9vayBmb3IgaHVuayBoZWFkZXI6ICVzIiwgZXhwcmVzc2lvbik7CisJCWZyZWUoYnVmZmVyKTsKKwkJdmFsdWUgPSBlcCArIDE7CisJfQorfQorCit2b2lkIHhkaWZmX2NsZWFyX2ZpbmRfZnVuYyh4ZGVtaXRjb25mX3QgKnhlY2ZnKQoreworCWlmICh4ZWNmZy0+ZmluZF9mdW5jKSB7CisJCWludCBpOworCQlzdHJ1Y3QgZmZfcmVncyAqcmVncyA9IHhlY2ZnLT5maW5kX2Z1bmNfcHJpdjsKKworCQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+bnI7IGkrKykKKwkJCXJlZ2ZyZWUoJnJlZ3MtPmFycmF5W2ldLnJlKTsKKwkJZnJlZShyZWdzLT5hcnJheSk7CisJCWZyZWUocmVncyk7CisJCXhlY2ZnLT5maW5kX2Z1bmMgPSBOVUxMOworCQl4ZWNmZy0+ZmluZF9mdW5jX3ByaXYgPSBOVUxMOworCX0KK30KKworaW50IGdpdF94bWVyZ2Vfc3R5bGUgPSAtMTsKKworaW50IGdpdF94bWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgIm1lcmdlLmNvbmZsaWN0c3R5bGUiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJZGllKCInJXMnIGlzIG5vdCBhIGJvb2xlYW4iLCB2YXIpOworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgImRpZmYzIikpCisJCQlnaXRfeG1lcmdlX3N0eWxlID0gWERMX01FUkdFX0RJRkYzOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibWVyZ2UiKSkKKwkJCWdpdF94bWVyZ2Vfc3R5bGUgPSAwOworCQllbHNlCisJCQlkaWUoInVua25vd24gc3R5bGUgJyVzJyBnaXZlbiBmb3IgJyVzJyIsCisJCQkgICAgdmFsdWUsIHZhcik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KZGlmZiAtLWdpdCBhL3hkaWZmLWludGVyZmFjZS5oIGIveGRpZmYtaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmNzc2MgotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmLWludGVyZmFjZS5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgWERJRkZfSU5URVJGQUNFX0gKKyNkZWZpbmUgWERJRkZfSU5URVJGQUNFX0gKKworI2luY2x1ZGUgInhkaWZmL3hkaWZmLmgiCisKK3R5cGVkZWYgdm9pZCAoKnhkaWZmX2VtaXRfY29uc3VtZV9mbikodm9pZCAqLCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOworCitpbnQgeGRpX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcsIHhkZW1pdGNiX3QgKmVjYik7CitpbnQgeGRpX2RpZmZfb3V0ZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLAorCQkgIHhkaWZmX2VtaXRfY29uc3VtZV9mbiBmbiwgdm9pZCAqY29uc3VtZV9jYWxsYmFja19kYXRhLAorCQkgIHhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKTsKK2ludCBwYXJzZV9odW5rX2hlYWRlcihjaGFyICpsaW5lLCBpbnQgbGVuLAorCQkgICAgICBpbnQgKm9iLCBpbnQgKm9uLAorCQkgICAgICBpbnQgKm5iLCBpbnQgKm5uKTsKK2ludCByZWFkX21tZmlsZShtbWZpbGVfdCAqcHRyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7Cit2b2lkIHJlYWRfbW1ibG9iKG1tZmlsZV90ICpwdHIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworaW50IGJ1ZmZlcl9pc19iaW5hcnkoY29uc3QgY2hhciAqcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitleHRlcm4gdm9pZCB4ZGlmZl9zZXRfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBjZmxhZ3MpOworZXh0ZXJuIHZvaWQgeGRpZmZfY2xlYXJfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcpOworZXh0ZXJuIGludCBnaXRfeG1lcmdlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CitleHRlcm4gaW50IGdpdF94bWVyZ2Vfc3R5bGU7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveGRpZmYveGRpZmYuaCBiL3hkaWZmL3hkaWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5YTNiYgotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hkaWZmLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWERJRkZfSCkKKyNkZWZpbmUgWERJRkZfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qICNpZmRlZiBfX2NwbHVzcGx1cyAqLworCisKKyNkZWZpbmUgWERGX05FRURfTUlOSU1BTCAoMSA8PCAxKQorI2RlZmluZSBYREZfSUdOT1JFX1dISVRFU1BBQ0UgKDEgPDwgMikKKyNkZWZpbmUgWERGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRSAoMSA8PCAzKQorI2RlZmluZSBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MICgxIDw8IDQpCisjZGVmaW5lIFhERl9XSElURVNQQUNFX0ZMQUdTIChYREZfSUdOT1JFX1dISVRFU1BBQ0UgfCBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFIHwgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTCkKKworI2RlZmluZSBYREZfUEFUSUVOQ0VfRElGRiAoMSA8PCA1KQorI2RlZmluZSBYREZfSElTVE9HUkFNX0RJRkYgKDEgPDwgNikKKyNkZWZpbmUgWERGX0RJRkZfQUxHT1JJVEhNX01BU0sgKFhERl9QQVRJRU5DRV9ESUZGIHwgWERGX0hJU1RPR1JBTV9ESUZGKQorI2RlZmluZSBYREZfRElGRl9BTEcoeCkgKCh4KSAmIFhERl9ESUZGX0FMR09SSVRITV9NQVNLKQorCisjZGVmaW5lIFhETF9FTUlUX0ZVTkNOQU1FUyAoMSA8PCAwKQorI2RlZmluZSBYRExfRU1JVF9DT01NT04gKDEgPDwgMSkKKyNkZWZpbmUgWERMX0VNSVRfRlVOQ0NPTlRFWFQgKDEgPDwgMikKKworI2RlZmluZSBYRExfTU1CX1JFQURPTkxZICgxIDw8IDApCisKKyNkZWZpbmUgWERMX01NRl9BVE9NSUMgKDEgPDwgMCkKKworI2RlZmluZSBYRExfQkRPUF9JTlMgMQorI2RlZmluZSBYRExfQkRPUF9DUFkgMgorI2RlZmluZSBYRExfQkRPUF9JTlNCIDMKKworLyogbWVyZ2Ugc2ltcGxpZmljYXRpb24gbGV2ZWxzICovCisjZGVmaW5lIFhETF9NRVJHRV9NSU5JTUFMIDAKKyNkZWZpbmUgWERMX01FUkdFX0VBR0VSIDEKKyNkZWZpbmUgWERMX01FUkdFX1pFQUxPVVMgMgorI2RlZmluZSBYRExfTUVSR0VfWkVBTE9VU19BTE5VTSAzCisKKy8qIG1lcmdlIGZhdm9yIG1vZGVzICovCisjZGVmaW5lIFhETF9NRVJHRV9GQVZPUl9PVVJTIDEKKyNkZWZpbmUgWERMX01FUkdFX0ZBVk9SX1RIRUlSUyAyCisjZGVmaW5lIFhETF9NRVJHRV9GQVZPUl9VTklPTiAzCisKKy8qIG1lcmdlIG91dHB1dCBzdHlsZXMgKi8KKyNkZWZpbmUgWERMX01FUkdFX0RJRkYzIDEKKwordHlwZWRlZiBzdHJ1Y3Qgc19tbWZpbGUgeworCWNoYXIgKnB0cjsKKwlsb25nIHNpemU7Cit9IG1tZmlsZV90OworCit0eXBlZGVmIHN0cnVjdCBzX21tYnVmZmVyIHsKKwljaGFyICpwdHI7CisJbG9uZyBzaXplOworfSBtbWJ1ZmZlcl90OworCit0eXBlZGVmIHN0cnVjdCBzX3hwcGFyYW0geworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9IHhwcGFyYW1fdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZGVtaXRjYiB7CisJdm9pZCAqcHJpdjsKKwlpbnQgKCpvdXRmKSh2b2lkICosIG1tYnVmZmVyX3QgKiwgaW50KTsKK30geGRlbWl0Y2JfdDsKKwordHlwZWRlZiBsb25nICgqZmluZF9mdW5jX3QpKGNvbnN0IGNoYXIgKmxpbmUsIGxvbmcgbGluZV9sZW4sIGNoYXIgKmJ1ZmZlciwgbG9uZyBidWZmZXJfc2l6ZSwgdm9pZCAqcHJpdik7CisKK3R5cGVkZWYgaW50ICgqeGRsX2VtaXRfaHVua19jb25zdW1lX2Z1bmNfdCkobG9uZyBzdGFydF9hLCBsb25nIGNvdW50X2EsCisJCQkJCSAgICBsb25nIHN0YXJ0X2IsIGxvbmcgY291bnRfYiwKKwkJCQkJICAgIHZvaWQgKmNiX2RhdGEpOworCit0eXBlZGVmIHN0cnVjdCBzX3hkZW1pdGNvbmYgeworCWxvbmcgY3R4bGVuOworCWxvbmcgaW50ZXJodW5rY3R4bGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZmluZF9mdW5jX3QgZmluZF9mdW5jOworCXZvaWQgKmZpbmRfZnVuY19wcml2OworCXhkbF9lbWl0X2h1bmtfY29uc3VtZV9mdW5jX3QgaHVua19mdW5jOworfSB4ZGVtaXRjb25mX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfYmRpZmZwYXJhbSB7CisJbG9uZyBic2l6ZTsKK30gYmRpZmZwYXJhbV90OworCisKKyNkZWZpbmUgeGRsX21hbGxvYyh4KSBtYWxsb2MoeCkKKyNkZWZpbmUgeGRsX2ZyZWUocHRyKSBmcmVlKHB0cikKKyNkZWZpbmUgeGRsX3JlYWxsb2MocHRyLHgpIHJlYWxsb2MocHRyLHgpCisKK3ZvaWQgKnhkbF9tbWZpbGVfZmlyc3QobW1maWxlX3QgKm1tZiwgbG9uZyAqc2l6ZSk7Citsb25nIHhkbF9tbWZpbGVfc2l6ZShtbWZpbGVfdCAqbW1mKTsKKworaW50IHhkbF9kaWZmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCSAgICAgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZywgeGRlbWl0Y2JfdCAqZWNiKTsKKwordHlwZWRlZiBzdHJ1Y3Qgc194bXBhcmFtIHsKKwl4cHBhcmFtX3QgeHBwOworCWludCBtYXJrZXJfc2l6ZTsKKwlpbnQgbGV2ZWw7CisJaW50IGZhdm9yOworCWludCBzdHlsZTsKKwljb25zdCBjaGFyICphbmNlc3RvcjsJLyogbGFiZWwgZm9yIG9yaWcgKi8KKwljb25zdCBjaGFyICpmaWxlMTsJLyogbGFiZWwgZm9yIG1mMSAqLworCWNvbnN0IGNoYXIgKmZpbGUyOwkvKiBsYWJlbCBmb3IgbWYyICovCit9IHhtcGFyYW1fdDsKKworI2RlZmluZSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFIDcKKworaW50IHhkbF9tZXJnZShtbWZpbGVfdCAqb3JpZywgbW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwKKwkJeG1wYXJhbV90IGNvbnN0ICp4bXAsIG1tYnVmZmVyX3QgKnJlc3VsdCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qICNpZmRlZiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhESUZGX0gpICovCmRpZmYgLS1naXQgYS94ZGlmZi94ZGlmZmkuYyBiL3hkaWZmL3hkaWZmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzAxMmEKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94ZGlmZmkuYwpAQCAtMCwwICsxLDU4NSBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMwlEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisKKworCisjZGVmaW5lIFhETF9NQVhfQ09TVF9NSU4gMjU2CisjZGVmaW5lIFhETF9IRVVSX01JTl9DT1NUIDI1NgorI2RlZmluZSBYRExfTElORV9NQVggKGxvbmcpKCgxVUwgPDwgKENIQVJfQklUICogc2l6ZW9mKGxvbmcpIC0gMSkpIC0gMSkKKyNkZWZpbmUgWERMX1NOQUtFX0NOVCAyMAorI2RlZmluZSBYRExfS19IRVVSIDQKKworCisKK3R5cGVkZWYgc3RydWN0IHNfeGRwc3BsaXQgeworCWxvbmcgaTEsIGkyOworCWludCBtaW5fbG8sIG1pbl9oaTsKK30geGRwc3BsaXRfdDsKKworCisKKworc3RhdGljIGxvbmcgeGRsX3NwbGl0KHVuc2lnbmVkIGxvbmcgY29uc3QgKmhhMSwgbG9uZyBvZmYxLCBsb25nIGxpbTEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgY29uc3QgKmhhMiwgbG9uZyBvZmYyLCBsb25nIGxpbTIsCisJCSAgICAgIGxvbmcgKmt2ZGYsIGxvbmcgKmt2ZGIsIGludCBuZWVkX21pbiwgeGRwc3BsaXRfdCAqc3BsLAorCQkgICAgICB4ZGFsZ29lbnZfdCAqeGVudik7CitzdGF0aWMgeGRjaGFuZ2VfdCAqeGRsX2FkZF9jaGFuZ2UoeGRjaGFuZ2VfdCAqeHNjciwgbG9uZyBpMSwgbG9uZyBpMiwgbG9uZyBjaGcxLCBsb25nIGNoZzIpOworCisKKworCisKKy8qCisgKiBTZWUgIkFuIE8oTkQpIERpZmZlcmVuY2UgQWxnb3JpdGhtIGFuZCBpdHMgVmFyaWF0aW9ucyIsIGJ5IEV1Z2VuZSBNeWVycy4KKyAqIEJhc2ljYWxseSBjb25zaWRlcnMgYSAiYm94IiAob2ZmMSwgb2ZmMiwgbGltMSwgbGltMikgYW5kIHNjYW4gZnJvbSBib3RoCisgKiB0aGUgZm9yd2FyZCBkaWFnb25hbCBzdGFydGluZyBmcm9tIChvZmYxLCBvZmYyKSBhbmQgdGhlIGJhY2t3YXJkIGRpYWdvbmFsCisgKiBzdGFydGluZyBmcm9tIChsaW0xLCBsaW0yKS4gSWYgdGhlIEsgdmFsdWVzIG9uIHRoZSBzYW1lIGRpYWdvbmFsIGNyb3NzZXMKKyAqIHJldHVybnMgdGhlIGZ1cnRoZXN0IHBvaW50IG9mIHJlYWNoLiBXZSBtaWdodCBlbmQgdXAgaGF2aW5nIHRvIGV4cGVuc2l2ZQorICogY2FzZXMgdXNpbmcgdGhpcyBhbGdvcml0aG0gaXMgZnVsbCwgc28gYSBsaXR0bGUgYml0IG9mIGhldXJpc3RpYyBpcyBuZWVkZWQKKyAqIHRvIGN1dCB0aGUgc2VhcmNoIGFuZCB0byByZXR1cm4gYSBzdWJvcHRpbWFsIHBvaW50LgorICovCitzdGF0aWMgbG9uZyB4ZGxfc3BsaXQodW5zaWduZWQgbG9uZyBjb25zdCAqaGExLCBsb25nIG9mZjEsIGxvbmcgbGltMSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBjb25zdCAqaGEyLCBsb25nIG9mZjIsIGxvbmcgbGltMiwKKwkJICAgICAgbG9uZyAqa3ZkZiwgbG9uZyAqa3ZkYiwgaW50IG5lZWRfbWluLCB4ZHBzcGxpdF90ICpzcGwsCisJCSAgICAgIHhkYWxnb2Vudl90ICp4ZW52KSB7CisJbG9uZyBkbWluID0gb2ZmMSAtIGxpbTIsIGRtYXggPSBsaW0xIC0gb2ZmMjsKKwlsb25nIGZtaWQgPSBvZmYxIC0gb2ZmMiwgYm1pZCA9IGxpbTEgLSBsaW0yOworCWxvbmcgb2RkID0gKGZtaWQgLSBibWlkKSAmIDE7CisJbG9uZyBmbWluID0gZm1pZCwgZm1heCA9IGZtaWQ7CisJbG9uZyBibWluID0gYm1pZCwgYm1heCA9IGJtaWQ7CisJbG9uZyBlYywgZCwgaTEsIGkyLCBwcmV2MSwgYmVzdCwgZGQsIHYsIGs7CisKKwkvKgorCSAqIFNldCBpbml0aWFsIGRpYWdvbmFsIHZhbHVlcyBmb3IgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZCBwYXRoLgorCSAqLworCWt2ZGZbZm1pZF0gPSBvZmYxOworCWt2ZGJbYm1pZF0gPSBsaW0xOworCisJZm9yIChlYyA9IDE7OyBlYysrKSB7CisJCWludCBnb3Rfc25ha2UgPSAwOworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gZXh0ZW50IHRoZSBkaWFnb25hbCAiZG9tYWluIiBieSBvbmUuIElmIHRoZSBuZXh0CisJCSAqIHZhbHVlcyBleGl0cyB0aGUgYm94IGJvdW5kYXJpZXMgd2UgbmVlZCB0byBjaGFuZ2UgaXQgaW4gdGhlCisJCSAqIG9wcG9zaXRlIGRpcmVjdGlvbiBiZWNhdXNlIChtYXggLSBtaW4pIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCisJCSAqIEFsc28gd2UgaW5pdGlhbGl6ZSB0aGUgZXh0ZXJuYWwgSyB2YWx1ZSB0byAtMSBzbyB0aGF0IHdlIGNhbgorCQkgKiBhdm9pZCBleHRyYSBjb25kaXRpb25zIGNoZWNrIGluc2lkZSB0aGUgY29yZSBsb29wLgorCQkgKi8KKwkJaWYgKGZtaW4gPiBkbWluKQorCQkJa3ZkZlstLWZtaW4gLSAxXSA9IC0xOworCQllbHNlCisJCQkrK2ZtaW47CisJCWlmIChmbWF4IDwgZG1heCkKKwkJCWt2ZGZbKytmbWF4ICsgMV0gPSAtMTsKKwkJZWxzZQorCQkJLS1mbWF4OworCisJCWZvciAoZCA9IGZtYXg7IGQgPj0gZm1pbjsgZCAtPSAyKSB7CisJCQlpZiAoa3ZkZltkIC0gMV0gPj0ga3ZkZltkICsgMV0pCisJCQkJaTEgPSBrdmRmW2QgLSAxXSArIDE7CisJCQllbHNlCisJCQkJaTEgPSBrdmRmW2QgKyAxXTsKKwkJCXByZXYxID0gaTE7CisJCQlpMiA9IGkxIC0gZDsKKwkJCWZvciAoOyBpMSA8IGxpbTEgJiYgaTIgPCBsaW0yICYmIGhhMVtpMV0gPT0gaGEyW2kyXTsgaTErKywgaTIrKyk7CisJCQlpZiAoaTEgLSBwcmV2MSA+IHhlbnYtPnNuYWtlX2NudCkKKwkJCQlnb3Rfc25ha2UgPSAxOworCQkJa3ZkZltkXSA9IGkxOworCQkJaWYgKG9kZCAmJiBibWluIDw9IGQgJiYgZCA8PSBibWF4ICYmIGt2ZGJbZF0gPD0gaTEpIHsKKwkJCQlzcGwtPmkxID0gaTE7CisJCQkJc3BsLT5pMiA9IGkyOworCQkJCXNwbC0+bWluX2xvID0gc3BsLT5taW5faGkgPSAxOworCQkJCXJldHVybiBlYzsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gZXh0ZW50IHRoZSBkaWFnb25hbCAiZG9tYWluIiBieSBvbmUuIElmIHRoZSBuZXh0CisJCSAqIHZhbHVlcyBleGl0cyB0aGUgYm94IGJvdW5kYXJpZXMgd2UgbmVlZCB0byBjaGFuZ2UgaXQgaW4gdGhlCisJCSAqIG9wcG9zaXRlIGRpcmVjdGlvbiBiZWNhdXNlIChtYXggLSBtaW4pIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCisJCSAqIEFsc28gd2UgaW5pdGlhbGl6ZSB0aGUgZXh0ZXJuYWwgSyB2YWx1ZSB0byAtMSBzbyB0aGF0IHdlIGNhbgorCQkgKiBhdm9pZCBleHRyYSBjb25kaXRpb25zIGNoZWNrIGluc2lkZSB0aGUgY29yZSBsb29wLgorCQkgKi8KKwkJaWYgKGJtaW4gPiBkbWluKQorCQkJa3ZkYlstLWJtaW4gLSAxXSA9IFhETF9MSU5FX01BWDsKKwkJZWxzZQorCQkJKytibWluOworCQlpZiAoYm1heCA8IGRtYXgpCisJCQlrdmRiWysrYm1heCArIDFdID0gWERMX0xJTkVfTUFYOworCQllbHNlCisJCQktLWJtYXg7CisKKwkJZm9yIChkID0gYm1heDsgZCA+PSBibWluOyBkIC09IDIpIHsKKwkJCWlmIChrdmRiW2QgLSAxXSA8IGt2ZGJbZCArIDFdKQorCQkJCWkxID0ga3ZkYltkIC0gMV07CisJCQllbHNlCisJCQkJaTEgPSBrdmRiW2QgKyAxXSAtIDE7CisJCQlwcmV2MSA9IGkxOworCQkJaTIgPSBpMSAtIGQ7CisJCQlmb3IgKDsgaTEgPiBvZmYxICYmIGkyID4gb2ZmMiAmJiBoYTFbaTEgLSAxXSA9PSBoYTJbaTIgLSAxXTsgaTEtLSwgaTItLSk7CisJCQlpZiAocHJldjEgLSBpMSA+IHhlbnYtPnNuYWtlX2NudCkKKwkJCQlnb3Rfc25ha2UgPSAxOworCQkJa3ZkYltkXSA9IGkxOworCQkJaWYgKCFvZGQgJiYgZm1pbiA8PSBkICYmIGQgPD0gZm1heCAmJiBpMSA8PSBrdmRmW2RdKSB7CisJCQkJc3BsLT5pMSA9IGkxOworCQkJCXNwbC0+aTIgPSBpMjsKKwkJCQlzcGwtPm1pbl9sbyA9IHNwbC0+bWluX2hpID0gMTsKKwkJCQlyZXR1cm4gZWM7CisJCQl9CisJCX0KKworCQlpZiAobmVlZF9taW4pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiB0aGUgZWRpdCBjb3N0IGlzIGFib3ZlIHRoZSBoZXVyaXN0aWMgdHJpZ2dlciBhbmQgaWYKKwkJICogd2UgZ290IGEgZ29vZCBzbmFrZSwgd2Ugc2FtcGxlIGN1cnJlbnQgZGlhZ29uYWxzIHRvIHNlZQorCQkgKiBpZiBzb21lIG9mIHRoZSwgaGF2ZSByZWFjaGVkIGFuICJpbnRlcmVzdGluZyIgcGF0aC4gT3VyCisJCSAqIG1lYXN1cmUgaXMgYSBmdW5jdGlvbiBvZiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgZGlhZ29uYWwKKwkJICogY29ybmVyIChpMSArIGkyKSBwZW5hbGl6ZWQgd2l0aCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUKKwkJICogbWlkIGRpYWdvbmFsIGl0c2VsZi4gSWYgdGhpcyB2YWx1ZSBpcyBhYm92ZSB0aGUgY3VycmVudAorCQkgKiBlZGl0IGNvc3QgdGltZXMgYSBtYWdpYyBmYWN0b3IgKFhETF9LX0hFVVIpIHdlIGNvbnNpZGVyCisJCSAqIGl0IGludGVyZXN0aW5nLgorCQkgKi8KKwkJaWYgKGdvdF9zbmFrZSAmJiBlYyA+IHhlbnYtPmhldXJfbWluKSB7CisJCQlmb3IgKGJlc3QgPSAwLCBkID0gZm1heDsgZCA+PSBmbWluOyBkIC09IDIpIHsKKwkJCQlkZCA9IGQgPiBmbWlkID8gZCAtIGZtaWQ6IGZtaWQgLSBkOworCQkJCWkxID0ga3ZkZltkXTsKKwkJCQlpMiA9IGkxIC0gZDsKKwkJCQl2ID0gKGkxIC0gb2ZmMSkgKyAoaTIgLSBvZmYyKSAtIGRkOworCisJCQkJaWYgKHYgPiBYRExfS19IRVVSICogZWMgJiYgdiA+IGJlc3QgJiYKKwkJCQkgICAgb2ZmMSArIHhlbnYtPnNuYWtlX2NudCA8PSBpMSAmJiBpMSA8IGxpbTEgJiYKKwkJCQkgICAgb2ZmMiArIHhlbnYtPnNuYWtlX2NudCA8PSBpMiAmJiBpMiA8IGxpbTIpIHsKKwkJCQkJZm9yIChrID0gMTsgaGExW2kxIC0ga10gPT0gaGEyW2kyIC0ga107IGsrKykKKwkJCQkJCWlmIChrID09IHhlbnYtPnNuYWtlX2NudCkgeworCQkJCQkJCWJlc3QgPSB2OworCQkJCQkJCXNwbC0+aTEgPSBpMTsKKwkJCQkJCQlzcGwtPmkyID0gaTI7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJfQorCQkJfQorCQkJaWYgKGJlc3QgPiAwKSB7CisJCQkJc3BsLT5taW5fbG8gPSAxOworCQkJCXNwbC0+bWluX2hpID0gMDsKKwkJCQlyZXR1cm4gZWM7CisJCQl9CisKKwkJCWZvciAoYmVzdCA9IDAsIGQgPSBibWF4OyBkID49IGJtaW47IGQgLT0gMikgeworCQkJCWRkID0gZCA+IGJtaWQgPyBkIC0gYm1pZDogYm1pZCAtIGQ7CisJCQkJaTEgPSBrdmRiW2RdOworCQkJCWkyID0gaTEgLSBkOworCQkJCXYgPSAobGltMSAtIGkxKSArIChsaW0yIC0gaTIpIC0gZGQ7CisKKwkJCQlpZiAodiA+IFhETF9LX0hFVVIgKiBlYyAmJiB2ID4gYmVzdCAmJgorCQkJCSAgICBvZmYxIDwgaTEgJiYgaTEgPD0gbGltMSAtIHhlbnYtPnNuYWtlX2NudCAmJgorCQkJCSAgICBvZmYyIDwgaTIgJiYgaTIgPD0gbGltMiAtIHhlbnYtPnNuYWtlX2NudCkgeworCQkJCQlmb3IgKGsgPSAwOyBoYTFbaTEgKyBrXSA9PSBoYTJbaTIgKyBrXTsgaysrKQorCQkJCQkJaWYgKGsgPT0geGVudi0+c25ha2VfY250IC0gMSkgeworCQkJCQkJCWJlc3QgPSB2OworCQkJCQkJCXNwbC0+aTEgPSBpMTsKKwkJCQkJCQlzcGwtPmkyID0gaTI7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJfQorCQkJfQorCQkJaWYgKGJlc3QgPiAwKSB7CisJCQkJc3BsLT5taW5fbG8gPSAwOworCQkJCXNwbC0+bWluX2hpID0gMTsKKwkJCQlyZXR1cm4gZWM7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBFbm91Z2ggaXMgZW5vdWdoLiBXZSBzcGVudCB0b28gbXVjaCB0aW1lIGhlcmUgYW5kIG5vdyB3ZSBjb2xsZWN0CisJCSAqIHRoZSBmdXJ0aGVzdCByZWFjaGluZyBwYXRoIHVzaW5nIHRoZSAoaTEgKyBpMikgbWVhc3VyZS4KKwkJICovCisJCWlmIChlYyA+PSB4ZW52LT5teGNvc3QpIHsKKwkJCWxvbmcgZmJlc3QsIGZiZXN0MSwgYmJlc3QsIGJiZXN0MTsKKworCQkJZmJlc3QgPSBmYmVzdDEgPSAtMTsKKwkJCWZvciAoZCA9IGZtYXg7IGQgPj0gZm1pbjsgZCAtPSAyKSB7CisJCQkJaTEgPSBYRExfTUlOKGt2ZGZbZF0sIGxpbTEpOworCQkJCWkyID0gaTEgLSBkOworCQkJCWlmIChsaW0yIDwgaTIpCisJCQkJCWkxID0gbGltMiArIGQsIGkyID0gbGltMjsKKwkJCQlpZiAoZmJlc3QgPCBpMSArIGkyKSB7CisJCQkJCWZiZXN0ID0gaTEgKyBpMjsKKwkJCQkJZmJlc3QxID0gaTE7CisJCQkJfQorCQkJfQorCisJCQliYmVzdCA9IGJiZXN0MSA9IFhETF9MSU5FX01BWDsKKwkJCWZvciAoZCA9IGJtYXg7IGQgPj0gYm1pbjsgZCAtPSAyKSB7CisJCQkJaTEgPSBYRExfTUFYKG9mZjEsIGt2ZGJbZF0pOworCQkJCWkyID0gaTEgLSBkOworCQkJCWlmIChpMiA8IG9mZjIpCisJCQkJCWkxID0gb2ZmMiArIGQsIGkyID0gb2ZmMjsKKwkJCQlpZiAoaTEgKyBpMiA8IGJiZXN0KSB7CisJCQkJCWJiZXN0ID0gaTEgKyBpMjsKKwkJCQkJYmJlc3QxID0gaTE7CisJCQkJfQorCQkJfQorCisJCQlpZiAoKGxpbTEgKyBsaW0yKSAtIGJiZXN0IDwgZmJlc3QgLSAob2ZmMSArIG9mZjIpKSB7CisJCQkJc3BsLT5pMSA9IGZiZXN0MTsKKwkJCQlzcGwtPmkyID0gZmJlc3QgLSBmYmVzdDE7CisJCQkJc3BsLT5taW5fbG8gPSAxOworCQkJCXNwbC0+bWluX2hpID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJc3BsLT5pMSA9IGJiZXN0MTsKKwkJCQlzcGwtPmkyID0gYmJlc3QgLSBiYmVzdDE7CisJCQkJc3BsLT5taW5fbG8gPSAwOworCQkJCXNwbC0+bWluX2hpID0gMTsKKwkJCX0KKwkJCXJldHVybiBlYzsKKwkJfQorCX0KK30KKworCisvKgorICogUnVsZTogIkRpdmlkZSBldCBJbXBlcmEiLiBSZWN1cnNpdmVseSBzcGxpdCB0aGUgYm94IGluIHN1Yi1ib3hlcyBieSBjYWxsaW5nCisgKiB0aGUgYm94IHNwbGl0dGluZyBmdW5jdGlvbi4gTm90ZSB0aGF0IHRoZSByZWFsIGpvYiAobWFya2luZyBjaGFuZ2VkIGxpbmVzKQorICogaXMgZG9uZSBpbiB0aGUgdHdvIGJvdW5kYXJ5IHJlYWNoaW5nIGNoZWNrcy4KKyAqLworaW50IHhkbF9yZWNzX2NtcChkaWZmZGF0YV90ICpkZDEsIGxvbmcgb2ZmMSwgbG9uZyBsaW0xLAorCQkgZGlmZmRhdGFfdCAqZGQyLCBsb25nIG9mZjIsIGxvbmcgbGltMiwKKwkJIGxvbmcgKmt2ZGYsIGxvbmcgKmt2ZGIsIGludCBuZWVkX21pbiwgeGRhbGdvZW52X3QgKnhlbnYpIHsKKwl1bnNpZ25lZCBsb25nIGNvbnN0ICpoYTEgPSBkZDEtPmhhLCAqaGEyID0gZGQyLT5oYTsKKworCS8qCisJICogU2hyaW5rIHRoZSBib3ggYnkgd2Fsa2luZyB0aHJvdWdoIGVhY2ggZGlhZ29uYWwgc25ha2UgKFNXIGFuZCBORSkuCisJICovCisJZm9yICg7IG9mZjEgPCBsaW0xICYmIG9mZjIgPCBsaW0yICYmIGhhMVtvZmYxXSA9PSBoYTJbb2ZmMl07IG9mZjErKywgb2ZmMisrKTsKKwlmb3IgKDsgb2ZmMSA8IGxpbTEgJiYgb2ZmMiA8IGxpbTIgJiYgaGExW2xpbTEgLSAxXSA9PSBoYTJbbGltMiAtIDFdOyBsaW0xLS0sIGxpbTItLSk7CisKKwkvKgorCSAqIElmIG9uZSBkaW1lbnNpb24gaXMgZW1wdHksIHRoZW4gYWxsIHJlY29yZHMgb24gdGhlIG90aGVyIG9uZSBtdXN0CisJICogYmUgb2J2aW91c2x5IGNoYW5nZWQuCisJICovCisJaWYgKG9mZjEgPT0gbGltMSkgeworCQljaGFyICpyY2hnMiA9IGRkMi0+cmNoZzsKKwkJbG9uZyAqcmluZGV4MiA9IGRkMi0+cmluZGV4OworCisJCWZvciAoOyBvZmYyIDwgbGltMjsgb2ZmMisrKQorCQkJcmNoZzJbcmluZGV4MltvZmYyXV0gPSAxOworCX0gZWxzZSBpZiAob2ZmMiA9PSBsaW0yKSB7CisJCWNoYXIgKnJjaGcxID0gZGQxLT5yY2hnOworCQlsb25nICpyaW5kZXgxID0gZGQxLT5yaW5kZXg7CisKKwkJZm9yICg7IG9mZjEgPCBsaW0xOyBvZmYxKyspCisJCQlyY2hnMVtyaW5kZXgxW29mZjFdXSA9IDE7CisJfSBlbHNlIHsKKwkJeGRwc3BsaXRfdCBzcGw7CisJCXNwbC5pMSA9IHNwbC5pMiA9IDA7CisKKwkJLyoKKwkJICogRGl2aWRlIC4uLgorCQkgKi8KKwkJaWYgKHhkbF9zcGxpdChoYTEsIG9mZjEsIGxpbTEsIGhhMiwgb2ZmMiwgbGltMiwga3ZkZiwga3ZkYiwKKwkJCSAgICAgIG5lZWRfbWluLCAmc3BsLCB4ZW52KSA8IDApIHsKKworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJLyoKKwkJICogLi4uIGV0IEltcGVyYS4KKwkJICovCisJCWlmICh4ZGxfcmVjc19jbXAoZGQxLCBvZmYxLCBzcGwuaTEsIGRkMiwgb2ZmMiwgc3BsLmkyLAorCQkJCSBrdmRmLCBrdmRiLCBzcGwubWluX2xvLCB4ZW52KSA8IDAgfHwKKwkJICAgIHhkbF9yZWNzX2NtcChkZDEsIHNwbC5pMSwgbGltMSwgZGQyLCBzcGwuaTIsIGxpbTIsCisJCQkJIGt2ZGYsIGt2ZGIsIHNwbC5taW5faGksIHhlbnYpIDwgMCkgeworCisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgeGRsX2RvX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCXhkZmVudl90ICp4ZSkgeworCWxvbmcgbmRpYWdzOworCWxvbmcgKmt2ZCwgKmt2ZGYsICprdmRiOworCXhkYWxnb2Vudl90IHhlbnY7CisJZGlmZmRhdGFfdCBkZDEsIGRkMjsKKworCWlmIChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgPT0gWERGX1BBVElFTkNFX0RJRkYpCisJCXJldHVybiB4ZGxfZG9fcGF0aWVuY2VfZGlmZihtZjEsIG1mMiwgeHBwLCB4ZSk7CisKKwlpZiAoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpID09IFhERl9ISVNUT0dSQU1fRElGRikKKwkJcmV0dXJuIHhkbF9kb19oaXN0b2dyYW1fZGlmZihtZjEsIG1mMiwgeHBwLCB4ZSk7CisKKwlpZiAoeGRsX3ByZXBhcmVfZW52KG1mMSwgbWYyLCB4cHAsIHhlKSA8IDApIHsKKworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBhbmQgc2V0dXAgSyB2ZWN0b3JzIHRvIGJlIHVzZWQgYnkgdGhlIGRpZmZlcmVudGlhbCBhbGdvcml0aG0uCisJICogT25lIGlzIHRvIHN0b3JlIHRoZSBmb3J3YXJkIHBhdGggYW5kIG9uZSB0byBzdG9yZSB0aGUgYmFja3dhcmQgcGF0aC4KKwkgKi8KKwluZGlhZ3MgPSB4ZS0+eGRmMS5ucmVmZiArIHhlLT54ZGYyLm5yZWZmICsgMzsKKwlpZiAoIShrdmQgPSAobG9uZyAqKSB4ZGxfbWFsbG9jKCgyICogbmRpYWdzICsgMikgKiBzaXplb2YobG9uZykpKSkgeworCisJCXhkbF9mcmVlX2Vudih4ZSk7CisJCXJldHVybiAtMTsKKwl9CisJa3ZkZiA9IGt2ZDsKKwlrdmRiID0ga3ZkZiArIG5kaWFnczsKKwlrdmRmICs9IHhlLT54ZGYyLm5yZWZmICsgMTsKKwlrdmRiICs9IHhlLT54ZGYyLm5yZWZmICsgMTsKKworCXhlbnYubXhjb3N0ID0geGRsX2JvZ29zcXJ0KG5kaWFncyk7CisJaWYgKHhlbnYubXhjb3N0IDwgWERMX01BWF9DT1NUX01JTikKKwkJeGVudi5teGNvc3QgPSBYRExfTUFYX0NPU1RfTUlOOworCXhlbnYuc25ha2VfY250ID0gWERMX1NOQUtFX0NOVDsKKwl4ZW52LmhldXJfbWluID0gWERMX0hFVVJfTUlOX0NPU1Q7CisKKwlkZDEubnJlYyA9IHhlLT54ZGYxLm5yZWZmOworCWRkMS5oYSA9IHhlLT54ZGYxLmhhOworCWRkMS5yY2hnID0geGUtPnhkZjEucmNoZzsKKwlkZDEucmluZGV4ID0geGUtPnhkZjEucmluZGV4OworCWRkMi5ucmVjID0geGUtPnhkZjIubnJlZmY7CisJZGQyLmhhID0geGUtPnhkZjIuaGE7CisJZGQyLnJjaGcgPSB4ZS0+eGRmMi5yY2hnOworCWRkMi5yaW5kZXggPSB4ZS0+eGRmMi5yaW5kZXg7CisKKwlpZiAoeGRsX3JlY3NfY21wKCZkZDEsIDAsIGRkMS5ucmVjLCAmZGQyLCAwLCBkZDIubnJlYywKKwkJCSBrdmRmLCBrdmRiLCAoeHBwLT5mbGFncyAmIFhERl9ORUVEX01JTklNQUwpICE9IDAsICZ4ZW52KSA8IDApIHsKKworCQl4ZGxfZnJlZShrdmQpOworCQl4ZGxfZnJlZV9lbnYoeGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJeGRsX2ZyZWUoa3ZkKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB4ZGNoYW5nZV90ICp4ZGxfYWRkX2NoYW5nZSh4ZGNoYW5nZV90ICp4c2NyLCBsb25nIGkxLCBsb25nIGkyLCBsb25nIGNoZzEsIGxvbmcgY2hnMikgeworCXhkY2hhbmdlX3QgKnhjaDsKKworCWlmICghKHhjaCA9ICh4ZGNoYW5nZV90ICopIHhkbF9tYWxsb2Moc2l6ZW9mKHhkY2hhbmdlX3QpKSkpCisJCXJldHVybiBOVUxMOworCisJeGNoLT5uZXh0ID0geHNjcjsKKwl4Y2gtPmkxID0gaTE7CisJeGNoLT5pMiA9IGkyOworCXhjaC0+Y2hnMSA9IGNoZzE7CisJeGNoLT5jaGcyID0gY2hnMjsKKworCXJldHVybiB4Y2g7Cit9CisKKworaW50IHhkbF9jaGFuZ2VfY29tcGFjdCh4ZGZpbGVfdCAqeGRmLCB4ZGZpbGVfdCAqeGRmbywgbG9uZyBmbGFncykgeworCWxvbmcgaXgsIGl4bywgaXhzLCBpeHJlZiwgZ3Jwc2l6LCBucmVjID0geGRmLT5ucmVjOworCWNoYXIgKnJjaGcgPSB4ZGYtPnJjaGcsICpyY2hnbyA9IHhkZm8tPnJjaGc7CisJeHJlY29yZF90ICoqcmVjcyA9IHhkZi0+cmVjczsKKworCS8qCisJICogVGhpcyBpcyB0aGUgc2FtZSBvZiB3aGF0IEdOVSBkaWZmIGRvZXMuIE1vdmUgYmFjayBhbmQgZm9yd2FyZAorCSAqIGNoYW5nZSBncm91cHMgZm9yIGEgY29uc2lzdGVudCBhbmQgcHJldHR5IGRpZmYgb3V0cHV0LiBUaGlzIGFsc28KKwkgKiBoZWxwcyBpbiBmaW5kaW5nIGpvaW5hYmxlIGNoYW5nZSBncm91cHMgYW5kIHJlZHVjZSB0aGUgZGlmZiBzaXplLgorCSAqLworCWZvciAoaXggPSBpeG8gPSAwOzspIHsKKwkJLyoKKwkJICogRmluZCB0aGUgZmlyc3QgY2hhbmdlZCBsaW5lIGluIHRoZSB0by1iZS1jb21wYWN0ZWQgZmlsZS4KKwkJICogV2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGJvdGggaW5kZXhlcywgc28gaWYgd2UgZmluZCBhCisJCSAqIGNoYW5nZWQgbGluZXMgZ3JvdXAgb24gdGhlIG90aGVyIGZpbGUsIHdoaWxlIHNjYW5uaW5nIHRoZQorCQkgKiB0by1iZS1jb21wYWN0ZWQgZmlsZSwgd2UgbmVlZCB0byBza2lwIGl0IHByb3Blcmx5LiBOb3RlCisJCSAqIHRoYXQgbG9vcHMgdGhhdCBhcmUgdGVzdGluZyBmb3IgY2hhbmdlZCBsaW5lcyBvbiByY2hnKiBkbworCQkgKiBub3QgbmVlZCBpbmRleCBib3VuZGluZyBzaW5jZSB0aGUgYXJyYXkgaXMgcHJlcGFyZWQgd2l0aAorCQkgKiBhIHplcm8gYXQgcG9zaXRpb24gLTEgYW5kIE4uCisJCSAqLworCQlmb3IgKDsgaXggPCBucmVjICYmICFyY2hnW2l4XTsgaXgrKykKKwkJCXdoaWxlIChyY2hnb1tpeG8rK10pOworCQlpZiAoaXggPT0gbnJlYykKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIFJlY29yZCB0aGUgc3RhcnQgb2YgYSBjaGFuZ2VkLWdyb3VwIGluIHRoZSB0by1iZS1jb21wYWN0ZWQgZmlsZQorCQkgKiBhbmQgZmluZCB0aGUgZW5kIG9mIGl0LCBvbiBib3RoIHRvLWJlLWNvbXBhY3RlZCBhbmQgb3RoZXIgZmlsZQorCQkgKiBpbmRleGVzIChpeCBhbmQgaXhvKS4KKwkJICovCisJCWl4cyA9IGl4OworCQlmb3IgKGl4Kys7IHJjaGdbaXhdOyBpeCsrKTsKKwkJZm9yICg7IHJjaGdvW2l4b107IGl4bysrKTsKKworCQlkbyB7CisJCQlncnBzaXogPSBpeCAtIGl4czsKKworCQkJLyoKKwkJCSAqIElmIHRoZSBsaW5lIGJlZm9yZSB0aGUgY3VycmVudCBjaGFuZ2UgZ3JvdXAsIGlzIGVxdWFsIHRvCisJCQkgKiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBjdXJyZW50IGNoYW5nZSBncm91cCwgc2hpZnQgYmFja3dhcmQKKwkJCSAqIHRoZSBncm91cC4KKwkJCSAqLworCQkJd2hpbGUgKGl4cyA+IDAgJiYgcmVjc1tpeHMgLSAxXS0+aGEgPT0gcmVjc1tpeCAtIDFdLT5oYSAmJgorCQkJICAgICAgIHhkbF9yZWNtYXRjaChyZWNzW2l4cyAtIDFdLT5wdHIsIHJlY3NbaXhzIC0gMV0tPnNpemUsIHJlY3NbaXggLSAxXS0+cHRyLCByZWNzW2l4IC0gMV0tPnNpemUsIGZsYWdzKSkgeworCQkJCXJjaGdbLS1peHNdID0gMTsKKwkJCQlyY2hnWy0taXhdID0gMDsKKworCQkJCS8qCisJCQkJICogVGhpcyBjaGFuZ2UgbWlnaHQgaGF2ZSBqb2luZWQgdHdvIGNoYW5nZSBncm91cHMsCisJCQkJICogc28gd2UgdHJ5IHRvIHRha2UgdGhpcyBzY2VuYXJpbyBpbiBhY2NvdW50IGJ5IG1vdmluZworCQkJCSAqIHRoZSBzdGFydCBpbmRleCBhY2NvcmRpbmdseSAoYW5kIHNvIHRoZSBvdGhlci1maWxlCisJCQkJICogZW5kLW9mLWdyb3VwIGluZGV4KS4KKwkJCQkgKi8KKwkJCQlmb3IgKDsgcmNoZ1tpeHMgLSAxXTsgaXhzLS0pOworCQkJCXdoaWxlIChyY2hnb1stLWl4b10pOworCQkJfQorCisJCQkvKgorCQkJICogUmVjb3JkIHRoZSBlbmQtb2YtZ3JvdXAgcG9zaXRpb24gaW4gY2FzZSB3ZSBhcmUgbWF0Y2hlZAorCQkJICogd2l0aCBhIGdyb3VwIG9mIGNoYW5nZXMgaW4gdGhlIG90aGVyIGZpbGUgKHRoYXQgaXMsIHRoZQorCQkJICogY2hhbmdlIHJlY29yZCBiZWZvcmUgdGhlIGVuZC1vZi1ncm91cCBpbmRleCBpbiB0aGUgb3RoZXIKKwkJCSAqIGZpbGUgaXMgc2V0KS4KKwkJCSAqLworCQkJaXhyZWYgPSByY2hnb1tpeG8gLSAxXSA/IGl4OiBucmVjOworCisJCQkvKgorCQkJICogSWYgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGN1cnJlbnQgY2hhbmdlIGdyb3VwLCBpcyBlcXVhbCB0bworCQkJICogdGhlIGxpbmUgbmV4dCBvZiB0aGUgY3VycmVudCBjaGFuZ2UgZ3JvdXAsIHNoaWZ0IGZvcndhcmQKKwkJCSAqIHRoZSBncm91cC4KKwkJCSAqLworCQkJd2hpbGUgKGl4IDwgbnJlYyAmJiByZWNzW2l4c10tPmhhID09IHJlY3NbaXhdLT5oYSAmJgorCQkJICAgICAgIHhkbF9yZWNtYXRjaChyZWNzW2l4c10tPnB0ciwgcmVjc1tpeHNdLT5zaXplLCByZWNzW2l4XS0+cHRyLCByZWNzW2l4XS0+c2l6ZSwgZmxhZ3MpKSB7CisJCQkJcmNoZ1tpeHMrK10gPSAwOworCQkJCXJjaGdbaXgrK10gPSAxOworCisJCQkJLyoKKwkJCQkgKiBUaGlzIGNoYW5nZSBtaWdodCBoYXZlIGpvaW5lZCB0d28gY2hhbmdlIGdyb3VwcywKKwkJCQkgKiBzbyB3ZSB0cnkgdG8gdGFrZSB0aGlzIHNjZW5hcmlvIGluIGFjY291bnQgYnkgbW92aW5nCisJCQkJICogdGhlIHN0YXJ0IGluZGV4IGFjY29yZGluZ2x5IChhbmQgc28gdGhlIG90aGVyLWZpbGUKKwkJCQkgKiBlbmQtb2YtZ3JvdXAgaW5kZXgpLiBLZWVwIHRyYWNraW5nIHRoZSByZWZlcmVuY2UKKwkJCQkgKiBpbmRleCBpbiBjYXNlIHdlIGFyZSBzaGlmdGluZyB0b2dldGhlciB3aXRoIGEKKwkJCQkgKiBjb3JyZXNwb25kaW5nIGdyb3VwIG9mIGNoYW5nZXMgaW4gdGhlIG90aGVyIGZpbGUuCisJCQkJICovCisJCQkJZm9yICg7IHJjaGdbaXhdOyBpeCsrKTsKKwkJCQl3aGlsZSAocmNoZ29bKytpeG9dKQorCQkJCQlpeHJlZiA9IGl4OworCQkJfQorCQl9IHdoaWxlIChncnBzaXogIT0gaXggLSBpeHMpOworCisJCS8qCisJCSAqIFRyeSB0byBtb3ZlIGJhY2sgdGhlIHBvc3NpYmx5IG1lcmdlZCBncm91cCBvZiBjaGFuZ2VzLCB0byBtYXRjaAorCQkgKiB0aGUgcmVjb3JkZWQgcG9zdGlvbiBpbiB0aGUgb3RoZXIgZmlsZS4KKwkJICovCisJCXdoaWxlIChpeHJlZiA8IGl4KSB7CisJCQlyY2hnWy0taXhzXSA9IDE7CisJCQlyY2hnWy0taXhdID0gMDsKKwkJCXdoaWxlIChyY2hnb1stLWl4b10pOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworaW50IHhkbF9idWlsZF9zY3JpcHQoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICoqeHNjcikgeworCXhkY2hhbmdlX3QgKmNzY3IgPSBOVUxMLCAqeGNoOworCWNoYXIgKnJjaGcxID0geGUtPnhkZjEucmNoZywgKnJjaGcyID0geGUtPnhkZjIucmNoZzsKKwlsb25nIGkxLCBpMiwgbDEsIGwyOworCisJLyoKKwkgKiBUcml2aWFsLiBDb2xsZWN0cyAiZ3JvdXBzIiBvZiBjaGFuZ2VzIGFuZCBjcmVhdGVzIGFuIGVkaXQgc2NyaXB0LgorCSAqLworCWZvciAoaTEgPSB4ZS0+eGRmMS5ucmVjLCBpMiA9IHhlLT54ZGYyLm5yZWM7IGkxID49IDAgfHwgaTIgPj0gMDsgaTEtLSwgaTItLSkKKwkJaWYgKHJjaGcxW2kxIC0gMV0gfHwgcmNoZzJbaTIgLSAxXSkgeworCQkJZm9yIChsMSA9IGkxOyByY2hnMVtpMSAtIDFdOyBpMS0tKTsKKwkJCWZvciAobDIgPSBpMjsgcmNoZzJbaTIgLSAxXTsgaTItLSk7CisKKwkJCWlmICghKHhjaCA9IHhkbF9hZGRfY2hhbmdlKGNzY3IsIGkxLCBpMiwgbDEgLSBpMSwgbDIgLSBpMikpKSB7CisJCQkJeGRsX2ZyZWVfc2NyaXB0KGNzY3IpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWNzY3IgPSB4Y2g7CisJCX0KKworCSp4c2NyID0gY3NjcjsKKworCXJldHVybiAwOworfQorCisKK3ZvaWQgeGRsX2ZyZWVfc2NyaXB0KHhkY2hhbmdlX3QgKnhzY3IpIHsKKwl4ZGNoYW5nZV90ICp4Y2g7CisKKwl3aGlsZSAoKHhjaCA9IHhzY3IpICE9IE5VTEwpIHsKKwkJeHNjciA9IHhzY3ItPm5leHQ7CisJCXhkbF9mcmVlKHhjaCk7CisJfQorfQorCitzdGF0aWMgaW50IHhkbF9jYWxsX2h1bmtfZnVuYyh4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNiX3QgKmVjYiwKKwkJCSAgICAgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpCit7CisJeGRjaGFuZ2VfdCAqeGNoLCAqeGNoZTsKKworCWZvciAoeGNoID0geHNjcjsgeGNoOyB4Y2ggPSB4Y2hlLT5uZXh0KSB7CisJCXhjaGUgPSB4ZGxfZ2V0X2h1bmsoeGNoLCB4ZWNmZyk7CisJCWlmICh4ZWNmZy0+aHVua19mdW5jKHhjaC0+aTEsIHhjaGUtPmkxICsgeGNoZS0+Y2hnMSAtIHhjaC0+aTEsCisJCQkJICAgICB4Y2gtPmkyLCB4Y2hlLT5pMiArIHhjaGUtPmNoZzIgLSB4Y2gtPmkyLAorCQkJCSAgICAgZWNiLT5wcml2KSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgeGRsX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJICAgICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLCB4ZGVtaXRjYl90ICplY2IpIHsKKwl4ZGNoYW5nZV90ICp4c2NyOworCXhkZmVudl90IHhlOworCWVtaXRfZnVuY190IGVmID0geGVjZmctPmh1bmtfZnVuYyA/IHhkbF9jYWxsX2h1bmtfZnVuYyA6IHhkbF9lbWl0X2RpZmY7CisKKwlpZiAoeGRsX2RvX2RpZmYobWYxLCBtZjIsIHhwcCwgJnhlKSA8IDApIHsKKworCQlyZXR1cm4gLTE7CisJfQorCWlmICh4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlLnhkZjEsICZ4ZS54ZGYyLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkgICAgeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZS54ZGYyLCAmeGUueGRmMSwgeHBwLT5mbGFncykgPCAwIHx8CisJICAgIHhkbF9idWlsZF9zY3JpcHQoJnhlLCAmeHNjcikgPCAwKSB7CisKKwkJeGRsX2ZyZWVfZW52KCZ4ZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHhzY3IpIHsKKwkJaWYgKGVmKCZ4ZSwgeHNjciwgZWNiLCB4ZWNmZykgPCAwKSB7CisKKwkJCXhkbF9mcmVlX3NjcmlwdCh4c2NyKTsKKwkJCXhkbF9mcmVlX2VudigmeGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXhkbF9mcmVlX3NjcmlwdCh4c2NyKTsKKwl9CisJeGRsX2ZyZWVfZW52KCZ4ZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3hkaWZmL3hkaWZmaS5oIGIveGRpZmYveGRpZmZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5MmVhOQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hkaWZmaS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWERJRkZJX0gpCisjZGVmaW5lIFhESUZGSV9ICisKKwordHlwZWRlZiBzdHJ1Y3Qgc19kaWZmZGF0YSB7CisJbG9uZyBucmVjOworCXVuc2lnbmVkIGxvbmcgY29uc3QgKmhhOworCWxvbmcgKnJpbmRleDsKKwljaGFyICpyY2hnOworfSBkaWZmZGF0YV90OworCit0eXBlZGVmIHN0cnVjdCBzX3hkYWxnb2VudiB7CisJbG9uZyBteGNvc3Q7CisJbG9uZyBzbmFrZV9jbnQ7CisJbG9uZyBoZXVyX21pbjsKK30geGRhbGdvZW52X3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfeGRjaGFuZ2UgeworCXN0cnVjdCBzX3hkY2hhbmdlICpuZXh0OworCWxvbmcgaTEsIGkyOworCWxvbmcgY2hnMSwgY2hnMjsKK30geGRjaGFuZ2VfdDsKKworCisKK2ludCB4ZGxfcmVjc19jbXAoZGlmZmRhdGFfdCAqZGQxLCBsb25nIG9mZjEsIGxvbmcgbGltMSwKKwkJIGRpZmZkYXRhX3QgKmRkMiwgbG9uZyBvZmYyLCBsb25nIGxpbTIsCisJCSBsb25nICprdmRmLCBsb25nICprdmRiLCBpbnQgbmVlZF9taW4sIHhkYWxnb2Vudl90ICp4ZW52KTsKK2ludCB4ZGxfZG9fZGlmZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJeGRmZW52X3QgKnhlKTsKK2ludCB4ZGxfY2hhbmdlX2NvbXBhY3QoeGRmaWxlX3QgKnhkZiwgeGRmaWxlX3QgKnhkZm8sIGxvbmcgZmxhZ3MpOworaW50IHhkbF9idWlsZF9zY3JpcHQoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICoqeHNjcik7Cit2b2lkIHhkbF9mcmVlX3NjcmlwdCh4ZGNoYW5nZV90ICp4c2NyKTsKK2ludCB4ZGxfZW1pdF9kaWZmKHhkZmVudl90ICp4ZSwgeGRjaGFuZ2VfdCAqeHNjciwgeGRlbWl0Y2JfdCAqZWNiLAorCQkgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOworaW50IHhkbF9kb19wYXRpZW5jZV9kaWZmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQl4ZGZlbnZfdCAqZW52KTsKK2ludCB4ZGxfZG9faGlzdG9ncmFtX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCXhkZmVudl90ICplbnYpOworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhESUZGSV9IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveGVtaXQuYyBiL3hkaWZmL3hlbWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDExZGJmOQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hlbWl0LmMKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMJRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpbmNsdWRlICJ4aW5jbHVkZS5oIgorCisKKworCitzdGF0aWMgbG9uZyB4ZGxfZ2V0X3JlYyh4ZGZpbGVfdCAqeGRmLCBsb25nIHJpLCBjaGFyIGNvbnN0ICoqcmVjKTsKK3N0YXRpYyBpbnQgeGRsX2VtaXRfcmVjb3JkKHhkZmlsZV90ICp4ZGYsIGxvbmcgcmksIGNoYXIgY29uc3QgKnByZSwgeGRlbWl0Y2JfdCAqZWNiKTsKKworCisKKworc3RhdGljIGxvbmcgeGRsX2dldF9yZWMoeGRmaWxlX3QgKnhkZiwgbG9uZyByaSwgY2hhciBjb25zdCAqKnJlYykgeworCisJKnJlYyA9IHhkZi0+cmVjc1tyaV0tPnB0cjsKKworCXJldHVybiB4ZGYtPnJlY3NbcmldLT5zaXplOworfQorCisKK3N0YXRpYyBpbnQgeGRsX2VtaXRfcmVjb3JkKHhkZmlsZV90ICp4ZGYsIGxvbmcgcmksIGNoYXIgY29uc3QgKnByZSwgeGRlbWl0Y2JfdCAqZWNiKSB7CisJbG9uZyBzaXplLCBwc2l6ZSA9IHN0cmxlbihwcmUpOworCWNoYXIgY29uc3QgKnJlYzsKKworCXNpemUgPSB4ZGxfZ2V0X3JlYyh4ZGYsIHJpLCAmcmVjKTsKKwlpZiAoeGRsX2VtaXRfZGlmZnJlYyhyZWMsIHNpemUsIHByZSwgcHNpemUsIGVjYikgPCAwKSB7CisKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBTdGFydGluZyBhdCB0aGUgcGFzc2VkIGNoYW5nZSBhdG9tLCBmaW5kIHRoZSBsYXRlc3QgY2hhbmdlIGF0b20gdG8gYmUgaW5jbHVkZWQKKyAqIGluc2lkZSB0aGUgZGlmZmVyZW50aWFsIGh1bmsgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbi4KKyAqLworeGRjaGFuZ2VfdCAqeGRsX2dldF9odW5rKHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpIHsKKwl4ZGNoYW5nZV90ICp4Y2gsICp4Y2hwOworCWxvbmcgbWF4X2NvbW1vbiA9IDIgKiB4ZWNmZy0+Y3R4bGVuICsgeGVjZmctPmludGVyaHVua2N0eGxlbjsKKworCWZvciAoeGNocCA9IHhzY3IsIHhjaCA9IHhzY3ItPm5leHQ7IHhjaDsgeGNocCA9IHhjaCwgeGNoID0geGNoLT5uZXh0KQorCQlpZiAoeGNoLT5pMSAtICh4Y2hwLT5pMSArIHhjaHAtPmNoZzEpID4gbWF4X2NvbW1vbikKKwkJCWJyZWFrOworCisJcmV0dXJuIHhjaHA7Cit9CisKKworc3RhdGljIGxvbmcgZGVmX2ZmKGNvbnN0IGNoYXIgKnJlYywgbG9uZyBsZW4sIGNoYXIgKmJ1ZiwgbG9uZyBzeiwgdm9pZCAqcHJpdikKK3sKKwlpZiAobGVuID4gMCAmJgorCQkJKGlzYWxwaGEoKHVuc2lnbmVkIGNoYXIpKnJlYykgfHwgLyogaWRlbnRpZmllcj8gKi8KKwkJCSAqcmVjID09ICdfJyB8fAkvKiBhbHNvIGlkZW50aWZpZXI/ICovCisJCQkgKnJlYyA9PSAnJCcpKSB7IC8qIGlkZW50aWZpZXJzIGZyb20gVk1TIGFuZCBvdGhlciBlc290ZXJpY28gKi8KKwkJaWYgKGxlbiA+IHN6KQorCQkJbGVuID0gc3o7CisJCXdoaWxlICgwIDwgbGVuICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpcmVjW2xlbiAtIDFdKSkKKwkJCWxlbi0tOworCQltZW1jcHkoYnVmLCByZWMsIGxlbik7CisJCXJldHVybiBsZW47CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCB4ZGxfZW1pdF9jb21tb24oeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICp4c2NyLCB4ZGVtaXRjYl90ICplY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKSB7CisJeGRmaWxlX3QgKnhkZiA9ICZ4ZS0+eGRmMjsKKwljb25zdCBjaGFyICpyY2hnID0geGRmLT5yY2hnOworCWxvbmcgaXg7CisKKwlmb3IgKGl4ID0gMDsgaXggPCB4ZGYtPm5yZWM7IGl4KyspIHsKKwkJaWYgKHJjaGdbaXhdKQorCQkJY29udGludWU7CisJCWlmICh4ZGxfZW1pdF9yZWNvcmQoeGRmLCBpeCwgIiIsIGVjYikpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgZnVuY19saW5lIHsKKwlsb25nIGxlbjsKKwljaGFyIGJ1Zls4MF07Cit9OworCitzdGF0aWMgbG9uZyBnZXRfZnVuY19saW5lKHhkZmVudl90ICp4ZSwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZywKKwkJCSAgc3RydWN0IGZ1bmNfbGluZSAqZnVuY19saW5lLCBsb25nIHN0YXJ0LCBsb25nIGxpbWl0KQoreworCWZpbmRfZnVuY190IGZmID0geGVjZmctPmZpbmRfZnVuYyA/IHhlY2ZnLT5maW5kX2Z1bmMgOiBkZWZfZmY7CisJbG9uZyBsLCBzaXplLCBzdGVwID0gKHN0YXJ0ID4gbGltaXQpID8gLTEgOiAxOworCWNoYXIgKmJ1ZiwgZHVtbXlbMV07CisKKwlidWYgPSBmdW5jX2xpbmUgPyBmdW5jX2xpbmUtPmJ1ZiA6IGR1bW15OworCXNpemUgPSBmdW5jX2xpbmUgPyBzaXplb2YoZnVuY19saW5lLT5idWYpIDogc2l6ZW9mKGR1bW15KTsKKworCWZvciAobCA9IHN0YXJ0OyBsICE9IGxpbWl0ICYmIDAgPD0gbCAmJiBsIDwgeGUtPnhkZjEubnJlYzsgbCArPSBzdGVwKSB7CisJCWNvbnN0IGNoYXIgKnJlYzsKKwkJbG9uZyByZWNsZW4gPSB4ZGxfZ2V0X3JlYygmeGUtPnhkZjEsIGwsICZyZWMpOworCQlsb25nIGxlbiA9IGZmKHJlYywgcmVjbGVuLCBidWYsIHNpemUsIHhlY2ZnLT5maW5kX2Z1bmNfcHJpdik7CisJCWlmIChsZW4gPj0gMCkgeworCQkJaWYgKGZ1bmNfbGluZSkKKwkJCQlmdW5jX2xpbmUtPmxlbiA9IGxlbjsKKwkJCXJldHVybiBsOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworaW50IHhkbF9lbWl0X2RpZmYoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICp4c2NyLCB4ZGVtaXRjYl90ICplY2IsCisJCSAgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZykgeworCWxvbmcgczEsIHMyLCBlMSwgZTIsIGxjdHg7CisJeGRjaGFuZ2VfdCAqeGNoLCAqeGNoZTsKKwlsb25nIGZ1bmNsaW5lcHJldiA9IC0xOworCXN0cnVjdCBmdW5jX2xpbmUgZnVuY19saW5lID0geyAwIH07CisKKwlpZiAoeGVjZmctPmZsYWdzICYgWERMX0VNSVRfQ09NTU9OKQorCQlyZXR1cm4geGRsX2VtaXRfY29tbW9uKHhlLCB4c2NyLCBlY2IsIHhlY2ZnKTsKKworCWZvciAoeGNoID0geHNjcjsgeGNoOyB4Y2ggPSB4Y2hlLT5uZXh0KSB7CisJCXhjaGUgPSB4ZGxfZ2V0X2h1bmsoeGNoLCB4ZWNmZyk7CisKKwkJczEgPSBYRExfTUFYKHhjaC0+aTEgLSB4ZWNmZy0+Y3R4bGVuLCAwKTsKKwkJczIgPSBYRExfTUFYKHhjaC0+aTIgLSB4ZWNmZy0+Y3R4bGVuLCAwKTsKKworCQlpZiAoeGVjZmctPmZsYWdzICYgWERMX0VNSVRfRlVOQ0NPTlRFWFQpIHsKKwkJCWxvbmcgZnMxID0gZ2V0X2Z1bmNfbGluZSh4ZSwgeGVjZmcsIE5VTEwsIHhjaC0+aTEsIC0xKTsKKwkJCWlmIChmczEgPCAwKQorCQkJCWZzMSA9IDA7CisJCQlpZiAoZnMxIDwgczEpIHsKKwkJCQlzMiAtPSBzMSAtIGZzMTsKKwkJCQlzMSA9IGZzMTsKKwkJCX0KKwkJfQorCisgYWdhaW46CisJCWxjdHggPSB4ZWNmZy0+Y3R4bGVuOworCQlsY3R4ID0gWERMX01JTihsY3R4LCB4ZS0+eGRmMS5ucmVjIC0gKHhjaGUtPmkxICsgeGNoZS0+Y2hnMSkpOworCQlsY3R4ID0gWERMX01JTihsY3R4LCB4ZS0+eGRmMi5ucmVjIC0gKHhjaGUtPmkyICsgeGNoZS0+Y2hnMikpOworCisJCWUxID0geGNoZS0+aTEgKyB4Y2hlLT5jaGcxICsgbGN0eDsKKwkJZTIgPSB4Y2hlLT5pMiArIHhjaGUtPmNoZzIgKyBsY3R4OworCisJCWlmICh4ZWNmZy0+ZmxhZ3MgJiBYRExfRU1JVF9GVU5DQ09OVEVYVCkgeworCQkJbG9uZyBmZTEgPSBnZXRfZnVuY19saW5lKHhlLCB4ZWNmZywgTlVMTCwKKwkJCQkJCSB4Y2hlLT5pMSArIHhjaGUtPmNoZzEsCisJCQkJCQkgeGUtPnhkZjEubnJlYyk7CisJCQlpZiAoZmUxIDwgMCkKKwkJCQlmZTEgPSB4ZS0+eGRmMS5ucmVjOworCQkJaWYgKGZlMSA+IGUxKSB7CisJCQkJZTIgKz0gZmUxIC0gZTE7CisJCQkJZTEgPSBmZTE7CisJCQl9CisKKwkJCS8qCisJCQkgKiBPdmVybGFwIHdpdGggbmV4dCBjaGFuZ2U/ICBUaGVuIGluY2x1ZGUgaXQKKwkJCSAqIGluIHRoZSBjdXJyZW50IGh1bmsgYW5kIHN0YXJ0IG92ZXIgdG8gZmluZAorCQkJICogaXRzIG5ldyBlbmQuCisJCQkgKi8KKwkJCWlmICh4Y2hlLT5uZXh0KSB7CisJCQkJbG9uZyBsID0geGNoZS0+bmV4dC0+aTE7CisJCQkJaWYgKGwgPD0gZTEgfHwKKwkJCQkgICAgZ2V0X2Z1bmNfbGluZSh4ZSwgeGVjZmcsIE5VTEwsIGwsIGUxKSA8IDApIHsKKwkJCQkJeGNoZSA9IHhjaGUtPm5leHQ7CisJCQkJCWdvdG8gYWdhaW47CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoKKwkJICogRW1pdCBjdXJyZW50IGh1bmsgaGVhZGVyLgorCQkgKi8KKworCQlpZiAoeGVjZmctPmZsYWdzICYgWERMX0VNSVRfRlVOQ05BTUVTKSB7CisJCQlnZXRfZnVuY19saW5lKHhlLCB4ZWNmZywgJmZ1bmNfbGluZSwKKwkJCQkgICAgICBzMSAtIDEsIGZ1bmNsaW5lcHJldik7CisJCQlmdW5jbGluZXByZXYgPSBzMSAtIDE7CisJCX0KKwkJaWYgKHhkbF9lbWl0X2h1bmtfaGRyKHMxICsgMSwgZTEgLSBzMSwgczIgKyAxLCBlMiAtIHMyLAorCQkJCSAgICAgIGZ1bmNfbGluZS5idWYsIGZ1bmNfbGluZS5sZW4sIGVjYikgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCS8qCisJCSAqIEVtaXQgcHJlLWNvbnRleHQuCisJCSAqLworCQlmb3IgKDsgczIgPCB4Y2gtPmkyOyBzMisrKQorCQkJaWYgKHhkbF9lbWl0X3JlY29yZCgmeGUtPnhkZjIsIHMyLCAiICIsIGVjYikgPCAwKQorCQkJCXJldHVybiAtMTsKKworCQlmb3IgKHMxID0geGNoLT5pMSwgczIgPSB4Y2gtPmkyOzsgeGNoID0geGNoLT5uZXh0KSB7CisJCQkvKgorCQkJICogTWVyZ2UgcHJldmlvdXMgd2l0aCBjdXJyZW50IGNoYW5nZSBhdG9tLgorCQkJICovCisJCQlmb3IgKDsgczEgPCB4Y2gtPmkxICYmIHMyIDwgeGNoLT5pMjsgczErKywgczIrKykKKwkJCQlpZiAoeGRsX2VtaXRfcmVjb3JkKCZ4ZS0+eGRmMiwgczIsICIgIiwgZWNiKSA8IDApCisJCQkJCXJldHVybiAtMTsKKworCQkJLyoKKwkJCSAqIFJlbW92ZXMgbGluZXMgZnJvbSB0aGUgZmlyc3QgZmlsZS4KKwkJCSAqLworCQkJZm9yIChzMSA9IHhjaC0+aTE7IHMxIDwgeGNoLT5pMSArIHhjaC0+Y2hnMTsgczErKykKKwkJCQlpZiAoeGRsX2VtaXRfcmVjb3JkKCZ4ZS0+eGRmMSwgczEsICItIiwgZWNiKSA8IDApCisJCQkJCXJldHVybiAtMTsKKworCQkJLyoKKwkJCSAqIEFkZHMgbGluZXMgZnJvbSB0aGUgc2Vjb25kIGZpbGUuCisJCQkgKi8KKwkJCWZvciAoczIgPSB4Y2gtPmkyOyBzMiA8IHhjaC0+aTIgKyB4Y2gtPmNoZzI7IHMyKyspCisJCQkJaWYgKHhkbF9lbWl0X3JlY29yZCgmeGUtPnhkZjIsIHMyLCAiKyIsIGVjYikgPCAwKQorCQkJCQlyZXR1cm4gLTE7CisKKwkJCWlmICh4Y2ggPT0geGNoZSkKKwkJCQlicmVhazsKKwkJCXMxID0geGNoLT5pMSArIHhjaC0+Y2hnMTsKKwkJCXMyID0geGNoLT5pMiArIHhjaC0+Y2hnMjsKKwkJfQorCisJCS8qCisJCSAqIEVtaXQgcG9zdC1jb250ZXh0LgorCQkgKi8KKwkJZm9yIChzMiA9IHhjaGUtPmkyICsgeGNoZS0+Y2hnMjsgczIgPCBlMjsgczIrKykKKwkJCWlmICh4ZGxfZW1pdF9yZWNvcmQoJnhlLT54ZGYyLCBzMiwgIiAiLCBlY2IpIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94ZW1pdC5oIGIveGRpZmYveGVtaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmUyZTgzCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGVtaXQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhFTUlUX0gpCisjZGVmaW5lIFhFTUlUX0gKKworCit0eXBlZGVmIGludCAoKmVtaXRfZnVuY190KSh4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNiX3QgKmVjYiwKKwkJCSAgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOworCit4ZGNoYW5nZV90ICp4ZGxfZ2V0X2h1bmsoeGRjaGFuZ2VfdCAqeHNjciwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZyk7CitpbnQgeGRsX2VtaXRfZGlmZih4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNiX3QgKmVjYiwKKwkJICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKTsKKworCisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWEVNSVRfSCkgKi8KZGlmZiAtLWdpdCBhL3hkaWZmL3hoaXN0b2dyYW0uYyBiL3hkaWZmL3hoaXN0b2dyYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjk5Nzg3Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGhpc3RvZ3JhbS5jCkBAIC0wLDAgKzEsMzYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiBKR2l0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisjaW5jbHVkZSAieHR5cGVzLmgiCisjaW5jbHVkZSAieGRpZmYuaCIKKworI2RlZmluZSBNQVhfUFRSCVVJTlRfTUFYCisjZGVmaW5lIE1BWF9DTlQJVUlOVF9NQVgKKworI2RlZmluZSBMSU5FX0VORChuKSAobGluZSMjbiArIGNvdW50IyNuIC0gMSkKKyNkZWZpbmUgTElORV9FTkRfUFRSKG4pICgqbGluZSMjbiArICpjb3VudCMjbiAtIDEpCisKK3N0cnVjdCBoaXN0aW5kZXggeworCXN0cnVjdCByZWNvcmQgeworCQl1bnNpZ25lZCBpbnQgcHRyLCBjbnQ7CisJCXN0cnVjdCByZWNvcmQgKm5leHQ7CisJfSAqKnJlY29yZHMsIC8qIGFuIG9jdXJyZW5jZSAqLworCSAgKipsaW5lX21hcDsgLyogbWFwIG9mIGxpbmUgdG8gcmVjb3JkIGNoYWluICovCisJY2hhc3RvcmVfdCByY2hhOworCXVuc2lnbmVkIGludCAqbmV4dF9wdHJzOworCXVuc2lnbmVkIGludCB0YWJsZV9iaXRzLAorCQkgICAgIHJlY29yZHNfc2l6ZSwKKwkJICAgICBsaW5lX21hcF9zaXplOworCisJdW5zaWduZWQgaW50IG1heF9jaGFpbl9sZW5ndGgsCisJCSAgICAga2V5X3NoaWZ0LAorCQkgICAgIHB0cl9zaGlmdDsKKworCXVuc2lnbmVkIGludCBjbnQsCisJCSAgICAgaGFzX2NvbW1vbjsKKworCXhkZmVudl90ICplbnY7CisJeHBwYXJhbV90IGNvbnN0ICp4cHA7Cit9OworCitzdHJ1Y3QgcmVnaW9uIHsKKwl1bnNpZ25lZCBpbnQgYmVnaW4xLCBlbmQxOworCXVuc2lnbmVkIGludCBiZWdpbjIsIGVuZDI7Cit9OworCisjZGVmaW5lIExJTkVfTUFQKGksIGEpIChpLT5saW5lX21hcFsoYSkgLSBpLT5wdHJfc2hpZnRdKQorCisjZGVmaW5lIE5FWFRfUFRSKGluZGV4LCBwdHIpIFwKKwkoaW5kZXgtPm5leHRfcHRyc1socHRyKSAtIGluZGV4LT5wdHJfc2hpZnRdKQorCisjZGVmaW5lIENOVChpbmRleCwgcHRyKSBcCisJKChMSU5FX01BUChpbmRleCwgcHRyKSktPmNudCkKKworI2RlZmluZSBSRUMoZW52LCBzLCBsKSBcCisJKGVudi0+eGRmIyNzLnJlY3NbbCAtIDFdKQorCitzdGF0aWMgaW50IGNtcF9yZWNzKHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCXhyZWNvcmRfdCAqcjEsIHhyZWNvcmRfdCAqcjIpCit7CisJcmV0dXJuIHIxLT5oYSA9PSByMi0+aGEgJiYKKwkJeGRsX3JlY21hdGNoKHIxLT5wdHIsIHIxLT5zaXplLCByMi0+cHRyLCByMi0+c2l6ZSwKKwkJCSAgICB4cHAtPmZsYWdzKTsKK30KKworI2RlZmluZSBDTVBfRU5WKHhwcCwgZW52LCBzMSwgbDEsIHMyLCBsMikgXAorCShjbXBfcmVjcyh4cHAsIFJFQyhlbnYsIHMxLCBsMSksIFJFQyhlbnYsIHMyLCBsMikpKQorCisjZGVmaW5lIENNUChpLCBzMSwgbDEsIHMyLCBsMikgXAorCShjbXBfcmVjcyhpLT54cHAsIFJFQyhpLT5lbnYsIHMxLCBsMSksIFJFQyhpLT5lbnYsIHMyLCBsMikpKQorCisjZGVmaW5lIFRBQkxFX0hBU0goaW5kZXgsIHNpZGUsIGxpbmUpIFwKKwlYRExfSEFTSExPTkcoKFJFQyhpbmRleC0+ZW52LCBzaWRlLCBsaW5lKSktPmhhLCBpbmRleC0+dGFibGVfYml0cykKKworc3RhdGljIGludCBzY2FuQShzdHJ1Y3QgaGlzdGluZGV4ICppbmRleCwgaW50IGxpbmUxLCBpbnQgY291bnQxKQoreworCXVuc2lnbmVkIGludCBwdHIsIHRibF9pZHg7CisJdW5zaWduZWQgaW50IGNoYWluX2xlbjsKKwlzdHJ1Y3QgcmVjb3JkICoqcmVjX2NoYWluLCAqcmVjOworCisJZm9yIChwdHIgPSBMSU5FX0VORCgxKTsgbGluZTEgPD0gcHRyOyBwdHItLSkgeworCQl0YmxfaWR4ID0gVEFCTEVfSEFTSChpbmRleCwgMSwgcHRyKTsKKwkJcmVjX2NoYWluID0gaW5kZXgtPnJlY29yZHMgKyB0YmxfaWR4OworCQlyZWMgPSAqcmVjX2NoYWluOworCisJCWNoYWluX2xlbiA9IDA7CisJCXdoaWxlIChyZWMpIHsKKwkJCWlmIChDTVAoaW5kZXgsIDEsIHJlYy0+cHRyLCAxLCBwdHIpKSB7CisJCQkJLyoKKwkJCQkgKiBwdHIgaXMgaWRlbnRpY2FsIHRvIGFub3RoZXIgZWxlbWVudC4gSW5zZXJ0CisJCQkJICogaXQgb250byB0aGUgZnJvbnQgb2YgdGhlIGV4aXN0aW5nIGVsZW1lbnQKKwkJCQkgKiBjaGFpbi4KKwkJCQkgKi8KKwkJCQlORVhUX1BUUihpbmRleCwgcHRyKSA9IHJlYy0+cHRyOworCQkJCXJlYy0+cHRyID0gcHRyOworCQkJCS8qIGNhcCByZWMtPmNudCBhdCBNQVhfQ05UICovCisJCQkJcmVjLT5jbnQgPSBYRExfTUlOKE1BWF9DTlQsIHJlYy0+Y250ICsgMSk7CisJCQkJTElORV9NQVAoaW5kZXgsIHB0cikgPSByZWM7CisJCQkJZ290byBjb250aW51ZV9zY2FuOworCQkJfQorCisJCQlyZWMgPSByZWMtPm5leHQ7CisJCQljaGFpbl9sZW4rKzsKKwkJfQorCisJCWlmIChjaGFpbl9sZW4gPT0gaW5kZXgtPm1heF9jaGFpbl9sZW5ndGgpCisJCQlyZXR1cm4gLTE7CisKKwkJLyoKKwkJICogVGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBoYXZlIGV2ZXIgc2VlbiB0aGlzIHBhcnRpY3VsYXIKKwkJICogZWxlbWVudCBpbiB0aGUgc2VxdWVuY2UuIENvbnN0cnVjdCBhIG5ldyBjaGFpbiBmb3IgaXQuCisJCSAqLworCQlpZiAoIShyZWMgPSB4ZGxfY2hhX2FsbG9jKCZpbmRleC0+cmNoYSkpKQorCQkJcmV0dXJuIC0xOworCQlyZWMtPnB0ciA9IHB0cjsKKwkJcmVjLT5jbnQgPSAxOworCQlyZWMtPm5leHQgPSAqcmVjX2NoYWluOworCQkqcmVjX2NoYWluID0gcmVjOworCQlMSU5FX01BUChpbmRleCwgcHRyKSA9IHJlYzsKKworY29udGludWVfc2NhbjoKKwkJOyAvKiBubyBvcCAqLworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyeV9sY3Moc3RydWN0IGhpc3RpbmRleCAqaW5kZXgsIHN0cnVjdCByZWdpb24gKmxjcywgaW50IGJfcHRyLAorCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCXVuc2lnbmVkIGludCBiX25leHQgPSBiX3B0ciArIDE7CisJc3RydWN0IHJlY29yZCAqcmVjID0gaW5kZXgtPnJlY29yZHNbVEFCTEVfSEFTSChpbmRleCwgMiwgYl9wdHIpXTsKKwl1bnNpZ25lZCBpbnQgYXMsIGFlLCBicywgYmUsIG5wLCByYzsKKwlpbnQgc2hvdWxkX2JyZWFrOworCisJZm9yICg7IHJlYzsgcmVjID0gcmVjLT5uZXh0KSB7CisJCWlmIChyZWMtPmNudCA+IGluZGV4LT5jbnQpIHsKKwkJCWlmICghaW5kZXgtPmhhc19jb21tb24pCisJCQkJaW5kZXgtPmhhc19jb21tb24gPSBDTVAoaW5kZXgsIDEsIHJlYy0+cHRyLCAyLCBiX3B0cik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWFzID0gcmVjLT5wdHI7CisJCWlmICghQ01QKGluZGV4LCAxLCBhcywgMiwgYl9wdHIpKQorCQkJY29udGludWU7CisKKwkJaW5kZXgtPmhhc19jb21tb24gPSAxOworCQlmb3IgKDs7KSB7CisJCQlzaG91bGRfYnJlYWsgPSAwOworCQkJbnAgPSBORVhUX1BUUihpbmRleCwgYXMpOworCQkJYnMgPSBiX3B0cjsKKwkJCWFlID0gYXM7CisJCQliZSA9IGJzOworCQkJcmMgPSByZWMtPmNudDsKKworCQkJd2hpbGUgKGxpbmUxIDwgYXMgJiYgbGluZTIgPCBicworCQkJCSYmIENNUChpbmRleCwgMSwgYXMgLSAxLCAyLCBicyAtIDEpKSB7CisJCQkJYXMtLTsKKwkJCQlicy0tOworCQkJCWlmICgxIDwgcmMpCisJCQkJCXJjID0gWERMX01JTihyYywgQ05UKGluZGV4LCBhcykpOworCQkJfQorCQkJd2hpbGUgKGFlIDwgTElORV9FTkQoMSkgJiYgYmUgPCBMSU5FX0VORCgyKQorCQkJCSYmIENNUChpbmRleCwgMSwgYWUgKyAxLCAyLCBiZSArIDEpKSB7CisJCQkJYWUrKzsKKwkJCQliZSsrOworCQkJCWlmICgxIDwgcmMpCisJCQkJCXJjID0gWERMX01JTihyYywgQ05UKGluZGV4LCBhZSkpOworCQkJfQorCisJCQlpZiAoYl9uZXh0IDw9IGJlKQorCQkJCWJfbmV4dCA9IGJlICsgMTsKKwkJCWlmIChsY3MtPmVuZDEgLSBsY3MtPmJlZ2luMSA8IGFlIC0gYXMgfHwgcmMgPCBpbmRleC0+Y250KSB7CisJCQkJbGNzLT5iZWdpbjEgPSBhczsKKwkJCQlsY3MtPmJlZ2luMiA9IGJzOworCQkJCWxjcy0+ZW5kMSA9IGFlOworCQkJCWxjcy0+ZW5kMiA9IGJlOworCQkJCWluZGV4LT5jbnQgPSByYzsKKwkJCX0KKworCQkJaWYgKG5wID09IDApCisJCQkJYnJlYWs7CisKKwkJCXdoaWxlIChucCA8PSBhZSkgeworCQkJCW5wID0gTkVYVF9QVFIoaW5kZXgsIG5wKTsKKwkJCQlpZiAobnAgPT0gMCkgeworCQkJCQlzaG91bGRfYnJlYWsgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChzaG91bGRfYnJlYWspCisJCQkJYnJlYWs7CisKKwkJCWFzID0gbnA7CisJCX0KKwl9CisJcmV0dXJuIGJfbmV4dDsKK30KKworc3RhdGljIGludCBmaW5kX2xjcyhzdHJ1Y3QgaGlzdGluZGV4ICppbmRleCwgc3RydWN0IHJlZ2lvbiAqbGNzLAorCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKSB7CisJaW50IGJfcHRyOworCisJaWYgKHNjYW5BKGluZGV4LCBsaW5lMSwgY291bnQxKSkKKwkJcmV0dXJuIC0xOworCisJaW5kZXgtPmNudCA9IGluZGV4LT5tYXhfY2hhaW5fbGVuZ3RoICsgMTsKKworCWZvciAoYl9wdHIgPSBsaW5lMjsgYl9wdHIgPD0gTElORV9FTkQoMik7ICkKKwkJYl9wdHIgPSB0cnlfbGNzKGluZGV4LCBsY3MsIGJfcHRyLCBsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKTsKKworCXJldHVybiBpbmRleC0+aGFzX2NvbW1vbiAmJiBpbmRleC0+bWF4X2NoYWluX2xlbmd0aCA8IGluZGV4LT5jbnQ7Cit9CisKK3N0YXRpYyBpbnQgZmFsbF9iYWNrX3RvX2NsYXNzaWNfZGlmZihzdHJ1Y3QgaGlzdGluZGV4ICppbmRleCwKKwkJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJeHBwYXJhbV90IHhwcDsKKwl4cHAuZmxhZ3MgPSBpbmRleC0+eHBwLT5mbGFncyAmIH5YREZfRElGRl9BTEdPUklUSE1fTUFTSzsKKworCXJldHVybiB4ZGxfZmFsbF9iYWNrX2RpZmYoaW5kZXgtPmVudiwgJnhwcCwKKwkJCQkgIGxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworfQorCitzdGF0aWMgaW50IGhpc3RvZ3JhbV9kaWZmKHhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGZlbnZfdCAqZW52LAorCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCXN0cnVjdCBoaXN0aW5kZXggaW5kZXg7CisJc3RydWN0IHJlZ2lvbiBsY3M7CisJaW50IHN6OworCWludCByZXN1bHQgPSAtMTsKKworCWlmIChjb3VudDEgPD0gMCAmJiBjb3VudDIgPD0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoTElORV9FTkQoMSkgPj0gTUFYX1BUUikKKwkJcmV0dXJuIC0xOworCisJaWYgKCFjb3VudDEpIHsKKwkJd2hpbGUoY291bnQyLS0pCisJCQllbnYtPnhkZjIucmNoZ1tsaW5lMisrIC0gMV0gPSAxOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFjb3VudDIpIHsKKwkJd2hpbGUoY291bnQxLS0pCisJCQllbnYtPnhkZjEucmNoZ1tsaW5lMSsrIC0gMV0gPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwltZW1zZXQoJmluZGV4LCAwLCBzaXplb2YoaW5kZXgpKTsKKworCWluZGV4LmVudiA9IGVudjsKKwlpbmRleC54cHAgPSB4cHA7CisKKwlpbmRleC5yZWNvcmRzID0gTlVMTDsKKwlpbmRleC5saW5lX21hcCA9IE5VTEw7CisJLyogaW4gY2FzZSBvZiBlYXJseSB4ZGxfY2hhX2ZyZWUoKSAqLworCWluZGV4LnJjaGEuaGVhZCA9IE5VTEw7CisKKwlpbmRleC50YWJsZV9iaXRzID0geGRsX2hhc2hiaXRzKGNvdW50MSk7CisJc3ogPSBpbmRleC5yZWNvcmRzX3NpemUgPSAxIDw8IGluZGV4LnRhYmxlX2JpdHM7CisJc3ogKj0gc2l6ZW9mKHN0cnVjdCByZWNvcmQgKik7CisJaWYgKCEoaW5kZXgucmVjb3JkcyA9IChzdHJ1Y3QgcmVjb3JkICoqKSB4ZGxfbWFsbG9jKHN6KSkpCisJCWdvdG8gY2xlYW51cDsKKwltZW1zZXQoaW5kZXgucmVjb3JkcywgMCwgc3opOworCisJc3ogPSBpbmRleC5saW5lX21hcF9zaXplID0gY291bnQxOworCXN6ICo9IHNpemVvZihzdHJ1Y3QgcmVjb3JkICopOworCWlmICghKGluZGV4LmxpbmVfbWFwID0gKHN0cnVjdCByZWNvcmQgKiopIHhkbF9tYWxsb2Moc3opKSkKKwkJZ290byBjbGVhbnVwOworCW1lbXNldChpbmRleC5saW5lX21hcCwgMCwgc3opOworCisJc3ogPSBpbmRleC5saW5lX21hcF9zaXplOworCXN6ICo9IHNpemVvZih1bnNpZ25lZCBpbnQpOworCWlmICghKGluZGV4Lm5leHRfcHRycyA9ICh1bnNpZ25lZCBpbnQgKikgeGRsX21hbGxvYyhzeikpKQorCQlnb3RvIGNsZWFudXA7CisJbWVtc2V0KGluZGV4Lm5leHRfcHRycywgMCwgc3opOworCisJLyogbGluZXMgLyA0ICsgMSBjb21lcyBmcm9tIHhwcmVwYXJlLmM6eGRsX3ByZXBhcmVfY3R4KCkgKi8KKwlpZiAoeGRsX2NoYV9pbml0KCZpbmRleC5yY2hhLCBzaXplb2Yoc3RydWN0IHJlY29yZCksIGNvdW50MSAvIDQgKyAxKSA8IDApCisJCWdvdG8gY2xlYW51cDsKKworCWluZGV4LnB0cl9zaGlmdCA9IGxpbmUxOworCWluZGV4Lm1heF9jaGFpbl9sZW5ndGggPSA2NDsKKworCW1lbXNldCgmbGNzLCAwLCBzaXplb2YobGNzKSk7CisJaWYgKGZpbmRfbGNzKCZpbmRleCwgJmxjcywgbGluZTEsIGNvdW50MSwgbGluZTIsIGNvdW50MikpCisJCXJlc3VsdCA9IGZhbGxfYmFja190b19jbGFzc2ljX2RpZmYoJmluZGV4LCBsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKTsKKwllbHNlIHsKKwkJaWYgKGxjcy5iZWdpbjEgPT0gMCAmJiBsY3MuYmVnaW4yID09IDApIHsKKwkJCXdoaWxlIChjb3VudDEtLSkKKwkJCQllbnYtPnhkZjEucmNoZ1tsaW5lMSsrIC0gMV0gPSAxOworCQkJd2hpbGUgKGNvdW50Mi0tKQorCQkJCWVudi0+eGRmMi5yY2hnW2xpbmUyKysgLSAxXSA9IDE7CisJCQlyZXN1bHQgPSAwOworCQl9IGVsc2UgeworCQkJcmVzdWx0ID0gaGlzdG9ncmFtX2RpZmYoeHBwLCBlbnYsCisJCQkJCQlsaW5lMSwgbGNzLmJlZ2luMSAtIGxpbmUxLAorCQkJCQkJbGluZTIsIGxjcy5iZWdpbjIgLSBsaW5lMik7CisJCQlpZiAocmVzdWx0KQorCQkJCWdvdG8gY2xlYW51cDsKKwkJCXJlc3VsdCA9IGhpc3RvZ3JhbV9kaWZmKHhwcCwgZW52LAorCQkJCQkJbGNzLmVuZDEgKyAxLCBMSU5FX0VORCgxKSAtIGxjcy5lbmQxLAorCQkJCQkJbGNzLmVuZDIgKyAxLCBMSU5FX0VORCgyKSAtIGxjcy5lbmQyKTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCitjbGVhbnVwOgorCXhkbF9mcmVlKGluZGV4LnJlY29yZHMpOworCXhkbF9mcmVlKGluZGV4LmxpbmVfbWFwKTsKKwl4ZGxfZnJlZShpbmRleC5uZXh0X3B0cnMpOworCXhkbF9jaGFfZnJlZSgmaW5kZXgucmNoYSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgeGRsX2RvX2hpc3RvZ3JhbV9kaWZmKG1tZmlsZV90ICpmaWxlMSwgbW1maWxlX3QgKmZpbGUyLAorCXhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGZlbnZfdCAqZW52KQoreworCWlmICh4ZGxfcHJlcGFyZV9lbnYoZmlsZTEsIGZpbGUyLCB4cHAsIGVudikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gaGlzdG9ncmFtX2RpZmYoeHBwLCBlbnYsCisJCWVudi0+eGRmMS5kc3RhcnQgKyAxLCBlbnYtPnhkZjEuZGVuZCAtIGVudi0+eGRmMS5kc3RhcnQgKyAxLAorCQllbnYtPnhkZjIuZHN0YXJ0ICsgMSwgZW52LT54ZGYyLmRlbmQgLSBlbnYtPnhkZjIuZHN0YXJ0ICsgMSk7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94aW5jbHVkZS5oIGIveGRpZmYveGluY2x1ZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjZjY2IzCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGluY2x1ZGUuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhJTkNMVURFX0gpCisjZGVmaW5lIFhJTkNMVURFX0gKKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgInhtYWNyb3MuaCIKKyNpbmNsdWRlICJ4ZGlmZi5oIgorI2luY2x1ZGUgInh0eXBlcy5oIgorI2luY2x1ZGUgInh1dGlscy5oIgorI2luY2x1ZGUgInhwcmVwYXJlLmgiCisjaW5jbHVkZSAieGRpZmZpLmgiCisjaW5jbHVkZSAieGVtaXQuaCIKKworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhJTkNMVURFX0gpICovCmRpZmYgLS1naXQgYS94ZGlmZi94bWFjcm9zLmggYi94ZGlmZi94bWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1YTg5NQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3htYWNyb3MuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhNQUNST1NfSCkKKyNkZWZpbmUgWE1BQ1JPU19ICisKKworCisKKyNkZWZpbmUgWERMX01JTihhLCBiKSAoKGEpIDwgKGIpID8gKGEpOiAoYikpCisjZGVmaW5lIFhETF9NQVgoYSwgYikgKChhKSA+IChiKSA/IChhKTogKGIpKQorI2RlZmluZSBYRExfQUJTKHYpICgodikgPj0gMCA/ICh2KTogLSh2KSkKKyNkZWZpbmUgWERMX0lTRElHSVQoYykgKChjKSA+PSAnMCcgJiYgKGMpIDw9ICc5JykKKyNkZWZpbmUgWERMX0lTU1BBQ0UoYykgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKGMpKSkKKyNkZWZpbmUgWERMX0FEREJJVFModixiKQkoKHYpICsgKCh2KSA+PiAoYikpKQorI2RlZmluZSBYRExfTUFTS0JJVFMoYikJCSgoMVVMIDw8IChiKSkgLSAxKQorI2RlZmluZSBYRExfSEFTSExPTkcodixiKQkoWERMX0FEREJJVFMoKHVuc2lnbmVkIGxvbmcpKHYpLCBiKSAmIFhETF9NQVNLQklUUyhiKSkKKyNkZWZpbmUgWERMX1BUUkZSRUUocCkgZG8geyBpZiAocCkgeyB4ZGxfZnJlZShwKTsgKHApID0gTlVMTDsgfSB9IHdoaWxlICgwKQorI2RlZmluZSBYRExfTEUzMl9QVVQocCwgdikgXAorZG8geyBcCisJdW5zaWduZWQgY2hhciAqX19wID0gKHVuc2lnbmVkIGNoYXIgKikgKHApOyBcCisJKl9fcCsrID0gKHVuc2lnbmVkIGNoYXIpICh2KTsgXAorCSpfX3ArKyA9ICh1bnNpZ25lZCBjaGFyKSAoKHYpID4+IDgpOyBcCisJKl9fcCsrID0gKHVuc2lnbmVkIGNoYXIpICgodikgPj4gMTYpOyBcCisJKl9fcCA9ICh1bnNpZ25lZCBjaGFyKSAoKHYpID4+IDI0KTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgWERMX0xFMzJfR0VUKHAsIHYpIFwKK2RvIHsgXAorCXVuc2lnbmVkIGNoYXIgY29uc3QgKl9fcCA9ICh1bnNpZ25lZCBjaGFyIGNvbnN0ICopIChwKTsgXAorCSh2KSA9ICh1bnNpZ25lZCBsb25nKSBfX3BbMF0gfCAoKHVuc2lnbmVkIGxvbmcpIF9fcFsxXSkgPDwgOCB8IFwKKwkJKCh1bnNpZ25lZCBsb25nKSBfX3BbMl0pIDw8IDE2IHwgKCh1bnNpZ25lZCBsb25nKSBfX3BbM10pIDw8IDI0OyBcCit9IHdoaWxlICgwKQorCisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWE1BQ1JPU19IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveG1lcmdlLmMgYi94ZGlmZi94bWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTEzYjI1Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveG1lcmdlLmMKQEAgLTAsMCArMSw2MTkgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiBEYXZpZGUgTGliZW56aSwgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisKK3R5cGVkZWYgc3RydWN0IHNfeGRtZXJnZSB7CisJc3RydWN0IHNfeGRtZXJnZSAqbmV4dDsKKwkvKgorCSAqIDAgPSBjb25mbGljdCwKKwkgKiAxID0gbm8gY29uZmxpY3QsIHRha2UgZmlyc3QsCisJICogMiA9IG5vIGNvbmZsaWN0LCB0YWtlIHNlY29uZC4KKwkgKiAzID0gbm8gY29uZmxpY3QsIHRha2UgYm90aC4KKwkgKi8KKwlpbnQgbW9kZTsKKwkvKgorCSAqIFRoZXNlIHBvaW50IGF0IHRoZSByZXNwZWN0aXZlIHBvc3RpbWFnZXMuICBFLmcuIDxpMSxjaGcxPiBpcworCSAqIGhvdyBzaWRlICMxIHdhbnRzIHRvIGNoYW5nZSB0aGUgY29tbW9uIGFuY2VzdG9yOyBpZiB0aGVyZSBpcyBubworCSAqIG92ZXJsYXAsIGxpbmVzIGJlZm9yZSBpMSBpbiB0aGUgcG9zdGltYWdlIG9mIHNpZGUgIzEgYXBwZWFyCisJICogaW4gdGhlIG1lcmdlIHJlc3VsdCBhcyBhIHJlZ2lvbiB0b3VjaGVkIGJ5IG5laXRoZXIgc2lkZS4KKwkgKi8KKwlsb25nIGkxLCBpMjsKKwlsb25nIGNoZzEsIGNoZzI7CisJLyoKKwkgKiBUaGVzZSBwb2ludCBhdCB0aGUgcHJlaW1hZ2U7IG9mIGNvdXJzZSB0aGVyZSBpcyBqdXN0IG9uZQorCSAqIHByZWltYWdlLCB0aGF0IGlzIGZyb20gdGhlIHNoYXJlZCBjb21tb24gYW5jZXN0b3IuCisJICovCisJbG9uZyBpMDsKKwlsb25nIGNoZzA7Cit9IHhkbWVyZ2VfdDsKKworc3RhdGljIGludCB4ZGxfYXBwZW5kX21lcmdlKHhkbWVyZ2VfdCAqKm1lcmdlLCBpbnQgbW9kZSwKKwkJCSAgICBsb25nIGkwLCBsb25nIGNoZzAsCisJCQkgICAgbG9uZyBpMSwgbG9uZyBjaGcxLAorCQkJICAgIGxvbmcgaTIsIGxvbmcgY2hnMikKK3sKKwl4ZG1lcmdlX3QgKm0gPSAqbWVyZ2U7CisJaWYgKG0gJiYgKGkxIDw9IG0tPmkxICsgbS0+Y2hnMSB8fCBpMiA8PSBtLT5pMiArIG0tPmNoZzIpKSB7CisJCWlmIChtb2RlICE9IG0tPm1vZGUpCisJCQltLT5tb2RlID0gMDsKKwkJbS0+Y2hnMCA9IGkwICsgY2hnMCAtIG0tPmkwOworCQltLT5jaGcxID0gaTEgKyBjaGcxIC0gbS0+aTE7CisJCW0tPmNoZzIgPSBpMiArIGNoZzIgLSBtLT5pMjsKKwl9IGVsc2UgeworCQltID0geGRsX21hbGxvYyhzaXplb2YoeGRtZXJnZV90KSk7CisJCWlmICghbSkKKwkJCXJldHVybiAtMTsKKwkJbS0+bmV4dCA9IE5VTEw7CisJCW0tPm1vZGUgPSBtb2RlOworCQltLT5pMCA9IGkwOworCQltLT5jaGcwID0gY2hnMDsKKwkJbS0+aTEgPSBpMTsKKwkJbS0+Y2hnMSA9IGNoZzE7CisJCW0tPmkyID0gaTI7CisJCW0tPmNoZzIgPSBjaGcyOworCQlpZiAoKm1lcmdlKQorCQkJKCptZXJnZSktPm5leHQgPSBtOworCQkqbWVyZ2UgPSBtOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4ZGxfY2xlYW51cF9tZXJnZSh4ZG1lcmdlX3QgKmMpCit7CisJaW50IGNvdW50ID0gMDsKKwl4ZG1lcmdlX3QgKm5leHRfYzsKKworCS8qIHdlcmUgdGhlcmUgY29uZmxpY3RzPyAqLworCWZvciAoOyBjOyBjID0gbmV4dF9jKSB7CisJCWlmIChjLT5tb2RlID09IDApCisJCQljb3VudCsrOworCQluZXh0X2MgPSBjLT5uZXh0OworCQlmcmVlKGMpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgeGRsX21lcmdlX2NtcF9saW5lcyh4ZGZlbnZfdCAqeGUxLCBpbnQgaTEsIHhkZmVudl90ICp4ZTIsIGludCBpMiwKKwkJaW50IGxpbmVfY291bnQsIGxvbmcgZmxhZ3MpCit7CisJaW50IGk7CisJeHJlY29yZF90ICoqcmVjMSA9IHhlMS0+eGRmMi5yZWNzICsgaTE7CisJeHJlY29yZF90ICoqcmVjMiA9IHhlMi0+eGRmMi5yZWNzICsgaTI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGluZV9jb3VudDsgaSsrKSB7CisJCWludCByZXN1bHQgPSB4ZGxfcmVjbWF0Y2gocmVjMVtpXS0+cHRyLCByZWMxW2ldLT5zaXplLAorCQkJcmVjMltpXS0+cHRyLCByZWMyW2ldLT5zaXplLCBmbGFncyk7CisJCWlmICghcmVzdWx0KQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4ZGxfcmVjc19jb3B5XzAoaW50IHVzZV9vcmlnLCB4ZGZlbnZfdCAqeGUsIGludCBpLCBpbnQgY291bnQsIGludCBhZGRfbmwsIGNoYXIgKmRlc3QpCit7CisJeHJlY29yZF90ICoqcmVjczsKKwlpbnQgc2l6ZSA9IDA7CisKKwlyZWNzID0gKHVzZV9vcmlnID8geGUtPnhkZjEucmVjcyA6IHhlLT54ZGYyLnJlY3MpICsgaTsKKworCWlmIChjb3VudCA8IDEpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBzaXplICs9IHJlY3NbaSsrXS0+c2l6ZSkKKwkJaWYgKGRlc3QpCisJCQltZW1jcHkoZGVzdCArIHNpemUsIHJlY3NbaV0tPnB0ciwgcmVjc1tpXS0+c2l6ZSk7CisJaWYgKGFkZF9ubCkgeworCQlpID0gcmVjc1tjb3VudCAtIDFdLT5zaXplOworCQlpZiAoaSA9PSAwIHx8IHJlY3NbY291bnQgLSAxXS0+cHRyW2kgLSAxXSAhPSAnXG4nKSB7CisJCQlpZiAoZGVzdCkKKwkJCQlkZXN0W3NpemVdID0gJ1xuJzsKKwkJCXNpemUrKzsKKwkJfQorCX0KKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCB4ZGxfcmVjc19jb3B5KHhkZmVudl90ICp4ZSwgaW50IGksIGludCBjb3VudCwgaW50IGFkZF9ubCwgY2hhciAqZGVzdCkKK3sKKwlyZXR1cm4geGRsX3JlY3NfY29weV8wKDAsIHhlLCBpLCBjb3VudCwgYWRkX25sLCBkZXN0KTsKK30KKworc3RhdGljIGludCB4ZGxfb3JpZ19jb3B5KHhkZmVudl90ICp4ZSwgaW50IGksIGludCBjb3VudCwgaW50IGFkZF9ubCwgY2hhciAqZGVzdCkKK3sKKwlyZXR1cm4geGRsX3JlY3NfY29weV8wKDEsIHhlLCBpLCBjb3VudCwgYWRkX25sLCBkZXN0KTsKK30KKworc3RhdGljIGludCBmaWxsX2NvbmZsaWN0X2h1bmsoeGRmZW52X3QgKnhlMSwgY29uc3QgY2hhciAqbmFtZTEsCisJCQkgICAgICB4ZGZlbnZfdCAqeGUyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUzLAorCQkJICAgICAgaW50IHNpemUsIGludCBpLCBpbnQgc3R5bGUsCisJCQkgICAgICB4ZG1lcmdlX3QgKm0sIGNoYXIgKmRlc3QsIGludCBtYXJrZXJfc2l6ZSkKK3sKKwlpbnQgbWFya2VyMV9zaXplID0gKG5hbWUxID8gc3RybGVuKG5hbWUxKSArIDEgOiAwKTsKKwlpbnQgbWFya2VyMl9zaXplID0gKG5hbWUyID8gc3RybGVuKG5hbWUyKSArIDEgOiAwKTsKKwlpbnQgbWFya2VyM19zaXplID0gKG5hbWUzID8gc3RybGVuKG5hbWUzKSArIDEgOiAwKTsKKworCWlmIChtYXJrZXJfc2l6ZSA8PSAwKQorCQltYXJrZXJfc2l6ZSA9IERFRkFVTFRfQ09ORkxJQ1RfTUFSS0VSX1NJWkU7CisKKwkvKiBCZWZvcmUgY29uZmxpY3RpbmcgcGFydCAqLworCXNpemUgKz0geGRsX3JlY3NfY29weSh4ZTEsIGksIG0tPmkxIC0gaSwgMCwKKwkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOworCisJaWYgKCFkZXN0KSB7CisJCXNpemUgKz0gbWFya2VyX3NpemUgKyAxICsgbWFya2VyMV9zaXplOworCX0gZWxzZSB7CisJCW1lbXNldChkZXN0ICsgc2l6ZSwgJzwnLCBtYXJrZXJfc2l6ZSk7CisJCXNpemUgKz0gbWFya2VyX3NpemU7CisJCWlmIChtYXJrZXIxX3NpemUpIHsKKwkJCWRlc3Rbc2l6ZV0gPSAnICc7CisJCQltZW1jcHkoZGVzdCArIHNpemUgKyAxLCBuYW1lMSwgbWFya2VyMV9zaXplIC0gMSk7CisJCQlzaXplICs9IG1hcmtlcjFfc2l6ZTsKKwkJfQorCQlkZXN0W3NpemUrK10gPSAnXG4nOworCX0KKworCS8qIFBvc3RpbWFnZSBmcm9tIHNpZGUgIzEgKi8KKwlzaXplICs9IHhkbF9yZWNzX2NvcHkoeGUxLCBtLT5pMSwgbS0+Y2hnMSwgMSwKKwkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOworCisJaWYgKHN0eWxlID09IFhETF9NRVJHRV9ESUZGMykgeworCQkvKiBTaGFyZWQgcHJlaW1hZ2UgKi8KKwkJaWYgKCFkZXN0KSB7CisJCQlzaXplICs9IG1hcmtlcl9zaXplICsgMSArIG1hcmtlcjNfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCW1lbXNldChkZXN0ICsgc2l6ZSwgJ3wnLCBtYXJrZXJfc2l6ZSk7CisJCQlzaXplICs9IG1hcmtlcl9zaXplOworCQkJaWYgKG1hcmtlcjNfc2l6ZSkgeworCQkJCWRlc3Rbc2l6ZV0gPSAnICc7CisJCQkJbWVtY3B5KGRlc3QgKyBzaXplICsgMSwgbmFtZTMsIG1hcmtlcjNfc2l6ZSAtIDEpOworCQkJCXNpemUgKz0gbWFya2VyM19zaXplOworCQkJfQorCQkJZGVzdFtzaXplKytdID0gJ1xuJzsKKwkJfQorCQlzaXplICs9IHhkbF9vcmlnX2NvcHkoeGUxLCBtLT5pMCwgbS0+Y2hnMCwgMSwKKwkJCQkgICAgICBkZXN0ID8gZGVzdCArIHNpemUgOiBOVUxMKTsKKwl9CisKKwlpZiAoIWRlc3QpIHsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZSArIDE7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGRlc3QgKyBzaXplLCAnPScsIG1hcmtlcl9zaXplKTsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZTsKKwkJZGVzdFtzaXplKytdID0gJ1xuJzsKKwl9CisKKwkvKiBQb3N0aW1hZ2UgZnJvbSBzaWRlICMyICovCisJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMiwgbS0+aTIsIG0tPmNoZzIsIDEsCisJCQkgICAgICBkZXN0ID8gZGVzdCArIHNpemUgOiBOVUxMKTsKKwlpZiAoIWRlc3QpIHsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZSArIDEgKyBtYXJrZXIyX3NpemU7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGRlc3QgKyBzaXplLCAnPicsIG1hcmtlcl9zaXplKTsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZTsKKwkJaWYgKG1hcmtlcjJfc2l6ZSkgeworCQkJZGVzdFtzaXplXSA9ICcgJzsKKwkJCW1lbWNweShkZXN0ICsgc2l6ZSArIDEsIG5hbWUyLCBtYXJrZXIyX3NpemUgLSAxKTsKKwkJCXNpemUgKz0gbWFya2VyMl9zaXplOworCQl9CisJCWRlc3Rbc2l6ZSsrXSA9ICdcbic7CisJfQorCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IHhkbF9maWxsX21lcmdlX2J1ZmZlcih4ZGZlbnZfdCAqeGUxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCQkgeGRmZW52X3QgKnhlMiwgY29uc3QgY2hhciAqbmFtZTIsCisJCQkJIGNvbnN0IGNoYXIgKmFuY2VzdG9yX25hbWUsCisJCQkJIGludCBmYXZvciwKKwkJCQkgeGRtZXJnZV90ICptLCBjaGFyICpkZXN0LCBpbnQgc3R5bGUsCisJCQkJIGludCBtYXJrZXJfc2l6ZSkKK3sKKwlpbnQgc2l6ZSwgaTsKKworCWZvciAoc2l6ZSA9IGkgPSAwOyBtOyBtID0gbS0+bmV4dCkgeworCQlpZiAoZmF2b3IgJiYgIW0tPm1vZGUpCisJCQltLT5tb2RlID0gZmF2b3I7CisKKwkJaWYgKG0tPm1vZGUgPT0gMCkKKwkJCXNpemUgPSBmaWxsX2NvbmZsaWN0X2h1bmsoeGUxLCBuYW1lMSwgeGUyLCBuYW1lMiwKKwkJCQkJCSAgYW5jZXN0b3JfbmFtZSwKKwkJCQkJCSAgc2l6ZSwgaSwgc3R5bGUsIG0sIGRlc3QsCisJCQkJCQkgIG1hcmtlcl9zaXplKTsKKwkJZWxzZSBpZiAobS0+bW9kZSAmIDMpIHsKKwkJCS8qIEJlZm9yZSBjb25mbGljdGluZyBwYXJ0ICovCisJCQlzaXplICs9IHhkbF9yZWNzX2NvcHkoeGUxLCBpLCBtLT5pMSAtIGksIDAsCisJCQkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOworCQkJLyogUG9zdGltYWdlIGZyb20gc2lkZSAjMSAqLworCQkJaWYgKG0tPm1vZGUgJiAxKQorCQkJCXNpemUgKz0geGRsX3JlY3NfY29weSh4ZTEsIG0tPmkxLCBtLT5jaGcxLCAxLAorCQkJCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisJCQkvKiBQb3N0aW1hZ2UgZnJvbSBzaWRlICMyICovCisJCQlpZiAobS0+bW9kZSAmIDIpCisJCQkJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMiwgbS0+aTIsIG0tPmNoZzIsIDEsCisJCQkJCQkgICAgICBkZXN0ID8gZGVzdCArIHNpemUgOiBOVUxMKTsKKwkJfSBlbHNlCisJCQljb250aW51ZTsKKwkJaSA9IG0tPmkxICsgbS0+Y2hnMTsKKwl9CisJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMSwgaSwgeGUxLT54ZGYyLm5yZWMgLSBpLCAwLAorCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisJcmV0dXJuIHNpemU7Cit9CisKKy8qCisgKiBTb21ldGltZXMsIGNoYW5nZXMgYXJlIG5vdCBxdWl0ZSBpZGVudGljYWwsIGJ1dCBkaWZmZXIgaW4gb25seSBhIGZldworICogbGluZXMuIFRyeSBoYXJkIHRvIHNob3cgb25seSB0aGVzZSBmZXcgbGluZXMgYXMgY29uZmxpY3RpbmcuCisgKi8KK3N0YXRpYyBpbnQgeGRsX3JlZmluZV9jb25mbGljdHMoeGRmZW52X3QgKnhlMSwgeGRmZW52X3QgKnhlMiwgeGRtZXJnZV90ICptLAorCQl4cHBhcmFtX3QgY29uc3QgKnhwcCkKK3sKKwlmb3IgKDsgbTsgbSA9IG0tPm5leHQpIHsKKwkJbW1maWxlX3QgdDEsIHQyOworCQl4ZGZlbnZfdCB4ZTsKKwkJeGRjaGFuZ2VfdCAqeHNjciwgKng7CisJCWludCBpMSA9IG0tPmkxLCBpMiA9IG0tPmkyOworCisJCS8qIGxldCdzIGhhbmRsZSBqdXN0IHRoZSBjb25mbGljdHMgKi8KKwkJaWYgKG0tPm1vZGUpCisJCQljb250aW51ZTsKKworCQkvKiBubyBzZW5zZSByZWZpbmluZyBhIGNvbmZsaWN0IHdoZW4gb25lIHNpZGUgaXMgZW1wdHkgKi8KKwkJaWYgKG0tPmNoZzEgPT0gMCB8fCBtLT5jaGcyID09IDApCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUaGlzIHByb2JhYmx5IGRvZXMgbm90IHdvcmsgb3V0c2lkZSBnaXQsIHNpbmNlCisJCSAqIHdlIGhhdmUgYSB2ZXJ5IHNpbXBsZSBtbWZpbGUgc3RydWN0dXJlLgorCQkgKi8KKwkJdDEucHRyID0gKGNoYXIgKil4ZTEtPnhkZjIucmVjc1ttLT5pMV0tPnB0cjsKKwkJdDEuc2l6ZSA9IHhlMS0+eGRmMi5yZWNzW20tPmkxICsgbS0+Y2hnMSAtIDFdLT5wdHIKKwkJCSsgeGUxLT54ZGYyLnJlY3NbbS0+aTEgKyBtLT5jaGcxIC0gMV0tPnNpemUgLSB0MS5wdHI7CisJCXQyLnB0ciA9IChjaGFyICopeGUyLT54ZGYyLnJlY3NbbS0+aTJdLT5wdHI7CisJCXQyLnNpemUgPSB4ZTItPnhkZjIucmVjc1ttLT5pMiArIG0tPmNoZzIgLSAxXS0+cHRyCisJCQkrIHhlMi0+eGRmMi5yZWNzW20tPmkyICsgbS0+Y2hnMiAtIDFdLT5zaXplIC0gdDIucHRyOworCQlpZiAoeGRsX2RvX2RpZmYoJnQxLCAmdDIsIHhwcCwgJnhlKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmICh4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlLnhkZjEsICZ4ZS54ZGYyLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkJICAgIHhkbF9jaGFuZ2VfY29tcGFjdCgmeGUueGRmMiwgJnhlLnhkZjEsIHhwcC0+ZmxhZ3MpIDwgMCB8fAorCQkgICAgeGRsX2J1aWxkX3NjcmlwdCgmeGUsICZ4c2NyKSA8IDApIHsKKwkJCXhkbF9mcmVlX2VudigmeGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICgheHNjcikgeworCQkJLyogSWYgdGhpcyBoYXBwZW5zLCB0aGUgY2hhbmdlcyBhcmUgaWRlbnRpY2FsLiAqLworCQkJeGRsX2ZyZWVfZW52KCZ4ZSk7CisJCQltLT5tb2RlID0gNDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXggPSB4c2NyOworCQltLT5pMSA9IHhzY3ItPmkxICsgaTE7CisJCW0tPmNoZzEgPSB4c2NyLT5jaGcxOworCQltLT5pMiA9IHhzY3ItPmkyICsgaTI7CisJCW0tPmNoZzIgPSB4c2NyLT5jaGcyOworCQl3aGlsZSAoeHNjci0+bmV4dCkgeworCQkJeGRtZXJnZV90ICptMiA9IHhkbF9tYWxsb2Moc2l6ZW9mKHhkbWVyZ2VfdCkpOworCQkJaWYgKCFtMikgeworCQkJCXhkbF9mcmVlX2VudigmeGUpOworCQkJCXhkbF9mcmVlX3NjcmlwdCh4KTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQl4c2NyID0geHNjci0+bmV4dDsKKwkJCW0yLT5uZXh0ID0gbS0+bmV4dDsKKwkJCW0tPm5leHQgPSBtMjsKKwkJCW0gPSBtMjsKKwkJCW0tPm1vZGUgPSAwOworCQkJbS0+aTEgPSB4c2NyLT5pMSArIGkxOworCQkJbS0+Y2hnMSA9IHhzY3ItPmNoZzE7CisJCQltLT5pMiA9IHhzY3ItPmkyICsgaTI7CisJCQltLT5jaGcyID0geHNjci0+Y2hnMjsKKwkJfQorCQl4ZGxfZnJlZV9lbnYoJnhlKTsKKwkJeGRsX2ZyZWVfc2NyaXB0KHgpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW5lX2NvbnRhaW5zX2FsbnVtKGNvbnN0IGNoYXIgKnB0ciwgbG9uZyBzaXplKQoreworCXdoaWxlIChzaXplLS0pCisJCWlmIChpc2FsbnVtKCh1bnNpZ25lZCBjaGFyKSoocHRyKyspKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpbmVzX2NvbnRhaW5fYWxudW0oeGRmZW52X3QgKnhlLCBpbnQgaSwgaW50IGNoZykKK3sKKwlmb3IgKDsgY2hnOyBjaGctLSwgaSsrKQorCQlpZiAobGluZV9jb250YWluc19hbG51bSh4ZS0+eGRmMi5yZWNzW2ldLT5wdHIsCisJCQkJeGUtPnhkZjIucmVjc1tpXS0+c2l6ZSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbWVyZ2VzIG0gYW5kIG0tPm5leHQsIG1hcmtpbmcgZXZlcnl0aGluZyBiZXR3ZWVuIHRob3NlIGh1bmtzCisgKiBhcyBjb25mbGljdGluZywgdG9vLgorICovCitzdGF0aWMgdm9pZCB4ZGxfbWVyZ2VfdHdvX2NvbmZsaWN0cyh4ZG1lcmdlX3QgKm0pCit7CisJeGRtZXJnZV90ICpuZXh0X20gPSBtLT5uZXh0OworCW0tPmNoZzEgPSBuZXh0X20tPmkxICsgbmV4dF9tLT5jaGcxIC0gbS0+aTE7CisJbS0+Y2hnMiA9IG5leHRfbS0+aTIgKyBuZXh0X20tPmNoZzIgLSBtLT5pMjsKKwltLT5uZXh0ID0gbmV4dF9tLT5uZXh0OworCWZyZWUobmV4dF9tKTsKK30KKworLyoKKyAqIElmIHRoZXJlIGFyZSBsZXNzIHRoYW4gMyBub24tY29uZmxpY3RpbmcgbGluZXMgYmV0d2VlbiBjb25mbGljdHMsCisgKiBpdCBhcHBlYXJzIHNpbXBsZXIgLS0gYmVjYXVzZSBpdCB0YWtlcyB1cCBsZXNzIChvciBhcyBtYW55KSBsaW5lcyAtLQorICogaWYgdGhlIGxpbmVzIGFyZSBtb3ZlZCBpbnRvIHRoZSBjb25mbGljdHMuCisgKi8KK3N0YXRpYyBpbnQgeGRsX3NpbXBsaWZ5X25vbl9jb25mbGljdHMoeGRmZW52X3QgKnhlMSwgeGRtZXJnZV90ICptLAorCQkJCSAgICAgIGludCBzaW1wbGlmeV9pZl9ub19hbG51bSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWlmICghbSkKKwkJcmV0dXJuIHJlc3VsdDsKKwlmb3IgKDs7KSB7CisJCXhkbWVyZ2VfdCAqbmV4dF9tID0gbS0+bmV4dDsKKwkJaW50IGJlZ2luLCBlbmQ7CisKKwkJaWYgKCFuZXh0X20pCisJCQlyZXR1cm4gcmVzdWx0OworCisJCWJlZ2luID0gbS0+aTEgKyBtLT5jaGcxOworCQllbmQgPSBuZXh0X20tPmkxOworCisJCWlmIChtLT5tb2RlICE9IDAgfHwgbmV4dF9tLT5tb2RlICE9IDAgfHwKKwkJICAgIChlbmQgLSBiZWdpbiA+IDMgJiYKKwkJICAgICAoIXNpbXBsaWZ5X2lmX25vX2FsbnVtIHx8CisJCSAgICAgIGxpbmVzX2NvbnRhaW5fYWxudW0oeGUxLCBiZWdpbiwgZW5kIC0gYmVnaW4pKSkpIHsKKwkJCW0gPSBuZXh0X207CisJCX0gZWxzZSB7CisJCQlyZXN1bHQrKzsKKwkJCXhkbF9tZXJnZV90d29fY29uZmxpY3RzKG0pOworCQl9CisJfQorfQorCisvKgorICogbGV2ZWwgPT0gMDogbWFyayBhbGwgb3ZlcmxhcHBpbmcgY2hhbmdlcyBhcyBjb25mbGljdAorICogbGV2ZWwgPT0gMTogbWFyayBvdmVybGFwcGluZyBjaGFuZ2VzIGFzIGNvbmZsaWN0IG9ubHkgaWYgbm90IGlkZW50aWNhbAorICogbGV2ZWwgPT0gMjogYW5hbHl6ZSBub24taWRlbnRpY2FsIGNoYW5nZXMgZm9yIG1pbmltYWwgY29uZmxpY3Qgc2V0CisgKiBsZXZlbCA9PSAzOiBhbmFseXplIG5vbi1pZGVudGljYWwgY2hhbmdlcyBmb3IgbWluaW1hbCBjb25mbGljdCBzZXQsIGJ1dAorICogICAgICAgICAgICAgdHJlYXQgaHVua3Mgbm90IGNvbnRhaW5pbmcgYW55IGxldHRlciBvciBudW1iZXIgYXMgY29uZmxpY3RpbmcKKyAqCisgKiByZXR1cm5zIDwgMCBvbiBlcnJvciwgPT0gMCBmb3Igbm8gY29uZmxpY3RzLCBlbHNlIG51bWJlciBvZiBjb25mbGljdHMKKyAqLworc3RhdGljIGludCB4ZGxfZG9fbWVyZ2UoeGRmZW52X3QgKnhlMSwgeGRjaGFuZ2VfdCAqeHNjcjEsCisJCXhkZmVudl90ICp4ZTIsIHhkY2hhbmdlX3QgKnhzY3IyLAorCQl4bXBhcmFtX3QgY29uc3QgKnhtcCwgbW1idWZmZXJfdCAqcmVzdWx0KQoreworCXhkbWVyZ2VfdCAqY2hhbmdlcywgKmM7CisJeHBwYXJhbV90IGNvbnN0ICp4cHAgPSAmeG1wLT54cHA7CisJY29uc3QgY2hhciAqY29uc3QgYW5jZXN0b3JfbmFtZSA9IHhtcC0+YW5jZXN0b3I7CisJY29uc3QgY2hhciAqY29uc3QgbmFtZTEgPSB4bXAtPmZpbGUxOworCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUyID0geG1wLT5maWxlMjsKKwlpbnQgaTAsIGkxLCBpMiwgY2hnMCwgY2hnMSwgY2hnMjsKKwlpbnQgbGV2ZWwgPSB4bXAtPmxldmVsOworCWludCBzdHlsZSA9IHhtcC0+c3R5bGU7CisJaW50IGZhdm9yID0geG1wLT5mYXZvcjsKKworCWlmIChzdHlsZSA9PSBYRExfTUVSR0VfRElGRjMpIHsKKwkJLyoKKwkJICogImRpZmYzIC1tIiBvdXRwdXQgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3IgYW55dGhpbmcKKwkJICogbW9yZSBhZ2dyZXNzaXZlIHRoYW4gWERMX01FUkdFX0VBR0VSLgorCQkgKi8KKwkJaWYgKFhETF9NRVJHRV9FQUdFUiA8IGxldmVsKQorCQkJbGV2ZWwgPSBYRExfTUVSR0VfRUFHRVI7CisJfQorCisJYyA9IGNoYW5nZXMgPSBOVUxMOworCisJd2hpbGUgKHhzY3IxICYmIHhzY3IyKSB7CisJCWlmICghY2hhbmdlcykKKwkJCWNoYW5nZXMgPSBjOworCQlpZiAoeHNjcjEtPmkxICsgeHNjcjEtPmNoZzEgPCB4c2NyMi0+aTEpIHsKKwkJCWkwID0geHNjcjEtPmkxOworCQkJaTEgPSB4c2NyMS0+aTI7CisJCQlpMiA9IHhzY3IyLT5pMiAtIHhzY3IyLT5pMSArIHhzY3IxLT5pMTsKKwkJCWNoZzAgPSB4c2NyMS0+Y2hnMTsKKwkJCWNoZzEgPSB4c2NyMS0+Y2hnMjsKKwkJCWNoZzIgPSB4c2NyMS0+Y2hnMTsKKwkJCWlmICh4ZGxfYXBwZW5kX21lcmdlKCZjLCAxLAorCQkJCQkgICAgIGkwLCBjaGcwLCBpMSwgY2hnMSwgaTIsIGNoZzIpKSB7CisJCQkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJeHNjcjEgPSB4c2NyMS0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh4c2NyMi0+aTEgKyB4c2NyMi0+Y2hnMSA8IHhzY3IxLT5pMSkgeworCQkJaTAgPSB4c2NyMi0+aTE7CisJCQlpMSA9IHhzY3IxLT5pMiAtIHhzY3IxLT5pMSArIHhzY3IyLT5pMTsKKwkJCWkyID0geHNjcjItPmkyOworCQkJY2hnMCA9IHhzY3IyLT5jaGcxOworCQkJY2hnMSA9IHhzY3IyLT5jaGcxOworCQkJY2hnMiA9IHhzY3IyLT5jaGcyOworCQkJaWYgKHhkbF9hcHBlbmRfbWVyZ2UoJmMsIDIsCisJCQkJCSAgICAgaTAsIGNoZzAsIGkxLCBjaGcxLCBpMiwgY2hnMikpIHsKKwkJCQl4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQl4c2NyMiA9IHhzY3IyLT5uZXh0OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGxldmVsID09IFhETF9NRVJHRV9NSU5JTUFMIHx8IHhzY3IxLT5pMSAhPSB4c2NyMi0+aTEgfHwKKwkJCQl4c2NyMS0+Y2hnMSAhPSB4c2NyMi0+Y2hnMSB8fAorCQkJCXhzY3IxLT5jaGcyICE9IHhzY3IyLT5jaGcyIHx8CisJCQkJeGRsX21lcmdlX2NtcF9saW5lcyh4ZTEsIHhzY3IxLT5pMiwKKwkJCQkJeGUyLCB4c2NyMi0+aTIsCisJCQkJCXhzY3IxLT5jaGcyLCB4cHAtPmZsYWdzKSkgeworCQkJLyogY29uZmxpY3QgKi8KKwkJCWludCBvZmYgPSB4c2NyMS0+aTEgLSB4c2NyMi0+aTE7CisJCQlpbnQgZmZvID0gb2ZmICsgeHNjcjEtPmNoZzEgLSB4c2NyMi0+Y2hnMTsKKworCQkJaTAgPSB4c2NyMS0+aTE7CisJCQlpMSA9IHhzY3IxLT5pMjsKKwkJCWkyID0geHNjcjItPmkyOworCQkJaWYgKG9mZiA+IDApIHsKKwkJCQlpMCAtPSBvZmY7CisJCQkJaTEgLT0gb2ZmOworCQkJfQorCQkJZWxzZQorCQkJCWkyICs9IG9mZjsKKwkJCWNoZzAgPSB4c2NyMS0+aTEgKyB4c2NyMS0+Y2hnMSAtIGkwOworCQkJY2hnMSA9IHhzY3IxLT5pMiArIHhzY3IxLT5jaGcyIC0gaTE7CisJCQljaGcyID0geHNjcjItPmkyICsgeHNjcjItPmNoZzIgLSBpMjsKKwkJCWlmIChmZm8gPCAwKSB7CisJCQkJY2hnMCAtPSBmZm87CisJCQkJY2hnMSAtPSBmZm87CisJCQl9IGVsc2UKKwkJCQljaGcyICs9IGZmbzsKKwkJCWlmICh4ZGxfYXBwZW5kX21lcmdlKCZjLCAwLAorCQkJCQkgICAgIGkwLCBjaGcwLCBpMSwgY2hnMSwgaTIsIGNoZzIpKSB7CisJCQkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisKKwkJaTEgPSB4c2NyMS0+aTEgKyB4c2NyMS0+Y2hnMTsKKwkJaTIgPSB4c2NyMi0+aTEgKyB4c2NyMi0+Y2hnMTsKKworCQlpZiAoaTEgPj0gaTIpCisJCQl4c2NyMiA9IHhzY3IyLT5uZXh0OworCQlpZiAoaTIgPj0gaTEpCisJCQl4c2NyMSA9IHhzY3IxLT5uZXh0OworCX0KKwl3aGlsZSAoeHNjcjEpIHsKKwkJaWYgKCFjaGFuZ2VzKQorCQkJY2hhbmdlcyA9IGM7CisJCWkwID0geHNjcjEtPmkxOworCQlpMSA9IHhzY3IxLT5pMjsKKwkJaTIgPSB4c2NyMS0+aTEgKyB4ZTItPnhkZjIubnJlYyAtIHhlMi0+eGRmMS5ucmVjOworCQljaGcwID0geHNjcjEtPmNoZzE7CisJCWNoZzEgPSB4c2NyMS0+Y2hnMjsKKwkJY2hnMiA9IHhzY3IxLT5jaGcxOworCQlpZiAoeGRsX2FwcGVuZF9tZXJnZSgmYywgMSwKKwkJCQkgICAgIGkwLCBjaGcwLCBpMSwgY2hnMSwgaTIsIGNoZzIpKSB7CisJCQl4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQl4c2NyMSA9IHhzY3IxLT5uZXh0OworCX0KKwl3aGlsZSAoeHNjcjIpIHsKKwkJaWYgKCFjaGFuZ2VzKQorCQkJY2hhbmdlcyA9IGM7CisJCWkwID0geHNjcjItPmkxOworCQlpMSA9IHhzY3IyLT5pMSArIHhlMS0+eGRmMi5ucmVjIC0geGUxLT54ZGYxLm5yZWM7CisJCWkyID0geHNjcjItPmkyOworCQljaGcwID0geHNjcjItPmNoZzE7CisJCWNoZzEgPSB4c2NyMi0+Y2hnMTsKKwkJY2hnMiA9IHhzY3IyLT5jaGcyOworCQlpZiAoeGRsX2FwcGVuZF9tZXJnZSgmYywgMiwKKwkJCQkgICAgIGkwLCBjaGcwLCBpMSwgY2hnMSwgaTIsIGNoZzIpKSB7CisJCQl4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQl4c2NyMiA9IHhzY3IyLT5uZXh0OworCX0KKwlpZiAoIWNoYW5nZXMpCisJCWNoYW5nZXMgPSBjOworCS8qIHJlZmluZSBjb25mbGljdHMgKi8KKwlpZiAoWERMX01FUkdFX1pFQUxPVVMgPD0gbGV2ZWwgJiYKKwkgICAgKHhkbF9yZWZpbmVfY29uZmxpY3RzKHhlMSwgeGUyLCBjaGFuZ2VzLCB4cHApIDwgMCB8fAorCSAgICAgeGRsX3NpbXBsaWZ5X25vbl9jb25mbGljdHMoeGUxLCBjaGFuZ2VzLAorCQkJCQlYRExfTUVSR0VfWkVBTE9VUyA8IGxldmVsKSA8IDApKSB7CisJCXhkbF9jbGVhbnVwX21lcmdlKGNoYW5nZXMpOworCQlyZXR1cm4gLTE7CisJfQorCS8qIG91dHB1dCAqLworCWlmIChyZXN1bHQpIHsKKwkJaW50IG1hcmtlcl9zaXplID0geG1wLT5tYXJrZXJfc2l6ZTsKKwkJaW50IHNpemUgPSB4ZGxfZmlsbF9tZXJnZV9idWZmZXIoeGUxLCBuYW1lMSwgeGUyLCBuYW1lMiwKKwkJCQkJCSBhbmNlc3Rvcl9uYW1lLAorCQkJCQkJIGZhdm9yLCBjaGFuZ2VzLCBOVUxMLCBzdHlsZSwKKwkJCQkJCSBtYXJrZXJfc2l6ZSk7CisJCXJlc3VsdC0+cHRyID0geGRsX21hbGxvYyhzaXplKTsKKwkJaWYgKCFyZXN1bHQtPnB0cikgeworCQkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmVzdWx0LT5zaXplID0gc2l6ZTsKKwkJeGRsX2ZpbGxfbWVyZ2VfYnVmZmVyKHhlMSwgbmFtZTEsIHhlMiwgbmFtZTIsCisJCQkJICAgICAgYW5jZXN0b3JfbmFtZSwgZmF2b3IsIGNoYW5nZXMsCisJCQkJICAgICAgcmVzdWx0LT5wdHIsIHN0eWxlLCBtYXJrZXJfc2l6ZSk7CisJfQorCXJldHVybiB4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKK30KKworaW50IHhkbF9tZXJnZShtbWZpbGVfdCAqb3JpZywgbW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwKKwkJeG1wYXJhbV90IGNvbnN0ICp4bXAsIG1tYnVmZmVyX3QgKnJlc3VsdCkKK3sKKwl4ZGNoYW5nZV90ICp4c2NyMSwgKnhzY3IyOworCXhkZmVudl90IHhlMSwgeGUyOworCWludCBzdGF0dXM7CisJeHBwYXJhbV90IGNvbnN0ICp4cHAgPSAmeG1wLT54cHA7CisKKwlyZXN1bHQtPnB0ciA9IE5VTEw7CisJcmVzdWx0LT5zaXplID0gMDsKKworCWlmICh4ZGxfZG9fZGlmZihvcmlnLCBtZjEsIHhwcCwgJnhlMSkgPCAwIHx8CisJCQl4ZGxfZG9fZGlmZihvcmlnLCBtZjIsIHhwcCwgJnhlMikgPCAwKSB7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHhkbF9jaGFuZ2VfY29tcGFjdCgmeGUxLnhkZjEsICZ4ZTEueGRmMiwgeHBwLT5mbGFncykgPCAwIHx8CisJICAgIHhkbF9jaGFuZ2VfY29tcGFjdCgmeGUxLnhkZjIsICZ4ZTEueGRmMSwgeHBwLT5mbGFncykgPCAwIHx8CisJICAgIHhkbF9idWlsZF9zY3JpcHQoJnhlMSwgJnhzY3IxKSA8IDApIHsKKwkJeGRsX2ZyZWVfZW52KCZ4ZTEpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICh4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlMi54ZGYxLCAmeGUyLnhkZjIsIHhwcC0+ZmxhZ3MpIDwgMCB8fAorCSAgICB4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlMi54ZGYyLCAmeGUyLnhkZjEsIHhwcC0+ZmxhZ3MpIDwgMCB8fAorCSAgICB4ZGxfYnVpbGRfc2NyaXB0KCZ4ZTIsICZ4c2NyMikgPCAwKSB7CisJCXhkbF9mcmVlX2VudigmeGUyKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdGF0dXMgPSAwOworCWlmICgheHNjcjEpIHsKKwkJcmVzdWx0LT5wdHIgPSB4ZGxfbWFsbG9jKG1mMi0+c2l6ZSk7CisJCW1lbWNweShyZXN1bHQtPnB0ciwgbWYyLT5wdHIsIG1mMi0+c2l6ZSk7CisJCXJlc3VsdC0+c2l6ZSA9IG1mMi0+c2l6ZTsKKwl9IGVsc2UgaWYgKCF4c2NyMikgeworCQlyZXN1bHQtPnB0ciA9IHhkbF9tYWxsb2MobWYxLT5zaXplKTsKKwkJbWVtY3B5KHJlc3VsdC0+cHRyLCBtZjEtPnB0ciwgbWYxLT5zaXplKTsKKwkJcmVzdWx0LT5zaXplID0gbWYxLT5zaXplOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IHhkbF9kb19tZXJnZSgmeGUxLCB4c2NyMSwKKwkJCQkgICAgICAmeGUyLCB4c2NyMiwKKwkJCQkgICAgICB4bXAsIHJlc3VsdCk7CisJfQorCXhkbF9mcmVlX3NjcmlwdCh4c2NyMSk7CisJeGRsX2ZyZWVfc2NyaXB0KHhzY3IyKTsKKworCXhkbF9mcmVlX2VudigmeGUxKTsKKwl4ZGxfZnJlZV9lbnYoJnhlMik7CisKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEveGRpZmYveHBhdGllbmNlLmMgYi94ZGlmZi94cGF0aWVuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGUxYTFhCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveHBhdGllbmNlLmMKQEAgLTAsMCArMSwzNTggQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSBEYXZpZGUgTGliZW56aSwgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKyNpbmNsdWRlICJ4aW5jbHVkZS5oIgorI2luY2x1ZGUgInh0eXBlcy5oIgorI2luY2x1ZGUgInhkaWZmLmgiCisKKy8qCisgKiBUaGUgYmFzaWMgaWRlYSBvZiBwYXRpZW5jZSBkaWZmIGlzIHRvIGZpbmQgbGluZXMgdGhhdCBhcmUgdW5pcXVlIGluCisgKiBib3RoIGZpbGVzLiAgVGhlc2UgYXJlIGludHVpdGl2ZWx5IHRoZSBvbmVzIHRoYXQgd2Ugd2FudCB0byBzZWUgYXMKKyAqIGNvbW1vbiBsaW5lcy4KKyAqCisgKiBUaGUgbWF4aW1hbCBvcmRlcmVkIHNlcXVlbmNlIG9mIHN1Y2ggbGluZSBwYWlycyAod2hlcmUgb3JkZXJlZCBtZWFucworICogdGhhdCB0aGUgb3JkZXIgaW4gdGhlIHNlcXVlbmNlIGFncmVlcyB3aXRoIHRoZSBvcmRlciBvZiB0aGUgbGluZXMgaW4KKyAqIGJvdGggZmlsZXMpIG5hdHVyYWxseSBkZWZpbmVzIGFuIGluaXRpYWwgc2V0IG9mIGNvbW1vbiBsaW5lcy4KKyAqCisgKiBOb3csIHRoZSBhbGdvcml0aG0gdHJpZXMgdG8gZXh0ZW5kIHRoZSBzZXQgb2YgY29tbW9uIGxpbmVzIGJ5IGdyb3dpbmcKKyAqIHRoZSBsaW5lIHJhbmdlcyB3aGVyZSB0aGUgZmlsZXMgaGF2ZSBpZGVudGljYWwgbGluZXMuCisgKgorICogQmV0d2VlbiB0aG9zZSBjb21tb24gbGluZXMsIHRoZSBwYXRpZW5jZSBkaWZmIGFsZ29yaXRobSBpcyBhcHBsaWVkCisgKiByZWN1cnNpdmVseSwgdW50aWwgbm8gdW5pcXVlIGxpbmUgcGFpcnMgY2FuIGJlIGZvdW5kOyB0aGVzZSBsaW5lIHJhbmdlcworICogYXJlIGhhbmRsZWQgYnkgdGhlIHdlbGwta25vd24gTXllcnMgYWxnb3JpdGhtLgorICovCisKKyNkZWZpbmUgTk9OX1VOSVFVRSBVTE9OR19NQVgKKworLyoKKyAqIFRoaXMgaXMgYSBoYXNoIG1hcHBpbmcgZnJvbSBsaW5lIGhhc2ggdG8gbGluZSBudW1iZXJzIGluIHRoZSBmaXJzdCBhbmQKKyAqIHNlY29uZCBmaWxlLgorICovCitzdHJ1Y3QgaGFzaG1hcCB7CisJaW50IG5yLCBhbGxvYzsKKwlzdHJ1Y3QgZW50cnkgeworCQl1bnNpZ25lZCBsb25nIGhhc2g7CisJCS8qCisJCSAqIDAgPSB1bnVzZWQgZW50cnksIDEgPSBmaXJzdCBsaW5lLCAyID0gc2Vjb25kLCBldGMuCisJCSAqIGxpbmUyIGlzIE5PTl9VTklRVUUgaWYgdGhlIGxpbmUgaXMgbm90IHVuaXF1ZQorCQkgKiBpbiBlaXRoZXIgdGhlIGZpcnN0IG9yIHRoZSBzZWNvbmQgZmlsZS4KKwkJICovCisJCXVuc2lnbmVkIGxvbmcgbGluZTEsIGxpbmUyOworCQkvKgorCQkgKiAibmV4dCIgJiAicHJldmlvdXMiIGFyZSB1c2VkIGZvciB0aGUgbG9uZ2VzdCBjb21tb24KKwkJICogc2VxdWVuY2U7CisJCSAqIGluaXRpYWxseSwgIm5leHQiIHJlZmxlY3RzIG9ubHkgdGhlIG9yZGVyIGluIGZpbGUxLgorCQkgKi8KKwkJc3RydWN0IGVudHJ5ICpuZXh0LCAqcHJldmlvdXM7CisJfSAqZW50cmllcywgKmZpcnN0LCAqbGFzdDsKKwkvKiB3ZXJlIGNvbW1vbiByZWNvcmRzIGZvdW5kPyAqLworCXVuc2lnbmVkIGxvbmcgaGFzX21hdGNoZXM7CisJbW1maWxlX3QgKmZpbGUxLCAqZmlsZTI7CisJeGRmZW52X3QgKmVudjsKKwl4cHBhcmFtX3QgY29uc3QgKnhwcDsKK307CisKKy8qIFRoZSBhcmd1bWVudCAicGFzcyIgaXMgMSBmb3IgdGhlIGZpcnN0IGZpbGUsIDIgZm9yIHRoZSBzZWNvbmQuICovCitzdGF0aWMgdm9pZCBpbnNlcnRfcmVjb3JkKGludCBsaW5lLCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBpbnQgcGFzcykKK3sKKwl4cmVjb3JkX3QgKipyZWNvcmRzID0gcGFzcyA9PSAxID8KKwkJbWFwLT5lbnYtPnhkZjEucmVjcyA6IG1hcC0+ZW52LT54ZGYyLnJlY3M7CisJeHJlY29yZF90ICpyZWNvcmQgPSByZWNvcmRzW2xpbmUgLSAxXSwgKm90aGVyOworCS8qCisJICogQWZ0ZXIgeGRsX3ByZXBhcmVfZW52KCkgKG9yIG1vcmUgcHJlY2lzZWx5LCBkdWUgdG8KKwkgKiB4ZGxfY2xhc3NpZnlfcmVjb3JkKCkpLCB0aGUgImhhIiBtZW1iZXIgb2YgdGhlIHJlY29yZHMgKEFLQSBsaW5lcykKKwkgKiBpcyBfbm90XyB0aGUgaGFzaCBhbnltb3JlLCBidXQgYSBsaW5lYXJpemVkIHZlcnNpb24gb2YgaXQuICBJbgorCSAqIG90aGVyIHdvcmRzLCB0aGUgImhhIiBtZW1iZXIgaXMgZ3VhcmFudGVlZCB0byBzdGFydCB3aXRoIDAgYW5kCisJICogdGhlIHNlY29uZCByZWNvcmQncyBoYSBjYW4gb25seSBiZSAwIG9yIDEsIGV0Yy4KKwkgKgorCSAqIFNvIHdlIG11bHRpcGx5IGhhIGJ5IDIgaW4gdGhlIGhvcGUgdGhhdCB0aGUgaGFzaGluZyB3YXMKKwkgKiAidW5pcXVlIGVub3VnaCIuCisJICovCisJaW50IGluZGV4ID0gKGludCkoKHJlY29yZC0+aGEgPDwgMSkgJSBtYXAtPmFsbG9jKTsKKworCXdoaWxlIChtYXAtPmVudHJpZXNbaW5kZXhdLmxpbmUxKSB7CisJCW90aGVyID0gbWFwLT5lbnYtPnhkZjEucmVjc1ttYXAtPmVudHJpZXNbaW5kZXhdLmxpbmUxIC0gMV07CisJCWlmIChtYXAtPmVudHJpZXNbaW5kZXhdLmhhc2ggIT0gcmVjb3JkLT5oYSB8fAorCQkJCSF4ZGxfcmVjbWF0Y2gocmVjb3JkLT5wdHIsIHJlY29yZC0+c2l6ZSwKKwkJCQkJb3RoZXItPnB0ciwgb3RoZXItPnNpemUsCisJCQkJCW1hcC0+eHBwLT5mbGFncykpIHsKKwkJCWlmICgrK2luZGV4ID49IG1hcC0+YWxsb2MpCisJCQkJaW5kZXggPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHBhc3MgPT0gMikKKwkJCW1hcC0+aGFzX21hdGNoZXMgPSAxOworCQlpZiAocGFzcyA9PSAxIHx8IG1hcC0+ZW50cmllc1tpbmRleF0ubGluZTIpCisJCQltYXAtPmVudHJpZXNbaW5kZXhdLmxpbmUyID0gTk9OX1VOSVFVRTsKKwkJZWxzZQorCQkJbWFwLT5lbnRyaWVzW2luZGV4XS5saW5lMiA9IGxpbmU7CisJCXJldHVybjsKKwl9CisJaWYgKHBhc3MgPT0gMikKKwkJcmV0dXJuOworCW1hcC0+ZW50cmllc1tpbmRleF0ubGluZTEgPSBsaW5lOworCW1hcC0+ZW50cmllc1tpbmRleF0uaGFzaCA9IHJlY29yZC0+aGE7CisJaWYgKCFtYXAtPmZpcnN0KQorCQltYXAtPmZpcnN0ID0gbWFwLT5lbnRyaWVzICsgaW5kZXg7CisJaWYgKG1hcC0+bGFzdCkgeworCQltYXAtPmxhc3QtPm5leHQgPSBtYXAtPmVudHJpZXMgKyBpbmRleDsKKwkJbWFwLT5lbnRyaWVzW2luZGV4XS5wcmV2aW91cyA9IG1hcC0+bGFzdDsKKwl9CisJbWFwLT5sYXN0ID0gbWFwLT5lbnRyaWVzICsgaW5kZXg7CisJbWFwLT5ucisrOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY2FsbGVkIGZvciBlYWNoIHJlY3Vyc2lvbiBpbnRvIHRoZSBpbnRlci1odW5rCisgKiBwYXJ0cywgYXMgcHJldmlvdXNseSBub24tdW5pcXVlIGxpbmVzIGNhbiBiZWNvbWUgdW5pcXVlIHdoZW4gYmVpbmcKKyAqIHJlc3RyaWN0ZWQgdG8gYSBzbWFsbGVyIHBhcnQgb2YgdGhlIGZpbGVzLgorICoKKyAqIEl0IGlzIGFzc3VtZWQgdGhhdCBlbnYgaGFzIGJlZW4gcHJlcGFyZWQgdXNpbmcgeGRsX3ByZXBhcmUoKS4KKyAqLworc3RhdGljIGludCBmaWxsX2hhc2htYXAobW1maWxlX3QgKmZpbGUxLCBtbWZpbGVfdCAqZmlsZTIsCisJCXhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGZlbnZfdCAqZW52LAorCQlzdHJ1Y3QgaGFzaG1hcCAqcmVzdWx0LAorCQlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwlyZXN1bHQtPmZpbGUxID0gZmlsZTE7CisJcmVzdWx0LT5maWxlMiA9IGZpbGUyOworCXJlc3VsdC0+eHBwID0geHBwOworCXJlc3VsdC0+ZW52ID0gZW52OworCisJLyogV2Uga25vdyBleGFjdGx5IGhvdyBsYXJnZSB3ZSB3YW50IHRoZSBoYXNoIG1hcCAqLworCXJlc3VsdC0+YWxsb2MgPSBjb3VudDEgKiAyOworCXJlc3VsdC0+ZW50cmllcyA9IChzdHJ1Y3QgZW50cnkgKikKKwkJeGRsX21hbGxvYyhyZXN1bHQtPmFsbG9jICogc2l6ZW9mKHN0cnVjdCBlbnRyeSkpOworCWlmICghcmVzdWx0LT5lbnRyaWVzKQorCQlyZXR1cm4gLTE7CisJbWVtc2V0KHJlc3VsdC0+ZW50cmllcywgMCwgcmVzdWx0LT5hbGxvYyAqIHNpemVvZihzdHJ1Y3QgZW50cnkpKTsKKworCS8qIEZpcnN0LCBmaWxsIHdpdGggZW50cmllcyBmcm9tIHRoZSBmaXJzdCBmaWxlICovCisJd2hpbGUgKGNvdW50MS0tKQorCQlpbnNlcnRfcmVjb3JkKGxpbmUxKyssIHJlc3VsdCwgMSk7CisKKwkvKiBUaGVuIHNlYXJjaCBmb3IgbWF0Y2hlcyBpbiB0aGUgc2Vjb25kIGZpbGUgKi8KKwl3aGlsZSAoY291bnQyLS0pCisJCWluc2VydF9yZWNvcmQobGluZTIrKywgcmVzdWx0LCAyKTsKKworCXJldHVybiAwOworfQorCisvKgorICogRmluZCB0aGUgbG9uZ2VzdCBzZXF1ZW5jZSB3aXRoIGEgc21hbGxlciBsYXN0IGVsZW1lbnQgKG1lYW5pbmcgYSBzbWFsbGVyCisgKiBsaW5lMiwgYXMgd2UgY29uc3RydWN0IHRoZSBzZXF1ZW5jZSB3aXRoIGVudHJpZXMgb3JkZXJlZCBieSBsaW5lMSkuCisgKi8KK3N0YXRpYyBpbnQgYmluYXJ5X3NlYXJjaChzdHJ1Y3QgZW50cnkgKipzZXF1ZW5jZSwgaW50IGxvbmdlc3QsCisJCXN0cnVjdCBlbnRyeSAqZW50cnkpCit7CisJaW50IGxlZnQgPSAtMSwgcmlnaHQgPSBsb25nZXN0OworCisJd2hpbGUgKGxlZnQgKyAxIDwgcmlnaHQpIHsKKwkJaW50IG1pZGRsZSA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKKwkJLyogYnkgY29uc3RydWN0aW9uLCBubyB0d28gZW50cmllcyBjYW4gYmUgZXF1YWwgKi8KKwkJaWYgKHNlcXVlbmNlW21pZGRsZV0tPmxpbmUyID4gZW50cnktPmxpbmUyKQorCQkJcmlnaHQgPSBtaWRkbGU7CisJCWVsc2UKKwkJCWxlZnQgPSBtaWRkbGU7CisJfQorCS8qIHJldHVybiB0aGUgaW5kZXggaW4gInNlcXVlbmNlIiwgX25vdF8gdGhlIHNlcXVlbmNlIGxlbmd0aCAqLworCXJldHVybiBsZWZ0OworfQorCisvKgorICogVGhlIGlkZWEgaXMgdG8gc3RhcnQgd2l0aCB0aGUgbGlzdCBvZiBjb21tb24gdW5pcXVlIGxpbmVzIHNvcnRlZCBieQorICogdGhlIG9yZGVyIGluIGZpbGUxLiAgRm9yIGVhY2ggb2YgdGhlc2UgcGFpcnMsIHRoZSBsb25nZXN0IChwYXJ0aWFsKQorICogc2VxdWVuY2Ugd2hvc2UgbGFzdCBlbGVtZW50J3MgbGluZTIgaXMgc21hbGxlciBpcyBkZXRlcm1pbmVkLgorICoKKyAqIEZvciBlZmZpY2llbmN5LCB0aGUgc2VxdWVuY2VzIGFyZSBrZXB0IGluIGEgbGlzdCBjb250YWluaW5nIGV4YWN0bHkgb25lCisgKiBpdGVtIHBlciBzZXF1ZW5jZSBsZW5ndGg6IHRoZSBzZXF1ZW5jZSB3aXRoIHRoZSBzbWFsbGVzdCBsYXN0CisgKiBlbGVtZW50IChpbiB0ZXJtcyBvZiBsaW5lMikuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKmZpbmRfbG9uZ2VzdF9jb21tb25fc2VxdWVuY2Uoc3RydWN0IGhhc2htYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgZW50cnkgKipzZXF1ZW5jZSA9IHhkbF9tYWxsb2MobWFwLT5uciAqIHNpemVvZihzdHJ1Y3QgZW50cnkgKikpOworCWludCBsb25nZXN0ID0gMCwgaTsKKwlzdHJ1Y3QgZW50cnkgKmVudHJ5OworCisJZm9yIChlbnRyeSA9IG1hcC0+Zmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CisJCWlmICghZW50cnktPmxpbmUyIHx8IGVudHJ5LT5saW5lMiA9PSBOT05fVU5JUVVFKQorCQkJY29udGludWU7CisJCWkgPSBiaW5hcnlfc2VhcmNoKHNlcXVlbmNlLCBsb25nZXN0LCBlbnRyeSk7CisJCWVudHJ5LT5wcmV2aW91cyA9IGkgPCAwID8gTlVMTCA6IHNlcXVlbmNlW2ldOworCQlzZXF1ZW5jZVsrK2ldID0gZW50cnk7CisJCWlmIChpID09IGxvbmdlc3QpCisJCQlsb25nZXN0Kys7CisJfQorCisJLyogTm8gY29tbW9uIHVuaXF1ZSBsaW5lcyB3ZXJlIGZvdW5kICovCisJaWYgKCFsb25nZXN0KSB7CisJCXhkbF9mcmVlKHNlcXVlbmNlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogSXRlcmF0ZSBzdGFydGluZyBhdCB0aGUgbGFzdCBlbGVtZW50LCBhZGp1c3RpbmcgdGhlICJuZXh0IiBtZW1iZXJzICovCisJZW50cnkgPSBzZXF1ZW5jZVtsb25nZXN0IC0gMV07CisJZW50cnktPm5leHQgPSBOVUxMOworCXdoaWxlIChlbnRyeS0+cHJldmlvdXMpIHsKKwkJZW50cnktPnByZXZpb3VzLT5uZXh0ID0gZW50cnk7CisJCWVudHJ5ID0gZW50cnktPnByZXZpb3VzOworCX0KKwl4ZGxfZnJlZShzZXF1ZW5jZSk7CisJcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW50IG1hdGNoKHN0cnVjdCBoYXNobWFwICptYXAsIGludCBsaW5lMSwgaW50IGxpbmUyKQoreworCXhyZWNvcmRfdCAqcmVjb3JkMSA9IG1hcC0+ZW52LT54ZGYxLnJlY3NbbGluZTEgLSAxXTsKKwl4cmVjb3JkX3QgKnJlY29yZDIgPSBtYXAtPmVudi0+eGRmMi5yZWNzW2xpbmUyIC0gMV07CisJcmV0dXJuIHhkbF9yZWNtYXRjaChyZWNvcmQxLT5wdHIsIHJlY29yZDEtPnNpemUsCisJCXJlY29yZDItPnB0ciwgcmVjb3JkMi0+c2l6ZSwgbWFwLT54cHAtPmZsYWdzKTsKK30KKworc3RhdGljIGludCBwYXRpZW5jZV9kaWZmKG1tZmlsZV90ICpmaWxlMSwgbW1maWxlX3QgKmZpbGUyLAorCQl4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudiwKKwkJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpOworCitzdGF0aWMgaW50IHdhbGtfY29tbW9uX3NlcXVlbmNlKHN0cnVjdCBoYXNobWFwICptYXAsIHN0cnVjdCBlbnRyeSAqZmlyc3QsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCWludCBlbmQxID0gbGluZTEgKyBjb3VudDEsIGVuZDIgPSBsaW5lMiArIGNvdW50MjsKKwlpbnQgbmV4dDEsIG5leHQyOworCisJZm9yICg7OykgeworCQkvKiBUcnkgdG8gZ3JvdyB0aGUgbGluZSByYW5nZXMgb2YgY29tbW9uIGxpbmVzICovCisJCWlmIChmaXJzdCkgeworCQkJbmV4dDEgPSBmaXJzdC0+bGluZTE7CisJCQluZXh0MiA9IGZpcnN0LT5saW5lMjsKKwkJCXdoaWxlIChuZXh0MSA+IGxpbmUxICYmIG5leHQyID4gbGluZTIgJiYKKwkJCQkJbWF0Y2gobWFwLCBuZXh0MSAtIDEsIG5leHQyIC0gMSkpIHsKKwkJCQluZXh0MS0tOworCQkJCW5leHQyLS07CisJCQl9CisJCX0gZWxzZSB7CisJCQluZXh0MSA9IGVuZDE7CisJCQluZXh0MiA9IGVuZDI7CisJCX0KKwkJd2hpbGUgKGxpbmUxIDwgbmV4dDEgJiYgbGluZTIgPCBuZXh0MiAmJgorCQkJCW1hdGNoKG1hcCwgbGluZTEsIGxpbmUyKSkgeworCQkJbGluZTErKzsKKwkJCWxpbmUyKys7CisJCX0KKworCQkvKiBSZWN1cnNlICovCisJCWlmIChuZXh0MSA+IGxpbmUxIHx8IG5leHQyID4gbGluZTIpIHsKKwkJCXN0cnVjdCBoYXNobWFwIHN1Ym1hcDsKKworCQkJbWVtc2V0KCZzdWJtYXAsIDAsIHNpemVvZihzdWJtYXApKTsKKwkJCWlmIChwYXRpZW5jZV9kaWZmKG1hcC0+ZmlsZTEsIG1hcC0+ZmlsZTIsCisJCQkJCW1hcC0+eHBwLCBtYXAtPmVudiwKKwkJCQkJbGluZTEsIG5leHQxIC0gbGluZTEsCisJCQkJCWxpbmUyLCBuZXh0MiAtIGxpbmUyKSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoIWZpcnN0KQorCQkJcmV0dXJuIDA7CisKKwkJd2hpbGUgKGZpcnN0LT5uZXh0ICYmCisJCQkJZmlyc3QtPm5leHQtPmxpbmUxID09IGZpcnN0LT5saW5lMSArIDEgJiYKKwkJCQlmaXJzdC0+bmV4dC0+bGluZTIgPT0gZmlyc3QtPmxpbmUyICsgMSkKKwkJCWZpcnN0ID0gZmlyc3QtPm5leHQ7CisKKwkJbGluZTEgPSBmaXJzdC0+bGluZTEgKyAxOworCQlsaW5lMiA9IGZpcnN0LT5saW5lMiArIDE7CisKKwkJZmlyc3QgPSBmaXJzdC0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZmFsbF9iYWNrX3RvX2NsYXNzaWNfZGlmZihzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwl4cHBhcmFtX3QgeHBwOworCXhwcC5mbGFncyA9IG1hcC0+eHBwLT5mbGFncyAmIH5YREZfRElGRl9BTEdPUklUSE1fTUFTSzsKKworCXJldHVybiB4ZGxfZmFsbF9iYWNrX2RpZmYobWFwLT5lbnYsICZ4cHAsCisJCQkJICBsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKTsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IGZpbmQgdGhlIGxvbmdlc3QgY29tbW9uIHNlcXVlbmNlIG9mIHVuaXF1ZSBsaW5lcywKKyAqIGFuZCBpZiBub25lIHdhcyBmb3VuZCwgYXNrIHhkbF9kb19kaWZmKCkgdG8gZG8gdGhlIGpvYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBlbnYgd2FzIHByZXBhcmVkIHdpdGggeGRsX3ByZXBhcmVfZW52KCkuCisgKi8KK3N0YXRpYyBpbnQgcGF0aWVuY2VfZGlmZihtbWZpbGVfdCAqZmlsZTEsIG1tZmlsZV90ICpmaWxlMiwKKwkJeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCXN0cnVjdCBoYXNobWFwIG1hcDsKKwlzdHJ1Y3QgZW50cnkgKmZpcnN0OworCWludCByZXN1bHQgPSAwOworCisJLyogdHJpdmlhbCBjYXNlOiBvbmUgc2lkZSBpcyBlbXB0eSAqLworCWlmICghY291bnQxKSB7CisJCXdoaWxlKGNvdW50Mi0tKQorCQkJZW52LT54ZGYyLnJjaGdbbGluZTIrKyAtIDFdID0gMTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghY291bnQyKSB7CisJCXdoaWxlKGNvdW50MS0tKQorCQkJZW52LT54ZGYxLnJjaGdbbGluZTErKyAtIDFdID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWVtc2V0KCZtYXAsIDAsIHNpemVvZihtYXApKTsKKwlpZiAoZmlsbF9oYXNobWFwKGZpbGUxLCBmaWxlMiwgeHBwLCBlbnYsICZtYXAsCisJCQlsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKSkKKwkJcmV0dXJuIC0xOworCisJLyogYXJlIHRoZXJlIGFueSBtYXRjaGluZyBsaW5lcyBhdCBhbGw/ICovCisJaWYgKCFtYXAuaGFzX21hdGNoZXMpIHsKKwkJd2hpbGUoY291bnQxLS0pCisJCQllbnYtPnhkZjEucmNoZ1tsaW5lMSsrIC0gMV0gPSAxOworCQl3aGlsZShjb3VudDItLSkKKwkJCWVudi0+eGRmMi5yY2hnW2xpbmUyKysgLSAxXSA9IDE7CisJCXhkbF9mcmVlKG1hcC5lbnRyaWVzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZmlyc3QgPSBmaW5kX2xvbmdlc3RfY29tbW9uX3NlcXVlbmNlKCZtYXApOworCWlmIChmaXJzdCkKKwkJcmVzdWx0ID0gd2Fsa19jb21tb25fc2VxdWVuY2UoJm1hcCwgZmlyc3QsCisJCQlsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKTsKKwllbHNlCisJCXJlc3VsdCA9IGZhbGxfYmFja190b19jbGFzc2ljX2RpZmYoJm1hcCwKKwkJCWxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworCisJeGRsX2ZyZWUobWFwLmVudHJpZXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCB4ZGxfZG9fcGF0aWVuY2VfZGlmZihtbWZpbGVfdCAqZmlsZTEsIG1tZmlsZV90ICpmaWxlMiwKKwkJeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYpCit7CisJaWYgKHhkbF9wcmVwYXJlX2VudihmaWxlMSwgZmlsZTIsIHhwcCwgZW52KSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIGVudmlyb25tZW50IGlzIGNsZWFuZWQgdXAgaW4geGRsX2RpZmYoKSAqLworCXJldHVybiBwYXRpZW5jZV9kaWZmKGZpbGUxLCBmaWxlMiwgeHBwLCBlbnYsCisJCQkxLCBlbnYtPnhkZjEubnJlYywgMSwgZW52LT54ZGYyLm5yZWMpOworfQpkaWZmIC0tZ2l0IGEveGRpZmYveHByZXBhcmUuYyBiL3hkaWZmL3hwcmVwYXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhMjJjNgotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hwcmVwYXJlLmMKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaW5jbHVkZSAieGluY2x1ZGUuaCIKKworCisjZGVmaW5lIFhETF9LUERJU19SVU4gNAorI2RlZmluZSBYRExfTUFYX0VRTElNSVQgMTAyNAorI2RlZmluZSBYRExfU0lNU0NBTl9XSU5ET1cgMTAwCisjZGVmaW5lIFhETF9HVUVTU19OTElORVMxIDI1NgorI2RlZmluZSBYRExfR1VFU1NfTkxJTkVTMiAyMAorCisKK3R5cGVkZWYgc3RydWN0IHNfeGRsY2xhc3MgeworCXN0cnVjdCBzX3hkbGNsYXNzICpuZXh0OworCXVuc2lnbmVkIGxvbmcgaGE7CisJY2hhciBjb25zdCAqbGluZTsKKwlsb25nIHNpemU7CisJbG9uZyBpZHg7CisJbG9uZyBsZW4xLCBsZW4yOworfSB4ZGxjbGFzc190OworCit0eXBlZGVmIHN0cnVjdCBzX3hkbGNsYXNzaWZpZXIgeworCXVuc2lnbmVkIGludCBoYml0czsKKwlsb25nIGhzaXplOworCXhkbGNsYXNzX3QgKipyY2hhc2g7CisJY2hhc3RvcmVfdCBuY2hhOworCXhkbGNsYXNzX3QgKipyY3JlY3M7CisJbG9uZyBhbGxvYzsKKwlsb25nIGNvdW50OworCWxvbmcgZmxhZ3M7Cit9IHhkbGNsYXNzaWZpZXJfdDsKKworCisKKworc3RhdGljIGludCB4ZGxfaW5pdF9jbGFzc2lmaWVyKHhkbGNsYXNzaWZpZXJfdCAqY2YsIGxvbmcgc2l6ZSwgbG9uZyBmbGFncyk7CitzdGF0aWMgdm9pZCB4ZGxfZnJlZV9jbGFzc2lmaWVyKHhkbGNsYXNzaWZpZXJfdCAqY2YpOworc3RhdGljIGludCB4ZGxfY2xhc3NpZnlfcmVjb3JkKHVuc2lnbmVkIGludCBwYXNzLCB4ZGxjbGFzc2lmaWVyX3QgKmNmLCB4cmVjb3JkX3QgKipyaGFzaCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgaGJpdHMsIHhyZWNvcmRfdCAqcmVjKTsKK3N0YXRpYyBpbnQgeGRsX3ByZXBhcmVfY3R4KHVuc2lnbmVkIGludCBwYXNzLCBtbWZpbGVfdCAqbWYsIGxvbmcgbmFyZWMsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQkJICAgeGRsY2xhc3NpZmllcl90ICpjZiwgeGRmaWxlX3QgKnhkZik7CitzdGF0aWMgdm9pZCB4ZGxfZnJlZV9jdHgoeGRmaWxlX3QgKnhkZik7CitzdGF0aWMgaW50IHhkbF9jbGVhbl9tbWF0Y2goY2hhciBjb25zdCAqZGlzLCBsb25nIGksIGxvbmcgcywgbG9uZyBlKTsKK3N0YXRpYyBpbnQgeGRsX2NsZWFudXBfcmVjb3Jkcyh4ZGxjbGFzc2lmaWVyX3QgKmNmLCB4ZGZpbGVfdCAqeGRmMSwgeGRmaWxlX3QgKnhkZjIpOworc3RhdGljIGludCB4ZGxfdHJpbV9lbmRzKHhkZmlsZV90ICp4ZGYxLCB4ZGZpbGVfdCAqeGRmMik7CitzdGF0aWMgaW50IHhkbF9vcHRpbWl6ZV9jdHhzKHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhkZmlsZV90ICp4ZGYxLCB4ZGZpbGVfdCAqeGRmMik7CisKKworCisKK3N0YXRpYyBpbnQgeGRsX2luaXRfY2xhc3NpZmllcih4ZGxjbGFzc2lmaWVyX3QgKmNmLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpIHsKKwljZi0+ZmxhZ3MgPSBmbGFnczsKKworCWNmLT5oYml0cyA9IHhkbF9oYXNoYml0cygodW5zaWduZWQgaW50KSBzaXplKTsKKwljZi0+aHNpemUgPSAxIDw8IGNmLT5oYml0czsKKworCWlmICh4ZGxfY2hhX2luaXQoJmNmLT5uY2hhLCBzaXplb2YoeGRsY2xhc3NfdCksIHNpemUgLyA0ICsgMSkgPCAwKSB7CisKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIShjZi0+cmNoYXNoID0gKHhkbGNsYXNzX3QgKiopIHhkbF9tYWxsb2MoY2YtPmhzaXplICogc2l6ZW9mKHhkbGNsYXNzX3QgKikpKSkgeworCisJCXhkbF9jaGFfZnJlZSgmY2YtPm5jaGEpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChjZi0+cmNoYXNoLCAwLCBjZi0+aHNpemUgKiBzaXplb2YoeGRsY2xhc3NfdCAqKSk7CisKKwljZi0+YWxsb2MgPSBzaXplOworCWlmICghKGNmLT5yY3JlY3MgPSAoeGRsY2xhc3NfdCAqKikgeGRsX21hbGxvYyhjZi0+YWxsb2MgKiBzaXplb2YoeGRsY2xhc3NfdCAqKSkpKSB7CisKKwkJeGRsX2ZyZWUoY2YtPnJjaGFzaCk7CisJCXhkbF9jaGFfZnJlZSgmY2YtPm5jaGEpOworCQlyZXR1cm4gLTE7CisJfQorCisJY2YtPmNvdW50ID0gMDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHhkbF9mcmVlX2NsYXNzaWZpZXIoeGRsY2xhc3NpZmllcl90ICpjZikgeworCisJeGRsX2ZyZWUoY2YtPnJjcmVjcyk7CisJeGRsX2ZyZWUoY2YtPnJjaGFzaCk7CisJeGRsX2NoYV9mcmVlKCZjZi0+bmNoYSk7Cit9CisKKworc3RhdGljIGludCB4ZGxfY2xhc3NpZnlfcmVjb3JkKHVuc2lnbmVkIGludCBwYXNzLCB4ZGxjbGFzc2lmaWVyX3QgKmNmLCB4cmVjb3JkX3QgKipyaGFzaCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgaGJpdHMsIHhyZWNvcmRfdCAqcmVjKSB7CisJbG9uZyBoaTsKKwljaGFyIGNvbnN0ICpsaW5lOworCXhkbGNsYXNzX3QgKnJjcmVjOworCXhkbGNsYXNzX3QgKipyY3JlY3M7CisKKwlsaW5lID0gcmVjLT5wdHI7CisJaGkgPSAobG9uZykgWERMX0hBU0hMT05HKHJlYy0+aGEsIGNmLT5oYml0cyk7CisJZm9yIChyY3JlYyA9IGNmLT5yY2hhc2hbaGldOyByY3JlYzsgcmNyZWMgPSByY3JlYy0+bmV4dCkKKwkJaWYgKHJjcmVjLT5oYSA9PSByZWMtPmhhICYmCisJCQkJeGRsX3JlY21hdGNoKHJjcmVjLT5saW5lLCByY3JlYy0+c2l6ZSwKKwkJCQkJcmVjLT5wdHIsIHJlYy0+c2l6ZSwgY2YtPmZsYWdzKSkKKwkJCWJyZWFrOworCisJaWYgKCFyY3JlYykgeworCQlpZiAoIShyY3JlYyA9IHhkbF9jaGFfYWxsb2MoJmNmLT5uY2hhKSkpIHsKKworCQkJcmV0dXJuIC0xOworCQl9CisJCXJjcmVjLT5pZHggPSBjZi0+Y291bnQrKzsKKwkJaWYgKGNmLT5jb3VudCA+IGNmLT5hbGxvYykgeworCQkJY2YtPmFsbG9jICo9IDI7CisJCQlpZiAoIShyY3JlY3MgPSAoeGRsY2xhc3NfdCAqKikgeGRsX3JlYWxsb2MoY2YtPnJjcmVjcywgY2YtPmFsbG9jICogc2l6ZW9mKHhkbGNsYXNzX3QgKikpKSkgeworCisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJY2YtPnJjcmVjcyA9IHJjcmVjczsKKwkJfQorCQljZi0+cmNyZWNzW3JjcmVjLT5pZHhdID0gcmNyZWM7CisJCXJjcmVjLT5saW5lID0gbGluZTsKKwkJcmNyZWMtPnNpemUgPSByZWMtPnNpemU7CisJCXJjcmVjLT5oYSA9IHJlYy0+aGE7CisJCXJjcmVjLT5sZW4xID0gcmNyZWMtPmxlbjIgPSAwOworCQlyY3JlYy0+bmV4dCA9IGNmLT5yY2hhc2hbaGldOworCQljZi0+cmNoYXNoW2hpXSA9IHJjcmVjOworCX0KKworCShwYXNzID09IDEpID8gcmNyZWMtPmxlbjErKyA6IHJjcmVjLT5sZW4yKys7CisKKwlyZWMtPmhhID0gKHVuc2lnbmVkIGxvbmcpIHJjcmVjLT5pZHg7CisKKwloaSA9IChsb25nKSBYRExfSEFTSExPTkcocmVjLT5oYSwgaGJpdHMpOworCXJlYy0+bmV4dCA9IHJoYXNoW2hpXTsKKwlyaGFzaFtoaV0gPSByZWM7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHhkbF9wcmVwYXJlX2N0eCh1bnNpZ25lZCBpbnQgcGFzcywgbW1maWxlX3QgKm1mLCBsb25nIG5hcmVjLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJCSAgIHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhkZmlsZV90ICp4ZGYpIHsKKwl1bnNpZ25lZCBpbnQgaGJpdHM7CisJbG9uZyBucmVjLCBoc2l6ZSwgYnNpemU7CisJdW5zaWduZWQgbG9uZyBoYXY7CisJY2hhciBjb25zdCAqYmxrLCAqY3VyLCAqdG9wLCAqcHJldjsKKwl4cmVjb3JkX3QgKmNyZWM7CisJeHJlY29yZF90ICoqcmVjcywgKipycmVjczsKKwl4cmVjb3JkX3QgKipyaGFzaDsKKwl1bnNpZ25lZCBsb25nICpoYTsKKwljaGFyICpyY2hnOworCWxvbmcgKnJpbmRleDsKKworCWhhID0gTlVMTDsKKwlyaW5kZXggPSBOVUxMOworCXJjaGcgPSBOVUxMOworCXJoYXNoID0gTlVMTDsKKwlyZWNzID0gTlVMTDsKKworCWlmICh4ZGxfY2hhX2luaXQoJnhkZi0+cmNoYSwgc2l6ZW9mKHhyZWNvcmRfdCksIG5hcmVjIC8gNCArIDEpIDwgMCkKKwkJZ290byBhYm9ydDsKKwlpZiAoIShyZWNzID0gKHhyZWNvcmRfdCAqKikgeGRsX21hbGxvYyhuYXJlYyAqIHNpemVvZih4cmVjb3JkX3QgKikpKSkKKwkJZ290byBhYm9ydDsKKworCWlmIChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgPT0gWERGX0hJU1RPR1JBTV9ESUZGKQorCQloYml0cyA9IGhzaXplID0gMDsKKwllbHNlIHsKKwkJaGJpdHMgPSB4ZGxfaGFzaGJpdHMoKHVuc2lnbmVkIGludCkgbmFyZWMpOworCQloc2l6ZSA9IDEgPDwgaGJpdHM7CisJCWlmICghKHJoYXNoID0gKHhyZWNvcmRfdCAqKikgeGRsX21hbGxvYyhoc2l6ZSAqIHNpemVvZih4cmVjb3JkX3QgKikpKSkKKwkJCWdvdG8gYWJvcnQ7CisJCW1lbXNldChyaGFzaCwgMCwgaHNpemUgKiBzaXplb2YoeHJlY29yZF90ICopKTsKKwl9CisKKwlucmVjID0gMDsKKwlpZiAoKGN1ciA9IGJsayA9IHhkbF9tbWZpbGVfZmlyc3QobWYsICZic2l6ZSkpICE9IE5VTEwpIHsKKwkJZm9yICh0b3AgPSBibGsgKyBic2l6ZTsgY3VyIDwgdG9wOyApIHsKKwkJCXByZXYgPSBjdXI7CisJCQloYXYgPSB4ZGxfaGFzaF9yZWNvcmQoJmN1ciwgdG9wLCB4cHAtPmZsYWdzKTsKKwkJCWlmIChucmVjID49IG5hcmVjKSB7CisJCQkJbmFyZWMgKj0gMjsKKwkJCQlpZiAoIShycmVjcyA9ICh4cmVjb3JkX3QgKiopIHhkbF9yZWFsbG9jKHJlY3MsIG5hcmVjICogc2l6ZW9mKHhyZWNvcmRfdCAqKSkpKQorCQkJCQlnb3RvIGFib3J0OworCQkJCXJlY3MgPSBycmVjczsKKwkJCX0KKwkJCWlmICghKGNyZWMgPSB4ZGxfY2hhX2FsbG9jKCZ4ZGYtPnJjaGEpKSkKKwkJCQlnb3RvIGFib3J0OworCQkJY3JlYy0+cHRyID0gcHJldjsKKwkJCWNyZWMtPnNpemUgPSAobG9uZykgKGN1ciAtIHByZXYpOworCQkJY3JlYy0+aGEgPSBoYXY7CisJCQlyZWNzW25yZWMrK10gPSBjcmVjOworCisJCQlpZiAoKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSAhPSBYREZfSElTVE9HUkFNX0RJRkYpICYmCisJCQkgICAgeGRsX2NsYXNzaWZ5X3JlY29yZChwYXNzLCBjZiwgcmhhc2gsIGhiaXRzLCBjcmVjKSA8IDApCisJCQkJZ290byBhYm9ydDsKKwkJfQorCX0KKworCWlmICghKHJjaGcgPSAoY2hhciAqKSB4ZGxfbWFsbG9jKChucmVjICsgMikgKiBzaXplb2YoY2hhcikpKSkKKwkJZ290byBhYm9ydDsKKwltZW1zZXQocmNoZywgMCwgKG5yZWMgKyAyKSAqIHNpemVvZihjaGFyKSk7CisKKwlpZiAoIShyaW5kZXggPSAobG9uZyAqKSB4ZGxfbWFsbG9jKChucmVjICsgMSkgKiBzaXplb2YobG9uZykpKSkKKwkJZ290byBhYm9ydDsKKwlpZiAoIShoYSA9ICh1bnNpZ25lZCBsb25nICopIHhkbF9tYWxsb2MoKG5yZWMgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpKQorCQlnb3RvIGFib3J0OworCisJeGRmLT5ucmVjID0gbnJlYzsKKwl4ZGYtPnJlY3MgPSByZWNzOworCXhkZi0+aGJpdHMgPSBoYml0czsKKwl4ZGYtPnJoYXNoID0gcmhhc2g7CisJeGRmLT5yY2hnID0gcmNoZyArIDE7CisJeGRmLT5yaW5kZXggPSByaW5kZXg7CisJeGRmLT5ucmVmZiA9IDA7CisJeGRmLT5oYSA9IGhhOworCXhkZi0+ZHN0YXJ0ID0gMDsKKwl4ZGYtPmRlbmQgPSBucmVjIC0gMTsKKworCXJldHVybiAwOworCithYm9ydDoKKwl4ZGxfZnJlZShoYSk7CisJeGRsX2ZyZWUocmluZGV4KTsKKwl4ZGxfZnJlZShyY2hnKTsKKwl4ZGxfZnJlZShyaGFzaCk7CisJeGRsX2ZyZWUocmVjcyk7CisJeGRsX2NoYV9mcmVlKCZ4ZGYtPnJjaGEpOworCXJldHVybiAtMTsKK30KKworCitzdGF0aWMgdm9pZCB4ZGxfZnJlZV9jdHgoeGRmaWxlX3QgKnhkZikgeworCisJeGRsX2ZyZWUoeGRmLT5yaGFzaCk7CisJeGRsX2ZyZWUoeGRmLT5yaW5kZXgpOworCXhkbF9mcmVlKHhkZi0+cmNoZyAtIDEpOworCXhkbF9mcmVlKHhkZi0+aGEpOworCXhkbF9mcmVlKHhkZi0+cmVjcyk7CisJeGRsX2NoYV9mcmVlKCZ4ZGYtPnJjaGEpOworfQorCisKK2ludCB4ZGxfcHJlcGFyZV9lbnYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCSAgICB4ZGZlbnZfdCAqeGUpIHsKKwlsb25nIGVubDEsIGVubDIsIHNhbXBsZTsKKwl4ZGxjbGFzc2lmaWVyX3QgY2Y7CisKKwltZW1zZXQoJmNmLCAwLCBzaXplb2YoY2YpKTsKKworCS8qCisJICogRm9yIGhpc3RvZ3JhbSBkaWZmLCB3ZSBjYW4gYWZmb3JkIGEgc21hbGxlciBzYW1wbGUgc2l6ZSBhbmQKKwkgKiB0aHVzIGEgcG9vcmVyIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgbGluZXMsIGFzIHRoZSBoYXNoCisJICogdGFibGUgKHJoYXNoKSB3b24ndCBiZSBmaWxsZWQgdXAvZ3Jvd24uIFRoZSBudW1iZXIgb2YgbGluZXMKKwkgKiAobnJlY3MpIHdpbGwgYmUgdXBkYXRlZCBjb3JyZWN0bHkgYW55d2F5IGJ5CisJICogeGRsX3ByZXBhcmVfY3R4KCkuCisJICovCisJc2FtcGxlID0gKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSA9PSBYREZfSElTVE9HUkFNX0RJRkYKKwkJICA/IFhETF9HVUVTU19OTElORVMyIDogWERMX0dVRVNTX05MSU5FUzEpOworCisJZW5sMSA9IHhkbF9ndWVzc19saW5lcyhtZjEsIHNhbXBsZSkgKyAxOworCWVubDIgPSB4ZGxfZ3Vlc3NfbGluZXMobWYyLCBzYW1wbGUpICsgMTsKKworCWlmIChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgIT0gWERGX0hJU1RPR1JBTV9ESUZGICYmCisJICAgIHhkbF9pbml0X2NsYXNzaWZpZXIoJmNmLCBlbmwxICsgZW5sMiArIDEsIHhwcC0+ZmxhZ3MpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHhkbF9wcmVwYXJlX2N0eCgxLCBtZjEsIGVubDEsIHhwcCwgJmNmLCAmeGUtPnhkZjEpIDwgMCkgeworCisJCXhkbF9mcmVlX2NsYXNzaWZpZXIoJmNmKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoeGRsX3ByZXBhcmVfY3R4KDIsIG1mMiwgZW5sMiwgeHBwLCAmY2YsICZ4ZS0+eGRmMikgPCAwKSB7CisKKwkJeGRsX2ZyZWVfY3R4KCZ4ZS0+eGRmMSk7CisJCXhkbF9mcmVlX2NsYXNzaWZpZXIoJmNmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpICE9IFhERl9QQVRJRU5DRV9ESUZGKSAmJgorCSAgICAoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpICE9IFhERl9ISVNUT0dSQU1fRElGRikgJiYKKwkgICAgeGRsX29wdGltaXplX2N0eHMoJmNmLCAmeGUtPnhkZjEsICZ4ZS0+eGRmMikgPCAwKSB7CisKKwkJeGRsX2ZyZWVfY3R4KCZ4ZS0+eGRmMik7CisJCXhkbF9mcmVlX2N0eCgmeGUtPnhkZjEpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCEoeHBwLT5mbGFncyAmIFhERl9ISVNUT0dSQU1fRElGRikpCisJCXhkbF9mcmVlX2NsYXNzaWZpZXIoJmNmKTsKKworCXJldHVybiAwOworfQorCisKK3ZvaWQgeGRsX2ZyZWVfZW52KHhkZmVudl90ICp4ZSkgeworCisJeGRsX2ZyZWVfY3R4KCZ4ZS0+eGRmMik7CisJeGRsX2ZyZWVfY3R4KCZ4ZS0+eGRmMSk7Cit9CisKKworc3RhdGljIGludCB4ZGxfY2xlYW5fbW1hdGNoKGNoYXIgY29uc3QgKmRpcywgbG9uZyBpLCBsb25nIHMsIGxvbmcgZSkgeworCWxvbmcgciwgcmRpczAsIHJwZGlzMCwgcmRpczEsIHJwZGlzMTsKKworCS8qCisJICogTGltaXRzIHRoZSB3aW5kb3cgdGhlIGlzIGV4YW1pbmVkIGR1cmluZyB0aGUgc2ltaWxhci1saW5lcworCSAqIHNjYW4uIFRoZSBsb29wcyBiZWxvdyBzdG9wcyB3aGVuIGRpc1tpIC0gcl0gPT0gMSAobGluZSB0aGF0CisJICogaGFzIG5vIG1hdGNoKSwgYnV0IHRoZXJlIGFyZSBjb3JuZXIgY2FzZXMgd2hlcmUgdGhlIGxvb3AKKwkgKiBwcm9jZWVkIGFsbCB0aGUgd2F5IHRvIHRoZSBleHRyZW1pdGllcyBieSBjYXVzaW5nIGh1Z2UKKwkgKiBwZXJmb3JtYW5jZSBwZW5hbHRpZXMgaW4gY2FzZSBvZiBiaWcgZmlsZXMuCisJICovCisJaWYgKGkgLSBzID4gWERMX1NJTVNDQU5fV0lORE9XKQorCQlzID0gaSAtIFhETF9TSU1TQ0FOX1dJTkRPVzsKKwlpZiAoZSAtIGkgPiBYRExfU0lNU0NBTl9XSU5ET1cpCisJCWUgPSBpICsgWERMX1NJTVNDQU5fV0lORE9XOworCisJLyoKKwkgKiBTY2FucyB0aGUgbGluZXMgYmVmb3JlICdpJyB0byBmaW5kIGEgcnVuIG9mIGxpbmVzIHRoYXQgZWl0aGVyCisJICogaGF2ZSBubyBtYXRjaCAoZGlzW2pdID09IDApIG9yIGhhdmUgbXVsdGlwbGUgbWF0Y2hlcyAoZGlzW2pdID4gMSkuCisJICogTm90ZSB0aGF0IHdlIGFsd2F5cyBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkaXNbaV0gPiAxLCBzbyB0aGUKKwkgKiBjdXJyZW50IGxpbmUgKGkpIGlzIGFscmVhZHkgYSBtdWx0aW1hdGNoIGxpbmUuCisJICovCisJZm9yIChyID0gMSwgcmRpczAgPSAwLCBycGRpczAgPSAxOyAoaSAtIHIpID49IHM7IHIrKykgeworCQlpZiAoIWRpc1tpIC0gcl0pCisJCQlyZGlzMCsrOworCQllbHNlIGlmIChkaXNbaSAtIHJdID09IDIpCisJCQlycGRpczArKzsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCS8qCisJICogSWYgdGhlIHJ1biBiZWZvcmUgdGhlIGxpbmUgJ2knIGZvdW5kIG9ubHkgbXVsdGltYXRjaCBsaW5lcywgd2UKKwkgKiByZXR1cm4gMCBhbmQgaGVuY2Ugd2UgZG9uJ3QgbWFrZSB0aGUgY3VycmVudCBsaW5lIChpKSBkaXNjYXJkZWQuCisJICogV2Ugd2FudCB0byBkaXNjYXJkIG11bHRpbWF0Y2ggbGluZXMgb25seSB3aGVuIHRoZXkgYXBwZWFyIGluIHRoZQorCSAqIG1pZGRsZSBvZiBydW5zIHdpdGggbm9tYXRjaCBsaW5lcyAoZGlzW2pdID09IDApLgorCSAqLworCWlmIChyZGlzMCA9PSAwKQorCQlyZXR1cm4gMDsKKwlmb3IgKHIgPSAxLCByZGlzMSA9IDAsIHJwZGlzMSA9IDE7IChpICsgcikgPD0gZTsgcisrKSB7CisJCWlmICghZGlzW2kgKyByXSkKKwkJCXJkaXMxKys7CisJCWVsc2UgaWYgKGRpc1tpICsgcl0gPT0gMikKKwkJCXJwZGlzMSsrOworCQllbHNlCisJCQlicmVhazsKKwl9CisJLyoKKwkgKiBJZiB0aGUgcnVuIGFmdGVyIHRoZSBsaW5lICdpJyBmb3VuZCBvbmx5IG11bHRpbWF0Y2ggbGluZXMsIHdlCisJICogcmV0dXJuIDAgYW5kIGhlbmNlIHdlIGRvbid0IG1ha2UgdGhlIGN1cnJlbnQgbGluZSAoaSkgZGlzY2FyZGVkLgorCSAqLworCWlmIChyZGlzMSA9PSAwKQorCQlyZXR1cm4gMDsKKwlyZGlzMSArPSByZGlzMDsKKwlycGRpczEgKz0gcnBkaXMwOworCisJcmV0dXJuIHJwZGlzMSAqIFhETF9LUERJU19SVU4gPCAocnBkaXMxICsgcmRpczEpOworfQorCisKKy8qCisgKiBUcnkgdG8gcmVkdWNlIHRoZSBwcm9ibGVtIGNvbXBsZXhpdHksIGRpc2NhcmQgcmVjb3JkcyB0aGF0IGhhdmUgbm8KKyAqIG1hdGNoZXMgb24gdGhlIG90aGVyIGZpbGUuIEFsc28sIGxpbmVzIHRoYXQgaGF2ZSBtdWx0aXBsZSBtYXRjaGVzCisgKiBtaWdodCBiZSBwb3RlbnRpYWxseSBkaXNjYXJkZWQgaWYgdGhleSBoYXBwZWFyIGluIGEgcnVuIG9mIGRpc2NhcmRhYmxlLgorICovCitzdGF0aWMgaW50IHhkbF9jbGVhbnVwX3JlY29yZHMoeGRsY2xhc3NpZmllcl90ICpjZiwgeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKSB7CisJbG9uZyBpLCBubSwgbnJlZmYsIG1saW07CisJeHJlY29yZF90ICoqcmVjczsKKwl4ZGxjbGFzc190ICpyY3JlYzsKKwljaGFyICpkaXMsICpkaXMxLCAqZGlzMjsKKworCWlmICghKGRpcyA9IChjaGFyICopIHhkbF9tYWxsb2MoeGRmMS0+bnJlYyArIHhkZjItPm5yZWMgKyAyKSkpIHsKKworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChkaXMsIDAsIHhkZjEtPm5yZWMgKyB4ZGYyLT5ucmVjICsgMik7CisJZGlzMSA9IGRpczsKKwlkaXMyID0gZGlzMSArIHhkZjEtPm5yZWMgKyAxOworCisJaWYgKChtbGltID0geGRsX2JvZ29zcXJ0KHhkZjEtPm5yZWMpKSA+IFhETF9NQVhfRVFMSU1JVCkKKwkJbWxpbSA9IFhETF9NQVhfRVFMSU1JVDsKKwlmb3IgKGkgPSB4ZGYxLT5kc3RhcnQsIHJlY3MgPSAmeGRmMS0+cmVjc1t4ZGYxLT5kc3RhcnRdOyBpIDw9IHhkZjEtPmRlbmQ7IGkrKywgcmVjcysrKSB7CisJCXJjcmVjID0gY2YtPnJjcmVjc1soKnJlY3MpLT5oYV07CisJCW5tID0gcmNyZWMgPyByY3JlYy0+bGVuMiA6IDA7CisJCWRpczFbaV0gPSAobm0gPT0gMCkgPyAwOiAobm0gPj0gbWxpbSkgPyAyOiAxOworCX0KKworCWlmICgobWxpbSA9IHhkbF9ib2dvc3FydCh4ZGYyLT5ucmVjKSkgPiBYRExfTUFYX0VRTElNSVQpCisJCW1saW0gPSBYRExfTUFYX0VRTElNSVQ7CisJZm9yIChpID0geGRmMi0+ZHN0YXJ0LCByZWNzID0gJnhkZjItPnJlY3NbeGRmMi0+ZHN0YXJ0XTsgaSA8PSB4ZGYyLT5kZW5kOyBpKyssIHJlY3MrKykgeworCQlyY3JlYyA9IGNmLT5yY3JlY3NbKCpyZWNzKS0+aGFdOworCQlubSA9IHJjcmVjID8gcmNyZWMtPmxlbjEgOiAwOworCQlkaXMyW2ldID0gKG5tID09IDApID8gMDogKG5tID49IG1saW0pID8gMjogMTsKKwl9CisKKwlmb3IgKG5yZWZmID0gMCwgaSA9IHhkZjEtPmRzdGFydCwgcmVjcyA9ICZ4ZGYxLT5yZWNzW3hkZjEtPmRzdGFydF07CisJICAgICBpIDw9IHhkZjEtPmRlbmQ7IGkrKywgcmVjcysrKSB7CisJCWlmIChkaXMxW2ldID09IDEgfHwKKwkJICAgIChkaXMxW2ldID09IDIgJiYgIXhkbF9jbGVhbl9tbWF0Y2goZGlzMSwgaSwgeGRmMS0+ZHN0YXJ0LCB4ZGYxLT5kZW5kKSkpIHsKKwkJCXhkZjEtPnJpbmRleFtucmVmZl0gPSBpOworCQkJeGRmMS0+aGFbbnJlZmZdID0gKCpyZWNzKS0+aGE7CisJCQlucmVmZisrOworCQl9IGVsc2UKKwkJCXhkZjEtPnJjaGdbaV0gPSAxOworCX0KKwl4ZGYxLT5ucmVmZiA9IG5yZWZmOworCisJZm9yIChucmVmZiA9IDAsIGkgPSB4ZGYyLT5kc3RhcnQsIHJlY3MgPSAmeGRmMi0+cmVjc1t4ZGYyLT5kc3RhcnRdOworCSAgICAgaSA8PSB4ZGYyLT5kZW5kOyBpKyssIHJlY3MrKykgeworCQlpZiAoZGlzMltpXSA9PSAxIHx8CisJCSAgICAoZGlzMltpXSA9PSAyICYmICF4ZGxfY2xlYW5fbW1hdGNoKGRpczIsIGksIHhkZjItPmRzdGFydCwgeGRmMi0+ZGVuZCkpKSB7CisJCQl4ZGYyLT5yaW5kZXhbbnJlZmZdID0gaTsKKwkJCXhkZjItPmhhW25yZWZmXSA9ICgqcmVjcyktPmhhOworCQkJbnJlZmYrKzsKKwkJfSBlbHNlCisJCQl4ZGYyLT5yY2hnW2ldID0gMTsKKwl9CisJeGRmMi0+bnJlZmYgPSBucmVmZjsKKworCXhkbF9mcmVlKGRpcyk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogRWFybHkgdHJpbSBpbml0aWFsIGFuZCB0ZXJtaW5hbCBtYXRjaGluZyByZWNvcmRzLgorICovCitzdGF0aWMgaW50IHhkbF90cmltX2VuZHMoeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKSB7CisJbG9uZyBpLCBsaW07CisJeHJlY29yZF90ICoqcmVjczEsICoqcmVjczI7CisKKwlyZWNzMSA9IHhkZjEtPnJlY3M7CisJcmVjczIgPSB4ZGYyLT5yZWNzOworCWZvciAoaSA9IDAsIGxpbSA9IFhETF9NSU4oeGRmMS0+bnJlYywgeGRmMi0+bnJlYyk7IGkgPCBsaW07CisJICAgICBpKyssIHJlY3MxKyssIHJlY3MyKyspCisJCWlmICgoKnJlY3MxKS0+aGEgIT0gKCpyZWNzMiktPmhhKQorCQkJYnJlYWs7CisKKwl4ZGYxLT5kc3RhcnQgPSB4ZGYyLT5kc3RhcnQgPSBpOworCisJcmVjczEgPSB4ZGYxLT5yZWNzICsgeGRmMS0+bnJlYyAtIDE7CisJcmVjczIgPSB4ZGYyLT5yZWNzICsgeGRmMi0+bnJlYyAtIDE7CisJZm9yIChsaW0gLT0gaSwgaSA9IDA7IGkgPCBsaW07IGkrKywgcmVjczEtLSwgcmVjczItLSkKKwkJaWYgKCgqcmVjczEpLT5oYSAhPSAoKnJlY3MyKS0+aGEpCisJCQlicmVhazsKKworCXhkZjEtPmRlbmQgPSB4ZGYxLT5ucmVjIC0gaSAtIDE7CisJeGRmMi0+ZGVuZCA9IHhkZjItPm5yZWMgLSBpIC0gMTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgeGRsX29wdGltaXplX2N0eHMoeGRsY2xhc3NpZmllcl90ICpjZiwgeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKSB7CisKKwlpZiAoeGRsX3RyaW1fZW5kcyh4ZGYxLCB4ZGYyKSA8IDAgfHwKKwkgICAgeGRsX2NsZWFudXBfcmVjb3JkcyhjZiwgeGRmMSwgeGRmMikgPCAwKSB7CisKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveGRpZmYveHByZXBhcmUuaCBiL3hkaWZmL3hwcmVwYXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiMDZhNQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hwcmVwYXJlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMyAgRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpZiAhZGVmaW5lZChYUFJFUEFSRV9IKQorI2RlZmluZSBYUFJFUEFSRV9ICisKKworCitpbnQgeGRsX3ByZXBhcmVfZW52KG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQkgICAgeGRmZW52X3QgKnhlKTsKK3ZvaWQgeGRsX2ZyZWVfZW52KHhkZmVudl90ICp4ZSk7CisKKworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhQUkVQQVJFX0gpICovCmRpZmYgLS1naXQgYS94ZGlmZi94dHlwZXMuaCBiL3hkaWZmL3h0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTFhZWYKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94dHlwZXMuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhUWVBFU19IKQorI2RlZmluZSBYVFlQRVNfSAorCisKKwordHlwZWRlZiBzdHJ1Y3Qgc19jaGFub2RlIHsKKwlzdHJ1Y3Qgc19jaGFub2RlICpuZXh0OworCWxvbmcgaWN1cnI7Cit9IGNoYW5vZGVfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc19jaGFzdG9yZSB7CisJY2hhbm9kZV90ICpoZWFkLCAqdGFpbDsKKwlsb25nIGlzaXplLCBuc2l6ZTsKKwljaGFub2RlX3QgKmFuY3VyOworCWNoYW5vZGVfdCAqc25jdXI7CisJbG9uZyBzY3VycjsKK30gY2hhc3RvcmVfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc194cmVjb3JkIHsKKwlzdHJ1Y3Qgc194cmVjb3JkICpuZXh0OworCWNoYXIgY29uc3QgKnB0cjsKKwlsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBoYTsKK30geHJlY29yZF90OworCit0eXBlZGVmIHN0cnVjdCBzX3hkZmlsZSB7CisJY2hhc3RvcmVfdCByY2hhOworCWxvbmcgbnJlYzsKKwl1bnNpZ25lZCBpbnQgaGJpdHM7CisJeHJlY29yZF90ICoqcmhhc2g7CisJbG9uZyBkc3RhcnQsIGRlbmQ7CisJeHJlY29yZF90ICoqcmVjczsKKwljaGFyICpyY2hnOworCWxvbmcgKnJpbmRleDsKKwlsb25nIG5yZWZmOworCXVuc2lnbmVkIGxvbmcgKmhhOworfSB4ZGZpbGVfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZGZlbnYgeworCXhkZmlsZV90IHhkZjEsIHhkZjI7Cit9IHhkZmVudl90OworCisKKworI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYVFlQRVNfSCkgKi8KZGlmZiAtLWdpdCBhL3hkaWZmL3h1dGlscy5jIGIveGRpZmYveHV0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwNGVhZQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3h1dGlscy5jCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzCURhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSAieGluY2x1ZGUuaCIKKworCisKKworbG9uZyB4ZGxfYm9nb3NxcnQobG9uZyBuKSB7CisJbG9uZyBpOworCisJLyoKKwkgKiBDbGFzc2ljYWwgaW50ZWdlciBzcXVhcmUgcm9vdCBhcHByb3hpbWF0aW9uIHVzaW5nIHNoaWZ0cy4KKwkgKi8KKwlmb3IgKGkgPSAxOyBuID4gMDsgbiA+Pj0gMikKKwkJaSA8PD0gMTsKKworCXJldHVybiBpOworfQorCisKK2ludCB4ZGxfZW1pdF9kaWZmcmVjKGNoYXIgY29uc3QgKnJlYywgbG9uZyBzaXplLCBjaGFyIGNvbnN0ICpwcmUsIGxvbmcgcHNpemUsCisJCSAgICAgeGRlbWl0Y2JfdCAqZWNiKSB7CisJaW50IGkgPSAyOworCW1tYnVmZmVyX3QgbWJbM107CisKKwltYlswXS5wdHIgPSAoY2hhciAqKSBwcmU7CisJbWJbMF0uc2l6ZSA9IHBzaXplOworCW1iWzFdLnB0ciA9IChjaGFyICopIHJlYzsKKwltYlsxXS5zaXplID0gc2l6ZTsKKwlpZiAoc2l6ZSA+IDAgJiYgcmVjW3NpemUgLSAxXSAhPSAnXG4nKSB7CisJCW1iWzJdLnB0ciA9IChjaGFyICopICJcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiI7CisJCW1iWzJdLnNpemUgPSBzdHJsZW4obWJbMl0ucHRyKTsKKwkJaSsrOworCX0KKwlpZiAoZWNiLT5vdXRmKGVjYi0+cHJpdiwgbWIsIGkpIDwgMCkgeworCisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCAqeGRsX21tZmlsZV9maXJzdChtbWZpbGVfdCAqbW1mLCBsb25nICpzaXplKQoreworCSpzaXplID0gbW1mLT5zaXplOworCXJldHVybiBtbWYtPnB0cjsKK30KKworCitsb25nIHhkbF9tbWZpbGVfc2l6ZShtbWZpbGVfdCAqbW1mKQoreworCXJldHVybiBtbWYtPnNpemU7Cit9CisKKworaW50IHhkbF9jaGFfaW5pdChjaGFzdG9yZV90ICpjaGEsIGxvbmcgaXNpemUsIGxvbmcgaWNvdW50KSB7CisKKwljaGEtPmhlYWQgPSBjaGEtPnRhaWwgPSBOVUxMOworCWNoYS0+aXNpemUgPSBpc2l6ZTsKKwljaGEtPm5zaXplID0gaWNvdW50ICogaXNpemU7CisJY2hhLT5hbmN1ciA9IGNoYS0+c25jdXIgPSBOVUxMOworCWNoYS0+c2N1cnIgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCB4ZGxfY2hhX2ZyZWUoY2hhc3RvcmVfdCAqY2hhKSB7CisJY2hhbm9kZV90ICpjdXIsICp0bXA7CisKKwlmb3IgKGN1ciA9IGNoYS0+aGVhZDsgKHRtcCA9IGN1cikgIT0gTlVMTDspIHsKKwkJY3VyID0gY3VyLT5uZXh0OworCQl4ZGxfZnJlZSh0bXApOworCX0KK30KKworCit2b2lkICp4ZGxfY2hhX2FsbG9jKGNoYXN0b3JlX3QgKmNoYSkgeworCWNoYW5vZGVfdCAqYW5jdXI7CisJdm9pZCAqZGF0YTsKKworCWlmICghKGFuY3VyID0gY2hhLT5hbmN1cikgfHwgYW5jdXItPmljdXJyID09IGNoYS0+bnNpemUpIHsKKwkJaWYgKCEoYW5jdXIgPSAoY2hhbm9kZV90ICopIHhkbF9tYWxsb2Moc2l6ZW9mKGNoYW5vZGVfdCkgKyBjaGEtPm5zaXplKSkpIHsKKworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJYW5jdXItPmljdXJyID0gMDsKKwkJYW5jdXItPm5leHQgPSBOVUxMOworCQlpZiAoY2hhLT50YWlsKQorCQkJY2hhLT50YWlsLT5uZXh0ID0gYW5jdXI7CisJCWlmICghY2hhLT5oZWFkKQorCQkJY2hhLT5oZWFkID0gYW5jdXI7CisJCWNoYS0+dGFpbCA9IGFuY3VyOworCQljaGEtPmFuY3VyID0gYW5jdXI7CisJfQorCisJZGF0YSA9IChjaGFyICopIGFuY3VyICsgc2l6ZW9mKGNoYW5vZGVfdCkgKyBhbmN1ci0+aWN1cnI7CisJYW5jdXItPmljdXJyICs9IGNoYS0+aXNpemU7CisKKwlyZXR1cm4gZGF0YTsKK30KKworbG9uZyB4ZGxfZ3Vlc3NfbGluZXMobW1maWxlX3QgKm1mLCBsb25nIHNhbXBsZSkgeworCWxvbmcgbmwgPSAwLCBzaXplLCB0c2l6ZSA9IDA7CisJY2hhciBjb25zdCAqZGF0YSwgKmN1ciwgKnRvcDsKKworCWlmICgoY3VyID0gZGF0YSA9IHhkbF9tbWZpbGVfZmlyc3QobWYsICZzaXplKSkgIT0gTlVMTCkgeworCQlmb3IgKHRvcCA9IGRhdGEgKyBzaXplOyBubCA8IHNhbXBsZSAmJiBjdXIgPCB0b3A7ICkgeworCQkJbmwrKzsKKwkJCWlmICghKGN1ciA9IG1lbWNocihjdXIsICdcbicsIHRvcCAtIGN1cikpKQorCQkJCWN1ciA9IHRvcDsKKwkJCWVsc2UKKwkJCQljdXIrKzsKKwkJfQorCQl0c2l6ZSArPSAobG9uZykgKGN1ciAtIGRhdGEpOworCX0KKworCWlmIChubCAmJiB0c2l6ZSkKKwkJbmwgPSB4ZGxfbW1maWxlX3NpemUobWYpIC8gKHRzaXplIC8gbmwpOworCisJcmV0dXJuIG5sICsgMTsKK30KKworaW50IHhkbF9yZWNtYXRjaChjb25zdCBjaGFyICpsMSwgbG9uZyBzMSwgY29uc3QgY2hhciAqbDIsIGxvbmcgczIsIGxvbmcgZmxhZ3MpCit7CisJaW50IGkxLCBpMjsKKworCWlmIChzMSA9PSBzMiAmJiAhbWVtY21wKGwxLCBsMiwgczEpKQorCQlyZXR1cm4gMTsKKwlpZiAoIShmbGFncyAmIFhERl9XSElURVNQQUNFX0ZMQUdTKSkKKwkJcmV0dXJuIDA7CisKKwlpMSA9IDA7CisJaTIgPSAwOworCisJLyoKKwkgKiAtdyBtYXRjaGVzIGV2ZXJ5dGhpbmcgdGhhdCBtYXRjaGVzIHdpdGggLWIsIGFuZCAtYiBpbiB0dXJuCisJICogbWF0Y2hlcyBldmVyeXRoaW5nIHRoYXQgbWF0Y2hlcyB3aXRoIC0taWdub3JlLXNwYWNlLWF0LWVvbC4KKwkgKgorCSAqIEVhY2ggZmxhdm9yIG9mIGlnbm9yaW5nIG5lZWRzIGRpZmZlcmVudCBsb2dpYyB0byBza2lwIHdoaXRlc3BhY2VzCisJICogd2hpbGUgd2UgaGF2ZSBib3RoIHNpZGVzIHRvIGNvbXBhcmUuCisJICovCisJaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFKSB7CisJCWdvdG8gc2tpcF93czsKKwkJd2hpbGUgKGkxIDwgczEgJiYgaTIgPCBzMikgeworCQkJaWYgKGwxW2kxKytdICE9IGwyW2kyKytdKQorCQkJCXJldHVybiAwOworCQlza2lwX3dzOgorCQkJd2hpbGUgKGkxIDwgczEgJiYgWERMX0lTU1BBQ0UobDFbaTFdKSkKKwkJCQlpMSsrOworCQkJd2hpbGUgKGkyIDwgczIgJiYgWERMX0lTU1BBQ0UobDJbaTJdKSkKKwkJCQlpMisrOworCQl9CisJfSBlbHNlIGlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UpIHsKKwkJd2hpbGUgKGkxIDwgczEgJiYgaTIgPCBzMikgeworCQkJaWYgKFhETF9JU1NQQUNFKGwxW2kxXSkgJiYgWERMX0lTU1BBQ0UobDJbaTJdKSkgeworCQkJCS8qIFNraXAgbWF0Y2hpbmcgc3BhY2VzIGFuZCB0cnkgYWdhaW4gKi8KKwkJCQl3aGlsZSAoaTEgPCBzMSAmJiBYRExfSVNTUEFDRShsMVtpMV0pKQorCQkJCQlpMSsrOworCQkJCXdoaWxlIChpMiA8IHMyICYmIFhETF9JU1NQQUNFKGwyW2kyXSkpCisJCQkJCWkyKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobDFbaTErK10gIT0gbDJbaTIrK10pCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTCkgeworCQl3aGlsZSAoaTEgPCBzMSAmJiBpMiA8IHMyICYmIGwxW2kxKytdID09IGwyW2kyKytdKQorCQkJOyAvKiBrZWVwIGdvaW5nICovCisJfQorCisJLyoKKwkgKiBBZnRlciBydW5uaW5nIG91dCBvZiBvbmUgc2lkZSwgdGhlIHJlbWFpbmluZyBzaWRlIG11c3QgaGF2ZQorCSAqIG5vdGhpbmcgYnV0IHdoaXRlc3BhY2UgZm9yIHRoZSBsaW5lcyB0byBtYXRjaC4gIE5vdGUgdGhhdAorCSAqIGlnbm9yZS13aGl0ZXNwYWNlLWF0LWVvbCBjYXNlIG1heSBicmVhayBvdXQgb2YgdGhlIGxvb3AKKwkgKiB3aGlsZSB0aGVyZSBzdGlsbCBhcmUgY2hhcmFjdGVycyByZW1haW5pbmcgb24gYm90aCBsaW5lcy4KKwkgKi8KKwlpZiAoaTEgPCBzMSkgeworCQl3aGlsZSAoaTEgPCBzMSAmJiBYRExfSVNTUEFDRShsMVtpMV0pKQorCQkJaTErKzsKKwkJaWYgKHMxICE9IGkxKQorCQkJcmV0dXJuIDA7CisJfQorCWlmIChpMiA8IHMyKSB7CisJCXdoaWxlIChpMiA8IHMyICYmIFhETF9JU1NQQUNFKGwyW2kyXSkpCisJCQlpMisrOworCQlyZXR1cm4gKHMyID09IGkyKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHhkbF9oYXNoX3JlY29yZF93aXRoX3doaXRlc3BhY2UoY2hhciBjb25zdCAqKmRhdGEsCisJCWNoYXIgY29uc3QgKnRvcCwgbG9uZyBmbGFncykgeworCXVuc2lnbmVkIGxvbmcgaGEgPSA1MzgxOworCWNoYXIgY29uc3QgKnB0ciA9ICpkYXRhOworCisJZm9yICg7IHB0ciA8IHRvcCAmJiAqcHRyICE9ICdcbic7IHB0cisrKSB7CisJCWlmIChYRExfSVNTUEFDRSgqcHRyKSkgeworCQkJY29uc3QgY2hhciAqcHRyMiA9IHB0cjsKKwkJCWludCBhdF9lb2w7CisJCQl3aGlsZSAocHRyICsgMSA8IHRvcCAmJiBYRExfSVNTUEFDRShwdHJbMV0pCisJCQkJCSYmIHB0clsxXSAhPSAnXG4nKQorCQkJCXB0cisrOworCQkJYXRfZW9sID0gKHRvcCA8PSBwdHIgKyAxIHx8IHB0clsxXSA9PSAnXG4nKTsKKwkJCWlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRSkKKwkJCQk7IC8qIGFscmVhZHkgaGFuZGxlZCAqLworCQkJZWxzZSBpZiAoZmxhZ3MgJiBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFCisJCQkJICYmICFhdF9lb2wpIHsKKwkJCQloYSArPSAoaGEgPDwgNSk7CisJCQkJaGEgXj0gKHVuc2lnbmVkIGxvbmcpICcgJzsKKwkJCX0KKwkJCWVsc2UgaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTAorCQkJCSAmJiAhYXRfZW9sKSB7CisJCQkJd2hpbGUgKHB0cjIgIT0gcHRyICsgMSkgeworCQkJCQloYSArPSAoaGEgPDwgNSk7CisJCQkJCWhhIF49ICh1bnNpZ25lZCBsb25nKSAqcHRyMjsKKwkJCQkJcHRyMisrOworCQkJCX0KKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWhhICs9IChoYSA8PCA1KTsKKwkJaGEgXj0gKHVuc2lnbmVkIGxvbmcpICpwdHI7CisJfQorCSpkYXRhID0gcHRyIDwgdG9wID8gcHRyICsgMTogcHRyOworCisJcmV0dXJuIGhhOworfQorCisjaWZkZWYgWERMX0ZBU1RfSEFTSAorCisjZGVmaW5lIFJFUEVBVF9CWVRFKHgpICAoKH4wdWwgLyAweGZmKSAqICh4KSkKKworI2RlZmluZSBPTkVCWVRFUwlSRVBFQVRfQllURSgweDAxKQorI2RlZmluZSBORVdMSU5FQllURVMJUkVQRUFUX0JZVEUoMHgwYSkKKyNkZWZpbmUgSElHSEJJVFMJUkVQRUFUX0JZVEUoMHg4MCkKKworLyogUmV0dXJuIHRoZSBoaWdoIGJpdCBzZXQgaW4gdGhlIGZpcnN0IGJ5dGUgdGhhdCBpcyBhIHplcm8gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBoYXNfemVybyh1bnNpZ25lZCBsb25nIGEpCit7CisJcmV0dXJuICgoYSAtIE9ORUJZVEVTKSAmIH5hKSAmIEhJR0hCSVRTOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgY291bnRfbWFza2VkX2J5dGVzKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlpZiAoc2l6ZW9mKGxvbmcpID09IDgpIHsKKwkJLyoKKwkJICogSmFuIEFjaHJlbml1cyBvbiBHKzogbWljcm9vcHRpbWl6ZWQgdmVyc2lvbiBvZgorCQkgKiB0aGUgc2ltcGxlciAiKG1hc2sgJiBPTkVCWVRFUykgKiBPTkVCWVRFUyA+PiA1NiIKKwkJICogdGhhdCB3b3JrcyBmb3IgdGhlIGJ5dGVtYXNrcyB3aXRob3V0IGhhdmluZyB0bworCQkgKiBtYXNrIHRoZW0gZmlyc3QuCisJCSAqLworCQkvKgorCQkgKiByZXR1cm4gbWFzayAqIDB4MDAwMTAyMDMwNDA1MDYwOCA+PiA1NjsKKwkJICoKKwkJICogRG9pbmcgaXQgbGlrZSB0aGlzIGF2b2lkcyB3YXJuaW5ncyBvbiAzMi1iaXQgbWFjaGluZXMuCisJCSAqLworCQlsb25nIGEgPSAoUkVQRUFUX0JZVEUoMHgwMSkgLyAweGZmICsgMSk7CisJCXJldHVybiBtYXNrICogYSA+PiAoc2l6ZW9mKGxvbmcpICogNyk7CisJfSBlbHNlIHsKKwkJLyogQ2FybCBDaGF0ZmllbGQgLyBKYW4gQWNocmVuaXVzIEcrIHZlcnNpb24gZm9yIDMyLWJpdCAqLworCQkvKiAoMDAwMDAwIDAwMDBmZiAwMGZmZmYgZmZmZmZmKSAtPiAoIDEgMSAyIDMgKSAqLworCQlsb25nIGEgPSAoMHgwZmYwMDAxICsgbWFzaykgPj4gMjM7CisJCS8qIEZpeCB0aGUgMSBmb3IgMDAgY2FzZSAqLworCQlyZXR1cm4gYSAmIG1hc2s7CisJfQorfQorCit1bnNpZ25lZCBsb25nIHhkbF9oYXNoX3JlY29yZChjaGFyIGNvbnN0ICoqZGF0YSwgY2hhciBjb25zdCAqdG9wLCBsb25nIGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgaGFzaCA9IDUzODE7CisJdW5zaWduZWQgbG9uZyBhID0gMCwgbWFzayA9IDA7CisJY2hhciBjb25zdCAqcHRyID0gKmRhdGE7CisJY2hhciBjb25zdCAqZW5kID0gdG9wIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICsgMTsKKworCWlmIChmbGFncyAmIFhERl9XSElURVNQQUNFX0ZMQUdTKQorCQlyZXR1cm4geGRsX2hhc2hfcmVjb3JkX3dpdGhfd2hpdGVzcGFjZShkYXRhLCB0b3AsIGZsYWdzKTsKKworCXB0ciAtPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJZG8geworCQloYXNoICs9IGhhc2ggPDwgNTsKKwkJaGFzaCBePSBhOworCQlwdHIgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQlpZiAocHRyID49IGVuZCkKKwkJCWJyZWFrOworCQlhID0gKih1bnNpZ25lZCBsb25nICopcHRyOworCQkvKiBEbyB3ZSBoYXZlIGFueSAnXG4nIGJ5dGVzIGluIHRoaXMgd29yZD8gKi8KKwkJbWFzayA9IGhhc196ZXJvKGEgXiBORVdMSU5FQllURVMpOworCX0gd2hpbGUgKCFtYXNrKTsKKworCWlmIChwdHIgPj0gZW5kKSB7CisJCS8qCisJCSAqIFRoZXJlIGlzIG9ubHkgYSBwYXJ0aWFsIHdvcmQgbGVmdCBhdCB0aGUgZW5kIG9mIHRoZQorCQkgKiBidWZmZXIuIEJlY2F1c2Ugd2UgbWF5IHdvcmsgd2l0aCBhIG1lbW9yeSBtYXBwaW5nLAorCQkgKiB3ZSBoYXZlIHRvIGdyYWIgdGhlIHJlc3QgYnl0ZSBieSBieXRlIGluc3RlYWQgb2YKKwkJICogYmxpbmRseSByZWFkaW5nIGl0LgorCQkgKgorCQkgKiBUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIG1hc2tpbmcgaW4gYSBzaWduZWQgdmFsdWUsCisJCSAqIHdlIHVzZSBhbiB1bnNpZ25lZCBjaGFyIGhlcmUuCisJCSAqLworCQljb25zdCBjaGFyICpwOworCQlmb3IgKHAgPSB0b3AgLSAxOyBwID49IHB0cjsgcC0tKQorCQkJYSA9IChhIDw8IDgpICsgKigoY29uc3QgdW5zaWduZWQgY2hhciAqKXApOworCQltYXNrID0gaGFzX3plcm8oYSBeIE5FV0xJTkVCWVRFUyk7CisJCWlmICghbWFzaykKKwkJCS8qCisJCQkgKiBObyAnXG4nIGZvdW5kIGluIHRoZSBwYXJ0aWFsIHdvcmQuICBNYWtlIGEKKwkJCSAqIG1hc2sgdGhhdCBtYXRjaGVzIHdoYXQgd2UgcmVhZC4KKwkJCSAqLworCQkJbWFzayA9IDFVTCA8PCAoOCAqICh0b3AgLSBwdHIpICsgNyk7CisJfQorCisJLyogVGhlIG1hc2sgKmJlbG93KiB0aGUgZmlyc3QgaGlnaCBiaXQgc2V0ICovCisJbWFzayA9IChtYXNrIC0gMSkgJiB+bWFzazsKKwltYXNrID4+PSA3OworCWhhc2ggKz0gaGFzaCA8PCA1OworCWhhc2ggXj0gYSAmIG1hc2s7CisKKwkvKiBBZHZhbmNlIHBhc3QgdGhlIGxhc3QgKHBvc3NpYmx5IHBhcnRpYWwpIHdvcmQgKi8KKwlwdHIgKz0gY291bnRfbWFza2VkX2J5dGVzKG1hc2spOworCisJaWYgKHB0ciA8IHRvcCkgeworCQlhc3NlcnQoKnB0ciA9PSAnXG4nKTsKKwkJcHRyKys7CisJfQorCisJKmRhdGEgPSBwdHI7CisKKwlyZXR1cm4gaGFzaDsKK30KKworI2Vsc2UgLyogWERMX0ZBU1RfSEFTSCAqLworCit1bnNpZ25lZCBsb25nIHhkbF9oYXNoX3JlY29yZChjaGFyIGNvbnN0ICoqZGF0YSwgY2hhciBjb25zdCAqdG9wLCBsb25nIGZsYWdzKSB7CisJdW5zaWduZWQgbG9uZyBoYSA9IDUzODE7CisJY2hhciBjb25zdCAqcHRyID0gKmRhdGE7CisKKwlpZiAoZmxhZ3MgJiBYREZfV0hJVEVTUEFDRV9GTEFHUykKKwkJcmV0dXJuIHhkbF9oYXNoX3JlY29yZF93aXRoX3doaXRlc3BhY2UoZGF0YSwgdG9wLCBmbGFncyk7CisKKwlmb3IgKDsgcHRyIDwgdG9wICYmICpwdHIgIT0gJ1xuJzsgcHRyKyspIHsKKwkJaGEgKz0gKGhhIDw8IDUpOworCQloYSBePSAodW5zaWduZWQgbG9uZykgKnB0cjsKKwl9CisJKmRhdGEgPSBwdHIgPCB0b3AgPyBwdHIgKyAxOiBwdHI7CisKKwlyZXR1cm4gaGE7Cit9CisKKyNlbmRpZiAvKiBYRExfRkFTVF9IQVNIICovCisKK3Vuc2lnbmVkIGludCB4ZGxfaGFzaGJpdHModW5zaWduZWQgaW50IHNpemUpIHsKKwl1bnNpZ25lZCBpbnQgdmFsID0gMSwgYml0cyA9IDA7CisKKwlmb3IgKDsgdmFsIDwgc2l6ZSAmJiBiaXRzIDwgQ0hBUl9CSVQgKiBzaXplb2YodW5zaWduZWQgaW50KTsgdmFsIDw8PSAxLCBiaXRzKyspOworCXJldHVybiBiaXRzID8gYml0czogMTsKK30KKworCitpbnQgeGRsX251bV9vdXQoY2hhciAqb3V0LCBsb25nIHZhbCkgeworCWNoYXIgKnB0ciwgKnN0ciA9IG91dDsKKwljaGFyIGJ1ZlszMl07CisKKwlwdHIgPSBidWYgKyBzaXplb2YoYnVmKSAtIDE7CisJKnB0ciA9ICdcMCc7CisJaWYgKHZhbCA8IDApIHsKKwkJKi0tcHRyID0gJy0nOworCQl2YWwgPSAtdmFsOworCX0KKwlmb3IgKDsgdmFsICYmIHB0ciA+IGJ1ZjsgdmFsIC89IDEwKQorCQkqLS1wdHIgPSAiMDEyMzQ1Njc4OSJbdmFsICUgMTBdOworCWlmICgqcHRyKQorCQlmb3IgKDsgKnB0cjsgcHRyKyssIHN0cisrKQorCQkJKnN0ciA9ICpwdHI7CisJZWxzZQorCQkqc3RyKysgPSAnMCc7CisJKnN0ciA9ICdcMCc7CisKKwlyZXR1cm4gc3RyIC0gb3V0OworfQorCitpbnQgeGRsX2VtaXRfaHVua19oZHIobG9uZyBzMSwgbG9uZyBjMSwgbG9uZyBzMiwgbG9uZyBjMiwKKwkJICAgICAgY29uc3QgY2hhciAqZnVuYywgbG9uZyBmdW5jbGVuLCB4ZGVtaXRjYl90ICplY2IpIHsKKwlpbnQgbmIgPSAwOworCW1tYnVmZmVyX3QgbWI7CisJY2hhciBidWZbMTI4XTsKKworCW1lbWNweShidWYsICJAQCAtIiwgNCk7CisJbmIgKz0gNDsKKworCW5iICs9IHhkbF9udW1fb3V0KGJ1ZiArIG5iLCBjMSA/IHMxOiBzMSAtIDEpOworCisJaWYgKGMxICE9IDEpIHsKKwkJbWVtY3B5KGJ1ZiArIG5iLCAiLCIsIDEpOworCQluYiArPSAxOworCisJCW5iICs9IHhkbF9udW1fb3V0KGJ1ZiArIG5iLCBjMSk7CisJfQorCisJbWVtY3B5KGJ1ZiArIG5iLCAiICsiLCAyKTsKKwluYiArPSAyOworCisJbmIgKz0geGRsX251bV9vdXQoYnVmICsgbmIsIGMyID8gczI6IHMyIC0gMSk7CisKKwlpZiAoYzIgIT0gMSkgeworCQltZW1jcHkoYnVmICsgbmIsICIsIiwgMSk7CisJCW5iICs9IDE7CisKKwkJbmIgKz0geGRsX251bV9vdXQoYnVmICsgbmIsIGMyKTsKKwl9CisKKwltZW1jcHkoYnVmICsgbmIsICIgQEAiLCAzKTsKKwluYiArPSAzOworCWlmIChmdW5jICYmIGZ1bmNsZW4pIHsKKwkJYnVmW25iKytdID0gJyAnOworCQlpZiAoZnVuY2xlbiA+IHNpemVvZihidWYpIC0gbmIgLSAxKQorCQkJZnVuY2xlbiA9IHNpemVvZihidWYpIC0gbmIgLSAxOworCQltZW1jcHkoYnVmICsgbmIsIGZ1bmMsIGZ1bmNsZW4pOworCQluYiArPSBmdW5jbGVuOworCX0KKwlidWZbbmIrK10gPSAnXG4nOworCisJbWIucHRyID0gYnVmOworCW1iLnNpemUgPSBuYjsKKwlpZiAoZWNiLT5vdXRmKGVjYi0+cHJpdiwgJm1iLCAxKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitpbnQgeGRsX2ZhbGxfYmFja19kaWZmKHhkZmVudl90ICpkaWZmX2VudiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCS8qCisJICogVGhpcyBwcm9iYWJseSBkb2VzIG5vdCB3b3JrIG91dHNpZGUgR2l0LCBzaW5jZQorCSAqIHdlIGhhdmUgYSB2ZXJ5IHNpbXBsZSBtbWZpbGUgc3RydWN0dXJlLgorCSAqCisJICogTm90ZTogaWRlYWxseSwgd2Ugd291bGQgcmV1c2UgdGhlIHByZXBhcmVkIGVudmlyb25tZW50LCBidXQKKwkgKiB0aGUgbGlieGRpZmYgaW50ZXJmYWNlIGRvZXMgbm90ICh5ZXQpIGFsbG93IGZvciBkaWZmaW5nIG9ubHkKKwkgKiByYW5nZXMgb2YgbGluZXMgaW5zdGVhZCBvZiB0aGUgd2hvbGUgZmlsZXMuCisJICovCisJbW1maWxlX3Qgc3ViZmlsZTEsIHN1YmZpbGUyOworCXhkZmVudl90IGVudjsKKworCXN1YmZpbGUxLnB0ciA9IChjaGFyICopZGlmZl9lbnYtPnhkZjEucmVjc1tsaW5lMSAtIDFdLT5wdHI7CisJc3ViZmlsZTEuc2l6ZSA9IGRpZmZfZW52LT54ZGYxLnJlY3NbbGluZTEgKyBjb3VudDEgLSAyXS0+cHRyICsKKwkJZGlmZl9lbnYtPnhkZjEucmVjc1tsaW5lMSArIGNvdW50MSAtIDJdLT5zaXplIC0gc3ViZmlsZTEucHRyOworCXN1YmZpbGUyLnB0ciA9IChjaGFyICopZGlmZl9lbnYtPnhkZjIucmVjc1tsaW5lMiAtIDFdLT5wdHI7CisJc3ViZmlsZTIuc2l6ZSA9IGRpZmZfZW52LT54ZGYyLnJlY3NbbGluZTIgKyBjb3VudDIgLSAyXS0+cHRyICsKKwkJZGlmZl9lbnYtPnhkZjIucmVjc1tsaW5lMiArIGNvdW50MiAtIDJdLT5zaXplIC0gc3ViZmlsZTIucHRyOworCWlmICh4ZGxfZG9fZGlmZigmc3ViZmlsZTEsICZzdWJmaWxlMiwgeHBwLCAmZW52KSA8IDApCisJCXJldHVybiAtMTsKKworCW1lbWNweShkaWZmX2Vudi0+eGRmMS5yY2hnICsgbGluZTEgLSAxLCBlbnYueGRmMS5yY2hnLCBjb3VudDEpOworCW1lbWNweShkaWZmX2Vudi0+eGRmMi5yY2hnICsgbGluZTIgLSAxLCBlbnYueGRmMi5yY2hnLCBjb3VudDIpOworCisJeGRsX2ZyZWVfZW52KCZlbnYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94dXRpbHMuaCBiL3hkaWZmL3h1dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMTQyOGUKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94dXRpbHMuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhVVElMU19IKQorI2RlZmluZSBYVVRJTFNfSAorCisKKworbG9uZyB4ZGxfYm9nb3NxcnQobG9uZyBuKTsKK2ludCB4ZGxfZW1pdF9kaWZmcmVjKGNoYXIgY29uc3QgKnJlYywgbG9uZyBzaXplLCBjaGFyIGNvbnN0ICpwcmUsIGxvbmcgcHNpemUsCisJCSAgICAgeGRlbWl0Y2JfdCAqZWNiKTsKK2ludCB4ZGxfY2hhX2luaXQoY2hhc3RvcmVfdCAqY2hhLCBsb25nIGlzaXplLCBsb25nIGljb3VudCk7Cit2b2lkIHhkbF9jaGFfZnJlZShjaGFzdG9yZV90ICpjaGEpOwordm9pZCAqeGRsX2NoYV9hbGxvYyhjaGFzdG9yZV90ICpjaGEpOworbG9uZyB4ZGxfZ3Vlc3NfbGluZXMobW1maWxlX3QgKm1mLCBsb25nIHNhbXBsZSk7CitpbnQgeGRsX3JlY21hdGNoKGNvbnN0IGNoYXIgKmwxLCBsb25nIHMxLCBjb25zdCBjaGFyICpsMiwgbG9uZyBzMiwgbG9uZyBmbGFncyk7Cit1bnNpZ25lZCBsb25nIHhkbF9oYXNoX3JlY29yZChjaGFyIGNvbnN0ICoqZGF0YSwgY2hhciBjb25zdCAqdG9wLCBsb25nIGZsYWdzKTsKK3Vuc2lnbmVkIGludCB4ZGxfaGFzaGJpdHModW5zaWduZWQgaW50IHNpemUpOworaW50IHhkbF9udW1fb3V0KGNoYXIgKm91dCwgbG9uZyB2YWwpOworaW50IHhkbF9lbWl0X2h1bmtfaGRyKGxvbmcgczEsIGxvbmcgYzEsIGxvbmcgczIsIGxvbmcgYzIsCisJCSAgICAgIGNvbnN0IGNoYXIgKmZ1bmMsIGxvbmcgZnVuY2xlbiwgeGRlbWl0Y2JfdCAqZWNiKTsKK2ludCB4ZGxfZmFsbF9iYWNrX2RpZmYoeGRmZW52X3QgKmRpZmZfZW52LCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJICAgICAgIGludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKTsKKworCisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWFVUSUxTX0gpICovCmRpZmYgLS1naXQgYS96bGliLmMgYi96bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyYzBjNwotLS0gL2Rldi9udWxsCisrKyBiL3psaWIuYwpAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIHpsaWIgd3JhcHBlcnMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNpbGVudGx5IG1pc3MgZXJyb3JzCisgKiBhdCBpbml0IHRpbWUuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqemVycl90b19zdHJpbmcoaW50IHN0YXR1cykKK3sKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgWl9NRU1fRVJST1I6CisJCXJldHVybiAib3V0IG9mIG1lbW9yeSI7CisJY2FzZSBaX1ZFUlNJT05fRVJST1I6CisJCXJldHVybiAid3JvbmcgdmVyc2lvbiI7CisJY2FzZSBaX05FRURfRElDVDoKKwkJcmV0dXJuICJuZWVkcyBkaWN0aW9uYXJ5IjsKKwljYXNlIFpfREFUQV9FUlJPUjoKKwkJcmV0dXJuICJkYXRhIHN0cmVhbSBlcnJvciI7CisJY2FzZSBaX1NUUkVBTV9FUlJPUjoKKwkJcmV0dXJuICJzdHJlYW0gY29uc2lzdGVuY3kgZXJyb3IiOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biBlcnJvciI7CisJfQorfQorCisvKgorICogYXZhaWxfaW4gYW5kIGF2YWlsX291dCBpbiB6bGliIGFyZSBjb3VudGVkIGluIHVJbnQsIHdoaWNoIHR5cGljYWxseQorICogbGltaXRzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgd2UgY2FuIHVzZSB0byA0R0Igd2hlbiBpbnRlcmFjdGluZworICogd2l0aCB6bGliIGluIGEgc2luZ2xlIGNhbGwgdG8gaW5mbGF0ZS9kZWZsYXRlLgorICovCisvKiAjZGVmaW5lIFpMSUJfQlVGX01BWCAoKHVJbnQpLTEpICovCisjZGVmaW5lIFpMSUJfQlVGX01BWCAoKHVJbnQpIDEwMjQgKiAxMDI0ICogMTAyNCkgLyogMUdCICovCitzdGF0aWMgaW5saW5lIHVJbnQgemxpYl9idWZfY2FwKHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXJldHVybiAoWkxJQl9CVUZfTUFYIDwgbGVuKSA/IFpMSUJfQlVGX01BWCA6IGxlbjsKK30KKworc3RhdGljIHZvaWQgemxpYl9wcmVfY2FsbChnaXRfenN0cmVhbSAqcykKK3sKKwlzLT56Lm5leHRfaW4gPSBzLT5uZXh0X2luOworCXMtPnoubmV4dF9vdXQgPSBzLT5uZXh0X291dDsKKwlzLT56LnRvdGFsX2luID0gcy0+dG90YWxfaW47CisJcy0+ei50b3RhbF9vdXQgPSBzLT50b3RhbF9vdXQ7CisJcy0+ei5hdmFpbF9pbiA9IHpsaWJfYnVmX2NhcChzLT5hdmFpbF9pbik7CisJcy0+ei5hdmFpbF9vdXQgPSB6bGliX2J1Zl9jYXAocy0+YXZhaWxfb3V0KTsKK30KKworc3RhdGljIHZvaWQgemxpYl9wb3N0X2NhbGwoZ2l0X3pzdHJlYW0gKnMpCit7CisJdW5zaWduZWQgbG9uZyBieXRlc19jb25zdW1lZDsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX3Byb2R1Y2VkOworCisJYnl0ZXNfY29uc3VtZWQgPSBzLT56Lm5leHRfaW4gLSBzLT5uZXh0X2luOworCWJ5dGVzX3Byb2R1Y2VkID0gcy0+ei5uZXh0X291dCAtIHMtPm5leHRfb3V0OworCWlmIChzLT56LnRvdGFsX291dCAhPSBzLT50b3RhbF9vdXQgKyBieXRlc19wcm9kdWNlZCkKKwkJZGllKCJCVUc6IHRvdGFsX291dCBtaXNtYXRjaCIpOworCWlmIChzLT56LnRvdGFsX2luICE9IHMtPnRvdGFsX2luICsgYnl0ZXNfY29uc3VtZWQpCisJCWRpZSgiQlVHOiB0b3RhbF9pbiBtaXNtYXRjaCIpOworCisJcy0+dG90YWxfb3V0ID0gcy0+ei50b3RhbF9vdXQ7CisJcy0+dG90YWxfaW4gPSBzLT56LnRvdGFsX2luOworCXMtPm5leHRfaW4gPSBzLT56Lm5leHRfaW47CisJcy0+bmV4dF9vdXQgPSBzLT56Lm5leHRfb3V0OworCXMtPmF2YWlsX2luIC09IGJ5dGVzX2NvbnN1bWVkOworCXMtPmF2YWlsX291dCAtPSBieXRlc19wcm9kdWNlZDsKK30KKwordm9pZCBnaXRfaW5mbGF0ZV9pbml0KGdpdF96c3RyZWFtICpzdHJtKQoreworCWludCBzdGF0dXM7CisKKwl6bGliX3ByZV9jYWxsKHN0cm0pOworCXN0YXR1cyA9IGluZmxhdGVJbml0KCZzdHJtLT56KTsKKwl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKwlpZiAoc3RhdHVzID09IFpfT0spCisJCXJldHVybjsKKwlkaWUoImluZmxhdGVJbml0OiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK3ZvaWQgZ2l0X2luZmxhdGVfaW5pdF9nemlwX29ubHkoZ2l0X3pzdHJlYW0gKnN0cm0pCit7CisJLyoKKwkgKiBVc2UgZGVmYXVsdCAxNSBiaXRzLCArMTYgaXMgdG8gYWNjZXB0IG9ubHkgZ3ppcCBhbmQgdG8KKwkgKiB5aWVsZCBaX0RBVEFfRVJST1Igd2hlbiBmZWQgemxpYiBmb3JtYXQuCisJICovCisJY29uc3QgaW50IHdpbmRvd0JpdHMgPSAxNSArIDE2OworCWludCBzdGF0dXM7CisKKwl6bGliX3ByZV9jYWxsKHN0cm0pOworCXN0YXR1cyA9IGluZmxhdGVJbml0Migmc3RybS0+eiwgd2luZG93Qml0cyk7CisJemxpYl9wb3N0X2NhbGwoc3RybSk7CisJaWYgKHN0YXR1cyA9PSBaX09LKQorCQlyZXR1cm47CisJZGllKCJpbmZsYXRlSW5pdDI6ICVzICglcykiLCB6ZXJyX3RvX3N0cmluZyhzdGF0dXMpLAorCSAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKK30KKwordm9pZCBnaXRfaW5mbGF0ZV9lbmQoZ2l0X3pzdHJlYW0gKnN0cm0pCit7CisJaW50IHN0YXR1czsKKworCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJc3RhdHVzID0gaW5mbGF0ZUVuZCgmc3RybS0+eik7CisJemxpYl9wb3N0X2NhbGwoc3RybSk7CisJaWYgKHN0YXR1cyA9PSBaX09LKQorCQlyZXR1cm47CisJZXJyb3IoImluZmxhdGVFbmQ6ICVzICglcykiLCB6ZXJyX3RvX3N0cmluZyhzdGF0dXMpLAorCSAgICAgIHN0cm0tPnoubXNnID8gc3RybS0+ei5tc2cgOiAibm8gbWVzc2FnZSIpOworfQorCitpbnQgZ2l0X2luZmxhdGUoZ2l0X3pzdHJlYW0gKnN0cm0sIGludCBmbHVzaCkKK3sKKwlpbnQgc3RhdHVzOworCisJZm9yICg7OykgeworCQl6bGliX3ByZV9jYWxsKHN0cm0pOworCQkvKiBOZXZlciBzYXkgWl9GSU5JU0ggdW5sZXNzIHdlIGFyZSBmZWVkaW5nIGV2ZXJ5dGhpbmcgKi8KKwkJc3RhdHVzID0gaW5mbGF0ZSgmc3RybS0+eiwKKwkJCQkgKHN0cm0tPnouYXZhaWxfaW4gIT0gc3RybS0+YXZhaWxfaW4pCisJCQkJID8gMCA6IGZsdXNoKTsKKwkJaWYgKHN0YXR1cyA9PSBaX01FTV9FUlJPUikKKwkJCWRpZSgiaW5mbGF0ZTogb3V0IG9mIG1lbW9yeSIpOworCQl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKworCQkvKgorCQkgKiBMZXQgemxpYiB3b3JrIGFub3RoZXIgcm91bmQsIHdoaWxlIHdlIGNhbiBzdGlsbAorCQkgKiBtYWtlIHByb2dyZXNzLgorCQkgKi8KKwkJaWYgKChzdHJtLT5hdmFpbF9vdXQgJiYgIXN0cm0tPnouYXZhaWxfb3V0KSAmJgorCQkgICAgKHN0YXR1cyA9PSBaX09LIHx8IHN0YXR1cyA9PSBaX0JVRl9FUlJPUikpCisJCQljb250aW51ZTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChzdGF0dXMpIHsKKwkvKiBaX0JVRl9FUlJPUjogbm9ybWFsLCBuZWVkcyBtb3JlIHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCisJY2FzZSBaX0JVRl9FUlJPUjoKKwljYXNlIFpfT0s6CisJY2FzZSBaX1NUUkVBTV9FTkQ6CisJCXJldHVybiBzdGF0dXM7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWVycm9yKCJpbmZsYXRlOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisjaWYgZGVmaW5lZChOT19ERUZMQVRFX0JPVU5EKSB8fCBaTElCX1ZFUk5VTSA8IDB4MTIwMAorI2RlZmluZSBkZWZsYXRlQm91bmQoYyxzKSAgKChzKSArICgoKHMpICsgNykgPj4gMykgKyAoKChzKSArIDYzKSA+PiA2KSArIDExKQorI2VuZGlmCisKK3Vuc2lnbmVkIGxvbmcgZ2l0X2RlZmxhdGVfYm91bmQoZ2l0X3pzdHJlYW0gKnN0cm0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gZGVmbGF0ZUJvdW5kKCZzdHJtLT56LCBzaXplKTsKK30KKwordm9pZCBnaXRfZGVmbGF0ZV9pbml0KGdpdF96c3RyZWFtICpzdHJtLCBpbnQgbGV2ZWwpCit7CisJaW50IHN0YXR1czsKKworCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJc3RhdHVzID0gZGVmbGF0ZUluaXQoJnN0cm0tPnosIGxldmVsKTsKKwl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKwlpZiAoc3RhdHVzID09IFpfT0spCisJCXJldHVybjsKKwlkaWUoImRlZmxhdGVJbml0OiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdF9nemlwKGdpdF96c3RyZWFtICpzdHJtLCBpbnQgbGV2ZWwpCit7CisJLyoKKwkgKiBVc2UgZGVmYXVsdCAxNSBiaXRzLCArMTYgaXMgdG8gZ2VuZXJhdGUgZ3ppcCBoZWFkZXIvdHJhaWxlcgorCSAqIGluc3RlYWQgb2YgdGhlIHpsaWIgd3JhcHBlci4KKwkgKi8KKwljb25zdCBpbnQgd2luZG93Qml0cyA9IDE1ICsgMTY7CisJaW50IHN0YXR1czsKKworCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJc3RhdHVzID0gZGVmbGF0ZUluaXQyKCZzdHJtLT56LCBsZXZlbCwKKwkJCQkgIFpfREVGTEFURUQsIHdpbmRvd0JpdHMsCisJCQkJICA4LCBaX0RFRkFVTFRfU1RSQVRFR1kpOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWRpZSgiZGVmbGF0ZUluaXQyOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK2ludCBnaXRfZGVmbGF0ZV9hYm9ydChnaXRfenN0cmVhbSAqc3RybSkKK3sKKwlpbnQgc3RhdHVzOworCisJemxpYl9wcmVfY2FsbChzdHJtKTsKKwlzdGF0dXMgPSBkZWZsYXRlRW5kKCZzdHJtLT56KTsKKwl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIGdpdF9kZWZsYXRlX2VuZChnaXRfenN0cmVhbSAqc3RybSkKK3sKKwlpbnQgc3RhdHVzID0gZ2l0X2RlZmxhdGVfYWJvcnQoc3RybSk7CisKKwlpZiAoc3RhdHVzID09IFpfT0spCisJCXJldHVybjsKKwllcnJvcigiZGVmbGF0ZUVuZDogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK2ludCBnaXRfZGVmbGF0ZV9lbmRfZ2VudGx5KGdpdF96c3RyZWFtICpzdHJtKQoreworCWludCBzdGF0dXM7CisKKwl6bGliX3ByZV9jYWxsKHN0cm0pOworCXN0YXR1cyA9IGRlZmxhdGVFbmQoJnN0cm0tPnopOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBnaXRfZGVmbGF0ZShnaXRfenN0cmVhbSAqc3RybSwgaW50IGZsdXNoKQoreworCWludCBzdGF0dXM7CisKKwlmb3IgKDs7KSB7CisJCXpsaWJfcHJlX2NhbGwoc3RybSk7CisKKwkJLyogTmV2ZXIgc2F5IFpfRklOSVNIIHVubGVzcyB3ZSBhcmUgZmVlZGluZyBldmVyeXRoaW5nICovCisJCXN0YXR1cyA9IGRlZmxhdGUoJnN0cm0tPnosCisJCQkJIChzdHJtLT56LmF2YWlsX2luICE9IHN0cm0tPmF2YWlsX2luKQorCQkJCSA/IDAgOiBmbHVzaCk7CisJCWlmIChzdGF0dXMgPT0gWl9NRU1fRVJST1IpCisJCQlkaWUoImRlZmxhdGU6IG91dCBvZiBtZW1vcnkiKTsKKwkJemxpYl9wb3N0X2NhbGwoc3RybSk7CisKKwkJLyoKKwkJICogTGV0IHpsaWIgd29yayBhbm90aGVyIHJvdW5kLCB3aGlsZSB3ZSBjYW4gc3RpbGwKKwkJICogbWFrZSBwcm9ncmVzcy4KKwkJICovCisJCWlmICgoc3RybS0+YXZhaWxfb3V0ICYmICFzdHJtLT56LmF2YWlsX291dCkgJiYKKwkJICAgIChzdGF0dXMgPT0gWl9PSyB8fCBzdGF0dXMgPT0gWl9CVUZfRVJST1IpKQorCQkJY29udGludWU7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoc3RhdHVzKSB7CisJLyogWl9CVUZfRVJST1I6IG5vcm1hbCwgbmVlZHMgbW9yZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAqLworCWNhc2UgWl9CVUZfRVJST1I6CisJY2FzZSBaX09LOgorCWNhc2UgWl9TVFJFQU1fRU5EOgorCQlyZXR1cm4gc3RhdHVzOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwllcnJvcigiZGVmbGF0ZTogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7CisJcmV0dXJuIHN0YXR1czsKK30K